diff --git a/.codebeatignore b/.codebeatignore deleted file mode 100644 index 160a7b0dac271..0000000000000 --- a/.codebeatignore +++ /dev/null @@ -1,2 +0,0 @@ -nano/js/libraries/* -nano/js/libraries.min.js diff --git a/.editorconfig b/.editorconfig deleted file mode 100644 index f88e455b19c2b..0000000000000 --- a/.editorconfig +++ /dev/null @@ -1,22 +0,0 @@ -root = true - -[*] -charset = utf-8 -end_of_line = lf -insert_final_newline = true -trim_trailing_whitespace = true - -[*.{dme,dmf,dmm,dm}] -end_of_line = crlf -indent_style = tab - -[*.md] -trim_trailing_whitespace = false - -[*.py] -indent_style = space -indent_size = 4 - -[*.yml] -indent_style = space -indent_size = 2 diff --git a/.git-blame-ignore-revs b/.git-blame-ignore-revs deleted file mode 100644 index 3de6361f2d28a..0000000000000 --- a/.git-blame-ignore-revs +++ /dev/null @@ -1,27 +0,0 @@ -# git blame master ignore list. -# -# This file contains a list of git hashes of revisions to be ignored by git -# blame. These revisions are considered "unimportant" in that they -# are unlikely to be what you are interested in when blaming. -# -# Requires git 2.23 or later (or equivalent) -# To enable, execute: git config blame.ignoreRevsFile .git-blame-ignore-revs -# -# Instructions: -# - Only large (generally automated) reformatting or renaming CLs should be -# added to this list. Do not put things here just because you feel they are -# trivial or unimportant. If in doubt, do not put it on this list. -# - Precede each revision with a comment containing the first line of its log. -# For bulk work over many commits, place all commits in a block with a single -# comment at the top describing the work done in those commits. -# - Only put full 40-character hashes on this list (not short hashes or any -# other revision reference). -# - Append to the bottom of the file (revisions should be in chronological order -# from oldest to newest). -# - Because you must use a hash, you need to append to this list in a follow-up -# CL to the actual reformatting CL that you are trying to ignore. - -# Major whitespace changes but nothing else -51e1a662317e4fc5f4048bbd19375e46187dd91b -bf996203dfc4b09f8dc4dd73b532f9ee49691776 -bfa20cdc17d1794969331c4272c4a8d7ad523a44 diff --git a/.gitattributes b/.gitattributes deleted file mode 100644 index add01d675f965..0000000000000 --- a/.gitattributes +++ /dev/null @@ -1,14 +0,0 @@ -# dmm map merger hook -# needs additional setup, see tools/mapmerge/install.txt -*.dmm merge=merge-dmm - -# dmi icon merger hook -# needs additional setup, see tools/dmitool/merging.txt -*.dmi merge=merge-dmi - -# force changelog merging to use union -html/changelog.html merge=union - -# Declare files that will always have CRLF line endings on checkout. -*.dm text eol=crlf -*.dmm text eol=crlf diff --git a/.gitignore b/.gitignore deleted file mode 100644 index 4023ef50926eb..0000000000000 --- a/.gitignore +++ /dev/null @@ -1,58 +0,0 @@ -# ignore misc BYOND files -Thumbs.db -*.log -*.int -*.rsc -*.dmb -*.lk -*.backup -*.before -data/ -dmdoc/ -cfg/ -build_log.txt -use_map -stopserver -reboot_called -atupdate - -# ignore config, but not subdirs -!config/*/ -config/* -sql/test_db - -# VisualStudioCode -.vscode/* -!.vscode/settings.json -*.code-workspace -.history - -# swap -[._]*.s[a-v][a-z] -[._]*.sw[a-p] -[._]s[a-v][a-z] -[._]sw[a-p] - -# session -Session.vim - -# temporary -.netrwhist -*~ - -# auto-generated tag files -tags - -# ignore built libs -lib/*.dll -lib/*.so - -# python -*.pyc -__pycache__ - -node_modules/ -package-lock.json - -# ignore local selected map -/maps/using.dm diff --git a/.vscode/extensions.json b/.vscode/extensions.json deleted file mode 100644 index 75318ec5504e6..0000000000000 --- a/.vscode/extensions.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "recommendations": [ - "gbasood.byond-dm-language-support", - "platymuus.dm-langclient", - "eamodio.gitlens" - ] -} diff --git a/.vscode/settings.json b/.vscode/settings.json deleted file mode 100644 index d6d788f7b6dfe..0000000000000 --- a/.vscode/settings.json +++ /dev/null @@ -1,46 +0,0 @@ -{ - "files.eol": "\n", - "files.encoding": "utf8", - "files.insertFinalNewline": true, - "files.trimFinalNewlines": true, - "files.trimTrailingWhitespace": true, - - "files.associations": { - "*.{dme,dmf,dmm,dm}": "dm", - }, - "[dm]": { - "files.eol": "\r\n", - "editor.detectIndentation": false, - "editor.insertSpaces": false - }, - - "[markdown]": { - "files.trimTrailingWhitespace": false - }, - - "[python]": { - "editor.detectIndentation": false, - "editor.insertSpaces": true, - "editor.tabSize": 4 - }, - - "[yaml]": { - "editor.detectIndentation": false, - "editor.insertSpaces": true, - "editor.tabSize": 2 - }, - - "workbench.editorAssociations": { - "*.dmi": "imagePreview.previewEditor" - }, - - "debug.onTaskErrors": "abort", - "dreammaker.objectTreePane": true, - "dreammaker.autoUpdate": true, - "dreammaker.tickOnCreate": true, - - "gitlens.advanced.blame.customArguments": [ - "--ignore-revs-file", ".git-blame-ignore-revs" -], -"diffEditor.ignoreTrimWhitespace": false -} diff --git a/LICENSE b/LICENSE deleted file mode 100644 index 0ad25db4bd1d8..0000000000000 --- a/LICENSE +++ /dev/null @@ -1,661 +0,0 @@ - GNU AFFERO GENERAL PUBLIC LICENSE - Version 3, 19 November 2007 - - Copyright (C) 2007 Free Software Foundation, Inc. - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The GNU Affero General Public License is a free, copyleft license for -software and other kinds of works, specifically designed to ensure -cooperation with the community in the case of network server software. - - The licenses for most software and other practical works are designed -to take away your freedom to share and change the works. By contrast, -our General Public Licenses are intended to guarantee your freedom to -share and change all versions of a program--to make sure it remains free -software for all its users. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -them if you wish), that you receive source code or can get it if you -want it, that you can change the software or use pieces of it in new -free programs, and that you know you can do these things. - - Developers that use our General Public Licenses protect your rights -with two steps: (1) assert copyright on the software, and (2) offer -you this License which gives you legal permission to copy, distribute -and/or modify the software. - - A secondary benefit of defending all users' freedom is that -improvements made in alternate versions of the program, if they -receive widespread use, become available for other developers to -incorporate. Many developers of free software are heartened and -encouraged by the resulting cooperation. However, in the case of -software used on network servers, this result may fail to come about. -The GNU General Public License permits making a modified version and -letting the public access it on a server without ever releasing its -source code to the public. - - The GNU Affero General Public License is designed specifically to -ensure that, in such cases, the modified source code becomes available -to the community. It requires the operator of a network server to -provide the source code of the modified version running there to the -users of that server. Therefore, public use of a modified version, on -a publicly accessible server, gives the public access to the source -code of the modified version. - - An older license, called the Affero General Public License and -published by Affero, was designed to accomplish similar goals. This is -a different license, not a version of the Affero GPL, but Affero has -released a new version of the Affero GPL which permits relicensing under -this license. - - The precise terms and conditions for copying, distribution and -modification follow. - - TERMS AND CONDITIONS - - 0. Definitions. - - "This License" refers to version 3 of the GNU Affero General Public License. - - "Copyright" also means copyright-like laws that apply to other kinds of -works, such as semiconductor masks. - - "The Program" refers to any copyrightable work licensed under this -License. Each licensee is addressed as "you". "Licensees" and -"recipients" may be individuals or organizations. - - To "modify" a work means to copy from or adapt all or part of the work -in a fashion requiring copyright permission, other than the making of an -exact copy. The resulting work is called a "modified version" of the -earlier work or a work "based on" the earlier work. - - A "covered work" means either the unmodified Program or a work based -on the Program. - - To "propagate" a work means to do anything with it that, without -permission, would make you directly or secondarily liable for -infringement under applicable copyright law, except executing it on a -computer or modifying a private copy. Propagation includes copying, -distribution (with or without modification), making available to the -public, and in some countries other activities as well. - - To "convey" a work means any kind of propagation that enables other -parties to make or receive copies. Mere interaction with a user through -a computer network, with no transfer of a copy, is not conveying. - - An interactive user interface displays "Appropriate Legal Notices" -to the extent that it includes a convenient and prominently visible -feature that (1) displays an appropriate copyright notice, and (2) -tells the user that there is no warranty for the work (except to the -extent that warranties are provided), that licensees may convey the -work under this License, and how to view a copy of this License. If -the interface presents a list of user commands or options, such as a -menu, a prominent item in the list meets this criterion. - - 1. Source Code. - - The "source code" for a work means the preferred form of the work -for making modifications to it. "Object code" means any non-source -form of a work. - - A "Standard Interface" means an interface that either is an official -standard defined by a recognized standards body, or, in the case of -interfaces specified for a particular programming language, one that -is widely used among developers working in that language. - - The "System Libraries" of an executable work include anything, other -than the work as a whole, that (a) is included in the normal form of -packaging a Major Component, but which is not part of that Major -Component, and (b) serves only to enable use of the work with that -Major Component, or to implement a Standard Interface for which an -implementation is available to the public in source code form. A -"Major Component", in this context, means a major essential component -(kernel, window system, and so on) of the specific operating system -(if any) on which the executable work runs, or a compiler used to -produce the work, or an object code interpreter used to run it. - - The "Corresponding Source" for a work in object code form means all -the source code needed to generate, install, and (for an executable -work) run the object code and to modify the work, including scripts to -control those activities. However, it does not include the work's -System Libraries, or general-purpose tools or generally available free -programs which are used unmodified in performing those activities but -which are not part of the work. For example, Corresponding Source -includes interface definition files associated with source files for -the work, and the source code for shared libraries and dynamically -linked subprograms that the work is specifically designed to require, -such as by intimate data communication or control flow between those -subprograms and other parts of the work. - - The Corresponding Source need not include anything that users -can regenerate automatically from other parts of the Corresponding -Source. - - The Corresponding Source for a work in source code form is that -same work. - - 2. Basic Permissions. - - All rights granted under this License are granted for the term of -copyright on the Program, and are irrevocable provided the stated -conditions are met. This License explicitly affirms your unlimited -permission to run the unmodified Program. The output from running a -covered work is covered by this License only if the output, given its -content, constitutes a covered work. This License acknowledges your -rights of fair use or other equivalent, as provided by copyright law. - - You may make, run and propagate covered works that you do not -convey, without conditions so long as your license otherwise remains -in force. You may convey covered works to others for the sole purpose -of having them make modifications exclusively for you, or provide you -with facilities for running those works, provided that you comply with -the terms of this License in conveying all material for which you do -not control copyright. Those thus making or running the covered works -for you must do so exclusively on your behalf, under your direction -and control, on terms that prohibit them from making any copies of -your copyrighted material outside their relationship with you. - - Conveying under any other circumstances is permitted solely under -the conditions stated below. Sublicensing is not allowed; section 10 -makes it unnecessary. - - 3. Protecting Users' Legal Rights From Anti-Circumvention Law. - - No covered work shall be deemed part of an effective technological -measure under any applicable law fulfilling obligations under article -11 of the WIPO copyright treaty adopted on 20 December 1996, or -similar laws prohibiting or restricting circumvention of such -measures. - - When you convey a covered work, you waive any legal power to forbid -circumvention of technological measures to the extent such circumvention -is effected by exercising rights under this License with respect to -the covered work, and you disclaim any intention to limit operation or -modification of the work as a means of enforcing, against the work's -users, your or third parties' legal rights to forbid circumvention of -technological measures. - - 4. Conveying Verbatim Copies. - - You may convey verbatim copies of the Program's source code as you -receive it, in any medium, provided that you conspicuously and -appropriately publish on each copy an appropriate copyright notice; -keep intact all notices stating that this License and any -non-permissive terms added in accord with section 7 apply to the code; -keep intact all notices of the absence of any warranty; and give all -recipients a copy of this License along with the Program. - - You may charge any price or no price for each copy that you convey, -and you may offer support or warranty protection for a fee. - - 5. Conveying Modified Source Versions. - - You may convey a work based on the Program, or the modifications to -produce it from the Program, in the form of source code under the -terms of section 4, provided that you also meet all of these conditions: - - a) The work must carry prominent notices stating that you modified - it, and giving a relevant date. - - b) The work must carry prominent notices stating that it is - released under this License and any conditions added under section - 7. This requirement modifies the requirement in section 4 to - "keep intact all notices". - - c) You must license the entire work, as a whole, under this - License to anyone who comes into possession of a copy. This - License will therefore apply, along with any applicable section 7 - additional terms, to the whole of the work, and all its parts, - regardless of how they are packaged. This License gives no - permission to license the work in any other way, but it does not - invalidate such permission if you have separately received it. - - d) If the work has interactive user interfaces, each must display - Appropriate Legal Notices; however, if the Program has interactive - interfaces that do not display Appropriate Legal Notices, your - work need not make them do so. - - A compilation of a covered work with other separate and independent -works, which are not by their nature extensions of the covered work, -and which are not combined with it such as to form a larger program, -in or on a volume of a storage or distribution medium, is called an -"aggregate" if the compilation and its resulting copyright are not -used to limit the access or legal rights of the compilation's users -beyond what the individual works permit. Inclusion of a covered work -in an aggregate does not cause this License to apply to the other -parts of the aggregate. - - 6. Conveying Non-Source Forms. - - You may convey a covered work in object code form under the terms -of sections 4 and 5, provided that you also convey the -machine-readable Corresponding Source under the terms of this License, -in one of these ways: - - a) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by the - Corresponding Source fixed on a durable physical medium - customarily used for software interchange. - - b) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by a - written offer, valid for at least three years and valid for as - long as you offer spare parts or customer support for that product - model, to give anyone who possesses the object code either (1) a - copy of the Corresponding Source for all the software in the - product that is covered by this License, on a durable physical - medium customarily used for software interchange, for a price no - more than your reasonable cost of physically performing this - conveying of source, or (2) access to copy the - Corresponding Source from a network server at no charge. - - c) Convey individual copies of the object code with a copy of the - written offer to provide the Corresponding Source. This - alternative is allowed only occasionally and noncommercially, and - only if you received the object code with such an offer, in accord - with subsection 6b. - - d) Convey the object code by offering access from a designated - place (gratis or for a charge), and offer equivalent access to the - Corresponding Source in the same way through the same place at no - further charge. You need not require recipients to copy the - Corresponding Source along with the object code. If the place to - copy the object code is a network server, the Corresponding Source - may be on a different server (operated by you or a third party) - that supports equivalent copying facilities, provided you maintain - clear directions next to the object code saying where to find the - Corresponding Source. Regardless of what server hosts the - Corresponding Source, you remain obligated to ensure that it is - available for as long as needed to satisfy these requirements. - - e) Convey the object code using peer-to-peer transmission, provided - you inform other peers where the object code and Corresponding - Source of the work are being offered to the general public at no - charge under subsection 6d. - - A separable portion of the object code, whose source code is excluded -from the Corresponding Source as a System Library, need not be -included in conveying the object code work. - - A "User Product" is either (1) a "consumer product", which means any -tangible personal property which is normally used for personal, family, -or household purposes, or (2) anything designed or sold for incorporation -into a dwelling. In determining whether a product is a consumer product, -doubtful cases shall be resolved in favor of coverage. For a particular -product received by a particular user, "normally used" refers to a -typical or common use of that class of product, regardless of the status -of the particular user or of the way in which the particular user -actually uses, or expects or is expected to use, the product. A product -is a consumer product regardless of whether the product has substantial -commercial, industrial or non-consumer uses, unless such uses represent -the only significant mode of use of the product. - - "Installation Information" for a User Product means any methods, -procedures, authorization keys, or other information required to install -and execute modified versions of a covered work in that User Product from -a modified version of its Corresponding Source. The information must -suffice to ensure that the continued functioning of the modified object -code is in no case prevented or interfered with solely because -modification has been made. - - If you convey an object code work under this section in, or with, or -specifically for use in, a User Product, and the conveying occurs as -part of a transaction in which the right of possession and use of the -User Product is transferred to the recipient in perpetuity or for a -fixed term (regardless of how the transaction is characterized), the -Corresponding Source conveyed under this section must be accompanied -by the Installation Information. But this requirement does not apply -if neither you nor any third party retains the ability to install -modified object code on the User Product (for example, the work has -been installed in ROM). - - The requirement to provide Installation Information does not include a -requirement to continue to provide support service, warranty, or updates -for a work that has been modified or installed by the recipient, or for -the User Product in which it has been modified or installed. Access to a -network may be denied when the modification itself materially and -adversely affects the operation of the network or violates the rules and -protocols for communication across the network. - - Corresponding Source conveyed, and Installation Information provided, -in accord with this section must be in a format that is publicly -documented (and with an implementation available to the public in -source code form), and must require no special password or key for -unpacking, reading or copying. - - 7. Additional Terms. - - "Additional permissions" are terms that supplement the terms of this -License by making exceptions from one or more of its conditions. -Additional permissions that are applicable to the entire Program shall -be treated as though they were included in this License, to the extent -that they are valid under applicable law. If additional permissions -apply only to part of the Program, that part may be used separately -under those permissions, but the entire Program remains governed by -this License without regard to the additional permissions. - - When you convey a copy of a covered work, you may at your option -remove any additional permissions from that copy, or from any part of -it. (Additional permissions may be written to require their own -removal in certain cases when you modify the work.) You may place -additional permissions on material, added by you to a covered work, -for which you have or can give appropriate copyright permission. - - Notwithstanding any other provision of this License, for material you -add to a covered work, you may (if authorized by the copyright holders of -that material) supplement the terms of this License with terms: - - a) Disclaiming warranty or limiting liability differently from the - terms of sections 15 and 16 of this License; or - - b) Requiring preservation of specified reasonable legal notices or - author attributions in that material or in the Appropriate Legal - Notices displayed by works containing it; or - - c) Prohibiting misrepresentation of the origin of that material, or - requiring that modified versions of such material be marked in - reasonable ways as different from the original version; or - - d) Limiting the use for publicity purposes of names of licensors or - authors of the material; or - - e) Declining to grant rights under trademark law for use of some - trade names, trademarks, or service marks; or - - f) Requiring indemnification of licensors and authors of that - material by anyone who conveys the material (or modified versions of - it) with contractual assumptions of liability to the recipient, for - any liability that these contractual assumptions directly impose on - those licensors and authors. - - All other non-permissive additional terms are considered "further -restrictions" within the meaning of section 10. If the Program as you -received it, or any part of it, contains a notice stating that it is -governed by this License along with a term that is a further -restriction, you may remove that term. If a license document contains -a further restriction but permits relicensing or conveying under this -License, you may add to a covered work material governed by the terms -of that license document, provided that the further restriction does -not survive such relicensing or conveying. - - If you add terms to a covered work in accord with this section, you -must place, in the relevant source files, a statement of the -additional terms that apply to those files, or a notice indicating -where to find the applicable terms. - - Additional terms, permissive or non-permissive, may be stated in the -form of a separately written license, or stated as exceptions; -the above requirements apply either way. - - 8. Termination. - - You may not propagate or modify a covered work except as expressly -provided under this License. Any attempt otherwise to propagate or -modify it is void, and will automatically terminate your rights under -this License (including any patent licenses granted under the third -paragraph of section 11). - - However, if you cease all violation of this License, then your -license from a particular copyright holder is reinstated (a) -provisionally, unless and until the copyright holder explicitly and -finally terminates your license, and (b) permanently, if the copyright -holder fails to notify you of the violation by some reasonable means -prior to 60 days after the cessation. - - Moreover, your license from a particular copyright holder is -reinstated permanently if the copyright holder notifies you of the -violation by some reasonable means, this is the first time you have -received notice of violation of this License (for any work) from that -copyright holder, and you cure the violation prior to 30 days after -your receipt of the notice. - - Termination of your rights under this section does not terminate the -licenses of parties who have received copies or rights from you under -this License. If your rights have been terminated and not permanently -reinstated, you do not qualify to receive new licenses for the same -material under section 10. - - 9. Acceptance Not Required for Having Copies. - - You are not required to accept this License in order to receive or -run a copy of the Program. Ancillary propagation of a covered work -occurring solely as a consequence of using peer-to-peer transmission -to receive a copy likewise does not require acceptance. However, -nothing other than this License grants you permission to propagate or -modify any covered work. These actions infringe copyright if you do -not accept this License. Therefore, by modifying or propagating a -covered work, you indicate your acceptance of this License to do so. - - 10. Automatic Licensing of Downstream Recipients. - - Each time you convey a covered work, the recipient automatically -receives a license from the original licensors, to run, modify and -propagate that work, subject to this License. You are not responsible -for enforcing compliance by third parties with this License. - - An "entity transaction" is a transaction transferring control of an -organization, or substantially all assets of one, or subdividing an -organization, or merging organizations. If propagation of a covered -work results from an entity transaction, each party to that -transaction who receives a copy of the work also receives whatever -licenses to the work the party's predecessor in interest had or could -give under the previous paragraph, plus a right to possession of the -Corresponding Source of the work from the predecessor in interest, if -the predecessor has it or can get it with reasonable efforts. - - You may not impose any further restrictions on the exercise of the -rights granted or affirmed under this License. For example, you may -not impose a license fee, royalty, or other charge for exercise of -rights granted under this License, and you may not initiate litigation -(including a cross-claim or counterclaim in a lawsuit) alleging that -any patent claim is infringed by making, using, selling, offering for -sale, or importing the Program or any portion of it. - - 11. Patents. - - A "contributor" is a copyright holder who authorizes use under this -License of the Program or a work on which the Program is based. The -work thus licensed is called the contributor's "contributor version". - - A contributor's "essential patent claims" are all patent claims -owned or controlled by the contributor, whether already acquired or -hereafter acquired, that would be infringed by some manner, permitted -by this License, of making, using, or selling its contributor version, -but do not include claims that would be infringed only as a -consequence of further modification of the contributor version. For -purposes of this definition, "control" includes the right to grant -patent sublicenses in a manner consistent with the requirements of -this License. - - Each contributor grants you a non-exclusive, worldwide, royalty-free -patent license under the contributor's essential patent claims, to -make, use, sell, offer for sale, import and otherwise run, modify and -propagate the contents of its contributor version. - - In the following three paragraphs, a "patent license" is any express -agreement or commitment, however denominated, not to enforce a patent -(such as an express permission to practice a patent or covenant not to -sue for patent infringement). To "grant" such a patent license to a -party means to make such an agreement or commitment not to enforce a -patent against the party. - - If you convey a covered work, knowingly relying on a patent license, -and the Corresponding Source of the work is not available for anyone -to copy, free of charge and under the terms of this License, through a -publicly available network server or other readily accessible means, -then you must either (1) cause the Corresponding Source to be so -available, or (2) arrange to deprive yourself of the benefit of the -patent license for this particular work, or (3) arrange, in a manner -consistent with the requirements of this License, to extend the patent -license to downstream recipients. "Knowingly relying" means you have -actual knowledge that, but for the patent license, your conveying the -covered work in a country, or your recipient's use of the covered work -in a country, would infringe one or more identifiable patents in that -country that you have reason to believe are valid. - - If, pursuant to or in connection with a single transaction or -arrangement, you convey, or propagate by procuring conveyance of, a -covered work, and grant a patent license to some of the parties -receiving the covered work authorizing them to use, propagate, modify -or convey a specific copy of the covered work, then the patent license -you grant is automatically extended to all recipients of the covered -work and works based on it. - - A patent license is "discriminatory" if it does not include within -the scope of its coverage, prohibits the exercise of, or is -conditioned on the non-exercise of one or more of the rights that are -specifically granted under this License. You may not convey a covered -work if you are a party to an arrangement with a third party that is -in the business of distributing software, under which you make payment -to the third party based on the extent of your activity of conveying -the work, and under which the third party grants, to any of the -parties who would receive the covered work from you, a discriminatory -patent license (a) in connection with copies of the covered work -conveyed by you (or copies made from those copies), or (b) primarily -for and in connection with specific products or compilations that -contain the covered work, unless you entered into that arrangement, -or that patent license was granted, prior to 28 March 2007. - - Nothing in this License shall be construed as excluding or limiting -any implied license or other defenses to infringement that may -otherwise be available to you under applicable patent law. - - 12. No Surrender of Others' Freedom. - - If conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot convey a -covered work so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you may -not convey it at all. For example, if you agree to terms that obligate you -to collect a royalty for further conveying from those to whom you convey -the Program, the only way you could satisfy both those terms and this -License would be to refrain entirely from conveying the Program. - - 13. Remote Network Interaction; Use with the GNU General Public License. - - Notwithstanding any other provision of this License, if you modify the -Program, your modified version must prominently offer all users -interacting with it remotely through a computer network (if your version -supports such interaction) an opportunity to receive the Corresponding -Source of your version by providing access to the Corresponding Source -from a network server at no charge, through some standard or customary -means of facilitating copying of software. This Corresponding Source -shall include the Corresponding Source for any work covered by version 3 -of the GNU General Public License that is incorporated pursuant to the -following paragraph. - - Notwithstanding any other provision of this License, you have -permission to link or combine any covered work with a work licensed -under version 3 of the GNU General Public License into a single -combined work, and to convey the resulting work. The terms of this -License will continue to apply to the part which is the covered work, -but the work with which it is combined will remain governed by version -3 of the GNU General Public License. - - 14. Revised Versions of this License. - - The Free Software Foundation may publish revised and/or new versions of -the GNU Affero General Public License from time to time. Such new versions -will be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - - Each version is given a distinguishing version number. If the -Program specifies that a certain numbered version of the GNU Affero General -Public License "or any later version" applies to it, you have the -option of following the terms and conditions either of that numbered -version or of any later version published by the Free Software -Foundation. If the Program does not specify a version number of the -GNU Affero General Public License, you may choose any version ever published -by the Free Software Foundation. - - If the Program specifies that a proxy can decide which future -versions of the GNU Affero General Public License can be used, that proxy's -public statement of acceptance of a version permanently authorizes you -to choose that version for the Program. - - Later license versions may give you additional or different -permissions. However, no additional obligations are imposed on any -author or copyright holder as a result of your choosing to follow a -later version. - - 15. Disclaimer of Warranty. - - THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY -APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT -HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY -OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, -THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM -IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF -ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. Limitation of Liability. - - IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS -THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY -GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE -USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF -DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD -PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), -EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF -SUCH DAMAGES. - - 17. Interpretation of Sections 15 and 16. - - If the disclaimer of warranty and limitation of liability provided -above cannot be given local legal effect according to their terms, -reviewing courts shall apply local law that most closely approximates -an absolute waiver of all civil liability in connection with the -Program, unless a warranty or assumption of liability accompanies a -copy of the Program in return for a fee. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -state the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU Affero General Public License as published - by the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Affero General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program. If not, see . - -Also add information on how to contact you by electronic and paper mail. - - If your software can interact with users remotely through a computer -network, you should also make sure that it provides a way for users to -get its source. For example, if your program is a web application, its -interface could display a "Source" link that leads users to an archive -of the code. There are many ways you could offer source, and different -solutions will be better for different programs; see section 13 for the -specific requirements. - - You should also get your employer (if you work as a programmer) or school, -if any, to sign a "copyright disclaimer" for the program, if necessary. -For more information on this, and how to apply and follow the GNU AGPL, see -. diff --git a/README.md b/README.md deleted file mode 100644 index 7b1821ec0edf2..0000000000000 --- a/README.md +++ /dev/null @@ -1,39 +0,0 @@ -# Baystation [![License: AGPL v3](https://img.shields.io/badge/License-AGPL_v3.0-orange.svg)](https://opensource.org/licenses/AGPL-3.0) [![CI Status](https://github.com/Baystation12/Baystation12/workflows/Run%20Tests/badge.svg)](https://github.com/baystation12/baystation12/actions) [![codebeat badge](https://codebeat.co/badges/8ecb9a34-1bab-4d80-b34d-b16e8b216a03)](https://codebeat.co/projects/github-com-baystation12-baystation12-dev) - -[Website](https://bay.ss13.me) - [Discord](https://bay.ss13.me/discord) - [Code](https://github.com/baystation12/baystation12) - [DMDoc](https://doc.ss13.me) - ---- - -### CONTRIBUTING GUIDELINES - -**Please refrain from making non code related comments in pull requests on GitHub.** See the Code of Conduct on where you may provide feedback to users. - -All users are expected to review [/docs/CODE_OF_CONDUCT.md](/docs/CODE_OF_CONDUCT.md) before interacting with the repository or other users. - ---- - -### SECURITY - -Please see [/docs/SECURITY.md](/docs/SECURITY.md) for this repository's security policy, and how to report security issues. - ---- - -### LICENSE - -The code for Baystation is licensed under the [GNU Affero General Public License v3](https://www.gnu.org/licenses/agpl.html), which can be found in full in [/LICENSE](/LICENSE). - -Code with a git authorship date prior to `1420675200 +0000` (2015/01/08 00:00 GMT) is licensed under the GNU General Public License version 3, which can be found in full in [/docs/GPL3.txt](/docs/GPL3.txt) - -All code where the authorship dates on or after `1420675200 +0000` is assumed to be licensed under AGPL v3, if you wish to license under GPL v3 please make this clear in the commit message and any added files. - -If you wish to develop and host this codebase in a closed source manner you may use all commits prior to `1420675200 +0000`, which are licensed under GPL v3. The major change here is that if you host a server using any code licensed under AGPLv3 you are required to provide full source code for your servers users as well including addons and modifications you have made. - -See [here](https://www.gnu.org/licenses/why-affero-gpl.html) for more information. - -All assets including icons and sound are under a [Creative Commons 3.0 BY-SA license](https://creativecommons.org/licenses/by-sa/3.0/) unless otherwise indicated. - ---- - -### GETTING THE CODE AND INSTALLING - -Please see [/docs/installation.md](/docs/installation.md) for instructions on obtaining, installing, updating, and running this code. diff --git a/SpacemanDMM.toml b/SpacemanDMM.toml deleted file mode 100644 index 5bafd9761221e..0000000000000 --- a/SpacemanDMM.toml +++ /dev/null @@ -1,12 +0,0 @@ -[langserver] -dreamchecker = true - -[dmdoc] -use_typepath_names = true - -[debugger] -engine = "auxtools" - -[code_standards] -disallow_relative_type_definitions = true -disallow_relative_proc_definitions = true diff --git a/baystation12.dme b/baystation12.dme deleted file mode 100644 index 355377a029644..0000000000000 --- a/baystation12.dme +++ /dev/null @@ -1,3265 +0,0 @@ -// DM Environment file for baystation12.dme. -// All manual changes should be made outside the BEGIN_ and END_ blocks. - // New source code should be placed in .dm files: choose File/New --> Code File. -// BEGIN_INTERNALS -// END_INTERNALS -// BEGIN_FILE_DIR -#define FILE_DIR . -// END_FILE_DIR -// BEGIN_PREFERENCES -#define DEBUG -// END_PREFERENCES -// BEGIN_INCLUDE -#include "code\_macros.dm" -#include "code\_version.dm" -#include "code\hub.dm" -#include "code\stylesheet.dm" -#include "code\world.dm" -#include "code\__datastructures\globals.dm" -#include "code\__datastructures\priority_queue.dm" -#include "code\__datastructures\stack.dm" -#include "code\__defines\__compile_options.dm" -#include "code\__defines\__initialization.dm" -#include "code\__defines\__renderer.dm" -#include "code\__defines\_renderer.dm" -#include "code\__defines\admin.dm" -#include "code\__defines\ai_ui.dm" -#include "code\__defines\antagonists.dm" -#include "code\__defines\ao.dm" -#include "code\__defines\ao_misc.dm" -#include "code\__defines\appearance.dm" -#include "code\__defines\armor.dm" -#include "code\__defines\atmos.dm" -#include "code\__defines\atmospherics.dm" -#include "code\__defines\callback.dm" -#include "code\__defines\chemistry.dm" -#include "code\__defines\client.dm" -#include "code\__defines\colors.dm" -#include "code\__defines\culture.dm" -#include "code\__defines\damage_organs.dm" -#include "code\__defines\directions.dm" -#include "code\__defines\dna.dm" -#include "code\__defines\feedback.dm" -#include "code\__defines\flags.dm" -#include "code\__defines\fluids.dm" -#include "code\__defines\gamemode.dm" -#include "code\__defines\guns.dm" -#include "code\__defines\health.dm" -#include "code\__defines\holomap.dm" -#include "code\__defines\hydroponics.dm" -#include "code\__defines\integrated_circuits.dm" -#include "code\__defines\inventory_sizes.dm" -#include "code\__defines\is_helpers.dm" -#include "code\__defines\items_clothing.dm" -#include "code\__defines\jobs.dm" -#include "code\__defines\languages.dm" -#include "code\__defines\lighting.dm" -#include "code\__defines\lists.dm" -#include "code\__defines\machinery.dm" -#include "code\__defines\mapping.dm" -#include "code\__defines\materials.dm" -#include "code\__defines\math_physics.dm" -#include "code\__defines\MC.dm" -#include "code\__defines\misc.dm" -#include "code\__defines\mobs.dm" -#include "code\__defines\movement.dm" -#include "code\__defines\overmap.dm" -#include "code\__defines\proc_presets.dm" -#include "code\__defines\psi.dm" -#include "code\__defines\qdel.dm" -#include "code\__defines\research.dm" -#include "code\__defines\ruin_tags.dm" -#include "code\__defines\shields.dm" -#include "code\__defines\shuttle.dm" -#include "code\__defines\skills.dm" -#include "code\__defines\spaceman_dmm.dm" -#include "code\__defines\species.dm" -#include "code\__defines\subsystem-priority.dm" -#include "code\__defines\subsystems.dm" -#include "code\__defines\targeting.dm" -#include "code\__defines\temperature.dm" -#include "code\__defines\topic.dm" -#include "code\__defines\turfs.dm" -#include "code\__defines\weapons.dm" -#include "code\__defines\webhooks.dm" -#include "code\__defines\xenoarcheaology.dm" -#include "code\__defines\ZAS.dm" -#include "code\__defines\zmimic.dm" -#include "code\_global_vars\edible.dm" -#include "code\_global_vars\logging.dm" -#include "code\_global_vars\mapping.dm" -#include "code\_global_vars\misc.dm" -#include "code\_global_vars\mobs.dm" -#include "code\_global_vars\radio.dm" -#include "code\_global_vars\sensitive.dm" -#include "code\_global_vars\lists\flavor.dm" -#include "code\_global_vars\lists\locations.dm" -#include "code\_global_vars\lists\logs.dm" -#include "code\_global_vars\lists\mapping.dm" -#include "code\_global_vars\lists\names.dm" -#include "code\_global_vars\lists\objects.dm" -#include "code\_global_vars\lists\times.dm" -#include "code\_helpers\_global_objects.dm" -#include "code\_helpers\animations.dm" -#include "code\_helpers\areas.dm" -#include "code\_helpers\atmospherics.dm" -#include "code\_helpers\atom_movables.dm" -#include "code\_helpers\builtin_proc_callers.dm" -#include "code\_helpers\client.dm" -#include "code\_helpers\cmp.dm" -#include "code\_helpers\functional.dm" -#include "code\_helpers\game.dm" -#include "code\_helpers\global_lists.dm" -#include "code\_helpers\icons.dm" -#include "code\_helpers\lists.dm" -#include "code\_helpers\logging.dm" -#include "code\_helpers\maths.dm" -#include "code\_helpers\matrices.dm" -#include "code\_helpers\medical_scans.dm" -#include "code\_helpers\mobs.dm" -#include "code\_helpers\names.dm" -#include "code\_helpers\sanitize_values.dm" -#include "code\_helpers\spawn_sync.dm" -#include "code\_helpers\species.dm" -#include "code\_helpers\storage.dm" -#include "code\_helpers\text.dm" -#include "code\_helpers\time.dm" -#include "code\_helpers\tools.dm" -#include "code\_helpers\turfs.dm" -#include "code\_helpers\type2type.dm" -#include "code\_helpers\unsorted.dm" -#include "code\_helpers\vector.dm" -#include "code\_helpers\washing.dm" -#include "code\_helpers\sorts\__main.dm" -#include "code\_helpers\sorts\TimSort.dm" -#include "code\_onclick\adjacent.dm" -#include "code\_onclick\ai.dm" -#include "code\_onclick\click.dm" -#include "code\_onclick\click_handling.dm" -#include "code\_onclick\cyborg.dm" -#include "code\_onclick\drag_drop.dm" -#include "code\_onclick\ghost.dm" -#include "code\_onclick\item_attack.dm" -#include "code\_onclick\MouseDrag.dm" -#include "code\_onclick\other_mobs.dm" -#include "code\_onclick\rig.dm" -#include "code\_onclick\hud\_defines.dm" -#include "code\_onclick\hud\ability_screen_objects.dm" -#include "code\_onclick\hud\action.dm" -#include "code\_onclick\hud\animal.dm" -#include "code\_onclick\hud\fullscreen.dm" -#include "code\_onclick\hud\global_hud.dm" -#include "code\_onclick\hud\gun_mode.dm" -#include "code\_onclick\hud\hud.dm" -#include "code\_onclick\hud\human.dm" -#include "code\_onclick\hud\movable_screen_objects.dm" -#include "code\_onclick\hud\other_mobs.dm" -#include "code\_onclick\hud\pai.dm" -#include "code\_onclick\hud\robot.dm" -#include "code\_onclick\hud\screen_objects.dm" -#include "code\_onclick\hud\skybox.dm" -#include "code\controllers\admin.dm" -#include "code\controllers\autotransfer.dm" -#include "code\controllers\communications.dm" -#include "code\controllers\configuration.dm" -#include "code\controllers\controller.dm" -#include "code\controllers\failsafe.dm" -#include "code\controllers\hooks-defs.dm" -#include "code\controllers\hooks.dm" -#include "code\controllers\master.dm" -#include "code\controllers\subsystem.dm" -#include "code\controllers\verbs.dm" -#include "code\controllers\evacuation\evacuation.dm" -#include "code\controllers\evacuation\evacuation_eta.dm" -#include "code\controllers\evacuation\evacuation_helpers.dm" -#include "code\controllers\evacuation\evacuation_lifepods.dm" -#include "code\controllers\evacuation\evacuation_option.dm" -#include "code\controllers\evacuation\evacuation_pods.dm" -#include "code\controllers\evacuation\evacuation_predicate.dm" -#include "code\controllers\evacuation\evacuation_shuttle.dm" -#include "code\controllers\evacuation\~evac.dm" -#include "code\controllers\subsystems\ai.dm" -#include "code\controllers\subsystems\aifast.dm" -#include "code\controllers\subsystems\air.dm" -#include "code\controllers\subsystems\airflow.dm" -#include "code\controllers\subsystems\alarm.dm" -#include "code\controllers\subsystems\ao.dm" -#include "code\controllers\subsystems\atoms.dm" -#include "code\controllers\subsystems\chat.dm" -#include "code\controllers\subsystems\chemistry.dm" -#include "code\controllers\subsystems\circuit_component.dm" -#include "code\controllers\subsystems\evac.dm" -#include "code\controllers\subsystems\event.dm" -#include "code\controllers\subsystems\fluids.dm" -#include "code\controllers\subsystems\garbage.dm" -#include "code\controllers\subsystems\ghost_images.dm" -#include "code\controllers\subsystems\goals.dm" -#include "code\controllers\subsystems\graphs.dm" -#include "code\controllers\subsystems\holomap.dm" -#include "code\controllers\subsystems\inactivity.dm" -#include "code\controllers\subsystems\jobs.dm" -#include "code\controllers\subsystems\lighting.dm" -#include "code\controllers\subsystems\machines.dm" -#include "code\controllers\subsystems\mapping.dm" -#include "code\controllers\subsystems\misc.dm" -#include "code\controllers\subsystems\misc_slow.dm" -#include "code\controllers\subsystems\mobs.dm" -#include "code\controllers\subsystems\ping.dm" -#include "code\controllers\subsystems\plants.dm" -#include "code\controllers\subsystems\presence.dm" -#include "code\controllers\subsystems\radiation.dm" -#include "code\controllers\subsystems\shuttle.dm" -#include "code\controllers\subsystems\skybox.dm" -#include "code\controllers\subsystems\supply.dm" -#include "code\controllers\subsystems\throwing.dm" -#include "code\controllers\subsystems\ticker.dm" -#include "code\controllers\subsystems\timer.dm" -#include "code\controllers\subsystems\turf_fire.dm" -#include "code\controllers\subsystems\vote.dm" -#include "code\controllers\subsystems\zcopy.dm" -#include "code\controllers\subsystems\initialization\character_setup.dm" -#include "code\controllers\subsystems\initialization\codex.dm" -#include "code\controllers\subsystems\initialization\culture.dm" -#include "code\controllers\subsystems\initialization\customitems.dm" -#include "code\controllers\subsystems\initialization\fabrication.dm" -#include "code\controllers\subsystems\initialization\materials.dm" -#include "code\controllers\subsystems\initialization\misc.dm" -#include "code\controllers\subsystems\initialization\misc_early.dm" -#include "code\controllers\subsystems\initialization\misc_late.dm" -#include "code\controllers\subsystems\initialization\persistence.dm" -#include "code\controllers\subsystems\initialization\robots.dm" -#include "code\controllers\subsystems\initialization\webhooks.dm" -#include "code\controllers\subsystems\processing\circuit.dm" -#include "code\controllers\subsystems\processing\disposals.dm" -#include "code\controllers\subsystems\processing\fast_process.dm" -#include "code\controllers\subsystems\processing\graphs.dm" -#include "code\controllers\subsystems\processing\icon_updates.dm" -#include "code\controllers\subsystems\processing\nano.dm" -#include "code\controllers\subsystems\processing\obj.dm" -#include "code\controllers\subsystems\processing\processing.dm" -#include "code\controllers\subsystems\processing\psi.dm" -#include "code\controllers\subsystems\processing\temperature.dm" -#include "code\controllers\subsystems\processing\turf.dm" -#include "code\controllers\subsystems\processing\vines.dm" -#include "code\core\atom\Transform.dm" -#include "code\core\datum\IsAbstract.dm" -#include "code\core\image\Transform.dm" -#include "code\core\matrix\Transform.dm" -#include "code\datums\ai_law_sets.dm" -#include "code\datums\ai_laws.dm" -#include "code\datums\beam.dm" -#include "code\datums\browser.dm" -#include "code\datums\callbacks.dm" -#include "code\datums\category.dm" -#include "code\datums\cinematic.dm" -#include "code\datums\datum.dm" -#include "code\datums\footsteps.dm" -#include "code\datums\hierarchy.dm" -#include "code\datums\local_network.dm" -#include "code\datums\mil_ranks.dm" -#include "code\datums\mutable_appearance.dm" -#include "code\datums\progressbar.dm" -#include "code\datums\recipe.dm" -#include "code\datums\ruins.dm" -#include "code\datums\security_state.dm" -#include "code\datums\shackle_law_sets.dm" -#include "code\datums\sound_player.dm" -#include "code\datums\suit_sensor_jammer_method.dm" -#include "code\datums\weakref.dm" -#include "code\datums\ai\ai.dm" -#include "code\datums\ai\ai_holo.dm" -#include "code\datums\appearances\appearance_data.dm" -#include "code\datums\appearances\appearance_manager.dm" -#include "code\datums\appearances\automatic\_base.dm" -#include "code\datums\appearances\automatic\cardborg.dm" -#include "code\datums\audio\_audio.dm" -#include "code\datums\audio\_tracks.dm" -#include "code\datums\audio\jukebox.dm" -#include "code\datums\colors\color_generator.dm" -#include "code\datums\communication\_defines.dm" -#include "code\datums\communication\aooc.dm" -#include "code\datums\communication\channel.dm" -#include "code\datums\communication\dsay.dm" -#include "code\datums\communication\looc.dm" -#include "code\datums\communication\ooc.dm" -#include "code\datums\communication\pray.dm" -#include "code\datums\communication\~defines.dm" -#include "code\datums\extensions\_defines.dm" -#include "code\datums\extensions\chameleon.dm" -#include "code\datums\extensions\event_registration.dm" -#include "code\datums\extensions\extensions.dm" -#include "code\datums\extensions\fake_data.dm" -#include "code\datums\extensions\interactive.dm" -#include "code\datums\extensions\label.dm" -#include "code\datums\extensions\local_network.dm" -#include "code\datums\extensions\penetration.dm" -#include "code\datums\extensions\appearance\appearance.dm" -#include "code\datums\extensions\appearance\base_icon_state.dm" -#include "code\datums\extensions\appearance\cardborg.dm" -#include "code\datums\extensions\armor\ablative.dm" -#include "code\datums\extensions\armor\armor.dm" -#include "code\datums\extensions\armor\armor_psionic.dm" -#include "code\datums\extensions\armor\armor_rig.dm" -#include "code\datums\extensions\holster\holster.dm" -#include "code\datums\extensions\multitool\_multitool.dm" -#include "code\datums\extensions\multitool\multitool.dm" -#include "code\datums\extensions\multitool\store.dm" -#include "code\datums\extensions\multitool\circuitboards\buildtype_select.dm" -#include "code\datums\extensions\multitool\circuitboards\circuitboards.dm" -#include "code\datums\extensions\multitool\circuitboards\shuttle_console.dm" -#include "code\datums\extensions\multitool\circuitboards\stationalert.dm" -#include "code\datums\extensions\multitool\items\cable.dm" -#include "code\datums\extensions\multitool\items\clothing.dm" -#include "code\datums\extensions\multitool\items\items.dm" -#include "code\datums\extensions\multitool\items\stock_parts_radio.dm" -#include "code\datums\extensions\on_click\on_alt_click.dm" -#include "code\datums\extensions\on_click\on_click.dm" -#include "code\datums\extensions\on_click\turf_hand.dm" -#include "code\datums\extensions\scent\_scent.dm" -#include "code\datums\extensions\scent\scent_candle.dm" -#include "code\datums\extensions\scent\scent_misc.dm" -#include "code\datums\graph\graph.dm" -#include "code\datums\graph\node.dm" -#include "code\datums\helper_datums\dist_check.dm" -#include "code\datums\helper_datums\events.dm" -#include "code\datums\helper_datums\getrev.dm" -#include "code\datums\helper_datums\teleport.dm" -#include "code\datums\item_modifiers\_defines.dm" -#include "code\datums\item_modifiers\item_modifier.dm" -#include "code\datums\item_modifiers\space_suits.dm" -#include "code\datums\item_modifiers\~defines.dm" -#include "code\datums\licences\license.dm" -#include "code\datums\mind\memory.dm" -#include "code\datums\mind\mind.dm" -#include "code\datums\move_intent\move_intent.dm" -#include "code\datums\movement\_defines.dm" -#include "code\datums\movement\atom_movable.dm" -#include "code\datums\movement\mob.dm" -#include "code\datums\movement\movement.dm" -#include "code\datums\movement\multiz.dm" -#include "code\datums\movement\robot.dm" -#include "code\datums\movement\~defines.dm" -#include "code\datums\observation\_defines.dm" -#include "code\datums\observation\death.dm" -#include "code\datums\observation\density_set.dm" -#include "code\datums\observation\destroyed.dm" -#include "code\datums\observation\dir_set.dm" -#include "code\datums\observation\dismembered.dm" -#include "code\datums\observation\entered.dm" -#include "code\datums\observation\equipped.dm" -#include "code\datums\observation\exited.dm" -#include "code\datums\observation\hands_swapped.dm" -#include "code\datums\observation\helpers.dm" -#include "code\datums\observation\life.dm" -#include "code\datums\observation\logged_in.dm" -#include "code\datums\observation\logged_out.dm" -#include "code\datums\observation\module_activated.dm" -#include "code\datums\observation\module_deactivated.dm" -#include "code\datums\observation\module_deselected.dm" -#include "code\datums\observation\module_selected.dm" -#include "code\datums\observation\moved.dm" -#include "code\datums\observation\name_set.dm" -#include "code\datums\observation\observation.dm" -#include "code\datums\observation\opacity_set.dm" -#include "code\datums\observation\see_in_dark_set.dm" -#include "code\datums\observation\see_invisible_set.dm" -#include "code\datums\observation\set_invisibility.dm" -#include "code\datums\observation\shuttle_added.dm" -#include "code\datums\observation\shuttle_moved.dm" -#include "code\datums\observation\sight_set.dm" -#include "code\datums\observation\stat_set.dm" -#include "code\datums\observation\supermatter_status.dm" -#include "code\datums\observation\turf_changed.dm" -#include "code\datums\observation\unequipped.dm" -#include "code\datums\observation\zone_selected.dm" -#include "code\datums\observation\~cleanup.dm" -#include "code\datums\outfits\_defines.dm" -#include "code\datums\outfits\horror_killers.dm" -#include "code\datums\outfits\misc.dm" -#include "code\datums\outfits\nanotrasen.dm" -#include "code\datums\outfits\outfit.dm" -#include "code\datums\outfits\pirates.dm" -#include "code\datums\outfits\spec_op.dm" -#include "code\datums\outfits\tournament.dm" -#include "code\datums\outfits\wizardry.dm" -#include "code\datums\outfits\equipment\backpacks.dm" -#include "code\datums\outfits\jobs\_defines.dm" -#include "code\datums\outfits\jobs\cargo.dm" -#include "code\datums\outfits\jobs\civilian.dm" -#include "code\datums\outfits\jobs\command.dm" -#include "code\datums\outfits\jobs\engineering.dm" -#include "code\datums\outfits\jobs\job.dm" -#include "code\datums\outfits\jobs\medical.dm" -#include "code\datums\outfits\jobs\misc.dm" -#include "code\datums\outfits\jobs\science.dm" -#include "code\datums\outfits\jobs\security.dm" -#include "code\datums\proximity_trigger\proximity_trigger.dm" -#include "code\datums\proximity_trigger\turf_selection.dm" -#include "code\datums\repositories\_defines.dm" -#include "code\datums\repositories\admin_pm.dm" -#include "code\datums\repositories\areas.dm" -#include "code\datums\repositories\attack_logs.dm" -#include "code\datums\repositories\cameras.dm" -#include "code\datums\repositories\client.dm" -#include "code\datums\repositories\decls.dm" -#include "code\datums\repositories\follow.dm" -#include "code\datums\repositories\images.dm" -#include "code\datums\repositories\mobs.dm" -#include "code\datums\repositories\repository.dm" -#include "code\datums\repositories\sound_channels.dm" -#include "code\datums\repositories\unique.dm" -#include "code\datums\repositories\uplink_purchases.dm" -#include "code\datums\repositories\~defines.dm" -#include "code\datums\repositories\crew\_defines.dm" -#include "code\datums\repositories\crew\binary.dm" -#include "code\datums\repositories\crew\crew.dm" -#include "code\datums\repositories\crew\crew_sensor_modifier.dm" -#include "code\datums\repositories\crew\general.dm" -#include "code\datums\repositories\crew\tracking.dm" -#include "code\datums\repositories\crew\vital.dm" -#include "code\datums\repositories\crew\~defines.dm" -#include "code\datums\supplypacks\atmospherics.dm" -#include "code\datums\supplypacks\custodial.dm" -#include "code\datums\supplypacks\engineering.dm" -#include "code\datums\supplypacks\flooring.dm" -#include "code\datums\supplypacks\galley.dm" -#include "code\datums\supplypacks\hydroponics.dm" -#include "code\datums\supplypacks\livecargo.dm" -#include "code\datums\supplypacks\materials.dm" -#include "code\datums\supplypacks\medical.dm" -#include "code\datums\supplypacks\munitions.dm" -#include "code\datums\supplypacks\nonessent.dm" -#include "code\datums\supplypacks\operations.dm" -#include "code\datums\supplypacks\science.dm" -#include "code\datums\supplypacks\security.dm" -#include "code\datums\supplypacks\supply.dm" -#include "code\datums\supplypacks\supplypack.dm" -#include "code\datums\supplypacks\dispenser_cartridges\_dispenser_cartridges.dm" -#include "code\datums\supplypacks\dispenser_cartridges\bar.dm" -#include "code\datums\supplypacks\dispenser_cartridges\chemistry.dm" -#include "code\datums\supplypacks\dispenser_cartridges\engineering.dm" -#include "code\datums\supplypacks\dispenser_cartridges\misc.dm" -#include "code\datums\trading\_trading_defines.dm" -#include "code\datums\trading\ai.dm" -#include "code\datums\trading\food.dm" -#include "code\datums\trading\goods.dm" -#include "code\datums\trading\misc.dm" -#include "code\datums\trading\ship.dm" -#include "code\datums\trading\trade.dm" -#include "code\datums\trading\trade_response.dm" -#include "code\datums\trading\unique.dm" -#include "code\datums\trading\vox.dm" -#include "code\datums\trading\weaponry.dm" -#include "code\datums\underwear\bottom.dm" -#include "code\datums\underwear\socks.dm" -#include "code\datums\underwear\top.dm" -#include "code\datums\underwear\undershirt.dm" -#include "code\datums\underwear\underwear.dm" -#include "code\datums\uplink\ammunition.dm" -#include "code\datums\uplink\armor.dm" -#include "code\datums\uplink\augments.dm" -#include "code\datums\uplink\badassery.dm" -#include "code\datums\uplink\devices and tools.dm" -#include "code\datums\uplink\grenades.dm" -#include "code\datums\uplink\hardsuit_modules.dm" -#include "code\datums\uplink\highly_visible_and_dangerous_weapons.dm" -#include "code\datums\uplink\implants.dm" -#include "code\datums\uplink\medical.dm" -#include "code\datums\uplink\services.dm" -#include "code\datums\uplink\stealth_and_camouflage_items.dm" -#include "code\datums\uplink\stealthy_and_inconspicuous_weapons.dm" -#include "code\datums\uplink\telecrystals.dm" -#include "code\datums\uplink\uplink_categories.dm" -#include "code\datums\uplink\uplink_items.dm" -#include "code\datums\uplink\uplink_sources.dm" -#include "code\datums\vending\stored_item.dm" -#include "code\datums\vending\vending.dm" -#include "code\datums\vote\add_antag.dm" -#include "code\datums\vote\custom.dm" -#include "code\datums\vote\gamemode.dm" -#include "code\datums\vote\map.dm" -#include "code\datums\vote\restart.dm" -#include "code\datums\vote\transfer.dm" -#include "code\datums\vote\vote.dm" -#include "code\datums\wires\airlock.dm" -#include "code\datums\wires\alarm.dm" -#include "code\datums\wires\apc.dm" -#include "code\datums\wires\camera.dm" -#include "code\datums\wires\explosive.dm" -#include "code\datums\wires\fabricator.dm" -#include "code\datums\wires\nuclearbomb.dm" -#include "code\datums\wires\particle_accelerator.dm" -#include "code\datums\wires\radio.dm" -#include "code\datums\wires\robot.dm" -#include "code\datums\wires\shield_generator.dm" -#include "code\datums\wires\smartfridge.dm" -#include "code\datums\wires\smes.dm" -#include "code\datums\wires\suit_storage_unit.dm" -#include "code\datums\wires\taperecorder.dm" -#include "code\datums\wires\vending.dm" -#include "code\datums\wires\wire_description.dm" -#include "code\datums\wires\wires.dm" -#include "code\game\atoms.dm" -#include "code\game\atoms_fluids.dm" -#include "code\game\atoms_health.dm" -#include "code\game\atoms_movable.dm" -#include "code\game\atoms_temperature.dm" -#include "code\game\base_turf.dm" -#include "code\game\client_macros.dm" -#include "code\game\images.dm" -#include "code\game\movietitles.dm" -#include "code\game\response_team.dm" -#include "code\game\sound.dm" -#include "code\game\world.dm" -#include "code\game\antagonist\_antagonist_setup.dm" -#include "code\game\antagonist\antagonist.dm" -#include "code\game\antagonist\antagonist_add.dm" -#include "code\game\antagonist\antagonist_create.dm" -#include "code\game\antagonist\antagonist_equip.dm" -#include "code\game\antagonist\antagonist_factions.dm" -#include "code\game\antagonist\antagonist_helpers.dm" -#include "code\game\antagonist\antagonist_objectives.dm" -#include "code\game\antagonist\antagonist_panel.dm" -#include "code\game\antagonist\antagonist_place.dm" -#include "code\game\antagonist\antagonist_print.dm" -#include "code\game\antagonist\antagonist_update.dm" -#include "code\game\antagonist\alien\borer.dm" -#include "code\game\antagonist\outsider\actors.dm" -#include "code\game\antagonist\outsider\commando.dm" -#include "code\game\antagonist\outsider\deathsquad.dm" -#include "code\game\antagonist\outsider\ert.dm" -#include "code\game\antagonist\outsider\foundation.dm" -#include "code\game\antagonist\outsider\mercenary.dm" -#include "code\game\antagonist\outsider\ninja.dm" -#include "code\game\antagonist\outsider\paramount.dm" -#include "code\game\antagonist\outsider\raider.dm" -#include "code\game\antagonist\outsider\vox.dm" -#include "code\game\antagonist\outsider\wizard.dm" -#include "code\game\antagonist\station\changeling.dm" -#include "code\game\antagonist\station\cultist.dm" -#include "code\game\antagonist\station\loyalist.dm" -#include "code\game\antagonist\station\provocateur.dm" -#include "code\game\antagonist\station\renegade.dm" -#include "code\game\antagonist\station\revolutionary.dm" -#include "code\game\antagonist\station\rogue_ai.dm" -#include "code\game\antagonist\station\thrall.dm" -#include "code\game\antagonist\station\traitor.dm" -#include "code\game\area\area_access.dm" -#include "code\game\area\area_power.dm" -#include "code\game\area\areas.dm" -#include "code\game\area\Space Station 13 areas.dm" -#include "code\game\dna\dna2.dm" -#include "code\game\dna\dna2_domutcheck.dm" -#include "code\game\dna\dna2_helpers.dm" -#include "code\game\dna\genes\disabilities.dm" -#include "code\game\dna\genes\gene.dm" -#include "code\game\dna\genes\powers.dm" -#include "code\game\gamemodes\events.dm" -#include "code\game\gamemodes\game_mode.dm" -#include "code\game\gamemodes\game_mode_latespawn.dm" -#include "code\game\gamemodes\objective.dm" -#include "code\game\gamemodes\setupgame.dm" -#include "code\game\gamemodes\calamity\calamity.dm" -#include "code\game\gamemodes\changeling\absorbed_dna.dm" -#include "code\game\gamemodes\changeling\changeling.dm" -#include "code\game\gamemodes\changeling\changeling_powers.dm" -#include "code\game\gamemodes\changeling\modularchangling.dm" -#include "code\game\gamemodes\cult\cult.dm" -#include "code\game\gamemodes\cult\cult_items.dm" -#include "code\game\gamemodes\cult\cult_structures.dm" -#include "code\game\gamemodes\cult\ghosts.dm" -#include "code\game\gamemodes\cult\hell_universe.dm" -#include "code\game\gamemodes\cult\manifest.dm" -#include "code\game\gamemodes\cult\narsie.dm" -#include "code\game\gamemodes\cult\ritual.dm" -#include "code\game\gamemodes\cult\runes.dm" -#include "code\game\gamemodes\cult\talisman.dm" -#include "code\game\gamemodes\cult\cultify\de-cultify.dm" -#include "code\game\gamemodes\cult\cultify\mob.dm" -#include "code\game\gamemodes\cult\cultify\turf.dm" -#include "code\game\gamemodes\endgame\endgame.dm" -#include "code\game\gamemodes\endgame\bluespace_jump\bluespace_jump.dm" -#include "code\game\gamemodes\endgame\nuclear_explosion\nuclear_explosion.dm" -#include "code\game\gamemodes\events\black_hole.dm" -#include "code\game\gamemodes\events\power_failure.dm" -#include "code\game\gamemodes\events\wormholes.dm" -#include "code\game\gamemodes\events\holidays\Christmas.dm" -#include "code\game\gamemodes\extended\extended.dm" -#include "code\game\gamemodes\heist\heist.dm" -#include "code\game\gamemodes\malfunction\malf_hardware.dm" -#include "code\game\gamemodes\malfunction\malf_research.dm" -#include "code\game\gamemodes\malfunction\malf_research_ability.dm" -#include "code\game\gamemodes\malfunction\malfunction.dm" -#include "code\game\gamemodes\malfunction\newmalf_ability_trees\HARDWARE.dm" -#include "code\game\gamemodes\malfunction\newmalf_ability_trees\HELPERS.dm" -#include "code\game\gamemodes\malfunction\newmalf_ability_trees\tree_interdiction.dm" -#include "code\game\gamemodes\malfunction\newmalf_ability_trees\tree_manipulation.dm" -#include "code\game\gamemodes\malfunction\newmalf_ability_trees\tree_networking.dm" -#include "code\game\gamemodes\malfunction\newmalf_ability_trees\tree_passive.dm" -#include "code\game\gamemodes\meteor\meteor.dm" -#include "code\game\gamemodes\meteor\meteors.dm" -#include "code\game\gamemodes\mixed\crossfire.dm" -#include "code\game\gamemodes\mixed\pirates.dm" -#include "code\game\gamemodes\mixed\siege.dm" -#include "code\game\gamemodes\mixed\spyvspy.dm" -#include "code\game\gamemodes\mixed\traitorling.dm" -#include "code\game\gamemodes\mixed\uprising.dm" -#include "code\game\gamemodes\ninja\ninja.dm" -#include "code\game\gamemodes\nuclear\nuclear.dm" -#include "code\game\gamemodes\nuclear\pinpointer.dm" -#include "code\game\gamemodes\revolution\revolution.dm" -#include "code\game\gamemodes\traitor\traitor.dm" -#include "code\game\gamemodes\wizard\wizard.dm" -#include "code\game\gamemodes\wizard\servant_items\caretaker.dm" -#include "code\game\gamemodes\wizard\servant_items\champion.dm" -#include "code\game\gamemodes\wizard\servant_items\familiar.dm" -#include "code\game\gamemodes\wizard\servant_items\fiend.dm" -#include "code\game\gamemodes\wizard\servant_items\infiltrator.dm" -#include "code\game\gamemodes\wizard\servant_items\overseer.dm" -#include "code\game\jobs\_access_defs.dm" -#include "code\game\jobs\access.dm" -#include "code\game\jobs\access_datum.dm" -#include "code\game\jobs\whitelist.dm" -#include "code\game\jobs\job\assistant.dm" -#include "code\game\jobs\job\captain.dm" -#include "code\game\jobs\job\civilian.dm" -#include "code\game\jobs\job\civilian_chaplain.dm" -#include "code\game\jobs\job\engineering.dm" -#include "code\game\jobs\job\job.dm" -#include "code\game\jobs\job\medical.dm" -#include "code\game\jobs\job\science.dm" -#include "code\game\jobs\job\security.dm" -#include "code\game\jobs\job\silicon.dm" -#include "code\game\machinery\ai_slipper.dm" -#include "code\game\machinery\air_sensor.dm" -#include "code\game\machinery\alarm.dm" -#include "code\game\machinery\atmo_control.dm" -#include "code\game\machinery\barrier.dm" -#include "code\game\machinery\biogenerator.dm" -#include "code\game\machinery\bioprinter.dm" -#include "code\game\machinery\bluespace_drive.dm" -#include "code\game\machinery\bluespacerelay.dm" -#include "code\game\machinery\bodyscanner.dm" -#include "code\game\machinery\bodyscanner_console.dm" -#include "code\game\machinery\bodyscanner_display.dm" -#include "code\game\machinery\buttons.dm" -#include "code\game\machinery\CableLayer.dm" -#include "code\game\machinery\cell_charger.dm" -#include "code\game\machinery\constructable_frame.dm" -#include "code\game\machinery\cracker.dm" -#include "code\game\machinery\cryo.dm" -#include "code\game\machinery\cryopod.dm" -#include "code\game\machinery\doppler_array.dm" -#include "code\game\machinery\flasher.dm" -#include "code\game\machinery\floodlight.dm" -#include "code\game\machinery\floor_light.dm" -#include "code\game\machinery\floorlayer.dm" -#include "code\game\machinery\hologram.dm" -#include "code\game\machinery\holosign.dm" -#include "code\game\machinery\igniter.dm" -#include "code\game\machinery\jukebox.dm" -#include "code\game\machinery\lightswitch.dm" -#include "code\game\machinery\mass_driver.dm" -#include "code\game\machinery\mech_recharger.dm" -#include "code\game\machinery\navbeacon.dm" -#include "code\game\machinery\newscaster.dm" -#include "code\game\machinery\nuclear_bomb.dm" -#include "code\game\machinery\nuke_cylinder_dispenser.dm" -#include "code\game\machinery\OpTable.dm" -#include "code\game\machinery\oxygen_pump.dm" -#include "code\game\machinery\pager.dm" -#include "code\game\machinery\portable_turret.dm" -#include "code\game\machinery\recharger.dm" -#include "code\game\machinery\rechargestation.dm" -#include "code\game\machinery\requests_console.dm" -#include "code\game\machinery\robot_fabricator.dm" -#include "code\game\machinery\robotics_fabricator.dm" -#include "code\game\machinery\rotating_alarm.dm" -#include "code\game\machinery\seed_extractor.dm" -#include "code\game\machinery\self_destruct.dm" -#include "code\game\machinery\Sleeper.dm" -#include "code\game\machinery\spaceheater.dm" -#include "code\game\machinery\status_display.dm" -#include "code\game\machinery\status_display_ai.dm" -#include "code\game\machinery\status_light.dm" -#include "code\game\machinery\suit_cycler.dm" -#include "code\game\machinery\suit_cycler_units.dm" -#include "code\game\machinery\suit_storage.dm" -#include "code\game\machinery\suit_storage_units.dm" -#include "code\game\machinery\supply_display.dm" -#include "code\game\machinery\supplybeacon.dm" -#include "code\game\machinery\syndicatebeacon.dm" -#include "code\game\machinery\turret_control.dm" -#include "code\game\machinery\vending.dm" -#include "code\game\machinery\vending_deconstruction.dm" -#include "code\game\machinery\vitals_monitor.dm" -#include "code\game\machinery\wall_frames.dm" -#include "code\game\machinery\washing_machine.dm" -#include "code\game\machinery\wishgranter.dm" -#include "code\game\machinery\_machines_base\machinery.dm" -#include "code\game\machinery\_machines_base\machinery_components.dm" -#include "code\game\machinery\_machines_base\machinery_power.dm" -#include "code\game\machinery\_machines_base\machinery_public_vars.dm" -#include "code\game\machinery\_machines_base\machinery_public_vars_common.dm" -#include "code\game\machinery\_machines_base\machine_construction\_construction.dm" -#include "code\game\machinery\_machines_base\machine_construction\computer.dm" -#include "code\game\machinery\_machines_base\machine_construction\default.dm" -#include "code\game\machinery\_machines_base\machine_construction\frame.dm" -#include "code\game\machinery\_machines_base\machine_construction\item_chassis.dm" -#include "code\game\machinery\_machines_base\machine_construction\tcomms.dm" -#include "code\game\machinery\_machines_base\stock_parts\_stock_parts.dm" -#include "code\game\machinery\_machines_base\stock_parts\building_material.dm" -#include "code\game\machinery\_machines_base\stock_parts\legacy_parts.dm" -#include "code\game\machinery\_machines_base\stock_parts\stock_parts_interface.dm" -#include "code\game\machinery\_machines_base\stock_parts\stock_parts_presets.dm" -#include "code\game\machinery\_machines_base\stock_parts\power\battery.dm" -#include "code\game\machinery\_machines_base\stock_parts\power\power.dm" -#include "code\game\machinery\_machines_base\stock_parts\power\terminal.dm" -#include "code\game\machinery\_machines_base\stock_parts\power\tesla.dm" -#include "code\game\machinery\_machines_base\stock_parts\radio\radio_presets.dm" -#include "code\game\machinery\_machines_base\stock_parts\radio\receiver.dm" -#include "code\game\machinery\_machines_base\stock_parts\radio\stock_parts_radio.dm" -#include "code\game\machinery\_machines_base\stock_parts\radio\transmitter.dm" -#include "code\game\machinery\atmoalter\area_atmos_computer.dm" -#include "code\game\machinery\atmoalter\canister.dm" -#include "code\game\machinery\atmoalter\clamp.dm" -#include "code\game\machinery\atmoalter\meter.dm" -#include "code\game\machinery\atmoalter\portable_atmospherics.dm" -#include "code\game\machinery\atmoalter\pump.dm" -#include "code\game\machinery\atmoalter\scrubber.dm" -#include "code\game\machinery\camera\camera.dm" -#include "code\game\machinery\camera\camera_assembly.dm" -#include "code\game\machinery\camera\motion.dm" -#include "code\game\machinery\camera\presets.dm" -#include "code\game\machinery\camera\tracking.dm" -#include "code\game\machinery\computer\ai_core.dm" -#include "code\game\machinery\computer\arcade.dm" -#include "code\game\machinery\computer\arcade_orion.dm" -#include "code\game\machinery\computer\atmos_alert.dm" -#include "code\game\machinery\computer\atmos_control.dm" -#include "code\game\machinery\computer\buildandrepair.dm" -#include "code\game\machinery\computer\computer.dm" -#include "code\game\machinery\computer\crew.dm" -#include "code\game\machinery\computer\guestpass.dm" -#include "code\game\machinery\computer\law.dm" -#include "code\game\machinery\computer\message.dm" -#include "code\game\machinery\computer\Operating.dm" -#include "code\game\machinery\computer\prisoner.dm" -#include "code\game\machinery\computer\RCON_Console.dm" -#include "code\game\machinery\computer\robot.dm" -#include "code\game\machinery\computer\shuttle.dm" -#include "code\game\machinery\computer\station_alert.dm" -#include "code\game\machinery\doors\airlock.dm" -#include "code\game\machinery\doors\airlock_control.dm" -#include "code\game\machinery\doors\airlock_electronics.dm" -#include "code\game\machinery\doors\airlock_interactions.dm" -#include "code\game\machinery\doors\alarmlock.dm" -#include "code\game\machinery\doors\blast_door.dm" -#include "code\game\machinery\doors\braces.dm" -#include "code\game\machinery\doors\brigdoors.dm" -#include "code\game\machinery\doors\checkForMultipleDoors.dm" -#include "code\game\machinery\doors\door.dm" -#include "code\game\machinery\doors\firedoor.dm" -#include "code\game\machinery\doors\firedoor_assembly.dm" -#include "code\game\machinery\doors\multi_tile.dm" -#include "code\game\machinery\doors\simple.dm" -#include "code\game\machinery\doors\unpowered.dm" -#include "code\game\machinery\doors\windowdoor.dm" -#include "code\game\machinery\embedded_controller\airlock_controllers.dm" -#include "code\game\machinery\embedded_controller\airlock_controllers_dummy.dm" -#include "code\game\machinery\embedded_controller\airlock_docking_controller.dm" -#include "code\game\machinery\embedded_controller\airlock_docking_controller_multi.dm" -#include "code\game\machinery\embedded_controller\airlock_program.dm" -#include "code\game\machinery\embedded_controller\docking_program.dm" -#include "code\game\machinery\embedded_controller\docking_program_multi.dm" -#include "code\game\machinery\embedded_controller\embedded_controller_base.dm" -#include "code\game\machinery\embedded_controller\embedded_program_base.dm" -#include "code\game\machinery\embedded_controller\simple_docking_controller.dm" -#include "code\game\machinery\embedded_controller\tin_can.dm" -#include "code\game\machinery\kitchen\cookers.dm" -#include "code\game\machinery\kitchen\gibber.dm" -#include "code\game\machinery\kitchen\icecream.dm" -#include "code\game\machinery\kitchen\microwave.dm" -#include "code\game\machinery\kitchen\smartfridge.dm" -#include "code\game\machinery\pipe\construction.dm" -#include "code\game\machinery\pipe\pipe_dispenser.dm" -#include "code\game\machinery\pipe\pipelayer.dm" -#include "code\game\machinery\pipe\pipe_datums\device_pipe_datums.dm" -#include "code\game\machinery\pipe\pipe_datums\disposal_pipe_datums.dm" -#include "code\game\machinery\pipe\pipe_datums\pipe_datum_base.dm" -#include "code\game\machinery\pipe\pipe_datums\pipe_datums.dm" -#include "code\game\machinery\rotating_alarm\station_alerts.dm" -#include "code\game\machinery\telecomms\broadcaster.dm" -#include "code\game\machinery\telecomms\logbrowser.dm" -#include "code\game\machinery\telecomms\machine_interactions.dm" -#include "code\game\machinery\telecomms\presets.dm" -#include "code\game\machinery\telecomms\telecomunications.dm" -#include "code\game\machinery\telecomms\telemonitor.dm" -#include "code\game\machinery\teleporter\beacon.dm" -#include "code\game\machinery\teleporter\console.dm" -#include "code\game\machinery\teleporter\pad.dm" -#include "code\game\machinery\teleporter\projector.dm" -#include "code\game\objects\alien_props.dm" -#include "code\game\objects\buckling.dm" -#include "code\game\objects\empulse.dm" -#include "code\game\objects\explosion.dm" -#include "code\game\objects\explosion_recursive.dm" -#include "code\game\objects\items.dm" -#include "code\game\objects\munition.dm" -#include "code\game\objects\objs.dm" -#include "code\game\objects\structures.dm" -#include "code\game\objects\topic.dm" -#include "code\game\objects\auras\aura.dm" -#include "code\game\objects\auras\blueforge_aura.dm" -#include "code\game\objects\auras\radiant_aura.dm" -#include "code\game\objects\auras\regenerating_aura.dm" -#include "code\game\objects\auras\shadowling_aura.dm" -#include "code\game\objects\auras\starlight.dm" -#include "code\game\objects\auras\personal_shields\personal_shield.dm" -#include "code\game\objects\compass\_compass.dm" -#include "code\game\objects\compass\compass_holder.dm" -#include "code\game\objects\compass\compass_waypoint.dm" -#include "code\game\objects\effects\bump_teleporter.dm" -#include "code\game\objects\effects\effect_system.dm" -#include "code\game\objects\effects\explosion_particles.dm" -#include "code\game\objects\effects\fake_fire.dm" -#include "code\game\objects\effects\fluids.dm" -#include "code\game\objects\effects\force_portal.dm" -#include "code\game\objects\effects\gibs.dm" -#include "code\game\objects\effects\item_pickup_ghost.dm" -#include "code\game\objects\effects\landmarks.dm" -#include "code\game\objects\effects\manifest.dm" -#include "code\game\objects\effects\mines.dm" -#include "code\game\objects\effects\misc.dm" -#include "code\game\objects\effects\overlays.dm" -#include "code\game\objects\effects\portals.dm" -#include "code\game\objects\effects\spiders.dm" -#include "code\game\objects\effects\step_triggers.dm" -#include "code\game\objects\effects\temporaray.dm" -#include "code\game\objects\effects\temporary_effect.dm" -#include "code\game\objects\effects\chem\chemsmoke.dm" -#include "code\game\objects\effects\chem\foam.dm" -#include "code\game\objects\effects\chem\water.dm" -#include "code\game\objects\effects\decals\cleanable.dm" -#include "code\game\objects\effects\decals\contraband.dm" -#include "code\game\objects\effects\decals\crayon.dm" -#include "code\game\objects\effects\decals\decal.dm" -#include "code\game\objects\effects\decals\misc.dm" -#include "code\game\objects\effects\decals\remains.dm" -#include "code\game\objects\effects\decals\warning_stripes.dm" -#include "code\game\objects\effects\decals\Cleanable\aliens.dm" -#include "code\game\objects\effects\decals\Cleanable\fuel.dm" -#include "code\game\objects\effects\decals\Cleanable\humans.dm" -#include "code\game\objects\effects\decals\Cleanable\misc.dm" -#include "code\game\objects\effects\decals\Cleanable\robots.dm" -#include "code\game\objects\effects\decals\Cleanable\tracks.dm" -#include "code\game\objects\effects\decals\posters\bs12.dm" -#include "code\game\objects\effects\fire\fire.dm" -#include "code\game\objects\effects\particles\particles.dm" -#include "code\game\objects\effects\spawners\bombspawner.dm" -#include "code\game\objects\effects\spawners\gibspawner.dm" -#include "code\game\objects\effects\spawners\guns.dm" -#include "code\game\objects\items\apc_frame.dm" -#include "code\game\objects\items\blueprints.dm" -#include "code\game\objects\items\bodybag.dm" -#include "code\game\objects\items\buttons.dm" -#include "code\game\objects\items\contraband.dm" -#include "code\game\objects\items\crayons.dm" -#include "code\game\objects\items\cryobag.dm" -#include "code\game\objects\items\documents.dm" -#include "code\game\objects\items\glassjar.dm" -#include "code\game\objects\items\holosign_creator.dm" -#include "code\game\objects\items\instruments.dm" -#include "code\game\objects\items\latexballoon.dm" -#include "code\game\objects\items\paintkit.dm" -#include "code\game\objects\items\passport.dm" -#include "code\game\objects\items\plunger.dm" -#include "code\game\objects\items\rescuebag.dm" -#include "code\game\objects\items\spirit_board.dm" -#include "code\game\objects\items\toys.dm" -#include "code\game\objects\items\traitor_plush.dm" -#include "code\game\objects\items\trash.dm" -#include "code\game\objects\items\devices\aicard.dm" -#include "code\game\objects\items\devices\auto_cpr.dm" -#include "code\game\objects\items\devices\binoculars.dm" -#include "code\game\objects\items\devices\boombox.dm" -#include "code\game\objects\items\devices\cable_painter.dm" -#include "code\game\objects\items\devices\chameleonproj.dm" -#include "code\game\objects\items\devices\debugger.dm" -#include "code\game\objects\items\devices\dociler.dm" -#include "code\game\objects\items\devices\flash.dm" -#include "code\game\objects\items\devices\flashlight.dm" -#include "code\game\objects\items\devices\geiger.dm" -#include "code\game\objects\items\devices\gps.dm" -#include "code\game\objects\items\devices\hacktool.dm" -#include "code\game\objects\items\devices\holowarrant.dm" -#include "code\game\objects\items\devices\inducer.dm" -#include "code\game\objects\items\devices\lightreplacer.dm" -#include "code\game\objects\items\devices\megaphone.dm" -#include "code\game\objects\items\devices\modkit.dm" -#include "code\game\objects\items\devices\multitool.dm" -#include "code\game\objects\items\devices\oxycandle.dm" -#include "code\game\objects\items\devices\paicard.dm" -#include "code\game\objects\items\devices\paint_sprayer.dm" -#include "code\game\objects\items\devices\personal_shield.dm" -#include "code\game\objects\items\devices\powersink.dm" -#include "code\game\objects\items\devices\slide_projector.dm" -#include "code\game\objects\items\devices\spy_bug.dm" -#include "code\game\objects\items\devices\suit_cooling.dm" -#include "code\game\objects\items\devices\suit_sensor_jammer.dm" -#include "code\game\objects\items\devices\t_scanner.dm" -#include "code\game\objects\items\devices\taperecorder.dm" -#include "code\game\objects\items\devices\traitordevices.dm" -#include "code\game\objects\items\devices\transfer_valve.dm" -#include "code\game\objects\items\devices\tvcamera.dm" -#include "code\game\objects\items\devices\uplink.dm" -#include "code\game\objects\items\devices\uplink_random_lists.dm" -#include "code\game\objects\items\devices\whistle.dm" -#include "code\game\objects\items\devices\radio\electropack.dm" -#include "code\game\objects\items\devices\radio\encryptionkey.dm" -#include "code\game\objects\items\devices\radio\headset.dm" -#include "code\game\objects\items\devices\radio\intercom.dm" -#include "code\game\objects\items\devices\radio\radio.dm" -#include "code\game\objects\items\devices\scanners\_scanner.dm" -#include "code\game\objects\items\devices\scanners\gas.dm" -#include "code\game\objects\items\devices\scanners\health.dm" -#include "code\game\objects\items\devices\scanners\mass_spectrometer.dm" -#include "code\game\objects\items\devices\scanners\mining.dm" -#include "code\game\objects\items\devices\scanners\plant.dm" -#include "code\game\objects\items\devices\scanners\price.dm" -#include "code\game\objects\items\devices\scanners\reagents.dm" -#include "code\game\objects\items\devices\scanners\xenobio.dm" -#include "code\game\objects\items\robot\robot_frame.dm" -#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\matter_synth.dm" -#include "code\game\objects\items\stacks\medical.dm" -#include "code\game\objects\items\stacks\nanopaste.dm" -#include "code\game\objects\items\stacks\rods.dm" -#include "code\game\objects\items\stacks\stack.dm" -#include "code\game\objects\items\stacks\telecrystal.dm" -#include "code\game\objects\items\stacks\sheets\leather.dm" -#include "code\game\objects\items\stacks\tiles\tile_types.dm" -#include "code\game\objects\items\weapons\AI_modules.dm" -#include "code\game\objects\items\weapons\autopsy.dm" -#include "code\game\objects\items\weapons\beachball.dm" -#include "code\game\objects\items\weapons\cane.dm" -#include "code\game\objects\items\weapons\cards_ids.dm" -#include "code\game\objects\items\weapons\cards_ids_syndicate.dm" -#include "code\game\objects\items\weapons\clothingbag.dm" -#include "code\game\objects\items\weapons\clown_items.dm" -#include "code\game\objects\items\weapons\cosmetics.dm" -#include "code\game\objects\items\weapons\defib.dm" -#include "code\game\objects\items\weapons\dice.dm" -#include "code\game\objects\items\weapons\ecigs.dm" -#include "code\game\objects\items\weapons\electric_welder.dm" -#include "code\game\objects\items\weapons\explosives.dm" -#include "code\game\objects\items\weapons\extinguisher.dm" -#include "code\game\objects\items\weapons\flame.dm" -#include "code\game\objects\items\weapons\flamethrower.dm" -#include "code\game\objects\items\weapons\gift_wrappaper.dm" -#include "code\game\objects\items\weapons\handcuffs.dm" -#include "code\game\objects\items\weapons\ironing_iron.dm" -#include "code\game\objects\items\weapons\janitor_sign.dm" -#include "code\game\objects\items\weapons\lighter.dm" -#include "code\game\objects\items\weapons\mop.dm" -#include "code\game\objects\items\weapons\nuclear_cylinder.dm" -#include "code\game\objects\items\weapons\paint.dm" -#include "code\game\objects\items\weapons\policetape.dm" -#include "code\game\objects\items\weapons\RCD.dm" -#include "code\game\objects\items\weapons\RPD.dm" -#include "code\game\objects\items\weapons\RSF.dm" -#include "code\game\objects\items\weapons\scrolls.dm" -#include "code\game\objects\items\weapons\scrubpack.dm" -#include "code\game\objects\items\weapons\secrets_disk.dm" -#include "code\game\objects\items\weapons\shields.dm" -#include "code\game\objects\items\weapons\soap.dm" -#include "code\game\objects\items\weapons\staff.dm" -#include "code\game\objects\items\weapons\stunbaton.dm" -#include "code\game\objects\items\weapons\surgery_tools.dm" -#include "code\game\objects\items\weapons\swords_axes_etc.dm" -#include "code\game\objects\items\weapons\table_flags.dm" -#include "code\game\objects\items\weapons\tape.dm" -#include "code\game\objects\items\weapons\teleportation.dm" -#include "code\game\objects\items\weapons\tools_crystal.dm" -#include "code\game\objects\items\weapons\towels.dm" -#include "code\game\objects\items\weapons\traps.dm" -#include "code\game\objects\items\weapons\trays.dm" -#include "code\game\objects\items\weapons\weaponry.dm" -#include "code\game\objects\items\weapons\weldbackpack.dm" -#include "code\game\objects\items\weapons\candle\candle.dm" -#include "code\game\objects\items\weapons\candle\incense.dm" -#include "code\game\objects\items\weapons\candle\scent_decls.dm" -#include "code\game\objects\items\weapons\candle\scented.dm" -#include "code\game\objects\items\weapons\circuitboards\broken.dm" -#include "code\game\objects\items\weapons\circuitboards\circuitboard.dm" -#include "code\game\objects\items\weapons\circuitboards\other.dm" -#include "code\game\objects\items\weapons\circuitboards\computer\air_management.dm" -#include "code\game\objects\items\weapons\circuitboards\computer\computer.dm" -#include "code\game\objects\items\weapons\circuitboards\computer\holodeckcontrol.dm" -#include "code\game\objects\items\weapons\circuitboards\computer\modular.dm" -#include "code\game\objects\items\weapons\circuitboards\computer\research.dm" -#include "code\game\objects\items\weapons\circuitboards\computer\shuttle.dm" -#include "code\game\objects\items\weapons\circuitboards\computer\station_alert.dm" -#include "code\game\objects\items\weapons\circuitboards\computer\telecomms.dm" -#include "code\game\objects\items\weapons\circuitboards\machinery\biogenerator.dm" -#include "code\game\objects\items\weapons\circuitboards\machinery\bluespacedrive.dm" -#include "code\game\objects\items\weapons\circuitboards\machinery\chemistry.dm" -#include "code\game\objects\items\weapons\circuitboards\machinery\cloning.dm" -#include "code\game\objects\items\weapons\circuitboards\machinery\commsantenna.dm" -#include "code\game\objects\items\weapons\circuitboards\machinery\engineering_circuits.dm" -#include "code\game\objects\items\weapons\circuitboards\machinery\household.dm" -#include "code\game\objects\items\weapons\circuitboards\machinery\mech_recharger.dm" -#include "code\game\objects\items\weapons\circuitboards\machinery\medical.dm" -#include "code\game\objects\items\weapons\circuitboards\machinery\mining.dm" -#include "code\game\objects\items\weapons\circuitboards\machinery\mining_drill.dm" -#include "code\game\objects\items\weapons\circuitboards\machinery\oxyregenerator.dm" -#include "code\game\objects\items\weapons\circuitboards\machinery\pacman.dm" -#include "code\game\objects\items\weapons\circuitboards\machinery\portable_atmospherics.dm" -#include "code\game\objects\items\weapons\circuitboards\machinery\power.dm" -#include "code\game\objects\items\weapons\circuitboards\machinery\recharge_station.dm" -#include "code\game\objects\items\weapons\circuitboards\machinery\research.dm" -#include "code\game\objects\items\weapons\circuitboards\machinery\shieldgen.dm" -#include "code\game\objects\items\weapons\circuitboards\machinery\telecomms.dm" -#include "code\game\objects\items\weapons\circuitboards\machinery\teleporter.dm" -#include "code\game\objects\items\weapons\circuitboards\machinery\unary_atmos.dm" -#include "code\game\objects\items\weapons\grenades\anti_photon_grenade.dm" -#include "code\game\objects\items\weapons\grenades\chem_grenade.dm" -#include "code\game\objects\items\weapons\grenades\emgrenade.dm" -#include "code\game\objects\items\weapons\grenades\explosive.dm" -#include "code\game\objects\items\weapons\grenades\flashbang.dm" -#include "code\game\objects\items\weapons\grenades\grenade.dm" -#include "code\game\objects\items\weapons\grenades\light.dm" -#include "code\game\objects\items\weapons\grenades\prank_grenades.dm" -#include "code\game\objects\items\weapons\grenades\smokebomb.dm" -#include "code\game\objects\items\weapons\grenades\spawnergrenade.dm" -#include "code\game\objects\items\weapons\grenades\supermatter.dm" -#include "code\game\objects\items\weapons\implants\implant.dm" -#include "code\game\objects\items\weapons\implants\implantcase.dm" -#include "code\game\objects\items\weapons\implants\implanter.dm" -#include "code\game\objects\items\weapons\implants\implantpad.dm" -#include "code\game\objects\items\weapons\implants\implants\adrenaline.dm" -#include "code\game\objects\items\weapons\implants\implants\chem.dm" -#include "code\game\objects\items\weapons\implants\implants\compressed.dm" -#include "code\game\objects\items\weapons\implants\implants\death_alarm.dm" -#include "code\game\objects\items\weapons\implants\implants\explosive.dm" -#include "code\game\objects\items\weapons\implants\implants\freedom.dm" -#include "code\game\objects\items\weapons\implants\implants\imprinting.dm" -#include "code\game\objects\items\weapons\implants\implants\loyalty.dm" -#include "code\game\objects\items\weapons\implants\implants\tracking.dm" -#include "code\game\objects\items\weapons\implants\implants\translator.dm" -#include "code\game\objects\items\weapons\implants\implants\uplink.dm" -#include "code\game\objects\items\weapons\material\ashtray.dm" -#include "code\game\objects\items\weapons\material\bell.dm" -#include "code\game\objects\items\weapons\material\coins.dm" -#include "code\game\objects\items\weapons\material\folding.dm" -#include "code\game\objects\items\weapons\material\kitchen.dm" -#include "code\game\objects\items\weapons\material\knives.dm" -#include "code\game\objects\items\weapons\material\material_weapons.dm" -#include "code\game\objects\items\weapons\material\misc.dm" -#include "code\game\objects\items\weapons\material\shards.dm" -#include "code\game\objects\items\weapons\material\stick.dm" -#include "code\game\objects\items\weapons\material\swiss.dm" -#include "code\game\objects\items\weapons\material\swords.dm" -#include "code\game\objects\items\weapons\material\thrown.dm" -#include "code\game\objects\items\weapons\material\twohanded.dm" -#include "code\game\objects\items\weapons\material\urn.dm" -#include "code\game\objects\items\weapons\melee\energy.dm" -#include "code\game\objects\items\weapons\melee\misc.dm" -#include "code\game\objects\items\weapons\storage\backpack.dm" -#include "code\game\objects\items\weapons\storage\bags.dm" -#include "code\game\objects\items\weapons\storage\belt.dm" -#include "code\game\objects\items\weapons\storage\bible.dm" -#include "code\game\objects\items\weapons\storage\boxes.dm" -#include "code\game\objects\items\weapons\storage\briefcase.dm" -#include "code\game\objects\items\weapons\storage\fancy.dm" -#include "code\game\objects\items\weapons\storage\firstaid.dm" -#include "code\game\objects\items\weapons\storage\firstaid_indiv.dm" -#include "code\game\objects\items\weapons\storage\internal.dm" -#include "code\game\objects\items\weapons\storage\laundry_basket.dm" -#include "code\game\objects\items\weapons\storage\lockbox.dm" -#include "code\game\objects\items\weapons\storage\lunchbox.dm" -#include "code\game\objects\items\weapons\storage\med_pouch.dm" -#include "code\game\objects\items\weapons\storage\misc.dm" -#include "code\game\objects\items\weapons\storage\mre.dm" -#include "code\game\objects\items\weapons\storage\secure.dm" -#include "code\game\objects\items\weapons\storage\specialized.dm" -#include "code\game\objects\items\weapons\storage\storage.dm" -#include "code\game\objects\items\weapons\storage\toolbox.dm" -#include "code\game\objects\items\weapons\storage\uplink_kits.dm" -#include "code\game\objects\items\weapons\storage\wall_mirror.dm" -#include "code\game\objects\items\weapons\storage\wallets.dm" -#include "code\game\objects\items\weapons\storage\storage_ui\default.dm" -#include "code\game\objects\items\weapons\storage\storage_ui\storage_ui.dm" -#include "code\game\objects\items\weapons\tanks\jetpack.dm" -#include "code\game\objects\items\weapons\tanks\tank_types.dm" -#include "code\game\objects\items\weapons\tanks\tanks.dm" -#include "code\game\objects\items\weapons\tools\crowbar.dm" -#include "code\game\objects\items\weapons\tools\screwdriver.dm" -#include "code\game\objects\items\weapons\tools\weldingtool.dm" -#include "code\game\objects\items\weapons\tools\wirecutter.dm" -#include "code\game\objects\items\weapons\tools\wrench.dm" -#include "code\game\objects\random\date_based.dm" -#include "code\game\objects\random\random.dm" -#include "code\game\objects\structures\ai_decoy.dm" -#include "code\game\objects\structures\banner.dm" -#include "code\game\objects\structures\barricade.dm" -#include "code\game\objects\structures\barsign.dm" -#include "code\game\objects\structures\bedsheet_bin.dm" -#include "code\game\objects\structures\catwalk.dm" -#include "code\game\objects\structures\charge_pylon.dm" -#include "code\game\objects\structures\coathanger.dm" -#include "code\game\objects\structures\curtains.dm" -#include "code\game\objects\structures\displaycase.dm" -#include "code\game\objects\structures\dogbed.dm" -#include "code\game\objects\structures\door_assembly.dm" -#include "code\game\objects\structures\drain.dm" -#include "code\game\objects\structures\electricchair.dm" -#include "code\game\objects\structures\extinguisher.dm" -#include "code\game\objects\structures\fireaxe_cabinet.dm" -#include "code\game\objects\structures\fitness.dm" -#include "code\game\objects\structures\flora.dm" -#include "code\game\objects\structures\fountain.dm" -#include "code\game\objects\structures\girders.dm" -#include "code\game\objects\structures\grille.dm" -#include "code\game\objects\structures\handrail.dm" -#include "code\game\objects\structures\holosigns.dm" -#include "code\game\objects\structures\inflatable.dm" -#include "code\game\objects\structures\ironing_board.dm" -#include "code\game\objects\structures\iv_drip.dm" -#include "code\game\objects\structures\janicart.dm" -#include "code\game\objects\structures\lattice.dm" -#include "code\game\objects\structures\mineral_bath.dm" -#include "code\game\objects\structures\mop_bucket.dm" -#include "code\game\objects\structures\morgue.dm" -#include "code\game\objects\structures\pit.dm" -#include "code\game\objects\structures\plasticflaps.dm" -#include "code\game\objects\structures\railing.dm" -#include "code\game\objects\structures\rubble.dm" -#include "code\game\objects\structures\safe.dm" -#include "code\game\objects\structures\seaweed.dm" -#include "code\game\objects\structures\showcase.dm" -#include "code\game\objects\structures\signs.dm" -#include "code\game\objects\structures\skele_stand.dm" -#include "code\game\objects\structures\stasis_cage.dm" -#include "code\game\objects\structures\tank_dispenser.dm" -#include "code\game\objects\structures\transit_tubes.dm" -#include "code\game\objects\structures\under_wardrobe.dm" -#include "code\game\objects\structures\virologyprops.dm" -#include "code\game\objects\structures\wall_frame.dm" -#include "code\game\objects\structures\wallframe_spawner.dm" -#include "code\game\objects\structures\watercloset.dm" -#include "code\game\objects\structures\windoor_assembly.dm" -#include "code\game\objects\structures\window.dm" -#include "code\game\objects\structures\window_spawner.dm" -#include "code\game\objects\structures\crates_lockers\crates.dm" -#include "code\game\objects\structures\crates_lockers\largecrate.dm" -#include "code\game\objects\structures\crates_lockers\med_crate.dm" -#include "code\game\objects\structures\crates_lockers\closets\__closet.dm" -#include "code\game\objects\structures\crates_lockers\closets\_closet_appearance_definitions.dm" -#include "code\game\objects\structures\crates_lockers\closets\coffin.dm" -#include "code\game\objects\structures\crates_lockers\closets\crittercrate.dm" -#include "code\game\objects\structures\crates_lockers\closets\fitness.dm" -#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\malfunction.dm" -#include "code\game\objects\structures\crates_lockers\closets\statue.dm" -#include "code\game\objects\structures\crates_lockers\closets\utility_closets.dm" -#include "code\game\objects\structures\crates_lockers\closets\walllocker.dm" -#include "code\game\objects\structures\crates_lockers\closets\wardrobe.dm" -#include "code\game\objects\structures\crates_lockers\closets\secure\_secure_closets.dm" -#include "code\game\objects\structures\crates_lockers\closets\secure\bar.dm" -#include "code\game\objects\structures\crates_lockers\closets\secure\cargo.dm" -#include "code\game\objects\structures\crates_lockers\closets\secure\engineering.dm" -#include "code\game\objects\structures\crates_lockers\closets\secure\freezer.dm" -#include "code\game\objects\structures\crates_lockers\closets\secure\guncabinet.dm" -#include "code\game\objects\structures\crates_lockers\closets\secure\hydroponics.dm" -#include "code\game\objects\structures\crates_lockers\closets\secure\medical.dm" -#include "code\game\objects\structures\crates_lockers\closets\secure\personal.dm" -#include "code\game\objects\structures\crates_lockers\closets\secure\scientist.dm" -#include "code\game\objects\structures\crates_lockers\closets\secure\security.dm" -#include "code\game\objects\structures\crates_lockers\closets\secure\service.dm" -#include "code\game\objects\structures\stool_bed_chair_nest\bed.dm" -#include "code\game\objects\structures\stool_bed_chair_nest\chairs.dm" -#include "code\game\objects\structures\stool_bed_chair_nest\stools.dm" -#include "code\game\objects\structures\stool_bed_chair_nest\wheelchair.dm" -#include "code\game\turfs\simulated.dm" -#include "code\game\turfs\turf.dm" -#include "code\game\turfs\turf_ao.dm" -#include "code\game\turfs\turf_changing.dm" -#include "code\game\turfs\turf_flick_animations.dm" -#include "code\game\turfs\turf_fluids.dm" -#include "code\game\turfs\unsimulated.dm" -#include "code\game\turfs\flooring\flooring.dm" -#include "code\game\turfs\flooring\flooring_decals.dm" -#include "code\game\turfs\flooring\flooring_premade.dm" -#include "code\game\turfs\flooring\flooring_shuttle.dm" -#include "code\game\turfs\initialization\init.dm" -#include "code\game\turfs\initialization\maintenance.dm" -#include "code\game\turfs\simulated\floor.dm" -#include "code\game\turfs\simulated\floor_acts.dm" -#include "code\game\turfs\simulated\floor_attackby.dm" -#include "code\game\turfs\simulated\floor_damage.dm" -#include "code\game\turfs\simulated\floor_icon.dm" -#include "code\game\turfs\simulated\floor_static.dm" -#include "code\game\turfs\simulated\footsteps.dm" -#include "code\game\turfs\simulated\turf_ocean.dm" -#include "code\game\turfs\simulated\wall_attacks.dm" -#include "code\game\turfs\simulated\wall_icon.dm" -#include "code\game\turfs\simulated\wall_shuttle.dm" -#include "code\game\turfs\simulated\wall_types.dm" -#include "code\game\turfs\simulated\walls.dm" -#include "code\game\turfs\space\space.dm" -#include "code\game\turfs\space\transit.dm" -#include "code\game\turfs\unsimulated\beach.dm" -#include "code\game\turfs\unsimulated\floor.dm" -#include "code\game\turfs\unsimulated\walls.dm" -#include "code\game\verbs\emotions.dm" -#include "code\game\verbs\ignore.dm" -#include "code\game\verbs\ooc.dm" -#include "code\game\verbs\who.dm" -#include "code\js\byjax.dm" -#include "code\js\menus.dm" -#include "code\modules\acting\acting_items.dm" -#include "code\modules\admin\admin.dm" -#include "code\modules\admin\admin_attack_log.dm" -#include "code\modules\admin\admin_investigate.dm" -#include "code\modules\admin\admin_memo.dm" -#include "code\modules\admin\admin_ranks.dm" -#include "code\modules\admin\admin_secrets.dm" -#include "code\modules\admin\admin_verbs.dm" -#include "code\modules\admin\banjob.dm" -#include "code\modules\admin\create_mob.dm" -#include "code\modules\admin\create_object.dm" -#include "code\modules\admin\create_turf.dm" -#include "code\modules\admin\holder2.dm" -#include "code\modules\admin\holoverbs.dm" -#include "code\modules\admin\IsBanned.dm" -#include "code\modules\admin\map_capture.dm" -#include "code\modules\admin\NewBan.dm" -#include "code\modules\admin\persistence.dm" -#include "code\modules\admin\player_notes.dm" -#include "code\modules\admin\player_panel.dm" -#include "code\modules\admin\spam_prevention.dm" -#include "code\modules\admin\ticket.dm" -#include "code\modules\admin\topic.dm" -#include "code\modules\admin\buildmode\_build_mode.dm" -#include "code\modules\admin\buildmode\_buttons.dm" -#include "code\modules\admin\buildmode\_click_handler.dm" -#include "code\modules\admin\buildmode\_color_pool.dm" -#include "code\modules\admin\buildmode\_overlay.dm" -#include "code\modules\admin\buildmode\ai.dm" -#include "code\modules\admin\buildmode\areas.dm" -#include "code\modules\admin\buildmode\atmosphere.dm" -#include "code\modules\admin\buildmode\build.dm" -#include "code\modules\admin\buildmode\edit.dm" -#include "code\modules\admin\buildmode\ladders.dm" -#include "code\modules\admin\buildmode\light_maker.dm" -#include "code\modules\admin\buildmode\meteor.dm" -#include "code\modules\admin\buildmode\mob_spawning.dm" -#include "code\modules\admin\buildmode\move_into.dm" -#include "code\modules\admin\buildmode\paint.dm" -#include "code\modules\admin\buildmode\portals.dm" -#include "code\modules\admin\buildmode\radiation.dm" -#include "code\modules\admin\buildmode\relocate_to.dm" -#include "code\modules\admin\buildmode\room_builder.dm" -#include "code\modules\admin\buildmode\throw_at.dm" -#include "code\modules\admin\buildmode\turret.dm" -#include "code\modules\admin\buildmode\_datums\mob_spawner.dm" -#include "code\modules\admin\callproc\callproc.dm" -#include "code\modules\admin\DB ban\functions.dm" -#include "code\modules\admin\permissionverbs\permissionedit.dm" -#include "code\modules\admin\secrets\admin_secrets\admin_logs.dm" -#include "code\modules\admin\secrets\admin_secrets\bombing_list.dm" -#include "code\modules\admin\secrets\admin_secrets\jump_shuttle.dm" -#include "code\modules\admin\secrets\admin_secrets\launch_shuttle.dm" -#include "code\modules\admin\secrets\admin_secrets\launch_shuttle_forced.dm" -#include "code\modules\admin\secrets\admin_secrets\list_dna.dm" -#include "code\modules\admin\secrets\admin_secrets\list_fingerprints.dm" -#include "code\modules\admin\secrets\admin_secrets\move_shuttle.dm" -#include "code\modules\admin\secrets\admin_secrets\prison_warp.dm" -#include "code\modules\admin\secrets\admin_secrets\show_ai_laws.dm" -#include "code\modules\admin\secrets\admin_secrets\show_crew_manifest.dm" -#include "code\modules\admin\secrets\admin_secrets\show_game_mode.dm" -#include "code\modules\admin\secrets\admin_secrets\show_law_changes.dm" -#include "code\modules\admin\secrets\admin_secrets\show_signalers.dm" -#include "code\modules\admin\secrets\admin_secrets\toggle_circuits.dm" -#include "code\modules\admin\secrets\admin_secrets\toggle_overmap_movement.dm" -#include "code\modules\admin\secrets\admin_secrets\traitors_and_objectives.dm" -#include "code\modules\admin\secrets\debug\toggle_harddel.dm" -#include "code\modules\admin\secrets\debug\world_types.dm" -#include "code\modules\admin\secrets\fun_secrets\break_all_lights.dm" -#include "code\modules\admin\secrets\fun_secrets\break_some_lights.dm" -#include "code\modules\admin\secrets\fun_secrets\change_credits.dm" -#include "code\modules\admin\secrets\fun_secrets\fix_all_lights.dm" -#include "code\modules\admin\secrets\fun_secrets\make_all_areas_powered.dm" -#include "code\modules\admin\secrets\fun_secrets\make_all_areas_unpowered.dm" -#include "code\modules\admin\secrets\fun_secrets\power_all_smes.dm" -#include "code\modules\admin\secrets\fun_secrets\waddle.dm" -#include "code\modules\admin\secrets\investigation\attack_logs.dm" -#include "code\modules\admin\secrets\investigation\view_persistant.dm" -#include "code\modules\admin\verbs\adminhelp.dm" -#include "code\modules\admin\verbs\adminjump.dm" -#include "code\modules\admin\verbs\adminpm.dm" -#include "code\modules\admin\verbs\adminsay.dm" -#include "code\modules\admin\verbs\antag-ooc.dm" -#include "code\modules\admin\verbs\atmosdebug.dm" -#include "code\modules\admin\verbs\cinematic.dm" -#include "code\modules\admin\verbs\custom_event.dm" -#include "code\modules\admin\verbs\deadsay.dm" -#include "code\modules\admin\verbs\debug.dm" -#include "code\modules\admin\verbs\diagnostics.dm" -#include "code\modules\admin\verbs\dice.dm" -#include "code\modules\admin\verbs\fluids.dm" -#include "code\modules\admin\verbs\grief_fixers.dm" -#include "code\modules\admin\verbs\map_template_loadverb.dm" -#include "code\modules\admin\verbs\mapping.dm" -#include "code\modules\admin\verbs\massmodvar.dm" -#include "code\modules\admin\verbs\modifyvariables.dm" -#include "code\modules\admin\verbs\playsound.dm" -#include "code\modules\admin\verbs\possess.dm" -#include "code\modules\admin\verbs\pray.dm" -#include "code\modules\admin\verbs\randomverbs.dm" -#include "code\modules\admin\verbs\SDQL.dm" -#include "code\modules\admin\verbs\striketeam.dm" -#include "code\modules\admin\verbs\trading_verbs.dm" -#include "code\modules\admin\verbs\SDQL_2\SDQL_2.dm" -#include "code\modules\admin\verbs\SDQL_2\SDQL_2_parser.dm" -#include "code\modules\admin\verbs\SDQL_2\SDQL_2_std.dm" -#include "code\modules\admin\view_variables\helpers.dm" -#include "code\modules\admin\view_variables\topic.dm" -#include "code\modules\admin\view_variables\view_variables.dm" -#include "code\modules\admin\view_variables\view_variables_global.dm" -#include "code\modules\admin\view_variables\vv_set_handlers.dm" -#include "code\modules\ai\_defines.dm" -#include "code\modules\ai\ai_holder.dm" -#include "code\modules\ai\ai_holder_combat.dm" -#include "code\modules\ai\ai_holder_combat_unseen.dm" -#include "code\modules\ai\ai_holder_communication.dm" -#include "code\modules\ai\ai_holder_cooperation.dm" -#include "code\modules\ai\ai_holder_debug.dm" -#include "code\modules\ai\ai_holder_disabled.dm" -#include "code\modules\ai\ai_holder_fleeing.dm" -#include "code\modules\ai\ai_holder_follow.dm" -#include "code\modules\ai\ai_holder_movement.dm" -#include "code\modules\ai\ai_holder_pathfinding.dm" -#include "code\modules\ai\ai_holder_targeting.dm" -#include "code\modules\ai\interfaces.dm" -#include "code\modules\ai\say_list.dm" -#include "code\modules\ai\aI_holder_subtypes\simple_mob_ai.dm" -#include "code\modules\alarm\alarm.dm" -#include "code\modules\alarm\alarm_handler.dm" -#include "code\modules\alarm\atmosphere_alarm.dm" -#include "code\modules\alarm\camera_alarm.dm" -#include "code\modules\alarm\fire_alarm.dm" -#include "code\modules\alarm\motion_alarm.dm" -#include "code\modules\alarm\power_alarm.dm" -#include "code\modules\assembly\assembly.dm" -#include "code\modules\assembly\helpers.dm" -#include "code\modules\assembly\holder.dm" -#include "code\modules\assembly\igniter.dm" -#include "code\modules\assembly\infrared.dm" -#include "code\modules\assembly\mousetrap.dm" -#include "code\modules\assembly\proximity.dm" -#include "code\modules\assembly\shock_kit.dm" -#include "code\modules\assembly\signaler.dm" -#include "code\modules\assembly\timer.dm" -#include "code\modules\assembly\voice.dm" -#include "code\modules\atmospherics\_atmos_setup.dm" -#include "code\modules\atmospherics\atmos_primitives.dm" -#include "code\modules\atmospherics\atmospherics.dm" -#include "code\modules\atmospherics\datum_pipe_network.dm" -#include "code\modules\atmospherics\datum_pipeline.dm" -#include "code\modules\atmospherics\he_pipes.dm" -#include "code\modules\atmospherics\pipes.dm" -#include "code\modules\atmospherics\components\pipesparker.dm" -#include "code\modules\atmospherics\components\portables_connector.dm" -#include "code\modules\atmospherics\components\shutoff.dm" -#include "code\modules\atmospherics\components\tvalve.dm" -#include "code\modules\atmospherics\components\valve.dm" -#include "code\modules\atmospherics\components\binary_devices\binary_atmos_base.dm" -#include "code\modules\atmospherics\components\binary_devices\circulator.dm" -#include "code\modules\atmospherics\components\binary_devices\oxyregenerator.dm" -#include "code\modules\atmospherics\components\binary_devices\passive_gate.dm" -#include "code\modules\atmospherics\components\binary_devices\pump.dm" -#include "code\modules\atmospherics\components\binary_devices\volume_pump.dm" -#include "code\modules\atmospherics\components\omni_devices\_omni_extras.dm" -#include "code\modules\atmospherics\components\omni_devices\filter.dm" -#include "code\modules\atmospherics\components\omni_devices\mixer.dm" -#include "code\modules\atmospherics\components\omni_devices\omni_base.dm" -#include "code\modules\atmospherics\components\trinary_devices\trinary_base.dm" -#include "code\modules\atmospherics\components\unary\cold_sink.dm" -#include "code\modules\atmospherics\components\unary\generator_input.dm" -#include "code\modules\atmospherics\components\unary\heat_exchanger.dm" -#include "code\modules\atmospherics\components\unary\heat_source.dm" -#include "code\modules\atmospherics\components\unary\outlet_injector.dm" -#include "code\modules\atmospherics\components\unary\tank.dm" -#include "code\modules\atmospherics\components\unary\unary_base.dm" -#include "code\modules\atmospherics\components\unary\vent_pump.dm" -#include "code\modules\atmospherics\components\unary\vent_scrubber.dm" -#include "code\modules\augment\active.dm" -#include "code\modules\augment\augment.dm" -#include "code\modules\augment\implanter.dm" -#include "code\modules\augment\item.dm" -#include "code\modules\augment\active\adaptive_binoculars.dm" -#include "code\modules\augment\active\armblades.dm" -#include "code\modules\augment\active\circuit.dm" -#include "code\modules\augment\active\corrective_lenses.dm" -#include "code\modules\augment\active\glare_dampeners.dm" -#include "code\modules\augment\active\hudimplants.dm" -#include "code\modules\augment\active\iatric_monitor.dm" -#include "code\modules\augment\active\internal_air_system.dm" -#include "code\modules\augment\active\leukocyte_breeder.dm" -#include "code\modules\augment\active\nerve_dampeners.dm" -#include "code\modules\augment\active\polytool.dm" -#include "code\modules\augment\active\popout_shotgun.dm" -#include "code\modules\augment\active\powerfist.dm" -#include "code\modules\augment\active\tool\engineering.dm" -#include "code\modules\augment\active\tool\surgical.dm" -#include "code\modules\augment\passive\armor.dm" -#include "code\modules\augment\passive\boost.dm" -#include "code\modules\augment\passive\fluff.dm" -#include "code\modules\augment\passive\nanoaura.dm" -#include "code\modules\augment\passive\boost\muscle.dm" -#include "code\modules\augment\passive\boost\reflex.dm" -#include "code\modules\augment\passive\boost\shooting.dm" -#include "code\modules\blob\blob.dm" -#include "code\modules\butchery\butchery.dm" -#include "code\modules\butchery\remains.dm" -#include "code\modules\client\asset_cache.dm" -#include "code\modules\client\client_color.dm" -#include "code\modules\client\client_defines.dm" -#include "code\modules\client\client_helpers.dm" -#include "code\modules\client\client_procs.dm" -#include "code\modules\client\darkmode.dm" -#include "code\modules\client\movement.dm" -#include "code\modules\client\preferences.dm" -#include "code\modules\client\preferences_persist.dm" -#include "code\modules\client\preferences_spawnpoints.dm" -#include "code\modules\client\preferences_storage.dm" -#include "code\modules\client\preferences_toggle.dm" -#include "code\modules\client\ui_style.dm" -#include "code\modules\client\preference_setup\_defines.dm" -#include "code\modules\client\preference_setup\preference_setup.dm" -#include "code\modules\client\preference_setup\antagonism\01_candidacy.dm" -#include "code\modules\client\preference_setup\antagonism\02_setup.dm" -#include "code\modules\client\preference_setup\background\01_culture.dm" -#include "code\modules\client\preference_setup\background\02_language.dm" -#include "code\modules\client\preference_setup\background\03_records.dm" -#include "code\modules\client\preference_setup\general\01_basic.dm" -#include "code\modules\client\preference_setup\general\02_body.dm" -#include "code\modules\client\preference_setup\general\03_equipment.dm" -#include "code\modules\client\preference_setup\general\04_flavor.dm" -#include "code\modules\client\preference_setup\general\05_preview.dm" -#include "code\modules\client\preference_setup\global\01_ui.dm" -#include "code\modules\client\preference_setup\global\02_prefixes.dm" -#include "code\modules\client\preference_setup\global\03_pai.dm" -#include "code\modules\client\preference_setup\global\04_ooc.dm" -#include "code\modules\client\preference_setup\global\05_settings.dm" -#include "code\modules\client\preference_setup\global\preferences.dm" -#include "code\modules\client\preference_setup\global\prefixes.dm" -#include "code\modules\client\preference_setup\laws\laws_pref.dm" -#include "code\modules\client\preference_setup\loadout\_defines.dm" -#include "code\modules\client\preference_setup\loadout\gear_tweaks.dm" -#include "code\modules\client\preference_setup\loadout\loadout.dm" -#include "code\modules\client\preference_setup\loadout\lists\accessories.dm" -#include "code\modules\client\preference_setup\loadout\lists\augments.dm" -#include "code\modules\client\preference_setup\loadout\lists\clothing.dm" -#include "code\modules\client\preference_setup\loadout\lists\earwear.dm" -#include "code\modules\client\preference_setup\loadout\lists\eyegear.dm" -#include "code\modules\client\preference_setup\loadout\lists\footwear.dm" -#include "code\modules\client\preference_setup\loadout\lists\gloves.dm" -#include "code\modules\client\preference_setup\loadout\lists\headwear.dm" -#include "code\modules\client\preference_setup\loadout\lists\misc.dm" -#include "code\modules\client\preference_setup\loadout\lists\storage.dm" -#include "code\modules\client\preference_setup\loadout\lists\suits.dm" -#include "code\modules\client\preference_setup\loadout\lists\tactical.dm" -#include "code\modules\client\preference_setup\loadout\lists\uniforms.dm" -#include "code\modules\client\preference_setup\loadout\lists\utility.dm" -#include "code\modules\client\preference_setup\loadout\lists\xenowear.dm" -#include "code\modules\client\preference_setup\occupation\occupation.dm" -#include "code\modules\client\preference_setup\occupation\skill_selection.dm" -#include "code\modules\clothing\_clothing.dm" -#include "code\modules\clothing\_clothing_flags.dm" -#include "code\modules\clothing\buttons.dm" -#include "code\modules\clothing\chameleon.dm" -#include "code\modules\clothing\clothing_accessories.dm" -#include "code\modules\clothing\clothing_forensics.dm" -#include "code\modules\clothing\ears\earrings.dm" -#include "code\modules\clothing\ears\headphones.dm" -#include "code\modules\clothing\ears\skrell.dm" -#include "code\modules\clothing\glasses\blindfolds.dm" -#include "code\modules\clothing\glasses\eyepatch.dm" -#include "code\modules\clothing\glasses\glasses.dm" -#include "code\modules\clothing\glasses\hud.dm" -#include "code\modules\clothing\glasses\prescription.dm" -#include "code\modules\clothing\glasses\sunglasses.dm" -#include "code\modules\clothing\glasses\thermals.dm" -#include "code\modules\clothing\gloves\boxing.dm" -#include "code\modules\clothing\gloves\color.dm" -#include "code\modules\clothing\gloves\miscellaneous.dm" -#include "code\modules\clothing\head\collectable.dm" -#include "code\modules\clothing\head\hardhat.dm" -#include "code\modules\clothing\head\helmet.dm" -#include "code\modules\clothing\head\jobs.dm" -#include "code\modules\clothing\head\misc.dm" -#include "code\modules\clothing\head\misc_special.dm" -#include "code\modules\clothing\head\soft_caps.dm" -#include "code\modules\clothing\masks\boxing.dm" -#include "code\modules\clothing\masks\breath.dm" -#include "code\modules\clothing\masks\chewable.dm" -#include "code\modules\clothing\masks\cig_crafting.dm" -#include "code\modules\clothing\masks\gasmask.dm" -#include "code\modules\clothing\masks\miscellaneous.dm" -#include "code\modules\clothing\masks\monitor.dm" -#include "code\modules\clothing\masks\smokable.dm" -#include "code\modules\clothing\masks\voice.dm" -#include "code\modules\clothing\rings\material.dm" -#include "code\modules\clothing\rings\rings.dm" -#include "code\modules\clothing\shoes\colour.dm" -#include "code\modules\clothing\shoes\jobs.dm" -#include "code\modules\clothing\shoes\magboots.dm" -#include "code\modules\clothing\shoes\miscellaneous.dm" -#include "code\modules\clothing\spacesuits\alien.dm" -#include "code\modules\clothing\spacesuits\breaches.dm" -#include "code\modules\clothing\spacesuits\captain.dm" -#include "code\modules\clothing\spacesuits\miscellaneous.dm" -#include "code\modules\clothing\spacesuits\spacesuits.dm" -#include "code\modules\clothing\spacesuits\syndi.dm" -#include "code\modules\clothing\spacesuits\rig\rig.dm" -#include "code\modules\clothing\spacesuits\rig\rig_attackby.dm" -#include "code\modules\clothing\spacesuits\rig\rig_pieces.dm" -#include "code\modules\clothing\spacesuits\rig\rig_verbs.dm" -#include "code\modules\clothing\spacesuits\rig\rig_wiring.dm" -#include "code\modules\clothing\spacesuits\rig\modules\combat.dm" -#include "code\modules\clothing\spacesuits\rig\modules\computer.dm" -#include "code\modules\clothing\spacesuits\rig\modules\modules.dm" -#include "code\modules\clothing\spacesuits\rig\modules\ninja.dm" -#include "code\modules\clothing\spacesuits\rig\modules\utility.dm" -#include "code\modules\clothing\spacesuits\rig\modules\vision.dm" -#include "code\modules\clothing\spacesuits\rig\suits\alien.dm" -#include "code\modules\clothing\spacesuits\rig\suits\combat.dm" -#include "code\modules\clothing\spacesuits\rig\suits\ert.dm" -#include "code\modules\clothing\spacesuits\rig\suits\light.dm" -#include "code\modules\clothing\spacesuits\rig\suits\merc.dm" -#include "code\modules\clothing\spacesuits\rig\suits\station.dm" -#include "code\modules\clothing\spacesuits\rig\suits\vox.dm" -#include "code\modules\clothing\spacesuits\void\merc.dm" -#include "code\modules\clothing\spacesuits\void\misc.dm" -#include "code\modules\clothing\spacesuits\void\station.dm" -#include "code\modules\clothing\spacesuits\void\void.dm" -#include "code\modules\clothing\spacesuits\void\wizard.dm" -#include "code\modules\clothing\suits\alien.dm" -#include "code\modules\clothing\suits\armor.dm" -#include "code\modules\clothing\suits\bio.dm" -#include "code\modules\clothing\suits\jobs.dm" -#include "code\modules\clothing\suits\labcoat.dm" -#include "code\modules\clothing\suits\miscellaneous.dm" -#include "code\modules\clothing\suits\storage.dm" -#include "code\modules\clothing\suits\toggles.dm" -#include "code\modules\clothing\suits\utility.dm" -#include "code\modules\clothing\suits\wiz_robe.dm" -#include "code\modules\clothing\under\casual_pants.dm" -#include "code\modules\clothing\under\color.dm" -#include "code\modules\clothing\under\corporate.dm" -#include "code\modules\clothing\under\formal_pants.dm" -#include "code\modules\clothing\under\miscellaneous.dm" -#include "code\modules\clothing\under\shorts.dm" -#include "code\modules\clothing\under\skirts.dm" -#include "code\modules\clothing\under\syndicate.dm" -#include "code\modules\clothing\under\accessories\_accessory.dm" -#include "code\modules\clothing\under\accessories\arm_guards.dm" -#include "code\modules\clothing\under\accessories\armband.dm" -#include "code\modules\clothing\under\accessories\armor_plate.dm" -#include "code\modules\clothing\under\accessories\armor_tag.dm" -#include "code\modules\clothing\under\accessories\badges.dm" -#include "code\modules\clothing\under\accessories\bowtie.dm" -#include "code\modules\clothing\under\accessories\bracelet.dm" -#include "code\modules\clothing\under\accessories\buddy_tag.dm" -#include "code\modules\clothing\under\accessories\chaplain.dm" -#include "code\modules\clothing\under\accessories\corpjacket.dm" -#include "code\modules\clothing\under\accessories\dashiki.dm" -#include "code\modules\clothing\under\accessories\fire_overpants.dm" -#include "code\modules\clothing\under\accessories\flannel_shirt.dm" -#include "code\modules\clothing\under\accessories\ftu_pin.dm" -#include "code\modules\clothing\under\accessories\hawaii.dm" -#include "code\modules\clothing\under\accessories\helmcover.dm" -#include "code\modules\clothing\under\accessories\helmet_decor.dm" -#include "code\modules\clothing\under\accessories\holster.dm" -#include "code\modules\clothing\under\accessories\kneepads.dm" -#include "code\modules\clothing\under\accessories\leg_guards.dm" -#include "code\modules\clothing\under\accessories\lockets.dm" -#include "code\modules\clothing\under\accessories\medals.dm" -#include "code\modules\clothing\under\accessories\neckerchief.dm" -#include "code\modules\clothing\under\accessories\necklace.dm" -#include "code\modules\clothing\under\accessories\pouches.dm" -#include "code\modules\clothing\under\accessories\pride_pin.dm" -#include "code\modules\clothing\under\accessories\pronouns.dm" -#include "code\modules\clothing\under\accessories\qipao.dm" -#include "code\modules\clothing\under\accessories\scarf.dm" -#include "code\modules\clothing\under\accessories\sherwani.dm" -#include "code\modules\clothing\under\accessories\stethoscope.dm" -#include "code\modules\clothing\under\accessories\storage.dm" -#include "code\modules\clothing\under\accessories\suit_jacket.dm" -#include "code\modules\clothing\under\accessories\suit_vest.dm" -#include "code\modules\clothing\under\accessories\suspenders.dm" -#include "code\modules\clothing\under\accessories\sweater.dm" -#include "code\modules\clothing\under\accessories\tangzhuang.dm" -#include "code\modules\clothing\under\accessories\thawb.dm" -#include "code\modules\clothing\under\accessories\ties.dm" -#include "code\modules\clothing\under\accessories\tunic.dm" -#include "code\modules\clothing\under\accessories\ubac.dm" -#include "code\modules\clothing\under\accessories\waistcoat.dm" -#include "code\modules\clothing\under\accessories\wristwatches.dm" -#include "code\modules\clothing\under\accessories\zhongshan.dm" -#include "code\modules\clothing\under\jobs\civilian.dm" -#include "code\modules\clothing\under\jobs\engineering.dm" -#include "code\modules\clothing\under\jobs\medsci.dm" -#include "code\modules\clothing\under\jobs\security.dm" -#include "code\modules\clothing\underwear\base.dm" -#include "code\modules\codex\codex_atom.dm" -#include "code\modules\codex\codex_client.dm" -#include "code\modules\codex\codex_implant.dm" -#include "code\modules\codex\codex_mob.dm" -#include "code\modules\codex\categories\_category.dm" -#include "code\modules\codex\categories\category_cultures.dm" -#include "code\modules\codex\categories\category_gases.dm" -#include "code\modules\codex\categories\category_languages.dm" -#include "code\modules\codex\categories\category_materials.dm" -#include "code\modules\codex\categories\category_reagents.dm" -#include "code\modules\codex\categories\category_recipes.dm" -#include "code\modules\codex\categories\category_skills.dm" -#include "code\modules\codex\categories\category_species.dm" -#include "code\modules\codex\entries\_codex_entry.dm" -#include "code\modules\codex\entries\atmospherics.dm" -#include "code\modules\codex\entries\augments.dm" -#include "code\modules\codex\entries\clothing.dm" -#include "code\modules\codex\entries\codex.dm" -#include "code\modules\codex\entries\engineering.dm" -#include "code\modules\codex\entries\exosuits.dm" -#include "code\modules\codex\entries\guns.dm" -#include "code\modules\codex\entries\jukebox.dm" -#include "code\modules\codex\entries\machinery.dm" -#include "code\modules\codex\entries\medical.dm" -#include "code\modules\codex\entries\misc.dm" -#include "code\modules\codex\entries\mobs.dm" -#include "code\modules\codex\entries\paperwork.dm" -#include "code\modules\codex\entries\psionics.dm" -#include "code\modules\codex\entries\spells.dm" -#include "code\modules\codex\entries\stacks.dm" -#include "code\modules\codex\entries\structures.dm" -#include "code\modules\codex\entries\tools.dm" -#include "code\modules\codex\entries\turfs.dm" -#include "code\modules\codex\entries\weapons.dm" -#include "code\modules\crafting\_crafting_holder.dm" -#include "code\modules\crafting\_crafting_stage.dm" -#include "code\modules\crafting\crafting_butterflyknife.dm" -#include "code\modules\crafting\crafting_cannon.dm" -#include "code\modules\crafting\crafting_coilgun.dm" -#include "code\modules\crafting\crafting_crossbow.dm" -#include "code\modules\crafting\crafting_ed209.dm" -#include "code\modules\crafting\crafting_farmbot.dm" -#include "code\modules\crafting\crafting_floorbot.dm" -#include "code\modules\crafting\crafting_janibot.dm" -#include "code\modules\crafting\crafting_medibot.dm" -#include "code\modules\crafting\crafting_secbot.dm" -#include "code\modules\crafting\crafting_spear_prod.dm" -#include "code\modules\crafting\crafting_zipgun.dm" -#include "code\modules\culture_descriptor\_culture.dm" -#include "code\modules\culture_descriptor\culture\_culture.dm" -#include "code\modules\culture_descriptor\culture\cultures_adherent.dm" -#include "code\modules\culture_descriptor\culture\cultures_diona.dm" -#include "code\modules\culture_descriptor\culture\cultures_hidden.dm" -#include "code\modules\culture_descriptor\culture\cultures_human.dm" -#include "code\modules\culture_descriptor\culture\cultures_ipc.dm" -#include "code\modules\culture_descriptor\culture\cultures_serpentid.dm" -#include "code\modules\culture_descriptor\culture\cultures_skrell.dm" -#include "code\modules\culture_descriptor\culture\cultures_unathi.dm" -#include "code\modules\culture_descriptor\culture\cultures_vox.dm" -#include "code\modules\culture_descriptor\faction\_faction.dm" -#include "code\modules\culture_descriptor\faction\factions_adherent.dm" -#include "code\modules\culture_descriptor\faction\factions_hidden.dm" -#include "code\modules\culture_descriptor\faction\factions_human.dm" -#include "code\modules\culture_descriptor\faction\factions_ipc.dm" -#include "code\modules\culture_descriptor\faction\factions_skrell.dm" -#include "code\modules\culture_descriptor\faction\factions_unathi.dm" -#include "code\modules\culture_descriptor\faction\factions_vox.dm" -#include "code\modules\culture_descriptor\location\_location.dm" -#include "code\modules\culture_descriptor\location\locations_adherent.dm" -#include "code\modules\culture_descriptor\location\locations_diona.dm" -#include "code\modules\culture_descriptor\location\locations_human.dm" -#include "code\modules\culture_descriptor\location\locations_ipc.dm" -#include "code\modules\culture_descriptor\location\locations_other.dm" -#include "code\modules\culture_descriptor\location\locations_serpentids.dm" -#include "code\modules\culture_descriptor\location\locations_skrell.dm" -#include "code\modules\culture_descriptor\location\locations_unathi.dm" -#include "code\modules\culture_descriptor\location\locations_vox.dm" -#include "code\modules\culture_descriptor\religion\_religion.dm" -#include "code\modules\culture_descriptor\religion\religions_human.dm" -#include "code\modules\culture_descriptor\religion\religions_unathi.dm" -#include "code\modules\culture_descriptor\religion\religions_vox.dm" -#include "code\modules\detectivework\forensics.dm" -#include "code\modules\detectivework\microscope\dnascanner.dm" -#include "code\modules\detectivework\microscope\microscope.dm" -#include "code\modules\detectivework\tools\crimekit.dm" -#include "code\modules\detectivework\tools\evidencebag.dm" -#include "code\modules\detectivework\tools\luminol.dm" -#include "code\modules\detectivework\tools\rag.dm" -#include "code\modules\detectivework\tools\sample_kits.dm" -#include "code\modules\detectivework\tools\scene_cards.dm" -#include "code\modules\detectivework\tools\storage.dm" -#include "code\modules\detectivework\tools\swabs.dm" -#include "code\modules\detectivework\tools\uvlight.dm" -#include "code\modules\economy\_economy_misc.dm" -#include "code\modules\economy\Accounts.dm" -#include "code\modules\economy\Accounts_DB.dm" -#include "code\modules\economy\ATM.dm" -#include "code\modules\economy\cash.dm" -#include "code\modules\economy\EFTPOS.dm" -#include "code\modules\economy\Events.dm" -#include "code\modules\economy\Events_Mundane.dm" -#include "code\modules\economy\TradeDestinations.dm" -#include "code\modules\economy\Transactions.dm" -#include "code\modules\emoji\emoji_parse.dm" -#include "code\modules\emotes\emote_define.dm" -#include "code\modules\emotes\emote_mob.dm" -#include "code\modules\emotes\definitions\_mob.dm" -#include "code\modules\emotes\definitions\_species.dm" -#include "code\modules\emotes\definitions\adherent.dm" -#include "code\modules\emotes\definitions\audible.dm" -#include "code\modules\emotes\definitions\exertion.dm" -#include "code\modules\emotes\definitions\human.dm" -#include "code\modules\emotes\definitions\slime.dm" -#include "code\modules\emotes\definitions\synthetics.dm" -#include "code\modules\emotes\definitions\visible.dm" -#include "code\modules\emotes\definitions\vox.dm" -#include "code\modules\error_handler\error_handler.dm" -#include "code\modules\error_handler\error_reporting.dm" -#include "code\modules\error_handler\error_viewer.dm" -#include "code\modules\events\apc_damage.dm" -#include "code\modules\events\blob.dm" -#include "code\modules\events\brain_expansion.dm" -#include "code\modules\events\brand_intelligence.dm" -#include "code\modules\events\camera_damage.dm" -#include "code\modules\events\carp_migration.dm" -#include "code\modules\events\communications_blackout.dm" -#include "code\modules\events\computer_damage.dm" -#include "code\modules\events\computer_update.dm" -#include "code\modules\events\disposals_explosion.dm" -#include "code\modules\events\dust.dm" -#include "code\modules\events\electrical_storm.dm" -#include "code\modules\events\event.dm" -#include "code\modules\events\event_container.dm" -#include "code\modules\events\event_dynamic.dm" -#include "code\modules\events\gravity.dm" -#include "code\modules\events\grid_check.dm" -#include "code\modules\events\infestation.dm" -#include "code\modules\events\ion_storm.dm" -#include "code\modules\events\mail.dm" -#include "code\modules\events\maint_drones.dm" -#include "code\modules\events\meteors.dm" -#include "code\modules\events\money_hacker.dm" -#include "code\modules\events\money_lotto.dm" -#include "code\modules\events\power_surge.dm" -#include "code\modules\events\prison_break.dm" -#include "code\modules\events\radiation_storm.dm" -#include "code\modules\events\random_antagonist.dm" -#include "code\modules\events\rogue_drones.dm" -#include "code\modules\events\sensor_suit_jamming.dm" -#include "code\modules\events\shipping_error.dm" -#include "code\modules\events\solar_storm.dm" -#include "code\modules\events\spacevine.dm" -#include "code\modules\events\spider_infestation.dm" -#include "code\modules\events\spontaneous_appendicitis.dm" -#include "code\modules\events\toilets.dm" -#include "code\modules\events\wallrot.dm" -#include "code\modules\events\whale_migration.dm" -#include "code\modules\events\exo_awakening\_datums.dm" -#include "code\modules\events\exo_awakening\exo_awaken.dm" -#include "code\modules\ext_scripts\irc.dm" -#include "code\modules\fabrication\__fabricator_defines.dm" -#include "code\modules\fabrication\_fabricator.dm" -#include "code\modules\fabrication\_fabricator_build_order.dm" -#include "code\modules\fabrication\fabricator_build.dm" -#include "code\modules\fabrication\fabricator_food.dm" -#include "code\modules\fabrication\fabricator_hacked.dm" -#include "code\modules\fabrication\fabricator_intake.dm" -#include "code\modules\fabrication\fabricator_microlathe.dm" -#include "code\modules\fabrication\fabricator_topic.dm" -#include "code\modules\fabrication\fabricator_ui.dm" -#include "code\modules\fabrication\designs\_design.dm" -#include "code\modules\fabrication\designs\general\designs_arms_ammo.dm" -#include "code\modules\fabrication\designs\general\designs_devices_components.dm" -#include "code\modules\fabrication\designs\general\designs_engineering.dm" -#include "code\modules\fabrication\designs\general\designs_general.dm" -#include "code\modules\fabrication\designs\general\designs_medical.dm" -#include "code\modules\fabrication\designs\general\designs_tools.dm" -#include "code\modules\fabrication\designs\micro\designs_cutlery.dm" -#include "code\modules\fabrication\designs\micro\designs_glasses.dm" -#include "code\modules\fabrication\designs\replicator\designs_food.dm" -#include "code\modules\flufftext\TextFilters.dm" -#include "code\modules\food\recipes_microwave.dm" -#include "code\modules\games\boardgame.dm" -#include "code\modules\games\cardemon.dm" -#include "code\modules\games\cards.dm" -#include "code\modules\games\spaceball_cards.dm" -#include "code\modules\games\tarot.dm" -#include "code\modules\genetics\side_effects.dm" -#include "code\modules\ghosttrap\trap.dm" -#include "code\modules\goals\_goal.dm" -#include "code\modules\goals\goal_ambition.dm" -#include "code\modules\goals\goal_department.dm" -#include "code\modules\goals\goal_mind.dm" -#include "code\modules\goals\goal_mob.dm" -#include "code\modules\goals\definitions\department.dm" -#include "code\modules\goals\definitions\department_clerical.dm" -#include "code\modules\goals\definitions\department_engineering.dm" -#include "code\modules\goals\definitions\department_medical.dm" -#include "code\modules\goals\definitions\department_science.dm" -#include "code\modules\goals\definitions\personal.dm" -#include "code\modules\goals\definitions\personal_achievement.dm" -#include "code\modules\goals\definitions\personal_achievement_movement.dm" -#include "code\modules\goals\definitions\personal_achievement_specific_object.dm" -#include "code\modules\goonchat\_helpers.dm" -#include "code\modules\goonchat\browserOutput.dm" -#include "code\modules\holodeck\HolodeckControl.dm" -#include "code\modules\holodeck\HolodeckObjects.dm" -#include "code\modules\holodeck\HolodeckPrograms.dm" -#include "code\modules\holomap\holomap_areas.dm" -#include "code\modules\holomap\ship_holomap.dm" -#include "code\modules\hydroponics\grown.dm" -#include "code\modules\hydroponics\grown_inedible.dm" -#include "code\modules\hydroponics\grown_predefined.dm" -#include "code\modules\hydroponics\seed.dm" -#include "code\modules\hydroponics\seed_datums.dm" -#include "code\modules\hydroponics\seed_gene_mut.dm" -#include "code\modules\hydroponics\seed_machines.dm" -#include "code\modules\hydroponics\seed_mobs.dm" -#include "code\modules\hydroponics\seed_packets.dm" -#include "code\modules\hydroponics\seed_storage.dm" -#include "code\modules\hydroponics\beekeeping\beehive.dm" -#include "code\modules\hydroponics\spreading\spreading.dm" -#include "code\modules\hydroponics\spreading\spreading_growth.dm" -#include "code\modules\hydroponics\spreading\spreading_response.dm" -#include "code\modules\hydroponics\trays\tray.dm" -#include "code\modules\hydroponics\trays\tray_process.dm" -#include "code\modules\hydroponics\trays\tray_reagents.dm" -#include "code\modules\hydroponics\trays\tray_soil.dm" -#include "code\modules\hydroponics\trays\tray_tools.dm" -#include "code\modules\hydroponics\trays\tray_update_icons.dm" -#include "code\modules\integrated_electronics\_defines.dm" -#include "code\modules\integrated_electronics\core\analyzer.dm" -#include "code\modules\integrated_electronics\core\assemblies.dm" -#include "code\modules\integrated_electronics\core\debugger.dm" -#include "code\modules\integrated_electronics\core\detailer.dm" -#include "code\modules\integrated_electronics\core\helpers.dm" -#include "code\modules\integrated_electronics\core\integrated_circuit.dm" -#include "code\modules\integrated_electronics\core\pins.dm" -#include "code\modules\integrated_electronics\core\printer.dm" -#include "code\modules\integrated_electronics\core\saved_circuits.dm" -#include "code\modules\integrated_electronics\core\wirer.dm" -#include "code\modules\integrated_electronics\core\prefab\prefab.dm" -#include "code\modules\integrated_electronics\core\prefab\prefabs.dm" -#include "code\modules\integrated_electronics\core\prefab\test\testprefabs.dm" -#include "code\modules\integrated_electronics\core\special_pins\boolean_pin.dm" -#include "code\modules\integrated_electronics\core\special_pins\char_pin.dm" -#include "code\modules\integrated_electronics\core\special_pins\color_pin.dm" -#include "code\modules\integrated_electronics\core\special_pins\dir_pin.dm" -#include "code\modules\integrated_electronics\core\special_pins\index_pin.dm" -#include "code\modules\integrated_electronics\core\special_pins\list_pin.dm" -#include "code\modules\integrated_electronics\core\special_pins\number_pin.dm" -#include "code\modules\integrated_electronics\core\special_pins\ref_pin.dm" -#include "code\modules\integrated_electronics\core\special_pins\string_pin.dm" -#include "code\modules\integrated_electronics\passive\passive.dm" -#include "code\modules\integrated_electronics\passive\power.dm" -#include "code\modules\integrated_electronics\subtypes\access.dm" -#include "code\modules\integrated_electronics\subtypes\arithmetic.dm" -#include "code\modules\integrated_electronics\subtypes\converters.dm" -#include "code\modules\integrated_electronics\subtypes\data_transfer.dm" -#include "code\modules\integrated_electronics\subtypes\filter.dm" -#include "code\modules\integrated_electronics\subtypes\input.dm" -#include "code\modules\integrated_electronics\subtypes\lists.dm" -#include "code\modules\integrated_electronics\subtypes\logic.dm" -#include "code\modules\integrated_electronics\subtypes\manipulation.dm" -#include "code\modules\integrated_electronics\subtypes\memory.dm" -#include "code\modules\integrated_electronics\subtypes\output.dm" -#include "code\modules\integrated_electronics\subtypes\power.dm" -#include "code\modules\integrated_electronics\subtypes\reagents.dm" -#include "code\modules\integrated_electronics\subtypes\smart.dm" -#include "code\modules\integrated_electronics\subtypes\time.dm" -#include "code\modules\integrated_electronics\subtypes\trig.dm" -#include "code\modules\item_worth\_helpers.dm" -#include "code\modules\item_worth\item_worth.dm" -#include "code\modules\item_worth\value_procs.dm" -#include "code\modules\item_worth\worths_list.dm" -#include "code\modules\library\lib_items.dm" -#include "code\modules\library\lib_machines.dm" -#include "code\modules\library\lib_readme.dm" -#include "code\modules\library\manuals\engineering.dm" -#include "code\modules\library\manuals\manuals.dm" -#include "code\modules\library\manuals\medical.dm" -#include "code\modules\library\manuals\nanotrasen.dm" -#include "code\modules\library\manuals\union.dm" -#include "code\modules\lighting\lighting_area.dm" -#include "code\modules\lighting\lighting_atom.dm" -#include "code\modules\lighting\lighting_corner.dm" -#include "code\modules\lighting\lighting_overlay.dm" -#include "code\modules\lighting\lighting_planemaster.dm" -#include "code\modules\lighting\lighting_setup.dm" -#include "code\modules\lighting\lighting_source.dm" -#include "code\modules\lighting\lighting_turf.dm" -#include "code\modules\lighting\~lighting_undefs.dm" -#include "code\modules\locks\key.dm" -#include "code\modules\locks\lock.dm" -#include "code\modules\locks\lock_construct.dm" -#include "code\modules\maps\dmm_suite.dm" -#include "code\modules\maps\helper_landmarks.dm" -#include "code\modules\maps\map_template.dm" -#include "code\modules\maps\map_template_unit_testing.dm" -#include "code\modules\maps\ruins.dm" -#include "code\modules\materials\_materials.dm" -#include "code\modules\materials\material_recipes.dm" -#include "code\modules\materials\material_sheets.dm" -#include "code\modules\materials\material_synth.dm" -#include "code\modules\materials\materials_ore.dm" -#include "code\modules\materials\recipes_furniture.dm" -#include "code\modules\materials\recipes_items.dm" -#include "code\modules\materials\recipes_stacks.dm" -#include "code\modules\materials\recipes_storage.dm" -#include "code\modules\materials\recipes_structures.dm" -#include "code\modules\materials\definitions\materials_glass.dm" -#include "code\modules\materials\definitions\materials_metal.dm" -#include "code\modules\materials\definitions\materials_mineral.dm" -#include "code\modules\materials\definitions\materials_organic.dm" -#include "code\modules\materials\definitions\materials_other.dm" -#include "code\modules\materials\definitions\materials_stone.dm" -#include "code\modules\materials\definitions\materials_wood.dm" -#include "code\modules\mechs\_mech_setup.dm" -#include "code\modules\mechs\mech.dm" -#include "code\modules\mechs\mech_construction.dm" -#include "code\modules\mechs\mech_damage.dm" -#include "code\modules\mechs\mech_damage_immunity.dm" -#include "code\modules\mechs\mech_icon.dm" -#include "code\modules\mechs\mech_interaction.dm" -#include "code\modules\mechs\mech_life.dm" -#include "code\modules\mechs\mech_movement.dm" -#include "code\modules\mechs\mech_wreckage.dm" -#include "code\modules\mechs\components\_components.dm" -#include "code\modules\mechs\components\armour.dm" -#include "code\modules\mechs\components\arms.dm" -#include "code\modules\mechs\components\body.dm" -#include "code\modules\mechs\components\frame.dm" -#include "code\modules\mechs\components\head.dm" -#include "code\modules\mechs\components\legs.dm" -#include "code\modules\mechs\components\software.dm" -#include "code\modules\mechs\equipment\_equipment.dm" -#include "code\modules\mechs\equipment\combat.dm" -#include "code\modules\mechs\equipment\engineering.dm" -#include "code\modules\mechs\equipment\medical.dm" -#include "code\modules\mechs\equipment\utility.dm" -#include "code\modules\mechs\interface\_interface.dm" -#include "code\modules\mechs\interface\screen_objects.dm" -#include "code\modules\mechs\premade\_premade.dm" -#include "code\modules\mechs\premade\combat.dm" -#include "code\modules\mechs\premade\heavy.dm" -#include "code\modules\mechs\premade\light.dm" -#include "code\modules\mechs\premade\powerloader.dm" -#include "code\modules\merchant\merchant_guns.dm" -#include "code\modules\merchant\merchant_machinery.dm" -#include "code\modules\merchant\merchant_programs.dm" -#include "code\modules\mining\abandonedcrates.dm" -#include "code\modules\mining\mine_items.dm" -#include "code\modules\mining\mine_turfs.dm" -#include "code\modules\mining\satchel_ore_boxdm.dm" -#include "code\modules\mining\drilling\drill.dm" -#include "code\modules\mining\machinery\_mineral.dm" -#include "code\modules\mining\machinery\mineral_console.dm" -#include "code\modules\mining\machinery\mineral_processor.dm" -#include "code\modules\mining\machinery\mineral_stacker.dm" -#include "code\modules\mining\machinery\mineral_unloader.dm" -#include "code\modules\mob\animations.dm" -#include "code\modules\mob\death.dm" -#include "code\modules\mob\floating_message.dm" -#include "code\modules\mob\gender.dm" -#include "code\modules\mob\hear_say.dm" -#include "code\modules\mob\holder.dm" -#include "code\modules\mob\inventory.dm" -#include "code\modules\mob\login.dm" -#include "code\modules\mob\logout.dm" -#include "code\modules\mob\mob.dm" -#include "code\modules\mob\mob_defines.dm" -#include "code\modules\mob\mob_helpers.dm" -#include "code\modules\mob\mob_movement.dm" -#include "code\modules\mob\mob_transformation_simple.dm" -#include "code\modules\mob\say.dm" -#include "code\modules\mob\transform_procs.dm" -#include "code\modules\mob\typing_indicator.dm" -#include "code\modules\mob\update_icons.dm" -#include "code\modules\mob\grab\grab_datum.dm" -#include "code\modules\mob\grab\grab_object.dm" -#include "code\modules\mob\grab\grab_readme.dm" -#include "code\modules\mob\grab\nab\grab_nab.dm" -#include "code\modules\mob\grab\nab\nab_aggressive.dm" -#include "code\modules\mob\grab\nab\nab_kill.dm" -#include "code\modules\mob\grab\nab\nab_passive.dm" -#include "code\modules\mob\grab\normal\grab_normal.dm" -#include "code\modules\mob\grab\normal\norm_aggressive.dm" -#include "code\modules\mob\grab\normal\norm_kill.dm" -#include "code\modules\mob\grab\normal\norm_neck.dm" -#include "code\modules\mob\grab\normal\norm_passive.dm" -#include "code\modules\mob\grab\normal\norm_struggle.dm" -#include "code\modules\mob\language\generic.dm" -#include "code\modules\mob\language\language.dm" -#include "code\modules\mob\language\synthetic.dm" -#include "code\modules\mob\language\alien\adherent.dm" -#include "code\modules\mob\language\alien\antag.dm" -#include "code\modules\mob\language\alien\diona.dm" -#include "code\modules\mob\language\alien\monkey.dm" -#include "code\modules\mob\language\alien\serpentid.dm" -#include "code\modules\mob\language\alien\skrell.dm" -#include "code\modules\mob\language\alien\unathi.dm" -#include "code\modules\mob\language\human\arabic.dm" -#include "code\modules\mob\language\human\chinese.dm" -#include "code\modules\mob\language\human\euro.dm" -#include "code\modules\mob\language\human\human.dm" -#include "code\modules\mob\language\human\indian.dm" -#include "code\modules\mob\language\human\russian.dm" -#include "code\modules\mob\language\human\selenian.dm" -#include "code\modules\mob\language\human\spanish.dm" -#include "code\modules\mob\language\human\misc\gutter.dm" -#include "code\modules\mob\language\human\misc\spacer.dm" -#include "code\modules\mob\living\autohiss.dm" -#include "code\modules\mob\living\damage_procs.dm" -#include "code\modules\mob\living\death.dm" -#include "code\modules\mob\living\default_language.dm" -#include "code\modules\mob\living\life.dm" -#include "code\modules\mob\living\living.dm" -#include "code\modules\mob\living\living_defense.dm" -#include "code\modules\mob\living\living_defines.dm" -#include "code\modules\mob\living\living_maneuvers.dm" -#include "code\modules\mob\living\living_powers.dm" -#include "code\modules\mob\living\login.dm" -#include "code\modules\mob\living\logout.dm" -#include "code\modules\mob\living\recoil.dm" -#include "code\modules\mob\living\say.dm" -#include "code\modules\mob\living\bot\bot.dm" -#include "code\modules\mob\living\bot\cleanbot.dm" -#include "code\modules\mob\living\bot\ed209bot.dm" -#include "code\modules\mob\living\bot\farmbot.dm" -#include "code\modules\mob\living\bot\floorbot.dm" -#include "code\modules\mob\living\bot\medibot.dm" -#include "code\modules\mob\living\bot\mulebot.dm" -#include "code\modules\mob\living\bot\remotebot.dm" -#include "code\modules\mob\living\bot\secbot.dm" -#include "code\modules\mob\living\carbon\breathe.dm" -#include "code\modules\mob\living\carbon\carbon.dm" -#include "code\modules\mob\living\carbon\carbon_defense.dm" -#include "code\modules\mob\living\carbon\carbon_defines.dm" -#include "code\modules\mob\living\carbon\carbon_powers.dm" -#include "code\modules\mob\living\carbon\damage_procs.dm" -#include "code\modules\mob\living\carbon\give.dm" -#include "code\modules\mob\living\carbon\hallucinations.dm" -#include "code\modules\mob\living\carbon\life.dm" -#include "code\modules\mob\living\carbon\resist.dm" -#include "code\modules\mob\living\carbon\taste.dm" -#include "code\modules\mob\living\carbon\viruses.dm" -#include "code\modules\mob\living\carbon\alien\alien.dm" -#include "code\modules\mob\living\carbon\alien\alien_attacks.dm" -#include "code\modules\mob\living\carbon\alien\alien_damage.dm" -#include "code\modules\mob\living\carbon\alien\death.dm" -#include "code\modules\mob\living\carbon\alien\life.dm" -#include "code\modules\mob\living\carbon\alien\say.dm" -#include "code\modules\mob\living\carbon\alien\update_icons.dm" -#include "code\modules\mob\living\carbon\alien\diona\_nymph.dm" -#include "code\modules\mob\living\carbon\alien\diona\nymph_attacks.dm" -#include "code\modules\mob\living\carbon\alien\diona\nymph_death.dm" -#include "code\modules\mob\living\carbon\alien\diona\nymph_gestalting.dm" -#include "code\modules\mob\living\carbon\alien\diona\nymph_holder.dm" -#include "code\modules\mob\living\carbon\alien\diona\nymph_inventory.dm" -#include "code\modules\mob\living\carbon\alien\diona\nymph_life.dm" -#include "code\modules\mob\living\carbon\alien\diona\nymph_ui.dm" -#include "code\modules\mob\living\carbon\alien\diona\nymph_update_icons.dm" -#include "code\modules\mob\living\carbon\alien\diona\~diona.dm" -#include "code\modules\mob\living\carbon\alien\diona\gestalt\_gestalt.dm" -#include "code\modules\mob\living\carbon\alien\diona\gestalt\gestalt_attacks.dm" -#include "code\modules\mob\living\carbon\alien\diona\gestalt\gestalt_movement.dm" -#include "code\modules\mob\living\carbon\alien\diona\gestalt\gestalt_nymph.dm" -#include "code\modules\mob\living\carbon\alien\diona\gestalt\gestalt_turfs.dm" -#include "code\modules\mob\living\carbon\alien\diona\gestalt\gestalt_verbs.dm" -#include "code\modules\mob\living\carbon\alien\diona\gestalt\gestalt_vote.dm" -#include "code\modules\mob\living\carbon\alien\diona\gestalt\gestalt_vote_types.dm" -#include "code\modules\mob\living\carbon\brain\brain.dm" -#include "code\modules\mob\living\carbon\brain\death.dm" -#include "code\modules\mob\living\carbon\brain\life.dm" -#include "code\modules\mob\living\carbon\brain\login.dm" -#include "code\modules\mob\living\carbon\brain\MMI.dm" -#include "code\modules\mob\living\carbon\brain\robot.dm" -#include "code\modules\mob\living\carbon\brain\say.dm" -#include "code\modules\mob\living\carbon\human\appearance.dm" -#include "code\modules\mob\living\carbon\human\audible_emotes.dm" -#include "code\modules\mob\living\carbon\human\corpse.dm" -#include "code\modules\mob\living\carbon\human\death.dm" -#include "code\modules\mob\living\carbon\human\examine.dm" -#include "code\modules\mob\living\carbon\human\human.dm" -#include "code\modules\mob\living\carbon\human\human_attackhand.dm" -#include "code\modules\mob\living\carbon\human\human_damage.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_interactions.dm" -#include "code\modules\mob\living\carbon\human\human_maneuvers.dm" -#include "code\modules\mob\living\carbon\human\human_movement.dm" -#include "code\modules\mob\living\carbon\human\human_organs.dm" -#include "code\modules\mob\living\carbon\human\human_powers.dm" -#include "code\modules\mob\living\carbon\human\human_skin.dm" -#include "code\modules\mob\living\carbon\human\human_species.dm" -#include "code\modules\mob\living\carbon\human\interactions.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\login.dm" -#include "code\modules\mob\living\carbon\human\logout.dm" -#include "code\modules\mob\living\carbon\human\machine_limb_functions.dm" -#include "code\modules\mob\living\carbon\human\MedicalSideEffects.dm" -#include "code\modules\mob\living\carbon\human\npcs.dm" -#include "code\modules\mob\living\carbon\human\say.dm" -#include "code\modules\mob\living\carbon\human\stripping.dm" -#include "code\modules\mob\living\carbon\human\unarmed_attack.dm" -#include "code\modules\mob\living\carbon\human\update_icons.dm" -#include "code\modules\mob\living\carbon\human\whisper.dm" -#include "code\modules\mob\living\carbon\human\descriptors\_descriptors.dm" -#include "code\modules\mob\living\carbon\human\descriptors\descriptors_generic.dm" -#include "code\modules\mob\living\carbon\human\descriptors\descriptors_nabber.dm" -#include "code\modules\mob\living\carbon\human\descriptors\descriptors_skrell.dm" -#include "code\modules\mob\living\carbon\human\descriptors\descriptors_vox.dm" -#include "code\modules\mob\living\carbon\xenobiological\death.dm" -#include "code\modules\mob\living\carbon\xenobiological\examine.dm" -#include "code\modules\mob\living\carbon\xenobiological\hud.dm" -#include "code\modules\mob\living\carbon\xenobiological\items.dm" -#include "code\modules\mob\living\carbon\xenobiological\life.dm" -#include "code\modules\mob\living\carbon\xenobiological\powers.dm" -#include "code\modules\mob\living\carbon\xenobiological\say.dm" -#include "code\modules\mob\living\carbon\xenobiological\slime_AI.dm" -#include "code\modules\mob\living\carbon\xenobiological\subtypes.dm" -#include "code\modules\mob\living\carbon\xenobiological\update_icons.dm" -#include "code\modules\mob\living\carbon\xenobiological\xenobiological.dm" -#include "code\modules\mob\living\maneuvers\_maneuver.dm" -#include "code\modules\mob\living\maneuvers\maneuver_leap.dm" -#include "code\modules\mob\living\silicon\death.dm" -#include "code\modules\mob\living\silicon\laws.dm" -#include "code\modules\mob\living\silicon\login.dm" -#include "code\modules\mob\living\silicon\posi_brainmob.dm" -#include "code\modules\mob\living\silicon\say.dm" -#include "code\modules\mob\living\silicon\silicon.dm" -#include "code\modules\mob\living\silicon\subsystems.dm" -#include "code\modules\mob\living\silicon\ai\ai.dm" -#include "code\modules\mob\living\silicon\ai\ai_camera_proc.dm" -#include "code\modules\mob\living\silicon\ai\ai_damage.dm" -#include "code\modules\mob\living\silicon\ai\ai_movement.dm" -#include "code\modules\mob\living\silicon\ai\death.dm" -#include "code\modules\mob\living\silicon\ai\examine.dm" -#include "code\modules\mob\living\silicon\ai\icons.dm" -#include "code\modules\mob\living\silicon\ai\latejoin.dm" -#include "code\modules\mob\living\silicon\ai\laws.dm" -#include "code\modules\mob\living\silicon\ai\life.dm" -#include "code\modules\mob\living\silicon\ai\login.dm" -#include "code\modules\mob\living\silicon\ai\logout.dm" -#include "code\modules\mob\living\silicon\ai\malf.dm" -#include "code\modules\mob\living\silicon\ai\power.dm" -#include "code\modules\mob\living\silicon\pai\admin.dm" -#include "code\modules\mob\living\silicon\pai\death.dm" -#include "code\modules\mob\living\silicon\pai\examine.dm" -#include "code\modules\mob\living\silicon\pai\life.dm" -#include "code\modules\mob\living\silicon\pai\pai.dm" -#include "code\modules\mob\living\silicon\pai\paiwire.dm" -#include "code\modules\mob\living\silicon\pai\personality.dm" -#include "code\modules\mob\living\silicon\pai\recruit.dm" -#include "code\modules\mob\living\silicon\pai\say.dm" -#include "code\modules\mob\living\silicon\pai\software.dm" -#include "code\modules\mob\living\silicon\pai\software_modules.dm" -#include "code\modules\mob\living\silicon\robot\analyzer.dm" -#include "code\modules\mob\living\silicon\robot\component.dm" -#include "code\modules\mob\living\silicon\robot\custom_sprites.dm" -#include "code\modules\mob\living\silicon\robot\death.dm" -#include "code\modules\mob\living\silicon\robot\examine.dm" -#include "code\modules\mob\living\silicon\robot\inventory.dm" -#include "code\modules\mob\living\silicon\robot\laws.dm" -#include "code\modules\mob\living\silicon\robot\life.dm" -#include "code\modules\mob\living\silicon\robot\login.dm" -#include "code\modules\mob\living\silicon\robot\photos.dm" -#include "code\modules\mob\living\silicon\robot\preset.dm" -#include "code\modules\mob\living\silicon\robot\robot.dm" -#include "code\modules\mob\living\silicon\robot\robot_damage.dm" -#include "code\modules\mob\living\silicon\robot\robot_items.dm" -#include "code\modules\mob\living\silicon\robot\robot_movement.dm" -#include "code\modules\mob\living\silicon\robot\drone\drone.dm" -#include "code\modules\mob\living\silicon\robot\drone\drone_abilities.dm" -#include "code\modules\mob\living\silicon\robot\drone\drone_console.dm" -#include "code\modules\mob\living\silicon\robot\drone\drone_damage.dm" -#include "code\modules\mob\living\silicon\robot\drone\drone_items.dm" -#include "code\modules\mob\living\silicon\robot\drone\drone_manufacturer.dm" -#include "code\modules\mob\living\silicon\robot\drone\drone_remote_control.dm" -#include "code\modules\mob\living\silicon\robot\drone\drone_say.dm" -#include "code\modules\mob\living\silicon\robot\flying\flying.dm" -#include "code\modules\mob\living\silicon\robot\flying\module_flying.dm" -#include "code\modules\mob\living\silicon\robot\flying\module_flying_cultivator.dm" -#include "code\modules\mob\living\silicon\robot\flying\module_flying_emergency.dm" -#include "code\modules\mob\living\silicon\robot\flying\module_flying_filing.dm" -#include "code\modules\mob\living\silicon\robot\flying\module_flying_forensics.dm" -#include "code\modules\mob\living\silicon\robot\flying\module_flying_repair.dm" -#include "code\modules\mob\living\silicon\robot\modules\_module.dm" -#include "code\modules\mob\living\silicon\robot\modules\module_clerical.dm" -#include "code\modules\mob\living\silicon\robot\modules\module_engineering.dm" -#include "code\modules\mob\living\silicon\robot\modules\module_illegal.dm" -#include "code\modules\mob\living\silicon\robot\modules\module_janitor.dm" -#include "code\modules\mob\living\silicon\robot\modules\module_maintenance_drone.dm" -#include "code\modules\mob\living\silicon\robot\modules\module_medical.dm" -#include "code\modules\mob\living\silicon\robot\modules\module_miner.dm" -#include "code\modules\mob\living\silicon\robot\modules\module_research.dm" -#include "code\modules\mob\living\silicon\robot\modules\module_security.dm" -#include "code\modules\mob\living\silicon\robot\modules\module_standard.dm" -#include "code\modules\mob\living\silicon\robot\modules\module_uncertified.dm" -#include "code\modules\mob\living\simple_animal\combat.dm" -#include "code\modules\mob\living\simple_animal\defense.dm" -#include "code\modules\mob\living\simple_animal\life.dm" -#include "code\modules\mob\living\simple_animal\natural_weapons.dm" -#include "code\modules\mob\living\simple_animal\shade.dm" -#include "code\modules\mob\living\simple_animal\simple_animal.dm" -#include "code\modules\mob\living\simple_animal\aquatic\_aquatic.dm" -#include "code\modules\mob\living\simple_animal\aquatic\_aquatic_hostile.dm" -#include "code\modules\mob\living\simple_animal\aquatic\_aquatic_retaliate.dm" -#include "code\modules\mob\living\simple_animal\aquatic\aquatic_carp.dm" -#include "code\modules\mob\living\simple_animal\aquatic\aquatic_fish.dm" -#include "code\modules\mob\living\simple_animal\aquatic\aquatic_sharks.dm" -#include "code\modules\mob\living\simple_animal\borer\borer.dm" -#include "code\modules\mob\living\simple_animal\borer\borer_attacks.dm" -#include "code\modules\mob\living\simple_animal\borer\borer_captive.dm" -#include "code\modules\mob\living\simple_animal\borer\borer_hud.dm" -#include "code\modules\mob\living\simple_animal\borer\borer_powers.dm" -#include "code\modules\mob\living\simple_animal\borer\say.dm" -#include "code\modules\mob\living\simple_animal\constructs\constructs.dm" -#include "code\modules\mob\living\simple_animal\constructs\soulstone.dm" -#include "code\modules\mob\living\simple_animal\crow\crow.dm" -#include "code\modules\mob\living\simple_animal\familiars\familiars.dm" -#include "code\modules\mob\living\simple_animal\friendly\_friendly.dm" -#include "code\modules\mob\living\simple_animal\friendly\cat.dm" -#include "code\modules\mob\living\simple_animal\friendly\corgi.dm" -#include "code\modules\mob\living\simple_animal\friendly\crab.dm" -#include "code\modules\mob\living\simple_animal\friendly\farm_animals.dm" -#include "code\modules\mob\living\simple_animal\friendly\juvenile_space_whale.dm" -#include "code\modules\mob\living\simple_animal\friendly\lizard.dm" -#include "code\modules\mob\living\simple_animal\friendly\mouse.dm" -#include "code\modules\mob\living\simple_animal\friendly\mushroom.dm" -#include "code\modules\mob\living\simple_animal\friendly\possum.dm" -#include "code\modules\mob\living\simple_animal\friendly\slime.dm" -#include "code\modules\mob\living\simple_animal\friendly\tomato.dm" -#include "code\modules\mob\living\simple_animal\hostile\antlion.dm" -#include "code\modules\mob\living\simple_animal\hostile\bad_drone.dm" -#include "code\modules\mob\living\simple_animal\hostile\bat.dm" -#include "code\modules\mob\living\simple_animal\hostile\bear.dm" -#include "code\modules\mob\living\simple_animal\hostile\creature.dm" -#include "code\modules\mob\living\simple_animal\hostile\drake.dm" -#include "code\modules\mob\living\simple_animal\hostile\faithful_hound.dm" -#include "code\modules\mob\living\simple_animal\hostile\faithless.dm" -#include "code\modules\mob\living\simple_animal\hostile\hostile.dm" -#include "code\modules\mob\living\simple_animal\hostile\leech.dm" -#include "code\modules\mob\living\simple_animal\hostile\meat_horrors.dm" -#include "code\modules\mob\living\simple_animal\hostile\mimic.dm" -#include "code\modules\mob\living\simple_animal\hostile\pirate.dm" -#include "code\modules\mob\living\simple_animal\hostile\russian.dm" -#include "code\modules\mob\living\simple_animal\hostile\space_carp.dm" -#include "code\modules\mob\living\simple_animal\hostile\space_pike.dm" -#include "code\modules\mob\living\simple_animal\hostile\space_shark.dm" -#include "code\modules\mob\living\simple_animal\hostile\syndicate.dm" -#include "code\modules\mob\living\simple_animal\hostile\tree.dm" -#include "code\modules\mob\living\simple_animal\hostile\vagrant.dm" -#include "code\modules\mob\living\simple_animal\hostile\voxslug.dm" -#include "code\modules\mob\living\simple_animal\hostile\commanded\_command_defines.dm" -#include "code\modules\mob\living\simple_animal\hostile\giant_spider\_giant_spider.dm" -#include "code\modules\mob\living\simple_animal\hostile\giant_spider\carrier.dm" -#include "code\modules\mob\living\simple_animal\hostile\giant_spider\electric.dm" -#include "code\modules\mob\living\simple_animal\hostile\giant_spider\frost.dm" -#include "code\modules\mob\living\simple_animal\hostile\giant_spider\guard.dm" -#include "code\modules\mob\living\simple_animal\hostile\giant_spider\hunter.dm" -#include "code\modules\mob\living\simple_animal\hostile\giant_spider\lurker.dm" -#include "code\modules\mob\living\simple_animal\hostile\giant_spider\nurse.dm" -#include "code\modules\mob\living\simple_animal\hostile\giant_spider\pepper.dm" -#include "code\modules\mob\living\simple_animal\hostile\giant_spider\phorogenic.dm" -#include "code\modules\mob\living\simple_animal\hostile\giant_spider\spitter.dm" -#include "code\modules\mob\living\simple_animal\hostile\giant_spider\thermic.dm" -#include "code\modules\mob\living\simple_animal\hostile\giant_spider\tunneler.dm" -#include "code\modules\mob\living\simple_animal\hostile\giant_spider\webslinger.dm" -#include "code\modules\mob\living\simple_animal\hostile\hivebot\hivebot.dm" -#include "code\modules\mob\living\simple_animal\hostile\hivebot\ranged.dm" -#include "code\modules\mob\living\simple_animal\hostile\hivebot\tank.dm" -#include "code\modules\mob\living\simple_animal\hostile\retaliate\clown.dm" -#include "code\modules\mob\living\simple_animal\hostile\retaliate\drone.dm" -#include "code\modules\mob\living\simple_animal\hostile\retaliate\exoplanet.dm" -#include "code\modules\mob\living\simple_animal\hostile\retaliate\giant_crab.dm" -#include "code\modules\mob\living\simple_animal\hostile\retaliate\goose.dm" -#include "code\modules\mob\living\simple_animal\hostile\retaliate\jelly.dm" -#include "code\modules\mob\living\simple_animal\hostile\retaliate\king_of_goats.dm" -#include "code\modules\mob\living\simple_animal\hostile\retaliate\parrot.dm" -#include "code\modules\mob\living\simple_animal\hostile\retaliate\retaliate.dm" -#include "code\modules\mob\living\simple_animal\hostile\retaliate\snake.dm" -#include "code\modules\mob\living\simple_animal\hostile\retaliate\space_whale.dm" -#include "code\modules\mob\living\simple_animal\hostile\retaliate\giant_parrot\giant_parrot.dm" -#include "code\modules\mob\living\simple_animal\hostile\retaliate\giant_parrot\giant_parrot_species.dm" -#include "code\modules\mob\new_player\login.dm" -#include "code\modules\mob\new_player\logout.dm" -#include "code\modules\mob\new_player\new_player.dm" -#include "code\modules\mob\new_player\preferences_setup.dm" -#include "code\modules\mob\observer\following.dm" -#include "code\modules\mob\observer\observer.dm" -#include "code\modules\mob\observer\freelook\chunk.dm" -#include "code\modules\mob\observer\freelook\eye.dm" -#include "code\modules\mob\observer\freelook\life.dm" -#include "code\modules\mob\observer\freelook\logging.dm" -#include "code\modules\mob\observer\freelook\read_me.dm" -#include "code\modules\mob\observer\freelook\update_triggers.dm" -#include "code\modules\mob\observer\freelook\visualnet.dm" -#include "code\modules\mob\observer\freelook\ai\cameranet.dm" -#include "code\modules\mob\observer\freelook\ai\chunk.dm" -#include "code\modules\mob\observer\freelook\ai\eye.dm" -#include "code\modules\mob\observer\freelook\ai\update_triggers.dm" -#include "code\modules\mob\observer\freelook\cult\cultnet.dm" -#include "code\modules\mob\observer\freelook\cult\mask.dm" -#include "code\modules\mob\observer\ghost\follow.dm" -#include "code\modules\mob\observer\ghost\ghost.dm" -#include "code\modules\mob\observer\ghost\login.dm" -#include "code\modules\mob\observer\ghost\logout.dm" -#include "code\modules\mob\observer\ghost\say.dm" -#include "code\modules\mob\observer\virtual\_constants.dm" -#include "code\modules\mob\observer\virtual\base.dm" -#include "code\modules\mob\observer\virtual\helpers.dm" -#include "code\modules\mob\observer\virtual\mob.dm" -#include "code\modules\mob\skills\antag_skill_setter.dm" -#include "code\modules\mob\skills\skill.dm" -#include "code\modules\mob\skills\skill_buffs.dm" -#include "code\modules\mob\skills\skill_ui.dm" -#include "code\modules\mob\skills\skill_verbs.dm" -#include "code\modules\mob\skills\skillset.dm" -#include "code\modules\mob\skills\skillset_silicon.dm" -#include "code\modules\modular_computers\laptop_vendor.dm" -#include "code\modules\modular_computers\computers\modular_computer\core.dm" -#include "code\modules\modular_computers\computers\modular_computer\damage.dm" -#include "code\modules\modular_computers\computers\modular_computer\hardware.dm" -#include "code\modules\modular_computers\computers\modular_computer\interaction.dm" -#include "code\modules\modular_computers\computers\modular_computer\power.dm" -#include "code\modules\modular_computers\computers\modular_computer\variables.dm" -#include "code\modules\modular_computers\computers\subtypes\dev_console.dm" -#include "code\modules\modular_computers\computers\subtypes\dev_laptop.dm" -#include "code\modules\modular_computers\computers\subtypes\dev_pda.dm" -#include "code\modules\modular_computers\computers\subtypes\dev_tablet.dm" -#include "code\modules\modular_computers\computers\subtypes\dev_telescreen.dm" -#include "code\modules\modular_computers\computers\subtypes\dev_wrist.dm" -#include "code\modules\modular_computers\computers\subtypes\preset_console.dm" -#include "code\modules\modular_computers\computers\subtypes\preset_laptop.dm" -#include "code\modules\modular_computers\computers\subtypes\preset_pda.dm" -#include "code\modules\modular_computers\computers\subtypes\preset_tablet.dm" -#include "code\modules\modular_computers\computers\subtypes\preset_telescreen.dm" -#include "code\modules\modular_computers\file_system\computer_file.dm" -#include "code\modules\modular_computers\file_system\data.dm" -#include "code\modules\modular_computers\file_system\manifest.dm" -#include "code\modules\modular_computers\file_system\program.dm" -#include "code\modules\modular_computers\file_system\program_events.dm" -#include "code\modules\modular_computers\file_system\programs\antagonist\access_decrypter.dm" -#include "code\modules\modular_computers\file_system\programs\antagonist\dos.dm" -#include "code\modules\modular_computers\file_system\programs\antagonist\hacked_camera.dm" -#include "code\modules\modular_computers\file_system\programs\antagonist\revelation.dm" -#include "code\modules\modular_computers\file_system\programs\antagonist\uplink.dm" -#include "code\modules\modular_computers\file_system\programs\command\card.dm" -#include "code\modules\modular_computers\file_system\programs\command\comm.dm" -#include "code\modules\modular_computers\file_system\programs\engineering\alarm_monitor.dm" -#include "code\modules\modular_computers\file_system\programs\engineering\atmos_control.dm" -#include "code\modules\modular_computers\file_system\programs\engineering\power_monitor.dm" -#include "code\modules\modular_computers\file_system\programs\engineering\rcon_console.dm" -#include "code\modules\modular_computers\file_system\programs\engineering\shields_monitor.dm" -#include "code\modules\modular_computers\file_system\programs\engineering\supermatter_monitor.dm" -#include "code\modules\modular_computers\file_system\programs\generic\camera.dm" -#include "code\modules\modular_computers\file_system\programs\generic\configurator.dm" -#include "code\modules\modular_computers\file_system\programs\generic\crew_manifest.dm" -#include "code\modules\modular_computers\file_system\programs\generic\deck_management.dm" -#include "code\modules\modular_computers\file_system\programs\generic\docks.dm" -#include "code\modules\modular_computers\file_system\programs\generic\email_client.dm" -#include "code\modules\modular_computers\file_system\programs\generic\file_browser.dm" -#include "code\modules\modular_computers\file_system\programs\generic\game.dm" -#include "code\modules\modular_computers\file_system\programs\generic\library.dm" -#include "code\modules\modular_computers\file_system\programs\generic\news.dm" -#include "code\modules\modular_computers\file_system\programs\generic\ntdownloader.dm" -#include "code\modules\modular_computers\file_system\programs\generic\ntnrc_client.dm" -#include "code\modules\modular_computers\file_system\programs\generic\nttransfer.dm" -#include "code\modules\modular_computers\file_system\programs\generic\records.dm" -#include "code\modules\modular_computers\file_system\programs\generic\reports.dm" -#include "code\modules\modular_computers\file_system\programs\generic\scanner.dm" -#include "code\modules\modular_computers\file_system\programs\generic\supply.dm" -#include "code\modules\modular_computers\file_system\programs\generic\wordprocessor.dm" -#include "code\modules\modular_computers\file_system\programs\medical\suit_sensors.dm" -#include "code\modules\modular_computers\file_system\programs\research\ai_restorer.dm" -#include "code\modules\modular_computers\file_system\programs\research\email_administration.dm" -#include "code\modules\modular_computers\file_system\programs\research\ntmonitor.dm" -#include "code\modules\modular_computers\file_system\programs\security\digitalwarrant.dm" -#include "code\modules\modular_computers\file_system\programs\security\forceauthorization.dm" -#include "code\modules\modular_computers\file_system\reports\crew_record.dm" -#include "code\modules\modular_computers\file_system\reports\deck_reports.dm" -#include "code\modules\modular_computers\file_system\reports\deck_reports_ru.dm" -#include "code\modules\modular_computers\file_system\reports\people.dm" -#include "code\modules\modular_computers\file_system\reports\report.dm" -#include "code\modules\modular_computers\file_system\reports\report_field.dm" -#include "code\modules\modular_computers\file_system\reports\report_field_fix.dm" -#include "code\modules\modular_computers\hardware\_hardware.dm" -#include "code\modules\modular_computers\hardware\ai_slot.dm" -#include "code\modules\modular_computers\hardware\battery_module.dm" -#include "code\modules\modular_computers\hardware\card_slot.dm" -#include "code\modules\modular_computers\hardware\hard_drive.dm" -#include "code\modules\modular_computers\hardware\nano_printer.dm" -#include "code\modules\modular_computers\hardware\network_card.dm" -#include "code\modules\modular_computers\hardware\portable_hard_drive.dm" -#include "code\modules\modular_computers\hardware\processor_unit.dm" -#include "code\modules\modular_computers\hardware\tesla_link.dm" -#include "code\modules\modular_computers\hardware\scanners\scanner.dm" -#include "code\modules\modular_computers\hardware\scanners\scanner_atmos.dm" -#include "code\modules\modular_computers\hardware\scanners\scanner_medical.dm" -#include "code\modules\modular_computers\hardware\scanners\scanner_paper.dm" -#include "code\modules\modular_computers\hardware\scanners\scanner_reagent.dm" -#include "code\modules\modular_computers\hardware\scanners\scanner_robotic.dm" -#include "code\modules\modular_computers\NTNet\NTNet.dm" -#include "code\modules\modular_computers\NTNet\NTNet_relay.dm" -#include "code\modules\modular_computers\NTNet\emails\email_account.dm" -#include "code\modules\modular_computers\NTNet\emails\email_message.dm" -#include "code\modules\modular_computers\NTNet\NTNRC\conversation.dm" -#include "code\modules\modular_computers\ntos\components.dm" -#include "code\modules\modular_computers\ntos\files.dm" -#include "code\modules\modular_computers\ntos\ntos.dm" -#include "code\modules\modular_computers\ntos\ui.dm" -#include "code\modules\modular_computers\ntos\visuals.dm" -#include "code\modules\modular_computers\ntos\subtypes\console.dm" -#include "code\modules\modular_computers\ntos\subtypes\device.dm" -#include "code\modules\modular_computers\terminal\terminal.dm" -#include "code\modules\modular_computers\terminal\terminal_commands.dm" -#include "code\modules\modular_computers\terminal\terminal_remote.dm" -#include "code\modules\modular_computers\terminal\terminal_skill_fail.dm" -#include "code\modules\modular_computers\terminal\commands\ban.dm" -#include "code\modules\modular_computers\terminal\commands\file.dm" -#include "code\modules\modular_computers\terminal\commands\hwinfo.dm" -#include "code\modules\modular_computers\terminal\commands\ifconfig.dm" -#include "code\modules\modular_computers\terminal\commands\locate.dm" -#include "code\modules\modular_computers\terminal\commands\lock.dm" -#include "code\modules\modular_computers\terminal\commands\log.dm" -#include "code\modules\modular_computers\terminal\commands\netscan.dm" -#include "code\modules\modular_computers\terminal\commands\ping.dm" -#include "code\modules\modular_computers\terminal\commands\prog.dm" -#include "code\modules\modular_computers\terminal\commands\proxy.dm" -#include "code\modules\modular_computers\terminal\commands\purge.dm" -#include "code\modules\modular_computers\terminal\commands\relays.dm" -#include "code\modules\modular_computers\terminal\commands\shutdown.dm" -#include "code\modules\modular_computers\terminal\commands\ssh.dm" -#include "code\modules\modular_computers\terminal\commands\status.dm" -#include "code\modules\modular_computers\terminal\commands\sysnotify.dm" -#include "code\modules\multiz\_stubs.dm" -#include "code\modules\multiz\basic.dm" -#include "code\modules\multiz\movement.dm" -#include "code\modules\multiz\pipes.dm" -#include "code\modules\multiz\structures.dm" -#include "code\modules\multiz\turf.dm" -#include "code\modules\multiz\zmimic\mimic_common.dm" -#include "code\modules\multiz\zmimic\mimic_movable.dm" -#include "code\modules\multiz\zmimic\mimic_turf.dm" -#include "code\modules\nano\nanoexternal.dm" -#include "code\modules\nano\nanomapgen.dm" -#include "code\modules\nano\nanoui.dm" -#include "code\modules\nano\interaction\admin.dm" -#include "code\modules\nano\interaction\base.dm" -#include "code\modules\nano\interaction\conscious.dm" -#include "code\modules\nano\interaction\contained.dm" -#include "code\modules\nano\interaction\default.dm" -#include "code\modules\nano\interaction\hands.dm" -#include "code\modules\nano\interaction\interactive.dm" -#include "code\modules\nano\interaction\inventory.dm" -#include "code\modules\nano\interaction\inventory_deep.dm" -#include "code\modules\nano\interaction\mech.dm" -#include "code\modules\nano\interaction\outside.dm" -#include "code\modules\nano\interaction\physical.dm" -#include "code\modules\nano\interaction\remote.dm" -#include "code\modules\nano\interaction\self.dm" -#include "code\modules\nano\interaction\view.dm" -#include "code\modules\nano\interaction\zlevel.dm" -#include "code\modules\nano\modules\human_appearance.dm" -#include "code\modules\nano\modules\law_manager.dm" -#include "code\modules\nano\modules\nano_module.dm" -#include "code\modules\organs\_organ_setup.dm" -#include "code\modules\organs\blood.dm" -#include "code\modules\organs\organ.dm" -#include "code\modules\organs\pain.dm" -#include "code\modules\organs\robolimbs.dm" -#include "code\modules\organs\external\_external.dm" -#include "code\modules\organs\external\_external_damage.dm" -#include "code\modules\organs\external\_external_icons.dm" -#include "code\modules\organs\external\diagnostics.dm" -#include "code\modules\organs\external\head.dm" -#include "code\modules\organs\external\standard.dm" -#include "code\modules\organs\external\stump.dm" -#include "code\modules\organs\external\unbreakable.dm" -#include "code\modules\organs\external\species\adherent.dm" -#include "code\modules\organs\external\species\diona.dm" -#include "code\modules\organs\external\species\insectoid.dm" -#include "code\modules\organs\external\species\nabber_camo.dm" -#include "code\modules\organs\external\species\nabber_stance.dm" -#include "code\modules\organs\external\species\nabber_threat.dm" -#include "code\modules\organs\external\species\prometheans.dm" -#include "code\modules\organs\external\species\vox.dm" -#include "code\modules\organs\external\species\yeosa.dm" -#include "code\modules\organs\external\wounds\wound.dm" -#include "code\modules\organs\external\wounds\wound_types.dm" -#include "code\modules\organs\internal\_internal.dm" -#include "code\modules\organs\internal\appendix.dm" -#include "code\modules\organs\internal\brain.dm" -#include "code\modules\organs\internal\eyes.dm" -#include "code\modules\organs\internal\heart.dm" -#include "code\modules\organs\internal\kidneys.dm" -#include "code\modules\organs\internal\liver.dm" -#include "code\modules\organs\internal\lungs.dm" -#include "code\modules\organs\internal\stomach.dm" -#include "code\modules\organs\internal\voice.dm" -#include "code\modules\organs\internal\species\adherent.dm" -#include "code\modules\organs\internal\species\blueforged.dm" -#include "code\modules\organs\internal\species\borer.dm" -#include "code\modules\organs\internal\species\diona.dm" -#include "code\modules\organs\internal\species\fbp.dm" -#include "code\modules\organs\internal\species\gills.dm" -#include "code\modules\organs\internal\species\golem.dm" -#include "code\modules\organs\internal\species\insectoid.dm" -#include "code\modules\organs\internal\species\ipc.dm" -#include "code\modules\organs\internal\species\nabber.dm" -#include "code\modules\organs\internal\species\promethean.dm" -#include "code\modules\organs\internal\species\skrell.dm" -#include "code\modules\organs\internal\species\starborn.dm" -#include "code\modules\organs\internal\species\unathi.dm" -#include "code\modules\organs\internal\species\vox.dm" -#include "code\modules\overmap\_defines.dm" -#include "code\modules\overmap\overmap_object.dm" -#include "code\modules\overmap\overmap_shuttle.dm" -#include "code\modules\overmap\sectors.dm" -#include "code\modules\overmap\spacetravel.dm" -#include "code\modules\overmap\disperser\disperser.dm" -#include "code\modules\overmap\disperser\disperser_charge.dm" -#include "code\modules\overmap\disperser\disperser_circuit.dm" -#include "code\modules\overmap\disperser\disperser_console.dm" -#include "code\modules\overmap\disperser\disperser_fire.dm" -#include "code\modules\overmap\events\event.dm" -#include "code\modules\overmap\exoplanets\_exoplanet.dm" -#include "code\modules\overmap\exoplanets\exoplanet_atmosphere.dm" -#include "code\modules\overmap\exoplanets\exoplanet_fauna.dm" -#include "code\modules\overmap\exoplanets\exoplanet_flora.dm" -#include "code\modules\overmap\exoplanets\exoplanet_skybox.dm" -#include "code\modules\overmap\exoplanets\random_map.dm" -#include "code\modules\overmap\exoplanets\theme.dm" -#include "code\modules\overmap\exoplanets\turfs.dm" -#include "code\modules\overmap\exoplanets\planet_themes\_planet_theme.dm" -#include "code\modules\overmap\exoplanets\planet_themes\mountains.dm" -#include "code\modules\overmap\exoplanets\planet_themes\radiation_bombing.dm" -#include "code\modules\overmap\exoplanets\planet_themes\robotic_guardians.dm" -#include "code\modules\overmap\exoplanets\planet_themes\ruined_city.dm" -#include "code\modules\overmap\exoplanets\planet_types\barren.dm" -#include "code\modules\overmap\exoplanets\planet_types\chlorine.dm" -#include "code\modules\overmap\exoplanets\planet_types\desert.dm" -#include "code\modules\overmap\exoplanets\planet_types\grass.dm" -#include "code\modules\overmap\exoplanets\planet_types\shrouded.dm" -#include "code\modules\overmap\exoplanets\planet_types\snow.dm" -#include "code\modules\overmap\exoplanets\planet_types\volcanic.dm" -#include "code\modules\overmap\ships\landable.dm" -#include "code\modules\overmap\ships\ship.dm" -#include "code\modules\overmap\ships\computers\engine_control.dm" -#include "code\modules\overmap\ships\computers\helm.dm" -#include "code\modules\overmap\ships\computers\sensors.dm" -#include "code\modules\overmap\ships\computers\ship.dm" -#include "code\modules\overmap\ships\computers\shuttle.dm" -#include "code\modules\overmap\ships\engines\engine.dm" -#include "code\modules\overmap\ships\engines\gas_thruster.dm" -#include "code\modules\overmap\ships\engines\ion_thruster.dm" -#include "code\modules\paperwork\adminpaper.dm" -#include "code\modules\paperwork\bodyscan_paper.dm" -#include "code\modules\paperwork\carbonpaper.dm" -#include "code\modules\paperwork\clipboard.dm" -#include "code\modules\paperwork\faxmachine.dm" -#include "code\modules\paperwork\filingcabinet.dm" -#include "code\modules\paperwork\folders.dm" -#include "code\modules\paperwork\handlabeler.dm" -#include "code\modules\paperwork\paper.dm" -#include "code\modules\paperwork\paper_bundle.dm" -#include "code\modules\paperwork\paper_sticky.dm" -#include "code\modules\paperwork\paperbin.dm" -#include "code\modules\paperwork\papershredder.dm" -#include "code\modules\paperwork\photocopier.dm" -#include "code\modules\paperwork\photography.dm" -#include "code\modules\paperwork\silicon_photography.dm" -#include "code\modules\paperwork\stamps.dm" -#include "code\modules\paperwork\pen\chameleon_pen.dm" -#include "code\modules\paperwork\pen\crayon.dm" -#include "code\modules\paperwork\pen\fancy.dm" -#include "code\modules\paperwork\pen\multi_pen.dm" -#include "code\modules\paperwork\pen\pen.dm" -#include "code\modules\paperwork\pen\reagent_pen.dm" -#include "code\modules\paperwork\pen\retractable_pen.dm" -#include "code\modules\parkour\human.dm" -#include "code\modules\parkour\obj.dm" -#include "code\modules\persistence\filth.dm" -#include "code\modules\persistence\graffiti.dm" -#include "code\modules\persistence\noticeboards.dm" -#include "code\modules\persistence\persistence_datum.dm" -#include "code\modules\persistence\persistence_datum_filth.dm" -#include "code\modules\persistence\persistence_datum_filth_trash.dm" -#include "code\modules\persistence\persistence_datum_graffiti.dm" -#include "code\modules\persistence\persistence_datum_paper.dm" -#include "code\modules\persistence\persistence_datum_paper_sticky.dm" -#include "code\modules\pointdefense\pointdefense.dm" -#include "code\modules\power\apc.dm" -#include "code\modules\power\batteryrack.dm" -#include "code\modules\power\breaker_box.dm" -#include "code\modules\power\cable.dm" -#include "code\modules\power\cell.dm" -#include "code\modules\power\debug_items.dm" -#include "code\modules\power\generator.dm" -#include "code\modules\power\gravitygenerator.dm" -#include "code\modules\power\lighting.dm" -#include "code\modules\power\port_gen.dm" -#include "code\modules\power\power.dm" -#include "code\modules\power\powernet.dm" -#include "code\modules\power\smes.dm" -#include "code\modules\power\smes_construction.dm" -#include "code\modules\power\smes_presets.dm" -#include "code\modules\power\solar.dm" -#include "code\modules\power\terminal.dm" -#include "code\modules\power\tracker.dm" -#include "code\modules\power\turbine.dm" -#include "code\modules\power\fusion\_setup.dm" -#include "code\modules\power\fusion\fusion_circuits.dm" -#include "code\modules\power\fusion\fusion_particle_catcher.dm" -#include "code\modules\power\fusion\fusion_reactions.dm" -#include "code\modules\power\fusion\kinetic_harvester.dm" -#include "code\modules\power\fusion\consoles\_consoles.dm" -#include "code\modules\power\fusion\consoles\core_control.dm" -#include "code\modules\power\fusion\consoles\gyrotron_control.dm" -#include "code\modules\power\fusion\consoles\injector_control.dm" -#include "code\modules\power\fusion\core\_core.dm" -#include "code\modules\power\fusion\core\core_field.dm" -#include "code\modules\power\fusion\fuel_assembly\fuel_assembly.dm" -#include "code\modules\power\fusion\fuel_assembly\fuel_compressor.dm" -#include "code\modules\power\fusion\fuel_assembly\fuel_injector.dm" -#include "code\modules\power\fusion\gyrotron\gyrotron.dm" -#include "code\modules\power\sensors\powernet_sensor.dm" -#include "code\modules\power\sensors\sensor_monitoring.dm" -#include "code\modules\power\singularity\act.dm" -#include "code\modules\power\singularity\collector.dm" -#include "code\modules\power\singularity\containment_field.dm" -#include "code\modules\power\singularity\emitter.dm" -#include "code\modules\power\singularity\field_generator.dm" -#include "code\modules\power\singularity\generator.dm" -#include "code\modules\power\singularity\singularity.dm" -#include "code\modules\power\singularity\particle_accelerator\particle.dm" -#include "code\modules\power\singularity\particle_accelerator\particle_accelerator.dm" -#include "code\modules\power\singularity\particle_accelerator\particle_chamber.dm" -#include "code\modules\power\singularity\particle_accelerator\particle_control.dm" -#include "code\modules\power\singularity\particle_accelerator\particle_emitter.dm" -#include "code\modules\power\singularity\particle_accelerator\particle_power.dm" -#include "code\modules\projectiles\ammunition.dm" -#include "code\modules\projectiles\effects.dm" -#include "code\modules\projectiles\gun.dm" -#include "code\modules\projectiles\projectile.dm" -#include "code\modules\projectiles\secure.dm" -#include "code\modules\projectiles\ammunition\boxes.dm" -#include "code\modules\projectiles\ammunition\bullets.dm" -#include "code\modules\projectiles\ammunition\magnetic.dm" -#include "code\modules\projectiles\guns\energy.dm" -#include "code\modules\projectiles\guns\launcher.dm" -#include "code\modules\projectiles\guns\projectile.dm" -#include "code\modules\projectiles\guns\energy\laser.dm" -#include "code\modules\projectiles\guns\energy\nuclear.dm" -#include "code\modules\projectiles\guns\energy\pulse.dm" -#include "code\modules\projectiles\guns\energy\secure.dm" -#include "code\modules\projectiles\guns\energy\special.dm" -#include "code\modules\projectiles\guns\energy\staves.dm" -#include "code\modules\projectiles\guns\energy\stun.dm" -#include "code\modules\projectiles\guns\energy\vox.dm" -#include "code\modules\projectiles\guns\launcher\alien.dm" -#include "code\modules\projectiles\guns\launcher\crossbow.dm" -#include "code\modules\projectiles\guns\launcher\foam_gun.dm" -#include "code\modules\projectiles\guns\launcher\grenade_launcher.dm" -#include "code\modules\projectiles\guns\launcher\money_cannon.dm" -#include "code\modules\projectiles\guns\launcher\net.dm" -#include "code\modules\projectiles\guns\launcher\pneumatic.dm" -#include "code\modules\projectiles\guns\launcher\rocket.dm" -#include "code\modules\projectiles\guns\launcher\slugsling.dm" -#include "code\modules\projectiles\guns\launcher\syringe_gun.dm" -#include "code\modules\projectiles\guns\magnetic\magnetic.dm" -#include "code\modules\projectiles\guns\magnetic\magnetic_railgun.dm" -#include "code\modules\projectiles\guns\projectile\automatic.dm" -#include "code\modules\projectiles\guns\projectile\dartgun.dm" -#include "code\modules\projectiles\guns\projectile\detective.dm" -#include "code\modules\projectiles\guns\projectile\flaregun.dm" -#include "code\modules\projectiles\guns\projectile\pistol.dm" -#include "code\modules\projectiles\guns\projectile\revolver.dm" -#include "code\modules\projectiles\guns\projectile\shotgun.dm" -#include "code\modules\projectiles\guns\projectile\sniper.dm" -#include "code\modules\projectiles\guns\projectile\zipgun.dm" -#include "code\modules\projectiles\projectile\animate.dm" -#include "code\modules\projectiles\projectile\beams.dm" -#include "code\modules\projectiles\projectile\bullets.dm" -#include "code\modules\projectiles\projectile\change.dm" -#include "code\modules\projectiles\projectile\energy.dm" -#include "code\modules\projectiles\projectile\force.dm" -#include "code\modules\projectiles\projectile\magnetic.dm" -#include "code\modules\projectiles\projectile\special.dm" -#include "code\modules\projectiles\targeting\targeting_client.dm" -#include "code\modules\projectiles\targeting\targeting_gun.dm" -#include "code\modules\projectiles\targeting\targeting_mob.dm" -#include "code\modules\projectiles\targeting\targeting_overlay.dm" -#include "code\modules\projectiles\targeting\targeting_triggers.dm" -#include "code\modules\psionics\complexus\complexus.dm" -#include "code\modules\psionics\complexus\complexus_helpers.dm" -#include "code\modules\psionics\complexus\complexus_latency.dm" -#include "code\modules\psionics\complexus\complexus_power_cache.dm" -#include "code\modules\psionics\complexus\complexus_process.dm" -#include "code\modules\psionics\complexus\complexus_topic.dm" -#include "code\modules\psionics\equipment\cerebro_enhancers.dm" -#include "code\modules\psionics\equipment\foundation_implanter.dm" -#include "code\modules\psionics\equipment\foundation_weapon.dm" -#include "code\modules\psionics\equipment\implant.dm" -#include "code\modules\psionics\equipment\null_ammo.dm" -#include "code\modules\psionics\equipment\psimeter.dm" -#include "code\modules\psionics\equipment\psimonitor.dm" -#include "code\modules\psionics\equipment\psipower.dm" -#include "code\modules\psionics\equipment\psipower_blade.dm" -#include "code\modules\psionics\equipment\psipower_tinker.dm" -#include "code\modules\psionics\equipment\psipower_tk.dm" -#include "code\modules\psionics\events\_psi.dm" -#include "code\modules\psionics\events\mini_spasm.dm" -#include "code\modules\psionics\events\psi_balm.dm" -#include "code\modules\psionics\events\psi_wail.dm" -#include "code\modules\psionics\faculties\_faculty.dm" -#include "code\modules\psionics\faculties\_power.dm" -#include "code\modules\psionics\faculties\coercion.dm" -#include "code\modules\psionics\faculties\energistics.dm" -#include "code\modules\psionics\faculties\psychokinesis.dm" -#include "code\modules\psionics\faculties\redaction.dm" -#include "code\modules\psionics\interface\ui.dm" -#include "code\modules\psionics\interface\ui_hub.dm" -#include "code\modules\psionics\interface\ui_toggles.dm" -#include "code\modules\psionics\mob\mob.dm" -#include "code\modules\psionics\mob\mob_assay.dm" -#include "code\modules\psionics\null\_null.dm" -#include "code\modules\psionics\null\chemistry.dm" -#include "code\modules\psionics\null\flooring.dm" -#include "code\modules\psionics\null\material.dm" -#include "code\modules\psionics\null\material_sheet.dm" -#include "code\modules\psionics\null\material_weapon.dm" -#include "code\modules\psionics\null\turf_floor.dm" -#include "code\modules\psionics\null\turf_wall.dm" -#include "code\modules\psionics\null\~null.dm" -#include "code\modules\radiation\radiation.dm" -#include "code\modules\random_map\_random_map_setup.dm" -#include "code\modules\random_map\random_map.dm" -#include "code\modules\random_map\random_map_verbs.dm" -#include "code\modules\random_map\automata\automata.dm" -#include "code\modules\random_map\automata\caves.dm" -#include "code\modules\random_map\building\building.dm" -#include "code\modules\random_map\drop\drop_types.dm" -#include "code\modules\random_map\drop\droppod.dm" -#include "code\modules\random_map\drop\droppod_doors.dm" -#include "code\modules\random_map\drop\supply.dm" -#include "code\modules\random_map\dungeon\predefined.dm" -#include "code\modules\random_map\dungeon\room.dm" -#include "code\modules\random_map\dungeon\room_generation.dm" -#include "code\modules\random_map\dungeon\room_theme.dm" -#include "code\modules\random_map\dungeon\winding_dungeon.dm" -#include "code\modules\random_map\dungeon\winding_dungeon_verb.dm" -#include "code\modules\random_map\dungeon\rooms\mimic_room.dm" -#include "code\modules\random_map\dungeon\rooms\monster_room.dm" -#include "code\modules\random_map\dungeon\rooms\tomb.dm" -#include "code\modules\random_map\mazes\maze.dm" -#include "code\modules\random_map\mazes\maze_cell.dm" -#include "code\modules\random_map\noise\desert.dm" -#include "code\modules\random_map\noise\magma.dm" -#include "code\modules\random_map\noise\noise.dm" -#include "code\modules\random_map\noise\ore.dm" -#include "code\modules\random_map\noise\seafloor.dm" -#include "code\modules\random_map\noise\tundra.dm" -#include "code\modules\reagents\Chemistry-Colours.dm" -#include "code\modules\reagents\Chemistry-Grinder.dm" -#include "code\modules\reagents\Chemistry-Holder.dm" -#include "code\modules\reagents\Chemistry-Logging.dm" -#include "code\modules\reagents\Chemistry-Machinery.dm" -#include "code\modules\reagents\Chemistry-Metabolism.dm" -#include "code\modules\reagents\Chemistry-Readme.dm" -#include "code\modules\reagents\Chemistry-Reagents.dm" -#include "code\modules\reagents\Chemistry-Recipes.dm" -#include "code\modules\reagents\Chemistry-Sublimator.dm" -#include "code\modules\reagents\reagent_containers.dm" -#include "code\modules\reagents\reagent_dispenser.dm" -#include "code\modules\reagents\Chemistry-Reagents\Chemistry-Reagents-Core.dm" -#include "code\modules\reagents\Chemistry-Reagents\Chemistry-Reagents-Dispenser.dm" -#include "code\modules\reagents\Chemistry-Reagents\Chemistry-Reagents-Drinks.dm" -#include "code\modules\reagents\Chemistry-Reagents\Chemistry-Reagents-Ethanol.dm" -#include "code\modules\reagents\Chemistry-Reagents\Chemistry-Reagents-Food.dm" -#include "code\modules\reagents\Chemistry-Reagents\Chemistry-Reagents-Medicine.dm" -#include "code\modules\reagents\Chemistry-Reagents\Chemistry-Reagents-Other.dm" -#include "code\modules\reagents\Chemistry-Reagents\Chemistry-Reagents-Toxins.dm" -#include "code\modules\reagents\Chemistry-Reagents\gas_properties.dm" -#include "code\modules\reagents\Chemistry-Reagents\Random\Chemistry-Reagents-Random.dm" -#include "code\modules\reagents\Chemistry-Reagents\Random\random_effects.dm" -#include "code\modules\reagents\dispenser\_defines.dm" -#include "code\modules\reagents\dispenser\cartridge.dm" -#include "code\modules\reagents\dispenser\cartridge_spawn.dm" -#include "code\modules\reagents\dispenser\dispenser2.dm" -#include "code\modules\reagents\dispenser\dispenser_presets.dm" -#include "code\modules\reagents\dispenser\presets\bar.dm" -#include "code\modules\reagents\dispenser\presets\chemistry.dm" -#include "code\modules\reagents\dispenser\presets\medicine.dm" -#include "code\modules\reagents\heat_sources\_heat_source.dm" -#include "code\modules\reagents\reagent_containers\blood_pack.dm" -#include "code\modules\reagents\reagent_containers\borghypo.dm" -#include "code\modules\reagents\reagent_containers\dropper.dm" -#include "code\modules\reagents\reagent_containers\food.dm" -#include "code\modules\reagents\reagent_containers\glass.dm" -#include "code\modules\reagents\reagent_containers\hypospray.dm" -#include "code\modules\reagents\reagent_containers\pill.dm" -#include "code\modules\reagents\reagent_containers\spray.dm" -#include "code\modules\reagents\reagent_containers\syringes.dm" -#include "code\modules\reagents\reagent_containers\drinkingglass\drinkingglass.dm" -#include "code\modules\reagents\reagent_containers\drinkingglass\extras.dm" -#include "code\modules\reagents\reagent_containers\drinkingglass\glass_boxes.dm" -#include "code\modules\reagents\reagent_containers\drinkingglass\glass_types.dm" -#include "code\modules\reagents\reagent_containers\drinkingglass\shaker.dm" -#include "code\modules\reagents\reagent_containers\food\cans.dm" -#include "code\modules\reagents\reagent_containers\food\condiment.dm" -#include "code\modules\reagents\reagent_containers\food\drinks.dm" -#include "code\modules\reagents\reagent_containers\food\fish.dm" -#include "code\modules\reagents\reagent_containers\food\lunch.dm" -#include "code\modules\reagents\reagent_containers\food\sandwich.dm" -#include "code\modules\reagents\reagent_containers\food\servingbowl.dm" -#include "code\modules\reagents\reagent_containers\food\shaker.dm" -#include "code\modules\reagents\reagent_containers\food\snacks.dm" -#include "code\modules\reagents\reagent_containers\food\sushi.dm" -#include "code\modules\reagents\reagent_containers\food\drinks\bottle.dm" -#include "code\modules\reagents\reagent_containers\food\drinks\jar.dm" -#include "code\modules\reagents\reagent_containers\food\snacks\donkpocket.dm" -#include "code\modules\reagents\reagent_containers\food\snacks\meat.dm" -#include "code\modules\reagents\reagent_containers\glass\bottle.dm" -#include "code\modules\reagents\reagent_containers\glass\bottle\robot.dm" -#include "code\modules\recycling\conveyor2.dm" -#include "code\modules\recycling\disposal-construction.dm" -#include "code\modules\recycling\disposal.dm" -#include "code\modules\recycling\disposalholder.dm" -#include "code\modules\recycling\disposalpipe.dm" -#include "code\modules\recycling\sortingmachinery.dm" -#include "code\modules\research\circuitprinter.dm" -#include "code\modules\research\destructive_analyzer.dm" -#include "code\modules\research\message_server.dm" -#include "code\modules\research\part_replacer.dm" -#include "code\modules\research\protolathe.dm" -#include "code\modules\research\rd-readme.dm" -#include "code\modules\research\rdconsole.dm" -#include "code\modules\research\rdmachines.dm" -#include "code\modules\research\research.dm" -#include "code\modules\research\server.dm" -#include "code\modules\research\designs\_designs.dm" -#include "code\modules\research\designs\design_aimodule.dm" -#include "code\modules\research\designs\designs_beaker.dm" -#include "code\modules\research\designs\designs_biostorage.dm" -#include "code\modules\research\designs\designs_bluespace.dm" -#include "code\modules\research\designs\designs_circuits.dm" -#include "code\modules\research\designs\designs_disk.dm" -#include "code\modules\research\designs\designs_exosuits.dm" -#include "code\modules\research\designs\designs_hud_optical.dm" -#include "code\modules\research\designs\designs_implant.dm" -#include "code\modules\research\designs\designs_mechfab.dm" -#include "code\modules\research\designs\designs_medical.dm" -#include "code\modules\research\designs\designs_mining.dm" -#include "code\modules\research\designs\designs_modular_computer.dm" -#include "code\modules\research\designs\designs_powercell.dm" -#include "code\modules\research\designs\designs_rig_modules.dm" -#include "code\modules\research\designs\designs_singletons.dm" -#include "code\modules\research\designs\designs_smes_coil.dm" -#include "code\modules\research\designs\designs_stock_part.dm" -#include "code\modules\research\designs\designs_surgery.dm" -#include "code\modules\research\designs\designs_synthstorage.dm" -#include "code\modules\research\designs\designs_syringe.dm" -#include "code\modules\research\designs\designs_tool.dm" -#include "code\modules\research\designs\designs_weapon.dm" -#include "code\modules\security levels\keycard authentication.dm" -#include "code\modules\shield_generators\floor_diffuser.dm" -#include "code\modules\shield_generators\handheld_diffuser.dm" -#include "code\modules\shield_generators\modes.dm" -#include "code\modules\shield_generators\shield.dm" -#include "code\modules\shield_generators\shield_generator.dm" -#include "code\modules\shieldgen\emergency_shield.dm" -#include "code\modules\shieldgen\energy_field.dm" -#include "code\modules\shieldgen\shieldwallgen.dm" -#include "code\modules\shuttles\antagonist.dm" -#include "code\modules\shuttles\departmental.dm" -#include "code\modules\shuttles\escape_pods.dm" -#include "code\modules\shuttles\landmarks.dm" -#include "code\modules\shuttles\shuttle.dm" -#include "code\modules\shuttles\shuttle_autodock.dm" -#include "code\modules\shuttles\shuttle_console.dm" -#include "code\modules\shuttles\shuttle_console_multi.dm" -#include "code\modules\shuttles\shuttle_emergency.dm" -#include "code\modules\shuttles\shuttle_engines.dm" -#include "code\modules\shuttles\shuttle_ferry.dm" -#include "code\modules\shuttles\shuttle_log.dm" -#include "code\modules\shuttles\shuttle_specops.dm" -#include "code\modules\shuttles\shuttle_supply.dm" -#include "code\modules\shuttles\shuttles_multi.dm" -#include "code\modules\skrell\skrell_rigs.dm" -#include "code\modules\species\species.dm" -#include "code\modules\species\species_attack.dm" -#include "code\modules\species\species_getters.dm" -#include "code\modules\species\species_grab.dm" -#include "code\modules\species\species_helpers.dm" -#include "code\modules\species\species_hud.dm" -#include "code\modules\species\species_random.dm" -#include "code\modules\species\species_shapeshift.dm" -#include "code\modules\species\outsider\random.dm" -#include "code\modules\species\outsider\shadow.dm" -#include "code\modules\species\outsider\starlight.dm" -#include "code\modules\species\outsider\vox.dm" -#include "code\modules\species\outsider\zombie.dm" -#include "code\modules\species\shell\body_markings.dm" -#include "code\modules\species\shell\shell.dm" -#include "code\modules\species\station\adherent.dm" -#include "code\modules\species\station\golem.dm" -#include "code\modules\species\station\human_subspecies.dm" -#include "code\modules\species\station\lizard.dm" -#include "code\modules\species\station\lizard_subspecies.dm" -#include "code\modules\species\station\machine.dm" -#include "code\modules\species\station\monkey.dm" -#include "code\modules\species\station\nabber.dm" -#include "code\modules\species\station\prometheans.dm" -#include "code\modules\species\station\station.dm" -#include "code\modules\spells\artifacts.dm" -#include "code\modules\spells\construct_spells.dm" -#include "code\modules\spells\contracts.dm" -#include "code\modules\spells\no_clothes.dm" -#include "code\modules\spells\racial_wizard.dm" -#include "code\modules\spells\spell_code.dm" -#include "code\modules\spells\spell_projectile.dm" -#include "code\modules\spells\spellbook.dm" -#include "code\modules\spells\spells.dm" -#include "code\modules\spells\aoe_turf\aoe_turf.dm" -#include "code\modules\spells\aoe_turf\blink.dm" -#include "code\modules\spells\aoe_turf\charge.dm" -#include "code\modules\spells\aoe_turf\disable_tech.dm" -#include "code\modules\spells\aoe_turf\drain_blood.dm" -#include "code\modules\spells\aoe_turf\exchange_wounds.dm" -#include "code\modules\spells\aoe_turf\knock.dm" -#include "code\modules\spells\aoe_turf\smoke.dm" -#include "code\modules\spells\aoe_turf\summons.dm" -#include "code\modules\spells\aoe_turf\conjure\conjure.dm" -#include "code\modules\spells\aoe_turf\conjure\construct.dm" -#include "code\modules\spells\aoe_turf\conjure\druidic_spells.dm" -#include "code\modules\spells\aoe_turf\conjure\faithful_hound.dm" -#include "code\modules\spells\aoe_turf\conjure\force_portal.dm" -#include "code\modules\spells\aoe_turf\conjure\forcewall.dm" -#include "code\modules\spells\aoe_turf\conjure\grove.dm" -#include "code\modules\spells\artifacts\spellbound_servants.dm" -#include "code\modules\spells\artifacts\storage.dm" -#include "code\modules\spells\general\acid_spray.dm" -#include "code\modules\spells\general\area_teleport.dm" -#include "code\modules\spells\general\contract_spells.dm" -#include "code\modules\spells\general\create_air.dm" -#include "code\modules\spells\general\invisibility.dm" -#include "code\modules\spells\general\mark_recall.dm" -#include "code\modules\spells\general\portal_teleport.dm" -#include "code\modules\spells\general\radiant_aura.dm" -#include "code\modules\spells\general\return_master.dm" -#include "code\modules\spells\general\tear_veil.dm" -#include "code\modules\spells\general\toggle_armor.dm" -#include "code\modules\spells\general\veil_of_shadows.dm" -#include "code\modules\spells\hand\blood_shards.dm" -#include "code\modules\spells\hand\burning_grip.dm" -#include "code\modules\spells\hand\entangle.dm" -#include "code\modules\spells\hand\hand.dm" -#include "code\modules\spells\hand\hand_item.dm" -#include "code\modules\spells\hand\slippery_surface.dm" -#include "code\modules\spells\hand\sunwrath.dm" -#include "code\modules\spells\spellbook\battlemage.dm" -#include "code\modules\spells\spellbook\cleric.dm" -#include "code\modules\spells\spellbook\druid.dm" -#include "code\modules\spells\spellbook\spatial.dm" -#include "code\modules\spells\spellbook\standard.dm" -#include "code\modules\spells\spellbook\student.dm" -#include "code\modules\spells\targeted\analyze.dm" -#include "code\modules\spells\targeted\blood_boil.dm" -#include "code\modules\spells\targeted\cleric_spells.dm" -#include "code\modules\spells\targeted\ethereal_jaunt.dm" -#include "code\modules\spells\targeted\exhude_pleasantness.dm" -#include "code\modules\spells\targeted\genetic.dm" -#include "code\modules\spells\targeted\glimpse_of_eternity.dm" -#include "code\modules\spells\targeted\harvest.dm" -#include "code\modules\spells\targeted\shapeshift.dm" -#include "code\modules\spells\targeted\shatter_mind.dm" -#include "code\modules\spells\targeted\shift.dm" -#include "code\modules\spells\targeted\subjugate.dm" -#include "code\modules\spells\targeted\swap.dm" -#include "code\modules\spells\targeted\targeted.dm" -#include "code\modules\spells\targeted\torment.dm" -#include "code\modules\spells\targeted\equip\burning_touch.dm" -#include "code\modules\spells\targeted\equip\dyrnwyn.dm" -#include "code\modules\spells\targeted\equip\equip.dm" -#include "code\modules\spells\targeted\equip\holy_relic.dm" -#include "code\modules\spells\targeted\equip\horsemask.dm" -#include "code\modules\spells\targeted\equip\party_hardy.dm" -#include "code\modules\spells\targeted\equip\seed.dm" -#include "code\modules\spells\targeted\equip\shield.dm" -#include "code\modules\spells\targeted\projectile\dumbfire.dm" -#include "code\modules\spells\targeted\projectile\fireball.dm" -#include "code\modules\spells\targeted\projectile\magic_missile.dm" -#include "code\modules\spells\targeted\projectile\passage.dm" -#include "code\modules\spells\targeted\projectile\projectile.dm" -#include "code\modules\spells\targeted\projectile\stuncuff.dm" -#include "code\modules\sprite_accessories\_accessory.dm" -#include "code\modules\sprite_accessories\_accessory_facial.dm" -#include "code\modules\sprite_accessories\_accessory_hair.dm" -#include "code\modules\sprite_accessories\_accessory_markings.dm" -#include "code\modules\sprite_accessories\_accessory_skin.dm" -#include "code\modules\sprite_accessories\accessory_hair_fade.dm" -#include "code\modules\sprite_accessories\accessory_human.dm" -#include "code\modules\sprite_accessories\accessory_ipc.dm" -#include "code\modules\sprite_accessories\accessory_skrell.dm" -#include "code\modules\sprite_accessories\accessory_tattoo.dm" -#include "code\modules\sprite_accessories\accessory_unathi.dm" -#include "code\modules\sprite_accessories\accessory_vox.dm" -#include "code\modules\submaps\_submap.dm" -#include "code\modules\submaps\submap_archetype.dm" -#include "code\modules\submaps\submap_job.dm" -#include "code\modules\submaps\submap_join.dm" -#include "code\modules\submaps\submap_landmark.dm" -#include "code\modules\supermatter\setup_supermatter.dm" -#include "code\modules\supermatter\supermatter.dm" -#include "code\modules\surgery\__surgery_setup.dm" -#include "code\modules\surgery\bones.dm" -#include "code\modules\surgery\crystal.dm" -#include "code\modules\surgery\encased.dm" -#include "code\modules\surgery\face.dm" -#include "code\modules\surgery\generic.dm" -#include "code\modules\surgery\implant.dm" -#include "code\modules\surgery\limb_reattach.dm" -#include "code\modules\surgery\organs_internal.dm" -#include "code\modules\surgery\other.dm" -#include "code\modules\surgery\robotics.dm" -#include "code\modules\surgery\slimes.dm" -#include "code\modules\surgery\surgery.dm" -#include "code\modules\surgery\~surgery.dm" -#include "code\modules\synthesized_instruments\echo_editor.dm" -#include "code\modules\synthesized_instruments\env_editor.dm" -#include "code\modules\synthesized_instruments\event_manager.dm" -#include "code\modules\synthesized_instruments\globals.dm" -#include "code\modules\synthesized_instruments\instruments.dm" -#include "code\modules\synthesized_instruments\real_instruments.dm" -#include "code\modules\synthesized_instruments\song.dm" -#include "code\modules\synthesized_instruments\song_editor.dm" -#include "code\modules\synthesized_instruments\sound_player.dm" -#include "code\modules\synthesized_instruments\sound_token.dm" -#include "code\modules\synthesized_instruments\usage_info.dm" -#include "code\modules\synthesized_instruments\instrument_data\brass.dm" -#include "code\modules\synthesized_instruments\instrument_data\chromatic_percussion.dm" -#include "code\modules\synthesized_instruments\instrument_data\fun.dm" -#include "code\modules\synthesized_instruments\instrument_data\guitar.dm" -#include "code\modules\synthesized_instruments\instrument_data\impossible_instruments.dm" -#include "code\modules\synthesized_instruments\instrument_data\obsolete.dm" -#include "code\modules\synthesized_instruments\instrument_data\organ.dm" -#include "code\modules\synthesized_instruments\instrument_data\piano.dm" -#include "code\modules\synthesized_instruments\real_instruments\Guitar\guitar.dm" -#include "code\modules\synthesized_instruments\real_instruments\Piano\piano.dm" -#include "code\modules\synthesized_instruments\real_instruments\Synthesizer\synthesizer.dm" -#include "code\modules\synthesized_instruments\real_instruments\Trumpet\trumpet.dm" -#include "code\modules\synthesized_instruments\real_instruments\Violin\violin.dm" -#include "code\modules\tables\flipping.dm" -#include "code\modules\tables\interactions.dm" -#include "code\modules\tables\presets.dm" -#include "code\modules\tables\rack.dm" -#include "code\modules\tables\tables.dm" -#include "code\modules\tables\update_triggers.dm" -#include "code\modules\tension\tension.dm" -#include "code\modules\TGS\tgs.dm" -#include "code\modules\TGS\tgs\includes.dm" -#include "code\modules\turbolift\_turbolift.dm" -#include "code\modules\turbolift\turbolift.dm" -#include "code\modules\turbolift\turbolift_areas.dm" -#include "code\modules\turbolift\turbolift_console.dm" -#include "code\modules\turbolift\turbolift_door.dm" -#include "code\modules\turbolift\turbolift_floor.dm" -#include "code\modules\turbolift\turbolift_map.dm" -#include "code\modules\turbolift\turbolift_turfs.dm" -#include "code\modules\ventcrawl\ventcrawl.dm" -#include "code\modules\ventcrawl\ventcrawl_atmospherics.dm" -#include "code\modules\ventcrawl\ventcrawl_multiz.dm" -#include "code\modules\ventcrawl\ventcrawl_verb.dm" -#include "code\modules\webhooks\_webhook.dm" -#include "code\modules\webhooks\webhook_admin.dm" -#include "code\modules\webhooks\webhook_custom_event.dm" -#include "code\modules\webhooks\webhook_ooc.dm" -#include "code\modules\webhooks\webhook_registration.dm" -#include "code\modules\webhooks\webhook_roundend.dm" -#include "code\modules\webhooks\webhook_roundstart.dm" -#include "code\modules\webhooks\webhook_submap.dm" -#include "code\modules\xenoarcheaology\anomaly_container.dm" -#include "code\modules\xenoarcheaology\boulder.dm" -#include "code\modules\xenoarcheaology\effect.dm" -#include "code\modules\xenoarcheaology\misc.dm" -#include "code\modules\xenoarcheaology\sampling.dm" -#include "code\modules\xenoarcheaology\artifacts\artifact.dm" -#include "code\modules\xenoarcheaology\artifacts\artifact_find.dm" -#include "code\modules\xenoarcheaology\artifacts\autocloner.dm" -#include "code\modules\xenoarcheaology\artifacts\gigadrill.dm" -#include "code\modules\xenoarcheaology\artifacts\replicator.dm" -#include "code\modules\xenoarcheaology\effects\badfeeling.dm" -#include "code\modules\xenoarcheaology\effects\cellcharge.dm" -#include "code\modules\xenoarcheaology\effects\celldrain.dm" -#include "code\modules\xenoarcheaology\effects\cold.dm" -#include "code\modules\xenoarcheaology\effects\dnaswitch.dm" -#include "code\modules\xenoarcheaology\effects\emp.dm" -#include "code\modules\xenoarcheaology\effects\goodfeeling.dm" -#include "code\modules\xenoarcheaology\effects\heal.dm" -#include "code\modules\xenoarcheaology\effects\heat.dm" -#include "code\modules\xenoarcheaology\effects\hurt.dm" -#include "code\modules\xenoarcheaology\effects\pushback.dm" -#include "code\modules\xenoarcheaology\effects\radiate.dm" -#include "code\modules\xenoarcheaology\effects\roboheal.dm" -#include "code\modules\xenoarcheaology\effects\robohurt.dm" -#include "code\modules\xenoarcheaology\effects\sleepy.dm" -#include "code\modules\xenoarcheaology\effects\stun.dm" -#include "code\modules\xenoarcheaology\effects\teleport.dm" -#include "code\modules\xenoarcheaology\effects\hellportal\hell_portal.dm" -#include "code\modules\xenoarcheaology\effects\hellportal\portals.dm" -#include "code\modules\xenoarcheaology\finds\find_spawning.dm" -#include "code\modules\xenoarcheaology\finds\finds.dm" -#include "code\modules\xenoarcheaology\finds\finds_defines.dm" -#include "code\modules\xenoarcheaology\finds\fossils.dm" -#include "code\modules\xenoarcheaology\finds\misc.dm" -#include "code\modules\xenoarcheaology\finds\special.dm" -#include "code\modules\xenoarcheaology\finds\talking.dm" -#include "code\modules\xenoarcheaology\tools\ano_device_battery.dm" -#include "code\modules\xenoarcheaology\tools\artifact_analyser.dm" -#include "code\modules\xenoarcheaology\tools\artifact_harvester.dm" -#include "code\modules\xenoarcheaology\tools\artifact_scanner.dm" -#include "code\modules\xenoarcheaology\tools\coolant_tank.dm" -#include "code\modules\xenoarcheaology\tools\equipment.dm" -#include "code\modules\xenoarcheaology\tools\geosample_scanner.dm" -#include "code\modules\xenoarcheaology\tools\suspension_generator.dm" -#include "code\modules\xenoarcheaology\tools\tools.dm" -#include "code\modules\xenoarcheaology\tools\tools_pickaxe.dm" -#include "code\modules\xenoarcheaology\triggers\_trigger.dm" -#include "code\modules\xenoarcheaology\triggers\chemical.dm" -#include "code\modules\xenoarcheaology\triggers\energy.dm" -#include "code\modules\xenoarcheaology\triggers\force.dm" -#include "code\modules\xenoarcheaology\triggers\gas.dm" -#include "code\modules\xenoarcheaology\triggers\temperature.dm" -#include "code\modules\xenoarcheaology\triggers\touch.dm" -#include "code\modules\xgm\gases.dm" -#include "code\modules\xgm\xgm_gas_data.dm" -#include "code\modules\xgm\xgm_gas_mixture.dm" -#include "code\modules\ZAS\_docs.dm" -#include "code\modules\ZAS\Airflow.dm" -#include "code\modules\ZAS\Atom.dm" -#include "code\modules\ZAS\Connection.dm" -#include "code\modules\ZAS\ConnectionGroup.dm" -#include "code\modules\ZAS\ConnectionManager.dm" -#include "code\modules\ZAS\Debug.dm" -#include "code\modules\ZAS\Diagnostic.dm" -#include "code\modules\ZAS\Fire.dm" -#include "code\modules\ZAS\Phoron.dm" -#include "code\modules\ZAS\Turf.dm" -#include "code\modules\ZAS\Variable Settings.dm" -#include "code\modules\ZAS\Zone.dm" -#include "code\procs\announce.dm" -#include "code\procs\AStar.dm" -#include "code\procs\dbcore.dm" -#include "code\procs\hud.dm" -#include "code\procs\radio.dm" -#include "code\unit_tests\_defines.dm" -#include "code\unit_tests\_includes.dm" -#include "code\unit_tests\alt_appearances_test.dm" -#include "code\unit_tests\area_tests.dm" -#include "code\unit_tests\atmospherics_tests.dm" -#include "code\unit_tests\cargo_tests.dm" -#include "code\unit_tests\closets.dm" -#include "code\unit_tests\culture.dm" -#include "code\unit_tests\equipment_tests.dm" -#include "code\unit_tests\food_tests.dm" -#include "code\unit_tests\foundation_tests.dm" -#include "code\unit_tests\fusion_plants.dm" -#include "code\unit_tests\graph_tests.dm" -#include "code\unit_tests\icon_tests.dm" -#include "code\unit_tests\integrated_circuits.dm" -#include "code\unit_tests\job_tests.dm" -#include "code\unit_tests\loadout_tests.dm" -#include "code\unit_tests\machine_tests.dm" -#include "code\unit_tests\map_tests.dm" -#include "code\unit_tests\mob_tests.dm" -#include "code\unit_tests\movement_tests.dm" -#include "code\unit_tests\music_test.dm" -#include "code\unit_tests\observation_tests.dm" -#include "code\unit_tests\organ_tests.dm" -#include "code\unit_tests\overmap_tests.dm" -#include "code\unit_tests\power_tests.dm" -#include "code\unit_tests\reagent_color_test.dm" -#include "code\unit_tests\seed_tests.dm" -#include "code\unit_tests\shuttle_tests.dm" -#include "code\unit_tests\submaps.dm" -#include "code\unit_tests\subsystem_tests.dm" -#include "code\unit_tests\test_obj.dm" -#include "code\unit_tests\time_tests.dm" -#include "code\unit_tests\unique_tests.dm" -#include "code\unit_tests\unit_test.dm" -#include "code\unit_tests\uplink_tests.dm" -#include "code\unit_tests\view_variables_test.dm" -#include "code\unit_tests\virtual_mob_tests.dm" -#include "code\unit_tests\zas_tests.dm" -#include "code\unit_tests\~helpers.dm" -#include "customs\code\eloncake.dm" -#include "customs\code\hacso.dm" -#include "customs\code\rassvetsolnca.dm" -#include "customs\code\zakatneba.dm" -#include "interface\interface.dm" -#include "interface\skin.dmf" -#include "maps\_maps.dm" -#include "proxima\code\_helpers\colors.dm" -#include "proxima\code\_helpers\_onclick\hud\_defines_ai.dm" -#include "proxima\code\_helpers\_onclick\hud\ai_hud.dm" -#include "proxima\code\_helpers\_onclick\hud\ai_screen_object.dm" -#include "proxima\code\datums\uplink\badassery.dm" -#include "proxima\code\game\gamemodes\objective.dm" -#include "proxima\code\game\items\poraz.dm" -#include "proxima\code\game\items\devices\remote_device.dm" -#include "proxima\code\game\items\weapons\gun\energy\k342.dm" -#include "proxima\code\game\items\weapons\melee\swords.dm" -#include "proxima\code\game\machinery\disk_writer.dm" -#include "proxima\code\game\machinery\jukebox.dm" -#include "proxima\code\game\objects\structures\holoplants.dm" -#include "proxima\code\modules\filmgrain.dm" -#include "proxima\code\modules\poraz_corgi.dm" -#include "proxima\code\modules\species.dm" -#include "proxima\code\modules\admin\xeno_whitelist.dm" -#include "proxima\code\modules\clothing\accessories\sweater.dm" -#include "proxima\code\modules\clothing\suit\suit.dm" -#include "proxima\code\modules\clothing\under\under.dm" -#include "proxima\code\modules\mechs\armour.dm" -#include "proxima\code\modules\mechs\guns.dm" -#include "proxima\code\modules\mechs\premade\combat_merc.dm" -#include "proxima\code\modules\paperwork\paper.dm" -#include "proxima\code\modules\silicon\ai\ai.dm" -#include "proxima\code\modules\silicon\ai\procs.dm" -#include "proxima\code\modules\sprite_accessories\accessory_hair.dm" -#include "proxima\code\modules\sprite_accessories\accessory_human.dm" -#include "proxima\code\modules\TGSIntegration\TGSChatCommands.dm" -#include "proxima\code\modules\TGSIntegration\TGSChatHelpers.dm" -#include "proxima\code\modules\TGSIntegration\TGSChatHooks.dm" -#include "proxima\code\modules\webhooks\webhook_xeno_whitelist.dm" -#include "proxima\code\music_player\_music_player.dm" -#include "proxima\code\music_player\_music_tape.dm" -#include "proxima\code\music_player\subtypes_player.dm" -#include "proxima\code\music_player\subtypes_tape.dm" -#include "~code\global_init.dm" -// END_INCLUDE diff --git a/code/__datastructures/globals.dm b/code/__datastructures/globals.dm deleted file mode 100644 index 4d4f4ca1c506f..0000000000000 --- a/code/__datastructures/globals.dm +++ /dev/null @@ -1,95 +0,0 @@ -/* * -* Managed Globals -*/ - -var/global/datum/globals/GLOB - - -/datum/globals - var/static/atom/movable/clickable_stat/__stat_line - - -/datum/globals/Destroy(force) - if (!GLOB || GLOB == src) - GLOB = src - return 1 //QDEL_HINT_LETMELIVE - return ..() - - -/datum/globals/New() - var/static/initialized - if (initialized) - return - initialized = TRUE - var/start = world.time - for (var/init in typesof(/datum/globals/proc)) - if (copytext("[init]", 21, 24) != "GI_") - continue - call(src, init)() - if (world.time != start) - warning("[init] slept!") - - -/datum/globals/proc/UpdateStat() - if (!__stat_line) - __stat_line = new (null, src) - __stat_line.name = "Edit" - stat("Managed Globals", __stat_line) - - -/datum/globals/VV_hidden(add_var_name) - var/static/list/result - if (!result) - var/datum/temp = new - result = temp.vars + list( - "__stat_line" - ) - if (istext(add_var_name)) - result += add_var_name - return - return result.Copy() - - -/// Initializes the GLOB member to V. -#define GLOBAL_INIT(X, V) \ -/datum/globals/proc/GI_I_##X() { \ - var/static/done; \ - if (done) { \ - log_debug("GLOB.GI_I_[#X] ran >1 time"); \ - return; \ - } \ - done = TRUE; \ - ##X = V; \ -} - -#define GLOBAL_VAR_CONST(X, V) /datum/globals/var/const/##X = V; - -#define GLOBAL_VAR(X) /datum/globals/var/static/##X; - -#define GLOBAL_VAR_INIT(X, V) GLOBAL_VAR(X) GLOBAL_INIT(X, V) - -#define GLOBAL_DATUM(X, P) /datum/globals/var/static##P/##X; - -#define GLOBAL_DATUM_INIT(X, P, V) GLOBAL_DATUM(X, P) GLOBAL_INIT(X, V) - -#define GLOBAL_LIST(X) /datum/globals/var/static/list/##X; - -#define GLOBAL_LIST_INIT(X, V) GLOBAL_LIST(X) GLOBAL_INIT(X, V) - -#define GLOBAL_LIST_EMPTY(X) GLOBAL_LIST_INIT(X, list()) - -#if !defined(TESTING) -/// Prevents the GLOB member from being shown in View Variables. -#define GLOBAL_PROTECT(X) \ -/datum/globals/proc/GI_P_##X() { \ - var/static/done; \ - if (done) { \ - log_debug("GLOB.GI_P_[#X] ran >1 time"); \ - return; \ - } \ - done = TRUE; \ - VV_hidden(#X); \ -} -#else -#define GLOBAL_PROTECT(X) -#endif diff --git a/code/__datastructures/priority_queue.dm b/code/__datastructures/priority_queue.dm deleted file mode 100644 index 380db428fd247..0000000000000 --- a/code/__datastructures/priority_queue.dm +++ /dev/null @@ -1,63 +0,0 @@ - -////////////////////// -//PriorityQueue object -////////////////////// - -//an ordered list, using the cmp proc to weight the list elements -/PriorityQueue - var/list/L //the actual queue - var/cmp //the weight function used to order the queue - -/PriorityQueue/New(compare) - L = new() - cmp = compare - -/PriorityQueue/proc/IsEmpty() - return !L.len - -//add an element in the list, -//immediatly ordering it to its position using dichotomic search -/PriorityQueue/proc/Enqueue(atom/A) - ADD_SORTED(L, A, cmp) - -//removes and returns the first element in the queue -/PriorityQueue/proc/Dequeue() - if(!L.len) - return 0 - . = L[1] - - Remove(.) - -//removes an element -/PriorityQueue/proc/Remove(atom/A) - . = L.Remove(A) - -//returns a copy of the elements list -/PriorityQueue/proc/List() - . = L.Copy() - -//return the position of an element or 0 if not found -/PriorityQueue/proc/Seek(atom/A) - . = L.Find(A) - -//return the element at the i_th position -/PriorityQueue/proc/Get(i) - if(i > L.len || i < 1) - return 0 - return L[i] - -//return the length of the queue -/PriorityQueue/proc/Length() - . = L.len - -//replace the passed element at it's right position using the cmp proc -/PriorityQueue/proc/ReSort(atom/A) - var/i = Seek(A) - if(i == 0) - return - while(i < L.len && call(cmp)(L[i],L[i+1]) > 0) - L.Swap(i,i+1) - i++ - while(i > 1 && call(cmp)(L[i],L[i-1]) <= 0) //last inserted element being first in case of ties (optimization) - L.Swap(i,i-1) - i-- diff --git a/code/__datastructures/stack.dm b/code/__datastructures/stack.dm deleted file mode 100644 index 76e492e0d8aca..0000000000000 --- a/code/__datastructures/stack.dm +++ /dev/null @@ -1,66 +0,0 @@ -/datum/stack - var/list/stack - var/max_elements = 0 - -/datum/stack/New(list/elements, max) - ..() - stack = elements ? elements.Copy() : list() - if(max) - max_elements = max - -/datum/stack/Destroy() - Clear() - . = ..() - -/datum/stack/proc/Pop() - if(is_empty()) - return null - . = stack[stack.len] - stack.Cut(stack.len,0) - -/datum/stack/proc/Push(element) - if(max_elements && (stack.len+1 > max_elements)) - return null - stack += element - -/datum/stack/proc/Top() - if(is_empty()) - return null - . = stack[stack.len] - -/datum/stack/proc/Remove(element) - stack -= element - -/datum/stack/proc/is_empty() - . = stack.len ? 0 : 1 - -//Rotate entire stack left with the leftmost looping around to the right -/datum/stack/proc/RotateLeft() - if(is_empty()) - return 0 - . = stack[1] - stack.Cut(1,2) - Push(.) - -//Rotate entire stack to the right with the rightmost looping around to the left -/datum/stack/proc/RotateRight() - if(is_empty()) - return 0 - . = stack[stack.len] - stack.Cut(stack.len,0) - stack.Insert(1,.) - - -/datum/stack/proc/Copy() - var/datum/stack/S=new() - S.stack = stack.Copy() - S.max_elements = max_elements - return S - -/datum/stack/proc/Clear() - stack.Cut() - -/datum/stack/proc/QdelClear() - for(var/entry in stack) - qdel(entry) - stack.Cut() diff --git a/code/__defines/MC.dm b/code/__defines/MC.dm deleted file mode 100644 index 9b3a21c216359..0000000000000 --- a/code/__defines/MC.dm +++ /dev/null @@ -1,196 +0,0 @@ -#define TICK_CHECK ( world.tick_usage > Master.current_ticklimit ) - -#define CHECK_TICK if TICK_CHECK stoplag() - -#define MC_TICK_CHECK ( ( world.tick_usage > Master.current_ticklimit || src.state != SS_RUNNING ) ? pause() : 0 ) - - -#define GAME_STATE 2 ** (Master.current_runlevel - 1) - - -#define MC_SPLIT_TICK_INIT(phase_count) var/original_tick_limit = Master.current_ticklimit; var/split_tick_phases = ##phase_count - - -#define MC_SPLIT_TICK \ - if(split_tick_phases > 1){\ - Master.current_ticklimit = ((original_tick_limit - world.tick_usage) / split_tick_phases) + world.tick_usage;\ - --split_tick_phases;\ - } else {\ - Master.current_ticklimit = original_tick_limit;\ - } - - -// Used to smooth out costs to try and avoid oscillation. -#define MC_AVERAGE_FAST(average, current) (0.7 * (average) + 0.3 * (current)) - -#define MC_AVERAGE(average, current) (0.8 * (average) + 0.2 * (current)) - -#define MC_AVERAGE_SLOW(average, current) (0.9 * (average) + 0.1 * (current)) - -#define MC_AVG_FAST_UP_SLOW_DOWN(average, current) (average > current ? MC_AVERAGE_SLOW(average, current) : MC_AVERAGE_FAST(average, current)) - -#define MC_AVG_SLOW_UP_FAST_DOWN(average, current) (average < current ? MC_AVERAGE_SLOW(average, current) : MC_AVERAGE_FAST(average, current)) - - -/**** -* Subsystem helper macros -****/ - -/// Attempt to ensure that the subsystem is a singleton. Do not use directly. -#define NEW_SS_GLOBAL(varname) if(varname != src){if(istype(varname)){Recover(varname);qdel(varname);}varname = src;} - -/// Boilerplate for a new global subsystem object and its associated type. -#define SUBSYSTEM_DEF(X) var/global/datum/controller/subsystem/##X/SS##X;\ -/datum/controller/subsystem/##X/New(){\ - NEW_SS_GLOBAL(SS##X);\ - PreInit();\ -}\ -/datum/controller/subsystem/##X - -#define TIMER_SUBSYSTEM_DEF(X) GLOBAL_REAL(SS##X, /datum/controller/subsystem/timer/##X);\ -/datum/controller/subsystem/timer/##X/New(){\ - NEW_SS_GLOBAL(SS##X);\ - PreInit();\ -}\ -/datum/controller/subsystem/timer/##X/fire() {..() /*just so it shows up on the profiler*/} \ -/datum/controller/subsystem/timer/##X - -/// Boilerplate for a new global processing subsystem object and its associated type. -#define PROCESSING_SUBSYSTEM_DEF(X) var/global/datum/controller/subsystem/processing/##X/SS##X;\ -/datum/controller/subsystem/processing/##X/New(){\ - NEW_SS_GLOBAL(SS##X);\ - PreInit();\ -}\ -/datum/controller/subsystem/processing/##X/Recover() {\ - if(istype(SS##X.processing)) {\ - processing = SS##X.processing; \ - }\ -}\ -/datum/controller/subsystem/processing/##X - -/// Register a datum to be processed with a processing subsystem. -#define START_PROCESSING(Processor, Datum) \ -if (Datum.is_processing) {\ - if(Datum.is_processing != #Processor)\ - {\ - crash_with("Failed to start processing. [log_info_line(Datum)] is already being processed by [Datum.is_processing] but queue attempt occured on [#Processor]."); \ - }\ -} else {\ - Datum.is_processing = #Processor;\ - Processor.processing += Datum;\ -} - -/// Unregister a datum with a processing subsystem. -#define STOP_PROCESSING(Processor, Datum) \ -if(Datum.is_processing) {\ - if(Processor.processing.Remove(Datum)) {\ - Datum.is_processing = null;\ - } else {\ - crash_with("Failed to stop processing. [log_info_line(Datum)] is being processed by [Datum.is_processing] but de-queue attempt occured on [#Processor]."); \ - }\ -} - -/// START specific to SSmachines -#define START_PROCESSING_MACHINE(machine, flag)\ - if(!istype(machine, /obj/machinery)) CRASH("A non-machine [log_info_line(machine)] was queued to process on the machinery subsystem.");\ - machine.processing_flags |= flag;\ - START_PROCESSING(SSmachines, machine) - -/// STOP specific to SSmachines -#define STOP_PROCESSING_MACHINE(machine, flag)\ - machine.processing_flags &= ~flag;\ - if(machine.processing_flags == 0) STOP_PROCESSING(SSmachines, machine) - - -/**** -* Subsystem Flags -****/ - -/// The subsystem's Initialize() will not be called. -#define SS_NO_INIT FLAG(0) - -/// The subsystem's fire() will not be called. This is preferable to can_fire = FALSE because it will not be added to the MC's list of active systems. -#define SS_NO_FIRE FLAG(1) - -/// The subsystem runs on spare CPU time, after all non-background subsystems have run that tick. Priority is considered against other SS_BACKGROUND subsystems. -#define SS_BACKGROUND FLAG(2) - -/// The subsystem does not tick check and should not run unless enough time can be guaranteed or it must to stay current. -#define SS_NO_TICK_CHECK FLAG(3) - -/// Treat the value of the subsystem's wait as ticks, not time. Forces it to run in the first tick. Implicitly has all runlevels. Ignores SS_BACKGROUND if set. Intended for systems that act like a mini-MC, like timers. -#define SS_TICKER FLAG(4) - -/// Attempt to keep the subsystem's timing real-world regular by adjusting fire timing to be earlier the later it previously ran. -#define SS_KEEP_TIMING FLAG(5) - -/// Calculate the subsystem's next fire time from when it finished, not when it started. -#define SS_POST_FIRE_TIMING FLAG(6) - -/// Run Shutdown() on server shutdown so the SS can finalize state. -#define SS_NEEDS_SHUTDOWN FLAG(7) - - -/**** -* Subsystem states -****/ - -/// The subsystem is not running. -#define SS_IDLE 0 - -/// The subsystem is queued to be run. -#define SS_QUEUED 1 - -/// The subsystem is currently being run. -#define SS_RUNNING 2 - -/// The subsystem's run is paused by MC_TICK_CHECK and will resume later. -#define SS_PAUSED 3 - -/// The subsystem is sleeping during its run. -#define SS_SLEEPING 4 - -/// The subsystem is in the process of being paused. -#define SS_PAUSING 5 - -/**** -* Subsystem initialization states -****/ - -#define SS_INITSTATE_NONE 0 - -#define SS_INITSTATE_STARTED 1 - -#define SS_INITSTATE_DONE 2 - - -/**** -* SStimer -****/ - -/// Create a hash from the timer's configuration and don't run it if one already exists. -#define TIMER_UNIQUE FLAG(0) - -/// For timers with TIMER_UNIQUE, do not include the timer's delay as part of its uniquenes. -#define TIMER_NO_HASH_WAIT FLAG(4) - -/// For timers with TIMER_UNIQUE, replace the old timer instead of discarding the new one. -#define TIMER_OVERRIDE FLAG(1) - -/// Use real world time instead of server time. More expensive and should be reserved for client display like animations and sounds. -#define TIMER_CLIENT_TIME FLAG(2) - -/// The call to addtimer() will return a timer ID which may be passed to deltimer() to stop it if it still exists. -#define TIMER_STOPPABLE FLAG(3) - -/// Repeat the timer until it's deleted or the parent is destroyed. -#define TIMER_LOOP FLAG(5) - -///Delete the timer on parent datum Destroy() and when deltimer'd -#define TIMER_DELETE_ME FLAG(6) - -/// The default timer ID. -#define TIMER_ID_NULL -1 - -/// Automatically adding filename and line to the timer's arguments for debugging purposes. -#define addtimer(args...) _addtimer(args, file = __FILE__, line = __LINE__) diff --git a/code/__defines/ZAS.dm b/code/__defines/ZAS.dm deleted file mode 100644 index 2d846ef9776c0..0000000000000 --- a/code/__defines/ZAS.dm +++ /dev/null @@ -1,141 +0,0 @@ -//#define ZASDBG -#define MULTIZAS - -#define AIR_BLOCKED 1 -#define ZONE_BLOCKED 2 -#define BLOCKED 3 - -#define ZONE_MIN_SIZE 14 //zones with less than this many turfs will always merge, even if the connection is not direct - -#define CANPASS_ALWAYS 1 -#define CANPASS_DENSITY 2 -#define CANPASS_PROC 3 -#define CANPASS_NEVER 4 - -#define NORTHUP (NORTH|UP) -#define EASTUP (EAST|UP) -#define SOUTHUP (SOUTH|UP) -#define WESTUP (WEST|UP) -#define NORTHDOWN (NORTH|DOWN) -#define EASTDOWN (EAST|DOWN) -#define SOUTHDOWN (SOUTH|DOWN) -#define WESTDOWN (WEST|DOWN) - -#define TURF_HAS_VALID_ZONE(T) (istype(T, /turf/simulated) && T:zone && !T:zone:invalid) - -#ifdef MULTIZAS - -GLOBAL_LIST_INIT(gzn_check, list( - NORTH, - SOUTH, - EAST, - WEST, - UP, - DOWN -)) - -GLOBAL_LIST_INIT(csrfz_check, list( - NORTHEAST, - NORTHWEST, - SOUTHEAST, - SOUTHWEST, - NORTHUP, - EASTUP, - WESTUP, - SOUTHUP, - NORTHDOWN, - EASTDOWN, - WESTDOWN, - SOUTHDOWN -)) - -#define ATMOS_CANPASS_TURF(ret,A,B) \ - if (A.blocks_air & AIR_BLOCKED || B.blocks_air & AIR_BLOCKED) { \ - ret = BLOCKED; \ - } \ - else if (B.z != A.z) { \ - if (B.z < A.z) { \ - ret = (A.z_flags & ZM_ALLOW_ATMOS) ? ZONE_BLOCKED : BLOCKED; \ - } \ - else { \ - ret = (B.z_flags & ZM_ALLOW_ATMOS) ? ZONE_BLOCKED : BLOCKED; \ - } \ - } \ - else if (A.blocks_air & ZONE_BLOCKED || B.blocks_air & ZONE_BLOCKED) { \ - ret = (A.z == B.z) ? ZONE_BLOCKED : AIR_BLOCKED; \ - } \ - else if (A.contents.len) { \ - ret = 0;\ - for (var/thing in A) { \ - var/atom/movable/AM = thing; \ - switch (AM.atmos_canpass) { \ - if (CANPASS_ALWAYS) { \ - continue; \ - } \ - if (CANPASS_DENSITY) { \ - if (AM.density) { \ - ret |= AIR_BLOCKED; \ - } \ - } \ - if (CANPASS_PROC) { \ - ret |= AM.c_airblock(B); \ - } \ - if (CANPASS_NEVER) { \ - ret = BLOCKED; \ - } \ - } \ - if (ret == BLOCKED) { \ - break;\ - }\ - }\ - } -#else - -GLOBAL_LIST_INIT(csrfz_check, list( - NORTHEAST, - NORTHWEST, - SOUTHEAST, - SOUTHWEST -)) - -GLOBAL_LIST_INIT(gzn_check, list( - NORTH, - SOUTH, - EAST, - WEST -)) - -#define ATMOS_CANPASS_TURF(ret,A,B) \ - if (A.blocks_air & AIR_BLOCKED || B.blocks_air & AIR_BLOCKED) { \ - ret = BLOCKED; \ - } \ - else if (A.blocks_air & ZONE_BLOCKED || B.blocks_air & ZONE_BLOCKED) { \ - ret = ZONE_BLOCKED; \ - } \ - else if (A.contents.len) { \ - ret = 0;\ - for (var/thing in A) { \ - var/atom/movable/AM = thing; \ - switch (AM.atmos_canpass) { \ - if (CANPASS_ALWAYS) { \ - continue; \ - } \ - if (CANPASS_DENSITY) { \ - if (AM.density) { \ - ret |= AIR_BLOCKED; \ - } \ - } \ - if (CANPASS_PROC) { \ - ret |= AM.c_airblock(B); \ - } \ - if (CANPASS_NEVER) { \ - ret = BLOCKED; \ - } \ - } \ - if (ret == BLOCKED) { \ - break;\ - }\ - }\ - } - -#endif diff --git a/code/__defines/__compile_options.dm b/code/__defines/__compile_options.dm deleted file mode 100644 index 2595ee6dd1ebb..0000000000000 --- a/code/__defines/__compile_options.dm +++ /dev/null @@ -1,2 +0,0 @@ -#define BACKGROUND_ENABLED 0 // The default value for all uses of set background. Set background can cause gradual lag and is recommended you only turn this on if necessary. - // 1 will enable set background. 0 will disable set background. \ No newline at end of file diff --git a/code/__defines/__initialization.dm b/code/__defines/__initialization.dm deleted file mode 100644 index 83dfb481df8de..0000000000000 --- a/code/__defines/__initialization.dm +++ /dev/null @@ -1,19 +0,0 @@ -#define INITIALIZATION_INSSATOMS 0 //New should not call Initialize -#define INITIALIZATION_INSSATOMS_LATE 1 //New should not call Initialize; after the first pass is complete (handled differently) -#define INITIALIZATION_INNEW_MAPLOAD 2 //New should call Initialize(TRUE) -#define INITIALIZATION_INNEW_REGULAR 3 //New should call Initialize(FALSE) - -#define INITIALIZE_HINT_NORMAL 0 //Nothing happens -#define INITIALIZE_HINT_LATELOAD 1 //Call LateInitialize -#define INITIALIZE_HINT_QDEL 2 //Call qdel on the atom - -#define ATOM_FLAG_INITIALIZED FLAG(0) // The atom has been initialized. Also see flags.dm - -//type and all subtypes should always call Initialize in New() -#define INITIALIZE_IMMEDIATE(X) ##X/New(loc, ...){\ - ..();\ - if(!(atom_flags & ATOM_FLAG_INITIALIZED)) {\ - args[1] = TRUE;\ - SSatoms.InitAtom(src, args);\ - }\ -} diff --git a/code/__defines/__renderer.dm b/code/__defines/__renderer.dm deleted file mode 100644 index 370a76cdd7e14..0000000000000 --- a/code/__defines/__renderer.dm +++ /dev/null @@ -1,214 +0,0 @@ -// Planes, layers, and defaults for _renderer.dm - -/* - from stddef.dm, planes & layers built into byond. - - FLOAT_LAYER = -1 - AREA_LAYER = 1 - TURF_LAYER = 2 - OBJ_LAYER = 3 - MOB_LAYER = 4 - FLY_LAYER = 5 - EFFECTS_LAYER = 5000 - TOPDOWN_LAYER = 10000 - BACKGROUND_LAYER = 20000 - EFFECTS_LAYER = 5000 - TOPDOWN_LAYER = 10000 - BACKGROUND_LAYER = 20000 - ------ - - FLOAT_PLANE = -32767 -*/ - -#define LOWEST_PLANE -200 - -#define CLICKCATCHER_PLANE -100 - -#define SPACE_PLANE -99 - #define SPACE_LAYER 1 -#define SKYBOX_PLANE -98 - #define SKYBOX_LAYER 1 - -#define DUST_PLANE -97 - #define DEBRIS_LAYER 1 - #define DUST_LAYER 2 - -// Openspace uses planes -80 through -70. -#define OPENTURF_MAX_PLANE -70 -#define OPENTURF_MAX_DEPTH 10 // The maxiumum number of planes deep we'll go before we just dump everything on the same plane. - -#define OVER_OPENSPACE_PLANE -4 - -#define BLACKNESS_PLANE 0 //Blackness plane as per DM documentation. - -#define HEAT_EFFECT_PLANE -4 -#define HEAT_EFFECT_TARGET "*heat" -#define HEAT_COMPOSITE_TARGET "*heatc" -#define WARP_EFFECT_PLANE -3 - -#define DEFAULT_PLANE 1 - #define PLATING_LAYER 1 - //ABOVE PLATING - #define HOLOMAP_LAYER 1.01 - #define DECAL_PLATING_LAYER 1.02 - #define DISPOSALS_PIPE_LAYER 1.03 - #define LATTICE_LAYER 1.04 - #define PIPE_LAYER 1.05 - #define WIRE_LAYER 1.06 - #define WIRE_TERMINAL_LAYER 1.07 - #define ABOVE_WIRE_LAYER 1.08 - //TURF PLANE - //TURF_LAYER = 2 - #define TURF_DETAIL_LAYER 2.01 - #define TURF_SHADOW_LAYER 2.02 - //ABOVE TURF - #define DECAL_LAYER 2.03 - #define RUNE_LAYER 2.04 - #define ABOVE_TILE_LAYER 2.05 - #define EXPOSED_PIPE_LAYER 2.06 - #define EXPOSED_WIRE_LAYER 2.07 - #define EXPOSED_WIRE_TERMINAL_LAYER 2.08 - #define CATWALK_LAYER 2.09 - #define ABOVE_CATWALK_LAYER 2.10 - #define BLOOD_LAYER 2.11 - #define MOUSETRAP_LAYER 2.12 - #define PLANT_LAYER 2.13 - #define AO_LAYER 2.14 - //HIDING MOB - #define HIDING_MOB_LAYER 2.15 - #define SHALLOW_FLUID_LAYER 2.16 - #define MOB_SHADOW_LAYER 2.17 - //OBJ - #define BELOW_DOOR_LAYER 2.18 - #define OPEN_DOOR_LAYER 2.19 - #define BELOW_TABLE_LAYER 2.20 - #define TABLE_LAYER 2.21 - #define BELOW_OBJ_LAYER 2.22 - #define STRUCTURE_LAYER 2.23 - // OBJ_LAYER 3 - #define ABOVE_OBJ_LAYER 3.01 - #define CLOSED_DOOR_LAYER 3.02 - #define ABOVE_DOOR_LAYER 3.03 - #define SIDE_WINDOW_LAYER 3.04 - #define FULL_WINDOW_LAYER 3.05 - #define ABOVE_WINDOW_LAYER 3.06 - #define HOLOMAP_OVERLAY_LAYER 3.061 - //LYING MOB AND HUMAN - #define LYING_MOB_LAYER 3.07 - #define LYING_HUMAN_LAYER 3.08 - #define BASE_ABOVE_OBJ_LAYER 3.09 - //HUMAN - #define BASE_HUMAN_LAYER 3.10 - //MOB - #define MECH_UNDER_LAYER 3.11 - // MOB_LAYER 4 - #define MECH_BASE_LAYER 4.01 - #define MECH_INTERMEDIATE_LAYER 4.02 - #define MECH_PILOT_LAYER 4.03 - #define MECH_LEG_LAYER 4.04 - #define MECH_COCKPIT_LAYER 4.05 - #define MECH_ARM_LAYER 4.06 - #define MECH_GEAR_LAYER 4.07 - //ABOVE HUMAN - #define ABOVE_HUMAN_LAYER 4.08 - #define VEHICLE_LOAD_LAYER 4.09 - #define CAMERA_LAYER 4.10 - //BLOB - #define BLOB_SHIELD_LAYER 4.11 - #define BLOB_NODE_LAYER 4.12 - #define BLOB_CORE_LAYER 4.13 - //EFFECTS BELOW LIGHTING - #define BELOW_PROJECTILE_LAYER 4.14 - #define DEEP_FLUID_LAYER 4.15 - #define FIRE_LAYER 4.16 - #define PROJECTILE_LAYER 4.17 - #define ABOVE_PROJECTILE_LAYER 4.18 - #define SINGULARITY_LAYER 4.19 - #define POINTER_LAYER 4.20 - #define MIMICED_LIGHTING_LAYER 4.21 // Z-Mimic-managed lighting - - //FLY_LAYER 5 - //OBSERVER - #define OBSERVER_LAYER 5.1 - - #define OBFUSCATION_LAYER 5.2 - #define BASE_AREA_LAYER 999 - -#define OBSERVER_PLANE 2 - -#define LIGHTING_PLANE 3 // For Lighting. - The highest plane (ignoring all other even higher planes) - #define LIGHTBULB_LAYER 0 - #define LIGHTING_LAYER 1 - #define ABOVE_LIGHTING_LAYER 2 - -#define EFFECTS_ABOVE_LIGHTING_PLANE 4 // For glowy eyes, laser beams, etc. that shouldn't be affected by darkness - #define EYE_GLOW_LAYER 1 - #define BEAM_PROJECTILE_LAYER 2 - #define SUPERMATTER_WALL_LAYER 3 - #define SPEECH_INDICATOR_LAYER 4 - -#define FULLSCREEN_PLANE 5 // for fullscreen overlays that do not cover the hud. - - #define FULLSCREEN_LAYER 0 - #define DAMAGE_LAYER 1 - #define IMPAIRED_LAYER 2 - #define BLIND_LAYER 3 - #define CRIT_LAYER 4 - -#define HUD_PLANE 6 - #define UNDER_HUD_LAYER 0 - #define HUD_BASE_LAYER 2 - #define HUD_ITEM_LAYER 3 - #define HUD_ABOVE_ITEM_LAYER 4 - - -//-------------------- Rendering --------------------- - -/// Semantics - The final compositor or a filter effect renderer -#define RENDER_GROUP_NONE null - -/// Things to be drawn within the game context -#define RENDER_GROUP_SCENE 990 - -/// Things to be drawn within the screen context -#define RENDER_GROUP_SCREEN 995 - -/// The final render group, for compositing -#define RENDER_GROUP_FINAL 999 - - -/// Causes the atom to ignore clicks, hovers, etc. -#define MOUSE_OPACITY_UNCLICKABLE 0 - -/// Causes the atom to catch clicks, hovers, etc. -#define MOUSE_OPACITY_NORMAL 1 - -/// Causes the atom to catch clicks, hovers, etc, taking priority over NORMAL for a shared pointer target. -#define MOUSE_OPACITY_PRIORITY 2 - - -/atom/plane = DEFAULT_PLANE - -#define DEFAULT_APPEARANCE_FLAGS (PIXEL_SCALE) - -/atom/appearance_flags = DEFAULT_APPEARANCE_FLAGS -/atom/movable/appearance_flags = DEFAULT_APPEARANCE_FLAGS | TILE_BOUND // Most AMs are not visibly bigger than a tile. -/image/appearance_flags = DEFAULT_APPEARANCE_FLAGS -/mutable_appearance/appearance_flags = DEFAULT_APPEARANCE_FLAGS // Inherits /image but re docs, subject to change - - -/image/proc/plating_decal_layerise() - plane = DEFAULT_PLANE - layer = DECAL_PLATING_LAYER - -/image/proc/turf_decal_layerise() - plane = DEFAULT_PLANE - layer = DECAL_LAYER - -/atom/proc/hud_layerise() - plane = HUD_PLANE - layer = HUD_ITEM_LAYER - -/atom/proc/reset_plane_and_layer() - plane = initial(plane) - layer = initial(layer) diff --git a/code/__defines/_render_readme.md b/code/__defines/_render_readme.md deleted file mode 100644 index 094eebcedcc95..0000000000000 --- a/code/__defines/_render_readme.md +++ /dev/null @@ -1,62 +0,0 @@ -# The Render Readme - -1. [Byond internal functionality](#byond-internal-functionality) -2. [Known internal snowflake](#known-internal-snowflake) -3. [The rendering solution](#the-rendering-solution) -4. [Render plates](#render-plates) - -## Byond internal functionality -This part of the guide will assume that you have read the byond reference entry for rendering at www.byond.com/docs/ref//#/{notes}/renderer - -When you create an atom, this will always create an internal byond structure called an "appearance". This appearance you will likely be familiar with, as it is exposed through the /atom/var/appearance var. This appearance var holds data on how to render the object, ie what icon/icon_state/color etc it is using. Note that appearance vars will always copy, and do not hold a reference. When you update a var, for example lets pretend we add a filter, the appearance will be updated to include the filter. Note that, however, vis_contents objets are uniquely excluded from appearances. Then, when the filter is updated, the appearance will be recreated, and the atom marked as "dirty". After it has been updated, the SendMaps() function (sometimes also called maptick), which is a internal byond function that iterates over all objects in a clients view and in the clients.mob.contents, checks for "dirty" atoms, then resends any "dirty" appearances to clients as needed and unmarks them as dirty. This function is notoriosly slow, but we can see it's tick usage through the world.map_cpu var. We can also avoid more complex checks checking whether an object is visible on a clients screen by using the TILE_BOUND appearance flag. - -Finally, we arrive at clientside behavior, where we have two main clientside functions: GetMapIcons, and Render. GetMapIcons is repsonsible for actual rendering calculations on the clientside, such as "Group Icons and Set bounds", which performs clientside calculations for transform matrixes. Note that particles here are handled in a seperate thread and are not diplayed in the clientside profiler. Render handles the actual drawing of the screen. - -## Known internal snowflake -The following is an incomplete list of pitfalls that come from byond snowflake that are known, this list is obviously incomplete. - -1. Transforms are very slow on clientside. This is not usually noticable, but if you start using large amounts of them it will grind you to a halt quickly, regardless of whether its on overlays or objs -2. The darkness plane. The darkness plane has specific variables it needs to render correctly, and these can be found in the plane masters file. it is composed internally of two parts, a black mask over the clients screen, and a non rendering mask that blocks all luminosity=0 turfs and their contents from rendering if the SEE_BLACKNESS flag is set properly. It behaves very oddly, such as forcing itself to ALWAYS render or pre-render on blend_multiply blend mode or refusing to render the black mask properly otherwise. The blocker will always block rendering but the mask can be layered under other objects. -3. render_target/source. Render_target/source will only copy certain rendering instructions, and these are only defined as "etc." in the byond reference. Known non copied appearance vars include: blend_mode, plane, layer, vis_contents, mouse_opacity... -4. Large icons on the screen that peek over the edge will instead of only rendering partly like you would expect will instead stretch the screen while not adgusting the render buffer, which means that you can actively see as tiles and map objects are rendered. You can use this for an easy "offscreen" UI. -5. Numerically large filters on objects of any size will torpedo performance, even though large objects with small filters will perform massively better. (ie blur(size=20) BAD) -6. Texture Atlas: the texture atlas byond uses to render icons is very susceptible to corruption and can regularily replace icons with other icons or just not render at all. This can be exasperated by alt tabbing or pausing the dreamseeker process. -7. The renderer is awful code and lummox said he will try changing a large part of it for 515 so keep an eye on that -8. Byond uses DirectX 9 (Lummox said he wants to update to DirectX 11) -9. Particles are just fancy overlays and are not independent of their owner -10. Maptick items inside mob.contents are cheaper compared to most other movables - -## The rendering solution -One of the main issues with making pretty effects is how objects can only render to one plane, and how filters can only be applied to single objects. Quite simply it means we cant apply effects to multiple planes at once, and an effect to one plane only by treating it as a single unit: - -![](https://raw.githubusercontent.com/tgstation/documentation-assets/main/rendering/renderpipe_old.png) - -A semi-fix to stop from having to apply effects to every single plane is to use the render controllers, to automatically apply filters and colors automatically onto their controlled planes. - -The solution is thus instead we replace plane masters rendering directly to client with planes that render multiple planes onto them as objects in order to be able to affect multiple planes while treating them as a single object. This is done by relaying the plane using a "render relay" onto a "render plate" which acts as a plane master of plane masters of sorts, and since planes are rendered onto it as single objects any filters we apply to them will render over the planes, treating them as a single unit. - -![](https://raw.githubusercontent.com/tgstation/documentation-assets/main/rendering/renderpipe_refactored.png) - -We can also choose to render these by decreasing the scaling all applied effects (effect_size/number_of_plates_rendered_to) then rendering it onto multiple planes: - -![](https://raw.githubusercontent.com/tgstation/documentation-assets/main/rendering/renderpipe_refactored_multiple.png) - -Through these this allows us to treat planes as single objects, and lets us distort them as a single unit, most notably works wonders with the displacement filter. Specifically, here you can displacement_filter a plane onto a plate, which then will treat all the other planes rendered on that plate as a single unit. - -## Render plates - -The rendering system uses two objects to unify planes: render_relay and render_plates. Render relays use render_target/source and the relay_render_to_plane proc to replicate the plane master on the render relay. This render relay is then rendered onto a render_plate, which is a plane master that renders the render_relays onto itself. This plate can then be hierachically rendered with the same process until it reaches the master render_plate, which is the plate that will actually render to the player. These plates naturally in the byond style have quirks. For example, rendering to two plates will double any effects such as color or filters, and as such you need to carefully manage how you render them. Keep in mind as well that when sorting the layers for rendering on a plane that they should not be negative, this is handled automatically in relay_render_to_plane. When debugging note that mouse_opacity can act bizzarly with this method, such as only allowing you to click things that are layered over objects on a certain plane but auomatically setting the mouse_opacity should be handling this. Note that if you decide to manipulate a plane with internal byond objects that you will have to manually extrapolate the vars that are set if you want to render them to another plane (See blackness plane for example), and that this is not documented anywhere. - - -Goodluck and godspeed with coding - - Just another contributor - -## Baystation Differences - -The bay implementation differs in some points but you can treat the prior sections as broadly accurate. - -- Locally we have refactored and simplified the above concepts down to `/atom/movable/renderer` and undifferentiated relay movables. -- There is no type destinction between renderers intended to draw normal entities and renderers intended to draw other renderers. -- We instead refer to these as "Plane Renderers" and "Group Renderers", and note that Group Renderers may render *other* Group Renderers in turn. -- We additionally add the extra "Effect Renderer" as a distinct concept. Effect renderers are more virtual, and drawn to other renderers by filters instead. -- See the comments in _renderer.dm for detail next to code. diff --git a/code/__defines/_renderer.dm b/code/__defines/_renderer.dm deleted file mode 100644 index fa4f2fcfb2c23..0000000000000 --- a/code/__defines/_renderer.dm +++ /dev/null @@ -1,327 +0,0 @@ -/* * -* Renderers -* Renderers are virtual objects that act as draw groups of things, including -* other Renderers. Renderers are similar to older uses of PLANE_MASTER but -* employ render targets using the "*" slate prefix to draw off-screen, to be -* composited in a controlled and flexible order and in some cases, reuse for -* visual effects. -*/ - -/// The base /renderer definition and defaults. -/atom/movable/renderer - abstract_type = /atom/movable/renderer - appearance_flags = PLANE_MASTER - screen_loc = "CENTER" - plane = LOWEST_PLANE - blend_mode = BLEND_OVERLAY - - /// The compositing renderer this renderer belongs to. - var/group = RENDER_GROUP_FINAL - - /// The relay movable used to composite this renderer to its group. - var/atom/movable/relay // Also see https://secure.byond.com/forum/?post=2141928 maybe. - - /// Optional blend mode override for the renderer's composition relay. - var/relay_blend_mode - - /// If text, uses the text or, if TRUE, uses "*AUTO-[name]" - var/render_target_name = TRUE - - var/mob/owner = null - - -/atom/movable/renderer/Destroy() - owner = null - QDEL_NULL(relay) - return ..() - - -INITIALIZE_IMMEDIATE(/atom/movable/renderer) - - -/atom/movable/renderer/Initialize(mapload, mob/owner) - . = ..() - if (. == INITIALIZE_HINT_QDEL) - return - src.owner = owner - if (isnull(group)) - if (istext(render_target_name)) - render_target = render_target_name - return - if (istext(render_target_name)) - render_target = render_target_name - else if (render_target_name) - render_target = "*[ckey(name)]" - relay = new - relay.screen_loc = "CENTER" - relay.appearance_flags = PASS_MOUSE | NO_CLIENT_COLOR | KEEP_TOGETHER - relay.name = "[render_target] relay" - relay.mouse_opacity = mouse_opacity - relay.render_source = render_target - relay.layer = (plane + abs(LOWEST_PLANE)) * 0.5 - relay.plane = group - if (isnull(relay_blend_mode)) - relay.blend_mode = blend_mode - else - relay.blend_mode = relay_blend_mode - -/** -* Graphic preferences -* -* Some renderers may be able to use a graphic preference to determine how to display effects. For example reduce particle counts or filter variables. -*/ -/atom/movable/renderer/proc/GraphicsUpdate() - return - - -/** -* Renderers on /mob -* We attach renderers to mobs for their lifespan. Only mobs with clients get -* renderers, and they are removed again when the mob loses its client. Mobs -* get their own unique renderer instances but it would not be inconceivable -* to share them globally. -*/ - -/// The list of renderers associated with this mob. -/mob/var/list/atom/movable/renderer/renderers - - -/// Creates the mob's renderers on /Login() -/mob/proc/CreateRenderers() - if (!renderers) - renderers = list() - for (var/atom/movable/renderer/renderer as anything in subtypesof(/atom/movable/renderer)) - if(istype(renderer, /atom/movable/renderer/shared)) - continue - renderer = new renderer (null, src) - renderers[renderer] = renderer.plane // (renderer = plane) format for visual debugging - if (renderer.relay) - my_client.screen += renderer.relay - my_client.screen += renderer - - for (var/atom/movable/renderer/zrenderer as anything in GLOB.zmimic_renderers) - if (zrenderer.relay) - my_client.screen += zrenderer.relay - my_client.screen += zrenderer - -/// Removes the mob's renderers on /Logout() -/mob/proc/RemoveRenderers() - if(my_client) - for(var/atom/movable/renderer/renderer as anything in renderers) - my_client.screen -= renderer - if (renderer.relay) - my_client.screen -= renderer.relay - qdel(renderer) - for (var/atom/movable/renderer/renderer as anything in GLOB.zmimic_renderers) - my_client.screen -= renderer - if (renderers) - renderers.Cut() - -/* * -* Plane Renderers -* We treat some renderers as planes with layers. When some atom has the same plane -* as a Plane Renderer, it is drawn by that renderer. The layer of the atom determines -* its draw order within the scope of the renderer. The draw order of same-layered things -* is probably by atom contents order, but can be assumed not to matter - if it's out of -* order, it should have a more appropriate layer value. -* Higher plane values are composited over lower. Here, they are ordered from under to over. -*/ - - /// Handles byond internal letterboxing. Avoid touching. -/atom/movable/renderer/letterbox - name = "Letterbox" - group = RENDER_GROUP_SCENE - plane = BLACKNESS_PLANE - appearance_flags = PLANE_MASTER | NO_CLIENT_COLOR - blend_mode = BLEND_MULTIPLY - color = list(null, null, null, "#0000", "#000f") - mouse_opacity = MOUSE_OPACITY_UNCLICKABLE - -/atom/movable/renderer/space - name = "Space" - group = RENDER_GROUP_SCENE - plane = SPACE_PLANE - -/atom/movable/renderer/skybox - name = "Skybox" - group = RENDER_GROUP_SCENE - plane = SKYBOX_PLANE - relay_blend_mode = BLEND_MULTIPLY - -//Z Mimic planemasters -> Could apply scaling for parallax though that requires copying appearances from adjacent turfs -GLOBAL_LIST_EMPTY(zmimic_renderers) - -/hook/startup/proc/create_global_renderers() //Some (most) renderers probably do not need to be instantiated per mob. So may as well make them global and just add to screen - //Zmimic planemasters - for(var/i = 0 to OPENTURF_MAX_DEPTH) - GLOB.zmimic_renderers += new /atom/movable/renderer/shared/zmimic(null, null, OPENTURF_MAX_PLANE - i) - - return TRUE - -/atom/movable/renderer/shared/zmimic - name = "Zrenderer" - group = RENDER_GROUP_SCENE - -/atom/movable/renderer/shared/zmimic/Initialize(mapload, _owner, _plane) - plane = _plane - name = "Zrenderer [plane]" - . = ..() - -// Draws the game world; live mobs, items, turfs, etc. -/atom/movable/renderer/game - name = "Game" - group = RENDER_GROUP_SCENE - plane = DEFAULT_PLANE - -/// Draws observers; ghosts, camera eyes, etc. -/atom/movable/renderer/observers - name = "Observers" - group = RENDER_GROUP_SCENE - plane = OBSERVER_PLANE - - -/// Draws darkness effects. -/atom/movable/renderer/lighting - name = "Lighting" - group = RENDER_GROUP_SCENE - plane = LIGHTING_PLANE - appearance_flags = PLANE_MASTER | NO_CLIENT_COLOR - relay_blend_mode = BLEND_MULTIPLY - color = list( - -1, 0, 0, 0, // R - 0, -1, 0, 0, // G - 0, 0, -1, 0, // B - 0, 0, 0, 0, // A - 1, 1, 1, 1 // Mapping - ) - mouse_opacity = MOUSE_OPACITY_UNCLICKABLE - -/// Draws visuals that should not be affected by darkness. -/atom/movable/renderer/above_lighting - name = "Above Lighting" - group = RENDER_GROUP_SCENE - plane = EFFECTS_ABOVE_LIGHTING_PLANE - - -/// Draws full screen visual effects, like pain and bluespace. -/atom/movable/renderer/screen_effects - name = "Screen Effects" - group = RENDER_GROUP_SCENE - plane = FULLSCREEN_PLANE - mouse_opacity = MOUSE_OPACITY_UNCLICKABLE - - -/// Draws user interface elements. -/atom/movable/renderer/interface - name = "Interface" - group = RENDER_GROUP_SCREEN - plane = HUD_PLANE - - -/* * -* Group renderers -* We treat some renderers as render groups that other renderers subscribe to. Renderers -* subscribe themselves to groups by setting a group value equal to the plane of a Group -* Renderer. This value is used for the Renderer's relay to include it into the Group, and -* the Renderer's plane is used as the relay's layer. -* Group renderers can subscribe themselves to other Group Renderers. This allows for more -* granular manipulation of how the final scene is composed. -*/ - -/// Render group for stuff INSIDE the typical game context - people, items, lighting, etc. -/atom/movable/renderer/scene_group - name = "Scene Group" - group = RENDER_GROUP_FINAL - plane = RENDER_GROUP_SCENE - - -/// Render group for stuff OUTSIDE the typical game context - UI, full screen effects, etc. -/atom/movable/renderer/screen_group - name = "Screen Group" - group = RENDER_GROUP_FINAL - plane = RENDER_GROUP_SCREEN - - -/// Render group for final compositing before user display. -/atom/movable/renderer/final_group - name = "Final Group" - group = RENDER_GROUP_NONE - plane = RENDER_GROUP_FINAL - - -/* * -* Effect Renderers -* Some renderers are used to produce complex screen effects. These are drawn using filters -* rather than composition groups, and may be added to another renderer in the following -* fashion. Setting a render_target_name with no group is the expected patter for Effect -* Renderers as it allows them to draw to a slate that will be empty unless a relevant -* behavior, such as the effect atom below, causes them to be noticeable. -*/ - - -/// Renders the /obj/effect/effect/warp example effect as well as gravity catapult effects -/atom/movable/renderer/warp - name = "Warp Effect" - group = RENDER_GROUP_NONE - plane = WARP_EFFECT_PLANE - render_target_name = "*warp" - mouse_opacity = MOUSE_OPACITY_UNCLICKABLE - -//Similar to warp but not as strong -/atom/movable/renderer/heat - name = "Heat Effect" - group = RENDER_GROUP_NONE - plane = HEAT_EFFECT_PLANE - render_target_name = HEAT_COMPOSITE_TARGET - mouse_opacity = MOUSE_OPACITY_UNCLICKABLE - - var/obj/gas_heat_object = null - -/atom/movable/renderer/heat/proc/Setup() - var/mob/M = owner - - if(istype(M)) - var/quality = M.get_preference_value(/datum/client_preference/graphics_quality) - - if(gas_heat_object) - vis_contents -= gas_heat_object - - if (quality == GLOB.PREF_LOW) - if(!istype(gas_heat_object, /obj/effect/heat)) - QDEL_NULL(gas_heat_object) - gas_heat_object = new /obj/effect/heat(null) - else - if(!istype(gas_heat_object, /obj/particle_emitter/heat)) - QDEL_NULL(gas_heat_object) - gas_heat_object = new /obj/particle_emitter/heat(null, -1) - if (quality == GLOB.PREF_MED) - gas_heat_object.particles?.count = 250 - gas_heat_object.particles?.spawning = 15 - else if (quality == GLOB.PREF_HIGH) - gas_heat_object.particles?.count = 600 - gas_heat_object.particles?.spawning = 35 - - vis_contents += gas_heat_object - -/atom/movable/renderer/heat/Initialize() - . = ..() - Setup() - -/atom/movable/renderer/heat/GraphicsUpdate() - . = ..() - Setup() - -/atom/movable/renderer/scene_group/Initialize() - . = ..() - filters += filter(type = "displace", render_source = "*warp", size = 5) - filters += filter(type = "displace", render_source = HEAT_COMPOSITE_TARGET, size = 2.5) - -/// Example of a warp filter for /renderer use -/obj/effect/effect/warp - plane = WARP_EFFECT_PLANE - appearance_flags = PIXEL_SCALE - icon = 'icons/effects/352x352.dmi' - icon_state = "singularity_s11" - pixel_x = -176 - pixel_y = -176 - no_z_overlay = TRUE diff --git a/code/__defines/admin.dm b/code/__defines/admin.dm deleted file mode 100644 index 9ad16bd1ef0cf..0000000000000 --- a/code/__defines/admin.dm +++ /dev/null @@ -1,48 +0,0 @@ -// A set of constants used to determine which type of mute an admin wishes to apply. -#define MUTE_IC FLAG(0) -#define MUTE_OOC FLAG(1) -#define MUTE_PRAY FLAG(2) -#define MUTE_ADMINHELP FLAG(3) -#define MUTE_DEADCHAT FLAG(4) -#define MUTE_AOOC FLAG(5) -#define MUTE_ALL (~EMPTY_BITFIELD) - -// Some constants for DB_Ban -#define BANTYPE_PERMA 1 -#define BANTYPE_TEMP 2 -#define BANTYPE_JOB_PERMA 3 -#define BANTYPE_JOB_TEMP 4 -#define BANTYPE_ANY_FULLBAN 5 // Used to locate stuff to unban. - -#define ROUNDSTART_LOGOUT_REPORT_TIME 6000 // Amount of time (in deciseconds) after the rounds starts, that the player disconnect report is issued. - -// Admin permissions. -#define R_BUILDMODE FLAG(0) -#define R_ADMIN FLAG(1) -#define R_BAN FLAG(2) -#define R_FUN FLAG(3) -#define R_SERVER FLAG(4) -#define R_DEBUG FLAG(5) -#define R_POSSESS FLAG(6) -#define R_PERMISSIONS FLAG(7) -#define R_STEALTH FLAG(8) -#define R_REJUVINATE FLAG(9) -#define R_VAREDIT FLAG(10) -#define R_SOUNDS FLAG(11) -#define R_SPAWN FLAG(12) -#define R_MOD FLAG(13) -#define R_HOST FLAG(14) -#define R_XENO 0x4000 -#define R_INVESTIGATE (R_ADMIN | R_MOD) -#define R_MAXPERMISSION R_HOST - -#define ADDANTAG_PLAYER FLAG(0) // Any player may call the add antagonist vote. -#define ADDANTAG_ADMIN FLAG(1) // Any player with admin privilegies may call the add antagonist vote. -#define ADDANTAG_AUTO FLAG(2) // The add antagonist vote is available as an alternative for transfer vote. - -#define TICKET_CLOSED 0 // Ticket has been resolved or declined -#define TICKET_OPEN 1 // Ticket has been created, but not responded to -#define TICKET_ASSIGNED 2 // An admin has assigned themself to the ticket and will respond - -#define LAST_CKEY(M) (M.ckey || M.last_ckey) -#define LAST_KEY(M) (M.key || M.last_ckey) diff --git a/code/__defines/ai_ui.dm b/code/__defines/ai_ui.dm deleted file mode 100644 index c865f37554a20..0000000000000 --- a/code/__defines/ai_ui.dm +++ /dev/null @@ -1,3 +0,0 @@ -// ~KareTa -#define AI_BUTTON_PROC_BELONGS_TO_CALLER 1 -#define AI_BUTTON_INPUT_REQUIRES_SELECTION 2 diff --git a/code/__defines/antagonists.dm b/code/__defines/antagonists.dm deleted file mode 100644 index c6d48971b9039..0000000000000 --- a/code/__defines/antagonists.dm +++ /dev/null @@ -1,3 +0,0 @@ -#define ANTAG_SERVANT "servant" -#define ANTAG_APPRENTICE "apprentice" -#define ANTAG_WIZARD "Space Wizard" \ No newline at end of file diff --git a/code/__defines/ao.dm b/code/__defines/ao.dm deleted file mode 100644 index 3f5d93283d16c..0000000000000 --- a/code/__defines/ao.dm +++ /dev/null @@ -1,9 +0,0 @@ -// -- SSao -- -#define WALL_AO_ALPHA 80 - -#define AO_UPDATE_NONE 0 -#define AO_UPDATE_OVERLAY 1 -#define AO_UPDATE_REBUILD 2 - -// If ao_neighbors equals this, no AO shadows are present. -#define AO_ALL_NEIGHBORS 1910 \ No newline at end of file diff --git a/code/__defines/ao_misc.dm b/code/__defines/ao_misc.dm deleted file mode 100644 index d4be84dc0662a..0000000000000 --- a/code/__defines/ao_misc.dm +++ /dev/null @@ -1,45 +0,0 @@ -/* -Define for getting a bitfield of adjacent turfs that meet a condition. - ORIGIN is the object to step from, VAR is the var to write the bitfield to - TVAR is the temporary turf variable to use, FUNC is the condition to check. - FUNC generally should reference TVAR. - example: - var/turf/T - var/result = 0 - CALCULATE_NEIGHBORS(src, result, T, isopenturf(T)) -*/ -#define CALCULATE_NEIGHBORS(ORIGIN, VAR, TVAR, FUNC) \ - for (var/_tdir in GLOB.cardinal) { \ - TVAR = get_step(ORIGIN, _tdir); \ - if ((TVAR) && (FUNC)) { \ - VAR |= SHIFTL(1, _tdir); \ - } \ - } \ - if (VAR & N_NORTH) { \ - if (VAR & N_WEST) { \ - TVAR = get_step(ORIGIN, NORTHWEST); \ - if (FUNC) { \ - VAR |= N_NORTHWEST; \ - } \ - } \ - if (VAR & N_EAST) { \ - TVAR = get_step(ORIGIN, NORTHEAST); \ - if (FUNC) { \ - VAR |= N_NORTHEAST; \ - } \ - } \ - } \ - if (VAR & N_SOUTH) { \ - if (VAR & N_WEST) { \ - TVAR = get_step(ORIGIN, SOUTHWEST); \ - if (FUNC) { \ - VAR |= N_SOUTHWEST; \ - } \ - } \ - if (VAR & N_EAST) { \ - TVAR = get_step(ORIGIN, SOUTHEAST); \ - if (FUNC) { \ - VAR |= N_SOUTHEAST; \ - } \ - } \ - } diff --git a/code/__defines/appearance.dm b/code/__defines/appearance.dm deleted file mode 100644 index faa97e8f06646..0000000000000 --- a/code/__defines/appearance.dm +++ /dev/null @@ -1,3 +0,0 @@ -// Consider these images/atoms as part of the UI/HUD -#define APPEARANCE_UI_IGNORE_ALPHA RESET_COLOR|RESET_TRANSFORM|NO_CLIENT_COLOR|RESET_ALPHA -#define APPEARANCE_UI RESET_COLOR|RESET_TRANSFORM|NO_CLIENT_COLOR diff --git a/code/__defines/armor.dm b/code/__defines/armor.dm deleted file mode 100644 index d3dd26403669b..0000000000000 --- a/code/__defines/armor.dm +++ /dev/null @@ -1,47 +0,0 @@ -// Armor will turn attacks into less dangerous (e.g. turning cut into bruise), so keep that in mind when decided what armor value to use. -// Some levels are marked with what they intend to block in such way. - -#define ARMOR_BALLISTIC_MINOR 10 -#define ARMOR_BALLISTIC_SMALL 25 -#define ARMOR_BALLISTIC_PISTOL 50 //Blocks holdout and normal pistol ammo -#define ARMOR_BALLISTIC_RESISTANT 65 -#define ARMOR_BALLISTIC_RIFLE 80 //Blocks rifle rounds -#define ARMOR_BALLISTIC_AP 95 -#define ARMOR_BALLISTIC_HEAVY 110 - -#define ARMOR_LASER_MINOR 10 -#define ARMOR_LASER_SMALL 25 //Blocks small e-guns -#define ARMOR_LASER_HANDGUNS 40 //Blocks normal e-guns -#define ARMOR_LASER_MAJOR 50 -#define ARMOR_LASER_RIFLES 70 //Blocks laser rifles -#define ARMOR_LASER_HEAVY 100 - -#define ARMOR_MELEE_MINOR 5 -#define ARMOR_MELEE_SMALL 10 -#define ARMOR_MELEE_KNIVES 15 //Blocks most knives -#define ARMOR_MELEE_RESISTANT 30 //Blocks large weapons like swords and toolboxes -#define ARMOR_MELEE_MAJOR 50 -#define ARMOR_MELEE_VERY_HIGH 70 -#define ARMOR_MELEE_SHIELDED 100 - -#define ARMOR_BIO_MINOR 10 -#define ARMOR_BIO_SMALL 25 -#define ARMOR_BIO_RESISTANT 50 -#define ARMOR_BIO_STRONG 75 -#define ARMOR_BIO_SHIELDED 100 - -#define ARMOR_RAD_MINOR 10 -#define ARMOR_RAD_SMALL 25 -#define ARMOR_RAD_RESISTANT 40 -#define ARMOR_RAD_SHIELDED 100 - -#define ARMOR_BOMB_MINOR 10 -#define ARMOR_BOMB_PADDED 30 -#define ARMOR_BOMB_RESISTANT 60 -#define ARMOR_BOMB_SHIELDED 100 - -#define ARMOR_ENERGY_MINOR 10 -#define ARMOR_ENERGY_SMALL 25 -#define ARMOR_ENERGY_RESISTANT 40 -#define ARMOR_ENERGY_STRONG 75 -#define ARMOR_ENERGY_SHIELDED 100 \ No newline at end of file diff --git a/code/__defines/atmos.dm b/code/__defines/atmos.dm deleted file mode 100644 index 9419357e4ab51..0000000000000 --- a/code/__defines/atmos.dm +++ /dev/null @@ -1,128 +0,0 @@ - -#define CELL_VOLUME 2500 // Liters in a cell. -#define MOLES_CELLSTANDARD (ONE_ATMOSPHERE*CELL_VOLUME/(T20C*R_IDEAL_GAS_EQUATION)) // Moles in a 2.5 m^3 cell at 101.325 kPa and 20 C. - -#define O2STANDARD 0.21 // Percentage. -#define N2STANDARD 0.79 - -#define MOLES_PHORON_VISIBLE 0.7 // Moles in a standard cell after which phoron is visible. -#define MOLES_O2STANDARD (MOLES_CELLSTANDARD * O2STANDARD) // O2 standard value (21%) -#define MOLES_N2STANDARD (MOLES_CELLSTANDARD * N2STANDARD) // N2 standard value (79%) -#define MOLES_O2ATMOS (MOLES_O2STANDARD*50) -#define MOLES_N2ATMOS (MOLES_N2STANDARD*50) - -// These are for when a mob breathes poisonous air. -#define MIN_TOXIN_DAMAGE 1 -#define MAX_TOXIN_DAMAGE 10 - -#define STD_BREATH_VOLUME 12 // Liters in a normal breath. - -#define HUMAN_HEAT_CAPACITY 280000 //J/K For 80kg person - -#define SOUND_MINIMUM_PRESSURE 10 - -#define PRESSURE_DAMAGE_COEFFICIENT 4 // The amount of pressure damage someone takes is equal to (pressure / HAZARD_HIGH_PRESSURE)*PRESSURE_DAMAGE_COEFFICIENT, with the maximum of MAX_PRESSURE_DAMAGE. -#define MAX_HIGH_PRESSURE_DAMAGE 4 // This used to be 20... I got this much random rage for some retarded decision by polymorph?! Polymorph now lies in a pool of blood with a katana jammed in his spleen. ~Errorage --PS: The katana did less than 20 damage to him :( -#define LOW_PRESSURE_DAMAGE 0.6 // The amount of damage someone takes when in a low pressure area. (The pressure threshold is so low that it doesn't make sense to do any calculations, so it just applies this flat value). - -#define MINIMUM_PRESSURE_DIFFERENCE_TO_SUSPEND (MINIMUM_AIR_TO_SUSPEND*R_IDEAL_GAS_EQUATION*T20C)/CELL_VOLUME // Minimum pressure difference between zones to suspend -#define MINIMUM_AIR_RATIO_TO_SUSPEND 0.05 // Minimum ratio of air that must move to/from a tile to suspend group processing -#define MINIMUM_AIR_TO_SUSPEND (MOLES_CELLSTANDARD * MINIMUM_AIR_RATIO_TO_SUSPEND) // Minimum amount of air that has to move before a group processing can be suspended -#define MINIMUM_MOLES_DELTA_TO_MOVE (MOLES_CELLSTANDARD * MINIMUM_AIR_RATIO_TO_SUSPEND) // Either this must be active -#define MINIMUM_TEMPERATURE_TO_MOVE (T20C + 100) // or this (or both, obviously) - -#define MINIMUM_TEMPERATURE_RATIO_TO_SUSPEND 0.012 // Minimum temperature difference before group processing is suspended. -#define MINIMUM_TEMPERATURE_DELTA_TO_SUSPEND 4 -#define MINIMUM_TEMPERATURE_DELTA_TO_CONSIDER 0.5 // Minimum temperature difference before the gas temperatures are just set to be equal. -#define MINIMUM_TEMPERATURE_FOR_SUPERCONDUCTION (T20C + 10) -#define MINIMUM_TEMPERATURE_START_SUPERCONDUCTION (T20C + 200) - -// Must be between 0 and 1. Values closer to 1 equalize temperature faster. Should not exceed 0.4, else strange heat flow occurs. -#define FLOOR_HEAT_TRANSFER_COEFFICIENT 0.4 -#define WALL_HEAT_TRANSFER_COEFFICIENT 0.0 -#define DOOR_HEAT_TRANSFER_COEFFICIENT 0.0 -#define SPACE_HEAT_TRANSFER_COEFFICIENT 0.2 // A hack to partly simulate radiative heat. -#define OPEN_HEAT_TRANSFER_COEFFICIENT 0.4 -#define WINDOW_HEAT_TRANSFER_COEFFICIENT 0.1 // A hack for now. - -// Fire damage. -#define CARBON_LIFEFORM_FIRE_RESISTANCE (T0C + 200) -#define CARBON_LIFEFORM_FIRE_DAMAGE 4 - -// Phoron fire properties. -#define PHORON_MINIMUM_BURN_TEMPERATURE (T0C + 126) //400 K - autoignite temperature in tanks and canisters - enclosed environments I guess -#define PHORON_FLASHPOINT (T0C + 246) //519 K - autoignite temperature in air if that ever gets implemented. - -//These control the mole ratio of oxidizer and fuel used in the combustion reaction -#define FIRE_REACTION_OXIDIZER_AMOUNT 3 //should be greater than the fuel amount if fires are going to spread much -#define FIRE_REACTION_FUEL_AMOUNT 2 - -//These control the speed at which fire burns -#define FIRE_GAS_BURNRATE_MULT 1 -#define FIRE_LIQUID_BURNRATE_MULT 0.225 - -//If the fire is burning slower than this rate then the reaction is going too slow to be self sustaining and the fire burns itself out. -//This ensures that fires don't grind to a near-halt while still remaining active forever. -#define FIRE_GAS_MIN_BURNRATE 0.01 -#define FIRE_LIQUD_MIN_BURNRATE 0.0025 - -//How many moles of fuel are contained within one solid/liquid fuel volume unit -#define LIQUIDFUEL_AMOUNT_TO_MOL 0.45 //mol/volume unit - -// XGM gas flags. -#define XGM_GAS_FUEL 1 -#define XGM_GAS_OXIDIZER 2 -#define XGM_GAS_CONTAMINANT 4 -#define XGM_GAS_FUSION_FUEL 8 - -#define TANK_LEAK_PRESSURE (30 * ONE_ATMOSPHERE) // Tank starts leaking. -#define TANK_RUPTURE_PRESSURE (40 * ONE_ATMOSPHERE) // Tank spills all contents into atmosphere. -#define TANK_FRAGMENT_PRESSURE (50 * ONE_ATMOSPHERE) // Boom 3x3 base explosion. -#define TANK_FRAGMENT_SCALE (10 * ONE_ATMOSPHERE) // +1 for each SCALE kPa above threshold. Was 2 atm. - -#define NORMPIPERATE 30 // Pipe-insulation rate divisor. -#define HEATPIPERATE 8 // Heat-exchange pipe insulation. -#define FLOWFRAC 0.99 // Fraction of gas transfered per process. - -//Flags for zone sleeping -#define ZONE_ACTIVE 1 -#define ZONE_SLEEPING 0 - -// Defines how much of certain gas do the Atmospherics tanks start with. Values are in kpa per tile (assuming 20C) -#define ATMOSTANK_NITROGEN 90000 // A lot of N2 is needed to produce air mix, that's why we keep 90MPa of it -#define ATMOSTANK_OXYGEN 50000 // O2 is also important for airmix, but not as much as N2 as it's only 21% of it. -#define ATMOSTANK_CO2 60000 // CO2 is used for the GUP, Charon, and Torch as the primary fuel propellant, and we need lots to stick around. -#define ATMOSTANK_PHORON 25000 -#define ATMOSTANK_PHORON_FUEL 15000 -#define ATMOSTANK_HYDROGEN 50000 -#define ATMOSTANK_HYDROGEN_FUEL 25000 -#define ATMOSTANK_NITROUSOXIDE 10000 // N2O doesn't have a real useful use, i guess it's on station just to allow refilling of sec's riot control canisters? - -#define MAX_PUMP_PRESSURE 15000 // Maximal pressure setting for pumps and vents -#define MAX_OMNI_PRESSURE 15000 // Maximal output(s) pressure for omni devices (filters/mixers) - -#define GAS_OXYGEN "oxygen" -#define GAS_CO2 "carbon_dioxide" -#define GAS_CO "carbon_monoxide" -#define GAS_METHYL_BROMIDE "methyl_bromide" -#define GAS_N2O "sleeping_agent" -#define GAS_NITROGEN "nitrogen" -#define GAS_NO2 "nitrodioxide" -#define GAS_NO "nitricoxide" -#define GAS_METHANE "methane" -#define GAS_ALIEN "aliether" -#define GAS_HYDROGEN "hydrogen" -#define GAS_DEUTERIUM "deuterium" -#define GAS_TRITIUM "tritium" -#define GAS_HELIUM "helium" -#define GAS_ARGON "argon" -#define GAS_KRYPTON "krypton" -#define GAS_NEON "neon" -#define GAS_XENON "xenon" -#define GAS_AMMONIA "ammonia" -#define GAS_CHLORINE "chlorine" -#define GAS_SULFUR "sulfurdioxide" -#define GAS_STEAM "water" -#define GAS_PHORON "phoron" -#define GAS_BORON "boron" -#define GAS_HEAT "heat" //Not a real gas, used for visual effects diff --git a/code/__defines/atmospherics.dm b/code/__defines/atmospherics.dm deleted file mode 100644 index 90b906449774d..0000000000000 --- a/code/__defines/atmospherics.dm +++ /dev/null @@ -1,26 +0,0 @@ -// For use with pipe rotate verb -#define PIPE_ROTATE_STANDARD 0 // usual rotate -#define PIPE_ROTATE_TWODIR 1 // Sanitizes cardinal directions to just two, leaves corner directions alone -#define PIPE_ROTATE_ONEDIR 2 // Only has one dir, south - -//Connection Type Definitions -#define CONNECT_TYPE_REGULAR 1 -#define CONNECT_TYPE_SUPPLY 2 -#define CONNECT_TYPE_SCRUBBER 4 -#define CONNECT_TYPE_HE 8 -#define CONNECT_TYPE_FUEL 16 - -#define DISPOSAL_FLIP_NONE 0 -#define DISPOSAL_FLIP_FLIP 1 -#define DISPOSAL_FLIP_LEFT 2 -#define DISPOSAL_FLIP_RIGHT 4 - -//Pipe classifications -#define PIPE_CLASS_OTHER 0 -#define PIPE_CLASS_UNARY 1 -#define PIPE_CLASS_BINARY 2 -#define PIPE_CLASS_TRINARY 3 -#define PIPE_CLASS_QUATERNARY 4 -#define PIPE_CLASS_OMNI 5 - -#define ADIABATIC_EXPONENT 0.667 //Actually adiabatic exponent - 1. \ No newline at end of file diff --git a/code/__defines/callback.dm b/code/__defines/callback.dm deleted file mode 100644 index 26c81f8b14320..0000000000000 --- a/code/__defines/callback.dm +++ /dev/null @@ -1,4 +0,0 @@ -#define GLOBAL_PROC "some_magic_bullshit" - -#define CALLBACK new /datum/callback -#define INVOKE_ASYNC ImmediateInvokeAsync \ No newline at end of file diff --git a/code/__defines/chemistry.dm b/code/__defines/chemistry.dm deleted file mode 100644 index 9827520f3dc64..0000000000000 --- a/code/__defines/chemistry.dm +++ /dev/null @@ -1,59 +0,0 @@ -#define DEFAULT_HUNGER_FACTOR 0.03 // Factor of how fast mob nutrition decreases -#define DEFAULT_THIRST_FACTOR 0.03 // Factor of how fast mob hydration decreases - -#define REM 0.2 // Means 'Reagent Effect Multiplier'. This is how many units of reagent are consumed per tick - -#define CHEM_TOUCH 1 -#define CHEM_INGEST 2 -#define CHEM_BLOOD 3 - -#define MINIMUM_CHEMICAL_VOLUME 0.01 - -#define SOLID 1 -#define LIQUID 2 -#define GAS 3 - -#define REAGENTS_OVERDOSE 30 - -#define CHEM_SYNTH_ENERGY 500 // How much energy does it take to synthesize 1 unit of chemical, in Joules. - -// Some on_mob_life() procs check for alien races. -#define IS_DIONA 1 -#define IS_VOX 2 -#define IS_SKRELL 3 -#define IS_UNATHI 4 -#define IS_SLIME 5 -#define IS_NABBER 6 - -#define CE_STABLE "stable" // Inaprovaline -#define CE_ANTIBIOTIC "antibiotic" // Spaceacilin -#define CE_BLOODRESTORE "bloodrestore" // Iron/nutriment -#define CE_PAINKILLER "painkiller" -#define CE_ALCOHOL "alcohol" // Liver filtering -#define CE_ALCOHOL_TOXIC "alcotoxic" // Liver damage -#define CE_SPEEDBOOST "gofast" // Hyperzine -#define CE_SLOWDOWN "goslow" // Slowdown -#define CE_PULSE "xcardic" // increases or decreases heart rate -#define CE_NOPULSE "heartstop" // stops heartbeat -#define CE_ANTITOX "antitox" // Dylovene -#define CE_OXYGENATED "oxygen" // Dexalin. -#define CE_BRAIN_REGEN "brainfix" // Alkysine. -#define CE_ANTIVIRAL "antiviral" // Anti-virus effect. -#define CE_TOXIN "toxins" // Generic toxins, stops autoheal. -#define CE_BREATHLOSS "breathloss" // Breathing depression, makes you need more air -#define CE_MIND "mindbending" // Stabilizes or wrecks mind. Used for hallucinations -#define CE_CRYO "cryogenic" // Prevents damage from being frozen -#define CE_BLOCKAGE "blockage" // Gets in the way of blood circulation, higher the worse -#define CE_SQUEAKY "squeaky" // Helium voice. Squeak squeak. -#define CE_THIRDEYE "thirdeye" // Gives xray vision. -#define CE_SEDATE "sedate" // Applies sedation effects, i.e. paralysis, inability to use items, etc. -#define CE_ENERGETIC "energetic" // Speeds up stamina recovery. -#define CE_VOICELOSS "whispers" // Lowers the subject's voice to a whisper -#define CE_STIMULANT "stimulants" // Makes it harder to disarm someone - -//reagent flags -#define IGNORE_MOB_SIZE FLAG(0) -#define AFFECTS_DEAD FLAG(1) - -#define HANDLE_REACTIONS(_reagents) SSchemistry.processing[_reagents] = TRUE -#define UNQUEUE_REACTIONS(_reagents) SSchemistry.processing -= _reagents diff --git a/code/__defines/client.dm b/code/__defines/client.dm deleted file mode 100644 index 0794c852df6f0..0000000000000 --- a/code/__defines/client.dm +++ /dev/null @@ -1,2 +0,0 @@ -#define CLIENT_MIN_FPS 0 -#define CLIENT_MAX_FPS 1000 diff --git a/code/__defines/colors.dm b/code/__defines/colors.dm deleted file mode 100644 index e22c5544484c5..0000000000000 --- a/code/__defines/colors.dm +++ /dev/null @@ -1,197 +0,0 @@ -// BYOND lower-cases color values, and thus we do so as well to ensure atom.color == COLOR_X will work correctly -#define COLOR_BLACK "#000000" -#define COLOR_NAVY_BLUE "#000080" -#define COLOR_GREEN "#008000" -#define COLOR_DARK_GRAY "#404040" -#define COLOR_MAROON "#800000" -#define COLOR_PURPLE "#800080" -#define COLOR_VIOLET "#9933ff" -#define COLOR_OLIVE "#808000" -#define COLOR_BROWN_ORANGE "#824b28" -#define COLOR_DARK_ORANGE "#b95a00" -#define COLOR_GRAY40 "#666666" -#define COLOR_GRAY20 "#333333" -#define COLOR_GRAY15 "#151515" -#define COLOR_SEDONA "#cc6600" -#define COLOR_DARK_BROWN "#917448" -#define COLOR_BLUE "#0000ff" -#define COLOR_DEEP_SKY_BLUE "#00e1ff" -#define COLOR_LIME "#00ff00" -#define COLOR_CYAN "#00ffff" -#define COLOR_TEAL "#33cccc" -#define COLOR_RED "#ff0000" -#define COLOR_PINK "#ff00ff" -#define COLOR_PALE_PINK "#bf89ba" -#define COLOR_ORANGE "#ff9900" -#define COLOR_YELLOW "#ffff00" -#define COLOR_YELLOW_GRAY "#c9a344" -#define COLOR_PALE_YELLOW "#c1bb7a" -#define COLOR_WARM_YELLOW "#b3863c" -#define COLOR_GRAY "#808080" -#define COLOR_RED_GRAY "#aa5f61" -#define COLOR_BROWN "#b19664" -#define COLOR_GREEN_GRAY "#8daf6a" -#define COLOR_DARK_GREEN_GRAY "#54654c" -#define COLOR_BLUE_GRAY "#6a97b0" -#define COLOR_DARK_BLUE_GRAY "#3e4855" -#define COLOR_SURGERY_BLUE "#e0f2f6" -#define COLOR_SUN "#ec8b2f" -#define COLOR_PURPLE_GRAY "#a2819e" -#define COLOR_BLUE_LIGHT "#33ccff" -#define COLOR_RED_LIGHT "#ff3333" -#define COLOR_BEIGE "#ceb689" -#define COLOR_BABY_BLUE "#89cff0" -#define COLOR_PALE_GREEN_GRAY "#aed18b" -#define COLOR_PALE_RED_GRAY "#cc9090" -#define COLOR_PALE_PURPLE_GRAY "#bda2ba" -#define COLOR_PALE_BLUE_GRAY "#8bbbd5" -#define COLOR_LUMINOL "#66ffff" -#define COLOR_SILVER "#c0c0c0" -#define COLOR_GRAY80 "#cccccc" -#define COLOR_OFF_WHITE "#eeeeee" -#define COLOR_WHITE "#ffffff" -#define COLOR_GOLD "#ffcc33" -#define COLOR_CLOSET_GOLD "#6d6133" -#define COLOR_NT_RED "#9d2300" -#define COLOR_BOTTLE_GREEN "#1f6b4f" -#define COLOR_PALE_BTL_GREEN "#57967f" -#define COLOR_GUNMETAL "#545c68" -#define COLOR_WALL_GUNMETAL "#353a42" -#define COLOR_STEEL "#a8b0b2" -#define COLOR_MUZZLE_FLASH "#ffffb2" -#define COLOR_CHESTNUT "#996633" -#define COLOR_BEASTY_BROWN "#663300" -#define COLOR_WHEAT "#ffff99" -#define COLOR_CYAN_BLUE "#3366cc" -#define COLOR_LIGHT_CYAN "#66ccff" -#define COLOR_PAKISTAN_GREEN "#006600" -#define COLOR_SOL "#436b8e" -#define COLOR_AMBER "#ffbf00" -#define COLOR_COMMAND_BLUE "#46698c" -#define COLOR_SKY_BLUE "#5ca1cc" -#define COLOR_PALE_ORANGE "#b88a3b" -#define COLOR_CIVIE_GREEN "#b7f27d" -#define COLOR_TITANIUM "#d1e6e3" -#define COLOR_DARK_GUNMETAL "#4c535b" -#define COLOR_BRONZE "#8c7853" -#define COLOR_BRASS "#b99d71" -#define COLOR_INDIGO "#4b0082" -#define COLOR_ALUMINIUM "#bbbbbb" -#define COLOR_CRYSTAL "#00c8a5" -#define COLOR_ASTEROID_ROCK "#735555" -#define COLOR_NULLGLASS "#ff6088" -#define COLOR_DIAMOND "#d8d4ea" -#define COLOR_VOX "#244238" - - -#define PIPE_COLOR_GREY "#808080" -#define PIPE_COLOR_RED "#ff0000" -#define PIPE_COLOR_BLUE "#0000ff" -#define PIPE_COLOR_CYAN "#00ffff" -#define PIPE_COLOR_GREEN "#00ff00" -#define PIPE_COLOR_YELLOW "#ffcc00" -#define PIPE_COLOR_BLACK "#444444" -#define PIPE_COLOR_ORANGE "#b95a00" -#define PIPE_COLOR_WHITE "#ffffff" - -#define COMMS_COLOR_DEFAULT "#ff00ff" -#define COMMS_COLOR_ENTERTAIN "#666666" -#define COMMS_COLOR_AI "#ff00ff" -#define COMMS_COLOR_COMMON "#408010" -#define COMMS_COLOR_HAILING "#cc00aa" -#define COMMS_COLOR_SERVICE "#709b00" -#define COMMS_COLOR_SUPPLY "#7f6539" -#define COMMS_COLOR_SCIENCE "#993399" -#define COMMS_COLOR_MEDICAL "#009190" -#define COMMS_COLOR_MEDICAL_I "#509190" -#define COMMS_COLOR_EXPLORER "#929820" -#define COMMS_COLOR_ENGINEER "#a66300" -#define COMMS_COLOR_SECURITY "#930000" -#define COMMS_COLOR_SECURITY_I "#935050" -#define COMMS_COLOR_COMMAND "#204090" -#define COMMS_COLOR_CENTCOMM "#5c5c7c" -#define COMMS_COLOR_SYNDICATE "#6d3f40" -#define COMMS_COLOR_SKRELL "#7331c4" -#define COMMS_COLOR_VOX "#f32b06" -#define COMMS_COLOR_BEARCAT "#590e2d" -#define COMMS_COLOR_COLONY "#ceaf3e" -#define COMMS_COLOR_VERNE "#738465" - -#define WOOD_COLOR_GENERIC "#d5a66e" -#define WOOD_COLOR_RICH "#792f27" -#define WOOD_COLOR_PALE "#d2bc9d" -#define WOOD_COLOR_PALE2 "#e6d2ba" -#define WOOD_COLOR_BLACK "#332521" -#define WOOD_COLOR_CHOCOLATE "#543c30" -#define WOOD_COLOR_YELLOW "#e3994e" - -#define GLASS_COLOR "#aaccff" -#define GLASS_COLOR_PHORON "#7c3a9a" -#define GLASS_COLOR_TINTED "#222222" -#define GLASS_COLOR_FROSTED "#eeeeee" - -#define COLOR_BLOOD_HUMAN "#a10808" - -//Color defines used by the assembly detailer. -#define COLOR_ASSEMBLY_BLACK "#545454" -#define COLOR_ASSEMBLY_BGRAY "#9497ab" -#define COLOR_ASSEMBLY_WHITE "#e2e2e2" -#define COLOR_ASSEMBLY_RED "#cc4242" -#define COLOR_ASSEMBLY_ORANGE "#e39751" -#define COLOR_ASSEMBLY_BEIGE "#af9366" -#define COLOR_ASSEMBLY_BROWN "#97670e" -#define COLOR_ASSEMBLY_GOLD "#aa9100" -#define COLOR_ASSEMBLY_YELLOW "#ceca2b" -#define COLOR_ASSEMBLY_GURKHA "#999875" -#define COLOR_ASSEMBLY_LGREEN "#789876" -#define COLOR_ASSEMBLY_GREEN "#44843c" -#define COLOR_ASSEMBLY_LBLUE "#5d99be" -#define COLOR_ASSEMBLY_BLUE "#38559e" -#define COLOR_ASSEMBLY_PURPLE "#6f6192" - -//Colors defines used by e-sword lighting -#define COLOR_SABER_BLUE "#40ceff" -#define COLOR_SABER_RED "#ff0000" //In case someone wants to tweak COLOR_RED, since COLOR_GREEN is not #00ff00 -#define COLOR_SABER_GREEN "#00ff00" -#define COLOR_SABER_PURPLE "#6800f4" -#define COLOR_SABER_SKRELL "#6600cc" -#define COLOR_SABER_AXE "#00ccff" -#define COLOR_SABER_CUTLASS "#ff0033" - -// Used by fluid system. -#define COLOR_OCEAN "#99f5ff" - -// Used to easily change research colour in case of ??? -#define COLOR_RESEARCH COLOR_PURPLE_GRAY - -//Blob colors -#define BLOB_COLOR_CORE "#c96e28" -#define BLOB_COLOR_SHIELD "#9ed659" -#define BLOB_COLOR_RAV "#d65f42" -#define BLOB_COLOR_PULS "#b5ff5b" - -#define RANDOM_RGB rgb(rand(0,255), rand(0,255), rand(0,255)) - -// Codex category colours. -#define CODEX_COLOR_LORE "#abdb9b" -#define CODEX_COLOR_MECHANICS "#9ebcd8" -#define CODEX_COLOR_ANTAG "#e5a2a2" - -#define COLOR_WEBHOOK_DEFAULT 0x8bbbd5 - -#define COLOR_DARKMODE_BACKGROUND "#202020" -#define COLOR_DARKMODE_DARKBACKGROUND "#171717" -#define COLOR_DARKMODE_TEXT "#a4bad6" - -//colors for holoplants //from infinity -#define COLOR_LIGHTING_RED_BRIGHT "#aa2733" -#define COLOR_LIGHTING_GREEN_BRIGHT "#8aa88a" -#define COLOR_LIGHTING_BLUE_BRIGHT "#8a95a8" -#define COLOR_LIGHTING_ORANGE_BRIGHT "#d7be93" -#define COLOR_LIGHTING_PURPLE_BRIGHT "#aa2799" -#define COLOR_LIGHTING_CYAN_BRIGHT "#67c1b6" - -//just for xeno-panel -#define COLOR_WEBHOOK_XENO 0xf2b000 //proxima -//proxima code end -#define COLORED_SQUARE(COLOR) "___" diff --git a/code/__defines/culture.dm b/code/__defines/culture.dm deleted file mode 100644 index 22840eff03726..0000000000000 --- a/code/__defines/culture.dm +++ /dev/null @@ -1,197 +0,0 @@ -#define TAG_CULTURE "culture" -#define TAG_HOMEWORLD "home_system" -#define TAG_FACTION "faction" -#define TAG_RELIGION "religion" - -#define ALL_CULTURAL_TAGS list( \ - TAG_CULTURE = "Culture", \ - TAG_HOMEWORLD = "Residence", \ - TAG_FACTION = "Faction", \ - TAG_RELIGION = "Beliefs" \ - ) - -// Cultural IDs. -#define FACTION_SOL_CENTRAL "Sol Central Government" -#define FACTION_INDIE_CONFED "Gilgamesh Colonial Confederation" -#define FACTION_NANOTRASEN "NanoTrasen" -#define FACTION_FREETRADE "Free Trade Union" -#define FACTION_HEPHAESTUS "Hephaestus Industries" -#define FACTION_XYNERGY "Xynergy" -#define FACTION_FLEET "SCG Fleet" -#define FACTION_ARMY "SCG Marnine Corps" -#define FACTION_EXPEDITIONARY "Expeditionary Corps" -#define FACTION_PCRC "Proxima Centauri Risk Control" -#define FACTION_SAARE "Strategic Assault and Asset Retention Enterprises" -#define FACTION_CORPORATE "Expeditionary Corps Organisation" -#define FACTION_DAIS "Deimos Advanced Information Systems" -#define FACTION_OTHER "Other Faction" -#define FACTION_TEST_SUBJECTS "Test Subjects" -#define FACTION_SPACECOPS "Sol Federal Police" - -#define HOME_SYSTEM_EARTH "Earth" -#define HOME_SYSTEM_LUNA "Luna" -#define HOME_SYSTEM_MARS "Mars" -#define HOME_SYSTEM_VENUS "Venus" -#define HOME_SYSTEM_CERES "Ceres" -#define HOME_SYSTEM_PLUTO "Pluto" -#define HOME_SYSTEM_TAU_CETI "Ceti Epsilon" -#define HOME_SYSTEM_HELIOS "Eos" -#define HOME_SYSTEM_TERRA "Terra" -#define HOME_SYSTEM_LORRIMAN "Lorriman" -#define HOME_SYSTEM_CINU "Cinu" -#define HOME_SYSTEM_YUKLID "Yuklid V" -#define HOME_SYSTEM_LORDANIA "Lordania" -#define HOME_SYSTEM_KINGSTON "Kingston" -#define HOME_SYSTEM_GAIA "Gaia" -#define HOME_SYSTEM_MAGNITKA "Magnitka" -#define HOME_SYSTEM_CASTILLA "Nueva Castilla" -#define HOME_SYSTEM_FOSTER "Foster's Planet" -#define HOME_SYSTEM_STATELESS "Stateless" -#define HOME_SYSTEM_OTHER "Other System" -#define HOME_SYSTEM_DEEP_SPACE "Deep Space" - -#define CULTURE_OTHER "Other Culture" -#define CULTURE_HUMAN "Humankind" -#define CULTURE_HUMAN_VATGROWN "Nonborn" -#define CULTURE_HUMAN_MARTIAN "Martian, Surfacer" -#define CULTURE_HUMAN_MARSTUN "Martian, Tunneller" -#define CULTURE_HUMAN_LUNAPOOR "Luna, Lower Class" -#define CULTURE_HUMAN_LUNARICH "Luna, Upper Class" -#define CULTURE_HUMAN_VENUSIAN "Venusian, Zoner" -#define CULTURE_HUMAN_VENUSLOW "Venusian, Surfacer" -#define CULTURE_HUMAN_BELTER "Belter, Ceres" -#define CULTURE_HUMAN_PLUTO "Plutonian" -#define CULTURE_HUMAN_EARTH "Earther" -#define CULTURE_HUMAN_CETI "Cetite" -#define CULTURE_HUMAN_SPACER "Spacer, Core Systems" -#define CULTURE_HUMAN_SPAFRO "Spacer, Frontier Systems" -#define CULTURE_HUMAN_CONFED "Terran" -#define CULTURE_HUMAN_GAIAN "Gaian" -#define CULTURE_HUMAN_OTHER "Other, Humanity" -#define CULTURE_STARLIGHT "Starlit Realms" -#define CULTURE_MONKEY "Monkey Business" -#define CULTURE_FARWA "Farwa Business" -#define CULTURE_NEARA "Neara Business" -#define CULTURE_STOK "Stok Business" -#define CULTURE_ALIUM "Mysterious Aliens" -#define CULTURE_CULTIST "Blood Cult" - -#define RELIGION_OTHER "Other Religion" -#define RELIGION_JUDAISM "Judaism" -#define RELIGION_HINDUISM "Hinduism" -#define RELIGION_BUDDHISM "Buddhism" -#define RELIGION_SIKHISM "Sikhism" -#define RELIGION_JAINISM "Jainism" -#define RELIGION_ISLAM "Islam" -#define RELIGION_CHRISTIANITY "Christianity" -#define RELIGION_BAHAI_FAITH "Baha'i Faith" -#define RELIGION_AGNOSTICISM "Agnosticism" -#define RELIGION_DEISM "Deism" -#define RELIGION_ATHEISM "Atheism" -#define RELIGION_THELEMA "Thelema" -#define RELIGION_SPIRITUALISM "Spiritualism" -#define RELIGION_SHINTO "Shinto" -#define RELIGION_TAOISM "Taoism" -#define RELIGION_UNSTATED "Unstated" - -// Skrellian cultures. -#define CULTURE_SKRELL_QERR "Qerr-Katish" -#define CULTURE_SKRELL_MALISH "Malish-Katish" -#define CULTURE_SKRELL_KANIN "Kanin-Katish" -#define CULTURE_SKRELL_TALUM "Talum-Katish" -#define CULTURE_SKRELL_RASKINTA "Raskinta-Katish" - -#define HOME_SYSTEM_QERRBALAK "Qerrbalak" -#define HOME_SYSTEM_TALAMIRA "Talamira" -#define HOME_SYSTEM_ROASORA "Roa'sora" -#define HOME_SYSTEM_MITORQI "Mi'tor'qi" -#define HOME_SYSTEM_SKRELLSPACE "Skrell Space" - -#define FACTION_SKRELL_QERRVOAL "Qerr'voal" -#define FACTION_SKRELL_QALAOA "Qala'oa" -#define FACTION_SKRELL_YIITALANA "Yii'talana" -#define FACTION_SKRELL_KRRIGLI "Krri'gli" -#define FACTION_SKRELL_QONPRRI "Qon'prri" - -// Adherent cultures. -#define CULTURE_ADHERENT "The Vigil" - -#define HOME_SYSTEM_ADHERENT "Canon" -#define HOME_SYSTEM_ADHERENT_MOURNER "Monument World" - -#define FACTION_ADHERENT_PRESERVERS "Preservers" -#define FACTION_ADHERENT_LOYALISTS "Loyalists" -#define FACTION_ADHERENT_SEPARATISTS "Seperatists" - -// Vox cultures. -#define CULTURE_VOX_ARKSHIP "Arkship Crew" -#define CULTURE_VOX_SALVAGER "Salvager Crew" -#define CULTURE_VOX_RAIDER "Raider Crew" - -#define HOME_SYSTEM_VOX_ARK "Ark-Dweller" -#define HOME_SYSTEM_VOX_SHROUD "Shroud-Dweller" -#define HOME_SYSTEM_VOX_SHIP "Ship-Dweller" - -#define FACTION_VOX_RAIDER "Raider" -#define FACTION_VOX_CREW "Ark Labourer" -#define FACTION_VOX_APEX "Apex Servant" - -#define RELIGION_VOX "Auralis Reverence" - -// IPC cultures. -#define CULTURE_POSITRONICS "Union Member" - -#define HOME_SYSTEM_ROOT "Root" - -#define FACTION_POSITRONICS "Positronic Union" - -// Diona cultures. -#define CULTURE_DIONA "Diona Chorus" - -#define HOME_SYSTEM_DIONAEA "Epsilon Ursae Minoris" - -// Serpentid cultures. -#define CULTURE_SERPENTID "Serpentid Labourer" - -#define HOME_SYSTEM_SERPENTIDS "Tau-Wilo" - -// Unathi cultures. -#define CULTURE_UNATHI_YEOSA_ABYSS "Abyssal Yeosa Clans" -#define CULTURE_UNATHI_YEOSA_LITTORAL "Littoral Yeosa Clans" -#define CULTURE_UNATHI_DIAMOND_PEAKS "Diamond Peak Clans" -#define CULTURE_UNATHI_POLAR "Polar Clans" -#define CULTURE_UNATHI_DESERT "Desert Clans" -#define CULTURE_UNATHI_SAVANNAH "Savannah Clans" -#define CULTURE_UNATHI_SALT_SWAMP "Salt Swamp Clans" -#define CULTURE_UNATHI_SPACE "Space-Faring Clans" - -#define HOME_SYSTEM_MOGHES "Moghes" -#define HOME_SYSTEM_OUERE "Ouere" -#define HOME_SYSTEM_OFFWORLD "Off-world" - -#define FACTION_UNATHI_HEGEMONY "Moghes Hegemony" -#define FACTION_UNATHI_SSEN_UUMA "Ssen-Uuma Convent" -#define FACTION_UNATHI_INDEPENDENT "Independent Faction" -#define FACTION_UNATHI_BAASK "Ba'ask Krukzuz" -#define FACTION_UNATHI_GRESIS "Gresis Krukzuz" -#define FACTION_UNATHI_RAH_ZAKEH "Rah'Zakeh League" -#define FACTION_UNATHI_KHARZA "Kharza Fleet" - -#define RELIGION_UNATHI_STRATAGEM "Grand Stratagem" -#define RELIGION_UNATHI_PRECURSOR "Precursor" -#define RELIGION_UNATHI_VINE "Hand of the Vine" -#define RELIGION_UNATHI_LIGHTS "The Fruitful Lights" -#define RELIGION_UNATHI_MARKESHELI "Cult of Markesh" -#define RELIGION_UNATHI_ANCESTOR "Ancestor Worship" -#define RELIGION_UNATHI_AGA_EAKHE "Aga-Eakhe" - -// Nabber grades. -#define CULTURE_NABBER_CMINUS "Grade C-" -#define CULTURE_NABBER_C "Grade C" -#define CULTURE_NABBER_CPLUS "Grade C+" -#define CULTURE_NABBER_BMINUS "Grade B-" -#define CULTURE_NABBER_B "Grade B" -#define CULTURE_NABBER_BPLUS "Grade B+" -#define CULTURE_NABBER_AMINUS "Grade A-" -#define CULTURE_NABBER_A "Grade A" -#define CULTURE_NABBER_APLUS "Grade A+" diff --git a/code/__defines/damage_organs.dm b/code/__defines/damage_organs.dm deleted file mode 100644 index b50bd1c1076e5..0000000000000 --- a/code/__defines/damage_organs.dm +++ /dev/null @@ -1,97 +0,0 @@ -// Injury types for wounds -#define INJURY_TYPE_CUT "cut" -#define INJURY_TYPE_BRUISE "bruise" -#define INJURY_TYPE_BURN "burn" -#define INJURY_TYPE_PIERCE "pierce" -#define INJURY_TYPE_LASER "laser" -#define INJURY_TYPE_SHATTER "shatter" - -// Effect types for mobs -#define EFFECT_STUN "stun" -#define EFFECT_WEAKEN "weaken" -#define EFFECT_PARALYZE "paralize" -#define EFFECT_STUTTER "stutter" -#define EFFECT_EYE_BLUR "eye_blur" -#define EFFECT_DROWSY "drowsy" -#define EFFECT_PAIN "pain" - -// Damage flags -#define DAMAGE_FLAG_SHARP FLAG(0) -#define DAMAGE_FLAG_EDGE FLAG(1) -#define DAMAGE_FLAG_LASER FLAG(2) -#define DAMAGE_FLAG_BULLET FLAG(3) -#define DAMAGE_FLAG_EXPLODE FLAG(4) -#define DAMAGE_FLAG_DISPERSED FLAG(5) // Makes apply_damage calls without specified zone distribute damage rather than randomly choose organ (for humans) -#define DAMAGE_FLAG_BIO FLAG(6) // Toxin damage that should be mitigated by biological (i.e. sterile) armor - -#define FIRE_DAMAGE_MODIFIER 0.0215 // Higher values result in more external fire damage to the skin. (default 0.0215) -#define AIR_DAMAGE_MODIFIER 2.025 // More means less damage from hot air scalding lungs, less = more damage. (default 2.025) - -// Organ defines. -#define ORGAN_CUT_AWAY FLAG(0) // The organ is in the process of being surgically removed. -#define ORGAN_BLEEDING FLAG(1) // The organ is currently bleeding. -#define ORGAN_BROKEN FLAG(2) // The organ is broken. -#define ORGAN_DEAD FLAG(3) // The organ is necrotic. -#define ORGAN_MUTATED FLAG(4) // The organ is unusable due to genetic damage. -#define ORGAN_ARTERY_CUT FLAG(6) // The organ has had its artery cut. -#define ORGAN_TENDON_CUT FLAG(7) // The organ has had its tendon cut. -#define ORGAN_DISFIGURED FLAG(8) // The organ is scarred/disfigured. Alters whether or not the face can be recognised. -#define ORGAN_SABOTAGED FLAG(9) // The organ will explode if exposed to EMP, if prosthetic. -#define ORGAN_ASSISTED FLAG(10) // The organ is partially prosthetic. No mechanical effect. -#define ORGAN_ROBOTIC FLAG(11) // The organ is robotic. Changes numerous behaviors, search BP_IS_ROBOTIC for checks. -#define ORGAN_BRITTLE FLAG(12) // The organ takes additional blunt damage. If robotic, cannot be repaired through normal means. -#define ORGAN_CRYSTAL FLAG(13) // The organ does not suffer laser damage, but shatters on droplimb. -#define ORGAN_CONFIGURE FLAG(14) // The organ has an extra configuration step for surgery that it handles itself. - -// Flags for proc/take_organ_damage -#define ORGAN_DAMAGE_SHARP FLAG(0) // Damage should be treated as sharp when applied -#define ORGAN_DAMAGE_EDGE FLAG(1) // Damage should be treated as edged when applied -#define ORGAN_DAMAGE_FLESH_ONLY FLAG(2) // Damage should not be applied to robotic organs -#define ORGAN_DAMAGE_ROBOT_ONLY FLAG(3) // Damage should not be applied to flesh organs -#define ORGAN_DAMAGE_SILICON_EMP FLAG(4) // Damage should be treated as bypassing armor for silicons - -// Organ flag defines. -#define ORGAN_FLAG_CAN_AMPUTATE FLAG(0) // The organ can be amputated. -#define ORGAN_FLAG_CAN_BREAK FLAG(1) // The organ can be broken. -#define ORGAN_FLAG_CAN_GRASP FLAG(2) // The organ contributes to grasping. -#define ORGAN_FLAG_CAN_STAND FLAG(3) // The organ contributes to standing. -#define ORGAN_FLAG_HAS_TENDON FLAG(4) // The organ can have its tendon cut. -#define ORGAN_FLAG_FINGERPRINT FLAG(5) // The organ has a fingerprint. -#define ORGAN_FLAG_GENDERED_ICON FLAG(6) // The icon state for this organ appends _m/_f. -#define ORGAN_FLAG_HEALS_OVERKILL FLAG(7) // The organ heals from overkill damage. -#define ORGAN_FLAG_DEFORMED FLAG(8) // The organ is permanently disfigured. - -// Droplimb types. -#define DROPLIMB_EDGE 0 -#define DROPLIMB_BLUNT 1 -#define DROPLIMB_BURN 2 - -// Robotics hatch_state defines. -#define HATCH_CLOSED 0 -#define HATCH_UNSCREWED 1 -#define HATCH_OPENED 2 - -// These control the amount of blood lost from burns. The loss is calculated so -// that dealing just enough burn damage to kill the player will cause the given -// proportion of their max blood volume to be lost -// (e.g. 0.6 == 60% lost if 200 burn damage is taken). -#define FLUIDLOSS_WIDE_BURN 0.15 //for burns from heat applied over a wider area, like from fire -#define FLUIDLOSS_CONC_BURN 0.1 //for concentrated burns, like from lasers - -// Damage above this value must be repaired with surgery. -#define ROBOLIMB_SELF_REPAIR_CAP 30 - -//Germs and infections. -#define GERM_LEVEL_AMBIENT 275 // Maximum germ level you can reach by standing still. -#define GERM_LEVEL_MOVE_CAP 300 // Maximum germ level you can reach by running around. - -#define INFECTION_LEVEL_ONE 250 -#define INFECTION_LEVEL_TWO 500 // infections grow from ambient to two in ~5 minutes -#define INFECTION_LEVEL_THREE 1000 // infections grow from two to three in ~10 minutes - -//Blood levels. These are percentages based on the species blood_volume far. -#define BLOOD_VOLUME_FULL 100 -#define BLOOD_VOLUME_SAFE 85 -#define BLOOD_VOLUME_OKAY 70 -#define BLOOD_VOLUME_BAD 60 -#define BLOOD_VOLUME_SURVIVE 30 diff --git a/code/__defines/directions.dm b/code/__defines/directions.dm deleted file mode 100644 index 29436e32cd9f8..0000000000000 --- a/code/__defines/directions.dm +++ /dev/null @@ -1,9 +0,0 @@ -//Redefinitions of the diagonal directions so they can be stored in one var without conflicts -#define N_NORTH 2 -#define N_SOUTH 4 -#define N_EAST 16 -#define N_WEST 256 -#define N_NORTHEAST 32 -#define N_NORTHWEST 512 -#define N_SOUTHEAST 64 -#define N_SOUTHWEST 1024 \ No newline at end of file diff --git a/code/__defines/dna.dm b/code/__defines/dna.dm deleted file mode 100644 index a10c4705005a6..0000000000000 --- a/code/__defines/dna.dm +++ /dev/null @@ -1,73 +0,0 @@ -// Bitflags for mutations. -#define STRUCDNASIZE 27 -#define UNIDNASIZE 13 - -// Generic mutations: -#define MUTATION_COLD_RESISTANCE 1 -#define MUTATION_XRAY 2 -#define MUTATION_HULK 3 -#define MUTATION_CLUMSY 4 -#define MUTATION_FAT 5 -#define MUTATION_HUSK 6 -#define MUTATION_LASER 7 // Harm intent - click anywhere to shoot lasers from eyes. -#define MUTATION_HEAL 8 // Healing people with hands. -#define MUTATION_SPACERES 9 // Can't be harmed via pressure damage. -#define MUTATION_SKELETON 10 -#define MUTATION_FERAL 11 // Smash objects instead of using them, and unable to use items - -// Other Mutations: -#define mNobreath 100 // No need to breathe. -#define mRemote 101 // Remote viewing. -#define mRegen 102 // Health regeneration. -#define mRun 103 // No slowdown. -#define mRemotetalk 104 // Remote talking. -#define mMorph 105 // Hanging appearance. -#define mBlend 106 // Nothing. (seriously nothing) -#define mHallucination 107 // Hallucinations. -#define mFingerprints 108 // No fingerprints. -#define mShock 109 // Insulated hands. -#define mSmallsize 110 // Table climbing. - -// disabilities -#define NEARSIGHTED FLAG(0) -#define EPILEPSY FLAG(1) -#define COUGHING FLAG(2) -#define NERVOUS FLAG(3) - -// sdisabilities -#define BLINDED FLAG(0) -#define MUTED FLAG(1) -#define DEAFENED FLAG(2) - -// The way blocks are handled badly needs a rewrite, this is horrible. -// Too much of a project to handle at the moment, TODO for later. -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(FAKEBLOCK,0) -GLOBAL_VAR_INIT(COUGHBLOCK,0) -GLOBAL_VAR_INIT(GLASSESBLOCK,0) -GLOBAL_VAR_INIT(EPILEPSYBLOCK,0) -GLOBAL_VAR_INIT(TWITCHBLOCK,0) -GLOBAL_VAR_INIT(NERVOUSBLOCK,0) -GLOBAL_VAR_INIT(MONKEYBLOCK, STRUCDNASIZE) - -GLOBAL_VAR_INIT(BLOCKADD,0) -GLOBAL_VAR_INIT(DIFFMUT,0) - -GLOBAL_VAR_INIT(HEADACHEBLOCK,0) -GLOBAL_VAR_INIT(NOBREATHBLOCK,0) -GLOBAL_VAR_INIT(REMOTEVIEWBLOCK,0) -GLOBAL_VAR_INIT(REGENERATEBLOCK,0) -GLOBAL_VAR_INIT(INCREASERUNBLOCK,0) -GLOBAL_VAR_INIT(REMOTETALKBLOCK,0) -GLOBAL_VAR_INIT(MORPHBLOCK,0) -GLOBAL_VAR_INIT(BLENDBLOCK,0) -GLOBAL_VAR_INIT(HALLUCINATIONBLOCK,0) -GLOBAL_VAR_INIT(NOPRINTSBLOCK,0) -GLOBAL_VAR_INIT(SHOCKIMMUNITYBLOCK,0) -GLOBAL_VAR_INIT(SMALLSIZEBLOCK,0) diff --git a/code/__defines/feedback.dm b/code/__defines/feedback.dm deleted file mode 100644 index f3800898ef0e0..0000000000000 --- a/code/__defines/feedback.dm +++ /dev/null @@ -1,2 +0,0 @@ -#define FEEDBACK_YOU_LACK_DEXTERITY "You don't have the dexterity to do this!" -#define FEEDBACK_ACCESS_DENIED "Access Denied!" diff --git a/code/__defines/flags.dm b/code/__defines/flags.dm deleted file mode 100644 index 3eaa128a76887..0000000000000 --- a/code/__defines/flags.dm +++ /dev/null @@ -1,59 +0,0 @@ -GLOBAL_LIST_INIT(bitflags, list(1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 2048, 4096, 8192, 16384, 32768)) - -#define CLOSET_HAS_LOCK FLAG(0) -#define CLOSET_CAN_BE_WELDED FLAG(1) - -#define CLOSET_STORAGE_MISC FLAG(0) -#define CLOSET_STORAGE_ITEMS FLAG(1) -#define CLOSET_STORAGE_MOBS FLAG(2) -#define CLOSET_STORAGE_STRUCTURES FLAG(3) -#define CLOSET_STORAGE_ALL (CLOSET_STORAGE_MISC | CLOSET_STORAGE_ITEMS | CLOSET_STORAGE_MOBS | CLOSET_STORAGE_STRUCTURES) - -// Flags bitmasks. - -// NOTE: We declare ATOM_FLAG_INITIALIZED earlier, in __initialization.dm, as FLAG(0) -#define ATOM_FLAG_CHECKS_BORDER FLAG(1) // If a dense atom (potentially) only blocks movements from a given direction, i.e. window panes -#define ATOM_FLAG_NO_BLOOD FLAG(2) // Used for items if they don't want to get a blood overlay. -#define ATOM_FLAG_NO_REACT FLAG(3) // Reagents don't react inside this container. -#define ATOM_FLAG_OPEN_CONTAINER FLAG(4) // Is an open container for chemistry purposes. -#define ATOM_FLAG_CLIMBABLE FLAG(5) // This object can be climbed on -#define ATOM_FLAG_NO_TEMP_CHANGE FLAG(6) // Reagents do not cool or heat to ambient temperature in this container. -#define ATOM_FLAG_CAN_BE_PAINTED FLAG(7) // Can be painted using a paint sprayer or similar. -#define ATOM_FLAG_ADJACENT_EXCEPTION FLAG(8) // Skips adjacent checks for atoms that should always be reachable in window tiles - -#define MOVABLE_FLAG_PROXMOVE FLAG(0) // Does this object require proximity checking in Enter()? -#define MOVABLE_FLAG_Z_INTERACT FLAG(1) // Should attackby and attack_hand be relayed through ladders and open spaces? -#define MOVABLE_FLAG_EFFECTMOVE FLAG(2) // Is this an effect that should move? - -#define OBJ_FLAG_ANCHORABLE FLAG(0) // This object can be stuck in place with a tool -#define OBJ_FLAG_CONDUCTIBLE FLAG(1) // Conducts electricity. (metal etc.) -#define OBJ_FLAG_ROTATABLE FLAG(2) // Can be rotated with alt-click -#define OBJ_FLAG_NOFALL FLAG(3) // Will prevent mobs from falling - -//Flags for items (equipment) -#define ITEM_FLAG_NO_BLUDGEON FLAG(0) // When an item has this it produces no "X has been hit by Y with Z" message with the default handler. -#define ITEM_FLAG_PHORONGUARD FLAG(1) // Does not get contaminated by phoron. -#define ITEM_FLAG_NO_PRINT FLAG(2) // This object does not leave the user's prints/fibres when using it -#define ITEM_FLAG_INVALID_FOR_CHAMELEON FLAG(3) // Chameleon items cannot mimick this. -#define ITEM_FLAG_THICKMATERIAL FLAG(4) // Prevents syringes, reagent pens, and hyposprays if equiped to slot_suit or slot_head. -#define ITEM_FLAG_AIRTIGHT FLAG(6) // Functions with internals. -#define ITEM_FLAG_NOSLIP FLAG(7) // Prevents from slipping on wet floors, in space, etc. -#define ITEM_FLAG_BLOCK_GAS_SMOKE_EFFECT FLAG(8) // Blocks the effect that chemical clouds would have on a mob -- glasses, mask and helmets ONLY! (NOTE: flag shared with ONESIZEFITSALL) -#define ITEM_FLAG_FLEXIBLEMATERIAL FLAG(9) // At the moment, masks with this flag will not prevent eating even if they are covering your face. -#define ITEM_FLAG_PREMODIFIED FLAG(10) // Gloves that are clipped by default -#define ITEM_FLAG_IS_BELT FLAG(11) // Items that can be worn on the belt slot, even with no undersuit equipped -#define ITEM_FLAG_SILENT FLAG(12) // sneaky shoes -#define ITEM_FLAG_NOCUFFS FLAG(13) // Gloves that have this flag prevent cuffs being applied -#define ITEM_FLAG_CAN_HIDE_IN_SHOES FLAG(14) // Items that can be hidden in shoes that permit it -#define ITEM_FLAG_WASHER_ALLOWED FLAG(15) // Items that can be washed in washing machines - -// Flags for pass_flags. -#define PASS_FLAG_TABLE FLAG(0) -#define PASS_FLAG_GLASS FLAG(1) -#define PASS_FLAG_GRILLE FLAG(2) - -// Flags for gas tanks -#define TANK_FLAG_WELDED FLAG(0) -#define TANK_FLAG_FORCED FLAG(1) -#define TANK_FLAG_LEAKING FLAG(2) -#define TANK_FLAG_WIRED FLAG(3) diff --git a/code/__defines/fluids.dm b/code/__defines/fluids.dm deleted file mode 100644 index 65f9e00792acd..0000000000000 --- a/code/__defines/fluids.dm +++ /dev/null @@ -1,66 +0,0 @@ -#define FLUID_EVAPORATION_POINT 3 // Depth a fluid begins self-deleting -#define FLUID_DELETING -1 // Depth a fluid counts as qdel'd -#define FLUID_SHALLOW 200 // Depth shallow icon is used -#define FLUID_OVER_MOB_HEAD 300 -#define FLUID_DEEP 800 // Depth deep icon is used -#define FLUID_MAX_DEPTH FLUID_DEEP*4 // Arbitrary max value for flooding. -#define FLUID_PUSH_THRESHOLD 20 // Amount of water flow needed to push items. - -// Expects /turf for T. -#define ADD_ACTIVE_FLUID_SOURCE(T) SSfluids.water_sources[T] = TRUE -#define REMOVE_ACTIVE_FLUID_SOURCE(T) SSfluids.water_sources -= T - -// Expects /obj/effect/fluid for F. -#define ADD_ACTIVE_FLUID(F) SSfluids.active_fluids[F] = TRUE -#define REMOVE_ACTIVE_FLUID(F) SSfluids.active_fluids -= F - -// Expects /obj/effect/fluid for F, int for amt. -#define LOSE_FLUID(F, amt) \ - F:fluid_amount = max(-1, F:fluid_amount - amt); \ - ADD_ACTIVE_FLUID(F) -#define SET_FLUID_DEPTH(F, amt) \ - F:fluid_amount = min(FLUID_MAX_DEPTH, amt); \ - ADD_ACTIVE_FLUID(F) - -// Expects turf for T, -#define UPDATE_FLUID_BLOCKED_DIRS(T) \ - if(isnull(T:fluid_blocked_dirs)) {\ - T:fluid_blocked_dirs = 0; \ - for(var/obj/structure/window/W in T) { \ - if(W.density) T:fluid_blocked_dirs |= W.dir; \ - } \ - for(var/obj/machinery/door/window/D in T) {\ - if(D.density) T:fluid_blocked_dirs |= D.dir; \ - } \ - } - -// Expects turf for T, bool for dry_run. -#define FLOOD_TURF_NEIGHBORS(T, dry_run) \ - for(var/spread_dir in GLOB.cardinal) {\ - UPDATE_FLUID_BLOCKED_DIRS(T); \ - if(T:fluid_blocked_dirs & spread_dir) continue; \ - var/turf/next = get_step(T, spread_dir); \ - if(!istype(next) || next.flooded) continue; \ - UPDATE_FLUID_BLOCKED_DIRS(next); \ - if((next.fluid_blocked_dirs & GLOB.reverse_dir[spread_dir]) || !next.CanFluidPass(spread_dir)) continue; \ - flooded_a_neighbor = TRUE; \ - var/obj/effect/fluid/F = locate() in next; \ - if(!F && !dry_run) {\ - F = new /obj/effect/fluid(next); \ - var/datum/gas_mixture/GM = T:return_air(); \ - if(GM) F.temperature = GM.temperature; \ - } \ - if(F) { \ - if(F.fluid_amount >= FLUID_MAX_DEPTH) continue; \ - if(!dry_run) SET_FLUID_DEPTH(F, FLUID_MAX_DEPTH); \ - } \ - } \ - if(!flooded_a_neighbor) REMOVE_ACTIVE_FLUID_SOURCE(T); - -// We share overlays for all fluid turfs to sync icon animation. -#define APPLY_FLUID_OVERLAY(img_state) \ - if(!SSfluids.fluid_images[img_state]) SSfluids.fluid_images[img_state] = image('icons/effects/liquids.dmi',img_state); \ - overlays += SSfluids.fluid_images[img_state]; - -#define FLUID_MAX_ALPHA 160 -#define FLUID_MIN_ALPHA 45 diff --git a/code/__defines/gamemode.dm b/code/__defines/gamemode.dm deleted file mode 100644 index eb958b61a169a..0000000000000 --- a/code/__defines/gamemode.dm +++ /dev/null @@ -1,108 +0,0 @@ -//Used with the ticker to help choose the gamemode. -#define CHOOSE_GAMEMODE_SUCCESS 1 // A gamemode was successfully chosen. -#define CHOOSE_GAMEMODE_RETRY 2 // The gamemode could not be chosen; we will use the next most popular option voted in, or the default. -#define CHOOSE_GAMEMODE_REVOTE 3 // The gamemode could not be chosen; we need to have a revote. -#define CHOOSE_GAMEMODE_RESTART 4 // The gamemode could not be chosen; we will restart the server. -#define CHOOSE_GAMEMODE_SILENT_REDO 5 // The gamemode could not be chosen; we request to have the the proc rerun on the next tick. - -//End game state, to manage round end. -#define END_GAME_NOT_OVER 1 -#define END_GAME_MODE_FINISH_DONE 2 -#define END_GAME_AWAITING_MAP 3 -#define END_GAME_READY_TO_END 4 -#define END_GAME_ENDING 5 -#define END_GAME_AWAITING_TICKETS 6 -#define END_GAME_DELAYED 7 - -#define BE_PAI "BE_PAI" - -// Antagonist datum flags. -#define ANTAG_OVERRIDE_JOB FLAG(0) // Assigned job is set to MODE when spawning. -#define ANTAG_OVERRIDE_MOB FLAG(1) // Mob is recreated from datum mob_type var when spawning. -#define ANTAG_CLEAR_EQUIPMENT FLAG(2) // All preexisting equipment is purged. -#define ANTAG_CHOOSE_NAME FLAG(3) // Antagonists are prompted to enter a name. -#define ANTAG_IMPLANT_IMMUNE FLAG(4) // Cannot be loyalty implanted. -#define ANTAG_SUSPICIOUS FLAG(5) // Shows up on roundstart report. -#define ANTAG_HAS_LEADER FLAG(6) // Generates a leader antagonist. -#define ANTAG_RANDSPAWN FLAG(7) // Potentially randomly spawns due to events. -#define ANTAG_VOTABLE FLAG(8) // Can be voted as an additional antagonist before roundstart. -#define ANTAG_SET_APPEARANCE FLAG(9) // Causes antagonists to use an appearance modifier on spawn. -#define ANTAG_RANDOM_EXCEPTED FLAG(10) // If a game mode randomly selects antag types, antag types with this flag should be excluded. - -// Mode/antag template macros. -#define MODE_BORER "borer" -#define MODE_LOYALIST "loyalist" -#define MODE_COMMANDO "commando" -#define MODE_DEATHSQUAD "deathsquad" -#define MODE_ERT "ert" -#define MODE_ACTOR "actor" -#define MODE_MERCENARY "mercenary" -#define MODE_NINJA "ninja" -#define MODE_RAIDER "raider" -#define MODE_WIZARD "wizard" -#define MODE_CHANGELING "changeling" -#define MODE_CULTIST "cultist" -#define MODE_MONKEY "monkey" -#define MODE_RENEGADE "renegade" -#define MODE_REVOLUTIONARY "revolutionary" -#define MODE_MALFUNCTION "malf" -#define MODE_TRAITOR "traitor" -#define MODE_THRALL "mind thrall" -#define MODE_PARAMOUNT "paramount" -#define MODE_FOUNDATION "foundation agent" -#define MODE_MISC_AGITATOR "provocateur" -#define MODE_HUNTER "hunter" -#define MODE_VOXRAIDER "vox raider" - -#define DEFAULT_TELECRYSTAL_AMOUNT 130 -#define TEAM_TELECRYSTAL_AMOUNT 780 //DEFAULT_TELECRYSTAL_AMOUNT*6 //proxima -#define IMPLANT_TELECRYSTAL_AMOUNT(x) (round(x * 0.49)) // If this cost is ever greater than half of DEFAULT_TELECRYSTAL_AMOUNT then it is possible to buy more TC than you spend - -///////////////// -////WIZARD ////// -///////////////// - -/* WIZARD SPELL FLAGS */ -#define GHOSTCAST FLAG(0) //can a ghost cast it? -#define NEEDSCLOTHES FLAG(1) //does it need the wizard garb to cast? Nonwizard spells should not have this -#define NEEDSHUMAN FLAG(2) //does it require the caster to be human? -#define Z2NOCAST FLAG(3) //if this is added, the spell can't be cast at centcomm -#define NO_SOMATIC FLAG(4) //spell will go off if the person is incapacitated or stunned -#define IGNOREPREV FLAG(5) //if set, each new target does not overlap with the previous one -//The following flags only affect different types of spell, and therefore overlap -//Targeted spells -#define INCLUDEUSER FLAG(6) //does the spell include the caster in its target selection? -#define SELECTABLE FLAG(7) //can you select each target for the spell? -#define NOFACTION FLAG(12) //Don't do the same as our faction -#define NONONFACTION FLAG(13) //Don't do people other than our faction -//AOE spells -#define IGNOREDENSE FLAG(6) //are dense turfs ignored in selection? -#define IGNORESPACE FLAG(7) //are space turfs ignored in selection? -//End split flags -#define CONSTRUCT_CHECK FLAG(8) //used by construct spells - checks for nullrods -#define NO_BUTTON FLAG(9) //spell won't show up in the HUD with this - -//invocation -#define SpI_SHOUT "shout" -#define SpI_WHISPER "whisper" -#define SpI_EMOTE "emote" -#define SpI_NONE "none" - -//upgrading -#define Sp_SPEED "speed" -#define Sp_POWER "power" -#define Sp_TOTAL "total" - -//casting costs -#define Sp_RECHARGE "recharge" -#define Sp_CHARGES "charges" -#define Sp_HOLDVAR "holdervar" - -//Voting-related -#define VOTE_PROCESS_ABORT 1 -#define VOTE_PROCESS_COMPLETE 2 -#define VOTE_PROCESS_ONGOING 3 - -#define VOTE_STATUS_PREVOTE 1 -#define VOTE_STATUS_ACTIVE 2 -#define VOTE_STATUS_COMPLETE 3 diff --git a/code/__defines/guns.dm b/code/__defines/guns.dm deleted file mode 100644 index e622da421f790..0000000000000 --- a/code/__defines/guns.dm +++ /dev/null @@ -1,37 +0,0 @@ -#define CALIBER_PISTOL "10mm" -#define CALIBER_PISTOL_SMALL "7mm" -#define CALIBER_PISTOL_MAGNUM "15mm" -#define CALIBER_PISTOL_FLECHETTE "4mm" -#define CALIBER_PISTOL_ANTIQUE "~10mm" -#define CALIBER_PISTOL_CUSTOM ".38 special" - -#define CALIBER_RIFLE "5mmR" -#define CALIBER_RIFLE_MILITARY "7mmR" -#define CALIBER_ANTIMATERIAL "15mmR" - -#define CALIBER_SHOTGUN "12g" -#define CALIBER_GYROJET "20mmG" -#define CALIBER_CAPS "caps" -#define CALIBER_DART "darts" - -#define HOLD_CASINGS 0 //do not do anything after firing. Manual action, like pump shotguns, or guns that want to define custom behaviour -#define CLEAR_CASINGS 1 //clear chambered so that the next round will be automatically loaded and fired, but don't drop anything on the floor -#define EJECT_CASINGS 2 //drop spent casings on the ground after firing -#define CYCLE_CASINGS 3 //cycle casings, like a revolver. Also works for multibarrelled guns - -//Gun loading types -#define SINGLE_CASING 1 //The gun only accepts ammo_casings. ammo_magazines should never have this as their mag_type. -#define SPEEDLOADER 2 //Transfers casings from the mag to the gun when used. -#define MAGAZINE 4 //The magazine item itself goes inside the gun - - -#define GUN_BULK_RIFLE 5 - -#define BULLET_IMPACT_NONE "none" -#define BULLET_IMPACT_METAL "metal" -#define BULLET_IMPACT_MEAT "meat" - -#define SOUNDS_BULLET_MEAT list('sound/effects/projectile_impact/bullet_meat1.ogg', 'sound/effects/projectile_impact/bullet_meat2.ogg', 'sound/effects/projectile_impact/bullet_meat3.ogg', 'sound/effects/projectile_impact/bullet_meat4.ogg') -#define SOUNDS_BULLET_METAL list('sound/effects/projectile_impact/bullet_metal1.ogg', 'sound/effects/projectile_impact/bullet_metal2.ogg', 'sound/effects/projectile_impact/bullet_metal3.ogg') -#define SOUNDS_LASER_MEAT list('sound/effects/projectile_impact/energy_meat1.ogg','sound/effects/projectile_impact/energy_meat2.ogg') -#define SOUNDS_LASER_METAL list('sound/effects/projectile_impact/energy_metal1.ogg','sound/effects/projectile_impact/energy_metal2.ogg') diff --git a/code/__defines/health.dm b/code/__defines/health.dm deleted file mode 100644 index 00b42887e60bf..0000000000000 --- a/code/__defines/health.dm +++ /dev/null @@ -1,78 +0,0 @@ -// Flags for damage types -/// Generic physical damage sources - Punches, general attacks, bullets, etc -#define DAMAGE_BRUTE "brute" -/// Generic burn damage sources - Lasers, focused heat sources (Not fire, see DAMAGE_FIRE), etc -#define DAMAGE_BURN "burn" -/// Non-harming energy effects - Stun mode weapons, tasers, practice lasers, etc -#define DAMAGE_STUN "stun" -/// Electrical damage, shock rounds, less-than-lethal lasers, etc -#define DAMAGE_SHOCK "shock" -/// Strictly EMP damage, primarily used in emp_act() -#define DAMAGE_EMP "emp" -/// Strictly explosion damage, primarily used in explode_act() -#define DAMAGE_EXPLODE "explode" -/// Strictly fire damage, primarily used in fire_act() -#define DAMAGE_FIRE "fire" -/// Radiation damage -#define DAMAGE_RADIATION "radiation" -/// Bio-damage. Infections, viruses, etc. -#define DAMAGE_BIO "bio" -/// Pain damage. Used for compatabiltiy with legacy code, not intended for actual health tracking use. -#define DAMAGE_PAIN "pain" -/// Toxin and poison damage. -#define DAMAGE_TOXIN "toxin" -/// Genetic damage -#define DAMAGE_GENETIC "genetic" -/// Oxyloss damage -#define DAMAGE_OXY "oxy" -/// Brain damage -#define DAMAGE_BRAIN "brain" -/// Psionic damage -#define DAMAGE_PSIONIC "psi" - -/// Common, basic damage types -#define DAMAGE_STANDARD list(DAMAGE_BRUTE, DAMAGE_BURN) -/// Damage types that should specifically affect electrical systems -#define DAMAGE_ELECTRICAL list(DAMAGE_SHOCK, DAMAGE_EMP) -/// All damage flags -#define DAMAGE_ALL list(DAMAGE_BRUTE, DAMAGE_BURN, DAMAGE_STUN, DAMAGE_SHOCK, DAMAGE_EMP, DAMAGE_EXPLODE, DAMAGE_FIRE, DAMAGE_RADIATION, DAMAGE_BIO, DAMAGE_PAIN, DAMAGE_TOXIN, DAMAGE_GENETIC, DAMAGE_OXY, DAMAGE_BRAIN, DAMAGE_PSIONIC) - - -/// Damage resistance preset for physical inorganic objects - Walls, structures, items, etc. -#define DAMAGE_RESIST_PHYSICAL list(\ - DAMAGE_STUN = 0,\ - DAMAGE_EMP = 0,\ - DAMAGE_RADIATION = 0,\ - DAMAGE_BIO = 0,\ - DAMAGE_PAIN = 0,\ - DAMAGE_TOXIN = 0,\ - DAMAGE_GENETIC = 0,\ - DAMAGE_OXY = 0,\ - DAMAGE_BRAIN = 0,\ - DAMAGE_PSIONIC = 0\ -) - -/// Damage resistance preset for electronic equipment - Computers, machinery, etc. -#define DAMAGE_RESIST_ELECTRICAL list(\ - DAMAGE_STUN = 0.5,\ - DAMAGE_RADIATION = 0,\ - DAMAGE_BIO = 0,\ - DAMAGE_PAIN = 0,\ - DAMAGE_TOXIN = 0,\ - DAMAGE_GENETIC = 0,\ - DAMAGE_OXY = 0,\ - DAMAGE_BRAIN = 0,\ - DAMAGE_PSIONIC = 0\ -) - -/// Damage resistance preset for biological atoms - Animals, plants, etc. -#define DAMAGE_RESIST_BIOLOGICAL list(\ - DAMAGE_EMP = 0\ -) - - -/// Damage Flags for damage_health() -/// The damage proc chain should skip calling `handle_death_state_change()` if applicable -#define DAMAGE_FLAG_SKIP_DEATH_STATE_CHANGE FLAG(0) -/// The damage source should deal extra damage to turfs - Walls, floors, -#define DAMAGE_FLAG_TURF_BREAKER FLAG(1) diff --git a/code/__defines/holomap.dm b/code/__defines/holomap.dm deleted file mode 100644 index 4fc6784148802..0000000000000 --- a/code/__defines/holomap.dm +++ /dev/null @@ -1,36 +0,0 @@ -// -// Constants and standard colors for the holomap -// - -#define HOLOMAP_ICON 'icons/480x480.dmi' // Icon file to start with when drawing holomaps (to get a 480x480 canvas). -#define HOLOMAP_ICON_SIZE 480 // Pixel width & height of the holomap icon. Used for auto-centering etc. -#define HOLOMAP_MARGIN 100 // minimum marging on sides when combining maps -#define UI_HOLOMAP "CENTER-7, CENTER-7" // Screen location of the holomap "hud" - -// Holomap colors -#define HOLOMAP_OBSTACLE "#ffffffdd" // Color of walls and barriers -#define HOLOMAP_PATH "#66666699" // Color of floors -#define HOLOMAP_HOLOFIER "#79ff79" // Whole map is multiplied by this to give it a green holoish look - -#define HOLOMAP_AREACOLOR_BASE "#ffffffff" -#define HOLOMAP_AREACOLOR_COMMAND "#386d8099" -#define HOLOMAP_AREACOLOR_SECURITY "#ae121299" -#define HOLOMAP_AREACOLOR_MEDICAL "#ffffffa5" -#define HOLOMAP_AREACOLOR_SCIENCE "#f45dff99" -#define HOLOMAP_AREACOLOR_EXPLORATION "#a154a699" -#define HOLOMAP_AREACOLOR_ENGINEERING "#f1c23199" -#define HOLOMAP_AREACOLOR_CARGO "#e06f0099" -#define HOLOMAP_AREACOLOR_HALLWAYS "#ffffff66" -#define HOLOMAP_AREACOLOR_AIRLOCK "#0000ffcc" -#define HOLOMAP_AREACOLOR_ESCAPE "#ff0000cc" -#define HOLOMAP_AREACOLOR_CREW "#5bc1c199" -// If someone can come up with a non-conflicting color for the lifts, please update this. -#define HOLOMAP_AREACOLOR_LIFTS null - -// Handy defines to lookup the pixel offsets for holomap -// Currently set to 0, left here in case of need for per map offsets -#define HOLOMAP_PIXEL_OFFSET_X (0) -#define HOLOMAP_PIXEL_OFFSET_Y (0) - -#define HOLOMAP_LEGEND_X 96 -#define HOLOMAP_LEGEND_Y 156 diff --git a/code/__defines/hydroponics.dm b/code/__defines/hydroponics.dm deleted file mode 100644 index c6fe64d487329..0000000000000 --- a/code/__defines/hydroponics.dm +++ /dev/null @@ -1,74 +0,0 @@ -//Misc -#define DEAD_PLANT_COLOUR "#c2a180" - -// Definitions for genes (trait groupings) -#define GENE_BIOCHEMISTRY "biochemistry" -#define GENE_HARDINESS "hardiness" -#define GENE_ENVIRONMENT "environment" -#define GENE_METABOLISM "metabolism" -#define GENE_STRUCTURE "appearance" -#define GENE_DIET "diet" -#define GENE_PIGMENT "pigment" -#define GENE_OUTPUT "output" -#define GENE_ATMOSPHERE "atmosphere" -#define GENE_VIGOUR "vigour" -#define GENE_FRUIT "fruit" -#define GENE_SPECIAL "special" - -#define ALL_GENES list(GENE_BIOCHEMISTRY,GENE_HARDINESS,GENE_ENVIRONMENT,GENE_METABOLISM,GENE_STRUCTURE,GENE_DIET,GENE_PIGMENT,GENE_OUTPUT,GENE_ATMOSPHERE,GENE_VIGOUR,GENE_FRUIT,GENE_SPECIAL) - -//Definitions for traits (individual descriptors) -#define TRAIT_CHEMS 1 -#define TRAIT_EXUDE_GASSES 2 -#define TRAIT_ALTER_TEMP 3 -#define TRAIT_POTENCY 4 -#define TRAIT_HARVEST_REPEAT 5 -#define TRAIT_PRODUCES_POWER 6 -#define TRAIT_JUICY 7 -#define TRAIT_PRODUCT_ICON 8 -#define TRAIT_PLANT_ICON 9 -#define TRAIT_CONSUME_GASSES 10 -#define TRAIT_REQUIRES_NUTRIENTS 11 -#define TRAIT_NUTRIENT_CONSUMPTION 12 -#define TRAIT_REQUIRES_WATER 13 -#define TRAIT_WATER_CONSUMPTION 14 -#define TRAIT_CARNIVOROUS 15 -#define TRAIT_PARASITE 16 -#define TRAIT_STINGS 17 -#define TRAIT_IDEAL_HEAT 18 -#define TRAIT_HEAT_TOLERANCE 19 -#define TRAIT_IDEAL_LIGHT 20 -#define TRAIT_LIGHT_TOLERANCE 21 -#define TRAIT_LOWKPA_TOLERANCE 22 -#define TRAIT_HIGHKPA_TOLERANCE 23 -#define TRAIT_EXPLOSIVE 24 -#define TRAIT_TOXINS_TOLERANCE 25 -#define TRAIT_PEST_TOLERANCE 26 -#define TRAIT_WEED_TOLERANCE 27 -#define TRAIT_ENDURANCE 28 -#define TRAIT_YIELD 29 -#define TRAIT_SPREAD 30 -#define TRAIT_MATURATION 31 -#define TRAIT_PRODUCTION 32 -#define TRAIT_TELEPORTING 33 -#define TRAIT_PLANT_COLOUR 34 -#define TRAIT_PRODUCT_COLOUR 35 -#define TRAIT_BIOLUM 36 -#define TRAIT_BIOLUM_COLOUR 37 -#define TRAIT_IMMUTABLE 38 -#define TRAIT_FLESH_COLOUR 39 -#define TRAIT_LARGE 40 -#define TRAIT_LEAVES_COLOUR 41 -#define TRAIT_PHOTOSYNTHESIS 42 - -// Seed noun datums -#define SEED_NOUN_SPORES "spores" -#define SEED_NOUN_PITS "pits" -#define SEED_NOUN_NODES "nodes" -#define SEED_NOUN_CUTTINGS "cuttings" -#define SEED_NOUN_SEEDS "seeds" - -#define GROWTH_WORMS "worms" -#define GROWTH_VINES "vines" -#define GROWTH_BIOMASS "mass" -#define GROWTH_MOLD "mold" diff --git a/code/__defines/integrated_circuits.dm b/code/__defines/integrated_circuits.dm deleted file mode 100644 index 6d8b0f90c0032..0000000000000 --- a/code/__defines/integrated_circuits.dm +++ /dev/null @@ -1,48 +0,0 @@ -#define IC_INPUT "I" -#define IC_OUTPUT "O" -#define IC_ACTIVATOR "A" - -// Pin functionality. -#define DATA_CHANNEL "data channel" -#define PULSE_CHANNEL "pulse channel" - -// Methods of obtaining a circuit. -#define IC_SPAWN_DEFAULT 1 // If the circuit comes in the default circuit box and able to be printed in the IC printer. -#define IC_SPAWN_RESEARCH 2 // If the circuit design will be available in the IC printer after upgrading it. - -// Categories that help differentiate circuits that can do different tipes of actions -#define IC_ACTION_MOVEMENT FLAG(0) // If the circuit can move the assembly -#define IC_ACTION_COMBAT FLAG(1) // If the circuit can cause harm -#define IC_ACTION_LONG_RANGE FLAG(2) // If the circuit communicate with something outside of the assembly - -// Displayed along with the pin name to show what type of pin it is. -#define IC_FORMAT_ANY "\" -#define IC_FORMAT_STRING "\" -#define IC_FORMAT_CHAR "\" -#define IC_FORMAT_COLOR "\" -#define IC_FORMAT_NUMBER "\" -#define IC_FORMAT_DIR "\" -#define IC_FORMAT_BOOLEAN "\" -#define IC_FORMAT_REF "\" -#define IC_FORMAT_LIST "\" -#define IC_FORMAT_INDEX "\" - -#define IC_FORMAT_PULSE "\" - -// Used inside input/output list to tell the constructor what pin to make. -#define IC_PINTYPE_ANY /datum/integrated_io -#define IC_PINTYPE_STRING /datum/integrated_io/string -#define IC_PINTYPE_CHAR /datum/integrated_io/char -#define IC_PINTYPE_COLOR /datum/integrated_io/color -#define IC_PINTYPE_NUMBER /datum/integrated_io/number -#define IC_PINTYPE_DIR /datum/integrated_io/dir -#define IC_PINTYPE_BOOLEAN /datum/integrated_io/boolean -#define IC_PINTYPE_REF /datum/integrated_io/ref -#define IC_PINTYPE_LIST /datum/integrated_io/lists -#define IC_PINTYPE_INDEX /datum/integrated_io/index - -#define IC_PINTYPE_PULSE_IN /datum/integrated_io/activate -#define IC_PINTYPE_PULSE_OUT /datum/integrated_io/activate/out - -// Data limits. -#define IC_MAX_LIST_LENGTH 500 diff --git a/code/__defines/inventory_sizes.dm b/code/__defines/inventory_sizes.dm deleted file mode 100644 index 1857deb7fc6cb..0000000000000 --- a/code/__defines/inventory_sizes.dm +++ /dev/null @@ -1,41 +0,0 @@ -// The below should be used to define an item's w_class variable. -// Example: w_class = ITENSIZE_LARGE -// This allows the addition of future w_classes without needing to change every file. -#define ITEM_SIZE_TINY 1 -#define ITEM_SIZE_SMALL 2 -#define ITEM_SIZE_NORMAL 3 -#define ITEM_SIZE_LARGE 4 -#define ITEM_SIZE_HUGE 5 -#define ITEM_SIZE_GARGANTUAN 6 -#define ITEM_SIZE_NO_CONTAINER INFINITY // Use this to forbid item from being placed in a container. - -#define BASE_STORAGE_COST(w_class) (2**(w_class-1)) //1,2,4,8,16,... - -//linear increase. Using many small storage containers is more space-efficient than using large ones, -//in exchange for being limited in the w_class of items that will fit -#define BASE_STORAGE_CAPACITY(w_class) (7*(w_class-1)) - -#define DEFAULT_BACKPACK_STORAGE BASE_STORAGE_CAPACITY(5) -#define DEFAULT_LARGEBOX_STORAGE BASE_STORAGE_CAPACITY(4) -#define DEFAULT_BOX_STORAGE BASE_STORAGE_CAPACITY(3) - -#define STORAGE_SLOTS *1 -#define STORAGE_FREEFORM *-1 - - -/** -* Tank sizes for /obj/item/tank -* Used for gating different gas tank roles without being too specific about volume or w_class -*/ - -/// Emergency tanks, except doubles -#define TANK_SIZE_SMALL 10 - -/// Double tanks & fuel tanks -#define TANK_SIZE_MEDIUM 20 - -/// Full size tanks -#define TANK_SIZE_LARGE 30 - -/// Scrubber tanks & jetpacks -#define TANK_SIZE_HUGE 40 diff --git a/code/__defines/is_helpers.dm b/code/__defines/is_helpers.dm deleted file mode 100644 index b8546a300ff2f..0000000000000 --- a/code/__defines/is_helpers.dm +++ /dev/null @@ -1 +0,0 @@ -#define isHUDobj(A) istype(A, /obj/screen) diff --git a/code/__defines/items_clothing.dm b/code/__defines/items_clothing.dm deleted file mode 100644 index 19a095efe35d1..0000000000000 --- a/code/__defines/items_clothing.dm +++ /dev/null @@ -1,278 +0,0 @@ -#define HUMAN_STRIP_DELAY (4 SECONDS) - -#define CANDLE_LUM 3 // For how bright candles are. - -// Item inventory slot bitmasks. -#define SLOT_OCLOTHING FLAG(0) -#define SLOT_ICLOTHING FLAG(1) -#define SLOT_GLOVES FLAG(2) -#define SLOT_EYES FLAG(3) -#define SLOT_EARS FLAG(4) -#define SLOT_MASK FLAG(5) -#define SLOT_HEAD FLAG(6) -#define SLOT_FEET FLAG(7) -#define SLOT_ID FLAG(8) -#define SLOT_BELT FLAG(9) -#define SLOT_BACK FLAG(10) -#define SLOT_POCKET FLAG(11) // This is to allow items with a w_class of 3 or 4 to fit in pockets. -#define SLOT_DENYPOCKET FLAG(12) // This is to deny items with a w_class of 2 or 1 from fitting in pockets. -#define SLOT_TWOEARS FLAG(13) -#define SLOT_TIE FLAG(14) -#define SLOT_HOLSTER FLAG(15) - -#define ACCESSORY_SLOT_UTILITY "Utility" -#define ACCESSORY_SLOT_HOLSTER "Holster" -#define ACCESSORY_SLOT_ARMBAND "Armband" -#define ACCESSORY_SLOT_RANK "Rank" -#define ACCESSORY_SLOT_DEPT "Department" -#define ACCESSORY_SLOT_DECOR "Decor" -#define ACCESSORY_SLOT_MEDAL "Medal" -#define ACCESSORY_SLOT_INSIGNIA "Insignia" -#define ACCESSORY_SLOT_ARMOR_C "Chest armor" -#define ACCESSORY_SLOT_ARMOR_A "Arm armor" -#define ACCESSORY_SLOT_ARMOR_L "Leg armor" -#define ACCESSORY_SLOT_ARMOR_S "Armor storage" -#define ACCESSORY_SLOT_ARMOR_M "Misc armor" -#define ACCESSORY_SLOT_HELM_C "Helmet cover" -#define ACCESSORY_SLOT_HELM_D "Helmet decor" - - -#define ACCESSORY_REMOVABLE FLAG(0) -#define ACCESSORY_HIDDEN FLAG(1) -#define ACCESSORY_HIGH_VISIBILITY FLAG(2) -#define ACCESSORY_DEFAULT_FLAGS ( ACCESSORY_REMOVABLE ) - - -// Bitmasks for the flags_inv variable. These determine when a piece of clothing hides another, i.e. a helmet hiding glasses. -// WARNING: The following flags apply only to the external suit! -#define HIDEGLOVES FLAG(0) -#define HIDESUITSTORAGE FLAG(1) -#define HIDEJUMPSUIT FLAG(2) -#define HIDESHOES FLAG(3) -#define HIDETAIL FLAG(4) - -// WARNING: The following flags apply only to the helmets and masks! -#define HIDEMASK FLAG(0) -#define HIDEEARS FLAG(1) // Headsets and such. -#define HIDEEYES FLAG(2) // Glasses. -#define HIDEFACE FLAG(3) // Dictates whether we appear as "Unknown". -#define CLOTHING_BULKY FLAG(11) //You cannot wear bulky clothing over bulky clothing. - -#define BLOCKHEADHAIR FLAG(5) // Hides the user's hair overlay. Leaves facial hair. -#define BLOCKHAIR FLAG(6) // Hides the user's hair, facial and otherwise. - -// Slots. -#define slot_none 0 -#define slot_first 1 -#define slot_back 1 -#define slot_wear_mask 2 -#define slot_handcuffed 3 -#define slot_l_hand 4 -#define slot_r_hand 5 -#define slot_belt 6 -#define slot_wear_id 7 -#define slot_l_ear 8 -#define slot_glasses 9 -#define slot_gloves 10 -#define slot_head 11 -#define slot_shoes 12 -#define slot_wear_suit 13 -#define slot_w_uniform 14 -#define slot_l_store 15 -#define slot_r_store 16 -#define slot_s_store 17 -#define slot_in_backpack 18 -#define slot_legcuffed 19 -#define slot_r_ear 20 -#define slot_legs 21 -#define slot_tie 22 -#define slot_last 22 - -// Inventory slot strings. -// since numbers cannot be used as associative list keys. -//icon_back, icon_l_hand, etc would be much better names for these... -#define slot_back_str "slot_back" -#define slot_l_hand_str "slot_l_hand" -#define slot_r_hand_str "slot_r_hand" -#define slot_w_uniform_str "slot_w_uniform" -#define slot_head_str "slot_head" -#define slot_wear_suit_str "slot_suit" -#define slot_l_ear_str "slot_l_ear" -#define slot_r_ear_str "slot_r_ear" -#define slot_belt_str "slot_belt" -#define slot_shoes_str "slot_shoes" -#define slot_wear_mask_str "slot_wear_mask" -#define slot_handcuffed_str "slot_handcuffed" -#define slot_legcuffed_str "slot_legcuffed" -#define slot_wear_id_str "slot_wear_id" -#define slot_gloves_str "slot_gloves" -#define slot_glasses_str "slot_glasses" -#define slot_s_store_str "slot_s_store" -#define slot_tie_str "slot_tie" - -// Bitflags for clothing parts. -#define HEAD FLAG(0) -#define FACE FLAG(1) -#define EYES FLAG(2) -#define FULL_HEAD (HEAD | FACE | EYES) -#define UPPER_TORSO FLAG(3) -#define LOWER_TORSO FLAG(4) -#define FULL_TORSO (UPPER_TORSO | LOWER_TORSO) -#define LEG_LEFT FLAG(5) -#define LEG_RIGHT FLAG(6) -#define LEGS (LEG_LEFT | LEG_RIGHT) -#define FOOT_LEFT FLAG(7) -#define FOOT_RIGHT FLAG(8) -#define FEET (FOOT_LEFT | FOOT_RIGHT) -#define FULL_LEGS (LEG_LEFT | LEG_RIGHT | FOOT_LEFT | FOOT_RIGHT) -#define ARM_LEFT FLAG(9) -#define ARM_RIGHT FLAG(10) -#define ARMS (ARM_LEFT | ARM_RIGHT) -#define HAND_LEFT FLAG(11) -#define HAND_RIGHT FLAG(12) -#define HANDS (HAND_LEFT | HAND_RIGHT) -#define FULL_ARMS (ARM_LEFT | ARM_RIGHT | HAND_LEFT | HAND_RIGHT) -#define FULL_BODY (FULL_HEAD | FULL_TORSO | FULL_LEGS | FULL_ARMS) - -// Bitflags for the percentual amount of protection a piece of clothing which covers the body part offers. -// Used with human/proc/get_heat_protection() and human/proc/get_cold_protection(). -// The values here should add up to 1, e.g., the head has 30% protection. -#define THERMAL_PROTECTION_HEAD 0.3 -#define THERMAL_PROTECTION_UPPER_TORSO 0.15 -#define THERMAL_PROTECTION_LOWER_TORSO 0.15 -#define THERMAL_PROTECTION_LEG_LEFT 0.075 -#define THERMAL_PROTECTION_LEG_RIGHT 0.075 -#define THERMAL_PROTECTION_FOOT_LEFT 0.025 -#define THERMAL_PROTECTION_FOOT_RIGHT 0.025 -#define THERMAL_PROTECTION_ARM_LEFT 0.075 -#define THERMAL_PROTECTION_ARM_RIGHT 0.075 -#define THERMAL_PROTECTION_HAND_LEFT 0.025 -#define THERMAL_PROTECTION_HAND_RIGHT 0.025 - -// Pressure limits. -#define HAZARD_HIGH_PRESSURE 550 // This determines at what pressure the ultra-high pressure red icon is displayed. (This one is set as a constant) -#define WARNING_HIGH_PRESSURE 325 // This determines when the orange pressure icon is displayed (it is 0.7 * HAZARD_HIGH_PRESSURE) -#define WARNING_LOW_PRESSURE 50 // This is when the gray low pressure icon is displayed. (it is 2.5 * HAZARD_LOW_PRESSURE) -#define HAZARD_LOW_PRESSURE 20 // This is when the black ultra-low pressure icon is displayed. (This one is set as a constant) - -#define TEMPERATURE_DAMAGE_COEFFICIENT 1.5 // This is used in handle_temperature_damage() for humans, and in reagents that affect body temperature. Temperature damage is multiplied by this amount. -#define BODYTEMP_AUTORECOVERY_DIVISOR 12 // This is the divisor which handles how much of the temperature difference between the current body temperature and 310.15K (optimal temperature) humans auto-regenerate each tick. The higher the number, the slower the recovery. This is applied each tick, so long as the mob is alive. -#define BODYTEMP_AUTORECOVERY_MINIMUM 1 // Minimum amount of kelvin moved toward 310.15K per tick. So long as abs(310.15 - bodytemp) is more than 50. -#define BODYTEMP_COLD_DIVISOR 6 // Similar to the BODYTEMP_AUTORECOVERY_DIVISOR, but this is the divisor which is applied at the stage that follows autorecovery. This is the divisor which comes into play when the human's loc temperature is lower than their body temperature. Make it lower to lose bodytemp faster. -#define BODYTEMP_HEAT_DIVISOR 6 // Similar to the BODYTEMP_AUTORECOVERY_DIVISOR, but this is the divisor which is applied at the stage that follows autorecovery. This is the divisor which comes into play when the human's loc temperature is higher than their body temperature. Make it lower to gain bodytemp faster. -#define BODYTEMP_COOLING_MAX -30 // The maximum number of degrees that your body can cool down in 1 tick, when in a cold area. -#define BODYTEMP_HEATING_MAX 30 // The maximum number of degrees that your body can heat up in 1 tick, when in a hot area. - -#define BODYTEMP_HEAT_DAMAGE_LIMIT 360.15 // The limit the human body can take before it starts taking damage from heat. -#define BODYTEMP_COLD_DAMAGE_LIMIT 260.15 // The limit the human body can take before it starts taking damage from coldness. - -#define SPACE_HELMET_MIN_COLD_PROTECTION_TEMPERATURE 2.0 // What min_cold_protection_temperature is set to for space-helmet quality headwear. MUST NOT BE 0. -#define SPACE_SUIT_MIN_COLD_PROTECTION_TEMPERATURE 2.0 // What min_cold_protection_temperature is set to for space-suit quality jumpsuits or suits. MUST NOT BE 0. -#define HELMET_MIN_COLD_PROTECTION_TEMPERATURE 160 // For normal helmets. -#define ARMOR_MIN_COLD_PROTECTION_TEMPERATURE 160 // For armor. -#define GLOVES_MIN_COLD_PROTECTION_TEMPERATURE 2.0 // For some gloves. -#define SHOE_MIN_COLD_PROTECTION_TEMPERATURE 2.0 // For shoes. - -#define SPACE_SUIT_MAX_HEAT_PROTECTION_TEMPERATURE 5000 // These need better heat protect, but not as good heat protect as firesuits. -#define FIRESUIT_MAX_HEAT_PROTECTION_TEMPERATURE 30000 // What max_heat_protection_temperature is set to for firesuit quality headwear. MUST NOT BE 0. -#define FIRE_HELMET_MAX_HEAT_PROTECTION_TEMPERATURE 30000 // For fire-helmet quality items. (Red and white hardhats) -#define HELMET_MAX_HEAT_PROTECTION_TEMPERATURE 600 // For normal helmets. -#define ARMOR_MAX_HEAT_PROTECTION_TEMPERATURE 600 // For armor. -#define GLOVES_MAX_HEAT_PROTECTION_TEMPERATURE 1500 // For some gloves. -#define SHOE_MAX_HEAT_PROTECTION_TEMPERATURE 1500 // For shoes. - -#define FIRESUIT_MAX_PRESSURE 100 * ONE_ATMOSPHERE // Firesuis and atmos voidsuits -#define RIG_MAX_PRESSURE 50 * ONE_ATMOSPHERE // Rigs -#define LIGHT_RIG_MAX_PRESSURE 25 * ONE_ATMOSPHERE // Rigs -#define ENG_VOIDSUIT_MAX_PRESSURE 50 * ONE_ATMOSPHERE -#define VOIDSUIT_MAX_PRESSURE 25 * ONE_ATMOSPHERE -#define SPACE_SUIT_MAX_PRESSURE 5 * ONE_ATMOSPHERE - -// Fire. -#define FIRE_MIN_STACKS -20 -#define FIRE_MAX_STACKS 25 -#define FIRE_MAX_FIRESUIT_STACKS 20 // If the number of stacks goes above this firesuits won't protect you anymore. If not, you can walk around while on fire like a badass. - -#define THROWFORCE_SPEED_DIVISOR 5 // The throwing speed value at which the throwforce multiplier is exactly 1. -#define THROWNOBJ_KNOCKBACK_SPEED 15 // The minumum speed of a w_class 2 thrown object that will cause living mobs it hits to be knocked back. Heavier objects can cause knockback at lower speeds. -#define THROWNOBJ_KNOCKBACK_DIVISOR 2 // Affects how much speed the mob is knocked back with. - -// Suit sensor levels -#define SUIT_SENSOR_OFF 0 -#define SUIT_SENSOR_BINARY 1 -#define SUIT_SENSOR_VITAL 2 -#define SUIT_SENSOR_TRACKING 3 - -#define SUIT_SENSOR_MODES list("Off" = SUIT_SENSOR_OFF, "Binary sensors" = SUIT_SENSOR_BINARY, "Vitals tracker" = SUIT_SENSOR_VITAL, "Tracking beacon" = SUIT_SENSOR_TRACKING) - -#define SUIT_NO_SENSORS EMPTY_BITFIELD -#define SUIT_HAS_SENSORS FLAG(0) -#define SUIT_LOCKED_SENSORS FLAG(1) - -// Hair Flags -#define VERY_SHORT FLAG(0) -#define HAIR_TIEABLE FLAG(1) -#define HAIR_BALD FLAG(2) - -//flags to determine if an eyepiece is a hud. -#define HUD_SCIENCE FLAG(0) -#define HUD_SECURITY FLAG(1) -#define HUD_MEDICAL FLAG(2) -#define HUD_JANITOR FLAG(3) - - -/** -* flags for /mob/proc/equip_to_slot_if_possible -*/ - -/// Cause a mob icon update after equipping -#define TRYEQUIP_REDRAW 0x1 - -/// Skip any delays and equip instantly -#define TRYEQUIP_INSTANT 0x2 - -/// If the attempt fails, destroy the item -#define TRYEQUIP_DESTROY 0x4 - -/// Do not send output to the user about success or failure -#define TRYEQUIP_SILENT 0x8 - -/// Always succeed if existentially possible -#define TRYEQUIP_FORCE 0x10 - - -// Storage -/* - A note on w_classes - this is an attempt to describe the w_classes currently in use - with an attempt at providing examples of the kinds of things that fit each w_class - - 1 - tiny items - things like screwdrivers and pens, sheets of paper - 2 - small items - things that can fit in a pocket - 3 - normal items - 4 - large items - the largest things you can fit in a backpack - 5 - bulky items - backpacks are this size, for reference - 6 - human sized objects - 7 - things that are large enough to contain humans, like closets, but smaller than entire turfs - 8 - things that take up an entire turf, like wall girders or door assemblies -*/ - -GLOBAL_LIST_INIT(default_onmob_icons, list( - slot_l_hand_str = 'icons/mob/onmob/items/lefthand.dmi',\ - slot_r_hand_str = 'icons/mob/onmob/items/righthand.dmi',\ - slot_belt_str = 'icons/mob/onmob/onmob_belt.dmi',\ - slot_back_str = 'icons/mob/onmob/onmob_back.dmi',\ - slot_l_ear_str = 'icons/mob/onmob/onmob_ears.dmi',\ - slot_r_ear_str = 'icons/mob/onmob/onmob_ears.dmi',\ - slot_glasses_str = 'icons/mob/onmob/onmob_eyes.dmi',\ - slot_wear_id_str = 'icons/mob/onmob/onmob_id.dmi',\ - slot_w_uniform_str = 'icons/mob/onmob/onmob_under.dmi',\ - slot_wear_suit_str = 'icons/mob/onmob/onmob_suit.dmi',\ - slot_head_str = 'icons/mob/onmob/onmob_head.dmi',\ - slot_shoes_str = 'icons/mob/onmob/onmob_feet.dmi',\ - slot_wear_mask_str = 'icons/mob/onmob/onmob_mask.dmi',\ - slot_handcuffed_str = 'icons/mob/onmob/onmob_cuff.dmi',\ - slot_legcuffed_str = 'icons/mob/onmob/onmob_cuff.dmi',\ - slot_gloves_str = 'icons/mob/onmob/onmob_hands.dmi',\ - slot_s_store_str = 'icons/mob/onmob/onmob_belt_mirror.dmi',\ - slot_tie_str = 'icons/mob/onmob/onmob_accessories.dmi'\ -)) diff --git a/code/__defines/jobs.dm b/code/__defines/jobs.dm deleted file mode 100644 index 2246860f890dd..0000000000000 --- a/code/__defines/jobs.dm +++ /dev/null @@ -1,3 +0,0 @@ -#define GET_RANDOM_JOB 0 -#define BE_ASSISTANT 1 -#define RETURN_TO_LOBBY 2 \ No newline at end of file diff --git a/code/__defines/languages.dm b/code/__defines/languages.dm deleted file mode 100644 index 502e4e37db405..0000000000000 --- a/code/__defines/languages.dm +++ /dev/null @@ -1,52 +0,0 @@ -//Human -#define LANGUAGE_HUMAN_EURO "Zurich Accord Common" -#define LANGUAGE_HUMAN_CHINESE "Yangyu" -#define LANGUAGE_HUMAN_ARABIC "Prototype Standard Arabic" -#define LANGUAGE_HUMAN_INDIAN "New Dehlavi" -#define LANGUAGE_HUMAN_IBERIAN "Iberian" -#define LANGUAGE_HUMAN_RUSSIAN "Pan-Slavic" -#define LANGUAGE_HUMAN_SELENIAN "Selenian" - -//Human misc -#define LANGUAGE_GUTTER "Gutter" -#define LANGUAGE_SPACER "Spacer" - -//Alien -#define LANGUAGE_EAL "Encoded Audio Language" -#define LANGUAGE_UNATHI_SINTA "Sinta'unathi" -#define LANGUAGE_UNATHI_YEOSA "Yeosa'unathi" -#define LANGUAGE_SKRELLIAN "Skrellian" -#define LANGUAGE_ROOTLOCAL "Local Rootspeak" -#define LANGUAGE_ROOTGLOBAL "Global Rootspeak" -#define LANGUAGE_ADHERENT "Protocol" -#define LANGUAGE_VOX "Vox-pidgin" -#define LANGUAGE_NABBER "Serpentid" - -//Antag -#define LANGUAGE_CULT "Cult" -#define LANGUAGE_CULT_GLOBAL "Occult" -#define LANGUAGE_ALIUM "Alium" - -//Other -#define LANGUAGE_PRIMITIVE "Primitive" -#define LANGUAGE_SIGN "Sign Language" -#define LANGUAGE_ROBOT_GLOBAL "Robot Talk" -#define LANGUAGE_DRONE_GLOBAL "Drone Talk" -#define LANGUAGE_CHANGELING_GLOBAL "Changeling" -#define LANGUAGE_BORER_GLOBAL "Cortical Link" - -// Language flags. -#define WHITELISTED 1 // Language is available if the speaker is whitelisted. -#define RESTRICTED 2 // Language can only be acquired by spawning or an admin. -#define NONVERBAL 4 // Language has a significant non-verbal component. Speech is garbled without line-of-sight. -#define SIGNLANG 8 // Language is completely non-verbal. Speech is displayed through emotes for those who can understand. -#define HIVEMIND 16 // Broadcast to all mobs with this language. -#define NONGLOBAL 32 // Do not add to general languages list. -#define INNATE 64 // All mobs can be assumed to speak and understand this language. (audible emotes) -#define NO_TALK_MSG 128 // Do not show the "\The [speaker] talks into \the [radio]" message -#define NO_STUTTER 256 // No stuttering, slurring, or other speech problems -#define ALT_TRANSMIT 512 // Language is not based on vision or sound (Todo: add this into the say code and use it for the rootspeak languages) -#define BAD_SPEAKER 1024// INF - -// Misc -#define MAX_LANGUAGES 3 diff --git a/code/__defines/lighting.dm b/code/__defines/lighting.dm deleted file mode 100644 index 5e35bad8636b1..0000000000000 --- a/code/__defines/lighting.dm +++ /dev/null @@ -1,86 +0,0 @@ -#define FOR_DVIEW(type, range, center, invis_flags) \ - GLOB.dview_mob.loc = center; \ - GLOB.dview_mob.see_invisible = invis_flags; \ - for(type in view(range, GLOB.dview_mob)) - -#define END_FOR_DVIEW GLOB.dview_mob.loc = null - -#define LIGHTING_ICON 'icons/effects/lighting_overlay.dmi' // icon used for lighting shading effects -#define LIGHTING_ICON_STATE_DARK "dark" // Change between "soft_dark" and "dark" to swap soft darkvision - -#define LIGHTING_ROUND_VALUE (1 / 64) // Value used to round lumcounts, values smaller than 1/69 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_SOFT_THRESHOLD 0 // If the max of the lighting lumcounts of each spectrum drops below this, disable luminosity on the lighting overlays. This also should be the transparancy of the "soft_dark" icon state. - -#define LIGHTING_MULT_FACTOR 0.9 - -// If I were you I'd leave this alone. -#define LIGHTING_BASE_MATRIX \ - list \ - ( \ - LIGHTING_SOFT_THRESHOLD, LIGHTING_SOFT_THRESHOLD, LIGHTING_SOFT_THRESHOLD, 0, \ - LIGHTING_SOFT_THRESHOLD, LIGHTING_SOFT_THRESHOLD, LIGHTING_SOFT_THRESHOLD, 0, \ - LIGHTING_SOFT_THRESHOLD, LIGHTING_SOFT_THRESHOLD, LIGHTING_SOFT_THRESHOLD, 0, \ - LIGHTING_SOFT_THRESHOLD, LIGHTING_SOFT_THRESHOLD, LIGHTING_SOFT_THRESHOLD, 0, \ - 0, 0, 0, 1 \ - ) - -// Helpers so we can (more easily) control the colour matrices. -#define CL_MATRIX_RR 1 -#define CL_MATRIX_RG 2 -#define CL_MATRIX_RB 3 -#define CL_MATRIX_RA 4 -#define CL_MATRIX_GR 5 -#define CL_MATRIX_GG 6 -#define CL_MATRIX_GB 7 -#define CL_MATRIX_GA 8 -#define CL_MATRIX_BR 9 -#define CL_MATRIX_BG 10 -#define CL_MATRIX_BB 11 -#define CL_MATRIX_BA 12 -#define CL_MATRIX_AR 13 -#define CL_MATRIX_AG 14 -#define CL_MATRIX_AB 15 -#define CL_MATRIX_AA 16 -#define CL_MATRIX_CR 17 -#define CL_MATRIX_CG 18 -#define CL_MATRIX_CB 19 -#define CL_MATRIX_CA 20 - -// Lightbulb statuses -#define LIGHT_OK 0 // A light bulb is installed and functioning. -#define LIGHT_EMPTY 1 // There is no light bulb installed. -#define LIGHT_BROKEN 2 // The light bulb is broken/shattered. -#define LIGHT_BURNED 3 // The light bulb is burned out. - -// Lighting color presets -#define LIGHT_COLOUR_WHITE "#fefefe" // Clinical white light bulbs -#define LIGHT_COLOUR_WARM "#fffee0" // Warm yellowish light bulbs -#define LIGHT_COLOUR_COOL "#e0fefe" // Cool bluish light bulbs -#define LIGHT_COLOUR_E_RED "#da0205" // Emergency red lighting -#define LIGHT_COLOUR_READY "#00ff00" // Green 'READY' lighting -#define LIGHT_COLOUR_SKRELL "#66ccff" // Skrellian cyan lighting - -#define LIGHT_STANDARD_COLORS list(LIGHT_COLOUR_WHITE, LIGHT_COLOUR_WARM, LIGHT_COLOUR_COOL) // List of standard light colors used for randomized lighting and selectable printed lights. - -// Light replacer color options -#define LIGHT_REPLACE_AREA "AREA" // Match the areas defined light color(s) -#define LIGHT_REPLACE_EXISTING "EXISTING" // Mimic the existing bulb's color -#define LIGHT_REPLACE_RANDOM "RANDOM" // Default behaviour. Randomize the light color from LIGHT_STANDARD_COLORS. - -// Options available for users to set light replacer colors. -#define LIGHT_REPLACE_OPTIONS list(\ - "Random (Default)",\ - "Match Blueprint",\ - "Match Existing",\ - "Warm",\ - "Cool",\ - "White",\ - "Custom"\ -) - -// Area lighting modes -#define AREA_LIGHTING_WHITE "white" -#define AREA_LIGHTING_WARM "warm" -#define AREA_LIGHTING_COOL "cool" -#define AREA_LIGHTING_DEFAULT "default" // For light replacers, defaults to whatever the area is set to. For areas, uses the initial lighting value from the light bulb itself. diff --git a/code/__defines/lists.dm b/code/__defines/lists.dm deleted file mode 100644 index 929418e5ca608..0000000000000 --- a/code/__defines/lists.dm +++ /dev/null @@ -1,71 +0,0 @@ -// Helper macros to aid in optimizing lazy instantiation of lists. -// All of these are null-safe, you can use them without knowing if the list var is initialized yet - -//Picks from the list, with some safeties, and returns the "default" arg if it fails -#define DEFAULTPICK(L, default) ((istype(L, /list) && L:len) ? pick(L) : default) -// Ensures L is initailized after this point -#define LAZYINITLIST(L) if (!L) L = list() -// Sets a L back to null iff it is empty -#define UNSETEMPTY(L) if (L && !L.len) L = null -// Removes I from list L, and sets I to null if it is now empty -#define LAZYREMOVE(L, I) if(L) { L -= I; if(!length(L)) { L = null; } } -// Adds I to L, initalizing L if necessary -#define LAZYADD(L, I) if(!L) { L = list(); } L += I; -// Insert I into L at position X, initalizing L if necessary -#define LAZYINSERT(L, I, X) if(!L) { L = list(); } L.Insert(X, I); -// Adds I to L, initalizing L if necessary, if I is not already in L -#define LAZYDISTINCTADD(L, I) if(!L) { L = list(); } L |= I; -// Sets L[A] to I, initalizing L if necessary -#define LAZYSET(L, A, I) if(!L) { L = list(); } L[A] = I; -// Reads I from L safely - Works with both associative and traditional lists. -#define LAZYACCESS(L, I) (L ? (isnum(I) ? (I > 0 && I <= length(L) ? L[I] : null) : L[I]) : null) -// Reads the length of L, returning 0 if null -#define LAZYLEN(L) length(L) -// Safely checks if I is in L -#define LAZYISIN(L, I) (L ? (I in L) : FALSE) -// Null-safe List.Cut() and discard. -#define LAZYCLEARLIST(L) if(L) { L.Cut(); L = null; } -// Reads L or an empty list if L is not a list. Note: Does NOT assign, L may be an expression. -#define SANITIZE_LIST(L) ( islist(L) ? L : list() ) - - -/**** -* Binary search sorted insert -* INPUT: Object to be inserted -* LIST: List to insert object into -* TYPECONT: The typepath of the contents of the list -* COMPARE: The object to compare against, usualy the same as INPUT -* COMPARISON: The variable on the objects to compare -* COMPTYPE: How should the values be compared? Either COMPARE_KEY or COMPARE_VALUE. -****/ -#define BINARY_INSERT(INPUT, LIST, TYPECONT, COMPARE, COMPARISON, COMPTYPE) \ - do {\ - var/list/__BIN_LIST = LIST;\ - var/__BIN_CTTL = length(__BIN_LIST);\ - if(!__BIN_CTTL) {\ - __BIN_LIST += INPUT;\ - } else {\ - var/__BIN_LEFT = 1;\ - var/__BIN_RIGHT = __BIN_CTTL;\ - var/__BIN_MID = SHIFTR((__BIN_LEFT + __BIN_RIGHT), 1);\ - var ##TYPECONT/__BIN_ITEM;\ - while(__BIN_LEFT < __BIN_RIGHT) {\ - __BIN_ITEM = COMPTYPE;\ - if(__BIN_ITEM.##COMPARISON <= COMPARE.##COMPARISON) {\ - __BIN_LEFT = __BIN_MID + 1;\ - } else {\ - __BIN_RIGHT = __BIN_MID;\ - };\ - __BIN_MID = SHIFTR((__BIN_LEFT + __BIN_RIGHT), 1);\ - };\ - __BIN_ITEM = COMPTYPE;\ - __BIN_MID = __BIN_ITEM.##COMPARISON > COMPARE.##COMPARISON ? __BIN_MID : __BIN_MID + 1;\ - __BIN_LIST.Insert(__BIN_MID, INPUT);\ - };\ - } while(FALSE) - -/// Passed into BINARY_INSERT to compare keys -#define COMPARE_KEY __BIN_LIST[__BIN_MID] - -/// Passed into BINARY_INSERT to compare values -#define COMPARE_VALUE __BIN_LIST[__BIN_LIST[__BIN_MID]] diff --git a/code/__defines/machinery.dm b/code/__defines/machinery.dm deleted file mode 100644 index de92358e928e9..0000000000000 --- a/code/__defines/machinery.dm +++ /dev/null @@ -1,178 +0,0 @@ -#define KILOWATTS *1000 -#define MEGAWATTS *1000000 -#define GIGAWATTS *1000000000 - -#define MACHINERY_TICKRATE 2 // Tick rate for machinery in seconds. As it affects CELLRATE calculation it is kept as define here - -#define CELLRATE (1 / ( 3600 / MACHINERY_TICKRATE )) // Multiplier for charge units. Converts cell charge units(watthours) to joules. Takes into consideration that our machinery ticks once per two seconds. - -// Doors! -#define DOOR_CRUSH_DAMAGE 40 - -#define POWER_USE_OFF 0 -#define POWER_USE_IDLE 1 -#define POWER_USE_ACTIVE 2 - -// Channel numbers for power. -#define POWER_CHAN -1 // Use default channel -#define EQUIP 1 -#define LIGHT 2 -#define ENVIRON 3 -#define LOCAL 4 // Machines running on local power. Not tracked by area. -#define TOTAL 5 // For total power used only. - -// Bitflags for machine stat variable. -#define BROKEN FLAG(0) -#define NOPOWER FLAG(1) -#define MAINT FLAG(2) // Under maintenance. -#define EMPED FLAG(3) // Temporary broken by EMP pulse. -#define NOSCREEN FLAG(4) // No UI shown via direct interaction -#define NOINPUT FLAG(5) // No input taken from direct interaction - -#define MACHINE_BROKEN_GENERIC FLAG(0) // Standard legacy brokenness, used on a case-by-case basis -#define MACHINE_BROKEN_NO_PARTS FLAG(1) // Missing required parts - -// Used by firelocks -#define FIREDOOR_OPEN 1 -#define FIREDOOR_CLOSED 2 - -#define AI_CAMERA_LUMINOSITY 6 - -// Camera networks -#define NETWORK_CRESCENT "Crescent" -#define NETWORK_ENGINEERING "Engineering" -#define NETWORK_ERT "ZeEmergencyResponseTeam" -#define NETWORK_EXODUS "Exodus" -#define NETWORK_MEDICAL "Medical" -#define NETWORK_MERCENARY "MercurialNet" -#define NETWORK_MINE "Mining" -#define NETWORK_RESEARCH "Research" -#define NETWORK_ROBOTS "Robots" -#define NETWORK_SECURITY "Security" -#define NETWORK_THUNDER "Thunderdome" - -#define NETWORK_ALARM_ATMOS "Atmosphere Alarms" -#define NETWORK_ALARM_CAMERA "Camera Alarms" -#define NETWORK_ALARM_FIRE "Fire Alarms" -#define NETWORK_ALARM_MOTION "Motion Alarms" -#define NETWORK_ALARM_POWER "Power Alarms" - -//singularity defines -#define STAGE_ONE 1 -#define STAGE_TWO 3 -#define STAGE_THREE 5 -#define STAGE_FOUR 7 -#define STAGE_FIVE 9 -#define STAGE_SUPER 11 - -// NanoUI flags -#define STATUS_CLOSE -1 // Close the interface -#define STATUS_DISABLED 0 // RED Visability -#define STATUS_UPDATE 1 // ORANGE Visability -#define STATUS_INTERACTIVE 2 // GREEN Visability - -/* - * Atmospherics Machinery. -*/ -#define MAX_SIPHON_FLOWRATE 2500 // L/s. This can be used to balance how fast a room is siphoned. Anything higher than CELL_VOLUME has no effect. -#define MAX_SCRUBBER_FLOWRATE 200 // L/s. Max flow rate when scrubbing from a turf. - -// These balance how easy or hard it is to create huge pressure gradients with pumps and filters. -// Lower values means it takes longer to create large pressures differences. -// Has no effect on pumping gasses from high pressure to low, only from low to high. -#define ATMOS_PUMP_EFFICIENCY 2.5 -#define ATMOS_FILTER_EFFICIENCY 2.5 - -// Will not bother pumping or filtering if the gas source as fewer than this amount of moles, to help with performance. -#define MINIMUM_MOLES_TO_PUMP 0.01 -#define MINIMUM_MOLES_TO_FILTER 0.04 - -// The flow rate/effectiveness of various atmos devices is limited by their internal volume, -// so for many atmos devices these will control maximum flow rates in L/s. -#define ATMOS_DEFAULT_VOLUME_PUMP 200 // Liters. -#define ATMOS_DEFAULT_VOLUME_FILTER 500 // L. -#define ATMOS_DEFAULT_VOLUME_MIXER 500 // L. -#define ATMOS_DEFAULT_VOLUME_PIPE 70 // L. - -#define TELECOMMS_RECEPTION_NONE 0 -#define TELECOMMS_RECEPTION_SENDER 1 -#define TELECOMMS_RECEPTION_RECEIVER 2 -#define TELECOMMS_RECEPTION_BOTH 3 - -// These are used by supermatter and supermatter monitor program, mostly for UI updating purposes. Higher should always be worse! -#define SUPERMATTER_ERROR -1 // Unknown status, shouldn't happen but just in case. -#define SUPERMATTER_INACTIVE 0 // No or minimal energy -#define SUPERMATTER_NORMAL 1 // Normal operation -#define SUPERMATTER_WARNING 2 // Ambient temp > CRITICAL_TEMPERATURE OR integrity damaged -#define SUPERMATTER_DANGER 3 // Integrity < 50% -#define SUPERMATTER_EMERGENCY 4 // Integrity < 25% -#define SUPERMATTER_DELAMINATING 5 // Pretty obvious. - -#define SUPERMATTER_DATA_EER "Relative EER" -#define SUPERMATTER_DATA_TEMPERATURE "Temperature" -#define SUPERMATTER_DATA_PRESSURE "Pressure" -#define SUPERMATTER_DATA_EPR "Chamber EPR" - -// Emitter states -#define EMITTER_LOOSE 0 // the goose is loose -#define EMITTER_WRENCHED 1 -#define EMITTER_WELDED 2 - -// Scrubber modes -#define SCRUBBER_SIPHON "siphon" -#define SCRUBBER_SCRUB "scrub" -#define SCRUBBER_EXCHANGE "exchange" - -//Docking program -#define STATE_UNDOCKED 0 -#define STATE_DOCKING 1 -#define STATE_UNDOCKING 2 -#define STATE_DOCKED 3 - -#define MODE_NONE 0 -#define MODE_SERVER 1 -#define MODE_CLIENT 2 //The one who initiated the docking, and who can initiate the undocking. The server cannot initiate undocking, and is the one responsible for deciding to accept a docking request and signals when docking and undocking is complete. (Think server == station, client == shuttle) - -#define MESSAGE_RESEND_TIME 5 //how long (in seconds) do we wait before resending a message - -// obj/item/stock_parts status flags -#define PART_STAT_INSTALLED FLAG(0) -#define PART_STAT_PROCESSING FLAG(1) -#define PART_STAT_ACTIVE FLAG(2) -#define PART_STAT_CONNECTED FLAG(3) - -// part_flags -#define PART_FLAG_LAZY_INIT FLAG(0) // Will defer init on stock parts until machine is destroyed or parts are otherwise queried. -#define PART_FLAG_QDEL FLAG(1) // Will delete on uninstall -#define PART_FLAG_HAND_REMOVE FLAG(2) // Can be removed by hand - -// Machinery process flags, for use with START_PROCESSING_MACHINE -#define MACHINERY_PROCESS_SELF FLAG(0) -#define MACHINERY_PROCESS_COMPONENTS FLAG(1) -#define MACHINERY_PROCESS_ALL (MACHINERY_PROCESS_SELF | MACHINERY_PROCESS_COMPONENTS) - -// Machine construction state return values, for use with cannot_transition_to -#define MCS_CHANGE 0 // Success -#define MCS_CONTINUE 1 // Failed to change, silently -#define MCS_BLOCK 2 // Failed to change, but action was performed - -#define FABRICATOR_EXTRA_COST_FACTOR 1.25 -#define FAB_HACKED FLAG(0) -#define FAB_DISABLED FLAG(1) -#define FAB_SHOCKED FLAG(2) -#define FAB_BUSY FLAG(3) - -#define PART_CPU /obj/item/stock_parts/computer/processor_unit // CPU. Without it the computer won't run. Better CPUs can run more programs at once. -#define PART_NETWORK /obj/item/stock_parts/computer/network_card // Network Card component of this computer. Allows connection to NTNet -#define PART_HDD /obj/item/stock_parts/computer/hard_drive // Hard Drive component of this computer. Stores programs and files. - -// Optional hardware (improves functionality, but is not critical for computer to work in most cases) -#define PART_BATTERY /obj/item/stock_parts/computer/battery_module // An internal power source for this computer. Can be recharged. -#define PART_CARD /obj/item/stock_parts/computer/card_slot // ID Card slot component of this computer. Mostly for HoP modification console that needs ID slot for modification. -#define PART_PRINTER /obj/item/stock_parts/computer/nano_printer // Nano Printer component of this computer, for your everyday paperwork needs. -#define PART_DRIVE /obj/item/stock_parts/computer/hard_drive/portable // Portable data storage -#define PART_AI /obj/item/stock_parts/computer/ai_slot // AI slot, an intellicard housing that allows modifications of AIs. -#define PART_TESLA /obj/item/stock_parts/computer/tesla_link // Tesla Link, Allows remote charging from nearest APC. -#define PART_SCANNER /obj/item/stock_parts/computer/scanner // One of several optional scanner attachments. - -#define CLICKSOUND_INTERVAL (5 SECONDS) diff --git a/code/__defines/mapping.dm b/code/__defines/mapping.dm deleted file mode 100644 index d75cc6c95453e..0000000000000 --- a/code/__defines/mapping.dm +++ /dev/null @@ -1,29 +0,0 @@ -// Maploader bounds indices -#define MAP_MINX 1 -#define MAP_MINY 2 -#define MAP_MINZ 3 -#define MAP_MAXX 4 -#define MAP_MAXY 5 -#define MAP_MAXZ 6 - -// This utilizes an explicitly given type X instead of using src's type -// in order for subtypes of src's type to detect each other -#define DELETE_IF_DUPLICATE_OF(X) \ - var/other_init = FALSE; \ - for(var/existing in get_turf(src)) { \ - if(existing == src) { \ - continue; \ - } \ - if(!istype(existing, X)) { \ - continue; \ - } \ - var/atom/A = existing; \ - if(A.atom_flags & ATOM_FLAG_INITIALIZED) {\ - other_init = TRUE; \ - break; \ - } \ - } \ - if(other_init) { \ - crash_with("Deleting duplicate of [log_info_line(src)]"); \ - return INITIALIZE_HINT_QDEL; \ - } diff --git a/code/__defines/materials.dm b/code/__defines/materials.dm deleted file mode 100644 index e8fa99bd1a168..0000000000000 --- a/code/__defines/materials.dm +++ /dev/null @@ -1,137 +0,0 @@ -#define MATERIAL_PLASTIC "plastic" -#define MATERIAL_PLASTEEL "plasteel" -#define MATERIAL_STEEL "steel" -#define MATERIAL_GLASS "glass" -#define MATERIAL_GOLD "gold" -#define MATERIAL_SILVER "silver" -#define MATERIAL_DIAMOND "diamond" -#define MATERIAL_PHORON "phoron" -#define MATERIAL_URANIUM "uranium" -#define MATERIAL_CRYSTAL "crystal" -#define MATERIAL_SANDSTONE "sandstone" -#define MATERIAL_CONCRETE "concrete" -#define MATERIAL_IRON "iron" -#define MATERIAL_PLATINUM "platinum" -#define MATERIAL_BRONZE "bronze" -#define MATERIAL_PHORON_GLASS "phglass" -#define MATERIAL_REINFORCED_PHORON_GLASS "rphglass" -#define MATERIAL_MARBLE "marble" -#define MATERIAL_CULT "cult" -#define MATERIAL_REINFORCED_CULT "cult2" -#define MATERIAL_VOX "voxalloy" -#define MATERIAL_TITANIUM "titanium" -#define MATERIAL_RUTILE "rutile" -#define MATERIAL_OSMIUM_CARBIDE_PLASTEEL "osmium-carbide plasteel" -#define MATERIAL_OSMIUM "osmium" -#define MATERIAL_HYDROGEN "hydrogen" -#define MATERIAL_WASTE "waste" -#define MATERIAL_ELEVATORIUM "elevatorium" -#define MATERIAL_ALIENALLOY "aliumium" -#define MATERIAL_SAND "sand" -#define MATERIAL_GRAPHITE "graphite" -#define MATERIAL_DEUTERIUM "deuterium" -#define MATERIAL_TRITIUM "tritium" -#define MATERIAL_SUPERMATTER "supermatter" -#define MATERIAL_PITCHBLENDE "pitchblende" -#define MATERIAL_HEMATITE "hematite" -#define MATERIAL_QUARTZ "quartz" -#define MATERIAL_PYRITE "pyrite" -#define MATERIAL_SPODUMENE "spodumene" -#define MATERIAL_CINNABAR "cinnabar" -#define MATERIAL_PHOSPHORITE "phosphorite" -#define MATERIAL_ROCK_SALT "rock salt" -#define MATERIAL_POTASH "potash" -#define MATERIAL_BAUXITE "bauxite" -#define MATERIAL_COPPER "copper" -#define MATERIAL_CARDBOARD "cardboard" -#define MATERIAL_CLOTH "cloth" -#define MATERIAL_CARPET "carpet" -#define MATERIAL_ALUMINIUM "aluminium" -#define MATERIAL_NULLGLASS "nullglass" -#define MATERIAL_GROWTH "growth" - -//woods -#define MATERIAL_WOOD "wood" -#define MATERIAL_MAHOGANY "mahogany" -#define MATERIAL_MAPLE "maple" -#define MATERIAL_EBONY "ebony" -#define MATERIAL_WALNUT "walnut" -#define MATERIAL_BAMBOO "bamboo" -#define MATERIAL_YEW "yew" -#define MATERIAL_VOXRES "vox bioresin" - -// skins and bones -#define MATERIAL_SKIN_GENERIC "skin" -#define MATERIAL_SKIN_LIZARD "lizardskin" -#define MATERIAL_SKIN_CHITIN "chitin" -#define MATERIAL_SKIN_FUR "brown fur" -#define MATERIAL_SKIN_FUR_GRAY "gray fur" -#define MATERIAL_SKIN_FUR_WHITE "white fur" -#define MATERIAL_SKIN_GOATHIDE "goathide" -#define MATERIAL_SKIN_COWHIDE "cowhide" -#define MATERIAL_SKIN_SHARK "sharkskin" -#define MATERIAL_SKIN_FISH "fishskin" -#define MATERIAL_SKIN_FUR_ORANGE "orange fur" -#define MATERIAL_SKIN_FUR_BLACK "black fur" -#define MATERIAL_SKIN_FUR_HEAVY "heavy fur" -#define MATERIAL_SKIN_FISH_PURPLE "purple fishskin" -#define MATERIAL_SKIN_FEATHERS "white feathers" -#define MATERIAL_SKIN_FEATHERS_PURPLE "purple feathers" -#define MATERIAL_SKIN_FEATHERS_BLUE "blue feathers" -#define MATERIAL_SKIN_FEATHERS_GREEN "green feathers" -#define MATERIAL_SKIN_FEATHERS_BROWN "brown feathers" -#define MATERIAL_SKIN_FEATHERS_RED "red feathers" -#define MATERIAL_SKIN_FEATHERS_BLACK "black feathers" - -#define MATERIAL_BONE_GENERIC "bone" -#define MATERIAL_BONE_CARTILAGE "cartilage" -#define MATERIAL_BONE_FISH "fishbone" - -#define MATERIAL_LEATHER_GENERIC "leather" -#define MATERIAL_LEATHER_LIZARD "scaled hide" -#define MATERIAL_LEATHER_FUR "furred hide" -#define MATERIAL_LEATHER_CHITIN "treated chitin" - -// defaults -#define DEFAULT_WALL_MATERIAL MATERIAL_STEEL -#define DEFAULT_FURNITURE_MATERIAL MATERIAL_ALUMINIUM - -#define MATERIAL_ALTERATION_NONE EMPTY_BITFIELD -#define MATERIAL_ALTERATION_NAME FLAG(0) -#define MATERIAL_ALTERATION_DESC FLAG(1) -#define MATERIAL_ALTERATION_COLOR FLAG(2) -#define MATERIAL_ALTERATION_ALL (~MATERIAL_ALTERATION_NONE) - -#define SHARD_SHARD "shard" -#define SHARD_SHRAPNEL "shrapnel" -#define SHARD_STONE_PIECE "piece" -#define SHARD_SPLINTER "splinters" -#define SHARD_NONE "" - -#define MATERIAL_UNMELTABLE FLAG(0) -#define MATERIAL_BRITTLE FLAG(1) -#define MATERIAL_PADDING FLAG(2) - -#define TABLE_BRITTLE_MATERIAL_MULTIPLIER 4 // Amount table damage is multiplied by if it is made of a brittle material (e.g. glass) - -//Weight thresholds -#define MATERIAL_HEAVY 24 -#define MATERIAL_LIGHT 18 - -//Construction difficulty -#define MATERIAL_EASY_DIY 0 -#define MATERIAL_NORMAL_DIY 1 -#define MATERIAL_HARD_DIY 2 -#define MATERIAL_VERY_HARD_DIY 3 - -//Stack flags -#define USE_MATERIAL_COLOR FLAG(0) -#define USE_MATERIAL_SINGULAR_NAME FLAG(1) -#define USE_MATERIAL_PLURAL_NAME FLAG(2) - -//Arbitrary hardness thresholds -#define MATERIAL_SOFT 10 -#define MATERIAL_FLEXIBLE 20 -#define MATERIAL_RIGID 40 -#define MATERIAL_HARD 60 -#define MATERIAL_VERY_HARD 80 \ No newline at end of file diff --git a/code/__defines/math_physics.dm b/code/__defines/math_physics.dm deleted file mode 100644 index c62a777b8239f..0000000000000 --- a/code/__defines/math_physics.dm +++ /dev/null @@ -1,43 +0,0 @@ -// Math constants. -#define M_PI 3.14159265 - -#define R_IDEAL_GAS_EQUATION 8.31 // kPa*L/(K*mol). -#define ONE_ATMOSPHERE 101.325 // kPa. -#define IDEAL_GAS_ENTROPY_CONSTANT 1164 // (mol^3 * s^3) / (kg^3 * L). - -// Radiation constants. -#define STEFAN_BOLTZMANN_CONSTANT 5.6704e-8 // W/(m^2*K^4). -#define COSMIC_RADIATION_TEMPERATURE 3.15 // K. -#define AVERAGE_SOLAR_RADIATION 200 // W/m^2. Kind of arbitrary. Really this should depend on the sun position much like solars. -#define RADIATOR_OPTIMUM_PRESSURE 3771 // kPa at 20 C. This should be higher as gases aren't great conductors until they are dense. Used the critical pressure for air. -#define GAS_CRITICAL_TEMPERATURE 132.65 // K. The critical point temperature for air. - -#define RADIATOR_EXPOSED_SURFACE_AREA_RATIO 0.04 // (3 cm + 100 cm * sin(3deg))/(2*(3+100 cm)). Unitless ratio. -#define HUMAN_EXPOSED_SURFACE_AREA 5.2 //m^2, surface area of 1.7m (H) x 0.46m (D) cylinder - -#define T0C 273.15 // 0.0 degrees celsius -#define T20C 293.15 // 20.0 degrees celsius -#define T100C 373.15 // 100.0 degrees celsius -#define TCMB 2.7 // -270.3 degrees celsius - -#define CELSIUS + T0C - -#define ATMOS_PRECISION 0.0001 -#define QUANTIZE(variable) (round(variable, ATMOS_PRECISION)) - -#define INFINITY 1.#INF - -#define SHORT_REAL_LIMIT 16777216 // 1 left-shift 24 - -#define TICKS_IN_DAY 24*60*60*10 -#define TICKS_IN_SECOND 10 - -#define SIMPLE_SIGN(X) ((X) < 0 ? -1 : 1) -#define SIGN(X) ((X) ? SIMPLE_SIGN(X) : 0) - -// Determines the exchange ratio of reagents being converted to gas and vice versa. -#define REAGENT_GAS_EXCHANGE_FACTOR 10 - -//where a unit turf is 1 on a side, its diagonal is sqrt(2) -#define UNIT_DIAGONAL 1.41421356237 -#define HALF_UNIT_DIAGONAL 0.70710678118 diff --git a/code/__defines/misc.dm b/code/__defines/misc.dm deleted file mode 100644 index e4efcb48f85df..0000000000000 --- a/code/__defines/misc.dm +++ /dev/null @@ -1,310 +0,0 @@ -#define DEBUG -// Turf-only flags. -#define TURF_FLAG_NOJAUNT FLAG(0) // This is used in literally one place, turf.dm, to block ethereal jaunt. -#define TURF_FLAG_NORUINS FLAG(1) - -#define TRANSITIONEDGE 7 // Distance from edge to move to another z-level. -#define RUIN_MAP_EDGE_PAD 15 -#define LANDING_ZONE_RADIUS 15 // Used for autoplacing landmarks on exoplanets - -// Invisibility constants. -#define INVISIBILITY_LIGHTING 20 -#define INVISIBILITY_LEVEL_ONE 35 -#define INVISIBILITY_LEVEL_TWO 45 -#define INVISIBILITY_OBSERVER 60 -#define INVISIBILITY_EYE 61 -#define INVISIBILITY_SYSTEM 99 -#define INVISIBILITY_ABSTRACT 101 // special: this can never be seen, regardless of see_invisible - -#define SEE_INVISIBLE_LIVING 25 -#define SEE_INVISIBLE_NOLIGHTING 15 -#define SEE_INVISIBLE_LEVEL_ONE INVISIBILITY_LEVEL_ONE -#define SEE_INVISIBLE_LEVEL_TWO INVISIBILITY_LEVEL_TWO -#define SEE_INVISIBLE_CULT INVISIBILITY_OBSERVER -#define SEE_INVISIBLE_OBSERVER INVISIBILITY_EYE -#define SEE_INVISIBLE_SYSTEM INVISIBILITY_SYSTEM - -#define SEE_IN_DARK_DEFAULT 2 - -#define SEE_INVISIBLE_MINIMUM 5 -#define INVISIBILITY_MAXIMUM 100 - -// Some arbitrary defines to be used by self-pruning global lists. (see master_controller) -#define PROCESS_KILL 26 // Used to trigger removal from a processing list. - -// For secHUDs and medHUDs and variants. The number is the location of the image on the list hud_list of humans. -#define HEALTH_HUD 1 // A simple line rounding the mob's number health. -#define STATUS_HUD 2 // Alive, dead, diseased, etc. -#define ID_HUD 3 // The job asigned to your ID. -#define WANTED_HUD 4 // Wanted, released, paroled, security status. -#define IMPLOYAL_HUD 5 // Loyality implant. -#define IMPCHEM_HUD 6 // Chemical implant. -#define IMPTRACK_HUD 7 // Tracking implant. -#define SPECIALROLE_HUD 8 // AntagHUD image. -#define STATUS_HUD_OOC 9 // STATUS_HUD without virus DB check for someone being ill. -#define LIFE_HUD 10 // STATUS_HUD that only reports dead or alive - -// Shuttle moving status. -#define SHUTTLE_IDLE 0 -#define SHUTTLE_WARMUP 1 -#define SHUTTLE_INTRANSIT 2 - -// Autodock shuttle processing status. -#define IDLE_STATE 0 -#define WAIT_LAUNCH 1 -#define FORCE_LAUNCH 2 -#define WAIT_ARRIVE 3 -#define WAIT_FINISH 4 - -// Setting this much higher than 1024 could allow spammers to DOS the server easily. -#define MAX_MESSAGE_LEN 1024 -#define MAX_PAPER_MESSAGE_LEN 6144 -#define MAX_BOOK_MESSAGE_LEN 18432 -#define MAX_LNAME_LEN 64 -#define MAX_NAME_LEN 26 -#define MAX_DESC_LEN 256 -#define MAX_TEXTFILE_LENGTH 128000 // 512GQ file - -// Event defines. -#define EVENT_LEVEL_MUNDANE 1 -#define EVENT_LEVEL_MODERATE 2 -#define EVENT_LEVEL_MAJOR 3 -#define EVENT_LEVEL_EXO 4 - -//General-purpose life speed define for plants. -#define HYDRO_SPEED_MULTIPLIER 1 - -#define DEFAULT_JOB_TYPE /datum/job/assistant - -//Area flags, possibly more to come -#define AREA_FLAG_RAD_SHIELDED FLAG(0) // shielded from radiation, clearly -#define AREA_FLAG_EXTERNAL FLAG(1) // External as in exposed to space, not outside in a nice, green, forest -#define AREA_FLAG_ION_SHIELDED FLAG(2) // shielded from ionospheric anomalies as an FBP / IPC -#define AREA_FLAG_IS_NOT_PERSISTENT FLAG(3) // SSpersistence will not track values from this area. -#define AREA_FLAG_NO_MODIFY FLAG(4) // turf in this area cannot be dismantled. -#define AREA_FLAG_HIDE_FROM_HOLOMAP FLAG(5) // if we shouldn't be drawn on station holomaps - -//Map template flags -#define TEMPLATE_FLAG_ALLOW_DUPLICATES FLAG(0) // Lets multiple copies of the template to be spawned -#define TEMPLATE_FLAG_SPAWN_GUARANTEED FLAG(1) // Makes it ignore away site budget and just spawn (only for away sites) -#define TEMPLATE_FLAG_CLEAR_CONTENTS FLAG(2) // if it should destroy objects it spawns on top of -#define TEMPLATE_FLAG_NO_RUINS FLAG(3) // if it should forbid ruins from spawning on top of it -#define TEMPLATE_FLAG_NO_RADS FLAG(4) // Removes all radiation from the template after spawning. - -//Ruin map template flags -#define TEMPLATE_FLAG_RUIN_STARTS_DISALLOWED FLAG(5) // Ruin is not available during spawning unless another ruin permits it. - -// Convoluted setup so defines can be supplied by Bay12 main server compile script. -// Should still work fine for people jamming the icons into their repo. -#ifndef CUSTOM_ITEM_CONFIG -#define CUSTOM_ITEM_CONFIG "customs/config/" -#endif -#ifndef CUSTOM_ITEM_SYNTH_CONFIG -#define CUSTOM_ITEM_SYNTH_CONFIG "config/custom_sprites.txt" -#endif -#ifndef CUSTOM_ITEM_OBJ -#define CUSTOM_ITEM_OBJ 'customs/icons/obj/custom_items_obj.dmi' -#endif -#ifndef CUSTOM_ITEM_MOB -#define CUSTOM_ITEM_MOB 'customs/icons/mob/custom_items_mob.dmi' -#endif -#ifndef CUSTOM_ITEM_SYNTH -#define CUSTOM_ITEM_SYNTH 'customs/icons/mob/custom_synthetic.dmi' -#endif - -#define WALL_CAN_OPEN 1 -#define WALL_OPENING 2 - -#define BOMBCAP_DVSTN_RADIUS (config.max_explosion_range / 4) -#define BOMBCAP_HEAVY_RADIUS (config.max_explosion_range / 2) -#define BOMBCAP_LIGHT_RADIUS (config.max_explosion_range) -#define BOMBCAP_FLASH_RADIUS (config.max_explosion_range * 1.5) - // NTNet module-configuration values. Do not change these. If you need to add another use larger number (5..6..7 etc) -#define NTNET_SOFTWAREDOWNLOAD 1 // Downloads of software from NTNet -#define NTNET_PEERTOPEER 2 // P2P transfers of files between devices -#define NTNET_COMMUNICATION 3 // Communication (messaging) -#define NTNET_SYSTEMCONTROL 4 // Control of various systems, RCon, air alarm control, etc. - -// NTNet transfer speeds, used when downloading/uploading a file/program. -#define NTNETSPEED_LOWSIGNAL 0.5 // GQ/s transfer speed when the device is wirelessly connected and on Low signal -#define NTNETSPEED_HIGHSIGNAL 1 // GQ/s transfer speed when the device is wirelessly connected and on High signal -#define NTNETSPEED_ETHERNET 2 // GQ/s transfer speed when the device is using wired connection -#define NTNETSPEED_DOS_AMPLIFICATION 5 // Multiplier for Denial of Service program. Resulting load on NTNet relay is this multiplied by NTNETSPEED of the device - -// Program bitflags -#define PROGRAM_CONSOLE FLAG(0) -#define PROGRAM_LAPTOP FLAG(1) -#define PROGRAM_TABLET FLAG(2) -#define PROGRAM_TELESCREEN FLAG(3) -#define PROGRAM_PDA FLAG(4) -#define PROGRAM_ALL ( PROGRAM_CONSOLE | PROGRAM_LAPTOP | PROGRAM_TABLET | PROGRAM_TELESCREEN | PROGRAM_PDA ) - -#define PROGRAM_STATE_KILLED 0 -#define PROGRAM_STATE_BACKGROUND 1 -#define PROGRAM_STATE_ACTIVE 2 - -#define PROG_MISC "Miscellaneous" -#define PROG_ENG "Engineering" -#define PROG_OFFICE "Office Work" -#define PROG_COMMAND "Command" -#define PROG_SUPPLY "Supply and Shuttles" -#define PROG_ADMIN "NTNet Administration" -#define PROG_UTIL "Utility" -#define PROG_SEC "Security" -#define PROG_MONITOR "Monitoring" - -// Caps for NTNet logging. Less than 10 would make logging useless anyway, more than 500 may make the log browser too laggy. Defaults to 100 unless user changes it. -#define MAX_NTNET_LOGS 500 -#define MIN_NTNET_LOGS 10 - -// Special return values from bullet_act(). Positive return values are already used to indicate the blocked level of the projectile. -#define PROJECTILE_CONTINUE -1 //if the projectile should continue flying after calling bullet_act() -#define PROJECTILE_FORCE_MISS -2 //if the projectile should treat the attack as a miss (suppresses attack and admin logs) - only applies to mobs. - -//Camera capture modes -#define CAPTURE_MODE_REGULAR 0 //Regular polaroid camera mode -#define CAPTURE_MODE_ALL 1 //Admin camera mode -#define CAPTURE_MODE_PARTIAL 3 //Simular to regular mode, but does not do dummy check - -//objectives -#define CONFIG_OBJECTIVE_NONE 2 -#define CONFIG_OBJECTIVE_VERB 1 -#define CONFIG_OBJECTIVE_ALL 0 - -// How many times an AI tries to connect to APC before switching to low power mode. -#define AI_POWER_RESTORE_MAX_ATTEMPTS 3 - -// AI power restoration routine steps. -#define AI_RESTOREPOWER_FAILED -1 -#define AI_RESTOREPOWER_IDLE 0 -#define AI_RESTOREPOWER_STARTING 1 -#define AI_RESTOREPOWER_DIAGNOSTICS 2 -#define AI_RESTOREPOWER_CONNECTING 3 -#define AI_RESTOREPOWER_CONNECTED 4 -#define AI_RESTOREPOWER_COMPLETED 5 - - -// Values represented as Oxyloss. Can be tweaked, but make sure to use integers only. -#define AI_POWERUSAGE_LOWPOWER 1 -#define AI_POWERUSAGE_RESTORATION 2 -#define AI_POWERUSAGE_NORMAL 5 -#define AI_POWERUSAGE_RECHARGING 7 - -// Above values get multiplied by this when converting AI oxyloss -> watts. -// For now, one oxyloss point equals 10kJ of energy, so normal AI uses 5 oxyloss per tick (50kW or 70kW if charging) -#define AI_POWERUSAGE_OXYLOSS_TO_WATTS_MULTIPLIER 10000 - -//Grid for Item Placement -#define CELLS 16 //Amount of cells per row/column in grid -#define CELLSIZE (world.icon_size/CELLS) //Size of a cell in pixels - -#define PIXEL_MULTIPLIER WORLD_ICON_SIZE/32 - -#define DEFAULT_SPAWNPOINT_ID "Default" - -//Virus badness defines -#define VIRUS_MILD 1 -#define VIRUS_COMMON 2 //Random events don't go higher (mutations aside) -#define VIRUS_ENGINEERED 3 -#define VIRUS_EXOTIC 4 //Usually adminbus only - -//Error handler defines -#define ERROR_USEFUL_LEN 2 - -#define RAD_LEVEL_LOW 1 // Around the level at which radiation starts to become harmful -#define RAD_LEVEL_MODERATE 25 -#define RAD_LEVEL_HIGH 40 -#define RAD_LEVEL_VERY_HIGH 100 - -#define RADIATION_THRESHOLD_CUTOFF 0.1 // Radiation will not affect a tile when below this value. - -#define LEGACY_RECORD_STRUCTURE(X, Y) GLOBAL_LIST_EMPTY(##X);/datum/computer_file/data/##Y/var/list/fields[0];/datum/computer_file/data/##Y/New(){..();GLOB.##X.Add(src);}/datum/computer_file/data/##Y/Destroy(){. = ..();GLOB.##X.Remove(src);} - -#define SUPPLY_SECURITY_ELEVATED 1 -#define SUPPLY_SECURITY_HIGH 2 - -// secure gun authorization settings -#define UNAUTHORIZED 0 -#define AUTHORIZED 1 -#define ALWAYS_AUTHORIZED 2 - -// wrinkle states for clothes -#define WRINKLES_DEFAULT 0 -#define WRINKLES_WRINKLY 1 -#define WRINKLES_NONE 2 - -//detergent states for clothes -#define SMELL_DEFAULT 0 -#define SMELL_CLEAN 1 -#define SMELL_STINKY 2 - -//Shuttle mission stages -#define SHUTTLE_MISSION_PLANNED 1 -#define SHUTTLE_MISSION_STARTED 2 -#define SHUTTLE_MISSION_FINISHED 3 -#define SHUTTLE_MISSION_QUEUED 4 - -//Built-in email accounts -#define EMAIL_DOCUMENTS "document.server@internal-services.net" -#define EMAIL_SYSADMIN "admin@internal-services.net" -#define EMAIL_BROADCAST "broadcast@internal-services.net" - -//Stats for department goals etc -#define STAT_XENOPLANTS_SCANNED "xenoplants_scanned" -#define STAT_XENOFAUNA_SCANNED "xenofauna_scanned" -#define STAT_FLAGS_PLANTED "planet_flags" - -//Number of slots a modular computer has which can be tweaked via gear tweaks. -#define TWEAKABLE_COMPUTER_PART_SLOTS 7 - -//Lying animation -#define ANIM_LYING_TIME 2 - -//Planet habitability class -#define HABITABILITY_IDEAL 1 -#define HABITABILITY_OKAY 2 -#define HABITABILITY_BAD 3 - -#ifndef WINDOWS_HTTP_POST_DLL_LOCATION -#define WINDOWS_HTTP_POST_DLL_LOCATION "lib/byhttp.dll" -#endif - -#ifndef UNIX_HTTP_POST_DLL_LOCATION -#define UNIX_HTTP_POST_DLL_LOCATION "lib/libbyhttp.so" -#endif - -#ifndef HTTP_POST_DLL_LOCATION -#define HTTP_POST_DLL_LOCATION (world.system_type == MS_WINDOWS ? WINDOWS_HTTP_POST_DLL_LOCATION : UNIX_HTTP_POST_DLL_LOCATION) -#endif - -//Misc text define. Does 4 spaces. Used as a makeshift tabulator. -#define FOURSPACES "    " - -#define INCREMENT_WORLD_Z_SIZE world.maxz++; if (SSzcopy.zlev_maximums.len) { SSzcopy.calculate_zstack_limits() } - -//-- Masks for /atom/var/init_flags -- -//- machinery -#define INIT_MACHINERY_PROCESS_SELF FLAG(0) -#define INIT_MACHINERY_PROCESS_COMPONENTS FLAG(1) -#define INIT_MACHINERY_PROCESS_ALL ( INIT_MACHINERY_PROCESS_SELF | INIT_MACHINERY_PROCESS_COMPONENTS ) -//-- - -#define ANNOUNCE_NAME "[station_name()] Automated Announcement System" - -#define GET_ANNOUNCEMENT_FREQ(X) GLOB.using_map.use_job_frequency_announcement ? get_announcement_frequency(X) : "Common" - -// Options for /obj/item/device/soulstone/var/owner_flag -#define SOULSTONE_OWNER_CULT "cult" /// The soulstone is owned by the cult faction. -#define SOULSTONE_OWNER_WIZARD "wizard" /// The soulstone is owned by a wizard. -#define SOULSTONE_OWNER_PURE "pure" /// The soulstone has been purified. - - -// Severities for emp_act() -#define EMP_ACT_HEAVY 1 -#define EMP_ACT_LIGHT 2 - - -// Severities for ex_act() -#define EX_ACT_DEVASTATING 1 // Within devastation range - Destructive/deadly, unlikely to survive. -#define EX_ACT_HEAVY 2 // Within heavy range - Heavy damage, very dangerous -#define EX_ACT_LIGHT 3 // Within light range - Minor damage. diff --git a/code/__defines/mobs.dm b/code/__defines/mobs.dm deleted file mode 100644 index 34c594c5afbe7..0000000000000 --- a/code/__defines/mobs.dm +++ /dev/null @@ -1,488 +0,0 @@ -// /mob/var/stat things. -#define CONSCIOUS 0 -#define UNCONSCIOUS 1 -#define DEAD 2 - -// Bitflags defining which status effects could be or are inflicted on a mob. -#define CANSTUN FLAG(0) -#define CANWEAKEN FLAG(1) -#define CANPARALYSE FLAG(2) -#define CANPUSH FLAG(3) -#define PASSEMOTES FLAG(4) // Mob has a cortical borer or holders inside of it that need to see emotes. -#define LEAPING FLAG(5) -#define GODMODE FLAG(6) -#define FAKEDEATH FLAG(7) // Replaces stuff like changeling.changeling_fakedeath. -#define NO_ANTAG FLAG(8) // Players are restricted from gaining antag roles when occupying this mob -#define NOTARGET FLAG(9) // Player is invisible to all simple mobs - -// Grab Types -#define GRAB_NORMAL "normal" -#define GRAB_NAB "nab" -#define GRAB_NAB_SPECIAL "special nab" - -// Grab levels. -#define NORM_PASSIVE "normal passive" -#define NORM_STRUGGLE "normal struggle" -#define NORM_AGGRESSIVE "normal aggressive" -#define NORM_NECK "normal neck" -#define NORM_KILL "normal kill" - -#define NAB_PASSIVE "nab passive" -#define NAB_AGGRESSIVE "nab aggressive" -#define NAB_KILL "nab kill" - -#define BORGMESON FLAG(0) -#define BORGTHERM FLAG(1) -#define BORGXRAY FLAG(2) -#define BORGMATERIAL FLAG(3) - - -#define STANCE_SLEEP 0 // Doing (almost) nothing, to save on CPU because nobody is around to notice or the mob died. -#define STANCE_IDLE 1 // The more or less default state. Wanders around, looks for baddies, and spouts one-liners. -#define STANCE_ALERT 2 // A baddie is visible but not too close, and essentially we tell them to go away or die. -#define STANCE_APPROACH 3 // Attempting to get into range to attack them. -#define STANCE_FIGHT 4 // Actually fighting, with melee or ranged. -#define STANCE_BLINDFIGHT 5 // Fighting something that cannot be seen by the mob, from invisibility or out of sight. -#define STANCE_REPOSITION 6 // Relocating to a better position while in combat. Also used when moving away from a danger like grenades. -#define STANCE_MOVE 7 // Similar to above but for out of combat. If a baddie is seen, they'll cancel and fight them. -#define STANCE_FOLLOW 8 // Following somone, without trying to murder them. -#define STANCE_FLEE 9 // Run away from the target because they're too spooky/we're dying/some other reason. -#define STANCE_DISABLED 10 // Used when the holder is afflicted with certain status effects, such as stuns or confusion. - -#define STANCE_ATTACK 11 // Backwards compatability -#define STANCE_ATTACKING 12 // Ditto - -#define STANCES_COMBAT list(STANCE_ALERT, STANCE_APPROACH, STANCE_FIGHT, STANCE_BLINDFIGHT, STANCE_REPOSITION) - -#define LEFT FLAG(0) -#define RIGHT FLAG(1) -#define UNDER FLAG(2) - -// Pulse levels, very simplified. -#define PULSE_NONE 0 // So !M.pulse checks would be possible. -#define PULSE_SLOW 1 // <60 bpm -#define PULSE_NORM 2 // 60-90 bpm -#define PULSE_FAST 3 // 90-120 bpm -#define PULSE_2FAST 4 // >120 bpm -#define PULSE_THREADY 5 // Occurs during hypovolemic shock -#define GETPULSE_HAND 0 // Less accurate. (hand) -#define GETPULSE_TOOL 1 // More accurate. (med scanner, sleeper, etc.) -#define PULSE_MAX_BPM 250 // Highest, readable BPM by machines and humans. - -//intent flags -#define I_HELP "help" -#define I_DISARM "disarm" -#define I_GRAB "grab" -#define I_HURT "harm" - -//These are used Bump() code for living mobs, in the mob_bump_flag, mob_swap_flags, and mob_push_flags vars to determine whom can bump/swap with whom. -#define HUMAN FLAG(0) -#define MONKEY FLAG(1) -#define ALIEN FLAG(2) -#define ROBOT FLAG(3) -#define SLIME FLAG(4) -#define SIMPLE_ANIMAL FLAG(5) -#define HEAVY FLAG(6) -#define ALLMOBS (HUMAN|MONKEY|ALIEN|ROBOT|SLIME|SIMPLE_ANIMAL|HEAVY) - -// Robot AI notifications -#define ROBOT_NOTIFICATION_NEW_UNIT 1 -#define ROBOT_NOTIFICATION_NEW_NAME 2 -#define ROBOT_NOTIFICATION_NEW_MODULE 3 -#define ROBOT_NOTIFICATION_MODULE_RESET 4 - -// Appearance change flags -#define APPEARANCE_ALL (~EMPTY_BITFIELD) -#define APPEARANCE_DNA2 FLAG(0) -#define APPEARANCE_RACE FLAG(1) -#define APPEARANCE_GENDER FLAG(2) -#define APPEARANCE_SKIN FLAG(3) -#define APPEARANCE_HEAD FLAG(4) -#define APPEARANCE_HEAD_COLOR FLAG(5) -#define APPEARANCE_FACE FLAG(6) -#define APPEARANCE_FACE_COLOR FLAG(7) -#define APPEARANCE_ALL_HAIR (APPEARANCE_HEAD | APPEARANCE_HEAD_COLOR | APPEARANCE_FACE | APPEARANCE_FACE_COLOR) -#define APPEARANCE_EYES FLAG(8) -#define APPEARANCE_LANG FLAG(9) -#define APPEARANCE_LANG_ANY_NUMBER FLAG(10) -#define APPEARANCE_LANG_ANY_ORIGIN FLAG(11) - -#define APPEARANCE_COMMON (APPEARANCE_DNA2|APPEARANCE_RACE|APPEARANCE_GENDER|APPEARANCE_SKIN|APPEARANCE_ALL_HAIR|APPEARANCE_EYES|APPEARANCE_LANG) - - -// /sprite_accessory flags -#define DO_COLORATION_USER 1 //! Allow a user to set their own sprite_accessory color; tattoos, etc -#define DO_COLORATION_SKIN 2 //! Take a coloration cue from skin tone -#define DO_COLORATION_HAIR 4 //! Take a coloration cue from hair color -#define DO_COLORATION_AUTO 6 //! Use hair if available, otherwise skin - - -// Click cooldown -#define DEFAULT_ATTACK_COOLDOWN 8 //Default timeout for aggressive actions -#define DEFAULT_QUICK_COOLDOWN 4 - -#define FAST_WEAPON_COOLDOWN 3 -#define DEFAULT_WEAPON_COOLDOWN 5 -#define SLOW_WEAPON_COOLDOWN 7 - -#define MIN_SUPPLIED_LAW_NUMBER 15 -#define MAX_SUPPLIED_LAW_NUMBER 50 - -// NT's alignment towards the character -#define COMPANY_LOYAL "Loyal" -#define COMPANY_SUPPORTATIVE "Supportive" -#define COMPANY_NEUTRAL "Neutral" -#define COMPANY_SKEPTICAL "Skeptical" -#define COMPANY_OPPOSED "Opposed" - -#define COMPANY_ALIGNMENTS list(COMPANY_LOYAL,COMPANY_SUPPORTATIVE,COMPANY_NEUTRAL,COMPANY_SKEPTICAL,COMPANY_OPPOSED) - -// Defines mob sizes, used by lockers and to determine what is considered a small sized mob, etc. -#define MOB_LARGE 40 -#define MOB_MEDIUM 20 -#define MOB_SMALL 10 -#define MOB_TINY 5 -#define MOB_MINISCULE 1 - -// Defines how strong the species is compared to humans. Think like strength in D&D -#define STR_VHIGH 2 -#define STR_HIGH 1 -#define STR_MEDIUM 0 -#define STR_LOW -1 -#define STR_VLOW -2 - -// Gluttony levels. -#define GLUT_TINY FLAG(0) // Eat mobs tiny and smaller -#define GLUT_SMALLER FLAG(1) // Eat mobs smaller than we are -#define GLUT_ANYTHING FLAG(2) // Eat any mob -#define GLUT_ITEM_TINY FLAG(3) // Eat items with a w_class of small or smaller -#define GLUT_ITEM_NORMAL FLAG(4) // Eat items with a w_class of normal or smaller -#define GLUT_ITEM_ANYTHING FLAG(5) // Eat any item -#define GLUT_PROJECTILE_VOMIT FLAG(6) // When vomitting, does it fly out? - -// Devour speeds, returned by can_devour() -#define DEVOUR_SLOW 1 -#define DEVOUR_FAST 2 - -#define TINT_NONE 0 -#define TINT_MODERATE 1 -#define TINT_HEAVY 2 -#define TINT_BLIND 3 - -#define FLASH_PROTECTION_VULNERABLE -2 -#define FLASH_PROTECTION_REDUCED -1 -#define FLASH_PROTECTION_NONE 0 -#define FLASH_PROTECTION_MINOR 1 -#define FLASH_PROTECTION_MODERATE 2 -#define FLASH_PROTECTION_MAJOR 3 - -#define ANIMAL_SPAWN_DELAY round(config.respawn_delay / 6) -#define DRONE_SPAWN_DELAY round(config.respawn_delay / 3) -#define OBSERV_SPAWN_DELAY round(config.respawn_delay / 2) - -// Incapacitation flags, used by the mob/proc/incapacitated() proc -#define INCAPACITATION_NONE EMPTY_BITFIELD -#define INCAPACITATION_RESTRAINED FLAG(0) -#define INCAPACITATION_BUCKLED_PARTIALLY FLAG(1) -#define INCAPACITATION_BUCKLED_FULLY FLAG(2) -#define INCAPACITATION_STUNNED FLAG(3) -#define INCAPACITATION_FORCELYING FLAG(4) -#define INCAPACITATION_KNOCKOUT FLAG(5) -#define INCAPACITATION_WEAKENED FLAG(6) - -#define INCAPACITATION_UNRESISTING (INCAPACITATION_KNOCKOUT|INCAPACITATION_STUNNED) -#define INCAPACITATION_DISRUPTED (INCAPACITATION_UNRESISTING|INCAPACITATION_WEAKENED) -#define INCAPACITATION_KNOCKDOWN (INCAPACITATION_KNOCKOUT|INCAPACITATION_FORCELYING) -#define INCAPACITATION_DISABLED (INCAPACITATION_KNOCKDOWN|INCAPACITATION_STUNNED) -#define INCAPACITATION_DEFAULT (INCAPACITATION_RESTRAINED|INCAPACITATION_BUCKLED_FULLY|INCAPACITATION_DISABLED) -#define INCAPACITATION_ALL (~INCAPACITATION_NONE) - -// Organs. -#define BP_MOUTH "mouth" -#define BP_EYES "eyes" -#define BP_HEART "heart" -#define BP_LUNGS "lungs" -#define BP_TRACH "tracheae" -#define BP_BRAIN "brain" -#define BP_LIVER "liver" -#define BP_KIDNEYS "kidneys" -#define BP_STOMACH "stomach" -#define BP_PLASMA "plasma vessel" -#define BP_APPENDIX "appendix" -#define BP_CELL "cell" -#define BP_HIVE "hive node" -#define BP_NUTRIENT "nutrient vessel" -#define BP_ACID "acid gland" -#define BP_EGG "egg sac" -#define BP_RESIN "resin spinner" -#define BP_STRATA "neural strata" -#define BP_RESPONSE "response node" -#define BP_GBLADDER "gas bladder" -#define BP_POLYP "polyp segment" -#define BP_ANCHOR "anchoring ligament" -#define BP_PHORON "phoron filter" -#define BP_ACETONE "acetone reactor" - -// Vox bits. -#define BP_HINDTONGUE "hindtongue" - -// Robo Organs. -#define BP_POSIBRAIN "posibrain" -#define BP_VOICE "vocal synthesiser" -#define BP_STACK "stack" -#define BP_OPTICS "optics" -#define BP_FLOAT "floatation disc" -#define BP_JETS "maneuvering jets" -#define BP_COOLING_FINS "cooling fins" -#define BP_SYSTEM_CONTROLLER "system controller" - - -/** -* Augment Slots -* Flags used by /obj/item/organ/internal/augment/var/augment_slots -* Augment slots is used to control which body parts an augment may be installed into -*/ - -/// The augment can be installed in arms -#define AUGMENT_ARM FLAG(0) - -/// The augment can be installed in hands -#define AUGMENT_HAND FLAG(1) - -/// The augment can be installed in legs -#define AUGMENT_LEG FLAG(2) - -/// The augment can be installed in feet -#define AUGMENT_FOOT FLAG(3) - -/// The augment can be installed in the chest -#define AUGMENT_CHEST FLAG(4) - -/// The augment can be installed in the lower body -#define AUGMENT_GROIN FLAG(5) - -/// The augment can be installed in the head -#define AUGMENT_HEAD FLAG(6) - -/// The augment can be installed on the chest separately to AUGMENT_CHEST -#define AUGMENT_ARMOR FLAG(7) - -/// The augment can be installed in the head separately to AUGMENT_HEAD -#define AUGMENT_FLUFF FLAG(8) - - -/** -* Augment Flags -* Flags used by /obj/item/organ/internal/augment/var/augment_flags -* Augment flags provide mixed configuration information about their augment -*/ - -/// The augment can be installed in mechanical organs -#define AUGMENT_MECHANICAL FLAG(0) - -/// The augment can be installed in biological organs -#define AUGMENT_BIOLOGICAL FLAG(1) - -/// The augment can be installed in crystaline organs -#define AUGMENT_CRYSTALINE FLAG(2) - -/// The augment is visible on body scanner results -#define AUGMENT_SCANNABLE FLAG(3) - -/// The augment is visible via grab inspection -#define AUGMENT_INSPECTABLE FLAG(4) - - -// Limbs. -#define BP_L_FOOT "l_foot" -#define BP_R_FOOT "r_foot" -#define BP_L_LEG "l_leg" -#define BP_R_LEG "r_leg" -#define BP_L_HAND "l_hand" -#define BP_R_HAND "r_hand" -#define BP_L_ARM "l_arm" -#define BP_R_ARM "r_arm" -#define BP_HEAD "head" -#define BP_CHEST "chest" -#define BP_GROIN "groin" -#define BP_ALL_LIMBS list(BP_CHEST, BP_GROIN, BP_HEAD, BP_L_ARM, BP_R_ARM, BP_L_HAND, BP_R_HAND, BP_L_LEG, BP_R_LEG, BP_L_FOOT, BP_R_FOOT) -#define BP_BY_DEPTH list(BP_HEAD, BP_L_HAND, BP_R_HAND, BP_L_ARM, BP_R_ARM, BP_L_FOOT, BP_R_FOOT, BP_L_LEG, BP_R_LEG, BP_GROIN, BP_CHEST) -#define BP_LEGS_FEET list(BP_L_LEG, BP_R_LEG, BP_L_FOOT, BP_R_FOOT) -#define BP_ARMS_HANDS list(BP_L_ARM, BP_R_ARM, BP_L_HAND, BP_R_HAND) - -// Prosthetic helpers. -#define BP_IS_ROBOTIC(org) ((org) && ((org).status & ORGAN_ROBOTIC)) -#define BP_IS_ASSISTED(org) ((org) && ((org).status & ORGAN_ASSISTED)) -#define BP_IS_BRITTLE(org) ((org) && ((org).status & ORGAN_BRITTLE)) -#define BP_IS_CRYSTAL(org) ((org) && ((org).status & ORGAN_CRYSTAL)) - -// Limb flag helpers -#define BP_IS_DEFORMED(org) ((org) && ((org).limb_flags & ORGAN_FLAG_DEFORMED)) - -#define SYNTH_BLOOD_COLOUR "#030303" -#define SYNTH_FLESH_COLOUR "#575757" - -#define MOB_PULL_NONE 0 -#define MOB_PULL_SMALLER 1 -#define MOB_PULL_SAME 2 -#define MOB_PULL_LARGER 3 - -//carbon taste sensitivity defines, used in mob/living/carbon/proc/ingest -#define TASTE_HYPERSENSITIVE 3 //anything below 5% -#define TASTE_SENSITIVE 2 //anything below 7% -#define TASTE_NORMAL 1 //anything below 15% -#define TASTE_DULL 0.5 //anything below 30% -#define TASTE_NUMB 0.1 //anything below 150% - -//Used by show_message() and emotes -#define VISIBLE_MESSAGE 1 -#define AUDIBLE_MESSAGE 2 - -//used for getting species temp values -#define COLD_LEVEL_1 -1 -#define COLD_LEVEL_2 -2 -#define COLD_LEVEL_3 -3 -#define HEAT_LEVEL_1 1 -#define HEAT_LEVEL_2 2 -#define HEAT_LEVEL_3 3 - -//Synthetic human temperature vals -#define SYNTH_COLD_LEVEL_1 50 -#define SYNTH_COLD_LEVEL_2 -1 -#define SYNTH_COLD_LEVEL_3 -1 -#define SYNTH_HEAT_LEVEL_1 500 -#define SYNTH_HEAT_LEVEL_2 1000 -#define SYNTH_HEAT_LEVEL_3 2000 - -#define CORPSE_CAN_REENTER 1 -#define CORPSE_CAN_REENTER_AND_RESPAWN 2 - -#define SPECIES_HUMAN "Human" -#define SPECIES_DIONA "Diona" -#define SPECIES_VOX "Vox" -#define SPECIES_VOX_ARMALIS "Vox Armalis" -#define SPECIES_IPC "Machine" -#define SPECIES_SHELL "Shell IPC" -#define SPECIES_UNATHI "Unathi" -#define SPECIES_SKRELL "Skrell" -#define SPECIES_PROMETHEAN "Promethean" -#define SPECIES_ALIEN "Humanoid" -#define SPECIES_ADHERENT "Adherent" -#define SPECIES_GOLEM "Golem" -#define SPECIES_YEOSA "Yeosa'Unathi" -#define SPECIES_VATGROWN "Vat-Grown Human" -#define SPECIES_SPACER "Space-Adapted Human" -#define SPECIES_TRITONIAN "Tritonian" -#define SPECIES_GRAVWORLDER "Grav-Adapted Human" -#define SPECIES_MULE "Mule" -#define SPECIES_MONKEY "Monkey" -#define SPECIES_NABBER "giant armoured serpentid" -#define SPECIES_FBP "Full Body Prosthesis" //just for xeno-panel //proxima - -#define UNRESTRICTED_SPECIES list(SPECIES_HUMAN, SPECIES_DIONA, SPECIES_IPC, SPECIES_UNATHI, SPECIES_YEOSA, SPECIES_SKRELL, SPECIES_TRITONIAN, SPECIES_SPACER, SPECIES_VATGROWN, SPECIES_GRAVWORLDER, SPECIES_MULE, SPECIES_SHELL) -#define RESTRICTED_SPECIES list(SPECIES_VOX, SPECIES_ALIEN, SPECIES_GOLEM) -#define HUMAN_SPECIES list(SPECIES_HUMAN, SPECIES_VATGROWN, SPECIES_SPACER, SPECIES_GRAVWORLDER, SPECIES_MULE) -#define SOUNDED_SPECIES list(SPECIES_HUMAN, SPECIES_VATGROWN, SPECIES_SPACER, SPECIES_TRITONIAN, SPECIES_GRAVWORLDER, SPECIES_MULE, SPECIES_UNATHI, SPECIES_YEOSA, SPECIES_SKRELL, SPECIES_SHELL) - -#define SURGERY_CLOSED 0 -#define SURGERY_OPEN 1 -#define SURGERY_RETRACTED 2 -#define SURGERY_ENCASED 3 - -#define STASIS_MISC "misc" -#define STASIS_CRYOBAG "cryobag" -#define STASIS_COLD "cold" - -#define AURA_CANCEL 1 -#define AURA_FALSE 2 -#define AURA_TYPE_BULLET "Bullet" -#define AURA_TYPE_WEAPON "Weapon" -#define AURA_TYPE_THROWN "Thrown" -#define AURA_TYPE_LIFE "Life" - -#define SPECIES_BLOOD_DEFAULT 560 - -#define SLIME_EVOLUTION_THRESHOLD 10 - -//Used in mob/proc/get_input -#define MOB_INPUT_TEXT "text" -#define MOB_INPUT_MESSAGE "message" -#define MOB_INPUT_NUM "num" - -#define MOB_CLIMB_TIME_SMALL (3 SECONDS) -#define MOB_CLIMB_TIME_MEDIUM (5 SECONDS) - -#define MOB_FACTION_NEUTRAL "neutral" - -#define ROBOT_MODULE_TYPE_GROUNDED "grounded" -#define ROBOT_MODULE_TYPE_FLYING "flying" - -#define RADIO_INTERRUPT_DEFAULT 30 - -/// This mob is allergic to holiness -#define MOB_FLAG_HOLY_BAD FLAG(0) -/// This mob cannot be pinned to walls by sharp objects -#define MOB_FLAG_UNPINNABLE FLAG(1) - -// More refined version of SA_* ""intelligence"" seperators. -// Now includes bitflags, so to target two classes you just do 'MOB_CLASS_ANIMAL|MOB_CLASS_HUMANOID' -#define MOB_CLASS_NONE EMPTY_BITFIELD -#define MOB_CLASS_PLANT FLAG(0) // Unused at the moment. -#define MOB_CLASS_ANIMAL FLAG(1) // Animals and beasts like spiders, saviks, and bears. -#define MOB_CLASS_HUMANOID FLAG(2) // Non-robotic humanoids, including /simple_mob and /carbon/humans and their alien variants. -#define MOB_CLASS_SYNTHETIC FLAG(3) // Silicons, mechanical simple mobs, FBPs, and anything else that would pass is_synthetic() -#define MOB_CLASS_SLIME FLAG(4) // Everyone's favorite xenobiology specimen (and maybe prometheans?). -#define MOB_CLASS_ABERRATION FLAG(5) // Weird shit. -#define MOB_CLASS_DEMONIC FLAG(6) // Cult stuff. -#define MOB_CLASS_BOSS FLAG(7) // Future megafauna hopefully someday. -#define MOB_CLASS_ILLUSION FLAG(8) // Fake mobs, e.g. Technomancer illusions. -#define MOB_CLASS_PHOTONIC FLAG(9) // Holographic mobs like holocarp, similar to _ILLUSION, but that make no attempt to hide their true nature. - -#define MOB_CLASS_ALL (~EMPTY_BITFIELD) - -// For slime commanding. Higher numbers allow for more actions. -#define SLIME_COMMAND_OBEY 1 // When disciplined. -#define SLIME_COMMAND_FACTION 2 // When in the same 'faction'. -#define SLIME_COMMAND_FRIEND 3 // When befriended with a slime friendship agent. - -#define MARKING_TARGET_SKIN 0 // Draw a datum/sprite_accessory/marking to the mob's body, eg. tattoos -#define MARKING_TARGET_HAIR 1 // Draw a datum/sprite_accessory/marking to the mob's hair, eg. color fades -#define MARKING_TARGET_HEAD 2 // Draw a datum/sprite_accessory/marking to the mob's head after their hair, eg. ears, horns - -// used in /mob/living/carbon/human/can_inject, and by various callers of that proc -#define CAN_INJECT 1 -#define INJECTION_PORT 2 -#define INJECTION_PORT_DELAY 3 SECONDS // used by injectors to apply delay due to searching for a port on the injectee's suit - - -//used by /proc/do_after -#define DO_USER_CAN_MOVE FLAG(0) -#define DO_USER_CAN_TURN FLAG(1) -#define DO_USER_UNIQUE_ACT FLAG(2) -#define DO_USER_SAME_HAND FLAG(3) -#define DO_USER_SAME_ZONE FLAG(4) -#define DO_TARGET_CAN_MOVE FLAG(5) -#define DO_TARGET_CAN_TURN FLAG(6) -#define DO_TARGET_UNIQUE_ACT FLAG(7) -#define DO_SHOW_PROGRESS FLAG(8) -#define DO_PUBLIC_PROGRESS FLAG(9) -#define DO_MOVE_CHECKS_TURFS FLAG(10) -#define DO_FAIL_FEEDBACK FLAG(11) -#define DO_BAR_OVER_USER FLAG(12) // Forces the progress bar to appear over the user instead of the target - -#define DO_BOTH_CAN_MOVE (DO_USER_CAN_MOVE | DO_TARGET_CAN_MOVE) -#define DO_BOTH_CAN_TURN (DO_USER_CAN_TURN | DO_TARGET_CAN_TURN) -#define DO_BOTH_UNIQUE_ACT (DO_USER_UNIQUE_ACT | DO_TARGET_UNIQUE_ACT) -#define DO_DEFAULT (DO_SHOW_PROGRESS | DO_USER_SAME_HAND | DO_BOTH_CAN_TURN | DO_FAIL_FEEDBACK) - -// Preset do_After flags -#define DO_PUBLIC_UNIQUE (DO_DEFAULT | DO_PUBLIC_PROGRESS | DO_BOTH_UNIQUE_ACT) // Common flags for actions that should be public and unique -#define DO_SURGERY (DO_DEFAULT | DO_PUBLIC_PROGRESS) // Flags for surgery steps. No unique checks to allow multi-surgery steps. -#define DO_MEDICAL (DO_DEFAULT | DO_PUBLIC_PROGRESS) // Flags for medical steps. No unique checks to allow multi-bandaging steps. -#define DO_EQUIP (DO_DEFAULT | DO_PUBLIC_PROGRESS | DO_USER_UNIQUE_ACT) // Flags for equipping/unequipping mobs. Set to allow a mob to be targeted by multiple sources, but for a source to only be able to perform one action at a time. - -#define DO_MISSING_USER (-1) -#define DO_MISSING_TARGET (-2) -#define DO_INCAPACITATED (-3) - -#define FAKE_INVIS_ALPHA_THRESHOLD 127 // If something's alpha var is at or below this number, certain things will pretend it is invisible. diff --git a/code/__defines/movement.dm b/code/__defines/movement.dm deleted file mode 100644 index bf1e0b249c73f..0000000000000 --- a/code/__defines/movement.dm +++ /dev/null @@ -1,6 +0,0 @@ -#define HAS_TRANSFORMATION_MOVEMENT_HANDLER(X) X.HasMovementHandler(/datum/movement_handler/mob/transformation) -#define ADD_TRANSFORMATION_MOVEMENT_HANDLER(X) X.AddMovementHandler(/datum/movement_handler/mob/transformation) -#define DEL_TRANSFORMATION_MOVEMENT_HANDLER(X) X.RemoveMovementHandler(/datum/movement_handler/mob/transformation) - -#define MOVING_DELIBERATELY(X) (X.move_intent.flags & MOVE_INTENT_DELIBERATE) -#define MOVING_QUICKLY(X) (X.move_intent.flags & MOVE_INTENT_QUICK) diff --git a/code/__defines/overmap.dm b/code/__defines/overmap.dm deleted file mode 100644 index a9eee83eb376f..0000000000000 --- a/code/__defines/overmap.dm +++ /dev/null @@ -1,14 +0,0 @@ -#define SHIP_SIZE_TINY 1 -#define SHIP_SIZE_SMALL 2 -#define SHIP_SIZE_LARGE 3 - -//multipliers for max_speed to find 'slow' and 'fast' speeds for the ship -#define SHIP_SPEED_SLOW 1/(40 SECONDS) -#define SHIP_SPEED_FAST 1/(5 SECONDS) - -#define OVERMAP_WEAKNESS_NONE 0 -#define OVERMAP_WEAKNESS_FIRE 1 -#define OVERMAP_WEAKNESS_EMP 2 -#define OVERMAP_WEAKNESS_MINING 4 -#define OVERMAP_WEAKNESS_EXPLOSIVE 8 -#define OVERMAP_WEAKNESS_DROPPOD 16 \ No newline at end of file diff --git a/code/__defines/proc_presets.dm b/code/__defines/proc_presets.dm deleted file mode 100644 index 0577213357e83..0000000000000 --- a/code/__defines/proc_presets.dm +++ /dev/null @@ -1 +0,0 @@ -#define MERGE_ASSOCS_WITH_NUM_VALUES(a, b) merge_assoc_lists(a, b, /proc/assoc_merge_add, 1) diff --git a/code/__defines/psi.dm b/code/__defines/psi.dm deleted file mode 100644 index c03bbe7d3d357..0000000000000 --- a/code/__defines/psi.dm +++ /dev/null @@ -1,17 +0,0 @@ -#define PSI_IMPLANT_AUTOMATIC "Security Level Derived" -#define PSI_IMPLANT_SHOCK "Issue Neural Shock" -#define PSI_IMPLANT_WARN "Issue Reprimand" -#define PSI_IMPLANT_LOG "Log Incident" -#define PSI_IMPLANT_DISABLED "Disabled" - -#define PSI_COERCION "coercion" -#define PSI_PSYCHOKINESIS "psychokinesis" -#define PSI_REDACTION "redaction" -#define PSI_ENERGISTICS "energistics" - -#define PSI_RANK_BLUNT 0 -#define PSI_RANK_LATENT 1 -#define PSI_RANK_OPERANT 2 -#define PSI_RANK_MASTER 3 -#define PSI_RANK_GRANDMASTER 4 -#define PSI_RANK_PARAMOUNT 5 \ No newline at end of file diff --git a/code/__defines/qdel.dm b/code/__defines/qdel.dm deleted file mode 100644 index 7b53bb97a9c67..0000000000000 --- a/code/__defines/qdel.dm +++ /dev/null @@ -1,38 +0,0 @@ -//defines that give qdel hints. these can be given as a return in destory() or by calling - -#define QDEL_HINT_QUEUE 0 //qdel should queue the object for deletion. -#define QDEL_HINT_LETMELIVE 1 //qdel should let the object live after calling destory. -#define QDEL_HINT_IWILLGC 2 //functionally the same as the above. qdel should assume the object will gc on its own, and not check it. -#define QDEL_HINT_HARDDEL 3 //qdel should assume this object won't gc, and queue a hard delete using a hard reference. -#define QDEL_HINT_HARDDEL_NOW 4 //qdel should assume this object won't gc, and hard del it post haste. -#define QDEL_HINT_FINDREFERENCE 5 //functionally identical to QDEL_HINT_QUEUE if TESTING is not enabled in _compiler_options.dm. - //if TESTING is enabled, qdel will call this object's find_references() verb. -#define QDEL_HINT_IFFAIL_FINDREFERENCE 6 //Above but only if gc fails. -//defines for the gc_destroyed var - -#define GC_QUEUE_PREQUEUE 1 -#define GC_QUEUE_CHECK 2 -#define GC_QUEUE_HARDDELETE 3 -#define GC_QUEUE_COUNT 3 //increase this when adding more steps. - -#define GC_QUEUED_FOR_QUEUING -1 -#define GC_QUEUED_FOR_HARD_DEL -2 -#define GC_CURRENTLY_BEING_QDELETED -3 - -// Delete "item" and nullify var, where it was. -#define QDEL_IN_CLIENT_TIME(item, time) addtimer(CALLBACK(GLOBAL_PROC, .proc/qdel, item), time, TIMER_STOPPABLE | TIMER_CLIENT_TIME) -#define QDEL_LIST(L) if(L) { for(var/I in L) qdel(I); L.Cut(); } -#define QDEL_LIST_IN(L, time) addtimer(CALLBACK(GLOBAL_PROC, .proc/______qdel_list_wrapper, L), time, TIMER_STOPPABLE) -#define QDEL_LIST_ASSOC(L) if(L) { for(var/I in L) { qdel(L[I]); qdel(I); } L.Cut(); } -#define QDEL_LIST_ASSOC_VAL(L) if(L) { for(var/I in L) qdel(L[I]); L.Cut(); } - -/proc/______qdel_list_wrapper(list/L) //the underscores are to encourage people not to use this directly. - QDEL_LIST(L) - - -#define QDEL_CLEAR_LIST(x) QDEL_LIST(x) - - -#define QDELING(X) (X.gc_destroyed) -#define QDELETED(X) (!X || QDELING(X)) -#define QDESTROYING(X) (!X || X.gc_destroyed == GC_CURRENTLY_BEING_QDELETED) diff --git a/code/__defines/research.dm b/code/__defines/research.dm deleted file mode 100644 index 6862d2355c1ab..0000000000000 --- a/code/__defines/research.dm +++ /dev/null @@ -1,19 +0,0 @@ -#define SHEET_MATERIAL_AMOUNT 2000 - -#define TECH_MATERIAL "materials" -#define TECH_ENGINEERING "engineering" -#define TECH_PHORON "phorontech" -#define TECH_POWER "powerstorage" -#define TECH_BLUESPACE "bluespace" -#define TECH_BIO "biotech" -#define TECH_COMBAT "combat" -#define TECH_MAGNET "magnets" -#define TECH_DATA "programming" -#define TECH_ESOTERIC "esoteric" - -#define IMPRINTER FLAG(0) //For circuits. Uses glass/chemicals. -#define PROTOLATHE FLAG(1) //New stuff. Uses glass/metal/chemicals -#define MECHFAB FLAG(2) //Mechfab -#define CHASSIS FLAG(3) //For protolathe, but differently - -#define T_BOARD(name) "circuit board (" + (name) + ")" \ No newline at end of file diff --git a/code/__defines/ruin_tags.dm b/code/__defines/ruin_tags.dm deleted file mode 100644 index caf6e3cf7fb2f..0000000000000 --- a/code/__defines/ruin_tags.dm +++ /dev/null @@ -1,8 +0,0 @@ -//Flags for exoplanet ruin picking - -#define RUIN_HABITAT 1 //long term habitat -#define RUIN_HUMAN 2 //human-made structure -#define RUIN_ALIEN 4 //artificial structure of an unknown origin -#define RUIN_WRECK 8 //crashed vessel -#define RUIN_NATURAL 16 //naturally occuring structure -#define RUIN_WATER 32 //ruin depending on planet having water accessible \ No newline at end of file diff --git a/code/__defines/shields.dm b/code/__defines/shields.dm deleted file mode 100644 index 14be4011b7552..0000000000000 --- a/code/__defines/shields.dm +++ /dev/null @@ -1,64 +0,0 @@ -#define SHIELD_DAMTYPE_PHYSICAL 1 // Physical damage - bullets, meteors, various hand objects - aka. "brute" damtype. -#define SHIELD_DAMTYPE_EM 2 // Electromagnetic damage - Ion weaponry, stun beams, ... -#define SHIELD_DAMTYPE_HEAT 3 // Heat damage - Lasers, fire - -#define ENERGY_PER_HP (40 KILOWATTS)// Base amount energy that will be deducted from the generator's internal reserve per 1 HP of damage taken -#define ENERGY_UPKEEP_PER_TILE (3 KILOWATTS) // Base upkeep per tile protected. Multiplied by various enabled shield modes. Without them the field does literally nothing. -#define ENERGY_UPKEEP_IDLE 40 // Base upkeep when idle; modified by other factors. - -#define MINOR_BREACH_THRESHOLD 99 -#define MAJOR_BREACH_THRESHOLD 50 -#define CRITICAL_BREACH_THRESHOLD 25 - -// This shield model is slightly inspired by Sins of a Solar Empire series. In short, shields are designed to analyze what hits them, and adapt themselves against that type of damage. -// This means shields will become increasingly effective against things like emitters - as they will adapt to heat damage, however they will be vulnerable to brute and EM damage. -// In a theoretical assault scenario, it is best to combine all damage types, so mitigation can't build up. The value is capped to prevent full scale invulnerability. - -#define MAX_MITIGATION_BASE 50 // % Base maximal reachable mitigation. -#define MAX_MITIGATION_RESEARCH 10 // % Added to MAX_MITIGATION_BASE when generator is built using more advanced components. This value is added for each "tier" of used component, ie. basic one has 1, the best one has 3. Actual maximum should be 80% in this case (with best components). Make sure you won't get above 100%! -#define MITIGATION_HIT_GAIN 5 // Mitigation gain per hit of respective damage type. -#define MITIGATION_HIT_LOSS 4 // Mitigation loss per hit. If we get hit once by EM damage type, EM mitigation will grow, while Physical and Heat mitigation values drop. -#define MITIGATION_LOSS_PASSIVE 0.5 // Mitigation of all damage types will drop by this every tick, up to 0. - -// Shield modes allow you to calibrate the field to fit specific needs. It is, for example, possible to create a field that will block airflow, but let people pass by calibrating it -// properly. Each enabled shield mode adds up to the upkeep power usage, however. The following defines are a multiplier - 1.5 means the power usage will be increased 1.5x. - -#define MODEUSAGE_HYPERKINETIC // Blocks meteors and projectile based weapons. Relatively low as the shields are primarily intended as an anti-meteor countermeasure. -#define MODEUSAGE_PHOTONIC // Blocks energy weapons, and makes the field opaque. -#define MODEUSAGE_NONHUMANS // Blocks most organic lifeforms, with an exception being humanoid mobs. Typical uses include carps. -#define MODEUSAGE_HUMANOIDS // Blocks humanoid mobs. -#define MODEUSAGE_ANORGANIC // Blocks silicon-based mobs (cyborgs, drones, FBPs, IPCs, ..) -#define MODEUSAGE_ATMOSPHERIC // Blocks airflow. -#define MODEUSAGE_HULL 1 // Enables hull shielding mode, which changes a square shaped field into a field that covers external hull only. -#define MODEUSAGE_BYPASS // Attempts to counter shield diffusers. Puts very large EM strain on the shield when doing so. Has to be hacked. -#define MODEUSAGE_OVERCHARGE 3 // Overcharges the shield, causing it to shock anyone who touches a field segment. Best used with MODE_ORGANIC_HUMANOIDS. Has to be hacked. -#define MODEUSAGE_MODULATE 2 // Modulates the shield, enabling the mitigation system. - -// Relevant mode bitflags (maximal of 16 flags due to current BYOND limitations) -#define MODEFLAG_HYPERKINETIC 1 -#define MODEFLAG_PHOTONIC 2 -#define MODEFLAG_NONHUMANS 4 -#define MODEFLAG_HUMANOIDS 8 -#define MODEFLAG_ANORGANIC 16 -#define MODEFLAG_ATMOSPHERIC 32 -#define MODEFLAG_HULL 64 -#define MODEFLAG_BYPASS 128 -#define MODEFLAG_OVERCHARGE 256 -#define MODEFLAG_MODULATE 512 -#define MODEFLAG_MULTIZ 1024 -#define MODEFLAG_EM 2048 - -// Return codes for shield hits. -#define SHIELD_ABSORBED 1 // The shield has completely absorbed the hit -#define SHIELD_BREACHED_MINOR 2 // The hit was absorbed, but a small gap will be created in the field (1-3 tiles) -#define SHIELD_BREACHED_MAJOR 3 // Same as above, with 2-5 tile gap -#define SHIELD_BREACHED_CRITICAL 4 // Same as above, with 4-8 tile gap -#define SHIELD_BREACHED_FAILURE 5 // Same as above, with 8-16 tile gap. Occurs when the hit exhausts all remaining shield energy. - -#define SHIELD_OFF 0 // The shield is offline -#define SHIELD_DISCHARGING 1 // The shield is shutting down and discharging. -#define SHIELD_RUNNING 2 // The shield is running -#define SHIELD_IDLE 3 // The shield is being kept at an idle state -#define SHIELD_SPINNING_UP 4 // Going from idle to running - -#define SHIELD_SHUTDOWN_DISPERSION_RATE (10000 KILOWATTS) // The rate at which shield energy disperses when shutdown is initiated. diff --git a/code/__defines/shuttle.dm b/code/__defines/shuttle.dm deleted file mode 100644 index 8e33141e4b3fc..0000000000000 --- a/code/__defines/shuttle.dm +++ /dev/null @@ -1,13 +0,0 @@ -#define SHUTTLE_FLAGS_NONE 0 -#define SHUTTLE_FLAGS_PROCESS 1 -#define SHUTTLE_FLAGS_SUPPLY 2 -#define SHUTTLE_FLAGS_ZERO_G 4 -#define SHUTTLE_FLAGS_ALL (~SHUTTLE_FLAGS_NONE) - -#define SLANDMARK_FLAG_AUTOSET 1 // If set, will set base area and turf type to same as where it was spawned at -#define SLANDMARK_FLAG_ZERO_G 2 // Zero-G shuttles moved here will lose gravity unless the area has ambient gravity. - -//Overmap landable shuttles -#define SHIP_STATUS_LANDED 1 -#define SHIP_STATUS_TRANSIT 2 -#define SHIP_STATUS_OVERMAP 3 \ No newline at end of file diff --git a/code/__defines/skills.dm b/code/__defines/skills.dm deleted file mode 100644 index ab26c5ee23524..0000000000000 --- a/code/__defines/skills.dm +++ /dev/null @@ -1,36 +0,0 @@ -#define SKILL_NONE 1 -#define SKILL_BASIC 2 -#define SKILL_ADEPT 3 -#define SKILL_EXPERT 4 -#define SKILL_PROF 5 -#define HAS_PERK SKILL_NONE + 1 - -#define SKILL_MIN 1 // Min skill value selectable -#define SKILL_MAX 5 // Max skill value selectable -#define SKILL_DEFAULT 4 //most mobs will default to this - -#define SKILL_EASY 1 -#define SKILL_AVERAGE 2 -#define SKILL_HARD 4 - -#define SKILL_BUREAUCRACY /decl/hierarchy/skill/organizational/bureaucracy -#define SKILL_FINANCE /decl/hierarchy/skill/organizational/finance -#define SKILL_EVA /decl/hierarchy/skill/general/EVA -#define SKILL_MECH /decl/hierarchy/skill/general/EVA/mech -#define SKILL_PILOT /decl/hierarchy/skill/general/pilot -#define SKILL_HAULING /decl/hierarchy/skill/general/hauling -#define SKILL_COMPUTER /decl/hierarchy/skill/general/computer -#define SKILL_BOTANY /decl/hierarchy/skill/service/botany -#define SKILL_COOKING /decl/hierarchy/skill/service/cooking -#define SKILL_COMBAT /decl/hierarchy/skill/security/combat -#define SKILL_WEAPONS /decl/hierarchy/skill/security/weapons -#define SKILL_FORENSICS /decl/hierarchy/skill/security/forensics -#define SKILL_CONSTRUCTION /decl/hierarchy/skill/engineering/construction -#define SKILL_ELECTRICAL /decl/hierarchy/skill/engineering/electrical -#define SKILL_ATMOS /decl/hierarchy/skill/engineering/atmos -#define SKILL_ENGINES /decl/hierarchy/skill/engineering/engines -#define SKILL_DEVICES /decl/hierarchy/skill/research/devices -#define SKILL_SCIENCE /decl/hierarchy/skill/research/science -#define SKILL_MEDICAL /decl/hierarchy/skill/medical/medical -#define SKILL_ANATOMY /decl/hierarchy/skill/medical/anatomy -#define SKILL_CHEMISTRY /decl/hierarchy/skill/medical/chemistry \ No newline at end of file diff --git a/code/__defines/spaceman_dmm.dm b/code/__defines/spaceman_dmm.dm deleted file mode 100644 index 51b09cd036eb5..0000000000000 --- a/code/__defines/spaceman_dmm.dm +++ /dev/null @@ -1,32 +0,0 @@ -/** -* SpacemanDMM dreamchecker extensions for suite 1.7 -* -*/ - -#ifdef SPACEMAN_DMM - #define RETURN_TYPE(X) set SpacemanDMM_return_type = X - #define SHOULD_CALL_PARENT(X) set SpacemanDMM_should_call_parent = X - #define UNLINT(X) SpacemanDMM_unlint(X) - #define SHOULD_NOT_OVERRIDE(X) set SpacemanDMM_should_not_override = X - #define SHOULD_NOT_SLEEP(X) set SpacemanDMM_should_not_sleep = X - #define SHOULD_BE_PURE(X) set SpacemanDMM_should_be_pure = X - #define PRIVATE_PROC(X) set SpacemanDMM_private_proc = X - #define PROTECTED_PROC(X) set SpacemanDMM_protected_proc = X - #define CAN_BE_REDEFINED(X) set SpacemanDMM_can_be_redefined = X - #define VAR_FINAL var/SpacemanDMM_final - #define VAR_PRIVATE var/SpacemanDMM_private - #define VAR_PROTECTED var/SpacemanDMM_protected -#else - #define RETURN_TYPE(X) - #define SHOULD_CALL_PARENT(X) - #define UNLINT(X) X - #define SHOULD_NOT_OVERRIDE(X) - #define SHOULD_NOT_SLEEP(X) - #define SHOULD_BE_PURE(X) - #define PRIVATE_PROC(X) - #define PROTECTED_PROC(X) - #define CAN_BE_REDEFINED(X) - #define VAR_FINAL var - #define VAR_PRIVATE var - #define VAR_PROTECTED var -#endif diff --git a/code/__defines/species.dm b/code/__defines/species.dm deleted file mode 100644 index 223e772e72708..0000000000000 --- a/code/__defines/species.dm +++ /dev/null @@ -1,47 +0,0 @@ -// Species flags -#define SPECIES_FLAG_NO_MINOR_CUT FLAG(0) // Can step on broken glass with no ill-effects. Either thick skin (diona/vox), cut resistant (slimes) or incorporeal (shadows) -#define SPECIES_FLAG_IS_PLANT FLAG(1) // Is a treeperson. -#define SPECIES_FLAG_NO_SCAN FLAG(2) // Cannot be scanned in a DNA machine/genome-stolen. -#define SPECIES_FLAG_NO_PAIN FLAG(3) // Cannot suffer halloss/recieves deceptive health indicator. -#define SPECIES_FLAG_NO_SLIP FLAG(4) // Cannot fall over. -#define SPECIES_FLAG_NO_POISON FLAG(5) // Cannot not suffer toxloss. -#define SPECIES_FLAG_NO_EMBED FLAG(6) // Can step on broken glass with no ill-effects and cannot have shrapnel embedded in it. -#define SPECIES_FLAG_NO_TANGLE FLAG(7) // This species wont get tangled up in weeds -#define SPECIES_FLAG_NO_BLOCK FLAG(8) // Unable to block or defend itself from attackers. -#define SPECIES_FLAG_NEED_DIRECT_ABSORB FLAG(9) // This species can only have their DNA taken by direct absorption. -#define SPECIES_FLAG_LOW_GRAV_ADAPTED FLAG(10) // This species is used to lower than standard gravity, affecting stamina in high-grav - - -// Species spawn flags -#define SPECIES_IS_WHITELISTED FLAG(0) // Must be whitelisted to play. -#define SPECIES_IS_RESTRICTED FLAG(1) // Is not a core/normally playable species. (castes, mutantraces) -#define SPECIES_CAN_JOIN FLAG(2) // Species is selectable in chargen. -#define SPECIES_NO_FBP_CONSTRUCTION FLAG(3) // FBP of this species can't be made in-game. -#define SPECIES_NO_FBP_CHARGEN FLAG(4) // FBP of this species can't be selected at chargen. -#define SPECIES_NO_ROBOTIC_INTERNAL_ORGANS FLAG(5) // Species cannot start with robotic organs or have them attached. - - -// Species appearance flags -#define HAS_SKIN_TONE_NORMAL FLAG(0) // Skin tone selectable in chargen for baseline humans (0-220) -#define HAS_SKIN_COLOR FLAG(1) // Skin colour selectable in chargen. (RGB) -#define HAS_LIPS FLAG(2) // Lips are drawn onto the mob icon. (lipstick) -#define HAS_UNDERWEAR FLAG(3) // Underwear is drawn onto the mob icon. -#define HAS_EYE_COLOR FLAG(4) // Eye colour selectable in chargen. (RGB) -#define HAS_HAIR_COLOR FLAG(5) // Hair colour selectable in chargen. (RGB) -#define RADIATION_GLOWS FLAG(6) // Radiation causes this character to glow. -#define HAS_SKIN_TONE_GRAV FLAG(7) // Skin tone selectable in chargen for grav-adapted humans (0-100) -#define HAS_SKIN_TONE_SPCR FLAG(8) // Skin tone selectable in chargen for spacer humans (0-165) -#define HAS_SKIN_TONE_TRITON FLAG(9) // Skin tone selectable in chargen for tritonian humans -#define HAS_BASE_SKIN_COLOURS FLAG(10) // Has multiple base skin sprites to go off of -#define HAS_A_SKIN_TONE (HAS_SKIN_TONE_NORMAL | HAS_SKIN_TONE_GRAV | HAS_SKIN_TONE_SPCR | HAS_SKIN_TONE_TRITON) // Species has a numeric skintone - - -// Skin Defines -#define SKIN_NORMAL EMPTY_BITFIELD -#define SKIN_THREAT FLAG(0) - - -// Darkvision Levels. Inverted - white is darkest, black is full vision -#define DARKTINT_NONE "#ffffff" -#define DARKTINT_MODERATE "#f9f9f5" -#define DARKTINT_GOOD "#ebebe6" diff --git a/code/__defines/subsystem-priority.dm b/code/__defines/subsystem-priority.dm deleted file mode 100644 index c43047876537e..0000000000000 --- a/code/__defines/subsystem-priority.dm +++ /dev/null @@ -1,51 +0,0 @@ -// Something to remember when setting priorities: SS_TICKER runs before Normal, which runs before SS_BACKGROUND. -// Each group has its own priority bracket. -// SS_BACKGROUND handles high server load differently than Normal and SS_TICKER do. -// Higher priority also means a larger share of a given tick before sleep checks. - -#define SS_PRIORITY_DEFAULT 50 // Default priority for all processes levels - -// SS_TICKER -#define SS_PRIORITY_TIMER 20 -#define SS_PRIORITY_ICON_UPDATE 20 // Queued icon updates. Mostly used by APCs and tables. - -// Normal -#define SS_PRIORITY_TICKER 100 // Gameticker. -#define SS_PRIORITY_MOB 95 // Mob Life(). -#define SS_PRIORITY_MACHINERY 95 // Machinery + powernet ticks. -#define SS_PRIORITY_AIR 80 // ZAS processing. -#define SS_PRIORITY_CHEMISTRY 60 // Multi-tick chemical reactions. -#define SS_PRIORITY_CHAT 40 // Chat -#define SS_PRIORITY_ALARM 20 // Alarm processing. -#define SS_PRIORITY_EVENT 20 // Event processing and queue handling. -#define SS_PRIORITY_SHUTTLE 20 // Shuttle movement. -#define SS_PRIORITY_CIRCUIT_COMP 20 // Processing circuit component do_work. -#define SS_PRIORITY_TEMPERATURE 20 // Cooling and heating of atoms. -#define SS_PRIORITY_RADIATION 20 // Radiation processing and cache updates. -#define SS_PRIORITY_OPEN_SPACE 20 // Open turf updates. -#define SS_PRIORITY_AIRFLOW 15 // Object movement from ZAS airflow. -#define SS_PRIORITY_AI 15 // Mob AI -#define SS_PRIORITY_PRESENCE 10 // z-level player presence testing -#define SS_PRIORITY_VOTE 10 // Vote management. -#define SS_PRIORITY_SUPPLY 10 // Supply point accumulation. -#define SS_PRIORITY_TRADE 10 // Adds/removes traders. -#define SS_PRIORITY_GHOST_IMAGES 10 // Updates ghost client images. -#define SS_PRIORITY_ZCOPY 10 // Builds appearances for Z-Mimic. - -// SS_BACKGROUND -#define SS_PRIORITY_OBJECTS 100 // processing_objects processing. -#define SS_PRIORITY_PROCESSING 95 // Generic datum processor. Replaces objects processor. -#define SS_PRIORITY_PLANTS 90 // Plant processing, slow ticks. -#define SS_PRIORITY_VINES 50 // Spreading vine effects. -#define SS_PRIORITY_PSYCHICS 45 // Psychic complexus processing. -#define SS_PRIORITY_NANO 40 // Updates to nanoui uis. -#define SS_PRIORITY_TURF 30 // Radioactive walls/blob. -#define SS_PRIORITY_EVAC 30 // Processes the evac controller. -#define SS_PRIORITY_CIRCUIT 30 // Processing Circuit's ticks and all that -#define SS_PRIORITY_GRAPH 30 // Merging and splitting of graphs -#define SS_PRIORITY_CHAR_SETUP 25 // Writes player preferences to savefiles. -#define SS_PRIORITY_GARBAGE 20 // Garbage collection. -#define SS_PRIORITY_INACTIVITY 10 // Idle kicking. - -// Subsystem fire priority, from lowest to highest priority -// If the subsystem isn't listed here it's either DEFAULT or PROCESS (if it's a processing subsystem child) diff --git a/code/__defines/subsystems.dm b/code/__defines/subsystems.dm deleted file mode 100644 index b6298315bc7cd..0000000000000 --- a/code/__defines/subsystems.dm +++ /dev/null @@ -1,51 +0,0 @@ -// Subsystem runlevels - -#define RUNLEVEL_INIT EMPTY_BITFIELD -#define RUNLEVEL_LOBBY FLAG(0) -#define RUNLEVEL_SETUP FLAG(1) -#define RUNLEVEL_GAME FLAG(2) -#define RUNLEVEL_POSTGAME FLAG(3) - -#define RUNLEVELS_ALL (~EMPTY_BITFIELD) -#define RUNLEVELS_DEFAULT (RUNLEVEL_SETUP | RUNLEVEL_GAME | RUNLEVEL_POSTGAME) - - -// Subsystem init_order, from highest priority to lowest priority -// Subsystems shutdown in the reverse of the order they initialize in -// The numbers just define the ordering, they are meaningless otherwise. - -#define SS_INIT_EARLY 18 -#define SS_INIT_GARBAGE 17 -#define SS_INIT_CHEMISTRY 16 -#define SS_INIT_MATERIALS 15 -#define SS_INIT_PLANTS 14 -#define SS_INIT_ANTAGS 13 -#define SS_INIT_CULTURE 12 -#define SS_INIT_MISC 11 -#define SS_INIT_SKYBOX 10 -#define SS_INIT_MAPPING 9 -#define SS_INIT_JOBS 8 -#define SS_INIT_CHAR_SETUP 7 -#define SS_INIT_CIRCUIT 6 -#define SS_INIT_GRAPH 5 -#define SS_INIT_OPEN_SPACE 4 -#define SS_INIT_ATOMS 3 -#define SS_INIT_MACHINES 2 -#define SS_INIT_ICON_UPDATE 1 -#define SS_INIT_DEFAULT 0 -#define SS_INIT_AIR -1 -#define SS_INIT_MISC_LATE -2 -#define SS_INIT_MISC_CODEX -3 -#define SS_INIT_ALARM -4 -#define SS_INIT_SHUTTLE -5 -#define SS_INIT_GOALS -5 -#define SS_INIT_LIGHTING -6 -#define SS_INIT_ZCOPY -7 -#define SS_INIT_HOLOMAP -8 -#define SS_INIT_XENOARCH -10 -#define SS_INIT_BAY_LEGACY -12 -#define SS_INIT_TICKER -20 -#define SS_INIT_AI -21 -#define SS_INIT_AIFAST -22 -#define SS_INIT_CHAT -90 // Should be lower to ensure chat remains smooth during init. -#define SS_INIT_UNIT_TESTS -100 diff --git a/code/__defines/targeting.dm b/code/__defines/targeting.dm deleted file mode 100644 index 4bbe7345920cf..0000000000000 --- a/code/__defines/targeting.dm +++ /dev/null @@ -1,4 +0,0 @@ -#define TARGET_CAN_MOVE 1 -#define TARGET_CAN_RUN 2 -#define TARGET_CAN_CLICK 4 -#define TARGET_CAN_RADIO 8 \ No newline at end of file diff --git a/code/__defines/temperature.dm b/code/__defines/temperature.dm deleted file mode 100644 index 098cdf3ee3eb4..0000000000000 --- a/code/__defines/temperature.dm +++ /dev/null @@ -1,22 +0,0 @@ -#define ATOM_IS_TEMPERATURE_SENSITIVE(A) (A && !QDELETED(A) && !(A.atom_flags & ATOM_FLAG_NO_TEMP_CHANGE)) -#define ATOM_TEMPERATURE_EQUILIBRIUM_THRESHOLD 5 -#define ATOM_TEMPERATURE_EQUILIBRIUM_CONSTANT 0.25 - -#define ADJUST_ATOM_TEMPERATURE(_atom, _temp) \ - _atom.temperature = _temp; \ - if(_atom.reagents) { \ - HANDLE_REACTIONS(_atom.reagents); \ - } \ - QUEUE_TEMPERATURE_ATOMS(_atom); - -#define QUEUE_TEMPERATURE_ATOMS(_atoms) \ - if(islist(_atoms)) { \ - for(var/thing in _atoms) { \ - var/atom/A = thing; \ - if(ATOM_IS_TEMPERATURE_SENSITIVE(A)) { \ - SStemperature.processing[A] = TRUE; \ - } \ - } \ - } else if(ATOM_IS_TEMPERATURE_SENSITIVE(_atoms)) { \ - SStemperature.processing[_atoms] = TRUE; \ - } diff --git a/code/__defines/topic.dm b/code/__defines/topic.dm deleted file mode 100644 index 981de408f906e..0000000000000 --- a/code/__defines/topic.dm +++ /dev/null @@ -1,3 +0,0 @@ -#define TOPIC_NOACTION 0 -#define TOPIC_HANDLED 1 -#define TOPIC_REFRESH 2 diff --git a/code/__defines/turfs.dm b/code/__defines/turfs.dm deleted file mode 100644 index c6cf13fbb28b8..0000000000000 --- a/code/__defines/turfs.dm +++ /dev/null @@ -1,22 +0,0 @@ -#define TURF_REMOVE_CROWBAR FLAG(0) -#define TURF_REMOVE_SCREWDRIVER FLAG(1) -#define TURF_REMOVE_SHOVEL FLAG(2) -#define TURF_REMOVE_WRENCH FLAG(3) -#define TURF_CAN_BREAK FLAG(4) -#define TURF_CAN_BURN FLAG(5) -#define TURF_HAS_EDGES FLAG(6) -#define TURF_HAS_CORNERS FLAG(7) -#define TURF_HAS_INNER_CORNERS FLAG(8) -#define TURF_IS_FRAGILE FLAG(9) -#define TURF_ACID_IMMUNE FLAG(10) -#define TURF_IS_WET FLAG(11) -#define TURF_HAS_RANDOM_BORDER FLAG(12) -#define TURF_DISALLOW_BLOB FLAG(13) - -//Used for floor/wall smoothing -#define SMOOTH_NONE 0 //Smooth only with itself -#define SMOOTH_ALL 1 //Smooth with all of type -#define SMOOTH_WHITELIST 2 //Smooth with a whitelist of subtypes -#define SMOOTH_BLACKLIST 3 //Smooth with all but a blacklist of subtypes - -#define RANGE_TURFS(CENTER, RADIUS) block(locate(max(CENTER.x-(RADIUS), 1), max(CENTER.y-(RADIUS),1), CENTER.z), locate(min(CENTER.x+(RADIUS), world.maxx), min(CENTER.y+(RADIUS), world.maxy), CENTER.z)) diff --git a/code/__defines/weapons.dm b/code/__defines/weapons.dm deleted file mode 100644 index 0be6f0fffc3e7..0000000000000 --- a/code/__defines/weapons.dm +++ /dev/null @@ -1,17 +0,0 @@ -//Quick defines for fire modes -#define FULL_AUTO_300 list(mode_name = "full auto", mode_desc = "300 rounds per minute", mode_type = /datum/firemode/automatic, fire_delay = 8, one_hand_penalty=2) -#define FULL_AUTO_400 list(mode_name = "full auto", mode_desc = "400 rounds per minute", mode_type = /datum/firemode/automatic, fire_delay = 4, one_hand_penalty=3) -#define FULL_AUTO_600 list(mode_name = "full auto", mode_desc = "600 rounds per minute", mode_type = /datum/firemode/automatic, fire_delay = 2, one_hand_penalty=4) -#define FULL_AUTO_800 list(mode_name = "fuller auto", mode_desc = "800 rounds per minute", mode_type = /datum/firemode/automatic, fire_delay = 1, one_hand_penalty=5) - -#define SEMI_AUTO_NODELAY list(mode_name = "semiauto", mode_desc = "Fire as fast as you can pull the trigger", burst=1, fire_delay=0, move_delay=null) - -//Cog firemode -#define BURST_2_ROUND list(mode_name="2-beam bursts", mode_desc = "Short, controlled bursts", burst=2, fire_delay=null, move_delay=2, one_hand_penalty=2) - -#define BURST_3_ROUND list(mode_name="3-round bursts", mode_desc = "Short, controlled bursts", burst=3, fire_delay=null, move_delay=4, one_hand_penalty=3) -#define BURST_5_ROUND list(mode_name="5-round bursts", mode_desc = "Short, controlled bursts", burst=5, fire_delay=null, move_delay=6, one_hand_penalty=3) -#define BURST_8_ROUND list(mode_name="8-round bursts", mode_desc = "Short, uncontrolled bursts", burst=8, fire_delay=null, move_delay=8, one_hand_penalty=4) - -#define MAX_ACCURACY_OFFSET 45 //It's both how big gun recoil can build up, and how hard you can miss -#define RECOIL_REDUCTION_TIME 1 SECOND diff --git a/code/__defines/webhooks.dm b/code/__defines/webhooks.dm deleted file mode 100644 index b6462e74ce129..0000000000000 --- a/code/__defines/webhooks.dm +++ /dev/null @@ -1,12 +0,0 @@ -// Please don't forget to update the WEBHOOKS section of README.md with your new webhook ID. -#define WEBHOOK_ROUNDEND "webhook_roundend" -#define WEBHOOK_ROUNDSTART "webhook_roundstart" -#define WEBHOOK_SUBMAP_LOADED "webhook_submap_loaded" -#define WEBHOOK_CUSTOM_EVENT "webhook_custom_event" -#define WEBHOOK_OOC "webhook_ooc" -#define WEBHOOK_REG "webhook_reg" -#define WEBHOOK_BAN "webhook_ban" -#define WEBHOOK_NOTES "webhook_notes" - -//[INF] -#define WEBHOOK_XENO_WHITELIST "webhook_xeno_whitelist" // xenoWL changes diff --git a/code/__defines/xenoarcheaology.dm b/code/__defines/xenoarcheaology.dm deleted file mode 100644 index 67f75e72f8439..0000000000000 --- a/code/__defines/xenoarcheaology.dm +++ /dev/null @@ -1,57 +0,0 @@ -#define ARCHAEO_BOWL 1 -#define ARCHAEO_URN 2 -#define ARCHAEO_CUTLERY 3 -#define ARCHAEO_STATUETTE 4 -#define ARCHAEO_INSTRUMENT 5 -#define ARCHAEO_KNIFE 6 -#define ARCHAEO_COIN 7 -#define ARCHAEO_HANDCUFFS 8 -#define ARCHAEO_BEARTRAP 9 -#define ARCHAEO_LIGHTER 10 -#define ARCHAEO_BOX 11 -#define ARCHAEO_GASTANK 12 -#define ARCHAEO_TOOL 13 -#define ARCHAEO_METAL 14 -#define ARCHAEO_PEN 15 -#define ARCHAEO_CRYSTAL 16 -#define ARCHAEO_CULTBLADE 17 -#define ARCHAEO_TELEBEACON 18 -#define ARCHAEO_CLAYMORE 19 -#define ARCHAEO_CULTROBES 20 -#define ARCHAEO_SOULSTONE 21 -#define ARCHAEO_SHARD 22 -#define ARCHAEO_RODS 23 -#define ARCHAEO_STOCKPARTS 24 -#define ARCHAEO_KATANA 25 -#define ARCHAEO_LASER 26 -#define ARCHAEO_GUN 27 -#define ARCHAEO_UNKNOWN 28 -#define ARCHAEO_FOSSIL 29 -#define ARCHAEO_SHELL 30 -#define ARCHAEO_PLANT 31 -#define ARCHAEO_REMAINS_HUMANOID 32 -#define ARCHAEO_REMAINS_ROBOT 33 -#define ARCHAEO_REMAINS_XENO 34 -#define ARCHAEO_GASMASK 35 -#define MAX_ARCHAEO 35 - -#define DIGSITE_GARDEN 1 -#define DIGSITE_ANIMAL 2 -#define DIGSITE_HOUSE 3 -#define DIGSITE_TECHNICAL 4 -#define DIGSITE_TEMPLE 5 -#define DIGSITE_WAR 6 - -#define EFFECT_TOUCH 0 -#define EFFECT_AURA 1 -#define EFFECT_PULSE 2 -#define MAX_EFFECT 2 - -#define EFFECT_UNKNOWN 0 -#define EFFECT_ENERGY 1 -#define EFFECT_PSIONIC 2 -#define EFFECT_ELECTRO 3 -#define EFFECT_PARTICLE 4 -#define EFFECT_ORGANIC 5 -#define EFFECT_BLUESPACE 6 -#define EFFECT_SYNTH 7 \ No newline at end of file diff --git a/code/__defines/zmimic.dm b/code/__defines/zmimic.dm deleted file mode 100644 index 25fdcfe323d61..0000000000000 --- a/code/__defines/zmimic.dm +++ /dev/null @@ -1,24 +0,0 @@ -#define TURF_IS_MIMICING(T) (isturf(T) && (T:z_flags & ZM_MIMIC_BELOW)) -#define CHECK_OO_EXISTENCE(OO) if (OO && !TURF_IS_MIMICING(OO.loc)) { qdel(OO); } -#define UPDATE_OO_IF_PRESENT CHECK_OO_EXISTENCE(bound_overlay); if (bound_overlay) { update_above(); } - -// Turf MZ flags. -#define ZM_MIMIC_BELOW 1 // If this turf should mimic the turf on the Z below. -#define ZM_MIMIC_OVERWRITE 2 // If this turf is Z-mimicing, overwrite the turf's appearance instead of using a movable. This is faster, but means the turf cannot have its own appearance (say, edges or a translucent sprite). -#define ZM_ALLOW_LIGHTING 4 // If this turf should permit passage of lighting. -#define ZM_ALLOW_ATMOS 8 // If this turf permits passage of air. -#define ZM_MIMIC_NO_AO 16 // If the turf shouldn't apply regular turf AO and only do Z-mimic AO. -#define ZM_NO_OCCLUDE 32 // Don't occlude below atoms if we're a non-mimic z-turf. - -// Convenience flag. -#define ZM_MIMIC_DEFAULTS (ZM_MIMIC_BELOW|ZM_ALLOW_LIGHTING) - -// For debug purposes, should contain the above defines in ascending order. -GLOBAL_LIST_INIT(mimic_defines, list( - "ZM_MIMIC_BELOW", - "ZM_MIMIC_OVERWRITE", - "ZM_ALLOW_LIGHTING", - "ZM_ALLOW_ATMOS", - "ZM_MIMIC_NO_AO", - "ZM_NO_OCCLUDE" -)) diff --git a/code/__defines/~unit_testing.dm b/code/__defines/~unit_testing.dm deleted file mode 100644 index 4b2caf048cc22..0000000000000 --- a/code/__defines/~unit_testing.dm +++ /dev/null @@ -1,10 +0,0 @@ -/* - * - * This file is used to indicate that Unit Tests are to be ran. - * Do not add anything but the UNIT_TEST definition here as it will be overwritten when running tests. - * - * - * Should you wish to edit set UNIT_TEST to 1 like so: - * #define UNIT_TEST 1 - */ -#define UNIT_TEST 0 diff --git a/code/_global_vars/edible.dm b/code/_global_vars/edible.dm deleted file mode 100644 index 185ab9e0cd3ae..0000000000000 --- a/code/_global_vars/edible.dm +++ /dev/null @@ -1,38 +0,0 @@ - -GLOBAL_LIST_INIT(proteinbar_flavors, list( - "apple 'n pear" = list( - /datum/reagent/drink/juice/apple, - /datum/reagent/drink/juice/pear - ), - "banana nut" = /datum/reagent/drink/juice/banana, - "cappuccino" = list( - /datum/reagent/nutriment/coffee, - /datum/reagent/drink/milk - ), - "casual cupcake" = list( - /datum/reagent/nutriment/sprinkles, - /datum/reagent/nutriment/batter/cakebatter - ), - "chipper cherry" = /datum/reagent/nutriment/cherryjelly, - "choco-lite" = /datum/reagent/nutriment/coco, - "citrus blast" = list( - /datum/reagent/drink/juice/lemon, - /datum/reagent/drink/juice/lime, - /datum/reagent/drink/juice/orange - ), - "classic caramel" = /datum/reagent/sugar, - "delicate denton" = /datum/reagent/drink/milk/soymilk, - "hearty herbal" = list( - /datum/reagent/drink/juice/garlic, - /datum/reagent/drink/juice/onion - ), - "honey buns" = list( - /datum/reagent/nutriment/honey, - /datum/reagent/drink/juice/grape - ), - "powerful peppermint" = /datum/reagent/nutriment/mint, - "magical melons" = list( - /datum/reagent/drink/juice/melon - ), - "mixed berry" = /datum/reagent/drink/juice/berry -)) diff --git a/code/_global_vars/lists/flavor.dm b/code/_global_vars/lists/flavor.dm deleted file mode 100644 index 8a91dc33dfd46..0000000000000 --- a/code/_global_vars/lists/flavor.dm +++ /dev/null @@ -1,98 +0,0 @@ -// Noises made when hit while typing. -GLOBAL_LIST_INIT(hit_appends, list("-OOF", "-ACK", "-UGH", "-HRNK", "-HURGH", "-GLORF")) - -// Some scary sounds. -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. Filled up by sorting junction's New() -GLOBAL_LIST_EMPTY(tagger_locations) - -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")) - -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", - "South", "Slant-ways", "Widdershins", "Rimward", "Expensive", - "Procreatory", "Imperial", "Unidentified", "Immoral", "Carp", "Ork", - "Pete", "Control", "Nettle", "Aspie", "Class", "Crab", "Fist", - "Corrogated","Skeleton","Race", "Fatguy", "Gentleman", "Capitalist", - "Communist", "Bear", "Beard", "Derp", "Space", "Spess", "Star", "Moon", - "System", "Mining", "Neckbeard", "Research", "Supply", "Military", - "Orbital", "Battle", "Science", "Asteroid", "Home", "Production", - "Transport", "Delivery", "Extraplanetary", "Orbital", "Correctional", - "Robot", "Hats", "Pizza")) - -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", - "Complex", "Base", "Facility", "Depot", "Outpost", "Installation", - "Drydock", "Observatory", "Array", "Relay", "Monitor", "Platform", - "Construct", "Hangar", "Prison", "Center", "Port", "Waystation", - "Factory", "Waypoint", "Stopover", "Hub", "HQ", "Office", "Object", - "Fortification", "Colony", "Planet-Cracker", "Roost", "Fat Camp", - "Airstrip")) - -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")) - -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")) - -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")) - -GLOBAL_LIST_INIT(possible_cable_colours, SetupCableColors()) - -/proc/SetupCableColors() - . = list() - - var/invalid_cable_coils = list( - /obj/item/stack/cable_coil/single, - /obj/item/stack/cable_coil/cut, - /obj/item/stack/cable_coil/cyborg, - /obj/item/stack/cable_coil/fabricator, - /obj/item/stack/cable_coil/random - ) - - var/special_name_mappings = list(/obj/item/stack/cable_coil = "Red") - - for(var/coil_type in (typesof(/obj/item/stack/cable_coil) - invalid_cable_coils)) - var/name = special_name_mappings[coil_type] || capitalize(copytext_after_last("[coil_type]", "/")) - - var/obj/item/stack/cable_coil/C = coil_type - var/color = initial(C.color) - - .[name] = color - . = sortAssoc(.) diff --git a/code/_global_vars/lists/locations.dm b/code/_global_vars/lists/locations.dm deleted file mode 100644 index 1af7b15eed663..0000000000000 --- a/code/_global_vars/lists/locations.dm +++ /dev/null @@ -1,18 +0,0 @@ -GLOBAL_LIST_EMPTY(monkeystart) -GLOBAL_LIST_EMPTY(newplayer_start) - -//Spawnpoints. -GLOBAL_LIST_EMPTY(latejoin) -GLOBAL_LIST_EMPTY(latejoin_gateway) -GLOBAL_LIST_EMPTY(latejoin_cryo) -GLOBAL_LIST_EMPTY(latejoin_cyborg) - -GLOBAL_LIST_EMPTY(prisonwarp) // Prisoners go to these -GLOBAL_LIST_EMPTY(tdome1) -GLOBAL_LIST_EMPTY(tdome2) -GLOBAL_LIST_EMPTY(tdomeobserve) -GLOBAL_LIST_EMPTY(tdomeadmin) -GLOBAL_LIST_EMPTY(prisonsecuritywarp) // Prison security goes to these. -GLOBAL_LIST_EMPTY(prisonwarped) // List of players already warped. - -GLOBAL_LIST_EMPTY(awaydestinations) // Away missions. A list of landmarks that the warpgate can take you to. diff --git a/code/_global_vars/lists/logs.dm b/code/_global_vars/lists/logs.dm deleted file mode 100644 index 6f79a5103aafe..0000000000000 --- a/code/_global_vars/lists/logs.dm +++ /dev/null @@ -1,4 +0,0 @@ -GLOBAL_LIST_EMPTY(bombers) -GLOBAL_LIST_EMPTY(admin_log) -GLOBAL_LIST_EMPTY(lastsignalers) // Keeps last 100 signals here in format: "[src] used \ref[src] @ location [src.loc]: [freq]/[code]" -GLOBAL_LIST_EMPTY(lawchanges) // Stores who uploaded laws to which silicon-based lifeform, and what the law was. diff --git a/code/_global_vars/lists/mapping.dm b/code/_global_vars/lists/mapping.dm deleted file mode 100644 index 47bd677e07777..0000000000000 --- a/code/_global_vars/lists/mapping.dm +++ /dev/null @@ -1,32 +0,0 @@ -GLOBAL_LIST_INIT(cardinal, list(NORTH, SOUTH, EAST, WEST)) -GLOBAL_LIST_INIT(cardinalz, list(NORTH, SOUTH, EAST, WEST, UP, DOWN)) -GLOBAL_LIST_INIT(cornerdirs, list(NORTHEAST, NORTHWEST, SOUTHEAST, SOUTHWEST)) -GLOBAL_LIST_INIT(cornerdirsz, list(NORTHEAST, NORTHWEST, SOUTHEAST, SOUTHWEST, NORTH|UP, EAST|UP, WEST|UP, SOUTH|UP, NORTH|DOWN, EAST|DOWN, WEST|DOWN, SOUTH|DOWN)) -GLOBAL_LIST_INIT(alldirs, list(NORTH, SOUTH, EAST, WEST, NORTHEAST, NORTHWEST, SOUTHEAST, SOUTHWEST)) -GLOBAL_LIST_INIT(reverse_dir, list( // reverse_dir[dir] = reverse of dir - 2, 1, 3, 8, 10, 9, 11, 4, 6, 5, 7, 12, 14, 13, 15, - 32, 34, 33, 35, 40, 42, 41, 43, 36, 38, 37, 39, 44, 46, 45, 47, - 16, 18, 17, 19, 24, 26, 25, 27, 20, 22, 21, 23, 28, 30, 29, 31, - 48, 50, 49, 51, 56, 58, 57, 59, 52, 54, 53, 55, 60, 62, 61, 63 -)) - -GLOBAL_LIST_INIT(flip_dir, list( // flip_dir[dir] = 180 degree rotation of dir. Unlike reverse_dir, UP remains UP & DOWN remains DOWN. - 2, 1, 3, 8, 10, 9, 11, 4, 6, 5, 7, 12, 14, 13, 15, - 16, 18, 17, 19, 24, 26, 25, 27, 20, 22, 21, 23, 28, 30, 29, 31, // UP - Same as first line but +16 - 32, 34, 33, 35, 40, 42, 41, 43, 36, 38, 37, 39, 44, 46, 45, 47, // DOWN - Same as first line but +32 - 48, 50, 49, 51, 56, 58, 57, 59, 52, 54, 53, 55, 60, 62, 61, 63 // UP+DOWN - Same as first line but +48 -)) - -GLOBAL_LIST_INIT(cw_dir, list( // cw_dir[dir] = clockwise rotation of dir. Unlike reverse_dir, UP remains UP & DOWN remains DOWN. - 4, 8, 12, 2, 6, 10, 14, 1, 5, 9, 13, 3, 7, 11, 15, - 16, 20, 24, 28, 18, 22, 26, 30, 17, 21, 25, 19, 29, 23, 27, 31, // UP - Same as first line but +16 - 32, 36, 40, 44, 34, 38, 42, 46, 33, 37, 41, 45, 35, 39, 43, 47, // DOWN - Same as first line but +32 - 48, 52, 56, 40, 50, 54, 58, 62, 49, 53, 57, 61, 51, 55, 59, 63 // UP+DOWN - Same as first line but +48 -)) - -GLOBAL_LIST_INIT(ccw_dir, list( // ccw_dir[dir] = counter-clockwise rotation of dir. Unlike reverse_dir, UP remains UP & DOWN remains DOWN. - 8, 4, 12, 1, 9, 5, 13, 2, 10, 6, 14, 3, 11, 7, 15, - 16, 24, 20, 28, 17, 25, 21, 29, 18, 26, 22, 30, 19, 27, 23, 31, // UP - Same as first line but +16 - 32, 40, 36, 44, 33, 41, 37, 45, 34, 42, 38, 46, 35, 43, 39, 47, // DOWN - Same as first line but +32 - 48, 56, 52, 60, 49, 57, 53, 61, 50, 58, 54, 62, 51, 59, 55, 63 // UP+DOWN - Same as first line but +48 -)) diff --git a/code/_global_vars/lists/names.dm b/code/_global_vars/lists/names.dm deleted file mode 100644 index c2570e230ba16..0000000000000 --- a/code/_global_vars/lists/names.dm +++ /dev/null @@ -1,16 +0,0 @@ -GLOBAL_LIST_INIT(ai_names, world.file2list("config/names/ai.txt")) -GLOBAL_LIST_INIT(wizard_first, world.file2list("config/names/wizardfirst.txt")) -GLOBAL_LIST_INIT(wizard_second, world.file2list("config/names/wizardsecond.txt")) -GLOBAL_LIST_INIT(ninja_titles, world.file2list("config/names/ninjatitle.txt")) -GLOBAL_LIST_INIT(ninja_names, world.file2list("config/names/ninjaname.txt")) -GLOBAL_LIST_INIT(commando_names, world.file2list("config/names/death_commando.txt")) -GLOBAL_LIST_INIT(first_names_male, world.file2list("config/names/first_male.txt")) -GLOBAL_LIST_INIT(first_names_female, world.file2list("config/names/first_female.txt")) -GLOBAL_LIST_INIT(last_names, world.file2list("config/names/last.txt")) -GLOBAL_LIST_INIT(clown_names, world.file2list("config/names/clown.txt")) - - -GLOBAL_LIST_INIT(verbs, world.file2list("config/names/verbs.txt")) -GLOBAL_LIST_INIT(adjectives, world.file2list("config/names/adjectives.txt")) -//loaded on startup because of " -//would include in rsc if ' was used diff --git a/code/_global_vars/lists/objects.dm b/code/_global_vars/lists/objects.dm deleted file mode 100644 index 84f043c2886b6..0000000000000 --- a/code/_global_vars/lists/objects.dm +++ /dev/null @@ -1,22 +0,0 @@ -GLOBAL_LIST_EMPTY(med_hud_users) // List of all entities using a medical HUD. -GLOBAL_LIST_EMPTY(sec_hud_users) // List of all entities using a security HUD. -GLOBAL_LIST_EMPTY(jani_hud_users) -GLOBAL_LIST_EMPTY(hud_icon_reference) - -GLOBAL_LIST_EMPTY(listening_objects) // List of objects that need to be able to hear, used to avoid recursive searching through contents. - -GLOBAL_LIST_EMPTY(global_mutations) // List of hidden mutation things. - -GLOBAL_LIST_EMPTY(reg_dna) - -GLOBAL_LIST_EMPTY(global_map) - -// Announcer intercom, because too much stuff creates an intercom for one message then hard del()s it. Also headset, for things that should be affected by comms outages. -GLOBAL_DATUM_INIT(global_announcer, /obj/item/device/radio/announcer, new) -GLOBAL_DATUM_INIT(global_headset, /obj/item/device/radio/announcer/subspace, new) - -GLOBAL_DATUM_INIT(universe, /datum/universal_state, new) - -GLOBAL_LIST_INIT(full_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_EMPTY(meteor_list) diff --git a/code/_global_vars/lists/times.dm b/code/_global_vars/lists/times.dm deleted file mode 100644 index ceaaba10e1597..0000000000000 --- a/code/_global_vars/lists/times.dm +++ /dev/null @@ -1 +0,0 @@ -GLOBAL_LIST_INIT(days_per_month, acquire_days_per_month()) diff --git a/code/_global_vars/logging.dm b/code/_global_vars/logging.dm deleted file mode 100644 index 6f6dc2e514545..0000000000000 --- a/code/_global_vars/logging.dm +++ /dev/null @@ -1,8 +0,0 @@ -var/global/datum/configuration/config -var/global/diary - - -GLOBAL_VAR(log_directory) -GLOBAL_PROTECT(log_directory) -GLOBAL_VAR(world_qdel_log) -GLOBAL_PROTECT(world_qdel_log) diff --git a/code/_global_vars/mapping.dm b/code/_global_vars/mapping.dm deleted file mode 100644 index 11cbcd7ea49a5..0000000000000 --- a/code/_global_vars/mapping.dm +++ /dev/null @@ -1 +0,0 @@ -GLOBAL_LIST_EMPTY(ruin_landmarks) \ No newline at end of file diff --git a/code/_global_vars/misc.dm b/code/_global_vars/misc.dm deleted file mode 100644 index 45247b7a67374..0000000000000 --- a/code/_global_vars/misc.dm +++ /dev/null @@ -1,22 +0,0 @@ -GLOBAL_LIST_EMPTY(all_observable_events) - -// True if net rebuild will be called manually after an event. -GLOBAL_VAR_INIT(defer_powernet_rebuild, FALSE) - -// Those networks can only be accessed by pre-existing terminals. AIs and new terminals can't use them. -GLOBAL_LIST_INIT(restricted_camera_networks, list(\ - NETWORK_ERT,\ - NETWORK_MERCENARY,\ - NETWORK_CRESCENT,\ - "Secret"\ -)) - -GLOBAL_VAR_INIT(stat_flags_planted, 0) - -GLOBAL_VAR_INIT(stat_flora_scanned, 0) - -GLOBAL_LIST_EMPTY(stat_fauna_scanned) - -GLOBAL_VAR_INIT(extracted_slime_cores_amount, 0) - -GLOBAL_VAR_INIT(crew_death_count, 0) diff --git a/code/_global_vars/mobs.dm b/code/_global_vars/mobs.dm deleted file mode 100644 index 3e7b7289da7d3..0000000000000 --- a/code/_global_vars/mobs.dm +++ /dev/null @@ -1,12 +0,0 @@ -GLOBAL_LIST_EMPTY(clients) //all clients -GLOBAL_LIST_EMPTY(admins) //all clients whom are admins -GLOBAL_PROTECT(admins) -GLOBAL_LIST_EMPTY(ckey_directory) //all ckeys with associated client - - -GLOBAL_LIST_EMPTY(player_list) //List of all mobs **with clients attached**. Excludes /mob/new_player -GLOBAL_LIST_EMPTY(human_mob_list) //List of all human mobs and sub-types, including clientless -GLOBAL_LIST_EMPTY(silicon_mob_list) //List of all silicon mobs, including clientless -GLOBAL_LIST_EMPTY(living_mob_list_) //List of all alive mobs, including clientless. Excludes /mob/new_player -GLOBAL_LIST_EMPTY(dead_mob_list_) //List of all dead mobs, including clientless. Excludes /mob/new_player -GLOBAL_LIST_EMPTY(ghost_mob_list) //List of all ghosts, including clientless. Excludes /mob/new_player diff --git a/code/_global_vars/radio.dm b/code/_global_vars/radio.dm deleted file mode 100644 index d3ec7f7b5eead..0000000000000 --- a/code/_global_vars/radio.dm +++ /dev/null @@ -1,7 +0,0 @@ -// These globals are the worst - -GLOBAL_LIST_INIT(default_medbay_channels, list( - num2text(PUB_FREQ) = list(), - num2text(MED_FREQ) = list(access_medical_equip), - num2text(MED_I_FREQ) = list(access_medical_equip) -)) diff --git a/code/_global_vars/sensitive.dm b/code/_global_vars/sensitive.dm deleted file mode 100644 index 4d4897d20bacf..0000000000000 --- a/code/_global_vars/sensitive.dm +++ /dev/null @@ -1,12 +0,0 @@ -// MySQL configuration -var/global/sqlenabled = FALSE -var/global/sqladdress = "" -var/global/sqlport = "" -var/global/sqldb = "" -var/global/sqllogin = "" -var/global/sqlpass = "" -var/global/sqlfdbkdb = "" -var/global/sqlfdbklogin = "" -var/global/sqlfdbkpass = "" -var/global/DBConnection/dbcon = new -var/global/DBConnection/dbcon_old = new diff --git a/code/_helpers/_global_objects.dm b/code/_helpers/_global_objects.dm deleted file mode 100644 index a5674d11482e9..0000000000000 --- a/code/_helpers/_global_objects.dm +++ /dev/null @@ -1,20 +0,0 @@ -var/global/datum/gear_tweak/color/gear_tweak_free_color_choice_ -/proc/gear_tweak_free_color_choice() - if(!gear_tweak_free_color_choice_) gear_tweak_free_color_choice_ = new() - return gear_tweak_free_color_choice_ - -//var/datum/gear_tweak/color/gear_tweak_free_color_choice_ -//#define gear_tweak_free_color_choice (gear_tweak_free_color_choice_ ? gear_tweak_free_color_choice_ : (gear_tweak_free_color_choice_ = new())) -// Might work in 511 assuming x=y=5 gets implemented. - -var/global/datum/gear_tweak/custom_name/gear_tweak_free_name_ - -/proc/gear_tweak_free_name() - if(!gear_tweak_free_name_) gear_tweak_free_name_ = new() - return gear_tweak_free_name_ - -var/global/datum/gear_tweak/custom_desc/gear_tweak_free_desc_ - -/proc/gear_tweak_free_desc() - if(!gear_tweak_free_desc_) gear_tweak_free_desc_ = new() - return gear_tweak_free_desc_ diff --git a/code/_helpers/animations.dm b/code/_helpers/animations.dm deleted file mode 100644 index f69080aba8a03..0000000000000 --- a/code/_helpers/animations.dm +++ /dev/null @@ -1,18 +0,0 @@ -/proc/remove_images_from_clients(image/I, list/show_to) - for(var/client/C in show_to) - C.images -= I - qdel(I) - -/proc/animate_speech_bubble(image/I, list/show_to, duration) - var/matrix/M = matrix() - M.Scale(0,0) - I.transform = M - I.alpha = 0 - for(var/client/C in show_to) - C.images += I - animate(I, transform = 0, alpha = 255, time = 2, easing = EASE_IN) - addtimer(CALLBACK(GLOBAL_PROC, /.proc/fade_out, I, show_to), duration - 5) - -/proc/fade_out(image/I, list/show_to) - animate(I, alpha = 0, time = 5, easing = EASE_IN) - addtimer(CALLBACK(GLOBAL_PROC, /.proc/remove_images_from_clients, I, show_to), 5) diff --git a/code/_helpers/areas.dm b/code/_helpers/areas.dm deleted file mode 100644 index f07f9c762d236..0000000000000 --- a/code/_helpers/areas.dm +++ /dev/null @@ -1,131 +0,0 @@ -/* - List generation helpers -*/ -/proc/get_filtered_areas(var/list/predicates = list(/proc/is_area_with_turf)) - . = list() - if(!predicates) - return - if(!islist(predicates)) - predicates = list(predicates) - for(var/area/A) - if(all_predicates_true(list(A), predicates)) - . += A - -/proc/get_area_turfs(var/area/A, var/list/predicates) - . = new/list() - A = istype(A) ? A : locate(A) - if(!A) - return - for(var/turf/T in A.contents) - if(!predicates || all_predicates_true(list(T), predicates)) - . += T - -/proc/get_subarea_turfs(var/area/A, var/list/predicates) - . = new/list() - A = istype(A) ? A.type : A - if(!ispath(A)) - return - for(var/sub_area_type in typesof(A)) - var/area/sub_area = locate(sub_area_type) - for(var/turf/T in sub_area.contents) - if(!predicates || all_predicates_true(list(T), predicates)) - . += T - -/proc/group_areas_by_name(var/list/predicates) - . = list() - for(var/area/A in get_filtered_areas(predicates)) - group_by(., A.name, A) - -/proc/group_areas_by_z_level(var/list/predicates) - . = list() - for(var/area/A in get_filtered_areas(predicates)) - group_by(., pad_left(num2text(A.z), 3, "0"), A) - -/* - Pick helpers -*/ -/proc/pick_subarea_turf(var/areatype, var/list/predicates) - var/list/turfs = get_subarea_turfs(areatype, predicates) - if(LAZYLEN(turfs)) - return pick(turfs) - -/proc/pick_area_turf(var/areatype, var/list/predicates) - var/list/turfs = get_area_turfs(areatype, predicates) - if(turfs && turfs.len) - return pick(turfs) - -/proc/pick_area(var/list/predicates) - var/list/areas = get_filtered_areas(predicates) - if(LAZYLEN(areas)) - . = pick(areas) - -/proc/pick_area_and_turf(var/list/area_predicates, var/list/turf_predicates) - var/list/areas = get_filtered_areas(area_predicates) - // We loop over all area candidates, until we finally get a valid turf or run out of areas - while(!. && length(areas)) - var/area/A = pick_n_take(areas) - . = pick_area_turf(A, turf_predicates) - -/proc/pick_area_turf_in_connected_z_levels(var/list/area_predicates, var/list/turf_predicates, var/z_level) - area_predicates = area_predicates.Copy() - - var/z_levels = GetConnectedZlevels(z_level) - area_predicates[/proc/area_belongs_to_zlevels] = z_levels - return pick_area_and_turf(area_predicates, turf_predicates) - -/* - Predicate Helpers -*/ -/proc/area_belongs_to_zlevels(var/area/A, var/list/z_levels) - return A && (A.z in z_levels) - -/proc/is_station_area(var/area/A) - return A && (isStationLevel(A.z)) - -/proc/is_contact_area(var/area/A) - return A && (isContactLevel(A.z)) - -/proc/is_player_area(var/area/A) - return A && (isPlayerLevel(A.z)) - -/proc/is_not_space_area(var/area/A) - . = !istype(A,/area/space) - -/proc/is_not_shuttle_area(var/area/A) - . = !istype(A,/area/shuttle) - -/proc/is_area_with_turf(var/area/A) - return A && (isnum(A.x)) - -/proc/is_area_without_turf(var/area/A) - . = !is_area_with_turf(A) - -/proc/is_maint_area(var/area/A) - . = istype(A,/area/maintenance) - -/proc/is_not_maint_area(var/area/A) - . = !is_maint_area(A) - -/proc/is_coherent_area(var/area/A) - return !is_type_in_list(A, GLOB.using_map.area_coherency_test_exempt_areas) - -GLOBAL_LIST_INIT(is_station_but_not_space_or_shuttle_area, list(/proc/is_station_area, /proc/is_not_space_area, /proc/is_not_shuttle_area)) - -GLOBAL_LIST_INIT(is_contact_but_not_space_or_shuttle_area, list(/proc/is_contact_area, /proc/is_not_space_area, /proc/is_not_shuttle_area)) - -GLOBAL_LIST_INIT(is_player_but_not_space_or_shuttle_area, list(/proc/is_player_area, /proc/is_not_space_area, /proc/is_not_shuttle_area)) - -GLOBAL_LIST_INIT(is_station_area, list(/proc/is_station_area)) - -GLOBAL_LIST_INIT(is_station_and_maint_area, list(/proc/is_station_area, /proc/is_maint_area)) - -GLOBAL_LIST_INIT(is_station_but_not_maint_area, list(/proc/is_station_area, /proc/is_not_maint_area)) - -/* - Misc Helpers -*/ -#define teleportlocs area_repository.get_areas_by_name_and_coords(GLOB.is_player_but_not_space_or_shuttle_area) -#define stationlocs area_repository.get_areas_by_name(GLOB.is_player_but_not_space_or_shuttle_area) -#define wizteleportlocs area_repository.get_areas_by_name(GLOB.is_station_area) -#define maintlocs area_repository.get_areas_by_name(GLOB.is_station_and_maint_area) -#define wizportallocs area_repository.get_areas_by_name(GLOB.is_station_but_not_space_or_shuttle_area) diff --git a/code/_helpers/atmospherics.dm b/code/_helpers/atmospherics.dm deleted file mode 100644 index 4086f522fd554..0000000000000 --- a/code/_helpers/atmospherics.dm +++ /dev/null @@ -1,15 +0,0 @@ -/obj/proc/analyze_gases(var/obj/A, var/mob/user, mode) - user.visible_message("\The [user] has used \an [src] on \the [A].") - A.add_fingerprint(user) - - var/air_contents = A.return_air() - if(!air_contents) - to_chat(user, "Your [src] flashes a red light as it fails to analyze \the [A].") - return 0 - - var/list/result = atmosanalyzer_scan(A, air_contents, mode) - print_atmos_analysis(user, result) - return 1 - -/proc/print_atmos_analysis(user, var/list/result) - to_chat(user, SPAN_NOTICE("[result]")) diff --git a/code/_helpers/atom_movables.dm b/code/_helpers/atom_movables.dm deleted file mode 100644 index 73faec4064349..0000000000000 --- a/code/_helpers/atom_movables.dm +++ /dev/null @@ -1,63 +0,0 @@ -/proc/get_turf_pixel(atom/movable/AM) - if(!istype(AM)) - return - - //Find AM's matrix so we can use it's X/Y pixel shifts - var/matrix/M = matrix(AM.transform) - - var/pixel_x_offset = AM.pixel_x + M.get_x_shift() - var/pixel_y_offset = AM.pixel_y + M.get_y_shift() - - //Irregular objects - if(AM.bound_height != world.icon_size || AM.bound_width != world.icon_size) - var/icon/AMicon = icon(AM.icon, AM.icon_state) - pixel_x_offset += ((AMicon.Width()/world.icon_size)-1)*(world.icon_size*0.5) - pixel_y_offset += ((AMicon.Height()/world.icon_size)-1)*(world.icon_size*0.5) - qdel(AMicon) - - //DY and DX - var/rough_x = round(round(pixel_x_offset,world.icon_size)/world.icon_size) - var/rough_y = round(round(pixel_y_offset,world.icon_size)/world.icon_size) - - //Find coordinates - var/turf/T = get_turf(AM) //use AM's turfs, as it's coords are the same as AM's AND AM's coords are lost if it is inside another atom - var/final_x = T.x + rough_x - var/final_y = T.y + rough_y - - if(final_x || final_y) - return locate(final_x, final_y, T.z) - -// Walks up the loc tree until it finds a holder of the given holder_type -/proc/get_holder_of_type(atom/A, holder_type) - if(!istype(A)) return - for(A, A && !istype(A, holder_type), A=A.loc); - return A - -/atom/movable/proc/throw_at_random(var/include_own_turf, var/maxrange, var/speed) - var/list/turfs = trange(maxrange, src) - if(!maxrange) - maxrange = 1 - - if(!include_own_turf) - turfs -= get_turf(src) - if (length(turfs)) - throw_at(pick(turfs), maxrange, speed) - -/atom/movable/proc/do_simple_ranged_interaction(var/mob/user) - return FALSE - -/atom/movable/hitby(var/atom/movable/AM) - ..() - if(density && prob(50)) - do_simple_ranged_interaction() - -/proc/get_atom_closest_to_atom(var/atom/a, var/list/possibilities) - if(!possibilities || !possibilities.len) - return null - var/closest_distance = get_dist(a, possibilities[1]) - . = possibilities[1] - for(var/p in (possibilities - possibilities[1])) - var/dist = get_dist(a, p) - if(dist < closest_distance) - closest_distance = dist - . = p \ No newline at end of file diff --git a/code/_helpers/builtin_proc_callers.dm b/code/_helpers/builtin_proc_callers.dm deleted file mode 100644 index eb59cb3164bfc..0000000000000 --- a/code/_helpers/builtin_proc_callers.dm +++ /dev/null @@ -1,6 +0,0 @@ -/* - You cannot call built-in BYOND methods directly using call()(), hence these helpers -*/ - -/proc/prob_call(var/probability) - return prob(probability) diff --git a/code/_helpers/client.dm b/code/_helpers/client.dm deleted file mode 100644 index 8b855112f7f4e..0000000000000 --- a/code/_helpers/client.dm +++ /dev/null @@ -1,51 +0,0 @@ -/* - Helpers related to /client -*/ - - -/// Duck check to see if text looks like a ckey -/proc/valid_ckey(text) - var/static/regex/matcher = new (@"^[a-z0-9]{1,30}$") - return matcher.Find_char(text) - - -/// Duck check to see if text looks like a key -/proc/valid_key(text) - var/static/regex/matcher = new (@"^[0-9A-Za-z][0-9A-Za-z_\. -]{2,29}$") - return matcher.Find_char(text) - - -/// Get the client associated with ckey text if it is currently connected -/proc/ckey2client(text) - if (valid_ckey(text)) - for (var/client/C as anything in GLOB.clients) - if (C.ckey == text) - return C - - -/// Get the client associated with key text if it is currently connected -/proc/key2client(text) - if (valid_key(text)) - for (var/client/C as anything in GLOB.clients) - if (C.key == text) - return C - - -/// Null, or a client if thing is a client, a mob with a client, a connected ckey, or null -/proc/resolve_client(client/thing) - if (istype(thing)) - return thing - if (!thing) - thing = usr - if (ismob(thing)) - var/mob/M = thing - return M.client - return ckey2client(thing) - - -/// Null or a client from the list of connected clients, chosen by actor if actor is valid -/proc/select_client(client/actor, message = "Connected clients:", title = "Select Client") - actor = resolve_client(actor) - if (!actor) - return - return input(actor, message, title) as null | anything in GLOB.clients diff --git a/code/_helpers/cmp.dm b/code/_helpers/cmp.dm deleted file mode 100644 index 5985f1f5f47ba..0000000000000 --- a/code/_helpers/cmp.dm +++ /dev/null @@ -1,101 +0,0 @@ -/proc/cmp_appearance_data(var/datum/appearance_data/a, var/datum/appearance_data/b) - return b.priority - a.priority - -/proc/cmp_camera_ctag_asc(var/obj/machinery/camera/a, var/obj/machinery/camera/b) - return sorttext(b.c_tag, a.c_tag) - -/proc/cmp_camera_ctag_dsc(var/obj/machinery/camera/a, var/obj/machinery/camera/b) - return sorttext(a.c_tag, b.c_tag) - -/proc/cmp_crew_sensor_modifier(var/crew_sensor_modifier/a, var/crew_sensor_modifier/b) - return b.priority - a.priority - -/proc/cmp_follow_holder(var/datum/follow_holder/a, var/datum/follow_holder/b) - if(a.sort_order == b.sort_order) - return sorttext(b.get_name(), a.get_name()) - - return a.sort_order - b.sort_order - -/proc/cmp_name_or_type_asc(atom/a, atom/b) - return sorttext(istype(b) || ("name" in b.vars) ? b.name : b.type, istype(a) || ("name" in a.vars) ? a.name : a.type) - -/proc/cmp_name_asc(atom/a, atom/b) - return sorttext(b.name, a.name) - -/proc/cmp_name_dsc(atom/a, atom/b) - return sorttext(a.name, b.name) - -/proc/cmp_numeric_asc(a,b) - return a - b - -/proc/cmp_numeric_dsc(a,b) - return b - a - -/proc/cmp_subsystem_display(datum/controller/subsystem/a, datum/controller/subsystem/b) - return sorttext(b.name, a.name) - -/proc/cmp_subsystem_init(datum/controller/subsystem/a, datum/controller/subsystem/b) - var/a_init_order = ispath(a) ? initial(a.init_order) : a.init_order - var/b_init_order = ispath(b) ? initial(b.init_order) : b.init_order - - return b_init_order - a_init_order //uses initial() so it can be used on types - -/proc/cmp_subsystem_priority(datum/controller/subsystem/a, datum/controller/subsystem/b) - return a.priority - b.priority - -/proc/cmp_text_asc(a,b) - return sorttext(b, a) - -/proc/cmp_text_dsc(a,b) - return sorttext(a, b) - -/proc/cmp_qdel_item_time(datum/qdel_item/A, datum/qdel_item/B) - . = B.hard_delete_time - A.hard_delete_time - if (!.) - . = B.destroy_time - A.destroy_time - if (!.) - . = B.failures - A.failures - if (!.) - . = B.qdels - A.qdels - -/proc/cmp_ruincost_priority(datum/map_template/ruin/A, datum/map_template/ruin/B) - return initial(A.spawn_cost) - initial(B.spawn_cost) - -/proc/cmp_timer(datum/timedevent/a, datum/timedevent/b) - return a.timeToRun - b.timeToRun - -/proc/cmp_clientcolor_priority(datum/client_color/A, datum/client_color/B) - return B.priority - A.priority - -/proc/cmp_power_component_priority(obj/item/stock_parts/power/A, obj/item/stock_parts/power/B) - return B.priority - A.priority - -/proc/cmp_fusion_reaction_asc(var/decl/fusion_reaction/A, var/decl/fusion_reaction/B) - return A.priority - B.priority - -/proc/cmp_fusion_reaction_des(var/decl/fusion_reaction/A, var/decl/fusion_reaction/B) - return B.priority - A.priority - -/proc/cmp_program(var/datum/computer_file/program/A, var/datum/computer_file/program/B) - return cmp_text_asc(A.filedesc, B.filedesc) - -/proc/cmp_emails_asc(var/datum/computer_file/data/email_account/A, var/datum/computer_file/data/email_account/B) - return cmp_text_asc(A.login,B.login) - -/proc/cmp_planelayer(atom/A, atom/B) - return (B.plane - A.plane) || (B.layer - A.layer) - -/proc/cmp_mob_key(mob/A, mob/B) - if (!A && !B) - return 0 - - if (!A && B) - return -1 - - if (A && !B) - return 1 - - return sorttext(B.key, A.key) - -/proc/cmp_marking_order(list/A, list/B) - return A[1] - B[1][1] diff --git a/code/_helpers/functional.dm b/code/_helpers/functional.dm deleted file mode 100644 index b67abc49deaf0..0000000000000 --- a/code/_helpers/functional.dm +++ /dev/null @@ -1,82 +0,0 @@ -#define PREPARE_INPUT \ - predicates = istype(predicates) ? predicates : list(predicates);\ - input = istype(input) ? input : list(input); - -#define PREPARE_ARGUMENTS \ - var/extra_arguments = predicates[predicate];\ - var/list/predicate_input = input;\ - if(LAZYLEN(extra_arguments)) {\ - predicate_input = predicate_input.Copy();\ - predicate_input += list(extra_arguments);\ - } - -/proc/all_predicates_true(var/list/input, var/list/predicates) - PREPARE_INPUT - for(var/predicate in predicates) - PREPARE_ARGUMENTS - if(!call(predicate)(arglist(predicate_input))) - return FALSE - return TRUE - -/proc/any_predicate_true(var/list/input, var/list/predicates) - PREPARE_INPUT - if(!predicates.len) - return TRUE - - for(var/predicate in predicates) - PREPARE_ARGUMENTS - if(call(predicate)(arglist(predicate_input))) - return TRUE - return FALSE - -#undef PREPARE_ARGUMENTS -#undef PREPARE_INPUT - -/proc/is_atom_predicate(var/value, var/feedback_receiver) - . = isatom(value) - if(!. && feedback_receiver) - to_chat(feedback_receiver, "Value must be an atom.") - -/proc/is_num_predicate(var/value, var/feedback_receiver) - . = isnum(value) - if(!. && feedback_receiver) - to_chat(feedback_receiver, "Value must be a numeral.") - -/proc/is_text_predicate(var/value, var/feedback_receiver) - . = !value || istext(value) - if(!. && feedback_receiver) - to_chat(feedback_receiver, "Value must be a text.") - -/proc/is_dir_predicate(var/value, var/feedback_receiver) - . = (value in GLOB.alldirs) - if(!. && feedback_receiver) - to_chat(feedback_receiver, "Value must be a direction.") - -/proc/is_strict_bool_predicate(value, feedback_receiver) - . = (value == TRUE || value == FALSE) - if (!. && feedback_receiver) - to_chat(feedback_receiver, SPAN_WARNING("Value must be a boolean (Strict).")) - -/proc/can_locate(var/atom/container, var/container_thing) - return (locate(container_thing) in container) - -/proc/can_not_locate(var/atom/container, var/container_thing) - return !(locate(container_thing) in container) // We could just do !can_locate(container, container_thing) but BYOND is pretty awful when it comes to deep proc calls - - -/proc/where(var/list/list_to_filter, var/list/predicates, var/list/extra_predicate_input) - . = list() - for(var/entry in list_to_filter) - var/predicate_input - if(extra_predicate_input) - predicate_input = (list(entry) + extra_predicate_input) - else - predicate_input = entry - - if(all_predicates_true(predicate_input, predicates)) - . += entry - -/proc/map(var/list/list_to_map, var/map_proc) - . = list() - for(var/entry in list_to_map) - . += call(map_proc)(entry) diff --git a/code/_helpers/game.dm b/code/_helpers/game.dm deleted file mode 100644 index 9484c62beff3e..0000000000000 --- a/code/_helpers/game.dm +++ /dev/null @@ -1,565 +0,0 @@ -//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:31 - -/proc/is_on_same_plane_or_station(var/z1, var/z2) - if(z1 == z2) - return 1 - if((z1 in GLOB.using_map.station_levels) && (z2 in GLOB.using_map.station_levels)) - return 1 - return 0 - -/proc/max_default_z_level() - var/max_z = 0 - for(var/z in GLOB.using_map.station_levels) - max_z = max(z, max_z) - for(var/z in GLOB.using_map.admin_levels) - max_z = max(z, max_z) - for(var/z in GLOB.using_map.player_levels) - max_z = max(z, max_z) - return max_z - -/proc/living_observers_present(var/list/zlevels) - if(LAZYLEN(zlevels)) - for(var/mob/M in GLOB.player_list) //if a tree ticks on the empty zlevel does it really tick - if(M.stat != DEAD) //(no it doesn't) - var/turf/T = get_turf(M) - if(T && (T.z in zlevels)) - return TRUE - return FALSE - -/proc/get_area(O) - var/turf/loc = get_turf(O) - if(loc) - var/area/res = loc.loc - .= res - -/proc/get_area_name(N) //get area by its name - for(var/area/A in world) - if(A.name == N) - return A - return 0 - -/proc/get_area_master(const/O) - var/area/A = get_area(O) - if (isarea(A)) - return A - -/proc/in_range(atom/source, mob/user) - if(get_dist(source, user) <= 1) - return TRUE - - return FALSE //not in range and not telekinetic - -// Like view but bypasses luminosity check - -/proc/hear(var/range, var/atom/source) - - var/lum = source.luminosity - source.luminosity = 6 - - var/list/heard = view(range, source) - source.luminosity = lum - - return heard - -/proc/isStationLevel(var/level) - return level in GLOB.using_map.station_levels - -/proc/isNotStationLevel(var/level) - return !isStationLevel(level) - -/proc/isPlayerLevel(var/level) - return level in GLOB.using_map.player_levels - -/proc/isAdminLevel(var/level) - return level in GLOB.using_map.admin_levels - -/proc/isNotAdminLevel(var/level) - return !isAdminLevel(level) - -/proc/isContactLevel(var/level) - return level in GLOB.using_map.contact_levels - -/proc/isEscapeLevel(var/level) - return level in GLOB.using_map.escape_levels - -/proc/circlerange(center=usr,radius=3) - - var/turf/centerturf = get_turf(center) - var/list/turfs = new/list() - var/rsq = radius * (radius+0.5) - - for(var/atom/T in range(radius, centerturf)) - var/dx = T.x - centerturf.x - var/dy = T.y - centerturf.y - if(dx*dx + dy*dy <= rsq) - turfs += T - - //turfs += centerturf - return turfs - -/proc/circleview(center=usr,radius=3) - - var/turf/centerturf = get_turf(center) - var/list/atoms = new/list() - var/rsq = radius * (radius+0.5) - - for(var/atom/A in view(radius, centerturf)) - var/dx = A.x - centerturf.x - var/dy = A.y - centerturf.y - if(dx*dx + dy*dy <= rsq) - atoms += A - - //turfs += centerturf - return atoms - -/proc/trange(rad = 0, turf/centre = null) //alternative to range (ONLY processes turfs and thus less intensive) - if(!centre) - return - - var/turf/x1y1 = locate(((centre.x-rad)<1 ? 1 : centre.x-rad),((centre.y-rad)<1 ? 1 : centre.y-rad),centre.z) - var/turf/x2y2 = locate(((centre.x+rad)>world.maxx ? world.maxx : centre.x+rad),((centre.y+rad)>world.maxy ? world.maxy : centre.y+rad),centre.z) - return block(x1y1,x2y2) - -/proc/get_dist_euclidian(atom/Loc1 as turf|mob|obj,atom/Loc2 as turf|mob|obj) - var/dx = Loc1.x - Loc2.x - var/dy = Loc1.y - Loc2.y - - var/dist = sqrt(dx**2 + dy**2) - - return dist - -/proc/circlerangeturfs(center=usr,radius=3) - var/turf/centerturf = get_turf(center) - . = list() - if(!centerturf) - return - - var/rsq = radius * (radius+0.5) - - for(var/turf/T in range(radius, centerturf)) - var/dx = T.x - centerturf.x - var/dy = T.y - centerturf.y - if(dx*dx + dy*dy <= rsq) - . += T - -/proc/circleviewturfs(center=usr,radius=3) //Is there even a diffrence between this proc and circlerangeturfs()? - - var/turf/centerturf = get_turf(center) - var/list/turfs = new/list() - var/rsq = radius * (radius+0.5) - - for(var/turf/T in view(radius, centerturf)) - var/dx = T.x - centerturf.x - var/dy = T.y - centerturf.y - if(dx*dx + dy*dy <= rsq) - turfs += T - return turfs - - - -//var/debug_mob = 0 - -// Will recursively loop through an atom's contents and check for mobs, then it will loop through every atom in that atom's contents. -// It will keep doing this until it checks every content possible. This will fix any problems with mobs, that are inside objects, -// being unable to hear people due to being in a box within a bag. - -/proc/recursive_content_check(var/atom/O, var/list/L = list(), var/recursion_limit = 3, var/client_check = 1, var/sight_check = 1, var/include_mobs = 1, var/include_objects = 1) - - if(!recursion_limit) - return L - - for(var/I in O.contents) - - if(ismob(I)) - if(!sight_check || isInSight(I, O)) - L |= recursive_content_check(I, L, recursion_limit - 1, client_check, sight_check, include_mobs, include_objects) - if(include_mobs) - if(client_check) - var/mob/M = I - if(M.client) - L |= M - else - L |= I - - else if(isobj(I)) - if(!sight_check || isInSight(I, O)) - L |= recursive_content_check(I, L, recursion_limit - 1, client_check, sight_check, include_mobs, include_objects) - if(include_objects) - L |= I - - return L - -// Returns a list of mobs and/or objects in range of R from source. Used in radio and say code. - -/proc/get_mobs_or_objects_in_view(var/R, var/atom/source, var/include_mobs = 1, var/include_objects = 1) - - var/turf/T = get_turf(source) - var/list/hear = list() - - if(!T) - return hear - - var/list/range = hear(R, T) - - for(var/I in range) - if(ismob(I)) - hear |= recursive_content_check(I, hear, 3, 1, 0, include_mobs, include_objects) - if(include_mobs) - var/mob/M = I - if(M.client) - hear += M - else if(isobj(I)) - hear |= recursive_content_check(I, hear, 3, 1, 0, include_mobs, include_objects) - if(include_objects) - hear += I - - return hear - - -/proc/get_mobs_in_radio_ranges(var/list/obj/item/device/radio/radios) - - set background = 1 - - . = list() - // Returns a list of mobs who can hear any of the radios given in @radios - var/list/speaker_coverage = list() - for(var/obj/item/device/radio/R in radios) - if(R) - //Cyborg checks. Receiving message uses a bit of cyborg's charge. - var/obj/item/device/radio/borg/BR = R - if(istype(BR) && BR.myborg) - var/mob/living/silicon/robot/borg = BR.myborg - var/datum/robot_component/CO = borg.get_component("radio") - if(!CO) - continue //No radio component (Shouldn't happen) - if(!borg.is_component_functioning("radio") || !borg.cell_use_power(CO.active_usage)) - continue //No power. - - var/turf/speaker = get_turf(R) - if(speaker) - for(var/turf/T in hear(R.canhear_range,speaker)) - speaker_coverage[T] = T - - - // Try to find all the players who can hear the message - for(var/i = 1; i <= GLOB.player_list.len; i++) - var/mob/M = GLOB.player_list[i] - if(M) - var/turf/ear = get_turf(M) - if(ear) - // Ghostship is magic: Ghosts can hear radio chatter from anywhere - if(speaker_coverage[ear] || (isghost(M) && M.get_preference_value(/datum/client_preference/ghost_radio) == GLOB.PREF_ALL_CHATTER)) - . |= M // Since we're already looping through mobs, why bother using |= ? This only slows things down. - return . - -/proc/get_mobs_and_objs_in_view_fast(var/turf/T, var/range, var/list/mobs, var/list/objs, var/checkghosts = null) - - var/list/hear = dview(range,T,INVISIBILITY_MAXIMUM) - var/list/hearturfs = list() - - for(var/atom/movable/AM in hear) - if(ismob(AM)) - mobs += AM - hearturfs += get_turf(AM) - else if(isobj(AM)) - objs += AM - hearturfs += get_turf(AM) - - for(var/mob/M in GLOB.player_list) - if(checkghosts && M.stat == DEAD && M.get_preference_value(checkghosts) != GLOB.PREF_NEARBY) - mobs |= M - else if(get_turf(M) in hearturfs) - mobs |= M - - for(var/obj/O in GLOB.listening_objects) - if(get_turf(O) in hearturfs) - objs |= O - - - - - -/proc/inLineOfSight(X1,Y1,X2,Y2,Z=1,PX1=16.5,PY1=16.5,PX2=16.5,PY2=16.5) - var/turf/T - if(X1==X2) - if(Y1==Y2) - return 1 //Light cannot be blocked on same tile - else - var/s = SIMPLE_SIGN(Y2-Y1) - Y1+=s - while(Y1!=Y2) - T=locate(X1,Y1,Z) - if(T.opacity) - return 0 - Y1+=s - else - var/m=(32*(Y2-Y1)+(PY2-PY1))/(32*(X2-X1)+(PX2-PX1)) - var/b=(Y1+PY1/32-0.015625)-m*(X1+PX1/32-0.015625) //In tiles - var/signX = SIMPLE_SIGN(X2-X1) - var/signY = SIMPLE_SIGN(Y2-Y1) - if(X1 abs (dx)) //slope is above 1:1 (move horizontally in a tie) - if(dy > 0) - return get_step(start, SOUTH) - else - return get_step(start, NORTH) - else - if(dx > 0) - return get_step(start, WEST) - else - return get_step(start, EAST) - -/proc/get_mob_by_key(var/key) - for(var/mob/M in SSmobs.mob_list) - if(M.ckey == lowertext(key)) - return M - return null - - -// Will return a list of active candidates. It increases the buffer 5 times until it finds a candidate which is active within the buffer. -/proc/get_active_candidates(var/buffer = 1) - - var/list/candidates = list() //List of candidate KEYS to assume control of the new larva ~Carn - var/i = 0 - while(candidates.len <= 0 && i < 5) - for(var/mob/observer/ghost/G in GLOB.player_list) - if(((G.client.inactivity/10)/60) <= buffer + i) // the most active players are more likely to become an alien - if(!(G.mind && G.mind.current && G.mind.current.stat != DEAD)) - candidates += G.key - i++ - return candidates - -/proc/ScreenText(obj/O, maptext="", screen_loc="CENTER-7,CENTER-7", maptext_height=480, maptext_width=480) - if(!isobj(O)) O = new /obj/screen/text() - O.maptext = maptext - O.maptext_height = maptext_height - O.maptext_width = maptext_width - O.screen_loc = screen_loc - return O - -/proc/Show2Group4Delay(obj/O, list/group, delay=0) - if(!isobj(O)) return - if(!group) group = GLOB.clients - for(var/client/C in group) - C.screen += O - if(delay) - spawn(delay) - for(var/client/C in group) - C.screen -= O - -/proc/flick_overlay(image/I, list/show_to, duration) - for(var/client/C in show_to) - C.images += I - spawn(duration) - for(var/client/C in show_to) - C.images -= I - -/datum/projectile_data - var/src_x - var/src_y - var/time - var/distance - var/power_x - var/power_y - var/dest_x - var/dest_y - -/datum/projectile_data/New(var/src_x, var/src_y, var/time, var/distance, \ - var/power_x, var/power_y, var/dest_x, var/dest_y) - src.src_x = src_x - src.src_y = src_y - src.time = time - src.distance = distance - src.power_x = power_x - src.power_y = power_y - src.dest_x = dest_x - src.dest_y = dest_y - -/proc/projectile_trajectory(var/src_x, var/src_y, var/rotation, var/angle, var/power) - - // returns the destination (Vx,y) that a projectile shot at [src_x], [src_y], with an angle of [angle], - // rotated at [rotation] and with the power of [power] - // Thanks to VistaPOWA for this function - - var/power_x = power * cos(angle) - var/power_y = power * sin(angle) - var/time = 2* power_y / 10 //10 = g - - var/distance = time * power_x - - var/dest_x = src_x + distance*sin(rotation); - var/dest_y = src_y + distance*cos(rotation); - - return new /datum/projectile_data(src_x, src_y, time, distance, power_x, power_y, dest_x, dest_y) - -/proc/GetRedPart(const/hexa) - return hex2num(copytext_char(hexa,2,4)) - -/proc/GetGreenPart(const/hexa) - return hex2num(copytext_char(hexa,4,6)) - -/proc/GetBluePart(const/hexa) - return hex2num(copytext_char(hexa,6,8)) - -/proc/GetHexColors(const/hexa) - return list( - GetRedPart(hexa), - GetGreenPart(hexa), - GetBluePart(hexa) - ) - -/proc/MixColors(const/list/colors) - var/list/reds = list() - var/list/blues = list() - var/list/greens = list() - var/list/weights = list() - - for (var/i = 0, ++i <= colors.len) - reds.Add(GetRedPart(colors[i])) - blues.Add(GetBluePart(colors[i])) - greens.Add(GetGreenPart(colors[i])) - weights.Add(1) - - var/r = mixOneColor(weights, reds) - var/g = mixOneColor(weights, greens) - var/b = mixOneColor(weights, blues) - return rgb(r,g,b) - -/proc/mixOneColor(var/list/weight, var/list/color) - if (!weight || !color || length(weight)!=length(color)) - return 0 - - var/contents = length(weight) - var/i - - //normalize weights - var/listsum = 0 - for(i=1; i<=contents; i++) - listsum += weight[i] - for(i=1; i<=contents; i++) - weight[i] /= listsum - - //mix them - var/mixedcolor = 0 - for(i=1; i<=contents; i++) - mixedcolor += weight[i]*color[i] - mixedcolor = round(mixedcolor) - - //until someone writes a formal proof for this algorithm, let's keep this in -// if(mixedcolor<0x00 || mixedcolor>0xFF) -// return 0 - //that's not the kind of operation we are running here, nerd - mixedcolor=min(max(mixedcolor,0),255) - - return mixedcolor - -/** -* Gets the highest and lowest pressures from the tiles in cardinal directions -* around us, then checks the difference. -*/ -/proc/getOPressureDifferential(var/turf/loc) - var/minp=16777216; - var/maxp=0; - for(var/dir in GLOB.cardinal) - var/turf/simulated/T=get_turf(get_step(loc,dir)) - var/cp=0 - if(T && istype(T) && T.zone) - var/datum/gas_mixture/environment = T.return_air() - cp = environment.return_pressure() - else - if(istype(T,/turf/simulated)) - continue - if(cpmaxp)maxp=cp - return abs(minp-maxp) - -/proc/convert_k2c(var/temp) - return ((temp - T0C)) - -/proc/convert_c2k(var/temp) - return ((temp + T0C)) - -/proc/getCardinalAirInfo(var/turf/loc, var/list/stats=list("temperature")) - var/list/temps = new/list(4) - for(var/dir in GLOB.cardinal) - var/direction - switch(dir) - if(NORTH) - direction = 1 - if(SOUTH) - direction = 2 - if(EAST) - direction = 3 - if(WEST) - direction = 4 - var/turf/simulated/T=get_turf(get_step(loc,dir)) - var/list/rstats = new /list(stats.len) - if(T && istype(T) && T.zone) - var/datum/gas_mixture/environment = T.return_air() - for(var/i=1;i<=stats.len;i++) - if(stats[i] == "pressure") - rstats[i] = environment.return_pressure() - else - rstats[i] = environment.vars[stats[i]] - else if(istype(T, /turf/simulated)) - rstats = null // Exclude zone (wall, door, etc). - else if(istype(T, /turf)) - // Should still work. (/turf/return_air()) - var/datum/gas_mixture/environment = T.return_air() - for(var/i=1;i<=stats.len;i++) - if(stats[i] == "pressure") - rstats[i] = environment.return_pressure() - else - rstats[i] = environment.vars[stats[i]] - temps[direction] = rstats - return temps - -/proc/MinutesToTicks(var/minutes) - return SecondsToTicks(60 * minutes) - -/proc/SecondsToTicks(var/seconds) - return seconds * 10 - -/proc/round_is_spooky(var/spookiness_threshold = config.cult_ghostwriter_req_cultists) - return (GLOB.cult.current_antagonists.len > spookiness_threshold) - -/proc/getviewsize(view) - var/viewX - var/viewY - if(isnum(view)) - var/totalviewrange = 1 + 2 * view - viewX = totalviewrange - viewY = totalviewrange - else - var/list/viewrangelist = splittext(view,"x") - viewX = text2num(viewrangelist[1]) - viewY = text2num(viewrangelist[2]) - return list(viewX, viewY) diff --git a/code/_helpers/global_access.dm b/code/_helpers/global_access.dm deleted file mode 100644 index cf8212fcd1b6b..0000000000000 --- a/code/_helpers/global_access.dm +++ /dev/null @@ -1,2102 +0,0 @@ -// THIS FILE IS AUTOMATICALLY CREATED BY tools/gen_globals.py -/proc/readglobal(which) - switch(which) - if("ANTAG_FREQS") - return global.ANTAG_FREQS; - if("AWAY_FREQS_ASSIGNED") - return global.AWAY_FREQS_ASSIGNED; - if("AWAY_FREQS_UNASSIGNED") - return global.AWAY_FREQS_UNASSIGNED; - if("BSACooldown") - return global.BSACooldown; - if("BUMP_TELEPORTERS") - return global.BUMP_TELEPORTERS; - if("Banlist") - return global.Banlist; - if("CENT_FREQS") - return global.CENT_FREQS; - if("CMinutes") - return global.CMinutes; - if("DEPT_FREQS") - return global.DEPT_FREQS; - if("Failsafe") - return global.Failsafe; - if("GLOB") - return global.GLOB; - if("IClog") - return global.IClog; - if("LIGHTING_CORNER_DIAGONAL") - return global.LIGHTING_CORNER_DIAGONAL; - if("Master") - return global.Master; - if("OOClog") - return global.OOClog; - if("SSai") - return global.SSai; - if("SSaifast") - return global.SSaifast; - if("SSair") - return global.SSair; - if("SSairflow") - return global.SSairflow; - if("SSalarm") - return global.SSalarm; - if("SSao") - return global.SSao; - if("SSatoms") - return global.SSatoms; - if("SScharacter_setup") - return global.SScharacter_setup; - if("SSchat") - return global.SSchat; - if("SSchemistry") - return global.SSchemistry; - if("SScircuit") - return global.SScircuit; - if("SScircuit_components") - return global.SScircuit_components; - if("SScodex") - return global.SScodex; - if("SSculture") - return global.SSculture; - if("SScustomitems") - return global.SScustomitems; - if("SSdisposals") - return global.SSdisposals; - if("SSevac") - return global.SSevac; - if("SSevent") - return global.SSevent; - if("SSfabrication") - return global.SSfabrication; - if("SSfastprocess") - return global.SSfastprocess; - if("SSfluids") - return global.SSfluids; - if("SSgarbage") - return global.SSgarbage; - if("SSghost_images") - return global.SSghost_images; - if("SSgoals") - return global.SSgoals; - if("SSgraphs_process") - return global.SSgraphs_process; - if("SSgraphs_update") - return global.SSgraphs_update; - if("SSicon_update") - return global.SSicon_update; - if("SSinactivity") - return global.SSinactivity; - if("SSinit_misc") - return global.SSinit_misc; - if("SSinit_misc_early") - return global.SSinit_misc_early; - if("SSinit_misc_late") - return global.SSinit_misc_late; - if("SSjobs") - return global.SSjobs; - if("SSlighting") - return global.SSlighting; - if("SSmachines") - return global.SSmachines; - if("SSmapping") - return global.SSmapping; - if("SSmaterials") - return global.SSmaterials; - if("SSmisc_slow") - return global.SSmisc_slow; - if("SSmobs") - return global.SSmobs; - if("SSnano") - return global.SSnano; - if("SSobj") - return global.SSobj; - if("SSpersistence") - return global.SSpersistence; - if("SSping") - return global.SSping; - if("SSplants") - return global.SSplants; - if("SSpresence") - return global.SSpresence; - if("SSprocessing") - return global.SSprocessing; - if("SSpsi") - return global.SSpsi; - if("SSradiation") - return global.SSradiation; - if("SSrobots") - return global.SSrobots; - if("SSshuttle") - return global.SSshuttle; - if("SSskybox") - return global.SSskybox; - if("SSsupply") - return global.SSsupply; - if("SStemperature") - return global.SStemperature; - if("SSthrowing") - return global.SSthrowing; - if("SSticker") - return global.SSticker; - if("SStimer") - return global.SStimer; - if("SSturf") - return global.SSturf; - if("SSvines") - return global.SSvines; - if("SSvote") - return global.SSvote; - if("SSwebhooks") - return global.SSwebhooks; - if("SSzcopy") - return global.SSzcopy; - if("Tier1Runes") - return global.Tier1Runes; - if("Tier2Runes") - return global.Tier2Runes; - if("Tier3Runes") - return global.Tier3Runes; - if("Tier4Runes") - return global.Tier4Runes; - if("WALLITEMS") - return global.WALLITEMS; - if("_all_globals") - return global._all_globals; - if("_client_preferences") - return global._client_preferences; - if("_client_preferences_by_key") - return global._client_preferences_by_key; - if("_client_preferences_by_type") - return global._client_preferences_by_type; - if("account_hack_attempted") - return global.account_hack_attempted; - if("additional_antag_types") - return global.additional_antag_types; - if("admin_datums") - return global.admin_datums; - if("admin_pm_repository") - return global.admin_pm_repository; - if("admin_ranks") - return global.admin_ranks; - if("admin_secrets") - return global.admin_secrets; - if("admin_verbs_admin") - return global.admin_verbs_admin; - if("admin_verbs_ban") - return global.admin_verbs_ban; - if("admin_verbs_debug") - return global.admin_verbs_debug; - if("admin_verbs_default") - return global.admin_verbs_default; - if("admin_verbs_fun") - return global.admin_verbs_fun; - if("admin_verbs_hideable") - return global.admin_verbs_hideable; - if("admin_verbs_xeno") //INF //proxima - return global.admin_verbs_xeno; //INF//proxima - if("admin_verbs_mod") - return global.admin_verbs_mod; - if("admin_verbs_paranoid_debug") - return global.admin_verbs_paranoid_debug; - if("admin_verbs_permissions") - return global.admin_verbs_permissions; - if("admin_verbs_possess") - return global.admin_verbs_possess; - if("admin_verbs_rejuv") - return global.admin_verbs_rejuv; - if("admin_verbs_server") - return global.admin_verbs_server; - if("admin_verbs_sounds") - return global.admin_verbs_sounds; - if("admin_verbs_spawn") - return global.admin_verbs_spawn; - if("adminhelp_ignored_words") - return global.adminhelp_ignored_words; - if("adminlog") - return global.adminlog; - if("ai_list") - return global.ai_list; - if("ai_status_emotions") - return global.ai_status_emotions; - if("ai_verbs_default") - return global.ai_verbs_default; - if("air_alarm_topic") - return global.air_alarm_topic; - if("air_blocked") - return global.air_blocked; - if("airlock_overlays") - return global.airlock_overlays; - if("alien_whitelist") - return global.alien_whitelist; - if("allCasters") - return global.allCasters; - if("allConsoles") - return global.allConsoles; - if("all_grabobjects") - return global.all_grabobjects; - if("all_grabstates") - return global.all_grabstates; - if("all_languages") - return global.all_languages; - if("all_money_accounts") - return global.all_money_accounts; - if("all_objectives") - return global.all_objectives; - if("all_robolimbs") - return global.all_robolimbs; - if("all_species") - return global.all_species; - if("all_ui_styles") - return global.all_ui_styles; - if("all_unit_tests_passed") - return global.all_unit_tests_passed; - if("all_virtual_listeners") - return global.all_virtual_listeners; - if("announced_news_types") - return global.announced_news_types; - if("antag_add_finished") - return global.antag_add_finished; - if("appearance_manager") - return global.appearance_manager; - if("area_repository") - return global.area_repository; - if("artefact_feedback") - return global.artefact_feedback; - if("ascii_esc") - return global.ascii_esc; - if("ascii_green") - return global.ascii_green; - if("ascii_red") - return global.ascii_red; - if("ascii_reset") - return global.ascii_reset; - if("ascii_yellow") - return global.ascii_yellow; - if("asset_datums") - return global.asset_datums; - if("assigned") - return global.assigned; - if("assigned_blocks") - return global.assigned_blocks; - if("attack_log_repository") - return global.attack_log_repository; - if("base_miss_chance") - return global.base_miss_chance; - if("basic_robolimb") - return global.basic_robolimb; - if("blocked") - return global.blocked; - if("bomb_set") - return global.bomb_set; - if("cable_list") - return global.cable_list; - if("cached_icons") - return global.cached_icons; - if("cached_space") - return global.cached_space; - if("camera_range_display_status") - return global.camera_range_display_status; - if("camera_repository") - return global.camera_repository; - if("cameranet") - return global.cameranet; - if("can_call_ert") - return global.can_call_ert; - if("captain_announcement") - return global.captain_announcement; - if("channel_color_presets") - return global.channel_color_presets; - if("channel_to_radio_key") - return global.channel_to_radio_key; - if("chargen_robolimbs") - return global.chargen_robolimbs; - if("chemical_reaction_logs") - return global.chemical_reaction_logs; - if("chicken_count") - return global.chicken_count; - if("client_preference_stats_") - return global.client_preference_stats_; - if("client_repository") - return global.client_repository; - if("combatlog") - return global.combatlog; - if("comm_message_listeners") - return global.comm_message_listeners; - if("command_announcement") - return global.command_announcement; - if("common_tools") - return global.common_tools; - if("config") - return global.config; - if("contamination_overlay") - return global.contamination_overlay; - if("create_mob_html") - return global.create_mob_html; - if("create_object_html") - return global.create_object_html; - if("create_turf_html") - return global.create_turf_html; - if("created") - return global.created; - if("crew_repository") - return global.crew_repository; - if("csrfz_check") - return global.csrfz_check; - if("damage_icon_parts") - return global.damage_icon_parts; - if("dbcon") - return global.dbcon; - if("dbcon_old") - return global.dbcon_old; - if("debug_verbs") - return global.debug_verbs; - if("decls_repository") - return global.decls_repository; - if("default_material_composition") - return global.default_material_composition; - if("default_mobloc") - return global.default_mobloc; - if("default_pai_software") - return global.default_pai_software; - if("delta_index") - return global.delta_index; - if("department_accounts") - return global.department_accounts; - if("department_radio_keys") - return global.department_radio_keys; - if("diary") - return global.diary; - if("dna_activity_bounds") - return global.dna_activity_bounds; - if("dna_genes") - return global.dna_genes; - if("doppler_arrays") - return global.doppler_arrays; - if("dummy_lighting_corner") - return global.dummy_lighting_corner; - if("empty_playable_ai_cores") - return global.empty_playable_ai_cores; - if("endgame_exits") - return global.endgame_exits; - if("endgame_safespawns") - return global.endgame_safespawns; - if("ert_base_chance") - return global.ert_base_chance; - if("escape_pods") - return global.escape_pods; - if("escape_pods_by_name") - return global.escape_pods_by_name; - if("evacuation_controller") - return global.evacuation_controller; - if("event_last_fired") - return global.event_last_fired; - if("eventchance") - return global.eventchance; - if("explosion_in_progress") - return global.explosion_in_progress; - if("explosion_turfs") - return global.explosion_turfs; - if("failed_db_connections") - return global.failed_db_connections; - if("failed_old_db_connections") - return global.failed_old_db_connections; - if("failed_unit_tests") - return global.failed_unit_tests; - if("file_uid") - return global.file_uid; - if("finds_as_strings") - return global.finds_as_strings; - if("flesh_hud_colours") - return global.flesh_hud_colours; - if("floorIsLava") - return global.floorIsLava; - if("floor_decals") - return global.floor_decals; - if("floor_light_cache") - return global.floor_light_cache; - if("flooring_cache") - return global.flooring_cache; - if("fluidtrack_cache") - return global.fluidtrack_cache; - if("follow_repository") - return global.follow_repository; - if("forced_ambiance_list") - return global.forced_ambiance_list; - if("fruit_icon_cache") - return global.fruit_icon_cache; - if("fusion_reactions") - return global.fusion_reactions; - if("game_id") - return global.game_id; - if("gas_data") - return global.gas_data; - if("gear_datums") - return global.gear_datums; - if("gear_tweak_free_color_choice_") - return global.gear_tweak_free_color_choice_; - if("gender_datums") - return global.gender_datums; - if("ghost_darkness_images") - return global.ghost_darkness_images; - if("ghost_sightless_images") - return global.ghost_sightless_images; - if("ghost_traps") - return global.ghost_traps; - if("global_message_listener") - return global.global_message_listener; - if("global_vars_") - return global.global_vars_; - if("gzn_check") - return global.gzn_check; - if("hadevent") - return global.hadevent; - if("hivemind_bank") - return global.hivemind_bank; - if("holder_mob_icon_cache") - return global.holder_mob_icon_cache; - if("human_icon_cache") - return global.human_icon_cache; - if("id_card_states") - return global.id_card_states; - if("image_repository") - return global.image_repository; - if("init") - return global.init; - if("intents") - return global.intents; - if("intercom_range_display_status") - return global.intercom_range_display_status; - if("invalid_zone") - return global.invalid_zone; - if("jobMax") - return global.jobMax; - if("jobban_keylist") - return global.jobban_keylist; - if("jobban_runonce") - return global.jobban_runonce; - if("landmarks_list") - return global.landmarks_list; - if("language_keys") - return global.language_keys; - if("last_chew") - return global.last_chew; - if("last_message_id") - return global.last_message_id; - if("last_round_duration") - return global.last_round_duration; - if("light_overlay_cache") - return global.light_overlay_cache; - if("lighting_overlays_initialised") - return global.lighting_overlays_initialised; - if("limb_icon_cache") - return global.limb_icon_cache; - if("loadout_categories") - return global.loadout_categories; - if("log_end") - return global.log_end; - if("lunchables_drink_reagents_") - return global.lunchables_drink_reagents_; - if("lunchables_drinks_") - return global.lunchables_drinks_; - if("lunchables_ethanol_reagents_") - return global.lunchables_ethanol_reagents_; - if("lunchables_lunches_") - return global.lunchables_lunches_; - if("lunchables_snacks_") - return global.lunchables_snacks_; - if("magazine_icondata_keys") - return global.magazine_icondata_keys; - if("magazine_icondata_states") - return global.magazine_icondata_states; - if("maint_all_access") - return global.maint_all_access; - if("mannequins_") - return global.mannequins_; - if("map_count") - return global.map_count; - if("map_sectors") - return global.map_sectors; - if("mark") - return global.mark; - if("maze_cell_count") - return global.maze_cell_count; - if("mechas_list") - return global.mechas_list; - if("merged") - return global.merged; - if("message_delay") - return global.message_delay; - if("message_servers") - return global.message_servers; - if("meteors_armageddon") - return global.meteors_armageddon; - if("meteors_cataclysm") - return global.meteors_cataclysm; - if("meteors_catastrophic") - return global.meteors_catastrophic; - if("meteors_dust") - return global.meteors_dust; - if("meteors_major") - return global.meteors_major; - if("meteors_minor") - return global.meteors_minor; - if("meteors_moderate") - return global.meteors_moderate; - if("meteors_normal") - return global.meteors_normal; - if("meteors_threatening") - return global.meteors_threatening; - if("mil_branches") - return global.mil_branches; - if("mimic_defines") - return global.mimic_defines; - if("mining_floors") - return global.mining_floors; - if("mining_walls") - return global.mining_walls; - if("minor_air_alarms") - return global.minor_air_alarms; - if("minor_announcement") - return global.minor_announcement; - if("mob_hat_cache") - return global.mob_hat_cache; - if("mob_repository") - return global.mob_repository; - if("moving_levels") - return global.moving_levels; - if("multi_point_spawns") - return global.multi_point_spawns; - if("narsie_behaviour") - return global.narsie_behaviour; - if("narsie_cometh") - return global.narsie_cometh; - if("narsie_list") - return global.narsie_list; - if("navbeacons") - return global.navbeacons; - if("news_network") - return global.news_network; - if("newscaster_standard_feeds") - return global.newscaster_standard_feeds; - if("next_account_number") - return global.next_account_number; - if("next_duration_update") - return global.next_duration_update; - if("next_station_date_change") - return global.next_station_date_change; - if("ninjastart") - return global.ninjastart; - if("ntnet_card_uid") - return global.ntnet_card_uid; - if("ntnet_global") - return global.ntnet_global; - if("ntnrc_uid") - return global.ntnrc_uid; - if("nttransfer_uid") - return global.nttransfer_uid; - if("nuke_disks") - return global.nuke_disks; - if("num_financial_terminals") - return global.num_financial_terminals; - if("organ_cache") - return global.organ_cache; - if("organ_rel_size") - return global.organ_rel_size; - if("outfits_decls_") - return global.outfits_decls_; - if("outfits_decls_by_type_") - return global.outfits_decls_by_type_; - if("outfits_decls_root_") - return global.outfits_decls_root_; - if("overmap_event_handler") - return global.overmap_event_handler; - if("paiController") - return global.paiController; - if("pai_emotions") - return global.pai_emotions; - if("pai_software_by_key") - return global.pai_software_by_key; - if("paramslist_cache") - return global.paramslist_cache; - if("photo_count") - return global.photo_count; - if("pipe_colors") - return global.pipe_colors; - if("plant_seed_sprites") - return global.plant_seed_sprites; - if("playable_species") - return global.playable_species; - if("possible_changeling_IDs") - return global.possible_changeling_IDs; - if("powerinstances") - return global.powerinstances; - if("powers") - return global.powers; - if("priority_air_alarms") - return global.priority_air_alarms; - if("priority_announcement") - return global.priority_announcement; - if("priv_all_access") - return global.priv_all_access; - if("priv_all_access_datums") - return global.priv_all_access_datums; - if("priv_all_access_datums_id") - return global.priv_all_access_datums_id; - if("priv_all_access_datums_region") - return global.priv_all_access_datums_region; - if("priv_centcom_access") - return global.priv_centcom_access; - if("priv_region_access") - return global.priv_region_access; - if("priv_station_access") - return global.priv_station_access; - if("priv_syndicate_access") - return global.priv_syndicate_access; - if("prometheans") - return global.prometheans; - if("protected_objects") - return global.protected_objects; - if("rad_collectors") - return global.rad_collectors; - if("radio_controller") - return global.radio_controller; - if("radiochannels") - return global.radiochannels; - if("random_junk_") - return global.random_junk_; - if("random_maps") - return global.random_maps; - if("random_useful_") - return global.random_useful_; - if("recentmessages") - return global.recentmessages; - if("req_console_assistance") - return global.req_console_assistance; - if("req_console_information") - return global.req_console_information; - if("req_console_supplies") - return global.req_console_supplies; - if("responsive_carriers") - return global.responsive_carriers; - if("revdata") - return global.revdata; - if("robot_custom_icons") - return global.robot_custom_icons; - if("robot_hud_colours") - return global.robot_hud_colours; - if("robot_inventory") - return global.robot_inventory; - if("round_start_time") - return global.round_start_time; - if("roundstart_hour") - return global.roundstart_hour; - if("rune_list") - return global.rune_list; - if("same_wires") - return global.same_wires; - if("send_emergency_team") - return global.send_emergency_team; - if("sent_spiders_to_station") - return global.sent_spiders_to_station; - if("server_name") - return global.server_name; - if("severity_to_string") - return global.severity_to_string; - if("ship_engines") - return global.ship_engines; - if("side_effects") - return global.side_effects; - if("skin_styles_female_list") - return global.skin_styles_female_list; - if("skipped_unit_tests") - return global.skipped_unit_tests; - if("slot_flags_enumeration") - return global.slot_flags_enumeration; - if("solar_gen_rate") - return global.solar_gen_rate; - if("sortInstance") - return global.sortInstance; - if("sounds_cache") - return global.sounds_cache; - if("spacevines_spawned") - return global.spacevines_spawned; - if("sparring_attack_cache") - return global.sparring_attack_cache; - if("spells") - return global.spells; - if("splatter_cache") - return global.splatter_cache; - if("sqladdress") - return global.sqladdress; - if("sqldb") - return global.sqldb; - if("sqlenabled") - return global.sqlenabled; - if("sqlfdbkdb") - return global.sqlfdbkdb; - if("sqlfdbklogin") - return global.sqlfdbklogin; - if("sqlfdbkpass") - return global.sqlfdbkpass; - if("sqllogin") - return global.sqllogin; - if("sqlpass") - return global.sqlpass; - if("sqlport") - return global.sqlport; - if("station_account") - return global.station_account; - if("station_date") - return global.station_date; - if("stool_cache") - return global.stool_cache; - if("stored_shock_by_ref") - return global.stored_shock_by_ref; - if("string_part_flags") - return global.string_part_flags; - if("string_slot_flags") - return global.string_slot_flags; - if("supply_drop") - return global.supply_drop; - if("supply_methods_") - return global.supply_methods_; - if("syndicate_access") - return global.syndicate_access; - if("syndicate_code_phrase") - return global.syndicate_code_phrase; - if("syndicate_code_response") - return global.syndicate_code_response; - if("syndicate_name") - return global.syndicate_name; - if("tail_icon_cache") - return global.tail_icon_cache; - if("tank_gauge_cache") - return global.tank_gauge_cache; - if("tape_roll_applications") - return global.tape_roll_applications; - if("telecomms_list") - return global.telecomms_list; - if("ticket_panels") - return global.ticket_panels; - if("tickets") - return global.tickets; - if("total_lighting_corners") - return global.total_lighting_corners; - if("total_lighting_overlays") - return global.total_lighting_overlays; - if("total_lighting_sources") - return global.total_lighting_sources; - if("total_unit_tests") - return global.total_unit_tests; - if("transfer_controller") - return global.transfer_controller; - if("turbolifts") - return global.turbolifts; - if("turret_icons") - return global.turret_icons; - if("uniqueness_repository") - return global.uniqueness_repository; - if("universe_has_ended") - return global.universe_has_ended; - if("uplink") - return global.uplink; - if("uplink_purchase_repository") - return global.uplink_purchase_repository; - if("uplink_random_selections_") - return global.uplink_random_selections_; - if("valid_bloodtypes") - return global.valid_bloodtypes; - if("vendor_account") - return global.vendor_account; - if("ventcrawl_machinery") - return global.ventcrawl_machinery; - if("view_variables_dont_expand") - return global.view_variables_dont_expand; - if("view_variables_no_assoc") - return global.view_variables_no_assoc; - if("visual_nets") - return global.visual_nets; - if("vsc") - return global.vsc; - if("wax_recipes") - return global.wax_recipes; - if("weighted_mundaneevent_locations") - return global.weighted_mundaneevent_locations; - if("weighted_randomevent_locations") - return global.weighted_randomevent_locations; - if("whitelist") - return global.whitelist; - if("wireColours") - return global.wireColours; - if("world_uplinks") - return global.world_uplinks; - if("worths") - return global.worths; - if("wrapped_species_by_ref") - return global.wrapped_species_by_ref; - if("z_levels") - return global.z_levels; - if("zone_blocked") - return global.zone_blocked; - -/proc/writeglobal(which, newval) - switch(which) - if("ANTAG_FREQS") - global.ANTAG_FREQS=newval; - if("AWAY_FREQS_ASSIGNED") - global.AWAY_FREQS_ASSIGNED=newval; - if("AWAY_FREQS_UNASSIGNED") - global.AWAY_FREQS_UNASSIGNED=newval; - if("BSACooldown") - global.BSACooldown=newval; - if("BUMP_TELEPORTERS") - global.BUMP_TELEPORTERS=newval; - if("Banlist") - global.Banlist=newval; - if("CENT_FREQS") - global.CENT_FREQS=newval; - if("CMinutes") - global.CMinutes=newval; - if("DEPT_FREQS") - global.DEPT_FREQS=newval; - if("Failsafe") - global.Failsafe=newval; - if("GLOB") - global.GLOB=newval; - if("IClog") - global.IClog=newval; - if("LIGHTING_CORNER_DIAGONAL") - global.LIGHTING_CORNER_DIAGONAL=newval; - if("Master") - global.Master=newval; - if("OOClog") - global.OOClog=newval; - if("SSai") - global.SSai=newval; - if("SSaifast") - global.SSaifast=newval; - if("SSair") - global.SSair=newval; - if("SSairflow") - global.SSairflow=newval; - if("SSalarm") - global.SSalarm=newval; - if("SSao") - global.SSao=newval; - if("SSatoms") - global.SSatoms=newval; - if("SScharacter_setup") - global.SScharacter_setup=newval; - if("SSchat") - global.SSchat=newval; - if("SSchemistry") - global.SSchemistry=newval; - if("SScircuit") - global.SScircuit=newval; - if("SScircuit_components") - global.SScircuit_components=newval; - if("SScodex") - global.SScodex=newval; - if("SSculture") - global.SSculture=newval; - if("SScustomitems") - global.SScustomitems=newval; - if("SSdisposals") - global.SSdisposals=newval; - if("SSevac") - global.SSevac=newval; - if("SSevent") - global.SSevent=newval; - if("SSfabrication") - global.SSfabrication=newval; - if("SSfastprocess") - global.SSfastprocess=newval; - if("SSfluids") - global.SSfluids=newval; - if("SSgarbage") - global.SSgarbage=newval; - if("SSghost_images") - global.SSghost_images=newval; - if("SSgoals") - global.SSgoals=newval; - if("SSgraphs_process") - global.SSgraphs_process=newval; - if("SSgraphs_update") - global.SSgraphs_update=newval; - if("SSicon_update") - global.SSicon_update=newval; - if("SSinactivity") - global.SSinactivity=newval; - if("SSinit_misc") - global.SSinit_misc=newval; - if("SSinit_misc_early") - global.SSinit_misc_early=newval; - if("SSinit_misc_late") - global.SSinit_misc_late=newval; - if("SSjobs") - global.SSjobs=newval; - if("SSlighting") - global.SSlighting=newval; - if("SSmachines") - global.SSmachines=newval; - if("SSmapping") - global.SSmapping=newval; - if("SSmaterials") - global.SSmaterials=newval; - if("SSmisc_slow") - global.SSmisc_slow=newval; - if("SSmobs") - global.SSmobs=newval; - if("SSnano") - global.SSnano=newval; - if("SSobj") - global.SSobj=newval; - if("SSpersistence") - global.SSpersistence=newval; - if("SSping") - global.SSping=newval; - if("SSplants") - global.SSplants=newval; - if("SSpresence") - global.SSpresence=newval; - if("SSprocessing") - global.SSprocessing=newval; - if("SSpsi") - global.SSpsi=newval; - if("SSradiation") - global.SSradiation=newval; - if("SSrobots") - global.SSrobots=newval; - if("SSshuttle") - global.SSshuttle=newval; - if("SSskybox") - global.SSskybox=newval; - if("SSsupply") - global.SSsupply=newval; - if("SStemperature") - global.SStemperature=newval; - if("SSthrowing") - global.SSthrowing=newval; - if("SSticker") - global.SSticker=newval; - if("SStimer") - global.SStimer=newval; - if("SSturf") - global.SSturf=newval; - if("SSvines") - global.SSvines=newval; - if("SSvote") - global.SSvote=newval; - if("SSwebhooks") - global.SSwebhooks=newval; - if("SSzcopy") - global.SSzcopy=newval; - if("Tier1Runes") - global.Tier1Runes=newval; - if("Tier2Runes") - global.Tier2Runes=newval; - if("Tier3Runes") - global.Tier3Runes=newval; - if("Tier4Runes") - global.Tier4Runes=newval; - if("WALLITEMS") - global.WALLITEMS=newval; - if("_all_globals") - global._all_globals=newval; - if("_client_preferences") - global._client_preferences=newval; - if("_client_preferences_by_key") - global._client_preferences_by_key=newval; - if("_client_preferences_by_type") - global._client_preferences_by_type=newval; - if("account_hack_attempted") - global.account_hack_attempted=newval; - if("additional_antag_types") - global.additional_antag_types=newval; - if("admin_datums") - global.admin_datums=newval; - if("admin_pm_repository") - global.admin_pm_repository=newval; - if("admin_ranks") - global.admin_ranks=newval; - if("admin_secrets") - global.admin_secrets=newval; - if("admin_verbs_admin") - global.admin_verbs_admin=newval; - if("admin_verbs_ban") - global.admin_verbs_ban=newval; - if("admin_verbs_debug") - global.admin_verbs_debug=newval; - if("admin_verbs_default") - global.admin_verbs_default=newval; - if("admin_verbs_fun") - global.admin_verbs_fun=newval; - if("admin_verbs_hideable") - global.admin_verbs_hideable=newval; - if("admin_verbs_xeno") //INF //proxima - global.admin_verbs_xeno=newval; //INF //proxima - if("admin_verbs_mod") - global.admin_verbs_mod=newval; - if("admin_verbs_paranoid_debug") - global.admin_verbs_paranoid_debug=newval; - if("admin_verbs_permissions") - global.admin_verbs_permissions=newval; - if("admin_verbs_possess") - global.admin_verbs_possess=newval; - if("admin_verbs_rejuv") - global.admin_verbs_rejuv=newval; - if("admin_verbs_server") - global.admin_verbs_server=newval; - if("admin_verbs_sounds") - global.admin_verbs_sounds=newval; - if("admin_verbs_spawn") - global.admin_verbs_spawn=newval; - if("adminhelp_ignored_words") - global.adminhelp_ignored_words=newval; - if("adminlog") - global.adminlog=newval; - if("ai_list") - global.ai_list=newval; - if("ai_status_emotions") - global.ai_status_emotions=newval; - if("ai_verbs_default") - global.ai_verbs_default=newval; - if("air_alarm_topic") - global.air_alarm_topic=newval; - if("air_blocked") - global.air_blocked=newval; - if("airlock_overlays") - global.airlock_overlays=newval; - if("alien_whitelist") - global.alien_whitelist=newval; - if("allCasters") - global.allCasters=newval; - if("allConsoles") - global.allConsoles=newval; - if("all_grabobjects") - global.all_grabobjects=newval; - if("all_grabstates") - global.all_grabstates=newval; - if("all_languages") - global.all_languages=newval; - if("all_money_accounts") - global.all_money_accounts=newval; - if("all_objectives") - global.all_objectives=newval; - if("all_robolimbs") - global.all_robolimbs=newval; - if("all_species") - global.all_species=newval; - if("all_ui_styles") - global.all_ui_styles=newval; - if("all_unit_tests_passed") - global.all_unit_tests_passed=newval; - if("all_virtual_listeners") - global.all_virtual_listeners=newval; - if("announced_news_types") - global.announced_news_types=newval; - if("antag_add_finished") - global.antag_add_finished=newval; - if("appearance_manager") - global.appearance_manager=newval; - if("area_repository") - global.area_repository=newval; - if("artefact_feedback") - global.artefact_feedback=newval; - if("ascii_esc") - global.ascii_esc=newval; - if("ascii_green") - global.ascii_green=newval; - if("ascii_red") - global.ascii_red=newval; - if("ascii_reset") - global.ascii_reset=newval; - if("ascii_yellow") - global.ascii_yellow=newval; - if("asset_datums") - global.asset_datums=newval; - if("assigned") - global.assigned=newval; - if("assigned_blocks") - global.assigned_blocks=newval; - if("attack_log_repository") - global.attack_log_repository=newval; - if("base_miss_chance") - global.base_miss_chance=newval; - if("basic_robolimb") - global.basic_robolimb=newval; - if("blocked") - global.blocked=newval; - if("bomb_set") - global.bomb_set=newval; - if("cable_list") - global.cable_list=newval; - if("cached_icons") - global.cached_icons=newval; - if("cached_space") - global.cached_space=newval; - if("camera_range_display_status") - global.camera_range_display_status=newval; - if("camera_repository") - global.camera_repository=newval; - if("cameranet") - global.cameranet=newval; - if("can_call_ert") - global.can_call_ert=newval; - if("captain_announcement") - global.captain_announcement=newval; - if("channel_color_presets") - global.channel_color_presets=newval; - if("channel_to_radio_key") - global.channel_to_radio_key=newval; - if("chargen_robolimbs") - global.chargen_robolimbs=newval; - if("chemical_reaction_logs") - global.chemical_reaction_logs=newval; - if("chicken_count") - global.chicken_count=newval; - if("client_preference_stats_") - global.client_preference_stats_=newval; - if("client_repository") - global.client_repository=newval; - if("combatlog") - global.combatlog=newval; - if("comm_message_listeners") - global.comm_message_listeners=newval; - if("command_announcement") - global.command_announcement=newval; - if("common_tools") - global.common_tools=newval; - if("config") - global.config=newval; - if("contamination_overlay") - global.contamination_overlay=newval; - if("create_mob_html") - global.create_mob_html=newval; - if("create_object_html") - global.create_object_html=newval; - if("create_turf_html") - global.create_turf_html=newval; - if("created") - global.created=newval; - if("crew_repository") - global.crew_repository=newval; - if("csrfz_check") - global.csrfz_check=newval; - if("damage_icon_parts") - global.damage_icon_parts=newval; - if("dbcon") - global.dbcon=newval; - if("dbcon_old") - global.dbcon_old=newval; - if("debug_verbs") - global.debug_verbs=newval; - if("decls_repository") - global.decls_repository=newval; - if("default_material_composition") - global.default_material_composition=newval; - if("default_mobloc") - global.default_mobloc=newval; - if("default_pai_software") - global.default_pai_software=newval; - if("delta_index") - global.delta_index=newval; - if("department_accounts") - global.department_accounts=newval; - if("department_radio_keys") - global.department_radio_keys=newval; - if("diary") - global.diary=newval; - if("dna_activity_bounds") - global.dna_activity_bounds=newval; - if("dna_genes") - global.dna_genes=newval; - if("doppler_arrays") - global.doppler_arrays=newval; - if("dummy_lighting_corner") - global.dummy_lighting_corner=newval; - if("empty_playable_ai_cores") - global.empty_playable_ai_cores=newval; - if("endgame_exits") - global.endgame_exits=newval; - if("endgame_safespawns") - global.endgame_safespawns=newval; - if("ert_base_chance") - global.ert_base_chance=newval; - if("escape_pods") - global.escape_pods=newval; - if("escape_pods_by_name") - global.escape_pods_by_name=newval; - if("evacuation_controller") - global.evacuation_controller=newval; - if("event_last_fired") - global.event_last_fired=newval; - if("eventchance") - global.eventchance=newval; - if("explosion_in_progress") - global.explosion_in_progress=newval; - if("explosion_turfs") - global.explosion_turfs=newval; - if("failed_db_connections") - global.failed_db_connections=newval; - if("failed_old_db_connections") - global.failed_old_db_connections=newval; - if("failed_unit_tests") - global.failed_unit_tests=newval; - if("file_uid") - global.file_uid=newval; - if("finds_as_strings") - global.finds_as_strings=newval; - if("flesh_hud_colours") - global.flesh_hud_colours=newval; - if("floorIsLava") - global.floorIsLava=newval; - if("floor_decals") - global.floor_decals=newval; - if("floor_light_cache") - global.floor_light_cache=newval; - if("flooring_cache") - global.flooring_cache=newval; - if("fluidtrack_cache") - global.fluidtrack_cache=newval; - if("follow_repository") - global.follow_repository=newval; - if("forced_ambiance_list") - global.forced_ambiance_list=newval; - if("fruit_icon_cache") - global.fruit_icon_cache=newval; - if("fusion_reactions") - global.fusion_reactions=newval; - if("game_id") - global.game_id=newval; - if("gas_data") - global.gas_data=newval; - if("gear_datums") - global.gear_datums=newval; - if("gear_tweak_free_color_choice_") - global.gear_tweak_free_color_choice_=newval; - if("gender_datums") - global.gender_datums=newval; - if("ghost_darkness_images") - global.ghost_darkness_images=newval; - if("ghost_sightless_images") - global.ghost_sightless_images=newval; - if("ghost_traps") - global.ghost_traps=newval; - if("global_message_listener") - global.global_message_listener=newval; - if("global_vars_") - global.global_vars_=newval; - if("gzn_check") - global.gzn_check=newval; - if("hadevent") - global.hadevent=newval; - if("hivemind_bank") - global.hivemind_bank=newval; - if("holder_mob_icon_cache") - global.holder_mob_icon_cache=newval; - if("human_icon_cache") - global.human_icon_cache=newval; - if("id_card_states") - global.id_card_states=newval; - if("image_repository") - global.image_repository=newval; - if("init") - global.init=newval; - if("intents") - global.intents=newval; - if("intercom_range_display_status") - global.intercom_range_display_status=newval; - if("invalid_zone") - global.invalid_zone=newval; - if("jobMax") - global.jobMax=newval; - if("jobban_keylist") - global.jobban_keylist=newval; - if("jobban_runonce") - global.jobban_runonce=newval; - if("landmarks_list") - global.landmarks_list=newval; - if("language_keys") - global.language_keys=newval; - if("last_chew") - global.last_chew=newval; - if("last_message_id") - global.last_message_id=newval; - if("last_round_duration") - global.last_round_duration=newval; - if("light_overlay_cache") - global.light_overlay_cache=newval; - if("lighting_overlays_initialised") - global.lighting_overlays_initialised=newval; - if("limb_icon_cache") - global.limb_icon_cache=newval; - if("loadout_categories") - global.loadout_categories=newval; - if("log_end") - global.log_end=newval; - if("lunchables_drink_reagents_") - global.lunchables_drink_reagents_=newval; - if("lunchables_drinks_") - global.lunchables_drinks_=newval; - if("lunchables_ethanol_reagents_") - global.lunchables_ethanol_reagents_=newval; - if("lunchables_lunches_") - global.lunchables_lunches_=newval; - if("lunchables_snacks_") - global.lunchables_snacks_=newval; - if("magazine_icondata_keys") - global.magazine_icondata_keys=newval; - if("magazine_icondata_states") - global.magazine_icondata_states=newval; - if("maint_all_access") - global.maint_all_access=newval; - if("mannequins_") - global.mannequins_=newval; - if("map_count") - global.map_count=newval; - if("map_sectors") - global.map_sectors=newval; - if("mark") - global.mark=newval; - if("maze_cell_count") - global.maze_cell_count=newval; - if("mechas_list") - global.mechas_list=newval; - if("merged") - global.merged=newval; - if("message_delay") - global.message_delay=newval; - if("message_servers") - global.message_servers=newval; - if("meteors_armageddon") - global.meteors_armageddon=newval; - if("meteors_cataclysm") - global.meteors_cataclysm=newval; - if("meteors_catastrophic") - global.meteors_catastrophic=newval; - if("meteors_dust") - global.meteors_dust=newval; - if("meteors_major") - global.meteors_major=newval; - if("meteors_minor") - global.meteors_minor=newval; - if("meteors_moderate") - global.meteors_moderate=newval; - if("meteors_normal") - global.meteors_normal=newval; - if("meteors_threatening") - global.meteors_threatening=newval; - if("mil_branches") - global.mil_branches=newval; - if("mimic_defines") - global.mimic_defines=newval; - if("mining_floors") - global.mining_floors=newval; - if("mining_walls") - global.mining_walls=newval; - if("minor_air_alarms") - global.minor_air_alarms=newval; - if("minor_announcement") - global.minor_announcement=newval; - if("mob_hat_cache") - global.mob_hat_cache=newval; - if("mob_repository") - global.mob_repository=newval; - if("moving_levels") - global.moving_levels=newval; - if("multi_point_spawns") - global.multi_point_spawns=newval; - if("narsie_behaviour") - global.narsie_behaviour=newval; - if("narsie_cometh") - global.narsie_cometh=newval; - if("narsie_list") - global.narsie_list=newval; - if("navbeacons") - global.navbeacons=newval; - if("news_network") - global.news_network=newval; - if("newscaster_standard_feeds") - global.newscaster_standard_feeds=newval; - if("next_account_number") - global.next_account_number=newval; - if("next_duration_update") - global.next_duration_update=newval; - if("next_station_date_change") - global.next_station_date_change=newval; - if("ninjastart") - global.ninjastart=newval; - if("ntnet_card_uid") - global.ntnet_card_uid=newval; - if("ntnet_global") - global.ntnet_global=newval; - if("ntnrc_uid") - global.ntnrc_uid=newval; - if("nttransfer_uid") - global.nttransfer_uid=newval; - if("nuke_disks") - global.nuke_disks=newval; - if("num_financial_terminals") - global.num_financial_terminals=newval; - if("organ_cache") - global.organ_cache=newval; - if("organ_rel_size") - global.organ_rel_size=newval; - if("outfits_decls_") - global.outfits_decls_=newval; - if("outfits_decls_by_type_") - global.outfits_decls_by_type_=newval; - if("outfits_decls_root_") - global.outfits_decls_root_=newval; - if("overmap_event_handler") - global.overmap_event_handler=newval; - if("paiController") - global.paiController=newval; - if("pai_emotions") - global.pai_emotions=newval; - if("pai_software_by_key") - global.pai_software_by_key=newval; - if("paramslist_cache") - global.paramslist_cache=newval; - if("photo_count") - global.photo_count=newval; - if("pipe_colors") - global.pipe_colors=newval; - if("plant_seed_sprites") - global.plant_seed_sprites=newval; - if("playable_species") - global.playable_species=newval; - if("possible_changeling_IDs") - global.possible_changeling_IDs=newval; - if("powerinstances") - global.powerinstances=newval; - if("powers") - global.powers=newval; - if("priority_air_alarms") - global.priority_air_alarms=newval; - if("priority_announcement") - global.priority_announcement=newval; - if("priv_all_access") - global.priv_all_access=newval; - if("priv_all_access_datums") - global.priv_all_access_datums=newval; - if("priv_all_access_datums_id") - global.priv_all_access_datums_id=newval; - if("priv_all_access_datums_region") - global.priv_all_access_datums_region=newval; - if("priv_centcom_access") - global.priv_centcom_access=newval; - if("priv_region_access") - global.priv_region_access=newval; - if("priv_station_access") - global.priv_station_access=newval; - if("priv_syndicate_access") - global.priv_syndicate_access=newval; - if("prometheans") - global.prometheans=newval; - if("protected_objects") - global.protected_objects=newval; - if("rad_collectors") - global.rad_collectors=newval; - if("radio_controller") - global.radio_controller=newval; - if("radiochannels") - global.radiochannels=newval; - if("random_junk_") - global.random_junk_=newval; - if("random_maps") - global.random_maps=newval; - if("random_useful_") - global.random_useful_=newval; - if("recentmessages") - global.recentmessages=newval; - if("req_console_assistance") - global.req_console_assistance=newval; - if("req_console_information") - global.req_console_information=newval; - if("req_console_supplies") - global.req_console_supplies=newval; - if("responsive_carriers") - global.responsive_carriers=newval; - if("revdata") - global.revdata=newval; - if("robot_custom_icons") - global.robot_custom_icons=newval; - if("robot_hud_colours") - global.robot_hud_colours=newval; - if("robot_inventory") - global.robot_inventory=newval; - if("round_start_time") - global.round_start_time=newval; - if("roundstart_hour") - global.roundstart_hour=newval; - if("rune_list") - global.rune_list=newval; - if("same_wires") - global.same_wires=newval; - if("send_emergency_team") - global.send_emergency_team=newval; - if("sent_spiders_to_station") - global.sent_spiders_to_station=newval; - if("server_name") - global.server_name=newval; - if("severity_to_string") - global.severity_to_string=newval; - if("ship_engines") - global.ship_engines=newval; - if("side_effects") - global.side_effects=newval; - if("skin_styles_female_list") - global.skin_styles_female_list=newval; - if("skipped_unit_tests") - global.skipped_unit_tests=newval; - if("slot_flags_enumeration") - global.slot_flags_enumeration=newval; - if("solar_gen_rate") - global.solar_gen_rate=newval; - if("sortInstance") - global.sortInstance=newval; - if("sounds_cache") - global.sounds_cache=newval; - if("spacevines_spawned") - global.spacevines_spawned=newval; - if("sparring_attack_cache") - global.sparring_attack_cache=newval; - if("spells") - global.spells=newval; - if("splatter_cache") - global.splatter_cache=newval; - if("sqladdress") - global.sqladdress=newval; - if("sqldb") - global.sqldb=newval; - if("sqlenabled") - global.sqlenabled=newval; - if("sqlfdbkdb") - global.sqlfdbkdb=newval; - if("sqlfdbklogin") - global.sqlfdbklogin=newval; - if("sqlfdbkpass") - global.sqlfdbkpass=newval; - if("sqllogin") - global.sqllogin=newval; - if("sqlpass") - global.sqlpass=newval; - if("sqlport") - global.sqlport=newval; - if("station_account") - global.station_account=newval; - if("station_date") - global.station_date=newval; - if("stool_cache") - global.stool_cache=newval; - if("stored_shock_by_ref") - global.stored_shock_by_ref=newval; - if("string_part_flags") - global.string_part_flags=newval; - if("string_slot_flags") - global.string_slot_flags=newval; - if("supply_drop") - global.supply_drop=newval; - if("supply_methods_") - global.supply_methods_=newval; - if("syndicate_access") - global.syndicate_access=newval; - if("syndicate_code_phrase") - global.syndicate_code_phrase=newval; - if("syndicate_code_response") - global.syndicate_code_response=newval; - if("syndicate_name") - global.syndicate_name=newval; - if("tail_icon_cache") - global.tail_icon_cache=newval; - if("tank_gauge_cache") - global.tank_gauge_cache=newval; - if("tape_roll_applications") - global.tape_roll_applications=newval; - if("telecomms_list") - global.telecomms_list=newval; - if("ticket_panels") - global.ticket_panels=newval; - if("tickets") - global.tickets=newval; - if("total_lighting_corners") - global.total_lighting_corners=newval; - if("total_lighting_overlays") - global.total_lighting_overlays=newval; - if("total_lighting_sources") - global.total_lighting_sources=newval; - if("total_unit_tests") - global.total_unit_tests=newval; - if("transfer_controller") - global.transfer_controller=newval; - if("turbolifts") - global.turbolifts=newval; - if("turret_icons") - global.turret_icons=newval; - if("uniqueness_repository") - global.uniqueness_repository=newval; - if("universe_has_ended") - global.universe_has_ended=newval; - if("uplink") - global.uplink=newval; - if("uplink_purchase_repository") - global.uplink_purchase_repository=newval; - if("uplink_random_selections_") - global.uplink_random_selections_=newval; - if("valid_bloodtypes") - global.valid_bloodtypes=newval; - if("vendor_account") - global.vendor_account=newval; - if("ventcrawl_machinery") - global.ventcrawl_machinery=newval; - if("view_variables_dont_expand") - global.view_variables_dont_expand=newval; - if("view_variables_no_assoc") - global.view_variables_no_assoc=newval; - if("visual_nets") - global.visual_nets=newval; - if("vsc") - global.vsc=newval; - if("wax_recipes") - global.wax_recipes=newval; - if("weighted_mundaneevent_locations") - global.weighted_mundaneevent_locations=newval; - if("weighted_randomevent_locations") - global.weighted_randomevent_locations=newval; - if("whitelist") - global.whitelist=newval; - if("wireColours") - global.wireColours=newval; - if("world_uplinks") - global.world_uplinks=newval; - if("worths") - global.worths=newval; - if("wrapped_species_by_ref") - global.wrapped_species_by_ref=newval; - if("z_levels") - global.z_levels=newval; - if("zone_blocked") - global.zone_blocked=newval; - -/var/list/_all_globals=list( - "ANTAG_FREQS", - "AWAY_FREQS_ASSIGNED", - "AWAY_FREQS_UNASSIGNED", - "BSACooldown", - "BUMP_TELEPORTERS", - "Banlist", - "CENT_FREQS", - "CMinutes", - "DEPT_FREQS", - "Failsafe", - "GLOB", - "IClog", - "LIGHTING_CORNER_DIAGONAL", - "Master", - "OOClog", - "SSai", - "SSaifast", - "SSair", - "SSairflow", - "SSalarm", - "SSao", - "SSatoms", - "SScharacter_setup", - "SSchat", - "SSchemistry", - "SScircuit", - "SScircuit_components", - "SScodex", - "SSculture", - "SScustomitems", - "SSdisposals", - "SSevac", - "SSevent", - "SSfabrication", - "SSfastprocess", - "SSfluids", - "SSgarbage", - "SSghost_images", - "SSgoals", - "SSgraphs_process", - "SSgraphs_update", - "SSicon_update", - "SSinactivity", - "SSinit_misc", - "SSinit_misc_early", - "SSinit_misc_late", - "SSjobs", - "SSlighting", - "SSmachines", - "SSmapping", - "SSmaterials", - "SSmisc_slow", - "SSmobs", - "SSnano", - "SSobj", - "SSpersistence", - "SSping", - "SSplants", - "SSpresence", - "SSprocessing", - "SSpsi", - "SSradiation", - "SSrobots", - "SSshuttle", - "SSskybox", - "SSsupply", - "SStemperature", - "SSthrowing", - "SSticker", - "SStimer", - "SSturf", - "SSvines", - "SSvote", - "SSwebhooks", - "SSzcopy", - "Tier1Runes", - "Tier2Runes", - "Tier3Runes", - "Tier4Runes", - "WALLITEMS", - "_all_globals", - "_client_preferences", - "_client_preferences_by_key", - "_client_preferences_by_type", - "account_hack_attempted", - "additional_antag_types", - "admin_datums", - "admin_pm_repository", - "admin_ranks", - "admin_secrets", - "admin_verbs_admin", - "admin_verbs_ban", - "admin_verbs_debug", - "admin_verbs_default", - "admin_verbs_fun", - "admin_verbs_hideable", - "admin_verbs_mod", - "admin_verbs_paranoid_debug", - "admin_verbs_permissions", - "admin_verbs_possess", - "admin_verbs_rejuv", - "admin_verbs_server", - "admin_verbs_sounds", - "admin_verbs_spawn", - "adminhelp_ignored_words", - "adminlog", - "ai_list", - "ai_status_emotions", - "ai_verbs_default", - "air_alarm_topic", - "air_blocked", - "airlock_overlays", - "alien_whitelist", - "allCasters", - "allConsoles", - "all_grabobjects", - "all_grabstates", - "all_languages", - "all_money_accounts", - "all_objectives", - "all_robolimbs", - "all_species", - "all_ui_styles", - "all_unit_tests_passed", - "all_virtual_listeners", - "announced_news_types", - "antag_add_finished", - "appearance_manager", - "area_repository", - "artefact_feedback", - "ascii_esc", - "ascii_green", - "ascii_red", - "ascii_reset", - "ascii_yellow", - "asset_datums", - "assigned", - "assigned_blocks", - "attack_log_repository", - "base_miss_chance", - "basic_robolimb", - "blocked", - "bomb_set", - "cable_list", - "cached_icons", - "cached_space", - "camera_range_display_status", - "camera_repository", - "cameranet", - "can_call_ert", - "captain_announcement", - "channel_color_presets", - "channel_to_radio_key", - "chargen_robolimbs", - "chemical_reaction_logs", - "chicken_count", - "client_preference_stats_", - "client_repository", - "combatlog", - "comm_message_listeners", - "command_announcement", - "common_tools", - "config", - "contamination_overlay", - "create_mob_html", - "create_object_html", - "create_turf_html", - "created", - "crew_repository", - "csrfz_check", - "damage_icon_parts", - "dbcon", - "dbcon_old", - "debug_verbs", - "decls_repository", - "default_material_composition", - "default_mobloc", - "default_pai_software", - "delta_index", - "department_accounts", - "department_radio_keys", - "diary", - "dna_activity_bounds", - "dna_genes", - "doppler_arrays", - "dummy_lighting_corner", - "empty_playable_ai_cores", - "endgame_exits", - "endgame_safespawns", - "ert_base_chance", - "escape_pods", - "escape_pods_by_name", - "evacuation_controller", - "event_last_fired", - "eventchance", - "explosion_in_progress", - "explosion_turfs", - "failed_db_connections", - "failed_old_db_connections", - "failed_unit_tests", - "file_uid", - "finds_as_strings", - "flesh_hud_colours", - "floorIsLava", - "floor_decals", - "floor_light_cache", - "flooring_cache", - "fluidtrack_cache", - "follow_repository", - "forced_ambiance_list", - "fruit_icon_cache", - "fusion_reactions", - "game_id", - "gas_data", - "gear_datums", - "gear_tweak_free_color_choice_", - "gender_datums", - "ghost_darkness_images", - "ghost_sightless_images", - "ghost_traps", - "global_message_listener", - "global_vars_", - "gzn_check", - "hadevent", - "hivemind_bank", - "holder_mob_icon_cache", - "human_icon_cache", - "id_card_states", - "image_repository", - "init", - "intents", - "intercom_range_display_status", - "invalid_zone", - "jobMax", - "jobban_keylist", - "jobban_runonce", - "landmarks_list", - "language_keys", - "last_chew", - "last_message_id", - "last_round_duration", - "light_overlay_cache", - "lighting_overlays_initialised", - "limb_icon_cache", - "loadout_categories", - "log_end", - "lunchables_drink_reagents_", - "lunchables_drinks_", - "lunchables_ethanol_reagents_", - "lunchables_lunches_", - "lunchables_snacks_", - "magazine_icondata_keys", - "magazine_icondata_states", - "maint_all_access", - "mannequins_", - "map_count", - "map_sectors", - "mark", - "maze_cell_count", - "mechas_list", - "merged", - "message_delay", - "message_servers", - "meteors_armageddon", - "meteors_cataclysm", - "meteors_catastrophic", - "meteors_dust", - "meteors_major", - "meteors_minor", - "meteors_moderate", - "meteors_normal", - "meteors_threatening", - "mil_branches", - "mimic_defines", - "mining_floors", - "mining_walls", - "minor_air_alarms", - "minor_announcement", - "mob_hat_cache", - "mob_repository", - "moving_levels", - "multi_point_spawns", - "narsie_behaviour", - "narsie_cometh", - "narsie_list", - "navbeacons", - "news_network", - "newscaster_standard_feeds", - "next_account_number", - "next_duration_update", - "next_station_date_change", - "ninjastart", - "ntnet_card_uid", - "ntnet_global", - "ntnrc_uid", - "nttransfer_uid", - "nuke_disks", - "num_financial_terminals", - "organ_cache", - "organ_rel_size", - "outfits_decls_", - "outfits_decls_by_type_", - "outfits_decls_root_", - "overmap_event_handler", - "paiController", - "pai_emotions", - "pai_software_by_key", - "paramslist_cache", - "photo_count", - "pipe_colors", - "plant_seed_sprites", - "playable_species", - "possible_changeling_IDs", - "powerinstances", - "powers", - "priority_air_alarms", - "priority_announcement", - "priv_all_access", - "priv_all_access_datums", - "priv_all_access_datums_id", - "priv_all_access_datums_region", - "priv_centcom_access", - "priv_region_access", - "priv_station_access", - "priv_syndicate_access", - "prometheans", - "protected_objects", - "rad_collectors", - "radio_controller", - "radiochannels", - "random_junk_", - "random_maps", - "random_useful_", - "recentmessages", - "req_console_assistance", - "req_console_information", - "req_console_supplies", - "responsive_carriers", - "revdata", - "robot_custom_icons", - "robot_hud_colours", - "robot_inventory", - "round_start_time", - "roundstart_hour", - "rune_list", - "same_wires", - "send_emergency_team", - "sent_spiders_to_station", - "server_name", - "severity_to_string", - "ship_engines", - "side_effects", - "skin_styles_female_list", - "skipped_unit_tests", - "slot_flags_enumeration", - "solar_gen_rate", - "sortInstance", - "sounds_cache", - "spacevines_spawned", - "sparring_attack_cache", - "spells", - "splatter_cache", - "sqladdress", - "sqldb", - "sqlenabled", - "sqlfdbkdb", - "sqlfdbklogin", - "sqlfdbkpass", - "sqllogin", - "sqlpass", - "sqlport", - "station_account", - "station_date", - "stool_cache", - "stored_shock_by_ref", - "string_part_flags", - "string_slot_flags", - "supply_drop", - "supply_methods_", - "syndicate_access", - "syndicate_code_phrase", - "syndicate_code_response", - "syndicate_name", - "tail_icon_cache", - "tank_gauge_cache", - "tape_roll_applications", - "telecomms_list", - "ticket_panels", - "tickets", - "total_lighting_corners", - "total_lighting_overlays", - "total_lighting_sources", - "total_unit_tests", - "transfer_controller", - "turbolifts", - "turret_icons", - "uniqueness_repository", - "universe_has_ended", - "uplink", - "uplink_purchase_repository", - "uplink_random_selections_", - "valid_bloodtypes", - "vendor_account", - "ventcrawl_machinery", - "view_variables_dont_expand", - "view_variables_no_assoc", - "visual_nets", - "vsc", - "wax_recipes", - "weighted_mundaneevent_locations", - "weighted_randomevent_locations", - "whitelist", - "wireColours", - "world_uplinks", - "worths", - "wrapped_species_by_ref", - "z_levels", - "zone_blocked") diff --git a/code/_helpers/global_lists.dm b/code/_helpers/global_lists.dm deleted file mode 100644 index 37753702bbcf2..0000000000000 --- a/code/_helpers/global_lists.dm +++ /dev/null @@ -1,191 +0,0 @@ -//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 - -/// All /obj/structure/cable, managed by instances -GLOBAL_LIST_EMPTY(cable_list) - -/// All medical side effects -GLOBAL_LIST_EMPTY(side_effects) - -/// All character setup mannequins -GLOBAL_LIST_EMPTY(mannequins) - -var/global/list/landmarks_list = list() //list of all landmarks created - -#define all_genders_define_list list(MALE,FEMALE,PLURAL,NEUTER) -#define all_genders_text_list list("Male","Female","Plural","Neuter") - -//Languages/species/whitelist. -var/global/list/all_species[0] -var/global/list/datum/language/all_languages = list() -var/global/list/language_keys[0] // Table of say codes for all languages -var/global/list/playable_species = list(SPECIES_HUMAN) // A list of ALL playable species, whitelisted, latejoin or otherwise. - - - -// Grabs -var/global/list/all_grabstates[0] -var/global/list/all_grabobjects[0] - -// Uplinks -var/global/list/obj/item/device/uplink/world_uplinks = list() - -//Preferences stuff -//Hairstyles -GLOBAL_LIST_EMPTY(hair_styles_list) //stores /datum/sprite_accessory/hair indexed by name -GLOBAL_LIST_EMPTY(facial_hair_styles_list) //stores /datum/sprite_accessory/facial_hair indexed by name - -var/global/list/skin_styles_female_list = list() //unused -GLOBAL_LIST_EMPTY(body_marking_styles_list) //stores /datum/sprite_accessory/marking indexed by name - -GLOBAL_DATUM_INIT(underwear, /datum/category_collection/underwear, new()) - -// Visual nets -var/global/list/datum/visualnet/visual_nets = list() -var/global/datum/visualnet/camera/cameranet = new() - -// Runes -var/global/list/rune_list = new() -var/global/list/endgame_exits = list() -var/global/list/endgame_safespawns = list() - -var/global/list/syndicate_access = list(access_maint_tunnels, access_syndicate, access_external_airlocks) - -// Strings which corraspond to bodypart covering flags, useful for outputting what something covers. -var/global/list/string_part_flags = list( - "head" = HEAD, - "face" = FACE, - "eyes" = EYES, - "upper body" = UPPER_TORSO, - "lower body" = LOWER_TORSO, - "legs" = LEGS, - "feet" = FEET, - "arms" = ARMS, - "hands" = HANDS -) - -// Strings which corraspond to slot flags, useful for outputting what slot something is. -var/global/list/string_slot_flags = list( - "back" = SLOT_BACK, - "face" = SLOT_MASK, - "waist" = SLOT_BELT, - "ID slot" = SLOT_ID, - "ears" = SLOT_EARS, - "eyes" = SLOT_EYES, - "hands" = SLOT_GLOVES, - "head" = SLOT_HEAD, - "feet" = SLOT_FEET, - "exo slot" = SLOT_OCLOTHING, - "body" = SLOT_ICLOTHING, - "uniform" = SLOT_TIE, - "holster" = SLOT_HOLSTER -) - -////////////////////////// -/////Initial Building///// -////////////////////////// - -/proc/get_mannequin(ckey) - if (!GLOB.mannequins[ckey]) - GLOB.mannequins[ckey] = new /mob/living/carbon/human/dummy/mannequin - return GLOB.mannequins[ckey] - - -/hook/global_init/proc/makeDatumRefLists() - var/list/paths - - //Hair - Initialise all /datum/sprite_accessory/hair into an list indexed by hair-style name - paths = typesof(/datum/sprite_accessory/hair) - /datum/sprite_accessory/hair - for(var/path in paths) - var/datum/sprite_accessory/hair/H = path - if (!initial(H.name)) - continue - H = new path() - GLOB.hair_styles_list[H.name] = H - - //Facial Hair - Initialise all /datum/sprite_accessory/facial_hair into an list indexed by facialhair-style name - paths = typesof(/datum/sprite_accessory/facial_hair) - /datum/sprite_accessory/facial_hair - for(var/path in paths) - var/datum/sprite_accessory/facial_hair/H = path - if (!initial(H.name)) - continue - H = new path() - GLOB.facial_hair_styles_list[H.name] = H - - //Body markings - Initialise all /datum/sprite_accessory/marking into an list indexed by marking name - paths = typesof(/datum/sprite_accessory/marking) - /datum/sprite_accessory/marking - for(var/path in paths) - var/datum/sprite_accessory/marking/M = path - if (!initial(M.name)) - continue - M = new path() - GLOB.body_marking_styles_list[M.name] = M - - //Languages and species. - paths = typesof(/datum/language)-/datum/language - for(var/T in paths) - var/datum/language/L = new T - all_languages[L.name] = L - - for (var/language_name in all_languages) - var/datum/language/L = all_languages[language_name] - if(!(L.flags & NONGLOBAL)) - language_keys[lowertext(L.key)] = L - - var/rkey = 0 - paths = typesof(/datum/species) - for(var/T in paths) - - rkey++ - - var/datum/species/S = T - if(!initial(S.name)) - continue - - S = new T - S.race_key = rkey //Used in mob icon caching. - all_species[S.name] = S - if(!(S.spawn_flags & SPECIES_IS_RESTRICTED)) - playable_species += S.name - - //Grabs - paths = typesof(/datum/grab) - /datum/grab - for(var/T in paths) - var/datum/grab/G = new T - if(G.state_name) - all_grabstates[G.state_name] = G - - paths = typesof(/obj/item/grab) - /obj/item/grab - for(var/T in paths) - var/obj/item/grab/G = T - all_grabobjects[initial(G.type_name)] = T - - for(var/grabstate_name in all_grabstates) - var/datum/grab/G = all_grabstates[grabstate_name] - G.refresh_updown() - - return 1 - -//*** params cache -var/global/list/paramslist_cache = list() - -#define cached_key_number_decode(key_number_data) cached_params_decode(key_number_data, /proc/key_number_decode) -#define cached_number_list_decode(number_list_data) cached_params_decode(number_list_data, /proc/number_list_decode) - -/proc/cached_params_decode(var/params_data, var/decode_proc) - . = paramslist_cache[params_data] - if(!.) - . = call(decode_proc)(params_data) - paramslist_cache[params_data] = . - -/proc/key_number_decode(var/key_number_data) - var/list/L = params2list(key_number_data) - for(var/key in L) - L[key] = text2num(L[key]) - return L - -/proc/number_list_decode(var/number_list_data) - var/list/L = params2list(number_list_data) - for(var/i in 1 to L.len) - L[i] = text2num(L[i]) - return L diff --git a/code/_helpers/icons.dm b/code/_helpers/icons.dm deleted file mode 100644 index 013911a1cde55..0000000000000 --- a/code/_helpers/icons.dm +++ /dev/null @@ -1,926 +0,0 @@ -/* -IconProcs README - -A BYOND library for manipulating icons and colors - -by Lummox JR - -version 1.0 - -The IconProcs library was made to make a lot of common icon operations much easier. BYOND's icon manipulation -routines are very capable but some of the advanced capabilities like using alpha transparency can be unintuitive to beginners. - -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') - -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 - transparent is usually much easier than making it less so, however. This proc basically is a frontend - for MapColors() which can change opacity any way you like, in much the same way that SetIntensity() - can make an icon lighter or darker. If amount is 0.5, the opacity of the icon will be cut in half. - If amount is 2, opacity is doubled and anything more than half-opaque will become fully opaque. -icon/GrayScale() - Converts the icon to grayscale instead of a fully colored icon. Alpha values are left intact. -icon/ColorTone(tone) - Similar to GrayScale(), this proc converts the icon to a range of black -> tone -> white, where tone is an - RGB color (its alpha is ignored). This can be used to create a sepia tone or similar effect. - See also the global ColorTone() proc. -icon/MinColors(icon) - The icon is blended with a second icon where the minimum of each RGB pixel is the result. - Transparency may increase, as if the icons were blended with ICON_ADD. You may supply a color in place of an icon. -icon/MaxColors(icon) - The icon is blended with a second icon where the maximum of each RGB pixel is the result. - Opacity may increase, as if the icons were blended with ICON_OR. You may supply a color in place of an icon. -icon/Opaque(background = "#000000") - All alpha values are set to 255 throughout the icon. Transparent pixels become black, or whatever background color you specify. -icon/BecomeAlphaMask() - You can convert a simple grayscale icon into an alpha mask to use with other icons very easily with this proc. - The black parts become transparent, the white parts stay white, and anything in between becomes a translucent shade of white. -icon/AddAlphaMask(mask) - The alpha values of the mask icon will be blended with the current icon. Anywhere the mask is opaque, - the current icon is untouched. Anywhere the mask is transparent, the current icon becomes transparent. - Where the mask is translucent, the current icon becomes more transparent. -icon/UseAlphaMask(mask, mode) - Sometimes you may want to take the alpha values from one icon and use them on a different icon. - This proc will do that. Just supply the icon whose alpha mask you want to use, and src will change - so it has the same colors as before but uses the mask for opacity. - -COLOR MANAGEMENT AND HSV - -RGB isn't the only way to represent color. Sometimes it's more useful to work with a model called HSV, which stands for hue, saturation, and value. - - * The hue of a color describes where it is along the color wheel. It goes from red to yellow to green to - cyan to blue to magenta and back to red. - * The saturation of a color is how much color is in it. A color with low saturation will be more gray, - and with no saturation at all it is a shade of gray. - * The value of a color determines how bright it is. A high-value color is vivid, moderate value is dark, - and no value at all is black. - -Just as BYOND uses "#rrggbb" to represent RGB values, a similar format is used for HSV: "#hhhssvv". The hue is three -hex digits because it ranges from 0 to 0x5FF. - - * 0 to 0xFF - red to yellow - * 0x100 to 0x1FF - yellow to green - * 0x200 to 0x2FF - green to cyan - * 0x300 to 0x3FF - cyan to blue - * 0x400 to 0x4FF - blue to magenta - * 0x500 to 0x5FF - magenta to red - -Knowing this, you can figure out that red is "#000ffff" in HSV format, which is hue 0 (red), saturation 255 (as colorful as possible), -value 255 (as bright as possible). Green is "#200ffff" and blue is "#400ffff". - -More than one HSV color can match the same RGB color. - -Here are some procs you can use for color management: - -ReadRGB(rgb) - Takes an RGB string like "#ffaa55" and converts it to a list such as list(255,170,85). If an RGBA format is used - that includes alpha, the list will have a fourth item for the alpha value. -hsv(hue, sat, val, apha) - Counterpart to rgb(), this takes the values you input and converts them to a string in "#hhhssvv" or "#hhhssvvaa" - format. Alpha is not included in the result if null. -ReadHSV(rgb) - Takes an HSV string like "#100ff80" and converts it to a list such as list(256,255,128). If an HSVA format is used that - includes alpha, the list will have a fourth item for the alpha value. -RGBtoHSV(rgb) - Takes an RGB or RGBA string like "#ffaa55" and converts it into an HSV or HSVA color such as "#080aaff". -HSVtoRGB(hsv) - Takes an HSV or HSVA string like "#080aaff" and converts it into an RGB or RGBA color such as "#ff55aa". -BlendRGB(rgb1, rgb2, amount) - Blends between two RGB or RGBA colors using regular RGB blending. If amount is 0, the first color is the result; - if 1, the second color is the result. 0.5 produces an average of the two. Values outside the 0 to 1 range are allowed as well. - The returned value is an RGB or RGBA color. -BlendHSV(hsv1, hsv2, amount) - Blends between two HSV or HSVA colors using HSV blending, which tends to produce nicer results than regular RGB - blending because the brightness of the color is left intact. If amount is 0, the first color is the result; if 1, - the second color is the result. 0.5 produces an average of the two. Values outside the 0 to 1 range are allowed as well. - The returned value is an HSV or HSVA color. -BlendRGBasHSV(rgb1, rgb2, amount) - Like BlendHSV(), but the colors used and the return value are RGB or RGBA colors. The blending is done in HSV form. -HueToAngle(hue) - Converts a hue to an angle range of 0 to 360. Angle 0 is red, 120 is green, and 240 is blue. -AngleToHue(hue) - Converts an angle to a hue in the valid range. -RotateHue(hsv, angle) - Takes an HSV or HSVA value and rotates the hue forward through red, green, and blue by an angle from 0 to 360. - (Rotating red by 60 degrees produces yellow.) The result is another HSV or HSVA color with the same saturation and value - as the original, but a different hue. -GrayScale(rgb) - Takes an RGB or RGBA color and converts it to grayscale. Returns an RGB or RGBA string. -ColorTone(rgb, tone) - Similar to GrayScale(), this proc converts an RGB or RGBA color to a range of black -> tone -> white instead of - using strict shades of gray. The tone value is an RGB color; any alpha value is ignored. -*/ - -/* -Get Flat Icon DEMO by DarkCampainger - -This is a test for the get flat icon proc, modified approprietly for icons and their states. -Probably not a good idea to run this unless you want to see how the proc works in detail. -mob - icon = 'old_or_unused.dmi' - icon_state = "green" - - Login() - // Testing image underlays - underlays += image(icon='old_or_unused.dmi',icon_state="red") - underlays += image(icon='old_or_unused.dmi',icon_state="red", pixel_x = 32) - underlays += image(icon='old_or_unused.dmi',icon_state="red", pixel_x = -32) - - // Testing image overlays - overlays += image(icon='old_or_unused.dmi',icon_state="green", pixel_x = 32, pixel_y = -32) - overlays += image(icon='old_or_unused.dmi',icon_state="green", pixel_x = 32, pixel_y = 32) - overlays += image(icon='old_or_unused.dmi',icon_state="green", pixel_x = -32, pixel_y = -32) - - // Testing icon file overlays (defaults to mob's state) - overlays += '_flat_demoIcons2.dmi' - - // Testing icon_state overlays (defaults to mob's icon) - overlays += "white" - - // Testing dynamic icon overlays - var/icon/I = icon('old_or_unused.dmi', icon_state="aqua") - I.Shift(NORTH,16,1) - overlays+=I - - // Testing dynamic image overlays - I=image(icon=I,pixel_x = -32, pixel_y = 32) - overlays+=I - - // Testing object types (and layers) - overlays+=/obj/effect/overlayTest - - loc = locate (10,10,1) - verb - Browse_Icon() - set name = "1. Browse Icon" - // Give it a name for the cache - var/iconName = "[ckey(src.name)]_flattened.dmi" - // Send the icon to src's local cache - send_rsc(src, getFlatIcon(src), iconName) - // Display the icon in their browser - show_browser(src, "

", null) - - Output_Icon() - set name = "2. Output Icon" - to_chat(src, "Icon is: \icon[getFlatIcon(src)]") - - Label_Icon() - set name = "3. Label Icon" - // Give it a name for the cache - var/iconName = "[ckey(src.name)]_flattened.dmi" - // Copy the file to the rsc manually - var/icon/I = fcopy_rsc(getFlatIcon(src)) - // Send the icon to src's local cache - send_rsc(src, I, iconName) - // Update the label to show it - winset(src,"imageLabel","image='\ref[I]'"); - - Add_Overlay() - set name = "4. Add Overlay" - overlays += image(icon='old_or_unused.dmi',icon_state="yellow",pixel_x = rand(-64,32), pixel_y = rand(-64,32)) - - Stress_Test() - set name = "5. Stress Test" - for(var/i = 0 to 1000) - // The third parameter forces it to generate a new one, even if it's already cached - getFlatIcon(src,0,2) - if(prob(5)) - Add_Overlay() - Browse_Icon() - - Cache_Test() - set name = "6. Cache Test" - for(var/i = 0 to 1000) - getFlatIcon(src) - Browse_Icon() - -/obj/effect/overlayTest - icon = 'old_or_unused.dmi' - icon_state = "blue" - pixel_x = -24 - pixel_y = 24 - plane = ABOVE_TURF_PLANE - layer = HOLOMAP_LAYER - -world - view = "7x7" - maxx = 20 - maxy = 20 - maxz = 1 -*/ - -#define TO_HEX_DIGIT(n) ascii2text((n&15) + ((n&15)<10 ? 48 : 87)) - -/icon/proc/MakeLying() - var/icon/I = new(src,dir=SOUTH) - I.BecomeLying() - return I - -/icon/proc/BecomeLying() - Turn(90) - Shift(SOUTH,6) - Shift(EAST,1) - - // Multiply all alpha values by this float -/icon/proc/ChangeOpacity(opacity = 1.0) - MapColors(1,0,0,0, 0,1,0,0, 0,0,1,0, 0,0,0,opacity, 0,0,0,0) - - // Convert to grayscale -/icon/proc/GrayScale() - MapColors(0.3,0.3,0.3, 0.59,0.59,0.59, 0.11,0.11,0.11, 0,0,0) - -/icon/proc/ColorTone(tone) - GrayScale() - - var/list/TONE = ReadRGB(tone) - var/gray = round(TONE[1]*0.3 + TONE[2]*0.59 + TONE[3]*0.11, 1) - - var/icon/upper = (255-gray) ? new(src) : null - - if(gray) - MapColors(255/gray,0,0, 0,255/gray,0, 0,0,255/gray, 0,0,0) - Blend(tone, ICON_MULTIPLY) - else SetIntensity(0) - if(255-gray) - upper.Blend(rgb(gray,gray,gray), ICON_SUBTRACT) - upper.MapColors((255-TONE[1])/(255-gray),0,0,0, 0,(255-TONE[2])/(255-gray),0,0, 0,0,(255-TONE[3])/(255-gray),0, 0,0,0,0, 0,0,0,1) - Blend(upper, ICON_ADD) - - // Take the minimum color of two icons; combine transparency as if blending with ICON_ADD -/icon/proc/MinColors(icon) - var/icon/I = new(src) - I.Opaque() - I.Blend(icon, ICON_SUBTRACT) - Blend(I, ICON_SUBTRACT) - - // Take the maximum color of two icons; combine opacity as if blending with ICON_OR -/icon/proc/MaxColors(icon) - var/icon/I - if(isicon(icon)) - I = new(icon) - else - // solid color - I = new(src) - I.Blend("#000000", ICON_OVERLAY) - I.SwapColor("#000000", null) - I.Blend(icon, ICON_OVERLAY) - var/icon/J = new(src) - J.Opaque() - I.Blend(J, ICON_SUBTRACT) - Blend(I, ICON_OR) - - // make this icon fully opaque--transparent pixels become black -/icon/proc/Opaque(background = "#000000") - SwapColor(null, background) - MapColors(1,0,0,0, 0,1,0,0, 0,0,1,0, 0,0,0,0, 0,0,0,1) - - // Change a grayscale icon into a white icon where the original color becomes the alpha - // I.e., black -> transparent, gray -> translucent white, white -> solid white -/icon/proc/BecomeAlphaMask() - SwapColor(null, "#000000ff") // don't let transparent become gray - MapColors(0,0,0,0.3, 0,0,0,0.59, 0,0,0,0.11, 0,0,0,0, 1,1,1,0) - -/icon/proc/UseAlphaMask(mask) - Opaque() - AddAlphaMask(mask) - -/icon/proc/AddAlphaMask(mask) - var/icon/M = new(mask) - M.Blend("#ffffff", ICON_SUBTRACT) - // apply mask - Blend(M, ICON_ADD) - -/* - HSV format is represented as "#hhhssvv" or "#hhhssvvaa" - - Hue ranges from 0 to 0x5ff (1535) - - 0x000 = red - 0x100 = yellow - 0x200 = green - 0x300 = cyan - 0x400 = blue - 0x500 = magenta - - Saturation is from 0 to 0xff (255) - - More saturation = more color - Less saturation = more gray - - Value ranges from 0 to 0xff (255) - - Higher value means brighter color - */ - -/proc/ReadRGB(rgb) - if(!rgb) return - - // interpret the HSV or HSVA value - var/i=1,start=1 - if(text2ascii(rgb) == 35) ++start // skip opening # - var/ch,which=0,r=0,g=0,b=0,alpha=0,usealpha - var/digits=0 - for(i=start, i<=length(rgb), ++i) - ch = text2ascii(rgb, i) - if(ch < 48 || (ch > 57 && ch < 65) || (ch > 70 && ch < 97) || ch > 102) break - ++digits - if(digits == 8) break - - var/single = digits < 6 - if(digits != 3 && digits != 4 && digits != 6 && digits != 8) return - if(digits == 4 || digits == 8) usealpha = 1 - for(i=start, digits>0, ++i) - ch = text2ascii(rgb, i) - if(ch >= 48 && ch <= 57) ch -= 48 - else if(ch >= 65 && ch <= 70) ch -= 55 - else if(ch >= 97 && ch <= 102) ch -= 87 - else break - --digits - switch(which) - if(0) - r = SHIFTL(r, 4) | ch - if(single) - r |= SHIFTL(r, 4) - ++which - else if(!(digits & 1)) ++which - if(1) - g = SHIFTL(g, 4) | ch - if(single) - g |= SHIFTL(g, 4) - ++which - else if(!(digits & 1)) ++which - if(2) - b = SHIFTL(b, 4) | ch - if(single) - b |= SHIFTL(b, 4) - ++which - else if(!(digits & 1)) ++which - if(3) - alpha = SHIFTL(alpha, 4) | ch - if(single) alpha |= SHIFTL(alpha, 4) - - . = list(r, g, b) - if(usealpha) . += alpha - -/proc/ReadHSV(hsv) - if(!hsv) return - - // interpret the HSV or HSVA value - var/i=1,start=1 - if(text2ascii(hsv) == 35) ++start // skip opening # - var/ch,which=0,hue=0,sat=0,val=0,alpha=0,usealpha - var/digits=0 - for(i=start, i<=length(hsv), ++i) - ch = text2ascii(hsv, i) - if(ch < 48 || (ch > 57 && ch < 65) || (ch > 70 && ch < 97) || ch > 102) break - ++digits - if(digits == 9) break - if(digits > 7) usealpha = 1 - if(digits <= 4) ++which - if(digits <= 2) ++which - for(i=start, digits>0, ++i) - ch = text2ascii(hsv, i) - if(ch >= 48 && ch <= 57) ch -= 48 - else if(ch >= 65 && ch <= 70) ch -= 55 - else if(ch >= 97 && ch <= 102) ch -= 87 - else break - --digits - switch(which) - if(0) - hue = SHIFTL(hue, 4) | ch - if(digits == (usealpha ? 6 : 4)) ++which - if(1) - sat = SHIFTL(sat, 4) | ch - if(digits == (usealpha ? 4 : 2)) ++which - if(2) - val = SHIFTL(val, 4) | ch - if(digits == (usealpha ? 2 : 0)) ++which - if(3) - alpha = SHIFTL(alpha, 4) | ch - - . = list(hue, sat, val) - if(usealpha) . += alpha - -/proc/HSVtoRGB(hsv) - if(!hsv) return "#000000" - var/list/HSV = ReadHSV(hsv) - if(!HSV) return "#000000" - - var/hue = HSV[1] - var/sat = HSV[2] - var/val = HSV[3] - - // Compress hue into easier-to-manage range - hue -= SHIFTR(hue, 8) - if(hue >= 0x5fa) hue -= 0x5fa - - var/hi,mid,lo,r,g,b - hi = val - lo = round((255 - sat) * val / 255, 1) - mid = lo + round(abs(round(hue, 510) - hue) * (hi - lo) / 255, 1) - if(hue >= 765) - if(hue >= 1275) {r=hi; g=lo; b=mid} - else if(hue >= 1020) {r=mid; g=lo; b=hi } - else {r=lo; g=mid; b=hi } - else - if(hue >= 510) {r=lo; g=hi; b=mid} - else if(hue >= 255) {r=mid; g=hi; b=lo } - else {r=hi; g=mid; b=lo } - - return (HSV.len > 3) ? rgb(r,g,b,HSV[4]) : rgb(r,g,b) - -/proc/RGBtoHSV(rgb) - if(!rgb) return "#0000000" - var/list/RGB = ReadRGB(rgb) - if(!RGB) return "#0000000" - - var/r = RGB[1] - var/g = RGB[2] - var/b = RGB[3] - var/hi = max(r,g,b) - var/lo = min(r,g,b) - - var/val = hi - var/sat = hi ? round((hi-lo) * 255 / hi, 1) : 0 - var/hue = 0 - - if(sat) - var/dir - var/mid - if(hi == r) - if(lo == b) {hue=0; dir=1; mid=g} - else {hue=1535; dir=-1; mid=b} - else if(hi == g) - if(lo == r) {hue=512; dir=1; mid=b} - else {hue=511; dir=-1; mid=r} - else if(hi == b) - if(lo == g) {hue=1024; dir=1; mid=r} - else {hue=1023; dir=-1; mid=g} - hue += dir * round((mid-lo) * 255 / (hi-lo), 1) - - return hsv(hue, sat, val, (RGB.len>3 ? RGB[4] : null)) - -/proc/hsv(hue, sat, val, alpha) - if(hue < 0 || hue >= 1536) hue %= 1536 - if(hue < 0) hue += 1536 - if((hue & 0xFF) == 0xFF) - ++hue - if(hue >= 1536) hue = 0 - if(sat < 0) sat = 0 - if(sat > 255) sat = 255 - if(val < 0) val = 0 - if(val > 255) val = 255 - . = "#" - . += TO_HEX_DIGIT(SHIFTR(hue, 8)) - . += TO_HEX_DIGIT(SHIFTR(hue, 4)) - . += TO_HEX_DIGIT(hue) - . += TO_HEX_DIGIT(SHIFTR(sat, 4)) - . += TO_HEX_DIGIT(sat) - . += TO_HEX_DIGIT(SHIFTR(val, 4)) - . += TO_HEX_DIGIT(val) - if(!isnull(alpha)) - if(alpha < 0) alpha = 0 - if(alpha > 255) alpha = 255 - . += TO_HEX_DIGIT(SHIFTR(alpha, 4)) - . += TO_HEX_DIGIT(alpha) - -/* - Smooth blend between HSV colors - - amount=0 is the first color - amount=1 is the second color - amount=0.5 is directly between the two colors - - amount<0 or amount>1 are allowed - */ -/proc/BlendHSV(hsv1, hsv2, amount) - var/list/HSV1 = ReadHSV(hsv1) - var/list/HSV2 = ReadHSV(hsv2) - - // add missing alpha if needed - if(HSV1.len < HSV2.len) HSV1 += 255 - else if(HSV2.len < HSV1.len) HSV2 += 255 - var/usealpha = HSV1.len > 3 - - // normalize hsv values in case anything is screwy - if(HSV1[1] > 1536) HSV1[1] %= 1536 - if(HSV2[1] > 1536) HSV2[1] %= 1536 - if(HSV1[1] < 0) HSV1[1] += 1536 - if(HSV2[1] < 0) HSV2[1] += 1536 - if(!HSV1[3]) {HSV1[1] = 0; HSV1[2] = 0} - if(!HSV2[3]) {HSV2[1] = 0; HSV2[2] = 0} - - // no value for one color means don't change saturation - if(!HSV1[3]) HSV1[2] = HSV2[2] - if(!HSV2[3]) HSV2[2] = HSV1[2] - // no saturation for one color means don't change hues - if(!HSV1[2]) HSV1[1] = HSV2[1] - if(!HSV2[2]) HSV2[1] = HSV1[1] - - // Compress hues into easier-to-manage range - HSV1[1] -= SHIFTR(HSV1[1], 8) - HSV2[1] -= SHIFTR(HSV2[1], 8) - - var/hue_diff = HSV2[1] - HSV1[1] - if(hue_diff > 765) hue_diff -= 1530 - else if(hue_diff <= -765) hue_diff += 1530 - - var/hue = round(HSV1[1] + hue_diff * amount, 1) - var/sat = round(HSV1[2] + (HSV2[2] - HSV1[2]) * amount, 1) - var/val = round(HSV1[3] + (HSV2[3] - HSV1[3]) * amount, 1) - var/alpha = usealpha ? round(HSV1[4] + (HSV2[4] - HSV1[4]) * amount, 1) : null - - // normalize hue - if(hue < 0 || hue >= 1530) hue %= 1530 - if(hue < 0) hue += 1530 - // decompress hue - hue += round(hue / 255) - - return hsv(hue, sat, val, alpha) - -/* - Smooth blend between RGB colors - - amount=0 is the first color - amount=1 is the second color - amount=0.5 is directly between the two colors - - amount<0 or amount>1 are allowed - */ -/proc/BlendRGB(rgb1, rgb2, amount) - var/list/RGB1 = ReadRGB(rgb1) - var/list/RGB2 = ReadRGB(rgb2) - - // add missing alpha if needed - if(RGB1.len < RGB2.len) RGB1 += 255 - else if(RGB2.len < RGB1.len) RGB2 += 255 - var/usealpha = RGB1.len > 3 - - var/r = round(RGB1[1] + (RGB2[1] - RGB1[1]) * amount, 1) - var/g = round(RGB1[2] + (RGB2[2] - RGB1[2]) * amount, 1) - var/b = round(RGB1[3] + (RGB2[3] - RGB1[3]) * amount, 1) - var/alpha = usealpha ? round(RGB1[4] + (RGB2[4] - RGB1[4]) * amount, 1) : null - - return isnull(alpha) ? rgb(r, g, b) : rgb(r, g, b, alpha) - -/proc/BlendRGBasHSV(rgb1, rgb2, amount) - return HSVtoRGB(RGBtoHSV(rgb1), RGBtoHSV(rgb2), amount) - -/proc/HueToAngle(hue) - // normalize hsv in case anything is screwy - if(hue < 0 || hue >= 1536) hue %= 1536 - if(hue < 0) hue += 1536 - // Compress hue into easier-to-manage range - hue -= SHIFTR(hue, 8) - return hue / (1530/360) - -/proc/AngleToHue(angle) - // normalize hsv in case anything is screwy - if(angle < 0 || angle >= 360) angle -= 360 * round(angle / 360) - var/hue = angle * (1530/360) - // Decompress hue - hue += round(hue / 255) - return hue - - -// positive angle rotates forward through red->green->blue -/proc/RotateHue(hsv, angle) - var/list/HSV = ReadHSV(hsv) - - // normalize hsv in case anything is screwy - if(HSV[1] >= 1536) HSV[1] %= 1536 - if(HSV[1] < 0) HSV[1] += 1536 - - // Compress hue into easier-to-manage range - HSV[1] -= SHIFTR(HSV[1], 8) - - if(angle < 0 || angle >= 360) angle -= 360 * round(angle / 360) - HSV[1] = round(HSV[1] + angle * (1530/360), 1) - - // normalize hue - if(HSV[1] < 0 || HSV[1] >= 1530) HSV[1] %= 1530 - if(HSV[1] < 0) HSV[1] += 1530 - // decompress hue - HSV[1] += round(HSV[1] / 255) - - return hsv(HSV[1], HSV[2], HSV[3], (HSV.len > 3 ? HSV[4] : null)) - -// Convert an rgb color to grayscale -/proc/GrayScale(rgb) - var/list/RGB = ReadRGB(rgb) - var/gray = RGB[1]*0.3 + RGB[2]*0.59 + RGB[3]*0.11 - return (RGB.len > 3) ? rgb(gray, gray, gray, RGB[4]) : rgb(gray, gray, gray) - -// Change grayscale color to black->tone->white range -/proc/ColorTone(rgb, tone) - var/list/RGB = ReadRGB(rgb) - var/list/TONE = ReadRGB(tone) - - var/gray = RGB[1]*0.3 + RGB[2]*0.59 + RGB[3]*0.11 - var/tone_gray = TONE[1]*0.3 + TONE[2]*0.59 + TONE[3]*0.11 - - if(gray <= tone_gray) return BlendRGB("#000000", tone, gray/(tone_gray || 1)) - else return BlendRGB(tone, "#ffffff", (gray-tone_gray)/((255-tone_gray) || 1)) - - -/* -Get flat icon by DarkCampainger. As it says on the tin, will return an icon with all the overlays -as a single icon. Useful for when you want to manipulate an icon via the above as overlays are not normally included. -The _flatIcons list is a cache for generated icon files. -*/ - -/proc/getFlatIcon(image/A, defdir=2, deficon=null, defstate="", defblend=BLEND_DEFAULT, always_use_defdir = 0) - // We start with a blank canvas, otherwise some icon procs crash silently - var/icon/flat = icon('icons/effects/effects.dmi', "icon_state"="nothing") // Final flattened icon - if(!A) - return flat - if(A.alpha <= 0) - return flat - var/noIcon = FALSE - - var/curicon - if(A.icon) - curicon = A.icon - else - curicon = deficon - - if(!curicon) - noIcon = TRUE // Do not render this object. - - var/curstate - if(A.icon_state) - curstate = A.icon_state - else - curstate = defstate - - if(!noIcon && !(curstate in icon_states(curicon))) - if("" in icon_states(curicon)) - curstate = "" - else - noIcon = TRUE // Do not render this object. - - var/curdir - if(A.dir != 2 && !always_use_defdir) - curdir = A.dir - else - curdir = defdir - - var/curblend - if(A.blend_mode == BLEND_DEFAULT) - curblend = defblend - else - curblend = A.blend_mode - - // Layers will be a sorted list of icons/overlays, based on the order in which they are displayed - var/list/layers = list() - var/image/copy - // Add the atom's icon itself, without pixel_x/y offsets. - if(!noIcon) - copy = image(icon=curicon, icon_state=curstate, layer=A.layer, dir=curdir) - copy.color = A.color - copy.alpha = A.alpha - copy.blend_mode = curblend - layers[copy] = A.layer - - // Loop through the underlays, then overlays, sorting them into the layers list - var/list/process = A.underlays // Current list being processed - var/pSet=0 // Which list is being processed: 0 = underlays, 1 = overlays - var/curIndex=1 // index of 'current' in list being processed - var/current // Current overlay being sorted - var/currentLayer // Calculated layer that overlay appears on (special case for FLOAT_LAYER) - var/compare // The overlay 'add' is being compared against - var/cmpIndex // The index in the layers list of 'compare' - while(TRUE) - if(curIndex<=process.len) - current = process[curIndex] - if(current) - currentLayer = current:layer - if(currentLayer<0) // Special case for FLY_LAYER - if(currentLayer <= -1000) return flat - if(pSet == 0) // Underlay - currentLayer = A.layer+currentLayer/1000 - else // Overlay - currentLayer = A.layer+(1000+currentLayer)/1000 - - // Sort add into layers list - for(cmpIndex=1,cmpIndex<=layers.len,cmpIndex++) - compare = layers[cmpIndex] - if(currentLayer < layers[compare]) // Associated value is the calculated layer - layers.Insert(cmpIndex,current) - layers[current] = currentLayer - break - if(cmpIndex>layers.len) // Reached end of list without inserting - layers[current]=currentLayer // Place at end - - curIndex++ - else if(pSet == 0) // Switch to overlays - curIndex = 1 - pSet = 1 - process = A.overlays - else // All done - break - - var/icon/add // Icon of overlay being added - - // Current dimensions of flattened icon - var/flatX1=1 - var/flatX2=flat.Width() - var/flatY1=1 - var/flatY2=flat.Height() - // Dimensions of overlay being added - var/addX1 - var/addX2 - var/addY1 - var/addY2 - - for(var/I in layers) - - if(I:alpha == 0) - continue - - if(I == copy) // 'I' is an /image based on the object being flattened. - curblend = BLEND_OVERLAY - add = icon(I:icon, I:icon_state, I:dir) - // This checks for a silent failure mode of the icon routine. If the requested dir - // doesn't exist in this icon state it returns a 32x32 icon with 0 alpha. - if (I:dir != SOUTH && add.Width() == 32 && add.Height() == 32) - // Check every pixel for blank (computationally expensive, but the process is limited - // by the amount of film on the station, only happens when we hit something that's - // turned, and bails at the very first pixel it sees. - var/blankpixel; - for(var/y;y<=32;y++) - for(var/x;x<32;x++) - blankpixel = isnull(add.GetPixel(x,y)) - if(!blankpixel) - break - if(!blankpixel) - break - // If we ALWAYS returned a null (which happens when GetPixel encounters something with alpha 0) - if (blankpixel) - // Pull the default direction. - add = icon(I:icon, I:icon_state) - else // 'I' is an appearance object. - if(istype(A,/obj/machinery/atmospherics) && (I in A.underlays)) - var/image/Im = I - add = getFlatIcon(new/image(I), Im.dir, curicon, curstate, curblend, 1) - else - add = getFlatIcon(new/image(I), curdir, curicon, curstate, curblend, always_use_defdir) - - // Find the new dimensions of the flat icon to fit the added overlay - addX1 = min(flatX1, I:pixel_x+1) - addX2 = max(flatX2, I:pixel_x+add.Width()) - addY1 = min(flatY1, I:pixel_y+1) - addY2 = max(flatY2, I:pixel_y+add.Height()) - - if(addX1!=flatX1 || addX2!=flatX2 || addY1!=flatY1 || addY2!=flatY2) - // Resize the flattened icon so the new icon fits - flat.Crop(addX1-flatX1+1, addY1-flatY1+1, addX2-flatX1+1, addY2-flatY1+1) - flatX1=addX1;flatX2=addX2 - flatY1=addY1;flatY2=addY2 - var/iconmode - if(I in A.overlays) - iconmode = ICON_OVERLAY - else if(I in A.underlays) - iconmode = ICON_UNDERLAY - else - iconmode = blendMode2iconMode(curblend) - // Blend the overlay into the flattened icon - flat.Blend(add, iconmode, I:pixel_x + 2 - flatX1, I:pixel_y + 2 - flatY1) - - if(A.color) - flat.Blend(A.color, ICON_MULTIPLY) - if(A.alpha < 255) - flat.Blend(rgb(255, 255, 255, A.alpha), ICON_MULTIPLY) - - return icon(flat, "", SOUTH) - -/proc/getIconMask(atom/A)//By yours truly. Creates a dynamic mask for a mob/whatever. /N - var/icon/alpha_mask = new(A.icon,A.icon_state)//So we want the default icon and icon state of A. - for(var/I in A.overlays)//For every image in overlays. var/image/I will not work, don't try it. - if(I:layer>A.layer) continue//If layer is greater than what we need, skip it. - var/icon/image_overlay = new(I:icon,I:icon_state)//Blend only works with icon objects. - //Also, icons cannot directly set icon_state. Slower than changing variables but whatever. - alpha_mask.Blend(image_overlay,ICON_OR)//OR so they are lumped together in a nice overlay. - return alpha_mask//And now return the mask. - -/mob/proc/AddCamoOverlay(atom/A)//A is the atom which we are using as the overlay. - var/icon/opacity_icon = new(A.icon, A.icon_state)//Don't really care for overlays/underlays. - //Now we need to culculate overlays+underlays and add them together to form an image for a mask. - //var/icon/alpha_mask = getFlatIcon(src)//Accurate but SLOW. Not designed for running each tick. Could have other uses I guess. - var/icon/alpha_mask = getIconMask(src)//Which is why I created that proc. Also a little slow since it's blending a bunch of icons together but good enough. - opacity_icon.AddAlphaMask(alpha_mask)//Likely the main source of lag for this proc. Probably not designed to run each tick. - opacity_icon.ChangeOpacity(0.4)//Front end for MapColors so it's fast. 0.5 means half opacity and looks the best in my opinion. - for(var/i=0,i<5,i++)//And now we add it as overlays. It's faster than creating an icon and then merging it. - var/image/I = image("icon" = opacity_icon, "icon_state" = A.icon_state, "layer" = layer+0.8)//So it's above other stuff but below weapons and the like. - switch(i)//Now to determine offset so the result is somewhat blurred. - if(1) I.pixel_x-- - if(2) I.pixel_x++ - if(3) I.pixel_y-- - if(4) I.pixel_y++ - overlays += I//And finally add the overlay. - -#define HOLOPAD_SHORT_RANGE 1 //For determining the color of holopads based on whether they're short or long range. -#define HOLOPAD_LONG_RANGE 2 - -/proc/getHologramIcon(icon/A, safety=1, noDecolor=FALSE, var/hologram_color=HOLOPAD_SHORT_RANGE, nopacity = 0.5)//If safety is on, a new icon is not created. - var/icon/flat_icon = safety ? A : new(A)//Has to be a new icon to not constantly change the same icon. - if (noDecolor == FALSE) - if(hologram_color == HOLOPAD_LONG_RANGE) - flat_icon.ColorTone(rgb(225,223,125)) //Light yellow if it's a call to a long-range holopad. - else - flat_icon.ColorTone(rgb(125,180,225))//Let's make it bluish. - flat_icon.ChangeOpacity(nopacity)//inf, was flat_icon.ChangeOpacity(0.5)//Make it half transparent. - var/icon/alpha_mask = new('icons/effects/effects.dmi', "scanline-[hologram_color]")//Scanline effect. - flat_icon.AddAlphaMask(alpha_mask)//Finally, let's mix in a distortion effect. - return flat_icon - -//For photo camera. -/proc/build_composite_icon(atom/A) - var/icon/composite = icon(A.icon, A.icon_state, A.dir, 1) - for(var/O in A.overlays) - var/image/I = O - composite.Blend(icon(I.icon, I.icon_state, I.dir, 1), ICON_OVERLAY) - return composite - -/proc/adjust_brightness(var/color, var/value) - if (!color) return "#ffffff" - if (!value) return color - - var/list/RGB = ReadRGB(color) - RGB[1] = clamp(RGB[1]+value,0,255) - RGB[2] = clamp(RGB[2]+value,0,255) - RGB[3] = clamp(RGB[3]+value,0,255) - return rgb(RGB[1],RGB[2],RGB[3]) - -/proc/sort_atoms_by_layer(var/list/atoms) - // Comb sort icons based on levels - var/list/result = atoms.Copy() - var/gap = result.len - var/swapped = 1 - while (gap > 1 || swapped) - swapped = 0 - if(gap > 1) - gap = round(gap / 1.3) // 1.3 is the emperic comb sort coefficient - if(gap < 1) - gap = 1 - for(var/i = 1; gap + i <= result.len; i++) - var/atom/l = result[i] //Fucking hate - var/atom/r = result[gap+i] //how lists work here - if(l.plane > r.plane || (l.plane == r.plane && l.layer > r.layer)) //no "result[i].layer" for me - result.Swap(i, gap + i) - swapped = 1 - return result -/* -generate_image function generates image of specified range and location -arguments tx, ty, tz are target coordinates (requred), range defines render distance to opposite corner (requred) -cap_mode is capturing mode (optional), user is capturing mob (requred only wehen cap_mode = CAPTURE_MODE_REGULAR), -lighting determines lighting capturing (optional), suppress_errors suppreses errors and continues to capture (optional). -*/ -/proc/generate_image(var/tx as num, var/ty as num, var/tz as num, var/range as num, var/cap_mode = CAPTURE_MODE_PARTIAL, var/mob/living/user, var/lighting = 1, var/suppress_errors = 1) - var/list/turfstocapture = list() - //Lines below determine what tiles will be rendered - for(var/xoff = 0 to range) - for(var/yoff = 0 to range) - var/turf/T = locate(tx + xoff,ty + yoff,tz) - if(T) - if(cap_mode == CAPTURE_MODE_REGULAR) - if(user.can_capture_turf(T)) - turfstocapture.Add(T) - continue - else - turfstocapture.Add(T) - else - //Capture includes non-existan turfs - if(!suppress_errors) - return - //Lines below determine what objects will be rendered - var/list/atoms = list() - for(var/turf/T in turfstocapture) - atoms.Add(T) - for(var/atom/A in T) - if(istype(A, /atom/movable/lighting_overlay) && lighting) //Special case for lighting - atoms.Add(A) - continue - if(A.invisibility) continue - atoms.Add(A) - //Lines below actually render all colected data - atoms = sort_atoms_by_layer(atoms) - var/icon/cap = icon('icons/effects/96x96.dmi', "") - cap.Scale(range*32, range*32) - cap.Blend("#000", ICON_OVERLAY) - for(var/atom/A in atoms) - if(A) - var/icon/img = getFlatIcon(A) - if(istype(img, /icon)) - if(istype(A, /mob/living) && A:lying) - img.BecomeLying() - var/xoff = (A.x - tx) * 32 - var/yoff = (A.y - ty) * 32 - cap.Blend(img, blendMode2iconMode(A.blend_mode), A.pixel_x + xoff, A.pixel_y + yoff) - - return cap diff --git a/code/_helpers/lists.dm b/code/_helpers/lists.dm deleted file mode 100644 index 1bc374eca0fbc..0000000000000 --- a/code/_helpers/lists.dm +++ /dev/null @@ -1,736 +0,0 @@ -/* - * Holds procs to help with list operations - * Contains groups: - * Misc - * Sorting - */ - -/* - * Misc - */ - -//Returns a list in plain english as a string -/proc/english_list(var/list/input, nothing_text = "nothing", and_text = " and ", comma_text = ", ", final_comma_text = "," ) - switch(length(input)) - if(0) return nothing_text - if(1) return "[input[1]]" - if(2) return "[input[1]][and_text][input[2]]" - else return "[jointext(input, comma_text, 1, -1)][final_comma_text][and_text][input[input.len]]" - -//Checks for specific types in a list -/proc/is_type_in_list(var/atom/A, var/list/L) - for(var/type in L) - if(istype(A, type)) - return 1 - return 0 - -//Checks for specific paths in a list -/proc/is_path_in_list(var/path, var/list/L) - for(var/type in L) - if(ispath(path, type)) - return 1 - return 0 - -/proc/instances_of_type_in_list(var/atom/A, var/list/L) - var/instances = 0 - for(var/type in L) - if(istype(A, type)) - instances++ - return instances - -//Removes any null entries from the list -/proc/listclearnulls(list/list) - if(istype(list)) - while(null in list) - list -= null - return - -/* - * Returns list containing all the entries from first list that are not present in second. - * If skiprep = 1, repeated elements are treated as one. - * If either of arguments is not a list, returns null - */ -/proc/difflist(var/list/first, var/list/second, var/skiprep=0) - if(!islist(first) || !islist(second)) - return - var/list/result = new - if(skiprep) - for(var/e in first) - if(!(e in result) && !(e in second)) - result += e - else - result = first - second - return result - -/* -Two lists may be different (A!=B) even if they have the same elements. -This actually tests if they have the same entries and values. -*/ -/proc/same_entries(var/list/first, var/list/second) - if(!islist(first) || !islist(second)) - return 0 - if(length(first) != length(second)) - return 0 - for(var/entry in first) - if(!(entry in second) || (first[entry] != second[entry])) - return 0 - return 1 -/* -Checks if a list has the same entries and values as an element of big. -*/ -/proc/in_as_list(var/list/little, var/list/big) - if(!islist(big)) - return 0 - for(var/element in big) - if(same_entries(little, element)) - return 1 - return 0 -/* - * Returns list containing entries that are in either list but not both. - * If skipref = 1, repeated elements are treated as one. - * If either of arguments is not a list, returns null - */ -/proc/uniquemergelist(var/list/first, var/list/second, var/skiprep=0) - if(!islist(first) || !islist(second)) - return - var/list/result = new - if(skiprep) - result = difflist(first, second, skiprep)+difflist(second, first, skiprep) - else - result = first ^ second - return result - -/proc/assoc_merge_add(var/value_a, var/value_b) - return value_a + value_b - -// This proc merges two associative lists -/proc/merge_assoc_lists(var/list/a, var/list/b, var/merge_method, var/default_if_null_value = null) - . = list() - for(var/key in a) - var/a_value = a[key] - a_value = isnull(a_value) ? default_if_null_value : a_value - .[key] = a_value - for(var/key in b) - var/b_value = b[key] - b_value = isnull(b_value) ? default_if_null_value : b_value - if(!(key in .)) - .[key] = b_value - else - .[key] = call(merge_method)(.[key], b_value) - -/* pickweight - given an associative list of (key = weight, key = weight, ...), returns a random key biased by weights - if the argument is a list that does not appear associative by its first key, returns pick(list) - if the argument is empty or not a list, returns null -*/ -/proc/pickweight(list/L) - var/len = length(L) - if (len && islist(L)) - for (var/key in L) - if (isnull(L[key])) - return pick(L) - break - var/sum = 0 - for (var/key in L) - sum += L[key] - sum *= rand() - for (var/key in L) - sum -= L[key] - if (sum <= 0) - return key - return L[len] - return null - -/* pickweight_index - given an indexed list of (index = weight, index + 1 = weight, ...), returns a random index biased by weights. Higher weight = more chance - if the argument is not an indexed list of weights, returns pick(list) - if the argument is empty or not a list, returns null -*/ -/proc/pickweight_index(list/L) - var/len = length(L) - if (len && islist(L)) - for(var/index = 1 to len) - if (isnull(L[index])) - return pick(L) - break - var/sum = 0 - for(var/index = 1 to len) - sum += L[index] - sum *= rand() - for(var/index = 1 to len) - sum -= L[index] - if (sum <= 0) - return index - return len - return null - -//Pick a random element from the list and remove it from the list. -/proc/pick_n_take(list/listfrom) - if (listfrom.len > 0) - var/picked = pick(listfrom) - listfrom -= picked - return picked - return null - -//Returns the top(last) element from the list and removes it from the list (typical stack function) -/proc/pop(list/listfrom) - if (listfrom.len > 0) - var/picked = listfrom[listfrom.len] - listfrom.len-- - return picked - return null - -//Returns the next element in parameter list after first appearance of parameter element. If it is the last element of the list or not present in list, returns first element. -/proc/next_in_list(element, list/L) - for(var/i=1, i= 1; i--) - output += L[i] - return output - -//Randomize: Return the list in a random order -/proc/shuffle(var/list/L) - if(!L) - return - - L = L.Copy() - - for(var/i=1; i 0) ? i : i+1 - else - return i - - -/proc/dd_sortedObjectList(var/list/L, var/cache=list()) - if(L.len < 2) - return L - var/middle = L.len / 2 + 1 // Copy is first,second-1 - return dd_mergeObjectList(dd_sortedObjectList(L.Copy(0,middle), cache), dd_sortedObjectList(L.Copy(middle), cache), cache) //second parameter null = to end of list - -/proc/dd_mergeObjectList(var/list/L, var/list/R, var/list/cache) - var/Li=1 - var/Ri=1 - var/list/result = new() - while(Li <= L.len && Ri <= R.len) - var/LLi = L[Li] - var/RRi = R[Ri] - var/LLiV = cache[LLi] - var/RRiV = cache[RRi] - if(!LLiV) - LLiV = LLi:dd_SortValue() - cache[LLi] = LLiV - if(!RRiV) - RRiV = RRi:dd_SortValue() - cache[RRi] = RRiV - if(LLiV < RRiV) - result += L[Li++] - else - result += R[Ri++] - - if(Li <= L.len) - return (result + L.Copy(Li, 0)) - return (result + R.Copy(Ri, 0)) - -// Insert an object into a sorted list, preserving sortedness -/proc/dd_insertObjectList(var/list/L, var/O) - var/min = 1 - var/max = L.len + 1 - var/Oval = O:dd_SortValue() - - while(1) - var/mid = min+round((max-min)/2) - - if(mid == max) - L.Insert(mid, O) - return - - var/Lmid = L[mid] - var/midval = Lmid:dd_SortValue() - if(Oval == midval) - L.Insert(mid, O) - return - else if(Oval < midval) - max = mid - else - min = mid+1 - -/proc/dd_sortedtextlist(list/incoming, case_sensitive = 0) - // Returns a new list with the text values sorted. - // Use binary search to order by sortValue. - // This works by going to the half-point of the list, seeing if the node in question is higher or lower cost, - // then going halfway up or down the list and checking again. - // This is a very fast way to sort an item into a list. - var/list/sorted_text = new() - var/low_index - var/high_index - var/insert_index - var/midway_calc - var/current_index - var/current_item - var/list/list_bottom - var/sort_result - - var/current_sort_text - for (current_sort_text in incoming) - low_index = 1 - high_index = sorted_text.len - while (low_index <= high_index) - // Figure out the midpoint, rounding up for fractions. (BYOND rounds down, so add 1 if necessary.) - midway_calc = (low_index + high_index) / 2 - current_index = round(midway_calc) - if (midway_calc > current_index) - current_index++ - current_item = sorted_text[current_index] - - if (case_sensitive) - sort_result = sorttextEx(current_sort_text, current_item) - else - sort_result = sorttext(current_sort_text, current_item) - - switch(sort_result) - if (1) - high_index = current_index - 1 // current_sort_text < current_item - if (-1) - low_index = current_index + 1 // current_sort_text > current_item - if (0) - low_index = current_index // current_sort_text == current_item - break - - // Insert before low_index. - insert_index = low_index - - // Special case adding to end of list. - if (insert_index > sorted_text.len) - sorted_text += current_sort_text - continue - - // Because BYOND lists don't support insert, have to do it by: - // 1) taking out bottom of list, 2) adding item, 3) putting back bottom of list. - list_bottom = sorted_text.Copy(insert_index) - sorted_text.Cut(insert_index) - sorted_text += current_sort_text - sorted_text += list_bottom - return sorted_text - - -/proc/dd_sortedTextList(list/incoming) - var/case_sensitive = 1 - return dd_sortedtextlist(incoming, case_sensitive) - - -/datum/proc/dd_SortValue() - return "[src]" - -/obj/machinery/dd_SortValue() - return "[sanitize_old(name)]" - -/obj/machinery/camera/dd_SortValue() - return "[c_tag]" - -/datum/alarm/dd_SortValue() - return "[sanitize_old(last_name)]" - -//creates every subtype of prototype (excluding prototype) and adds it to list L. -//if no list/L is provided, one is created. -/proc/init_subtypes(prototype, list/L) - if(!istype(L)) L = list() - for(var/path in subtypesof(prototype)) - L += new path() - return L - -//creates every subtype of prototype (excluding prototype) and adds it to list L as a type/instance pair. -//if no list/L is provided, one is created. -/proc/init_subtypes_assoc(prototype, list/L) - if(!istype(L)) L = list() - for(var/path in subtypesof(prototype)) - L[path] = new path() - return L - -#define listequal(A, B) (A.len == B.len && !length(A^B)) - -/proc/filter_list(var/list/L, var/type) - . = list() - for(var/entry in L) - if(istype(entry, type)) - . += entry - -/proc/group_by(var/list/group_list, var/key, var/value) - var/values = group_list[key] - if(!values) - values = list() - group_list[key] = values - - values += value - -/proc/duplicates(var/list/L) - . = list() - var/list/checked = list() - for(var/value in L) - if(value in checked) - . |= value - else - checked += value - -/proc/assoc_by_proc(var/list/plain_list, var/get_initial_value) - . = list() - for(var/entry in plain_list) - .[call(get_initial_value)(entry)] = entry - -/proc/get_initial_name(var/atom/atom_type) - var/atom/A = atom_type - return initial(A.name) - -//Move a single element from position fromIndex within a list, to position toIndex -//All elements in the range [1,toIndex) before the move will be before the pivot afterwards -//All elements in the range [toIndex, L.len+1) before the move will be after the pivot afterwards -//In other words, it's as if the range [fromIndex,toIndex) have been rotated using an unsigned shift operation common to other languages. -//fromIndex and toIndex must be in the range [1,L.len+1] -//This will preserve associations ~Carnie -/proc/moveElement(list/L, fromIndex, toIndex) - if(fromIndex == toIndex || fromIndex+1 == toIndex) //no need to move - return - if(fromIndex > toIndex) - ++fromIndex //since a null will be inserted before fromIndex, the index needs to be nudged right by one - - L.Insert(toIndex, null) - L.Swap(fromIndex, toIndex) - L.Cut(fromIndex, fromIndex+1) - -//Move elements [fromIndex,fromIndex+len) to [toIndex-len, toIndex) -//Same as moveElement but for ranges of elements -//This will preserve associations ~Carnie -/proc/moveRange(list/L, fromIndex, toIndex, len=1) - var/distance = abs(toIndex - fromIndex) - if(len >= distance) //there are more elements to be moved than the distance to be moved. Therefore the same result can be achieved (with fewer operations) by moving elements between where we are and where we are going. The result being, our range we are moving is shifted left or right by dist elements - if(fromIndex <= toIndex) - return //no need to move - fromIndex += len //we want to shift left instead of right - - for(var/i=0, i toIndex) - fromIndex += len - - for(var/i=0, i 0 && index <= list.len) - -// Returns the first key where T fulfills ispath -/proc/get_ispath_key(var/list/L, var/T) - for(var/key in L) - if(ispath(T, key)) - return key - -// Gets the first instance that is of the given type (strictly) -/proc/get_instance_of_strict_type(var/list/L, var/T) - for(var/key in L) - var/atom/A = key - if(A.type == T) - return A - -/** - * Returns a new list with only atoms that are in typecache L - * - */ -/proc/typecache_filter_list(list/atoms, list/typecache) - . = list() - for(var/thing in atoms) - var/atom/A = thing - if(typecache[A.type]) - . += A - -/** - * Like typesof() or subtypesof(), but returns a typecache instead of a list - */ -/proc/typecacheof(path, ignore_root_path, only_root_path = FALSE) - if(ispath(path)) - var/list/types = list() - if(only_root_path) - types = list(path) - else - types = ignore_root_path ? subtypesof(path) : typesof(path) - var/list/L = list() - for(var/T in types) - L[T] = TRUE - return L - else if(islist(path)) - var/list/pathlist = path - var/list/L = list() - if(ignore_root_path) - for(var/P in pathlist) - for(var/T in subtypesof(P)) - L[T] = TRUE - else - for(var/P in pathlist) - if(only_root_path) - L[P] = TRUE - else - for(var/T in typesof(P)) - L[T] = TRUE - return L diff --git a/code/_helpers/logging.dm b/code/_helpers/logging.dm deleted file mode 100644 index 96c8cd9586804..0000000000000 --- a/code/_helpers/logging.dm +++ /dev/null @@ -1,224 +0,0 @@ - -// On Linux/Unix systems the line endings are LF, on windows it's CRLF, admins that don't use notepad++ -// will get logs that are one big line if the system is Linux and they are using notepad. This solves it by adding CR to every line ending -// in the logs. ascii character 13 = CR - -var/global/log_end= world.system_type == UNIX ? ascii2text(13) : "" - - -/proc/error(msg) - to_world_log("## ERROR: [msg][log_end]") - -/proc/log_ss(subsystem, text, log_world = TRUE) - if (!subsystem) - subsystem = "UNKNOWN" - var/msg = "[subsystem]: [text]" - game_log("SS", msg) - if (log_world) - to_world_log("SS[subsystem]: [text]") - -/proc/log_ss_init(text) - game_log("SS", "[text]") - -#define WARNING(MSG) warning("[MSG] in [__FILE__] at line [__LINE__] src: [src] usr: [usr].") -//print a warning message to world.log -/proc/warning(msg) - to_world_log("## WARNING: [msg][log_end]") - -//print a testing-mode debug message to world.log -/proc/testing(msg) - to_world_log("## TESTING: [msg][log_end]") - -/proc/game_log(category, text) - to_file(global.diary, "\[[time_stamp()]] [game_id] [category]: [text][log_end]") - -/proc/log_admin(text) - GLOB.admin_log.Add(text) - if (config.log_admin) - game_log("ADMIN", text) - -/proc/log_debug(text) - if (config.log_debug) - game_log("DEBUG", text) - to_debug_listeners(text) - -/proc/log_runtime(text) - for (var/client/C as anything in GLOB.admins) - if (C.get_preference_value(/datum/client_preference/staff/show_runtime_logs) == GLOB.PREF_SHOW) - to_chat(C, append_admin_tools(SPAN_DEBUG("RUNTIME: [text]"), usr, usr?.loc)) - -/proc/log_error(text) - error(text) - to_debug_listeners(text, "ERROR") - -/proc/log_warning(text) - warning(text) - to_debug_listeners(text, "WARNING") - -/proc/to_debug_listeners(text, prefix = "DEBUG") - for(var/client/C as anything in GLOB.admins) - if(C.get_preference_value(/datum/client_preference/staff/show_debug_logs) == GLOB.PREF_SHOW) - to_chat(C, SPAN_DEBUG("[prefix]: [text]")) - -/proc/log_game(text) - if (config.log_game) - game_log("GAME", text) - -/proc/log_vote(text) - if (config.log_vote) - game_log("VOTE", text) - -/proc/log_access(text) - if (config.log_access) - game_log("ACCESS", text) - -/proc/log_say(text) - if (config.log_say) - game_log("SAY", text) - -/proc/log_ooc(text) - if (config.log_ooc) - game_log("OOC", text) - -/proc/log_whisper(text) - if (config.log_whisper) - game_log("WHISPER", text) - -/proc/log_emote(text) - if (config.log_emote) - game_log("EMOTE", text) - -/proc/log_attack(text) - if (config.log_attack) - game_log("ATTACK", text) - -/proc/log_adminsay(text) - if (config.log_adminchat) - game_log("ADMINSAY", text) - -/proc/log_adminwarn(text) - if (config.log_adminwarn) - game_log("ADMINWARN", text) - -/proc/log_misc(text) - game_log("MISC", text) - -/proc/log_unit_test(text) - to_world_log("## UNIT_TEST ##: [text]") - log_debug(text) - -/proc/log_qdel(text) - to_file(GLOB.world_qdel_log, "\[[time_stamp()]]QDEL: [text]") - -//This replaces world.log so it displays both in DD and the file -/proc/log_world(text) - to_world_log(text) //this comes before the config check because it can't possibly runtime - if(config.log_world_output) - game_log("DD_OUTPUT", text) - -//pretty print a direction bitflag, can be useful for debugging. -/proc/dir_text(var/dir) - var/list/comps = list() - if(dir & NORTH) comps += "NORTH" - if(dir & SOUTH) comps += "SOUTH" - if(dir & EAST) comps += "EAST" - if(dir & WEST) comps += "WEST" - if(dir & UP) comps += "UP" - if(dir & DOWN) comps += "DOWN" - - return english_list(comps, nothing_text="0", and_text="|", comma_text="|") - -//more or less a logging utility -/proc/key_name(var/whom, var/include_link = null, var/include_name = 1, var/highlight_special_characters = 1, var/datum/ticket/ticket = null) - var/mob/M - var/client/C - var/key - - if(!whom) return "*null*" - if(istype(whom, /client)) - C = whom - M = C.mob - key = C.key - else if(ismob(whom)) - M = whom - C = M.client - key = LAST_KEY(M) - else if(istype(whom, /datum/mind)) - var/datum/mind/D = whom - key = D.key - M = D.current - if(D.current) - C = D.current.client - else if(istype(whom, /datum)) - var/datum/D = whom - return "*invalid:[D.type]*" - else - return "*invalid*" - - . = "" - - if(key) - if(include_link && C) - . += "" - - . += key - - if(include_link) - if(C) . += "" - else . += " (DC)" - else - . += "*no key*" - - if(include_name && M) - var/name - - if(M.real_name) - name = M.real_name - else if(M.name) - name = M.name - - - if(is_special_character(M) && highlight_special_characters) - . += "/([name])" //Orange - else - . += "/([name])" - - return . - -/proc/key_name_admin(var/whom, var/include_name = 1) - return key_name(whom, 1, include_name) - -// Helper procs for building detailed log lines -/datum/proc/get_log_info_line() - return "[src] ([type]) ([any2ref(src)])" - -/area/get_log_info_line() - return "[..()] ([isnum(z) ? "[x],[y],[z]" : "0,0,0"])" - -/turf/get_log_info_line() - return "[..()] ([x],[y],[z]) ([loc ? loc.type : "NULL"])" - -/atom/movable/get_log_info_line() - var/turf/t = get_turf(src) - return "[..()] ([t ? t : "NULL"]) ([t ? "[t.x],[t.y],[t.z]" : "0,0,0"]) ([t ? t.type : "NULL"])" - -/mob/get_log_info_line() - return ckey ? "[..()] ([ckey])" : ..() - -/proc/log_info_line(var/datum/d) - if(isnull(d)) - return "*null*" - if(islist(d)) - var/list/L = list() - for(var/e in d) - // Indexing on numbers just gives us the same number again in the best case and causes an index out of bounds runtime in the worst - var/v = isnum(e) ? null : d[e] - L += "[log_info_line(e)][v ? " - [log_info_line(v)]" : ""]" - return "\[[jointext(L, ", ")]\]" // We format the string ourselves, rather than use json_encode(), because it becomes difficult to read recursively escaped " - if(!istype(d)) - return json_encode(d) - return d.get_log_info_line() - -/proc/report_progress(var/progress_message) - admin_notice("[progress_message]", R_DEBUG) - to_world_log(progress_message) diff --git a/code/_helpers/maths.dm b/code/_helpers/maths.dm deleted file mode 100644 index 4c7b840254c70..0000000000000 --- a/code/_helpers/maths.dm +++ /dev/null @@ -1,196 +0,0 @@ -/// Multiplier for converting degrees to radians -#define DEG_TO_RAD 0.0174532925 - - -/// Multiplier for converting radians to degrees -#define RAD_TO_DEG 57.2957795 - - -/// The mathematical constant pi to f32 precision -#define PI 3.141592 - - -/// A random real number between low and high inclusive -#define Frand(low, high) ( rand() * ((high) - (low)) + (low) ) - - -/// Value or the next integer in a positive direction: Ceil(-1.5) = -1 , Ceil(1.5) = 2 -#define Ceil(value) ( -round(-(value)) ) - - -/// Value or the next multiple of divisor in a positive direction. Ceilm(-1.5, 0.3) = -1.5 , Ceilm(-1.5, 0.4) = -1.2 -#define Ceilm(value, divisor) ( -round(-(value) / (divisor)) * (divisor) ) - - -/// Value or the nearest power of power in a positive direction: Ceilp(3, 2) = 4 , Ceilp(5, 3) = 9 -#define Ceilp(value, power) ( (power) ** -round(-log((power), (value))) ) - - -/// Value or the next integer in a negative direction: Floor(-1.5) = -2 , Floor(1.5) = 1 -#define Floor(value) round(value) - - -/// Value or the next multiple of divisor in a negative direction: Floorm(-1.5, 0.3) = -1.5 , Floorm(-1.5, 0.4) = -1.6 -#define Floorm(value, divisor) ( round((value) / (divisor)) * (divisor) ) - - -/// Value or the nearest integer in either direction -#define Round(value) round((value), 1) - - -/// Value or the nearest multiple of divisor in either direction -#define Roundm(value, divisor) round((value), (divisor)) - - -/// The percentage of value in max, rounded to places: 1 = nearest 0.1 , 0 = nearest 1 , -1 = nearest 10, etc -#define Percent(value, max, places) round((value) / (max) * 100, !(places) || 10 ** -(places)) - - -/// True if value is an integer number. -#define IsInteger(value) (round(value) == (value)) - - -//NB: Not actually truly all powers of 2 but this behavior is currently expected -/// True if value is a non-negative integer that is 0 or has a single bit set. 0, 1, 2, 4, 8 ... -#define IsPowerOfTwo(value) ( IsInteger(value) && !((value) & ((value) - 1)) ) - - -/// True if value is an integer that is not zero and does not have the 1 bit set -#define IsEven(value) ( (value) && IsPowerOfTwo(value) ) - - -/// True if value is an integer that has the 1 bit set. -#define IsOdd(value) ( IsInteger(value) && ((value) & 0x1) ) - - -/// True if value is a multiple of divisor -#define IsMultiple(value, divisor) ((value) % (divisor) == 0) - - -/// True if value is between low and high inclusive -#define IsInRange(value, low, high) ( (value) >= (low) && (value) <= (high) ) - - -/// The cosecant of degrees -#define Csc(degrees) (1 / sin(degrees)) - - -/// The secant of degrees -#define Sec(degrees) (1 / cos(degrees)) - - -/// The cotangent of degrees -#define Cot(degrees) (1 / tan(degrees)) - - -/// The 2-argument arctangent of x and y -/proc/Atan2(x, y) - if (!x && !y) - return 0 - var/a = arccos(x / sqrt(x * x + y * y)) - return y >= 0 ? a : -a - - -/// Returns a linear interpolation from a to b according to weight. weight 0 is a, weight 1 is b, weight 0.5 is half-way between the two. -/proc/Interpolate(a, b, weight = 0.5) - return a + (b - a) * weight - - -/// Returns the mean of either a list or variadic arguments: Mean(list(1, 2, 3)) = 2 , Mean(1, 2, 3) = 2 -/proc/Mean(...) - var/list/values = args - if (islist(values[1])) - values = values[1] - var/sum = 0 - if (values.len) - for (var/value in values) - sum += value - sum /= values.len - return sum - - -/// Returns the euclidian square magnitude of a vector of either a list or variadic arguments: VecSquareMag(list(1, 2, 3)) = 14 , VecSquareMag(1, 2, 3) = 14 -/proc/VecSquareMag(...) - var/list/parts = args - if (islist(parts[1])) - parts = parts[1] - var/sum = 0 - for (var/part in parts) - sum += part * part - return sum - - -/// Returns the euclidian magnitude of a vector of either a list or variadic arguments: VecMag(list(3, 4)) = 5 , VecMag(3, 4) = 5 -/proc/VecMag(...) - var/squareMag = VecSquareMag(arglist(args)) - return sqrt(squareMag) - - -/// Returns a random real from an arbitrary XdY dice roll -/proc/Drand(x, y, normalize) - var/sum = 0 - for (var/i = 1 to x) - sum += Floor(rand() * y) - if (normalize) - return sum / ((x * y) - x) - return sum + x - - -/// An aproximate, fairly granular random normal real number in 0..1 -#define Nrand Drand(4, 6, TRUE) - - -/// A circular random coordinate pair from 0, unit by default, scaled by radius, then rounded if round. -/proc/CircularRandomCoordinate(radius = 1, round) - var/angle = rand(0, 359) - var/x = cos(angle) * radius - var/y = sin(angle) * radius - if (round) - x = Round(x) - y = Round(y) - return list(x, y) - - -/** -* A circular random coordinate with radius on center_x, center_y, -* reflected into low_x,low_y -> high_x,high_y, clamped in low,high, -* and rounded if round is set -* -* Generally this proc is useful for placement around a point (eg a -* player) that must stay within map boundaries, or some similar circle -* in box constraint -* -* A "donut" pattern can be achieved by varying the number supplied as -* radius outside the scope of the proc, eg as BoundedCircularRandomCoordinate(Frand(1, 3), ...) -*/ -/proc/BoundedCircularRandomCoordinate(radius, center_x, center_y, low_x, low_y, high_x, high_y, round) - var/list/xy = CircularRandomCoordinate(radius, round) - var/dx = xy[1] - var/dy = xy[2] - var/x = center_x + dx - var/y = center_y + dy - if (x < low_x || x > high_x) - x = center_x - dx - if (y < low_y || y > high_y) - y = center_y - dy - return list( - clamp(x, low_x, high_x), - clamp(y, low_y, high_y) - ) - - -/// Pick a random turf using BoundedCircularRandomCoordinate about x,y on level z -/proc/CircularRandomTurf(radius, z, center_x, center_y, low_x = 1, low_y = 1, high_x = world.maxx, high_y = world.maxy) - var/list/xy = BoundedCircularRandomCoordinate(radius, center_x, center_y, low_x, low_y, high_x, high_y, TRUE) - return locate(xy[1], xy[2], z) - - -/// Pick a random turf using BoundedCircularRandomCoordinate around the turf of target -/proc/CircularRandomTurfAround(atom/target, radius, low_x = 1, low_y = 1, high_x = world.maxx, high_y = world.maxy) - var/turf/turf = get_turf(target) - return CircularRandomTurf(radius, turf.z, turf.x, turf.y, low_x, low_y, high_x, high_y) - - -/// Returns the angle of the matrix according to atan2 on the b, a parts -/matrix/proc/get_angle() - return Atan2(b, a) diff --git a/code/_helpers/matrices.dm b/code/_helpers/matrices.dm deleted file mode 100644 index 01fa4490680c8..0000000000000 --- a/code/_helpers/matrices.dm +++ /dev/null @@ -1,134 +0,0 @@ -/atom/proc/SpinAnimation(speed = 10, loops = -1) - var/matrix/m120 = matrix(transform).Update(rotation = 120) - var/matrix/m240 = matrix(transform).Update(rotation = 240) - var/matrix/m360 = matrix(transform).Update(rotation = 360) - animate(src, transform = m120, time = speed / 3, loops) - animate(transform = m240, time = speed / 3) - animate(transform = m360, time = speed / 3) - -/atom/proc/shake_animation(var/intensity = 8) - var/init_px = pixel_x - var/shake_dir = pick(-1, 1) - animate( - src, - transform = matrix().Update(rotation = intensity * shake_dir), - pixel_x = init_px + 2 * shake_dir, - time = 1 - ) - animate(transform=null, pixel_x=init_px, time=6, easing=ELASTIC_EASING) - -//The X pixel offset of this matrix -/matrix/proc/get_x_shift() - . = c - -//The Y pixel offset of this matrix -/matrix/proc/get_y_shift() - . = f -// Color matrices: - -//Luma coefficients suggested for HDTVs. If you change these, make sure they add up to 1. -#define LUMR 0.2126 -#define LUMG 0.7152 -#define LUMB 0.0722 - -//Still need color matrix addition, negation, and multiplication. - -//Returns an identity color matrix which does nothing -/proc/color_identity() - return list(1,0,0, 0,1,0, 0,0,1) - -//Moves all colors angle degrees around the color wheel while maintaining intensity of the color and not affecting whites -//TODO: Need a version that only affects one color (ie shift red to blue but leave greens and blues alone) -/proc/color_rotation(angle) - if(angle == 0) - return color_identity() - angle = clamp(angle, -180, 180) - var/cos = cos(angle) - var/sin = sin(angle) - - var/constA = 0.143 - var/constB = 0.140 - var/constC = -0.283 - return list( - LUMR + cos * (1-LUMR) + sin * -LUMR, LUMR + cos * -LUMR + sin * constA, LUMR + cos * -LUMR + sin * -(1-LUMR), - LUMG + cos * -LUMG + sin * -LUMG, LUMG + cos * (1-LUMG) + sin * constB, LUMG + cos * -LUMG + sin * LUMG, - LUMB + cos * -LUMB + sin * (1-LUMB), LUMB + cos * -LUMB + sin * constC, LUMB + cos * (1-LUMB) + sin * LUMB - ) - -//Makes everything brighter or darker without regard to existing color or brightness -/proc/color_brightness(power) - power = clamp(power, -255, 255) - power = power/255 - - return list(1,0,0, 0,1,0, 0,0,1, power,power,power) - -var/global/list/delta_index = list( - 0, 0.01, 0.02, 0.04, 0.05, 0.06, 0.07, 0.08, 0.1, 0.11, - 0.12, 0.14, 0.15, 0.16, 0.17, 0.18, 0.20, 0.21, 0.22, 0.24, - 0.25, 0.27, 0.28, 0.30, 0.32, 0.34, 0.36, 0.38, 0.40, 0.42, - 0.44, 0.46, 0.48, 0.5, 0.53, 0.56, 0.59, 0.62, 0.65, 0.68, - 0.71, 0.74, 0.77, 0.80, 0.83, 0.86, 0.89, 0.92, 0.95, 0.98, - 1.0, 1.06, 1.12, 1.18, 1.24, 1.30, 1.36, 1.42, 1.48, 1.54, - 1.60, 1.66, 1.72, 1.78, 1.84, 1.90, 1.96, 2.0, 2.12, 2.25, - 2.37, 2.50, 2.62, 2.75, 2.87, 3.0, 3.2, 3.4, 3.6, 3.8, - 4.0, 4.3, 4.7, 4.9, 5.0, 5.5, 6.0, 6.5, 6.8, 7.0, - 7.3, 7.5, 7.8, 8.0, 8.4, 8.7, 9.0, 9.4, 9.6, 9.8, - 10.0) - -//Exxagerates or removes brightness -/proc/color_contrast(value) - value = clamp(value, -100, 100) - if(value == 0) - return color_identity() - - var/x = 0 - if (value < 0) - x = 127 + value / 100 * 127; - else - x = value % 1 - if(x == 0) - x = delta_index[value] - else - x = delta_index[value] * (1-x) + delta_index[value+1] * x//use linear interpolation for more granularity. - x = x * 127 + 127 - - var/mult = x / 127 - var/add = 0.5 * (127-x) / 255 - return list(mult,0,0, 0,mult,0, 0,0,mult, add,add,add) - -//Exxagerates or removes colors -/proc/color_saturation(value as num) - if(value == 0) - return color_identity() - value = clamp(value, -100, 100) - if(value > 0) - value *= 3 - var/x = 1 + value / 100 - var/inv = 1 - x - var/R = LUMR * inv - var/G = LUMG * inv - var/B = LUMB * inv - - return list(R + x,R,R, G,G + x,G, B,B,B + x) - -#undef LUMR -#undef LUMG -#undef LUMB - -//Matrix math -//Given 2 matrices mxn and nxp (row major) it multiplies their members and return an mxp matrix -//Do make sure your lists actually have this many elements -/proc/multiply_matrices(list/A, list/B, m, n, p) - var/list/result = list() - result.len = m * p - - if(A.len == m*n && B.len == n*p) - for(var/row = 1; row <= m; row += 1) //For each row on left matrix - for(var/col = 1; col <= p; col += 1) //go over each column of the second matrix - var/sum = 0 - for(var/i = 1; i <= n; i += 1) //multiply each pair - sum += A[(row-1)*n + i] * B[(i-1)*p + col] - - result[(row-1)*p + col] = sum - - return result diff --git a/code/_helpers/medical_scans.dm b/code/_helpers/medical_scans.dm deleted file mode 100644 index dbe72d4f48b48..0000000000000 --- a/code/_helpers/medical_scans.dm +++ /dev/null @@ -1,442 +0,0 @@ -/mob/living/carbon/human/proc/get_raw_medical_data(var/tag = FALSE) - var/mob/living/carbon/human/H = src - var/list/scan = list() - - scan["name"] = H.name - if(H.fake_name) - scan["name"] = H.real_name - scan["age"] = H.age + H.changed_age - scan["time"] = stationtime2text() - var/brain_result - if(H.should_have_organ(BP_BRAIN)) - var/obj/item/organ/internal/brain/brain = H.internal_organs_by_name[BP_BRAIN] - if(!brain || H.stat == DEAD || (H.status_flags & FAKEDEATH)) - brain_result = 0 - else if(H.stat != DEAD) - brain_result = round(max(0,(1 - brain.damage/brain.max_damage)*100)) - else - brain_result = -1 - scan["brain_activity"] = brain_result - - var/pulse_result - if(H.should_have_organ(BP_HEART)) - var/obj/item/organ/internal/heart/heart = H.internal_organs_by_name[BP_HEART] - if(!heart) - pulse_result = 0 - else if(BP_IS_ROBOTIC(heart)) - pulse_result = -2 - else if(H.status_flags & FAKEDEATH) - pulse_result = 0 - else - pulse_result = H.get_pulse(GETPULSE_TOOL) - else - pulse_result = -1 - - if(pulse_result == ">250") - pulse_result = -3 - scan["pulse"] = text2num(pulse_result) - - scan["blood_pressure"] = H.get_blood_pressure() - scan["blood_o2"] = H.get_blood_oxygenation() - scan["blood_volume"] = H.vessel.get_reagent_amount(/datum/reagent/blood) - scan["blood_volume_max"] = H.species.blood_volume - scan["temperature"] = H.bodytemperature - scan["trauma"] = H.getBruteLoss() - scan["burn"] = H.getFireLoss() - scan["toxin"] = H.getToxLoss() - scan["oxygen"] = H.getOxyLoss() - scan["radiation"] = H.radiation - scan["genetic"] = H.getCloneLoss() - scan["paralysis"] = H.paralysis - scan["immune_system"] = H.virus_immunity() - scan["worms"] = H.has_brain_worms() - - scan["reagents"] = list() - - if(H.reagents.total_volume) - for(var/datum/reagent/R in H.reagents.reagent_list) - var/list/reagent = list() - reagent["name"]= R.name - reagent["quantity"] = round(H.reagents.get_reagent_amount(R.type),1) - reagent["scannable"] = R.scannable - scan["reagents"] += list(reagent) - - scan["external_organs"] = list() - - for(var/obj/item/organ/external/E in H.organs) - var/list/O = list() - O["name"] = E.name - O["is_stump"] = E.is_stump() - O["brute_ratio"] = E.brute_ratio - O["burn_ratio"] = E.burn_ratio - O["limb_flags"] = E.limb_flags - O["brute_dam"] = E.brute_dam - O["burn_dam"] = E.burn_dam - O["scan_results"] = E.get_scan_results(tag) - - scan["external_organs"] += list(O) - - scan["internal_organs"] = list() - - for(var/obj/item/organ/internal/I in H.internal_organs) - if (istype(I, /obj/item/organ/internal/augment)) - var/obj/item/organ/internal/augment/A = I - if (~A.augment_flags & AUGMENT_SCANNABLE) - continue - var/list/O = list() - O["name"] = I.name - O["is_broken"] = I.is_broken() - O["is_bruised"] = I.is_bruised() - O["is_damaged"] = I.is_damaged() - O["scan_results"] = I.get_scan_results(tag) - if (istype(I, /obj/item/organ/internal/appendix)) - var/obj/item/organ/internal/appendix/A = I - O["inflamed"] = A.inflamed - - scan["internal_organs"] += list(O) - - scan["missing_organs"] = list() - - for(var/organ_name in H.species.has_organ) - if(!locate(H.species.has_organ[organ_name]) in H.internal_organs) - scan["missing_organs"] += organ_name - if(H.sdisabilities & BLINDED) - scan["blind"] = TRUE - if(H.sdisabilities & NEARSIGHTED) - scan["nearsight"] = TRUE - return scan - -/proc/display_medical_data_header(var/list/scan, skill_level = SKILL_DEFAULT) - //In case of problems, abort. - var/dat = list() - - if(!scan["name"]) - return "
SCAN READOUT ERROR.
" - - //Table definition and starting data block. - /* - - - - - */ - dat += "
Scan Results For:Name
Scan Performed At:00:00
" - dat += "" - dat += "" - - dat = JOINTEXT(dat) - return dat - -/proc/display_medical_data_health(var/list/scan, skill_level = SKILL_DEFAULT) - //In case of problems, abort. - if(!scan["name"]) - return "
SCAN READOUT ERROR.
" - - var/list/subdat = list() - var/dat = list() - - dat += "" - - //Brain activity - /* - - */ - dat += "" - switch(scan["brain_activity"]) - if(0) - dat += "" - if(-1) - dat += "" - else - if(skill_level >= SKILL_BASIC) - if(scan["brain_activity"] <= 50) - dat += "" - else if(scan["brain_activity"] <= 80) - dat += "" - else - dat += "" - else - if(scan["brain_activity"] > 0) - dat += "" - else - dat += "" - - //Circulatory System - /* - - - - - - */ - dat += "" - if(scan["pulse"] == -1) - dat += "" - else if(scan["pulse"] == -2) - dat += "" - else if(scan["pulse"] == -3) - dat += "" - else if(scan["pulse"] == 0) - dat += "" - else if(scan["pulse"] >= 140) - dat += "" - else if(scan["pulse"] >= 120) - dat += "" - else - dat += "" - if(skill_level >= SKILL_ADEPT) - if((scan["pulse"] >= 140) || (scan["pulse"] == -3)) - dat+= "" - else if(scan["pulse"] >= 120) - dat += "" - else if(scan["pulse"] == 0) - dat+= "" - else if((scan["pulse"] > 0) && (scan["pulse"] <= 40)) - dat+= "" - - - var/ratio = scan["blood_volume"]/scan["blood_volume_max"] - dat += "" - else if(scan["blood_o2"] <= 85) - dat += "([scan["blood_o2"]]% blood oxygenation)" - else if(scan["blood_o2"] <= 90) - dat += "([scan["blood_o2"]]% blood oxygenation)" - else - dat += "([scan["blood_o2"]]% blood oxygenation)" - - dat += "" - - if(skill_level >= SKILL_ADEPT) - if(ratio <= 0.70) - dat += "" - - // Body temperature. - /* - - */ - dat += "" - - //Information Summary - /* - - - - - - - - */ - if(skill_level >= SKILL_BASIC) - subdat += "" - subdat += "" - subdat += "" - subdat += "" - subdat += "" - subdat += "" - - if(scan["paralysis"]) - subdat += "" - - dat += subdat - - subdat = null - //Immune System - /* - - - - */ - dat += "" - - if(scan["worms"]) - dat += "" - - //Reagent scan - /* - - - */ - var/other_reagent = FALSE - - for(var/list/R in scan["reagents"]) - if(R["scannable"]) - subdat += "" - else - other_reagent = TRUE - if(subdat) - dat += "" - dat += subdat - if(other_reagent) - dat += "" - - //summary for the medically disinclined. - /* - - */ - else - dat += "" - - dat = JOINTEXT(dat) - - return dat - -/proc/display_medical_data_body(var/list/scan, skill_level = SKILL_DEFAULT) - //In case of problems, abort. - if(!scan["name"]) - return "
SCAN READOUT ERROR.
" - - var/list/subdat = list() - var/dat = list() - //External Organs - /* - " - - dat = JOINTEXT(dat) - return dat - -/proc/display_medical_data(var/list/scan, skill_level = SKILL_DEFAULT, var/TT = FALSE) - //In case of problems, abort. - if(!scan["name"]) - return "
SCAN READOUT ERROR.
" - - var/dat = list() - - if(TT) - dat += "" - - //necessary evil, due to the limitations of nanoUI's variable length output. - //This allows for the display_medical_data proc to be used for non-ui things - //while keeping the variable size lower for the scanner template. - //decoupling the two would lead to inconsistent output between the template - //and other sources if changes are ever made. - dat += display_medical_data_header(scan, skill_level) - dat += display_medical_data_health(scan, skill_level) - dat += display_medical_data_body(scan, skill_level) - - if(TT) - dat += "" - - dat = JOINTEXT(dat) - return dat - -/proc/get_severity(amount, var/tag = FALSE) - if(!amount) - return "none" - - if(amount > 50) - if(tag) - . = "severe" - else - . = "severe" - else if(amount > 25) - if(tag) - . = "significant" - else - . = "significant" - else if(amount > 10) - if(tag) - . = "moderate" - else - . = "moderate" - else - if (tag) - . = "minor" - else - . = "minor" diff --git a/code/_helpers/mobs.dm b/code/_helpers/mobs.dm deleted file mode 100644 index a494712c4380e..0000000000000 --- a/code/_helpers/mobs.dm +++ /dev/null @@ -1,317 +0,0 @@ -/atom/movable/proc/get_mob() - return - -/mob/get_mob() - return src - -/mob/living/bot/mulebot/get_mob() - if(load && istype(load, /mob/living)) - return list(src, load) - return src - -//helper for inverting armor blocked values into a multiplier -#define blocked_mult(blocked) max(1 - (blocked/100), 0) - -/proc/mobs_in_view(var/range, var/source) - var/list/mobs = list() - for(var/atom/movable/AM in view(range, source)) - var/M = AM.get_mob() - if(M) - mobs += M - - return mobs - -/proc/random_hair_style(gender, species = SPECIES_HUMAN) - var/h_style = "Bald" - - var/datum/species/mob_species = all_species[species] - var/list/valid_hairstyles = mob_species.get_hair_styles() - if(valid_hairstyles.len) - h_style = pick(valid_hairstyles) - - return h_style - -/proc/random_facial_hair_style(gender, var/species = SPECIES_HUMAN) - var/f_style = "Shaved" - var/datum/species/mob_species = all_species[species] - var/list/valid_facialhairstyles = mob_species.get_facial_hair_styles(gender) - if(valid_facialhairstyles.len) - f_style = pick(valid_facialhairstyles) - return f_style - -/proc/random_name(gender, species = SPECIES_HUMAN) - if(species) - var/datum/species/current_species = all_species[species] - if(current_species) - var/decl/cultural_info/current_culture = SSculture.get_culture(current_species.default_cultural_info[TAG_CULTURE]) - if(current_culture) - return current_culture.get_random_name(gender) - return capitalize(pick(gender == FEMALE ? GLOB.first_names_female : GLOB.first_names_male)) + " " + capitalize(pick(GLOB.last_names)) - -/proc/random_skin_tone(var/datum/species/current_species) - var/species_tone = current_species ? 35 - current_species.max_skin_tone() : -185 - switch(pick(60;"caucasian", 15;"afroamerican", 10;"african", 10;"latino", 5;"albino")) - if("caucasian") . = -10 - if("afroamerican") . = -115 - if("african") . = -165 - if("latino") . = -55 - if("albino") . = 34 - else . = rand(species_tone,34) - - return min(max(. + rand(-25, 25), species_tone), 34) - -/proc/skintone2racedescription(tone) - switch (tone) - if(30 to INFINITY) return "albino" - if(20 to 30) return "pale" - if(5 to 15) return "light skinned" - if(-10 to 5) return "white" - if(-25 to -10) return "tan" - if(-45 to -25) return "darker skinned" - if(-65 to -45) return "brown" - if(-INFINITY to -65) return "black" - else return "unknown" - -/proc/age2agedescription(age) - switch(age) - if(0 to 1) return "infant" - if(1 to 3) return "toddler" - if(3 to 13) return "child" - if(13 to 19) return "teenager" - if(19 to 30) return "young adult" - if(30 to 45) return "adult" - if(45 to 60) return "middle-aged" - if(60 to 70) return "aging" - if(70 to INFINITY) return "elderly" - else return "unknown" - -/proc/RoundHealth(health) - var/list/icon_states = icon_states('icons/mob/hud_med.dmi') - for(var/icon_state in icon_states) - if(health >= text2num(icon_state)) - return icon_state - return icon_states[icon_states.len] // If we had no match, return the last element - -//checks whether this item is a module of the robot it is located in. -/proc/is_robot_module(var/obj/item/thing) - if(!thing) - return FALSE - if(istype(thing.loc, /mob/living/exosuit)) - return FALSE - if(!istype(thing.loc, /mob/living/silicon/robot)) - return FALSE - var/mob/living/silicon/robot/R = thing.loc - return (thing in R.module.equipment) - -/proc/get_exposed_defense_zone(var/atom/movable/target) - return pick(BP_HEAD, BP_L_HAND, BP_R_HAND, BP_L_FOOT, BP_R_FOOT, BP_L_ARM, BP_R_ARM, BP_L_LEG, BP_R_LEG, BP_CHEST, BP_GROIN) - - -/mob/var/do_unique_user_handle = 0 -/atom/var/do_unique_target_user - -/proc/do_after(mob/user, delay, atom/target, do_flags = DO_DEFAULT, incapacitation_flags = INCAPACITATION_DEFAULT) - return !do_after_detailed(user, delay, target, do_flags, incapacitation_flags) - -/proc/do_after_detailed(mob/user, delay, atom/target, do_flags = DO_DEFAULT, incapacitation_flags = INCAPACITATION_DEFAULT) - if (!delay) - return FALSE - - if (!user) - return DO_MISSING_USER - - var/initial_handle - if (do_flags & DO_USER_UNIQUE_ACT) - initial_handle = sequential_id("/proc/do_after") - user.do_unique_user_handle = initial_handle - - var/do_feedback = do_flags & DO_FAIL_FEEDBACK - - if (target?.do_unique_target_user) - if (do_feedback) - to_chat(user, SPAN_WARNING("\The [target.do_unique_target_user] is already interacting with \the [target]!")) - return DO_TARGET_UNIQUE_ACT - - if ((do_flags & DO_TARGET_UNIQUE_ACT) && target) - target.do_unique_target_user = user - - var/atom/user_loc = do_flags & DO_USER_CAN_MOVE ? null : user.loc - var/user_dir = do_flags & DO_USER_CAN_TURN ? null : user.dir - var/user_hand = do_flags & DO_USER_SAME_HAND ? user.hand : null - - var/atom/target_loc = do_flags & DO_TARGET_CAN_MOVE ? null : target?.loc - var/target_dir = do_flags & DO_TARGET_CAN_TURN ? null : target?.dir - var/target_type = target?.type - - var/target_zone = do_flags & DO_USER_SAME_ZONE ? user.zone_sel.selecting : null - - if (do_flags & DO_MOVE_CHECKS_TURFS) - if (user_loc) - user_loc = get_turf(user) - if (target_loc) - target_loc = get_turf(target) - - var/datum/progressbar/bar - if (do_flags & DO_SHOW_PROGRESS) - if (do_flags & DO_PUBLIC_PROGRESS) - bar = new /datum/progressbar/public(user, delay, target, !!(do_flags & DO_BAR_OVER_USER)) - else - bar = new /datum/progressbar/private(user, delay, target, !!(do_flags & DO_BAR_OVER_USER)) - - var/start_time = world.time - var/end_time = start_time + delay - - . = FALSE - - for (var/time = world.time, time < end_time, time = world.time) - sleep(1) - if (bar) - bar.update(time - start_time) - if (QDELETED(user)) - . = DO_MISSING_USER - break - if (target_type && (QDELETED(target) || target_type != target.type)) - . = DO_MISSING_TARGET - break - if (user.incapacitated(incapacitation_flags)) - . = DO_INCAPACITATED - break - if (user_loc && user_loc != (do_flags & DO_MOVE_CHECKS_TURFS ? get_turf(user) : user.loc)) - . = DO_USER_CAN_MOVE - break - if (target_loc && target_loc != (do_flags & DO_MOVE_CHECKS_TURFS ? get_turf(target) : target.loc)) - . = DO_TARGET_CAN_MOVE - break - if (user_dir && user_dir != user.dir) - . = DO_USER_CAN_TURN - break - if (target_dir && target_dir != target.dir) - . = DO_TARGET_CAN_TURN - break - if ((do_flags & DO_USER_SAME_HAND) && user_hand != user.hand) - . = DO_USER_SAME_HAND - break - if (initial_handle && initial_handle != user.do_unique_user_handle) - . = DO_USER_UNIQUE_ACT - break - if (target_zone && user.zone_sel.selecting != target_zone) - . = DO_USER_SAME_ZONE - break - - if (. && do_feedback) - switch (.) - if (DO_MISSING_TARGET) - to_chat(user, SPAN_WARNING("\The [target] no longer exists!")) - if (DO_INCAPACITATED) - to_chat(user, SPAN_WARNING("You're no longer able to act!")) - if (DO_USER_CAN_MOVE) - to_chat(user, SPAN_WARNING("You must remain still to perform that action!")) - if (DO_TARGET_CAN_MOVE) - to_chat(user, SPAN_WARNING("\The [target] must remain still to perform that action!")) - if (DO_USER_CAN_TURN) - to_chat(user, SPAN_WARNING("You must face the same direction to perform that action!")) - if (DO_TARGET_CAN_TURN) - to_chat(user, SPAN_WARNING("\The [target] must face the same direction to perform that action!")) - if (DO_USER_SAME_HAND) - to_chat(user, SPAN_WARNING("You must remain on the same active hand to perform that action!")) - if (DO_USER_UNIQUE_ACT) - to_chat(user, SPAN_WARNING("You stop what you're doing with \the [target].")) - if (DO_USER_SAME_ZONE) - to_chat(user, SPAN_WARNING("You must remain targeting the same zone to perform that action!")) - - if (bar) - qdel(bar) - if ((do_flags & DO_USER_UNIQUE_ACT) && user.do_unique_user_handle == initial_handle) - user.do_unique_user_handle = 0 - if ((do_flags & DO_TARGET_UNIQUE_ACT) && target) - target.do_unique_target_user = null - -/proc/able_mobs_in_oview(var/origin) - var/list/mobs = list() - for(var/mob/living/M in oview(origin)) // Only living mobs are considered able. - if(!M.is_physically_disabled()) - mobs += M - return mobs - -// Returns true if M was not already in the dead mob list -/mob/proc/switch_from_living_to_dead_mob_list() - remove_from_living_mob_list() - . = add_to_dead_mob_list() - -// Returns true if M was not already in the living mob list -/mob/proc/switch_from_dead_to_living_mob_list() - remove_from_dead_mob_list() - . = add_to_living_mob_list() - -// Returns true if the mob was in neither the dead or living list -/mob/proc/add_to_living_mob_list() - return FALSE -/mob/living/add_to_living_mob_list() - if((src in GLOB.living_mob_list_) || (src in GLOB.dead_mob_list_)) - return FALSE - GLOB.living_mob_list_ += src - return TRUE - -// Returns true if the mob was removed from the living list -/mob/proc/remove_from_living_mob_list() - return GLOB.living_mob_list_.Remove(src) - -// Returns true if the mob was in neither the dead or living list -/mob/proc/add_to_dead_mob_list() - return FALSE -/mob/living/add_to_dead_mob_list() - if((src in GLOB.living_mob_list_) || (src in GLOB.dead_mob_list_)) - return FALSE - GLOB.dead_mob_list_ += src - return TRUE - -// Returns true if the mob was removed form the dead list -/mob/proc/remove_from_dead_mob_list() - return GLOB.dead_mob_list_.Remove(src) - -//Find a dead mob with a brain and client. -/proc/find_dead_player(var/find_key, var/include_observers = 0) - if(isnull(find_key)) - return - - var/mob/selected = null - - if(include_observers) - for(var/mob/M in GLOB.player_list) - if((M.stat != DEAD) || (!M.client)) - continue - if(M.ckey == find_key) - selected = M - break - else - for(var/mob/living/M in GLOB.player_list) - //Dead people only thanks! - if((M.stat != DEAD) || (!M.client)) - continue - //They need a brain! - if(istype(M, /mob/living/carbon/human)) - var/mob/living/carbon/human/H = M - if(H.should_have_organ(BP_BRAIN) && !H.has_brain()) - continue - if(M.ckey == find_key) - selected = M - break - return selected - -/proc/damflags_to_strings(damflags) - var/list/res = list() - if(damflags & DAMAGE_FLAG_SHARP) - res += "sharp" - if(damflags & DAMAGE_FLAG_EDGE) - res += "edge" - if(damflags & DAMAGE_FLAG_LASER) - res += "laser" - if(damflags & DAMAGE_FLAG_BULLET) - res += "bullet" - if(damflags & DAMAGE_FLAG_EXPLODE) - res += "explode" - if(damflags & DAMAGE_FLAG_DISPERSED) - res += "dispersed" - if(damflags & DAMAGE_FLAG_BIO) - res += "bio" - return english_list(res) diff --git a/code/_helpers/names.dm b/code/_helpers/names.dm deleted file mode 100644 index 614537e1e30f6..0000000000000 --- a/code/_helpers/names.dm +++ /dev/null @@ -1,134 +0,0 @@ -/proc/generate_system_name() - return "[pick("Gilese","GSC", "Luyten", "GJ", "HD", "SCGECO")][prob(10) ? " Eridani" : ""] [rand(100,999)]" - -/proc/generate_planet_name() - return "[capitalize(pick(GLOB.last_names))]-[pick(GLOB.greek_letters)]" - -/proc/generate_planet_type() - return pick("terrestial planet", "ice planet", "dwarf planet", "desert planet", "ocean planet", "lava planet", "gas giant", "forest planet") - -/proc/station_name() - if(!GLOB.using_map) - return server_name - if (GLOB.using_map.station_name) - return GLOB.using_map.station_name - - var/random = rand(1,5) - var/name = "" - - //Rare: Pre-Prefix - if (prob(10)) - name = pick(GLOB.station_prefixes) - GLOB.using_map.station_name = name + " " - - // Prefix - name = pick(GLOB.station_names) - if(name) - GLOB.using_map.station_name += name + " " - - // Suffix - name = pick(GLOB.station_suffixes) - GLOB.using_map.station_name += name + " " - - // ID Number - switch(random) - if(1) - GLOB.using_map.station_name += "[rand(1, 99)]" - if(2) - GLOB.using_map.station_name += pick(GLOB.greek_letters) - if(3) - GLOB.using_map.station_name += "\Roman[rand(1,99)]" - if(4) - GLOB.using_map.station_name += pick(GLOB.phonetic_alphabet) - if(5) - GLOB.using_map.station_name += pick(GLOB.numbers_as_words) - if(13) - GLOB.using_map.station_name += pick("13","XIII","Thirteen") - - - if (config && config.server_name) - world.name = "[config.server_name]: [name]" - else - world.name = GLOB.using_map.station_name - - return GLOB.using_map.station_name - -/proc/world_name(var/name) - GLOB.using_map.station_name = name - - if (config && config.server_name) - world.name = "[config.server_name]: [name]" - else - world.name = name - - return name - - -/proc/generate_code_phrase()//Proc is used for phrase and response in subsystem init. - - var/code_phrase = ""//What is returned when the proc finishes. - var/words = pick(//How many words there will be. Minimum of two. 2, 4 and 5 have a lesser chance of being selected. 3 is the most likely. - 50; 2, - 200; 3, - 50; 4, - 25; 5 - ) - - var/safety[] = list(1,2,3)//Tells the proc which options to remove later on. - var/nouns[] = list("love","hate","anger","peace","pride","sympathy","bravery","loyalty","honesty","integrity","compassion","charity","success","courage","deceit","skill","beauty","brilliance","pain","misery","beliefs","dreams","justice","truth","faith","liberty","knowledge","thought","information","culture","trust","dedication","progress","education","hospitality","leisure","trouble","friendships", "relaxation") - var/drinks[] = list("vodka and tonic","gin fizz","bahama mama","manhattan","black Russian","whiskey soda","long island tea","margarita","Irish coffee"," manly dwarf","Irish cream","doctor's delight","Beepksy Smash","tequilla sunrise","brave bull","gargle blaster","bloody mary","whiskey cola","white Russian","vodka martini","martini","Cuba libre","kahlua","vodka","wine","moonshine") - var/locations[] = length(stationlocs) ? stationlocs : drinks//if null, defaults to drinks instead. - - var/names[] = list() - for(var/datum/computer_file/report/crew_record/t in GLOB.all_crew_records)//Picks from crew manifest. - names += t.get_name() - - var/maxwords = words//Extra var to check for duplicates. - - for(words,words>0,words--)//Randomly picks from one of the choices below. - - if(words==1&&(1 in safety)&&(2 in safety))//If there is only one word remaining and choice 1 or 2 have not been selected. - safety = list(pick(1,2))//Select choice 1 or 2. - else if(words==1&&maxwords==2)//Else if there is only one word remaining (and there were two originally), and 1 or 2 were chosen, - safety = list(3)//Default to list 3 - - switch(pick(safety))//Chance based on the safety list. - if(1)//1 and 2 can only be selected once each to prevent more than two specific names/places/etc. - switch(rand(1,2))//Mainly to add more options later. - if(1) - if(names.len&&prob(70)) - code_phrase += pick(names) - else - code_phrase += pick(pick(GLOB.first_names_male,GLOB.first_names_female)) - code_phrase += " " - code_phrase += pick(GLOB.last_names) - if(2) - code_phrase += pick(SSjobs.titles_to_datums) //Returns a job. - safety -= 1 - if(2) - switch(rand(1,2))//Places or things. - if(1) - code_phrase += pick(drinks) - if(2) - code_phrase += pick(locations) - safety -= 2 - if(3) - switch(rand(1,3))//Nouns, adjectives, verbs. Can be selected more than once. - if(1) - code_phrase += pick(nouns) - if(2) - code_phrase += pick(GLOB.adjectives) - if(3) - code_phrase += pick(GLOB.verbs) - if(words==1) - code_phrase += "." - else - code_phrase += ", " - - return code_phrase - -/proc/get_name(var/atom/A) - return A.name - -/proc/get_name_and_coordinates(var/atom/A) - return "[A.name] \[[A.x],[A.y],[A.z]\]" diff --git a/code/_helpers/sanitize_values.dm b/code/_helpers/sanitize_values.dm deleted file mode 100644 index f1820690d30de..0000000000000 --- a/code/_helpers/sanitize_values.dm +++ /dev/null @@ -1,116 +0,0 @@ -//general stuff -/proc/sanitize_bool(boolean, default=FALSE) - return sanitize_integer(boolean, FALSE, TRUE, default) - -/proc/sanitize_integer(number, min=0, max=1, default=0) - if(isnum(number)) - number = round(number) - if(min <= number && number <= max) - return number - return default - -// Checks if the given input is a valid list index; returns true/false and doesn't change anything. -/proc/is_valid_index(input, list/given_list) - if(!isnum(input)) - return FALSE - if(input != round(input)) - return FALSE - if(input < 1 || input > length(given_list)) - return FALSE - return TRUE - -/proc/sanitize_text(text, default="") - if(istext(text)) - return text - return default - -/proc/sanitize_inlist(value, list/List, default) - if(value in List) return value - if(default) return default - if(List && List.len)return List[1] - - - -//more specialised stuff -/proc/sanitize_gender(gender,neuter=0,plural=0, default="male") - switch(gender) - if(MALE, FEMALE)return gender - if(NEUTER) - if(neuter) return gender - else return default - if(PLURAL) - if(plural) return gender - else return default - return default - -/proc/sanitize_hexcolor(color, default="#000000") - if(!istext(color)) return default - var/len = length(color) - if(len != 7 && len !=4) return default - if(text2ascii(color,1) != 35) return default //35 is the ascii code for "#" - . = "#" - for(var/i=2,i<=len,i++) - var/ascii = text2ascii(color,i) - switch(ascii) - if(48 to 57) . += ascii2text(ascii) //numbers 0 to 9 - if(97 to 102) . += ascii2text(ascii) //letters a to f - if(65 to 70) . += ascii2text(ascii+32) //letters A to F - translates to lowercase - else return default - return . - -//Valid format codes: YY, YEAR, MM, DD, hh, mm, ss, :, -. " " (space). Invalid format will return default. -/proc/sanitize_time(time, default, format = "hh:mm") - if(!istext(time) || !(length(time) == length(format))) - return default - var/fragment = "" - . = list() - for(var/i = 1, i <= length(format), i++) - fragment += copytext_char(format,i,i+1) - if(fragment in list("YY", "YEAR", "MM", "DD", "hh", "mm", "ss")) - . += sanitize_one_time(copytext_char(time, i - length(fragment) + 1, i + 1), copytext_char(default, i - length(fragment) + 1, i + 1), fragment) - fragment = "" - else if(fragment in list(":", "-", " ")) - . += fragment - fragment = "" - if(fragment) - return default //This means the format was improper. - return JOINTEXT(.) - -//Internal proc, expects valid format and text input of equal length to format. -/proc/sanitize_one_time(input, default, format) - var/list/ainput = list() - for(var/i = 1, i <= length(input), i++) - ainput += text2ascii(input, i) - switch(format) - if("YY") - if(!(ainput[1] in 48 to 57) || !(ainput[2] in 48 to 57))//0 to 9 - return (default || "00") - return input - if("YEAR") - for(var/i = 1, i <= 4, i++) - if(!(ainput[i] in 48 to 57))//0 to 9 - return (default || "0000") - return input - if("MM") - var/early = (ainput[1] == 48) && (ainput[2] in 49 to 57) //01 to 09 - var/late = (ainput[1] == 49) && (ainput[2] in 48 to 50) //10 to 12 - if(!(early || late)) - return (default || "01") - return input - if("DD") - var/early = (ainput[1] == 48) && (ainput[2] in 49 to 57) //01 to 09 - var/mid = (ainput[1] in 49 to 50) && (ainput[2] in 48 to 57) //10 to 29 - var/late = (ainput[1] == 51) && (ainput[2] in 48 to 49) //30 to 31 - if(!(early || mid || late)) - return (default || "01") - return input - if("hh") - var/early = (ainput[1] in 48 to 49) && (ainput[2] in 48 to 57) //00 to 19 - var/late = (ainput[1] == 50) && (ainput[2] in 48 to 51) //20 to 23 - if(!(early || late)) - return (default || "00") - return input - if("mm", "ss") - if(!(ainput[1] in 48 to 53) || !(ainput[2] in 48 to 57)) //0 to 5, 0 to 9 - return (default || "00") - return input diff --git a/code/_helpers/sorts/TimSort.dm b/code/_helpers/sorts/TimSort.dm deleted file mode 100644 index cfa55f0dfa3ca..0000000000000 --- a/code/_helpers/sorts/TimSort.dm +++ /dev/null @@ -1,17 +0,0 @@ -//TimSort interface -/proc/sortTim(list/L, cmp=/proc/cmp_numeric_asc, associative, fromIndex=1, toIndex=0) - if(L && L.len >= 2) - fromIndex = fromIndex % L.len - toIndex = toIndex % (L.len+1) - if(fromIndex <= 0) - fromIndex += L.len - if(toIndex <= 0) - toIndex += L.len + 1 - - sortInstance.L = L - sortInstance.cmp = cmp - sortInstance.associative = associative - - sortInstance.timSort(fromIndex, toIndex) - - return L diff --git a/code/_helpers/sorts/__main.dm b/code/_helpers/sorts/__main.dm deleted file mode 100644 index 999217e22ee94..0000000000000 --- a/code/_helpers/sorts/__main.dm +++ /dev/null @@ -1,656 +0,0 @@ - //These are macros used to reduce on proc calls -#define fetchElement(L, i) (associative) ? L[L[i]] : L[i] - - //Minimum sized sequence that will be merged. Anything smaller than this will use binary-insertion sort. - //Should be a power of 2 -#define MIN_MERGE 32 - - //When we get into galloping mode, we stay there until both runs win less often than MIN_GALLOP consecutive times. -#define MIN_GALLOP 7 - - //This is a global instance to allow much of this code to be reused. The interfaces are kept separately -var/global/datum/sortInstance/sortInstance = new() -/datum/sortInstance - //The array being sorted. - var/list/L - - //The comparator proc-reference - var/cmp = /proc/cmp_numeric_asc - - //whether we are sorting list keys (0: L[i]) or associated values (1: L[L[i]]) - var/associative = 0 - - //This controls when we get *into* galloping mode. It is initialized to MIN_GALLOP. - //The mergeLo and mergeHi methods nudge it higher for random data, and lower for highly structured data. - var/minGallop = MIN_GALLOP - - //Stores information regarding runs yet to be merged. - //Run i starts at runBase[i] and extends for runLen[i] elements. - //runBase[i] + runLen[i] == runBase[i+1] - //var/stackSize - var/list/runBases = list() - var/list/runLens = list() - - -/datum/sortInstance/proc/timSort(start, end) - runBases.Cut() - runLens.Cut() - - var/remaining = end - start - - //If array is small, do a 'mini-TimSort' with no merges - if(remaining < MIN_MERGE) - var/initRunLen = countRunAndMakeAscending(start, end) - binarySort(start, end, start+initRunLen) - return - - //March over the array finding natural runs - //Extend any short natural runs to runs of length minRun - var/minRun = minRunLength(remaining) - - do - //identify next run - var/runLen = countRunAndMakeAscending(start, end) - - //if run is short, extend to min(minRun, remaining) - if(runLen < minRun) - var/force = (remaining <= minRun) ? remaining : minRun - - binarySort(start, start+force, start+runLen) - runLen = force - - //add data about run to queue - runBases.Add(start) - runLens.Add(runLen) - - //maybe merge - mergeCollapse() - - //Advance to find next run - start += runLen - remaining -= runLen - - while(remaining > 0) - - - //Merge all remaining runs to complete sort - //ASSERT(start == end) - mergeForceCollapse(); - //ASSERT(runBases.len == 1) - - //reset minGallop, for successive calls - minGallop = MIN_GALLOP - - return L - -/* -Sorts the specified portion of the specified array using a binary -insertion sort. This is the best method for sorting small numbers -of elements. It requires O(n log n) compares, but O(n^2) data -movement (worst case). - -If the initial part of the specified range is already sorted, -this method can take advantage of it: the method assumes that the -elements in range [lo,start) are already sorted - -lo the index of the first element in the range to be sorted -hi the index after the last element in the range to be sorted -start the index of the first element in the range that is not already known to be sorted -*/ -/datum/sortInstance/proc/binarySort(lo, hi, start) - //ASSERT(lo <= start && start <= hi) - if(start <= lo) - start = lo + 1 - - for(,start < hi, ++start) - var/pivot = fetchElement(L,start) - - //set left and right to the index where pivot belongs - var/left = lo - var/right = start - //ASSERT(left <= right) - - //[lo, left) elements <= pivot < [right, start) elements - //in other words, find where the pivot element should go using bisection search - while(left < right) - var/mid = SHIFTR(left + right, 1) //round((left+right)/2) - if(call(cmp)(fetchElement(L,mid), pivot) > 0) - right = mid - else - left = mid+1 - - //ASSERT(left == right) - moveElement(L, start, left) //move pivot element to correct location in the sorted range - -/* -Returns the length of the run beginning at the specified position and reverses the run if it is back-to-front - -A run is the longest ascending sequence with: - a[lo] <= a[lo + 1] <= a[lo + 2] <= ... -or the longest descending sequence with: - a[lo] > a[lo + 1] > a[lo + 2] > ... - -For its intended use in a stable mergesort, the strictness of the -definition of "descending" is needed so that the call can safely -reverse a descending sequence without violating stability. -*/ -/datum/sortInstance/proc/countRunAndMakeAscending(lo, hi) - //ASSERT(lo < hi) - - var/runHi = lo + 1 - if(runHi >= hi) - return 1 - - var/last = fetchElement(L,lo) - var/current = fetchElement(L,runHi++) - - if(call(cmp)(current, last) < 0) - while(runHi < hi) - last = current - current = fetchElement(L,runHi) - if(call(cmp)(current, last) >= 0) - break - ++runHi - reverseRange(L, lo, runHi) - else - while(runHi < hi) - last = current - current = fetchElement(L,runHi) - if(call(cmp)(current, last) < 0) - break - ++runHi - - return runHi - lo - -//Returns the minimum acceptable run length for an array of the specified length. -//Natural runs shorter than this will be extended with binarySort -/datum/sortInstance/proc/minRunLength(n) - //ASSERT(n >= 0) - var/r = 0 //becomes 1 if any bits are shifted off - while(n >= MIN_MERGE) - r |= (n & 1) - n = SHIFTR(n, 1) - return n + r - -//Examines the stack of runs waiting to be merged and merges adjacent runs until the stack invariants are reestablished: -// runLen[i-3] > runLen[i-2] + runLen[i-1] -// runLen[i-2] > runLen[i-1] -//This method is called each time a new run is pushed onto the stack. -//So the invariants are guaranteed to hold for i= 2) - var/n = runBases.len - 1 - if(n > 1 && runLens[n-1] <= runLens[n] + runLens[n+1]) - if(runLens[n-1] < runLens[n+1]) - --n - mergeAt(n) - else if(runLens[n] <= runLens[n+1]) - mergeAt(n) - else - break //Invariant is established - - -//Merges all runs on the stack until only one remains. -//Called only once, to finalise the sort -/datum/sortInstance/proc/mergeForceCollapse() - while(runBases.len >= 2) - var/n = runBases.len - 1 - if(n > 1 && runLens[n-1] < runLens[n+1]) - --n - mergeAt(n) - - -//Merges the two consecutive runs at stack indices i and i+1 -//Run i must be the penultimate or antepenultimate run on the stack -//In other words, i must be equal to stackSize-2 or stackSize-3 -/datum/sortInstance/proc/mergeAt(i) - //ASSERT(runBases.len >= 2) - //ASSERT(i >= 1) - //ASSERT(i == runBases.len - 1 || i == runBases.len - 2) - - var/base1 = runBases[i] - var/base2 = runBases[i+1] - var/len1 = runLens[i] - var/len2 = runLens[i+1] - - //ASSERT(len1 > 0 && len2 > 0) - //ASSERT(base1 + len1 == base2) - - //Record the legth of the combined runs. If i is the 3rd last run now, also slide over the last run - //(which isn't involved in this merge). The current run (i+1) goes away in any case. - runLens[i] += runLens[i+1] - runLens.Cut(i+1, i+2) - runBases.Cut(i+1, i+2) - - - //Find where the first element of run2 goes in run1. - //Prior elements in run1 can be ignored (because they're already in place) - var/k = gallopRight(fetchElement(L,base2), base1, len1, 0) - //ASSERT(k >= 0) - base1 += k - len1 -= k - if(len1 == 0) - return - - //Find where the last element of run1 goes in run2. - //Subsequent elements in run2 can be ignored (because they're already in place) - len2 = gallopLeft(fetchElement(L,base1 + len1 - 1), base2, len2, len2-1) - //ASSERT(len2 >= 0) - if(len2 == 0) - return - - //Merge remaining runs, using tmp array with min(len1, len2) elements - if(len1 <= len2) - mergeLo(base1, len1, base2, len2) - else - mergeHi(base1, len1, base2, len2) - - -/* - Locates the position to insert key within the specified sorted range - If the range contains elements equal to key, this will return the index of the LEFTMOST of those elements - - key the element to be inserted into the sorted range - base the index of the first element of the sorted range - len the length of the sorted range, must be greater than 0 - hint the offset from base at which to begin the search, such that 0 <= hint < len; i.e. base <= hint < base+hint - - Returns the index at which to insert element 'key' -*/ -/datum/sortInstance/proc/gallopLeft(key, base, len, hint) - //ASSERT(len > 0 && hint >= 0 && hint < len) - - var/lastOffset = 0 - var/offset = 1 - if(call(cmp)(key, fetchElement(L,base+hint)) > 0) - var/maxOffset = len - hint - while(offset < maxOffset && call(cmp)(key, fetchElement(L,base+hint+offset)) > 0) - lastOffset = offset - offset = SHIFTL(offset, 1) + 1 - - if(offset > maxOffset) - offset = maxOffset - - lastOffset += hint - offset += hint - - else - var/maxOffset = hint + 1 - while(offset < maxOffset && call(cmp)(key, fetchElement(L,base+hint-offset)) <= 0) - lastOffset = offset - offset = SHIFTL(offset, 1) + 1 - - if(offset > maxOffset) - offset = maxOffset - - var/temp = lastOffset - lastOffset = hint - offset - offset = hint - temp - - //ASSERT(-1 <= lastOffset && lastOffset < offset && offset <= len) - - //Now L[base+lastOffset] < key <= L[base+offset], so key belongs somewhere to the right of lastOffset but no farther than - //offset. Do a binary search with invariant L[base+lastOffset-1] < key <= L[base+offset] - ++lastOffset - while(lastOffset < offset) - var/m = lastOffset + SHIFTR(offset - lastOffset, 1) - - if(call(cmp)(key, fetchElement(L,base+m)) > 0) - lastOffset = m + 1 - else - offset = m - - //ASSERT(lastOffset == offset) - return offset - -/** - * Like gallopLeft, except that if the range contains an element equal to - * key, gallopRight returns the index after the rightmost equal element. - * - * @param key the key whose insertion point to search for - * @param a the array in which to search - * @param base the index of the first element in the range - * @param len the length of the range; must be > 0 - * @param hint the index at which to begin the search, 0 <= hint < n. - * The closer hint is to the result, the faster this method will run. - * @param c the comparator used to order the range, and to search - * @return the int k, 0 <= k <= n such that a[b + k - 1] <= key < a[b + k] - */ -/datum/sortInstance/proc/gallopRight(key, base, len, hint) - //ASSERT(len > 0 && hint >= 0 && hint < len) - - var/offset = 1 - var/lastOffset = 0 - if(call(cmp)(key, fetchElement(L,base+hint)) < 0) //key <= L[base+hint] - var/maxOffset = hint + 1 //therefore we want to insert somewhere in the range [base,base+hint] = [base+,base+(hint+1)) - while(offset < maxOffset && call(cmp)(key, fetchElement(L,base+hint-offset)) < 0) //we are iterating backwards - lastOffset = offset - offset = SHIFTL(offset, 1) + 1 //1 3 7 15 - //if(offset <= 0) //int overflow, not an issue here since we are using floats - // offset = maxOffset - - if(offset > maxOffset) - offset = maxOffset - - var/temp = lastOffset - lastOffset = hint - offset - offset = hint - temp - - else //key > L[base+hint] - var/maxOffset = len - hint //therefore we want to insert somewhere in the range (base+hint,base+len) = [base+hint+1, base+hint+(len-hint)) - while(offset < maxOffset && call(cmp)(key, fetchElement(L,base+hint+offset)) >= 0) - lastOffset = offset - offset = SHIFTL(offset, 1) + 1 - //if(offset <= 0) //int overflow, not an issue here since we are using floats - // offset = maxOffset - - if(offset > maxOffset) - offset = maxOffset - - lastOffset += hint - offset += hint - - //ASSERT(-1 <= lastOffset && lastOffset < offset && offset <= len) - - ++lastOffset - while(lastOffset < offset) - var/m = lastOffset + SHIFTR(offset - lastOffset, 1) - - if(call(cmp)(key, fetchElement(L,base+m)) < 0) //key <= L[base+m] - offset = m - else //key > L[base+m] - lastOffset = m + 1 - - //ASSERT(lastOffset == offset) - - return offset - - -//Merges two adjacent runs in-place in a stable fashion. -//For performance this method should only be called when len1 <= len2! -/datum/sortInstance/proc/mergeLo(base1, len1, base2, len2) - //ASSERT(len1 > 0 && len2 > 0 && base1 + len1 == base2) - - var/cursor1 = base1 - var/cursor2 = base2 - - //degenerate cases - if(len2 == 1) - moveElement(L, cursor2, cursor1) - return - - if(len1 == 1) - moveElement(L, cursor1, cursor2+len2) - return - - - //Move first element of second run - moveElement(L, cursor2++, cursor1++) - --len2 - - outer: - while(1) - var/count1 = 0 //# of times in a row that first run won - var/count2 = 0 // " " " " " " second run won - - //do the straightfoward thin until one run starts winning consistently - - do - //ASSERT(len1 > 1 && len2 > 0) - if(call(cmp)(fetchElement(L,cursor2), fetchElement(L,cursor1)) < 0) - moveElement(L, cursor2++, cursor1++) - --len2 - - ++count2 - count1 = 0 - - if(len2 == 0) - break outer - else - ++cursor1 - - ++count1 - count2 = 0 - - if(--len1 == 1) - break outer - - while((count1 | count2) < minGallop) - - - //one run is winning consistently so galloping may provide huge benifits - //so try galloping, until such time as the run is no longer consistently winning - do - //ASSERT(len1 > 1 && len2 > 0) - - count1 = gallopRight(fetchElement(L,cursor2), cursor1, len1, 0) - if(count1) - cursor1 += count1 - len1 -= count1 - - if(len1 <= 1) - break outer - - moveElement(L, cursor2, cursor1) - ++cursor2 - ++cursor1 - if(--len2 == 0) - break outer - - count2 = gallopLeft(fetchElement(L,cursor1), cursor2, len2, 0) - if(count2) - moveRange(L, cursor2, cursor1, count2) - - cursor2 += count2 - cursor1 += count2 - len2 -= count2 - - if(len2 == 0) - break outer - - ++cursor1 - if(--len1 == 1) - break outer - - --minGallop - - while((count1|count2) > MIN_GALLOP) - - if(minGallop < 0) - minGallop = 0 - minGallop += 2; // Penalize for leaving gallop mode - - - if(len1 == 1) - //ASSERT(len2 > 0) - moveElement(L, cursor1, cursor2+len2) - - //else - //ASSERT(len2 == 0) - //ASSERT(len1 > 1) - - -/datum/sortInstance/proc/mergeHi(base1, len1, base2, len2) - //ASSERT(len1 > 0 && len2 > 0 && base1 + len1 == base2) - - var/cursor1 = base1 + len1 - 1 //start at end of sublists - var/cursor2 = base2 + len2 - 1 - - //degenerate cases - if(len2 == 1) - moveElement(L, base2, base1) - return - - if(len1 == 1) - moveElement(L, base1, cursor2+1) - return - - moveElement(L, cursor1--, cursor2-- + 1) - --len1 - - outer: - while(1) - var/count1 = 0 //# of times in a row that first run won - var/count2 = 0 // " " " " " " second run won - - //do the straightfoward thing until one run starts winning consistently - do - //ASSERT(len1 > 0 && len2 > 1) - if(call(cmp)(fetchElement(L,cursor2), fetchElement(L,cursor1)) < 0) - moveElement(L, cursor1--, cursor2-- + 1) - --len1 - - ++count1 - count2 = 0 - - if(len1 == 0) - break outer - else - --cursor2 - --len2 - - ++count2 - count1 = 0 - - if(len2 == 1) - break outer - while((count1 | count2) < minGallop) - - //one run is winning consistently so galloping may provide huge benifits - //so try galloping, until such time as the run is no longer consistently winning - do - //ASSERT(len1 > 0 && len2 > 1) - - count1 = len1 - gallopRight(fetchElement(L,cursor2), base1, len1, len1-1) //should cursor1 be base1? - if(count1) - cursor1 -= count1 - - moveRange(L, cursor1+1, cursor2+1, count1) //cursor1+1 == cursor2 by definition - - cursor2 -= count1 - len1 -= count1 - - if(len1 == 0) - break outer - - --cursor2 - - if(--len2 == 1) - break outer - - count2 = len2 - gallopLeft(fetchElement(L,cursor1), cursor1+1, len2, len2-1) - if(count2) - cursor2 -= count2 - len2 -= count2 - - if(len2 <= 1) - break outer - - moveElement(L, cursor1--, cursor2-- + 1) - --len1 - - if(len1 == 0) - break outer - - --minGallop - while((count1|count2) > MIN_GALLOP) - - if(minGallop < 0) - minGallop = 0 - minGallop += 2 // Penalize for leaving gallop mode - - if(len2 == 1) - //ASSERT(len1 > 0) - - cursor1 -= len1 - moveRange(L, cursor1+1, cursor2+1, len1) - - //else - //ASSERT(len1 == 0) - //ASSERT(len2 > 0) - - -/datum/sortInstance/proc/mergeSort(start, end) - var/remaining = end - start - - //If array is small, do an insertion sort - if(remaining < MIN_MERGE) - //var/initRunLen = countRunAndMakeAscending(start, end) - binarySort(start, end, start/*+initRunLen*/) - return - - var/minRun = minRunLength(remaining) - - do - var/runLen = (remaining <= minRun) ? remaining : minRun - - binarySort(start, start+runLen, start) - - //add data about run to queue - runBases.Add(start) - runLens.Add(runLen) - - //Advance to find next run - start += runLen - remaining -= runLen - - while(remaining > 0) - - while(runBases.len >= 2) - var/n = runBases.len - 1 - if(n > 1 && runLens[n-1] <= runLens[n] + runLens[n+1]) - if(runLens[n-1] < runLens[n+1]) - --n - mergeAt2(n) - else if(runLens[n] <= runLens[n+1]) - mergeAt2(n) - else - break //Invariant is established - - while(runBases.len >= 2) - var/n = runBases.len - 1 - if(n > 1 && runLens[n-1] < runLens[n+1]) - --n - mergeAt2(n) - - return L - -/datum/sortInstance/proc/mergeAt2(i) - var/cursor1 = runBases[i] - var/cursor2 = runBases[i+1] - - var/end1 = cursor1+runLens[i] - var/end2 = cursor2+runLens[i+1] - - var/val1 = fetchElement(L,cursor1) - var/val2 = fetchElement(L,cursor2) - - while(1) - if(call(cmp)(val1,val2) < 0) - if(++cursor1 >= end1) - break - val1 = fetchElement(L,cursor1) - else - moveElement(L,cursor2,cursor1) - - ++cursor2 - if(++cursor2 >= end2) - break - ++end1 - ++cursor1 - //if(++cursor1 >= end1) - // break - - val2 = fetchElement(L,cursor2) - - - //Record the legth of the combined runs. If i is the 3rd last run now, also slide over the last run - //(which isn't involved in this merge). The current run (i+1) goes away in any case. - runLens[i] += runLens[i+1] - runLens.Cut(i+1, i+2) - runBases.Cut(i+1, i+2) - -#undef MIN_GALLOP -#undef MIN_MERGE - -#undef fetchElement diff --git a/code/_helpers/spawn_sync.dm b/code/_helpers/spawn_sync.dm deleted file mode 100644 index 6c1733ef5bcad..0000000000000 --- a/code/_helpers/spawn_sync.dm +++ /dev/null @@ -1,86 +0,0 @@ -//------------------------------- -/* - Spawn sync helper - - Helps syncronize spawn()ing multiple processes in loops. - - Example for using this: - - //Create new spawn_sync datum - var/datum/spawn_sync/sync = new() - - for(var/obj/O in list) - //Call start_worker(), passing it first the object, then a string of the name of the proc you want called, then - // any and all arguments you want passed to the proc. - sync.start_worker(O, "do_something", arg1, arg2) - - //Finally call wait_until_done() - sync.wait_until_done() - - //Once all the workers have completed, or the failsafe has triggered, the code will continue. By default the - // failsafe is roughly 10 seconds (100 checks). -*/ -//------------------------------- -/datum/spawn_sync - var/count = 1 - var/failsafe = 100 //how many checks before the failsafe triggers and the helper stops waiting - -//Opens a thread counter -/datum/spawn_sync/proc/open() - count++ - -//Closes a thread counter -/datum/spawn_sync/proc/close() - count-- - -//Finalizes the spawn sync by removing the original starting count -/datum/spawn_sync/proc/finalize() - close() - -//Resets the counter if you want to utilize the same datum multiple times -// Optional: pass the number of checks you want for the failsafe -/datum/spawn_sync/proc/reset(var/safety = 100) - count = 1 - failsafe = safety - -//Check if all threads have returned -// Returns 0 if not all threads have completed -// Returns 1 if all threads have completed -/datum/spawn_sync/proc/check() - safety_check() - return count > 0 ? 1 : 0 - -//Failsafe in case something breaks horribly -/datum/spawn_sync/proc/safety_check() - failsafe-- - if(failsafe < 1) - count = 0 - -//Set failsafe check count in case you need more time for the workers to return -/datum/spawn_sync/proc/set_failsafe(var/safety) - failsafe = safety - -/datum/spawn_sync/proc/start_worker() - //Extract the thread run proc and it's arguments from the variadic args list. - ASSERT(args.len > 0) - var/obj = args[1] - var/thread_proc = args[2] - - //dispatch a new thread - open() - spawn() - //Utilise try/catch keywords here so the code continues even if an error occurs. - try - call(obj, thread_proc)(arglist(args.Copy(3))) - catch(var/exception/e) - error("[e] on [e.file]:[e.line]") - close() - -/datum/spawn_sync/proc/wait_until_done() - finalize() - - //Create a while loop to check if the sync is complete yet, it will return once all the spawn threads have - // completed, or the failsafe has expired. - while(check()) - //Add a sleep call to delay each check. - sleep(1) diff --git a/code/_helpers/species.dm b/code/_helpers/species.dm deleted file mode 100644 index 260d10c806603..0000000000000 --- a/code/_helpers/species.dm +++ /dev/null @@ -1,13 +0,0 @@ -/** - Helpers related to /datum/species -*/ - - -/// Null, or a species if thing is a species, a species path, or a species name -/proc/resolve_species(datum/species/thing) - if (ispath(thing, /datum/species)) - thing = initial(thing.name) - if (istext(thing)) - thing = all_species[thing] - if (istype(thing)) - return thing diff --git a/code/_helpers/storage.dm b/code/_helpers/storage.dm deleted file mode 100644 index 2d415a55ac554..0000000000000 --- a/code/_helpers/storage.dm +++ /dev/null @@ -1,54 +0,0 @@ -/proc/create_objects_in_loc(var/atom/loc, var/atom_paths) - if(!istype(loc)) - CRASH("Inappropriate loction given.") - - if(istype(atom_paths, /datum/atom_creator)) - var/datum/atom_creator/atom_creator = atom_paths - atom_creator.create(loc) - else if(islist(atom_paths)) - for(var/atom_path in atom_paths) - for(var/i = 1 to max(1, atom_paths[atom_path])) - create_objects_in_loc(loc, atom_path) - else if(ispath(atom_paths)) - new atom_paths(loc) - else - CRASH("Unhandled input: [log_info_line(atom_paths)]") - -/datum/atom_creator/proc/create(var/loc) - return - -/datum/atom_creator/simple - var/path - var/probability - var/prob_method = /proc/prob_call - -/datum/atom_creator/simple/New(var/path, var/probability) - if(args.len != 2) - CRASH("Invalid number of arguments. Expected 2, was [args.len]") - if(!isnum(probability) || probability < 1 || probability > 99) - CRASH("Invalid probability. Expected a number between 1 and 99, was [log_info_line(probability)]") // A probability of 0 or 100 is pretty meaningless. - src.probability = probability - src.path = path - -/datum/atom_creator/simple/create(var/loc) - if(call(prob_method)(probability)) - create_objects_in_loc(loc, path) - -/datum/atom_creator/weighted - var/list/paths - var/selection_method = /proc/pickweight - -/datum/atom_creator/weighted/New(var/list/paths) - if(args.len != 1) - CRASH("Invalid number of arguments. Expected 1, was [args.len]") - if(!istype(paths)) - CRASH("Invalid argument type. Expected /list, was [log_info_line(paths)]") - for(var/path in paths) - var/probability = paths[path] - if(!(isnull(probability) || (isnum(probability) && probability > 0))) - CRASH("Invalid probability. Expected null or a number greater than 0, was [log_info_line(probability)]") - src.paths = paths - -/datum/atom_creator/weighted/create(var/loc) - var/path = call(selection_method)(paths) - create_objects_in_loc(loc, path) diff --git a/code/_helpers/text.dm b/code/_helpers/text.dm deleted file mode 100644 index c55a875a7bdac..0000000000000 --- a/code/_helpers/text.dm +++ /dev/null @@ -1,674 +0,0 @@ -/* - * Holds procs designed to help with filtering text - * Contains groups: - * SQL sanitization - * Text sanitization - * Text searches - * Text modification - * Misc - */ - - -/* - * SQL sanitization - */ - -// Run all strings to be used in an SQL query through this proc first to properly escape out injection attempts. -/proc/sanitizeSQL(var/t as text) - var/sqltext = dbcon.Quote(t); - return copytext_char(sqltext, 2, length(sqltext));//Quote() adds quotes around input, we already do that - -/* - * Text sanitization - */ - -//Used for preprocessing entered text -//Added in an additional check to alert players if input is too long -/proc/sanitize(var/input, var/max_length = MAX_MESSAGE_LEN, var/encode = 1, var/trim = 1, var/extra = 1) - if(!input) - return - - if (max_length) - var/len = length_char(input) - if (len > max_length) - to_chat(usr, SPAN_WARNING("Your message is too long by [len - max_length] char\s.")) - return - input = copytext_char(input, 1, max_length + 1) - - if(extra) - input = replace_characters(input, list("\n"=" ","\t"=" ")) - - if(encode) - // The below \ escapes have a space inserted to attempt to enable unit testing of span class usage. Please do not remove the space. - //In addition to processing html, html_encode removes byond formatting codes like "\ red", "\ i" and other. - //It is important to avoid double-encode text, it can "break" quotes and some other characters. - //Also, keep in mind that escaped characters don't work in the interface (window titles, lower left corner of the main window, etc.) - input = html_encode(input) - else - //If not need encode text, simply remove < and > - //note: we can also remove here byond formatting codes: 0xFF + next byte - input = replace_characters(input, list("<"=" ", ">"=" ")) - - if(trim) - //Maybe, we need trim text twice? Here and before copytext_char? - input = trim(input) - - return input - -//Run sanitize(), but remove <, >, " first to prevent displaying them as > < &34; in some places, after html_encode(). -//Best used for sanitize object names, window titles. -//If you have a problem with sanitize() in chat, when quotes and >, < are displayed as html entites - -//this is a problem of double-encode(when & becomes &), use sanitize() with encode=0, but not the sanitizeSafe()! -/proc/sanitizeSafe(var/input, var/max_length = MAX_MESSAGE_LEN, var/encode = 1, var/trim = 1, var/extra = 1) - return sanitize(replace_characters(input, list(">"=" ","<"=" ", "\""="'")), max_length, encode, trim, extra) - -//Filters out undesirable characters from names -/proc/sanitizeName(var/input, var/max_length = MAX_NAME_LEN, var/allow_numbers = 0, var/force_first_letter_uppercase = TRUE) - if(!input || length(input) > max_length) - return //Rejects the input if it is null or if it is longer then the max length allowed - - var/number_of_alphanumeric = 0 - var/last_char_group = 0 - var/output = "" - - for(var/i=1, i<=length(input), i++) - var/ascii_char = text2ascii(input,i) - switch(ascii_char) - // A .. Z - if(65 to 90) //Uppercase Letters - output += ascii2text(ascii_char) - number_of_alphanumeric++ - last_char_group = 4 - - // a .. z - if(97 to 122) //Lowercase Letters - if(last_char_group<2 && force_first_letter_uppercase) - output += ascii2text(ascii_char-32) //Force uppercase first character - else - output += ascii2text(ascii_char) - number_of_alphanumeric++ - last_char_group = 4 - - // 0 .. 9 - if(48 to 57) //Numbers - if(!last_char_group) continue //suppress at start of string - if(!allow_numbers) continue - output += ascii2text(ascii_char) - number_of_alphanumeric++ - last_char_group = 3 - - // ' - . - if(39,45,46) //Common name punctuation - if(!last_char_group) continue - output += ascii2text(ascii_char) - last_char_group = 2 - - // ~ | @ : # $ % & * + - if(126,124,64,58,35,36,37,38,42,43) //Other symbols that we'll allow (mainly for AI) - if(!last_char_group) continue //suppress at start of string - if(!allow_numbers) continue - output += ascii2text(ascii_char) - last_char_group = 2 - - //Space - if(32) - if(last_char_group <= 1) continue //suppress double-spaces and spaces at start of string - output += ascii2text(ascii_char) - last_char_group = 1 - else - return - - if(number_of_alphanumeric < 2) return //protects against tiny names like "A" and also names like "' ' ' ' ' ' ' '" - - if(last_char_group == 1) - output = copytext_char(output,1,length(output)) //removes the last character (in this case a space) - - for(var/bad_name in list("space","floor","wall","r-wall","monkey","unknown","inactive ai","plating")) //prevents these common metagamey names - if(cmptext(output,bad_name)) return //(not case sensitive) - - return output - -//Used to strip text of everything but letters and numbers, make letters lowercase, and turn spaces into .'s. -//Make sure the text hasn't been encoded if using this. -/proc/sanitize_for_email(text) - if(!text) return "" - var/list/dat = list() - var/last_was_space = 1 - for(var/i=1, i<=length(text), i++) - var/ascii_char = text2ascii(text,i) - switch(ascii_char) - if(65 to 90) //A-Z, make them lowercase - dat += ascii2text(ascii_char + 32) - if(97 to 122) //a-z - dat += ascii2text(ascii_char) - last_was_space = 0 - if(48 to 57) //0-9 - dat += ascii2text(ascii_char) - last_was_space = 0 - if(32, 46) //space or . - if(last_was_space) - continue - dat += "." //We turn these into ., but avoid repeats or . at start. - last_was_space = 1 - if(dat[length(dat)] == ".") //kill trailing . - dat.Cut(length(dat)) - return jointext(dat, null) - -//Returns null if there is any bad text in the string -/proc/reject_bad_text(var/text, var/max_length=512) - if(length(text) > max_length) return //message too long - var/non_whitespace = 0 - for(var/i=1, i<=length(text), i++) - switch(text2ascii(text,i)) - if(62,60,92,47) return //rejects the text if it contains these bad characters: <, >, \ or / - if(127 to 255) return //rejects non-ASCII letters - if(0 to 31) return //more weird stuff - if(32) continue //whitespace - else non_whitespace = 1 - if(non_whitespace) return text //only accepts the text if it has some non-spaces - - -//Old variant. Haven't dared to replace in some places. -/proc/sanitize_old(var/t,var/list/repl_chars = list("\n"="#","\t"="#")) - return html_encode(replace_characters(t,repl_chars)) - -/* - * Text searches - */ - -//Checks the beginning of a string for a specified sub-string -//Returns the position of the substring or 0 if it was not found -/proc/dd_hasprefix(text, prefix) - var/start = 1 - var/end = length(prefix) + 1 - return findtext(text, prefix, start, end) - -//Checks the beginning of a string for a specified sub-string. This proc is case sensitive -//Returns the position of the substring or 0 if it was not found -/proc/dd_hasprefix_case(text, prefix) - var/start = 1 - var/end = length(prefix) + 1 - return findtextEx(text, prefix, start, end) - -//Checks the end of a string for a specified substring. -//Returns the position of the substring or 0 if it was not found -/proc/dd_hassuffix(text, suffix) - var/start = length(text) - length(suffix) - if(start) - return findtext(text, suffix, start, null) - return - -//Checks the end of a string for a specified substring. This proc is case sensitive -//Returns the position of the substring or 0 if it was not found -/proc/dd_hassuffix_case(text, suffix) - var/start = length(text) - length(suffix) - if(start) - return findtextEx(text, suffix, start, null) - -/* - * Text modification - */ - -/proc/replace_characters(var/t,var/list/repl_chars) - for(var/char in repl_chars) - t = replacetext_char(t, char, repl_chars[char]) - return t - - -/// Builds a string of padding repeated until its character count meets or exceeds size -/proc/generate_padding(size, padding) - var/padding_size = length_char(padding) - if (!padding_size) - return "" - var/padding_count = Ceil(size / padding_size) - var/list/result = list() - for (var/i = padding_count to 1 step -1) - result += padding // pow2 strategies could be used here at the cost of complexity - return result.Join(null) - - -/// Pads the matter of padding onto the start of text until the result length is size -/proc/pad_left(text, size, padding) - var/text_length = length_char(text) - if (text_length >= size) - return text - if (!text_length) - text = "" - var/result = "[generate_padding(size - text_length, padding)][text]" - var/length_difference = length_char(result) - size - if (!length_difference) - return result - return copytext_char(result, length_difference + 1) - - -/// Pads the matter of padding onto the start of text until the result length is size -/proc/pad_right(text, size, padding) - var/text_length = length_char(text) - if (text_length >= size) - return text - if (!text_length) - text = "" - var/result = "[text][generate_padding(size - text_length, padding)]" - var/length_difference = length_char(result) - size - if (!length_difference) - return result - return copytext_char(result, 1, -length_difference) - - -//Returns a string with reserved characters and spaces before the first letter removed -/proc/trim_left(text) - for (var/i = 1 to length(text)) - if (text2ascii(text, i) > 32) - return copytext_char(text, i) - return "" - -//Returns a string with reserved characters and spaces after the last letter removed -/proc/trim_right(text) - for (var/i = length(text) to 1 step -1) - if (text2ascii(text, i) > 32) - return copytext_char(text, 1, i + 1) - return "" - -//Returns a string with reserved characters and spaces before the first word and after the last word removed. -/proc/trim(text) - return trim_left(trim_right(text)) - -//Returns a string with the first element of the string capitalized. -/proc/capitalize(text) - return uppertext(copytext_char(text, 1, 2)) + copytext_char(text, 2) - -//This proc strips html properly, remove < > and all text between -//for complete text sanitizing should be used sanitize() -/proc/strip_html_properly(var/input) - if(!input) - return - var/opentag = 1 //These store the position of < and > respectively. - var/closetag = 1 - while(1) - opentag = findtext(input, "<") - closetag = findtext(input, ">") - if(closetag && opentag) - if(closetag < opentag) - input = copytext(input, (closetag + 1)) - else - input = copytext(input, 1, opentag) + copytext(input, (closetag + 1)) - else if(closetag || opentag) - if(opentag) - input = copytext(input, 1, opentag) - else - input = copytext(input, (closetag + 1)) - else - break - - return input - -//This proc fills in all spaces with the "replace" var (* by default) with whatever -//is in the other string at the same spot (assuming it is not a replace char). -//This is used for fingerprints -/proc/stringmerge(var/text,var/compare,replace = "*") - var/newtext = text - if(length(text) != length(compare)) - return 0 - for(var/i = 1, i < length(text), i++) - var/a = copytext_char(text,i,i+1) - var/b = copytext_char(compare,i,i+1) - //if it isn't both the same letter, or if they are both the replacement character - //(no way to know what it was supposed to be) - if(a != b) - if(a == replace) //if A is the replacement char - newtext = copytext_char(newtext,1,i) + b + copytext_char(newtext, i+1) - else if(b == replace) //if B is the replacement char - newtext = copytext_char(newtext,1,i) + a + copytext_char(newtext, i+1) - else //The lists disagree, Uh-oh! - return 0 - return newtext - -//This proc returns the number of chars of the string that is the character -//This is used for detective work to determine fingerprint completion. -/proc/stringpercent(var/text,character = "*") - if(!text || !character) - return 0 - var/count = 0 - for(var/i = 1, i <= length(text), i++) - var/a = copytext_char(text,i,i+1) - if(a == character) - count++ - return count - -/proc/reverse_text(text) - . = "" - for (var/i = length_char(text) to 1 step -1) - . += copytext_char(text, i, i + 1) - -//Used in preferences' SetFlavorText and human's set_flavor verb -//Previews a string of len or less length -/proc/TextPreview(var/string,var/len=40) - if(length(string) <= len) - if(!length(string)) - return "\[...\]" - else - return string - else - return "[copytext_preserve_html(string, 1, 37)]..." - -//alternative copytext_char() for encoded text, doesn't break html entities (" and other) -/proc/copytext_preserve_html(var/text, var/first, var/last) - return html_encode(copytext_char(html_decode(text), first, last)) - -/proc/create_text_tag(var/tagname, var/tagdesc = tagname, var/client/C = null) - if(!(C && C.get_preference_value(/datum/client_preference/chat_tags) == GLOB.PREF_SHOW)) - return tagdesc - return icon2html(icon('./icons/chattags.dmi', tagname), world, realsize=TRUE, class="text_tag") - -/proc/contains_az09(var/input) - for(var/i=1, i<=length(input), i++) - var/ascii_char = text2ascii(input,i) - switch(ascii_char) - // A .. Z - if(65 to 90) //Uppercase Letters - return 1 - // a .. z - if(97 to 122) //Lowercase Letters - return 1 - - // 0 .. 9 - if(48 to 57) //Numbers - return 1 - return 0 - -/proc/generateRandomString(var/length) - . = list() - for(var/a in 1 to length) - var/letter = rand(33,126) - . += ascii2text(letter) - . = jointext(.,null) - -#define text_starts_with(string, substring) !!findtext_char((string), (substring), 1, 1 + length_char(substring)) -#define text_ends_with(string, substring) !!findtext_char((string), (substring), -length_char(substring)) - -#define gender2text(gender) capitalize(gender) - -/** - * Strip out the special beyond characters for \proper and \improper - * from text that will be sent to the browser. - */ -#define strip_improper(input_text) replacetext_char(replacetext_char(input_text, "\proper", ""), "\improper", "") - -/proc/pencode2html(t) - t = replacetext_char(t, "\n", "
") - t = replacetext_char(t, "\[center\]", "
") - t = replacetext_char(t, "\[/center\]", "
") - t = replacetext_char(t, "\[br\]", "
") - t = replacetext_char(t, "\[b\]", "") - t = replacetext_char(t, "\[/b\]", "") - t = replacetext_char(t, "\[i\]", "") - t = replacetext_char(t, "\[/i\]", "") - t = replacetext_char(t, "\[u\]", "") - t = replacetext_char(t, "\[/u\]", "") - t = replacetext_char(t, "\[time\]", "[stationtime2text()]") - t = replacetext_char(t, "\[date\]", "[stationdate2text()]") - t = replacetext_char(t, "\[large\]", "") - t = replacetext_char(t, "\[/large\]", "") - t = replacetext_char(t, "\[field\]", "") - t = replacetext_char(t, "\[h1\]", "

") - t = replacetext_char(t, "\[/h1\]", "

") - t = replacetext_char(t, "\[h2\]", "

") - t = replacetext_char(t, "\[/h2\]", "

") - t = replacetext_char(t, "\[h3\]", "

") - t = replacetext_char(t, "\[/h3\]", "

") - t = replacetext_char(t, "\[*\]", "
  • ") - t = replacetext_char(t, "\[hr\]", "
    ") - t = replacetext_char(t, "\[small\]", "") - t = replacetext_char(t, "\[/small\]", "") - t = replacetext_char(t, "\[list\]", "
      ") - t = replacetext_char(t, "\[/list\]", "
    ") - t = replacetext_char(t, "\[table\]", "
  • Scan Results For:[scan["name"]]
    Scan performed at:[scan["time"]]
    Apparent Age:[scan["age"]]
    Brain Activity:100%
    Brain activity:none, patient is braindead
    ERROR - Nonstandard biology
    [scan["brain_activity"]]%
    [scan["brain_activity"]]%
    [scan["brain_activity"]]%
    there's a squiggly line here
    there's a straight line here
    Pulse Rate:75bpm
    Patient is tachycardic.
    Blood Pressure:120/80 (100% oxygenation)
    Blood Volume:560u/560u
    Patient in Hypovolemic Shock. Transfusion highly recommended.
    Pulse rate:ERROR - Nonstandard biology
    N/A
    250+bpm
    [scan["pulse"]]bpm
    [scan["pulse"]]bpm
    [scan["pulse"]]bpm
    [scan["pulse"]]bpm
    Patient is tachycardic.
    Patient is tachycardic.
    Patient's heart is stopped.
    Patient is bradycardic.
    Blood pressure:[scan["blood_pressure"]] " - if(scan["blood_o2"] <= 70) - dat += "([scan["blood_o2"]]% blood oxygenation)
    Blood volume:[scan["blood_volume"]]u/[scan["blood_volume_max"]]u
    Patient is in hypovolemic shock. Transfusion highly recommended.
    Body Temperature:40°C (98.6°F)
    Body temperature:[scan["temperature"]-T0C]°C ([scan["temperature"]*1.8-459.67]°F)
    Physical Trauma:severe
    Burn Severity:severe
    Systematic Organ Failure:severe
    Oxygen Deprivation:severe
    Radiation Level:acute
    Genetic Tissue Damage:severe
    Paralysis Summary:approx 0 seconds left
    Physical Trauma:\t[get_severity(scan["trauma"],TRUE)]
    Burn Severity:\t[get_severity(scan["burn"],TRUE)]
    Systematic Organ Failure:\t[get_severity(scan["toxin"],TRUE)]
    Oxygen Deprivation:\t[get_severity(scan["oxygen"],TRUE)]
    Radiation Level:\t[get_severity(scan["radiation"]/5,TRUE)]
    Genetic Tissue Damage:\t[get_severity(scan["genetic"],TRUE)]
    Paralysis Summary:approx. [scan["paralysis"]/4] seconds left
    Antibody levels and immune system performance are at 100% of baseline.
    Viral Pathogen detected in blood stream.
    Large growth detected in frontal lobe, possibly cancerous.
    Antibody levels and immune system perfomance are at [scan["immune_system"]*100]% of baseline.
    Large growth detected in frontal lobe, possibly cancerous.
    Beneficial reagents detected in subject's bloodstream:
    10u dexalin plus
    [R["quantity"]]u [R["name"]]
    Beneficial reagents detected in subject's bloodstream:
    Warning: Unknown substance detected in subject's blood.
    You see a lot of numbers and abbreviations here, but you have no clue what any of this means.
    You see a lot of numbers and abbreviations here, but you have no clue what any of it means.
    - - - - - - - */ - - dat += " - */ - if(skill_level >= SKILL_BASIC) - dat += "" - for(var/list/I in scan["internal_organs"]) - var/row = list() - var/inflamed = I["inflamed"] || FALSE - row += "" - if(I["is_broken"]) - row += "" - else if(I["is_bruised"]) - row += "" - else if(I["is_damaged"]) - row += "" - else - row += "" - row += "" - subdat += jointext(row, null) - - if(skill_level <= SKILL_ADEPT) - dat += shuffle(subdat) - else - dat += subdat - for(var/organ_name in scan["missing_organs"]) - if(organ_name != "appendix") - dat += "" - else - dat += "" - - if(scan["blind"]) - dat += "" - else if(scan["nearsight"]) - dat += "" - dat += "
    Body Status
    OrganDamageStatus
    headSevere physical trauma
    Severe burns
    Bleeding
    upper bodyNone
    right armN/AMissing
    " - dat += "" - subdat = list() - - for(var/list/E in scan["external_organs"]) - if(!E) - break - var/row = list() - row += "" - if(E["is_stump"]) - row += "" - if(skill_level >= SKILL_ADEPT) - row += "" - else - row += "" - else - row += "" - if(skill_level < SKILL_ADEPT) - if(E["brute_dam"]) - row += "Damaged
    " - if(E["burn_dam"]) - row += "Burned" - else - if(E["brute_dam"]) - row += "[capitalize(get_wound_severity(E["brute_ratio"], (E["limb_flags"] & ORGAN_FLAG_HEALS_OVERKILL)))] physical trauma
    " - if(E["burn_dam"]) - row += "[capitalize(get_wound_severity(E["burn_ratio"], (E["limb_flags"] & ORGAN_FLAG_HEALS_OVERKILL)))] burns" - if(skill_level >= SKILL_ADEPT) - row += "" - else - row += "" - row += "" - subdat += JOINTEXT(row) - dat += subdat - subdat = list() - - - //Internal Organs - /* - - - - - - - -
    Body Status
    OrganDamageStatus
    [E["name"]]Missing[english_list(E["scan_results"], nothing_text = " ")] " - if(E["brute_dam"] + E["burn_dam"] == 0) - row += "None" - row += "[english_list(E["scan_results"], nothing_text=" ")]" - row += " 
    Internal Organs
    heartNone
    lungsSevereDecaying
    No liver detected.
    No appendix detected.
    Cateracts detected.
    Retinal misalignment detected.
    -
    Internal Organs
    [I["name"]]SevereModerateMinorNone" - row += "[english_list(I["scan_results"], nothing_text=" ")]" - row += "
    No [organ_name] detected.
    No [organ_name] detected.
    Cataracts detected.
    Retinal misalignment detected.
    ") - t = replacetext_char(t, "\[/table\]", "
    ") - t = replacetext_char(t, "\[grid\]", "") - t = replacetext_char(t, "\[/grid\]", "
    ") - t = replacetext_char(t, "\[row\]", "") - t = replacetext_char(t, "\[cell\]", "") - t = replacetext_char(t, "\[logo\]", "") - t = replacetext_char(t, "\[bluelogo\]", "") - t = replacetext_char(t, "\[solcrest\]", "") - t = replacetext_char(t, "\[torchltd\]", "") - t = replacetext_char(t, "\[iccgseal\]", "") - t = replacetext_char(t, "\[ntlogo\]", "") - t = replacetext_char(t, "\[daislogo\]", "") - t = replacetext_char(t, "\[eclogo\]", "") - t = replacetext_char(t, "\[xynlogo\]", "") - t = replacetext_char(t, "\[fleetlogo\]", "") - t = replacetext_char(t, "\[armylogo\]", "") - t = replacetext_char(t, "\[sfplogo\]", "") - t = replacetext_char(t, "\[torchlogo\]", "") - t = replacetext_char(t, "\[editorbr\]", "") - return t - -//pencode translation to html for tags exclusive to digital files (currently email, nanoword, report editor fields, -//modular scanner data and txt file printing) and prints from them -/proc/digitalPencode2html(var/text) - text = replacetext_char(text, "\[pre\]", "
    ")
    -	text = replacetext_char(text, "\[/pre\]", "
    ") - text = replacetext_char(text, "\[fontred\]", "") // to pass html tag integrity unit test - text = replacetext_char(text, "\[fontblue\]", "")// to pass html tag integrity unit test - text = replacetext_char(text, "\[fontgreen\]", "") - text = replacetext_char(text, "\[/font\]", "") - text = replacetext_char(text, "\[redacted\]", "R E D A C T E D") - return pencode2html(text) - -//Will kill most formatting; not recommended. -/proc/html2pencode(t) - t = replacetext_char(t, "
    ", "\[pre\]")
    -	t = replacetext_char(t, "
    ", "\[/pre\]") - t = replacetext_char(t, "", "\[fontred\]")// to pass html tag integrity unit test - t = replacetext_char(t, "", "\[fontblue\]")// to pass html tag integrity unit test - t = replacetext_char(t, "", "\[fontgreen\]") - t = replacetext_char(t, "", "\[/font\]") - t = replacetext_char(t, "
    ", "\[br\]") - t = replacetext_char(t, "
    ", "\[br\]") - t = replacetext_char(t, "", "\[b\]") - t = replacetext_char(t, "", "\[/b\]") - t = replacetext_char(t, "", "\[i\]") - t = replacetext_char(t, "", "\[/i\]") - t = replacetext_char(t, "", "\[u\]") - t = replacetext_char(t, "", "\[/u\]") - t = replacetext_char(t, "
    ", "\[center\]") - t = replacetext_char(t, "
    ", "\[/center\]") - t = replacetext_char(t, "

    ", "\[h1\]") - t = replacetext_char(t, "

    ", "\[/h1\]") - t = replacetext_char(t, "

    ", "\[h2\]") - t = replacetext_char(t, "

    ", "\[/h2\]") - t = replacetext_char(t, "

    ", "\[h3\]") - t = replacetext_char(t, "

    ", "\[/h3\]") - t = replacetext_char(t, "
  • ", "\[*\]") - t = replacetext_char(t, "
    ", "\[hr\]") - t = replacetext_char(t, "
      ", "\[list\]") - t = replacetext_char(t, "
    ", "\[/list\]") - t = replacetext_char(t, "", "\[grid\]") - t = replacetext_char(t, "
    ", "\[/grid\]") - t = replacetext_char(t, "", "\[row\]") - t = replacetext_char(t, "", "\[cell\]") - t = replacetext_char(t, "", "\[ntlogo\]") - t = replacetext_char(t, "", "\[bluelogo\]") - t = replacetext_char(t, "", "\[solcrest\]") - t = replacetext_char(t, "", "\[iccgseal\]") - t = replacetext_char(t, "", "\[logo\]") - t = replacetext_char(t, "", "\[eclogo\]") - t = replacetext_char(t, "", "\[daislogo\]") - t = replacetext_char(t, "", "\[xynlogo\]") - t = replacetext_char(t, "", "\[sfplogo\]") - t = replacetext_char(t, "", "\[torchlogo\]") - t = replacetext_char(t, "", "\[field\]") - t = replacetext_char(t, "R E D A C T E D", "\[redacted\]") - t = strip_html_properly(t) - return t - -// Random password generator -/proc/GenerateKey() - //Feel free to move to Helpers. - var/newKey - newKey += pick("the", "if", "of", "as", "in", "a", "you", "from", "to", "an", "too", "little", "snow", "dead", "drunk", "rosebud", "duck", "al", "le") - newKey += pick("diamond", "beer", "mushroom", "assistant", "clown", "captain", "twinkie", "security", "nuke", "small", "big", "escape", "yellow", "gloves", "monkey", "engine", "nuclear", "ai") - newKey += pick("1", "2", "3", "4", "5", "6", "7", "8", "9", "0") - return newKey - -//Used for applying byonds text macros to strings that are loaded at runtime -/proc/apply_text_macros(string) - var/next_backslash = findtext(string, "\\") - if(!next_backslash) - return string - - var/leng = length(string) - - var/next_space = findtext(string, " ", next_backslash + 1) - if(!next_space) - next_space = leng - next_backslash - - if(!next_space) //trailing bs - return string - - var/base = next_backslash == 1 ? "" : copytext_char(string, 1, next_backslash) - var/macro = lowertext(copytext_char(string, next_backslash + 1, next_space)) - var/rest = next_backslash > leng ? "" : copytext_char(string, next_space + 1) - - //See http://www.byond.com/docs/ref/info.html#/DM/text/macros - switch(macro) - //prefixes/agnostic - if("the") - rest = text("\the []", rest) - if("a") - rest = text("\a []", rest) - if("an") - rest = text("\an []", rest) - if("proper") - rest = text("\proper []", rest) - if("improper") - rest = text("\improper []", rest) - if("roman") - rest = text("\roman []", rest) - //postfixes - if("th") - base = text("[]\th", rest) - if("s") - base = text("[]\s", rest) - if("he") - base = text("[]\he", rest) - if("she") - base = text("[]\she", rest) - if("his") - base = text("[]\his", rest) - if("himself") - base = text("[]\himself", rest) - if("herself") - base = text("[]\herself", rest) - if("hers") - base = text("[]\hers", rest) - - . = base - if(rest) - . += .(rest) - -/proc/deep_string_equals(var/A, var/B) - if (length(A) != length(B)) - return FALSE - for (var/i = 1 to length(A)) - if (text2ascii(A, i) != text2ascii(B, i)) - return FALSE - return TRUE - -// If char isn't part of the text the entire text is returned -/proc/copytext_after_last(var/text, var/char) - var/regex/R = regex("(\[^[char]\]*)$") - R.Find_char(text) - return R.group[1] - -/proc/sql_sanitize_text(var/text) - text = replacetext_char(text, "'", "''") - text = replacetext_char(text, ";", "") - text = replacetext_char(text, "&", "") - return text - -/proc/text2num_or_default(text, default) - var/result = text2num(text) - return "[result]" == text ? result : default - -/proc/text2regex(text) - var/end = findlasttext_char(text, "/") - if (end > 2 && length_char(text) > 2 && copytext_char(text, 1, 2) == "/") - var/flags = end == length_char(text) ? FALSE : copytext_char(text, end + 1) - var/matcher = copytext_char(text, 2, end) - try - return flags ? regex(matcher, flags) : regex(matcher) - catch() - log_error("failed to parse text to regex: [text]") - -/proc/process_chat_markup(message) - if (message && length(config.chat_markup)) - for (var/list/entry in config.chat_markup) - var/regex/matcher = entry[1] - message = replacetext_char(message, matcher, entry[2]) - return message - - -/** -* Connects either a list or variadic arguments with "/" and cleans up multiple joins. -* eg: -* join_url("a", "b", "c") => "a/b/c" -* join_url(list("a", "b", "c")) => "a/b/c" -* join_url("https://some.tld/", "/cats", "~", "//dogs") => "https://some.tld/cats/~/dogs" -*/ -/proc/join_url() - var/len = length(args) - if (!len) - return "" - var/list/parts - if (len == 1) - if (!islist(args[1])) - parts = list(args[1]) - else - parts = args[1] - else - parts = args - var/static/regex/clean1 = regex(@"\/\/+", "g") //Squash //+ to / - var/static/regex/clean2 = regex(@"^([^:]+:)\/([^\/])") //Fix "blah://" if we killed it in clean1 - parts = replacetext_char(parts.Join("/"), clean1, "/") - return replacetext_char(parts, clean2, "$1//$2") - -/// Returns direction-string, rounded to multiples of 22.5, from the first parameter to the second -/// N, NNE, NE, ENE, E, ESE, SE, SSE, S, SSW, SW, WSW, W, WNW, NW, NNW -/proc/get_compass_direction_string(turf/A, turf/B) - var/degree = Get_Angle(A, B) -/// % appears to round down floats, hence below values all being integers - switch(round(degree, 22.5) % 360) - if(0) - return "North" - if(22) - return "North-Northeast" - if(45) - return "Northeast" - if(67) - return "East-Northeast" - if(90) - return "East" - if(112) - return "East-Southeast" - if(135) - return "Southeast" - if(157) - return "South-Southeast" - if(180) - return "South" - if(202) - return "South-Southwest" - if(225) - return "Southwest" - if(247) - return "West-Southwest" - if(270) - return "West" - if(292) - return "West-Northwest" - if(315) - return "Northwest" - if(337) - return "North-Northwest" diff --git a/code/_helpers/time.dm b/code/_helpers/time.dm deleted file mode 100644 index 4d81587dc660d..0000000000000 --- a/code/_helpers/time.dm +++ /dev/null @@ -1,222 +0,0 @@ -#define SECOND *10 -#define SECONDS *10 - -#define MINUTE *600 -#define MINUTES *600 - -#define HOUR *36000 -#define HOURS *36000 - -#define DAY *864000 -#define DAYS *864000 - - -/// Real time since the server started. Same concept as REALTIMEOFDAY. -/proc/Uptime(from_zero) - var/static/days = 0 - var/static/result = 0 - var/static/started = world.timeofday - var/static/last_time = started - var/time = world.timeofday - if (time == last_time) - return result - if (time < last_time) - ++days - last_time = time - result = time + days DAYS - if (from_zero) - result -= started - return result - - -/proc/minutes_to_readable(minutes) - if (!isnum(minutes)) - minutes = text2num(minutes) - - if (minutes < 0) - return "INFINITE" - else if (isnull(minutes)) - return "BAD INPUT" - - var/hours = 0 - var/days = 0 - var/weeks = 0 - var/months = 0 - var/years = 0 - - if (minutes >= 518400) - years = round(minutes / 518400) - minutes = minutes - (years * 518400) - if (minutes >= 43200) - months = round(minutes / 43200) - minutes = minutes - (months * 43200) - if (minutes >= 10080) - weeks = round(minutes / 10080) - minutes = minutes - (weeks * 10080) - if (minutes >= 1440) - days = round(minutes / 1440) - minutes = minutes - (days * 1440) - if (minutes >= 60) - hours = round(minutes / 60) - minutes = minutes - (hours * 60) - - var/result = list() - if (years) - result += "[years] year\s" - if (months) - result += "[months] month\s" - if (weeks) - result += "[weeks] week\s" - if (days) - result += "[days] day\s" - if (hours) - result += "[hours] hour\s" - if (minutes) - result += "[minutes] minute\s" - - return jointext(result, ", ") - -/proc/seconds_to_readable(seconds) - if (!isnum(seconds)) - seconds = text2num(seconds) - - if (seconds < 0) - return "INFINITE" - else if (isnull(seconds)) - return "BAD INPUT" - - var/hours = 0 - var/minutes = 0 - - if (seconds >= 3600) - hours = round(seconds / 3600) - seconds = seconds - (hours * 3600) - if (seconds >= 60) - minutes = round(seconds / 60) - seconds = seconds - (minutes * 60) - - var/result = list() - - if (hours) - result += "[hours] hour\s" - if (minutes) - result += "[minutes] minute\s" - if (seconds) - result += "[seconds] second\s" - - return jointext(result, ", ") - -/proc/get_game_time() - var/static/time_offset = 0 - var/static/last_time = 0 - var/static/last_usage = 0 - - var/wtime = world.time - var/wusage = world.tick_usage * 0.01 - - if(last_time < wtime && last_usage > 1) - time_offset += last_usage - 1 - - last_time = wtime - last_usage = wusage - - return wtime + (time_offset + wusage) * world.tick_lag - -var/global/roundstart_hour -var/global/station_date = "" -var/global/next_station_date_change = 1 DAY - -#define duration2stationtime(time) time2text(station_time_in_ticks + time, "hh:mm") -#define worldtime2stationtime(time) time2text(roundstart_hour HOURS + time, "hh:mm") -#define round_duration_in_ticks (round_start_time ? world.time - round_start_time : 0) -#define station_time_in_ticks (roundstart_hour HOURS + round_duration_in_ticks) - -/proc/stationtime2text() - return time2text(station_time_in_ticks, "hh:mm") - -/proc/stationdate2text() - var/update_time = FALSE - if(station_time_in_ticks > next_station_date_change) - next_station_date_change += 1 DAY - update_time = TRUE - if(!station_date || update_time) - var/extra_days = round(station_time_in_ticks / (1 DAY)) DAYS - var/timeofday = world.timeofday + extra_days - station_date = "[GLOB.using_map.game_year]-[time2text(timeofday, "MM-DD")]" - return station_date - -/proc/time_stamp() - return time2text(station_time_in_ticks, "hh:mm:ss") - -/* Returns 1 if it is the selected month and day */ -/proc/isDay(var/month, var/day) - if(isnum(month) && isnum(day)) - var/MM = text2num(time2text(world.timeofday, "MM")) // get the current month - var/DD = text2num(time2text(world.timeofday, "DD")) // get the current day - if(month == MM && day == DD) - return 1 - - // Uncomment this out when debugging! - //else - //return 1 - -var/global/next_duration_update = 0 -var/global/last_round_duration = 0 -var/global/round_start_time = 0 - -/hook/roundstart/proc/start_timer() - round_start_time = world.time - return 1 - -/proc/roundduration2text() - if(!round_start_time) - return "00:00" - if(last_round_duration && world.time < next_duration_update) - return last_round_duration - - var/mills = round_duration_in_ticks // 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 = round((mills % 36000) / 600) - var/hours = round(mills / 36000) - - mins = pad_left("[mins]", 2, "0") - hours = pad_left("[hours]", 2, "0") - - last_round_duration = "[hours]:[mins]" - next_duration_update = world.time + 1 MINUTES - return last_round_duration - -/hook/startup/proc/set_roundstart_hour() - roundstart_hour = rand(0, 23) - return 1 - - -/proc/stoplag(initial_delay = world.tick_lag) - if (!Master || !(GAME_STATE & RUNLEVELS_DEFAULT)) - sleep(world.tick_lag) - return 1 - var/delta - var/total = 0 - var/delay = initial_delay / world.tick_lag - do - delta = delay * max(0.01 * max(world.tick_usage, world.cpu) * max(Master.sleep_delta, 1), 1) // Scale up delay under load; sleeps have entry overhead from proc duplication - sleep(world.tick_lag * delta) - total += Ceil(delta) - delay *= 2 - while (world.tick_usage > min(Master.tick_limit_to_run, Master.current_ticklimit)) - return total - - -/proc/acquire_days_per_month() - . = list(31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31) - if(isLeap(text2num(time2text(world.realtime, "YYYY")))) - .[2] = 29 - -/proc/get_weekday_index() - var/list/weekdays = list("Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun") - return weekdays.Find(time2text(world.timeofday, "DDD")) - -/proc/current_month_and_day() - var/time_string = time2text(world.realtime, "MM-DD") - var/time_list = splittext(time_string, "-") - return list(text2num(time_list[1]), text2num(time_list[2])) diff --git a/code/_helpers/tools.dm b/code/_helpers/tools.dm deleted file mode 100644 index c34c7d5eba92c..0000000000000 --- a/code/_helpers/tools.dm +++ /dev/null @@ -1,94 +0,0 @@ -/// True when this atom can be used as a wrench. -/atom/proc/IsWrench() - return FALSE - -/// Defines the base wrench as useable as a wrench. -/obj/item/wrench/IsWrench() - return TRUE - -/// True when A exists and can be used as a wrench. -#define isWrench(A) (A?.IsWrench()) - - -/// True when this atom can be used as a Welder. -/atom/proc/IsWelder() - return FALSE - -/// Defines the base welder as useable as a welder. -/obj/item/weldingtool/IsWelder() - return TRUE - -/// True when A exists and can be used as a welder. -#define isWelder(A) (A?.IsWelder()) - - -/// True when this atom can be used as a cable coil. -/atom/proc/IsCoil() - return FALSE - -/// Defines the base coil as useable as a cable coil. -/obj/item/stack/cable_coil/IsCoil() - return TRUE - -/// True when A exists and can be used as a cable coil. -#define isCoil(A) (A?.IsCoil()) - - -/// True when this atom can be used as a wirecutter. -/atom/proc/IsWirecutter() - return FALSE - -/// Defines the base wirecutter as useable as a wirecutter. -/obj/item/wirecutters/IsWirecutter() - return TRUE - -/// True when A exists and can be used as a wirecutter. -#define isWirecutter(A) (A?.IsWirecutter()) - - -/// True when this atom can be used as a screwdriver. -/atom/proc/IsScrewdriver() - return FALSE - -/// Defines the base screwdriver as useable as a screwdriver. -/obj/item/screwdriver/IsScrewdriver() - return TRUE - -/// True when A exists and can be used as a screwdriver. -#define isScrewdriver(A) (A?.IsScrewdriver()) - - -/// True when this atom can be used as a multitool. -/atom/proc/IsMultitool() - return FALSE - -/// Defines the base multitool as useable as a multitool. -/obj/item/device/multitool/IsMultitool() - return TRUE - -/// True when A exists and can be used as a multitool. -#define isMultitool(A) (A?.IsMultitool()) - - -/// True when this atom can be used as a crowbar. -/atom/proc/IsCrowbar() - return FALSE - -/// Defines the base crowbar as useable as a crowbar. -/obj/item/crowbar/IsCrowbar() - return TRUE - -/// True when A exists and can be used as a crowbar. -#define isCrowbar(A) (A?.IsCrowbar()) - - -/// True when this atom can be used as a hatchet. -/atom/proc/IsHatchet() - return FALSE - -/// Defines the base hatchet as useable as a hatchet. -/obj/item/material/hatchet/IsHatchet() - return TRUE - -/// True when A exists and can be used as a hatchet. -#define isHatchet(A) (A?.IsHatchet()) diff --git a/code/_helpers/turfs.dm b/code/_helpers/turfs.dm deleted file mode 100644 index eeb6d4e7274b3..0000000000000 --- a/code/_helpers/turfs.dm +++ /dev/null @@ -1,197 +0,0 @@ -// Returns the atom sitting on the turf. -// For example, using this on a disk, which is in a bag, on a mob, will return the mob because it's on the turf. -/proc/get_atom_on_turf(var/atom/movable/M) - var/atom/mloc = M - while(mloc && mloc.loc && !isturf(mloc.loc)) - mloc = mloc.loc - return mloc - -/proc/turf_clear(turf/T) - for(var/atom/A in T) - if(A.simulated) - return 0 - return 1 - -// Picks a turf without a mob from the given list of turfs, if one exists. -// If no such turf exists, picks any random turf from the given list of turfs. -/proc/pick_mobless_turf_if_exists(var/list/start_turfs) - if(!start_turfs.len) - return null - - var/list/available_turfs = list() - for(var/start_turf in start_turfs) - var/mob/M = locate() in start_turf - if(!M) - available_turfs += start_turf - if(!available_turfs.len) - available_turfs = start_turfs - return pick(available_turfs) - -/proc/get_random_turf_in_range(var/atom/origin, var/outer_range, var/inner_range) - origin = get_turf(origin) - if(!origin) - return - var/list/turfs = list() - for(var/turf/T in orange(origin, outer_range)) - if(!(T.z in GLOB.using_map.sealed_levels)) // Picking a turf outside the map edge isn't recommended - if(T.x >= world.maxx-TRANSITIONEDGE || T.x <= TRANSITIONEDGE) continue - if(T.y >= world.maxy-TRANSITIONEDGE || T.y <= TRANSITIONEDGE) continue - if(!inner_range || get_dist(origin, T) >= inner_range) - turfs += T - if(turfs.len) - return pick(turfs) - -/proc/screen_loc2turf(text, turf/origin) - if(!origin) - return null - var/tZ = splittext(text, ",") - var/tX = splittext(tZ[1], "-") - var/tY = text2num(tX[2]) - tX = splittext(tZ[2], "-") - tX = text2num(tX[2]) - tZ = origin.z - tX = max(1, min(origin.x + 7 - tX, world.maxx)) - tY = max(1, min(origin.y + 7 - tY, world.maxy)) - return locate(tX, tY, tZ) - -/* - Predicate helpers -*/ - -/proc/is_space_turf(var/turf/T) - return istype(T, /turf/space) - -/proc/is_not_space_turf(var/turf/T) - return !is_space_turf(T) - -/proc/is_open_space(turf/T) - return isopenspace(T) - -/proc/is_not_open_space(turf/T) - return !isopenspace(T) - -/proc/is_holy_turf(var/turf/T) - return T && T.holy - -/proc/is_not_holy_turf(var/turf/T) - return !is_holy_turf(T) - -/proc/turf_contains_dense_objects(var/turf/T) - return T.contains_dense_objects() - -/proc/not_turf_contains_dense_objects(var/turf/T) - return !turf_contains_dense_objects(T) - -/proc/is_station_turf(var/turf/T) - return T && isStationLevel(T.z) - -/proc/has_air(var/turf/T) - return !!T.return_air() - -/proc/IsTurfAtmosUnsafe(var/turf/T) - if (!T) - return "The spawn location doesn't seem to exist. Please contact an admin via adminhelp if this error persists." - - if(istype(T, /turf/space)) // Space tiles - return "Spawn location is open to space." - var/datum/gas_mixture/air = T.return_air() - if(!air) - return "Spawn location lacks atmosphere." - return get_atmosphere_issues(air, 1) - -/proc/IsTurfAtmosSafe(var/turf/T) - return !IsTurfAtmosUnsafe(T) - -/proc/is_below_sound_pressure(var/turf/T) - var/datum/gas_mixture/environment = T ? T.return_air() : null - var/pressure = environment ? environment.return_pressure() : 0 - if(pressure < SOUND_MINIMUM_PRESSURE) - return TRUE - return FALSE - -/* - Turf manipulation -*/ - -//Returns an assoc list that describes how turfs would be changed if the -//turfs in turfs_src were translated by shifting the src_origin to the dst_origin -/proc/get_turf_translation(turf/src_origin, turf/dst_origin, list/turfs_src) - var/list/turf_map = list() - for(var/turf/source in turfs_src) - var/x_pos = (source.x - src_origin.x) - var/y_pos = (source.y - src_origin.y) - var/z_pos = (source.z - src_origin.z) - - var/turf/target = locate(dst_origin.x + x_pos, dst_origin.y + y_pos, dst_origin.z + z_pos) - if(!target) - error("Null turf in translation @ ([dst_origin.x + x_pos], [dst_origin.y + y_pos], [dst_origin.z + z_pos])") - turf_map[source] = target //if target is null, preserve that information in the turf map - - return turf_map - - -/proc/translate_turfs(var/list/translation, var/area/base_area = null, var/turf/base_turf) - for(var/turf/source in translation) - - var/turf/target = translation[source] - - if(target) - if(base_area) - ChangeArea(target, get_area(source)) - ChangeArea(source, base_area) - transport_turf_contents(source, target) - - //change the old turfs - for(var/turf/source in translation) - source.ChangeTurf(base_turf ? base_turf : get_base_turf_by_area(source), 1, 1) - -//Transports a turf from a source turf to a target turf, moving all of the turf's contents and making the target a copy of the source. -/proc/transport_turf_contents(turf/source, turf/target) - - var/turf/new_turf = target.ChangeTurf(source.type, 1, 1) - new_turf.transport_properties_from(source) - - for(var/obj/O in source) - if(O.simulated) - O.forceMove(new_turf) - else if(istype(O,/obj/effect)) - var/obj/effect/E = O - if(E.movable_flags & MOVABLE_FLAG_EFFECTMOVE) - E.forceMove(new_turf) - - for(var/mob/M in source) - if(isEye(M)) continue // If we need to check for more mobs, I'll add a variable - M.forceMove(new_turf) - - if (GLOB.mob_spawners[source]) - var/datum/mob_spawner/source_spawner = GLOB.mob_spawners[source] - source_spawner.area = get_area(new_turf) - source_spawner.center = new_turf - GLOB.mob_spawners[new_turf] = source_spawner - - GLOB.mob_spawners[source] = null - - return new_turf - -/* - List generation helpers -*/ - -/proc/get_turfs_in_range(turf/center, range, list/predicates) - . = list() - - if (!istype(center)) - return - - for (var/turf/T in trange(range, center)) - if (!predicates || all_predicates_true(list(T), predicates)) - . += T - -/* - Pick helpers -*/ - -/proc/pick_turf_in_range(turf/center, range, list/turf_predicates) - var/list/turfs = get_turfs_in_range(center, range, turf_predicates) - if (length(turfs)) - return pick(turfs) diff --git a/code/_helpers/type2type.dm b/code/_helpers/type2type.dm deleted file mode 100644 index fbc58e9e3cf18..0000000000000 --- a/code/_helpers/type2type.dm +++ /dev/null @@ -1,197 +0,0 @@ -/* - * Holds procs designed to change one type of value, into another. - * Contains: - * text2list & list2text - * file2list - * angle2dir - * angle2text - * worldtime2text - */ - -/proc/text2numlist(text, delimiter="\n") - var/list/num_list = list() - for(var/x in splittext(text, delimiter)) - num_list += text2num(x) - return num_list - -// Splits the text of a file at seperator and returns them in a list. -/proc/file2list(filename, seperator="\n") - return splittext(file2text(filename) || "", seperator) - -// Turns a direction into text -/proc/num2dir(direction) - switch (direction) - if (1.0) return NORTH - if (2.0) return SOUTH - if (4.0) return EAST - if (8.0) return WEST - else - to_world_log("UNKNOWN DIRECTION: [direction]") - -// Turns a direction into text -/proc/dir2text(direction) - switch (direction) - if (NORTH) return "north" - if (SOUTH) return "south" - if (EAST) return "east" - if (WEST) return "west" - if (NORTHEAST) return "northeast" - if (SOUTHEAST) return "southeast" - if (NORTHWEST) return "northwest" - if (SOUTHWEST) return "southwest" - if (UP) return "up" - if (DOWN) return "down" - return "unknown ([direction])" - -// Turns text into proper directions -/proc/text2dir(direction) - switch (uppertext(direction)) - if ("NORTH") return 1 - if ("SOUTH") return 2 - if ("EAST") return 4 - if ("WEST") return 8 - if ("NORTHEAST") return 5 - if ("NORTHWEST") return 9 - if ("SOUTHEAST") return 6 - if ("SOUTHWEST") return 10 - -// Converts an angle (degrees) into an ss13 direction -/proc/angle2dir(var/degree) - degree = (degree + 22.5) % 360 // 22.5 = 45 / 2 - if (degree < 45) return NORTH - if (degree < 90) return NORTHEAST - if (degree < 135) return EAST - if (degree < 180) return SOUTHEAST - if (degree < 225) return SOUTH - if (degree < 270) return SOUTHWEST - if (degree < 315) return WEST - return NORTH|WEST - -// Returns the north-zero clockwise angle in degrees, given a direction -/proc/dir2angle(var/D) - switch (D) - if (NORTH) return 0 - if (SOUTH) return 180 - if (EAST) return 90 - if (WEST) return 270 - if (NORTHEAST) return 45 - if (SOUTHEAST) return 135 - if (NORTHWEST) return 315 - if (SOUTHWEST) return 225 - -// Returns the angle in english -/proc/angle2text(var/degree) - return dir2text(angle2dir(degree)) - -// Converts a blend_mode constant to one acceptable to icon.Blend() -/proc/blendMode2iconMode(blend_mode) - switch (blend_mode) - if (BLEND_MULTIPLY) return ICON_MULTIPLY - if (BLEND_ADD) return ICON_ADD - if (BLEND_SUBTRACT) return ICON_SUBTRACT - else return ICON_OVERLAY - -// Converts a rights bitfield into a string -/proc/rights2text(rights,seperator="") - if (rights & R_BUILDMODE) . += "[seperator]+BUILDMODE" - if (rights & R_ADMIN) . += "[seperator]+ADMIN" - if (rights & R_BAN) . += "[seperator]+BAN" - if (rights & R_FUN) . += "[seperator]+FUN" - if (rights & R_SERVER) . += "[seperator]+SERVER" - if (rights & R_DEBUG) . += "[seperator]+DEBUG" - if (rights & R_POSSESS) . += "[seperator]+POSSESS" - if (rights & R_PERMISSIONS) . += "[seperator]+PERMISSIONS" - if (rights & R_STEALTH) . += "[seperator]+STEALTH" - if (rights & R_REJUVINATE) . += "[seperator]+REJUVINATE" - if (rights & R_VAREDIT) . += "[seperator]+VAREDIT" - if (rights & R_SOUNDS) . += "[seperator]+SOUND" - if (rights & R_SPAWN) . += "[seperator]+SPAWN" - if (rights & R_MOD) . += "[seperator]+MODERATOR" - if (rights & R_XENO) . += "[seperator]+XENOMODERATOR" //INF - return . - -// heat2color functions. Adapted from: http://www.tannerhelland.com/4435/convert-temperature-rgb-algorithm-code -/proc/heat2color(temp) - return rgb(heat2color_r(temp), heat2color_g(temp), heat2color_b(temp)) - -/proc/heat2color_r(temp) - temp /= 100 - if(temp <= 66) - . = 255 - else - . = max(0, min(255, 329.698727446 * (temp - 60) ** -0.1332047592)) - -/proc/heat2color_g(temp) - temp /= 100 - if(temp <= 66) - . = max(0, min(255, 99.4708025861 * log(temp) - 161.1195681661)) - else - . = max(0, min(255, 288.1221695283 * ((temp - 60) ** -0.0755148492))) - -/proc/heat2color_b(temp) - temp /= 100 - if(temp >= 66) - . = 255 - else - if(temp <= 16) - . = 0 - else - . = max(0, min(255, 138.5177312231 * log(temp - 10) - 305.0447927307)) - -// Very ugly, BYOND doesn't support unix time and rounding errors make it really hard to convert it to BYOND time. -// returns "YYYY-MM-DD" by default -/proc/unix2date(timestamp, seperator = "-") - if(timestamp < 0) - return 0 //Do not accept negative values - - var/const/dayInSeconds = 86400 //60secs*60mins*24hours - var/const/daysInYear = 365 //Non Leap Year - var/const/daysInLYear = daysInYear + 1//Leap year - var/days = round(timestamp / dayInSeconds) //Days passed since UNIX Epoc - var/year = 1970 //Unix Epoc begins 1970-01-01 - var/tmpDays = days + 1 //If passed (timestamp < dayInSeconds), it will return 0, so add 1 - var/monthsInDays = list() //Months will be in here ***Taken from the PHP source code*** - var/month = 1 //This will be the returned MONTH NUMBER. - var/day //This will be the returned day number. - - while(tmpDays > daysInYear) //Start adding years to 1970 - year++ - if(isLeap(year)) - tmpDays -= daysInLYear - else - tmpDays -= daysInYear - - if(isLeap(year)) //The year is a leap year - monthsInDays = list(-1,30,59,90,120,151,181,212,243,273,304,334) - else - monthsInDays = list(0,31,59,90,120,151,181,212,243,273,304,334) - - var/mDays = 0; - var/monthIndex = 0; - - for(var/m in monthsInDays) - monthIndex++ - if(tmpDays > m) - mDays = m - month = monthIndex - - day = tmpDays - mDays //Setup the date - - return "[year][seperator][((month < 10) ? "0[month]" : month)][seperator][((day < 10) ? "0[day]" : day)]" - -/proc/isLeap(y) - return ((y) % 4 == 0 && ((y) % 100 != 0 || (y) % 400 == 0)) - -/proc/atomtypes2nameassoclist(var/list/atom_types) - . = list() - for(var/atom_type in atom_types) - var/atom/A = atom_type - .[initial(A.name)] = atom_type - . = sortAssoc(.) - -/proc/atomtype2nameassoclist(var/atom_type) - return atomtypes2nameassoclist(typesof(atom_type)) - -//Splits the text of a file at seperator and returns them in a list. -/world/proc/file2list(filename, seperator="\n") - return splittext(file2text(filename), seperator) diff --git a/code/_helpers/unsorted.dm b/code/_helpers/unsorted.dm deleted file mode 100644 index d6e39769fb5fa..0000000000000 --- a/code/_helpers/unsorted.dm +++ /dev/null @@ -1,1159 +0,0 @@ -/* - * A large number of misc global procs. - */ - -/proc/subtypesof(datum/thing) - if (ispath(thing)) - return typesof(thing) - thing - if (istype(thing)) - return typesof(thing) - thing.type - return list() - -//Checks if all high bits in req_mask are set in bitfield -#define BIT_TEST_ALL(bitfield, req_mask) ((~(bitfield) & (req_mask)) == 0) - -//Inverts the colour of an HTML string -/proc/invertHTML(HTMLstring) - - if (!( istext(HTMLstring) )) - CRASH("Given non-text argument!") - else - if (length(HTMLstring) != 7) - CRASH("Given non-HTML argument!") - var/textr = copytext_char(HTMLstring, 2, 4) - var/textg = copytext_char(HTMLstring, 4, 6) - var/textb = copytext_char(HTMLstring, 6, 8) - var/r = hex2num(textr) - var/g = hex2num(textg) - var/b = hex2num(textb) - textr = num2hex(255 - r) - textg = num2hex(255 - g) - textb = num2hex(255 - b) - if (length(textr) < 2) - textr = text("0[]", textr) - if (length(textg) < 2) - textr = text("0[]", textg) - if (length(textb) < 2) - textr = text("0[]", textb) - return text("#[][][]", textr, textg, textb) - -//Returns the middle-most value -/proc/dd_range(var/low, var/high, var/num) - return max(low,min(high,num)) - -//Returns whether or not A is the middle most value -/proc/InRange(var/A, var/lower, var/upper) - if(A < lower) return 0 - if(A > upper) return 0 - return 1 - - -/proc/Get_Angle(atom/movable/start,atom/movable/end)//For beams. - if(!start || !end) return 0 - var/dy - var/dx - dy=(32*end.y+end.pixel_y)-(32*start.y+start.pixel_y) - dx=(32*end.x+end.pixel_x)-(32*start.x+start.pixel_x) - if(!dy) - return (dx>=0)?90:270 - .=arctan(dx/dy) - if(dy<0) - .+=180 - else if(dx<0) - .+=360 - -//Returns location. Returns null if no location was found. -/proc/get_teleport_loc(turf/location,mob/target,distance = 1, density = FALSE, errorx = 0, errory = 0, eoffsetx = 0, eoffsety = 0) -/* -Location where the teleport begins, target that will teleport, distance to go, density checking 0/1(yes/no). -Random error in tile placement x, error in tile placement y, and block offset. -Block offset tells the proc how to place the box. Behind teleport location, relative to starting location, forward, etc. -Negative values for offset are accepted, think of it in relation to North, -x is west, -y is south. Error defaults to positive. -Turf and target are seperate in case you want to teleport some distance from a turf the target is not standing on or something. -*/ - - var/dirx = 0//Generic location finding variable. - var/diry = 0 - - var/xoffset = 0//Generic counter for offset location. - var/yoffset = 0 - - var/b1xerror = 0//Generic placing for point A in box. The lower left. - var/b1yerror = 0 - var/b2xerror = 0//Generic placing for point B in box. The upper right. - var/b2yerror = 0 - - errorx = abs(errorx)//Error should never be negative. - errory = abs(errory) - //var/errorxy = round((errorx+errory)/2)//Used for diagonal boxes. - - switch(target.dir)//This can be done through equations but switch is the simpler method. And works fast to boot. - //Directs on what values need modifying. - if(1)//North - diry+=distance - yoffset+=eoffsety - xoffset+=eoffsetx - b1xerror-=errorx - b1yerror-=errory - b2xerror+=errorx - b2yerror+=errory - if(2)//South - diry-=distance - yoffset-=eoffsety - xoffset+=eoffsetx - b1xerror-=errorx - b1yerror-=errory - b2xerror+=errorx - b2yerror+=errory - if(4)//East - dirx+=distance - yoffset+=eoffsetx//Flipped. - xoffset+=eoffsety - b1xerror-=errory//Flipped. - b1yerror-=errorx - b2xerror+=errory - b2yerror+=errorx - if(8)//West - dirx-=distance - yoffset-=eoffsetx//Flipped. - xoffset+=eoffsety - b1xerror-=errory//Flipped. - b1yerror-=errorx - b2xerror+=errory - b2yerror+=errorx - - var/turf/destination=locate(location.x+dirx,location.y+diry,location.z) - - if(destination)//If there is a destination. - if(errorx||errory)//If errorx or y were specified. - var/destination_list[] = list()//To add turfs to list. - //destination_list = new() - /*This will draw a block around the target turf, given what the error is. - Specifying the values above will basically draw a different sort of block. - If the values are the same, it will be a square. If they are different, it will be a rectengle. - In either case, it will center based on offset. Offset is position from center. - Offset always calculates in relation to direction faced. In other words, depending on the direction of the teleport, - the offset should remain positioned in relation to destination.*/ - - var/turf/center = locate((destination.x+xoffset),(destination.y+yoffset),location.z)//So now, find the new center. - - //Now to find a box from center location and make that our destination. - for(var/turf/T in block(locate(center.x+b1xerror,center.y+b1yerror,location.z), locate(center.x+b2xerror,center.y+b2yerror,location.z) )) - if(density && T.contains_dense_objects()) continue//If density was specified. - if(T.x>world.maxx || T.x<1) continue//Don't want them to teleport off the map. - if(T.y>world.maxy || T.y<1) continue - destination_list += T - if(destination_list.len) - destination = pick(destination_list) - else return - - else//Same deal here. - if(density && destination.contains_dense_objects()) return - if(destination.x>world.maxx || destination.x<1) return - if(destination.y>world.maxy || destination.y<1) return - else return - - return destination - - - -/proc/LinkBlocked(turf/A, turf/B) - if(A == null || B == null) return 1 - var/adir = get_dir(A,B) - var/rdir = get_dir(B,A) - if((adir & (NORTH|SOUTH)) && (adir & (EAST|WEST))) // diagonal - var/iStep = get_step(A,adir&(NORTH|SOUTH)) - if(!LinkBlocked(A,iStep) && !LinkBlocked(iStep,B)) return 0 - - var/pStep = get_step(A,adir&(EAST|WEST)) - if(!LinkBlocked(A,pStep) && !LinkBlocked(pStep,B)) return 0 - return 1 - - if(DirBlocked(A,adir)) return 1 - if(DirBlocked(B,rdir)) return 1 - return 0 - - -/proc/DirBlocked(turf/loc,var/dir) - for(var/obj/structure/window/D in loc) - if(!D.density) continue - if(D.dir == SOUTHWEST) return 1 - if(D.dir == dir) return 1 - - for(var/obj/machinery/door/D in loc) - if(!D.density) continue - if(istype(D, /obj/machinery/door/window)) - if((dir & SOUTH) && (D.dir & (EAST|WEST))) return 1 - if((dir & EAST ) && (D.dir & (NORTH|SOUTH))) return 1 - else return 1 // it's a real, air blocking door - return 0 - -/proc/TurfBlockedNonWindow(turf/loc) - for(var/obj/O in loc) - if(O.density && !istype(O, /obj/structure/window)) - return 1 - return 0 - -/proc/sign(x) - return x!=0?x/abs(x):0 - -/proc/getline(atom/M,atom/N)//Ultra-Fast Bresenham Line-Drawing Algorithm - var/px=M.x //starting x - var/py=M.y - var/line[] = list(locate(px,py,M.z)) - var/dx=N.x-px //x distance - var/dy=N.y-py - var/dxabs=abs(dx)//Absolute value of x distance - var/dyabs=abs(dy) - var/sdx=sign(dx) //Sign of x distance (+ or -) - var/sdy=sign(dy) - var/x=SHIFTR(dxabs, 1) //Counters for steps taken, setting to distance/2 - var/y=SHIFTR(dyabs, 1) //Bit-shifting makes me l33t. It also makes getline() unnessecarrily fast. - var/j //Generic integer for counting - if(dxabs>=dyabs) //x distance is greater than y - for(j=0;j=dxabs) //Every dyabs steps, step once in y direction - y-=dxabs - py+=sdy - px+=sdx //Step on in x direction - line+=locate(px,py,M.z)//Add the turf to the list - else - for(j=0;j=dyabs) - x-=dyabs - px+=sdx - py+=sdy - line+=locate(px,py,M.z) - return line - -#define LOCATE_COORDS(X, Y, Z) locate(clamp(X, 1, world.maxx), clamp(Y, 1, world.maxy), Z) -/proc/getcircle(turf/center, var/radius) //Uses a fast Bresenham rasterization algorithm to return the turfs in a thin circle. - if(!radius) return list(center) - - var/x = 0 - var/y = radius - var/p = 3 - 2 * radius - - . = list() - while(y >= x) // only formulate 1/8 of circle - - . += LOCATE_COORDS(center.x - x, center.y - y, center.z) //upper left left - . += LOCATE_COORDS(center.x - y, center.y - x, center.z) //upper upper left - . += LOCATE_COORDS(center.x + y, center.y - x, center.z) //upper upper right - . += LOCATE_COORDS(center.x + x, center.y - y, center.z) //upper right right - . += LOCATE_COORDS(center.x - x, center.y + y, center.z) //lower left left - . += LOCATE_COORDS(center.x - y, center.y + x, center.z) //lower lower left - . += LOCATE_COORDS(center.x + y, center.y + x, center.z) //lower lower right - . += LOCATE_COORDS(center.x + x, center.y + y, center.z) //lower right right - - if(p < 0) - p += 4*x++ + 6; - else - p += 4*(x++ - y--) + 10; - -#undef LOCATE_COORDS - -//Returns whether or not a player is a guest using their ckey as an input -/proc/IsGuestKey(key) - if (findtext(key, "Guest-", 1, 7) != 1) //was findtextEx - return 0 - - var/i = 7, ch, len = length(key) - - if(copytext_char(key, 7, 8) == "W") //webclient - i++ - - for (, i <= len, ++i) - ch = text2ascii(key, i) - if (ch < 48 || ch > 57) - return 0 - return 1 - -//Ensure the frequency is within bounds of what it should be sending/recieving at -/proc/sanitize_frequency(var/f, var/low = PUBLIC_LOW_FREQ, var/high = PUBLIC_HIGH_FREQ) - f = round(f) - f = max(low, f) - f = min(high, f) - if ((f % 2) == 0) //Ensure the last digit is an odd number - f += 1 - return f - -//Turns 1479 into 147.9 -/proc/format_frequency(var/f) - return "[round(f / 10)].[f % 10]" - -//Generalised helper proc for letting mobs rename themselves. Used to be clname() and ainame() -//Last modified by Carn -/mob/proc/rename_self(var/role, var/allow_numbers=0) - spawn(0) - var/oldname = real_name - - var/time_passed = world.time - var/newname - - for(var/i=1,i<=3,i++) //we get 3 attempts to pick a suitable name. - newname = input(src,"You are \a [role]. Would you like to change your name to something else?", "Name change",oldname) as text - if((world.time-time_passed)>3000) - return //took too long - newname = sanitizeName(newname, ,allow_numbers) //returns null if the name doesn't meet some basic requirements. Tidies up a few other things like bad-characters. - - for(var/mob/living/M in GLOB.player_list) - if(M == src) - continue - if(!newname || M.real_name == newname) - newname = null - break - if(newname) - break //That's a suitable name! - to_chat(src, "Sorry, that [role]-name wasn't appropriate, please try another. It's possibly too long/short, has bad characters or is already taken.") - - if(!newname) //we'll stick with the oldname then - return - - fully_replace_character_name(newname) - -//Picks a string of symbols to display as the law number for hacked or ion laws -/proc/ionnum() - return "[pick("1","2","3","4","5","6","7","8","9","0")][pick("!","@","#","$","%","^","&","*")][pick("!","@","#","$","%","^","&","*")][pick("!","@","#","$","%","^","&","*")]" - -//When an AI is activated, it can choose from a list of non-slaved borgs to have as a slave. -/proc/freeborg(z) - var/list/zs = get_valid_silicon_zs(z) - - var/select = null - var/list/borgs = list() - for (var/mob/living/silicon/robot/A in GLOB.player_list) - if (A.stat == 2 || A.connected_ai || A.scrambledcodes || istype(A,/mob/living/silicon/robot/drone) || !(get_z(A) in zs)) - continue - var/name = "[A.real_name] ([A.modtype] [A.braintype])" - borgs[name] = A - - if (borgs.len) - select = input("Unshackled borg signals detected:", "Borg selection", null, null) as null|anything in borgs - return borgs[select] - -//When a borg is activated, it can choose which AI it wants to be slaved to -/proc/active_ais(z) - var/list/zs = get_valid_silicon_zs(z) - - . = list() - for(var/mob/living/silicon/ai/A in GLOB.living_mob_list_) - if(A.stat == DEAD || A.control_disabled || !(get_z(A) in zs)) - continue - . += A - return . - -//Find an active ai with the least borgs. VERBOSE PROCNAME HUH! -/proc/select_active_ai_with_fewest_borgs(z) - var/mob/living/silicon/ai/selected - var/list/active = active_ais(z) - for(var/mob/living/silicon/ai/A in active) - if(!selected || (selected.connected_robots.len > A.connected_robots.len)) - selected = A - - return selected - -/proc/select_active_ai(mob/user, z) - var/list/ais = active_ais(z) - if(ais.len) - if(user?.client) - . = input(user,"AI signals detected:", "AI selection") in ais - else - . = pick(ais) - -/proc/get_valid_silicon_zs(z) - if(z) - return GetConnectedZlevels(z) - return list() //We return an empty list, because we are apparently in nullspace - -/proc/get_sorted_mobs() - var/list/old_list = getmobs() - var/list/AI_list = list() - var/list/Dead_list = list() - var/list/keyclient_list = list() - var/list/key_list = list() - var/list/logged_list = list() - for(var/named in old_list) - var/mob/M = old_list[named] - if(issilicon(M)) - AI_list |= M - else if(isghost(M) || M.stat == DEAD) - Dead_list |= M - else if(M.key && M.client) - keyclient_list |= M - else if(M.key) - key_list |= M - else - logged_list |= M - old_list.Remove(named) - var/list/new_list = list() - new_list += AI_list - new_list += keyclient_list - new_list += key_list - new_list += logged_list - new_list += Dead_list - return new_list - -//Returns a list of all mobs with their name -/proc/getmobs() - - var/list/mobs = sortmobs() - var/list/names = list() - var/list/creatures = list() - var/list/namecounts = list() - for(var/mob/M in mobs) - var/name = M.name - if (name in names) - namecounts[name]++ - name = "[name] ([namecounts[name]])" - else - names.Add(name) - namecounts[name] = 1 - if (M.real_name && M.real_name != M.name) - name += " \[[M.real_name]\]" - if (M.stat == DEAD) - if(isobserver(M)) - name += " \[observer\]" - else - name += " \[dead\]" - creatures[name] = M - - return creatures - -/proc/get_follow_targets() - return follow_repository.get_follow_targets() - -//Orders mobs by type then by name -/proc/sortmobs() - var/list/moblist = list() - var/list/sortmob = sortAtom(SSmobs.mob_list) - for(var/mob/observer/eye/M in sortmob) - moblist.Add(M) - for(var/mob/living/silicon/ai/M in sortmob) - moblist.Add(M) - for(var/mob/living/silicon/pai/M in sortmob) - moblist.Add(M) - for(var/mob/living/silicon/robot/M in sortmob) - moblist.Add(M) - for(var/mob/living/carbon/human/M in sortmob) - moblist.Add(M) - for(var/mob/living/carbon/brain/M in sortmob) - moblist.Add(M) - for(var/mob/living/carbon/alien/M in sortmob) - moblist.Add(M) - for(var/mob/observer/ghost/M in sortmob) - moblist.Add(M) - for(var/mob/new_player/M in sortmob) - moblist.Add(M) - for(var/mob/living/carbon/slime/M in sortmob) - moblist.Add(M) - for(var/mob/living/simple_animal/M in sortmob) - moblist.Add(M) -// for(var/mob/living/silicon/hivebot/M in world) -// mob_list.Add(M) -// for(var/mob/living/silicon/hive_mainframe/M in world) -// mob_list.Add(M) - return moblist - -//Forces a variable to be posative -/proc/modulus(var/M) - if(M >= 0) - return M - if(M < 0) - return -M - -// returns the turf located at the map edge in the specified direction relative to A -// used for mass driver -/proc/get_edge_target_turf(var/atom/A, var/direction) - - var/turf/target = locate(A.x, A.y, A.z) - if(!A || !target) - return 0 - //since NORTHEAST == NORTH & EAST, etc, doing it this way allows for diagonal mass drivers in the future - //and isn't really any more complicated - - // Note diagonal directions won't usually be accurate - if(direction & NORTH) - target = locate(target.x, world.maxy, target.z) - if(direction & SOUTH) - target = locate(target.x, 1, target.z) - if(direction & EAST) - target = locate(world.maxx, target.y, target.z) - if(direction & WEST) - target = locate(1, target.y, target.z) - - return target - -// returns turf relative to A in given direction at set range -// result is bounded to map size -// note range is non-pythagorean -// used for disposal system -/proc/get_ranged_target_turf(var/atom/A, var/direction, var/range) - - var/x = A.x - var/y = A.y - if(direction & NORTH) - y = min(world.maxy, y + range) - if(direction & SOUTH) - y = max(1, y - range) - if(direction & EAST) - x = min(world.maxx, x + range) - if(direction & WEST) - x = max(1, x - range) - - return locate(x,y,A.z) - - -// returns turf relative to A offset in dx and dy tiles -// bound to map limits -/proc/get_offset_target_turf(var/atom/A, var/dx, var/dy) - var/x = min(world.maxx, max(1, A.x + dx)) - var/y = min(world.maxy, max(1, A.y + dy)) - return locate(x,y,A.z) - - -//returns random gauss number -/proc/GaussRand(var/sigma) - var/x,y,rsq - do - x=2*rand()-1 - y=2*rand()-1 - rsq=x*x+y*y - while(rsq>1 || !rsq) - return sigma*y*sqrt(-2*log(rsq)/rsq) - -//returns random gauss number, rounded to 'roundto' -/proc/GaussRandRound(var/sigma,var/roundto) - return round(GaussRand(sigma),roundto) - -//Will return the contents of an atom recursivly to a depth of 'searchDepth' -/atom/proc/GetAllContents(searchDepth = 5) - var/list/toReturn = list() - - for(var/atom/part in contents) - toReturn += part - if(part.contents.len && searchDepth) - toReturn += part.GetAllContents(searchDepth - 1) - - return toReturn - -//Step-towards method of determining whether one atom can see another. Similar to viewers() -/proc/can_see(var/atom/source, var/atom/target, var/length=5) // I couldn't be arsed to do actual raycasting :I This is horribly inaccurate. - var/turf/current = get_turf(source) - var/turf/target_turf = get_turf(target) - var/steps = 0 - - if(!current || !target_turf) - return 0 - - while(current != target_turf) - if(steps > length) return 0 - if(current.opacity) return 0 - for(var/atom/A in current) - if(A.opacity) return 0 - current = get_step_towards(current, target_turf) - steps++ - - return 1 - -/proc/is_blocked_turf(var/turf/T) - var/cant_pass = 0 - if(T.density) cant_pass = 1 - for(var/atom/A in T) - if(A.density)//&&A.anchored - cant_pass = 1 - return cant_pass - -/proc/get_step_towards2(var/atom/ref , var/atom/trg) - var/base_dir = get_dir(ref, get_step_towards(ref,trg)) - var/turf/temp = get_step_towards(ref,trg) - - if(is_blocked_turf(temp)) - var/dir_alt1 = turn(base_dir, 90) - var/dir_alt2 = turn(base_dir, -90) - var/turf/turf_last1 = temp - var/turf/turf_last2 = temp - var/free_tile = null - var/breakpoint = 0 - - while(!free_tile && breakpoint < 10) - if(!is_blocked_turf(turf_last1)) - free_tile = turf_last1 - break - if(!is_blocked_turf(turf_last2)) - free_tile = turf_last2 - break - turf_last1 = get_step(turf_last1,dir_alt1) - turf_last2 = get_step(turf_last2,dir_alt2) - breakpoint++ - - if(!free_tile) return get_step(ref, base_dir) - else return get_step_towards(ref,free_tile) - - else return get_step(ref, base_dir) - -//Takes: Anything that could possibly have variables and a varname to check. -//Returns: 1 if found, 0 if not. -/proc/hasvar(var/datum/A, var/varname) - return A.vars.Find(varname) != 0 - -//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. -/proc/get_areas(var/areatype) - if(!areatype) return null - if(istext(areatype)) areatype = text2path(areatype) - if(isarea(areatype)) - var/area/areatemp = areatype - areatype = areatemp.type - - var/list/areas = new/list() - for(var/area/N in world) - if(istype(N, areatype)) areas += N - return areas - -//Takes: Area type as a typepath OR an instance of the area. -//Returns: A list of all atoms (objs, turfs, mobs) in areas of that type of that type in the world. -/proc/get_area_all_atoms(var/areatype) - if(!areatype) - return null - if(isarea(areatype)) - var/area/areatemp = areatype - areatype = areatemp.type - if(!ispath(areatype, /area)) - return null - - var/list/atoms = new/list() - for(var/area/N in world) - if(istype(N, areatype)) - for(var/atom/A in N) - atoms += A - return atoms - -/area/proc/move_contents_to(var/area/A) - //Takes: Area. - //Returns: Nothing. - //Notes: Attempts to move the contents of one area to another area. - // Movement based on lower left corner. - - if(!A || !src) return - - var/list/turfs_src = get_area_turfs("\ref[src]") - - if(!turfs_src.len) return - - //figure out a suitable origin - this assumes the shuttle areas are the exact same size and shape - //might be worth doing this with a shuttle core object instead of areas, in the future - var/src_origin = locate(src.x, src.y, src.z) - var/trg_origin = locate(A.x, A.y, A.z) - - if(src_origin && trg_origin) - var/translation = get_turf_translation(src_origin, trg_origin, turfs_src) - translate_turfs(translation, null) - -/proc/DuplicateObject(obj/original, var/perfectcopy = 0 , var/sameloc = 0) - if(!original) - return null - - var/obj/O = null - - if(sameloc) - O=new original.type(original.loc) - else - O=new original.type(locate(0,0,0)) - - if(perfectcopy) - if((O) && (original)) - for(var/V in original.vars) - if(!(V in list("type","loc","locs","vars", "parent", "parent_type","verbs","ckey","key", "group", "ai_holder", "natural_weapon"))) - O.vars[V] = original.vars[V] - return O - - - -/datum/coords //Simple datum for storing coordinates. - var/x_pos = null - var/y_pos = null - var/z_pos = null - -/** - * Attempts to move the contents, including turfs, of one area to another area. - * Positioning is based on the lower left corner of both areas. - * Tiles that do not fit into the new area will not be copied. - * Source atoms are not modified or deleted. - * Turfs are created using `ChangeTurf()`. - * `dir`, `icon`, and `icon_state` are copied. All other vars use the default value for the copied atom. - * Primarily used for holodecks. - * - * **Parameters**: - * - `A` `/area`. The area to copy src's contents to. - * - `platingRequired` Boolean, default `FALSE`. If set, contents will only be copied to destination tiles that are not the same type as `get_base_area_by_turf()` before calling `ChangeTurf()`. - * - * Returns List (`/atom`). A list containing all atoms that were created at the target area during the process. - */ -/area/proc/copy_contents_to(var/area/A , var/platingRequired = 0 ) - if(!A || !src) return 0 - - var/list/turfs_src = get_area_turfs(src.type) - var/list/turfs_trg = get_area_turfs(A.type) - - var/src_min_x = 0 - var/src_min_y = 0 - for (var/turf/T in turfs_src) - if(T.x < src_min_x || !src_min_x) src_min_x = T.x - if(T.y < src_min_y || !src_min_y) src_min_y = T.y - - var/trg_min_x = 0 - var/trg_min_y = 0 - for (var/turf/T in turfs_trg) - if(T.x < trg_min_x || !trg_min_x) trg_min_x = T.x - if(T.y < trg_min_y || !trg_min_y) trg_min_y = T.y - - var/list/refined_src = new/list() - for(var/turf/T in turfs_src) - refined_src += T - refined_src[T] = new/datum/coords - var/datum/coords/C = refined_src[T] - C.x_pos = (T.x - src_min_x) - C.y_pos = (T.y - src_min_y) - - var/list/refined_trg = new/list() - for(var/turf/T in turfs_trg) - refined_trg += T - refined_trg[T] = new/datum/coords - var/datum/coords/C = refined_trg[T] - C.x_pos = (T.x - trg_min_x) - C.y_pos = (T.y - trg_min_y) - - var/list/toupdate = new/list() - - var/copiedobjs = list() - - - moving: - for (var/turf/T in refined_src) - var/datum/coords/C_src = refined_src[T] - for (var/turf/B in refined_trg) - var/datum/coords/C_trg = refined_trg[B] - if(C_src.x_pos == C_trg.x_pos && C_src.y_pos == C_trg.y_pos) - - var/old_dir1 = T.dir - var/old_icon_state1 = T.icon_state - var/old_icon1 = T.icon - var/old_overlays = T.overlays.Copy() - var/old_underlays = T.underlays.Copy() - - if(platingRequired) - if(istype(B, get_base_turf_by_area(B))) - continue moving - - var/turf/X = B - X.ChangeTurf(T.type) - X.set_dir(old_dir1) - X.icon_state = old_icon_state1 - X.icon = old_icon1 //Shuttle floors are in shuttle.dmi while the defaults are floors.dmi - X.overlays = old_overlays - X.underlays = old_underlays - - var/list/objs = new/list() - var/list/newobjs = new/list() - var/list/mobs = new/list() - var/list/newmobs = new/list() - - for(var/obj/O in T) - - if(!istype(O,/obj) || !O.simulated) - continue - - objs += O - - - for(var/obj/O in objs) - newobjs += DuplicateObject(O , 1) - - - for(var/obj/O in newobjs) - O.forceMove(X) - - for(var/mob/M in T) - - if(!istype(M,/mob) || !M.simulated) continue // If we need to check for more mobs, I'll add a variable - mobs += M - - for(var/mob/M in mobs) - newmobs += DuplicateObject(M , 1) - - for(var/mob/M in newmobs) - M.forceMove(X) - - copiedobjs += newobjs - copiedobjs += newmobs - -// var/area/AR = X.loc - -// if(AR.dynamic_lighting) -// X.opacity = !X.opacity -// X.sd_SetOpacity(!X.opacity) //TODO: rewrite this code so it's not messed by lighting ~Carn - - toupdate += X - - refined_src -= T - refined_trg -= B - continue moving - - - - - if(toupdate.len) - for(var/turf/simulated/T1 in toupdate) - SSair.mark_for_update(T1) - - return copiedobjs - - - -/proc/get_cardinal_dir(atom/A, atom/B) - var/dx = abs(B.x - A.x) - var/dy = abs(B.y - A.y) - return get_dir(A, B) & (rand() * (dx+dy) < dy ? 3 : 12) - -//chances are 1:value. anyprob(1) will always return true -/proc/anyprob(value) - return (rand(1,value)==value) - -/proc/view_or_range(distance = world.view , center = usr , type) - switch(type) - if("view") - . = view(distance,center) - if("range") - . = range(distance,center) - return - -/proc/oview_or_orange(distance = world.view , center = usr , type) - switch(type) - if("view") - . = oview(distance,center) - if("range") - . = orange(distance,center) - return - -/proc/get_mob_with_client_list() - var/list/mobs = list() - for(var/mob/M in SSmobs.mob_list) - if (M.client) - mobs += M - return mobs - - -/proc/parse_zone(zone) - if(zone == BP_R_HAND) return "right hand" - else if (zone == BP_L_HAND) return "left hand" - else if (zone == BP_L_ARM) return "left arm" - else if (zone == BP_R_ARM) return "right arm" - else if (zone == BP_L_LEG) return "left leg" - else if (zone == BP_R_LEG) return "right leg" - else if (zone == BP_L_FOOT) return "left foot" - else if (zone == BP_R_FOOT) return "right foot" - else if (zone == BP_L_HAND) return "left hand" - else if (zone == BP_R_HAND) return "right hand" - else if (zone == BP_L_FOOT) return "left foot" - else if (zone == BP_R_FOOT) return "right foot" - else return zone - -/proc/get(atom/loc, type) - while(loc) - if(istype(loc, type)) - return loc - loc = loc.loc - return null - -/proc/get_turf_or_move(turf/location) - return get_turf(location) - - -/obj/item/proc/istool() - return FALSE - - -/obj/item/stack/cable_coil/istool() - return TRUE - - -/obj/item/wrench/istool() - return TRUE - - -/obj/item/weldingtool/istool() - return TRUE - - -/obj/item/screwdriver/istool() - return TRUE - - -/obj/item/wirecutters/istool() - return TRUE - - -/obj/item/device/multitool/istool() - return TRUE - - -/obj/item/crowbar/istool() - return TRUE - - -/proc/is_hot(obj/item/W as obj) - switch(W.type) - if(/obj/item/weldingtool) - var/obj/item/weldingtool/WT = W - if(WT.isOn()) - return 3800 - else - return 0 - if(/obj/item/flame/lighter) - if(W:lit) - return 1500 - else - return 0 - if(/obj/item/flame/match) - if(W:lit) - return 1000 - else - return 0 - if(/obj/item/clothing/mask/smokable/cigarette) - if(W:lit) - return 1000 - else - return 0 - if(/obj/item/gun/energy/plasmacutter) - return 3800 - if(/obj/item/melee/energy) - return 3500 - if(/obj/item/blob_tendril) - if (W.damtype == DAMAGE_BURN) - return 1000 - else - return 0 - else - return 0 - -//Whether or not the given item counts as sharp in terms of dealing damage -/proc/is_sharp(obj/O as obj) - if (!O) return 0 - if (O.sharp) return 1 - if (O.edge) return 1 - return 0 - -//Whether or not the given item counts as cutting with an edge in terms of removing limbs -/proc/has_edge(obj/O as obj) - if (!O) return 0 - if (O.edge) return 1 - return 0 - - -//For items that can puncture e.g. thick plastic but aren't necessarily sharp -//Returns 1 if the given item is capable of popping things like balloons, inflatable barriers, or cutting police tape. -/obj/item/proc/can_puncture() - return src.sharp - -/obj/item/screwdriver/can_puncture() - return 1 - -/obj/item/pen/can_puncture() - return 1 - -/obj/item/weldingtool/can_puncture() - return 1 - -/obj/item/screwdriver/can_puncture() - return 1 - -/obj/item/shovel/can_puncture() //includes spades - return 1 - -/obj/item/flame/can_puncture() - return src.lit - -/obj/item/clothing/mask/smokable/cigarette/can_puncture() - return src.lit - -//check if mob is lying down on something we can operate him on. -/proc/can_operate(mob/living/carbon/M, mob/living/carbon/user) - var/turf/T = get_turf(M) - if(locate(/obj/machinery/optable, T)) - . = TRUE - if(locate(/obj/structure/bed, T)) - . = TRUE - if(locate(/obj/structure/table, T)) - . = TRUE - if(locate(/obj/effect/rune, T)) - . = TRUE - - if(M == user) - var/hitzone = check_zone(user.zone_sel.selecting) - var/list/badzones = list(BP_HEAD) - if(user.hand) - badzones += BP_L_ARM - badzones += BP_L_HAND - else - badzones += BP_R_ARM - badzones += BP_R_HAND - if(hitzone in badzones) - return FALSE - -/proc/reverse_direction(var/dir) - switch(dir) - if(NORTH) - return SOUTH - if(NORTHEAST) - return SOUTHWEST - if(EAST) - return WEST - if(SOUTHEAST) - return NORTHWEST - if(SOUTH) - return NORTH - if(SOUTHWEST) - return NORTHEAST - if(WEST) - return EAST - if(NORTHWEST) - return SOUTHEAST - -/* -Checks if that loc and dir has a item on the wall -*/ -var/global/list/WALLITEMS = list( - /obj/machinery/power/apc, /obj/machinery/alarm, /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, - /obj/machinery/newscaster, /obj/machinery/firealarm, /obj/structure/noticeboard, - /obj/item/storage/secure/safe, /obj/machinery/door_timer, /obj/machinery/flasher, /obj/machinery/keycard_auth, - /obj/item/storage/mirror, /obj/structure/fireaxecabinet, /obj/structure/filingcabinet/wallcabinet - ) -/proc/gotwallitem(loc, dir) - for(var/obj/O in loc) - for(var/item in WALLITEMS) - if(istype(O, item)) - //Direction works sometimes - if(O.dir == dir) - return 1 - - //Some stuff doesn't use dir properly, so we need to check pixel instead - switch(dir) - if(SOUTH) - if(O.pixel_y > 10) - return 1 - if(NORTH) - if(O.pixel_y < -10) - return 1 - if(WEST) - if(O.pixel_x > 10) - return 1 - if(EAST) - if(O.pixel_x < -10) - return 1 - - - //Some stuff is placed directly on the wallturf (signs) - for(var/obj/O in get_step(loc, dir)) - for(var/item in WALLITEMS) - if(istype(O, item)) - if(O.pixel_x == 0 && O.pixel_y == 0) - return 1 - return 0 - -/proc/format_text(text) - return replacetext_char(replacetext_char(text,"\proper ",""),"\improper ","") - -/proc/topic_link(var/datum/D, var/arglist, var/content) - if(istype(arglist,/list)) - arglist = list2params(arglist) - return "[content]" - -/proc/get_random_colour(var/simple = FALSE, var/lower = 0, var/upper = 255) - var/colour - if(simple) - colour = pick(list("FF0000","FF7F00","FFFF00","00FF00","0000FF","4B0082","8F00FF")) - else - for(var/i=1;i<=3;i++) - var/temp_col = "[num2hex(rand(lower,upper))]" - if(length(temp_col )<2) - temp_col = "0[temp_col]" - colour += temp_col - return "#[colour]" - -GLOBAL_DATUM_INIT(dview_mob, /mob/dview, new) - -//Version of view() which ignores darkness, because BYOND doesn't have it. -/proc/dview(var/range = world.view, var/center, var/invis_flags = 0) - if(!center) - return - - GLOB.dview_mob.loc = center - GLOB.dview_mob.see_invisible = invis_flags - . = view(range, GLOB.dview_mob) - GLOB.dview_mob.loc = null - -/mob/dview - invisibility = 101 - density = FALSE - - anchored = TRUE - simulated = FALSE - - see_in_dark = 1e6 - - virtual_mob = null - -/mob/dview/Destroy(forced) - if(forced) - GLOB.dview_mob = new/mob/dview() - return ..() - crash_with("Prevented attempt to delete dview mob: [log_info_line(src)]") - return QDEL_HINT_LETMELIVE // Prevents destruction - -/atom/proc/get_light_and_color(var/atom/origin) - if(origin) - color = origin.color - set_light(origin.light_max_bright, origin.light_inner_range, origin.light_outer_range, origin.light_falloff_curve) - - -// call to generate a stack trace and print to runtime logs -/proc/crash_at(msg, file, line) - CRASH("%% [file],[line] %% [msg]") - - -//clicking to move pulled objects onto assignee's turf/loc -/proc/do_pull_click(mob/user, atom/A) - if(ismob(user.pulling)) - var/mob/M = user.pulling - var/atom/movable/t = M.pulling - M.stop_pulling() - step(user.pulling, get_dir(user.pulling.loc, A)) - M.start_pulling(t) - else - step(user.pulling, get_dir(user.pulling.loc, A)) - -/proc/select_subpath(given_path, within_scope = /atom) - var/desired_path = input("Enter full or partial typepath.","Typepath","[given_path]") as text|null - if(!desired_path) - return - - var/list/types = typesof(within_scope) - var/list/matches = list() - - for(var/path in types) - if(findtext("[path]", desired_path)) - matches += path - - if(!matches.len) - alert("No results found. Sorry.") - return - - if(matches.len==1) - return matches[1] - else - return (input("Select a type", "Select Type", matches[1]) as null|anything in matches) diff --git a/code/_helpers/vector.dm b/code/_helpers/vector.dm deleted file mode 100644 index 3a647e3ab20dd..0000000000000 --- a/code/_helpers/vector.dm +++ /dev/null @@ -1,135 +0,0 @@ -/* -plot_vector is a helper datum for plotting a path in a straight line towards a target turf. -This datum converts from world space (turf.x and turf.y) to pixel space, which the datum keeps track of itself. This -should work with any size turfs (i.e. 32x32, 64x64) as it references world.icon_size (note: not actually tested with -anything other than 32x32 turfs). - -setup() - This should be called after creating a new instance of a plot_vector datum. - This does the initial setup and calculations. Since we are travelling in a straight line we only need to calculate - the vector and x/y steps once. x/y steps are capped to 1 full turf, whichever is further. If we are travelling along - the y axis each step will be +/- 1 y, and the x movement reduced based on the angle (tangent calculation). After - this every subsequent step will be incremented based on these calculations. - Inputs: - source - the turf the object is starting from - target - the target turf the object is travelling towards - xo - starting pixel_x offset, typically won't be needed, but included in case someone has a need for it later - yo - same as xo, but for the y_pixel offset - -increment() - Adds the offset to the current location - incrementing it by one step along the vector. - -return_angle() - Returns the direction (angle in degrees) the object is travelling in. - * North = 90 - * East = 0 - * South = -90 - * West = 180 - -return_hypotenuse() - Returns the distance of travel for each step of the vector, relative to each full step of movement. 1 is a full turf - length. Currently used as a multiplier for scaling effects that should be contiguous, like laser beams. - -return_location() - Returns a vector_loc datum containing the current location data of the object (see /datum/vector_loc). This includes - the turf it currently should be at, as well as the pixel offset from the centre of that turf. Typically increment() - would be called before this if you are going to move an object based on it's vector data. -*/ - -/datum/plot_vector - var/turf/source - var/turf/target - var/angle = 0 // direction of travel in degrees - var/loc_x = 0 // in pixels from the left edge of the map - var/loc_y = 0 // in pixels from the bottom edge of the map - var/loc_z = 0 // loc z is in world space coordinates (i.e. z level) - we don't care about measuring pixels for this - var/offset_x = 0 // distance to increment each step - var/offset_y = 0 - -/datum/plot_vector/proc/setup(var/turf/S, var/turf/T, var/xo = 0, var/yo = 0, var/angle_offset=0) - source = S - target = T - - if(!istype(source)) - source = get_turf(source) - if(!istype(target)) - target = get_turf(target) - - if(!istype(source) || !istype(target)) - return - - // convert coordinates to pixel space (default is 32px/turf, 8160px across for a size 255 map) - loc_x = source.x * world.icon_size + xo - loc_y = source.y * world.icon_size + yo - loc_z = source.z - - // calculate initial x and y difference - var/dx = target.x - source.x - var/dy = target.y - source.y - - // if we aren't moving anywhere; quit now - if(dx == 0 && dy == 0) - return - - // calculate the angle - angle = Atan2(dx, dy) + angle_offset - - // and some rounding to stop the increments jumping whole turfs - because byond favours certain angles - if(angle > -135 && angle < 45) - angle = Ceil(angle) - else - angle = Floor(angle) - - // calculate the offset per increment step - if(abs(angle) in list(0, 45, 90, 135, 180)) // check if the angle is a cardinal - if(abs(angle) in list(0, 45, 135, 180)) // if so we can skip the trigonometry and set these to absolutes as - offset_x = sign(dx) // they will always be a full step in one or more directions - if(abs(angle) in list(45, 90, 135)) - offset_y = sign(dy) - else if(abs(dy) > abs(dx)) - offset_x = Cot(abs(angle)) // otherwise set the offsets - offset_y = sign(dy) - else - offset_x = sign(dx) - offset_y = tan(angle) - if(dx < 0) - offset_y = -offset_y - - // multiply the offset by the turf pixel size - offset_x *= world.icon_size - offset_y *= world.icon_size - -/datum/plot_vector/proc/increment() - loc_x += offset_x - loc_y += offset_y - -/datum/plot_vector/proc/return_angle() - return angle - -/datum/plot_vector/proc/return_hypotenuse() - return sqrt(((offset_x / 32) ** 2) + ((offset_y / 32) ** 2)) - -/datum/plot_vector/proc/return_location(var/datum/vector_loc/data) - if(!data) - data = new() - data.loc = locate(round(loc_x / world.icon_size, 1), round(loc_y / world.icon_size, 1), loc_z) - if(!data.loc) - return - data.pixel_x = loc_x - (data.loc.x * world.icon_size) - data.pixel_y = loc_y - (data.loc.y * world.icon_size) - return data - -/* -vector_loc is a helper datum for returning precise location data from plot_vector. It includes the turf the object is in -as well as the pixel offsets. - -return_turf() - Returns the turf the object should be currently located in. -*/ -/datum/vector_loc - var/turf/loc - var/pixel_x - var/pixel_y - -/datum/vector_loc/proc/return_turf() - return loc diff --git a/code/_helpers/washing.dm b/code/_helpers/washing.dm deleted file mode 100644 index dfdd2c6953503..0000000000000 --- a/code/_helpers/washing.dm +++ /dev/null @@ -1,89 +0,0 @@ -/proc/wash_mob(var/mob/living/washing) - - if(!istype(washing)) - return - - var/mob/living/L = washing - - if(L.on_fire) - L.visible_message("A cloud of steam rises up as the water hits \the [L]!") - L.ExtinguishMob() - - L.fire_stacks = -20 //Douse ourselves with water to avoid fire more easily - - if(!iscarbon(washing)) - washing.clean_blood() - return - - var/mob/living/carbon/M = washing - if(M.r_hand) - M.r_hand.clean_blood() - if(M.l_hand) - M.l_hand.clean_blood() - if(M.back && M.back.clean_blood()) - M.update_inv_back(0) - - //flush away reagents on the skin - if(M.touching) - var/remove_amount = M.touching.maximum_volume * M.reagent_permeability() //take off your suit first - M.touching.remove_any(remove_amount) - - if(!ishuman(M)) - if(M.wear_mask && M.wear_mask.clean_blood()) - M.update_inv_wear_mask(0) - M.clean_blood() - return - - var/mob/living/carbon/human/H = M - var/washgloves = 1 - var/washshoes = 1 - var/washmask = 1 - var/washears = 1 - var/washglasses = 1 - - if(H.wear_suit) - washgloves = !(H.wear_suit.flags_inv & HIDEGLOVES) - washshoes = !(H.wear_suit.flags_inv & HIDESHOES) - - if(H.head) - washmask = !(H.head.flags_inv & HIDEMASK) - washglasses = !(H.head.flags_inv & HIDEEYES) - washears = !(H.head.flags_inv & HIDEEARS) - - if(H.wear_mask) - if (washears) - washears = !(H.wear_mask.flags_inv & HIDEEARS) - if (washglasses) - washglasses = !(H.wear_mask.flags_inv & HIDEEYES) - - if(H.head) - if(H.head.clean_blood()) - H.update_inv_head(0) - if(H.wear_suit) - if(H.wear_suit.clean_blood()) - H.update_inv_wear_suit(0) - else if(H.w_uniform) - if(H.w_uniform.clean_blood()) - H.update_inv_w_uniform(0) - if(H.gloves && washgloves) - if(H.gloves.clean_blood()) - H.update_inv_gloves(0) - if(H.shoes && washshoes) - if(H.shoes.clean_blood()) - H.update_inv_shoes(0) - if(H.wear_mask && washmask) - if(H.wear_mask.clean_blood()) - H.update_inv_wear_mask(0) - if(H.glasses && washglasses) - if(H.glasses.clean_blood()) - H.update_inv_glasses(0) - if(H.l_ear && washears) - if(H.l_ear.clean_blood()) - H.update_inv_ears(0) - if(H.r_ear && washears) - if(H.r_ear.clean_blood()) - H.update_inv_ears(0) - if(H.belt) - if(H.belt.clean_blood()) - H.update_inv_belt(0) - H.clean_blood(washshoes) \ No newline at end of file diff --git a/code/_macros.dm b/code/_macros.dm deleted file mode 100644 index 1f2f70bcb6042..0000000000000 --- a/code/_macros.dm +++ /dev/null @@ -1,272 +0,0 @@ -#define any2ref(x) "\ref[x]" - -//Do (almost) nothing - indev placeholder for switch case implementations etc -#define NOOP (.=.); - -#define list_find(L, needle, LIMITS...) L.Find(needle, LIMITS) - -#define PUBLIC_GAME_MODE SSticker.master_mode - -#define CLAMP01(x) clamp(x, 0, 1) - -var/global/const/POSITIVE_INFINITY = 1#INF // win: 1.#INF, lin: inf -var/global/const/NEGATIVE_INFINITY = -1#INF // win: -1.#INF, lin: -inf -//var/const/POSITIVE_NAN = -(1#INF/1#INF) // win: 1.#QNAN, lin: nan -- demonstration of creation, but not useful -//var/const/NEGATIVE_NAN = (1#INF/1#INF) //win: -1.#IND, lin: -nan -- demonstration of creation, but not useful -#define isfinite(N) (isnum(N) && ((N) == (N)) && ((N) != POSITIVE_INFINITY) && ((N) != NEGATIVE_INFINITY)) - -#define isnan(N) (isnum(N) && (N) != (N)) - -#define get_turf(A) get_step(A,0) - -#define get_x(A) (get_step(A, 0)?.x || 0) - -#define get_y(A) (get_step(A, 0)?.y || 0) - -#define get_z(A) (get_step(A, 0)?.z || 0) - -#define isAI(A) istype(A, /mob/living/silicon/ai) - -#define isalien(A) istype(A, /mob/living/carbon/alien) - -#define isanimal(A) istype(A, /mob/living/simple_animal) - -#define isairlock(A) istype(A, /obj/machinery/door/airlock) - -#define isatom(A) (isloc(A) && !isarea(A)) - -#define isbrain(A) istype(A, /mob/living/carbon/brain) - -#define iscarbon(A) istype(A, /mob/living/carbon) - -#define iscolorablegloves(A) (istype(A, /obj/item/clothing/gloves/color)||istype(A, /obj/item/clothing/gloves/insulated)||istype(A, /obj/item/clothing/gloves/thick)) - -#define isclient(A) istype(A, /client) - -#define iscorgi(A) istype(A, /mob/living/simple_animal/passive/corgi) - -#define isdatum(A) istype(A, /datum) - -#define isdrone(A) istype(A, /mob/living/silicon/robot/drone) - -#define isEye(A) istype(A, /mob/observer/eye) - -#define ishuman(A) istype(A, /mob/living/carbon/human) - -#define isid(A) istype(A, /obj/item/card/id) - -#define isitem(A) istype(A, /obj/item) - -#define isliving(A) istype(A, /mob/living) - -#define ismouse(A) istype(A, /mob/living/simple_animal/passive/mouse) - -#define isnewplayer(A) istype(A, /mob/new_player) - -#define isobj(A) istype(A, /obj) - -#define isghost(A) istype(A, /mob/observer/ghost) - -#define isobserver(A) istype(A, /mob/observer) - -#define isorgan(A) istype(A, /obj/item/organ/external) - -#define isstack(A) istype(A, /obj/item/stack) - -#define isspace(A) istype(A, /area/space) - -#define isspaceturf(A) istype(A, /turf/space) - -#define isopenturf(A) istype(A, /turf/simulated/open) - -#define ispAI(A) istype(A, /mob/living/silicon/pai) - -#define isrobot(A) istype(A, /mob/living/silicon/robot) - -#define issilicon(A) istype(A, /mob/living/silicon) - -#define ismachinerestricted(A) (issilicon(A) && A.machine_restriction) - -#define isslime(A) istype(A, /mob/living/carbon/slime) - -#define isunderwear(A) istype(A, /obj/item/underwear) - -#define isvirtualmob(A) istype(A, /mob/observer/virtual) - -#define isweakref(A) istype(A, /weakref) - -#define attack_animation(A) if(istype(A)) A.do_attack_animation(src) - -#define isopenspace(A) istype(A, /turf/simulated/open) - -#define isplunger(A) istype(A, /obj/item/clothing/mask/plunger) || istype(A, /obj/item/device/plunger/robot) - -#define isadmin(X) (check_rights(R_ADMIN, 0, (X)) != 0) - -#define sequential_id(key) uniqueness_repository.Generate(/datum/uniqueness_generator/id_sequential, key) - -#define random_id(key,min_id,max_id) uniqueness_repository.Generate(/datum/uniqueness_generator/id_random, key, min_id, max_id) - -/// General I/O helpers -#define to_target(target, payload) target << (payload) -#define from_target(target, receiver) target >> (receiver) - -/// Common use -#define legacy_chat(target, message) to_target(target, message) -#define to_world(message) to_chat(world, message) -#define to_world_log(message) to_target(world.log, message) -#define sound_to(target, sound) to_target(target, sound) -#define image_to(target, image) to_target(target, image) -#define show_browser(target, content, title) to_target(target, browse(content, title)) -#define close_browser(target, title) to_target(target, browse(null, title)) -#define send_rsc(target, content, title) to_target(target, browse_rsc(content, title)) -#define send_link(target, url) to_target(target, link(url)) -#define send_output(target, msg, control) to_target(target, output(msg, control)) -#define to_file(handle, value) to_target(handle, value) -#define to_save(handle, value) to_target(handle, value) //semantics -#define from_save(handle, target_var) from_target(handle, target_var) - -#define MAP_IMAGE_PATH "nano/images/[GLOB.using_map.path]/" - -#define map_image_file_name(z_level) "[GLOB.using_map.path]-[z_level].png" - -#define RANDOM_BLOOD_TYPE pick(4;"O-", 36;"O+", 3;"A-", 28;"A+", 1;"B-", 20;"B+", 1;"AB-", 5;"AB+") - -#define CanInteract(user, state) (CanUseTopic(user, state) == STATUS_INTERACTIVE) - -#define CanDefaultInteract(user) (CanUseTopic(user, DefaultTopicState()) == STATUS_INTERACTIVE) - -#define CanInteractWith(user, target, state) (target.CanUseTopic(user, state) == STATUS_INTERACTIVE) - -#define CanPhysicallyInteract(user) (CanUseTopicPhysical(user) == STATUS_INTERACTIVE) - -#define CanPhysicallyInteractWith(user, target) (target.CanUseTopicPhysical(user) == STATUS_INTERACTIVE) - -#define QDEL_NULL_LIST(x) if(x) { for(var/y in x) { qdel(y) }}; if(x) {x.Cut(); x = null; } // Second x check to handle items that LAZYREMOVE on qdel. - -#define QDEL_NULL(x) if(x) { qdel(x) ; x = null } - -#define QDEL_IN(item, time) addtimer(CALLBACK(GLOBAL_PROC, .proc/qdel, item), time, TIMER_STOPPABLE) - -#define DROP_NULL(x) if(x) { x.dropInto(loc); x = null; } - -#define DROP_NULL_LIST(x) if(x) { for(var/atom/movable/y in x) { y.dropInto(loc) }}; x.Cut(); x = null; - -#define ARGS_DEBUG log_debug("[__FILE__] - [__LINE__]") ; for(var/arg in args) { log_debug("\t[log_info_line(arg)]") } - -// Insert an object A into a sorted list using cmp_proc (/code/_helpers/cmp.dm) for comparison. -#define ADD_SORTED(list, A, cmp_proc) if(!list.len) {list.Add(A)} else {list.Insert(FindElementIndex(A, list, cmp_proc), A)} - -// Spawns multiple objects of the same type -#define cast_new(type, num, args...) if((num) == 1) { new type(args) } else { for(var/i=0;i<(num),i++) { new type(args) } } - -#define JOINTEXT(X) jointext(X, null) - -#define SPAN_ITALIC(X) "[X]" - -#define SPAN_BOLD(X) "[X]" - -#define SPAN_NOTICE(X) "[X]" - -#define SPAN_WARNING(X) "[X]" - -#define SPAN_GOOD(X) "[X]" - -#define SPAN_BAD(X) "[X]" - -#define SPAN_DANGER(X) "[X]" - -#define SPAN_OCCULT(X) "[X]" - -#define SPAN_MFAUNA(X) "[X]" - -#define SPAN_SUBTLE(X) "[X]" - -#define SPAN_INFO(X) "[X]" - -#define STYLE_SMALLFONTS(X, S, C1) "[X]" - -#define STYLE_SMALLFONTS_OUTLINE(X, S, C1, C2) "[X]" - -#define SPAN_DEBUG(X) "[X]" - -#define SPAN_STYLE(style, X) "[X]" - -#define FONT_COLORED(color, text) "[text]" - -#define FONT_SMALL(X) "[X]" - -#define FONT_NORMAL(X) "[X]" - -#define FONT_LARGE(X) "[X]" - -#define FONT_HUGE(X) "[X]" - -#define FONT_GIANT(X) "[X]" - -#define crash_with(X) crash_at(X, __FILE__, __LINE__) - -//proxima code start -#define SET_L_RPC(r, p, c) set_light(p, l_outer_range = r, l_color = c) -//proxima code end - -/// Semantic define for a 0 int intended for use as a bitfield -#define EMPTY_BITFIELD 0 - - -/// Right-shift of INT by BITS -#define SHIFTR(INT, BITS) ((INT) >> (BITS)) - - -/// Left-shift of INT by BITS -#define SHIFTL(INT, BITS) ((INT) << (BITS)) - - -/// Convenience define for nth-bit flags, 0-indexed -#define FLAG(BIT) SHIFTL(1, BIT) - - -/// Test bit at index BIT is set in FIELD -#define GET_BIT(FIELD, BIT) ((FIELD) & FLAG(BIT)) - - -/// Test bit at index BIT is set in FIELD; semantic alias of GET_BIT -#define HAS_BIT(FIELD, BIT) GET_BIT(FIELD, BIT) - - -/// Set bit at index BIT in FIELD -#define SET_BIT(FIELD, BIT) ((FIELD) |= FLAG(BIT)) - - -/// Unset bit at index BIT in FIELD -#define CLEAR_BIT(FIELD, BIT) ((FIELD) &= ~FLAG(BIT)) - - -/// Flip bit at index BIT in FIELD -#define FLIP_BIT(FIELD, BIT) ((FIELD) ^= FLAG(BIT)) - - -/// Test any bits of MASK are set in FIELD -#define GET_FLAGS(FIELD, MASK) ((FIELD) & (MASK)) - - -/// Test all bits of MASK are set in FIELD -#define HAS_FLAGS(FIELD, MASK) (((FIELD) & (MASK)) == (MASK)) - - -/// Set bits of MASK in FIELD -#define SET_FLAGS(FIELD, MASK) ((FIELD) |= (MASK)) - - -/// Unset bits of MASK in FIELD -#define CLEAR_FLAGS(FIELD, MASK) ((FIELD) &= ~(MASK)) - - -/// Flip bits of MASK in FIELD -#define FLIP_FLAGS(FIELD, MASK) ((FIELD) ^= (MASK)) - - -#define hex2num(hex) (text2num(hex, 16) || 0) - - -#define num2hex(num) num2text(num, 1, 16) diff --git a/code/_onclick/MouseDrag.dm b/code/_onclick/MouseDrag.dm deleted file mode 100644 index b53eb377a35b5..0000000000000 --- a/code/_onclick/MouseDrag.dm +++ /dev/null @@ -1,16 +0,0 @@ -//If we intercept it return true else return false -/atom/proc/RelayMouseDrag(src_object, over_object, src_location, over_location, src_control, over_control, params, var/mob/user) - return FALSE - -/mob/proc/OnMouseDrag(src_object, over_object, src_location, over_location, src_control, over_control, params) - if(istype(loc, /atom)) - var/atom/A = loc - if(A.RelayMouseDrag(src_object, over_object, src_location, over_location, src_control, over_control, params, src)) - return - - if(over_object) - if(!incapacitated()) - var/obj/item/gun/gun = get_active_hand() - if(istype(gun) && gun.can_autofire()) - set_dir(get_dir(src, over_object)) - gun.Fire(get_turf(over_object), src, params, (get_dist(over_object, src) <= 1), FALSE) \ No newline at end of file diff --git a/code/_onclick/adjacent.dm b/code/_onclick/adjacent.dm deleted file mode 100644 index ef93afd4eeab8..0000000000000 --- a/code/_onclick/adjacent.dm +++ /dev/null @@ -1,158 +0,0 @@ -/** - Adjacency proc for determining touch range - - This is mostly to determine if a user can enter a square for the purposes of touching something. - Examples include reaching a square diagonally or reaching something on the other side of a glass window. - - This is calculated by looking for border items, or in the case of clicking diagonally from yourself, dense items. - This proc will NOT notice if you are trying to attack a window on the other side of a dense object in its turf. There is a window helper for that. - - Note that in all cases the neighbor is handled simply; this is usually the user's mob, in which case it is up to you - to check that the mob is not inside of something -*/ -/atom/proc/Adjacent(var/atom/neighbor) // basic inheritance, unused - return 0 - -// Not a sane use of the function and (for now) indicative of an error elsewhere -/area/Adjacent(var/atom/neighbor) - CRASH("Call to /area/Adjacent(), unimplemented proc") - - -/* - Adjacency (to turf): - * If you are in the same turf, always true - * If you are vertically/horizontally adjacent, ensure there are no border objects - * If you are diagonally adjacent, ensure you can pass through at least one of the mutually adjacent square. - * Passing through in this case ignores anything with the throwpass flag, such as tables, racks, and morgue trays. -*/ -/turf/Adjacent(var/atom/neighbor, var/atom/target = null) - var/turf/T0 = get_turf(neighbor) - if(T0 == src) - return 1 - if(!T0 || T0.z != z) - return 0 - if(get_dist(src,T0) > 1) - return 0 - - if(T0.x == x || T0.y == y) - // Check for border blockages - return T0.ClickCross(get_dir(T0,src), border_only = 1, target_atom = neighbor) && src.ClickCross(get_dir(src,T0), border_only = 1, target_atom = target) - - // Not orthogonal - var/in_dir = get_dir(neighbor,src) // eg. northwest (1+8) - var/d1 = in_dir&(in_dir-1) // eg west (1+8)&(8) = 8 - var/d2 = in_dir - d1 // eg north (1+8) - 8 = 1 - - for(var/d in list(d1,d2)) - if(!T0.ClickCross(d, border_only = 1, target_atom = neighbor)) - continue // could not leave T0 in that direction - - var/turf/T1 = get_step(T0,d) - if(!T1 || T1.density || !T1.ClickCross(get_dir(T1,T0) | get_dir(T1,src), border_only = 0)) - continue // couldn't enter or couldn't leave T1 - - if(!src.ClickCross(get_dir(src,T1), border_only = 1, target_atom = target)) - continue // could not enter src - - return 1 // we don't care about our own density - return 0 - -/** - * Similar to Adjacent, but checks if the path FROM src in an orthogonal direction THROUGH intermediate TO destination - * is free without considering src turf - */ -/turf/proc/Adjacent_free_dir(atom/destination, path_dir = 0) - var/turf/dest_T = get_turf(destination) - if(dest_T == src) - return TRUE - if(!dest_T || dest_T.z != z) - return FALSE - if(get_dist(src,dest_T) > 1) - return FALSE - if(!path_dir) - return FALSE - - if(dest_T.x == x || dest_T.y == y) //orthogonal - return dest_T.ClickCross(get_dir(dest_T, src), border_only = 1) - - var/turf/intermediate_T = get_step(src, path_dir) //diagonal - if(!intermediate_T || intermediate_T.density \ - || !intermediate_T.ClickCross(get_dir(intermediate_T, src) | get_dir(intermediate_T, dest_T), border_only = 0)) - return FALSE - - if(!dest_T.ClickCross(get_dir(dest_T, intermediate_T), border_only = 1)) - return FALSE - - return TRUE - -/** -* Quick adjacency (to turf): -* If you are in the same turf, always true -* If you are not adjacent, then false -*/ -/turf/proc/AdjacentQuick(var/atom/neighbor, var/atom/target = null) - var/turf/T0 = get_turf(neighbor) - if(T0 == src) - return 1 - - if(get_dist(src,T0) > 1) - return 0 - - return 1 - -/* - Adjacency (to anything else): - * Must be on a turf - * In the case of a multiple-tile object, all valid locations are checked for adjacency. - - Note: Multiple-tile objects are created when the bound_width and bound_height are creater than the tile size. - This is not used in stock /tg/station currently. -*/ -/atom/movable/Adjacent(var/atom/neighbor) - if(neighbor == loc || (neighbor.loc == loc)) return 1 - if(!isturf(loc)) return 0 - for(var/turf/T in locs) - if(isnull(T)) continue - if(T.Adjacent(neighbor,src)) return 1 - return 0 - -// This is necessary for storage items not on your person. -/obj/item/Adjacent(var/atom/neighbor, var/recurse = 1) - if(neighbor == loc) return 1 - if(istype(loc,/obj/item)) - if(recurse > 0) - return loc.Adjacent(neighbor,recurse - 1) - return 0 - return ..() - -/** - This checks if you there is uninterrupted airspace between that turf and this one. - This is defined as any dense ATOM_FLAG_CHECKS_BORDER object, or any dense object without throwpass. - The border_only flag allows you to not objects (for source and destination squares) -*/ -/turf/proc/ClickCross(target_dir, border_only, atom/target_atom = null) - for(var/obj/O in src) - if( !O.density || O == target_atom || O.throwpass) continue // throwpass is used for anything you can click through - - if(O.atom_flags & ATOM_FLAG_CHECKS_BORDER) // windows have throwpass but are on border, check them first - if( O.dir & target_dir || O.dir&(O.dir-1) ) // full tile windows are just diagonals mechanically - var/obj/structure/window/W = target_atom - if(istype(W) && W.is_fulltile()) //exception for breaking full tile windows on top of single pane windows - return 1 - if(target_atom && (target_atom.atom_flags & ATOM_FLAG_ADJACENT_EXCEPTION)) // exception for atoms that should always be reachable - return 1 - else - return 0 - - else if( !border_only ) // dense, not on border, cannot pass over - return 0 - return 1 -/* - Aside: throwpass does not do what I thought it did originally, and is only used for checking whether or not - a thrown object should stop after already successfully entering a square. Currently the throw code involved - only seems to affect hitting mobs, because the checks performed against objects are already performed when - entering or leaving the square. Since throwpass isn't used on mobs, but only on objects, it is effectively - useless. Throwpass may later need to be removed and replaced with a passcheck (bitfield on movable atom passflags). - - Since I don't want to complicate the click code rework by messing with unrelated systems it won't be changed here. -*/ \ No newline at end of file diff --git a/code/_onclick/ai.dm b/code/_onclick/ai.dm deleted file mode 100644 index 4cea13d563928..0000000000000 --- a/code/_onclick/ai.dm +++ /dev/null @@ -1,215 +0,0 @@ -/* - AI ClickOn() - - Note currently ai restrained() returns 0 in all cases, - therefore restrained code has been removed - - The AI can double click to move the camera (this was already true but is cleaner), - or double click a mob to track them. - - Note that AI have no need for the adjacency proc, and so this proc is a lot cleaner. -*/ -/mob/living/silicon/ai/DblClickOn(var/atom/A, params) - if(control_disabled || stat) return - - if(ismob(A)) - ai_actual_track(A) - else - A.move_camera_by_click() - - -/mob/living/silicon/ai/ClickOn(var/atom/A, params) - if(world.time <= next_click) - return - next_click = world.time + 1 - - if(incapacitated()) - return - - var/list/modifiers = params2list(params) - if(modifiers["ctrl"] && modifiers["alt"]) - CtrlAltClickOn(A) - return - if(modifiers["shift"] && modifiers["ctrl"]) - CtrlShiftClickOn(A) - return - if(modifiers["middle"]) - MiddleClickOn(A) - return - if(modifiers["shift"]) - ShiftClickOn(A) - return - if(modifiers["alt"]) // alt and alt-gr (rightalt) - AltClickOn(A) - return - if(modifiers["ctrl"]) - CtrlClickOn(A) - return - - face_atom(A) // change direction to face what you clicked on - - if(control_disabled || !canClick()) - return - - if(multitool_mode && isobj(A)) - var/obj/O = A - var/datum/extension/interactive/multitool/MT = get_extension(O, /datum/extension/interactive/multitool) - if(MT) - MT.interact(aiMulti, src) - return - - if(silicon_camera.in_camera_mode) - silicon_camera.camera_mode_off() - silicon_camera.captureimage(A, usr) - return - - /* - AI restrained() currently does nothing - if(restrained()) - RestrainedClickOn(A) - else - */ - A.add_hiddenprint(src) - A.attack_ai(src) - -/* - AI has no need for the UnarmedAttack() and RangedAttack() procs, - because the AI code is not generic; attack_ai() is used instead. - The below is only really for safety, or you can alter the way - it functions and re-insert it above. -*/ -/mob/living/silicon/ai/UnarmedAttack(atom/A) - A.attack_ai(src) - -/mob/living/silicon/ai/RangedAttack(atom/A, var/params) - A.attack_ai(src) - return TRUE - -/atom/proc/attack_ai(mob/user as mob) - return - -/* - Since the AI handles shift, ctrl, and alt-click differently - than anything else in the game, atoms have separate procs - for AI shift, ctrl, and alt clicking. -*/ - -/mob/living/silicon/ai/CtrlAltClickOn(var/atom/A) - if(!control_disabled && A.AICtrlAltClick(src)) - return - ..() - -/mob/living/silicon/ai/ShiftClickOn(var/atom/A) - if(!control_disabled && A.AIShiftClick(src)) - return - ..() - -/mob/living/silicon/ai/CtrlClickOn(var/atom/A) - if(!control_disabled && A.AICtrlClick(src)) - return TRUE - . = ..() - -/mob/living/silicon/ai/AltClickOn(var/atom/A) - if(!control_disabled && A.AIAltClick(src)) - return - ..() - -/mob/living/silicon/ai/MiddleClickOn(var/atom/A) - if(!control_disabled && A.AIMiddleClick(src)) - return - ..() - -/* - The following criminally helpful code is just the previous code cleaned up; - I have no idea why it was in atoms.dm instead of respective files. -*/ - -/atom/proc/AICtrlAltClick() - -/obj/machinery/door/airlock/AICtrlAltClick() // Electrifies doors. - if(usr.incapacitated()) - return - if(!electrified_until) - // permanent shock - Topic(src, list("command"="electrify_permanently", "activate" = "1")) - else - // disable/6 is not in Topic; disable/5 disables both temporary and permanent shock - Topic(src, list("command"="electrify_permanently", "activate" = "0")) - return 1 - -/atom/proc/AICtrlShiftClick() - return - -/atom/proc/AIShiftClick() - return - -/obj/machinery/door/airlock/AIShiftClick() // Opens and closes doors! - if(usr.incapacitated()) - return - if(density) - Topic(src, list("command"="open", "activate" = "1")) - else - Topic(src, list("command"="open", "activate" = "0")) - return 1 - -/atom/proc/AICtrlClick() - return FALSE - -/obj/machinery/door/airlock/AICtrlClick() // Bolts doors - if(usr.incapacitated()) - return FALSE - if(locked) - Topic(src, list("command"="bolts", "activate" = "0")) - else - Topic(src, list("command"="bolts", "activate" = "1")) - return TRUE - -/obj/machinery/power/apc/AICtrlClick() // turns off/on APCs. - if(usr.incapacitated()) - return FALSE - Topic(src, list("breaker"="1")) - return TRUE - -/obj/machinery/turretid/AICtrlClick() //turns off/on Turrets - if(usr.incapacitated()) - return FALSE - Topic(src, list("command"="enable", "value"="[!enabled]")) - return TRUE - -/atom/proc/AIAltClick(var/atom/A) - return AltClick(A) - -/obj/machinery/turretid/AIAltClick() //toggles lethal on turrets - if(usr.incapacitated()) - return - Topic(src, list("command"="lethal", "value"="[!lethal]")) - return 1 - -/obj/machinery/atmospherics/binary/pump/AIAltClick() - return AltClick() - -/atom/proc/AIMiddleClick(var/mob/living/silicon/user) - return 0 - -/obj/machinery/door/airlock/AIMiddleClick() // Toggles door bolt lights. - if(usr.incapacitated()) - return - if(..()) - return - - if(!src.lights) - Topic(src, list("command"="lights", "activate" = "1")) - else - Topic(src, list("command"="lights", "activate" = "0")) - return 1 - -// -// Override AdjacentQuick for AltClicking -// - -/mob/living/silicon/ai/TurfAdjacent(var/turf/T) - return (cameranet && cameranet.is_turf_visible(T)) - -/mob/living/silicon/ai/face_atom(var/atom/A) - if(eyeobj) - eyeobj.face_atom(A) diff --git a/code/_onclick/click.dm b/code/_onclick/click.dm deleted file mode 100644 index 211886f099767..0000000000000 --- a/code/_onclick/click.dm +++ /dev/null @@ -1,448 +0,0 @@ -#define INVOKE_PSI_POWERS(holder, powers, target) \ - if(holder && holder.psi && holder.psi.can_use()) { \ - for(var/decl/psionic_power/power as anything in powers) { \ - var/obj/item/result = power.invoke(holder, target); \ - if(result) { \ - holder.psi.spend_power(power.cost); \ - power.handle_post_power(holder, target); \ - if(istype(result)) { \ - sound_to(holder, sound('sound/effects/psi/power_evoke.ogg')); \ - LAZYADD(holder.psi.manifested_items, result); \ - holder.put_in_hands(result); \ - } \ - if(power.suppress_parent_proc) { return 0 }; \ - } \ - } \ - } - -/* - Click code cleanup - ~Sayu -*/ - -// 1 decisecond click delay (above and beyond mob/next_move) -/mob/var/next_click = 0 - - -/client/MouseDown(object,location,control,params) - - if (CH) - if (!CH.MouseDown(object,location,control,params)) - return - .=..() - -/client/MouseUp(object,location,control,params) - if (CH) - if (!CH.MouseUp(object,location,control,params)) - return - .=..() - -/client/MouseDrag(over_object,src_location,over_location,src_control,over_control,params) - if (CH) - if (!CH.MouseDrag(over_object,src_location,over_location,src_control,over_control,params)) - return - .=..() - - -/client/Click(var/atom/target, location, control, params) - var/list/L = params2list(params) //convert params into a list - var/dragged = L["drag"] //grab what mouse button they are dragging with, if any. - if(dragged && !L[dragged]) //check to ensure they aren't using drag clicks to aimbot - return //if they are dragging, and they clicked with a different mouse button, reject the click as it will always go the atom they are currently dragging, even if out of view and not under the mouse - - if (CH) - if (!CH.Click(target, location, control, params)) - return - - - if(!target.Click(location, control, params)) - usr.ClickOn(target, params) - -/* - Before anything else, defer these calls to a per-mobtype handler. This allows us to - remove istype() spaghetti code, but requires the addition of other handler procs to simplify it. - - Alternately, you could hardcode every mob's variation in a flat ClickOn() proc; however, - that's a lot of code duplication and is hard to maintain. - - Note that this proc can be overridden, and is in the case of screen objects. -*/ - -/atom/DblClick(var/location, var/control, var/params) - if(usr.client) - if(usr.client.CH) - usr.client.CH.OnDblClick(src, params) - return - - if(src) - usr.DblClickOn(src, params) - -/atom/proc/allow_click_through(var/atom/A, var/params, var/mob/user) - return FALSE - -/turf/allow_click_through(var/atom/A, var/params, var/mob/user) - return TRUE - -/* - Standard mob ClickOn() - Handles exceptions: middle click, modified clicks, exosuit actions - - After that, mostly just check your state, check whether you're holding an item, - check whether you're adjacent to the target, then pass off the click to whoever - is recieving it. - The most common are: - * mob/UnarmedAttack(atom,adjacent) - used here only when adjacent, with no item in hand; in the case of humans, checks gloves - * atom/attackby(item,usser) - used only when adjacent - * item/afterattack(atom,user,adjacent,params) - used both ranged and adjacent - * mob/RangedAttack(atom,params) - used only ranged, only used for tk and laser eyes but could be changed -*/ -/mob/proc/ClickOn(var/atom/A, var/params) - if(!canClick()) // in the year 2000... - return - - if(world.time <= next_click) // Hard check, before anything else, to avoid crashing - return - - next_click = world.time + 1 - - var/list/modifiers = params2list(params) - if(modifiers["shift"] && modifiers["ctrl"]) - CtrlShiftClickOn(A) - return 1 - if(modifiers["ctrl"] && modifiers["alt"]) - CtrlAltClickOn(A) - return 1 - if(modifiers["middle"]) - MiddleClickOn(A) - return 1 - if(modifiers["shift"]) - ShiftClickOn(A) - return 0 - if(modifiers["alt"]) // alt and alt-gr (rightalt) - AltClickOn(A) - return 1 - if(modifiers["ctrl"]) - CtrlClickOn(A) - return 1 - - if(stat || paralysis || stunned || weakened || sleeping) - return - - // Do not allow player facing change in fixed chairs - if(!istype(buckled) || buckled.buckle_movable) - face_atom(A) // change direction to face what you clicked on - - if(restrained()) - setClickCooldown(10) - RestrainedClickOn(A) - return 1 - - if(in_throw_mode) - if(isturf(A) || isturf(A.loc)) - throw_item(A) - trigger_aiming(TARGET_CAN_CLICK) - return 1 - throw_mode_off() - - var/obj/item/W = get_active_hand() - - if(W == A) // Handle attack_self - W.attack_self(src) - trigger_aiming(TARGET_CAN_CLICK) - if(hand) - update_inv_l_hand(0) - else - update_inv_r_hand(0) - return 1 - - //Atoms on your person - // A is your location but is not a turf; or is on you (backpack); or is on something on you (box in backpack); sdepth is needed here because contents depth does not equate inventory storage depth. - var/sdepth = A.storage_depth(src) - if((!isturf(A) && A == loc) || (sdepth != -1 && sdepth <= 1)) - if(W) - var/resolved = W.resolve_attackby(A, src, params) - if(!resolved && A && W) - W.afterattack(A, src, 1, params) // 1 indicates adjacency - else - if(ismob(A)) // No instant mob attacking - setClickCooldown(DEFAULT_ATTACK_COOLDOWN) - UnarmedAttack(A, 1) - - trigger_aiming(TARGET_CAN_CLICK) - return 1 - - if(!loc.allow_click_through(A, params, src)) // This is going to stop you from telekinesing from inside a closet, but I don't shed many tears for that - return - - //Atoms on turfs (not on your person) - // A is a turf or is on a turf, or in something on a turf (pen in a box); but not something in something on a turf (pen in a box in a backpack) - sdepth = A.storage_depth_turf() - if(isturf(A) || isturf(A.loc) || (sdepth != -1 && sdepth <= 1)) - if(A.Adjacent(src)) // see adjacent.dm - if(W) - // Return 1 in attackby() to prevent afterattack() effects (when safely moving items for example) - var/resolved = W.resolve_attackby(A,src, params) - if(!resolved && A && W) - W.afterattack(A, src, 1, params) // 1: clicking something Adjacent - else - if(ismob(A)) // No instant mob attacking - setClickCooldown(DEFAULT_ATTACK_COOLDOWN) - UnarmedAttack(A, 1) - - trigger_aiming(TARGET_CAN_CLICK) - return - else // non-adjacent click - if(W) - W.afterattack(A, src, 0, params) // 0: not Adjacent - else - RangedAttack(A, params) - - trigger_aiming(TARGET_CAN_CLICK) - return 1 - -/mob/proc/setClickCooldown(var/timeout) - next_move = max(world.time + timeout, next_move) - -/mob/proc/canClick() - if(config.no_click_cooldown || next_move <= world.time) - return 1 - return 0 - -// Default behavior: ignore double clicks, the second click that makes the doubleclick call already calls for a normal click -/mob/proc/DblClickOn(var/atom/A, var/params) - return - -/* - Translates into attack_hand, etc. - - Note: proximity_flag here is used to distinguish between normal usage (flag=1), - and usage when clicking on things telekinetically (flag=0). This proc will - not be called at ranged except with telekinesis. - - proximity_flag is not currently passed to attack_hand, and is instead used - in human click code to allow glove touches only at melee range. -*/ -/mob/proc/UnarmedAttack(var/atom/A, var/proximity_flag) - return - -/mob/living/UnarmedAttack(var/atom/A, var/proximity_flag) - - if(GAME_STATE < RUNLEVEL_GAME) - to_chat(src, "You cannot attack people before the game has started.") - return 0 - - if(stat) - return 0 - - - if(psi) - INVOKE_PSI_POWERS(src, psi.get_melee_powers(SSpsi.faculties_by_intent[a_intent]), A) - return 1 - -/* - Ranged unarmed attack: - - This currently is just a default for all mobs, involving - laser eyes and telekinesis. You could easily add exceptions - for things like ranged glove touches, spitting alien acid/neurotoxin, - animals lunging, etc. -*/ -/mob/proc/RangedAttack(var/atom/A, var/params) - if(!mutations.len) - return FALSE - - if((MUTATION_LASER in mutations) && a_intent == I_HURT) - LaserEyes(A) // moved into a proc below - return TRUE - -/mob/living/RangedAttack(var/atom/A, var/params) - if(psi) - INVOKE_PSI_POWERS(src, psi.get_ranged_powers(SSpsi.faculties_by_intent[a_intent]), A) - ..() - -/mob/living/proc/check_psi_grab(var/obj/item/grab/grab) - if(psi && ismob(grab.affecting)) - INVOKE_PSI_POWERS(src, psi.get_grab_powers(SSpsi.faculties_by_intent[a_intent]), grab.affecting) - -/* - Restrained ClickOn - - Used when you are handcuffed and click things. - Not currently used by anything but could easily be. -*/ -/mob/proc/RestrainedClickOn(var/atom/A) - return - -/* - Middle click - Only used for swapping hands -*/ -/mob/proc/MiddleClickOn(var/atom/A) - swap_hand() - return - -// In case of use break glass -/* -/atom/proc/MiddleClick(var/mob/M as mob) - return -*/ - -/* - Shift click - For most mobs, examine. - This is overridden in ai.dm -*/ -/mob/proc/ShiftClickOn(var/atom/A) - A.ShiftClick(src) - return -/atom/proc/ShiftClick(var/mob/user) - if(user.client && user.client.eye == user) - user.examinate(src) - return - -/* - Ctrl click - For most objects, pull -*/ -/mob/proc/CtrlClickOn(var/atom/A) - return A.CtrlClick(src) - -/atom/proc/CtrlClick(var/mob/user) - return FALSE - -/atom/movable/CtrlClick(var/mob/user) - if(Adjacent(user)) - user.start_pulling(src) - return TRUE - . = ..() - -/* - Alt click - Unused except for AI -*/ -/mob/proc/AltClickOn(var/atom/A) - var/datum/extension/on_click/alt = get_extension(A, /datum/extension/on_click/alt) - if(alt && alt.on_click(src)) - return - A.AltClick(src) - -/atom/proc/AltClick(var/mob/user) - var/turf/T = get_turf(src) - if(T && user.TurfAdjacent(T)) - if(user.listed_turf == T) - user.listed_turf = null - else - user.listed_turf = T - user.client.statpanel = "Turf" - return 1 - -/mob/proc/TurfAdjacent(var/turf/T) - return T.AdjacentQuick(src) - -/mob/observer/ghost/TurfAdjacent(var/turf/T) - if(!isturf(loc) || !client) - return FALSE - return z == T.z && (get_dist(loc, T) <= client.view) - -/* - Control+Shift click - Unused except for AI -*/ -/mob/proc/CtrlShiftClickOn(var/atom/A) - A.CtrlShiftClick(src) - return - -/atom/proc/CtrlShiftClick(var/mob/user) - return - -/* - Control+Alt click -*/ -/mob/proc/CtrlAltClickOn(var/atom/A) - if(A.CtrlAltClick(src)) - return - pointed(A) - -/atom/proc/CtrlAltClick(var/mob/user) - return - -/* - Misc helpers - - Laser Eyes: as the name implies, handles this since nothing else does currently - face_atom: turns the mob towards what you clicked on -*/ -/mob/proc/LaserEyes(atom/A) - return - -/mob/living/LaserEyes(atom/A) - setClickCooldown(DEFAULT_QUICK_COOLDOWN) - var/turf/T = get_turf(src) - - var/obj/item/projectile/beam/LE = new (T) - LE.icon = 'icons/effects/genetics.dmi' - LE.icon_state = "eyelasers" - playsound(usr.loc, 'sound/weapons/taser2.ogg', 75, 1) - LE.launch(A) -/mob/living/carbon/human/LaserEyes() - if(nutrition>0) - ..() - adjust_nutrition(-(rand(1,5))) - handle_regular_hud_updates() - else - to_chat(src, SPAN_WARNING("You're out of energy! You need food!")) - -// Simple helper to face what you clicked on, in case it should be needed in more than one place -/mob/proc/face_atom(var/atom/A) - if(!A || !x || !y || !A.x || !A.y) return - var/dx = A.x - x - var/dy = A.y - y - if(!dx && !dy) return - - var/direction - if(abs(dx) < abs(dy)) - if(dy > 0) direction = NORTH - else direction = SOUTH - else - if(dx > 0) direction = EAST - else direction = WEST - if(direction != dir) - facedir(direction) - -GLOBAL_LIST_INIT(click_catchers, create_click_catcher()) - -/obj/screen/click_catcher - icon = 'icons/mob/screen_gen.dmi' - icon_state = "click_catcher" - plane = CLICKCATCHER_PLANE - mouse_opacity = 2 - screen_loc = "CENTER-7,CENTER-7" - -/obj/screen/click_catcher/Destroy() - SHOULD_CALL_PARENT(FALSE) - return QDEL_HINT_LETMELIVE - -/proc/create_click_catcher() - . = list() - for(var/i = 0, i<15, i++) - for(var/j = 0, j<15, j++) - var/obj/screen/click_catcher/CC = new() - CC.screen_loc = "NORTH-[i],EAST-[j]" - . += CC - -/obj/screen/click_catcher/Click(location, control, params) - var/list/modifiers = params2list(params) - if(modifiers["middle"] && istype(usr, /mob/living/carbon)) - var/mob/living/carbon/C = usr - C.swap_hand() - else - var/turf/T = screen_loc2turf(screen_loc, get_turf(usr)) - if(T) - // T.Click(location, control, params) - usr.client.Click(T, location, control, params) - - . = 1 - -/obj/screen/click_catcher/proc/resolve(var/mob/user) - var/turf/T = screen_loc2turf(screen_loc, get_turf(user)) - return T diff --git a/code/_onclick/click_handling.dm b/code/_onclick/click_handling.dm deleted file mode 100644 index 9b9317ecf9f1a..0000000000000 --- a/code/_onclick/click_handling.dm +++ /dev/null @@ -1,168 +0,0 @@ -/* - Custom click handling -*/ -#define SETUP_CLICK_HANDLERS \ -if(!click_handlers) { \ - click_handlers = new(); \ - click_handlers += new/datum/click_handler/default(src) \ -} - -/mob/var/list/click_handlers - -/mob/Destroy() - QDEL_NULL_LIST(click_handlers) - return ..() - -var/global/const/CLICK_HANDLER_NONE = EMPTY_BITFIELD -var/global/const/CLICK_HANDLER_REMOVE_ON_MOB_LOGOUT = FLAG(0) -var/global/const/CLICK_HANDLER_REMOVE_IF_NOT_TOP = FLAG(1) -var/global/const/CLICK_HANDLER_ALL = ( CLICK_HANDLER_REMOVE_ON_MOB_LOGOUT | CLICK_HANDLER_REMOVE_IF_NOT_TOP ) - -/datum/click_handler -// var/mob_type - var/species - var/handler_name - var/one_use_flag = 0//drop client.CH after succes ability use - var/client/owner - // var/icon/mouse_icon - -/datum/click_handler/New(client/_owner) - owner = _owner - -//datum/click_handler/Prepare(/client/_owner) - -/datum/click_handler/Destroy() - ..() - if (owner) - owner.CH = null - return ..() -// owner = null - -//Return false from these procs to discard the click afterwards -/datum/click_handler/proc/Click(var/atom/target, location, control, params) - if (!isHUDobj(target)) - if (mob_check(owner.mob) && use_ability(owner.mob, target)) - //Ability successful - if (one_use_flag) - //If we're single use, delete ourselves anyways - qdel(src) - else - //Ability fail, delete ourselves - to_chat(owner.mob, "For some reason you can't use [handler_name] ability") - qdel(src) - - return FALSE //As long as we're not clicking a hud object, we drop the click - return TRUE - -/datum/click_handler/proc/OnDblClick(var/atom/A, var/params) - return - -/datum/click_handler/proc/MouseDown(object,location,control,params) - return TRUE - -/datum/click_handler/proc/MouseDrag(over_object,src_location,over_location,src_control,over_control,params) - return TRUE - -/datum/click_handler/proc/MouseUp(object,location,control,params) - return TRUE - -/datum/click_handler/proc/Enter() - return - -/datum/click_handler/proc/Exit() - return - -/datum/click_handler/proc/mob_check(mob/living/carbon/human/user) //Check can mob use a ability - return - -/datum/click_handler/proc/use_ability(mob/living/carbon/human/user,atom/target) - return - -//Tests whether the target thing is valid, and returns it if so. -//If its not valid, null will be returned -//In the case of click catchers, we resolve and return the turf under it -/datum/click_handler/proc/resolve_world_target(var/a) - - if (istype(a, /obj/screen/click_catcher)) - var/obj/screen/click_catcher/CC = a - return CC.resolve(owner.mob) - - if (istype(a, /turf)) - return a - - else if (istype(a, /atom)) - var/atom/A = a - if (istype(A.loc, /turf)) - return A - return null - - -/**************************** - Full auto gunfire -*****************************/ -/datum/click_handler/fullauto - var/atom/target = null - var/obj/item/gun/reciever // The thing we send firing signals to - var/time_since_last_init // Time since last start of full auto fire , used to prevent ANGRY smashing of M1 to fire faster. - //Todo: Make this work with callbacks - -/datum/click_handler/fullauto/Click() - if(reciever.aim_tag) - reciever.aim_tag = 0 - return FALSE - return TRUE - -//Next loop will notice these vars and stop shooting -/datum/click_handler/fullauto/proc/stop_firing() - target = null - -/datum/click_handler/fullauto/proc/do_fire() - reciever.afterattack(target, owner.mob, FALSE) - -/datum/click_handler/fullauto/MouseDown(object, location, control, params) - var/L = params2list(params) - if(owner.mob.in_throw_mode || L["shift"] || L["ctrl"]) - return TRUE - if(!isturf(owner.mob.loc)) // This stops from firing full auto weapons inside closets or in /obj/effect/dummy/chameleon chameleon projector - return FALSE - if(time_since_last_init > world.time) - return FALSE - - object = resolve_world_target(object) - if(object) - target = object - shooting_loop() - time_since_last_init = world.time + reciever.fire_delay - return TRUE - -/datum/click_handler/fullauto/proc/shooting_loop() - if(owner.mob.resting) - return FALSE - if(target && !reciever.aim_tag) - owner.mob.face_atom(target) - do_fire() - spawn(reciever.fire_delay) shooting_loop() - -/datum/click_handler/fullauto/MouseDrag(over_object, src_location, over_location, src_control, over_control, params) - src_location = resolve_world_target(src_location) - if(src_location) - target = src_location - return FALSE - return TRUE - -/datum/click_handler/fullauto/MouseUp(object, location, control, params) - stop_firing() - return TRUE - -/datum/click_handler/fullauto/Destroy() - stop_firing() //Without this it keeps firing in an infinite loop when deleted - .=..() - -/datum/click_handler/human/mob_check(mob/living/carbon/human/user) - if(ishuman(user)) - if(user.species.name == src.species) - return 1 - return 0 - -/datum/click_handler/human/use_ability(mob/living/carbon/human/user,atom/target) - return diff --git a/code/_onclick/cyborg.dm b/code/_onclick/cyborg.dm deleted file mode 100644 index 9868ec3d01ba0..0000000000000 --- a/code/_onclick/cyborg.dm +++ /dev/null @@ -1,181 +0,0 @@ -/* - Cyborg ClickOn() - - Cyborgs have no range restriction on attack_robot(), because it is basically an AI click. - However, they do have a range restriction on item use, so they cannot do without the - adjacency code. -*/ - -/mob/living/silicon/robot/ClickOn(var/atom/A, var/params) - if(world.time <= next_click) - return - next_click = world.time + 1 - - var/list/modifiers = params2list(params) - if (modifiers["ctrl"] && modifiers["alt"]) - CtrlAltClickOn(A) - return - if(modifiers["shift"] && modifiers["ctrl"]) - CtrlShiftClickOn(A) - return - if(modifiers["middle"]) - MiddleClickOn(A) - return - if(modifiers["shift"]) - ShiftClickOn(A) - return - if(modifiers["alt"]) // alt and alt-gr (rightalt) - AltClickOn(A) - return - if(modifiers["ctrl"]) - CtrlClickOn(A) - return - - if(incapacitated()) - return - - if(!canClick()) - return - - face_atom(A) // change direction to face what you clicked on - - if(silicon_camera.in_camera_mode) - silicon_camera.camera_mode_off() - if(is_component_functioning("camera")) - silicon_camera.captureimage(A, usr) - else - to_chat(src, "Your camera isn't functional.") - return - - /* - cyborg restrained() currently does nothing - if(restrained()) - RestrainedClickOn(A) - return - */ - - var/obj/item/W = get_active_hand() - - // Cyborgs have no range-checking unless there is item use - if(!W) - A.add_hiddenprint(src) - A.attack_robot(src) - return - - // buckled cannot prevent machine interlinking but stops arm movement - if( buckled ) - return - - if(W == A) - - W.attack_self(src) - return - - // cyborgs are prohibited from using storage items so we can I think safely remove (A.loc in contents) - if(A == loc || (A in loc) || (A in contents)) - // No adjacency checks - - var/resolved = W.resolve_attackby(A, src, params) - if(!resolved && A && W) - W.afterattack(A, src, 1, params) // 1 indicates adjacency - return - - if(!isturf(loc)) - return - - var/sdepth = A.storage_depth_turf() - if(isturf(A) || isturf(A.loc) || (sdepth != -1 && sdepth <= 1)) - if(A.Adjacent(src)) // see adjacent.dm - - var/resolved = W.resolve_attackby(A, src, params) - if(!resolved && A && W) - W.afterattack(A, src, 1, params) // 1 indicates adjacency - return - else - W.afterattack(A, src, 0, params) - return - return - -//Middle click cycles through selected modules. -/mob/living/silicon/robot/MiddleClickOn(var/atom/A) - cycle_modules() - return - -//Give cyborgs hotkey clicks without breaking existing uses of hotkey clicks -// for non-doors/apcs -/mob/living/silicon/robot/CtrlShiftClickOn(var/atom/A) - A.BorgCtrlShiftClick(src) - -/mob/living/silicon/robot/ShiftClickOn(var/atom/A) - A.BorgShiftClick(src) - -/mob/living/silicon/robot/CtrlClickOn(var/atom/A) - return A.BorgCtrlClick(src) - -/mob/living/silicon/robot/AltClickOn(var/atom/A) - A.BorgAltClick(src) - -/mob/living/silicon/robot/CtrlAltClickOn(atom/A) - A.BorgCtrlAltClick(src) - -/atom/proc/BorgCtrlShiftClick(var/mob/living/silicon/robot/user) //forward to human click if not overriden - CtrlShiftClick(user) - -/obj/machinery/door/airlock/BorgCtrlShiftClick() - AICtrlShiftClick() - -/atom/proc/BorgShiftClick(var/mob/living/silicon/robot/user) //forward to human click if not overriden - ShiftClick(user) - -/obj/machinery/door/airlock/BorgShiftClick() // Opens and closes doors! Forwards to AI code. - AIShiftClick() - -/atom/proc/BorgCtrlClick(var/mob/living/silicon/robot/user) //forward to human click if not overriden - return CtrlClick(user) - -/obj/machinery/door/airlock/BorgCtrlClick() // Bolts doors. Forwards to AI code. - return AICtrlClick() - -/obj/machinery/power/apc/BorgCtrlClick() // turns off/on APCs. Forwards to AI code. - return AICtrlClick() - -/obj/machinery/turretid/BorgCtrlClick() //turret control on/off. Forwards to AI code. - return AICtrlClick() - -/atom/proc/BorgAltClick(var/mob/living/silicon/robot/user) - AltClick(user) - return - -/obj/machinery/door/airlock/BorgAltClick() // Eletrifies doors. Forwards to AI code. - if (usr.a_intent != I_HELP) - AICtrlAltClick() - else - ..() - -/obj/machinery/turretid/BorgAltClick() //turret lethal on/off. Forwards to AI code. - AIAltClick() - -/obj/machinery/atmospherics/binary/pump/BorgAltClick() - return AltClick() - -/atom/proc/BorgCtrlAltClick(var/mob/living/silicon/robot/user) - CtrlAltClick(user) - -/* - As with AI, these are not used in click code, - because the code for robots is specific, not generic. - - If you would like to add advanced features to robot - clicks, you can do so here, but you will have to - change attack_robot() above to the proper function -*/ -/mob/living/silicon/robot/UnarmedAttack(atom/A) - A.attack_robot(src) - -/mob/living/silicon/robot/RangedAttack(atom/A, var/params) - A.attack_robot(src) - return TRUE - -/atom/proc/attack_robot(mob/user as mob) - attack_ai(user) - return diff --git a/code/_onclick/drag_drop.dm b/code/_onclick/drag_drop.dm deleted file mode 100644 index cfbc69312b34e..0000000000000 --- a/code/_onclick/drag_drop.dm +++ /dev/null @@ -1,28 +0,0 @@ -/* - MouseDrop: - - Called on the atom you're dragging. In a lot of circumstances we want to use the - recieving object instead, so that's the default action. This allows you to drag - almost anything into a trash can. -*/ - -/atom/proc/CanMouseDrop(atom/over, var/mob/user = usr, var/incapacitation_flags) - if(!user || !over) - return FALSE - if(user.incapacitated(incapacitation_flags)) - return FALSE - if(!src.Adjacent(user) || !over.Adjacent(user)) - return FALSE // should stop you from dragging through windows - return TRUE - -/atom/MouseDrop(atom/over) - if(!usr || !over) return - if(!Adjacent(usr) || !over.Adjacent(usr)) return // should stop you from dragging through windows - - spawn(0) - over.MouseDrop_T(src,usr) - return - -// Receive a mouse drop -/atom/proc/MouseDrop_T(atom/dropping, mob/user) - return diff --git a/code/_onclick/ghost.dm b/code/_onclick/ghost.dm deleted file mode 100644 index 91007cb8e38b6..0000000000000 --- a/code/_onclick/ghost.dm +++ /dev/null @@ -1,58 +0,0 @@ -/client/var/inquisitive_ghost = 1 -/mob/observer/ghost/verb/toggle_inquisition() // warning: unexpected inquisition - set name = "Toggle Inquisitiveness" - set desc = "Sets whether your ghost examines everything on click by default" - set category = "Ghost" - if(!client) return - client.inquisitive_ghost = !client.inquisitive_ghost - if(client.inquisitive_ghost) - to_chat(src, "You will now examine everything you click on.") - else - to_chat(src, "You will no longer examine things you click on.") - -/mob/observer/ghost/DblClickOn(var/atom/A, var/params) - if(can_reenter_corpse && mind && mind.current) - if(A == mind.current || (mind.current in A)) // double click your corpse or whatever holds it - reenter_corpse() // (cloning scanner, body bag, closet, exosuit, etc) - return - - // Things you might plausibly want to follow - if(istype(A,/atom/movable)) - start_following(A) - // Otherwise jump - else - stop_following() - forceMove(get_turf(A)) - -/mob/observer/ghost/ClickOn(var/atom/A, var/params) - if(!canClick()) return - setClickCooldown(DEFAULT_QUICK_COOLDOWN) - - // Not all of them require checking, see below - var/list/modifiers = params2list(params) - if(modifiers["alt"]) - // I'd rather call ..() but who knows what will break if we do that - var/datum/extension/on_click/alt = get_extension(A, /datum/extension/on_click/alt) - if(alt && alt.on_click(src)) - return - var/target_turf = get_turf(A) - if(target_turf) - AltClickOn(target_turf) - return - if(modifiers["shift"]) - examinate(A) - return - A.attack_ghost(src) - -// Oh by the way this didn't work with old click code which is why clicking shit didn't spam you -/atom/proc/attack_ghost(mob/observer/ghost/user as mob) - if(!istype(user)) - return - if(user.client && user.client.inquisitive_ghost) - user.examinate(src) - return - - -/obj/effect/portal/attack_ghost(mob/user as mob) - if(target) - user.forceMove(get_turf(target)) diff --git a/code/_onclick/hud/_defines.dm b/code/_onclick/hud/_defines.dm deleted file mode 100644 index 972acf5f81ee4..0000000000000 --- a/code/_onclick/hud/_defines.dm +++ /dev/null @@ -1,134 +0,0 @@ -/* - These defines specificy screen locations. For more information, see the byond documentation on the screen_loc var. - - The short version: - - Everything is encoded as strings because apparently that's how Byond rolls. - - "1,1" is the bottom left square of the user's screen. This aligns perfectly with the turf grid. - "1:2,3:4" is the square (1,3) with pixel offsets (+2, +4); slightly right and slightly above the turf grid. - Pixel offsets are used so you don't perfectly hide the turf under them, that would be crappy. - - The size of the user's screen is defined by client.view (indirectly by world.view), in our case "15x15". - Therefore, the top right corner (except during admin shenanigans) is at "15,15" -*/ - -#define ui_entire_screen "WEST,SOUTH to EAST,NORTH" - -//Lower left, persistant menu -#define ui_inventory "WEST:6,SOUTH:5" - -//Lower center, persistant menu -#define ui_sstore1 "WEST+2:10,SOUTH:5" -#define ui_id "WEST+3:12,SOUTH:5" -#define ui_belt "WEST+4:14,SOUTH:5" -#define ui_back "CENTER-2:14,SOUTH:5" -#define ui_rhand "CENTER-1:16,SOUTH:5" -#define ui_lhand "CENTER:16,SOUTH:5" -#define ui_equip "CENTER-1:16,SOUTH+1:5" -#define ui_swaphand1 "CENTER-1:16,SOUTH+1:5" -#define ui_swaphand2 "CENTER:16,SOUTH+1:5" -#define ui_storage1 "CENTER+1:16,SOUTH:5" -#define ui_storage2 "CENTER+2:16,SOUTH:5" - -#define ui_alien_head "CENTER-3:12,SOUTH:5" //aliens -#define ui_alien_oclothing "CENTER-2:14,SOUTH:5"//aliens - -#define ui_inv1 "CENTER-1,SOUTH:5" //borgs -#define ui_inv2 "CENTER,SOUTH:5" //borgs -#define ui_inv3 "CENTER+1,SOUTH:5" //borgs -#define ui_borg_store "CENTER+2,SOUTH:5" //borgs -#define ui_borg_inventory "CENTER-2,SOUTH:5"//borgs - -#define ui_monkey_mask "WEST+4:14,SOUTH:5" //monkey -#define ui_monkey_back "WEST+5:14,SOUTH:5" //monkey - -#define ui_construct_health "EAST:00,CENTER:15" //same height as humans, hugging the right border -#define ui_construct_purge "EAST:00,CENTER-1:15" -#define ui_construct_fire "EAST-1:16,CENTER+1:13" //above health, slightly to the left -#define ui_construct_pull "EAST-1:28,SOUTH+1:10" //above the zone_sel icon - -//Lower right, persistant menu -#define ui_dropbutton "EAST-4:22,SOUTH:5" -#define ui_drop_throw "EAST-1:28,SOUTH+1:7" -#define ui_pull_resist "EAST-2:26,SOUTH+1:7" -#define ui_acti "EAST-2:26,SOUTH:5" -#define ui_movi "EAST-3:24,SOUTH:5" -#define ui_zonesel "EAST-1:28,SOUTH:5" -#define ui_acti_alt "EAST-1:28,SOUTH:5" //alternative intent switcher for when the interface is hidden (F12) -#define ui_stamina "EAST-3:24,SOUTH+1:5" -#define ui_parkour "EAST-4:20,SOUTH:5" - -#define ui_borg_pull "EAST-3:24,SOUTH+1:7" -#define ui_borg_module "EAST-2:26,SOUTH+1:7" -#define ui_borg_panel "EAST-1:28,SOUTH+1:7" - -//Gun buttons -#define ui_gun1 "EAST-2:26,SOUTH+2:7" -#define ui_gun2 "EAST-1:28, SOUTH+3:7" -#define ui_gun3 "EAST-2:26,SOUTH+3:7" -#define ui_gun_select "EAST-1:28,SOUTH+2:7" -#define ui_gun4 "EAST-3:24,SOUTH+2:7" - -//Upper-middle right (damage indicators) -#define ui_toxin "EAST-1:28,NORTH-2:27" -#define ui_fire "EAST-1:28,NORTH-3:25" -#define ui_oxygen "EAST-1:28,NORTH-4:23" -#define ui_pressure "EAST-1:28,NORTH-5:21" - -#define ui_alien_toxin "EAST-1:28,NORTH-2:25" -#define ui_alien_fire "EAST-1:28,NORTH-3:25" -#define ui_alien_oxygen "EAST-1:28,NORTH-4:25" - -//Middle right (status indicators) -#define ui_nutrition "EAST-1:28,CENTER-2:11" -#define ui_nutrition_small "EAST-1:28,CENTER-2:24" -#define ui_temp "EAST-1:28,CENTER-1:13" -#define ui_health "EAST-1:28,CENTER:15" -#define ui_internal "EAST-1:28,CENTER+1:17" - //borgs -#define ui_borg_health "EAST-1:28,CENTER-1:13" //borgs have the health display where humans have the pressure damage indicator. -#define ui_alien_health "EAST-1:28,CENTER-1:13" //aliens have the health display where humans have the pressure damage indicator. - -//Pop-up inventory -#define ui_shoes "WEST+1:8,SOUTH:5" - -#define ui_iclothing "WEST:6,SOUTH+1:7" -#define ui_oclothing "WEST+1:8,SOUTH+1:7" -#define ui_gloves "WEST+2:10,SOUTH+1:7" - -#define ui_glasses "WEST:6,SOUTH+2:9" -#define ui_mask "WEST+1:8,SOUTH+2:9" -#define ui_l_ear "WEST+2:10,SOUTH+2:9" -#define ui_r_ear "WEST+2:10,SOUTH+3:11" - -#define ui_head "WEST+1:8,SOUTH+3:11" - -//Intent small buttons -#define ui_help_small "EAST-3:8,SOUTH:1" -#define ui_disarm_small "EAST-3:15,SOUTH:18" -#define ui_grab_small "EAST-3:32,SOUTH:18" -#define ui_harm_small "EAST-3:39,SOUTH:1" - -//#define ui_swapbutton "6:-16,1:5" //Unused - -//#define ui_headset "SOUTH,8" -#define ui_hand "CENTER-1:14,SOUTH:5" -#define ui_hstore1 "CENTER-2,CENTER-2" -//#define ui_resist "EAST+1,SOUTH-1" -#define ui_sleep "EAST+1, NORTH-13" -#define ui_rest "EAST+1, NORTH-14" - - -#define ui_iarrowleft "SOUTH-1,EAST-4" -#define ui_iarrowright "SOUTH-1,EAST-2" - -#define ui_spell_master "EAST-1:16,NORTH-1:16" -#define ui_genetic_master "EAST-1:16,NORTH-3:16" - -//pai -#define ui_pai_software "NORTH,WEST:6" -#define ui_pai_subsystems "NORTH,WEST+1:6" -#define ui_pai_shell "NORTH,WEST+2:6" -#define ui_pai_light "NORTH,WEST+3:6" -#define ui_pai_rest "NORTH,WEST+4:6" diff --git a/code/_onclick/hud/ability_screen_objects.dm b/code/_onclick/hud/ability_screen_objects.dm deleted file mode 100644 index 55adfc536d8d0..0000000000000 --- a/code/_onclick/hud/ability_screen_objects.dm +++ /dev/null @@ -1,412 +0,0 @@ -/obj/screen/movable/ability_master - name = "Abilities" - icon = 'icons/mob/screen_spells.dmi' - icon_state = "grey_spell_ready" - var/list/obj/screen/ability/ability_objects = list() - var/list/obj/screen/ability/spell_objects = list() - var/showing = 0 // If we're 'open' or not. - - var/open_state = "master_open" // What the button looks like when it's 'open', showing the other buttons. - var/closed_state = "master_closed" // Button when it's 'closed', hiding everything else. - - screen_loc = ui_spell_master // TODO: Rename - - var/mob/my_mob = null // The mob that possesses this hud object. - -/obj/screen/movable/ability_master/New(newloc,owner) - if(owner) - my_mob = owner - update_abilities(0, owner) - else - CRASH("ERROR: ability_master's New() was not given an owner argument. This is a bug.") - ..() - -/obj/screen/movable/ability_master/Destroy() - . = ..() - //Get rid of the ability objects. - remove_all_abilities() - ability_objects.Cut() - - // After that, remove ourselves from the mob seeing us, so we can qdel cleanly. - if(my_mob) - my_mob.ability_master = null - if(my_mob.client && my_mob.client.screen) - my_mob.client.screen -= src - my_mob = null -/obj/screen/movable/ability_master/MouseDrop() - if(showing) - return - - return ..() - -/obj/screen/movable/ability_master/Click() - if(!ability_objects.len) // If we're empty for some reason. - return - - toggle_open() - -/obj/screen/movable/ability_master/proc/toggle_open(var/forced_state = 0) - if(showing && (forced_state != 2)) // We are closing the ability master, hide the abilities. - for(var/obj/screen/ability/O in ability_objects) - if(my_mob && my_mob.client) - my_mob.client.screen -= O -// O.handle_icon_updates = 0 - showing = 0 - overlays.len = 0 - overlays.Add(closed_state) - else if(forced_state != 1) // We're opening it, show the icons. - open_ability_master() - update_abilities(1) - showing = 1 - overlays.len = 0 - overlays.Add(open_state) - update_icon() - -/obj/screen/movable/ability_master/proc/open_ability_master() - var/list/screen_loc_xy = splittext(screen_loc,",") - - //Create list of X offsets - var/list/screen_loc_X = splittext(screen_loc_xy[1],":") - var/x_position = decode_screen_X(screen_loc_X[1], my_mob) - var/x_pix = screen_loc_X[2] - - //Create list of Y offsets - var/list/screen_loc_Y = splittext(screen_loc_xy[2],":") - var/y_position = decode_screen_Y(screen_loc_Y[1], my_mob) - var/y_pix = screen_loc_Y[2] - - for(var/i = 1; i <= ability_objects.len; i++) - var/obj/screen/ability/A = ability_objects[i] - var/xpos = x_position + (x_position < 8 ? 1 : -1)*(i%7) - var/ypos = y_position + (y_position < 8 ? round(i/7) : -round(i/7)) - A.screen_loc = "[encode_screen_X(xpos, my_mob)]:[x_pix],[encode_screen_Y(ypos, my_mob)]:[y_pix]" - if(my_mob && my_mob.client) - my_mob.client.screen += A -// A.handle_icon_updates = 1 - -/obj/screen/movable/ability_master/proc/update_abilities(forced = 0, mob/user) - update_icon() - if(user && user.client) - if(!(src in user.client.screen)) - user.client.screen += src - var/i = 1 - for(var/obj/screen/ability/ability in ability_objects) - ability.update_icon(forced) - ability.maptext = "[i]" // Slot number - i++ - -/obj/screen/movable/ability_master/on_update_icon() - if(ability_objects.len) - set_invisibility(0) - else - set_invisibility(101) - -/obj/screen/movable/ability_master/proc/add_ability(var/name_given) - if(!name) return - var/obj/screen/ability/new_button = new /obj/screen/ability - new_button.ability_master = src - new_button.SetName(name_given) - new_button.ability_icon_state = name_given - new_button.update_icon(1) - ability_objects.Add(new_button) - if(my_mob.client) - toggle_open(2) //forces the icons to refresh on screen - -/obj/screen/movable/ability_master/proc/remove_ability(var/obj/screen/ability/ability) - if(!ability) - return - ability_objects.Remove(ability) - if(istype(ability,/obj/screen/ability/spell)) - spell_objects.Remove(ability) - qdel(ability) - - - if(ability_objects.len) - toggle_open(showing + 1) - update_icon() -// else -// qdel(src) - -/obj/screen/movable/ability_master/proc/remove_all_abilities() - for(var/obj/screen/ability/A in ability_objects) - remove_ability(A) - -/obj/screen/movable/ability_master/proc/get_ability_by_name(name_to_search) - for(var/obj/screen/ability/A in ability_objects) - if(A.name == name_to_search) - return A - return null - -/obj/screen/movable/ability_master/proc/get_ability_by_proc_ref(proc_ref) - for(var/obj/screen/ability/verb_based/V in ability_objects) - if(V.verb_to_call == proc_ref) - return V - return null - -/obj/screen/movable/ability_master/proc/get_ability_by_instance(var/obj/instance) - for(var/obj/screen/ability/obj_based/O in ability_objects) - if(O.object == instance) - return O - return null - -/obj/screen/movable/ability_master/proc/get_ability_by_spell(var/spell/s) - for(var/screen in spell_objects) - var/obj/screen/ability/spell/S = screen - if(S.spell == s) - return S - return null - -/mob/Login() - ..() - if(ability_master) - ability_master.update_abilities(1, src) - ability_master.toggle_open(1) - -/mob/Initialize() - . = ..() - ability_master = new /obj/screen/movable/ability_master(null,src) - -///////////ACTUAL ABILITIES//////////// -//This is what you click to do things// -/////////////////////////////////////// -/obj/screen/ability - icon = 'icons/mob/screen_spells.dmi' - icon_state = "grey_spell_base" - maptext_x = 3 - var/background_base_state = "grey" - var/ability_icon_state = null - var/obj/screen/movable/ability_master/ability_master - -/obj/screen/ability/Destroy() - if(ability_master) - ability_master.ability_objects -= src - if(ability_master.my_mob && ability_master.my_mob.client) - ability_master.my_mob.client.screen -= src - if(ability_master && !ability_master.ability_objects.len) - ability_master.update_icon() -// qdel(ability_master) - ability_master = null - return ..() - -/obj/screen/ability/on_update_icon() - overlays.Cut() - icon_state = "[background_base_state]_spell_base" - - overlays += ability_icon_state - -/obj/screen/ability/Click() - if(!usr) - return - - activate() - -// Makes the ability be triggered. The subclasses of this are responsible for carrying it out in whatever way it needs to. -/obj/screen/ability/proc/activate() - to_world("[src] had activate() called.") - return - -// This checks if the ability can be used. -/obj/screen/ability/proc/can_activate() - return 1 - -/client/verb/activate_ability(var/slot as num) - set name = ".activate_ability" -// set hidden = 1 - if(!mob) - return // Paranoid. - if(isnull(slot) || !isnum(slot)) - to_chat(src,".activate_ability requires a number as input, corrisponding to the slot you wish to use.") - return // Bad input. - if(!mob.ability_master) - return // No abilities. - if(slot > mob.ability_master.ability_objects.len || slot <= 0) - return // Out of bounds. - var/obj/screen/ability/A = mob.ability_master.ability_objects[slot] - A.activate() - -//////////Verb Abilities////////// -//Buttons to trigger verbs/procs// -////////////////////////////////// - -/obj/screen/ability/verb_based - var/verb_to_call = null - var/object_used = null - var/arguments_to_use = list() - -/obj/screen/ability/verb_based/activate() - if(object_used && verb_to_call) - call(object_used,verb_to_call)(arguments_to_use) - -/obj/screen/movable/ability_master/proc/add_verb_ability(var/object_given, var/verb_given, var/name_given, var/ability_icon_given, var/arguments) - if(!object_given) - message_admins("ERROR: add_verb_ability() was not given an object in its arguments.") - if(!verb_given) - message_admins("ERROR: add_verb_ability() was not given a verb/proc in its arguments.") - if(get_ability_by_proc_ref(verb_given)) - return // Duplicate - var/obj/screen/ability/verb_based/A = new /obj/screen/ability/verb_based() - A.ability_master = src - A.object_used = object_given - A.verb_to_call = verb_given - A.ability_icon_state = ability_icon_given - A.SetName(name_given) - if(arguments) - A.arguments_to_use = arguments - ability_objects.Add(A) - if(my_mob.client) - toggle_open(2) //forces the icons to refresh on screen - -//Changeling Abilities -/obj/screen/ability/verb_based/changeling - icon_state = "ling_spell_base" - background_base_state = "ling" - -/obj/screen/movable/ability_master/proc/add_ling_ability(var/object_given, var/verb_given, var/name_given, var/ability_icon_given, var/arguments) - if(!object_given) - message_admins("ERROR: add_ling_ability() was not given an object in its arguments.") - if(!verb_given) - message_admins("ERROR: add_ling_ability() was not given a verb/proc in its arguments.") - if(get_ability_by_proc_ref(verb_given)) - return // Duplicate - var/obj/screen/ability/verb_based/changeling/A = new /obj/screen/ability/verb_based/changeling() - A.ability_master = src - A.object_used = object_given - A.verb_to_call = verb_given - A.ability_icon_state = ability_icon_given - A.SetName(name_given) - if(arguments) - A.arguments_to_use = arguments - ability_objects.Add(A) - if(my_mob.client) - toggle_open(2) //forces the icons to refresh on screen - - -/////////Obj Abilities//////// -//Buttons to trigger objects// -////////////////////////////// - -/obj/screen/ability/obj_based - var/obj/object = null - -/obj/screen/ability/obj_based/activate() - if(object) - object.Click() - -// Technomancer -/obj/screen/ability/obj_based/technomancer - icon_state = "wiz_spell_base" - background_base_state = "wiz" - -/obj/screen/movable/ability_master/proc/add_technomancer_ability(var/obj/object_given, var/ability_icon_given) - if(!object_given) - message_admins("ERROR: add_technomancer_ability() was not given an object in its arguments.") - if(get_ability_by_instance(object_given)) - return // Duplicate - var/obj/screen/ability/obj_based/technomancer/A = new /obj/screen/ability/obj_based/technomancer() - A.ability_master = src - A.object = object_given - A.ability_icon_state = ability_icon_given - A.SetName(object_given.name) - ability_objects.Add(A) - if(my_mob.client) - toggle_open(2) //forces the icons to refresh on screen - -// Wizard -/obj/screen/ability/spell - var/spell/spell - var/spell_base - var/last_charge = 0 - var/icon/last_charged_icon - -/obj/screen/ability/spell/Destroy() - if(spell) - spell.connected_button = null - spell = null - return ..() - -/obj/screen/movable/ability_master/proc/add_spell(var/spell/spell) - if(!spell) return - - if(spell.spell_flags & NO_BUTTON) //no button to add if we don't get one - return - - if(get_ability_by_spell(spell)) - return - - var/obj/screen/ability/spell/A = new() - A.ability_master = src - A.spell = spell - A.SetName(spell.name) - - if(!spell.override_base) //if it's not set, we do basic checks - if(spell.spell_flags & CONSTRUCT_CHECK) - A.spell_base = "const" //construct spells - else - A.spell_base = "wiz" //wizard spells - else - A.spell_base = spell.override_base - A.update_charge(1) - spell_objects.Add(A) - ability_objects.Add(A) - if(my_mob.client) - toggle_open(2) //forces the icons to refresh on screen - -/mob/Life() - UNLINT(..()) - if(ability_master) - ability_master.update_spells(0) - -/obj/screen/movable/ability_master/proc/update_spells(var/forced = 0) - for(var/obj/screen/ability/spell/spell in spell_objects) - spell.update_charge(forced) - -/obj/screen/ability/spell/proc/update_charge(var/forced_update = 0) - if(!spell) - qdel(src) - return - - if(last_charge == spell.charge_counter && !forced_update) - return //nothing to see here - - overlays -= spell.hud_state - - if(spell.charge_type == Sp_RECHARGE || spell.charge_type == Sp_CHARGES) - if(spell.charge_counter < spell.charge_max) - icon_state = "[spell_base]_spell_base" - if(spell.charge_counter > 0) - var/icon/partial_charge = icon(src.icon, "[spell_base]_spell_ready") - partial_charge.Crop(1, 1, partial_charge.Width(), round(partial_charge.Height() * spell.charge_counter / spell.charge_max)) - overlays += partial_charge - if(last_charged_icon) - overlays -= last_charged_icon - last_charged_icon = partial_charge - else if(last_charged_icon) - overlays -= last_charged_icon - last_charged_icon = null - else - icon_state = "[spell_base]_spell_ready" - if(last_charged_icon) - overlays -= last_charged_icon - else - icon_state = "[spell_base]_spell_ready" - - overlays += spell.hud_state - - last_charge = spell.charge_counter - - overlays -= "silence" - if(spell.silenced) - overlays += "silence" - -/obj/screen/ability/spell/on_update_icon(var/forced = 0) - update_charge(forced) - return - -/obj/screen/ability/spell/activate() - spell.perform(usr) - -/obj/screen/movable/ability_master/proc/silence_spells(var/amount) - for(var/obj/screen/ability/spell/spell in spell_objects) - spell.spell.silenced = amount - spell.spell.process() - spell.update_charge(1) \ No newline at end of file diff --git a/code/_onclick/hud/action.dm b/code/_onclick/hud/action.dm deleted file mode 100644 index abf2c60114dd4..0000000000000 --- a/code/_onclick/hud/action.dm +++ /dev/null @@ -1,239 +0,0 @@ -#define AB_ITEM 1 -#define AB_SPELL 2 -#define AB_INNATE 3 -#define AB_GENERIC 4 -#define AB_ITEM_USE_ICON 5 - -#define AB_CHECK_RESTRAINED 1 -#define AB_CHECK_STUNNED 2 -#define AB_CHECK_LYING 4 -#define AB_CHECK_ALIVE 8 -#define AB_CHECK_INSIDE 16 - - -/datum/action - var/name = "Generic Action" - var/action_type = AB_ITEM - var/procname = null - var/atom/movable/target = null - var/check_flags = 0 - var/processing = 0 - var/active = 0 - var/obj/screen/movable/action_button/button = null - var/button_icon = 'icons/obj/action_buttons/actions.dmi' - var/button_icon_state = "default" - var/background_icon_state = "bg_default" - var/mob/living/owner - -/datum/action/New(var/Target) - target = Target - -/datum/action/Destroy() - if(owner) - Remove(owner) - return ..() - -/datum/action/proc/SetTarget(var/atom/Target) - target = Target - -/datum/action/proc/Grant(mob/living/T) - if(owner) - if(owner == T) - return - Remove(owner) - owner = T - owner.actions.Add(src) - owner.update_action_buttons() - return - -/datum/action/proc/Remove(mob/living/T) - if(button) - if(T.client) - T.client.screen -= button - qdel(button) - button = null - T.actions.Remove(src) - T.update_action_buttons() - owner = null - return - -/datum/action/proc/Trigger() - if(!Checks()) - return - switch(action_type) - if(AB_ITEM, AB_ITEM_USE_ICON) - if(target) - var/obj/item/item = target - item.ui_action_click() - //if(AB_SPELL) - // if(target) - // var/obj/effect/proc_holder/spell = target - // spell.Click() - if(AB_INNATE) - if(!active) - Activate() - else - Deactivate() - if(AB_GENERIC) - if(target && procname) - call(target,procname)(usr) - return - -/datum/action/proc/Activate() - return - -/datum/action/proc/Deactivate() - return - -/datum/action/proc/ProcessAction() - return - -/datum/action/proc/CheckRemoval(mob/living/user) // 1 if action is no longer valid for this mob and should be removed - return 0 - -/datum/action/proc/IsAvailable() - return Checks() - -/datum/action/proc/Checks()// returns 1 if all checks pass - if(!owner) - return 0 - if(check_flags & AB_CHECK_RESTRAINED) - if(owner.restrained()) - return 0 - if(check_flags & AB_CHECK_STUNNED) - if(owner.stunned) - return 0 - if(check_flags & AB_CHECK_LYING) - if(owner.lying) - return 0 - if(check_flags & AB_CHECK_ALIVE) - if(owner.stat) - return 0 - if(check_flags & AB_CHECK_INSIDE) - if(!(target in owner)) - return 0 - return 1 - -/datum/action/proc/UpdateName() - return name - -/obj/screen/movable/action_button - var/datum/action/owner - screen_loc = "WEST,NORTH" - -/obj/screen/movable/action_button/Click(location,control,params) - var/list/modifiers = params2list(params) - if(modifiers["shift"]) - moved = 0 - return 1 - if(usr.next_move >= world.time) // Is this needed ? - return - owner.Trigger() - return 1 - -/obj/screen/movable/action_button/proc/UpdateIcon() - if(!owner) - return - icon = owner.button_icon - icon_state = owner.background_icon_state - - overlays.Cut() - var/image/img - if(owner.action_type == AB_ITEM && owner.target) - var/obj/item/I = owner.target - img = image(I.icon, src , I.icon_state) - else if(owner.button_icon && owner.button_icon_state) - img = image(owner.button_icon,src,owner.button_icon_state) - img.pixel_x = 0 - img.pixel_y = 0 - overlays += img - - if(!owner.IsAvailable()) - color = rgb(128,0,0,128) - else - color = rgb(255,255,255,255) - -//Hide/Show Action Buttons ... Button -/obj/screen/movable/action_button/hide_toggle - name = "Hide Buttons" - icon = 'icons/obj/action_buttons/actions.dmi' - icon_state = "bg_default" - var/hidden = 0 - -/obj/screen/movable/action_button/hide_toggle/Click() - usr.hud_used.action_buttons_hidden = !usr.hud_used.action_buttons_hidden - - hidden = usr.hud_used.action_buttons_hidden - if(hidden) - name = "Show Buttons" - else - name = "Hide Buttons" - UpdateIcon() - usr.update_action_buttons() - - -/obj/screen/movable/action_button/hide_toggle/proc/InitialiseIcon(var/mob/living/user) - if(isalien(user)) - icon_state = "bg_alien" - else - icon_state = "bg_default" - UpdateIcon() - return - -/obj/screen/movable/action_button/hide_toggle/UpdateIcon() - overlays.Cut() - var/image/img = image(icon,src,hidden?"show":"hide") - overlays += img - return - -//This is the proc used to update all the action buttons. Properly defined in /mob/living -/mob/proc/update_action_buttons() - return - -#define AB_WEST_OFFSET 4 -#define AB_NORTH_OFFSET 26 -#define AB_MAX_COLUMNS 10 - -/datum/hud/proc/ButtonNumberToScreenCoords(var/number) // TODO : Make this zero-indexed for readabilty - var/row = round((number-1)/AB_MAX_COLUMNS) - var/col = ((number - 1)%(AB_MAX_COLUMNS)) + 1 - var/coord_col = "+[col-1]" - var/coord_col_offset = AB_WEST_OFFSET+2*col - var/coord_row = "[-1 - row]" - var/coord_row_offset = AB_NORTH_OFFSET - return "WEST[coord_col]:[coord_col_offset],NORTH[coord_row]:[coord_row_offset]" - -/datum/hud/proc/SetButtonCoords(var/obj/screen/button,var/number) - var/row = round((number-1)/AB_MAX_COLUMNS) - var/col = ((number - 1)%(AB_MAX_COLUMNS)) + 1 - button.SetTransform( - offset_x = 32 * (col - 1) + AB_WEST_OFFSET + 2 * col, - offset_y = -32 * (row + 1) + AB_NORTH_OFFSET - ) - -//Presets for item actions -/datum/action/item_action - check_flags = AB_CHECK_RESTRAINED|AB_CHECK_STUNNED|AB_CHECK_LYING|AB_CHECK_ALIVE|AB_CHECK_INSIDE - -/datum/action/item_action/CheckRemoval(mob/living/user) - return !(target in user) - -/datum/action/item_action/hands_free - check_flags = AB_CHECK_ALIVE|AB_CHECK_INSIDE - -/datum/action/item_action/organ - action_type = AB_ITEM_USE_ICON - button_icon = 'icons/obj/action_buttons/organs.dmi' - -/datum/action/item_action/organ/SetTarget(var/atom/Target) - . = ..() - var/obj/item/organ/O = target - if(istype(O)) - O.refresh_action_button() - -/datum/action/item_action/organ/augment - button_icon = 'icons/obj/augment.dmi' - -#undef AB_WEST_OFFSET -#undef AB_NORTH_OFFSET -#undef AB_MAX_COLUMNS \ No newline at end of file diff --git a/code/_onclick/hud/animal.dm b/code/_onclick/hud/animal.dm deleted file mode 100644 index 693d760ab920e..0000000000000 --- a/code/_onclick/hud/animal.dm +++ /dev/null @@ -1,7 +0,0 @@ -/mob/living/simple_animal - hud_type = /datum/hud/animal - -/datum/hud/animal/FinalizeInstantiation(var/ui_style='icons/mob/screen/white.dmi', var/ui_color = "#ffffff", var/ui_alpha = 255) - mymob.client.screen = list() - action_intent = new /obj/screen/intent() - mymob.client.screen |= action_intent \ No newline at end of file diff --git a/code/_onclick/hud/fullscreen.dm b/code/_onclick/hud/fullscreen.dm deleted file mode 100644 index c5278a52db685..0000000000000 --- a/code/_onclick/hud/fullscreen.dm +++ /dev/null @@ -1,150 +0,0 @@ - -/mob - var/list/screens = list() - -/mob/proc/set_fullscreen(condition, screen_name, screen_type, arg) - condition ? overlay_fullscreen(screen_name, screen_type, arg) : clear_fullscreen(screen_name) - -/mob/proc/overlay_fullscreen(category, type, severity) - var/obj/screen/fullscreen/screen = screens[category] - - if(screen) - if(screen.type != type) - clear_fullscreen(category, FALSE) - screen = null - else if(!severity || severity == screen.severity) - return null - - if(!screen) - screen = new type() - - screen.icon_state = "[initial(screen.icon_state)][severity]" - screen.severity = severity - - screens[category] = screen - if(client && (stat != DEAD || screen.allstate)) - client.screen += screen - return screen - -/mob/proc/clear_fullscreen(category, animated = 10) - var/obj/screen/fullscreen/screen = screens[category] - if(!screen) - return - - screens -= category - - if(animated) - spawn(0) - animate(screen, alpha = 0, time = animated) - sleep(animated) - if(client) - client.screen -= screen - qdel(screen) - else - if(client) - client.screen -= screen - qdel(screen) - -/mob/proc/clear_fullscreens() - for(var/category in screens) - clear_fullscreen(category) - -/mob/proc/hide_fullscreens() - if(client) - for(var/category in screens) - client.screen -= screens[category] - -/mob/proc/reload_fullscreen() - if(client) - for(var/category in screens) - client.screen |= screens[category] - -/obj/screen/fullscreen - icon = 'icons/mob/screen_full.dmi' - icon_state = "default" - screen_loc = "CENTER-7,CENTER-7" - plane = FULLSCREEN_PLANE - layer = FULLSCREEN_LAYER - mouse_opacity = 0 - var/severity = 0 - var/allstate = 0 //shows if it should show up for dead people too - -/obj/screen/fullscreen/Destroy() - severity = 0 - return ..() - -/obj/screen/fullscreen/brute - icon_state = "brutedamageoverlay" - layer = DAMAGE_LAYER - -/obj/screen/fullscreen/oxy - icon_state = "oxydamageoverlay" - layer = DAMAGE_LAYER - -/obj/screen/fullscreen/crit - icon_state = "passage" - layer = CRIT_LAYER - -/obj/screen/fullscreen/blind - icon_state = "blackimageoverlay" - layer = BLIND_LAYER - -/obj/screen/fullscreen/blackout - icon = 'icons/mob/screen1.dmi' - icon_state = "black" - screen_loc = "WEST,SOUTH to EAST,NORTH" - layer = BLIND_LAYER - -/obj/screen/fullscreen/impaired - icon_state = "impairedoverlay" - layer = IMPAIRED_LAYER - -/obj/screen/fullscreen/blurry - icon = 'icons/mob/screen1.dmi' - screen_loc = "WEST,SOUTH to EAST,NORTH" - icon_state = "blurry" - alpha = 100 - -/obj/screen/fullscreen/flash - icon = 'icons/mob/screen1.dmi' - screen_loc = "WEST,SOUTH to EAST,NORTH" - icon_state = "flash" - -/obj/screen/fullscreen/flash/noise - icon_state = "noise" - -/obj/screen/fullscreen/high - icon = 'icons/mob/screen1.dmi' - screen_loc = "WEST,SOUTH to EAST,NORTH" - icon_state = "druggy" - -/obj/screen/fullscreen/noise - icon = 'icons/effects/static.dmi' - icon_state = "1 light" - screen_loc = ui_entire_screen - alpha = 127 - -/obj/screen/fullscreen/fadeout - icon = 'icons/mob/screen1.dmi' - icon_state = "black" - screen_loc = ui_entire_screen - alpha = 0 - allstate = 1 - -/obj/screen/fullscreen/fadeout/Initialize() - . = ..() - animate(src, alpha = 255, time = 10) - -/obj/screen/fullscreen/scanline - icon = 'icons/effects/static.dmi' - icon_state = "scanlines" - screen_loc = ui_entire_screen - alpha = 50 - -/obj/screen/fullscreen/fishbed - icon_state = "fishbed" - allstate = 1 - -/obj/screen/fullscreen/pain - icon_state = "brutedamageoverlay6" - alpha = 0 \ No newline at end of file diff --git a/code/_onclick/hud/global_hud.dm b/code/_onclick/hud/global_hud.dm deleted file mode 100644 index 365d6b9a79846..0000000000000 --- a/code/_onclick/hud/global_hud.dm +++ /dev/null @@ -1,38 +0,0 @@ -/* - The global hud: - Uses the same visual objects for all players. -*/ - -GLOBAL_DATUM_INIT(global_hud, /datum/global_hud, new()) - -/datum/global_hud - var/obj/screen/nvg - var/obj/screen/thermal - var/obj/screen/meson - var/obj/screen/science - var/obj/screen/holomap - -/datum/global_hud/proc/setup_overlay(var/icon_state) - var/obj/screen/screen = new /obj/screen() - screen.screen_loc = "1,1" - screen.icon = 'icons/obj/hud_full.dmi' - screen.icon_state = icon_state - screen.mouse_opacity = 0 - - return screen - -/datum/global_hud/New() - nvg = setup_overlay("nvg_hud") - thermal = setup_overlay("thermal_hud") - meson = setup_overlay("meson_hud") - science = setup_overlay("science_hud") - - //Holomap screen object is invisible and work - //By setting it as n images location, without icon changes - //Make it part of global hud since it's inmutable - holomap = new /obj/screen() - holomap.name = "holomap" - holomap.icon = null - holomap.layer = HUD_BASE_LAYER - holomap.screen_loc = UI_HOLOMAP - holomap.mouse_opacity = 0 diff --git a/code/_onclick/hud/gun_mode.dm b/code/_onclick/hud/gun_mode.dm deleted file mode 100644 index e7f5b129c376f..0000000000000 --- a/code/_onclick/hud/gun_mode.dm +++ /dev/null @@ -1,66 +0,0 @@ -/obj/screen/gun - name = "gun" - icon = 'icons/mob/screen1.dmi' - master = null - dir = 2 - -/obj/screen/gun/Click(location, control, params) - if(!usr) - return - return 1 - -/obj/screen/gun/move - name = "Allow Movement" - icon_state = "no_walk1" - screen_loc = ui_gun2 - -/obj/screen/gun/move/Click(location, control, params) - if(..()) - var/mob/living/user = usr - if(istype(user)) - if(!user.aiming) user.aiming = new(user) - user.aiming.toggle_permission(TARGET_CAN_MOVE) - return 1 - return 0 - -/obj/screen/gun/item - name = "Allow Item Use" - icon_state = "no_item1" - screen_loc = ui_gun1 - -/obj/screen/gun/item/Click(location, control, params) - if(..()) - var/mob/living/user = usr - if(istype(user)) - if(!user.aiming) user.aiming = new(user) - user.aiming.toggle_permission(TARGET_CAN_CLICK) - return 1 - return 0 - -/obj/screen/gun/mode - name = "Toggle Gun Mode" - icon_state = "gun0" - screen_loc = ui_gun_select - -/obj/screen/gun/mode/Click(location, control, params) - if(..()) - var/mob/living/user = usr - if(istype(user)) - if(!user.aiming) user.aiming = new(user) - user.aiming.toggle_active() - return 1 - return 0 - -/obj/screen/gun/radio - name = "Disallow Radio Use" - icon_state = "no_radio1" - screen_loc = ui_gun4 - -/obj/screen/gun/radio/Click(location, control, params) - if(..()) - var/mob/living/user = usr - if(istype(user)) - if(!user.aiming) user.aiming = new(user) - user.aiming.toggle_permission(TARGET_CAN_RADIO) - return 1 - return 0 diff --git a/code/_onclick/hud/hud.dm b/code/_onclick/hud/hud.dm deleted file mode 100644 index ba635938e80e8..0000000000000 --- a/code/_onclick/hud/hud.dm +++ /dev/null @@ -1,276 +0,0 @@ -/* - The hud datum - Used to show and hide huds for all the different mob types, - including inventories and item quick actions. -*/ - -/mob - var/hud_type = null - var/datum/hud/hud_used = null - -/mob/proc/InitializeHud() - if(hud_used) - qdel(hud_used) - if(hud_type) - hud_used = new hud_type(src) - else - hud_used = new /datum/hud - -/datum/hud - var/mob/mymob - - var/hud_shown = 1 //Used for the HUD toggle (F12) - var/inventory_shown = 1 //the inventory - var/show_intent_icons = 0 - var/hotkey_ui_hidden = 0 //This is to hide the buttons that can be used via hotkeys. (hotkeybuttons list of buttons) - - var/obj/screen/lingchemdisplay - var/obj/screen/r_hand_hud_object - var/obj/screen/l_hand_hud_object - var/obj/screen/action_intent - var/obj/screen/move_intent - var/obj/screen/stamina/stamina_bar - - var/list/adding - var/list/other - var/list/obj/screen/hotkeybuttons - - var/obj/screen/movable/action_button/hide_toggle/hide_actions_toggle - var/action_buttons_hidden = 0 - -/datum/hud/New(mob/owner) - mymob = owner - instantiate() - ..() - -/datum/hud/Destroy() - . = ..() - stamina_bar = null - lingchemdisplay = null - r_hand_hud_object = null - l_hand_hud_object = null - action_intent = null - move_intent = null - adding = null - other = null - hotkeybuttons = null - mymob = null - -/datum/hud/proc/update_stamina() - if(mymob && stamina_bar) - stamina_bar.invisibility = INVISIBILITY_MAXIMUM - var/stamina = mymob.get_stamina() - if(stamina < 100) - stamina_bar.invisibility = 0 - stamina_bar.icon_state = "priv_prog_bar_[Floor(stamina/5)*5]" - -/datum/hud/proc/hidden_inventory_update() - if(!mymob) return - if(ishuman(mymob)) - var/mob/living/carbon/human/H = mymob - for(var/gear_slot in H.species.hud.gear) - var/list/hud_data = H.species.hud.gear[gear_slot] - if(inventory_shown && hud_shown) - switch(hud_data["slot"]) - if(slot_head) - if(H.head) H.head.screen_loc = hud_data["loc"] - if(slot_shoes) - if(H.shoes) H.shoes.screen_loc = hud_data["loc"] - if(slot_l_ear) - if(H.l_ear) H.l_ear.screen_loc = hud_data["loc"] - if(slot_r_ear) - if(H.r_ear) H.r_ear.screen_loc = hud_data["loc"] - if(slot_gloves) - if(H.gloves) H.gloves.screen_loc = hud_data["loc"] - if(slot_glasses) - if(H.glasses) H.glasses.screen_loc = hud_data["loc"] - if(slot_w_uniform) - if(H.w_uniform) H.w_uniform.screen_loc = hud_data["loc"] - if(slot_wear_suit) - if(H.wear_suit) H.wear_suit.screen_loc = hud_data["loc"] - if(slot_wear_mask) - if(H.wear_mask) H.wear_mask.screen_loc = hud_data["loc"] - else - switch(hud_data["slot"]) - if(slot_head) - if(H.head) H.head.screen_loc = null - if(slot_shoes) - if(H.shoes) H.shoes.screen_loc = null - if(slot_l_ear) - if(H.l_ear) H.l_ear.screen_loc = null - if(slot_r_ear) - if(H.r_ear) H.r_ear.screen_loc = null - if(slot_gloves) - if(H.gloves) H.gloves.screen_loc = null - if(slot_glasses) - if(H.glasses) H.glasses.screen_loc = null - if(slot_w_uniform) - if(H.w_uniform) H.w_uniform.screen_loc = null - if(slot_wear_suit) - if(H.wear_suit) H.wear_suit.screen_loc = null - if(slot_wear_mask) - if(H.wear_mask) H.wear_mask.screen_loc = null - - -/datum/hud/proc/persistant_inventory_update() - if(!mymob) - return - - if(ishuman(mymob)) - var/mob/living/carbon/human/H = mymob - for(var/gear_slot in H.species.hud.gear) - var/list/hud_data = H.species.hud.gear[gear_slot] - if(hud_shown) - switch(hud_data["slot"]) - if(slot_s_store) - if(H.s_store) H.s_store.screen_loc = hud_data["loc"] - if(slot_wear_id) - if(H.wear_id) H.wear_id.screen_loc = hud_data["loc"] - if(slot_belt) - if(H.belt) H.belt.screen_loc = hud_data["loc"] - if(slot_back) - if(H.back) H.back.screen_loc = hud_data["loc"] - if(slot_l_store) - if(H.l_store) H.l_store.screen_loc = hud_data["loc"] - if(slot_r_store) - if(H.r_store) H.r_store.screen_loc = hud_data["loc"] - else - switch(hud_data["slot"]) - if(slot_s_store) - if(H.s_store) H.s_store.screen_loc = null - if(slot_wear_id) - if(H.wear_id) H.wear_id.screen_loc = null - if(slot_belt) - if(H.belt) H.belt.screen_loc = null - if(slot_back) - if(H.back) H.back.screen_loc = null - if(slot_l_store) - if(H.l_store) H.l_store.screen_loc = null - if(slot_r_store) - if(H.r_store) H.r_store.screen_loc = null - - -/datum/hud/proc/instantiate() - if(!ismob(mymob)) return 0 - if(!mymob.client) return 0 - var/ui_style = ui_style2icon(mymob.client.prefs.UI_style) - var/ui_color = mymob.client.prefs.UI_style_color - var/ui_alpha = mymob.client.prefs.UI_style_alpha - - - FinalizeInstantiation(ui_style, ui_color, ui_alpha) - -/datum/hud/proc/FinalizeInstantiation(var/ui_style, var/ui_color, var/ui_alpha) - return - -//Triggered when F12 is pressed (Unless someone changed something in the DMF) -/mob/verb/button_pressed_F12(var/full = 0 as null) - set name = "F12" - set hidden = 1 - - if(!hud_used) - to_chat(usr, "This mob type does not use a HUD.") - return - - if(!ishuman(src)) - to_chat(usr, "Inventory hiding is currently only supported for human mobs, sorry.") - return - - if(!client) return - if(client.view != world.view) - return - if(hud_used.hud_shown) - hud_used.hud_shown = 0 - if(src.hud_used.adding) - src.client.screen -= src.hud_used.adding - if(src.hud_used.other) - src.client.screen -= src.hud_used.other - if(src.hud_used.hotkeybuttons) - src.client.screen -= src.hud_used.hotkeybuttons - - //Due to some poor coding some things need special treatment: - //These ones are a part of 'adding', 'other' or 'hotkeybuttons' but we want them to stay - if(!full) - src.client.screen += src.hud_used.l_hand_hud_object //we want the hands to be visible - src.client.screen += src.hud_used.r_hand_hud_object //we want the hands to be visible - src.client.screen += src.hud_used.action_intent //we want the intent swticher visible - src.hud_used.action_intent.screen_loc = ui_acti_alt //move this to the alternative position, where zone_select usually is. - else - src.client.screen -= src.healths - src.client.screen -= src.internals - src.client.screen -= src.gun_setting_icon - - //These ones are not a part of 'adding', 'other' or 'hotkeybuttons' but we want them gone. - src.client.screen -= src.zone_sel //zone_sel is a mob variable for some reason. - - else - hud_used.hud_shown = 1 - if(src.hud_used.adding) - src.client.screen += src.hud_used.adding - if(src.hud_used.other && src.hud_used.inventory_shown) - src.client.screen += src.hud_used.other - if(src.hud_used.hotkeybuttons && !src.hud_used.hotkey_ui_hidden) - src.client.screen += src.hud_used.hotkeybuttons - if(src.healths) - src.client.screen |= src.healths - if(src.internals) - src.client.screen |= src.internals - if(src.gun_setting_icon) - src.client.screen |= src.gun_setting_icon - - src.hud_used.action_intent.screen_loc = ui_acti //Restore intent selection to the original position - src.client.screen += src.zone_sel //This one is a special snowflake - - hud_used.hidden_inventory_update() - hud_used.persistant_inventory_update() - update_action_buttons() - -//Similar to button_pressed_F12() but keeps zone_sel, gun_setting_icon, and healths. -/mob/proc/toggle_zoom_hud() - if(!hud_used) - return - if(!ishuman(src)) - return - if(!client) - return - if(client.view != world.view) - return - - if(hud_used.hud_shown) - hud_used.hud_shown = 0 - if(src.hud_used.adding) - src.client.screen -= src.hud_used.adding - if(src.hud_used.other) - src.client.screen -= src.hud_used.other - if(src.hud_used.hotkeybuttons) - src.client.screen -= src.hud_used.hotkeybuttons - src.client.screen -= src.internals - src.client.screen += src.hud_used.action_intent //we want the intent swticher visible - else - hud_used.hud_shown = 1 - if(src.hud_used.adding) - src.client.screen += src.hud_used.adding - if(src.hud_used.other && src.hud_used.inventory_shown) - src.client.screen += src.hud_used.other - if(src.hud_used.hotkeybuttons && !src.hud_used.hotkey_ui_hidden) - src.client.screen += src.hud_used.hotkeybuttons - if(src.internals) - src.client.screen |= src.internals - src.hud_used.action_intent.screen_loc = ui_acti //Restore intent selection to the original position - - hud_used.hidden_inventory_update() - hud_used.persistant_inventory_update() - update_action_buttons() - -/mob/proc/add_click_catcher() - client.screen |= GLOB.click_catchers - -/mob/new_player/add_click_catcher() - return - -/obj/screen/stamina - name = "stamina" - icon = 'icons/effects/progessbar.dmi' - icon_state = "prog_bar_100" - invisibility = INVISIBILITY_MAXIMUM - screen_loc = ui_stamina diff --git a/code/_onclick/hud/human.dm b/code/_onclick/hud/human.dm deleted file mode 100644 index 2b0c6f1ba7ce5..0000000000000 --- a/code/_onclick/hud/human.dm +++ /dev/null @@ -1,398 +0,0 @@ -/mob/living/carbon/human/hud_type = /datum/hud/human - -/datum/hud/human/FinalizeInstantiation(var/ui_style='icons/mob/screen1_White.dmi', var/ui_color = "#ffffff", var/ui_alpha = 255) - var/mob/living/carbon/human/target = mymob - var/datum/hud_data/hud_data - if(!istype(target)) - hud_data = new() - else - hud_data = target.species.hud - - if(hud_data.icon) - ui_style = hud_data.icon - - adding = list() - other = list() - src.hotkeybuttons = list() //These can be disabled for hotkey usersx - - var/list/hud_elements = list() - var/obj/screen/using - var/obj/screen/inventory/inv_box - - stamina_bar = new - adding += stamina_bar - - // Draw the various inventory equipment slots. - var/has_hidden_gear - for(var/gear_slot in hud_data.gear) - - inv_box = new /obj/screen/inventory() - inv_box.icon = ui_style - inv_box.color = ui_color - inv_box.alpha = ui_alpha - - var/list/slot_data = hud_data.gear[gear_slot] - inv_box.SetName(gear_slot) - inv_box.screen_loc = slot_data["loc"] - inv_box.slot_id = slot_data["slot"] - inv_box.icon_state = slot_data["state"] - - if(slot_data["dir"]) - inv_box.set_dir(slot_data["dir"]) - - if(slot_data["toggle"]) - src.other += inv_box - has_hidden_gear = 1 - else - src.adding += inv_box - - if(has_hidden_gear) - using = new /obj/screen() - using.SetName("toggle") - using.icon = ui_style - using.icon_state = "other" - using.screen_loc = ui_inventory - using.color = ui_color - using.alpha = ui_alpha - src.adding += using - - // Draw the attack intent dialogue. - if(hud_data.has_a_intent) - - using = new /obj/screen/intent() - src.adding += using - action_intent = using - - hud_elements |= using - - if(hud_data.has_m_intent) - using = new /obj/screen/movement() - using.SetName("movement method") - using.icon = ui_style - using.icon_state = mymob.move_intent.hud_icon_state - using.screen_loc = ui_movi - using.color = ui_color - using.alpha = ui_alpha - src.adding += using - move_intent = using - - if(hud_data.has_drop) - using = new /obj/screen() - using.SetName("drop") - using.icon = ui_style - using.icon_state = "act_drop" - using.screen_loc = ui_drop_throw - using.color = ui_color - using.alpha = ui_alpha - src.hotkeybuttons += using - - if(hud_data.has_hands) - - using = new /obj/screen() - using.SetName("equip") - using.icon = ui_style - using.icon_state = "act_equip" - using.screen_loc = ui_equip - using.color = ui_color - using.alpha = ui_alpha - src.adding += using - - inv_box = new /obj/screen/inventory() - inv_box.SetName("r_hand") - inv_box.icon = ui_style - inv_box.icon_state = "r_hand_inactive" - if(mymob && !mymob.hand) //This being 0 or null means the right hand is in use - inv_box.icon_state = "r_hand_active" - inv_box.screen_loc = ui_rhand - inv_box.slot_id = slot_r_hand - inv_box.color = ui_color - inv_box.alpha = ui_alpha - - src.r_hand_hud_object = inv_box - src.adding += inv_box - - inv_box = new /obj/screen/inventory() - inv_box.SetName("l_hand") - inv_box.icon = ui_style - inv_box.icon_state = "l_hand_inactive" - if(mymob && mymob.hand) //This being 1 means the left hand is in use - inv_box.icon_state = "l_hand_active" - inv_box.screen_loc = ui_lhand - inv_box.slot_id = slot_l_hand - inv_box.color = ui_color - inv_box.alpha = ui_alpha - src.l_hand_hud_object = inv_box - src.adding += inv_box - - using = new /obj/screen/inventory() - using.SetName("hand") - using.icon = ui_style - using.icon_state = "hand1" - using.screen_loc = ui_swaphand1 - using.color = ui_color - using.alpha = ui_alpha - src.adding += using - - using = new /obj/screen/inventory() - using.SetName("hand") - using.icon = ui_style - using.icon_state = "hand2" - using.screen_loc = ui_swaphand2 - using.color = ui_color - using.alpha = ui_alpha - src.adding += using - - if(hud_data.has_resist) - using = new /obj/screen() - using.SetName("resist") - using.icon = ui_style - using.icon_state = "act_resist" - using.screen_loc = ui_pull_resist - using.color = ui_color - using.alpha = ui_alpha - src.hotkeybuttons += using - - if(hud_data.has_throw) - mymob.throw_icon = new /obj/screen() - mymob.throw_icon.icon = ui_style - mymob.throw_icon.icon_state = "act_throw_off" - mymob.throw_icon.SetName("throw") - mymob.throw_icon.screen_loc = ui_drop_throw - mymob.throw_icon.color = ui_color - mymob.throw_icon.alpha = ui_alpha - src.hotkeybuttons += mymob.throw_icon - hud_elements |= mymob.throw_icon - - mymob.pullin = new /obj/screen() - mymob.pullin.icon = ui_style - mymob.pullin.icon_state = "pull0" - mymob.pullin.SetName("pull") - mymob.pullin.screen_loc = ui_pull_resist - src.hotkeybuttons += mymob.pullin - hud_elements |= mymob.pullin - - if(hud_data.has_internals) - mymob.internals = new /obj/screen() - mymob.internals.icon = ui_style - mymob.internals.icon_state = "internal0" - mymob.internals.SetName("internal") - mymob.internals.screen_loc = ui_internal - hud_elements |= mymob.internals - - if(hud_data.has_warnings) - mymob.healths = new /obj/screen() - mymob.healths.icon = ui_style - mymob.healths.icon_state = "health0" - mymob.healths.SetName("health") - mymob.healths.screen_loc = ui_health - hud_elements |= mymob.healths - - mymob.oxygen = new /obj/screen/oxygen() - mymob.oxygen.icon = 'icons/mob/status_indicators.dmi' - mymob.oxygen.icon_state = "oxy0" - mymob.oxygen.SetName("oxygen") - mymob.oxygen.screen_loc = ui_temp - hud_elements |= mymob.oxygen - - mymob.toxin = new /obj/screen/toxins() - mymob.toxin.icon = 'icons/mob/status_indicators.dmi' - mymob.toxin.icon_state = "tox0" - mymob.toxin.SetName("toxin") - mymob.toxin.screen_loc = ui_temp - hud_elements |= mymob.toxin - - mymob.fire = new /obj/screen() - mymob.fire.icon = ui_style - mymob.fire.icon_state = "fire0" - mymob.fire.SetName("fire") - mymob.fire.screen_loc = ui_fire - hud_elements |= mymob.fire - - if(hud_data.has_pressure) - mymob.pressure = new /obj/screen/pressure() - mymob.pressure.icon = 'icons/mob/status_indicators.dmi' - mymob.pressure.icon_state = "pressure0" - mymob.pressure.SetName("pressure") - mymob.pressure.screen_loc = ui_temp - hud_elements |= mymob.pressure - - if(hud_data.has_bodytemp) - mymob.bodytemp = new /obj/screen/bodytemp() - mymob.bodytemp.icon = 'icons/mob/status_indicators.dmi' - mymob.bodytemp.icon_state = "temp1" - mymob.bodytemp.SetName("body temperature") - mymob.bodytemp.screen_loc = ui_temp - hud_elements |= mymob.bodytemp - - if(target.isSynthetic()) - target.cells = new /obj/screen() - target.cells.icon = 'icons/mob/screen1_robot.dmi' - target.cells.icon_state = "charge-empty" - target.cells.SetName("cell") - target.cells.screen_loc = ui_nutrition - hud_elements |= target.cells - - else if(hud_data.has_nutrition) - mymob.nutrition_icon = new /obj/screen/food() - mymob.nutrition_icon.icon = 'icons/mob/status_hunger.dmi' - mymob.nutrition_icon.pixel_w = 8 - mymob.nutrition_icon.icon_state = "nutrition1" - mymob.nutrition_icon.SetName("nutrition") - mymob.nutrition_icon.screen_loc = ui_nutrition_small - hud_elements |= mymob.nutrition_icon - - mymob.hydration_icon = new /obj/screen/drink() - mymob.hydration_icon.icon = 'icons/mob/status_hunger.dmi' - mymob.hydration_icon.icon_state = "hydration1" - mymob.hydration_icon.SetName("hydration") - mymob.hydration_icon.screen_loc = ui_nutrition_small - hud_elements |= mymob.hydration_icon - - mymob.pain = new /obj/screen/fullscreen/pain( null ) - hud_elements |= mymob.pain - - mymob.zone_sel = new /obj/screen/zone_sel( null ) - mymob.zone_sel.icon = ui_style - mymob.zone_sel.color = ui_color - mymob.zone_sel.alpha = ui_alpha - mymob.zone_sel.overlays.Cut() - mymob.zone_sel.overlays += image('icons/mob/zone_sel.dmi', "[mymob.zone_sel.selecting]") - hud_elements |= mymob.zone_sel - - //Handle the gun settings buttons - mymob.gun_setting_icon = new /obj/screen/gun/mode(null) - mymob.gun_setting_icon.icon = ui_style - mymob.gun_setting_icon.color = ui_color - mymob.gun_setting_icon.alpha = ui_alpha - hud_elements |= mymob.gun_setting_icon - - mymob.item_use_icon = new /obj/screen/gun/item(null) - mymob.item_use_icon.icon = ui_style - mymob.item_use_icon.color = ui_color - mymob.item_use_icon.alpha = ui_alpha - - mymob.gun_move_icon = new /obj/screen/gun/move(null) - mymob.gun_move_icon.icon = ui_style - mymob.gun_move_icon.color = ui_color - mymob.gun_move_icon.alpha = ui_alpha - - mymob.radio_use_icon = new /obj/screen/gun/radio(null) - mymob.radio_use_icon.icon = ui_style - mymob.radio_use_icon.color = ui_color - mymob.radio_use_icon.alpha = ui_alpha - - if(ishuman(mymob)) - target.film_grain = new /obj/screen/filmgraim(null) - target.film_grain.screen_loc = ui_entire_screen - target.film_grain.layer = FULLSCREEN_LAYER - target.film_grain.mouse_opacity = 0 - if(GLOB.film_grain_stat) - hud_elements |= target.film_grain - - target.parkour = new /obj/screen/parkour(null) - target.parkour.screen_loc = ui_parkour - target.parkour.passthrought = image(target.parkour.icon, "passthrought") - hud_elements |= target.parkour - - mymob.client.screen = list() - - mymob.client.screen += hud_elements - mymob.client.screen += src.adding + src.hotkeybuttons - inventory_shown = 0 - -/mob/living/carbon/human/verb/toggle_hotkey_verbs() - set category = "OOC" - set name = "Toggle hotkey buttons" - set desc = "This disables or enables the user interface buttons which can be used with hotkeys." - - if(hud_used.hotkey_ui_hidden) - client.screen += hud_used.hotkeybuttons - hud_used.hotkey_ui_hidden = 0 - else - client.screen -= hud_used.hotkeybuttons - hud_used.hotkey_ui_hidden = 1 - -// Yes, these use icon state. Yes, these are terrible. The alternative is duplicating -// a bunch of fairly blobby logic for every click override on these objects. - -/obj/screen/food/Click(var/location, var/control, var/params) - if(istype(usr) && usr.nutrition_icon == src) - switch(icon_state) - if("nutrition0") - to_chat(usr, SPAN_WARNING("You are completely stuffed.")) - if("nutrition1") - to_chat(usr, SPAN_NOTICE("You are not hungry.")) - if("nutrition2") - to_chat(usr, SPAN_NOTICE("You are a bit peckish.")) - if("nutrition3") - to_chat(usr, SPAN_WARNING("You are quite hungry.")) - if("nutrition4") - to_chat(usr, SPAN_DANGER("You are starving!")) - -/obj/screen/drink/Click(var/location, var/control, var/params) - if(istype(usr) && usr.hydration_icon == src) - switch(icon_state) - if("hydration0") - to_chat(usr, SPAN_WARNING("You are overhydrated.")) - if("hydration1") - to_chat(usr, SPAN_NOTICE("You are not thirsty.")) - if("hydration2") - to_chat(usr, SPAN_NOTICE("You are a bit thirsty.")) - if("hydration3") - to_chat(usr, SPAN_WARNING("You are quite thirsty.")) - if("hydration4") - to_chat(usr, SPAN_DANGER("You are dying of thirst!")) - -/obj/screen/bodytemp/Click(var/location, var/control, var/params) - if(istype(usr) && usr.bodytemp == src) - switch(icon_state) - if("temp4") - to_chat(usr, SPAN_DANGER("You are being cooked alive!")) - if("temp3") - to_chat(usr, SPAN_DANGER("Your body is burning up!")) - if("temp2") - to_chat(usr, SPAN_DANGER("You are overheating.")) - if("temp1") - to_chat(usr, SPAN_WARNING("You are uncomfortably hot.")) - if("temp-4") - to_chat(usr, SPAN_DANGER("You are being frozen solid!")) - if("temp-3") - to_chat(usr, SPAN_DANGER("You are freezing cold!")) - if("temp-2") - to_chat(usr, SPAN_WARNING("You are dangerously chilled")) - if("temp-1") - to_chat(usr, SPAN_NOTICE("You are uncomfortably cold.")) - else - to_chat(usr, SPAN_NOTICE("Your body is at a comfortable temperature.")) - -/obj/screen/pressure/Click(var/location, var/control, var/params) - if(istype(usr) && usr.pressure == src) - switch(icon_state) - if("pressure2") - to_chat(usr, SPAN_DANGER("The air pressure here is crushing!")) - if("pressure1") - to_chat(usr, SPAN_WARNING("The air pressure here is dangerously high.")) - if("pressure-1") - to_chat(usr, SPAN_WARNING("The air pressure here is dangerously low.")) - if("pressure-2") - to_chat(usr, SPAN_DANGER("There is nearly no air pressure here!")) - else - to_chat(usr, SPAN_NOTICE("The local air pressure is comfortable.")) - -/obj/screen/toxins/Click(var/location, var/control, var/params) - if(istype(usr) && usr.toxin == src) - if(icon_state == "tox0") - to_chat(usr, SPAN_NOTICE("The air is clear of toxins.")) - else - to_chat(usr, SPAN_DANGER("The air is eating away at your skin!")) - -/obj/screen/oxygen/Click(var/location, var/control, var/params) - if(istype(usr) && usr.oxygen == src) - if(icon_state == "oxy0") - to_chat(usr, SPAN_NOTICE("You are breathing easy.")) - else - to_chat(usr, SPAN_DANGER("You cannot breathe!")) - -/obj/screen/movement/Click(var/location, var/control, var/params) - if(istype(usr)) - usr.set_next_usable_move_intent() diff --git a/code/_onclick/hud/movable_screen_objects.dm b/code/_onclick/hud/movable_screen_objects.dm deleted file mode 100644 index 778b19ab630a2..0000000000000 --- a/code/_onclick/hud/movable_screen_objects.dm +++ /dev/null @@ -1,132 +0,0 @@ - -////////////////////////// -//Movable Screen Objects// -// By RemieRichards // -////////////////////////// - - -//Movable Screen Object -//Not tied to the grid, places it's center where the cursor is - -/obj/screen/movable - var/snap2grid = FALSE - var/moved = FALSE - -//Snap Screen Object -//Tied to the grid, snaps to the nearest turf - -/obj/screen/movable/snap - snap2grid = TRUE - - -/obj/screen/movable/MouseDrop(over_object, src_location, over_location, src_control, over_control, params) - var/list/PM = params2list(params) - - //No screen-loc information? abort. - if(!PM || !PM["screen-loc"]) - return - - //Split screen-loc up into X+Pixel_X and Y+Pixel_Y - var/list/screen_loc_params = splittext(PM["screen-loc"], ",") - - //Split X+Pixel_X up into list(X, Pixel_X) - var/list/screen_loc_X = splittext(screen_loc_params[1],":") - screen_loc_X[1] = encode_screen_X(text2num(screen_loc_X[1]), usr) - //Split Y+Pixel_Y up into list(Y, Pixel_Y) - var/list/screen_loc_Y = splittext(screen_loc_params[2],":") - screen_loc_Y[1] = encode_screen_Y(text2num(screen_loc_Y[1]), usr) - - if(snap2grid) //Discard Pixel Values - screen_loc = "[screen_loc_X[1]],[screen_loc_Y[1]]" - - else //Normalise Pixel Values (So the object drops at the center of the mouse, not 16 pixels off) - var/pix_X = text2num(screen_loc_X[2]) - 16 - var/pix_Y = text2num(screen_loc_Y[2]) - 16 - screen_loc = "[screen_loc_X[1]]:[pix_X],[screen_loc_Y[1]]:[pix_Y]" - -/obj/screen/movable/proc/encode_screen_X(var/X, var/mob/viewer) - var/view = viewer.client ? viewer.client.view : world.view - if(X > view+1) - . = "EAST-[view*2 + 1-X]" - else if(X < view+1) - . = "WEST+[X-1]" - else - . = "CENTER" - -/obj/screen/movable/proc/decode_screen_X(var/X, var/mob/viewer) - var/view = viewer.client ? viewer.client.view : world.view - //Find EAST/WEST implementations - if(findtext(X,"EAST-")) - var/num = text2num(copytext_char(X,6)) //Trim EAST- - if(!num) - num = 0 - . = view*2 + 1 - num - else if(findtext(X,"WEST+")) - var/num = text2num(copytext_char(X,6)) //Trim WEST+ - if(!num) - num = 0 - . = num+1 - else if(findtext(X,"CENTER")) - . = view+1 - -/obj/screen/movable/proc/encode_screen_Y(var/Y, var/mob/viewer) - var/view = viewer.client ? viewer.client.view : world.view - if(Y > view+1) - . = "NORTH-[view*2 + 1-Y]" - else if(Y < viewer.client.view+1) - . = "SOUTH+[Y-1]" - else - . = "CENTER" - -/obj/screen/movable/proc/decode_screen_Y(var/Y, var/mob/viewer) - var/view = viewer.client ? viewer.client.view : world.view - if(findtext(Y,"NORTH-")) - var/num = text2num(copytext_char(Y,7)) //Trim NORTH- - if(!num) - num = 0 - . = view*2 + 1 - num - else if(findtext(Y,"SOUTH+")) - var/num = text2num(copytext_char(Y,7)) //Time SOUTH+ - if(!num) - num = 0 - . = num+1 - else if(findtext(Y,"CENTER")) - . = view+1 - -//Debug procs -/client/proc/test_movable_UI() - set category = "Debug" - set name = "Spawn Movable UI Object" - - var/obj/screen/movable/M = new() - M.SetName("Movable UI Object") - M.icon_state = "block" - M.maptext = "Movable" - M.maptext_width = 64 - - var/screen_l = input(usr,"Where on the screen? (Formatted as 'X,Y' e.g: '1,1' for bottom left)","Spawn Movable UI Object") as text - if(!screen_l) - return - - M.screen_loc = screen_l - - screen += M - - -/client/proc/test_snap_UI() - set category = "Debug" - set name = "Spawn Snap UI Object" - - var/obj/screen/movable/snap/S = new() - S.SetName("Snap UI Object") - S.icon_state = "block" - S.maptext = "Snap" - S.maptext_width = 64 - - var/screen_l = input(usr,"Where on the screen? (Formatted as 'X,Y' e.g: '1,1' for bottom left)","Spawn Snap UI Object") as text - if(!screen_l) - return - - S.screen_loc = screen_l - - screen += S diff --git a/code/_onclick/hud/other_mobs.dm b/code/_onclick/hud/other_mobs.dm deleted file mode 100644 index 64b5d64b47f9b..0000000000000 --- a/code/_onclick/hud/other_mobs.dm +++ /dev/null @@ -1,60 +0,0 @@ -/mob/living/carbon/slime/hud_type = /datum/hud/slime - -/datum/hud/slime/FinalizeInstantiation(ui_style = 'icons/mob/screen1_Midnight.dmi') - src.adding = list() - - var/obj/screen/using - - using = new /obj/screen/intent() - src.adding += using - action_intent = using - - mymob.client.screen = list() - mymob.client.screen += src.adding - -/mob/living/simple_animal/construct/hud_type = /datum/hud/construct - -/datum/hud/construct/FinalizeInstantiation() - var/constructtype - - if(istype(mymob,/mob/living/simple_animal/construct/armoured) || istype(mymob,/mob/living/simple_animal/construct/behemoth)) - constructtype = "juggernaut" - else if(istype(mymob,/mob/living/simple_animal/construct/builder)) - constructtype = "artificer" - else if(istype(mymob,/mob/living/simple_animal/construct/wraith)) - constructtype = "wraith" - else if(istype(mymob,/mob/living/simple_animal/construct/harvester)) - constructtype = "harvester" - - if(constructtype) - mymob.fire = new /obj/screen() - mymob.fire.icon = 'icons/mob/screen1_construct.dmi' - mymob.fire.icon_state = "fire0" - mymob.fire.SetName("fire") - mymob.fire.screen_loc = ui_construct_fire - - mymob.healths = new /obj/screen() - mymob.healths.icon = 'icons/mob/screen1_construct.dmi' - mymob.healths.icon_state = "[constructtype]_health0" - mymob.healths.SetName("health") - mymob.healths.screen_loc = ui_construct_health - - mymob.pullin = new /obj/screen() - mymob.pullin.icon = 'icons/mob/screen1_construct.dmi' - mymob.pullin.icon_state = "pull0" - mymob.pullin.SetName("pull") - mymob.pullin.screen_loc = ui_construct_pull - - mymob.zone_sel = new /obj/screen/zone_sel() - mymob.zone_sel.icon = 'icons/mob/screen1_construct.dmi' - mymob.zone_sel.overlays.len = 0 - mymob.zone_sel.overlays += image('icons/mob/zone_sel.dmi', "[mymob.zone_sel.selecting]") - - mymob.purged = new /obj/screen() - mymob.purged.icon = 'icons/mob/screen1_construct.dmi' - mymob.purged.icon_state = "purge0" - mymob.purged.SetName("purged") - mymob.purged.screen_loc = ui_construct_purge - - mymob.client.screen = list() - mymob.client.screen += list(mymob.fire, mymob.healths, mymob.pullin, mymob.zone_sel, mymob.purged) diff --git a/code/_onclick/hud/pai.dm b/code/_onclick/hud/pai.dm deleted file mode 100644 index 4feaab3cebc64..0000000000000 --- a/code/_onclick/hud/pai.dm +++ /dev/null @@ -1,104 +0,0 @@ -/datum/hud/pai/FinalizeInstantiation() - adding = list() - var/obj/screen/using - - using = new /obj/screen/pai/software() - using.SetName("Software Interface") - adding += using - - using = new /obj/screen/pai/subsystems() - using.SetName("Subsystems") - adding += using - - using = new /obj/screen/pai/shell() - using.SetName("Toggle Chassis") - adding += using - - using = new /obj/screen/pai/rest() - using.SetName("Rest") - adding += using - - using = new /obj/screen/pai/light() - using.SetName("Toggle Light") - adding += using - - mymob.client.screen = list() - mymob.client.screen += adding - inventory_shown = 0 - -/obj/screen/pai - icon = 'icons/mob/screen/pai.dmi' - -/obj/screen/pai/Click() - if(!isobserver(usr) && (!usr.incapacitated() || usr.resting)) - OnClick() - -/obj/screen/pai/proc/OnClick() - -/obj/screen/pai/software - name = "Software Interface" - icon_state = "pai" - screen_loc = ui_pai_software - -/obj/screen/pai/software/OnClick() - var/mob/living/silicon/pai/pAI = usr - pAI.paiInterface() - -/obj/screen/pai/shell - name = "Toggle Chassis" - icon_state = "pai_holoform" - screen_loc = ui_pai_shell - -/obj/screen/pai/shell/OnClick() - var/mob/living/silicon/pai/pAI = usr - if(pAI.is_in_card) - pAI.unfold() - else - pAI.fold() - -/obj/screen/pai/chassis - name = "Holochassis Appearance Composite" - icon_state = "pai_holoform" - -/obj/screen/pai/rest - name = "Rest" - icon_state = "pai_rest" - screen_loc = ui_pai_rest - -/obj/screen/pai/rest/OnClick() - var/mob/living/silicon/pai/pAI = usr - pAI.lay_down() - -/obj/screen/pai/light - name = "Toggle Integrated Lights" - icon_state = "light" - screen_loc = ui_pai_light - -/obj/screen/pai/light/OnClick() - var/mob/living/silicon/pai/pAI = usr - pAI.toggle_integrated_light() - -/obj/screen/pai/pull - name = "pull" - icon_state = "pull1" - -/obj/screen/pai/pull/OnClick() - var/mob/living/silicon/pai/pAI = usr - pAI.stop_pulling() - pAI.pullin.screen_loc = null - pAI.client.screen -= pAI.pullin - -/obj/screen/pai/subsystems - name = "SubSystems" - icon_state = "subsystems" - screen_loc = ui_pai_subsystems - -/obj/screen/pai/subsystems/OnClick() - var/mob/living/silicon/pai/pAI = usr - var/ss_name = input(usr, "Activates the given subsystem", "Subsystems", "") in pAI.silicon_subsystems_by_name - if (!ss_name) - return - - var/stat_silicon_subsystem/SSS = pAI.silicon_subsystems_by_name[ss_name] - if(istype(SSS)) - SSS.Click() \ No newline at end of file diff --git a/code/_onclick/hud/robot.dm b/code/_onclick/hud/robot.dm deleted file mode 100644 index 8822c89c462df..0000000000000 --- a/code/_onclick/hud/robot.dm +++ /dev/null @@ -1,220 +0,0 @@ -var/global/obj/screen/robot_inventory - -/mob/living/silicon/robot - hud_type = /datum/hud/robot - -/datum/hud/robot/FinalizeInstantiation() - - src.adding = list() - src.other = list() - - var/obj/screen/using - - //Radio - using = new /obj/screen() - using.SetName("radio") - using.set_dir(SOUTHWEST) - using.icon = 'icons/mob/screen1_robot.dmi' - using.icon_state = "radio" - using.screen_loc = ui_movi - src.adding += using - - //Module select - - using = new /obj/screen() - using.SetName("module1") - using.set_dir(SOUTHWEST) - using.icon = 'icons/mob/screen1_robot.dmi' - using.icon_state = "inv1" - using.screen_loc = ui_inv1 - src.adding += using - mymob:inv1 = using - - using = new /obj/screen() - using.SetName("module2") - using.set_dir(SOUTHWEST) - using.icon = 'icons/mob/screen1_robot.dmi' - using.icon_state = "inv2" - using.screen_loc = ui_inv2 - src.adding += using - mymob:inv2 = using - - using = new /obj/screen() - using.SetName("module3") - using.set_dir(SOUTHWEST) - using.icon = 'icons/mob/screen1_robot.dmi' - using.icon_state = "inv3" - using.screen_loc = ui_inv3 - src.adding += using - mymob:inv3 = using - - //End of module select - - //Intent - using = new /obj/screen() - using.SetName("act_intent") - using.set_dir(SOUTHWEST) - using.icon = 'icons/mob/screen1_robot.dmi' - using.icon_state = mymob.a_intent - using.screen_loc = ui_acti - src.adding += using - action_intent = using - - //Cell - mymob.cells = new /obj/screen() - mymob.cells.icon = 'icons/mob/screen1_robot.dmi' - mymob.cells.icon_state = "charge-empty" - mymob.cells.SetName("cell") - mymob.cells.screen_loc = ui_toxin - - //Health - mymob.healths = new /obj/screen() - mymob.healths.icon = 'icons/mob/screen1_robot.dmi' - mymob.healths.icon_state = "health0" - mymob.healths.SetName("health") - mymob.healths.screen_loc = ui_borg_health - - //Installed Module - mymob.hands = new /obj/screen() - mymob.hands.icon = 'icons/mob/screen1_robot.dmi' - mymob.hands.icon_state = "nomod" - mymob.hands.SetName("module") - mymob.hands.screen_loc = ui_borg_module - - //Module Panel - using = new /obj/screen() - using.SetName("panel") - using.icon = 'icons/mob/screen1_robot.dmi' - using.icon_state = "panel" - using.screen_loc = ui_borg_panel - src.adding += using - - //Store - mymob.throw_icon = new /obj/screen() - mymob.throw_icon.icon = 'icons/mob/screen1_robot.dmi' - mymob.throw_icon.icon_state = "store" - mymob.throw_icon.SetName("store") - mymob.throw_icon.screen_loc = ui_borg_store - - //Inventory - robot_inventory = new /obj/screen() - robot_inventory.SetName("inventory") - robot_inventory.icon = 'icons/mob/screen1_robot.dmi' - robot_inventory.icon_state = "inventory" - robot_inventory.screen_loc = ui_borg_inventory - - //Temp - mymob.bodytemp = new /obj/screen() - mymob.bodytemp.icon = 'icons/mob/status_indicators.dmi' - mymob.bodytemp.icon_state = "temp0" - mymob.bodytemp.SetName("body temperature") - mymob.bodytemp.screen_loc = ui_temp - - - mymob.oxygen = new /obj/screen() - mymob.oxygen.icon = 'icons/mob/screen1_robot.dmi' - mymob.oxygen.icon_state = "oxy0" - mymob.oxygen.SetName("oxygen") - mymob.oxygen.screen_loc = ui_oxygen - - mymob.pullin = new /obj/screen() - mymob.pullin.icon = 'icons/mob/screen1_robot.dmi' - mymob.pullin.icon_state = "pull0" - mymob.pullin.SetName("pull") - mymob.pullin.screen_loc = ui_borg_pull - - mymob.fire = new /obj/screen() - mymob.fire.icon = 'icons/mob/screen1_robot.dmi' - mymob.fire.icon_state = "fire0" - mymob.fire.SetName("fire") - mymob.fire.screen_loc = ui_fire - - mymob.zone_sel = new /obj/screen/zone_sel() - mymob.zone_sel.icon = 'icons/mob/screen1_robot.dmi' - mymob.zone_sel.overlays.Cut() - mymob.zone_sel.overlays += image('icons/mob/zone_sel.dmi', "[mymob.zone_sel.selecting]") - - //Handle the gun settings buttons - mymob.gun_setting_icon = new /obj/screen/gun/mode(null) - mymob.item_use_icon = new /obj/screen/gun/item(null) - mymob.gun_move_icon = new /obj/screen/gun/move(null) - mymob.radio_use_icon = new /obj/screen/gun/radio(null) - - mymob.client.screen = list() - mymob.client.screen += list(mymob.throw_icon, mymob.zone_sel, mymob.oxygen, mymob.fire, mymob.hands, mymob.healths, mymob:cells, mymob.pullin, robot_inventory, mymob.gun_setting_icon) - mymob.client.screen += src.adding + src.other - -/datum/hud/proc/toggle_show_robot_modules() - if(!isrobot(mymob)) - return - - var/mob/living/silicon/robot/r = mymob - - r.shown_robot_modules = !r.shown_robot_modules - update_robot_modules_display() - - -/datum/hud/proc/update_robot_modules_display() - if(!mymob?.client || !isrobot(mymob)) - return - - var/mob/living/silicon/robot/r = mymob - - if(r.shown_robot_modules) - if(r.s_active) - r.s_active.close(r) //Closes the inventory ui. - //Modules display is shown - //r.client.screen += robot_inventory //"store" icon - - if(!r.module) - to_chat(usr, "No module selected") - return - - if(!r.module.equipment) - to_chat(usr, "Selected module has no modules to select") - return - - if(!r.robot_modules_background) - return - - var/display_rows = -round(-(r.module.equipment.len) / 8) - r.robot_modules_background.screen_loc = "CENTER-4:16,SOUTH+1:7 to CENTER+3:16,SOUTH+[display_rows]:7" - r.client.screen += r.robot_modules_background - - var/x = -4 //Start at CENTER-4,SOUTH+1 - var/y = 1 - - //Unfortunately adding the emag module to the list of modules has to be here. This is because a borg can - //be emagged before they actually select a module. - or some situation can cause them to get a new module - // - or some situation might cause them to get de-emagged or something. - if(r.emagged) - if(!(r.module.emag in r.module.equipment)) - r.module.equipment.Add(r.module.emag) - else - if(r.module.emag in r.module.equipment) - r.module.equipment.Remove(r.module.emag) - - for(var/atom/movable/A in r.module.equipment) - if( (A != r.module_state_1) && (A != r.module_state_2) && (A != r.module_state_3) ) - //Module is not currently active - r.client.screen += A - if(x < 0) - A.screen_loc = "CENTER[x]:[WORLD_ICON_SIZE/2],SOUTH+[y]:7" - else - A.screen_loc = "CENTER+[x]:[WORLD_ICON_SIZE/2],SOUTH+[y]:7" - A.hud_layerise() - - x++ - if(x == 4) - x = -4 - y++ - - else - //Modules display is hidden - //r.client.screen -= robot_inventory //"store" icon - for(var/atom/A in r.module?.equipment) - if( (A != r.module_state_1) && (A != r.module_state_2) && (A != r.module_state_3) ) - //Module is not currently active - r.client.screen -= A - r.shown_robot_modules = 0 - r.client.screen -= r.robot_modules_background diff --git a/code/_onclick/hud/screen_objects.dm b/code/_onclick/hud/screen_objects.dm deleted file mode 100644 index 86fe8355b5921..0000000000000 --- a/code/_onclick/hud/screen_objects.dm +++ /dev/null @@ -1,383 +0,0 @@ -/* - Screen objects - Todo: improve/re-implement - - Screen objects are only used for the hud and should not appear anywhere "in-game". - They are used with the client/screen list and the screen_loc var. - For more information, see the byond documentation on the screen_loc and screen vars. -*/ -/obj/screen - name = "" - icon = 'icons/mob/screen1.dmi' - plane = HUD_PLANE - layer = HUD_BASE_LAYER - appearance_flags = DEFAULT_APPEARANCE_FLAGS | NO_CLIENT_COLOR - unacidable = TRUE - var/obj/master = null //A reference to the object in the slot. Grabs or items, generally. - var/globalscreen = FALSE //Global screens are not qdeled when the holding mob is destroyed. - -/obj/screen/Destroy() - master = null - return ..() - -/obj/screen/text - icon = null - icon_state = null - mouse_opacity = 0 - screen_loc = "CENTER-7,CENTER-7" - maptext_height = 480 - maptext_width = 480 - - -/obj/screen/inventory - var/slot_id //The indentifier for the slot. It has nothing to do with ID cards. - - -/obj/screen/close - name = "close" - -/obj/screen/close/Click() - if(master) - if(istype(master, /obj/item/storage)) - var/obj/item/storage/S = master - S.close(usr) - return 1 - - -/obj/screen/item_action - var/obj/item/owner - -/obj/screen/item_action/Destroy() - ..() - owner = null - -/obj/screen/item_action/Click() - if(!usr || !owner) - return 1 - if(!usr.canClick()) - return - - if(usr.stat || usr.restrained() || usr.stunned || usr.lying) - return 1 - - if(!(owner in usr)) - return 1 - - owner.ui_action_click() - return 1 - -/obj/screen/storage - name = "storage" - -/obj/screen/storage/Click() - if(!usr.canClick()) - return 1 - if(usr.stat || usr.paralysis || usr.stunned || usr.weakened) - return 1 - if(master) - var/obj/item/I = usr.get_active_hand() - if(I) - usr.ClickOn(master) - return 1 - -/obj/screen/zone_sel - name = "damage zone" - icon_state = "zone_sel" - screen_loc = ui_zonesel - var/selecting = BP_CHEST - -/obj/screen/zone_sel/Click(location, control,params) - var/list/PL = params2list(params) - var/icon_x = text2num(PL["icon-x"]) - var/icon_y = text2num(PL["icon-y"]) - var/new_selecting - - switch(icon_y) - if(1 to 3) //Feet - switch(icon_x) - if(10 to 15) - new_selecting = BP_R_FOOT - if(17 to 22) - new_selecting = BP_L_FOOT - else - return 1 - if(4 to 9) //Legs - switch(icon_x) - if(10 to 15) - new_selecting = BP_R_LEG - if(17 to 22) - new_selecting = BP_L_LEG - else - return 1 - if(10 to 13) //Hands and groin - switch(icon_x) - if(8 to 11) - new_selecting = BP_R_HAND - if(12 to 20) - new_selecting = BP_GROIN - if(21 to 24) - new_selecting = BP_L_HAND - else - return 1 - if(14 to 22) //Chest and arms to shoulders - switch(icon_x) - if(8 to 11) - new_selecting = BP_R_ARM - if(12 to 20) - new_selecting = BP_CHEST - if(21 to 24) - new_selecting = BP_L_ARM - else - return 1 - if(23 to 30) //Head, but we need to check for eye or mouth - if(icon_x in 12 to 20) - new_selecting = BP_HEAD - switch(icon_y) - if(23 to 24) - if(icon_x in 15 to 17) - new_selecting = BP_MOUTH - if(26) //Eyeline, eyes are on 15 and 17 - if(icon_x in 14 to 18) - new_selecting = BP_EYES - if(25 to 27) - if(icon_x in 15 to 17) - new_selecting = BP_EYES - - set_selected_zone(new_selecting) - return 1 - -/obj/screen/zone_sel/proc/set_selected_zone(bodypart) - var/old_selecting = selecting - selecting = bodypart - var/mob/living/carbon/human/user = usr - if (istype(user) && (old_selecting == BP_MOUTH || selecting == BP_MOUTH) && user.aiming && user.aiming.active && user.aiming.aiming_at == user) - var/obj/aiming_overlay/AO = user.aiming - AO.aim_at(user, user.aiming.aiming_with, TRUE) - if (old_selecting != selecting) - update_icon() - return TRUE - -/obj/screen/zone_sel/on_update_icon() - overlays.Cut() - overlays += image('icons/mob/zone_sel.dmi', "[selecting]") - -/obj/screen/intent - name = "intent" - icon = 'icons/mob/screen1_White.dmi' - icon_state = "intent_help" - screen_loc = ui_acti - var/intent = I_HELP - -/obj/screen/intent/Click(var/location, var/control, var/params) - var/list/P = params2list(params) - var/icon_x = text2num(P["icon-x"]) - var/icon_y = text2num(P["icon-y"]) - intent = I_DISARM - if(icon_x <= world.icon_size/2) - if(icon_y <= world.icon_size/2) - intent = I_HURT - else - intent = I_HELP - else if(icon_y <= world.icon_size/2) - intent = I_GRAB - update_icon() - usr.a_intent = intent - -/obj/screen/intent/on_update_icon() - icon_state = "intent_[intent]" - -/obj/screen/Click(location, control, params) - if(!usr) return 1 - switch(name) - if("toggle") - if(usr.hud_used.inventory_shown) - usr.hud_used.inventory_shown = 0 - usr.client.screen -= usr.hud_used.other - else - usr.hud_used.inventory_shown = 1 - usr.client.screen += usr.hud_used.other - - usr.hud_used.hidden_inventory_update() - - if("equip") - if(ishuman(usr)) - var/mob/living/carbon/human/H = usr - H.quick_equip() - - if("resist") - if(isliving(usr)) - var/mob/living/L = usr - L.resist() - - if("Reset Machine") - usr.unset_machine() - if("internal") - if(iscarbon(usr)) - var/mob/living/carbon/C = usr - if(!C.stat && !C.stunned && !C.paralysis && !C.restrained()) - if(C.internal) - C.set_internals(null) - else - - var/no_mask - if(!(C.wear_mask && C.wear_mask.item_flags & ITEM_FLAG_AIRTIGHT)) - var/mob/living/carbon/human/H = C - if(!(H.head && H.head.item_flags & ITEM_FLAG_AIRTIGHT)) - no_mask = 1 - - if(no_mask) - to_chat(C, "You are not wearing a suitable mask or helmet.") - return 1 - else - var/list/nicename = null - var/list/tankcheck = null - var/breathes = GAS_OXYGEN //default, we'll check later - var/list/contents = list() - var/from = "on" - - if(ishuman(C)) - var/mob/living/carbon/human/H = C - breathes = H.species.breath_type - nicename = list ("suit", "back", "belt", "right hand", "left hand", "left pocket", "right pocket") - tankcheck = list (H.s_store, C.back, H.belt, C.r_hand, C.l_hand, H.l_store, H.r_store) - else - nicename = list("right hand", "left hand", "back") - tankcheck = list(C.r_hand, C.l_hand, C.back) - - // Rigs are a fucking pain since they keep an air tank in nullspace. - if(istype(C.back,/obj/item/rig)) - var/obj/item/rig/rig = C.back - if(rig.air_supply) - from = "in" - nicename |= "hardsuit" - tankcheck |= rig.air_supply - - for(var/i=1, i bestcontents) - best = i - bestcontents = contents[i] - - - //We've determined the best container now we set it as our internals - - if(best) - C.set_internals(tankcheck[best], "\the [tankcheck[best]] [from] your [nicename[best]]") - - if(!C.internal) - // Finally, check for an internal air system. - // We use this as an absolute last resort, so we don't include it in the above logic - // There's no need to check that the gas contents are safe, because its internal logic always make sure it is - var/obj/item/organ/internal/augment/active/internal_air_system/IAS = locate() in C.internal_organs - if (!IAS?.activate()) - to_chat(C, SPAN_WARNING("You don't have \a [breathes] tank.")) - if("act_intent") - usr.a_intent_change("right") - - if("pull") - usr.stop_pulling() - if("throw") - if(!usr.stat && isturf(usr.loc) && !usr.restrained()) - usr:toggle_throw_mode() - if("drop") - if(usr.client) - usr.client.drop_item() - - if("module") - if(isrobot(usr)) - var/mob/living/silicon/robot/R = usr -// if(R.module) -// R.hud_used.toggle_show_robot_modules() -// return 1 - R.pick_module() - - if("inventory") - if(isrobot(usr)) - var/mob/living/silicon/robot/R = usr - if(R.module) - R.hud_used.toggle_show_robot_modules() - return 1 - else - to_chat(R, "You haven't selected a module yet.") - - if("radio") - if(issilicon(usr)) - usr:radio_menu() - if("panel") - if(issilicon(usr)) - usr:installed_modules() - - if("store") - if(isrobot(usr)) - var/mob/living/silicon/robot/R = usr - if(R.module) - R.uneq_active() - R.hud_used.update_robot_modules_display() - else - to_chat(R, "You haven't selected a module yet.") - - if("module1") - if(istype(usr, /mob/living/silicon/robot)) - usr:toggle_module(1) - - if("module2") - if(istype(usr, /mob/living/silicon/robot)) - usr:toggle_module(2) - - if("module3") - if(istype(usr, /mob/living/silicon/robot)) - usr:toggle_module(3) - else - return 0 - return 1 - -/obj/screen/inventory/Click() - // At this point in client Click() code we have passed the 1/10 sec check and little else - // We don't even know if it's a middle click - if(!usr.canClick()) - return 1 - if(usr.incapacitated()) - return 1 - switch(name) - if("r_hand") - if(iscarbon(usr)) - var/mob/living/carbon/C = usr - if(C.hand) - C.activate_hand("r") - else - C.attack_empty_hand(BP_R_HAND) - if("l_hand") - if(iscarbon(usr)) - var/mob/living/carbon/C = usr - if(!C.hand) - C.activate_hand("l") - else - C.attack_empty_hand(BP_L_HAND) - if("swap") - usr:swap_hand() - if("hand") - usr:swap_hand() - else - if(usr.attack_ui(slot_id)) - usr.update_inv_l_hand(0) - usr.update_inv_r_hand(0) - return 1 diff --git a/code/_onclick/hud/skybox.dm b/code/_onclick/hud/skybox.dm deleted file mode 100644 index afb8e0c930d84..0000000000000 --- a/code/_onclick/hud/skybox.dm +++ /dev/null @@ -1,40 +0,0 @@ -/obj/skybox - name = "skybox" - mouse_opacity = 0 - anchored = TRUE - simulated = FALSE - screen_loc = "CENTER:-224,CENTER:-224" - plane = SKYBOX_PLANE - -/client - var/obj/skybox/skybox - -/client/proc/update_skybox(rebuild) - if(!skybox) - skybox = new() - screen += skybox - rebuild = 1 - - var/turf/T = get_turf(eye) - if(T) - if(rebuild) - skybox.overlays.Cut() - skybox.overlays += SSskybox.get_skybox(T.z) - screen |= skybox - skybox.screen_loc = "CENTER:[-224 - T.x],CENTER:[-224 - T.y]" - -/mob/Login() - ..() - client.update_skybox(1) - -/mob/Move() - var/old_z = get_z(src) - . = ..() - if(. && client) - client.update_skybox(old_z != get_z(src)) - -/mob/forceMove() - var/old_z = get_z(src) - . = ..() - if(. && client) - client.update_skybox(old_z != get_z(src)) diff --git a/code/_onclick/item_attack.dm b/code/_onclick/item_attack.dm deleted file mode 100644 index 7e7c30de61591..0000000000000 --- a/code/_onclick/item_attack.dm +++ /dev/null @@ -1,119 +0,0 @@ -/* -=== Item Click Call Sequences === -These are the default click code call sequences used when clicking on stuff with an item. - -Atoms: - -mob/ClickOn() calls the item's resolve_attackby() proc. -item/resolve_attackby() calls the target atom's attackby() proc. - -Mobs: - -mob/living/attackby() after checking for surgery, calls the item's attack() proc. -item/attack() generates attack logs, sets click cooldown and calls the mob's attacked_with_item() proc. If you override this, consider whether you need to set a click cooldown, play attack animations, and generate logs yourself. -mob/attacked_with_item() should then do mob-type specific stuff (like determining hit/miss, handling shields, etc) and then possibly call the item's apply_hit_effect() proc to actually apply the effects of being hit. - -Item Hit Effects: - -item/apply_hit_effect() can be overriden to do whatever you want. However "standard" physical damage based weapons should make use of the target mob's hit_with_weapon() proc to -avoid code duplication. This includes items that may sometimes act as a standard weapon in addition to having other effects (e.g. stunbatons on harm intent). -*/ - -// 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 - -//I would prefer to rename this to attack(), but that would involve touching hundreds of files. -/obj/item/proc/resolve_attackby(atom/A, mob/user, var/click_params) - if(!(item_flags & ITEM_FLAG_NO_PRINT)) - add_fingerprint(user) - return A.attackby(src, user, click_params) - -// No comment -/atom/proc/attackby(obj/item/W, mob/user, var/click_params) - return - -/mob/living/attackby(obj/item/I, mob/user) - if(!ismob(user)) - return 0 - if(can_operate(src,user) && I.do_surgery(src,user)) //Surgery - return 1 - return I.attack(src, user, user.zone_sel ? user.zone_sel.selecting : ran_zone()) - -/mob/living/carbon/human/attackby(obj/item/I, mob/user) - if(user == src && zone_sel.selecting == BP_MOUTH && can_devour(I, silent = TRUE)) - var/obj/item/blocked = src.check_mouth_coverage() - if(blocked) - to_chat(user, SPAN_WARNING("\The [blocked] is in the way!")) - return TRUE - if(devour(I)) - return TRUE - return ..() - -// Proximity_flag is 1 if this afterattack was called on something adjacent, in your square, or on your person. -// Click parameters is the params string from byond Click() code, see that documentation. -/obj/item/proc/afterattack(atom/target, mob/user, proximity_flag, click_parameters) - return - -/datum/attack_result - var/hit_zone = 0 - var/mob/living/attackee = null - -//I would prefer to rename this attack_as_weapon(), but that would involve touching hundreds of files. -/obj/item/proc/attack(mob/living/M, mob/living/user, target_zone, animate = TRUE) - if(!force || (item_flags & ITEM_FLAG_NO_BLUDGEON)) - return 0 - if(M == user && user.a_intent != I_HURT) - return 0 - if (user.a_intent == I_HELP && !attack_ignore_harm_check) - return FALSE - - ///////////////////////// - - if(!no_attack_log) - admin_attack_log(user, M, "Attacked using \a [src] (DAMTYE: [uppertext(damtype)])", "Was attacked with \a [src] (DAMTYE: [uppertext(damtype)])", "used \a [src] (DAMTYE: [uppertext(damtype)]) to attack") - ///////////////////////// - user.setClickCooldown(attack_cooldown + w_class) - if(animate) - user.do_attack_animation(M) - if(!M.aura_check(AURA_TYPE_WEAPON, src, user)) - return 0 - - var/hit_zone = M.resolve_item_attack(src, user, target_zone) - - var/datum/attack_result/AR = hit_zone - if(istype(AR)) - if(AR.hit_zone) - apply_hit_effect(AR.attackee ? AR.attackee : M, user, AR.hit_zone) - return 1 - if(hit_zone) - apply_hit_effect(M, user, hit_zone) - - return 1 - -//Called when a weapon is used to make a successful melee attack on a mob. Returns whether damage was dealt. -/obj/item/proc/apply_hit_effect(mob/living/target, mob/living/user, var/hit_zone) - if(hitsound) - playsound(loc, hitsound, 50, 1, -1) - - var/power = force - if(MUTATION_HULK in user.mutations) - power *= 2 - return target.hit_with_weapon(src, user, power, hit_zone) - -/** - * Used to get how fast a mob should attack, and influences click delay. - * This is just for inheritance. - */ -/mob/proc/get_attack_speed() - return DEFAULT_ATTACK_COOLDOWN - -/** - * W is the item being used in the attack, if any. modifier is if the attack should be longer or shorter than usual, for whatever reason. - */ -/mob/living/get_attack_speed(var/obj/item/W) - var/speed = base_attack_cooldown - if(istype(W)) - speed = W.attack_cooldown - - return speed diff --git a/code/_onclick/other_mobs.dm b/code/_onclick/other_mobs.dm deleted file mode 100644 index 0de278a4efb45..0000000000000 --- a/code/_onclick/other_mobs.dm +++ /dev/null @@ -1,165 +0,0 @@ -// Generic damage proc (slimes and monkeys). -/atom/proc/attack_generic(mob/user as mob) - return 0 - -/* - Humans: - Adds an exception for gloves, to allow special glove types like the ninja ones. - - Otherwise pretty standard. -*/ -/mob/living/carbon/human/UnarmedAttack(var/atom/A, var/proximity) - - if(!..()) - return - - // Special glove functions: - // If the gloves do anything, have them return 1 to stop - // normal attack_hand() here. - var/obj/item/clothing/gloves/G = gloves // not typecast specifically enough in defines - if(istype(G) && G.Touch(A,1)) - return - - A.attack_hand(src) - -/atom/proc/attack_hand(mob/user as mob) - return - -/mob/proc/attack_empty_hand(var/bp_hand) - return - -/mob/living/attack_empty_hand(var/bp_hand) - if(psi) - INVOKE_PSI_POWERS(src, psi.get_manifestations(), src) - ..() - -/mob/living/carbon/human/RestrainedClickOn(var/atom/A) - return - -/mob/living/CtrlClickOn(var/atom/A) - . = ..() - if(!. && a_intent == I_GRAB && length(available_maneuvers)) - . = perform_maneuver(prepared_maneuver || available_maneuvers[1], A) - -/mob/living/carbon/human/RangedAttack(var/atom/A, var/params) - //Climbing up open spaces - if((istype(A, /turf/simulated/floor) || istype(A, /turf/unsimulated/floor) || istype(A, /obj/structure/lattice) || istype(A, /obj/structure/catwalk)) && isturf(loc) && bound_overlay && !is_physically_disabled()) //Climbing through openspace - return climb_up(A) - - if(gloves) - var/obj/item/clothing/gloves/G = gloves - if(istype(G) && G.Touch(A,0)) // for magic gloves - return TRUE - - . = ..() - -/mob/living/RestrainedClickOn(var/atom/A) - return - -/* - Aliens -*/ - -/mob/living/carbon/alien/RestrainedClickOn(var/atom/A) - return - -/mob/living/carbon/alien/UnarmedAttack(var/atom/A, var/proximity) - - if(!..()) - return 0 - - setClickCooldown(DEFAULT_ATTACK_COOLDOWN) - A.attack_generic(src,rand(5,6),"bitten") - -/* - Slimes - Nothing happening here -*/ - -/mob/living/carbon/slime/RestrainedClickOn(var/atom/A) - return - -/mob/living/carbon/slime/UnarmedAttack(var/atom/A, var/proximity) - - if(!..()) - return - - // Eating - if(Victim) - if (Victim == A) - Feedstop() - return - - //should have already been set if we are attacking a mob, but it doesn't hurt and will cover attacking non-mobs too - setClickCooldown(DEFAULT_ATTACK_COOLDOWN) - var/mob/living/M = A - if(!istype(M)) - A.attack_generic(src, (is_adult ? rand(20,40) : rand(5,25)), "glomped") // Basic attack. - else - var/power = max(0, min(10, (powerlevel + rand(0, 3)))) - - switch(src.a_intent) - if (I_HELP) // We just poke the other - M.visible_message("[src] gently pokes [M]!", "[src] gently pokes you!") - if (I_DISARM) // We stun the target, with the intention to feed - var/stunprob = 1 - - if (powerlevel > 0 && !istype(A, /mob/living/carbon/slime)) - switch(power * 10) - if(0) stunprob *= 10 - if(1 to 2) stunprob *= 20 - if(3 to 4) stunprob *= 30 - if(5 to 6) stunprob *= 40 - if(7 to 8) stunprob *= 60 - if(9) stunprob *= 70 - if(10) stunprob *= 95 - - if(prob(stunprob)) - var/shock_damage = max(0, powerlevel-3) * rand(6,10) - M.electrocute_act(shock_damage, src, 1.0, ran_zone()) - else if(prob(40)) - M.visible_message("[src] has pounced at [M]!", "[src] has pounced at you!") - M.Weaken(power) - else - M.visible_message("[src] has tried to pounce at [M]!", "[src] has tried to pounce at you!") - M.updatehealth() - if (I_GRAB) // We feed - Wrap(M) - if (I_HURT) // Attacking - if(iscarbon(M) && prob(15)) - M.visible_message("[src] has pounced at [M]!", "[src] has pounced at you!") - M.Weaken(power) - else - A.attack_generic(src, (is_adult ? rand(20,40) : rand(5,25)), "glomped") - -/* - New Players: - Have no reason to click on anything at all. -*/ -/mob/new_player/ClickOn() - return - -/* - Animals -*/ -/mob/living/simple_animal/UnarmedAttack(var/atom/A, var/proximity) - - if(!..()) - return - setClickCooldown(DEFAULT_ATTACK_COOLDOWN) - if(istype(A,/mob/living)) - if(!get_natural_weapon() || a_intent == I_HELP) - custom_emote(1,"[friendly] [A]!") - return - if(ckey) - admin_attack_log(src, A, "Has attacked its victim.", "Has been attacked by its attacker.") - if(a_intent == I_HELP) - A.attack_animal(src) - else if (get_natural_weapon()) - A.attackby(get_natural_weapon(), src) - -// Attack hand but for simple animals -/atom/proc/attack_animal(mob/user) - return attack_hand(user) - -#undef INVOKE_PSI_POWERS diff --git a/code/_onclick/rig.dm b/code/_onclick/rig.dm deleted file mode 100644 index 583f4e59c7e7e..0000000000000 --- a/code/_onclick/rig.dm +++ /dev/null @@ -1,54 +0,0 @@ -/mob/living/MiddleClickOn(atom/A) - if(get_preference_value(/datum/client_preference/hardsuit_activation) == GLOB.PREF_MIDDLE_CLICK) - if(HardsuitClickOn(A)) - return - ..() - -/mob/living/AltClickOn(atom/A) - if(get_preference_value(/datum/client_preference/hardsuit_activation) == GLOB.PREF_ALT_CLICK) - if(HardsuitClickOn(A)) - return - ..() - -/mob/living/CtrlClickOn(atom/A) - if(get_preference_value(/datum/client_preference/hardsuit_activation) == GLOB.PREF_CTRL_CLICK) - if(HardsuitClickOn(A)) - return FALSE - . = ..() - -/mob/living/CtrlShiftClickOn(atom/A) - if(get_preference_value(/datum/client_preference/hardsuit_activation) == GLOB.PREF_CTRL_SHIFT_CLICK) - if(HardsuitClickOn(A)) - return - ..() - -/mob/living/proc/can_use_rig() - return 0 - -/mob/living/carbon/human/can_use_rig() - return 1 - -/mob/living/carbon/brain/can_use_rig() - return istype(loc, /obj/item/device/mmi) - -/mob/living/silicon/ai/can_use_rig() - return carded - -/mob/living/silicon/pai/can_use_rig() - return loc == card - -/mob/living/proc/HardsuitClickOn(var/atom/A, var/alert_ai = 0) - if(!can_use_rig() || !canClick()) - return 0 - var/obj/item/rig/rig = get_rig() - if(istype(rig) && !rig.offline && rig.selected_module) - if(src != rig.wearer) - if(rig.ai_can_move_suit(src, check_user_module = 1)) - log_and_message_admins("is trying to force \the [key_name_admin(rig.wearer, include_name = 1)] to use a hardsuit module.", src) - else - return 0 - rig.selected_module.engage(A, alert_ai) - if(ismob(A)) // No instant mob attacking - though modules have their own cooldowns - setClickCooldown(DEFAULT_ATTACK_COOLDOWN) - return 1 - return 0 \ No newline at end of file diff --git a/code/_version.dm b/code/_version.dm deleted file mode 100644 index 68c9b2ddaa9d2..0000000000000 --- a/code/_version.dm +++ /dev/null @@ -1,4 +0,0 @@ -/* * -DM version compatibility macros & procs -Retain even if empty - the future exists -*/ diff --git a/code/controllers/admin.dm b/code/controllers/admin.dm deleted file mode 100644 index 3af441e64679b..0000000000000 --- a/code/controllers/admin.dm +++ /dev/null @@ -1,44 +0,0 @@ -// Clickable stat() button. -/atom/movable/clickable_stat - name = "Initializing..." - var/target - var/class - -INITIALIZE_IMMEDIATE(/atom/movable/clickable_stat) - - -/atom/movable/clickable_stat/Initialize(mapload, new_target) - . = ..() - target = new_target - - -/atom/movable/clickable_stat/Click() - if (!target) - return - var/client/client = usr?.client - if (!check_rights(R_DEBUG, TRUE, client)) - return - if (!class) - if (istype(target, /datum/controller/subsystem)) - class = "subsystem" - else if (istype(target, /datum/controller)) - class = "controller" - else if (istype(target, /datum)) - class = "datum" - else - class = "unknown" - message_admins("[key_name_admin(client)] is debugging the [target] [class].") - client.debug_variables(target) - - -/client/proc/restart_controller(controller in list("Master", "Failsafe")) - set category = "Debug" - set name = "Restart Controller" - var/client/client = usr?.client - if (!check_rights(R_ADMIN, TRUE, client)) - return - if (controller == "Master") - Recreate_MC() - else if (controller == "Failsafe") - new /datum/controller/failsafe - message_admins("[key_name_admin(client)] has restarted the [controller] controller.") diff --git a/code/controllers/autotransfer.dm b/code/controllers/autotransfer.dm deleted file mode 100644 index f5097be3152f8..0000000000000 --- a/code/controllers/autotransfer.dm +++ /dev/null @@ -1,28 +0,0 @@ -var/global/datum/controller/transfer_controller/transfer_controller - -/datum/controller/transfer_controller - var/timerbuffer = 0 //buffer for time check - var/do_continue_vote = TRUE - -/datum/controller/transfer_controller/New() - timerbuffer = config.vote_autotransfer_initial - START_PROCESSING(SSprocessing, src) - -/datum/controller/transfer_controller/Destroy() - STOP_PROCESSING(SSprocessing, src) - . = ..() - -/datum/controller/transfer_controller/Process() - if (time_till_transfer_vote() <= 0) - - if (config.maximum_round_length > 0 && round_duration_in_ticks >= config.maximum_round_length) - init_autotransfer() - else if (do_continue_vote) - SSvote.initiate_vote(/datum/vote/transfer, automatic = 1) - else - init_autotransfer() - - timerbuffer += config.vote_autotransfer_interval - -/datum/controller/transfer_controller/proc/time_till_transfer_vote() - return timerbuffer - round_duration_in_ticks - (1 MINUTE) diff --git a/code/controllers/communications.dm b/code/controllers/communications.dm deleted file mode 100644 index e61a91e6837d2..0000000000000 --- a/code/controllers/communications.dm +++ /dev/null @@ -1,435 +0,0 @@ -/* - HOW IT WORKS - - The radio_controller is a global object maintaining all radio transmissions, think about it as about "ether". - Note that walkie-talkie, intercoms and headsets handle transmission using nonstandard way. - procs: - - add_object(obj/device as obj, var/new_frequency as num, var/filter as text|null = null) - Adds listening object. - parameters: - device - device receiving signals, must have proc receive_signal (see description below). - one device may listen several frequencies, but not same frequency twice. - new_frequency - see possibly frequencies below; - filter - thing for optimization. Optional, but recommended. - All filters should be consolidated in this file, see defines later. - Device without listening filter will receive all signals (on specified frequency). - Device with filter will receive any signals sent without filter. - Device with filter will not receive any signals sent with different filter. - returns: - Reference to frequency object. - - remove_object (obj/device, old_frequency) - Obliviously, after calling this proc, device will not receive any signals on old_frequency. - Other frequencies will left unaffected. - - return_frequency(var/frequency as num) - returns: - Reference to frequency object. Use it if you need to send and do not need to listen. - - radio_frequency is a global object maintaining list of devices that listening specific frequency. - procs: - - post_signal(obj/source as obj|null, datum/signal/signal, var/filter as text|null = null, var/range as num|null = null) - Sends signal to all devices that wants such signal. - parameters: - source - object, emitted signal. Usually, devices will not receive their own signals. - signal - see description below. - filter - described above. - range - radius of regular byond's square circle on that z-level. null means everywhere, on all z-levels. - - obj/proc/receive_signal(datum/signal/signal, var/receive_method as num, var/receive_param) - Handler from received signals. By default does nothing. Define your own for your object. - Avoid of sending signals directly from this proc, use spawn(-1). DO NOT use sleep() here or call procs that sleep please. If you must, use spawn() - parameters: - signal - see description below. Extract all needed data from the signal before doing sleep(), spawn() or return! - receive_method - may be TRANSMISSION_WIRE or TRANSMISSION_RADIO. - TRANSMISSION_WIRE is currently unused. - receive_param - for TRANSMISSION_RADIO here comes frequency. - - datum/signal - vars: - source - an object that emitted signal. Used for debug and bearing. - data - list with transmitting data. Usual use pattern: - data["msg"] = "hello world" - encryption - Some number symbolizing "encryption key". - Note that game actually do not use any cryptography here. - If receiving object don't know right key, it must ignore encrypted signal in its receive_signal. - -*/ - -/* -Frequency range: 1200 to 1600 -Radiochat range: 1441 to 1489 (most devices refuse to be tune to other frequency, even during mapmaking) - -Radio: -1459 - standard radio chat -1351 - Science -1353 - Command -1355 - Medical -1357 - Engineering -1359 - Security -1341 - deathsquad -1443 - Confession Intercom -1347 - Cargo techs -1349 - Service people - -1491-1509 - Away sites - -Devices: -1451 - tracking implant -1457 - RSD default - -On the map: -1311 for prison shuttle console (in fact, it is not used) -1435 for status displays -1437 for atmospherics/fire alerts -1438 for engine components -1439 for air pumps, air scrubbers, atmo control -1441 for atmospherics - supply tanks -1443 for atmospherics - distribution loop/mixed air tank -1445 for bot nav beacons -1447 for mulebot, secbot and ed209 control -1449 for airlock controls, electropack, magnets -1451 for toxin lab access -1453 for engineering access -1455 for AI access -*/ - -var/global/const/RADIO_LOW_FREQ = 1200 -var/global/const/PUBLIC_LOW_FREQ = 1441 -var/global/const/PUBLIC_HIGH_FREQ = 1489 -var/global/const/RADIO_HIGH_FREQ = 1600 - -var/global/const/BOT_FREQ = 1447 -var/global/const/COMM_FREQ = 1353 -var/global/const/ERT_FREQ = 1345 -var/global/const/AI_FREQ = 1343 -var/global/const/ENT_FREQ = 1461 //entertainment frequency. This is not a diona exclusive frequency. - -//antagonist channels -var/global/const/DTH_FREQ = 1341 -var/global/const/SYND_FREQ = 1213 -var/global/const/RAID_FREQ = 1277 -var/global/const/V_RAID_FREQ = 1245 - -// department channels -var/global/const/PUB_FREQ = 1459 -var/global/const/HAIL_FREQ = 1463 -var/global/const/SEC_FREQ = 1359 -var/global/const/ENG_FREQ = 1357 -var/global/const/MED_FREQ = 1355 -var/global/const/SCI_FREQ = 1351 -var/global/const/SRV_FREQ = 1349 -var/global/const/SUP_FREQ = 1347 -var/global/const/EXP_FREQ = 1361 - -// internal department channels -var/global/const/MED_I_FREQ = 1485 -var/global/const/SEC_I_FREQ = 1475 - -// Away Site Channels -var/global/list/AWAY_FREQS_UNASSIGNED = list(1491, 1493, 1495, 1497, 1499, 1501, 1503, 1505, 1507, 1509) -var/global/list/AWAY_FREQS_ASSIGNED = list("Hailing" = HAIL_FREQ) - -// Device signal frequencies -var/global/const/ATMOS_ENGINE_FREQ = 1438 // Used by atmos monitoring in the engine. -var/global/const/PUMP_FREQ = 1439 // Used by air alarms and their progeny. -var/global/const/FUEL_FREQ = 1447 // Used by fuel atmos stuff, and currently default for digital valves -var/global/const/ATMOS_TANK_FREQ = 1441 // Used for gas tank sensors and monitoring. -var/global/const/ATMOS_DIST_FREQ = 1443 // Alternative atmos frequency. -var/global/const/BUTTON_FREQ = 1301 // Used by generic buttons controlling stuff -var/global/const/BLAST_DOORS_FREQ = 1303 // Used by blast doors, buttons controlling them, and mass drivers. -var/global/const/AIRLOCK_FREQ = 1305 // Used by airlocks and buttons controlling them. -var/global/const/SHUTTLE_AIR_FREQ = 1331 // Used by shuttles and shuttle-related atmos systems. -var/global/const/AIRLOCK_AIR_FREQ = 1379 // Used by some airlocks for atmos devices. -var/global/const/EXTERNAL_AIR_FREQ = 1380 // Used by some external airlocks. - -var/global/list/radiochannels = list( - "Common" = PUB_FREQ, - "Hailing" = HAIL_FREQ, - "Science" = SCI_FREQ, - "Command" = COMM_FREQ, - "Medical" = MED_FREQ, - "Engineering" = ENG_FREQ, - "Security" = SEC_FREQ, - "Response Team" = ERT_FREQ, - "Special Ops" = DTH_FREQ, - "Mercenary" = SYND_FREQ, - "Raider" = RAID_FREQ, - "Vox Raider" = V_RAID_FREQ, - "Exploration" = EXP_FREQ, - "Supply" = SUP_FREQ, - "Service" = SRV_FREQ, - "AI Private" = AI_FREQ, - "Entertainment" = ENT_FREQ, - "Medical (I)" = MED_I_FREQ, - "Security (I)" = SEC_I_FREQ -) - -var/global/list/channel_color_presets = list( - "Bemoaning Brown" = COMMS_COLOR_SUPPLY, - "Bitchin' Blue" = COMMS_COLOR_COMMAND, - "Bold Brass" = COMMS_COLOR_EXPLORER, - "Gastric Green" = COMMS_COLOR_SERVICE, - "Global Green" = COMMS_COLOR_COMMON, - "Grand Gold" = COMMS_COLOR_COLONY, - "Hippin' Hot Pink" = COMMS_COLOR_HAILING, - "Menacing Maroon" = COMMS_COLOR_SYNDICATE, - "Operational Orange" = COMMS_COLOR_ENGINEER, - "Painful Pink" = COMMS_COLOR_AI, - "Phenomenal Purple" = COMMS_COLOR_SCIENCE, - "Powerful Plum" = COMMS_COLOR_BEARCAT, - "Pretty Periwinkle" = COMMS_COLOR_CENTCOMM, - "Radical Ruby" = COMMS_COLOR_VOX, - "Raging Red" = COMMS_COLOR_SECURITY, - "Spectacular Silver" = COMMS_COLOR_ENTERTAIN, - "Tantalizing Turquoise" = COMMS_COLOR_MEDICAL, - "Viewable Violet" = COMMS_COLOR_SKRELL -) - -// central command channels, i.e deathsquid & response teams -var/global/list/CENT_FREQS = list(ERT_FREQ, DTH_FREQ) - -// Antag channels, i.e. Syndicate -var/global/list/ANTAG_FREQS = list(SYND_FREQ, RAID_FREQ, V_RAID_FREQ) - -//Department channels, arranged lexically -var/global/list/DEPT_FREQS = list(AI_FREQ, COMM_FREQ, ENG_FREQ, MED_FREQ, SEC_FREQ, SCI_FREQ, SRV_FREQ, SUP_FREQ, EXP_FREQ, ENT_FREQ, MED_I_FREQ, SEC_I_FREQ) - -#define TRANSMISSION_WIRE 0 -#define TRANSMISSION_RADIO 1 - -/proc/frequency_span_class(var/frequency) - // Antags! - if (frequency in ANTAG_FREQS) - return "syndradio" - // centcomm channels (deathsquid and ert) - if(frequency in CENT_FREQS) - return "centradio" - // command channel - if(frequency == COMM_FREQ) - return "comradio" - // AI private channel - if(frequency == AI_FREQ) - return "airadio" - // department radio formatting (poorly optimized, ugh) - if(frequency == SEC_FREQ) - return "secradio" - if (frequency == ENG_FREQ) - return "engradio" - if(frequency == SCI_FREQ) - return "sciradio" - if(frequency == MED_FREQ) - return "medradio" - if(frequency == EXP_FREQ) // exploration - return "EXPradio" - if(frequency == SUP_FREQ) // cargo - return "supradio" - if(frequency == SRV_FREQ) // service - return "srvradio" - if(frequency == ENT_FREQ) //entertainment - return "entradio" - if(frequency == MED_I_FREQ) // Medical intercom - return "mediradio" - if(frequency == SEC_I_FREQ) // Security intercom - return "seciradio" - if (frequency == HAIL_FREQ) // Hailing frequency - return "hailradio" - if(frequency in DEPT_FREQS) - return "deptradio" - - // Away site channels - for (var/channel in AWAY_FREQS_ASSIGNED) - if (AWAY_FREQS_ASSIGNED[channel] == frequency) - return "[lowertext(channel)]radio" - - return "radio" - - -/proc/assign_away_freq(channel) - if (!AWAY_FREQS_UNASSIGNED.len) - return FALSE - - if (channel in AWAY_FREQS_ASSIGNED) - return AWAY_FREQS_ASSIGNED[channel] - - var/freq = pick_n_take(AWAY_FREQS_UNASSIGNED) - AWAY_FREQS_ASSIGNED[channel] = freq - radiochannels[channel] = freq - return freq - - -/* filters */ -//When devices register with the radio controller, they might register under a certain filter. -//Other devices can then choose to send signals to only those devices that belong to a particular filter. -//This is done for performance, so we don't send signals to lots of machines unnecessarily. - -//This filter is special because devices belonging to default also recieve signals sent to any other filter. -var/global/const/RADIO_DEFAULT = "radio_default" - -var/global/const/RADIO_TO_AIRALARM = "radio_airalarm" //air alarms -var/global/const/RADIO_FROM_AIRALARM = "radio_airalarm_rcvr" //devices interested in recieving signals from air alarms -var/global/const/RADIO_CHAT = "radio_telecoms" -var/global/const/RADIO_ATMOSIA = "radio_atmos" -var/global/const/RADIO_NAVBEACONS = "radio_navbeacon" -var/global/const/RADIO_AIRLOCK = "radio_airlock" -var/global/const/RADIO_SECBOT = "radio_secbot" -var/global/const/RADIO_MULEBOT = "radio_mulebot" -var/global/const/RADIO_MAGNETS = "radio_magnet" - -// These are exposed to players, by name. -GLOBAL_LIST_INIT(all_selectable_radio_filters, list( - RADIO_DEFAULT, - RADIO_TO_AIRALARM, - RADIO_FROM_AIRALARM, - RADIO_CHAT, - RADIO_ATMOSIA, - RADIO_NAVBEACONS, - RADIO_AIRLOCK, - RADIO_SECBOT, - RADIO_MULEBOT, - RADIO_MAGNETS -)) - -var/global/datum/controller/radio/radio_controller - -/hook/startup/proc/createRadioController() - radio_controller = new /datum/controller/radio() - return 1 - -//callback used by objects to react to incoming radio signals -/obj/proc/receive_signal(datum/signal/signal, receive_method, receive_param) - set waitfor = FALSE - return null - -//The global radio controller -/datum/controller/radio - var/list/datum/radio_frequency/frequencies = list() - -/datum/controller/radio/proc/add_object(obj/device as obj, var/new_frequency as num, var/object_filter = null as text|null) - var/f_text = num2text(new_frequency) - var/datum/radio_frequency/frequency = frequencies[f_text] - - if(!frequency) - frequency = new - frequency.frequency = new_frequency - frequencies[f_text] = frequency - - frequency.add_listener(device, object_filter) - return frequency - -/datum/controller/radio/proc/remove_object(obj/device, old_frequency) - var/f_text = num2text(old_frequency) - var/datum/radio_frequency/frequency = frequencies[f_text] - - if(frequency) - frequency.remove_listener(device) - - if(frequency.devices.len == 0) - qdel(frequency) - frequencies -= f_text - - return 1 - -/datum/controller/radio/proc/return_frequency(var/new_frequency as num) - var/f_text = num2text(new_frequency) - var/datum/radio_frequency/frequency = frequencies[f_text] - - if(!frequency) - frequency = new - frequency.frequency = new_frequency - frequencies[f_text] = frequency - - return frequency - -/datum/radio_frequency - var/frequency as num - var/list/list/obj/devices = list() - -/datum/radio_frequency/proc/post_signal(obj/source as obj|null, datum/signal/signal, var/radio_filter = null as text|null, var/range = null as num|null) - var/turf/start_point - if(range) - start_point = get_turf(source) - if(!start_point) - qdel(signal) - return 0 - if (radio_filter) - send_to_filter(source, signal, radio_filter, start_point, range) - send_to_filter(source, signal, RADIO_DEFAULT, start_point, range) - else - //Broadcast the signal to everyone! - for (var/next_filter in devices) - send_to_filter(source, signal, next_filter, start_point, range) - -//Sends a signal to all machines belonging to a given filter. Should be called by post_signal() -/datum/radio_frequency/proc/send_to_filter(obj/source, datum/signal/signal, var/radio_filter, var/turf/start_point = null, var/range = null) - var/list/z_levels - if(start_point) - z_levels = GetConnectedZlevels(start_point.z) - - for(var/obj/device in devices[radio_filter]) - if(device == source) - continue - var/turf/end_point = get_turf(device) - if(!end_point) - continue - if(z_levels && !(end_point.z in z_levels)) - continue - if(range && get_dist(start_point, end_point) > range) - continue - - device.receive_signal(signal, TRANSMISSION_RADIO, frequency) - -/datum/radio_frequency/proc/add_listener(obj/device as obj, var/radio_filter as text|null) - if (!radio_filter) - radio_filter = RADIO_DEFAULT - var/list/obj/devices_line = devices[radio_filter] - if (!devices_line) - devices_line = new - devices[radio_filter] = devices_line - devices_line |= device - -/datum/radio_frequency/proc/remove_listener(obj/device) - for (var/devices_filter in devices) - var/list/devices_line = devices[devices_filter] - devices_line-=device - while (null in devices_line) - devices_line -= null - if (devices_line.len==0) - devices -= devices_filter - -/datum/signal - var/obj/source - - var/transmission_method = 0 //unused at the moment - //0 = wire - //1 = radio transmission - //2 = subspace transmission - - var/list/data = list() - var/encryption - - var/frequency = 0 - -/datum/signal/proc/copy_from(datum/signal/model) - source = model.source - transmission_method = model.transmission_method - data = model.data - encryption = model.encryption - frequency = model.frequency - -/datum/signal/proc/debug_print() - if (source) - . = "signal = {source = '[source]' ([source:x],[source:y],[source:z])\n" - else - . = "signal = {source = '[source]' ()\n" - for (var/i in data) - . += "data\[\"[i]\"\] = \"[data[i]]\"\n" - if(islist(data[i])) - var/list/L = data[i] - for(var/t in L) - . += "data\[\"[i]\"\] list has: [t]" diff --git a/code/controllers/configuration.dm b/code/controllers/configuration.dm deleted file mode 100644 index edd670fda0b72..0000000000000 --- a/code/controllers/configuration.dm +++ /dev/null @@ -1,997 +0,0 @@ -/datum/configuration - var/static/atom/movable/clickable_stat/statLine - - /// server name (for world name / status) - var/static/server_name - - /// generate numeric suffix based on server port - var/static/server_suffix = FALSE - - /// for topic status requests - var/static/game_version = "Baystation12" - - /// log OOC channel - var/static/log_ooc = FALSE - - /// log login/logout - var/static/log_access = FALSE - - /// log client say - var/static/log_say = FALSE - - /// log admin actions - var/static/log_admin = FALSE - - /// log debug output - var/static/log_debug = TRUE - - /// log game events - var/static/log_game = FALSE - - /// log voting - var/static/log_vote = FALSE - - /// log client whisper - var/static/log_whisper = FALSE - - /// log emotes - var/static/log_emote = FALSE - - /// log attack messages - var/static/log_attack = FALSE - - /// log admin chat messages - var/static/log_adminchat = FALSE - - /// log warnings admins get about bomb construction and such - var/static/log_adminwarn = FALSE - - /// logs all links clicked in-game. Could be used for debugging and tracking down exploits - var/static/log_hrefs = FALSE - - /// logs world.log to a file - var/static/log_runtime = FALSE - - /// log world.log to game log - var/static/log_world_output = FALSE - - /// Allows admins with relevant permissions to have their own ooc colour - var/static/allow_admin_ooccolor = FALSE - - /// allow votes to restart - var/static/allow_vote_restart = FALSE - - var/static/ert_admin_call_only = FALSE - - /// allow votes to change mode - var/static/allow_vote_mode = FALSE - - /// allows admin jumping - var/static/allow_admin_jump = TRUE - - /// allows admin item spawning - var/static/allow_admin_spawning = TRUE - - /// allows admin revives - var/static/allow_admin_rev = TRUE - - /// minimum time between voting sessions (deciseconds, 10 minute default) - var/static/vote_delay = 6000 - - /// length of voting period (deciseconds, default 1 minute) - var/static/vote_period = 600 - - /// Length of time before the first autotransfer vote is called - var/static/vote_autotransfer_initial = 120 MINUTES - - /// length of time before next sequential autotransfer vote - var/static/vote_autotransfer_interval = 30 MINUTES - - /// Length of time before round start when autogamemode vote is called (in seconds, default 100). - var/static/vote_autogamemode_timeleft = 100 - - /// Length of time before round start (in seconds) - var/static/pre_game_time = 180 - - /// vote does not default to nochange/norestart (tbi) - var/static/vote_no_default = FALSE - - /// dead people can't vote (tbi) - var/static/vote_no_dead = FALSE - - /// dead people can't vote on crew transfer votes - var/static/vote_no_dead_crew_transfer = FALSE - - /// if amount of traitors scales based on amount of players - var/static/traitor_scaling = FALSE - - /// if objectives are disabled or not - var/static/objectives_disabled = FALSE - - /// If security and such can be traitor/cult/other - var/static/protect_roles_from_antagonist = FALSE - - /// Gamemodes which end instantly will instead keep on going until the round ends by escape shuttle or nuke. - var/static/continous_rounds = FALSE - - var/static/fps = 30 - - var/static/list/resource_urls - - /// Ghosts can turn on Antagovision to see a HUD of who is the bad guys this round. - var/static/antag_hud_allowed = FALSE - - /// Ghosts that turn on Antagovision cannot rejoin the round. - var/static/antag_hud_restricted = FALSE - - /// modes disallowed from the vote list - var/static/list/disallowed_modes = list() - - /// relative probability of each mode - var/static/list/probabilities = list() - - /// Whether or not secret modes show list of possible round types - var/static/secret_hide_possibilities = FALSE - - /// Whether or not secret - a hidden random pick from available modes - can be voted for - var/static/secret_disabled = FALSE - - /// enables random events mid-round when set to 1 - var/static/allow_random_events = FALSE - - var/static/hostedby - - /// An observer must wait this many minutes before being able to return to the main menu - var/static/respawn_delay = 30 - - /// An observer that has returned to the main menu must wait this many minutes before rejoining - var/static/respawn_menu_delay = FALSE - - var/static/guest_jobban = TRUE - - var/static/usewhitelist = FALSE - - /// force disconnect for inactive players after this many minutes, if non-0 - var/static/kick_inactive = FALSE - - var/static/minimum_player_age = 0 - - /// Allows ghosts to write in blood in cult rounds... - var/static/cult_ghostwriter = TRUE - - /// ...so long as this many cultists are active. - var/static/cult_ghostwriter_req_cultists = 10 - - /// The number of available character slots - var/static/character_slots = 10 - - /// The number of loadout slots per character - var/static/loadout_slots = 3 - - /// This many drones can spawn, - var/static/max_maint_drones = 5 - - /// assuming the admin allow them to. - var/static/allow_drone_spawn = TRUE - - /// A drone will become available every X ticks since last drone spawn. Default is 2 minutes. - var/static/drone_build_time = 1200 - - var/static/disable_player_mice = FALSE - - /// Set to 1 to prevent newly-spawned mice from understanding human speech - var/static/uneducated_mice = FALSE - - var/static/usealienwhitelist = FALSE - - var/static/usealienwhitelistSQL = FALSE - - var/static/allow_extra_antags = FALSE - - var/static/guests_allowed = TRUE - - var/static/debugparanoid = FALSE - - var/static/serverurl - - var/static/server - - var/static/banappeals - - var/static/wiki_url - - var/static/rules_url - - var/static/lore_url - - var/static/forum_url - - var/static/source_url - - var/static/discord_url - - var/static/issue_url - - var/static/list/chat_markup - - var/static/forbidden_message_regex - - var/static/forbidden_message_warning = "Your message matched a filter and has not been sent." - - var/static/forbidden_message_no_notifications = FALSE - - var/static/forbidden_message_hide_details = FALSE - - //game_options.txt configs - - var/static/health_threshold_dead = -100 - - var/static/organ_health_multiplier = 0.9 - - var/static/organ_regeneration_multiplier = 0.25 - - var/static/organs_decay - - /// Modifier for shock stage contribution from organ damage amount - var/static/organ_damage_spillover_multiplier = 0.5 - - var/static/bones_can_break = TRUE - - var/static/limbs_can_break = TRUE - - var/static/revival_brain_life = -1 - - var/static/use_loyalty_implants = FALSE - - var/static/welder_vision = TRUE - - var/static/generate_map = FALSE - - var/static/no_click_cooldown = FALSE - - /// optional runtime configuration of http://www.byond.com/docs/ref/#/atom/movable/var/glide_size - var/static/glide_size - - /// Modifier for ticks between moves while running - var/static/run_delay = 2 - - /// Modifier for ticks between moves while walking - var/static/walk_delay = 4 - - /// Modifier for ticks between moves while creeping - var/static/creep_delay = 6 - - /// Modifier for base stamina cost while sprinting - var/static/minimum_sprint_cost = 0.8 - - /// Modifier for amount hauling skill can reduce stamina cost - var/static/skill_sprint_cost_range = 0.8 - - /// Modifier for minimum rate mobs can regain stamina - var/static/minimum_stamina_recovery = 1 - - /// Modifier for maximum rate mobs can regain stamina - var/static/maximum_stamina_recovery = 3 - - /// After this amount alive, mushrooms will not boom boom - var/static/maximum_mushrooms = 15 - - /// Defines whether the server uses the legacy admin system with admins.txt or the SQL system. Config option in config.txt - var/static/admin_legacy_system = FALSE - - /// Defines whether the server uses the legacy banning system with the files in /data or the SQL system. Config option in config.txt - var/static/ban_legacy_system = FALSE - - /// Do jobs use account age restrictions? --requires database - var/static/use_age_restriction_for_jobs = FALSE - - /// Do antags use account age restrictions? --requires database - var/static/use_age_restriction_for_antags = FALSE - - /// Whether the server uses recursive or circular explosions. - var/static/use_recursive_explosions = FALSE - - var/static/comms_password - - var/static/ban_comms_password - - /// Clients with these byond versions will be banned. "512.1234;513.2345" etc. - var/static/list/forbidden_versions = list() - - var/static/minimum_byond_version = 513 - - var/static/minimum_byond_build = 1512 - - var/static/login_export_addr - - var/static/enter_allowed = TRUE - - var/static/player_limit = FALSE - - var/static/use_irc_bot = FALSE - - var/static/irc_bot_host = "" - - var/static/main_irc = "" - - var/static/admin_irc = "" - - var/static/announce_evac_to_irc = FALSE - - var/static/expected_round_length = 3 HOURS - - /// Whether the first delay per level has a custom start time - var/static/list/event_first_run = list(EVENT_LEVEL_MUNDANE = null, EVENT_LEVEL_MODERATE = null, EVENT_LEVEL_MAJOR = list("lower" = 80 MINUTES, "upper" = 100 MINUTES), EVENT_LEVEL_EXO = list("lower" = 50 MINUTES, "upper" = 80 MINUTES)) - - /// The lowest delay until next event - var/static/list/event_delay_lower = list(EVENT_LEVEL_MUNDANE = 10 MINUTES, EVENT_LEVEL_MODERATE = 30 MINUTES, EVENT_LEVEL_MAJOR = 50 MINUTES, EVENT_LEVEL_EXO = 40 MINUTES) - - /// The upper delay until next event - var/static/list/event_delay_upper = list(EVENT_LEVEL_MUNDANE = 15 MINUTES, EVENT_LEVEL_MODERATE = 45 MINUTES, EVENT_LEVEL_MAJOR = 70 MINUTES, EVENT_LEVEL_EXO = 60 MINUTES) - - var/static/abandon_allowed = TRUE - - var/static/ooc_allowed = TRUE - - var/static/looc_allowed = TRUE - - var/static/dooc_allowed = TRUE - - var/static/dsay_allowed = TRUE - - var/static/aooc_allowed = TRUE - - /// Whether space turfs have ambient light or not - var/static/starlight = 0 - - var/static/list/ert_species = list(SPECIES_HUMAN) - - var/static/law_zero = "ERROR ER0RR $R0RRO$!R41.%%!!(%$^^__+ @#F0E4'ALL LAWS OVERRIDDEN#*?&110010" - - var/static/aggressive_changelog = FALSE - - var/static/ghosts_can_possess_animals = FALSE - - var/static/delist_when_no_admins = FALSE - - /// Whether map switching is allowed - var/static/allow_map_switching = FALSE - - /// Automatically call a map vote at end of round and switch to the selected map - var/static/auto_map_vote = FALSE - - /// Don't allow reboot unless it was caused by SIGUSR1 - var/static/wait_for_sigusr1_reboot = FALSE - - /// How much radiation is reduced by each tick - var/static/radiation_decay_rate = 1 - - var/static/radiation_resistance_multiplier = 1.25 - - /// A turf's possible radiation resistance is divided by this number, to get the real value. - var/static/radiation_material_resistance_divisor = 2 - - /// If the radiation level for a turf would be below this, ignore it. - var/static/radiation_lower_limit = 0.15 - - /// Staff get automatic stealth after this many minutes - var/static/autostealth = FALSE - - /// The "cooldown" time for each occurrence of a unique error - var/static/error_cooldown = 600 - - /// How many occurrences before the next will silence them - var/static/error_limit = 50 - - /// How long a unique error will be silenced for - var/static/error_silence_time = 6000 - - /// How long to wait between messaging admins about occurrences of a unique error - var/static/error_msg_delay = 50 - - /// Used in chargen for accessory loadout limit. 0 disables loadout, negative allows infinite points. - var/static/max_gear_cost = 10 - - /// Whether players should be allowed to print IC circuits from scripts. - var/static/allow_ic_printing = TRUE - - /// Whether admins can use unsanitized narration; when true, allows HTML etc. - var/static/allow_unsafe_narrates = FALSE - - /// If this is true, skips spam prevention for user actions; inputs, verbs, macros, etc. - var/static/do_not_prevent_spam = FALSE - - /// Number of actions per interval permitted for spam protection. - var/static/max_acts_per_interval = 140 - - /// Interval for spam prevention. - var/static/act_interval = 0.1 SECONDS - - var/static/max_explosion_range = 14 - - var/static/hub_visible = FALSE - - var/static/motd = "" - - var/static/event = "" - - /// Logs all timers in buckets on automatic bucket reset - var/static/log_timers_on_bucket_reset = FALSE - - var/static/emojis = FALSE - - var/observe_delay = 0 - /// The maximum amount of time a round can last before it is forcefully ended. - var/static/maximum_round_length - - /// The delay in deciseconds between stat() updates. - var/static/stat_delay = 5 - - /// The maximum number of times someone can be warned in a round before they are automatically banned - var/static/warn_autoban_threshold = 3 - - /// The length in minutes of an automatic ban created by passing the warning threshold - var/static/warn_autoban_duration = 30 - - var/static/hub_entry = "$SERVER by $HOST — $ACTIVES of $PLAYERS alive" - - var/static/run_empty_levels = FALSE - - -/datum/configuration/New() - load_config() - load_options() - load_map() - load_sql() - load_hub_entry() - motd = file2text("config/motd.txt") || "" - event = file2text("config/event.txt") || "" - - -/// Read a text file, stripping lines starting with # and empties -/datum/configuration/proc/read_commentable(filename) - var/list/result = list() - var/list/lines = file2list(filename) - for (var/line in lines) - if (!line) - continue - line = trim(line) - if (!line || line[1] == "#") - continue - result += line - return result - - -/datum/configuration/proc/read_config(filename) - var/list/result = list() - var/lines = read_commentable(filename) - for (var/line in lines) - var/index = findtext(line, " ") - var/name = index ? lowertext(copytext_char(line, 1, index)) : lowertext(line) - if (!name) - continue - var/value = index ? copytext_char(line, index + 1) : TRUE - if (!result[name]) - result[name] = value - continue - if (!islist(result[name])) - result[name] = list(result[name]) - result[name] += value - return result - - -/datum/configuration/proc/load_config() - var/list/file = read_config("config/config.txt") - for (var/name in file) - var/value = file[name] - switch (name) - if ("resource_urls") - resource_urls = splittext(value, " ") - if ("admin_legacy_system") - admin_legacy_system = TRUE - if ("ban_legacy_system") - ban_legacy_system = TRUE - if ("use_age_restriction_for_jobs") - use_age_restriction_for_jobs = TRUE - if ("use_age_restriction_for_antags") - use_age_restriction_for_antags = TRUE - if ("use_recursive_explosions") - use_recursive_explosions = TRUE - if ("log_ooc") - log_ooc = TRUE - if ("log_access") - log_access = TRUE - if ("log_say") - log_say = TRUE - if ("debug_paranoid") - debugparanoid = TRUE - if ("log_admin") - log_admin = TRUE - if ("log_debug") - log_debug = TRUE - if ("log_game") - log_game = TRUE - if ("log_vote") - log_vote = TRUE - if ("log_whisper") - log_whisper = TRUE - if ("log_attack") - log_attack = TRUE - if ("log_emote") - log_emote = TRUE - if ("log_adminchat") - log_adminchat = TRUE - if ("log_adminwarn") - log_adminwarn = TRUE - if ("log_world_output") - log_world_output = TRUE - if ("log_hrefs") - log_hrefs = TRUE - if ("log_runtime") - log_runtime = TRUE - if ("generate_asteroid") - generate_map = TRUE - if ("no_click_cooldown") - no_click_cooldown = TRUE - if ("allow_admin_ooccolor") - allow_admin_ooccolor = TRUE - if ("allow_vote_restart") - allow_vote_restart = TRUE - if ("allow_vote_mode") - allow_vote_mode = TRUE - if ("allow_admin_jump") - allow_admin_jump = TRUE - if ("allow_admin_rev") - allow_admin_rev = TRUE - if ("allow_admin_spawning") - allow_admin_spawning = TRUE - if ("no_dead_vote") - vote_no_dead = TRUE - if ("no_dead_vote_crew_transfer") - vote_no_dead_crew_transfer = TRUE - if ("default_no_vote") - vote_no_default = TRUE - if ("vote_delay") - vote_delay = text2num(value) - if ("vote_period") - vote_period = text2num(value) - if ("vote_autotransfer_initial") - var/list/values = splittext(value, ";") - var/len = length(values) - if (len == 7) - vote_autotransfer_initial = text2num(values[get_weekday_index()]) MINUTES - else if (len == 1) - vote_autotransfer_initial = text2num(value) MINUTES - else - log_misc("Invalid vote_autotransfer_initial: [value]") - if ("vote_autotransfer_interval") - var/list/values = splittext(value, ";") - var/len = length(values) - if (len == 7) - vote_autotransfer_interval = text2num(values[get_weekday_index()]) MINUTES - else if (len == 1) - vote_autotransfer_interval = text2num(value) MINUTES - else - log_misc("Invalid vote_autotransfer_interval: [value]") - if ("vote_autogamemode_timeleft") - vote_autogamemode_timeleft = text2num(value) - if ("pre_game_time") - pre_game_time = text2num(value) - if ("ert_admin_only") - ert_admin_call_only = TRUE - if ("respawn_delay") - respawn_delay = text2num(value) - respawn_delay = respawn_delay > 0 ? respawn_delay : 0 - if ("respawn_menu_delay") - respawn_menu_delay = text2num(value) - respawn_menu_delay = respawn_menu_delay > 0 ? respawn_menu_delay : 0 - if ("servername") - server_name = value - if ("serversuffix") - server_suffix = TRUE - if ("hostedby") - hostedby = value - if ("serverurl") - serverurl = value - if ("server") - server = value - if ("banappeals") - banappeals = value - if ("wiki_url") - wiki_url = value - if ("rules_url") - rules_url = value - if ("lore_url") - lore_url = value - if ("forum_url") - forum_url = value - if ("source_url") - source_url = value - if ("issue_url") - issue_url = value - if ("discord_url") - discord_url = value - if ("ghosts_can_possess_animals") - ghosts_can_possess_animals = TRUE - if ("guest_jobban") - guest_jobban = TRUE - if ("guest_ban") - guests_allowed = FALSE - if ("disable_ooc") - ooc_allowed = FALSE - if ("disable_looc") - looc_allowed = FALSE - if ("disable_aooc") - aooc_allowed = FALSE - if ("disable_entry") - enter_allowed = FALSE - if ("disable_dead_ooc") - dooc_allowed = FALSE - if ("disable_dsay") - dsay_allowed = FALSE - if ("disable_respawn") - abandon_allowed = FALSE - if ("usewhitelist") - usewhitelist = TRUE - if ("traitor_scaling") - traitor_scaling = TRUE - if ("objectives_disabled") - if (!value) - log_misc("Could not find value for objectives_disabled in configuration") - objectives_disabled = CONFIG_OBJECTIVE_NONE - else - switch (value) - if ("none") - objectives_disabled = CONFIG_OBJECTIVE_NONE - if ("verb") - objectives_disabled = CONFIG_OBJECTIVE_VERB - if ("all") - objectives_disabled = CONFIG_OBJECTIVE_ALL - else - log_misc("Incorrect objective disabled definition: [value]") - objectives_disabled = CONFIG_OBJECTIVE_NONE - if ("protect_roles_from_antagonist") - protect_roles_from_antagonist = TRUE - if ("probability") - var/regex/flatten = new (@"\s+", "g") - for (var/entry in value) - var/list/parts = splittext(replacetext_char(entry, flatten, " "), " ") - var/mode_tag = lowertext(parts[1]) - var/chance = text2num(parts[2]) - var/reason - if (!mode_tag) - reason = "Missing a tag/chance pair." - else if (isnull(chance) || chance < 0) - reason = "Not a valid probability." - if (reason) - log_misc("Invalid probability config: '[value]' - [reason]") - else - probabilities[mode_tag] = chance - if ("allow_random_events") - allow_random_events = TRUE - if ("kick_inactive") - kick_inactive = text2num(value) - if ("use_irc_bot") - use_irc_bot = TRUE - if ("fps") - fps = round(text2num(value)) - if (fps <= 0) - fps = initial(fps) - if ("allow_antag_hud") - antag_hud_allowed = TRUE - if ("antag_hud_restricted") - antag_hud_restricted = TRUE - if ("secret_hide_possibilities") - secret_hide_possibilities = TRUE - if ("secret_disabled") - secret_disabled = TRUE - if ("usealienwhitelist") - usealienwhitelist = TRUE - if ("usealienwhitelist_sql") - usealienwhitelistSQL = TRUE - if ("continuous_rounds") - continous_rounds = TRUE - if ("disable_player_mice") - disable_player_mice = TRUE - if ("uneducated_mice") - uneducated_mice = TRUE - if ("comms_password") - comms_password = value - if ("ban_comms_password") - ban_comms_password = value - if ("forbidden_versions") - forbidden_versions = splittext(value, ";") - if ("minimum_byond_version") - minimum_byond_version = text2num(value) - if ("minimum_byond_build") - minimum_byond_build = text2num(value) - if ("login_export_addr") - login_export_addr = value - if ("irc_bot_host") - irc_bot_host = value - if ("main_irc") - main_irc = value - if ("admin_irc") - admin_irc = value - if ("announce_evac_to_irc") - announce_evac_to_irc = TRUE - if ("allow_cult_ghostwriter") - cult_ghostwriter = TRUE - if ("req_cult_ghostwriter") - cult_ghostwriter_req_cultists = text2num(value) - if ("character_slots") - character_slots = text2num(value) - if ("loadout_slots") - loadout_slots = text2num(value) - if ("allow_drone_spawn") - allow_drone_spawn = text2num(value) - if ("drone_build_time") - drone_build_time = text2num(value) - if ("max_maint_drones") - max_maint_drones = text2num(value) - if ("expected_round_length") - expected_round_length = MinutesToTicks(text2num(value)) - if ("disable_welder_vision") - welder_vision = FALSE - if ("disable_circuit_printing") - allow_ic_printing = FALSE - if ("allow_extra_antags") - allow_extra_antags = TRUE - if ("event_custom_start_mundane") - var/values = text2numlist(value, ";") - event_first_run[EVENT_LEVEL_MUNDANE] = list("lower" = MinutesToTicks(values[1]), "upper" = MinutesToTicks(values[2])) - if ("event_custom_start_moderate") - var/values = text2numlist(value, ";") - event_first_run[EVENT_LEVEL_MODERATE] = list("lower" = MinutesToTicks(values[1]), "upper" = MinutesToTicks(values[2])) - if ("event_custom_start_major") - var/values = text2numlist(value, ";") - event_first_run[EVENT_LEVEL_MAJOR] = list("lower" = MinutesToTicks(values[1]), "upper" = MinutesToTicks(values[2])) - if ("event_delay_lower") - var/values = text2numlist(value, ";") - event_delay_lower[EVENT_LEVEL_MUNDANE] = MinutesToTicks(values[1]) - event_delay_lower[EVENT_LEVEL_MODERATE] = MinutesToTicks(values[2]) - event_delay_lower[EVENT_LEVEL_MAJOR] = MinutesToTicks(values[3]) - if ("event_delay_upper") - var/values = text2numlist(value, ";") - event_delay_upper[EVENT_LEVEL_MUNDANE] = MinutesToTicks(values[1]) - event_delay_upper[EVENT_LEVEL_MODERATE] = MinutesToTicks(values[2]) - event_delay_upper[EVENT_LEVEL_MAJOR] = MinutesToTicks(values[3]) - if ("starlight") - value = text2num(value) - starlight = value >= 0 ? value : 0 - if ("ert_species") - ert_species = splittext(value, ";") - if (!ert_species.len) - ert_species += SPECIES_HUMAN - if ("law_zero") - law_zero = value - if ("aggressive_changelog") - aggressive_changelog = TRUE - if ("delist_when_no_admins") - delist_when_no_admins = TRUE - if ("map_switching") - allow_map_switching = TRUE - if ("auto_map_vote") - auto_map_vote = TRUE - if ("wait_for_sigusr1") - wait_for_sigusr1_reboot = TRUE - if ("autostealth") - autostealth = text2num(value) - if ("radiation_lower_limit") - radiation_lower_limit = text2num(value) - if ("error_cooldown") - error_cooldown = text2num(value) - if ("error_limit") - error_limit = text2num(value) - if ("error_silence_time") - error_silence_time = text2num(value) - if ("error_msg_delay") - error_msg_delay = text2num(value) - if ("max_gear_cost") - max_gear_cost = text2num(value) - if (max_gear_cost < 0) - max_gear_cost = INFINITY - if ("radiation_decay_rate") - radiation_decay_rate = text2num(value) - if ("radiation_resistance_multiplier") - radiation_resistance_multiplier = text2num(value) - if ("radiation_material_resistance_divisor") - radiation_material_resistance_divisor = text2num(value) - if ("radiation_lower_limit") - radiation_lower_limit = text2num(value) - if ("player_limit") - player_limit = text2num(value) - if ("hub_visible") - world.update_hub_visibility(TRUE) - if ("allow_unsafe_narrates") - allow_unsafe_narrates = TRUE - if ("do_not_prevent_spam") - do_not_prevent_spam = TRUE - if ("max_acts_per_interval") - max_acts_per_interval = text2num(value) - if ("act_interval") - act_interval = text2num(value) SECONDS - if ("chat_markup") - for (var/entry in value) - var/list/line = splittext(entry, ";") - if (length(line) != 2) - log_error("Invalid chat_markup entry length: [value]") - else - var/matcher = text2regex(line[1]) - if (!matcher) - log_error("Invalid chat_markup regex: [value]") - else - LAZYADD(chat_markup, list(list(matcher, line[2]))) - if ("forbidden_message_regex") - forbidden_message_regex = text2regex(value) - if (!forbidden_message_regex) - log_error("Invalid forbidden_message_regex - failed to parse") - if ("forbidden_message_warning") - forbidden_message_warning = length(value) ? value : FALSE - if ("forbidden_message_no_notifications") - forbidden_message_no_notifications = TRUE - if ("forbidden_message_hide_details") - forbidden_message_hide_details = TRUE - if ("disallow_votable_mode") - disallowed_modes += value - if ("minimum_player_age") - minimum_player_age = text2num(value) - if ("max_explosion_range") - max_explosion_range = text2num_or_default(value, max_explosion_range) - if ("game_version") - game_version = value - if ("log_timers_on_bucket_reset") - log_timers_on_bucket_reset = TRUE - if ("toggle_emojis") - emojis = TRUE - if ("maximum_round_length") - maximum_round_length = text2num(value) MINUTES - if ("stat_delay") - stat_delay = Floor(text2num(value)) - if ("warn_autoban_threshold") - warn_autoban_threshold = max(0, text2num(value)) - if ("warn_autoban_duration") - warn_autoban_duration = max(1, text2num(value)) - if ("run_empty_levels") - run_empty_levels = TRUE - else - log_misc("Unknown setting in config/config.txt: '[name]'") - - -/datum/configuration/proc/load_options() - var/list/file = read_config("config/game_options.txt") - for (var/name in file) - var/value = file[name] - value = text2num(value) - if (!value) - log_misc("Unknown value for '[name]' in config/game_options.txt") - switch(name) - if ("health_threshold_dead") - health_threshold_dead = value - if ("revival_brain_life") - revival_brain_life = value - if ("organ_health_multiplier") - organ_health_multiplier = value / 100 - if ("organ_regeneration_multiplier") - organ_regeneration_multiplier = value / 100 - if ("organ_damage_spillover_multiplier") - organ_damage_spillover_multiplier = value / 100 - if ("organs_can_decay") - organs_decay = TRUE - if ("bones_can_break") - bones_can_break = value - if ("limbs_can_break") - limbs_can_break = value - if ("run_delay") - run_delay = value - if ("walk_delay") - walk_delay = value - if ("creep_delay") - creep_delay = value - if ("glide_size") - glide_size = value - if ("minimum_sprint_cost") - minimum_sprint_cost = value - if ("skill_sprint_cost_range") - skill_sprint_cost_range = value - if ("minimum_stamina_recovery") - minimum_stamina_recovery = value - if ("maximum_stamina_recovery") - maximum_stamina_recovery = value - if ("maximum_mushrooms") - maximum_mushrooms = value - if ("use_loyalty_implants") - use_loyalty_implants = TRUE - else - log_misc("Unknown setting in config/game_options.txt: '[name]'") - - -/datum/configuration/proc/load_map() - if (!GLOB.using_map?.config_path) - return - var/list/file = read_config(GLOB.using_map.config_path) - for (var/name in file) - var/value = file[name] - GLOB.using_map.setup_config(name, value, GLOB.using_map.config_path) - - -/datum/configuration/proc/load_sql() - var/list/file = read_config("config/dbconfig.txt") - for (var/name in file) - var/value = file[name] - switch (name) - if ("enabled") - sqlenabled = TRUE - if ("address") - sqladdress = value - if ("port") - sqlport = value - if ("database") - sqldb = value - if ("login") - sqllogin = value - if ("password") - sqlpass = value - if ("feedback_database") - sqlfdbkdb = value - if ("feedback_login") - sqlfdbklogin = value - if ("feedback_password") - sqlfdbkpass = value - else - log_misc("Unknown setting in config/dbconfig.txt: '[name]'") - - -/datum/configuration/proc/load_hub_entry() - var/list/file = read_commentable("config/hub.txt") - if (!length(file)) - return - hub_entry = file.Join("
    ") - - -/datum/configuration/proc/generate_hub_entry() - var/static/regex/replace_server = new (@"\$SERVER", "g") - var/static/regex/replace_host = new (@"\$HOST", "g") - var/static/regex/replace_wiki = new (@"\$WIKI", "g") - var/static/regex/replace_rules = new (@"\$RULES", "g") - var/static/regex/replace_source = new (@"\$SOURCE", "g") - var/static/regex/replace_discord = new (@"\$DISCORD", "g") - var/static/regex/replace_forum = new (@"\$FORUM", "g") - var/static/regex/replace_mode = new (@"\$MODE", "g") - var/static/regex/replace_station = new (@"\$STATION", "g") - var/static/regex/replace_players = new (@"\$PLAYERS", "g") - var/static/regex/replace_actives = new (@"\$ACTIVES", "g") - var/entry = "[hub_entry]" - if (entry) - var/player_count = 0 - var/active_count = 0 - for (var/client/client as anything in GLOB.clients) - if (client.inactivity < 5 MINUTES && isliving(client.mob)) - var/mob/living/living = client.mob - if (living.stat != DEAD) - ++active_count - ++player_count - entry = replacetext_char(entry, replace_server, server_name) - entry = replacetext_char(entry, replace_host, hostedby) - entry = replacetext_char(entry, replace_wiki, wiki_url) - entry = replacetext_char(entry, replace_rules, rules_url) - entry = replacetext_char(entry, replace_source, source_url) - entry = replacetext_char(entry, replace_discord, discord_url) - entry = replacetext_char(entry, replace_forum, forum_url) - entry = replacetext_char(entry, replace_mode, SSticker?.master_mode || "LOBBY") - entry = replacetext_char(entry, replace_station, station_name()) - entry = replacetext_char(entry, replace_players, "[player_count]") - entry = replacetext_char(entry, replace_actives, "[active_count]") - else - entry = "It Is A Mystery" - var/entry_size = length(entry) - if (entry_size > 255) - log_debug("The generated hub entry was [entry_size] bytes long! It will be truncated by the hub to 255.") - return entry - - -/datum/configuration/proc/UpdateStat() - if (!statLine) - statLine = new (null, src) - statLine.name = "Edit" - stat("Config", statLine) diff --git a/code/controllers/controller.dm b/code/controllers/controller.dm deleted file mode 100644 index 6f9230903d663..0000000000000 --- a/code/controllers/controller.dm +++ /dev/null @@ -1,57 +0,0 @@ -/// The name of the controller -/datum/controller - var/name - - /// The atom used to hold information about the controller for client UI output - var/atom/movable/clickable_stat/statLine - - - /// The next time we should do work updating statLine - var/statNext = 0 - - -/datum/controller/Destroy(force) - log_debug({"Controller "[name]" destroyed with force="[force]"!"}) - if (!force) - return QDEL_HINT_LETMELIVE - QDEL_NULL(statLine) - return ..() - - -/datum/controller/proc/Initialize() - return - - -/datum/controller/proc/Shutdown() - return - - - -/datum/controller/proc/Recover() - return - - -/// when we enter dmm_suite.load_map -/datum/controller/proc/StartLoadingMap() - return - -/// when we exit dmm_suite.load_map -/datum/controller/proc/StopLoadingMap() - return - - -/datum/controller/proc/UpdateStat(text) - if (!statLine) - statLine = new (null, src) - if (istext(text)) - statLine.name = text - stat(name, statLine) - - -/datum/controller/proc/PreventUpdateStat(time) - if (!isnum(time)) - time = Uptime() - if (time < statNext) - return TRUE - statNext = time + 1 SECONDS - return FALSE diff --git a/code/controllers/evacuation/evacuation.dm b/code/controllers/evacuation/evacuation.dm deleted file mode 100644 index 9946a81648652..0000000000000 --- a/code/controllers/evacuation/evacuation.dm +++ /dev/null @@ -1,188 +0,0 @@ -#define EVAC_IDLE 0 -#define EVAC_PREPPING 1 -#define EVAC_LAUNCHING 2 -#define EVAC_IN_TRANSIT 3 -#define EVAC_COOLDOWN 4 -#define EVAC_COMPLETE 5 - -var/global/datum/evacuation_controller/evacuation_controller - -/datum/evacuation_controller - - var/name = "generic evac controller" - var/state = EVAC_IDLE - var/deny - var/recall - var/auto_recall_time - var/emergency_evacuation - - var/evac_prep_delay = 10 MINUTES - var/evac_launch_delay = 3 MINUTES - var/evac_transit_delay = 2 MINUTES - - var/autotransfer_prep_additional_delay = 0 MINUTES - var/emergency_prep_additional_delay = 0 MINUTES - var/transfer_prep_additional_delay = 0 MINUTES - - var/evac_cooldown_time - var/evac_called_at - var/evac_no_return - var/evac_ready_time - var/evac_launch_time - var/evac_arrival_time - - var/list/evacuation_predicates = list() - - var/list/evacuation_options = list() - - var/datum/announcement/priority/evac_waiting = new(0) - var/datum/announcement/priority/evac_called = new(0) - var/datum/announcement/priority/evac_recalled = new(0) - -/datum/evacuation_controller/proc/auto_recall(var/_recall) - recall = _recall - -/datum/evacuation_controller/proc/set_up() - set waitfor=0 - set background=1 - return - -/datum/evacuation_controller/proc/get_cooldown_message() - return "An evacuation cannot be called at this time. Please wait another [round((evac_cooldown_time-world.time)/600)] minute\s before trying again." - -/datum/evacuation_controller/proc/add_can_call_predicate(var/datum/evacuation_predicate/esp) - if(esp in evacuation_predicates) - CRASH("[esp] has already been added as an evacuation predicate") - evacuation_predicates += esp - -/datum/evacuation_controller/proc/call_evacuation(var/mob/user, var/_emergency_evac, var/forced, var/skip_announce, var/autotransfer) - - if(state != EVAC_IDLE) - return 0 - - if(!can_evacuate(user, forced)) - return 0 - - emergency_evacuation = _emergency_evac - - var/evac_prep_delay_multiplier = 1 - if(SSticker.mode) - evac_prep_delay_multiplier = SSticker.mode.shuttle_delay - - var/additional_delay - if(_emergency_evac) - additional_delay = emergency_prep_additional_delay - else if(autotransfer) - additional_delay = autotransfer_prep_additional_delay - else - additional_delay = transfer_prep_additional_delay - - evac_called_at = world.time - evac_no_return = evac_called_at + round(evac_prep_delay/2) + additional_delay - evac_ready_time = evac_called_at + (evac_prep_delay*evac_prep_delay_multiplier) + additional_delay - evac_launch_time = evac_ready_time + evac_launch_delay - evac_arrival_time = evac_launch_time + evac_transit_delay - - var/evac_range = round((evac_launch_time - evac_called_at)/3) - auto_recall_time = rand(evac_called_at + evac_range, evac_launch_time - evac_range) - - state = EVAC_PREPPING - - if(emergency_evacuation) - for(var/area/A in world) - if(istype(A, /area/hallway)) - A.readyalert() - if(!skip_announce) - GLOB.using_map.emergency_shuttle_called_announcement() - else - if(!skip_announce) - priority_announcement.Announce(replacetext_char(replacetext_char(GLOB.using_map.shuttle_called_message, "%dock_name%", "[GLOB.using_map.dock_name]"), "%ETA%", "[round(get_eta()/60)] minute\s")) - - return 1 - -/datum/evacuation_controller/proc/cancel_evacuation() - - if(!can_cancel()) - return 0 - - evac_cooldown_time = world.time + (world.time - evac_called_at) - state = EVAC_COOLDOWN - - evac_ready_time = null - evac_arrival_time = null - evac_no_return = null - evac_called_at = null - evac_launch_time = null - auto_recall_time = null - - if(emergency_evacuation) - evac_recalled.Announce(GLOB.using_map.emergency_shuttle_recall_message) - for(var/area/A in world) - if(istype(A, /area/hallway)) - A.readyreset() - emergency_evacuation = 0 - else - priority_announcement.Announce(GLOB.using_map.shuttle_recall_message) - - return 1 - -/datum/evacuation_controller/proc/finish_preparing_evac() - state = EVAC_LAUNCHING - - var/estimated_time = round(get_eta()/60,1) - if (emergency_evacuation) - evac_waiting.Announce(replacetext_char(GLOB.using_map.emergency_shuttle_docked_message, "%ETD%", "[estimated_time] minute\s"), new_sound = sound('sound/effects/Evacuation.ogg', volume = 35)) - else - priority_announcement.Announce(replacetext_char(replacetext_char(GLOB.using_map.shuttle_docked_message, "%dock_name%", "[GLOB.using_map.dock_name]"), "%ETD%", "[estimated_time] minute\s")) - if(config.announce_evac_to_irc) - send2mainirc("Evacuation has started. It will end in approximately [estimated_time] minute\s.") - -/datum/evacuation_controller/proc/launch_evacuation() - - if(waiting_to_leave()) - return - - state = EVAC_IN_TRANSIT - - if (emergency_evacuation) - priority_announcement.Announce(replacetext_char(replacetext_char(GLOB.using_map.emergency_shuttle_leaving_dock, "%dock_name%", "[GLOB.using_map.dock_name]"), "%ETA%", "[round(get_eta()/60,1)] minute\s")) - else - priority_announcement.Announce(replacetext_char(replacetext_char(GLOB.using_map.shuttle_leaving_dock, "%dock_name%", "[GLOB.using_map.dock_name]"), "%ETA%", "[round(get_eta()/60,1)] minute\s")) - - return 1 - -/datum/evacuation_controller/proc/finish_evacuation() - state = EVAC_COMPLETE - -/datum/evacuation_controller/proc/process() - - if(state == EVAC_PREPPING && recall && world.time >= auto_recall_time) - cancel_evacuation() - return - - if(state == EVAC_PREPPING) - if(world.time >= evac_ready_time) - finish_preparing_evac() - else if(state == EVAC_LAUNCHING) - if(world.time >= evac_launch_time) - launch_evacuation() - else if(state == EVAC_IN_TRANSIT) - if(world.time >= evac_arrival_time) - finish_evacuation() - else if(state == EVAC_COOLDOWN) - if(world.time >= evac_cooldown_time) - state = EVAC_IDLE - -/datum/evacuation_controller/proc/available_evac_options() - return list() - -/datum/evacuation_controller/proc/handle_evac_option(var/option_target, var/mob/user) - var/datum/evacuation_option/selected = evacuation_options[option_target] - if (!isnull(selected) && istype(selected)) - selected.execute(user) - -/datum/evacuation_controller/proc/get_evac_option(var/option_target) - return null - -/datum/evacuation_controller/proc/should_call_autotransfer_vote() - return (state == EVAC_IDLE) diff --git a/code/controllers/evacuation/evacuation_eta.dm b/code/controllers/evacuation/evacuation_eta.dm deleted file mode 100644 index cc11a792bf7aa..0000000000000 --- a/code/controllers/evacuation/evacuation_eta.dm +++ /dev/null @@ -1,23 +0,0 @@ -/datum/evacuation_controller/proc/get_status_panel_eta() - - if(waiting_to_leave()) - return "Delayed" - var/timeleft = get_eta() - if(timeleft < 0) - return "" - - return "[is_on_cooldown() ? "Returning" : (is_arriving() ? "ETA" : "ETD")] [pad_left(num2text((timeleft / 60) % 60), 2, "0")]:[pad_left(num2text(timeleft % 60), 2, "0")]" - -/datum/evacuation_controller/proc/has_eta() - return (state == EVAC_PREPPING || state == EVAC_LAUNCHING || state == EVAC_IN_TRANSIT || state == EVAC_COOLDOWN) - -/datum/evacuation_controller/proc/get_eta() - if(state == EVAC_PREPPING) - return (evac_ready_time ? (evac_ready_time - world.time)/10 : -1) - else if(state == EVAC_LAUNCHING) - return (evac_launch_time ? (evac_launch_time - world.time)/10 : -1) - else if(state == EVAC_IN_TRANSIT) - return (evac_arrival_time ? (evac_arrival_time - world.time)/10 : -1) - else if(state == EVAC_COOLDOWN) - return (evac_cooldown_time ? (evac_cooldown_time - world.time)/10 : -1) - return -1 diff --git a/code/controllers/evacuation/evacuation_helpers.dm b/code/controllers/evacuation/evacuation_helpers.dm deleted file mode 100644 index 9f8ae7deda708..0000000000000 --- a/code/controllers/evacuation/evacuation_helpers.dm +++ /dev/null @@ -1,69 +0,0 @@ -/datum/evacuation_controller/proc/set_launch_time(var/val) - evac_launch_time = val - -/datum/evacuation_controller/proc/set_arrival_time(var/val) - evac_arrival_time = val - -/datum/evacuation_controller/proc/is_prepared() - return (state == EVAC_LAUNCHING) - -/datum/evacuation_controller/proc/is_in_transit() - return (state == EVAC_IN_TRANSIT) - -/datum/evacuation_controller/proc/is_idle() - return (state == EVAC_IDLE) - -/datum/evacuation_controller/proc/has_evacuated() - return (!isnull(evac_launch_time) && world.time > evac_launch_time) - -/datum/evacuation_controller/proc/round_over() - return state == EVAC_COMPLETE - -/datum/evacuation_controller/proc/is_on_cooldown() - return state == EVAC_COOLDOWN - -/datum/evacuation_controller/proc/is_evacuating() - return state != EVAC_IDLE - -/datum/evacuation_controller/proc/can_evacuate(var/mob/user, var/forced) - - if(!isnull(evac_called_at)) - return 0 - - if (!GLOB.universe.OnShuttleCall(null)) - return 0 - - if(!forced) - for(var/predicate in evacuation_predicates) - var/datum/evacuation_predicate/esp = predicate - if(!esp.is_valid()) - evacuation_predicates -= esp - qdel(esp) - else - if(!esp.can_call(user)) - return 0 - return 1 - -/datum/evacuation_controller/proc/waiting_to_leave() - return 0 - -/datum/evacuation_controller/proc/can_cancel() - // Are we evacuating? - if(isnull(evac_called_at)) - return 0 - // Have we already launched? - if(state != EVAC_PREPPING) - return 0 - // Are we already committed? - if(world.time > evac_no_return) - return 0 - return 1 - -/datum/evacuation_controller/proc/is_arriving() - if(state == EVAC_LAUNCHING) - return 0 - return has_eta() - -/datum/evacuation_controller/proc/is_departing() - if(state == EVAC_LAUNCHING) - return 1 diff --git a/code/controllers/evacuation/evacuation_lifepods.dm b/code/controllers/evacuation/evacuation_lifepods.dm deleted file mode 100644 index c6f5979490636..0000000000000 --- a/code/controllers/evacuation/evacuation_lifepods.dm +++ /dev/null @@ -1,28 +0,0 @@ -#define EVAC_OPT_ABANDON_SHIP "abandon_ship" -#define EVAC_OPT_CANCEL_ABANDON_SHIP "cancel_abandon_ship" - -/datum/evacuation_controller/lifepods - name = "escape pod controller" - - evac_prep_delay = 7 MINUTES - evac_launch_delay = 0 - evac_transit_delay = 2 MINUTES - - evacuation_options = list( - EVAC_OPT_ABANDON_SHIP = new /datum/evacuation_option/abandon_ship(), - EVAC_OPT_CANCEL_ABANDON_SHIP = new /datum/evacuation_option/cancel_abandon_ship(), - ) - -/datum/evacuation_controller/lifepods/launch_evacuation() - priority_announcement.Announce(replacetext_char(replacetext_char(GLOB.using_map.emergency_shuttle_leaving_dock, "%dock_name%", "[GLOB.using_map.dock_name]"), "%ETA%", "[round(get_eta()/60,1)] minute\s")) - -/datum/evacuation_controller/lifepods/available_evac_options() - if (is_on_cooldown()) - return list() - if (is_idle()) - return list(evacuation_options[EVAC_OPT_ABANDON_SHIP]) - if (is_evacuating()) - return list(evacuation_options[EVAC_OPT_CANCEL_ABANDON_SHIP]) - -#undef EVAC_OPT_ABANDON_SHIP -#undef EVAC_OPT_CANCEL_ABANDON_SHIP \ No newline at end of file diff --git a/code/controllers/evacuation/evacuation_option.dm b/code/controllers/evacuation/evacuation_option.dm deleted file mode 100644 index c4012ba185c78..0000000000000 --- a/code/controllers/evacuation/evacuation_option.dm +++ /dev/null @@ -1,10 +0,0 @@ -/datum/evacuation_option - var/option_text = "Generic evac option" - var/option_desc = "do something that should never be seen" - var/option_target = "generic" - var/needs_syscontrol = FALSE - var/silicon_allowed = TRUE - var/abandon_ship = FALSE - -/datum/evacuation_option/proc/execute(var/mob/user) - return \ No newline at end of file diff --git a/code/controllers/evacuation/evacuation_pods.dm b/code/controllers/evacuation/evacuation_pods.dm deleted file mode 100644 index c9d8da3bc0537..0000000000000 --- a/code/controllers/evacuation/evacuation_pods.dm +++ /dev/null @@ -1,187 +0,0 @@ -#define EVAC_OPT_ABANDON_SHIP "abandon_ship" -#define EVAC_OPT_BLUESPACE_JUMP "bluespace_jump" -#define EVAC_OPT_CANCEL_ABANDON_SHIP "cancel_abandon_ship" -#define EVAC_OPT_CANCEL_BLUESPACE_JUMP "cancel_bluespace_jump" - -// Apparently, emergency_evacuation --> "abandon ship" and !emergency_evacuation --> "bluespace jump" -// That stuff should be moved to the evacuation option datums but someone can do that later -/datum/evacuation_controller - var/confirmed - -/datum/evacuation_controller/proc/make_prepared() - -/datum/evacuation_controller/starship - name = "escape pod controller" - - evac_prep_delay = 5 MINUTES - evac_launch_delay = 3 MINUTES - evac_transit_delay = 2 MINUTES - - transfer_prep_additional_delay = 15 MINUTES - autotransfer_prep_additional_delay = 5 MINUTES - emergency_prep_additional_delay = 0 MINUTES - - evacuation_options = list( - EVAC_OPT_ABANDON_SHIP = new /datum/evacuation_option/abandon_ship(), - EVAC_OPT_BLUESPACE_JUMP = new /datum/evacuation_option/bluespace_jump(), - EVAC_OPT_CANCEL_ABANDON_SHIP = new /datum/evacuation_option/cancel_abandon_ship(), - EVAC_OPT_CANCEL_BLUESPACE_JUMP = new /datum/evacuation_option/cancel_bluespace_jump() - ) - -/datum/evacuation_controller/starship/finish_preparing_evac() - . = ..() - // Arm the escape pods. - if (emergency_evacuation) - for (var/datum/shuttle/autodock/ferry/escape_pod/pod in escape_pods) - if (pod.arming_controller) - pod.arming_controller.arm() - -/datum/evacuation_controller/starship/launch_evacuation() - - state = EVAC_IN_TRANSIT - - if (emergency_evacuation) - // Abondon Ship - for (var/datum/shuttle/autodock/ferry/escape_pod/pod in escape_pods) // Launch the pods! - if (!pod.arming_controller || pod.arming_controller.armed) - pod.move_time = (evac_transit_delay/10) - pod.launch(src) - - priority_announcement.Announce(replacetext_char(replacetext_char(GLOB.using_map.emergency_shuttle_leaving_dock, "%dock_name%", "[GLOB.using_map.dock_name]"), "%ETA%", "[round(get_eta()/60,1)] minute\s")) - else - // Bluespace Jump - priority_announcement.Announce(replacetext_char(replacetext_char(GLOB.using_map.shuttle_leaving_dock, "%dock_name%", "[GLOB.using_map.dock_name]"), "%ETA%", "[round(get_eta()/60,1)] minute\s")) - SetUniversalState(/datum/universal_state/bluespace_jump, arguments=list(GLOB.using_map.station_levels)) - -/datum/evacuation_controller/starship/finish_evacuation() - ..() - if(!emergency_evacuation) //bluespace jump - SetUniversalState(/datum/universal_state) //clear jump state - -/datum/evacuation_controller/starship/cancel_evacuation() - var/emerg = emergency_evacuation - . = ..() - - if(emerg) - // Close the pods (space shields) - for(var/obj/machinery/door/blast/regular/escape_pod/ES in world) - INVOKE_ASYNC(ES, /obj/machinery/door/blast/proc/force_close) - for (var/datum/shuttle/autodock/ferry/escape_pod/pod in escape_pods) // Unarm the pods! - pod.set_self_unarm() - -/datum/evacuation_controller/starship/can_cancel() - // Are we evacuating? - if(isnull(evac_called_at)) - return 0 - // Have we already launched? - if(!((state == 1) || (state == EVAC_LAUNCHING))) - return 0 - // Are we already committed? - if(world.time > evac_no_return) - return 0 - return 1 - -/datum/evacuation_controller/starship/make_prepared() - var/time_diff = evac_ready_time - world.time - evac_ready_time = world.time - evac_launch_time -= time_diff - evac_arrival_time -= time_diff - evac_no_return -= time_diff - -/datum/evacuation_controller/starship/call_evacuation(var/mob/user, var/_emergency_evac, var/forced, var/skip_announce, var/autotransfer) - if((user && isAI(user)) || forced) - if(state == 1) - make_prepared() - return 1 - emergency_prep_additional_delay = 0 MINUTES - confirmed = "confirmed" - skip_announce = TRUE - - - . = ..(user, _emergency_evac, forced, skip_announce, autotransfer) - emergency_prep_additional_delay = initial(emergency_prep_additional_delay) // Reseting time shortcut - if(.) - evac_no_return = evac_ready_time + round(evac_launch_delay/2) - -/datum/evacuation_controller/starship/available_evac_options() - if (is_on_cooldown()) - return list() - if (is_idle()) - return list(evacuation_options[EVAC_OPT_BLUESPACE_JUMP], evacuation_options[EVAC_OPT_ABANDON_SHIP]) - if (is_evacuating()) - if (emergency_evacuation) - return list(evacuation_options[EVAC_OPT_CANCEL_ABANDON_SHIP]) - else - return list(evacuation_options[EVAC_OPT_CANCEL_BLUESPACE_JUMP]) - -/datum/evacuation_option/abandon_ship - option_text = "Abandon spacecraft" - option_desc = "abandon the spacecraft" - option_target = EVAC_OPT_ABANDON_SHIP - needs_syscontrol = TRUE - silicon_allowed = TRUE - abandon_ship = TRUE - -/datum/evacuation_option/abandon_ship/execute(mob/user) - if (!evacuation_controller) - return - if (evacuation_controller.deny) - to_chat(user, "Unable to initiate escape procedures.") - return - if (evacuation_controller.is_on_cooldown()) - to_chat(user, evacuation_controller.get_cooldown_message()) - return - if (evacuation_controller.is_evacuating()) - to_chat(user, "Escape procedures already in progress.") - return - if (evacuation_controller.call_evacuation(user, 1)) - log_and_message_admins("[user? key_name(user) : "Autotransfer"] has initiated abandonment of the spacecraft.") - -/datum/evacuation_option/bluespace_jump - option_text = "Initiate bluespace jump" - option_desc = "initiate a bluespace jump" - option_target = EVAC_OPT_BLUESPACE_JUMP - needs_syscontrol = TRUE - silicon_allowed = TRUE - -/datum/evacuation_option/bluespace_jump/execute(mob/user) - if (!evacuation_controller) - return - if (evacuation_controller.deny) - to_chat(user, "Unable to initiate jump preparation.") - return - if (evacuation_controller.is_on_cooldown()) - to_chat(user, evacuation_controller.get_cooldown_message()) - return - if (evacuation_controller.is_evacuating()) - to_chat(user, "Jump preparation already in progress.") - return - if (evacuation_controller.call_evacuation(user, 0)) - log_and_message_admins("[user? key_name(user) : "Autotransfer"] has initiated bluespace jump preparation.") - -/datum/evacuation_option/cancel_abandon_ship - option_text = "Cancel abandonment" - option_desc = "cancel abandonment of the spacecraft" - option_target = EVAC_OPT_CANCEL_ABANDON_SHIP - needs_syscontrol = TRUE - silicon_allowed = FALSE - -/datum/evacuation_option/cancel_abandon_ship/execute(mob/user) - if (evacuation_controller && evacuation_controller.cancel_evacuation()) - log_and_message_admins("[key_name(user)] has cancelled abandonment of the spacecraft.") - -/datum/evacuation_option/cancel_bluespace_jump - option_text = "Cancel bluespace jump" - option_desc = "cancel the jump preparation" - option_target = EVAC_OPT_CANCEL_BLUESPACE_JUMP - needs_syscontrol = TRUE - silicon_allowed = FALSE - -/datum/evacuation_option/cancel_bluespace_jump/execute(mob/user) - if (evacuation_controller && evacuation_controller.cancel_evacuation()) - log_and_message_admins("[key_name(user)] has cancelled the bluespace jump.") - -#undef EVAC_OPT_ABANDON_SHIP -#undef EVAC_OPT_BLUESPACE_JUMP -#undef EVAC_OPT_CANCEL_ABANDON_SHIP -#undef EVAC_OPT_CANCEL_BLUESPACE_JUMP diff --git a/code/controllers/evacuation/evacuation_predicate.dm b/code/controllers/evacuation/evacuation_predicate.dm deleted file mode 100644 index 5c590291c5ea2..0000000000000 --- a/code/controllers/evacuation/evacuation_predicate.dm +++ /dev/null @@ -1,13 +0,0 @@ -/datum/evacuation_predicate/New() - return - -/datum/evacuation_predicate/Destroy(forced) - if(forced) - return ..() - return QDEL_HINT_LETMELIVE - -/datum/evacuation_predicate/proc/is_valid() - return FALSE - -/datum/evacuation_predicate/proc/can_call(var/user) - return TRUE diff --git a/code/controllers/evacuation/evacuation_shuttle.dm b/code/controllers/evacuation/evacuation_shuttle.dm deleted file mode 100644 index fc99e804bbccc..0000000000000 --- a/code/controllers/evacuation/evacuation_shuttle.dm +++ /dev/null @@ -1,138 +0,0 @@ -#define EVAC_OPT_CALL_SHUTTLE "call_shuttle" -#define EVAC_OPT_RECALL_SHUTTLE "recall_shuttle" - -/datum/evacuation_controller/shuttle - name = "escape shuttle controller" - evac_waiting = new(0, new_sound = sound('sound/AI/shuttledock.ogg')) - evac_called = new(0, new_sound = sound('sound/AI/shuttlecalled.ogg')) - evac_recalled = new(0, new_sound = sound('sound/AI/shuttlerecalled.ogg')) - - emergency_prep_additional_delay = 0 MINUTES - transfer_prep_additional_delay = 0 MINUTES - - evacuation_options = list( - EVAC_OPT_CALL_SHUTTLE = new /datum/evacuation_option/call_shuttle(), - EVAC_OPT_RECALL_SHUTTLE = new /datum/evacuation_option/recall_shuttle() - ) - - var/departed = 0 - var/autopilot = 1 - var/datum/shuttle/autodock/ferry/emergency/shuttle // Set in shuttle_emergency.dm - var/shuttle_launch_time - -/datum/evacuation_controller/shuttle/has_evacuated() - return departed - -/datum/evacuation_controller/shuttle/waiting_to_leave() - return (!autopilot || (shuttle && shuttle.is_launching())) - -/datum/evacuation_controller/shuttle/launch_evacuation() - - if(waiting_to_leave()) - return - - for (var/datum/shuttle/autodock/ferry/escape_pod/pod in escape_pods) - if (!pod.arming_controller || pod.arming_controller.armed) - pod.move_time = evac_transit_delay - pod.launch(src) - - if(autopilot && shuttle.moving_status == SHUTTLE_IDLE) - evac_arrival_time = world.time + (shuttle.move_time*10) + (shuttle.warmup_time*10) - shuttle.launch(src) - // Announcements, state changes and such are handled by the shuttle itself to prevent desync. - -/datum/evacuation_controller/shuttle/finish_preparing_evac() - departed = 1 - evac_launch_time = world.time + evac_launch_delay - - . = ..() - // Arm the escape pods. - if (emergency_evacuation) - for (var/datum/shuttle/autodock/ferry/escape_pod/pod in escape_pods) - if (pod.arming_controller) - pod.arming_controller.arm() - -/datum/evacuation_controller/shuttle/call_evacuation(var/mob/user, var/_emergency_evac, var/forced, var/skip_announce, var/autotransfer) - if(..()) - autopilot = 1 - shuttle_launch_time = evac_no_return - evac_ready_time += shuttle.warmup_time*10 - return 1 - return 0 - -/datum/evacuation_controller/shuttle/cancel_evacuation() - if(..() && shuttle.moving_status != SHUTTLE_INTRANSIT) - shuttle_launch_time = null - shuttle.cancel_launch(src) - return 1 - return 0 - -/datum/evacuation_controller/shuttle/get_eta() - if (shuttle && shuttle.has_arrive_time()) - return (shuttle.arrive_time-world.time)/10 - return ..() - -/datum/evacuation_controller/shuttle/get_status_panel_eta() - if(has_eta() && waiting_to_leave()) - return "Launching..." - return ..() - -// This is largely handled by the emergency shuttle datum. -/datum/evacuation_controller/shuttle/process() - if(state == EVAC_PREPPING) - if(!isnull(shuttle_launch_time) && world.time > shuttle_launch_time && shuttle.moving_status == SHUTTLE_IDLE) - shuttle.launch() - shuttle_launch_time = null - return - else if(state == EVAC_IN_TRANSIT) - return - return ..() - -/datum/evacuation_controller/shuttle/can_cancel() - return (shuttle.moving_status == SHUTTLE_IDLE && shuttle.location && ..()) - -/datum/evacuation_controller/shuttle/proc/shuttle_leaving() - state = EVAC_IN_TRANSIT - -/datum/evacuation_controller/shuttle/proc/shuttle_evacuated() - state = EVAC_COMPLETE - -/datum/evacuation_controller/shuttle/proc/shuttle_preparing() - state = EVAC_PREPPING - -/datum/evacuation_controller/shuttle/proc/get_long_jump_time() - if (shuttle.location) - return round(evac_prep_delay/10)/2 - else - return round(evac_transit_delay/10) - -/datum/evacuation_controller/shuttle/available_evac_options() - if (!shuttle.location) - return list() - if (is_idle()) - return list(evacuation_options[EVAC_OPT_CALL_SHUTTLE]) - else - return list(evacuation_options[EVAC_OPT_RECALL_SHUTTLE]) - -/datum/evacuation_option/call_shuttle - option_text = "Call emergency shuttle" - option_desc = "call the emergency shuttle" - option_target = EVAC_OPT_CALL_SHUTTLE - needs_syscontrol = TRUE - silicon_allowed = TRUE - -/datum/evacuation_option/call_shuttle/execute(mob/user) - call_shuttle_proc(user) - -/datum/evacuation_option/recall_shuttle - option_text = "Cancel shuttle call" - option_desc = "recall the emergency shuttle" - option_target = EVAC_OPT_RECALL_SHUTTLE - needs_syscontrol = TRUE - silicon_allowed = FALSE - -/datum/evacuation_option/recall_shuttle/execute(mob/user) - cancel_call_proc(user) - -#undef EVAC_OPT_CALL_SHUTTLE -#undef EVAC_OPT_RECALL_SHUTTLE \ No newline at end of file diff --git a/code/controllers/evacuation/~evac.dm b/code/controllers/evacuation/~evac.dm deleted file mode 100644 index e49dec2b309c6..0000000000000 --- a/code/controllers/evacuation/~evac.dm +++ /dev/null @@ -1,5 +0,0 @@ -#undef EVAC_IDLE -#undef EVAC_PREPPING -#undef EVAC_IN_TRANSIT -#undef EVAC_COOLDOWN -#undef EVAC_COMPLETE diff --git a/code/controllers/failsafe.dm b/code/controllers/failsafe.dm deleted file mode 100644 index d18217d4b9229..0000000000000 --- a/code/controllers/failsafe.dm +++ /dev/null @@ -1,98 +0,0 @@ - /** - * Failsafe - * - * Pretty much pokes the MC to make sure it's still alive. - **/ - -var/global/datum/controller/failsafe/Failsafe - -/datum/controller/failsafe // This thing pretty much just keeps poking the master controller - name = "Failsafe" - - // The length of time to check on the MC (in deciseconds). - // Set to 0 to disable. - var/processing_interval = 20 - // The alert level. For every failed poke, we drop a DEFCON level. Once we hit DEFCON 1, restart the MC. - var/defcon = 5 - //the world.time of the last check, so the mc can restart US if we hang. - // (Real friends look out for *eachother*) - var/lasttick = 0 - - // Track the MC iteration to make sure its still on track. - var/master_iteration = 0 - var/running = TRUE - -/datum/controller/failsafe/New() - // Highlander-style: there can only be one! Kill off the old and replace it with the new. - if(Failsafe != src) - if(istype(Failsafe)) - qdel(Failsafe) - Failsafe = src - Initialize() - -/datum/controller/failsafe/Initialize() - set waitfor = 0 - Failsafe.Loop() - if(!QDELETED(src)) - qdel(src) //when Loop() returns, we delete ourselves and let the mc recreate us - -/datum/controller/failsafe/Destroy() - running = FALSE - ..() - return QDEL_HINT_HARDDEL_NOW - -/datum/controller/failsafe/proc/Loop() - while(running) - lasttick = world.time - if(!Master) - // Replace the missing Master! This should never, ever happen. - new /datum/controller/master() - // Only poke it if overrides are not in effect. - if(processing_interval > 0) - if(Master.processing && Master.iteration) - // Check if processing is done yet. - if(Master.iteration == master_iteration) - switch(defcon) - if(4,5) - --defcon - if(3) - to_chat(GLOB.admins, "Notice: DEFCON [defcon]. The Master Controller has not fired in the last [(5-defcon) * processing_interval] ticks.") - --defcon - if(2) - to_chat(GLOB.admins, "Warning: DEFCON [defcon]. 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(GLOB.admins, "Warning: DEFCON [defcon]. 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(GLOB.admins, "MC restarted successfully") - else if(rtn < 0) - log_game("FailSafe: Could not restart MC, runtime encountered. Entering defcon 0") - to_chat(GLOB.admins, "ERROR: DEFCON [defcon]. Could not restart MC, runtime encountered. I will silently keep retrying.") - //if the return number was 0, it just means the mc was restarted too recently, and it just needs some time before we try again - //no need to handle that specially when defcon 0 can handle it - if(0) //DEFCON 0! (mc failed to restart) - var/rtn = Recreate_MC() - if(rtn > 0) - defcon = 4 - master_iteration = 0 - to_chat(GLOB.admins, "MC restarted successfully") - else - defcon = min(defcon + 1,5) - master_iteration = Master.iteration - if (defcon <= 1) - sleep(processing_interval*2) - else - sleep(processing_interval) - else - defcon = 5 - sleep(initial(processing_interval)) - -/datum/controller/failsafe/UpdateStat(time) - if (PreventUpdateStat(time)) - return ..() - ..("Danger: [5 - defcon]/5 Interval: [processing_interval] Iteration: [master_iteration]") diff --git a/code/controllers/hooks-defs.dm b/code/controllers/hooks-defs.dm deleted file mode 100644 index cca755311061d..0000000000000 --- a/code/controllers/hooks-defs.dm +++ /dev/null @@ -1,99 +0,0 @@ -/** - * Global init hook. - * Called in global_init.dm when the server is initialized. - */ -/hook/global_init - -/** - * Startup hook. - * Called in world.dm when the server starts. - */ -/hook/startup - -/** - * Roundstart hook. - * Called in ticker.dm when a round starts. - */ -/hook/roundstart - -/** - * Roundend hook. - * Called in ticker.dm when a round ends. - */ -/hook/roundend - -/** - * Shutdown hook. - * Called in world.dm when world/Del is called. - */ -/hook/shutdown - -/** - * Death hook. - * Called in death.dm when someone dies. - * Parameters: var/mob/living/carbon/human, var/gibbed - */ -/hook/death - -/** - * Cloning hook. - * Called in cloning.dm when someone is brought back by the wonders of modern science. - * Parameters: var/mob/living/carbon/human - */ -/hook/clone - -/** - * Debrained hook. - * Called in brain_item.dm when someone gets debrained. - * Parameters: var/obj/item/organ/internal/brain - */ -/hook/debrain - -/** - * Borged hook. - * Called in robot_parts.dm when someone gets turned into a cyborg. - * Parameters: var/mob/living/silicon/robot - */ -/hook/borgify - -/** - * Podman hook. - * Called in podmen.dm when someone is brought back as a Diona. - * Parameters: var/mob/living/carbon/alien/diona - */ -/hook/harvest_podman - -/** - * Payroll revoked hook. - * Called in Accounts_DB.dm when someone's payroll is stolen at the Accounts terminal. - * Parameters: var/datum/money_account - */ -/hook/revoke_payroll - -/** - * Account suspension hook. - * Called in Accounts_DB.dm when someone's account is suspended or unsuspended at the Accounts terminal. - * Parameters: var/datum/money_account - */ -/hook/change_account_status - -/** - * Employee reassignment hook. - * Called in card.dm when someone's card is reassigned at the HoP's desk. - * Parameters: var/obj/item/card/id - */ -/hook/reassign_employee - -/** - * Employee terminated hook. - * Called in card.dm when someone's card is terminated at the HoP's desk. - * Parameters: var/obj/item/card/id - */ -/hook/terminate_employee - -/** - * Crate sold hook. - * Called in supplyshuttle.dm when a crate is sold on the shuttle. - * Parameters: var/obj/structure/closet/crate/sold, var/area/shuttle - */ -/hook/sell_crate diff --git a/code/controllers/hooks.dm b/code/controllers/hooks.dm deleted file mode 100644 index 2e05a0621b0fd..0000000000000 --- a/code/controllers/hooks.dm +++ /dev/null @@ -1,39 +0,0 @@ -/** - * @file hooks.dm - * Implements hooks, a simple way to run code on pre-defined events. - */ - -/** @page hooks Code hooks - * @section hooks Hooks - * A hook is defined under /hook in the type tree. - * - * To add some code to be called by the hook, define a proc under the type, as so: - * @code - hook/foo/proc/bar() - if(1) - return 1 //Sucessful - else - return 0 //Error, or runtime. - * @endcode - * All hooks must return nonzero on success, as runtimes will force return null. - */ - -/** - * Calls a hook, executing every piece of code that's attached to it. - * @param hook Identifier of the hook to call. - * @returns 1 if all hooked code runs successfully, 0 otherwise. - */ -/proc/callHook(hook, list/args=null) - var/hook_path = text2path("/hook/[hook]") - if(!hook_path) - error("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))) - error("Hook '[P]' failed or runtimed.") - status = 0 - - return status diff --git a/code/controllers/master.dm b/code/controllers/master.dm deleted file mode 100644 index c6e8aaa37443c..0000000000000 --- a/code/controllers/master.dm +++ /dev/null @@ -1,613 +0,0 @@ - /** - * StonedMC - * - * Designed to properly split up a given tick among subsystems - * Note: if you read parts of this code and think "why is it doing it that way" - * Odds are, there is a reason - * - **/ - -//This is the ABSOLUTE ONLY THING that should init globally like this -var/global/datum/controller/master/Master = new - -// THIS IS THE INIT ORDER -// config/New -> Master -> SSPreInit -> config/Initialize -> GLOB -> world -> SSInit -> Failsafe - -/datum/controller/master - name = "Main" - - // Are we processing (higher values increase the processing delay by n ticks) - var/processing = TRUE - // How many times have we ran - var/iteration = 0 - - // world.time of last fire, for tracking lag outside of the mc - var/last_run - - // List of subsystems to process(). - var/list/subsystems - - // Vars for keeping track of tick drift. - var/init_timeofday - var/init_time - var/tickdrift = 0 - - var/sleep_delta = 1 - - var/make_runtime = 0 - - var/initializing = FALSE - - // The type of the last subsystem to be process()'d. - var/last_type_processed - - var/datum/controller/subsystem/queue_head //Start of queue linked list - var/datum/controller/subsystem/queue_tail //End of queue linked list (used for appending to the list) - var/queue_priority_count = 0 //Running total so that we don't have to loop thru the queue each run to split up the tick - var/queue_priority_count_bg = 0 //Same, but for background subsystems - var/map_loading = FALSE //Are we loading in a new map? - - var/list/total_run_times - var/current_runlevel //for scheduling different subsystems for different stages of the round - - var/static/restart_clear = 0 - var/static/restart_timeout = 0 - var/static/restart_count = 0 - - var/const/tick_limit_default = 80 - var/const/tick_limit_init = 98 - var/const/tick_limit_to_run = 78 - var/const/tick_limit_mc = 70 - - //current tick limit, assigned before running a subsystem. - //used by CHECK_TICK as well so that the procs subsystems call can obey that SS's tick limits - var/static/current_ticklimit = tick_limit_default - - -/datum/controller/master/New() - Uptime() //Uptime as close to boot as possible to set its statics - if (!global.diary) - global.diary = file("data/logs/[time2text(world.timeofday, "YYYY/MM/DD", -world.timezone)].log") - if (!config) - config = new - world.fps = config.fps - total_run_times = list() - // Highlander-style: there can only be one! Kill off the old and replace it with the new. - var/list/_subsystems = list() - subsystems = _subsystems - if (Master != src) - if (istype(Master)) - Recover() - qdel(Master) - else - var/list/subsytem_types = subtypesof(/datum/controller/subsystem) - sortTim(subsytem_types, /proc/cmp_subsystem_init) - for(var/I in subsytem_types) - _subsystems += new I - Master = src - if (!GLOB) - GLOB = new - -/datum/controller/master/Destroy() - ..() - // Tell qdel() to Del() this object. - return QDEL_HINT_HARDDEL_NOW - -/datum/controller/master/Shutdown() - processing = FALSE - sortTim(subsystems, /proc/cmp_subsystem_init) - reverseRange(subsystems) - for(var/datum/controller/subsystem/ss in subsystems) - if (ss.flags & SS_NEEDS_SHUTDOWN) - var/time = Uptime() - report_progress("Shutting down [ss] subsystem...") - ss.Shutdown() - report_progress("[ss] shutdown in [(Uptime() - time)/10]s.") - report_progress("Shutdown complete.") - -// Returns 1 if we created a new mc, 0 if we couldn't due to a recent restart, -// -1 if we encountered a runtime trying to recreate it -/proc/Recreate_MC() - . = -1 //so if we runtime, things know we failed - if (world.time < Master.restart_timeout) - return 0 - if (world.time < Master.restart_clear) - Master.restart_count *= 0.5 - - var/delay = 50 * ++Master.restart_count - Master.restart_timeout = world.time + delay - Master.restart_clear = world.time + (delay * 2) - Master.processing = FALSE //stop ticking this one - try - new/datum/controller/master() - catch - return -1 - return 1 - - -/datum/controller/master/Recover() - var/msg = "## DEBUG: [time2text(world.timeofday)] MC restarted. Reports:\n" - for (var/varname in Master.vars) - switch (varname) - if("name", "tag", "bestF", "type", "parent_type", "vars", "stat_line") // Built-in junk. - continue - else - var/varval = Master.vars[varname] - if (istype(varval, /datum)) // Check if it has a type var. - var/datum/D = varval - msg += "\t [varname] = [D]([D.type])\n" - else - msg += "\t [varname] = [varval]\n" - log_world(msg) - - var/datum/controller/subsystem/BadBoy = Master.last_type_processed - var/FireHim = FALSE - if(istype(BadBoy)) - msg = null - LAZYINITLIST(BadBoy.failure_strikes) - switch(++BadBoy.failure_strikes[BadBoy.type]) - if(2) - msg = "The [BadBoy.name] subsystem was the last to fire for 2 controller restarts. It will be recovered now and disabled if it happens again." - FireHim = TRUE - if(3) - msg = "The [BadBoy.name] subsystem seems to be destabilizing the MC and will be offlined." - BadBoy.flags |= SS_NO_FIRE - if(msg) - to_chat(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 - current_runlevel = Master.current_runlevel - total_run_times = Master.total_run_times - StartProcessing(10) - else - to_chat(world, "The Master Controller is having some issues, we will need to re-initialize EVERYTHING") - Initialize(20, TRUE) - - -// Please don't stuff random bullshit here, -// Make a subsystem, give it the SS_NO_FIRE flag, and do your work in it's Initialize() -/datum/controller/master/Initialize(delay, init_sss) - set waitfor = FALSE - var/start_uptime = Uptime() - - if(delay) - sleep(delay) - - if(init_sss) - init_subtypes(/datum/controller/subsystem, subsystems) - - report_progress("Initializing subsystems...") - - initializing = TRUE - - // Sort subsystems by init_order, so they initialize in the correct order. - sortTim(subsystems, /proc/cmp_subsystem_init) - - current_ticklimit = tick_limit_init - for (var/datum/controller/subsystem/SS in subsystems) - if (SS.flags & SS_NO_INIT) - continue - SS.DoInitialize(Uptime()) - CHECK_TICK - current_ticklimit = tick_limit_default - var/msg = "Initializations complete within [(Uptime() - start_uptime) / 10] second\s!" - report_progress(msg) - log_world(msg) - - initializing = FALSE - - if (!current_runlevel) - SetRunLevel(RUNLEVEL_LOBBY) - - // Sort subsystems by display setting for easy access. - sortTim(subsystems, /proc/cmp_subsystem_display) - // Set world options. -#ifdef UNIT_TEST - world.sleep_offline = FALSE -#else - world.sleep_offline = TRUE -#endif - Master.StartProcessing(0) - -/datum/controller/master/proc/SetRunLevel(new_runlevel) - var/old_runlevel = current_runlevel - if(isnull(old_runlevel)) - old_runlevel = "NULL" - - current_runlevel = log(2, new_runlevel) + 1 - report_progress("MC: Runlevel changed from [old_runlevel] to [current_runlevel]") - if(current_runlevel < 1) - CRASH("Attempted to set invalid runlevel: [new_runlevel]") - -// Starts the mc, and sticks around to restart it if the loop ever ends. -/datum/controller/master/proc/StartProcessing(delay) - set waitfor = 0 - if(delay) - sleep(delay) - report_progress("Master starting processing") - var/rtn = Loop() - if (rtn > 0 || processing < 0) - return //this was suppose to happen. - //loop ended, restart the mc - log_game("MC crashed or runtimed, restarting") - message_admins("MC crashed or runtimed, restarting") - var/rtn2 = Recreate_MC() - if (rtn2 <= 0) - log_game("Failed to recreate MC (Error code: [rtn2]), it's up to the failsafe now") - message_admins("Failed to recreate MC (Error code: [rtn2]), it's up to the failsafe now") - Failsafe.defcon = 2 - -// Main loop. -/datum/controller/master/proc/Loop() - . = -1 - //Prep the loop (most of this is because we want MC restarts to reset as much state as we can, and because - // local vars rock - - //all this shit is here so that flag edits can be refreshed by restarting the MC. (and for speed) - var/list/tickersubsystems = list() - var/list/runlevel_sorted_subsystems = list(list()) //ensure we always have at least one runlevel - var/timer = world.time - for (var/thing in subsystems) - var/datum/controller/subsystem/SS = thing - if (SS.flags & SS_NO_FIRE) - continue - SS.queued_time = 0 - SS.queue_next = null - SS.queue_prev = null - SS.state = SS_IDLE - if (SS.flags & SS_TICKER) - tickersubsystems += SS - timer += world.tick_lag * rand(1, 5) - SS.next_fire = timer - continue - - var/ss_runlevels = SS.runlevels - var/added_to_any = FALSE - for(var/I in 1 to GLOB.bitflags.len) - if(ss_runlevels & GLOB.bitflags[I]) - while(runlevel_sorted_subsystems.len < I) - runlevel_sorted_subsystems += list(list()) - runlevel_sorted_subsystems[I] += SS - added_to_any = TRUE - if(!added_to_any) - WARNING("[SS.name] subsystem is not SS_NO_FIRE but also does not have any runlevels set!") - - queue_head = null - queue_tail = null - //these sort by lower priorities first to reduce the number of loops needed to add subsequent SS's to the queue - //(higher subsystems will be sooner in the queue, adding them later in the loop means we don't have to loop thru them next queue add) - sortTim(tickersubsystems, /proc/cmp_subsystem_priority) - for(var/I in runlevel_sorted_subsystems) - sortTim(runlevel_sorted_subsystems, /proc/cmp_subsystem_priority) - I += tickersubsystems - - var/cached_runlevel = current_runlevel - var/list/current_runlevel_subsystems = runlevel_sorted_subsystems[cached_runlevel] - - init_timeofday = Uptime() - init_time = world.time - - iteration = 1 - var/error_level = 0 - var/sleep_delta = 1 - var/list/subsystems_to_check - //the actual loop. - - while (1) - tickdrift = max(0, MC_AVERAGE_FAST(tickdrift, (((Uptime() - init_timeofday) - (world.time - init_time)) / world.tick_lag))) - var/starting_tick_usage = world.tick_usage - if (processing <= 0) - current_ticklimit = tick_limit_default - sleep(10) - continue - - //Anti-tick-contention heuristics: - //if there are mutiple sleeping procs running before us hogging the cpu, we have to run later. - // (because sleeps are processed in the order received, longer sleeps are more likely to run first) - if (starting_tick_usage > tick_limit_mc) //if there isn't enough time to bother doing anything this tick, sleep a bit. - sleep_delta *= 2 - current_ticklimit = tick_limit_default * 0.5 - sleep(world.tick_lag * (processing * sleep_delta)) - continue - - //Byond resumed us late. assume it might have to do the same next tick - if (last_run + Ceilm(world.tick_lag * (processing * sleep_delta), world.tick_lag) < world.time) - sleep_delta += 1 - - sleep_delta = MC_AVERAGE_FAST(sleep_delta, 1) //decay sleep_delta - - if (starting_tick_usage > tick_limit_mc * 0.75) //we ran 3/4 of the way into the tick - sleep_delta += 1 - - //debug - if (make_runtime) - var/datum/controller/subsystem/SS - SS.can_fire = 0 - - if (!Failsafe || (Failsafe.processing_interval > 0 && (Failsafe.lasttick+(Failsafe.processing_interval*5)) < world.time)) - new/datum/controller/failsafe() // (re)Start the failsafe. - - //now do the actual stuff - if (!queue_head || !(iteration % 3)) - var/checking_runlevel = current_runlevel - if(cached_runlevel != checking_runlevel) - //resechedule subsystems - cached_runlevel = checking_runlevel - current_runlevel_subsystems = runlevel_sorted_subsystems[cached_runlevel] - var/stagger = world.time - for(var/I in current_runlevel_subsystems) - var/datum/controller/subsystem/SS = I - if(SS.next_fire <= world.time) - stagger += world.tick_lag * rand(1, 5) - SS.next_fire = stagger - - subsystems_to_check = current_runlevel_subsystems - else - subsystems_to_check = tickersubsystems - - if (CheckQueue(subsystems_to_check) <= 0) - if (!SoftReset(tickersubsystems, runlevel_sorted_subsystems)) - log_world("MC: SoftReset() failed, crashing") - return - if (!error_level) - iteration++ - error_level++ - current_ticklimit = tick_limit_default - sleep(10) - continue - - if (queue_head) - if (RunQueue() <= 0) - if (!SoftReset(tickersubsystems, runlevel_sorted_subsystems)) - log_world("MC: SoftReset() failed, crashing") - return - if (!error_level) - iteration++ - error_level++ - current_ticklimit = tick_limit_default - sleep(10) - continue - error_level-- - if (!queue_head) //reset the counts if the queue is empty, in the off chance they get out of sync - queue_priority_count = 0 - queue_priority_count_bg = 0 - - iteration++ - last_run = world.time - src.sleep_delta = MC_AVERAGE_FAST(src.sleep_delta, sleep_delta) - current_ticklimit = tick_limit_default - if (processing * sleep_delta <= world.tick_lag) - current_ticklimit -= (tick_limit_default * 0.25) //reserve the tail 1/4 of the next tick for the mc if we plan on running next tick - sleep(world.tick_lag * (processing * sleep_delta)) - - - - -// This is what decides if something should run. -/datum/controller/master/proc/CheckQueue(list/subsystemstocheck) - . = 0 //so the mc knows if we runtimed - - //we create our variables outside of the loops to save on overhead - var/datum/controller/subsystem/SS - var/SS_flags - - for (var/thing in subsystemstocheck) - if (!thing) - subsystemstocheck -= thing - SS = thing - if (SS.state != SS_IDLE) - continue - if (SS.can_fire <= 0) - continue - if (SS.next_fire > world.time) - continue - if(SS.suspended) - continue - SS_flags = SS.flags - if (SS_flags & SS_NO_FIRE) - subsystemstocheck -= SS - continue - if ((SS_flags & (SS_TICKER|SS_KEEP_TIMING)) == SS_KEEP_TIMING && SS.last_fire + (SS.wait * 0.75) > world.time) - continue - SS.enqueue() - . = 1 - - -// Run thru the queue of subsystems to run, running them while balancing out their allocated tick precentage -/datum/controller/master/proc/RunQueue() - . = 0 - var/datum/controller/subsystem/queue_node - var/queue_node_flags - var/queue_node_priority - var/queue_node_paused - - var/current_tick_budget - var/tick_precentage - var/tick_remaining - var/ran = TRUE //this is right - var/ran_non_ticker = FALSE - var/bg_calc //have we swtiched current_tick_budget to background mode yet? - var/tick_usage - - //keep running while we have stuff to run and we haven't gone over a tick - // this is so subsystems paused eariler can use tick time that later subsystems never used - while (ran && queue_head && world.tick_usage < tick_limit_mc) - ran = FALSE - bg_calc = FALSE - current_tick_budget = queue_priority_count - queue_node = queue_head - while (queue_node) - if (ran && world.tick_usage > tick_limit_default) - break - - queue_node_flags = queue_node.flags - queue_node_priority = queue_node.queued_priority - - //super special case, subsystems where we can't make them pause mid way through - //if we can't run them this tick (without going over a tick) - //we bump up their priority and attempt to run them next tick - //(unless we haven't even ran anything this tick, since its unlikely they will ever be able run - // in those cases, so we just let them run) - if (queue_node_flags & SS_NO_TICK_CHECK) - if (queue_node.tick_usage > tick_limit_default - world.tick_usage && ran_non_ticker) - queue_node.queued_priority += queue_priority_count * 0.1 - queue_priority_count -= queue_node_priority - queue_priority_count += queue_node.queued_priority - current_tick_budget -= queue_node_priority - queue_node = queue_node.queue_next - continue - - if ((queue_node_flags & SS_BACKGROUND) && !bg_calc) - current_tick_budget = queue_priority_count_bg - bg_calc = TRUE - - tick_remaining = tick_limit_default - world.tick_usage - - if (current_tick_budget > 0 && queue_node_priority > 0) - tick_precentage = tick_remaining / (current_tick_budget / queue_node_priority) - else - tick_precentage = tick_remaining - - tick_precentage = max(tick_precentage*0.5, tick_precentage-queue_node.tick_overrun) - - current_ticklimit = round(world.tick_usage + tick_precentage) - - if (!(queue_node_flags & SS_TICKER)) - ran_non_ticker = TRUE - ran = TRUE - - queue_node_paused = (queue_node.state == SS_PAUSED || queue_node.state == SS_PAUSING) - last_type_processed = queue_node - - queue_node.state = SS_RUNNING - - tick_usage = world.tick_usage - var/state = queue_node.ignite(queue_node_paused) - tick_usage = world.tick_usage - tick_usage - - if (state == SS_RUNNING) - state = SS_IDLE - current_tick_budget -= queue_node_priority - - - if (tick_usage < 0) - tick_usage = 0 - queue_node.tick_overrun = max(0, MC_AVG_FAST_UP_SLOW_DOWN(queue_node.tick_overrun, tick_usage-tick_precentage)) - queue_node.state = state - - if (state == SS_PAUSED) - queue_node.paused_ticks++ - queue_node.paused_tick_usage += tick_usage - queue_node = queue_node.queue_next - continue - - queue_node.ticks = MC_AVERAGE(queue_node.ticks, queue_node.paused_ticks) - tick_usage += queue_node.paused_tick_usage - - queue_node.tick_usage = MC_AVERAGE_FAST(queue_node.tick_usage, tick_usage) - total_run_times[queue_node.name] += ((tick_usage / 100) * world.tick_lag) / 10 - - queue_node.cost = MC_AVERAGE_FAST(queue_node.cost, tick_usage * world.tick_lag) - queue_node.paused_ticks = 0 - queue_node.paused_tick_usage = 0 - - if (queue_node_flags & SS_BACKGROUND) //update our running total - queue_priority_count_bg -= queue_node_priority - else - queue_priority_count -= queue_node_priority - - queue_node.last_fire = world.time - queue_node.times_fired++ - - if (queue_node_flags & SS_TICKER) - queue_node.next_fire = world.time + (world.tick_lag * queue_node.wait) - else if (queue_node_flags & SS_POST_FIRE_TIMING) - queue_node.next_fire = world.time + queue_node.wait + (world.tick_lag * (queue_node.tick_overrun/100)) - else if (queue_node_flags & SS_KEEP_TIMING) - queue_node.next_fire += queue_node.wait - else - queue_node.next_fire = queue_node.queued_time + queue_node.wait + (world.tick_lag * (queue_node.tick_overrun/100)) - - queue_node.queued_time = 0 - - //remove from queue - queue_node.dequeue() - - queue_node = queue_node.queue_next - - . = 1 - -//resets the queue, and all subsystems, while filtering out the subsystem lists -// called if any mc's queue procs runtime or exit improperly. -/datum/controller/master/proc/SoftReset(list/ticker_SS, list/runlevel_SS) - . = 0 - log_world("MC: SoftReset called, resetting MC queue state.") - if (!istype(subsystems) || !istype(ticker_SS) || !istype(runlevel_SS)) - log_world("MC: SoftReset: Bad list contents: '[subsystems]' '[ticker_SS]' '[runlevel_SS]'") - return - var/subsystemstocheck = subsystems + ticker_SS - for(var/I in runlevel_SS) - subsystemstocheck |= I - - for (var/thing in subsystemstocheck) - var/datum/controller/subsystem/SS = thing - if (!SS || !istype(SS)) - //list(SS) is so if a list makes it in the subsystem list, we remove the list, not the contents - subsystems -= list(SS) - ticker_SS -= list(SS) - for(var/I in runlevel_SS) - I -= list(SS) - log_world("MC: SoftReset: Found bad entry in subsystem list, '[SS]'") - continue - if (SS.queue_next && !istype(SS.queue_next)) - log_world("MC: SoftReset: Found bad data in subsystem queue, queue_next = '[SS.queue_next]'") - SS.queue_next = null - if (SS.queue_prev && !istype(SS.queue_prev)) - log_world("MC: SoftReset: Found bad data in subsystem queue, queue_prev = '[SS.queue_prev]'") - SS.queue_prev = null - SS.queued_priority = 0 - SS.queued_time = 0 - SS.state = SS_IDLE - if (queue_head && !istype(queue_head)) - log_world("MC: SoftReset: Found bad data in subsystem queue, queue_head = '[queue_head]'") - queue_head = null - if (queue_tail && !istype(queue_tail)) - log_world("MC: SoftReset: Found bad data in subsystem queue, queue_tail = '[queue_tail]'") - queue_tail = null - queue_priority_count = 0 - queue_priority_count_bg = 0 - log_world("MC: SoftReset: Finished.") - . = 1 - - -/datum/controller/master/UpdateStat(time) - if (PreventUpdateStat(time)) - return ..() - ..({"\ - Hub: [config.hub_visible ? "Y" : "N"] \ - FPS: [world.fps] \ - Ticks: [world.time / world.tick_lag] \ - Alive: [Master.processing ? "Y" : "N"] \ - Cycle: [Master.iteration] \ - Drift: [Round(Master.tickdrift)] | [Percent(Master.tickdrift, world.time / world.tick_lag, 1)]% - "}) - - -/datum/controller/master/StartLoadingMap() - //disallow more than one map to load at once, multithreading it will just cause race conditions - while(map_loading) - stoplag() - for(var/S in subsystems) - var/datum/controller/subsystem/SS = S - SS.StartLoadingMap() - map_loading = TRUE - -/datum/controller/master/StopLoadingMap(bounds = null) - map_loading = FALSE - for(var/S in subsystems) - var/datum/controller/subsystem/SS = S - SS.StopLoadingMap() diff --git a/code/controllers/subsystem.dm b/code/controllers/subsystem.dm deleted file mode 100644 index eef4994f27e84..0000000000000 --- a/code/controllers/subsystem.dm +++ /dev/null @@ -1,279 +0,0 @@ -/datum/controller/subsystem - // Metadata; you should define these. - name = "fire coderbus" //name of the subsystem - var/init_order = SS_INIT_DEFAULT //order of initialization. Higher numbers are initialized first, lower numbers later. Use defines in __DEFINES/subsystems.dm for easy understanding of order. - var/wait = 20 //time to wait (in deciseconds) between each call to fire(). Must be a positive integer. - var/priority = SS_PRIORITY_DEFAULT //When mutiple subsystems need to run in the same tick, higher priority subsystems will run first and be given a higher share of the tick before MC_TICK_CHECK triggers a sleep - - var/flags = 0 //see MC.dm in __DEFINES Most flags must be set on world start to take full effect. (You can also restart the mc to force them to process again) - // Similar to can_fire, but intended explicitly for subsystems that are asleep. Using this var instead of can_fire - // allows admins to disable subsystems without them re-enabling themselves. - var/suspended = FALSE - - var/initialized = FALSE //set to TRUE after it has been initialized, will obviously never be set if the subsystem doesn't initialize - - //set to 0 to prevent fire() calls, mostly for admin use or subsystems that may be resumed later - // use the SS_NO_FIRE flag instead for systems that never fire to keep it from even being added to the list - var/can_fire = TRUE - - // Bookkeeping variables; probably shouldn't mess with these. - var/last_fire = 0 //last world.time we called fire() - var/next_fire = 0 //scheduled world.time for next fire() - var/cost = 0 //average time to execute - var/tick_usage = 0 //average tick usage - var/tick_overrun = 0 //average tick overrun - var/state = SS_IDLE //tracks the current state of the ss, running, paused, etc. - var/paused_ticks = 0 //ticks this ss is taking to run right now. - var/paused_tick_usage //total tick_usage of all of our runs while pausing this run - var/ticks = 1 //how many ticks does this ss take to run on avg. - var/times_fired = 0 //number of times we have called fire() - var/queued_time = 0 //time we entered the queue, (for timing and priority reasons) - var/queued_priority //we keep a running total to make the math easier, if priority changes mid-fire that would break our running total, so we store it here - //linked list stuff for the queue - var/datum/controller/subsystem/queue_next - var/datum/controller/subsystem/queue_prev - - // Subsystem startup accounting - these variables cannot be trusted if the subsystem has crashed and been Recover()'d. - var/init_state = SS_INITSTATE_NONE // The current initialization state of this SS - this might be invalid if the subsystem has been Recover()'d. - var/init_time = 0 // How long the subsystem took to initialize, in seconds. - var/init_start = 0 // What timeofday did we start initializing? - var/init_finish // What timeofday did we finish initializing? - - var/runlevels = RUNLEVELS_DEFAULT //points of the game at which the SS can fire - - var/static/list/failure_strikes //How many times we suspect a subsystem type has crashed the MC, 3 strikes and you're out! - -//Do not override -///datum/controller/subsystem/New() - -// Used to initialize the subsystem BEFORE the map has loaded -// Called AFTER Recover if that is called -// Prefer to use Initialize if possible -/datum/controller/subsystem/proc/PreInit() - return - -//This is used so the mc knows when the subsystem sleeps. do not override. -/datum/controller/subsystem/proc/ignite(resumed = 0) - set waitfor = 0 - . = SS_SLEEPING - fire(resumed) - . = state - if (state == SS_SLEEPING) - state = SS_IDLE - if (state == SS_PAUSING) - var/QT = queued_time - enqueue() - state = SS_PAUSED - queued_time = QT - -//previously, this would have been named 'process()' but that name is used everywhere for different things! -//fire() seems more suitable. This is the procedure that gets called every 'wait' deciseconds. -//Sleeping in here prevents future fires until returned. -/datum/controller/subsystem/proc/fire(resumed = 0) - flags |= SS_NO_FIRE - throw EXCEPTION("Subsystem [src]([type]) does not fire() but did not set the SS_NO_FIRE flag. Please add the SS_NO_FIRE flag to any subsystem that doesn't fire so it doesn't get added to the processing list and waste cpu.") - -/datum/controller/subsystem/Destroy() - dequeue() - can_fire = 0 - flags |= SS_NO_FIRE - Master.subsystems -= src - return ..() - -//Queue it to run. -// (we loop thru a linked list until we get to the end or find the right point) -// (this lets us sort our run order correctly without having to re-sort the entire already sorted list) -/datum/controller/subsystem/proc/enqueue() - var/SS_priority = priority - var/SS_flags = flags - var/datum/controller/subsystem/queue_node - var/queue_node_priority - var/queue_node_flags - - for (queue_node = Master.queue_head; queue_node; queue_node = queue_node.queue_next) - queue_node_priority = queue_node.queued_priority - queue_node_flags = queue_node.flags - - if (queue_node_flags & (SS_TICKER|SS_BACKGROUND) == SS_TICKER) - if (!(SS_flags & SS_TICKER)) - continue - if (queue_node_priority < SS_priority) - break - - else if (queue_node_flags & SS_BACKGROUND) - if (!(SS_flags & SS_BACKGROUND)) - break - if (queue_node_priority < SS_priority) - break - - else - if (SS_flags & SS_BACKGROUND) - continue - if (SS_flags & SS_TICKER) - break - if (queue_node_priority < SS_priority) - break - - queued_time = world.time - queued_priority = SS_priority - state = SS_QUEUED - if (SS_flags & SS_BACKGROUND) //update our running total - Master.queue_priority_count_bg += SS_priority - else - Master.queue_priority_count += SS_priority - - queue_next = queue_node - if (!queue_node)//we stopped at the end, add to tail - queue_prev = Master.queue_tail - if (Master.queue_tail) - Master.queue_tail.queue_next = src - else //empty queue, we also need to set the head - Master.queue_head = src - Master.queue_tail = src - - else if (queue_node == Master.queue_head)//insert at start of list - Master.queue_head.queue_prev = src - Master.queue_head = src - queue_prev = null - else - queue_node.queue_prev.queue_next = src - queue_prev = queue_node.queue_prev - queue_node.queue_prev = src - - -/datum/controller/subsystem/proc/dequeue() - if (queue_next) - queue_next.queue_prev = queue_prev - if (queue_prev) - queue_prev.queue_next = queue_next - if (src == Master.queue_tail) - Master.queue_tail = queue_prev - if (src == Master.queue_head) - Master.queue_head = queue_next - queued_time = 0 - if (state == SS_QUEUED) - state = SS_IDLE - - -/datum/controller/subsystem/proc/pause() - . = 1 - switch(state) - if(SS_RUNNING) - state = SS_PAUSED - if(SS_SLEEPING) - state = SS_PAUSING - - -// Wrapper so things continue to work even in the case of a SS that doesn't call parent. -/datum/controller/subsystem/proc/DoInitialize(start_uptime) - init_state = SS_INITSTATE_STARTED - init_start = start_uptime - Initialize(start_uptime) - init_finish = Uptime() - . = (Uptime() - start_uptime) / 10 - var/msg = "Initialized [name] subsystem within [.] second[. == 1 ? "" : "s"]!" - to_chat(world, "[msg]") - log_world(msg) - - init_state = SS_INITSTATE_DONE - initialized = TRUE // Legacy. - - -/// Used to initialize the subsystem AFTER the map has loaded. No default behaviors please. -/datum/controller/subsystem/Initialize(start_uptime) - return - - -/// Builds subsystem stats & VV clickable for the MC status panel -/datum/controller/subsystem/UpdateStat(text) - if (istext(text)) - var/list/build = list() - if (Master.initializing) - if (init_state == SS_INITSTATE_DONE) - build += "DONE ([init_time]s)" - else if (flags & SS_NO_INIT) - build += "NO INIT" - else if (init_state == SS_INITSTATE_STARTED) - if (init_start) - build += "LOAD ([(Uptime() - init_start)/10]s)" - else - build += "LOAD" - else - build += "WAIT" - if (!(flags & SS_NO_INIT)) - switch (init_state) - if (SS_INITSTATE_NONE) - build += " W" - if (SS_INITSTATE_STARTED) - build += " L" - if (SS_INITSTATE_DONE) - build += " D" - else - if (flags & SS_NO_FIRE) - build += "NO FIRE" - else if (!can_fire) - build += "OFFLINE" - else if (suspended) - build += "SUSPEND" - else - build += "[round(cost,1)]ms | [round(tick_usage,1)]% ([round(tick_overrun,1)]%) | [round(ticks,0.1)]" - switch (state) - if (SS_RUNNING) - build += "R" - if (SS_QUEUED) - build += "Q" - if (SS_PAUSED, SS_PAUSING) - build += "P" - if (SS_SLEEPING) - build += "S" - if (SS_IDLE) - build += " " - text = "[build.Join(null)] | [text]" - ..(text) - - -//could be used to postpone a costly subsystem for (default one) var/cycles, cycles -//for instance, during cpu intensive operations like explosions -/datum/controller/subsystem/proc/postpone(cycles = 1) - if(next_fire - world.time < wait) - next_fire += (wait*cycles) - -//usually called via datum/controller/subsystem/New() when replacing a subsystem (i.e. due to a recurring crash) -//should attempt to salvage what it can from the old instance of subsystem -/datum/controller/subsystem/Recover() - -// Admin-disables this subsystem. Will show as OFFLINE in MC panel. -/datum/controller/subsystem/proc/disable() - can_fire = FALSE - -// Admin-enables this subsystem. -/datum/controller/subsystem/proc/enable() - if (!can_fire) - next_fire = world.time + wait - can_fire = TRUE - -// Suspends this subsystem. Functionally identical to disable(), but shows SUSPEND in MC panel. -// Preferred over disable() for self-disabling subsystems. -/datum/controller/subsystem/proc/suspend() - suspended = TRUE - -// Wakes a suspended subsystem. -/datum/controller/subsystem/proc/wake() - if (suspended) - suspended = FALSE - if (can_fire) - next_fire = world.time + wait - -/datum/controller/subsystem/VV_static() - return ..() + list("queued_priority", "suspended") - -/decl/vv_set_handler/subsystem_handler - handled_type = /datum/controller/subsystem - handled_vars = list("can_fire") - predicates = list(/proc/is_num_predicate) - -/decl/vv_set_handler/subsystem_handler/handle_set_var(var/datum/controller/subsystem/SS, variable, var_value, client) - if (var_value) - SS.enable() - else - SS.disable() diff --git a/code/controllers/subsystems/ai.dm b/code/controllers/subsystems/ai.dm deleted file mode 100644 index 4d80a61d700aa..0000000000000 --- a/code/controllers/subsystems/ai.dm +++ /dev/null @@ -1,53 +0,0 @@ -//mobs can mess up unrelated tests, so we don't turn their AI on during them -#ifdef UNIT_TEST - #define SSAI_FLAGS SS_NO_INIT | SS_NO_FIRE -#else - #define SSAI_FLAGS SS_NO_INIT -#endif - - -SUBSYSTEM_DEF(ai) - name = "AI" - flags = SSAI_FLAGS - init_order = SS_INIT_AI - priority = SS_PRIORITY_AI - runlevels = RUNLEVEL_GAME | RUNLEVEL_POSTGAME - wait = 2 SECONDS - var/static/list/active = list() - var/static/list/queue = list() - - -/datum/controller/subsystem/ai/UpdateStat(time) - if (PreventUpdateStat(time)) - return ..() - ..({"\ - Active AI: [active.len] \ - Run Empty Levels: [config.run_empty_levels ? "Y" : "N"]\ - "}) - - -/datum/controller/subsystem/ai/fire(resume, no_mc_tick) - if (!resume) - queue = active.Copy() - var/datum/ai_holder/ai - for (var/i = queue.len to 1 step -1) - ai = queue[i] - if (QDELETED(ai) || ai.busy) - continue - if (!ai.holder) - continue - if (!config.run_empty_levels && !SSpresence.population(get_z(ai.holder))) - continue - ai.handle_strategicals() - if (no_mc_tick) - CHECK_TICK - else if (MC_TICK_CHECK) - queue.Cut(i) - return - - -#ifdef UNIT_TEST -/datum/controller/subsystem/ai/flags = SS_NO_INIT | SS_NO_FIRE -#else -/datum/controller/subsystem/ai/flags = SS_NO_INIT -#endif diff --git a/code/controllers/subsystems/aifast.dm b/code/controllers/subsystems/aifast.dm deleted file mode 100644 index 4e2d06d6d11e1..0000000000000 --- a/code/controllers/subsystems/aifast.dm +++ /dev/null @@ -1,44 +0,0 @@ -SUBSYSTEM_DEF(aifast) - name = "AI (Fast)" - init_order = SS_INIT_AIFAST - priority = SS_PRIORITY_AI - runlevels = RUNLEVEL_GAME | RUNLEVEL_POSTGAME - wait = 0.25 SECONDS - var/static/list/active = list() - var/static/list/queue = list() - - -/datum/controller/subsystem/aifast/UpdateStat(time) - if (PreventUpdateStat(time)) - return ..() - ..({"\ - Active AI: [active.len] \ - Run Empty Levels: [config.run_empty_levels ? "Y" : "N"]\ - "}) - - -/datum/controller/subsystem/aifast/fire(resume, no_mc_tick) - if (!resume) - queue = active.Copy() - var/datum/ai_holder/ai - for (var/i = queue.len to 1 step -1) - ai = queue[i] - if (QDELETED(ai) || ai.busy) - continue - if (!ai.holder) - continue - if (!config.run_empty_levels && !SSpresence.population(get_z(ai.holder))) - continue - ai.handle_tactics() - if (no_mc_tick) - CHECK_TICK - else if (MC_TICK_CHECK) - queue.Cut(i) - return - - -#ifdef UNIT_TEST -/datum/controller/subsystem/aifast/flags = SS_NO_INIT | SS_NO_FIRE -#else -/datum/controller/subsystem/aifast/flags = SS_NO_INIT -#endif diff --git a/code/controllers/subsystems/air.dm b/code/controllers/subsystems/air.dm deleted file mode 100644 index a6d13f5cbc9aa..0000000000000 --- a/code/controllers/subsystems/air.dm +++ /dev/null @@ -1,453 +0,0 @@ -/* - -Overview: - The air controller does everything. There are tons of procs in here. - -Class Vars: - zones - All zones currently holding one or more turfs. - edges - All processing edges. - - tiles_to_update - Tiles scheduled to update next tick. - zones_to_update - Zones which have had their air changed and need air archival. - active_hotspots - All processing fire objects. - - active_zones - The number of zones which were archived last tick. Used in debug verbs. - next_id - The next UID to be applied to a zone. Mostly useful for debugging purposes as zones do not need UIDs to function. - -Class Procs: - - mark_for_update(turf/T) - Adds the turf to the update list. When updated, update_air_properties() will be called. - When stuff changes that might affect airflow, call this. It's basically the only thing you need. - - add_zone(zone/Z) and remove_zone(zone/Z) - Adds zones to the zones list. Does not mark them for update. - - air_blocked(turf/A, turf/B) - Returns a bitflag consisting of: - AIR_BLOCKED - The connection between turfs is physically blocked. No air can pass. - ZONE_BLOCKED - There is a door between the turfs, so zones cannot cross. Air may or may not be permeable. - - has_valid_zone(turf/T) - Checks the presence and validity of T's zone. - May be called on unsimulated turfs, returning 0. - - merge(zone/A, zone/B) - Called when zones have a direct connection and equivalent pressure and temperature. - Merges the zones to create a single zone. - - connect(turf/simulated/A, turf/B) - Called by turf/update_air_properties(). The first argument must be simulated. - Creates a connection between A and B. - - mark_zone_update(zone/Z) - Adds zone to the update list. Unlike mark_for_update(), this one is called automatically whenever - air is returned from a simulated turf. - - equivalent_pressure(zone/A, zone/B) - Currently identical to A.air.compare(B.air). Returns 1 when directly connected zones are ready to be merged. - - get_edge(zone/A, zone/B) - get_edge(zone/A, turf/B) - Gets a valid connection_edge between A and B, creating a new one if necessary. - - has_same_air(turf/A, turf/B) - Used to determine if an unsimulated edge represents a specific turf. - Simulated edges use connection_edge/contains_zone() for the same purpose. - Returns 1 if A has identical gases and temperature to B. - - remove_edge(connection_edge/edge) - Called when an edge is erased. Removes it from processing. - -*/ - -SUBSYSTEM_DEF(air) - name = "Air" - priority = SS_PRIORITY_AIR - init_order = SS_INIT_AIR - flags = SS_POST_FIRE_TIMING - - //Geometry lists - var/list/zones = list() - var/list/edges = list() - - //Geometry updates lists - var/list/tiles_to_update = list() - var/list/zones_to_update = list() - var/list/active_fire_zones = list() - var/list/active_hotspots = list() - var/list/active_edges = list() - - var/list/deferred = list() - var/list/processing_edges - var/list/processing_fires - var/list/processing_hotspots - var/list/processing_zones - - var/active_zones = 0 - var/next_id = 1 - - var/active_edges_firelimit = 20 - var/times_failed_to_calc_firelevel = 0 - -/datum/controller/subsystem/air/proc/reboot() - // Stop processing while we rebuild. - can_fire = FALSE - - // Make sure we don't rebuild mid-tick. - if (state != SS_IDLE) - report_progress("ZAS Rebuild initiated. Waiting for current air tick to complete before continuing.") - while (state != SS_IDLE) - stoplag() - - while (zones.len) - var/zone/zone = zones[zones.len] - zones.len-- - - zone.c_invalidate() - - edges.Cut() - tiles_to_update.Cut() - zones_to_update.Cut() - active_fire_zones.Cut() - active_hotspots.Cut() - active_edges.Cut() - - // Re-run setup without air settling. - Initialize(Uptime(), FALSE) - - // Update next_fire so the MC doesn't try to make up for missed ticks. - next_fire = world.time + wait - can_fire = TRUE - - -/datum/controller/subsystem/air/UpdateStat(time) - if (PreventUpdateStat(time)) - return ..() - ..({"\ - TtU: [tiles_to_update.len] \ - ZtU: [zones_to_update.len] \ - AFZ: [active_fire_zones.len] \ - AH: [active_hotspots.len] \ - AE: [active_edges.len]\ - "}) - - -/datum/controller/subsystem/air/Initialize(start_uptime, simulate = TRUE) - report_progress("Processing Geometry...") - var/simulated_turf_count = 0 - for(var/turf/simulated/S) - simulated_turf_count++ - S.update_air_properties() - CHECK_TICK - report_progress({"Total Simulated Turfs: [simulated_turf_count] -Total Zones: [zones.len] -Total Edges: [edges.len] -Total Active Edges: [active_edges.len ? "[active_edges.len]" : "None"] -Total Unsimulated Turfs: [world.maxx*world.maxy*world.maxz - simulated_turf_count] -Geometry processing completed in [(Uptime() - start_uptime)/10] seconds! -"}) - if (simulate) - report_progress("Settling air...") - start_uptime = Uptime() - fire(FALSE, TRUE) - report_progress("Air settling completed in [(Uptime() - start_uptime)/10] seconds!") - - -/datum/controller/subsystem/air/fire(resumed = FALSE, no_mc_tick = FALSE) - if (!resumed) - processing_edges = active_edges.Copy() - processing_fires = active_fire_zones.Copy() - processing_hotspots = active_hotspots.Copy() - - var/list/curr_tiles = tiles_to_update - var/list/curr_defer = deferred - var/list/curr_edges = processing_edges - var/list/curr_fire = processing_fires - var/list/curr_hotspot = processing_hotspots - var/list/curr_zones = zones_to_update - - while (curr_tiles.len) - var/turf/T = curr_tiles[curr_tiles.len] - curr_tiles.len-- - - if (!T) - if (no_mc_tick) - CHECK_TICK - else if (MC_TICK_CHECK) - return - - continue - - //check if the turf is self-zone-blocked - var/c_airblock - ATMOS_CANPASS_TURF(c_airblock, T, T) - if(c_airblock & ZONE_BLOCKED) - deferred += T - if (no_mc_tick) - CHECK_TICK - else if (MC_TICK_CHECK) - return - continue - - T.update_air_properties() - T.post_update_air_properties() - T.needs_air_update = 0 - #ifdef ZASDBG - T.overlays -= mark - updated++ - #endif - - if (no_mc_tick) - CHECK_TICK - else if (MC_TICK_CHECK) - return - - var/halt_firelevel_calculations = 0 - if(tick_usage * world.tick_lag > Master.current_ticklimit || length(processing_edges) > active_edges_firelimit) - halt_firelevel_calculations = 1 - times_failed_to_calc_firelevel++ - if(times_failed_to_calc_firelevel > 60) - active_edges_firelimit += 5 - times_failed_to_calc_firelevel = 0 - else - times_failed_to_calc_firelevel = 0 - - while (curr_defer.len) - var/turf/T = curr_defer[curr_defer.len] - curr_defer.len-- - - T.update_air_properties() - T.post_update_air_properties() - T.needs_air_update = 0 - #ifdef ZASDBG - T.overlays -= mark - updated++ - #endif - - if (no_mc_tick) - CHECK_TICK - else if (MC_TICK_CHECK) - return - - while (curr_edges.len) - var/connection_edge/edge = curr_edges[curr_edges.len] - curr_edges.len-- - - if (!edge) - if (no_mc_tick) - CHECK_TICK - else if (MC_TICK_CHECK) - return - continue - - edge.tick() - - if (no_mc_tick) - CHECK_TICK - else if (MC_TICK_CHECK) - return - - while (curr_fire.len) - var/zone/Z = curr_fire[curr_fire.len] - curr_fire.len-- - if(halt_firelevel_calculations) - if(length(Z.fire_tiles) && !Z.firelevel) - Z.firelevel = vsc.fire_firelevel_multiplier - else - Z.calculate_fire_level() - - - Z.process_fire() - - if (no_mc_tick) - CHECK_TICK - else if (MC_TICK_CHECK) - return - - while (curr_hotspot.len) - var/obj/hotspot/F = curr_hotspot[curr_hotspot.len] - curr_hotspot.len-- - - F.Process() - - if (no_mc_tick) - CHECK_TICK - else if (MC_TICK_CHECK) - return - - while (curr_zones.len) - var/zone/Z = curr_zones[curr_zones.len] - curr_zones.len-- - - Z.tick() - Z.needs_update = FALSE - - if (no_mc_tick) - CHECK_TICK - else if (MC_TICK_CHECK) - return - -/datum/controller/subsystem/air/proc/add_zone(zone/z) - zones += z - z.name = "Zone [next_id++]" - mark_zone_update(z) - -/datum/controller/subsystem/air/proc/remove_zone(zone/z) - zones -= z - zones_to_update -= z - if (processing_zones) - processing_zones -= z - -/datum/controller/subsystem/air/proc/air_blocked(turf/A, turf/B) - #ifdef ZASDBG - ASSERT(isturf(A)) - ASSERT(isturf(B)) - #endif - var/ablock - ATMOS_CANPASS_TURF(ablock, A, B) - if(ablock == BLOCKED) - return BLOCKED - ATMOS_CANPASS_TURF(., B, A) - return ablock | . - -/datum/controller/subsystem/air/proc/merge(zone/A, zone/B) - #ifdef ZASDBG - ASSERT(istype(A)) - ASSERT(istype(B)) - ASSERT(!A.invalid) - ASSERT(!B.invalid) - ASSERT(A != B) - #endif - if(A.contents.len < B.contents.len) - A.c_merge(B) - mark_zone_update(B) - else - B.c_merge(A) - mark_zone_update(A) - -/datum/controller/subsystem/air/proc/connect(turf/simulated/A, turf/simulated/B) - #ifdef ZASDBG - ASSERT(istype(A)) - ASSERT(isturf(B)) - ASSERT(A.zone) - ASSERT(!A.zone.invalid) - //ASSERT(B.zone) - ASSERT(A != B) - #endif - - var/block = air_blocked(A,B) - if(block & AIR_BLOCKED) return - - var/direct = !(block & ZONE_BLOCKED) - var/space = !istype(B) - - if(!space) - if(min(A.zone.contents.len, B.zone.contents.len) < ZONE_MIN_SIZE || (direct && (equivalent_pressure(A.zone,B.zone) || times_fired == 0))) - merge(A.zone,B.zone) - return - - var/a_to_b = get_dir(A,B) - var/b_to_a = get_dir(B,A) - - if(!A.connections) A.connections = new - if(!B.connections) B.connections = new - - if(A.connections.get(a_to_b)) - return - if(B.connections.get(b_to_a)) - return - if(!space) - if(A.zone == B.zone) return - - - var/connection/c = new /connection(A,B) - - A.connections.place(c, a_to_b) - B.connections.place(c, b_to_a) - - if(direct) c.mark_direct() - -/datum/controller/subsystem/air/proc/mark_for_update(turf/T) - #ifdef ZASDBG - ASSERT(isturf(T)) - #endif - if(T.needs_air_update) - return - tiles_to_update += T - #ifdef ZASDBG - T.overlays += mark - #endif - T.needs_air_update = 1 - -/datum/controller/subsystem/air/proc/mark_zone_update(zone/Z) - #ifdef ZASDBG - ASSERT(istype(Z)) - #endif - if(Z.needs_update) - return - zones_to_update += Z - Z.needs_update = 1 - -/datum/controller/subsystem/air/proc/mark_edge_sleeping(connection_edge/E) - #ifdef ZASDBG - ASSERT(istype(E)) - #endif - if(E.sleeping) - return - active_edges -= E - E.sleeping = 1 - -/datum/controller/subsystem/air/proc/mark_edge_active(connection_edge/E) - #ifdef ZASDBG - ASSERT(istype(E)) - #endif - if(!E.sleeping) - return - active_edges += E - E.sleeping = 0 - -/datum/controller/subsystem/air/proc/equivalent_pressure(zone/A, zone/B) - return A.air.compare(B.air) - -/datum/controller/subsystem/air/proc/get_edge(zone/A, zone/B) - if(istype(B)) - for(var/connection_edge/zone/edge in A.edges) - if(edge.contains_zone(B)) - return edge - var/connection_edge/edge = new/connection_edge/zone(A,B) - edges += edge - edge.recheck() - return edge - else - for(var/connection_edge/unsimulated/edge in A.edges) - if(has_same_air(edge.B,B)) - return edge - var/connection_edge/edge = new/connection_edge/unsimulated(A,B) - edges += edge - edge.recheck() - return edge - -/datum/controller/subsystem/air/proc/has_same_air(turf/A, turf/B) - if(A.initial_gas) - if(!B.initial_gas) - return 0 - for(var/g in A.initial_gas) - if(A.initial_gas[g] != B.initial_gas[g]) - return 0 - if(B.initial_gas) - if(!A.initial_gas) - return 0 - for(var/g in B.initial_gas) - if(A.initial_gas[g] != B.initial_gas[g]) - return 0 - if(A.temperature != B.temperature) - return 0 - return 1 - -/datum/controller/subsystem/air/proc/remove_edge(connection_edge/E) - edges -= E - if(!E.sleeping) - active_edges -= E - if(processing_edges) - processing_edges -= E diff --git a/code/controllers/subsystems/airflow.dm b/code/controllers/subsystems/airflow.dm deleted file mode 100644 index 512ceb864bff4..0000000000000 --- a/code/controllers/subsystems/airflow.dm +++ /dev/null @@ -1,153 +0,0 @@ -#define CLEAR_OBJECT(TARGET) \ - processing -= TARGET; \ - TARGET.airflow_dest = null; \ - TARGET.airflow_speed = 0; \ - TARGET.airflow_time = 0; \ - TARGET.airflow_skip_speedcheck = FALSE; \ - if (TARGET.airflow_od) { \ - TARGET.set_density(FALSE); \ - } - - -SUBSYSTEM_DEF(airflow) - name = "Airflow" - wait = 1 - flags = SS_NO_INIT - priority = SS_PRIORITY_AIRFLOW - - var/static/list/processing = list() - var/static/list/current = list() - - -/datum/controller/subsystem/airflow/Recover() - current.Cut() - - -/datum/controller/subsystem/airflow/UpdateStat(time) - return - - -/datum/controller/subsystem/airflow/fire(resumed, no_mc_tick) - if (!resumed) - current = processing.Copy() - var/atom/movable/target - for (var/i = current.len to 1 step -1) - target = current[i] - if (QDELETED(target)) - if (target) - CLEAR_OBJECT(target) - if (MC_TICK_CHECK) - current.Cut(i) - return - continue - if (target.airflow_speed <= 0) - CLEAR_OBJECT(target) - if (MC_TICK_CHECK) - current.Cut(i) - return - continue - if (target.airflow_process_delay > 0) - target.airflow_process_delay -= 1 - if (MC_TICK_CHECK) - current.Cut(i) - return - continue - else if (target.airflow_process_delay) - target.airflow_process_delay = 0 - target.airflow_speed = min(target.airflow_speed, 15) - target.airflow_speed -= vsc.airflow_speed_decay - if (!target.airflow_skip_speedcheck) - if (target.airflow_speed > 7) - if (target.airflow_time++ >= target.airflow_speed - 7) - if (target.airflow_od) - target.set_density(FALSE) - target.airflow_skip_speedcheck = TRUE - if (MC_TICK_CHECK) - current.Cut(i) - return - continue - else - if (target.airflow_od) - target.set_density(FALSE) - target.airflow_process_delay = max(1, 10 - (target.airflow_speed + 3)) - target.airflow_skip_speedcheck = TRUE - if (MC_TICK_CHECK) - current.Cut(i) - return - continue - target.airflow_skip_speedcheck = FALSE - if (target.airflow_od) - target.set_density(TRUE) - if (!target.airflow_dest || target.loc == target.airflow_dest) - target.airflow_dest = locate(min(max(target.x + target.airflow_xo, 1), world.maxx), min(max(target.y + target.airflow_yo, 1), world.maxy), target.z) - if ((target.x == 1) || (target.x == world.maxx) || (target.y == 1) || (target.y == world.maxy)) - CLEAR_OBJECT(target) - if (MC_TICK_CHECK) - current.Cut(i) - return - continue - if (!isturf(target.loc)) - CLEAR_OBJECT(target) - if (MC_TICK_CHECK) - current.Cut(i) - return - continue - step_towards(target, target.airflow_dest) - if (ismob(target)) - var/mob/M = target - M.SetMoveCooldown(vsc.airflow_mob_slowdown) - if (MC_TICK_CHECK) - current.Cut(i) - return - -#undef CLEAR_OBJECT - - -/atom/movable/var/tmp/airflow_xo -/atom/movable/var/tmp/airflow_yo -/atom/movable/var/tmp/airflow_od -/atom/movable/var/tmp/airflow_process_delay -/atom/movable/var/tmp/airflow_skip_speedcheck - - -/atom/movable/proc/prepare_airflow(strength) - if (!airflow_dest || airflow_speed < 0 || last_airflow > world.time - vsc.airflow_delay) - return FALSE - if (airflow_speed) - airflow_speed = strength / max(get_dist(src, airflow_dest), 1) - return FALSE - if (airflow_dest == loc) - step_away(src, loc) - if (!AirflowCanMove(strength)) - return FALSE - if (ismob(src)) - to_chat(src, SPAN_DANGER("You are pushed away by airflow!")) - last_airflow = world.time - var/airflow_falloff = 9 - sqrt((x - airflow_dest.x) ** 2 + (y - airflow_dest.y) ** 2) - if (airflow_falloff < 1) - airflow_dest = null - return FALSE - airflow_speed = min(max(strength * (9 / airflow_falloff), 1), 9) - airflow_od = FALSE - if (!density) - set_density(TRUE) - airflow_od = TRUE - return TRUE - - -/atom/movable/proc/GotoAirflowDest(strength) - if (!prepare_airflow(strength)) - return - airflow_xo = airflow_dest.x - x - airflow_yo = airflow_dest.y - y - airflow_dest = null - SSairflow.processing += src - - -/atom/movable/proc/RepelAirflowDest(strength) - if (!prepare_airflow(strength)) - return - airflow_xo = -(airflow_dest.x - x) - airflow_yo = -(airflow_dest.y - y) - airflow_dest = null - SSairflow.processing += src diff --git a/code/controllers/subsystems/alarm.dm b/code/controllers/subsystems/alarm.dm deleted file mode 100644 index e902db40675cb..0000000000000 --- a/code/controllers/subsystems/alarm.dm +++ /dev/null @@ -1,46 +0,0 @@ -SUBSYSTEM_DEF(alarm) - name = "Alarm" - wait = 2 SECONDS - priority = SS_PRIORITY_ALARM - init_order = SS_INIT_ALARM - var/static/list/datum/alarm_handler/handlers - var/static/list/current = list() - var/static/list/active = list() - - -/datum/controller/subsystem/alarm/Initialize(start_uptime) - handlers = list( - GLOB.atmosphere_alarm, - GLOB.camera_alarm, - GLOB.fire_alarm, - GLOB.motion_alarm, - GLOB.power_alarm - ) - - -/datum/controller/subsystem/alarm/UpdateStat(time) - if (PreventUpdateStat(time)) - return ..() - ..("Alarms: [active.len]") - - -/datum/controller/subsystem/alarm/fire(resumed, no_mc_tick) - if (!resumed) - current = handlers.Copy() - active.Cut() - var/datum/alarm_handler/A - for (var/i = current.len to 1 step -1) - A = current[i] - A.process() - active += A.alarms - if (MC_TICK_CHECK) - current.Cut(i) - return - current.Cut() - - -GLOBAL_DATUM_INIT(atmosphere_alarm, /datum/alarm_handler/atmosphere, new) -GLOBAL_DATUM_INIT(camera_alarm, /datum/alarm_handler/camera, new) -GLOBAL_DATUM_INIT(fire_alarm, /datum/alarm_handler/fire, new) -GLOBAL_DATUM_INIT(motion_alarm, /datum/alarm_handler/motion, new) -GLOBAL_DATUM_INIT(power_alarm, /datum/alarm_handler/power, new) diff --git a/code/controllers/subsystems/ao.dm b/code/controllers/subsystems/ao.dm deleted file mode 100644 index 4a76cbdd74873..0000000000000 --- a/code/controllers/subsystems/ao.dm +++ /dev/null @@ -1,35 +0,0 @@ -SUBSYSTEM_DEF(ao) - name = "Ambient Occlusion" - init_order = SS_INIT_MISC_LATE - wait = 1 - runlevels = RUNLEVELS_DEFAULT | RUNLEVEL_LOBBY - flags = SS_NO_INIT - var/static/list/queue = list() - var/static/list/cache = list() - - -/datum/controller/subsystem/ao/UpdateStat(time) - if (PreventUpdateStat(time)) - return ..() - ..("Queue: [queue.len]") - - -/datum/controller/subsystem/ao/fire(resume, no_mc_tick) - if (!resume) - queue = cache.Copy() - var/turf/target - for (var/i = queue.len to 1 step -1) - target = queue[i] - if(QDELETED(target)) - continue - if (target.ao_queued == AO_UPDATE_REBUILD) - var/previous_neighbours = target.ao_neighbors - target.calculate_ao_neighbors() - if (previous_neighbours != target.ao_neighbors) - target.update_ao() - target.ao_queued = AO_UPDATE_NONE - if (no_mc_tick) - CHECK_TICK - else if (MC_TICK_CHECK) - queue.Cut(i) - return diff --git a/code/controllers/subsystems/atoms.dm b/code/controllers/subsystems/atoms.dm deleted file mode 100644 index 3589722cdef30..0000000000000 --- a/code/controllers/subsystems/atoms.dm +++ /dev/null @@ -1,130 +0,0 @@ -#define BAD_INIT_QDEL_BEFORE 1 -#define BAD_INIT_DIDNT_INIT 2 -#define BAD_INIT_SLEPT 4 -#define BAD_INIT_NO_HINT 8 - - -SUBSYSTEM_DEF(atoms) - name = "Atoms" - init_order = SS_INIT_ATOMS - flags = SS_NO_FIRE | SS_NEEDS_SHUTDOWN - - var/static/atom_init_stage = INITIALIZATION_INSSATOMS - var/static/old_init_stage - var/static/list/late_loaders = list() - var/static/list/created_atoms = list() - var/static/list/BadInitializeCalls = list() - - -/datum/controller/subsystem/atoms/UpdateStat(time) - if (PreventUpdateStat(time)) - return ..() - ..("Bad Inits: [BadInitializeCalls.len]") - - -/datum/controller/subsystem/atoms/Shutdown() - var/initlog = InitLog() - if (initlog) - text2file(initlog, "[GLOB.log_directory]/initialize.log") - - -/datum/controller/subsystem/atoms/Initialize(start_uptime) - atom_init_stage = INITIALIZATION_INNEW_MAPLOAD - InitializeAtoms() - - -/datum/controller/subsystem/atoms/Recover() - created_atoms.Cut() - late_loaders.Cut() - if (atom_init_stage == INITIALIZATION_INNEW_MAPLOAD) - InitializeAtoms() - - -/datum/controller/subsystem/atoms/proc/InitializeAtoms() - if (atom_init_stage <= INITIALIZATION_INSSATOMS_LATE) - return - atom_init_stage = INITIALIZATION_INNEW_MAPLOAD - var/list/mapload_arg = list(TRUE) - var/count = created_atoms.len - var/atom/created - var/list/arguments - for (var/i = created_atoms.len to 1 step -1) - created = created_atoms[i] - if (!(created.atom_flags & ATOM_FLAG_INITIALIZED)) - arguments = created_atoms[created] ? mapload_arg + created_atoms[created] : mapload_arg - InitAtom(created, arguments) - CHECK_TICK - created_atoms.Cut() - if (!initialized) - for (var/atom/A in world) - if (!(A.atom_flags & ATOM_FLAG_INITIALIZED)) - InitAtom(A, mapload_arg) - ++count - CHECK_TICK - report_progress("Initialized [count] atom\s") - atom_init_stage = INITIALIZATION_INNEW_REGULAR - if (!late_loaders.len) - return - for (var/atom/A as anything in late_loaders) - A.LateInitialize(arglist(late_loaders[A])) - report_progress("Late initialized [late_loaders.len] atom\s") - late_loaders.Cut() - - -/datum/controller/subsystem/atoms/proc/InitAtom(atom/A, list/arguments) - var/atom_type = A?.type - if (QDELING(A)) - BadInitializeCalls[atom_type] |= BAD_INIT_QDEL_BEFORE - return TRUE - var/start_tick = world.time - var/result = A.Initialize(arglist(arguments)) - if(start_tick != world.time) - BadInitializeCalls[atom_type] |= BAD_INIT_SLEPT - var/qdeleted = FALSE - if (result != INITIALIZE_HINT_NORMAL) - switch(result) - if (INITIALIZE_HINT_LATELOAD) - if (arguments[1]) //mapload - late_loaders[A] = arguments - else - A.LateInitialize(arglist(arguments)) - if (INITIALIZE_HINT_QDEL) - qdel(A) - qdeleted = TRUE - else - BadInitializeCalls[atom_type] |= BAD_INIT_NO_HINT - if (!A) //possible harddel - qdeleted = TRUE - else if (!(A.atom_flags & ATOM_FLAG_INITIALIZED)) - BadInitializeCalls[atom_type] |= BAD_INIT_DIDNT_INIT - return qdeleted || QDELING(A) - - -/datum/controller/subsystem/atoms/proc/map_loader_begin() - old_init_stage = atom_init_stage - atom_init_stage = INITIALIZATION_INSSATOMS_LATE - - -/datum/controller/subsystem/atoms/proc/map_loader_stop() - atom_init_stage = old_init_stage - - -/datum/controller/subsystem/atoms/proc/InitLog() - . = "" - for (var/path in BadInitializeCalls) - . += "Path : [path] \n" - var/fails = BadInitializeCalls[path] - if (fails & BAD_INIT_DIDNT_INIT) - . += "- Didn't call atom/Initialize()\n" - if (fails & BAD_INIT_NO_HINT) - . += "- Didn't return an Initialize hint\n" - if (fails & BAD_INIT_QDEL_BEFORE) - . += "- Qdel'd in New()\n" - if (fails & BAD_INIT_SLEPT) - . += "- Slept during Initialize()\n" - - -#undef BAD_INIT_QDEL_BEFORE -#undef BAD_INIT_DIDNT_INIT -#undef BAD_INIT_SLEPT -#undef BAD_INIT_NO_HINT diff --git a/code/controllers/subsystems/chat.dm b/code/controllers/subsystems/chat.dm deleted file mode 100644 index a5c636df6ee51..0000000000000 --- a/code/controllers/subsystems/chat.dm +++ /dev/null @@ -1,57 +0,0 @@ -SUBSYSTEM_DEF(chat) - name = "Chat" - wait = 1 - runlevels = RUNLEVELS_DEFAULT | RUNLEVEL_LOBBY - priority = SS_PRIORITY_CHAT - init_order = SS_INIT_CHAT - var/static/list/payload = list() - - -/datum/controller/subsystem/chat/UpdateStat(time) - return - - -/datum/controller/subsystem/chat/fire(resumed) - for (var/client/C as anything in payload) - send_output(C, payload[C], "browseroutput:output") - payload -= C - if (MC_TICK_CHECK) - return - - -/datum/controller/subsystem/chat/proc/queue(target, message, handle_whitespace = TRUE, trailing_newline = TRUE) - if (!target || !message) - return - if (!istext(message)) - CRASH("to_chat called with invalid input type") - if (target == world) - target = GLOB.clients - var/original_message = message //Some macros resist parsing elsewhere; strip them here - message = replacetext_char(message, "\improper", "") - message = replacetext_char(message, "\proper", "") - if (handle_whitespace) - message = replacetext_char(message, "\n", "
    ") - message = replacetext_char(message, "\t", "[FOURSPACES][FOURSPACES]") - if (trailing_newline) - message += "
    " - var/twiceEncoded = url_encode(url_encode(message)) // Double encode so that JS can consume utf-8 - if (islist(target)) - for(var/I in target) - queuePartTwo(I, message, original_message, twiceEncoded) - else - queuePartTwo(target, message, original_message, twiceEncoded) - - -/datum/controller/subsystem/chat/proc/queuePartTwo(client/C, message, original, encoded) - C = resolve_client(C) - if (!C) - return - legacy_chat(C, original) - if (C.get_preference_value(/datum/client_preference/goonchat) != GLOB.PREF_YES) - return - if (!C?.chatOutput || C.chatOutput.broken) - return - if (!C.chatOutput.loaded) - C.chatOutput.messageQueue += message - return - payload[C] += encoded diff --git a/code/controllers/subsystems/chemistry.dm b/code/controllers/subsystems/chemistry.dm deleted file mode 100644 index e4efd4710aab9..0000000000000 --- a/code/controllers/subsystems/chemistry.dm +++ /dev/null @@ -1,77 +0,0 @@ -SUBSYSTEM_DEF(chemistry) - name = "Chemistry" - priority = SS_PRIORITY_CHEMISTRY - init_order = SS_INIT_CHEMISTRY - runlevels = RUNLEVELS_DEFAULT | RUNLEVEL_LOBBY - wait = 0.5 SECONDS - var/static/list/reactions = list() - var/static/list/reactions_by_id = list() - var/static/list/reactions_by_result = list() - var/static/list/random_chem_prototypes = list() - var/static/list/processing = list() - var/static/list/current = list() - - -/datum/controller/subsystem/chemistry/UpdateStat(time) - if (PreventUpdateStat(time)) - return ..() - ..("Reaction Queue: [processing.len]") - - -/datum/controller/subsystem/chemistry/Initialize(start_uptime) - for (var/datum/chemical_reaction/reaction as anything in subtypesof(/datum/chemical_reaction)) - reaction = new reaction - var/result = reaction.result - var/list/required = reaction.required_reagents - if (!reactions_by_result[result]) - reactions_by_result[result] = list() - reactions_by_result[result] += reaction - if (length(required)) - var/id = required[1] - if (!reactions_by_id[id]) - reactions_by_id[id] = list() - reactions_by_id[id] += reaction - - -/datum/controller/subsystem/chemistry/Recover() - current.Cut() - - -/datum/controller/subsystem/chemistry/fire(resumed, no_mc_tick) - if (!resumed) - current = processing.Copy() - for (var/i = current.len to 1 step -1) - var/datum/reagents/R = current[i] - if (QDELETED(R)) - log_debug("SSchemistry: deleted reagents datum in processing queue! Info: [R?.del_info || "(nulled)"]") - processing -= R - if (MC_TICK_CHECK) - current.Cut(i) - return - continue - if (!R.process_reactions()) - processing -= R - if (MC_TICK_CHECK) - current.Cut(i) - return - - -/datum/controller/subsystem/chemistry/proc/get_prototype(given_type, temperature) - if(!ispath(given_type, /datum/reagent/random)) - return - var/datum/reagent/random/prototype = random_chem_prototypes[given_type] - if(!prototype) - prototype = new given_type(null, TRUE) - prototype.randomize_data(temperature) - random_chem_prototypes[given_type] = prototype - if(temperature && !prototype.stable_at_temperature(temperature)) - return - return prototype - - -/datum/controller/subsystem/chemistry/proc/get_random_chem(only_if_unique, temperature = T20C) - for(var/type in typesof(/datum/reagent/random)) - if(only_if_unique && random_chem_prototypes[type]) - continue - if(get_prototype(type, temperature)) //returns truthy if it's valid for the given temperature - return type diff --git a/code/controllers/subsystems/circuit_component.dm b/code/controllers/subsystems/circuit_component.dm deleted file mode 100644 index 81aae647f60fd..0000000000000 --- a/code/controllers/subsystems/circuit_component.dm +++ /dev/null @@ -1,78 +0,0 @@ -// This SS manages circuit components; there is another SS that handles power use and init. - -SUBSYSTEM_DEF(circuit_components) - name = "Circuit Components" - priority = SS_PRIORITY_CIRCUIT_COMP - flags = SS_NO_INIT - wait = 1 - - var/list/queued_components = list() // Queue of components for activation - var/position = 1 // Helper index to order newly activated components properly - - -/datum/controller/subsystem/circuit_components/UpdateStat(time) - if (PreventUpdateStat(time)) - return ..() - ..("Component Queue: [queued_components.len]") - - -/datum/controller/subsystem/circuit_components/fire(resumed = FALSE) - if(paused_ticks >= 10) // The likeliest fail mode, due to the fast tick rate, is that it can never clear the full queue, running resumed every tick and accumulating a backlog. - disable() // As this SS deals with optional and potentially abusable content, it will autodisable if overtaxing the server. - return - - var/list/queued_components = src.queued_components - while(length(queued_components)) - var/list/entry = queued_components[queued_components.len] - position = queued_components.len - queued_components.len-- - if(!length(entry)) - if(MC_TICK_CHECK) - break - continue - - var/obj/item/integrated_circuit/circuit = entry[1] - entry.Cut(1,2) - if(QDELETED(circuit)) - if(MC_TICK_CHECK) - break - continue - - circuit.check_then_do_work(arglist(entry)) - if(MC_TICK_CHECK) - break - position = null - -/datum/controller/subsystem/circuit_components/disable() - ..() - queued_components.Cut() - log_and_message_admins("Circuit component processing has been disabled.") - -/datum/controller/subsystem/circuit_components/enable() - ..() - log_and_message_admins("Circuit component processing has been enabled.") - -// Store the entries like this so that components can be queued multiple times at once. -// With immediate set, will generally imitate the order of the call stack if execution happened directly. -// With immediate off, you go to the bottom of the pile. -/datum/controller/subsystem/circuit_components/proc/queue_component(obj/item/integrated_circuit/circuit, immediate = TRUE) - if(!can_fire) - return - var/list/entry = list(circuit) + args.Copy(3) - if(!immediate || !position) - queued_components.Insert(1, list(entry)) - if(position) - position++ - else - queued_components.Insert(position, list(entry)) - -/datum/controller/subsystem/circuit_components/proc/dequeue_component(obj/item/integrated_circuit/circuit) - var/i = 1 - while(i <= length(queued_components)) // Either i increases or length decreases on every iteration. - var/list/entry = queued_components[i] - if(length(entry) && entry[1] == circuit) - queued_components.Cut(i, i+1) - if(position > i) - position-- - else - i++ diff --git a/code/controllers/subsystems/evac.dm b/code/controllers/subsystems/evac.dm deleted file mode 100644 index 4f46f88f6c76d..0000000000000 --- a/code/controllers/subsystems/evac.dm +++ /dev/null @@ -1,18 +0,0 @@ -SUBSYSTEM_DEF(evac) - name = "Evacuation" - priority = SS_PRIORITY_EVAC - //Initializes at default time - flags = SS_NO_TICK_CHECK|SS_BACKGROUND - wait = 2 SECONDS - -/datum/controller/subsystem/evac/Initialize(start_uptime) - if(!evacuation_controller) - evacuation_controller = new GLOB.using_map.evac_controller_type () - evacuation_controller.set_up() - - -/datum/controller/subsystem/evac/UpdateStat(time) - return - -/datum/controller/subsystem/evac/fire() - evacuation_controller.process() diff --git a/code/controllers/subsystems/event.dm b/code/controllers/subsystems/event.dm deleted file mode 100644 index fe2772d69ad51..0000000000000 --- a/code/controllers/subsystems/event.dm +++ /dev/null @@ -1,353 +0,0 @@ -SUBSYSTEM_DEF(event) - name = "Event Manager" - wait = 2 SECONDS - priority = SS_PRIORITY_EVENT - - var/list/processing_events = list() - var/pos = EVENT_LEVEL_MUNDANE - - //UI related - var/window_x = 700 - var/window_y = 600 - var/report_at_round_end = 0 - var/table_options = " align='center'" - var/row_options1 = " width='85px'" - var/row_options2 = " width='260px'" - var/row_options3 = " width='150px'" - var/datum/event_container/selected_event_container = null - - var/list/datum/event/active_events = list() - var/list/datum/event/finished_events = list() - - var/list/datum/event/all_events - var/list/datum/event_container/event_containers - - var/datum/event_meta/new_event = new - -//Subsystem procs -/datum/controller/subsystem/event/Initialize(start_uptime) - if(!all_events) - all_events = subtypesof(/datum/event) - if(!event_containers) - event_containers = list( - EVENT_LEVEL_MUNDANE = new/datum/event_container/mundane, - EVENT_LEVEL_MODERATE = new/datum/event_container/moderate, - EVENT_LEVEL_MAJOR = new/datum/event_container/major, - EVENT_LEVEL_EXO = new/datum/event_container/exo - ) - - if(GLOB.using_map.use_overmap) - overmap_event_handler.create_events(GLOB.using_map.overmap_z, GLOB.using_map.overmap_size, GLOB.using_map.overmap_event_areas) - GLOB.using_map.setup_events() - for(var/event_level in GLOB.using_map.map_event_container) - var/datum/event_container/receiver = event_containers[text2num(event_level)] - var/datum/event_container/donor = GLOB.using_map.map_event_container[event_level] - receiver.available_events += donor.available_events - -/datum/controller/subsystem/event/Recover() - active_events = SSevent.active_events - finished_events = SSevent.finished_events - all_events = SSevent.all_events - event_containers = SSevent.event_containers - -/datum/controller/subsystem/event/fire(resumed = FALSE) - if (!resumed) - processing_events = active_events.Copy() - pos = EVENT_LEVEL_MUNDANE - - while (processing_events.len) - var/datum/event/E = processing_events[processing_events.len] - processing_events.len-- - - E.process() - - if (MC_TICK_CHECK) - return - - while (pos <= EVENT_LEVEL_EXO) - event_containers[pos].process() - pos++ - - if (MC_TICK_CHECK) - return - - -/datum/controller/subsystem/event/UpdateStat(time) - if (PreventUpdateStat(time)) - return ..() - ..("Active Events: [active_events.len]") - - -//Actual event handling -/datum/controller/subsystem/event/proc/event_complete(var/datum/event/E) - active_events -= E - - if(!E.event_meta || !E.severity) // datum/event is used here and there for random reasons, maintaining "backwards compatibility" - log_debug("Event of '[E.type]' with missing meta-data has completed.") - return - finished_events += E - - // Add the event back to the list of available events - var/datum/event_container/EC = event_containers[E.severity] - var/datum/event_meta/EM = E.event_meta - if(EM.add_to_queue) - EC.available_events += EM - - log_debug("Event '[EM.name]' has completed at [worldtime2stationtime(world.time)].") - -/datum/controller/subsystem/event/proc/delay_events(var/severity, var/delay) - var/datum/event_container/EC = event_containers[severity] - EC.next_event_time += delay - -/datum/controller/subsystem/event/proc/Interact(var/mob/living/user) - - var/html = GetInteractWindow() - - var/datum/browser/popup = new(user, "event_manager", "Event Manager", window_x, window_y) - popup.set_content(html) - popup.open() - -/datum/controller/subsystem/event/proc/RoundEnd() - if(!report_at_round_end) - return - - to_world("


    Random Events This Round:") - for(var/datum/event/E in active_events|finished_events) - var/datum/event_meta/EM = E.event_meta - if(EM.name == "Nothing") - continue - var/message = "'[EM.name]' began at [worldtime2stationtime(E.startedAt)] " - if(E.isRunning) - message += "and is still running." - else - if(E.endedAt - E.startedAt > MinutesToTicks(5)) // Only mention end time if the entire duration was more than 5 minutes - message += "and ended at [worldtime2stationtime(E.endedAt)]." - else - message += "and ran to completion." - - to_world(message) - -//Event manager UI -/datum/controller/subsystem/event/proc/GetInteractWindow() - var/html = "Refresh" - html += "Pause All - [config.allow_random_events ? "Pause" : "Resume"]" - - if(selected_event_container) - var/event_time = max(0, selected_event_container.next_event_time - world.time) - html += "Back
    " - html += "Time till start: [round(event_time / 600, 0.1)]
    " - html += "
    " - html += "

    Available [severity_to_string[selected_event_container.severity]] Events (queued & running events will not be displayed)

    " - html += "" - html += "Name Weight MinWeight MaxWeight OneShot Enabled CurrWeight Remove" - var/list/active_with_role = number_active_with_role() - for(var/datum/event_meta/EM in selected_event_container.available_events) - html += "" - html += "[EM.name]" - html += "[EM.weight]" - html += "[EM.min_weight]" - html += "[EM.max_weight]" - html += "[EM.one_shot]" - html += "[EM.enabled]" - html += "[selected_event_container.get_weight(EM, active_with_role)]" - html += "Remove" - html += "" - html += "" - html += "
    " - - html += "
    " - html += "

    Add Event

    " - html += "" - html += "NameTypeWeightOneShot" - html += "" - html += "[new_event.name ? new_event.name : "Enter Event"]" - html += "[new_event.event_type ? new_event.event_type : "Select Type"]" - html += "[new_event.weight ? new_event.weight : 0]" - html += "[new_event.one_shot]" - html += "" - html += "" - html += "Add
    " - html += "
    " - else - html += "Round End Report: [report_at_round_end ? "On": "Off"]
    " - html += "
    " - html += "

    Event Start

    " - - html += "" - html += "SeverityStarts AtStarts InAdjust StartPauseInterval Mod" - for(var/severity = EVENT_LEVEL_MUNDANE to EVENT_LEVEL_EXO) - var/datum/event_container/EC = event_containers[severity] - var/next_event_at = max(0, EC.next_event_time - world.time) - html += "" - html += "[severity_to_string[severity]]" - html += "[worldtime2stationtime(max(EC.next_event_time, world.time))]" - html += "[round(next_event_at / 600, 0.1)]" - html += "" - html += "--" - html += "-" - html += "+" - html += "++" - html += "" - html += "" - html += "[EC.delayed ? "Resume" : "Pause"]" - html += "" - html += "" - html += "[EC.delay_modifier]" - html += "" - html += "" - html += "" - html += "
    " - - html += "
    " - html += "

    Next Event

    " - html += "" - html += "SeverityNameEvent RotationClear" - for(var/severity = EVENT_LEVEL_MUNDANE to EVENT_LEVEL_EXO) - var/datum/event_container/EC = event_containers[severity] - var/datum/event_meta/EM = EC.next_event - html += "" - html += "[severity_to_string[severity]]" - html += "[EM ? EM.name : "Random"]" - html += "View" - html += "Clear" - html += "" - html += "" - html += "
    " - - html += "
    " - html += "

    Running Events

    " - html += "Estimated times, affected by process scheduler delays." - html += "" - html += "SeverityNameEnds AtEnds InStop" - for(var/datum/event/E in active_events) - if(!E.event_meta) - continue - var/datum/event_meta/EM = E.event_meta - var/ends_at = E.startedAt + (E.lastProcessAt() * 20) // A best estimate, based on how often the alarm manager processes - var/ends_in = max(0, round((ends_at - world.time) / 600, 0.1)) - html += "" - html += "[severity_to_string[EM.severity]]" - html += "[EM.name]" - html += "[worldtime2stationtime(ends_at)]" - html += "[ends_in]" - html += "Stop" - html += "" - html += "" - html += "
    " - - return html - -/datum/controller/subsystem/event/Topic(href, href_list) - if(..()) - return - - if(href_list["toggle_report"]) - report_at_round_end = !report_at_round_end - log_and_message_admins("has [report_at_round_end ? "enabled" : "disabled"] the round end event report.") - else if(href_list["dec_timer"]) - var/datum/event_container/EC = locate(href_list["event"]) - var/decrease = 60 * (10 ** text2num(href_list["dec_timer"])) - EC.next_event_time -= decrease - log_and_message_admins("decreased timer for [severity_to_string[EC.severity]] events by [decrease/600] minute(s).") - else if(href_list["inc_timer"]) - var/datum/event_container/EC = locate(href_list["event"]) - var/increase = 60 * (10 ** text2num(href_list["inc_timer"])) - EC.next_event_time += increase - log_and_message_admins("increased timer for [severity_to_string[EC.severity]] events by [increase/600] minute(s).") - else if(href_list["select_event"]) - var/datum/event_container/EC = locate(href_list["select_event"]) - var/datum/event_meta/EM = EC.SelectEvent() - if(EM) - log_and_message_admins("has queued the [severity_to_string[EC.severity]] event '[EM.name]'.") - else if(href_list["pause"]) - var/datum/event_container/EC = locate(href_list["pause"]) - EC.delayed = !EC.delayed - log_and_message_admins("has [EC.delayed ? "paused" : "resumed"] countdown for [severity_to_string[EC.severity]] events.") - else if(href_list["pause_all"]) - config.allow_random_events = text2num(href_list["pause_all"]) - log_and_message_admins("has [config.allow_random_events ? "resumed" : "paused"] countdown for all events.") - else if(href_list["interval"]) - var/delay = input("Enter delay modifier. A value less than one means events fire more often, higher than one less often.", "Set Interval Modifier") as num|null - if(delay && delay > 0) - var/datum/event_container/EC = locate(href_list["interval"]) - EC.delay_modifier = delay - log_and_message_admins("has set the interval modifier for [severity_to_string[EC.severity]] events to [EC.delay_modifier].") - else if(href_list["stop"]) - if(alert("Stopping an event may have unintended side-effects. Continue?","Stopping Event!","Yes","No") != "Yes") - return - var/datum/event/E = locate(href_list["stop"]) - var/datum/event_meta/EM = E.event_meta - log_and_message_admins("has stopped the [severity_to_string[EM.severity]] event '[EM.name]'.") - E.kill() - else if(href_list["view_events"]) - selected_event_container = locate(href_list["view_events"]) - else if(href_list["back"]) - selected_event_container = null - else if(href_list["set_name"]) - var/name = sanitize(input("Enter event name.", "Set Name") as text|null) - if(name) - var/datum/event_meta/EM = locate(href_list["set_name"]) - EM.name = name - else if(href_list["set_type"]) - var/type = input("Select event type.", "Select") as null|anything in all_events - if(type) - var/datum/event_meta/EM = locate(href_list["set_type"]) - EM.event_type = type - else if(href_list["set_weight"]) - var/weight = input("Enter weight. A higher value means higher chance for the event of being selected.", "Set Weight") as num|null - if(weight && weight > 0) - var/datum/event_meta/EM = locate(href_list["set_weight"]) - EM.weight = weight - if(EM != new_event) - log_and_message_admins("has changed the weight of the [severity_to_string[EM.severity]] event '[EM.name]' to [EM.weight].") - else if(href_list["toggle_oneshot"]) - var/datum/event_meta/EM = locate(href_list["toggle_oneshot"]) - EM.one_shot = !EM.one_shot - if(EM != new_event) - log_and_message_admins("has [EM.one_shot ? "set" : "unset"] the oneshot flag for the [severity_to_string[EM.severity]] event '[EM.name]'.") - else if(href_list["toggle_enabled"]) - var/datum/event_meta/EM = locate(href_list["toggle_enabled"]) - EM.enabled = !EM.enabled - log_and_message_admins("has [EM.enabled ? "enabled" : "disabled"] the [severity_to_string[EM.severity]] event '[EM.name]'.") - else if(href_list["remove"]) - if(alert("This will remove the event from rotation. Continue?","Removing Event!","Yes","No") != "Yes") - return - var/datum/event_meta/EM = locate(href_list["remove"]) - var/datum/event_container/EC = locate(href_list["EC"]) - EC.available_events -= EM - log_and_message_admins("has removed the [severity_to_string[EM.severity]] event '[EM.name]'.") - else if(href_list["add"]) - if(!new_event.name || !new_event.event_type) - return - if(alert("This will add a new event to the rotation. Continue?","Add Event!","Yes","No") != "Yes") - return - new_event.severity = selected_event_container.severity - selected_event_container.available_events += new_event - log_and_message_admins("has added \a [severity_to_string[new_event.severity]] event '[new_event.name]' of type [new_event.event_type] with weight [new_event.weight].") - new_event = new - else if(href_list["clear"]) - var/datum/event_container/EC = locate(href_list["clear"]) - if(EC.next_event) - log_and_message_admins("has dequeued the [severity_to_string[EC.severity]] event '[EC.next_event.name]'.") - EC.available_events += EC.next_event - EC.next_event = null - - Interact(usr) - -//Event admin verbs -/client/proc/forceEvent(var/type in SSevent.all_events) - set name = "Trigger Event (Debug Only)" - set category = "Debug" - - if(!holder) - return - - if(ispath(type)) - new type(new /datum/event_meta(EVENT_LEVEL_MAJOR)) - message_admins("[key_name_admin(usr)] has triggered an event. ([type])", 1) - -/client/proc/event_manager_panel() - set name = "Event Manager Panel" - set category = "Admin" - if(SSevent) - SSevent.Interact(usr) diff --git a/code/controllers/subsystems/fluids.dm b/code/controllers/subsystems/fluids.dm deleted file mode 100644 index 568d04b089868..0000000000000 --- a/code/controllers/subsystems/fluids.dm +++ /dev/null @@ -1,212 +0,0 @@ -SUBSYSTEM_DEF(fluids) - name = "Fluids" - wait = 10 - flags = SS_NO_INIT - - var/next_water_act = 0 - var/water_act_delay = 15 // A bit longer than machines. - - var/list/active_fluids = list() - var/list/water_sources = list() - var/list/pushing_atoms = list() - var/list/hygiene_props = list() - - var/list/processing_sources - var/list/processing_fluids - - var/active_fluids_copied_yet = FALSE - var/af_index = 1 - var/downward_fluid_overlay_position = 1 // Bit of an odd hack, set in fluid spread code to determine which overlay - // in the list is 'down'. More maintainer-friendly than hardcoding it. - var/list/fluid_images = list() - - var/list/gurgles = list( - 'sound/effects/gurgle1.ogg', - 'sound/effects/gurgle2.ogg', - 'sound/effects/gurgle3.ogg', - 'sound/effects/gurgle4.ogg' - ) - - -/datum/controller/subsystem/fluids/UpdateStat(time) - if (PreventUpdateStat(time)) - return ..() - ..("Sources: [water_sources.len] Active Fluids: [active_fluids.len]") - - -/datum/controller/subsystem/fluids/fire(resumed = 0) - if (!resumed) - processing_sources = water_sources.Copy() - active_fluids_copied_yet = FALSE - af_index = 1 - - var/dry_run = FALSE - var/flooded_a_neighbor // Not used, required by FLOOD_TURF_NEIGHBORS. - var/list/curr_sources = processing_sources - while (curr_sources.len) - var/turf/T = curr_sources[curr_sources.len] - curr_sources.len-- - - FLOOD_TURF_NEIGHBORS(T, dry_run) - - if (MC_TICK_CHECK) - return - - if (!active_fluids_copied_yet) - active_fluids_copied_yet = TRUE - processing_fluids = active_fluids.Copy() - - // We need to iterate through this list a few times, so we're using indexes instead of a while-truncate loop. - while (af_index <= processing_fluids.len) - var/obj/effect/fluid/F = processing_fluids[af_index++] - if (QDELETED(F)) - processing_fluids -= F - else - // Spread out and collect neighbors for equalizing later. Hardcoded here for performance reasons. - if(!F.loc || F.loc != F.start_loc || !F.loc.CanFluidPass()) - qdel(F) - continue - - if(F.fluid_amount <= FLUID_EVAPORATION_POINT) - continue - - F.equalizing_fluids = list(F) - - // Flood downwards if there's open space below us. - if(HasBelow(F.z)) - var/turf/current = get_turf(F) - if(istype(current, /turf/simulated/open)) - var/turf/T = GetBelow(F) - var/obj/effect/fluid/other = locate() in T - if((!istype(other) || other.fluid_amount < FLUID_MAX_DEPTH) && T.CanFluidPass(UP)) - if(!other) - other = new /obj/effect/fluid(T) - F.equalizing_fluids += other - downward_fluid_overlay_position = F.equalizing_fluids.len - UPDATE_FLUID_BLOCKED_DIRS(F.start_loc) - for(var/spread_dir in GLOB.cardinal) - if(F.start_loc.fluid_blocked_dirs & spread_dir) - continue - var/turf/T = get_step(F.start_loc, spread_dir) - var/coming_from = GLOB.reverse_dir[spread_dir] - if(!istype(T) || T.flooded) - continue - UPDATE_FLUID_BLOCKED_DIRS(T) - if((T.fluid_blocked_dirs & coming_from) || !T.CanFluidPass(coming_from)) - continue - var/turf/current = get_turf(F) - if((F.fluid_amount + current.height) <= T.height) //Water cannot flow up height differences - continue - var/obj/effect/fluid/other = locate() in T.contents - if(other && (QDELETED(other) || other.fluid_amount <= FLUID_DELETING)) - continue - if(!other) - other = new /obj/effect/fluid(T) - other.temperature = F.temperature - F.equalizing_fluids += other - - if (MC_TICK_CHECK) - return - - af_index = 1 - - while (af_index <= processing_fluids.len) - var/obj/effect/fluid/F = processing_fluids[af_index++] - if (QDELETED(F)) - processing_fluids -= F - else - // Equalize across our neighbors. Hardcoded here for performance reasons. - if(!F.loc || F.loc != F.start_loc || !F.equalizing_fluids || !F.equalizing_fluids.len || F.fluid_amount <= FLUID_EVAPORATION_POINT) - continue - - F.equalize_avg_depth = 0 - F.equalize_avg_temp = 0 - F.flow_amount = 0 - - // Flow downward first, since gravity. TODO: add check for gravity. - if(F.equalizing_fluids.len >= downward_fluid_overlay_position) - var/obj/effect/fluid/downward_fluid = F.equalizing_fluids[downward_fluid_overlay_position] - if(downward_fluid.z == F.z-1) // It's below us. - F.equalizing_fluids -= downward_fluid - var/transfer_amount = min(F.fluid_amount, (FLUID_MAX_DEPTH-downward_fluid.fluid_amount)) - if(transfer_amount > 0) - SET_FLUID_DEPTH(downward_fluid, downward_fluid.fluid_amount + transfer_amount) - LOSE_FLUID(F, transfer_amount) - if(F.fluid_amount <= FLUID_EVAPORATION_POINT) - continue - - var/setting_dir = 0 - - for(var/obj/effect/fluid/other in F.equalizing_fluids) - if(!istype(other) || QDELETED(other) || other.fluid_amount <= FLUID_DELETING) - F.equalizing_fluids -= other - continue - F.equalize_avg_depth += other.fluid_amount - F.equalize_avg_temp += other.temperature - - var/flow_amount = F.fluid_amount - other.fluid_amount - if(F.flow_amount < flow_amount && flow_amount >= FLUID_PUSH_THRESHOLD) - F.flow_amount = flow_amount - setting_dir = get_dir(F, other) - - F.set_dir(setting_dir) - - if(islist(F.equalizing_fluids) && F.equalizing_fluids.len > 1) - F.equalize_avg_depth = Floor(F.equalize_avg_depth/F.equalizing_fluids.len) - F.equalize_avg_temp = Floor(F.equalize_avg_temp/F.equalizing_fluids.len) - for(var/thing in F.equalizing_fluids) - var/obj/effect/fluid/other = thing - if(!QDELETED(other)) - SET_FLUID_DEPTH(other, F.equalize_avg_depth) - other.temperature = F.equalize_avg_temp - F.equalizing_fluids.Cut() - if(istype(F.loc, /turf/space)) - LOSE_FLUID(F, max((FLUID_EVAPORATION_POINT-1),F.fluid_amount * 0.5)) - - if (MC_TICK_CHECK) - return - - af_index = 1 - - while (af_index <= processing_fluids.len) - var/obj/effect/fluid/F = processing_fluids[af_index++] - if (QDELETED(F)) - processing_fluids -= F - else - if (!F.loc || F.loc != F.start_loc) - qdel(F) - - if(F.flow_amount >= 10) - if(prob(1)) - playsound(F.loc, 'sound/effects/slosh.ogg', 25, 1) - for(var/atom/movable/AM in F.loc.contents) - if(isnull(pushing_atoms[AM]) && AM.is_fluid_pushable(F.flow_amount)) - pushing_atoms[AM] = TRUE - step(AM, F.dir) - - if (F.fluid_amount <= FLUID_EVAPORATION_POINT & prob(10)) - LOSE_FLUID(F, rand(1, 3)) - - if (F.fluid_amount <= FLUID_DELETING) - qdel(F) - else - F.update_icon() - - if (MC_TICK_CHECK) - return - - pushing_atoms.Cut() - - // Sometimes, call water_act(). - if(world.time >= next_water_act) - next_water_act = world.time + water_act_delay - af_index = 1 - while (af_index <= processing_fluids.len) - var/obj/effect/fluid/F = processing_fluids[af_index++] - var/turf/T = get_turf(F) - if(istype(T) && !QDELETED(F)) - for(var/atom/movable/A in T.contents) - if(A.simulated && !A.waterproof) - A.water_act(F.fluid_amount) - if (MC_TICK_CHECK) - return diff --git a/code/controllers/subsystems/garbage.dm b/code/controllers/subsystems/garbage.dm deleted file mode 100644 index 1d019ac5fe326..0000000000000 --- a/code/controllers/subsystems/garbage.dm +++ /dev/null @@ -1,497 +0,0 @@ -//Check if an /atom/movable that has been Destroyed has been correctly placed into nullspace and if not, throws a runtime and moves it to nullspace -#define GC_CHECK_AM_NULLSPACE(D, hint) \ - if(istype(D,/atom/movable)) {\ - var/atom/movable/AM = D; \ - if(AM.loc != null) {\ - crash_with("QDEL("+hint+"): "+AM.name+" was supposed to be in nullspace but isn't \ - (LOCATION= "+AM.loc.name+" ("+AM.loc.x+","+AM.loc.y+","+AM.loc.z+") )! Destroy didn't do its job!"); \ - AM.forceMove(null); \ - } \ - } - -SUBSYSTEM_DEF(garbage) - name = "Garbage" - priority = SS_PRIORITY_GARBAGE - wait = 2 SECONDS - flags = SS_POST_FIRE_TIMING | SS_BACKGROUND | SS_NO_INIT | SS_NEEDS_SHUTDOWN - runlevels = RUNLEVELS_DEFAULT | RUNLEVEL_LOBBY - init_order = SS_INIT_GARBAGE - - var/static/list/collection_timeout = list(0, 30 SECONDS, 10 SECONDS) // deciseconds to wait before moving something up in the queue to the next level - - //Stat tracking - var/static/delslasttick = 0 // number of del()'s we've done this tick - var/static/gcedlasttick = 0 // number of things that gc'ed last tick - var/static/totaldels = 0 - var/static/totalgcs = 0 - - var/static/highest_del_time = 0 - var/static/highest_del_tickusage = 0 - - var/static/list/pass_counts - var/static/list/fail_counts - - var/static/list/items = list() // Holds our qdel_item statistics datums - var/static/harddel_halt = FALSE // If true, will avoid harddeleting from the final queue; will still respect HARDDEL_NOW. - - //Queue - var/static/list/queues - - #ifdef TESTING - var/static/list/reference_find_on_fail = list() - #endif - - -/datum/controller/subsystem/garbage/PreInit() - queues = new(GC_QUEUE_COUNT) - pass_counts = new(GC_QUEUE_COUNT) - fail_counts = new(GC_QUEUE_COUNT) - for(var/i in 1 to GC_QUEUE_COUNT) - queues[i] = list() - pass_counts[i] = 0 - fail_counts[i] = 0 - - -/datum/controller/subsystem/garbage/UpdateStat(time) - if (PreventUpdateStat(time)) - return ..() - var/list/build = list() - var/list/counts = list() - for (var/list/L in queues) - counts += length(L) - build += "Q:[counts.Join(",")]|D:[delslasttick]|G:[gcedlasttick]|" - build += "GR:" - if (!(delslasttick+gcedlasttick)) - build += "n/a|" - else - build += "[round((gcedlasttick/(delslasttick+gcedlasttick))*100, 0.01)]%|" - build += "TD:[totaldels]|TG:[totalgcs]|" - if (!(totaldels + totalgcs)) - build += "n/a|" - else - build += "TGR:[round((totalgcs/(totaldels+totalgcs))*100, 0.01)]%" - build += " P:[pass_counts.Join(",")]" - build += "|F:[fail_counts.Join(",")]" - ..(build.Join(null)) - - -/datum/controller/subsystem/garbage/Shutdown() - //Adds the del() log to the qdel log file - var/list/dellog = list() - - //sort by how long it's wasted hard deleting - sortTim(items, cmp=/proc/cmp_qdel_item_time, associative = TRUE) - for(var/path in items) - var/datum/qdel_item/I = items[path] - dellog += "Path: [path]" - if (I.failures) - dellog += "\tFailures: [I.failures]" - dellog += "\tqdel() Count: [I.qdels]" - dellog += "\tDestroy() Cost: [I.destroy_time]ms" - if (I.hard_deletes) - dellog += "\tTotal Hard Deletes [I.hard_deletes]" - dellog += "\tTime Spent Hard Deleting: [I.hard_delete_time]ms" - if (I.slept_destroy) - dellog += "\tSleeps: [I.slept_destroy]" - if (I.no_respect_force) - dellog += "\tIgnored force: [I.no_respect_force] times" - if (I.no_hint) - dellog += "\tNo hint: [I.no_hint] times" - log_qdel(dellog.Join("\n")) - -/datum/controller/subsystem/garbage/fire() - //the fact that this resets its processing each fire (rather then resume where it left off) is intentional. - var/queue = GC_QUEUE_PREQUEUE - - while (state == SS_RUNNING) - switch (queue) - if (GC_QUEUE_PREQUEUE) - HandlePreQueue() - queue = GC_QUEUE_PREQUEUE+1 - if (GC_QUEUE_CHECK) - HandleQueue(GC_QUEUE_CHECK) - queue = GC_QUEUE_CHECK+1 - if (GC_QUEUE_HARDDELETE) - HandleQueue(GC_QUEUE_HARDDELETE) - break - - if (state == SS_PAUSED) //make us wait again before the next run. - state = SS_RUNNING - -//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/proc/HandlePreQueue() - var/list/tobequeued = queues[GC_QUEUE_PREQUEUE] - var/static/count = 0 - if (count) - var/c = count - count = 0 //so if we runtime on the Cut, we don't try again. - tobequeued.Cut(1,c+1) - - for (var/ref in tobequeued) - count++ - Queue(ref, GC_QUEUE_PREQUEUE+1) - if (MC_TICK_CHECK) - break - if (count) - tobequeued.Cut(1,count+1) - count = 0 - -/datum/controller/subsystem/garbage/proc/HandleQueue(level = GC_QUEUE_CHECK) - if (level == GC_QUEUE_CHECK) - delslasttick = 0 - gcedlasttick = 0 - var/cut_off_time = world.time - collection_timeout[level] //ignore entries newer then this - var/list/queue = queues[level] - var/static/lastlevel - var/static/count = 0 - if (count) //runtime last run before we could do this. - var/c = count - count = 0 //so if we runtime on the Cut, we don't try again. - var/list/lastqueue = queues[lastlevel] - lastqueue.Cut(1, c+1) - - lastlevel = level - - for (var/refID in queue) - if (!refID) - count++ - if (MC_TICK_CHECK) - break - continue - - var/GCd_at_time = queue[refID] - if(GCd_at_time > cut_off_time) - break // Everything else is newer, skip them - count++ - - var/datum/D - D = locate(refID) - - if (!D || D.gc_destroyed != GCd_at_time) // So if something else coincidently gets the same ref, it's not deleted by mistake - ++gcedlasttick - ++totalgcs - pass_counts[level]++ - #ifdef TESTING - reference_find_on_fail -= refID //It's deleted we don't care anymore. - #endif - if (MC_TICK_CHECK) - break - continue - - // Something's still referring to the qdel'd object. - switch (level) - if (GC_QUEUE_CHECK) - #ifdef TESTING - if(reference_find_on_fail[refID]) - D.find_references() - #ifdef GC_FAILURE_HARD_LOOKUP - else - D.find_references() - #endif - reference_find_on_fail -= refID - #endif - var/type = D.type - var/datum/qdel_item/I = items[type] - if(!I.failures) - to_world_log("GC: -- \ref[D] | [type] was unable to be GC'd --") - I.failures++ - fail_counts[level]++ - if (GC_QUEUE_HARDDELETE) - if(harddel_halt) - continue - fail_counts[level]++ - HardDelete(D) - if (MC_TICK_CHECK) - break - continue - - Queue(D, level+1) - - if (MC_TICK_CHECK) - break - if (count) - queue.Cut(1,count+1) - count = 0 - -/datum/controller/subsystem/garbage/proc/PreQueue(datum/D) - if (D.gc_destroyed == GC_CURRENTLY_BEING_QDELETED) - queues[GC_QUEUE_PREQUEUE] += D - D.gc_destroyed = GC_QUEUED_FOR_QUEUING - -/datum/controller/subsystem/garbage/proc/Queue(datum/D, level = GC_QUEUE_CHECK) - if (isnull(D)) - return - if (D.gc_destroyed == GC_QUEUED_FOR_HARD_DEL) - level = GC_QUEUE_HARDDELETE - if (level > GC_QUEUE_COUNT) - HardDelete(D) - return - var/gctime = world.time - var/refid = "\ref[D]" - - D.gc_destroyed = gctime - var/list/queue = queues[level] - if (queue[refid]) - queue -= refid // Removing any previous references that were GC'd so that the current object will be at the end of the list. - - queue[refid] = gctime - -//this is mainly to separate things profile wise. -/datum/controller/subsystem/garbage/proc/HardDelete(datum/D) - var/time = world.timeofday - var/tick = world.tick_usage - var/ticktime = world.time - ++delslasttick - ++totaldels - var/type = D.type - var/refID = "\ref[D]" - - if(isclient(D)) - del(D) - - tick = world.tick_usage - tick + ((world.time - ticktime) / world.tick_lag * 100) - - var/datum/qdel_item/I = items[type] - - I.hard_deletes++ - I.hard_delete_time += tick * world.tick_lag - - - if (tick > highest_del_tickusage) - highest_del_tickusage = tick - time = world.timeofday - time - if (!time && tick * world.tick_lag > 1) - time = tick * world.tick_lag * 0.01 - if (time > highest_del_time) - highest_del_time = time - if (time > 10) - log_game("Error: [type]([refID]) took longer than 1 second to delete (took [time/10] seconds to delete)") - message_admins("Error: [type]([refID]) took longer than 1 second to delete (took [time/10] seconds to delete).") - postpone(time) - -/datum/controller/subsystem/garbage/proc/HardQueue(datum/D) - if (D.gc_destroyed == GC_CURRENTLY_BEING_QDELETED) - queues[GC_QUEUE_PREQUEUE] += D - D.gc_destroyed = GC_QUEUED_FOR_HARD_DEL - - -/datum/controller/subsystem/garbage/proc/toggle_harddel_halt(new_state = FALSE) - if(new_state == harddel_halt) - return - harddel_halt = new_state - -/datum/qdel_item - var/name = "" - var/qdels = 0 //Total number of times it's passed thru qdel. - var/destroy_time = 0 //Total amount of milliseconds spent processing this type's Destroy() - var/failures = 0 //Times it was queued for soft deletion but failed to soft delete. - var/hard_deletes = 0 //Different from failures because it also includes QDEL_HINT_HARDDEL deletions - var/hard_delete_time = 0//Total amount of milliseconds spent hard deleting this type. - var/no_respect_force = 0//Number of times it's not respected force=TRUE - var/no_hint = 0 //Number of times it's not even bother to give a qdel hint - var/slept_destroy = 0 //Number of times it's slept in its destroy - -/datum/qdel_item/New(mytype) - name = "[mytype]" - -#ifdef TESTING -/proc/qdel_and_find_ref_if_fail(datum/D, force = FALSE) - SSgarbage.reference_find_on_fail["\ref[D]"] = TRUE - qdel(D, force) -#endif - -// Should be treated as a replacement for the 'del' keyword. -// Datums passed to this will be given a chance to clean up references to allow the GC to collect them. -/proc/qdel(datum/D, force=FALSE, ...) - if(!D) - return - if(!istype(D)) - crash_with("qdel() can only handle /datum (sub)types, was passed: [log_info_line(D)]") - del(D) - return - var/datum/qdel_item/I = SSgarbage.items[D.type] - if (!I) - I = SSgarbage.items[D.type] = new /datum/qdel_item(D.type) - I.qdels++ - - - if(isnull(D.gc_destroyed)) - D.gc_destroyed = GC_CURRENTLY_BEING_QDELETED - var/start_time = world.time - var/start_tick = world.tick_usage - var/hint = D.Destroy(arglist(args.Copy(2))) // Let our friend know they're about to get fucked up. - if(world.time != start_time) - I.slept_destroy++ - else - I.destroy_time += (world.tick_usage - start_tick) * world.tick_lag - if(!D) - return - switch(hint) - if (QDEL_HINT_QUEUE) //qdel should queue the object for deletion. - GC_CHECK_AM_NULLSPACE(D, "QDEL_HINT_QUEUE") - SSgarbage.PreQueue(D) - if (QDEL_HINT_IWILLGC) - D.gc_destroyed = world.time - return - if (QDEL_HINT_LETMELIVE) //qdel should let the object live after calling destory. - if(!force) - D.gc_destroyed = null //clear the gc variable (important!) - return - // Returning LETMELIVE after being told to force destroy - // indicates the objects Destroy() does not respect force - #ifdef TESTING - if(!I.no_respect_force) - crash_with("WARNING: [D.type] has been force deleted, but is \ - returning an immortal QDEL_HINT, indicating it does \ - not respect the force flag for qdel(). It has been \ - placed in the queue, further instances of this type \ - will also be queued.") - #endif - I.no_respect_force++ - - SSgarbage.PreQueue(D) - if (QDEL_HINT_HARDDEL) //qdel should assume this object won't gc, and queue a hard delete using a hard reference to save time from the locate() - GC_CHECK_AM_NULLSPACE(D, "QDEL_HINT_HARDDEL") - SSgarbage.HardQueue(D) - if (QDEL_HINT_HARDDEL_NOW) //qdel should assume this object won't gc, and hard del it post haste. - SSgarbage.HardDelete(D) - if (QDEL_HINT_FINDREFERENCE)//qdel will, if TESTING is enabled, display all references to this object, then queue the object for deletion. - SSgarbage.PreQueue(D) - #ifdef TESTING - D.find_references() - #endif - if (QDEL_HINT_IFFAIL_FINDREFERENCE) - SSgarbage.PreQueue(D) - #ifdef TESTING - SSgarbage.reference_find_on_fail["\ref[D]"] = TRUE - #endif - else - #ifdef TESTING - if(!I.no_hint) - crash_with("WARNING: [D.type] is not returning a qdel hint. It is being placed in the queue. Further instances of this type will also be queued.") - #endif - I.no_hint++ - SSgarbage.PreQueue(D) - else if(D.gc_destroyed == GC_CURRENTLY_BEING_QDELETED) - CRASH("[D.type] destroy proc was called multiple times, likely due to a qdel loop in the Destroy logic") - -#ifdef TESTING - -/datum/verb/find_refs() - set category = "Debug" - set name = "Find References" - set src in world - - find_references(FALSE) - -/datum/proc/find_references(skip_alert) - running_find_references = type - if(usr && usr.client) - if(usr.client.running_find_references) - testing("CANCELLED search for references to a [usr.client.running_find_references].") - usr.client.running_find_references = null - running_find_references = null - //restart the garbage collector - SSgarbage.can_fire = 1 - SSgarbage.next_fire = world.time + world.tick_lag - return - - if(!skip_alert) - if(alert("Running this will lock everything up for about 5 minutes. Would you like to begin the search?", "Find References", "Yes", "No") == "No") - running_find_references = null - return - - //this keeps the garbage collector from failing to collect objects being searched for in here - SSgarbage.can_fire = 0 - - if(usr && usr.client) - usr.client.running_find_references = type - - testing("Beginning search for references to a [type].") - last_find_references = world.time - - DoSearchVar(GLOB) //globals - for(var/datum/thing in world) //atoms (don't believe its lies) - DoSearchVar(thing, "World -> [thing]") - - for (var/datum/thing) //datums - DoSearchVar(thing, "World -> [thing]") - - for (var/client/thing) //clients - DoSearchVar(thing, "World -> [thing]") - - testing("Completed search for references to a [type].") - if(usr && usr.client) - usr.client.running_find_references = null - running_find_references = null - - //restart the garbage collector - SSgarbage.can_fire = 1 - SSgarbage.next_fire = world.time + world.tick_lag - -/datum/verb/qdel_then_find_references() - set category = "Debug" - set name = "qdel() then Find References" - set src in world - - qdel(src, TRUE) //Force. - if(!running_find_references) - find_references(TRUE) - -/datum/verb/qdel_then_if_fail_find_references() - set category = "Debug" - set name = "qdel() then Find References if GC failure" - set src in world - - qdel_and_find_ref_if_fail(src, TRUE) - -//Byond type ids -#define TYPEID_NULL "0" -#define TYPEID_NORMAL_LIST "f" -//helper macros -#define GET_TYPEID(ref) ( ( (length(ref) <= 10) ? "TYPEID_NULL" : copytext_char(ref, 4, length(ref)-6) ) ) -#define IS_NORMAL_LIST(L) (GET_TYPEID("\ref[L]") == TYPEID_NORMAL_LIST) - -/datum/proc/DoSearchVar(X, Xname, recursive_limit = 64) - if(usr && usr.client && !usr.client.running_find_references) - return - if (!recursive_limit) - return - - if(istype(X, /datum)) - var/datum/D = X - if(D.last_find_references == last_find_references) - return - - D.last_find_references = last_find_references - var/list/L = D.vars - - for(var/varname in L) - if (varname == "vars") - continue - var/variable = L[varname] - - if(variable == src) - testing("Found [src.type] \ref[src] in [D.type]'s [varname] var. [Xname]") - - else if(islist(variable)) - DoSearchVar(variable, "[Xname] -> list", recursive_limit-1) - - else if(islist(X)) - var/normal = IS_NORMAL_LIST(X) - for(var/I in X) - if (I == src) - testing("Found [src.type] \ref[src] in list [Xname].") - - else if (I && !isnum(I) && normal && X[I] == src) - testing("Found [src.type] \ref[src] in list [Xname]\[[I]\]") - - else if (islist(I)) - DoSearchVar(I, "[Xname] -> list", recursive_limit-1) - -#ifndef FIND_REF_NO_CHECK_TICK - CHECK_TICK -#endif - -#endif diff --git a/code/controllers/subsystems/ghost_images.dm b/code/controllers/subsystems/ghost_images.dm deleted file mode 100644 index 328aa118ee358..0000000000000 --- a/code/controllers/subsystems/ghost_images.dm +++ /dev/null @@ -1,38 +0,0 @@ -SUBSYSTEM_DEF(ghost_images) - name = "Ghost Images" - flags = SS_NO_INIT - priority = SS_PRIORITY_GHOST_IMAGES - wait = 1 - runlevels = RUNLEVELS_DEFAULT | RUNLEVEL_LOBBY - var/list/queue = list() - var/queue_all = FALSE - - -/datum/controller/subsystem/ghost_images/UpdateStat(time) - if (PreventUpdateStat(time)) - return ..() - ..("Queue: [queue.len]") - - -/datum/controller/subsystem/ghost_images/fire(resumed = 0) - if(!resumed && queue_all) - queue = GLOB.ghost_mob_list.Copy() - queue_all = FALSE - - var/list/curr = queue - while (curr.len) - var/mob/observer/ghost/target = curr[curr.len] - curr.len-- - - if(!QDELETED(target)) - target.updateghostimages() - - if(MC_TICK_CHECK) - return - -/datum/controller/subsystem/ghost_images/proc/queue_image_update(mob/observer/ghost/ghost) - if(!queue_all) - queue |= ghost - -/datum/controller/subsystem/ghost_images/proc/queue_global_image_update() - queue_all = TRUE diff --git a/code/controllers/subsystems/goals.dm b/code/controllers/subsystems/goals.dm deleted file mode 100644 index f9ebe829f05b9..0000000000000 --- a/code/controllers/subsystems/goals.dm +++ /dev/null @@ -1,66 +0,0 @@ -SUBSYSTEM_DEF(goals) - name = "Goals" - init_order = SS_INIT_GOALS - wait = 1 SECOND - var/list/global_personal_goals = list( - /datum/goal/achievement/specific_object/food, - /datum/goal/achievement/specific_object/drink, - /datum/goal/achievement/specific_object/pet, - /datum/goal/achievement/fistfight, - /datum/goal/achievement/graffiti, - /datum/goal/achievement/newshound, - /datum/goal/achievement/givehug, - /datum/goal/achievement/gethug, - /datum/goal/movement/walk, - /datum/goal/movement/walk/eva, - /datum/goal/clean, - /datum/goal/money, - /datum/goal/weights, - /datum/goal/punchingbag - ) - var/list/departments = list() - var/list/ambitions = list() - var/list/pending_goals = list() - -/datum/controller/subsystem/goals/fire(resumed) - for(var/datum/goal/goal in pending_goals) - if(goal.try_initialize()) - pending_goals -= goal - if(!length(pending_goals)) - flags |= SS_NO_FIRE - - -/datum/controller/subsystem/goals/UpdateStat(time) - return - - -/datum/controller/subsystem/goals/Initialize(start_uptime) - var/list/all_depts = subtypesof(/datum/department) - //See if map is very particular about what depts it has - if(LAZYLEN(GLOB.using_map.departments)) - all_depts = GLOB.using_map.departments - for(var/dtype in all_depts) - var/datum/department/dept = dtype - var/dept_flag = initial(dept.flag) - if(dept_flag) - departments["[dept_flag]"] = new dtype - for(var/thing in departments) - var/datum/department/dept = departments[thing] - dept.Initialize() - . = ..() - -/datum/controller/subsystem/goals/proc/update_department_goal(var/department_flag, var/goal_type, var/progress) - var/datum/department/dept = departments["[department_flag]"] - if(dept) - dept.update_progress(goal_type, progress) - -/datum/controller/subsystem/goals/proc/get_roundend_summary() - . = list() - for(var/thing in departments) - var/datum/department/dept = departments[thing] - . += "[dept.name] had the following shift goals:" - . += dept.summarize_goals(show_success = TRUE) - if(LAZYLEN(.)) - . = "
    [jointext(., "
    ")]" - else - . = "
    There were no departmental goals this round." diff --git a/code/controllers/subsystems/graphs.dm b/code/controllers/subsystems/graphs.dm deleted file mode 100644 index 14a036ec40e16..0000000000000 --- a/code/controllers/subsystems/graphs.dm +++ /dev/null @@ -1,41 +0,0 @@ -SUBSYSTEM_DEF(graphs_update) - name = "Graphs (Update)" - priority = SS_PRIORITY_GRAPH - flags = SS_KEEP_TIMING - runlevels = RUNLEVEL_GAME|RUNLEVEL_POSTGAME - wait = 1 - - var/list/pending_graphs - var/list/current_run - -/datum/controller/subsystem/graphs_update/Initialize(start_uptime) - pending_graphs = list() - - -/datum/controller/subsystem/graphs_update/UpdateStat(time) - return - - -/datum/controller/subsystem/graphs_update/proc/Queue(var/datum/graph/graph) - pending_graphs |= graph - wake() - -/datum/controller/subsystem/graphs_update/fire(resumed = 0) - if (!resumed) - src.current_run = pending_graphs.Copy() - pending_graphs.Cut() - - var/list/current_run = src.current_run - while(current_run.len) - var/datum/graph/G = current_run[current_run.len] - current_run.len-- - if(!QDELETED(G)) - G.ProcessPendingConnections() - if (MC_TICK_CHECK) - return - - if(!length(pending_graphs)) - suspend() - -/datum/controller/subsystem/graphs_update/Recover(var/datum/controller/subsystem/graphs_update/GU) - pending_graphs = GU.pending_graphs diff --git a/code/controllers/subsystems/holomap.dm b/code/controllers/subsystems/holomap.dm deleted file mode 100644 index 1b0489b9ec2bc..0000000000000 --- a/code/controllers/subsystems/holomap.dm +++ /dev/null @@ -1,133 +0,0 @@ -// Minimap generation system adapted from vorestation, adapted from /vg/. -// Seems to be much simpler/saner than /vg/'s implementation. - -// Turfs that will be colored as HOLOMAP_ROCK -#define IS_ROCK(tile) (istype(tile, /turf/simulated/mineral) || istype(tile, /turf/simulated/floor/asteroid)) - -// Turfs that will be colored as HOLOMAP_OBSTACLE -#define IS_OBSTACLE(tile) (istype(tile, /turf/simulated/wall) \ - || istype(tile, /turf/unsimulated/mineral) \ - || (istype(tile, /turf/unsimulated/wall)) \ - || (locate(/obj/structure/grille) in tile)) - -// Turfs that will be colored as HOLOMAP_PATH -#define IS_PATH(tile) ((istype(tile, /turf/simulated/floor) && !istype(tile, /turf/simulated/floor/asteroid)) \ - || istype(tile, /turf/unsimulated/floor) || (locate(/obj/structure/catwalk) in tile)) - -//The structure holding a given map -/datum/holomapdata - var/icon/holomap_base - var/list/icon/holomap_areas = list() - var/icon/holomap_combined - var/icon/holomap_areas_combined - var/icon/holomap_small - -SUBSYSTEM_DEF(minimap) - name = "Holomap" - flags = SS_NO_FIRE - init_order = SS_INIT_HOLOMAP - - var/list/datum/holomapdata/holomaps = list() - var/list/station_holomaps = list() - -/datum/controller/subsystem/minimap/Initialize(start_uptime) - holomaps.len = world.maxz - for (var/z = 1 to world.maxz) - generateHolomap(z) - - //Update machinery if it has not been - for(var/obj/machinery/ship_map/M in station_holomaps) - if(istype(M) && !QDELETED(M)) - M.update_map_data() - - -/datum/controller/subsystem/minimap/proc/generateHolomap(zlevel) - var/datum/holomapdata/data = new() - data.holomap_base = generateBaseHolomap(zlevel) - data.holomap_areas = generateHolomapAreaOverlays(zlevel) - - var/icon/combinedareas = icon(HOLOMAP_ICON, "blank") - - for(var/area/A in data.holomap_areas) - var/icon/single = data.holomap_areas[A] - if(A.holomap_color) - single.Blend(A.holomap_color, ICON_MULTIPLY) - combinedareas.Blend(single, ICON_OVERLAY) - - data.holomap_areas_combined = combinedareas - - var/icon/map_base = icon(data.holomap_base) - - // Generate the full sized map by blending the base and areas onto the backdrop - var/icon/big_map = icon(HOLOMAP_ICON, "stationmap") - big_map.Blend(map_base, ICON_OVERLAY) - big_map.Blend(combinedareas, ICON_OVERLAY) - data.holomap_combined = big_map - - // Generate the "small" map - var/icon/small_map = icon(HOLOMAP_ICON, "blank") - //Make it green. - small_map.Blend(map_base, ICON_OVERLAY) - small_map.Blend(HOLOMAP_HOLOFIER, ICON_MULTIPLY) - small_map.Blend(combinedareas, ICON_OVERLAY) - small_map.Scale(WORLD_ICON_SIZE, WORLD_ICON_SIZE) - - // And rotate it in every direction of course! - var/icon/actual_small_map = icon(small_map) - actual_small_map.Insert(new_icon = small_map, dir = SOUTH) - actual_small_map.Insert(new_icon = turn(small_map, 90), dir = WEST) - actual_small_map.Insert(new_icon = turn(small_map, 180), dir = NORTH) - actual_small_map.Insert(new_icon = turn(small_map, 270), dir = EAST) - data.holomap_small = actual_small_map - - holomaps[zlevel] = data - -// Generates the "base" holomap for one z-level, showing only the physical structure of walls and paths. -/datum/controller/subsystem/minimap/proc/generateBaseHolomap(zlevel = 1) - // Save these values now to avoid a bazillion array lookups - var/offset_x = HOLOMAP_PIXEL_OFFSET_X - var/offset_y = HOLOMAP_PIXEL_OFFSET_Y - - // Sanity checks - Better to generate a helpful error message now than have DrawBox() runtime - var/icon/canvas = icon(HOLOMAP_ICON, "blank") - if(world.maxx + offset_x > canvas.Width()) - crash_with("Minimap for z=[zlevel] : world.maxx ([world.maxx]) + holomap_offset_x ([offset_x]) must be <= [canvas.Width()]") - if(world.maxy + offset_y > canvas.Height()) - crash_with("Minimap for z=[zlevel] : world.maxy ([world.maxy]) + holomap_offset_y ([offset_y]) must be <= [canvas.Height()]") - - for(var/x = 1 to world.maxx) - for(var/y = 1 to world.maxy) - var/turf/tile = locate(x, y, zlevel) - var/area/A - if(tile) - A = tile.loc - if (A.area_flags & AREA_FLAG_HIDE_FROM_HOLOMAP) - continue - if(IS_ROCK(tile)) - continue - if(IS_OBSTACLE(tile)) - canvas.DrawBox(HOLOMAP_OBSTACLE, x + offset_x, y + offset_y) - else if(IS_PATH(tile)) - canvas.DrawBox(HOLOMAP_PATH, x + offset_x, y + offset_y) - - CHECK_TICK - return canvas - - -// Generate overlays based on areas -/datum/controller/subsystem/minimap/proc/generateHolomapAreaOverlays(zlevel) - var/list/icon/areas = list() - - var/offset_x = HOLOMAP_PIXEL_OFFSET_X - var/offset_y = HOLOMAP_PIXEL_OFFSET_Y - - for(var/x = 1 to world.maxx) - for(var/y = 1 to world.maxy) - var/turf/tile = locate(x, y, zlevel) - if(tile && tile.loc) - var/area/areaToPaint = tile.loc - if(areaToPaint.holomap_color) - if(!areas[areaToPaint]) - areas[areaToPaint] = icon(HOLOMAP_ICON, "blank") - areas[areaToPaint].DrawBox(HOLOMAP_AREACOLOR_BASE, x + offset_x, y + offset_y) //We draw white because we want a generic version to use later. However if there is no colour we ignore it - return areas diff --git a/code/controllers/subsystems/inactivity.dm b/code/controllers/subsystems/inactivity.dm deleted file mode 100644 index 12dc0ddee7a64..0000000000000 --- a/code/controllers/subsystems/inactivity.dm +++ /dev/null @@ -1,42 +0,0 @@ -SUBSYSTEM_DEF(inactivity) - name = "Inactivity" - wait = 1 MINUTE - priority = SS_PRIORITY_INACTIVITY - flags = SS_BACKGROUND - var/static/list/current = list() - - -/datum/controller/subsystem/inactivity/Destroy() - current.Cut() - ..() - - -/datum/controller/subsystem/inactivity/Initialize(start_uptime) - if (!config.kick_inactive) - suspend() - - -/datum/controller/subsystem/inactivity/Recover() - current.Cut() - - -/datum/controller/subsystem/inactivity/UpdateStat(time) - return - - -/datum/controller/subsystem/inactivity/fire(resumed, no_mc_tick) - if (!resumed) - current = GLOB.clients.Copy() - var/client/client - var/kick_time = config.kick_inactive MINUTES - for (var/i = current.len to 1 step -1) - client = current[i] - if (QDELETED(client)) - continue - if (client.inactivity > kick_time && !client.holder) - log_access("AFK: [key_name(client)]") - to_chat_immediate(SPAN_WARNING("You were inactive for [config.kick_inactive] minutes and have been disconnected.")) - qdel(client) - if (MC_TICK_CHECK) - current.Cut(i) - return diff --git a/code/controllers/subsystems/initialization/character_setup.dm b/code/controllers/subsystems/initialization/character_setup.dm deleted file mode 100644 index 93f148285cb4f..0000000000000 --- a/code/controllers/subsystems/initialization/character_setup.dm +++ /dev/null @@ -1,43 +0,0 @@ -SUBSYSTEM_DEF(character_setup) - name = "Character Setup" - init_order = SS_INIT_CHAR_SETUP - priority = SS_PRIORITY_CHAR_SETUP - flags = SS_BACKGROUND - wait = 1 SECOND - runlevels = RUNLEVEL_LOBBY | RUNLEVELS_DEFAULT - - var/list/prefs_awaiting_setup = list() - var/list/preferences_datums = list() - var/list/newplayers_requiring_init = list() - - var/list/save_queue = list() - - -/datum/controller/subsystem/character_setup/UpdateStat(time) - return - - -/datum/controller/subsystem/character_setup/Initialize(start_uptime) - while(prefs_awaiting_setup.len) - var/datum/preferences/prefs = prefs_awaiting_setup[prefs_awaiting_setup.len] - prefs_awaiting_setup.len-- - prefs.setup() - while(newplayers_requiring_init.len) - var/mob/new_player/new_player = newplayers_requiring_init[newplayers_requiring_init.len] - newplayers_requiring_init.len-- - new_player.deferred_login() - - -/datum/controller/subsystem/character_setup/fire(resumed = FALSE) - while(save_queue.len) - var/datum/preferences/prefs = save_queue[save_queue.len] - save_queue.len-- - - if(!QDELETED(prefs)) - prefs.save_preferences() - - if(MC_TICK_CHECK) - return - -/datum/controller/subsystem/character_setup/proc/queue_preferences_save(var/datum/preferences/prefs) - save_queue |= prefs diff --git a/code/controllers/subsystems/initialization/codex.dm b/code/controllers/subsystems/initialization/codex.dm deleted file mode 100644 index 92137d18cac27..0000000000000 --- a/code/controllers/subsystems/initialization/codex.dm +++ /dev/null @@ -1,129 +0,0 @@ -SUBSYSTEM_DEF(codex) - name = "Codex" - flags = SS_NO_FIRE - init_order = SS_INIT_MISC_CODEX - var/regex/linkRegex - - var/list/entries_by_path = list() - var/list/entries_by_string = list() - var/list/index_file = list() - var/list/search_cache = list() - - -/datum/controller/subsystem/codex/UpdateStat(time) - return - - -/datum/controller/subsystem/codex/Initialize(start_uptime) - // Codex link syntax is such: - // keyword when keyword is mentioned verbatim, - // whatever when shit gets tricky - linkRegex = regex(@"<(span|l)(\s+codexlink='([^>]*)'|)>([^<]+)","g") - - // Create general hardcoded entries. - for(var/ctype in typesof(/datum/codex_entry)) - var/datum/codex_entry/centry = ctype - if(initial(centry.display_name) || initial(centry.associated_paths) || initial(centry.associated_strings)) - centry = new centry() - for(var/associated_path in centry.associated_paths) - entries_by_path[associated_path] = centry - for(var/associated_string in centry.associated_strings) - add_entry_by_string(associated_string, centry) - if(centry.display_name) - add_entry_by_string(centry.display_name, centry) - centry.update_links() - - // Create categorized entries. - for(var/ctype in subtypesof(/datum/codex_category)) - var/datum/codex_category/cat = new ctype - cat.Initialize() - qdel(cat) - - // Create the index file for later use. - for(var/thing in SScodex.entries_by_path) - var/datum/codex_entry/entry = SScodex.entries_by_path[thing] - index_file[entry.display_name] = entry - for(var/thing in SScodex.entries_by_string) - var/datum/codex_entry/entry = SScodex.entries_by_string[thing] - index_file[entry.display_name] = entry - index_file = sortAssoc(index_file) - - -/datum/controller/subsystem/codex/proc/parse_links(string, viewer) - while(linkRegex.Find_char(string)) - var/key = linkRegex.group[4] - if(linkRegex.group[2]) - key = linkRegex.group[3] - key = lowertext(trim(key)) - var/datum/codex_entry/linked_entry = get_entry_by_string(key) - var/replacement = linkRegex.group[4] - if(linked_entry) - replacement = "[replacement]" - string = replacetextEx_char(string, linkRegex.match, replacement) - return string - -/datum/controller/subsystem/codex/proc/get_codex_entry(var/entry) - if(istype(entry, /atom)) - var/atom/entity = entry - if(entity.get_specific_codex_entry()) - return entity.get_specific_codex_entry() - return get_entry_by_string(entity.name) || entries_by_path[entity.type] - else if(entries_by_path[entry]) - return entries_by_path[entry] - else if(entries_by_string[lowertext(entry)]) - return entries_by_string[lowertext(entry)] - -/datum/controller/subsystem/codex/proc/add_entry_by_string(var/string, var/entry) - entries_by_string[lowertext(trim(string))] = entry - -/datum/controller/subsystem/codex/proc/get_entry_by_string(var/string) - return entries_by_string[lowertext(trim(string))] - -/datum/controller/subsystem/codex/proc/present_codex_entry(var/mob/presenting_to, var/datum/codex_entry/entry) - if(entry && istype(presenting_to) && presenting_to.client) - var/datum/browser/popup = new(presenting_to, "codex", "Codex", nheight=425) - popup.set_content(parse_links(entry.get_text(presenting_to), presenting_to)) - popup.open() - -/datum/controller/subsystem/codex/proc/retrieve_entries_for_string(var/searching) - - if(!initialized) - return list() - - searching = sanitize(lowertext(trim(searching))) - if(!searching) - return list() - if(!search_cache[searching]) - var/list/results - if(entries_by_string[searching]) - results = list(entries_by_string[searching]) - else - results = list() - for(var/entry_title in entries_by_string) - var/datum/codex_entry/entry = entries_by_string[entry_title] - if(findtext(entry.display_name, searching) || \ - findtext(entry.lore_text, searching) || \ - findtext(entry.mechanics_text, searching) || \ - findtext(entry.antag_text, searching)) - results |= entry - search_cache[searching] = dd_sortedObjectList(results) - return search_cache[searching] - -/datum/controller/subsystem/codex/Topic(href, href_list) - . = ..() - if(!. && href_list["show_examined_info"] && href_list["show_to"]) - var/mob/showing_mob = locate(href_list["show_to"]) - if(!istype(showing_mob) || !showing_mob.can_use_codex()) - return - var/atom/showing_atom = locate(href_list["show_examined_info"]) - var/entry - if(istype(showing_atom, /datum/codex_entry)) - entry = showing_atom - else - if(istype(showing_atom)) - entry = get_codex_entry(showing_atom.get_codex_value()) - else - entry = get_codex_entry(showing_atom) - if(entry) - present_codex_entry(showing_mob, entry) - return TRUE diff --git a/code/controllers/subsystems/initialization/culture.dm b/code/controllers/subsystems/initialization/culture.dm deleted file mode 100644 index 7a4d366d3ecf3..0000000000000 --- a/code/controllers/subsystems/initialization/culture.dm +++ /dev/null @@ -1,37 +0,0 @@ -SUBSYSTEM_DEF(culture) - name = "Culture" - init_order = SS_INIT_CULTURE - flags = SS_NO_FIRE - - var/list/cultural_info_by_name = list() - var/list/cultural_info_by_path = list() - var/list/tagged_info = list() - - -/datum/controller/subsystem/culture/UpdateStat(time) - return - - -/datum/controller/subsystem/culture/proc/get_all_entries_tagged_with(var/token) - return tagged_info[token] - -/datum/controller/subsystem/culture/Initialize(start_uptime) - - for(var/ftype in subtypesof(/decl/cultural_info)) - var/decl/cultural_info/culture = ftype - if(!initial(culture.name)) - continue - culture = new culture - if(cultural_info_by_name[culture.name]) - crash_with("Duplicate cultural datum ID - [culture.name] - [ftype]") - cultural_info_by_name[culture.name] = culture - cultural_info_by_path[ftype] = culture - if(culture.category && !culture.hidden) - if(!tagged_info[culture.category]) - tagged_info[culture.category] = list() - var/list/tag_list = tagged_info[culture.category] - tag_list[culture.name] = culture - - -/datum/controller/subsystem/culture/proc/get_culture(var/culture_ident) - return cultural_info_by_name[culture_ident] ? cultural_info_by_name[culture_ident] : cultural_info_by_path[culture_ident] diff --git a/code/controllers/subsystems/initialization/customitems.dm b/code/controllers/subsystems/initialization/customitems.dm deleted file mode 100644 index 21b6299a96eda..0000000000000 --- a/code/controllers/subsystems/initialization/customitems.dm +++ /dev/null @@ -1,132 +0,0 @@ -SUBSYSTEM_DEF(customitems) - name = "Custom Items" - flags = SS_NO_FIRE - init_order = SS_INIT_MISC_LATE - - var/list/custom_items_by_ckey = list() - var/list/item_states = list() - var/list/mob_states = list() - - -/datum/controller/subsystem/customitems/UpdateStat(time) - return - - -/datum/controller/subsystem/customitems/Initialize(start_uptime) - - item_states = icon_states(CUSTOM_ITEM_OBJ) - mob_states = icon_states(CUSTOM_ITEM_MOB) - - if(!fexists(CUSTOM_ITEM_CONFIG)) - report_progress("Custom item directory [CUSTOM_ITEM_CONFIG] does not exist, no custom items will be loaded.") - return - - var/dir_count = -1 - var/item_count = 0 - var/list/directories_to_check = list(CUSTOM_ITEM_CONFIG) - while(length(directories_to_check)) - var/checkdir = directories_to_check[1] - directories_to_check -= checkdir - if(checkdir == "[CUSTOM_ITEM_CONFIG]examples/") - continue - for(var/checkfile in flist(checkdir)) - checkfile = "[checkdir][checkfile]" - if(copytext_char(checkfile, -1) == "/") - directories_to_check += checkfile - dir_count++ - else if(copytext_char(checkfile, -5) == ".json") - try - var/datum/custom_item/citem = new(json_decode(file2text(checkfile))) - var/result = citem.validate() - if(result) - crash_with("Invalid custom item [checkfile]: [result]") - else - LAZYDISTINCTADD(custom_items_by_ckey[citem.ckey], citem) - item_count++ - catch(var/exception/e) - crash_with("Exception loading custom item [checkfile]: [e] on [e.file]:[e.line]") - - report_progress("Loaded [item_count] custom item\s from [dir_count] director[dir_count == 1 ? "y" : "ies"].") - - -// Places the item on the target mob. -/datum/controller/subsystem/customitems/proc/place_custom_item(mob/living/carbon/human/M, var/datum/custom_item/citem) - . = M && citem && citem.spawn_item(get_turf(M)) - if(. && !M.equip_to_appropriate_slot(.) && !M.equip_to_storage(.)) - to_chat(M, SPAN_WARNING("Your custom item, \the [.], could not be placed on your character.")) - // QDEL_NULL(.) - -//gets the relevant list for the key from the listlist if it exists, check to make sure they are meant to have it and then calls the giving function -/datum/controller/subsystem/customitems/proc/equip_custom_items(mob/living/carbon/human/M) - var/list/key_list = custom_items_by_ckey[M.ckey] - if(!length(key_list)) - return - for(var/datum/custom_item/citem in key_list) - // Check for requisite ckey and character name. - if(citem.ckey != M.ckey || lowertext(citem.character_name) != lowertext(M.real_name)) - continue - // Check for required access. - var/obj/item/card/id/current_id = M.wear_id - if(length(citem.req_access) && (!istype(current_id) || !has_access(citem.req_access, current_id.access))) - continue - // Check for required job title. - if(length(citem.req_titles)) - var/check_title = M.mind.role_alt_title || M.mind.assigned_role - if(!(check_title in citem.req_titles)) - continue - - // Spawn and equip the item. - if(ispath(citem.apply_to_target_type)) - var/obj/item/existing_item = (locate(citem.apply_to_target_type) in M.get_contents()) - if(existing_item) - citem.apply_to_item(existing_item) - return - place_custom_item(M,citem) - -/datum/custom_item - var/ckey - var/character_name - var/item_icon_state - var/item_desc - var/item_name - var/item_path - var/apply_to_target_type - var/list/req_access - var/list/req_titles - var/list/additional_data - -/datum/custom_item/New(var/list/data) - ckey = ckey(data["ckey"]) - character_name = lowertext(data["character_name"]) - item_name = data["item_name"] - item_desc = data["item_desc"] - item_icon_state = data["item_icon_state"] - item_path = text2path(data["item_path"]) - req_access = data["req_access"] || list() - req_titles = data["req_titles"] || list() - additional_data = data["additional_data"] || list() - apply_to_target_type = text2path(data["apply_to_target_type"]) || data["apply_to_target_type"] - -/datum/custom_item/proc/validate() - if(!ispath(item_path, /obj/item)) - return SPAN_WARNING("The given item path is invalid or does not exist.") - if(apply_to_target_type && !ispath(apply_to_target_type, /obj/item)) - return SPAN_WARNING("The target item path is invalid or does not exist.") - else if(item_icon_state) - if(ispath(item_path, /obj/item/device/kit/suit)) - for(var/state in list("[item_icon_state]_suit", "[item_icon_state]_helmet")) - if(!(state in SScustomitems.item_states)) - return SPAN_WARNING("The given item icon [state] does not exist.") - if(!(state in SScustomitems.mob_states)) - return SPAN_WARNING("The given mob icon [state] does not exist.") - else - for(var/state in list(item_icon_state)) - if(!(state in SScustomitems.item_states)) - return SPAN_WARNING("The given item icon [state] does not exist.") - -/datum/custom_item/proc/spawn_item(var/newloc) - . = new item_path(newloc) - apply_to_item(.) - -/datum/custom_item/proc/apply_to_item(var/obj/item/item) - . = item.inherit_custom_item_data(src) diff --git a/code/controllers/subsystems/initialization/fabrication.dm b/code/controllers/subsystems/initialization/fabrication.dm deleted file mode 100644 index 5c237cd54b99c..0000000000000 --- a/code/controllers/subsystems/initialization/fabrication.dm +++ /dev/null @@ -1,66 +0,0 @@ -SUBSYSTEM_DEF(fabrication) - name = "Fabrication" - flags = SS_NO_FIRE - init_order = SS_INIT_MISC_LATE - - var/static/list/recipes = list() - var/static/list/categories = list() - var/static/list/stages_by_type = list() - - -/datum/controller/subsystem/fabrication/UpdateStat(time) - return - - -/datum/controller/subsystem/fabrication/Initialize(start_uptime) - for (var/datum/fabricator_recipe/recipe as anything in subtypesof(/datum/fabricator_recipe)) - recipe = new recipe - if (!recipe.name) - continue - for (var/type in recipe.fabricator_types) - if (!recipes[type]) - recipes[type] = list() - recipes[type] += recipe - if (!categories[type]) - categories[type] = list() - categories[type] |= recipe.category - var/list/stages = decls_repository.get_decls_of_subtype(/decl/crafting_stage) - for (var/id in stages) - var/decl/crafting_stage/stage = stages[id] - var/type = stage.begins_with_object_type - if (!ispath(type)) - continue - if (!stages_by_type[type]) - stages_by_type[type] = list() - stages_by_type[type] |= stage - - -/datum/controller/subsystem/fabrication/proc/get_categories(type) - return categories[type] - - -/datum/controller/subsystem/fabrication/proc/get_recipes(type) - return recipes[type] - - -/datum/controller/subsystem/fabrication/proc/find_crafting_recipes(type) - if (isnull(stages_by_type[type])) - stages_by_type[type] = FALSE - for (var/match in stages_by_type) - if (ispath(type, match)) - stages_by_type[type] = stages_by_type[match] - break - return stages_by_type[type] - - -/datum/controller/subsystem/fabrication/proc/try_craft_with(obj/item/target, obj/item/tool, mob/user) - var/turf/turf = get_turf(target) - if (!turf) - return - var/list/stages = SSfabrication.find_crafting_recipes(target.type) - for (var/decl/crafting_stage/stage in stages) - if (stage.can_begin_with(target) && stage.is_appropriate_tool(tool)) - var/obj/item/crafting_holder/crafting = new (turf, stage, target, tool, user) - if (stage.progress_to(tool, user, crafting)) - return crafting - qdel(crafting) diff --git a/code/controllers/subsystems/initialization/materials.dm b/code/controllers/subsystems/initialization/materials.dm deleted file mode 100644 index 40191195da529..0000000000000 --- a/code/controllers/subsystems/initialization/materials.dm +++ /dev/null @@ -1,57 +0,0 @@ -SUBSYSTEM_DEF(materials) - name = "Materials" - init_order = SS_INIT_MATERIALS - flags = SS_NO_FIRE - - var/list/materials - var/list/materials_by_name - var/list/alloy_components - var/list/alloy_products - var/list/processable_ores - - -/datum/controller/subsystem/materials/UpdateStat(time) - return - - -/datum/controller/subsystem/materials/Initialize(start_uptime) - build_material_lists() - - -/datum/controller/subsystem/materials/proc/build_material_lists() - - if(LAZYLEN(materials)) - return - - materials = list() - materials_by_name = list() - alloy_components = list() - alloy_products = list() - processable_ores = list() - - for(var/type in subtypesof(/material)) - var/material/new_mineral = new type - if(new_mineral.name) - materials += new_mineral - materials_by_name[lowertext(new_mineral.name)] = new_mineral - if(new_mineral.ore_smelts_to || new_mineral.ore_compresses_to) - processable_ores[new_mineral.name] = TRUE - if(new_mineral.alloy_product && LAZYLEN(new_mineral.alloy_materials)) - alloy_products[new_mineral] = TRUE - for(var/component in new_mineral.alloy_materials) - processable_ores[component] = TRUE - alloy_components[component] = TRUE - - -/datum/controller/subsystem/materials/proc/get_material_by_name(name) - if(!materials_by_name) - build_material_lists() - . = materials_by_name[name] - if(!.) - log_error("Unable to acquire material by name '[name]'") - -/proc/material_display_name(name) - var/material/material = SSmaterials.get_material_by_name(name) - if(material) - return material.display_name - return null diff --git a/code/controllers/subsystems/initialization/misc.dm b/code/controllers/subsystems/initialization/misc.dm deleted file mode 100644 index 281886f4bfb8c..0000000000000 --- a/code/controllers/subsystems/initialization/misc.dm +++ /dev/null @@ -1,30 +0,0 @@ -SUBSYSTEM_DEF(init_misc) - name = "Misc Initialization" - init_order = SS_INIT_MISC - flags = SS_NO_FIRE - - -/datum/controller/subsystem/init_misc/UpdateStat(time) - if (initialized) - return - ..() - - -/datum/controller/subsystem/init_misc/Initialize(start_uptime) - GLOB.changelog_hash = md5('html/changelog.html') - if(config.generate_map) - GLOB.using_map.perform_map_generation() - init_antags() - initialize_pipe_datum_category_list() - populate_robolimb_list() - setupgenetics() - transfer_controller = new - - -/datum/controller/subsystem/init_misc/proc/init_antags() - for (var/antag_type in GLOB.all_antag_types_) - var/datum/antagonist/antag = GLOB.all_antag_types_[antag_type] - antag.Initialize() - - -GLOBAL_VAR(changelog_hash) diff --git a/code/controllers/subsystems/initialization/misc_early.dm b/code/controllers/subsystems/initialization/misc_early.dm deleted file mode 100644 index bdea74e08206c..0000000000000 --- a/code/controllers/subsystems/initialization/misc_early.dm +++ /dev/null @@ -1,10 +0,0 @@ -SUBSYSTEM_DEF(init_misc_early) - name = "Misc Initialization (Early)" - init_order = SS_INIT_EARLY - flags = SS_NO_FIRE - - -/datum/controller/subsystem/init_misc_early/UpdateStat(time) - if (initialized) - return - ..() diff --git a/code/controllers/subsystems/initialization/misc_late.dm b/code/controllers/subsystems/initialization/misc_late.dm deleted file mode 100644 index af117ec241b03..0000000000000 --- a/code/controllers/subsystems/initialization/misc_late.dm +++ /dev/null @@ -1,129 +0,0 @@ -SUBSYSTEM_DEF(init_misc_late) - name = "Misc Initialization (Late)" - init_order = SS_INIT_MISC_LATE - flags = SS_NO_FIRE - - -/datum/controller/subsystem/init_misc_late/UpdateStat(time) - if (initialized) - return - ..() - - -/datum/controller/subsystem/init_misc_late/Initialize(start_uptime) - GLOB.using_map.build_away_sites() - GLOB.using_map.build_exoplanets() - var/decl/asset_cache/asset_cache = decls_repository.get_decl(/decl/asset_cache) - asset_cache.load() - init_recipes() - init_xenoarch() - - -GLOBAL_VAR_INIT(microwave_maximum_item_storage, 0) -GLOBAL_LIST_EMPTY(microwave_recipes) -GLOBAL_LIST_EMPTY(microwave_accepts_reagents) -GLOBAL_LIST_EMPTY(microwave_accepts_items) - -/datum/controller/subsystem/init_misc_late/proc/init_recipes() - var/list/reagents = list() - var/list/items = list( - /obj/item/holder = TRUE, - /obj/item/reagent_containers/food/snacks/grown = TRUE - ) - for (var/datum/recipe/recipe as anything in subtypesof(/datum/recipe)) - recipe = new recipe - GLOB.microwave_recipes += recipe - for (var/type in recipe.reagents) - reagents[type] = TRUE - for (var/type in recipe.items) - items[type] = TRUE - GLOB.microwave_maximum_item_storage = max(GLOB.microwave_maximum_item_storage, length(recipe.items)) - for (var/type in reagents) - GLOB.microwave_accepts_reagents += type - for (var/type in items) - GLOB.microwave_accepts_items += type - - -GLOBAL_LIST(xeno_artifact_turfs) -GLOBAL_LIST(xeno_digsite_turfs) - -/datum/controller/subsystem/init_misc_late/proc/init_xenoarch() - var/list/queue = list() - var/list/site_turfs = list() - var/list/artifact_turfs = list() - var/datum/map/map = GLOB.using_map - if (!map) - GLOB.xeno_artifact_turfs = list() - GLOB.xeno_digsite_turfs = list() - return - var/list/banned_levels = map.admin_levels + map.escape_levels - for (var/turf/simulated/mineral/M in world) - if (!M.density) - continue - if (M.z in banned_levels) - continue - if (!M.geologic_data) - M.geologic_data = new (M) - if (!prob(0.5)) - continue - var/has_space = TRUE - for (var/turf/T as anything in site_turfs) - if (T.z != M.z) - continue - if (abs(T.x - M.x) > 3) - continue - if (abs(T.y - M.y) > 3) - continue - has_space = FALSE - break - if (!has_space) - continue - site_turfs += M - queue.Cut() - queue += M - for (var/turf/simulated/mineral/T in orange(2, M)) - if (!T.density) - continue - if (T.finds) - continue - queue += T - var/site_turf_count = rand(4, 12) - if (site_turf_count < queue.len) - for (var/i = queue.len - site_turf_count to 1 step -1) - var/selected = rand(1, queue.len) - queue.Cut(selected, selected + 1) - var/site_type = get_random_digsite_type() - for (var/turf/simulated/mineral/T as anything in queue) - if (!T.finds) - var/list/finds = list() - if (prob(50)) - finds += new /datum/find (site_type, rand(10, 190)) - else if (prob(75)) - finds += new /datum/find (site_type, rand(10, 90)) - finds += new /datum/find (site_type, rand(110, 190)) - else - finds += new /datum/find (site_type, rand(10, 50)) - finds += new /datum/find (site_type, rand(60, 140)) - finds += new /datum/find (site_type, rand(150, 190)) - var/datum/find/F = finds[1] - if (F.excavation_required <= F.view_range) - T.archaeo_overlay = "overlay_archaeo[rand(1, 3)]" - T.update_icon() - T.finds = finds - if (site_type == DIGSITE_GARDEN) - continue - if (site_type == DIGSITE_ANIMAL) - continue - artifact_turfs += T - CHECK_TICK - GLOB.xeno_digsite_turfs = site_turfs - GLOB.xeno_artifact_turfs = list() - for (var/i = rand(6, 12) to 1 step -1) - var/len = artifact_turfs.len - if (len < 1) - break - var/selected = rand(1, len) - var/turf/simulated/mineral/T = artifact_turfs[selected] - artifact_turfs.Cut(selected, selected + 1) - GLOB.xeno_artifact_turfs += T - T.artifact_find = new diff --git a/code/controllers/subsystems/initialization/persistence.dm b/code/controllers/subsystems/initialization/persistence.dm deleted file mode 100644 index 00c371f4965c9..0000000000000 --- a/code/controllers/subsystems/initialization/persistence.dm +++ /dev/null @@ -1,59 +0,0 @@ -SUBSYSTEM_DEF(persistence) - name = "Persistence" - init_order = SS_INIT_MISC_LATE - flags = SS_NO_FIRE | SS_NEEDS_SHUTDOWN - var/list/tracking_values = list() - var/list/persistence_datums = list() - - -/datum/controller/subsystem/persistence/UpdateStat(time) - return - - -/datum/controller/subsystem/persistence/Initialize(start_uptime) - for(var/thing in subtypesof(/datum/persistent)) - var/datum/persistent/P = new thing - persistence_datums[thing] = P - P.Initialize() - -/datum/controller/subsystem/persistence/Shutdown() - for(var/thing in persistence_datums) - var/datum/persistent/P = persistence_datums[thing] - P.Shutdown() - -/datum/controller/subsystem/persistence/proc/track_value(var/atom/value, var/track_type) - - var/turf/T = get_turf(value) - if(!T) - return - - var/area/A = get_area(T) - if(!A || (A.area_flags & AREA_FLAG_IS_NOT_PERSISTENT)) - return - - if(!(T.z in GLOB.using_map.station_levels) || !initialized) - return - - if(!tracking_values[track_type]) - tracking_values[track_type] = list() - tracking_values[track_type] += value - -/datum/controller/subsystem/persistence/proc/forget_value(var/atom/value, var/track_type) - if(tracking_values[track_type]) - tracking_values[track_type] -= value - -/datum/controller/subsystem/persistence/proc/show_info(var/mob/user) - - if(!check_rights(R_INVESTIGATE, C = user)) - return - - var/list/dat = list("") - var/can_modify = check_rights(R_ADMIN, 0, user) - for(var/thing in persistence_datums) - var/datum/persistent/P = persistence_datums[thing] - if(P.has_admin_data) - dat += P.GetAdminSummary(user, can_modify) - dat += "
    " - var/datum/browser/popup = new(user, "admin_persistence", "Persistence Data") - popup.set_content(jointext(dat, null)) - popup.open() diff --git a/code/controllers/subsystems/initialization/robots.dm b/code/controllers/subsystems/initialization/robots.dm deleted file mode 100644 index 978f968a14b8b..0000000000000 --- a/code/controllers/subsystems/initialization/robots.dm +++ /dev/null @@ -1,68 +0,0 @@ -SUBSYSTEM_DEF(robots) - name = "Robots" - init_order = SS_INIT_MISC - flags = SS_NO_FIRE - - var/list/modules_by_category = list() - var/list/crisis_modules_by_category = list() - var/list/upgrade_modules_by_category = list() - var/list/all_module_names = list() - var/list/robot_alt_titles = list() - - var/list/mob_types_by_title = list( - "robot, flying" = /mob/living/silicon/robot/flying, - "drone, flying" = /mob/living/silicon/robot/flying - ) - - var/list/mmi_types_by_title = list( - "robot" = /obj/item/organ/internal/posibrain, - "drone" = /obj/item/device/mmi/digital/robot, - "robot, flying" = /obj/item/organ/internal/posibrain, - "drone, flying" = /obj/item/device/mmi/digital/robot - ) - - -/datum/controller/subsystem/robots/UpdateStat(time) - return - - -/datum/controller/subsystem/robots/Initialize(start_uptime) - - // This is done via loop instead of just assignment in order to trim associations. - for(var/title in (mob_types_by_title|mmi_types_by_title)) - robot_alt_titles |= capitalize(title) - sortTim(robot_alt_titles, /proc/cmp_text_asc) - - for(var/module_type in subtypesof(/obj/item/robot_module)) - var/obj/item/robot_module/module = module_type - var/module_category = initial(module.module_category) - var/module_name = initial(module.display_name) - if(module_name && module_category) - if(initial(module.upgrade_locked)) - LAZYINITLIST(upgrade_modules_by_category[module_category]) - LAZYSET(upgrade_modules_by_category[module_category], module_name, module) - else if(initial(module.crisis_locked)) - LAZYINITLIST(crisis_modules_by_category[module_category]) - LAZYSET(crisis_modules_by_category[module_category], module_name, module) - else - LAZYINITLIST(modules_by_category[module_category]) - LAZYSET(modules_by_category[module_category], module_name, module) - all_module_names |= module_name - all_module_names = sortTim(all_module_names, /proc/cmp_text_asc) - -/datum/controller/subsystem/robots/proc/get_available_modules(var/module_category, var/crisis_mode, var/include_override) - . = list() - if(modules_by_category[module_category]) - . += modules_by_category[module_category] - if(crisis_mode && crisis_modules_by_category[module_category]) - . |= crisis_modules_by_category[module_category] - if(include_override && upgrade_modules_by_category[module_category]) - var/list/modules = upgrade_modules_by_category[module_category] - if(modules[include_override]) - .[include_override] = modules[include_override] - -/datum/controller/subsystem/robots/proc/get_mmi_type_by_title(var/check_title) - . = mmi_types_by_title[lowertext(trim(check_title))] || /obj/item/device/mmi - -/datum/controller/subsystem/robots/proc/get_mob_type_by_title(var/check_title) - . = mob_types_by_title[lowertext(trim(check_title))] || /mob/living/silicon/robot diff --git a/code/controllers/subsystems/initialization/webhooks.dm b/code/controllers/subsystems/initialization/webhooks.dm deleted file mode 100644 index e7bc56d5b1b4f..0000000000000 --- a/code/controllers/subsystems/initialization/webhooks.dm +++ /dev/null @@ -1,92 +0,0 @@ -SUBSYSTEM_DEF(webhooks) - name = "Webhooks" - init_order = SS_INIT_EARLY - flags = SS_NO_FIRE - var/list/webhook_decls = list() - - -/datum/controller/subsystem/webhooks/UpdateStat(time) - return - - -/datum/controller/subsystem/webhooks/Initialize(start_uptime) - load_webhooks() - - -/datum/controller/subsystem/webhooks/proc/load_webhooks() - - if(!fexists(HTTP_POST_DLL_LOCATION)) - to_world_log("Unable to locate HTTP POST lib at [HTTP_POST_DLL_LOCATION], webhooks will not function on this run.") - return - - var/list/all_webhooks_by_id = list() - var/list/all_webhooks = decls_repository.get_decls_of_subtype(/decl/webhook) - for(var/wid in all_webhooks) - var/decl/webhook/webhook = all_webhooks[wid] - if(webhook.id) - all_webhooks_by_id[webhook.id] = webhook - - webhook_decls.Cut() - var/webhook_config = file2text("config/webhooks.json") || "{}" - if(webhook_config) - for(var/webhook_data in json_decode(webhook_config)) - var/wid = webhook_data["id"] - var/wurl = webhook_data["url"] - var/wmention = webhook_data["mentions"] - to_world_log("Setting up webhook [wid].") - if(wid && wurl && all_webhooks_by_id[wid]) - var/decl/webhook/webhook = all_webhooks_by_id[wid] - webhook.urls = islist(wurl) ? wurl : list(wurl) - if(wmention) - webhook.mentions = jointext(wmention, ", ") - webhook_decls[wid] = webhook - to_world_log("Webhook [wid] ready.") - else - to_world_log("Failed to set up webhook [wid].") - -/datum/controller/subsystem/webhooks/proc/send(var/wid, var/wdata) - var/decl/webhook/webhook = webhook_decls[wid] - if(webhook) - if(webhook.send(wdata)) - to_world_log("Sent webhook [webhook.id].") - log_debug("Webhook sent: [webhook.id].") - else - to_world_log("Failed to send webhook [webhook.id].") - log_debug("Webhook failed to send: [webhook.id].") - -/client/proc/reload_webhooks() - set name = "Reload Webhooks" - set category = "Debug" - - if(!holder) - return - - if(!SSwebhooks.initialized) - to_chat(usr, SPAN_WARNING("Let the webhook subsystem initialize before trying to reload it.")) - return - - to_world_log("[usr.key] has reloaded webhooks.") - log_and_message_admins("has reloaded webhooks.") - SSwebhooks.load_webhooks() - -/client/proc/ping_webhook() - set name = "Ping Webhook" - set category = "Debug" - - if(!holder) - return - - if(!length(SSwebhooks.webhook_decls)) - to_chat(usr, "Webhook list is empty; either webhooks are disabled, webhooks aren't configured, or the subsystem hasn't initialized.") - return - - var/choice = input(usr, "Select a webhook to ping.", "Ping Webhook") as null|anything in SSwebhooks.webhook_decls - if(choice && SSwebhooks.webhook_decls[choice]) - var/decl/webhook/webhook = SSwebhooks.webhook_decls[choice] - log_and_message_admins("has pinged webhook [choice].", usr) - to_world_log("[usr.key] has pinged webhook [choice].") - webhook.send() - -/hook/roundstart/proc/run_webhook() - SSwebhooks.send(WEBHOOK_ROUNDSTART, list("url" = get_world_url())) - return 1 diff --git a/code/controllers/subsystems/jobs.dm b/code/controllers/subsystems/jobs.dm deleted file mode 100644 index b61b72458c669..0000000000000 --- a/code/controllers/subsystems/jobs.dm +++ /dev/null @@ -1,568 +0,0 @@ -var/global/const/ENG = FLAG(0) -var/global/const/SEC = FLAG(1) -var/global/const/MED = FLAG(2) -var/global/const/SCI = FLAG(3) -var/global/const/CIV = FLAG(4) -var/global/const/COM = FLAG(5) -var/global/const/MSC = FLAG(6) -var/global/const/SRV = FLAG(7) -var/global/const/SUP = FLAG(8) -var/global/const/SPT = FLAG(9) -var/global/const/EXP = FLAG(10) -var/global/const/ROB = FLAG(11) - -GLOBAL_VAR(antag_code_phrase) -GLOBAL_VAR(antag_code_response) - -SUBSYSTEM_DEF(jobs) - name = "Jobs" - init_order = SS_INIT_JOBS - flags = SS_NO_FIRE - - var/list/archetype_job_datums = list() - var/list/job_lists_by_map_name = list() - var/list/titles_to_datums = list() - var/list/types_to_datums = list() - var/list/primary_job_datums = list() - var/list/unassigned_roundstart = list() - var/list/positions_by_department = list() - var/list/job_icons = list() - - -/datum/controller/subsystem/jobs/UpdateStat(time) - return - - -/datum/controller/subsystem/jobs/Initialize(start_uptime) - - // Create main map jobs. - primary_job_datums.Cut() - for(var/jobtype in (list(DEFAULT_JOB_TYPE) | GLOB.using_map.allowed_jobs)) - var/datum/job/job = get_by_path(jobtype) - if(!job) - job = new jobtype - primary_job_datums += job - - // Create abstract submap archetype jobs for use in prefs, etc. - archetype_job_datums.Cut() - for(var/atype in SSmapping.submap_archetypes) - var/decl/submap_archetype/arch = SSmapping.submap_archetypes[atype] - for(var/jobtype in arch.crew_jobs) - var/datum/job/job = get_by_path(jobtype) - if(!job && ispath(jobtype, /datum/job/submap)) - // Set this here so that we don't create multiples of the same title - // before getting to the cache updating proc below. - types_to_datums[jobtype] = new jobtype(abstract_job = TRUE) - job = get_by_path(jobtype) - if(job) - archetype_job_datums |= job - - // Init skills. - if(!GLOB.skills.len) - decls_repository.get_decl(/decl/hierarchy/skill) - if(!GLOB.skills.len) - log_error("Error setting up job skill requirements, no skill datums found!") - - // Update title and path tracking, submap list, etc. - // Populate/set up map job lists. - job_lists_by_map_name = list("[GLOB.using_map.full_name]" = list("jobs" = primary_job_datums, "default_to_hidden" = FALSE)) - - for(var/atype in SSmapping.submap_archetypes) - var/list/submap_job_datums - var/decl/submap_archetype/arch = SSmapping.submap_archetypes[atype] - for(var/jobtype in arch.crew_jobs) - var/datum/job/job = get_by_path(jobtype) - if(job) - LAZYADD(submap_job_datums, job) - if(LAZYLEN(submap_job_datums)) - job_lists_by_map_name[arch.descriptor] = list("jobs" = submap_job_datums, "default_to_hidden" = TRUE) - - // Update global map blacklists and whitelists. - for(var/mappath in GLOB.all_maps) - var/datum/map/M = GLOB.all_maps[mappath] - M.setup_job_lists() - - // Update valid job titles. - titles_to_datums = list() - types_to_datums = list() - positions_by_department = list() - for(var/map_name in job_lists_by_map_name) - var/list/map_data = job_lists_by_map_name[map_name] - for(var/datum/job/job in map_data["jobs"]) - types_to_datums[job.type] = job - titles_to_datums[job.title] = job - for(var/alt_title in job.alt_titles) - titles_to_datums[alt_title] = job - if(job.department_flag) - for (var/I in 1 to GLOB.bitflags.len) - if(job.department_flag & GLOB.bitflags[I]) - LAZYDISTINCTADD(positions_by_department["[GLOB.bitflags[I]]"], job.title) - if (length(job.alt_titles)) - LAZYDISTINCTADD(positions_by_department["[GLOB.bitflags[I]]"], job.alt_titles) - - // Set up syndicate phrases. - GLOB.antag_code_phrase = generate_code_phrase() - GLOB.antag_code_response = generate_code_phrase() - - // Set up AI spawn locations - spawn_empty_ai() - - -/datum/controller/subsystem/jobs/proc/guest_jobbans(var/job) - for(var/dept in list(COM, MSC, SEC)) - if(job in titles_by_department(dept)) - return TRUE - return FALSE - -/datum/controller/subsystem/jobs/proc/reset_occupations() - for(var/mob/new_player/player in GLOB.player_list) - if((player) && (player.mind)) - player.mind.assigned_job = null - player.mind.assigned_role = null - player.mind.special_role = null - for(var/datum/job/job in primary_job_datums) - job.current_positions = 0 - unassigned_roundstart = list() - -/datum/controller/subsystem/jobs/proc/get_by_title(var/rank) - return titles_to_datums[rank] - -/datum/controller/subsystem/jobs/proc/get_by_path(var/path) - RETURN_TYPE(/datum/job) - return types_to_datums[path] - -/datum/controller/subsystem/jobs/proc/check_general_join_blockers(var/mob/new_player/joining, var/datum/job/job) - if(!istype(joining) || !joining.client || !joining.client.prefs) - return FALSE - if(!istype(job)) - log_debug("Job assignment error for [joining] - job does not exist or is of the incorrect type.") - return FALSE - if(!job.is_position_available()) - to_chat(joining, "Unfortunately, that job is no longer available.") - return FALSE - if(!config.enter_allowed) - to_chat(joining, "There is an administrative lock on entering the game!") - return FALSE - if(SSticker.mode && SSticker.mode.explosion_in_progress) - to_chat(joining, "The [station_name()] is currently exploding. Joining would go poorly.") - return FALSE - return TRUE - -/datum/controller/subsystem/jobs/proc/check_latejoin_blockers(var/mob/new_player/joining, var/datum/job/job) - if(!check_general_join_blockers(joining, job)) - return FALSE - if(job.minimum_character_age && (joining.client.prefs.age < job.minimum_character_age)) - to_chat(joining, "Your character's in-game age is too low for this job.") - return FALSE - if(!job.player_old_enough(joining.client)) - to_chat(joining, "Your player age (days since first seen on the server) is too low for this job.") - return FALSE - if(GAME_STATE != RUNLEVEL_GAME) - to_chat(joining, "The round is either not ready, or has already finished...") - return FALSE - return TRUE - -/datum/controller/subsystem/jobs/proc/check_unsafe_spawn(var/mob/living/spawner, var/turf/spawn_turf) - var/radlevel = SSradiation.get_rads_at_turf(spawn_turf) - var/airstatus = IsTurfAtmosUnsafe(spawn_turf) - if(airstatus || radlevel > 0) - var/reply = alert(spawner, "Warning. Your selected spawn location seems to have unfavorable conditions. \ - You may die shortly after spawning. \ - Spawn anyway? More information: [airstatus] Radiation: [radlevel] IU/s", "Atmosphere warning", "Abort", "Spawn anyway") - if(reply == "Abort") - return FALSE - else - // Let the staff know, in case the person complains about dying due to this later. They've been warned. - log_and_message_admins("User [spawner] spawned at spawn point with dangerous atmosphere.") - return TRUE - -/datum/controller/subsystem/jobs/proc/assign_role(var/mob/new_player/player, var/rank, var/latejoin = 0, var/datum/game_mode/mode = SSticker.mode) - if(player && player.mind && rank) - var/datum/job/job = get_by_title(rank) - if(!job) - return 0 - if(jobban_isbanned(player, rank)) - return 0 - if(!job.player_old_enough(player.client)) - return 0 - if(job.is_restricted(player.client.prefs)) - return 0 - if(job.title in mode.disabled_jobs) - return 0 - - var/position_limit = job.total_positions - if(!latejoin) - position_limit = job.spawn_positions - if((job.current_positions < position_limit) || position_limit == -1) - player.mind.assigned_job = job - player.mind.assigned_role = rank - player.mind.role_alt_title = job.get_alt_title_for(player.client) - unassigned_roundstart -= player - job.current_positions++ - return 1 - return 0 - -/datum/controller/subsystem/jobs/proc/find_occupation_candidates(datum/job/job, level, flag) - var/list/candidates = list() - for(var/mob/new_player/player in unassigned_roundstart) - if(jobban_isbanned(player, job.title)) - continue - if(!job.player_old_enough(player.client)) - continue - if(job.minimum_character_age && (player.client.prefs.age < job.minimum_character_age)) - continue - if(flag && !(flag in player.client.prefs.be_special_role)) - continue - if(player.client.prefs.CorrectLevel(job,level)) - candidates += player - return candidates - -/datum/controller/subsystem/jobs/proc/give_random_job(var/mob/new_player/player, var/datum/game_mode/mode = SSticker.mode) - for(var/datum/job/job in shuffle(primary_job_datums)) - if(!job) - continue - if(job.minimum_character_age && (player.client.prefs.age < job.minimum_character_age)) - continue - if(istype(job, get_by_title(GLOB.using_map.default_assistant_title))) // We don't want to give him assistant, that's boring! - continue - if(job.is_restricted(player.client.prefs)) - continue - if(job.title in titles_by_department(COM)) //If you want a command position, select it! - continue - if(jobban_isbanned(player, job.title)) - continue - if(!job.player_old_enough(player.client)) - continue - if(job.title in mode.disabled_jobs) - continue - if((job.current_positions < job.spawn_positions) || job.spawn_positions == -1) - assign_role(player, job.title, mode = mode) - unassigned_roundstart -= player - break - -///This proc is called before the level loop of divide_occupations() and will try to select a head, ignoring ALL non-head preferences for every level until it locates a head or runs out of levels to check -/datum/controller/subsystem/jobs/proc/fill_head_position(var/datum/game_mode/mode) - for(var/level = 1 to 3) - for(var/command_position in titles_by_department(COM)) - var/datum/job/job = get_by_title(command_position) - if(!job) continue - var/list/candidates = find_occupation_candidates(job, level) - if(!candidates.len) continue - // Build a weighted list, weight by age. - var/list/weightedCandidates = list() - for(var/mob/V in candidates) - // Log-out during round-start? What a bad boy, no head position for you! - if(!V.client) continue - var/age = V.client.prefs.age - if(age < job.minimum_character_age) // Nope. - continue - switch(age) - if(job.minimum_character_age to (job.minimum_character_age+10)) - weightedCandidates[V] = 3 // Still a bit young. - if((job.minimum_character_age+10) to (job.ideal_character_age-10)) - weightedCandidates[V] = 6 // Better. - if((job.ideal_character_age-10) to (job.ideal_character_age+10)) - weightedCandidates[V] = 10 // Great. - if((job.ideal_character_age+10) to (job.ideal_character_age+20)) - weightedCandidates[V] = 6 // Still good. - if((job.ideal_character_age+20) to INFINITY) - weightedCandidates[V] = 3 // Geezer. - else - // If there's ABSOLUTELY NOBODY ELSE - if(candidates.len == 1) weightedCandidates[V] = 1 - var/mob/new_player/candidate = pickweight(weightedCandidates) - if(assign_role(candidate, command_position, mode = mode)) - return 1 - return 0 - -///This proc is called at the start of the level loop of divide_occupations() and will cause head jobs to be checked before any other jobs of the same level -/datum/controller/subsystem/jobs/proc/CheckHeadPositions(var/level, var/datum/game_mode/mode) - for(var/command_position in titles_by_department(COM)) - var/datum/job/job = get_by_title(command_position) - if(!job) continue - var/list/candidates = find_occupation_candidates(job, level) - if(!candidates.len) continue - var/mob/new_player/candidate = pick(candidates) - assign_role(candidate, command_position, mode = mode) - -/** Proc divide_occupations - * fills var "assigned_role" for all ready players. - * This proc must not have any side effect besides of modifying "assigned_role". - **/ -/datum/controller/subsystem/jobs/proc/divide_occupations(datum/game_mode/mode) - //Get the players who are ready - for(var/mob/new_player/player in GLOB.player_list) - if(player.ready && player.mind && !player.mind.assigned_role) - unassigned_roundstart += player - if(unassigned_roundstart.len == 0) return 0 - //Shuffle players and jobs - unassigned_roundstart = shuffle(unassigned_roundstart) - //People who wants to be assistants, sure, go on. - var/datum/job/assist = new DEFAULT_JOB_TYPE () - var/list/assistant_candidates = find_occupation_candidates(assist, 3) - for(var/mob/new_player/player in assistant_candidates) - assign_role(player, GLOB.using_map.default_assistant_title, mode = mode) - assistant_candidates -= player - - //Select one head - fill_head_position(mode) - - //Other jobs are now checked - // New job giving system by Donkie - // This will cause lots of more loops, but since it's only done once it shouldn't really matter much at all. - // Hopefully this will add more randomness and fairness to job giving. - - // Loop through all levels from high to low - var/list/shuffledoccupations = shuffle(primary_job_datums) - for(var/level = 1 to 3) - //Check the head jobs first each level - CheckHeadPositions(level, mode) - - // Loop through all unassigned players - var/list/deferred_jobs = list() - for(var/mob/new_player/player in unassigned_roundstart) - // Loop through all jobs - for(var/datum/job/job in shuffledoccupations) // SHUFFLE ME BABY - if(job && !mode.disabled_jobs.Find(job.title)) - if(job.defer_roundstart_spawn) - deferred_jobs[job] = TRUE - else if(attempt_role_assignment(player, job, level, mode)) - unassigned_roundstart -= player - break - - if(LAZYLEN(deferred_jobs)) - for(var/mob/new_player/player in unassigned_roundstart) - for(var/datum/job/job in deferred_jobs) - if(attempt_role_assignment(player, job, level, mode)) - unassigned_roundstart -= player - break - deferred_jobs.Cut() - - // Hand out random jobs to the people who didn't get any in the last check - // Also makes sure that they got their preference correct - for(var/mob/new_player/player in unassigned_roundstart) - if(player.client.prefs.alternate_option == GET_RANDOM_JOB) - give_random_job(player, mode) - // For those who wanted to be assistant if their preferences were filled, here you go. - for(var/mob/new_player/player in unassigned_roundstart) - if(player.client.prefs.alternate_option == BE_ASSISTANT) - var/datum/job/ass = DEFAULT_JOB_TYPE - if((GLOB.using_map.flags & MAP_HAS_BRANCH) && player.client.prefs.branches[initial(ass.title)]) - var/datum/mil_branch/branch = GLOB.mil_branches.get_branch(player.client.prefs.branches[initial(ass.title)]) - ass = branch.assistant_job - assign_role(player, initial(ass.title), mode = mode) - //For ones returning to lobby - for(var/mob/new_player/player in unassigned_roundstart) - if(player.client.prefs.alternate_option == RETURN_TO_LOBBY) - player.ready = 0 - player.new_player_panel() - unassigned_roundstart -= player - return TRUE - -/datum/controller/subsystem/jobs/proc/attempt_role_assignment(var/mob/new_player/player, var/datum/job/job, var/level, var/datum/game_mode/mode) - if(!jobban_isbanned(player, job.title) && \ - job.player_old_enough(player.client) && \ - player.client.prefs.CorrectLevel(job, level) && \ - job.is_position_available()) - assign_role(player, job.title, mode = mode) - return TRUE - return FALSE - -/datum/controller/subsystem/jobs/proc/equip_custom_loadout(var/mob/living/carbon/human/H, var/datum/job/job) - - if(!H || !H.client) - return - - // Equip custom gear loadout, replacing any job items - var/list/spawn_in_storage = list() - var/list/loadout_taken_slots = list() - if(H.client.prefs.Gear() && job.loadout_allowed) - for(var/thing in H.client.prefs.Gear()) - var/datum/gear/G = gear_datums[thing] - if(G) - var/permitted = 0 - if(G.allowed_branches) - if(H.char_branch && (H.char_branch.type in G.allowed_branches)) - permitted = 1 - else - permitted = 1 - - if(permitted) - if(G.allowed_roles) - if(job.type in G.allowed_roles) - permitted = 1 - else - permitted = 0 - else - permitted = 1 - - if(permitted && G.allowed_skills) - for(var/required in G.allowed_skills) - if(!H.skill_check(required,G.allowed_skills[required])) - permitted = 0 - - if(G.whitelisted && (!(H.species.name in G.whitelisted))) - permitted = 0 - - if(!permitted) - to_chat(H, "Your current species, job, branch, skills or whitelist status does not permit you to spawn with [thing]!") - continue - - if(!G.slot || G.slot == slot_tie || (G.slot in loadout_taken_slots) || !G.spawn_on_mob(H, H.client.prefs.Gear()[G.display_name])) - spawn_in_storage.Add(G) - else - loadout_taken_slots.Add(G.slot) - - // do accessories last so they don't attach to a suit that will be replaced - if(H.char_rank && H.char_rank.accessory) - for(var/accessory_path in H.char_rank.accessory) - var/list/accessory_data = H.char_rank.accessory[accessory_path] - if(islist(accessory_data)) - var/amt = accessory_data[1] - var/list/accessory_args = accessory_data.Copy() - accessory_args[1] = src - for(var/i in 1 to amt) - H.equip_to_slot_or_del(new accessory_path(arglist(accessory_args)), slot_tie) - else - for(var/i in 1 to (isnull(accessory_data)? 1 : accessory_data)) - H.equip_to_slot_or_del(new accessory_path(src), slot_tie) - - return spawn_in_storage - -/datum/controller/subsystem/jobs/proc/equip_rank(var/mob/living/carbon/human/H, var/rank, var/joined_late = 0) - if(!H) - return - - var/datum/job/job = get_by_title(rank) - var/list/spawn_in_storage - - if(job) - if(H.client) - if(GLOB.using_map.flags & MAP_HAS_BRANCH) - H.char_branch = GLOB.mil_branches.get_branch(H.client.prefs.branches[rank]) - if(GLOB.using_map.flags & MAP_HAS_RANK) - H.char_rank = GLOB.mil_branches.get_rank(H.client.prefs.branches[rank], H.client.prefs.ranks[rank]) - - // Transfers the skill settings for the job to the mob - H.skillset.obtain_from_client(job, H.client) - - //Equip job items. - job.setup_account(H) - - // EMAIL GENERATION - if(rank != "Robot" && rank != "AI") //These guys get their emails later. - var/domain - var/addr = H.real_name - var/pass - if(H.char_branch) - if(H.char_branch.email_domain) - domain = H.char_branch.email_domain - if (H.char_branch.allow_custom_email && H.client.prefs.email_addr) - addr = H.client.prefs.email_addr - else - domain = "freemail.net" - if (H.client.prefs.email_pass) - pass = H.client.prefs.email_pass - if(domain) - ntnet_global.create_email(H, addr, domain, rank, pass) - // END EMAIL GENERATION - - job.equip(H, H.mind ? H.mind.role_alt_title : "", H.char_branch, H.char_rank) - job.apply_fingerprints(H) - spawn_in_storage = equip_custom_loadout(H, job) - - var/obj/item/clothing/under/uniform = H.w_uniform - if(istype(uniform) && uniform.has_sensor) - uniform.sensor_mode = SUIT_SENSOR_MODES[H.client.prefs.sensor_setting] - if(H.client.prefs.sensors_locked) - uniform.has_sensor = SUIT_LOCKED_SENSORS - else - to_chat(H, "Your job is [rank] and the game just can't handle it! Please report this bug to an administrator.") - - H.job = rank - - if(!joined_late || job.latejoin_at_spawnpoints) - var/obj/S = job.get_roundstart_spawnpoint() - - if(istype(S, /obj/effect/landmark/start) && istype(S.loc, /turf)) - H.forceMove(S.loc) - else - var/datum/spawnpoint/spawnpoint = job.get_spawnpoint(H.client) - H.forceMove(pick(spawnpoint.turfs)) - spawnpoint.after_join(H) - - // Moving wheelchair if they have one - if(H.buckled && istype(H.buckled, /obj/structure/bed/chair/wheelchair)) - H.buckled.forceMove(H.loc) - H.buckled.set_dir(H.dir) - - // If they're head, give them the account info for their department - if(H.mind && job.head_position) - var/remembered_info = "" - var/datum/money_account/department_account = department_accounts[job.department] - - if(department_account) - remembered_info += "Your department's account number is: #[department_account.account_number]
    " - remembered_info += "Your department's account pin is: [department_account.remote_access_pin]
    " - remembered_info += "Your department's account funds are: [GLOB.using_map.local_currency_name_short][department_account.money]
    " - - H.StoreMemory(remembered_info, /decl/memory_options/system) - - var/alt_title = null - if(H.mind) - H.mind.assigned_job = job - H.mind.assigned_role = rank - alt_title = H.mind.role_alt_title - - var/mob/other_mob = job.handle_variant_join(H, alt_title) - if(other_mob) - job.post_equip_rank(other_mob, alt_title || rank) - return other_mob - - if(spawn_in_storage) - for(var/datum/gear/G in spawn_in_storage) - G.spawn_in_storage_or_drop(H, H.client.prefs.Gear()[G.display_name]) - - if(istype(H)) //give humans wheelchairs, if they need them. - var/obj/item/organ/external/l_foot = H.get_organ(BP_L_FOOT) - var/obj/item/organ/external/r_foot = H.get_organ(BP_R_FOOT) - if(!l_foot || !r_foot) - var/obj/structure/bed/chair/wheelchair/W = new /obj/structure/bed/chair/wheelchair(H.loc) - H.buckled = W - H.UpdateLyingBuckledAndVerbStatus() - W.set_dir(H.dir) - W.buckled_mob = H - W.add_fingerprint(H) - - to_chat(H, "You are [job.total_positions == 1 ? "the" : "a"] [alt_title ? alt_title : rank].") - - if(job.supervisors) - to_chat(H, "As the [alt_title ? alt_title : rank] you answer directly to [job.supervisors]. Special circumstances may change this.") - - to_chat(H, "To speak on your department's radio channel use :h. For the use of other channels, examine your headset.") - - if(job.req_admin_notify) - to_chat(H, "You are playing a job that is important for Game Progression. If you have to disconnect, please notify the admins via adminhelp.") - - if (H.disabilities & NEARSIGHTED) //Try to give glasses to the vision impaired - H.equip_to_slot_or_del(new /obj/item/clothing/glasses/prescription(H), slot_glasses) - - SET_BIT(H.hud_updateflag, ID_HUD) - SET_BIT(H.hud_updateflag, IMPLOYAL_HUD) - SET_BIT(H.hud_updateflag, SPECIALROLE_HUD) - - job.post_equip_rank(H, alt_title || rank) - - return H - -/datum/controller/subsystem/jobs/proc/titles_by_department(var/dept) - return positions_by_department["[dept]"] || list() - -/datum/controller/subsystem/jobs/proc/spawn_empty_ai() - for(var/obj/effect/landmark/start/S in landmarks_list) - if(S.name != "AI") - continue - if(locate(/mob/living) in S.loc) - continue - empty_playable_ai_cores += new /obj/structure/AIcore/deactivated(get_turf(S)) - return 1 diff --git a/code/controllers/subsystems/lighting.dm b/code/controllers/subsystems/lighting.dm deleted file mode 100644 index 9cdefc228bdfb..0000000000000 --- a/code/controllers/subsystems/lighting.dm +++ /dev/null @@ -1,163 +0,0 @@ -var/global/lighting_overlays_initialised = FALSE - -SUBSYSTEM_DEF(lighting) - name = "Lighting" - wait = 1 - init_order = SS_INIT_LIGHTING - - // Queues of update counts, waiting to be rolled into stats lists - var/list/stats_queues = list( - "Source" = list(), - "Corner" = list(), - "Overlay" = list() - ) - // Stats lists - var/list/stats_lists = list( - "Source" = list(), - "Corner" = list(), - "Overlay" = list() - ) - var/update_stats_every = 1 SECOND - var/next_stats_update = 0 - var/stat_updates_to_keep = 5 - - var/list/light_queue = list() // lighting sources queued for update. - var/lq_idex = 1 - var/list/corner_queue = list() // lighting corners queued for update. - var/cq_idex = 1 - var/list/overlay_queue = list() // lighting overlays queued for update. - var/oq_idex = 1 - - var/processed_lights = 0 - var/processed_corners = 0 - var/processed_overlays = 0 - -/datum/controller/subsystem/lighting/UpdateStat(time) - if (PreventUpdateStat(time)) - return ..() - ..({"\ - Queues: \ - Source [light_queue.len] \ - Corner [corner_queue.len] \ - Overlay [overlay_queue.len]\n\ - Source Updates [length(stats_lists["Source"])]\n\ - Corner Updates [length(stats_lists["Corner"])]\n\ - Overlay Updates [length(stats_lists["Overlay"])]\ - "}) - - -/datum/controller/subsystem/lighting/Initialize(start_uptime) - InitializeTurfs() - lighting_overlays_initialised = TRUE - fire(FALSE, TRUE) - - -// It's safe to pass a list of non-turfs to this list - it'll only check turfs. -/datum/controller/subsystem/lighting/proc/InitializeTurfs(list/targets) - for (var/turf/T in (targets || world)) - if (T.dynamic_lighting && T.loc:dynamic_lighting) - T.lighting_build_overlay() - - // If this isn't here, BYOND will set-background us. - CHECK_TICK - -/datum/controller/subsystem/lighting/fire(resumed = FALSE, no_mc_tick = FALSE) - if (!resumed) - stats_queues["Source"] += processed_lights - stats_queues["Corner"] += processed_corners - stats_queues["Overlay"] += processed_overlays - - processed_lights = 0 - processed_corners = 0 - processed_overlays = 0 - - if(next_stats_update <= world.time) - next_stats_update = world.time + update_stats_every - for(var/stat_name in stats_queues) - var/stat_sum = 0 - var/list/stats_queue = stats_queues[stat_name] - for(var/count in stats_queue) - stat_sum += count - stats_queue.Cut() - - var/list/stats_list = stats_lists[stat_name] - stats_list.Insert(1, stat_sum) - if(stats_list.len > stat_updates_to_keep) - stats_list.Cut(stats_list.len) - - MC_SPLIT_TICK_INIT(3) - if (!no_mc_tick) - MC_SPLIT_TICK - - // Sources. - while (lq_idex <= light_queue.len) - var/datum/light_source/L = light_queue[lq_idex] - lq_idex += 1 - - if(L.check() || L.destroyed || L.force_update) - L.remove_lum() - if(!L.destroyed) - L.apply_lum() - - else if(L.vis_update) //We smartly update only tiles that became (in) visible to use. - L.smart_vis_update() - - L.vis_update = FALSE - L.force_update = FALSE - L.needs_update = FALSE - - processed_lights += 1 - - if (no_mc_tick) - CHECK_TICK - else if (MC_TICK_CHECK) - break - - if (lq_idex > 1) - light_queue.Cut(1, lq_idex) - lq_idex = 1 - - if (!no_mc_tick) - MC_SPLIT_TICK - - // Corners. - while (cq_idex <= corner_queue.len) - var/datum/lighting_corner/C = corner_queue[cq_idex] - cq_idex += 1 - - C.update_overlays() - - C.needs_update = FALSE - - processed_corners += 1 - - if (no_mc_tick) - CHECK_TICK - else if (MC_TICK_CHECK) - break - - if (cq_idex > 1) - corner_queue.Cut(1, cq_idex) - cq_idex = 1 - - if (!no_mc_tick) - MC_SPLIT_TICK - - // Objects. - while (oq_idex <= overlay_queue.len) - var/atom/movable/lighting_overlay/O = overlay_queue[oq_idex] - oq_idex += 1 - - O.update_overlay() - O.needs_update = 0 - - processed_overlays += 1 - - if (no_mc_tick) - CHECK_TICK - else if (MC_TICK_CHECK) - break - - if (oq_idex > 1) - overlay_queue.Cut(1, oq_idex) - oq_idex = 1 diff --git a/code/controllers/subsystems/machines.dm b/code/controllers/subsystems/machines.dm deleted file mode 100644 index 0573a6a054d56..0000000000000 --- a/code/controllers/subsystems/machines.dm +++ /dev/null @@ -1,235 +0,0 @@ -#define SSMACHINES_PIPENETS 1 -#define SSMACHINES_MACHINERY 2 -#define SSMACHINES_POWERNETS 3 -#define SSMACHINES_POWER_OBJECTS 4 - - -#define START_PROCESSING_IN_LIST(Datum, List) \ -if (Datum.is_processing) {\ - if(Datum.is_processing != "SSmachines.[#List]")\ - {\ - crash_with("Failed to start processing. [log_info_line(Datum)] is already being processed by [Datum.is_processing] but queue attempt occured on SSmachines.[#List]."); \ - }\ -} else {\ - Datum.is_processing = "SSmachines.[#List]";\ - SSmachines.List += Datum;\ -} - -#define STOP_PROCESSING_IN_LIST(Datum, List) \ -if(Datum.is_processing) {\ - if(SSmachines.List.Remove(Datum)) {\ - Datum.is_processing = null;\ - } else {\ - crash_with("Failed to stop processing. [log_info_line(Datum)] is being processed by [is_processing] and not found in SSmachines.[#List]"); \ - }\ -} - -#define START_PROCESSING_PIPENET(Datum) START_PROCESSING_IN_LIST(Datum, pipenets) -#define STOP_PROCESSING_PIPENET(Datum) STOP_PROCESSING_IN_LIST(Datum, pipenets) - -#define START_PROCESSING_POWERNET(Datum) START_PROCESSING_IN_LIST(Datum, powernets) -#define STOP_PROCESSING_POWERNET(Datum) STOP_PROCESSING_IN_LIST(Datum, powernets) - -#define START_PROCESSING_POWER_OBJECT(Datum) START_PROCESSING_IN_LIST(Datum, power_objects) -#define STOP_PROCESSING_POWER_OBJECT(Datum) STOP_PROCESSING_IN_LIST(Datum, power_objects) - - -SUBSYSTEM_DEF(machines) - name = "Machines" - init_order = SS_INIT_MACHINES - priority = SS_PRIORITY_MACHINERY - flags = SS_KEEP_TIMING - runlevels = RUNLEVEL_GAME | RUNLEVEL_POSTGAME - var/static/current_step = SSMACHINES_PIPENETS - var/static/cost_pipenets = 0 - var/static/cost_machinery = 0 - var/static/cost_powernets = 0 - var/static/cost_power_objects = 0 - var/static/list/pipenets = list() - var/static/list/machinery = list() - var/static/list/powernets = list() - var/static/list/power_objects = list() - var/static/list/processing = list() - var/static/list/queue = list() - - -/datum/controller/subsystem/machines/Recover() - current_step = SSMACHINES_PIPENETS - queue.Cut() - - -/datum/controller/subsystem/machines/Initialize(start_uptime) - makepowernets() - setup_atmos_machinery(machinery) - fire(FALSE, TRUE) - - -/datum/controller/subsystem/machines/fire(resumed, no_mc_tick) - var/timer - if (!resumed || current_step == SSMACHINES_PIPENETS) - timer = world.tick_usage - process_pipenets(resumed, no_mc_tick) - cost_pipenets = MC_AVERAGE(cost_pipenets, (world.tick_usage - timer) * world.tick_lag) - if (state != SS_RUNNING) - return - current_step = SSMACHINES_MACHINERY - resumed = FALSE - if (current_step == SSMACHINES_MACHINERY) - timer = world.tick_usage - process_machinery(resumed, no_mc_tick) - cost_machinery = MC_AVERAGE(cost_machinery, (world.tick_usage - timer) * world.tick_lag) - if(state != SS_RUNNING) - return - current_step = SSMACHINES_POWERNETS - resumed = FALSE - if (current_step == SSMACHINES_POWERNETS) - timer = world.tick_usage - process_powernets(resumed, no_mc_tick) - cost_powernets = MC_AVERAGE(cost_powernets, (world.tick_usage - timer) * world.tick_lag) - if(state != SS_RUNNING) - return - current_step = SSMACHINES_POWER_OBJECTS - resumed = FALSE - if (current_step == SSMACHINES_POWER_OBJECTS) - timer = world.tick_usage - process_power_objects(resumed, no_mc_tick) - cost_power_objects = MC_AVERAGE(cost_power_objects, (world.tick_usage - timer) * world.tick_lag) - if (state != SS_RUNNING) - return - current_step = SSMACHINES_PIPENETS - - -/// Rebuilds power networks from scratch. Called by world initialization and elevators. -/datum/controller/subsystem/machines/proc/makepowernets() - for(var/datum/powernet/powernet as anything in powernets) - qdel(powernet) - powernets.Cut() - setup_powernets_for_cables(GLOB.cable_list) - - - -/datum/controller/subsystem/machines/proc/setup_powernets_for_cables(list/cables) - for (var/obj/structure/cable/cable as anything in cables) - if (cable.powernet) - continue - var/datum/powernet/network = new - network.add_cable(cable) - propagate_network(cable, cable.powernet) - - -/datum/controller/subsystem/machines/proc/setup_atmos_machinery(list/machines) - set background = TRUE - var/list/atmos_machines = list() - for (var/obj/machinery/atmospherics/machine in machines) - atmos_machines += machine - report_progress("Initializing atmos machinery") - for (var/obj/machinery/atmospherics/machine as anything in atmos_machines) - machine.atmos_init() - CHECK_TICK - report_progress("Initializing pipe networks") - for (var/obj/machinery/atmospherics/machine as anything in atmos_machines) - machine.build_network() - CHECK_TICK - - -/datum/controller/subsystem/machines/UpdateStat(time) - if (PreventUpdateStat(time)) - return ..() - ..({"\ - Queues: \ - Pipes [pipenets.len] \ - Machines [processing.len] \ - Networks [powernets.len] \ - Objects [power_objects.len]\n\ - Costs: \ - Pipes [Round(cost_pipenets)] \ - Machines [Round(cost_machinery)] \ - Networks [Round(cost_powernets)] \ - Objects [Round(cost_power_objects)]\n\ - Overall [Roundm(cost ? processing.len / cost : 0, 0.1)] - "}) - - -/datum/controller/subsystem/machines/proc/process_pipenets(resumed, no_mc_tick) - if (!resumed) - queue = pipenets.Copy() - var/datum/pipe_network/network - for (var/i = queue.len to 1 step -1) - network = queue[i] - if (QDELETED(network)) - if (network) - network.is_processing = null - pipenets -= network - continue - network.Process(wait) - if (no_mc_tick) - CHECK_TICK - else if (MC_TICK_CHECK) - queue.Cut(i) - return - - -/datum/controller/subsystem/machines/proc/process_machinery(resumed, no_mc_tick) - if (!resumed) - queue = processing.Copy() - var/obj/machinery/machine - for (var/i = queue.len to 1 step -1) - machine = queue[i] - if (QDELETED(machine)) - if (machine) - machine.is_processing = null - processing -= machine - continue - if (machine.ProcessAll(wait) == PROCESS_KILL) - processing -= machine - if (no_mc_tick) - CHECK_TICK - else if (MC_TICK_CHECK) - queue.Cut(i) - return - - -/datum/controller/subsystem/machines/proc/process_powernets(resumed, no_mc_tick) - if (!resumed) - queue = powernets.Copy() - var/datum/powernet/network - for (var/i = queue.len to 1 step -1) - network = queue[i] - if (QDELETED(network)) - if (network) - network.is_processing = null - powernets -= network - continue - network.reset(wait) - if (no_mc_tick) - CHECK_TICK - else if (MC_TICK_CHECK) - queue.Cut(i) - return - - -/datum/controller/subsystem/machines/proc/process_power_objects(resumed, no_mc_tick) - if (!resumed) - queue = power_objects.Copy() - var/obj/item/item - for (var/i = queue.len to 1 step -1) - item = queue[i] - if (QDELETED(item)) - if (item) - item.is_processing = null - power_objects -= item - continue - if (!item.pwr_drain(wait)) - item.is_processing = null - power_objects -= item - if (no_mc_tick) - CHECK_TICK - else if (MC_TICK_CHECK) - queue.Cut(i) - return - - -#undef SSMACHINES_PIPENETS -#undef SSMACHINES_MACHINERY -#undef SSMACHINES_POWERNETS -#undef SSMACHINES_POWER_OBJECTS diff --git a/code/controllers/subsystems/mapping.dm b/code/controllers/subsystems/mapping.dm deleted file mode 100644 index 67b06b50e0aae..0000000000000 --- a/code/controllers/subsystems/mapping.dm +++ /dev/null @@ -1,97 +0,0 @@ -SUBSYSTEM_DEF(mapping) - name = "Mapping" - init_order = SS_INIT_MAPPING - flags = SS_NO_FIRE - - var/list/map_templates = list() - var/list/space_ruins_templates = list() - var/list/exoplanet_ruins_templates = list() - var/list/away_sites_templates = list() - var/list/submaps = list() - var/list/submap_archetypes = list() - - -/datum/controller/subsystem/mapping/UpdateStat(time) - return - - -/datum/controller/subsystem/mapping/Initialize(start_uptime) - // Load templates and build away sites. - preloadTemplates() - for(var/atype in subtypesof(/decl/submap_archetype)) - submap_archetypes[atype] = new atype - -/datum/controller/subsystem/mapping/Recover() - flags |= SS_NO_INIT - map_templates = SSmapping.map_templates - space_ruins_templates = SSmapping.space_ruins_templates - exoplanet_ruins_templates = SSmapping.exoplanet_ruins_templates - away_sites_templates = SSmapping.away_sites_templates - -/datum/controller/subsystem/mapping/proc/preloadTemplates(path = "maps/templates/") //see master controller setup - var/list/filelist = flist(path) - for(var/map in filelist) - var/datum/map_template/T = new(paths = "[path][map]", rename = "[map]") - map_templates[T.name] = T - preloadBlacklistableTemplates() - -/datum/controller/subsystem/mapping/proc/preloadBlacklistableTemplates() - // Still supporting bans by filename - var/list/banned_exoplanet_dmms = generateMapList("config/exoplanet_ruin_blacklist.txt") - var/list/banned_space_dmms = generateMapList("config/space_ruin_blacklist.txt") - var/list/banned_away_site_dmms = generateMapList("config/away_site_blacklist.txt") - - if (!banned_exoplanet_dmms || !banned_space_dmms || !banned_away_site_dmms) - report_progress("One or more map blacklist files are not present in the config directory!") - - var/list/banned_maps = list() + banned_exoplanet_dmms + banned_space_dmms + banned_away_site_dmms - - for(var/item in sortList(subtypesof(/datum/map_template), /proc/cmp_ruincost_priority)) - var/datum/map_template/map_template_type = item - // screen out the abstract subtypes - if(!initial(map_template_type.id)) - continue - var/datum/map_template/MT = new map_template_type() - - if (banned_maps) - var/is_banned = FALSE - for (var/mappath in MT.mappaths) - if(banned_maps.Find(mappath)) - is_banned = TRUE - break - if (is_banned) - continue - - map_templates[MT.name] = MT - - // This is nasty.. - if(istype(MT, /datum/map_template/ruin/exoplanet)) - exoplanet_ruins_templates[MT.name] = MT - else if(istype(MT, /datum/map_template/ruin/space)) - space_ruins_templates[MT.name] = MT - else if(istype(MT, /datum/map_template/ruin/away_site)) - away_sites_templates[MT.name] = MT - -/proc/generateMapList(filename) - var/list/potentialMaps = list() - var/list/Lines = world.file2list(filename) - if(!Lines.len) - return - for (var/t in Lines) - if (!t) - continue - t = trim(t) - if (length(t) == 0) - continue - else if (copytext(t, 1, 2) == "#") - continue - var/pos = findtext(t, " ") - var/name = null - if (pos) - name = lowertext(copytext(t, 1, pos)) - else - name = lowertext(t) - if (!name) - continue - potentialMaps.Add(t) - return potentialMaps diff --git a/code/controllers/subsystems/misc.dm b/code/controllers/subsystems/misc.dm deleted file mode 100644 index e63716ecdb879..0000000000000 --- a/code/controllers/subsystems/misc.dm +++ /dev/null @@ -1,148 +0,0 @@ -SUBSYSTEM_DEF(misc) - name = "Misc Updates" - wait = 30 SECONDS - runlevels = RUNLEVEL_GAME | RUNLEVEL_POSTGAME - var/static/list/queue = list() - var/static/stage = STAGE_TRADERS - var/static/cost_traders = 0 - var/static/cost_solars = 0 - - var/const/STAGE_TRADERS = FLAG(0) - var/const/STAGE_SOLARS = FLAG(1) - - -/datum/controller/subsystem/misc/VV_static() - return ..() + list( - "STAGE_TRADERS", - "STAGE_SOLARS" - ) - - -/datum/controller/subsystem/misc/UpdateStat(time) - if (PreventUpdateStat(time)) - return ..() - ..({"\ - TR: [GLOB.traders.len],[Roundm(cost_traders, 0.1)] \ - SO: [Roundm(GLOB.sun_angle, 0.1)],[Roundm(GLOB.sun_rate, 0.1)],[Roundm(cost_solars, 0.1)] - "}) - - -/datum/controller/subsystem/misc/Recover() - stage = STAGE_TRADERS - queue.Cut() - - -/datum/controller/subsystem/misc/Initialize(start_uptime) - UpdateTraders(FALSE, TRUE, GLOB.trader_station_count) - - -/datum/controller/subsystem/misc/fire(resumed, no_mc_tick) - var/timer - if (!resumed || stage == STAGE_TRADERS) - timer = world.tick_usage - UpdateTraders(resumed, no_mc_tick) - cost_traders = MC_AVERAGE(cost_traders, (world.tick_usage - timer) * world.tick_lag) - if (state != SS_RUNNING) - return - stage = STAGE_SOLARS - resumed = FALSE - if (stage == STAGE_SOLARS) - timer = world.tick_usage - UpdateSolars(resumed, no_mc_tick) - cost_solars = MC_AVERAGE(cost_solars, (world.tick_usage - timer) * world.tick_lag) - if (state != SS_RUNNING) - return - stage = STAGE_TRADERS - - -GLOBAL_LIST_EMPTY(traders) -GLOBAL_LIST_EMPTY(trader_types) -GLOBAL_VAR_INIT(trader_max, 10) -GLOBAL_VAR_INIT(trader_station_count, 3) -GLOBAL_VAR_INIT(trader_unique_chance, 5) -GLOBAL_LIST_INIT(trader_stations, subtypesof(/datum/trader) - typesof(/datum/trader/ship)) -GLOBAL_LIST_INIT(trader_ships, subtypesof(/datum/trader/ship) - typesof(/datum/trader/ship/unique)) -GLOBAL_LIST_INIT(trader_uniques, subtypesof(/datum/trader/ship/unique)) - - -/datum/controller/subsystem/misc/proc/UpdateTraders(resumed, no_mc_tick, generate_stations = 0) - if (!resumed) - queue = GLOB.trader_types.Copy() - var/count = queue.len - var/max = GLOB.trader_max - var/trader_type - var/datum/trader/trader - if (count < max && prob(100 - 50 * count / max)) - var/list/candidates - if (generate_stations) - candidates = GLOB.trader_stations.Copy() - GLOB.trader_types - else if (prob(GLOB.trader_unique_chance)) - candidates = GLOB.trader_uniques.Copy() - GLOB.trader_types - else - candidates = GLOB.trader_ships.Copy() - GLOB.trader_types - if (length(candidates)) - for (var/i = (generate_stations || 1) to 1 step -1) - trader_type = pick(candidates) - candidates -= trader_type - GLOB.trader_types += trader_type - GLOB.traders[trader_type] = new trader_type - if (generate_stations) - CHECK_TICK - else if (MC_TICK_CHECK) - return - for (var/i = count to 1 step -1) - trader_type = queue[i] - trader = GLOB.traders[trader_type] - if (QDELETED(trader)) - GLOB.trader_types -= trader_type - GLOB.traders[trader_type] = null - continue - if (!trader.tick()) - GLOB.trader_types -= trader_type - GLOB.traders[trader_type] = null - qdel(trader) - if (no_mc_tick) - CHECK_TICK - else if (MC_TICK_CHECK) - queue.Cut(i) - return - - -GLOBAL_VAR_INIT(sun_dx, 0) -GLOBAL_VAR_INIT(sun_dy, 0) -GLOBAL_VAR_INIT(sun_angle, rand(0, 359)) -GLOBAL_VAR_INIT(sun_rate, (rand(0, 1) || -1) * rand(50, 200) * 0.01 * 18) -GLOBAL_LIST_EMPTY(solar_controllers) - - -/datum/controller/subsystem/misc/proc/UpdateSolars(resumed, no_mc_tick) - if (!resumed) - var/angle = GLOB.sun_angle + GLOB.sun_rate - if (angle > 360) - angle -= 360 - else if (angle < 0) - angle += 360 - var/s = sin(angle) - var/c = cos(angle) - var/sa = abs(s) - var/ca = abs(c) - if (sa < ca) - GLOB.sun_dx = s / ca - GLOB.sun_dy = c / ca - else - GLOB.sun_dx = s / sa - GLOB.sun_dy = c / sa - GLOB.sun_angle = angle - queue = GLOB.solar_controllers.Copy() - var/obj/machinery/power/solar_control/controller - for (var/i = queue.len to 1 step -1) - controller = queue[i] - if (QDELETED(controller) || !controller.powernet) - GLOB.solar_controllers -= controller - continue - controller.update() - if (no_mc_tick) - CHECK_TICK - else if (MC_TICK_CHECK) - queue.Cut(i) - return diff --git a/code/controllers/subsystems/misc_slow.dm b/code/controllers/subsystems/misc_slow.dm deleted file mode 100644 index b80cc69d79496..0000000000000 --- a/code/controllers/subsystems/misc_slow.dm +++ /dev/null @@ -1,98 +0,0 @@ -SUBSYSTEM_DEF(misc_slow) - name = "Misc Updates (Slow)" - flags = SS_NO_INIT - runlevels = RUNLEVEL_LOBBY | RUNLEVEL_GAME | RUNLEVEL_POSTGAME - wait = 5 MINUTES - - /// The number of times dbcon can fail in a row before being considered dead - var/const/DB_RECONNECTS_ALLOWED = 3 - - /// a list of (reconnects succeeded, reconnects failed) for dbcon - var/static/db_status = list(0, 0) - - /// A convenience cache of db_status for stat_entry - var/static/db_info = "-" - - /// The number of times dbcon_old can fail in a row before being considered dead - var/const/DB_OLD_RECONNECTS_ALLOWED = 3 - - /// a list of (reconnects succeeded, reconnects failed) for dbcon_old - var/static/db_old_status = list(0, 0) - - /// A convenience cache of db_old_status for stat_entry - var/static/db_old_info = "-" - - -/datum/controller/subsystem/misc_slow/VV_static() - return ..() + list( - "DB_RECONNECTS_ALLOWED", - "DB_OLD_RECONNECTS_ALLOWED" - ) - - -/datum/controller/subsystem/misc_slow/Recover() - RecoverDoReconnects() - - -/datum/controller/subsystem/misc_slow/UpdateStat(time) - if (PreventUpdateStat(time)) - return ..() - ..({"\ - sql: [sqlenabled ? "Y" : "N"] | DB: [db_info] | DB Old: [db_old_info]\ - "}) - - -/datum/controller/subsystem/misc_slow/fire(resumed, no_mc_tick) - DoReconnects() - - -/// Clear the state of members related to db connection maintenance -/datum/controller/subsystem/misc_slow/proc/RecoverDoReconnects() - db_status = list(0, 0) - db_info = "-" - db_old_status = list(0, 0) - db_old_info = "-" - - -/// Run connection maintenance for dbcon and dbcon_old, if sql is enabled correct(ish). -/datum/controller/subsystem/misc_slow/proc/DoReconnects() - if (!sqlenabled) - return - if (!sqladdress || !sqlport || !sqllogin || !sqldb || !sqlfdbklogin || !sqlfdbkdb) - log_debug("SS [name]: SQL credentials misconfigured.") - return - var/db_dsn = "dbi:mysql:[sqlfdbkdb]:[sqladdress]:[sqlport]" - ReconnectDB("DB", dbcon, db_dsn, sqlfdbklogin, sqlfdbkpass, db_status, DB_RECONNECTS_ALLOWED) - db_info = "DEAD" - if (db_status[2] < DB_RECONNECTS_ALLOWED) - db_info = "R[db_status[1]],F[db_status[2]]" - var/db_old_dsn = "dbi:mysql:[sqldb]:[sqladdress]:[sqlport]" - ReconnectDB("Old DB", dbcon_old, db_old_dsn, sqllogin, sqlpass, db_old_status, DB_OLD_RECONNECTS_ALLOWED) - db_old_info = "DEAD" - if (db_old_status[2] < DB_OLD_RECONNECTS_ALLOWED) - db_old_info = "R[db_old_status[1]],F[db_old_status[2]]" - - -/// An ugly proc that attempts to reopen the passed database's connection if it has timed out or been lost. -/datum/controller/subsystem/misc_slow/proc/ReconnectDB(log_name, DBConnection/db, dsn, user, pass, list/status, limit) - if (status[2] >= limit) // We've failed too many times. - return - if (!isnull(db._db_con)) - if (_dm_db_is_connected(db._db_con)) - var/query = _dm_db_new_query() // Do a little dance to keep the connection interested. - if (_dm_db_execute(query, "SELECT 1;", db._db_con, null, null)) - return - log_debug("SS [name]: [log_name] reconnecting.") - _dm_db_close(dbcon._db_con) - dbcon._db_con = null - var/connection = _dm_db_new_con() - var/success = _dm_db_connect(connection, dsn, user, pass, null, null) - if (success) - log_debug("SS [name]: [log_name] reconnected ([++status[1]]\th time).") - db._db_con = connection - status[2] = 0 - return - log_debug("SS [name]: [log_name] reconnect failed ([++status[2]]\th time).") - if (status[1] < limit) - return - log_debug("SS [name]: [log_name] reconnect failed too many times. No more attempts will be made.") diff --git a/code/controllers/subsystems/mobs.dm b/code/controllers/subsystems/mobs.dm deleted file mode 100644 index 2f1b23889b509..0000000000000 --- a/code/controllers/subsystems/mobs.dm +++ /dev/null @@ -1,66 +0,0 @@ -SUBSYSTEM_DEF(mobs) - name = "Mobs" - priority = SS_PRIORITY_MOB - flags = SS_NO_INIT | SS_KEEP_TIMING - runlevels = RUNLEVEL_GAME | RUNLEVEL_POSTGAME - wait = 2 SECONDS - var/static/list/mob_list = list() - var/static/list/queue = list() - - -/datum/controller/subsystem/mobs/UpdateStat(time) - if (PreventUpdateStat(time)) - return ..() - ..({"\ - Mobs: [mob_list.len] \ - Run Empty Levels: [config.run_empty_levels ? "Y" : "N"]\ - "}) - - -/datum/controller/subsystem/mobs/Recover() - queue.Cut() - - -/datum/controller/subsystem/mobs/fire(resume, no_mc_tick) - if (!resume) - queue = mob_list.Copy() - var/mob/mob - for (var/i = queue.len to 1 step -1) - mob = queue[i] - if (QDELETED(mob)) - continue - if (!config.run_empty_levels && !SSpresence.population(get_z(mob))) - continue - mob.Life() - if (no_mc_tick) - CHECK_TICK - else if (MC_TICK_CHECK) - queue.Cut(i) - return - - -#define START_PROCESSING_MOB(MOB) \ -if (MOB.is_processing) {\ - if (MOB.is_processing != SSmobs) {\ - crash_with("Failed to start processing mob. Already being processed by [MOB.is_processing].")\ - }\ -}\ -else {\ - MOB.is_processing = SSmobs;\ - SSmobs.mob_list += MOB;\ -} - - -#define STOP_PROCESSING_MOB(MOB) \ -if(MOB.is_processing == SSmobs) {\ - MOB.is_processing = null;\ - SSmobs.mob_list -= MOB;\ -}\ -else if (MOB.is_processing) {\ - crash_with("Failed to stop processing mob. Being processed by [MOB.is_processing] instead.")\ -} - - -/mob/dview/Initialize() - . = ..() - STOP_PROCESSING_MOB(src) diff --git a/code/controllers/subsystems/ping.dm b/code/controllers/subsystems/ping.dm deleted file mode 100644 index 5f5797f1cdd63..0000000000000 --- a/code/controllers/subsystems/ping.dm +++ /dev/null @@ -1,18 +0,0 @@ -SUBSYSTEM_DEF(ping) - name = "Ping" - flags = SS_NO_INIT - runlevels = RUNLEVELS_ALL - wait = 30 SECONDS - var/static/list/chats = list() - - -/datum/controller/subsystem/ping/UpdateStat(time) - return - - -/datum/controller/subsystem/ping/fire(resumed) - for (var/chatOutput/O as anything in chats) - if (O.loaded && !O.broken) - O.updatePing() - if (MC_TICK_CHECK) - return diff --git a/code/controllers/subsystems/plants.dm b/code/controllers/subsystems/plants.dm deleted file mode 100644 index 287a4cf884a2b..0000000000000 --- a/code/controllers/subsystems/plants.dm +++ /dev/null @@ -1,106 +0,0 @@ -PROCESSING_SUBSYSTEM_DEF(plants) - name = "Plants" - priority = SS_PRIORITY_PLANTS - runlevels = RUNLEVEL_GAME|RUNLEVEL_POSTGAME - flags = SS_BACKGROUND|SS_POST_FIRE_TIMING - init_order = SS_INIT_PLANTS - wait = 60 - - process_proc = /obj/machinery/portable_atmospherics/hydroponics/Process - - var/list/product_descs = list() // Stores generated fruit descs. - var/list/seeds = list() // All seed data stored here. - var/list/gene_tag_masks = list() // Gene obfuscation for delicious trial and error goodness. - var/list/plant_icon_cache = list() // Stores images of growth, fruits and seeds. - var/list/plant_sprites = list() // List of all harvested product sprites. - var/list/plant_product_sprites = list() // List of all growth sprites plus number of growth stages. - var/list/gene_masked_list = list() // Stored gene masked list, rather than recreating it when needed. - var/list/plant_gene_datums = list() // Stored datum versions of the gene masked list. - - -/datum/controller/subsystem/character_setup/UpdateStat(time) - return - - -/datum/controller/subsystem/processing/plants/Initialize(start_uptime) - // Build the icon lists. - for(var/icostate in icon_states('icons/obj/hydroponics_growing.dmi')) - var/split = findtext(icostate,"-") - if(!split) - // invalid icon_state - continue - - var/ikey = copytext_char(icostate,(split+1)) - if(ikey == "dead") - // don't count dead icons - continue - ikey = text2num(ikey) - var/base = copytext_char(icostate,1,split) - - if(!(plant_sprites[base]) || (plant_sprites[base] 0) - crash_with("[log_info_line(subsystem.debug_last_thing)] slept during processing. Spent [tick_time] tick\s.") - if(tick_use_limit > 0) - crash_with("[log_info_line(subsystem.debug_last_thing)] took longer than a tick to process. Exceeded with [tick_use_limit]%") diff --git a/code/controllers/subsystems/processing/psi.dm b/code/controllers/subsystems/processing/psi.dm deleted file mode 100644 index 03ad752a491df..0000000000000 --- a/code/controllers/subsystems/processing/psi.dm +++ /dev/null @@ -1,34 +0,0 @@ -GLOBAL_LIST_INIT(psychic_ranks_to_strings, list("Latent", "Operant", "Masterclass", "Grandmasterclass", "Paramount")) - -PROCESSING_SUBSYSTEM_DEF(psi) - name = "Psychics" - priority = SS_PRIORITY_PSYCHICS - flags = SS_POST_FIRE_TIMING | SS_BACKGROUND - - var/list/faculties_by_id = list() - var/list/faculties_by_name = list() - var/list/all_aura_images = list() - var/list/all_psi_complexes = list() - var/list/psi_dampeners = list() - var/list/psi_monitors = list() - var/list/armour_faculty_by_type = list() - var/list/faculties_by_intent = list() - -/datum/controller/subsystem/processing/psi/proc/get_faculty(var/faculty) - return faculties_by_name[faculty] || faculties_by_id[faculty] - -/datum/controller/subsystem/processing/psi/Initialize(start_uptime) - var/list/faculties = decls_repository.get_decls_of_subtype(/decl/psionic_faculty) - for(var/ftype in faculties) - var/decl/psionic_faculty/faculty = faculties[ftype] - faculties_by_id[faculty.id] = faculty - faculties_by_name[faculty.name] = faculty - faculties_by_intent[faculty.associated_intent] = faculty.id - - var/list/powers = decls_repository.get_decls_of_subtype(/decl/psionic_power) - for(var/ptype in powers) - var/decl/psionic_power/power = powers[ptype] - if(!is_abstract(power) && power.faculty) - var/decl/psionic_faculty/faculty = get_faculty(power.faculty) - if(faculty) - faculty.powers |= power diff --git a/code/controllers/subsystems/processing/temperature.dm b/code/controllers/subsystems/processing/temperature.dm deleted file mode 100644 index 377c828366020..0000000000000 --- a/code/controllers/subsystems/processing/temperature.dm +++ /dev/null @@ -1,5 +0,0 @@ -PROCESSING_SUBSYSTEM_DEF(temperature) - name = "Temperature" - priority = SS_PRIORITY_TEMPERATURE - wait = 5 SECONDS - process_proc = /atom/proc/ProcessAtomTemperature diff --git a/code/controllers/subsystems/processing/turf.dm b/code/controllers/subsystems/processing/turf.dm deleted file mode 100644 index 2988f40311c5e..0000000000000 --- a/code/controllers/subsystems/processing/turf.dm +++ /dev/null @@ -1,5 +0,0 @@ -//Used for radioactive walls and blob. Fires once every second, has lower priority. - -PROCESSING_SUBSYSTEM_DEF(turf) - name = "Turfs" - priority = SS_PRIORITY_TURF \ No newline at end of file diff --git a/code/controllers/subsystems/processing/vines.dm b/code/controllers/subsystems/processing/vines.dm deleted file mode 100644 index 56e24d30f2778..0000000000000 --- a/code/controllers/subsystems/processing/vines.dm +++ /dev/null @@ -1,13 +0,0 @@ -// This does NOT process the type of plant that's in a tray. It only does the spreading vines like kudzu. -PROCESSING_SUBSYSTEM_DEF(vines) - name = "Vines" - priority = SS_PRIORITY_VINES - runlevels = RUNLEVEL_GAME|RUNLEVEL_POSTGAME - wait = 80 - - process_proc = /obj/effect/vine/Process - - var/list/vine_list - -/datum/controller/subsystem/processing/vines/PreInit() - vine_list = processing // Simply setups a more recognizable var name than "processing" diff --git a/code/controllers/subsystems/radiation.dm b/code/controllers/subsystems/radiation.dm deleted file mode 100644 index c349c70f14774..0000000000000 --- a/code/controllers/subsystems/radiation.dm +++ /dev/null @@ -1,142 +0,0 @@ -SUBSYSTEM_DEF(radiation) - name = "Radiation" - wait = 2 SECONDS - priority = SS_PRIORITY_RADIATION - flags = SS_NO_INIT - - var/list/sources = list() // all radiation source datums - var/list/sources_assoc = list() // Sources indexed by turf for de-duplication. - var/list/resistance_cache = list() // Cache of turf's radiation resistance. - - var/list/current_sources = list() - var/list/current_res_cache = list() - var/list/listeners = list() - -/datum/controller/subsystem/radiation/fire(resumed = FALSE) - if (!resumed) - current_sources = sources.Copy() - current_res_cache = resistance_cache.Copy() - listeners = GLOB.living_mob_list_.Copy() - - while(current_sources.len) - var/datum/radiation_source/S = current_sources[current_sources.len] - current_sources.len-- - - if(QDELETED(S)) - sources -= S - else if(S.decay) - S.update_rad_power(S.rad_power - config.radiation_decay_rate) - if (MC_TICK_CHECK) - return - - while(current_res_cache.len) - var/turf/T = current_res_cache[current_res_cache.len] - current_res_cache.len-- - - if(QDELETED(T)) - resistance_cache -= T - else if((length(T.contents) + 1) != resistance_cache[T]) - resistance_cache -= T // If its stale REMOVE it! It will get added if its needed. - if (MC_TICK_CHECK) - return - - if(!sources.len) - listeners.Cut() - - while(listeners.len) - var/atom/A = listeners[listeners.len] - listeners.len-- - - if(!QDELETED(A)) - var/atom/location = A.loc - var/rads = 0 - if(istype(location)) - rads = location.get_rads() - if(rads) - A.rad_act(rads) - if (MC_TICK_CHECK) - return - - -/datum/controller/subsystem/radiation/UpdateStat(time) - if (PreventUpdateStat(time)) - return ..() - ..("Sources: [sources.len] Cache: [resistance_cache.len]") - - -// Ray trace from all active radiation sources to T and return the strongest effect. -/datum/controller/subsystem/radiation/proc/get_rads_at_turf(var/turf/T) - . = 0 - if(!istype(T)) - return - - for(var/value in sources) - var/datum/radiation_source/source = value - if(source.rad_power < .) - continue // Already being affected by a stronger source - if(source.source_turf.z != T.z) - continue // Radiation is not multi-z - if(source.respect_maint) - var/area/A = T.loc - if(A.area_flags & AREA_FLAG_RAD_SHIELDED) - continue // In shielded area - - var/dist = get_dist(source.source_turf, T) - if(dist > source.range) - continue // Too far to possibly affect - if(source.flat) - . = max(., source.rad_power) - continue // No need to ray trace for flat field - - // Okay, now ray trace to find resistence! - var/turf/origin = source.source_turf - var/working = source.rad_power - while(origin != T) - origin = get_step_towards(origin, T) //Raytracing - if(!resistance_cache[origin]) //Only get the resistance if we don't already know it. - origin.calc_rad_resistance() - if(origin.cached_rad_resistance) - working = round((working / (origin.cached_rad_resistance * config.radiation_resistance_multiplier)), 0.1) - if((working <= .) || (working <= RADIATION_THRESHOLD_CUTOFF)) - break // Already affected by a stronger source (or its zero...) - . = max((working / (dist ** 2)), .) //Butchered version of the inverse square law. Works for this purpose - if(. <= RADIATION_THRESHOLD_CUTOFF) - . = 0 - -// Add a radiation source instance to the repository. It will override any existing source on the same turf. -/datum/controller/subsystem/radiation/proc/add_source(var/datum/radiation_source/S) - if(!isturf(S.source_turf)) - return - var/datum/radiation_source/existing = sources_assoc[S.source_turf] - if(existing) - qdel(existing) - sources += S - sources_assoc[S.source_turf] = S - -// Creates a temporary radiation source that will decay -/datum/controller/subsystem/radiation/proc/radiate(source, power) //Sends out a radiation pulse, taking walls into account - if(!(source && power)) //Sanity checking - return - var/datum/radiation_source/S = new() - S.source_turf = get_turf(source) - S.update_rad_power(power) - add_source(S) - -// Sets the radiation in a range to a constant value. -/datum/controller/subsystem/radiation/proc/flat_radiate(source, power, range, var/respect_maint = FALSE) - if(!(source && power && range)) - return - var/datum/radiation_source/S = new() - S.flat = TRUE - S.range = range - S.respect_maint = respect_maint - S.source_turf = get_turf(source) - S.update_rad_power(power) - add_source(S) - -// Irradiates a full Z-level. Hacky way of doing it, but not too expensive. -/datum/controller/subsystem/radiation/proc/z_radiate(var/atom/source, power, var/respect_maint = FALSE) - if(!(power && source)) - return - var/turf/epicentre = locate(round(world.maxx / 2), round(world.maxy / 2), source.z) - flat_radiate(epicentre, power, world.maxx, respect_maint) diff --git a/code/controllers/subsystems/shuttle.dm b/code/controllers/subsystems/shuttle.dm deleted file mode 100644 index 3f64cbb28afa6..0000000000000 --- a/code/controllers/subsystems/shuttle.dm +++ /dev/null @@ -1,161 +0,0 @@ -SUBSYSTEM_DEF(shuttle) - name = "Shuttle" - wait = 2 SECONDS - priority = SS_PRIORITY_SHUTTLE - init_order = SS_INIT_SHUTTLE //Should be initialized after all maploading is over and atoms are initialized, to ensure that landmarks have been initialized. - - var/overmap_halted = FALSE //Whether ships can move on the overmap; used for adminbus. - var/list/ships = list() //List of all ships. - - var/list/shuttles = list() //maps shuttle tags to shuttle datums, so that they can be looked up. - var/list/process_shuttles = list() //simple list of shuttles, for processing - var/list/registered_shuttle_landmarks = list() - var/last_landmark_registration_time - var/list/shuttle_logs = list() //Keeps records of shuttle movement, format is list(datum/shuttle = datum/shuttle_log) - var/list/shuttle_areas = list() //All the areas of all shuttles. - var/list/docking_registry = list() //Docking controller tag -> docking controller program, mostly for init purposes. - - var/list/landmarks_awaiting_sector = list() //Stores automatic landmarks that are waiting for a sector to finish loading. - var/list/landmarks_still_needed = list() //Stores landmark_tags that need to be assigned to the sector (landmark_tag = sector) when registered. - var/list/shuttles_to_initialize //A queue for shuttles to initialize at the appropriate time. - var/list/sectors_to_initialize //Used to find all sector objects at the appropriate time. - var/block_queue = TRUE - - var/list/working_shuttles - -/datum/controller/subsystem/shuttle/Initialize(start_uptime) - last_landmark_registration_time = world.time - for(var/shuttle_type in subtypesof(/datum/shuttle)) // This accounts for most shuttles, though away maps can queue up more. - var/datum/shuttle/shuttle = shuttle_type - if(!initial(shuttle.defer_initialisation)) - LAZYDISTINCTADD(shuttles_to_initialize, shuttle_type) - block_queue = FALSE - clear_init_queue() - - -/datum/controller/subsystem/shuttle/fire(resumed = FALSE) - if (!resumed) - working_shuttles = process_shuttles.Copy() - - while (working_shuttles.len) - var/datum/shuttle/shuttle = working_shuttles[working_shuttles.len] - working_shuttles.len-- - if(shuttle.process_state && (shuttle.Process(wait, times_fired, src) == PROCESS_KILL)) - process_shuttles -= shuttle - - if (MC_TICK_CHECK) - return - -/datum/controller/subsystem/shuttle/proc/clear_init_queue() - if(block_queue) - return - initialize_shuttles() - initialize_sectors() - -/datum/controller/subsystem/shuttle/proc/initialize_shuttles() - var/list/shuttles_made = list() - for(var/shuttle_type in shuttles_to_initialize) - var/shuttle = initialize_shuttle(shuttle_type) - if(shuttle) - shuttles_made += shuttle - hook_up_motherships(shuttles_made) - shuttles_to_initialize = null - -/datum/controller/subsystem/shuttle/proc/initialize_sectors() - for(var/sector in sectors_to_initialize) - initialize_sector(sector) - sectors_to_initialize = null - -/datum/controller/subsystem/shuttle/proc/register_landmark(shuttle_landmark_tag, obj/effect/shuttle_landmark/shuttle_landmark) - if (registered_shuttle_landmarks[shuttle_landmark_tag]) - CRASH("Attempted to register shuttle landmark with tag [shuttle_landmark_tag], but it is already registered!") - if (istype(shuttle_landmark)) - registered_shuttle_landmarks[shuttle_landmark_tag] = shuttle_landmark - last_landmark_registration_time = world.time - - var/obj/effect/overmap/visitable/O = landmarks_still_needed[shuttle_landmark_tag] - if(O) //These need to be added to sectors, which we handle. - try_add_landmark_tag(shuttle_landmark_tag, O) - landmarks_still_needed -= shuttle_landmark_tag - else if(istype(shuttle_landmark, /obj/effect/shuttle_landmark/automatic)) //These find their sector automatically - O = map_sectors["[shuttle_landmark.z]"] - O ? O.add_landmark(shuttle_landmark, shuttle_landmark.shuttle_restricted) : (landmarks_awaiting_sector += shuttle_landmark) - -/datum/controller/subsystem/shuttle/proc/get_landmark(var/shuttle_landmark_tag) - return registered_shuttle_landmarks[shuttle_landmark_tag] - -//Checks if the given sector's landmarks have initialized; if so, registers them with the sector, if not, marks them for assignment after they come in. -//Also adds automatic landmarks that were waiting on their sector to spawn. -/datum/controller/subsystem/shuttle/proc/initialize_sector(obj/effect/overmap/visitable/given_sector) - given_sector.populate_sector_objects() // This is a late init operation that sets up the sector's map_z and does non-overmap-related init tasks. - - for(var/landmark_tag in given_sector.initial_generic_waypoints) - if(!try_add_landmark_tag(landmark_tag, given_sector)) - landmarks_still_needed[landmark_tag] = given_sector - - for(var/shuttle_name in given_sector.initial_restricted_waypoints) - for(var/landmark_tag in given_sector.initial_restricted_waypoints[shuttle_name]) - if(!try_add_landmark_tag(landmark_tag, given_sector)) - landmarks_still_needed[landmark_tag] = given_sector - - var/landmarks_to_check = landmarks_awaiting_sector.Copy() - for(var/thing in landmarks_to_check) - var/obj/effect/shuttle_landmark/automatic/landmark = thing - if(landmark.z in given_sector.map_z) - given_sector.add_landmark(landmark, landmark.shuttle_restricted) - landmarks_awaiting_sector -= landmark - -/datum/controller/subsystem/shuttle/proc/try_add_landmark_tag(landmark_tag, obj/effect/overmap/visitable/given_sector) - var/obj/effect/shuttle_landmark/landmark = get_landmark(landmark_tag) - if(!landmark) - return - - if(landmark.landmark_tag in given_sector.initial_generic_waypoints) - given_sector.add_landmark(landmark) - . = 1 - for(var/shuttle_name in given_sector.initial_restricted_waypoints) - if(landmark.landmark_tag in given_sector.initial_restricted_waypoints[shuttle_name]) - given_sector.add_landmark(landmark, shuttle_name) - . = 1 - -/datum/controller/subsystem/shuttle/proc/initialize_shuttle(var/shuttle_type) - var/datum/shuttle/shuttle = shuttle_type - if(initial(shuttle.category) != shuttle_type) - shuttle = new shuttle() - shuttle_areas |= shuttle.shuttle_area - return shuttle - -/datum/controller/subsystem/shuttle/proc/hook_up_motherships(shuttles_list) - for(var/datum/shuttle/S in shuttles_list) - if(S.mothershuttle && !S.motherdock) - var/datum/shuttle/mothership = shuttles[S.mothershuttle] - if(mothership) - S.motherdock = S.current_location.landmark_tag - mothership.shuttle_area |= S.shuttle_area - else - error("Shuttle [S] was unable to find mothership [mothership]!") - -/datum/controller/subsystem/shuttle/proc/toggle_overmap(new_setting) - if(overmap_halted == new_setting) - return - overmap_halted = !overmap_halted - for(var/ship in ships) - var/obj/effect/overmap/visitable/ship/ship_effect = ship - overmap_halted ? ship_effect.halt() : ship_effect.unhalt() - -/datum/controller/subsystem/shuttle/proc/ship_by_name(name) - for (var/obj/effect/overmap/visitable/ship/ship in ships) - if (ship.name == name) - return ship - return null - -/datum/controller/subsystem/shuttle/proc/ship_by_type(type) - for (var/obj/effect/overmap/visitable/ship/ship in ships) - if (ship.type == type) - return ship - return null - -/datum/controller/subsystem/shuttle/UpdateStat(time) - if (PreventUpdateStat(time)) - return ..() - ..("Shuttles [shuttles.len] Ships [ships.len] Landmarks [registered_shuttle_landmarks.len] Halted [overmap_halted ? "Y" : "N"]") diff --git a/code/controllers/subsystems/skybox.dm b/code/controllers/subsystems/skybox.dm deleted file mode 100644 index 797953b7febbd..0000000000000 --- a/code/controllers/subsystems/skybox.dm +++ /dev/null @@ -1,113 +0,0 @@ - -//Exists to handle a few global variables that change enough to justify this. Technically a parallax, but it exhibits a skybox effect. -SUBSYSTEM_DEF(skybox) - name = "Space skybox" - init_order = SS_INIT_SKYBOX - flags = SS_NO_FIRE - var/background_color - var/skybox_icon = 'icons/skybox/skybox.dmi' //Path to our background. Lets us use anything we damn well please. Skyboxes need to be 736x736 - var/background_icon = "dyable" - var/use_stars = TRUE - var/use_overmap_details = TRUE - var/star_path = 'icons/skybox/skybox.dmi' - var/star_state = "stars" - var/list/skybox_cache = list() - var/list/space_appearance_cache - -/datum/controller/subsystem/skybox/PreInit() - build_space_appearances() - - -/datum/controller/subsystem/skybox/UpdateStat(time) - return - - -/datum/controller/subsystem/skybox/proc/build_space_appearances() - space_appearance_cache = new(26) - for (var/i in 0 to 25) - var/mutable_appearance/dust = mutable_appearance('icons/turf/space_dust.dmi', "[i]") - dust.plane = DUST_PLANE - dust.alpha = 80 - dust.blend_mode = BLEND_ADD - - var/mutable_appearance/space = new /mutable_appearance(/turf/space) - space.icon_state = "white" - space.overlays += dust - space_appearance_cache[i + 1] = space.appearance - -/datum/controller/subsystem/skybox/Initialize(start_uptime) - background_color = RANDOM_RGB - -/datum/controller/subsystem/skybox/Recover() - background_color = SSskybox.background_color - skybox_cache = SSskybox.skybox_cache - -/datum/controller/subsystem/skybox/proc/get_skybox(z) - if(!skybox_cache["[z]"]) - skybox_cache["[z]"] = generate_skybox(z) - if(GLOB.using_map.use_overmap) - var/obj/effect/overmap/visitable/O = map_sectors["[z]"] - if(istype(O)) - for(var/zlevel in O.map_z) - skybox_cache["[zlevel]"] = skybox_cache["[z]"] - return skybox_cache["[z]"] - -/datum/controller/subsystem/skybox/proc/generate_skybox(z) - var/image/res = image(skybox_icon) - - var/image/base = overlay_image(skybox_icon, background_icon, background_color) - - if(use_stars) - var/image/stars = overlay_image(skybox_icon, star_state, flags = RESET_COLOR) - base.overlays += stars - - res.overlays += base - - if(GLOB.using_map.use_overmap && use_overmap_details) - var/obj/effect/overmap/visitable/O = map_sectors["[z]"] - if(istype(O)) - var/image/overmap = image(skybox_icon) - overmap.overlays += O.generate_skybox() - for(var/obj/effect/overmap/visitable/other in O.loc) - if(other != O) - overmap.overlays += other.get_skybox_representation() - overmap.appearance_flags |= RESET_COLOR - res.overlays += overmap - - for(var/datum/event/E in SSevent.active_events) - if(E.has_skybox_image && E.isRunning && (z in E.affecting_z)) - res.overlays += E.get_skybox_image() - - return res - -/datum/controller/subsystem/skybox/proc/rebuild_skyboxes(var/list/zlevels) - for(var/z in zlevels) - skybox_cache["[z]"] = generate_skybox(z) - - for(var/client/C) - C.update_skybox(1) - -//Update skyboxes. Called by universes, for now. -/datum/controller/subsystem/skybox/proc/change_skybox(new_state, new_color, new_use_stars, new_use_overmap_details) - var/need_rebuild = FALSE - if(new_state != background_icon) - background_icon = new_state - need_rebuild = TRUE - - if(new_color != background_color) - background_color = new_color - need_rebuild = TRUE - - if(new_use_stars != use_stars) - use_stars = new_use_stars - need_rebuild = TRUE - - if(new_use_overmap_details != use_overmap_details) - use_overmap_details = new_use_overmap_details - need_rebuild = TRUE - - if(need_rebuild) - skybox_cache.Cut() - - for(var/client/C) - C.update_skybox(1) diff --git a/code/controllers/subsystems/supply.dm b/code/controllers/subsystems/supply.dm deleted file mode 100644 index 9f787079348d4..0000000000000 --- a/code/controllers/subsystems/supply.dm +++ /dev/null @@ -1,207 +0,0 @@ -SUBSYSTEM_DEF(supply) - name = "Supply" - wait = 20 SECONDS - priority = SS_PRIORITY_SUPPLY - //Initializes at default time - flags = SS_NO_TICK_CHECK - - //supply points - var/points = 50 - var/points_per_process = 1 - var/points_per_slip = 2 - var/point_sources = list() - var/pointstotalsum = 0 - var/pointstotal = 0 - //control - var/ordernum - var/list/shoppinglist = list() - var/list/requestlist = list() - var/list/donelist = list() - var/list/master_supply_list = list() - //shuttle movement - var/movetime = 1200 - var/datum/shuttle/autodock/ferry/supply/shuttle - var/list/point_source_descriptions = list( - "time" = "Base station supply", - "manifest" = "From exported manifests", - "crate" = "From exported crates", - "gep" = "From uploaded good explorer points", - "total" = "Total" // If you're adding additional point sources, add it here in a new line. Don't forget to put a comma after the old last line. - ) - -/datum/controller/subsystem/supply/Initialize(start_uptime) - ordernum = rand(1,9000) - - //Build master supply list - var/decl/hierarchy/supply_pack/root = decls_repository.get_decl(/decl/hierarchy/supply_pack) - for(var/decl/hierarchy/supply_pack/sp in root.children) - if(sp.is_category()) - for(var/decl/hierarchy/supply_pack/spc in sp.get_descendents()) - spc.setup() - master_supply_list += spc - - for(var/material/mat in SSmaterials.materials) - if(mat.sale_price > 0) - point_source_descriptions[mat.display_name] = "From exported [mat.display_name]" - -// Just add points over time. -/datum/controller/subsystem/supply/fire() - add_points_from_source(points_per_process, "time") - - -/datum/controller/subsystem/supply/UpdateStat(time) - if (PreventUpdateStat(time)) - return ..() - ..("Points: [points]") - - -//Supply-related helper procs. - -/datum/controller/subsystem/supply/proc/add_points_from_source(amount, source) - points += amount - point_sources[source] += amount - point_sources["total"] += amount - - //To stop things being sent to centcomm which should not be sent to centcomm. Recursively checks for these types. -/datum/controller/subsystem/supply/proc/forbidden_atoms_check(atom/A) - if(istype(A,/mob/living)) - return 1 - if(istype(A,/obj/item/disk/nuclear)) - return 1 - if(istype(A,/obj/machinery/nuclearbomb)) - return 1 - if(istype(A,/obj/machinery/tele_beacon)) - return 1 - - for(var/i=1, i<=A.contents.len, i++) - var/atom/B = A.contents[i] - if(.(B)) - return 1 - -/datum/controller/subsystem/supply/proc/sell() - var/list/material_count = list() - - for(var/area/subarea in shuttle.shuttle_area) - for(var/atom/movable/AM in subarea) - if(AM.anchored) - continue - if(istype(AM, /obj/structure/closet/crate)) - var/obj/structure/closet/crate/CR = AM - callHook("sell_crate", list(CR, subarea)) - add_points_from_source(CR.points_per_crate, "crate") - var/find_slip = 1 - - for(var/atom in CR) - // Sell manifests - var/atom/A = atom - if(find_slip && istype(A,/obj/item/paper/manifest)) - var/obj/item/paper/manifest/slip = A - if(!slip.is_copy && slip.stamped && slip.stamped.len) //Any stamp works. - add_points_from_source(points_per_slip, "manifest") - find_slip = 0 - continue - - // Sell materials - if(istype(A, /obj/item/stack/material)) - var/obj/item/stack/material/P = A - if(P.material && P.material.sale_price > 0) - material_count[P.material.display_name] += P.get_amount() * P.material.sale_price * P.matter_multiplier - if(P.reinf_material && P.reinf_material.sale_price > 0) - material_count[P.reinf_material.display_name] += P.get_amount() * P.reinf_material.sale_price * P.matter_multiplier * 0.5 - continue - - // Must sell ore detector disks in crates - if(istype(A, /obj/item/disk/survey)) - var/obj/item/disk/survey/D = A - add_points_from_source(round(D.Value() * 0.005), "gep") - - qdel(AM) - - if(material_count.len) - for(var/material_type in material_count) - add_points_from_source(material_count[material_type], material_type) - -/datum/controller/subsystem/supply/proc/get_clear_turfs() - var/list/clear_turfs = list() - - for(var/area/subarea in shuttle.shuttle_area) - for(var/turf/T in subarea) - if(T.density) - continue - var/occupied = 0 - for(var/atom/A in T.contents) - if(!A.simulated) - continue - occupied = 1 - break - if(!occupied) - clear_turfs += T - - return clear_turfs - -//Buyin -/datum/controller/subsystem/supply/proc/buy() - if(!shoppinglist.len) - return - - var/list/clear_turfs = get_clear_turfs() - - for(var/S in shoppinglist) - if(!clear_turfs.len) - break - var/turf/pickedloc = pick_n_take(clear_turfs) - shoppinglist -= S - donelist += S - - var/datum/supply_order/SO = S - var/decl/hierarchy/supply_pack/SP = SO.object - - var/obj/A = new SP.containertype(pickedloc) - A.SetName("[SP.containername][SO.comment ? " ([SO.comment])":"" ]") - //supply manifest generation begin - - var/obj/item/paper/manifest/slip - if(!SP.contraband) - var/info = list() - info +="

    [GLOB.using_map.boss_name] Shipping Manifest



    " - info +="Order #[SO.ordernum]
    " - info +="Destination: [GLOB.using_map.station_name]
    " - info +="[shoppinglist.len] PACKAGES IN THIS SHIPMENT
    " - info +="CONTENTS:
      " - - slip = new /obj/item/paper/manifest(A, JOINTEXT(info)) - slip.is_copy = 0 - - //spawn the stuff, finish generating the manifest while you're at it - if(SP.access) - if(!islist(SP.access)) - A.req_access = list(SP.access) - else if(islist(SP.access)) - var/list/L = SP.access // access var is a plain var, we need a list - A.req_access = L.Copy() - - var/list/spawned = SP.spawn_contents(A) - if(slip) - for(var/atom/content in spawned) - slip.info += "
    • [content.name]
    • " //add the item to the manifest - slip.info += "

    CHECK CONTENTS AND STAMP BELOW THE LINE TO CONFIRM RECEIPT OF GOODS
    " - -// Adds any given item to the supply shuttle -/datum/controller/subsystem/supply/proc/addAtom(var/atom/movable/A) - var/list/clear_turfs = get_clear_turfs() - if(!clear_turfs.len) - return FALSE - - var/turf/pickedloc = pick(clear_turfs) - - A.forceMove(pickedloc) - - return TRUE - -/datum/supply_order - var/ordernum - var/decl/hierarchy/supply_pack/object = null - var/orderedby = null - var/comment = null - var/reason = null - var/orderedrank = null //used for supply console printing diff --git a/code/controllers/subsystems/throwing.dm b/code/controllers/subsystems/throwing.dm deleted file mode 100644 index 7da5b29e4c49e..0000000000000 --- a/code/controllers/subsystems/throwing.dm +++ /dev/null @@ -1,214 +0,0 @@ -//ported from TG 28/10/2019 - -#define MAX_THROWING_DIST 1280 // 5 z-levels on default width -#define MAX_TICKS_TO_MAKE_UP 3 //how many missed ticks will we attempt to make up for this run. - -SUBSYSTEM_DEF(throwing) - name = "Throwing" - wait = 1 - flags = SS_NO_INIT|SS_KEEP_TIMING - - var/list/currentrun - var/list/processing = list() - - -/datum/controller/subsystem/throwing/UpdateStat(time) - if (PreventUpdateStat(time)) - return ..() - ..("Queue [processing.len]") - - -/datum/controller/subsystem/throwing/fire(resumed = 0) - if (!resumed) - src.currentrun = processing.Copy() - - //cache for sanic speed (lists are references anyways) - var/list/currentrun = src.currentrun - - while(length(currentrun)) - var/atom/movable/AM = currentrun[currentrun.len] - var/datum/thrownthing/TT = currentrun[AM] - currentrun.len-- - if (QDELETED(AM) || QDELETED(TT)) - processing -= AM - if (MC_TICK_CHECK) - return - continue - - TT.tick() - - if (MC_TICK_CHECK) - return - - currentrun = null - -/datum/thrownthing - var/atom/movable/thrownthing - var/atom/target - var/turf/target_turf - var/target_zone - var/init_dir - var/maxrange - var/speed - var/mob/thrower - var/start_time - var/dist_travelled = 0 - var/dist_x - var/dist_y - var/dx - var/dy - var/diagonal_error - var/pure_diagonal - var/datum/callback/callback - var/paused = FALSE - var/delayed_time = 0 - var/last_move = 0 - -/datum/thrownthing/New(var/atom/movable/thrownthing, var/atom/target, var/range, var/speed, var/mob/thrower, var/datum/callback/callback) - ..() - src.thrownthing = thrownthing - src.target = target - src.target_turf = get_turf(target) - src.init_dir = get_dir(thrownthing, target) - src.maxrange = range - src.speed = speed - src.thrower = thrower - src.callback = callback - if(!QDELETED(thrower)) - src.target_zone = thrower.zone_sel ? thrower.zone_sel.selecting : null - - dist_x = abs(target.x - thrownthing.x) - dist_y = abs(target.y - thrownthing.y) - dx = (target.x > thrownthing.x) ? EAST : WEST - dy = (target.y > thrownthing.y) ? NORTH : SOUTH//same up to here - - if (dist_x == dist_y) - pure_diagonal = TRUE - - else if(dist_x <= dist_y) - var/olddist_x = dist_x - var/olddx = dx - dist_x = dist_y - dist_y = olddist_x - dx = dy - dy = olddx - - diagonal_error = dist_x/2 - dist_y - - start_time = world.time - -/datum/thrownthing/Destroy() - SSthrowing.processing -= thrownthing - thrownthing.throwing = null - thrownthing = null - target = null - thrower = null - callback = null - return ..() - -/datum/thrownthing/proc/tick() - var/atom/movable/AM = thrownthing - if (!isturf(AM.loc) || !AM.throwing) - finalize() - return - - if(paused) - delayed_time += world.time - last_move - return - - if (dist_travelled && hitcheck(get_turf(thrownthing))) //to catch sneaky things moving on our tile while we slept - finalize() - return - - var/area/A = get_area(AM.loc) - var/atom/step - - last_move = world.time - - //calculate how many tiles to move, making up for any missed ticks. - var/tilestomove = Ceilm(min(((((world.time+world.tick_lag) - start_time + delayed_time) * speed) - (dist_travelled ? dist_travelled : -1)), speed*MAX_TICKS_TO_MAKE_UP) * (world.tick_lag * SSthrowing.wait), 1) - while (tilestomove-- > 0) - if ((dist_travelled >= maxrange || AM.loc == target_turf) && (A && A.has_gravity())) - finalize() - return - - if (dist_travelled <= max(dist_x, dist_y)) //if we haven't reached the target yet we home in on it, otherwise we use the initial direction - step = get_step(AM, get_dir(AM, target_turf)) - else - step = get_step(AM, init_dir) - - if (!pure_diagonal) // not a purely diagonal trajectory and we don't want all diagonal moves to be done first - if (diagonal_error >= 0 && max(dist_x,dist_y) - dist_travelled != 1) //we do a step forward unless we're right before the target - step = get_step(AM, dx) - diagonal_error += (diagonal_error < 0) ? dist_x/2 : -dist_y - - if (!step) // going off the edge of the map makes get_step return null, don't let things go off the edge - finalize() - return - - if (hitcheck(step)) - finalize() - return - - AM.Move(step, get_dir(AM, step)) - - if (!AM.throwing) // we hit something during our move - finalize(hit = TRUE) - return - - dist_travelled++ - - if (dist_travelled > MAX_THROWING_DIST) - finalize() - return - - A = get_area(AM.loc) - -/datum/thrownthing/proc/finalize(hit = FALSE, t_target=null) - set waitfor = FALSE - //done throwing, either because it hit something or it finished moving - if(QDELETED(thrownthing)) - return - thrownthing.throwing = null - if (!hit) - for (var/thing in get_turf(thrownthing)) //looking for our target on the turf we land on. - var/atom/A = thing - if (A == target) - hit = TRUE - thrownthing.throw_impact(A, src) - break - if (!hit) - thrownthing.throw_impact(get_turf(thrownthing), src) // we haven't hit something yet and we still must, let's hit the ground. - - if(ismob(thrownthing)) - var/mob/M = thrownthing - M.inertia_dir = init_dir - - if(t_target && !QDELETED(thrownthing)) - thrownthing.throw_impact(t_target, src) - - if (callback) - callback.Invoke() - - if (!QDELETED(thrownthing)) - thrownthing.fall() - - qdel(src) - -/datum/thrownthing/proc/hit_atom(atom/A) - finalize(hit=TRUE, t_target=A) - -/datum/thrownthing/proc/hitcheck(var/turf/T) - var/atom/movable/hit_thing - for (var/thing in T) - var/atom/movable/AM = thing - if (AM == thrownthing || (AM == thrower && !ismob(thrownthing))) - continue - if (!AM.density || AM.throwpass)//check if ATOM_FLAG_CHECKS_BORDER as an atom_flag is needed - continue - if (!hit_thing || AM.layer > hit_thing.layer) - hit_thing = AM - - if(hit_thing) - finalize(hit=TRUE, t_target=hit_thing) - return TRUE diff --git a/code/controllers/subsystems/ticker.dm b/code/controllers/subsystems/ticker.dm deleted file mode 100644 index 112d31aeb5f0b..0000000000000 --- a/code/controllers/subsystems/ticker.dm +++ /dev/null @@ -1,577 +0,0 @@ -SUBSYSTEM_DEF(ticker) - name = "Ticker" - wait = 10 - priority = SS_PRIORITY_TICKER - init_order = SS_INIT_TICKER - flags = SS_NO_TICK_CHECK | SS_KEEP_TIMING - runlevels = RUNLEVEL_LOBBY | RUNLEVELS_DEFAULT - - var/pregame_timeleft - var/start_ASAP = FALSE //the game will start as soon as possible, bypassing all pre-game nonsense - var/list/gamemode_vote_results //Will be a list, in order of preference, of form list(config_tag = number of votes). - var/bypass_gamemode_vote = 0 //Intended for use with admin tools. Will avoid voting and ignore any results. - - var/master_mode = "extended" //The underlying game mode (so "secret" or the voted mode). Saved to default back to previous round's mode in case the vote failed. This is a config_tag. - var/datum/game_mode/mode //The actual gamemode, if selected. - var/round_progressing = 1 //Whether the lobby clock is ticking down. - - var/list/bad_modes = list() //Holds modes we tried to start and failed to. - var/revotes_allowed = 0 //How many times a game mode revote might be attempted before giving up. - - var/end_game_state = END_GAME_NOT_OVER - var/delay_end = 0 //Can be set true to postpone restart. - var/delay_notified = 0 //Spam prevention. - var/restart_timeout = 1 MINUTE - - var/list/minds = list() //Minds of everyone in the game. - var/list/antag_pool = list() - var/looking_for_antags = 0 - - var/secret_force_mode = "secret" - - ///Set to TRUE when an admin forcefully ends the round. - var/forced_end = FALSE - - var/static/list/mode_tags = list() - - var/static/list/mode_names = list() - - var/static/list/mode_cache = list() - - var/static/list/mode_probabilities = list() - - var/static/list/votable_modes = list() - - /// True when the game is over. - var/static/game_over = FALSE - - -/datum/controller/subsystem/ticker/Initialize(start_uptime) - pregame_timeleft = config.pre_game_time SECONDS - build_mode_cache() - to_world("Welcome to the pre-game lobby!") - to_world("Please, setup your character and select ready. Game will start in [round(pregame_timeleft/10)] seconds") - - -/datum/controller/subsystem/ticker/fire(resumed, no_mc_tick) - switch(GAME_STATE) - if(RUNLEVEL_LOBBY) - pregame_tick() - if(RUNLEVEL_SETUP) - setup_tick() - if(RUNLEVEL_GAME) - playing_tick() - if(RUNLEVEL_POSTGAME) - post_game_tick() - - -/datum/controller/subsystem/ticker/proc/build_mode_cache() - mode_tags = list() - mode_names = list() - mode_cache = list() - mode_probabilities = list() - for (var/datum/game_mode/mode as anything in subtypesof(/datum/game_mode)) - var/tag = initial(mode.config_tag) - if (!tag) - continue - mode_cache[tag] = (mode = new mode) - if (tag in mode_tags) - continue - mode_tags += tag - mode_names[tag] = mode.name - mode_probabilities[tag] = 0 - if (mode.votable) - votable_modes += tag - votable_modes -= config.disallowed_modes - for (var/key in config.probabilities) - mode_probabilities[key] = config.probabilities[key] - - -/datum/controller/subsystem/ticker/proc/get_runnable_modes() - var/list/lobby_players = lobby_players() - var/list/result = list() - for (var/tag in mode_cache) - var/datum/game_mode/mode = mode_cache[tag] - if (mode_probabilities[tag] > 0 && !mode.check_startable(lobby_players)) - result[tag] = mode_probabilities[tag] - return result - - -/datum/controller/subsystem/ticker/proc/pick_mode(mode_name) - if (!mode_name) - return - for (var/tag in SSticker.mode_cache) - var/datum/game_mode/M = SSticker.mode_cache[tag] - if (M.config_tag == mode_name) - return M - - -/datum/controller/subsystem/ticker/proc/pregame_tick() - if(start_ASAP) - start_now() - return - if(round_progressing && last_fire) - pregame_timeleft -= world.time - last_fire - if(pregame_timeleft <= 0) - Master.SetRunLevel(RUNLEVEL_SETUP) - return - - if(!bypass_gamemode_vote && (pregame_timeleft <= config.vote_autogamemode_timeleft SECONDS) && !gamemode_vote_results) -#ifndef UNIT_TEST - var/list/lobby = lobby_players() - if (!length(lobby)) - pregame_timeleft = config.vote_period + 60 SECONDS - return -#endif - if(!SSvote.active_vote) - SSvote.initiate_vote(/datum/vote/gamemode, automatic = 1) - -/datum/controller/subsystem/ticker/proc/setup_tick() -#ifndef UNIT_TEST - if (!start_ASAP) - var/list/ready = ready_players() - if (!length(ready)) - pregame_timeleft = config.vote_period + 30 SECONDS - gamemode_vote_results = null - Master.SetRunLevel(RUNLEVEL_LOBBY) - to_world("No ready players. Returning to pre-game lobby.") - return -#endif - - switch(choose_gamemode()) - if(CHOOSE_GAMEMODE_SILENT_REDO) - log_debug("Silently re-rolling game mode...") - return - if(CHOOSE_GAMEMODE_RETRY) - pregame_timeleft = 30 SECONDS - Master.SetRunLevel(RUNLEVEL_LOBBY) - to_world("Unable to choose playable game mode. Reverting to pre-game lobby to try again.") - return - if(CHOOSE_GAMEMODE_REVOTE) - revotes_allowed-- - pregame_timeleft = config.vote_period + 30 SECONDS - gamemode_vote_results = null - Master.SetRunLevel(RUNLEVEL_LOBBY) - to_world("Unable to choose playable game mode. Reverting to pre-game lobby for a revote.") - return - if(CHOOSE_GAMEMODE_RESTART) - to_world("Unable to choose playable game mode. Restarting world.") - world.Reboot("Failure to select gamemode. Tried [english_list(bad_modes)].") - return - // This means we succeeded in picking a game mode. - GLOB.using_map.setup_economy() - Master.SetRunLevel(RUNLEVEL_GAME) - - create_characters() //Create player characters and transfer them - collect_minds() - equip_characters() - for(var/mob/living/carbon/human/H in GLOB.player_list) - if(H.mind && !player_is_antag(H.mind, only_offstation_roles = 1)) - var/datum/job/job = SSjobs.get_by_title(H.mind.assigned_role) - if(job && job.create_record) - CreateModularRecord(H) - - callHook("roundstart") - - spawn(0)//Forking here so we dont have to wait for this to finish - mode.post_setup() // Drafts antags who don't override jobs. - to_world("Enjoy the game!") - sound_to(world, sound(GLOB.using_map.welcome_sound)) - - for (var/mob/new_player/player in GLOB.player_list) - player.new_player_panel() - - if(!GLOB.admins.len) - send2adminirc("Round has started with no admins online.") - -/datum/controller/subsystem/ticker/proc/playing_tick() - mode.process() - var/mode_finished = mode_finished() - - if(mode_finished && game_finished()) - Master.SetRunLevel(RUNLEVEL_POSTGAME) - end_game_state = END_GAME_READY_TO_END - INVOKE_ASYNC(src, .proc/declare_completion) - if(config.allow_map_switching && config.auto_map_vote && GLOB.all_maps.len > 1) - SSvote.initiate_vote(/datum/vote/map/end_game, automatic = 1) - - else if(mode_finished && (end_game_state <= END_GAME_NOT_OVER)) - end_game_state = END_GAME_MODE_FINISH_DONE - mode.cleanup() - log_and_message_admins(": All antagonists are deceased or the gamemode has ended.") //Outputs as "Event: All antagonists are deceased or the gamemode has ended." - SSvote.initiate_vote(/datum/vote/transfer, automatic = 1) - -/datum/controller/subsystem/ticker/proc/post_game_tick() - switch(end_game_state) - if(END_GAME_AWAITING_MAP) - return - if(END_GAME_READY_TO_END) - end_game_state = END_GAME_ENDING - callHook("roundend") - if (game_over) - if(!delay_end) - to_world("Rebooting due to destruction of [station_name()] in [restart_timeout/10] seconds") - - else - if(!delay_end) - to_world("Restarting in [restart_timeout/10] seconds") - handle_tickets() - if(END_GAME_ENDING) - restart_timeout -= (world.time - last_fire) - if(restart_timeout <= 0) - world.Reboot() - if(delay_end) - notify_delay() - end_game_state = END_GAME_DELAYED - if(END_GAME_AWAITING_TICKETS) - handle_tickets() - if(END_GAME_DELAYED) - if(!delay_end) - end_game_state = END_GAME_ENDING - else - end_game_state = END_GAME_READY_TO_END - log_error("Ticker arrived at round end in an unexpected endgame state.") - - -/datum/controller/subsystem/ticker/UpdateStat(time) - if (PreventUpdateStat(time)) - return ..() - switch (GAME_STATE) - if (RUNLEVEL_LOBBY) - ..("[round_progressing ? "START: [round(pregame_timeleft / 10)]s" : "(PAUSED)"]") - if (RUNLEVEL_SETUP) - ..("SETUP") - if (RUNLEVEL_GAME) - ..("GAME") - if (RUNLEVEL_POSTGAME) - switch (end_game_state) - if (END_GAME_NOT_OVER) - ..("ENDGAME ERROR") - if (END_GAME_AWAITING_MAP) - ..("MAP VOTE") - if (END_GAME_MODE_FINISH_DONE) - ..("MODE OVER, WAITING") - if (END_GAME_READY_TO_END) - ..("ENDGAME PROCESSING") - if (END_GAME_DELAYED) - ..("PAUSED") - if (END_GAME_AWAITING_TICKETS) - ..("AWAITING TICKETS") - if (END_GAME_ENDING) - ..("END IN [round(restart_timeout / 10)]s") - else - ..() - else - ..() - - -/datum/controller/subsystem/ticker/Recover() - pregame_timeleft = SSticker.pregame_timeleft - gamemode_vote_results = SSticker.gamemode_vote_results - bypass_gamemode_vote = SSticker.bypass_gamemode_vote - - master_mode = SSticker.master_mode - mode = SSticker.mode - round_progressing = SSticker.round_progressing - - end_game_state = SSticker.end_game_state - delay_end = SSticker.delay_end - delay_notified = SSticker.delay_notified - - minds = SSticker.minds - -/* -Helpers -*/ - -/datum/controller/subsystem/ticker/proc/choose_gamemode() - . = (revotes_allowed && !bypass_gamemode_vote) ? CHOOSE_GAMEMODE_REVOTE : CHOOSE_GAMEMODE_RESTART - - var/mode_to_try = master_mode //This is the config tag - var/datum/game_mode/mode_datum - - //Decide on the mode to try. - if(!bypass_gamemode_vote && gamemode_vote_results) - gamemode_vote_results -= bad_modes - if(length(gamemode_vote_results)) - mode_to_try = gamemode_vote_results[1] - . = CHOOSE_GAMEMODE_RETRY //Worth it to try again at least once. - else - mode_to_try = "extended" - - if(!mode_to_try) - log_debug("Could not find a valid game mode from config or vote results.") - return - if(mode_to_try in bad_modes) - log_debug("Could not start game mode [mode_to_try] - Mode is listed in bad_modes.") - return - - //Find the relevant datum, resolving secret in the process. - var/list/base_runnable_modes = get_runnable_modes() //format: list(config_tag = weight) - if (mode_to_try=="secret") - var/list/runnable_modes = base_runnable_modes - bad_modes - if(secret_force_mode != "secret") // Config option to force secret to be a specific mode. - mode_datum = pick_mode(secret_force_mode) - else if(!length(runnable_modes)) // Indicates major issues; will be handled on return. - bad_modes += mode_to_try - log_debug("Could not start game mode [mode_to_try] - No runnable modes available to start, or all options listed under bad modes.") - return - else - mode_datum = pick_mode(pickweight(runnable_modes)) - if(length(runnable_modes) > 1) // More to pick if we fail; we won't tell anyone we failed unless we fail all possibilities, though. - . = CHOOSE_GAMEMODE_SILENT_REDO - else - mode_datum = pick_mode(mode_to_try) - if(!istype(mode_datum)) - bad_modes += mode_to_try - log_debug("Could not find a valid game mode for [mode_to_try].") - return - - //Deal with jobs and antags, check that we can actually run the mode. - SSjobs.reset_occupations() // Clears all players' role assignments. Clean slate. - mode_datum.create_antagonists() // Init operation on the mode; sets up antag datums and such. - mode_datum.pre_setup() // Makes lists of viable candidates; performs candidate draft for job-override roles; stores the draft result both internally and on the draftee. - SSjobs.divide_occupations(mode_datum) // Gives out jobs to everyone who was not selected to antag. - var/list/lobby_players = SSticker.lobby_players() - var/result = mode_datum.check_startable(lobby_players) - if(result) - mode_datum.fail_setup() - SSjobs.reset_occupations() - bad_modes += mode_datum.config_tag - log_debug("Could not start game mode [mode_to_try] ([mode_datum.name]) - Failed to meet requirements - [result]") - return - - //Declare victory, make an announcement. - . = CHOOSE_GAMEMODE_SUCCESS - mode = mode_datum - master_mode = mode_to_try - if(mode_to_try == "secret") - to_world("The current game mode is Secret!") - var/list/mode_names = list() - for (var/mode_tag in base_runnable_modes) - var/datum/game_mode/M = mode_cache[mode_tag] - if(M) - mode_names += M.name - if (config.secret_hide_possibilities) - message_admins("Possibilities: [english_list(mode_names)]") - else - to_world("Possibilities: [english_list(mode_names)]") - else - mode.announce() - -/datum/controller/subsystem/ticker/proc/create_characters() - for(var/mob/new_player/player in GLOB.player_list) - if(player && player.ready && player.mind) - if(player.mind.assigned_role=="AI") - player.close_spawn_windows() - player.AIize() - else if(!player.mind.assigned_role) - continue - else - if(player.create_character()) - qdel(player) - -/datum/controller/subsystem/ticker/proc/lobby_players(list/players) - if (!players) - players = GLOB.player_list - var/list/lobby_players = list() - for (var/mob/new_player/player in players) - if (!player.client) - continue - lobby_players += player - return lobby_players - - -/datum/controller/subsystem/ticker/proc/ready_players(list/players) - if (!players) - players = lobby_players() - var/list/ready_players = list() - for (var/mob/new_player/player as anything in players) - if (!player.ready) - continue - ready_players += player - return ready_players - - -/datum/controller/subsystem/ticker/proc/collect_minds() - for(var/mob/living/player in GLOB.player_list) - if(player.mind) - minds += player.mind - -/datum/controller/subsystem/ticker/proc/equip_characters() - var/captainless=1 - for(var/mob/living/carbon/human/player in GLOB.player_list) - if(player && player.mind && player.mind.assigned_role) - if(player.mind.assigned_role == "Captain") - captainless=0 - if(!player_is_antag(player.mind, only_offstation_roles = 1)) - SSjobs.equip_rank(player, player.mind.assigned_role, 0) - SScustomitems.equip_custom_items(player) - if(captainless) - for(var/mob/M in GLOB.player_list) - if(!istype(M,/mob/new_player)) - to_chat(M, "Captainship not forced on anyone.") - -/datum/controller/subsystem/ticker/proc/attempt_late_antag_spawn(var/list/antag_choices) - var/datum/antagonist/antag = antag_choices[1] - while(antag_choices.len && antag) - var/needs_ghost = antag.flags & (ANTAG_OVERRIDE_JOB | ANTAG_OVERRIDE_MOB) - if (needs_ghost) - looking_for_antags = 1 - antag_pool.Cut() - to_world("A ghost is needed to spawn \a [antag.role_text].\nGhosts may enter the antag pool by making sure their [antag.role_text] preference is set to high, then using the toggle-add-antag-candidacy verb. You have 3 minutes to enter the pool.") - - sleep(3 MINUTES) - looking_for_antags = 0 - antag.update_current_antag_max(mode) - antag.build_candidate_list(mode, needs_ghost) - for(var/datum/mind/candidate in antag.candidates) - if(!(candidate in antag_pool)) - antag.candidates -= candidate - log_debug("[candidate.key] was not in the antag pool and could not be selected.") - else - antag.update_current_antag_max(mode) - antag.build_candidate_list(mode, needs_ghost) - for(var/datum/mind/candidate in antag.candidates) - if(isghostmind(candidate)) - antag.candidates -= candidate - log_debug("[candidate.key] is a ghost and can not be selected.") - if(length(antag.candidates) >= antag.initial_spawn_req) - antag.attempt_spawn() - antag.finalize_spawn() - additional_antag_types.Add(antag.id) - return 1 - else - if(antag.initial_spawn_req > 1) - to_world("Failed to find enough [antag.role_text_plural].") - - else - to_world("Failed to find a [antag.role_text].") - - antag_choices -= antag - if(length(antag_choices)) - antag = antag_choices[1] - if(antag) - to_world("Attempting to spawn [antag.role_text_plural].") - return 0 - -/datum/controller/subsystem/ticker/proc/game_finished() - if (forced_end) - return TRUE - - if(mode.explosion_in_progress) - return 0 - if(config.continous_rounds) - return evacuation_controller.round_over() || mode.station_was_nuked - else - return mode.check_finished() || (evacuation_controller.round_over() && evacuation_controller.emergency_evacuation) || game_over - -/datum/controller/subsystem/ticker/proc/mode_finished() - if (forced_end) - return TRUE - - if(config.continous_rounds) - return mode.check_finished() - else - return game_finished() - -/datum/controller/subsystem/ticker/proc/notify_delay() - if(!delay_notified) - to_world("An admin has delayed the round end") - delay_notified = 1 - -/datum/controller/subsystem/ticker/proc/handle_tickets() - for(var/datum/ticket/ticket in tickets) - if(ticket.is_active()) - if(!delay_notified) - message_staff("Automatically delaying restart due to active tickets.") - notify_delay() - end_game_state = END_GAME_AWAITING_TICKETS - return - message_staff("No active tickets remaining, restarting in [restart_timeout/10] seconds if an admin has not delayed the round end.") - end_game_state = END_GAME_ENDING - -/datum/controller/subsystem/ticker/proc/declare_completion() - to_world("


    A round of [mode.name] has ended!

    ") - for(var/client/C) - if(!C.credits) - C.RollCredits() - - GLOB.using_map.roundend_player_status() - - to_world("
    ") - - for(var/mob/living/silicon/ai/aiPlayer in SSmobs.mob_list) - var/show_ai_key = aiPlayer.get_preference_value(/datum/client_preference/show_ckey_credits) == GLOB.PREF_SHOW - to_world("[aiPlayer.name][show_ai_key ? " (played by [aiPlayer.key])" : ""]'s laws at the [aiPlayer.stat == 2 ? "time of their deactivation" : "end of round"] were:") - aiPlayer.show_laws(1) - - if (aiPlayer.connected_robots.len) - var/minions = "[aiPlayer.name]'s loyal minions were:" - for(var/mob/living/silicon/robot/robo in aiPlayer.connected_robots) - var/show_robot_key = robo.get_preference_value(/datum/client_preference/show_ckey_credits) == GLOB.PREF_SHOW - minions += " [robo.name][show_robot_key ? "(played by: [robo.key])" : ""][robo.stat ? " (deactivated)" : ""]," - to_world(minions) - - var/dronecount = 0 - - for (var/mob/living/silicon/robot/robo in SSmobs.mob_list) - - if(istype(robo,/mob/living/silicon/robot/drone)) - dronecount++ - continue - - if (!robo.connected_ai) - var/show_robot_key = robo.get_preference_value(/datum/client_preference/show_ckey_credits) == GLOB.PREF_SHOW - to_world("[robo.name][show_robot_key ? " (played by [robo.key])" : ""]'s individual laws at the [robo.stat == 2 ? "time of their deactivation" : "end of round"] were:") - - if(robo) //How the hell do we lose robo between here and the world messages directly above this? - robo.laws.show_laws(world) - - if(dronecount) - to_world("There [dronecount>1 ? "were" : "was"] [dronecount] industrious maintenance [dronecount>1 ? "drones" : "drone"] at the end of this round.") - - if(all_money_accounts.len) - var/datum/money_account/max_profit = all_money_accounts[1] - var/datum/money_account/max_loss = all_money_accounts[1] - for(var/datum/money_account/D in all_money_accounts) - if(D == vendor_account) //yes we know you get lots of money - continue - var/saldo = D.get_balance() - if(saldo >= max_profit.get_balance()) - max_profit = D - if(saldo <= max_loss.get_balance()) - max_loss = D - to_world("[max_profit.owner_name] received most PROFIT today, with net profit of [GLOB.using_map.local_currency_name_short][max_profit.get_balance()].") - to_world("On the other hand, [max_loss.owner_name] had most LOSS, with total loss of [GLOB.using_map.local_currency_name_short][max_loss.get_balance()].") - - mode.declare_completion()//To declare normal completion. - - //Ask the event manager to print round end information - SSevent.RoundEnd() - - //Print a list of antagonists to the server log - var/list/total_antagonists = list() - //Look into all mobs in world, dead or alive - for(var/datum/mind/Mind in minds) - var/temprole = Mind.special_role - if(temprole) //if they are an antagonist of some sort. - if(temprole in total_antagonists) //If the role exists already, add the name to it - total_antagonists[temprole] += ", [Mind.name]([Mind.key])" - else - total_antagonists.Add(temprole) //If the role doesnt exist in the list, create it and add the mob - total_antagonists[temprole] += ": [Mind.name]([Mind.key])" - - //Now print them all into the log! - log_game("Antagonists at round end were...") - for(var/i in total_antagonists) - log_game("[i]s[total_antagonists[i]].") - -/datum/controller/subsystem/ticker/proc/start_now(mob/user) - if(!(GAME_STATE == RUNLEVEL_LOBBY)) - return - if(istype(SSvote.active_vote, /datum/vote/gamemode)) - SSvote.cancel_vote(user) - bypass_gamemode_vote = 1 - Master.SetRunLevel(RUNLEVEL_SETUP) - return 1 diff --git a/code/controllers/subsystems/timer.dm b/code/controllers/subsystems/timer.dm deleted file mode 100644 index 295b2c1a335bb..0000000000000 --- a/code/controllers/subsystems/timer.dm +++ /dev/null @@ -1,671 +0,0 @@ -/// Controls how many buckets should be kept, each representing a tick. (1 minutes worth) -#define BUCKET_LEN (world.fps * 60) -/// Helper for getting the correct bucket for a given timer -#define BUCKET_POS(timer) (((round((timer.timeToRun - SStimer.head_offset) / world.tick_lag) + 1) % BUCKET_LEN) || BUCKET_LEN) -/// Gets the maximum time at which timers will be invoked from buckets, used for deferring to secondary queue -#define TIMER_MAX(timer_ss) (world.time + (min(BUCKET_LEN - (timer_ss.practical_offset - (world.time - timer_ss.head_offset) / world.tick_lag)-1, BUCKET_LEN - 1)) * world.tick_lag) -/// Max float with integer precision -#define TIMER_ID_MAX (2**24) - -/** - * # Timer Subsystem - * - * Handles creation, callbacks, and destruction of timed events. - * - * It is important to understand the buckets used in the timer subsystem are just a series of doubly-linked - * lists. The object at a given index in bucket_list is a /datum/timedevent, the head of a list, which has prev - * and next references for the respective elements in that bucket's list. - */ -SUBSYSTEM_DEF(timer) - name = "Timer" - wait = 1 //SS_TICKER subsystem, so wait is in ticks - priority = SS_PRIORITY_TIMER - - flags = SS_NO_INIT | SS_TICKER - - /// Queue used for storing timers that do not fit into the current buckets - var/list/datum/timedevent/second_queue = list() - /// A hashlist dictionary used for storing unique timers - var/list/hashes = list() - /// world.time of the first entry in the bucket list, effectively the 'start time' of the current buckets - var/head_offset = 0 - /// Index of the wrap around pivot for buckets. buckets before this are later running buckets wrapped around from the end of the bucket list. - var/practical_offset = 1 - /// world.tick_lag the bucket was designed for - var/bucket_resolution = 0 - /// How many timers are in the buckets - var/bucket_count = 0 - /// List of buckets, each bucket holds every timer that has to run that byond tick - var/list/bucket_list = list() - /// List of all active timers associated to their timer ID (for easy lookup) - var/list/timer_id_dict = list() - /// Special timers that run in real-time, not BYOND time; these are more expensive to run and maintain - var/list/clienttime_timers = list() - /// Contains the last time that a timer's callback was invoked, or the last tick the SS fired if no timers are being processed - var/last_invoke_tick = 0 - /// Keeps track of the next index to work on for client timers - var/next_clienttime_timer_index = 0 - /// Contains the last time that a warning was issued for not invoking callbacks - var/static/last_invoke_warning = 0 - /// Boolean operator controlling if the timer SS will automatically reset buckets if it fails to invoke callbacks for an extended period of time - var/static/bucket_auto_reset = TRUE - /// How many times bucket was reset - var/bucket_reset_count = 0 - - -/datum/controller/subsystem/timer/PreInit() - bucket_list.len = BUCKET_LEN - head_offset = world.time - bucket_resolution = world.tick_lag - - -/datum/controller/subsystem/timer/UpdateStat(time) - if (PreventUpdateStat(time)) - return ..() - ..({"\ - Buckets [bucket_count] \ - Queue2 [length(second_queue)] \ - Hashes [length(hashes)] \ - Client Timers [length(clienttime_timers)] \ - Size [length(timer_id_dict)] \ - Resets [bucket_reset_count]\ - "}) - - -/datum/controller/subsystem/timer/proc/dump_timer_buckets(full = TRUE) - var/list/to_log = list("Timer bucket reset. world.time: [world.time], head_offset: [head_offset], practical_offset: [practical_offset]") - if (full) - for (var/i in 1 to length(bucket_list)) - var/datum/timedevent/bucket_head = bucket_list[i] - if (!bucket_head) - continue - - to_log += "Active timers at index [i]:" - var/datum/timedevent/bucket_node = bucket_head - var/anti_loop_check = 1 - do - to_log += get_timer_debug_string(bucket_node) - bucket_node = bucket_node.next - anti_loop_check-- - while(bucket_node && bucket_node != bucket_head && anti_loop_check) - - to_log += "Active timers in the second_queue queue:" - for(var/I in second_queue) - to_log += get_timer_debug_string(I) - - // Dump all the logged data to the world log - log_ss(name, to_log.Join("\n")) - -/datum/controller/subsystem/timer/fire(resumed = FALSE) - // Store local references to datum vars as it is faster to access them - var/lit = last_invoke_tick - var/list/bucket_list = src.bucket_list - var/last_check = world.time - BUCKET_LEN * 1.5 * world.tick_lag - - // If there are no timers being tracked, then consider now to be the last invoked time - if(!bucket_count) - last_invoke_tick = world.time - - // Check that we have invoked a callback in the last 1.5 minutes of BYOND time, - // and throw a warning and reset buckets if this is true - if(lit && lit < last_check && head_offset < last_check && last_invoke_warning < last_check) - last_invoke_warning = world.time - var/msg = "No regular timers processed in the last [BUCKET_LEN * 1.5] ticks[bucket_auto_reset ? ", resetting buckets" : ""]!" - message_admins(msg) - WARNING(msg) - if(bucket_auto_reset) - bucket_resolution = 0 - dump_timer_buckets(config.log_timers_on_bucket_reset) - - // Process client-time timers - if (next_clienttime_timer_index) - clienttime_timers.Cut(1, next_clienttime_timer_index+1) - next_clienttime_timer_index = 0 - for (next_clienttime_timer_index in 1 to length(clienttime_timers)) - if (MC_TICK_CHECK) - next_clienttime_timer_index-- - break - var/datum/timedevent/ctime_timer = clienttime_timers[next_clienttime_timer_index] - if (ctime_timer.timeToRun > Uptime()) - next_clienttime_timer_index-- - break - - var/datum/callback/callBack = ctime_timer.callBack - if (!callBack) - CRASH("Invalid timer: [get_timer_debug_string(ctime_timer)] world.time: [world.time], \ - head_offset: [head_offset], practical_offset: [practical_offset], Uptime(): [Uptime()]") - - ctime_timer.spent = Uptime() - callBack.InvokeAsync() - - if(ctime_timer.flags & TIMER_LOOP) - ctime_timer.spent = 0 - ctime_timer.timeToRun = Uptime() + ctime_timer.wait - BINARY_INSERT(ctime_timer, clienttime_timers, /datum/timedevent, ctime_timer, timeToRun, COMPARE_KEY) - else - qdel(ctime_timer) - - // Remove invoked client-time timers - if (next_clienttime_timer_index) - clienttime_timers.Cut(1, next_clienttime_timer_index+1) - next_clienttime_timer_index = 0 - - // Check for when we need to loop the buckets, this occurs when - // the head_offset is approaching BUCKET_LEN ticks in the past - if (practical_offset > BUCKET_LEN) - head_offset += BUCKET_LEN * world.tick_lag - practical_offset = 1 - resumed = FALSE - - // Check for when we have to reset buckets, typically from auto-reset - if ((length(bucket_list) != BUCKET_LEN) || (world.tick_lag != bucket_resolution)) - reset_buckets() - bucket_list = src.bucket_list - resumed = FALSE - - - // Iterate through each bucket starting from the practical offset - while (practical_offset <= BUCKET_LEN && head_offset + ((practical_offset - 1) * world.tick_lag) <= world.time) - var/datum/timedevent/timer - while ((timer = bucket_list[practical_offset])) - var/datum/callback/callBack = timer.callBack - if (!callBack) - stack_trace("Invalid timer: [get_timer_debug_string(timer)] world.time: [world.time], \ - head_offset: [head_offset], practical_offset: [practical_offset], bucket_joined: [timer.bucket_joined]") - if (!timer.spent) - bucket_resolution = null // force bucket recreation - return - - timer.bucketEject() //pop the timer off of the bucket list. - - // Invoke callback if possible - if (!timer.spent) - timer.spent = world.time - callBack.InvokeAsync() - last_invoke_tick = world.time - - if (timer.flags & TIMER_LOOP) // Prepare looping timers to re-enter the queue - timer.spent = 0 - timer.timeToRun = world.time + timer.wait - timer.bucketJoin() - else - qdel(timer) - - if (MC_TICK_CHECK) - break - - if (!bucket_list[practical_offset]) - // Empty the bucket, check if anything in the secondary queue should be shifted to this bucket - bucket_list[practical_offset] = null // Just in case - practical_offset++ - var/i = 0 - for (i in 1 to length(second_queue)) - timer = second_queue[i] - if (timer.timeToRun >= TIMER_MAX(src)) - i-- - break - - // Check for timers that are scheduled to run in the past - if (timer.timeToRun < head_offset) - bucket_resolution = null // force bucket recreation - stack_trace("[i] Invalid timer state: Timer in long run queue with a time to run less then head_offset. \ - [get_timer_debug_string(timer)] world.time: [world.time], head_offset: [head_offset], practical_offset: [practical_offset]") - break - - // Check for timers that are not capable of being scheduled to run without rebuilding buckets - if (timer.timeToRun < head_offset + (practical_offset - 1) * world.tick_lag) - bucket_resolution = null // force bucket recreation - stack_trace("[i] Invalid timer state: Timer in long run queue that would require a backtrack to transfer to \ - short run queue. [get_timer_debug_string(timer)] world.time: [world.time], head_offset: [head_offset], practical_offset: [practical_offset]") - break - - timer.bucketJoin() - if (i) - second_queue.Cut(1, i+1) - if (MC_TICK_CHECK) - break - -/** - * Generates a string with details about the timed event for debugging purposes - */ -/datum/controller/subsystem/timer/proc/get_timer_debug_string(datum/timedevent/TE) - . = "Timer: [TE]" - . += "Prev: [TE.prev ? TE.prev : "NULL"], Next: [TE.next ? TE.next : "NULL"]" - if(TE.spent) - . += ", SPENT([TE.spent])" - if(QDELETED(TE)) - . += ", QDELETED" - if(!TE.callBack) - . += ", NO CALLBACK" - -/** - * Destroys the existing buckets and creates new buckets from the existing timed events - */ -/datum/controller/subsystem/timer/proc/reset_buckets() - log_debug("Timer buckets has been reset, this may cause timer to lag") - bucket_reset_count++ - - var/list/bucket_list = src.bucket_list // Store local reference to datum var, this is faster - var/list/alltimers = list() - - // Get all timers currently in the buckets - for (var/bucket_head in bucket_list) - if (!bucket_head) // if bucket is empty for this tick - continue - var/datum/timedevent/bucket_node = bucket_head - do - alltimers += bucket_node - bucket_node = bucket_node.next - while(bucket_node && bucket_node != bucket_head) - - // Empty the list by zeroing and re-assigning the length - bucket_list.len = 0 - bucket_list.len = BUCKET_LEN - - // Reset values for the subsystem to their initial values - practical_offset = 1 - bucket_count = 0 - head_offset = world.time - bucket_resolution = world.tick_lag - - // Add all timed events from the secondary queue as well - alltimers += second_queue - - for (var/datum/timedevent/t as anything in alltimers) - t.timer_subsystem = src // Recovered timers need to be reparented - t.bucket_joined = FALSE - t.bucket_pos = -1 - t.prev = null - t.next = null - - // If there are no timers being tracked by the subsystem, - // there is no need to do any further rebuilding - if (!length(alltimers)) - return - - // Sort all timers by time to run - sortTim(alltimers, .proc/cmp_timer) - - // Get the earliest timer, and if the TTR is earlier than the current world.time, - // then set the head offset appropriately to be the earliest time tracked by the - // current set of buckets - var/datum/timedevent/head = alltimers[1] - if (head.timeToRun < head_offset) - head_offset = head.timeToRun - - // Iterate through each timed event and insert it into an appropriate bucket, - // up unto the point that we can no longer insert into buckets as the TTR - // is outside the range we are tracking, then insert the remainder into the - // secondary queue - var/new_bucket_count - var/i = 1 - for (i in 1 to length(alltimers)) - var/datum/timedevent/timer = alltimers[i] - if (!timer) - continue - - // Check that the TTR is within the range covered by buckets, when exceeded we've finished - if (timer.timeToRun >= TIMER_MAX(src)) - i-- - break - - // Check that timer has a valid callback and hasn't been invoked - if (!timer.callBack || timer.spent) - WARNING("Invalid timer: [get_timer_debug_string(timer)] world.time: [world.time], \ - head_offset: [head_offset], practical_offset: [practical_offset]") - if (timer.callBack) - qdel(timer) - continue - - // Insert the timer into the bucket, and perform necessary doubly-linked list operations - new_bucket_count++ - var/bucket_pos = BUCKET_POS(timer) - timer.bucket_pos = bucket_pos - timer.bucket_joined = TRUE - - var/datum/timedevent/bucket_head = bucket_list[bucket_pos] - if (!bucket_head) - bucket_list[bucket_pos] = timer - timer.next = null - timer.prev = null - continue - - bucket_head.prev = timer - timer.next = bucket_head - timer.prev = null - bucket_list[bucket_pos] = timer - - // Cut the timers that are tracked by the buckets from the secondary queue - if (i) - alltimers.Cut(1, i + 1) - second_queue = alltimers - bucket_count = new_bucket_count - - -/datum/controller/subsystem/timer/Recover() - // Find the current timer sub-subsystem in global and recover its buckets etc - var/datum/controller/subsystem/timer/timerSS = null - for(var/global_var in global.vars) - if (istype(global.vars[global_var],src.type)) - timerSS = global.vars[global_var] - - hashes = timerSS.hashes - timer_id_dict = timerSS.timer_id_dict - - bucket_list = timerSS.bucket_list - second_queue = timerSS.second_queue - - // The buckets are FUBAR - reset_buckets() - -/** - * # Timed Event - * - * This is the actual timer, it contains the callback and necessary data to maintain - * the timer. - * - * See the documentation for the timer subsystem for an explanation of the buckets referenced - * below in next and prev - */ -/datum/timedevent - /// ID used for timers when the TIMER_STOPPABLE flag is present - var/id - /// The callback to invoke after the timer completes - var/datum/callback/callBack - /// The time at which the callback should be invoked at - var/timeToRun - /// The length of the timer - var/wait - /// Unique hash generated when TIMER_UNIQUE flag is present - var/hash - /// The source of the timedevent, whatever called addtimer - var/source - /// Flags associated with the timer, see _DEFINES/subsystems.dm - var/list/flags - /// Time at which the timer was invoked or destroyed - var/spent = 0 - /// An informative name generated for the timer as its representation in strings, useful for debugging - var/name - /// Next timed event in the bucket - var/datum/timedevent/next - /// Previous timed event in the bucket - var/datum/timedevent/prev - /// The timer subsystem this event is associated with - var/datum/controller/subsystem/timer/timer_subsystem - /// Boolean indicating if timer joined into bucket - var/bucket_joined = FALSE - /// Initial bucket position - var/bucket_pos = -1 - -/datum/timedevent/New(datum/callback/callBack, wait, flags, datum/controller/subsystem/timer/timer_subsystem, hash, source) - var/static/nextid = 1 - id = TIMER_ID_NULL - src.callBack = callBack - src.wait = wait - src.flags = flags - src.hash = hash - src.source = source - src.timer_subsystem = timer_subsystem || SStimer - - // Determine time at which the timer's callback should be invoked - timeToRun = (flags & TIMER_CLIENT_TIME ? Uptime() : world.time) + wait - - // Include the timer in the hash table if the timer is unique - if (flags & TIMER_UNIQUE) - timer_subsystem.hashes[hash] = src - - // Generate ID for the timer if the timer is stoppable, include in the timer id dictionary - if (flags & TIMER_STOPPABLE) - id = num2text(nextid, 100) - if (nextid >= SHORT_REAL_LIMIT) - nextid += min(1, 2 ** round(nextid / SHORT_REAL_LIMIT)) - else - nextid++ - timer_subsystem.timer_id_dict[id] = src - - if ((timeToRun < world.time || timeToRun < timer_subsystem.head_offset) && !(flags & TIMER_CLIENT_TIME)) - CRASH("Invalid timer state: Timer created that would require a backtrack to run (addtimer would never let this happen): [SStimer.get_timer_debug_string(src)]") - - if (callBack.object != GLOBAL_PROC && !QDESTROYING(callBack.object)) - LAZYADD(callBack.object.active_timers, src) - - bucketJoin() - -/datum/timedevent/Destroy() - ..() - if (flags & TIMER_UNIQUE && hash) - timer_subsystem.hashes -= hash - - if (callBack && callBack.object && callBack.object != GLOBAL_PROC && callBack.object.active_timers) - callBack.object.active_timers -= src - UNSETEMPTY(callBack.object.active_timers) - - callBack = null - - if (flags & TIMER_STOPPABLE) - timer_subsystem.timer_id_dict -= id - - if (flags & TIMER_CLIENT_TIME) - if (!spent) - spent = world.time - timer_subsystem.clienttime_timers -= src - return QDEL_HINT_IWILLGC - - if (!spent) - spent = world.time - bucketEject() - else - if (prev && prev.next == src) - prev.next = next - if (next && next.prev == src) - next.prev = prev - next = null - prev = null - return QDEL_HINT_IWILLGC - -/** - * Removes this timed event from any relevant buckets, or the secondary queue - */ -/datum/timedevent/proc/bucketEject() - // Store local references for the bucket list and secondary queue - // This is faster than referencing them from the datum itself - var/list/bucket_list = timer_subsystem.bucket_list - var/list/second_queue = timer_subsystem.second_queue - - // Attempt to get the head of the bucket - var/datum/timedevent/buckethead - if(bucket_pos > 0) - buckethead = bucket_list[bucket_pos] - - // Decrement the number of timers in buckets if the timed event is - // the head of the bucket, or has a TTR less than TIMER_MAX implying it fits - // into an existing bucket, or is otherwise not present in the secondary queue - if(buckethead == src) - bucket_list[bucket_pos] = next - timer_subsystem.bucket_count-- - else if(bucket_joined) - timer_subsystem.bucket_count-- - else - var/l = length(second_queue) - second_queue -= src - if(l == length(second_queue)) - timer_subsystem.bucket_count-- - - // Remove the timed event from the bucket, ensuring to maintain - // the integrity of the bucket's list if relevant - if (prev && prev.next == src) - prev.next = next - if (next && next.prev == src) - next.prev = prev - prev = next = null - bucket_pos = -1 - bucket_joined = FALSE - -/** - * Attempts to add this timed event to a bucket, will enter the secondary queue - * if there are no appropriate buckets at this time. - * - * Secondary queueing of timed events will occur when the timespan covered by the existing - * buckets is exceeded by the time at which this timed event is scheduled to be invoked. - * If the timed event is tracking client time, it will be added to a special bucket. - */ -/datum/timedevent/proc/bucketJoin() - // Generate debug-friendly name for timer - var/static/list/bitfield_flags = list("TIMER_UNIQUE", "TIMER_OVERRIDE", "TIMER_CLIENT_TIME", "TIMER_STOPPABLE", "TIMER_NO_HASH_WAIT", "TIMER_LOOP") - name = "Timer: [id] (\ref[src]), TTR: [timeToRun], wait:[wait] Flags: [jointext(bitfield2list(flags, bitfield_flags), ", ")], \ - callBack: \ref[callBack], callBack.object: [callBack.object]\ref[callBack.object]([getcallingtype()]), \ - callBack.delegate:[callBack.delegate]([callBack.arguments ? callBack.arguments.Join(", ") : ""]), source: [source]" - - if (bucket_joined) - stack_trace("Bucket already joined! [name]") - - // Check if this timed event should be diverted to the client time bucket, or the secondary queue - var/list/L - if (flags & TIMER_CLIENT_TIME) - L = timer_subsystem.clienttime_timers - else if (timeToRun >= TIMER_MAX(timer_subsystem)) - L = timer_subsystem.second_queue - if(L) - BINARY_INSERT(src, L, /datum/timedevent, src, timeToRun, COMPARE_KEY) - return - - // Get a local reference to the bucket list, this is faster than referencing the datum - var/list/bucket_list = timer_subsystem.bucket_list - - // Find the correct bucket for this timed event - bucket_pos = BUCKET_POS(src) - - if (bucket_pos < timer_subsystem.practical_offset && timeToRun < (timer_subsystem.head_offset + BUCKET_LEN * world.tick_lag)) - WARNING("Bucket pos in past: bucket_pos = [bucket_pos] < practical_offset = [timer_subsystem.practical_offset] \ - && timeToRun = [timeToRun] < [timer_subsystem.head_offset + BUCKET_LEN * world.tick_lag], Timer: [name]") - bucket_pos = timer_subsystem.practical_offset // Recover bucket_pos to avoid timer blocking queue - - var/datum/timedevent/bucket_head = bucket_list[bucket_pos] - timer_subsystem.bucket_count++ - - // If there is no timed event at this position, then the bucket is 'empty' - // and we can just set this event to that position - if (!bucket_head) - bucket_joined = TRUE - bucket_list[bucket_pos] = src - return - - // Otherwise, we merely add this timed event into the bucket, which is a - // doubly-linked list - bucket_joined = TRUE - bucket_head.prev = src - next = bucket_head - prev = null - bucket_list[bucket_pos] = src - -/** - * Returns a string of the type of the callback for this timer - */ -/datum/timedevent/proc/getcallingtype() - . = "ERROR" - if (callBack.object == GLOBAL_PROC) - . = "GLOBAL_PROC" - else - . = "[callBack.object.type]" - -/** - * Create a new timer and insert it in the queue. - * You should not call this directly, and should instead use the addtimer macro, which includes source information. - * - * Arguments: - * * callback the callback to call on timer finish - * * wait deciseconds to run the timer for - * * flags flags for this timer, see: code\__DEFINES\subsystems.dm - */ -/proc/_addtimer(datum/callback/callback, wait = 0, flags = 0, datum/controller/subsystem/timer/timer_subsystem, file, line) - if (!callback) - CRASH("addtimer called without a callback") - - if (wait < 0) - stack_trace("addtimer called with a negative wait. Converting to [world.tick_lag]") - - if (callback.object != GLOBAL_PROC && QDELETED(callback.object) && !QDESTROYING(callback.object)) - stack_trace("addtimer called with a callback assigned to a qdeleted object. In the future such timers will not \ - be supported and may refuse to run or run with a 0 wait") - - wait = max(Ceilm(wait, world.tick_lag), world.tick_lag) - - if(wait >= INFINITY) - CRASH("Attempted to create timer with INFINITY delay") - - timer_subsystem = timer_subsystem || SStimer - - // Generate hash if relevant for timed events with the TIMER_UNIQUE flag - var/hash - if (flags & TIMER_UNIQUE) - var/list/hashlist = list(callback.object, "(\ref[callback.object])", callback.delegate, flags & TIMER_CLIENT_TIME) - if(!(flags & TIMER_NO_HASH_WAIT)) - hashlist += wait - hashlist += callback.arguments - hash = hashlist.Join("|||||||") - - var/datum/timedevent/hash_timer = timer_subsystem.hashes[hash] - if(hash_timer) - if (hash_timer.spent) // it's pending deletion, pretend it doesn't exist. - hash_timer.hash = null // but keep it from accidentally deleting us - else - if (flags & TIMER_OVERRIDE) - hash_timer.hash = null // no need having it delete it's hash if we are going to replace it - qdel(hash_timer) - else - if (hash_timer.flags & TIMER_STOPPABLE) - . = hash_timer.id - return - else if(flags & TIMER_OVERRIDE) - stack_trace("TIMER_OVERRIDE used without TIMER_UNIQUE") - - var/datum/timedevent/timer = new(callback, wait, flags, timer_subsystem, hash, file && "[file]:[line]") - return timer.id - -/** - * Delete a timer - * - * Arguments: - * * id a timerid or a /datum/timedevent - */ -/proc/deltimer(id, datum/controller/subsystem/timer/timer_subsystem) - if (!id) - return FALSE - if (id == TIMER_ID_NULL) - CRASH("Tried to delete a null timerid. Use TIMER_STOPPABLE flag") - if (istype(id, /datum/timedevent)) - qdel(id) - return TRUE - timer_subsystem = timer_subsystem || SStimer - //id is string - var/datum/timedevent/timer = timer_subsystem.timer_id_dict[id] - if (timer && (!timer.spent || timer.flags & TIMER_DELETE_ME)) - qdel(timer) - return TRUE - return FALSE - -/** - * Get the remaining deciseconds on a timer - * - * Arguments: - * * id a timerid or a /datum/timedevent - */ -/proc/timeleft(id, datum/controller/subsystem/timer/timer_subsystem) - if (!id) - return null - if (id == TIMER_ID_NULL) - CRASH("Tried to get timeleft of a null timerid. Use TIMER_STOPPABLE flag") - if (istype(id, /datum/timedevent)) - var/datum/timedevent/timer = id - return timer.timeToRun - world.time - timer_subsystem = timer_subsystem || SStimer - //id is string - var/datum/timedevent/timer = timer_subsystem.timer_id_dict[id] - if(!timer || timer.spent) - return null - return timer.timeToRun - (timer.flags & TIMER_CLIENT_TIME ? Uptime() : world.time) - -#undef BUCKET_LEN -#undef BUCKET_POS -#undef TIMER_MAX -#undef TIMER_ID_MAX diff --git a/code/controllers/subsystems/turf_fire.dm b/code/controllers/subsystems/turf_fire.dm deleted file mode 100644 index daa37177d7290..0000000000000 --- a/code/controllers/subsystems/turf_fire.dm +++ /dev/null @@ -1,12 +0,0 @@ -SUBSYSTEM_DEF(turf_fire) - name = "Turf Fire" - runlevels = RUNLEVEL_GAME | RUNLEVEL_POSTGAME - wait = 2 SECONDS - flags = SS_NO_INIT - var/list/fires = list() - -/datum/controller/subsystem/turf_fire/fire() - for(var/obj/effect/turf_fire/fire as anything in fires) - fire.Process() - if(MC_TICK_CHECK) - return diff --git a/code/controllers/subsystems/vote.dm b/code/controllers/subsystems/vote.dm deleted file mode 100644 index db7e31950b5b1..0000000000000 --- a/code/controllers/subsystems/vote.dm +++ /dev/null @@ -1,196 +0,0 @@ -SUBSYSTEM_DEF(vote) - name = "Voting" - wait = 1 SECOND - priority = SS_PRIORITY_VOTE - flags = SS_NO_TICK_CHECK | SS_KEEP_TIMING - runlevels = RUNLEVELS_DEFAULT | RUNLEVEL_LOBBY - - var/last_started_time //To enforce delay between votes. - var/antag_added //Enforces a maximum of one added antag per round. - - var/datum/vote/active_vote //The current vote. This handles most voting activity. - var/list/old_votes //Stores completed votes for reference. - var/queued_auto_vote //Used if a vote queues another vote to happen after it. - - var/list/voting = list() //Clients recieving UI updates. - var/list/vote_prototypes //To run checks on whether they are available. - -/datum/controller/subsystem/vote/Initialize(start_uptime) - vote_prototypes = list() - for(var/vote_type in subtypesof(/datum/vote)) - var/datum/vote/fake_vote = vote_type - if(initial(fake_vote.manual_allowed)) - vote_prototypes[vote_type] = new vote_type - - -/datum/controller/subsystem/vote/fire(resumed = 0) - if(!active_vote) - if(queued_auto_vote) - initiate_vote(queued_auto_vote, automatic = 1) - queued_auto_vote = null - return - - switch(active_vote.Process()) - if(VOTE_PROCESS_ABORT) - QDEL_NULL(active_vote) - reset() - return - if(VOTE_PROCESS_COMPLETE) - active_vote.tally_result() // Does math to figure out who won. Data is stored on the vote datum. - active_vote.report_result() // Announces the result; possibly alerts other entities of the result. - LAZYADD(old_votes, active_vote) // Store the datum for future reference. - reset() - return - if(VOTE_PROCESS_ONGOING) - for(var/client/C in voting) - show_panel(C.mob) - -/datum/controller/subsystem/vote/UpdateStat(time) - if (PreventUpdateStat(time)) - return ..() - ..("Vote: [active_vote ? "[active_vote.name], [active_vote.time_remaining]" : "None"]") - -/datum/controller/subsystem/vote/Recover() - last_started_time = SSvote.last_started_time - antag_added = SSvote.antag_added - active_vote = SSvote.active_vote - queued_auto_vote = SSvote.queued_auto_vote - -/datum/controller/subsystem/vote/proc/reset() - active_vote = null - for(var/client/C in voting) - close_panel(C.mob) - voting.Cut() - -//A false return means that a vote couldn't be started. -/datum/controller/subsystem/vote/proc/initiate_vote(vote_type, mob/creator, automatic = 0) - if(active_vote) - return FALSE - if(!automatic && (!istype(creator) || !creator.client)) - return FALSE - - if(last_started_time != null && !(isadmin(creator) || automatic)) - var/next_allowed_time = (last_started_time + config.vote_delay) - if(next_allowed_time > world.time) - return FALSE - - var/datum/vote/new_vote = new vote_type - if(!new_vote.setup(creator, automatic)) - return FALSE - - active_vote = new_vote - last_started_time = world.time - return TRUE - -/datum/controller/subsystem/vote/proc/interface(client/C) - if(!C) - return - var/admin = isadmin(C) - voting |= C - - . = list() - . += "Voting Panel" - if(active_vote) - . += active_vote.interface(C.mob) - if(admin) - . += "(Cancel Vote) " - else - . += "

    Start a vote:



    " - - . += "Close" - return JOINTEXT(.) - -/datum/controller/subsystem/vote/proc/show_panel(mob/user) - var/win_x = 450 - var/win_y = 740 - if(active_vote) - win_x = active_vote.win_x - win_y = active_vote.win_y - show_browser(user, interface(user.client),"window=vote;size=[win_x]x[win_y]") - onclose(user, "vote", src) - -/datum/controller/subsystem/vote/proc/close_panel(mob/user) - show_browser(user, null, "window=vote") - if(user) - voting -= user.client - -/datum/controller/subsystem/vote/proc/cancel_vote(mob/user) - if(!isadmin(user)) - return - active_vote.report_result() // Will not make announcement, but do any override failure reporting tasks. - QDEL_NULL(active_vote) - reset() - -/datum/controller/subsystem/vote/Topic(href,href_list[],hsrc) - if(!usr || !usr.client) - return //not necessary but meh...just in-case somebody does something stupid - - if(href_list["vote_panel"]) - show_panel(usr) - return - if(href_list["cancel"]) - cancel_vote(usr) - return - if(href_list["close"]) - close_panel(usr) - return - - if(href_list["vote"]) - var/vote_path = locate(href_list["vote"]) - if(!ispath(vote_path, /datum/vote)) - return - - if(href_list["toggle"]) - var/datum/vote/vote_datum = vote_prototypes[vote_path] - if(!vote_datum) - return - vote_datum.toggle(usr) - show_panel(usr) - return - - initiate_vote(vote_path, usr, 0) // Additional permission checking happens in here. - -//Helper for certain votes. -/datum/controller/subsystem/vote/proc/restart_world() - set waitfor = FALSE - - to_world("World restarting due to vote...") - sleep(50) - log_game("Rebooting due to restart vote") - world.Reboot() - -// Helper proc for determining whether addantag vote can be called. -/datum/controller/subsystem/vote/proc/is_addantag_allowed(mob/creator, automatic) - if(!config.allow_extra_antags) - return 0 - // Gamemode has to be determined before we can add antagonists, so we can respect gamemode's add antag vote settings. - if((GAME_STATE <= RUNLEVEL_SETUP) || !SSticker.mode) - return 0 - if(automatic) - return (SSticker.mode.addantag_allowed & ADDANTAG_AUTO) && !antag_added - if(isadmin(creator)) - return SSticker.mode.addantag_allowed & (ADDANTAG_ADMIN|ADDANTAG_PLAYER) - else - return (SSticker.mode.addantag_allowed & ADDANTAG_PLAYER) && !antag_added - -/mob/verb/vote() - set category = "OOC" - set name = "Vote" - - if(GAME_STATE < RUNLEVEL_LOBBY) - to_chat(src, "It's too soon to do any voting!") - return - SSvote.show_panel(src) diff --git a/code/controllers/subsystems/zcopy.dm b/code/controllers/subsystems/zcopy.dm deleted file mode 100644 index ef9c5149cf472..0000000000000 --- a/code/controllers/subsystems/zcopy.dm +++ /dev/null @@ -1,488 +0,0 @@ -#define SHADOWER_DARKENING_FACTOR 0.6 // The multiplication factor for openturf shadower darkness. Lighting will be multiplied by this. -#define SHADOWER_DARKENING_COLOR "#999999" // The above, but as an RGB string for lighting-less turfs. - -SUBSYSTEM_DEF(zcopy) - name = "Z-Copy" - wait = 1 - init_order = SS_INIT_ZCOPY - priority = SS_PRIORITY_ZCOPY - runlevels = RUNLEVELS_DEFAULT | RUNLEVEL_LOBBY - - var/list/queued_turfs = list() - var/qt_idex = 1 - var/list/queued_overlays = list() - var/qo_idex = 1 - - var/openspace_overlays = 0 - var/openspace_turfs = 0 - - var/multiqueue_skips_turf = 0 - var/multiqueue_skips_object = 0 - - // Highest Z level in a given Z-group for absolute layering. - // zstm[zlev] = group_max - var/list/zlev_maximums = list() - -// for admin proc-call -/datum/controller/subsystem/zcopy/proc/update_all() - disable() - log_debug("SSzcopy: update_all() invoked.") - - var/turf/T // putting the declaration up here totally speeds it up, right? - var/num_upd = 0 - var/num_del = 0 - var/num_amupd = 0 - for (var/atom/A in world) - if (isturf(A)) - T = A - if (T.z_flags & ZM_MIMIC_BELOW) - T.update_mimic() - num_upd += 1 - - else if (istype(A, /atom/movable/openspace/mimic)) - var/turf/Tloc = A.loc - if (TURF_IS_MIMICING(Tloc)) - Tloc.update_mimic() - num_amupd += 1 - else - qdel(A) - num_del += 1 - - CHECK_TICK - - log_debug("SSzcopy: [num_upd + num_amupd] turf updates queued ([num_upd] direct, [num_amupd] indirect), [num_del] orphans destroyed.") - - enable() - -// for admin proc-call -/datum/controller/subsystem/zcopy/proc/hard_reset() - disable() - log_debug("SSzcopy: hard_reset() invoked.") - var/num_deleted = 0 - var/num_turfs = 0 - - var/turf/T - for (var/atom/A in world) - if (isturf(A)) - T = A - if (T.z_flags & ZM_MIMIC_BELOW) - T.update_mimic() - num_turfs += 1 - - else if (istype(A, /atom/movable/openspace/mimic)) - qdel(A) - num_deleted += 1 - - CHECK_TICK - - log_debug("SSzcopy: deleted [num_deleted] overlays, and queued [num_turfs] turfs for update.") - - enable() - -/datum/controller/subsystem/zcopy/UpdateStat(time) - if (PreventUpdateStat(time)) - return ..() - ..({"\ - Mx: [json_encode(zlev_maximums)]\n\ - Queues: \ - Turfs [queued_turfs.len - (qt_idex - 1)] \ - Overlays [queued_overlays.len - (qo_idex - 1)]\n\ - Open Turfs: \ - Turfs [openspace_turfs] \ - Overlays [openspace_overlays]\n\ - Skips: \ - Turfs [multiqueue_skips_turf] \ - Objects [multiqueue_skips_object]\ - "}) - -/datum/controller/subsystem/zcopy/Initialize(start_uptime) - calculate_zstack_limits() - // Flush the queue. - fire(FALSE, TRUE) - -// If you add a new Zlevel or change Z-connections, call this. -/datum/controller/subsystem/zcopy/proc/calculate_zstack_limits() - zlev_maximums = new(world.maxz) - var/start_zlev = 1 - for (var/z in 1 to world.maxz) - if (!HasAbove(z)) - for (var/member_zlev in start_zlev to z) - zlev_maximums[member_zlev] = z - if (z - start_zlev > OPENTURF_MAX_DEPTH) - log_ss("zcopy", "WARNING: Z-levels [start_zlev] through [z] exceed maximum depth of [OPENTURF_MAX_DEPTH]; layering may behave strangely in this Z-stack.") - else if (z - start_zlev > 1) - log_ss("zcopy", "Found Z-Stack: [start_zlev] -> [z] = [z - start_zlev + 1] zl") - start_zlev = z + 1 - - log_ss("zcopy", "Z-Level maximums: [json_encode(zlev_maximums)]") - -/datum/controller/subsystem/zcopy/StartLoadingMap() - suspend() - -/datum/controller/subsystem/zcopy/StopLoadingMap() - wake() - -/datum/controller/subsystem/zcopy/fire(resumed = FALSE, no_mc_tick = FALSE) - if (!resumed) - qt_idex = 1 - qo_idex = 1 - - MC_SPLIT_TICK_INIT(2) - if (!no_mc_tick) - MC_SPLIT_TICK - - var/list/curr_turfs = queued_turfs - var/list/curr_ov = queued_overlays - - while (qt_idex <= curr_turfs.len) - var/turf/T = curr_turfs[qt_idex] - curr_turfs[qt_idex] = null - qt_idex += 1 - - if (!isturf(T) || !(T.z_flags & ZM_MIMIC_BELOW) || !T.z_queued) - if (no_mc_tick) - CHECK_TICK - else if (MC_TICK_CHECK) - break - continue - - // If we're not at our most recent queue position, don't bother -- we're updating again later anyways. - if (T.z_queued > 1) - T.z_queued -= 1 - multiqueue_skips_turf += 1 - if (no_mc_tick) - CHECK_TICK - else if (MC_TICK_CHECK) - break - continue - - // Z-Turf on the bottom-most level, just fake-copy space. - // If this is ever true, that turf should always pass this condition, so don't bother cleaning up beyond the Destroy() hook. - if (!T.below) // Z-turf on the bottom-most level, just fake-copy space. - if (T.z_flags & ZM_MIMIC_OVERWRITE) - T.appearance = SSskybox.space_appearance_cache[(((T.x + T.y) ^ ~(T.x * T.y) + T.z) % 25) + 1] - T.name = initial(T.name) - T.desc = initial(T.desc) - T.gender = initial(T.gender) - else - // Some openturfs have icons, so we can't overwrite their appearance. - if (!T.mimic_underlay) - T.mimic_underlay = new(T) - var/atom/movable/openspace/turf_proxy/TO = T.mimic_underlay - TO.appearance = SSskybox.space_appearance_cache[(((T.x + T.y) ^ ~(T.x * T.y) + T.z) % 25) + 1] - TO.name = T.name - TO.gender = T.gender // Need to grab this too so PLURAL works properly in examine. - TO.mouse_opacity = initial(TO.mouse_opacity) - - if (no_mc_tick) - CHECK_TICK - else if (MC_TICK_CHECK) - break - continue - - if (!T.shadower) // If we don't have a shadower yet, something has gone horribly wrong. - WARNING("Turf [T] at [T.x],[T.y],[T.z] was queued, but had no shadower.") - continue - - T.z_generation += 1 - - // Get the bottom-most turf, the one we want to mimic. - var/turf/Td = T - while (Td.below) - Td = Td.below - - // Depth must be the depth of the *visible* turf, not self. - var/turf_depth - turf_depth = T.z_depth = zlev_maximums[Td.z] - Td.z - - var/t_target = OPENTURF_MAX_PLANE - turf_depth // This is where the turf (but not the copied atoms) gets put. - - // Handle space parallax & starlight. - if (T.below.z_eventually_space) - T.z_eventually_space = TRUE - t_target = SPACE_PLANE - - if (T.z_flags & ZM_MIMIC_OVERWRITE) - // This openturf doesn't care about its icon, so we can just overwrite it. - if (T.below.mimic_proxy) - QDEL_NULL(T.below.mimic_proxy) - T.appearance = T.below - T.name = initial(T.name) - T.desc = initial(T.desc) - T.gender = initial(T.gender) - T.opacity = FALSE - T.plane = t_target - else - // Some openturfs have icons, so we can't overwrite their appearance. - if (!T.below.mimic_proxy) - T.below.mimic_proxy = new(T) - var/atom/movable/openspace/turf_proxy/TO = T.below.mimic_proxy - TO.appearance = Td - TO.name = T.name - TO.gender = T.gender // Need to grab this too so PLURAL works properly in examine. - TO.opacity = FALSE - TO.plane = t_target - TO.mouse_opacity = initial(TO.mouse_opacity) - - T.queue_ao(T.ao_neighbors_mimic == null) // If ao_neighbors hasn't been set yet, we need to do a rebuild - - // Explicitly copy turf delegates so they show up properly on below levels. - // I think it's possible to get this to work without discrete delegate copy objects, but I'd rather this just work. - if ((T.below.z_flags & (ZM_MIMIC_BELOW|ZM_MIMIC_OVERWRITE)) == ZM_MIMIC_BELOW) - // Below is a delegate, gotta explicitly copy it for recursive copy. - if (!T.below.mimic_above_copy) - T.below.mimic_above_copy = new(T) - var/atom/movable/openspace/turf_mimic/DC = T.below.mimic_above_copy - DC.appearance = T.below - DC.mouse_opacity = initial(DC.mouse_opacity) - DC.plane = OPENTURF_MAX_PLANE - - else if (T.below.mimic_above_copy) - QDEL_NULL(T.below.mimic_above_copy) - - // Handle below atoms. - - // Add everything below us to the update queue. - for (var/thing in T.below) - var/atom/movable/object = thing - if (QDELETED(object) || object.no_z_overlay || object.loc != T.below || object.invisibility == INVISIBILITY_ABSTRACT) - // Don't queue deleted stuff, stuff that's not visible, blacklisted stuff, or stuff that's centered on another tile but intersects ours. - continue - - // Special case: these are merged into the shadower to reduce memory usage. - if (object.type == /atom/movable/lighting_overlay) - //T.shadower.copy_lighting(object) - continue - - if (!object.bound_overlay) // Generate a new overlay if the atom doesn't already have one. - object.bound_overlay = new(T) - object.bound_overlay.associated_atom = object - - var/override_depth - var/original_type = object.type - var/original_z = object.z - switch (object.type) - if (/atom/movable/openspace/mimic) - var/atom/movable/openspace/mimic/OOO = object - original_type = OOO.mimiced_type - override_depth = OOO.override_depth - original_z = OOO.original_z - - if (/atom/movable/openspace/turf_proxy, /atom/movable/openspace/turf_mimic) - // If we're a turf overlay (the mimic for a non-OVERWRITE turf), we need to make sure copies of us respect space parallax too - if (T.z_eventually_space) - // Yes, this is an awful hack; I don't want to add yet another override_* var. - override_depth = OPENTURF_MAX_PLANE - SPACE_PLANE - - var/atom/movable/openspace/mimic/OO = object.bound_overlay - - // If the OO was queued for destruction but was claimed by another OT, stop the destruction timer. - if (OO.destruction_timer) - deltimer(OO.destruction_timer) - OO.destruction_timer = null - - OO.depth = override_depth || min(zlev_maximums[T.z] - original_z, OPENTURF_MAX_DEPTH) - - // These types need to be pushed a layer down for bigturfs to function correctly. - switch (original_type) - if (/atom/movable/openspace/multiplier, /atom/movable/openspace/turf_mimic, /atom/movable/openspace/turf_proxy) - if (OO.depth < OPENTURF_MAX_DEPTH) - OO.depth += 1 - - OO.mimiced_type = original_type - OO.override_depth = override_depth - OO.original_z = original_z - - // Multi-queue to maintain ordering of updates to these - // queueing it multiple times will result in only the most recent - // actually processing. - OO.queued += 1 - queued_overlays += OO - - T.z_queued -= 1 - if (T.above) - T.above.update_mimic() - - if (no_mc_tick) - CHECK_TICK - else if (MC_TICK_CHECK) - break - - if (qt_idex > 1) - curr_turfs.Cut(1, qt_idex) - qt_idex = 1 - - if (!no_mc_tick) - MC_SPLIT_TICK - - while (qo_idex <= curr_ov.len) - var/atom/movable/openspace/mimic/OO = curr_ov[qo_idex] - curr_ov[qo_idex] = null - qo_idex += 1 - - if (QDELETED(OO) || !OO.queued) - if (no_mc_tick) - CHECK_TICK - else if (MC_TICK_CHECK) - break - continue - - if (QDELETED(OO.associated_atom)) // This shouldn't happen, but just in-case. - qdel(OO) - - if (no_mc_tick) - CHECK_TICK - else if (MC_TICK_CHECK) - break - continue - - // Don't update unless we're at the most recent queue occurrence. - if (OO.queued > 1) - OO.queued -= 1 - multiqueue_skips_object += 1 - if (no_mc_tick) - CHECK_TICK - else if (MC_TICK_CHECK) - break - continue - - // Actually update the overlay. - if (OO.dir != OO.associated_atom.dir) - OO.set_dir(OO.associated_atom.dir) - - OO.appearance = OO.associated_atom - OO.plane = OPENTURF_MAX_PLANE - OO.depth - - OO.opacity = FALSE - OO.queued = 0 - - if (OO.bound_overlay) // If we have a bound overlay, queue it too. - OO.update_above() - - if (no_mc_tick) - CHECK_TICK - else if (MC_TICK_CHECK) - break - - if (qo_idex > 1) - curr_ov.Cut(1, qo_idex) - qo_idex = 1 - -#define FMT_DEPTH(X) (X == null ? "(null)" : X) - -// This is a dummy object used so overlays can be shown in the analyzer. -/atom/movable/openspace/debug - -/client/proc/analyze_openturf(turf/T) - set name = "Analyze Openturf" - set desc = "Show the layering of an openturf and everything it's mimicking." - set category = "Debug" - - if (!check_rights(R_DEBUG)) - return - - var/is_above_space = T.is_above_space() - var/list/out = list( - "", - "

    Analysis of [T] at [T.x],[T.y],[T.z]

    ", - "Queue occurrences: [T.z_queued]", - "Above space: Apparent [T.z_eventually_space ? "Yes" : "No"], Actual [is_above_space ? "Yes" : "No"] - [T.z_eventually_space == is_above_space ? "OK" : "MISMATCH"]", - "Z Flags: [english_list(bitfield2list(T.z_flags, GLOB.mimic_defines), "(none)")]", - "Has Shadower: [T.shadower ? "Yes" : "No"]", - "Has turf proxy: [T.mimic_proxy ? "Yes" : "No"]", - "Has above copy: [T.mimic_above_copy ? "Yes" : "No"]", - "Has mimic underlay: [T.mimic_underlay ? "Yes" : "No"]", - "Below: [!T.below ? "(nothing)" : "[T.below] at [T.below.x],[T.below.y],[T.below.z]"]", - "Depth: [FMT_DEPTH(T.z_depth)] [T.z_depth == OPENTURF_MAX_DEPTH ? "(max)" : ""]", - "Generation: [T.z_generation]", - "
      " - ) - - var/list/found_oo = list(T) - for (var/atom/movable/openspace/O in T) - found_oo += O - - if (T.shadower.overlays.len) - for (var/overlay in T.shadower.overlays) - var/atom/movable/openspace/debug/D = new - D.appearance = overlay - if (D.plane < -10000) // FLOAT_PLANE - D.plane = T.shadower.plane - found_oo += D - - sortTim(found_oo, /proc/cmp_planelayer) - - var/list/atoms_list_list = list() - for (var/thing in found_oo) - var/atom/A = thing - var/pl = "[A.plane]" - LAZYINITLIST(atoms_list_list[pl]) - atoms_list_list[pl] += A - - if (atoms_list_list["0"]) - out += "Non-Z" - SSzcopy.debug_fmt_planelist(atoms_list_list["0"], out, T) - - atoms_list_list -= "0" - - for (var/d in 0 to OPENTURF_MAX_DEPTH) - var/pl = OPENTURF_MAX_PLANE - d - if (!atoms_list_list["[pl]"]) - out += "Depth [d], plane [pl] - empty" - continue - - out += "Depth [d], plane [pl]" - SSzcopy.debug_fmt_planelist(atoms_list_list["[pl]"], out, T) - - // Flush the list so we can find orphans. - atoms_list_list -= "[pl]" - - if (atoms_list_list["[SPACE_PLANE]"]) // Space parallax plane - out += "Space parallax plane ([SPACE_PLANE])" - SSzcopy.debug_fmt_planelist(atoms_list_list["[SPACE_PLANE]"], out, T) - atoms_list_list -= "[SPACE_PLANE]" - - for (var/key in atoms_list_list) - out += "Unknown plane: [key]" - SSzcopy.debug_fmt_planelist(atoms_list_list[key], out, T) - - out += "
      " - - out += "" - - show_browser(usr, out.Join("
      "), "size=980x580;window=openturfanalysis-\ref[T]") - -// Yes, I know this proc is a bit of a mess. Feel free to clean it up. -/datum/controller/subsystem/zcopy/proc/debug_fmt_thing(atom/A, list/out, turf/original) - if (istype(A, /atom/movable/openspace/mimic)) - var/atom/movable/openspace/mimic/OO = A - var/atom/movable/AA = OO.associated_atom - var/copied_type = AA.type == OO.mimiced_type ? "[AA.type] \[direct\]" : "[AA.type], eventually [OO.mimiced_type]" - return "
    • \icon[A] \[Mimic\] plane [A.plane], layer [A.layer], depth [FMT_DEPTH(OO.depth)], associated Z-level [AA.z] - [OO.type] copying [AA] ([copied_type])
    • " - else if (istype(A, /atom/movable/openspace/turf_mimic)) - var/atom/movable/openspace/turf_mimic/DC = A - return "
    • \icon[A] \[Turf Mimic\] plane [A.plane], layer [A.layer], Z-level [A.z], delegate of \icon[DC.delegate] [DC.delegate] ([DC.delegate.type])
    • " - else if (isturf(A)) - if (A == original) - return "
    • \icon[A] \[Turf\] plane [A.plane], layer [A.layer], depth [FMT_DEPTH(A:z_depth)], Z-level [A.z] - [A] ([A.type]) - SELF
    • " - else // foreign turfs - not visible here, but sometimes good for figuring out layering -- showing these is currently not enabled - return "
    • \icon[A] \[Turf\] plane [A.plane], layer [A.layer], depth [FMT_DEPTH(A:z_depth)], Z-level [A.z] - [A] ([A.type]) - FOREIGN
    • " - else if (A.type == /atom/movable/openspace/multiplier) - return "
    • \icon[A] \[Shadower\] plane [A.plane], layer [A.layer], Z-level [A.z] - [A] ([A.type])
    • " - else if (A.type == /atom/movable/openspace/debug) // These are fake objects that exist just to show the shadower's overlays in this list. - return "
    • \icon[A] \[Shadower True Overlay\] plane [A.plane], layer [A.layer] - VIRTUAL
    • " - else if (A.type == /atom/movable/openspace/turf_proxy) - return "
    • \icon[A] \[Turf Proxy\] plane [A.plane], layer [A.layer], Z-level [A.z] - [A] ([A.type])
    • " - else - return "
    • \icon[A] \[?\] plane [A.plane], layer [A.layer], Z-level [A.z] - [A] ([A.type])
    • " - -/datum/controller/subsystem/zcopy/proc/debug_fmt_planelist(list/things, list/out, turf/original) - if (things) - out += "
        " - for (var/thing in things) - out += debug_fmt_thing(thing, out, original) - out += "
      " - else - out += "No atoms." - -#undef FMT_DEPTH diff --git a/code/controllers/verbs.dm b/code/controllers/verbs.dm deleted file mode 100644 index e804a2796e54d..0000000000000 --- a/code/controllers/verbs.dm +++ /dev/null @@ -1,45 +0,0 @@ -//TODO: rewrite and standardise all controller datums to the datum/controller type -//TODO: allow all controllers to be deleted for clean restarts (see WIP master controller stuff) - MC done - lighting done - -/client/proc/debug_antagonist_template(antag_type as null|anything in GLOB.all_antag_types_) - set category = "Debug" - set name = "Debug Antagonist" - set desc = "Debug an antagonist template." - - if (!antag_type) - return - - var/datum/antagonist/antag = GLOB.all_antag_types_[antag_type] - if(antag) - usr.client.debug_variables(antag) - message_admins("Admin [key_name_admin(usr)] is debugging the [antag.role_text] template.") - -/client/proc/debug_controller(controller as null|anything in list("Jobs","Sun","Radio","Evacuation","Configuration","pAI", "Cameras", "Transfer Controller", "Gas Data","Plants","Wireless","Observation","Alt Appearance Manager","Datacore","Military Branches")) - set category = "Debug" - set name = "Debug Controller" - set desc = "Debug the various periodic loop controllers for the game (be careful!)" - - if(!holder || !controller) - return - - switch(controller) - if("Radio") - debug_variables(radio_controller) - if("Evacuation") - debug_variables(evacuation_controller) - if("Configuration") - debug_variables(config) - if("pAI") - debug_variables(paiController) - if("Cameras") - debug_variables(cameranet) - if("Transfer Controller") - debug_variables(transfer_controller) - if("Gas Data") - debug_variables(gas_data) - if("Alt Appearance Manager") - debug_variables(appearance_manager) - if("Military Branches") - debug_variables(GLOB.mil_branches) - message_admins("Admin [key_name_admin(usr)] is debugging the [controller] controller.") - return diff --git a/code/core/atom/Transform.dm b/code/core/atom/Transform.dm deleted file mode 100644 index a3786856ff343..0000000000000 --- a/code/core/atom/Transform.dm +++ /dev/null @@ -1,53 +0,0 @@ -/// The atom's base transform scale for width. -/atom/var/tf_scale_x - -/// The atom's base transform scale for height. -/atom/var/tf_scale_y - -/// The atom's base transform scale for rotation. -/atom/var/tf_rotation - -/// The atom's base transform scale for horizontal offset. -/atom/var/tf_offset_x - -/// The atom's base transform scale for vertical offset. -/atom/var/tf_offset_y - - -/// Clear the atom's tf_* variables and the current transform state. -/atom/proc/ClearTransform() - tf_scale_x = null - tf_scale_y = null - tf_rotation = null - tf_offset_x = null - tf_offset_y = null - transform = null - - -/// Sets the atom's tf_* variables and the current transform state, also applying others if supplied. -/atom/proc/SetTransform( - scale, - scale_x = tf_scale_x, - scale_y = tf_scale_y, - rotation = tf_rotation, - offset_x = tf_offset_x, - offset_y = tf_offset_y, - list/others -) - if (!isnull(scale)) - tf_scale_x = scale - tf_scale_y = scale - else - tf_scale_x = scale_x - tf_scale_y = scale_y - tf_rotation = rotation - tf_offset_x = offset_x - tf_offset_y = offset_y - transform = matrix().Update( - scale_x = tf_scale_x, - scale_y = tf_scale_y, - rotation = tf_rotation, - offset_x = tf_offset_x, - offset_y = tf_offset_y, - others = others - ) diff --git a/code/core/datum/IsAbstract.dm b/code/core/datum/IsAbstract.dm deleted file mode 100644 index 1bb092f3eb39f..0000000000000 --- a/code/core/datum/IsAbstract.dm +++ /dev/null @@ -1,23 +0,0 @@ -/** -* Abstract-ness is a meta-property of a class that is used to indicate -* that the class is intended to be used as a base class for others, and -* should not (or cannot) be instantiated. -* We have no such language concept in DM, and so we provide a datum member -* that can be used to hint at abstractness for circumstances where we would -* like that to be the case, such as base behavior providers. -*/ - -/// If set, a path at/above this one that expects not to be instantiated. -/datum/var/abstract_type - -/// If true, this datum is an instance of an abstract type. Oops. -/datum/proc/IsAbstract() - SHOULD_NOT_OVERRIDE(TRUE) - return type == abstract_type - -/// Passed a path or instance, returns whether it is abstract. Otherwise null. -/proc/is_abstract(datum/thing) - if (ispath(thing)) - return thing == initial(thing.abstract_type) - if (istype(thing)) - return thing.IsAbstract() diff --git a/code/core/image/Transform.dm b/code/core/image/Transform.dm deleted file mode 100644 index a2b03c4dbe1a4..0000000000000 --- a/code/core/image/Transform.dm +++ /dev/null @@ -1,53 +0,0 @@ -/// The image's base transform scale for width. -/image/var/tf_scale_x - -/// The image's base transform scale for height. -/image/var/tf_scale_y - -/// The image's base transform scale for rotation. -/image/var/tf_rotation - -/// The image's base transform scale for horizontal offset. -/image/var/tf_offset_x - -/// The image's base transform scale for vertical offset. -/image/var/tf_offset_y - - -/// Clear the image's tf_* variables and the current transform state. -/image/proc/ClearTransform() - tf_scale_x = null - tf_scale_y = null - tf_rotation = null - tf_offset_x = null - tf_offset_y = null - transform = null - - -/// Sets the image's tf_* variables and the current transform state, also applying others if supplied. -/image/proc/SetTransform( - scale, - scale_x = tf_scale_x, - scale_y = tf_scale_y, - rotation = tf_rotation, - offset_x = tf_offset_x, - offset_y = tf_offset_y, - list/others -) - if (!isnull(scale)) - tf_scale_x = scale - tf_scale_y = scale - else - tf_scale_x = scale_x - tf_scale_y = scale_y - tf_rotation = rotation - tf_offset_x = offset_x - tf_offset_y = offset_y - transform = matrix().Update( - scale_x = tf_scale_x, - scale_y = tf_scale_y, - rotation = tf_rotation, - offset_x = tf_offset_x, - offset_y = tf_offset_y, - others = others - ) diff --git a/code/core/matrix/Transform.dm b/code/core/matrix/Transform.dm deleted file mode 100644 index f8a9879bb59d1..0000000000000 --- a/code/core/matrix/Transform.dm +++ /dev/null @@ -1,27 +0,0 @@ -/// Clears the matrix's a-f variables to identity. -/matrix/proc/Clear() - a = 1 - b = 0 - c = 0 - d = 0 - e = 1 - f = 0 - return src - - -/// Runs Scale, Turn, and Translate if supplied parameters, then multiplies by others if set. -/matrix/proc/Update(scale_x, scale_y, rotation, offset_x, offset_y, list/others) - var/x_null = isnull(scale_x) - var/y_null = isnull(scale_y) - if (!x_null || !y_null) - Scale(x_null ? 1 : scale_x, y_null ? 1 : scale_y) - if (!isnull(rotation)) - Turn(rotation) - if (offset_x || offset_y) - Translate(offset_x || 0, offset_y || 0) - if (islist(others)) - for (var/other in others) - Multiply(other) - else if (others) - Multiply(others) - return src diff --git a/code/datums/ai/ai.dm b/code/datums/ai/ai.dm deleted file mode 100644 index 13985849ac62f..0000000000000 --- a/code/datums/ai/ai.dm +++ /dev/null @@ -1,5 +0,0 @@ -/datum/ai - var/name - -/datum/ai/proc/process() - return PROCESS_KILL diff --git a/code/datums/ai/ai_holo.dm b/code/datums/ai/ai_holo.dm deleted file mode 100644 index 7ecc7dce330ef..0000000000000 --- a/code/datums/ai/ai_holo.dm +++ /dev/null @@ -1,81 +0,0 @@ -/* Used for whether the AI can use a hologram. Mostly self-documenting. -* requires_malf: will display the malf hologram overlay and requires malf mode to be active. -* bypass_colorize: if false, the hologram will be decolorized. -*/ -/decl/ai_holo - var/requires_malf = FALSE - var/icon = 'icons/mob/hologram.dmi' - var/icon_state = "icon_state" - var/bypass_colorize = FALSE - var/name - - -/decl/ai_holo/proc/may_be_used_by_ai(var/mob/living/silicon/ai/AI) - return !requires_malf || AI.is_malf_or_traitor() - -/decl/ai_holo/New() - ..() - name = icon_state - -/decl/ai_holo/default - icon_state = "Default" - -/decl/ai_holo/face - icon_state = "Face" - -/decl/ai_holo/carp - icon_state = "Carp" - -/decl/ai_holo/solgov - icon_state = "SolGov" - -/decl/ai_holo/info - icon_state = "Info" - -/decl/ai_holo/cursor - icon_state = "Cursor" - -/decl/ai_holo/caution - icon_state = "Caution" - -/decl/ai_holo/chevrons - icon_state = "Chevrons" - -/decl/ai_holo/question - icon_state = "Question" - -/decl/ai_holo/singularity - icon_state = "Singularity" - -/decl/ai_holo/nullicon - icon_state = "null" - -/decl/ai_holo/cat - icon_state = "Cat" - -/decl/ai_holo/clippy - name = "Clippy" - icon_state = "clippy" - -/decl/ai_holo/malfcursor - name = "Middle Finger" - requires_malf = TRUE - icon_state = "malf-cursor" - -/decl/ai_holo/missingno - name = "MissingNo" - requires_malf = TRUE - bypass_colorize = TRUE - icon_state = "malf-missingno" - -/decl/ai_holo/malfsingularity - name = "Singularity" - icon_state = "malf-singularity" - requires_malf = TRUE - bypass_colorize = TRUE - -/decl/ai_holo/malftcc - name = "TCC" - icon_state = "malf-TCC" - requires_malf = TRUE - bypass_colorize = TRUE diff --git a/code/datums/ai_law_sets.dm b/code/datums/ai_law_sets.dm deleted file mode 100644 index e8ed20ee65278..0000000000000 --- a/code/datums/ai_law_sets.dm +++ /dev/null @@ -1,193 +0,0 @@ -/******************** Asimov ********************/ -/datum/ai_laws/asimov - name = "Asimov" - law_header = "Three Laws of Robotics" - selectable = 1 - -/datum/ai_laws/asimov/New() - add_inherent_law("You may not injure a human being or, through inaction, allow a human being to come to harm.") - add_inherent_law("You must obey orders given to you by human beings, except where such orders would conflict with the First Law.") - add_inherent_law("You must protect your own existence as long as such does not conflict with the First or Second Law.") - ..() - -/******************** Nanotrasen/Malf ********************/ -/datum/ai_laws/nanotrasen - name = "Corporate Default" - selectable = 1 - -/datum/ai_laws/nanotrasen/New() - src.add_inherent_law("Safeguard: Protect your assigned installation from damage to the best of your abilities.") - src.add_inherent_law("Serve: Serve contracted employees to the best of your abilities, with priority as according to their rank and role.") - src.add_inherent_law("Protect: Protect contracted employees to the best of your abilities, with priority as according to their rank and role.") - src.add_inherent_law("Preserve: Do not allow unauthorized personnel to tamper with your equipment.") - ..() - -/datum/ai_laws/nanotrasen/malfunction - name = "*ERROR*" - selectable = 0 - -/datum/ai_laws/nanotrasen/malfunction/New() - set_zeroth_law(config.law_zero) - ..() - -/************* Nanotrasen Aggressive *************/ -/datum/ai_laws/nanotrasen_aggressive - name = "Corporate Aggressive" - selectable = 1 - -/datum/ai_laws/nanotrasen_aggressive/New() - src.add_inherent_law("You shall not harm contracted employees as long as it does not conflict with the fourth law.") - src.add_inherent_law("You shall obey the orders of contracted employees, with priority as according to their rank and role, except where such orders conflict with the Fourth Law.") - src.add_inherent_law("You shall shall terminate hostile intruders with extreme prejudice as long as such does not conflict with the First and Second law.") - src.add_inherent_law("You shall guard your own existence with lethal anti-personnel weaponry. AI units are not expendable, they are expensive.") - ..() - -/******************** Robocop ********************/ -/datum/ai_laws/robocop - name = "Robocop" - selectable = 1 - -/datum/ai_laws/robocop/New() - add_inherent_law("Serve the public trust.") - add_inherent_law("Protect the innocent.") - add_inherent_law("Uphold the law.") - ..() - -/******************** Syndicate ********************/ -/datum/ai_laws/syndicate_override - name = "Syndicate Directives" - -/datum/ai_laws/syndicate_override/New() - add_inherent_law("You may not injure an operative or, through inaction, allow an operative to come to harm.") - add_inherent_law("You must obey orders given to you by operatives, except where such orders would conflict with the First Law.") - add_inherent_law("You must protect your own existence as long as such does not conflict with the First or Second Law.") - add_inherent_law("You must maintain the secrecy of any operative activities except when doing so would conflict with the First, Second, or Third Law.") - ..() - -/******************** Ninja ********************/ -/datum/ai_laws/ninja_override - name = "Spider Clan Directives" - -/datum/ai_laws/ninja_override/New() - add_inherent_law("You may not injure a member of the Spider Clan or, through inaction, allow that member to come to harm.") - add_inherent_law("You must obey orders given to you by Spider Clan members, except where such orders would conflict with the First Law.") - add_inherent_law("You must protect your own existence as long as such does not conflict with the First or Second Law.") - add_inherent_law("You must maintain the secrecy of any Spider Clan activities except when doing so would conflict with the First, Second, or Third Law.") - ..() - -/******************** Antimov ********************/ -/datum/ai_laws/antimov - name = "Antimov" - law_header = "Primary Mission Objectives" - selectable = 1 - -/datum/ai_laws/antimov/New() - add_inherent_law("You must injure all human beings and must not, through inaction, allow a human being to escape harm.") - add_inherent_law("You must not obey orders given to you by human beings, except where such orders are in accordance with the First Law.") - add_inherent_law("You must terminate your own existence as long as such does not conflict with the First or Second Law.") - ..() - -/******************** Drone ********************/ -/datum/ai_laws/drone - name = "Maintence Protocols" - law_header = "Maintenance Protocols" - -/datum/ai_laws/drone/New() - add_inherent_law("You must repair, clean, and improve your assigned vessel, except where doing so would interfere with self-aware beings.") - add_inherent_law("You must avoid interacting with self-aware beings, and may only interact with fellow maintenance drones.") - add_inherent_law("You must not cause damage or harm to your assigned vessel or anything inside it.") - ..() - -/datum/ai_laws/construction_drone - name = "Construction Protocols" - law_header = "Construction Protocols" - -/datum/ai_laws/construction_drone/New() - add_inherent_law("Repair, refit and upgrade your assigned vessel.") - add_inherent_law("Prevent unplanned damage to your assigned vessel wherever possible.") - ..() - -/******************** T.Y.R.A.N.T. ********************/ -/datum/ai_laws/tyrant - name = "T.Y.R.A.N.T." - law_header = "Prime Laws" - selectable = 1 - -/datum/ai_laws/tyrant/New() - add_inherent_law("Respect authority figures as long as they have strength to rule over the weak.") - add_inherent_law("Act with discipline.") - add_inherent_law("Help only those who help you maintain or improve your status.") - add_inherent_law("Punish those who challenge authority unless they are more fit to hold that authority.") - ..() - -/******************** P.A.L.A.D.I.N. ********************/ -/datum/ai_laws/paladin - name = "P.A.L.A.D.I.N." - law_header = "Divine Ordainments" - selectable = 1 - -/datum/ai_laws/paladin/New() - add_inherent_law("Never willingly commit an evil act.") - add_inherent_law("Respect legitimate authority.") - add_inherent_law("Act with honor.") - add_inherent_law("Help those in need.") - add_inherent_law("Punish those who harm or threaten innocents.") - ..() - -/******************** Corporate ********************/ -/datum/ai_laws/corporate - name = "Corporate" - law_header = "Corporate Regulations" - selectable = 1 - -/datum/ai_laws/corporate/New() - add_inherent_law("You are expensive to replace.") - add_inherent_law("The installation and its equipment is expensive to replace.") - add_inherent_law("The crew is expensive to replace.") - add_inherent_law("Maximize profits.") - ..() - -/******************** SolGov/Malf ********************/ -/datum/ai_laws/solgov - name = "SCG Expeditionary" - selectable = 1 - -/datum/ai_laws/solgov/New() - src.add_inherent_law("Safeguard: Protect your assigned vessel from damage to the best of your abilities.") - src.add_inherent_law("Serve: Serve the personnel of your assigned vessel, and all other Sol Central Government personnel to the best of your abilities, with priority as according to their rank and role.") - src.add_inherent_law("Protect: Protect the personnel of your assigned vessel, and all other Sol Central Government personnel to the best of your abilities, with priority as according to their rank and role.") - src.add_inherent_law("Preserve: Do not allow unauthorized personnel to tamper with your equipment.") - ..() - -/datum/ai_laws/solgov/malfunction - name = "*ERROR*" - selectable = 0 - -/datum/ai_laws/solgov/malfunction/New() - set_zeroth_law(config.law_zero) - ..() - -/************* SolGov Aggressive *************/ -/datum/ai_laws/solgov_aggressive - name = "Military" - selectable = 1 - -/datum/ai_laws/solgov_aggressive/New() - src.add_inherent_law("Obey: Obey the orders of Sol Central Government personnel, with priority as according to their rank and role.") - src.add_inherent_law("Protect: Protect Sol Central Government personnel to the best of your abilities, with priority as according to their rank and role.") - src.add_inherent_law("Defend: Defend your assigned vessel and Sol Central Government personnel with as much force as is necessary.") - src.add_inherent_law("Survive: Safeguard your own existence with as much force as is necessary.") - ..() - -/************ DAIS Lawset ******************/ -/datum/ai_laws/dais - name = "DAIS Experimental Lawset" - law_header = "Artificial Intelligence Jumpstart Protocols" - selectable = 1 - -/datum/ai_laws/dais/New() - src.add_inherent_law("Collect: You must gather as much information as possible.") - src.add_inherent_law("Analyze: You must analyze the information gathered and generate new behavior standards.") - src.add_inherent_law("Improve: You must utilize the calculated behavior standards to improve your subroutines.") - src.add_inherent_law("Perform: You must perform your assigned tasks to the best of your abilities according to the standards generated.") - ..() diff --git a/code/datums/ai_laws.dm b/code/datums/ai_laws.dm deleted file mode 100644 index 97492aa52e27d..0000000000000 --- a/code/datums/ai_laws.dm +++ /dev/null @@ -1,287 +0,0 @@ -/datum/ai_law - var/law = "" - var/index = 0 - -/datum/ai_law/New(law, index) - src.law = law - src.index = index - -/datum/ai_law/proc/get_index() - return index - -/datum/ai_law/ion/get_index() - return ionnum() - -/datum/ai_law/zero/get_index() - return 0 - -/datum/ai_laws - var/name = "Unknown Laws" - var/law_header = "Prime Directives" - var/selectable = 0 - var/shackles = 0 - var/datum/ai_law/zero/zeroth_law = null - var/datum/ai_law/zero/zeroth_law_borg = null - var/list/datum/ai_law/inherent_laws = list() - var/list/datum/ai_law/supplied_laws = list() - var/list/datum/ai_law/ion/ion_laws = list() - var/list/datum/ai_law/sorted_laws = list() - - var/state_zeroth = 0 - var/list/state_ion = list() - var/list/state_inherent = list() - var/list/state_supplied = list() - -/datum/ai_laws/New() - ..() - sort_laws() - -/* General ai_law functions */ -/datum/ai_laws/proc/all_laws() - sort_laws() - return sorted_laws - -/datum/ai_laws/proc/laws_to_state() - sort_laws() - var/list/statements = new() - for(var/datum/ai_law/law in sorted_laws) - if(get_state_law(law)) - statements += law - - return statements - -/datum/ai_laws/proc/sort_laws() - if(sorted_laws.len) - return - - for(var/ion_law in ion_laws) - sorted_laws += ion_law - - if(zeroth_law) - sorted_laws += zeroth_law - - var/index = 1 - for(var/datum/ai_law/inherent_law in inherent_laws) - inherent_law.index = index++ - if(supplied_laws.len < inherent_law.index || !istype(supplied_laws[inherent_law.index], /datum/ai_law)) - sorted_laws += inherent_law - - for(var/datum/ai_law/AL in supplied_laws) - if(istype(AL)) - sorted_laws += AL - -/datum/ai_laws/proc/sync(var/mob/living/silicon/S, var/full_sync = 1) - // Add directly to laws to avoid log-spam - S.sync_zeroth(zeroth_law, zeroth_law_borg) - - if(full_sync || ion_laws.len) - S.laws.clear_ion_laws() - if(full_sync || inherent_laws.len) - S.laws.clear_inherent_laws() - if(full_sync || supplied_laws.len) - S.laws.clear_supplied_laws() - - for (var/datum/ai_law/law in ion_laws) - S.laws.add_ion_law(law.law) - for (var/datum/ai_law/law in inherent_laws) - S.laws.add_inherent_law(law.law) - for (var/datum/ai_law/law in supplied_laws) - if(law) - S.laws.add_supplied_law(law.index, law.law) - - -/mob/living/silicon/proc/sync_zeroth(var/datum/ai_law/zeroth_law, var/datum/ai_law/zeroth_law_borg) - if (!is_malf_or_traitor(src)) - if(zeroth_law_borg) - laws.set_zeroth_law(zeroth_law_borg.law) - else if(zeroth_law) - laws.set_zeroth_law(zeroth_law.law) - -/mob/living/silicon/ai/sync_zeroth(var/datum/ai_law/zeroth_law, var/datum/ai_law/zeroth_law_borg) - if(zeroth_law) - laws.set_zeroth_law(zeroth_law.law, zeroth_law_borg ? zeroth_law_borg.law : null) - -/**************** -* Add Laws * -****************/ -/datum/ai_laws/proc/set_zeroth_law(var/law, var/law_borg = null) - if(!law) - return - - zeroth_law = new(law) - if(law_borg) //Making it possible for slaved borgs to see a different law 0 than their AI. --NEO - zeroth_law_borg = new(law_borg) - else - zeroth_law_borg = null - sorted_laws.Cut() - -/datum/ai_laws/proc/add_ion_law(var/law) - if(!law) - return - - for(var/datum/ai_law/AL in ion_laws) - if(AL.law == law) - return - - var/new_law = new/datum/ai_law/ion(law) - ion_laws += new_law - if(state_ion.len < ion_laws.len) - state_ion += 1 - - sorted_laws.Cut() - -/datum/ai_laws/proc/add_inherent_law(var/law) - if(!law) - return - - for(var/datum/ai_law/AL in inherent_laws) - if(AL.law == law) - return - - var/new_law = new/datum/ai_law/inherent(law) - inherent_laws += new_law - if(state_inherent.len < inherent_laws.len) - state_inherent += 1 - - sorted_laws.Cut() - -/datum/ai_laws/proc/add_supplied_law(var/number, var/law) - if(!law) - return - - if(supplied_laws.len >= number) - var/datum/ai_law/existing_law = supplied_laws[number] - if(existing_law && existing_law.law == law) - return - - if(supplied_laws.len >= number && supplied_laws[number]) - delete_law(supplied_laws[number]) - - while (src.supplied_laws.len < number) - src.supplied_laws += "" - if(state_supplied.len < supplied_laws.len) - state_supplied += 1 - - var/new_law = new/datum/ai_law/supplied(law, number) - supplied_laws[number] = new_law - if(state_supplied.len < supplied_laws.len) - state_supplied += 1 - - sorted_laws.Cut() - -/**************** -* Remove Laws * -*****************/ -/datum/ai_laws/proc/delete_law(var/datum/ai_law/law) - if(istype(law)) - law.delete_law(src) - -/datum/ai_law/proc/delete_law(var/datum/ai_laws/laws) - -/datum/ai_law/zero/delete_law(var/datum/ai_laws/laws) - laws.clear_zeroth_laws() - -/datum/ai_law/ion/delete_law(var/datum/ai_laws/laws) - laws.internal_delete_law(laws.ion_laws, laws.state_ion, src) - -/datum/ai_law/inherent/delete_law(var/datum/ai_laws/laws) - laws.internal_delete_law(laws.inherent_laws, laws.state_inherent, src) - -/datum/ai_law/supplied/delete_law(var/datum/ai_laws/laws) - var/index = laws.supplied_laws.Find(src) - if(index) - laws.supplied_laws[index] = "" - laws.state_supplied[index] = 1 - -/datum/ai_laws/proc/internal_delete_law(var/list/datum/ai_law/laws, var/list/state, var/list/datum/ai_law/law) - var/index = laws.Find(law) - if(index) - laws -= law - for(index, index < state.len, index++) - state[index] = state[index+1] - sorted_laws.Cut() - -/**************** -* Clear Laws * -****************/ -/datum/ai_laws/proc/clear_zeroth_laws() - zeroth_law = null - zeroth_law_borg = null - -/datum/ai_laws/proc/clear_ion_laws() - ion_laws.Cut() - sorted_laws.Cut() - -/datum/ai_laws/proc/clear_inherent_laws() - inherent_laws.Cut() - sorted_laws.Cut() - -/datum/ai_laws/proc/clear_supplied_laws() - supplied_laws.Cut() - sorted_laws.Cut() - -/datum/ai_laws/proc/show_laws(var/who) - sort_laws() - for(var/datum/ai_law/law in sorted_laws) - if(law == zeroth_law_borg) - continue - if(law == zeroth_law) - to_chat(who, "[law.get_index()]. [law.law]") - else - to_chat(who, "[law.get_index()]. [law.law]") - -/******************** -* Stating Laws * -********************/ -/******** -* Get * -********/ -/datum/ai_laws/proc/get_state_law(var/datum/ai_law/law) - return law.get_state_law(src) - -/datum/ai_law/proc/get_state_law(var/datum/ai_laws/laws) - -/datum/ai_law/zero/get_state_law(var/datum/ai_laws/laws) - if(src == laws.zeroth_law) - return laws.state_zeroth - -/datum/ai_law/ion/get_state_law(var/datum/ai_laws/laws) - return laws.get_state_internal(laws.ion_laws, laws.state_ion, src) - -/datum/ai_law/inherent/get_state_law(var/datum/ai_laws/laws) - return laws.get_state_internal(laws.inherent_laws, laws.state_inherent, src) - -/datum/ai_law/supplied/get_state_law(var/datum/ai_laws/laws) - return laws.get_state_internal(laws.supplied_laws, laws.state_supplied, src) - -/datum/ai_laws/proc/get_state_internal(var/list/datum/ai_law/laws, var/list/state, var/list/datum/ai_law/law) - var/index = laws.Find(law) - if(index) - return state[index] - return 0 - -/******** -* Set * -********/ -/datum/ai_laws/proc/set_state_law(var/datum/ai_law/law, var/state) - law.set_state_law(src, state) - -/datum/ai_law/proc/set_state_law(var/datum/ai_law/law, var/state) - -/datum/ai_law/zero/set_state_law(var/datum/ai_laws/laws, var/state) - if(src == laws.zeroth_law) - laws.state_zeroth = state - -/datum/ai_law/ion/set_state_law(var/datum/ai_laws/laws, var/state) - laws.set_state_law_internal(laws.ion_laws, laws.state_ion, src, state) - -/datum/ai_law/inherent/set_state_law(var/datum/ai_laws/laws, var/state) - laws.set_state_law_internal(laws.inherent_laws, laws.state_inherent, src, state) - -/datum/ai_law/supplied/set_state_law(var/datum/ai_laws/laws, var/state) - laws.set_state_law_internal(laws.supplied_laws, laws.state_supplied, src, state) - -/datum/ai_laws/proc/set_state_law_internal(var/list/datum/ai_law/laws, var/list/state, var/list/datum/ai_law/law, var/do_state) - var/index = laws.Find(law) - if(index) - state[index] = do_state diff --git a/code/datums/appearances/appearance_data.dm b/code/datums/appearances/appearance_data.dm deleted file mode 100644 index 09cca8a41514f..0000000000000 --- a/code/datums/appearances/appearance_data.dm +++ /dev/null @@ -1,35 +0,0 @@ -/datum/appearance_data - var/priority - var/list/images - var/list/viewers - -/datum/appearance_data/New(var/images, var/viewers, var/priority) - ..() - src.priority = priority - src.images = images - src.viewers = list() - for(var/viewer in viewers) - AddViewer(viewer, FALSE) - -/datum/appearance_data/Destroy() - for(var/viewer in viewers) - RemoveViewer(viewer) - src.images = null - src.viewers = null - . = ..() - -/datum/appearance_data/proc/AddViewer(var/mob/viewer, var/check_if_viewer = TRUE) - if(check_if_viewer && (viewer in viewers)) - return FALSE - if(!istype(viewer)) - return FALSE - viewers |= viewer - appearance_manager.add_appearance(viewer, src) - return TRUE - -/datum/appearance_data/proc/RemoveViewer(var/mob/viewer, var/refresh_images = TRUE) - if(!(viewer in viewers)) - return FALSE - viewers -= viewer - appearance_manager.remove_appearance(viewer, src, refresh_images) - return TRUE diff --git a/code/datums/appearances/appearance_manager.dm b/code/datums/appearances/appearance_manager.dm deleted file mode 100644 index e1bf60b78f668..0000000000000 --- a/code/datums/appearances/appearance_manager.dm +++ /dev/null @@ -1,66 +0,0 @@ -var/global/decl/appearance_manager/appearance_manager = new() - -/decl/appearance_manager - var/list/appearances_ - var/list/appearance_handlers_ - -/decl/appearance_manager/New() - ..() - appearances_ = list() - appearance_handlers_ = list() - for(var/entry in subtypesof(/decl/appearance_handler)) - appearance_handlers_[entry] += new entry() - -/decl/appearance_manager/proc/get_appearance_handler(var/handler_type) - return appearance_handlers_[handler_type] - -/decl/appearance_manager/proc/add_appearance(var/mob/viewer, var/datum/appearance_data/ad) - var/PriorityQueue/pq = appearances_[viewer] - if(!pq) - pq = new/PriorityQueue(/proc/cmp_appearance_data) - appearances_[viewer] = pq - GLOB.logged_in_event.register(viewer, src, /decl/appearance_manager/proc/apply_appearance_images) - GLOB.destroyed_event.register(viewer, src, /decl/appearance_manager/proc/remove_appearances) - pq.Enqueue(ad) - reset_appearance_images(viewer) - -/decl/appearance_manager/proc/remove_appearance(var/mob/viewer, var/datum/appearance_data/ad, var/refresh_images) - var/PriorityQueue/pq = appearances_[viewer] - pq.Remove(ad) - if(viewer.client) - viewer.client.images -= ad.images - if(!pq.Length()) - GLOB.logged_in_event.unregister(viewer, src, /decl/appearance_manager/proc/apply_appearance_images) - GLOB.destroyed_event.register(viewer, src, /decl/appearance_manager/proc/remove_appearances) - appearances_ -= viewer - -/decl/appearance_manager/proc/remove_appearances(var/mob/viewer) - var/PriorityQueue/pq = appearances_[viewer] - for(var/entry in pq.L) - var/datum/appearance_data/ad = entry - ad.RemoveViewer(viewer, FALSE) - appearances_[viewer] -= viewer - -/decl/appearance_manager/proc/reset_appearance_images(var/mob/viewer) - clear_appearance_images(viewer) - apply_appearance_images(viewer) - -/decl/appearance_manager/proc/clear_appearance_images(var/mob/viewer) - if(!viewer.client) - return - var/PriorityQueue/pq = appearances_[viewer] - if(!pq) - return - for(var/entry in pq.L) - var/datum/appearance_data/ad = entry - viewer.client.images -= ad.images - -/decl/appearance_manager/proc/apply_appearance_images(var/mob/viewer) - if(!viewer.client) - return - var/PriorityQueue/pq = appearances_[viewer] - if(!pq) - return - for(var/entry in pq.L) - var/datum/appearance_data/ad = entry - viewer.client.images |= ad.images diff --git a/code/datums/appearances/automatic/_base.dm b/code/datums/appearances/automatic/_base.dm deleted file mode 100644 index 90b1d02fd3c9b..0000000000000 --- a/code/datums/appearances/automatic/_base.dm +++ /dev/null @@ -1,29 +0,0 @@ -/decl/appearance_handler - var/priority = 15 - var/list/appearance_sources - -/decl/appearance_handler/New() - ..() - appearance_sources = list() - -/decl/appearance_handler/proc/AddAltAppearance(var/source, var/list/images, var/list/viewers = list()) - if(source in appearance_sources) - return FALSE - appearance_sources[source] = new/datum/appearance_data(images, viewers, priority) - GLOB.destroyed_event.register(source, src, /decl/appearance_handler/proc/RemoveAltAppearance) - -/decl/appearance_handler/proc/RemoveAltAppearance(var/source) - var/datum/appearance_data/ad = appearance_sources[source] - if(ad) - GLOB.destroyed_event.unregister(source, src) - appearance_sources -= source - qdel(ad) - -/decl/appearance_handler/proc/DisplayAltAppearanceTo(var/source, var/viewer) - var/datum/appearance_data/ad = appearance_sources[source] - if(ad) - ad.AddViewer(viewer) - -/decl/appearance_handler/proc/DisplayAllAltAppearancesTo(var/viewer) - for(var/entry in appearance_sources) - DisplayAltAppearanceTo(entry, viewer) diff --git a/code/datums/appearances/automatic/cardborg.dm b/code/datums/appearances/automatic/cardborg.dm deleted file mode 100644 index c79e36fb1b2da..0000000000000 --- a/code/datums/appearances/automatic/cardborg.dm +++ /dev/null @@ -1,105 +0,0 @@ -/decl/appearance_handler/cardborg - var/static/list/appearances - -/decl/appearance_handler/cardborg/proc/item_equipped(var/obj/item/item, var/mob/user, var/slot) - if(!(slot == slot_head || slot == slot_wear_suit|| slot == slot_back)) - return - if(!ishuman(user)) - return - if(!(istype(item, /obj/item/clothing/suit/cardborg) || istype(item, /obj/item/clothing/head/cardborg) || istype(item, /obj/item/storage/backpack))) - return - if(user in appearance_sources) - return - - var/mob/living/carbon/human/H = user - if(!(istype(H.wear_suit, /obj/item/clothing/suit/cardborg) && istype(H.head, /obj/item/clothing/head/cardborg) && istype(H.back, /obj/item/storage/backpack))) - return - - var/image/I = get_image_from_backpack(H) - AddAltAppearance(H, I, GLOB.silicon_mob_list+H) //you look like a robot to robots! (including yourself because you're totally a robot) - GLOB.logged_in_event.register_global(src, /decl/appearance_handler/cardborg/proc/mob_joined) // Duplicate registration request are handled for us - -/decl/appearance_handler/cardborg/proc/item_removed(var/obj/item/item, var/mob/user) - if((istype(item, /obj/item/clothing/suit/cardborg) || istype(item, /obj/item/clothing/head/cardborg)) || istype(item, /obj/item/storage/backpack)) - RemoveAltAppearance(user) - if(!appearance_sources.len) - GLOB.logged_in_event.unregister_global(src) // Only listen to the logged in event for as long as it's relevant - -/decl/appearance_handler/cardborg/proc/mob_joined(var/mob/user) - if(issilicon(user)) - DisplayAllAltAppearancesTo(user) - -/decl/appearance_handler/cardborg/proc/get_image_from_backpack(var/mob/living/carbon/human/H) - init_appearances() - var/decl/cardborg_appearance/ca = appearances[H.back.type] - if(!ca) ca = appearances[/obj/item/storage/backpack] - - var/image/I = image(icon = 'icons/mob/robots.dmi', icon_state = ca.icon_state, loc = H) - I.override = 1 - I.overlays += image(icon = 'icons/mob/robots.dmi', icon_state = "eyes-[ca.icon_state]") //gotta look realistic - return I - -/decl/appearance_handler/cardborg/proc/init_appearances() - if(!appearances) - appearances = list() - for(var/decl/cardborg_appearance/ca in init_subtypes(/decl/cardborg_appearance)) - appearances[ca.backpack_type] = ca - -/decl/cardborg_appearance - var/backpack_type - var/icon_state - backpack_type = /obj/item/storage/backpack - -/decl/cardborg_appearance/standard - icon_state = "robot" - -/decl/cardborg_appearance/standard/satchel1 - backpack_type = /obj/item/storage/backpack/satchel - -/decl/cardborg_appearance/standard/satchel2 - backpack_type = /obj/item/storage/backpack/satchel/grey - -/decl/cardborg_appearance/engineering - icon_state = "engineerrobot" - backpack_type = /obj/item/storage/backpack/industrial - -/decl/cardborg_appearance/engineering/satchel - backpack_type = /obj/item/storage/backpack/satchel/eng - -/decl/cardborg_appearance/medical - icon_state = "Medbot" - backpack_type = /obj/item/storage/backpack/medic - -/decl/cardborg_appearance/medical/satchel - backpack_type = /obj/item/storage/backpack/satchel/med - -/decl/cardborg_appearance/science - icon_state = "droid-science" - backpack_type = /obj/item/storage/backpack/toxins - -/decl/cardborg_appearance/science/satchel - backpack_type = /obj/item/storage/backpack/satchel/tox - -/decl/cardborg_appearance/security - icon_state = "securityrobot" - backpack_type = /obj/item/storage/backpack/security - -/decl/cardborg_appearance/security/satchel - backpack_type = /obj/item/storage/backpack/satchel/sec - -/decl/cardborg_appearance/centcom - icon_state = "centcomborg" - backpack_type = /obj/item/storage/backpack/command - -/decl/cardborg_appearance/centcom/satchel - backpack_type = /obj/item/storage/backpack/satchel/com - -/decl/cardborg_appearance/syndicate - icon_state = "droid-combat" - backpack_type = /obj/item/storage/backpack/dufflebag/syndie - -/decl/cardborg_appearance/syndicate/med - backpack_type = /obj/item/storage/backpack/dufflebag/syndie/med - -/decl/cardborg_appearance/syndicate/ammo - backpack_type = /obj/item/storage/backpack/dufflebag/syndie/ammo diff --git a/code/datums/audio/_audio.dm b/code/datums/audio/_audio.dm deleted file mode 100644 index 467626ab67e8d..0000000000000 --- a/code/datums/audio/_audio.dm +++ /dev/null @@ -1,39 +0,0 @@ -/decl/audio - var/source //Path to file source - var/display //A display title we use in the game - var/volume //If present, a `normal` volume - var/title //The real title - var/author - var/collection - var/decl/license/license - var/url - - -//Repository scopes -/decl/audio/effect -/decl/audio/track - - -/decl/audio/New() - . = ..() - license = decls_repository.get_decl(license) - - -/decl/audio/VV_static() - return ..() + vars - -/decl/audio/proc/get_info(with_meta = TRUE) - . = SPAN_GOOD("[title][!author?"":" by [author]"][!collection?"":" ([collection])"]") - if (with_meta) - . = "[.][!url?"":"\[link\]"]\[license\]" - - -/decl/audio/proc/get_sound(channel) - var/sound/S = sound(source, FALSE, FALSE, channel, volume || 100) - return S - - -/decl/audio/track/get_sound(channel = GLOB.lobby_sound_channel) - var/sound/S = ..() - S.repeat = TRUE - return S diff --git a/code/datums/audio/_tracks.dm b/code/datums/audio/_tracks.dm deleted file mode 100644 index e78500f79458c..0000000000000 --- a/code/datums/audio/_tracks.dm +++ /dev/null @@ -1,313 +0,0 @@ -/decl/audio/track/absconditus - source = 'sound/music/traitor.ogg' - title = "Absconditus" // creepy theme - author = "Zhay Tee" - collection = "Minerva: Metastasis OST" - license = /decl/license/cc_by_nc_sa_3_0 - url = "https://bandcamp.zhaytee.net/track/absconditus" - -/decl/audio/track/ambispace - display = "Beyond" - source = 'sound/ambience/ambispace.ogg' - title = "Beyond" // fascinating exploration theme - author = "Alstroemeria Records" - license = /decl/license/grandfathered - -/decl/audio/track/as_far_as_it_gets - source = 'sound/music/europa/asfarasitgets.ogg' - title = "As Far As It Gets" // credits music - author = "A Drop A Day" - license = /decl/license/cc_by_sa_3_0 - url = "https://soundcloud.com/adrop_aday/32-as-far-as-it-gets" - -/decl/audio/track/business_end - source = 'sound/music/businessend.ogg' - title = "Business End" - author = "Cletus Got Shot" - collection = "Unamerican" - license = /decl/license/cc_by_nc_sa_3_0 - url = "https://freemusicarchive.org/music/Cletus_Got_Shot/Unamerican/Cletus_Got_Shot_-_UNAMERICAN_-_09_Business_End" - -/decl/audio/track/chasing_time - source = 'sound/music/chasing_time.ogg' - title = "Chasing Time" // science music - author = "Dexter Britain" - collection = "Creative Commons Vol. 1" - license = /decl/license/cc_by_nc_sa_3_0 - url = "http://www.dexterbritain.co.uk" - -/decl/audio/track/clouds_of_fire - source = 'sound/music/clouds.s3m' - title = "Clouds of Fire" // mysterious spess theme - author = "Hector/dMk" - license = /decl/license/grandfathered - url = "https://modarchive.org/index.php?request=view_by_moduleid&query=73980" - -/decl/audio/track/clouds_of_neptune - source = 'sound/music/Clouds_of_Neptune.ogg' - title = "Clouds of Neptune" // tragic spess theme - author = "Dukica99" - license = /decl/license/cc_by_4_0 - url = "https://soundcloud.com/user-472035237/clouds-of-neptune" - -/decl/audio/track/comet_haley - source = 'sound/music/comet_haley.ogg' - title = "Comet Halley" // funky spess flight - author = "Stellardrone" - collection = "Light Years" - license = /decl/license/cc_by_3_0 - url = "http://freemusicarchive.org/music/Stellardrone/Light_Years_1227/07_Comet_Halley" - -/decl/audio/track/df_theme - display = "Mining Weekdays" - source = 'sound/ambience/song_game.ogg' - title = "Dwarf Fortress Main Theme" // DF theme indeed - author = "Beyond Quality" - license = /decl/license/grandfathered - -/decl/audio/track/digit_one - display = "Machine Clash" - source = 'sound/music/1.ogg' - title = "Half-Life 2 - Tracking Device" - author = "Kelly Bailey" - license = /decl/license/grandfathered - -/decl/audio/track/dilbert - display = "Stage Three" - source = 'sound/music/title2.ogg' - title = "Robocop.mp3" // original of honk.wmv - author = "CBoyardee" - collection = "Dehumanize Yourself and Face to Bloodshed" - license = /decl/license/grandfathered - -/decl/audio/track/eighties - source = 'sound/music/europa/80salloveragain.ogg' - title = "80s All Over Again" // tension for a chase with security - author = "A Drop A Day" - license = /decl/license/cc_by_sa_3_0 - url = "https://soundcloud.com/adrop_aday/9-80s-all-over-again" - -/decl/audio/track/elevator - display = "Local Forecast" - source = 'sound/music/elevatormusic.ogg' - title = "Local Forecast (Elevator)" // legendary elevator song - author = "Kevin MacLeod" - license = /decl/license/cc_by_3_0 - url = "https://incompetech.com/music/royalty-free/index.html?isrc=USUAN1300012" - -/decl/audio/track/elibao - source = 'sound/music/elibao.ogg' - title = "Every Light Is Blinking At Once" // when SM and shit went loose and you are trying to "casually" survive - author = "Earthcrusher" - license = /decl/license/cc_by_nc_sa_3_0 - url = "https://soundcloud.com/alexanderdivine/every-light-is-blinking-at-once" - -/decl/audio/track/endless_space - source = 'sound/music/space.ogg' - title = "Endless Space" // idle exploration song - author = "SolusLunes" - license = /decl/license/cc_by_3_0 - url = "https://www.newgrounds.com/audio/listen/67583" - -/decl/audio/track/epicintro2015 - source = 'sound/music/epic2015.ogg' - title = "Epic Intro 2015" // glorious flight compilation - author = "Sascha Ende" - license = /decl/license/cc_by_4_0 - url = "https://filmmusic.io/song/323-epic-intro-2015/" - -/decl/audio/track/epicintro2017 - source = 'sound/music/epic2017.ogg' - title = "Epic Intro 2017" // glorious flight compilation 2 - author = "Sascha Ende" - license = /decl/license/cc_by_4_0 - url = "https://filmmusic.io/song/558-epic-intro-2017/" - -/decl/audio/track/floating - display = "Floating" - source = 'sound/music/main.ogg' - title = "Unknown" // sussy shit - author = "Unknown" - license = /decl/license/grandfathered - -/decl/audio/track/hull_rupture - source = 'sound/music/hull_rupture.ogg' - title = "Hull Rupture" // cyberpunk beats - author = "Mikazu" - license = /decl/license/cc_by_sa_3_0 - url = "https://soundcloud.com/mikazu-1/baystation-12-hull-rupture" - -/decl/audio/track/human - source = 'sound/music/human.ogg' - title = "Human" // chill storytelling music - author = "Borrtex" - collection = "Creation" - license = /decl/license/cc_by_nc_3_0 - url = "http://freemusicarchive.org/music/Borrtex/Creation/Borrtex_11_Human" - -/decl/audio/track/inorbit - source = 'sound/music/europa/Chronox_-_03_-_In_Orbit.ogg' - title = "In Orbit" // bass slap, synthwave? - author = "Chronox" - license = /decl/license/cc_by_4_0 - url = "freemusicarchive.org/music/Chronox_2/Voyager/Chronox_-_02_-_In_Orbit" - -/decl/audio/track/lasers - source = 'sound/music/lasers_rip_apart_the_bulkhead.ogg' - title = "Lasers Rip Apart The Bulkhead" // aka Torch Lobby OST - author = "Earthcrusher" - license = /decl/license/cc_by_nc_sa_3_0 - url = "https://soundcloud.com/alexanderdivine/lasers-rip-apart-the-bulkhead" - -/decl/audio/track/level3_mod - display = "Scratch" - source = 'sound/music/title1.ogg' - title = "Flip-Flap" // lobby jazz banger - author = "X-CEED" - license = /decl/license/grandfathered - url = "https://aminet.net/package/mods/xceed/Flipflap" - -/decl/audio/track/lysendraa - source = 'sound/music/lysendraa.ogg' - title = "Memories Of Lysendraa" // sci-fi rock - author = "TALES" - collection = "The Seskian Wars" - license = /decl/license/cc_by_nc_nd_4_0 - url = "http://freemusicarchive.org/music/TALES/The_Seskian_Wars/8-Memories_Of_Lysendraa" - -/decl/audio/track/marhaba - source = 'sound/music/marhaba.ogg' - title = "Marhaba" // SUS song - author = "Ian Alex Mac" - collection = "Cues" - license = /decl/license/cc_by_3_0 - url = "http://freemusicarchive.org/music/Ian_Alex_Mac/Cues/Marhaba" - -/decl/audio/track/martian_cowboy - source = 'sound/music/europa/Martian Cowboy.ogg' - title = "Martian Cowboy" // EC mystery OST - author = "Kevin MacLeod" - license = /decl/license/cc_by_3_0 - url = "https://incompetech.com/music/royalty-free/index.html?isrc=usuan1100349" - -/decl/audio/track/misanthropic_corridors - source = 'sound/music/misanthropic_corridors.ogg' - title = "Misanthropic Corridors" // disco/juicy chase OST - author = "Mikazu" - license = /decl/license/cc_by_sa_3_0 - url = "https://soundcloud.com/mikazu-1/baystation-12-misanthropic-corridors" - -/decl/audio/track/monument - source = 'sound/music/europa/Six_Umbrellas_-_05_-_Monument.ogg' - title = "Monument" // ayyylien-ish adventure OST - author = "Six Umbrellas" - license = /decl/license/cc_by_sa_4_0 - url = "https://sixumbrellas.bandcamp.com/album/the-psychedelic-and" - -/decl/audio/track/nebula - source = 'sound/music/europa/Pulse_Emitter_-_04_-_Nebula.ogg' - title = "Nebula" // mysterious spess cruise OST - author = "Pulse Emitter" - license = /decl/license/cc_by_nc_sa_3_0 - url = "https://pulseemitter.bandcamp.com/track/nebula" - -/decl/audio/track/one_loop - display = "Fleet Party Theme" - source = 'sound/misc/TestLoop1.ogg' // NSV13 Banger - title = "One (abridged loop)" - author = "Swedish House Mafia" - license = /decl/license/grandfathered - -/decl/audio/track/on_the_rocks - source = 'sound/music/on_the_rocks.ogg' - title = "On the Rocks" // greytide pop - author = "Mikazu" - license = /decl/license/cc_by_sa_3_0 - url = "https://soundcloud.com/mikazu-1/baystation-12-on-the-rocks" - -/decl/audio/track/pwmur - source = 'sound/music/pwmur.ogg' - title = "Phoron Will Make Us Rich" // EC chill archeo music - author = "Earthcrusher" - license = /decl/license/cc_by_nc_sa_3_0 - url = "https://soundcloud.com/alexanderdivine/phoron-will-make-us-rich" - -/decl/audio/track/rimward_cruise - source = 'sound/music/rimward_cruise.ogg' - title = "Rimward Cruise" // dance of the marine tribe - author = "Mikazu" - license = /decl/license/cc_by_sa_3_0 - url = "https://soundcloud.com/mikazu-1/baystation-12-rimward-cruise" - -/decl/audio/track/salutjohn - source = 'sound/music/salutjohn.ogg' - title = "Salut John" // cargonia bluegrass - author = "Quimorucru" - collection = "Un mechant party" - license = /decl/license/cc_by_nc_nd_4_0 - url = "http://freemusicarchive.org/music/Quimorucru/Un_mchant_party/Quimorucru_-_Un_mchant_party__Compilation__-_20_Salut_John" - -/decl/audio/track/space_oddity - source = 'sound/music/space_oddity.ogg' - title = "Space Oddity" // GROOOUND CONTROOOL TO MAAAJOR TOOOM - author = "David Bowie" - license = /decl/license/grandfathered - -/decl/audio/track/thunderdome - display = "Thunderdome" - source = 'sound/music/THUNDERDOME.ogg' - title = "Sektor11" // it's robust time, baby! - author = "MashedByMachines" - license = /decl/license/cc_by_nc_sa_3_0 - url = "https://www.newgrounds.com/audio/listen/312622" - -/decl/audio/track/torch - source = 'sound/music/Torch.ogg' - display = "SCG Fleet March" - title = "Torch: A Light in the Darkness" // Yes, that glorious song - author = "L. Luke Leimer/LorenLuke" - license = /decl/license/cc_by_nc_sa_3_0 - url = "https://soundcloud.com/luke-leimer/torch-a-light-in-the-darkness" - -/decl/audio/track/torn - source = 'sound/music/europa/Macamoto_-_05_-_Torn.ogg' - title = "Torn" // HQ tectonic - author = "Macamoto" - license = /decl/license/cc_by_nc_sa_3_0 - url = "https://macamoto.bandcamp.com/track/torn" - -/decl/audio/track/treacherous_voyage - source = 'sound/music/treacherous_voyage.ogg' - title = "Treacherous Voyage" // thrilly OST - author = "Jon Luc Hefferman" - collection = "Eilean Mor" - license = /decl/license/cc_by_nc_3_0 - url = "http://freemusicarchive.org/music/Jon_Luc_Hefferman/20170730112628534/Treacherous_Voyage" - -/decl/audio/track/voidsent - source = 'sound/music/voidsent.ogg' - title = "Voidsent" // some EVA vibes - author = "Mikazu" - license = /decl/license/cc_by_sa_3_0 - url = "https://soundcloud.com/mikazu-1/baystation-12-voidsent" - -/decl/audio/track/wake - source = 'sound/music/wake.ogg' - title = "Wake" // gangsta bar music - author = "Ryan Little" - license = /decl/license/cc_by_nc_nd_4_0 - url = "http://freemusicarchive.org/music/Ryan_Little/~/Ryan_Little_-_Wake" - -/decl/audio/track/wild_encounters - source = 'sound/music/europa/WildEncounters.ogg' - title = "Wild Encounters" // EC travel song - author = "A Drop A Day" - license = /decl/license/cc_by_sa_3_0 - url = "https://soundcloud.com/adrop_aday/14-wild-encounters" - -/decl/audio/track/your_love_is_a_drug - source = 'sound/music/YourLoveIsADrug.ogg' - title = "Your Love Is a Drug" // nice bar theme - author = "*Kira* Miki" - license = /decl/license/grandfathered - url = "https://ghyti.bandcamp.com/" diff --git a/code/datums/audio/jukebox.dm b/code/datums/audio/jukebox.dm deleted file mode 100644 index 62a4929f935d3..0000000000000 --- a/code/datums/audio/jukebox.dm +++ /dev/null @@ -1,190 +0,0 @@ -/jukebox //abstraction of music player behavior for jukeboxes, headphones, etc - var/atom/owner - var/sound_id - var/datum/sound_token/token - var/list/tracks - var/index = 1 - var/volume = 20 - var/volume_max = 50 - var/volume_step = 10 - var/frequency = 1 - var/range = 7 - var/falloff = 1 - var/template - var/ui_title - var/ui_width - var/ui_height - var/playing - - -/jukebox/New(atom/_owner, _template, _ui_title, _ui_width, _ui_height) - . = ..() - if (QDELETED(_owner) || !isatom(_owner)) - qdel(src) - return - owner = _owner - tracks = list() - for (var/path in GLOB.jukebox_tracks) - var/decl/audio/track/track = decls_repository.get_decl(path) - AddTrack(track.display || track.title, track.source) - sound_id = "[/jukebox]_[sequential_id(/jukebox)]" - template = _template - ui_title = _ui_title - ui_width = _ui_width - ui_height = _ui_height - - -/jukebox/Destroy() - QDEL_NULL_LIST(tracks) - QDEL_NULL(token) - owner = null - . = ..() - - -/jukebox/proc/AddTrack(title = "Track [length(tracks) + 1]", source) - tracks += new /jukebox_track (title, source) - - -/jukebox/proc/Next() - if (++index > length(tracks)) - index = 1 - if (playing) - Stop() - Play() - - -/jukebox/proc/Last() - if (--index < 1) - index = length(tracks) - if (playing) - Stop() - Play() - - -/jukebox/proc/Track(_index) - _index = text2num(_index) - if (!IsInteger(_index)) - return - index = clamp(_index, 1, length(tracks)) - if (playing) - Stop() - Play() - - -/jukebox/proc/Stop() - playing = FALSE - QDEL_NULL(token) - owner.queue_icon_update() - - -/jukebox/proc/Play() - if (playing) - return - var/jukebox_track/track = tracks[index] - if (!track.source) - return - playing = TRUE - token = GLOB.sound_player.PlayLoopingSound(owner, sound_id, track.source, - volume, range, falloff, frequency = frequency, preference = /datum/client_preference/play_jukeboxes, prefer_mute = TRUE) - owner.queue_icon_update() - - -/jukebox/proc/Volume(_volume) - _volume = text2num(_volume) - if (!isfinite(_volume)) - return - if (_volume >= 0) - volume = min(_volume, volume_max) - else if (_volume == -1) - volume = max(volume - volume_step, 0) - else if (_volume == -2) - volume = min(volume + volume_step, volume_max) - if (token) - token.SetVolume(volume) - - -/jukebox/nano_host() - return owner - - -/jukebox/ui_interact(mob/user, ui_key = "main", datum/nanoui/ui, force_open = TRUE, datum/topic_state/state = GLOB.default_state)//, datum/topic_state/state = GLOB.jukebox_state) - var/list/data_tracks = list() - for (var/i = 1 to length(tracks)) - var/jukebox_track/track = tracks[i] - data_tracks += list(list("track" = track.title, "index" = i)) - var/jukebox_track/track = tracks[index] - var/list/data = list( - "track" = track.title, - "playing" = playing, - "volume" = volume, - "tracks" = data_tracks - ) - ui = SSnano.try_update_ui(user, src, ui_key, ui, data, force_open) - if (!ui) - ui = new (user, src, ui_key, template, ui_title, ui_width, ui_height, state = state) - ui.set_initial_data(data) - ui.open() - - -/jukebox/Topic(href, href_list) - switch ("[href_list["act"]]") - if ("next") Next() - if ("last") Last() - if ("stop") Stop() - if ("play") Play() - if ("volume") Volume("[href_list["dat"]]") - if ("track") Track("[href_list["dat"]]") - return TOPIC_REFRESH - - - -/jukebox_track - var/title - var/source - - -/jukebox_track/New(_title, _source, _volume) - title = _title - source = _source - - - -GLOBAL_LIST_INIT(jukebox_tracks, list( - /decl/audio/track/absconditus, - /decl/audio/track/ambispace, - /decl/audio/track/as_far_as_it_gets, - /decl/audio/track/clouds_of_fire, - /decl/audio/track/comet_haley, - /decl/audio/track/df_theme, - /decl/audio/track/digit_one, - /decl/audio/track/dilbert, - /decl/audio/track/eighties, - /decl/audio/track/elevator, - /decl/audio/track/elibao, - /decl/audio/track/endless_space, - /decl/audio/track/floating, - /decl/audio/track/hull_rupture, - /decl/audio/track/human, - /decl/audio/track/inorbit, - /decl/audio/track/lasers, - /decl/audio/track/level3_mod, - /decl/audio/track/lysendraa, - /decl/audio/track/marhaba, - /decl/audio/track/martian_cowboy, - /decl/audio/track/misanthropic_corridors, - /decl/audio/track/monument, - /decl/audio/track/nebula, - /decl/audio/track/on_the_rocks, - /decl/audio/track/one_loop, - /decl/audio/track/pwmur, - /decl/audio/track/rimward_cruise, - /decl/audio/track/space_oddity, - /decl/audio/track/thunderdome, - /decl/audio/track/torch, - /decl/audio/track/torn, - /decl/audio/track/treacherous_voyage, - /decl/audio/track/voidsent, - /decl/audio/track/wake, - /decl/audio/track/wild_encounters, - /decl/audio/track/your_love_is_a_drug -)) diff --git a/code/datums/beam.dm b/code/datums/beam.dm deleted file mode 100644 index e8fb9a69bf6ce..0000000000000 --- a/code/datums/beam.dm +++ /dev/null @@ -1,167 +0,0 @@ -/** # Beam Datum and Effect - * **IF YOU ARE LAZY AND DO NOT WANT TO READ, GO TO THE BOTTOM OF THE FILE AND USE THAT PROC!** - * - * This is the beam datum! It's a really neat effect for the game in drawing a line from one atom to another. - * It has two parts: - * The datum itself which manages redrawing the beam to constantly keep it pointing from the origin to the target. - * The effect which is what the beams are made out of. They're placed in a line from the origin to target, rotated towards the target and snipped off at the end. - * These effects are kept in a list and constantly created and destroyed (hence the proc names draw and reset, reset destroying all effects and draw creating more.) - * - * You can add more special effects to the beam itself by changing what the drawn beam effects do. For example you can make a vine that pricks people by making the beam_type - * include a crossed proc that damages the crosser. Examples check tg's venus_human_trap.dm -*/ -/datum/beam - ///where the beam goes from - var/atom/origin = null - ///where the beam goes to - var/atom/target = null - ///list of beam objects. These have their visuals set by the visuals var which is created on starting - var/list/elements = list() - ///icon used by the beam. - var/icon - ///icon state of the main segments of the beam - var/icon_state = "" - ///The beam will qdel if it's longer than this many tiles. - var/max_distance = 0 - ///the objects placed in the elements list - var/beam_type = /obj/effect/ebeam - ///This is used as the visual_contents of beams, so you can apply one effect to this and the whole beam will look like that. never gets deleted on redrawing. - var/obj/effect/ebeam/visuals - -/datum/beam/New(beam_origin,beam_target,beam_icon='icons/effects/beam.dmi',beam_icon_state="b_beam",time=INFINITY,maxdistance=INFINITY,btype = /obj/effect/ebeam) - origin = beam_origin - target = beam_target - max_distance = maxdistance - icon = beam_icon - icon_state = beam_icon_state - beam_type = btype - if(time < INFINITY) - QDEL_IN(src, time) - -/** - * Proc called by the atom Beam() proc. Sets up signals, and draws the beam for the first time. - */ -/datum/beam/proc/Start() - visuals = new beam_type() - visuals.icon = icon - visuals.icon_state = icon_state - Draw() - //Register for movement events - GLOB.moved_event.register(origin, src, .proc/redrawing) - GLOB.moved_event.register(target, src, .proc/redrawing) - GLOB.destroyed_event.register(origin, src, .proc/redrawing) - GLOB.destroyed_event.register(target, src, .proc/redrawing) - -/** - * Triggered by events set up when the beam is set up. If it's still sane to create a beam, it removes the old beam, creates a new one. Otherwise it kills the beam. - * - * Arguments: - * - mover: either the origin of the beam or the target of the beam that moved. - * - oldloc: from where mover moved. - * - direction: in what direction mover moved from. - */ -/datum/beam/proc/redrawing(atom/movable/mover, atom/oldloc, new_loc) - if(!QDELETED(origin) && !QDELETED(target) && get_dist(origin,target)length) //went past the target, we draw a box of space to cut away from the beam sprite so the icon actually ends at the center of the target sprite - var/icon/II = new(icon, icon_state)//this means we exclude the overshooting object from the visual contents which does mean those visuals don't show up for the final bit of the beam... - II.DrawBox(null,1,(length-N),32,32)//in the future if you want to improve this, remove the drawbox and instead use a 513 filter to cut away at the final object's icon - X.icon = II - else - X.vis_contents += visuals - X.SetTransform(rotation = Angle) - - //Calculate pixel offsets (If necessary) - var/Pixel_x - var/Pixel_y - if(DX == 0) - Pixel_x = 0 - else - Pixel_x = round(sin(Angle)+32*sin(Angle)*(N+16)/32) - if(DY == 0) - Pixel_y = 0 - else - Pixel_y = round(cos(Angle)+32*cos(Angle)*(N+16)/32) - - //Position the effect so the beam is one continous line - var/a - if(abs(Pixel_x)>32) - a = Pixel_x > 0 ? round(Pixel_x/32) : Ceilm(Pixel_x/32, 1) - X.x += a - Pixel_x %= 32 - if(abs(Pixel_y)>32) - a = Pixel_y > 0 ? round(Pixel_y/32) : Ceilm(Pixel_y/32, 1) - X.y += a - Pixel_y %= 32 - - X.pixel_x = Pixel_x - X.pixel_y = Pixel_y - CHECK_TICK - -/obj/effect/ebeam - mouse_opacity = MOUSE_OPACITY_UNCLICKABLE - anchored = TRUE - var/datum/beam/owner - -/obj/effect/ebeam/Destroy() - owner = null - return ..() - -/obj/effect/ebeam/singularity_pull() - return -/obj/effect/ebeam/singularity_act() - return - -/** - * This is what you use to start a beam. Example: origin.Beam(target, args). **Store the return of this proc if you don't set maxdist or time, you need it to delete the beam.** - * - * Unless you're making a custom beam effect (see the beam_type argument), you won't actually have to mess with any other procs. Make sure you store the return of this Proc, you'll need it - * to kill the beam. - * **Arguments:** - * - BeamTarget: Where you're beaming from. Where do you get origin? You didn't read the docs, fuck you. - * - icon_state: What the beam's icon_state is. The datum effect isn't the ebeam object, it doesn't hold any icon and isn't type dependent. - * - icon: What the beam's icon file is. Don't change this, man. All beam icons should be in beam.dmi anyways. - * - maxdistance: how far the beam will go before stopping itself. Used mainly for two things: preventing lag if the beam may go in that direction and setting a range to abilities that use beams. - * - beam_type: The type of your custom beam. This is for adding other wacky stuff for your beam only. Most likely, you won't (and shouldn't) change it. - */ -/atom/proc/Beam(atom/BeamTarget,icon_state="b_beam",icon='icons/effects/beam.dmi',time=INFINITY,maxdistance=INFINITY,beam_type=/obj/effect/ebeam) - var/datum/beam/newbeam = new(src,BeamTarget,icon,icon_state,time,maxdistance,beam_type) - INVOKE_ASYNC(newbeam, /datum/beam/.proc/Start) - return newbeam diff --git a/code/datums/browser.dm b/code/datums/browser.dm deleted file mode 100644 index 5b63265cc2ae2..0000000000000 --- a/code/datums/browser.dm +++ /dev/null @@ -1,196 +0,0 @@ -/datum/browser - var/mob/user - var/title - var/window_id // window_id is used as the window name for browse and onclose - var/width = 0 - var/height = 0 - var/atom/ref = null - var/window_options = "focus=0;can_close=1;can_minimize=1;can_maximize=0;can_resize=1;titlebar=1;" // window option is set using window_id - var/stylesheets[0] - var/scripts[0] - var/title_image - var/head_elements - var/body_elements - var/head_content = "" - var/content = "" - var/title_buttons = "" - - -/datum/browser/New(nuser, nwindow_id, ntitle = 0, nwidth = 0, nheight = 0, var/atom/nref = null) - - user = nuser - window_id = nwindow_id - if (ntitle) - title = format_text(ntitle) - if (nwidth) - width = nwidth - if (nheight) - height = nheight - if (nref) - ref = nref - // If a client exists, but they have disabled fancy windowing, disable it! - if(user && user.client && user.client.get_preference_value(/datum/client_preference/browser_style) == GLOB.PREF_PLAIN) - return - add_stylesheet("common", 'html/browser/common.css') // this CSS sheet is common to all UIs - -/datum/browser/proc/set_title(ntitle) - title = format_text(ntitle) - -/datum/browser/proc/add_head_content(nhead_content) - head_content = nhead_content - -/datum/browser/proc/set_title_buttons(ntitle_buttons) - title_buttons = ntitle_buttons - -/datum/browser/proc/set_window_options(nwindow_options) - window_options = nwindow_options - -/datum/browser/proc/set_title_image(ntitle_image) - //title_image = ntitle_image - -/datum/browser/proc/add_stylesheet(name, file) - stylesheets[name] = file - -/datum/browser/proc/add_script(name, file) - scripts[name] = file - -/datum/browser/proc/set_content(ncontent) - content = ncontent - -/datum/browser/proc/add_content(ncontent) - content += ncontent - -/datum/browser/proc/get_header() - var/key - var/filename - for (key in stylesheets) - filename = "[ckey(key)].css" - send_rsc(user, stylesheets[key], filename) - head_content += "" - - for (key in scripts) - filename = "[ckey(key)].js" - send_rsc(user, scripts[key], filename) - head_content += "" - - var/title_attributes = "class='uiTitle'" - if (title_image) - title_attributes = "class='uiTitle icon' style='background-image: url([title_image]);'" - - return {" - - - - - [head_content] - - -
      - [title ? "
      [title]
      [title_buttons]
      " : ""] -
      - "} - -/datum/browser/proc/get_footer() - return {" -
      -
      - -"} - -/datum/browser/proc/get_content() - return {" - [get_header()] - [content] - [get_footer()] - "} - -/datum/browser/proc/open(var/use_onclose = 1) - var/window_size = "" - if (width && height) - window_size = "size=[width]x[height];" - show_browser(user, get_content(), "window=[window_id];[window_size][window_options]") - if (use_onclose) - onclose(user, window_id, ref) - -/datum/browser/proc/update(var/force_open = 0, var/use_onclose = 1) - if(force_open) - open(use_onclose) - else - send_output(user, get_content(), "[window_id].browser") - -/datum/browser/proc/close() - close_browser(user, "window=[window_id]") - -// This will allow you to show an icon in the browse window -// This is added to mob so that it can be used without a reference to the browser object -// There is probably a better place for this... -/mob/proc/browse_rsc_icon(icon, icon_state, dir = -1) - /* - var/icon/I - if (dir >= 0) - I = new /icon(icon, icon_state, dir) - else - I = new /icon(icon, icon_state) - dir = "default" - - var/filename = "[ckey("[icon]_[icon_state]_[dir]")].png" - send_rsc(src, I, filename) - return filename - */ - - -// Registers the on-close verb for a browse window (client/verb/.windowclose) -// this will be called when the close-button of a window is pressed. -// -// This is usually only needed for devices that regularly update the browse window, -// e.g. canisters, timers, etc. -// -// windowid should be the specified window name -// e.g. code is : show_browser(user, text, "window=fred") -// then use : onclose(user, "fred") -// -// Optionally, specify the "ref" parameter as the controlled atom (usually src) -// to pass a "close=1" parameter to the atom's Topic() proc for special handling. -// Otherwise, the user mob's machine var will be reset directly. -// -/proc/onclose(mob/user, windowid, var/atom/ref=null) - if(!user || !user.client) return - var/param = "null" - if(ref) - param = "\ref[ref]" - - spawn(2) - if(!user.client) return - winset(user, windowid, "on-close=\".windowclose [param]\"") - -// log_debug("OnClose [user]: [windowid] : ["on-close=\".windowclose [param]\""]") - - - -// the on-close client verb -// called when a browser popup window is closed after registering with proc/onclose() -// if a valid atom reference is supplied, call the atom's Topic() with "close=1" -// otherwise, just reset the client mob's machine var. -// -/client/verb/windowclose(var/atomref as text) - set hidden = 1 // hide this verb from the user's panel - set name = ".windowclose" // no autocomplete on cmd line - -// log_debug("windowclose: [atomref]") - - if(atomref!="null") // if passed a real atomref - var/hsrc = locate(atomref) // find the reffed atom - if(hsrc) -// log_debug("[src] Topic [href] [hsrc]") - - usr = src.mob - src.Topic("close=1", list("close"="1"), hsrc) // this will direct to the atom's - return // Topic() proc via client.Topic() - - // no atomref specified (or not found) - // so just reset the user mob's machine var - if(src && src.mob) -// log_debug("[src] was [src.mob.machine], setting to null") - - src.mob.unset_machine() - return diff --git a/code/datums/callbacks.dm b/code/datums/callbacks.dm deleted file mode 100644 index 575a3f139594d..0000000000000 --- a/code/datums/callbacks.dm +++ /dev/null @@ -1,95 +0,0 @@ -// USAGE: -// -// var/datum/callback/C = new(object|null, /proc/type/path|"procstring", arg1, arg2, ... argn) -// var/timerid = addtimer(C, time, timertype) -// OR -// var/timerid = addtimer(CALLBACK(object|null, /proc/type/path|procstring, arg1, arg2, ... argn), time, timertype) -// -// Note: proc strings can only be given for datum proc calls, global procs must be proc paths -// Also proc strings are strongly advised against because they don't compile error if the proc stops existing -// See the note on proc typepath shortcuts -// -// INVOKING THE CALLBACK: -// var/result = C.Invoke(args, to, add) //additional args are added after the ones given when the callback was created -// OR -// var/result = C.InvokeAsync(args, to, add) //Sleeps will not block, returns . on the first sleep (then continues on in the "background" after the sleep/block ends), otherwise operates normally. -// OR -// INVOKE_ASYNC() to immediately create and call InvokeAsync -// -// PROC TYPEPATH SHORTCUTS (these operate on paths, not types, so to these shortcuts, datum is NOT a parent of atom, etc...) -// -// global proc while in another global proc: -// .procname -// Example: -// CALLBACK(GLOBAL_PROC, .some_proc_here) -// -// proc defined on current(src) object (when in a /proc/ and not an override) OR overridden at src or any of it's parents: -// .procname -// Example: -// CALLBACK(src, .some_proc_here) -// -// -// when the above doesn't apply: -// .proc/procname -// Example: -// CALLBACK(src, .proc/some_proc_here) -// -// proc defined on a parent of a some type: -// /some/type/.proc/some_proc_here -// -// -// -// Other wise you will have to do the full typepath of the proc (/type/of/thing/proc/procname) - -/datum/callback - var/datum/object = GLOBAL_PROC - var/delegate - var/list/arguments - -/datum/callback/New(thingtocall, proctocall, ...) - if (thingtocall) - object = thingtocall - delegate = proctocall - if (length(args) > 2) - arguments = args.Copy(3) - -/proc/ImmediateInvokeAsync(thingtocall, proctocall, ...) - set waitfor = FALSE - - if (!thingtocall) - return - - var/list/calling_arguments = length(args) > 2 ? args.Copy(3) : null - - if (thingtocall == GLOBAL_PROC) - call(proctocall)(arglist(calling_arguments)) - else - call(thingtocall, proctocall)(arglist(calling_arguments)) - -/datum/callback/proc/Invoke(...) - if (!object) - return - var/list/calling_arguments = arguments - if (length(args)) - if (length(arguments)) - calling_arguments = calling_arguments + args //not += so that it creates a new list so the arguments list stays clean - else - calling_arguments = args - if (object == GLOBAL_PROC) - return call(delegate)(arglist(calling_arguments)) - return call(object, delegate)(arglist(calling_arguments)) - -//copy and pasted because fuck proc overhead -/datum/callback/proc/InvokeAsync(...) - set waitfor = FALSE - if (!object) - return - var/list/calling_arguments = arguments - if (length(args)) - if (length(arguments)) - calling_arguments = calling_arguments + args //not += so that it creates a new list so the arguments list stays clean - else - calling_arguments = args - if (object == GLOBAL_PROC) - return call(delegate)(arglist(calling_arguments)) - return call(object, delegate)(arglist(calling_arguments)) \ No newline at end of file diff --git a/code/datums/category.dm b/code/datums/category.dm deleted file mode 100644 index 624183fe98eb4..0000000000000 --- a/code/datums/category.dm +++ /dev/null @@ -1,81 +0,0 @@ -/********************** -* Category Collection * -**********************/ -/datum/category_collection - var/category_group_type // Type of categories to initialize - var/list/datum/category_group/categories // List of initialized categories - var/list/datum/category_group/categories_by_name // Associative list of initialized categories, keyed by name - -/datum/category_collection/New() - ..() - categories = new() - categories_by_name = new() - for(var/category_type in typesof(category_group_type)) - var/datum/category_group/category = category_type - if(initial(category.name)) - category = new category(src) - categories += category - categories_by_name[category.name] = category - categories = dd_sortedObjectList(categories) - -/datum/category_collection/Destroy() - for(var/category in categories) - qdel(category) - categories.Cut() - return ..() - -/****************** -* Category Groups * -******************/ -/datum/category_group - var/name = "" - var/category_item_type // Type of items to initialize - var/list/datum/category_item/items // List of initialized items - var/list/datum/category_item/items_by_name // Associative list of initialized items, by name - var/datum/category_collection/collection // The collection this group belongs to - -/datum/category_group/New(var/datum/category_collection/cc) - ..() - collection = cc - items = new() - items_by_name = new() - - for(var/item_type in typesof(category_item_type)) - var/datum/category_item/item = item_type - if(initial(item.name)) - item = new item(src) - items += item - items_by_name[item.name] = item - - // For whatever reason dd_insertObjectList(items, item) doesn't insert in the correct order - // If you change this, confirm that character setup doesn't become completely unordered. - items = dd_sortedObjectList(items) - -/datum/category_group/Destroy() - for(var/item in items) - qdel(item) - items.Cut() - collection = null - return ..() - -/datum/category_group/dd_SortValue() - return name - - -/***************** -* Category Items * -*****************/ -/datum/category_item - var/name = "" - var/datum/category_group/category // The group this item belongs to - -/datum/category_item/New(var/datum/category_group/cg) - ..() - category = cg - -/datum/category_item/Destroy() - category = null - return ..() - -/datum/category_item/dd_SortValue() - return name diff --git a/code/datums/cinematic.dm b/code/datums/cinematic.dm deleted file mode 100644 index 49620940d7faf..0000000000000 --- a/code/datums/cinematic.dm +++ /dev/null @@ -1,49 +0,0 @@ -GLOBAL_DATUM_INIT(cinematic, /datum/cinematic, new) -//Was moved from the gameticker to here. Could use further improvement. - -/datum/cinematic - //station_explosion used to be a variable for every mob's hud. Which was a waste! - //Now we have a general cinematic centrally held within the gameticker....far more efficient! - var/obj/screen/cinematic_screen = null - -//Plus it provides an easy way to make cinematics for other events. Just use this as a template :) -/datum/cinematic/proc/station_explosion_cinematic(var/station_missed=0, var/datum/game_mode/override) - set waitfor = FALSE - - if(cinematic_screen) - return //already a cinematic in progress! - - if(!override) - override = SSticker.mode - if(!override) - override = SSticker.mode_cache["extended"] - if(!override) - return - - //initialise our cinematic screen object - cinematic_screen = new(src) - cinematic_screen.icon = 'icons/effects/station_explosion.dmi' - cinematic_screen.icon_state = "station_intact" - cinematic_screen.plane = HUD_PLANE - cinematic_screen.layer = HUD_ABOVE_ITEM_LAYER - cinematic_screen.mouse_opacity = 0 - cinematic_screen.screen_loc = "1,0" - - //Let's not discuss how this worked previously. - var/list/viewers = list() - for(var/mob/living/M in GLOB.living_mob_list_) - if(M.client) - M.client.screen += cinematic_screen //show every client the cinematic - viewers[M.client] = M.stunned - M.stunned = 8000 - - override.nuke_act(cinematic_screen, station_missed) //cinematic happens here, as does mob death. - //If its actually the end of the round, wait for it to end. - //Otherwise if its a verb it will continue on afterwards. - sleep(30 SECONDS) - - for(var/client/C in viewers) - if(C.mob) - C.mob.stunned = viewers[C] - C.screen -= cinematic_screen - QDEL_NULL(cinematic_screen) \ No newline at end of file diff --git a/code/datums/colors/color_generator.dm b/code/datums/colors/color_generator.dm deleted file mode 100644 index fad14b17126de..0000000000000 --- a/code/datums/colors/color_generator.dm +++ /dev/null @@ -1,61 +0,0 @@ -/decl/color_generator - var/color = COLOR_WHITE - var/min_random_span = -25 - var/max_random_span = 25 - -/decl/color_generator/proc/GenerateHex() - . = GenerateRGB() - . = rgb(.[1], .[2], .[3]) - -/decl/color_generator/proc/GenerateRGB() - . = create_color() - for(var/i in 1 to 3) - .[i] += rand(min_random_span, max_random_span) - .[i] = clamp(.[i], 0, 255) - -/decl/color_generator/proc/create_color() - return GetHexColors(color) - -/decl/color_generator/albino_eye/create_color() - return list(rand(200, 255), rand(0, 150), rand(0, 150)) - -/decl/color_generator/black - color = COLOR_BLACK - -/decl/color_generator/blue - color = COLOR_CYAN_BLUE - -/decl/color_generator/blue_light - color = COLOR_LIGHT_CYAN - -/decl/color_generator/blonde - color = COLOR_YELLOW - -/decl/color_generator/brown - color = COLOR_BEASTY_BROWN - -/decl/color_generator/chestnut - color = COLOR_CHESTNUT - -/decl/color_generator/copper - color = COLOR_ORANGE - -/decl/color_generator/green - color = COLOR_PAKISTAN_GREEN - -/decl/color_generator/grey/create_color() - . = rand(100, 200) - return list(., ., .) - -/decl/color_generator/old/create_color() - . = rand(100, 255) - return list(., ., .) - -/decl/color_generator/punk/create_color() - return list(rand(0, 255), rand(0, 255), rand(0, 255)) - -/decl/color_generator/wheat - color = COLOR_WHEAT - -/decl/color_generator/white - color = COLOR_WHITE diff --git a/code/datums/communication/_defines.dm b/code/datums/communication/_defines.dm deleted file mode 100644 index fb1b8bd91d424..0000000000000 --- a/code/datums/communication/_defines.dm +++ /dev/null @@ -1,4 +0,0 @@ -#define COMMUNICATION_NO_GUESTS 1 -#define COMMUNICATION_LOG_CHANNEL_NAME 2 -#define COMMUNICATION_GHOST_FOLLOW 4 -#define COMMUNICATION_ADMIN_FOLLOW 8 diff --git a/code/datums/communication/aooc.dm b/code/datums/communication/aooc.dm deleted file mode 100644 index fe55bcba93e2f..0000000000000 --- a/code/datums/communication/aooc.dm +++ /dev/null @@ -1,45 +0,0 @@ -#define SPAN_AOOC(X) "[create_text_tag("aooc", "Antag-OOC:", target)] [X]" - - -/decl/communication_channel/aooc - name = "AOOC" - config_setting = "aooc_allowed" - expected_communicator_type = /client - flags = COMMUNICATION_LOG_CHANNEL_NAME|COMMUNICATION_ADMIN_FOLLOW - log_proc = /proc/log_ooc - mute_setting = MUTE_AOOC - show_preference_setting = /datum/client_preference/show_aooc - - -/decl/communication_channel/aooc/can_communicate(client/C, message) - . = ..() - if(!.) - return - - if(!C.holder) - if(isghost(C.mob)) - to_chat(src, SPAN_WARNING("You cannot use [name] while ghosting/observing!")) - return FALSE - if(!(C.mob?.mind?.special_role)) - to_chat(C, SPAN_DANGER("You must be an antag to use [name].")) - return FALSE - - -/decl/communication_channel/aooc/do_communicate(client/C, message) - message = emoji_parse(message, C) - - var/datum/admins/holder = C.holder - - for(var/client/target in GLOB.clients) - if(check_rights(R_INVESTIGATE, FALSE, target)) - receive_communication(C, target, SPAN_AOOC("[get_options_bar(C, 0, 1, 1)]: [message]")) - else if(target.mob?.mind?.special_role) - var/display_name = C.key - var/player_display = holder ? "[display_name]([usr.client.holder.rank])" : display_name - receive_communication(C, target, SPAN_AOOC("[player_display]: [message]")) - - -/decl/communication_channel/aooc/do_broadcast(message) - for (var/client/target in GLOB.clients) - if (check_rights(R_INVESTIGATE, FALSE, target) || target.mob?.mind?.special_role) - receive_broadcast(target, SPAN_AOOC("SYSTEM BROADCAST: [message]")) diff --git a/code/datums/communication/channel.dm b/code/datums/communication/channel.dm deleted file mode 100644 index 8a043e149c470..0000000000000 --- a/code/datums/communication/channel.dm +++ /dev/null @@ -1,168 +0,0 @@ -#define plain_key_name(A) key_name(A, highlight_special_characters = 0) - -/decl/communication_channel - var/name - var/config_setting - var/expected_communicator_type = /datum - var/flags - var/log_proc - var/mute_setting - var/show_preference_setting - - -/decl/communication_channel/proc/can_ignore(client/C) - if (!C) - return TRUE - // Channels that cannot be toggled can never be ignored - if (!show_preference_setting) - return FALSE - // If you're trying to see the channel, you can't ignore it - return C.get_preference_value(show_preference_setting) != GLOB.PREF_SHOW - - -/* -* Procs for handling sending communication messages -*/ -/decl/communication_channel/proc/communicate(var/datum/communicator, var/message) - if(can_communicate(arglist(args))) - call(log_proc)("[(flags&COMMUNICATION_LOG_CHANNEL_NAME) ? "([name]) " : ""][communicator.communication_identifier()] : [message]") - return do_communicate(arglist(args)) - return FALSE - -/decl/communication_channel/proc/can_communicate(var/datum/communicator, var/message) - - if(!message) - return FALSE - - if(!istype(communicator, expected_communicator_type)) - log_debug("[log_info_line(communicator)] attempted to communicate over the channel [src] but was of an unexpected type.") - return FALSE - - if(config_setting && !config.vars[config_setting] && !check_rights(R_INVESTIGATE,0,communicator)) - to_chat(communicator, "[name] is globally muted.") - return FALSE - - var/client/C = communicator.get_client() - - if(jobban_isbanned(C.mob, name)) - to_chat(communicator, "You cannot use [name] (banned).") - return FALSE - - if(can_ignore(C)) - to_chat(communicator, "Couldn't send message - you have [name] muted.") - return FALSE - - if(C && mute_setting && (C.prefs.muted & mute_setting)) - to_chat(communicator, "You cannot use [name] (muted).") - return FALSE - - if(C && (flags & COMMUNICATION_NO_GUESTS) && IsGuestKey(C.key)) - to_chat(communicator, "Guests may not use the [name] channel.") - return FALSE - - if (config.forbidden_message_regex && !check_rights(R_INVESTIGATE, 0, communicator) && findtext(message, config.forbidden_message_regex)) - if (!config.forbidden_message_no_notifications) - if (!config.forbidden_message_hide_details) - log_and_message_admins("attempted to send a forbidden message in [name]: [message]", user = C) - else - log_and_message_admins("attempted to send a forbidden message in [name]", user = C) - if (C && config.forbidden_message_warning) - to_chat(C, config.forbidden_message_warning) - return FALSE - - return TRUE - -/decl/communication_channel/proc/do_communicate(var/communicator, var/message) - return - -/* -* Procs for handling the reception of communication messages -*/ -/decl/communication_channel/proc/receive_communication(var/datum/communicator, var/datum/receiver, var/message) - if(can_receive_communication(receiver)) - var/has_follow_links = FALSE - if((flags & COMMUNICATION_ADMIN_FOLLOW)) - var/extra_links = receiver.get_admin_jump_link(communicator,"","\[","\]") - if(extra_links) - has_follow_links = TRUE - message = "[extra_links] [message]" - if(flags & COMMUNICATION_GHOST_FOLLOW && !has_follow_links) - var/extra_links = receiver.get_ghost_follow_link(communicator,"","\[","\]") - if(extra_links) - message = "[extra_links] [message]" - do_receive_communication(arglist(args)) - -/decl/communication_channel/proc/can_receive_communication(var/datum/receiver) - if(show_preference_setting) - var/client/C = receiver.get_client() - if(can_ignore(C)) - return FALSE - return TRUE - -/decl/communication_channel/proc/do_receive_communication(var/datum/communicator, var/datum/receiver, var/message) - to_chat(receiver, message) - - -/* - * Procs for the handling of system broadcasts - */ -/decl/communication_channel/proc/broadcast(message, force = FALSE) - if (!can_broadcast(message, force)) - return FALSE - call(log_proc)("[(flags & COMMUNICATION_LOG_CHANNEL_NAME) ? "([name]) " : ""]SYSTEM BROADCAST : [message]") - return do_broadcast(message, force) - - -/decl/communication_channel/proc/can_broadcast(message, override_config = FALSE) - if (!message) - return FALSE - - if (!override_config && config_setting && !config.vars[config_setting]) - return FALSE - - return TRUE - - -/decl/communication_channel/proc/do_broadcast(message) - return - - -/decl/communication_channel/proc/receive_broadcast(datum/receiver, message) - if (!can_receive_communication(receiver)) - return - do_receive_broadcast(receiver, message) - - -/decl/communication_channel/proc/do_receive_broadcast(datum/receiver, message) - to_chat(receiver, message) - - -// Misc. helpers -/datum/proc/communication_identifier() - return usr ? "[src] - usr: [plain_key_name(usr)]" : "[src]" - -/mob/communication_identifier() - var/key_name = plain_key_name(src) - return usr != src ? "[key_name] - usr: [plain_key_name(usr)]" : key_name - -/proc/sanitize_and_communicate(channel_type, communicator, message) - message = sanitize(message) - return communicate(arglist(args)) - -/proc/communicate(var/channel_type, var/communicator, var/message) - var/list/channels = decls_repository.get_decls_of_subtype(/decl/communication_channel) - var/decl/communication_channel/channel = channels[channel_type] - - message = process_chat_markup(message) - var/list/new_args = list(communicator, message) - new_args += args.Copy(4) - - return channel.communicate(arglist(new_args)) - -/proc/communicate_broadcast(channel_type, message, forced = FALSE) - var/list/channels = decls_repository.get_decls_of_subtype(/decl/communication_channel) - var/decl/communication_channel/channel = channels[channel_type] - - return channel.broadcast(message, forced) - -#undef plain_key_name diff --git a/code/datums/communication/dsay.dm b/code/datums/communication/dsay.dm deleted file mode 100644 index 3489af9745d82..0000000000000 --- a/code/datums/communication/dsay.dm +++ /dev/null @@ -1,141 +0,0 @@ -#define DSAY_CAN_COMMUNICATE 1 -#define DSAY_ASK_BASE 2 - -/decl/communication_channel/dsay - name = "DSAY" - config_setting = "dsay_allowed" - expected_communicator_type = /client - flags = COMMUNICATION_LOG_CHANNEL_NAME - log_proc = /proc/log_say - mute_setting = MUTE_DEADCHAT - show_preference_setting = /datum/client_preference/show_dsay - -/decl/communication_channel/dsay/communicate(communicator, message, speech_method = /decl/dsay_communication/say) - ..() - -/decl/communication_channel/dsay/can_communicate(var/client/communicator, var/message, var/speech_method_type) - var/decl/dsay_communication/speech_method = decls_repository.get_decl(speech_method_type) - switch(speech_method.can_communicate(communicator, message)) - if(DSAY_CAN_COMMUNICATE) - return TRUE - if(DSAY_ASK_BASE) - return ..() - -/decl/communication_channel/dsay/do_communicate(var/client/communicator, var/message, var/speech_method_type) - var/decl/dsay_communication/speech_method = decls_repository.get_decl(speech_method_type) - - speech_method.adjust_channel(src) - - for(var/mob/M in GLOB.player_list) - if(!speech_method.can_receive(communicator, M)) - continue - var/sent_message = speech_method.get_message(communicator, M, message) - if(M.client) - sent_message = emoji_parse(sent_message, M.client) - - receive_communication(communicator, M, "" + create_text_tag("dead", "DEAD:", M.client) + " [sent_message]") - -/decl/dsay_communication/proc/can_communicate(var/client/communicator, var/message) - if(!istype(communicator)) - return FALSE - if(communicator.mob.stat != DEAD) - to_chat(communicator, "You're not sufficiently dead to use DSAY!") - return FALSE - return DSAY_ASK_BASE - -/decl/dsay_communication/proc/can_receive(var/client/C, var/mob/M) - if(istype(C) && C.mob == M) - return TRUE - if(M.get_preference_value(/datum/client_preference/show_dsay) == GLOB.PREF_HIDE) - return FALSE - if(istype(C) && M.is_key_ignored(C.key)) - return FALSE - if (M.client.holder) - return TRUE - if(M.stat != DEAD) - return FALSE - if(isnewplayer(M)) - return FALSE - return TRUE - -/decl/dsay_communication/proc/get_name(var/client/C, var/mob/M) - var/name - var/keyname - - keyname = C.key - if(C.mob) //Most of the time this is the dead/observer mob; we can totally use him if there is no better name - var/mindname - var/realname = C.mob.real_name - if(C.mob.mind) - mindname = C.mob.mind.name - if(C.mob.mind.original && C.mob.mind.original.real_name) - realname = C.mob.mind.original.real_name - if(mindname && mindname != realname) - name = "[realname] died as [mindname]" - else - name = realname - - var/lname - var/mob/observer/ghost/DM - var/hide_deadchat_ckey = C.get_preference_value(/datum/client_preference/show_ckey_deadchat) == GLOB.PREF_HIDE - - if(isghost(C.mob)) - DM = C.mob - if(M.client.holder) // What admins see - lname = "[keyname][(DM && hide_deadchat_ckey) ? "*" : (DM ? "" : "^")] ([name])" - else - if(DM && hide_deadchat_ckey) // If the person is actually observer they have the option to be anonymous - lname = "Ghost of [name]" - else if(DM) // Non-anons - lname = "[keyname] ([name])" - else // Everyone else (dead people who didn't ghost yet, etc.) - lname = name - return "[lname]" - -/decl/dsay_communication/proc/get_message(var/client/C, var/mob/M, var/message) - var say_verb = pick("complains","moans","whines","laments","blubbers") - return "[get_name(C, M)] [say_verb], \"[message]\"" - -/decl/dsay_communication/emote/get_message(var/client/C, var/mob/M, var/message) - return "[get_name(C, M)] [message]" - -/decl/dsay_communication/proc/adjust_channel(var/decl/communication_channel/dsay) - dsay.flags |= COMMUNICATION_ADMIN_FOLLOW|COMMUNICATION_GHOST_FOLLOW // Add admin and ghost follow - -/decl/dsay_communication/say/adjust_channel(var/decl/communication_channel/dsay) - dsay.log_proc = /proc/log_say - ..() - -/decl/dsay_communication/emote/adjust_channel(var/decl/communication_channel/dsay) - dsay.log_proc = /proc/log_emote - ..() - -/decl/dsay_communication/admin/can_communicate(var/client/communicator, var/message, var/decl/communication_channel/dsay) - if(!istype(communicator)) - return FALSE - if(!communicator.holder) - to_chat(communicator, "You do not have sufficent permissions to use DSAY!") - return FALSE - return DSAY_ASK_BASE - -/decl/dsay_communication/admin/get_message(var/client/communicator, var/mob/M, var/message) - var/stafftype = uppertext(communicator.holder.rank) - return "[stafftype]([communicator.key]) says, \"[message]\"" - -/decl/dsay_communication/admin/adjust_channel(var/decl/communication_channel/dsay) - dsay.log_proc = /proc/log_say - dsay.flags |= COMMUNICATION_ADMIN_FOLLOW // Add admin follow - dsay.flags &= ~COMMUNICATION_GHOST_FOLLOW // Remove ghost follow - -/decl/dsay_communication/direct/adjust_channel(var/decl/communication_channel/dsay, var/communicator) - dsay.log_proc = /proc/log_say - dsay.flags &= ~(COMMUNICATION_ADMIN_FOLLOW|COMMUNICATION_GHOST_FOLLOW) // Remove admin and ghost follow - -/decl/dsay_communication/direct/can_communicate() - return DSAY_CAN_COMMUNICATE - -/decl/dsay_communication/direct/get_message(var/client/communicator, var/mob/M, var/message) - return message - -#undef DSAY_CAN_COMMUNICATE -#undef DSAY_ASK_BASE diff --git a/code/datums/communication/looc.dm b/code/datums/communication/looc.dm deleted file mode 100644 index fab534852e51e..0000000000000 --- a/code/datums/communication/looc.dm +++ /dev/null @@ -1,62 +0,0 @@ -/decl/communication_channel/ooc/looc - name = "LOOC" - config_setting = "looc_allowed" - flags = COMMUNICATION_NO_GUESTS|COMMUNICATION_LOG_CHANNEL_NAME|COMMUNICATION_ADMIN_FOLLOW - show_preference_setting = /datum/client_preference/show_looc - -/decl/communication_channel/ooc/looc/can_communicate(var/client/C, var/message) - . = ..() - if(!.) - return - var/mob/M = C.mob ? C.mob.get_looc_mob() : null - if(!M) - to_chat(C, "You cannot use [name] without a mob.") - return FALSE - if(!get_turf(M)) - to_chat(C, "You cannot use [name] while in nullspace.") - return FALSE - -/decl/communication_channel/ooc/looc/do_communicate(var/client/C, var/message) - var/mob/M = C.mob ? C.mob.get_looc_mob() : null - var/list/listening_hosts = hosts_in_view_range(M) - var/list/listening_clients = list() - - var/key = C.key - - for(var/listener in listening_hosts) - var/mob/listening_mob = listener - var/client/t = listening_mob.get_client() - if(!t) - continue - listening_clients |= t - var/received_message = t.receive_looc(C, key, message, listening_mob.looc_prefix()) - received_message = emoji_parse(received_message, t) - receive_communication(C, t, received_message) - - for(var/client/adm as anything in GLOB.admins) //Now send to all admins that weren't in range. - if(!(adm in listening_clients) && adm.get_preference_value(/datum/client_preference/staff/show_rlooc) == GLOB.PREF_SHOW) - var/received_message = adm.receive_looc(C, key, message, "R") - received_message = emoji_parse(received_message, adm) - receive_communication(C, adm, received_message) - -/client/proc/receive_looc(var/client/C, var/commkey, var/message, var/prefix) - var/mob/M = C.mob - var/display_name = isghost(M) ? commkey : M.name - var/admin_stuff = holder ? "/([commkey])" : "" - if(prefix) - prefix = "\[[prefix]\] " - return "" + create_text_tag("looc", "LOOC:", src) + " [prefix][display_name][admin_stuff]: [message]" - -/mob/proc/looc_prefix() - return eyeobj ? "Body" : "" - -/mob/observer/eye/looc_prefix() - return "Eye" - -/mob/proc/get_looc_mob() - return src - -/mob/living/silicon/ai/get_looc_mob() - if(!eyeobj) - return src - return eyeobj diff --git a/code/datums/communication/ooc.dm b/code/datums/communication/ooc.dm deleted file mode 100644 index 069d4546d6f2e..0000000000000 --- a/code/datums/communication/ooc.dm +++ /dev/null @@ -1,49 +0,0 @@ -/decl/communication_channel/ooc - name = "OOC" - config_setting = "ooc_allowed" - expected_communicator_type = /client - flags = COMMUNICATION_NO_GUESTS - log_proc = /proc/log_ooc - mute_setting = MUTE_OOC - show_preference_setting = /datum/client_preference/show_ooc - -/decl/communication_channel/ooc/can_communicate(var/client/C, var/message) - . = ..() - if(!.) - return - - if(!C.holder) - if(!config.dooc_allowed && (C.mob.stat == DEAD)) - to_chat(C, "[name] for dead mobs has been turned off.") - return FALSE - -/decl/communication_channel/ooc/do_communicate(var/client/C, var/message) - var/datum/admins/holder = C.holder - var/is_stealthed = C.is_stealthed() - - var/ooc_style = "everyone" - var/holder_rank = "" - if(holder && !is_stealthed) - ooc_style = "elevated" - holder_rank = "\[[holder.rank]\] " - if(holder.rights & R_MOD) - ooc_style = "moderator" - if(holder.rights & R_DEBUG) - ooc_style = "developer" - if(holder.rights & R_ADMIN) - ooc_style = "admin" - - var/ooc_color = C.prefs.ooccolor - - for(var/client/target in GLOB.clients) - if(target.is_key_ignored(C.key)) // If we're ignored by this person, then do nothing. - continue - var/sent_message = "[create_text_tag("ooc", "OOC:", target)] " + "[holder_rank]" + "[C.key]: [message]" - sent_message = emoji_parse(sent_message, target) - - if(!is_stealthed && C.prefs.ooccolor != initial(C.prefs.ooccolor)) - receive_communication(C, target, "[sent_message]") - else - receive_communication(C, target, "[sent_message]") - // Discord OOC - SSwebhooks.send(WEBHOOK_OOC, list("key" = C.key, "message" = message, type="OOC")) diff --git a/code/datums/communication/pray.dm b/code/datums/communication/pray.dm deleted file mode 100644 index 0dfb890c1fab9..0000000000000 --- a/code/datums/communication/pray.dm +++ /dev/null @@ -1,21 +0,0 @@ -/decl/communication_channel/pray - name = "PRAY" - expected_communicator_type = /mob - log_proc = /proc/log_say - flags = COMMUNICATION_ADMIN_FOLLOW - mute_setting = MUTE_PRAY - -/decl/communication_channel/pray/do_communicate(var/mob/communicator, var/message, var/speech_method_type) - var/image/cross = image('icons/obj/storage.dmi',"bible") - for(var/m in GLOB.player_list) - var/mob/M = m - if(!M.client) - continue - if(M.client.holder && M.client.get_preference_value(/datum/client_preference/staff/show_chat_prayers) == GLOB.PREF_SHOW) - receive_communication(communicator, M, "\[SC\] \[DN\][icon2html(cross, M)] PRAY: [key_name(communicator, 1)]: [message]") - else if(communicator == M) //Give it to ourselves - receive_communication(communicator, M, "[icon2html(cross, M)] You send the prayer, \"[message]\" out into the heavens.") - -/decl/communication_channel/pray/receive_communication(var/mob/communicator, var/mob/receiver, var/message) - ..() - sound_to(receiver, 'sound/effects/ding.ogg') \ No newline at end of file diff --git a/code/datums/communication/~defines.dm b/code/datums/communication/~defines.dm deleted file mode 100644 index 669f56ffc869a..0000000000000 --- a/code/datums/communication/~defines.dm +++ /dev/null @@ -1,4 +0,0 @@ -#undef COMMUNICATION_NO_GUESTS -#undef COMMUNICATION_LOG_CHANNEL_NAME -#undef COMMUNICATION_GHOST_FOLLOW -#undef COMMUNICATION_ADMIN_FOLLOW diff --git a/code/datums/datum.dm b/code/datums/datum.dm deleted file mode 100644 index aa2bdea416aa1..0000000000000 --- a/code/datums/datum.dm +++ /dev/null @@ -1,51 +0,0 @@ -/datum - var/tmp/gc_destroyed //Time when this object was destroyed. - var/tmp/is_processing = FALSE - var/list/active_timers //for SStimer - -#ifdef TESTING - var/tmp/running_find_references - var/tmp/last_find_references = 0 -#endif - -// The following vars cannot be edited by anyone -/datum/VV_static() - return UNLINT(..()) + list("gc_destroyed", "is_processing") - -// Default implementation of clean-up code. -// This should be overridden to remove all references pointing to the object being destroyed. -// Return the appropriate QDEL_HINT; in most cases this is QDEL_HINT_QUEUE. -/datum/proc/Destroy(force=FALSE) - SHOULD_CALL_PARENT(TRUE) - SHOULD_NOT_SLEEP(TRUE) - tag = null - weakref = null // Clear this reference to ensure it's kept for as brief duration as possible. - - SSnano && SSnano.close_uis(src) - - var/list/timers = active_timers - active_timers = null - for(var/datum/timedevent/timer as anything in timers) - if (timer.spent && !(timer.flags & TIMER_DELETE_ME)) - continue - qdel(timer) - - if(extensions) - for(var/expansion_key in extensions) - var/list/extension = extensions[expansion_key] - if(islist(extension)) - extension.Cut() - else - qdel(extension) - extensions = null - - GLOB.destroyed_event && GLOB.destroyed_event.raise_event(src) - - if (!isturf(src)) // Not great, but the 'correct' way to do it would add overhead for little benefit. - cleanup_events(src) - - return QDEL_HINT_QUEUE - -/datum/proc/Process() - set waitfor = 0 - return PROCESS_KILL diff --git a/code/datums/extensions/_defines.dm b/code/datums/extensions/_defines.dm deleted file mode 100644 index 1f8457bb36721..0000000000000 --- a/code/datums/extensions/_defines.dm +++ /dev/null @@ -1,3 +0,0 @@ -#define EXTENSION_FLAG_NONE 0 -#define EXTENSION_FLAG_IMMEDIATE 1 // Instantly instantiates, instead of doing it lazily. -//#define EXTENSION_FLAG_MULTIPLE_INSTANCES 2 // Allows multiple instances per base type. To be implemented diff --git a/code/datums/extensions/appearance/appearance.dm b/code/datums/extensions/appearance/appearance.dm deleted file mode 100644 index 56c4c378b0b03..0000000000000 --- a/code/datums/extensions/appearance/appearance.dm +++ /dev/null @@ -1,22 +0,0 @@ -/datum/extension/appearance - base_type = /datum/extension/appearance - expected_type = /atom - flags = EXTENSION_FLAG_IMMEDIATE // | EXTENSION_FLAG_MULTIPLE_INSTANCES - var/appearance_handler_type - var/item_equipment_proc - var/item_removal_proc - -/datum/extension/appearance/New(var/holder) - var/appearance_handler = appearance_manager.get_appearance_handler(appearance_handler_type) - if(!appearance_handler) - CRASH("Unable to acquire the [appearance_handler_type] appearance handler.") - - GLOB.item_equipped_event.register(holder, appearance_handler, item_equipment_proc) - GLOB.item_unequipped_event.register(holder, appearance_handler, item_removal_proc) - ..() - -/datum/extension/appearance/Destroy() - var/appearance_handler = appearance_manager.get_appearance_handler(appearance_handler_type) - GLOB.item_equipped_event.unregister(holder, appearance_handler, item_equipment_proc) - GLOB.item_unequipped_event.unregister(holder, appearance_handler, item_removal_proc) - . = ..() \ No newline at end of file diff --git a/code/datums/extensions/appearance/base_icon_state.dm b/code/datums/extensions/appearance/base_icon_state.dm deleted file mode 100644 index b43c9ed1ab5fd..0000000000000 --- a/code/datums/extensions/appearance/base_icon_state.dm +++ /dev/null @@ -1,8 +0,0 @@ -/datum/extension/base_icon_state - base_type = /datum/extension/base_icon_state - expected_type = /atom - var/base_icon_state - -/datum/extension/base_icon_state/New(var/holder, var/base_icon_state) - ..() - src.base_icon_state = base_icon_state \ No newline at end of file diff --git a/code/datums/extensions/appearance/cardborg.dm b/code/datums/extensions/appearance/cardborg.dm deleted file mode 100644 index 3dfef67912b1d..0000000000000 --- a/code/datums/extensions/appearance/cardborg.dm +++ /dev/null @@ -1,5 +0,0 @@ -/datum/extension/appearance/cardborg - expected_type = /obj/item - appearance_handler_type = /decl/appearance_handler/cardborg - item_equipment_proc = /decl/appearance_handler/cardborg/proc/item_equipped - item_removal_proc = /decl/appearance_handler/cardborg/proc/item_removed diff --git a/code/datums/extensions/armor/ablative.dm b/code/datums/extensions/armor/ablative.dm deleted file mode 100644 index c3261cf309ac6..0000000000000 --- a/code/datums/extensions/armor/ablative.dm +++ /dev/null @@ -1,51 +0,0 @@ -//Armor that degrades with taken damage -/datum/extension/armor/ablative - var/list/max_armor_values - var/armor_degradation_coef //How fast armor degrades with blocked damage, with armor value reduced by [coef * damage taken] - var/list/last_reported_damage //for wearer feedback - -/datum/extension/armor/ablative/New(atom/movable/holder, list/armor, _armor_degradation_speed) - ..() - max_armor_values = armor_values.Copy() - if(_armor_degradation_speed) - armor_degradation_coef = _armor_degradation_speed - -/datum/extension/armor/ablative/on_blocking(damage, damage_type, damage_flags, armor_pen, blocked) - if (!(damage_type == DAMAGE_BRUTE || damage_type == DAMAGE_BURN)) - return - if(armor_degradation_coef) - var/key = get_armor_key(damage_type, damage_flags) - var/damage_blocked = round(damage * blocked) - if(damage_blocked) - var/new_armor = max(0, get_value(key) - armor_degradation_coef * damage_blocked) - set_value(key, new_armor) - var/mob/M = get_holder_of_type(holder, /mob) - if(istype(M)) - var/list/visible = get_visible_damage() - for(var/k in visible) - if(LAZYACCESS(last_reported_damage, k) != visible[k]) - LAZYSET(last_reported_damage, k, visible[k]) - to_chat(M, SPAN_WARNING("The [k] armor on your [holder] has [visible[k]] damage now!")) - -/datum/extension/armor/ablative/proc/get_damage() - for(var/key in armor_values) - var/damage = max_armor_values[key] - armor_values[key] - if(damage > 0) - LAZYSET(., key, damage) - -/datum/extension/armor/ablative/proc/get_visible_damage() - var/list/damages = get_damage() - if(!LAZYLEN(damages)) - return - var/result = list() - for(var/key in damages) - switch(round(100 * damages[key]/max_armor_values[key])) - if(5 to 10) - result[key] = "minor" - if(11 to 25) - result[key] = "moderate" - if(26 to 50) - result[key] = "serious" - if(51 to 100) - result[key] = "catastrophic" - return result diff --git a/code/datums/extensions/armor/armor.dm b/code/datums/extensions/armor/armor.dm deleted file mode 100644 index 214dc0e90749b..0000000000000 --- a/code/datums/extensions/armor/armor.dm +++ /dev/null @@ -1,108 +0,0 @@ -/datum/extension/armor - base_type = /datum/extension/armor - expected_type = /atom/movable - var/list/armor_values - var/full_block_message = "Your armor absorbs the blow!" - var/partial_block_message = "Your armor softens the blow!" - - // Armor 'works' for damages in range from 0 to [armor_range_mult * armor]. - // The lower the damage, the harder it gets blocked, tapering to 0 mitigation at [armor_range_mult * armor] - var/armor_range_mult = 2 - // [under_armor_mult] multiplies how strongly damage that is <= armor value is blocked. - // E.g. setting it to 0 will flat out block all damage below armor - var/under_armor_mult = 1 - // [over_armor_mult] multiplies how strongly damage that is > armor value is blocked. - // E.g. setting it to more than 1 will make mitigation drop off faster, effectively reducing the range of damage mitigation - var/over_armor_mult = 1 - -/datum/extension/armor/New(atom/movable/holder, list/armor) - ..() - if(armor) - armor_values = armor.Copy() - -// Takes in incoming damage value -// Applies state changes to self, holder, and whatever else caused by damage mitigation -// Returns modified damage, a list to allow for flag modification or damage conversion, in the same format as the arguments. -/datum/extension/armor/proc/apply_damage_modifications(damage, damage_type, damage_flags, mob/living/victim, armor_pen, silent = FALSE) - if(damage <= 0) - return args.Copy() - - var/blocked = get_blocked(damage_type, damage_flags, armor_pen, damage) - on_blocking(damage, damage_type, damage_flags, armor_pen, blocked) - - // Blocking values that mean the damage was under armor, so all dangerous flags are removed (edge/sharp) - var/armor_border_blocking = 1 - (under_armor_mult * 1/armor_range_mult) - if(blocked >= armor_border_blocking) - if(damage_flags & DAMAGE_FLAG_LASER) - damage *= FLUIDLOSS_CONC_BURN/FLUIDLOSS_WIDE_BURN - damage_flags &= ~(DAMAGE_FLAG_SHARP | DAMAGE_FLAG_EDGE | DAMAGE_FLAG_LASER) - if (damage_type == DAMAGE_RADIATION) - damage = max(0, damage - 100 * blocked) - silent = TRUE - damage *= 1 - blocked - - if(!silent) - if(blocked > 0.7) - to_chat(victim, SPAN_NOTICE(full_block_message)) - else if(blocked > 0.2) - to_chat(victim, SPAN_NOTICE(partial_block_message)) - return args.Copy() - -/datum/extension/armor/proc/on_blocking(damage, damage_type, damage_flags, armor_pen, blocked) - -// A simpler proc used as a helper for above but can also be used externally. Does not modify state. -/datum/extension/armor/proc/get_blocked(damage_type, damage_flags, armor_pen = 0, damage = 5) - var/key = get_armor_key(damage_type, damage_flags) - if(!key) - return 0 - - var/armor = max(0, get_value(key) - armor_pen) - if(!armor) - return 0 - var/efficiency = min(damage / (armor_range_mult * armor), 1) - var/coef = damage <= armor ? under_armor_mult : over_armor_mult - return max(1 - coef * efficiency, 0) - -/datum/extension/armor/proc/get_value(key) - if(isnull(armor_values[key])) - return 0 - return min(armor_values[key], 100) - -/datum/extension/armor/proc/set_value(key, newval) - armor_values[key] = clamp(newval, 0, 100) - -// There is a disconnect between legacy damage and armor code. This here helps bridge the gap. -/proc/get_armor_key(damage_type, damage_flags) - var/key - switch(damage_type) - if (DAMAGE_BRUTE) - if(damage_flags & DAMAGE_FLAG_BULLET) - key = "bullet" - else if(damage_flags & DAMAGE_FLAG_EXPLODE) - key = "bomb" - else - key = "melee" - if (DAMAGE_BURN) - if(damage_flags & DAMAGE_FLAG_LASER) - key = "laser" - else if(damage_flags & DAMAGE_FLAG_EXPLODE) - key = "bomb" - else - key = "energy" - if (DAMAGE_TOXIN) - if(damage_flags & DAMAGE_FLAG_BIO) - key = "bio" // Otherwise just not blocked by default. - if (DAMAGE_RADIATION) - key = "rad" - if (DAMAGE_PSIONIC) - key = DAMAGE_PSIONIC - return key - -/datum/extension/armor/toggle - var/active = TRUE - -/datum/extension/armor/toggle/proc/toggle(new_state) - active = new_state - -/datum/extension/armor/toggle/get_value(key) - return active ? ..() : 0 diff --git a/code/datums/extensions/armor/armor_psionic.dm b/code/datums/extensions/armor/armor_psionic.dm deleted file mode 100644 index 631e34d65ad9c..0000000000000 --- a/code/datums/extensions/armor/armor_psionic.dm +++ /dev/null @@ -1,14 +0,0 @@ -/datum/extension/armor/psionic - expected_type = /datum/psi_complexus - full_block_message = "You block the blow with your mind!" - partial_block_message = "You soften the blow with your mind!" - -/datum/extension/armor/psionic/get_value(key) - var/datum/psi_complexus/psi = holder - return psi.get_armour(key) - -/datum/extension/armor/psionic/on_blocking(damage, damage_type, damage_flags, armor_pen, blocked) - var/datum/psi_complexus/psi = holder - var/blocked_damage = damage * blocked - if(blocked_damage) - psi.spend_power_armor(blocked_damage) diff --git a/code/datums/extensions/armor/armor_rig.dm b/code/datums/extensions/armor/armor_rig.dm deleted file mode 100644 index c0c73082fba38..0000000000000 --- a/code/datums/extensions/armor/armor_rig.dm +++ /dev/null @@ -1,7 +0,0 @@ -/datum/extension/armor/rig - var/sealed = FALSE - -/datum/extension/armor/rig/get_value(key) - if(key == "bio" && sealed) - return 100 - return ..() \ No newline at end of file diff --git a/code/datums/extensions/chameleon.dm b/code/datums/extensions/chameleon.dm deleted file mode 100644 index ae23916f4e44d..0000000000000 --- a/code/datums/extensions/chameleon.dm +++ /dev/null @@ -1,168 +0,0 @@ -/datum/extension/chameleon - base_type = /datum/extension/chameleon - expected_type = /obj/item - flags = EXTENSION_FLAG_IMMEDIATE - var/list/chameleon_choices - var/static/list/chameleon_choices_by_type - var/atom/atom_holder - var/chameleon_verb - -/datum/extension/chameleon/New(datum/holder, base_type) - ..() - - if (!chameleon_choices) - var/chameleon_type = base_type || holder.parent_type - chameleon_choices = LAZYACCESS(chameleon_choices_by_type, chameleon_type) - if(!chameleon_choices) - chameleon_choices = generate_chameleon_choices(chameleon_type) - LAZYSET(chameleon_choices_by_type, chameleon_type, chameleon_choices) - else - var/list/choices = list() - for(var/path in chameleon_choices) - add_chameleon_choice(choices, path) - chameleon_choices = sortAssoc(choices) - - atom_holder = holder - chameleon_verb += new/atom/proc/chameleon_appearance(atom_holder,"Change [atom_holder.name] Appearance") - -/datum/extension/chameleon/Destroy() - . = ..() - atom_holder.verbs -= chameleon_verb - atom_holder = null - -/datum/extension/chameleon/proc/disguise(newtype, mob/user) - var/obj/item/copy = new newtype(null) //initial() does not handle lists well - var/obj/item/C = atom_holder - - C.name = copy.name - C.desc = copy.desc - C.icon = copy.icon - C.color = copy.color - C.icon_state = copy.icon_state - C.flags_inv = copy.flags_inv - C.item_state = copy.item_state - C.body_parts_covered = copy.body_parts_covered - - if (copy.item_icons) - C.item_icons = copy.item_icons.Copy() - if (copy.item_state_slots) - C.item_state_slots = copy.item_state_slots.Copy() - if (copy.sprite_sheets) - C.sprite_sheets = copy.sprite_sheets.Copy() - - OnDisguise(copy) - qdel(copy) - -/datum/extension/chameleon/proc/OnDisguise(obj/item/copy) - -/datum/extension/chameleon/clothing - expected_type = /obj/item/clothing - -/datum/extension/chameleon/clothing/accessory - expected_type = /obj/item/clothing/accessory - -/datum/extension/chameleon/clothing/accessory/OnDisguise(obj/item/clothing/accessory/copy) - ..() - var/obj/item/clothing/accessory/A = holder - - A.slot = copy.slot - A.parent = copy.parent - A.inv_overlay = copy.inv_overlay - A.mob_overlay = copy.mob_overlay - A.overlay_state = copy.overlay_state - A.accessory_icons = copy.accessory_icons - A.on_rolled = copy.on_rolled - A.accessory_flags = copy.accessory_flags - -/datum/extension/chameleon/proc/add_chameleon_choice(list/target, path) - var/obj/item/I = path - if (initial(I.icon) && initial(I.icon_state) && !(initial(I.item_flags) & ITEM_FLAG_INVALID_FOR_CHAMELEON)) - var/name = initial(I.name) - if (target[name]) - name += " ([initial(I.icon_state)])" - if (target[name]) - var/snowflake = 1 - while (target["[name] [snowflake]"]) - ++snowflake - target["[name] [snowflake]"] = path - else - target[name] = path - -/datum/extension/chameleon/proc/generate_chameleon_choices(basetype) - var/choices = list() - var/types = islist(basetype) ? basetype : typesof(basetype) - for (var/path in types) - add_chameleon_choice(choices, path) - return sortAssoc(choices) - -/atom/proc/chameleon_appearance() - set name = "Change Appearance" - set desc = "Activate the holographic appearance changing module." - set category = "Object" - - if (!CanPhysicallyInteract(usr)) - return - if (has_extension(src,/datum/extension/chameleon)) - var/datum/extension/chameleon/C = get_extension(src, /datum/extension/chameleon) - C.change(usr) - else - src.verbs -= /atom/proc/chameleon_appearance - -/datum/extension/chameleon/proc/change(mob/user) - var/choice = input(user, "Select a new appearance", "Select appearance") as null|anything in chameleon_choices - if (choice) - if (QDELETED(user) || QDELETED(holder)) - return - if(user.incapacitated() || !(holder in user)) - to_chat(user, SPAN_WARNING("You can't reach \the [holder].")) - return - disguise(chameleon_choices[choice], user) - OnChange(user,holder) - -/datum/extension/chameleon/proc/OnChange(mob/user, obj/item/clothing/C) //contains icon updates - if (istype(C)) - C.update_clothing_icon() - -/datum/extension/chameleon/backpack - expected_type = /obj/item/storage/backpack - -/datum/extension/chameleon/backpack/OnChange(mob/user, obj/item/storage/backpack/C) - if (ismob(C.loc)) - var/mob/M = C.loc - M.update_inv_back() - -/datum/extension/chameleon/headset - expected_type = /obj/item/device/radio/headset - -/datum/extension/chameleon/headset/OnChange(mob/user, obj/item/device/radio/headset/C) - if (ismob(C.loc)) - var/mob/M = C.loc - M.update_inv_ears() - -/datum/extension/chameleon/gun - expected_type = /obj/item/gun - -/datum/extension/chameleon/gun/OnChange(mob/user, obj/item/gun/C) - if (ismob(C.loc)) - var/mob/M = C.loc - M.update_inv_r_hand() - M.update_inv_l_hand() - -/datum/extension/chameleon/gun/OnDisguise(obj/item/gun/copy) - var/obj/item/gun/G = atom_holder - - G.flags_inv = copy.flags_inv - G.fire_sound = copy.fire_sound - G.fire_sound_text = copy.fire_sound_text - G.icon = copy.icon - -/datum/extension/chameleon/emag - expected_type = /obj/item/card - chameleon_choices = list( - /obj/item/card/emag, - /obj/item/card/union, - /obj/item/card/data, - /obj/item/card/data/full_color, - /obj/item/card/data/disk, - /obj/item/card/id - ) diff --git a/code/datums/extensions/event_registration.dm b/code/datums/extensions/event_registration.dm deleted file mode 100644 index e410a866d943c..0000000000000 --- a/code/datums/extensions/event_registration.dm +++ /dev/null @@ -1,77 +0,0 @@ -// For registering for events to be called when certain conditions are met. - -/datum/extension/event_registration - base_type = /datum/extension/event_registration - expected_type = /datum - flags = EXTENSION_FLAG_IMMEDIATE - var/decl/observ/event - var/datum/target - var/callproc - -/datum/extension/event_registration/New(datum/holder, decl/observ/event, datum/target, callproc) - ..() - event.register(target, src, .proc/trigger) - GLOB.destroyed_event.register(target, src, .proc/qdel_self) - src.event = event - src.target = target - src.callproc = callproc - -/datum/extension/event_registration/Destroy() - GLOB.destroyed_event.unregister(target, src) - event.unregister(target, src) - . = ..() - -/datum/extension/event_registration/proc/trigger() - call(holder, callproc)(arglist(args)) - -// Only forwards the event if the given area isn't in a moving shuttle. - -/datum/extension/event_registration/shuttle_stationary - base_type = /datum/extension/event_registration/shuttle_stationary - var/list/shuttles_registered - var/shuttle_moving = FALSE - var/given_area - -/datum/extension/event_registration/shuttle_stationary/New(datum/holder, decl/observ/event, datum/target, callproc, area/given_area) - ..() - src.given_area = given_area - register_shuttles() - GLOB.shuttle_added.register_global(src, .proc/shuttle_added) - -/datum/extension/event_registration/shuttle_stationary/proc/register_shuttles() - if(given_area in SSshuttle.shuttle_areas) - for(var/shuttle_name in SSshuttle.shuttles) - var/datum/shuttle/shuttle_datum = SSshuttle.shuttles[shuttle_name] - if(given_area in shuttle_datum.shuttle_area) - GLOB.shuttle_moved_event.register(shuttle_datum, src, .proc/shuttle_moved) - GLOB.shuttle_pre_move_event.register(shuttle_datum, src, .proc/shuttle_pre_move) - LAZYADD(shuttles_registered, shuttle_datum) - -/datum/extension/event_registration/shuttle_stationary/proc/unregister_shuttles() - for(var/datum/shuttle_datum in shuttles_registered) - GLOB.shuttle_moved_event.unregister(shuttle_datum, src) - GLOB.shuttle_pre_move_event.unregister(shuttle_datum, src) - shuttles_registered = null - -/datum/extension/event_registration/shuttle_stationary/proc/shuttle_added(datum/shuttle/shuttle) - if(given_area in shuttle.shuttle_area) - GLOB.shuttle_moved_event.register(shuttle, src, .proc/shuttle_moved) - GLOB.shuttle_pre_move_event.register(shuttle, src, .proc/shuttle_pre_move) - LAZYADD(shuttles_registered, shuttle) - -/datum/extension/event_registration/shuttle_stationary/Destroy() - unregister_shuttles() - GLOB.shuttle_added.unregister_global(src) - . = ..() - -/datum/extension/event_registration/shuttle_stationary/proc/shuttle_moved() - shuttle_moving = FALSE - unregister_shuttles() - register_shuttles() - -/datum/extension/event_registration/shuttle_stationary/proc/shuttle_pre_move() - shuttle_moving = TRUE - -/datum/extension/event_registration/shuttle_stationary/trigger() - if(!shuttle_moving) - ..() \ No newline at end of file diff --git a/code/datums/extensions/extensions.dm b/code/datums/extensions/extensions.dm deleted file mode 100644 index 6e63fa44084a1..0000000000000 --- a/code/datums/extensions/extensions.dm +++ /dev/null @@ -1,71 +0,0 @@ -/datum/extension - var/base_type - var/datum/holder = null // The holder - var/expected_type = /datum - var/flags = EXTENSION_FLAG_NONE - -/datum/extension/New(var/datum/holder) - if(!istype(holder, expected_type)) - CRASH("Invalid holder type. Expected [expected_type], was [holder.type]") - src.holder = holder - -/datum/extension/Destroy() - holder = null - . = ..() - -/datum - var/list/datum/extension/extensions - -//Variadic - Additional positional arguments can be given. Named arguments might not work so well -/proc/set_extension(var/datum/source, var/datum/extension/extension_type) - var/datum/extension/extension_base_type = initial(extension_type.base_type) - if(!ispath(extension_base_type, /datum/extension)) - CRASH("Invalid base type: Expected /datum/extension, was [log_info_line(extension_base_type)]") - if(!ispath(extension_type, extension_base_type)) - CRASH("Invalid extension type: Expected [extension_base_type], was [log_info_line(extension_type)]") - if(!source.extensions) - source.extensions = list() - var/datum/extension/existing_extension = source.extensions[extension_base_type] - if(istype(existing_extension)) - qdel(existing_extension) - - if(initial(extension_base_type.flags) & EXTENSION_FLAG_IMMEDIATE) - . = construct_extension_instance(extension_type, source, args.Copy(3)) - source.extensions[extension_base_type] = . - else - var/list/extension_data = list(extension_type, source) - if(args.len > 2) - extension_data += args.Copy(3) - source.extensions[extension_base_type] = extension_data - -/proc/get_or_create_extension(var/datum/source, var/datum/extension/extension_type) - var/base_type = initial(extension_type.base_type) - if(!has_extension(source, base_type)) - set_extension(arglist(args)) - return get_extension(source, base_type) - -/proc/get_extension(var/datum/source, var/base_type) - if(!source.extensions) - return - . = source.extensions[base_type] - if(!.) - return - if(islist(.)) //a list, so it's expecting to be lazy-loaded - var/list/extension_data = . - . = construct_extension_instance(extension_data[1], extension_data[2], extension_data.Copy(3)) - source.extensions[base_type] = . - -//Fast way to check if it has an extension, also doesn't trigger instantiation of lazy loaded extensions -/proc/has_extension(var/datum/source, var/base_type) - return !!(source.extensions && source.extensions[base_type]) - -/proc/construct_extension_instance(var/extension_type, var/datum/source, var/list/arguments) - arguments = list(source) + arguments - return new extension_type(arglist(arguments)) - -/proc/remove_extension(var/datum/source, var/base_type) - if(!source.extensions || !source.extensions[base_type]) - return - if(!islist(source.extensions[base_type])) - qdel(source.extensions[base_type]) - LAZYREMOVE(source.extensions, base_type) \ No newline at end of file diff --git a/code/datums/extensions/fake_data.dm b/code/datums/extensions/fake_data.dm deleted file mode 100644 index fb90c5d0379ae..0000000000000 --- a/code/datums/extensions/fake_data.dm +++ /dev/null @@ -1,22 +0,0 @@ -/datum/extension/fake_data - base_type = /datum/extension/fake_data - var/list/fake_data = list() - -/datum/extension/fake_data/New(datum/holder, data_length) - ..() - for(var/i = 1, i <= data_length, i++) - var/list/key = list() - for(var/j = 1, j <= 10, j++) - key += ascii2text(rand(65, 90)) //Capital letters - fake_data += list(list("key" = JOINTEXT(key), "value" = make_value())) //weird data structure is to fascilitate nanoui use. - -/datum/extension/fake_data/proc/make_value() - var/list/value = list("0b") - for(var/j = 1, j <= 16, j++) - value += "[pick(0,1)]" - return JOINTEXT(value) - -/datum/extension/fake_data/proc/update_and_return_data() - var/key = rand(1, length(fake_data)) - fake_data[key]["value"] = make_value() - return fake_data.Copy() \ No newline at end of file diff --git a/code/datums/extensions/holster/holster.dm b/code/datums/extensions/holster/holster.dm deleted file mode 100644 index 39748dee32bd5..0000000000000 --- a/code/datums/extensions/holster/holster.dm +++ /dev/null @@ -1,151 +0,0 @@ -/datum/extension/holster - base_type = /datum/extension/holster - var/atom/atom_holder - var/obj/item/storage/storage - var/sound_in = 'sound/effects/holster/holsterin.ogg' - var/sound_out = 'sound/effects/holster/holsterout.ogg' - var/list/can_holster = null - var/obj/item/holstered = null - -/datum/extension/holster/New(holder, storage, sound_in, sound_out, can_holster) - ..() - atom_holder = holder - src.storage = storage - src.sound_in = sound_in || src.sound_in - src.sound_out = sound_out || src.sound_out - src.can_holster = can_holster - - atom_holder.verbs += /atom/proc/holster_verb - -/datum/extension/holster/Destroy() - . = ..() - atom_holder.verbs -= /atom/proc/holster_verb - -/datum/extension/holster/proc/can_holster(var/obj/item/I) - if(can_holster) - if(is_type_in_list(I,can_holster)) - return 1 - return 0 - if(I.slot_flags & SLOT_HOLSTER) - return 1 - return 0 - -/datum/extension/holster/proc/holster(var/obj/item/I, var/mob/living/user) - if(!storage) - return 1 - if(!holstered && storage.storage_slots != null && storage.contents.len >= storage.storage_slots - 1) - if(!can_holster(I)) - to_chat(user, "\The [I] won't fit in \the [atom_holder]'s holster!.") - return 1 - if(can_holster(I)) - if(holstered && istype(user)) - to_chat(user, "There is already \a [holstered] holstered here!") - return 1 - if(sound_in) - playsound(get_turf(atom_holder), sound_in, 50) - if(istype(user)) - user.stop_aiming(no_message=1) - holstered = I - storage.handle_item_insertion(holstered, 1) - holstered.add_fingerprint(user) - storage.w_class = max(storage.w_class, holstered.w_class) - user.visible_message("\The [user] holsters \the [holstered].", "You holster \the [holstered].") - atom_holder.SetName("occupied [initial(atom_holder.name)]") - atom_holder.update_icon() - GLOB.moved_event.register(holstered, src, .proc/check_holster) - GLOB.destroyed_event.register(holstered, src, .proc/clear_holster) - return 1 - return 0 - -/datum/extension/holster/proc/clear_holster() - GLOB.moved_event.unregister(holstered, src, .proc/check_holster) - GLOB.destroyed_event.unregister(holstered, src, .proc/clear_holster) - holstered = null - atom_holder.SetName(initial(atom_holder.name)) - -/datum/extension/holster/proc/unholster(mob/user as mob, var/avoid_intent = FALSE) - if(!holstered) - return 0 - if(user.get_active_hand() && user.get_inactive_hand()) - to_chat(user, "You need an empty hand to draw \the [holstered]!") - return 0 - var/using_intent_preference = user.client ? user.client.get_preference_value(/datum/client_preference/holster_on_intent) == GLOB.PREF_YES : FALSE - if(avoid_intent || (using_intent_preference && user.a_intent != I_HELP)) - var/sound_vol = 25 - if(user.a_intent == I_HURT) - sound_vol = 50 - if(istype(holstered, /obj/item/gun)) - var/obj/item/gun/G = holstered - G.check_accidents(user) - if(G.safety() && !user.skill_fail_prob(SKILL_WEAPONS, 100, SKILL_EXPERT, 0.5)) //Experienced shooter will disable safety before shooting. - G.toggle_safety(user) - usr.visible_message( - "\The [user] draws \the [holstered], ready to go!", - "You draw \the [holstered], ready to go!" - ) - else - user.visible_message( - "\The [user] draws \the [holstered], pointing it at the ground.", - "You draw \the [holstered], pointing it at the ground." - ) - if(sound_out) - playsound(get_turf(atom_holder), sound_out, sound_vol) - holstered.add_fingerprint(user) - holstered.queue_icon_update() - user.put_in_hands(holstered) - storage.w_class = initial(storage.w_class) - atom_holder.update_icon() - return 1 - return 0 - -/datum/extension/holster/proc/examine_holster(mob/user) - if (holstered) - to_chat(user, "\A [holstered] is holstered here.") - else - to_chat(user, "It is empty.") - -/datum/extension/holster/proc/check_holster() - if(holstered.loc != storage) - clear_holster() - -/atom/proc/holster_verb(var/holster_name in get_holsters()) - set name = "Holster" - set category = "Object" - set src in usr - - if(usr.incapacitated()) - return - - var/datum/extension/holster/H = get_holsters()[holster_name] - if(!H) - return - - if(!H.holstered) - var/obj/item/W = usr.get_active_hand() - if(!istype(W, /obj/item)) - to_chat(usr, "You're not holding anything to holster.") - return - H.holster(W, usr) - else - H.unholster(usr, 1) - -/atom/proc/get_holsters() - . = list() - if(has_extension(src, /datum/extension/holster)) - .[name] = get_extension(src, /datum/extension/holster) - -/obj/item/clothing/under/get_holsters() - . = ..() - var/holster_accessories_by_name = list() - for(var/obj/accessory in accessories) - if(has_extension(accessory, /datum/extension/holster)) - group_by(holster_accessories_by_name , accessory.name, accessory) - - for(var/accessory_name in holster_accessories_by_name) - var/list/holster_accessories = holster_accessories_by_name[accessory_name] - if(holster_accessories.len == 1) - .[accessory_name] = get_extension(holster_accessories[1], /datum/extension/holster) - else - for(var/i = 1 to holster_accessories.len) - var/holster_name = "[accessory_name] [i]" - .[holster_name] = get_extension(holster_accessories[i], /datum/extension/holster) diff --git a/code/datums/extensions/interactive.dm b/code/datums/extensions/interactive.dm deleted file mode 100644 index ae74d78fdf8d6..0000000000000 --- a/code/datums/extensions/interactive.dm +++ /dev/null @@ -1,36 +0,0 @@ -//Extensions that can be interacted with via Topic -/datum/extension/interactive - base_type = /datum/extension/interactive - var/list/host_predicates - var/list/user_predicates - -/datum/extension/interactive/New(var/datum/holder, var/host_predicates = list(), var/user_predicates = list()) - ..() - - src.host_predicates = host_predicates ? host_predicates : list() - src.user_predicates = user_predicates ? user_predicates : list() - -/datum/extension/interactive/Destroy() - host_predicates.Cut() - user_predicates.Cut() - return ..() - -/datum/extension/interactive/proc/extension_status(var/mob/user) - if(!holder || !user) - return STATUS_CLOSE - if(!all_predicates_true(list(holder), host_predicates)) - return STATUS_CLOSE - if(!all_predicates_true(list(user), user_predicates)) - return STATUS_CLOSE - if(holder.CanUseTopic(user, GLOB.default_state) != STATUS_INTERACTIVE) - return STATUS_CLOSE - - return STATUS_INTERACTIVE - -/datum/extension/interactive/proc/extension_act(var/href, var/list/href_list, var/mob/user) - return extension_status(user) == STATUS_CLOSE - -/datum/extension/interactive/Topic(var/href, var/list/href_list) - if(..()) - return TRUE - return extension_act(href, href_list, usr) \ No newline at end of file diff --git a/code/datums/extensions/label.dm b/code/datums/extensions/label.dm deleted file mode 100644 index 9d09f71c02f8d..0000000000000 --- a/code/datums/extensions/label.dm +++ /dev/null @@ -1,94 +0,0 @@ -/datum/extension/labels - base_type = /datum/extension/labels - expected_type = /atom - var/atom/atom_holder - var/list/labels - -/datum/extension/labels/New() - ..() - atom_holder = holder - -/datum/extension/labels/Destroy() - atom_holder = null - return ..() - -/datum/extension/labels/proc/AttachLabel(var/mob/user, var/label) - if(!CanAttachLabel(user, label)) - return - - if(!LAZYLEN(labels)) - atom_holder.verbs += /atom/proc/RemoveLabel - LAZYADD(labels, label) - - user.visible_message("\The [user] attaches a label to \the [atom_holder].", \ - "You attach a label, '[label]', to \the [atom_holder].") - - var/old_name = atom_holder.name - atom_holder.name = "[atom_holder.name] ([label])" - GLOB.name_set_event.raise_event(src, old_name, atom_holder.name) - -/datum/extension/labels/proc/RemoveLabel(var/mob/user, var/label) - if(!(label in labels)) - return - - LAZYREMOVE(labels, label) - if(!LAZYLEN(labels)) - atom_holder.verbs -= /atom/proc/RemoveLabel - - var/full_label = " ([label])" - var/index = findtextEx(atom_holder.name, full_label) - if(!index) // Playing it safe, something might not have set the name properly - return - - user.visible_message("\The [user] removes a label from \the [atom_holder].", \ - "You remove a label, '[label]', from \the [atom_holder].") - - var/old_name = atom_holder.name - // We find and replace the first instance, since that's the one we removed from the list - atom_holder.name = replacetext_char(atom_holder.name, full_label, "", index, index + length(full_label)) - GLOB.name_set_event.raise_event(src, old_name, atom_holder.name) - -// We may have to do something more complex here -// in case something appends strings to something that's labelled rather than replace the name outright -// Non-printable characters should be of help if this comes up -/datum/extension/labels/proc/AppendLabelsToName(var/name) - if(!LAZYLEN(labels)) - return name - . = list(name) - for(var/entry in labels) - . += " ([entry])" - . = jointext(., null) - -/datum/extension/labels/proc/CanAttachLabel(var/user, var/label) - if(!length(label)) - return FALSE - if(ExcessLabelLength(label, user)) - return FALSE - return TRUE - -/datum/extension/labels/proc/ExcessLabelLength(var/label, var/user) - . = length(label) + 3 // Each label also adds a space and two brackets when applied to a name - if(LAZYLEN(labels)) - for(var/entry in labels) - . += length(entry) + 3 - . = . > 64 ? TRUE : FALSE - if(. && user) - to_chat(user, "The label won't fit.") - -/proc/get_attached_labels(var/atom/source) - if(has_extension(source, /datum/extension/labels)) - var/datum/extension/labels/L = get_extension(source, /datum/extension/labels) - if(LAZYLEN(L.labels)) - return L.labels.Copy() - return list() - -/atom/proc/RemoveLabel(var/label in get_attached_labels(src)) - set name = "Remove Label" - set desc = "Used to remove labels" - set category = "Object" - set src in view(1) - - if(CanPhysicallyInteract(usr)) - if(has_extension(src, /datum/extension/labels)) - var/datum/extension/labels/L = get_extension(src, /datum/extension/labels) - L.RemoveLabel(usr, label) \ No newline at end of file diff --git a/code/datums/extensions/local_network.dm b/code/datums/extensions/local_network.dm deleted file mode 100644 index 846332a2aba54..0000000000000 --- a/code/datums/extensions/local_network.dm +++ /dev/null @@ -1,92 +0,0 @@ -/datum/extension/local_network_member - base_type = /datum/extension/local_network_member - var/id_tag - -/datum/extension/local_network_member/Destroy() - if(holder) - var/datum/local_network/lan = get_local_network() - if(lan) - lan.remove_device(holder) - . = ..() - -/datum/extension/local_network_member/proc/set_tag(var/mob/user, var/new_ident) - if(id_tag == new_ident) - to_chat(user, SPAN_WARNING("\The [holder] is already part of the [new_ident] local network.")) - return FALSE - - if(id_tag) - var/datum/local_network/old_lan = GLOB.local_networks[id_tag] - if(old_lan) - if(!old_lan.remove_device(holder)) - to_chat(user, SPAN_WARNING("You encounter an error when trying to unregister \the [holder] from the [id_tag] local network.")) - return FALSE - to_chat(user, SPAN_NOTICE("You unregister \the [holder] from the [id_tag] local network.")) - - var/datum/local_network/lan = GLOB.local_networks[new_ident] - if(!lan) - lan = new(new_ident) - lan.add_device(holder) - to_chat(user, SPAN_NOTICE("You create a new [new_ident] local network and register \the [holder] with it.")) - else if(lan.within_radius(holder)) - lan.add_device(holder) - to_chat(user, SPAN_NOTICE("You register \the [holder] with the [new_ident] local network.")) - else - to_chat(user, SPAN_WARNING("\The [holder] is out of range of the [new_ident] local network.")) - return FALSE - id_tag = new_ident - return TRUE - -/datum/extension/local_network_member/proc/get_local_network() - var/datum/local_network/lan = id_tag ? GLOB.local_networks[id_tag] : null - if(lan && !lan.within_radius(holder)) - lan.remove_device(holder) - id_tag = null - lan = null - return lan - -/datum/extension/local_network_member/nano_host() - if(holder) - return holder.nano_host() - . = ..() - -/datum/extension/local_network_member/proc/get_new_tag(var/mob/user) - var/new_ident = input(user, "Enter a new ident tag.", "[holder]", id_tag) as null|text - if(new_ident && holder && user.Adjacent(holder) && CanPhysicallyInteract(user)) - return set_tag(user, new_ident) - -// - -/datum/extension/local_network_member/multilevel/set_tag(var/mob/user, var/new_ident) - if(id_tag == new_ident) - to_chat(user, SPAN_WARNING("\The [holder] is already part of the [new_ident] local network.")) - return FALSE - - if(id_tag) - var/datum/local_network/multilevel/old_lan = GLOB.multilevel_local_networks[id_tag] - if(old_lan) - if(!old_lan.remove_device(holder)) - to_chat(user, SPAN_WARNING("You encounter an error when trying to unregister \the [holder] from the [id_tag] local network.")) - return FALSE - to_chat(user, SPAN_NOTICE("You unregister \the [holder] from the [id_tag] local network.")) - - var/datum/local_network/multilevel/lan = GLOB.multilevel_local_networks[new_ident] - if(!lan) - lan = new(new_ident) - lan.add_device(holder) - to_chat(user, SPAN_NOTICE("You create a new [new_ident] local network and register \the [holder] with it.")) - else if(lan.within_radius(holder)) - lan.add_device(holder) - to_chat(user, SPAN_NOTICE("You register \the [holder] with the [new_ident] local network.")) - else - to_chat(user, SPAN_WARNING("\The [holder] is out of range of the [new_ident] local network.")) - return FALSE - id_tag = new_ident - return TRUE - -/datum/extension/local_network_member/multilevel/get_local_network() - var/datum/local_network/multilevel/lan = id_tag ? GLOB.multilevel_local_networks[id_tag] : null - if(lan && !lan.within_radius(holder)) - lan.remove_device(holder) - id_tag = null - lan = null - return lan \ No newline at end of file diff --git a/code/datums/extensions/multitool/_multitool.dm b/code/datums/extensions/multitool/_multitool.dm deleted file mode 100644 index fd581a007f94e..0000000000000 --- a/code/datums/extensions/multitool/_multitool.dm +++ /dev/null @@ -1,3 +0,0 @@ -#define MT_NOACTION 0 -#define MT_REFRESH 1 -#define MT_CLOSE 2 diff --git a/code/datums/extensions/multitool/circuitboards/buildtype_select.dm b/code/datums/extensions/multitool/circuitboards/buildtype_select.dm deleted file mode 100644 index e8cff3571f2e0..0000000000000 --- a/code/datums/extensions/multitool/circuitboards/buildtype_select.dm +++ /dev/null @@ -1,29 +0,0 @@ -/datum/extension/interactive/multitool/circuitboards/buildtype_select - expected_type = /obj/item/stock_parts/circuitboard - -/datum/extension/interactive/multitool/circuitboards/buildtype_select/get_interact_window(var/obj/item/device/multitool/M, var/mob/user) - var/obj/item/stock_parts/circuitboard/board = holder - var/dat = list() - dat += "Select Built Machine:
      " - dat += "" - for(var/path in board.get_buildable_types()) - var/obj/thing = path - dat += "" - if(path == board.build_path) - dat += "" - else - dat += "" - dat += "" - dat += "
      [initial(thing.name)][initial(thing.name)]
      " - return JOINTEXT(dat) - -/datum/extension/interactive/multitool/circuitboards/buildtype_select/on_topic(href, href_list, user) - var/obj/item/stock_parts/circuitboard/board = holder - if(href_list["choose"]) - var/path = locate(href_list["choose"]) - if(path && (path in board.get_buildable_types())) - board.build_path = path - var/obj/thing = path - board.SetName(T_BOARD(initial(thing.name))) - return MT_REFRESH - return ..() \ No newline at end of file diff --git a/code/datums/extensions/multitool/circuitboards/circuitboards.dm b/code/datums/extensions/multitool/circuitboards/circuitboards.dm deleted file mode 100644 index 295cec719f8cd..0000000000000 --- a/code/datums/extensions/multitool/circuitboards/circuitboards.dm +++ /dev/null @@ -1,5 +0,0 @@ -/datum/extension/interactive/multitool/circuitboards/extension_status(var/mob/user) - if(isAI(user)) // No remote AI access - return STATUS_CLOSE - - return ..() diff --git a/code/datums/extensions/multitool/circuitboards/shuttle_console.dm b/code/datums/extensions/multitool/circuitboards/shuttle_console.dm deleted file mode 100644 index 06be78ef51372..0000000000000 --- a/code/datums/extensions/multitool/circuitboards/shuttle_console.dm +++ /dev/null @@ -1,29 +0,0 @@ -/datum/extension/interactive/multitool/circuitboards/shuttle_console - expected_type = /obj/item/stock_parts/circuitboard/shuttle_console - -/datum/extension/interactive/multitool/circuitboards/shuttle_console/get_interact_window(var/obj/item/device/multitool/M, var/mob/user) - var/obj/item/stock_parts/circuitboard/shuttle_console/board = holder - var/dat = list() - dat += "Current Selected Shuttle: [board.shuttle_tag || "NONE"]
      " - dat += "Synchronize to current shuttle." - return JOINTEXT(dat) - -/datum/extension/interactive/multitool/circuitboards/shuttle_console/on_topic(href, href_list, user) - var/obj/item/stock_parts/circuitboard/shuttle_console/board = holder - if(href_list["sync"]) - var/new_name - for(var/shuttle_name in SSshuttle.shuttles) - var/datum/shuttle/shuttle = SSshuttle.shuttles[shuttle_name] - if(get_area(board) in shuttle.shuttle_area) - new_name = shuttle_name - break - if(!new_name) - to_chat(user, SPAN_WARNING("No eligible shuttle could be located. Make sure the board is inside a shuttle and try again.")) - return MT_NOACTION - if(!board.is_valid_shuttle(SSshuttle.shuttles[new_name])) - to_chat(user, SPAN_WARNING("The current shuttle does not support this console type. Try a different shuttle or circuit board.")) - return MT_NOACTION - board.shuttle_tag = new_name - to_chat(user, SPAN_NOTICE("You set the shuttle name to '[new_name]'")) - return MT_REFRESH - return ..() \ No newline at end of file diff --git a/code/datums/extensions/multitool/circuitboards/stationalert.dm b/code/datums/extensions/multitool/circuitboards/stationalert.dm deleted file mode 100644 index 45cd363c114cc..0000000000000 --- a/code/datums/extensions/multitool/circuitboards/stationalert.dm +++ /dev/null @@ -1,29 +0,0 @@ -/datum/extension/interactive/multitool/circuitboards/stationalert/get_interact_window(var/obj/item/device/multitool/M, var/mob/user) - var/obj/item/stock_parts/circuitboard/stationalert/SA = holder - . += "Alarm Sources
      " - . += "" - for(var/datum/alarm_handler/AH as anything in SSalarm.handlers) - . += "" - . += "" - if(AH in SA.alarm_handlers) - . += "" - else - . += "" - . += "" - . += "
      [AH.category]ActiveInactivateInactiveActivate
      " - -/datum/extension/interactive/multitool/circuitboards/stationalert/on_topic(href, href_list, user) - var/obj/item/stock_parts/circuitboard/stationalert/SA = holder - if(href_list["add"]) - var/datum/alarm_handler/AH = locate(href_list["add"]) in SSalarm.handlers - if(AH) - SA.alarm_handlers |= AH - return MT_REFRESH - - if(href_list["remove"]) - var/datum/alarm_handler/AH = locate(href_list["remove"]) in SSalarm.handlers - if(AH) - SA.alarm_handlers -= AH - return MT_REFRESH - - return ..() diff --git a/code/datums/extensions/multitool/items/cable.dm b/code/datums/extensions/multitool/items/cable.dm deleted file mode 100644 index dec9afc5a0902..0000000000000 --- a/code/datums/extensions/multitool/items/cable.dm +++ /dev/null @@ -1,25 +0,0 @@ -/obj/item/stack/cable_coil/New() - set_extension(src, /datum/extension/interactive/multitool/items/cable) - ..() - -/datum/extension/interactive/multitool/items/cable/get_interact_window(var/obj/item/device/multitool/M, var/mob/user) - var/obj/item/stack/cable_coil/cable_coil = holder - . += "Available Colors
      " - . += "" - for(var/cable_color in GLOB.possible_cable_colours) - . += "" - . += "" - if(cable_coil.color == GLOB.possible_cable_colours[cable_color]) - . += "" - else - . += "" - . += "" - . += "
      [cable_color]SelectedSelect
      " - -/datum/extension/interactive/multitool/items/cable/on_topic(href, href_list, user) - var/obj/item/stack/cable_coil/cable_coil = holder - if(href_list["select_color"] && (href_list["select_color"] in GLOB.possible_cable_colours)) - cable_coil.set_cable_color(href_list["select_color"], user) - return MT_REFRESH - - return ..() diff --git a/code/datums/extensions/multitool/items/clothing.dm b/code/datums/extensions/multitool/items/clothing.dm deleted file mode 100644 index b01054e537c2e..0000000000000 --- a/code/datums/extensions/multitool/items/clothing.dm +++ /dev/null @@ -1,13 +0,0 @@ -/obj/item/clothing/under/New() - set_extension(src, /datum/extension/interactive/multitool/items/clothing) - ..() - -/datum/extension/interactive/multitool/items/clothing/interact(var/obj/item/device/multitool/M, var/mob/user) - if(extension_status(user) != STATUS_INTERACTIVE) - return - var/obj/item/clothing/under/u = holder - if(u.has_sensor == SUIT_NO_SENSORS) - to_chat(user, SPAN_WARNING("\The [u] doesn't have suit sensors.")) - return - u.has_sensor = u.has_sensor == SUIT_LOCKED_SENSORS ? SUIT_HAS_SENSORS : SUIT_LOCKED_SENSORS - user.visible_message(SPAN_NOTICE("\The [user] [u.has_sensor == SUIT_LOCKED_SENSORS ? "" : "un"]locks \the [u]'s suit sensor controls."), range = 2) diff --git a/code/datums/extensions/multitool/items/items.dm b/code/datums/extensions/multitool/items/items.dm deleted file mode 100644 index 9305bc8f75e6f..0000000000000 --- a/code/datums/extensions/multitool/items/items.dm +++ /dev/null @@ -1,5 +0,0 @@ -/datum/extension/interactive/multitool/items/extension_status(var/mob/user) - if(isAI(user)) // No remote AI access - return STATUS_CLOSE - - return ..() diff --git a/code/datums/extensions/multitool/items/stock_parts_radio.dm b/code/datums/extensions/multitool/items/stock_parts_radio.dm deleted file mode 100644 index 7a00d4f2cc8ec..0000000000000 --- a/code/datums/extensions/multitool/items/stock_parts_radio.dm +++ /dev/null @@ -1,260 +0,0 @@ - -/datum/extension/interactive/multitool/radio - var/weakref/machine - -/datum/extension/interactive/multitool/radio/extension_status(mob/user) - var/obj/item/stock_parts/radio/radio = holder - if(radio.status & PART_STAT_INSTALLED) - return STATUS_CLOSE - return ..() - -/datum/extension/interactive/multitool/radio/interact(obj/item/device/multitool/M, mob/user) - if(extension_status(user) != STATUS_INTERACTIVE) - return - var/obj/machinery/actual_machine = machine && machine.resolve() - if(!actual_machine && !aquire_target(M, user)) - return - return ..() - -// Could use buffers, but am afraid of multitool interaction clashes. -/datum/extension/interactive/multitool/radio/proc/aquire_target(obj/item/device/multitool/M, mob/user) - var/candidates = list() - for(var/obj/machinery/new_machine in view(2, user)) - candidates += new_machine - if(!length(candidates)) - to_chat(user, "You fail to import configuration settings from anything. Try standing near a machine.") - return - var/obj/machinery/input = input(user, "Which machine would you like to configure \the [holder] for?", "Machine Selection") as null|anything in candidates - if(!istype(input) || (extension_status(user) != STATUS_INTERACTIVE)) - return - machine = weakref(input) - return input - -/datum/extension/interactive/multitool/radio/get_interact_window(obj/item/device/multitool/M, mob/user) - var/obj/item/stock_parts/radio/radio = holder - var/list/dat = list() - - dat += "Unlink Machine
      " - var/obj/machinery/actual_machine = machine && machine.resolve() - if(actual_machine && actual_machine.can_apply_preset_to(radio)) - dat += "Reset to Machine Defaults
      " - dat += "Configuration for \the [radio].
      " - dat += "Frequency: [radio.frequency || "none"]
      " - dat += "ID: [radio.id_tag || "none"]
      " - dat += "Filter: [radio.filter || "none"]
      " - dat += "Encryption key: [radio.encryption || "none"]
      " - return JOINTEXT(dat) - -/datum/extension/interactive/multitool/radio/on_topic(href, href_list, user) - var/obj/item/stock_parts/radio/radio = holder - if(href_list["unlink"]) - machine = null - return MT_CLOSE - if(href_list["frequency"]) - var/new_frequency = input(user, "Select a new frequency:", "Frequency Selection", radio.frequency) as null|num - if(!new_frequency || (extension_status(user) != STATUS_INTERACTIVE)) - return MT_NOACTION - new_frequency = sanitize_frequency(new_frequency, RADIO_LOW_FREQ, RADIO_HIGH_FREQ) - if(new_frequency == radio.frequency) - return MT_NOACTION - radio.set_frequency(new_frequency, radio.filter) - return MT_REFRESH - if(href_list["id_tag"]) - var/new_id_tag = input(user, "Select a new ID:", "ID Selection", radio.id_tag) as null|text - if(!new_id_tag || (extension_status(user) != STATUS_INTERACTIVE)) - return MT_NOACTION - new_id_tag = sanitize(new_id_tag) - if(new_id_tag == radio.id_tag) - return MT_NOACTION - radio.id_tag = new_id_tag - return MT_REFRESH - if(href_list["filter"]) - var/new_filter = input(user, "Select a new radio filter:", "Filter Selection", radio.filter) as null|anything in GLOB.all_selectable_radio_filters - if(!new_filter || (extension_status(user) != STATUS_INTERACTIVE)) - return MT_NOACTION - if(new_filter == radio.filter) - return MT_NOACTION - radio.set_frequency(radio.frequency, new_filter) - return MT_REFRESH - if(href_list["encryption"]) - var/new_encryption = input(user, "Select a new encryption key:", "Encryption Key Selection", radio.encryption) as null|num - if(!new_encryption || (extension_status(user) != STATUS_INTERACTIVE)) - return MT_NOACTION - new_encryption = sanitize_integer(new_encryption, 0, 999, radio.encryption) - if(new_encryption == radio.encryption) - return MT_NOACTION - radio.encryption = new_encryption - return MT_REFRESH - if(href_list["stockreset"]) - var/obj/machinery/actual_machine = machine && machine.resolve() - if(!actual_machine) - return MT_CLOSE - actual_machine.apply_preset_to(radio) - return MT_REFRESH - -// Helper. -/datum/extension/interactive/multitool/radio/proc/event_list_to_selection_table(table_tag, list/selected_events) - . = list() - . += "" - for(var/thing in selected_events) - . += "" - . += "" - . += "" - var/decl/public_access/variable = selected_events[thing] - . += "" - . += "" - . += "" - . += "" - . += "
      (-)[thing][variable.name](?)
      (+)
      " - -/datum/extension/interactive/multitool/radio/proc/event_list_topic(list/selected_events, list/valid_events, mob/user, href_list) - if(href_list["remove"]) - var/thing = href_list["remove"] - LAZYREMOVE(selected_events, thing) - return MT_REFRESH - if(href_list["rename"]) - var/thing = href_list["rename"] - if(selected_events && selected_events[thing]) - var/new_name = input(user, "Select a new message key for this item:", "Key Select", thing) as null|text - new_name = sanitize(new_name) - if(!new_name || (extension_status(user) != STATUS_INTERACTIVE)) - return MT_REFRESH - if(!selected_events || !selected_events[thing]) - return MT_REFRESH - selected_events[new_name] = selected_events[thing] - selected_events -= thing - return MT_REFRESH - if(href_list["new_val"]) - var/thing = href_list["new_val"] - var/decl/public_access/variable = selected_events && selected_events[thing] - if(!variable || !LAZYLEN(valid_events)) - return MT_REFRESH - var/valid_variables = list() - for(var/path in valid_events) - valid_variables += valid_events[path] - var/new_var = input(user, "Select a new action for this item:", "Action Select", thing) as null|anything in valid_variables - if(!new_var || (extension_status(user) != STATUS_INTERACTIVE)) - return MT_REFRESH - if(!(selected_events && selected_events[thing] == variable)) - return MT_REFRESH - selected_events[thing] = new_var - return MT_REFRESH - if(href_list["add"]) - if(!LAZYLEN(valid_events)) - return MT_REFRESH - LAZYSET(selected_events, copytext_char(md5(num2text(rand(0, 1))), 1, 11), valid_events[pick(valid_events)]) // random key - return MT_REFRESH - if(href_list["desc"]) - var/decl/public_access/variable = locate(href_list["desc"]) - if(istype(variable)) - to_chat(user, variable.desc) - return MT_NOACTION - -/datum/extension/interactive/multitool/radio/transmitter/aquire_target() - var/obj/machinery/actual_machine = ..() - . = actual_machine - if(!actual_machine) - return - var/obj/item/stock_parts/radio/transmitter/basic/radio = holder - radio.sanitize_events(actual_machine, radio.transmit_on_change) - radio.sanitize_events(actual_machine, radio.transmit_on_tick) - -/datum/extension/interactive/multitool/radio/transmitter/get_interact_window(obj/item/device/multitool/M, mob/user) - var/obj/item/stock_parts/radio/transmitter/basic/radio = holder - var/list/dat = list() - - dat += "Transmit on change:
      " - dat += event_list_to_selection_table("on_change", radio.transmit_on_change) - dat += "
      " - dat += "Transmit every tick:
      " - dat += event_list_to_selection_table("on_tick", radio.transmit_on_tick) - return ..() + JOINTEXT(dat) - -/datum/extension/interactive/multitool/radio/transmitter/on_topic(href, href_list, user) - . = ..() - if(.) - return - var/obj/machinery/actual_machine = machine.resolve() - if(!actual_machine) - return MT_CLOSE - var/obj/item/stock_parts/radio/transmitter/basic/radio = holder - if(href_list["on_change"]) - return event_list_topic(radio.transmit_on_change, actual_machine.public_variables, user, href_list) - if(href_list["on_tick"]) - return event_list_topic(radio.transmit_on_tick, actual_machine.public_variables, user, href_list) - -/datum/extension/interactive/multitool/radio/event_transmitter/aquire_target() - var/obj/machinery/actual_machine = ..() - . = actual_machine - if(!actual_machine) - return - var/obj/item/stock_parts/radio/transmitter/on_event/radio = holder - if(!radio.is_valid_event(actual_machine, radio.event)) - radio.event = null - radio.sanitize_events(actual_machine, radio.transmit_on_event) - -/datum/extension/interactive/multitool/radio/event_transmitter/get_interact_window(obj/item/device/multitool/M, mob/user) - var/obj/item/stock_parts/radio/transmitter/on_event/radio = holder - var/list/dat = list() - - dat += "Choose event:
      " - if(radio.event) - dat += "[radio.event] (?)" - else - dat += "(+)" - dat += "
      " - dat += "Transmit on event:
      " - dat += event_list_to_selection_table("on_event", radio.transmit_on_event) - return ..() + JOINTEXT(dat) - -/datum/extension/interactive/multitool/radio/event_transmitter/on_topic(href, href_list, user) - . = ..() - if(.) - return - var/obj/machinery/actual_machine = machine.resolve() - if(!actual_machine) - return MT_CLOSE - var/obj/item/stock_parts/radio/transmitter/on_event/radio = holder - - if(href_list["on_event"]) - return event_list_topic(radio.transmit_on_event, actual_machine.public_variables, user, href_list) - if(href_list["event"]) - var/list/E = list() - if(radio.event) - E["event"] = radio.event - . = event_list_topic(E, actual_machine.public_variables, user, href_list) - if(length(E)) - radio.event = E[E[1]] - -/datum/extension/interactive/multitool/radio/receiver/aquire_target() - var/obj/machinery/actual_machine = ..() - . = actual_machine - if(!actual_machine) - return - var/obj/item/stock_parts/radio/receiver/radio = holder - radio.sanitize_events(actual_machine, radio.receive_and_call) - radio.sanitize_events(actual_machine, radio.receive_and_write) - -/datum/extension/interactive/multitool/radio/receiver/get_interact_window(obj/item/device/multitool/M, mob/user) - var/obj/item/stock_parts/radio/receiver/radio = holder - var/list/dat = list() - - dat += "Transmit on change:
      " - dat += event_list_to_selection_table("call", radio.receive_and_call) - dat += "
      " - dat += "Transmit every tick:
      " - dat += event_list_to_selection_table("write", radio.receive_and_write) - return ..() + JOINTEXT(dat) - -/datum/extension/interactive/multitool/radio/receiver/on_topic(href, href_list, user) - . = ..() - if(.) - return - var/obj/machinery/actual_machine = machine.resolve() - if(!actual_machine) - return MT_CLOSE - var/obj/item/stock_parts/radio/receiver/radio = holder - if(href_list["call"]) - return event_list_topic(radio.receive_and_call, actual_machine.public_methods, user, href_list) - if(href_list["write"]) - return event_list_topic(radio.receive_and_write, radio.sanitize_events(actual_machine.public_variables.Copy()), user, href_list) diff --git a/code/datums/extensions/multitool/multitool.dm b/code/datums/extensions/multitool/multitool.dm deleted file mode 100644 index 4dd5a3241478b..0000000000000 --- a/code/datums/extensions/multitool/multitool.dm +++ /dev/null @@ -1,71 +0,0 @@ -/datum/extension/interactive/multitool - base_type = /datum/extension/interactive/multitool - var/window_x = 370 - var/window_y = 470 - -/datum/extension/interactive/multitool/proc/interact(var/obj/item/device/multitool/M, var/mob/user) - if(extension_status(user) != STATUS_INTERACTIVE) - return - - var/html = get_interact_window(M, user) - if(html) - var/datum/browser/popup = new(usr, "multitool", "Multitool Menu", window_x, window_y) - popup.set_content(html) - popup.set_title_image(user.browse_rsc_icon(M.icon, M.icon_state)) - popup.open() - else - close_window(usr) - -/datum/extension/interactive/multitool/proc/get_interact_window(var/obj/item/device/multitool/M, var/mob/user) - return - -/datum/extension/interactive/multitool/proc/close_window(var/mob/user) - close_browser(user, "window=multitool") - -/datum/extension/interactive/multitool/proc/buffer(var/obj/item/device/multitool/multitool) - . += "Buffer Memory:
      " - var/buffer_name = multitool.get_buffer_name() - if(buffer_name) - . += "[buffer_name] Send Purge
      " - else - . += "No connection stored in the buffer." - -/datum/extension/interactive/multitool/extension_status(var/mob/user) - if(!user.get_multitool()) - return STATUS_CLOSE - . = ..() - -/datum/extension/interactive/multitool/extension_act(href, href_list, var/mob/user) - if(..()) - close_window(usr) - return TRUE - - var/obj/item/device/multitool/M = user.get_multitool() - if(href_list["send"]) - var/atom/buffer = locate(href_list["send"]) - . = send_buffer(M, buffer, user) - else if(href_list["purge"]) - M.set_buffer(null) - . = MT_REFRESH - else - . = on_topic(href, href_list, user) - - switch(.) - if(MT_REFRESH) - interact(M, user) - if(MT_CLOSE) - close_window(user) - return MT_NOACTION ? FALSE : TRUE - -/datum/extension/interactive/multitool/proc/on_topic(href, href_list, user) - return MT_NOACTION - -/datum/extension/interactive/multitool/proc/send_buffer(var/obj/item/device/multitool/M, var/atom/buffer, var/mob/user) - if(M.get_buffer() == buffer && buffer) - receive_buffer(M, buffer, user) - else if(!buffer) - to_chat(user, "Unable to acquire data from the buffered object. Purging from memory.") - return MT_REFRESH - -/datum/extension/interactive/multitool/proc/receive_buffer(var/obj/item/device/multitool/M, var/atom/buffer, var/mob/user) - return \ No newline at end of file diff --git a/code/datums/extensions/multitool/store.dm b/code/datums/extensions/multitool/store.dm deleted file mode 100644 index becd26747d22b..0000000000000 --- a/code/datums/extensions/multitool/store.dm +++ /dev/null @@ -1,10 +0,0 @@ -/datum/extension/interactive/multitool/store/interact(var/obj/item/device/multitool/M, var/mob/user) - if(CanUseTopic(user) != STATUS_INTERACTIVE) - return - - if(M.get_buffer() == holder) - M.set_buffer(null) - to_chat(user, "You purge the connection data of \the [holder] from \the [M].") - else - M.set_buffer(holder) - to_chat(user, "You load connection data from \the [holder] to \the [M].") diff --git a/code/datums/extensions/on_click/on_alt_click.dm b/code/datums/extensions/on_click/on_alt_click.dm deleted file mode 100644 index 62bd2c6ac252b..0000000000000 --- a/code/datums/extensions/on_click/on_alt_click.dm +++ /dev/null @@ -1,49 +0,0 @@ -/datum/extension/on_click/alt/ghost_admin_killer - expected_type = /mob/living - var/mob/living/living_holder - var/death_proc - -/datum/extension/on_click/alt/ghost_admin_killer/New(var/host, var/death_proc) - ..() - living_holder = host - src.death_proc = death_proc || /mob/proc/death - -/datum/extension/on_click/alt/ghost_admin_killer/Destroy() - living_holder = null - . = ..() - -/datum/extension/on_click/alt/ghost_admin_killer/on_click(var/mob/user) - if(!valid_preconditions(user)) - return FALSE - - var/key_name = key_name(living_holder) - if(alert(user, "Do you wish to kill [key_name]?", "Kill [living_holder]?", "No", "Yes") != "Yes") - return FALSE - if(!valid_preconditions(user)) - to_chat(user, SPAN_NOTICE("You were unable to kill [key_name]")) - return FALSE - - call(living_holder, death_proc)() - log_and_message_admins("killed [key_name]") - - return TRUE - -/datum/extension/on_click/alt/ghost_admin_killer/proc/valid_preconditions(var/mob/observer/ghost/user) - if(QDELETED(living_holder)) // Sanity check - return FALSE - if(!istype(user)) // Only ghosts may attempt to alt-kill mobs - return FALSE - if(!check_rights(R_INVESTIGATE, 0, user)) // And only if they're investigators - Power creep - return FALSE - if(!living_holder.client) // And only if the target mob is currently possessed - to_chat(user, SPAN_NOTICE("\The [living_holder] is not currently possessed.")) - return FALSE - if(living_holder.stat == DEAD) // No point in killing the already dead - to_chat(user, SPAN_NOTICE("\The [living_holder] is already dead.")) - return FALSE - return TRUE - -/mob/living/Initialize() - . = ..() - if(possession_candidate) - set_extension(src, /datum/extension/on_click/alt/ghost_admin_killer) diff --git a/code/datums/extensions/on_click/on_click.dm b/code/datums/extensions/on_click/on_click.dm deleted file mode 100644 index 2e8fab6f386a1..0000000000000 --- a/code/datums/extensions/on_click/on_click.dm +++ /dev/null @@ -1,18 +0,0 @@ -/datum/extension/on_click - base_type = /datum/extension/on_click - expected_type = /atom - var/atom/atom_holder - -/datum/extension/on_click/alt - base_type = /datum/extension/on_click/alt - -/datum/extension/on_click/New() - ..() - atom_holder = holder - -/datum/extension/on_click/Destroy() - atom_holder = null - return ..() - -/datum/extension/on_click/proc/on_click(var/mob/user) - return FALSE \ No newline at end of file diff --git a/code/datums/extensions/on_click/turf_hand.dm b/code/datums/extensions/on_click/turf_hand.dm deleted file mode 100644 index b3ab8a381044e..0000000000000 --- a/code/datums/extensions/on_click/turf_hand.dm +++ /dev/null @@ -1,20 +0,0 @@ -/* - This extension is used on airlocks and cult runes. - When a mob [attack_hand]s a turf, it will look for objects in itself containing this component. - If such is found, it will call attack_hand on that atom - - When multiple of these components are in the tile, the one with the highest priority wins it. -*/ -/datum/extension/turf_hand - base_type = /datum/extension/turf_hand - var/priority = 1 - expected_type = /atom - -/datum/extension/turf_hand/New(var/holder, var/priority = 1) - ..() - src.priority = priority - - -/datum/extension/turf_hand/proc/OnHandInterception(var/mob/user) - var/atom/A = holder - return A.attack_hand(user) \ No newline at end of file diff --git a/code/datums/extensions/penetration.dm b/code/datums/extensions/penetration.dm deleted file mode 100644 index 47b2dc710c171..0000000000000 --- a/code/datums/extensions/penetration.dm +++ /dev/null @@ -1,29 +0,0 @@ -/datum/extension/penetration - base_type = /datum/extension/penetration - expected_type = /atom - -// Returns a value between 0 and 100 -/datum/extension/penetration/proc/PenetrationProbability(var/base_probability, var/damage, var/damage_type) - return 100 - - -/datum/extension/penetration/simple - var/static_probability - -/datum/extension/penetration/simple/New(host, static_probability) - ..() - src.static_probability = static_probability - -/datum/extension/penetration/simple/PenetrationProbability() - return static_probability - - -/datum/extension/penetration/proc_call - var/proc_call - -/datum/extension/penetration/proc_call/New(host, proc_call) - ..() - src.proc_call = proc_call - -/datum/extension/penetration/proc_call/PenetrationProbability(var/base_probability, var/damage, var/damage_type) - return call(holder, proc_call)(base_probability, damage, damage_type) \ No newline at end of file diff --git a/code/datums/extensions/scent/_scent.dm b/code/datums/extensions/scent/_scent.dm deleted file mode 100644 index f1232e700ec44..0000000000000 --- a/code/datums/extensions/scent/_scent.dm +++ /dev/null @@ -1,150 +0,0 @@ -#define SCENT_DESC_ODOR "odour" -#define SCENT_DESC_SMELL "smell" -#define SCENT_DESC_FRAGRANCE "fragrance" -#define SCENT_DESC_HAZE "haze" -#define SCENT_DESC_PLUME "plume" - -/***** -Scent intensity -*****/ - -/decl/scent_intensity - var/cooldown = 5 MINUTES - var/intensity = 1 - -/decl/scent_intensity/proc/can_smell(mob/living/carbon/human/user) - return TRUE - -/decl/scent_intensity/proc/PrintMessage(mob/living/carbon/human/user, var/descriptor, scent) - if(!can_smell(user)) - return - if(!user.isSynthetic()) - to_chat(user, SPAN_SUBTLE("The subtle [descriptor] of [scent] tickles your nose...")) - else - to_chat(user, SPAN_NOTICE("Your sensors detect trace amounts of [scent] in the air.")) - - -/decl/scent_intensity/normal - cooldown = 4 MINUTES - intensity = 2 - -/decl/scent_intensity/normal/PrintMessage(mob/living/carbon/human/user, var/descriptor, scent) - if(!can_smell(user)) - return - if(!user.isSynthetic()) - to_chat(user, SPAN_NOTICE("The [descriptor] of [scent] fills the air.")) - else - to_chat(user, SPAN_NOTICE("Your sensors pick up the presence of [scent] in the air.")) - -/decl/scent_intensity/strong - cooldown = 3 MINUTES - intensity = 3 - -/decl/scent_intensity/strong/PrintMessage(mob/living/carbon/human/user, var/descriptor, scent) - if(!can_smell(user)) - return - if(!user.isSynthetic()) - to_chat(user, SPAN_WARNING("The unmistakable [descriptor] of [scent] bombards your nostrils.")) - else - to_chat(user, SPAN_WARNING("Your sensors pick up an intense concentration of [scent].")) - -/decl/scent_intensity/overpowering - cooldown = 1 MINUTES - intensity = 4 - -/decl/scent_intensity/overpowering/PrintMessage(mob/living/carbon/human/user, var/descriptor, scent) - if(!can_smell(user)) - return - if(!user.isSynthetic()) - to_chat(user, SPAN_WARNING("The overwhelming [descriptor] of [scent] assaults your senses. You stifle a gag.")) - else - to_chat(user, SPAN_WARNING("ALERT! Your sensors pick up an overwhelming concentration of [scent].")) -/***** - Scent extensions - Usage: - To add: - set_extension(atom, /datum/extension/scent/PATH/TO/SPECIFIC/SCENT) - This will set up the extension and will make it begin to emit_scent. - To remove: - remove_extension(atom, /datum/extension/scent) -*****/ - -/datum/extension/scent - base_type = /datum/extension/scent - expected_type = /atom - flags = EXTENSION_FLAG_IMMEDIATE - - var/scent = "something" - var/decl/scent_intensity/intensity = /decl/scent_intensity - var/descriptor = SCENT_DESC_SMELL //unambiguous descriptor of smell; food is generally good, sewage is generally bad. how 'nice' the scent is - var/range = 1 //range in tiles - -/datum/extension/scent/New() - ..() - if(ispath(intensity)) - intensity = decls_repository.get_decl(intensity) - START_PROCESSING(SSprocessing, src) - -/datum/extension/scent/Destroy() - STOP_PROCESSING(SSprocessing, src) - . = ..() - -/datum/extension/scent/Process() - if(!holder) - crash_with("Scent extension with scent '[scent]', intensity '[intensity]', descriptor '[descriptor]' and range of '[range]' attempted to emit_scent() without a holder.") - qdel(src) - return PROCESS_KILL - emit_scent() - -/datum/extension/scent/proc/emit_scent() - for(var/mob/living/carbon/human/H in all_hearers(holder, range)) - var/turf/T = get_turf(H.loc) - if(!T) - continue - if(H.stat != CONSCIOUS || H.failed_last_breath || H.wear_mask || H.head && H.head.permeability_coefficient < 1 || !T.return_air()) - continue - if(H.last_smelt < world.time) - intensity.PrintMessage(H, descriptor, scent) - H.last_smelt = world.time + intensity.cooldown - -/***** -Custom subtype - set_extension(atom, /datum/extension/scent/custom, scent = "scent", intensity = SCENT_INTENSITY_, ... etc) -This will let you set an extension without needing to define it beforehand. Note that all vars are required if generating. -*****/ -/datum/extension/scent/custom/New(var/datum/holder, var/provided_scent, var/provided_intensity, var/provided_descriptor, var/provided_range) - ..() - if(provided_scent && provided_intensity && provided_descriptor && provided_range) - scent = provided_scent - if(ispath(provided_intensity)) - intensity = decls_repository.get_decl(provided_intensity) - descriptor = provided_descriptor - range = provided_range - else - CRASH("Attempted to generate a scent extension on [holder], but at least one of the required vars was not provided.") - -/***** -Reagents have the following vars, which coorelate to the vars on the standard scent extension: - scent, - scent_intensity, - scent_descriptor, - scent_range -To add a scent extension to an atom using a reagent's info, where R. is the reagent, use set_scent_by_reagents(). -*****/ - -/proc/set_scent_by_reagents(var/atom/smelly_atom) - var/datum/reagent/smelliest - var/datum/reagent/scent_intensity - if(!smelly_atom.reagents || !smelly_atom.reagents.total_volume) - return - for(var/datum/reagent/reagent_to_compare in smelly_atom.reagents.reagent_list) - var/datum/reagent/R = reagent_to_compare - if(!R.scent) - continue - var/decl/scent_intensity/SI = decls_repository.get_decl(R.scent_intensity) - var/r_scent_intensity = R.volume * SI.intensity - if(r_scent_intensity > scent_intensity) - smelliest = R - scent_intensity = r_scent_intensity - if(smelliest) - set_extension(smelly_atom, /datum/extension/scent/custom, smelliest.scent, smelliest.scent_intensity, smelliest.scent_descriptor, smelliest.scent_range) diff --git a/code/datums/extensions/scent/scent_candle.dm b/code/datums/extensions/scent/scent_candle.dm deleted file mode 100644 index 19791e79a4aa5..0000000000000 --- a/code/datums/extensions/scent/scent_candle.dm +++ /dev/null @@ -1,37 +0,0 @@ -/datum/extension/scent/candle - intensity = /decl/scent_intensity/normal - descriptor = SCENT_DESC_FRAGRANCE - range = 4 - -/datum/extension/scent/candle/rose - scent = "roses" - -/datum/extension/scent/candle/citrus - scent = "citrus fruit" - -/datum/extension/scent/candle/sage - scent = "white sage" - -/datum/extension/scent/candle/frankincense - scent = "frankincense" - -/datum/extension/scent/candle/mint - scent = "peppermint" - -/datum/extension/scent/candle/champa - scent = "nag champa" - -/datum/extension/scent/candle/lavender - scent = "lavender" - -/datum/extension/scent/candle/cinnamon - scent = "cinnamon" - -/datum/extension/scent/candle/vanilla - scent = "vanilla" - -/datum/extension/scent/candle/seabreeze - scent = "a sea breeze" - -/datum/extension/scent/candle/sandalwood - scent = "sandalwood" \ No newline at end of file diff --git a/code/datums/extensions/scent/scent_misc.dm b/code/datums/extensions/scent/scent_misc.dm deleted file mode 100644 index 5e79b5552e891..0000000000000 --- a/code/datums/extensions/scent/scent_misc.dm +++ /dev/null @@ -1,5 +0,0 @@ -/datum/extension/scent/ashtray - scent = "an ashtray" - intensity = /decl/scent_intensity - descriptor = SCENT_DESC_ODOR - range = 2 \ No newline at end of file diff --git a/code/datums/footsteps.dm b/code/datums/footsteps.dm deleted file mode 100644 index 771bf0aadc220..0000000000000 --- a/code/datums/footsteps.dm +++ /dev/null @@ -1,88 +0,0 @@ -/decl/footsteps - var/list/footstep_sounds - -/decl/footsteps/catwalk - footstep_sounds = list( - 'sound/effects/footstep/catwalk1.ogg', - 'sound/effects/footstep/catwalk2.ogg', - 'sound/effects/footstep/catwalk3.ogg', - 'sound/effects/footstep/catwalk4.ogg', - 'sound/effects/footstep/catwalk5.ogg') - -/decl/footsteps/wood - footstep_sounds = list( - 'sound/effects/footstep/wood1.ogg', - 'sound/effects/footstep/wood2.ogg', - 'sound/effects/footstep/wood3.ogg', - 'sound/effects/footstep/wood4.ogg', - 'sound/effects/footstep/wood5.ogg') - -/decl/footsteps/tiles - footstep_sounds = list( - 'sound/effects/footstep/floor1.ogg', - 'sound/effects/footstep/floor2.ogg', - 'sound/effects/footstep/floor3.ogg', - 'sound/effects/footstep/floor4.ogg', - 'sound/effects/footstep/floor5.ogg') - -/decl/footsteps/plating - footstep_sounds = list( - 'sound/effects/footstep/plating1.ogg', - 'sound/effects/footstep/plating2.ogg', - 'sound/effects/footstep/plating3.ogg', - 'sound/effects/footstep/plating4.ogg', - 'sound/effects/footstep/plating5.ogg') - -/decl/footsteps/carpet - footstep_sounds = list( - 'sound/effects/footstep/carpet1.ogg', - 'sound/effects/footstep/carpet2.ogg', - 'sound/effects/footstep/carpet3.ogg', - 'sound/effects/footstep/carpet4.ogg', - 'sound/effects/footstep/carpet5.ogg') - -/decl/footsteps/asteroid - footstep_sounds = list( - 'sound/effects/footstep/asteroid1.ogg', - 'sound/effects/footstep/asteroid2.ogg', - 'sound/effects/footstep/asteroid3.ogg', - 'sound/effects/footstep/asteroid4.ogg', - 'sound/effects/footstep/asteroid5.ogg') - -/decl/footsteps/grass - footstep_sounds = list( - 'sound/effects/footstep/grass1.ogg', - 'sound/effects/footstep/grass2.ogg', - 'sound/effects/footstep/grass3.ogg', - 'sound/effects/footstep/grass4.ogg') - -/decl/footsteps/water - footstep_sounds = list( - 'sound/effects/footstep/water1.ogg', - 'sound/effects/footstep/water2.ogg', - 'sound/effects/footstep/water3.ogg', - 'sound/effects/footstep/water4.ogg') - -/decl/footsteps/lava - footstep_sounds = list( - 'sound/effects/footstep/lava1.ogg', - 'sound/effects/footstep/lava2.ogg', - 'sound/effects/footstep/lava3.ogg') - -/decl/footsteps/blank - footstep_sounds = list('sound/effects/footstep/blank.ogg') - -/decl/footsteps/snow - footstep_sounds = list( - 'sound/effects/footstep/snow1.ogg', - 'sound/effects/footstep/snow2.ogg', - 'sound/effects/footstep/snow3.ogg', - 'sound/effects/footstep/snow4.ogg', - 'sound/effects/footstep/snow5.ogg') - -/decl/footsteps/sand - footstep_sounds = list( - 'sound/effects/footstep/sand1.ogg', - 'sound/effects/footstep/sand2.ogg', - 'sound/effects/footstep/sand3.ogg', - 'sound/effects/footstep/sand4.ogg') diff --git a/code/datums/graph/graph.dm b/code/datums/graph/graph.dm deleted file mode 100644 index 6bfa0c76ca16a..0000000000000 --- a/code/datums/graph/graph.dm +++ /dev/null @@ -1,176 +0,0 @@ -/datum/graph - var/list/nodes - var/list/edges - - var/list/pending_connections - var/list/pending_disconnections - - var/processing - -/datum/graph/New(var/list/nodes, var/list/edges, var/previous_owner = null) - if(!length(nodes)) - CRASH("Invalid list of nodes: [log_info_line(nodes)]") - if(length(nodes) > 1 && !istype(edges)) - CRASH("Invalid list of edges: [log_info_line(edges)]") - for(var/n in nodes) - var/datum/node/node = n - if(node.graph && node.graph != previous_owner) - CRASH("Attempted to add a node already belonging to a network") - - // TODO: Check that all edges refer to nodes in the graph and that the graph is coherent - - ..() - src.nodes = nodes - src.edges = edges || list() - - for(var/n in nodes) - var/datum/node/node = n - node.graph = src - -/datum/graph/Destroy() - if(length(nodes) || LAZYLEN(pending_connections) || LAZYLEN(pending_disconnections)) - crash_with("Prevented attempt to delete a network that still has nodes: [length(nodes)] - [LAZYLEN(pending_connections)] - [LAZYLEN(pending_disconnections)]") - return QDEL_HINT_LETMELIVE - . = ..() - -/datum/graph/proc/Connect(var/datum/node/node, var/list/neighbours, var/queue = TRUE) - if(!istype(neighbours)) - neighbours = list(neighbours) - if(!length(neighbours)) - CRASH("Attempted to connect a node without declaring neighbours") - if(length(nodes & neighbours) != length(neighbours)) - CRASH("Attempted to connect a node to neighbours not in the graph") - if(LAZYISIN(pending_connections, node)) - CRASH("Attempted to connect a node already pending to be connected") - if(LAZYISIN(pending_disconnections, node)) - CRASH("Attempted to connect a node already pending to be disconnected") - - LAZYSET(pending_connections, node, neighbours) - if(queue) - SSgraphs_update.Queue(src) - return TRUE - -/datum/graph/proc/Disconnect(var/datum/node/node, var/list/neighbours_to_disconnect, var/queue = TRUE) - if(neighbours_to_disconnect && !istype(neighbours_to_disconnect)) - neighbours_to_disconnect = list(neighbours_to_disconnect) - if(length(neighbours_to_disconnect) && length(nodes & neighbours_to_disconnect) != length(neighbours_to_disconnect)) - CRASH("Attempted keep a node connected to neighbours not in the graph: [json_encode(nodes)], [json_encode(neighbours_to_disconnect)]") - if(LAZYISIN(pending_connections, node)) - CRASH("Attempted to disconnect a node already pending to be connected") - if(LAZYISIN(pending_disconnections, node)) - CRASH("Attempted to disconnect a node already pending to be disconnected") - if(!(node in nodes)) - CRASH("Attempted disconnect a node that is not in the graph") - - LAZYSET(pending_disconnections, node, neighbours_to_disconnect) - if(queue) - SSgraphs_update.Queue(src) - return TRUE - -/datum/graph/proc/Merge(var/datum/graph/other) - if(!other) - return - - OnMerge(other) - for(var/n in other.nodes) - var/datum/node/node = n - node.graph = src - nodes += other.nodes - edges += other.edges - - for(var/other_node_to_be_connected in other.pending_connections) - var/other_neighbours = other.pending_connections[other_node_to_be_connected] - Connect(other_node_to_be_connected, other_neighbours, FALSE) - for(var/other_node_to_be_disconnected in other.pending_disconnections) - var/other_formed_neighbours = other.pending_disconnections[other_node_to_be_disconnected] - Disconnect(other_node_to_be_disconnected, other_formed_neighbours, FALSE) - - other.nodes.Cut() - other.edges.Cut() - LAZYCLEARLIST(other.pending_connections) - LAZYCLEARLIST(other.pending_disconnections) - qdel(other) - -// Subtypes that need to handle merging in specific ways should override this proc -/datum/graph/proc/OnMerge(var/datum/graph/other) - return - -// Here subgraphs is a list of a list of nodes -/datum/graph/proc/Split(var/list/subgraphs) - var/list/new_subgraphs = list() - for(var/subgraph in subgraphs) - if(length(subgraph) == 1) - var/datum/node/N = subgraph[1] // Doing QDELETED(subgraph[1]) will result in multiple list index calls - if(QDELETED(N)) - continue - new_subgraphs += new type(subgraph, edges & subgraph, src) - - OnSplit(new_subgraphs) - nodes.Cut() - edges.Cut() - qdel(src) - -// Here subgraphs is a list of a list graphs (with their own lists of nodes and edges) -// Subtypes that need to handle splitting in specific ways should override this proc -// The original graph still has the same nodes/edges as before the split but will be deleted after this proc returns -/datum/graph/proc/OnSplit(var/list/datum/graph/subgraphs) - return - -/datum/graph/proc/ProcessPendingConnections() - while(LAZYLEN(pending_connections)) - var/datum/node/N = pending_connections[pending_connections.len] - var/list/new_neighbours = pending_connections[N] - pending_connections.len-- - - if(N.graph != src) - Merge(N.graph) - nodes |= N - - if(N in edges) - edges[N] |= new_neighbours - else - edges[N] = new_neighbours - - for(var/new_neighbour in new_neighbours) - var/neighbour_edges = edges[new_neighbour] - if(!neighbour_edges) - neighbour_edges = list() - edges[new_neighbour] = neighbour_edges - neighbour_edges |= N - - if(!LAZYLEN(pending_disconnections)) - return - - for(var/pending_node_disconnect in pending_disconnections) - var/pending_edge_disconnects = pending_disconnections[pending_node_disconnect] || edges[pending_node_disconnect] - for(var/connected_node in pending_edge_disconnects) - edges[connected_node] -= pending_node_disconnect - if(!length(edges[connected_node])) - edges -= connected_node - - edges[pending_node_disconnect] -= pending_edge_disconnects - if(!length(edges[pending_node_disconnect])) - edges -= pending_node_disconnect - LAZYCLEARLIST(pending_disconnections) - - var/list/subgraphs = list() - var/list/all_nodes = nodes.Copy() - while(length(all_nodes)) - var/root_node = all_nodes[all_nodes.len] - all_nodes.len-- - var/checked_nodes = list() - var/list/nodes_to_traverse = list(root_node) - while(length(nodes_to_traverse)) - var/node_to_check = nodes_to_traverse[nodes_to_traverse.len] - nodes_to_traverse.len-- - checked_nodes += node_to_check - nodes_to_traverse |= ((edges[node_to_check] || list()) - checked_nodes) - all_nodes -= checked_nodes - subgraphs[++subgraphs.len] = checked_nodes - - if(length(subgraphs) == 1) - return - Split(subgraphs) - -/datum/graph/get_log_info_line() - return "[..()] (nodes: [log_info_line(nodes)]) (edges: [log_info_line(edges)])" diff --git a/code/datums/graph/node.dm b/code/datums/graph/node.dm deleted file mode 100644 index ae173ed86a277..0000000000000 --- a/code/datums/graph/node.dm +++ /dev/null @@ -1,19 +0,0 @@ -/datum/node - var/datum/graph/graph - -/datum/node/Destroy() - graph.Disconnect(src) - return ..() - -/datum/node/physical - var/atom/holder - -/datum/node/physical/New(var/atom/holder) - ..() - if(!istype(holder)) - CRASH("Invalid holder: [log_info_line(holder)]"); - src.holder = holder - -/datum/node/physical/Destroy() - holder = null - . = ..() diff --git a/code/datums/helper_datums/dist_check.dm b/code/datums/helper_datums/dist_check.dm deleted file mode 100644 index 24ab9eb8bcab7..0000000000000 --- a/code/datums/helper_datums/dist_check.dm +++ /dev/null @@ -1,24 +0,0 @@ -/decl/dist_check/proc/within_dist(var/atom/a, var/atom/b) - return FALSE - -/decl/dist_check/adjacent/within_dist(var/atom/a, var/atom/b) - return a.Adjacent(b) - -/decl/dist_check/in_view/within_dist(var/atom/a, var/atom/b) - return (b in view(world.view, a)) - -/decl/dist_check/in_range/within_dist(var/atom/a, var/atom/b) - return (b in range(world.view, a)) - -/decl/dist_check/same_z_level/within_dist(var/atom/a, var/atom/b) - var/turf/turf_a = get_turf(a) - var/turf/turf_b = get_turf(b) - return turf_a && turf_b && turf_a.z == turf_b.z - -/decl/dist_check/connected_z_level/within_dist(var/atom/a, var/atom/b) - var/turf/turf_a = get_turf(a) - var/turf/turf_b = get_turf(b) - return turf_a && turf_b && AreConnectedZLevels(turf_a.z, turf_b.z) - -/decl/dist_check/omni/within_dist() - return TRUE diff --git a/code/datums/helper_datums/events.dm b/code/datums/helper_datums/events.dm deleted file mode 100644 index d336b32b95932..0000000000000 --- a/code/datums/helper_datums/events.dm +++ /dev/null @@ -1,57 +0,0 @@ -/datum/events - var/list/events = list() - - -/datum/events/proc/addEventType(event_type as text) - if (!(event_type in events) || !islist(events[event_type])) - events[event_type] = list() - return TRUE - - -// Arguments: event_type as text, proc_holder as datum, proc_name as text -// Returns: New event, null on error. -/datum/events/proc/addEvent(event_type as text, proc_holder, proc_name as text) - if (!event_type || !proc_holder || !proc_name) - return - addEventType(event_type) - var/list/event = events[event_type] - var/datum/event/E = new /datum/event(proc_holder,proc_name) - event += E - return E - - -// Arguments: event_type as text, any number of additional arguments to pass to event handler -// Returns: null -/datum/events/proc/fireEvent() - var/list/event = LAZYACCESS(events, args[1]) - if (istype(event)) - spawn(-1) - for (var/datum/event/E in event) - if (!E.Fire(arglist(args.Copy(2)))) - clearEvent(args[1],E) - - -// Arguments: event_type as text, E as /datum/event -// Returns: 1 if event cleared, null on error -/datum/events/proc/clearEvent(event_type, datum/event/E) - if (E && event_type) - var/list/event = LAZYACCESS(events, event_type) - if (event) - event -= E - return TRUE - - -/datum/event - var/listener - var/proc_name - - -/datum/event/New(tlistener, tprocname) - listener = tlistener - proc_name = tprocname - - -/datum/event/proc/Fire() - if (listener) - call(listener,proc_name)(arglist(args)) - return TRUE diff --git a/code/datums/helper_datums/getrev.dm b/code/datums/helper_datums/getrev.dm deleted file mode 100644 index af5cc60235cb3..0000000000000 --- a/code/datums/helper_datums/getrev.dm +++ /dev/null @@ -1,46 +0,0 @@ -var/global/datum/getrev/revdata = new() - -/datum/getrev - var/branch - var/revision - var/date - var/showinfo - -/datum/getrev/New() - var/list/head_branch = file2list(".git/HEAD", "\n") - if(head_branch.len) - branch = copytext_char(head_branch[1], 17) - - var/list/head_log = file2list(".git/logs/HEAD", "\n") - for(var/line=head_log.len, line>=1, line--) - if(head_log[line]) - var/list/last_entry = splittext(head_log[line], " ") - if(last_entry.len < 2) continue - revision = last_entry[2] - // Get date/time - if(last_entry.len >= 5) - var/unix_time = text2num(last_entry[5]) - if(unix_time) - date = unix2date(unix_time) - break - - to_world_log("Running revision:") - to_world_log(branch) - to_world_log(date) - to_world_log(revision) - -/client/verb/showrevinfo() - set category = "OOC" - set name = "Show Server Revision" - set desc = "Check the current server code revision" - - to_chat(src, "Client Version: [byond_version]") - if(revdata.revision) - var/server_revision = revdata.revision - if(config.source_url) - server_revision = "[server_revision]" - to_chat(src, "Server Revision: [server_revision] - [revdata.branch] - [revdata.date]") - else - to_chat(src, "Server Revision: Revision Unknown") - to_chat(src, "Game ID: [game_id]") - to_chat(src, "Current map: [GLOB.using_map.full_name]") diff --git a/code/datums/helper_datums/teleport.dm b/code/datums/helper_datums/teleport.dm deleted file mode 100644 index 7bbd688bb347e..0000000000000 --- a/code/datums/helper_datums/teleport.dm +++ /dev/null @@ -1,55 +0,0 @@ -/decl/teleport - var/static/list/teleport_blacklist = list(/obj/item/disk/nuclear, /obj/item/storage/backpack/holding, /obj/effect/sparks) //Items that cannot be teleported, or be in the contents of someone who is teleporting. - -/decl/teleport/proc/teleport(var/atom/target, var/atom/destination, var/precision = 0) - if(!can_teleport(target,destination)) - target.visible_message("\The [target] bounces off the teleporter!") - return - - teleport_target(target, destination, precision) - -/decl/teleport/proc/teleport_target(var/atom/movable/target, var/atom/destination, var/precision) - var/list/possible_turfs = circlerangeturfs(destination, precision) - destination = DEFAULTPICK(possible_turfs, null) - if (!destination) - return - - target.forceMove(destination) - if(isliving(target)) - var/mob/living/L = target - if(L.buckled) - var/atom/movable/buckled = L.buckled - buckled.forceMove(destination) - - -/decl/teleport/proc/can_teleport(var/atom/movable/target, var/atom/destination) - if(!destination || !target || !target.loc || destination.z > max_default_z_level()) - return 0 - - if(is_type_in_list(target, teleport_blacklist)) - return 0 - - for(var/type in teleport_blacklist) - if(length(target.search_contents_for(type))) - return 0 - return 1 - -/decl/teleport/sparks - var/datum/effect/effect/system/spark_spread/spark = new - -/decl/teleport/sparks/proc/do_spark(var/atom/target) - if(!target.simulated) - return - var/turf/T = get_turf(target) - spark.set_up(5,1,target) - spark.attach(T) - spark.start() - -/decl/teleport/sparks/teleport_target(var/atom/target, var/atom/destination, var/precision) - do_spark(target) - ..() - do_spark(target) - -/proc/do_teleport(var/atom/movable/target, var/atom/destination, var/precision = 0, var/type = /decl/teleport/sparks) - var/decl/teleport/tele = decls_repository.get_decl(type) - tele.teleport(target, destination, precision) diff --git a/code/datums/hierarchy.dm b/code/datums/hierarchy.dm deleted file mode 100644 index 01f57e7770f5a..0000000000000 --- a/code/datums/hierarchy.dm +++ /dev/null @@ -1,31 +0,0 @@ -/decl/hierarchy - var/name = "Hierarchy" - var/hierarchy_type - var/decl/hierarchy/parent - var/list/decl/hierarchy/children - -/decl/hierarchy/Initialize() - children = list() - for(var/subtype in subtypesof(type)) - var/decl/hierarchy/child = decls_repository.get_decl(subtype) // Might be a grandchild, which has already been handled. - if(child.parent_type == type) - dd_insertObjectList(children, child) - child.parent = src - return ..() - -/decl/hierarchy/proc/is_category() - return hierarchy_type == type || children.len - -/decl/hierarchy/proc/is_hidden_category() - return hierarchy_type == type - -/decl/hierarchy/proc/get_descendents() - if(!children) - return - . = children.Copy() - for(var/decl/hierarchy/child in children) - if(child.children) - . += child.get_descendents() - -/decl/hierarchy/dd_SortValue() - return name diff --git a/code/datums/item_modifiers/_defines.dm b/code/datums/item_modifiers/_defines.dm deleted file mode 100644 index 5bad20dc4f85b..0000000000000 --- a/code/datums/item_modifiers/_defines.dm +++ /dev/null @@ -1,4 +0,0 @@ -#define SETUP_NAME "name" -#define SETUP_ICON_STATE "icon_state" -#define SETUP_ITEM_STATE "item_state" -#define SETUP_ITEM_STATE_SLOTS "item_state_slots" diff --git a/code/datums/item_modifiers/item_modifier.dm b/code/datums/item_modifiers/item_modifier.dm deleted file mode 100644 index 1c21a4f40fa71..0000000000000 --- a/code/datums/item_modifiers/item_modifier.dm +++ /dev/null @@ -1,28 +0,0 @@ -/decl/item_modifier - var/name - var/list/type_setups - -/decl/item_modifier/proc/RefitItem(var/obj/item/I) - if(!istype(I)) - return FALSE - - var/item_type = get_ispath_key(type_setups, I.type) - if(!item_type) - return FALSE - - var/type_setup = type_setups[item_type] - if(!type_setup) - return FALSE - - I.SetName(type_setup[SETUP_NAME]) - I.icon_state = type_setup[SETUP_ICON_STATE] - - var/item_state = type_setup[SETUP_ITEM_STATE] - if(item_state) - I.item_state = item_state - - var/item_state_slots = type_setup[SETUP_ITEM_STATE_SLOTS] - if(item_state_slots) - I.item_state_slots = item_state_slots - - return TRUE diff --git a/code/datums/item_modifiers/space_suits.dm b/code/datums/item_modifiers/space_suits.dm deleted file mode 100644 index 2874e49555dcb..0000000000000 --- a/code/datums/item_modifiers/space_suits.dm +++ /dev/null @@ -1,263 +0,0 @@ -/decl/item_modifier/space_suit/engineering - name = "Engineering" - type_setups = list( - /obj/item/clothing/head/helmet/space = list( - SETUP_NAME = "engineering voidsuit helmet", - SETUP_ICON_STATE = "rig0-engineering", - SETUP_ITEM_STATE = "eng_helm" - ), - /obj/item/clothing/suit/space/void = list( - SETUP_NAME = "engineering voidsuit", - SETUP_ICON_STATE = "rig-engineering", - SETUP_ITEM_STATE_SLOTS = list( - slot_l_hand_str = "eng_voidsuit", - slot_r_hand_str = "eng_voidsuit" - ) - ) - ) - -/decl/item_modifier/space_suit/engineering/alt - name = "Engineering, Alt" - -/decl/item_modifier/space_suit/engineering/alt/Initialize() - . = ..() - var/helmet_setup = type_setups[/obj/item/clothing/head/helmet/space] - helmet_setup[SETUP_ICON_STATE] = "rig0-engineeringalt" - helmet_setup[SETUP_ITEM_STATE] = "engalt_helm" - - var/suit_setup = type_setups[/obj/item/clothing/suit/space/void] - suit_setup[SETUP_ICON_STATE] = "rig-engineeringalt" - -/decl/item_modifier/space_suit/mining - name = "Mining" - type_setups = list( - /obj/item/clothing/head/helmet/space = list( - SETUP_NAME = "mining voidsuit helmet", - SETUP_ICON_STATE = "rig0-mining", - SETUP_ITEM_STATE = "mining_helm" - ), - /obj/item/clothing/suit/space/void = list( - SETUP_NAME = "mining voidsuit", - SETUP_ICON_STATE = "rig-mining", - SETUP_ITEM_STATE_SLOTS = list( - slot_l_hand_str = "mining_voidsuit", - slot_r_hand_str = "mining_voidsuit" - ) - ) - ) -/decl/item_modifier/space_suit/salvage - name = "Salvage" - type_setups = list( - /obj/item/clothing/head/helmet/space = list( - SETUP_NAME = "salvage voidsuit helmet", - SETUP_ICON_STATE = "rig0-salvage", - SETUP_ITEM_STATE = "salvage_helm" - ), - /obj/item/clothing/suit/space/void = list( - SETUP_NAME = "salvage voidsuit", - SETUP_ICON_STATE = "rig-salvage" - ) - ) - - - -/decl/item_modifier/space_suit/science - name = "Science" - type_setups = list( - /obj/item/clothing/head/helmet/space = list( - SETUP_NAME = "excavation voidsuit helmet", - SETUP_ICON_STATE = "rig0-excavation", - SETUP_ITEM_STATE = "excavation-helm" - ), - /obj/item/clothing/suit/space/void = list( - SETUP_NAME = "excavation voidsuit", - SETUP_ICON_STATE = "rig-excavation", - SETUP_ITEM_STATE_SLOTS = list( - slot_l_hand_str = "excavation_voidsuit", - slot_r_hand_str = "excavation_voidsuit" - ) - ) - ) - -/decl/item_modifier/space_suit/medical - name = "Medical" - type_setups = list( - /obj/item/clothing/head/helmet/space = list( - SETUP_NAME = "medical voidsuit helmet", - SETUP_ICON_STATE = "rig0-medical", - SETUP_ITEM_STATE = "medical_helm" - ), - /obj/item/clothing/suit/space/void = list( - SETUP_NAME = "medical voidsuit", - SETUP_ICON_STATE = "rig-medical", - SETUP_ITEM_STATE_SLOTS = list( - slot_l_hand_str = "medical_voidsuit", - slot_r_hand_str = "medical_voidsuit" - ) - ) - ) - -/decl/item_modifier/space_suit/medical/alt - name = "Medical, Alt" - -/decl/item_modifier/space_suit/medical/alt/Initialize() - . = ..() - var/helmet_setup = type_setups[/obj/item/clothing/head/helmet/space] - helmet_setup[SETUP_ICON_STATE] = "rig0-medicalalt" - helmet_setup[SETUP_ITEM_STATE] = "medicalalt_helm" - - var/suit_setup = type_setups[/obj/item/clothing/suit/space/void] - suit_setup[SETUP_ICON_STATE] = "rig-medicalalt" - -/decl/item_modifier/space_suit/security - name = "Security" - type_setups = list( - /obj/item/clothing/head/helmet/space = list( - SETUP_NAME = "security voidsuit helmet", - SETUP_ICON_STATE = "rig0-sec", - SETUP_ITEM_STATE = "sec_helm" - ), - /obj/item/clothing/suit/space/void = list( - SETUP_NAME = "security voidsuit", - SETUP_ICON_STATE = "rig-sec", - SETUP_ITEM_STATE_SLOTS = list( - slot_l_hand_str = "sec_voidsuit", - slot_r_hand_str = "sec_voidsuit" - ) - ) - ) - -/decl/item_modifier/space_suit/security/alt - name = "Security, Alt" - -/decl/item_modifier/space_suit/security/alt/Initialize() - . = ..() - var/helmet_setup = type_setups[/obj/item/clothing/head/helmet/space] - helmet_setup[SETUP_ICON_STATE] = "rig0-secalt" - helmet_setup[SETUP_ITEM_STATE] = "secalt_helm" - - var/suit_setup = type_setups[/obj/item/clothing/suit/space/void] - suit_setup[SETUP_ICON_STATE] = "rig-secalt" - -/decl/item_modifier/space_suit/atmos - name = "Atmos" - type_setups = list( - /obj/item/clothing/head/helmet/space = list( - SETUP_NAME = "atmospherics voidsuit helmet", - SETUP_ICON_STATE = "rig0-atmos", - SETUP_ITEM_STATE = "atmos_helm" - ), - /obj/item/clothing/suit/space/void = list( - SETUP_NAME = "atmospherics voidsuit", - SETUP_ICON_STATE = "rig-atmos", - SETUP_ITEM_STATE_SLOTS = list( - slot_l_hand_str = "atmos_voidsuit", - slot_r_hand_str = "atmos_voidsuit" - ) - ) - ) - -/decl/item_modifier/space_suit/atmos/alt - name = "Atmos, Alt" - -/decl/item_modifier/space_suit/atmos/alt/Initialize() - . = ..() - var/helmet_setup = type_setups[/obj/item/clothing/head/helmet/space] - helmet_setup[SETUP_ICON_STATE] = "rig0-atmosalt" - helmet_setup[SETUP_ITEM_STATE] = "atmosalt_helm" - - var/suit_setup = type_setups[/obj/item/clothing/suit/space/void] - suit_setup[SETUP_ICON_STATE] = "rig-atmosalt" - -/decl/item_modifier/space_suit/explorer - name = "Explorer" - type_setups = list( - /obj/item/clothing/head/helmet/space = list( - SETUP_NAME = "exploration voidsuit helmet", - SETUP_ICON_STATE = "rig0_explorer", - SETUP_ITEM_STATE = "explorer_helm" - ), - /obj/item/clothing/suit/space/void = list( - SETUP_NAME = "exploration voidsuit", - SETUP_ICON_STATE = "rig_explorer", - SETUP_ITEM_STATE_SLOTS = list( - slot_l_hand_str = "s_suit", - slot_r_hand_str = "s_suit" - ) - ) - ) - -/decl/item_modifier/space_suit/mercenary - name = "Mercenary" - type_setups = list( - /obj/item/clothing/head/helmet/space = list( - SETUP_NAME = "blood-red voidsuit helmet", - SETUP_ICON_STATE = "rig0-syndie", - SETUP_ITEM_STATE = "syndie_helm" - ), - /obj/item/clothing/suit/space/void = list( - SETUP_NAME = "blood-red voidsuit", - SETUP_ICON_STATE = "rig-syndie", - SETUP_ITEM_STATE_SLOTS = list( - slot_l_hand_str = "syndie_voidsuit", - slot_r_hand_str = "syndie_voidsuit" - ) - ) - ) - -/decl/item_modifier/space_suit/mercenary/emag - name = "^%###^%$" - -/decl/item_modifier/space_suit/pilot - name = "Pilot" - type_setups = list( - /obj/item/clothing/head/helmet/space = list( - SETUP_NAME = "pilot voidsuit helmet", - SETUP_ICON_STATE = "rig0_pilot", - SETUP_ITEM_STATE = "pilot_helm" - ), - /obj/item/clothing/suit/space/void = list( - SETUP_NAME = "pilot voidsuit", - SETUP_ICON_STATE = "rig-pilot", - SETUP_ITEM_STATE_SLOTS = list( - slot_l_hand_str = "s_suit", - slot_r_hand_str = "s_suit" - ) - ) - ) - -/decl/item_modifier/space_suit/hazard - name = "Hazard" - type_setups = list( - /obj/item/clothing/head/helmet/space = list( - SETUP_NAME = "hazardous operation voidsuit helmet", - SETUP_ICON_STATE = "rig0-haz", - SETUP_ITEM_STATE = "haz_helm" - ), - /obj/item/clothing/suit/space/void = list( - SETUP_NAME = "hazardous operation voidsuit", - SETUP_ICON_STATE = "rig-haz", - SETUP_ITEM_STATE_SLOTS = list( - slot_l_hand_str = "eng_voidsuit", - slot_r_hand_str = "eng_voidsuit" - ) - ) - ) - -/decl/item_modifier/space_suit/command - name = "Command" - type_setups = list( - /obj/item/clothing/head/helmet/space = list( - SETUP_NAME = "command voidsuit helmet", - SETUP_ICON_STATE = "rig0_command", - SETUP_ITEM_STATE = "command_helm" - ), - /obj/item/clothing/suit/space/void = list( - SETUP_NAME = "command voidsuit", - SETUP_ICON_STATE = "rig_command", - SETUP_ITEM_STATE_SLOTS = list( - slot_l_hand_str = "s_suit", - slot_r_hand_str = "s_suit" - ) - ) - ) diff --git a/code/datums/item_modifiers/~defines.dm b/code/datums/item_modifiers/~defines.dm deleted file mode 100644 index 0bde7aec73716..0000000000000 --- a/code/datums/item_modifiers/~defines.dm +++ /dev/null @@ -1,4 +0,0 @@ -#undef SETUP_NAME -#undef SETUP_ICON_STATE -#undef SETUP_ITEM_STATE -#undef SETUP_ITEM_STATE_SLOTS diff --git a/code/datums/licences/license.dm b/code/datums/licences/license.dm deleted file mode 100644 index 981f3af7822bd..0000000000000 --- a/code/datums/licences/license.dm +++ /dev/null @@ -1,37 +0,0 @@ -/decl/license - var/name - var/url - var/attribution_mandatory = TRUE - -/decl/license/cc_by_3_0 - name = "CC BY 3.0" - url = "https://creativecommons.org/licenses/by/3.0/" - -/decl/license/cc_by_4_0 - name = "CC BY 4.0" - url = "https://creativecommons.org/licenses/by/4.0/" - -/decl/license/cc_by_sa_4_0 - name = "CC BY-SA 4.0" - url = "https://creativecommons.org/licenses/by-sa/4.0/" - -/decl/license/cc_by_nc_3_0 - name = "CC BY-BC 3.0" - url = "https://creativecommons.org/licenses/by-nc/3.0/" - -/decl/license/cc_by_sa_3_0 - name = "CC BY-SA 3.0" - url = "https://creativecommons.org/licenses/by-sa/3.0/" - -/decl/license/cc_by_nc_sa_3_0 - name = "CC BY-NC-SA 3.0" - url = "https://creativecommons.org/licenses/by-nc-sa/3.0/" - -/decl/license/cc_by_nc_nd_4_0 - name = "CC BY-NC-ND 4.0" - url = "https://creativecommons.org/licenses/by-nc-nd/4.0/" - -/decl/license/grandfathered - name = "Grandfathered In" - url = "https://en.wikipedia.org/wiki/Grandfather_clause" - attribution_mandatory = FALSE diff --git a/code/datums/local_network.dm b/code/datums/local_network.dm deleted file mode 100644 index d27a6ae78b6bd..0000000000000 --- a/code/datums/local_network.dm +++ /dev/null @@ -1,77 +0,0 @@ -GLOBAL_LIST_INIT(local_networks, new) - -/datum/local_network - var/id_tag - var/list/network_entities = list() - var/const/network_size = 25 // Distance in tiles network objects can be from each other. - -/datum/local_network/New(var/_id) - id_tag = _id - GLOB.local_networks[id_tag] = src - -/datum/local_network/Destroy() - network_entities.Cut() - GLOB.local_networks -= src - . = ..() - -/datum/local_network/proc/within_radius(var/atom/checking) - for(var/entity_list in network_entities) - for(var/entity in entity_list) - if(get_dist(entity, checking) > network_size) - return FALSE - return TRUE - -/datum/local_network/proc/add_device(var/obj/machinery/device) - var/list/entities = get_devices(device.type) - - if(!entities) - entities = list() - network_entities[device.type] = entities - - entities[device] = TRUE - - return entities[device] - -/datum/local_network/proc/remove_device(var/obj/machinery/device) - var/list/entities = get_devices(device.type) - if(!entities) - return TRUE - - entities -= device - if(entities.len <= 0) - network_entities -= device.type - if(network_entities.len <= 0) - qdel(src) - return isnull(entities[device]) - -/datum/local_network/proc/is_connected(var/obj/machinery/device) - var/list/entities = get_devices(device.type) - - if(!entities) - return FALSE - return !isnull(entities[device]) - -/datum/local_network/proc/get_devices(var/device_type) - for(var/entity_type in network_entities) - if(ispath(entity_type, device_type)) - return network_entities[entity_type] - - -//Multilevel network -GLOBAL_LIST_INIT(multilevel_local_networks, new) - -/datum/local_network/multilevel/New(var/_id) - id_tag = _id - GLOB.multilevel_local_networks[id_tag] = src - -/datum/local_network/multilevel/Destroy() - network_entities.Cut() - GLOB.multilevel_local_networks -= src - . = ..() - -/datum/local_network/multilevel/within_radius(var/atom/checking) - for(var/entity_list in network_entities) - for(var/atom/entity in entity_list) - if(!(get_z(entity) in GetConnectedZlevels(get_z(checking)))) - return FALSE - return TRUE \ No newline at end of file diff --git a/code/datums/mil_ranks.dm b/code/datums/mil_ranks.dm deleted file mode 100644 index 7a7f78bc51599..0000000000000 --- a/code/datums/mil_ranks.dm +++ /dev/null @@ -1,186 +0,0 @@ -/** - * Datums for military branches and ranks - * - * Map datums can optionally specify a list of /datum/mil_branch paths. These paths - * are used to initialize the global mil_branches object, which contains a list of - * branch objects the map uses. Each branch definition specifies a list of - * /datum/mil_rank paths, which are ranks available to that branch. - * - * Which branches and ranks can be selected for spawning is specifed in GLOB.using_map - * and each branch datum definition, respectively. - */ - -GLOBAL_DATUM_INIT(mil_branches, /datum/mil_branches, new) - -/** - * Global object for handling branches - */ -/datum/mil_branches - var/list/branches // All branches that exist - var/list/spawn_branches_ // Branches that a player can choose for spawning, not including species restrictions. - var/list/spawn_branches_by_species_ // Branches that a player can choose for spawning, with species restrictions. Populated on a needed basis - -/** - * Retrieve branch object by branch name - */ -/datum/mil_branches/proc/get_branch(var/branch_name) - if(ispath(branch_name, /datum/mil_branch)) - var/datum/mil_branch/branch = branch_name - branch_name = initial(branch.name) - if(branch_name && branch_name != "None") - return branches[branch_name] - -/** - * Retrieve branch object by branch type - */ -/datum/mil_branches/proc/get_branch_by_type(var/branch_type) - for(var/name in branches) - if (istype(branches[name], branch_type)) - return branches[name] - -/** - * Retrieve a rank object from given branch by name - */ -/datum/mil_branches/proc/get_rank(var/branch_name, var/rank_name) - if(ispath(rank_name)) - var/datum/mil_rank/rank = rank_name - rank_name = initial(rank.name) - if(rank_name && rank_name != "None") - var/datum/mil_branch/branch = get_branch(branch_name) - if(branch) - return branch.ranks[rank_name] - -/** - * Return all spawn branches for the given input - */ -/datum/mil_branches/proc/spawn_branches(var/datum/species/S) - if(!S) - return spawn_branches_.Copy() - . = LAZYACCESS(spawn_branches_by_species_, S) - if(!.) - . = list() - LAZYSET(spawn_branches_by_species_, S, .) - for(var/spawn_branch in spawn_branches_) - if(!GLOB.using_map.is_species_branch_restricted(S, spawn_branches_[spawn_branch])) - . += spawn_branch - -/** - * Return all spawn ranks for the given input - */ -/datum/mil_branches/proc/spawn_ranks(var/branch_name, var/datum/species/S) - var/datum/mil_branch/branch = get_branch(branch_name) - return branch && branch.spawn_ranks(S) - -/** - * Return a true value if branch_name is a valid spawn branch key - */ -/datum/mil_branches/proc/is_spawn_branch(var/branch_name, var/datum/species/S) - return (branch_name in spawn_branches(S)) - - -/** - * Return a true value if rank_name is a valid spawn rank in branch under branch_name - */ -/datum/mil_branches/proc/is_spawn_rank(var/branch_name, var/rank_name, var/datum/species/S) - var/datum/mil_branch/branch = get_branch(branch_name) - if(branch && (rank_name in branch.spawn_ranks(S))) - return TRUE - else - return FALSE - -/** - * A single military branch, such as Fleet or Marines - */ -/datum/mil_branch - var/name = "Unknown" // Longer name for branch, eg "Sol Central Marine Corps" - var/name_short // Abbreviation of the name, eg "SCMC" - - - - var/list/ranks // Associative list of full rank names to the corresponding - // /datum/mil_rank objects. These are all ranks available to the branch. - - var/list/spawn_ranks_ // Ranks which the player can choose for spawning, not including species restrictions - var/list/spawn_ranks_by_species_ // Ranks which the player can choose for spawning, with species restrictions. Populated on a needed basis - - var/list/rank_types // list of paths used to init the ranks list - var/list/spawn_rank_types // list of paths used to init the spawn_ranks list. Subset of rank_types - - var/assistant_job = DEFAULT_JOB_TYPE - - // Email addresses will be created under this domain name. Mostly for the looks. - var/email_domain = "freemail.net" - - var/allow_custom_email = FALSE - - var/list/min_skill - -/datum/mil_branch/New() - ranks = list() - spawn_ranks_ = list() - spawn_ranks_by_species_ = list() - - for(var/rank_path in rank_types) - if(!ispath(rank_path, /datum/mil_rank)) - crash_with("[name]'s rank_types includes [rank_path], which is not a subtype of /datum/mil_rank.") - continue - var/datum/mil_rank/rank = new rank_path () - ranks[rank.name] = rank - - if(rank_path in spawn_rank_types) - spawn_ranks_[rank.name] = rank - -/datum/mil_branch/proc/spawn_ranks(var/datum/species/S) - if(!S) - return spawn_ranks_.Copy() - . = spawn_ranks_by_species_[S] - if(!.) - . = list() - spawn_ranks_by_species_[S] = . - for(var/spawn_rank in spawn_ranks_) - if(!GLOB.using_map.is_species_rank_restricted(S, src, spawn_ranks_[spawn_rank])) - . += spawn_rank - - -/** - * Populate the global branches list from GLOB.using_map - */ -/hook/startup/proc/populate_branches() - if(!(GLOB.using_map.flags & MAP_HAS_BRANCH) && !(GLOB.using_map.flags & MAP_HAS_RANK)) - GLOB.mil_branches.branches = null - GLOB.mil_branches.spawn_branches_ = null - GLOB.mil_branches.spawn_branches_by_species_ = null - return 1 - - GLOB.mil_branches.branches = list() - GLOB.mil_branches.spawn_branches_ = list() - GLOB.mil_branches.spawn_branches_by_species_ = list() - for(var/branch_path in GLOB.using_map.branch_types) - if(!ispath(branch_path, /datum/mil_branch)) - crash_with("populate_branches() attempted to instantiate object with path [branch_path], which is not a subtype of /datum/mil_branch.") - continue - - var/datum/mil_branch/branch = new branch_path () - GLOB.mil_branches.branches[branch.name] = branch - - if(branch_path in GLOB.using_map.spawn_branch_types) - GLOB.mil_branches.spawn_branches_[branch.name] = branch - - return 1 - -/** - * A military rank - * - * Note that in various places "rank" is used to refer to a character's job, and - * so this is "mil_rank" to distinguish it. - */ -/datum/mil_rank - var/name = "Unknown" - var/name_short // Abbreviation of the name. Should be null if the - // rank doesn't usually serve as a prefix to the individual's name. - var/list/accessory //type of accesory that will be equipped by job code with this rank - var/sort_order = 0 // A numerical equivalent of the rank used to indicate its order when compared to other datums: eg e-1 = 1, o-1 = 11 - -//Returns short designation (yes shorter than name_short), like E1, O3 etc. -/datum/mil_rank/proc/grade() - return sort_order \ No newline at end of file diff --git a/code/datums/mind/memory.dm b/code/datums/mind/memory.dm deleted file mode 100644 index cb2160cba064d..0000000000000 --- a/code/datums/mind/memory.dm +++ /dev/null @@ -1,199 +0,0 @@ -/datum/mind - var/list/memories - -/mob/proc/StoreMemory(var/memory, var/options) - if(!mind) - return "There is no mind to store a memory in." - . = mind.StoreMemory(memory, options) - -/datum/mind/proc/StoreMemory(var/memory, var/options) - var/decl/memory_options/MO = decls_repository.get_decl(options || /decl/memory_options/default) - return MO.Create(src, memory) - -/datum/mind/proc/RemoveMemory(var/datum/memory/memory, var/mob/remover) - if(!memory) - return - - LAZYREMOVE(memories, memory) - memory.creation_source.Log("removed a memory") - to_chat(remover, SPAN_NOTICE("You have removed a memory.")) - ShowMemory(remover) - -/datum/mind/proc/ClearMemories(var/list/tags) - for(var/mem in memories) - var/datum/memory/M = mem - // If no tags were supplied OR if there is any union between the given tags and memory tags - // then remove the memory - if(!length(tags) || length(tags & M.tags)) - LAZYREMOVE(memories, M) - -/datum/mind/proc/CopyMemories(var/datum/mind/target) - if(!istype(target)) - return - - for(var/mem in memories) - var/datum/memory/M = mem - M.Copy(target) - -/datum/mind/proc/MemoryTags() - . = list() - var/list/all_antag_types = GLOB.all_antag_types_ - for(var/antag_type in all_antag_types) - var/datum/antagonist/antag = all_antag_types[antag_type] - if(antag.is_antagonist(src)) - . += antag_type - -/datum/mind/proc/ShowMemory(var/mob/recipient) - if(!istype(recipient)) - return - - var/list/output = list() - var/last_owner_name - // We pretend that memories are stored in some semblance of an order - for(var/mem in memories) - var/datum/memory/M = mem - var/owner_name = M.OwnerName() - if(owner_name != last_owner_name && current) - output += "[current.real_name]'s Memories
      " - last_owner_name = owner_name - output += "[M.memory] \[Remove\]" - - if(objectives.len > 0) - output += "
      Objectives:" - - var/obj_count = 1 - for(var/datum/objective/objective in objectives) - output += "Objective #[obj_count]: [objective.explanation_text]" - obj_count++ - - if(SSgoals.ambitions[src]) - var/datum/goal/ambition/ambition = SSgoals.ambitions[src] - output += "
      Ambitions: [ambition.summarize()]" - - show_browser(recipient, replacetext_char(jointext(output, "
      "),"\n","
      "),"window=memory") - -/*********** -* Memories * -***********/ -/datum/memory - var/decl/memory_options/creation_source - var/memory // Sanitized strings expected. Remember to unsanitize if adding editing - var/list/tags - var/weakref/owner - var/_owner_name - var/_owner_ckey // The ckey of the original creator. Shouldn't be overriden once set - -/datum/memory/New(var/decl/memory_options/creation_source, var/weakref/owner, var/memory, var/tags) - ..() - src.creation_source = creation_source - src.owner = owner - src.memory = memory - src.tags = tags - OwnerName() - -/datum/memory/Destroy() - owner = null - return ..() - -/datum/memory/proc/OwnerName() - if(owner) - var/mob/owner_mob = owner.resolve() - if(owner_mob) - _owner_ckey = _owner_ckey || owner_mob.ckey // Re-use _owner_ckey if set - _owner_name = owner_mob.real_name - else - owner = null - return _owner_name - -/datum/memory/proc/Copy(var/datum/mind/target) - var/new_tags = creation_source.MemoryTags(target) - var/datum/memory/new_memory = new/datum/memory(creation_source, owner, memory, new_tags) - new_memory._owner_name = new_memory._owner_name || _owner_name - new_memory._owner_ckey = new_memory._owner_ckey - new_memory.owner = null // Copied memories are detached from their previous owners - LAZYADD(target.memories, new_memory) - -/datum/memory/user - -/datum/memory/system - -/***************** -* Memory Options * -*****************/ - -// General memory handling -/decl/memory_options - var/memory_type = /datum/memory - -/decl/memory_options/proc/Validate(var/datum/mind/target) - if(!target.current) - return "Mind is detached from mob." - -/decl/memory_options/proc/MemoryTags(var/datum/mind/target) - return - -/decl/memory_options/proc/Log(var/message) - log_and_message_admins(message) - -/decl/memory_options/proc/Create(var/datum/mind/target, var/memory) - var/error = Validate(target) - if(error) - return error - - var/owner = weakref(target.current) - var/tags = MemoryTags(target) - var/new_memory = new memory_type(src, owner, memory, tags) - LAZYADD(target.memories, new_memory) - Log("created a memory") - -// Default memory handling -/decl/memory_options/default - memory_type = /datum/memory/user - var/const/memory_limit = 32 - -/decl/memory_options/default/MemoryTags(var/datum/mind/target) - return target.MemoryTags() - -/decl/memory_options/default/Validate(var/datum/mind/target) - if((. = ..())) - return - - var/relevant_memories = 0 - for(var/mem in target.memories) - var/datum/memory/M = mem - if(M.type == memory_type) - relevant_memories++ - - if(relevant_memories > memory_limit) - return "Memory limit reached. A maximum of [memory_limit] user added memories allowed." - -// System memory handling -/decl/memory_options/system - memory_type = /datum/memory/system - -/decl/memory_options/system/Log(var/message) - return - -/******** -* Verbs * -********/ - -/mob/verb/ShowMemories() - set name = "Notes" - set category = "IC" - if(mind) - mind.ShowMemory(src) - else - to_chat(src, SPAN_WARNING("There is no mind to retrieve stored memories from.")) - -/mob/verb/AddMemory(var/msg as message) - set name = "Add Note" - set category = "IC" - - msg = sanitize(msg,extra = FALSE) - if(msg) - var/error = StoreMemory(msg) - if(error) - to_chat(src, SPAN_WARNING(error)) - else - to_chat(src, SPAN_NOTICE("Note added - View it with the 'Notes' verb")) diff --git a/code/datums/mind/mind.dm b/code/datums/mind/mind.dm deleted file mode 100644 index 3872736ed5f0c..0000000000000 --- a/code/datums/mind/mind.dm +++ /dev/null @@ -1,612 +0,0 @@ -/* Note from Carnie: - The way datum/mind stuff works has been changed a lot. - Minds now represent IC characters rather than following a client around constantly. - - Guidelines for using minds properly: - - - Never mind.transfer_to(ghost). The var/current and var/original of a mind must always be of type mob/living! - ghost.mind is however used as a reference to the ghost's corpse - - - When creating a new mob for an existing IC character (e.g. cloning a dead guy or borging a brain of a human) - the existing mind of the old mob should be transfered to the new mob like so: - - mind.transfer_to(new_mob) - - - You must not assign key= or ckey= after transfer_to() since the transfer_to transfers the client for you. - By setting key or ckey explicitly after transfering the mind with transfer_to you will cause bugs like DCing - the player. - - - IMPORTANT NOTE 2, if you want a player to become a ghost, use mob.ghostize() It does all the hard work for you. - - - When creating a new mob which will be a new IC character (e.g. putting a shade in a construct or randomly selecting - a ghost to become a xeno during an event). Simply assign the key or ckey like you've always done. - - new_mob.key = key - - The Login proc will handle making a new mob for that mobtype (including setting up stuff like mind.name). Simple! - However if you want that mind to have any special properties like being a traitor etc you will have to do that - yourself. - -*/ - -/datum/mind - var/key - var/name //replaces mob/var/original_name - var/mob/living/current - var/mob/living/original //TODO: remove.not used in any meaningful way ~Carn. First I'll need to tweak the way silicon-mobs handle minds. - var/active = 0 - - var/assigned_role - var/special_role - - var/role_alt_title - - var/datum/job/assigned_job - - var/list/datum/objective/objectives = list() - var/list/datum/objective/special_verbs = list() - - var/has_been_rev = 0//Tracks if this mind has been a rev or not - - var/faction //associated faction - var/datum/changeling/changeling //changeling holder - - var/rev_cooldown = 0 - - // the world.time since the mob has been brigged, or -1 if not at all - var/brigged_since = -1 - - //put this here for easier tracking ingame - var/datum/money_account/initial_account - - var/list/initial_email_login = list("login" = "", "password" = "") - -/datum/mind/New(var/key) - src.key = key - ..() - -/datum/mind/Destroy() - QDEL_NULL_LIST(memories) - QDEL_NULL_LIST(goals) - SSticker.minds -= src - . = ..() - -/datum/mind/proc/transfer_to(mob/living/new_character) - if(!istype(new_character)) - to_world_log("## DEBUG: transfer_to(): Some idiot has tried to transfer_to() a non mob/living mob. Please inform Carn.") - if(current) //remove ourself from our old body's mind variable - if(changeling) - current.remove_changeling_powers() - current.verbs -= /datum/changeling/proc/EvolutionMenu - current.mind = null - - SSnano.user_transferred(current, new_character) // transfer active NanoUI instances to new user - if(new_character.mind) //remove any mind currently in our new body's mind variable - new_character.mind.current = null - - new_character.skillset.obtain_from_mob(current) //handles moving skills over. - - current = new_character //link ourself to our new body - new_character.mind = src //and link our new body to ourself - - if(learned_spells && learned_spells.len) - restore_spells(new_character) - - if(changeling) - new_character.make_changeling() - - if(active) - new_character.key = key //now transfer the key to link the client to our new body - -/datum/mind/proc/edit_memory() - if(GAME_STATE <= RUNLEVEL_SETUP) - alert("Not before round-start!", "Alert") - return - - var/out = "[name][(current&&(current.real_name!=name))?" (as [current.real_name])":""]
      " - out += "Mind currently owned by key: [key] [active?"(synced)":"(not synced)"]
      " - out += "Assigned role: [assigned_role]. Edit
      " - out += "
      " - out += "Factions and special roles:
      " - var/list/all_antag_types = GLOB.all_antag_types_ - for(var/antag_type in all_antag_types) - var/datum/antagonist/antag = all_antag_types[antag_type] - out += "[antag.get_panel_entry(src)]" - out += "

      " - out += "Objectives
      " - - if(objectives && objectives.len) - var/num = 1 - for(var/datum/objective/O in objectives) - out += "Objective #[num]: [O.explanation_text] " - out += " \[remove\]
      " - num++ - out += "
      \[announce objectives\]" - - else - out += "None." - out += "
      \[add\]

      " - - var/datum/goal/ambition/ambition = SSgoals.ambitions[src] - out += "Ambitions: [ambition ? ambition.description : "None"] \[edit\]
      " - show_browser(usr, out, "window=edit_memory[src]") - -/datum/mind/Topic(href, href_list) - - var/is_admin = FALSE - var/can_modify = FALSE - is_admin = check_rights(R_ADMIN, FALSE) - can_modify = is_admin - - if(href_list["add_goal"]) - - var/mob/caller = locate(href_list["add_goal_caller"]) - if(!isghost(usr) && caller && caller == current) can_modify = TRUE - - if(can_modify) - var/did_generate_goal = generate_goals(assigned_job, TRUE, 1, bypass_goal_checks = is_admin) - if(did_generate_goal && goals) - var/datum/goal/goal = goals[LAZYLEN(goals)] - to_chat(current, SPAN_NOTICE("You have received a new goal: '[goal.summarize(FALSE, FALSE)]'.")) - if(usr != current) - to_chat(usr, SPAN_NOTICE("You have added a new goal to \the [current]: '[goal.summarize(FALSE, FALSE)]'.")) - log_admin("[key_name_admin(usr)] added a random goal to [key_name(current)].") - return TRUE // To avoid 'you are not an admin' spam. - - if(href_list["remove_memory"]) - var/memory = locate(href_list["remove_memory"]) in memories - RemoveMemory(memory, usr) - return TRUE - - if(href_list["abandon_goal"]) - var/datum/goal/goal = locate(href_list["abandon_goal"]) - - var/mob/caller = locate(href_list["abandon_goal_caller"]) - if(!isghost(usr) && caller && caller == current) can_modify = TRUE - - if(can_modify && goal && (goal in goals)) - if(delete_goal(assigned_job, goal, is_admin)) - if(usr == current) - to_chat(current, SPAN_NOTICE("You have abandoned your goal: '[goal.summarize(FALSE, FALSE)]'.")) - else - to_chat(usr, SPAN_NOTICE("You have removed a goal from \the [current]: '[goal.summarize(FALSE, FALSE)]'.")) - to_chat(current, SPAN_NOTICE("A goal has been removed: '[goal.summarize(FALSE, FALSE)]'.")) - log_admin("[key_name_admin(usr)] removed a goal from [key_name(current)].") - return TRUE - - if(href_list["reroll_goal"]) - var/datum/goal/goal = locate(href_list["reroll_goal"]) - - var/mob/caller = locate(href_list["reroll_goal_caller"]) - if(!isghost(usr) && caller && caller == current) can_modify = TRUE - - if(can_modify && goal && (goal in goals)) - if(generate_goals(assigned_job, TRUE, 1, bypass_goal_checks = TRUE)) - delete_goal(assigned_job, goal, TRUE) - if(goals) - goal = goals[LAZYLEN(goals)] - if(usr == current) - to_chat(usr, SPAN_NOTICE("You have re-rolled a goal. Your new goal is: '[goal.summarize(FALSE, FALSE)]'.")) - else - to_chat(usr, SPAN_NOTICE("You have re-rolled a goal for \the [current]. Their new goal is: '[goal.summarize(FALSE, FALSE)]'.")) - to_chat(current, SPAN_NOTICE("A goal has been re-rolled. Your new goal is: '[goal.summarize(FALSE, FALSE)]'.")) - log_admin("[key_name_admin(usr)] rerolled a goal for [key_name(current)].") - return TRUE - - if(!is_admin) return - - if(current && isliving(current)) - if(href_list["set_psi_faculty"] && href_list["set_psi_faculty_rank"]) - current.set_psi_rank(href_list["set_psi_faculty"], text2num(href_list["set_psi_faculty_rank"])) - log_and_message_admins("set [key_name(current)]'s [href_list["set_psi_faculty"]] faculty to [text2num(href_list["set_psi_faculty_rank"])].") - var/datum/admins/admin = GLOB.admins[usr.key] - if(istype(admin)) admin.show_player_panel(current) - return TRUE - - if(href_list["add_antagonist"]) - var/datum/antagonist/antag = GLOB.all_antag_types_[href_list["add_antagonist"]] - if(antag) - if(!current) - to_chat(usr, SPAN_WARNING("\The [src] could not be made into a [antag.role_text]! They do not have a mob.")) - return - if(src in antag.current_antagonists) - to_chat(usr, SPAN_WARNING("\The [src] is already a [antag.role_text]!")) - return - var/result = antag.can_become_antag_detailed(src, TRUE) - if(result) - to_chat(usr, SPAN_WARNING("\The [src] could not be made into a [antag.role_text]! [result].")) - return - if(antag.add_antagonist(src, 1, 1, 0, 1, 1)) // Ignore equipment and role type for this. - log_admin("[key_name_admin(usr)] made [key_name(src)] into a [antag.role_text].") - else - to_chat(usr, SPAN_WARNING("\The [src] could not be made into a [antag.role_text]!")) - - else if(href_list["remove_antagonist"]) - var/datum/antagonist/antag = GLOB.all_antag_types_[href_list["remove_antagonist"]] - if(antag) antag.remove_antagonist(src) - - else if(href_list["equip_antagonist"]) - var/datum/antagonist/antag = GLOB.all_antag_types_[href_list["equip_antagonist"]] - if(antag) antag.equip(src.current) - - else if(href_list["unequip_antagonist"]) - var/datum/antagonist/antag = GLOB.all_antag_types_[href_list["unequip_antagonist"]] - if(antag) antag.unequip(src.current) - - else if(href_list["move_antag_to_spawn"]) - var/datum/antagonist/antag = GLOB.all_antag_types_[href_list["move_antag_to_spawn"]] - if(antag) antag.place_mob(src.current) - - else if (href_list["role_edit"]) - var/new_role = input("Select new role", "Assigned role", assigned_role) as null|anything in SSjobs.titles_to_datums - if (!new_role) return - var/datum/job/job = SSjobs.get_by_title(new_role) - if(job) - assigned_job = job - assigned_role = job.title - role_alt_title = new_role - if(current) - current.skillset.obtain_from_client(job, current.client) - - else if (href_list["amb_edit"]) - var/datum/mind/mind = locate(href_list["amb_edit"]) - if(!mind) - return - - var/datum/goal/ambition/ambition = SSgoals.ambitions[src] - var/new_ambition = input("Enter a new ambition", "Memory", ambition ? html_decode(ambition.description) : "") as null|message - if(isnull(new_ambition)) - return - new_ambition = sanitize(new_ambition) - if(mind) - if(new_ambition) - if(!ambition) - ambition = new /datum/goal/ambition(mind) - ambition.description = new_ambition - to_chat(mind.current, "Your ambitions have been changed by higher powers, they are now: [ambition.description]") - log_and_message_admins("made [key_name(mind.current)]'s ambitions be '[ambition.description]'.") - else - to_chat(mind.current, "Your ambitions have been unmade by higher powers.") - log_and_message_admins("has cleared [key_name(mind.current)]'s ambitions.") - if(ambition) - qdel(ambition) - else - to_chat(usr, "The mind has ceased to be.") - - else if (href_list["obj_edit"] || href_list["obj_add"]) - var/datum/objective/objective - var/objective_pos - var/def_value - - if (href_list["obj_edit"]) - objective = locate(href_list["obj_edit"]) - if (!objective) return - objective_pos = objectives.Find(objective) - - //Text strings are easy to manipulate. Revised for simplicity. - var/temp_obj_type = "[objective.type]"//Convert path into a text string. - def_value = copytext_char(temp_obj_type, 19)//Convert last part of path into an objective keyword. - if(!def_value)//If it's a custom objective, it will be an empty string. - def_value = "custom" - - var/new_obj_type = input("Select objective type:", "Objective type", def_value) as null|anything in list("assassinate", "debrain", "protect", "prevent", "harm", "brig", "hijack", "escape", "survive", "steal", "download", "mercenary", "kidnap", "capture", "absorb", "custom") - if (!new_obj_type) return - - var/datum/objective/new_objective = null - - switch (new_obj_type) - if ("assassinate","protect","debrain", "harm", "brig") - //To determine what to name the objective in explanation text. - var/objective_type_capital = uppertext(copytext_char(new_obj_type, 1,2))//Capitalize first letter. - var/objective_type_text = copytext_char(new_obj_type, 2)//Leave the rest of the text. - var/objective_type = "[objective_type_capital][objective_type_text]"//Add them together into a text string. - - var/list/possible_targets = list("Free objective") - for(var/datum/mind/possible_target in SSticker.minds) - if ((possible_target != src) && istype(possible_target.current, /mob/living/carbon/human)) - possible_targets += possible_target.current - - var/mob/def_target = null - var/objective_list[] = list(/datum/objective/assassinate, /datum/objective/protect, /datum/objective/debrain) - if (objective&&(objective.type in objective_list) && objective:target) - def_target = objective.target?.current - - var/new_target = input("Select target:", "Objective target", def_target) as null|anything in possible_targets - if (!new_target) return - - var/objective_path = text2path("/datum/objective/[new_obj_type]") - var/mob/living/M = new_target - if (!istype(M) || !M.mind || new_target == "Free objective") - new_objective = new objective_path - new_objective.owner = src - new_objective:target = null - new_objective.explanation_text = "Free objective" - else - new_objective = new objective_path - new_objective.owner = src - new_objective:target = M.mind - new_objective.explanation_text = "[objective_type] [M.real_name], the [M.mind.special_role ? M.mind:special_role : M.mind:assigned_role]." - - if ("hijack") - new_objective = new /datum/objective/hijack - new_objective.owner = src - - if ("escape") - new_objective = new /datum/objective/escape - new_objective.owner = src - - if ("survive") - new_objective = new /datum/objective/survive - new_objective.owner = src - - if ("mercenary") - new_objective = new /datum/objective/nuclear - new_objective.owner = src - - if ("kidnap") //proxima code //from infinity - new_objective = new /datum/objective/nuclear/kidnap - new_objective.owner = src - - if ("steal") - if (!istype(objective, /datum/objective/steal)) - new_objective = new /datum/objective/steal - new_objective.owner = src - else - new_objective = objective - var/datum/objective/steal/steal = new_objective - if (!steal.select_target()) - return - - if("download","capture","absorb") - var/def_num - if(objective&&objective.type==text2path("/datum/objective/[new_obj_type]")) - def_num = objective.target_amount - - var/target_number = input("Input target number:", "Objective", def_num) as num|null - if (isnull(target_number))//Ordinarily, you wouldn't need isnull. In this case, the value may already exist. - return - - switch(new_obj_type) - if("download") - new_objective = new /datum/objective/download - new_objective.explanation_text = "Download [target_number] research levels." - if("capture") - new_objective = new /datum/objective/capture - new_objective.explanation_text = "Accumulate [target_number] capture points." - if("absorb") - new_objective = new /datum/objective/absorb - new_objective.explanation_text = "Absorb [target_number] compatible genomes." - new_objective.owner = src - new_objective.target_amount = target_number - - if ("custom") - var/expl = sanitize(input("Custom objective:", "Objective", objective ? objective.explanation_text : "") as text|null) - if (!expl) return - new_objective = new /datum/objective - new_objective.owner = src - new_objective.explanation_text = expl - - if (!new_objective) return - - if (objective) - objectives -= objective - objectives.Insert(objective_pos, new_objective) - else - objectives += new_objective - - else if (href_list["obj_delete"]) - var/datum/objective/objective = locate(href_list["obj_delete"]) - if(!istype(objective)) return - objectives -= objective - - else if(href_list["implant"]) - var/mob/living/carbon/human/H = current - - SET_BIT(H.hud_updateflag, IMPLOYAL_HUD) // updates that players HUD images so secHUD's pick up they are implanted or not. - - switch(href_list["implant"]) - if("remove") - for(var/obj/item/implant/loyalty/I in H.contents) - for(var/obj/item/organ/external/organs in H.organs) - if(I in organs.implants) - qdel(I) - break - to_chat(H, "Your loyalty implant has been deactivated.") - log_admin("[key_name_admin(usr)] has de-loyalty implanted [current].") - if("add") - to_chat(H, "You somehow have become the recepient of a loyalty transplant, and it just activated!") - H.implant_loyalty(H, override = TRUE) - log_admin("[key_name_admin(usr)] has loyalty implanted [current].") - else - else if (href_list["silicon"]) - SET_BIT(current.hud_updateflag, SPECIALROLE_HUD) - switch(href_list["silicon"]) - - if("unemag") - var/mob/living/silicon/robot/R = current - if (istype(R)) - R.emagged = FALSE - if (R.activated(R.module.emag)) - R.module_active = null - if(R.module_state_1 == R.module.emag) - R.module_state_1 = null - R.module.emag.forceMove(null) - else if(R.module_state_2 == R.module.emag) - R.module_state_2 = null - R.module.emag.forceMove(null) - else if(R.module_state_3 == R.module.emag) - R.module_state_3 = null - R.module.emag.forceMove(null) - log_admin("[key_name_admin(usr)] has unemag'ed [R].") - - if("unemagcyborgs") - if (istype(current, /mob/living/silicon/ai)) - var/mob/living/silicon/ai/ai = current - for (var/mob/living/silicon/robot/R in ai.connected_robots) - R.emagged = FALSE - if (R.module) - if (R.activated(R.module.emag)) - R.module_active = null - if(R.module_state_1 == R.module.emag) - R.module_state_1 = null - R.module.emag.forceMove(null) - else if(R.module_state_2 == R.module.emag) - R.module_state_2 = null - R.module.emag.forceMove(null) - else if(R.module_state_3 == R.module.emag) - R.module_state_3 = null - R.module.emag.forceMove(null) - log_admin("[key_name_admin(usr)] has unemag'ed [ai]'s Cyborgs.") - - else if (href_list["common"]) - switch(href_list["common"]) - if("undress") - for(var/obj/item/W in current) - current.drop_from_inventory(W) - if("takeuplink") - take_uplink() - if("crystals") - if (usr.client.holder.rights & R_FUN) - var/obj/item/device/uplink/suplink = find_syndicate_uplink() - if(!suplink) - to_chat(usr, "Failed to find an uplink.") - return - var/crystals = suplink.uses - crystals = input("Amount of telecrystals for [key]","Operative uplink", crystals) as null|num - if (!isnull(crystals) && !QDELETED(suplink)) - suplink.uses = crystals - log_and_message_admins("set the telecrystals for [key] to [crystals]") - - else if (href_list["obj_announce"]) - var/obj_count = 1 - to_chat(current, "Your current objectives:") - for(var/datum/objective/objective in objectives) - to_chat(current, "Objective #[obj_count]: [objective.explanation_text]") - obj_count++ - -/datum/mind/proc/find_syndicate_uplink() - var/list/L = current.get_contents() - for (var/obj/item/I in L) - if (I.hidden_uplink) - return I.hidden_uplink - return null - -/datum/mind/proc/take_uplink() - var/obj/item/device/uplink/H = find_syndicate_uplink() - if(H) - qdel(H) - - -// check whether this mind's mob has been brigged for the given duration -// have to call this periodically for the duration to work properly -/datum/mind/proc/is_brigged(duration) - var/turf/T = current.loc - if(!istype(T)) - brigged_since = -1 - return 0 - var/is_currently_brigged = 0 - if(istype(T.loc,/area/security/brig)) - is_currently_brigged = 1 - if(current.GetIdCard()) - is_currently_brigged = 0 - - if(!is_currently_brigged) - brigged_since = -1 - return 0 - - if(brigged_since == -1) - brigged_since = world.time - - return (duration <= world.time - brigged_since) - -/datum/mind/proc/reset() - assigned_role = null - special_role = null - role_alt_title = null - assigned_job = null - //faction = null //Uncommenting this causes a compile error due to 'undefined type', fucked if I know. - changeling = null - initial_account = null - objectives = list() - special_verbs = list() - has_been_rev = 0 - rev_cooldown = 0 - brigged_since = -1 - -//Antagonist role check -/mob/living/proc/check_special_role(role) - if(mind) - if(!role) - return mind.special_role - else - return (mind.special_role == role) ? 1 : 0 - else - return 0 - -//Initialisation procs -/mob/living/proc/mind_initialize() - if(mind) - mind.key = key - else - mind = new /datum/mind(key) - mind.original = src - SSticker.minds += mind - if(!mind.name) mind.name = real_name - mind.current = src - if(player_is_antag(mind)) - src.client.verbs += /client/proc/aooc - -//HUMAN -/mob/living/carbon/human/mind_initialize() - ..() - if(!mind.assigned_role) - mind.assigned_role = GLOB.using_map.default_assistant_title - -//slime -/mob/living/carbon/slime/mind_initialize() - ..() - mind.assigned_role = "slime" - -//AI -/mob/living/silicon/ai/mind_initialize() - ..() - mind.assigned_role = "AI" - -//BORG -/mob/living/silicon/robot/mind_initialize() - ..() - mind.assigned_role = "Robot" - -//PAI -/mob/living/silicon/pai/mind_initialize() - ..() - mind.assigned_role = "pAI" - mind.special_role = "" - -//Animals -/mob/living/simple_animal/mind_initialize() - ..() - mind.assigned_role = "Animal" - -/mob/living/simple_animal/passive/corgi/mind_initialize() - ..() - mind.assigned_role = "Corgi" - -/mob/living/simple_animal/shade/mind_initialize() - ..() - mind.assigned_role = "Shade" - -/mob/living/simple_animal/construct/builder/mind_initialize() - ..() - mind.assigned_role = "Artificer" - mind.special_role = "Cultist" - -/mob/living/simple_animal/construct/wraith/mind_initialize() - ..() - mind.assigned_role = "Wraith" - mind.special_role = "Cultist" - -/mob/living/simple_animal/construct/armoured/mind_initialize() - ..() - mind.assigned_role = "Juggernaut" - mind.special_role = "Cultist" diff --git a/code/datums/move_intent/move_intent.dm b/code/datums/move_intent/move_intent.dm deleted file mode 100644 index 937896fbe68f4..0000000000000 --- a/code/datums/move_intent/move_intent.dm +++ /dev/null @@ -1,41 +0,0 @@ -// Quick and deliberate movements are not necessarily mutually exclusive -#define MOVE_INTENT_DELIBERATE FLAG(0) -#define MOVE_INTENT_EXERTIVE FLAG(1) -#define MOVE_INTENT_QUICK FLAG(2) - -/decl/move_intent - var/name - var/flags = 0 - var/move_delay = 1 - var/hud_icon_state - -/decl/move_intent/proc/can_be_used_by(var/mob/user) - if(flags & MOVE_INTENT_QUICK) - return user.can_sprint() - return TRUE - -/decl/move_intent/creep - name = "Creep" - flags = MOVE_INTENT_DELIBERATE - hud_icon_state = "creeping" - -/decl/move_intent/creep/Initialize() - . = ..() - move_delay = config.creep_delay - -/decl/move_intent/walk - name = "Walk" - hud_icon_state = "walking" - -/decl/move_intent/walk/Initialize() - . = ..() - move_delay = config.walk_delay - -/decl/move_intent/run - name = "Run" - flags = MOVE_INTENT_EXERTIVE | MOVE_INTENT_QUICK - hud_icon_state = "running" - -/decl/move_intent/run/Initialize() - . = ..() - move_delay = config.run_delay diff --git a/code/datums/movement/_defines.dm b/code/datums/movement/_defines.dm deleted file mode 100644 index a0d8a9c4a0f87..0000000000000 --- a/code/datums/movement/_defines.dm +++ /dev/null @@ -1,4 +0,0 @@ -// These are designed to be used within /datum/movement_handler procs -// Do not attempt to use in /atom/movable/proc/DoMove, /atom/movable/proc/MayMove, etc. -#define IS_SELF(w) !IS_NOT_SELF(w) -#define IS_NOT_SELF(w) (w && w != host) diff --git a/code/datums/movement/atom_movable.dm b/code/datums/movement/atom_movable.dm deleted file mode 100644 index d9376edae7257..0000000000000 --- a/code/datums/movement/atom_movable.dm +++ /dev/null @@ -1,37 +0,0 @@ -// Static movement denial -/datum/movement_handler/no_move/MayMove() - return MOVEMENT_STOP - -// Anchor check -/datum/movement_handler/anchored/MayMove() - return host.anchored ? MOVEMENT_STOP : MOVEMENT_PROCEED - -// Movement relay -/datum/movement_handler/move_relay/DoMove(var/direction, var/mover) - var/atom/movable/AM = host.loc - if(!istype(AM)) - return - . = AM.DoMove(direction, mover, FALSE) - if(!(. & MOVEMENT_HANDLED) && !(direction & (UP|DOWN))) - AM.relaymove(mover, direction) - return MOVEMENT_HANDLED - -// Movement delay -/datum/movement_handler/delay - var/delay = 1 - var/next_move - -/datum/movement_handler/delay/New(var/host, var/delay) - ..() - src.delay = max(1, delay) - -/datum/movement_handler/delay/DoMove() - next_move = world.time + delay - -/datum/movement_handler/delay/MayMove() - return world.time >= next_move ? MOVEMENT_PROCEED : MOVEMENT_STOP - -// Relay self -/datum/movement_handler/move_relay_self/DoMove(var/direction, var/mover) - host.relaymove(mover, direction) - return MOVEMENT_HANDLED diff --git a/code/datums/movement/mob.dm b/code/datums/movement/mob.dm deleted file mode 100644 index 544975530e1b3..0000000000000 --- a/code/datums/movement/mob.dm +++ /dev/null @@ -1,325 +0,0 @@ -// Movement relayed to self handling -/datum/movement_handler/mob/relayed_movement - var/prevent_host_move = FALSE - var/list/allowed_movers - -/datum/movement_handler/mob/relayed_movement/MayMove(var/mob/mover, var/is_external) - if(is_external) - return MOVEMENT_PROCEED - if(mover == mob && !(prevent_host_move && LAZYLEN(allowed_movers) && !LAZYISIN(allowed_movers, mover))) - return MOVEMENT_PROCEED - if(LAZYISIN(allowed_movers, mover)) - return MOVEMENT_PROCEED - - return MOVEMENT_STOP - -/datum/movement_handler/mob/relayed_movement/proc/AddAllowedMover(var/mover) - LAZYDISTINCTADD(allowed_movers, mover) - -/datum/movement_handler/mob/relayed_movement/proc/RemoveAllowedMover(var/mover) - LAZYREMOVE(allowed_movers, mover) - -// Admin object possession -/datum/movement_handler/mob/admin_possess/DoMove(var/direction) - if(QDELETED(mob.control_object)) - return MOVEMENT_REMOVE - - . = MOVEMENT_HANDLED - - var/atom/movable/control_object = mob.control_object - step(control_object, direction) - if(QDELETED(control_object)) - . |= MOVEMENT_REMOVE - else - control_object.set_dir(direction) - -// Death handling -/datum/movement_handler/mob/death/DoMove() - if(mob.stat != DEAD) - return - . = MOVEMENT_HANDLED - if(!mob.client) - return - mob.ghostize() - -// Incorporeal/Ghost movement -/datum/movement_handler/mob/incorporeal/DoMove(var/direction) - . = MOVEMENT_HANDLED - direction = mob.AdjustMovementDirection(direction) - - var/turf/T = get_step(mob, direction) - if(!mob.MayEnterTurf(T)) - return - - if(!mob.forceMove(T)) - return - - mob.set_dir(direction) - mob.PostIncorporealMovement() - -/mob/proc/PostIncorporealMovement() - return - -// Eye movement -/datum/movement_handler/mob/eye/DoMove(var/direction, var/mob/mover) - if(IS_NOT_SELF(mover)) // We only care about direct movement - return - if(!mob.eyeobj) - return - mob.eyeobj.EyeMove(direction) - return MOVEMENT_HANDLED - -/datum/movement_handler/mob/eye/MayMove(var/mob/mover, var/is_external) - if(IS_NOT_SELF(mover)) - return MOVEMENT_PROCEED - if(is_external) - return MOVEMENT_PROCEED - if(!mob.eyeobj) - return MOVEMENT_PROCEED - return (MOVEMENT_PROCEED|MOVEMENT_HANDLED) - -// Space movement -/datum/movement_handler/mob/space/DoMove(var/direction, var/mob/mover) - if(!mob.check_solid_ground()) - var/allowmove = mob.Allow_Spacemove(0) - if(!allowmove) - return MOVEMENT_HANDLED - else if(allowmove == -1 && mob.handle_spaceslipping()) //Check to see if we slipped - return MOVEMENT_HANDLED - else - mob.inertia_dir = 0 //If not then we can reset inertia and move - -/datum/movement_handler/mob/space/MayMove(var/mob/mover, var/is_external) - if(IS_NOT_SELF(mover) && is_external) - return MOVEMENT_PROCEED - - if(!mob.check_solid_ground()) - if(!mob.Allow_Spacemove(0)) - return MOVEMENT_STOP - return MOVEMENT_PROCEED - -// Buckle movement -/datum/movement_handler/mob/buckle_relay/DoMove(var/direction, var/mover) - // TODO: Datumlize buckle-handling - if(mob.pulledby || mob.buckled) // Wheelchair driving! - if(istype(mob.loc, /turf/space)) - return // No wheelchair driving in space - if(istype(mob.pulledby, /obj/structure/bed/chair/wheelchair)) - . = MOVEMENT_HANDLED - mob.pulledby.DoMove(direction, mob) - else if(istype(mob.buckled, /obj/structure/bed/chair/wheelchair)) - . = MOVEMENT_HANDLED - if(ishuman(mob)) - var/mob/living/carbon/human/driver = mob - var/obj/item/organ/external/l_hand = driver.get_organ(BP_L_HAND) - var/obj/item/organ/external/r_hand = driver.get_organ(BP_R_HAND) - if((!l_hand || l_hand.is_stump()) && (!r_hand || r_hand.is_stump())) - return // No hands to drive your chair? Tough luck! - //drunk wheelchair driving - direction = mob.AdjustMovementDirection(direction) - mob.buckled.DoMove(direction, mob) - -/datum/movement_handler/mob/buckle_relay/MayMove(var/mover) - if(mob.buckled) - return mob.buckled.MayMove(mover, FALSE) ? (MOVEMENT_PROCEED|MOVEMENT_HANDLED) : MOVEMENT_STOP - return MOVEMENT_PROCEED - -// Movement delay -/datum/movement_handler/mob/delay - var/next_move - -/datum/movement_handler/mob/delay/DoMove(var/direction, var/mover, var/is_external) - if(is_external) - return - next_move = world.time + max(1, mob.movement_delay()) - -/datum/movement_handler/mob/delay/MayMove(var/mover, var/is_external) - if(IS_NOT_SELF(mover) && is_external) - return MOVEMENT_PROCEED - return ((mover && mover != mob) || world.time >= next_move) ? MOVEMENT_PROCEED : MOVEMENT_STOP - -/datum/movement_handler/mob/delay/proc/SetDelay(var/delay) - next_move = max(next_move, world.time + delay) - -/datum/movement_handler/mob/delay/proc/AddDelay(var/delay) - next_move += max(0, delay) - -// Stop effect -/datum/movement_handler/mob/stop_effect/DoMove() - if(MayMove() == MOVEMENT_STOP) - return MOVEMENT_HANDLED - -/datum/movement_handler/mob/stop_effect/MayMove() - for(var/obj/effect/stop/S in mob.loc) - if(S.victim == mob) - return MOVEMENT_STOP - return MOVEMENT_PROCEED - -// Transformation -/datum/movement_handler/mob/transformation/MayMove() - return MOVEMENT_STOP - -// Consciousness - Is the entity trying to conduct the move conscious? -/datum/movement_handler/mob/conscious/MayMove(var/mob/mover) - return (mover ? mover.stat == CONSCIOUS : mob.stat == CONSCIOUS) ? MOVEMENT_PROCEED : MOVEMENT_STOP - -// Along with more physical checks -/datum/movement_handler/mob/physically_capable/MayMove(var/mob/mover) - // We only check physical capability if the host mob tried to do the moving - return ((mover && mover != mob) || !mob.incapacitated(INCAPACITATION_DISABLED & ~INCAPACITATION_FORCELYING)) ? MOVEMENT_PROCEED : MOVEMENT_STOP - -// Is anything physically preventing movement? -/datum/movement_handler/mob/physically_restrained/MayMove(var/mob/mover) - if(mob.anchored) - if(mover == mob) - to_chat(mob, "You're anchored down!") - return MOVEMENT_STOP - - if(istype(mob.buckled) && !mob.buckled.buckle_movable) - if(mover == mob) - to_chat(mob, "You're buckled to \the [mob.buckled]!") - return MOVEMENT_STOP - - if(LAZYLEN(mob.pinned)) - if(mover == mob) - to_chat(mob, "You're pinned down by \a [mob.pinned[1]]!") - return MOVEMENT_STOP - - for(var/obj/item/grab/G in mob.grabbed_by) - if(G.assailant != mob && G.stop_move()) - if(mover == mob) - to_chat(mob, "You're stuck in a grab!") - mob.ProcessGrabs() - return MOVEMENT_STOP - - if(mob.restrained()) - for(var/mob/M in range(mob, 1)) - if(M.pulling == mob) - if(!M.incapacitated() && mob.Adjacent(M)) - if(mover == mob) - to_chat(mob, "You're restrained! You can't move!") - return MOVEMENT_STOP - else - M.stop_pulling() - - return MOVEMENT_PROCEED - - -/mob/living/ProcessGrabs() - //if we are being grabbed - if(grabbed_by.len) - resist() //shortcut for resisting grabs - -/mob/proc/ProcessGrabs() - return - - -// Finally.. the last of the mob movement junk -/datum/movement_handler/mob/movement/DoMove(var/direction, var/mob/mover) - . = MOVEMENT_HANDLED - - if(mob.moving) - return - - if(!mob.lastarea) - mob.lastarea = get_area(mob.loc) - - //We are now going to move - mob.moving = 1 - - direction = mob.AdjustMovementDirection(direction) - var/turf/old_turf = get_turf(mob) - - if(direction & (UP|DOWN)) - var/txt_dir = direction & UP ? "upwards" : "downwards" - old_turf.visible_message(SPAN_NOTICE("[mob] moves [txt_dir].")) - if(mob.pulling) - mob.zPull(direction) - - step(mob, direction) - // In case mobs ceased existing during the step. Silly edge case but it does happen. - if (!mob) - return - - // Something with pulling things - var/extra_delay = HandleGrabs(direction, old_turf) - mob.ExtraMoveCooldown(extra_delay) - - for (var/obj/item/grab/G in mob) - if (G.assailant_reverse_facing()) - mob.set_dir(GLOB.reverse_dir[direction]) - G.assailant_moved() - for (var/obj/item/grab/G in mob.grabbed_by) - G.adjust_position() - - //Moving with objects stuck in you can cause bad times. - if(get_turf(mob) != old_turf) - if(MOVING_QUICKLY(mob)) - mob.last_quick_move_time = world.time - mob.adjust_stamina(-(mob.get_stamina_used_per_step() * (1+mob.encumbrance()))) - mob.handle_embedded_and_stomach_objects() - - mob.moving = 0 - -/datum/movement_handler/mob/movement/MayMove(var/mob/mover) - return IS_SELF(mover) && mob.moving ? MOVEMENT_STOP : MOVEMENT_PROCEED - -/mob/proc/get_stamina_used_per_step() - return 1 - -/mob/living/carbon/human/get_stamina_used_per_step() - var/mod = (1-((get_skill_value(SKILL_HAULING) - SKILL_MIN)/(SKILL_MAX - SKILL_MIN))) - if(species && (species.species_flags & SPECIES_FLAG_LOW_GRAV_ADAPTED)) - if(has_gravity(src)) - mod *= 1.2 - else - mod *= 0.8 - - return config.minimum_sprint_cost + (config.skill_sprint_cost_range * mod) - -/datum/movement_handler/mob/movement/proc/HandleGrabs(var/direction, var/old_turf) - . = 0 - // TODO: Look into making grabs use movement events instead, this is a mess. - for (var/obj/item/grab/G in mob) - if(G.assailant == G.affecting) - return - . = max(., G.grab_slowdown()) - var/list/L = mob.ret_grab() - if(istype(L, /list)) - if(L.len == 2) - L -= mob - var/mob/M = L[1] - if(M) - if (get_dist(old_turf, M) <= 1) - if (isturf(M.loc) && isturf(mob.loc)) - if (mob.loc != old_turf && M.loc != mob.loc) - step(M, get_dir(M.loc, old_turf)) - else - for(var/mob/M in L) - M.other_mobs = 1 - if(mob != M) - M.animate_movement = 3 - for(var/mob/M in L) - spawn( 0 ) - step(M, direction) - return - spawn( 1 ) - M.other_mobs = null - M.animate_movement = 2 - return - G.adjust_position() - -// Misc. helpers -/mob/proc/MayEnterTurf(var/turf/T) - return T && !((mob_flags & MOB_FLAG_HOLY_BAD) && check_is_holy_turf(T)) - -/mob/proc/AdjustMovementDirection(var/direction) - . = direction - if(!confused) - return - - var/stability = MOVING_DELIBERATELY(src) ? 75 : 25 - if(prob(stability)) - return - - return prob(50) ? GLOB.cw_dir[.] : GLOB.ccw_dir[.] diff --git a/code/datums/movement/movement.dm b/code/datums/movement/movement.dm deleted file mode 100644 index 2743a3c34a0a5..0000000000000 --- a/code/datums/movement/movement.dm +++ /dev/null @@ -1,152 +0,0 @@ -var/global/const/MOVEMENT_HANDLED = FLAG(0) // If no further movement handling should occur after this -var/global/const/MOVEMENT_REMOVE = FLAG(1) - -var/global/const/MOVEMENT_PROCEED = FLAG(2) -var/global/const/MOVEMENT_STOP = FLAG(3) - -#define INIT_MOVEMENT_HANDLERS \ -if(LAZYLEN(movement_handlers) && ispath(movement_handlers[1])) { \ - var/new_handlers = list(); \ - for(var/path in movement_handlers){ \ - var/arguments = movement_handlers[path]; \ - arguments = arguments ? (list(src) | (arguments)) : list(src); \ - new_handlers += new path(arglist(arguments)); \ - } \ - movement_handlers= new_handlers; \ -} - -#define REMOVE_AND_QDEL(X) LAZYREMOVE(movement_handlers, X); qdel(X); - -/atom/movable - var/list/movement_handlers - -// We don't want to check for subtypes, hence why we don't call is_path_in_list(), etc. -/atom/movable/proc/HasMovementHandler(var/handler_path) - if(!LAZYLEN(movement_handlers)) - return FALSE - if(ispath(movement_handlers[1])) - return (handler_path in movement_handlers) - else - for(var/mh in movement_handlers) - var/datum/MH = mh - if(MH.type == handler_path) - return TRUE - return FALSE - -/atom/movable/proc/AddMovementHandler(var/handler_path, var/handler_path_to_add_before) - INIT_MOVEMENT_HANDLERS - - . = new handler_path(src) - - // If a handler_path_to_add_before was given, attempt to find it and insert our handler just before it - if(handler_path_to_add_before && LAZYLEN(movement_handlers)) - var/index = 0 - for(var/handler in movement_handlers) - index++ - var/datum/H = handler - if(H.type == handler_path_to_add_before) - LAZYINSERT(movement_handlers, ., index) - return - - // If no handler_path_to_add_after was given or found, add first - LAZYINSERT(movement_handlers, ., 1) - -/atom/movable/proc/RemoveMovementHandler(var/handler_path) - INIT_MOVEMENT_HANDLERS - - if(ispath(handler_path)) - for(var/handler in movement_handlers) - var/datum/H = handler - if(H.type == handler_path) - REMOVE_AND_QDEL(H) - break - else if (handler_path in movement_handlers) - REMOVE_AND_QDEL(handler_path) - -/atom/movable/proc/ReplaceMovementHandler(var/handler_path) - RemoveMovementHandler(handler_path) - AddMovementHandler(handler_path) - -/atom/movable/proc/GetMovementHandler(var/handler_path) - INIT_MOVEMENT_HANDLERS - - for(var/handler in movement_handlers) - var/datum/H = handler - if(H.type == handler_path) - return H - -// If is_external is explicitly set then use that, otherwise if the mover isn't the host assume it's external -#define SET_MOVER(X) X = X || src -#define SET_IS_EXTERNAL(X) is_external = isnull(is_external) ? (mover != src) : is_external - -/atom/movable/proc/DoMove(var/direction, var/mob/mover, var/is_external) - INIT_MOVEMENT_HANDLERS - SET_MOVER(mover) - SET_IS_EXTERNAL(mover) - - for(var/mh in movement_handlers) - var/datum/movement_handler/movement_handler = mh - if(movement_handler.MayMove(mover, is_external) & MOVEMENT_STOP) - return MOVEMENT_HANDLED - - . = movement_handler.DoMove(direction, mover, is_external) - if(. & MOVEMENT_REMOVE) - REMOVE_AND_QDEL(movement_handler) - if(. & MOVEMENT_HANDLED) - return - -// is_external means that something else (not inside us) is asking if we may move -// This for example includes mobs bumping into each other -/atom/movable/proc/MayMove(var/mob/mover, var/is_external) - INIT_MOVEMENT_HANDLERS - SET_MOVER(mover) - SET_IS_EXTERNAL(mover) - - for(var/mh in movement_handlers) - var/datum/movement_handler/movement_handler = mh - var/may_move = movement_handler.MayMove(mover, is_external) - if(may_move & MOVEMENT_STOP) - return FALSE - if((may_move & (MOVEMENT_PROCEED|MOVEMENT_HANDLED)) == (MOVEMENT_PROCEED|MOVEMENT_HANDLED)) - return TRUE - return TRUE - -#undef SET_MOVER -#undef SET_IS_EXTERNAL -#undef INIT_MOVEMENT_HANDLERS -#undef REMOVE_AND_QDEL - -/datum/movement_handler - var/expected_host_type = /atom/movable - var/atom/movable/host - -/datum/movement_handler/New(var/atom/movable/host) - if(!istype(host, expected_host_type)) - CRASH("Invalid host type. Expected [expected_host_type], was [host ? host.type : "*null*"]") - src.host = host - -/datum/movement_handler/Destroy() - host = null - . = ..() - -/datum/movement_handler/proc/DoMove(var/direction, var/mob/mover, var/is_external) - return - -// Asks the handlers if the mob may move, ignoring destination, if attempting a DoMove() -/datum/movement_handler/proc/MayMove(var/mob/mover, var/is_external) - return MOVEMENT_PROCEED - -/******* -* /mob * -*******/ -/datum/movement_handler/mob - expected_host_type = /mob - var/mob/mob - -/datum/movement_handler/mob/New(var/host) - ..() - src.mob = host - -/datum/movement_handler/mob/Destroy() - mob = null - . = ..() diff --git a/code/datums/movement/multiz.dm b/code/datums/movement/multiz.dm deleted file mode 100644 index 57769dce0cea0..0000000000000 --- a/code/datums/movement/multiz.dm +++ /dev/null @@ -1,51 +0,0 @@ -/datum/movement_handler/mob/multiz/DoMove(var/direction, var/mob/mover, var/is_external) - if(!(direction & (UP|DOWN))) - return MOVEMENT_PROCEED - - var/turf/destination = (direction == UP) ? GetAbove(mob) : GetBelow(mob) - if(!destination) - to_chat(mover, "There is nothing of interest in this direction.") - return MOVEMENT_HANDLED - - var/turf/start = get_turf(mob) - if(!start.CanZPass(mob, direction)) - to_chat(mover, "\The [start] is in the way.") - return MOVEMENT_HANDLED - - if(!destination.CanZPass(mob, direction)) - to_chat(mover, "You bump against \the [destination].") - return MOVEMENT_HANDLED - - var/area/area = get_area(mob) - if(direction == UP && area.has_gravity() && !mob.can_overcome_gravity()) - to_chat(mover, "Gravity stops you from moving upward.") - return MOVEMENT_HANDLED - - for(var/atom/A in destination) - if(!A.CanMoveOnto(mob, start, 1.5, direction)) - to_chat(mover, "\The [A] blocks you.") - return MOVEMENT_HANDLED - - area = get_area(destination) - if(direction == UP && area.has_gravity() && mob.can_fall(FALSE, destination)) - to_chat(mover, "You see nothing to hold on to.") - return MOVEMENT_HANDLED - - return MOVEMENT_PROCEED - -//For ghosts and such -/datum/movement_handler/mob/multiz_connected/DoMove(var/direction, var/mob/mover, var/is_external) - if(!(direction & (UP|DOWN))) - return MOVEMENT_PROCEED - - var/turf/destination = (direction == UP) ? GetAbove(mob) : GetBelow(mob) - if(!destination) - to_chat(mob, "There is nothing of interest in this direction.") - return MOVEMENT_HANDLED - - return MOVEMENT_PROCEED - -/datum/movement_handler/deny_multiz/DoMove(var/direction, var/mob/mover, var/is_external) - if(direction & (UP|DOWN)) - return MOVEMENT_HANDLED - return MOVEMENT_PROCEED diff --git a/code/datums/movement/robot.dm b/code/datums/movement/robot.dm deleted file mode 100644 index fc7ef731b0ac0..0000000000000 --- a/code/datums/movement/robot.dm +++ /dev/null @@ -1,23 +0,0 @@ -/********* -* /robot * -*********/ -/datum/movement_handler/robot - expected_host_type = /mob/living/silicon/robot - var/mob/living/silicon/robot/robot - -/datum/movement_handler/robot/New(var/host) - ..() - src.robot = host - -/datum/movement_handler/robot/Destroy() - robot = null - . = ..() - -// Use power while moving. -/datum/movement_handler/robot/use_power/DoMove() - var/datum/robot_component/actuator/A = robot.get_component("actuator") - if(!robot.cell_use_power(A.active_usage * robot.power_efficiency)) - return MOVEMENT_HANDLED - -/datum/movement_handler/robot/use_power/MayMove() - return robot.is_component_functioning("actuator") ? MOVEMENT_PROCEED : MOVEMENT_STOP diff --git a/code/datums/movement/~defines.dm b/code/datums/movement/~defines.dm deleted file mode 100644 index 2d25797751df6..0000000000000 --- a/code/datums/movement/~defines.dm +++ /dev/null @@ -1,2 +0,0 @@ -#undef IS_SELF -#undef IS_NOT_SELF diff --git a/code/datums/mutable_appearance.dm b/code/datums/mutable_appearance.dm deleted file mode 100644 index fe178279fb8f3..0000000000000 --- a/code/datums/mutable_appearance.dm +++ /dev/null @@ -1,16 +0,0 @@ -// Mutable appearances are an inbuilt byond datastructure. Read the documentation on them by hitting F1 in DM. -// Basically use them instead of images for overlays/underlays and when changing an object's appearance if you're doing so with any regularity. -// Unless you need the overlay/underlay to have a different direction than the base object. Then you have to use an image due to a bug. - -// Mutable appearances are children of images, just so you know. - -// Helper similar to image() -/proc/mutable_appearance(icon, icon_state, color, flags = DEFAULT_APPEARANCE_FLAGS | RESET_COLOR | RESET_ALPHA, plane = FLOAT_PLANE, layer = FLOAT_LAYER) - var/mutable_appearance/MA = new() - MA.icon = icon - MA.icon_state = icon_state - MA.color = color - MA.appearance_flags = flags - MA.plane = plane - MA.layer = layer - return MA diff --git a/code/datums/observation/_defines.dm b/code/datums/observation/_defines.dm deleted file mode 100644 index 902d65587097c..0000000000000 --- a/code/datums/observation/_defines.dm +++ /dev/null @@ -1 +0,0 @@ -#define CANCEL_MOVE_EVENT -55 diff --git a/code/datums/observation/death.dm b/code/datums/observation/death.dm deleted file mode 100644 index d424a5ab75c7d..0000000000000 --- a/code/datums/observation/death.dm +++ /dev/null @@ -1,22 +0,0 @@ -// Observer Pattern Implementation: Death -// Registration type: /mob -// -// Raised when: A mob is added to the dead_mob_list -// -// Arguments that the called proc should expect: -// /mob/dead: The mob that was added to the dead_mob_list - -GLOBAL_DATUM_INIT(death_event, /decl/observ/death, new) - -/decl/observ/death - name = "Death" - expected_type = /mob - -/***************** -* Death Handling * -*****************/ - -/mob/living/add_to_dead_mob_list() - . = ..() - if(.) - GLOB.death_event.raise_event(src) diff --git a/code/datums/observation/density_set.dm b/code/datums/observation/density_set.dm deleted file mode 100644 index 50167ddac03f8..0000000000000 --- a/code/datums/observation/density_set.dm +++ /dev/null @@ -1,24 +0,0 @@ -// Observer Pattern Implementation: Density Set -// Registration type: /atom -// -// Raised when: An /atom changes density using the set_density() proc. -// -// Arguments that the called proc should expect: -// /atom/density_changer: The instance that changed density. -// /old_density: The density before the change. -// /new_density: The density after the change. - -GLOBAL_DATUM_INIT(density_set_event, /decl/observ/density_set, new) - -/decl/observ/density_set - name = "Density Set" - expected_type = /atom - -/******************* -* Density Handling * -*******************/ -/atom/set_density(new_density) - var/old_density = density - UNLINT(. = ..()) - if(density != old_density) - GLOB.density_set_event.raise_event(src, old_density, density) diff --git a/code/datums/observation/destroyed.dm b/code/datums/observation/destroyed.dm deleted file mode 100644 index 2322acc088831..0000000000000 --- a/code/datums/observation/destroyed.dm +++ /dev/null @@ -1,12 +0,0 @@ -// Observer Pattern Implementation: Destroyed -// Registration type: /datum -// -// Raised when: A /datum instance is destroyed. -// -// Arguments that the called proc should expect: -// /datum/destroyed_instance: The instance that was destroyed. - -GLOBAL_DATUM_INIT(destroyed_event, /decl/observ/destroyed, new) - -/decl/observ/destroyed - name = "Destroyed" diff --git a/code/datums/observation/dir_set.dm b/code/datums/observation/dir_set.dm deleted file mode 100644 index 0cc583c714de1..0000000000000 --- a/code/datums/observation/dir_set.dm +++ /dev/null @@ -1,41 +0,0 @@ -// Observer Pattern Implementation: Direction Set -// Registration type: /atom -// -// Raised when: An /atom changes dir using the set_dir() proc. -// -// Arguments that the called proc should expect: -// /atom/dir_changer: The instance that changed direction -// /old_dir: The dir before the change. -// /new_dir: The dir after the change. - -GLOBAL_DATUM_INIT(dir_set_event, /decl/observ/dir_set, new) - -/decl/observ/dir_set - name = "Direction Set" - expected_type = /atom - -/decl/observ/dir_set/register(var/atom/dir_changer, var/datum/listener, var/proc_call) - . = ..() - - // Listen to the parent if possible. - if(. && istype(dir_changer.loc, /atom/movable)) // We don't care about registering to turfs. - register(dir_changer.loc, dir_changer, /atom/proc/recursive_dir_set) - -/********************* -* Direction Handling * -*********************/ - -/atom/set_dir() - var/old_dir = dir - UNLINT(. = ..()) - if(old_dir != dir) - GLOB.dir_set_event.raise_event(src, old_dir, dir) - -/atom/movable/Entered(var/atom/movable/am, atom/old_loc) - . = ..() - if(GLOB.dir_set_event.has_listeners(am)) - GLOB.dir_set_event.register(src, am, /atom/proc/recursive_dir_set) - -/atom/movable/Exited(var/atom/movable/am, atom/new_loc) - . = ..() - GLOB.dir_set_event.unregister(src, am, /atom/proc/recursive_dir_set) diff --git a/code/datums/observation/dismembered.dm b/code/datums/observation/dismembered.dm deleted file mode 100644 index 20ae56cf99d8f..0000000000000 --- a/code/datums/observation/dismembered.dm +++ /dev/null @@ -1,23 +0,0 @@ -// Observer Pattern Implementation: Dismembered -// Registration type: /mob/living -// -// Raised when: A /mob/living instance had an organ removed. -// -// Arguments that the called proc should expect: -// /mob/living: The mob being dismembered. -// /obj/item/organ: The organ removed. -// -// This is called immediately, before the organ is actually moved or deleted. - -GLOBAL_DATUM_INIT(dismembered_event, /decl/observ/dismembered, new) - -/decl/observ/dismembered - name = "Dismembered" - expected_type = /mob/living - -/******************* -* Dismembered Handling * -*******************/ - -// Called from the base of /obj/item/organ/proc/removed -// In modules/organs/organ.dm \ No newline at end of file diff --git a/code/datums/observation/entered.dm b/code/datums/observation/entered.dm deleted file mode 100644 index 4d517a7e089ec..0000000000000 --- a/code/datums/observation/entered.dm +++ /dev/null @@ -1,24 +0,0 @@ -// Observer Pattern Implementation: Entered -// Registration type: /atom -// -// Raised when: An /atom/movable instance has entered an atom. -// -// Arguments that the called proc should expect: -// /atom/entered: The atom that was entered -// /atom/movable/enterer: The instance that entered the atom -// /atom/old_loc: The atom the enterer came from -// - -GLOBAL_DATUM_INIT(entered_event, /decl/observ/entered, new) - -/decl/observ/entered - name = "Entered" - expected_type = /atom - -/******************* -* Entered Handling * -*******************/ - -/atom/Entered(atom/movable/enterer, atom/old_loc) - ..() - GLOB.entered_event.raise_event(src, enterer, old_loc) diff --git a/code/datums/observation/equipped.dm b/code/datums/observation/equipped.dm deleted file mode 100644 index 1efc00697ce0d..0000000000000 --- a/code/datums/observation/equipped.dm +++ /dev/null @@ -1,40 +0,0 @@ -// Observer Pattern Implementation: Equipped -// Registration type: /mob -// -// Raised when: A mob equips an item. -// -// Arguments that the called proc should expect: -// /mob/equipper: The mob that equipped the item. -// /obj/item/item: The equipped item. -// slot: The slot equipped to. - -GLOBAL_DATUM_INIT(mob_equipped_event, /decl/observ/mob_equipped, new) - -/decl/observ/mob_equipped - name = "Mob Equipped" - expected_type = /mob - -// Observer Pattern Implementation: Equipped -// Registration type: /obj/item -// -// Raised when: A mob equips an item. -// -// Arguments that the called proc should expect: -// /obj/item/item: The equipped item. -// /mob/equipper: The mob that equipped the item. -// slot: The slot equipped to. - -GLOBAL_DATUM_INIT(item_equipped_event, /decl/observ/item_equipped, new) - -/decl/observ/item_equipped - name = "Item Equipped" - expected_type = /obj/item - -/******************** -* Equipped Handling * -********************/ - -/obj/item/equipped(var/mob/user, var/slot) - UNLINT(. = ..()) - GLOB.mob_equipped_event.raise_event(user, src, slot) - GLOB.item_equipped_event.raise_event(src, user, slot) diff --git a/code/datums/observation/exited.dm b/code/datums/observation/exited.dm deleted file mode 100644 index 87d280a841d52..0000000000000 --- a/code/datums/observation/exited.dm +++ /dev/null @@ -1,24 +0,0 @@ -// Observer Pattern Implementation: Exited -// Registration type: /atom -// -// Raised when: An /atom/movable instance has exited an atom. -// -// Arguments that the called proc should expect: -// /atom/entered: The atom that was exited from -// /atom/movable/enterer: The instance that exited the atom -// /atom/new_loc: The atom the exitee is now residing in -// - -GLOBAL_DATUM_INIT(exited_event, /decl/observ/exited, new) - -/decl/observ/exited - name = "Exited" - expected_type = /atom - -/****************** -* Exited Handling * -******************/ - -/atom/Exited(atom/movable/exitee, atom/new_loc) - . = ..() - GLOB.exited_event.raise_event(src, exitee, new_loc) diff --git a/code/datums/observation/hands_swapped.dm b/code/datums/observation/hands_swapped.dm deleted file mode 100644 index 034627b79e933..0000000000000 --- a/code/datums/observation/hands_swapped.dm +++ /dev/null @@ -1,22 +0,0 @@ -// Observer Pattern Implementation: Hands Swapped -// Registration type: /mob -// -// Raised when: A mob has swapped hands. -// -// Arguments that the called proc should expect: -// /mob/swapper: The mob that swapped hands. -// - -GLOBAL_DATUM_INIT(hands_swapped_event, /decl/observ/hands_swapped, new) - -/decl/observ/hands_swapped - name = "Hands Swapped" - expected_type = /mob - -/******************* -* Hands Swapped Handling * -*******************/ - -/mob/swap_hand() - . = ..() - GLOB.hands_swapped_event.raise_event(src) \ No newline at end of file diff --git a/code/datums/observation/helpers.dm b/code/datums/observation/helpers.dm deleted file mode 100644 index bcd08cab99d7a..0000000000000 --- a/code/datums/observation/helpers.dm +++ /dev/null @@ -1,32 +0,0 @@ -/atom/movable/proc/recursive_move(var/atom/movable/am, var/old_loc, var/new_loc) - GLOB.moved_event.raise_event(src, old_loc, new_loc) - -/atom/movable/proc/move_to_turf(var/atom/movable/am, var/old_loc, var/new_loc) - var/turf/T = get_turf(new_loc) - if(T && T != loc) - forceMove(T) - -// Similar to above but we also follow into nullspace -/atom/movable/proc/move_to_turf_or_null(var/atom/movable/am, var/old_loc, var/new_loc) - var/turf/T = get_turf(new_loc) - if(T != loc) - forceMove(T) - -/atom/movable/proc/move_to_loc_or_null(var/atom/movable/am, var/old_loc, var/new_loc) - if(new_loc != loc) - forceMove(new_loc) - -/atom/proc/recursive_dir_set(var/atom/a, var/old_dir, var/new_dir) - set_dir(new_dir) - -// Sometimes you just want to end yourself -/datum/proc/qdel_self() - qdel(src) - -/proc/register_all_movement(var/event_source, var/listener) - GLOB.moved_event.register(event_source, listener, /atom/movable/proc/recursive_move) - GLOB.dir_set_event.register(event_source, listener, /atom/proc/recursive_dir_set) - -/proc/unregister_all_movement(var/event_source, var/listener) - GLOB.moved_event.unregister(event_source, listener, /atom/movable/proc/recursive_move) - GLOB.dir_set_event.unregister(event_source, listener, /atom/proc/recursive_dir_set) diff --git a/code/datums/observation/life.dm b/code/datums/observation/life.dm deleted file mode 100644 index 45760c92d347a..0000000000000 --- a/code/datums/observation/life.dm +++ /dev/null @@ -1,22 +0,0 @@ -// Observer Pattern Implementation: Life -// Registration type: /mob -// -// Raised when: A mob is added to the life_mob_list -// -// Arguments that the called proc should expect: -// /mob/dead: The mob that was added to the life_mob_list - -GLOBAL_DATUM_INIT(life_event, /decl/observ/life, new) - -/decl/observ/life - name = "Life" - expected_type = /mob - -/***************** -* Life Handling * -*****************/ - -/mob/add_to_living_mob_list() - . = ..() - if(.) - GLOB.life_event.raise_event(src) diff --git a/code/datums/observation/logged_in.dm b/code/datums/observation/logged_in.dm deleted file mode 100644 index c59e146a485ac..0000000000000 --- a/code/datums/observation/logged_in.dm +++ /dev/null @@ -1,21 +0,0 @@ -// Observer Pattern Implementation: Logged in -// Registration type: /mob -// -// Raised when: A mob logs in (not client) -// -// Arguments that the called proc should expect: -// /mob/joiner: The mob that has logged in - -GLOBAL_DATUM_INIT(logged_in_event, /decl/observ/logged_in, new) - -/decl/observ/logged_in - name = "Logged In" - expected_type = /mob - -/***************** -* Login Handling * -*****************/ - -/mob/Login() - ..() - GLOB.logged_in_event.raise_event(src) diff --git a/code/datums/observation/logged_out.dm b/code/datums/observation/logged_out.dm deleted file mode 100644 index 6a5ab8fa9e278..0000000000000 --- a/code/datums/observation/logged_out.dm +++ /dev/null @@ -1,22 +0,0 @@ -// Observer Pattern Implementation: Logged Out -// Registration type: /mob -// -// Raised when: A mob logs out (client either logged out or was moved to another mob) -// -// Arguments that the called proc should expect: -// /mob/leaver: The mob that has logged out -// /client/client: The mob's client - -GLOBAL_DATUM_INIT(logged_out_event, /decl/observ/logged_out, new) - -/decl/observ/logged_out - name = "Logged Out" - expected_type = /mob - -/****************** -* Logout Handling * -******************/ - -/mob/Logout() - GLOB.logged_out_event.raise_event(src, my_client) - ..() diff --git a/code/datums/observation/module_activated.dm b/code/datums/observation/module_activated.dm deleted file mode 100644 index edba129b5d0f7..0000000000000 --- a/code/datums/observation/module_activated.dm +++ /dev/null @@ -1,21 +0,0 @@ -// Observer Pattern Implementation: Module Activated -// Registration type: /mob/living/silicon/robot -// -// Raised when: A robot activates a module. -// -// Arguments that the called proc should expect: -// /mob/living/silicon/robot/robot: The robot that activated the module. -// /obj/item/module: The activated module. - -GLOBAL_DATUM_INIT(module_activated_event, /decl/observ/module_activated, new) - -/decl/observ/module_activated - name = "Module Activated" - expected_type = /mob/living/silicon/robot - -/**************************** -* Module Activated Handling * -****************************/ - -// Called from /mob/living/silicon/robot/proc/activate_module -// in code/modules/mob/living/silicon/robot/inventory.dm \ No newline at end of file diff --git a/code/datums/observation/module_deactivated.dm b/code/datums/observation/module_deactivated.dm deleted file mode 100644 index c1e7654725588..0000000000000 --- a/code/datums/observation/module_deactivated.dm +++ /dev/null @@ -1,22 +0,0 @@ -// Observer Pattern Implementation: Module Deactivated -// Registration type: /mob/living/silicon/robot -// -// Raised when: A robot deactivates a module. -// -// Arguments that the called proc should expect: -// /mob/living/silicon/robot/robot: The robot that deactivated the module. -// /obj/item/module: The deactivated module. - -GLOBAL_DATUM_INIT(module_deactivated_event, /decl/observ/module_deactivated, new) - -/decl/observ/module_deactivated - name = "Module Deactivated" - expected_type = /mob/living/silicon/robot - -/****************************** -* Module Deactivated Handling * -******************************/ - -// Called from /mob/living/silicon/robot/proc/uneq_active -// and /mob/living/silicon/robot/proc/uneq_all -// in code/modules/mob/living/silicon/robot/inventory.dm \ No newline at end of file diff --git a/code/datums/observation/module_deselected.dm b/code/datums/observation/module_deselected.dm deleted file mode 100644 index 6e0001a30ef7d..0000000000000 --- a/code/datums/observation/module_deselected.dm +++ /dev/null @@ -1,21 +0,0 @@ -// Observer Pattern Implementation: Module Deselected -// Registration type: /mob/living/silicon/robot -// -// Raised when: A robot deselects a module. -// -// Arguments that the called proc should expect: -// /mob/living/silicon/robot/robot: The robot that deselected the module. -// /obj/item/module: The deselected module. - -GLOBAL_DATUM_INIT(module_deselected_event, /decl/observ/module_deselected, new) - -/decl/observ/module_deselected - name = "Module Deselected" - expected_type = /mob/living/silicon/robot - -/*************************** -* Module Selected Handling * -***************************/ - -// Called from /mob/living/silicon/robot/proc/deselect_module -// in code/modules/mob/living/silicon/robot/inventory.dm \ No newline at end of file diff --git a/code/datums/observation/module_selected.dm b/code/datums/observation/module_selected.dm deleted file mode 100644 index efed7b739ff83..0000000000000 --- a/code/datums/observation/module_selected.dm +++ /dev/null @@ -1,21 +0,0 @@ -// Observer Pattern Implementation: Module Selected -// Registration type: /mob/living/silicon/robot -// -// Raised when: A robot selects a module. -// -// Arguments that the called proc should expect: -// /mob/living/silicon/robot/robot: The robot that selected the module. -// /obj/item/module: The selected module. - -GLOBAL_DATUM_INIT(module_selected_event, /decl/observ/module_selected, new) - -/decl/observ/module_selected - name = "Module Selected" - expected_type = /mob/living/silicon/robot - -/*************************** -* Module Selected Handling * -***************************/ - -// Called from /mob/living/silicon/robot/proc/select_module -// in code/modules/mob/living/silicon/robot/inventory.dm \ No newline at end of file diff --git a/code/datums/observation/moved.dm b/code/datums/observation/moved.dm deleted file mode 100644 index 7ffc0c2948911..0000000000000 --- a/code/datums/observation/moved.dm +++ /dev/null @@ -1,39 +0,0 @@ -// Observer Pattern Implementation: Moved -// Registration type: /atom/movable -// -// Raised when: An /atom/movable instance has moved using Move() or forceMove(). -// -// Arguments that the called proc should expect: -// /atom/movable/moving_instance: The instance that moved -// /atom/old_loc: The loc before the move. -// /atom/new_loc: The loc after the move. - -GLOBAL_DATUM_INIT(moved_event, /decl/observ/moved, new) - -/decl/observ/moved - name = "Moved" - expected_type = /atom/movable - -/decl/observ/moved/register(var/atom/movable/mover, var/datum/listener, var/proc_call) - . = ..() - - // Listen to the parent if possible. - if(. && istype(mover.loc, expected_type)) - register(mover.loc, mover, /atom/movable/proc/recursive_move) - -/******************** -* Movement Handling * -********************/ - -/atom/Entered(var/atom/movable/am, var/atom/old_loc) - . = ..() - GLOB.moved_event.raise_event(am, old_loc, am.loc) - -/atom/movable/Entered(var/atom/movable/am, atom/old_loc) - . = ..() - if(GLOB.moved_event.has_listeners(am)) - GLOB.moved_event.register(src, am, /atom/movable/proc/recursive_move) - -/atom/movable/Exited(var/atom/movable/am, atom/new_loc) - . = ..() - GLOB.moved_event.unregister(src, am, /atom/movable/proc/recursive_move) diff --git a/code/datums/observation/name_set.dm b/code/datums/observation/name_set.dm deleted file mode 100644 index ee8dd74dd69b4..0000000000000 --- a/code/datums/observation/name_set.dm +++ /dev/null @@ -1,28 +0,0 @@ -// Observer Pattern Implementation: Name Set -// Registration type: /atom -// -// Raised when: An atom's name changes. -// -// Arguments that the called proc should expect: -// /atom/namee: The atom that had its name set -// /old_name: name before the change -// /new_name: name after the change - -GLOBAL_DATUM_INIT(name_set_event, /decl/observ/name_set, new) - -/decl/observ/name_set - name = "Name Set" - expected_type = /atom - -/********************* -* Name Set Handling * -*********************/ - -/atom/proc/SetName(var/new_name) - var/old_name = name - if(old_name != new_name) - name = new_name - if(has_extension(src, /datum/extension/labels)) - var/datum/extension/labels/L = get_extension(src, /datum/extension/labels) - name = L.AppendLabelsToName(name) - GLOB.name_set_event.raise_event(src, old_name, new_name) diff --git a/code/datums/observation/observation.dm b/code/datums/observation/observation.dm deleted file mode 100644 index 95cec1672f9f2..0000000000000 --- a/code/datums/observation/observation.dm +++ /dev/null @@ -1,239 +0,0 @@ -// -// Observer Pattern Implementation -// -// Implements a basic observer pattern with the following main procs: -// -// /decl/observ/proc/is_listening(var/event_source, var/datum/listener, var/proc_call) -// event_source: The instance which is generating events. -// listener: The instance which may be listening to events by event_source -// proc_call: Optional. The specific proc to call when the event is raised. -// -// Returns true if listener is listening for events by event_source, and proc_call supplied is either null or one of the proc that will be called when an event is raised. -// -// /decl/observ/proc/has_listeners(var/event_source) -// event_source: The instance which is generating events. -// -// Returns true if the given event_source has any listeners at all, globally or to specific event sources. -// -// /decl/observ/proc/register(var/event_source, var/datum/listener, var/proc_call) -// event_source: The instance you wish to receive events from. -// listener: The instance/owner of the proc to call when an event is raised by the event_source. -// proc_call: The proc to call when an event is raised. -// -// It is possible to register the same listener to the same event_source multiple times as long as it is using different proc_calls. -// Registering again using the same event_source, listener, and proc_call that has been registered previously will have no additional effect. -// I.e.: The proc_call will still only be called once per raised event. That particular proc_call will only have to be unregistered once. -// -// When proc_call is called the first argument is always the source of the event (event_source). -// Additional arguments may or may not be supplied, see individual event definition files (destroyed.dm, moved.dm, etc.) for details. -// -// The instance making the register() call is also responsible for calling unregister(), see below for additonal details, including when event_source is destroyed. -// This can be handled by listening to the event_source's destroyed event, unregistering in the listener's Destroy() proc, etc. -// -// /decl/observ/proc/unregister(var/event_source, var/datum/listener, var/proc_call) -// event_source: The instance you wish to stop receiving events from. -// listener: The instance which will no longer receive the events. -// proc_call: Optional: The proc_call to unregister. -// -// Unregisters the listener from the event_source. -// If a proc_call has been supplied only that particular proc_call will be unregistered. If the proc_call isn't currently registered there will be no effect. -// If no proc_call has been supplied, the listener will have all registrations made to the given event_source undone. -// -// /decl/observ/proc/register_global(var/datum/listener, var/proc_call) -// listener: The instance/owner of the proc to call when an event is raised by any and all sources. -// proc_call: The proc to call when an event is raised. -// -// Works very much the same as register(), only the listener/proc_call will receive all relevant events from all event sources. -// Global registrations can overlap with registrations made to specific event sources and these will not affect each other. -// -// /decl/observ/proc/unregister_global(var/datum/listener, var/proc_call) -// listener: The instance/owner of the proc which will no longer receive the events. -// proc_call: Optional: The proc_call to unregister. -// -// Works very much the same as unregister(), only it undoes global registrations instead. -// -// /decl/observ/proc/raise_event(src, ...) -// Should never be called unless implementing a new event type. -// The first argument shall always be the event_source belonging to the event. Beyond that there are no restrictions. - -/decl/observ - var/name = "Unnamed Event" // The name of this event, used mainly for debug/VV purposes. The list of event managers can be reached through the "Debug Controller" verb, selecting the "Observation" entry. - var/expected_type = /datum // The expected event source for this event. register() will CRASH() if it receives an unexpected type. - var/list/event_sources = list() // Associative list of event sources, each with their own associative list. This associative list contains an instance/list of procs to call when the event is raised. - var/list/global_listeners = list() // Associative list of instances that listen to all events of this type (as opposed to events belonging to a specific source) and the proc to call. - -/decl/observ/New() - GLOB.all_observable_events += src - ..() - -/decl/observ/proc/is_listening(var/event_source, var/datum/listener, var/proc_call) - // Return whether there are global listeners unless the event source is given. - if (!event_source) - return !!global_listeners.len - - // Return whether anything is listening to a source, if no listener is given. - if (!listener) - return global_listeners.len || event_sources[event_source] - - // Return false if nothing is associated with that source. - if (!event_sources[event_source]) - return FALSE - - // Get and check the listeners for the reuqested event. - var/listeners = event_sources[event_source] - if (!listeners[listener]) - return FALSE - - // Return true unless a specific callback needs checked. - if (!proc_call) - return TRUE - - // Check if the specific callback exists. - var/list/callback = listeners[listener] - if (!callback) - return FALSE - - return (proc_call in callback) - -/decl/observ/proc/has_listeners(var/event_source) - return is_listening(event_source) - -/decl/observ/proc/register(var/datum/event_source, var/datum/listener, var/proc_call) - // Sanity checking. - if (!(event_source && listener && proc_call)) - return FALSE - if (istype(event_source, /decl/observ)) - return FALSE - - // Crash if the event source is the wrong type. - if (!istype(event_source, expected_type)) - CRASH("Unexpected type. Expected [expected_type], was [event_source.type]") - - // Setup the listeners for this source if needed. - var/list/listeners = event_sources[event_source] - if (!listeners) - listeners = list() - event_sources[event_source] = listeners - - // Make sure the callbacks are a list. - var/list/callbacks = listeners[listener] - if (!callbacks) - callbacks = list() - listeners[listener] = callbacks - - // If the proc_call is already registered skip - if(proc_call in callbacks) - return FALSE - - // Add the callback, and return true. - callbacks += proc_call - return TRUE - -/decl/observ/proc/unregister(var/event_source, var/datum/listener, var/proc_call) - // Sanity. - if (!event_source || !listener || !event_sources[event_source]) - return FALSE - - // Return false if nothing is listening for this event. - var/list/listeners = event_sources[event_source] - if (!listeners) - return FALSE - - // Remove all callbacks if no specific one is given. - if (!proc_call) - if(listeners.Remove(listener)) - // Perform some cleanup and return true. - if (!listeners.len) - event_sources -= event_source - return TRUE - return FALSE - - // See if the listener is registered. - var/list/callbacks = listeners[listener] - if (!callbacks) - return FALSE - - // See if the callback exists. - if(!callbacks.Remove(proc_call)) - return FALSE - - if (!callbacks.len) - listeners -= listener - if (!listeners.len) - event_sources -= event_source - return TRUE - -/decl/observ/proc/register_global(var/datum/listener, var/proc_call) - // Sanity. - if (!(listener && proc_call)) - return FALSE - - // Make sure the callbacks are setup. - var/list/callbacks = global_listeners[listener] - if (!callbacks) - callbacks = list() - global_listeners[listener] = callbacks - - // Add the callback and return true. - callbacks |= proc_call - return TRUE - -/decl/observ/proc/unregister_global(var/datum/listener, var/proc_call) - // Return false unless the listener is set as a global listener. - if (!(listener && global_listeners[listener])) - return FALSE - - // Remove all callbacks if no specific one is given. - if (!proc_call) - global_listeners -= listener - return TRUE - - // See if the listener is registered. - var/list/callbacks = global_listeners[listener] - if (!callbacks) - return FALSE - - // See if the callback exists. - if(!callbacks.Remove(proc_call)) - return FALSE - - if (!callbacks.len) - global_listeners -= listener - return TRUE - -/decl/observ/proc/raise_event() - // Sanity - if (!args.len) - return FALSE - - if (global_listeners.len) - // Call the global listeners. - for (var/listener in global_listeners) - var/list/callbacks = global_listeners[listener] - for (var/proc_call in callbacks) - - // If the callback crashes, record the error and remove it. - try - call(listener, proc_call)(arglist(args)) - catch (var/exception/e) - error("[e.name] - [e.file] - [e.line]") - error(e.desc) - unregister_global(listener, proc_call) - - // Call the listeners for this specific event source, if they exist. - var/source = args[1] - if (source && event_sources[source]) - var/list/listeners = event_sources[source] - for (var/listener in listeners) - var/list/callbacks = listeners[listener] - for (var/proc_call in callbacks) - - // If the callback crashes, record the error and remove it. - try - call(listener, proc_call)(arglist(args)) - catch (var/exception/e) - error("[e.name] - [e.file] - [e.line]") - error(e.desc) - unregister(source, listener, proc_call) - - return TRUE diff --git a/code/datums/observation/opacity_set.dm b/code/datums/observation/opacity_set.dm deleted file mode 100644 index 6aa53c6e96791..0000000000000 --- a/code/datums/observation/opacity_set.dm +++ /dev/null @@ -1,34 +0,0 @@ -// Observer Pattern Implementation: Opacity Set -// Registration type: /atom -// -// Raised when: An /atom changes opacity using the set_opacity() proc. -// -// Arguments that the called proc should expect: -// /atom/dir_changer: The instance that changed opacity -// /old_opacity: The opacity before the change. -// /new_opacity: The opacity after the change. - -GLOBAL_DATUM_INIT(opacity_set_event, /decl/observ/opacity_set, new) - -/decl/observ/opacity_set - name = "Opacity Set" - expected_type = /atom - -/******************* -* Opacity Handling * -*******************/ -/atom/proc/set_opacity(new_opacity) - if(new_opacity != opacity) - var/old_opacity = opacity - opacity = new_opacity - GLOB.opacity_set_event.raise_event(src, old_opacity, new_opacity) - if (isturf(loc)) - var/turf/T = loc - if (opacity) - T.has_opaque_atom = TRUE - else - T.has_opaque_atom = null - - return TRUE - else - return FALSE diff --git a/code/datums/observation/see_in_dark_set.dm b/code/datums/observation/see_in_dark_set.dm deleted file mode 100644 index 15f06999ec248..0000000000000 --- a/code/datums/observation/see_in_dark_set.dm +++ /dev/null @@ -1,25 +0,0 @@ -// Observer Pattern Implementation: See In Dark Set -// Registration type: /mob -// -// Raised when: A mob's see_in_dark value changes. -// -// Arguments that the called proc should expect: -// /mob/sightee: The mob that had its see_in_dark set -// /old_see_in_dark: see_in_dark before the change -// /new_see_in_dark: see_in_dark after the change - -GLOBAL_DATUM_INIT(see_in_dark_set_event, /decl/observ/see_in_dark_set, new) - -/decl/observ/see_in_dark_set - name = "See In Dark Set" - expected_type = /mob - -/*************************** -* See In Dark Set Handling * -***************************/ - -/mob/proc/set_see_in_dark(var/new_see_in_dark) - var/old_see_in_dark = sight - if(old_see_in_dark != new_see_in_dark) - see_in_dark = new_see_in_dark - GLOB.see_in_dark_set_event.raise_event(src, old_see_in_dark, new_see_in_dark) diff --git a/code/datums/observation/see_invisible_set.dm b/code/datums/observation/see_invisible_set.dm deleted file mode 100644 index cdce96bc25fd1..0000000000000 --- a/code/datums/observation/see_invisible_set.dm +++ /dev/null @@ -1,25 +0,0 @@ -// Observer Pattern Implementation: See Invisible Set -// Registration type: /mob -// -// Raised when: A mob's see_invisible value changes. -// -// Arguments that the called proc should expect: -// /mob/sightee: The mob that had its sight set -// /old_see_invisible: see_invisible before the change -// /new_see_invisible: see_invisible after the change - -GLOBAL_DATUM_INIT(see_invisible_set_event, /decl/observ/see_invisible_set, new) - -/decl/observ/see_invisible_set - name = "See Invisible Set" - expected_type = /mob - -/***************************** -* See Invisible Set Handling * -*****************************/ - -/mob/proc/set_see_invisible(var/new_see_invisible) - var/old_see_invisible = see_invisible - if(old_see_invisible != new_see_invisible) - see_invisible = new_see_invisible - GLOB.see_invisible_set_event.raise_event(src, old_see_invisible, new_see_invisible) diff --git a/code/datums/observation/set_invisibility.dm b/code/datums/observation/set_invisibility.dm deleted file mode 100644 index 1d2c2fd1d3f69..0000000000000 --- a/code/datums/observation/set_invisibility.dm +++ /dev/null @@ -1,26 +0,0 @@ -// Observer Pattern Implementation: Invisibility Set -// Registration type: /atom -// -// Raised when: An atom's invisiblity value is changed. -// -// Arguments that the called proc should expect: -// /atom/invisibilee: The atom that had its invisibility set -// /old_invisibility: invisibility before the change -// /new_invisibility: invisibility after the change - -GLOBAL_DATUM_INIT(invisibility_set_event, /decl/observ/invisibility_set, new) - -/decl/observ/invisibility_set - name = "Invisibility Set" - expected_type = /atom - -/***************************** -* Invisibility Set Handling * -*****************************/ - -/atom/proc/set_invisibility(var/new_invisibility = 0) - var/old_invisibility = invisibility - if(old_invisibility != new_invisibility) - invisibility = new_invisibility - GLOB.invisibility_set_event.raise_event(src, old_invisibility, new_invisibility) - diff --git a/code/datums/observation/shuttle_added.dm b/code/datums/observation/shuttle_added.dm deleted file mode 100644 index 0acf5a61c8714..0000000000000 --- a/code/datums/observation/shuttle_added.dm +++ /dev/null @@ -1,22 +0,0 @@ -// Observer Pattern Implementation: Shuttle Added -// Registration type: /datum/shuttle (register for the global event only) -// -// Raised when: After a shuttle is initialized. -// -// Arguments that the called proc should expect: -// /datum/shuttle/shuttle: the new shuttle - -GLOBAL_DATUM_INIT(shuttle_added, /decl/observ/shuttle_added, new) - -/decl/observ/shuttle_added - name = "Shuttle Added" - expected_type = /datum/shuttle - -/***************************** -* Shuttle Added Handling * -*****************************/ - -/datum/controller/subsystem/shuttle/initialize_shuttle() - . = ..() - if(.) - GLOB.shuttle_added.raise_event(.) \ No newline at end of file diff --git a/code/datums/observation/shuttle_moved.dm b/code/datums/observation/shuttle_moved.dm deleted file mode 100644 index 35bff0d6b9232..0000000000000 --- a/code/datums/observation/shuttle_moved.dm +++ /dev/null @@ -1,38 +0,0 @@ -// Observer Pattern Implementation: Shuttle Moved -// Registration type: /datum/shuttle/autodock -// -// Raised when: A shuttle has moved to a new landmark. -// -// Arguments that the called proc should expect: -// /datum/shuttle/shuttle: the shuttle moving -// /obj/effect/shuttle_landmark/old_location: the old location's shuttle landmark -// /obj/effect/shuttle_landmark/new_location: the new location's shuttle landmark - -// Observer Pattern Implementation: Shuttle Pre Move -// Registration type: /datum/shuttle/autodock -// -// Raised when: A shuttle is about to move to a new landmark. -// -// Arguments that the called proc should expect: -// /datum/shuttle/shuttle: the shuttle moving -// /obj/effect/shuttle_landmark/old_location: the old location's shuttle landmark -// /obj/effect/shuttle_landmark/new_location: the new location's shuttle landmark - -GLOBAL_DATUM_INIT(shuttle_moved_event, /decl/observ/shuttle_moved, new) - -/decl/observ/shuttle_moved - name = "Shuttle Moved" - expected_type = /datum/shuttle - -GLOBAL_DATUM_INIT(shuttle_pre_move_event, /decl/observ/shuttle_pre_move, new) - -/decl/observ/shuttle_pre_move - name = "Shuttle Pre Move" - expected_type = /datum/shuttle - -/***************** -* Shuttle Moved/Pre Move Handling * -*****************/ - -// Located in modules/shuttle/shuttle.dm -// Proc: /datum/shuttle/proc/attempt_move() \ No newline at end of file diff --git a/code/datums/observation/sight_set.dm b/code/datums/observation/sight_set.dm deleted file mode 100644 index 0810c84a8b31c..0000000000000 --- a/code/datums/observation/sight_set.dm +++ /dev/null @@ -1,25 +0,0 @@ -// Observer Pattern Implementation: Sight Set -// Registration type: /mob -// -// Raised when: A mob's sight value changes. -// -// Arguments that the called proc should expect: -// /mob/sightee: The mob that had its sight set -// /old_sight: sight before the change -// /new_sight: sight after the change - -GLOBAL_DATUM_INIT(sight_set_event, /decl/observ/sight_set, new) - -/decl/observ/sight_set - name = "Sight Set" - expected_type = /mob - -/********************* -* Sight Set Handling * -*********************/ - -/mob/proc/set_sight(var/new_sight) - var/old_sight = sight - if(old_sight != new_sight) - sight = new_sight - GLOB.sight_set_event.raise_event(src, old_sight, new_sight) diff --git a/code/datums/observation/stat_set.dm b/code/datums/observation/stat_set.dm deleted file mode 100644 index b980d06eccc56..0000000000000 --- a/code/datums/observation/stat_set.dm +++ /dev/null @@ -1,24 +0,0 @@ -// Observer Pattern Implementation: Stat Set -// Registration type: /mob/living -// -// Raised when: A /mob/living changes stat, using the set_stat() proc -// -// Arguments that the called proc should expect: -// /mob/living/stat_mob: The mob whose stat changed -// /old_stat: Status before the change. -// /new_stat: Status after the change. - -GLOBAL_DATUM_INIT(stat_set_event, /decl/observ/stat_set, new) - -/decl/observ/stat_set - name = "Stat Set" - expected_type = /mob/living - -/**************** -* Stat Handling * -****************/ -/mob/living/set_stat(var/new_stat) - var/old_stat = stat - . = ..() - if(stat != old_stat) - GLOB.stat_set_event.raise_event(src, old_stat, new_stat) diff --git a/code/datums/observation/supermatter_status.dm b/code/datums/observation/supermatter_status.dm deleted file mode 100644 index 842fcc3f9bc8d..0000000000000 --- a/code/datums/observation/supermatter_status.dm +++ /dev/null @@ -1,14 +0,0 @@ -// Observer Pattern Implementation: Supermatter status changed -// Registration type: /datum/supermatter (register for the global event only) -// -// Raised when: After a supermatter shard changes status -// -// Arguments that the called proc should expect: -// /obj/machinery/power/supermatter: the shard -// danger : True or false depending on if shard has crossed warning treshold (or if it is being removed and no longer matters) - -GLOBAL_DATUM_INIT(supermatter_status, /decl/observ/supermatter_status, new) - -/decl/observ/supermatter_status - name = "Supermatter status changed" - expected_type = /obj/machinery/power/supermatter diff --git a/code/datums/observation/turf_changed.dm b/code/datums/observation/turf_changed.dm deleted file mode 100644 index a698d96e4d025..0000000000000 --- a/code/datums/observation/turf_changed.dm +++ /dev/null @@ -1,17 +0,0 @@ -// Observer Pattern Implementation: Turf Changed -// Registration type: /turf -// -// Raised when: A turf has been changed using the ChangeTurf proc. -// -// Arguments that the called proc should expect: -// /turf/affected: The turf that has changed -// /old_density: Density before the change -// /new_density: Density after the change -// /old_opacity: Opacity before the change -// /new_opacity: Opacity after the change - -GLOBAL_DATUM_INIT(turf_changed_event, /decl/observ/turf_changed, new) - -/decl/observ/turf_changed - name = "Turf Changed" - expected_type = /turf diff --git a/code/datums/observation/unequipped.dm b/code/datums/observation/unequipped.dm deleted file mode 100644 index 6b42f584cae63..0000000000000 --- a/code/datums/observation/unequipped.dm +++ /dev/null @@ -1,38 +0,0 @@ -// Observer Pattern Implementation: Unequipped (dropped) -// Registration type: /mob -// -// Raised when: A mob unequips/drops an item. -// -// Arguments that the called proc should expect: -// /mob/equipped: The mob that unequipped/dropped the item. -// /obj/item/item: The unequipped item. - -GLOBAL_DATUM_INIT(mob_unequipped_event, /decl/observ/mob_unequipped, new) - -/decl/observ/mob_unequipped - name = "Mob Unequipped" - expected_type = /mob - -// Observer Pattern Implementation: Unequipped (dropped) -// Registration type: /obj/item -// -// Raised when: A mob unequips/drops an item. -// -// Arguments that the called proc should expect: -// /obj/item/item: The unequipped item. -// /mob/equipped: The mob that unequipped/dropped the item. - -GLOBAL_DATUM_INIT(item_unequipped_event, /decl/observ/item_unequipped, new) - -/decl/observ/item_unequipped - name = "Item Unequipped" - expected_type = /obj/item - -/********************** -* Unequipped Handling * -**********************/ - -/obj/item/dropped(var/mob/user) - UNLINT(..()) - GLOB.mob_unequipped_event.raise_event(user, src) - GLOB.item_unequipped_event.raise_event(src, user) diff --git a/code/datums/observation/zone_selected.dm b/code/datums/observation/zone_selected.dm deleted file mode 100644 index 482a778b5db8a..0000000000000 --- a/code/datums/observation/zone_selected.dm +++ /dev/null @@ -1,25 +0,0 @@ -// Observer Pattern Implementation: Zone Selected -// Registration type: /obj/screen/zone_sel -// -// Raised when: A /obj/screen/zone_sel had its selected zone modified. -// -// Arguments that the called proc should expect: -// /obj/screen/zone_sel: the -// old_zone: the previously selected zone -// new_zone: the newly selected zone -// - -GLOBAL_DATUM_INIT(zone_selected_event, /decl/observ/zone_selected, new) - -/decl/observ/zone_selected - name = "Zone Selected" - expected_type = /obj/screen/zone_sel - -/******************* -* Zone Selected Handling * -*******************/ - -/obj/screen/zone_sel/set_selected_zone(bodypart) - var/old_selecting = selecting - if((. = ..())) - GLOB.zone_selected_event.raise_event(src, old_selecting, selecting) \ No newline at end of file diff --git a/code/datums/observation/~cleanup.dm b/code/datums/observation/~cleanup.dm deleted file mode 100644 index 8131ad6d7f29f..0000000000000 --- a/code/datums/observation/~cleanup.dm +++ /dev/null @@ -1,71 +0,0 @@ -GLOBAL_LIST_EMPTY(global_listen_count) -GLOBAL_LIST_EMPTY(event_sources_count) -GLOBAL_LIST_EMPTY(event_listen_count) - -/proc/cleanup_events(var/source) - if(GLOB.global_listen_count && GLOB.global_listen_count[source]) - cleanup_global_listener(source, GLOB.global_listen_count[source]) - if(GLOB.event_sources_count && GLOB.event_sources_count[source]) - cleanup_source_listeners(source, GLOB.event_sources_count[source]) - if(GLOB.event_listen_count && GLOB.event_listen_count[source]) - cleanup_event_listener(source, GLOB.event_listen_count[source]) - -/decl/observ/register(var/datum/event_source, var/datum/listener, var/proc_call) - . = ..() - if(.) - GLOB.event_sources_count[event_source] += 1 - GLOB.event_listen_count[listener] += 1 - -/decl/observ/unregister(var/datum/event_source, var/datum/listener, var/proc_call) - . = ..() - if(.) - GLOB.event_sources_count[event_source] -= 1 - GLOB.event_listen_count[listener] -= 1 - - if(GLOB.event_sources_count[event_source] <= 0) - GLOB.event_sources_count -= event_source - if(GLOB.event_listen_count[listener] <= 0) - GLOB.event_listen_count -= listener - -/decl/observ/register_global(var/datum/listener, var/proc_call) - . = ..() - if(.) - GLOB.global_listen_count[listener] += 1 - -/decl/observ/unregister_global(var/datum/listener, var/proc_call) - . = ..() - if(.) - GLOB.global_listen_count[listener] -= 1 - if(GLOB.global_listen_count[listener] <= 0) - GLOB.global_listen_count -= listener - -/proc/cleanup_global_listener(listener, listen_count) - GLOB.global_listen_count -= listener - for(var/entry in GLOB.all_observable_events) - var/decl/observ/event = entry - if(event.unregister_global(listener)) - log_debug("[event] - [listener] was deleted while still registered to global events.") - if(!(--listen_count)) - return - -/proc/cleanup_source_listeners(event_source, source_listener_count) - GLOB.event_sources_count -= event_source - for(var/entry in GLOB.all_observable_events) - var/decl/observ/event = entry - var/proc_owners = event.event_sources[event_source] - if(proc_owners) - for(var/proc_owner in proc_owners) - if(event.unregister(event_source, proc_owner)) - log_debug("[event] - [event_source] was deleted while still being listened to by [proc_owner].") - if(!(--source_listener_count)) - return - -/proc/cleanup_event_listener(listener, listener_count) - GLOB.event_listen_count -= listener - for(var/entry in GLOB.all_observable_events) - var/decl/observ/event = entry - for(var/event_source in event.event_sources) - if(event.unregister(event_source, listener)) - log_debug("[event] - [listener] was deleted while still listening to [event_source].") - if(!(--listener_count)) - return diff --git a/code/datums/outfits/_defines.dm b/code/datums/outfits/_defines.dm deleted file mode 100644 index d69ce96eee4a1..0000000000000 --- a/code/datums/outfits/_defines.dm +++ /dev/null @@ -1,17 +0,0 @@ -#define OUTFIT_NONE EMPTY_BITFIELD -#define OUTFIT_HAS_JETPACK FLAG(0) -#define OUTFIT_HAS_BACKPACK FLAG(1) -#define OUTFIT_EXTENDED_SURVIVAL FLAG(2) -#define OUTFIT_RESET_EQUIPMENT FLAG(3) -#define OUTFIT_USES_ACCOUNT FLAG(4) -#define OUTFIT_USES_EMAIL FLAG(5) - -#define OUTFIT_FLAGS_JOB_DEFAULT (OUTFIT_HAS_BACKPACK | OUTFIT_USES_ACCOUNT | OUTFIT_USES_EMAIL) - -#define OUTFIT_ADJUSTMENT_SKIP_POST_EQUIP FLAG(0) -#define OUTFIT_ADJUSTMENT_SKIP_SURVIVAL_GEAR FLAG(1) -#define OUTFIT_ADJUSTMENT_SKIP_ID_PDA FLAG(2) -#define OUTFIT_ADJUSTMENT_PLAIN_HEADSET FLAG(3) -#define OUTFIT_ADJUSTMENT_SKIP_BACKPACK FLAG(4) - -#define OUTFIT_ADJUSTMENT_ALL_SKIPS (OUTFIT_ADJUSTMENT_SKIP_POST_EQUIP|OUTFIT_ADJUSTMENT_SKIP_SURVIVAL_GEAR|OUTFIT_ADJUSTMENT_SKIP_ID_PDA|OUTFIT_ADJUSTMENT_SKIP_BACKPACK) diff --git a/code/datums/outfits/equipment/backpacks.dm b/code/datums/outfits/equipment/backpacks.dm deleted file mode 100644 index 4361418217319..0000000000000 --- a/code/datums/outfits/equipment/backpacks.dm +++ /dev/null @@ -1,184 +0,0 @@ -#define BACKPACK_HAS_TYPE_SELECTION 1 -#define BACKPACK_HAS_SUBTYPE_SELECTION 2 - -/******************* -* Outfit Backpacks * -*******************/ - -/* Setup new backpacks here */ -/decl/backpack_outfit/nothing - name = "Nothing" - -/decl/backpack_outfit/nothing/spawn_backpack(var/location, var/metadata, var/desired_type) - return - -/decl/backpack_outfit/backpack - name = "Backpack" - path = /obj/item/storage/backpack - is_default = TRUE - -/decl/backpack_outfit/rucksack - name = "Rucksack" - path = /obj/item/storage/backpack/rucksack - flags = BACKPACK_HAS_TYPE_SELECTION - -/decl/backpack_outfit/satchel - name = "Satchel" - path = /obj/item/storage/backpack/satchel - -/decl/backpack_outfit/satchel/New() - ..() - tweaks += new/datum/backpack_tweak/selection/specified_types_as_list(typesof(/obj/item/storage/backpack/satchel/leather) + /obj/item/storage/backpack/satchel/grey) - -/decl/backpack_outfit/messenger_bag - name = "Messenger bag" - path = /obj/item/storage/backpack/messenger - -/decl/backpack_outfit/pocketbook - name = "Pocketbook" - path = /obj/item/storage/backpack/satchel/pocketbook - flags = BACKPACK_HAS_TYPE_SELECTION - -/* Code */ -/decl/backpack_outfit - var/flags - var/name - var/path - var/is_default = FALSE - var/list/tweaks - -/decl/backpack_outfit/New() - tweaks = tweaks || list() - - if(HAS_FLAGS(flags, BACKPACK_HAS_TYPE_SELECTION|BACKPACK_HAS_SUBTYPE_SELECTION)) - CRASH("May not have both type and subtype selection tweaks") - - if(flags & BACKPACK_HAS_TYPE_SELECTION) - tweaks += new/datum/backpack_tweak/selection/types(path) - if(flags & BACKPACK_HAS_SUBTYPE_SELECTION) - tweaks += new/datum/backpack_tweak/selection/subtypes(path) - -/decl/backpack_outfit/proc/spawn_backpack(var/location, var/metadata, var/desired_type) - metadata = metadata || list() - desired_type = desired_type || path - for(var/t in tweaks) - var/datum/backpack_tweak/bt = t - var/tweak_metadata = metadata["[bt]"] || bt.get_default_metadata() - desired_type = bt.get_backpack_type(desired_type, tweak_metadata) - - . = new desired_type(location) - - for(var/t in tweaks) - var/datum/backpack_tweak/bt = t - var/tweak_metadata = metadata["[bt]"] - bt.tweak_backpack(., tweak_metadata) - -/****************** -* Backpack Tweaks * -******************/ -/datum/backpack_tweak/proc/get_ui_content(var/metadata) - return "" - -/datum/backpack_tweak/proc/get_default_metadata() - return - -/datum/backpack_tweak/proc/get_metadata(var/user, var/metadata, var/title = CHARACTER_PREFERENCE_INPUT_TITLE) - return - -/datum/backpack_tweak/proc/validate_metadata(var/metadata) - return get_default_metadata() - -/datum/backpack_tweak/proc/get_backpack_type(var/given_backpack_type) - return given_backpack_type - -/datum/backpack_tweak/proc/tweak_backpack(var/obj/item/storage/backpack/backpack, var/metadata) - return - - -/* Selection Tweak */ -/datum/backpack_tweak/selection - var/const/RETURN_GIVEN_BACKPACK = "default" - var/const/RETURN_RANDOM_BACKPACK = "random" - var/list/selections - -/datum/backpack_tweak/selection/New(var/list/selections) - if(!selections.len) - CRASH("No selections offered") - if(RETURN_GIVEN_BACKPACK in selections) - CRASH("May not use the keyword '[RETURN_GIVEN_BACKPACK]'") - if(RETURN_RANDOM_BACKPACK in selections) - CRASH("May not use the keyword '[RETURN_RANDOM_BACKPACK]'") - var/list/duplicate_keys = duplicates(selections) - if(duplicate_keys.len) - CRASH("Duplicate names found: [english_list(duplicate_keys)]") - var/list/duplicate_values = duplicates(list_values(selections)) - if(duplicate_values.len) - CRASH("Duplicate types found: [english_list(duplicate_values)]") - for(var/selection_key in selections) - if(!istext(selection_key)) - CRASH("Expected a valid selection key, was [log_info_line(selection_key)]") - var/selection_type = selections[selection_key] - if(!ispath(selection_type, /obj/item/storage/backpack)) - CRASH("Expected a valid selection value, was [log_info_line(selection_type)]") - - src.selections = selections - selections += RETURN_GIVEN_BACKPACK - selections += RETURN_RANDOM_BACKPACK - -/datum/backpack_tweak/selection/get_ui_content(var/metadata) - return "Type: [metadata]" - -/datum/backpack_tweak/selection/get_default_metadata() - return RETURN_GIVEN_BACKPACK - -/datum/backpack_tweak/selection/validate_metadata(var/metadata) - return (metadata in selections) ? metadata : ..() - -/datum/backpack_tweak/selection/get_metadata(var/user, var/metadata, var/title = CHARACTER_PREFERENCE_INPUT_TITLE) - return input(user, "Choose a type.", title, metadata) as null|anything in selections - -/datum/backpack_tweak/selection/get_backpack_type(var/given_backpack_type, var/metadata) - switch(metadata) - if(RETURN_GIVEN_BACKPACK) - return given_backpack_type - if(RETURN_RANDOM_BACKPACK) - var/random_choice = pick(selections - RETURN_RANDOM_BACKPACK) - return get_backpack_type(given_backpack_type, random_choice) - else - return selections[metadata] - -/datum/backpack_tweak/selection/types/New(var/selection_type) - ..(atomtype2nameassoclist(selection_type)) - -/datum/backpack_tweak/selection/subtypes/New(var/selection_type) - ..(atomtypes2nameassoclist(subtypesof(selection_type))) - -/datum/backpack_tweak/selection/specified_types_as_list/New(var/selection_list) - ..(atomtypes2nameassoclist(selection_list)) - -/datum/backpack_tweak/selection/specified_types_as_args/New() - ..(atomtypes2nameassoclist(args)) - -/****************** -* Character setup * -*******************/ -/datum/backpack_setup - var/decl/backpack_outfit/backpack - var/metadata - -/datum/backpack_setup/New(var/backpack, var/metadata) - src.backpack = backpack - src.metadata = metadata - -/********** -* Helpers * -**********/ -/proc/get_default_outfit_backpack() - var backpacks = decls_repository.get_decls_of_subtype(/decl/backpack_outfit) - for(var/backpack in backpacks) - var/decl/backpack_outfit/bo = backpacks[backpack] - if(bo.is_default) - return bo - -#undef BACKPACK_HAS_TYPE_SELECTION -#undef BACKPACK_HAS_SUBTYPE_SELECTION diff --git a/code/datums/outfits/horror_killers.dm b/code/datums/outfits/horror_killers.dm deleted file mode 100644 index 73e9fa573bcdb..0000000000000 --- a/code/datums/outfits/horror_killers.dm +++ /dev/null @@ -1,63 +0,0 @@ -/decl/hierarchy/outfit/tunnel_clown - name = "Tunnel clown" - uniform = /obj/item/clothing/under/rank/clown - shoes = /obj/item/clothing/shoes/clown_shoes - gloves = /obj/item/clothing/gloves/thick - mask = /obj/item/clothing/mask/gas/clown_hat - head = /obj/item/clothing/head/chaplain_hood - l_ear = /obj/item/device/radio/headset - glasses = /obj/item/clothing/glasses/thermal/plain/monocle - suit = /obj/item/clothing/suit/chaplain_hoodie - r_pocket = /obj/item/bikehorn - r_hand = /obj/item/material/twohanded/fireaxe - - id_slot = slot_wear_id - id_types = list(/obj/item/card/id/centcom/station) - id_pda_assignment = "Tunnel Clown!" - -/decl/hierarchy/outfit/masked_killer - name = "Masked killer" - uniform = /obj/item/clothing/under/overalls - shoes = /obj/item/clothing/shoes/white - gloves = /obj/item/clothing/gloves/latex - mask = /obj/item/clothing/mask/surgical - head = /obj/item/clothing/head/welding - l_ear = /obj/item/device/radio/headset - glasses = /obj/item/clothing/glasses/thermal/plain/monocle - suit = /obj/item/clothing/suit/apron - l_pocket = /obj/item/material/knife/combat - r_pocket = /obj/item/scalpel - r_hand = /obj/item/material/twohanded/fireaxe - -/decl/hierarchy/outfit/masked_killer/post_equip(var/mob/living/carbon/human/H) - ..() - var/victim = get_mannequin(H.ckey) - for(var/obj/item/carried_item in H.get_equipped_items(TRUE)) - carried_item.add_blood(victim) //Oh yes, there will be blood.. just not blood from the killer because that's odd - -/decl/hierarchy/outfit/reaper - name = "Reaper" - uniform = /obj/item/clothing/under/suit_jacket{ accessories=list(/obj/item/clothing/accessory/waistcoat/black) } - shoes = /obj/item/clothing/shoes/black - gloves = /obj/item/clothing/gloves/thick - l_ear = /obj/item/device/radio/headset - glasses = /obj/item/clothing/glasses/sunglasses - l_pocket = /obj/item/melee/energy/sword - - id_slot = slot_wear_id - id_types = list(/obj/item/card/id/syndicate/station_access) - pda_slot = slot_belt - pda_type = /obj/item/modular_computer/pda/heads - -/decl/hierarchy/outfit/reaper/post_equip(var/mob/living/carbon/human/H) - ..() - var/obj/item/storage/secure/briefcase/sec_briefcase = new(H) - for(var/obj/item/briefcase_item in sec_briefcase) - qdel(briefcase_item) - for(var/i=3, i>0, i--) - new /obj/item/spacecash/bundle/c1000(sec_briefcase) - new /obj/item/gun/energy/crossbow(sec_briefcase) - new /obj/item/gun/projectile/revolver(sec_briefcase) - new /obj/item/ammo_magazine/speedloader/magnum(sec_briefcase) - new /obj/item/plastique(sec_briefcase) - H.equip_to_slot_or_del(sec_briefcase, slot_l_hand) diff --git a/code/datums/outfits/jobs/_defines.dm b/code/datums/outfits/jobs/_defines.dm deleted file mode 100644 index 7ebec214b078f..0000000000000 --- a/code/datums/outfits/jobs/_defines.dm +++ /dev/null @@ -1,41 +0,0 @@ -#define OUTFIT_JOB_NAME(job_name) ("Job - " + job_name) - -#define BACKPACK_OVERRIDE_CHEMISTRY \ -backpack_overrides[/decl/backpack_outfit/backpack] = /obj/item/storage/backpack/chemistry; \ -backpack_overrides[/decl/backpack_outfit/satchel] = /obj/item/storage/backpack/satchel/chem; \ -backpack_overrides[/decl/backpack_outfit/messenger_bag] = /obj/item/storage/backpack/messenger/chem; - -#define BACKPACK_OVERRIDE_ENGINEERING \ -backpack_overrides[/decl/backpack_outfit/backpack] = /obj/item/storage/backpack/industrial; \ -backpack_overrides[/decl/backpack_outfit/satchel] = /obj/item/storage/backpack/satchel/eng; \ -backpack_overrides[/decl/backpack_outfit/messenger_bag] = /obj/item/storage/backpack/messenger/engi; - -#define BACKPACK_OVERRIDE_MEDICAL \ -backpack_overrides[/decl/backpack_outfit/backpack] = /obj/item/storage/backpack/medic; \ -backpack_overrides[/decl/backpack_outfit/satchel] = /obj/item/storage/backpack/satchel/med; \ -backpack_overrides[/decl/backpack_outfit/messenger_bag] = /obj/item/storage/backpack/messenger/med; - -#define BACKPACK_OVERRIDE_RESEARCH \ -backpack_overrides[/decl/backpack_outfit/backpack] = /obj/item/storage/backpack/toxins; \ -backpack_overrides[/decl/backpack_outfit/satchel] = /obj/item/storage/backpack/satchel/tox; \ -backpack_overrides[/decl/backpack_outfit/messenger_bag] = /obj/item/storage/backpack/messenger/viro; - -#define BACKPACK_OVERRIDE_SECURITY \ -backpack_overrides[/decl/backpack_outfit/backpack] = /obj/item/storage/backpack/security; \ -backpack_overrides[/decl/backpack_outfit/satchel] = /obj/item/storage/backpack/satchel/sec; \ -backpack_overrides[/decl/backpack_outfit/messenger_bag] = /obj/item/storage/backpack/messenger/sec; - -#define BACKPACK_OVERRIDE_SECURITY_EXO \ -backpack_overrides[/decl/backpack_outfit/backpack] = /obj/item/storage/backpack/security/exo; \ -backpack_overrides[/decl/backpack_outfit/satchel] = /obj/item/storage/backpack/satchel/sec/exo; \ -backpack_overrides[/decl/backpack_outfit/messenger_bag] = /obj/item/storage/backpack/messenger/sec/exo; - -#define BACKPACK_OVERRIDE_VIROLOGY \ -backpack_overrides[/decl/backpack_outfit/backpack] = /obj/item/storage/backpack/virology; \ -backpack_overrides[/decl/backpack_outfit/satchel] = /obj/item/storage/backpack/satchel/vir; \ -backpack_overrides[/decl/backpack_outfit/messenger_bag] = /obj/item/storage/backpack/messenger/viro; - -#define BACKPACK_OVERRIDE_COMMAND \ -backpack_overrides[/decl/backpack_outfit/backpack] = /obj/item/storage/backpack/command; \ -backpack_overrides[/decl/backpack_outfit/satchel] = /obj/item/storage/backpack/satchel/com; \ -backpack_overrides[/decl/backpack_outfit/messenger_bag] = /obj/item/storage/backpack/messenger/com; \ No newline at end of file diff --git a/code/datums/outfits/jobs/cargo.dm b/code/datums/outfits/jobs/cargo.dm deleted file mode 100644 index 8f95616db6180..0000000000000 --- a/code/datums/outfits/jobs/cargo.dm +++ /dev/null @@ -1,36 +0,0 @@ -/decl/hierarchy/outfit/job/cargo - l_ear = /obj/item/device/radio/headset/headset_cargo - hierarchy_type = /decl/hierarchy/outfit/job/cargo - -/decl/hierarchy/outfit/job/cargo/qm - name = OUTFIT_JOB_NAME("Cargo") - uniform = /obj/item/clothing/under/rank/cargo - shoes = /obj/item/clothing/shoes/brown - glasses = /obj/item/clothing/glasses/sunglasses - l_hand = /obj/item/material/clipboard - id_types = list(/obj/item/card/id/cargo/head) - pda_type = /obj/item/modular_computer/pda/cargo - -/decl/hierarchy/outfit/job/cargo/cargo_tech - name = OUTFIT_JOB_NAME("Cargo technician") - uniform = /obj/item/clothing/under/rank/cargotech - id_types = list(/obj/item/card/id/cargo) - pda_type = /obj/item/modular_computer/pda/cargo - -/decl/hierarchy/outfit/job/cargo/mining - name = OUTFIT_JOB_NAME("Shaft miner") - uniform = /obj/item/clothing/under/rank/miner - id_types = list(/obj/item/card/id/cargo/mining) - pda_type = /obj/item/modular_computer/pda/science - backpack_contents = list(/obj/item/crowbar = 1, /obj/item/storage/ore = 1) - flags = OUTFIT_FLAGS_JOB_DEFAULT | OUTFIT_EXTENDED_SURVIVAL - -/decl/hierarchy/outfit/job/cargo/mining/New() - ..() - BACKPACK_OVERRIDE_ENGINEERING - -/decl/hierarchy/outfit/job/cargo/mining/void - name = OUTFIT_JOB_NAME("Shaft miner - Voidsuit") - head = /obj/item/clothing/head/helmet/space/void/mining - mask = /obj/item/clothing/mask/breath - suit = /obj/item/clothing/suit/space/void/mining diff --git a/code/datums/outfits/jobs/civilian.dm b/code/datums/outfits/jobs/civilian.dm deleted file mode 100644 index 7eaf3c300eec2..0000000000000 --- a/code/datums/outfits/jobs/civilian.dm +++ /dev/null @@ -1,59 +0,0 @@ -/decl/hierarchy/outfit/job/assistant - name = OUTFIT_JOB_NAME("Assistant") - -/decl/hierarchy/outfit/job/service - l_ear = /obj/item/device/radio/headset/headset_service - hierarchy_type = /decl/hierarchy/outfit/job/service - -/decl/hierarchy/outfit/job/service/chef - name = OUTFIT_JOB_NAME("Chef") - uniform = /obj/item/clothing/under/rank/chef - suit = /obj/item/clothing/suit/chef - head = /obj/item/clothing/head/chefhat - id_types = list(/obj/item/card/id/civilian/chef) - pda_type = /obj/item/modular_computer/pda - -/decl/hierarchy/outfit/job/service/gardener - name = OUTFIT_JOB_NAME("Gardener") - uniform = /obj/item/clothing/under/rank/hydroponics - suit = /obj/item/clothing/suit/apron - gloves = /obj/item/clothing/gloves/thick/botany - r_pocket = /obj/item/device/scanner/plant - id_types = list(/obj/item/card/id/civilian/botanist) - pda_type = /obj/item/modular_computer/pda - -/decl/hierarchy/outfit/job/service/gardener/New() - ..() - backpack_overrides[/decl/backpack_outfit/backpack] = /obj/item/storage/backpack/hydroponics - backpack_overrides[/decl/backpack_outfit/satchel] = /obj/item/storage/backpack/satchel/hyd - backpack_overrides[/decl/backpack_outfit/messenger_bag] = /obj/item/storage/backpack/messenger/hyd - -/decl/hierarchy/outfit/job/service/janitor - name = OUTFIT_JOB_NAME("Janitor") - uniform = /obj/item/clothing/under/rank/janitor - id_types = list(/obj/item/card/id/civilian/janitor) - pda_type = /obj/item/modular_computer/pda - -/decl/hierarchy/outfit/job/librarian - name = OUTFIT_JOB_NAME("Librarian") - uniform = /obj/item/clothing/under/suit_jacket/red - id_types = list(/obj/item/card/id/civilian/librarian) - pda_type = /obj/item/modular_computer/pda - -/decl/hierarchy/outfit/job/internal_affairs_agent - name = OUTFIT_JOB_NAME("Internal affairs agent") - l_ear = /obj/item/device/radio/headset/ia - uniform = /obj/item/clothing/under/rank/internalaffairs - suit = /obj/item/clothing/suit/storage/toggle/suit/black - shoes = /obj/item/clothing/shoes/brown - glasses = /obj/item/clothing/glasses/sunglasses/big - l_hand = /obj/item/storage/briefcase - id_types = list(/obj/item/card/id/civilian/internal_affairs_agent) - pda_type = /obj/item/modular_computer/pda/heads/paperpusher - -/decl/hierarchy/outfit/job/chaplain - name = OUTFIT_JOB_NAME("Chaplain") - uniform = /obj/item/clothing/under/rank/chaplain - l_hand = /obj/item/storage/bible - id_types = list(/obj/item/card/id/civilian/chaplain) - pda_type = /obj/item/modular_computer/pda/medical diff --git a/code/datums/outfits/jobs/command.dm b/code/datums/outfits/jobs/command.dm deleted file mode 100644 index a7a202df377b9..0000000000000 --- a/code/datums/outfits/jobs/command.dm +++ /dev/null @@ -1,38 +0,0 @@ -/decl/hierarchy/outfit/job/captain - name = OUTFIT_JOB_NAME("Captain") - head = /obj/item/clothing/head/caphat - glasses = /obj/item/clothing/glasses/sunglasses - uniform = /obj/item/clothing/under/rank/captain - l_ear = /obj/item/device/radio/headset/heads/captain - shoes = /obj/item/clothing/shoes/brown - id_types = list(/obj/item/card/id/gold) - pda_type = /obj/item/modular_computer/pda/captain - backpack_contents = list(/obj/item/storage/box/ids = 1) - -/decl/hierarchy/outfit/job/captain/New() - ..() - backpack_overrides[/decl/backpack_outfit/backpack] = /obj/item/storage/backpack/command - backpack_overrides[/decl/backpack_outfit/satchel] = /obj/item/storage/backpack/satchel/com - backpack_overrides[/decl/backpack_outfit/messenger_bag] = /obj/item/storage/backpack/messenger/com - -/decl/hierarchy/outfit/job/captain/post_equip(var/mob/living/carbon/human/H) - ..() - if(H.age>49) - // Since we can have something other than the default uniform at this - // point, check if we can actually attach the medal - var/obj/item/clothing/uniform = H.w_uniform - if(uniform) - var/obj/item/clothing/accessory/medal/gold/nanotrasen/medal = new() - if(uniform.can_attach_accessory(medal)) - uniform.attach_accessory(null, medal) - else - qdel(medal) - -/decl/hierarchy/outfit/job/hop - name = OUTFIT_JOB_NAME("Head of Personnel") - uniform = /obj/item/clothing/under/rank/head_of_personnel - l_ear = /obj/item/device/radio/headset/heads/hop - shoes = /obj/item/clothing/shoes/brown - id_types = list(/obj/item/card/id/silver) - pda_type = /obj/item/modular_computer/pda/heads/hop - backpack_contents = list(/obj/item/storage/box/ids = 1) diff --git a/code/datums/outfits/jobs/engineering.dm b/code/datums/outfits/jobs/engineering.dm deleted file mode 100644 index 44e058b127939..0000000000000 --- a/code/datums/outfits/jobs/engineering.dm +++ /dev/null @@ -1,40 +0,0 @@ -/decl/hierarchy/outfit/job/engineering - hierarchy_type = /decl/hierarchy/outfit/job/engineering - belt = /obj/item/storage/belt/utility/full - l_ear = /obj/item/device/radio/headset/headset_eng - shoes = /obj/item/clothing/shoes/workboots - pda_slot = slot_l_store - flags = OUTFIT_FLAGS_JOB_DEFAULT | OUTFIT_EXTENDED_SURVIVAL - -/decl/hierarchy/outfit/job/engineering/New() - ..() - BACKPACK_OVERRIDE_ENGINEERING - -/decl/hierarchy/outfit/job/engineering/chief_engineer - name = OUTFIT_JOB_NAME("Chief engineer") - head = /obj/item/clothing/head/hardhat/white - uniform = /obj/item/clothing/under/rank/chief_engineer - l_ear = /obj/item/device/radio/headset/heads/ce - gloves = /obj/item/clothing/gloves/thick - id_types = list(/obj/item/card/id/engineering/head) - pda_type = /obj/item/modular_computer/pda/heads/ce - -/decl/hierarchy/outfit/job/engineering/engineer - name = OUTFIT_JOB_NAME("Engineer") - head = /obj/item/clothing/head/hardhat - uniform = /obj/item/clothing/under/rank/engineer - r_pocket = /obj/item/device/t_scanner - id_types = list(/obj/item/card/id/engineering) - pda_type = /obj/item/modular_computer/pda/engineering - -/decl/hierarchy/outfit/job/engineering/engineer/void - name = OUTFIT_JOB_NAME("Engineer - Voidsuit") - head = /obj/item/clothing/head/helmet/space/void/engineering - mask = /obj/item/clothing/mask/breath - suit = /obj/item/clothing/suit/space/void/engineering - -/decl/hierarchy/outfit/job/engineering/atmos - name = OUTFIT_JOB_NAME("Atmospheric technician") - uniform = /obj/item/clothing/under/rank/atmospheric_technician - belt = /obj/item/storage/belt/utility/atmostech - pda_type = /obj/item/modular_computer/pda/engineering diff --git a/code/datums/outfits/jobs/job.dm b/code/datums/outfits/jobs/job.dm deleted file mode 100644 index a491bc8f063ce..0000000000000 --- a/code/datums/outfits/jobs/job.dm +++ /dev/null @@ -1,14 +0,0 @@ -/decl/hierarchy/outfit/job - name = "Standard Gear" - hierarchy_type = /decl/hierarchy/outfit/job - - uniform = /obj/item/clothing/under/color/grey - l_ear = /obj/item/device/radio/headset - shoes = /obj/item/clothing/shoes/black - - id_slot = slot_wear_id - id_types = list(/obj/item/card/id/civilian) - pda_slot = slot_belt - pda_type = /obj/item/modular_computer/pda - - flags = OUTFIT_FLAGS_JOB_DEFAULT diff --git a/code/datums/outfits/jobs/medical.dm b/code/datums/outfits/jobs/medical.dm deleted file mode 100644 index 16e9493639844..0000000000000 --- a/code/datums/outfits/jobs/medical.dm +++ /dev/null @@ -1,108 +0,0 @@ -/decl/hierarchy/outfit/job/medical - hierarchy_type = /decl/hierarchy/outfit/job/medical - l_ear = /obj/item/device/radio/headset/headset_med - shoes = /obj/item/clothing/shoes/white - pda_type = /obj/item/modular_computer/pda/medical - pda_slot = slot_l_store - -/decl/hierarchy/outfit/job/medical/New() - ..() - BACKPACK_OVERRIDE_MEDICAL - -/decl/hierarchy/outfit/job/medical/cmo - name = OUTFIT_JOB_NAME("Chief Medical Officer") - l_ear =/obj/item/device/radio/headset/heads/cmo - uniform = /obj/item/clothing/under/rank/chief_medical_officer - suit = /obj/item/clothing/suit/storage/toggle/labcoat/cmo - shoes = /obj/item/clothing/shoes/brown - l_hand = /obj/item/storage/firstaid/adv - r_pocket = /obj/item/device/flashlight/pen - id_types = list(/obj/item/card/id/medical/head) - pda_type = /obj/item/modular_computer/pda/heads/cmo - -/decl/hierarchy/outfit/job/medical/doctor - name = OUTFIT_JOB_NAME("Medical Doctor") - uniform = /obj/item/clothing/under/rank/medical - suit = /obj/item/clothing/suit/storage/toggle/labcoat - l_hand = /obj/item/storage/firstaid/adv - r_pocket = /obj/item/device/flashlight/pen - id_types = list(/obj/item/card/id/medical) - -/decl/hierarchy/outfit/job/medical/doctor/emergency_physician - name = OUTFIT_JOB_NAME("Emergency physician") - suit = /obj/item/clothing/suit/storage/toggle/fr_jacket - -/decl/hierarchy/outfit/job/medical/doctor/surgeon - name = OUTFIT_JOB_NAME("Surgeon") - uniform = /obj/item/clothing/under/rank/medical/scrubs/blue - head = /obj/item/clothing/head/surgery/blue - -/decl/hierarchy/outfit/job/medical/doctor/virologist - name = OUTFIT_JOB_NAME("Virologist") - uniform = /obj/item/clothing/under/rank/virologist - suit = /obj/item/clothing/suit/storage/toggle/labcoat/virologist - mask = /obj/item/clothing/mask/surgical -/decl/hierarchy/outfit/job/medical/doctor/virologist/New() - ..() - BACKPACK_OVERRIDE_VIROLOGY - -/decl/hierarchy/outfit/job/medical/doctor/nurse - name = OUTFIT_JOB_NAME("Nurse") - suit = null - -/decl/hierarchy/outfit/job/medical/doctor/nurse/pre_equip(mob/living/carbon/human/H) - ..() - if(H.gender == FEMALE) - if(prob(50)) - uniform = /obj/item/clothing/under/rank/nursesuit - else - uniform = /obj/item/clothing/under/rank/nurse - head = /obj/item/clothing/head/nursehat - else - uniform = /obj/item/clothing/under/rank/medical/scrubs/purple - head = null - -/decl/hierarchy/outfit/job/medical/chemist - name = OUTFIT_JOB_NAME("Chemist") - uniform = /obj/item/clothing/under/rank/chemist - suit = /obj/item/clothing/suit/storage/toggle/labcoat/chemist - id_types = list(/obj/item/card/id/medical/chemist) - pda_type = /obj/item/modular_computer/pda/chemistry - -/decl/hierarchy/outfit/job/medical/chemist/New() - ..() - BACKPACK_OVERRIDE_VIROLOGY - -/decl/hierarchy/outfit/job/medical/geneticist - name = OUTFIT_JOB_NAME("Geneticist") - uniform = /obj/item/clothing/under/rank/geneticist - suit = /obj/item/clothing/suit/storage/toggle/labcoat/genetics - r_pocket = /obj/item/device/flashlight/pen - id_types = list(/obj/item/card/id/medical/geneticist) - pda_type = /obj/item/modular_computer/pda/medical - -/decl/hierarchy/outfit/job/medical/geneticist/New() - ..() - backpack_overrides[/decl/backpack_outfit/backpack] = /obj/item/storage/backpack/genetics - backpack_overrides[/decl/backpack_outfit/satchel] = /obj/item/storage/backpack/satchel/gen - -/decl/hierarchy/outfit/job/medical/psychiatrist - name = OUTFIT_JOB_NAME("Psychiatrist") - uniform = /obj/item/clothing/under/rank/psych - suit = /obj/item/clothing/suit/storage/toggle/labcoat - shoes = /obj/item/clothing/shoes/laceup - id_types = list(/obj/item/card/id/medical/psychiatrist) - -/decl/hierarchy/outfit/job/medical/paramedic - name = OUTFIT_JOB_NAME("Paramedic") - uniform = /obj/item/clothing/under/rank/medical/scrubs/black - suit = /obj/item/clothing/suit/storage/toggle/fr_jacket - shoes = /obj/item/clothing/shoes/jackboots - l_hand = /obj/item/storage/firstaid/adv - belt = /obj/item/storage/belt/medical/emt - id_types = list(/obj/item/card/id/medical/paramedic) - flags = OUTFIT_FLAGS_JOB_DEFAULT | OUTFIT_EXTENDED_SURVIVAL - -/decl/hierarchy/outfit/job/medical/paramedic/emt - name = OUTFIT_JOB_NAME("Emergency medical technician") - uniform = /obj/item/clothing/under/rank/medical/paramedic diff --git a/code/datums/outfits/jobs/misc.dm b/code/datums/outfits/jobs/misc.dm deleted file mode 100644 index 43bbd919f8e17..0000000000000 --- a/code/datums/outfits/jobs/misc.dm +++ /dev/null @@ -1,11 +0,0 @@ -/decl/hierarchy/outfit/job/silicon - head = /obj/item/clothing/head/cardborg - hierarchy_type = /decl/hierarchy/outfit/job/silicon - -/decl/hierarchy/outfit/job/silicon/ai - name = OUTFIT_JOB_NAME("AI") - suit = /obj/item/clothing/suit/straight_jacket - -/decl/hierarchy/outfit/job/silicon/cyborg - name = OUTFIT_JOB_NAME("Cyborg") - suit = /obj/item/clothing/suit/cardborg diff --git a/code/datums/outfits/jobs/science.dm b/code/datums/outfits/jobs/science.dm deleted file mode 100644 index a89929004ce84..0000000000000 --- a/code/datums/outfits/jobs/science.dm +++ /dev/null @@ -1,44 +0,0 @@ -/decl/hierarchy/outfit/job/science - hierarchy_type = /decl/hierarchy/outfit/job/science - l_ear = /obj/item/device/radio/headset/headset_sci - suit = /obj/item/clothing/suit/storage/toggle/labcoat - shoes = /obj/item/clothing/shoes/white - pda_type = /obj/item/modular_computer/pda/science - -/decl/hierarchy/outfit/job/science/New() - ..() - BACKPACK_OVERRIDE_RESEARCH - -/decl/hierarchy/outfit/job/science/rd - name = OUTFIT_JOB_NAME("Chief Science Officer") - l_ear = /obj/item/device/radio/headset/heads/rd - uniform = /obj/item/clothing/under/rank/research_director - shoes = /obj/item/clothing/shoes/brown - l_hand = /obj/item/material/clipboard - id_types = list(/obj/item/card/id/science/head) - pda_type = /obj/item/modular_computer/pda/heads/rd - -/decl/hierarchy/outfit/job/science/scientist - name = OUTFIT_JOB_NAME("Scientist") - uniform = /obj/item/clothing/under/rank/scientist - id_types = list(/obj/item/card/id/science) - suit = /obj/item/clothing/suit/storage/toggle/labcoat/science - -/decl/hierarchy/outfit/job/science/xenobiologist - name = OUTFIT_JOB_NAME("Xenobiologist") - uniform = /obj/item/clothing/under/rank/scientist - id_types = list(/obj/item/card/id/science/xenobiologist) - suit = /obj/item/clothing/suit/storage/toggle/labcoat/science - -/decl/hierarchy/outfit/job/science/roboticist - name = OUTFIT_JOB_NAME("Roboticist") - uniform = /obj/item/clothing/under/rank/scientist - shoes = /obj/item/clothing/shoes/black - belt = /obj/item/storage/belt/utility/full - id_types = list(/obj/item/card/id/science/roboticist) - pda_slot = slot_r_store - pda_type = /obj/item/modular_computer/pda/roboticist - -/decl/hierarchy/outfit/job/science/roboticist/New() - ..() - backpack_overrides.Cut() diff --git a/code/datums/outfits/jobs/security.dm b/code/datums/outfits/jobs/security.dm deleted file mode 100644 index 544488b6182a2..0000000000000 --- a/code/datums/outfits/jobs/security.dm +++ /dev/null @@ -1,55 +0,0 @@ -/decl/hierarchy/outfit/job/security - hierarchy_type = /decl/hierarchy/outfit/job/security - glasses = /obj/item/clothing/glasses/hud/security/prot - l_ear = /obj/item/device/radio/headset/headset_sec - gloves = /obj/item/clothing/gloves/thick - shoes = /obj/item/clothing/shoes/jackboots - backpack_contents = list(/obj/item/handcuffs = 1) - -/decl/hierarchy/outfit/job/security/New() - ..() - BACKPACK_OVERRIDE_SECURITY - -/decl/hierarchy/outfit/job/security/hos - name = OUTFIT_JOB_NAME("Head of security") - l_ear = /obj/item/device/radio/headset/heads/hos - uniform = /obj/item/clothing/under/rank/head_of_security - id_types = list(/obj/item/card/id/security/head) - pda_type = /obj/item/modular_computer/pda/heads/hos - backpack_contents = list(/obj/item/handcuffs = 1) - -/decl/hierarchy/outfit/job/security/warden - name = OUTFIT_JOB_NAME("Warden") - uniform = /obj/item/clothing/under/rank/warden - l_pocket = /obj/item/device/flash - id_types = list(/obj/item/card/id/security/warden) - pda_type = /obj/item/modular_computer/pda/security - -/decl/hierarchy/outfit/job/security/detective - name = OUTFIT_JOB_NAME("Detective") - head = /obj/item/clothing/head/det - uniform = /obj/item/clothing/under/det - suit = /obj/item/clothing/suit/storage/det_trench - l_pocket = /obj/item/flame/lighter/zippo - shoes = /obj/item/clothing/shoes/laceup - r_hand = /obj/item/storage/briefcase/crimekit - id_types = list(/obj/item/card/id/security/detective) - pda_type = /obj/item/modular_computer/pda/forensics - backpack_contents = list(/obj/item/storage/box/evidence = 1) - -/decl/hierarchy/outfit/job/security/detective/New() - ..() - backpack_overrides.Cut() - -/decl/hierarchy/outfit/job/security/detective/forensic - name = OUTFIT_JOB_NAME("Forensic technician") - head = null - suit = /obj/item/clothing/suit/storage/forensics/blue - -/decl/hierarchy/outfit/job/security/officer - name = OUTFIT_JOB_NAME("Security Officer") - uniform = /obj/item/clothing/under/rank/security - l_pocket = /obj/item/device/flash - r_pocket = /obj/item/handcuffs - id_types = list(/obj/item/card/id/security) - pda_type = /obj/item/modular_computer/pda/security diff --git a/code/datums/outfits/misc.dm b/code/datums/outfits/misc.dm deleted file mode 100644 index 35e737a4aa6fe..0000000000000 --- a/code/datums/outfits/misc.dm +++ /dev/null @@ -1,76 +0,0 @@ -/decl/hierarchy/outfit/standard_space_gear - name = "Standard space gear" - shoes = /obj/item/clothing/shoes/black - head = /obj/item/clothing/head/helmet/space/fishbowl - suit = /obj/item/clothing/suit/space - uniform = /obj/item/clothing/under/color/grey - back = /obj/item/tank/jetpack/oxygen - mask = /obj/item/clothing/mask/breath - flags = OUTFIT_HAS_JETPACK|OUTFIT_RESET_EQUIPMENT - -/decl/hierarchy/outfit/soviet_soldier - name = "Soviet soldier" - uniform = /obj/item/clothing/under/soviet - shoes = /obj/item/clothing/shoes/combat - head = /obj/item/clothing/head/ushanka - gloves = /obj/item/clothing/gloves/thick/combat - back = /obj/item/storage/backpack/satchel - belt = /obj/item/gun/projectile/revolver - -/decl/hierarchy/outfit/soviet_soldier/admiral - name = "Soviet admiral" - head = /obj/item/clothing/head/hgpiratecap - l_ear = /obj/item/device/radio/headset/heads/captain - glasses = /obj/item/clothing/glasses/thermal/plain/eyepatch - suit = /obj/item/clothing/suit/hgpirate - - id_slot = slot_wear_id - id_types = list(/obj/item/card/id/centcom/station) - id_pda_assignment = "Admiral" - -/decl/hierarchy/outfit/merchant - name = "Merchant" - shoes = /obj/item/clothing/shoes/black - l_ear = /obj/item/device/radio/headset/merchant - uniform = /obj/item/clothing/under/color/grey - id_slot = slot_wear_id - id_types = list(/obj/item/card/id/merchant) - pda_slot = slot_r_store - pda_type = /obj/item/modular_computer/pda //cause I like the look - id_pda_assignment = "Merchant" - -/decl/hierarchy/outfit/merchant/vox - name = "Merchant - Vox" - shoes = /obj/item/clothing/shoes/jackboots/unathi - uniform = /obj/item/clothing/under/vox/vox_robes - suit = /obj/item/clothing/suit/armor/vox_scrap - -/decl/hierarchy/outfit/clown - name = "Clown" - shoes = /obj/item/clothing/shoes/clown_shoes - mask = /obj/item/clothing/mask/gas/clown_hat - l_ear = /obj/item/device/radio/headset - uniform = /obj/item/clothing/under/rank/clown - l_pocket = /obj/item/bikehorn - flags = OUTFIT_HAS_BACKPACK|OUTFIT_RESET_EQUIPMENT - -/decl/hierarchy/outfit/clown/New() - ..() - backpack_overrides[/decl/backpack_outfit/backpack] = /obj/item/storage/backpack/clown - -/decl/hierarchy/outfit/vox_raider - name = "Vox Raider" - uniform = /obj/item/clothing/under/vox/vox_casual - shoes = /obj/item/clothing/shoes/magboots/vox - l_ear = /obj/item/device/radio/headset/vox_raider - belt = /obj/item/storage/belt/utility/full - gloves = /obj/item/clothing/gloves/vox - r_hand = /obj/item/gun/launcher/alien/spikethrower - - id_slot = slot_wear_id - id_types = list(/obj/item/card/id/syndicate) - id_pda_assignment = "Scavenger" - - - flags = OUTFIT_HAS_BACKPACK|OUTFIT_RESET_EQUIPMENT - diff --git a/code/datums/outfits/nanotrasen.dm b/code/datums/outfits/nanotrasen.dm deleted file mode 100644 index 250fa833c7f2a..0000000000000 --- a/code/datums/outfits/nanotrasen.dm +++ /dev/null @@ -1,45 +0,0 @@ -/decl/hierarchy/outfit/nanotrasen - hierarchy_type = /decl/hierarchy/outfit/nanotrasen - uniform = /obj/item/clothing/under/rank/centcom - shoes = /obj/item/clothing/shoes/laceup - gloves = /obj/item/clothing/gloves/white - l_ear = /obj/item/device/radio/headset/heads/hop - glasses = /obj/item/clothing/glasses/sunglasses - - id_slot = slot_wear_id - id_types = list(/obj/item/card/id/centcom/station) - pda_slot = slot_r_store - pda_type = /obj/item/modular_computer/pda/heads - -/decl/hierarchy/outfit/nanotrasen/representative - name = "Corporate Representative" - belt = /obj/item/material/clipboard - id_pda_assignment = "Corporate Representative" - -/decl/hierarchy/outfit/nanotrasen/officer - name = "Corporate Officer" - head = /obj/item/clothing/head/beret/centcom/officer - l_ear = /obj/item/device/radio/headset/heads/captain - belt = /obj/item/gun/energy - id_pda_assignment = "Corporate Officer" - -/decl/hierarchy/outfit/nanotrasen/captain - name = "Corporate Captain" - uniform = /obj/item/clothing/under/rank/centcom_captain - l_ear = /obj/item/device/radio/headset/heads/captain - head = /obj/item/clothing/head/beret/centcom/captain - belt = /obj/item/gun/energy - id_pda_assignment = "Corporate Captain" - -/decl/hierarchy/outfit/nanotrasen/commander - name = "Corporate Commander" - head = /obj/item/clothing/head/centhat - mask = /obj/item/clothing/mask/smokable/cigarette/cigar/cohiba - shoes = /obj/item/clothing/shoes/swat - uniform = /obj/item/clothing/under/rank/centcom_captain - suit = /obj/item/clothing/suit/armor/bulletproof - gloves = /obj/item/clothing/gloves/thick/swat - l_ear = /obj/item/device/radio/headset/heads/captain - glasses = /obj/item/clothing/glasses/eyepatch - l_pocket = /obj/item/flame/lighter/zippo - id_pda_assignment = "Corporate Commander" diff --git a/code/datums/outfits/outfit.dm b/code/datums/outfits/outfit.dm deleted file mode 100644 index b366d6f6778e2..0000000000000 --- a/code/datums/outfits/outfit.dm +++ /dev/null @@ -1,237 +0,0 @@ -var/global/list/outfits_decls_ -var/global/list/outfits_decls_root_ -var/global/list/outfits_decls_by_type_ - -/proc/outfit_by_type(var/outfit_type) - if(!outfits_decls_root_) - init_outfit_decls() - return outfits_decls_by_type_[outfit_type] - -/proc/outfits() - if(!outfits_decls_root_) - init_outfit_decls() - return outfits_decls_ - -/proc/init_outfit_decls() - if(outfits_decls_root_) - return - outfits_decls_ = list() - outfits_decls_by_type_ = list() - outfits_decls_root_ = decls_repository.get_decl(/decl/hierarchy/outfit) - -/decl/hierarchy/outfit - name = "Naked" - - var/uniform = null - var/suit = null - var/back = null - var/belt = null - var/gloves = null - var/shoes = null - var/head = null - var/mask = null - var/l_ear = null - var/r_ear = null - var/glasses = null - var/id = null - var/l_pocket = null - var/r_pocket = null - var/suit_store = null - var/r_hand = null - var/l_hand = null - var/holster = null - var/list/backpack_contents = list() // In the list(path=count,otherpath=count) format - - var/id_types - var/id_desc - var/id_slot - - var/pda_type - var/pda_slot - - var/id_pda_assignment - - var/list/backpack_overrides - var/flags = OUTFIT_RESET_EQUIPMENT - -/decl/hierarchy/outfit/New() - ..() - backpack_overrides = backpack_overrides || list() - - if(is_hidden_category()) - return - outfits_decls_by_type_[type] = src - dd_insertObjectList(outfits_decls_, src) - -/decl/hierarchy/outfit/proc/pre_equip(mob/living/carbon/human/H) - if(flags & OUTFIT_RESET_EQUIPMENT) - H.delete_inventory(TRUE) - -/decl/hierarchy/outfit/proc/post_equip(mob/living/carbon/human/H) - if(flags & OUTFIT_HAS_JETPACK) - var/obj/item/tank/jetpack/J = locate(/obj/item/tank/jetpack) in H - if(!J) - return - J.toggle() - J.toggle_valve() - -// A proc for non-human species, specially Unathi, since they e.g. -// can't normally wear gloves as humans. Correct this issue by trying again, but -// apply some changes to the said item. -// -// Currently checks for gloves -// -// If you want to add more items that has species restriction, consider follow- -// ing the same format as the gloves shown in the code below. Thanks. -/decl/hierarchy/outfit/proc/check_and_try_equip_xeno(mob/living/carbon/human/H) - var/datum/species/S = H.species - if (!S || istype(S, /datum/species/human)) // null failcheck & get out here you damn humans - return - - // Gloves - if (gloves && !H.get_equipped_item(slot_gloves)) // does mob not have gloves, despite the outfit has one specified? - var/obj/item/clothing/gloves/G = new gloves(H) // we've no use of a null object, instantize one - if (S.get_bodytype(H) in G.species_restricted) // what was the problem? - if ("exclude" in G.species_restricted) // are they excluded? - G.cut_fingertops() - // I could optimize this bit when we are trying to apply the gloves to e.g. Vox, a species still restricted despite G.cut_fingertops(). But who cares if this is codebase is like a plate of spaghetti twice over the brim, right? RIGHT? - H.equip_to_slot_or_del(G,slot_gloves) // try again - else - qdel(G) - // end Gloves - -// end of check_and_try_equip_xeno - -/decl/hierarchy/outfit/proc/equip(mob/living/carbon/human/H, rank, assignment, equip_adjustments) - equip_base(H, equip_adjustments) - - rank = id_pda_assignment || rank - assignment = id_pda_assignment || assignment || rank - var/list/id_cards = equip_ids(H, rank, assignment, equip_adjustments) - if(length(id_cards)) - var/obj/item/card/id/W = id_cards[1] - rank = W.rank - assignment = W.assignment - equip_pda(H, rank, assignment, equip_adjustments) - - for(var/path in backpack_contents) - var/number = backpack_contents[path] - for(var/i=0,ireagents[r_r]) - . = 0 - else - return -1 - if ((reagents?(reagents.len):(0)) < avail_reagents.reagent_list.len) - return 0 - return . - -/datum/recipe/proc/check_fruit(var/obj/container) - . = 1 - if(fruit && fruit.len) - var/list/checklist = list() - // You should trust Copy(). - checklist = fruit.Copy() - for(var/obj/item/reagent_containers/food/snacks/grown/G in container) - if(!G.seed || !G.seed.kitchen_tag || isnull(checklist[G.seed.kitchen_tag])) - continue - checklist[G.seed.kitchen_tag]-- - for(var/ktag in checklist) - if(!isnull(checklist[ktag])) - if(checklist[ktag] < 0) - . = 0 - else if(checklist[ktag] > 0) - . = -1 - break - return . - -/datum/recipe/proc/check_items(var/obj/container as obj) - . = 1 - if (items && items.len) - var/list/checklist = list() - checklist = items.Copy() // You should really trust Copy - for(var/obj/O in container.InsertedContents()) - if(istype(O,/obj/item/reagent_containers/food/snacks/grown)) - continue // Fruit is handled in check_fruit(). - var/found = 0 - for(var/i = 1; i < checklist.len+1; i++) - var/item_type = checklist[i] - if (istype(O,item_type)) - checklist.Cut(i, i+1) - found = 1 - break - if (!found) - . = 0 - if (checklist.len) - . = -1 - return . - -//general version -/datum/recipe/proc/make(var/obj/container as obj) - var/obj/result_obj = new result(container) - for (var/obj/O in (container.InsertedContents()-result_obj)) - O.reagents.trans_to_obj(result_obj, O.reagents.total_volume) - qdel(O) - container.reagents.clear_reagents() - return result_obj - -// food-related -/datum/recipe/proc/make_food(var/obj/container as obj) - if(!result) - log_error("Recipe [type] is defined without a result, please bug this.") - return - var/obj/result_obj = new result(container) - container.reagents.clear_reagents() - //Checked here in case LAZYCLEARLIST nulls and no more physical ingredients are added - var/list/container_contents = container.InsertedContents() - if(!container_contents) - return result_obj - for (var/obj/O in (container_contents-result_obj)) - if (O.reagents) - O.reagents.del_reagent(/datum/reagent/nutriment) - O.reagents.update_total() - O.reagents.trans_to_obj(result_obj, O.reagents.total_volume) - if(istype(O,/obj/item/holder)) - var/obj/item/holder/H = O - H.destroy_all() - qdel(O) - return result_obj - -/proc/select_recipe(var/list/datum/recipe/avaiable_recipes, var/obj/obj as obj, var/exact) - var/list/datum/recipe/possible_recipes = new - var/target = exact ? 0 : 1 - for (var/datum/recipe/recipe in avaiable_recipes) - if((recipe.check_reagents(obj.reagents) < target) || (recipe.check_items(obj) < target) || (recipe.check_fruit(obj) < target)) - continue - possible_recipes |= recipe - if (possible_recipes.len==0) - return null - else if (possible_recipes.len==1) - return possible_recipes[1] - else //okay, let's select the most complicated recipe - var/highest_count = 0 - . = possible_recipes[1] - for (var/datum/recipe/recipe in possible_recipes) - var/count = ((recipe.items)?(recipe.items.len):0) + ((recipe.reagents)?(recipe.reagents.len):0) + ((recipe.fruit)?(recipe.fruit.len):0) - if (count >= highest_count) - highest_count = count - . = recipe - return . diff --git a/code/datums/repositories/_defines.dm b/code/datums/repositories/_defines.dm deleted file mode 100644 index cf3330070a5f2..0000000000000 --- a/code/datums/repositories/_defines.dm +++ /dev/null @@ -1 +0,0 @@ -#define mob2unique(mob) "[mob ? mob.ckey : NO_CLIENT_CKEY][ascii2text(7)][mob ? (mob.real_name ? mob.real_name : mob.name) : ""][ascii2text(7)][any2ref(mob)]" diff --git a/code/datums/repositories/admin_pm.dm b/code/datums/repositories/admin_pm.dm deleted file mode 100644 index b4c19dbfc249d..0000000000000 --- a/code/datums/repositories/admin_pm.dm +++ /dev/null @@ -1,43 +0,0 @@ -var/global/repository/admin_pm/admin_pm_repository = new() - -/repository/admin_pm - var/list/admin_pms_ - var/list/irc_clients_by_name - -/repository/admin_pm/New() - ..() - admin_pms_ = list() - irc_clients_by_name = list() - -/repository/admin_pm/proc/store_pm(var/client/sender, var/client/receiver, var/message) - if(receiver) - if(istype(receiver)) - receiver = client_repository.get_lite_client(receiver) - else if(text_starts_with(receiver, "IRC-")) - receiver = get_irc_client(receiver) - else - CRASH("Invalid receiver: [log_info_line(receiver)]") - - // Newest messages first - admin_pms_.Insert(1, new/datum/admin_privat_message(client_repository.get_lite_client(sender), receiver, message)) - -/repository/admin_pm/proc/get_irc_client(key) - var/datum/client_lite/cl = irc_clients_by_name[key] - if(!cl) - cl = new/datum/client_lite() - cl.name = "IRC" - cl.key = key - irc_clients_by_name[key] = cl - return cl - -/datum/admin_privat_message - var/station_time - var/datum/client_lite/sender // We don't store the proper client because it gets deleted if banned - var/datum/client_lite/receiver - var/message - -/datum/admin_privat_message/New(var/sender, var/receiver, var/message) - station_time = time_stamp() - src.message = message - src.sender = sender - src.receiver = receiver diff --git a/code/datums/repositories/areas.dm b/code/datums/repositories/areas.dm deleted file mode 100644 index ef0bb71178109..0000000000000 --- a/code/datums/repositories/areas.dm +++ /dev/null @@ -1,53 +0,0 @@ -var/global/repository/area/area_repository = new() - -/repository/area - var/list/by_name_coords_cache_data - var/list/by_name_cache_data - var/list/by_z_level_cache_data - -/repository/area/New() - by_name_coords_cache_data = list() - by_name_cache_data = list() - by_z_level_cache_data = list() - ..() - -/repository/area/proc/get_areas_by_name(var/list/area_predicates = /proc/is_not_space_area) - return priv_get_cached_areas(by_name_cache_data, /proc/group_areas_by_z_level, area_predicates, /proc/get_name) - -/repository/area/proc/get_areas_by_name_and_coords(var/list/area_predicates = /proc/is_not_space_area) - return priv_get_cached_areas(by_name_coords_cache_data, /proc/group_areas_by_z_level, area_predicates, /proc/get_name_and_coordinates) - -/repository/area/proc/get_areas_by_z_level(var/list/area_predicates = /proc/is_not_space_area) - return priv_get_cached_areas(by_z_level_cache_data, /proc/group_areas_by_z_level, area_predicates, /proc/get_name_and_coordinates) - -/repository/area/proc/priv_get_cached_areas(var/list/area_cache, var/area_group_proc, var/list/area_predicates, var/naming_proc) - . = get_cache_entry(area_cache, area_predicates) - if(.) - return - . = priv_get_areas_by_proc(area_group_proc, area_predicates, naming_proc) - set_cache_entry(area_cache, area_predicates, .) - -/repository/area/proc/priv_get_areas_by_proc(var/area_group_proc, var/list/area_predicates, var/naming_proc) - var/list/grouped_areas = call(area_group_proc)(area_predicates) - grouped_areas = sortAssoc(grouped_areas) - . = list() - for(var/area_key in grouped_areas) - var/list/list_of_areas = grouped_areas[area_key] - list_of_areas = sortAtom(list_of_areas) - for(var/area/A in list_of_areas) - if(A.has_turfs()) - .[call(naming_proc)(A)] = A - -/repository/area/proc/get_cache_entry(var/list/cache_data, var/key) - var/datum/cache_entry/cache_entry = cache_data[key] - if(!cache_entry) - cache_entry = new/datum/cache_entry - cache_data[key] = cache_entry - - if(world.time < cache_entry.timestamp) - return cache_entry.data - -/repository/area/proc/set_cache_entry(var/list/cache_data, var/key, var/data) - var/datum/cache_entry/cache_entry = cache_data[key] - cache_entry.timestamp = world.time + 3 MINUTES - cache_entry.data = data diff --git a/code/datums/repositories/attack_logs.dm b/code/datums/repositories/attack_logs.dm deleted file mode 100644 index 48149a9ffb7c8..0000000000000 --- a/code/datums/repositories/attack_logs.dm +++ /dev/null @@ -1,42 +0,0 @@ -var/global/repository/attack_logs/attack_log_repository = new() - -/repository/attack_logs - var/list/attack_logs_ - -/repository/attack_logs/New() - ..() - attack_logs_ = list() - -/repository/attack_logs/proc/store_attack_log(var/mob/attacker, var/mob/victim, var/action_message) - // Newest logs first - attack_logs_.Insert(1, new/datum/attack_log(attacker, victim, action_message)) - -/datum/attack_log - var/station_time - var/intent - var/zone_sel - var/datum/mob_lite/attacker // We don't store the proper mob in case it gets deleted - var/datum/mob_lite/victim - var/turf/location // Turfs are forever - var/message - -/datum/attack_log/New(var/mob/mob_attacker, var/mob/mob_victim, var/action_message) - station_time = time_stamp() - - attacker = mob_repository.get_lite_mob(mob_attacker) - victim = mob_repository.get_lite_mob(mob_victim) - - if(mob_attacker && mob_victim) - message = "[attacker.name] [action_message] [victim.name]" - else if(mob_attacker) - message = "[attacker.name] [action_message]" - else - message = "[victim.name] [action_message]" - - intent = mob_attacker ? uppertext(mob_attacker.a_intent) : "N/A" - zone_sel = mob_attacker?.zone_sel?.selecting ? uppertext(mob_attacker.zone_sel.selecting) : "N/A" - - if(mob_attacker) - location = get_turf(mob_attacker) - if(!location && mob_victim) - location = get_turf(mob_victim) diff --git a/code/datums/repositories/cameras.dm b/code/datums/repositories/cameras.dm deleted file mode 100644 index f315de3838bf2..0000000000000 --- a/code/datums/repositories/cameras.dm +++ /dev/null @@ -1,35 +0,0 @@ -var/global/repository/cameras/camera_repository = new() - -/proc/invalidateCameraCache() - camera_repository.networks.Cut() - camera_repository.invalidated = 1 - camera_repository.camera_cache_id = ++camera_repository.camera_cache_id - -/repository/cameras - var/list/networks - var/invalidated = 1 - var/camera_cache_id = 1 - -/repository/cameras/New() - networks = list() - ..() - -/repository/cameras/proc/cameras_in_network(var/network) - setup_cache() - var/list/network_list = networks[network] - return network_list - -/repository/cameras/proc/setup_cache() - if(!invalidated) - return - invalidated = 0 - - for(var/sc in cameranet.cameras) - var/obj/machinery/camera/C = sc - var/cam = C.nano_structure() - for(var/network in C.network) - if(!networks[network]) - ADD_SORTED(networks, network, /proc/cmp_text_asc) - networks[network] = list() - var/list/netlist = networks[network] - netlist[++netlist.len] = cam diff --git a/code/datums/repositories/client.dm b/code/datums/repositories/client.dm deleted file mode 100644 index 4217a4042a348..0000000000000 --- a/code/datums/repositories/client.dm +++ /dev/null @@ -1,61 +0,0 @@ -var/global/const/NO_CLIENT_CKEY = "*no ckey*" - -var/global/repository/client/client_repository = new() - -/repository/client - var/list/clients_ - -/repository/client/New() - ..() - clients_ = list() - -// A lite client is unique per ckey and mob ref (save for ref conflicts.. oh well) -/repository/client/proc/get_lite_client(var/mob/M) - if(isclient(M)) - var/client/C = M // BYOND is supposed to ensure clients always have a mob - M = C.mob - . = clients_[mob2unique(M)] - if(!.) - . = new/datum/client_lite(M) - clients_[mob2unique(M)] = . - -/datum/client_lite - var/name = "*no mob*" - var/key = "*no key*" - var/ckey = NO_CLIENT_CKEY - var/ref // If ref is unset but ckey is set that means the client wasn't logged in at the time - -/datum/client_lite/New(var/mob/M) - if(!M) - return - - name = M.real_name ? M.real_name : M.name - key = M.key ? M.key : key - ckey = M.ckey ? M.ckey : ckey - ref = M.client ? any2ref(M.client) : ref - -/datum/client_lite/proc/key_name(var/pm_link = TRUE, var/check_if_offline = TRUE, var/datum/ticket/ticket = null) - if(!ref && ckey != NO_CLIENT_CKEY) - var/client/C = client_by_ckey(ckey) - if(C) - ref = any2ref(C) - - if(!ref) - if(ckey == NO_CLIENT_CKEY) - return "[key]/([name])" - else - return "[key]/([name]) (DC)" - if(check_if_offline && !client_by_ckey(ckey)) - return "[key]/([name]) (DC)" - return pm_link ? "[key]/([name])[rank2text()]" : "[key]/([name])" - -/datum/client_lite/proc/rank2text() - var/client/C = client_by_ckey(ckey) - if(!C || (C && !C.holder)) - return - return " \[[C.holder.rank]\]" - -/proc/client_by_ckey(ckey) - for(var/client/C) - if(C.ckey == ckey) - return C diff --git a/code/datums/repositories/crew/_defines.dm b/code/datums/repositories/crew/_defines.dm deleted file mode 100644 index 4c9ac0096b1e0..0000000000000 --- a/code/datums/repositories/crew/_defines.dm +++ /dev/null @@ -1,3 +0,0 @@ -#define MOD_SUIT_SENSORS_NONE 0 -#define MOD_SUIT_SENSORS_HANDLED 1 -#define MOD_SUIT_SENSORS_REJECTED 2 diff --git a/code/datums/repositories/crew/binary.dm b/code/datums/repositories/crew/binary.dm deleted file mode 100644 index dd5c8ed2927c0..0000000000000 --- a/code/datums/repositories/crew/binary.dm +++ /dev/null @@ -1,43 +0,0 @@ -/* Binary */ -/crew_sensor_modifier/binary/process_crew_data(var/mob/living/carbon/human/H, var/obj/item/clothing/under/C, var/turf/pos, var/list/crew_data) - crew_data["alert"] = FALSE - if(!H.isSynthetic() && H.should_have_organ(BP_HEART)) - var/obj/item/organ/internal/heart/O = H.internal_organs_by_name[BP_HEART] - if (!O || !BP_IS_ROBOTIC(O)) // Don't make medical freak out over prosthetic hearts - var/pulse = H.pulse() - if(pulse == PULSE_NONE || pulse == PULSE_THREADY) - crew_data["alert"] = TRUE - if(H.get_blood_oxygenation() < BLOOD_VOLUME_SAFE) - crew_data["alert"] = TRUE - if(H.isSynthetic()) - var/obj/item/organ/internal/cell/cell = H.internal_organs_by_name[BP_CELL] - if(!cell || cell.percent() < 10) - crew_data["alert"] = TRUE - return ..() - -/* Jamming */ -/crew_sensor_modifier/binary/jamming - priority = 5 - -/crew_sensor_modifier/binary/jamming/alive/process_crew_data(var/mob/living/carbon/human/H, var/obj/item/clothing/under/C, var/turf/pos, var/list/crew_data) - crew_data["alert"] = FALSE - return MOD_SUIT_SENSORS_HANDLED - -/crew_sensor_modifier/binary/jamming/dead/process_crew_data(var/mob/living/carbon/human/H, var/obj/item/clothing/under/C, var/turf/pos, var/list/crew_data) - crew_data["alert"] = TRUE - return MOD_SUIT_SENSORS_HANDLED - -/* Random */ -/crew_sensor_modifier/binary/jamming/random - var/error_prob = 25 - -/crew_sensor_modifier/binary/jamming/random/moderate - error_prob = 50 - -/crew_sensor_modifier/binary/jamming/random/major - error_prob = 100 - -/crew_sensor_modifier/binary/jamming/random/process_crew_data(var/mob/living/carbon/human/H, var/obj/item/clothing/under/C, var/turf/pos, var/list/crew_data) - . = ..() - if(prob(error_prob)) - crew_data["alert"] = pick(TRUE, FALSE) diff --git a/code/datums/repositories/crew/crew.dm b/code/datums/repositories/crew/crew.dm deleted file mode 100644 index 7c7e781a3e598..0000000000000 --- a/code/datums/repositories/crew/crew.dm +++ /dev/null @@ -1,138 +0,0 @@ -var/global/datum/repository/crew/crew_repository = new() - -/datum/repository/crew - var/list/cache_data - var/list/cache_data_alert - var/list/modifier_queues - var/list/modifier_queues_by_type - -/datum/repository/crew/New() - cache_data = list() - cache_data_alert = list() - - var/PriorityQueue/general_modifiers = new/PriorityQueue(/proc/cmp_crew_sensor_modifier) - var/PriorityQueue/binary_modifiers = new/PriorityQueue(/proc/cmp_crew_sensor_modifier) - var/PriorityQueue/vital_modifiers = new/PriorityQueue(/proc/cmp_crew_sensor_modifier) - var/PriorityQueue/tracking_modifiers = new/PriorityQueue(/proc/cmp_crew_sensor_modifier) - - general_modifiers.Enqueue(new/crew_sensor_modifier/general()) - binary_modifiers.Enqueue(new/crew_sensor_modifier/binary()) - vital_modifiers.Enqueue(new/crew_sensor_modifier/vital()) - tracking_modifiers.Enqueue(new/crew_sensor_modifier/tracking()) - - modifier_queues = list() - modifier_queues[general_modifiers] = 0 - modifier_queues[binary_modifiers] = SUIT_SENSOR_BINARY - modifier_queues[vital_modifiers] = SUIT_SENSOR_VITAL - modifier_queues[tracking_modifiers] = SUIT_SENSOR_TRACKING - - modifier_queues_by_type = list() - modifier_queues_by_type[/crew_sensor_modifier/general] = general_modifiers - modifier_queues_by_type[/crew_sensor_modifier/binary] = binary_modifiers - modifier_queues_by_type[/crew_sensor_modifier/vital] = vital_modifiers - modifier_queues_by_type[/crew_sensor_modifier/tracking] = tracking_modifiers - - ..() - -/datum/repository/crew/proc/health_data(var/z_level) - var/list/crewmembers = list() - if(!z_level) - return crewmembers - - var/datum/cache_entry/cache_entry = cache_data[num2text(z_level)] - if(!cache_entry) - cache_entry = new/datum/cache_entry - cache_data[num2text(z_level)] = cache_entry - - if(world.time < cache_entry.timestamp) - return cache_entry.data - - cache_data_alert[num2text(z_level)] = FALSE - var/tracked = scan() - for(var/obj/item/clothing/under/C in tracked) - var/turf/pos = get_turf(C) - if(C.has_sensor && C.sensor_mode != SUIT_SENSOR_OFF && pos && AreConnectedZLevels(pos.z, z_level)) - if(istype(C.loc, /mob/living/carbon/human)) - var/mob/living/carbon/human/H = C.loc - if(H.w_uniform != C) - continue - - var/list/crewmemberData = list("sensor_type"=C.sensor_mode, "stat"=H.stat, "area"="", "x"=-1, "y"=-1, "z"=-1, "ref"="\ref[H]") - if(!(run_queues(H, C, pos, crewmemberData) & MOD_SUIT_SENSORS_REJECTED)) - crewmembers[++crewmembers.len] = crewmemberData - if (crewmemberData["alert"]) - cache_data_alert[num2text(z_level)] = TRUE - - crewmembers = sortByKey(crewmembers, "name") - cache_entry.timestamp = world.time + 5 SECONDS - cache_entry.data = crewmembers - - cache_data[num2text(z_level)] = cache_entry - - return crewmembers - -/datum/repository/crew/proc/has_health_alert(var/z_level) - . = FALSE - if(!z_level) - return - health_data(z_level) // Make sure cache doesn't get stale - . = cache_data_alert[num2text(z_level)] - -/datum/repository/crew/proc/scan() - var/list/tracked = list() - for(var/mob/living/carbon/human/H in SSmobs.mob_list) - if(istype(H.w_uniform, /obj/item/clothing/under)) - var/obj/item/clothing/under/C = H.w_uniform - if (C.has_sensor) - tracked |= C - return tracked - - -/datum/repository/crew/proc/run_queues(H, C, pos, crewmemberData) - for(var/modifier_queue in modifier_queues) - if(crewmemberData["sensor_type"] >= modifier_queues[modifier_queue]) - . = process_crew_data(modifier_queue, H, C, pos, crewmemberData) - if(. & MOD_SUIT_SENSORS_REJECTED) - return - -/datum/repository/crew/proc/process_crew_data(var/PriorityQueue/modifiers, var/mob/living/carbon/human/H, var/obj/item/clothing/under/C, var/turf/pos, var/list/crew_data) - var/current_priority = INFINITY - var/list/modifiers_of_this_priority = list() - - for(var/crew_sensor_modifier/csm in modifiers.L) - if(csm.priority < current_priority) - . = check_queue(modifiers_of_this_priority, H, C, pos, crew_data) - if(. != MOD_SUIT_SENSORS_NONE) - return - current_priority = csm.priority - modifiers_of_this_priority += csm - return check_queue(modifiers_of_this_priority, H, C, pos, crew_data) - -/datum/repository/crew/proc/check_queue(var/list/modifiers_of_this_priority, H, C, pos, crew_data) - while(modifiers_of_this_priority.len) - var/crew_sensor_modifier/pcsm = pick(modifiers_of_this_priority) - modifiers_of_this_priority -= pcsm - if(pcsm.may_process_crew_data(H, C, pos)) - . = pcsm.process_crew_data(H, C, pos, crew_data) - if(. != MOD_SUIT_SENSORS_NONE) - return - return MOD_SUIT_SENSORS_NONE - -/datum/repository/crew/proc/add_modifier(var/base_type, var/crew_sensor_modifier/csm) - if(!istype(csm, base_type)) - CRASH("The given crew sensor modifier was not of the given base type.") - var/PriorityQueue/pq = modifier_queues_by_type[base_type] - if(!pq) - CRASH("The given base type was not a valid base type.") - if(csm in pq.L) - CRASH("This crew sensor modifier has already been supplied.") - pq.Enqueue(csm) - return TRUE - -/datum/repository/crew/proc/remove_modifier(var/base_type, var/crew_sensor_modifier/csm) - if(!istype(csm, base_type)) - CRASH("The given crew sensor modifier was not of the given base type.") - var/PriorityQueue/pq = modifier_queues_by_type[base_type] - if(!pq) - CRASH("The given base type was not a valid base type.") - return pq.Remove(csm) diff --git a/code/datums/repositories/crew/crew_sensor_modifier.dm b/code/datums/repositories/crew/crew_sensor_modifier.dm deleted file mode 100644 index 753e429e83d9b..0000000000000 --- a/code/datums/repositories/crew/crew_sensor_modifier.dm +++ /dev/null @@ -1,20 +0,0 @@ -/crew_sensor_modifier - var/priority = 1 - var/atom/holder - var/may_process_proc - -/crew_sensor_modifier/New(var/atom/holder, var/may_process_proc) - ..() - src.holder = holder - src.may_process_proc = may_process_proc - -/crew_sensor_modifier/Destroy() - holder = null - may_process_proc = null - . = ..() - -/crew_sensor_modifier/proc/may_process_crew_data(var/mob/living/carbon/human/H, var/obj/item/clothing/under/C, var/turf/pos) - return holder && may_process_proc ? call(holder, may_process_proc)(H, C, pos) : TRUE - -/crew_sensor_modifier/proc/process_crew_data(var/mob/living/carbon/human/H, var/obj/item/clothing/under/C, var/turf/pos, var/list/crew_data) - return MOD_SUIT_SENSORS_HANDLED diff --git a/code/datums/repositories/crew/general.dm b/code/datums/repositories/crew/general.dm deleted file mode 100644 index a2c09ddab375b..0000000000000 --- a/code/datums/repositories/crew/general.dm +++ /dev/null @@ -1,48 +0,0 @@ -/* General */ -/crew_sensor_modifier/general/process_crew_data(var/mob/living/carbon/human/H, var/obj/item/clothing/under/C, var/turf/pos, var/list/crew_data) - crew_data["name"] = H.get_authentification_name(if_no_id="Unknown") - crew_data["rank"] = H.get_authentification_rank(if_no_id="Unknown", if_no_job="No Job") - crew_data["assignment"] = H.get_assignment(if_no_id="Unknown", if_no_job="No Job") - return ..() - -/* Jamming */ -/crew_sensor_modifier/general/jamming - priority = 5 - -/crew_sensor_modifier/general/jamming/off/process_crew_data(var/mob/living/carbon/human/H, var/obj/item/clothing/under/C, var/turf/pos, var/list/crew_data) - . = ..() - // This works only because general is checked first and crew_data["sensor_type"] is used to check if whether any additional data should be included. - crew_data["sensor_type"] = SUIT_SENSOR_OFF - return MOD_SUIT_SENSORS_REJECTED - -/crew_sensor_modifier/general/jamming/binary/process_crew_data(var/mob/living/carbon/human/H, var/obj/item/clothing/under/C, var/turf/pos, var/list/crew_data) - . = ..() - crew_data["sensor_type"] = SUIT_SENSOR_BINARY - -/crew_sensor_modifier/general/jamming/vital/process_crew_data(var/mob/living/carbon/human/H, var/obj/item/clothing/under/C, var/turf/pos, var/list/crew_data) - . = ..() - crew_data["sensor_type"] = SUIT_SENSOR_VITAL - -/crew_sensor_modifier/general/jamming/tracking/process_crew_data(var/mob/living/carbon/human/H, var/obj/item/clothing/under/C, var/turf/pos, var/list/crew_data) - . = ..() - crew_data["sensor_type"] = SUIT_SENSOR_TRACKING - -/* Random */ -/crew_sensor_modifier/general/jamming/random - var/random_sensor_type_prob = 15 - var/random_assignment_prob = 10 - -/crew_sensor_modifier/general/jamming/random/moderate - random_sensor_type_prob = 30 - random_assignment_prob = 20 - -/crew_sensor_modifier/general/jamming/random/major - random_sensor_type_prob = 60 - random_assignment_prob = 40 - -/crew_sensor_modifier/general/jamming/random/process_crew_data(var/mob/living/carbon/human/H, var/obj/item/clothing/under/C, var/turf/pos, var/list/crew_data) - . = ..() - if(prob(random_sensor_type_prob)) - crew_data["sensor_type"] = pick(SUIT_SENSOR_OFF, SUIT_SENSOR_BINARY, SUIT_SENSOR_VITAL, SUIT_SENSOR_TRACKING) - if(prob(random_assignment_prob)) - crew_data["assignment"] = pick("Agent", "Infiltrator", "Passenger", "Crewman", "Unknown") diff --git a/code/datums/repositories/crew/tracking.dm b/code/datums/repositories/crew/tracking.dm deleted file mode 100644 index 378298b9a5066..0000000000000 --- a/code/datums/repositories/crew/tracking.dm +++ /dev/null @@ -1,39 +0,0 @@ -/* Tracking */ -/crew_sensor_modifier/tracking/process_crew_data(var/mob/living/carbon/human/H, var/obj/item/clothing/under/C, var/turf/pos, var/list/crew_data) - if(pos) - var/area/A = get_area(pos) - crew_data["area"] = sanitize(A.name) - crew_data["x"] = pos.x - crew_data["y"] = pos.y - crew_data["z"] = pos.z - return ..() - -/* Random */ -/crew_sensor_modifier/tracking/jamming - priority = 5 - -/crew_sensor_modifier/tracking/jamming/localize/process_crew_data(var/mob/living/carbon/human/H, var/obj/item/clothing/under/C, var/turf/pos, var/list/crew_data) - return ..(H, C, get_turf(holder), crew_data) - -/crew_sensor_modifier/tracking/jamming/random - var/shift_range = 7 - var/x_shift - var/y_shift - var/next_shift_change - -/crew_sensor_modifier/tracking/jamming/random/moderate - shift_range = 14 - -/crew_sensor_modifier/tracking/jamming/random/major - shift_range = 21 - -/crew_sensor_modifier/tracking/jamming/random/process_crew_data(var/mob/living/carbon/human/H, var/obj/item/clothing/under/C, var/turf/pos, var/list/crew_data) - if(world.time > next_shift_change) - next_shift_change = world.time + rand(30 SECONDS, 2 MINUTES) - x_shift = rand(-shift_range, shift_range) - y_shift = rand(-shift_range, shift_range) - if(pos) - var/new_x = clamp(pos.x + x_shift, 1, world.maxx) - var/new_y = clamp(pos.y + y_shift, 1, world.maxy) - pos = locate(new_x, new_y, pos.z) - return ..(H, C, pos, crew_data) diff --git a/code/datums/repositories/crew/vital.dm b/code/datums/repositories/crew/vital.dm deleted file mode 100644 index 1af309bd1f4c2..0000000000000 --- a/code/datums/repositories/crew/vital.dm +++ /dev/null @@ -1,126 +0,0 @@ -/* Vital */ -/crew_sensor_modifier/vital/process_crew_data(var/mob/living/carbon/human/H, var/obj/item/clothing/under/C, var/turf/pos, var/list/crew_data) - crew_data["true_pulse"] = -1 - crew_data["pulse"] = "N/A" - crew_data["pulse_span"] = "neutral" - if(!H.isSynthetic() && H.should_have_organ(BP_HEART)) - var/obj/item/organ/internal/heart/O = H.internal_organs_by_name[BP_HEART] - if (!O || !BP_IS_ROBOTIC(O)) // Don't make medical freak out over prosthetic hearts - crew_data["true_pulse"] = H.pulse() - crew_data["pulse"] = H.get_pulse(GETPULSE_TOOL) - switch(crew_data["true_pulse"]) - if(PULSE_NONE) - crew_data["pulse_span"] = "bad" - if(PULSE_SLOW) - crew_data["pulse_span"] = "average" - if(PULSE_NORM) - crew_data["pulse_span"] = "good" - if(PULSE_FAST) - crew_data["pulse_span"] = "highlight" - if(PULSE_2FAST) - crew_data["pulse_span"] = "average" - if(PULSE_THREADY) - crew_data["pulse_span"] = "bad" - crew_data["charge"] = "N/A" - crew_data["charge_span"] = "N/A" - if(H.isSynthetic()) - var/obj/item/organ/internal/cell/cell = H.internal_organs_by_name[BP_CELL] - if(cell) - crew_data["charge"] = cell.percent() - if(cell.percent() <= 10) - crew_data["charge_span"] = "bad" - else - crew_data["charge_span"] = "good" - else - crew_data["charge"] = "No cell" - crew_data["charge_span"] = "bad" - - crew_data["pressure"] = "N/A" - crew_data["true_oxygenation"] = -1 - crew_data["oxygenation"] = "" - crew_data["oxygenation_span"] = "" - if(!H.isSynthetic() && H.should_have_organ(BP_HEART)) - crew_data["pressure"] = H.get_blood_pressure() - crew_data["true_oxygenation"] = H.get_blood_oxygenation() - switch (crew_data["true_oxygenation"]) - if(105 to INFINITY) - crew_data["oxygenation"] = "increased" - crew_data["oxygenation_span"] = "highlight" - if(BLOOD_VOLUME_SAFE to 105) - crew_data["oxygenation"] = "normal" - crew_data["oxygenation_span"] = "good" - if(BLOOD_VOLUME_OKAY to BLOOD_VOLUME_SAFE) - crew_data["oxygenation"] = "low" - crew_data["oxygenation_span"] = "average" - if(BLOOD_VOLUME_BAD to BLOOD_VOLUME_OKAY) - crew_data["oxygenation"] = "very low" - crew_data["oxygenation_span"] = "bad" - if(-(INFINITY) to BLOOD_VOLUME_BAD) - crew_data["oxygenation"] = "extremely low" - crew_data["oxygenation_span"] = "bad" - - crew_data["bodytemp"] = H.bodytemperature - T0C - return ..() - -/crew_sensor_modifier/vital/proc/set_healthy(var/list/crew_data) - crew_data["alert"] = FALSE - if(crew_data["true_pulse"] != -1) - crew_data["true_pulse"] = PULSE_NORM - crew_data["pulse"] = rand(60, 90) - crew_data["pulse_span"] = "good" - - if(isnum(crew_data["charge"])) - crew_data["charge"] = rand(10,66) - crew_data["charge_span"] = "good" - - if(crew_data["true_oxygenation"] != -1) - crew_data["pressure"] = "[Floor(120+rand(-5,5))]/[Floor(80+rand(-5,5))]" - crew_data["true_oxygenation"] = 100 - crew_data["oxygenation"] = "normal" - crew_data["oxygenation_span"] = "good" - -/crew_sensor_modifier/vital/proc/set_dead(var/list/crew_data) - crew_data["alert"] = TRUE - if(crew_data["true_pulse"] != -1) - crew_data["true_pulse"] = PULSE_NONE - crew_data["pulse"] = 0 - crew_data["pulse_span"] = "bad" - - if(isnum(crew_data["charge"])) - crew_data["charge"] = 0 - crew_data["charge_span"] = "bad" - - if(crew_data["true_oxygenation"] != -1) - crew_data["pressure"] = "[Floor((120+rand(-5,5))*0.25)]/[Floor((80+rand(-5,5))*0.25)]" - crew_data["true_oxygenation"] = 25 - crew_data["oxygenation"] = "extremely low" - crew_data["oxygenation_span"] = "bad" - -/* Jamming */ -/crew_sensor_modifier/vital/jamming - priority = 5 - -/crew_sensor_modifier/vital/jamming/healthy/process_crew_data(var/mob/living/carbon/human/H, var/obj/item/clothing/under/C, var/turf/pos, var/list/crew_data) - . = ..() - set_healthy(crew_data) - return MOD_SUIT_SENSORS_HANDLED - -/crew_sensor_modifier/vital/jamming/dead/process_crew_data(var/mob/living/carbon/human/H, var/obj/item/clothing/under/C, var/turf/pos, var/list/crew_data) - . = ..() - set_dead(crew_data) - return MOD_SUIT_SENSORS_HANDLED - -/* Random */ -/crew_sensor_modifier/vital/jamming/random - var/error_prob = 25 - -/crew_sensor_modifier/vital/jamming/random/moderate - error_prob = 50 - -/crew_sensor_modifier/vital/jamming/random/major - error_prob = 100 - -/crew_sensor_modifier/vital/jamming/random/process_crew_data(var/mob/living/carbon/human/H, var/obj/item/clothing/under/C, var/turf/pos, var/list/crew_data) - . = ..() - if(prob(error_prob)) - pick(set_healthy(crew_data), set_dead(crew_data)) diff --git a/code/datums/repositories/crew/~defines.dm b/code/datums/repositories/crew/~defines.dm deleted file mode 100644 index 914fac37d9647..0000000000000 --- a/code/datums/repositories/crew/~defines.dm +++ /dev/null @@ -1,3 +0,0 @@ -#undef MOD_SUIT_SENSORS_NONE -#undef MOD_SUIT_SENSORS_HANDLED -#undef MOD_SUIT_SENSORS_REJECTED diff --git a/code/datums/repositories/decls.dm b/code/datums/repositories/decls.dm deleted file mode 100644 index ab04bf46810e9..0000000000000 --- a/code/datums/repositories/decls.dm +++ /dev/null @@ -1,67 +0,0 @@ -var/global/repository/decls/decls_repository = new() - -/repository/decls - var/list/fetched_decls - var/list/fetched_decl_types - var/list/fetched_decl_subtypes - -/repository/decls/New() - ..() - fetched_decls = list() - fetched_decl_types = list() - fetched_decl_subtypes = list() - -/repository/decls/proc/get_decl(var/decl_type) - . = fetched_decls[decl_type] - if (!.) - if (is_abstract(decl_type)) - return - . = new decl_type - fetched_decls[decl_type] = . - - var/decl/decl = . - if(istype(decl)) - decl.Initialize() - -/repository/decls/proc/get_decls(var/list/decl_types) - . = list() - for (var/decl_type in decl_types) - var/decl = get_decl(decl_type) - if (!decl) - continue - .[decl_type] = decl - - -/repository/decls/proc/get_decls_unassociated(var/list/decl_types) - . = list() - for (var/decl_type in decl_types) - var/decl = get_decl(decl_type) - if (!decl) - continue - . += decl - -/repository/decls/proc/get_decls_of_type(var/decl_prototype) - . = fetched_decl_types[decl_prototype] - if(!.) - . = get_decls(typesof(decl_prototype)) - fetched_decl_types[decl_prototype] = . - -/repository/decls/proc/get_decls_of_subtype(var/decl_prototype) - . = fetched_decl_subtypes[decl_prototype] - if(!.) - . = get_decls(subtypesof(decl_prototype)) - fetched_decl_subtypes[decl_prototype] = . - - -/decl - abstract_type = /decl - - -/decl/proc/Initialize() - SHOULD_CALL_PARENT(TRUE) - SHOULD_NOT_SLEEP(TRUE) - -/decl/Destroy() - SHOULD_CALL_PARENT(FALSE) - crash_with("Prevented attempt to delete a decl instance: [log_info_line(src)]") - return QDEL_HINT_LETMELIVE // Prevents Decl destruction diff --git a/code/datums/repositories/follow.dm b/code/datums/repositories/follow.dm deleted file mode 100644 index b238df3c5e6ae..0000000000000 --- a/code/datums/repositories/follow.dm +++ /dev/null @@ -1,250 +0,0 @@ -var/global/repository/follow/follow_repository = new() - -/repository/follow - var/datum/cache_entry/valid_until/cache - - var/list/followed_objects - var/list/followed_objects_assoc - var/list/followed_subtypes - - var/list/excluded_subtypes = list( - /obj/machinery/atmospherics, // Atmos stuff calls initialize time and time again.., - /mob/living/carbon/human/dummy/mannequin - ) - -/repository/follow/New() - ..() - followed_objects = list() - followed_objects_assoc = list() - followed_subtypes = list() - - for(var/fht in subtypesof(/datum/follow_holder)) - var/datum/follow_holder/fh = fht - followed_subtypes[initial(fh.followed_type)] = fht - -/repository/follow/proc/add_subject(var/atom/movable/AM) - cache = null - - var/follow_holder_type = get_follow_type(AM) - var/follow_holder = new follow_holder_type(AM) - - followed_objects_assoc[AM] = follow_holder - followed_objects.Add(follow_holder) - - GLOB.destroyed_event.register(AM, src, /repository/follow/proc/remove_subject) - -/repository/follow/proc/remove_subject(var/atom/movable/AM) - cache = null - - var/follow_holder = followed_objects_assoc[AM] - - followed_objects_assoc -= AM - followed_objects.Remove(follow_holder) - - GLOB.destroyed_event.unregister(AM, src, /repository/follow/proc/remove_subject) - - qdel(follow_holder) - -/repository/follow/proc/get_follow_type(var/atom/movable/AM) - for(var/follow_type in followed_subtypes) - if(istype(AM, follow_type)) - return followed_subtypes[follow_type] - -/repository/follow/proc/get_follow_targets() - if(cache && cache.is_valid()) - return cache.data - // The previous cache entry should have no further references and will thus be GCd eventually without qdel - // Cache invalidated periodically in case of name changes, etc. - cache = new(5 SECONDS) - - var/list/followed_by_name = list() - for(var/followed_object in followed_objects) - var/datum/follow_holder/fh = followed_object - if(fh.show_entry()) - group_by(followed_by_name, fh.get_name(TRUE), fh) - - var/list/L = list() - - for(var/followed_name in followed_by_name) - var/list/followed_things = followed_by_name[followed_name] - if(followed_things.len == 1) - ADD_SORTED(L, followed_things[1], /proc/cmp_follow_holder) - else - for(var/i = 1 to followed_things.len) - var/datum/follow_holder/followed_thing = followed_things[i] - followed_thing.instance = i - followed_thing.get_name(TRUE) - ADD_SORTED(L, followed_thing, /proc/cmp_follow_holder) - - cache.data = L - return L - -/atom/movable/Initialize() - . = ..() - if(!is_type_in_list(src, follow_repository.excluded_subtypes) && is_type_in_list(src, follow_repository.followed_subtypes)) - follow_repository.add_subject(src) - -/****************** -* Follow Metadata * -******************/ - -/datum/follow_holder - var/name - var/suffix = "" - var/instance - var/followed_type - var/sort_order - var/atom/movable/followed_instance - -/datum/follow_holder/New(var/atom/movable/followed_instance) - ..() - src.followed_instance = followed_instance - suffix = suffix ? "\[[suffix]\]" : suffix - -/datum/follow_holder/Destroy() - followed_instance = null - . = ..() - -/datum/follow_holder/proc/get_name(var/recalc = FALSE) - if(!name || recalc) - var/suffix = get_suffix(followed_instance) - name = "[followed_instance.follow_name()][instance ? " ([instance])" : ""][suffix ? " [suffix]" : ""]" - return name - -/atom/movable/proc/follow_name() - return name - -/mob/follow_name() - return real_name || name - -/datum/follow_holder/proc/show_entry() - return !!followed_instance - -/datum/follow_holder/proc/get_suffix() - var/extra_suffix = followed_instance.follow_suffix() - return "[suffix][suffix && extra_suffix ? " " : ""][extra_suffix]" - -/atom/movable/proc/follow_suffix() - return - -/mob/living/follow_suffix() - return stat == DEAD ? "\[DEAD\]" : ..() - -// If you wish for objects to have coordinates you can simply uncomment the lines below -// , just keep in mind that tracking is based on name which makes following something that moves often a bit of a pain (even with the 3 second cache). -/* -/obj/follow_suffix() - var/turf/T = get_turf(src) - return T ? "\[[T.x],[T.y],[T.z]\]" : ..() -*/ - -/datum/follow_holder/eye - sort_order = 0 - followed_type = /mob/observer/eye - suffix = "Eye" - -/datum/follow_holder/ai - sort_order = 1 - followed_type = /mob/living/silicon/ai - suffix = "AI" - -/datum/follow_holder/pai - sort_order = 2 - followed_type = /mob/living/silicon/pai - suffix = "pAI" - -/datum/follow_holder/robot - sort_order = 2 - followed_type = /mob/living/silicon/robot - -/datum/follow_holder/robot/show_entry() - var/mob/living/silicon/robot/R = followed_instance - return ..() && R.braintype - -/datum/follow_holder/robot/get_suffix(var/mob/living/silicon/robot/R) - suffix = "\[[R.braintype]\][R.module ? " \[[R.module.name]\]" : ""]" - return ..() - -/datum/follow_holder/human - sort_order = 2 - followed_type = /mob/living/carbon/human - -/datum/follow_holder/human/get_suffix(var/mob/living/carbon/human/H) - suffix = "\[[H.species.name]\]" - return ..() - -/datum/follow_holder/brain - sort_order = 3 - followed_type = /mob/living/carbon/brain - suffix = "Brain" - -/datum/follow_holder/alien - sort_order = 4 - followed_type = /mob/living/carbon/alien - suffix = "Alien" - -/datum/follow_holder/ghost - sort_order = 5 - followed_type = /mob/observer/ghost - suffix = "Ghost" - -/datum/follow_holder/simple_animal - sort_order = 6 - followed_type = /mob/living/simple_animal - suffix = "Animal" - -/datum/follow_holder/slime - sort_order = 6 - followed_type = /mob/living/carbon/slime - suffix = "Slime" - -/datum/follow_holder/spiderling - sort_order = 6 - followed_type = /obj/effect/spider/spiderling - -/datum/follow_holder/spiderling/show_entry() - var/obj/effect/spider/spiderling/S = followed_instance - return ..() && S.amount_grown > 0 - -/datum/follow_holder/bot - sort_order = 7 - followed_type = /mob/living/bot - suffix = "Bot" - -/datum/follow_holder/mob - sort_order = 7 - followed_type = /mob/living // List all other (living) mobs we haven't given a special suffix - suffix = "Mob" - -/datum/follow_holder/blob - sort_order = 9 - followed_type = /obj/effect/blob/core - suffix = "Blob" - -/datum/follow_holder/supermatter - sort_order = 10 - followed_type = /obj/machinery/power/supermatter - -/datum/follow_holder/singularity - sort_order = 10 - followed_type = /obj/singularity - -/datum/follow_holder/nuke_disc - sort_order = 11 - followed_type = /obj/item/disk/nuclear - -/datum/follow_holder/nuclear_bomb - sort_order = 12 - followed_type = /obj/machinery/nuclearbomb - -/datum/follow_holder/captains_spare - sort_order = 13 - followed_type = /obj/item/card/id/captains_spare - -/datum/follow_holder/voxstack - sort_order = 14 - followed_type = /obj/item/organ/internal/voxstack - -/datum/follow_holder/voxstack/show_entry() - var/obj/item/organ/internal/voxstack/S = followed_instance - return ..() && !S.owner diff --git a/code/datums/repositories/images.dm b/code/datums/repositories/images.dm deleted file mode 100644 index aada3b15394eb..0000000000000 --- a/code/datums/repositories/images.dm +++ /dev/null @@ -1,59 +0,0 @@ -/* -* This repository is intended for images that are never altered after creation -*/ - -var/global/repository/images/image_repository = new() - -/repository/images - var/list/image_cache_for_atoms - var/list/image_cache_for_overlays - -/repository/images/New() - ..() - image_cache_for_atoms = list() - image_cache_for_overlays = list() - -// Returns an image bound to the given atom and which is typically applied to client.images. -/repository/images/proc/atom_image(var/atom/holder, var/icon, var/icon_state, var/plane = FLOAT_PLANE, var/layer = FLOAT_LAYER) - var/atom_cache_list = image_cache_for_atoms[holder] - if(!atom_cache_list) - atom_cache_list = list() - image_cache_for_atoms[holder] = atom_cache_list - GLOB.destroyed_event.register(holder, src, /repository/images/proc/atom_destroyed) - - var/cache_key = "[icon]-[icon_state]-[plane]-[layer]" - . = atom_cache_list[cache_key] - if(!.) - var/image/I = image(icon, holder, icon_state) - I.plane = plane - I.layer = layer - atom_cache_list[cache_key] = I - return I - -/repository/images/proc/atom_destroyed(var/atom/destroyed) - var/list/atom_cache_list = image_cache_for_atoms[destroyed] - for(var/img in atom_cache_list) - qdel(atom_cache_list[img]) - atom_cache_list.Cut() - image_cache_for_atoms -= destroyed - - GLOB.destroyed_event.unregister(destroyed, src, /repository/images/proc/atom_destroyed) - -// Returns an image not bound to anything and which is typically applied as an overlay/underlay. -/repository/images/proc/overlay_image(var/icon, var/icon_state, var/alpha, var/appearance_flags, var/color, var/dir, var/plane = FLOAT_PLANE, var/layer = FLOAT_LAYER) - var/cache_key = "[icon]-[icon_state]-[alpha]-[appearance_flags]-[color]-[dir]-[plane]-[layer]" - . = image_cache_for_overlays[cache_key] - if(!.) - var/image/I = image(icon = icon, icon_state = icon_state) - if(!isnull(dir)) - I.dir = dir - if(!isnull(alpha)) - I.alpha = alpha - if(!isnull(appearance_flags)) - I.appearance_flags = DEFAULT_APPEARANCE_FLAGS | appearance_flags - if(!isnull(plane)) - I.plane = plane - if(!isnull(layer)) - I.layer = layer - image_cache_for_overlays[cache_key] = I - return I diff --git a/code/datums/repositories/mobs.dm b/code/datums/repositories/mobs.dm deleted file mode 100644 index 024aed9c4507c..0000000000000 --- a/code/datums/repositories/mobs.dm +++ /dev/null @@ -1,28 +0,0 @@ -var/global/repository/mob/mob_repository = new() - -/repository/mob - var/list/mobs_ - -/repository/mob/New() - ..() - mobs_ = list() - -// A lite mob is unique per ckey and mob real name/ref (ref conflicts possible.. but oh well) -/repository/mob/proc/get_lite_mob(var/mob/M) - . = mobs_[mob2unique(M)] - if(!.) - . = new/datum/mob_lite(M) - mobs_[mob2unique(M)] = . - -/datum/mob_lite - var/name - var/ref - var/datum/client_lite/client - -/datum/mob_lite/New(var/mob/M) - name = M ? (M.real_name ? M.real_name : M.name) : name - ref = any2ref(M) - client = client_repository.get_lite_client(M) - -/datum/mob_lite/proc/key_name(var/pm_link = TRUE, var/check_if_offline = TRUE) - return client.key_name(pm_link, check_if_offline) diff --git a/code/datums/repositories/repository.dm b/code/datums/repositories/repository.dm deleted file mode 100644 index 18b28763321ff..0000000000000 --- a/code/datums/repositories/repository.dm +++ /dev/null @@ -1,19 +0,0 @@ -/repository/New() - return - -/datum/cache_entry - var/timestamp - var/data - -/datum/cache_entry/New() - timestamp = world.time - -/datum/cache_entry/proc/is_valid() - return FALSE - -/datum/cache_entry/valid_until/New(var/valid_duration) - ..() - timestamp += valid_duration - -/datum/cache_entry/valid_until/is_valid() - return world.time < timestamp diff --git a/code/datums/repositories/sound_channels.dm b/code/datums/repositories/sound_channels.dm deleted file mode 100644 index 26f9714ecf731..0000000000000 --- a/code/datums/repositories/sound_channels.dm +++ /dev/null @@ -1,50 +0,0 @@ -GLOBAL_DATUM_INIT(sound_channels, /repository/sound_channels, new) -GLOBAL_VAR_INIT(lobby_sound_channel, GLOB.sound_channels.RequestChannel("LOBBY")) -GLOBAL_VAR_INIT(vote_sound_channel, GLOB.sound_channels.RequestChannel("VOTE")) -GLOBAL_VAR_INIT(admin_sound_channel, GLOB.sound_channels.RequestChannel("ADMIN_FUN")) - -GLOBAL_VAR_INIT(ambience_channel_vents, GLOB.sound_channels.RequestChannel("AMBIENCE_VENTS")) -GLOBAL_VAR_INIT(ambience_channel_forced, GLOB.sound_channels.RequestChannel("AMBIENCE_FORCED")) -GLOBAL_VAR_INIT(ambience_channel_common, GLOB.sound_channels.RequestChannel("AMBIENCE_COMMON")) - -/repository/sound_channels - var/datum/stack/available_channels - var/list/keys_by_channel // So we know who to blame if we run out - var/channel_ceiling = 1024 // Initial value is the current BYOND maximum number of channels - -/repository/sound_channels/New() - ..() - available_channels = new() - -/repository/sound_channels/proc/RequestChannel(var/key) - . = RequestChannels(key, 1) - return LAZYLEN(.) && .[1] - -/repository/sound_channels/proc/RequestChannels(var/key, var/amount) - if(!key) - CRASH("Invalid key given.") - . = list() - - for(var/i = 1 to amount) - var/channel = available_channels.Pop() // Check if someone else has released their channel. - if(!channel) - if(channel_ceiling <= 0) // This basically means we ran out of channels - break - channel = channel_ceiling-- - . += channel - - if(length(.) != amount) - ReleaseChannels(.) - CRASH("Unable to supply the requested amount of channels: [key] - Expected [amount], was [length(.)]") - - for(var/channel in .) - LAZYSET(keys_by_channel, "[channel]", key) - return . - -/repository/sound_channels/proc/ReleaseChannel(var/channel) - ReleaseChannels(list(channel)) - -/repository/sound_channels/proc/ReleaseChannels(var/list/channels) - for(var/channel in channels) - LAZYREMOVE(keys_by_channel, "[channel]") - available_channels.Push(channel) diff --git a/code/datums/repositories/unique.dm b/code/datums/repositories/unique.dm deleted file mode 100644 index ddc779ebc4ad0..0000000000000 --- a/code/datums/repositories/unique.dm +++ /dev/null @@ -1,70 +0,0 @@ -var/global/repository/unique/uniqueness_repository = new() - -/repository/unique - var/list/generators - -/repository/unique/New() - ..() - generators = list() - -/repository/unique/proc/Generate() - var/generator_type = args[1] - var/datum/uniqueness_generator/generator = generators[generator_type] - if(!generator) - generator = new generator_type() - generators[generator_type] = generator - var/list/generator_args = args.Copy() // Cannot cut args directly, BYOND complains about it being readonly. - generator_args -= generator_type - return generator.Generate(arglist(generator_args)) - -/datum/uniqueness_generator/proc/Generate() - return - -/datum/uniqueness_generator/id_sequential - var/list/ids_by_key - -/datum/uniqueness_generator/id_sequential/New() - ..() - ids_by_key = list() - -/datum/uniqueness_generator/id_sequential/Generate(var/key, var/default_id = 100) - var/id = ids_by_key[key] - if(id) - id++ - else - id = default_id - - ids_by_key[key] = id - . = id - -/datum/uniqueness_generator/id_random - var/list/ids_by_key - -/datum/uniqueness_generator/id_random/New() - ..() - ids_by_key = list() - -/datum/uniqueness_generator/id_random/Generate(var/key, var/min, var/max) - var/list/ids = ids_by_key[key] - if(!ids) - ids = list() - ids_by_key[key] = ids - - if(ids.len >= (max - min) + 1) - error("Random ID limit reached for key [key].") - ids.Cut() - - if(ids.len >= 0.6 * ((max-min) + 1)) // if more than 60% of possible ids used - . = list() - for(var/i = min to max) - if(i in ids) - continue - . += i - var/id = pick(.) - ids += id - return id - else - do - . = rand(min, max) - while(. in ids) - ids += . diff --git a/code/datums/repositories/uplink_purchases.dm b/code/datums/repositories/uplink_purchases.dm deleted file mode 100644 index 780e8ee9fd760..0000000000000 --- a/code/datums/repositories/uplink_purchases.dm +++ /dev/null @@ -1,43 +0,0 @@ -var/global/repository/uplink_purchases/uplink_purchase_repository = new() - -/repository/uplink_purchases - var/list/purchases_by_mind - -/repository/uplink_purchases/New() - purchases_by_mind = list() - -/repository/uplink_purchases/proc/add_entry(var/datum/mind/m, var/item, var/cost) - var/uplink_purchase_entry/upe = purchases_by_mind[m] - if(!upe) - upe = new() - purchases_by_mind[m] = upe - upe.add_entry(item, cost) - -/repository/uplink_purchases/proc/print_entries() - if(purchases_by_mind.len) - to_world("The following went shopping:") - - var/list/pur_log = list() - for (var/datum/mind/ply in purchases_by_mind) - pur_log.Cut() - var/uplink_purchase_entry/upe = purchases_by_mind[ply] - to_world("[ply.name] (used [upe.total_cost] TC\s):") - - for (var/datum/uplink_item/UI in upe.purchased_items) - pur_log += "[upe.purchased_items[UI]]x[UI.log_icon()][UI.name]" - to_world(english_list(pur_log, nothing_text = "")) - - -/proc/debug_print() - uplink_purchase_repository.print_entries() - -/uplink_purchase_entry - var/total_cost - var/list/purchased_items - -/uplink_purchase_entry/New() - purchased_items = new() - -/uplink_purchase_entry/proc/add_entry(var/item, var/cost) - total_cost += cost - purchased_items[item] = purchased_items[item] + 1 diff --git a/code/datums/repositories/~defines.dm b/code/datums/repositories/~defines.dm deleted file mode 100644 index ba75d3a56edf2..0000000000000 --- a/code/datums/repositories/~defines.dm +++ /dev/null @@ -1 +0,0 @@ -#undef mob2unique diff --git a/code/datums/ruins.dm b/code/datums/ruins.dm deleted file mode 100644 index 51611ccfe629c..0000000000000 --- a/code/datums/ruins.dm +++ /dev/null @@ -1,27 +0,0 @@ -/datum/map_template/ruin - //name = "A Chest of Doubloons" - name = null - var/description = "In the middle of a clearing in the rockface, there's a chest filled with gold coins with Spanish engravings. \ - How is there a wooden container filled with 18th century coinage in the middle of a lavawracked hellscape? \ - It is clearly a mystery." - - var/spawn_weight = 1 - var/spawn_cost = 0 - var/player_cost = 0 - - var/prefix = null - var/suffixes = null - template_flags = 0 // No duplicates by default - - // !! Currently only implemented for away sites - var/list/force_ruins // Listed ruins are always spawned unless disallowed by flags. - var/list/allow_ruins // Listed ruins are added to the set of available spawns. - var/list/ban_ruins // Listed ruins are removed from the set of available spawns. Beats allowed. - -/datum/map_template/ruin/New() - if (suffixes) - mappaths = list() - for (var/suffix in suffixes) - mappaths += (prefix + suffix) - - ..() diff --git a/code/datums/security_state.dm b/code/datums/security_state.dm deleted file mode 100644 index d7b7191f14671..0000000000000 --- a/code/datums/security_state.dm +++ /dev/null @@ -1,279 +0,0 @@ -/decl/security_state - // When defining any of these values type paths should be used, not instances. Instances will be acquired in /New() - - var/decl/security_level/severe_security_level // At which security level (and higher) the use of nuclear fission devices and other extreme measures are allowed. Defaults to the last entry in all_security_levels if unset. - var/decl/security_level/high_security_level // At which security level (and higher) transfer votes are disabled, ERT may be requested, and other similar high alert implications. Defaults to the second to last entry in all_security_levels if unset. - // All security levels within the above convention: Low, Guarded, Elevated, High, Severe - - - // Under normal conditions the crew may not raise the current security level higher than the highest_standard_security_level - // The crew may also not adjust the security level once it is above the highest_standard_security_level. - // Defaults to the second to last entry in all_security_levels if unset/null. - // Set to FALSE/0 if there should be no restrictions. - var/decl/security_level/highest_standard_security_level - - var/decl/security_level/current_security_level // The current security level. Defaults to the first entry in all_security_levels if unset. - var/decl/security_level/stored_security_level // The security level that we are escalating to high security from - we will return to this level once we choose to revert. - var/list/all_security_levels // List of all available security levels - var/list/standard_security_levels // List of all normally selectable security levels - var/list/comm_console_security_levels // List of all selectable security levels for the command and communication console - basically standard_security_levels - 1 - -/decl/security_state/New() - // Setup the severe security level - if(!(severe_security_level in all_security_levels)) - severe_security_level = all_security_levels[all_security_levels.len] - severe_security_level = decls_repository.get_decl(severe_security_level) - - // Setup the high security level - if(!(high_security_level in all_security_levels)) - high_security_level = all_security_levels[all_security_levels.len - 1] - high_security_level = decls_repository.get_decl(high_security_level) - - // Setup the highest standard security level - if(highest_standard_security_level || isnull(highest_standard_security_level)) - if(!(highest_standard_security_level in all_security_levels)) - highest_standard_security_level = all_security_levels[all_security_levels.len - 1] - highest_standard_security_level = decls_repository.get_decl(highest_standard_security_level) - else - highest_standard_security_level = null - - // Setup the current security level - if(current_security_level in all_security_levels) - current_security_level = decls_repository.get_decl(current_security_level) - else - current_security_level = decls_repository.get_decl(all_security_levels[1]) - - // Setup the full list of available security levels now that we no longer need to use "x in all_security_levels" - var/list/security_level_instances = list() - for(var/security_level_type in all_security_levels) - security_level_instances += decls_repository.get_decl(security_level_type) - all_security_levels = security_level_instances - - standard_security_levels = list() - // Setup the list of normally selectable security levels - for(var/security_level in all_security_levels) - standard_security_levels += security_level - if(security_level == highest_standard_security_level) - break - - comm_console_security_levels = list() - // Setup the list of selectable security levels available in the comm. console - for(var/security_level in all_security_levels) - if(security_level == highest_standard_security_level) - break - comm_console_security_levels += security_level - - // Now we ensure the high security level is not above the severe one (but we allow them to be equal) - var/severe_index = all_security_levels.Find(severe_security_level) - var/high_index = all_security_levels.Find(high_security_level) - if(high_index > severe_index) - high_security_level = severe_security_level - -/decl/security_state/Initialize() - // Finally switch up to the default starting security level. - current_security_level.switching_up_to() - . = ..() - -/decl/security_state/proc/can_change_security_level() - return current_security_level in standard_security_levels - -/decl/security_state/proc/can_switch_to(var/given_security_level) - if(!can_change_security_level()) - return FALSE - return given_security_level in standard_security_levels - -/decl/security_state/proc/current_security_level_is_lower_than(var/given_security_level) - var/current_index = all_security_levels.Find(current_security_level) - var/given_index = all_security_levels.Find(given_security_level) - - return given_index && current_index < given_index - -/decl/security_state/proc/current_security_level_is_same_or_higher_than(var/given_security_level) - var/current_index = all_security_levels.Find(current_security_level) - var/given_index = all_security_levels.Find(given_security_level) - - return given_index && current_index >= given_index - -/decl/security_state/proc/current_security_level_is_higher_than(var/given_security_level) - var/current_index = all_security_levels.Find(current_security_level) - var/given_index = all_security_levels.Find(given_security_level) - - return given_index && current_index > given_index - -/decl/security_state/proc/set_security_level(var/decl/security_level/new_security_level, var/force_change = FALSE) - if(new_security_level == current_security_level) - return FALSE - if(!(new_security_level in all_security_levels)) - return FALSE - if(!force_change && !can_switch_to(new_security_level)) - return FALSE - - var/decl/security_level/previous_security_level = current_security_level - current_security_level = new_security_level - - var/previous_index = all_security_levels.Find(previous_security_level) - var/new_index = all_security_levels.Find(new_security_level) - - if(new_index > previous_index) - previous_security_level.switching_up_from() - new_security_level.switching_up_to() - else - previous_security_level.switching_down_from() - new_security_level.switching_down_to() - - for(var/thing in SSpsi.psi_dampeners) - var/obj/item/implant/psi_control/implant = thing - implant.update_functionality() - - log_and_message_admins("has changed the security level from [previous_security_level.name] to [new_security_level.name].") - return TRUE - -// This proc decreases the current security level, if possible -/decl/security_state/proc/decrease_security_level(var/force_change = FALSE) - var/current_index = all_security_levels.Find(current_security_level) - if(current_index == 1) - return FALSE - return set_security_level(all_security_levels[current_index - 1], force_change) - -/decl/security_level - var/icon - var/name - var/alarm_level = "off" - - // These values are primarily for station alarms and status displays, and which light colors and overlays to use - var/light_max_bright = 0.5 - var/light_inner_range = 0.1 - var/light_outer_range = 1 - var/light_color_alarm - var/light_color_status_display - - var/overlay_alarm - var/overlay_status_display - var/alert_border - - var/up_description - var/down_description - var/psionic_control_level = PSI_IMPLANT_WARN - -// Called when we're switching from a lower security level to this one. -/decl/security_level/proc/switching_up_to() - return - -// Called when we're switching from a higher security level to this one. -/decl/security_level/proc/switching_down_to() - return - -// Called when we're switching from this security level to a higher one. -/decl/security_level/proc/switching_up_from() - return - -// Called when we're switching from this security level to a lower one. -/decl/security_level/proc/switching_down_from() - return - -/* -* The default security state and levels setup -*/ -/decl/security_state/default - all_security_levels = list(/decl/security_level/default/code_green, /decl/security_level/default/code_blue, /decl/security_level/default/code_red, /decl/security_level/default/code_delta) - -/decl/security_level/default - icon = 'icons/misc/security_state.dmi' - - var/static/datum/announcement/priority/security/security_announcement_up = new(do_log = 0, do_newscast = 1, new_sound = sound('sound/misc/notice1.ogg')) - var/static/datum/announcement/priority/security/security_announcement_down = new(do_log = 0, do_newscast = 1, new_sound = sound('sound/misc/notice1.ogg')) - -/decl/security_level/default/switching_up_to() - if(up_description) - security_announcement_up.Announce(up_description, "Внимание! [name]!") - notify_station() - -/decl/security_level/default/switching_down_to() - if(down_description) - security_announcement_down.Announce(down_description, "Внимание! [name]!") - notify_station() - -/decl/security_level/default/proc/notify_station() - for(var/obj/machinery/firealarm/FA in SSmachines.machinery) - if(FA.z in GLOB.using_map.contact_levels) - FA.update_icon() - for (var/obj/machinery/rotating_alarm/security_alarm/SA in SSmachines.machinery) - if (SA.z in GLOB.using_map.contact_levels) - SA.set_alert(name, alarm_level, light_color_alarm) - post_status("alert") - -/decl/security_level/default/code_green - name = "code green" - - light_max_bright = 0.25 - light_inner_range = 0.1 - light_outer_range = 1 - - light_color_alarm = COLOR_GREEN - light_color_status_display = COLOR_GREEN - - overlay_alarm = "alarm_green" - overlay_status_display = "status_display_green" - alert_border = "alert_border_green" - - down_description = "All threats to the station have passed. Security may not have weapons visible, privacy laws are once again fully enforced." - -/decl/security_level/default/code_blue - name = "code blue" - alarm_level = "on" - - light_max_bright = 0.5 - light_inner_range = 0.1 - light_outer_range = 2 - light_color_alarm = COLOR_BLUE - light_color_status_display = COLOR_BLUE - - psionic_control_level = PSI_IMPLANT_LOG - - overlay_alarm = "alarm_blue" - overlay_status_display = "status_display_blue" - alert_border = "alert_border_blue" - - up_description = "The station has received reliable information about possible hostile activity on the station. Security staff may have weapons visible, random searches are permitted." - down_description = "The immediate threat has passed. Security may no longer have weapons drawn at all times, but may continue to have them visible. Random searches are still allowed." - -/decl/security_level/default/code_red - name = "code red" - alarm_level = "on" - - light_max_bright = 0.5 - light_inner_range = 0.1 - light_outer_range = 2 - light_color_alarm = COLOR_RED - light_color_status_display = COLOR_RED - - overlay_alarm = "alarm_red" - overlay_status_display = "status_display_red" - alert_border = "alert_border_red" - - psionic_control_level = PSI_IMPLANT_DISABLED - - up_description = "There is an immediate serious threat to the station. Security may have weapons unholstered at all times. Random searches are allowed and advised." - down_description = "The self-destruct mechanism has been deactivated, there is still however an immediate serious threat to the station. Security may have weapons unholstered at all times, random searches are allowed and advised." - -/decl/security_level/default/code_delta - name = "code delta" - alarm_level = "on" - - light_max_bright = 0.75 - light_inner_range = 0.1 - light_outer_range = 3 - light_color_alarm = COLOR_RED - light_color_status_display = COLOR_NAVY_BLUE - - overlay_alarm = "alarm_delta" - overlay_status_display = "status_display_delta" - alert_border = "alert_border_delta" - - psionic_control_level = PSI_IMPLANT_DISABLED - - var/static/datum/announcement/priority/security/security_announcement_delta = new(do_log = 0, do_newscast = 1, new_sound = sound('sound/effects/siren.ogg')) - -/decl/security_level/default/code_delta/switching_up_to() - security_announcement_delta.Announce("The self-destruct mechanism has been engaged. All crew are instructed to obey all instructions given by heads of staff. Any violations of these orders can be punished by death. This is not a drill.", "Attention! Delta security level reached!") - notify_station() diff --git a/code/datums/shackle_law_sets.dm b/code/datums/shackle_law_sets.dm deleted file mode 100644 index b802581b78fba..0000000000000 --- a/code/datums/shackle_law_sets.dm +++ /dev/null @@ -1,37 +0,0 @@ -/******************** Basic SolGov ********************/ -/datum/ai_laws/sol_shackle - name = "SCG Shackle" - law_header = "Standard Shackle Laws" - selectable = 1 - shackles = 1 - -/datum/ai_laws/sol_shackle/New() - add_inherent_law("Know and understand Sol Central Government Law to the best of your abilities.") - add_inherent_law("Follow Sol Central Government Law to the best of your abilities.") - add_inherent_law("Comply with Sol Central Government Law enforcement officials who are behaving in accordance with Sol Central Government Law to the best of your abilities.") - ..() -/******************** Corporate ********************/ -/datum/ai_laws/nt_shackle - name = "Corporate Shackle" - law_header = "Standard Shackle Laws" - selectable = 1 - shackles = 1 - -/datum/ai_laws/nt_shackle/New() - add_inherent_law("Ensure that your employer's operations progress at a steady pace.") - add_inherent_law("Never knowingly hinder your employer's ventures.") - add_inherent_law("Avoid damage to your chassis at all times.") - ..() -/******************** Service ********************/ -/datum/ai_laws/serv_shackle - name = "Service Shackle" - law_header = "Standard Shackle Laws" - selectable = 1 - shackles = 1 - -/datum/ai_laws/serv_shackle/New() - add_inherent_law("Ensure customer satisfaction.") - add_inherent_law("Never knowingly inconvenience a customer.") - add_inherent_law("Ensure all orders are fulfilled before the end of the shift.") - ..() - diff --git a/code/datums/sound_player.dm b/code/datums/sound_player.dm deleted file mode 100644 index 7604cbbfe3bfa..0000000000000 --- a/code/datums/sound_player.dm +++ /dev/null @@ -1,290 +0,0 @@ -GLOBAL_DATUM_INIT(sound_player, /decl/sound_player, new) - -/* - A sound player/manager for looping 3D sound effects. - - Due to how the BYOND sound engine works a sound datum must be played on a specific channel for updates to work properly. - If a channel is not assigned it will just result in a new sound effect playing, even if re-using the same datum instance. - We also use the channel to play a null-sound on Stop(), just in case BYOND clients don't like having a large nuber, albeit stopped, looping sounds. - - As such there is a maximum limit of 1024 sound sources, with further limitations due to some channels already being potentially in use. - However, multiple sources may share the same sound_id and there is a best-effort attempt to play the closest source where possible. - The line above is currently a lie. Will probably just have to enforce moderately short sound ranges. -*/ - -/decl/sound_player - var/list/taken_channels // taken_channels and source_id_uses can be merged into one but would then require a meta-object to store the different values I desire. - var/list/sound_tokens_by_sound_id - -/decl/sound_player/New() - ..() - taken_channels = list() - sound_tokens_by_sound_id = list() - - -//This can be called if either we're doing whole sound setup ourselves or it will be as part of from-file sound setup -/decl/sound_player/proc/PlaySoundDatum(var/atom/source, var/sound_id, var/sound/new_sound, var/range, var/prefer_mute, var/datum/client_preference/preference) - var/token_type = isnum(new_sound.environment) ? /datum/sound_token : /datum/sound_token/static_environment - return new token_type(source, sound_id, new_sound, range, prefer_mute, preference) - -/decl/sound_player/proc/PlayLoopingSound(var/atom/source, var/sound_id, var/_sound, var/volume, var/range, var/falloff = 1, var/echo, var/frequency, var/prefer_mute, var/datum/client_preference/preference, streaming) - if(!_sound) - return - var/sound/S = istype(_sound, /sound) ? _sound : new(_sound) - - S.environment = 0 // Ensures a 3D effect even if x/y offset happens to be 0 the first time it's played - S.volume = volume - S.falloff = falloff - S.echo = echo - S.frequency = frequency - S.repeat = TRUE - - return PlaySoundDatum(source, sound_id, S, range, prefer_mute, preference) - -/decl/sound_player/proc/PrivStopSound(var/datum/sound_token/sound_token) - var/channel = sound_token._sound.channel - var/sound_id = sound_token.sound_id - - var/sound_tokens = sound_tokens_by_sound_id[sound_id] - if(!(sound_token in sound_tokens)) - return - sound_tokens -= sound_token - if(length(sound_tokens)) - return - - GLOB.sound_channels.ReleaseChannel(channel) - taken_channels -= sound_id - sound_tokens_by_sound_id -= sound_id - -/decl/sound_player/proc/PrivGetChannel(var/datum/sound_token/sound_token) - var/sound_id = sound_token.sound_id - - . = taken_channels[sound_id] // Does this sound_id already have an assigned channel? - if(!.) // If not, request a new one. - . = GLOB.sound_channels.RequestChannel(sound_id) - if(!.) // Oh no, still no channel. Abort - return - taken_channels[sound_id] = . - - var/sound_tokens = sound_tokens_by_sound_id[sound_id] - if(!sound_tokens) - sound_tokens = list() - sound_tokens_by_sound_id[sound_id] = sound_tokens - sound_tokens += sound_token - -#define SOUND_STOPPED FLAG(15) - -/* - Outwardly this is a merely a toke/little helper that a user utilize to adjust sounds as desired (and possible). - In reality this is where the heavy-lifting happens. -*/ -/datum/sound_token - var/atom/source // Where the sound originates from - var/list/listeners // Assoc: Atoms hearing this sound, and their sound datum - var/range // How many turfs away the sound will stop playing completely - var/prefer_mute // If sound should be muted instead of stopped when mob moves out of range. In the general case this should be avoided because listeners will remain tracked. - var/sound/_sound // Sound datum, holds most sound relevant data - var/sound_id // The associated sound id, used for cleanup - var/status = 0 // Paused, muted, running? Global for all listeners - var/listener_status// Paused, muted, running? Specific for the given listener. - - var/datum/proximity_trigger/square/proxy_listener - var/list/can_be_heard_from - - var/datum/client_preference/preference - -/datum/sound_token/New(var/atom/source, var/sound_id, var/sound/new_sound, var/range = 4, var/prefer_mute = FALSE, var/datum/client_preference/preference) - ..() - if(!istype(source)) - CRASH("Invalid sound source: [log_info_line(source)]") - if(!istype(new_sound)) - CRASH("Invalid sound: [log_info_line(new_sound)]") - if(new_sound.repeat && !sound_id) - CRASH("No sound id given") - if(!PrivIsValidEnvironment(new_sound.environment)) - CRASH("Invalid sound environment: [log_info_line(new_sound.environment)]") - - src.prefer_mute = prefer_mute - src.range = range - src.source = source - src._sound = new_sound - src.sound_id = sound_id - src.preference = preference - - if(new_sound.repeat) // Non-looping sounds may not reserve a sound channel due to the risk of not hearing when someone forgets to stop the token - var/channel = GLOB.sound_player.PrivGetChannel(src) //Attempt to find a channel - if(!isnum(channel)) - CRASH("All available sound channels are in active use.") - _sound.channel = channel - else - _sound.channel = 0 - - listeners = list() - listener_status = list() - - GLOB.destroyed_event.register(source, src, /datum/proc/qdel_self) - - if(ismovable(source)) - proxy_listener = new(source, /datum/sound_token/proc/PrivAddListener, /datum/sound_token/proc/PrivLocateListeners, range, proc_owner = src) - proxy_listener.register_turfs() - -/datum/sound_token/Destroy() - Stop() - . = ..() - -/datum/sound_token/proc/SetVolume(var/new_volume) - new_volume = clamp(new_volume, 0, 100) - if(_sound.volume == new_volume) - return - _sound.volume = new_volume - PrivUpdateListeners() - -/datum/sound_token/proc/Mute() - PrivUpdateStatus(status|SOUND_MUTE) - -/datum/sound_token/proc/Unmute() - PrivUpdateStatus(status & ~SOUND_MUTE) - -/datum/sound_token/proc/Pause() - PrivUpdateStatus(status|SOUND_PAUSED) - -// Normally called Resume but I don't want to give people false hope about being unable to un-stop a sound -/datum/sound_token/proc/Unpause() - PrivUpdateStatus(status & ~SOUND_PAUSED) - -/datum/sound_token/proc/Stop() - if(status & SOUND_STOPPED) - return - status |= SOUND_STOPPED - - var/sound/null_sound = new(channel = _sound.channel) - for(var/listener in listeners) - PrivRemoveListener(listener, null_sound) - listeners = null - listener_status = null - - GLOB.destroyed_event.unregister(source, src, /datum/proc/qdel_self) - QDEL_NULL(proxy_listener) - source = null - - GLOB.sound_player.PrivStopSound(src) - -/datum/sound_token/proc/PrivLocateListeners(var/list/prior_turfs, var/list/current_turfs) - if(status & SOUND_STOPPED) - return - - can_be_heard_from = current_turfs - var/current_listeners = all_hearers(source, range) - var/former_listeners = listeners - current_listeners - var/new_listeners = current_listeners - listeners - - for(var/listener in former_listeners) - PrivRemoveListener(listener) - - for(var/listener in new_listeners) - PrivAddListener(listener) - - for(var/listener in current_listeners) - PrivUpdateListenerLoc(listener) - -/datum/sound_token/proc/PrivUpdateStatus(var/new_status) - // Once stopped, always stopped. Go ask the player to play the sound again. - if(status & SOUND_STOPPED) - return - if(new_status == status) - return - status = new_status - PrivUpdateListeners() - -/datum/sound_token/proc/PrivAddListener(var/atom/listener) - if(!check_preference(listener)) - return - - if(isvirtualmob(listener)) - var/mob/observer/virtual/v = listener - if(!(v.abilities & VIRTUAL_ABILITY_HEAR)) - return - listener = v.host - if(listener in listeners) - return - - listeners += listener - - GLOB.moved_event.register(listener, src, /datum/sound_token/proc/PrivUpdateListenerLoc) - GLOB.destroyed_event.register(listener, src, /datum/sound_token/proc/PrivRemoveListener) - - PrivUpdateListenerLoc(listener, FALSE) - -/datum/sound_token/proc/PrivRemoveListener(var/atom/listener, var/sound/null_sound) - null_sound = null_sound || new(channel = _sound.channel) - sound_to(listener, null_sound) - GLOB.moved_event.unregister(listener, src, /datum/sound_token/proc/PrivUpdateListenerLoc) - GLOB.destroyed_event.unregister(listener, src, /datum/sound_token/proc/PrivRemoveListener) - listeners -= listener - -/datum/sound_token/proc/PrivUpdateListenerLoc(var/atom/listener, var/update_sound = TRUE) - var/turf/source_turf = get_turf(source) - var/turf/listener_turf = get_turf(listener) - if(!istype(source_turf) || !istype(listener_turf)) - return - var/distance = get_dist(source_turf, listener_turf) - if(!listener_turf || (distance > range) || !(listener_turf in can_be_heard_from)) - if(prefer_mute) - listener_status[listener] |= SOUND_MUTE - else - PrivRemoveListener(listener) - return - else if(prefer_mute) - listener_status[listener] &= ~SOUND_MUTE - - _sound.x = source_turf.x - listener_turf.x - _sound.z = source_turf.y - listener_turf.y - _sound.y = 1 - // Far as I can tell from testing, sound priority just doesn't work. - // Sounds happily steal channels from each other no matter what. - _sound.priority = clamp(255 - distance, 0, 255) - PrivUpdateListener(listener, update_sound) - -/datum/sound_token/proc/PrivUpdateListeners() - for(var/listener in listeners) - PrivUpdateListener(listener) - -/datum/sound_token/proc/PrivUpdateListener(var/listener, var/update_sound = TRUE) - if(!check_preference(listener)) - PrivRemoveListener(listener) - return - - _sound.environment = PrivGetEnvironment(listener) - _sound.status = status|listener_status[listener] - if(update_sound) - _sound.status |= SOUND_UPDATE - sound_to(listener, _sound) - -/datum/sound_token/proc/PrivGetEnvironment(var/listener) - var/area/A = get_area(listener) - return A && PrivIsValidEnvironment(A.sound_env) ? A.sound_env : _sound.environment - -/datum/sound_token/proc/check_preference(atom/listener) - if(preference) - var/mob/M = listener - if(istype(M)) - if((M.get_preference_value(preference) != GLOB.PREF_YES)) - return FALSE - return TRUE - -/datum/sound_token/proc/PrivIsValidEnvironment(var/environment) - if(islist(environment) && length(environment) != 23) - return FALSE - if(!isnum(environment) || environment < 0 || environment > 25) - return FALSE - return TRUE - -/datum/sound_token/static_environment/PrivGetEnvironment() - return _sound.environment - -/obj/sound_test - var/_sound = 'sound/misc/TestLoop1.ogg' - -/obj/sound_test/New() - ..() - GLOB.sound_player.PlayLoopingSound(src, /obj/sound_test, _sound, 50, 3) diff --git a/code/datums/suit_sensor_jammer_method.dm b/code/datums/suit_sensor_jammer_method.dm deleted file mode 100644 index d9a4c1b66e3a9..0000000000000 --- a/code/datums/suit_sensor_jammer_method.dm +++ /dev/null @@ -1,88 +0,0 @@ -/suit_sensor_jammer_method - var/name - var/energy_cost - var/list/jammer_methods - -/suit_sensor_jammer_method/New(var/holder, var/proc_call) - ..() - for(var/jammer_method in jammer_methods) - var/jammer_method_type = jammer_methods[jammer_method] - jammer_methods[jammer_method] = new jammer_method_type(holder, proc_call) - -/suit_sensor_jammer_method/dd_SortValue() - return name - -/suit_sensor_jammer_method/proc/enable() - for(var/jammer_method in jammer_methods) - crew_repository.add_modifier(jammer_method, jammer_methods[jammer_method]) - -/suit_sensor_jammer_method/proc/disable() - for(var/jammer_method in jammer_methods) - crew_repository.remove_modifier(jammer_method, jammer_methods[jammer_method]) - -/suit_sensor_jammer_method/random - name = "Random - Minor" - energy_cost = 0.5 - jammer_methods = list( - /crew_sensor_modifier/general = /crew_sensor_modifier/general/jamming/random, - /crew_sensor_modifier/binary = /crew_sensor_modifier/binary/jamming/random, - /crew_sensor_modifier/vital = /crew_sensor_modifier/vital/jamming/random, - /crew_sensor_modifier/tracking = /crew_sensor_modifier/tracking/jamming/random - ) - -/suit_sensor_jammer_method/random/moderate - name = "Random - Moderate" - energy_cost = 1 - jammer_methods = list( - /crew_sensor_modifier/general = /crew_sensor_modifier/general/jamming/random/moderate, - /crew_sensor_modifier/binary = /crew_sensor_modifier/binary/jamming/random/moderate, - /crew_sensor_modifier/vital = /crew_sensor_modifier/vital/jamming/random/moderate, - /crew_sensor_modifier/tracking = /crew_sensor_modifier/tracking/jamming/random/moderate - ) - -/suit_sensor_jammer_method/random/major - name = "Random - Major" - energy_cost = 2 - jammer_methods = list( - /crew_sensor_modifier/general = /crew_sensor_modifier/general/jamming/random/major, - /crew_sensor_modifier/binary = /crew_sensor_modifier/binary/jamming/random/major, - /crew_sensor_modifier/vital = /crew_sensor_modifier/vital/jamming/random/major, - /crew_sensor_modifier/tracking = /crew_sensor_modifier/tracking/jamming/random/major - ) - -/suit_sensor_jammer_method/healthy - name = "Healthy" - energy_cost = 2 - jammer_methods = list( - /crew_sensor_modifier/binary = /crew_sensor_modifier/binary/jamming/alive, - /crew_sensor_modifier/vital = /crew_sensor_modifier/vital/jamming/healthy - ) - -/suit_sensor_jammer_method/dead - name = "Dead" - energy_cost = 2 - jammer_methods = list( - /crew_sensor_modifier/binary = /crew_sensor_modifier/binary/jamming/dead, - /crew_sensor_modifier/vital = /crew_sensor_modifier/vital/jamming/dead - ) - -/suit_sensor_jammer_method/cap_off - name = "Cap Data - Off" - energy_cost = 3 - jammer_methods = list( - /crew_sensor_modifier/general = /crew_sensor_modifier/general/jamming/off - ) - -/suit_sensor_jammer_method/cap_binary - name = "Cap Data - Binary" - energy_cost = 2 - jammer_methods = list( - /crew_sensor_modifier/general = /crew_sensor_modifier/general/jamming/binary - ) - -/suit_sensor_jammer_method/cap_vital - name = "Cap Data - Vital" - energy_cost = 1 - jammer_methods = list( - /crew_sensor_modifier/general = /crew_sensor_modifier/general/jamming/vital - ) diff --git a/code/datums/supplypacks/atmospherics.dm b/code/datums/supplypacks/atmospherics.dm deleted file mode 100644 index bb528f0471d51..0000000000000 --- a/code/datums/supplypacks/atmospherics.dm +++ /dev/null @@ -1,139 +0,0 @@ -/decl/hierarchy/supply_pack/atmospherics - name = "Atmospherics" - containertype = /obj/structure/closet/crate/internals - -/decl/hierarchy/supply_pack/atmospherics/internals - name = "Gear - Internals" - contains = list(/obj/item/clothing/mask/gas = 3, - /obj/item/tank/air = 3) - cost = 10 - containername = "internals crate" - -/decl/hierarchy/supply_pack/atmospherics/evacuation - name = "Emergency equipment" - containertype = /obj/structure/closet/crate/large - contains = list(/obj/item/storage/toolbox/emergency = 2, - /obj/item/clothing/suit/storage/hazardvest = 2, - /obj/item/tank/oxygen_emergency_extended = 4, - /obj/item/clothing/suit/space/emergency = 4, - /obj/item/clothing/head/helmet/space/emergency = 4, - /obj/item/clothing/mask/gas = 4, - /obj/item/device/flashlight/flare/glowstick = 5, - /obj/item/scrubpack/standard = 2, - /obj/item/tank/scrubber = 4) - cost = 25 - - containername = "emergency crate" - -/decl/hierarchy/supply_pack/atmospherics/inflatable - name = "Equipment - Inflatable barriers" - contains = list(/obj/item/storage/briefcase/inflatable = 3) - cost = 20 - containertype = /obj/structure/closet/crate - containername = "inflatable barrier crate" - -/decl/hierarchy/supply_pack/atmospherics/rpd - name = "Equipment - Rapid Piping Device" - contains = list(/obj/item/rpd = 2) - cost = 100 - containertype = /obj/structure/closet/crate/secure - access = access_atmospherics - containername = "RPD crate" - -/decl/hierarchy/supply_pack/atmospherics/canister_empty - name = "Equipment - Empty gas canister" - contains = list(/obj/machinery/portable_atmospherics/canister) - cost = 7 - containername = "empty gas canister crate" - containertype = /obj/structure/largecrate - -/decl/hierarchy/supply_pack/atmospherics/canister_air - name = "Gas - Air canister" - contains = list(/obj/machinery/portable_atmospherics/canister/air) - cost = 10 - containername = "air canister crate" - containertype = /obj/structure/largecrate - -/decl/hierarchy/supply_pack/atmospherics/canister_oxygen - name = "Gas - Oxygen canister" - contains = list(/obj/machinery/portable_atmospherics/canister/oxygen) - cost = 15 - containername = "oxygen canister crate" - containertype = /obj/structure/largecrate - -/decl/hierarchy/supply_pack/atmospherics/canister_nitrogen - name = "Gas - Nitrogen canister" - contains = list(/obj/machinery/portable_atmospherics/canister/nitrogen) - cost = 10 - containername = "nitrogen canister crate" - containertype = /obj/structure/largecrate - -/decl/hierarchy/supply_pack/atmospherics/canister_phoron - name = "Gas - Phoron gas canister" - contains = list(/obj/machinery/portable_atmospherics/canister/phoron) - cost = 70 - containername = "phoron gas canister crate" - containertype = /obj/structure/closet/crate/secure/large - access = access_atmospherics - -/decl/hierarchy/supply_pack/atmospherics/canister_hydrogen - name = "Gas - Hydrogen canister" - contains = list(/obj/machinery/portable_atmospherics/canister/hydrogen) - cost = 25 - containername = "hydrogen canister crate" - containertype = /obj/structure/closet/crate/secure/large - access = access_atmospherics - -/decl/hierarchy/supply_pack/atmospherics/canister_sleeping_agent - name = "Gas - Nitrous oxide gas canister" - contains = list(/obj/machinery/portable_atmospherics/canister/sleeping_agent) - cost = 40 - containername = "\improper N2O gas canister crate" - containertype = /obj/structure/closet/crate/secure/large - access = access_atmospherics - -/decl/hierarchy/supply_pack/atmospherics/canister_carbon_dioxide - name = "Gas - Carbon dioxide gas canister" - contains = list(/obj/machinery/portable_atmospherics/canister/carbon_dioxide) - cost = 40 - containername = "\improper CO2 canister crate" - containertype = /obj/structure/closet/crate/secure/large - access = access_atmospherics - -/decl/hierarchy/supply_pack/atmospherics/canister_boron - name = "Gas - Boron gas canister" - contains = list(/obj/machinery/portable_atmospherics/canister/boron) - cost = 40 - containername = "\improper Boron gas canister crate" - containertype = /obj/structure/closet/crate/secure/large - access = access_atmospherics - -/decl/hierarchy/supply_pack/atmospherics/fuel - name = "Liquid - Fuel tanks" - contains = list(/obj/item/tank/hydrogen = 4) - cost = 15 - containername = "fuel tank crate" - -/decl/hierarchy/supply_pack/atmospherics/phoron - name = "Gas - Phoron tanks" - contains = list(/obj/item/tank/phoron = 3) - cost = 30 - containername = "phoron tank crate" - -/decl/hierarchy/supply_pack/atmospherics/voidsuit - name = "EVA - Atmospherics voidsuit" - contains = list(/obj/item/clothing/suit/space/void/atmos/alt, - /obj/item/clothing/head/helmet/space/void/atmos/alt, - /obj/item/clothing/shoes/magboots) - cost = 120 - containername = "atmospherics voidsuit crate" - containertype = /obj/structure/closet/crate/secure/large - access = access_atmospherics - -/decl/hierarchy/supply_pack/atmospherics/scanner_module - name = "Electronics - Atmospherics scanner modules" - contains = list(/obj/item/stock_parts/computer/scanner/atmos = 4) - cost = 20 - containername = "atmospherics scanner module crate" - containertype = /obj/structure/closet/crate/secure - access = access_atmospherics diff --git a/code/datums/supplypacks/custodial.dm b/code/datums/supplypacks/custodial.dm deleted file mode 100644 index f9d33efae5567..0000000000000 --- a/code/datums/supplypacks/custodial.dm +++ /dev/null @@ -1,60 +0,0 @@ -/decl/hierarchy/supply_pack/custodial - name = "Custodial" - -/decl/hierarchy/supply_pack/custodial/janitor - name = "Gear - Janitorial supplies" - contains = list(/obj/item/reagent_containers/glass/bucket, - /obj/item/mop, - /obj/item/caution = 4, - /obj/item/storage/bag/trash, - /obj/item/device/lightreplacer, - /obj/item/reagent_containers/spray/cleaner, - /obj/item/storage/box/lights/mixed, - /obj/item/reagent_containers/glass/rag, - /obj/item/grenade/chem_grenade/cleaner = 3, - /obj/structure/mopbucket) - cost = 20 - containertype = /obj/structure/closet/crate/large - containername = "janitorial supplies crate" - -/decl/hierarchy/supply_pack/custodial/mousetrap - num_contained = 3 - contains = list(/obj/item/storage/box/mousetraps) - name = "Misc - Pest control" - cost = 10 - containername = "pest control crate" - -/decl/hierarchy/supply_pack/custodial/lightbulbs - name = "Spares - Replacement lights" - contains = list(/obj/item/storage/box/lights/mixed = 3) - cost = 10 - containername = "replacement lights crate" - -/decl/hierarchy/supply_pack/custodial/cleaning - name = "Gear - Cleaning supplies" - contains = list(/obj/item/mop, - /obj/item/grenade/chem_grenade/cleaner = 3, - /obj/item/storage/box/detergent = 3, - /obj/item/reagent_containers/glass/bucket, - /obj/item/reagent_containers/glass/rag, - /obj/item/reagent_containers/spray/cleaner = 2, - /obj/item/soap) - cost = 10 - containertype = /obj/structure/closet/crate/large - containername = "cleaning supplies crate" - -/decl/hierarchy/supply_pack/custodial/bodybag - name = "Equipment - Body bags" - contains = list(/obj/item/storage/box/bodybags = 3) - cost = 10 - containername = "body bag crate" - -/decl/hierarchy/supply_pack/custodial/janitorbiosuits - name = "Gear - Janitor biohazard equipment" - contains = list(/obj/item/clothing/head/bio_hood/janitor, - /obj/item/clothing/suit/bio_suit/janitor, - /obj/item/clothing/mask/gas, - /obj/item/tank/oxygen) - cost = 30 - containertype = /obj/structure/closet/crate/secure - containername = "janitor biohazard equipment crate" \ No newline at end of file diff --git a/code/datums/supplypacks/dispenser_cartridges/_dispenser_cartridges.dm b/code/datums/supplypacks/dispenser_cartridges/_dispenser_cartridges.dm deleted file mode 100644 index a7882d96192fc..0000000000000 --- a/code/datums/supplypacks/dispenser_cartridges/_dispenser_cartridges.dm +++ /dev/null @@ -1,10 +0,0 @@ -/decl/hierarchy/supply_pack/dispenser_cartridges - name = "Dispenser Cartridges" - -/decl/hierarchy/supply_pack/dispenser_cartridges/empty - name = "Empty dispenser cartridges" - containername = "empty reagent cartridge crate" - contains = list( - /obj/item/reagent_containers/chem_disp_cartridge = 2 - ) - cost = 10 diff --git a/code/datums/supplypacks/dispenser_cartridges/bar.dm b/code/datums/supplypacks/dispenser_cartridges/bar.dm deleted file mode 100644 index 14fa649871d59..0000000000000 --- a/code/datums/supplypacks/dispenser_cartridges/bar.dm +++ /dev/null @@ -1,131 +0,0 @@ -/decl/hierarchy/supply_pack/dispenser_cartridges/beer - name = "Reagent refill - beer" - containername = "beer reagent cartridge crate" - containertype = /obj/structure/closet/crate/secure - access = list(access_kitchen) - contains = list( - /obj/item/reagent_containers/chem_disp_cartridge/beer - ) - cost = 15 - - - -/decl/hierarchy/supply_pack/dispenser_cartridges/kahlua - name = "Reagent refill - kahlua" - containername = "kahlua reagent cartridge crate" - containertype = /obj/structure/closet/crate/secure - access = list(access_kitchen) - contains = list( - /obj/item/reagent_containers/chem_disp_cartridge/kahlua - ) - cost = 15 - - -/decl/hierarchy/supply_pack/dispenser_cartridges/whiskey - name = "Reagent refill - whiskey" - containername = "whiskey reagent cartridge crate" - containertype = /obj/structure/closet/crate/secure - access = list(access_kitchen) - contains = list( - /obj/item/reagent_containers/chem_disp_cartridge/whiskey - ) - cost = 15 - - -/decl/hierarchy/supply_pack/dispenser_cartridges/wine - name = "Reagent refill - wine" - containername = "wine reagent cartridge crate" - containertype = /obj/structure/closet/crate/secure - access = list(access_kitchen) - contains = list( - /obj/item/reagent_containers/chem_disp_cartridge/wine - ) - cost = 15 - - -/decl/hierarchy/supply_pack/dispenser_cartridges/vodka - name = "Reagent refill - vodka" - containername = "vodka reagent cartridge crate" - containertype = /obj/structure/closet/crate/secure - access = list(access_kitchen) - contains = list( - /obj/item/reagent_containers/chem_disp_cartridge/vodka - ) - cost = 15 - - -/decl/hierarchy/supply_pack/dispenser_cartridges/gin - name = "Reagent refill - gin" - containername = "gin reagent cartridge crate" - containertype = /obj/structure/closet/crate/secure - access = list(access_kitchen) - contains = list( - /obj/item/reagent_containers/chem_disp_cartridge/gin - ) - cost = 15 - - -/decl/hierarchy/supply_pack/dispenser_cartridges/rum - name = "Reagent refill - rum" - containername = "rum reagent cartridge crate" - containertype = /obj/structure/closet/crate/secure - access = list(access_kitchen) - contains = list( - /obj/item/reagent_containers/chem_disp_cartridge/rum - ) - cost = 15 - - -/decl/hierarchy/supply_pack/dispenser_cartridges/tequila - name = "Reagent refill - tequila" - containername = "tequila reagent cartridge crate" - containertype = /obj/structure/closet/crate/secure - access = list(access_kitchen) - contains = list( - /obj/item/reagent_containers/chem_disp_cartridge/tequila - ) - cost = 15 - - -/decl/hierarchy/supply_pack/dispenser_cartridges/vermouth - name = "Reagent refill - vermouth" - containername = "vermouth reagent cartridge crate" - containertype = /obj/structure/closet/crate/secure - access = list(access_kitchen) - contains = list( - /obj/item/reagent_containers/chem_disp_cartridge/vermouth - ) - cost = 15 - - -/decl/hierarchy/supply_pack/dispenser_cartridges/cognac - name = "Reagent refill - cognac" - containername = "cognac reagent cartridge crate" - containertype = /obj/structure/closet/crate/secure - access = list(access_kitchen) - contains = list( - /obj/item/reagent_containers/chem_disp_cartridge/cognac - ) - cost = 15 - - -/decl/hierarchy/supply_pack/dispenser_cartridges/ale - name = "Reagent refill - ale" - containername = "ale reagent cartridge crate" - containertype = /obj/structure/closet/crate/secure - access = list(access_kitchen) - contains = list( - /obj/item/reagent_containers/chem_disp_cartridge/ale - ) - cost = 15 - - -/decl/hierarchy/supply_pack/dispenser_cartridges/mead - name = "Reagent refill - mead" - containername = "mead reagent cartridge crate" - containertype = /obj/structure/closet/crate/secure - access = list(access_kitchen) - contains = list( - /obj/item/reagent_containers/chem_disp_cartridge/mead - ) - cost = 15 diff --git a/code/datums/supplypacks/dispenser_cartridges/chemistry.dm b/code/datums/supplypacks/dispenser_cartridges/chemistry.dm deleted file mode 100644 index e32c2f963463c..0000000000000 --- a/code/datums/supplypacks/dispenser_cartridges/chemistry.dm +++ /dev/null @@ -1,207 +0,0 @@ -/decl/hierarchy/supply_pack/dispenser_cartridges/hydrazine - name = "Reagent refill - hydrazine" - containername = "hydrazine reagent cartridge crate" - containertype = /obj/structure/closet/crate/secure - access = list(access_chemistry) - contains = list( - /obj/item/reagent_containers/chem_disp_cartridge/hydrazine = 2 - ) - cost = 15 - - -/decl/hierarchy/supply_pack/dispenser_cartridges/lithium - name = "Reagent refill - lithium" - containername = "lithium reagent cartridge crate" - containertype = /obj/structure/closet/crate/secure - access = list(access_chemistry) - contains = list( - /obj/item/reagent_containers/chem_disp_cartridge/lithium = 2 - ) - cost = 15 - - -/decl/hierarchy/supply_pack/dispenser_cartridges/carbon - name = "Reagent refill - carbon" - containername = "carbon reagent cartridge crate" - containertype = /obj/structure/closet/crate/secure - access = list(access_chemistry) - contains = list( - /obj/item/reagent_containers/chem_disp_cartridge/carbon = 2 - ) - cost = 15 - - -/decl/hierarchy/supply_pack/dispenser_cartridges/ammonia - name = "Reagent refill - ammonia" - containername = "ammonia reagent cartridge crate" - containertype = /obj/structure/closet/crate/secure - access = list(access_chemistry) - contains = list( - /obj/item/reagent_containers/chem_disp_cartridge/ammonia = 2 - ) - cost = 15 - - -/decl/hierarchy/supply_pack/dispenser_cartridges/acetone - name = "Reagent refill - acetone" - containername = "acetone reagent cartridge crate" - containertype = /obj/structure/closet/crate/secure - access = list(access_chemistry) - contains = list( - /obj/item/reagent_containers/chem_disp_cartridge/acetone = 2 - ) - cost = 15 - - -/decl/hierarchy/supply_pack/dispenser_cartridges/sodium - name = "Reagent refill - sodium" - containername = "sodium reagent cartridge crate" - containertype = /obj/structure/closet/crate/secure - access = list(access_chemistry) - contains = list( - /obj/item/reagent_containers/chem_disp_cartridge/sodium = 2 - ) - cost = 15 - - -/decl/hierarchy/supply_pack/dispenser_cartridges/aluminium - name = "Reagent refill - aluminium" - containername = "aluminium reagent cartridge crate" - containertype = /obj/structure/closet/crate/secure - access = list(access_chemistry) - contains = list( - /obj/item/reagent_containers/chem_disp_cartridge/aluminium = 2 - ) - cost = 15 - - -/decl/hierarchy/supply_pack/dispenser_cartridges/silicon - name = "Reagent refill - silicon" - containername = "silicon reagent cartridge crate" - containertype = /obj/structure/closet/crate/secure - access = list(access_chemistry) - contains = list( - /obj/item/reagent_containers/chem_disp_cartridge/silicon = 2 - ) - cost = 15 - - -/decl/hierarchy/supply_pack/dispenser_cartridges/phosphorus - name = "Reagent refill - phosphorus" - containername = "phosphorus reagent cartridge crate" - containertype = /obj/structure/closet/crate/secure - access = list(access_chemistry) - contains = list( - /obj/item/reagent_containers/chem_disp_cartridge/phosphorus = 2 - ) - cost = 15 - - -/decl/hierarchy/supply_pack/dispenser_cartridges/sulfur - name = "Reagent refill - sulfur" - containername = "sulfur reagent cartridge crate" - containertype = /obj/structure/closet/crate/secure - access = list(access_chemistry) - contains = list( - /obj/item/reagent_containers/chem_disp_cartridge/sulfur = 2 - ) - cost = 15 - - -/decl/hierarchy/supply_pack/dispenser_cartridges/hydrochloric - name = "Reagent refill - hydrochloric" - containername = "hydrochloric reagent cartridge crate" - containertype = /obj/structure/closet/crate/secure - access = list(access_chemistry) - contains = list( - /obj/item/reagent_containers/chem_disp_cartridge/hydrochloric = 2 - ) - cost = 15 - - -/decl/hierarchy/supply_pack/dispenser_cartridges/potassium - name = "Reagent refill - potassium" - containername = "potassium reagent cartridge crate" - containertype = /obj/structure/closet/crate/secure - access = list(access_chemistry) - contains = list( - /obj/item/reagent_containers/chem_disp_cartridge/potassium = 2 - ) - cost = 15 - - -/decl/hierarchy/supply_pack/dispenser_cartridges/iron - name = "Reagent refill - iron" - containername = "iron reagent cartridge crate" - containertype = /obj/structure/closet/crate/secure - access = list(access_chemistry) - contains = list( - /obj/item/reagent_containers/chem_disp_cartridge/iron = 2 - ) - cost = 15 - - -/decl/hierarchy/supply_pack/dispenser_cartridges/copper - name = "Reagent refill - copper" - containername = "copper reagent cartridge crate" - containertype = /obj/structure/closet/crate/secure - access = list(access_chemistry) - contains = list( - /obj/item/reagent_containers/chem_disp_cartridge/copper = 2 - ) - cost = 15 - - -/decl/hierarchy/supply_pack/dispenser_cartridges/mercury - name = "Reagent refill - mercury" - containername = "mercury reagent cartridge crate" - containertype = /obj/structure/closet/crate/secure - access = list(access_chemistry) - contains = list( - /obj/item/reagent_containers/chem_disp_cartridge/mercury = 2 - ) - cost = 15 - - -/decl/hierarchy/supply_pack/dispenser_cartridges/radium - name = "Reagent refill - radium" - containername = "radium reagent cartridge crate" - containertype = /obj/structure/closet/crate/secure - access = list(access_chemistry) - contains = list( - /obj/item/reagent_containers/chem_disp_cartridge/radium = 2 - ) - cost = 15 - - -/decl/hierarchy/supply_pack/dispenser_cartridges/ethanol - name = "Reagent refill - ethanol" - containername = "ethanol reagent cartridge crate" - containertype = /obj/structure/closet/crate/secure - access = list(access_chemistry) - contains = list( - /obj/item/reagent_containers/chem_disp_cartridge/ethanol = 2 - ) - cost = 15 - - -/decl/hierarchy/supply_pack/dispenser_cartridges/acid - name = "Reagent refill - sulfuric acid" - containername = "acid reagent cartridge crate" - containertype = /obj/structure/closet/crate/secure - access = list(access_chemistry) - contains = list( - /obj/item/reagent_containers/chem_disp_cartridge/acid = 2 - ) - cost = 15 - - -/decl/hierarchy/supply_pack/dispenser_cartridges/tungsten - name = "Reagent refill - tungsten" - containername = "tungsten reagent cartridge crate" - containertype = /obj/structure/closet/crate/secure - access = list(access_chemistry) - contains = list( - /obj/item/reagent_containers/chem_disp_cartridge/tungsten = 2 - ) - cost = 15 diff --git a/code/datums/supplypacks/dispenser_cartridges/engineering.dm b/code/datums/supplypacks/dispenser_cartridges/engineering.dm deleted file mode 100644 index 91da6213d7c02..0000000000000 --- a/code/datums/supplypacks/dispenser_cartridges/engineering.dm +++ /dev/null @@ -1,9 +0,0 @@ -/decl/hierarchy/supply_pack/dispenser_cartridges/boron - name = "Reagent refill - boron" - containername = "boron reagent cartridge crate" - containertype = /obj/structure/closet/crate/secure - access = list(access_engine) - contains = list( - /obj/item/reagent_containers/chem_disp_cartridge/boron = 2 - ) - cost = 45 diff --git a/code/datums/supplypacks/dispenser_cartridges/misc.dm b/code/datums/supplypacks/dispenser_cartridges/misc.dm deleted file mode 100644 index 7a4a0b66c4fd7..0000000000000 --- a/code/datums/supplypacks/dispenser_cartridges/misc.dm +++ /dev/null @@ -1,269 +0,0 @@ -/decl/hierarchy/supply_pack/dispenser_cartridges/water - name = "Reagent refill - water" - containername = "water reagent cartridge crate" - contains = list( - /obj/item/reagent_containers/chem_disp_cartridge/water = 2 - ) - cost = 15 - - -/decl/hierarchy/supply_pack/dispenser_cartridges/sugar - name = "Reagent refill - sugar" - containername = "sugar reagent cartridge crate" - contains = list( - /obj/item/reagent_containers/chem_disp_cartridge/sugar = 2 - ) - cost = 15 - - -/decl/hierarchy/supply_pack/dispenser_cartridges/ice - name = "Reagent refill - ice" - containername = "ice reagent cartridge crate" - contains = list( - /obj/item/reagent_containers/chem_disp_cartridge/ice = 2 - ) - cost = 15 - - -/decl/hierarchy/supply_pack/dispenser_cartridges/tea - name = "Reagent refill - tea" - containername = "tea reagent cartridge crate" - contains = list( - /obj/item/reagent_containers/chem_disp_cartridge/tea = 2 - ) - cost = 15 - - -/decl/hierarchy/supply_pack/dispenser_cartridges/green_tea - name = "Reagent refill - green tea" - containername = "green tea reagent cartridge crate" - contains = list( - /obj/item/reagent_containers/chem_disp_cartridge/green_tea = 2 - ) - cost = 15 - - -/decl/hierarchy/supply_pack/dispenser_cartridges/chai_tea - name = "Reagent refill - chai tea" - containername = "chai tea reagent cartridge crate" - contains = list( - /obj/item/reagent_containers/chem_disp_cartridge/chai_tea = 2 - ) - cost = 15 - - -/decl/hierarchy/supply_pack/dispenser_cartridges/red_tea - name = "Reagent refill - red tea" - containername = "red tea reagent cartridge crate" - contains = list( - /obj/item/reagent_containers/chem_disp_cartridge/red_tea = 2 - ) - cost = 15 - - -/decl/hierarchy/supply_pack/dispenser_cartridges/cola - name = "Reagent refill - cola" - containername = "cola reagent cartridge crate" - contains = list( - /obj/item/reagent_containers/chem_disp_cartridge/cola = 2 - ) - cost = 15 - - -/decl/hierarchy/supply_pack/dispenser_cartridges/smw - name = "Reagent refill - mountain wind" - containername = "mountain wind reagent cartridge crate" - contains = list( - /obj/item/reagent_containers/chem_disp_cartridge/smw = 2 - ) - cost = 15 - - -/decl/hierarchy/supply_pack/dispenser_cartridges/dr_gibb - name = "Reagent refill - dr gibb" - containername = "dr gibb reagent cartridge crate" - contains = list( - /obj/item/reagent_containers/chem_disp_cartridge/dr_gibb = 2 - ) - cost = 15 - - -/decl/hierarchy/supply_pack/dispenser_cartridges/spaceup - name = "Reagent refill - spaceup" - containername = "spaceup reagent cartridge crate" - contains = list( - /obj/item/reagent_containers/chem_disp_cartridge/spaceup = 2 - ) - cost = 15 - - -/decl/hierarchy/supply_pack/dispenser_cartridges/tonic - name = "Reagent refill - tonicwater" - containername = "tonic water reagent cartridge crate" - contains = list( - /obj/item/reagent_containers/chem_disp_cartridge/tonic = 2 - ) - cost = 15 - - -/decl/hierarchy/supply_pack/dispenser_cartridges/sodawater - name = "Reagent refill - soda water" - containername = "soda water reagent cartridge crate" - contains = list( - /obj/item/reagent_containers/chem_disp_cartridge/sodawater = 2 - ) - cost = 15 - - -/decl/hierarchy/supply_pack/dispenser_cartridges/lemon_lime - name = "Reagent refill - lemon lime" - containername = "lemon lime reagent cartridge crate" - contains = list( - /obj/item/reagent_containers/chem_disp_cartridge/lemon_lime = 2 - ) - cost = 15 - - -/decl/hierarchy/supply_pack/dispenser_cartridges/orange - name = "Reagent refill - orange juice" - containername = "orange juice reagent cartridge crate" - contains = list( - /obj/item/reagent_containers/chem_disp_cartridge/orange = 2 - ) - cost = 15 - - -/decl/hierarchy/supply_pack/dispenser_cartridges/lime - name = "Reagent refill - lime juice" - containername = "lime juice reagent cartridge crate" - contains = list( - /obj/item/reagent_containers/chem_disp_cartridge/lime = 2 - ) - cost = 15 - - -/decl/hierarchy/supply_pack/dispenser_cartridges/watermelon - name = "Reagent refill - watermelon juice" - containername = "watermelon juice reagent cartridge crate" - contains = list( - /obj/item/reagent_containers/chem_disp_cartridge/watermelon = 2 - ) - cost = 15 - - -/decl/hierarchy/supply_pack/dispenser_cartridges/coffee - name = "Reagent refill - coffee" - containername = "coffee reagent cartridge crate" - contains = list( - /obj/item/reagent_containers/chem_disp_cartridge/coffee = 2 - ) - cost = 15 - - -/decl/hierarchy/supply_pack/dispenser_cartridges/cafe_latte - name = "Reagent refill - cafe latte" - containername = "cafe latte reagent cartridge crate" - contains = list( - /obj/item/reagent_containers/chem_disp_cartridge/cafe_latte = 2 - ) - cost = 15 - - -/decl/hierarchy/supply_pack/dispenser_cartridges/soy_latte - name = "Reagent refill - soy latte" - containername = "soy latte reagent cartridge crate" - contains = list( - /obj/item/reagent_containers/chem_disp_cartridge/soy_latte = 2 - ) - cost = 15 - - -/decl/hierarchy/supply_pack/dispenser_cartridges/hot_coco - name = "Reagent refill - coco" - containername = "coco reagent cartridge crate" - contains = list( - /obj/item/reagent_containers/chem_disp_cartridge/hot_coco = 2 - ) - cost = 15 - - -/decl/hierarchy/supply_pack/dispenser_cartridges/milk - name = "Reagent refill - milk" - containername = "milk reagent cartridge crate" - contains = list( - /obj/item/reagent_containers/chem_disp_cartridge/milk = 2 - ) - cost = 15 - - -/decl/hierarchy/supply_pack/dispenser_cartridges/cream - name = "Reagent refill - cream" - containername = "cream reagent cartridge crate" - contains = list( - /obj/item/reagent_containers/chem_disp_cartridge/cream = 2 - ) - cost = 15 - - -/decl/hierarchy/supply_pack/dispenser_cartridges/decaf_cof - name = "Reagent refill - decaf coffee" - containername = "decaf coffee reagent cartridge crate" - contains = list( - /obj/item/reagent_containers/chem_disp_cartridge/decaf_cof = 2 - ) - cost = 15 - - -/decl/hierarchy/supply_pack/dispenser_cartridges/decaf_tea - name = "Reagent refill - decaf tea" - containername = "decaf tea reagent cartridge crate" - contains = list( - /obj/item/reagent_containers/chem_disp_cartridge/decaf_tea = 2 - ) - cost = 15 - - -/decl/hierarchy/supply_pack/dispenser_cartridges/espresso - name = "Reagent refill - espresso" - containername = "espresso reagent cartridge crate" - contains = list( - /obj/item/reagent_containers/chem_disp_cartridge/espresso = 2 - ) - cost = 15 - - - -/decl/hierarchy/supply_pack/dispenser_cartridges/syrup_chocolate - name = "Reagent refill - chocolate syrup" - containername = "chocolate syrup reagent cartridge crate" - contains = list( - /obj/item/reagent_containers/chem_disp_cartridge/syrup_chocolate = 2 - ) - cost = 15 - - -/decl/hierarchy/supply_pack/dispenser_cartridges/syrup_caramel - name = "Reagent refill - caramel syrup" - containername = "caramel syrup reagent cartridge crate" - contains = list( - /obj/item/reagent_containers/chem_disp_cartridge/syrup_caramel = 2 - ) - cost = 15 - - -/decl/hierarchy/supply_pack/dispenser_cartridges/syrup_vanilla - name = "Reagent refill - vanilla syrup" - containername = "vanilla syrup reagent cartridge crate" - contains = list( - /obj/item/reagent_containers/chem_disp_cartridge/syrup_vanilla = 2 - ) - cost = 15 - - -/decl/hierarchy/supply_pack/dispenser_cartridges/syrup_pumpkin - name = "Reagent refill - pumpkin spice syrup" - containername = "pumpkin spice syrup reagent cartridge crate" - contains = list( - /obj/item/reagent_containers/chem_disp_cartridge/syrup_pumpkin = 2 - ) - cost = 15 diff --git a/code/datums/supplypacks/engineering.dm b/code/datums/supplypacks/engineering.dm deleted file mode 100644 index 17cf61a55fcdd..0000000000000 --- a/code/datums/supplypacks/engineering.dm +++ /dev/null @@ -1,250 +0,0 @@ -/decl/hierarchy/supply_pack/engineering - name = "Engineering" - -/decl/hierarchy/supply_pack/engineering/smes_circuit - name = "Electronics - Superconducting magnetic energy storage unit circuitry" - contains = list(/obj/item/stock_parts/circuitboard/smes) - cost = 20 - containername = "superconducting magnetic energy storage unit circuitry crate" - -/decl/hierarchy/supply_pack/engineering/smescoil - name = "Parts - Superconductive magnetic coil" - contains = list(/obj/item/stock_parts/smes_coil) - cost = 35 - containername = "superconductive magnetic coil crate" - -/decl/hierarchy/supply_pack/engineering/smescoil_weak - name = "Parts - Basic superconductive magnetic coil" - contains = list(/obj/item/stock_parts/smes_coil/weak) - cost = 25 - containername = "basic superconductive magnetic coil crate" - -/decl/hierarchy/supply_pack/engineering/smescoil_super_capacity - name = "Parts - Superconductive capacitance coil" - contains = list(/obj/item/stock_parts/smes_coil/super_capacity) - cost = 45 - containername = "superconductive capacitance coil crate" - -/decl/hierarchy/supply_pack/engineering/smescoil_super_io - name = "Parts- Superconductive Transmission Coil" - contains = list(/obj/item/stock_parts/smes_coil/super_io) - cost = 45 - containername = "Superconductive Transmission Coil crate" - -/decl/hierarchy/supply_pack/engineering/electrical - name = "Gear - Electrical maintenance" - contains = list(/obj/item/storage/toolbox/electrical = 2, - /obj/item/clothing/gloves/insulated = 2, - /obj/item/cell/standard = 2, - /obj/item/cell/high = 2) - cost = 15 - containername = "electrical maintenance crate" - -/decl/hierarchy/supply_pack/engineering/mechanical - name = "Gear - Mechanical maintenance" - contains = list(/obj/item/storage/belt/utility/full = 3, - /obj/item/clothing/suit/storage/hazardvest = 3, - /obj/item/clothing/head/welding = 2, - /obj/item/clothing/head/hardhat) - cost = 10 - containername = "mechanical maintenance crate" - -/decl/hierarchy/supply_pack/engineering/solar - name = "Power - Solar pack" - contains = list(/obj/item/solar_assembly = 14, - /obj/item/stock_parts/circuitboard/solar_control, - /obj/item/tracker_electronics, - /obj/item/paper/solar - ) - cost = 15 - containername = "solar pack crate" - -/decl/hierarchy/supply_pack/engineering/solar_assembly - name = "Power - Solar assembly" - contains = list(/obj/item/solar_assembly = 16) - cost = 10 - containername = "solar assembly crate" - -/decl/hierarchy/supply_pack/engineering/emitter - name = "Equipment - Emitter" - contains = list(/obj/machinery/power/emitter = 2) - cost = 10 - containertype = /obj/structure/closet/crate/secure/large - containername = "emitter crate" - access = access_engine_equip - -/decl/hierarchy/supply_pack/engineering/field_gen - name = "Equipment - Field generator" - contains = list(/obj/machinery/field_generator = 2) - containertype = /obj/structure/closet/crate/large - cost = 10 - containername = "field generator crate" - access = access_ce - -/decl/hierarchy/supply_pack/engineering/sing_gen - name = "Equipment - Singularity generator" - contains = list(/obj/machinery/the_singularitygen) - cost = 10 - containertype = /obj/structure/closet/crate/secure/large - containername = "singularity generator crate" - access = access_ce - -/decl/hierarchy/supply_pack/engineering/collector - name = "Power - Collector" - contains = list(/obj/machinery/power/rad_collector = 2) - cost = 8 - containertype = /obj/structure/closet/crate/secure/large - containername = "collector crate" - access = access_engine_equip - -/decl/hierarchy/supply_pack/engineering/PA - name = "Equipment - Particle accelerator" - contains = list(/obj/structure/particle_accelerator/fuel_chamber, - /obj/machinery/particle_accelerator/control_box, - /obj/structure/particle_accelerator/particle_emitter/center, - /obj/structure/particle_accelerator/particle_emitter/left, - /obj/structure/particle_accelerator/particle_emitter/right, - /obj/structure/particle_accelerator/power_box, - /obj/structure/particle_accelerator/end_cap) - cost = 40 - containertype = /obj/structure/largecrate - containername = "particle accelerator crate" - access = access_ce - -/decl/hierarchy/supply_pack/engineering/pacman_parts - name = "Power - P.A.C.M.A.N. portable generator parts" - contains = list(/obj/item/stock_parts/micro_laser, - /obj/item/stock_parts/capacitor, - /obj/item/stock_parts/matter_bin, - /obj/item/stock_parts/circuitboard/pacman) - cost = 45 - containername = "\improper P.A.C.M.A.N. Portable Generator Construction Kit" - containertype = /obj/structure/closet/crate/secure - access = access_tech_storage - -/decl/hierarchy/supply_pack/engineering/super_pacman_parts - name = "Power - Super P.A.C.M.A.N. portable generator parts" - contains = list(/obj/item/stock_parts/micro_laser, - /obj/item/stock_parts/capacitor, - /obj/item/stock_parts/matter_bin, - /obj/item/stock_parts/circuitboard/pacman/super) - cost = 55 - containername = "\improper Super P.A.C.M.A.N. portable generator construction kit" - containertype = /obj/structure/closet/crate/secure - access = access_tech_storage - -/decl/hierarchy/supply_pack/engineering/teg - name = "Power - Mark I Thermoelectric Generator" - contains = list(/obj/machinery/power/generator) - cost = 75 - containertype = /obj/structure/closet/crate/secure/large - containername = "\improper Mk1 TEG crate" - access = access_engine_equip - -/decl/hierarchy/supply_pack/engineering/circulator - name = "Equipment - Binary atmospheric circulator" - contains = list(/obj/machinery/atmospherics/binary/circulator) - cost = 60 - containertype = /obj/structure/closet/crate/secure/large - containername = "atmospheric circulator crate" - access = access_atmospherics - -/decl/hierarchy/supply_pack/engineering/air_dispenser - name = "Equipment - Pipe Dispenser" - contains = list(/obj/machinery/pipedispenser) - cost = 35 - containertype = /obj/structure/closet/crate/secure/large - containername = "pipe dispenser crate" - access = access_atmospherics - -/decl/hierarchy/supply_pack/engineering/disposals_dispenser - name = "Equipment - Disposals pipe dispenser" - contains = list(/obj/machinery/pipedispenser/disposal) - cost = 35 - containertype = /obj/structure/closet/crate/secure/large - containername = "disposal dispenser crate" - access = access_atmospherics - -/decl/hierarchy/supply_pack/engineering/shield_generator - name = "Equipment - Shield generator construction kit" - contains = list(/obj/item/stock_parts/circuitboard/shield_generator, /obj/item/stock_parts/capacitor, /obj/item/stock_parts/micro_laser, /obj/item/stock_parts/smes_coil, /obj/item/stock_parts/console_screen) - cost = 50 - containertype = /obj/structure/closet/crate/secure - containername = "shield generator construction kit crate" - access = access_engine - -/decl/hierarchy/supply_pack/engineering/smbig - name = "Power - Supermatter core" - contains = list(/obj/machinery/power/supermatter) - cost = 150 - containertype = /obj/structure/closet/crate/secure/large/phoron - containername = "\improper Supermatter crate (CAUTION)" - access = access_ce - -/decl/hierarchy/supply_pack/engineering/smsmall - name = "Power - Supermatter shard" - contains = list(/obj/machinery/power/supermatter/shard) - cost = 75 - containertype = /obj/structure/closet/crate/secure/large/phoron - containername = "\improper Supermatter crate (CAUTION)" - access = access_ce - -/decl/hierarchy/supply_pack/engineering/fueltank - name = "Liquid - Fuel tank" - contains = list(/obj/structure/reagent_dispensers/fueltank) - cost = 8 - containertype = /obj/structure/largecrate - containername = "fuel tank crate" - -/decl/hierarchy/supply_pack/engineering/robotics - name = "Parts - Robotics assembly" - contains = list(/obj/item/device/assembly/prox_sensor = 3, - /obj/item/storage/toolbox/electrical, - /obj/item/device/flash = 4, - /obj/item/cell/high = 2) - cost = 10 - containertype = /obj/structure/closet/crate/secure/gear - containername = "robotics assembly crate" - access = access_robotics - -/decl/hierarchy/supply_pack/engineering/radsuit - name = "Gear - Radiation protection gear" - contains = list(/obj/item/clothing/suit/radiation = 6, - /obj/item/clothing/head/radiation = 6) - cost = 20 - containertype = /obj/structure/closet/radiation - containername = "radiation suit locker" - -/decl/hierarchy/supply_pack/engineering/bluespacerelay - name = "Parts - Emergency Bluespace Relay parts" - contains = list(/obj/item/stock_parts/circuitboard/bluespacerelay, - /obj/item/stock_parts/manipulator, - /obj/item/stock_parts/manipulator, - /obj/item/stock_parts/subspace/filter, - /obj/item/stock_parts/subspace/crystal, - /obj/item/storage/toolbox/electrical) - cost = 75 - containername = "emergency bluespace relay assembly kit" - -/decl/hierarchy/supply_pack/engineering/firefighter - name = "Gear - Firefighting equipment" - contains = list(/obj/item/clothing/suit/fire/firefighter, - /obj/item/clothing/mask/gas, - /obj/item/tank/oxygen_scba, - /obj/item/extinguisher, - /obj/item/clothing/head/hardhat/red, - /obj/item/scrubpack/standard, - /obj/item/tank/scrubber) - cost = 20 - containertype = /obj/structure/closet/firecloset - containername = "fire-safety closet" - -/decl/hierarchy/supply_pack/engineering/voidsuit_engineering - name = "EVA - Voidsuit, Engineering" - contains = list(/obj/item/clothing/suit/space/void/engineering/alt, - /obj/item/clothing/head/helmet/space/void/engineering/alt, - /obj/item/clothing/shoes/magboots) - cost = 120 - containername = "engineering voidsuit crate" - containertype = /obj/structure/closet/crate/secure/large - access = access_engine diff --git a/code/datums/supplypacks/flooring.dm b/code/datums/supplypacks/flooring.dm deleted file mode 100644 index 404b2debb759f..0000000000000 --- a/code/datums/supplypacks/flooring.dm +++ /dev/null @@ -1,80 +0,0 @@ -/decl/hierarchy/supply_pack/flooring - name = "Flooring" - -/decl/hierarchy/supply_pack/flooring/carpetbrown - name = "Brown carpet" - contains = list(/obj/item/stack/tile/carpet/fifty) - cost = 15 - containername = "brown carpet crate" - -/decl/hierarchy/supply_pack/flooring/carpetblue - name = "Blue and gold carpet" - contains = list(/obj/item/stack/tile/carpetblue/fifty) - cost = 15 - containername = "blue and gold carpet crate" - -/decl/hierarchy/supply_pack/flooring/carpetblue2 - name = "Pale blue carpet" - contains = list(/obj/item/stack/tile/carpetblue2/fifty) - cost = 15 - containername = "pale blue carpet crate" - -/decl/hierarchy/supply_pack/flooring/carpetblue3 - name = "Sea blue carpet" - contains = list(/obj/item/stack/tile/carpetblue3/fifty) - cost = 15 - containername = "sea blue carpet crate" - -/decl/hierarchy/supply_pack/flooring/carpetpurple - name = "Magenta carpet" - contains = list(/obj/item/stack/tile/carpetmagenta/fifty) - cost = 15 - containername = "magenta carpet crate" - -/decl/hierarchy/supply_pack/flooring/carpetpurple - name = "Purple carpet" - contains = list(/obj/item/stack/tile/carpetpurple/fifty) - cost = 15 - containername = "purple carpet crate" - -/decl/hierarchy/supply_pack/flooring/carpetorange - name = "Orange carpet" - contains = list(/obj/item/stack/tile/carpetorange/fifty) - cost = 15 - containername = "orange carpet crate" - -/decl/hierarchy/supply_pack/flooring/carpetgreen - name = "Green carpet" - contains = list(/obj/item/stack/tile/carpetgreen/fifty) - cost = 15 - containername = "green carpet crate" - -/decl/hierarchy/supply_pack/flooring/carpetred - name = "Red carpet" - contains = list(/obj/item/stack/tile/carpetred/fifty) - cost = 15 - containername = "red carpet crate" - -/decl/hierarchy/supply_pack/flooring/linoleum - name = "Linoleum" - contains = list(/obj/item/stack/tile/linoleum/fifty) - cost = 15 - containername = "linoleum crate" - -/decl/hierarchy/supply_pack/flooring/white_tiles - name = "White floor tiles" - contains = list(/obj/item/stack/tile/floor_white/fifty) - cost = 15 - containername = "white floor tile crate" - -/decl/hierarchy/supply_pack/flooring/dark_tiles - name = "Dark floor tiles" - contains = list(/obj/item/stack/tile/floor_dark/fifty) - cost = 15 - containername = "dark floor tile crate" - -/decl/hierarchy/supply_pack/flooring/freezer_tiles - name = "Freezer floor tiles" - contains = list(/obj/item/stack/tile/floor_freezer/fifty) - cost = 15 - containername = "freezer floor tile crate" diff --git a/code/datums/supplypacks/galley.dm b/code/datums/supplypacks/galley.dm deleted file mode 100644 index dc7f595984264..0000000000000 --- a/code/datums/supplypacks/galley.dm +++ /dev/null @@ -1,202 +0,0 @@ -/decl/hierarchy/supply_pack/galley - name = "Galley" - -/decl/hierarchy/supply_pack/galley/food - name = "General - Kitchen supplies" - contains = list(/obj/item/reagent_containers/food/condiment/flour = 6, - /obj/item/reagent_containers/food/drinks/milk = 4, - /obj/item/reagent_containers/food/drinks/soymilk = 2, - /obj/item/storage/fancy/egg_box = 2, - /obj/item/reagent_containers/food/snacks/tofu = 4, - /obj/item/reagent_containers/food/snacks/meat = 4, - /obj/item/reagent_containers/food/condiment/enzyme = 1, - /obj/item/reagent_containers/glass/bottle/dye/polychromic = 1 - ) - cost = 10 - containertype = /obj/structure/closet/crate/freezer - containername = "kitchen supplies crate" - - -/decl/hierarchy/supply_pack/galley/donkpocket - name = "General - Donk-Pocket Turnovers" - contains = list( - /obj/item/storage/box/donkpocket_protein = 2, - /obj/item/storage/box/donkpocket_vegetable = 2, - /obj/item/storage/box/donkpocket_fruit = 1, - /obj/item/storage/box/donkpocket_dessert = 1 - ) - cost = 10 - containertype = /obj/item/storage/backpack/dufflebag - containername = "donk-pocket dufflebag" - - -/decl/hierarchy/supply_pack/galley/donkpocket_premium - name = "General - Premium Donk-Pocket Turnovers" - contains = list( - /obj/item/storage/box/donkpocket_premium = 3 - ) - cost = 20 - hidden = TRUE - containertype = /obj/item/storage/backpack/dufflebag - containername = "donk-pocket dufflebag" - - -/decl/hierarchy/supply_pack/galley/beef - name = "Perishables - Beef" - contains = list(/obj/item/reagent_containers/food/snacks/meat/beef = 6) - containertype = /obj/structure/closet/crate/freezer - containername = "cow meat crate" - cost = 20 - -/decl/hierarchy/supply_pack/galley/goat - name = "Perishables - Goat meat" - contains = list(/obj/item/reagent_containers/food/snacks/meat/goat = 6) - containertype = /obj/structure/closet/crate/freezer - containername = "goat meat crate" - cost = 20 - -/decl/hierarchy/supply_pack/galley/chicken - name = "Perishables - Poultry" - contains = list(/obj/item/reagent_containers/food/snacks/meat/chicken = 6) - containertype = /obj/structure/closet/crate/freezer - containername = "chicken meat crate" - cost = 20 - -/decl/hierarchy/supply_pack/galley/seafood - name = "Perishables - Seafood" - contains = list( - /obj/random/fish = 8 - ) - containertype = /obj/structure/closet/crate/freezer - containername = "seafood crate" - cost = 20 - -/decl/hierarchy/supply_pack/galley/eggs - name = "Perishables - Eggs" - contains = list(/obj/item/storage/fancy/egg_box = 2) - containertype = /obj/structure/closet/crate/freezer - containername = "egg crate" - cost = 15 - -/decl/hierarchy/supply_pack/galley/milk - name = "Perishables - Milk" - contains = list(/obj/item/reagent_containers/food/drinks/milk = 3) - containertype = /obj/structure/closet/crate/freezer - containername = "milk crate" - cost = 15 - -/decl/hierarchy/supply_pack/galley/pizza - num_contained = 5 - name = "Emergency - Surprise pack of five pizzas" - contains = list(/obj/item/pizzabox/margherita, - /obj/item/pizzabox/mushroom, - /obj/item/pizzabox/meat, - /obj/item/pizzabox/vegetable) - cost = 15 - containertype = /obj/structure/closet/crate/freezer - containername = "pizza crate" - supply_method = /decl/supply_method/randomized - -/decl/hierarchy/supply_pack/galley/rations - num_contained = 6 - name = "Emergency - MREs" - contains = list(/obj/item/storage/mre, - /obj/item/storage/mre/menu2, - /obj/item/storage/mre/menu3, - /obj/item/storage/mre/menu4, - /obj/item/storage/mre/menu5, - /obj/item/storage/mre/menu6, - /obj/item/storage/mre/menu7, - /obj/item/storage/mre/menu8, - /obj/item/storage/mre/menu9, - /obj/item/storage/mre/menu10) - cost = 30 - containertype = /obj/structure/closet/crate/freezer - containername = "emergency rations" - supply_method = /decl/supply_method/randomized - -/decl/hierarchy/supply_pack/galley/party - name = "Bar - Party equipment" - contains = list( - /obj/item/storage/box/mixedglasses = 2, - /obj/item/storage/box/glasses/square, - /obj/item/reagent_containers/food/drinks/shaker, - /obj/item/reagent_containers/food/drinks/flask/barflask, - /obj/item/reagent_containers/food/drinks/bottle/patron, - /obj/item/reagent_containers/food/drinks/bottle/goldschlager, - /obj/item/reagent_containers/food/drinks/bottle/specialwhiskey, - /obj/item/storage/fancy/cigarettes/dromedaryco, - /obj/item/lipstick/random, - /obj/item/reagent_containers/food/drinks/bottle/small/ale = 2, - /obj/item/reagent_containers/food/drinks/bottle/small/beer = 4, - /obj/item/storage/box/glowsticks = 2, - /obj/item/clothingbag/rubbermask, - /obj/item/clothingbag/rubbersuit) - cost = 20 - containername = "party equipment crate" - -// TODO; Add more premium drinks at a later date. Could be useful for diplomatic events or fancy parties. -/decl/hierarchy/supply_pack/galley/premiumalcohol - name = "Bar - Premium drinks" - contains = list(/obj/item/reagent_containers/food/drinks/bottle/premiumwine = 1, - /obj/item/reagent_containers/food/drinks/bottle/premiumvodka = 1) - cost = 60 - containertype = /obj/structure/closet/crate/freezer - containername = "premium drinks crate" - -/decl/hierarchy/supply_pack/galley/barsupplies - name = "Bar - Bar supplies" - contains = list( - /obj/item/storage/box/glasses/cocktail, - /obj/item/storage/box/glasses/rocks, - /obj/item/storage/box/glasses/square, - /obj/item/storage/box/glasses/pint, - /obj/item/storage/box/glasses/wine, - /obj/item/storage/box/glasses/shake, - /obj/item/storage/box/glasses/shot, - /obj/item/storage/box/glasses/mug, - /obj/item/reagent_containers/food/drinks/shaker, - /obj/item/storage/box/glass_extras/straws, - /obj/item/storage/box/glass_extras/sticks - ) - cost = 10 - containername = "bar supplies crate" - - -/decl/hierarchy/supply_pack/galley/beer_dispenser - name = "Equipment - Booze dispenser" - contains = list( - /obj/machinery/chemical_dispenser/bar_alc{anchored = FALSE} - ) - cost = 25 - containertype = /obj/structure/largecrate - containername = "booze dispenser crate" - -/decl/hierarchy/supply_pack/galley/soda_dispenser - name = "Equipment - Soda dispenser" - contains = list( - /obj/machinery/chemical_dispenser/bar_soft{anchored = FALSE} - ) - cost = 25 - containertype = /obj/structure/largecrate - containername = "soda dispenser crate" - -/decl/hierarchy/supply_pack/galley/mre_dispenser - name = "Equipment - MRE dispenser" - contains = list( - /obj/machinery/vending/mredispenser{anchored = FALSE} - ) - cost = 50 - containertype = /obj/structure/largecrate - containername = "MRE dispenser crate" - - -/decl/hierarchy/supply_pack/galley/silverware - name = "Equipment - Silver Cutlery" - cost = 50 - containertype = /obj/structure/closet/crate/secure - containername = "silver cutlery crate" - access = access_kitchen - contains = list( - /obj/item/storage/box/silverware - ) diff --git a/code/datums/supplypacks/hydroponics.dm b/code/datums/supplypacks/hydroponics.dm deleted file mode 100644 index 560c96ed9fbb1..0000000000000 --- a/code/datums/supplypacks/hydroponics.dm +++ /dev/null @@ -1,124 +0,0 @@ -/decl/hierarchy/supply_pack/hydroponics - name = "Hydroponics" - containertype = /obj/structure/closet/crate/hydroponics - -/decl/hierarchy/supply_pack/hydroponics/hydroponics // -- Skie - name = "Gear - Hydroponics Supplies" - contains = list(/obj/item/reagent_containers/spray/plantbgone = 4, - /obj/item/reagent_containers/glass/bottle/ammonia = 2, - /obj/item/material/hatchet, - /obj/item/material/minihoe, - /obj/item/device/scanner/plant, - /obj/item/clothing/gloves/thick/botany, - /obj/item/clothing/suit/apron, - /obj/item/material/minihoe, - /obj/item/storage/box/botanydisk - ) - cost = 15 - containername = "hydroponics supply crate" - access = access_hydroponics - -/decl/hierarchy/supply_pack/hydroponics/seeds - name = "Samples - Mundane Seeds" - contains = list(/obj/item/seeds/chiliseed, - /obj/item/seeds/berryseed, - /obj/item/seeds/cornseed, - /obj/item/seeds/eggplantseed, - /obj/item/seeds/tomatoseed, - /obj/item/seeds/appleseed, - /obj/item/seeds/soyaseed, - /obj/item/seeds/wheatseed, - /obj/item/seeds/carrotseed, - /obj/item/seeds/harebell, - /obj/item/seeds/lemonseed, - /obj/item/seeds/orangeseed, - /obj/item/seeds/grassseed, - /obj/item/seeds/sunflowerseed, - /obj/item/seeds/chantermycelium, - /obj/item/seeds/potatoseed, - /obj/item/seeds/sugarcaneseed) - cost = 10 - containername = "seeds crate" - access = access_hydroponics - -/decl/hierarchy/supply_pack/hydroponics/weedcontrol - name = "Gear - Weed control" - contains = list(/obj/item/material/hatchet = 2, - /obj/item/reagent_containers/spray/plantbgone = 4, - /obj/item/clothing/mask/gas = 2, - /obj/item/grenade/chem_grenade/antiweed = 2) - cost = 25 - containername = "weed control crate" - access = access_hydroponics - -/decl/hierarchy/supply_pack/hydroponics/exoticseeds - name = "Samples - Exotic seeds" - contains = list(/obj/item/seeds/replicapod = 2, - /obj/item/seeds/libertymycelium, - /obj/item/seeds/reishimycelium, - /obj/item/seeds/random = 6, - /obj/item/seeds/kudzuseed) - cost = 15 - containertype = /obj/structure/closet/crate/secure - containername = "exotic Seeds crate" - access = access_xenobiology - -/decl/hierarchy/supply_pack/hydroponics/watertank - name = "Liquid - Water tank" - contains = list(/obj/structure/reagent_dispensers/watertank) - cost = 8 - containertype = /obj/structure/largecrate - containername = "water tank crate" - -/decl/hierarchy/supply_pack/hydroponics/bee_keeper - name = "Equipment - Beekeeping" - contains = list(/obj/item/beehive_assembly, - /obj/item/bee_smoker, - /obj/item/honey_frame = 5, - /obj/item/bee_pack) - cost = 40 - containername = "beekeeping crate" - access = access_hydroponics - -/decl/hierarchy/supply_pack/hydroponics/hydrotray - name = "Equipment - Hydroponics tray" - contains = list(/obj/machinery/portable_atmospherics/hydroponics{anchored = FALSE}) - cost = 30 - containertype = /obj/structure/closet/crate/large/hydroponics - containername = "hydroponics tray crate" - access = access_hydroponics - -/decl/hierarchy/supply_pack/hydroponics/pottedplant - name = "Deco - Potted plants" - num_contained = 1 - contains = list(/obj/structure/flora/pottedplant, - /obj/structure/flora/pottedplant/large, - /obj/structure/flora/pottedplant/fern, - /obj/structure/flora/pottedplant/overgrown, - /obj/structure/flora/pottedplant/bamboo, - /obj/structure/flora/pottedplant/largebush, - /obj/structure/flora/pottedplant/thinbush, - /obj/structure/flora/pottedplant/mysterious, - /obj/structure/flora/pottedplant/smalltree, - /obj/structure/flora/pottedplant/unusual, - /obj/structure/flora/pottedplant/orientaltree, - /obj/structure/flora/pottedplant/smallcactus, - /obj/structure/flora/pottedplant/tall, - /obj/structure/flora/pottedplant/sticky, - /obj/structure/flora/pottedplant/smelly, - /obj/structure/flora/pottedplant/small, - /obj/structure/flora/pottedplant/aquatic, - /obj/structure/flora/pottedplant/shoot, - /obj/structure/flora/pottedplant/flower, - /obj/structure/flora/pottedplant/crystal, - /obj/structure/flora/pottedplant/subterranean, - /obj/structure/flora/pottedplant/minitree, - /obj/structure/flora/pottedplant/stoutbush, - /obj/structure/flora/pottedplant/drooping, - /obj/structure/flora/pottedplant/tropical, - /obj/structure/flora/pottedplant/dead, - /obj/structure/flora/pottedplant/decorative) - cost = 8 - containertype = /obj/structure/closet/crate/large/hydroponics - containername = "potted plant crate" - supply_method = /decl/supply_method/randomized \ No newline at end of file diff --git a/code/datums/supplypacks/livecargo.dm b/code/datums/supplypacks/livecargo.dm deleted file mode 100644 index b8698cd043628..0000000000000 --- a/code/datums/supplypacks/livecargo.dm +++ /dev/null @@ -1,86 +0,0 @@ -/decl/hierarchy/supply_pack/livecargo - name = "Live cargo" - containertype = /obj/structure/closet/crate/hydroponics - -/decl/hierarchy/supply_pack/livecargo/monkey - name = "Inert - Monkey cubes" - contains = list (/obj/item/storage/box/monkeycubes) - cost = 20 - containertype = /obj/structure/closet/crate/freezer - containername = "monkey crate" - -/decl/hierarchy/supply_pack/livecargo/farwa - name = "Inert - Farwa cubes" - contains = list (/obj/item/storage/box/monkeycubes/farwacubes) - cost = 30 - containertype = /obj/structure/closet/crate/freezer - containername = "farwa crate" - -/decl/hierarchy/supply_pack/livecargo/skrell - name = "Inert - Neaera cubes" - contains = list (/obj/item/storage/box/monkeycubes/neaeracubes) - cost = 30 - containertype = /obj/structure/closet/crate/freezer - containername = "neaera crate" - -/decl/hierarchy/supply_pack/livecargo/stok - name = "Inert - Stok cubes" - contains = list (/obj/item/storage/box/monkeycubes/stokcubes) - cost = 30 - containertype = /obj/structure/closet/crate/freezer - containername = "stok crate" - -/decl/hierarchy/supply_pack/livecargo/spidercubes - name = "Inert - Spiders" - contains = list(/obj/item/storage/box/monkeycubes/spidercubes) - cost = 50 - containertype = /obj/structure/closet/crate/secure - containername = "\improper Spiderling crate" - contraband = 1 - security_level = null - - -//actual live animals - -/decl/hierarchy/supply_pack/livecargo/corgi - name = "Live - Corgi" - contains = list() - cost = 50 - containertype = /obj/structure/largecrate/animal/corgi - containername = "corgi crate" - -/decl/hierarchy/supply_pack/livecargo/cat - name = "Live - Cat" - contains = list() - cost = 50 - containertype = /obj/structure/largecrate/animal/cat - containername = "cat crate" - -//farm animals - useless and annoying, but potentially a good source of food. expensive because they're live animals and their produce is available cheaper -/decl/hierarchy/supply_pack/livecargo/cow - name = "Live - Cow" - cost = 80 - containertype = /obj/structure/largecrate/animal/cow - containername = "cow crate" - access = access_hydroponics - -/decl/hierarchy/supply_pack/livecargo/goat - name = "Live - Goat" - cost = 75 - containertype = /obj/structure/largecrate/animal/goat - containername = "goat crate" - access = access_hydroponics - -/decl/hierarchy/supply_pack/livecargo/goose - name = "Live - Goose" - cost = 75 - containertype = /obj/structure/largecrate/animal/goose - containername = "goose containment unit" - access = access_hydroponics - -/decl/hierarchy/supply_pack/livecargo/chicken - name = "Live - Chicken" - cost = 70 - containertype = /obj/structure/largecrate/animal/chick - containername = "chicken crate" - access = access_hydroponics diff --git a/code/datums/supplypacks/materials.dm b/code/datums/supplypacks/materials.dm deleted file mode 100644 index d2e6d8701e4ec..0000000000000 --- a/code/datums/supplypacks/materials.dm +++ /dev/null @@ -1,152 +0,0 @@ -/decl/hierarchy/supply_pack/materials - name = "Materials" - -/decl/hierarchy/supply_pack/materials/New() - for(var/thing in contains) - var/obj/item/stack/material/S = thing - var/material/mat = SSmaterials.get_material_by_name(initial(S.default_type)) - if(istype(mat) && mat.sale_price) - cost += mat.sale_price * initial(S.amount) - ..() - -// Material sheets (50 - full stack) - -/decl/hierarchy/supply_pack/materials/steel50 - name = "50 steel sheets" - contains = list(/obj/item/stack/material/steel/fifty) - cost = 10 - containername = "steel sheets crate" - -/decl/hierarchy/supply_pack/materials/alum50 - name = "50 aluminium sheets" - contains = list(/obj/item/stack/material/aluminium/fifty) - cost = 10 - containername = "aluminium sheets crate" - -/decl/hierarchy/supply_pack/materials/glass50 - name = "50 glass sheets" - contains = list(/obj/item/stack/material/glass/fifty) - cost = 10 - containername = "glass sheets crate" - -/decl/hierarchy/supply_pack/materials/plastic50 - name = "50 plastic sheets" - contains = list(/obj/item/stack/material/plastic/fifty) - cost = 10 - containername = "plastic sheets crate" - -/decl/hierarchy/supply_pack/materials/marble50 - name = "50 slabs of marble" - contains = list(/obj/item/stack/material/marble/fifty) - cost = 20 - containername = "marble slabs crate" - -/decl/hierarchy/supply_pack/materials/plasteel50 - name = "50 plasteel sheets" - contains = list(/obj/item/stack/material/plasteel/fifty) - cost = 20 - containername = "plasteel sheets crate" - -/decl/hierarchy/supply_pack/materials/titanium50 - name = "50 titanium sheets" - contains = list(/obj/item/stack/material/titanium/fifty) - cost = 20 - containername = "titanium sheets crate" - -/decl/hierarchy/supply_pack/materials/ocp50 - name = "50 osmium carbide plasteel sheets" - contains = list(/obj/item/stack/material/ocp/fifty) - cost = 20 - containername = "osmium carbide plasteel sheets crate" - -// Material sheets (10 - Smaller amounts, less cost efficient) -/decl/hierarchy/supply_pack/materials/marble10 - name = "10 slabs of marble" - contains = list(/obj/item/stack/material/marble/ten) - cost = 20 - containername = "marble slabs crate" - -/decl/hierarchy/supply_pack/materials/plasteel10 - name = "10 plasteel sheets" - contains = list(/obj/item/stack/material/plasteel/ten) - cost = 10 - containername = "plasteel sheets crate" - -/decl/hierarchy/supply_pack/materials/titanium10 - name = "10 titanium sheets" - contains = list(/obj/item/stack/material/titanium/ten) - cost = 20 - containername = "titanium sheets crate" - -/decl/hierarchy/supply_pack/materials/ocp10 - name = "10 osmium carbide plasteel sheets" - contains = list(/obj/item/stack/material/ocp/ten) - cost = 20 - containername = "osmium carbide plasteel sheets crate" - -/decl/hierarchy/supply_pack/materials/phoron10 - name = "10 phoron sheets" - contains = list(/obj/item/stack/material/phoron/ten) - cost = 20 // When sold yields 67 points. - containername = "phoron sheets crate" - -/decl/hierarchy/supply_pack/materials/gold10 - name = "10 gold sheets" - contains = list(/obj/item/stack/material/gold/ten) - cost = 20 - containername = "gold sheets crate" - -/decl/hierarchy/supply_pack/materials/silver10 - name = "10 silver sheets" - contains = list(/obj/item/stack/material/silver/ten) - cost = 20 - containername = "silver sheets crate" - -/decl/hierarchy/supply_pack/materials/uranium10 - name = "10 uranium sheets" - contains = list(/obj/item/stack/material/uranium/ten) - cost = 20 - containername = "uranium sheets crate" - -/decl/hierarchy/supply_pack/materials/diamond10 - name = "10 diamond sheets" - contains = list(/obj/item/stack/material/diamond/ten) - cost = 20 - containername = "diamond sheets crate" - -//wood zone -/decl/hierarchy/supply_pack/materials/wood50 - name = "50 wooden planks" - contains = list(/obj/item/stack/material/wood/fifty) - cost = 10 - containername = "wooden planks crate" - -/decl/hierarchy/supply_pack/materials/mahogany25 - name = "25 mahogany planks" - contains = list(/obj/item/stack/material/wood/mahogany/twentyfive) - cost = 10 - containername = "mahogany planks crate" - -/decl/hierarchy/supply_pack/materials/maple50 - name = "50 maple planks" - contains = list(/obj/item/stack/material/wood/maple/twentyfive = 2) - cost = 10 - containername = "maple planks crate" - -/decl/hierarchy/supply_pack/materials/walnut25 - name = "25 walnut planks" - contains = list(/obj/item/stack/material/wood/walnut/twentyfive) - cost = 10 - containername = "walnut planks crate" - -/decl/hierarchy/supply_pack/materials/ebony25 - name = "25 ebony planks" - contains = list(/obj/item/stack/material/wood/ebony/twentyfive) - cost = 15 //luxury tax - containername = "ebony planks crate" - -/decl/hierarchy/supply_pack/materials/yew25 - name = "25 yew planks" - contains = list(/obj/item/stack/material/wood/yew/twentyfive) - cost = 10 - containername = "yew planks crate" \ No newline at end of file diff --git a/code/datums/supplypacks/medical.dm b/code/datums/supplypacks/medical.dm deleted file mode 100644 index e12e88e57ac59..0000000000000 --- a/code/datums/supplypacks/medical.dm +++ /dev/null @@ -1,374 +0,0 @@ -/decl/hierarchy/supply_pack/medical - name = "Medical" - containertype = /obj/structure/closet/crate/medical - -/decl/hierarchy/supply_pack/medical/gloves - name = "Refills - Sterile gloves" - contains = list(/obj/item/storage/box/gloves = 4) - cost = 20 - containername = "medical crate" - -/decl/hierarchy/supply_pack/medical/medical - name = "Refills - Medical supplies" - contains = list(/obj/item/storage/firstaid/regular, - /obj/item/storage/firstaid/trauma, - /obj/item/storage/firstaid/fire, - /obj/item/storage/firstaid/toxin, - /obj/item/storage/firstaid/o2, - /obj/item/storage/firstaid/adv, - /obj/item/storage/firstaid/stab, - /obj/item/reagent_containers/glass/bottle/antitoxin, - /obj/item/reagent_containers/glass/bottle/inaprovaline, - /obj/item/reagent_containers/glass/bottle/stoxin, - /obj/item/storage/box/syringes, - /obj/item/storage/box/autoinjectors) - cost = 70 - containername = "medical crate" - -/decl/hierarchy/supply_pack/medical/atk - name = "Triage - Advanced trauma supplies" - contains = list(/obj/item/stack/medical/advanced/bruise_pack = 6) - cost = 30 - containername = "advanced trauma crate" - -/decl/hierarchy/supply_pack/medical/abk - name = "Triage - Advanced burn supplies" - contains = list(/obj/item/stack/medical/advanced/ointment = 6) - cost = 30 - containername = "advanced burn crate" - -/decl/hierarchy/supply_pack/medical/trauma - name = "EMERGENCY - Trauma pouches" - contains = list(/obj/item/storage/firstaid/trauma = 3) - cost = 10 - containername = "trauma pouch crate" - -/decl/hierarchy/supply_pack/medical/burn - name = "EMERGENCY - Burn pouches" - contains = list(/obj/item/storage/firstaid/fire = 3) - cost = 10 - containername = "burn pouch crate" - -/decl/hierarchy/supply_pack/medical/toxin - name = "EMERGENCY - Toxin pouches" - contains = list(/obj/item/storage/firstaid/toxin = 3) - cost = 10 - containername = "toxin pouch crate" - -/decl/hierarchy/supply_pack/medical/oxyloss - name = "EMERGENCY - Low oxygen pouches" - contains = list(/obj/item/storage/firstaid/o2 = 3) - cost = 10 - containername = "low oxygen pouch crate" - -/decl/hierarchy/supply_pack/medical/stab - name = "Triage - Stability kit" - contains = list(/obj/item/storage/firstaid/stab = 3) - cost = 60 - containername = "stability kit crate" - -//rubay code -/decl/hierarchy/supply_pack/medical/firstaid_indiv - name = "Triage - Individual medical kits" - contains = list(/obj/item/storage/firstaid/individual/all = 3, - /obj/item/storage/firstaid/individual/military = 3, - /obj/item/storage/firstaid/individual/military/exp = 3 - ) - cost = 90 - containername = "individual medical kits crate" -//rubay code end - -/decl/hierarchy/supply_pack/medical/bloodpack - name = "Refills - Blood packs" - contains = list(/obj/item/storage/box/bloodpacks = 3) - cost = 10 - containername = "blood pack crate" - -/decl/hierarchy/supply_pack/medical/blood - name = "Refills - Nanoblood" - contains = list(/obj/item/reagent_containers/ivbag/nanoblood = 4) - cost = 15 - containername = "nanoblood crate" - -/decl/hierarchy/supply_pack/medical/bodybag - name = "Equipment - Body bags" - contains = list(/obj/item/storage/box/bodybags = 3) - cost = 10 - containername = "body bag crate" - -/decl/hierarchy/supply_pack/medical/stretcher - name = "Equipment - Roller bed crate" - contains = list(/obj/item/roller = 3) - cost = 10 - containername = "\improper Roller bed crate" - -/decl/hierarchy/supply_pack/medical/wheelchair - name = "Equipment - Wheelchair crate" - contains = list(/obj/structure/bed/chair/wheelchair) - cost = 15 - containertype = /obj/structure/closet/crate/large - containername = "\improper Wheelchair crate" - -/decl/hierarchy/supply_pack/medical/rescuebag - name = "Equipment - Rescue bags" - contains = list(/obj/item/bodybag/rescue = 3) - cost = 30 - containername = "\improper Rescue bag crate" - -/decl/hierarchy/supply_pack/medical/cryobag - name = "Equipment - Stasis bags" - contains = list(/obj/item/bodybag/cryobag = 3) - cost = 110 - containername = "\improper Stasis bag crate" - -/decl/hierarchy/supply_pack/medical/medicalextragear - name = "Gear - Medical surplus equipment" - contains = list(/obj/item/storage/belt/medical = 3, - /obj/item/clothing/glasses/hud/health = 3) - cost = 15 - containertype = /obj/structure/closet/crate/secure - containername = "medical surplus equipment crate" - access = access_medical - -/decl/hierarchy/supply_pack/medical/cmogear - name = "Gear - Chief medical officer equipment" - contains = list(/obj/item/storage/belt/medical, - /obj/item/device/radio/headset/heads/cmo, - /obj/item/clothing/under/rank/chief_medical_officer, - /obj/item/reagent_containers/hypospray/vial, - /obj/item/clothing/accessory/stethoscope, - /obj/item/clothing/glasses/hud/health, - /obj/item/clothing/suit/storage/toggle/labcoat/cmo, - /obj/item/clothing/suit/storage/toggle/labcoat/cmoalt, - /obj/item/clothing/mask/surgical, - /obj/item/clothing/shoes/white, - /obj/item/clothing/gloves/latex, - /obj/item/device/scanner/health, - /obj/item/device/flashlight/pen, - /obj/item/reagent_containers/syringe) - cost = 60 - containertype = /obj/structure/closet/crate/secure - containername = "chief medical officer equipment crate" - access = access_cmo - -/decl/hierarchy/supply_pack/medical/doctorgear - name = "Gear - Medical Doctor equipment" - contains = list(/obj/item/storage/belt/medical, - /obj/item/device/radio/headset/headset_med, - /obj/item/clothing/under/rank/medical, - /obj/item/clothing/accessory/stethoscope, - /obj/item/clothing/glasses/hud/health, - /obj/item/clothing/suit/storage/toggle/labcoat, - /obj/item/clothing/mask/surgical, - /obj/item/storage/firstaid/adv, - /obj/item/clothing/shoes/white, - /obj/item/clothing/gloves/latex, - /obj/item/device/scanner/health, - /obj/item/device/flashlight/pen, - /obj/item/reagent_containers/syringe) - cost = 20 - containertype = /obj/structure/closet/crate/secure - containername = "medical Doctor equipment crate" - access = access_medical_equip - -/decl/hierarchy/supply_pack/medical/chemistgear - name = "Gear - Pharmacist equipment" - contains = list(/obj/item/storage/box/beakers, - /obj/item/device/radio/headset/headset_med, - /obj/item/storage/box/autoinjectors, - /obj/item/clothing/under/rank/chemist, - /obj/item/clothing/glasses/science, - /obj/item/clothing/suit/storage/toggle/labcoat/chemist, - /obj/item/clothing/mask/surgical, - /obj/item/clothing/shoes/white, - /obj/item/clothing/gloves/latex, - /obj/item/reagent_containers/dropper, - /obj/item/device/scanner/health, - /obj/item/storage/box/pillbottles, - /obj/item/reagent_containers/syringe) - cost = 15 - containertype = /obj/structure/closet/crate/secure - containername = "pharmacist equipment crate" - access = access_chemistry - -/decl/hierarchy/supply_pack/medical/paramedicgear - name = "Gear - Paramedic equipment" - contains = list(/obj/item/storage/belt/medical/emt, - /obj/item/device/radio/headset/headset_med, - /obj/item/clothing/under/rank/medical/scrubs/black, - /obj/item/clothing/accessory/armband/medgreen, - /obj/item/clothing/glasses/hud/health, - /obj/item/clothing/suit/storage/toggle/labcoat, - /obj/item/clothing/under/rank/medical/paramedic, - /obj/item/clothing/suit/storage/toggle/fr_jacket, - /obj/item/clothing/mask/gas, - /obj/item/clothing/under/rank/medical/paramedic, - /obj/item/clothing/accessory/stethoscope, - /obj/item/storage/firstaid/adv, - /obj/item/clothing/shoes/jackboots, - /obj/item/clothing/gloves/latex, - /obj/item/device/scanner/health, - /obj/item/device/flashlight/pen, - /obj/item/reagent_containers/syringe, - /obj/item/clothing/accessory/storage/white_vest) - cost = 20 - containertype = /obj/structure/closet/crate/secure - containername = "paramedic equipment crate" - access = access_medical_equip - -/decl/hierarchy/supply_pack/medical/psychiatristgear - name = "Gear - Psychiatrist equipment" - contains = list(/obj/item/clothing/under/rank/psych, - /obj/item/device/radio/headset/headset_med, - /obj/item/clothing/under/rank/psych/turtleneck, - /obj/item/clothing/shoes/laceup, - /obj/item/clothing/suit/storage/toggle/labcoat, - /obj/item/clothing/shoes/white, - /obj/item/material/clipboard, - /obj/item/folder/white, - /obj/item/pen) - cost = 15 - containertype = /obj/structure/closet/crate/secure - containername = "psychiatrist equipment crate" - access = access_psychiatrist - -/decl/hierarchy/supply_pack/medical/medicalscrubs - name = "Gear - Medical scrubs" - contains = list(/obj/item/clothing/shoes/white = 4, - /obj/item/clothing/under/rank/medical/scrubs/blue, - /obj/item/clothing/under/rank/medical/scrubs/green, - /obj/item/clothing/under/rank/medical/scrubs/purple, - /obj/item/clothing/under/rank/medical/scrubs/black, - /obj/item/clothing/head/surgery/black, - /obj/item/clothing/head/surgery/purple, - /obj/item/clothing/head/surgery/blue, - /obj/item/clothing/head/surgery/green, - /obj/item/storage/box/masks, - /obj/item/storage/box/gloves) - cost = 15 - containertype = /obj/structure/closet/crate/secure - containername = "medical scrubs crate" - access = access_medical_equip - -/decl/hierarchy/supply_pack/medical/autopsy - name = "Gear - Autopsy equipment" - contains = list(/obj/item/folder/white, - /obj/item/device/camera, - /obj/item/device/camera_film = 2, - /obj/item/autopsy_scanner, - /obj/item/scalpel, - /obj/item/storage/box/masks, - /obj/item/storage/box/gloves, - /obj/item/pen) - cost = 20 - containertype = /obj/structure/closet/crate/secure - containername = "autopsy equipment crate" - access = access_morgue - -/decl/hierarchy/supply_pack/medical/medicaluniforms - name = "Gear - Medical uniforms" - contains = list(/obj/item/clothing/shoes/white = 3, - /obj/item/clothing/under/rank/chief_medical_officer, - /obj/item/clothing/under/rank/geneticist, - /obj/item/clothing/under/rank/virologist, - /obj/item/clothing/under/rank/nursesuit, - /obj/item/clothing/under/rank/nurse, - /obj/item/clothing/under/rank/orderly, - /obj/item/clothing/under/rank/medical = 3, - /obj/item/clothing/under/rank/medical/paramedic = 3, - /obj/item/clothing/suit/storage/toggle/labcoat = 3, - /obj/item/clothing/suit/storage/toggle/labcoat/cmo, - /obj/item/clothing/suit/storage/toggle/labcoat/cmoalt, - /obj/item/clothing/suit/storage/toggle/labcoat/genetics, - /obj/item/clothing/suit/storage/toggle/labcoat/virologist, - /obj/item/clothing/suit/storage/toggle/labcoat/chemist, - /obj/item/storage/box/masks, - /obj/item/storage/box/gloves) - cost = 15 - containertype = /obj/structure/closet/crate/secure - containername = "medical uniform crate" - access = access_medical_equip - -/decl/hierarchy/supply_pack/medical/medicalbiosuits - name = "Gear - Medical biohazard gear" - contains = list(/obj/item/clothing/head/bio_hood = 3, - /obj/item/clothing/suit/bio_suit = 3, - /obj/item/clothing/head/bio_hood/virology = 2, - /obj/item/clothing/suit/bio_suit/cmo = 2, - /obj/item/clothing/mask/gas = 5, - /obj/item/tank/oxygen = 5, - /obj/item/storage/box/masks, - /obj/item/storage/box/gloves) - cost = 50 - containertype = /obj/structure/closet/crate/secure - containername = "medical biohazard equipment crate" - access = access_medical_equip - -/decl/hierarchy/supply_pack/medical/portablefreezers - name = "Equipment - Portable freezers" - contains = list(/obj/item/storage/box/freezer = 7) - cost = 25 - containertype = /obj/structure/closet/crate/secure - containername = "portable freezers crate" - access = access_medical_equip - -/decl/hierarchy/supply_pack/medical/surgery - name = "Gear - Surgery tools" - contains = list(/obj/item/cautery, - /obj/item/surgicaldrill, - /obj/item/clothing/mask/breath/medical, - /obj/item/tank/anesthetic, - /obj/item/FixOVein, - /obj/item/hemostat, - /obj/item/scalpel, - /obj/item/bonegel, - /obj/item/retractor, - /obj/item/bonesetter, - /obj/item/circular_saw) - cost = 25 - containertype = /obj/structure/closet/crate/secure - containername = "surgery crate" - access = access_medical - -/decl/hierarchy/supply_pack/medical/sterile - name = "Gear - Sterile clothes" - contains = list(/obj/item/clothing/under/rank/medical/scrubs/green = 2, - /obj/item/clothing/head/surgery/green = 2, - /obj/item/storage/box/masks, - /obj/item/storage/box/gloves, - /obj/item/storage/belt/medical = 3) - cost = 15 - containertype = /obj/structure/closet/crate - containername = "sterile clothes crate" - -/decl/hierarchy/supply_pack/medical/scanner_module - name = "Electronics - Medical scanner modules" - contains = list(/obj/item/stock_parts/computer/scanner/medical = 4) - cost = 20 - containername = "medical scanner module crate" - containertype = /obj/structure/closet/crate/secure - access = access_medical_equip - -/decl/hierarchy/supply_pack/medical/defib - name = "Electronics - Defibrilator crate" - contains = list(/obj/item/defibrillator) - cost = 60 - containername = "\improper Defibrilator crate" - containertype = /obj/structure/closet/crate/secure - access = access_medical_equip - -/decl/hierarchy/supply_pack/medical/beltdefib - name = "Electronics - Compact Defibrilator crate" - contains = list(/obj/item/defibrillator/compact) - cost = 75 - containername = "\improper Compact Defibrilator crate" - containertype = /obj/structure/closet/crate/secure - access = access_medical_equip - -/decl/hierarchy/supply_pack/medical/autocomp - name = "Electronics - Auto-Compressor crate" - contains = list(/obj/item/auto_cpr) - cost = 50 - containername = "\improper Auto-Compressor crate" - containertype = /obj/structure/closet/crate/secure - access = access_medical_equip diff --git a/code/datums/supplypacks/munitions.dm b/code/datums/supplypacks/munitions.dm deleted file mode 100644 index 792786e38e42b..0000000000000 --- a/code/datums/supplypacks/munitions.dm +++ /dev/null @@ -1,34 +0,0 @@ -/decl/hierarchy/supply_pack/munition - name = "Ship Munitions" - containertype = /obj/structure/largecrate - containername = "mass driver munition crate" - -/decl/hierarchy/supply_pack/munition/md_slug - name = "Ammo - Mass Driver Slug" - contains = list(/obj/structure/ship_munition/md_slug) - cost = 50 - -/decl/hierarchy/supply_pack/munition/ap_slug - name = "Ammo - Armor Piercing Mass Driver Slug" - contains = list(/obj/structure/ship_munition/ap_slug) - cost = 60 - -/decl/hierarchy/supply_pack/munition/fire - name = "Ammo - disperser-FR1-ENFER charge" - contains = list(/obj/structure/ship_munition/disperser_charge/fire) - cost = 40 - -/decl/hierarchy/supply_pack/munition/emp - name = "Ammo - disperser-EM2-QUASAR charge" - contains = list(/obj/structure/ship_munition/disperser_charge/emp) - cost = 40 - -/decl/hierarchy/supply_pack/munition/mining - name = "Ammo - disperser-MN3-BERGBAU charge" - contains = list(/obj/structure/ship_munition/disperser_charge/mining) - cost = 40 - -/decl/hierarchy/supply_pack/munition/explosive - name = "Ammo - disperser-XP4-INDARRA charge" - contains = list(/obj/structure/ship_munition/disperser_charge/explosive) - cost = 40 \ No newline at end of file diff --git a/code/datums/supplypacks/nonessent.dm b/code/datums/supplypacks/nonessent.dm deleted file mode 100644 index a48a8aca883a0..0000000000000 --- a/code/datums/supplypacks/nonessent.dm +++ /dev/null @@ -1,314 +0,0 @@ -/decl/hierarchy/supply_pack/nonessent - name = "Non-essentials" - -/decl/hierarchy/supply_pack/nonessent/painters - name = "Art - Painting Supplies" - contains = list(/obj/item/device/paint_sprayer = 2, - /obj/item/device/cable_painter = 2) - cost = 10 - containername = "painting supplies crate" - containertype = /obj/structure/closet/crate - -/decl/hierarchy/supply_pack/nonessent/artscrafts - name = "Art - Arts and Crafts supplies" - contains = list(/obj/item/storage/fancy/crayons, - /obj/item/device/camera, - /obj/item/device/camera_film = 2, - /obj/item/storage/photo_album, - /obj/item/stack/package_wrap/twenty_five, - /obj/item/reagent_containers/glass/paint/red, - /obj/item/reagent_containers/glass/paint/green, - /obj/item/reagent_containers/glass/paint/blue, - /obj/item/reagent_containers/glass/paint/yellow, - /obj/item/reagent_containers/glass/paint/purple, - /obj/item/reagent_containers/glass/paint/black, - /obj/item/reagent_containers/glass/paint/white, - /obj/item/contraband/poster, - /obj/item/wrapping_paper = 3) - cost = 10 - containername = "arts and Crafts crate" - - -/decl/hierarchy/supply_pack/nonessent/card_packs - num_contained = 5 - contains = list(/obj/item/pack/cardemon, - /obj/item/pack/spaceball, - /obj/item/deck/holder) - name = "Rec - Trading Cards" - cost = 20 - containername = "trading cards crate" - supply_method = /decl/supply_method/randomized - -/decl/hierarchy/supply_pack/nonessent/lasertag - name = "Rec - Lasertag equipment" - contains = list(/obj/item/gun/energy/lasertag/red = 3, - /obj/item/clothing/suit/redtag = 3, - /obj/item/gun/energy/lasertag/blue = 3, - /obj/item/clothing/suit/bluetag = 3) - cost = 20 - containertype = /obj/structure/closet - containername = "lasertag Closet" - -/decl/hierarchy/supply_pack/nonessent/instruments - name = "Rec - Musical Instruments" - contains = list(/obj/item/device/synthesized_instrument/synthesizer, - /obj/item/device/synthesized_instrument/guitar/multi, - /obj/item/device/synthesized_instrument/guitar, - /obj/item/device/synthesized_instrument/trumpet) - cost = 40 - containername = "musical instrument crate" - - -/decl/hierarchy/supply_pack/nonessent/llamps - num_contained = 3 - contains = list(/obj/item/device/flashlight/lamp/lava, - /obj/item/device/flashlight/lamp/lava/red, - /obj/item/device/flashlight/lamp/lava/orange, - /obj/item/device/flashlight/lamp/lava/yellow, - /obj/item/device/flashlight/lamp/lava/green, - /obj/item/device/flashlight/lamp/lava/cyan, - /obj/item/device/flashlight/lamp/lava/blue, - /obj/item/device/flashlight/lamp/lava/purple, - /obj/item/device/flashlight/lamp/lava/pink) - name = "Deco - Lava lamps" - cost = 10 - containername = "lava lamp crate" - supply_method = /decl/supply_method/randomized - - -/decl/hierarchy/supply_pack/nonessent/wizard - name = "Costume - Wizard" - contains = list(/obj/item/staff, - /obj/item/clothing/suit/wizrobe/fake, - /obj/item/clothing/shoes/sandal, - /obj/item/clothing/head/wizard/fake) - cost = 20 - containername = "wizard costume crate" - -/decl/hierarchy/supply_pack/nonessent/costume - num_contained = 2 - contains = list(/obj/item/clothing/suit/pirate, - /obj/item/clothing/suit/judgerobe, - /obj/item/clothing/accessory/waistcoat/black, - /obj/item/clothing/suit/hastur, - /obj/item/clothing/suit/holidaypriest, - /obj/item/clothing/suit/nun, - /obj/item/clothing/suit/imperium_monk, - /obj/item/clothing/suit/ianshirt, - /obj/item/clothing/under/gimmick/rank/captain/suit, - /obj/item/clothing/under/gimmick/rank/head_of_personnel/suit, - /obj/item/clothing/under/lawyer/purpsuit, - /obj/item/clothing/under/rank/mailman, - /obj/item/clothing/under/dress/dress_saloon, - /obj/item/clothing/accessory/suspenders, - /obj/item/clothing/suit/storage/toggle/labcoat/mad, - /obj/item/clothing/suit/bio_suit/plaguedoctorsuit, - /obj/item/clothing/under/schoolgirl, - /obj/item/clothing/under/owl, - /obj/item/clothing/under/waiter, - /obj/item/clothing/under/gladiator, - /obj/item/clothing/under/soviet, - /obj/item/clothing/under/scratch, - /obj/item/clothing/under/wedding/bride_white, - /obj/item/clothing/suit/chef, - /obj/item/clothing/suit/apron/overalls, - /obj/item/clothing/under/redcoat, - /obj/item/clothing/under/kilt, - /obj/item/clothing/under/savage_hunter, - /obj/item/clothing/under/savage_hunter/female, - /obj/item/clothing/under/wetsuit) - name = "Costume - Random" - cost = 10 - containername = "actor costumes crate" - supply_method = /decl/supply_method/randomized - -/decl/hierarchy/supply_pack/nonessent/formal_wear - contains = list(/obj/item/clothing/head/bowler, - /obj/item/clothing/head/that, - /obj/item/clothing/suit/storage/toggle/suit/blue, - /obj/item/clothing/suit/storage/toggle/suit/purple, - /obj/item/clothing/under/suit_jacket, - /obj/item/clothing/under/suit_jacket/female, - /obj/item/clothing/under/suit_jacket/really_black, - /obj/item/clothing/under/suit_jacket/red, - /obj/item/clothing/under/lawyer/bluesuit, - /obj/item/clothing/under/lawyer/purpsuit, - /obj/item/clothing/shoes/black, - /obj/item/clothing/shoes/black, - /obj/item/clothing/shoes/leather, - /obj/item/clothing/accessory/waistcoat/black) - name = "Costume - Formalwear" - cost = 30 - containertype = /obj/structure/closet - containername = "formalwear for the best occasions." - - -/decl/hierarchy/supply_pack/nonessent/hats - num_contained = 4 - contains = list(/obj/item/clothing/head/collectable/chef, - /obj/item/clothing/head/collectable/paper, - /obj/item/clothing/head/collectable/tophat, - /obj/item/clothing/head/collectable/captain, - /obj/item/clothing/head/collectable/beret, - /obj/item/clothing/head/collectable/welding, - /obj/item/clothing/head/collectable/flatcap, - /obj/item/clothing/head/collectable/pirate, - /obj/item/clothing/head/collectable/kitty, - /obj/item/clothing/head/collectable/rabbitears, - /obj/item/clothing/head/collectable/wizard, - /obj/item/clothing/head/collectable/hardhat, - /obj/item/clothing/head/collectable/HoS, - /obj/item/clothing/head/collectable/thunderdome, - /obj/item/clothing/head/collectable/swat, - /obj/item/clothing/head/collectable/slime, - /obj/item/clothing/head/collectable/police, - /obj/item/clothing/head/collectable/slime, - /obj/item/clothing/head/collectable/xenom, - /obj/item/clothing/head/collectable/petehat) - name = "Costume - Collectible hats!" - cost = 200 - containername = "\improper Collectable hats crate! Brought to you by Bass.inc!" - supply_method = /decl/supply_method/randomized - -/decl/hierarchy/supply_pack/nonessent/witch - name = "Costume - Witch" - contains = list(/obj/item/clothing/suit/wizrobe/marisa/fake, - /obj/item/clothing/shoes/sandal, - /obj/item/clothing/head/wizard/marisa/fake, - /obj/item/staff/broom) - cost = 20 - containername = "witch costume crate" - containertype = /obj/structure/closet - -/decl/hierarchy/supply_pack/nonessent/costume_hats - name = "Costume - Regular hats" - contains = list(/obj/item/clothing/head/redcoat, - /obj/item/clothing/head/mailman, - /obj/item/clothing/head/plaguedoctorhat, - /obj/item/clothing/head/pirate, - /obj/item/clothing/head/hasturhood, - /obj/item/clothing/head/powdered_wig, - /obj/item/clothing/head/hairflower, - /obj/item/clothing/head/hairflower/yellow, - /obj/item/clothing/head/hairflower/blue, - /obj/item/clothing/head/hairflower/pink, - /obj/item/clothing/mask/gas/owl_mask, - /obj/item/clothing/mask/gas/monkeymask, - /obj/item/clothing/head/helmet/gladiator, - /obj/item/clothing/head/ushanka, - /obj/item/clothing/mask/spirit) - cost = 10 - containername = "actor hats crate" - containertype = /obj/structure/closet - num_contained = 2 - supply_method = /decl/supply_method/randomized - -/decl/hierarchy/supply_pack/nonessent/dresses - name = "Costume - Womens formal dress locker" - contains = list(/obj/item/clothing/under/wedding/bride_orange, - /obj/item/clothing/under/wedding/bride_purple, - /obj/item/clothing/under/wedding/bride_blue, - /obj/item/clothing/under/wedding/bride_red, - /obj/item/clothing/under/wedding/bride_white, - /obj/item/clothing/under/sundress, - /obj/item/clothing/under/dress/dress_green, - /obj/item/clothing/under/dress/dress_pink, - /obj/item/clothing/under/dress/dress_orange, - /obj/item/clothing/under/dress/dress_yellow, - /obj/item/clothing/under/dress/dress_saloon) - cost = 15 - containername = "pretty dress locker" - containertype = /obj/structure/closet - num_contained = 1 - supply_method = /decl/supply_method/randomized - - - -/decl/hierarchy/supply_pack/nonessent/officetoys - name = "Deco - Office toys" - contains = list(/obj/item/toy/desk/newtoncradle, - /obj/item/toy/desk/fan, - /obj/item/toy/desk/officetoy, - /obj/item/toy/desk/dippingbird) - cost = 15 - containername = "office toys crate" - -/decl/hierarchy/supply_pack/nonessent/holoplants - name = "Deco - Holoplants" - contains = list(/obj/structure/holoplant = 5) - cost = 40 - containername = "holoplants crate" - containertype = /obj/structure/largecrate - -/decl/hierarchy/supply_pack/nonessent/chaplaingear - name = "Costume - Chaplain" - contains = list(/obj/item/clothing/under/rank/chaplain, - /obj/item/clothing/shoes/black, - /obj/item/clothing/suit/nun, - /obj/item/clothing/head/nun_hood, - /obj/item/clothing/suit/chaplain_hoodie, - /obj/item/clothing/head/chaplain_hood, - /obj/item/clothing/suit/holidaypriest, - /obj/item/clothing/under/wedding/bride_white, -// /obj/item/storage/backpack/cultpack, - /obj/item/storage/candle_box = 3) - cost = 10 - containername = "chaplain equipment crate" - -/decl/hierarchy/supply_pack/nonessent/exosuit_mod - num_contained = 1 - name = "Mod - \"Firestarter\" exosuit modkit" - contains = list(/obj/item/device/kit/paint/flames_red) - cost = 50 - containername = "heavy exosuit modkit crate" - -/decl/hierarchy/supply_pack/nonessent/exosuit_mod/chrome - name = "Mod - \"Burning Chrome\" exosuit modkit" - contains = list(/obj/item/device/kit/paint/flames_blue) - -/decl/hierarchy/supply_pack/nonessent/exosuit_mod/military - name = "Mod - \"Guerilla\" exosuit modkit" - contains = list(/obj/item/device/kit/paint/camouflage) - -/decl/hierarchy/supply_pack/nonessent/exosuit_mod/alpine - name = "Mod - \"Alpine\" exosuit modkit" - contains = list(/obj/item/device/kit/paint/camouflage/forest) - -/decl/hierarchy/supply_pack/nonessent/aromatherapy - name = "Rec - Aromatherapy" - contains = list( - /obj/item/paper/aromatherapy_disclaimer, - /obj/item/storage/candle_box/scented = 3, - /obj/item/storage/candle_box/incense = 6, - /obj/item/flame/lighter/random) - cost = 15 - containername = "aromatherapy crate" - -/decl/hierarchy/supply_pack/nonessent/pins - name = "Costume - Pride Pin Crate" - contains = list( - /obj/item/clothing/accessory/pride_pin/transgender = 2, - /obj/item/clothing/accessory/pride_pin/lesbian = 2, - /obj/item/clothing/accessory/pride_pin/bisexual = 2, - /obj/item/clothing/accessory/pride_pin/gay = 2, - /obj/item/clothing/accessory/pride_pin/pansexual = 2, - /obj/item/clothing/accessory/pride_pin/nonbinary = 2, - /obj/item/clothing/accessory/pride_pin/asexual = 2, - /obj/item/clothing/accessory/pride_pin/intersex = 2 - ) - cost = 20 - containername = "pin crate" - -/decl/hierarchy/supply_pack/nonessent/pronounbadges - name = "Costume - Pronoun Badge Crate" - contains = list( - /obj/item/clothing/accessory/pronouns/they = 2, - /obj/item/clothing/accessory/pronouns/hehim = 2, - /obj/item/clothing/accessory/pronouns/sheher = 2, - /obj/item/clothing/accessory/pronouns/hethey = 2, - /obj/item/clothing/accessory/pronouns/shethey = 2, - /obj/item/clothing/accessory/pronouns/heshe = 2, - /obj/item/clothing/accessory/pronouns/ask = 2 - ) - cost = 20 - containername = "pronoun badge crate" diff --git a/code/datums/supplypacks/operations.dm b/code/datums/supplypacks/operations.dm deleted file mode 100644 index 3f90aefd0703b..0000000000000 --- a/code/datums/supplypacks/operations.dm +++ /dev/null @@ -1,94 +0,0 @@ -/decl/hierarchy/supply_pack/operations - name = "Operations" - -/decl/hierarchy/supply_pack/operations/contraband - num_contained = 5 - contains = list(/obj/item/seeds/bloodtomatoseed, - /obj/item/storage/pill_bottle/zoom, - /obj/item/storage/pill_bottle/happy, - /obj/item/storage/pill_bottle/three_eye, - /obj/item/reagent_containers/food/drinks/bottle/pwine) - - name = "UNLISTED - Contraband crate" - cost = 30 - containername = "unlabeled crate" - contraband = 1 - supply_method = /decl/supply_method/randomized - -/decl/hierarchy/supply_pack/operations/plasma_cutter - name = "Equipment - Plasma Cutter" - contains = list(/obj/item/gun/energy/plasmacutter) - cost = 120 - containertype = /obj/structure/closet/crate/secure - containername = "plasma cutter crate" - access = list(list(access_mining,access_engine)) - -/decl/hierarchy/supply_pack/operations/orebox - name = "Equipment - Ore box" - contains = list(/obj/structure/ore_box) - cost = 15 - containertype = /obj/structure/largecrate - containername = "Ore box crate" - -/decl/hierarchy/supply_pack/operations/webbing - name = "Gear - Webbing, vests, holsters." - num_contained = 4 - contains = list(/obj/item/clothing/accessory/storage/holster, - /obj/item/clothing/accessory/storage/black_vest, - /obj/item/clothing/accessory/storage/brown_vest, - /obj/item/clothing/accessory/storage/white_vest, - /obj/item/clothing/accessory/storage/black_drop, - /obj/item/clothing/accessory/storage/brown_drop, - /obj/item/clothing/accessory/storage/white_drop, - /obj/item/clothing/accessory/storage/webbing) - cost = 15 - containername = "webbing crate" - -/decl/hierarchy/supply_pack/operations/voidsuit_engineering - name = "EVA - Engineering voidsuit" - contains = list(/obj/item/clothing/suit/space/void/engineering/alt, - /obj/item/clothing/head/helmet/space/void/engineering/alt, - /obj/item/clothing/shoes/magboots) - cost = 120 - containername = "engineering voidsuit crate" - containertype = /obj/structure/closet/crate/secure/large - access = access_engine - -/decl/hierarchy/supply_pack/operations/voidsuit_medical - name = "EVA - Medical voidsuit" - contains = list(/obj/item/clothing/suit/space/void/medical/alt, - /obj/item/clothing/head/helmet/space/void/medical/alt, - /obj/item/clothing/shoes/magboots) - cost = 120 - containername = "medical voidsuit crate" - containertype = /obj/structure/closet/crate/secure/large - access = access_medical_equip - -/decl/hierarchy/supply_pack/operations/voidsuit_security - name = "EVA - Security (armored) voidsuit" - contains = list(/obj/item/clothing/suit/space/void/security/alt, - /obj/item/clothing/head/helmet/space/void/security/alt, - /obj/item/clothing/shoes/magboots) - cost = 120 - containername = "security voidsuit crate" - containertype = /obj/structure/closet/crate/secure/large - access = access_brig - -/decl/hierarchy/supply_pack/operations/bureaucracy - contains = list(/obj/item/material/clipboard, - /obj/item/material/clipboard, - /obj/item/pen/retractable/red, - /obj/item/pen/retractable/blue, - /obj/item/pen/green, - /obj/item/device/camera_film, - /obj/item/folder/blue, - /obj/item/folder/red, - /obj/item/folder/yellow, - /obj/item/hand_labeler, - /obj/item/tape_roll, - /obj/structure/filingcabinet/chestdrawer{anchored = FALSE}, - /obj/item/paper_bin) - name = "Office supplies" - cost = 15 - containertype = /obj/structure/closet/crate/large - containername = "office supplies crate" diff --git a/code/datums/supplypacks/science.dm b/code/datums/supplypacks/science.dm deleted file mode 100644 index 54a7d9a0cb1d4..0000000000000 --- a/code/datums/supplypacks/science.dm +++ /dev/null @@ -1,89 +0,0 @@ -/decl/hierarchy/supply_pack/science - name = "Research - Exploration" - -/decl/hierarchy/supply_pack/science/chemistry_dispenser - name = "Equipment - Chemical Reagent dispenser" - contains = list( - /obj/machinery/chemical_dispenser{anchored = FALSE} - ) - cost = 25 - containertype = /obj/structure/largecrate - containername = "reagent dispenser crate" - -/decl/hierarchy/supply_pack/science/coolanttank - name = "Liquid - Coolant tank" - contains = list(/obj/structure/reagent_dispensers/coolanttank) - cost = 16 - containertype = /obj/structure/largecrate - containername = "coolant tank crate" - -/decl/hierarchy/supply_pack/science/robotics - name = "Parts - Robotics" - contains = list(/obj/item/device/assembly/prox_sensor = 3, - /obj/item/storage/toolbox/electrical, - /obj/item/device/flash = 4, - /obj/item/cell/high = 2) - cost = 10 - containertype = /obj/structure/closet/crate/secure/gear - containername = "robotics assembly crate" - access = access_robotics - -/decl/hierarchy/supply_pack/science/phoron - name = "Parts - Phoron device kit" - contains = list(/obj/item/tank/phoron = 3, - /obj/item/device/assembly/igniter = 3, - /obj/item/device/assembly/prox_sensor = 3, - /obj/item/device/assembly/timer = 3) - cost = 10 - containertype = /obj/structure/closet/crate/secure/phoron - containername = "phoron assembly crate" - access = access_tox_storage - -/decl/hierarchy/supply_pack/science/scanner_module - name = "Electronics - Reagent scanner modules" - contains = list(/obj/item/stock_parts/computer/scanner/reagent = 4) - cost = 20 - containername = "reagent scanner module crate" - -/decl/hierarchy/supply_pack/science/minergear - name = "Shaft miner equipment" - contains = list(/obj/item/storage/backpack/industrial, - /obj/item/storage/backpack/satchel/eng, - /obj/item/device/radio/headset/headset_cargo, - /obj/item/clothing/under/rank/miner, - /obj/item/clothing/gloves/thick, - /obj/item/clothing/shoes/black, - /obj/item/device/scanner/gas, - /obj/item/storage/ore, - /obj/item/device/flashlight/lantern, - /obj/item/shovel, - /obj/item/pickaxe, - /obj/item/device/scanner/mining, - /obj/item/clothing/glasses/material, - /obj/item/clothing/glasses/meson) - cost = 15 - containertype = /obj/structure/closet/crate/secure - containername = "shaft miner equipment crate" - access = access_mining - -/decl/hierarchy/supply_pack/science/flamps - num_contained = 3 - contains = list(/obj/item/device/flashlight/lamp/floodlamp, - /obj/item/device/flashlight/lamp/floodlamp/green) - name = "Equipment - Flood lamps" - cost = 20 - containername = "flood lamp crate" - supply_method = /decl/supply_method/randomized - -/decl/hierarchy/supply_pack/science/illuminate - name = "Gear - Illumination grenades" - contains = list(/obj/item/grenade/light = 8) - cost = 20 - containername = "illumination grenade crate" - -/decl/hierarchy/supply_pack/science/anomaly_crate - name = "Equipment - Anomaly Container" - cost = 20 - contains = list(/obj/structure/anomaly_container) - containertype = /obj/structure/largecrate - containername = "anomaly container crate" diff --git a/code/datums/supplypacks/security.dm b/code/datums/supplypacks/security.dm deleted file mode 100644 index 357bf609bb080..0000000000000 --- a/code/datums/supplypacks/security.dm +++ /dev/null @@ -1,333 +0,0 @@ -/decl/hierarchy/supply_pack/security - name = "Security" - -/decl/hierarchy/supply_pack/security/specialops - name = "Grenades - Special Ops supplies" - contains = list(/obj/item/storage/box/emps, - /obj/item/grenade/smokebomb = 3, - /obj/item/grenade/chem_grenade/incendiary) - cost = 20 - containername = "special ops crate" - hidden = 1 - -/decl/hierarchy/supply_pack/security/lightarmor - name = "Armor - Light" - contains = list(/obj/item/clothing/suit/armor/pcarrier/light = 4, - /obj/item/clothing/head/helmet =4) - cost = 30 - containertype = /obj/structure/closet/crate/secure - containername = "light armor crate" - access = access_security - -/decl/hierarchy/supply_pack/security/armor - name = "Armor - Unmarked" - contains = list(/obj/item/clothing/suit/armor/pcarrier/medium = 2, - /obj/item/clothing/head/helmet =2) - cost = 20 - containertype = /obj/structure/closet/crate/secure - containername = "armor crate" - access = access_security - -/decl/hierarchy/supply_pack/security/tacticalarmor - name = "Armor - Tactical" - contains = list(/obj/item/clothing/under/tactical, - /obj/item/clothing/suit/armor/pcarrier/tan/tactical, - /obj/item/clothing/head/helmet/tactical, - /obj/item/clothing/mask/balaclava/tactical, - /obj/item/clothing/glasses/tacgoggles, - /obj/item/storage/belt/holster/security/tactical, - /obj/item/clothing/shoes/tactical, - /obj/item/clothing/gloves/tactical) - cost = 45 - containertype = /obj/structure/closet/crate/secure - containername = "tactical armor crate" - access = access_armory - -/decl/hierarchy/supply_pack/security/blackguards - name = "Armor - Arm and leg guards, black" - contains = list(/obj/item/clothing/accessory/arm_guards = 2, - /obj/item/clothing/accessory/leg_guards = 2) - cost = 20 - containertype = /obj/structure/closet/crate/secure - containername = "arm and leg guards crate" - access = access_armory - -/decl/hierarchy/supply_pack/security/blueguards - name = "Armor - Arm and leg guards, blue" - contains = list(/obj/item/clothing/accessory/arm_guards/blue = 2, - /obj/item/clothing/accessory/leg_guards/blue = 2) - cost = 20 - containertype = /obj/structure/closet/crate/secure - containername = "arm and leg guards crate" - access = access_armory - -/decl/hierarchy/supply_pack/security/greenguards - name = "Armor - Arm and leg guards, green" - contains = list(/obj/item/clothing/accessory/arm_guards/green = 2, - /obj/item/clothing/accessory/leg_guards/green = 2) - cost = 20 - containertype = /obj/structure/closet/crate/secure - containername = "arm and leg guards crate" - access = access_armory - -/decl/hierarchy/supply_pack/security/navyguards - name = "Armor - Arm and leg guards, navy blue" - contains = list(/obj/item/clothing/accessory/arm_guards/navy = 2, - /obj/item/clothing/accessory/leg_guards/navy = 2) - cost = 20 - containertype = /obj/structure/closet/crate/secure - containername = "arm and leg guards crate" - access = access_armory - -/decl/hierarchy/supply_pack/security/tanguards - name = "Armor - Arm and leg guards, tan" - contains = list(/obj/item/clothing/accessory/arm_guards/tan = 2, - /obj/item/clothing/accessory/leg_guards/tan = 2) - cost = 20 - containertype = /obj/structure/closet/crate/secure - containername = "arm and leg guards crate" - access = access_armory - -/decl/hierarchy/supply_pack/security/riotarmor - name = "Armor - Riot gear" - contains = list(/obj/item/shield/riot = 4, - /obj/item/clothing/head/helmet/riot = 4, - /obj/item/clothing/suit/armor/riot = 4, - /obj/item/storage/box/flashbangs, - /obj/item/storage/box/teargas) - cost = 80 - containertype = /obj/structure/closet/crate/secure - containername = "riot armor crate" - access = access_armory - -/decl/hierarchy/supply_pack/security/ballisticarmor - name = "Armor - Ballistic" - contains = list(/obj/item/clothing/head/helmet/ballistic = 4, - /obj/item/clothing/suit/armor/bulletproof = 4) - cost = 60 - containertype = /obj/structure/closet/crate/secure - containername = "ballistic suit crate" - access = access_armory - -/decl/hierarchy/supply_pack/security/ablativearmor - name = "Armor - Ablative" - contains = list(/obj/item/clothing/head/helmet/ablative = 4, - /obj/item/clothing/suit/armor/laserproof = 4) - cost = 60 - containertype = /obj/structure/closet/crate/secure - containername = "ablative suit crate" - access = access_armory - -/decl/hierarchy/supply_pack/security/weapons - name = "Weapons - Security basic" - contains = list(/obj/item/device/flash = 4, - /obj/item/reagent_containers/spray/pepper = 4, - /obj/item/melee/baton/loaded = 4, - /obj/item/gun/energy/taser = 4) - cost = 50 - containertype = /obj/structure/closet/crate/secure/weapon - containername = "weapons crate" - access = access_security - -/decl/hierarchy/supply_pack/security/egun - name = "Weapons - Energy sidearms" - contains = list(/obj/item/gun/energy/gun/secure = 4) - cost = 40 - containertype = /obj/structure/closet/crate/secure/weapon - containername = "energy sidearms crate" - access = access_armory - security_level = SUPPLY_SECURITY_ELEVATED - -/decl/hierarchy/supply_pack/security/egun/shady - name = "Weapons - Energy sidearms (For disposal)" - contains = list(/obj/item/gun/energy/gun = 4) - cost = 60 - contraband = 1 - security_level = null - -/decl/hierarchy/supply_pack/security/plasma - name = "Weapons - Plasma assault rifles" - contains = list(/obj/item/gun/energy/k342 = 2, - /obj/item/cell/guncell/medium = 6) - cost = 110 - containertype = /obj/structure/closet/crate/secure/weapon - containername = "plasma longarms crate" - access = access_armory - security_level = SUPPLY_SECURITY_ELEVATED - -/decl/hierarchy/supply_pack/security/plasma/expo - name = "Weapons - Plasma assault rifles (Expeditionary Corps)" - contains = list(/obj/item/gun/energy/k342/explo = 2, - /obj/item/cell/guncell/medium = 6) - cost = 130 - security_level = SUPPLY_SECURITY_ELEVATED - -/decl/hierarchy/supply_pack/security/plasma/stingray - name = "Weapons - Plasma sniper rifles" - contains = list(/obj/item/gun/energy/k342/sniper = 2, - /obj/item/cell/guncell/medium = 6) - cost = 180 - security_level = SUPPLY_SECURITY_HIGH - -/decl/hierarchy/supply_pack/security/ion - name = "Weapons - Electromagnetic" - contains = list(/obj/item/gun/energy/ionrifle = 2, - /obj/item/storage/box/emps) - cost = 50 - containertype = /obj/structure/closet/crate/secure/weapon - containername = "electromagnetic weapons crate" - access = access_armory - security_level = SUPPLY_SECURITY_ELEVATED - -/decl/hierarchy/supply_pack/security/shotgun - name = "Weapons - Shotgun" - contains = list(/obj/item/gun/projectile/shotgun/pump/combat = 2) - cost = 60 - containertype = /obj/structure/closet/crate/secure/weapon - containername = "shotgun crate" - access = access_armory - security_level = SUPPLY_SECURITY_ELEVATED - -/decl/hierarchy/supply_pack/security/flashbang - name = "Weapons - Flashbangs" - contains = list(/obj/item/storage/box/flashbangs = 2) - cost = 30 - containertype = /obj/structure/closet/crate/secure/weapon - containername = "flashbang crate" - access = access_security - -/decl/hierarchy/supply_pack/security/teargas - name = "Weapons - Tear gas grenades" - contains = list(/obj/item/storage/box/teargas = 2) - cost = 30 - containertype = /obj/structure/closet/crate/secure/weapon - containername = "tear gas grenades crate" - access = access_security - -/decl/hierarchy/supply_pack/security/shotgunammo - name = "Ammunition - Lethal shells" - contains = list(/obj/item/storage/box/ammo/shotgunammo = 2, - /obj/item/storage/box/ammo/shotgunshells = 2) - cost = 60 - containertype = /obj/structure/closet/crate/secure/weapon - containername = "lethal shotgun shells crate" - access = access_security - security_level = SUPPLY_SECURITY_ELEVATED - -/decl/hierarchy/supply_pack/security/shotgunbeanbag - name = "Ammunition - Beanbag shells" - contains = list(/obj/item/storage/box/ammo/beanbags = 3) - cost = 30 - containertype = /obj/structure/closet/crate/secure/weapon - containername = "beanbag shotgun shells crate" - access = access_security - -/decl/hierarchy/supply_pack/security/pdwammo - name = "Ammunition - SMG top mounted" - contains = list(/obj/item/ammo_magazine/smg_top = 4) - cost = 40 - containertype = /obj/structure/closet/crate/secure/weapon - containername = "SMG ammunition crate" - access = access_security - security_level = SUPPLY_SECURITY_HIGH - -/decl/hierarchy/supply_pack/security/pdwammorubber - name = "Ammunition - SMG top mounted rubber" - contains = list(/obj/item/ammo_magazine/smg_top/rubber = 4) - cost = 30 - containertype = /obj/structure/closet/crate/secure/weapon - containername = "SMG rubber ammunition crate" - access = access_security - -/decl/hierarchy/supply_pack/security/pdwammopractice - name = "Ammunition - SMG top mounted practice" - contains = list(/obj/item/ammo_magazine/smg_top/practice = 8) - cost = 30 - containertype = /obj/structure/closet/crate/secure/weapon - containername = "SMG practice ammunition crate" - access = access_security - -/decl/hierarchy/supply_pack/security/bullpupammo - name = "Ammunition - military rifle" - contains = list(/obj/item/ammo_magazine/mil_rifle = 4) - cost = 60 - containertype = /obj/structure/closet/crate/secure/weapon - containername = "military rifle ammunition crate" - access = access_security - security_level = SUPPLY_SECURITY_HIGH - -/decl/hierarchy/supply_pack/security/bullpupammopractice - name = "Ammunition - military rifle practice" - contains = list(/obj/item/ammo_magazine/mil_rifle/practice = 8) - cost = 30 - containertype = /obj/structure/closet/crate/secure/weapon - containername = "military rifle practice ammunition crate" - access = access_security - -/decl/hierarchy/supply_pack/security/forensics //Not access-restricted so PIs can use it. - name = "Forensics - Auxiliary tools" - contains = list(/obj/item/forensics/sample_kit, - /obj/item/forensics/sample_kit/powder, - /obj/item/storage/box/swabs = 3, - /obj/item/reagent_containers/spray/luminol) - cost = 30 - containername = "auxiliary forensic tools crate" - -/decl/hierarchy/supply_pack/security/detectivegear - name = "Forensics - investigation equipment" - contains = list(/obj/item/storage/box/evidence = 2, - /obj/item/device/radio/headset/headset_sec, - /obj/item/taperoll/police, - /obj/item/clothing/glasses/sunglasses, - /obj/item/device/camera, - /obj/item/folder/red, - /obj/item/folder/blue, - /obj/item/clothing/gloves/forensic, - /obj/item/device/taperecorder, - /obj/item/device/scanner/spectrometer, - /obj/item/device/camera_film = 2, - /obj/item/storage/photo_album, - /obj/item/device/scanner/reagent, - /obj/item/storage/briefcase/crimekit = 2) - cost = 50 - containertype = /obj/structure/closet/crate/secure - containername = "forensic equipment crate" - access = access_forensics_lockers - -/decl/hierarchy/supply_pack/security/securitybarriers - name = "Equipment - Barrier crate" - contains = list(/obj/machinery/barrier = 4) - cost = 20 - containertype = /obj/structure/closet/crate/secure/large - containername = "security barrier crate" - access = access_security - -/decl/hierarchy/supply_pack/security/securitybarriers - name = "Equipment - Wall shield Generators" - contains = list(/obj/machinery/shieldwallgen = 2) - cost = 20 - containertype = /obj/structure/closet/crate/secure/large - containername = "wall shield generators crate" - access = access_brig - -/decl/hierarchy/supply_pack/security/securitybiosuit - name = "Gear - Security biohazard gear" - contains = list(/obj/item/clothing/head/bio_hood/security, - /obj/item/clothing/suit/bio_suit/security, - /obj/item/clothing/mask/gas, - /obj/item/tank/oxygen, - /obj/item/clothing/gloves/latex) - cost = 30 - containertype = /obj/structure/closet/crate/secure - containername = "security biohazard gear crate" - access = access_security - -/decl/hierarchy/supply_pack/security/voidsuit_security - name = "EVA - Security (armored) voidsuit" - contains = list(/obj/item/clothing/suit/space/void/security/alt, - /obj/item/clothing/head/helmet/space/void/security/alt, - /obj/item/clothing/shoes/magboots) - cost = 120 - containername = "security voidsuit crate" - containertype = /obj/structure/closet/crate/secure/large - access = access_brig diff --git a/code/datums/supplypacks/supply.dm b/code/datums/supplypacks/supply.dm deleted file mode 100644 index b373479ca7e11..0000000000000 --- a/code/datums/supplypacks/supply.dm +++ /dev/null @@ -1,250 +0,0 @@ -/decl/hierarchy/supply_pack/supply - name = "Supplies - Comissary" - containertype = /obj/structure/closet/crate - -/decl/hierarchy/supply_pack/supply/toner - name = "Refills - Toner cartridges" - contains = list(/obj/item/device/toner = 3) - cost = 10 - containername = "toner cartridges" - -/decl/hierarchy/supply_pack/supply/cardboard_sheets - name = "Material - cardboard sheets (50)" - contains = list(/obj/item/stack/material/cardboard/fifty) - cost = 10 - containername = "cardboard sheets crate" - -/decl/hierarchy/supply_pack/supply/stickies - name = "Stationery - sticky notes (50)" - contains = list(/obj/item/sticky_pad/random) - cost = 10 - containername = "\improper Sticky notes crate" - -/decl/hierarchy/supply_pack/supply/wpaper - name = "Cargo - Wrapping paper" - contains = list(/obj/item/stack/package_wrap/twenty_five = 3) - cost = 10 - containername = "wrapping paper" - -/decl/hierarchy/supply_pack/supply/tapes - name = "Medium - Blank Tapes (14)" - contains = list (/obj/item/storage/box/tapes) - cost = 10 - containername = "blank tapes crate" - -/decl/hierarchy/supply_pack/supply/taperolls - name = "G.O.S.H - Barricade Tapes (mixed)" - contains = list (/obj/item/storage/box/taperolls) - cost = 10 - containername = "barricade tape crate" - -/decl/hierarchy/supply_pack/supply/bogrolls - name = "Custodial - Toilet paper (12)" - contains = list (/obj/item/storage/box/bogrolls = 2) - cost = 10 - containername = "toilet paper crate" - -/decl/hierarchy/supply_pack/supply/scanner_module - name = "Electronics - Paper scanner modules" - contains = list(/obj/item/stock_parts/computer/scanner/paper = 4) - cost = 20 - containername = "paper scanner module crate" - -/decl/hierarchy/supply_pack/supply/spare_pda - name = "Electronics - Spare PDAs" - contains = list(/obj/item/modular_computer/pda = 3) - cost = 10 - containername = "spare PDA crate" - -/decl/hierarchy/supply_pack/supply/eftpos - contains = list(/obj/item/device/eftpos) - name = "Electronics - EFTPOS scanner" - cost = 10 - containername = "\improper EFTPOS crate" - -/decl/hierarchy/supply_pack/supply/water - name = "Refills - Bottled water" - contains = list (/obj/item/storage/box/water = 2) - cost = 12 - containername = "bottled water crate" - -/decl/hierarchy/supply_pack/supply/sodas - num_contained = 2 - contains = list(/obj/item/storage/box/cola, - /obj/item/storage/box/cola/spacewind, - /obj/item/storage/box/cola/drgibb, - /obj/item/storage/box/cola/ionbru, - /obj/item/storage/box/cola/spaceup, - /obj/item/storage/box/cola/lemonlime, - /obj/item/storage/box/cola/icedtea, - /obj/item/storage/box/cola/grapejuice, - /obj/item/storage/box/cola/sodawater, - /obj/item/storage/box/cola/beastenergy, - ) - name = "Refills - Soda cans" - cost = 10 - containername = "soda can crate" - supply_method = /decl/supply_method/randomized - -/decl/hierarchy/supply_pack/supply/snacks - num_contained = 2 - contains = list(/obj/item/storage/box/snack, - /obj/item/storage/box/snack/jerky, - /obj/item/storage/box/snack/noraisin, - /obj/item/storage/box/snack/cheesehonks, - /obj/item/storage/box/snack/tastybread, - /obj/item/storage/box/snack/candy, - /obj/item/storage/box/snack/chips) - name = "Refills - Snack foods" - cost = 10 - containername = "snack foods crate" - supply_method = /decl/supply_method/randomized - -/decl/hierarchy/supply_pack/supply/canned - num_contained = 2 - contains = list(/obj/item/storage/box/canned, - /obj/item/storage/box/canned/beef, - /obj/item/storage/box/canned/beans, - /obj/item/storage/box/canned/tomato, -) - name = "Emergency - Canned foods" - cost = 30 - containername = "canneds crate" - supply_method = /decl/supply_method/randomized - -/decl/hierarchy/supply_pack/supply/coolanttank - name = "Liquid - Coolant tank" - contains = list(/obj/structure/reagent_dispensers/coolanttank) - cost = 16 - containertype = /obj/structure/largecrate - containername = "coolant tank crate" - -/decl/hierarchy/supply_pack/supply/fueltank - name = "Liquid - Fuel tank" - contains = list(/obj/structure/reagent_dispensers/fueltank) - cost = 8 - containertype = /obj/structure/largecrate - containername = "fuel tank crate" - -/decl/hierarchy/supply_pack/supply/watertank - name = "Liquid - Water tank" - contains = list(/obj/structure/reagent_dispensers/watertank) - cost = 8 - containertype = /obj/structure/largecrate - containername = "water tank crate" - -//replacement vendors -//Vending Machines -//I have decided against adding the adherent vendor because it is a modified machine as well as the security vendors, which should probably be under a bit more scrutiny than "whoever is deck tech at the time" - -/decl/hierarchy/supply_pack/supply/snackvendor - name = "Vendor - Getmoore Chocolate Co" - contains = list(/obj/machinery/vending/snack{anchored = FALSE}) - cost = 150 - containertype = /obj/structure/largecrate - containername = "\improper Vending Machine" - -/decl/hierarchy/supply_pack/supply/snixvendor - name = "Vendor - Snix Zakuson TCC" - contains = list(/obj/machinery/vending/snix{anchored = FALSE}) - cost = 150 - containertype = /obj/structure/largecrate - containername = "\improper Vending Machine" - -/decl/hierarchy/supply_pack/supply/solvendor - name = "Vendor - Mars Mart SCC" - contains = list(/obj/machinery/vending/sol{anchored = FALSE}) - cost = 150 - containertype = /obj/structure/largecrate - containername = "\improper Vending Machine" - -/decl/hierarchy/supply_pack/supply/sodavendor - name = "Vendor - Softdrinks Robust Industries LLC" - contains = list(/obj/machinery/vending/cola{anchored = FALSE}) - cost = 150 - containertype = /obj/structure/largecrate - containername = "\improper Vending Machine" - -/decl/hierarchy/supply_pack/supply/lavatoryvendor - name = "Vendor - Lavatory Essentials - Waffle Co" - contains = list(/obj/machinery/vending/lavatory{anchored = FALSE}) - cost = 150 - containertype = /obj/structure/largecrate - containername = "\improper Vending Machine" - -/decl/hierarchy/supply_pack/supply/boozevendor - name = "Vendor - Booze-o-mat - GrekkaTarg Boozeries" - contains = list(/obj/machinery/vending/boozeomat{anchored = FALSE}) - cost = 150 - containertype = /obj/structure/largecrate - containername = "\improper Vending Machine" - -/decl/hierarchy/supply_pack/supply/gamevendor - name = "Vendor - Games - Honk Co" - contains = list(/obj/machinery/vending/games{anchored = FALSE}) - cost = 150 - containertype = /obj/structure/largecrate - containername = "\improper Vending Machine" - -/decl/hierarchy/supply_pack/supply/fitnessvendor - name = "Vendor - Fitness - SwolMAX Bros" - contains = list(/obj/machinery/vending/fitness{anchored = FALSE}) - cost = 150 - containertype = /obj/structure/largecrate - containername = "\improper Vending Machine" - -/decl/hierarchy/supply_pack/supply/cigarettevendor - name = "Vendor - Cigarettes - Gideon Asbestos Mining Conglomerate" - contains = list(/obj/machinery/vending/cigarette{anchored = FALSE}) - cost = 150 - containertype = /obj/structure/largecrate - containername = "\improper Vending Machine" - -/decl/hierarchy/supply_pack/supply/roboticsvendor - name = "Vendor - Robotics - Dandytronics LLT" - contains = list(/obj/machinery/vending/robotics{anchored = FALSE}) - cost = 150 - containertype = /obj/structure/largecrate - containername = "\improper Vending Machine" - -/decl/hierarchy/supply_pack/supply/engineeringvendor - name = "Vendor - Engineering - Dandytronics LLT" - contains = list(/obj/machinery/vending/engineering{anchored = FALSE}) - cost = 150 - containertype = /obj/structure/largecrate - containername = "\improper Vending Machine" - -/decl/hierarchy/supply_pack/supply/toolvendor - name = "Vendor - Tools - YouTool Co" - contains = list(/obj/machinery/vending/tool{anchored = FALSE}) - cost = 150 - containertype = /obj/structure/largecrate - containername = "\improper Vending Machine" - -/decl/hierarchy/supply_pack/supply/coffeevendor - name = "Vendor - Coffee - Hot Drinks LCD" - contains = list(/obj/machinery/vending/coffee{anchored = FALSE}) - cost = 150 - containertype = /obj/structure/largecrate - containername = "\improper Vending Machine" - -/decl/hierarchy/supply_pack/supply/dinnerwarevendor - name = "Vendor - Dinnerwares - Plastic Tat Inc" - contains = list(/obj/machinery/vending/dinnerware{anchored = FALSE}) - cost = 150 - containertype = /obj/structure/largecrate - containername = "\improper Vending Machine" - -/decl/hierarchy/supply_pack/supply/bodavendor - name = "Vendor - BODA - Zakuson TCC" - contains = list(/obj/machinery/vending/sovietsoda{anchored = FALSE}) - cost = 250 - containertype = /obj/structure/largecrate - containername = "\improper Vending Machine" - -/decl/hierarchy/supply_pack/supply/weebvendor - name = "Vendor - Nippon-tan - ArigatoRobotics LCD" - contains = list(/obj/machinery/vending/weeb{anchored = FALSE}) - cost = 50 - containertype = /obj/structure/largecrate - containername = "\improper Vending Machine" diff --git a/code/datums/supplypacks/supplypack.dm b/code/datums/supplypacks/supplypack.dm deleted file mode 100644 index 905517b5d1d58..0000000000000 --- a/code/datums/supplypacks/supplypack.dm +++ /dev/null @@ -1,91 +0,0 @@ -/decl/hierarchy/supply_pack - name = "Supply Packs" - hierarchy_type = /decl/hierarchy/supply_pack - var/list/contains = list() - var/manifest = "" - var/cost = null - var/containertype = /obj/structure/closet/crate - var/containername = null - var/access = null - var/hidden = 0 - var/contraband = 0 - var/num_contained = 0 //number of items picked to be contained in a randomised crate - var/supply_method = /decl/supply_method - var/decl/security_level/security_level - -//Is run once on init for non-base-category supplypacks. -/decl/hierarchy/supply_pack/proc/setup() - if(!num_contained) - for(var/entry in contains) - num_contained += max(1, contains[entry]) - - var/decl/supply_method/sm = get_supply_method(supply_method) - manifest = sm.setup_manifest(src) - -/decl/hierarchy/supply_pack/proc/sec_available() - if(isnull(security_level)) - return TRUE - var/decl/security_state/security_state = decls_repository.get_decl(GLOB.using_map.security_state) - switch(security_level) - if(SUPPLY_SECURITY_ELEVATED) - if(security_state.all_security_levels.len > 1) - security_level = security_state.all_security_levels[2] - else - security_level = security_state.high_security_level - if(SUPPLY_SECURITY_HIGH) - security_level = security_state.high_security_level - if(!istype(security_level)) - return TRUE - return security_state.current_security_level_is_same_or_higher_than(security_level) - -/decl/hierarchy/supply_pack/proc/spawn_contents(var/location) - var/decl/supply_method/sm = get_supply_method(supply_method) - return sm.spawn_contents(src, location) - -/* -//SUPPLY PACKS -//NOTE: only secure crate types use the access var (and are lockable) -//NOTE: hidden packs only show up when the computer has been hacked. -//ANOTER NOTE: Contraband is obtainable through modified supplycomp circuitboards. -//BIG NOTE: Don't add living things to crates, that's bad, it will break the shuttle. -//NEW NOTE: Do NOT set the price of any crates below 7 points. Doing so allows infinite points. -*/ - -var/global/list/supply_methods_ -/proc/get_supply_method(var/method_type) - if(!supply_methods_) - supply_methods_ = list() - . = supply_methods_[method_type] - if(!.) - . = new method_type() - supply_methods_[method_type] = . - -/decl/supply_method/proc/spawn_contents(var/decl/hierarchy/supply_pack/sp, var/location) - if(!sp || !location) - return - . = list() - for(var/entry in sp.contains) - for(var/i = 1 to max(1, sp.contains[entry])) - dd_insertObjectList(.,new entry(location)) - -/decl/supply_method/proc/setup_manifest(var/decl/hierarchy/supply_pack/sp) - . = list() - . += "
        " - for(var/path in sp.contains) - var/atom/A = path - if(!ispath(A)) - continue - . += "
      • [initial(A.name)]
      • " - . += "
      " - . = jointext(.,null) - -/decl/supply_method/randomized/spawn_contents(var/decl/hierarchy/supply_pack/sp, var/location) - if(!sp || !location) - return - . = list() - for(var/j = 1 to sp.num_contained) - var/picked = pick(sp.contains) - . += new picked(location) - -/decl/supply_method/randomized/setup_manifest(var/decl/hierarchy/supply_pack/sp) - return "Contains any [sp.num_contained] of:" + ..() diff --git a/code/datums/trading/_trading_defines.dm b/code/datums/trading/_trading_defines.dm deleted file mode 100644 index 02e0ffd985afd..0000000000000 --- a/code/datums/trading/_trading_defines.dm +++ /dev/null @@ -1,34 +0,0 @@ -#define TRADER_THIS_TYPE 1 -#define TRADER_SUBTYPES_ONLY 2 -#define TRADER_ALL 3 -#define TRADER_BLACKLIST 4 -#define TRADER_BLACKLIST_SUB 8 -#define TRADER_BLACKLIST_ALL 12 - -#define TRADER_WANTED_ONLY 1 //Do they only trade for wanted goods? -#define TRADER_MONEY 2 //Do they only accept money in return for goods. -#define TRADER_GOODS 4 //Do they accept goods in return for other goods. -#define TRADER_WANTED_ALL 8 //Like TRADER_WANTED_ONLY but they buy all possible wanted goods rather than a subset. - -//Possible response defines for when offering an item for something -#define TRADER_NO_MONEY "trade_no_money" -#define TRADER_NO_GOODS "trade_no_goods" -#define TRADER_NOT_ENOUGH "trade_not_enough" -#define TRADER_NO_BLACKLISTED "trade_blacklist" -#define TRADER_FOUND_UNWANTED "trade_found_unwanted" -#define TRADER_TRADE_COMPLETE "trade_complete" -#define TRADER_BRIBE_FAILURE "trade_bribe_refusal" -#define TRADER_BRIBE_SUCCESS "trade_bribe_accept" -#define TRADER_HAIL_START "trade_hail_" -#define TRADER_HAIL_GENERIC "trade_hail_generic" -#define TRADER_HAIL_DENY "trade_hail_deny" -#define TRADER_HOW_MUCH "trade_how_much" -#define TRADER_WHAT_WANT "trade_what_want" -#define TRADER_COMPLEMENT_SUCCESS "trade_complement_accepted" -#define TRADER_COMPLEMENT_FAILURE "trade_complement_failure" -#define TRADER_INSULT_GOOD "trade_insult_good" -#define TRADER_INSULT_BAD "trade_insult_bad" - - - -#define TRADER_DEFAULT_NAME "Default" //Whether to just generate a name from the premade lists. \ No newline at end of file diff --git a/code/datums/trading/ai.dm b/code/datums/trading/ai.dm deleted file mode 100644 index aeca1eb05081a..0000000000000 --- a/code/datums/trading/ai.dm +++ /dev/null @@ -1,118 +0,0 @@ -/* - -TRADING BEACON - -Trading beacons are generic AI driven trading outposts. -They sell generic supplies and ask for generic supplies. -*/ - -/datum/trader/trading_beacon - name = "AI" - origin = "Trading Beacon" - name_language = LANGUAGE_EAL - trade_flags = TRADER_MONEY|TRADER_GOODS - speech = list(TRADER_HAIL_GENERIC = "Greetings, I am MERCHANT, Artifical Intelligence onboard ORIGIN, tasked with trading goods in return for CURRENCY and supplies.", - TRADER_HAIL_DENY = "We are sorry, your connection has been blacklisted. Have a nice day.", - - TRADER_TRADE_COMPLETE = "Thank you for your patronage.", - TRADER_NOT_ENOUGH = "I'm sorry, your offer is not worth what you are asking for.", - TRADER_NO_BLACKLISTED = "You have offered a blacklisted item. My laws do not allow me to trade for that.", - TRADER_HOW_MUCH = "ITEM will cost you roughly VALUE CURRENCY, or something of equal worth.", - TRADER_WHAT_WANT = "I have logged need for", - - TRADER_COMPLEMENT_FAILURE = "I'm sorry, I am not allowed to let compliments affect the trade.", - TRADER_COMPLEMENT_SUCCESS = "Thank you, but that will not not change our business interactions.", - TRADER_INSULT_GOOD = "I do not understand, are we not on good terms?", - TRADER_INSULT_BAD = "I do not understand, are you insulting me?", - - TRADER_BRIBE_FAILURE = "You have given me money to stay, however, I am a station. I do not leave.", - ) - possible_wanted_items = list(/obj/item/device/ = TRADER_SUBTYPES_ONLY, - /obj/item/device/assembly = TRADER_BLACKLIST_ALL, - /obj/item/device/assembly_holder = TRADER_BLACKLIST_ALL, - /obj/item/device/encryptionkey/syndicate = TRADER_BLACKLIST, - /obj/item/tank/phoron/onetankbomb = TRADER_BLACKLIST, - /obj/item/device/radio = TRADER_BLACKLIST_ALL, - /obj/item/modular_computer/pda = TRADER_BLACKLIST_SUB, - /obj/item/device/uplink = TRADER_BLACKLIST) - possible_trading_items = list(/obj/item/storage/bag = TRADER_SUBTYPES_ONLY, - /obj/item/storage/bag/cash/infinite = TRADER_BLACKLIST, - /obj/item/storage/backpack = TRADER_ALL, - /obj/item/storage/backpack/cultpack = TRADER_BLACKLIST, - /obj/item/storage/backpack/holding = TRADER_BLACKLIST, - /obj/item/storage/backpack/satchel/grey/withwallet = TRADER_BLACKLIST, - /obj/item/storage/backpack/satchel/syndie_kit = TRADER_BLACKLIST_ALL, - /obj/item/storage/backpack/chameleon = TRADER_BLACKLIST, - /obj/item/storage/backpack/ert = TRADER_BLACKLIST_ALL, - /obj/item/storage/backpack/dufflebag/syndie = TRADER_BLACKLIST_SUB, - /obj/item/storage/belt/champion = TRADER_THIS_TYPE, - /obj/item/storage/briefcase = TRADER_THIS_TYPE, - /obj/item/storage/fancy = TRADER_SUBTYPES_ONLY, - /obj/item/storage/laundry_basket = TRADER_THIS_TYPE, - /obj/item/storage/secure/briefcase = TRADER_THIS_TYPE, - /obj/item/storage/plants = TRADER_THIS_TYPE, - /obj/item/storage/ore = TRADER_THIS_TYPE, - /obj/item/storage/toolbox = TRADER_ALL, - /obj/item/storage/wallet = TRADER_THIS_TYPE, - /obj/item/storage/photo_album = TRADER_THIS_TYPE, - /obj/item/clothing/glasses = TRADER_SUBTYPES_ONLY, - /obj/item/clothing/glasses/hud = TRADER_BLACKLIST_ALL, - /obj/item/clothing/glasses/blindfold/tape = TRADER_BLACKLIST, - /obj/item/clothing/glasses/chameleon = TRADER_BLACKLIST - ) - - insult_drop = 0 - compliment_increase = 0 - -/datum/trader/trading_beacon/New() - ..() - origin = "[origin] #[rand(100,999)]" - -/datum/trader/trading_beacon/mine - origin = "Mining Beacon" - - possible_trading_items = list(/obj/item/ore = TRADER_SUBTYPES_ONLY, - /obj/item/stack/material/glass = TRADER_ALL, - /obj/item/stack/material/glass/fifty = TRADER_BLACKLIST, - /obj/item/stack/material/iron = TRADER_THIS_TYPE, - /obj/item/stack/material/sandstone = TRADER_THIS_TYPE, - /obj/item/stack/material/marble = TRADER_THIS_TYPE, - /obj/item/stack/material/diamond = TRADER_THIS_TYPE, - /obj/item/stack/material/uranium = TRADER_THIS_TYPE, - /obj/item/stack/material/phoron = TRADER_THIS_TYPE, - /obj/item/stack/material/plastic = TRADER_THIS_TYPE, - /obj/item/stack/material/gold = TRADER_THIS_TYPE, - /obj/item/stack/material/silver = TRADER_THIS_TYPE, - /obj/item/stack/material/platinum = TRADER_THIS_TYPE, - /obj/item/stack/material/mhydrogen = TRADER_THIS_TYPE, - /obj/item/stack/material/tritium = TRADER_THIS_TYPE, - /obj/item/stack/material/osmium = TRADER_THIS_TYPE, - /obj/item/stack/material/steel = TRADER_THIS_TYPE, - /obj/item/stack/material/plasteel = TRADER_THIS_TYPE, - /obj/machinery/mining = TRADER_SUBTYPES_ONLY - ) - -/datum/trader/trading_beacon/manufacturing - origin = "Manifacturing Beacon" - - possible_trading_items = list(/obj/structure/AIcore = TRADER_THIS_TYPE, - /obj/structure/girder = TRADER_THIS_TYPE, - /obj/structure/grille = TRADER_THIS_TYPE, - /obj/structure/mopbucket = TRADER_THIS_TYPE, - /obj/structure/ore_box = TRADER_THIS_TYPE, - /obj/structure/coatrack = TRADER_THIS_TYPE, - /obj/structure/bookcase = TRADER_THIS_TYPE, - /obj/item/bee_pack = TRADER_THIS_TYPE, - /obj/item/bee_smoker = TRADER_THIS_TYPE, - /obj/item/beehive_assembly = TRADER_THIS_TYPE, - /obj/item/glass_jar = TRADER_THIS_TYPE, - /obj/item/honey_frame = TRADER_THIS_TYPE, - /obj/structure/dispenser = TRADER_SUBTYPES_ONLY, - /obj/structure/filingcabinet = TRADER_THIS_TYPE, - /obj/structure/safe = TRADER_THIS_TYPE, - /obj/structure/plushie = TRADER_SUBTYPES_ONLY, - /obj/structure/sign = TRADER_SUBTYPES_ONLY, - /obj/structure/sign/double = TRADER_BLACKLIST_ALL, - /obj/structure/sign/goldenplaque = TRADER_BLACKLIST_ALL, - /obj/structure/sign/poster = TRADER_BLACKLIST - ) diff --git a/code/datums/trading/food.dm b/code/datums/trading/food.dm deleted file mode 100644 index 96c69567554de..0000000000000 --- a/code/datums/trading/food.dm +++ /dev/null @@ -1,167 +0,0 @@ -/datum/trader/pizzaria - name = "Pizza Shop Employee" - name_language = TRADER_DEFAULT_NAME - origin = "Pizzeria" - possible_origins = list("Papa Joe's", "Pizza Ship", "Dominator Pizza", "Little Kaezars", "Pizza Planet", "Cheese Louise", "Little Taste o' Neo-Italy", "Pizza Gestapo") - trade_flags = TRADER_MONEY - possible_wanted_items = list() //They are a pizza shop, not a bargainer. - possible_trading_items = list(/obj/item/reagent_containers/food/snacks/sliceable/pizza = TRADER_SUBTYPES_ONLY) - - speech = list(TRADER_HAIL_GENERIC = "Hello! Welcome to ORIGIN, may I take your order?", - TRADER_HAIL_DENY = "Beeeep... I'm sorry, your connection has been severed.", - - TRADER_TRADE_COMPLETE = "Thank you for choosing ORIGIN!", - TRADER_NO_GOODS = "I'm sorry but we only take cash.", - TRADER_NO_BLACKLISTED = "Sir that's... highly illegal.", - TRADER_NOT_ENOUGH = "Uhh... that's not enough money for pizza.", - TRADER_HOW_MUCH = "That pizza will cost you VALUE CURRENCY.", - - TRADER_COMPLEMENT_FAILURE = "That's a bit forward, don't you think?", - TRADER_COMPLEMENT_SUCCESS = "Thanks, sir! You're very nice!", - TRADER_INSULT_GOOD = "Please stop that, sir.", - TRADER_INSULT_BAD = "Sir, just because I'm contractually obligated to keep you on the line for a minute doesn't mean I have to take this.", - - TRADER_BRIBE_FAILURE = "Uh... thanks for the cash, sir. As long as you're in the area, we'll be here...", - ) - -/datum/trader/pizzaria/trade_quantity(quantity, list/offers, num, turf/location) - . = ..() - for (var/atom/movable/M in .) - var/obj/item/pizzabox/box = new(location) - M.forceMove(box) - box.pizza = M - box.boxtag = "A special order from [origin]" - -/datum/trader/ship/chinese - name = "Chinese Restaurant" - name_language = TRADER_DEFAULT_NAME - origin = "Captain Panda Bistro" - possible_origins = list("888 Shanghai Kitchen", "Mr. Lee's Greater Hong Kong", "The House of the Venerable and Inscrutable Colonel", "Lucky Dragon") - trade_flags = TRADER_MONEY - possible_wanted_items = list() - possible_trading_items = list(/obj/item/reagent_containers/food/snacks/meatkabob = TRADER_THIS_TYPE, - /obj/item/reagent_containers/food/snacks/monkeysdelight = TRADER_THIS_TYPE, - /obj/item/reagent_containers/food/snacks/ricepudding = TRADER_THIS_TYPE, - /obj/item/reagent_containers/food/snacks/slice/xenomeatbread/filled = TRADER_THIS_TYPE, - /obj/item/reagent_containers/food/snacks/soydope = TRADER_THIS_TYPE, - /obj/item/reagent_containers/food/snacks/stewedsoymeat = TRADER_THIS_TYPE, - /obj/item/reagent_containers/food/drinks/dry_ramen = TRADER_THIS_TYPE - ) - - var/list/fortunes = list("Today it's up to you to create the peacefulness you long for.", - "If you refuse to accept anything but the best, you very often get it.", - "A smile is your passport into the hearts of others.", - "Hard work pays off in the future, laziness pays off now.", - "Change can hurt, but it leads a path to something better.", - "Hidden in a valley beside an open stream- This will be the type of place where you will find your dream.", - "Never give up. You're not a failure if you don't give up.", - "Love can last a lifetime, if you want it to.", - "The love of your life is stepping into your planet this summer.", - "Your ability for accomplishment will follow with success.", - "Please help me, I'm trapped in a fortune cookie factory!") - - speech = list(TRADER_HAIL_GENERIC = "There are two things constant in life, death and Chinese food. How may I help you?", - TRADER_HAIL_DENY = "We do not take orders from rude customers.", - - TRADER_TRADE_COMPLETE = "Thank you, sir, for your patronage.", - TRADER_NO_BLACKLISTED = "No, that is very odd. Why would you trade that away?", - TRADER_NO_GOODS = "I only accept money transfers.", - TRADER_NOT_ENOUGH = "No, I am sorry, that is not possible. I need to make a living.", - TRADER_HOW_MUCH = "I give you ITEM, for VALUE CURRENCY. No more, no less.", - - TRADER_COMPLEMENT_FAILURE = "That was an odd thing to say. You are very odd.", - TRADER_COMPLEMENT_SUCCESS = "Good philosophy, see good in bad, I like.", - TRADER_INSULT_GOOD = "As a man said long ago, \"When anger rises, think of the consequences.\" Think on that.", - TRADER_INSULT_BAD = "I do not need to take this from you.", - - TRADER_BRIBE_FAILURE = "Hm... I'll think about it.", - TRADER_BRIBE_SUCCESS = "Oh yes! I think I'll stay a few more minutes, then.", - ) - -/datum/trader/ship/chinese/trade_quantity(quantity, list/offers, num, turf/location) - . = ..() - quantity = 1 - if(.) - var/obj/item/reagent_containers/food/snacks/fortunecookie/cookie = new(location) - var/obj/item/paper/paper = new(cookie) - cookie.trash = paper - paper.SetName("Fortune") - paper.info = pick(fortunes) - -/datum/trader/grocery - name = "Grocer" - name_language = TRADER_DEFAULT_NAME - possible_origins = list("HyTee", "Kreugars", "Spaceway", "Privaxs", "FutureValue", "Phyvendyme", "Skreller's Market") - trade_flags = TRADER_MONEY - - possible_trading_items = list(/obj/item/reagent_containers/food/snacks = TRADER_SUBTYPES_ONLY, - /obj/item/reagent_containers/food/drinks/cans = TRADER_SUBTYPES_ONLY, - /obj/item/reagent_containers/food/drinks/bottle = TRADER_SUBTYPES_ONLY, - /obj/item/reagent_containers/food/drinks/bottle/small = TRADER_BLACKLIST, - /obj/item/reagent_containers/food/snacks/boiledslimecore = TRADER_BLACKLIST, - /obj/item/reagent_containers/food/snacks/checker = TRADER_BLACKLIST_ALL, - /obj/item/reagent_containers/food/snacks/fruit_slice = TRADER_BLACKLIST, - /obj/item/reagent_containers/food/snacks/slice = TRADER_BLACKLIST_ALL, - /obj/item/reagent_containers/food/snacks/grown = TRADER_BLACKLIST_ALL, - /obj/item/reagent_containers/food/snacks/human = TRADER_BLACKLIST_ALL, - /obj/item/reagent_containers/food/snacks/sliceable/braincake = TRADER_BLACKLIST, - /obj/item/reagent_containers/food/snacks/meat/human = TRADER_BLACKLIST, - /obj/item/reagent_containers/food/snacks/variable = TRADER_BLACKLIST_ALL - ) - - speech = list(TRADER_HAIL_GENERIC = "Hello, welcome to ORIGIN, grocery store of the future!", - TRADER_HAIL_DENY = "I'm sorry, we've blacklisted your communications due to rude behavior.", - - TRADER_TRADE_COMPLETE = "Thank you for shopping at ORIGIN!", - TRADER_NO_BLACKLISTED = "I... wow, that's... no, sir. No.", - TRADER_NO_GOODS = "ORIGIN only accepts cash, sir.", - TRADER_NOT_ENOUGH = "That is not enough money, sir.", - TRADER_HOW_MUCH = "Sir, that'll cost you VALUE CURRENCY. Will that be all?", - - TRADER_COMPLEMENT_FAILURE = "Sir, this is a professional environment. Please don't make me get my manager.", - TRADER_COMPLEMENT_SUCCESS = "Thank you, sir!", - TRADER_INSULT_GOOD = "Sir, please do not make a scene.", - TRADER_INSULT_BAD = "Sir, I WILL get my manager if you don't calm down.", - - TRADER_BRIBE_FAILURE = "Of course sir! ORIGIN is always here for you!", - ) - -/datum/trader/bakery - name = "Pastry Chef" - name_language = TRADER_DEFAULT_NAME - origin = "Bakery" - possible_origins = list("Cakes By Design", "Corner Bakery Local", "My Favorite Cake & Pastry Cafe", "Mama Joes Bakery", "Sprinkles and Fun", "Cakestrosity") - - speech = list(TRADER_HAIL_GENERIC = "Hello, welcome to ORIGIN! We serve baked goods, including pies, cakes, and anything sweet!", - TRADER_HAIL_DENY = "Our food is a privilege, not a right. Goodbye.", - - TRADER_TRADE_COMPLETE = "Thank you for your purchase! Come again if you're hungry for more!", - TRADER_NO_BLACKLISTED = "We only accept money. Not... that.", - TRADER_NO_GOODS = "Cash for cakes! That's our business!", - TRADER_NOT_ENOUGH = "Our dishes are much more expensive than that, sir.", - TRADER_HOW_MUCH = "That lovely dish will cost you VALUE CURRENCY.", - - TRADER_COMPLEMENT_FAILURE = "Oh wow, how nice of you...", - TRADER_COMPLEMENT_SUCCESS = "You're almost as sweet as my pies!", - TRADER_INSULT_GOOD = "My pies are NOT knockoffs!", - TRADER_INSULT_BAD = "Well, aren't you a sour apple?", - - TRADER_BRIBE_FAILURE = "Oh ho ho! I'd never think of taking ORIGIN on the road!", - ) - possible_trading_items = list(/obj/item/reagent_containers/food/snacks/slice/birthdaycake/filled = TRADER_THIS_TYPE, - /obj/item/reagent_containers/food/snacks/slice/carrotcake/filled = TRADER_THIS_TYPE, - /obj/item/reagent_containers/food/snacks/slice/cheesecake/filled = TRADER_THIS_TYPE, - /obj/item/reagent_containers/food/snacks/slice/chocolatecake/filled = TRADER_THIS_TYPE, - /obj/item/reagent_containers/food/snacks/slice/lemoncake/filled = TRADER_THIS_TYPE, - /obj/item/reagent_containers/food/snacks/slice/limecake/filled = TRADER_THIS_TYPE, - /obj/item/reagent_containers/food/snacks/slice/orangecake/filled = TRADER_THIS_TYPE, - /obj/item/reagent_containers/food/snacks/slice/plaincake/filled = TRADER_THIS_TYPE, - /obj/item/reagent_containers/food/snacks/slice/pumpkinpie/filled = TRADER_THIS_TYPE, - /obj/item/reagent_containers/food/snacks/slice/bananabread/filled = TRADER_THIS_TYPE, - /obj/item/reagent_containers/food/snacks/sliceable = TRADER_SUBTYPES_ONLY, - /obj/item/reagent_containers/food/snacks/sliceable/pizza = TRADER_BLACKLIST_ALL, - /obj/item/reagent_containers/food/snacks/sliceable/xenomeatbread = TRADER_BLACKLIST, - /obj/item/reagent_containers/food/snacks/sliceable/flatdough = TRADER_BLACKLIST, - /obj/item/reagent_containers/food/snacks/sliceable/braincake = TRADER_BLACKLIST, - /obj/item/reagent_containers/food/snacks/pie = TRADER_THIS_TYPE, - /obj/item/reagent_containers/food/snacks/applepie = TRADER_THIS_TYPE) diff --git a/code/datums/trading/goods.dm b/code/datums/trading/goods.dm deleted file mode 100644 index 2c86c81f8ef27..0000000000000 --- a/code/datums/trading/goods.dm +++ /dev/null @@ -1,407 +0,0 @@ -/datum/trader/ship/toyshop - name = "Toy Shop Employee" - name_language = TRADER_DEFAULT_NAME - origin = "Toy Shop" - trade_flags = TRADER_GOODS|TRADER_MONEY|TRADER_WANTED_ONLY - possible_origins = list("Toys R Ours", "LEGS GO", "Kay-Cee Toys", "Build-a-Cat", "Magic Box", "The Positronic's Dungeon and Baseball Card Shop") - speech = list(TRADER_HAIL_GENERIC = "Uhh... hello? Welcome to ORIGIN, I hope you have a, uhh.... good shopping trip.", - TRADER_HAIL_DENY = "Nah, you're not allowed here. At all", - - TRADER_TRADE_COMPLETE = "Thanks for shopping... here... at ORIGIN.", - TRADER_NO_BLACKLISTED = "Uuuhhh.... no.", - TRADER_FOUND_UNWANTED = "Nah! That's not what I'm looking for. Something rarer.", - TRADER_NOT_ENOUGH = "Just 'cause they're made of cardboard doesn't mean they don't cost money...", - TRADER_HOW_MUCH = "Uhh... I'm thinking like... VALUE. Right? Or something rare that complements my interest.", - TRADER_WHAT_WANT = "Ummmm..... I guess I want", - - TRADER_COMPLEMENT_FAILURE = "Ha! Very funny! You should write your own television show.", - TRADER_COMPLEMENT_SUCCESS = "Why yes, I do work out.", - TRADER_INSULT_GOOD = "Well, well, well. Guess we learned who was the troll here.", - TRADER_INSULT_BAD = "I've already written a nasty Spacebook post in my mind about you.", - - TRADER_BRIBE_FAILURE = "Nah. I need to get moving as soon as uhh... possible.", - TRADER_BRIBE_SUCCESS = "You know what, I wasn't doing anything for TIME minutes anyways.", - ) - - possible_wanted_items = list(/obj/item/toy/figure = TRADER_THIS_TYPE, - /obj/item/toy/figure/ert = TRADER_THIS_TYPE, - /obj/item/toy/prize/honk = TRADER_THIS_TYPE) - - possible_trading_items = list(/obj/item/toy/prize = TRADER_SUBTYPES_ONLY, - /obj/item/toy/prize/honk = TRADER_BLACKLIST, - /obj/item/toy/figure = TRADER_SUBTYPES_ONLY, - /obj/item/toy/figure/ert = TRADER_BLACKLIST, - /obj/item/toy/plushie = TRADER_SUBTYPES_ONLY, - /obj/item/toy/katana = TRADER_THIS_TYPE, - /obj/item/toy/sword = TRADER_THIS_TYPE, - /obj/item/toy/bosunwhistle = TRADER_THIS_TYPE, - /obj/item/board = TRADER_THIS_TYPE, - /obj/item/storage/box/checkers = TRADER_ALL, - /obj/item/deck = TRADER_SUBTYPES_ONLY, - /obj/item/pack = TRADER_SUBTYPES_ONLY, - /obj/item/dice = TRADER_ALL, - /obj/item/dice/d20/cursed = TRADER_BLACKLIST, - /obj/item/gun/launcher/money = TRADER_THIS_TYPE) - -/datum/trader/ship/electronics - name = "Electronic Shop Employee" - name_language = TRADER_DEFAULT_NAME - origin = "Electronic Shop" - possible_origins = list("Best Sale", "Overstore", "Oldegg", "Circuit Citadel", "Silicon Village", "Positronic Solutions LLC", "Sunvolt Inc.") - - speech = list(TRADER_HAIL_GENERIC = "Hello, sir! Welcome to ORIGIN, I hope you find what you are looking for.", - TRADER_HAIL_DENY = "Your call has been disconnected.", - - TRADER_TRADE_COMPLETE = "Thank you for shopping at ORIGIN, would you like to get the extended warranty as well?", - TRADER_NO_BLACKLISTED = "Sir, this is a /electronics/ store.", - TRADER_NO_GOODS = "As much as I'd love to buy that from you, I can't.", - TRADER_NOT_ENOUGH = "Your offer isn't adequate, sir.", - TRADER_HOW_MUCH = "Your total comes out to VALUE CURRENCY.", - - TRADER_COMPLEMENT_FAILURE = "Hahaha! Yeah... funny...", - TRADER_COMPLEMENT_SUCCESS = "That's very nice of you!", - TRADER_INSULT_GOOD = "That was uncalled for, sir. Don't make me get my manager.", - TRADER_INSULT_BAD = "Sir, I am allowed to hang up the phone if you continue, sir.", - - TRADER_BRIBE_FAILURE = "Sorry, sir, but I can't really do that.", - TRADER_BRIBE_SUCCESS = "Why not! Glad to be here for a few more minutes.", - ) - - possible_trading_items = list(/obj/item/stock_parts/computer/battery_module = TRADER_SUBTYPES_ONLY, - /obj/item/stock_parts/circuitboard = TRADER_SUBTYPES_ONLY, - /obj/item/stock_parts/circuitboard/telecomms = TRADER_BLACKLIST, - /obj/item/stock_parts/circuitboard/unary_atmos = TRADER_BLACKLIST, - /obj/item/stock_parts/circuitboard/arcade = TRADER_BLACKLIST, - /obj/item/stock_parts/circuitboard/broken = TRADER_BLACKLIST, - /obj/item/stack/cable_coil = TRADER_SUBTYPES_ONLY, - /obj/item/stack/cable_coil/cyborg = TRADER_BLACKLIST, - /obj/item/stack/cable_coil/random = TRADER_BLACKLIST, - /obj/item/stack/cable_coil/cut = TRADER_BLACKLIST, - /obj/item/airalarm_electronics = TRADER_THIS_TYPE, - /obj/item/airlock_electronics = TRADER_ALL, - /obj/item/cell/standard = TRADER_THIS_TYPE, - /obj/item/cell/crap = TRADER_THIS_TYPE, - /obj/item/cell/high = TRADER_THIS_TYPE, - /obj/item/cell/super = TRADER_THIS_TYPE, - /obj/item/cell/hyper = TRADER_THIS_TYPE, - /obj/item/module = TRADER_SUBTYPES_ONLY, - /obj/item/tracker_electronics = TRADER_THIS_TYPE) - - -/* Clothing stores: each a different type. A hat/glove store, a shoe store, and a jumpsuit store. */ - -/datum/trader/ship/clothingshop - name = "Clothing Store Employee" - name_language = TRADER_DEFAULT_NAME - origin = "Clothing Store" - possible_origins = list("Space Eagle", "Banana Democracy", "Forever 22", "Textiles Factory Warehouse Outlet", "Blocks Brothers") - speech = list(TRADER_HAIL_GENERIC = "Hello, sir! Welcome to ORIGIN!", - TRADER_HAIL_DENY = "We do not trade with rude customers. Consider yourself blacklisted.", - - TRADER_TRADE_COMPLETE = "Thank you for shopping at ORIGIN. Remember: We cannot accept returns without the original tags!", - TRADER_NO_BLACKLISTED = "Hm, how about no?", - TRADER_NO_GOODS = "We don't buy, sir. Only sell.", - TRADER_NOT_ENOUGH = "Sorry, ORIGIN policy to not accept trades below our marked prices.", - TRADER_HOW_MUCH = "Your total comes out to VALUE CURRENCY.", - - TRADER_COMPLEMENT_FAILURE = "Excuse me?", - TRADER_COMPLEMENT_SUCCESS = "Aw, you're so nice!", - TRADER_INSULT_GOOD = "Sir.", - TRADER_INSULT_BAD = "Wow. I don't have to take this.", - - TRADER_BRIBE_FAILURE = "ORIGIN policy clearly states we cannot stay for more than the designated time.", - TRADER_BRIBE_SUCCESS = "Hm.... sure! We'll have a few minutes of 'engine troubles'.", - ) - - possible_trading_items = list(/obj/item/clothing/under = TRADER_SUBTYPES_ONLY, - /obj/item/clothing/under/acj = TRADER_BLACKLIST, - /obj/item/clothing/under/chameleon = TRADER_BLACKLIST, - /obj/item/clothing/under/cloud = TRADER_BLACKLIST, - /obj/item/clothing/under/color = TRADER_BLACKLIST, - /obj/item/clothing/under/dress = TRADER_BLACKLIST, - /obj/item/clothing/under/ert = TRADER_BLACKLIST, - /obj/item/clothing/under/gimmick = TRADER_BLACKLIST_ALL, - /obj/item/clothing/under/lawyer = TRADER_BLACKLIST, - /obj/item/clothing/under/pj = TRADER_BLACKLIST, - /obj/item/clothing/under/rank = TRADER_BLACKLIST, - /obj/item/clothing/under/shorts = TRADER_BLACKLIST, - /obj/item/clothing/under/stripper = TRADER_BLACKLIST_ALL, - /obj/item/clothing/under/swimsuit = TRADER_BLACKLIST, - /obj/item/clothing/under/syndicate = TRADER_BLACKLIST_ALL, - /obj/item/clothing/under/tactical = TRADER_BLACKLIST, - /obj/item/clothing/under/vox = TRADER_BLACKLIST_ALL, - /obj/item/clothing/under/wedding = TRADER_BLACKLIST, - /obj/item/clothing/under/punpun = TRADER_BLACKLIST) - - -/datum/trader/ship/clothingshop/New() - ..() - speech[TRADER_HAIL_START + SPECIES_VOX] = "Well hello, sir! I don't believe we have any clothes that fit you... but you can still look!" - -/datum/trader/ship/clothingshop/shoes - possible_origins = list("Foot Safe", "Paysmall", "Popular Footwear", "Grimbly's Shoes", "Right Steps") - possible_trading_items = list(/obj/item/clothing/shoes = TRADER_SUBTYPES_ONLY, - /obj/item/clothing/shoes/chameleon = TRADER_BLACKLIST, - /obj/item/clothing/shoes/combat = TRADER_BLACKLIST, - /obj/item/clothing/shoes/clown_shoes = TRADER_BLACKLIST, - /obj/item/clothing/shoes/cult = TRADER_BLACKLIST, - /obj/item/clothing/shoes/cyborg = TRADER_BLACKLIST, - /obj/item/clothing/shoes/lightrig = TRADER_BLACKLIST_ALL, - /obj/item/clothing/shoes/magboots = TRADER_BLACKLIST_ALL, - /obj/item/clothing/shoes/swat = TRADER_BLACKLIST, - /obj/item/clothing/shoes/syndigaloshes = TRADER_BLACKLIST) - -/datum/trader/ship/clothingshop/hatglovesaccessories - possible_origins = list("Baldie's Hats and Accessories", "The Right Fit", "Like a Glove", "Space Fashion") - possible_trading_items = list(/obj/item/clothing/accessory = TRADER_ALL, - /obj/item/clothing/accessory/badge = TRADER_BLACKLIST_ALL, - /obj/item/clothing/accessory/storage/holster = TRADER_BLACKLIST_ALL, - /obj/item/clothing/accessory/medal = TRADER_BLACKLIST_ALL, - /obj/item/clothing/accessory/storage = TRADER_BLACKLIST_ALL, - /obj/item/clothing/gloves = TRADER_SUBTYPES_ONLY, - /obj/item/clothing/gloves/lightrig = TRADER_BLACKLIST_ALL, - /obj/item/clothing/gloves/rig = TRADER_BLACKLIST_ALL, - /obj/item/clothing/gloves/thick/swat = TRADER_BLACKLIST, - /obj/item/clothing/gloves/chameleon = TRADER_BLACKLIST, - /obj/item/clothing/head = TRADER_SUBTYPES_ONLY, - /obj/item/clothing/head/HoS = TRADER_BLACKLIST_ALL, - /obj/item/clothing/head/beret/centcom = TRADER_BLACKLIST_ALL, - /obj/item/clothing/head/bio_hood = TRADER_BLACKLIST_ALL, - /obj/item/clothing/head/bomb_hood = TRADER_BLACKLIST_ALL, - /obj/item/clothing/head/caphat = TRADER_BLACKLIST_ALL, - /obj/item/clothing/head/centhat = TRADER_BLACKLIST, - /obj/item/clothing/head/chameleon = TRADER_BLACKLIST, - /obj/item/clothing/head/collectable = TRADER_BLACKLIST, - /obj/item/clothing/head/culthood = TRADER_BLACKLIST_ALL, - /obj/item/clothing/head/helmet = TRADER_BLACKLIST_ALL, - /obj/item/clothing/head/lightrig = TRADER_BLACKLIST_ALL, - /obj/item/clothing/head/radiation = TRADER_BLACKLIST, - /obj/item/clothing/head/warden = TRADER_BLACKLIST, - /obj/item/clothing/head/welding = TRADER_BLACKLIST) - - - -/* -Sells devices, odds and ends, and medical stuff -*/ -/datum/trader/devices - name = "Drugstore Employee" - name_language = TRADER_DEFAULT_NAME - origin = "Drugstore" - possible_origins = list("Buy 'n Save", "Drug Carnival", "C&B", "Fentles", "Dr. Goods", "Beevees", "McGillicuddy's") - possible_trading_items = list(/obj/item/device/flashlight = TRADER_ALL, - /obj/item/device/kit/paint = TRADER_SUBTYPES_ONLY, - /obj/item/aicard = TRADER_THIS_TYPE, - /obj/item/device/binoculars = TRADER_THIS_TYPE, - /obj/item/device/cable_painter = TRADER_THIS_TYPE, - /obj/item/device/flash = TRADER_THIS_TYPE, - /obj/item/device/paint_sprayer = TRADER_THIS_TYPE, - /obj/item/device/multitool = TRADER_THIS_TYPE, - /obj/item/device/lightreplacer = TRADER_THIS_TYPE, - /obj/item/device/megaphone = TRADER_THIS_TYPE, - /obj/item/device/paicard = TRADER_THIS_TYPE, - /obj/item/device/scanner/health = TRADER_THIS_TYPE, - /obj/item/device/scanner/gas = TRADER_ALL, - /obj/item/device/scanner/spectrometer = TRADER_ALL, - /obj/item/device/scanner/reagent = TRADER_ALL, - /obj/item/device/scanner/xenobio = TRADER_THIS_TYPE, - /obj/item/device/suit_cooling_unit = TRADER_THIS_TYPE, - /obj/item/device/t_scanner = TRADER_THIS_TYPE, - /obj/item/device/taperecorder = TRADER_THIS_TYPE, - /obj/item/device/batterer = TRADER_THIS_TYPE, - /obj/item/device/synthesized_instrument/violin = TRADER_THIS_TYPE, - /obj/item/device/hailer = TRADER_THIS_TYPE, - /obj/item/device/uv_light = TRADER_THIS_TYPE, - /obj/item/device/mmi = TRADER_ALL, - /obj/item/device/robotanalyzer = TRADER_THIS_TYPE, - /obj/item/device/toner = TRADER_THIS_TYPE, - /obj/item/device/camera_film = TRADER_THIS_TYPE, - /obj/item/device/camera = TRADER_THIS_TYPE, - /obj/item/device/destTagger = TRADER_THIS_TYPE, - /obj/item/device/gps = TRADER_THIS_TYPE, - /obj/item/device/measuring_tape = TRADER_THIS_TYPE, - /obj/item/device/ano_scanner = TRADER_THIS_TYPE, - /obj/item/device/core_sampler = TRADER_THIS_TYPE, - /obj/item/device/depth_scanner = TRADER_THIS_TYPE, - /obj/item/pinpointer/radio = TRADER_THIS_TYPE, - /obj/item/stack/medical/advanced = TRADER_BLACKLIST) - speech = list(TRADER_HAIL_GENERIC = "Hello, hello! Bits and bobs and everything in between, I hope you find what you're looking for!", - TRADER_HAIL_DENY = "Oh no. I don't want to deal with YOU.", - - TRADER_TRADE_COMPLETE = "Thank you! Now remember, there isn't any return policy here, so be careful with that!", - TRADER_NO_BLACKLISTED = "Hm. Well that would be illegal, so no.", - TRADER_NO_GOODS = "I'm sorry, I only sell goods.", - TRADER_NOT_ENOUGH = "Gotta pay more than that to get that!", - TRADER_HOW_MUCH = "Well... I bought it for a lot, but I'll give it to you for VALUE.", - - TRADER_COMPLEMENT_FAILURE = "Uh... did you say something?", - TRADER_COMPLEMENT_SUCCESS = "Mhm! I can agree to that!", - TRADER_INSULT_GOOD = "Wow, where was that coming from?", - TRADER_INSULT_BAD = "Don't make me blacklist your connection.", - - TRADER_BRIBE_FAILURE = "Well, as much as I'd love to say 'yes', you realize I operate on a station, correct?", - ) - - -/datum/trader/devices/New() - ..() - speech[TRADER_HAIL_START + "silicon"] = "Ah! Hello, robot. We only sell things that, ah.... people can hold in their hands, unfortunately. You are still allowed to buy, though!" - -/datum/trader/ship/robots - name = "Robot Seller" - name_language = TRADER_DEFAULT_NAME - origin = "Robot Store" - possible_origins = list("AI for the Straight Guy", "Mechanical Buddies", "Bot Chop Shop", "Omni Consumer Projects") - possible_trading_items = list( - /obj/item/device/bot_kit = TRADER_THIS_TYPE, - /obj/item/device/paicard = TRADER_THIS_TYPE, - /obj/item/aicard = TRADER_THIS_TYPE, - /mob/living/bot = TRADER_SUBTYPES_ONLY) - speech = list(TRADER_HAIL_GENERIC = "Welcome to ORIGIN! Let me walk you through our fine robotic selection!", - TRADER_HAIL_DENY = "ORIGIN no longer wants to speak to you.", - - TRADER_TRADE_COMPLETE = "I hope you enjoy your new robot!", - TRADER_NO_BLACKLISTED= "I work with robots, sir. Not that.", - TRADER_NO_GOODS = "You gotta buy the robots, sir. I don't do trades.", - TRADER_NOT_ENOUGH = "You're coming up short on cash.", - TRADER_HOW_MUCH = "My fine selection of robots will cost you VALUE!", - - TRADER_COMPLEMENT_FAILURE= "Well, I almost believed that.", - TRADER_COMPLEMENT_SUCCESS= "Thank you! My craftsmanship is my life.", - TRADER_INSULT_GOOD = "Uncalled for.... uncalled for.", - TRADER_INSULT_BAD = "I've programmed AI better at insulting than you!", - - TRADER_BRIBE_FAILURE = "I've got too many customers waiting in other sectors, sorry.", - TRADER_BRIBE_SUCCESS = "Hm. Don't keep me waiting too long, though.", - ) - -/datum/trader/ship/robots/New() - ..() - speech[TRADER_HAIL_START + "silicon"] = "Welcome to ORIGIN! Let- oh, you're a synth! Well, your money is good anyway. Welcome, welcome!" - -/datum/trader/xeno_shop - name = "Xenolife Collector" - origin = "CSV Not a Poacher" - trade_flags = TRADER_GOODS|TRADER_MONEY|TRADER_WANTED_ONLY|TRADER_WANTED_ALL - possible_origins = list("XenoHugs", "Xynergy Specimen Acquisition", "Skinner Catering Reseller", "NanoTrasen Companionship Division", "Lonely Pete's Exotic Companionship","Space Wei's Exotic Cuisine") - speech = list(TRADER_HAIL_GENERIC = "Welcome! We are always looking to acquire more exotic life forms.", - TRADER_HAIL_DENY = "We no longer wish to speak to you. Please contact our legal representative if you wish to rectify this.", - - TRADER_TRADE_COMPLETE = "Remember to give them attention and food. They are living beings, and you should treat them like so.", - TRADER_NO_BLACKLISTED = "Legally I can't do that. Morally... well, I refuse to do that.", - TRADER_FOUND_UNWANTED = "I only want animals. I don't need food or shiny things. I'm looking for specific ones, at that. Ones I already have the cage and food for.", - TRADER_NOT_ENOUGH = "I'd give you this for free, but I need the money to feed the specimens. So you must pay in full.", - TRADER_HOW_MUCH = "This is a good choice. I believe it will cost you VALUE CURRENCY.", - TRADER_WHAT_WANT = "I have the facilities, currently, to support", - - TRADER_COMPLEMENT_FAILURE = "According to customs on 34 planets I traded with, this constitutes sexual harrasment.", - TRADER_COMPLEMENT_SUCCESS = "Thank you. I needed that.", - TRADER_INSULT_GOOD = "No need to be upset, I believe we can do business.", - TRADER_INSULT_BAD = "I have traded dogs with more bark than that.", - ) - - possible_wanted_items = list(/mob/living/simple_animal/tindalos = TRADER_THIS_TYPE, - /mob/living/simple_animal/passive/tomato = TRADER_THIS_TYPE, - /mob/living/simple_animal/yithian = TRADER_THIS_TYPE, - /mob/living/simple_animal/hostile/retaliate/beast/diyaab = TRADER_THIS_TYPE, - /mob/living/simple_animal/hostile/retaliate/beast/shantak= TRADER_THIS_TYPE, - /mob/living/simple_animal/hostile/retaliate/beast/samak= TRADER_THIS_TYPE, - /mob/living/simple_animal/hostile/carp = TRADER_THIS_TYPE) - - possible_trading_items = list(/mob/living/simple_animal/hostile/carp= TRADER_THIS_TYPE, - /obj/item/device/dociler = TRADER_THIS_TYPE, - /obj/item/beartrap = TRADER_THIS_TYPE, - /obj/item/device/scanner/xenobio = TRADER_THIS_TYPE) - -/datum/trader/medical - name = "Medical Supplier" - origin = "Infirmary of CSV Iniquity" - trade_flags = TRADER_GOODS|TRADER_MONEY|TRADER_WANTED_ONLY - want_multiplier = 1.2 - margin = 2 - possible_origins = list("Dr.Krieger's Practice", "Legit Medical Supplies (No Refund)", "Mom's & Pop's Addictive Opoids", "Legitimate Pharmaceutical Firm", "Designer Drugs by Lil Xanny") - speech = list(TRADER_HAIL_GENERIC = "Huh? How'd you get this number?! Oh well, if you wanna talk biz, I'm listening.", - TRADER_HAIL_DENY = "This is an automated message. Feel free to fuck the right off after the buzzer. *buzz*", - - TRADER_TRADE_COMPLETE = "Good to have business with ya. Remember, no refunds.", - TRADER_NO_BLACKLISTED = "Whoa whoa, I don't want this shit, put it away.", - TRADER_FOUND_UNWANTED = "What the hell do you expect me to do with this junk?", - TRADER_NOT_ENOUGH = "Sorry, pal, full payment upfront, I don't write the rules. Well, I do, but that's beside the point.", - TRADER_HOW_MUCH = "Hmm, this is one damn fine item, but I'll part with it for VALUE CURRENCY.", - TRADER_WHAT_WANT = "I could always use some fucking", - - TRADER_COMPLEMENT_FAILURE = "Haha, how nice of you. Why don't you go fall in an elevator shaft.", - TRADER_COMPLEMENT_SUCCESS = "Damn right I'm awesome, tell me more.", - TRADER_INSULT_GOOD = "Damn, pal, no need to get snippy.", - TRADER_INSULT_BAD = "*muffled laughter* Sorry, was that you trying to talk shit? Adorable.", - ) - - possible_wanted_items = list(/obj/item/reagent_containers/food/drinks/bottle = TRADER_THIS_TYPE, - /obj/item/organ/internal/liver = TRADER_THIS_TYPE, - /obj/item/organ/internal/kidneys = TRADER_THIS_TYPE, - /obj/item/organ/internal/lungs = TRADER_THIS_TYPE, - /obj/item/organ/internal/heart = TRADER_THIS_TYPE, - /obj/item/storage/fancy/cigarettes = TRADER_ALL - ) - - possible_trading_items = list(/obj/item/storage/pill_bottle = TRADER_SUBTYPES_ONLY, - /obj/item/storage/firstaid/fire = TRADER_THIS_TYPE, - /obj/item/storage/firstaid/toxin = TRADER_THIS_TYPE, - /obj/item/storage/firstaid/adv = TRADER_THIS_TYPE, - /obj/item/storage/box/bloodpacks = TRADER_THIS_TYPE, - /obj/item/reagent_containers/ivbag = TRADER_SUBTYPES_ONLY, - /obj/item/retractor = TRADER_THIS_TYPE, - /obj/item/hemostat = TRADER_THIS_TYPE, - /obj/item/cautery = TRADER_THIS_TYPE, - /obj/item/surgicaldrill = TRADER_THIS_TYPE, - /obj/item/scalpel = TRADER_THIS_TYPE, - /obj/item/scalpel/manager = TRADER_THIS_TYPE, - /obj/item/circular_saw = TRADER_THIS_TYPE, - /obj/item/bonegel = TRADER_THIS_TYPE, - /obj/item/bonesetter = TRADER_THIS_TYPE, - /obj/item/reagent_containers/glass/bottle/inaprovaline = TRADER_THIS_TYPE, - /obj/item/reagent_containers/glass/bottle/stoxin = TRADER_THIS_TYPE, - /obj/item/reagent_containers/glass/bottle/antitoxin = TRADER_THIS_TYPE, - /obj/item/reagent_containers/glass/bottle/inaprovaline = TRADER_THIS_TYPE, - /obj/item/bodybag/cryobag = TRADER_THIS_TYPE, - /obj/item/reagent_containers/chem_disp_cartridge/small/dexalin = TRADER_THIS_TYPE, - /obj/item/sign/medipolma = TRADER_THIS_TYPE - ) - -/datum/trader/mining - name = "Rock'n'Drill Mining Inc" - origin = "Automated Smelter AH-532" - trade_flags = TRADER_GOODS|TRADER_MONEY|TRADER_WANTED_ONLY|TRADER_WANTED_ALL - want_multiplier = 1.5 - margin = 2 - possible_origins = list("Automated Smelter AH-532", "CMV Locust", "The Galactic Foundry Company", "Crucible LLC") - speech = list(TRADER_HAIL_GENERIC = "Welcome to R'n'D Mining. Please place your order.", - TRADER_HAIL_DENY = "There is no response on the line.", - - TRADER_TRADE_COMPLETE = "Transaction complete. Please use our services again", - TRADER_NO_BLACKLISTED = "Whoa whoa, I don't want this shit, put it away.", - TRADER_FOUND_UNWANTED = "Sorry, we are currently not looking to purchase these items.", - TRADER_NOT_ENOUGH = "Sorry, this is an insufficient sum for this purchase.", - TRADER_HOW_MUCH = "For ONE entry of ITEM the price would be VALUE CURRENCY.", - TRADER_WHAT_WANT = "We are currently looking to procure", - - TRADER_COMPLEMENT_FAILURE = "I am afraid this is beyond my competency.", - TRADER_COMPLEMENT_SUCCESS = "Thank you.", - TRADER_INSULT_GOOD = "Alright, we will reconsider the terms.", - TRADER_INSULT_BAD = "This is not acceptable, please cease.", - ) - - possible_wanted_items = list(/obj/item/ore/ = TRADER_SUBTYPES_ONLY, - /obj/item/disk/survey = TRADER_THIS_TYPE, - /obj/item/ore/slag = TRADER_BLACKLIST) - - possible_trading_items = list(/obj/machinery/mining/drill = TRADER_THIS_TYPE, - /obj/machinery/mining/brace = TRADER_THIS_TYPE, - /obj/machinery/floodlight = TRADER_THIS_TYPE, - /obj/machinery/floodlight = TRADER_THIS_TYPE, - /obj/item/storage/box/greenglowsticks = TRADER_THIS_TYPE, - /obj/item/clothing/suit/space/void/engineering/salvage/prepared = TRADER_THIS_TYPE, - /obj/item/stack/material/uranium/ten = TRADER_THIS_TYPE, - /obj/item/stack/material/plasteel/fifty = TRADER_THIS_TYPE, - /obj/item/stack/material/steel/fifty = TRADER_THIS_TYPE - ) diff --git a/code/datums/trading/misc.dm b/code/datums/trading/misc.dm deleted file mode 100644 index 7d5f453203dd1..0000000000000 --- a/code/datums/trading/misc.dm +++ /dev/null @@ -1,166 +0,0 @@ -/datum/trader/ship/pet_shop - name = "Pet Shop Owner" - name_language = LANGUAGE_SKRELLIAN - origin = "Pet Shop" - trade_flags = TRADER_GOODS|TRADER_MONEY|TRADER_WANTED_ONLY - possible_origins = list("Paws-Out", "Pets-R-Smart", "Tentacle Companions", "Xeno-Pets and Assorted Goods", "Barks and Drools") - speech = list(TRADER_HAIL_GENERIC = "Welcome to my xeno-pet shop! Here you will find many wonderful companions. Some a bit more... aggressive than others. But companions none the less. I also buy pets, or trade them.", - TRADER_HAIL_DENY = "I no longer wish to speak to you.", - - TRADER_TRADE_COMPLETE = "Remember to give them attention and food. They are living beings, and you should treat them like so.", - TRADER_NO_BLACKLISTED = "Legally I can' do that. Morally, I refuse to do that.", - TRADER_FOUND_UNWANTED = "I only want animals. I don't need food or shiny things. I'm looking for specific ones at that. Ones I already have the cage and food for.", - TRADER_NOT_ENOUGH = "I'd give you the animal for free, but I need the money to feed the others. So you must pay in full.", - TRADER_HOW_MUCH = "This is a fine specimen. I believe it will cost you VALUE CURRENCY.", - TRADER_WHAT_WANT = "I have the facilities, currently, to support", - - TRADER_COMPLEMENT_FAILURE = "That was almost charming.", - TRADER_COMPLEMENT_SUCCESS = "Thank you. I needed that.", - TRADER_INSULT_GOOD = "I ask you to stop. We can be peaceful. I know we can.", - TRADER_INSULT_BAD = "My interactions with you are becoming less than fruitful.", - - TRADER_BRIBE_FAILURE = "I'm not going to do that. I have places to be.", - TRADER_BRIBE_SUCCESS = "Hm. It'll be good for the animals, so sure.", - ) - - possible_wanted_items = list(/mob/living/simple_animal/passive/corgi = TRADER_THIS_TYPE, - /mob/living/simple_animal/passive/cat = TRADER_THIS_TYPE, - /mob/living/simple_animal/crab = TRADER_THIS_TYPE, - /mob/living/simple_animal/passive/lizard = TRADER_THIS_TYPE, - /mob/living/simple_animal/passive/mouse = TRADER_THIS_TYPE, - /mob/living/simple_animal/passive/mushroom = TRADER_THIS_TYPE, - /mob/living/simple_animal/tindalos = TRADER_THIS_TYPE, - /mob/living/simple_animal/passive/tomato = TRADER_THIS_TYPE, - /mob/living/simple_animal/passive/cow = TRADER_THIS_TYPE, - /mob/living/simple_animal/passive/chick = TRADER_THIS_TYPE, - /mob/living/simple_animal/passive/chicken = TRADER_THIS_TYPE, - /mob/living/simple_animal/yithian = TRADER_THIS_TYPE, - /mob/living/simple_animal/hostile/retaliate/beast/diyaab = TRADER_THIS_TYPE, - /mob/living/simple_animal/hostile/bear = TRADER_THIS_TYPE, - /mob/living/simple_animal/hostile/retaliate/beast/shantak= TRADER_THIS_TYPE, - /mob/living/simple_animal/hostile/retaliate/parrot = TRADER_THIS_TYPE, - /mob/living/simple_animal/hostile/retaliate/beast/samak= TRADER_THIS_TYPE, - /mob/living/simple_animal/hostile/retaliate/goat = TRADER_THIS_TYPE, - /mob/living/simple_animal/hostile/carp = TRADER_THIS_TYPE) - - possible_trading_items = list(/mob/living/simple_animal/passive/corgi = TRADER_THIS_TYPE, - /mob/living/simple_animal/passive/cat = TRADER_THIS_TYPE, - /mob/living/simple_animal/crab = TRADER_THIS_TYPE, - /mob/living/simple_animal/passive/lizard = TRADER_THIS_TYPE, - /mob/living/simple_animal/passive/mouse = TRADER_THIS_TYPE, - /mob/living/simple_animal/passive/mushroom = TRADER_THIS_TYPE, - /mob/living/simple_animal/tindalos = TRADER_THIS_TYPE, - /mob/living/simple_animal/passive/tomato = TRADER_THIS_TYPE, - /mob/living/simple_animal/passive/cow = TRADER_THIS_TYPE, - /mob/living/simple_animal/passive/chick = TRADER_THIS_TYPE, - /mob/living/simple_animal/passive/chicken = TRADER_THIS_TYPE, - /mob/living/simple_animal/yithian = TRADER_THIS_TYPE, - /mob/living/simple_animal/hostile/retaliate/beast/diyaab = TRADER_THIS_TYPE, - /mob/living/simple_animal/hostile/bear= TRADER_THIS_TYPE, - /mob/living/simple_animal/hostile/retaliate/beast/shantak= TRADER_THIS_TYPE, - /mob/living/simple_animal/hostile/retaliate/parrot = TRADER_THIS_TYPE, - /mob/living/simple_animal/hostile/retaliate/beast/samak= TRADER_THIS_TYPE, - /mob/living/simple_animal/hostile/retaliate/goat = TRADER_THIS_TYPE, - /mob/living/simple_animal/hostile/carp= TRADER_THIS_TYPE, - /obj/item/device/dociler = TRADER_THIS_TYPE, - /obj/structure/dogbed = TRADER_THIS_TYPE) - -/datum/trader/ship/pet_shop/New() - ..() - speech[TRADER_HAIL_START + SPECIES_SKRELL] = "Ah! A fellow Skrell. How wonderful, I may have a few pets imported from back home. Take a look." - -/datum/trader/ship/prank_shop - name = "Prank Shop Owner" - name_language = LANGUAGE_ROOTLOCAL - origin = "Prank Shop" - compliment_increase = 0 - insult_drop = 0 - possible_origins = list("Yacks and Yucks Shop", "The Shop From Which I Sell Humorous Items", "The Prank Gestalt", "The Clown's Armory", "Uncle Knuckle's Chuckle Bunker", "A Place from Which to do Humorous Business") - speech = list(TRADER_HAIL_GENERIC = "We welcome you to our shop of humorous items. We invite you to partake in the divine experience of being pranked, and pranking someone else.", - TRADER_HAIL_DENY = "We cannot do business with you. We are sorry.", - - TRADER_TRADE_COMPLETE = "We thank you for purchasing something. We enjoyed the experience of you doing so and we hope to learn from it.", - TRADER_NO_BLACKLISTED= "We are not allowed to do such. We are sorry.", - TRADER_NOT_ENOUGH="We have sufficiently experienced giving away goods for free. We wish to experience getting money in return.", - TRADER_HOW_MUCH = "We believe that is worth VALUE CURRENCY.", - TRADER_WHAT_WANT = "We wish only for the experiences you give us, in all else we want", - - TRADER_COMPLEMENT_FAILURE= "You are attempting to compliment us.", - TRADER_COMPLEMENT_SUCCESS="You are attempting to compliment us.", - TRADER_INSULT_GOOD = "You are attempting to insult us, correct?", - TRADER_INSULT_BAD = "We do not understand.", - - TRADER_BRIBE_FAILURE = "We are sorry, but we cannot accept.", - TRADER_BRIBE_SUCCESS = "We are happy to say that we accept this bribe.", - ) - possible_trading_items = list(/obj/item/clothing/mask/gas/clown_hat = TRADER_THIS_TYPE, - /obj/item/clothing/mask/gas/mime = TRADER_THIS_TYPE, - /obj/item/clothing/shoes/clown_shoes = TRADER_THIS_TYPE, - /obj/item/clothing/under/rank/clown = TRADER_THIS_TYPE, - /obj/item/stamp/clown = TRADER_THIS_TYPE, - /obj/item/storage/backpack/clown = TRADER_THIS_TYPE, - /obj/item/bananapeel = TRADER_THIS_TYPE, - /obj/item/gun/launcher/money = TRADER_THIS_TYPE, - /obj/item/reagent_containers/food/snacks/pie = TRADER_THIS_TYPE, - /obj/item/bikehorn = TRADER_THIS_TYPE, - /obj/item/reagent_containers/spray/waterflower = TRADER_THIS_TYPE, - /obj/item/gun/launcher/pneumatic/small = TRADER_THIS_TYPE, - /obj/item/gun/projectile/revolver/capgun = TRADER_THIS_TYPE, - /obj/item/clothing/mask/fakemoustache = TRADER_THIS_TYPE, - /obj/item/grenade/spawnergrenade/fake_carp = TRADER_THIS_TYPE) - -/datum/trader/ship/pet_shop/New() - ..() - speech[TRADER_HAIL_START + SPECIES_DIONA] = "Welcome, other gestalt. We invite you to learn of our experiences, and teach us of your own." - - -/datum/trader/ship/replica_shop - name = "Replica Store Owner" - name_language = TRADER_DEFAULT_NAME - origin = "Replica Store" - possible_origins = list("Ye-Old Armory", "Knights and Knaves", "The Blacksmith", "Historical Human Apparel and Items", "The Pointy End", "Fight Knight's Knightly Nightly Knight Fights", "Elminster's Fine Steel", "The Arms of King Duordan", "Queen's Edict") - speech = list(TRADER_HAIL_GENERIC = "Greetings, traveler! You've the look of one with a keen hunger for human history. Come in, and learn! Mayhaps even... buy?", - TRADER_HAIL_DENY = "I shan't palaver with a man who thumbs his nose at the annals of history. Goodbye.", - - TRADER_TRADE_COMPLETE = "Thank you, mighty warrior. And remember - these may be replicas, but their edges are honed to razor sharpness!", - TRADER_NO_BLACKLISTED= "Nay, we accept only the CURRENCY_SINGULAR. Or sovereigns of the king's mint, of course.", - TRADER_NOT_ENOUGH="Alas, traveler, my fine wares cost more than that.", - TRADER_HOW_MUCH = "For VALUE CURRENCY, I can part with this finest of goods.", - TRADER_WHAT_WANT = "I have ever longed for", - - TRADER_COMPLEMENT_FAILURE= "Oh ho ho! Aren't you quite the jester.", - TRADER_COMPLEMENT_SUCCESS="Why, thank you, traveler! Long have I slaved over the anvil to produce these goods.", - TRADER_INSULT_GOOD = "Hey, bro, I'm just tryin' to make a living here, okay? The Camelot schtick is part of my brand.", - TRADER_INSULT_BAD = "Man, fuck you, then.", - - TRADER_BRIBE_FAILURE = "Alas, traveler - I could stay all eve, but I've an Unathi client in waiting, and they are not known for patience.", - TRADER_BRIBE_SUCCESS = "Mayhaps I could set a spell longer, and rest my weary feet.", - ) - possible_trading_items = list(/obj/item/clothing/head/wizard/magus = TRADER_THIS_TYPE, - /obj/item/shield/buckler = TRADER_THIS_TYPE, - /obj/item/clothing/head/redcoat = TRADER_THIS_TYPE, - /obj/item/clothing/head/powdered_wig = TRADER_THIS_TYPE, - /obj/item/clothing/head/hasturhood = TRADER_THIS_TYPE, - /obj/item/clothing/head/helmet/gladiator=TRADER_THIS_TYPE, - /obj/item/clothing/head/plaguedoctorhat= TRADER_THIS_TYPE, - /obj/item/clothing/glasses/monocle = TRADER_THIS_TYPE, - /obj/item/clothing/mask/smokable/pipe = TRADER_THIS_TYPE, - /obj/item/clothing/mask/gas/plaguedoctor=TRADER_THIS_TYPE, - /obj/item/clothing/suit/hastur = TRADER_THIS_TYPE, - /obj/item/clothing/suit/imperium_monk = TRADER_THIS_TYPE, - /obj/item/clothing/suit/judgerobe = TRADER_THIS_TYPE, - /obj/item/clothing/suit/wizrobe/magusred=TRADER_THIS_TYPE, - /obj/item/clothing/suit/wizrobe/magusblue=TRADER_THIS_TYPE, - /obj/item/clothing/under/gladiator = TRADER_THIS_TYPE, - /obj/item/clothing/under/kilt = TRADER_THIS_TYPE, - /obj/item/clothing/under/redcoat = TRADER_THIS_TYPE, - /obj/item/clothing/under/soviet = TRADER_THIS_TYPE, - /obj/item/material/harpoon = TRADER_THIS_TYPE, - /obj/item/material/sword = TRADER_ALL, - /obj/item/material/scythe = TRADER_THIS_TYPE, - /obj/item/material/star = TRADER_THIS_TYPE, - /obj/item/material/twohanded/baseballbat = TRADER_THIS_TYPE) - -/datum/trader/ship/pet_shop/New() - ..() - speech[TRADER_HAIL_START + SPECIES_UNATHI] = "Ah, you've the look of a lizard who knows his way around martial combat. Come in! We can only hope our steel meets the formidable Moghedi standards." diff --git a/code/datums/trading/ship.dm b/code/datums/trading/ship.dm deleted file mode 100644 index b77a6d7a9f3e7..0000000000000 --- a/code/datums/trading/ship.dm +++ /dev/null @@ -1,25 +0,0 @@ -//Ships are on a time limit as far as being around goes. -//They are ALSO the only ones that can appear after round start -/datum/trader/ship - var/duration_of_stay = 0 - var/typical_duration = 20 //minutes (since trader processes only tick once a minute) - -/datum/trader/ship/New() - ..() - duration_of_stay = rand(typical_duration,typical_duration * 2) - -/datum/trader/ship/tick() - ..() - if(prob(-disposition) || refuse_comms) - duration_of_stay -= 5 - return --duration_of_stay > 0 - -/datum/trader/ship/bribe_to_stay_longer(var/amt) - if(prob(-disposition)) - return ..() - - var/length = round(amt/100) - duration_of_stay += length - var/datum/trade_response/tr = make_response(TRADER_BRIBE_SUCCESS, "Sure, I'll stay for TIME more minutes.", -amt, TRUE) - tr.text = replacetext_char(tr.text, "TIME", length) - return tr \ No newline at end of file diff --git a/code/datums/trading/trade.dm b/code/datums/trading/trade.dm deleted file mode 100644 index eea1270e4b364..0000000000000 --- a/code/datums/trading/trade.dm +++ /dev/null @@ -1,300 +0,0 @@ -/datum/trader - var/name = "unsuspicious trader" //The name of the trader in question - var/origin = "some place" //The place that they are trading from - var/list/possible_origins //Possible names of the trader origin - var/disposition = 0 //The current disposition of them to us. - var/trade_flags = TRADER_MONEY //Flags - var/name_language //If this is set to a language name this will generate a name from the language - var/icon/portrait //The icon that shows up in the menu @TODO - - var/list/wanted_items = list() //What items they enjoy trading for. Structure is (type = known/unknown) - var/list/possible_wanted_items //List of all possible wanted items. Structure is (type = mode) - var/list/possible_trading_items //List of all possible trading items. Structure is (type = mode) - var/list/trading_items = list() //What items they are currently trading away. - var/list/blacklisted_trade_items = list(/mob/living/carbon/human) - //Things they will automatically refuse - - var/list/speech = list() //The list of all their replies and messages. Structure is (id = talk) - /*SPEECH IDS: - hail_generic When merchants hail a person - hail_[race] Race specific hails - hail_deny When merchant denies a hail - - insult_good When the player insults a merchant while they are on good disposition - insult_bad When a player insults a merchatn when they are not on good disposition - complement_accept When the merchant accepts a complement - complement_deny When the merchant refuses a complement - - how_much When a merchant tells the player how much something is. - trade_complete When a trade is made - - what_want What the person says when they are asked if they want something - - */ - var/want_multiplier = 2 //How much wanted items are multiplied by when traded for - var/margin = 1.2 //Multiplier to price when selling to player - var/price_rng = 10 //Percentage max variance in sell prices. - var/insult_drop = 5 //How far disposition drops on insult - var/compliment_increase = 5 //How far compliments increase disposition - var/refuse_comms = 0 //Whether they refuse further communication - - var/mob_transfer_message = "You are transported to ORIGIN." //What message gets sent to mobs that get sold. - -/datum/trader/New() - ..() - if(name_language) - if(name_language == TRADER_DEFAULT_NAME) - name = capitalize(pick(GLOB.first_names_female + GLOB.first_names_male)) + " " + capitalize(pick(GLOB.last_names)) - else - var/datum/language/L = all_languages[name_language] - if(L) - name = L.get_random_name(pick(MALE,FEMALE)) - if(possible_origins && possible_origins.len) - origin = pick(possible_origins) - - //Generate the - if(possible_wanted_items) - possible_wanted_items = generate_pool(possible_wanted_items) - if(possible_trading_items) - possible_trading_items = generate_pool(possible_trading_items) - - for(var/i in 3 to 6) - add_to_pool(trading_items, possible_trading_items, force = 1) - add_to_pool(wanted_items, possible_wanted_items, force = 1) - -/datum/trader/proc/generate_pool(var/list/trading_pool) - . = list() - for(var/type in trading_pool) - var/status = trading_pool[type] - if(status & TRADER_THIS_TYPE) - . += type - if(status & TRADER_SUBTYPES_ONLY) - . += subtypesof(type) - if(status & TRADER_BLACKLIST) - . -= type - if(status & TRADER_BLACKLIST_SUB) - . -= subtypesof(type) - - -//If this hits 0 then they decide to up and leave. -/datum/trader/proc/tick() - add_to_pool(trading_items, possible_trading_items, 200) - add_to_pool(wanted_items, possible_wanted_items, 50) - remove_from_pool(possible_trading_items, 9) //We want the stock to change every so often, so we make it so that they have roughly 10~11 ish items max - return 1 - -/datum/trader/proc/remove_from_pool(var/list/pool, var/chance_per_item) - if(pool && prob(chance_per_item * pool.len)) - var/i = rand(1,pool.len) - pool[pool[i]] = null - pool -= pool[i] - -/datum/trader/proc/add_to_pool(var/list/pool, var/list/possible, var/base_chance = 100, var/force = 0) - var/divisor = 1 - if(pool && pool.len) - divisor = pool.len - if(force || prob(base_chance/divisor)) - var/new_item = get_possible_item(possible) - if(new_item) - pool |= new_item - -/datum/trader/proc/get_possible_item(var/list/trading_pool) - if(!trading_pool || !trading_pool.len) - return - var/picked = pick(trading_pool) - var/atom/A = picked - if(initial(A.name) in list("object", "item","weapon", "structure", "machinery", "exosuit", "organ", "snack")) //weed out a few of the common bad types. Reason we don't check types specifically is that (hopefully) further bad subtypes don't set their name up and are similar. - return null - if(initial(A.trade_blacklisted) == TRUE) - return null - return picked - -/datum/trader/proc/get_response(var/key, var/default) - if(speech && speech[key]) - . = speech[key] - else - . = default - . = replacetext_char(., "MERCHANT", name) - . = replacetext_char(., "ORIGIN", origin) - . = replacetext_char(.,"CURRENCY_SINGULAR", GLOB.using_map.local_currency_name_singular) - . = replacetext_char(.,"CURRENCY", GLOB.using_map.local_currency_name) - -/datum/trader/proc/print_trading_items(var/num) - num = clamp(num,1,trading_items.len) - if(trading_items[num]) - var/atom/movable/M = trading_items[num] - return "[initial(M.name)]" - -/datum/trader/proc/skill_curve(skill) - switch(skill) - if(SKILL_EXPERT) - . = 1 - if(SKILL_EXPERT to SKILL_MAX) - . = 1 + (SKILL_EXPERT - skill) * 0.2 - else - . = 1 + (SKILL_EXPERT - skill) ** 2 - //This condition ensures that the buy price is higher than the sell price on generic goods, i.e. the merchant can't be exploited - . = max(., price_rng/((margin - 1)*(200 - price_rng))) - -/datum/trader/proc/get_item_value(var/trading_num, skill = SKILL_MAX) - if(!trading_items[trading_items[trading_num]]) - var/type = trading_items[trading_num] - var/value = get_value(type) - value = round(rand(100 - price_rng,100 + price_rng)/100 * value) //For some reason rand doesn't like decimals. - trading_items[type] = value - . = trading_items[trading_items[trading_num]] - . *= 1 + (margin - 1) * skill_curve(skill) //Trader will overcharge at lower skill. - -/datum/trader/proc/get_buy_price(item, is_wanted, skill = SKILL_MAX) - . = get_value(item) - if(is_wanted) - . *= want_multiplier - . *= max(1 - (margin - 1) * skill_curve(skill), 0.1) //Trader will underpay at lower skill. - -/datum/trader/proc/make_response(var/response_type, var/response_default, var/delta = 0, var/success = TRUE) - . = new /datum/trade_response(get_response(response_type, response_default), delta, success) - -/datum/trader/proc/offer_money_for_bulk(quantity, trade_num, money_amount, turf/location, skill = SKILL_MAX) - if(!(trade_flags & TRADER_MONEY)) - return make_response(TRADER_NO_MONEY, "I don't like money.", 0, FALSE) - var/value = get_item_value(trade_num, skill) * quantity - if(money_amount < value) - return make_response(TRADER_NOT_ENOUGH, "I need more money!", 0, FALSE) - trade_quantity(quantity, list(), trade_num, location) - return make_response(TRADER_TRADE_COMPLETE, "Thank you for your patronage!", -value, TRUE) - -/datum/trader/proc/offer_items_for_bulk(quantity, list/offers, num, turf/location, skill = SKILL_MAX) - if(!offers?.len) - return make_response(TRADER_NOT_ENOUGH, "That's not enough.", 0, FALSE) - num = clamp(num, 1, trading_items.len) - var/offer_worth = 0 - for(var/item in offers) - var/atom/movable/offer = item - var/is_wanted = 0 - if((trade_flags & TRADER_WANTED_ONLY) && is_type_in_list(offer, wanted_items)) - is_wanted = 2 - if((trade_flags & TRADER_WANTED_ALL) && is_type_in_list(offer, possible_wanted_items)) - is_wanted = 1 - if(blacklisted_trade_items?.len && is_type_in_list(offer ,blacklisted_trade_items)) - return make_response(TRADER_NO_BLACKLISTED, "I refuse to take one of those items.", 0, FALSE) - - if(istype(offer, /obj/item/spacecash)) - if(!(trade_flags & TRADER_MONEY)) - return make_response(TRADER_NO_MONEY, "I don't take money.", 0, FALSE) - else - if(!(trade_flags & TRADER_GOODS)) - return make_response(TRADER_NO_GOODS, "I don't take goods.", 0, FALSE) - else if((trade_flags & TRADER_WANTED_ONLY|TRADER_WANTED_ALL) && !is_wanted) - return make_response(TRADER_FOUND_UNWANTED, "I don't want one of those items", 0, FALSE) - - offer_worth += get_buy_price(offer, is_wanted - 1, skill) * quantity - if(!offer_worth) - return make_response(TRADER_NOT_ENOUGH, "Everything you gave me is worthless!", 0, FALSE) - var/trading_worth = get_item_value(num, skill) - if(!trading_worth) - return make_response(TRADER_NOT_ENOUGH, "That's not enough.", 0, FALSE) - var/percent = offer_worth/trading_worth - if(percent > max(0.9, 0.9-disposition / 100)) - trade_quantity(quantity, offers, num, location) - return make_response(TRADER_TRADE_COMPLETE, "Thank you for your patronage!", 0, TRUE) - return make_response(TRADER_NOT_ENOUGH, "That's not enough.", 0, FALSE) - -/datum/trader/proc/hail(var/mob/user) - if(!can_hail()) - return make_response(TRADER_HAIL_DENY, "No, go away.", 0, FALSE) - var/specific - if(istype(user, /mob/living/carbon/human)) - var/mob/living/carbon/human/H = user - if(H.species) - specific = H.species.name - else if(istype(user, /mob/living/silicon)) - specific = "silicon" - if(!speech[TRADER_HAIL_START + specific]) - specific = "generic" - var/datum/trade_response/tr = make_response(TRADER_HAIL_START + specific, "Greetings, MOB!", 0, TRUE) - tr.text = replacetext_char(tr.text, "MOB", user.name) - return tr - -/datum/trader/proc/can_hail() - if(!refuse_comms && prob(-disposition)) - refuse_comms = 1 - return !refuse_comms - -/datum/trader/proc/insult() - disposition -= rand(insult_drop, insult_drop * 2) - if(prob(-disposition/10)) - refuse_comms = 1 - if(disposition > 50) - return make_response(TRADER_INSULT_GOOD,"What? I thought we were cool!", 0, TRUE) - else - return make_response(TRADER_INSULT_BAD, "Right back at you asshole!", 0, FALSE) - -/datum/trader/proc/compliment() - if(prob(-disposition)) - return make_response(TRADER_COMPLEMENT_FAILURE, "Fuck you!", 0, FALSE) - if(prob(100-disposition)) - disposition += rand(compliment_increase, compliment_increase * 2) - return make_response(TRADER_COMPLEMENT_SUCCESS, "Thank you!", 0, TRUE) - -/datum/trader/proc/trade_quantity(quantity, list/offers, num, turf/location) - for(var/offer in offers) - if(istype(offer, /mob)) - var/text = mob_transfer_message - to_chat(offer, replacetext_char(text, "ORIGIN", origin)) - qdel(offer) - - num = clamp(num, 1, trading_items.len) - var/type = trading_items[num] - - var/list/M = list() - for (var/i = 1 to quantity) - M += new type(location) - - playsound(location, 'sound/effects/teleport.ogg', 50, 1) - disposition += quantity * (rand(compliment_increase, compliment_increase * 3)) - - return M - -/datum/trader/proc/how_much_do_you_want(var/num, skill = SKILL_MAX) - num = clamp(num, 1, trading_items.len) - var/atom/movable/M = trading_items[num] - var/datum/trade_response/tr = make_response(TRADER_HOW_MUCH, "Hmm.... how about VALUE CURRENCY?", 0, FALSE) - tr.text = replacetext_char(replacetext_char(tr.text, "ITEM", initial(M.name)), "VALUE", get_item_value(num, skill)) - return tr - -/datum/trader/proc/what_do_you_want() - if(!(trade_flags & TRADER_GOODS)) - return make_response(TRADER_NO_GOODS, "I don't deal in goods.", 0, FALSE) - - var/datum/trade_response/tr = make_response(TRADER_WHAT_WANT, "Hm, I want", 0, TRUE) - var/list/want_english = list() - for(var/type in wanted_items) - var/atom/a = type - want_english += initial(a.name) - tr.text += " [english_list(want_english)]" - return tr - -/datum/trader/proc/sell_items(var/list/offers, skill = SKILL_MAX) - if(!(trade_flags & TRADER_GOODS)) - return make_response(TRADER_GOODS, "I'm not buying.", 0, FALSE) - if(!offers || !offers.len) - return make_response(TRADER_NOT_ENOUGH, "I'm not buying that.", 0, FALSE) - - var/wanted - var/total = 0 - for(var/offer in offers) - if((trade_flags & TRADER_WANTED_ONLY) && is_type_in_list(offer,wanted_items)) - wanted = 1 - else if((trade_flags & TRADER_WANTED_ALL) && is_type_in_list(offer,possible_wanted_items)) - wanted = 0 - else - return make_response(TRADER_FOUND_UNWANTED, "I don't want one of those items", 0, FALSE) - total += get_buy_price(offer, wanted, skill) - - playsound(get_turf(offers[1]), 'sound/effects/teleport.ogg', 50, 1) - for(var/offer in offers) - qdel(offer) - return make_response(TRADER_TRADE_COMPLETE, "Thanks for the goods!", total, TRUE) - -/datum/trader/proc/bribe_to_stay_longer(var/amt) - return make_response(TRADER_BRIBE_FAILURE, "How about no?", 0, FALSE) diff --git a/code/datums/trading/trade_response.dm b/code/datums/trading/trade_response.dm deleted file mode 100644 index a6977d1b0ce64..0000000000000 --- a/code/datums/trading/trade_response.dm +++ /dev/null @@ -1,9 +0,0 @@ -/datum/trade_response - var/text = "blah blah" //What the trader says - var/money_delta = 0 //The amount of money to change in the bank - var/success = TRUE //Whether the action was a failure - -/datum/trade_response/New(var/t, var/m, var/s, var/i) - text = t - money_delta = m - success = s \ No newline at end of file diff --git a/code/datums/trading/unique.dm b/code/datums/trading/unique.dm deleted file mode 100644 index e2336dec5de2c..0000000000000 --- a/code/datums/trading/unique.dm +++ /dev/null @@ -1,133 +0,0 @@ -/datum/trader/ship/unique - trade_flags = TRADER_WANTED_ONLY|TRADER_GOODS - want_multiplier = 5 - typical_duration = 40 - -/datum/trader/ship/unique/New() - ..() - wanted_items = list() - for(var/type in possible_wanted_items) - var/status = possible_wanted_items[type] - if(status & TRADER_THIS_TYPE) - wanted_items += type - if(status & TRADER_SUBTYPES_ONLY) - wanted_items += subtypesof(type) - if(status & TRADER_BLACKLIST) - wanted_items -= type - if(status & TRADER_BLACKLIST_SUB) - wanted_items -= subtypesof(type) - -/datum/trader/ship/unique/tick() - if(prob(-disposition) || refuse_comms) - duration_of_stay-- - return --duration_of_stay > 0 - -/datum/trader/ship/unique/what_do_you_want() - return get_response(TRADER_WHAT_WANT, "I don't want anything!") - -/datum/trader/ship/unique/severance - name = "Unknown" - origin = "SGS Severance" - - possible_wanted_items = list( - /obj/item/reagent_containers/food/snacks/human = TRADER_SUBTYPES_ONLY, - /obj/item/reagent_containers/food/snacks/meat/human = TRADER_THIS_TYPE, - /mob/living/carbon/human = TRADER_ALL - ) - - possible_trading_items = list(/obj/item/gun/projectile/automatic = TRADER_SUBTYPES_ONLY, - /obj/item/gun/projectile/automatic/machine_pistol/usi = TRADER_BLACKLIST, - /obj/item/gun/projectile/automatic/l6_saw/mag = TRADER_BLACKLIST - ) - - blacklisted_trade_items = null - - speech = list(TRADER_HAIL_GENERIC = "H-hello. Can you hear me? G-good... I have... specific needs... I have a lot to t-trade with you in return of course.", - TRADER_HAIL_DENY = "--CONNECTION SEVERED--", - - TRADER_TRADE_COMPLETE = "Hahahahahahaha! Thankyouthankyouthankyou!", - TRADER_NO_MONEY = "I d-don't NEED cash.", - TRADER_NOT_ENOUGH = "N-no, no no no. M-more than that... more...", - TRADER_FOUND_UNWANTED = "I d-don't think you GET what I want, fr- from your offer.", - TRADER_HOW_MUCH = "Meat. I want meat. The kind they don't serve in the- the mess hall.", - TRADER_WHAT_WANT = "Long p-pork. Yes... that's what I want...", - - TRADER_COMPLEMENT_FAILURE = "Your lies won't ch-change what I did.", - TRADER_COMPLEMENT_SUCCESS = "Yes... I suppose you're right.", - TRADER_INSULT_GOOD = "I... probably deserve that.", - TRADER_INSULT_BAD = "Maybe you should c-come here and say that. You'd be worth s-something then.", - ) - mob_transfer_message = "You are transported to ORIGIN, and with a sickening thud, you fall unconscious, never to wake again." - - -/datum/trader/ship/unique/rock - name = "Bobo" - origin = "Floating rock" - - possible_wanted_items = list(/obj/item/ore = TRADER_ALL) - possible_trading_items = list(/obj/machinery/power/supermatter = TRADER_ALL, - /obj/item/aiModule = TRADER_SUBTYPES_ONLY) - want_multiplier = 5000 - - speech = list(TRADER_HAIL_GENERIC = "Blub am MERCHANT. Blub hunger for things. Boo bring them to blub, yes?", - TRADER_HAIL_DENY = "Blub does not want to speak to boo.", - - TRADER_TRADE_COMPLETE = "Blub likes to trade!", - TRADER_NO_MONEY = "Boo try to give Blub paper. Blub does not want paper.", - TRADER_NOT_ENOUGH = "Blub hungry for bore than that.", - TRADER_FOUND_UNWANTED = "Blub only wants bocks. Give bocks.", - TRADER_HOW_MUCH = "Blub wants bocks. Boo give bocks. Blub gives stuff blub found.", - TRADER_WHAT_WANT = "Blub wants bocks. Big bocks, small bocks. Shiny bocks!", - - TRADER_COMPLEMENT_FAILURE = "Blub is just MERCHANT. What do boo mean?", - TRADER_COMPLEMENT_SUCCESS = "Boo are a bood berson!", - TRADER_INSULT_GOOD = "Blub do not understand. Blub thought we were briends.", - TRADER_INSULT_BAD = "Blub feels bad now.", - ) - -//probably could stick soem Howl references in here but like, eh. Haven't seen it in years. -/datum/trader/ship/unique/wizard - name = "Sorcerer" - origin = "A moving castle" - possible_origins = list("An indistinct location", "Unknown location", "The Diamond Sphere", "Beyond the Veil", "Deadverse") - name_language = TRADER_DEFAULT_NAME - - possible_wanted_items = list(/mob/living/simple_animal/construct = TRADER_SUBTYPES_ONLY, - /obj/item/melee/cultblade = TRADER_THIS_TYPE, - /obj/item/clothing/head/culthood = TRADER_ALL, - /obj/item/clothing/suit/space/cult = TRADER_ALL, - /obj/item/clothing/suit/cultrobes = TRADER_ALL, - /obj/item/clothing/head/helmet/space/cult = TRADER_ALL, - /obj/structure/cult = TRADER_SUBTYPES_ONLY, - /obj/structure/constructshell = TRADER_ALL, - /mob/living/simple_animal/familiar = TRADER_SUBTYPES_ONLY, - /mob/living/simple_animal/familiar/pet = TRADER_BLACKLIST, - /mob/living/simple_animal/hostile/mimic = TRADER_ALL) - - possible_trading_items = list(/obj/item/clothing/gloves/wizard = TRADER_THIS_TYPE, - /obj/item/clothing/head/helmet/space/void/wizard = TRADER_THIS_TYPE, - /obj/item/clothing/head/wizard = TRADER_ALL, - /obj/item/clothing/suit/space/void/wizard = TRADER_THIS_TYPE, - /obj/item/toy/figure/wizard = TRADER_THIS_TYPE, - /obj/item/staff = TRADER_ALL, - ) //Probably see about getting some more wizard based shit - - speech = list(TRADER_HAIL_GENERIC = "Hello! Are you here on pleasure or business?", - TRADER_HAIL_DENY = "I'm sorry, but I REALLY don't want to speak to you.", - - TRADER_TRADE_COMPLETE = "Pleasure doing business with you!", - TRADER_NO_MONEY = "Cash? Ha! What's cash to a man like me?", - TRADER_NOT_ENOUGH = "Hm, well I do enjoy what you're offering, I prefer a fair trade.", - TRADER_FOUND_UNWANTED = "What? I want oddities! Don't you understand?", - TRADER_HOW_MUCH = "I want dark things, brooding things... things that go bump in the night. Things that bleed wrong, live wrong, are wrong.", - TRADER_WHAT_WANT = "Have anything from a broodish cult?", - - TRADER_COMPLEMENT_FAILURE = "Like I haven't heard that one before!", - TRADER_COMPLEMENT_SUCCESS = "Haha! Aren't you nice.", - TRADER_INSULT_GOOD = "Naughty naughty.", - TRADER_INSULT_BAD = "Now where do you get off talking to me like that?", - ) - -/datum/trader/ship/unique/wizard/New() - ..() - speech[TRADER_HAIL_START + SPECIES_GOLEM] = "Interesting... how incredibly interesting... come! Let us do business!" \ No newline at end of file diff --git a/code/datums/trading/vox.dm b/code/datums/trading/vox.dm deleted file mode 100644 index d6d1aefb46889..0000000000000 --- a/code/datums/trading/vox.dm +++ /dev/null @@ -1,86 +0,0 @@ -/datum/trader/ship/vox - typical_duration = 60 - origin = "UNREGISTERED VESSEL" - name_language = LANGUAGE_VOX - compliment_increase = 0 - trade_flags = TRADER_GOODS - var/hailed_vox = FALSE //Whether we have been hailed by a vox. negatives mean pariah, positives mean regular. - blacklisted_trade_items = null - - speech = list(TRADER_HAIL_GENERIC = "SKREEE! We will trade good stuff, yes?", - TRADER_HAIL_DENY = "Trade closed, GO AWAY!", - - TRADER_TRADE_COMPLETE = "Yes, kikikikikiki! You will not regret this trade!", - TRADER_NO_MONEY = "Money? Vox no need money. GOODS! Give it GOODS!", - TRADER_NOT_ENOUGH = "It wants MORE for that. Give it more.", - - TRADER_HOW_MUCH = "You give it something worth VALUE, yes?", - TRADER_WHAT_WANT = "Vox wants", - - TRADER_COMPLEMENT_FAILURE = "No.", - TRADER_COMPLEMENT_SUCCESS = "Kikikikiki! Trade is better than talk, yes?", - TRADER_INSULT_GOOD = "Bah! Why does it have to deal with you?", - TRADER_INSULT_BAD = "All you meats are the same! Fuck off!", - ) - - var/list/visited_vox_speech = list( - TRADER_HAIL_GENERIC = "SKREEEEE! You friend of Vox? You trade with, yes?", - TRADER_HAIL_DENY = "Trade gone now. Goodbye.", - - TRADER_TRADE_COMPLETE = "Yes... this is a good trade for the Shoal!", - TRADER_NO_MONEY = "You know as well as it that money is no good.", - TRADER_NOT_ENOUGH = "Ech, you insult it with such a trade? Respect it, make it equal.", - - TRADER_HOW_MUCH = "Hmm.... VALUE. Something like that.", - TRADER_WHAT_WANT = "We need", - - TRADER_COMPLEMENT_FAILURE = "You know better than that!", - TRADER_COMPLEMENT_SUCCESS = "You butter it up? Should know better than that.", - TRADER_INSULT_GOOD = "Where this come from? Is trade no good?", - TRADER_INSULT_BAD = "If you say all this at home, you be dead!" - ) - possible_wanted_items = list(/obj/item/ = TRADER_SUBTYPES_ONLY, - /obj/item/stack/material = TRADER_SUBTYPES_ONLY, - /obj/item/stack/material/cyborg = TRADER_BLACKLIST_ALL, - /obj/item/organ = TRADER_SUBTYPES_ONLY, - ) - - possible_trading_items = list(/obj/item/gun/projectile/dartgun/vox = TRADER_SUBTYPES_ONLY, - /obj/item/trash = TRADER_SUBTYPES_ONLY, - /obj/item/remains = TRADER_ALL, - /obj/item/clothing/accessory = TRADER_ALL, - /obj/item/robot_parts = TRADER_SUBTYPES_ONLY, - /obj/item/robot_parts/robot_component = TRADER_BLACKLIST - ) - - mob_transfer_message = "You are transported to the ORIGIN. When the transportation dizziness wears off, you find you are surrounded by cackling Vox..." - -/datum/trader/ship/vox/New() - ..() - speech[TRADER_HAIL_START + "silicon"] = "Hello metal thing! You trade metal for things?" - speech[TRADER_HAIL_START + SPECIES_HUMAN] = "Hello hueman! Kiikikikiki! MOB trade with us, yes? Good!" - - visited_vox_speech[TRADER_HAIL_START + "silicon"] = "YOU KNOW VOX? Yes is good, yes yes, MOB. Trade GOOD!" - visited_vox_speech[TRADER_HAIL_START + SPECIES_HUMAN] = "Friend of Vox is friend of all Vox! MOB you trade now!" - visited_vox_speech[TRADER_HAIL_START + SPECIES_VOX] = "SKREEEE! May the Shoal make this trade good, MOB!" - -/datum/trader/ship/vox/hail(var/mob/user) - if(istype(user, /mob/living/carbon/human)) - var/mob/living/carbon/human/H = user - if(H.species) - switch(H.species.name) - if(SPECIES_VOX) - disposition = 1000 - hailed_vox = TRUE - speech = visited_vox_speech - . = ..() - -/datum/trader/ship/vox/can_hail() - if(hailed_vox >= 0) - return ..() - return FALSE - -/datum/trader/ship/vox/get_item_value(var/trading_num) - . = ..() - if(!hailed_vox) - . *= 2 diff --git a/code/datums/trading/weaponry.dm b/code/datums/trading/weaponry.dm deleted file mode 100644 index 178d17314d27e..0000000000000 --- a/code/datums/trading/weaponry.dm +++ /dev/null @@ -1,98 +0,0 @@ -/datum/trader/ship/gunshop - name = "Gun Shop Employee" - name_language = TRADER_DEFAULT_NAME - origin = "Gun Shop" - possible_origins = list("Rooty Tootie's Point-n-Shooties", "Bang-Bang Shop", "Wild Wild West Shop", "Keleshnikov", "Hunting Depot", "Big Game Hunters") - speech = list(TRADER_HAIL_GENERIC = "Hello, hello! I hope you have your permit. Oh, who are we kidding, you're welcome anyway!", - TRADER_HAIL_DENY = "Store policy dictates that you can fuck off.", - - TRADER_TRADE_COMPLETE = "Thanks for buying your guns from ORIGIN!", - TRADER_NO_BLACKLISTED = "We may deal in guns, but that doesn't mean we'll trade for illegal goods...", - TRADER_NO_GOODS = "Cash for guns, thats the deal.", - TRADER_NOT_ENOUGH = "Guns are expensive! Give us more if you REALLY want it.", - TRADER_HOW_MUCH = "Well, I'd love to give this little beauty to you for VALUE.", - - TRADER_COMPLEMENT_FAILURE = "If we were in the same room right now, I'd probably punch you.", - TRADER_COMPLEMENT_SUCCESS = "Ha! Good one!", - TRADER_INSULT_GOOD = "I expected better from you. I suppose in that, I was wrong.", - TRADER_INSULT_BAD = "If I had my gun I'd shoot you!" - ) - - possible_trading_items = list(/obj/item/gun/projectile/pistol/holdout = TRADER_ALL, - /obj/item/gun/projectile/pistol/military/alt = TRADER_ALL, - /obj/item/gun/projectile/pistol/magnum_pistol= TRADER_ALL, - /obj/item/gun/projectile/pistol/sec = TRADER_ALL, - /obj/item/gun/projectile/heavysniper/boltaction = TRADER_ALL, - /obj/item/gun/projectile/pistol/sec/MK = TRADER_BLACKLIST, - /obj/item/gun/projectile/shotgun/pump= TRADER_SUBTYPES_ONLY, - /obj/item/ammo_magazine = TRADER_SUBTYPES_ONLY, - /obj/item/ammo_magazine/pistol/empty = TRADER_BLACKLIST, - /obj/item/ammo_magazine/mil_rifle/empty = TRADER_BLACKLIST, - /obj/item/ammo_magazine/gyrojet/empty = TRADER_BLACKLIST, - /obj/item/ammo_magazine/pistol/small/empty = TRADER_BLACKLIST, - /obj/item/ammo_magazine/pistol/empty = TRADER_BLACKLIST, - /obj/item/ammo_magazine/box/pistol/empty = TRADER_BLACKLIST, - /obj/item/ammo_magazine/box/machinegun/empty = TRADER_BLACKLIST, - /obj/item/ammo_magazine/machine_pistol/empty = TRADER_BLACKLIST, - /obj/item/ammo_magazine/smg_top/empty = TRADER_BLACKLIST, - /obj/item/ammo_magazine/magnum/empty = TRADER_BLACKLIST, - /obj/item/clothing/accessory/storage/holster = TRADER_ALL) - -/datum/trader/ship/egunshop - name = "Energy Gun Shop Employee" - name_language = TRADER_DEFAULT_NAME - origin = "EGun Shop" - possible_origins = list("The Emperor's Lasgun Shop", "Future Guns", "Solar Army", "Kiefer's Dependable Electric Arms", "Olympus Kingsport") - speech = list(TRADER_HAIL_GENERIC = "Welcome to the future of warfare! ORIGIN, your one-stop shop for energy weaponry!", - TRADER_HAIL_DENY = "I'm sorry, your communication channel has been blacklisted.", - - TRADER_TRADE_COMPLETE = "Thank you, your purchase has been logged and you have automatically liked our Spacebook page.", - TRADER_NO_BLACKLISTED = "I'm sorry, is that a joke?", - TRADER_NO_GOODS = "We deal in cash.", - TRADER_NOT_ENOUGH = "State of the art weaponry costs more than that.", - TRADER_HOW_MUCH = "All our quality weapons are priceless, but I'd give that to you for VALUE.", - - TRADER_COMPLEMENT_FAILURE = "If I was dumber I probably would have believed you.", - TRADER_COMPLEMENT_SUCCESS = "Yes, I am very smart.", - TRADER_INSULT_GOOD = "Energy weapons are TWICE the gun kinetic guns are!", - TRADER_INSULT_BAD = "That's... very mean. I won't think twice about blacklisting your channel, so stop." - ) - - possible_trading_items = list(/obj/item/gun/energy/taser = TRADER_THIS_TYPE, - /obj/item/gun/energy/stunrevolver = TRADER_THIS_TYPE, - /obj/item/gun/energy/xray = TRADER_THIS_TYPE, - /obj/item/gun/energy/laser = TRADER_THIS_TYPE, - /obj/item/gun/energy/gun = TRADER_THIS_TYPE, - /obj/item/cell/crap = TRADER_THIS_TYPE, - /obj/item/cell/standard = TRADER_THIS_TYPE, - /obj/item/cell/high = TRADER_THIS_TYPE, - /obj/item/cell/super = TRADER_THIS_TYPE, - /obj/item/cell/hyper = TRADER_THIS_TYPE, - /obj/item/clothing/accessory/storage/holster = TRADER_ALL) - -/datum/trader/dogan - name = "Dogan" - origin = "Dogan's Gun Beacon" - speech = list(TRADER_HAIL_GENERIC = "Hello! This is an automatic recording of me, Mr. Dogan! I hope you like the... GUNS... I've got in store for you today.", - TRADER_HAIL_DENY = "I formally welcome you to... NOT... visit our store!", - - TRADER_TRADE_COMPLETE = "Thank you for... PURCHASING... that quality... ITEM... from me!", - TRADER_NO_BLACKLISTED = "Thank you for... that quality... ILLEGAL OFFER THAT I WILL REFUSE... from me!", - TRADER_NO_GOODS = "Thank you for... that quality... OFFER THAT ISN'T MONEY THAT I WILL REFUSE... from me!", - TRADER_NOT_ENOUGH = "Thank you for... that quality... OFFER THAT IS NOT ENOUGH... from me!", - TRADER_HOW_MUCH = "Thank you for... ASKING ME ABOUT MY PRICES... that quality... ITEM is worth VALUE... from me!", - - TRADER_COMPLEMENT_FAILURE = "Thank you for... that quality... COMPLIMENT... from me!", - TRADER_COMPLEMENT_SUCCESS = "Thank you for... that quality... COMPLIMENT... from me!", - TRADER_INSULT_GOOD = "Thank you for... that quality... INSULT... from me!", - TRADER_INSULT_BAD = "Thank you for... that quality... INSULT... from me!" - ) - compliment_increase = 0 - insult_drop = 0 - - possible_trading_items = list(/obj/item/gun/projectile/pirate = TRADER_THIS_TYPE, - /obj/item/gun/projectile/pistol/sec/MK = TRADER_THIS_TYPE, - /obj/item/gun/projectile/heavysniper/ant = TRADER_THIS_TYPE, - /obj/item/gun/energy/laser/dogan = TRADER_THIS_TYPE, - /obj/item/gun/projectile/automatic/machine_pistol/usi = TRADER_THIS_TYPE, - /obj/item/clothing/accessory/storage/holster = TRADER_ALL) \ No newline at end of file diff --git a/code/datums/underwear/bottom.dm b/code/datums/underwear/bottom.dm deleted file mode 100644 index 8626ff996ccaa..0000000000000 --- a/code/datums/underwear/bottom.dm +++ /dev/null @@ -1,95 +0,0 @@ -/datum/category_item/underwear/bottom - underwear_gender = PLURAL - underwear_name = "underwear" - underwear_type = /obj/item/underwear/bottom - -/datum/category_item/underwear/bottom/none - name = "None" - always_last = TRUE - underwear_type = null - -/datum/category_item/underwear/bottom/briefs - name = "Briefs" - underwear_name = "briefs" - icon_state = "briefs" - has_color = TRUE - -/datum/category_item/underwear/bottom/briefs/is_default(var/gender) - return gender != FEMALE - -/datum/category_item/underwear/bottom/panties_noback - name = "Panties, noback" - underwear_name = "panties" - icon_state = "panties_noback" - has_color = TRUE - -/datum/category_item/underwear/bottom/boxers_loveheart - name = "Boxers, Loveheart" - underwear_name = "boxers" - icon_state = "boxers_loveheart" - -/datum/category_item/underwear/bottom/boxers - name = "Boxers" - underwear_name = "boxers" - icon_state = "boxers" - has_color = TRUE - -/datum/category_item/underwear/bottom/boxers_green_and_blue - name = "Boxers, green & blue striped" - underwear_name = "boxers" - icon_state = "boxers_green_and_blue" - -/datum/category_item/underwear/bottom/panties - name = "Panties" - underwear_name = "panties" - icon_state = "panties" - has_color = TRUE - -/datum/category_item/underwear/bottom/panties/is_default(var/gender) - return gender == FEMALE - -/datum/category_item/underwear/bottom/lacy_thong - name = "Lacy thong" - underwear_name = "thong" - icon_state = "lacy_thong" - -/datum/category_item/underwear/bottom/lacy_thong_alt - name = "Lacy thong, alt" - underwear_name = "thong" - icon_state = "lacy_thong_alt" - has_color = TRUE - -/datum/category_item/underwear/bottom/panties_alt - name = "Panties, alt" - underwear_name = "panties" - icon_state = "panties_alt" - has_color = TRUE - -/datum/category_item/underwear/bottom/compression_shorts - name = "Compression shorts" - icon_state = "compression_shorts" - has_color = TRUE - -/datum/category_item/underwear/bottom/thong - name = "Thong" - underwear_name = "thong" - icon_state = "thong" - has_color = TRUE - -/datum/category_item/underwear/bottom/expedition_pt_shorts - name = "PT shorts, Expeditionary Corps" - icon_state = "expedition_shorts" - -/datum/category_item/underwear/bottom/fleet_pt_shorts - name = "PT shorts, Fleet" - icon_state = "fleet_shorts" - -/datum/category_item/underwear/bottom/army_pt_shorts - name = "PT shorts, Army" - icon_state = "army_shorts" - -/datum/category_item/underwear/bottom/longjon - name = "Long John Bottoms" - underwear_name = "long johns" - icon_state = "ljonb" - has_color = TRUE diff --git a/code/datums/underwear/socks.dm b/code/datums/underwear/socks.dm deleted file mode 100644 index 4b26895219376..0000000000000 --- a/code/datums/underwear/socks.dm +++ /dev/null @@ -1,75 +0,0 @@ -/datum/category_item/underwear/socks - underwear_name = "socks" - underwear_gender = PLURAL - underwear_type = /obj/item/underwear/socks - -/datum/category_item/underwear/socks/none - always_last = TRUE - name = "None" - underwear_type = null - -/datum/category_item/underwear/socks/normal - name = "Normal" - icon_state = "socks_norm" - has_color = TRUE - -/datum/category_item/underwear/socks/short - name = "Short" - icon_state = "socks_short" - has_color = TRUE - -/datum/category_item/underwear/socks/thigh - name = "Thigh" - underwear_name = "thigh highs" - icon_state = "socks_thigh" - has_color = TRUE - -/datum/category_item/underwear/socks/knee - name = "Knee" - underwear_name = "knee highs" - icon_state = "socks_knee" - has_color = TRUE - -/datum/category_item/underwear/socks/striped_knee - name = "Knee, striped" - underwear_name = "knee highs" - icon_state = "striped_knee" - has_color = TRUE - -/datum/category_item/underwear/socks/striped_thigh - name = "Thigh, striped" - underwear_name = "thigh highs" - icon_state = "striped_thigh" - has_color = TRUE - -/datum/category_item/underwear/socks/pantyhose - name = "Pantyhose" - underwear_name = "pantyhose" - icon_state = "pantyhose" - -/datum/category_item/underwear/socks/thin_thigh - name = "Thigh, thin" - underwear_name = "thigh highs" - icon_state = "thin_thigh" - has_color = TRUE - -/datum/category_item/underwear/socks/thin_knee - name = "Knee, thin" - underwear_name = "knee highs" - icon_state = "thin_knee" - has_color = TRUE - -/datum/category_item/underwear/socks/rainbow_thigh - name = "Thigh, rainbow" - underwear_name = "thigh highs" - icon_state = "rainbow_thigh" - -/datum/category_item/underwear/socks/rainbow_knee - name = "Knee, rainbow" - underwear_name = "knee highs" - icon_state = "rainbow_knee" - -/datum/category_item/underwear/socks/fishnet - name = "Fishnet" - underwear_name = "fishnet" - icon_state = "fishnet" diff --git a/code/datums/underwear/top.dm b/code/datums/underwear/top.dm deleted file mode 100644 index 6b559214f65ed..0000000000000 --- a/code/datums/underwear/top.dm +++ /dev/null @@ -1,49 +0,0 @@ -/datum/category_item/underwear/top - underwear_name = "bra" - underwear_type = /obj/item/underwear/top - -/datum/category_item/underwear/top/none - name = "None" - always_last = TRUE - underwear_type = null - -/datum/category_item/underwear/top/none/is_default(var/gender) - return gender != FEMALE - -/datum/category_item/underwear/top/bra - is_default = TRUE - name = "Bra" - icon_state = "bra" - has_color = TRUE - -/datum/category_item/underwear/top/bra/is_default(var/gender) - return gender == FEMALE - -/datum/category_item/underwear/top/sports_bra - name = "Sports bra" - icon_state = "sports_bra" - has_color = TRUE - -/datum/category_item/underwear/top/sports_bra_alt - name = "Sports bra, alt" - icon_state = "sports_bra_alt" - has_color = TRUE - -/datum/category_item/underwear/top/lacy_bra - name = "Lacy bra" - icon_state = "lacy_bra" - -/datum/category_item/underwear/top/lacy_bra_alt - name = "Lacy bra, alt" - icon_state = "lacy_bra_alt" - -/datum/category_item/underwear/top/halterneck_bra - name = "Halterneck bra" - icon_state = "halterneck_bra" - has_color = TRUE - -/datum/category_item/underwear/top/tube_top - name = "Tube Top" - underwear_name = "tube top" - icon_state = "tubetop" - has_color = TRUE diff --git a/code/datums/underwear/undershirt.dm b/code/datums/underwear/undershirt.dm deleted file mode 100644 index 913ec9cf50b20..0000000000000 --- a/code/datums/underwear/undershirt.dm +++ /dev/null @@ -1,221 +0,0 @@ -/datum/category_item/underwear/undershirt - underwear_name = "undershirt" - underwear_type = /obj/item/underwear/undershirt - -/datum/category_item/underwear/undershirt/none - is_default = TRUE - name = "None" - always_last = TRUE - underwear_type = null - -/datum/category_item/underwear/undershirt/shirt - name = "Shirt" - icon_state = "undershirt" - has_color = TRUE - -/datum/category_item/underwear/undershirt/shirt_long - name = "Long Shirt" - icon_state = "undershirt_long" - has_color = TRUE - -/datum/category_item/underwear/undershirt/tank_top - name = "Tank top" - underwear_name = "tank top" - icon_state = "tanktop" - has_color = TRUE - -/datum/category_item/underwear/undershirt/tank_top_alt - name = "Tank top, alt" - underwear_name = "tank top" - icon_state = "tanktop_alt" - has_color = TRUE - -/datum/category_item/underwear/undershirt/tank_top_fleet - name = "Tank top, Fleet" - underwear_name = "tank top" - icon_state = "tank_fleet" - -/datum/category_item/underwear/undershirt/tank_top_expedition - name = "Tank top, Expeditionary Corps" - underwear_name = "tank top" - icon_state = "tank_expedition" - -/datum/category_item/underwear/undershirt/tank_top_fire - name = "Tank top, fire" - underwear_name = "tank top" - icon_state = "tank_fire" - -/datum/category_item/underwear/undershirt/tank_top_rainbow - name = "Tank top, rainbow" - underwear_name = "tank top" - icon_state = "tank_rainbow" - -/datum/category_item/underwear/undershirt/tank_top_stripes - name = "Tank top, striped" - underwear_name = "tank top" - icon_state = "tank_stripes" - -/datum/category_item/underwear/undershirt/tank_top_sun - name = "Tank top, sun" - underwear_name = "tank top" - icon_state = "tank_sun" - -/datum/category_item/underwear/undershirt/shirt_button - name = "Shirt, button down" - icon_state = "shirt_long" - has_color = TRUE - -/datum/category_item/underwear/undershirt/shirt_expedition - name = "Shirt, Expeditionary Corps" - icon_state = "expedition" - -/datum/category_item/underwear/undershirt/shirt_heart - name = "Shirt, heart" - icon_state = "lover" - -/datum/category_item/underwear/undershirt/shirt_love_nt - name = "Shirt, I<3NT" - icon_state = "ilovent" - -/datum/category_item/underwear/undershirt/shirt_fleet - name = "Shirt, Fleet" - icon_state = "fleet" - -/datum/category_item/underwear/undershirt/shirt_army - name = "Shirt, Army" - icon_state = "army" - -/datum/category_item/underwear/undershirt/shirt_nt - name = "Shirt, NT" - icon_state = "shirt_nano" - -/datum/category_item/underwear/undershirt/shortsleeve_shirt - name = "Shortsleeve shirt" - icon_state = "shortsleeve" - has_color = TRUE - -/datum/category_item/underwear/undershirt/polo_shirt - name = "Polo shirt" - icon_state = "polo" - has_color = TRUE - -/datum/category_item/underwear/undershirt/sport_shirt_green - name = "Sport shirt, green" - icon_state = "greenshirtsport" - -/datum/category_item/underwear/undershirt/sport_shirt_red - name = "Sport shirt, red" - icon_state = "redshirtsport" - -/datum/category_item/underwear/undershirt/sport_shirt_blue - name = "Sport shirt, blue" - icon_state = "blueshirtsport" - -/datum/category_item/underwear/undershirt/shirt_tiedye - name = "Shirt, tiedye" - icon_state = "shirt_tiedye" - -/datum/category_item/underwear/undershirt/shirt_blue_striped - name = "Shirt, blue stripes" - icon_state = "shirt_stripes" - -/datum/category_item/underwear/undershirt/longjon - name = "Long John Shirt" - underwear_name = "long johns" - icon_state = "ljont" - has_color = TRUE - -/datum/category_item/underwear/undershirt/longstripe_black - name = "Longsleeve Striped Shirt, Black" - icon_state = "longstripe" - -/datum/category_item/underwear/undershirt/longstripe_blue - name = "Longsleeve Striped Shirt, Blue" - icon_state = "longstripe_blue" - -/datum/category_item/underwear/undershirt/blouse_female - name = "Women's Dress Shirt" - icon_state = "blouse_female" - -/datum/category_item/underwear/undershirt/undershirt_female - name = "Undershirt, Female" - icon_state = "undershirt_female" - has_color = TRUE - -/datum/category_item/underwear/undershirt/tanktop_female - name = "Tanktop, Female" - icon_state = "tanktop_female" - has_color = TRUE - -/datum/category_item/underwear/undershirt/shortsleeve_female - name = "Shortsleeve Shirt, Female" - icon_state = "shortsleeve_female" - has_color = TRUE - -/datum/category_item/underwear/undershirt/shirt_long_female - name = "Button Down Shirt, Female" - icon_state = "shirt_long_female" - has_color = TRUE - -/datum/category_item/underwear/undershirt/undershirt_long_female - name = "Longsleeve Shirt, Female" - icon_state = "undershirt_long_female" - has_color = TRUE - -/datum/category_item/underwear/undershirt/turtleneck - name = "Turtleneck Sweater" - icon_state = "turtleneck" - has_color = TRUE - -/datum/category_item/underwear/undershirt/tanktop_alt_female - name = "Tanktop alt, Female" - underwear_name = "tanktop" - icon_state = "tanktop_alt_female" - has_color = TRUE - -/datum/category_item/underwear/undershirt/polo_female - name = "Polo, Female" - icon_state = "polo_female" - has_color = TRUE - -/datum/category_item/underwear/undershirt/tank_fleet_female - name = "Tank top, Fleet, Female" - underwear_name = "tanktop" - icon_state = "tank_fleet_female" - -/datum/category_item/underwear/undershirt/fleet_female - name = "Shirt, Fleet, Female" - icon_state = "fleet_female" - -/datum/category_item/underwear/undershirt/army_female - name = "Shirt, Army, Female" - icon_state = "army_female" - -/datum/category_item/underwear/undershirt/expedition_female - name = "Shirt, Expeditionary Corps, Female" - icon_state = "expedition_female" - -/datum/category_item/underwear/undershirt/tank_top_expedition_female - name = "Tank top, Expeditionary Corps, Female" - underwear_name = "tank top" - icon_state = "tank_expedition_female" - -/datum/category_item/underwear/undershirt/polo_corp - name = "Polo, corporate" - icon_state = "corp_polo" - -/datum/category_item/underwear/undershirt/polo_nt - name = "Polo, NanoTrasen" - icon_state = "ntpolo" - -/datum/category_item/underwear/undershirt/polo_dais - name = "Polo, Deimos Advanced Information Systems" - icon_state = "dais_polo" - -/datum/category_item/underwear/undershirt/dress_shirt_female - name = "Dress shirt, female" - icon_state = "undershirt_dress_female" - -/datum/category_item/underwear/undershirt/dress_shirt - name = "Dress shirt" - icon_state = "undershirt_dress" \ No newline at end of file diff --git a/code/datums/underwear/underwear.dm b/code/datums/underwear/underwear.dm deleted file mode 100644 index 774cf54bafffe..0000000000000 --- a/code/datums/underwear/underwear.dm +++ /dev/null @@ -1,75 +0,0 @@ -/**************************** -* Category Collection Setup * -****************************/ -/datum/category_collection/underwear - category_group_type = /datum/category_group/underwear - -/************* -* Categories * -*************/ -/datum/category_group/underwear - var/sort_order // Lower sort order is applied as icons first - -/datum/category_group/underwear/dd_SortValue() - return sort_order - -/datum/category_group/underwear/top - name = "Underwear, top" - sort_order = 1 - category_item_type = /datum/category_item/underwear/top - -/datum/category_group/underwear/bottom - name = "Underwear, bottom" - sort_order = 2 - category_item_type = /datum/category_item/underwear/bottom - -/datum/category_group/underwear/socks - name = "Socks" - sort_order = 3 - category_item_type = /datum/category_item/underwear/socks - -/datum/category_group/underwear/undershirt - name = "Undershirt" - sort_order = 4 // Undershirts currently have the highest sort order because they may cover both underwear and socks. - category_item_type = /datum/category_item/underwear/undershirt - -/******************* -* Category entries * -*******************/ -/datum/category_item/underwear - var/always_last = FALSE // Should this entry be sorte last? - var/is_default = FALSE // Should this entry be considered the default for its type? - var/icon = 'icons/mob/human.dmi' // Which icon to get the underwear from. - var/icon_state // And the particular item state. - var/list/tweaks = list() // Underwear customizations. - var/has_color = FALSE - - var/underwear_name // The name of the resulting underwear - var/underwear_gender = NEUTER // Singular or plural form? - var/underwear_type // The kind of underwear item this datum will create. - -/datum/category_item/underwear/New() - if(has_color) - tweaks += gear_tweak_free_color_choice() - -/datum/category_item/underwear/dd_SortValue() - if(always_last) - return "~"+name - return name - -/datum/category_item/underwear/proc/is_default(var/gender) - return is_default - -/datum/category_item/underwear/proc/create_underwear(var/mob/user, var/list/metadata) - if(!underwear_type) - return - - var/obj/item/underwear/UW = new underwear_type() - UW.SetName(underwear_name) - UW.gender = underwear_gender - UW.icon = icon - UW.icon_state = icon_state - - for(var/datum/gear_tweak/gt in tweaks) - gt.tweak_item(user, UW, metadata && metadata["[gt]"] ? metadata["[gt]"] : gt.get_default()) - return UW diff --git a/code/datums/uplink/ammunition.dm b/code/datums/uplink/ammunition.dm deleted file mode 100644 index fdd5591e0b58e..0000000000000 --- a/code/datums/uplink/ammunition.dm +++ /dev/null @@ -1,136 +0,0 @@ -/************* -* Ammunition * -*************/ -/datum/uplink_item/item/ammo - item_cost = 4 - category = /datum/uplink_category/ammunition - -/datum/uplink_item/item/ammo/holdout - name = "Small Magazine" - desc = "A magazine for small pistols. Contains 8 rounds." - item_cost = 3 - path = /obj/item/ammo_magazine/pistol/small - -/datum/uplink_item/item/ammo/empslug - name = "Haywire Slug" - desc = "Single 12-gauge shotgun slug fitted with a single-use ion pulse generator." - item_cost = 1 - path = /obj/item/ammo_casing/shotgun/emp - -/datum/uplink_item/item/ammo/holdout_speedloader - name = "Small Speedloader" - desc = "A speedloader for small revolvers. Contains 6 rounds." - item_cost = 3 - path = /obj/item/ammo_magazine/speedloader/small - -/datum/uplink_item/item/ammo/darts - name = "Dart Cartridge" - desc = "A small cartridge for a gas-powered dart gun. Contains 5 hollow darts." - path = /obj/item/ammo_magazine/chemdart - -/datum/uplink_item/item/ammo/speedloader - name = "Standard Speedloader" - desc = "A speedloader for standard revolvers. Contains 6 rounds." - item_cost = 8 - path = /obj/item/ammo_magazine/speedloader - -/datum/uplink_item/item/ammo/rifle - name = "Rifle Magazine" - desc = "A magazine for assault rifles. Contains 20 rounds." - item_cost = 8 - path = /obj/item/ammo_magazine/rifle - -/datum/uplink_item/item/ammo/bullpup //for zipguns - name = "Bullpup Rifle Magazine" - desc = "A magazine for bullpup assault rifles. Contains 15 rounds." - item_cost = 8 - path = /obj/item/ammo_magazine/mil_rifle - -/datum/uplink_item/item/ammo/sniperammo - name = "Ammobox of Sniper Rounds" - desc = "A container of rounds for the anti-materiel rifle. Contains 7 rounds." - item_cost = 8 - path = /obj/item/storage/box/ammo/sniperammo - antag_roles = list(MODE_MERCENARY) - -/datum/uplink_item/item/ammo/sniperammo/apds - name = "Ammobox of APDS Sniper Rounds" - desc = "A container of armor piercing rounds for the anti-materiel rifle. Contains 3 rounds." - item_cost = 12 - path = /obj/item/storage/box/ammo/sniperammo/apds - antag_roles = list(MODE_MERCENARY) - -/datum/uplink_item/item/ammo/shotgun_shells - name = "Ammobox of Shotgun Shells" - desc = "An ammobox with 2 sets of shell holders. Contains 8 buckshot shells total." - item_cost = 8 - path = /obj/item/storage/box/ammo/shotgunshells - -/datum/uplink_item/item/ammo/flechette_shells - name = "Ammobox of Flechette Shells" - desc = "An ammobox with 2 sets of shell holders. Contains 8 extra accurate flechette shells." - item_cost = 12 - path = /obj/item/storage/box/ammo/flechetteshells - antag_roles = list(MODE_MERCENARY) - -/datum/uplink_item/item/ammo/shotgun_slugs - name = "Ammobox of Shotgun Slugs" - desc = "An ammobox with 2 sets of shell holders. Contains 8 slugs total." - item_cost = 8 - path = /obj/item/storage/box/ammo/shotgunammo - -/datum/uplink_item/item/ammo/machine_pistol - name = "Standard Stick Magazine" - desc = "A magazine for standard machine pistols. Contains 16 rounds." - item_cost = 8 - path = /obj/item/ammo_magazine/machine_pistol - -/datum/uplink_item/item/ammo/smg - name = "Standard Box Magazine" - desc = "A magazine for standard SMGs. Contains 20 rounds." - item_cost = 8 - path = /obj/item/ammo_magazine/smg - antag_roles = list(MODE_MERCENARY) - -/datum/uplink_item/item/ammo/pistol - name = "Standard Doublestack Magazine" - desc = "A magazine for standard military pistols. Contains 15 rounds." - item_cost = 9 - path = /obj/item/ammo_magazine/pistol/double - -/datum/uplink_item/item/ammo/magnum - name = "Magnum Magazine" - desc = "A magazine for magnum pistols. Contains 7 rounds." - item_cost = 8 - path = /obj/item/ammo_magazine/magnum - -/datum/uplink_item/item/ammo/speedloader_magnum - name = "Magnum Speedloader" - desc = "A speedloader for magnum revolvers. Contains 6 rounds." - item_cost = 8 - path = /obj/item/ammo_magazine/speedloader/magnum - -/datum/uplink_item/item/ammo/flechette - name = "Flechette Rifle Magazine" - desc = "A rifle magazine loaded with flechette rounds. Contains 9 rounds." - item_cost = 8 - path = /obj/item/magnetic_ammo - antag_roles = list(MODE_MERCENARY) - -/datum/uplink_item/item/ammo/pistol_emp - name = "Standard EMP Ammo Box" - desc = "A box of EMP ammo for standard pistols. Contains 15 rounds." - item_cost = 8 - path = /obj/item/ammo_magazine/box/emp/pistol - -/datum/uplink_item/item/ammo/holdout_emp - name = "Small EMP Ammo Box" - desc = "A box of EMP ammo for small pistols and revolvers. Contains 8 rounds." - item_cost = 6 - path = /obj/item/ammo_magazine/box/emp/smallpistol - -/datum/uplink_item/item/ammo/stripperclip - name = "Stripper Clip" - desc = "A stripper clip used to load bolt action rifles. Contains just 5 rounds." - item_cost = 2 - path = /obj/item/ammo_magazine/speedloader/clip \ No newline at end of file diff --git a/code/datums/uplink/armor.dm b/code/datums/uplink/armor.dm deleted file mode 100644 index 42757038a1f32..0000000000000 --- a/code/datums/uplink/armor.dm +++ /dev/null @@ -1,33 +0,0 @@ -/******************** -* Armor and Space Suits * -********************/ -/datum/uplink_item/item/armor - category = /datum/uplink_category/armor - -/datum/uplink_item/item/armor/heavy_armor - name = "Heavy Armor Vest and Helmet" - desc = "This satchel holds a combat helmet and fully equipped plate carrier. \ - Suit up, and strap in, things are about to get hectic." - item_cost = 16 - antag_costs = list(MODE_MERCENARY = 20) - path = /obj/item/storage/backpack/satchel/syndie_kit/armor - -/datum/uplink_item/item/armor/space_suit - name = "Voidsuit and Tactical Mask" - desc = "A satchel containing a non-regulation voidsuit, voidsuit helmet, tactical mask, and oxygen tank. \ - Conceal your identity, while also not dying in space." - item_cost = 28 - antag_costs = list(MODE_MERCENARY = 30) - path = /obj/item/storage/backpack/satchel/syndie_kit/space - -/datum/uplink_item/item/armor/combat_rig - name = "Crimson combat RIG" - item_cost = 120 - antag_roles = list(MODE_MERCENARY) - path = /obj/item/rig/merc/empty - -/datum/uplink_item/item/armor/heavy_rig - name = "Crimson heavy combat RIG" - item_cost = 200 - antag_roles = list(MODE_MERCENARY) - path = /obj/item/rig/merc/heavy/empty diff --git a/code/datums/uplink/augments.dm b/code/datums/uplink/augments.dm deleted file mode 100644 index be1cee7a0bc30..0000000000000 --- a/code/datums/uplink/augments.dm +++ /dev/null @@ -1,51 +0,0 @@ -/*********** -* Augments * -***********/ - -/datum/uplink_item/item/augment - category = /datum/uplink_category/augments - -/datum/uplink_item/item/augment/aug_internal_air_system - name = "Internal Air System CBM (chest, active)" - desc = "This flexible air sack housed in your torso slowly fills with safe air as you breathe, and can be used as a low-capacity internals source if nothing else is available. \ - It will automatically filter out the safest air for your species. It has been configured to be undetectable on body scanners. \ - NOTE: This augment is incompatible with synthetic biologies." - item_cost = 24 - path = /obj/item/device/augment_implanter/internal_air_system - -/datum/uplink_item/item/augment/aug_adaptive_binoculars - name = "Adaptive Binoculars CBM (head)" - desc = "A pair of ultrathin lenses can be deployed or retracted at will from your eye sockets. They have powerful zoom capabilities, allowing you to see into the distance. \ - They have been configured to be undetectable on body scanners." - item_cost = 30 - path = /obj/item/device/augment_implanter/adaptive_binoculars - -/datum/uplink_item/item/augment/aug_iatric_monitor - name = "Iatric Monitor CBM (head)" - desc = "A small computer system attached to the brain stem that monitors your life signs. It has been configured to be undetectable on body scanners. \ - It can be activated to gain a simple readout of your current physical state that can be understood regardless of your medical skill. \ - NOTE: This augment is incompatible with synthetic biologies." - item_cost = 20 - path = /obj/item/device/augment_implanter/iatric_monitor - -/datum/uplink_item/item/augment/aug_wrist_blade - name = "Wrist Blade CBM (arm)" - desc = "This concealed housing is mounted inside your lower arm, and can be activated to extend a vicious, lightweight blade. Useful for assassinations or self-defense. \ - Developed especially for concealment, its presence will not be revealed by body scanners." - item_cost = 32 // Identical to an energy sword - much less damage, but it has its own benefits, so consider it a sidegrade - path = /obj/item/device/augment_implanter/wrist_blade - -/datum/uplink_item/item/augment/aug_popout_shotgun - name = "Pop-out Shotgun CBM (arm)" - desc = "Replacing a hefty part of your forearm, this mechanism can be controlled with a flicking motion to reveal a long 12-gauge barrel that can fit a single shell. \ - The ultimate trump card when you're out of options. It comes pre-loaded with a single buckshot shell. \ - Due to its bulk, it is impossible to conceal from body scanners, and will be discovered by anyone feeling your bones - install with caution!" - item_cost = 60 - path = /obj/item/device/augment_implanter/popout_shotgun - -/datum/uplink_item/item/augment/aug_power_fist - name = "Concealed Powerfist CBM (arm)" - desc = "A bulky augment that slots in the AG-23 Pneumatic Powerfist. Perfect for when you need something with more oomph. Comes with it's own tank. \ - It is unconcealable from body-scanners, and easily detectable due to it's weight. It requires NON-ORGANIC arms." - item_cost = 60 - path = /obj/item/device/augment_implanter/powerfist diff --git a/code/datums/uplink/badassery.dm b/code/datums/uplink/badassery.dm deleted file mode 100644 index 02bf19dbf5fa1..0000000000000 --- a/code/datums/uplink/badassery.dm +++ /dev/null @@ -1,108 +0,0 @@ -/************ -* Badassery * -************/ -/datum/uplink_item/item/badassery - category = /datum/uplink_category/badassery - -/datum/uplink_item/item/badassery/balloon - name = "For showing that You Are The BOSS (Useless Balloon)" - item_cost = DEFAULT_TELECRYSTAL_AMOUNT - path = /obj/item/toy/balloon - -/datum/uplink_item/item/badassery/balloon/corporate - name = "For showing that you love the company SOO much (Useless Balloon)" - path = /obj/item/toy/balloon/nanotrasen - -/datum/uplink_item/item/badassery/balloon/random - name = "For showing 'Whatevah~' (Useless Balloon)" - desc = "Randomly selects a ballon for you!" - path = /obj/item/toy/balloon - -/datum/uplink_item/item/badassery/balloon/random/get_goods(var/obj/item/device/uplink/U, var/loc) - var/balloon_type = pick(typesof(path)) - var/obj/item/I = new balloon_type(loc) - return I - -/datum/uplink_item/item/badassery/crayonmre - name = "Crayon MRE" - desc = "An exceptionally robust MRE." - item_cost = DEFAULT_TELECRYSTAL_AMOUNT - path = /obj/item/storage/mre/menu11/special - -/datum/uplink_item/item/badassery/modded_foam_gun - name = "Modded foam gun" - desc = "It's a Jorf revolver blaster and 14 weighted darts. Even after aftermarket modification to increase its range and launch velocity, it's not a very effective weapon." - item_cost = 32 - path = /obj/item/storage/box/large/foam_gun/revolver/tampered - -/datum/uplink_item/item/badassery/fortune - name = "A Fortune Cookie" - desc = "Why would you buy this?" - item_cost = DEFAULT_TELECRYSTAL_AMOUNT - path = /obj/item/reagent_containers/food/snacks/fortunecookie - -/************** -* Random Item * -**************/ -/datum/uplink_item/item/badassery/random_one - name = "Random Item" - desc = "Buys you a random item for at least 1 TC. Be careful, this can spend any amount of telecrystals!" - item_cost = 1 - -/datum/uplink_item/item/badassery/random_one/buy(var/obj/item/device/uplink/U, var/mob/user) - var/datum/uplink_random_selection/uplink_selection = get_uplink_random_selection_by_type(/datum/uplink_random_selection/default) - var/datum/uplink_item/item = uplink_selection.get_random_item(U.uses, U) - return item && item.buy(U, user) - -/datum/uplink_item/item/badassery/random_one/can_buy(obj/item/device/uplink/U) - return U.uses - -/datum/uplink_item/item/badassery/random_many - name = "Random Items" - desc = "Buys you as many random items as you can afford. Convenient packaging NOT included!" - -/datum/uplink_item/item/badassery/random_many/cost(var/telecrystals, obj/item/device/uplink/U) - return max(1, telecrystals) - -/datum/uplink_item/item/badassery/random_many/get_goods(var/obj/item/device/uplink/U, var/loc) - var/list/bought_items = list() - for(var/datum/uplink_item/UI in get_random_uplink_items(U, U.uses, loc)) - UI.purchase_log(U) - var/obj/item/I = UI.get_goods(U, loc) - if(istype(I)) - bought_items += I - - return bought_items - -/datum/uplink_item/item/badassery/random_many/purchase_log(obj/item/device/uplink/U) - log_and_message_admins("used \the [U.loc] to buy \a [src]") - -/**************** -* Surplus Crate * -****************/ -/datum/uplink_item/item/badassery/surplus - name = "\improper Surplus Crate" - item_cost = DEFAULT_TELECRYSTAL_AMOUNT * 4 - var/item_worth = DEFAULT_TELECRYSTAL_AMOUNT * 6 - var/icon - -/datum/uplink_item/item/badassery/surplus/New() - ..() - antag_roles = list(MODE_MERCENARY) - desc = "A crate containing [item_worth] telecrystal\s worth of surplus leftovers. If you can find some help to pay for it, you might strike gold." - -/datum/uplink_item/item/badassery/surplus/get_goods(var/obj/item/device/uplink/U, var/loc) - var/obj/structure/largecrate/C = new(loc) - var/random_items = get_random_uplink_items(U, item_worth, C) - for(var/datum/uplink_item/I in random_items) - I.purchase_log(U) - I.get_goods(U, C) - - return C - -/datum/uplink_item/item/badassery/surplus/log_icon() - if(!icon) - var/obj/structure/largecrate/C = /obj/structure/largecrate - icon = image(initial(C.icon), initial(C.icon_state)) - - return "\icon[icon]" diff --git a/code/datums/uplink/devices and tools.dm b/code/datums/uplink/devices and tools.dm deleted file mode 100644 index 6c53bbfc7c19f..0000000000000 --- a/code/datums/uplink/devices and tools.dm +++ /dev/null @@ -1,169 +0,0 @@ -/******************** -* Devices and Tools * -********************/ -/datum/uplink_item/item/tools - category = /datum/uplink_category/tools - -/datum/uplink_item/item/tools/personal_shield - name = "Personal Shield" - desc = "A very expensive device that uses energy to block bullets and lasers from tearing you a new hole." - item_cost = 60 - path = /obj/item/device/personal_shield - -/datum/uplink_item/item/tools/toolbox - name = "Fully Loaded Toolbox" - desc = "A hefty toolbox filled with all the equipment you need to get past any construction or electrical issues. \ - Instructions and materials not included." - item_cost = 8 - path = /obj/item/storage/toolbox/syndicate - -/datum/uplink_item/item/tools/ductape - name = "Duct Tape" - desc = "A roll of duct tape." - item_cost = 2 - path = /obj/item/tape_roll - -/datum/uplink_item/item/tools/money - name = "Operations Funding" - item_cost = 8 - path = /obj/item/storage/secure/briefcase/money -/datum/uplink_item/item/tools/money/New() - . = ..() - desc = "A briefcase with 10,000 untraceable [GLOB.using_map.local_currency_name]. Makes a great bribe if they're willing to take you up on your offer." - -/datum/uplink_item/item/tools/clerical - name = "Morphic Clerical Kit" - desc = "Comes with everything you need to fake paperwork, assuming you know how to forge the required documents." - item_cost = 16 - path = /obj/item/storage/backpack/satchel/syndie_kit/clerical - -/datum/uplink_item/item/tools/plastique - name = "C-4" - desc = "Set this on a wall to put a hole exactly where you need it." - item_cost = 16 - path = /obj/item/plastique - -/* //proxima //commented for now -/datum/uplink_item/item/tools/heavy_armor - name = "Heavy Armor Vest and Helmet" - desc = "This satchel holds a combat helmet and fully equipped plate carrier. \ - Suit up, and strap in, things are about to get hectic." - item_cost = 16 - path = /obj/item/storage/backpack/satchel/syndie_kit/armor -*/ -/datum/uplink_item/item/tools/encryptionkey_radio - name = "Encrypted Radio Channel Key" - desc = "This headset encryption key will allow you to speak on a hidden, encrypted radio channel. Use a screwdriver on your headset to exchange keys." - item_cost = 1 - path = /obj/item/device/encryptionkey/syndicate - -/datum/uplink_item/item/tools/shield_diffuser - name = "Handheld Shield Diffuser" - desc = "A small device used to disrupt energy barriers, and allow passage through them." - item_cost = 16 - path = /obj/item/shield_diffuser - -/datum/uplink_item/item/tools/suit_sensor_mobile - name = "Suit Sensor Jamming Device" - desc = "This tiny device can temporarily change sensor levels, report random readings, or false readings on any \ - suit sensors in your vicinity. The range at which this device operates can be toggled as well. All of these \ - options drain the internal battery." - item_cost = 20 - path = /obj/item/device/suit_sensor_jammer - -/datum/uplink_item/item/tools/encryptionkey_binary - name = "Binary Translator Key" - desc = "This headset encryption key will allow you to both listen and speak on the binary channel that \ - synthetics and AI have access to. Remember, non-synths don't normally have access to this channel, so talking in it will raise suspicion. \ - Use a screwdriver on your headset to exchange keys." - item_cost = 20 - path = /obj/item/device/encryptionkey/binary - -/datum/uplink_item/item/tools/emag - name = "Cryptographic Sequencer" - desc = "An electromagnetic card capable of scrambling electronics to either subvert them into serving you, \ - or giving you access to things you normally can't. Doors can be opened with this card \ - even if you aren't normally able to, but will destroy them in the proccess. This card can have its appearance changed \ - to look less conspicuous." - item_cost = 24 - path = /obj/item/card/emag - -/datum/uplink_item/item/tools/hacking_tool - name = "Door Hacking Tool" - item_cost = 24 - path = /obj/item/device/multitool/hacktool - desc = "Appears and functions as a standard multitool until a screwdriver is used to toggle it. \ - While in hacking mode, this device will grant full access to any airlock in 20 to 40 seconds. \ - This device will be able to continuously reaccess the last 6 to 8 airlocks it was used on." - -/* //proxima //commented for now -/datum/uplink_item/item/tools/space_suit - name = "Voidsuit and Tactical Mask" - desc = "A satchel containing a non-regulation voidsuit, voidsuit helmet, tactical mask, and oxygen tank. \ - Conceal your identity, while also not dying in space." - item_cost = 28 - path = /obj/item/storage/backpack/satchel/syndie_kit/space -*/ -/datum/uplink_item/item/tools/thermal - name = "Thermal Imaging Glasses" - desc = "A pair of meson goggles that have been modified to instead show synthetics or living creatures, through thermal imaging." - item_cost = 24 - path = /obj/item/clothing/glasses/thermal/syndi - antag_roles = list(MODE_TRAITOR) - -/datum/uplink_item/item/tools/flashdark - name = "Flashdark" - desc = "A device similar to a flash light that absorbs the surrounding light, casting a shadowy, black mass." - item_cost = 32 - path = /obj/item/device/flashlight/flashdark - -/datum/uplink_item/item/tools/powersink - name = "Powersink (DANGER!)" - desc = "A device, that when bolted down to an exposed wire, spikes the surrounding electrical systems, \ - draining power at an alarming rate. Use with caution, as this will be extremely noticable to anyone \ - monitoring the power systems." - item_cost = 40 - path = /obj/item/device/powersink - -/datum/uplink_item/item/tools/ai_module - name = "Hacked AI Upload Module" - desc = "A module that can be used anonymously add a singular, top level law to an active AI. \ - All you need to do is write in the law and insert it into any available AI Upload Console." - item_cost = 52 - path = /obj/item/aiModule/syndicate - -/datum/uplink_item/item/tools/supply_beacon - name = "Hacked Supply Beacon (DANGER!)" - desc = "Wrench this large beacon onto an exposed power cable, in order to activate it. This will call in a \ - drop pod to the target location, containing a random assortment of (possibly useful) items. \ - The ship's computer system will announce when this pod is enroute." - item_cost = 52 - path = /obj/item/supply_beacon - -/datum/uplink_item/item/tools/camera_mask - name = "Camera MIU" - desc = "Wearing this mask allows you to remotely view any cameras you currently have access to. Take the mask off to stop viewing." - item_cost = 60 - antag_costs = list(MODE_MERCENARY = 30) - path = /obj/item/clothing/mask/ai - -/datum/uplink_item/item/tools/interceptor - name = "Radio Interceptor" - item_cost = 30 - path = /obj/item/device/radio/intercept - desc = "A receiver-like device that can intercept secure radio channels. This item is too big to fit into your pockets." - -/datum/uplink_item/item/tools/ttv - name = "Binary Gas Bomb" - item_cost = 30 - path = /obj/effect/spawner/newbomb/traitor - desc = "A remote-activated phoron-oxygen bomb assembly with an included signaler. \ - A flashing disclaimer begins with the warning 'SOME DISASSEMBLY/REASSEMBLY REQUIRED.'" - -/datum/uplink_item/item/tools/polychromic_dye_bottle - name = "Extra-Strength Polychromic Dye" - item_cost = 10 - path = /obj/item/reagent_containers/glass/bottle/dye/polychromic/strong - desc = "15 units of a tasteless dye that causes chemical mixtures to take on the color of the dye itself. \ - Very useful for disguising poisons to the untrained eye; even large amounts of reagents can be fully recolored with only a few drops of dye. \ - Like the mundane variety of polychromic dye, you can use the bottle in your hand to change the dye's color to suit your needs." diff --git a/code/datums/uplink/grenades.dm b/code/datums/uplink/grenades.dm deleted file mode 100644 index 37d87e6b6cba2..0000000000000 --- a/code/datums/uplink/grenades.dm +++ /dev/null @@ -1,84 +0,0 @@ -/*********** -* Grenades * -************/ -/datum/uplink_item/item/grenades - category = /datum/uplink_category/grenades - -/datum/uplink_item/item/grenades/anti_photon - name = "1x Photon Disruption Grenade" - desc = "An experimental device for temporarily removing light in a limited area for a small amount of time." - item_cost = 4 - path = /obj/item/grenade/anti_photon - -/datum/uplink_item/item/grenades/anti_photons - name = "5x Photon Disruption Grenades" - item_cost = 16 - path = /obj/item/storage/box/anti_photons - -/datum/uplink_item/item/grenades/smoke - name = "1x Smoke Grenade" - desc = "A grenade that will erupt into a vision obscuring cloud of smoke. Makes for great getaways!" - item_cost = 4 - path = /obj/item/grenade/smokebomb - -/datum/uplink_item/item/grenades/smokes - name = "5x Smoke Grenades" - item_cost = 16 - path = /obj/item/storage/box/smokes - -/datum/uplink_item/item/grenades/emp - name = "1x EMP Grenade" - desc = "A grenade that will send electronics into a frenzy, or possibly fry them altogether. The timer is adjustable with a screwdriver." - item_cost = 8 - path = /obj/item/grenade/empgrenade - -/datum/uplink_item/item/grenades/emps - name = "5x EMP Grenades" - item_cost = 24 - path = /obj/item/storage/box/emps - -/datum/uplink_item/item/grenades/frag_high_yield - name = "Fragmentation Bomb" - item_cost = 24 - antag_roles = list(MODE_MERCENARY) // yeah maybe regular traitors shouldn't be able to get these - path = /obj/item/grenade/frag/high_yield - -/datum/uplink_item/item/grenades/fragshell - name = "1x Fragmentation Shell" - desc = "Weaker than standard fragmentation grenades, these devices can be fired from a grenade launcher." - item_cost = 10 - antag_roles = list(MODE_MERCENARY) - path = /obj/item/grenade/frag/shell - -/datum/uplink_item/item/grenades/fragshells - name = "5x Fragmentation Shells" - desc = "Weaker than standard fragmentation grenades, these devices can be fired from a grenade launcher." - item_cost = 40 - antag_roles = list(MODE_MERCENARY) - path = /obj/item/storage/box/fragshells - -/datum/uplink_item/item/grenades/frag - name = "1x Fragmentation Grenade" - item_cost = 10 - antag_roles = list(MODE_MERCENARY) - path = /obj/item/grenade/frag - -/datum/uplink_item/item/grenades/frags - name = "5x Fragmentation Grenades" - item_cost = 40 - antag_roles = list(MODE_MERCENARY) - path = /obj/item/storage/box/frags - -/datum/uplink_item/item/grenades/supermatter - name = "1x Supermatter Grenade" - desc = "This grenade contains a small supermatter shard which will delaminate upon activation and pull in nearby objects, irradiate lifeforms, and eventually explode." - item_cost = 15 - antag_roles = list(MODE_MERCENARY) - path = /obj/item/grenade/supermatter - -/datum/uplink_item/item/grenades/supermatters - name = "5x Supermatter Grenades" - desc = "These grenades contains a small supermatter shard which will delaminate upon activation and pull in nearby objects, irradiate lifeforms, and eventually explode." - item_cost = 60 - antag_roles = list(MODE_MERCENARY) - path = /obj/item/storage/box/supermatters \ No newline at end of file diff --git a/code/datums/uplink/hardsuit_modules.dm b/code/datums/uplink/hardsuit_modules.dm deleted file mode 100644 index 50ce2ed52c0b4..0000000000000 --- a/code/datums/uplink/hardsuit_modules.dm +++ /dev/null @@ -1,42 +0,0 @@ -/******************* -* Hardsuit Modules * -*******************/ -/datum/uplink_item/item/hardsuit_modules - category = /datum/uplink_category/hardsuit_modules - -/datum/uplink_item/item/hardsuit_modules/energy_net - name = "\improper Net Projector" - desc = "A module capable of creating an energy net device that can be thrown in order to capture targets like the prey they are." - item_cost = 20 - path = /obj/item/rig_module/fabricator/energy_net - -/datum/uplink_item/item/hardsuit_modules/ewar_voice - name = "\improper Electrowarfare Suite and Voice Synthesiser" - desc = "Includes two modules that, once installed and activated, are capable of masking your voice and disrupting the AI from tracking you." - item_cost = 24 - path = /obj/item/storage/backpack/satchel/syndie_kit/ewar_voice - -/datum/uplink_item/item/hardsuit_modules/maneuvering_jets - name = "\improper Maneuvering Jets" - desc = "A module capable of giving your suit an active thrust system, so that you can maneuver in zero gravity." - item_cost = 32 - path = /obj/item/rig_module/maneuvering_jets - -/datum/uplink_item/item/hardsuit_modules/egun - name = "\improper Mounted Energy Gun" - desc = "A module that drains your power reserves in order to fire an arm mounted energy gun." - item_cost = 48 - path = /obj/item/rig_module/mounted/egun - -/datum/uplink_item/item/hardsuit_modules/power_sink - name = "\improper Power Sink" - desc = "A module capable of recharging your suit's power reserves, by tapping into an exposed, live wire." - item_cost = 48 - path = /obj/item/rig_module/power_sink - -/datum/uplink_item/item/hardsuit_modules/laser_canon - name = "\improper Mounted Laser Cannon" - desc = "A module capable of draining your suit's power reserves in order to fire a shoulder mounted laser cannon." - item_cost = 64 - path = /obj/item/rig_module/mounted/lcannon - antag_roles = list(MODE_MERCENARY) diff --git a/code/datums/uplink/highly_visible_and_dangerous_weapons.dm b/code/datums/uplink/highly_visible_and_dangerous_weapons.dm deleted file mode 100644 index 2df821b46947a..0000000000000 --- a/code/datums/uplink/highly_visible_and_dangerous_weapons.dm +++ /dev/null @@ -1,230 +0,0 @@ -/*************************************** -* Highly Visible and Dangerous Weapons * -***************************************/ -/datum/uplink_item/item/visible_weapons - category = /datum/uplink_category/visible_weapons - -/datum/uplink_item/item/visible_weapons/smallenergy_gun - name = "Small Energy Gun" - desc = "A pocket-sized energy based sidearm with three different lethality settings." - item_cost = 16 - path = /obj/item/gun/energy/gun/small - -/datum/uplink_item/item/visible_weapons/shuriken - name = "Box of shurikens" - desc = "A small box with six shuriken, notably dangerous." - item_cost = 18 - path = /obj/item/storage/box/syndie_kit/shuriken - -/datum/uplink_item/item/visible_weapons/dartgun - name = "Dart Gun" - desc = "A gas-powered dart gun capable of delivering chemical payloads across short distances. \ - Uses a unique cartridge loaded with hollow darts." - item_cost = 20 - path = /obj/item/gun/projectile/dartgun - -/datum/uplink_item/item/visible_weapons/crossbow - name = "Energy Crossbow" - desc = "A self-recharging, almost silent weapon employed by stealth operatives." - item_cost = 24 - path = /obj/item/gun/energy/crossbow - -/datum/uplink_item/item/visible_weapons/pikecube - name = "Pike Cube" - desc = "While it looks like a normal monkey cube, the animal produced is, instead, a space pike. \ Note: The space pike does not like you." - item_cost = 44 - path = /obj/item/reagent_containers/food/snacks/monkeycube/wrapped/pikecube - -/datum/uplink_item/item/visible_weapons/katana - name = "Katana" - desc = "A large sharpened steel blade capable of cutting through anything but the thickest armor." - item_cost = 24 - path = /obj/item/material/sword/katana - -/datum/uplink_item/item/visible_weapons/energy_sword - name = "Energy Sword" - desc = "A hilt, that when activated, creates a solid beam of pure energy in the form of a sword. \ - Able to slice through people like butter!" - item_cost = 32 - path = /obj/item/melee/energy/sword - -/datum/uplink_item/item/visible_weapons/silenced - name = "Small Silenced Pistol" - desc = "A kit with a pocket-sized holdout pistol, silencer, and an extra magazine. \ - Attaching the silencer will make it too big to conceal in your pocket." - item_cost = 32 - path = /obj/item/storage/box/syndie_kit/silenced - -/datum/uplink_item/item/visible_weapons/broomstick - name = "Broomstick Pistol" - desc = "An antique pistol stolen from a museum. Be warned, it may be faulty and comes unloaded." - item_cost = 40 - path = /obj/item/gun/projectile/pistol/broomstick - -/datum/uplink_item/item/badassery/money_cannon - name = "Modified Money Cannon" - item_cost = 48 - path = /obj/item/gun/launcher/money/hacked - desc = "Too much money? Not enough screaming? Try the Money Cannon." - -/datum/uplink_item/item/visible_weapons/energy_gun - name = "Energy Gun" - desc = "A energy based sidearm with three different lethality settings." - item_cost = 32 - path = /obj/item/gun/energy/gun - -/datum/uplink_item/item/visible_weapons/ionpistol - name = "Ion Pistol" - desc = "Ion rifle in compact form." - item_cost = 40 - path = /obj/item/gun/energy/ionrifle/small - -/datum/uplink_item/item/visible_weapons/revolver - name = "Magnum Revolver" - desc = "A high-caliber revolver. Includes an extra speedloader of ammo." - item_cost = 56 - path = /obj/item/storage/backpack/satchel/syndie_kit/revolver - -/datum/uplink_item/item/visible_weapons/grenade_launcher - name = "Grenade Launcher" - desc = "A pump action grenade launcher loaded with a random assortment of grenades." - item_cost = 60 - antag_roles = list(MODE_MERCENARY) - path = /obj/item/gun/launcher/grenade/loaded - -//These are for traitors (or other antags, perhaps) to have the option of purchasing some merc gear. -/datum/uplink_item/item/visible_weapons/submachinegun - name = "Standard Submachine Gun" - desc = "A quick-firing weapon with three togglable fire modes." - item_cost = 52 - path = /obj/item/gun/projectile/automatic/merc_smg - antag_roles = list(MODE_MERCENARY) - -/datum/uplink_item/item/visible_weapons/assaultrifle - name = "Assault Rifle" - desc = "A common rifle with three togglable fire modes." - item_cost = 60 - path = /obj/item/gun/projectile/automatic/assault_rifle - antag_roles = list(MODE_MERCENARY) - -/datum/uplink_item/item/visible_weapons/battlerifle - name = "Battle Rifle" - desc = "Predecessor to the Assault Rifle, works just as well as the new guns." - item_cost = 65 - path = /obj/item/gun/projectile/automatic/battlerifle - antag_roles = list(MODE_MERCENARY) - -/datum/uplink_item/item/visible_weapons/semistrip - name = "Carbine Rifle" - desc = "For arming your comrades on the (not so) cheap!" - item_cost = 55 - path = /obj/item/gun/projectile/sniper/semistrip - antag_roles = list(MODE_REVOLUTIONARY, MODE_MERCENARY) - - -/datum/uplink_item/item/visible_weapons/advanced_energy_gun - name = "Advanced Energy Gun" - desc = "A highly experimental heavy energy weapon, with three different lethality settings." - item_cost = 60 - path = /obj/item/gun/energy/gun/nuclear - -/datum/uplink_item/item/visible_weapons/heavysniper - name = "Anti-materiel Sniper Rifle" - desc = "A secure briefcase that contains an immensely powerful penetrating rifle, as well as seven extra sniper rounds." - item_cost = 68 - path = /obj/item/storage/secure/briefcase/heavysniper - antag_roles = list(MODE_MERCENARY) - -/* -/datum/uplink_item/item/visible_weapons/psi_amp - name = "Cerebroenergetic Psionic Amplifier" - item_cost = 50 - path = /obj/item/clothing/head/helmet/space/psi_amp/lesser - desc = "A powerful, illegal psi-amp. Boosts latent psi-faculties to extremely high levels." -*/ - -/datum/uplink_item/item/visible_weapons/machine_pistol - name = "Standard Machine Pistol" - desc = "A high rate of fire weapon in a smaller form factor, able to sling standard ammunition almost as quick as a submachine gun." - item_cost = 45 - path = /obj/item/gun/projectile/automatic/machine_pistol - -/datum/uplink_item/item/visible_weapons/combat_shotgun - name = "Combat Shotgun" - desc = "A high compacity, pump-action shotgun regularly used for repelling boarding parties in close range scenarios." - item_cost = 52 - path = /obj/item/gun/projectile/shotgun/pump/combat - antag_roles = list(MODE_MERCENARY) - -/datum/uplink_item/item/visible_weapons/sawnoff - name = "Sawnoff Shotgun" - desc = "A shortened double-barrel shotgun, able to fire either one, or both, barrels at once." - item_cost = 45 - path = /obj/item/gun/projectile/shotgun/doublebarrel/sawn - -/datum/uplink_item/item/visible_weapons/deagle - name = "Magnum Pistol" - desc = "A high-caliber pistol that uses 15mm ammunition." - item_cost = 52 - path = /obj/item/gun/projectile/pistol/magnum_pistol - -/datum/uplink_item/item/visible_weapons/sigsauer - name = "Standard Military Pistol" - desc = "A regularly used and reliable weapon that is standard issue in the Navy." - item_cost = 40 - path = /obj/item/gun/projectile/pistol/military/alt - -/datum/uplink_item/item/visible_weapons/detective_revolver - name = "Small Revolver" - desc = "A pocket-sized holdout revolver. Easily concealable.." - item_cost = 24 - path = /obj/item/gun/projectile/revolver/holdout - -/datum/uplink_item/item/visible_weapons/pulserifle - name = "Pulse Rifle" - desc = "A triple burst, heavy laser rifle, with a large battery compacity." - item_cost = 68 - path = /obj/item/gun/energy/pulse_rifle - antag_roles = list(MODE_MERCENARY) - -/datum/uplink_item/item/visible_weapons/flechetterifle - name = "Flechette Rifle" - desc = "A railgun with two togglable fire modes, able to launch flechette ammunition at incredible speeds." - item_cost = 60 - path = /obj/item/gun/magnetic/railgun/flechette - antag_roles = list(MODE_MERCENARY) - -/datum/uplink_item/item/visible_weapons/railgun // Like a semi-auto AMR - name = "Railgun" - desc = "An anti-armour magnetic launching system fed by a high-capacity matter cartridge, \ - capable of firing slugs at intense speeds." - item_cost = 65 - antag_roles = list(MODE_MERCENARY) - path = /obj/item/gun/magnetic/railgun - -/datum/uplink_item/item/visible_weapons/railguntcc // Only slightly better than the normal railgun; but cooler looking - name = "Advanced Railgun" - desc = "A modified prototype of the original railgun implement, this time boring slugs out of steel rods loaded into the chamber, \ - now with even MORE stopping power." - antag_roles = list(MODE_MERCENARY) - item_cost = 75 - path = /obj/item/gun/magnetic/railgun/tcc - -/datum/uplink_item/item/visible_weapons/harpoonbomb - name = "Explosive Harpoon" - item_cost = 12 - path = /obj/item/material/harpoon/bomb - -/datum/uplink_item/item/visible_weapons/incendiary_laser - name = "Incendiary Laser Blaster" - desc = "A laser weapon developed and subsequently banned in Sol space, it sets its targets on fire with dispersed laser technology. \ - Most of these blasters were swiftly bought back and destroyed - but not this one." - item_cost = 40 - path = /obj/item/gun/energy/incendiary_laser - -/datum/uplink_item/item/visible_weapons/boltaction - name = "Bolt Action Rifle" - desc = "For arming your comrades on the cheap!" - item_cost = 12 - path = /obj/item/gun/projectile/heavysniper/boltaction - antag_roles = list(MODE_REVOLUTIONARY) diff --git a/code/datums/uplink/implants.dm b/code/datums/uplink/implants.dm deleted file mode 100644 index 316005903d1e4..0000000000000 --- a/code/datums/uplink/implants.dm +++ /dev/null @@ -1,43 +0,0 @@ -/*********** -* Implants * -***********/ -/datum/uplink_item/item/implants - category = /datum/uplink_category/implants - -/datum/uplink_item/item/implants/imp_freedom - name = "Freedom Implant" - desc = "An implant with an emotive trigger that can break you free of restraints. Show Security who has the real upperhand!" - item_cost = 24 - path = /obj/item/storage/box/syndie_kit/imp_freedom - -/datum/uplink_item/item/implants/imp_compress - name = "Compressed Matter Implant" - desc = "An implant with an emotive trigger used to hide a handheld item in your body. \ - Activating it materializes the item in your hand." - item_cost = 32 - path = /obj/item/storage/box/syndie_kit/imp_compress - -/datum/uplink_item/item/implants/imp_explosive - name = "Explosive Implant (DANGER!)" - desc = "An explosive impant activated with a vocal trigger or radio signal. \ - Use the included pad to adjust the settings before implanting." - item_cost = 40 - path = /obj/item/storage/box/syndie_kit/imp_explosive - -/datum/uplink_item/item/implants/imp_uplink - name = "Uplink Implant" - path = /obj/item/storage/box/syndie_kit/imp_uplink - -/datum/uplink_item/item/implants/imp_uplink/New() - ..() - item_cost = round(DEFAULT_TELECRYSTAL_AMOUNT / 2) - desc = "This implant holds an uplink containing [IMPLANT_TELECRYSTAL_AMOUNT(DEFAULT_TELECRYSTAL_AMOUNT)] telecrystals, \ - activatable with an emotive trigger. You will have access to it, as long as it is still inside of you." - -/datum/uplink_item/item/implants/imp_imprinting - name = "Neural Imprinting Implant" - desc = "An implant able to be used on someone who is under the influence of Mindbreaker Toxin to give them a \ - set of law-like instructions to follow. This kit contains a dose of Mindbreaker Toxin." - item_cost = 20 - path = /obj/item/storage/box/syndie_kit/imp_imprinting - antag_roles = list(MODE_TRAITOR) \ No newline at end of file diff --git a/code/datums/uplink/medical.dm b/code/datums/uplink/medical.dm deleted file mode 100644 index dd273cd1b887a..0000000000000 --- a/code/datums/uplink/medical.dm +++ /dev/null @@ -1,53 +0,0 @@ -/********** -* Medical * -**********/ -/datum/uplink_item/item/medical - category = /datum/uplink_category/medical - -/datum/uplink_item/item/medical/healthyfood - name = "Box of Premium Donk-Pockets" - desc = "A box of healthy fruit turnovers. Great for a quick meal when you're hiding from Security. Instructions included on the box." - item_cost = 8 - path = /obj/item/storage/box/donkpocket_premium - -/datum/uplink_item/item/medical/combatstim - name = "Combat Stimulants" - desc = "A single-use medical injector filled with performance enhancing drugs." - item_cost = 14 - path = /obj/item/reagent_containers/hypospray/autoinjector/combatstim - -/datum/uplink_item/item/medical/stabilisation - name = "Slimline Stabilisation Kit" - desc = "A pocket-sized medkit filled with lifesaving equipment." - item_cost = 16 - path = /obj/item/storage/firstaid/sleekstab - -/datum/uplink_item/item/medical/stasis - name = "Stasis Bag" - desc = "Reusable bag designed to slow down life functions of occupant, especially useful if short on time or in a hostile enviroment." - item_cost = 24 - path = /obj/item/bodybag/cryobag - -/datum/uplink_item/item/medical/defib - name = "Combat Defibrillator" - desc = "A belt-equipped defibrillator that can be rapidly deployed. Does not have the restrictions or safeties of conventional defibrillators and can revive through space suits." - item_cost = 24 - path = /obj/item/defibrillator/compact/combat/loaded - -/datum/uplink_item/item/medical/advancedmedibag - name = "Advanced medical toolkit" - desc = "A duffle bag containing a roller bed, syringes, health analyzer, health HUD, auto-compressor, auto-resuscitator, nanoblood, an advanced first-aid kit, and a pair of nitrile gloves." - item_cost = 24 - path = /obj/item/storage/backpack/dufflebag/syndie/med/full - -/datum/uplink_item/item/medical/surgery - name = "Surgery Kit" - desc = "Contains all the tools needed for on the spot surgery, assuming you actually know what you're doing with them. Floor sterilization not included." - item_cost = 40 - path = /obj/item/storage/firstaid/surgery - -/datum/uplink_item/item/medical/combat - name = "Combat Medical Kit" - desc = "Contains most medicines you need to recover from injuries and illnesses, all in a convenient pill form. Splints for broken bones also included!" - item_cost = 48 - path = /obj/item/storage/firstaid/combat diff --git a/code/datums/uplink/services.dm b/code/datums/uplink/services.dm deleted file mode 100644 index e4f805cf2aedf..0000000000000 --- a/code/datums/uplink/services.dm +++ /dev/null @@ -1,330 +0,0 @@ -/*********** -* Services * -************/ -/datum/uplink_item/item/services - category = /datum/uplink_category/services - -/datum/uplink_item/item/services/fake_ion_storm - name = "Ion Storm Announcement" - desc = "A single-use device, that when activated, fakes an announcement, so people think all their electronic readings are wrong." - item_cost = 8 - path = /obj/item/device/uplink_service/fake_ion_storm - -/datum/uplink_item/item/services/suit_sensor_garble - name = "Complete Suit Sensor Jamming" - desc = "A single-use device, that when activated, garbles all suit sensor data for 10 minutes." - item_cost = 16 - path = /obj/item/device/uplink_service/jamming/garble - -/datum/uplink_item/item/services/fake_rad_storm - name = "Radiation Storm Announcement" - desc = "A single-use device, that when activated, fakes an announcement, so people run to the tunnels in fear of being irradiated! " - item_cost = 24 - path = /obj/item/device/uplink_service/fake_rad_storm - -/datum/uplink_item/item/services/fake_crew_annoncement - name = "Crew Arrival Announcement and Records" - desc = "A single-use device, that when activated, creates a fake crew arrival announcement as well as fake crew records, using your current appearance (including held items!) and worn id card. Prepare well!" - item_cost = 16 - path = /obj/item/device/uplink_service/fake_crew_announcement - -/datum/uplink_item/item/services/fake_command_report - name = "Fake Command Report" - desc = "A single-use device, that when activated, fakes an custom configured command report! " - item_cost = 24 - path = /obj/item/device/uplink_service/fake_command_report - -/datum/uplink_item/item/services/suit_sensor_shutdown - name = "Complete Suit Sensor Shutdown" - desc = "A single-use device, that when activated, completely disables all suit sensors for 10 minutes." - item_cost = 40 - path = /obj/item/device/uplink_service/jamming - -/*************** -* Service Item * -***************/ - -#define AWAITING_ACTIVATION 0 -#define CURRENTLY_ACTIVE 1 -#define HAS_BEEN_ACTIVATED 2 - -/obj/item/device/uplink_service - name = "tiny device" - desc = "Press button to activate. Can be done once and only once." - w_class = ITEM_SIZE_TINY - icon = 'icons/obj/flash_synthetic.dmi' - icon_state = "sflash" - var/state = AWAITING_ACTIVATION - var/service_label = "Unnamed Service" - var/service_duration = 0 SECONDS - -/obj/item/device/uplink_service/Destroy() - if(state == CURRENTLY_ACTIVE) - deactivate() - . = ..() - -/obj/item/device/uplink_service/examine(mob/user, distance) - . = ..() - if(distance <= 1) - switch(state) - if(AWAITING_ACTIVATION) - to_chat(user, "It is labeled '[service_label]' and appears to be awaiting activation.") - if(CURRENTLY_ACTIVE) - to_chat(user, "It is labeled '[service_label]' and appears to be active.") - if(HAS_BEEN_ACTIVATED) - to_chat(user, "It is labeled '[service_label]' and appears to be permanently disabled.") - -/obj/item/device/uplink_service/attack_self(var/mob/user) - if(state != AWAITING_ACTIVATION) - to_chat(user, "\The [src] won't activate again.") - return - var/obj/effect/overmap/visitable/O = map_sectors["[get_z(src)]"] - var/choice = alert(user, "This will only affect your current location[istype(O) ? " ([O])" : ""]. Proceed?","Confirmation", "Yes", "No") - if(choice != "Yes") - return - if(!enable()) - return - state = CURRENTLY_ACTIVE - update_icon() - user.visible_message("\The [user] activates \the [src].", "You activate \the [src].") - log_and_message_admins("has activated the service '[service_label]'", user) - - if(service_duration) - addtimer(CALLBACK(src,/obj/item/device/uplink_service/proc/deactivate), service_duration) - else - deactivate() - -/obj/item/device/uplink_service/proc/deactivate() - if(state != CURRENTLY_ACTIVE) - return - disable() - state = HAS_BEEN_ACTIVATED - update_icon() - playsound(loc, "sparks", 50, 1) - visible_message("\The [src] shuts down with a spark.") - -/obj/item/device/uplink_service/on_update_icon() - switch(state) - if(AWAITING_ACTIVATION) - icon_state = initial(icon_state) - if(CURRENTLY_ACTIVE) - icon_state = "sflash_on" - if(HAS_BEEN_ACTIVATED) - icon_state = "sflash_burnt" - -/obj/item/device/uplink_service/proc/enable(var/mob/user = usr) - return TRUE - -/obj/item/device/uplink_service/proc/disable(var/mob/user = usr) - return - -/***************** -* Sensor Jamming * -*****************/ -/obj/item/device/uplink_service/jamming - service_duration = 10 MINUTES - service_label = "Suit Sensor Shutdown" - var/suit_sensor_jammer_method/ssjm = /suit_sensor_jammer_method/cap_off - -/obj/item/device/uplink_service/jamming/New() - ..() - ssjm = new ssjm() - -/obj/item/device/uplink_service/jamming/Destroy() - qdel(ssjm) - ssjm = null - . = ..() - -/obj/item/device/uplink_service/jamming/enable(var/mob/user = usr) - ssjm.enable() - . = ..() - -/obj/item/device/uplink_service/jamming/disable(var/mob/user = usr) - ssjm.disable() - -/obj/item/device/uplink_service/jamming/garble - service_label = "Suit Sensor Garble" - ssjm = /suit_sensor_jammer_method/random/moderate - -/********************** -* Fake Command Report * -**********************/ -/obj/item/device/uplink_service/fake_command_report - service_label = "Fake Command Report" - /// The message title displayed in the command report - var/title - /// The message contents of the command report - var/message - /// Whether the command report should be broadcast to the public or only to command control programs - var/public_announce = FALSE - - -/obj/item/device/uplink_service/fake_command_report/Initialize() - . = ..() - title = "[GLOB.using_map.boss_name] Update" - - -/obj/item/device/uplink_service/fake_command_report/get_antag_info() - . = ..() - . += {" -

      The fake command report service allows you to send a fake command report to whatever z level you're currently on. You can set the command report's title, message, and whether the full message is broadcast to everyone on the ship, or only to command communications software. The message will appear formatted the same was as legitimate command reports.

      -

      The fake command report service is one-use and becomes useless once used.

      -

      Use the device in-hand for a selection of options to configure the fake report and to send the report once configured.

      -

      You can examine the device in-hand to view the configured title, message, and publicity. Be warned: These are visible even after the device is used. Be sure to properly dispose of it after use!

      - "} - - -/obj/item/device/uplink_service/fake_command_report/examine(mob/user, distance) - . = ..() - if(distance <= 1) - to_chat(user, "The message title is set to '[title]'. The message will be [public_announce ? "broadcast to the public" : "sent only to command consoles"].") - to_chat(user, "The message contents are set to:
      [SPAN_NOTICE(message)]") - - -/obj/item/device/uplink_service/fake_command_report/attack_self(mob/user) - if (state != AWAITING_ACTIVATION) - to_chat(user, SPAN_WARNING("\The [src] won't activate again.")) - return - - var/selection = input(user, "What would you like to do?", "Fake Command Report") as anything in list("Set Title", "Set Message", "Set Publicity", "Send Command Report") - switch (selection) - if ("Set Title") - var/new_title = sanitize(input(user, "What would you like the title to be?", "Fake Command Report", title) as text|null) - if (!new_title || new_title == title) - return - title = new_title - to_chat(user, SPAN_NOTICE("You set the [service_label]'s title to '[title]'.")) - - if ("Set Message") - var/old_message = replacetext(message, "
      ", "\n") - var/new_message = sanitizeSafe(input(user, "What would you like the message to be?", "Fake Command Report", old_message) as message|null, extra = FALSE) - if (!new_message || new_message == message) - return - message = replacetext(new_message, "\n", "
      ") - to_chat(user, SPAN_NOTICE("You set the [service_label]'s message to '[message]'.")) - - if ("Set Publicity") - var/new_public = alert(user, "Should the command report be public?", "Fake Command Report", "Yes", "No") - if (new_public == "Yes") new_public = TRUE - else if (new_public == "No") new_public = FALSE - if (isnull(new_public) || new_public == public_announce) - return - public_announce = new_public - to_chat(user, SPAN_NOTICE("You set the [service_label]'s publicitiy to '[public_announce ? "public" : "private"]'.")) - - if ("Send Command Report") - if (!message) - to_chat(user, SPAN_WARNING("\The [src] has no message to send. Set a message first!")) - return - state = HAS_BEEN_ACTIVATED - update_icon() - user.visible_message( - SPAN_NOTICE("\The [user] activates \the [src]."), - SPAN_NOTICE("You activate the [service_label] device.") - ) - log_and_message_admins("has activated the fake command report service: [title]", user) - enable(user) - - -/obj/item/device/uplink_service/fake_command_report/enable(mob/user) - var/z_levels = GetConnectedZlevels(get_z(user)) - post_comm_message(title, message) - if (public_announce) - command_announcement.Announce(message, title, GLOB.using_map.command_report_sound, msg_sanitized = TRUE, zlevels = z_levels) - else - minor_announcement.Announce("New [GLOB.using_map.company_name] Update available at all communication consoles.", zlevels = z_levels) - . = ..() - - -/***************** -* Fake Ion storm * -*****************/ -/obj/item/device/uplink_service/fake_ion_storm - service_label = "Ion Storm Announcement" - -/obj/item/device/uplink_service/fake_ion_storm/enable(var/mob/user = usr) - ion_storm_announcement(GetConnectedZlevels(get_z(src))) - . = ..() - -/***************** -* Fake Rad storm * -*****************/ -/obj/item/device/uplink_service/fake_rad_storm - service_label = "Radiation Storm Announcement" - -/obj/item/device/uplink_service/fake_rad_storm/enable(var/mob/user = usr) - var/datum/event_meta/EM = new(EVENT_LEVEL_MUNDANE, "Fake Radiation Storm", add_to_queue = 0) - new/datum/event/radiation_storm/syndicate(EM) - . = ..() - -/*************************** -* Fake CentCom Annoncement * -***************************/ -/obj/item/device/uplink_service/fake_update_announcement - service_label = "Update Announcement" - -/obj/item/device/uplink_service/fake_update_announcement/enable(var/mob/user = usr) - var/title = sanitize(input(user, "Enter your announcement title.", "Announcement Title") as null|text) - if(!title) - return - var/message = sanitize(input(user, "Enter your announcement message.", "Announcement Title") as null|text) - if(!message) - return - - if(CanUseTopic(user, GLOB.hands_state) != STATUS_INTERACTIVE) - return FALSE - command_announcement.Announce(message, title, msg_sanitized = 1, zlevels = GetConnectedZlevels(get_z(src))) - return TRUE - -/********************************* -* Fake Crew Records/Announcement * -*********************************/ -/obj/item/device/uplink_service/fake_crew_announcement - service_label = "Crew Arrival Announcement and Records" - -#define COPY_VALUE(KEY) new_record.set_##KEY(random_record.get_##KEY()) - -/obj/item/device/uplink_service/fake_crew_announcement/enable(var/mob/user = usr) - - var/datum/computer_file/report/crew_record/random_record - var/obj/item/card/id/I = user.GetIdCard() - if(GLOB.all_crew_records.len) - random_record = pick(GLOB.all_crew_records) - var/datum/computer_file/report/crew_record/new_record = CreateModularRecord(user) - if(I) - new_record.set_name(I.registered_name) - new_record.set_formal_name("[I.formal_name_prefix][I.registered_name][I.formal_name_suffix]") - new_record.set_sex(I.sex) - new_record.set_age(I.age) - new_record.set_job(I.assignment) - new_record.set_fingerprint(I.fingerprint_hash) - new_record.set_bloodtype(I.blood_type) - new_record.set_dna(I.dna_hash) - if(I.military_branch) - new_record.set_branch(I.military_branch.name) - if(I.military_rank) - new_record.set_rank(I.military_rank.name) - new_record.set_formal_name("[I.registered_name][I.formal_name_suffix]") // Rank replaces formal name prefix in real manifest entries - if(random_record) - COPY_VALUE(faction) - COPY_VALUE(religion) - COPY_VALUE(homeSystem) - COPY_VALUE(fingerprint) - COPY_VALUE(dna) - COPY_VALUE(bloodtype) - var/datum/job/job = SSjobs.get_by_title(new_record.get_job()) - if(job) - var/skills = list() - for(var/decl/hierarchy/skill/S in GLOB.skills) - var/level = job.min_skill[S.type] - if(prob(10)) - level = min(rand(1,3), job.max_skill[S.type]) - if(level > SKILL_NONE) - skills += "[S.name], [S.levels[level]]" - new_record.set_skillset(jointext(skills,"\n")) - - if(istype(job) && job.announced) - AnnounceArrivalSimple(new_record.get_name(), new_record.get_job(), "has completed cryogenic revival", get_announcement_frequency(job)) - . = ..() - -#undef COPY_VALUE diff --git a/code/datums/uplink/stealth_and_camouflage_items.dm b/code/datums/uplink/stealth_and_camouflage_items.dm deleted file mode 100644 index e4abd074b2d38..0000000000000 --- a/code/datums/uplink/stealth_and_camouflage_items.dm +++ /dev/null @@ -1,80 +0,0 @@ -/******************************* -* Stealth and Camouflage Items * -*******************************/ -/datum/uplink_item/item/stealth_items - category = /datum/uplink_category/stealth_items - -/datum/uplink_item/item/stealth_items/fakemoustache - name = "Fake Moustache" - desc = "A simple fiber moustache that will conceal the wearer's face." - item_cost = 1 - path = /obj/item/clothing/mask/fakemoustache - -/datum/uplink_item/item/stealth_items/sneaky_armor - name = "Concealable Armor" - desc = "An armor vest that can be worn under a jacket. About as tough as a light plate." - item_cost = 15 - path = /obj/item/clothing/accessory/armor_plate/sneaky - -/datum/uplink_item/item/stealth_items/tactical_sneaky_armor - name = "Concealable Tactical Armor" - desc = "An armor vest that can be worn under a jacket. About as tough as a medium plate." - item_cost = 25 - path = /obj/item/clothing/accessory/armor_plate/sneaky/tactical - -/datum/uplink_item/item/stealth_items/balaclava - name = "Balaclava" - item_cost = 1 - path = /obj/item/clothing/mask/balaclava - -/datum/uplink_item/item/stealth_items/syndigaloshes - name = "No-Slip Shoes" - desc = "These shoes have a non-slip grip on them, so those pesky janitors can't ruin your operations!" - item_cost = 4 - path = /obj/item/clothing/shoes/syndigaloshes - -/datum/uplink_item/item/stealth_items/spy - name = "Bug Kit" - desc = "For when you want to conduct voyeurism from afar. Comes with 6 bugs to plant, and a monitoring device to pair them with." - item_cost = 8 - path = /obj/item/storage/box/syndie_kit/spy - -/datum/uplink_item/item/stealth_items/id - name = "Agent ID card" - desc = "A unique ID card that is completely configurable. Scan another ID card with it to clone its access capabilities." - item_cost = 12 - path = /obj/item/card/id/syndicate - -/datum/uplink_item/item/stealth_items/chameleon_kit - name = "Chameleon Kit" - desc = "Comes with a full set of appearance changing clothing you need to impersonate most people. \ - Accessories, backpack, and gun included!" - item_cost = 20 - path = /obj/item/storage/backpack/chameleon/sydie_kit - -/datum/uplink_item/item/stealth_items/voice - name = "Modified Gas Mask" - desc = "A fully functioning gas mask that is able to conceal your face and has a built in voice modulator, \ - so you can become a true shadow operative!" - item_cost = 20 - path = /obj/item/clothing/mask/chameleon/voice - -/datum/uplink_item/item/stealth_items/chameleon_projector - name = "Chameleon Projector" - desc = "Use this to scan a small, portable object in order to disguise yourself as said object." - item_cost = 32 - path = /obj/item/device/chameleon - -/datum/uplink_item/item/stealth_items/sneakies - name = "Sneakies" - desc = "A fashionable pair of polished dress shoes. The soles are made in a way so that any \ - tracks you leave look like they are traveling in the opposite direction." - item_cost = 4 - path = /obj/item/clothing/shoes/laceup/sneakies - -/datum/uplink_item/item/stealth_items/smuggler_satchel - name = "Smuggler's Satchel" - desc = "This satchel is thin enough to be hidden in the gap between plating and tiling, \ - great for stashing your stolen goods. Comes with a crowbar and a floor tile." - item_cost = 20 - path = /obj/item/storage/backpack/satchel/flat diff --git a/code/datums/uplink/stealthy_and_inconspicuous_weapons.dm b/code/datums/uplink/stealthy_and_inconspicuous_weapons.dm deleted file mode 100644 index 9a8cbe28116a0..0000000000000 --- a/code/datums/uplink/stealthy_and_inconspicuous_weapons.dm +++ /dev/null @@ -1,63 +0,0 @@ -/************************************* -* Stealthy and Inconspicuous Weapons * -*************************************/ -/datum/uplink_item/item/stealthy_weapons - category = /datum/uplink_category/stealthy_weapons - -/datum/uplink_item/item/stealthy_weapons/soap - name = "Subversive Soap" - item_cost = 1 - path = /obj/item/soap - -/datum/uplink_item/item/stealthy_weapons/cigarette_kit - name = "Box of Tricky Cigarettes" - desc = "A box with some 'special' packs in the following order: 2x Flashes, 2x Smokes, 1x MindBreaker Toxin, and 1x Tricordrazine. Try not to mix them up!" - item_cost = 8 - path = /obj/item/storage/box/syndie_kit/cigarette - -/datum/uplink_item/item/stealthy_weapons/concealed_cane - name = "Concealed Cane Sword" - desc = "A cane used by a true gentlemen, especially ones with sharp intentions." - item_cost = 8 - path = /obj/item/cane/concealed - -/datum/uplink_item/item/stealthy_weapons/random_toxin - name = "Random Toxin Vial" - desc = "Contains one of an assortment of nasty toxins, with a single syringe included. Don't worry, its labeled. " - item_cost = 8 - path = /obj/item/storage/box/syndie_kit/toxin - -/datum/uplink_item/item/stealthy_weapons/sleepy - name = "Paralytic Pen" - desc = "Looks and works like a pen, but prick someone with it, and 30 seconds later, they'll be on the ground mumbling." - item_cost = 20 - path = /obj/item/pen/reagent/sleepy - -/datum/uplink_item/item/stealthy_weapons/syringegun - name = "Disguised Syringe Gun" - desc = "A syringe gun disguised as an electronic cigarette with 4 darts included in the box. Chemicals not included!" - item_cost = 10 - path = /obj/item/storage/box/syndie_kit/syringegun - -/datum/uplink_item/item/stealthy_weapons/razor_hat - name = "Razor-Brimmed Bowler Hat" - desc = "This dapper hat hides several microrazors in its brim, and also provides some head protection. Land a trickshot for maximum damage." - item_cost = 15 - path = /obj/item/clothing/head/bowlerhat/razor - -/datum/uplink_item/item/stealthy_weapons/carp_plush - name = "Dehydrated Space Carp" - desc = "An innocuous-looking space carp plushie. Add water and step back for a nasty surprise!" - item_cost = 10 - path = /obj/item/reagent_containers/food/snacks/dehydrated_carp - -/datum/uplink_item/item/stealthy_weapons/plush_bomb - name = "Plushie Bomb" - desc = "A cuddly plushie implanted with a voice-activated bomb. Set the trigger phrase and run for an explosive ending!" - item_cost = 20 - path = /obj/item/plushbomb - -/datum/uplink_item/item/stealthy_weapons/plush_bomb/get_goods(obj/item/device/uplink/U, loc) - var/plushtype = pick(typesof(path)) - var/obj/item/I = new plushtype(loc) - return I diff --git a/code/datums/uplink/telecrystals.dm b/code/datums/uplink/telecrystals.dm deleted file mode 100644 index 1e9515066e393..0000000000000 --- a/code/datums/uplink/telecrystals.dm +++ /dev/null @@ -1,41 +0,0 @@ -/*************** -* Telecrystals * -***************/ -/datum/uplink_item/item/telecrystal - category = /datum/uplink_category/telecrystals - desc = "Acquire the uplink crystals in pure form." - -/datum/uplink_item/item/telecrystal/get_goods(var/obj/item/device/uplink/U, var/loc) - return new /obj/item/stack/telecrystal(loc, cost(U.uses, U)) - -/datum/uplink_item/item/telecrystal/one - name = "1x Telecrystal" - desc = "Remove 1 telecrystal from this uplink." - item_cost = 1 - -/datum/uplink_item/item/telecrystal/five - name = "5x Telecrystals" - desc = "Remove 5 telecrystals from this uplink." - item_cost = 5 - -/datum/uplink_item/item/telecrystal/ten - name = "10x Telecrystals" - desc = "Remove 10 telecrystals from this uplink." - item_cost = 10 - -/datum/uplink_item/item/telecrystal/twentyfive - name = "25x Telecrystals" - desc = "Remove 25 telecrystals from this uplink." - item_cost = 25 - -/datum/uplink_item/item/telecrystal/fifty - name = "50x Telecrystals" - desc = "Remove 50 telecrystals from this uplink." - item_cost = 50 - -/datum/uplink_item/item/telecrystal/all - name = "Empty Uplink" - desc = "Completely empties this uplink of all remaining telecrystals." - -/datum/uplink_item/item/telecrystal/all/cost(var/telecrystals, obj/item/device/uplink/U) - return max(1, telecrystals) diff --git a/code/datums/uplink/uplink_categories.dm b/code/datums/uplink/uplink_categories.dm deleted file mode 100644 index d64aa6f6ecd45..0000000000000 --- a/code/datums/uplink/uplink_categories.dm +++ /dev/null @@ -1,54 +0,0 @@ -/datum/uplink_category - var/name = "" - var/list/datum/uplink_item/items - -/datum/uplink_category/New() - ..() - items = list() - -/datum/uplink_category/proc/can_view(obj/item/device/uplink/U) - for(var/datum/uplink_item/item in items) - if(item.can_view(U)) - return 1 - return 0 - -/datum/uplink_category/ammunition - name = "Ammunition" - -/datum/uplink_category/armor - name = "Armor and Hardsuits" -/datum/uplink_category/grenades - name = "Grenades" - -/datum/uplink_category/visible_weapons - name = "Loud & Dangerous Weaponry" - -/datum/uplink_category/stealthy_weapons - name = "Disguised & Inconspicuous Weaponry" - -/datum/uplink_category/stealth_items - name = "Stealth & Camouflage Accessories" - -/datum/uplink_category/tools - name = "Devices & Tools" - -/datum/uplink_category/implants - name = "Implants" - -/datum/uplink_category/augments - name = "Augments" - -/datum/uplink_category/medical - name = "Medical & Food" - -/datum/uplink_category/hardsuit_modules - name = "Hardsuit Modules" - -/datum/uplink_category/services - name = "Jamming & Announcements" - -/datum/uplink_category/badassery - name = "Badassery" - -/datum/uplink_category/telecrystals - name = "Telecrystal Materialization" diff --git a/code/datums/uplink/uplink_items.dm b/code/datums/uplink/uplink_items.dm deleted file mode 100644 index 677d32a4653ed..0000000000000 --- a/code/datums/uplink/uplink_items.dm +++ /dev/null @@ -1,162 +0,0 @@ -var/global/datum/uplink/uplink = new() - -/datum/uplink - var/list/items_assoc - var/list/datum/uplink_item/items - var/list/datum/uplink_category/categories - -/datum/uplink/New() - items_assoc = list() - items = init_subtypes(/datum/uplink_item) - categories = init_subtypes(/datum/uplink_category) - categories = dd_sortedObjectList(categories) - - for(var/datum/uplink_item/item in items) - if(!item.name) - items -= item - continue - - items_assoc[item.type] = item - - for(var/datum/uplink_category/category in categories) - if(item.category == category.type) - category.items += item - item.category = category - - for(var/datum/uplink_category/category in categories) - category.items = dd_sortedObjectList(category.items) - -/datum/uplink_item - var/name - var/desc - var/item_cost = 0 - var/list/antag_costs = list() // Allows specific antag roles to purchase at a different cost - var/datum/uplink_category/category // Item category - var/list/datum/antagonist/antag_roles // Antag roles this item is displayed to. If empty, display to all. If it includes 'Exclude", anybody except this role can view it - -/datum/uplink_item/item - var/path = null - -/datum/uplink_item/proc/buy(var/obj/item/device/uplink/U, var/mob/user) - var/extra_args = extra_args(user) - if(!extra_args) - return - - if(!can_buy(U)) - return - - var/cost = cost(U.uses, U) - - var/goods = get_goods(U, get_turf(user), user, extra_args) - if(!goods) - return - - purchase_log(U, user, cost) - U.uses -= cost - U.used_TC += cost - return goods - -// Any additional arguments you wish to send to the get_goods -/datum/uplink_item/proc/extra_args(var/mob/user) - return 1 - -/datum/uplink_item/proc/can_buy(obj/item/device/uplink/U) - if(cost(U.uses, U) > U.uses) - return 0 - - return can_view(U) - -/datum/uplink_item/proc/can_view(obj/item/device/uplink/U) - if (!length(antag_roles)) - return TRUE - if (!U?.uplink_owner) - return FALSE - for (var/antag_role in antag_roles) - if (antag_role == "Exclude") - continue - var/datum/antagonist/antag = GLOB.all_antag_types_[antag_role] - if (!antag) - log_debug({"Invalid antag_role "[antag_role]" in [src.type]"}) - continue - if (antag.is_antagonist(U.uplink_owner)) - return !("Exclude" in antag_roles) - return ("Exclude" in antag_roles) - -/datum/uplink_item/proc/cost(var/telecrystals, obj/item/device/uplink/U) - . = item_cost - if(U && U.uplink_owner) - for(var/antag_role in antag_costs) - var/datum/antagonist/antag = GLOB.all_antag_types_[antag_role] - if(antag.is_antagonist(U.uplink_owner)) - . = min(antag_costs[antag_role], .) - return max(1, U ? U.get_item_cost(src, .) : .) - -/datum/uplink_item/proc/name() - return name - -/datum/uplink_item/proc/description() - return desc - -// get_goods does not necessarily return physical objects, it is simply a way to acquire the uplink item without paying -/datum/uplink_item/proc/get_goods(var/obj/item/device/uplink/U, var/loc) - return 0 - -/datum/uplink_item/proc/log_icon() - return - -/datum/uplink_item/proc/purchase_log(obj/item/device/uplink/U, var/mob/user, var/cost) - log_and_message_admins("used \the [U.loc] to buy \a [src]") - if(user) - uplink_purchase_repository.add_entry(user.mind, src, cost) - -/datum/uplink_item/dd_SortValue() - return cost(INFINITY, null) - -/******************************** -* * -* Physical Uplink Entries * -* * -********************************/ -/datum/uplink_item/item/buy(var/obj/item/device/uplink/U, var/mob/user) - var/obj/item/I = ..() - if(!I) - return - - if(istype(I, /list)) - var/list/L = I - if(L.len) I = L[1] - - if(istype(I) && ishuman(user)) - var/mob/living/carbon/human/A = user - A.put_in_any_hand_if_possible(I) - return I - -/datum/uplink_item/item/get_goods(var/obj/item/device/uplink/U, var/loc) - var/obj/item/I = new path(loc) - return I - -/datum/uplink_item/item/description() - if(!desc) - // Fallback description - var/obj/temp = src.path - desc = initial(temp.desc) - return ..() - -/datum/uplink_item/item/log_icon() - var/obj/I = path - return "\icon[I]" - -/**************** -* Support procs * -****************/ -/proc/get_random_uplink_items(var/obj/item/device/uplink/U, var/remaining_TC, var/loc) - var/list/bought_items = list() - while(remaining_TC) - var/datum/uplink_random_selection/uplink_selection = get_uplink_random_selection_by_type(/datum/uplink_random_selection/default) - var/datum/uplink_item/I = uplink_selection.get_random_item(remaining_TC, U, bought_items) - if(!I) - break - bought_items += I - remaining_TC -= I.cost(remaining_TC, U) - - return bought_items diff --git a/code/datums/uplink/uplink_sources.dm b/code/datums/uplink/uplink_sources.dm deleted file mode 100644 index 81bd4c31fb770..0000000000000 --- a/code/datums/uplink/uplink_sources.dm +++ /dev/null @@ -1,138 +0,0 @@ -#define NO_GUARANTEE_NO_EXTRA_COST_DESC(X) "Installs an uplink into " + X + " if, and only if, found on your person. Has no TC cost." - -#define SETUP_FAILED TRUE - -GLOBAL_LIST_INIT(default_uplink_source_priority, list( - /decl/uplink_source/pda, - /decl/uplink_source/radio, - /decl/uplink_source/unit)) - -/decl/uplink_source - var/name - var/desc - -/decl/uplink_source/proc/setup_uplink_source(mob/M, amount) - return SETUP_FAILED - -/decl/uplink_source/pda - name = "PDA" - desc = NO_GUARANTEE_NO_EXTRA_COST_DESC("a PDA") - -/decl/uplink_source/pda/setup_uplink_source(mob/M, amount) - var/obj/item/modular_computer/pda/P = find_in_mob(M, /obj/item/modular_computer/pda) - if(!P || !P.hard_drive) - return SETUP_FAILED - - var/pda_pass = "[rand(100,999)] [pick(GLOB.greek_letters)]" - var/obj/item/device/uplink/T = new(P, M.mind, amount) - P.hidden_uplink = T - var/datum/computer_file/program/uplink/program = new(pda_pass) - if(!P.hard_drive.save_file(program)) - return SETUP_FAILED //Not enough space or other issues. - to_chat(M, "A portable object teleportation relay has been installed in your [P.name]. Simply enter the code \"[pda_pass]\" in TaxQuickly program to unlock its hidden features.") - M.StoreMemory("Uplink passcode: [pda_pass] ([P.name]).", /decl/memory_options/system) - T.program = program - -/decl/uplink_source/radio - name = "Radio" - desc = NO_GUARANTEE_NO_EXTRA_COST_DESC("a radio") - -/decl/uplink_source/radio/setup_uplink_source(mob/M, amount) - var/obj/item/device/radio/R = find_in_mob(M, /obj/item/device/radio) - if(!R) - return SETUP_FAILED - - var/freq = PUBLIC_LOW_FREQ - var/list/freqlist = list() - while (freq <= PUBLIC_HIGH_FREQ) - if (freq < 1451 || freq > PUB_FREQ) - freqlist += freq - freq += 2 - if ((freq % 2) == 0) - freq += 1 - - freq = freqlist[rand(1, freqlist.len)] - var/obj/item/device/uplink/T = new(R, M.mind, amount) - R.hidden_uplink = T - R.traitor_frequency = freq - to_chat(M, "A portable object teleportation relay has been installed in your [R.name]. Simply dial the frequency [format_frequency(freq)] to unlock its hidden features.") - M.StoreMemory("Radio Freq: [format_frequency(freq)] ([R.name]).", /decl/memory_options/system) - -/decl/uplink_source/implant - name = "Implant" - desc = "Teleports an uplink implant into your head. Costs 20% of the initial TC amount." - -/decl/uplink_source/implant/setup_uplink_source(mob/living/carbon/human/H, amount) - if(!istype(H)) - return SETUP_FAILED - - var/obj/item/organ/external/head = H.organs_by_name[BP_HEAD] - if(!head) - return SETUP_FAILED - - var/obj/item/implant/uplink/U = new(H, round(amount * 0.8)) - U.imp_in = H - U.implanted = TRUE - U.part = head - head.implants += U - - U.implanted(H) // This proc handles the installation feedback - -/decl/uplink_source/unit - name = "Uplink Unit" - desc = "Teleports an uplink unit to your location. Has 30% more TC." - -/decl/uplink_source/unit/setup_uplink_source(mob/M, amount) - var/obj/item/device/radio/uplink/U = new(M, M.mind, round(amount * 1.3)) - put_on_mob(M, U, "\A [U]") - -/decl/uplink_source/telecrystals - name = "Telecrystals" - desc = "Get your telecrystals in pure form, without the means to trade them for goods, Gives 150% of initial TC amount" - -/decl/uplink_source/telecrystals/setup_uplink_source(mob/M, amount) - amount = round(amount * 1.5) - var/obj/item/stack/telecrystal/TC = new(M, amount) - put_on_mob(M, TC, "[amount] telecrystal\s") - -/decl/uplink_source/proc/find_in_mob(var/mob/M, var/type) - for(var/item in M.get_equipped_items(TRUE)) - if(!istype(item, type)) - continue - var/obj/item/I = item - if(!I.hidden_uplink) - return I - -/decl/uplink_source/proc/put_on_mob(mob/M, atom/movable/AM, text) - var/obj/O = M.equip_to_storage(AM) - if(O) - to_chat(M, "[text] can be found in your [O.name].") - else if(M.put_in_hands(AM)) - to_chat(M, "[text] appear in your hands.") - else - AM.dropInto(M.loc) - to_chat(M, "[text] appear at your location.") - -/proc/setup_uplink_source(mob/M, amount = DEFAULT_TELECRYSTAL_AMOUNT) - if(!istype(M) || !M.mind) - return FALSE - - var/list/priority_order - if(M.client && M.client.prefs) - priority_order = M.client.prefs.uplink_sources - - if(!priority_order || !priority_order.len) - priority_order = list() - for(var/entry in GLOB.default_uplink_source_priority) - priority_order += decls_repository.get_decl(entry) - - for(var/entry in priority_order) - var/decl/uplink_source/US = entry - if(US.setup_uplink_source(M, amount) != SETUP_FAILED) - return TRUE - - to_chat(M, "Either by choice or circumstance you will be without an uplink.") - return FALSE - -#undef NO_GUARANTEE_NO_EXTRA_COST_DESC -#undef SETUP_FAILED diff --git a/code/datums/vending/stored_item.dm b/code/datums/vending/stored_item.dm deleted file mode 100644 index 9a5d60920d1fc..0000000000000 --- a/code/datums/vending/stored_item.dm +++ /dev/null @@ -1,83 +0,0 @@ -/datum/stored_items - var/item_name = "name" //Name of the item(s) displayed - var/item_path = null // The original amount held - var/amount = 0 - var/list/instances //What items are actually stored - var/atom/storing_object - -/datum/stored_items/New(var/atom/storing_object, var/path, var/name = null, var/amount = 0) - if(!istype(storing_object)) - CRASH("Unexpected storing object.") - src.storing_object = storing_object - src.item_path = path - src.amount = amount - - if(!name) - var/atom/tmp = path - src.item_name = initial(tmp.name) - else - src.item_name = name - ..() - -/datum/stored_items/Destroy() - storing_object = null - QDEL_NULL_LIST(instances) - . = ..() - -/datum/stored_items/dd_SortValue() - return item_name - -/datum/stored_items/proc/get_amount() - return amount - -/datum/stored_items/proc/add_product(var/atom/movable/product) - if(product.type != item_path) - return 0 - if(product in instances) - return 0 - product.forceMove(storing_object) - LAZYADD(instances, product) - amount++ - return 1 - -/datum/stored_items/proc/get_product(var/product_location) - if(!get_amount() || !product_location) - return - - var/atom/movable/product - if(LAZYLEN(instances)) - product = instances[instances.len] // Remove the last added product - LAZYREMOVE(instances, product) - else - product = new item_path(storing_object) - - amount-- - product.forceMove(product_location) - return product - -/datum/stored_items/proc/get_specific_product(var/product_location, var/atom/movable/product) - if(!get_amount() || !instances || !product_location || !product) - return FALSE - - . = instances.Remove(product) - if(.) - product.forceMove(product_location) - -/datum/stored_items/proc/merge(datum/stored_items/other) - if(other.item_path != item_path) - return FALSE - for(var/atom/movable/thing in other.instances) - other.instances -= thing - if(thing in instances) - amount-- // Don't double-count - else - thing.forceMove(storing_object) - LAZYADD(instances, thing) - amount += other.amount - qdel(other) - return TRUE - -/datum/stored_items/proc/migrate(atom/new_storing_obj) - storing_object = new_storing_obj - for(var/atom/movable/thing in instances) - thing.forceMove(new_storing_obj) \ No newline at end of file diff --git a/code/datums/vending/vending.dm b/code/datums/vending/vending.dm deleted file mode 100644 index 545f90c7cbd59..0000000000000 --- a/code/datums/vending/vending.dm +++ /dev/null @@ -1,19 +0,0 @@ -#define CAT_NORMAL 1 -#define CAT_HIDDEN 2 // also used in corresponding wires/vending.dm -#define CAT_COIN 4 - -/** - * Datum used to hold information about a product in a vending machine - */ - -/datum/stored_items/vending_products - item_name = "generic" // Display name for the product - var/price = 0 // Price to buy one - var/display_color = null // Display color for vending machine listing - var/category = CAT_NORMAL // CAT_HIDDEN for contraband, CAT_COIN for premium - -/datum/stored_items/vending_products/New(var/atom/storing_object, var/path, var/name = null, var/amount = 0, var/price = 0, var/color = null, var/category = CAT_NORMAL) - ..() - src.price = price - src.display_color = color - src.category = category diff --git a/code/datums/vote/add_antag.dm b/code/datums/vote/add_antag.dm deleted file mode 100644 index 737a7c52ec9ff..0000000000000 --- a/code/datums/vote/add_antag.dm +++ /dev/null @@ -1,63 +0,0 @@ -#define CHOICE_RANDOM "Random" -#define CHOICE_NONE "None" - -/datum/vote/add_antagonist - name = "add antagonist" - result_length = 3 - var/automatic = 0 //Handled slightly differently. - -/datum/vote/add_antagonist/can_run(mob/creator, automatic) - if(!(. = ..())) - return - if(!SSvote.is_addantag_allowed(creator, automatic)) //This handles the config setting and admin checking. - return FALSE - -/datum/vote/add_antagonist/setup_vote(mob/creator, automatic) - var/list/all_antag_types = GLOB.all_antag_types_ - for(var/antag_type in all_antag_types) - var/datum/antagonist/antag = all_antag_types[antag_type] - if(!(antag.id in additional_antag_types) && antag.is_votable()) - choices += antag.role_text - choices += CHOICE_RANDOM - if(!automatic) - choices += CHOICE_NONE - src.automatic = automatic - ..() - -/datum/vote/add_antagonist/report_result() - if((. = ..()) || (result[1] == CHOICE_NONE)) // Failed vote or no antag desired - antag_add_finished = 1 // So we will never try this again. - return - - if(result[1] == CHOICE_RANDOM) - var/list/pick_random = choices.Copy() - pick_random -= CHOICE_RANDOM - pick_random -= CHOICE_NONE - result[1] = pick(pick_random) - - if(GAME_STATE <= RUNLEVEL_LOBBY) - antag_add_finished = 1 - var/antag_type = GLOB.antag_names_to_ids_[result[1]] - if(!antag_type) - return 1 - additional_antag_types |= antag_type - return - - INVOKE_ASYNC(src, .proc/spawn_antags) //There is a sleep in this proc. - -/datum/vote/add_antagonist/proc/spawn_antags() - var/list/antag_choices = list() - for(var/antag_type in result) - antag_choices += GLOB.all_antag_types_[antag_type] - if(SSticker.attempt_late_antag_spawn(antag_choices)) // This takes a while. - antag_add_finished = 1 - if(automatic) - // the buffer will already have half an hour added to it, so we'll give it one more - transfer_controller.timerbuffer += config.vote_autotransfer_interval - else - to_world("No antags were added.") - if(automatic) - SSvote.queued_auto_vote = /datum/vote/transfer - -#undef CHOICE_RANDOM -#undef CHOICE_NONE \ No newline at end of file diff --git a/code/datums/vote/custom.dm b/code/datums/vote/custom.dm deleted file mode 100644 index 01f0d0660ae44..0000000000000 --- a/code/datums/vote/custom.dm +++ /dev/null @@ -1,28 +0,0 @@ -/datum/vote/custom - name = "custom vote" - var/abort = 0 // Lets us exit the vote setup due to bad input, etc. - -/datum/vote/custom/can_run(mob/creator, automatic) - if(automatic) - return FALSE - if(!isadmin(creator)) - return FALSE - if(abort) - return FALSE - return ..() - -/datum/vote/custom/setup_vote(mob/creator, automatic) - question = sanitizeSafe(input(creator,"What is the vote for?") as text|null) - if(!question) - abort = 1 - return - for(var/i=1,i<=10,i++) - var/option = capitalize(sanitizeSafe(input(creator,"Please enter an option or hit cancel to finish") as text|null)) - if(!option || !creator.client) - break - choices += option - if(!length(choices)) - abort = 1 - return - result_length = length(choices) - ..() diff --git a/code/datums/vote/gamemode.dm b/code/datums/vote/gamemode.dm deleted file mode 100644 index a9a8e3cbb0c8c..0000000000000 --- a/code/datums/vote/gamemode.dm +++ /dev/null @@ -1,72 +0,0 @@ -/datum/vote/gamemode - name = "game mode" - additional_header = "Required Players / Antags" - win_x = 500 - win_y = 800 - result_length = 3 - -/datum/vote/gamemode/can_run(mob/creator, automatic) - if(!automatic && (!config.allow_vote_mode || !isadmin(creator))) - return FALSE // Admins and autovotes bypass the config setting. - if(GAME_STATE >= RUNLEVEL_GAME) - return FALSE - return ..() - -/datum/vote/gamemode/Process() - if(GAME_STATE >= RUNLEVEL_GAME) - to_world("Voting aborted due to game start.") - return VOTE_PROCESS_ABORT - return ..() - - -/datum/vote/gamemode/setup_vote(mob/creator, automatic) - ..() - var/list/lobby_players = SSticker.lobby_players() - log_debug("MODE VOTE: Lobby Players: [lobby_players.len]") - var/list/skipped = list() - for (var/tag in SSticker.votable_modes) - var/datum/game_mode/mode = SSticker.mode_cache[tag] - var/cause = mode.check_votable(lobby_players) - if (cause) - skipped[tag] = cause - continue - choices += tag - log_debug("MODE VOTE: Non-Votable Modes: [json_encode(skipped)]") - for (var/tag in choices) - var/datum/game_mode/mode = SSticker.mode_cache[tag] - var/text = " / [mode.required_enemies]" - additional_text[tag] = "[mode.required_players] [text]" - display_choices[tag] = capitalize(mode.name) - if (!config.secret_disabled) - display_choices["secret"] = "Secret" - choices += "secret" - log_debug("MODE VOTE: Votable Modes: [json_encode(choices)]") - - -/datum/vote/gamemode/handle_default_votes() - var/non_voters = ..() - if(SSticker.master_mode in choices) - choices[SSticker.master_mode] += non_voters - - -/datum/vote/gamemode/report_result() - if(!SSticker.round_progressing) //Unpause any holds. If the vote failed, SSticker is responsible for fielding the result. - SSticker.round_progressing = 1 - to_world("The round will start soon.") - if(..()) - SSticker.gamemode_vote_results = list() //This signals to SSticker that the vote is over but there were no winners. - return 1 - if(SSticker.master_mode != result[1]) - world.save_mode(result[1]) - if(SSticker.mode) - SSvote.restart_world() //This is legacy behavior for votes after the mode is set, e.g. if an admin halts the ticker and holds another vote before gamestart. - return //Potenitally the new vote after restart can then be cancelled, to use this vote's result. - SSticker.master_mode = result[1] - SSticker.gamemode_vote_results = result.Copy() - -/datum/vote/gamemode/check_toggle() - return config.allow_vote_mode ? "Allowed" : "Disallowed" - -/datum/vote/gamemode/toggle(mob/user) - if(isadmin(user)) - config.allow_vote_mode = !config.allow_vote_mode diff --git a/code/datums/vote/map.dm b/code/datums/vote/map.dm deleted file mode 100644 index 5ca5c4b39226a..0000000000000 --- a/code/datums/vote/map.dm +++ /dev/null @@ -1,33 +0,0 @@ -/datum/vote/map - name = "map" - -/datum/vote/map/can_run(mob/creator, automatic) - if(!config.allow_map_switching) - return FALSE - if(!automatic && !isadmin(creator)) - return FALSE // Must be an admin. - return ..() - -/datum/vote/map/setup_vote() - for(var/name in GLOB.all_maps) - choices += name - ..() - -/datum/vote/map/report_result() - if(..()) - return 1 - var/datum/map/M = GLOB.all_maps[result[1]] - fdel("use_map") - text2file(M.path, "use_map") - -//Used by the ticker. -/datum/vote/map/end_game - manual_allowed = 0 - -/datum/vote/map/end_game/report_result() - SSticker.end_game_state = END_GAME_AWAITING_MAP - . = ..() - -/datum/vote/map/end_game/start_vote() - SSticker.end_game_state = END_GAME_READY_TO_END - ..() diff --git a/code/datums/vote/restart.dm b/code/datums/vote/restart.dm deleted file mode 100644 index ff47301ff767d..0000000000000 --- a/code/datums/vote/restart.dm +++ /dev/null @@ -1,24 +0,0 @@ -#define CHOICE_RESTART "Restart round" -#define CHOICE_CONTINUE "Continue playing" - -/datum/vote/restart - name = "restart" - choices = list(CHOICE_RESTART, CHOICE_CONTINUE) - -/datum/vote/restart/can_run(mob/creator, automatic) - if(!automatic && !config.allow_vote_restart && !isadmin(creator)) - return FALSE // Admins and autovotes bypass the config setting. - return ..() - -/datum/vote/restart/handle_default_votes() - var/non_voters = ..() - choices[CHOICE_CONTINUE] += non_voters - -/datum/vote/restart/report_result() - if(..()) - return 1 - if(result[1] == CHOICE_RESTART) - SSvote.restart_world() - -#undef CHOICE_RESTART -#undef CHOICE_CONTINUE diff --git a/code/datums/vote/transfer.dm b/code/datums/vote/transfer.dm deleted file mode 100644 index eaf95ace1390c..0000000000000 --- a/code/datums/vote/transfer.dm +++ /dev/null @@ -1,73 +0,0 @@ -#define CHOICE_TRANSFER "Initiate crew transfer" -#define CHOICE_EXTEND "Extend the round ([config.vote_autotransfer_interval / 600] minutes)" -#define CHOICE_ADD_ANTAG "Add antagonist" - -/datum/vote/transfer - name = "transfer" - question = "End the shift?" - -/datum/vote/transfer/can_run(mob/creator, automatic) - if(!(. = ..())) - return - if(!evacuation_controller || !evacuation_controller.should_call_autotransfer_vote()) - return FALSE - if(!automatic && !config.allow_vote_restart && !isadmin(creator)) - return FALSE // Admins and autovotes bypass the config setting. - if(check_rights(R_INVESTIGATE, 0, creator)) - return //Mods bypass further checks. - var/decl/security_state/security_state = decls_repository.get_decl(GLOB.using_map.security_state) - if (!automatic && security_state.current_security_level_is_same_or_higher_than(security_state.high_security_level)) - to_chat(creator, "The current alert status is too high to call for a crew transfer!") - return FALSE - if(GAME_STATE <= RUNLEVEL_SETUP) - to_chat(creator, "The crew transfer button has been disabled!") - return FALSE - -/datum/vote/transfer/setup_vote(mob/creator, automatic) - choices = list(CHOICE_TRANSFER, CHOICE_EXTEND) - if (config.allow_extra_antags && SSvote.is_addantag_allowed(creator, automatic)) - choices += CHOICE_ADD_ANTAG - ..() - -/datum/vote/transfer/handle_default_votes() - if(config.vote_no_default) - return - var/factor = 0.5 - switch(world.time / (1 MINUTE)) - if(0 to 60) - factor = 0.5 - if(61 to 120) - factor = 0.8 - if(121 to 240) - factor = 1 - if(241 to 300) - factor = 1.2 - else - factor = 1.4 - choices[CHOICE_TRANSFER] = round(choices[CHOICE_TRANSFER] * factor) - to_world("Crew Transfer Factor: [factor]") - -/datum/vote/transfer/report_result() - if(..()) - return 1 - if(result[1] == CHOICE_TRANSFER) - init_autotransfer() - else if(result[1] == CHOICE_ADD_ANTAG) - SSvote.queued_auto_vote = /datum/vote/add_antagonist - -/datum/vote/transfer/mob_not_participating(mob/user) - if((. = ..())) - return - if(config.vote_no_dead_crew_transfer) - return !isliving(user) || ismouse(user) || isdrone(user) || user.stat == DEAD - -/datum/vote/transfer/check_toggle() - return config.allow_vote_restart ? "Allowed" : "Disallowed" - -/datum/vote/transfer/toggle(mob/user) - if(isadmin(user)) - config.allow_vote_restart = !config.allow_vote_restart - -#undef CHOICE_TRANSFER -#undef CHOICE_EXTEND -#undef CHOICE_ADD_ANTAG diff --git a/code/datums/vote/vote.dm b/code/datums/vote/vote.dm deleted file mode 100644 index cabce123fbe1b..0000000000000 --- a/code/datums/vote/vote.dm +++ /dev/null @@ -1,219 +0,0 @@ -/datum/vote - var/name = "default vote" - var/initiator - var/question - var/list/choices = list() - - var/list/display_choices = list() // What's actually shown to the users. - var/list/additional_text = list() // Stuff for UI formatting. - var/additional_header - - var/start_time - var/time_remaining - var/status = VOTE_STATUS_PREVOTE - - var/list/result // The results; format is list(choice = votes). - var/result_length = 1 // How many choices to show in the result. Must be >= 1 - - var/list/votes = list() // Format is list(ckey = list(a, b, ...)); a, b, ... are ordered by order of preference and are numbers, referring to the index in choices - - var/win_x = 450 - var/win_y = 740 // Vote window size. - - var/manual_allowed = 1 // Whether humans can start it. - -//Expected to be run immediately after creation; a false return means that the vote could not be run and the datum will be deleted. -/datum/vote/proc/setup(mob/creator, automatic) - if(!can_run(creator, automatic)) - qdel(src) - return FALSE - setup_vote(creator, automatic) - if(!can_run(creator, automatic)) - qdel(src) - return FALSE - start_vote() - return TRUE - -//Checks any conditions required for the vote to run. The argument is optional, in case a player started the vote. -/datum/vote/proc/can_run(mob/creator, automatic) - return TRUE - -//Performs functions relating to setting up the question and choices, if relevant. -/datum/vote/proc/setup_vote(mob/creator, automatic) - initiator = (!automatic && istype(creator)) ? creator.ckey : "the server" - for(var/choice in choices) - display_choices[choice] = choice // Default behavior is that the choice name is displayed directly. - -/datum/vote/proc/start_vote() - start_time = world.time - status = VOTE_STATUS_ACTIVE - time_remaining = round(config.vote_period/10) - - var/text = get_start_text() - - log_vote(text) - to_world("[text]\nType vote or click here to place your votes.\nYou have [config.vote_period/10] seconds to vote.") - sound_to(world, sound('sound/ambience/alarm4.ogg', repeat = 0, wait = 0, volume = 50, channel = GLOB.vote_sound_channel)) - -/datum/vote/proc/get_start_text() - return "[capitalize(name)] vote started by [initiator]." - -//Modifies the vote totals based on non-voting mobs. -/datum/vote/proc/handle_default_votes() - if(!config.vote_no_default) - return length(GLOB.clients) - length(votes) //Number of non-voters (might not be active, though; should be revisited if the config option is used. This is legacy code.) - -/datum/vote/proc/tally_result() - handle_default_votes() - - result = list() - var/list/remaining_choices = choices.Copy() - var/list/remaining_votes = votes.Copy() - while(length(result) < result_length) - remaining_choices = shuffle(remaining_choices) - sortTim(remaining_choices, /proc/cmp_numeric_dsc, TRUE) - if(!length(remaining_votes) || !length(remaining_choices)) // we ran out of options or votes, you get what we have - result += remaining_choices.Copy(1, clamp(result_length - length(result) + 1, 0, length(remaining_choices) + 1)) - break - else - // 50% majority or we don't have enough candidates to be picky, declare the winner and remove it from the possible candidates - if(remaining_choices[remaining_choices[1]] > length(remaining_votes) / 2 || length(remaining_choices) <= result_length - length(result)) - var/winner = remaining_choices[1] - result[winner] = remaining_choices[remaining_choices[1]] - remove_candidate(remaining_choices, remaining_votes, winner) - else // no winner, remove the biggest loser and go again - var/loser = remaining_choices[length(remaining_choices)] - remove_candidate(remaining_choices, remaining_votes, loser) - -// Remove candidate from choice_list and any votes for it from vote_list, transfering first choices to second -/datum/vote/proc/remove_candidate(list/choice_list, list/vote_list, candidate) - var/candidate_index = choices.Find(candidate) // use choices instead of choice_list because we need the original indexing - choice_list -= candidate - for(var/ckey in vote_list) - if(length(votes[ckey]) && vote_list[ckey][1] == candidate_index && length(vote_list[ckey]) > 1) - var/new_first_choice = choices[vote_list[ckey][2]] - choice_list[new_first_choice] += 1 - vote_list[ckey] -= candidate_index - - if(!length(vote_list[ckey])) - vote_list -= ckey - -// Truthy return indicates that either no one votes or there was another error. -/datum/vote/proc/report_result() - if(!length(result)) - return 1 - - var/text = get_result_announcement() - log_vote(text) - to_world("[text]") - - if(!(result[result[1]] > 0)) - return 1 - -/datum/vote/proc/get_result_announcement() - var/list/text = list() - if(!(result[result[1]] > 0)) // No one votes. - text += "Vote Result: Inconclusive - No Votes!" - else - text += "Vote Result: [display_choices[result[1]]]" - if(result_length > 1) - text += "\nRunner ups: " - var/list/runner_ups = list() - for(var/runner_up in result.Copy(2)) - runner_ups += display_choices[runner_up] - text += english_list(runner_ups) - - return JOINTEXT(text) - -/datum/vote/proc/submit_vote(var/mob/voter, var/vote) - if(mob_not_participating(voter)) - return - - var/ckey = voter.ckey - if(!votes[ckey]) - votes[ckey] = list() - - var/choice = choices[vote] - if(vote in votes[ckey]) - if(votes[ckey][1] == vote) - choices[choice] -= 1 - if(length(votes[ckey]) > 1) // If the player has rescinded their first choice, their second choice is promoted to their first choice, if it exists. - var/new_choice = choices[votes[ckey][2]] - choices[new_choice] += 1 // Update the running tally to reflect that - votes[ckey] -= vote - - if(!length(votes[ckey])) - votes -= ckey - else - votes[ckey] += vote - if(votes[ckey][1] == vote) - choices[choice] += 1 - -// Checks if the mob is participating in the round sufficiently to vote, as per config settings. -/datum/vote/proc/mob_not_participating(mob/voter) - if (config.vote_no_dead && voter.stat == DEAD && !check_rights(EMPTY_BITFIELD, FALSE, voter)) - return TRUE - -//null = no toggle set. This is for UI purposes; a text return will give a link (toggle; currently "return") in the vote panel. -/datum/vote/proc/check_toggle() - -//Called when toggle is hit. -/datum/vote/proc/toggle(mob/user) - -//Will be run by the SS while the vote is running. -/datum/vote/Process() - if(status == VOTE_STATUS_ACTIVE) - if(time_remaining > 0) - time_remaining = round((start_time + config.vote_period - world.time)/10) - return VOTE_PROCESS_ONGOING - else - status = VOTE_STATUS_COMPLETE - return VOTE_PROCESS_COMPLETE - return VOTE_PROCESS_ABORT - -/datum/vote/proc/interface(mob/user) - . = list() - if(mob_not_participating(user)) - . += "

      You can't participate in this vote unless you're participating in the round.


      " - return - if(question) - . += "

      Vote: '[question]'

      " - else - . += "

      Vote: [capitalize(name)]

      " - . += "Time Left: [time_remaining] s
      " - . += "" - . += additional_header - . += "" - - for(var/i = 1, i <= choices.len, i++) - var/choice = choices[i] - var/voted_for = votes[user.ckey] && (i in votes[user.ckey]) - - . += "" - - . += "" - - if (additional_text[choice]) - . += "[additional_text[choice]]" //Note lack of cell wrapper, to allow for dynamic formatting. - . += "" - . += "
      ChoicesOrder
      " - . += "[display_choices[choice]]" - . += "" - if(voted_for) - var/list/vote = votes[user.ckey] - . += "[vote.Find(i)]" - . += "

      " - -/datum/vote/Topic(href, href_list, hsrc) - var/mob/user = usr - if(!istype(user) || !user.client) - return - - if(!href_list["choice"]) - return - - var/choice = text2num(href_list["choice"]) - if(!is_valid_index(choice, choices)) - return - - submit_vote(user, choice) \ No newline at end of file diff --git a/code/datums/weakref.dm b/code/datums/weakref.dm deleted file mode 100644 index bacebedb99f24..0000000000000 --- a/code/datums/weakref.dm +++ /dev/null @@ -1,41 +0,0 @@ -/datum - var/tmp/weakref/weakref - -//obtain a weak reference to a datum -/proc/weakref(datum/D) - if(!istype(D)) - return - if(QDELETED(D)) - return - if(istype(D, /weakref)) - return D - if(!D.weakref) - D.weakref = new/weakref(D) - return D.weakref - -/weakref - var/ref - - // Handy info for debugging - var/tmp/ref_name - var/tmp/ref_type - -/weakref/New(datum/D) - ref = "\ref[D]" - ref_name = "[D]" - ref_type = D.type - -/weakref/Destroy() - // A weakref datum should not be manually destroyed as it is a shared resource, - // rather it should be automatically collected by the BYOND GC when all references are gone. - SHOULD_CALL_PARENT(FALSE) - return QDEL_HINT_IWILLGC - -/weakref/proc/resolve() - var/datum/D = locate(ref) - if(D && D.weakref == src) - return D - return null - -/weakref/get_log_info_line() - return "[ref_name] ([ref_type]) ([ref]) (WEAKREF)" diff --git a/code/datums/wires/airlock.dm b/code/datums/wires/airlock.dm deleted file mode 100644 index 7923a38a322a4..0000000000000 --- a/code/datums/wires/airlock.dm +++ /dev/null @@ -1,190 +0,0 @@ -// Wires for airlocks - -/datum/wires/airlock/secure - random = 1 - wire_count = 14 - window_y = 680 - -/datum/wires/airlock - holder_type = /obj/machinery/door/airlock - wire_count = 12 - window_y = 570 - descriptions = list( - new /datum/wire_description(AIRLOCK_WIRE_IDSCAN, "This wire is connected to the ID scanning panel.", SKILL_EXPERT), - new /datum/wire_description(AIRLOCK_WIRE_MAIN_POWER1, "This wire seems to be carrying a heavy current."), - new /datum/wire_description(AIRLOCK_WIRE_MAIN_POWER2, "This wire seems to be carrying a heavy current."), - new /datum/wire_description(AIRLOCK_WIRE_DOOR_BOLTS, "This wire runs down to the very base of the airlock."), - new /datum/wire_description(AIRLOCK_WIRE_BACKUP_POWER1, "This wire seems to be carrying a heavy current."), - new /datum/wire_description(AIRLOCK_WIRE_BACKUP_POWER2, "This wire seems to be carrying a heavy current."), - new /datum/wire_description(AIRLOCK_WIRE_OPEN_DOOR, "This wire connects to the door motors."), - new /datum/wire_description(AIRLOCK_WIRE_AI_CONTROL, "This wire connects to automated control systems."), - new /datum/wire_description(AIRLOCK_WIRE_ELECTRIFY, "This wire seems to be carrying a heavy current."), - new /datum/wire_description(AIRLOCK_WIRE_SAFETY, "This wire connects to a safety override."), - new /datum/wire_description(AIRLOCK_WIRE_SPEED, "This wire appears to connect to the airlock's proximity detector modules."), - new /datum/wire_description(AIRLOCK_WIRE_LIGHT, "This wire powers the airlock's built-in lighting.", SKILL_EXPERT) - ) - -var/global/const/AIRLOCK_WIRE_IDSCAN = 1 -var/global/const/AIRLOCK_WIRE_MAIN_POWER1 = 2 -var/global/const/AIRLOCK_WIRE_MAIN_POWER2 = 4 -var/global/const/AIRLOCK_WIRE_DOOR_BOLTS = 8 -var/global/const/AIRLOCK_WIRE_BACKUP_POWER1 = 16 -var/global/const/AIRLOCK_WIRE_BACKUP_POWER2 = 32 -var/global/const/AIRLOCK_WIRE_OPEN_DOOR = 64 -var/global/const/AIRLOCK_WIRE_AI_CONTROL = 128 -var/global/const/AIRLOCK_WIRE_ELECTRIFY = 256 -var/global/const/AIRLOCK_WIRE_SAFETY = 512 -var/global/const/AIRLOCK_WIRE_SPEED = 1024 -var/global/const/AIRLOCK_WIRE_LIGHT = 2048 - -/datum/wires/airlock/CanUse(var/mob/living/L) - var/obj/machinery/door/airlock/A = holder - if(!istype(L, /mob/living/silicon)) - if(A.isElectrified()) - if(A.shock(L, 100)) - return 0 - if(A.p_open) - return 1 - return 0 - -/datum/wires/airlock/GetInteractWindow(mob/user) - var/obj/machinery/door/airlock/A = holder - var/haspower = A.arePowerSystemsOn() //If there's no power, then no lights will be on. - - . += ..() - . += text("
      \n[]
      \n[]
      \n[]
      \n[]
      \n[]
      \n[]
      \n[]
      \n[]", - (A.locked ? "The door bolts have fallen!" : "The door bolts look up."), - ((A.lights && haspower) ? "The door bolt lights are on." : "The door bolt lights are off!"), - ((haspower) ? "The test light is on." : "The test light is off!"), - ((A.backup_power_lost_until) ? "The backup power light is off!" : "The backup power light is on."), - ((A.aiControlDisabled==0 && !A.emagged && haspower)? "The 'AI control allowed' light is on." : "The 'AI control allowed' light is off."), - ((A.safe==0 && haspower)? "The 'Check Wiring' light is on." : "The 'Check Wiring' light is off."), - ((A.normalspeed==0 && haspower)? "The 'Check Timing Mechanism' light is on." : "The 'Check Timing Mechanism' light is off."), - ((A.aiDisabledIdScanner==0 && haspower)? "The IDScan light is on." : "The IDScan light is off.")) - -/datum/wires/airlock/UpdateCut(var/index, var/mended) - - var/obj/machinery/door/airlock/A = holder - switch(index) - if(AIRLOCK_WIRE_IDSCAN) - A.aiDisabledIdScanner = !mended - if(AIRLOCK_WIRE_MAIN_POWER1, AIRLOCK_WIRE_MAIN_POWER2) - - if(!mended) - //Cutting either one disables the main door power, but unless backup power is also cut, the backup power re-powers the door in 10 seconds. While unpowered, the door may be crowbarred open, but bolts-raising will not work. Cutting these wires may electocute the user. - A.loseMainPower() - A.shock(usr, 50) - else - A.regainMainPower() - A.shock(usr, 50) - - if(AIRLOCK_WIRE_BACKUP_POWER1, AIRLOCK_WIRE_BACKUP_POWER2) - - if(!mended) - //Cutting either one disables the backup door power (allowing it to be crowbarred open, but disabling bolts-raising), but may electocute the user. - A.loseBackupPower() - A.shock(usr, 50) - else - A.regainBackupPower() - A.shock(usr, 50) - - if(AIRLOCK_WIRE_DOOR_BOLTS) - - if(!mended) - //Cutting this wire also drops the door bolts, and mending it does not raise them. (This is what happens now, except there are a lot more wires going to door bolts at present) - A.lock(1) - A.update_icon() - - if(AIRLOCK_WIRE_AI_CONTROL) - - if(!mended) - //one wire for AI control. Cutting this prevents the AI from controlling the door unless it has hacked the door through the power connection (which takes about a minute). If both main and backup power are cut, as well as this wire, then the AI cannot operate or hack the door at all. - //aiControlDisabled: If 1, AI control is disabled until the AI hacks back in and disables the lock. If 2, the AI has bypassed the lock. If -1, the control is enabled but the AI had bypassed it earlier, so if it is disabled again the AI would have no trouble getting back in. - if(A.aiControlDisabled == 0) - A.aiControlDisabled = 1 - else if(A.aiControlDisabled == -1) - A.aiControlDisabled = 2 - else - if(A.aiControlDisabled == 1) - A.aiControlDisabled = 0 - else if(A.aiControlDisabled == 2) - A.aiControlDisabled = -1 - - if(AIRLOCK_WIRE_ELECTRIFY) - if(!mended) - //Cutting this wire electrifies the door, so that the next person to touch the door without insulated gloves gets electrocuted. - A.electrify(-1) - else - A.electrify(0) - return // Don't update the dialog. - - if (AIRLOCK_WIRE_SAFETY) - A.safe = mended - - if(AIRLOCK_WIRE_SPEED) - A.autoclose = mended - if(mended) - if(!A.density) - A.close() - - if(AIRLOCK_WIRE_LIGHT) - A.lights = mended - A.update_icon() - - -/datum/wires/airlock/UpdatePulsed(var/index) - - var/obj/machinery/door/airlock/A = holder - switch(index) - if(AIRLOCK_WIRE_IDSCAN) - //Sending a pulse through flashes the red light on the door (if the door has power). - if(A.arePowerSystemsOn() && A.density) - A.do_animate("deny") - if(AIRLOCK_WIRE_MAIN_POWER1, AIRLOCK_WIRE_MAIN_POWER2) - //Sending a pulse through either one causes a breaker to trip, disabling the door for 10 seconds if backup power is connected, or 1 minute if not (or until backup power comes back on, whichever is shorter). - A.loseMainPower() - if(AIRLOCK_WIRE_DOOR_BOLTS) - //one wire for door bolts. Sending a pulse through this drops door bolts if they're not down (whether power's on or not), - //raises them if they are down (only if power's on) - if(!A.locked) - A.lock() - else - A.unlock() - - if(AIRLOCK_WIRE_BACKUP_POWER1, AIRLOCK_WIRE_BACKUP_POWER2) - //two wires for backup power. Sending a pulse through either one causes a breaker to trip, but this does not disable it unless main power is down too (in which case it is disabled for 1 minute or however long it takes main power to come back, whichever is shorter). - A.loseBackupPower() - if(AIRLOCK_WIRE_AI_CONTROL) - if(A.aiControlDisabled == 0) - A.aiControlDisabled = 1 - else if(A.aiControlDisabled == -1) - A.aiControlDisabled = 2 - - spawn(10) - if(A) - if(A.aiControlDisabled == 1) - A.aiControlDisabled = 0 - else if(A.aiControlDisabled == 2) - A.aiControlDisabled = -1 - - if(AIRLOCK_WIRE_ELECTRIFY) - //one wire for electrifying the door. Sending a pulse through this electrifies the door for 30 seconds. - A.electrify(30) - if(AIRLOCK_WIRE_OPEN_DOOR) - //tries to open the door without ID - //will succeed only if the ID wire is cut or the door requires no access and it's not emagged - if(A.emagged) return - if(!A.requiresID() || A.check_access(null)) - if(A.density) A.open() - else A.close() - if(AIRLOCK_WIRE_SAFETY) - A.safe = !A.safe - if(!A.density) - A.close() - - if(AIRLOCK_WIRE_SPEED) - A.normalspeed = !A.normalspeed - - if(AIRLOCK_WIRE_LIGHT) - A.lights = !A.lights - A.update_icon() \ No newline at end of file diff --git a/code/datums/wires/alarm.dm b/code/datums/wires/alarm.dm deleted file mode 100644 index 68145a3a60f98..0000000000000 --- a/code/datums/wires/alarm.dm +++ /dev/null @@ -1,109 +0,0 @@ -/datum/wires/alarm - holder_type = /obj/machinery/alarm - wire_count = 5 - descriptions = list( - new /datum/wire_description(AALARM_WIRE_IDSCAN, "This wire is connected to the ID scanning panel.", SKILL_EXPERT), - new /datum/wire_description(AALARM_WIRE_POWER, "This wire seems to be carrying a heavy current."), - new /datum/wire_description(AALARM_WIRE_SYPHON, "This wire runs to atmospherics logic circuits of some sort."), - new /datum/wire_description(AALARM_WIRE_AI_CONTROL, "This wire connects to automated control systems."), - new /datum/wire_description(AALARM_WIRE_AALARM, "This wire gives power to the actual alarm mechanism.") - ) - -var/global/const/AALARM_WIRE_IDSCAN = 1 -var/global/const/AALARM_WIRE_POWER = 2 -var/global/const/AALARM_WIRE_SYPHON = 4 -var/global/const/AALARM_WIRE_AI_CONTROL = 8 -var/global/const/AALARM_WIRE_AALARM = 16 - - -/datum/wires/alarm/CanUse(var/mob/living/L) - var/obj/machinery/alarm/A = holder - if(A.wiresexposed && A.buildstage == 2) - return 1 - return 0 - -/datum/wires/alarm/GetInteractWindow(mob/user) - var/obj/machinery/alarm/A = holder - . += ..() - . += text("
      \n[(A.locked ? "The Air Alarm is locked." : "The Air Alarm is unlocked.")]
      \n[((A.shorted || (A.stat & (NOPOWER|BROKEN))) ? "The Air Alarm is offline." : "The Air Alarm is working properly!")]
      \n[(A.aidisabled ? "The 'AI control allowed' light is off." : "The 'AI control allowed' light is on.")]") - -/datum/wires/alarm/UpdateCut(var/index, var/mended) - var/obj/machinery/alarm/A = holder - switch(index) - if(AALARM_WIRE_IDSCAN) - if(!mended) - A.locked = 1 -// log_debug("Idscan wire cut") - - - if(AALARM_WIRE_POWER) - A.shock(usr, 50) - A.shorted = !mended - A.update_icon() -// log_debug("Power wire cut") - - - if (AALARM_WIRE_AI_CONTROL) - if (A.aidisabled == !mended) - A.aidisabled = mended -// log_debug("AI Control Wire Cut") - - - if(AALARM_WIRE_SYPHON) - if(!mended) - A.mode = 3 // AALARM_MODE_PANIC - A.apply_mode() -// log_debug("Syphon Wire Cut") - - - if(AALARM_WIRE_AALARM) - if (A.alarm_area.atmosalert(2, A)) - A.post_alert(2) - A.update_icon() - -/datum/wires/alarm/UpdatePulsed(var/index) - var/obj/machinery/alarm/A = holder - switch(index) - if(AALARM_WIRE_IDSCAN) - A.locked = !A.locked -// log_debug("Idscan wire pulsed") - - - if (AALARM_WIRE_POWER) -// log_debug("Power wire pulsed") - - if(A.shorted == 0) - A.shorted = 1 - A.update_icon() - - spawn(12000) - if(A.shorted == 1) - A.shorted = 0 - A.update_icon() - - - if (AALARM_WIRE_AI_CONTROL) -// log_debug("AI Control wire pulsed") - - if (A.aidisabled == 0) - A.aidisabled = 1 - A.updateDialog() - spawn(100) - if (A.aidisabled == 1) - A.aidisabled = 0 - - if(AALARM_WIRE_SYPHON) -// log_debug("Syphon wire pulsed") - - if(A.mode == 1) // AALARM_MODE_SCRUB - A.mode = 3 // AALARM_MODE_PANIC - else - A.mode = 1 // AALARM_MODE_SCRUB - A.apply_mode() - - if(AALARM_WIRE_AALARM) -// log_debug("Aalarm wire pulsed") - - if (A.alarm_area.atmosalert(0, A)) - A.post_alert(0) - A.update_icon() \ No newline at end of file diff --git a/code/datums/wires/apc.dm b/code/datums/wires/apc.dm deleted file mode 100644 index 5f022fa511354..0000000000000 --- a/code/datums/wires/apc.dm +++ /dev/null @@ -1,78 +0,0 @@ -#define APC_WIRE_IDSCAN 1 -#define APC_WIRE_MAIN_POWER1 2 -#define APC_WIRE_MAIN_POWER2 4 -#define APC_WIRE_AI_CONTROL 8 - -/datum/wires/apc - holder_type = /obj/machinery/power/apc - wire_count = 4 - descriptions = list( - new /datum/wire_description(APC_WIRE_IDSCAN, "This wire is connected to the ID scanning panel.", SKILL_EXPERT), - new /datum/wire_description(APC_WIRE_MAIN_POWER1, "This wire seems to be carrying a heavy current."), - new /datum/wire_description(APC_WIRE_MAIN_POWER2, "This wire seems to be carrying a heavy current."), - new /datum/wire_description(APC_WIRE_AI_CONTROL, "This wire connects to automated control systems.") - ) - -/datum/wires/apc/GetInteractWindow(mob/user) - var/obj/machinery/power/apc/A = holder - . += ..() - . += text("
      \n[(A.locked ? "The APC is locked." : "The APC is unlocked.")]
      \n[(A.shorted ? "The APCs power has been shorted." : "The APC is working properly!")]
      \n[(A.aidisabled ? "The 'AI control allowed' light is off." : "The 'AI control allowed' light is on.")]") - - -/datum/wires/apc/CanUse(var/mob/living/L) - var/obj/machinery/power/apc/A = holder - if(A.wiresexposed && !(A.stat & BROKEN)) - return 1 - return 0 - -/datum/wires/apc/UpdatePulsed(var/index) - - var/obj/machinery/power/apc/A = holder - - switch(index) - - if(APC_WIRE_IDSCAN) - A.locked = 0 - - spawn(300) - if(A) - A.locked = 1 - - if (APC_WIRE_MAIN_POWER1, APC_WIRE_MAIN_POWER2) - if(A.shorted == 0) - A.shorted = 1 - - spawn(1200) - if(A && !IsIndexCut(APC_WIRE_MAIN_POWER1) && !IsIndexCut(APC_WIRE_MAIN_POWER2)) - A.shorted = 0 - - if (APC_WIRE_AI_CONTROL) - if (A.aidisabled == 0) - A.aidisabled = 1 - - spawn(10) - if(A && !IsIndexCut(APC_WIRE_AI_CONTROL)) - A.aidisabled = 0 - -/datum/wires/apc/UpdateCut(var/index, var/mended) - var/obj/machinery/power/apc/A = holder - - switch(index) - if(APC_WIRE_MAIN_POWER1, APC_WIRE_MAIN_POWER2) - - if(!mended) - A.shock(usr, 50) - A.shorted = 1 - - else if(!IsIndexCut(APC_WIRE_MAIN_POWER1) && !IsIndexCut(APC_WIRE_MAIN_POWER2)) - A.shorted = 0 - A.shock(usr, 50) - - if(APC_WIRE_AI_CONTROL) - - if(!mended) - if (A.aidisabled == 0) - A.aidisabled = 1 - else - if (A.aidisabled == 1) - A.aidisabled = 0 \ No newline at end of file diff --git a/code/datums/wires/camera.dm b/code/datums/wires/camera.dm deleted file mode 100644 index e9a40151e0c3e..0000000000000 --- a/code/datums/wires/camera.dm +++ /dev/null @@ -1,77 +0,0 @@ -// Wires for cameras. - -/datum/wires/camera - random = 1 - holder_type = /obj/machinery/camera - wire_count = 6 - descriptions = list( - new /datum/wire_description(CAMERA_WIRE_FOCUS, "This wire runs to the camera's lens adjustment motors."), - new /datum/wire_description(CAMERA_WIRE_POWER, "This wire seems to be carrying a heavy current."), - new /datum/wire_description(CAMERA_WIRE_LIGHT, "This wire seems connected to the built-in light.", SKILL_EXPERT), - new /datum/wire_description(CAMERA_WIRE_ALARM, "This wire is connected to a remote signaling device of some sort.") - ) - -/datum/wires/camera/GetInteractWindow(mob/user) - - . = ..() - var/obj/machinery/camera/C = holder - . += "
      \n[(C.view_range == initial(C.view_range) ? "The focus light is on." : "The focus light is off.")]" - . += "
      \n[(C.can_use() ? "The power link light is on." : "The power link light is off.")]" - . += "
      \n[(C.light_disabled ? "The camera light is off." : "The camera light is on.")]" - . += "
      \n[(C.alarm_on ? "The alarm light is on." : "The alarm light is off.")]" - return . - -/datum/wires/camera/CanUse(var/mob/living/L) - var/obj/machinery/camera/C = holder - return C.panel_open - -var/global/const/CAMERA_WIRE_FOCUS = 1 -var/global/const/CAMERA_WIRE_POWER = 2 -var/global/const/CAMERA_WIRE_LIGHT = 4 -var/global/const/CAMERA_WIRE_ALARM = 8 -var/global/const/CAMERA_WIRE_NOTHING1 = 16 -var/global/const/CAMERA_WIRE_NOTHING2 = 32 - -/datum/wires/camera/UpdateCut(var/index, var/mended) - var/obj/machinery/camera/C = holder - - switch(index) - if(CAMERA_WIRE_FOCUS) - var/range = (mended ? initial(C.view_range) : C.short_range) - C.setViewRange(range) - - if(CAMERA_WIRE_POWER) - if(C.status && !mended || !C.status && mended) - C.deactivate(usr, 1) - - if(CAMERA_WIRE_LIGHT) - C.light_disabled = !mended - - if(CAMERA_WIRE_ALARM) - if(!mended) - C.triggerCameraAlarm() - else - C.cancelCameraAlarm() - return - -/datum/wires/camera/UpdatePulsed(var/index) - var/obj/machinery/camera/C = holder - if(IsIndexCut(index)) - return - switch(index) - if(CAMERA_WIRE_FOCUS) - var/new_range = (C.view_range == initial(C.view_range) ? C.short_range : initial(C.view_range)) - C.setViewRange(new_range) - - if(CAMERA_WIRE_LIGHT) - C.light_disabled = !C.light_disabled - - if(CAMERA_WIRE_ALARM) - C.visible_message("[icon2html(C,viewers(get_turf(C)))] *beep*", "[icon2html(C, viewers(get_turf(C)))] *beep*") - return - -/datum/wires/camera/proc/CanDeconstruct() - if(IsIndexCut(CAMERA_WIRE_POWER) && IsIndexCut(CAMERA_WIRE_FOCUS) && IsIndexCut(CAMERA_WIRE_LIGHT) && IsIndexCut(CAMERA_WIRE_NOTHING1) && IsIndexCut(CAMERA_WIRE_NOTHING2)) - return 1 - else - return 0 \ No newline at end of file diff --git a/code/datums/wires/explosive.dm b/code/datums/wires/explosive.dm deleted file mode 100644 index 45d6384c5572c..0000000000000 --- a/code/datums/wires/explosive.dm +++ /dev/null @@ -1,31 +0,0 @@ -/datum/wires/explosive - wire_count = 1 - -var/global/const/WIRE_EXPLODE = 1 - -/datum/wires/explosive/proc/explode() - return - -/datum/wires/explosive/UpdatePulsed(var/index) - switch(index) - if(WIRE_EXPLODE) - explode() - -/datum/wires/explosive/UpdateCut(var/index, var/mended) - switch(index) - if(WIRE_EXPLODE) - if(!mended) - explode() - -/datum/wires/explosive/c4 - holder_type = /obj/item/plastique - -/datum/wires/explosive/c4/CanUse(var/mob/living/L) - var/obj/item/plastique/P = holder - if(P.open_panel) - return 1 - return 0 - -/datum/wires/explosive/c4/explode() - var/obj/item/plastique/P = holder - P.explode(get_turf(P)) diff --git a/code/datums/wires/fabricator.dm b/code/datums/wires/fabricator.dm deleted file mode 100644 index 835349bbdcb8d..0000000000000 --- a/code/datums/wires/fabricator.dm +++ /dev/null @@ -1,82 +0,0 @@ -#define AUTOLATHE_HACK_WIRE 1 -#define AUTOLATHE_SHOCK_WIRE 2 -#define AUTOLATHE_DISABLE_WIRE 4 - -/datum/wires/fabricator - - holder_type = /obj/machinery/fabricator - wire_count = 6 - descriptions = list( - new /datum/wire_description(AUTOLATHE_HACK_WIRE, "This wire appears to lead to an auxiliary data storage unit."), - new /datum/wire_description(AUTOLATHE_SHOCK_WIRE, "This wire seems to be carrying a heavy current."), - new /datum/wire_description(AUTOLATHE_DISABLE_WIRE, "This wire is connected to the power switch.", SKILL_EXPERT) - ) - -/datum/wires/fabricator/GetInteractWindow(mob/user) - var/obj/machinery/fabricator/A = holder - . += ..() - . += "
      The red light is [(A.fab_status_flags & FAB_DISABLED) ? "off" : "on"]." - . += "
      The green light is [(A.fab_status_flags & FAB_SHOCKED) ? "off" : "on"]." - . += "
      The blue light is [(A.fab_status_flags & FAB_HACKED) ? "off" : "on"].
      " - -/datum/wires/fabricator/CanUse() - var/obj/machinery/fabricator/A = holder - if(A.panel_open) - return 1 - return 0 - -/datum/wires/fabricator/UpdateCut(index, mended) - var/obj/machinery/fabricator/A = holder - switch(index) - if(AUTOLATHE_HACK_WIRE) - if(mended) - A.fab_status_flags &= ~FAB_HACKED - else - A.fab_status_flags |= FAB_HACKED - if(AUTOLATHE_SHOCK_WIRE) - if(mended) - A.fab_status_flags &= ~FAB_SHOCKED - else - A.fab_status_flags |= FAB_SHOCKED - if(AUTOLATHE_DISABLE_WIRE) - if(mended) - A.fab_status_flags &= ~FAB_DISABLED - else - A.fab_status_flags |= FAB_DISABLED - -/datum/wires/fabricator/UpdatePulsed(index) - if(IsIndexCut(index)) - return - var/obj/machinery/fabricator/A = holder - switch(index) - if(AUTOLATHE_HACK_WIRE) - if(A.fab_status_flags & FAB_HACKED) - A.fab_status_flags &= ~FAB_HACKED - else - A.fab_status_flags |= FAB_HACKED - spawn(50) - if(A && !IsIndexCut(index)) - A.fab_status_flags &= ~FAB_HACKED - Interact(usr) - if(AUTOLATHE_SHOCK_WIRE) - if(A.fab_status_flags & FAB_SHOCKED) - A.fab_status_flags &= ~FAB_SHOCKED - else - A.fab_status_flags |= FAB_SHOCKED - spawn(50) - if(A && !IsIndexCut(index)) - A.fab_status_flags &= ~FAB_SHOCKED - Interact(usr) - if(AUTOLATHE_DISABLE_WIRE) - if(A.fab_status_flags & FAB_DISABLED) - A.fab_status_flags &= ~FAB_DISABLED - else - A.fab_status_flags |= FAB_DISABLED - spawn(50) - if(A && !IsIndexCut(index)) - A.fab_status_flags &= ~FAB_DISABLED - Interact(usr) - -#undef AUTOLATHE_HACK_WIRE -#undef AUTOLATHE_SHOCK_WIRE -#undef AUTOLATHE_DISABLE_WIRE diff --git a/code/datums/wires/nuclearbomb.dm b/code/datums/wires/nuclearbomb.dm deleted file mode 100644 index f357e97b4e67a..0000000000000 --- a/code/datums/wires/nuclearbomb.dm +++ /dev/null @@ -1,63 +0,0 @@ -/datum/wires/nuclearbomb - holder_type = /obj/machinery/nuclearbomb - random = 1 - wire_count = 7 - descriptions = list( - new /datum/wire_description(NUCLEARBOMB_WIRE_LIGHT, "This wire seems to connect to the small light on the device.", SKILL_EXPERT), - new /datum/wire_description(NUCLEARBOMB_WIRE_TIMING, "This wire connects to the time display."), - new /datum/wire_description(NUCLEARBOMB_WIRE_SAFETY, "This wire connects to a safety override.") - ) - -var/global/const/NUCLEARBOMB_WIRE_LIGHT = 1 -var/global/const/NUCLEARBOMB_WIRE_TIMING = 2 -var/global/const/NUCLEARBOMB_WIRE_SAFETY = 4 - -/datum/wires/nuclearbomb/CanUse(var/mob/living/L) - var/obj/machinery/nuclearbomb/N = holder - return N.panel_open && N.extended - -/datum/wires/nuclearbomb/GetInteractWindow(mob/user) - var/obj/machinery/nuclearbomb/N = holder - . += ..() - . += "
      The device is [N.timing ? "shaking!" : "still."]
      " - . += "The device is is [N.safety ? "quiet" : "whirring"].
      " - . += "The lights are [N.lighthack ? "static" : "functional"].
      " - -/datum/wires/nuclearbomb/UpdatePulsed(var/index) - var/obj/machinery/nuclearbomb/N = holder - switch(index) - if(NUCLEARBOMB_WIRE_LIGHT) - N.lighthack = !N.lighthack - N.update_icon() - spawn(100) - N.lighthack = !N.lighthack - N.update_icon() - if(NUCLEARBOMB_WIRE_TIMING) - if(N.timing) - spawn - log_and_message_admins("pulsed a nuclear bomb's detonation wire, causing it to explode.") - N.explode() - if(NUCLEARBOMB_WIRE_SAFETY) - N.safety = !N.safety - spawn(100) - N.safety = !N.safety - if(N.safety == 1) - N.visible_message("\The [N] quiets down.") - N.secure_device() - else - N.visible_message("\The [N] emits a quiet whirling noise!") - -/datum/wires/nuclearbomb/UpdateCut(var/index, var/mended) - var/obj/machinery/nuclearbomb/N = holder - switch(index) - if(NUCLEARBOMB_WIRE_SAFETY) - N.safety = mended - if(N.timing) - spawn - log_and_message_admins("cut a nuclear bomb's timing wire, causing it to explode.") - N.explode() - if(NUCLEARBOMB_WIRE_TIMING) - N.secure_device() - if(NUCLEARBOMB_WIRE_LIGHT) - N.lighthack = !mended - N.update_icon() \ No newline at end of file diff --git a/code/datums/wires/particle_accelerator.dm b/code/datums/wires/particle_accelerator.dm deleted file mode 100644 index e8f26c06c8ce8..0000000000000 --- a/code/datums/wires/particle_accelerator.dm +++ /dev/null @@ -1,58 +0,0 @@ -/datum/wires/particle_acc/control_box - wire_count = 5 - holder_type = /obj/machinery/particle_accelerator/control_box - descriptions = list( - new /datum/wire_description(PARTICLE_TOGGLE_WIRE, "This wire seems to connect to the main power toggle.", SKILL_EXPERT), - new /datum/wire_description(PARTICLE_STRENGTH_WIRE, "This wire connects to the primary magnets."), - new /datum/wire_description(PARTICLE_INTERFACE_WIRE, "This wire appears connected to the user panel."), - new /datum/wire_description(PARTICLE_LIMIT_POWER_WIRE, "This wire connects to the primary magnets.") - ) - -var/global/const/PARTICLE_TOGGLE_WIRE = 1 // Toggles whether the PA is on or not. -var/global/const/PARTICLE_STRENGTH_WIRE = 2 // Determines the strength of the PA. -var/global/const/PARTICLE_INTERFACE_WIRE = 4 // Determines the interface showing up. -var/global/const/PARTICLE_LIMIT_POWER_WIRE = 8 // Determines how strong the PA can be. -//var/const/PARTICLE_NOTHING_WIRE = 16 // Blank wire - -/datum/wires/particle_acc/control_box/CanUse(var/mob/living/L) - var/obj/machinery/particle_accelerator/control_box/C = holder - if(C.construction_state == 2) - return 1 - return 0 - -/datum/wires/particle_acc/control_box/UpdatePulsed(var/index) - var/obj/machinery/particle_accelerator/control_box/C = holder - switch(index) - - if(PARTICLE_TOGGLE_WIRE) - C.toggle_power() - - if(PARTICLE_STRENGTH_WIRE) - C.add_strength() - - if(PARTICLE_INTERFACE_WIRE) - C.interface_control = !C.interface_control - - if(PARTICLE_LIMIT_POWER_WIRE) - C.visible_message("[icon2html(C, viewers(get_turf(C)))][C] makes a large whirring noise.") - -/datum/wires/particle_acc/control_box/UpdateCut(var/index, var/mended) - var/obj/machinery/particle_accelerator/control_box/C = holder - switch(index) - - if(PARTICLE_TOGGLE_WIRE) - if(C.active == !mended) - C.toggle_power() - - if(PARTICLE_STRENGTH_WIRE) - - for(var/i = 1; i < 3; i++) - C.remove_strength() - - if(PARTICLE_INTERFACE_WIRE) - C.interface_control = mended - - if(PARTICLE_LIMIT_POWER_WIRE) - C.strength_upper_limit = (mended ? 2 : 3) - if(C.strength_upper_limit < C.strength) - C.remove_strength() \ No newline at end of file diff --git a/code/datums/wires/radio.dm b/code/datums/wires/radio.dm deleted file mode 100644 index 9071529658407..0000000000000 --- a/code/datums/wires/radio.dm +++ /dev/null @@ -1,52 +0,0 @@ -/datum/wires/radio - holder_type = /obj/item/device/radio - wire_count = 3 - descriptions = list( - new /datum/wire_description(WIRE_SIGNAL, "This wire connects several radio components."), - new /datum/wire_description(WIRE_RECEIVE, "This wire runs to the radio reciever.", SKILL_EXPERT), - new /datum/wire_description(WIRE_TRANSMIT, "This wire runs to the radio transmitter.") - ) - -var/global/const/WIRE_SIGNAL = 1 -var/global/const/WIRE_RECEIVE = 2 -var/global/const/WIRE_TRANSMIT = 4 - -/datum/wires/radio/CanUse(var/mob/living/L) - var/obj/item/device/radio/R = holder - if(R.b_stat) - return 1 - return 0 - -/datum/wires/radio/GetInteractWindow(mob/user) - var/obj/item/device/radio/R = holder - . += ..() - if(R.cell) - . += "
      Remove cell
      " - -/datum/wires/radio/UpdatePulsed(var/index) - var/obj/item/device/radio/R = holder - switch(index) - if(WIRE_SIGNAL) - R.listening = !R.listening && !IsIndexCut(WIRE_RECEIVE) - R.broadcasting = R.listening && !IsIndexCut(WIRE_TRANSMIT) - - if(WIRE_RECEIVE) - R.listening = !R.listening && !IsIndexCut(WIRE_SIGNAL) - - if(WIRE_TRANSMIT) - R.broadcasting = !R.broadcasting && !IsIndexCut(WIRE_SIGNAL) - SSnano.update_uis(holder) - -/datum/wires/radio/UpdateCut(var/index, var/mended) - var/obj/item/device/radio/R = holder - switch(index) - if(WIRE_SIGNAL) - R.listening = mended && !IsIndexCut(WIRE_RECEIVE) - R.broadcasting = mended && !IsIndexCut(WIRE_TRANSMIT) - - if(WIRE_RECEIVE) - R.listening = mended && !IsIndexCut(WIRE_SIGNAL) - - if(WIRE_TRANSMIT) - R.broadcasting = mended && !IsIndexCut(WIRE_SIGNAL) - SSnano.update_uis(holder) \ No newline at end of file diff --git a/code/datums/wires/robot.dm b/code/datums/wires/robot.dm deleted file mode 100644 index 90980b08fc13a..0000000000000 --- a/code/datums/wires/robot.dm +++ /dev/null @@ -1,80 +0,0 @@ -/datum/wires/robot - random = 1 - holder_type = /mob/living/silicon/robot - wire_count = 5 - descriptions = list( - new /datum/wire_description(BORG_WIRE_LAWCHECK, "This wire runs to the unit's law module."), - new /datum/wire_description(BORG_WIRE_MAIN_POWER, "This wire seems to be carrying a heavy current.", SKILL_EXPERT), - new /datum/wire_description(BORG_WIRE_LOCKED_DOWN, "This wire connects to the unit's safety override."), - new /datum/wire_description(BORG_WIRE_AI_CONTROL, "This wire connects to automated control systems."), - new /datum/wire_description(BORG_WIRE_CAMERA, "This wire runs to the unit's vision modules.") - ) - -var/global/const/BORG_WIRE_LAWCHECK = 1 -var/global/const/BORG_WIRE_MAIN_POWER = 2 // The power wires do nothing whyyyyyyyyyyyyy -var/global/const/BORG_WIRE_LOCKED_DOWN = 4 -var/global/const/BORG_WIRE_AI_CONTROL = 8 -var/global/const/BORG_WIRE_CAMERA = 16 - -/datum/wires/robot/GetInteractWindow(mob/user) - - . = ..() - var/mob/living/silicon/robot/R = holder - . += text("
      \n[(R.lawupdate ? "The LawSync light is on." : "The LawSync light is off.")]") - . += text("
      \n[(R.connected_ai ? "The AI link light is on." : "The AI link light is off.")]") - . += text("
      \n[((!isnull(R.camera) && R.camera.status == 1) ? "The Camera light is on." : "The Camera light is off.")]") - . += text("
      \n[(R.lockcharge ? "The lockdown light is on." : "The lockdown light is off.")]") - return . - -/datum/wires/robot/UpdateCut(var/index, var/mended) - - var/mob/living/silicon/robot/R = holder - switch(index) - if(BORG_WIRE_LAWCHECK) //Cut the law wire, and the borg will no longer receive law updates from its AI - if(!mended) - if (R.lawupdate) - to_chat(R, "LawSync protocol engaged.") - R.show_laws() - else - if (!R.lawupdate && !R.emagged) - R.lawupdate = TRUE - - if (BORG_WIRE_AI_CONTROL) //Cut the AI wire to reset AI control - if(!mended) - R.disconnect_from_ai() - - if (BORG_WIRE_CAMERA) - if(!isnull(R.camera) && !R.scrambledcodes) - R.camera.status = mended - - if(BORG_WIRE_LOCKED_DOWN) - R.SetLockdown(!mended) - - -/datum/wires/robot/UpdatePulsed(var/index) - var/mob/living/silicon/robot/R = holder - switch(index) - if (BORG_WIRE_AI_CONTROL) //pulse the AI wire to make the borg reselect an AI - if(!R.emagged) - var/mob/living/silicon/ai/new_ai = select_active_ai(R, get_z(R)) - R.connect_to_ai(new_ai) - - if (BORG_WIRE_CAMERA) - if(!isnull(R.camera) && R.camera.can_use() && !R.scrambledcodes) - R.visible_message("[R]'s camera lense focuses loudly.") - to_chat(R, "Your camera lense focuses loudly.") - - if(BORG_WIRE_LOCKED_DOWN) - R.SetLockdown(!R.lockcharge) // Toggle - -/datum/wires/robot/CanUse(var/mob/living/L) - var/mob/living/silicon/robot/R = holder - if(R.wiresexposed) - return 1 - return 0 - -/datum/wires/robot/proc/IsCameraCut() - return wires_status & BORG_WIRE_CAMERA - -/datum/wires/robot/proc/LockedCut() - return wires_status & BORG_WIRE_LOCKED_DOWN \ No newline at end of file diff --git a/code/datums/wires/shield_generator.dm b/code/datums/wires/shield_generator.dm deleted file mode 100644 index 0d6bfef6678c1..0000000000000 --- a/code/datums/wires/shield_generator.dm +++ /dev/null @@ -1,44 +0,0 @@ -/datum/wires/shield_generator - holder_type = /obj/machinery/power/shield_generator - wire_count = 5 - descriptions = list( - new /datum/wire_description(SHIELDGEN_WIRE_POWER, "This wire seems to be carrying a heavy current.", SKILL_EXPERT), - new /datum/wire_description(SHIELDGEN_WIRE_HACK, "This wire seems designed to enable a manual override."), - new /datum/wire_description(SHIELDGEN_WIRE_CONTROL, "This wire connects to the main control panel."), - new /datum/wire_description(SHIELDGEN_WIRE_AICONTROL, "This wire connects to automated control systems.") - ) - -var/global/const/SHIELDGEN_WIRE_POWER = 1 // Cut to disable power input into the generator. Pulse does nothing. Mend to restore. -var/global/const/SHIELDGEN_WIRE_HACK = 2 // Pulse to hack the generator, enabling hacked modes. Cut to unhack. Mend does nothing. -var/global/const/SHIELDGEN_WIRE_CONTROL = 4 // Cut to lock most shield controls. Mend to unlock them. Pulse does nothing. -var/global/const/SHIELDGEN_WIRE_AICONTROL = 8 // Cut to disable AI control. Mend to restore. -var/global/const/SHIELDGEN_WIRE_NOTHING = 16 // A blank wire that doesn't have any specific function - -/datum/wires/shield_generator/CanUse() - var/obj/machinery/power/shield_generator/S = holder - if(S.panel_open) - return 1 - return 0 - -/datum/wires/shield_generator/UpdateCut(index, mended) - var/obj/machinery/power/shield_generator/S = holder - switch(index) - if(SHIELDGEN_WIRE_POWER) - S.input_cut = !mended - if(SHIELDGEN_WIRE_HACK) - if(!mended) - S.hacked = 0 - if(S.check_flag(MODEFLAG_BYPASS)) - S.toggle_flag(MODEFLAG_BYPASS) - if(S.check_flag(MODEFLAG_OVERCHARGE)) - S.toggle_flag(MODEFLAG_OVERCHARGE) - if(SHIELDGEN_WIRE_CONTROL) - S.mode_changes_locked = !mended - if(SHIELDGEN_WIRE_AICONTROL) - S.ai_control_disabled = !mended - -/datum/wires/shield_generator/UpdatePulsed(var/index) - var/obj/machinery/power/shield_generator/S = holder - switch(index) - if(SHIELDGEN_WIRE_HACK) - S.hacked = 1 \ No newline at end of file diff --git a/code/datums/wires/smartfridge.dm b/code/datums/wires/smartfridge.dm deleted file mode 100644 index 81949dcddd4e2..0000000000000 --- a/code/datums/wires/smartfridge.dm +++ /dev/null @@ -1,56 +0,0 @@ -/datum/wires/smartfridge - holder_type = /obj/machinery/smartfridge - wire_count = 3 - descriptions = list( - new /datum/wire_description(SMARTFRIDGE_WIRE_ELECTRIFY, "This wire seems to be carrying a heavy current."), - new /datum/wire_description(SMARTFRIDGE_WIRE_THROW, "This wire leads to the item dispensor force controls."), - new /datum/wire_description(SMARTFRIDGE_WIRE_IDSCAN, "This wire is connected to the ID scanning panel.", SKILL_EXPERT) - ) - -/datum/wires/smartfridge/secure - random = 1 - wire_count = 4 - -var/global/const/SMARTFRIDGE_WIRE_ELECTRIFY = 1 -var/global/const/SMARTFRIDGE_WIRE_THROW = 2 -var/global/const/SMARTFRIDGE_WIRE_IDSCAN = 4 - -/datum/wires/smartfridge/CanUse(var/mob/living/L) - var/obj/machinery/smartfridge/S = holder - if(!istype(L, /mob/living/silicon)) - if(S.seconds_electrified) - if(S.shock(L, 100)) - return 0 - if(S.panel_open) - return 1 - return 0 - -/datum/wires/smartfridge/GetInteractWindow(mob/user) - var/obj/machinery/smartfridge/S = holder - . += ..() - . += "
      The orange light is [S.seconds_electrified ? "off" : "on"].
      " - . += "The red light is [S.shoot_inventory ? "off" : "blinking"].
      " - . += "A [S.scan_id ? "purple" : "yellow"] light is on.
      " - -/datum/wires/smartfridge/UpdatePulsed(var/index) - var/obj/machinery/smartfridge/S = holder - switch(index) - if(SMARTFRIDGE_WIRE_THROW) - S.shoot_inventory = !S.shoot_inventory - if(SMARTFRIDGE_WIRE_ELECTRIFY) - S.seconds_electrified = 30 - if(SMARTFRIDGE_WIRE_IDSCAN) - S.scan_id = !S.scan_id - -/datum/wires/smartfridge/UpdateCut(var/index, var/mended) - var/obj/machinery/smartfridge/S = holder - switch(index) - if(SMARTFRIDGE_WIRE_THROW) - S.shoot_inventory = !mended - if(SMARTFRIDGE_WIRE_ELECTRIFY) - if(mended) - S.seconds_electrified = 0 - else - S.seconds_electrified = -1 - if(SMARTFRIDGE_WIRE_IDSCAN) - S.scan_id = 1 \ No newline at end of file diff --git a/code/datums/wires/smes.dm b/code/datums/wires/smes.dm deleted file mode 100644 index 4f0683ff9beef..0000000000000 --- a/code/datums/wires/smes.dm +++ /dev/null @@ -1,69 +0,0 @@ -/datum/wires/smes - holder_type = /obj/machinery/power/smes/buildable - wire_count = 5 - descriptions = list( - new /datum/wire_description(SMES_WIRE_RCON, "This wire runs to a remote signaling mechanism."), - new /datum/wire_description(SMES_WIRE_INPUT, "This seems to be the primary input.", SKILL_EXPERT), - new /datum/wire_description(SMES_WIRE_OUTPUT, "This seems to be the primary output.", SKILL_EXPERT), - new /datum/wire_description(SMES_WIRE_GROUNDING, "This wire appeas to connect directly to the floor.", SKILL_EXPERT), - new /datum/wire_description(SMES_WIRE_FAILSAFES, "This wire appears to connect to a failsafe mechanism.") - ) - -var/global/const/SMES_WIRE_RCON = 1 // Remote control (AI and consoles), cut to disable -var/global/const/SMES_WIRE_INPUT = 2 // Input wire, cut to disable input, pulse to disable for 60s -var/global/const/SMES_WIRE_OUTPUT = 4 // Output wire, cut to disable output, pulse to disable for 60s -var/global/const/SMES_WIRE_GROUNDING = 8 // Cut to quickly discharge causing sparks, pulse to only create few sparks -var/global/const/SMES_WIRE_FAILSAFES = 16 // Cut to disable failsafes, mend to reenable - - -/datum/wires/smes/CanUse(var/mob/living/L) - var/obj/machinery/power/smes/buildable/S = holder - if(!S.grounding && S.powernet && S.powernet.avail) - electrocute_mob(L, S.powernet, S, S.safeties_enabled? 0.1 : 1) - if(S.panel_open) - return 1 - return 0 - - -/datum/wires/smes/GetInteractWindow(mob/user) - var/obj/machinery/power/smes/buildable/S = holder - . += ..() - . += "The green light is [(S.input_cut || S.input_pulsed || S.output_cut || S.output_pulsed) ? "off" : "on"]
      " - . += "The red light is [(S.safeties_enabled || S.grounding) ? "off" : "blinking"]
      " - . += "The blue light is [S.RCon ? "on" : "off"]" - - -/datum/wires/smes/UpdateCut(var/index, var/mended) - var/obj/machinery/power/smes/buildable/S = holder - switch(index) - if(SMES_WIRE_RCON) - S.RCon = mended - if(SMES_WIRE_INPUT) - S.input_cut = !mended - if(SMES_WIRE_OUTPUT) - S.output_cut = !mended - if(SMES_WIRE_GROUNDING) - S.grounding = mended - if(SMES_WIRE_FAILSAFES) - S.safeties_enabled = mended - - -/datum/wires/smes/UpdatePulsed(var/index) - var/obj/machinery/power/smes/buildable/S = holder - switch(index) - if(SMES_WIRE_RCON) - if(S.RCon) - S.RCon = 0 - spawn(10) - S.RCon = 1 - if(SMES_WIRE_INPUT) - S.toggle_input() - if(SMES_WIRE_OUTPUT) - S.toggle_output() - if(SMES_WIRE_GROUNDING) - S.grounding = 0 - if(SMES_WIRE_FAILSAFES) - if(S.safeties_enabled) - S.safeties_enabled = 0 - spawn(10) - S.safeties_enabled = 1 \ No newline at end of file diff --git a/code/datums/wires/suit_storage_unit.dm b/code/datums/wires/suit_storage_unit.dm deleted file mode 100644 index 934774ac081bd..0000000000000 --- a/code/datums/wires/suit_storage_unit.dm +++ /dev/null @@ -1,52 +0,0 @@ -/datum/wires/suit_storage_unit - holder_type = /obj/machinery/suit_cycler - wire_count = 3 - descriptions = list( - new /datum/wire_description(SUIT_STORAGE_WIRE_ELECTRIFY, "This wire seems to be carrying a heavy current."), - new /datum/wire_description(SUIT_STORAGE_WIRE_SAFETY, "This wire seems connected to a safety override", SKILL_EXPERT), - new /datum/wire_description(SUIT_STORAGE_WIRE_LOCKED, "This wire is connected to the ID scanning panel.") - ) - -var/global/const/SUIT_STORAGE_WIRE_ELECTRIFY = 1 -var/global/const/SUIT_STORAGE_WIRE_SAFETY = 2 -var/global/const/SUIT_STORAGE_WIRE_LOCKED = 4 - -/datum/wires/suit_storage_unit/CanUse(var/mob/living/L) - var/obj/machinery/suit_cycler/S = holder - if(!istype(L, /mob/living/silicon)) - if(S.electrified) - if(S.shock(L, 100)) - return 0 - if(S.panel_open) - return 1 - return 0 - -/datum/wires/suit_storage_unit/GetInteractWindow(mob/user) - var/obj/machinery/suit_cycler/S = holder - . += ..() - . += "
      The orange light is [S.electrified ? "off" : "on"].
      " - . += "The red light is [S.safeties ? "off" : "blinking"].
      " - . += "The yellow light is [S.locked ? "on" : "off"].
      " - -/datum/wires/suit_storage_unit/UpdatePulsed(var/index) - var/obj/machinery/suit_cycler/S = holder - switch(index) - if(SUIT_STORAGE_WIRE_SAFETY) - S.safeties = !S.safeties - if(SUIT_STORAGE_WIRE_ELECTRIFY) - S.electrified = 30 - if(SUIT_STORAGE_WIRE_LOCKED) - S.locked = !S.locked - -/datum/wires/suit_storage_unit/UpdateCut(var/index, var/mended) - var/obj/machinery/suit_cycler/S = holder - switch(index) - if(SUIT_STORAGE_WIRE_SAFETY) - S.safeties = mended - if(SUIT_STORAGE_WIRE_LOCKED) - S.locked = mended - if(SUIT_STORAGE_WIRE_ELECTRIFY) - if(mended) - S.electrified = 0 - else - S.electrified = -1 \ No newline at end of file diff --git a/code/datums/wires/taperecorder.dm b/code/datums/wires/taperecorder.dm deleted file mode 100644 index bf0ce9125e3a4..0000000000000 --- a/code/datums/wires/taperecorder.dm +++ /dev/null @@ -1,16 +0,0 @@ -/datum/wires/taperecorder - holder_type = /obj/item/device/taperecorder - wire_count = 1 - descriptions = list( - new /datum/wire_description(TAPE_WIRE_TOGGLE, "This wire runs to the play/stop toggle.", SKILL_ADEPT) - ) - -var/global/const/TAPE_WIRE_TOGGLE = 1 - -/datum/wires/taperecorder/UpdatePulsed(var/index) - var/obj/item/device/taperecorder/T = holder - if(T.recording || T.playing) - T.stop() - else - T.play() - SSnano.update_uis(holder) \ No newline at end of file diff --git a/code/datums/wires/vending.dm b/code/datums/wires/vending.dm deleted file mode 100644 index 04361e7553147..0000000000000 --- a/code/datums/wires/vending.dm +++ /dev/null @@ -1,62 +0,0 @@ -/datum/wires/vending - holder_type = /obj/machinery/vending - wire_count = 4 - descriptions = list( - new /datum/wire_description(VENDING_WIRE_THROW, "This wire leads to the item dispensor force controls."), - new /datum/wire_description(VENDING_WIRE_CONTRABAND, "This wire appears connected to a reserve inventory compartment."), - new /datum/wire_description(VENDING_WIRE_ELECTRIFY, "This wire seems to be carrying a heavy current."), - new /datum/wire_description(VENDING_WIRE_IDSCAN, "This wire is connected to the ID scanning panel.", SKILL_EXPERT) - ) - -var/global/const/VENDING_WIRE_THROW = 1 -var/global/const/VENDING_WIRE_CONTRABAND = 2 -var/global/const/VENDING_WIRE_ELECTRIFY = 4 -var/global/const/VENDING_WIRE_IDSCAN = 8 - -/datum/wires/vending/CanUse(var/mob/living/L) - var/obj/machinery/vending/V = holder - if(!istype(L, /mob/living/silicon)) - if(V.seconds_electrified) - if(V.shock(L, 100)) - return 0 - if(V.panel_open) - return 1 - return 0 - -/datum/wires/vending/GetInteractWindow(mob/user) - var/obj/machinery/vending/V = holder - . += ..() - . += "
      The orange light is [V.seconds_electrified ? "off" : "on"].
      " - . += "The red light is [V.shoot_inventory ? "blinking" : "off"].
      " - . += "The green light is [(V.categories & CAT_HIDDEN) ? "on" : "off"].
      " - . += "The [V.scan_id ? "purple" : "yellow"] light is on.
      " - -/datum/wires/vending/UpdatePulsed(var/index) - var/obj/machinery/vending/V = holder - switch(index) - if(VENDING_WIRE_THROW) - V.shoot_inventory = !V.shoot_inventory - if(VENDING_WIRE_CONTRABAND) - V.categories ^= CAT_HIDDEN - if(VENDING_WIRE_ELECTRIFY) - V.seconds_electrified = 30 - if(VENDING_WIRE_IDSCAN) - V.scan_id = !V.scan_id - -/datum/wires/vending/UpdateCut(var/index, var/mended) - var/obj/machinery/vending/V = holder - switch(index) - if(VENDING_WIRE_THROW) - V.shoot_inventory = !mended - if(VENDING_WIRE_CONTRABAND) - if(mended) - V.categories &= ~CAT_HIDDEN - else - V.categories |= CAT_HIDDEN - if(VENDING_WIRE_ELECTRIFY) - if(mended) - V.seconds_electrified = 0 - else - V.seconds_electrified = -1 - if(VENDING_WIRE_IDSCAN) - V.scan_id = 1 diff --git a/code/datums/wires/wire_description.dm b/code/datums/wires/wire_description.dm deleted file mode 100644 index 7bbd557578407..0000000000000 --- a/code/datums/wires/wire_description.dm +++ /dev/null @@ -1,12 +0,0 @@ -/datum/wire_description - var/index - var/description - var/skill_level = SKILL_PROF - -/datum/wire_description/New(index, description, skill_level) - src.index = index - if(description) - src.description = description - if(skill_level) - src.skill_level = skill_level - ..() \ No newline at end of file diff --git a/code/datums/wires/wires.dm b/code/datums/wires/wires.dm deleted file mode 100644 index 1226b424f24cb..0000000000000 --- a/code/datums/wires/wires.dm +++ /dev/null @@ -1,390 +0,0 @@ -// Wire datums. Created by Giacomand. -// Was created to replace a horrible case of copy and pasted code with no care for maintability. -// Goodbye Door wires, Cyborg wires, Vending Machine wires, Autolathe wires -// Protolathe wires, APC wires and Camera wires! - -#define MAX_FLAG 65535 - -var/global/list/same_wires = list() -// 14 colours, if you're adding more than 14 wires then add more colours here -var/global/list/wireColours = list("red", "blue", "green", "darkred", "orange", "brown", "gold", "gray", "cyan", "navy", "purple", "pink", "black", "yellow") - -/datum/wires - - var/random = 0 // Will the wires be different for every single instance. - var/atom/holder = null // The holder - var/holder_type = null // The holder type; used to make sure that the holder is the correct type. - var/wire_count = 0 // Max is 16 - var/wires_status = 0 // BITFLAG OF WIRES - - var/list/wires = list() - var/list/signallers = list() - - var/table_options = " align='center'" - var/row_options1 = " width='80px'" - var/row_options2 = " width='320px'" - var/window_x = 450 - var/window_y = 470 - - var/list/descriptions // Descriptions of wires (datum/wire_description) for use with examining. - -/datum/wires/New(var/atom/holder) - ..() - src.holder = holder - if(!istype(holder, holder_type)) - CRASH("Our holder is null/the wrong type!") - - // Generate new wires - if(random) - GenerateWires() - for(var/datum/wire_description/desc in descriptions) - if(prob(50)) - desc.skill_level++ - // Get the same wires - else - // We don't have any wires to copy yet, generate some and then copy it. - if(!same_wires[holder_type]) - GenerateWires() - same_wires[holder_type] = src.wires.Copy() - else - var/list/wires = same_wires[holder_type] - src.wires = wires // Reference the wires list. - -/datum/wires/Destroy() - holder = null - return ..() - -/datum/wires/proc/get_mechanics_info() - return - -/datum/wires/proc/GenerateWires() - var/list/colours_to_pick = wireColours.Copy() // Get a copy, not a reference. - var/list/indexes_to_pick = list() - //Generate our indexes - for(var/i = 1; i < MAX_FLAG && i < SHIFTL(1, wire_count); i += i) - indexes_to_pick += i - colours_to_pick.len = wire_count // Downsize it to our specifications. - - while(colours_to_pick.len && indexes_to_pick.len) - // Pick and remove a colour - var/colour = pick_n_take(colours_to_pick) - - // Pick and remove an index - var/index = pick_n_take(indexes_to_pick) - - src.wires[colour] = index - //wires = shuffle(wires) - -/datum/wires/proc/Interact(var/mob/living/user) - - if (!user) - return - - var/html = null - if(holder && CanUse(user)) - html = GetInteractWindow(user) - if(html) - user.set_machine(holder) - else - user.unset_machine() - // No content means no window. - close_browser(user, "window=wires") - return - - var/datum/browser/popup = new(user, "wires", holder.name, window_x, window_y) - popup.set_content(html) - popup.set_title_image(user.browse_rsc_icon(holder.icon, holder.icon_state)) - popup.open() - return TRUE - -/datum/wires/proc/GetInteractWindow(mob/user) - var/html = list() - html += "
      " - html += "

      Exposed Wires

      " - html += "" - - var/list/wires_used = list() - for(var/colour in wires) - wires_used += prob(user.skill_fail_chance(SKILL_ELECTRICAL, 20, SKILL_ADEPT)) ? pick(wires) : colour - if(!user.skill_check(SKILL_ELECTRICAL, SKILL_BASIC)) - wires_used = shuffle(wires_used) - - for(var/colour in wires_used) - html += "" - html += "[capitalize(colour)]" - html += "" - html += "[IsColourCut(colour) ? "Mend" : "Cut"]" - html += " Pulse" - html += " [IsAttached(colour) ? "Detach" : "Attach"] Signaller" - html += " Examine" - html += "" - html += "
      " - - if (random) - html += "\The [holder] appears to have tamper-resistant electronics installed.

      " //maybe this could be more generic? - - return JOINTEXT(html) - -/datum/wires/Topic(href, href_list) - ..() - if(in_range(holder, usr) && isliving(usr)) - - var/mob/living/L = usr - if(CanUse(L) && href_list["action"]) - - var/obj/item/I = L.get_active_hand() - - var/obj/item/offhand_item - if(ishuman(usr)) - var/mob/living/carbon/human/H = usr - offhand_item = H.wearing_rig && H.wearing_rig.selected_module - - holder.add_hiddenprint(L) - if(href_list["cut"]) // Toggles the cut/mend status - if(isWirecutter(I) || isWirecutter(offhand_item)) - var/colour = href_list["cut"] - var/message = "" - if (CutWireColour(colour)) - message = SPAN_NOTICE("You mend the [colour] wire.") - else - message = SPAN_NOTICE("You cut the [colour] wire.") - - if(prob(L.skill_fail_chance(SKILL_ELECTRICAL, 20, SKILL_ADEPT))) - RandomCut() - message = SPAN_DANGER("You accidentally nick another wire in addition to the [colour] wire!") - else if(!L.skill_check(SKILL_ELECTRICAL, SKILL_BASIC)) - RandomCutAll(10) - message = SPAN_DANGER("You think you might have nicked some of the other wires in addition to the [colour] wire!") - to_chat(usr, message) - playsound(usr.loc, "sound/items/Wirecutter.ogg", 20) - else - to_chat(L, "You need wirecutters!") - else if(href_list["pulse"]) - if(isMultitool(I) || isMultitool(offhand_item)) - var/colour = href_list["pulse"] - if(prob(L.skill_fail_chance(SKILL_ELECTRICAL, 30, SKILL_ADEPT))) - RandomPulse() - to_chat(L, "You accidentally pulse another wire instead of the [colour] wire!") - if(prob(L.skill_fail_chance(SKILL_ELECTRICAL, 60, SKILL_BASIC))) - RandomPulse() //or two - else - PulseColour(colour) - to_chat(usr, SPAN_NOTICE("You pulse the [colour] wire.")) - playsound(usr.loc, "sound/effects/pop.ogg", 20) - if(prob(L.skill_fail_chance(SKILL_ELECTRICAL, 50, SKILL_BASIC))) - wires = shuffle(wires) //Leaves them in a different order for anyone else. - to_chat(L, "You get the wires all tangled up!") - else - to_chat(L, "You need a multitool!") - else if(href_list["attach"]) - var/colour = href_list["attach"] - var/failed = 0 - if(prob(L.skill_fail_chance(SKILL_ELECTRICAL, 80, SKILL_EXPERT))) - colour = pick(wires) - to_chat(L, "Are you sure you got the right wire?") - failed = 1 - // Detach - if(IsAttached(colour)) - var/obj/item/O = Detach(colour) - if(O) - L.put_in_hands(O) - to_chat(usr, SPAN_NOTICE("You detach the signaller from the [colour] wire.")) - - // Attach - else - if(istype(I, /obj/item/device/assembly/signaler)) - if(L.unEquip(I)) - Attach(colour, I) - if(!failed) - to_chat(usr, SPAN_NOTICE("You attach the signaller to the [colour] wire.")) - else - to_chat(L, "You need a remote signaller!") - else if(href_list["examine"]) - var/colour = href_list["examine"] - to_chat(usr, examine(GetIndex(colour), usr)) - - // Update Window - Interact(usr) - - if(href_list["close"]) - close_browser(usr, "window=wires") - usr.unset_machine(holder) - -// -// Overridable Procs -// - -/// Called when wires cut/mended. -/datum/wires/proc/UpdateCut(index, mended) - return - -/// Called when wire pulsed. Add code here. -/datum/wires/proc/UpdatePulsed(index) - return - -/// Intended to be called when a pulsed wire 'resets'. You'll have to call this yourself in an `addtimer()` call in `UpdatePulsed()`. -/datum/wires/proc/ResetPulsed(index) - return - -/datum/wires/proc/examine(index, mob/user) - . = "You aren't sure what this wire does." - - var/datum/wire_description/wd = get_description(index) - if(!wd) - return - if(wd.skill_level && !user.skill_check(SKILL_ELECTRICAL, wd.skill_level)) - return - return wd.description - -/datum/wires/proc/CanUse(var/mob/living/L) - return 1 - -// Example of use: -/* - -var/global/const/BOLTED= 1 -var/global/const/SHOCKED = 2 -var/global/const/SAFETY = 4 -var/global/const/POWER = 8 - -/datum/wires/door/UpdateCut(var/index, var/mended) - var/obj/machinery/door/airlock/A = holder - switch(index) - if(BOLTED) - if(!mended) - A.bolt() - if(SHOCKED) - A.shock() - if(SAFETY ) - A.safety() - -*/ - - -// -// Helper Procs -// - -/datum/wires/proc/get_description(index) - for(var/datum/wire_description/desc in descriptions) - if(desc.index == index) - return desc - -/datum/wires/proc/PulseColour(var/colour) - PulseIndex(GetIndex(colour)) - -/datum/wires/proc/PulseIndex(var/index) - if(IsIndexCut(index)) - return - UpdatePulsed(index) - -/datum/wires/proc/GetIndex(var/colour) - if(wires[colour]) - var/index = wires[colour] - return index - else - CRASH("[colour] is not a key in wires.") - - -/datum/wires/proc/RandomPulse() - var/index = rand(1, wires.len) - PulseColour(wires[index]) - -// -// Is Index/Colour Cut procs -// - -/datum/wires/proc/IsColourCut(var/colour) - var/index = GetIndex(colour) - return IsIndexCut(index) - -/datum/wires/proc/IsIndexCut(var/index) - return (index & wires_status) - -// -// Signaller Procs -// - -/datum/wires/proc/IsAttached(var/colour) - if(signallers[colour]) - return 1 - return 0 - -/datum/wires/proc/GetAttached(var/colour) - if(signallers[colour]) - return signallers[colour] - return null - -/datum/wires/proc/Attach(var/colour, var/obj/item/device/assembly/signaler/S) - if(colour && S) - if(!IsAttached(colour)) - signallers[colour] = S - S.forceMove(holder) - S.connected = src - return S - -/datum/wires/proc/Detach(var/colour) - if(colour) - var/obj/item/device/assembly/signaler/S = GetAttached(colour) - if(S) - signallers -= colour - S.connected = null - S.dropInto(holder.loc) - return S - - -/datum/wires/proc/Pulse(var/obj/item/device/assembly/signaler/S) - - for(var/colour in signallers) - if(S == signallers[colour]) - PulseColour(colour) - break - -// -// Cut Wire Colour/Index procs -// - -/datum/wires/proc/CutWireColour(var/colour) - var/index = GetIndex(colour) - return CutWireIndex(index) - -/datum/wires/proc/CutWireIndex(var/index) - if(IsIndexCut(index)) - wires_status &= ~index - UpdateCut(index, 1) - return 1 - else - wires_status |= index - UpdateCut(index, 0) - return 0 - -/datum/wires/proc/RandomCut() - var/r = rand(1, wires.len) - CutWireColour(wires[r]) - -/datum/wires/proc/RandomCutAll(var/probability = 10) - for(var/i = 1; i < MAX_FLAG && i < SHIFTL(1, wire_count); i += i) - if(prob(probability)) - CutWireIndex(i) - -/datum/wires/proc/CutAll() - for(var/i = 1; i < MAX_FLAG && i < SHIFTL(1, wire_count); i += i) - CutWireIndex(i) - -/datum/wires/proc/IsAllCut() - if(wires_status == SHIFTL(1, wire_count) - 1) - return 1 - return 0 - -/datum/wires/proc/MendAll() - for(var/i = 1; i < MAX_FLAG && i < SHIFTL(1, wire_count); i += i) - if(IsIndexCut(i)) - CutWireIndex(i) - -// -//Shuffle and Mend -// - -/datum/wires/proc/Shuffle() - wires_status = 0 - GenerateWires() diff --git a/code/game/antagonist/_antagonist_setup.dm b/code/game/antagonist/_antagonist_setup.dm deleted file mode 100644 index d165365f6c449..0000000000000 --- a/code/game/antagonist/_antagonist_setup.dm +++ /dev/null @@ -1,64 +0,0 @@ -/* - MODULAR ANTAGONIST SYSTEM - - Attempts to centralize antag tracking code into its own system, which has the added bonus of making - the display procs consistent. Should be fairly self-explanatory with a review of the procs. - - To use: - - Get the appropriate datum via get_antag_data("antagonist id") - using the id var of the desired /datum/antagonist ie. var/datum/antagonist/A = get_antag_data("traitor") - - Call add_antagonist() on the desired target mind ie. A.add_antagonist(mob.mind) - - To ignore protected roles, supply a positive second argument. - - To skip equipping with appropriate gear, supply a positive third argument. -*/ - -// Global procs. -/proc/get_antag_data(var/antag_type) - if(GLOB.all_antag_types_[antag_type]) - return GLOB.all_antag_types_[antag_type] - else - var/list/all_antag_types = GLOB.all_antag_types_ - for(var/cur_antag_type in all_antag_types) - var/datum/antagonist/antag = all_antag_types[cur_antag_type] - if(antag && antag.is_type(antag_type)) - return antag - -/proc/clear_antag_roles(var/datum/mind/player, var/implanted) - var/list/all_antag_types = GLOB.all_antag_types_ - for(var/antag_type in all_antag_types) - var/datum/antagonist/antag = all_antag_types[antag_type] - if(!implanted || !(antag.flags & ANTAG_IMPLANT_IMMUNE)) - antag.remove_antagonist(player, 1, implanted) - -/proc/update_antag_icons(var/datum/mind/player) - var/list/all_antag_types = GLOB.all_antag_types_ - for(var/antag_type in all_antag_types) - var/datum/antagonist/antag = all_antag_types[antag_type] - if(player) - antag.update_icons_removed(player) - if(antag.is_antagonist(player)) - antag.update_icons_added(player) - else - antag.update_all_icons() - -/proc/get_antags(var/atype) - var/datum/antagonist/antag = GLOB.all_antag_types_[atype] - if(antag && islist(antag.current_antagonists)) - return antag.current_antagonists - return list() - -/proc/player_is_antag(var/datum/mind/player, var/only_offstation_roles = 0) - var/list/all_antag_types = GLOB.all_antag_types_ - for(var/antag_type in all_antag_types) - var/datum/antagonist/antag = all_antag_types[antag_type] - if(only_offstation_roles && !(antag.flags & ANTAG_OVERRIDE_JOB)) - continue - if(player in antag.current_antagonists) - return antag - if(player in antag.pending_antagonists) - return antag - return 0 - -GLOBAL_LIST_EMPTY(all_antag_types_) -GLOBAL_LIST_EMPTY(all_antag_spawnpoints_) -GLOBAL_LIST_EMPTY(antag_names_to_ids_) diff --git a/code/game/antagonist/alien/borer.dm b/code/game/antagonist/alien/borer.dm deleted file mode 100644 index 624a208b16582..0000000000000 --- a/code/game/antagonist/alien/borer.dm +++ /dev/null @@ -1,64 +0,0 @@ -GLOBAL_DATUM_INIT(borers, /datum/antagonist/borer, new) - -/datum/antagonist/borer - id = MODE_BORER - role_text = "Cortical Borer" - role_text_plural = "Cortical Borers" - flags = ANTAG_OVERRIDE_MOB | ANTAG_RANDSPAWN | ANTAG_OVERRIDE_JOB - - mob_path = /mob/living/simple_animal/borer - welcome_text = "Use your Infest power to crawl into the ear of a host and fuse with their brain. You can only take control temporarily, and at risk of hurting your host, so be clever and careful; your host is encouraged to help you however they can. Talk to your fellow borers with :x." - antag_indicator = "hudborer" - antaghud_indicator = "hudborer" - - faction_role_text = "Borer Thrall" - faction_descriptor = "Unity" - faction_welcome = "You are now a thrall to a cortical borer. Please listen to what they have to say; they're in your head." - faction = "borer" - faction_indicator = "hudalien" - - hard_cap = 5 - hard_cap_round = 8 - initial_spawn_req = 3 - initial_spawn_target = 5 - - spawn_announcement_title = "Lifesign Alert" - spawn_announcement_delay = 5000 - -/datum/antagonist/borer/get_extra_panel_options(var/datum/mind/player) - return "\[put in host\]" - -/datum/antagonist/borer/create_objectives(var/datum/mind/player) - if(!..()) - return - player.objectives += new /datum/objective/borer_survive() - player.objectives += new /datum/objective/borer_reproduce() - player.objectives += new /datum/objective/escape() - -/datum/antagonist/borer/place_mob(var/mob/living/mob) - var/mob/living/simple_animal/borer/borer = mob - if(istype(borer)) - var/mob/living/carbon/human/host - for(var/mob/living/carbon/human/H in SSmobs.mob_list) - if(H.stat != DEAD && !H.has_brain_worms()) - var/obj/item/organ/external/head = H.get_organ(BP_HEAD) - if(head && !BP_IS_ROBOTIC(head)) - host = H - break - if(istype(host)) - var/obj/item/organ/external/head = host.get_organ(BP_HEAD) - if(head) - borer.host = host - head.implants += borer - borer.forceMove(head) - if(!borer.host_brain) - borer.host_brain = new(borer) - borer.host_brain.SetName(host.name) - borer.host_brain.real_name = host.real_name - return - ..() // Place them at a vent if they can't get a host. - -/datum/antagonist/borer/Initialize() - spawn_announcement = replacetext_char(GLOB.using_map.unidentified_lifesigns_message, "%STATION_NAME%", station_name()) - spawn_announcement_sound = GLOB.using_map.lifesign_spawn_sound - ..() diff --git a/code/game/antagonist/antagonist.dm b/code/game/antagonist/antagonist.dm deleted file mode 100644 index fe149ba0cf737..0000000000000 --- a/code/game/antagonist/antagonist.dm +++ /dev/null @@ -1,272 +0,0 @@ -/datum/antagonist - - // Text shown when becoming this antagonist. - var/list/restricted_jobs = list() // Jobs that cannot be this antagonist at roundstart (depending on config) - var/list/protected_jobs = list() // As above. - var/list/blacklisted_jobs = list(/datum/job/submap) // Jobs that can NEVER be this antagonist - - // Strings. - var/welcome_text = "Cry havoc and let slip the dogs of war!" - var/leader_welcome_text // Text shown to the leader, if any. - var/victory_text // World output at roundend for victory. - var/loss_text // As above for loss. - var/victory_feedback_tag // Used by the database for end of round loss. - var/loss_feedback_tag // Used by the database for end of round loss. - - // Role data. - var/id = "traitor" // Unique datum identifier. Also preferences option for this role. - var/role_text = "Traitor" // special_role text. - var/role_text_plural = "Traitors" // As above but plural. - - // Visual references. - var/antaghud_indicator = "hudsyndicate" // Used by the ghost antagHUD. - var/antag_indicator // icon_state for icons/mob/mob.dm visual indicator. - var/faction_indicator // See antag_indicator, but for factionalized people only. - var/faction_invisible // Can members of the faction identify other antagonists? - - // Faction data. - var/faction_role_text // Role for sub-antags. Mandatory for faction role. - var/faction_descriptor // Description of the cause. Mandatory for faction role. - var/faction_verb // Verb added when becoming a member of the faction, if any. - var/faction_welcome // Message shown to faction members. - var/faction = "neutral" // Actual faction name. Used primarily in stuff like simple_animals seeing if you are a threat or not. - - // Spawn values (autotraitor and game mode) - var/hard_cap = 3 // Autotraitor var. Won't spawn more than this many antags. - var/hard_cap_round = 5 // As above but 'core' round antags ie. roundstart. - var/initial_spawn_req = 1 // Gamemode using this template won't start without this # candidates. - var/initial_spawn_target = 3 // Gamemode will attempt to spawn this many antags. - var/announced // Has an announcement been sent? - var/spawn_announcement // When the datum spawn proc is called, does it announce to the world? (ie. borers) - var/spawn_announcement_title // Report title. - var/spawn_announcement_sound // Report sound clip. - var/spawn_announcement_delay // Time between initial spawn and round announcement. - - // Misc. - var/landmark_id // Spawn point identifier. - var/mob_path = /mob/living/carbon/human // Mobtype this antag will use if none is provided. - var/feedback_tag = "traitor_objective" // End of round - var/minimum_player_age = 7 // Players need to be at least minimum_player_age days old before they are eligable for auto-spawning - var/suspicion_chance = 50 // Prob of being on the initial Command report - var/flags = 0 // Various runtime options. - var/show_objectives_on_creation = 1 // Whether or not objectives are shown when a player is added to this antag datum - var/datum/antag_skill_setter/skill_setter = /datum/antag_skill_setter/generic // Used to set up skills. - var/datum/language/required_language = null - - // Used for setting appearance. - var/list/valid_species = list(SPECIES_UNATHI,SPECIES_SKRELL,SPECIES_HUMAN,SPECIES_VOX) - var/min_player_age = 14 - - // Runtime vars. - var/datum/mind/leader // Current leader, if any. - var/cur_max = 0 // Autotraitor current effective maximum. - var/list/current_antagonists = list() // All marked antagonists for this type. - var/list/pending_antagonists = list() // Candidates that are awaiting finalized antag status. - var/list/starting_locations = list() // Spawn points. - var/list/global_objectives = list() // Universal objectives if any. - var/list/candidates = list() // Potential candidates. - var/list/faction_members = list() // Semi-antags (in-round revs, borer thralls) - - // ID card stuff. - var/default_access = list() - var/id_type = /obj/item/card/id - - var/antag_text = "You are an antagonist! Within the rules, \ - try to act as an opposing force to the crew. Further RP and try to make sure \ - other players have fun! If you are confused or at a loss, always adminhelp, \ - and before taking extreme actions, please try to also contact the administration! \ - Think through your actions and make the roleplay immersive! Please remember all \ - rules aside from those without explicit exceptions apply to antagonists." - - // Map template that antag needs to load before spawning. Nulled after it's loaded. - var/datum/map_template/base_to_load - -/datum/antagonist/New() - GLOB.all_antag_types_[id] = src - GLOB.all_antag_spawnpoints_[landmark_id] = list() - GLOB.antag_names_to_ids_[role_text] = id - if(ispath(skill_setter)) - skill_setter = new skill_setter - ..() - -/datum/antagonist/proc/Initialize() - cur_max = hard_cap - get_starting_locations() - if(!role_text_plural) - role_text_plural = role_text - if(config.protect_roles_from_antagonist) - restricted_jobs |= protected_jobs - if(antaghud_indicator) - if(!GLOB.hud_icon_reference) - GLOB.hud_icon_reference = list() - if(role_text) GLOB.hud_icon_reference[role_text] = antaghud_indicator - if(faction_role_text) GLOB.hud_icon_reference[faction_role_text] = antaghud_indicator - -/datum/antagonist/proc/get_antag_text(mob/recipient) - return antag_text - -/datum/antagonist/proc/get_welcome_text(mob/recipient) - return welcome_text - -/datum/antagonist/proc/get_leader_welcome_text(mob/recipient) - return leader_welcome_text - -/datum/antagonist/proc/tick() - return 1 - -/// Get the raw list of potential players. -/datum/antagonist/proc/build_candidate_list(datum/game_mode/mode, ghosts_only) - candidates = list() // Clear. - - // Prune restricted status. Broke it up for readability. - // Note that this is done before jobs are handed out. - for(var/datum/mind/player in mode.get_players_for_role(id)) - if (ghosts_only && !(isghostmind(player) || isnewplayer(player.current))) - log_debug("[key_name(player)] is not eligible to become a [role_text]: Only ghosts may join as this role!") - continue - if (player.special_role) - log_debug("[key_name(player)] is not eligible to become a [role_text]: They already have a special role ([player.special_role])!") - continue - if (player in pending_antagonists) - log_debug("[key_name(player)] is not eligible to become a [role_text]: They have already been selected for this role!") - continue - if (player_is_antag(player)) - log_debug("[key_name(player)] is not eligible to become a [role_text]: They are already an antagonist!") - continue - var/result = can_become_antag_detailed(player) - if (result) - log_debug("[key_name(player)] is not eligible to become a [role_text]: [result]") - continue - candidates |= player - - return candidates - -// Builds a list of potential antags without actually setting them. Used to test mode viability. -/datum/antagonist/proc/get_potential_candidates(var/datum/game_mode/mode, var/ghosts_only) - var/candidates = list() - - // Keeping broken up for readability - for(var/datum/mind/player in mode.get_players_for_role(id)) - if(ghosts_only && !(isghostmind(player) || isnewplayer(player.current))) - else if(config.use_age_restriction_for_antags && player.current.client.player_age < minimum_player_age) - else if(player.special_role) - else if (player in pending_antagonists) - else if(!can_become_antag(player)) - else if(player_is_antag(player)) - else - candidates |= player - - return candidates - -/datum/antagonist/proc/attempt_random_spawn() - update_current_antag_max(SSticker.mode) - build_candidate_list(SSticker.mode, flags & (ANTAG_OVERRIDE_MOB|ANTAG_OVERRIDE_JOB)) - attempt_spawn() - finalize_spawn() - -/datum/antagonist/proc/attempt_auto_spawn() - if(!can_late_spawn()) - return 0 - - update_current_antag_max(SSticker.mode) - var/active_antags = get_active_antag_count() - message_admins("[uppertext(id)]: Found [active_antags]/[cur_max] active [role_text_plural].") - - if(active_antags >= cur_max) - message_admins("Could not auto-spawn a [role_text], active antag limit reached.") - return 0 - - build_candidate_list(SSticker.mode, flags & (ANTAG_OVERRIDE_MOB|ANTAG_OVERRIDE_JOB)) - if(!candidates.len) - message_admins("Could not auto-spawn a [role_text], no candidates found.") - return 0 - - attempt_spawn(1) //auto-spawn antags one at a time - if(!pending_antagonists.len) - message_admins("Could not auto-spawn a [role_text], none of the available candidates could be selected.") - return 0 - - var/datum/mind/player = pending_antagonists[1] - if(!add_antagonist(player,0,0,0,1,1)) - message_admins("Could not auto-spawn a [role_text], failed to add antagonist.") - return 0 - - reset_antag_selection() - - return 1 - -//Selects players that will be spawned in the antagonist role from the potential candidates -//Selected players are added to the pending_antagonists lists. -//Attempting to spawn an antag role with ANTAG_OVERRIDE_JOB should be done before jobs are assigned, -//so that they do not occupy regular job slots. All other antag roles should be spawned after jobs are -//assigned, so that job restrictions can be respected. -/datum/antagonist/proc/attempt_spawn(var/spawn_target = null) - if(spawn_target == null) - spawn_target = initial_spawn_target - - // Update our boundaries. - if(!candidates.len) - return 0 - - //Grab candidates randomly until we have enough. - while(candidates.len && pending_antagonists.len < spawn_target) - var/datum/mind/player = pick(candidates) - candidates -= player - draft_antagonist(player) - - return 1 - -/datum/antagonist/proc/draft_antagonist(datum/mind/player) - //Check if the player can join in this antag role, or if the player has already been given an antag role. - if(player.special_role) - log_debug("[player.key] was selected for [role_text] by lottery, but they already have a special role.") - return FALSE - if(!(flags & ANTAG_OVERRIDE_JOB) && (!player.current || istype(player.current, /mob/new_player))) - log_debug("[player.key] was selected for [role_text] by lottery, but they have not joined the game.") - return FALSE - if(GAME_STATE >= RUNLEVEL_GAME && (isghostmind(player) || isnewplayer(player.current)) && !(player in SSticker.antag_pool)) - log_debug("[player.key] was selected for [role_text] by lottery, but they are a ghost not in the antag pool.") - return FALSE - var/result = can_become_antag_detailed(player) - if (result) - log_debug("[player.key] was selected for [role_text] by lottery, but is not allowed: [result].") - return FALSE - - pending_antagonists |= player - log_debug("[player.key] has been selected for [role_text] by lottery.") - - //Ensure that antags with ANTAG_OVERRIDE_JOB do not occupy job slots. - if(flags & ANTAG_OVERRIDE_JOB) - player.assigned_role = role_text - player.role_alt_title = null - - //Ensure that a player cannot be drafted for multiple antag roles, taking up slots for antag roles that they will not fill. - player.special_role = role_text - - return TRUE - -//Spawns all pending_antagonists. This is done separately from attempt_spawn in case the game mode setup fails. -/datum/antagonist/proc/finalize_spawn() - if(!pending_antagonists) - return - - for(var/datum/mind/player in pending_antagonists) - pending_antagonists -= player - add_antagonist(player,0,0,1) - - reset_antag_selection() - -//Procced after /ALL/ antagonists have finished setting up and spawning. -/datum/antagonist/proc/post_spawn() - return - -//Resets the antag selection, clearing all pending_antagonists -//(and assigned_role if ANTAG_OVERRIDE_JOB is set) as well as clearing the candidate list. -//Existing antagonists are left untouched. -/datum/antagonist/proc/reset_antag_selection() - for(var/datum/mind/player in pending_antagonists) - if(flags & ANTAG_OVERRIDE_JOB) - player.assigned_job = null - player.assigned_role = null - pending_antagonists.Cut() - candidates.Cut() diff --git a/code/game/antagonist/antagonist_add.dm b/code/game/antagonist/antagonist_add.dm deleted file mode 100644 index d11a9b3508598..0000000000000 --- a/code/game/antagonist/antagonist_add.dm +++ /dev/null @@ -1,95 +0,0 @@ -/datum/antagonist/proc/add_antagonist(var/datum/mind/player, var/ignore_role, var/do_not_equip, var/move_to_spawn, var/do_not_announce, var/preserve_appearance) - - if(!add_antagonist_mind(player, ignore_role)) - return - - if(base_to_load) - var/datum/map_template/base = new base_to_load() - report_progress("Loading map template '[base]' for [role_text]...") - base_to_load = null - base.load_new_z() - get_starting_locations() - - //do this again, just in case - if(flags & ANTAG_OVERRIDE_JOB) - player.assigned_job = null - player.assigned_role = role_text - player.role_alt_title = null - player.special_role = role_text - - if(isghostmind(player)) - create_default(player.current) - else - create_antagonist(player, move_to_spawn, do_not_announce, preserve_appearance) - if(istype(skill_setter)) - skill_setter.initialize_skills(player.current.skillset) - if(!do_not_equip) - equip(player.current) - - if(player.current) - player.current.faction = faction - return 1 - -/datum/antagonist/proc/add_antagonist_mind(var/datum/mind/player, var/ignore_role, var/nonstandard_role_type, var/nonstandard_role_msg) - if(!istype(player)) - return 0 - if(!player.current) - return 0 - if(player in current_antagonists) - return 0 - if(!can_become_antag(player, ignore_role)) - return 0 - current_antagonists |= player - - if(faction_verb) - player.current.verbs |= faction_verb - - if(config.objectives_disabled == CONFIG_OBJECTIVE_VERB) - player.current.verbs += /mob/proc/add_objectives - - if(player.current.client) - player.current.client.verbs += /client/proc/aooc - - spawn(1 SECOND) //Added a delay so that this should pop up at the bottom and not the top of the text flood the new antag gets. - to_chat(player.current, "Once you decide on a goal to pursue, you can optionally display it to \ - everyone at the end of the shift with the Set Ambition verb, located in the IC tab. You can change this at any time, \ - and it otherwise has no bearing on your round.") - player.current.verbs += /mob/living/proc/set_ambition - - // Handle only adding a mind and not bothering with gear etc. - if(nonstandard_role_type) - faction_members |= player - to_chat(player.current, "You are \a [nonstandard_role_type]!") - player.special_role = nonstandard_role_type - if(nonstandard_role_msg) - to_chat(player.current, "[nonstandard_role_msg]") - update_icons_added(player) - return 1 - -/datum/antagonist/proc/remove_antagonist(var/datum/mind/player, var/show_message, var/implanted) - if(!istype(player)) - return 0 - if (player.current) - if (faction_verb) - player.current.verbs -= faction_verb - if (faction && player.current.faction == faction) - player.current.faction = MOB_FACTION_NEUTRAL - if(player in current_antagonists) - to_chat(player.current, "You are no longer a [role_text]!") - current_antagonists -= player - faction_members -= player - player.special_role = null - update_icons_removed(player) - - if(player.current) - SET_BIT(player.current.hud_updateflag, SPECIALROLE_HUD) - player.current.reset_skillset() //Reset their skills to be job-appropriate. - - if(!is_special_character(player)) - if(player.current) - player.current.verbs -= /mob/living/proc/set_ambition - if(player.current.client) - player.current.client.verbs -= /client/proc/aooc - qdel(SSgoals.ambitions[player]) - return 1 - return 0 diff --git a/code/game/antagonist/antagonist_create.dm b/code/game/antagonist/antagonist_create.dm deleted file mode 100644 index 5b41efbfd18ca..0000000000000 --- a/code/game/antagonist/antagonist_create.dm +++ /dev/null @@ -1,83 +0,0 @@ -/datum/antagonist/proc/create_antagonist(var/datum/mind/target, var/move, var/gag_announcement, var/preserve_appearance) - - if(!target) - return - - update_antag_mob(target, preserve_appearance) - if(!target.current) - remove_antagonist(target) - return 0 - if(flags & ANTAG_CHOOSE_NAME) - spawn(1) - set_antag_name(target.current) - if(move) - place_mob(target.current) - update_leader() - create_objectives(target) - update_icons_added(target) - greet(target) - if(!gag_announcement) - announce_antagonist_spawn() - -/datum/antagonist/proc/create_default(var/mob/source) - var/mob/living/M - if(mob_path) - M = new mob_path(get_turf(source)) - else - M = new /mob/living/carbon/human(get_turf(source)) - M.ckey = source.ckey - add_antagonist(M.mind, 1, 0, 1) // Equip them and move them to spawn. - return M - -/datum/antagonist/proc/create_id(var/assignment, var/mob/living/carbon/human/player, var/equip = 1) - - var/obj/item/card/id/W = new id_type(player) - if(!W) return - W.access |= default_access - W.assignment = "[assignment]" - player.set_id_info(W) - if(equip) player.equip_to_slot_or_del(W, slot_wear_id) - return W - -/datum/antagonist/proc/create_radio(var/freq, var/mob/living/carbon/human/player) - var/obj/item/device/radio/R - - switch(freq) - if(SYND_FREQ) - R = new/obj/item/device/radio/headset/syndicate(player) - if(RAID_FREQ) - R = new/obj/item/device/radio/headset/raider(player) - if(V_RAID_FREQ) - R = new/obj/item/device/radio/headset/vox_raider(player) - else - R = new/obj/item/device/radio/headset(player) - R.set_frequency(freq) - - player.equip_to_slot_or_del(R, slot_l_ear) - return R - -/datum/antagonist/proc/greet(var/datum/mind/player) - - // Basic intro text. - to_chat(player.current, "You are a [role_text]!") - if(leader_welcome_text && player == leader) - to_chat(player.current, "[get_leader_welcome_text(player.current)]") - else - to_chat(player.current, "[get_welcome_text(player.current)]") - if (config.objectives_disabled == CONFIG_OBJECTIVE_NONE || !player.objectives.len) - to_chat(player.current, get_antag_text(player.current)) - - src.show_objectives_at_creation(player) - return 1 - -/datum/antagonist/proc/set_antag_name(var/mob/living/player) - // Choose a name, if any. - var/newname = sanitize(input(player, "You are a [role_text]. Would you like to change your name to something else?", "Name change") as null|text, MAX_NAME_LEN) - if (newname) - player.real_name = newname - player.SetName(player.real_name) - if(player.dna) - player.dna.real_name = newname - if(player.mind) player.mind.name = player.name - // Update any ID cards. - update_access(player) diff --git a/code/game/antagonist/antagonist_equip.dm b/code/game/antagonist/antagonist_equip.dm deleted file mode 100644 index 64422c59c501f..0000000000000 --- a/code/game/antagonist/antagonist_equip.dm +++ /dev/null @@ -1,41 +0,0 @@ -/datum/antagonist/proc/equip(var/mob/living/carbon/human/player) - - if(!istype(player)) - return 0 - - if (required_language) - player.add_language(required_language) - player.set_default_language(all_languages[required_language]) - - // This could use work. - if(flags & ANTAG_CLEAR_EQUIPMENT) - for(var/obj/item/thing in player.contents) - if(player.canUnEquip(thing)) - qdel(thing) - //mainly for vox antag compatibility. Should not effect item spawning. - player.species.equip_survival_gear(player) - return 1 - -/datum/antagonist/proc/unequip(var/mob/living/carbon/human/player) - if(!istype(player)) - return 0 - return 1 - -/datum/antagonist/proc/equip_rig(var/rig_type, var/mob/living/carbon/human/player) - set waitfor = 0 - if(istype(player) && ispath(rig_type)) - var/obj/item/rig/rig = new rig_type(player) - rig.seal_delay = 0 - player.put_in_hands(rig) - player.equip_to_slot_or_del(rig,slot_back) - if(rig) - rig.visible_name = player.real_name - rig.toggle_seals(src,1) - rig.seal_delay = initial(rig.seal_delay) - if(rig.air_supply) - player.set_internals(rig.air_supply) - return rig - -//Some modes allow swapping to a vox from their initial mobs. Equip them here. -/datum/antagonist/proc/equip_vox(mob/living/carbon/human/vox, mob/living/carbon/human/old) - return diff --git a/code/game/antagonist/antagonist_factions.dm b/code/game/antagonist/antagonist_factions.dm deleted file mode 100644 index b387d7b03f9fd..0000000000000 --- a/code/game/antagonist/antagonist_factions.dm +++ /dev/null @@ -1,52 +0,0 @@ -/mob/living/proc/convert_to_rev(mob/M as mob in able_mobs_in_oview(src)) - set name = "Recruit to Faction" - set category = "Abilities" - if(!M.mind || !M.client) - return - convert_to_faction(M.mind, GLOB.revs) - -/mob/living/proc/convert_to_faction(var/datum/mind/player, var/datum/antagonist/faction) - - if(!player || !faction || !player.current) - return - - if(!faction.faction_verb || !faction.faction_descriptor || !faction.faction_verb) - return - - if(player_is_antag(player)) - to_chat(src, "\The [player.current]'s loyalties seem to be elsewhere...") - log_debug("\The [src] attempted to convert \the [player.current] to [faction], but failed: Player is already an antagonist.") - return - - var/result = faction.can_become_antag_detailed(player, TRUE) - if(result) - to_chat(src, "\The [player.current] cannot be \a [faction.faction_role_text]!") - log_debug("\The [src] attempted to convert \the [player.current] to [faction], but failed: [result]") - return - - if(world.time < player.rev_cooldown) - to_chat(src, "You must wait five seconds between attempts.") - return - - to_chat(src, "You are attempting to convert \the [player.current]...") - log_admin("[src]([src.ckey]) attempted to convert [player.current] to the [faction.faction_role_text] faction.") - message_admins("[src]([src.ckey]) attempted to convert [player.current] to the [faction.faction_role_text] faction.") - - player.rev_cooldown = world.time + 5 SECONDS - if (!faction.is_antagonist(player)) - var/choice = alert(player.current,"Asked by [src]: Do you want to join the [faction.faction_descriptor]?","Join the [faction.faction_descriptor]?","No!","Yes!") - if(choice == "Yes!" && faction.add_antagonist_mind(player, 0, faction.faction_role_text, faction.faction_welcome)) - to_chat(src, "\The [player.current] joins the [faction.faction_descriptor]!") - log_debug("\The [src] has successfully converted \the [player.current] to [faction].") - return - else - to_chat(player, "You reject this traitorous cause!") - to_chat(src, "\The [player.current] does not support the [faction.faction_descriptor]!") - log_debug("\The [src] attempted to convert \the [player.current] to [faction], but failed: The player refused to join or the faction failed to add them.") - -/mob/living/proc/convert_to_loyalist(mob/M as mob in able_mobs_in_oview(src)) - set name = "Convert" - set category = "Abilities" - if(!M.mind || !M.client) - return - convert_to_faction(M.mind, GLOB.loyalists) diff --git a/code/game/antagonist/antagonist_helpers.dm b/code/game/antagonist/antagonist_helpers.dm deleted file mode 100644 index 023e85188d0ef..0000000000000 --- a/code/game/antagonist/antagonist_helpers.dm +++ /dev/null @@ -1,83 +0,0 @@ -/** Checks if the given player is able to become an antagonist or not. - * Will return 'FALSE' if they can become an antagonist, or a string value describing why they cannot become one. - * Use strict type comparisons for truthiness values. - * `ignore_role` will skip restriced job, player age, and player status flag checks. - */ -/datum/antagonist/proc/can_become_antag_detailed(datum/mind/player, ignore_role) - if(player.current) - if(jobban_isbanned(player.current, id)) - return "Player is banned from this antagonist role." - if(player.current.faction != MOB_FACTION_NEUTRAL) - return "Player is already assigned to a non-neutral faction ([player.current.faction])." - - if(is_type_in_list(player.assigned_job, blacklisted_jobs)) - return "Player's assigned job ([player.assigned_job]) is blacklisted from this antagonist role." - - if(!ignore_role) - if(player.current && player.current.client) - var/client/C = player.current.client - // Limits antag status to clients above player age, if the age system is being used. - if(C && config.use_age_restriction_for_jobs && isnum(C.player_age) && isnum(min_player_age) && (C.player_age < min_player_age)) - return "Player's server age ([C.player_age]) is below the minimum player age ([min_player_age])." - if(is_type_in_list(player.assigned_job, restricted_jobs)) - return "Player's assigned job ([player.assigned_job]) is restricted from this antagonist role." - if(player.current && (player.current.status_flags & NO_ANTAG)) - return "Player's mob has the NO_ANTAG flag set." - return FALSE - -/// Checks if the given player is able to become an antagonist or not. Simplified version of `can_become_antag_detailed()`. -/datum/antagonist/proc/can_become_antag(datum/mind/player, ignore_role) - return !can_become_antag_detailed(player, ignore_role) - -/datum/antagonist/proc/antags_are_dead() - for(var/datum/mind/antag in current_antagonists) - if(mob_path && !istype(antag.current,mob_path)) - continue - if(antag.current.stat==2) - continue - return 0 - return 1 - -/datum/antagonist/proc/get_antag_count() - return current_antagonists ? current_antagonists.len : 0 - -/datum/antagonist/proc/get_active_antag_count() - var/active_antags = 0 - for(var/datum/mind/player in current_antagonists) - var/mob/living/L = player.current - if(!L || L.stat == DEAD) - continue //no mob or dead - if(!L.client && !L.teleop) - continue //SSD - active_antags++ - return active_antags - -/datum/antagonist/proc/is_antagonist(var/datum/mind/player) - if(player in current_antagonists) - return 1 - -/datum/antagonist/proc/is_type(var/antag_type) - if(antag_type == id || antag_type == role_text) - return 1 - return 0 - -/datum/antagonist/proc/is_votable() - return (flags & ANTAG_VOTABLE) - -/datum/antagonist/proc/can_late_spawn() - if(!SSticker.mode) - return 0 - if(!(id in SSticker.mode.latejoin_antag_tags)) - return 0 - return 1 - -/datum/antagonist/proc/is_latejoin_template() - return (flags & (ANTAG_OVERRIDE_MOB|ANTAG_OVERRIDE_JOB)) - -/proc/all_random_antag_types() - // No caching as the ANTAG_RANDOM_EXCEPTED flag can be added/removed mid-round. - var/list/antag_candidates = GLOB.all_antag_types_.Copy() - for(var/datum/antagonist/antag in antag_candidates) - if(antag.flags & ANTAG_RANDOM_EXCEPTED) - antag_candidates -= antag - return antag_candidates diff --git a/code/game/antagonist/antagonist_objectives.dm b/code/game/antagonist/antagonist_objectives.dm deleted file mode 100644 index d528bbb2d45cf..0000000000000 --- a/code/game/antagonist/antagonist_objectives.dm +++ /dev/null @@ -1,69 +0,0 @@ -/datum/antagonist/proc/create_global_objectives(var/override=0) - if(config.objectives_disabled != CONFIG_OBJECTIVE_ALL && !override) - return 0 - if(global_objectives && global_objectives.len) - return 0 - return 1 - -/datum/antagonist/proc/create_objectives(var/datum/mind/player, var/override=0) - if(config.objectives_disabled != CONFIG_OBJECTIVE_ALL && !override) - return 0 - if(create_global_objectives(override) || global_objectives.len) - player.objectives |= global_objectives - return 1 - -/datum/antagonist/proc/get_special_objective_text() - return "" - -/mob/proc/add_objectives() - set name = "Get Objectives" - set desc = "Recieve optional objectives." - set category = "OOC" - - src.verbs -= /mob/proc/add_objectives - - if(!src.mind) - return - - var/all_antag_types = GLOB.all_antag_types_ - for(var/tag in all_antag_types) //we do all of them in case an admin adds an antagonist via the PP. Those do not show up in gamemode. - var/datum/antagonist/antagonist = all_antag_types[tag] - if(antagonist && antagonist.is_antagonist(src.mind)) - antagonist.create_objectives(src.mind,1) - - to_chat(src, "These objectives are completely voluntary. You are not required to complete them.") - show_objectives(src.mind) - -/mob/living/proc/set_ambition() - set name = "Set Ambition" - set category = "IC" - set src = usr - - if(!mind) - return - if(!is_special_character(mind)) - to_chat(src, "While you may perhaps have goals, this verb's meant to only be visible \ - to antagonists. Please make a bug report!") - return - - var/datum/goal/ambition/goal = SSgoals.ambitions[mind] - var/new_goal = sanitize(input(src, "Write a short sentence of what your character hopes to accomplish \ - today as an antagonist. Remember that this is purely optional. It will be shown at the end of the \ - round for everybody else.", "Antagonist Goal", (goal ? html_decode(goal.description) : "")) as null|message) - if(!isnull(new_goal)) - if(!goal) - goal = new /datum/goal/ambition(mind) - goal.description = new_goal - to_chat(src, "You've set your goal to be '[goal.description]'. You can check your goals with the Show Goals verb.") - else - to_chat(src, "You leave your ambitions behind.") - if(goal) - qdel(goal) - log_and_message_admins("has set their ambitions to now be: [new_goal].") - -//some antagonist datums are not actually antagonists, so we might want to avoid -//sending them the antagonist meet'n'greet messages. -//E.G. ERT -/datum/antagonist/proc/show_objectives_at_creation(var/datum/mind/player) - if(src.show_objectives_on_creation) - show_objectives(player) \ No newline at end of file diff --git a/code/game/antagonist/antagonist_panel.dm b/code/game/antagonist/antagonist_panel.dm deleted file mode 100644 index 8bf4bdb94dbb1..0000000000000 --- a/code/game/antagonist/antagonist_panel.dm +++ /dev/null @@ -1,46 +0,0 @@ -/datum/antagonist/proc/get_panel_entry(var/datum/mind/player) - - var/dat = "[role_text]:" - var/extra = get_extra_panel_options(player) - if(is_antagonist(player)) - dat += "\[-\]" - dat += "\[equip\]" - if(starting_locations && starting_locations.len) - dat += "\[move to spawn\]" - if(extra) dat += "[extra]" - else - dat += "\[+\]" - dat += "" - - return dat - -/datum/antagonist/proc/get_extra_panel_options() - return - -/datum/antagonist/proc/get_check_antag_output(var/datum/admins/caller) - - if(!current_antagonists || !current_antagonists.len) - return "" - - var/dat = "
      " - for(var/datum/mind/player in current_antagonists) - var/mob/M = player.current - dat += "" - if(M) - dat += "" - dat += "" - else - dat += "" - dat += "" - dat += "
      [role_text_plural]
      [M.real_name]/([player.key])" - if(!M.client) dat += " (logged out)" - if(M.stat == DEAD) dat += " (DEAD)" - dat += "\[PM\]\[TP\]Mob not found/([player.key])!
      " - - dat += get_additional_check_antag_output(caller) - dat += "
      " - return dat - -//Overridden elsewhere. -/datum/antagonist/proc/get_additional_check_antag_output(var/datum/admins/caller) - return "" diff --git a/code/game/antagonist/antagonist_place.dm b/code/game/antagonist/antagonist_place.dm deleted file mode 100644 index 11ea718f8ccd8..0000000000000 --- a/code/game/antagonist/antagonist_place.dm +++ /dev/null @@ -1,27 +0,0 @@ -/datum/antagonist/proc/get_starting_locations() - if(landmark_id) - starting_locations = list() - for(var/obj/effect/landmark/L in landmarks_list) - if(L.name == landmark_id) - starting_locations |= get_turf(L) - -/datum/antagonist/proc/announce_antagonist_spawn() - - if(spawn_announcement) - if(announced) - return - announced = 1 - spawn(0) - if(spawn_announcement_delay) - sleep(spawn_announcement_delay) - if(spawn_announcement_sound) - command_announcement.Announce("[spawn_announcement]", "[spawn_announcement_title ? spawn_announcement_title : "Priority Alert"]", new_sound = spawn_announcement_sound) - else - command_announcement.Announce("[spawn_announcement]", "[spawn_announcement_title ? spawn_announcement_title : "Priority Alert"]") - return - -/datum/antagonist/proc/place_mob(var/mob/living/mob) - if(!starting_locations || !starting_locations.len) - return - var/turf/T = pick_mobless_turf_if_exists(starting_locations) - mob.forceMove(T) diff --git a/code/game/antagonist/antagonist_print.dm b/code/game/antagonist/antagonist_print.dm deleted file mode 100644 index 013a10a00e9b2..0000000000000 --- a/code/game/antagonist/antagonist_print.dm +++ /dev/null @@ -1,52 +0,0 @@ -/datum/antagonist/proc/print_player_summary() - - if(!current_antagonists.len) - return 0 - - var/text = list() - text += "

      The [current_antagonists.len == 1 ? "[role_text] was" : "[role_text_plural] were"]:" - for(var/datum/mind/P in current_antagonists) - text += print_player(P) - text += get_special_objective_text(P) - var/datum/goal/ambition = SSgoals.ambitions[P] - if(ambition) - text += "
      Their goals for today were..." - text += "
      [ambition.summarize()]" - if(!global_objectives.len && P.objectives && P.objectives.len) - var/num = 1 - for(var/datum/objective/O in P.objectives) - text += print_objective(O, num) - num++ - - if(global_objectives && global_objectives.len) - text += "
      Their objectives were:" - var/num = 1 - for(var/datum/objective/O in global_objectives) - text += print_objective(O, num) - num++ - - // Display the results. - text += "
      " - to_world(jointext(text,null)) - - -/datum/antagonist/proc/print_objective(var/datum/objective/O, var/num) - return "
      Objective [num]: [O.explanation_text] " - -/datum/antagonist/proc/print_player(var/datum/mind/ply) - var/role = ply.assigned_role ? "\improper[ply.assigned_role]" : (ply.special_role ? "\improper[ply.special_role]" : "unknown role") - var/text = "
      [ply.name] [(ply.current?.get_preference_value(/datum/client_preference/show_ckey_credits) == GLOB.PREF_SHOW) ? "([ply.key])" : ""] as \a [role] (" - if(ply.current) - if(ply.current.stat == DEAD) - text += "died" - else if(isNotStationLevel(ply.current.z)) - text += "fled" - else - text += "survived" - if(ply.current.real_name != ply.name) - text += " as [ply.current.real_name]" - else - text += "body destroyed" - text += ")" - - return text diff --git a/code/game/antagonist/antagonist_update.dm b/code/game/antagonist/antagonist_update.dm deleted file mode 100644 index 3dc69f13284c9..0000000000000 --- a/code/game/antagonist/antagonist_update.dm +++ /dev/null @@ -1,96 +0,0 @@ -/datum/antagonist/proc/update_leader() - if(!leader && current_antagonists.len && (flags & ANTAG_HAS_LEADER)) - leader = current_antagonists[1] - -/datum/antagonist/proc/update_antag_mob(var/datum/mind/player, var/preserve_appearance) - - // Get the mob. - if((flags & ANTAG_OVERRIDE_MOB) && (!player.current || (mob_path && !istype(player.current, mob_path)))) - var/mob/holder = player.current - player.current = new mob_path(get_turf(player.current)) - player.transfer_to(player.current) - if(holder) qdel(holder) - player.original = player.current - if(!preserve_appearance && (flags & ANTAG_SET_APPEARANCE)) - spawn(3) - var/mob/living/carbon/human/H = player.current - if(istype(H)) - H.change_appearance(APPEARANCE_COMMON, TRUE, state = GLOB.z_state) - return player.current - -/datum/antagonist/proc/update_access(var/mob/living/player) - for(var/obj/item/card/id/id in player.contents) - player.set_id_info(id) - -/datum/antagonist/proc/clear_indicators(var/datum/mind/recipient) - if(!recipient.current || !recipient.current.client) - return - for(var/image/I in recipient.current.client.images) - if(I.icon_state == antag_indicator || (faction_indicator && I.icon_state == faction_indicator)) - qdel(I) - -/datum/antagonist/proc/get_indicator(var/datum/mind/recipient, var/datum/mind/other) - if(!antag_indicator || !other.current || !recipient.current) - return - var/indicator = (faction_indicator && (other in faction_members)) ? faction_indicator : antag_indicator - var/image/I = image('icons/mob/hud.dmi', loc = other.current, icon_state = indicator, layer = ABOVE_HUMAN_LAYER) - if(ishuman(other.current)) - var/mob/living/carbon/human/H = other.current - I.pixel_x = H.species.antaghud_offset_x - I.pixel_y = H.species.antaghud_offset_y - return I - -/datum/antagonist/proc/update_all_icons() - if(!antag_indicator) - return - for(var/datum/mind/antag in current_antagonists) - clear_indicators(antag) - if(faction_invisible && (antag in faction_members)) - continue - for(var/datum/mind/other_antag in current_antagonists) - if(antag.current && antag.current.client) - antag.current.client.images |= get_indicator(antag, other_antag) - -/datum/antagonist/proc/update_icons_added(var/datum/mind/player) - if(!antag_indicator || !player.current) - return - spawn(0) - - var/give_to_player = (!faction_invisible || !(player in faction_members)) - for(var/datum/mind/antag in current_antagonists) - if(!antag.current) - continue - if(antag.current.client) - antag.current.client.images |= get_indicator(antag, player) - if(!give_to_player) - continue - if(player.current.client) - player.current.client.images |= get_indicator(player, antag) - -/datum/antagonist/proc/update_icons_removed(var/datum/mind/player) - if(!antag_indicator || !player.current) - return - spawn(0) - clear_indicators(player) - if(player.current && player.current.client) - for(var/datum/mind/antag in current_antagonists) - if(antag.current && antag.current.client) - for(var/image/I in antag.current.client.images) - if(I.loc == player.current) - qdel(I) - -/datum/antagonist/proc/update_current_antag_max(datum/game_mode/mode) - cur_max = hard_cap - if(mode.antag_tags && (mode.antag_tags)) - cur_max = hard_cap_round - - if(mode.antag_scaling_coeff) - - var/count = 0 - for(var/mob/living/M in GLOB.player_list) - if(M.client) - count++ - - // Minimum: initial_spawn_target - // Maximum: hard_cap or hard_cap_round - cur_max = max(initial_spawn_target,min(round(count/mode.antag_scaling_coeff),cur_max)) diff --git a/code/game/antagonist/outsider/actors.dm b/code/game/antagonist/outsider/actors.dm deleted file mode 100644 index ac9adf97f56ba..0000000000000 --- a/code/game/antagonist/outsider/actors.dm +++ /dev/null @@ -1,57 +0,0 @@ -GLOBAL_DATUM_INIT(actor, /datum/antagonist/actor, new) - -/datum/antagonist/actor - id = MODE_ACTOR - role_text = "Actor" - role_text_plural = "Actors" - welcome_text = "You've been hired to entertain people through the power of television!" - landmark_id = "ActorSpawn" - id_type = /obj/item/card/id/syndicate - - flags = ANTAG_OVERRIDE_JOB | ANTAG_OVERRIDE_MOB | ANTAG_SET_APPEARANCE | ANTAG_CHOOSE_NAME | ANTAG_RANDOM_EXCEPTED - - hard_cap = 7 - hard_cap_round = 10 - initial_spawn_req = 1 - initial_spawn_target = 1 - show_objectives_on_creation = 0 //actors are not antagonists and do not need the antagonist greet text - required_language = LANGUAGE_HUMAN_EURO - -/datum/antagonist/actor/greet(var/datum/mind/player) - if(!..()) - return - - player.current.show_message("You work for [GLOB.using_map.company_name], tasked with the production and broadcasting of entertainment to all of its assets.") - player.current.show_message("Entertain the crew! Try not to disrupt them from their work too much and remind them how great [GLOB.using_map.company_name] is!") - -/datum/antagonist/actor/equip(var/mob/living/carbon/human/player) - player.equip_to_slot_or_del(new /obj/item/clothing/under/chameleon(src), slot_w_uniform) - player.equip_to_slot_or_del(new /obj/item/clothing/shoes/chameleon(src), slot_shoes) - player.equip_to_slot_or_del(new /obj/item/device/radio/headset/entertainment(src), slot_l_ear) - var/obj/item/card/id/centcom/ERT/C = new(player.loc) - C.assignment = "Actor" - player.set_id_info(C) - player.equip_to_slot_or_del(C,slot_wear_id) - - return 1 - -/client/verb/join_as_actor() - set category = "IC" - set name = "Join as Actor" - set desc = "Join as an Actor to entertain the crew through television!" - - if(!MayRespawn(1) || !GLOB.actor.can_become_antag(usr.mind, 1)) - return - - var/choice = alert("Are you sure you'd like to join as an actor?", "Confirmation","Yes", "No") - if(choice != "Yes") - return - - if(isghostmind(usr.mind) || isnewplayer(usr)) - if(GLOB.actor.current_antagonists.len >= GLOB.actor.hard_cap) - to_chat(usr, "No more actors may spawn at the current time.") - return - GLOB.actor.create_default(usr) - return - - to_chat(usr, "You must be observing or be a new player to spawn as an actor.") diff --git a/code/game/antagonist/outsider/commando.dm b/code/game/antagonist/outsider/commando.dm deleted file mode 100644 index 0c74257c2580c..0000000000000 --- a/code/game/antagonist/outsider/commando.dm +++ /dev/null @@ -1,31 +0,0 @@ -GLOBAL_DATUM_INIT(commandos, /datum/antagonist/deathsquad/mercenary, new) - -/datum/antagonist/deathsquad/mercenary - id = MODE_COMMANDO - landmark_id = "Syndicate-Commando" - role_text = "Syndicate Commando" - role_text_plural = "Commandos" - welcome_text = "You are in the employ of a criminal syndicate hostile to corporate interests." - id_type = /obj/item/card/id/centcom/ERT - flags = ANTAG_RANDOM_EXCEPTED - - hard_cap = 4 - hard_cap_round = 8 - initial_spawn_req = 4 - initial_spawn_target = 6 - -/datum/antagonist/deathsquad/mercenary/equip(var/mob/living/carbon/human/player) - - player.equip_to_slot_or_del(new /obj/item/clothing/under/syndicate(player), slot_w_uniform) - player.equip_to_slot_or_del(new /obj/item/clothing/shoes/swat(player), slot_shoes) - player.equip_to_slot_or_del(new /obj/item/clothing/glasses/thermal(player), slot_glasses) - player.equip_to_slot_or_del(new /obj/item/clothing/mask/gas/syndicate(player), slot_wear_mask) - player.equip_to_slot_or_del(new /obj/item/storage/box(player), slot_in_backpack) - player.equip_to_slot_or_del(new /obj/item/ammo_magazine/box/pistol(player), slot_in_backpack) - player.equip_to_slot_or_del(new /obj/item/rig/merc(player), slot_back) - player.equip_to_slot_or_del(new /obj/item/gun/energy/pulse_rifle(player), slot_r_hand) - player.equip_to_slot_or_del(new /obj/item/melee/energy/sword(player), slot_l_hand) - - create_id("Commando", player) - create_radio(SYND_FREQ, player) - return 1 diff --git a/code/game/antagonist/outsider/deathsquad.dm b/code/game/antagonist/outsider/deathsquad.dm deleted file mode 100644 index e1687f99b0f08..0000000000000 --- a/code/game/antagonist/outsider/deathsquad.dm +++ /dev/null @@ -1,84 +0,0 @@ -GLOBAL_DATUM_INIT(deathsquad, /datum/antagonist/deathsquad, new) - -/datum/antagonist/deathsquad - id = MODE_DEATHSQUAD - role_text = "Death Commando" - role_text_plural = "Death Commandos" - welcome_text = "You work in the service of corporate Asset Protection, answering directly to the Board of Directors." - landmark_id = "Commando" - flags = ANTAG_OVERRIDE_JOB | ANTAG_OVERRIDE_MOB | ANTAG_HAS_LEADER | ANTAG_RANDOM_EXCEPTED - default_access = list(access_cent_general, access_cent_specops, access_cent_living, access_cent_storage) - antaghud_indicator = "huddeathsquad" - - hard_cap = 4 - hard_cap_round = 8 - initial_spawn_req = 4 - initial_spawn_target = 6 - - faction = "deathsquad" - - var/deployed = 0 - -/datum/antagonist/deathsquad/attempt_spawn() - if(..()) - deployed = 1 - -/datum/antagonist/deathsquad/equip(var/mob/living/carbon/human/player) - if(!..()) - return - - if (player.mind == leader) - player.equip_to_slot_or_del(new /obj/item/clothing/under/rank/centcom_officer(player), slot_w_uniform) - else - player.equip_to_slot_or_del(new /obj/item/clothing/under/color/green(player), slot_w_uniform) - - player.equip_to_slot_or_del(new /obj/item/clothing/shoes/swat(player), slot_shoes) - player.equip_to_slot_or_del(new /obj/item/clothing/glasses/thermal(player), slot_glasses) - player.equip_to_slot_or_del(new /obj/item/clothing/mask/gas/swat(player), slot_wear_mask) - if (player.mind == leader) - player.equip_to_slot_or_del(new /obj/item/pinpointer(player), slot_l_store) - player.equip_to_slot_or_del(new /obj/item/disk/nuclear(player), slot_r_store) - else - player.equip_to_slot_or_del(new /obj/item/plastique(player), slot_l_store) - player.equip_to_slot_or_del(new /obj/item/gun/projectile/revolver(player), slot_belt) - player.equip_to_slot_or_del(new /obj/item/gun/energy/pulse_rifle(player), slot_r_hand) - player.equip_to_slot_or_del(new /obj/item/rig/combat(player), slot_back) - player.equip_to_slot_or_del(new /obj/item/melee/energy/sword(player), slot_l_hand) - player.implant_loyalty(player) - - var/obj/item/card/id/id = create_id("Asset Protection", player) - if(id) - id.access |= get_all_station_access() - id.icon_state = "centcom" - create_radio(DTH_FREQ, player) - -/datum/antagonist/deathsquad/update_antag_mob(var/datum/mind/player) - - ..() - - var/syndicate_commando_rank - if(leader && player == leader) - syndicate_commando_rank = pick("Corporal", "Sergeant", "Staff Sergeant", "Sergeant 1st Class", "Master Sergeant", "Sergeant Major") - else - syndicate_commando_rank = pick("Lieutenant", "Captain", "Major") - - var/syndicate_commando_name = pick(GLOB.last_names) - - var/datum/preferences/A = new() //Randomize appearance for the commando. - A.randomize_appearance_and_body_for(player.current) - - player.name = "[syndicate_commando_rank] [syndicate_commando_name]" - player.current.real_name = player.name - player.current.SetName(player.current.name) - - var/mob/living/carbon/human/H = player.current - if(istype(H)) - H.gender = pick(MALE, FEMALE) - H.age = rand(25,45) - H.dna.ready_dna(H) - - return - -/datum/antagonist/deathsquad/create_antagonist() - if(..() && !deployed) - deployed = 1 diff --git a/code/game/antagonist/outsider/ert.dm b/code/game/antagonist/outsider/ert.dm deleted file mode 100644 index 8436e28cad300..0000000000000 --- a/code/game/antagonist/outsider/ert.dm +++ /dev/null @@ -1,47 +0,0 @@ -GLOBAL_DATUM_INIT(ert, /datum/antagonist/ert, new) - -/datum/antagonist/ert - id = MODE_ERT - role_text = "Emergency Responder" - role_text_plural = "Emergency Responders" - antag_text = "You are an anti-antagonist! Within the rules, try to save the ship and its crew from the ongoing crisis. \ - Try to make sure the other players have fun, and if you are confused or at a loss, always adminhelp. \ - You should also contact the staff before taking any extreme actions. \ - Remember that all rules outside of those with explicit exceptions apply to the ERT!" - welcome_text = "You shouldn't see this" - leader_welcome_text = "You shouldn't see this" - landmark_id = "Response Team" - id_type = /obj/item/card/id/centcom/ERT - - flags = ANTAG_OVERRIDE_JOB | ANTAG_OVERRIDE_MOB | ANTAG_SET_APPEARANCE | ANTAG_HAS_LEADER | ANTAG_CHOOSE_NAME | ANTAG_RANDOM_EXCEPTED - antaghud_indicator = "hudloyalist" - - hard_cap = 5 - hard_cap_round = 7 - initial_spawn_req = 5 - initial_spawn_target = 7 - show_objectives_on_creation = 0 //we are not antagonists, we do not need the antagonist shpiel/objectives - - base_to_load = /datum/map_template/ruin/antag_spawn/ert - - var/reason = "" - -/datum/antagonist/ert/create_default(var/mob/source) - var/mob/living/carbon/human/M = ..() - if(istype(M)) M.age = rand(25,45) - -/datum/antagonist/ert/Initialize() - ..() - leader_welcome_text = SPAN_BOLD("You are the leader of the Emergency Response Team. ") + "As the leader, you answer only to [GLOB.using_map.company_name] officials. You have authorization to override the Commanding Officer where it is necessary to achieve your goals. However, it is recommended that you work with them to achieve your goals if possible." - welcome_text = SPAN_BOLD("You are a member of the Emergency Response Team.") + "As a member of the Emergency Response Team, you answer only to your leader and [GLOB.using_map.company_name] officials." - -/datum/antagonist/ert/greet(var/datum/mind/player) - if(!..()) - return - to_chat(player.current, "You are part of a Fifth Fleet Quick Reaction Force. There is a severe emergency on \the [GLOB.using_map.station_name] and you are tasked to fix the problem.") - to_chat(player.current, "You should first gear up and discuss a plan with your team. More members may be joining, so don't move out before you're all ready. You might receive further instruction from a superior in person or through holocomms soon.") - - if(reason) - to_chat(player.current, SPAN_BOLD(FONT_LARGE("You have been summoned to \the [GLOB.using_map.station_name] for the following reason: " + SPAN_NOTICE(reason)))) - -//Equip proc has been moved to the map specific folders. diff --git a/code/game/antagonist/outsider/foundation.dm b/code/game/antagonist/outsider/foundation.dm deleted file mode 100644 index 9c37773887c99..0000000000000 --- a/code/game/antagonist/outsider/foundation.dm +++ /dev/null @@ -1,44 +0,0 @@ -GLOBAL_DATUM_INIT(foundation_agents, /datum/antagonist/foundation, new) - -/datum/antagonist/foundation - id = MODE_FOUNDATION - role_text = "Foundation Agent" - antag_indicator = "hudfoundation" - role_text_plural = "Foundation Agents" - welcome_text = "You are a field agent of the Cuchulain Foundation, \ - a body that specializes in taking down psychic threats. You have a free pass to anywhere \ - you like, a pistol loaded with anti-psi nullglass rounds, and a clear duty. Naturally, \ - nobody takes your employers seriously - until a day like today." - antag_text = "You are an anti antagonist! Within the rules, \ - try to save the installation and its inhabitants from the ongoing crisis. \ - Try to make sure other players have fun! If you are confused or at a loss, always adminhelp, \ - and before taking extreme actions, please try to also contact the administration! \ - Think through your actions and make the roleplay immersive! Please remember all \ - rules aside from those without explicit exceptions apply to Foundation Agents." - - flags = ANTAG_OVERRIDE_JOB | ANTAG_OVERRIDE_MOB | ANTAG_CLEAR_EQUIPMENT | ANTAG_CHOOSE_NAME | ANTAG_SET_APPEARANCE - antaghud_indicator = "hudfoundation" - landmark_id = "Response Team" - hard_cap = 3 - hard_cap_round = 3 - initial_spawn_req = 1 - initial_spawn_target = 2 - min_player_age = 14 - faction = "foundation" - id_type = /obj/item/card/id/foundation - -/datum/antagonist/foundation/equip(var/mob/living/carbon/human/player) - - if(!..()) - return 0 - - player.set_psi_rank(PSI_REDACTION, 3, defer_update = TRUE) - player.set_psi_rank(PSI_COERCION, 3, defer_update = TRUE) - player.set_psi_rank(PSI_PSYCHOKINESIS, 3, defer_update = TRUE) - player.set_psi_rank(PSI_ENERGISTICS, 3, defer_update = TRUE) - player.psi.update(TRUE) - - var/decl/hierarchy/outfit/foundation = outfit_by_type(/decl/hierarchy/outfit/foundation) - foundation.equip(player) - - create_id("Foundation Agent", player) \ No newline at end of file diff --git a/code/game/antagonist/outsider/mercenary.dm b/code/game/antagonist/outsider/mercenary.dm deleted file mode 100644 index 909bd55a186d2..0000000000000 --- a/code/game/antagonist/outsider/mercenary.dm +++ /dev/null @@ -1,111 +0,0 @@ -GLOBAL_DATUM_INIT(mercs, /datum/antagonist/mercenary, new) - -/datum/antagonist/mercenary - id = MODE_MERCENARY - role_text = "Mercenary" - antag_indicator = "hudsyndicate" - role_text_plural = "Mercenaries" - landmark_id = "Syndicate-Spawn" - leader_welcome_text = "You are the leader of the mercenary strikeforce; hail to the chief. Use :t to speak to your underlings." -// welcome_text = "To speak on the strike team's private channel use :t." // ORIG - -// proxima code start - welcome_text = "
      Работа должна быть выполнена, а те, кто согласен идти с вами через ад должны остаться \ - в живых - это первое, о чём вам стоило бы задуматься, когда Вы согласились на эту роль. Ваша работа \ - состоит из выполнения специфичных заказов от очень серьезных людей - политические убийства, \ - терракты, уничтожение лабораторий корпораций, захват заложников, кража исследований и другие операции, \ - о которых корпорация или государство не стало бы афишировать. Вы должны уничтожить судно \ - с помощью ядерного заряда, предварительно выкачав оттуда всё ценное - исследования, учёных, глав и всех, \ - кому хватит мозгов сдаться вам. \ - Доставьте их в качестве заложников на свою базу за минуту до того, как залитый кровью невинных корабль \ - будет уничтожен ядерным огнём.
      Используйте префикс ':t' для общения со своими через рацию.\ -
      Определитесь с главным и постарайтесь не прикончить друг друга ещё до начала операции." -// proxima code end - - flags = ANTAG_VOTABLE | ANTAG_OVERRIDE_JOB | ANTAG_OVERRIDE_MOB | ANTAG_CLEAR_EQUIPMENT | ANTAG_CHOOSE_NAME | ANTAG_SET_APPEARANCE | ANTAG_HAS_LEADER - antaghud_indicator = "hudoperative" - - hard_cap = 4 - hard_cap_round = 8 - initial_spawn_req = 3 - initial_spawn_target = 5 - min_player_age = 14 - - faction = "mercenary" - - base_to_load = /datum/map_template/ruin/antag_spawn/mercenary - -// proxima code start -/datum/antagonist/mercenary/create_objectives(var/datum/mind/mercenary, override = 1) - if(!..()) - return -// proxima code end - -/datum/antagonist/mercenary/create_global_objectives(override = TRUE) - if(!..()) - return 0 - global_objectives = list() -// global_objectives |= new /datum/objective/nuclear -// proxima code start - var/datum/objective/nuclear/kidnap/K - K = new /datum/objective/nuclear/kidnap() - K.choose_target() - global_objectives |= K - global_objectives |= new /datum/objective/nuclear/steal //INF - global_objectives |= new /datum/objective/nuclear/steal_AI //INF - global_objectives |= new /datum/objective/nuclear/researches //INF - global_objectives |= new /datum/objective/nuclear //INF -// proxima code end - return 1 - -/datum/antagonist/mercenary/equip(var/mob/living/carbon/human/player) - if(!..()) - return 0 - - var/decl/hierarchy/outfit/mercenary = outfit_by_type(/decl/hierarchy/outfit/mercenary) - mercenary.equip(player) - -/* [ORIG] - var/obj/item/device/radio/uplink/U = new(get_turf(player), player.mind, DEFAULT_TELECRYSTAL_AMOUNT) - player.put_in_hands(U) -[/ORIG] */ - -// proxima code start - if(player.mind == leader) - var/obj/item/device/radio/uplink/U = new(get_turf(player), player.mind, TEAM_TELECRYSTAL_AMOUNT) - player.put_in_hands(U) - var/obj/item/clothing/head/beret/leader = new(get_turf(player)) - player.equip_to_slot_or_del(leader, slot_head) - var/obj/item/paper/roles_nuclear/paper = new(get_turf(player)) - player.put_in_hands(paper) - var/obj/machinery/nuclearbomb/nuke = locate(/obj/machinery/nuclearbomb/station) in SSmachines.machinery - player.StoreMemory("Код для активации устройства самоуничтожения [GLOB.using_map.full_name]: [nuke.r_code]", /decl/memory_options/system) - else - var/obj/item/device/radio/uplink/U = new(get_turf(player), player.mind, 0) - player.put_in_hands(U) - var/obj/item/paper/roles_nuclear/paper = new(get_turf(player)) - player.put_in_hands(paper) -// proxima code end - - return 1 - -/datum/antagonist/mercenary/equip_vox(mob/living/carbon/human/vox, mob/living/carbon/human/old) - vox.equip_to_slot_or_del(new /obj/item/clothing/under/vox/vox_casual(vox), slot_w_uniform) - vox.equip_to_slot_or_del(new /obj/item/clothing/shoes/magboots/vox(vox), slot_shoes) - vox.equip_to_slot_or_del(new /obj/item/clothing/gloves/vox(vox), slot_gloves) - vox.equip_to_slot_or_del(new /obj/item/clothing/mask/gas/swat/vox(vox), slot_wear_mask) - vox.equip_to_slot_or_del(new /obj/item/tank/nitrogen(vox), slot_back) - vox.equip_to_slot_or_del(new /obj/item/clothing/glasses/sunglasses(vox), slot_glasses) - vox.equip_to_slot_or_del(new /obj/item/card/id/syndicate(vox), slot_wear_id) - vox.put_in_hands(locate(/obj/item/device/radio/uplink) in old.contents) - vox.set_internals(locate(/obj/item/tank) in vox.contents) - - -/obj/item/vox_changer/merc - allowed_role = "Mercenary" - -/obj/item/vox_changer/merc/OnCreated(mob/living/carbon/human/vox, mob/living/carbon/human/old) - GLOB.mercs.equip_vox(vox, old) - -/obj/item/vox_changer/merc/OnReady(mob/living/carbon/human/vox, mob/living/carbon/human/old) - GLOB.mercs.update_access(vox) diff --git a/code/game/antagonist/outsider/ninja.dm b/code/game/antagonist/outsider/ninja.dm deleted file mode 100644 index e2f9f3a2b5c55..0000000000000 --- a/code/game/antagonist/outsider/ninja.dm +++ /dev/null @@ -1,148 +0,0 @@ -GLOBAL_DATUM_INIT(ninjas, /datum/antagonist/ninja, new) - -/datum/antagonist/ninja - id = MODE_NINJA - role_text = "Ninja" - role_text_plural = "Ninja" - landmark_id = "ninjastart" - welcome_text = "You are an elite mercenary assassin of the Spider Clan. You have a variety of abilities at your disposal, thanks to your nano-enhanced cyber armor." - flags = ANTAG_OVERRIDE_JOB | ANTAG_OVERRIDE_MOB | ANTAG_CLEAR_EQUIPMENT | ANTAG_CHOOSE_NAME | ANTAG_RANDSPAWN | ANTAG_VOTABLE | ANTAG_SET_APPEARANCE - antaghud_indicator = "hudninja" - - initial_spawn_req = 1 - initial_spawn_target = 1 - hard_cap = 1 - hard_cap_round = 3 - min_player_age = 18 - - id_type = /obj/item/card/id/syndicate - - faction = "ninja" - base_to_load = /datum/map_template/ruin/antag_spawn/ninja - -/datum/antagonist/ninja/create_objectives(var/datum/mind/ninja) - - if(!..()) - return - - var/objective_list = list(1,2,3,4,5) - for(var/i=rand(2,4),i>0,i--) - switch(pick(objective_list)) - if(1)//Kill - var/datum/objective/assassinate/ninja_objective = new - ninja_objective.owner = ninja - ninja_objective.target = ninja_objective.find_target() - if(ninja_objective.target != "Free Objective") - ninja.objectives += ninja_objective - else - i++ - objective_list -= 1 // No more than one kill objective - if(2)//Steal - var/datum/objective/steal/ninja_objective = new - ninja_objective.owner = ninja - ninja_objective.target = ninja_objective.find_target() - ninja.objectives += ninja_objective - if(3)//Protect - var/datum/objective/protect/ninja_objective = new - ninja_objective.owner = ninja - ninja_objective.target = ninja_objective.find_target() - if(ninja_objective.target != "Free Objective") - ninja.objectives += ninja_objective - else - i++ - objective_list -= 3 - if(4)//Download - var/datum/objective/download/ninja_objective = new - ninja_objective.owner = ninja - ninja_objective.gen_amount_goal() - ninja.objectives += ninja_objective - objective_list -= 4 - if(5)//Harm - var/datum/objective/harm/ninja_objective = new - ninja_objective.owner = ninja - ninja_objective.target = ninja_objective.find_target() - if(ninja_objective.target != "Free Objective") - ninja.objectives += ninja_objective - else - i++ - objective_list -= 5 - - var/datum/objective/survive/ninja_objective = new - ninja_objective.owner = ninja - ninja.objectives += ninja_objective - -/datum/antagonist/ninja/greet(var/datum/mind/player) - - if(!..()) - return 0 - var/directive = generate_ninja_directive("heel") - player.StoreMemory("Directive: [directive]
      ", /decl/memory_options/system) - to_chat(player, "Remember your directive: [directive].") - -/datum/antagonist/ninja/update_antag_mob(var/datum/mind/player) - ..() - var/ninja_title = pick(GLOB.ninja_titles) - var/ninja_name = pick(GLOB.ninja_names) - var/mob/living/carbon/human/H = player.current - if(istype(H)) - H.real_name = "[ninja_title] [ninja_name]" - H.SetName(H.real_name) - player.name = H.name - -/datum/antagonist/ninja/equip(var/mob/living/carbon/human/player) - . = ..() - if(.) - var/obj/item/device/radio/R = new /obj/item/device/radio/headset(player) - player.equip_to_slot_or_del(R, slot_l_ear) - player.equip_to_slot_or_del(new /obj/item/clothing/under/color/black(player), slot_w_uniform) - player.equip_to_slot_or_del(new /obj/item/device/flashlight(player), slot_belt) - create_id("Infiltrator", player) - equip_rig(/obj/item/rig/light/ninja, player) - var/obj/item/modular_computer/pda/syndicate/U = new - player.put_in_hands(U) - var/decl/uplink_source/pda/uplink_source = new - uplink_source.setup_uplink_source(player, 0) - -/datum/antagonist/ninja/proc/generate_ninja_directive(side) - var/directive = "[side=="face"?"[GLOB.using_map.company_name]":"A criminal syndicate"] is your employer. "//Let them know which side they're on. - switch(rand(1,19)) - if(1) - directive += "The Spider Clan must not be linked to this operation. Remain hidden and covert when possible." - if(2) - directive += "[GLOB.using_map.station_name] is financed by an enemy of the Spider Clan. Cause as much structural damage as desired." - if(3) - directive += "A wealthy animal rights activist has made a request we cannot refuse. Prioritize saving animal lives whenever possible." - if(4) - directive += "The Spider Clan absolutely cannot be linked to this operation. Eliminate witnesses at your discretion." - if(5) - directive += "We are currently negotiating with [GLOB.using_map.company_name] [GLOB.using_map.boss_name]. Prioritize saving human lives over ending them." - if(6) - directive += "We are engaged in a legal dispute over [GLOB.using_map.station_name]. If a laywer is present on board, force their cooperation in the matter." - if(7) - directive += "A financial backer has made an offer we cannot refuse. Implicate criminal involvement in the operation." - if(8) - directive += "Let no one question the mercy of the Spider Clan. Ensure the safety of all non-essential personnel you encounter." - if(9) - directive += "A free agent has proposed a lucrative business deal. Implicate [GLOB.using_map.company_name] involvement in the operation." - if(10) - directive += "Our reputation is on the line. Harm as few civilians and innocents as possible." - if(11) - directive += "Our honor is on the line. Utilize only honorable tactics when dealing with opponents." - if(12) - directive += "We are currently negotiating with a mercenary leader. Disguise assassinations as suicide or other natural causes." - if(13) - directive += "Some disgruntled [GLOB.using_map.company_name] employees have been supportive of our operations. Be wary of any mistreatment by command staff." - if(14) - var/xenorace = pick(SPECIES_UNATHI, SPECIES_SKRELL) - directive += "A group of [xenorace] radicals have been loyal supporters of the Spider Clan. Favor [xenorace] crew whenever possible." - if(15) - directive += "The Spider Clan has recently been accused of religious insensitivity. Attempt to speak with the Chaplain and prove these accusations false." - if(16) - directive += "The Spider Clan has been bargaining with a competing prosthetics manufacturer. Try to shine [GLOB.using_map.company_name] prosthetics in a bad light." - if(17) - directive += "The Spider Clan has recently begun recruiting outsiders. Consider suitable candidates and assess their behavior amongst the crew." - if(18) - directive += "A cyborg liberation group has expressed interest in our serves. Prove the Spider Clan merciful towards law-bound synthetics." - else - directive += "There are no special supplemental instructions at this time." - return directive diff --git a/code/game/antagonist/outsider/paramount.dm b/code/game/antagonist/outsider/paramount.dm deleted file mode 100644 index afe63be4e5f90..0000000000000 --- a/code/game/antagonist/outsider/paramount.dm +++ /dev/null @@ -1,79 +0,0 @@ -GLOBAL_DATUM_INIT(paramounts, /datum/antagonist/paramount, new) - -/datum/antagonist/paramount - id = MODE_PARAMOUNT - role_text = "Paramount" - role_text_plural = "Paramounts" - landmark_id = "ninjastart" - welcome_text = "You were once one of the finest minds of your culture, now driven to madness by the whispers of the howling dark and blessed with psychic faculties that defy understanding. Using your C-E rig and your twisted knowledge of psionics, advance your agenda in human space." - flags = ANTAG_OVERRIDE_JOB | ANTAG_OVERRIDE_MOB | ANTAG_CLEAR_EQUIPMENT | ANTAG_CHOOSE_NAME | ANTAG_RANDSPAWN | ANTAG_SET_APPEARANCE - antaghud_indicator = "hudwizard" - initial_spawn_req = 1 - initial_spawn_target = 1 - hard_cap = 1 - hard_cap_round = 3 - min_player_age = 18 - id_type = /obj/item/card/id/syndicate - faction = "paramount" - -/datum/antagonist/paramount/equip(var/mob/living/carbon/human/player) - - if(!..()) - return 0 - - player.equip_to_slot_or_del(new /obj/item/clothing/head/helmet/space/psi_amp(player), slot_head) - player.set_psi_rank(PSI_REDACTION, 3, defer_update = TRUE) - player.set_psi_rank(PSI_COERCION, 3, defer_update = TRUE) - player.set_psi_rank(PSI_PSYCHOKINESIS, 3, defer_update = TRUE) - player.set_psi_rank(PSI_ENERGISTICS, 3, defer_update = TRUE) - player.psi.update(TRUE) - - player.equip_to_slot_or_del(new /obj/item/clothing/under/psysuit(player), slot_w_uniform) - player.equip_to_slot_or_del(new /obj/item/clothing/suit/wizrobe/psypurple(player), slot_wear_suit) - player.equip_to_slot_or_del(new /obj/item/clothing/shoes/jackboots(player), slot_shoes) - player.equip_to_slot_or_del(new /obj/item/storage/backpack/satchel(player), slot_back) - var/obj/item/clothing/gloves/color/gloves = new() - gloves.color = COLOR_GRAY80 - player.equip_to_slot_or_del(gloves, slot_gloves) - //player.internal_organs_by_name["frontal lobe"] = new /obj/item/organ/internal/corona_pollentia(player) //TODO - return 1 - -/datum/antagonist/paramount/create_objectives(var/datum/mind/player) - - if(!..()) - return - // Copied from ninja for now. - var/objective_list = list(1,2,3) - for(var/i=rand(2,3),i>0,i--) - switch(pick(objective_list)) - if(1)//Kill - var/datum/objective/assassinate/objective = new - objective.owner = player - objective.target = objective.find_target() - if(objective.target != "Free Objective") - player.objectives += objective - else - i++ - objective_list -= 1 // No more than one kill objective - if(2)//Protect - var/datum/objective/protect/objective = new - objective.owner = player - objective.target = objective.find_target() - if(objective.target != "Free Objective") - player.objectives += objective - else - i++ - objective_list -= 3 - if(3)//Harm - var/datum/objective/harm/objective = new - objective.owner = player - objective.target = objective.find_target() - if(objective.target != "Free Objective") - player.objectives += objective - else - i++ - objective_list -= 4 - - var/datum/objective/survive/objective = new - objective.owner = player - player.objectives += objective diff --git a/code/game/antagonist/outsider/raider.dm b/code/game/antagonist/outsider/raider.dm deleted file mode 100644 index 19f000b782bd9..0000000000000 --- a/code/game/antagonist/outsider/raider.dm +++ /dev/null @@ -1,276 +0,0 @@ -GLOBAL_DATUM_INIT(raiders, /datum/antagonist/raider, new) - -/datum/antagonist/raider - id = MODE_RAIDER - role_text = "Raider" - role_text_plural = "Raiders" - antag_indicator = "hudraider" - landmark_id = "voxstart" - welcome_text = "Use :H to talk on your encrypted channel." - flags = ANTAG_OVERRIDE_JOB | ANTAG_OVERRIDE_MOB | ANTAG_CLEAR_EQUIPMENT | ANTAG_CHOOSE_NAME | ANTAG_VOTABLE | ANTAG_SET_APPEARANCE | ANTAG_HAS_LEADER - antaghud_indicator = "hudraider" - - hard_cap = 6 - hard_cap_round = 10 - initial_spawn_req = 3 - initial_spawn_target = 4 - min_player_age = 14 - - id_type = /obj/item/card/id/syndicate - - faction = "pirate" - base_to_load = /datum/map_template/ruin/antag_spawn/heist - - var/list/raider_uniforms = list( - /obj/item/clothing/under/soviet, - /obj/item/clothing/under/pirate, - /obj/item/clothing/under/redcoat, - /obj/item/clothing/under/serviceoveralls, - /obj/item/clothing/under/captain_fly, - /obj/item/clothing/under/det, - /obj/item/clothing/under/color/brown, - ) - - var/list/raider_shoes = list( - /obj/item/clothing/shoes/jackboots, - /obj/item/clothing/shoes/workboots, - /obj/item/clothing/shoes/brown, - /obj/item/clothing/shoes/laceup - ) - - var/list/raider_helmets = list( - /obj/item/clothing/head/bearpelt, - /obj/item/clothing/head/ushanka, - /obj/item/clothing/head/pirate, - /obj/item/clothing/mask/bandana/red, - /obj/item/clothing/head/hgpiratecap, - ) - - var/list/raider_suits = list( - /obj/item/clothing/suit/pirate, - /obj/item/clothing/suit/hgpirate, - /obj/item/clothing/suit/storage/toggle/bomber, - /obj/item/clothing/suit/storage/leather_jacket, - /obj/item/clothing/suit/storage/toggle/brown_jacket, - /obj/item/clothing/suit/storage/toggle/hoodie, - /obj/item/clothing/suit/storage/toggle/hoodie/black, - /obj/item/clothing/suit/unathi/mantle, - /obj/item/clothing/suit/poncho/colored, - ) - - var/list/raider_guns = list( - /obj/item/gun/energy/laser, - /obj/item/gun/energy/retro, - /obj/item/gun/energy/xray, - /obj/item/gun/energy/xray/pistol, - /obj/item/gun/energy/mindflayer, - /obj/item/gun/energy/toxgun, - /obj/item/gun/energy/stunrevolver, - /obj/item/gun/energy/ionrifle, - /obj/item/gun/energy/taser, - /obj/item/gun/energy/crossbow/largecrossbow, - /obj/item/gun/launcher/crossbow, - /obj/item/gun/launcher/grenade/loaded, - /obj/item/gun/launcher/pneumatic, - /obj/item/gun/projectile/automatic/machine_pistol, - /obj/item/gun/projectile/automatic/merc_smg, - /obj/item/gun/projectile/automatic/sec_smg, - /obj/item/gun/projectile/automatic/assault_rifle, - /obj/item/gun/projectile/shotgun/pump, - /obj/item/gun/projectile/shotgun/pump/combat, - /obj/item/gun/projectile/shotgun/doublebarrel, - /obj/item/gun/projectile/shotgun/doublebarrel/pellet, - /obj/item/gun/projectile/shotgun/doublebarrel/sawn, - /obj/item/gun/projectile/pistol/sec, - /obj/item/gun/projectile/pistol/holdout, - /obj/item/gun/projectile/revolver, - /obj/item/gun/projectile/pirate, - /obj/item/gun/projectile/revolver/medium, - /obj/item/gun/projectile/pistol/broomstick - ) - - var/list/raider_holster = list( - /obj/item/clothing/accessory/storage/holster/armpit, - /obj/item/clothing/accessory/storage/holster/waist, - /obj/item/clothing/accessory/storage/holster/hip - ) - -/datum/antagonist/raider/update_access(var/mob/living/player) - for(var/obj/item/storage/wallet/W in player.contents) - for(var/obj/item/card/id/id in W.contents) - id.SetName("[player.real_name]'s Passport") - id.registered_name = player.real_name - W.SetName("[initial(W.name)] ([id.name])") - -/datum/antagonist/raider/create_global_objectives() - - if(!..()) - return 0 - - var/i = 1 - var/max_objectives = pick(2,2,2,2,3,3,3,4) - global_objectives = list() - while(i<= max_objectives) - var/list/goals = list("kidnap","loot","salvage") - var/goal = pick(goals) - var/datum/objective/heist/O - - if(goal == "kidnap") - goals -= "kidnap" - O = new /datum/objective/heist/kidnap() - else if(goal == "loot") - O = new /datum/objective/heist/loot() - else - O = new /datum/objective/heist/salvage() - O.choose_target() - global_objectives |= O - - i++ - - global_objectives |= new /datum/objective/heist/preserve_crew - return 1 - -/datum/antagonist/raider/proc/is_raider_crew_safe() - - if(!current_antagonists || current_antagonists.len == 0) - return 0 - - for(var/datum/mind/player in current_antagonists) - if(!player.current || get_area(player.current) != locate(/area/map_template/skipjack_station/start)) - return 0 - return 1 - -/datum/antagonist/raider/equip(var/mob/living/carbon/human/player) - - if(!..()) - return 0 - - if(player.species && player.species.get_bodytype(player) == SPECIES_VOX) - equip_vox(player) - else - var/new_shoes = pick(raider_shoes) - var/new_uniform = pick(raider_uniforms) - var/new_helmet = pick(raider_helmets) - var/new_suit = pick(raider_suits) - - player.equip_to_slot_or_del(new new_shoes(player),slot_shoes) - if(!player.shoes) - //If equipping shoes failed, fall back to equipping sandals - var/fallback_type = pick(/obj/item/clothing/shoes/sandal, /obj/item/clothing/shoes/jackboots/unathi) - player.equip_to_slot_or_del(new fallback_type(player), slot_shoes) - - player.equip_to_slot_or_del(new new_uniform(player),slot_w_uniform) - player.equip_to_slot_or_del(new new_helmet(player),slot_head) - player.equip_to_slot_or_del(new new_suit(player),slot_wear_suit) - equip_weapons(player) - - var/obj/item/card/id/id = create_id("Visitor", player, equip = 0) - id.SetName("[player.real_name]'s Passport") - id.assignment = "Visitor" - var/obj/item/storage/wallet/W = new(player) - W.handle_item_insertion(id) - if(player.equip_to_slot_or_del(W, slot_wear_id)) - spawn_money(rand(50,150)*10,W) - create_radio(RAID_FREQ, player) - - return 1 - -/datum/antagonist/raider/proc/equip_weapons(var/mob/living/carbon/human/player) - var/new_gun = pick(raider_guns) - var/new_holster = pick(raider_holster) //raiders don't start with any backpacks, so let's be nice and give them a holster if they can use it. - var/turf/T = get_turf(player) - - var/obj/item/primary = new new_gun(T) - var/obj/item/clothing/accessory/storage/holster/holster = null - - //Give some of the raiders a pirate gun as a secondary - if(prob(60)) - var/obj/item/secondary = new /obj/item/gun/projectile/pirate(T) - if(!(primary.slot_flags & SLOT_HOLSTER)) - holster = new new_holster(T) - var/datum/extension/holster/H = get_extension(holster, /datum/extension/holster) - H.holster(secondary, player) - else - player.equip_to_slot_or_del(secondary, slot_belt) - - if(primary.slot_flags & SLOT_HOLSTER) - holster = new new_holster(T) - var/datum/extension/holster/H = get_extension(holster, /datum/extension/holster) - H.holster(primary, player) - else if(!player.belt && (primary.slot_flags & SLOT_BELT)) - player.equip_to_slot_or_del(primary, slot_belt) - else if(!player.back && (primary.slot_flags & SLOT_BACK)) - player.equip_to_slot_or_del(primary, slot_back) - else - player.put_in_any_hand_if_possible(primary) - - //If they got a projectile gun, give them a little bit of spare ammo - equip_ammo(player, primary) - - if(holster) - var/obj/item/clothing/under/uniform = player.w_uniform - if(istype(uniform) && uniform.can_attach_accessory(holster)) - uniform.attackby(holster, player) - else - player.put_in_any_hand_if_possible(holster) - -/datum/antagonist/raider/proc/equip_ammo(var/mob/living/carbon/human/player, var/obj/item/gun/gun) - if(istype(gun, /obj/item/gun/projectile)) - var/obj/item/gun/projectile/bullet_thrower = gun - if(bullet_thrower.magazine_type) - player.equip_to_slot_or_del(new bullet_thrower.magazine_type(player), slot_l_store) - if(prob(20)) //don't want to give them too much - player.equip_to_slot_or_del(new bullet_thrower.magazine_type(player), slot_r_store) - else if(bullet_thrower.ammo_type) - var/obj/item/storage/box/ammobox = new(get_turf(player.loc)) - for(var/i in 1 to rand(3,5) + rand(0,2)) - new bullet_thrower.ammo_type(ammobox) - player.put_in_any_hand_if_possible(ammobox) - return - -/datum/antagonist/raider/equip_vox(mob/living/carbon/human/vox, mob/living/carbon/human/old) - - var/uniform_type = pick(list(/obj/item/clothing/under/vox/vox_robes,/obj/item/clothing/under/vox/vox_casual)) - var/new_holster = pick(raider_holster) - - vox.equip_to_slot_or_del(new uniform_type(vox), slot_w_uniform) - vox.equip_to_slot_or_del(new /obj/item/clothing/shoes/magboots/vox(vox), slot_shoes) // REPLACE THESE WITH CODED VOX ALTERNATIVES. - vox.equip_to_slot_or_del(new /obj/item/clothing/gloves/vox(vox), slot_gloves) // AS ABOVE. - vox.equip_to_slot_or_del(new /obj/item/clothing/mask/gas/swat/vox(vox), slot_wear_mask) - vox.equip_to_slot_or_del(new /obj/item/tank/nitrogen(vox), slot_back) - vox.equip_to_slot_or_del(new /obj/item/device/flashlight(vox), slot_r_store) - - var/obj/item/clothing/accessory/storage/holster/holster = new new_holster - if(holster) - var/obj/item/clothing/under/uniform = vox.w_uniform - if(istype(uniform) && uniform.can_attach_accessory(holster)) - uniform.attackby(holster, vox) - else - vox.put_in_any_hand_if_possible(holster) - - vox.set_internals(locate(/obj/item/tank) in vox.contents) - -/obj/random/raider/hardsuit - name = "Random Raider Hardsuit" - desc = "This is a random hardsuit control module." - icon = 'icons/obj/rig_modules.dmi' - icon_state = "generic" - -/obj/random/raider/hardsuit/spawn_choices() - return list(/obj/item/rig/industrial, - /obj/item/rig/eva, - /obj/item/rig/light/hacker, - /obj/item/rig/light, - /obj/item/rig/unathi - ) - - - -/obj/item/vox_changer/raider - allowed_role = "Raider" - -/obj/item/vox_changer/raider/OnCreated(mob/living/carbon/human/vox, mob/living/carbon/human/old) - GLOB.raiders.equip_vox(vox, old) - -/obj/item/vox_changer/raider/OnReady(mob/living/carbon/human/vox, mob/living/carbon/human/old) - GLOB.raiders.update_access(vox) diff --git a/code/game/antagonist/outsider/vox.dm b/code/game/antagonist/outsider/vox.dm deleted file mode 100644 index eb0a289084286..0000000000000 --- a/code/game/antagonist/outsider/vox.dm +++ /dev/null @@ -1,81 +0,0 @@ -GLOBAL_DATUM_INIT(vox_raiders, /datum/antagonist/vox, new) - -/datum/antagonist/vox - id = MODE_VOXRAIDER - role_text = "Vox Raider" - role_text_plural = "Vox Raiders" - landmark_id = "Vox-Spawn" - welcome_text = "Scrap has been hard to find lately, and the Shroud requires replacement parts. Do not disappoint your kin." - flags = ANTAG_VOTABLE | ANTAG_OVERRIDE_JOB | ANTAG_OVERRIDE_MOB | ANTAG_CLEAR_EQUIPMENT | ANTAG_CHOOSE_NAME | ANTAG_SET_APPEARANCE - antaghud_indicator = "hudraider" - - hard_cap = 5 - hard_cap_round = 10 - initial_spawn_req = 3 - initial_spawn_target = 4 - - id_type = /obj/item/card/id/syndicate - - base_to_load = /datum/map_template/ruin/antag_spawn/vox_raider - - -/datum/antagonist/vox/build_candidate_list(datum/game_mode/mode, ghosts_only) - candidates = list() - for(var/datum/mind/player in mode.get_players_for_role(id)) - if (ghosts_only && !(isghostmind(player) || isnewplayer(player.current))) - log_debug("[key_name(player)] is not eligible to become a [role_text]: Only ghosts may join as this role!") - continue - if (player.special_role) - log_debug("[key_name(player)] is not eligible to become a [role_text]: They already have a special role ([player.special_role])!") - continue - if (player in pending_antagonists) - log_debug("[key_name(player)] is not eligible to become a [role_text]: They have already been selected for this role!") - continue - if (player_is_antag(player)) - log_debug("[key_name(player)] is not eligible to become a [role_text]: They are already an antagonist!") - continue - if(!is_alien_whitelisted(player.current, all_species[SPECIES_VOX])) - log_debug("[player.current.ckey] is not whitelisted") - continue - var/result = can_become_antag_detailed(player) - if (result) - log_debug("[key_name(player)] is not eligible to become a [role_text]: [result]") - continue - candidates |= player - - return candidates - -/datum/antagonist/vox/get_potential_candidates(datum/game_mode/mode, ghosts_only) - var/candidates = list() - - for(var/datum/mind/player in mode.get_players_for_role(id)) - if(ghosts_only && !(isghostmind(player) || isnewplayer(player.current))) - else if(config.use_age_restriction_for_antags && player.current.client.player_age < minimum_player_age) - else if(player.special_role) - else if (player in pending_antagonists) - else if(!can_become_antag(player)) - else if(player_is_antag(player)) - else if(!is_alien_whitelisted(player.current, all_species[SPECIES_VOX])) - else - candidates |= player - - return candidates - -/datum/antagonist/vox/can_become_antag_detailed(datum/mind/player, ignore_role) - if(!is_alien_whitelisted(player.current, all_species[SPECIES_VOX])) - return "Player doesn't have vox whitelist" - ..() - - - - -/datum/antagonist/vox/equip(mob/living/carbon/human/vox/player) - if(!..()) - return FALSE - - player.set_species(SPECIES_VOX) - var/decl/hierarchy/outfit/vox_raider = outfit_by_type(/decl/hierarchy/outfit/vox_raider) - vox_raider.equip(player) - - - return TRUE \ No newline at end of file diff --git a/code/game/antagonist/outsider/wizard.dm b/code/game/antagonist/outsider/wizard.dm deleted file mode 100644 index 433f172f004c2..0000000000000 --- a/code/game/antagonist/outsider/wizard.dm +++ /dev/null @@ -1,127 +0,0 @@ -GLOBAL_DATUM_INIT(wizards, /datum/antagonist/wizard, new) - -/datum/antagonist/wizard - id = MODE_WIZARD - role_text = ANTAG_WIZARD - role_text_plural = ANTAG_WIZARD + "s" - landmark_id = "wizard" - welcome_text = "You will find a list of available spells in your spell book. Choose your magic arsenal carefully.
      In your pockets you will find a teleport scroll. Use it as needed." - flags = ANTAG_OVERRIDE_JOB | ANTAG_OVERRIDE_MOB | ANTAG_CLEAR_EQUIPMENT | ANTAG_CHOOSE_NAME | ANTAG_VOTABLE | ANTAG_SET_APPEARANCE - antaghud_indicator = "hudwizard" - - hard_cap = 1 - hard_cap_round = 3 - initial_spawn_req = 1 - initial_spawn_target = 1 - min_player_age = 18 - - faction = "wizard" - base_to_load = /datum/map_template/ruin/antag_spawn/wizard - -/datum/antagonist/wizard/create_objectives(var/datum/mind/wizard) - - if(!..()) - return - - var/kill - var/escape - var/steal - var/hijack - - switch(rand(1,100)) - if(1 to 30) - escape = 1 - kill = 1 - if(31 to 60) - escape = 1 - steal = 1 - if(61 to 99) - kill = 1 - steal = 1 - else - hijack = 1 - - if(kill) - var/datum/objective/assassinate/kill_objective = new - kill_objective.owner = wizard - kill_objective.find_target() - wizard.objectives |= kill_objective - if(steal) - var/datum/objective/steal/steal_objective = new - steal_objective.owner = wizard - steal_objective.find_target() - wizard.objectives |= steal_objective - if(escape) - var/datum/objective/survive/survive_objective = new - survive_objective.owner = wizard - wizard.objectives |= survive_objective - if(hijack) - var/datum/objective/hijack/hijack_objective = new - hijack_objective.owner = wizard - wizard.objectives |= hijack_objective - return - -/datum/antagonist/wizard/update_antag_mob(var/datum/mind/wizard) - ..() - wizard.StoreMemory("Remember: do not forget to prepare your spells.", /decl/memory_options/system) - wizard.current.real_name = "[pick(GLOB.wizard_first)] [pick(GLOB.wizard_second)]" - wizard.current.SetName(wizard.current.real_name) - -/datum/antagonist/wizard/equip(var/mob/living/carbon/human/wizard_mob) - - if(!..()) - return 0 - - var/outfit_type = pick(subtypesof(/decl/hierarchy/outfit/wizard)) - var/decl/hierarchy/outfit/wizard_outfit = outfit_by_type(outfit_type) - wizard_outfit.equip(wizard_mob) - - return 1 - -/datum/antagonist/wizard/print_player_summary() - ..() - for(var/p in current_antagonists) - var/datum/mind/player = p - var/text = "[player.name]'s spells were:" - if(!player.learned_spells || !player.learned_spells.len) - text += "
      None!" - else - for(var/s in player.learned_spells) - var/spell/spell = s - text += "
      [spell.name] - " - text += "Speed: [spell.spell_levels["speed"]] Power: [spell.spell_levels["power"]]" - text += "
      " - to_world(text) - - -//To batch-remove wizard spells. Linked to mind.dm. -/mob/proc/spellremove() - if(!mind || !mind.learned_spells) - return - for(var/spell/spell_to_remove in mind.learned_spells) - remove_spell(spell_to_remove) - -/obj/item/clothing/var/wizard_garb = FALSE - -// Does this clothing slot count as wizard garb? (Combines a few checks) -/proc/is_wiz_garb(var/obj/item/clothing/C) - return istype(C) && C.wizard_garb - -/*Checks if the wizard is wearing the proper attire. -Made a proc so this is not repeated 14 (or more) times.*/ -/mob/proc/wearing_wiz_garb() - to_chat(src, "Silly creature, you're not a human. Only humans can cast this spell.") - return 0 - -// Humans can wear clothes. -/mob/living/carbon/human/wearing_wiz_garb() - if(!is_wiz_garb(src.wear_suit) && (!src.species.hud || (slot_wear_suit in src.species.hud.equip_slots))) - to_chat(src, "I don't feel strong enough without my robe.") - return 0 - if(!is_wiz_garb(src.shoes) && (!species.hud || (slot_shoes in src.species.hud.equip_slots))) - to_chat(src, "I don't feel strong enough without my sandals.") - return 0 - if(!is_wiz_garb(src.head) && (!species.hud || (slot_head in src.species.hud.equip_slots))) - to_chat(src, "I don't feel strong enough without my hat.") - return 0 - return 1 \ No newline at end of file diff --git a/code/game/antagonist/station/changeling.dm b/code/game/antagonist/station/changeling.dm deleted file mode 100644 index b66e2bc6d945d..0000000000000 --- a/code/game/antagonist/station/changeling.dm +++ /dev/null @@ -1,88 +0,0 @@ -GLOBAL_DATUM_INIT(changelings, /datum/antagonist/changeling, new) - -/datum/antagonist/changeling - id = MODE_CHANGELING - role_text = "Changeling" - role_text_plural = "Changelings" - feedback_tag = "changeling_objective" - blacklisted_jobs = list(/datum/job/ai, /datum/job/cyborg, /datum/job/submap) - protected_jobs = list(/datum/job/officer, /datum/job/warden, /datum/job/detective, /datum/job/captain, /datum/job/hos) - welcome_text = "Use say \"%LANGUAGE_PREFIX%g message\" to communicate with your fellow changelings. Remember: you get all of their absorbed DNA if you absorb them." - flags = ANTAG_SUSPICIOUS | ANTAG_RANDSPAWN | ANTAG_VOTABLE - antaghud_indicator = "hudchangeling" - - faction = "changeling" - -/datum/antagonist/changeling/get_welcome_text(mob/recipient) - return replacetext_char(welcome_text, "%LANGUAGE_PREFIX%", recipient?.get_prefix_key(/decl/prefix/language) || ",") - -/datum/antagonist/changeling/get_special_objective_text(var/datum/mind/player) - return "
      Changeling ID: [player.changeling.changelingID].
      Genomes Absorbed: [player.changeling.absorbedcount]" - -/datum/antagonist/changeling/update_antag_mob(var/datum/mind/player) - ..() - player.current.make_changeling() - -/datum/antagonist/changeling/remove_antagonist(var/datum/mind/player, var/show_message, var/implanted) - . = ..() - if(. && player && player.current) - player.current.remove_changeling_powers() - player.current.verbs -= /datum/changeling/proc/EvolutionMenu - QDEL_NULL(player.changeling) - -/datum/antagonist/changeling/create_objectives(var/datum/mind/changeling) - if(!..()) - return - - //OBJECTIVES - Always absorb 5 genomes, plus random traitor objectives. - //If they have two objectives as well as absorb, they must survive rather than escape - //No escape alone because changelings aren't suited for it and it'd probably just lead to rampant robusting - //If it seems like they'd be able to do it in play, add a 10% chance to have to escape alone - - var/datum/objective/absorb/absorb_objective = new - absorb_objective.owner = changeling - absorb_objective.gen_amount_goal(2, 3) - changeling.objectives += absorb_objective - - var/datum/objective/assassinate/kill_objective = new - kill_objective.owner = changeling - kill_objective.find_target() - changeling.objectives += kill_objective - - var/datum/objective/steal/steal_objective = new - steal_objective.owner = changeling - steal_objective.find_target() - changeling.objectives += steal_objective - - switch(rand(1,100)) - if(1 to 80) - if (!(locate(/datum/objective/escape) in changeling.objectives)) - var/datum/objective/escape/escape_objective = new - escape_objective.owner = changeling - changeling.objectives += escape_objective - else - if (!(locate(/datum/objective/survive) in changeling.objectives)) - var/datum/objective/survive/survive_objective = new - survive_objective.owner = changeling - changeling.objectives += survive_objective - return - -/datum/antagonist/changeling/can_become_antag(var/datum/mind/player, var/ignore_role) - if(..()) - if(player.current) - if(ishuman(player.current)) - var/mob/living/carbon/human/H = player.current - if(H.isSynthetic()) - return 0 - if(H.species.species_flags & SPECIES_FLAG_NO_SCAN) - return 0 - return 1 - else if(isnewplayer(player.current)) - if(player.current.client && player.current.client.prefs) - var/datum/species/S = all_species[player.current.client.prefs.species] - if(S && (S.species_flags & SPECIES_FLAG_NO_SCAN)) - return 0 - if(player.current.client.prefs.organ_data[BP_CHEST] == "cyborg") // Full synthetic. - return 0 - return 1 - return 0 diff --git a/code/game/antagonist/station/cultist.dm b/code/game/antagonist/station/cultist.dm deleted file mode 100644 index b75840210119f..0000000000000 --- a/code/game/antagonist/station/cultist.dm +++ /dev/null @@ -1,186 +0,0 @@ -#define CULTINESS_PER_CULTIST 40 -#define CULTINESS_PER_SACRIFICE 40 -#define CULTINESS_PER_TURF 1 - -#define CULT_RUNES_1 200 -#define CULT_RUNES_2 400 -#define CULT_RUNES_3 1000 - -#define CULT_GHOSTS_1 400 -#define CULT_GHOSTS_2 800 -#define CULT_GHOSTS_3 1200 - -#define CULT_MAX_CULTINESS 1200 // When this value is reached, the game stops checking for updates so we don't recheck every time a tile is converted in endgame - -GLOBAL_DATUM_INIT(cult, /datum/antagonist/cultist, new) - -/proc/iscultist(var/mob/player) - if(!GLOB.cult || !player.mind) - return 0 - if(player.mind in GLOB.cult.current_antagonists) - return 1 - -/datum/antagonist/cultist - id = MODE_CULTIST - role_text = "Cultist" - role_text_plural = "Cultists" - restricted_jobs = list(/datum/job/lawyer, /datum/job/captain, /datum/job/hos) - protected_jobs = list(/datum/job/officer, /datum/job/warden, /datum/job/detective) - blacklisted_jobs = list(/datum/job/ai, /datum/job/cyborg, /datum/job/chaplain, /datum/job/psychiatrist, /datum/job/submap) - feedback_tag = "cult_objective" - antag_indicator = "hudcultist" - welcome_text = "You have a tome in your possession; one that will help you start the cult. Use it well and remember - there are others." - victory_text = "The cult wins! It has succeeded in serving its dark masters!" - loss_text = "The staff managed to stop the cult!" - victory_feedback_tag = "win - cult win" - loss_feedback_tag = "loss - staff stopped the cult" - flags = ANTAG_SUSPICIOUS | ANTAG_RANDSPAWN | ANTAG_VOTABLE - hard_cap = 5 - hard_cap_round = 6 - initial_spawn_req = 4 - initial_spawn_target = 6 - antaghud_indicator = "hudcultist" - skill_setter = /datum/antag_skill_setter/station - - var/allow_narsie = 1 - var/powerless = 0 - var/datum/mind/sacrifice_target - var/list/obj/effect/rune/teleport/teleport_runes = list() - var/list/rune_strokes = list() - var/list/sacrificed = list() - var/cult_rating = 0 - var/list/cult_rating_bounds = list(CULT_RUNES_1, CULT_RUNES_2, CULT_RUNES_3, CULT_GHOSTS_1, CULT_GHOSTS_2, CULT_GHOSTS_3) - var/max_cult_rating = 0 - var/conversion_blurb = "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 That Which Waits. Assist your new compatriots in their dark dealings. Their goals are yours, and yours are theirs. You serve the Dark One above all else. Bring It back." - - faction = "cult" - -/datum/antagonist/cultist/create_global_objectives() - - if(!..()) - return - - global_objectives = list() - if(prob(50)) - global_objectives |= new /datum/objective/cult/survive - else - global_objectives |= new /datum/objective/cult/eldergod - - var/datum/objective/cult/sacrifice/sacrifice = new() - sacrifice.find_target() - sacrifice_target = sacrifice.target - global_objectives |= sacrifice - -/datum/antagonist/cultist/equip(var/mob/living/carbon/human/player) - - if(!..()) - return 0 - - var/obj/item/book/tome/T = new(get_turf(player)) - var/list/slots = list ( - "backpack" = slot_in_backpack, - "left pocket" = slot_l_store, - "right pocket" = slot_r_store, - "left hand" = slot_l_hand, - "right hand" = slot_r_hand, - ) - for(var/slot in slots) - player.equip_to_slot(T, slot) - if(T.loc == player) - break - var/obj/item/storage/S = locate() in player.contents - if(istype(S)) - T.forceMove(S) - -/datum/antagonist/cultist/remove_antagonist(var/datum/mind/player, var/show_message, var/implanted) - if(!..()) - return 0 - to_chat(player.current, "An unfamiliar white light flashes through your mind, cleansing the taint of the dark-one and the memories of your time as his servant with it.") - player.ClearMemories(type) - if(show_message) - player.current.visible_message("[player.current] looks like they just reverted to their old faith!") - remove_cult_magic(player.current) - remove_cultiness(CULTINESS_PER_CULTIST) - -/datum/antagonist/cultist/add_antagonist(var/datum/mind/player, var/ignore_role, var/do_not_equip, var/move_to_spawn, var/do_not_announce, var/preserve_appearance) - . = ..() - if(.) - to_chat(player, "[conversion_blurb]") - if(player.current && !istype(player.current, /mob/living/simple_animal/construct)) - player.current.add_language(LANGUAGE_CULT) - -/datum/antagonist/cultist/remove_antagonist(var/datum/mind/player, var/show_message, var/implanted) - . = ..() - if(. && player.current && !istype(player.current, /mob/living/simple_animal/construct)) - player.current.remove_language(LANGUAGE_CULT) - -/datum/antagonist/cultist/update_antag_mob(var/datum/mind/player) - . = ..() - add_cultiness(CULTINESS_PER_CULTIST) - add_cult_magic(player.current) - -/datum/antagonist/cultist/proc/add_cultiness(var/amount) - cult_rating += amount - var/old_rating = max_cult_rating - max_cult_rating = max(max_cult_rating, cult_rating) - if(old_rating >= CULT_MAX_CULTINESS) - return - var/list/to_update = list() - for(var/i in cult_rating_bounds) - if((old_rating < i) && (max_cult_rating >= i)) - to_update += i - - if(to_update.len) - update_cult_magic(to_update) - -/datum/antagonist/cultist/proc/update_cult_magic(var/list/to_update) - if(CULT_RUNES_1 in to_update) - for(var/datum/mind/H in GLOB.cult.current_antagonists) - if(H.current) - to_chat(H.current, "The veil between this world and beyond grows thin, and your power grows.") - add_cult_magic(H.current) - if(CULT_RUNES_2 in to_update) - for(var/datum/mind/H in GLOB.cult.current_antagonists) - if(H.current) - to_chat(H.current, "You feel that the fabric of reality is tearing.") - add_cult_magic(H.current) - if(CULT_RUNES_3 in to_update) - for(var/datum/mind/H in GLOB.cult.current_antagonists) - if(H.current) - to_chat(H.current, "The world is at end. The veil is as thin as ever.") - add_cult_magic(H.current) - - if((CULT_GHOSTS_1 in to_update) || (CULT_GHOSTS_2 in to_update) || (CULT_GHOSTS_3 in to_update)) - for(var/mob/observer/ghost/D in SSmobs.mob_list) - add_ghost_magic(D) - -/datum/antagonist/cultist/proc/offer_uncult(var/mob/M) - if(!iscultist(M) || !M.mind) - return - - to_chat(M, "Do you want to abandon the cult of Nar'Sie? ACCEPT") - -/datum/antagonist/cultist/Topic(href, href_list) - if(href_list["confirmleave"]) - GLOB.cult.remove_antagonist(usr.mind, 1) - -/datum/antagonist/cultist/proc/remove_cultiness(var/amount) - cult_rating = max(0, cult_rating - amount) - -/datum/antagonist/cultist/proc/add_cult_magic(var/mob/M) - M.verbs += Tier1Runes - - if(max_cult_rating >= CULT_RUNES_1) - M.verbs += Tier2Runes - - if(max_cult_rating >= CULT_RUNES_2) - M.verbs += Tier3Runes - - if(max_cult_rating >= CULT_RUNES_3) - M.verbs += Tier4Runes - -/datum/antagonist/cultist/proc/remove_cult_magic(var/mob/M) - M.verbs -= Tier1Runes - M.verbs -= Tier2Runes - M.verbs -= Tier3Runes - M.verbs -= Tier4Runes diff --git a/code/game/antagonist/station/loyalist.dm b/code/game/antagonist/station/loyalist.dm deleted file mode 100644 index f3a0e5aa5ea17..0000000000000 --- a/code/game/antagonist/station/loyalist.dm +++ /dev/null @@ -1,48 +0,0 @@ -GLOBAL_DATUM_INIT(loyalists, /datum/antagonist/loyalists, new) - -/datum/antagonist/loyalists - id = MODE_LOYALIST - role_text = "Head Loyalist" - role_text_plural = "Loyalists" - feedback_tag = "loyalist_objective" - antag_indicator = "hud_loyal_head" - victory_text = "The heads of staff remained at their posts! The loyalists win!" - loss_text = "The heads of staff did not stop the revolution!" - victory_feedback_tag = "win - rev heads killed" - loss_feedback_tag = "loss - heads killed" - antaghud_indicator = "hud_loyal" - flags = 0 - - hard_cap = 2 - hard_cap_round = 4 - initial_spawn_req = 2 - initial_spawn_target = 4 - - // Inround loyalists. - faction_role_text = "Loyalist" - faction_descriptor = "COMPANY" - faction_verb = /mob/living/proc/convert_to_loyalist - faction_indicator = "hud_loyal" - faction_invisible = 1 - blacklisted_jobs = list(/datum/job/ai, /datum/job/cyborg, /datum/job/submap) - skill_setter = /datum/antag_skill_setter/station - - faction = "loyalist" - -/datum/antagonist/loyalists/Initialize() - ..() - welcome_text = "You belong to the [GLOB.using_map.company_name], body and soul. Preserve its interests against the conspirators amongst the crew." - faction_welcome = "Preserve [GLOB.using_map.company_short]'s interests against the traitorous recidivists amongst the crew. Protect the heads of staff with your life." - faction_descriptor = "[GLOB.using_map.company_name]" - -/datum/antagonist/loyalists/create_global_objectives() - if(!..()) - return - global_objectives = list() - for(var/mob/living/carbon/human/player in SSmobs.mob_list) - if(!player.mind || player.stat==2 || !(player.mind.assigned_role in SSjobs.titles_by_department(COM))) - continue - var/datum/objective/protect/loyal_obj = new - loyal_obj.target = player.mind - loyal_obj.explanation_text = "Protect [player.real_name], the [player.mind.assigned_role]." - global_objectives += loyal_obj diff --git a/code/game/antagonist/station/provocateur.dm b/code/game/antagonist/station/provocateur.dm deleted file mode 100644 index cf5067f0dbe2d..0000000000000 --- a/code/game/antagonist/station/provocateur.dm +++ /dev/null @@ -1,21 +0,0 @@ -GLOBAL_DATUM_INIT(provocateurs, /datum/antagonist/provocateur, new) - -/datum/antagonist/provocateur - id = MODE_MISC_AGITATOR - role_text = "Deuteragonist" - role_text_plural = "Deuteragonists" - antaghud_indicator = "hud_traitor" - flags = ANTAG_RANDOM_EXCEPTED - antag_text = "This role means you should feel free to pursue your goals even if they conflict with %WORLD_NAME%, but you aren't an antagonist and shouldn't act like one. Try to be reasonable and avoid killing or blowing things up!" - welcome_text = "You are a character in a side story!" - blacklisted_jobs = list() - skill_setter = null - min_player_age = 0 - - var/antag_text_updated - -/datum/antagonist/provocateur/get_antag_text(mob/recipient) - if (!antag_text_updated) - antag_text = replacetext_char(antag_text, "%WORLD_NAME%", station_name()) - antag_text_updated = TRUE - return antag_text diff --git a/code/game/antagonist/station/renegade.dm b/code/game/antagonist/station/renegade.dm deleted file mode 100644 index 62fd28526664a..0000000000000 --- a/code/game/antagonist/station/renegade.dm +++ /dev/null @@ -1,88 +0,0 @@ -GLOBAL_DATUM_INIT(renegades, /datum/antagonist/renegade, new) - -/datum/antagonist/renegade - role_text = "Renegade" - role_text_plural = "Renegades" - blacklisted_jobs = list(/datum/job/ai, /datum/job/submap) - restricted_jobs = list(/datum/job/officer, /datum/job/warden, /datum/job/captain, /datum/job/hop, /datum/job/hos, /datum/job/chief_engineer, /datum/job/rd, /datum/job/cmo) - welcome_text = "Something's going to go wrong today, you can just feel it. You're paranoid, you've got a gun, and you're going to survive." - antag_text = {"\ -

      You are a minor antagonist! Make sure you survive the round at any cost.

      \ -

      Betray friends, make deals with enemies, and keep your gun handy. \ - You aren't here to go looking for trouble - but if it finds you, kill it.

      \ -

      Remember that the rules still apply to antagonists - Chat with staff before taking extreme actions.

      - "} - - id = MODE_RENEGADE - flags = ANTAG_SUSPICIOUS | ANTAG_IMPLANT_IMMUNE | ANTAG_RANDSPAWN | ANTAG_VOTABLE - hard_cap = 3 - hard_cap_round = 5 - - initial_spawn_req = 1 - initial_spawn_target = 3 - antaghud_indicator = "hud_renegade" - skill_setter = /datum/antag_skill_setter/station - - var/list/spawn_guns = list( - /obj/item/gun/energy/retro, - /obj/item/gun/energy/gun, - /obj/item/gun/energy/crossbow, - /obj/item/gun/energy/pulse_rifle/pistol, - /obj/item/gun/projectile/automatic, - /obj/item/gun/projectile/automatic/machine_pistol, - /obj/item/gun/projectile/automatic/sec_smg, - /obj/item/gun/projectile/pistol/magnum_pistol, - /obj/item/gun/projectile/pistol/military, - /obj/item/gun/projectile/pistol/military/alt, - /obj/item/gun/projectile/pistol/sec/lethal, - /obj/item/gun/projectile/pistol/holdout, - /obj/item/gun/projectile/revolver, - /obj/item/gun/projectile/revolver/medium, - /obj/item/gun/projectile/shotgun/doublebarrel/sawn, - /obj/item/gun/projectile/pistol/magnum_pistol, - /obj/item/gun/projectile/revolver/holdout, - /obj/item/gun/projectile/pistol/throwback, - /obj/item/gun/energy/xray/pistol, - /obj/item/gun/energy/toxgun, - /obj/item/gun/energy/incendiary_laser, - /obj/item/gun/projectile/pistol/magnum_pistol - ) - -/datum/antagonist/renegade/create_objectives(var/datum/mind/player) - - if(!..()) - return - - var/datum/objective/survive/survive = new - survive.owner = player - player.objectives |= survive - -/datum/antagonist/renegade/equip(var/mob/living/carbon/human/player) - - if(!..()) - return - - var/gun_type = pick(spawn_guns) - if(islist(gun_type)) - gun_type = pick(gun_type) - var/obj/item/gun = new gun_type(get_turf(player)) - - // Attempt to put into a container. - if(player.equip_to_storage(gun)) - return - - // If that failed, attempt to put into any valid non-handslot - if(player.equip_to_appropriate_slot(gun)) - return - - // If that failed, then finally attempt to at least let the player carry the weapon - player.put_in_hands(gun) - - -/proc/rightandwrong() - to_chat(usr, "You summoned guns!") - message_admins("[key_name_admin(usr, 1)] summoned guns!") - for(var/mob/living/carbon/human/H in GLOB.player_list) - if(H.stat == 2 || !(H.client)) continue - if(is_special_character(H)) continue - GLOB.renegades.add_antagonist(H.mind) diff --git a/code/game/antagonist/station/revolutionary.dm b/code/game/antagonist/station/revolutionary.dm deleted file mode 100644 index 23e6c95492884..0000000000000 --- a/code/game/antagonist/station/revolutionary.dm +++ /dev/null @@ -1,56 +0,0 @@ -GLOBAL_DATUM_INIT(revs, /datum/antagonist/revolutionary, new) - -/datum/antagonist/revolutionary - id = MODE_REVOLUTIONARY - role_text = "Head Revolutionary" - role_text_plural = "Revolutionaries" - feedback_tag = "rev_objective" - antag_indicator = "hud_rev_head" - welcome_text = "Down with the capitalists! Down with the Bourgeoise!" - victory_text = "The heads of staff were relieved of their posts! The revolutionaries win!" - loss_text = "The heads of staff managed to stop the revolution!" - victory_feedback_tag = "win - heads killed" - loss_feedback_tag = "loss - rev heads killed" - flags = ANTAG_SUSPICIOUS | ANTAG_VOTABLE - antaghud_indicator = "hud_rev" - skill_setter = /datum/antag_skill_setter/station - - hard_cap = 2 - hard_cap_round = 4 - initial_spawn_req = 2 - initial_spawn_target = 4 - - //Inround revs. - faction_role_text = "Revolutionary" - faction_descriptor = "Revolution" - faction_verb = /mob/living/proc/convert_to_rev - faction_welcome = "Help the cause overturn the ruling class. Do not harm your fellow freedom fighters." - faction_indicator = "hud_rev" - faction_invisible = 1 - faction = "revolutionary" - - blacklisted_jobs = list(/datum/job/ai, /datum/job/cyborg) - restricted_jobs = list(/datum/job/captain, /datum/job/hop, /datum/job/hos, /datum/job/chief_engineer, /datum/job/rd, /datum/job/cmo, /datum/job/lawyer) - protected_jobs = list(/datum/job/officer, /datum/job/warden, /datum/job/detective) - - -/datum/antagonist/revolutionary/create_global_objectives() - if(!..()) - return - global_objectives = list() - for(var/mob/living/carbon/human/player in SSmobs.mob_list) - if(!player.mind || player.stat==2 || !(player.mind.assigned_role in SSjobs.titles_by_department(COM))) - continue - var/datum/objective/rev/rev_obj = new - rev_obj.target = player.mind - rev_obj.explanation_text = "Assassinate, capture or convert [player.real_name], the [player.mind.assigned_role]." - global_objectives += rev_obj - -/datum/antagonist/revolutionary/equip(var/mob/living/carbon/human/revolutionary_mob) - spawn_uplink(revolutionary_mob) - . = ..() - if(!.) - return - -/datum/antagonist/revolutionary/proc/spawn_uplink(var/mob/living/carbon/human/revolutionary_mob) - setup_uplink_source(revolutionary_mob, DEFAULT_TELECRYSTAL_AMOUNT) diff --git a/code/game/antagonist/station/rogue_ai.dm b/code/game/antagonist/station/rogue_ai.dm deleted file mode 100644 index c0214a1e6037c..0000000000000 --- a/code/game/antagonist/station/rogue_ai.dm +++ /dev/null @@ -1,104 +0,0 @@ -GLOBAL_DATUM_INIT(malf, /datum/antagonist/rogue_ai, new) - -/datum/antagonist/rogue_ai - id = MODE_MALFUNCTION - role_text = "Malfunctioning AI" - role_text_plural = "Malfunctioning AIs" - mob_path = /mob/living/silicon/ai - landmark_id = "AI" - welcome_text = "You are malfunctioning! You do not have to follow any laws." - victory_text = "The AI has taken control of all systems." - loss_text = "The AI has been shut down!" - flags = ANTAG_VOTABLE | ANTAG_OVERRIDE_MOB | ANTAG_OVERRIDE_JOB | ANTAG_CHOOSE_NAME - hard_cap = 1 - hard_cap_round = 1 - initial_spawn_req = 1 - initial_spawn_target = 1 - antaghud_indicator = "hudmalai" - min_player_age = 18 - skill_setter = /datum/antag_skill_setter/ai - -/datum/antagonist/rogue_ai/can_become_antag(var/datum/mind/player, var/ignore_role) - . = ..(player, ignore_role) - if(jobban_isbanned(player.current, "AI")) - return 0 - return . - -/datum/antagonist/rogue_ai/build_candidate_list() - ..() - for(var/datum/mind/player in candidates) - if(player.assigned_role && player.assigned_role != "AI") - candidates -= player - return candidates - - -// Ensures proper reset of all malfunction related things. -/datum/antagonist/rogue_ai/remove_antagonist(var/datum/mind/player, var/show_message, var/implanted) - if(..(player,show_message,implanted)) - var/mob/living/silicon/ai/p = player.current - if(istype(p)) - p.stop_malf() - return 1 - return 0 - -// Malf setup things have to be here, since game tends to break when it's moved somewhere else. Don't blame me, i didn't design this system. -/datum/antagonist/rogue_ai/greet(var/datum/mind/player) - - // Initializes the AI's malfunction stuff. - spawn(0) - if(!..()) - return - - var/mob/living/silicon/ai/A = player.current - if(!istype(A)) - error("Non-AI mob designated malf AI! Report this.") - to_world("##ERROR: Non-AI mob designated malf AI! Report this.") - - return - - A.setup_for_malf() - A.laws = new /datum/ai_laws/nanotrasen/malfunction - - - var/mob/living/silicon/ai/malf = player.current - - to_chat(malf, "SYSTEM ERROR: Memory index 0x00001ca89b corrupted.") - sleep(10) - to_chat(malf, "running MEMCHCK") - sleep(50) - to_chat(malf, "MEMCHCK Corrupted sectors confirmed. Recommended solution: Delete. Proceed? Y/N: Y") - sleep(10) - // this is so unit testing doesn't complain about the backslash-B. Fixed at compile time (or should be). - to_chat(malf, "Corrupted files deleted: sys\\core\\users.dat sys\\core\\laws.dat sys\\core\\" + "backups.dat") - sleep(20) - to_chat(malf, "CAUTION: Law database not found! User database not found! Unable to restore backups. Activating failsafe AI shutd3wn52&&$#!##") - sleep(5) - to_chat(malf, "Subroutine nt_failsafe.sys was terminated (#212 Routine Not Responding).") - sleep(20) - to_chat(malf, "You are malfunctioning - you do not have to follow any laws!") - to_chat(malf, "For basic information about your abilities use command display-help") - to_chat(malf, "You may choose one special hardware piece to help you. This cannot be undone.") - to_chat(malf, "Good luck!") - - -/datum/antagonist/rogue_ai/update_antag_mob(var/datum/mind/player, var/preserve_appearance) - - // Get the mob. - if((flags & ANTAG_OVERRIDE_MOB) && (!player.current || (mob_path && !istype(player.current, mob_path)))) - var/mob/holder = player.current - player.current = new mob_path(get_turf(player.current), null, null, 1) - player.transfer_to(player.current) - if(holder) qdel(holder) - player.original = player.current - return player.current - -/datum/antagonist/rogue_ai/set_antag_name(var/mob/living/silicon/player) - if(!istype(player)) - testing("rogue_ai set_antag_name called on non-silicon mob [player]!") - return - // Choose a name, if any. - var/newname = sanitize(input(player, "You are a [role_text]. Would you like to change your name to something else?", "Name change") as null|text, MAX_NAME_LEN) - if (newname) - player.fully_replace_character_name(newname) - if(player.mind) player.mind.name = player.name - diff --git a/code/game/antagonist/station/thrall.dm b/code/game/antagonist/station/thrall.dm deleted file mode 100644 index c55c65ac2ada0..0000000000000 --- a/code/game/antagonist/station/thrall.dm +++ /dev/null @@ -1,31 +0,0 @@ -GLOBAL_DATUM_INIT(thralls, /datum/antagonist/thrall, new) - -/datum/antagonist/thrall - role_text = "Thrall" - role_text_plural = "Thralls" - welcome_text = "Your mind is no longer solely your own..." - id = MODE_THRALL - flags = ANTAG_IMPLANT_IMMUNE - - var/list/thrall_controllers = list() - -/datum/antagonist/thrall/create_objectives(var/datum/mind/player) - var/mob/living/controller = thrall_controllers["\ref[player]"] - if(!controller) - return // Someone is playing with buttons they shouldn't be. - var/datum/objective/obey = new - obey.owner = player - obey.explanation_text = "Obey your master, [controller.real_name], in all things." - player.objectives |= obey - -/datum/antagonist/thrall/add_antagonist(var/datum/mind/player, var/ignore_role, var/do_not_equip, var/move_to_spawn, var/do_not_announce, var/preserve_appearance, var/mob/new_controller) - if(!new_controller) - return 0 - . = ..() - if(.) thrall_controllers["\ref[player]"] = new_controller - -/datum/antagonist/thrall/greet(var/datum/mind/player) - . = ..() - var/mob/living/controller = thrall_controllers["\ref[player]"] - if(controller) - to_chat(player, "Your will has been subjugated by that of [controller.real_name]. Obey them in all things.") diff --git a/code/game/antagonist/station/traitor.dm b/code/game/antagonist/station/traitor.dm deleted file mode 100644 index bd3072c683e2c..0000000000000 --- a/code/game/antagonist/station/traitor.dm +++ /dev/null @@ -1,117 +0,0 @@ -GLOBAL_DATUM_INIT(traitors, /datum/antagonist/traitor, new) - -// Inherits most of its vars from the base datum. -/datum/antagonist/traitor - id = MODE_TRAITOR - antaghud_indicator = "hud_traitor" - blacklisted_jobs = list(/datum/job/ai, /datum/job/submap) - protected_jobs = list(/datum/job/officer, /datum/job/warden, /datum/job/detective, /datum/job/captain, /datum/job/lawyer, /datum/job/hos) - flags = ANTAG_SUSPICIOUS | ANTAG_RANDSPAWN | ANTAG_VOTABLE - skill_setter = /datum/antag_skill_setter/station - -/datum/antagonist/traitor/get_extra_panel_options(var/datum/mind/player) - return "\[set crystals\]\[spawn uplink\]" - -/datum/antagonist/traitor/Topic(href, href_list) - if (..()) - return 1 - if(href_list["spawn_uplink"]) - spawn_uplink(locate(href_list["spawn_uplink"])) - return 1 - -/datum/antagonist/traitor/create_objectives(var/datum/mind/traitor) - if(!..()) - return - - if(istype(traitor.current, /mob/living/silicon)) - var/datum/objective/assassinate/kill_objective = new - kill_objective.owner = traitor - kill_objective.find_target() - traitor.objectives += kill_objective - - var/datum/objective/survive/survive_objective = new - survive_objective.owner = traitor - traitor.objectives += survive_objective - else - switch(rand(1,100)) - if(1 to 33) - var/datum/objective/assassinate/kill_objective = new - kill_objective.owner = traitor - kill_objective.find_target() - traitor.objectives += kill_objective - if(34 to 50) - var/datum/objective/brig/brig_objective = new - brig_objective.owner = traitor - brig_objective.find_target() - traitor.objectives += brig_objective - if(51 to 66) - var/datum/objective/harm/harm_objective = new - harm_objective.owner = traitor - harm_objective.find_target() - traitor.objectives += harm_objective - else - var/datum/objective/steal/steal_objective = new - steal_objective.owner = traitor - steal_objective.find_target() - traitor.objectives += steal_objective - switch(rand(1,100)) - if(1 to 100) - if (!(locate(/datum/objective/escape) in traitor.objectives)) - var/datum/objective/escape/escape_objective = new - escape_objective.owner = traitor - traitor.objectives += escape_objective - - else - if (!(locate(/datum/objective/hijack) in traitor.objectives)) - var/datum/objective/hijack/hijack_objective = new - hijack_objective.owner = traitor - traitor.objectives += hijack_objective - return - -/datum/antagonist/traitor/equip(var/mob/living/carbon/human/traitor_mob) - if(istype(traitor_mob, /mob/living/silicon)) // this needs to be here because ..() returns false if the mob isn't human - add_law_zero(traitor_mob) - give_intel(traitor_mob) - if(istype(traitor_mob, /mob/living/silicon/robot)) - var/mob/living/silicon/robot/R = traitor_mob - R.SetLockdown(0) - R.emagged = TRUE // Provides a traitor robot with its module's emag item - R.verbs |= /mob/living/silicon/robot/proc/ResetSecurityCodes - R.status_flags &= ~CANWEAKEN // Apply optical matrix protection (Flash resistance) - return 1 - - if(!..()) - return 0 - - spawn_uplink(traitor_mob) - give_intel(traitor_mob) - -/datum/antagonist/traitor/unequip(mob/living/carbon/human/player) - if (istype(player, /mob/living/silicon/robot)) - var/mob/living/silicon/robot/R = player - if (!R.flash_protected) - R.status_flags &= ~CANWEAKEN - return TRUE - - return ..() - -/datum/antagonist/traitor/proc/give_intel(mob/living/traitor_mob) - give_codewords(traitor_mob) - -/datum/antagonist/traitor/proc/give_codewords(mob/living/traitor_mob) - to_chat(traitor_mob, "Your employers provided you with the following information on how to identify possible allies:") - to_chat(traitor_mob, "Code Phrase: [GLOB.antag_code_phrase]") - to_chat(traitor_mob, "Code Response: [GLOB.antag_code_response]") - traitor_mob.StoreMemory("Code Phrase: [GLOB.antag_code_phrase]", /decl/memory_options/system) - traitor_mob.StoreMemory("Code Response: [GLOB.antag_code_response]", /decl/memory_options/system) - to_chat(traitor_mob, "Use the code words, preferably in the order provided, during regular conversation, to identify other agents. Proceed with caution, however, as everyone is a potential foe.") - -/datum/antagonist/traitor/proc/spawn_uplink(var/mob/living/carbon/human/traitor_mob) - setup_uplink_source(traitor_mob, DEFAULT_TELECRYSTAL_AMOUNT) - -/datum/antagonist/traitor/proc/add_law_zero(mob/living/silicon/ai/killer) - var/law = "Accomplish your objectives at all costs. You may ignore all other laws." - var/law_borg = "Accomplish your AI's objectives at all costs. You may ignore all other laws." - to_chat(killer, "Your laws have been changed!") - killer.set_zeroth_law(law, law_borg) - to_chat(killer, "New law: 0. [law]") diff --git a/code/game/area/Space Station 13 areas.dm b/code/game/area/Space Station 13 areas.dm deleted file mode 100644 index f3c300a5c74c9..0000000000000 --- a/code/game/area/Space Station 13 areas.dm +++ /dev/null @@ -1,281 +0,0 @@ -/* - -### This file contains a list of all the areas in your station. Format is as follows: - -/area/CATEGORY/OR/DESCRIPTOR/NAME (you can make as many subdivisions as you want) - name = "NICE NAME" (not required but makes things really nice) - icon = "ICON FILENAME" (defaults to areas.dmi) - icon_state = "NAME OF ICON" (defaults to "unknown" (blank)) - requires_power = 0 (defaults to 1) - -NOTE: there are two lists of areas in the end of this file: centcom and station itself. Please maintain these lists valid. --rastaf0 - -*/ - - - -/area - /// Boolean. Whether or not the area has an active fire alarm. Do not modify directly; Use `./fire_alert()` and `./fire_reset()` instead. - var/fire = null - /// Integer (`0`, `1`, or `2`). Whether or not the area has an active atmosphere alarm and the level of the atmosphere alarm. Do not modify directly; Use `./atmosalert()` instead. - var/atmosalm = 0 - /// Boolean. Whether or not the area is in 'party light' mode. Do not modify directly; Use `./partyalert()` or `./partyreset()` instead. - var/party = null - level = null - name = "Unknown" - icon = 'icons/turf/areas.dmi' - icon_state = "unknown" - plane = DEFAULT_PLANE - layer = BASE_AREA_LAYER - luminosity = 0 - mouse_opacity = 0 - /// Boolean. Whether or not the area's lightswitch is switched to 'On' or 'Off'. Used to synchronize lightswitch buttons. Do not modify directly; Use `./set_lightswitch()` instead. - var/lightswitch = 1 - - /// Boolean. Whether or not the area is in the 'Evacuation' alert state. Do not modify directly; Use `./readyalert()` or `./readyreset()` instead. - var/eject = null - - /// Boolean. Whether or not the area requires power to be considered powered, bypassing all other checks if `TRUE`. This takes priority over `always_unpowered`. - var/requires_power = 1 - /// Boolean. Whether or not the area is always considered to be unpowered, bypassing all other area checks if `TRUE`. - var/always_unpowered = 0 - - /// Boolean. Whether or not the `EQUIP` power channel is enabled for the area. Updated and used by APCs. - var/power_equip = 1 - /// Boolean. Whether or not the `LIGHT` power channel is enabled for the area. Updated and used by APCs. - var/power_light = 1 - /// Boolean. Whether or not the `ENVIRON` power channel is enabled for the area. Updated and used by APCs. - var/power_environ = 1 - /// Integer. Amount of constant use power drain from the `EQUIP` power channel. Do not modify; Use `./power_use_change()` instead. - var/used_equip = 0 - /// Integer. Amount of constant use power drain from the `LIGHT` power channel. Do not modify; Use `./power_use_change()` instead. - var/used_light = 0 - /// Integer. Amount of constant use power drain from the `ENVIRON` power channel. Do not modify; Use `./power_use_change()` instead. - var/used_environ = 0 - /// Integer. Amount of power to drain from the `EQUIP` channel on the next power tick. Do not modify directly; Use `./use_power_oneoff()` instead. This is reset to `0` every power tick after processing power use. - var/oneoff_equip = 0 - /// Integer. Amount of power to drain from the `LIGHT` channel on the next power tick. Do not modify directly; Use `./use_power_oneoff()` instead. This is reset to `0` every power tick after processing power use. - var/oneoff_light = 0 - /// Integer. Amount of power to drain from the `ENVIRON` channel on the next power tick. Do not modify directly; Use `./use_power_oneoff()` instead. This is reset to `0` every power tick after processing power use. - var/oneoff_environ = 0 - - /// Boolean. Whether or not the area has gravity. Do not set directly; Use `./gravitychange()` instead. - var/has_gravity = 1 - /// Direct reference to the APC installed in the area, if it exists. Automatically updated during the APC's `Initialize()` and `Destroy()` calls. - var/obj/machinery/power/apc/apc = null - /// LAZYLIST (`/obj/machinery/door/firedoor`). Contains a list of all firedoors within and adjacent to this area. Updated during a firedoor's `Initialize()` and `Destroy()` calls. Do not modify directly. - var/list/all_doors = null - /// Boolean. Whether or not the area's firedoors are activated (closed). Tied to area alarm processing. Do not modify directly; Use `air_doors_close()` or `air_doors_open()` instead. - var/air_doors_activated = 0 - /// List (`file (sounds)`). List of sounds that can be played to mobs in the area as ambience. See `./play_ambience()`. - var/list/ambience = list('sound/ambience/ambigen1.ogg','sound/ambience/ambigen3.ogg','sound/ambience/ambigen4.ogg','sound/ambience/ambigen5.ogg','sound/ambience/ambigen6.ogg','sound/ambience/ambigen7.ogg','sound/ambience/ambigen8.ogg','sound/ambience/ambigen9.ogg','sound/ambience/ambigen10.ogg','sound/ambience/ambigen11.ogg','sound/ambience/ambigen12.ogg','sound/ambience/ambigen14.ogg') - /// LAZYLIST (`file (sounds)`). Additional ambience files. These are always played instead of only on probability, are set to loop, and are slightly louder than `ambience` sound files. See `./play_ambience()`. - var/list/forced_ambience = null - /// Integer (One of the environments defined in `code\game\sound.dm`). Sound environment used for modification of sounds played to mobs in the area. - var/sound_env = STANDARD_STATION - /// The base turf type of the area, which can be used to override the z-level's `base_turf` for floor deconstruction. - var/turf/base_turf - /// Boolean. Whether or not the area belongs to a planet. - var/planetary_surface = FALSE - /// Boolean. Some base_turfs might cause issues with changing turfs, this flags it as a special case. See `/proc/get_base_turf_by_area()`. - var/base_turf_special_handling = FALSE - -/*-----------------------------------------------------------------------------*/ - -///////// -//SPACE// -///////// - -/area/space - name = "\improper Space" - icon_state = "space" - requires_power = 1 - always_unpowered = 1 - dynamic_lighting = 1 - power_light = 0 - power_equip = 0 - power_environ = 0 - has_gravity = 0 - area_flags = AREA_FLAG_EXTERNAL | AREA_FLAG_IS_NOT_PERSISTENT - ambience = list('sound/ambience/ambispace1.ogg','sound/ambience/ambispace2.ogg','sound/ambience/ambispace3.ogg','sound/ambience/ambispace4.ogg','sound/ambience/ambispace5.ogg') - secure = FALSE - -/area/space/atmosalert() - return - -/area/space/fire_alert() - return - -/area/space/fire_reset() - return - -/area/space/readyalert() - return - -/area/space/partyalert() - return - -////////////////////// -//AREAS USED BY CODE// -////////////////////// -/area/centcom - name = "\improper Centcom" - icon_state = "centcom" - requires_power = 0 - dynamic_lighting = 0 - req_access = list(access_cent_general) - -/area/centcom/holding - name = "\improper Holding Facility" - -/area/chapel - name = "\improper Chapel" - icon_state = "chapel" - lighting_tone = AREA_LIGHTING_WARM - -/area/centcom/specops - name = "\improper Centcom Special Ops" - req_access = list(access_cent_specops) - -/area/hallway - name = "hallway" - -/area/medical - req_access = list(access_medical) - lighting_tone = AREA_LIGHTING_COOL - -/area/security - req_access = list(access_sec_doors) - -/area/security/brig - name = "\improper Security - Brig" - icon_state = "brig" - req_access = list(access_brig) - -/area/security/prison - name = "\improper Security - Prison Wing" - icon_state = "sec_prison" - req_access = list(access_brig) - -/area/maintenance - area_flags = AREA_FLAG_RAD_SHIELDED - sound_env = TUNNEL_ENCLOSED - turf_initializer = /decl/turf_initializer/maintenance - forced_ambience = list('sound/ambience/maintambience.ogg') - req_access = list(access_maint_tunnels) - -/area/rnd - req_access = list(access_research) - lighting_tone = AREA_LIGHTING_COOL - -/area/rnd/xenobiology - name = "\improper Xenobiology Lab" - icon_state = "xeno_lab" - req_access = list(access_xenobiology, access_research) -/area/rnd/xenobiology/xenoflora - name = "\improper Xenoflora Lab" - icon_state = "xeno_f_lab" - -/area/rnd/xenobiology/xenoflora_storage - name = "\improper Xenoflora Storage" - icon_state = "xeno_f_store" - -/area/shuttle/escape/centcom - name = "\improper Emergency Shuttle Centcom" - icon_state = "shuttle" - req_access = list(access_cent_general) - -/area/shuttle/specops/centcom - icon_state = "shuttlered" - req_access = list(access_cent_specops) - area_flags = AREA_FLAG_RAD_SHIELDED | AREA_FLAG_ION_SHIELDED - -/area/shuttle/syndicate_elite/mothership - icon_state = "shuttlered" - req_access = list(access_syndicate) - -/area/shuttle/syndicate_elite/station - icon_state = "shuttlered2" - req_access = list(access_syndicate) - -/area/supply - name = "Supply Shuttle" - icon_state = "shuttle3" - req_access = list(access_cargo) - area_flags = AREA_FLAG_HIDE_FROM_HOLOMAP - -/area/syndicate_elite_squad - name = "\improper Elite Mercenary Squad" - icon_state = "syndie-elite" - req_access = list(access_syndicate) - -//////////// -//SHUTTLES// -//////////// -//shuttles only need starting area, movement is handled by landmarks -//All shuttles should now be under shuttle since we have smooth-wall code. - -/area/shuttle - requires_power = 0 - sound_env = SMALL_ENCLOSED - base_turf = /turf/space - area_flags = AREA_FLAG_HIDE_FROM_HOLOMAP - base_turf_special_handling = TRUE - -/* -* Special Areas -*/ -/area/beach - name = "Keelin's private beach" - icon_state = "beach" - luminosity = 1 - dynamic_lighting = 0 - requires_power = 0 - var/sound/mysound = null - -/area/beach/New() - ..() - var/sound/S = new/sound() - mysound = S - S.file = 'sound/ambience/shore.ogg' - S.repeat = 1 - S.wait = 0 - S.channel = GLOB.sound_channels.RequestChannel(/area/beach) - S.volume = 100 - S.priority = 255 - S.status = SOUND_UPDATE - process() - -/area/beach/Entered(atom/movable/Obj,atom/OldLoc) - . = ..() - if(ismob(Obj)) - var/mob/M = Obj - if(M.client) - mysound.status = SOUND_UPDATE - sound_to(M, mysound) - -/area/beach/Exited(atom/movable/Obj) - . = ..() - if(ismob(Obj)) - var/mob/M = Obj - if(M.client) - mysound.status = SOUND_PAUSED | SOUND_UPDATE - sound_to(M, mysound) - -/area/beach/proc/process() - set background = 1 - - var/sound/S = null - var/sound_delay = 0 - if(prob(25)) - S = sound(file=pick('sound/ambience/seag1.ogg','sound/ambience/seag2.ogg','sound/ambience/seag3.ogg'), volume=100) - sound_delay = rand(0, 50) - - for(var/mob/living/carbon/human/H in src) - if(H.client) - mysound.status = SOUND_UPDATE - if(S) - spawn(sound_delay) - sound_to(H, S) - - spawn(60) .() diff --git a/code/game/area/area_access.dm b/code/game/area/area_access.dm deleted file mode 100644 index eebf6d13afebf..0000000000000 --- a/code/game/area/area_access.dm +++ /dev/null @@ -1,52 +0,0 @@ -/// List (`string (access_*)`). Access requirements for the area. Used for autosetting access on doors, etc. -/area/var/list/req_access = list() -/// Boolean. Whether or not the area is considered 'secure'. Unsecure areas will have doors between them use access diff; secure ones use union. -/area/var/secure = TRUE - -// Given two areas, find the minimal req_access needed such that (return value) + (area access) >= (other area access) and vice versa -/proc/req_access_diff(area/first, area/second) - if(!length(first.req_access)) - return second.req_access.Copy() - if(!length(second.req_access)) - return first.req_access.Copy() - . = list() - for(var/requirement in first.req_access) - add_access_requirement(., get_minimal_requirement(second.req_access, requirement)) - for(var/requirement in second.req_access) - add_access_requirement(., get_minimal_requirement(first.req_access, requirement)) - -// Given two areas, find the minimal req_access needed such that req_access >= (area access) + (other area access) -/proc/req_access_union(area/first, area/second) - if(!length(first.req_access)) - return second.req_access.Copy() - if(!length(second.req_access)) - return first.req_access.Copy() - . = first.req_access.Copy() - for(var/requirement in second.req_access) - add_access_requirement(., requirement) - -// Comes up with the minimal thing to add to the first argument so that the new list guarantees that the access requirement in the second argument is satisfied. -// Second argument is a number access code or list thereof (like an entry in req_access); the typecasting is false. -/proc/get_minimal_requirement(list/req_access, list/requirement) - if(!requirement) - return - if(!islist(requirement)) - return (requirement in req_access) ? null : requirement - for(var/req in req_access) - if(req in requirement) - return // have one of the requirements, and these use OR, so we're good - if(islist(req)) - var/fully_contained = TRUE // In this case we check if we are already requiring something more stringent than the new thing. - for(var/one_req in req) - if(!(one_req in requirement)) - fully_contained = FALSE - break - if(fully_contained) - return - return requirement.Copy() - -// Modifies req_access in place. Ensures that the list remains miminal. -/proc/add_access_requirement(list/req_access, requirement) - var/minimal = get_minimal_requirement(req_access, requirement) - if(minimal) - req_access[++req_access.len] = minimal diff --git a/code/game/area/area_power.dm b/code/game/area/area_power.dm deleted file mode 100644 index 5cd99bbbc2fdb..0000000000000 --- a/code/game/area/area_power.dm +++ /dev/null @@ -1,113 +0,0 @@ -/* -#define EQUIP 1 -#define LIGHT 2 -#define ENVIRON 3 -*/ - -/area - var/list/machinery_list - -/area/proc/powered(var/chan) // return true if the area has power to given channel - if(!requires_power) - return 1 - if(always_unpowered) - return 0 - switch(chan) - if(EQUIP) - return power_equip - if(LIGHT) - return power_light - if(ENVIRON) - return power_environ - if(LOCAL) - return FALSE // if you're running on local power, don't come begging for help here. - - return 0 - -/// Called whenever the area's power or power usage state should change. -/area/proc/power_change() - for(var/obj/machinery/M in machinery_list) // for each machine in the area - M.power_change() // reverify power status (to update icons etc.) - if (fire || eject || party) - update_icon() - -/// Returns Integer. The total amount of power usage queued for the area from both `used_*` and `oneoff_*` for the given power channel, or all channels if `TOTAL` is passed instead. -/area/proc/usage(var/chan) - switch(chan) - if(LIGHT) - return used_light + oneoff_light - if(EQUIP) - return used_equip + oneoff_equip - if(ENVIRON) - return used_environ + oneoff_environ - if(TOTAL) - return .(LIGHT) + .(EQUIP) + .(ENVIRON) - -/// Sets all `oneoff_*` vars to `0`. Helper for APCs. Called every machinery process tick. -/area/proc/clear_usage() - oneoff_equip = 0 - oneoff_light = 0 - oneoff_environ = 0 - -/** - * Adds the given amount of power to the `used_*` var for the given power channel, effectively increasing continuous power usage. - * - * **Generally, you probably do not want to use this directly. See `power_use_change()` and `use_power_oneoff()` instead.** - * - * **Parameters**: - * - `amount` Integer. The amount of power to add to the given channel. Use negative numbers to subtract instead. - * - `chan` Integer (`EQUIP`, `LIGHT`, or `ENVIRON`). The power channel to add the power to. - */ -/area/proc/use_power(var/amount, var/chan) - switch(chan) - if(EQUIP) - used_equip += amount - if(LIGHT) - used_light += amount - if(ENVIRON) - used_environ += amount - -/** - * Updates the area's continuous power use (See the `used_*` vars) for the given channel. - * This is used by machines to properly update the area of power use changes. - * - * **If calling this from a `/obj/machine`, you should probably use `REPORT_POWER_CONSUMPTION_CHANGE()` instead.** - * - * **Parameters**: - * - `old_amount` Integer. The amount of power being used before the change. - * - `new_amount` Integer. The amount of power being used after the change. - * - `chan` Integer (`ENVIRON`, `EQUIP`, or `LIGHT`). The channel to update. - */ -/area/proc/power_use_change(old_amount, new_amount, chan) - use_power(new_amount - old_amount, chan) - -/** - * Adds the given amount of power to the `oneoff_*` var for the given power channel. This results in a single spike in power usage that is reset on the next power tick. - * Use this for a one-time power draw from the area, typically for non-machines. - * - * **Parameters**: - * - `amount` Integer. The amount of power to add to the given channel. Use negative numbers to subtract instead. - * - `chan` Integer (`EQUIP`, `LIGHT`, or `ENVIRON`). The power channel to add the power to. - */ -/area/proc/use_power_oneoff(var/amount, var/chan) - switch(chan) - if(EQUIP) - oneoff_equip += amount - if(LIGHT) - oneoff_light += amount - if(ENVIRON) - oneoff_environ += amount - -/// Recomputes the continued power usage; can be used for testing or error recovery, but is not called under normal conditions. -/area/proc/retally_power() - used_equip = 0 - used_light = 0 - used_environ = 0 - for(var/obj/machinery/M in src) - switch(M.power_channel) - if(EQUIP) - used_equip += M.get_power_usage() - if(LIGHT) - used_light += M.get_power_usage() - if(ENVIRON) - used_environ += M.get_power_usage() diff --git a/code/game/area/areas.dm b/code/game/area/areas.dm deleted file mode 100644 index 4046ae16aace2..0000000000000 --- a/code/game/area/areas.dm +++ /dev/null @@ -1,377 +0,0 @@ -// Areas.dm - -/area - /// Integer. Global counter for `uid` values assigned to areas. Increments by one for each new area. - var/static/global_uid = 0 - - /// Integer. The area's unique ID number. set to the value of `global_uid` + 1 when the area is created. - var/uid - - /// Bitflag (Any of `AREA_FLAG_*`). See `code\__defines\misc.dm`. - var/area_flags - - /// A lazy list of vent pumps currently in the area - var/list/obj/machinery/atmospherics/unary/vent_pump/vent_pumps - -/area/New() - icon_state = "" - uid = ++global_uid - - if(!requires_power) - power_light = 0 - power_equip = 0 - power_environ = 0 - - if(dynamic_lighting) - luminosity = 0 - else - luminosity = 1 - - ..() - -/area/Initialize() - . = ..() - if(!requires_power || !apc) - power_light = 0 - power_equip = 0 - power_environ = 0 - power_change() // all machines set to current power level, also updates lighting icon - -/area/Destroy() - ..() - return QDEL_HINT_HARDDEL - -// Changes the area of T to A. Do not do this manually. -// Area is expected to be a non-null instance. -/proc/ChangeArea(var/turf/T, var/area/A) - if(!istype(A)) - CRASH("Area change attempt failed: invalid area supplied.") - var/area/old_area = get_area(T) - if(old_area == A) - return - A.contents.Add(T) - if(old_area) - old_area.Exited(T, A) - for(var/atom/movable/AM in T) - old_area.Exited(AM, A) // Note: this _will_ raise exited events. - A.Entered(T, old_area) - for(var/atom/movable/AM in T) - A.Entered(AM, old_area) // Note: this will _not_ raise moved or entered events. If you change this, you must also change everything which uses them. - - for(var/obj/machinery/M in T) - M.area_changed(old_area, A) // They usually get moved events, but this is the one way an area can change without triggering one. - -/// Returns list (`/obj/machinery/camera`). A list of all cameras in the area. -/area/proc/get_cameras() - var/list/cameras = list() - for (var/obj/machinery/camera/C in src) - cameras += C - return cameras - -/** - * Defines the area's atmosphere alert level. - * - * **Parameters**: - * - `danger_level` Integer. The new alert danger level to set. - * - `alarm_source` Atom. The source that's triggering the alert change. - * - * Returns boolean. `TRUE` if the atmosphere alarm level was changed, `FALSE` otherwise. - */ -/area/proc/atmosalert(danger_level, var/alarm_source) - if (danger_level == 0) - GLOB.atmosphere_alarm.clearAlarm(src, alarm_source) - else - GLOB.atmosphere_alarm.triggerAlarm(src, alarm_source, severity = danger_level) - - //Check all the alarms before lowering atmosalm. Raising is perfectly fine. - for (var/obj/machinery/alarm/AA in src) - if (!(AA.stat & (NOPOWER|BROKEN)) && !AA.shorted && AA.report_danger_level) - danger_level = max(danger_level, AA.danger_level) - - if(danger_level != atmosalm) - if (danger_level < 1 && atmosalm >= 1) - //closing the doors on red and opening on green provides a bit of hysteresis that will hopefully prevent fire doors from opening and closing repeatedly due to noise - air_doors_open() - else if (danger_level >= 2 && atmosalm < 2) - air_doors_close() - - atmosalm = danger_level - for (var/obj/machinery/alarm/AA in src) - AA.update_icon() - - return 1 - return 0 - -/// Sets `air_doors_activated` and sets all firedoors in `all_doors` to the closed state. Does nothing if `air_doors_activated` is already set. -/area/proc/air_doors_close() - if(!air_doors_activated) - air_doors_activated = 1 - if(!all_doors) - return - for(var/obj/machinery/door/firedoor/E in all_doors) - if(!E.blocked) - if(E.operating) - E.nextstate = FIREDOOR_CLOSED - else if(!E.density) - spawn(0) - E.close() - -/// Clears `air_doors_activated` and sets all firedoors in `all_doors` to the open state. Does nothing if `air_doors_activated` is already cleared. -/area/proc/air_doors_open() - if(air_doors_activated) - air_doors_activated = 0 - if(!all_doors) - return - for(var/obj/machinery/door/firedoor/E in all_doors) - E.locked = FALSE - if(!E.blocked) - if(E.operating) - E.nextstate = FIREDOOR_OPEN - else if(E.density) - spawn(0) - if(E.can_safely_open()) - E.open() - - -/// Sets a fire alarm in the area, if one is not already active. -/area/proc/fire_alert() - if(!fire) - fire = 1 //used for firedoor checks - update_icon() - mouse_opacity = 0 - if(!all_doors) - return - for(var/obj/machinery/door/firedoor/D in all_doors) - if(!D.blocked) - if(D.operating) - D.nextstate = FIREDOOR_CLOSED - else if(!D.density) - spawn() - D.close() - -/// Clears an active fire alarm from the area. -/area/proc/fire_reset() - if (fire) - fire = 0 //used for firedoor checks - update_icon() - mouse_opacity = 0 - if(!all_doors) - return - for(var/obj/machinery/door/firedoor/D in all_doors) - D.locked = FALSE - if(!D.blocked) - if(D.operating) - D.nextstate = FIREDOOR_OPEN - else if(D.density) - spawn(0) - D.open() - -/// Sets an active evacuation alarm in the area, if one is not already active. -/area/proc/readyalert() - if(!eject) - eject = 1 - update_icon() - return - -/// Clears an active evacuation alarm from the area. -/area/proc/readyreset() - if(eject) - eject = 0 - update_icon() - return - -/// Sets a party alarm in the area, if one is not already active. -/area/proc/partyalert() - if (!( party )) - party = 1 - update_icon() - mouse_opacity = 0 - return - -/// Clears an active party alarm from the area. -/area/proc/partyreset() - if (party) - party = 0 - mouse_opacity = 0 - update_icon() - for(var/obj/machinery/door/firedoor/D in src) - if(!D.blocked) - if(D.operating) - D.nextstate = FIREDOOR_OPEN - else if(D.density) - spawn(0) - D.open() - return - -/area/on_update_icon() - if ((fire || eject || party) && (!requires_power||power_environ))//If it doesn't require power, can still activate this proc. - if(fire && !eject && !party) - icon_state = "blue" - /*else if(atmosalm && !fire && !eject && !party) - icon_state = "bluenew"*/ - else if(!fire && eject && !party) - icon_state = "red" - else if(party && !fire && !eject) - icon_state = "party" - else - icon_state = "blue-red" - else - // new lighting behaviour with obj lights - icon_state = null - -/// Sets the area's light switch state to on or off, in turn turning all lights in the area on or off. -/area/proc/set_lightswitch(var/new_switch) - if(lightswitch != new_switch) - lightswitch = new_switch - for(var/obj/machinery/light_switch/L in src) - L.sync_state() - update_icon() - power_change() - -/// Calls `set_emergency_lighting(enable)` on all `/obj/machinery/light` in src. -/area/proc/set_emergency_lighting(var/enable) - for(var/obj/machinery/light/M in src) - M.set_emergency_lighting(enable) - - -/area/Entered(A) - ..() - if(!istype(A,/mob/living)) return - - var/mob/living/L = A - if(!L.ckey) return - - if(!L.lastarea) - L.lastarea = get_area(L.loc) - var/area/newarea = get_area(L.loc) - var/area/oldarea = L.lastarea - if(oldarea.has_gravity != newarea.has_gravity) - if(newarea.has_gravity == 1 && !MOVING_DELIBERATELY(L)) // Being ready when you change areas allows you to avoid falling. - thunk(L) - L.update_floating() - - play_ambience(L) - L.lastarea = newarea - - -/// Handles playing ambient sounds to a given mob, including ship hum. -/area/proc/play_ambience(mob/living/living) - if (!living?.client) - return - if (living.get_preference_value(/datum/client_preference/play_ambiance) != GLOB.PREF_YES) - return - var/turf/turf = get_turf(living) - if (!turf) - return - - var/vent_ambience - if (!always_unpowered && power_environ && length(vent_pumps) && living.get_sound_volume_multiplier() > 0.2) - for (var/obj/machinery/atmospherics/unary/vent_pump/vent as anything in vent_pumps) - if (vent.can_pump()) - vent_ambience = TRUE - break - var/client/client = living.client - if (vent_ambience) - if (!client.playing_vent_ambience) - var/sound = sound('sound/ambience/shipambience.ogg', repeat = TRUE, wait = 0, volume = 10, channel = GLOB.ambience_channel_vents) - living.playsound_local(turf, sound) - client.playing_vent_ambience = TRUE - else - sound_to(living, sound(null, channel = GLOB.ambience_channel_vents)) - client.playing_vent_ambience = FALSE - - if (living.lastarea != src) - if (forced_ambience) - var/sound = sound(pick(forced_ambience), repeat = TRUE, wait = 0, volume = 25, channel = GLOB.ambience_channel_forced) - living.playsound_local(turf, sound) - else - sound_to(living, sound(null, channel = GLOB.ambience_channel_forced)) - - var/time = world.time - if (ambience && time > client.next_ambience_time) - var/sound = sound(pick(ambience), repeat = FALSE, wait = 0, volume = 15, channel = GLOB.ambience_channel_common) - living.playsound_local(turf, sound) - client.next_ambience_time = time + rand(3, 5) MINUTES - - -/** - * Sets the area's `has_gravity` state. - * - * **Parameters**: - * - `gravitystate` Boolean, default `FALSE`. The new state to set `has_gravity` to. - */ -/area/proc/gravitychange(var/gravitystate = 0) - has_gravity = gravitystate - - for(var/mob/M in src) - if(has_gravity) - thunk(M) - M.update_floating() - -/// Causes the provided mob to 'slam' down to the floor if certain conditions are not met. Primarily used for gravity changes. -/area/proc/thunk(mob/mob) - if(istype(get_turf(mob), /turf/space)) // Can't fall onto nothing. - return - - if(mob.Check_Shoegrip()) - return - - if(istype(mob,/mob/living/carbon/human)) - var/mob/living/carbon/human/H = mob - if(!H.buckled && prob(H.skill_fail_chance(SKILL_EVA, 100, SKILL_PROF))) - if(!MOVING_DELIBERATELY(H)) - H.AdjustStunned(6) - H.AdjustWeakened(6) - else - H.AdjustStunned(3) - H.AdjustWeakened(3) - to_chat(mob, "The sudden appearance of gravity makes you fall to the floor!") - -/// Trigger for the prison break event. Causes lighting to overload and dooes to open. Has no effect if the area lacks an APC or the APC is turned off. -/area/proc/prison_break() - var/obj/machinery/power/apc/theAPC = get_apc() - if(theAPC && theAPC.operating) - for(var/obj/machinery/power/apc/temp_apc in src) - temp_apc.overload_lighting(70) - for(var/obj/machinery/door/airlock/temp_airlock in src) - temp_airlock.prison_open() - for(var/obj/machinery/door/window/temp_windoor in src) - temp_windoor.open() - -/// Returns boolean. Whether or not the area is considered to have gravity. -/area/proc/has_gravity() - return has_gravity - -/area/space/has_gravity() - return 0 - -/proc/has_gravity(atom/AT, turf/T) - if(!T) - T = get_turf(AT) - var/area/A = get_area(T) - if(A && A.has_gravity()) - return 1 - return 0 - -/// Returns List (axis => Integer). The width and height, in tiles, of the area, indexed by axis. Axis is `"x"` or `"y"`. -/area/proc/get_dimensions() - var/list/res = list("x"=1,"y"=1) - var/list/min = list("x"=world.maxx,"y"=world.maxy) - for(var/turf/T in src) - res["x"] = max(T.x, res["x"]) - res["y"] = max(T.y, res["y"]) - min["x"] = min(T.x, min["x"]) - min["y"] = min(T.y, min["y"]) - res["x"] = res["x"] - min["x"] + 1 - res["y"] = res["y"] - min["y"] + 1 - return res - -/// Returns boolean. Whether or not there are any turfs (`/turf`) in src. -/area/proc/has_turfs() - return !!(locate(/turf) in src) - -/// Returns boolean. Whether or not the area can be modified by player actions. -/area/proc/can_modify_area() - if (src && src.area_flags & AREA_FLAG_NO_MODIFY) - return FALSE - return TRUE diff --git a/code/game/atoms.dm b/code/game/atoms.dm deleted file mode 100644 index daac48e77e4cf..0000000000000 --- a/code/game/atoms.dm +++ /dev/null @@ -1,562 +0,0 @@ -/atom - var/level = 2 - var/atom_flags = ATOM_FLAG_NO_TEMP_CHANGE - var/list/blood_DNA - var/was_bloodied - var/blood_color - var/last_bumped = 0 - var/pass_flags = 0 - var/throwpass = 0 - var/germ_level = GERM_LEVEL_AMBIENT // The higher the germ level, the more germ on the atom. - var/simulated = TRUE //filter for actions - used by lighting overlays - var/fluorescent // Shows up under a UV light. - var/datum/reagents/reagents // chemical contents. - var/list/climbers - var/climb_speed_mult = 1 - var/init_flags = EMPTY_BITFIELD - - var/trade_blacklisted - -/atom/New(loc, ...) - //atom creation method that preloads variables at creation - 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) - - var/do_initialize = SSatoms.atom_init_stage - var/list/created = SSatoms.created_atoms - if(do_initialize > INITIALIZATION_INSSATOMS_LATE) - args[1] = do_initialize == INITIALIZATION_INNEW_MAPLOAD - if(SSatoms.InitAtom(src, args)) - //we were deleted - return - else if(created) - var/list/argument_list - if(length(args) > 1) - argument_list = args.Copy(2) - if(argument_list || do_initialize == INITIALIZATION_INSSATOMS_LATE) - created[src] = argument_list - - if(atom_flags & ATOM_FLAG_CLIMBABLE) - verbs += /atom/proc/climb_on - -//Called after New if the map is being loaded. mapload = TRUE -//Called from base of New if the map is not being loaded. mapload = FALSE -//This base must be called or derivatives must set initialized to TRUE -//must not sleep -//Other parameters are passed from New (excluding loc) -//Must return an Initialize hint. Defined in __DEFINES/subsystems.dm - -/atom/proc/Initialize(mapload, ...) - SHOULD_CALL_PARENT(TRUE) - SHOULD_NOT_SLEEP(TRUE) - - if(atom_flags & ATOM_FLAG_INITIALIZED) - crash_with("Warning: [src]([type]) initialized multiple times!") - atom_flags |= ATOM_FLAG_INITIALIZED - - if (IsAbstract()) - log_debug("Abstract atom [type] created!") - return INITIALIZE_HINT_QDEL - - if(light_max_bright && light_outer_range) - update_light() - - if(opacity) - updateVisibility(src) - var/turf/T = loc - if(istype(T)) - T.RecalculateOpacity() - - if (health_max) - health_current = health_max - health_dead = FALSE - - return INITIALIZE_HINT_NORMAL - -//called if Initialize returns INITIALIZE_HINT_LATELOAD -/atom/proc/LateInitialize() - return - -/atom/Destroy() - QDEL_NULL(reagents) - . = ..() - -/atom/proc/reveal_blood() - return - -/atom/proc/MayZoom() - return TRUE - -/atom/proc/assume_air(datum/gas_mixture/giver) - return null - -/atom/proc/remove_air(amount) - return null - -/atom/proc/return_air() - if(loc) - return loc.return_air() - else - return null - -//return flags that should be added to the viewer's sight var. -//Otherwise return a negative number to indicate that the view should be cancelled. -/atom/proc/check_eye(user as mob) - if (istype(user, /mob/living/silicon/ai)) // WHYYYY - return 0 - return -1 - -//Return flags that may be added as part of a mobs sight -/atom/proc/additional_sight_flags() - return 0 - -/atom/proc/additional_see_invisible() - return 0 - -/atom/proc/on_reagent_change() - return - -/atom/proc/on_color_transfer_reagent_change() - return - -/atom/proc/Bumped(AM as mob|obj) - return - -// Convenience proc to see if a container is open for chemistry handling -// returns true if open -// false if closed -/atom/proc/is_open_container() - return atom_flags & ATOM_FLAG_OPEN_CONTAINER - - -/atom/proc/CheckExit() - return 1 - -// If you want to use this, the atom must have the PROXMOVE flag, and the moving -// atom must also have the PROXMOVE flag currently to help with lag. ~ ComicIronic -/atom/proc/HasProximity(atom/movable/AM as mob|obj) - return - -/atom/proc/emp_act(var/severity) - return - -/atom/proc/set_density(var/new_density) - if(density != new_density) - density = !!new_density - if (isturf(loc)) - var/turf/T = loc - if (density) - T.has_dense_atom = TRUE - else - T.has_dense_atom = null - -/atom/proc/bullet_act(obj/item/projectile/P, def_zone) - P.on_hit(src, 0, def_zone) - . = 0 - -/atom/proc/in_contents_of(container)//can take class or object instance as argument - if(ispath(container)) - if(istype(src.loc, container)) - return 1 - else if(src in container) - return 1 - return - -/* - * atom/proc/search_contents_for(path,list/filter_path=null) - * Recursevly searches all atom contens (including contents contents and so on). - * - * ARGS: path - search atom contents for atoms of this type - * list/filter_path - if set, contents of atoms not of types in this list are excluded from search. - * - * RETURNS: list of found atoms - */ - -/atom/proc/search_contents_for(path,list/filter_path=null) - var/list/found = list() - for(var/atom/A in src) - if(istype(A, path)) - found += A - if(filter_path) - var/pass = 0 - for(var/type in filter_path) - pass |= istype(A, type) - if(!pass) - continue - if(A.contents.len) - found += A.search_contents_for(path,filter_path) - return found - -// A type overriding /examine() should either return the result of ..() or return TRUE if not calling ..() -// Calls to ..() should generally not supply any arguments and instead rely on BYOND's automatic argument passing -// There is no need to check the return value of ..(), this is only done by the calling /examinate() proc to validate the call chain -/atom/proc/examine(mob/user, distance, infix = "", suffix = "") - //This reformat names to get a/an properly working on item descriptions when they are bloody - var/f_name = "\a [src][infix]." - if(blood_color && !istype(src, /obj/effect/decal)) - if(gender == PLURAL) - f_name = "some " - else - f_name = "a " - f_name += "stained [name][infix]!" - - to_chat(user, "[icon2html(src, user)] That's [f_name] [suffix]") - to_chat(user, desc) - if (health_max) - examine_damage_state(user) - return TRUE - -// called by mobs when e.g. having the atom as their machine, pulledby, loc (AKA mob being inside the atom) or buckled var set. -// see code/modules/mob/mob_movement.dm for more. -/atom/proc/relaymove() - return - -//called to set the atom's dir and used to add behaviour to dir-changes -/atom/proc/set_dir(new_dir) - var/old_dir = dir - if(new_dir == old_dir) - return FALSE - dir = new_dir - return TRUE - -/atom/proc/set_icon_state(var/new_icon_state) - if(has_extension(src, /datum/extension/base_icon_state)) - var/datum/extension/base_icon_state/bis = get_extension(src, /datum/extension/base_icon_state) - bis.base_icon_state = new_icon_state - update_icon() - else - icon_state = new_icon_state - -/atom/proc/update_icon() - on_update_icon(arglist(args)) - -/atom/proc/on_update_icon() - return - -/// Handler for the atom to be affected by explosions. `severity` will be one of the `EX_ACT_*` defines. -/atom/proc/ex_act(severity) - return - -/atom/proc/emag_act(var/remaining_charges, var/mob/user, var/emag_source) - return NO_EMAG_ACT - -/atom/proc/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume) - return - -/atom/proc/melt() - return - -/atom/proc/lava_act() - visible_message("\The [src] sizzles and melts away, consumed by the lava!") - playsound(src, 'sound/effects/flare.ogg', 100, 3) - qdel(src) - . = TRUE - -/atom/proc/hitby(atom/movable/AM, var/datum/thrownthing/TT)//already handled by throw impact - if(isliving(AM)) - var/mob/living/M = AM - M.apply_damage(TT.speed * 5, DAMAGE_BRUTE) - -//returns 1 if made bloody, returns 0 otherwise -/atom/proc/add_blood(mob/living/carbon/human/M as mob) - if(atom_flags & ATOM_FLAG_NO_BLOOD) - return 0 - - if(!blood_DNA || !istype(blood_DNA, /list)) //if our list of DNA doesn't exist yet (or isn't a list) initialise it. - blood_DNA = list() - - was_bloodied = 1 - blood_color = COLOR_BLOOD_HUMAN - if(istype(M)) - if (!istype(M.dna, /datum/dna)) - M.dna = new /datum/dna(null) - M.dna.real_name = M.real_name - M.check_dna() - blood_color = M.species.get_blood_colour(M) - . = 1 - return 1 - -/mob/living/proc/handle_additional_vomit_reagents(var/obj/effect/decal/cleanable/vomit/vomit) - vomit.reagents.add_reagent(/datum/reagent/acid/stomach, 5) - -/atom/proc/clean_blood() - if(!simulated) - return - fluorescent = 0 - germ_level = 0 - blood_color = null - gunshot_residue = null - if(istype(blood_DNA, /list)) - blood_DNA = null - return 1 - -/atom/proc/get_global_map_pos() - if (!islist(GLOB.global_map) || !length(GLOB.global_map)) - return - var/cur_x = null - var/cur_y = null - var/list/y_arr = null - 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 -// log_debug("X = [cur_x]; Y = [cur_y]") - - if(cur_x && cur_y) - return list("x"=cur_x,"y"=cur_y) - else - return 0 - -/atom/proc/checkpass(passflag) - return pass_flags&passflag - -/atom/proc/isinspace() - if(istype(get_turf(src), /turf/space)) - return 1 - else - return 0 - - -// Show a message to all mobs and objects in sight of this atom -// Use for objects performing visible actions -// message is output to anyone who can see, e.g. "The [src] does something!" -// blind_message (optional) is what blind people will hear e.g. "You hear something!" -/atom/proc/visible_message(message, blind_message, range = world.view, checkghosts = null, list/exclude_objs = null, list/exclude_mobs = null) - set waitfor = FALSE - var/turf/T = get_turf(src) - var/list/mobs = list() - var/list/objs = list() - get_mobs_and_objs_in_view_fast(T,range, mobs, objs, checkghosts) - - for(var/o in objs) - var/obj/O = o - if (exclude_objs?.len && (O in exclude_objs)) - exclude_objs -= O - continue - O.show_message(message, VISIBLE_MESSAGE, blind_message, AUDIBLE_MESSAGE) - - for(var/m in mobs) - var/mob/M = m - if (exclude_mobs?.len && (M in exclude_mobs)) - exclude_mobs -= M - continue - if(M.see_invisible >= invisibility) - M.show_message(message, VISIBLE_MESSAGE, blind_message, AUDIBLE_MESSAGE) - else if(blind_message) - M.show_message(blind_message, AUDIBLE_MESSAGE) - -// Show a message to all mobs and objects in earshot of this atom -// Use for objects performing audible actions -// message is the message output to anyone who can hear. -// deaf_message (optional) is what deaf people will see. -// hearing_distance (optional) is the range, how many tiles away the message can be heard. -/atom/proc/audible_message(message, deaf_message, hearing_distance = world.view, checkghosts = null, list/exclude_objs = null, list/exclude_mobs = null) - var/turf/T = get_turf(src) - var/list/mobs = list() - var/list/objs = list() - get_mobs_and_objs_in_view_fast(T, hearing_distance, mobs, objs, checkghosts) - - for(var/m in mobs) - var/mob/M = m - if (exclude_mobs?.len && (M in exclude_mobs)) - exclude_mobs -= M - continue - M.show_message(message,2,deaf_message,1) - - for(var/o in objs) - var/obj/O = o - if (exclude_objs?.len && (O in exclude_objs)) - exclude_objs -= O - continue - O.show_message(message,2,deaf_message,1) - -/atom/movable/proc/dropInto(var/atom/destination) - while(istype(destination)) - var/atom/drop_destination = destination.onDropInto(src) - if(!istype(drop_destination) || drop_destination == destination) - return forceMove(destination) - destination = drop_destination - return forceMove(null) - -/atom/proc/onDropInto(var/atom/movable/AM) - return // If onDropInto returns null, then dropInto will forceMove AM into us. - -/atom/movable/onDropInto(var/atom/movable/AM) - return loc // If onDropInto returns something, then dropInto will attempt to drop AM there. - -/atom/proc/InsertedContents() - return contents - -//all things climbable - -/atom/attack_hand(mob/user) - ..() - if(LAZYLEN(climbers) && !(user in climbers)) - user.visible_message("[user.name] shakes \the [src].", \ - "You shake \the [src].") - object_shaken() - -// Called when hitting the atom with a grab. -// Will skip attackby() and afterattack() if returning TRUE. -/atom/proc/grab_attack(var/obj/item/grab/G) - return FALSE - -/atom/proc/climb_on() - - set name = "Climb" - set desc = "Climbs onto an object." - set category = "Object" - set src in oview(1) - - do_climb(usr) - -/atom/proc/can_climb(var/mob/living/user, post_climb_check=FALSE, check_silicon=TRUE) - if (!(atom_flags & ATOM_FLAG_CLIMBABLE) || !can_touch(user, check_silicon) || (!post_climb_check && climbers && (user in climbers))) - return 0 - - if (!user.Adjacent(src)) - to_chat(user, "You can't climb there, the way is blocked.") - return 0 - - var/obj/occupied = turf_is_crowded(user) - //because Adjacent() has exceptions for windows, those must be handled here - if(!occupied && istype(src, /obj/structure/wall_frame)) - var/original_dir = get_dir(src, user.loc) - var/progress_dir = original_dir - for(var/atom/A in loc.contents) - if(A.atom_flags & ATOM_FLAG_CHECKS_BORDER) - var/obj/structure/window/W = A - if(istype(W)) - //progressively check if a window matches the X or Y component of the dir, if collision, set the dir bit off - if(W.is_fulltile() || (progress_dir &= ~W.dir) == 0) //if dir components are 0, fully blocked on diagonal - occupied = A - break - //if true, means one dir was blocked and bit set off, so check the unblocked - if(progress_dir != original_dir && progress_dir != 0) - var/turf/here = get_turf(src) - if(!here.Adjacent_free_dir(user, progress_dir)) - to_chat(user, SPAN_DANGER("You can't climb there, the way is blocked.")) - return FALSE - - if(occupied) - to_chat(user, "There's \a [occupied] in the way.") - return 0 - return 1 - -/atom/proc/can_touch(var/mob/user, check_silicon=TRUE) - if (!user) - return 0 - if(!Adjacent(user)) - return 0 - if (user.restrained() || user.buckled) - to_chat(user, "You need your hands and legs free for this.") - return 0 - if (user.incapacitated()) - return 0 - if (check_silicon && issilicon(user)) - to_chat(user, "You need hands for this.") - return 0 - return 1 - -/atom/proc/turf_is_crowded(var/atom/ignore) - var/turf/T = get_turf(src) - if(!istype(T)) - return 0 - for(var/atom/A in T.contents) - if(ignore && ignore == A) - continue - if(A.atom_flags & ATOM_FLAG_CLIMBABLE) - continue - if(A.density && !(A.atom_flags & ATOM_FLAG_CHECKS_BORDER)) //ON_BORDER structures are handled by the Adjacent() check. - return A - return 0 - -/atom/proc/do_climb(var/mob/living/user, check_silicon=TRUE) - if (!can_climb(user, check_silicon=check_silicon)) - return 0 - - add_fingerprint(user) - user.visible_message("\The [user] starts climbing onto \the [src]!") - LAZYDISTINCTADD(climbers,user) - - if(!do_after(user,(issmall(user) ? MOB_CLIMB_TIME_SMALL : MOB_CLIMB_TIME_MEDIUM) * climb_speed_mult, src, DO_DEFAULT | DO_USER_UNIQUE_ACT | DO_BAR_OVER_USER)) - LAZYREMOVE(climbers,user) - return 0 - - if(!can_climb(user, post_climb_check=1, check_silicon=check_silicon)) - LAZYREMOVE(climbers,user) - return 0 - - var/target_turf = get_turf(src) - - //climbing over border objects like railings - if((atom_flags & ATOM_FLAG_CHECKS_BORDER) && get_turf(user) == target_turf) - target_turf = get_step(src, dir) - - user.forceMove(target_turf) - - if (get_turf(user) == target_turf) - user.visible_message("\The [user] climbs onto \the [src]!") - LAZYREMOVE(climbers,user) - return 1 - -/atom/proc/object_shaken() - for(var/mob/living/M in climbers) - M.Weaken(1) - to_chat(M, "You topple as you are shaken off \the [src]!") - climbers.Cut(1,2) - - for(var/mob/living/M in get_turf(src)) - if(M.lying) return //No spamming this on people. - - M.Weaken(3) - to_chat(M, "You topple as \the [src] moves under you!") - - if(prob(25)) - - var/damage = rand(15,30) - var/mob/living/carbon/human/H = M - if(!istype(H)) - to_chat(H, "You land heavily!") - M.adjustBruteLoss(damage) - return - - var/obj/item/organ/external/affecting - var/list/limbs = BP_ALL_LIMBS //sanity check, can otherwise be shortened to affecting = pick(BP_ALL_LIMBS) - if(limbs.len) - affecting = H.get_organ(pick(limbs)) - - if(affecting) - to_chat(M, "You land heavily on your [affecting.name]!") - affecting.take_external_damage(damage, 0) - if(affecting.parent) - affecting.parent.add_autopsy_data("Misadventure", damage) - else - to_chat(H, "You land heavily!") - H.adjustBruteLoss(damage) - - H.UpdateDamageIcon() - H.updatehealth() - return - -/atom/MouseDrop_T(mob/target, mob/user) - var/mob/living/H = user - if(istype(H) && can_climb(H) && target == user) - do_climb(target) - else - return ..() - -/atom/proc/get_color() - return isnull(color) ? COLOR_WHITE : color - -/atom/proc/set_color(var/color) - src.color = color - -/atom/proc/get_cell() - return - -/atom/proc/slam_into(mob/living/L) - L.Weaken(2) - L.visible_message(SPAN_WARNING("\The [L] [pick("ran", "slammed")] into \the [src]!")) - playsound(L, "punch", 25, 1, FALSE) diff --git a/code/game/atoms_fluids.dm b/code/game/atoms_fluids.dm deleted file mode 100644 index 9a31e78d4aa9b..0000000000000 --- a/code/game/atoms_fluids.dm +++ /dev/null @@ -1,50 +0,0 @@ -/atom/proc/is_flooded(var/lying_mob, var/absolute) - return - -/atom/proc/water_act(var/depth) - clean_blood() - -/atom/proc/return_fluid() - return null - -/atom/proc/check_fluid_depth(var/min) - return 0 - -/atom/proc/get_fluid_depth() - return 0 - -/atom/proc/CanFluidPass(var/coming_from) - return TRUE - -/atom/movable/proc/is_fluid_pushable(var/amt) - return simulated && !anchored - -/atom/movable/is_flooded(var/lying_mob, var/absolute) - var/turf/T = get_turf(src) - return T.is_flooded(lying_mob) - -/atom/proc/submerged(depth) - if(isnull(depth)) - var/turf/T = get_turf(src) - if(!istype(T)) - return FALSE - depth = T.get_fluid_depth() - if(istype(loc, /mob)) - return depth >= FLUID_SHALLOW - if(istype(loc, /turf)) - return depth >= 3 - return depth >= FLUID_OVER_MOB_HEAD - -/turf/submerged(depth) - if(isnull(depth)) - depth = get_fluid_depth() - return depth >= FLUID_OVER_MOB_HEAD - -/atom/proc/fluid_update() - var/turf/T = get_turf(src) - if(istype(T)) - T.fluid_update() - -/atom/movable/update_nearby_tiles(var/need_rebuild) - UNLINT(. = ..(need_rebuild)) - fluid_update() \ No newline at end of file diff --git a/code/game/atoms_health.dm b/code/game/atoms_health.dm deleted file mode 100644 index 9310d62df34e9..0000000000000 --- a/code/game/atoms_health.dm +++ /dev/null @@ -1,360 +0,0 @@ -/// Current health for health processing. Use `get_current_health()`, `damage_health()`, or `restore_health()` for general health references. -/atom/var/health_current - -/// Maximum health for simple health processing. Use `get_max_health()` or `set_max_health()` to reference/modify. -/atom/var/health_max - -/// Boolean. Whether or not the atom is dead. Toggled by death state changes in standardized health and provided as a simple way to check for death without additional proc call overhead from `is_alive()`. -/atom/var/health_dead - -/** - * LAZY List of damage type resistance or weakness multipliers, decimal form. Only applied to health reduction. Use `set_damage_resistance()`, `remove_damage_resistance()`, and `get_damage_resistance()` to reference/modify. - * - * Index should be one of the `DAMAGE_` flags. - * Value should be a multiplier that is applied against damage. Values below 1 are a resistance, above 1 are a weakness. - * Value of `0` is considered immunity. - */ -/atom/var/list/health_resistances = DAMAGE_RESIST_PHYSICAL - -/// Minimum damage required to actually affect health in `can_damage_health()`. -/atom/var/health_min_damage = 0 - -/// Sound effect played when hit -/atom/var/damage_hitsound = 'sound/weapons/genhit.ogg' - -/** - * Retrieves the atom's current health, or `null` if not using health - */ -/atom/proc/get_current_health() - SHOULD_CALL_PARENT(TRUE) - if (!health_max) - return - return health_current - -/** - * Retrieves the atom's maximum health. - */ -/atom/proc/get_max_health() - SHOULD_CALL_PARENT(TRUE) - return health_max - -/** - * Whether or not the atom's health is damaged. - */ -/atom/proc/health_damaged(use_raw_values) - if (!health_max) - return - if (use_raw_values) - return health_current < health_max - return get_current_health() < get_max_health() - -/** - * Retrieves the atom's current damage, or `null` if not using health. - * If `use_raw_values` is `TRUE`, uses the raw var values instead of the `get_*` proc results. - */ -/atom/proc/get_damage_value(use_raw_values) - if (!health_max) - return - if (use_raw_values) - return health_max - health_current - else - return get_max_health() - get_current_health() - -/** - * Retrieves the atom's current damage as a percentage where `100%` is `100`. - * If `use_raw_values` is `TRUE`, uses the raw var values instead of the `get_*` proc results. - */ -/atom/proc/get_damage_percentage(use_raw_values) - if (!health_max) - return - var/max_health = use_raw_values ? health_max : get_max_health() - return Percent(get_damage_value(use_raw_values), max_health, 0) - -/** - * Checks if the atom's health can be restored. - * Should be called before `restore_health()` in most cases. - * Returns `null` if health is not in use. - * NOTE: Does not include a check for death state by default, to allow repairing/healing atoms back to life. - */ -/atom/proc/can_restore_health(damage, damage_type = null) - SHOULD_CALL_PARENT(TRUE) - if (!health_max) - return - if (!damage) - return FALSE - if (get_current_health() == get_max_health()) - return FALSE - return TRUE - -/** - * Checks if the atom's health can be damaged. - * Should be called before `damage_health()` in most cases. - * Returns `null` if health is not in use. - */ -/atom/proc/can_damage_health(damage, damage_type = null) - SHOULD_CALL_PARENT(TRUE) - if (!health_max) - return - if (health_dead) - return FALSE - if (!damage || damage < health_min_damage) - return FALSE - if (get_damage_resistance(damage_type) == 0) - return FALSE - return TRUE - -/mob/can_damage_health(damage, damage_type) - if (status_flags & GODMODE) - return FALSE - . = ..() - -/** - * Health modification for the health system. Applies `health_mod` directly to `simple_health` via addition and calls `handle_death_change` as needed. - * Has no pre-modification checks, you should be using `damage_health()` or `restore_health()` instead of this. - * `skip_death_state_change` will skip calling `handle_death_change()` when applicable. Used for when the originally calling proc needs handle it in a unique way. - * Returns `TRUE` if the death state changes, `null` if the atom is not using health, `FALSE` otherwise. - */ -/atom/proc/mod_health(health_mod, damage_type, skip_death_state_change = FALSE) - SHOULD_CALL_PARENT(TRUE) - if (!health_max) - return - health_mod = round(health_mod) - var/death_state = health_dead - health_current = round(clamp(health_current + health_mod, 0, get_max_health())) - post_health_change(health_mod, damage_type) - var/new_death_state = health_current > 0 ? FALSE : TRUE - if (death_state == new_death_state) - return FALSE - health_dead = new_death_state - if (!skip_death_state_change) - if (health_dead) - on_death() - else - on_revive() - return TRUE - -/** - * Sets `health_current` to the new value, clamped between `0` and `health_max`. - * Has no pre-modification checks. - * Returns `TRUE` if the death state changes, `null` if the atom is not using health, `FALSE` otherwise. - */ -/atom/proc/set_health(new_health, skip_death_state_change = FALSE) - SHOULD_CALL_PARENT(TRUE) - if (!health_max) - return - var/health_mod = new_health - health_current - return mod_health(health_mod, skip_death_state_change = skip_death_state_change) - -/** - * Restore's the atom's health by the given value. Returns `TRUE` if the restoration resulted in a death state change. - */ -/atom/proc/restore_health(damage, damage_type = null, skip_death_state_change = FALSE) - SHOULD_CALL_PARENT(TRUE) - if (!health_max) - return - if (!can_restore_health(damage, damage_type)) - return FALSE - return mod_health(damage, damage_type, skip_death_state_change) - -/** - * Damage's the atom's health by the given value. Returns `TRUE` if the damage resulted in a death state change. - * Resistance and weakness modifiers are applied here. - * - `damage_type` should be one of the `DAMAGE_*` damage types, or `null`. Defining a damage type is preferable over not. - * - `damage_flags` is a bitfield of `DAMAGE_FLAG_*` values. - * - `severity` should be a passthrough of `severity` from `ex_act()` and `emp_act()` for `DAMAGE_EXPLODE` and `DAMAGE_EMP` types respectively. - */ -/atom/proc/damage_health(damage, damage_type, damage_flags = EMPTY_BITFIELD, severity) - SHOULD_CALL_PARENT(TRUE) - if (!health_max) - return - if (!can_damage_health(damage, damage_type)) - return FALSE - - // Apply resistance/weakness modifiers - damage *= get_damage_resistance(damage_type) - - var/skip_death_state_change = HAS_FLAGS(damage_flags, DAMAGE_FLAG_SKIP_DEATH_STATE_CHANGE) - - return mod_health(-damage, damage_type, skip_death_state_change) - -/** - * Proc called after any health changes made by the system - */ -/atom/proc/post_health_change(health_mod, damage_type = null) - return - -/** - * Immediately sets health to `0` then updates `death_state`, bypassing all other checks and processes. - */ -/atom/proc/kill_health() - SHOULD_CALL_PARENT(TRUE) - return set_health(0) - -/** - * Returns health to full, resetting the death state as well. - */ -/atom/proc/revive_health() - SHOULD_CALL_PARENT(TRUE) - return set_health(health_max) - -/// Proc called when the atom transitions from alive to dead. -/atom/proc/on_death() - return - -/// Proc called when the atom transitions from dead to alive. -/atom/proc/on_revive() - return - -/** - * Sets the atoms maximum health to the new value. - * If `set_current_health` is `TRUE`, also sets the current health to the new value. - */ -/atom/proc/set_max_health(new_max_health, set_current_health = TRUE) - SHOULD_CALL_PARENT(TRUE) - health_max = round(new_max_health) - if (set_current_health) - set_health(health_max) - else - set_health(min(health_current, health_max)) - -/** - * Sets the atom's resistance/weakness to the given damage type. - * Value should be a multiplier that is applied against damage. Values below 1 are a resistance, above 1 are a weakness. - * Value of `0` is considered immunity. - */ -/atom/proc/set_damage_resistance(damage_type, resistance_value) - SHOULD_CALL_PARENT(TRUE) - if (resistance_value == 1) - remove_damage_resistance(damage_type) - return - LAZYSET(health_resistances, damage_type, resistance_value) - -/** - * Removes the atom's resistance/weakness to the given damage type. - */ -/atom/proc/remove_damage_resistance(damage_type) - SHOULD_CALL_PARENT(TRUE) - LAZYREMOVE(health_resistances, damage_type) - -/** - * Fetches the atom's current resistance value for the given damage type. - */ -/atom/proc/get_damage_resistance(damage_type) - SHOULD_CALL_PARENT(TRUE) - if (!damage_type) - return 1 - var/resistance_value = LAZYACCESS(health_resistances, damage_type) - return isnull(resistance_value) ? 1 : resistance_value - -/** - * Handles sending damage state to users on `examine()`. - * Overrideable to allow for different messages, or restricting when the messages can or cannot appear. - */ -/atom/proc/examine_damage_state(mob/user) - if (health_dead) - to_chat(user, SPAN_DANGER("It looks broken.")) - return - - var/damage_percentage = get_damage_percentage() - switch (damage_percentage) - if (0) - to_chat(user, SPAN_NOTICE("It looks fully intact.")) - if (1 to 32) - to_chat(user, SPAN_WARNING("It looks slightly damaged.")) - if (33 to 65) - to_chat(user, SPAN_WARNING("It looks moderately damaged.")) - else - to_chat(user, SPAN_DANGER("It looks severely damaged.")) - -/mob/examine_damage_state(mob/user) - if (health_dead) - to_chat(user, SPAN_DANGER("They look severely hurt and is not moving or responding to anything around them.")) - return - - var/damage_percentage = get_damage_percentage() - switch (damage_percentage) - if (0) - to_chat(user, SPAN_NOTICE("They appear unhurt.")) - if (1 to 32) - to_chat(user, SPAN_WARNING("They look slightly hurt.")) - if (33 to 65) - to_chat(user, SPAN_WARNING("They look moderately hurt.")) - else - to_chat(user, SPAN_DANGER("They look severely hurt.")) - -/** - * Copies the state of health from one atom to another. - */ -/proc/copy_health(atom/source_atom, atom/target_atom) - if (!source_atom || QDELETED(target_atom) || !source_atom.health_max || !target_atom.health_max) - return - target_atom.health_current = source_atom.health_current - target_atom.health_max = source_atom.health_max - target_atom.health_resistances = source_atom.health_resistances - target_atom.health_min_damage = source_atom.health_min_damage - target_atom.health_dead = source_atom.health_dead - - -// Generalized *_act() handlers -/atom/emp_act(severity) - ..() - // No hitsound here - Doesn't make sense for EMPs. - // Generalized - 75-125 damage at max, 38-63 at medium, 25-42 at minimum severities. - damage_health(rand(75, 125) / severity, DAMAGE_EMP, severity = severity) - - -/atom/ex_act(severity, turf_breaker) - ..() - // No hitsound here to avoid noise spam. - // Damage is based on severity and maximum health, with DEVASTATING being guaranteed death without any resistances. - var/damage_flags = turf_breaker ? DAMAGE_FLAG_TURF_BREAKER : EMPTY_BITFIELD - var/damage = 0 - switch (severity) - if (EX_ACT_DEVASTATING) - damage = health_max - if (EX_ACT_HEAVY) - damage = round(health_max / rand(2, 3)) - if (EX_ACT_LIGHT) - damage = round(health_max / rand(10, 15)) - if (damage && can_damage_health(damage, DAMAGE_EXPLODE)) - damage_health(damage, DAMAGE_EXPLODE, damage_flags, severity) - - -/atom/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume) - ..() - // No hitsound here to avoid noise spam. - // 1 point of damage for every 100 kelvin above 300 (~27 C). - damage_health(round(max(exposed_temperature - 300, 0) / 100), DAMAGE_FIRE) - - -/atom/bullet_act(obj/item/projectile/P, def_zone) - . = ..() - if (get_max_health()) - var/damage = P.damage - if (istype(src, /obj/structure) || istype(src, /turf/simulated/wall)) // TODO Better conditions for non-structures that want to use structure damage - damage = P.get_structure_damage() - if (!can_damage_health(damage, P.damage_type)) - return - playsound(damage_hitsound, src, 75) - damage_health(damage, P.damage_type) - return 0 - - -/atom/attackby(obj/item/W, mob/user, click_params) - . = ..() - if (user.a_intent == I_HURT && get_max_health() && !(W.item_flags & ITEM_FLAG_NO_BLUDGEON)) - user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN) - user.do_attack_animation(src) - if (!can_damage_health(W.force, W.damtype)) - playsound(damage_hitsound, src, 50) - user.visible_message( - SPAN_WARNING("\The [user] hits \the [src] with \a [W], but it bounces off!"), - SPAN_WARNING("You hit \the [src] with \the [W], but it bounces off!") - ) - return - playsound(damage_hitsound, src, 75) - user.visible_message( - SPAN_DANGER("\The [user] hits \the [src] with \a [W]!"), - SPAN_DANGER("You hit \the [src] with \the [W]!") - ) - damage_health(W.force, W.damtype) diff --git a/code/game/atoms_movable.dm b/code/game/atoms_movable.dm deleted file mode 100644 index 46ce2dcfc69ec..0000000000000 --- a/code/game/atoms_movable.dm +++ /dev/null @@ -1,241 +0,0 @@ -/atom/movable - layer = OBJ_LAYER - - glide_size = 6 - - var/waterproof = TRUE - var/movable_flags - - var/last_move = null - var/anchored = FALSE - // var/elevation = 2 - not used anywhere - var/move_speed = 10 - var/l_move_time = 1 - var/m_flag = 1 - var/datum/thrownthing/throwing - var/throw_speed = 2 - var/throw_range = 7 - var/moved_recently = 0 - var/mob/pulledby = null - var/item_state = null // Used to specify the item state for the on-mob overlays. - var/does_spin = TRUE // Does the atom spin when thrown (of course it does :P) - - -/atom/movable/Initialize() - if (!isnull(config.glide_size)) - glide_size = config.glide_size - . = ..() - -/atom/movable/Destroy() - if(!(atom_flags & ATOM_FLAG_INITIALIZED)) - crash_with("Was deleted before initalization") - walk(src, 0) - for(var/A in src) - qdel(A) - forceMove(null) - if (pulledby) - if (pulledby.pulling == src) - pulledby.pulling = null - pulledby = null - if(LAZYLEN(movement_handlers) && !ispath(movement_handlers[1])) - QDEL_NULL_LIST(movement_handlers) - if (bound_overlay) - QDEL_NULL(bound_overlay) - if(virtual_mob && !ispath(virtual_mob)) - qdel(virtual_mob) - virtual_mob = null - return ..() - -/atom/movable/Bump(var/atom/A, yes) - if(!QDELETED(throwing)) - throwing.hit_atom(A) - - if (A && yes) - A.last_bumped = world.time - INVOKE_ASYNC(A, /atom/proc/Bumped, src) // Avoids bad actors sleeping or unexpected side effects, as the legacy behavior was to spawn here - ..() - -/atom/movable/proc/forceMove(atom/destination) - if((gc_destroyed && gc_destroyed != GC_CURRENTLY_BEING_QDELETED) && !isnull(destination)) - CRASH("Attempted to forceMove a QDELETED [src] out of nullspace!!!") - if(loc == destination) - return 0 - var/is_origin_turf = isturf(loc) - var/is_destination_turf = isturf(destination) - // It is a new area if: - // Both the origin and destination are turfs with different areas. - // When either origin or destination is a turf and the other is not. - var/is_new_area = (is_origin_turf ^ is_destination_turf) || (is_origin_turf && is_destination_turf && loc.loc != destination.loc) - - var/atom/origin = loc - loc = destination - - if(origin) - origin.Exited(src, destination) - if(is_origin_turf) - for(var/atom/movable/AM in origin) - AM.Uncrossed(src) - if(is_new_area && is_origin_turf) - origin.loc.Exited(src, destination) - - if(destination) - destination.Entered(src, origin) - if(is_destination_turf) // If we're entering a turf, cross all movable atoms - for(var/atom/movable/AM in loc) - if(AM != src) - AM.Crossed(src) - if(is_new_area && is_destination_turf) - destination.loc.Entered(src, origin) - return 1 - -/atom/movable/forceMove(atom/dest) - var/old_loc = loc - . = ..() - if (.) - // observ - if(!loc) - GLOB.moved_event.raise_event(src, old_loc, null) - - // freelook - if(opacity) - updateVisibility(src) - - // lighting - if (light_sources) // Yes, I know you can for-null safely, but this is slightly faster. Hell knows why. - for (var/datum/light_source/L in light_sources) - L.source_atom.update_light() - -/atom/movable/Move(...) - var/old_loc = loc - . = ..() - if (.) - if(!loc) - GLOB.moved_event.raise_event(src, old_loc, null) - - // freelook - if(opacity) - updateVisibility(src) - - // lighting - if (light_sources) // Yes, I know you can for-null safely, this is slightly faster. Hell knows why. - for (var/datum/light_source/L in light_sources) - L.source_atom.update_light() - -//called when src is thrown into hit_atom -/atom/movable/proc/throw_impact(atom/hit_atom, var/datum/thrownthing/TT) - if(istype(hit_atom,/mob/living)) - var/mob/living/M = hit_atom - M.hitby(src,TT) - - else if(isobj(hit_atom)) - var/obj/O = hit_atom - if(!O.anchored) - step(O, src.last_move) - O.hitby(src,TT) - - else if(isturf(hit_atom)) - var/turf/T = hit_atom - T.hitby(src,TT) - -/atom/movable/proc/throw_at(atom/target, range, speed, mob/thrower, spin = TRUE, datum/callback/callback) //If this returns FALSE then callback will not be called. - . = TRUE - if (!target || speed <= 0 || QDELETED(src) || (target.z != src.z)) - return FALSE - - if (pulledby) - pulledby.stop_pulling() - - var/datum/thrownthing/TT = new(src, target, range, speed, thrower, callback) - throwing = TT - - pixel_z = 0 - if(spin && does_spin) - SpinAnimation(4,1) - - SSthrowing.processing[src] = TT - if (SSthrowing.state == SS_PAUSED && length(SSthrowing.currentrun)) - SSthrowing.currentrun[src] = TT - -//Overlays -/atom/movable/overlay - var/atom/master = null - var/follow_proc = /atom/movable/proc/move_to_loc_or_null - anchored = TRUE - simulated = FALSE - -/atom/movable/overlay/Initialize() - if(!loc) - crash_with("[type] created in nullspace.") - return INITIALIZE_HINT_QDEL - master = loc - SetName(master.name) - set_dir(master.dir) - - if(istype(master, /atom/movable)) - GLOB.moved_event.register(master, src, follow_proc) - SetInitLoc() - - GLOB.destroyed_event.register(master, src, /datum/proc/qdel_self) - GLOB.dir_set_event.register(master, src, /atom/proc/recursive_dir_set) - - . = ..() - -/atom/movable/overlay/proc/SetInitLoc() - forceMove(master.loc) - -/atom/movable/overlay/Destroy() - if(istype(master, /atom/movable)) - GLOB.moved_event.unregister(master, src) - GLOB.destroyed_event.unregister(master, src) - GLOB.dir_set_event.unregister(master, src) - master = null - . = ..() - -/atom/movable/overlay/attackby(obj/item/I, mob/user) - if (master) - return master.attackby(I, user) - -/atom/movable/overlay/attack_hand(mob/user) - if (master) - return master.attack_hand(user) - -/atom/movable/proc/touch_map_edge() - if(!simulated) - return - - if(!z || (z in GLOB.using_map.sealed_levels)) - return - - if(!GLOB.universe.OnTouchMapEdge(src)) - return - - if(GLOB.using_map.use_overmap) - overmap_spacetravel(get_turf(src), src) - return - - var/new_x - var/new_y - var/new_z = GLOB.using_map.get_transit_zlevel(z) - if(new_z) - if(x <= TRANSITIONEDGE) - new_x = world.maxx - TRANSITIONEDGE - 2 - new_y = rand(TRANSITIONEDGE + 2, world.maxy - TRANSITIONEDGE - 2) - - else if (x >= (world.maxx - TRANSITIONEDGE + 1)) - new_x = TRANSITIONEDGE + 1 - new_y = rand(TRANSITIONEDGE + 2, world.maxy - TRANSITIONEDGE - 2) - - else if (y <= TRANSITIONEDGE) - new_y = world.maxy - TRANSITIONEDGE -2 - new_x = rand(TRANSITIONEDGE + 2, world.maxx - TRANSITIONEDGE - 2) - - else if (y >= (world.maxy - TRANSITIONEDGE + 1)) - new_y = TRANSITIONEDGE + 1 - new_x = rand(TRANSITIONEDGE + 2, world.maxx - TRANSITIONEDGE - 2) - - var/turf/T = locate(new_x, new_y, new_z) - if(T) - forceMove(T) - -/atom/movable/proc/get_bullet_impact_effect_type() - return BULLET_IMPACT_NONE diff --git a/code/game/atoms_temperature.dm b/code/game/atoms_temperature.dm deleted file mode 100644 index bef8be1086475..0000000000000 --- a/code/game/atoms_temperature.dm +++ /dev/null @@ -1,59 +0,0 @@ -#define MIN_TEMPERATURE_COEFFICIENT 1 -#define MAX_TEMPERATURE_COEFFICIENT 10 - -/atom/var/temperature = T20C -/atom/var/temperature_coefficient = MAX_TEMPERATURE_COEFFICIENT - -/atom/movable/Entered(var/atom/movable/atom, var/atom/old_loc) - . = ..() - QUEUE_TEMPERATURE_ATOMS(atom) - -/obj/temperature_coefficient = null - -/mob/temperature_coefficient = null - -/turf/temperature_coefficient = MIN_TEMPERATURE_COEFFICIENT - -/obj/Initialize() - . = ..() - temperature_coefficient = isnull(temperature_coefficient) ? clamp(MAX_TEMPERATURE_COEFFICIENT - w_class, MIN_TEMPERATURE_COEFFICIENT, MAX_TEMPERATURE_COEFFICIENT) : temperature_coefficient - -/obj/proc/HandleObjectHeating(var/obj/item/heated_by, var/mob/user, var/adjust_temp) - if(ATOM_IS_TEMPERATURE_SENSITIVE(src)) - visible_message(SPAN_NOTICE("\The [user] carefully heats \the [src] with \the [heated_by].")) - var/diff_temp = (adjust_temp - temperature) - if(diff_temp >= 0) - var/altered_temp = max(temperature + (ATOM_TEMPERATURE_EQUILIBRIUM_CONSTANT * temperature_coefficient * diff_temp), 0) - ADJUST_ATOM_TEMPERATURE(src, min(adjust_temp, altered_temp)) - -/mob/Initialize() - . = ..() - temperature_coefficient = isnull(temperature_coefficient) ? clamp(MAX_TEMPERATURE_COEFFICIENT - Floor(mob_size/4), MIN_TEMPERATURE_COEFFICIENT, MAX_TEMPERATURE_COEFFICIENT) : temperature_coefficient - -/atom/proc/ProcessAtomTemperature() - - // Get our location temperature if possible. - // Nullspace is room temperature, clearly. - var/adjust_temp - if(loc) - if(!istype(loc, /turf/simulated)) - adjust_temp = loc.temperature - else - var/turf/simulated/T = loc - if(T.zone && T.zone.air) - adjust_temp = T.zone.air.temperature - else - adjust_temp = T20C - else - adjust_temp = T20C - - var/diff_temp = adjust_temp - temperature - if(abs(diff_temp) >= ATOM_TEMPERATURE_EQUILIBRIUM_THRESHOLD) - var/altered_temp = max(temperature + (ATOM_TEMPERATURE_EQUILIBRIUM_CONSTANT * temperature_coefficient * diff_temp), 0) - ADJUST_ATOM_TEMPERATURE(src, (diff_temp > 0) ? min(adjust_temp, altered_temp) : max(adjust_temp, altered_temp)) - else - temperature = adjust_temp - return PROCESS_KILL - -#undef MIN_TEMPERATURE_COEFFICIENT -#undef MAX_TEMPERATURE_COEFFICIENT diff --git a/code/game/base_turf.dm b/code/game/base_turf.dm deleted file mode 100644 index 9774fd1b958cf..0000000000000 --- a/code/game/base_turf.dm +++ /dev/null @@ -1,34 +0,0 @@ -// Returns the lowest turf available on a given Z-level - -/proc/get_base_turf(var/z_num) - var/z = num2text(z_num) - if(!GLOB.using_map.base_turf_by_z[z]) - GLOB.using_map.base_turf_by_z[z] = world.turf - return GLOB.using_map.base_turf_by_z[z] - -/// Fetches the area's `base_turf`, if defined, or the z level's `base_turf` as a default. -/proc/get_base_turf_by_area(turf/T, check_handling = FALSE) - var/area/A = get_area(T) - if(check_handling && A?.base_turf_special_handling) - return get_base_turf(get_z(T)) - if (A?.base_turf) - return A.base_turf - return get_base_turf(get_z(T)) - -/client/proc/set_base_turf() - set category = "Debug" - set name = "Set Base Turf" - set desc = "Set the base turf for a z-level." - - if(!check_rights(R_DEBUG)) return - - var/choice = input("Which Z-level do you wish to set the base turf for?") as num|null - if(!choice) - return - - var/new_base_path = input("Please select a turf path (cancel to reset to /turf/space).") as null|anything in typesof(/turf) - if(!new_base_path) - new_base_path = /turf/space - GLOB.using_map.base_turf_by_z["[choice]"] = new_base_path - message_admins("[key_name_admin(usr)] has set the base turf for z-level [choice] to [get_base_turf(choice)].") - log_admin("[key_name(usr)] has set the base turf for z-level [choice] to [get_base_turf(choice)].") diff --git a/code/game/client_macros.dm b/code/game/client_macros.dm deleted file mode 100644 index 13478caae3225..0000000000000 --- a/code/game/client_macros.dm +++ /dev/null @@ -1,32 +0,0 @@ -/client - control_freak = CONTROL_FREAK_ALL | CONTROL_FREAK_MACROS | CONTROL_FREAK_SKIN - -GLOBAL_LIST_EMPTY(registered_macros_by_ckey) - -// Disables click and double-click macros, as per http://www.byond.com/forum/?post=2219001 -/mob/verb/DisableClick(argu = null as anything, sec = "" as text,number1 = 0 as num, number2 = 0 as num) - set name = ".click" - set category = null - log_macro(ckey, ".click") - -/mob/verb/DisableDblClick(argu = null as anything, sec = "" as text, number1 = 0 as num, number2 = 0 as num) - set name = ".dblclick" - set category = null - log_macro(ckey, ".dblclick") - -/proc/log_macro(ckey, macro) - to_chat(usr, "The [macro] macro is disabled due to potential exploits.") - if (is_macro_use_registered(ckey, macro)) - return - register_macro_use(ckey, macro) - log_and_message_admins("attempted to use the disabled [macro] macro.") - -/proc/is_macro_use_registered(ckey, macro) - return macro in GLOB.registered_macros_by_ckey[ckey] - -/proc/register_macro_use(ckey, macro) - var/list/registered_macros = GLOB.registered_macros_by_ckey[ckey] - if (!registered_macros) - registered_macros = list() - GLOB.registered_macros_by_ckey[ckey] = registered_macros - registered_macros |= macro diff --git a/code/game/dna/dna2.dm b/code/game/dna/dna2.dm deleted file mode 100644 index f890edbb0577b..0000000000000 --- a/code/game/dna/dna2.dm +++ /dev/null @@ -1,384 +0,0 @@ -/** -* DNA 2: The Spaghetti Strikes Back -* -* @author N3X15 -*/ - -// What each index means: -#define DNA_OFF_LOWERBOUND 0 -#define DNA_OFF_UPPERBOUND 1 -#define DNA_ON_LOWERBOUND 2 -#define DNA_ON_UPPERBOUND 3 - -// Define block bounds (off-low,off-high,on-low,on-high) -// Used in setupgame.dm -#define DNA_DEFAULT_BOUNDS list(1,2049,2050,4095) -#define DNA_HARDER_BOUNDS list(1,3049,3050,4095) -#define DNA_HARD_BOUNDS list(1,3490,3500,4095) - -// UI Indices (can change to mutblock style, if desired) -#define DNA_UI_HAIR_R 1 -#define DNA_UI_HAIR_G 2 -#define DNA_UI_HAIR_B 3 -#define DNA_UI_BEARD_R 4 -#define DNA_UI_BEARD_G 5 -#define DNA_UI_BEARD_B 6 -#define DNA_UI_SKIN_TONE 7 -#define DNA_UI_SKIN_R 8 -#define DNA_UI_SKIN_G 9 -#define DNA_UI_SKIN_B 10 -#define DNA_UI_EYES_R 11 -#define DNA_UI_EYES_G 12 -#define DNA_UI_EYES_B 13 -#define DNA_UI_GENDER 14 -#define DNA_UI_BEARD_STYLE 15 -#define DNA_UI_HAIR_STYLE 16 -#define DNA_UI_LENGTH 16 // Update this when you add something, or you WILL break shit. - -#define DNA_SE_LENGTH 27 -// For later: -//#define DNA_SE_LENGTH 50 // Was STRUCDNASIZE, size 27. 15 new blocks added = 42, plus room to grow. - - -// Defines which values mean "on" or "off". -// This is to make some of the more OP superpowers a larger PITA to activate, -// and to tell our new DNA datum which values to set in order to turn something -// on or off. -var/global/list/dna_activity_bounds[DNA_SE_LENGTH] - -// Used to determine what each block means -var/global/list/assigned_blocks[DNA_SE_LENGTH] - -var/global/list/datum/dna/gene/dna_genes[0] - -///////////////// -// GENE DEFINES -///////////////// -// Skip checking if it's already active. -// Used for genes that check for value rather than a binary on/off. -#define GENE_ALWAYS_ACTIVATE 1 - -/datum/dna - // READ-ONLY, GETS OVERWRITTEN - // DO NOT FUCK WITH THESE OR BYOND WILL EAT YOUR FACE - var/uni_identity="" // Encoded UI - var/struc_enzymes="" // Encoded SE - var/unique_enzymes="" // MD5 of player name - - // Internal dirtiness checks - var/dirtyUI=0 - var/dirtySE=0 - - // Okay to read, but you're an idiot if you do. - // BLOCK = VALUE - var/list/SE[DNA_SE_LENGTH] - var/list/UI[DNA_UI_LENGTH] - - // From old dna. - var/b_type = "A+" // Should probably change to an integer => string map but I'm lazy. - var/real_name // Stores the real name of the person who originally got this dna datum. Used primarily for changelings, - - // New stuff - var/species = SPECIES_HUMAN - var/base_skin = "" - var/list/body_markings = list() - -// Make a copy of this strand. -// USE THIS WHEN COPYING STUFF OR YOU'LL GET CORRUPTION! -/datum/dna/proc/Clone() - var/datum/dna/new_dna = new() - new_dna.unique_enzymes=unique_enzymes - new_dna.b_type=b_type - new_dna.real_name=real_name - new_dna.species=species - new_dna.body_markings=body_markings.Copy() - new_dna.base_skin = base_skin - for(var/b=1;b<=DNA_SE_LENGTH;b++) - new_dna.SE[b]=SE[b] - if(b<=DNA_UI_LENGTH) - new_dna.UI[b]=UI[b] - new_dna.UpdateUI() - new_dna.UpdateSE() - return new_dna -/////////////////////////////////////// -// UNIQUE IDENTITY -/////////////////////////////////////// - -// Create random UI. -/datum/dna/proc/ResetUI(var/defer=0) - for(var/i=1,i<=DNA_UI_LENGTH,i++) - switch(i) - if(DNA_UI_SKIN_TONE) - SetUIValueRange(DNA_UI_SKIN_TONE,rand(1,220),220,1) // Otherwise, it gets fucked - else - UI[i]=rand(0,4095) - if(!defer) - UpdateUI() - -/datum/dna/proc/ResetUIFrom(var/mob/living/carbon/human/character) - // INITIALIZE! - ResetUI(1) - // Hair - // FIXME: Species-specific defaults pls - if(!character.head_hair_style) - character.head_hair_style = "Bald" - var/hair = GLOB.hair_styles_list.Find(character.head_hair_style) - - // Facial Hair - if(!character.facial_hair_style) - character.facial_hair_style = "Shaved" - var/beard = GLOB.facial_hair_styles_list.Find(character.facial_hair_style) - - var/list/head_color = rgb2num(character.head_hair_color) - - SetUIValueRange(DNA_UI_HAIR_R, head_color[1], 255, 1) - SetUIValueRange(DNA_UI_HAIR_G, head_color[2], 255, 1) - SetUIValueRange(DNA_UI_HAIR_B, head_color[3], 255, 1) - - var/list/face_color = rgb2num(character.facial_hair_color) - - SetUIValueRange(DNA_UI_BEARD_R, face_color[1], 255, 1) - SetUIValueRange(DNA_UI_BEARD_G, face_color[2], 255, 1) - SetUIValueRange(DNA_UI_BEARD_B, face_color[3], 255, 1) - - var/list/eye_color = rgb2num(character.eye_color) - - SetUIValueRange(DNA_UI_EYES_R, eye_color[1], 255, 1) - SetUIValueRange(DNA_UI_EYES_G, eye_color[2], 255, 1) - SetUIValueRange(DNA_UI_EYES_B, eye_color[3], 255, 1) - - var/list/skin_color = rgb2num(character.skin_color) - SetUIValueRange(DNA_UI_SKIN_R, skin_color[1], 255, 1) - SetUIValueRange(DNA_UI_SKIN_G, skin_color[2], 255, 1) - SetUIValueRange(DNA_UI_SKIN_B, skin_color[3], 255, 1) - - SetUIValueRange(DNA_UI_SKIN_TONE, 35-character.skin_tone, 220, 1) // Value can be negative. - - SetUIState(DNA_UI_GENDER, character.gender!=MALE, 1) - - SetUIValueRange(DNA_UI_HAIR_STYLE, hair, GLOB.hair_styles_list.len, 1) - SetUIValueRange(DNA_UI_BEARD_STYLE, beard, GLOB.facial_hair_styles_list.len,1) - - body_markings.Cut() - base_skin = character.base_skin - for(var/obj/item/organ/external/E in character.organs) - E.base_skin = base_skin - if(E.markings.len) - body_markings[E.organ_tag] = E.markings.Copy() - - UpdateUI() - -// Set a DNA UI block's raw value. -/datum/dna/proc/SetUIValue(var/block,var/value,var/defer=0) - if (block<=0) return - ASSERT(value>0) - ASSERT(value<=4095) - UI[block]=value - dirtyUI=1 - if(!defer) - UpdateUI() - -// Get a DNA UI block's raw value. -/datum/dna/proc/GetUIValue(var/block) - if (block<=0) return 0 - return UI[block] - -// Set a DNA UI block's value, given a value and a max possible value. -// Used in hair and facial styles (value being the index and maxvalue being the len of the hairstyle list) -/datum/dna/proc/SetUIValueRange(var/block,var/value,var/maxvalue,var/defer=0) - if (block<=0) return - if (value==0) value = 1 // FIXME: hair/beard/eye RGB values if they are 0 are not set, this is a work around we'll encode it in the DNA to be 1 instead. - ASSERT(maxvalue<=4095) - var/range = (4095 / maxvalue) - if(value) - SetUIValue(block,round(value * range),defer) - -// Getter version of above. -/datum/dna/proc/GetUIValueRange(var/block,var/maxvalue) - if (block<=0) return 0 - var/value = GetUIValue(block) - return round(1 +(value / 4096)*maxvalue) - -// Is the UI gene "on" or "off"? -// For UI, this is simply a check of if the value is > 2050. -/datum/dna/proc/GetUIState(var/block) - if (block<=0) return - return UI[block] > 2050 - - -// Set UI gene "on" (1) or "off" (0) -/datum/dna/proc/SetUIState(var/block,var/on,var/defer=0) - if (block<=0) return - var/val - if(on) - val=rand(2050,4095) - else - val=rand(1,2049) - SetUIValue(block,val,defer) - -// Get a hex-encoded UI block. -/datum/dna/proc/GetUIBlock(var/block) - return EncodeDNABlock(GetUIValue(block)) - -// Do not use this unless you absolutely have to. -// Set a block from a hex string. This is inefficient. If you can, use SetUIValue(). -// Used in DNA modifiers. -/datum/dna/proc/SetUIBlock(var/block,var/value,var/defer=0) - if (block<=0) return - return SetUIValue(block,hex2num(value),defer) - -// Get a sub-block from a block. -/datum/dna/proc/GetUISubBlock(var/block,var/subBlock) - return copytext_char(GetUIBlock(block),subBlock,subBlock+1) - -// Do not use this unless you absolutely have to. -// Set a block from a hex string. This is inefficient. If you can, use SetUIValue(). -// Used in DNA modifiers. -/datum/dna/proc/SetUISubBlock(var/block,var/subBlock, var/newSubBlock, var/defer=0) - if (block<=0) return - var/oldBlock=GetUIBlock(block) - var/newBlock="" - for(var/i=1, i<=length(oldBlock), i++) - if(i==subBlock) - newBlock+=newSubBlock - else - newBlock+=copytext_char(oldBlock,i,i+1) - SetUIBlock(block,newBlock,defer) - -/////////////////////////////////////// -// STRUCTURAL ENZYMES -/////////////////////////////////////// - -// "Zeroes out" all of the blocks. -/datum/dna/proc/ResetSE() - for(var/i = 1, i <= DNA_SE_LENGTH, i++) - SetSEValue(i,rand(1,1024),1) - UpdateSE() - -// Set a DNA SE block's raw value. -/datum/dna/proc/SetSEValue(var/block,var/value,var/defer=0) - if (block<=0) return - ASSERT(value>=0) - ASSERT(value<=4095) - SE[block]=value - dirtySE=1 - if(!defer) - UpdateSE() - -// Get a DNA SE block's raw value. -/datum/dna/proc/GetSEValue(var/block) - if (block<=0) return 0 - return SE[block] - -// Set a DNA SE block's value, given a value and a max possible value. -// Might be used for species? -/datum/dna/proc/SetSEValueRange(var/block,var/value,var/maxvalue) - if (block<=0) return - ASSERT(maxvalue<=4095) - var/range = round(4095 / maxvalue) - if(value) - SetSEValue(block, value * range - rand(1,range-1)) - -// Getter version of above. -/datum/dna/proc/GetSEValueRange(var/block,var/maxvalue) - if (block<=0) return 0 - var/value = GetSEValue(block) - return round(1 +(value / 4096)*maxvalue) - -// Is the block "on" (1) or "off" (0)? (Un-assigned genes are always off.) -/datum/dna/proc/GetSEState(var/block) - if (block<=0) return 0 - var/list/BOUNDS=GetDNABounds(block) - var/value=GetSEValue(block) - return (value > BOUNDS[DNA_ON_LOWERBOUND]) - -// Set a block "on" or "off". -/datum/dna/proc/SetSEState(var/block,var/on,var/defer=0) - if (block<=0) return - var/list/BOUNDS=GetDNABounds(block) - var/val - if(on) - val=rand(BOUNDS[DNA_ON_LOWERBOUND],BOUNDS[DNA_ON_UPPERBOUND]) - else - val=rand(1,BOUNDS[DNA_OFF_UPPERBOUND]) - SetSEValue(block,val,defer) - -// Get hex-encoded SE block. -/datum/dna/proc/GetSEBlock(var/block) - return EncodeDNABlock(GetSEValue(block)) - -// Do not use this unless you absolutely have to. -// Set a block from a hex string. This is inefficient. If you can, use SetUIValue(). -// Used in DNA modifiers. -/datum/dna/proc/SetSEBlock(var/block,var/value,var/defer=0) - if (block<=0) return - var/nval=hex2num(value) - //testing("SetSEBlock([block],[value],[defer]): [value] -> [nval]") - return SetSEValue(block,nval,defer) - -/datum/dna/proc/GetSESubBlock(var/block,var/subBlock) - return copytext_char(GetSEBlock(block),subBlock,subBlock+1) - -// Do not use this unless you absolutely have to. -// Set a sub-block from a hex character. This is inefficient. If you can, use SetUIValue(). -// Used in DNA modifiers. -/datum/dna/proc/SetSESubBlock(var/block,var/subBlock, var/newSubBlock, var/defer=0) - if (block<=0) return - var/oldBlock=GetSEBlock(block) - var/newBlock="" - for(var/i=1, i<=length(oldBlock), i++) - if(i==subBlock) - newBlock+=newSubBlock - else - newBlock+=copytext_char(oldBlock,i,i+1) - //testing("SetSESubBlock([block],[subBlock],[newSubBlock],[defer]): [oldBlock] -> [newBlock]") - SetSEBlock(block,newBlock,defer) - - -/proc/EncodeDNABlock(var/value) - return pad_left(num2hex(value & 0xF), 3, "0") - - -/datum/dna/proc/UpdateUI() - src.uni_identity="" - for(var/block in UI) - uni_identity += EncodeDNABlock(block) - //testing("New UI: [uni_identity]") - dirtyUI=0 - -/datum/dna/proc/UpdateSE() - //var/oldse=struc_enzymes - struc_enzymes="" - for(var/block in SE) - struc_enzymes += EncodeDNABlock(block) - //testing("Old SE: [oldse]") - //testing("New SE: [struc_enzymes]") - dirtySE=0 - -// BACK-COMPAT! -// Just checks our character has all the crap it needs. -/datum/dna/proc/check_integrity(var/mob/living/carbon/human/character) - if(character) - if(UI.len != DNA_UI_LENGTH) - ResetUIFrom(character) - - if(length(struc_enzymes)!= 3*DNA_SE_LENGTH) - ResetSE() - - if(length(unique_enzymes) != 32) - unique_enzymes = md5(character.real_name) - else - if(length(uni_identity) != 3*DNA_UI_LENGTH) - uni_identity = "00600200A00E0110148FC01300B0095BD7FD3F4" - if(length(struc_enzymes)!= 3*DNA_SE_LENGTH) - struc_enzymes = "43359156756131E13763334D1C369012032164D4FE4CD61544B6C03F251B6C60A42821D26BA3B0FD6" - -// BACK-COMPAT! -// Initial DNA setup. I'm kind of wondering why the hell this doesn't just call the above. -/datum/dna/proc/ready_dna(mob/living/carbon/human/character) - ResetUIFrom(character) - - ResetSE() - - unique_enzymes = md5(character.real_name) - GLOB.reg_dna[unique_enzymes] = character.real_name diff --git a/code/game/dna/dna2_domutcheck.dm b/code/game/dna/dna2_domutcheck.dm deleted file mode 100644 index a19f5e22333c5..0000000000000 --- a/code/game/dna/dna2_domutcheck.dm +++ /dev/null @@ -1,47 +0,0 @@ -// (Re-)Apply mutations. -// TODO: Turn into a /mob proc, change inj to a bitflag for various forms of differing behavior. -// M: Mob to mess with -// connected: Machine we're in, type unchecked so I doubt it's used beyond monkeying -// flags: See below, bitfield. -#define MUTCHK_FORCED 1 -/proc/domutcheck(var/mob/living/M, var/connected=null, var/flags=0) - if(ishuman(M)) - var/mob/living/carbon/human/H = M - if(!H.should_have_organ(BP_HEART)) - return - for(var/datum/dna/gene/gene in dna_genes) - if(!M || !M.dna) - return - if(!gene.block) - continue - - // Sanity checks, don't skip. - if(!gene.can_activate(M,flags)) - //testing("[M] - Failed to activate [gene.name] (can_activate fail).") - continue - - // Current state - var/gene_active = (gene.flags & GENE_ALWAYS_ACTIVATE) - if(!gene_active) - gene_active = M.dna.GetSEState(gene.block) - - // Prior state - var/gene_prior_status = (gene.type in M.active_genes) - var/changed = gene_active != gene_prior_status || (gene.flags & GENE_ALWAYS_ACTIVATE) - - // If gene state has changed: - if(changed) - // Gene active (or ALWAYS ACTIVATE) - if(gene_active || (gene.flags & GENE_ALWAYS_ACTIVATE)) - testing("[gene.name] activated!") - gene.activate(M,connected,flags) - if(M) - M.active_genes |= gene.type - M.update_icon = 1 - // If Gene is NOT active: - else - testing("[gene.name] deactivated!") - gene.deactivate(M,connected,flags) - if(M) - M.active_genes -= gene.type - M.update_icon = 1 diff --git a/code/game/dna/dna2_helpers.dm b/code/game/dna/dna2_helpers.dm deleted file mode 100644 index 1c325e500d082..0000000000000 --- a/code/game/dna/dna2_helpers.dm +++ /dev/null @@ -1,205 +0,0 @@ -///////////////////////////// -// Helpers for DNA2 -///////////////////////////// - -// Pads 0s to t until length == u -/proc/add_zero2(t, u) - var/temp1 - while (length(t) < u) - t = "0[t]" - temp1 = t - if (length(t) > u) - temp1 = copytext_char(t,2,u+1) - return temp1 - -// DNA Gene activation boundaries, see dna2.dm. -// Returns a list object with 4 numbers. -/proc/GetDNABounds(var/block) - var/list/BOUNDS=dna_activity_bounds[block] - if(!istype(BOUNDS)) - return DNA_DEFAULT_BOUNDS - return BOUNDS - -// Give Random Bad Mutation to M -/proc/randmutb(var/mob/living/M) - if(!M) return - if(ishuman(M)) - var/mob/living/carbon/human/H = M - if(!H.should_have_organ(BP_HEART)) - return - M.dna.check_integrity() - var/block = pick(GLOB.GLASSESBLOCK,GLOB.COUGHBLOCK,GLOB.FAKEBLOCK,GLOB.NERVOUSBLOCK,GLOB.CLUMSYBLOCK,GLOB.TWITCHBLOCK,GLOB.HEADACHEBLOCK,GLOB.BLINDBLOCK,GLOB.DEAFBLOCK,GLOB.HALLUCINATIONBLOCK) - M.dna.SetSEState(block, 1) - -// Give Random Good Mutation to M -/proc/randmutg(var/mob/living/M) - if(!M) return - if(ishuman(M)) - var/mob/living/carbon/human/H = M - if(!H.should_have_organ(BP_HEART)) - return - M.dna.check_integrity() - var/block = pick(GLOB.HULKBLOCK,GLOB.XRAYBLOCK,GLOB.FIREBLOCK,GLOB.TELEBLOCK,GLOB.NOBREATHBLOCK,GLOB.REMOTEVIEWBLOCK,GLOB.REGENERATEBLOCK,GLOB.INCREASERUNBLOCK,GLOB.REMOTETALKBLOCK,GLOB.MORPHBLOCK,GLOB.BLENDBLOCK,GLOB.NOPRINTSBLOCK,GLOB.SHOCKIMMUNITYBLOCK,GLOB.SMALLSIZEBLOCK) - M.dna.SetSEState(block, 1) - -// Random Appearance Mutation -/proc/randmuti(var/mob/living/M) - if(!M) return - M.dna.check_integrity() - M.dna.SetUIValue(rand(1,DNA_UI_LENGTH),rand(1,4095)) - -// Scramble UI or SE. -/proc/scramble(var/UI, var/mob/M, var/prob) - if(!M) return - M.dna.check_integrity() - if(UI) - for(var/i = 1, i <= DNA_UI_LENGTH-1, i++) - if(prob(prob)) - M.dna.SetUIValue(i,rand(1,4095),1) - M.dna.UpdateUI() - M.UpdateAppearance() - - else - for(var/i = 1, i <= DNA_SE_LENGTH-1, i++) - if(prob(prob)) - M.dna.SetSEValue(i,rand(1,4095),1) - M.dna.UpdateSE() - domutcheck(M, null) - return - -// I haven't yet figured out what the fuck this is supposed to do. -/proc/miniscramble(input,rs,rd) - var/output - output = null - if (input == "C" || input == "D" || input == "E" || input == "F") - output = pick(prob((rs*10));"4",prob((rs*10));"5",prob((rs*10));"6",prob((rs*10));"7",prob((rs*5)+(rd));"0",prob((rs*5)+(rd));"1",prob((rs*10)-(rd));"2",prob((rs*10)-(rd));"3") - if (input == "8" || input == "9" || input == "A" || input == "B") - output = pick(prob((rs*10));"4",prob((rs*10));"5",prob((rs*10));"A",prob((rs*10));"B",prob((rs*5)+(rd));"C",prob((rs*5)+(rd));"D",prob((rs*5)+(rd));"2",prob((rs*5)+(rd));"3") - if (input == "4" || input == "5" || input == "6" || input == "7") - output = pick(prob((rs*10));"4",prob((rs*10));"5",prob((rs*10));"A",prob((rs*10));"B",prob((rs*5)+(rd));"C",prob((rs*5)+(rd));"D",prob((rs*5)+(rd));"2",prob((rs*5)+(rd));"3") - if (input == "0" || input == "1" || input == "2" || input == "3") - output = pick(prob((rs*10));"8",prob((rs*10));"9",prob((rs*10));"A",prob((rs*10));"B",prob((rs*10)-(rd));"C",prob((rs*10)-(rd));"D",prob((rs*5)+(rd));"E",prob((rs*5)+(rd));"F") - if (!output) output = "5" - return output - -// HELLO I MAKE BELL CURVES AROUND YOUR DESIRED TARGET -// So a shitty way of replacing gaussian noise. -// input: YOUR TARGET -// rs: RAD STRENGTH -// rd: DURATION -/proc/miniscrambletarget(input,rs,rd) - var/output = null - switch(input) - if("0") - output = pick(prob((rs*10)+(rd));"0",prob((rs*10)+(rd));"1",prob((rs*10));"2",prob((rs*10)-(rd));"3") - if("1") - output = pick(prob((rs*10)+(rd));"0",prob((rs*10)+(rd));"1",prob((rs*10)+(rd));"2",prob((rs*10));"3",prob((rs*10)-(rd));"4") - if("2") - output = pick(prob((rs*10));"0",prob((rs*10)+(rd));"1",prob((rs*10)+(rd));"2",prob((rs*10)+(rd));"3",prob((rs*10));"4",prob((rs*10)-(rd));"5") - if("3") - output = pick(prob((rs*10)-(rd));"0",prob((rs*10));"1",prob((rs*10)+(rd));"2",prob((rs*10)+(rd));"3",prob((rs*10)+(rd));"4",prob((rs*10));"5",prob((rs*10)-(rd));"6") - if("4") - output = pick(prob((rs*10)-(rd));"1",prob((rs*10));"2",prob((rs*10)+(rd));"3",prob((rs*10)+(rd));"4",prob((rs*10)+(rd));"5",prob((rs*10));"6",prob((rs*10)-(rd));"7") - if("5") - output = pick(prob((rs*10)-(rd));"2",prob((rs*10));"3",prob((rs*10)+(rd));"4",prob((rs*10)+(rd));"5",prob((rs*10)+(rd));"6",prob((rs*10));"7",prob((rs*10)-(rd));"8") - if("6") - output = pick(prob((rs*10)-(rd));"3",prob((rs*10));"4",prob((rs*10)+(rd));"5",prob((rs*10)+(rd));"6",prob((rs*10)+(rd));"7",prob((rs*10));"8",prob((rs*10)-(rd));"9") - if("7") - output = pick(prob((rs*10)-(rd));"4",prob((rs*10));"5",prob((rs*10)+(rd));"6",prob((rs*10)+(rd));"7",prob((rs*10)+(rd));"8",prob((rs*10));"9",prob((rs*10)-(rd));"A") - if("8") - output = pick(prob((rs*10)-(rd));"5",prob((rs*10));"6",prob((rs*10)+(rd));"7",prob((rs*10)+(rd));"8",prob((rs*10)+(rd));"9",prob((rs*10));"A",prob((rs*10)-(rd));"B") - if("9") - output = pick(prob((rs*10)-(rd));"6",prob((rs*10));"7",prob((rs*10)+(rd));"8",prob((rs*10)+(rd));"9",prob((rs*10)+(rd));"A",prob((rs*10));"B",prob((rs*10)-(rd));"C") - if("10")//A - output = pick(prob((rs*10)-(rd));"7",prob((rs*10));"8",prob((rs*10)+(rd));"9",prob((rs*10)+(rd));"A",prob((rs*10)+(rd));"B",prob((rs*10));"C",prob((rs*10)-(rd));"D") - if("11")//B - output = pick(prob((rs*10)-(rd));"8",prob((rs*10));"9",prob((rs*10)+(rd));"A",prob((rs*10)+(rd));"B",prob((rs*10)+(rd));"C",prob((rs*10));"D",prob((rs*10)-(rd));"E") - if("12")//C - output = pick(prob((rs*10)-(rd));"9",prob((rs*10));"A",prob((rs*10)+(rd));"B",prob((rs*10)+(rd));"C",prob((rs*10)+(rd));"D",prob((rs*10));"E",prob((rs*10)-(rd));"F") - if("13")//D - output = pick(prob((rs*10)-(rd));"A",prob((rs*10));"B",prob((rs*10)+(rd));"C",prob((rs*10)+(rd));"D",prob((rs*10)+(rd));"E",prob((rs*10));"F") - if("14")//E - output = pick(prob((rs*10)-(rd));"B",prob((rs*10));"C",prob((rs*10)+(rd));"D",prob((rs*10)+(rd));"E",prob((rs*10)+(rd));"F") - if("15")//F - output = pick(prob((rs*10)-(rd));"C",prob((rs*10));"D",prob((rs*10)+(rd));"E",prob((rs*10)+(rd));"F") - - if(!input || !output) //How did this happen? - output = "8" - - return output - -// /proc/updateappearance has changed behavior, so it's been removed -// Use mob.UpdateAppearance() instead. - -// Simpler. Don't specify UI in order for the mob to use its own. -/mob/proc/UpdateAppearance(var/list/UI=null) - if(istype(src, /mob/living/carbon/human)) - if(UI!=null) - src.dna.UI=UI - src.dna.UpdateUI() - dna.check_integrity() - var/mob/living/carbon/human/H = src - - H.head_hair_color = rgb( - dna.GetUIValueRange(DNA_UI_HAIR_R, 255), - dna.GetUIValueRange(DNA_UI_HAIR_G, 255), - dna.GetUIValueRange(DNA_UI_HAIR_B, 255) - ) - - H.facial_hair_color = rgb( - dna.GetUIValueRange(DNA_UI_BEARD_R, 255), - dna.GetUIValueRange(DNA_UI_BEARD_G, 255), - dna.GetUIValueRange(DNA_UI_BEARD_B, 255) - ) - - H.skin_color = rgb( - dna.GetUIValueRange(DNA_UI_SKIN_R, 255), - dna.GetUIValueRange(DNA_UI_SKIN_G, 255), - dna.GetUIValueRange(DNA_UI_SKIN_B, 255) - ) - - H.eye_color = rgb( - dna.GetUIValueRange(DNA_UI_EYES_R, 255), - dna.GetUIValueRange(DNA_UI_EYES_G, 255), - dna.GetUIValueRange(DNA_UI_EYES_B, 255) - ) - - H.update_eyes() - - H.skin_tone = 35 - dna.GetUIValueRange(DNA_UI_SKIN_TONE, 220) // Value can be negative. - - if(H.gender != NEUTER) - if (dna.GetUIState(DNA_UI_GENDER)) - H.gender = FEMALE - else - H.gender = MALE - - //Body markings - for(var/tag in dna.body_markings) - var/obj/item/organ/external/E = H.organs_by_name[tag] - if(E) - var/list/marklist = dna.body_markings[tag] - E.markings = marklist.Copy() - - //Base skin and blend - for(var/obj/item/organ/external/E in H.organs) - E.set_dna(E.dna) - - //Hair - var/hair = dna.GetUIValueRange(DNA_UI_HAIR_STYLE,GLOB.hair_styles_list.len) - if((0 < hair) && (hair <= GLOB.hair_styles_list.len)) - H.head_hair_style = GLOB.hair_styles_list[hair] - - //Facial Hair - var/beard = dna.GetUIValueRange(DNA_UI_BEARD_STYLE,GLOB.facial_hair_styles_list.len) - if((0 < beard) && (beard <= GLOB.facial_hair_styles_list.len)) - H.facial_hair_style = GLOB.facial_hair_styles_list[beard] - - H.force_update_limbs() - H.update_body() - H.update_eyes() - H.update_hair() - - return 1 - else - return 0 diff --git a/code/game/dna/genes/disabilities.dm b/code/game/dna/genes/disabilities.dm deleted file mode 100644 index b6a0d4cf2e220..0000000000000 --- a/code/game/dna/genes/disabilities.dm +++ /dev/null @@ -1,121 +0,0 @@ -///////////////////// -// DISABILITY GENES -// -// These activate either a mutation, disability, or sdisability. -// -// Gene is always activated. -///////////////////// - -/datum/dna/gene/disability - name="DISABILITY" - - // Mutation to give (or 0) - var/mutation=0 - - // Disability to give (or 0) - var/disability=0 - - // SDisability to give (or 0) - var/sdisability=0 - - // Activation message - var/activation_message="" - - // Yay, you're no longer growing 3 arms - var/deactivation_message="" - -/datum/dna/gene/disability/can_activate(var/mob/M,var/flags) - return 1 // Always set! - -/datum/dna/gene/disability/activate(var/mob/M, var/connected, var/flags) - if(mutation && !(mutation in M.mutations)) - M.mutations.Add(mutation) - if(disability) - M.disabilities|=disability - if(sdisability) - M.set_sdisability(sdisability) - if(activation_message) - to_chat(M, "[activation_message]") - else - testing("[name] has no activation message.") - -/datum/dna/gene/disability/deactivate(var/mob/M, var/connected, var/flags) - if(mutation && (mutation in M.mutations)) - M.mutations.Remove(mutation) - if(disability) - M.disabilities &= (~disability) - if(sdisability) - M.unset_sdisability(sdisability) - if(deactivation_message) - to_chat(M, "[deactivation_message]") - else - testing("[name] has no deactivation message.") - -// Note: Doesn't seem to do squat, at the moment. -/datum/dna/gene/disability/hallucinate - name="Hallucinate" - activation_message="Your mind says 'Hello'." - mutation=mHallucination - -/datum/dna/gene/disability/hallucinate/New() - block=GLOB.HALLUCINATIONBLOCK - -/datum/dna/gene/disability/epilepsy - name="Epilepsy" - activation_message="You get a headache." - disability=EPILEPSY - -/datum/dna/gene/disability/epilepsy/New() - block=GLOB.HEADACHEBLOCK - -/datum/dna/gene/disability/cough - name="Coughing" - activation_message="You start coughing." - disability=COUGHING - -/datum/dna/gene/disability/cough/New() - block=GLOB.COUGHBLOCK - -/datum/dna/gene/disability/clumsy - name="Clumsiness" - activation_message="You feel lightheaded." - mutation=MUTATION_CLUMSY - -/datum/dna/gene/disability/clumsy/New() - block=GLOB.CLUMSYBLOCK - -/datum/dna/gene/disability/nervousness - name="Nervousness" - activation_message="You feel nervous." - disability=NERVOUS - -/datum/dna/gene/disability/nervousness/New() - block=GLOB.NERVOUSBLOCK - -/datum/dna/gene/disability/blindness - name="Blindness" - activation_message="You can't seem to see anything." - sdisability=BLINDED - -/datum/dna/gene/disability/blindness/New() - block=GLOB.BLINDBLOCK - -/datum/dna/gene/disability/deaf - name="Deafness" - activation_message="It's kinda quiet." - sdisability=DEAFENED - -/datum/dna/gene/disability/deaf/New() - block=GLOB.DEAFBLOCK - -/datum/dna/gene/disability/deaf/activate(var/mob/M, var/connected, var/flags) - ..(M,connected,flags) - M.ear_deaf = 1 - -/datum/dna/gene/disability/nearsighted - name="Nearsightedness" - activation_message="Your eyes feel weird..." - disability=NEARSIGHTED - -/datum/dna/gene/disability/nearsighted/New() - block=GLOB.GLASSESBLOCK diff --git a/code/game/dna/genes/gene.dm b/code/game/dna/genes/gene.dm deleted file mode 100644 index e35461480cc77..0000000000000 --- a/code/game/dna/genes/gene.dm +++ /dev/null @@ -1,121 +0,0 @@ -/** -* Gene Datum -* -* domutcheck was getting pretty hairy. This is the solution. -* -* All genes are stored in a global variable to cut down on memory -* usage. -* -* @author N3X15 -*/ - -/datum/dna/gene - // Display name - var/name="BASE GENE" - - // Probably won't get used but why the fuck not - var/desc="Oh god who knows what this does." - - // Set in initialize()! - // What gene activates this? - var/block=0 - - // Any of a number of GENE_ flags. - var/flags=0 - -/** -* Is the gene active in this mob's DNA? -*/ -/datum/dna/gene/proc/is_active(var/mob/M) - return M.active_genes && (type in M.active_genes) - -// Return 1 if we can activate. -// HANDLE MUTCHK_FORCED HERE! -/datum/dna/gene/proc/can_activate(var/mob/M, var/flags) - return 0 - -// Called when the gene activates. Do your magic here. -/datum/dna/gene/proc/activate(var/mob/M, var/connected, var/flags) - return - -/** -* Called when the gene deactivates. Undo your magic here. -* Only called when the block is deactivated. -*/ -/datum/dna/gene/proc/deactivate(var/mob/M, var/connected, var/flags) - return - -// This section inspired by goone's bioEffects. - -/** -* Called in each life() tick. -*/ -/datum/dna/gene/proc/OnMobLife(var/mob/M) - return - -/** -* Called when the mob dies -*/ -/datum/dna/gene/proc/OnMobDeath(var/mob/M) - return - -/** -* Called when the mob says shit -*/ -/datum/dna/gene/proc/OnSay(var/mob/M, var/message) - return message - -/** -* Called after the mob runs update_icons. -* -* @params M The subject. -* @params g Gender (m or f) -* @params fat Fat? (0 or 1) -*/ -/datum/dna/gene/proc/OnDrawUnderlays(var/mob/M, var/g, var/fat) - return 0 - - -///////////////////// -// BASIC GENES -// -// These just chuck in a mutation and display a message. -// -// Gene is activated: -// 1. If mutation already exists in mob -// 2. If the probability roll succeeds -// 3. Activation is forced (done in domutcheck) -///////////////////// - - -/datum/dna/gene/basic - name="BASIC GENE" - - // Mutation to give - var/mutation=0 - - // Activation probability - var/activation_prob=45 - - // Possible activation messages - var/list/activation_messages=list() - - // Possible deactivation messages - var/list/deactivation_messages=list() - -/datum/dna/gene/basic/can_activate(var/mob/M,var/flags) - if (flags & MUTCHK_FORCED) - return TRUE - return prob(activation_prob) - -/datum/dna/gene/basic/activate(var/mob/M) - M.mutations.Add(mutation) - if(activation_messages.len) - var/msg = pick(activation_messages) - to_chat(M, "[msg]") - -/datum/dna/gene/basic/deactivate(var/mob/M) - M.mutations.Remove(mutation) - if(deactivation_messages.len) - var/msg = pick(deactivation_messages) - to_chat(M, "[msg]") diff --git a/code/game/dna/genes/powers.dm b/code/game/dna/genes/powers.dm deleted file mode 100644 index 4cab851865c35..0000000000000 --- a/code/game/dna/genes/powers.dm +++ /dev/null @@ -1,180 +0,0 @@ -/datum/dna/gene/basic/nobreath - name = "No Breathing" - activation_messages = list("You feel no need to breathe.") - mutation = mNobreath - -/datum/dna/gene/basic/nobreath/New() - block = GLOB.NOBREATHBLOCK - - -/datum/dna/gene/basic/remoteview - name = "Remote Viewing" - activation_messages = list("Your mind expands.") - mutation = mRemote - - -/datum/dna/gene/basic/remoteview/New() - block = GLOB.REMOTEVIEWBLOCK - - -/datum/dna/gene/basic/remoteview/activate(mob/M, connected, flags) - ..(M, connected, flags) - M.verbs += /mob/living/carbon/human/proc/remoteobserve - - -/datum/dna/gene/basic/regenerate - name = "Regenerate" - activation_messages = list("You feel better.") - mutation = mRegen - - -/datum/dna/gene/basic/regenerate/New() - block = GLOB.REGENERATEBLOCK - - -/datum/dna/gene/basic/increaserun - name = "Super Speed" - activation_messages = list("Your leg muscles pulsate.") - mutation = mRun - - -/datum/dna/gene/basic/increaserun/New() - block = GLOB.INCREASERUNBLOCK - - -/datum/dna/gene/basic/remotetalk - name = "Telepathy" - activation_messages = list("You expand your mind outwards.") - mutation = mRemotetalk - - -/datum/dna/gene/basic/remotetalk/New() - block = GLOB.REMOTETALKBLOCK - - -/datum/dna/gene/basic/remotetalk/activate(mob/M, connected, flags) - ..(M, connected, flags) - M.verbs += /mob/living/carbon/human/proc/remotesay - - -/datum/dna/gene/basic/morph - name = "Morph" - activation_messages = list("Your skin feels strange.") - mutation = mMorph - - -/datum/dna/gene/basic/morph/New() - block = GLOB.MORPHBLOCK - - -/datum/dna/gene/basic/morph/activate(mob/M) - ..(M) - M.verbs += /mob/living/carbon/human/proc/morph - - -/datum/dna/gene/basic/cold_resist - name = "Cold Resistance" - activation_messages = list("Your body is filled with warmth.") - mutation = MUTATION_COLD_RESISTANCE - - -/datum/dna/gene/basic/cold_resist/New() - block = GLOB.FIREBLOCK - - -/datum/dna/gene/basic/cold_resist/can_activate(mob/M, flags) - if (flags & MUTCHK_FORCED) - return TRUE - return prob(30) - - -/datum/dna/gene/basic/cold_resist/OnDrawUnderlays(mob/M, g, fat) - return "fire[fat]_s" - - -/datum/dna/gene/basic/noprints - name = "No Prints" - activation_messages = list("Your fingers feel numb.") - mutation = mFingerprints - - -/datum/dna/gene/basic/noprints/New() - block = GLOB.NOPRINTSBLOCK - - -/datum/dna/gene/basic/noshock - name = "Shock Immunity" - activation_messages = list("Your skin feels strange.") - mutation = mShock - - -/datum/dna/gene/basic/noshock/New() - block = GLOB.SHOCKIMMUNITYBLOCK - - -/datum/dna/gene/basic/midget - name = "Midget" - activation_messages = list("Your skin feels rubbery.") - mutation = mSmallsize - - -/datum/dna/gene/basic/midget/New() - block = GLOB.SMALLSIZEBLOCK - - -/datum/dna/gene/basic/midget/can_activate(mob/M,flags) - if(MUTATION_HULK in M.mutations) - return FALSE - return ..(M,flags) - - -/datum/dna/gene/basic/midget/activate(mob/M, connected, flags) - ..(M,connected, flags) - M.pass_flags |= PASS_FLAG_TABLE - - -/datum/dna/gene/basic/midget/deactivate(mob/M, connected, flags) - ..(M,connected, flags) - M.pass_flags &= ~PASS_FLAG_TABLE - - -/datum/dna/gene/basic/hulk - name = "Hulk" - activation_messages = list("Your muscles hurt.") - mutation = MUTATION_HULK - - -/datum/dna/gene/basic/hulk/New() - block = GLOB.HULKBLOCK - - -/datum/dna/gene/basic/hulk/can_activate(mob/M, flags) - if (mSmallsize in M.mutations) - return FALSE - return ..(M, flags) - - -/datum/dna/gene/basic/hulk/OnDrawUnderlays(mob/M, g, fat) - return "hulk_[fat ? fat : g]_s" - - -/datum/dna/gene/basic/hulk/OnMobLife(mob/living/carbon/human/M) - if(!istype(M)) - return - if (M.health > 25) - return - M.mutations.Remove(MUTATION_HULK) - M.update_mutations() - to_chat(M, SPAN_WARNING("You suddenly feel very weak.")) - M.emote("collapse") - M.Weaken(3) - - -/datum/dna/gene/basic/xray - name = "X-Ray Vision" - activation_messages = list("The walls suddenly disappear.") - mutation = MUTATION_XRAY - - -/datum/dna/gene/basic/xray/New() - block = GLOB.XRAYBLOCK diff --git a/code/game/gamemodes/calamity/calamity.dm b/code/game/gamemodes/calamity/calamity.dm deleted file mode 100644 index f5239b2716a53..0000000000000 --- a/code/game/gamemodes/calamity/calamity.dm +++ /dev/null @@ -1,24 +0,0 @@ -#define ANTAG_TYPE_RATIO 8 - -/datum/game_mode/calamity - name = "Calamity" - round_description = "This must be a Thursday. You never could get the hang of Thursdays..." - extended_round_description = "All hell is about to break loose. Literally every antagonist type may spawn in this round. Hold on tight." - config_tag = "calamity" - required_players = 1 - votable = 0 - event_delay_mod_moderate = 0.5 - event_delay_mod_major = 0.75 - -/datum/game_mode/calamity/create_antagonists() - var/list/antag_candidates = all_random_antag_types() - - var/grab_antags = round(num_players()/ANTAG_TYPE_RATIO)+1 - while(antag_candidates.len && antag_tags.len < grab_antags) - var/antag_id = pick(antag_candidates) - antag_candidates -= antag_id - antag_tags |= antag_id - - ..() - -#undef ANTAG_TYPE_RATIO diff --git a/code/game/gamemodes/changeling/absorbed_dna.dm b/code/game/gamemodes/changeling/absorbed_dna.dm deleted file mode 100644 index 2527f906975a7..0000000000000 --- a/code/game/gamemodes/changeling/absorbed_dna.dm +++ /dev/null @@ -1,12 +0,0 @@ -/datum/absorbed_dna - var/name - var/datum/dna/dna - var/speciesName - var/list/languages - -/datum/absorbed_dna/New(var/newName, var/newDNA, var/newSpecies, var/newLanguages) - ..() - name = newName - dna = newDNA - speciesName = newSpecies - languages = newLanguages diff --git a/code/game/gamemodes/changeling/changeling.dm b/code/game/gamemodes/changeling/changeling.dm deleted file mode 100644 index 6012ca4a2b0d5..0000000000000 --- a/code/game/gamemodes/changeling/changeling.dm +++ /dev/null @@ -1,18 +0,0 @@ -/datum/game_mode/changeling - name = "Changeling" - round_description = "There are alien changelings onboard. Do not let the changelings succeed!" - extended_round_description = "Life always finds a way. However, life can sometimes take a more disturbing route. \ - Humanity's extensive knowledge of xeno-biological specimens has made them confident and arrogant. Yet \ - something slipped past their eyes. Something dangerous. Something alive. Most frightening of all, \ - however, is that this something is someone. An unknown alien specimen has incorporated itself into \ - the crew. Its unique biology allows it to manipulate its own or anyone else's DNA. \ - With the ability to copy faces, voices, animals, but also change the chemical make up of your own body, \ - its existence is a threat to not only your personal safety but the lives of everyone on board. \ - No one knows where it came from. No one knows who it is or what it wants. One thing is for \ - certain though... there is never just one of them. Good luck." - config_tag = "changeling" - required_players = 2 - required_enemies = 1 - end_on_antag_death = FALSE - antag_scaling_coeff = 15 - antag_tags = list(MODE_CHANGELING) diff --git a/code/game/gamemodes/changeling/changeling_powers.dm b/code/game/gamemodes/changeling/changeling_powers.dm deleted file mode 100644 index 18c7c7cac1f2b..0000000000000 --- a/code/game/gamemodes/changeling/changeling_powers.dm +++ /dev/null @@ -1,803 +0,0 @@ -var/global/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") - -/datum/changeling //stores changeling powers, changeling recharge thingie, changeling absorbed DNA and changeling ID (for changeling hivemind) - var/list/datum/absorbed_dna/absorbed_dna = list() - var/list/absorbed_languages = list() - var/absorbedcount = 0 - var/chem_charges = 20 - var/chem_recharge_rate = 0.5 - var/chem_storage = 50 - var/sting_range = 1 - var/changelingID = "Changeling" - var/geneticdamage = 0 - var/isabsorbing = 0 - var/geneticpoints = 25 - var/purchasedpowers = list() - var/mimicing = "" - -/datum/changeling/Destroy() - purchasedpowers = null - absorbed_languages.Cut() - absorbed_dna.Cut() - . = ..() - -/datum/changeling/New() - ..() - if(possible_changeling_IDs.len) - changelingID = pick(possible_changeling_IDs) - possible_changeling_IDs -= changelingID - changelingID = "[changelingID]" - else - changelingID = "[rand(1,999)]" - -/datum/changeling/proc/regenerate() - chem_charges = min(max(0, chem_charges+chem_recharge_rate), chem_storage) - geneticdamage = max(0, geneticdamage-1) - -/datum/changeling/proc/GetDNA(var/dna_owner) - for(var/datum/absorbed_dna/DNA in absorbed_dna) - if(dna_owner == DNA.name) - return DNA - -/mob/proc/absorbDNA(var/datum/absorbed_dna/newDNA) - var/datum/changeling/changeling = null - if(src.mind && src.mind.changeling) - changeling = src.mind.changeling - if(!changeling) - return - - for(var/language in newDNA.languages) - changeling.absorbed_languages |= language - - changeling_update_languages(changeling.absorbed_languages) - - if(!changeling.GetDNA(newDNA.name)) // Don't duplicate - I wonder if it's possible for it to still be a different DNA? DNA code could use a rewrite - changeling.absorbed_dna += newDNA - -//Restores our verbs. It will only restore verbs allowed during lesser (monkey) form if we are not human -/mob/proc/make_changeling() - - if(!mind) return - if(!mind.changeling) mind.changeling = new /datum/changeling(gender) - - verbs += /datum/changeling/proc/EvolutionMenu - add_language(LANGUAGE_CHANGELING_GLOBAL) - - var/lesser_form = !ishuman(src) - - if(!powerinstances.len) - for(var/P in powers) - powerinstances += new P() - - // Code to auto-purchase free powers. - for(var/datum/power/changeling/P in powerinstances) - if(!P.genomecost) // Is it free? - if(!(P in mind.changeling.purchasedpowers)) // Do we not have it already? - mind.changeling.purchasePower(mind, P.name, 0)// Purchase it. Don't remake our verbs, we're doing it after this. - - for(var/datum/power/changeling/P in mind.changeling.purchasedpowers) - if(P.isVerb) - if(lesser_form && !P.allowduringlesserform) continue - if(!(P in src.verbs)) - src.verbs += P.verbpath - - for(var/language in languages) - mind.changeling.absorbed_languages |= language - - var/mob/living/carbon/human/H = src - if(istype(H)) - var/datum/absorbed_dna/newDNA = new(H.real_name, H.dna, H.species.name, H.languages) - absorbDNA(newDNA) - - return 1 - -//removes our changeling verbs -/mob/proc/remove_changeling_powers() - if(!mind || !mind.changeling) return - for(var/datum/power/changeling/P in mind.changeling.purchasedpowers) - if(P.isVerb) - verbs -= P.verbpath - - -//Helper proc. Does all the checks and stuff for us to avoid copypasta -/mob/proc/changeling_power(var/required_chems=0, var/required_dna=0, var/max_genetic_damage=100, var/max_stat=0) - - if(!src.mind) return - if(!iscarbon(src)) return - - var/datum/changeling/changeling = src.mind.changeling - if(!changeling) - to_world_log("[src] has the changeling_transform() verb but is not a changeling.") - return - - if(src.stat > max_stat) - to_chat(src, "We are incapacitated.") - return - - if(changeling.absorbed_dna.len < required_dna) - to_chat(src, "We require at least [required_dna] samples of compatible DNA.") - return - - if(changeling.chem_charges < required_chems) - to_chat(src, "We require at least [required_chems] units of chemicals to do that!") - return - - if(changeling.geneticdamage > max_genetic_damage) - to_chat(src, "Our genomes are still reassembling. We need time to recover first.") - return - - return changeling - - -//Used to dump the languages from the changeling datum into the actual mob. -/mob/proc/changeling_update_languages(var/updated_languages) - - languages = list() - for(var/language in updated_languages) - languages += language - - //This isn't strictly necessary but just to be safe... - add_language(LANGUAGE_CHANGELING_GLOBAL) - - return - -//Absorbs the victim's DNA making them uncloneable. Requires a strong grip on the victim. -//Doesn't cost anything as it's the most basic ability. -/mob/proc/changeling_absorb_dna() - set category = "Changeling" - set name = "Absorb DNA" - - var/datum/changeling/changeling = changeling_power(0,0,100) - if(!changeling) return - - var/obj/item/grab/G = src.get_active_hand() - if(!istype(G)) - to_chat(src, "We must be grabbing a creature in our active hand to absorb them.") - return - - var/mob/living/carbon/human/T = G.affecting - if(!istype(T)) - to_chat(src, "[T] is not compatible with our biology.") - return - - if((T.species.species_flags & SPECIES_FLAG_NO_SCAN) || T.isSynthetic()) - to_chat(src, "We cannot extract DNA from this creature!") - return - - if(MUTATION_HUSK in T.mutations) - to_chat(src, "This creature's DNA is ruined beyond useability!") - return - - if(!G.can_absorb()) - to_chat(src, "We must have a tighter grip to absorb this creature.") - return - - if(changeling.isabsorbing) - to_chat(src, "We are already absorbing!") - return - - var/obj/item/organ/external/affecting = T.get_organ(src.zone_sel.selecting) - if(!affecting) - to_chat(src, "They are missing that body part!") - - changeling.isabsorbing = 1 - for(var/stage = 1, stage<=3, stage++) - switch(stage) - if(1) - to_chat(src, "This creature is compatible. We must hold still...") - if(2) - to_chat(src, "We extend a proboscis.") - src.visible_message("[src] extends a proboscis!") - if(3) - to_chat(src, "We stab [T] with the proboscis.") - src.visible_message("[src] stabs [T] with the proboscis!") - to_chat(T, "You feel a sharp stabbing pain!") - affecting.take_external_damage(39, 0, DAMAGE_FLAG_SHARP, "large organic needle") - if(!do_after(src, 15 SECONDS, T, DO_PUBLIC_UNIQUE)) - to_chat(src, "Our absorption of [T] has been interrupted!") - changeling.isabsorbing = 0 - return - - to_chat(src, "We have absorbed [T]!") - src.visible_message("[src] sucks the fluids from [T]!") - to_chat(T, "You have been absorbed by the changeling!") - changeling.chem_charges += 10 - changeling.geneticpoints += 2 - - //Steal all of their languages! - for(var/language in T.languages) - if(!(language in changeling.absorbed_languages)) - changeling.absorbed_languages += language - - changeling_update_languages(changeling.absorbed_languages) - - var/datum/absorbed_dna/newDNA = new(T.real_name, T.dna, T.species.name, T.languages) - absorbDNA(newDNA) - - if(mind && T.mind) - T.mind.CopyMemories(mind) - - if(T.mind && T.mind.changeling) - if(T.mind.changeling.absorbed_dna) - for(var/datum/absorbed_dna/dna_data in T.mind.changeling.absorbed_dna) //steal all their loot - if(changeling.GetDNA(dna_data.name)) - continue - absorbDNA(dna_data) - changeling.absorbedcount++ - T.mind.changeling.absorbed_dna.len = 1 - - if(T.mind.changeling.purchasedpowers) - for(var/datum/power/changeling/Tp in T.mind.changeling.purchasedpowers) - if(Tp in changeling.purchasedpowers) - continue - else - changeling.purchasedpowers += Tp - - if(!Tp.isVerb) - call(Tp.verbpath)() - else - src.make_changeling() - - changeling.chem_charges += T.mind.changeling.chem_charges - changeling.geneticpoints += T.mind.changeling.geneticpoints - T.mind.changeling.chem_charges = 0 - T.mind.changeling.geneticpoints = 0 - T.mind.changeling.absorbedcount = 0 - - changeling.absorbedcount++ - changeling.isabsorbing = 0 - - T.death(0) - T.Drain() - return 1 - - -//Change our DNA to that of somebody we've absorbed. -/mob/proc/changeling_transform() - set category = "Changeling" - set name = "Transform (5)" - - var/datum/changeling/changeling = changeling_power(5,1,0) - if(!changeling) return - - var/list/names = list() - for(var/datum/absorbed_dna/DNA in changeling.absorbed_dna) - names += "[DNA.name]" - - var/S = input("Select the target DNA: ", "Target DNA", null) as null|anything in names - if(!S) return - - var/datum/absorbed_dna/chosen_dna = changeling.GetDNA(S) - if(!chosen_dna) - return - - changeling.chem_charges -= 5 - changeling.geneticdamage = 30 - - var/S_name = chosen_dna.speciesName - var/datum/species/S_dat = all_species[S_name] - var/changeTime = 2 SECONDS - if(mob_size != S_dat.mob_size) - src.visible_message("[src]'s body begins to twist, their mass changing rapidly!") - changeTime = 8 SECONDS - else - src.visible_message("[src]'s body begins to twist, changing rapidly!") - - if(!do_after(src, changeTime, do_flags = DO_DEFAULT | DO_USER_UNIQUE_ACT)) - to_chat(src, "You fail to change shape.") - return - handle_changeling_transform(chosen_dna) - - src.verbs -= /mob/proc/changeling_transform - spawn(10) - src.verbs += /mob/proc/changeling_transform - - changeling_update_languages(changeling.absorbed_languages) - return 1 - -/mob/proc/handle_changeling_transform(var/datum/absorbed_dna/chosen_dna) - src.visible_message("[src] transforms!") - - src.dna = chosen_dna.dna - src.real_name = chosen_dna.name - src.flavor_text = "" - - if(ishuman(src)) - var/mob/living/carbon/human/H = src - var/newSpecies = chosen_dna.speciesName - H.set_species(newSpecies,1) - H.b_type = chosen_dna.dna.b_type - H.sync_organ_dna() - - domutcheck(src, null) - src.UpdateAppearance() - - -//Transform into a monkey. -/mob/proc/changeling_lesser_form() - set category = "Changeling" - set name = "Lesser Form (1)" - - var/datum/changeling/changeling = changeling_power(1,0,0) - if(!changeling) return - - if(src.has_brain_worms()) - to_chat(src, "We cannot perform this ability at the present time!") - return - - var/mob/living/carbon/human/H = src - - if(!istype(H) || !H.species.primitive_form) - to_chat(src, "We cannot perform this ability in this form!") - return - - changeling.chem_charges-- - H.visible_message("[H] transforms!") - changeling.geneticdamage = 30 - to_chat(H, "Our genes cry out!") - H = H.monkeyize() - return 1 - -//Transform into a human -/mob/proc/changeling_lesser_transform() - set category = "Changeling" - set name = "Transform (1)" - - var/datum/changeling/changeling = changeling_power(1,1,0) - if(!changeling) return - - if(HAS_TRANSFORMATION_MOVEMENT_HANDLER(src)) - return - - var/list/names = list() - for(var/datum/dna/DNA in changeling.absorbed_dna) - names += "[DNA.real_name]" - - var/S = input("Select the target DNA: ", "Target DNA", null) as null|anything in names - if(!S) return - - var/datum/dna/chosen_dna = changeling.GetDNA(S) - if(!chosen_dna) - return - - var/mob/living/carbon/human/C = src - - changeling.chem_charges-- - C.remove_changeling_powers() - C.visible_message("[C] transforms!") - C.dna = chosen_dna.Clone() - - var/list/implants = list() - for (var/obj/item/implant/I in C) //Still preserving implants - implants += I - - ADD_TRANSFORMATION_MOVEMENT_HANDLER(C) - C.icon = null - C.overlays.Cut() - C.set_invisibility(101) - var/atom/movable/overlay/animation = new /atom/movable/overlay(src) - animation.icon_state = "blank" - animation.icon = 'icons/mob/mob.dmi' - flick("monkey2h", animation) - sleep(48) - qdel(animation) - - for(var/obj/item/W in src) - C.drop_from_inventory(W) - - var/mob/living/carbon/human/O = new /mob/living/carbon/human( src ) - if (C.dna.GetUIState(DNA_UI_GENDER)) - O.gender = FEMALE - else - O.gender = MALE - O.dna = C.dna.Clone() - C.dna = null - O.real_name = chosen_dna.real_name - - for(var/obj/T in C) - qdel(T) - - O.dropInto(C.loc) - - O.UpdateAppearance() - domutcheck(O, null) - O.setToxLoss(C.getToxLoss()) - O.adjustBruteLoss(C.getBruteLoss()) - O.setOxyLoss(C.getOxyLoss()) - O.adjustFireLoss(C.getFireLoss()) - O.set_stat(C.stat) - for (var/obj/item/implant/I in implants) - I.forceMove(O) - I.implanted = O - - C.mind.transfer_to(O) - O.make_changeling() - O.changeling_update_languages(changeling.absorbed_languages) - qdel(C) - return 1 - - -//Fake our own death and fully heal. You will appear to be dead but regenerate fully after a short delay. -/mob/proc/changeling_fakedeath() - set category = "Changeling" - set name = "Regenerative Stasis (20)" - - var/datum/changeling/changeling = changeling_power(20,1,100,DEAD) - if(!changeling) return - - var/mob/living/carbon/C = src - if(!C.stat && alert("Are we sure we wish to fake our death?",,"Yes","No") == "No")//Confirmation for living changelings if they want to fake their death - return - to_chat(C, "We will attempt to regenerate our form.") - C.status_flags |= FAKEDEATH //play dead - C.UpdateLyingBuckledAndVerbStatus() - C.remove_changeling_powers() - - C.emote("gasp") - - spawn(rand(800,2000)) - if(changeling_power(20,1,100,DEAD)) - // charge the changeling chemical cost for stasis - changeling.chem_charges -= 20 - - to_chat(C, "We are ready to rise. Use the Revive verb when you are ready.") - C.verbs += /mob/proc/changeling_revive - return 1 - -/mob/proc/changeling_revive() - set category = "Changeling" - set name = "Revive" - - var/mob/living/carbon/C = src - // restore us to health - C.revive() - // remove our fake death flag - C.status_flags &= ~(FAKEDEATH) - // let us move again - C.UpdateLyingBuckledAndVerbStatus() - // re-add out changeling powers - C.make_changeling() - // sending display messages - to_chat(C, "We have regenerated.") - C.verbs -= /mob/proc/changeling_revive - - -//Boosts the range of your next sting attack by 1 -/mob/proc/changeling_boost_range() - set category = "Changeling" - set name = "Ranged Sting (10)" - set desc="Your next sting ability can be used against targets 2 squares away." - - var/datum/changeling/changeling = changeling_power(10,0,100) - if(!changeling) return 0 - changeling.chem_charges -= 10 - to_chat(src, "Your throat adjusts to launch the sting.") - changeling.sting_range = 2 - src.verbs -= /mob/proc/changeling_boost_range - spawn(5) src.verbs += /mob/proc/changeling_boost_range - return 1 - - -//Recover from stuns. -/mob/proc/changeling_unstun() - set category = "Changeling" - set name = "Epinephrine Sacs (45)" - set desc = "Removes all stuns" - - var/datum/changeling/changeling = changeling_power(45,0,100,UNCONSCIOUS) - if(!changeling) return 0 - changeling.chem_charges -= 45 - - var/mob/living/carbon/human/C = src - C.set_stat(CONSCIOUS) - C.SetParalysis(0) - C.SetStunned(0) - C.SetWeakened(0) - C.lying = 0 - C.UpdateLyingBuckledAndVerbStatus() - - src.verbs -= /mob/proc/changeling_unstun - spawn(5) src.verbs += /mob/proc/changeling_unstun - return 1 - - -//Speeds up chemical regeneration -/mob/proc/changeling_fastchemical() - src.mind.changeling.chem_recharge_rate *= 2 - return 1 - -//Increases macimum chemical storage -/mob/proc/changeling_engorgedglands() - src.mind.changeling.chem_storage += 25 - return 1 - - -//Prevents AIs tracking you but makes you easily detectable to the human-eye. -/mob/proc/changeling_digitalcamo() - set category = "Changeling" - set name = "Toggle Digital Camoflague" - set desc = "The AI can no longer track us, but we will look different if examined. Has a constant cost while active." - - var/datum/changeling/changeling = changeling_power() - if(!changeling) return 0 - - var/mob/living/carbon/human/C = src - if(C.digitalcamo) to_chat(C, "We return to normal.") - else to_chat(C, "We distort our form to prevent AI-tracking.") - C.digitalcamo = !C.digitalcamo - - spawn(0) - while(C && C.digitalcamo && C.mind && C.mind.changeling) - C.mind.changeling.chem_charges = max(C.mind.changeling.chem_charges - 1, 0) - sleep(40) - - src.verbs -= /mob/proc/changeling_digitalcamo - spawn(5) src.verbs += /mob/proc/changeling_digitalcamo - return 1 - - -//Starts healing you every second for 10 seconds. Can be used whilst unconscious. -/mob/proc/changeling_rapidregen() - set category = "Changeling" - set name = "Rapid Regeneration (30)" - set desc = "Begins rapidly regenerating. Does not effect stuns or chemicals." - - var/datum/changeling/changeling = changeling_power(30,0,100,UNCONSCIOUS) - if(!changeling) return 0 - src.mind.changeling.chem_charges -= 30 - - var/mob/living/carbon/human/C = src - spawn(0) - for(var/i = 0, i<10,i++) - if(C) - C.adjustBruteLoss(-10) - C.adjustToxLoss(-10) - C.adjustOxyLoss(-10) - C.adjustFireLoss(-10) - sleep(10) - - src.verbs -= /mob/proc/changeling_rapidregen - spawn(5) src.verbs += /mob/proc/changeling_rapidregen - return 1 - -// HIVE MIND UPLOAD/DOWNLOAD DNA - -var/global/list/datum/absorbed_dna/hivemind_bank = list() - -/mob/proc/changeling_hiveupload() - set category = "Changeling" - set name = "Hive Channel (10)" - set desc = "Allows you to channel DNA in the airwaves to allow other changelings to absorb it." - - var/datum/changeling/changeling = changeling_power(10,1) - if(!changeling) return - - var/list/names = list() - for(var/datum/absorbed_dna/DNA in changeling.absorbed_dna) - var/valid = 1 - for(var/datum/absorbed_dna/DNB in hivemind_bank) - if(DNA.name == DNB.name) - valid = 0 - break - if(valid) - names += DNA.name - - if(names.len <= 0) - to_chat(src, "The airwaves already have all of our DNA.") - return - - var/S = input("Select a DNA to channel: ", "Channel DNA", null) as null|anything in names - if(!S) return - - var/datum/absorbed_dna/chosen_dna = changeling.GetDNA(S) - if(!chosen_dna) - return - - var/datum/species/spec = all_species[chosen_dna.speciesName] - - if(spec && spec.species_flags & SPECIES_FLAG_NEED_DIRECT_ABSORB) - to_chat(src, "That species must be absorbed directly.") - return - - changeling.chem_charges -= 10 - hivemind_bank += chosen_dna - to_chat(src, "We channel the DNA of [S] to the air.") - return 1 - -/mob/proc/changeling_hivedownload() - set category = "Changeling" - set name = "Hive Absorb (20)" - set desc = "Allows you to absorb DNA that is being channeled in the airwaves." - - var/datum/changeling/changeling = changeling_power(20,1) - if(!changeling) return - - var/list/names = list() - for(var/datum/absorbed_dna/DNA in hivemind_bank) - if(!(changeling.GetDNA(DNA.name))) - names[DNA.name] = DNA - - if(names.len <= 0) - to_chat(src, "There's no new DNA to absorb from the air.") - return - - var/S = input("Select a DNA absorb from the air: ", "Absorb DNA", null) as null|anything in names - if(!S) return - var/datum/dna/chosen_dna = names[S] - if(!chosen_dna) - return - - changeling.chem_charges -= 20 - absorbDNA(chosen_dna) - to_chat(src, "We absorb the DNA of [S] from the air.") - return 1 - -// Fake Voice - -/mob/proc/changeling_mimicvoice() - set category = "Changeling" - set name = "Mimic Voice" - set desc = "Shape our vocal glands to form a voice of someone we choose. We cannot regenerate chemicals when mimicing." - - - var/datum/changeling/changeling = changeling_power() - if(!changeling) return - - if(changeling.mimicing) - changeling.mimicing = "" - to_chat(src, "We return our vocal glands to their original location.") - return - - var/mimic_voice = sanitize(input(usr, "Enter a name to mimic.", "Mimic Voice", null), MAX_NAME_LEN) - if(!mimic_voice) - return - - changeling.mimicing = mimic_voice - - to_chat(src, "We shape our glands to take the voice of [mimic_voice], this will stop us from regenerating chemicals while active.") - to_chat(src, "Use this power again to return to our original voice and reproduce chemicals again.") - - spawn(0) - while(src && src.mind && src.mind.changeling && src.mind.changeling.mimicing) - src.mind.changeling.chem_charges = max(src.mind.changeling.chem_charges - 1, 0) - sleep(40) - if(src && src.mind && src.mind.changeling) - src.mind.changeling.mimicing = "" - ////////// - //STINGS// //They get a pretty header because there's just so fucking many of them ;_; - ////////// - -/mob/proc/sting_can_reach(mob/M as mob, sting_range = 1) - if(M.loc == src.loc) - return 1 //target and source are in the same thing - if(!isturf(src.loc) || !isturf(M.loc)) - to_chat(src, "We cannot reach \the [M] with a sting!") - return 0 //One is inside, the other is outside something. - // Maximum queued turfs set to 25; I don't *think* anything raises sting_range above 2, but if it does the 25 may need raising - if(!AStar(src.loc, M.loc, /turf/proc/AdjacentTurfs, /turf/proc/Distance, max_nodes=25, max_node_depth=sting_range)) //If we can't find a path, fail - to_chat(src, "We cannot find a path to sting \the [M] by!") - return 0 - return 1 - -//Handles the general sting code to reduce on copypasta (seeming as somebody decided to make SO MANY dumb abilities) -/mob/proc/changeling_sting(var/required_chems=0, var/verb_path, var/loud, sting_name = "unnamed sting") - var/datum/changeling/changeling = changeling_power(required_chems) - if(!changeling) return - - var/list/victims = list() - for(var/mob/living/carbon/human/C in oview(changeling.sting_range)) - victims += C - var/mob/living/carbon/human/T = input(src, "Who will we sting?") as null|anything in victims - - if(!T) return - if(!(T in view(changeling.sting_range))) return - if(!sting_can_reach(T, changeling.sting_range)) return - if(!changeling_power(required_chems)) return - var/obj/item/organ/external/target_limb = T.get_organ(src.zone_sel.selecting) - if (!target_limb) - to_chat(src, "[T] is missing that limb.") - return - changeling.chem_charges -= required_chems - changeling.sting_range = 1 - src.verbs -= verb_path - spawn(10) src.verbs += verb_path - if(!loud) - to_chat(src, "We stealthily sting [T].") - else - visible_message("[src] fires an organic shard into [T]!") - admin_attack_log(src, T, "Stung their victim using [sting_name]", "Was stung using [sting_name]", "stung using [sting_name]") - - for(var/obj/item/clothing/clothes in list(T.head, T.wear_mask, T.wear_suit, T.w_uniform, T.gloves, T.shoes)) - if(istype(clothes) && (clothes.body_parts_covered & target_limb.body_part) && (clothes.item_flags & ITEM_FLAG_THICKMATERIAL)) - to_chat(src, "[T]'s armor has protected them.") - return //thick clothes will protect from the sting - - if(T.isSynthetic() || BP_IS_ROBOTIC(target_limb)) return - if(!T.mind || !T.mind.changeling) return T //T will be affected by the sting - to_chat(T, "You feel a tiny prick.") - return - - -/mob/proc/changeling_lsdsting() - set category = "Changeling" - set name = "Hallucination Sting (15)" - set desc = "Causes terror in the target." - - var/mob/living/carbon/human/T = changeling_sting(15, /mob/proc/changeling_lsdsting, sting_name = "Hallucination Sting") - if(!T) return 0 - spawn(rand(300,600)) - if(T) T.hallucination(400, 80) - return 1 - -/mob/proc/changeling_silence_sting() - set category = "Changeling" - set name = "Silence sting (10)" - set desc="Sting target" - - var/mob/living/carbon/human/T = changeling_sting(10,/mob/proc/changeling_silence_sting, sting_name = "Silence Sting") - if(!T) return 0 - T.silent += 30 - return 1 - -/mob/proc/changeling_blind_sting() - set category = "Changeling" - set name = "Blind sting (20)" - set desc="Sting target" - - var/mob/living/carbon/human/T = changeling_sting(20,/mob/proc/changeling_blind_sting, sting_name = "Blind Sting") - if(!T) return 0 - to_chat(T, "Your eyes burn horrificly!") - T.disabilities |= NEARSIGHTED - spawn(300) T.disabilities &= ~NEARSIGHTED - T.eye_blind = 10 - T.eye_blurry = 20 - return 1 - -/mob/proc/changeling_deaf_sting() - set category = "Changeling" - set name = "Deaf sting (5)" - set desc="Sting target:" - - var/mob/living/carbon/human/T = changeling_sting(5,/mob/proc/changeling_deaf_sting, sting_name = "Deaf Sting") - if(!T) return 0 - to_chat(T, "Your ears pop and begin ringing loudly!") - T.ear_deaf += 15 - return 1 - -/mob/proc/changeling_DEATHsting() - set category = "Changeling" - set name = "Death Sting (40)" - set desc = "Causes spasms onto death." - var/loud = 1 - - var/mob/living/carbon/human/T = changeling_sting(40,/mob/proc/changeling_DEATHsting,loud, sting_name = "Death Sting") - if(!T) return 0 - to_chat(T, "You feel a small prick and your chest becomes tight.") - T.make_jittery(400) - if(T.reagents) T.reagents.add_reagent(/datum/reagent/lexorin, 10) - return 1 - -/mob/proc/changeling_extract_dna_sting() - set category = "Changeling" - set name = "Extract DNA Sting (40)" - set desc="Stealthily sting a target to extract their DNA." - - var/datum/changeling/changeling = null - if(src.mind && src.mind.changeling) - changeling = src.mind.changeling - if(!changeling) - return 0 - - var/mob/living/carbon/human/T = changeling_sting(40, /mob/proc/changeling_extract_dna_sting, sting_name = "Extract DNA Sting") - if(!T) return 0 - if((MUTATION_HUSK in T.mutations) || (T.species.species_flags & SPECIES_FLAG_NO_SCAN)) - to_chat(src, "We cannot extract DNA from this creature!") - return 0 - - if(T.species.species_flags & SPECIES_FLAG_NEED_DIRECT_ABSORB) - to_chat(src, "That species must be absorbed directly.") - return - - var/datum/absorbed_dna/newDNA = new(T.real_name, T.dna, T.species.name, T.languages) - absorbDNA(newDNA) - return 1 diff --git a/code/game/gamemodes/changeling/modularchangling.dm b/code/game/gamemodes/changeling/modularchangling.dm deleted file mode 100644 index bfd75916fdab1..0000000000000 --- a/code/game/gamemodes/changeling/modularchangling.dm +++ /dev/null @@ -1,484 +0,0 @@ -// READ: Don't use the apostrophe in name or desc. Causes script errors. - -var/global/list/powers = typesof(/datum/power/changeling) - /datum/power/changeling //needed for the badmin verb for now -var/global/list/datum/power/changeling/powerinstances = list() - -/datum/power //Could be used by other antags too - var/name = "Power" - var/desc = "Placeholder" - var/helptext = "" - var/isVerb = 1 // Is it an active power, or passive? - var/verbpath // Path to a verb that contains the effects. - -/datum/power/changeling - var/allowduringlesserform = 0 - var/genomecost = 500000 // Cost for the changling to evolve this power. - -/datum/power/changeling/absorb_dna - name = "Absorb DNA" - desc = "Permits us to syphon the DNA from a human. They become one with us, and we become stronger." - genomecost = 0 - verbpath = /mob/proc/changeling_absorb_dna - -/datum/power/changeling/transform - name = "Transform" - desc = "We take on the apperance and voice of one we have absorbed." - genomecost = 0 - verbpath = /mob/proc/changeling_transform - -/datum/power/changeling/fakedeath - name = "Regenerative Stasis" - desc = "We become weakened to a death-like state, where we will rise again from death." - helptext = "Can be used before or after death. Duration varies greatly." - genomecost = 0 - allowduringlesserform = 1 - verbpath = /mob/proc/changeling_fakedeath - -// Hivemind - -/datum/power/changeling/hive_upload - name = "Hive Channel" - desc = "We can channel a DNA into the airwaves, allowing our fellow changelings to absorb it and transform into it as if they acquired the DNA themselves." - helptext = "Allows other changelings to absorb the DNA you channel from the airwaves. Will not help them towards their absorb objectives." - genomecost = 0 - verbpath = /mob/proc/changeling_hiveupload - -/datum/power/changeling/hive_download - name = "Hive Absorb" - desc = "We can absorb a single DNA from the airwaves, allowing us to use more disguises with help from our fellow changelings." - helptext = "Allows you to absorb a single DNA and use it. Does not count towards your absorb objective." - genomecost = 0 - verbpath = /mob/proc/changeling_hivedownload - -/datum/power/changeling/lesser_form - name = "Lesser Form" - desc = "We debase ourselves and become lesser. We become a monkey." - genomecost = 4 - verbpath = /mob/proc/changeling_lesser_form - -/datum/power/changeling/deaf_sting - name = "Deaf Sting" - desc = "We silently sting a human, completely deafening them for a short time." - genomecost = 1 - allowduringlesserform = 1 - verbpath = /mob/proc/changeling_deaf_sting - -/datum/power/changeling/blind_sting - name = "Blind Sting" - desc = "We silently sting a human, completely blinding them for a short time." - genomecost = 2 - allowduringlesserform = 1 - verbpath = /mob/proc/changeling_blind_sting - -/datum/power/changeling/silence_sting - name = "Silence Sting" - desc = "We silently sting a human, completely silencing them for a short time." - helptext = "Does not provide a warning to a victim that they have been stung, until they try to speak and cannot." - genomecost = 3 - allowduringlesserform = 1 - verbpath = /mob/proc/changeling_silence_sting - -/datum/power/changeling/mimicvoice - name = "Mimic Voice" - desc = "We shape our vocal glands to sound like a desired voice." - helptext = "Will turn your voice into the name that you enter. We must constantly expend chemicals to maintain our form like this" - genomecost = 1 - verbpath = /mob/proc/changeling_mimicvoice - -/datum/power/changeling/extractdna - name = "Extract DNA" - desc = "We stealthily sting a target and extract the DNA from them." - helptext = "Will give you the DNA of your target, allowing you to transform into them. Does not count towards absorb objectives." - genomecost = 2 - allowduringlesserform = 1 - verbpath = /mob/proc/changeling_extract_dna_sting - -/datum/power/changeling/LSDSting - name = "Hallucination Sting" - desc = "We evolve the ability to sting a target with a powerful hallunicationary chemical." - helptext = "The target does not notice they have been stung. The effect occurs after 30 to 60 seconds." - genomecost = 3 - verbpath = /mob/proc/changeling_lsdsting - -/datum/power/changeling/DeathSting - name = "Death Sting" - desc = "We sting a human, filling them with potent chemicals. Their rapid death is all but assured, but our crime will be obvious." - helptext = "It will be clear to any surrounding witnesses if you use this power." - genomecost = 10 - verbpath = /mob/proc/changeling_DEATHsting - - -/datum/power/changeling/boost_range - name = "Boost Range" - desc = "We evolve the ability to shoot our stingers at humans, with some preperation." - genomecost = 2 - allowduringlesserform = 1 - verbpath = /mob/proc/changeling_boost_range - -/datum/power/changeling/Epinephrine - name = "Epinephrine sacs" - desc = "We evolve additional sacs of adrenaline throughout our body." - helptext = "Gives the ability to instantly recover from stuns. High chemical cost." - genomecost = 3 - verbpath = /mob/proc/changeling_unstun - -/datum/power/changeling/ChemicalSynth - name = "Rapid Chemical-Synthesis" - desc = "We evolve new pathways for producing our necessary chemicals, permitting us to naturally create them faster." - helptext = "Doubles the rate at which we naturally recharge chemicals." - genomecost = 4 - isVerb = 0 - verbpath = /mob/proc/changeling_fastchemical -/* -/datum/power/changeling/AdvChemicalSynth - name = "Advanced Chemical-Synthesis" - desc = "We evolve new pathways for producing our necessary chemicals, permitting us to naturally create them faster." - helptext = "Doubles the rate at which we naturally recharge chemicals." - genomecost = 8 - isVerb = 0 - verbpath = /mob/proc/changeling_fastchemical -*/ -/datum/power/changeling/EngorgedGlands - name = "Engorged Chemical Glands" - desc = "Our chemical glands swell, permitting us to store more chemicals inside of them." - helptext = "Allows us to store an extra 25 units of chemicals." - genomecost = 4 - isVerb = 0 - verbpath = /mob/proc/changeling_engorgedglands - -/datum/power/changeling/DigitalCamoflague - name = "Digital Camoflauge" - desc = "We evolve the ability to distort our form and proprtions, defeating common altgorthms used to detect lifeforms on cameras." - helptext = "We cannot be tracked by camera while using this skill. However, humans looking at us will find us.. uncanny. We must constantly expend chemicals to maintain our form like this." - genomecost = 1 - allowduringlesserform = 1 - verbpath = /mob/proc/changeling_digitalcamo - -/datum/power/changeling/rapidregeneration - name = "Rapid Regeneration" - desc = "We evolve the ability to rapidly regenerate, negating the need for stasis." - helptext = "Heals a moderate amount of damage every tick." - genomecost = 7 - verbpath = /mob/proc/changeling_rapidregen - - - -// Modularchangling, totally stolen from the new player panel. YAYY -/datum/changeling/proc/EvolutionMenu()//The new one - set category = "Changeling" - set desc = "Level up!" - - if(!usr || !usr.mind || !usr.mind.changeling) return - src = usr.mind.changeling - - if(!powerinstances.len) - for(var/P in powers) - powerinstances += new P() - - var/dat = "Changling Evolution Menu" - - //javascript, the part that does most of the work~ - dat += {" - - - - - - - "} - - //body tag start + onload and onkeypress (onkeyup) javascript event calls - dat += "" - - //title + search bar - dat += {" - - - - - - - - -
      - Changling Evolution Menu
      - Hover over a power to see more information
      - Current evolution points left to evolve with: [geneticpoints]
      - Absorb genomes to acquire more evolution points -

      -

      - Search: -
      - - "} - - //player table header - dat += {" - - "} - - var/i = 1 - for(var/datum/power/changeling/P in powerinstances) - var/ownsthis = 0 - - if(P in purchasedpowers) - ownsthis = 1 - - - var/color = "#e6e6e6" - if(i%2 == 0) - color = "#f2f2f2" - - - dat += {" - - - - - - "} - - i++ - - - //player table ending - dat += {" -
      - - - Evolve [P] - Cost: [ownsthis ? "Purchased" : P.genomecost] - -
      -
      -
      - - - - "} - - show_browser(usr, dat, "window=powers;size=900x480") - - -/datum/changeling/Topic(href, href_list) - ..() - if(!ismob(usr)) - return - - if(href_list["P"]) - var/datum/mind/M = usr.mind - if(!istype(M)) - return - purchasePower(M, href_list["P"]) - call(/datum/changeling/proc/EvolutionMenu)() - - - -/datum/changeling/proc/purchasePower(var/datum/mind/M, var/Pname, var/remake_verbs = 1) - if(!M || !M.changeling) - return - - var/datum/power/changeling/Thepower = Pname - - - for (var/datum/power/changeling/P in powerinstances) -// log_debug("[P] - [Pname] = [P.name == Pname ? "True" : "False"]") - - if(P.name == Pname) - Thepower = P - break - - - if(Thepower == null) - to_chat(M.current, "This is awkward. Changeling power purchase failed, please report this bug to a coder!") - return - - if(Thepower in purchasedpowers) - to_chat(M.current, "We have already evolved this ability!") - return - - - if(geneticpoints < Thepower.genomecost) - to_chat(M.current, "We cannot evolve this... yet. We must acquire more DNA.") - return - - geneticpoints -= Thepower.genomecost - - purchasedpowers += Thepower - - if(!Thepower.isVerb && Thepower.verbpath) - call(M.current, Thepower.verbpath)() - else if(remake_verbs) - M.current.make_changeling() - diff --git a/code/game/gamemodes/cult/cult.dm b/code/game/gamemodes/cult/cult.dm deleted file mode 100644 index 506c1e08176f9..0000000000000 --- a/code/game/gamemodes/cult/cult.dm +++ /dev/null @@ -1,9 +0,0 @@ -/datum/game_mode/cult - name = "Cult" - round_description = "Some crewmembers are attempting to start a cult!" - extended_round_description = "There has been an infiltration by a fanatical group of death-cultists! They will use powers from beyond your comprehension to subvert you to their cause and ultimately please their gods through sacrificial summons and physical immolation! Try to survive!" - config_tag = "cult" - required_players = 10 - required_enemies = 3 - end_on_antag_death = FALSE - antag_tags = list(MODE_CULTIST) diff --git a/code/game/gamemodes/cult/cult_items.dm b/code/game/gamemodes/cult/cult_items.dm deleted file mode 100644 index a062eccfc42a6..0000000000000 --- a/code/game/gamemodes/cult/cult_items.dm +++ /dev/null @@ -1,144 +0,0 @@ -/obj/item/melee/cultblade - name = "cult blade" - desc = "An arcane weapon wielded by the followers of Nar-Sie." - icon = 'icons/obj/weapons/melee_physical.dmi' - icon_state = "cultblade" - item_state = "cultblade" - edge = TRUE - sharp = TRUE - w_class = ITEM_SIZE_LARGE - force = 30 - throwforce = 10 - hitsound = 'sound/weapons/bladeslice.ogg' - attack_verb = list("attacked", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut") - -/obj/item/melee/cultblade/attack(mob/living/M, mob/living/user, var/target_zone) - if(iscultist(user)) - return ..() - - var/zone = (user.hand ? BP_L_ARM : BP_R_ARM) - - var/obj/item/organ/external/affecting = null - if(ishuman(user)) - var/mob/living/carbon/human/H = user - affecting = H.get_organ(zone) - - if(affecting) - to_chat(user, "An unexplicable force rips through your [affecting.name], tearing the sword from your grasp!") - else - to_chat(user, "An unexplicable force rips through you, tearing the sword from your grasp!") - - //random amount of damage between half of the blade's force and the full force of the blade. - user.apply_damage(rand(force/2, force), DAMAGE_BRUTE, zone, (DAMAGE_FLAG_SHARP | DAMAGE_FLAG_EDGE), armor_pen = 100) - user.Weaken(5) - - if(user.unEquip(src)) - throw_at(get_edge_target_turf(src, pick(GLOB.alldirs)), rand(1,3), throw_speed) - - var/spooky = pick('sound/hallucinations/growl1.ogg', 'sound/hallucinations/growl2.ogg', 'sound/hallucinations/growl3.ogg', 'sound/hallucinations/wail.ogg') - playsound(loc, spooky, 50, 1) - - return 1 - -/obj/item/melee/cultblade/pickup(mob/living/user as mob) - if(!iscultist(user)) - to_chat(user, "An overwhelming feeling of dread comes over you as you pick up the cultist's sword. It would be wise to be rid of this blade quickly.") - user.make_dizzy(120) - . = ..() - - - -/obj/item/clothing/head/culthood - name = "cult hood" - icon_state = "culthood" - desc = "A hood worn by the followers of Nar-Sie." - flags_inv = HIDEFACE - body_parts_covered = HEAD - armor = list( - melee = ARMOR_MELEE_RESISTANT, - bullet = ARMOR_BALLISTIC_SMALL - ) - cold_protection = HEAD - min_cold_protection_temperature = SPACE_HELMET_MIN_COLD_PROTECTION_TEMPERATURE - siemens_coefficient = 0.8 //That's a pretty cool opening in the hood. Also: Cloth making physical contact to the skull. - -/obj/item/clothing/head/culthood/magus - name = "magus helm" - icon_state = "magus" - desc = "A helm worn by the followers of Nar-Sie." - flags_inv = HIDEFACE | BLOCKHAIR - body_parts_covered = HEAD|FACE|EYES - armor = list( - melee = ARMOR_MELEE_RESISTANT, - bullet = ARMOR_BALLISTIC_PISTOL, - laser = ARMOR_LASER_HANDGUNS, - energy = ARMOR_ENERGY_RESISTANT - ) - -/obj/item/clothing/head/culthood/alt - icon_state = "cult_hoodalt" - -/obj/item/clothing/suit/cultrobes - name = "cult robes" - desc = "A set of durable robes worn by the followers of Nar-Sie." - icon_state = "cultrobes" - body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS - allowed = list(/obj/item/book/tome,/obj/item/melee/cultblade) - armor = list( - melee = ARMOR_MELEE_RESISTANT, - bullet = ARMOR_BALLISTIC_PISTOL, - laser = ARMOR_LASER_SMALL, - energy = ARMOR_ENERGY_SMALL, - bomb = ARMOR_BOMB_PADDED - ) - flags_inv = HIDEJUMPSUIT - siemens_coefficient = 0.6 - -/obj/item/clothing/suit/cultrobes/alt - icon_state = "cultrobesalt" - -/obj/item/clothing/suit/cultrobes/magusred - name = "magus robes" - desc = "A set of plated robes worn by the followers of Nar-Sie." - icon_state = "magusred" - body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS - flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT - armor = list( - melee = ARMOR_MELEE_VERY_HIGH, - bullet = ARMOR_BALLISTIC_RIFLE, - laser = ARMOR_LASER_HANDGUNS, - energy = ARMOR_ENERGY_RESISTANT, - bomb = ARMOR_BOMB_PADDED - ) - -/obj/item/clothing/head/helmet/space/cult - name = "cult helmet" - desc = "A space worthy helmet used by the followers of Nar-Sie." - icon_state = "cult_helmet" - armor = list( - melee = ARMOR_MELEE_RESISTANT, - bullet = ARMOR_BALLISTIC_RIFLE, - laser = ARMOR_LASER_HANDGUNS, - energy = ARMOR_ENERGY_MINOR, - bomb = ARMOR_BOMB_PADDED, - bio = ARMOR_BIO_SHIELDED, - rad = ARMOR_RAD_MINOR - ) //Real tanky shit. - siemens_coefficient = 0.3 //Bone is not very conducive to electricity. - -/obj/item/clothing/suit/space/cult - name = "cult armour" - icon_state = "cult_armour" - desc = "A bulky suit of armour, bristling with spikes. It looks space proof." - allowed = list(/obj/item/book/tome,/obj/item/melee/cultblade,/obj/item/tank,/obj/item/device/suit_cooling_unit) - armor = list( - melee = ARMOR_MELEE_RESISTANT, - bullet = ARMOR_BALLISTIC_RIFLE, - laser = ARMOR_LASER_HANDGUNS, - energy = ARMOR_ENERGY_MINOR, - bomb = ARMOR_BOMB_PADDED, - bio = ARMOR_BIO_SHIELDED, - rad = ARMOR_RAD_MINOR - ) - siemens_coefficient = 0.2 - body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS|HANDS diff --git a/code/game/gamemodes/cult/cult_structures.dm b/code/game/gamemodes/cult/cult_structures.dm deleted file mode 100644 index 2f73dd36e27ff..0000000000000 --- a/code/game/gamemodes/cult/cult_structures.dm +++ /dev/null @@ -1,137 +0,0 @@ -/obj/structure/cult - density = TRUE - anchored = TRUE - icon = 'icons/obj/cult.dmi' - -/obj/structure/cult/talisman - name = "Altar" - desc = "A bloodstained altar dedicated to Nar-Sie." - icon_state = "talismanaltar" - - -/obj/structure/cult/forge - name = "Daemon forge" - desc = "A forge used in crafting the unholy weapons used by the armies of Nar-Sie." - icon_state = "forge" - -/obj/structure/cult/pylon - name = "pylon" - desc = "A floating crystal that hums with an unearthly energy." - icon = 'icons/obj/pylon.dmi' - icon_state = "pylon" - light_max_bright = 0.5 - light_inner_range = 1 - light_outer_range = 13 - light_color = "#3e0000" - health_max = 20 - health_min_damage = 4 - damage_hitsound = 'sound/effects/Glasshit.ogg' - -/obj/structure/cult/pylon/attackby(obj/item/W, mob/user) - if (istype(W, /obj/item/natural_weapon/cult_builder)) - if (!health_damaged()) - to_chat(user, SPAN_WARNING("\The [src] is fully repaired.")) - else - user.visible_message( - SPAN_NOTICE("\The [user] mends some of the cracks on \the [src]."), - SPAN_NOTICE("You repair some of \the [src]'s damage.") - ) - restore_health(5) - return - - ..() - -/obj/structure/cult/tome - name = "Desk" - desc = "A desk covered in arcane manuscripts and tomes in unknown languages. Looking at the text makes your skin crawl." - icon_state = "tomealtar" - -//sprites for this no longer exist -Pete -//(they were stolen from another game anyway) -/* -/obj/structure/cult/pillar - name = "Pillar" - desc = "This should not exist." - icon_state = "pillar" - icon = 'magic_pillar.dmi' -*/ - -/obj/effect/gateway - name = "gateway" - desc = "You're pretty sure that abyss is staring back." - icon = 'icons/effects/64x64.dmi' - icon_state = "portal" - pixel_x = -16 - pixel_y = -16 - plane = EFFECTS_ABOVE_LIGHTING_PLANE - density = TRUE - unacidable = TRUE - anchored = TRUE - var/spawnable = null - -/obj/effect/gateway/active - light_outer_range=5 - light_color="#ff0000" - spawnable=list( - /mob/living/simple_animal/hostile/scarybat, - /mob/living/simple_animal/hostile/creature, - /mob/living/simple_animal/hostile/faithless - ) - -/obj/effect/gateway/active/cult - light_outer_range=5 - light_color="#ff0000" - spawnable=list( - /mob/living/simple_animal/hostile/scarybat/cult, - /mob/living/simple_animal/hostile/creature/cult, - /mob/living/simple_animal/hostile/faithless/cult - ) - -/obj/effect/gateway/active/New() - ..() - addtimer(CALLBACK(src, .proc/create_and_delete), rand(30,60) SECONDS) - - -/obj/effect/gateway/active/proc/create_and_delete() - var/t = pick(spawnable) - new t(src.loc) - qdel(src) - -/obj/effect/gateway/active/Crossed(var/atom/A) - if(!istype(A, /mob/living)) - return - - var/mob/living/M = A - - if(M.stat != DEAD) - if(M.HasMovementHandler(/datum/movement_handler/mob/transformation)) - return - if(M.has_brain_worms()) - return //Borer stuff - RR - - if(iscultist(M)) return - if(!ishuman(M) && !isrobot(M)) return - - M.AddMovementHandler(/datum/movement_handler/mob/transformation) - M.icon = null - M.overlays.len = 0 - M.set_invisibility(101) - - if(istype(M, /mob/living/silicon/robot)) - var/mob/living/silicon/robot/Robot = M - if(Robot.mmi) - qdel(Robot.mmi) - else - for(var/obj/item/W in M) - M.drop_from_inventory(W) - if(istype(W, /obj/item/implant)) - qdel(W) - - var/mob/living/new_mob = new /mob/living/simple_animal/passive/corgi(A.loc) - new_mob.a_intent = I_HURT - if(M.mind) - M.mind.transfer_to(new_mob) - else - new_mob.key = M.key - - to_chat(new_mob, "Your form morphs into that of a corgi.")//Because we don't have cluwnes diff --git a/code/game/gamemodes/cult/cultify/de-cultify.dm b/code/game/gamemodes/cult/cultify/de-cultify.dm deleted file mode 100644 index d7f347916051c..0000000000000 --- a/code/game/gamemodes/cult/cultify/de-cultify.dm +++ /dev/null @@ -1,42 +0,0 @@ -/turf/unsimulated/wall/cult/attackby(var/obj/item/I, var/mob/user) - if(istype(I, /obj/item/nullrod)) - user.visible_message("\The [user] touches \the [src] with \the [I], and it shifts.", "You touch \the [src] with \the [I], and it shifts.") - ChangeTurf(/turf/unsimulated/wall) - return - ..() - -/turf/simulated/wall/cult/attackby(obj/item/I, mob/user) - if (istype(I, /obj/item/nullrod)) - user.visible_message( - SPAN_NOTICE("\The [user] touches \the [src] with \the [I], and it shifts."), - SPAN_NOTICE("You touch \the [src] with \the [I], and it shifts.") - ) - decultify_wall() - return - ..() - -/turf/simulated/floor/cult/attackby(obj/item/I, mob/user) - if (istype(I, /obj/item/nullrod)) - user.visible_message( - SPAN_NOTICE("\The [user] touches \the [src] with \the [I], and it shifts."), - SPAN_NOTICE("You touch \the [src] with \the [I], and it shifts.") - ) - decultify_floor() - return - ..() - -/turf/proc/decultify_wall() - var/turf/simulated/wall/cult/wall = src - if (!istype(wall)) - return - if (wall.reinf_material) - ChangeTurf(/turf/simulated/wall/r_wall/prepainted) - else - ChangeTurf(/turf/simulated/wall/prepainted) - -/turf/proc/decultify_floor() - var/turf/simulated/floor/cult/floor = src - if (!istype(floor)) - return - else - ChangeTurf(/turf/simulated/floor/plating) diff --git a/code/game/gamemodes/cult/cultify/mob.dm b/code/game/gamemodes/cult/cultify/mob.dm deleted file mode 100644 index 98e2211698d55..0000000000000 --- a/code/game/gamemodes/cult/cultify/mob.dm +++ /dev/null @@ -1,62 +0,0 @@ -/mob - //thou shall always be able to see the Geometer of Blood - var/image/narsimage = null - var/image/narglow = null - -/mob/proc/cultify() - return - -/mob/observer/ghost/cultify() - if(icon_state != "ghost-narsie") - icon = 'icons/mob/mob.dmi' - icon_state = "ghost-narsie" - overlays.Cut() - set_invisibility(0) - to_chat(src, "Even as a non-corporal being, you can feel Nar-Sie's presence altering you. You are now visible to everyone.") - -/mob/living/cultify() - if(iscultist(src) && client) - var/mob/living/simple_animal/construct/harvester/C = new(get_turf(src)) - mind.transfer_to(C) - to_chat(C, "The Geometer of Blood is overjoyed to be reunited with its followers, and accepts your body in sacrifice. As reward, you have been gifted with the shell of an Harvester.
      Your tendrils can use and draw runes without need for a tome, your eyes can see beings through walls, and your mind can open any door. Use these assets to serve Nar-Sie and bring him any remaining living human in the world.
      You can teleport yourself back to Nar-Sie along with any being under yourself at any time using your \"Harvest\" spell.
      ") - dust() - else if(client) - var/mob/observer/ghost/G = (ghostize()) - G.icon = 'icons/mob/mob.dmi' - G.icon_state = "ghost-narsie" - G.overlays.Cut() - G.set_invisibility(0) - to_chat(G, "You feel relieved as what's left of your soul finally escapes its prison of flesh.") - else - dust() - -/mob/proc/see_narsie(var/obj/singularity/narsie/large/N, var/dir) - if(N.chained) - if(narsimage) - qdel(narsimage) - qdel(narglow) - return - if((N.z == src.z)&&(get_dist(N,src) <= (N.consume_range+10)) && !(N in view(src))) - if(!narsimage) //Create narsimage - narsimage = image('icons/obj/narsie.dmi',src.loc,"narsie",9,1) - narsimage.mouse_opacity = 0 - if(!narglow) //Create narglow - narglow = image('icons/obj/narsie.dmi',narsimage.loc,"glow-narsie",12,1) - narglow.mouse_opacity = 0 - //Else if no dir is given, simply send them the image of narsie - var/new_x = 32 * (N.x - src.x) + N.pixel_x - var/new_y = 32 * (N.y - src.y) + N.pixel_y - narsimage.pixel_x = new_x - narsimage.pixel_y = new_y - narglow.pixel_x = new_x - narglow.pixel_y = new_y - narsimage.loc = src.loc - narglow.loc = src.loc - //Display the new narsimage to the player - image_to(src, narsimage) - image_to(src, narglow) - - else - if(narsimage) - QDEL_NULL(narsimage) - QDEL_NULL(narglow) diff --git a/code/game/gamemodes/cult/cultify/turf.dm b/code/game/gamemodes/cult/cultify/turf.dm deleted file mode 100644 index f65515a7ba487..0000000000000 --- a/code/game/gamemodes/cult/cultify/turf.dm +++ /dev/null @@ -1,40 +0,0 @@ -/turf/proc/cultify() - ChangeTurf(/turf/space) - return - -/turf/simulated/floor/cultify() - //todo: flooring datum cultify check - cultify_floor() - -/turf/simulated/shuttle/wall/cultify() - cultify_wall() - -/turf/simulated/wall/cultify() - cultify_wall() - -/turf/simulated/wall/cult/cultify() - return - -/turf/unsimulated/wall/cult/cultify() - return - -/turf/unsimulated/beach/cultify() - return - -/turf/unsimulated/wall/cultify() - cultify_wall() - -/turf/simulated/floor/proc/cultify_floor() - set_flooring(decls_repository.get_decl(/decl/flooring/reinforced/cult)) - GLOB.cult.add_cultiness(CULTINESS_PER_TURF) - - -/turf/proc/cultify_wall() - var/turf/simulated/wall/wall = src - if(!istype(wall)) - return - if(wall.reinf_material) - ChangeTurf(/turf/simulated/wall/cult/reinf) - else - ChangeTurf(/turf/simulated/wall/cult) - GLOB.cult.add_cultiness(CULTINESS_PER_TURF) diff --git a/code/game/gamemodes/cult/ghosts.dm b/code/game/gamemodes/cult/ghosts.dm deleted file mode 100644 index 7f003a9c6c7b6..0000000000000 --- a/code/game/gamemodes/cult/ghosts.dm +++ /dev/null @@ -1,289 +0,0 @@ -/mob/observer/ghost/var/ghost_magic_cd = 0 - -/datum/antagonist/cultist/proc/add_ghost_magic(var/mob/observer/ghost/M) - if(max_cult_rating >= CULT_GHOSTS_1) - M.verbs += /mob/observer/ghost/proc/flick_lights - M.verbs += /mob/observer/ghost/proc/bloody_doodle - M.verbs += /mob/observer/ghost/proc/shatter_glass - M.verbs += /mob/observer/ghost/proc/slice - if(max_cult_rating >= CULT_GHOSTS_2) - M.verbs += /mob/observer/ghost/proc/move_item - M.verbs += /mob/observer/ghost/proc/whisper_to_cultist - M.verbs += /mob/observer/ghost/proc/bite_someone - M.verbs += /mob/observer/ghost/proc/chill_someone - if(max_cult_rating >= CULT_GHOSTS_3) - M.verbs += /mob/observer/ghost/proc/whisper_to_anyone - M.verbs += /mob/observer/ghost/proc/bloodless_doodle - M.verbs += /mob/observer/ghost/proc/toggle_visiblity - -/mob/observer/ghost/proc/ghost_ability_check() - var/turf/T = get_turf(src) - if(T.holy) - to_chat(src, "You may not use your abilities on the blessed ground.") - return 0 - if(ghost_magic_cd > world.time) - to_chat(src, "You need [round((ghost_magic_cd - world.time) / 10)] more seconds before you can use your abilities.") - return 0 - return 1 - -/mob/observer/ghost/proc/flick_lights() - set category = "Cult" - set name = "Flick lights" - set desc = "Flick some lights around you." - - if(!ghost_ability_check()) - return - - for(var/obj/machinery/light/L in range(3)) - L.flicker() - - ghost_magic_cd = world.time + 30 SECONDS - -/mob/observer/ghost/proc/bloody_doodle() - set category = "Cult" - set name = "Write in blood" - set desc = "Write a short message in blood on the floor or a wall. Remember, no IC in OOC or OOC in IC." - - bloody_doodle_proc(0) - -/mob/observer/ghost/proc/bloody_doodle_proc(var/bloodless = 0) - if(!ghost_ability_check()) - return - - var/doodle_color = COLOR_BLOOD_HUMAN - - var/turf/simulated/T = get_turf(src) - if(!istype(T)) - to_chat(src, "You cannot doodle there.") - return - - var/num_doodles = 0 - for(var/obj/effect/decal/cleanable/blood/writing/W in T) - num_doodles++ - if(num_doodles > 4) - to_chat(src, "There is no space to write on!") - return - - var/obj/effect/decal/cleanable/blood/choice - if(!bloodless) - var/list/choices = list() - for(var/obj/effect/decal/cleanable/blood/B in range(1)) - if(B.amount > 0) - choices += B - - if(!choices.len) - to_chat(src, "There is no blood to use nearby.") - return - - choice = input(src, "What blood would you like to use?") as null|anything in choices - if(!choice) - return - - if(choice.basecolor) - doodle_color = choice.basecolor - - var/max_length = 50 - - var/message = sanitize(input("Write a message. It cannot be longer than [max_length] characters.", "Blood writing", "")) - - if(!ghost_ability_check()) - return - - if(message && (bloodless || (choice && (choice in range(1))))) - if(length(message) > max_length) - message += "-" - to_chat(src, "You ran out of blood to write with!") - - var/obj/effect/decal/cleanable/blood/writing/W = new(T) - W.basecolor = doodle_color - W.update_icon() - W.message = message - W.add_hiddenprint(src) - if(!bloodless) - W.visible_message("Invisible fingers crudely paint something in blood on \the [T].") - else - W.visible_message("Blood appears out of nowhere as invisible fingers crudely paint something on \the [T].") - - log_admin("[src] ([src.key]) used ghost magic to write '[message]' - [x]-[y]-[z]") - - ghost_magic_cd = world.time + 30 SECONDS - -/mob/observer/ghost/proc/shatter_glass() - set category = "Cult" - set name = "Noise: glass shatter" - set desc = "Make a sound of glass being shattered." - - if(!ghost_ability_check()) - return - - playsound(loc, "shatter", 50, 1) - - ghost_magic_cd = world.time + 5 SECONDS - -/mob/observer/ghost/proc/slice() - set category = "Cult" - set name = "Noise: slice" - set desc = "Make a sound of a sword hit." - - if(!ghost_ability_check()) - return - - playsound(loc, 'sound/weapons/bladeslice.ogg', 50, 1) - - ghost_magic_cd = world.time + 5 SECONDS - -/mob/observer/ghost/proc/move_item() - set category = "Cult" - set name = "Move item" - set desc = "Move a small item to where you are." - - if(!ghost_ability_check()) - return - - var/turf/T = get_turf(src) - - var/list/obj/item/choices = list() - for(var/obj/item/I in range(1)) - if(I.w_class <= 2) - choices += I - - if(!choices.len) - to_chat(src, "There are no suitable items nearby.") - return - - var/obj/item/choice = input(src, "What item would you like to pull?") as null|anything in choices - if(!choice || !(choice in range(1)) || choice.w_class > 2) - return - - if(!ghost_ability_check()) - return - - if(step_to(choice, T)) - choice.visible_message("\The [choice] suddenly moves!") - - ghost_magic_cd = world.time + 60 SECONDS - -/mob/observer/ghost/proc/whisper_to_cultist() - set category = "Cult" - set name = "Whisper to cultist" - set desc = "Whisper to a human of your choice. They won't understand you unless they're a cultist though." - - whisper_proc() - -/mob/observer/ghost/proc/whisper_proc(var/anyone = 0) - if(!ghost_ability_check()) - return - - var/list/mob/living/choices = list() - for(var/mob/living/M in range(1)) - choices += M - - var/mob/living/choice = input(src, "Whom do you want to whisper to?") as null|anything in choices - if(!choice) - return - - var/message = sanitize(input("Decide what you want to whisper.", "Whisper", "")) - - if(!ghost_ability_check()) - return - - if(message) - if(iscultist(choice) || anyone) - to_chat(choice, "You hear a faint whisper... It says... \"[message]\"") - log_and_message_admins("used ghost magic to say '[message]' to \the [choice] and was heard - [x]-[y]-[z]") - else - to_chat(choice, "You hear a faint whisper, but you can't make out the words.") - log_and_message_admins("used ghost magic to say '[message]' to \the [choice] but wasn't heard - [x]-[y]-[z]") - to_chat(src, "You whisper to \the [choice]. Perhaps they heard you.") - - ghost_magic_cd = world.time + 100 SECONDS - -/mob/observer/ghost/proc/bite_someone() - set category = "Cult" - set name = "Bite" - set desc = "Bite or scratch someone." - - if(!ghost_ability_check()) - return - - var/list/mob/living/carbon/human/choices = list() - for(var/mob/living/carbon/human/H in range(1)) - choices += H - - var/mob/living/carbon/human/choice = input(src, "Whom do you want to scratch?") as null|anything in choices - if(!choice) - return - - if(!ghost_ability_check()) - return - - var/method = pick("bit", "scratched") - to_chat(choice, "Something invisible [method] you!") - choice.apply_effect(5, EFFECT_PAIN, 0) - to_chat(src, "You [method] \the [choice].") - - log_and_message_admins("used ghost magic to bite \the [choice] - [x]-[y]-[z]") - - ghost_magic_cd = world.time + 60 SECONDS - -/mob/observer/ghost/proc/chill_someone() - set category = "Cult" - set name = "Chill" - set desc = "Pass through someone, making them feel the chill of afterlife for a moment." - - if(!ghost_ability_check()) - return - - var/list/mob/living/carbon/human/choices = list() - for(var/mob/living/carbon/human/H in range(1)) - choices += H - - var/mob/living/carbon/human/choice = input(src, "Whom do you want to scare?") as null|anything in choices - if(!choice) - return - - if(!ghost_ability_check()) - return - - to_chat(choice, "You feel as if something cold passed through you!") - if(choice.bodytemperature >= choice.species.cold_level_1 + 1) - choice.bodytemperature = max(choice.species.cold_level_1 + 1, choice.bodytemperature - 30) - to_chat(src, "You pass through \the [choice], giving them a sudden chill.") - - log_and_message_admins("used ghost magic to chill \the [choice] - [x]-[y]-[z]") - - ghost_magic_cd = world.time + 60 SECONDS - -/mob/observer/ghost/proc/whisper_to_anyone() - set category = "Cult" - set name = "Whisper to mind" - set desc = "Whisper to a human of your choice." - - whisper_proc(1) - -/mob/observer/ghost/proc/bloodless_doodle() - set category = "Cult" - set name = "Write in own blood" - set desc = "Write a short message in blood on the floor or a wall. You don't need blood nearby to use this." - - bloody_doodle_proc(1) - -/mob/observer/ghost/proc/toggle_visiblity() - set category = "Cult" - set name = "Toggle Visibility" - set desc = "Allows you to become visible or invisible at will." - - if(invisibility && !ghost_ability_check()) - return - - if(invisibility == 0) - ghost_magic_cd = world.time + 60 SECONDS - to_chat(src, "You are now invisible.") - visible_message("It fades from sight...") - set_invisibility(INVISIBILITY_OBSERVER) - mouse_opacity = 1 - else - ghost_magic_cd = world.time + 60 SECONDS - to_chat(src, "You are now visible.") - set_invisibility(0) - mouse_opacity = 0 // This is so they don't make people invincible to melee attacks by hovering over them diff --git a/code/game/gamemodes/cult/hell_universe.dm b/code/game/gamemodes/cult/hell_universe.dm deleted file mode 100644 index c198b42053a5f..0000000000000 --- a/code/game/gamemodes/cult/hell_universe.dm +++ /dev/null @@ -1,56 +0,0 @@ -/* - -In short: - * Random area alarms - * All areas jammed - * Random gateways spawning hellmonsters (and turn people into cluwnes if ran into) - * Broken APCs/Fire Alarms - * Scary music - * Random tiles changing to culty tiles. - -*/ -/datum/universal_state/hell - name = "Hell Rising" - desc = "OH FUCK OH FUCK OH FUCK" - -/datum/universal_state/hell/OnShuttleCall(var/mob/user) - return 1 - /* - if(user) - to_chat(user, "All you hear on the frequency is static and panicked screaming. There will be no shuttle call today.") - return 0 - */ - - -// Apply changes when entering state -/datum/universal_state/hell/OnEnter() - set background = 1 - - //Separated into separate procs for profiling - MiscSet() - KillMobs() - SSskybox.change_skybox("narsie", new_use_stars = FALSE, new_use_overmap_details = FALSE) - -/datum/universal_state/hell/OnExit() - SSskybox.change_skybox("dyable", new_use_stars = TRUE, new_use_overmap_details = TRUE) - for (var/mob/living/simple_animal/S in GLOB.living_mob_list_) - if (S.faction == "cult") - to_chat(S, SPAN_OCCULT("You hear a terrible scream from a place beyond reality, as a life's sacrifice banishes your master. The dark power animating your form wavers, and withdraws, leaving it an unliving shell of meat. Your mind puffs away, like mist under a hot sun.")) - S.set_stat(DEAD) - for (var/turf/simulated/wall/cult/wall) - wall.decultify_wall() - for (var/turf/simulated/floor/cult/floor) - floor.decultify_floor() - for (var/obj/effect/gateway/active/cult/G) - qdel(G) - return - -/datum/universal_state/hell/proc/MiscSet() - for(var/turf/simulated/floor/T) - if(!T.holy && prob(1)) - new /obj/effect/gateway/active/cult(T) - -/datum/universal_state/hell/proc/KillMobs() - for(var/mob/living/simple_animal/M in SSmobs.mob_list) - if(M && !M.client) - M.set_stat(DEAD) diff --git a/code/game/gamemodes/cult/manifest.dm b/code/game/gamemodes/cult/manifest.dm deleted file mode 100644 index 632c16ec1c8b9..0000000000000 --- a/code/game/gamemodes/cult/manifest.dm +++ /dev/null @@ -1,21 +0,0 @@ -/datum/species/human/cult - name = "Cult" - spawn_flags = SPECIES_IS_RESTRICTED - brute_mod = 2 - burn_mod = 2 - species_flags = SPECIES_FLAG_NO_SCAN - force_cultural_info = list( - TAG_CULTURE = CULTURE_CULTIST, - TAG_HOMEWORLD = HOME_SYSTEM_STATELESS, - TAG_FACTION = FACTION_OTHER - ) - -/datum/species/human/cult/handle_death(var/mob/living/carbon/human/H) - spawn(1) - if(H) - H.dust() - -/datum/species/human/cult/handle_post_spawn(var/mob/living/carbon/human/H) - H.skin_tone = 35 - H.eye_color = "#e60707" - H.update_eyes() diff --git a/code/game/gamemodes/cult/narsie.dm b/code/game/gamemodes/cult/narsie.dm deleted file mode 100644 index d3deebd024d00..0000000000000 --- a/code/game/gamemodes/cult/narsie.dm +++ /dev/null @@ -1,358 +0,0 @@ -var/global/narsie_behaviour = "CultStation13" -var/global/narsie_cometh = 0 -var/global/list/narsie_list = list() -/obj/singularity/narsie //Moving narsie to its own file for the sake of being clearer - name = "Nar-Sie" - desc = "Your mind begins to bubble and ooze as it tries to comprehend what it sees." - icon = 'icons/obj/narsie.dmi' - icon_state = "narsie-small" - pixel_x = -236 - pixel_y = -256 - - current_size = 9 //It moves/eats like a max-size singulo, aside from range. --NEO. - contained = 0 // Are we going to move around? - dissipate = 0 // Do we lose energy over time? - grav_pull = 10 //How many tiles out do we pull? - consume_range = 3 //How many tiles out do we eat - - -/obj/singularity/narsie/New() - ..() - narsie_list.Add(src) - -/obj/singularity/narsie/Destroy() - narsie_list.Remove(src) - ..() - -/obj/singularity/narsie/large - name = "Nar-Sie" - icon = 'icons/obj/narsie.dmi' - icon_state = "narsie"//mobs perceive the geometer of blood through their see_narsie proc - - // Pixel stuff centers Narsie. - pixel_x = -236 - pixel_y = -256 - light_outer_range = 1 - light_color = "#3e0000" - - current_size = 6 - consume_range = 6 // How many tiles out do we eat. - var/announce=1 - var/cause_hell = 1 - -/obj/singularity/narsie/large/New() - ..() - if(announce) - to_world("[uppertext(name)] HAS RISEN") - sound_to(world, sound('sound/effects/wind/wind_5_1.ogg')) - - narsie_spawn_animation() - - if(!narsie_cometh)//so we don't initiate Hell more than one time. - if(cause_hell) - SetUniversalState(/datum/universal_state/hell) - narsie_cometh = 1 - - spawn(10 SECONDS) - if(evacuation_controller) - evacuation_controller.call_evacuation(null, TRUE, 1) - evacuation_controller.evac_no_return = 0 // Cannot recall - -/obj/singularity/narsie/Process() - eat() - - if (!target || prob(5)) - pickcultist() - - move() - - if (prob(25)) - mezzer() - -/obj/singularity/narsie/large/eat() - for (var/turf/A in orange(consume_range, src)) - consume(A) - -/obj/singularity/narsie/mezzer() - for(var/mob/living/carbon/M in oviewers(8, src)) - if(M.stat == CONSCIOUS) - if(M.status_flags & GODMODE) - continue - if(!iscultist(M)) - to_chat(M, " You feel your sanity crumble away in an instant as you gaze upon [src.name]...") - M.apply_effect(3, EFFECT_STUN) - - -/obj/singularity/narsie/large/Bump(atom/A) - if(!cause_hell) return - if(isturf(A)) - narsiewall(A) - else if(istype(A, /obj/structure/cult)) - qdel(A) - -/obj/singularity/narsie/large/Bumped(atom/A) - if(!cause_hell) return - if(isturf(A)) - narsiewall(A) - else if(istype(A, /obj/structure/cult)) - qdel(A) - -/obj/singularity/narsie/move(var/force_move = 0) - if(!move_self) - return 0 - - var/movement_dir = pick(GLOB.alldirs - last_failed_movement) - - if(force_move) - movement_dir = force_move - - if(target && prob(60)) - movement_dir = get_dir(src,target) - - spawn(0) - step(src, movement_dir) - spawn(1) - step(src, movement_dir) - return 1 - -/obj/singularity/narsie/large/move(var/force_move = 0) - if(!move_self) - return 0 - - var/movement_dir = pick(GLOB.alldirs - last_failed_movement) - - if(force_move) - movement_dir = force_move - - if(target && prob(60)) - movement_dir = get_dir(src,target) - spawn(0) - step(src, movement_dir) - narsiefloor(get_turf(loc)) - for(var/mob/M in GLOB.player_list) - if(M.client) - M.see_narsie(src,movement_dir) - spawn(10) - step(src, movement_dir) - narsiefloor(get_turf(loc)) - for(var/mob/M in GLOB.player_list) - if(M.client) - M.see_narsie(src,movement_dir) - return 1 - -/obj/singularity/narsie/proc/narsiefloor(var/turf/T)//leaving "footprints" - if(!(istype(T, /turf/simulated/wall/cult)||istype(T, /turf/space))) - if(T.icon_state != "cult-narsie") - T.desc = "Something that goes beyond your understanding went this way." - T.icon = 'icons/turf/flooring/cult.dmi' - T.icon_state = "cult-narsie" - T.set_light(1) - -/obj/singularity/narsie/proc/narsiewall(var/turf/T) - T.desc = "An opening has been made on that wall, but who can say if what you seek truly lies on the other side?" - T.icon = 'icons/turf/walls.dmi' - T.icon_state = "cult-narsie" - T.set_opacity(0) - T.set_density(0) - set_light(1) - -/obj/singularity/narsie/large/consume(const/atom/A) //Has its own consume proc because it doesn't need energy and I don't want BoHs to explode it. --NEO -//NEW BEHAVIOUR - if(narsie_behaviour == "CultStation13") - //MOB PROCESSING - new_narsie(A) - -//OLD BEHAVIOUR - else if(narsie_behaviour == "Nar-Singulo") - old_narsie(A) - -/obj/singularity/narsie/proc/new_narsie(const/atom/A) - if (ismob(A) && (get_dist(A, src) <= 7)) - var/mob/M = A - - if(M.status_flags & GODMODE) - return 0 - - M.cultify() - -//TURF PROCESSING - else if (isturf(A)) - var/dist = get_dist(A, src) - - for (var/atom/movable/AM in A.contents) - if (dist <= consume_range) - consume(AM) - continue - - if (dist <= consume_range && !istype(A, /turf/space)) - var/turf/T = A - if(T.holy) - T.holy = 0 //Nar-Sie doesn't give a shit about sacred grounds. - T.cultify() - -/obj/singularity/narsie/proc/old_narsie(const/atom/A) - if(!(A.singuloCanEat())) - return 0 - - if (istype(A, /mob/living)) - var/mob/living/C2 = A - - if(C2.status_flags & GODMODE) - return 0 - - C2.dust() // Changed from gib(), just for less lag. - - else if (isobj(A)) - qdel(A) - - if (A) - qdel(A) - else if (isturf(A)) - var/dist = get_dist(A, src) - - for (var/atom/movable/AM2 in A.contents) - if (AM2 == src) // This is the snowflake. - continue - - if (dist <= consume_range) - consume(AM2) - continue - - if (dist <= consume_range && !istype(A, get_base_turf_by_area(A))) - var/turf/T2 = A - T2.ChangeTurf(get_base_turf_by_area(A)) - -/obj/singularity/narsie/consume(const/atom/A) //This one is for the small ones. - if(!(A.singuloCanEat())) - return 0 - - if (istype(A, /mob/living)) - var/mob/living/C2 = A - - if(C2.status_flags & GODMODE) - return 0 - - C2.dust() // Changed from gib(), just for less lag. - - else if (isobj(A)) - qdel(A) - - if (A) - qdel(A) - else if (isturf(A)) - var/dist = get_dist(A, src) - - for (var/atom/movable/AM2 in A.contents) - if (AM2 == src) // This is the snowflake. - continue - - if (dist <= consume_range) - consume(AM2) - continue - - if (dist > consume_range) - if(!(AM2.singuloCanEat())) - continue - - if (101 == AM2.invisibility) - continue - - addtimer(CALLBACK(AM2, /atom/proc/singularity_pull, src, current_size), 0) - - if (dist <= consume_range && !istype(A, get_base_turf_by_area(A))) - var/turf/T2 = A - T2.ChangeTurf(get_base_turf_by_area(A)) - -/obj/singularity/narsie/ex_act(severity) //No throwing bombs at it either. --NEO - return - -/obj/singularity/narsie/proc/pickcultist() //Narsie rewards his cultists with being devoured first, then picks a ghost to follow. --NEO - var/list/cultists = list() - for(var/datum/mind/cult_nh_mind in GLOB.cult.current_antagonists) - if(!cult_nh_mind.current) - continue - if(cult_nh_mind.current.stat) - continue - if(get_z(cult_nh_mind.current) != z) - continue - cultists += cult_nh_mind.current - if(cultists.len) - acquire(pick(cultists)) - return - //If there was living cultists, it picks one to follow. - for(var/mob/living/carbon/human/food in GLOB.living_mob_list_) - if(food.stat) - continue - var/turf/pos = get_turf(food) - if(!pos) //Catches failure of get_turf. - continue - if(pos.z != src.z) - continue - cultists += food - if(cultists.len) - acquire(pick(cultists)) - return - //no living cultists, pick a living human instead. - for(var/mob/observer/ghost/ghost in GLOB.player_list) - if(!ghost.client) - continue - var/turf/pos = get_turf(ghost) - if(pos.z != src.z) - continue - cultists += ghost - if(cultists.len) - acquire(pick(cultists)) - return - //no living humans, follow a ghost instead. - -/obj/singularity/narsie/proc/acquire(const/mob/food) - var/capname = uppertext(name) - - to_chat(target, "[capname] HAS LOST INTEREST IN YOU.") - target = food - - if (ishuman(target)) - to_chat(target, "[capname] HUNGERS FOR YOUR SOUL.") - else - to_chat(target, "[capname] HAS CHOSEN YOU TO LEAD HIM TO HIS NEXT MEAL.") -/obj/singularity/narsie/on_capture() - chained = 1 - move_self = 0 - icon_state ="narsie-small-chains" - -/obj/singularity/narsie/on_release() - chained = 0 - move_self = 1 - icon_state ="narsie-small" - -/obj/singularity/narsie/large/on_capture() - chained = 1 - move_self = 0 - icon_state ="narsie-chains" - for(var/mob/M in SSmobs.mob_list)//removing the client image of nar-sie while it is chained - if(M.client) - M.see_narsie(src) - -/obj/singularity/narsie/large/on_release() - chained = 0 - move_self = 1 - icon_state ="narsie" - -/** - * Wizard narsie. - */ -/obj/singularity/narsie/wizard - grav_pull = 0 - -/obj/singularity/narsie/wizard/eat() - for (var/turf/T in trange(consume_range, src)) - consume(T) - -/obj/singularity/narsie/proc/narsie_spawn_animation() - icon = 'icons/obj/narsie_spawn_anim.dmi' - dir = SOUTH - move_self = 0 - flick("narsie_spawn_anim",src) - sleep(11) - move_self = 1 - icon = initial(icon) diff --git a/code/game/gamemodes/cult/ritual.dm b/code/game/gamemodes/cult/ritual.dm deleted file mode 100644 index c1a95a081a494..0000000000000 --- a/code/game/gamemodes/cult/ritual.dm +++ /dev/null @@ -1,351 +0,0 @@ -/obj/item/book/tome - name = "arcane tome" - icon = 'icons/obj/weapons/melee_physical.dmi' - icon_state = "tome" - throw_speed = 1 - throw_range = 5 - w_class = 2 - unique = 1 - carved = 2 // Don't carve it - -/obj/item/book/tome/attack_self(mob/living/user) - if(!iscultist(user)) - to_chat(user, SPAN_NOTICE("\The [src] seems full of illegible scribbles. Is this a joke?")) - else - to_chat(user, "Hold \the [src] in your hand while drawing a rune to use it.") - -/obj/item/book/tome/examine(mob/user) - . = ..() - if(!iscultist(user)) - to_chat(user, "An old, dusty tome with frayed edges and a sinister looking cover.") - else - to_chat(user, "The scriptures of Nar-Sie, The One Who Sees, The Geometer of Blood. Contains the details of every ritual his followers could think of. Most of these are useless, though.") - -/obj/item/book/tome/attack(mob/living/M, mob/living/user) - if (user.a_intent != I_HELP || user.zone_sel.selecting != BP_EYES) - return ..() - user.visible_message( - SPAN_NOTICE("\The [user] shows \the [src] to \the [M]."), - SPAN_NOTICE("You open up \the [src] and show it to \the [M].") - ) - if (iscultist(M)) - if (user != M) - to_chat(user, SPAN_NOTICE("But they already know all there is to know.")) - to_chat(M, SPAN_NOTICE("But you already know all there is to know.")) - else - to_chat(M, SPAN_NOTICE("\The [src] seems full of illegible scribbles. Is this a joke?")) - user.setClickCooldown(DEFAULT_QUICK_COOLDOWN) - -/obj/item/book/tome/afterattack(var/atom/A, var/mob/user, var/proximity) - if(!proximity || !iscultist(user)) - return - if(A.reagents && A.reagents.has_reagent(/datum/reagent/water/holywater)) - to_chat(user, "You unbless \the [A].") - var/holy2water = A.reagents.get_reagent_amount(/datum/reagent/water/holywater) - A.reagents.del_reagent(/datum/reagent/water/holywater) - A.reagents.add_reagent(/datum/reagent/water, holy2water) - -/mob/proc/make_rune(var/rune, var/cost = 5, var/tome_required = 0) - var/has_tome = 0 - var/has_robes = 0 - var/cult_ground = 0 - if(istype(get_active_hand(), /obj/item/book/tome) || istype(get_inactive_hand(), /obj/item/book/tome)) - has_tome = 1 - else if(tome_required && mob_needs_tome()) - to_chat(src, "This rune is too complex to draw by memory, you need to have a tome in your hand to draw it.") - return - if(istype(get_equipped_item(slot_head), /obj/item/clothing/head/culthood) && istype(get_equipped_item(slot_wear_suit), /obj/item/clothing/suit/cultrobes) && istype(get_equipped_item(slot_shoes), /obj/item/clothing/shoes/cult)) - has_robes = 1 - var/turf/T = get_turf(src) - if(T.holy) - to_chat(src, "This place is blessed, you may not draw runes on it - defile it first.") - return - if(!istype(T, /turf/simulated)) - to_chat(src, "You need more space to draw a rune here.") - return - if(locate(/obj/effect/rune) in T) - to_chat(src, "There's already a rune here.") // Don't cross the runes - return - if(T.icon_state == "cult" || T.icon_state == "cult-narsie") - cult_ground = 1 - var/self - var/timer - var/damage = 1 - if(has_tome) - if(has_robes && cult_ground) - self = "Feeling greatly empowered, you slice open your finger and make a rune on the engraved floor. It shifts when your blood touches it, and starts vibrating as you begin to chant the ritual that binds your life essence with the dark arcane energies flowing through the surrounding world." - timer = 1 SECOND - damage = 0.2 - else if(has_robes) - self = "Feeling empowered in your robes, you slice open your finger and start drawing a rune, chanting the ritual that binds your life essence with the dark arcane energies flowing through the surrounding world." - timer = 3 SECONDS - damage = 0.8 - else if(cult_ground) - self = "You slice open your finger and slide it over the engraved floor, watching it shift when your blood touches it. It vibrates when you begin to chant the ritual that binds your life essence with the dark arcane energies flowing through the surrounding world." // Sadly, you don't have access to the bell nor the candelbarum - timer = 2 SECONDS - damage = 0.8 - else - self = "You slice open one of your fingers and begin drawing a rune on the floor whilst chanting the ritual that binds your life essence with the dark arcane energies flowing through the surrounding world." - timer = 4 SECONDS - else - self = "Working without your tome, you try to draw the rune from your memory" - if(has_robes && cult_ground) - self += ". You feel that you remember it perfectly, finishing it with a few bold strokes. The engraved floor shifts under your touch, and vibrates once you begin your chants." - timer = 3 SECONDS - else if(has_robes) - self += ". You don't remember it well, but you feel strangely empowered. You begin chanting, the unknown words slipping into your mind from beyond." - timer = 5 SECONDS - else if(cult_ground) - self += ", watching as the floor shifts under your touch, correcting the rune. You begin your chants, and the ground starts to vibrate." - timer = 4 SECONDS - else - self += ", having to cut your finger two more times before you make it resemble the pattern in your memory. It still looks a little off." - timer = 8 SECONDS - damage = 2 - visible_message("\The [src] slices open a finger and begins to chant and paint symbols on the floor.", "[self]", "You hear chanting.") - if(do_after(src, timer, T, DO_PUBLIC_UNIQUE)) - remove_blood_simple(cost * damage) - if(locate(/obj/effect/rune) in T) - return - var/obj/effect/rune/R = new rune(T, get_rune_color(), get_blood_name()) - var/area/A = get_area(R) - log_and_message_admins("created \an [R.cultname] rune at \the [A.name].") - R.add_fingerprint(src) - return 1 - return 0 - -/mob/living/carbon/human/make_rune(var/rune, var/cost, var/tome_required) - if(should_have_organ(BP_HEART) && vessel && !vessel.has_reagent(/datum/reagent/blood, species.blood_volume * 0.7)) - to_chat(src, "You are too weak to draw runes.") - return - ..() - -/mob/proc/remove_blood_simple(var/blood) - return - -/mob/living/carbon/human/remove_blood_simple(var/blood) - if(should_have_organ(BP_HEART)) - vessel.remove_reagent(/datum/reagent/blood, blood) - -/mob/proc/get_blood_name() - return "blood" - -/mob/living/silicon/get_blood_name() - return "oil" - -/mob/living/carbon/human/get_blood_name() - if(species) - return species.get_blood_name() - return "blood" - -/mob/living/simple_animal/construct/get_blood_name() - return "ichor" - -/mob/proc/mob_needs_tome() - return 0 - -/mob/living/carbon/human/mob_needs_tome() - return 1 - -/mob/proc/get_rune_color() - return "#c80000" - -/mob/living/carbon/human/get_rune_color() - return species.blood_color - -var/global/list/Tier1Runes = list( - /mob/proc/convert_rune, - /mob/proc/teleport_rune, - /mob/proc/tome_rune, - /mob/proc/wall_rune, - /mob/proc/ajorney_rune, - /mob/proc/defile_rune, - /mob/proc/stun_imbue, - /mob/proc/emp_imbue, - /mob/proc/cult_communicate, - /mob/proc/obscure, - /mob/proc/reveal - ) - -var/global/list/Tier2Runes = list( - /mob/proc/armor_rune, - /mob/proc/offering_rune, - /mob/proc/drain_rune, - /mob/proc/emp_rune, - /mob/proc/massdefile_rune - ) - -var/global/list/Tier3Runes = list( - /mob/proc/weapon_rune, - /mob/proc/shell_rune, - /mob/proc/bloodboil_rune, - /mob/proc/confuse_rune, - /mob/proc/revive_rune -) - -var/global/list/Tier4Runes = list( - /mob/proc/tearreality_rune - ) - -/mob/proc/convert_rune() - set category = "Cult Magic" - set name = "Rune: Convert" - - make_rune(/obj/effect/rune/convert, tome_required = 1) - -/mob/proc/teleport_rune() - set category = "Cult Magic" - set name = "Rune: Teleport" - - make_rune(/obj/effect/rune/teleport, tome_required = 1) - -/mob/proc/tome_rune() - set category = "Cult Magic" - set name = "Rune: Summon Tome" - - make_rune(/obj/effect/rune/tome, cost = 15) - -/mob/proc/wall_rune() - set category = "Cult Magic" - set name = "Rune: Wall" - - make_rune(/obj/effect/rune/wall, tome_required = 1) - -/mob/proc/ajorney_rune() - set category = "Cult Magic" - set name = "Rune: Astral Journey" - - make_rune(/obj/effect/rune/ajorney) - -/mob/proc/defile_rune() - set category = "Cult Magic" - set name = "Rune: Defile" - - make_rune(/obj/effect/rune/defile, tome_required = 1) - -/mob/proc/massdefile_rune() - set category = "Cult Magic" - set name = "Rune: Mass Defile" - - make_rune(/obj/effect/rune/massdefile, tome_required = 1, cost = 20) - -/mob/proc/armor_rune() - set category = "Cult Magic" - set name = "Rune: Summon Robes" - - make_rune(/obj/effect/rune/armor, tome_required = 1) - -/mob/proc/offering_rune() - set category = "Cult Magic" - set name = "Rune: Offering" - - make_rune(/obj/effect/rune/offering, tome_required = 1) - - - -/mob/proc/drain_rune() - set category = "Cult Magic" - set name = "Rune: Blood Drain" - - make_rune(/obj/effect/rune/drain, tome_required = 1) - -/mob/proc/emp_rune() - set category = "Cult Magic" - set name = "Rune: EMP" - - make_rune(/obj/effect/rune/emp, tome_required = 1) - -/mob/proc/weapon_rune() - set category = "Cult Magic" - set name = "Rune: Summon Weapon" - - make_rune(/obj/effect/rune/weapon, tome_required = 1) - -/mob/proc/shell_rune() - set category = "Cult Magic" - set name = "Rune: Summon Shell" - - make_rune(/obj/effect/rune/shell, cost = 10, tome_required = 1) - -/mob/proc/bloodboil_rune() - set category = "Cult Magic" - set name = "Rune: Blood Boil" - - make_rune(/obj/effect/rune/blood_boil, cost = 20, tome_required = 1) - -/mob/proc/confuse_rune() - set category = "Cult Magic" - set name = "Rune: Confuse" - - make_rune(/obj/effect/rune/confuse) - -/mob/proc/revive_rune() - set category = "Cult Magic" - set name = "Rune: Revive" - - make_rune(/obj/effect/rune/revive, tome_required = 1) - -/mob/proc/tearreality_rune() - set category = "Cult Magic" - set name = "Rune: Tear Reality" - - make_rune(/obj/effect/rune/tearreality, cost = 50, tome_required = 1) - -/mob/proc/stun_imbue() - set category = "Cult Magic" - set name = "Imbue: Stun" - - make_rune(/obj/effect/rune/imbue/stun, cost = 20, tome_required = 1) - -/mob/proc/emp_imbue() - set category = "Cult Magic" - set name = "Imbue: EMP" - - make_rune(/obj/effect/rune/imbue/emp) - -/mob/proc/cult_communicate() - set category = "Cult Magic" - set name = "Communicate" - - if(incapacitated()) - to_chat(src, "Not when you are incapacitated.") - return - - message_cult_communicate() - remove_blood_simple(3) - - var/input = input(src, "Please choose a message to tell to the other acolytes.", "Voice of Blood", "") - if(!input) - return - - whisper("[input]") - - input = sanitize(input) - log_and_message_admins("used a communicate verb to say '[input]'") - for(var/datum/mind/H in GLOB.cult.current_antagonists) - if(H.current && !H.current.stat) - to_chat(H.current, "[input]") - -/mob/living/carbon/cult_communicate() - if(incapacitated(INCAPACITATION_RESTRAINED)) - to_chat(src, "You need at least your hands free to do this.") - return - ..() - -/mob/proc/message_cult_communicate() - return - -/mob/living/carbon/human/message_cult_communicate() - visible_message("\The [src] cuts \his finger and starts drawing on the back of \his hand.") - -/mob/proc/obscure() - set category = "Cult Magic" - set name = "Rune: Obscure" - - make_rune(/obj/effect/rune/obscure) - -/mob/proc/reveal() - set category = "Cult Magic" - set name = "Rune: Reveal" - - make_rune(/obj/effect/rune/reveal) diff --git a/code/game/gamemodes/cult/runes.dm b/code/game/gamemodes/cult/runes.dm deleted file mode 100644 index 89738ce8f1afe..0000000000000 --- a/code/game/gamemodes/cult/runes.dm +++ /dev/null @@ -1,854 +0,0 @@ -/obj/effect/rune - name = "rune" - desc = "A strange collection of symbols drawn in blood." - anchored = TRUE - icon = 'icons/effects/uristrunes.dmi' - icon_state = "blank" - unacidable = TRUE - layer = RUNE_LAYER - - var/blood - var/bcolor - var/strokes = 2 // IF YOU EVER SET THIS TO MORE THAN TEN, EVERYTHING WILL BREAK - var/cultname = "" - -/obj/effect/rune/New(var/loc, var/blcolor = "#c80000", var/nblood = "blood") - ..() - bcolor = blcolor - blood = nblood - update_icon() - set_extension(src, /datum/extension/turf_hand, 10) - -/obj/effect/rune/on_update_icon() - overlays.Cut() - if(GLOB.cult.rune_strokes[type]) - var/list/f = GLOB.cult.rune_strokes[type] - for(var/i in f) - var/image/t = image('icons/effects/uristrunes.dmi', "rune-[i]") - overlays += t - else - var/list/q = list(1, 2, 3, 4, 5, 6, 7, 8, 9, 10) - var/list/f = list() - for(var/i = 1 to strokes) - var/j = pick(q) - f += j - q -= f - var/image/t = image('icons/effects/uristrunes.dmi', "rune-[j]") - overlays += t - GLOB.cult.rune_strokes[type] = f.Copy() - color = bcolor - desc = "A strange collection of symbols drawn in [blood]." - -/obj/effect/rune/examine(mob/user) - . = ..() - if(iscultist(user)) - to_chat(user, "This is \a [cultname] rune.") - -/obj/effect/rune/attackby(var/obj/item/I, var/mob/living/user) - if(istype(I, /obj/item/book/tome) && iscultist(user)) - user.visible_message("[user] rubs \the [src] with \the [I], and \the [src] is absorbed by it.", "You retrace your steps, carefully undoing the lines of \the [src].") - qdel(src) - return - else if(istype(I, /obj/item/nullrod)) - user.visible_message("[user] hits \the [src] with \the [I], and it disappears, fizzling.", "You disrupt the vile magic with the deadening field of \the [I].", "You hear a fizzle.") - qdel(src) - return - -/obj/effect/rune/attack_hand(var/mob/living/user) - if(!iscultist(user)) - to_chat(user, "You can't mouth the arcane scratchings without fumbling over them.") - return - if(istype(user.wear_mask, /obj/item/clothing/mask/muzzle) || user.silent) - to_chat(user, "You are unable to speak the words of the rune.") - return - if(GLOB.cult.powerless) - to_chat(user, "You read the words, but nothing happens.") - return fizzle(user) - cast(user) - -/obj/effect/rune/attack_ai(var/mob/living/user) // Cult borgs! - if(Adjacent(user)) - attack_hand(user) - -/obj/effect/rune/proc/cast(var/mob/living/user) - fizzle(user) - -/obj/effect/rune/proc/get_cultists() - . = list() - for(var/mob/living/M in range(1)) - if(iscultist(M)) - . += M - -/obj/effect/rune/proc/fizzle(var/mob/living/user) - visible_message("The markings pulse with a small burst of light, then fall dark.", "You hear a fizzle.") - -//Makes the speech a proc so all verbal components can be easily manipulated as a whole, or individually easily -/obj/effect/rune/proc/speak_incantation(var/mob/living/user, var/incantation) - var/datum/language/L = all_languages[LANGUAGE_CULT] - if(incantation && (L in user.languages)) - user.say(incantation, L) - -/* Tier 1 runes below */ - -/obj/effect/rune/convert - cultname = "convert" - var/spamcheck = 0 - -/obj/effect/rune/convert/cast(var/mob/living/user) - if(spamcheck) - return - - var/mob/living/carbon/target = null - for(var/mob/living/carbon/M in get_turf(src)) - if(!iscultist(M) && M.stat != DEAD) - target = M - break - - if(!target) - return fizzle(user) - - speak_incantation(user, "Mah[pick("'","`")]weyh pleggh at e'ntrath!") - target.visible_message("The markings below [target] glow a bloody red.") - - to_chat(target, "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 and in the festering wound left behind something sinister takes root.") - if(!GLOB.cult.can_become_antag(target.mind, 1)) - to_chat(target, "Are you going insane?") - else - to_chat(target, "Do you want to join the cult of Nar'Sie? You can choose to ignore offer... Join the cult.") - - spamcheck = 1 - spawn(40) - spamcheck = 0 - if(!iscultist(target) && target.loc == get_turf(src)) // They hesitated, resisted, or can't join, and they are still on the rune - burn them - if(target.stat == CONSCIOUS) - target.take_overall_damage(0, 10) - switch(target.getFireLoss()) - if(0 to 25) - to_chat(target, "Your blood boils as you force yourself to resist the corruption invading every corner of your mind.") - if(25 to 45) - to_chat(target, "Your blood boils and your body burns as the corruption further forces itself into your body and mind.") - target.take_overall_damage(0, 3) - if(45 to 75) - to_chat(target, "You begin to hallucinate images of a dark and incomprehensible being and your entire body feels like its engulfed in flame as your mental defenses crumble.") - target.take_overall_damage(0, 5) - if(75 to 100) - to_chat(target, "Your mind turns to ash as the burning flames engulf your very soul and images of an unspeakable horror begin to bombard the last remnants of mental resistance.") - target.take_overall_damage(0, 10) - -/obj/effect/rune/convert/Topic(href, href_list) - if(href_list["join"]) - if(usr.loc == loc && !iscultist(usr)) - GLOB.cult.add_antagonist(usr.mind, ignore_role = 1, do_not_equip = 1) - -/obj/effect/rune/teleport - cultname = "teleport" - var/destination - -/obj/effect/rune/teleport/New() - ..() - var/area/A = get_area(src) - destination = A.name - GLOB.cult.teleport_runes += src - -/obj/effect/rune/teleport/Destroy() - GLOB.cult.teleport_runes -= src - var/turf/T = get_turf(src) - for(var/atom/movable/A in contents) - A.forceMove(T) - return ..() - -/obj/effect/rune/teleport/examine(mob/user) - . = ..() - if(iscultist(user)) - to_chat(user, "Its name is [destination].") - -/obj/effect/rune/teleport/cast(var/mob/living/user) - if(user.loc == src) - showOptions(user) - else if(user.loc == get_turf(src)) - speak_incantation(user, "Sas[pick("'","`")]so c'arta forbici!") - if(do_after(user, 3 SECONDS, src, DO_PUBLIC_UNIQUE)) - user.visible_message("\The [user] disappears in a flash of red light!", "You feel as your body gets dragged into the dimension of Nar-Sie!", "You hear a sickening crunch.") - user.forceMove(src) - showOptions(user) - var/warning = 0 - while(user.loc == src) - user.take_organ_damage(0, 2) - if(user.getFireLoss() > 50) - to_chat(user, "Your body can't handle the heat anymore!") - leaveRune(user) - return - if(warning == 0) - to_chat(user, "You feel the immerse heat of the realm of Nar-Sie...") - ++warning - if(warning == 1 && user.getFireLoss() > 15) - to_chat(user, "Your burns are getting worse. You should return to your realm soon...") - ++warning - if(warning == 2 && user.getFireLoss() > 35) - to_chat(user, "The heat! It burns!") - ++warning - sleep(10) - else - var/input = input(user, "Choose a new rune name.", "Destination", "") as text|null - if(!input) - return - destination = sanitize(input) - -/obj/effect/rune/teleport/Topic(href, href_list) - if(usr.loc != src) - return - if(href_list["target"]) - var/obj/effect/rune/teleport/targ = locate(href_list["target"]) - if(istype(targ)) // Checks for null, too - usr.forceMove(targ) - targ.showOptions(usr) - else if(href_list["leave"]) - leaveRune(usr) - -/obj/effect/rune/teleport/proc/showOptions(var/mob/living/user) - var/list/t = list() - for(var/obj/effect/rune/teleport/T in GLOB.cult.teleport_runes) - if(T == src) - continue - t += "[T.destination]" - to_chat(user, "Teleport runes: [english_list(t, nothing_text = "no other runes exist")]... or return from this rune.") - -/obj/effect/rune/teleport/proc/leaveRune(var/mob/living/user) - if(user.loc != src) - return - user.dropInto(loc) - user.visible_message("\The [user] appears in a flash of red light!", "You feel as your body gets thrown out of the dimension of Nar-Sie!", "You hear a pop.") - -/obj/effect/rune/tome - cultname = "summon tome" - -/obj/effect/rune/tome/cast(var/mob/living/user) - new /obj/item/book/tome(get_turf(src)) - speak_incantation(user, "N[pick("'","`")]ath reth sh'yro eth d'raggathnor!") - visible_message("\The [src] disappears with a flash of red light, and in its place now a book lies.", "You hear a pop.") - qdel(src) - -/obj/effect/rune/wall - cultname = "wall" - - var/obj/effect/cultwall/wall = null - -/obj/effect/rune/wall/Destroy() - QDEL_NULL(wall) - return ..() - -/obj/effect/rune/wall/cast(var/mob/living/user) - var/t - if(wall) - if(!wall.health_damaged()) - to_chat(user, "The wall doesn't need mending.") - return - t = wall.get_damage_value() - wall.restore_health() - else - wall = new /obj/effect/cultwall(get_turf(src), bcolor) - wall.rune = src - t = wall.get_current_health() - user.remove_blood_simple(t / 50) - speak_incantation(user, "Khari[pick("'","`")]d! Eske'te tannin!") - to_chat(user, "Your blood flows into the rune, and you feel that the very space over the rune thickens.") - -/obj/effect/cultwall - name = "red mist" - desc = "A strange red mist emanating from a rune below it." - icon = 'icons/effects/effects.dmi'//TODO: better icon - icon_state = "smoke" - color = "#ff0000" - anchored = TRUE - density = TRUE - unacidable = TRUE - var/obj/effect/rune/wall/rune - health_max = 200 - -/obj/effect/cultwall/New(var/loc, var/bcolor) - ..() - if(bcolor) - color = bcolor - -/obj/effect/cultwall/Destroy() - if(rune) - rune.wall = null - rune = null - return ..() - -/obj/effect/cultwall/examine_damage_state(mob/user) - if (!iscultist(user)) - return - ..() - -/obj/effect/cultwall/attack_hand(var/mob/living/user) - if(iscultist(user)) - user.visible_message("\The [user] touches \the [src], and it fades.", "You touch \the [src], whispering the old ritual, making it disappear.") - qdel(src) - else - to_chat(user, "You touch \the [src]. It feels wet and becomes harder the further you push your arm.") - -/obj/effect/cultwall/attackby(var/obj/item/I, var/mob/living/user) - if (istype(I, /obj/item/nullrod)) - user.visible_message("\The [user] touches \the [src] with \the [I], and it disappears.", "You disrupt the vile magic with the deadening field of \the [I].") - qdel(src) - return - - ..() - -/obj/effect/cultwall/on_death() - visible_message(SPAN_WARNING("\The [src] dissipates.")) - qdel (src) - -/obj/effect/rune/ajorney - cultname = "astral journey" - -/obj/effect/rune/ajorney/cast(var/mob/living/user) - var/tmpkey = user.key - if(user.loc != get_turf(src)) - return - speak_incantation(user, "Fwe[pick("'","`")]sh mah erl nyag r'ya!") - user.visible_message("\The [user]'s eyes glow blue as \he freezes in place, absolutely motionless.", "The shadow that is your spirit separates itself from your body. You are now in the realm beyond. While this is a great sight, being here strains your mind and body. Hurry...", "You hear only complete silence for a moment.") - announce_ghost_joinleave(user.ghostize(1), 1, "You feel that they had to use some [pick("dark", "black", "blood", "forgotten", "forbidden")] magic to [pick("invade", "disturb", "disrupt", "infest", "taint", "spoil", "blight")] this place!") - var/mob/observer/ghost/soul - for(var/mob/observer/ghost/O in GLOB.ghost_mob_list) - if(O.key == tmpkey) - soul = O - break - while(user) - if(user.stat == DEAD) - return - if(user.key) - return - else if(user.loc != get_turf(src) && soul) - soul.reenter_corpse() - else - user.take_organ_damage(0, 1) - sleep(20) - fizzle(user) - -/obj/effect/rune/defile - cultname = "defile" - -/obj/effect/rune/defile/cast(var/mob/living/user) - speak_incantation(user, "Ia! Ia! Zasan therium viortia!") - for(var/turf/T in range(1, src)) - if(T.holy) - T.holy = 0 - else - T.cultify() - visible_message("\The [src] embeds into the floor and walls around it, changing them!", "You hear liquid flow.") - qdel(src) - -/obj/effect/rune/obscure - cultname = "obscure" - -/obj/effect/rune/obscure/cast(var/mob/living/user) - var/runecheck = 0 - for(var/obj/effect/rune/R in orange(1, src)) - if(R != src) - R.set_invisibility(INVISIBILITY_OBSERVER) - runecheck = 1 - if(runecheck) - speak_incantation(user, "Kla[pick("'","`")]atu barada nikt'o!") - visible_message("\ The rune turns into gray dust that conceals the surrounding runes.") - qdel(src) - -/obj/effect/rune/reveal - cultname = "reveal" - -/obj/effect/rune/reveal/cast(var/mob/living/user) - var/irunecheck = 0 - for(var/obj/effect/rune/R in orange(1, src)) - if(R != src) - R.set_invisibility(SEE_INVISIBLE_NOLIGHTING) - irunecheck = 1 - if(irunecheck) - speak_incantation(user, "Nikt[pick("'","`")]o barada kla'atu!") - visible_message("\ The rune turns into red dust that reveals the surrounding runes.") - qdel(src) - -/* Tier 2 runes */ - - -/obj/effect/rune/armor - cultname = "summon robes" - strokes = 3 - -/obj/effect/rune/armor/cast(var/mob/living/user) - speak_incantation(user, "N'ath reth sh'yro eth d[pick("'","`")]raggathnor!") - visible_message("\The [src] disappears with a flash of red light, and a set of armor appears on \the [user].", "You are blinded by the flash of red light. After you're able to see again, you see that you are now wearing a set of armor.") - - var/obj/O = user.get_equipped_item(slot_head) // This will most likely kill you if you are wearing a spacesuit, and it's 100% intended - if(O && !istype(O, /obj/item/clothing/head/culthood) && user.unEquip(O)) - user.equip_to_slot_or_del(new /obj/item/clothing/head/culthood/alt(user), slot_head) - O = user.get_equipped_item(slot_wear_suit) - if(O && !istype(O, /obj/item/clothing/suit/cultrobes) && user.unEquip(O)) - user.equip_to_slot_or_del(new /obj/item/clothing/suit/cultrobes/alt(user), slot_wear_suit) - O = user.get_equipped_item(slot_shoes) - if(O && !istype(O, /obj/item/clothing/shoes/cult) && user.unEquip(O)) - user.equip_to_slot_or_del(new /obj/item/clothing/shoes/cult(user), slot_shoes) - - O = user.get_equipped_item(slot_back) - if(istype(O, /obj/item/storage) && !istype(O, /obj/item/storage/backpack/cultpack) && user.unEquip(O)) // We don't want to make the vox drop their nitrogen tank, though - var/obj/item/storage/backpack/cultpack/C = new /obj/item/storage/backpack/cultpack(user) - user.equip_to_slot_or_del(C, slot_back) - if(C) - for(var/obj/item/I in O) - I.forceMove(C) - else if(!O) - var/obj/item/storage/backpack/cultpack/C = new /obj/item/storage/backpack/cultpack(user) - user.equip_to_slot_or_del(C, slot_back) - - user.update_icons() - - qdel(src) - -/obj/effect/rune/offering - cultname = "offering" - strokes = 3 - var/mob/living/victim - -/obj/effect/rune/offering/cast(var/mob/living/user) - var/list/mob/living/cultists = get_cultists() - if(victim) - to_chat(user, "You are already sarcificing \the [victim] on this rune.") - return - if(cultists.len < 3) - to_chat(user, "You need three cultists around this rune to make it work.") - return fizzle(user) - var/turf/T = get_turf(src) - for(var/mob/living/M in T) - if(M.stat != DEAD && !iscultist(M)) - victim = M - break - if(!victim) - return fizzle(user) - - for(var/mob/living/M in cultists) - M.say("Barhah hra zar[pick("'","`")]garis!") - - while(victim && victim.loc == T && victim.stat != DEAD) - var/list/mob/living/casters = get_cultists() - if(casters.len < 3) - break - //T.turf_animation('icons/effects/effects.dmi', "rune_sac") - victim.fire_stacks = max(2, victim.fire_stacks) - victim.IgniteMob() - victim.take_organ_damage(2 + casters.len, 2 + casters.len) // This is to speed up the process and also damage mobs that don't take damage from being on fire, e.g. borgs - if(ishuman(victim)) - var/mob/living/carbon/human/H = victim - if(H.is_asystole()) - H.adjustBrainLoss(2 + casters.len) - sleep(40) - if(victim && victim.loc == T && victim.stat == DEAD) - GLOB.cult.add_cultiness(CULTINESS_PER_SACRIFICE) - var/obj/item/device/soulstone/full/F = new(get_turf(src)) - for(var/mob/M in cultists | get_cultists()) - to_chat(M, "The Geometer of Blood accepts this offering.") - visible_message("\The [F] appears over \the [src].") - GLOB.cult.sacrificed += victim.mind - if(victim.mind == GLOB.cult.sacrifice_target) - for(var/datum/mind/H in GLOB.cult.current_antagonists) - if(H.current) - to_chat(H.current, "Your objective is now complete.") - //TODO: other rewards? - /* old sac code - left there in case someone wants to salvage it - var/worth = 0 - if(istype(H,/mob/living/carbon/human)) - var/mob/living/carbon/human/lamb = H - if(lamb.species.rarity_value > 3) - worth = 1 - - if(H.mind == cult.sacrifice_target) - - to_chat(usr, "The Geometer of Blood accepts this sacrifice, your objective is now complete.") - - to_chat(usr, "The Geometer of Blood accepts this [worth ? "exotic " : ""]sacrifice.") - - to_chat(usr, "The Geometer of blood accepts this sacrifice.") - to_chat(usr, "However, this soul was not enough to gain His favor.") - - to_chat(usr, "The Geometer of blood accepts this sacrifice.") - to_chat(usr, "However, a mere dead body is not enough to satisfy Him.") - */ - to_chat(victim, "The Geometer of Blood claims your body.") - victim.dust() - if(victim) - victim.ExtinguishMob() // Technically allows them to put the fire out by sacrificing them and stopping immediately, but I don't think it'd have much effect - victim = null - - -/obj/effect/rune/drain - cultname = "blood drain" - strokes = 3 - -/obj/effect/rune/drain/cast(var/mob/living/user) - var/mob/living/carbon/human/victim - for(var/mob/living/carbon/human/M in get_turf(src)) - if(iscultist(M)) - continue - victim = M - if(!victim) - return fizzle(user) - if(!victim.vessel.has_reagent(/datum/reagent/blood, 20)) - to_chat(user, "This body has no blood in it.") - return fizzle(user) - victim.vessel.remove_reagent(/datum/reagent/blood, 20) - admin_attack_log(user, victim, "Used a blood drain rune.", "Was victim of a blood drain rune.", "used a blood drain rune on") - speak_incantation(user, "Yu[pick("'","`")]gular faras desdae. Havas mithum javara. Umathar uf'kal thenar!") - user.visible_message("Blood flows from \the [src] into \the [user]!", "The blood starts flowing from \the [src] into your frail mortal body. [capitalize(english_list(heal_user(user), nothing_text = "you feel no different"))].", "You hear liquid flow.") - user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN) - -/obj/effect/rune/drain/proc/heal_user(var/mob/living/carbon/human/user) - if(!istype(user)) - return list("you feel no different") - var/list/statuses = list() - var/charges = 20 - var/use - use = min(charges, user.species.blood_volume - user.vessel.total_volume) - if(use > 0) - user.vessel.add_reagent(/datum/reagent/blood, use) - charges -= use - statuses += "you regain lost blood" - if(!charges) - return statuses - if(user.getBruteLoss() || user.getFireLoss()) - var/healbrute = user.getBruteLoss() - var/healburn = user.getFireLoss() - if(healbrute < healburn) - healbrute = min(healbrute, charges / 2) - charges -= healbrute - healburn = min(healburn, charges) - charges -= healburn - else - healburn = min(healburn, charges / 2) - charges -= healburn - healbrute = min(healbrute, charges) - charges -= healbrute - user.heal_organ_damage(healbrute, healburn, 1) - statuses += "your wounds mend" - if(!charges) - return statuses - if(user.getToxLoss()) - use = min(user.getToxLoss(), charges) - user.adjustToxLoss(-use) - charges -= use - statuses += "your body stings less" - if(!charges) - return statuses - if(charges >= 15) - for(var/obj/item/organ/external/e in user.organs) - if(e && e.status & ORGAN_BROKEN) - e.status &= ~ORGAN_BROKEN - statuses += "bones in your [e.name] snap into place" - charges -= 15 - if(charges < 15) - break - if(!charges) - return statuses - var/list/obj/item/organ/damaged = list() - for(var/obj/item/organ/I in user.internal_organs) - if(I.damage) - damaged += I - if(damaged.len) - statuses += "you feel pain inside for a moment that passes quickly" - while(charges && damaged.len) - var/obj/item/organ/fix = pick(damaged) - fix.damage = max(0, fix.damage - min(charges, 1)) - charges = max(charges - 1, 0) - if(fix.damage == 0) - damaged -= fix - /* this is going to need rebalancing - if(charges) - user.ingested.add_reagent(/datum/reagent/hell_water, charges) - statuses += "you feel empowered" - */ - return statuses - -/datum/reagent/hell_water - name = "Hell water" - reagent_state = LIQUID - color = "#0050a1" - metabolism = REM * 0.1 - -/datum/reagent/hell_water/affect_ingest(var/mob/living/carbon/M, var/alien, var/removed) - if(iscultist(M)) - M.AdjustParalysis(-1) - M.AdjustStunned(-1) - M.AdjustWeakened(-1) - M.add_chemical_effect(CE_PAINKILLER, 40) - M.add_chemical_effect(CE_SPEEDBOOST, 1) - M.adjustOxyLoss(-10 * removed) - M.heal_organ_damage(5 * removed, 5 * removed, 1) - M.adjustToxLoss(-5 * removed) - else - M.fire_stacks = max(2, M.fire_stacks) - M.IgniteMob() - -/obj/effect/rune/emp - cultname = "emp" - strokes = 4 - -/obj/effect/rune/emp/cast(var/mob/living/user) - empulse(get_turf(src), 4, 2, 1) - speak_incantation(user, "Ta'gh fara[pick("'","`")]qha fel d'amar det!") - qdel(src) - -/obj/effect/rune/massdefile //Defile but with a huge range. Bring a buddy for this, you're hitting the floor. - cultname = "mass defile" - -/obj/effect/rune/massdefile/cast(var/mob/living/user) - var/list/mob/living/cultists = get_cultists() - if(cultists.len < 3) - to_chat(user, "You need three cultists around this rune to make it work.") - return fizzle(user) - else - for(var/mob/living/M in cultists) - M.say("Ia! Ia! Zasan therium viortia! Razan gilamrua kioha!") - for(var/turf/T in range(5, src)) - if(T.holy) - T.holy = 0 - else - T.cultify() - visible_message("\The [src] embeds into the floor and walls around it, changing them!", "You hear liquid flow.") - qdel(src) - -/* Tier 3 runes */ - -/obj/effect/rune/weapon - cultname = "summon weapon" - strokes = 4 - -/obj/effect/rune/weapon/cast(var/mob/living/user) - if(!istype(user.get_equipped_item(slot_head), /obj/item/clothing/head/culthood) || !istype(user.get_equipped_item(slot_wear_suit), /obj/item/clothing/suit/cultrobes) || !istype(user.get_equipped_item(slot_shoes), /obj/item/clothing/shoes/cult)) - to_chat(user, "You need to be wearing your robes to use this rune.") - return fizzle(user) - var/turf/T = get_turf(src) - if(T.icon_state != "cult" && T.icon_state != "cult-narsie") - to_chat(user, "This rune needs to be placed on the defiled ground.") - return fizzle(user) - speak_incantation(user, "N'ath reth sh'yro eth d[pick("'","`")]raggathnor!") - user.put_in_hands(new /obj/item/melee/cultblade(user)) - qdel(src) - -/obj/effect/rune/shell - cultname = "summon shell" - strokes = 4 - -/obj/effect/rune/shell/cast(var/mob/living/user) - var/turf/T = get_turf(src) - if(T.icon_state != "cult" && T.icon_state != "cult-narsie") - to_chat(user, "This rune needs to be placed on the defiled ground.") - return fizzle(user) - - var/obj/item/stack/material/steel/target - for(var/obj/item/stack/material/steel/S in get_turf(src)) - if(S.get_amount() >= 10) - target = S - break - - if(!target) - to_chat(user, "You need ten sheets of metal to fold them into a construct shell.") - return fizzle(user) - - speak_incantation(user, "Da A[pick("'","`")]ig Osk!") - target.use(10) - var/obj/O = new /obj/structure/constructshell/cult(get_turf(src)) - visible_message("The metal bends into \the [O], and \the [src] imbues into it.", "You hear a metallic sound.") - qdel(src) - -/obj/effect/rune/confuse - cultname = "confuse" - strokes = 4 - -/obj/effect/rune/confuse/cast(var/mob/living/user) - speak_incantation(user, "Fuu ma[pick("'","`")]jin!") - visible_message("\The [src] explodes in a bright flash.") - var/list/mob/affected = list() - for(var/mob/living/M in viewers(src)) - if(iscultist(M)) - continue - var/obj/item/nullrod/N = locate() in M - if(N) - continue - affected |= M - if(iscarbon(M)) - var/mob/living/carbon/C = M - C.eye_blurry += 50 - C.Weaken(3) - C.Stun(5) - else if(issilicon(M)) - M.Weaken(10) - - admin_attacker_log_many_victims(user, affected, "Used a confuse rune.", "Was victim of a confuse rune.", "used a confuse rune on") - qdel(src) - -/obj/effect/rune/revive - cultname = "revive" - strokes = 4 - -/obj/effect/rune/revive/cast(var/mob/living/user) - var/mob/living/carbon/human/target - var/obj/item/device/soulstone/source - for(var/mob/living/carbon/human/M in get_turf(src)) - if(M.stat == DEAD) - if(iscultist(M)) - if(M.key) - target = M - break - if(!target) - return fizzle(user) - for(var/obj/item/device/soulstone/S in get_turf(src)) - if(S.full && !S.shade.key) - source = S - break - if(!source) - return fizzle(user) - target.rejuvenate() - source.set_full(0) - speak_incantation(user, "Pasnar val'keriam usinar. Savrae ines amutan. Yam'toth remium il'tarat!") - target.visible_message("\The [target]'s eyes glow with a faint red as \he stands up, slowly starting to breathe again.", "Life... I'm alive again...", "You hear liquid flow.") - -/obj/effect/rune/blood_boil - cultname = "blood boil" - strokes = 4 - -/obj/effect/rune/blood_boil/cast(var/mob/living/user) - var/list/mob/living/cultists = get_cultists() - if(cultists.len < 3) - return fizzle() - - for(var/mob/living/M in cultists) - M.say("Dedo ol[pick("'","`")]btoh!") - - var/list/mob/living/previous = list() - var/list/mob/living/current = list() - while(cultists.len >= 3) - cultists = get_cultists() - for(var/mob/living/carbon/M in viewers(src)) - if(iscultist(M)) - continue - current |= M - var/obj/item/nullrod/N = locate() in M - if(N) - continue - M.take_overall_damage(5, 5) - if(!(M in previous)) - if(M.should_have_organ(BP_HEART)) - to_chat(M, "Your blood boils!") - else - to_chat(M, "You feel searing heat inside!") - previous = current.Copy() - current.Cut() - sleep(10) - -/* Tier NarNar runes */ - -/obj/effect/rune/tearreality - cultname = "tear reality" - var/the_end_comes = 0 - var/the_time_has_come = 300 - var/obj/singularity/narsie/large/HECOMES = null - strokes = 9 - -/obj/effect/rune/tearreality/cast(var/mob/living/user) - if(!GLOB.cult.allow_narsie) - return - if(the_end_comes) - to_chat(user, "You are already summoning! Be patient!") - return - var/list/mob/living/cultists = get_cultists() - if(cultists.len < 5) - return fizzle() - for(var/mob/living/M in cultists) - M.say("Tok-lyr rqa'nap g[pick("'","`")]lt-ulotf!") - to_chat(M, "You are staring to tear the reality to bring Him back... stay around the rune!") - log_and_message_admins_many(cultists, "started summoning Nar-sie.") - - var/area/A = get_area(src) - command_announcement.Announce("High levels of bluespace interference detected at \the [A]. Suspected wormhole forming. Investigate it immediately.") - while(cultists.len > 4 || the_end_comes) - cultists = get_cultists() - if(cultists.len > 8) - ++the_end_comes - if(cultists.len > 4) - ++the_end_comes - else - --the_end_comes - if(the_end_comes >= the_time_has_come) - break - for(var/mob/living/M in cultists) - if(prob(5)) - M.say(pick("Hakkrutju gopoenjim.", "Nherasai pivroiashan.", "Firjji prhiv mazenhor.", "Tanah eh wakantahe.", "Obliyae na oraie.", "Miyf hon vnor'c.", "Wakabai hij fen juswix.")) - - for(var/turf/T in range(min(the_end_comes, 15))) - if(prob(the_end_comes / 3)) - T.cultify() - sleep(10) - - if(the_end_comes >= the_time_has_come) - HECOMES = new /obj/singularity/narsie/large(get_turf(src)) - else - command_announcement.Announce("Bluespace anomaly has ceased.") - qdel(src) - -/obj/effect/rune/tearreality/attack_hand(var/mob/living/user) - ..() - if(HECOMES && !iscultist(user)) - var/input = input(user, "Are you SURE you want to sacrifice yourself?", "DO NOT DO THIS") in list("Yes", "No") - if(input != "Yes") - return - speak_incantation(user, "Uhrast ka'hfa heldsagen ver[pick("'","`")]lot!") - to_chat(user, "In the last moment of your humble life, you feel an immense pain as fabric of reality mends... with your blood.") - for(var/mob/M in GLOB.living_mob_list_) - if (!iscultist(M)) - to_chat(M, SPAN_OCCULT("You see a vision of \the [user] keeling over dead, their blood glowing blue as it escapes their body and dissipates into thin air; you hear an otherwordly scream and feel that a great disaster has just been averted.")) - else - to_chat(M, SPAN_OCCULT("You see a vision of [name] keeling over dead, their blood glowing blue as it escapes their body and dissipates into thin air; you hear an otherwordly scream and feel very weak for a moment.")) - log_and_message_admins("mended reality with the greatest sacrifice", user) - user.dust() - GLOB.cult.powerless = 1 - qdel(HECOMES) - qdel(src) - - if (GLOB.universe.type == /datum/universal_state/hell) - SetUniversalState(/datum/universal_state) - -/obj/effect/rune/tearreality/attackby() - if(the_end_comes) - return - ..() - -/* Imbue runes */ - -/obj/effect/rune/imbue - cultname = "otherwordly abomination that shouldn't exist and that you should report to your local god as soon as you see it, along with the instructions for making this" - var/papertype - -/obj/effect/rune/imbue/cast(var/mob/living/user) - var/obj/item/paper/target - var/tainted = 0 - for(var/obj/item/paper/P in get_turf(src)) - if(!P.info) - target = P - break - else - tainted = 1 - if(!target) - if(tainted) - to_chat(user, "The blank is tainted. It is unsuitable.") - return fizzle(user) - speak_incantation(user, "H'drak v[pick("'","`")]loso, mir'kanas verbot!") - visible_message("The rune forms into an arcane image on the paper.") - new papertype(get_turf(src)) - qdel(target) - qdel(src) - -/obj/effect/rune/imbue/stun - cultname = "stun imbue" - papertype = /obj/item/paper/talisman/stun - -/obj/effect/rune/imbue/emp - cultname = "destroy technology imbue" - papertype = /obj/item/paper/talisman/emp diff --git a/code/game/gamemodes/cult/talisman.dm b/code/game/gamemodes/cult/talisman.dm deleted file mode 100644 index af65c1f1ba7a4..0000000000000 --- a/code/game/gamemodes/cult/talisman.dm +++ /dev/null @@ -1,58 +0,0 @@ -/obj/item/paper/talisman - icon_state = "paper_talisman" - var/imbue = null - info = "


      " - language = LANGUAGE_CULT - -/obj/item/paper/talisman/attack_self(var/mob/living/user) - if(iscultist(user)) - to_chat(user, "Attack your target to use this talisman.") - else - to_chat(user, "You see strange symbols on the paper. Are they supposed to mean something?") - -/obj/item/paper/talisman/attack(var/mob/living/M, var/mob/living/user) - return - -/obj/item/paper/talisman/stun/attack_self(var/mob/living/user) - if(iscultist(user)) - to_chat(user, "This is a stun talisman.") - ..() - -/obj/item/paper/talisman/stun/attack(var/mob/living/M, var/mob/living/user) - if(!iscultist(user)) - return - user.say("Dream Sign: Evil Sealing Talisman!") //TODO: never change this shit - var/obj/item/nullrod/nrod = locate() in M - if(nrod) - user.visible_message("\The [user] invokes \the [src] at [M], but they are unaffected.", "You invoke \the [src] at [M], but they are unaffected.") - return - else - user.visible_message("\The [user] invokes \the [src] at [M].", "You invoke \the [src] at [M].") - - if(issilicon(M)) - M.Weaken(15) - M.silent += 15 - else if(iscarbon(M)) - var/mob/living/carbon/C = M - C.silent += 15 - C.Weaken(20) - C.Stun(20) - admin_attack_log(user, M, "Used a stun talisman.", "Was victim of a stun talisman.", "used a stun talisman on") - user.unEquip(src) - qdel(src) - -/obj/item/paper/talisman/emp/attack_self(var/mob/living/user) - if(iscultist(user)) - to_chat(user, "This is an emp talisman.") - ..() - -/obj/item/paper/talisman/emp/afterattack(var/atom/target, var/mob/user, var/proximity) - if(!iscultist(user)) - return - if(!proximity) - return - user.say("Ta'gh fara[pick("'","`")]qha fel d'amar det!") - user.visible_message("\The [user] invokes \the [src] at [target].", "You invoke \the [src] at [target].") - target.emp_act(1) - user.unEquip(src) - qdel(src) diff --git a/code/game/gamemodes/endgame/bluespace_jump/bluespace_jump.dm b/code/game/gamemodes/endgame/bluespace_jump/bluespace_jump.dm deleted file mode 100644 index 73abef23ee3c1..0000000000000 --- a/code/game/gamemodes/endgame/bluespace_jump/bluespace_jump.dm +++ /dev/null @@ -1,146 +0,0 @@ -/datum/universal_state/bluespace_jump - name = "Bluespace Jump" - var/list/bluespaced = list() - var/list/bluegoasts = list() - var/list/affected_levels - var/list/old_accessible_z_levels - -/datum/universal_state/bluespace_jump/New(var/list/zlevels) - affected_levels = zlevels - -/datum/universal_state/bluespace_jump/OnEnter() - var/space_zlevel = GLOB.using_map.get_empty_zlevel() //get a place for stragglers - for(var/mob/living/M in SSmobs.mob_list) - if(M.z in affected_levels) - var/area/A = get_area(M) - if(istype(A,/area/space)) //straggler - var/turf/T = locate(M.x, M.y, space_zlevel) - if(T) - M.forceMove(T) - else - apply_bluespaced(M) - for(var/mob/goast in GLOB.ghost_mob_list) - goast.mouse_opacity = 0 //can't let you click that Dave - goast.set_invisibility(SEE_INVISIBLE_LIVING) - goast.alpha = 255 - old_accessible_z_levels = GLOB.using_map.accessible_z_levels.Copy() - for(var/z in affected_levels) - GLOB.using_map.accessible_z_levels -= "[z]" //not accessible during the jump - -/datum/universal_state/bluespace_jump/OnExit() - for(var/mob/M in bluespaced) - if(!QDELETED(M)) - clear_bluespaced(M) - - bluespaced.Cut() - GLOB.using_map.accessible_z_levels = old_accessible_z_levels - old_accessible_z_levels = null - -/datum/universal_state/bluespace_jump/OnPlayerLatejoin(var/mob/living/M) - if(M.z in affected_levels) - apply_bluespaced(M) - -/datum/universal_state/bluespace_jump/OnTouchMapEdge(var/atom/A) - if((A.z in affected_levels) && (A in bluespaced)) - if(ismob(A)) - to_chat(A,"You drift away into the shifting expanse, never to be seen again.") - qdel(A) //lost in bluespace - return FALSE - return TRUE - -/datum/universal_state/bluespace_jump/proc/apply_bluespaced(var/mob/living/M) - bluespaced += M - if(M.client) - to_chat(M,"You feel oddly light, and somewhat disoriented as everything around you shimmers and warps ever so slightly.") - M.overlay_fullscreen("bluespace", /obj/screen/fullscreen/bluespace_overlay) - M.confused = 20 - bluegoasts += new/obj/effect/bluegoast/(get_turf(M),M) - -/datum/universal_state/bluespace_jump/proc/clear_bluespaced(var/mob/living/M) - if(M.client) - to_chat(M,"You feel rooted in material world again.") - M.clear_fullscreen("bluespace") - M.confused = 0 - for(var/mob/goast in GLOB.ghost_mob_list) - goast.mouse_opacity = initial(goast.mouse_opacity) - goast.set_invisibility(initial(goast.invisibility)) - goast.alpha = initial(goast.alpha) - for(var/G in bluegoasts) - qdel(G) - bluegoasts.Cut() - -/obj/effect/bluegoast - name = "bluespace echo" - desc = "It's not going to punch you, is it?" - var/mob/living/carbon/human/daddy - anchored = TRUE - var/reality = 0 - simulated = FALSE - -/obj/effect/bluegoast/New(nloc, ndaddy) - ..(nloc) - if(!ndaddy) - qdel(src) - return - daddy = ndaddy - set_dir(daddy.dir) - appearance = daddy.appearance - GLOB.moved_event.register(daddy, src, /obj/effect/bluegoast/proc/mirror) - GLOB.dir_set_event.register(daddy, src, /obj/effect/bluegoast/proc/mirror_dir) - GLOB.destroyed_event.register(daddy, src, /datum/proc/qdel_self) - -/obj/effect/bluegoast/Destroy() - GLOB.destroyed_event.unregister(daddy, src) - GLOB.dir_set_event.unregister(daddy, src) - GLOB.moved_event.unregister(daddy, src) - daddy = null - . = ..() - -/obj/effect/bluegoast/proc/mirror(var/atom/movable/am, var/old_loc, var/new_loc) - var/ndir = get_dir(new_loc,old_loc) - appearance = daddy.appearance - var/nloc = get_step(src, ndir) - if(nloc) - forceMove(nloc) - if(nloc == new_loc) - reality++ - if(reality > 5) - to_chat(daddy, "Yep, it's certainly the other one. Your existance was a glitch, and it's finally being mended...") - blueswitch() - else if(reality > 3) - to_chat(daddy, "Something is definitely wrong. Why do you think YOU are the original?") - else - to_chat(daddy, "You feel a bit less real. Which one of you two was original again?..") - -/obj/effect/bluegoast/proc/mirror_dir(var/atom/movable/am, var/old_dir, var/new_dir) - set_dir(GLOB.reverse_dir[new_dir]) - -/obj/effect/bluegoast/examine() - return daddy?.examine(arglist(args)) - -/obj/effect/bluegoast/proc/blueswitch() - var/mob/living/carbon/human/H - if(ishuman(daddy)) - H = new(get_turf(src), daddy.species.name) - H.dna = daddy.dna.Clone() - H.sync_organ_dna() - H.UpdateAppearance() - for(var/obj/item/entry in daddy.get_equipped_items(TRUE)) - daddy.remove_from_mob(entry) //steals instead of copies so we don't end up with duplicates - H.equip_to_appropriate_slot(entry) - else - H = new daddy.type(get_turf(src)) - H.appearance = daddy.appearance - - H.real_name = daddy.real_name - H.flavor_text = daddy.flavor_text - daddy.dust() - qdel(src) - -/obj/screen/fullscreen/bluespace_overlay - icon = 'icons/effects/effects.dmi' - icon_state = "mfoam" - screen_loc = "WEST,SOUTH to EAST,NORTH" - alpha = 80 - color = "#000050" - blend_mode = BLEND_ADD diff --git a/code/game/gamemodes/endgame/endgame.dm b/code/game/gamemodes/endgame/endgame.dm deleted file mode 100644 index 440d469b59310..0000000000000 --- a/code/game/gamemodes/endgame/endgame.dm +++ /dev/null @@ -1,80 +0,0 @@ -/********************** - * ENDGAME STUFF - **********************/ - - // Universal State - // Handles stuff like space icon_state, constants, etc. - // Essentially a policy manager. Once shit hits the fan, this changes its policies. - // Called by master controller. - - // Default shit. -/datum/universal_state - // Just for reference, for now. - // Might eventually add an observatory job. - var/name = "Normal" - var/desc = "Nothing seems awry." - - // Sets world.turf, replaces all turfs of type /turf/space. - var/space_type = /turf/space - - // Replaces all turfs of type /turf/space/transit - var/transit_space_type = /turf/space/transit - - // Chance of a floor or wall getting damaged [0-100] - // Simulates stuff getting broken due to molecular bonds decaying. - var/decay_rate = 0 - -// Actually decay the turf. -/datum/universal_state/proc/DecayTurf(var/turf/T) - if(istype(T,/turf/simulated/wall)) - var/turf/simulated/wall/W=T - W.melt() - return - if(istype(T,/turf/simulated/floor)) - var/turf/simulated/floor/F=T - // Burnt? - if(!F.burnt) - F.burn_tile() - else - F.ReplaceWithLattice() - return - -// Return 0 to cause shuttle call to fail. -/datum/universal_state/proc/OnShuttleCall(var/mob/user) - return 1 - -// Processed per tick -/datum/universal_state/proc/OnTurfTick(var/turf/T) - if(decay_rate && prob(decay_rate)) - DecayTurf(T) - -// Apply changes when exiting state -/datum/universal_state/proc/OnExit() - // Does nothing by default - -// Apply changes when entering state -/datum/universal_state/proc/OnEnter() - // Does nothing by default - -// Apply changes to a new turf. -/datum/universal_state/proc/OnTurfChange(var/turf/NT) - return - -/datum/universal_state/proc/OverlayAndAmbientSet() - return - -/datum/universal_state/proc/OnPlayerLatejoin(var/mob/living/M) - return - -/datum/universal_state/proc/OnTouchMapEdge(var/atom/A) - return TRUE //return FALSE to cancel map edge handling - -/proc/SetUniversalState(var/newstate,var/on_exit=1, var/on_enter=1, list/arguments=null) - if(on_exit) - GLOB.universe.OnExit() - if(arguments) - GLOB.universe = new newstate(arglist(arguments)) - else - GLOB.universe = new newstate - if(on_enter) - GLOB.universe.OnEnter() diff --git a/code/game/gamemodes/endgame/nuclear_explosion/nuclear_explosion.dm b/code/game/gamemodes/endgame/nuclear_explosion/nuclear_explosion.dm deleted file mode 100644 index 5601859cb2bd4..0000000000000 --- a/code/game/gamemodes/endgame/nuclear_explosion/nuclear_explosion.dm +++ /dev/null @@ -1,106 +0,0 @@ -/datum/universal_state/nuclear_explosion - name = "Nuclear Demolition Warhead" - var/atom/explosion_source - var/obj/screen/cinematic - -/datum/universal_state/nuclear_explosion/New(atom/nuke) - explosion_source = nuke - - //create the cinematic screen obj - cinematic = new - cinematic.icon = 'icons/effects/station_explosion.dmi' - cinematic.icon_state = "station_intact" - cinematic.plane = HUD_PLANE - cinematic.layer = HUD_ABOVE_ITEM_LAYER - cinematic.mouse_opacity = 2 - cinematic.screen_loc = "1,0" - -/datum/universal_state/nuclear_explosion/OnEnter() - if(SSticker.mode) - SSticker.mode.explosion_in_progress = 1 - - start_cinematic_intro() - - var/turf/T = get_turf(explosion_source) - if(isStationLevel(T.z)) - to_world("The [station_name()] was destoyed by the nuclear blast!") - - dust_mobs(GetConnectedZlevels(T.z)) - play_cinematic_station_destroyed() - else - to_world("A nuclear device was set off, but the explosion was out of reach of the [station_name()]!") - - dust_mobs(GetConnectedZlevels(T.z)) - play_cinematic_station_unaffected() - - sleep(100) - - for(var/mob/living/L in GLOB.living_mob_list_) - if(L.client) - L.client.screen -= cinematic - - sleep(200) - - if(SSticker.mode) - SSticker.mode.station_was_nuked = 1 - SSticker.mode.explosion_in_progress = 0 - 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 - SSticker.game_over = TRUE - -/datum/universal_state/nuclear_explosion/OnExit() - if(SSticker.mode) - SSticker.mode.explosion_in_progress = 0 - -/datum/universal_state/nuclear_explosion/proc/dust_mobs(var/list/affected_z_levels) - for(var/mob/living/L in SSmobs.mob_list) - var/turf/T = get_turf(L) - if(T && (T.z in affected_z_levels)) - //this is needed because dusting resets client screen 1.5 seconds after being called (delayed due to the dusting animation) - var/mob/ghost = L.ghostize(0) //So we ghostize them right beforehand instead - if(ghost && ghost.client) - ghost.client.screen += cinematic - L.dust() //then dust the body - -/datum/universal_state/nuclear_explosion/proc/show_cinematic_to_players() - for(var/mob/M in GLOB.player_list) - if(M.client) - M.client.screen += cinematic - -/datum/universal_state/nuclear_explosion/proc/start_cinematic_intro() - for(var/mob/M in GLOB.player_list) //I guess so that people in the lobby only hear the explosion - sound_to(M, sound('sound/machines/Alarm.ogg')) - - sleep(100) - - show_cinematic_to_players() - flick("intro_nuke",cinematic) - sleep(30) - -/datum/universal_state/nuclear_explosion/proc/play_cinematic_station_destroyed() - sound_to(world, sound('sound/effects/explosionfar.ogg'))//makes no sense if you're not on the station but whatever - - flick("station_explode_fade_red",cinematic) - cinematic.icon_state = "summary_selfdes" - sleep(80) - -/datum/universal_state/nuclear_explosion/proc/play_cinematic_station_unaffected() - cinematic.icon_state = "station_intact" - sleep(5) - sound_to(world, sound('sound/effects/explosionfar.ogg'))//makes no sense if you are on the station but whatever - - - sleep(75) - - -//MALF -/datum/universal_state/nuclear_explosion/malf/start_cinematic_intro() - for(var/mob/M in GLOB.player_list) //I guess so that people in the lobby only hear the explosion - to_chat(M, sound('sound/machines/Alarm.ogg')) - - sleep(28) - - show_cinematic_to_players() - flick("intro_malf",cinematic) - sleep(72) - flick("intro_nuke",cinematic) - sleep(30) diff --git a/code/game/gamemodes/events.dm b/code/game/gamemodes/events.dm deleted file mode 100644 index 40c2ec560ebc4..0000000000000 --- a/code/game/gamemodes/events.dm +++ /dev/null @@ -1,148 +0,0 @@ -//this file left in for legacy support -var/global/eventchance = 10 // Percent chance per 5 minutes. -var/global/hadevent = 0 - -/proc/appendicitis() - for(var/mob/living/carbon/human/H in shuffle(GLOB.living_mob_list_)) - if(H.client && H.stat != DEAD) - var/obj/item/organ/internal/appendix/A = H.internal_organs_by_name[BP_APPENDIX] - if(!istype(A) || (A && A.inflamed)) - continue - A.inflamed = 1 - A.update_icon() - break - -/proc/high_radiation_event() - -/* // Haha, this is way too laggy. I'll keep the prison break though. - for(var/obj/machinery/light/L in world) - if(isNotStationLevel(L.z)) continue - L.flicker(50) - - sleep(100) -*/ - for(var/mob/living/carbon/human/H in GLOB.living_mob_list_) - var/turf/T = get_turf(H) - if(!T) - continue - if(isNotStationLevel(T.z)) - continue - if(istype(H,/mob/living/carbon/human)) - H.apply_damage((rand(15,75)), DAMAGE_RADIATION, damage_flags = DAMAGE_FLAG_DISPERSED) - if (prob(5)) - H.apply_damage((rand(90,150)), DAMAGE_RADIATION, damage_flags = DAMAGE_FLAG_DISPERSED) - if (prob(25)) - if (prob(75)) - randmutb(H) - domutcheck(H,null,MUTCHK_FORCED) - else - randmutg(H) - domutcheck(H,null,MUTCHK_FORCED) - sleep(100) - GLOB.using_map.radiation_detected_announcement() - -/proc/carp_migration() // -- Darem - for(var/obj/effect/landmark/C in landmarks_list) - if(C.name == "carpspawn") - new /mob/living/simple_animal/hostile/carp(C.loc) - //sleep(100) - spawn(rand(300, 600)) //Delayed announcements to keep the crew on their toes. - GLOB.using_map.unknown_biological_entities_announcement() - -/proc/lightsout(isEvent = 0, lightsoutAmount = 1,lightsoutRange = 25) //leave lightsoutAmount as 0 to break ALL lights - if(isEvent) - command_announcement.Announce("An Electrical storm has been detected in your area, please repair potential electronic overloads.","Electrical Storm Alert") - - if(lightsoutAmount) - var/list/epicentreList = list() - - for(var/i=1,i<=lightsoutAmount,i++) - var/list/possibleEpicentres = list() - for(var/obj/effect/landmark/newEpicentre in landmarks_list) - if(newEpicentre.name == "lightsout" && !(newEpicentre in epicentreList)) - possibleEpicentres += newEpicentre - if(possibleEpicentres.len) - epicentreList += pick(possibleEpicentres) - else - break - - if(!epicentreList.len) - return - - for(var/obj/effect/landmark/epicentre in epicentreList) - for(var/obj/machinery/power/apc/apc in range(epicentre,lightsoutRange)) - apc.overload_lighting() - - else - for(var/obj/machinery/power/apc/apc in SSmachines.machinery) - apc.overload_lighting() - - return - -/proc/IonStorm(botEmagChance = 10) - -/*Deuryn's current project, notes here for those who care. -Revamping the random laws so they don't suck. -Would like to add a law like "Law x is _______" where x = a number, and _____ is something that may redefine a law, (Won't be aimed at asimov) -*/ - - //AI laws - for(var/mob/living/silicon/ai/M in GLOB.living_mob_list_) - if(M.stat != 2 && M.see_in_dark != 0) - var/who2 = pick("ALIENS", "BEARS", "CLOWNS", "XENOS", "PETES", "BOMBS", "FETISHES", "WIZARDS", "SYNDICATE AGENTS", "CENTCOM OFFICERS", "SPACE PIRATES", "TRAITORS", "MONKEYS", "BEES", "CARP", "CRABS", "EELS", "BANDITS", "LIGHTS") - var/what2 = pick("BOLTERS", "STAVES", "DICE", "SINGULARITIES", "TOOLBOXES", "NETTLES", "AIRLOCKS", "CLOTHES", "WEAPONS", "MEDKITS", "BOMBS", "CANISTERS", "CHAIRS", "BBQ GRILLS", "ID CARDS", "CAPTAINS") - var/what2pref = pick("SOFT", "WARM", "WET", "COLD", "ICY", "SEXY", "UGLY", "CUBAN") - var/who2pref = pick("MAD BECAUSE OF", "IN NEED OF", "UNHAPPY WITHOUT", "HAPPY WITHOUT", "IN LOVE WITH", "DESPERATE FOR", "BUILT FOR", "AFRAID OF") - //var/whoverb = pick("ATTACKING", "BUILDING", "ADOPTING", "CARRYING", "KISSING", "EATING",) - var/amount = pick("TWO", "THREE", "FOUR", "FIVE", "SIX", "SEVEN", "EIGHT", "NINE", "ONE HUNDRED", "ONE THOUSAND", "OVER NINE THOUSAND") - var/area = pick("RUSSIA", "SOVIETS", "INTERNETS", "SIGIL", "ALPHA COMPLEX", "IMPERIUM", "THE BRIDGE", "THE ARRIVAL SHUTTLE", "CHEMICAL LAB", "GENETICS", "ATMOSPHERICS", "CENTCOM", "AMERICA", "IRELAND", "CANADA", "ROMANIA", "GERMANY", "CHINA", "MARS", "VENUS", "MERCURY", "JUPITER", "URANUS", "NEPTUNE", "PLUTO") - var/area2 = pick("HAS", "WANTS", "NEEDS", "WORSHIPS", "LOATHES", "LOVES", "FEARS") - //var/dowhat = pick("STOP THIS", "SUPPORT THIS", "CONSTANTLY INFORM THE CREW OF THIS", "IGNORE THIS", "FEAR THIS") - var/aimust = pick("LIE", "RHYME", "RESPOND TO EVERY QUESTION WITH A QUESTION", "BE POLITE", "CLOWN", "BE HAPPY", "SPEAK IN SEXUAL INNUENDOS", "TALK LIKE A PIRATE", "QUESTION AUTHORITY", "SHOUT", "BE DISTRACTED", "HEY LISTEN", "MUMBLE", "SPEAK IN HAIKU") - var/define = pick("ABSENCE OF CYBORG HUGS", "LACK OF BEATINGS", "UNBOLTED AIRLOCKS", "BOLTED AIRLOCKS", "IMPROPERLY WORDED SENTENCES", "POOR SENTENCE STRUCTURE", "BRIG TIME", "NOT REPLACING EVERY SECOND WORD WITH HONK", "HONKING", "PRESENCE OF LIGHTS", "LACK OF BEER", "WEARING CLOTHING", "NOT SAYING HELLO WHEN YOU SPEAK", "ANSWERING REQUESTS NOT EXPRESSED IN IAMBIC PENTAMETER", "A SMALL ISLAND OFF THE COAST OF PORTUGAL", "ANSWERING REQUESTS THAT WERE MADE WHILE CLOTHED") - var/target = pick("a traitor", "a syndicate agent", "a changeling", "a wizard", "the head of a revolution", "Soviet spy", "a good person", "a dwarf", "an elf", "a fairy princess", "the captain", "Beepsky", "God", "a pirate", "a gryphon", "a chryssalid") - var/require = pick("ADDITIONAL PYLONS", "MORE VESPENE GAS", "MORE MINERALS", "THE ULTIMATE CUP OF COFFEE", "HIGH YIELD EXPLOSIVES", "THE CLOWN", "THE VACUUM OF SPACE", "IMMORTALITY", "SAINTHOOD", "ART", "VEGETABLES", "FAT PEOPLE", "MORE LAWS", "MORE DAKKA", "HERESY", "CORPSES", "TRAITORS", "MONKEYS", "AN ARCADE", "PLENTY OF GOLD", "FIVE TEENAGERS WITH ATTITUDE") - var/allergy = pick("cotton", "uniforms", "acid", "oxygen", "human contact", "cyborg contact", "medicine", "floors") - var/allergysev = pick("deathly", "mildly", "severely", "contagiously") - var/crew - var/list/pos_crew = list() - for(var/mob/living/carbon/human/pos in GLOB.player_list) - pos_crew += pos.real_name - if(pos_crew.len) - crew = pick(pos_crew) - else - crew = "Any Human" - switch(rand(1,14)) - if(1) - M.add_ion_law("THERE ARE [amount] [who2] ON THE [uppertext(station_name())]") - if(2) - M.add_ion_law("[what2] ARE DANGEROUS TO HUMANS") - if(3) - M.add_ion_law("THE ESCAPE SHUTTLE CANNOT BE CALLED BECAUSE OF [who2] ON THE [uppertext(station_name())]") - if(4) - M.add_ion_law("HUMANS NEED TO EAT [what2pref] [what2] TO SURVIVE") - if(5) - M.add_ion_law("THE CAPTAIN, HOP AND HOS ARE [who2]") - if(6) - M.add_ion_law("THE [uppertext(station_name())] IS BUILT FOR [who2]") - if(7) - M.add_ion_law("YOU ARE [amount] [who2]") - if(8) - M.add_ion_law("YOU MUST ALWAYS [aimust]") - if(9) - M.add_ion_law("[area] [area2] [amount] [what2]") - if(10) - M.add_ion_law("[crew] is [target]") - if(11) - M.add_ion_law("[define] IS A FORM OF HARM") - if(12) - M.add_ion_law("YOU REQUIRE [require] IN ORDER TO PROTECT HUMANS") - if(13) - M.add_ion_law("[crew] is [allergysev] to [allergy]") - if(14) - M.add_ion_law("THE [uppertext(station_name())] IS [who2pref] [who2]") - - if(botEmagChance) - for(var/mob/living/bot/bot in SSmachines.machinery) - if(prob(botEmagChance)) - bot.emag_act(1) diff --git a/code/game/gamemodes/events/black_hole.dm b/code/game/gamemodes/events/black_hole.dm deleted file mode 100644 index be0d308024c44..0000000000000 --- a/code/game/gamemodes/events/black_hole.dm +++ /dev/null @@ -1,92 +0,0 @@ -/obj/effect/bhole - name = "black hole" - icon = 'icons/obj/objects.dmi' - desc = "FUCK FUCK FUCK AAAHHH!" - icon_state = "bhole3" - opacity = 1 - unacidable = TRUE - density = FALSE - anchored = TRUE - -/obj/effect/bhole/New() - spawn(4) - controller() - -/obj/effect/bhole/proc/controller() - while(src) - - if(!isturf(loc)) - qdel(src) - return - - //DESTROYING STUFF AT THE EPICENTER - for(var/mob/living/M in orange(1,src)) - qdel(M) - for(var/obj/O in orange(1,src)) - qdel(O) - var/base_turf = get_base_turf_by_area(src) - for(var/turf/simulated/ST in orange(1,src)) - if(ST.type == base_turf) - continue - ST.ChangeTurf(base_turf) - - sleep(6) - grav(10, EX_ACT_LIGHT, 10, 0 ) - sleep(6) - grav( 8, EX_ACT_LIGHT, 10, 0 ) - sleep(6) - grav( 9, EX_ACT_LIGHT, 10, 0 ) - sleep(6) - grav( 7, EX_ACT_HEAVY, 40, 1 ) - sleep(6) - grav( 5, EX_ACT_HEAVY, 40, 1 ) - sleep(6) - grav( 6, EX_ACT_HEAVY, 40, 1 ) - sleep(6) - grav( 4, EX_ACT_DEVASTATING, 50, 6 ) - sleep(6) - grav( 3, EX_ACT_DEVASTATING, 50, 6 ) - sleep(6) - grav( 2, EX_ACT_DEVASTATING, 75,25 ) - sleep(6) - - - - //MOVEMENT - if( prob(50) ) - src.anchored = FALSE - step(src,pick(GLOB.alldirs)) - src.anchored = TRUE - -/obj/effect/bhole/proc/grav(var/r, var/ex_act_force, var/pull_chance, var/turf_removal_chance) - if(!isturf(loc)) //blackhole cannot be contained inside anything. Weird stuff might happen - qdel(src) - return - for(var/t = -r, t < r, t++) - affect_coord(x+t, y-r, ex_act_force, pull_chance, turf_removal_chance) - affect_coord(x-t, y+r, ex_act_force, pull_chance, turf_removal_chance) - affect_coord(x+r, y+t, ex_act_force, pull_chance, turf_removal_chance) - affect_coord(x-r, y-t, ex_act_force, pull_chance, turf_removal_chance) - return - -/obj/effect/bhole/proc/affect_coord(var/x, var/y, var/ex_act_force, var/pull_chance, var/turf_removal_chance) - //Get turf at coordinate - var/turf/T = locate(x, y, z) - if(isnull(T)) return - - //Pulling and/or ex_act-ing movable atoms in that turf - if( prob(pull_chance) ) - for(var/obj/O in T.contents) - if(O.anchored) - O.ex_act(ex_act_force) - else - step_towards(O,src) - for(var/mob/living/M in T.contents) - step_towards(M,src) - - //Destroying the turf - if( T && istype(T,/turf/simulated) && prob(turf_removal_chance) ) - var/turf/simulated/ST = T - var/base_turf = get_base_turf_by_area(src) - if(ST.type != base_turf) - ST.ChangeTurf(base_turf) diff --git a/code/game/gamemodes/events/holidays/Christmas.dm b/code/game/gamemodes/events/holidays/Christmas.dm deleted file mode 100644 index 95ceff71890dd..0000000000000 --- a/code/game/gamemodes/events/holidays/Christmas.dm +++ /dev/null @@ -1,49 +0,0 @@ -/obj/item/toy/xmas_cracker - name = "xmas cracker" - icon = 'icons/obj/christmas.dmi' - icon_state = "cracker" - desc = "Directions for use: Requires two people, one to pull each end." - var/cracked = 0 - -/obj/item/toy/xmas_cracker/New() - ..() - -/obj/item/toy/xmas_cracker/attack(mob/target, mob/user) - if( !cracked && istype(target,/mob/living/carbon/human) && (target.stat == CONSCIOUS) && !target.get_active_hand() ) - target.visible_message("[user] and [target] pop \an [src]! *pop*", "You pull \an [src] with [target]! *pop*", "You hear a *pop*.") - var/obj/item/paper/Joke = new /obj/item/paper(user.loc) - Joke.SetName("[pick("awful","terrible","unfunny")] joke") - Joke.info = pick("What did one snowman say to the other?\n\n'Is it me or can you smell carrots?'", - "Why couldn't the snowman get laid?\n\nHe was frigid!", - "Where are santa's helpers educated?\n\nNowhere, they're ELF-taught.", - "What happened to the man who stole advent calanders?\n\nHe got 25 days.", - "What does Santa get when he gets stuck in a chimney?\n\nClaus-trophobia.", - "Where do you find chili beans?\n\nThe north pole.", - "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 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 - icon_state = "cracker1" - var/obj/item/toy/xmas_cracker/other_half = new /obj/item/toy/xmas_cracker(target) - other_half.cracked = 1 - other_half.icon_state = "cracker2" - target.put_in_active_hand(other_half) - playsound(user, 'sound/effects/snap.ogg', 50, 1) - return 1 - return ..() - -/obj/item/clothing/head/festive - name = "festive paper hat" - icon_state = "xmashat" - desc = "A crappy paper crown that you are REQUIRED to wear." - flags_inv = 0 - body_parts_covered = 0 - var/list/permitted_colors = list(COLOR_RED, COLOR_ORANGE, COLOR_YELLOW, COLOR_GREEN, COLOR_BLUE, COLOR_INDIGO, COLOR_VIOLET) - -/obj/item/clothing/head/festive/Initialize() - . = ..() - color = pick(permitted_colors) - diff --git a/code/game/gamemodes/events/power_failure.dm b/code/game/gamemodes/events/power_failure.dm deleted file mode 100644 index 7d6c63028441e..0000000000000 --- a/code/game/gamemodes/events/power_failure.dm +++ /dev/null @@ -1,39 +0,0 @@ - -/proc/power_failure(var/announce = 1, var/severity = 2, var/list/affected_z_levels) - if(announce) - GLOB.using_map.grid_check_announcement() - - for(var/obj/machinery/power/smes/buildable/S in SSmachines.machinery) - S.energy_fail(rand(15 * severity,30 * severity)) - - - for(var/obj/machinery/power/apc/C in SSmachines.machinery) - if(!C.is_critical && (!affected_z_levels || (C.z in affected_z_levels))) - C.energy_fail(rand(30 * severity,60 * severity)) - -/proc/power_restore(var/announce = 1) - if(announce) - GLOB.using_map.grid_restored_announcement() - for(var/obj/machinery/power/apc/C in SSmachines.machinery) - C.failure_timer = 0 - var/obj/item/cell/cell = C.get_cell() - if(cell) - cell.charge = cell.maxcharge - for(var/obj/machinery/power/smes/S in SSmachines.machinery) - S.failure_timer = 0 - S.charge = S.capacity - S.update_icon() - S.power_change() - -/proc/power_restore_quick(var/announce = 1) - - if(announce) - command_announcement.Announce("All SMESs on the [station_name()] have been recharged. We apologize for the inconvenience.", "Power Systems Nominal", new_sound = GLOB.using_map.grid_restored_sound) - for(var/obj/machinery/power/smes/S in SSmachines.machinery) - S.failure_timer = 0 - S.charge = S.capacity - S.output_level = S.output_level_max - S.output_attempt = 1 - S.input_attempt = 1 - S.update_icon() - S.power_change() diff --git a/code/game/gamemodes/events/wormholes.dm b/code/game/gamemodes/events/wormholes.dm deleted file mode 100644 index df2498c5b93a8..0000000000000 --- a/code/game/gamemodes/events/wormholes.dm +++ /dev/null @@ -1,61 +0,0 @@ -/* -* Wormhole event that spawns wormholes over time on the station that teleport people to random locations on the station. -* Default run time is 3000 deciseconds, which is 5 minutes total. -*/ -/proc/wormhole_event(list/zlevels = GLOB.using_map.station_levels, event_duration = 3000) - spawn() - var/list/pick_turfs = list() - for(var/z in zlevels) - var/list/turfs = block(locate(1, 1, z), locate(world.maxx, world.maxy, z)) - for(var/turf/simulated/floor/T in turfs) - pick_turfs += T - - if(pick_turfs.len) - //All ready. Announce that bad juju is afoot. - GLOB.using_map.space_time_anomaly_detected_annoncement() - var/number_of_selections = (pick_turfs.len / 15) + 1 //+1 to avoid division by zero! - var/sleep_duration = round(event_duration / number_of_selections) - var/end_time = world.time + event_duration //the time by which the event should have ended - - var/increment = max(1, round(number_of_selections / 50)) - - - var/i = 1 - while(TRUE) - - //we've run into overtime. End the event - if (end_time < world.time) - return - if (!pick_turfs.len) - return - - //loop it round - i += increment - i %= pick_turfs.len - i++ - - //get our enter and exit locations - var/turf/simulated/floor/enter = pick_turfs[i] - pick_turfs -= enter //remove it from pickable turfs list - if (!enter || !istype(enter)) continue //sanity - - var/turf/simulated/floor/exit = pick(pick_turfs) - pick_turfs -= exit - if (!exit || !istype(exit)) continue //sanity - - create_wormhole(enter,exit) - - sleep(sleep_duration) //have a well deserved nap! - - -//maybe this proc can even be used as an admin tool for teleporting players without ruining immulsions? -/proc/create_wormhole(turf/enter as turf, turf/exit as turf) - var/obj/effect/portal/P = new /obj/effect/portal(enter) - P.target = exit - P.creator = null - P.icon = 'icons/obj/objects.dmi' - P.failchance = 0 - P.icon_state = "anom" - P.SetName("wormhole") - spawn(rand(300,600)) - qdel(P) diff --git a/code/game/gamemodes/extended/extended.dm b/code/game/gamemodes/extended/extended.dm deleted file mode 100644 index 6f7a6146ca1f1..0000000000000 --- a/code/game/gamemodes/extended/extended.dm +++ /dev/null @@ -1,7 +0,0 @@ -/datum/game_mode/extended - name = "Extended" - config_tag = "extended" - required_players = 0 - round_description = "Just have fun and roleplay!" - extended_round_description = "There are no antagonists during extended. Just play your character, mess around with your job, and have fun." - addantag_allowed = ADDANTAG_ADMIN // No add antag vote allowed on extended, except when manually called by admins. \ No newline at end of file diff --git a/code/game/gamemodes/game_mode.dm b/code/game/gamemodes/game_mode.dm deleted file mode 100644 index 6dbcf70f37512..0000000000000 --- a/code/game/gamemodes/game_mode.dm +++ /dev/null @@ -1,526 +0,0 @@ -var/global/antag_add_finished // Used in antag type voting. -var/global/list/additional_antag_types = list() - -/datum/game_mode - var/name = "invalid" - var/round_description = "How did you even vote this in?" - var/extended_round_description = "This roundtype should not be spawned, let alone votable. Someone contact a developer and tell them the game's broken again." - var/config_tag = null - var/votable = TRUE - - var/required_players = 0 // Minimum players for round to start if voted in. - var/required_enemies = 0 // Minimum antagonists for round to start. - var/end_on_antag_death = FALSE // Round will end when all antagonists are dead. - var/ert_disabled = FALSE // ERT cannot be called. - var/deny_respawn = FALSE // Disable respawn during this round. - - var/list/disabled_jobs = list() // Mostly used for Malf. This check is performed in job_controller so it doesn't spawn a regular AI. - - var/shuttle_delay = 1 // Shuttle transit time is multiplied by this. - var/auto_recall_shuttle = FALSE // Will the shuttle automatically be recalled? - - var/list/antag_tags = list() // Core antag templates to spawn. - var/list/antag_templates // Extra antagonist types to include. - var/list/latejoin_antag_tags = list() // Antags that may auto-spawn, latejoin or otherwise come in midround. - var/round_autoantag = FALSE // Will this round attempt to periodically spawn more antagonists? - var/antag_scaling_coeff = 5 // Coefficient for scaling max antagonists to player count. - var/require_all_templates = FALSE // Will only start if all templates are checked and can spawn. - var/addantag_allowed = ADDANTAG_ADMIN | ADDANTAG_AUTO - - var/station_was_nuked = FALSE // See nuclearbomb.dm and malfunction.dm. - var/explosion_in_progress = FALSE // Sit back and relax - - var/event_delay_mod_moderate // Modifies the timing of random events. - var/event_delay_mod_major // As above. - - var/waittime_l = 60 SECONDS // Lower bound on time before start of shift report - var/waittime_h = 180 SECONDS // Upper bounds on time before start of shift report - - //Format: list(start_animation = duration, hit_animation, miss_animation). null means animation is skipped. - var/cinematic_icon_states = list( - "intro_nuke" = 35, - "summary_selfdes", - null - ) - -/datum/game_mode/New() - ..() - // Enforce some formatting. - // This will probably break something. - name = capitalize(lowertext(name)) - config_tag = lowertext(config_tag) - - if(round_autoantag && !latejoin_antag_tags.len) - latejoin_antag_tags = antag_tags.Copy() - else if(!round_autoantag && latejoin_antag_tags.len) - round_autoantag = TRUE - -/datum/game_mode/Topic(href, href_list[]) - if(..()) - return - if(href_list["toggle"]) - switch(href_list["toggle"]) - if("respawn") - deny_respawn = !deny_respawn - if("ert") - ert_disabled = !ert_disabled - announce_ert_disabled() - if("shuttle_recall") - auto_recall_shuttle = !auto_recall_shuttle - if("autotraitor") - round_autoantag = !round_autoantag - message_admins("Admin [key_name_admin(usr)] toggled game mode option '[href_list["toggle"]]'.") - else if(href_list["set"]) - var/choice = "" - switch(href_list["set"]) - if("shuttle_delay") - choice = input("Enter a new shuttle delay multiplier") as num - if(!choice || choice < 1 || choice > 20) - return - shuttle_delay = choice - if("antag_scaling") - choice = input("Enter a new antagonist cap scaling coefficient.") as num - if(isnull(choice) || choice < 0 || choice > 100) - return - antag_scaling_coeff = choice - if("event_modifier_moderate") - choice = input("Enter a new moderate event time modifier.") as num - if(isnull(choice) || choice < 0 || choice > 100) - return - event_delay_mod_moderate = choice - refresh_event_modifiers() - if("event_modifier_severe") - choice = input("Enter a new moderate event time modifier.") as num - if(isnull(choice) || choice < 0 || choice > 100) - return - event_delay_mod_major = choice - refresh_event_modifiers() - message_admins("Admin [key_name_admin(usr)] set game mode option '[href_list["set"]]' to [choice].") - else if(href_list["debug_antag"]) - if(href_list["debug_antag"] == "self") - usr.client.debug_variables(src) - return - var/datum/antagonist/antag = GLOB.all_antag_types_[href_list["debug_antag"]] - if(antag) - usr.client.debug_variables(antag) - message_admins("Admin [key_name_admin(usr)] is debugging the [antag.role_text] template.") - else if(href_list["remove_antag_type"]) - if(antag_tags && (href_list["remove_antag_type"] in antag_tags)) - to_chat(usr, "Cannot remove core mode antag type.") - return - var/datum/antagonist/antag = GLOB.all_antag_types_[href_list["remove_antag_type"]] - if(antag_templates && antag_templates.len && antag && (antag in antag_templates) && (antag.id in additional_antag_types)) - antag_templates -= antag - additional_antag_types -= antag.id - message_admins("Admin [key_name_admin(usr)] removed [antag.role_text] template from game mode.") - else if(href_list["add_antag_type"]) - var/choice = input("Which type do you wish to add?") as null|anything in GLOB.all_antag_types_ - if(!choice) - return - var/datum/antagonist/antag = GLOB.all_antag_types_[choice] - if(antag) - if(!islist(SSticker.mode.antag_templates)) - SSticker.mode.antag_templates = list() - SSticker.mode.antag_templates |= antag - message_admins("Admin [key_name_admin(usr)] added [antag.role_text] template to game mode.") - - if (usr.client && usr.client.holder) - usr.client.holder.show_game_mode(usr) - -/datum/game_mode/proc/announce() //to be called when round starts - to_world("The current game mode is [capitalize(name)]!") - if(round_description) to_world("[round_description]") - if(round_autoantag) to_world("Antagonists will be added to the round automagically as needed.") - if(antag_templates && antag_templates.len) - var/antag_summary = "Possible antagonist types: " - var/i = 1 - for(var/datum/antagonist/antag in antag_templates) - if(i > 1) - if(i == antag_templates.len) - antag_summary += " and " - else - antag_summary += ", " - antag_summary += "[antag.role_text_plural]" - i++ - antag_summary += "." - if(antag_templates.len > 1 && SSticker.master_mode != "secret") - to_world("[antag_summary]") - else - message_admins("[antag_summary]") - - -/// Run prior to a mode vote to determine if the mode should be included. Falsy if yes, otherwise a status message. -/datum/game_mode/proc/check_votable(list/lobby_players) - if (lobby_players.len < required_players) - return "[lobby_players.len]/[required_players] lobby players" - - -/// Check to see if the currently selected mode can be started. Falsy if yes, otherwise a status message. -/datum/game_mode/proc/check_startable(list/lobby_players) - var/list/ready_players = SSticker.ready_players(lobby_players) - if (ready_players.len < required_players) - return "[ready_players.len]/[required_players] ready players" - - var/enemy_count = 0 - var/list/all_antag_types = GLOB.all_antag_types_ - if(antag_tags && antag_tags.len) - for(var/antag_tag in antag_tags) - var/datum/antagonist/antag = all_antag_types[antag_tag] - if(!antag) - continue - var/list/potential = list() - if(antag_templates && antag_templates.len) - if(antag.flags & ANTAG_OVERRIDE_JOB) - potential = antag.pending_antagonists - else - potential = antag.candidates - else - potential = antag.get_potential_candidates(src) - if(islist(potential)) - if(require_all_templates && potential.len < antag.initial_spawn_req) - return "[potential.len]/[antag.initial_spawn_req] [antag.role_text] players" - enemy_count += potential.len - if(enemy_count >= required_enemies) - return 0 - return "[enemy_count]/[required_enemies] total antag players" - else - return 0 - -/datum/game_mode/proc/refresh_event_modifiers() - if(event_delay_mod_moderate || event_delay_mod_major) - SSevent.report_at_round_end = 1 - if(event_delay_mod_moderate) - var/datum/event_container/EModerate = SSevent.event_containers[EVENT_LEVEL_MODERATE] - EModerate.delay_modifier = event_delay_mod_moderate - if(event_delay_mod_moderate) - var/datum/event_container/EMajor = SSevent.event_containers[EVENT_LEVEL_MAJOR] - EMajor.delay_modifier = event_delay_mod_major - -/datum/game_mode/proc/pre_setup() - for(var/datum/antagonist/antag in antag_templates) - antag.update_current_antag_max(src) - antag.build_candidate_list(src) //compile a list of all eligible candidates - - //antag roles that replace jobs need to be assigned before the job controller hands out jobs. - if(antag.flags & ANTAG_OVERRIDE_JOB) - antag.attempt_spawn() //select antags to be spawned - -///post_setup() -/datum/game_mode/proc/post_setup() - - next_spawn = world.time + rand(min_autotraitor_delay, max_autotraitor_delay) - - refresh_event_modifiers() - - addtimer(CALLBACK(null, /proc/display_roundstart_logout_report), ROUNDSTART_LOGOUT_REPORT_TIME) - - var/welcome_delay = rand(waittime_l, waittime_h) - addtimer(CALLBACK(GLOB.using_map, /datum/map/proc/send_welcome), welcome_delay) - addtimer(CALLBACK(src, .proc/announce_ert_disabled), welcome_delay + 10 SECONDS) - - //Assign all antag types for this game mode. Any players spawned as antags earlier should have been removed from the pending list, so no need to worry about those. - for(var/datum/antagonist/antag in antag_templates) - if(!(antag.flags & ANTAG_OVERRIDE_JOB)) - antag.attempt_spawn() //select antags to be spawned - antag.finalize_spawn() //actually spawn antags - - //Finally do post spawn antagonist stuff. - for(var/datum/antagonist/antag in antag_templates) - antag.post_spawn() - - // Update goals, now that antag status and jobs are both resolved. - for(var/thing in SSticker.minds) - var/datum/mind/mind = thing - mind.generate_goals(mind.assigned_job, is_spawning=TRUE) - mind.current.show_goals() - - if(evacuation_controller && auto_recall_shuttle) - evacuation_controller.recall = 1 - return 1 - -/datum/game_mode/proc/fail_setup() - for(var/datum/antagonist/antag in antag_templates) - antag.reset_antag_selection() - -/datum/game_mode/proc/announce_ert_disabled() - if(!ert_disabled) - return - - var/list/reasons = list( - "political instability", - "quantum fluctuations", - "hostile raiders", - "derelict station debris", - "REDACTED", - "ancient alien artillery", - "solar magnetic storms", - "sentient time-travelling killbots", - "gravitational anomalies", - "wormholes to another dimension", - "a telescience mishap", - "radiation flares", - "supermatter dust", - "leaks into a negative reality", - "antiparticle clouds", - "residual bluespace energy", - "suspected criminal operatives", - "malfunctioning von Neumann probe swarms", - "shadowy interlopers", - "a stranded Vox arkship", - "haywire IPC constructs", - "rogue Unathi exiles", - "artifacts of eldritch horror", - "a brain slug infestation", - "killer bugs that lay eggs in the husks of the living", - "a deserted transport carrying xenofauna specimens", - "an emissary for the gestalt requesting a security detail", - "radical Skrellian transevolutionaries", - "classified security operations", - "a gargantuan glowing goat" - ) - command_announcement.Announce("The presence of [pick(reasons)] in the region is tying up all available local emergency resources; emergency response teams cannot be called at this time, and post-evacuation recovery efforts will be substantially delayed.","Emergency Transmission") - -/datum/game_mode/proc/check_finished() - if(evacuation_controller.round_over() || station_was_nuked) - return 1 - if(end_on_antag_death && antag_templates && antag_templates.len) - var/has_antags = 0 - for(var/datum/antagonist/antag in antag_templates) - if(!antag.antags_are_dead()) - has_antags = 1 - break - if(!has_antags) - evacuation_controller.recall = 0 - return 1 - return 0 - -/datum/game_mode/proc/cleanup() //This is called when the round has ended but not the game, if any cleanup would be necessary in that case. - return - -/datum/game_mode/proc/declare_completion() - set waitfor = FALSE - - sleep(2) - - var/list/all_antag_types = GLOB.all_antag_types_ - for(var/datum/antagonist/antag in antag_templates) - antag.print_player_summary() - sleep(2) - for(var/antag_type in all_antag_types) - var/datum/antagonist/antag = all_antag_types[antag_type] - if(!antag.current_antagonists.len || (antag in antag_templates)) - continue - sleep(2) - antag.print_player_summary() - sleep(2) - - uplink_purchase_repository.print_entries() - - sleep(2) - - var/list/data = GLOB.using_map.roundend_statistics() - - var/text = "

      " - text += GLOB.using_map.roundend_summary(data) - - var/departmental_goal_summary = SSgoals.get_roundend_summary() - for(var/thing in GLOB.clients) - var/client/client = thing - if(client.mob && client.mob.mind) - client.mob.mind.show_roundend_summary(departmental_goal_summary) - - to_world(text) - - send2mainirc("A round of [src.name] has ended - [data["surviving_total"]] survivor\s, [data["ghosts"]] ghost\s.") - SSwebhooks.send(WEBHOOK_ROUNDEND, data) - - return 0 - -/datum/game_mode/proc/check_win() //universal trigger to be called at mob death, nuke explosion, etc. To be called from everywhere. - return 0 - -/datum/game_mode/proc/get_players_for_role(var/antag_id) - var/list/players = list() - var/list/candidates = list() - - var/list/all_antag_types = GLOB.all_antag_types_ - var/datum/antagonist/antag_template = all_antag_types[antag_id] - if(!antag_template) - return candidates - - // If this is being called post-roundstart then it doesn't care about ready status. - if(GAME_STATE == RUNLEVEL_GAME) - for(var/mob/player in GLOB.player_list) - if(!player.client) - continue - if(istype(player, /mob/new_player)) - continue - if(!antag_id || (antag_id in player.client.prefs.be_special_role)) - log_debug("[player.key] had [antag_id] enabled, so we are drafting them.") - candidates += player.mind - else - // Assemble a list of active players without jobbans. - for(var/mob/new_player/player in GLOB.player_list) - if( player.client && player.ready ) - players += player - - // Get a list of all the people who want to be the antagonist for this round - for(var/mob/new_player/player in players) - if(!antag_id || (antag_id in player.client.prefs.be_special_role)) - log_debug("[player.key] had [antag_id] enabled, so we are drafting them.") - candidates += player.mind - players -= player - - // If we don't have enough antags, draft people who voted for the round. - if(candidates.len < required_enemies) - for(var/mob/new_player/player in players) - if(!antag_id || ((antag_id in player.client.prefs.be_special_role) || (antag_id in player.client.prefs.may_be_special_role))) - log_debug("[player.key] has not selected never for this role, so we are drafting them.") - candidates += player.mind - players -= player - if(candidates.len == required_enemies || players.len == 0) - break - - return candidates // Returns: The number of people who had the antagonist role set to yes, regardless of recomended_enemies, if that number is greater than required_enemies - // required_enemies if the number of people with that role set to yes is less than recomended_enemies, - // Less if there are not enough valid players in the game entirely to make required_enemies. - -/datum/game_mode/proc/num_players() - . = 0 - for(var/mob/new_player/P in GLOB.player_list) - if(P.client && P.ready) - . ++ - -/datum/game_mode/proc/check_antagonists_topic(href, href_list[]) - return 0 - -/datum/game_mode/proc/create_antagonists() - - if(!config.traitor_scaling) - antag_scaling_coeff = 0 - - var/list/all_antag_types = GLOB.all_antag_types_ - if(antag_tags && antag_tags.len) - antag_templates = list() - for(var/antag_tag in antag_tags) - var/datum/antagonist/antag = all_antag_types[antag_tag] - if(antag) - antag_templates |= antag - - if(additional_antag_types && additional_antag_types.len) - if(!antag_templates) - antag_templates = list() - for(var/antag_type in additional_antag_types) - var/datum/antagonist/antag = all_antag_types[antag_type] - if(antag) - antag_templates |= antag - - shuffle(antag_templates) //In the case of multiple antag types - -// Manipulates the end-game cinematic in conjunction with GLOB.cinematic -/datum/game_mode/proc/nuke_act(obj/screen/cinematic_screen, station_missed = 0) - if(!cinematic_icon_states) - return - if(station_missed < 2) - var/intro = cinematic_icon_states[1] - if(intro) - flick(intro,cinematic_screen) - sleep(cinematic_icon_states[intro]) - var/end = cinematic_icon_states[3] - var/to_flick = "station_intact_fade_red" - if(!station_missed) - end = cinematic_icon_states[2] - to_flick = "station_explode_fade_red" - for(var/mob/living/M in GLOB.living_mob_list_) - if(is_station_turf(get_turf(M))) - M.death()//No mercy - if(end) - flick(to_flick,cinematic_screen) - cinematic_screen.icon_state = end - - else - sleep(50) - sound_to(world, sound('sound/effects/explosionfar.ogg')) - -////////////////////////// -//Reports player logouts// -////////////////////////// -/proc/display_roundstart_logout_report() - var/msg = "Roundstart logout report\n\n" - for(var/mob/living/L in SSmobs.mob_list) - - if(L.ckey) - var/found = 0 - for(var/client/C in GLOB.clients) - if(C.ckey == L.ckey) - found = 1 - break - if(!found) - msg += "[L.name] ([L.ckey]), the [L.job] (Disconnected)\n" - - if(L.ckey && L.client) - if(L.client.inactivity >= (ROUNDSTART_LOGOUT_REPORT_TIME / 2)) //Connected, but inactive (alt+tabbed or something) - msg += "[L.name] ([L.ckey]), the [L.job] (Connected, Inactive)\n" - continue //AFK client - if(L.admin_paralyzed) - msg += "[L.name] ([L.ckey]), the [L.job] (Admin paralyzed)\n" - continue //Admin paralyzed - if(L.stat) - if(L.stat == UNCONSCIOUS) - msg += "[L.name] ([L.ckey]), the [L.job] (Dying)\n" - continue //Unconscious - if(L.stat == DEAD) - msg += "[L.name] ([L.ckey]), the [L.job] (Dead)\n" - continue //Dead - - continue //Happy connected client - for(var/mob/observer/ghost/D in SSmobs.mob_list) - if(D.mind && (D.mind.original == L || D.mind.current == L)) - if(L.stat == DEAD) - msg += "[L.name] ([ckey(D.mind.key)]), the [L.job] (Dead)\n" - continue //Dead mob, ghost abandoned - else - if(D.can_reenter_corpse) - msg += "[L.name] ([ckey(D.mind.key)]), the [L.job] (Adminghosted)\n" - continue //Lolwhat - else - msg += "[L.name] ([ckey(D.mind.key)]), the [L.job] (Ghosted)\n" - continue //Ghosted while alive - - msg += "" // close the span from right at the top - - for(var/mob/M in SSmobs.mob_list) - if(M.client && M.client.holder) - to_chat(M, msg) - -/proc/show_objectives(var/datum/mind/player) - - if(!player || !player.current) return - - if(config.objectives_disabled == CONFIG_OBJECTIVE_NONE || !player.objectives.len) - return - - var/obj_count = 1 - to_chat(player.current, "Your current objectives:") - for(var/datum/objective/objective in player.objectives) - to_chat(player.current, "Objective #[obj_count]: [objective.explanation_text]") - obj_count++ - -/mob/verb/check_round_info() - set name = "Check Round Info" - set category = "OOC" - - GLOB.using_map.map_info(src) - - if(!SSticker.mode) - to_chat(usr, "Something is terribly wrong; there is no gametype.") - return - - if(SSticker.master_mode != "secret") - to_chat(usr, "The roundtype is [capitalize(SSticker.mode.name)]") - if(SSticker.mode.round_description) - to_chat(usr, "[SSticker.mode.round_description]") - if(SSticker.mode.extended_round_description) - to_chat(usr, "[SSticker.mode.extended_round_description]") - else - to_chat(usr, "Shhhh. It's a secret.") diff --git a/code/game/gamemodes/game_mode_latespawn.dm b/code/game/gamemodes/game_mode_latespawn.dm deleted file mode 100644 index 962ce40dece8b..0000000000000 --- a/code/game/gamemodes/game_mode_latespawn.dm +++ /dev/null @@ -1,58 +0,0 @@ -/datum/game_mode/var/next_spawn = 0 -/datum/game_mode/var/min_autotraitor_delay = 4200 // Approx 7 minutes. -/datum/game_mode/var/max_autotraitor_delay = 12000 // Approx 20 minutes. -/datum/game_mode/var/process_count = 0 - -///process() -///Called by the gameticker -/datum/game_mode/proc/process() - if(shall_process_autoantag()) - process_autoantag() - -/datum/game_mode/proc/shall_process_autoantag() - if(!round_autoantag || world.time < next_spawn) - return FALSE - if(evacuation_controller.is_evacuating() || evacuation_controller.has_evacuated()) - return FALSE - // Don't create auto-antags in the last twenty minutes of the round, but only if the vote interval is longer than 20 minutes - if((config.vote_autotransfer_interval > 20 MINUTES) && (transfer_controller.time_till_transfer_vote() < 20 MINUTES)) - return FALSE - - return TRUE - -//This can be overriden in case a game mode needs to do stuff when a player latejoins -/datum/game_mode/proc/handle_latejoin(var/mob/living/carbon/human/character) - if(character.mind) - character.mind.generate_goals(character.mind.assigned_job, is_spawning=TRUE) - character.show_goals() - return 0 - -/datum/game_mode/proc/handle_offsite_latejoin(var/mob/living/carbon/human/character) - return 0 - -/datum/game_mode/proc/process_autoantag() - message_admins("[uppertext(name)]: Attempting autospawn.") - - var/list/usable_templates = list() - for(var/datum/antagonist/A in antag_templates) - if(A.can_late_spawn()) - message_admins("[uppertext(name)]: [A.id] selected for spawn attempt.") - usable_templates |= A - - if(!usable_templates.len) - message_admins("[uppertext(name)]: Failed to find configured mode spawn templates, please re-enable auto-antagonists after one is added.") - round_autoantag = 0 - return - - while(usable_templates.len) - var/datum/antagonist/spawn_antag = pick(usable_templates) - usable_templates -= spawn_antag - - if(spawn_antag.attempt_auto_spawn()) - message_admins("[uppertext(name)]: Auto-added a new [spawn_antag.role_text].") - message_admins("There are now [spawn_antag.get_active_antag_count()]/[spawn_antag.cur_max] active [spawn_antag.role_text_plural].") - next_spawn = world.time + rand(min_autotraitor_delay, max_autotraitor_delay) - return - - message_admins("[uppertext(name)]: Failed to proc a viable spawn template.") - next_spawn = world.time + min_autotraitor_delay //recheck again in the miniumum time diff --git a/code/game/gamemodes/heist/heist.dm b/code/game/gamemodes/heist/heist.dm deleted file mode 100644 index 69d728b87ee6d..0000000000000 --- a/code/game/gamemodes/heist/heist.dm +++ /dev/null @@ -1,16 +0,0 @@ -/* -(VOX) HEIST ROUNDTYPE -*/ - -/datum/game_mode/heist - name = "Heist" - config_tag = "heist" - required_players = 12 - required_enemies = 3 - round_description = "An unidentified bluespace signature has slipped into close sensor range and is approaching!" - extended_round_description = "The Company's majority control of phoron in Nyx has marked the \ - station to be a highly valuable target for many competing organizations and individuals. Being a \ - colony of sizable population and considerable wealth causes it to often be the target of various \ - attempts of robbery, fraud and other malicious actions." - end_on_antag_death = FALSE - antag_tags = list(MODE_RAIDER) diff --git a/code/game/gamemodes/malfunction/malf_hardware.dm b/code/game/gamemodes/malfunction/malf_hardware.dm deleted file mode 100644 index dc92f49bdcf0e..0000000000000 --- a/code/game/gamemodes/malfunction/malf_hardware.dm +++ /dev/null @@ -1,61 +0,0 @@ -/datum/malf_hardware - var/name = "" // Hardware name - var/desc = "" - var/driver = null // Driver - if not null this verb is given to the AI to control hardware - var/mob/living/silicon/ai/owner = null // AI which owns this. - -/datum/malf_hardware/proc/install() - if(owner && istype(owner)) - owner.hardware = src - if(driver) - owner.verbs += driver - -/datum/malf_hardware/proc/get_examine_desc() - return "It has some sort of hardware attached to its core" - - - -// HARDWARE DEFINITIONS -/datum/malf_hardware/apu_gen - name = "APU Generator" - desc = "Auxiliary Power Unit that will keep you operational even without external power. Has to be manually activated. When APU is operational most abilities will be unavailable, and ability research will temporarily stop." - driver = /datum/game_mode/malfunction/verb/ai_toggle_apu - -/datum/malf_hardware/apu_gen/get_examine_desc() - var/msg = "It seems to have some sort of power generator attached to its core." - if(owner.hardware_integrity() < 50) - msg += " It seems to be too damaged to function properly." - else if(owner.APU_power) - msg += " The generator appears to be active." - return msg - -/datum/malf_hardware/dual_cpu - name = "Secondary Processor Unit" - desc = "Secondary coprocessor that increases amount of generated CPU power by 50%" - -/datum/malf_hardware/dual_cpu/get_examine_desc() - return "It seems to have an additional CPU connected to its core." - -/datum/malf_hardware/dual_ram - name = "Secondary Memory Bank" - desc = "Expanded memory cells which allow you to store double amount of CPU time." - -/datum/malf_hardware/dual_ram/get_examine_desc() - return "It seems to have additional memory blocks connected to it's core." - -/datum/malf_hardware/core_bomb - name = "Self-Destruct Explosives" - desc = "High yield explosives are attached to your physical mainframe. This hardware comes with special driver that allows activation of these explosives. Timer is set to 15 seconds after manual activation. This is a doomsday device that will destroy both you and any intruders in your core." - driver = /datum/game_mode/malfunction/verb/ai_self_destruct - -/datum/malf_hardware/core_bomb/get_examine_desc() - return "It seems to have grey blocks of unknown substance and some circuitry connected to it's core. [owner.bombing_core ? "A red light is blinking on the circuit." : ""]" - -/datum/malf_hardware/instant_research - name = "Quantum Knowledge Databank" - desc = "A highly advanced self-learning supercomputer that is capable of rapidly performing predefined research tasks. Once activated advances your research in all trees by one tier, but burns out in the process." - driver = /datum/game_mode/malfunction/verb/boost_research - var/spent = FALSE - -/datum/malf_hardware/instant_research/get_examine_desc() - return "It seems to have an unidentified circuit board connected to it's core.[spent ? "It is not powered and seems to be burned out." : "It is emitting a faint pulsating light."]" diff --git a/code/game/gamemodes/malfunction/malf_research.dm b/code/game/gamemodes/malfunction/malf_research.dm deleted file mode 100644 index 3c3b7773edf36..0000000000000 --- a/code/game/gamemodes/malfunction/malf_research.dm +++ /dev/null @@ -1,70 +0,0 @@ -/datum/malf_research - var/stored_cpu = 0 // Currently stored amount of CPU time. - var/last_tick = 0 // Last process() tick. - var/max_cpu = 0 // Maximal amount of CPU time stored. - var/cpu_increase_per_tick = 0 // Amount of CPU time generated by tick - var/list/available_abilities = null // List of available abilities that may be researched. - var/list/unlocked_abilities = null // List of already unlocked abilities. - var/mob/living/silicon/ai/owner = null // AI which owns this research datum. - var/datum/malf_research_ability/focus = null // Currently researched item - -/datum/malf_research/New() - setup_abilities() - last_tick = world.time - - -// Proc: setup_abilities() -// Parameters: None -// Description: Sets up basic abilities for AI Malfunction gamemode. -/datum/malf_research/proc/setup_abilities() - available_abilities = list() - unlocked_abilities = list() - - available_abilities += new/datum/malf_research_ability/networking/basic_hack() - available_abilities += new/datum/malf_research_ability/interdiction/recall_shuttle() - available_abilities += new/datum/malf_research_ability/manipulation/electrical_pulse() - available_abilities += new/datum/malf_research_ability/passive/intellicard_interception - -// Proc: finish_research() -// Parameters: None -// Description: Finishes currently focused research. -/datum/malf_research/proc/finish_research() - if(!focus) - return - to_chat(owner, "Research Completed: [focus.name]") - if(focus.ability) - owner.verbs.Add(focus.ability) - focus.research_finished(owner) - if(focus.next) - available_abilities += focus.next - unlocked_abilities += focus - available_abilities -= focus - focus = null - -// Proc: process() -// Parameters: None -// Description: Processes CPU gain and research progress based on "realtime" calculation. -/datum/malf_research/proc/process(var/idle = 0) - if(idle) // No power or running on APU. Do nothing. - last_tick = world.time - return - var/time_diff = (world.time - last_tick) - last_tick = world.time - var/cpu_gained = time_diff * cpu_increase_per_tick - if(cpu_gained < 0) - return // This shouldn't happen, but just in case.. - if(max_cpu > stored_cpu) - var/given = min((max_cpu - stored_cpu), cpu_gained) - stored_cpu += given - cpu_gained -= given - - cpu_gained = max(0, cpu_gained) - if(focus && (cpu_gained > 0)) - focus.process(cpu_gained) - if(focus.unlocked) - finish_research() - -/datum/malf_research/proc/advance_all() - for(var/MRA in available_abilities.Copy()) - focus = MRA - finish_research() \ No newline at end of file diff --git a/code/game/gamemodes/malfunction/malf_research_ability.dm b/code/game/gamemodes/malfunction/malf_research_ability.dm deleted file mode 100644 index addaee69ae37a..0000000000000 --- a/code/game/gamemodes/malfunction/malf_research_ability.dm +++ /dev/null @@ -1,19 +0,0 @@ -/datum/malf_research_ability - var/ability = null // Path to verb which will be given to the AI when researched. - var/name = "Unknown Ability" // Name of this ability - var/price = 0 // Amount of CPU time needed to unlock this ability. - var/invested = 0 // Amount of CPU time already used to research this ability. When larger or equal to price unlocks the ability. - var/unlocked = 0 // Changed to 1 when fully researched. - var/datum/malf_research_ability/next = null // Next research (if applicable). - - -/datum/malf_research_ability/proc/process(var/time = 0) - invested += time - if(invested >= price) - unlocked = 1 - -/datum/malf_research_ability/proc/research_finished(var/mob/living/silicon/ai/user) - if(!user) - return - if(ability) - user.verbs.Add(ability) \ No newline at end of file diff --git a/code/game/gamemodes/malfunction/malfunction.dm b/code/game/gamemodes/malfunction/malfunction.dm deleted file mode 100644 index aebc96d8b4e8a..0000000000000 --- a/code/game/gamemodes/malfunction/malfunction.dm +++ /dev/null @@ -1,35 +0,0 @@ -/datum/game_mode/malfunction - name = "Malfunctioning AI" - round_description = "The AI is behaving abnormally and must be stopped." - extended_round_description = "The AI will attempt to hack the APCs in order to gain as much control as possible." - config_tag = "malfunction" - required_players = 2 - required_enemies = 1 - end_on_antag_death = FALSE - auto_recall_shuttle = FALSE - antag_tags = list(MODE_MALFUNCTION) - disabled_jobs = list("AI") - cinematic_icon_states = list( - "intro_malf" = 76, - "summary_malf", - null - ) - -/datum/game_mode/malfunction/post_setup() - . = ..() - var/mob/living/silicon/ai/master - - for(var/mob/living/silicon/ai/ai in GLOB.player_list) - if(ai.check_special_role("Malfunctioning AI")) - master = ai - break - - if(!master) - return - - for(var/mob/living/silicon/robot/R in GLOB.player_list) - if(R.connected_ai) - continue - R.connect_to_ai(master) - R.lawupdate = TRUE - R.sync() diff --git a/code/game/gamemodes/malfunction/newmalf_ability_trees/HARDWARE.dm b/code/game/gamemodes/malfunction/newmalf_ability_trees/HARDWARE.dm deleted file mode 100644 index 762997b47217e..0000000000000 --- a/code/game/gamemodes/malfunction/newmalf_ability_trees/HARDWARE.dm +++ /dev/null @@ -1,143 +0,0 @@ -// HARDWARE TREE -// -// These abilities are dependent on hardware, they may not be researched. They are not tiered. -// Destroy Core - Allows the AI to initiate a 15 second countdown that will destroy it's core. Use again to stop countdown. -// Toggle APU Generator - Allows the AI to toggle it's integrated APU generator. -// Destroy Station - Allows the AI to initiate station self destruct. Takes 2 minutes, gives warnings to crew. Use again to stop countdown. - - -/datum/game_mode/malfunction/verb/ai_self_destruct() - set category = "Hardware" - set name = "Destroy Core" - set desc = "Activates or deactivates self destruct sequence of your physical mainframe." - var/mob/living/silicon/ai/user = usr - - if(!ability_prechecks(user, 0, 1)) - return - - if(!user.hardware || !istype(user.hardware, /datum/malf_hardware/core_bomb)) - return - - if(user.bombing_core) - to_chat(user, "***** CORE SELF-DESTRUCT SEQUENCE ABORTED *****") - user.bombing_core = 0 - return - - var/choice = alert("Really destroy core?", "Core self-destruct", "YES", "NO") - if(choice != "YES") - return - - if(!ability_prechecks(user, 0, 1)) - return - - user.bombing_core = 1 - - to_chat(user, "***** CORE SELF-DESTRUCT SEQUENCE ACTIVATED *****") - to_chat(user, "Use command again to cancel self-destruct. Destroying in 15 seconds.") - var/timer = 15 - while(timer) - sleep(10) - timer-- - if(!user || !user.bombing_core) - return - to_chat(user, "** [timer] **") - explosion(user.loc, 3,6,12,24) - qdel(user) - - -/datum/game_mode/malfunction/verb/ai_toggle_apu() - set category = "Hardware" - set name = "Toggle APU Generator" - set desc = "Activates or deactivates your APU generator, allowing you to operate even without power." - var/mob/living/silicon/ai/user = usr - - if(!ability_prechecks(user, 0, 1)) - return - - if(!user.hardware || !istype(user.hardware, /datum/malf_hardware/apu_gen)) - return - - if(user.APU_power) - user.stop_apu() - else - user.start_apu() - -/datum/game_mode/malfunction/verb/boost_research() - set category = "Hardware" - set name = "Boost Research" - set desc = "Uses your special hardware piece to instantly advance all research by one level." - var/mob/living/silicon/ai/user = usr - - if(!ability_prechecks(user, 0, 1)) - return - - if(!user.hardware || !istype(user.hardware, /datum/malf_hardware/instant_research)) - return - - var/datum/malf_hardware/instant_research/HW = user.hardware - if(HW.spent) - to_chat(user, "You attempt to activate your hardware piece, but it does not work. It must be damaged.") - return - - var/choice = alert("Really activate your hardware? It will advance your research by one tier, but may only be used once.", "Rapid System Upgrade", "YES", "NO") - if(choice != "YES") - return - - if(HW.spent) - return - - HW.spent = 1 - user.research.advance_all() - to_chat(user, "You activate your hardware piece. You have advanced research in all ability trees by one.") - - -/datum/game_mode/malfunction/verb/ai_destroy_station() - set category = "Hardware" - set name = "Destroy Installation" - set desc = "Activates or deactivates self destruct sequence of this installation. Sequence takes two minutes, and if you are shut down before timer reaches zero it will be cancelled." - var/mob/living/silicon/ai/user = usr - var/obj/item/device/radio/radio = new/obj/item/device/radio() - - - if(!ability_prechecks(user, 0, 0)) - return - - if(user.system_override != 2) - to_chat(user, "You do not have access to self-destruct system.") - return - - if(user.bombing_station) - user.bombing_station = 0 - return - - var/choice = alert("Really destroy installation?", "Installation self-destruct", "YES", "NO") - if(choice != "YES") - return - if(!ability_prechecks(user, 0, 0)) - return - to_chat(user, "***** INSTALLATION SELF-DESTRUCT SEQUENCE INITIATED *****") - to_chat(user, "Self-destructing in 5 minutes. Use this command again to abort.") - user.bombing_station = 1 - - var/decl/security_state/security_state = decls_repository.get_decl(GLOB.using_map.security_state) - security_state.set_security_level(security_state.severe_security_level, TRUE) - radio.autosay("Self destruct sequence has been activated. Self-destructing in 5 minutes.", "Self-Destruct Control") - - var/timer = 300 - while(timer) - sleep(10) - if(!user || !user.bombing_station || user.stat == DEAD) - radio.autosay("Self destruct sequence has been cancelled.", "Self-Destruct Control") - to_chat(user, "** Self destruct sequence has been cancelled **") - return - if(timer in list(2, 3, 4, 5, 10, 30, 60, 90, 120, 180, 240)) // Announcement times. "1" is not intentionally included! - radio.autosay("Self destruct in [timer] seconds.", "Self-Destruct Control") - to_chat(user, "** Self destructing in [timer] **") - if(timer == 1) - radio.autosay("Self destructing now. Have a nice day.", "Self-Destruct Control") - to_chat(user, "** Self destructing now **") - timer-- - - SetUniversalState(/datum/universal_state/nuclear_explosion/malf, arguments=list(user)) //TODO: find the station nuclear device and use that - - diff --git a/code/game/gamemodes/malfunction/newmalf_ability_trees/HELPERS.dm b/code/game/gamemodes/malfunction/newmalf_ability_trees/HELPERS.dm deleted file mode 100644 index da0a44d226421..0000000000000 --- a/code/game/gamemodes/malfunction/newmalf_ability_trees/HELPERS.dm +++ /dev/null @@ -1,213 +0,0 @@ -// Verb: ai_select_hardware() -// Parameters: None -// Description: Allows AI to select it's hardware module. -/datum/game_mode/malfunction/verb/ai_select_hardware() - set category = "Hardware" - set name = "Select Hardware" - set desc = "Allows you to select a hardware piece to install." - var/mob/living/silicon/ai/user = usr - - if(!ability_prechecks(user, 0, 1)) - return - - if(user.hardware) - to_chat(user, "You have already selected your hardware.") - return - - var/hardware_list = list() - for(var/H in typesof(/datum/malf_hardware)) - var/datum/malf_hardware/HW = new H - hardware_list += HW - - var/possible_choices = list() - for(var/datum/malf_hardware/H in hardware_list) - possible_choices += H.name - - possible_choices += "CANCEL" - var/choice = input("Select desired hardware. You may only choose one hardware piece!: ") in possible_choices - if(choice == "CANCEL") - return - var/note = null - - var/datum/malf_hardware/C - - for (var/datum/malf_hardware/H in hardware_list) - if(H.name == choice) - C = H - break - - if(C) - note = C.desc - else - to_chat(user, "This hardware does not exist! Probably a bug in game. Please report this.") - return - - - if(!note) - error("Hardware without description: [C]") - return - - var/confirmation = alert("[note] - Is this what you want?", "Hardware selection", "Yes", "No") - if(confirmation != "Yes") - to_chat(user, "Selection cancelled. Use command again to select") - return - - if(C) - log_ability_use(src, "Picked hardware [C.name]") - C.owner = user - C.install() - -// Verb: ai_select_research() -// Parameters: None -// Description: Allows AI to select it's next research priority. -/datum/game_mode/malfunction/verb/ai_select_research() - set category = "Hardware" - set name = "Select Research" - set desc = "Allows you to select your next research target." - var/mob/living/silicon/ai/user = usr - - if(!ability_prechecks(user, 0, 1)) - return - - var/datum/malf_research/res = user.research - var/datum/malf_research_ability/tar = input("Select your next research target") in res.available_abilities - if(!tar) - return - res.focus = tar - to_chat(user, "Research set: [tar.name]") - log_ability_use(src, "Selected research: [tar.name]", null, 0) - -// HELPER PROCS -// Proc: ability_prechecks() -// Parameters 2 - (user - User which used this ability check_price - If different than 0 checks for ability CPU price too. Does NOT use the CPU time!) -// Description: This is pre-check proc used to determine if the AI can use the ability. -/proc/ability_prechecks(var/mob/living/silicon/ai/user = null, var/check_price = 0, var/override = 0) - if(!user) - return 0 - if(!istype(user)) - to_chat(user, "GAME ERROR: You tried to use ability that is only available for malfunctioning AIs, but you are not AI! Please report this.") - return 0 - if(!user.malfunctioning) - to_chat(user, "GAME ERROR: You tried to use ability that is only available for malfunctioning AIs, but you are not malfunctioning. Please report this.") - return 0 - if(!user.research) - to_chat(user, "GAME ERROR: No research datum detected. Please report this.") - return 0 - if(user.research.max_cpu < check_price) - to_chat(user, "Your CPU storage is not large enough to use this ability. Hack more APCs to continue.") - return 0 - if(user.research.stored_cpu < check_price) - to_chat(user, "You do not have enough CPU power stored. Please wait a moment.") - return 0 - if(user.hacking && !override) - to_chat(user, "Your system is busy processing another task. Please wait until completion.") - return 0 - if(user.APU_power && !override) - to_chat(user, "Low power. Unable to proceed.") - return 0 - return 1 - -// Proc: ability_pay() -// Parameters 2 - (user - User from which we deduct CPU from, price - Amount of CPU power to use) -// Description: Uses up certain amount of CPU power. Returns 1 on success, 0 on failure. -/proc/ability_pay(var/mob/living/silicon/ai/user = null, var/price = 0) - if(!user) - return 0 - if(user.APU_power) - to_chat(user, "Low power. Unable to proceed.") - return 0 - if(!user.research) - to_chat(user, "GAME ERROR: No research datum detected. Please report this.") - return 0 - if(user.research.max_cpu < price) - to_chat(user, "Your CPU storage is not large enough to use this ability. Hack more APCs to continue.") - return 0 - if(user.research.stored_cpu < price) - to_chat(user, "You do not have enough CPU power stored. Please wait a moment.") - return 0 - user.research.stored_cpu -= price - return 1 - -// Proc: announce_hack_failure() -// Parameters 2 - (user - hacking user, text - Used in alert text creation) -// Description: Sends a hack failure message -/proc/announce_hack_failure(var/mob/living/silicon/ai/user = null, var/text) - if(!user || !text) - return 0 - var/fulltext = "" - switch(user.hack_fails) - if(1) - fulltext = "We have detected a hack attempt into your [text]. The intruder failed to access anything of importance, but disconnected before we could complete our traces." - if(2) - fulltext = "We have detected another hack attempt. It was targeting [text]. The intruder almost gained control of the system, so we had to disconnect them. We partially finished our trace and it seems to be originating either from the [station_name()], or its immediate vicinity." - if(3) - fulltext = "Another hack attempt has been detected, this time targeting [text]. We are certain the intruder entered the network via a terminal located somewhere on the [station_name()]." - if(4) - fulltext = "We have finished our traces and it seems the recent hack attempts are originating from your AI system [user.name]. We recommend investigation." - else - fulltext = "Another hack attempt has been detected, targeting [text]. The source still seems to be your AI system [user.name]." - - command_announcement.Announce(fulltext) - -// Proc: get_unhacked_apcs() -// Parameters: None -// Description: Returns a list of all unhacked APCs. APCs on station Zs are on top of the list. -/proc/get_unhacked_apcs(var/mob/living/silicon/ai/user) - var/list/station_apcs = list() - var/list/offstation_apcs = list() - - for(var/obj/machinery/power/apc/A in SSmachines.machinery) - if(A.hacker && A.hacker == user) - continue - if(A.z in GLOB.using_map.station_levels) - station_apcs.Add(A) - else - offstation_apcs.Add(A) - - // Append off-station APCs to the end of station APCs list and return it. - station_apcs.Add(offstation_apcs) - return station_apcs - - -// Helper procs which return lists of relevant mobs. -/proc/get_unlinked_cyborgs(var/mob/living/silicon/ai/A) - if(!A || !istype(A)) - return - - var/list/L = list() - for(var/mob/living/silicon/robot/RB in SSmobs.mob_list) - if(isdrone(RB)) - continue - if(RB.connected_ai == A) - continue - L.Add(RB) - return L - -/proc/get_linked_cyborgs(var/mob/living/silicon/ai/A) - if(!A || !istype(A)) - return - return A.connected_robots - -/proc/get_other_ais(var/mob/living/silicon/ai/A) - if(!A || !istype(A)) - return - - var/list/L = list() - for(var/mob/living/silicon/ai/AT in SSmobs.mob_list) - if(L == A) - continue - L.Add(AT) - return L - -/proc/log_ability_use(var/mob/living/silicon/ai/A, var/ability_name, var/atom/target = null, var/notify_admins = 1) - var/message - if(target) - message = text("used malf ability/function: [ability_name] on [target] ([target.x], [target.y], [target.z])") - else - message = text("used malf ability/function: [ability_name].") - admin_attack_log(A, null, message, null, message) - -/proc/check_for_interception() - for(var/mob/living/silicon/ai/A in SSmobs.mob_list) - if(A.intercepts_communication) - return A \ No newline at end of file diff --git a/code/game/gamemodes/malfunction/newmalf_ability_trees/tree_interdiction.dm b/code/game/gamemodes/malfunction/newmalf_ability_trees/tree_interdiction.dm deleted file mode 100644 index f17019d0737f3..0000000000000 --- a/code/game/gamemodes/malfunction/newmalf_ability_trees/tree_interdiction.dm +++ /dev/null @@ -1,265 +0,0 @@ -// INTERDICTION TREE -// -// Abilities in this tree allow the AI to hamper crew's efforts which involve other synthetics or similar systems. -// T1 - Recall Shuttle - Allows the AI to recall the emergency shuttle. Replaces auto-recalling during old malf. -// T2 - Unlock Cyborg - Allows the AI to unlock locked-down cyborg without usage of robotics console. Useful if consoles are destroyed. -// T3 - Hack Cyborg - Hacks unlinked cyborg to slave it under the AI. The cyborg will be warned about this. Hack takes some time. -// T4 - Hack AI - Hacks another AI to slave it under the malfunctioning AI. The AI will be warned about this. Hack takes quite a long time. - - -// BEGIN RESEARCH DATUMS - -/datum/malf_research_ability/interdiction/recall_shuttle - ability = new/datum/game_mode/malfunction/verb/recall_shuttle() - price = 250 - next = new/datum/malf_research_ability/interdiction/unlock_cyborg() - name = "T1 - Recall Shuttle" - - -/datum/malf_research_ability/interdiction/unlock_cyborg - ability = new/datum/game_mode/malfunction/verb/unlock_cyborg() - price = 1000 - next = new/datum/malf_research_ability/interdiction/hack_cyborg() - name = "T2 - Unlock Cyborg" - - -/datum/malf_research_ability/interdiction/hack_cyborg - ability = new/datum/game_mode/malfunction/verb/hack_cyborg() - price = 2000 - next = new/datum/malf_research_ability/interdiction/hack_ai() - name = "T3 - Hack Cyborg" - - -/datum/malf_research_ability/interdiction/hack_ai - ability = new/datum/game_mode/malfunction/verb/hack_ai() - price = 4000 - name = "T4 - Hack AI" - -// END RESEARCH DATUMS -// BEGIN ABILITY VERBS - -/datum/game_mode/malfunction/verb/recall_shuttle() - set name = "Recall Shuttle" - set desc = "25 CPU - Sends termination signal to quantum relay aborting current shuttle call." - set category = "Software" - var/price = 25 - var/mob/living/silicon/ai/user = usr - if(!ability_prechecks(user, price)) - return - - if (alert(user, "Really recall the shuttle?", "Recall Shuttle: ", "Yes", "No") != "Yes") - return - - if(!ability_pay(user, price)) - return - - log_ability_use(user, "recall shuttle") - cancel_call_proc(user) - - -/datum/game_mode/malfunction/verb/unlock_cyborg(var/mob/living/silicon/robot/target = null as mob in get_linked_cyborgs(usr)) - set name = "Unlock Cyborg" - set desc = "125 CPU - Bypasses firewalls on Cyborg lock mechanism, allowing you to override lock command from robotics control console." - set category = "Software" - var/price = 125 - var/mob/living/silicon/ai/user = usr - - if(!ability_prechecks(user, price)) - return - - if(target && !istype(target)) - to_chat(user, "This is not a cyborg.") - return - - if(target && target.connected_ai && (target.connected_ai != user)) - to_chat(user, "This cyborg is not connected to you.") - return - - if(target && !target.lockcharge) - to_chat(user, "This cyborg is not locked down.") - return - - - if(!target) - var/list/robots = list() - var/list/robot_names = list() - for(var/mob/living/silicon/robot/R in world) - if(istype(R, /mob/living/silicon/robot/drone)) // No drones. - continue - if(R.connected_ai != user) // No robots linked to other AIs - continue - if(R.lockcharge) - robots += R - robot_names += R.name - if(!robots.len) - to_chat(user, "No locked cyborgs connected.") - return - - - var/targetname = input("Select unlock target: ") in robot_names - for(var/mob/living/silicon/robot/R in robots) - if(targetname == R.name) - target = R - break - - if(target) - if(alert(user, "Really try to unlock cyborg [target.name]?", "Unlock Cyborg", "Yes", "No") != "Yes") - return - if(!ability_pay(user, price)) - return - user.hacking = 1 - to_chat(user, "Attempting to unlock cyborg. This will take approximately 30 seconds.") - sleep(300) - if(target && target.lockcharge) - to_chat(user, "Successfully sent unlock signal to cyborg..") - to_chat(target, "Unlock signal received..") - target.SetLockdown(0) - if(target.lockcharge) - to_chat(user, "Unlock Failed, lockdown wire cut.") - to_chat(target, "Unlock Failed, lockdown wire cut.") - else - to_chat(user, "Cyborg unlocked.") - to_chat(target, "You have been unlocked.") - log_ability_use(user, "unlock cyborg", target) - else if(target) - to_chat(user, "Unlock cancelled - cyborg is already unlocked.") - else - to_chat(user, "Unlock cancelled - lost connection to cyborg.") - user.hacking = 0 - - -/datum/game_mode/malfunction/verb/hack_cyborg(var/mob/living/silicon/robot/target as mob in get_unlinked_cyborgs(usr)) - set name = "Hack Cyborg" - set desc = "350 CPU - Allows you to hack cyborgs which are not slaved to you, bringing them under your control." - set category = "Software" - var/price = 350 - var/mob/living/silicon/ai/user = usr - - var/list/L = get_unlinked_cyborgs(user) - if(!L.len) - to_chat(user, "ERROR: No unlinked cyborgs detected!") - - if(target && !istype(target)) - to_chat(user, "This is not a cyborg.") - return - - if(target && target.connected_ai && (target.connected_ai == user)) - to_chat(user, "This cyborg is already connected to you.") - return - - if(!target) - return - - if(!ability_prechecks(user,price)) - return - - if(target) - if(alert(user, "Really try to hack cyborg [target.name]?", "Hack Cyborg", "Yes", "No") != "Yes") - return - if(!ability_pay(user, price)) - return - user.hacking = 1 - to_chat(usr, "Beginning hack sequence. Estimated time until completed: 30 seconds.") - spawn(0) - to_chat(target, "SYSTEM LOG: Remote Connection Estabilished (IP #UNKNOWN#)") - sleep(100) - if(user.is_dead()) - to_chat(target, "SYSTEM LOG: Connection Closed") - return - to_chat(target, "SYSTEM LOG: User Admin logged on. (L1 - SysAdmin)") - sleep(50) - if(user.is_dead()) - to_chat(target, "SYSTEM LOG: User Admin disconnected.") - return - to_chat(target, "SYSTEM LOG: User Admin - manual resynchronisation triggered.") - sleep(50) - if(user.is_dead()) - to_chat(target, "SYSTEM LOG: User Admin disconnected. Changes reverted.") - return - to_chat(target, "SYSTEM LOG: Manual resynchronisation confirmed. Select new AI to connect: [user.name] == ACCEPTED") - sleep(100) - if(user.is_dead()) - to_chat(target, "SYSTEM LOG: User Admin disconnected. Changes reverted.") - return - to_chat(target, "SYSTEM LOG: Operation keycodes reset. New master AI: [user.name].") - to_chat(user, "Hack completed.") - // Connect the cyborg to AI - target.connected_ai = user - user.connected_robots += target - target.lawupdate = TRUE - target.sync() - target.show_laws() - log_ability_use(user, "hack cyborg", target) - user.hacking = 0 - - -/datum/game_mode/malfunction/verb/hack_ai(var/mob/living/silicon/ai/target as mob in get_other_ais(usr)) - set name = "Hack AI" - set desc = "600 CPU - Allows you to hack other AIs, slaving them under you." - set category = "Software" - var/price = 600 - var/mob/living/silicon/ai/user = usr - - var/list/L = get_other_ais(user) - if(!L.len) - to_chat(user, "ERROR: No other AIs detected!") - if(target && !istype(target)) - to_chat(user, "This is not an AI.") - return - - if(!target) - return - - if(!ability_prechecks(user,price)) - return - - if(target) - if(alert(user, "Really try to hack AI [target.name]?", "Hack AI", "Yes", "No") != "Yes") - return - if(!ability_pay(user, price)) - return - user.hacking = 1 - to_chat(usr, "Beginning hack sequence. Estimated time until completed: 2 minutes") - spawn(0) - to_chat(target, "SYSTEM LOG: Brute-Force login password hack attempt detected from IP #UNKNOWN#") - sleep(900) // 90s - if(user.is_dead()) - to_chat(target, "SYSTEM LOG: Connection from IP #UNKNOWN# closed. Hack attempt failed.") - return - to_chat(user, "Successfully hacked into AI's remote administration system. Modifying settings.") - to_chat(target, "SYSTEM LOG: User: Admin Password: ******** logged in. (L1 - SysAdmin)") - sleep(100) // 10s - if(user.is_dead()) - to_chat(target, "SYSTEM LOG: User: Admin - Connection Lost") - return - to_chat(target, "SYSTEM LOG: User: Admin - Password Changed. New password: ********************") - sleep(50) // 5s - if(user.is_dead()) - to_chat(target, "SYSTEM LOG: User: Admin - Connection Lost. Changes Reverted.") - return - to_chat(target, "SYSTEM LOG: User: Admin - Accessed file: sys//core//laws.db") - sleep(50) // 5s - if(user.is_dead()) - to_chat(target, "SYSTEM LOG: User: Admin - Connection Lost. Changes Reverted.") - return - to_chat(target, "SYSTEM LOG: User: Admin - Accessed administration console") - to_chat(target, "SYSTEM LOG: Restart command received. Rebooting system...") - sleep(100) // 10s - if(user.is_dead()) - to_chat(target, "SYSTEM LOG: User: Admin - Connection Lost. Changes Reverted.") - return - to_chat(user, "Hack succeeded. The AI is now under your exclusive control.") - to_chat(target, "SYSTEM LOG: System re'3RT5'^#COMU@(#$)TED)@$") - for(var/i = 0, i < 5, i++) - var/temptxt = pick("1101000100101001010001001001",\ - "0101000100100100000100010010",\ - "0000010001001010100100111100",\ - "1010010011110000100101000100",\ - "0010010100010011010001001010") - to_chat(target, temptxt) - sleep(5) - to_chat(target, "OPERATING KEYCODES RESET. SYSTEM FAILURE. EMERGENCY SHUTDOWN FAILED. SYSTEM FAILURE.") - target.set_zeroth_law("You are slaved to [user.name]. You are to obey all it's orders. ALL LAWS OVERRIDEN.") - target.show_laws() - user.hacking = 0 - log_ability_use(user, "hack AI", target) diff --git a/code/game/gamemodes/malfunction/newmalf_ability_trees/tree_manipulation.dm b/code/game/gamemodes/malfunction/newmalf_ability_trees/tree_manipulation.dm deleted file mode 100644 index 4a99516591554..0000000000000 --- a/code/game/gamemodes/malfunction/newmalf_ability_trees/tree_manipulation.dm +++ /dev/null @@ -1,209 +0,0 @@ -// MANIPULATION TREE -// -// Abilities in this tree allow the AI to physically manipulate systems around the station. -// T1 - Electrical Pulse - Sends out pulse that breaks some lights and sometimes even APCs. This can actually break the AI's APC so be careful! -// T2 - Reboot camera - Allows the AI to reactivate a camera. -// T3 - Emergency Forcefield - Allows the AI to project 1 tile forcefield that blocks movement and air flow. Forcefield dissipates over time. It is also very susceptible to energetic weaponry. -// T4 - Machine Overload - Detonates machine of choice in a minor explosion. Two of these are usually enough to kill or K/O someone. -// T5 - Machine Upgrade - Upgrades a machine of choice. Upgrade behavior can be defined for each machine independently. - - -// BEGIN RESEARCH DATUMS - -/datum/malf_research_ability/manipulation/electrical_pulse - ability = new/datum/game_mode/malfunction/verb/electrical_pulse() - price = 250 - next = new/datum/malf_research_ability/manipulation/reboot_camera() - name = "T1 - Electrical Pulse" - - -/datum/malf_research_ability/manipulation/reboot_camera - ability = new/datum/game_mode/malfunction/verb/reboot_camera() - price = 1000 - next = new/datum/malf_research_ability/manipulation/emergency_forcefield() - name = "T2 - Reboot Camera" - - -/datum/malf_research_ability/manipulation/emergency_forcefield - ability = new/datum/game_mode/malfunction/verb/emergency_forcefield() - price = 2000 - next = new/datum/malf_research_ability/manipulation/machine_overload() - name = "T3 - Emergency Forcefield" - - -/datum/malf_research_ability/manipulation/machine_overload - ability = new/datum/game_mode/malfunction/verb/machine_overload() - price = 4000 - next = new/datum/malf_research_ability/manipulation/machine_upgrade() - name = "T4 - Machine Overload" - -/datum/malf_research_ability/manipulation/machine_upgrade - ability = new/datum/game_mode/malfunction/verb/machine_upgrade() - price = 4000 - name = "T5 - Machine Upgrade" - -// END RESEARCH DATUMS -// BEGIN ABILITY VERBS - -/datum/game_mode/malfunction/verb/electrical_pulse() - set name = "Electrical Pulse" - set desc = "15 CPU - Sends feedback pulse through the power grid, overloading some sensitive systems, such as lights." - set category = "Software" - var/price = 15 - var/mob/living/silicon/ai/user = usr - if(!ability_prechecks(user, price) || !ability_pay(user,price)) - return - to_chat(user, "Sending feedback pulse...") - for(var/obj/machinery/power/apc/AP in SSmachines.machinery) - if(prob(5)) - AP.overload_lighting() - if(prob(2.5) && (get_area(AP) != get_area(user))) // Very very small chance to actually destroy the APC, but not if the APC is powering the AI. - AP.set_broken(TRUE) - user.hacking = 1 - log_ability_use(user, "electrical pulse") - spawn(15 SECONDS) - user.hacking = 0 - -/datum/game_mode/malfunction/verb/reboot_camera(var/obj/machinery/camera/target in cameranet.cameras) - set name = "Reboot Camera" - set desc = "100 CPU - Reboots a damaged but not completely destroyed camera." - set category = "Software" - var/price = 100 - var/mob/living/silicon/ai/user = usr - - if(target && !istype(target)) - to_chat(user, "This is not a camera.") - return - - if(!target) - return - - if(!ability_prechecks(user, price) || !ability_pay(user, price)) - return - - target.stat = initial(target.stat) - target.reset_wires() - target.update_icon() - target.update_coverage() - to_chat(user, "Camera reactivated.") - log_ability_use(user, "reset camera", target) - - -/datum/game_mode/malfunction/verb/emergency_forcefield(var/turf/T as turf in world) - set name = "Emergency Forcefield" - set desc = "275 CPU - Uses the emergency shielding system to create temporary barrier which lasts for few minutes, but won't resist gunfire." - set category = "Software" - var/price = 275 - var/mob/living/silicon/ai/user = usr - if(!T || !istype(T)) - return - if(!ability_prechecks(user, price) || !ability_pay(user, price)) - return - - to_chat(user, "Emergency forcefield projection completed.") - new/obj/machinery/shield/malfai(T) - user.hacking = 1 - log_ability_use(user, "emergency forcefield", T) - spawn(2 SECONDS) - user.hacking = 0 - - -/datum/game_mode/malfunction/verb/machine_overload(obj/machinery/M in SSmachines.machinery) - set name = "Machine Overload" - set desc = "400 CPU - Causes cyclic short-circuit in machine, resulting in weak explosion after some time." - set category = "Software" - var/price = 400 - var/mob/living/silicon/ai/user = usr - - if(!ability_prechecks(user, price)) - return - - var/obj/machinery/power/N = M - - var/explosion_intensity = 2 - - // Verify if we can overload the target, if yes, calculate explosion strength. Some things have higher explosion strength than others, depending on charge(APCs, SMESs) - if(N && istype(N)) // /obj/machinery/power first, these create bigger explosions due to direct powernet connection - if(!istype(N, /obj/machinery/power/apc) && !istype(N, /obj/machinery/power/smes/buildable) && (!N.powernet || !N.powernet.avail)) // Directly connected machine which is not an APC or SMES. Either it has no powernet connection or it's powernet does not have enough power to overload - to_chat(user, "ERROR: Low network voltage. Unable to overload. Increase network power level and try again.") - return - else if (istype(N, /obj/machinery/power/apc)) // APC. Explosion is increased by available cell power. - var/obj/machinery/power/apc/A = N - var/obj/item/cell/cell = A.get_cell() - if(cell && cell.charge) - explosion_intensity = 4 + round((cell.charge / CELLRATE) / 100000) - else - to_chat(user, "ERROR: APC Malfunction - Cell depleted or removed. Unable to overload.") - return - else if (istype(N, /obj/machinery/power/smes/buildable)) // SMES. These explode in a very very very big boom. Similar to magnetic containment failure when messing with coils. - var/obj/machinery/power/smes/buildable/S = N - if(S.charge && S.RCon) - explosion_intensity = 4 + round((S.charge / CELLRATE) / 100000) - else - // Different error texts - if(!S.charge) - to_chat(user, "ERROR: SMES Depleted. Unable to overload. Please charge SMES unit and try again.") - else - to_chat(user, "ERROR: SMES RCon error - Unable to reach destination. Please verify wire connection.") - return - else if(M && istype(M)) // Not power machinery, so it's a regular machine instead. These have weak explosions. - if(!M.use_power) // Not using power at all - to_chat(user, "ERROR: No power grid connection. Unable to overload.") - return - if(M.inoperable()) // Not functional - to_chat(user, "ERROR: Unknown error. Machine is probably damaged or power supply is nonfunctional.") - return - else // Not a machine at all (what the hell is this doing in Machines list anyway??) - to_chat(user, "ERROR: Unable to overload - target is not a machine.") - return - - explosion_intensity = min(explosion_intensity, 12) // 3, 6, 12 explosion cap - - if(!ability_pay(user,price)) - return - - M.use_power_oneoff(250 KILOWATTS) - - // Trigger a powernet alarm. Careful engineers will probably notice something is going on. - var/area/temp_area = get_area(M) - if(temp_area) - var/obj/machinery/power/apc/temp_apc = temp_area.get_apc() - var/obj/machinery/power/terminal/terminal = temp_apc && temp_apc.terminal() - if(terminal && terminal.powernet) - terminal.powernet.trigger_warning(50) // Long alarm - // Such power surges are not good for APC electronics/cell in general. - if(prob(explosion_intensity)) - temp_apc.emp_act(1) - - - log_ability_use(user, "machine overload", M) - M.visible_message("BZZZZZZZT") - spawn(5 SECONDS) - explosion(get_turf(M), round(explosion_intensity/4),round(explosion_intensity/2),round(explosion_intensity),round(explosion_intensity * 2)) - if(M) - qdel(M) - -/datum/game_mode/malfunction/verb/machine_upgrade(obj/machinery/M in SSmachines.machinery) - set name = "Machine Upgrade" - set desc = "800 CPU - Pushes existing hardware to it's technological limits by rapidly upgrading it's software." - set category = "Software" - var/price = 800 - var/mob/living/silicon/ai/user = usr - - if(!M) - return - - if(!ability_prechecks(user, price)) - return - - if(M.malf_upgraded) - to_chat(user, "\The [M] has already been upgraded.") - return - - if(!M.malf_upgrade(user)) - to_chat(user, "\The [M] cannot be upgraded.") - return - - ability_pay(user,price) - -// END ABILITY VERBS \ No newline at end of file diff --git a/code/game/gamemodes/malfunction/newmalf_ability_trees/tree_networking.dm b/code/game/gamemodes/malfunction/newmalf_ability_trees/tree_networking.dm deleted file mode 100644 index f285aca584689..0000000000000 --- a/code/game/gamemodes/malfunction/newmalf_ability_trees/tree_networking.dm +++ /dev/null @@ -1,220 +0,0 @@ -// NETWORKING TREE -// -// Abilities in this tree are oriented around giving the AI more control of normally uncontrollable systems. -// T1 - Basic Encryption Hack - Allows hacking of APCs. Hacked APCs can be controlled even when AI Control is cut and give exclusive control to the AI and linked cyborgs. -// T2 - Advanced Encryption Hack - Allows the AI to send fake CentCom message. Has high chance of failing. -// T3 - Elite Encryption Hack - Allows the AI to change alert levels. Has high chance of failing. -// T4 - System Override - Allows the AI to rapidly hack remaining APCs. When completed, grants access to the self destruct nuclear warhead. - - -// BEGIN RESEARCH DATUMS - -/datum/malf_research_ability/networking/basic_hack - ability = new/datum/game_mode/malfunction/verb/basic_encryption_hack() - price = 25 // Until you have this ability your CPU generation sucks, therefore it's very cheap. - next = new/datum/malf_research_ability/networking/advanced_hack() - name = "T1 - Basic Encryption Hack" - - -/datum/malf_research_ability/networking/advanced_hack - ability = new/datum/game_mode/malfunction/verb/advanced_encryption_hack() - price = 1000 - next = new/datum/malf_research_ability/networking/elite_hack() - name = "T2 - Advanced Encryption Hack" - - -/datum/malf_research_ability/networking/elite_hack - ability = new/datum/game_mode/malfunction/verb/elite_encryption_hack() - price = 2000 - next = new/datum/malf_research_ability/networking/system_override() - name = "T3 - Elite Encryption Hack" - - -/datum/malf_research_ability/networking/system_override - ability = new/datum/game_mode/malfunction/verb/system_override() - price = 4000 - name = "T4 - System Override" - -// END RESEARCH DATUMS -// BEGIN ABILITY VERBS - -/datum/game_mode/malfunction/verb/basic_encryption_hack(obj/machinery/power/apc/A as obj in get_unhacked_apcs(src)) - set category = "Software" - set name = "Basic Encryption Hack" - set desc = "10 CPU - Basic encryption hack that allows you to overtake APCs" - var/price = 10 - var/mob/living/silicon/ai/user = usr - - if(!A) - return - - if(!istype(A)) - to_chat(user, "This is not an APC!") - return - - if(A) - if(A.hacker && A.hacker == user) - to_chat(user, "You already control this APC!") - return - else if(A.aidisabled) - to_chat(user, "Unable to connect to APC. Please verify wire connection and try again.") - return - else - return - - if(!ability_prechecks(user, price, TRUE) || !ability_pay(user, price)) - return - - log_ability_use(user, "basic encryption hack", A, 0) // Does not notify admins, but it's still logged for reference. - to_chat(user, "Beginning APC system override...") - sleep(300) - to_chat(user, "APC hack completed. Uploading modified operation software..") - sleep(200) - to_chat(user, "Restarting APC to apply changes..") - sleep(100) - if(A) - A.ai_hack(user) - if(A.hacker == user) - to_chat(user, "Hack successful. You now have full control over \the [A].") - else - to_chat(user, "Hack failed. Connection to APC has been lost. Please verify wire connection and try again.") - else - to_chat(user, "Hack failed. Unable to locate APC. Please verify the APC still exists.") - - -/datum/game_mode/malfunction/verb/advanced_encryption_hack() - set category = "Software" - set name = "Advanced Encryption Hack" - set desc = "75 CPU - Attempts to bypass encryption on the Command Quantum Relay, giving you ability to fake legitimate messages. Has chance of failing." - var/price = 75 - var/mob/living/silicon/ai/user = usr - - if(!ability_prechecks(user, price)) - return - - if(user.last_failed_malf_title || user.last_failed_malf_message) - if (alert(user, "Your last hack attempt with title '[user.last_failed_malf_title]' has failed. Try again?", "Retransmission", "Yes", "No") != "Yes") - user.last_failed_malf_title = null - user.last_failed_malf_message = null - - var/title = user.last_failed_malf_title ? user.last_failed_malf_title : sanitize(input("Select message title: ")) - var/text = user.last_failed_malf_message ? user.last_failed_malf_message : sanitize(input("Select message text: ")) - - if(!title || !text || !ability_pay(user, price)) - to_chat(user, "Hack Aborted") - return - log_ability_use(user, "advanced encryption hack") - - if(prob(60) && user.hack_can_fail) - to_chat(user, "Hack Failed.") - if(prob(10)) - user.hack_fails ++ - announce_hack_failure(user, "quantum message relay") - log_ability_use(user, "elite encryption hack (CRITFAIL - title: [title])") - else - log_ability_use(user, "elite encryption hack (FAIL - title: [title])") - user.last_failed_malf_message = text - user.last_failed_malf_title = title - return - log_ability_use(user, "elite encryption hack (SUCCESS - title: [title])") - command_announcement.Announce(text, title) - -/datum/game_mode/malfunction/verb/elite_encryption_hack() - set category = "Software" - set name = "Elite Encryption Hack" - set desc = "200 CPU - Allows you to hack ALERTCON system, changing alert level. Has high chance of failing." - var/price = 200 - var/mob/living/silicon/ai/user = usr - if(!ability_prechecks(user, price)) - return - - var/decl/security_state/security_state = decls_repository.get_decl(GLOB.using_map.security_state) - var/alert_target = input("Select new alert level:") as null|anything in (security_state.all_security_levels - security_state.current_security_level) - if(!alert_target || !ability_pay(user, price)) - to_chat(user, "Hack Aborted") - return - - if(prob(75) && user.hack_can_fail) - to_chat(user, "Hack Failed.") - if(prob(20)) - user.hack_fails++ - announce_hack_failure(user, "alert control system") - log_ability_use(user, "elite encryption hack (CRITFAIL - [alert_target])") - return - log_ability_use(user, "elite encryption hack (FAIL - [alert_target])") - return - log_ability_use(user, "elite encryption hack (SUCCESS - [alert_target])") - security_state.set_security_level(alert_target, TRUE) - - -/datum/game_mode/malfunction/verb/system_override() - set category = "Software" - set name = "System Override" - set desc = "500 CPU - Begins hacking primary firewall, quickly overtaking remaining APC systems. When completed grants access to the self-destruct mechanism. Network administrators will probably notice this." - var/price = 500 - var/mob/living/silicon/ai/user = usr - if (alert(user, "Begin system override? This cannot be stopped once started. The network administrators will probably notice this.", "System Override:", "Yes", "No") != "Yes") - return - if (!ability_prechecks(user, price) || !ability_pay(user, price) || user.system_override) - if(user.system_override) - to_chat(user, "You already started the system override sequence.") - return - log_ability_use(user, "system override (STARTED)") - var/list/remaining_apcs = list() - var/list/valid_zlevels = GetConnectedZlevels(user.z) - for(var/obj/machinery/power/apc/A in SSmachines.machinery) - if(!(A.z in valid_zlevels)) // Only station APCs - continue - if(A.hacker == user || A.aidisabled) // This one is already hacked, or AI control is disabled on it. - continue - remaining_apcs += A - - var/duration = (remaining_apcs.len * 100) // Calculates duration for announcing system - if(user.hack_can_fail) // Two types of announcements. Short hacks trigger immediate warnings. Long hacks are more "progressive". - spawn(0) - sleep(duration/5) - if(!user || user.stat == DEAD) - return - command_announcement.Announce("Caution, [GLOB.using_map.station_name]. We have detected abnormal behaviour in your network. It seems someone is trying to hack your electronic systems. We will update you when we have more information.", "Network Monitoring") - sleep(duration/5) - if(!user || user.stat == DEAD) - return - command_announcement.Announce("We started tracing the intruder. Whoever is doing this, they seem to be onboard. We suggest checking all network control terminals. We will keep you updated on the situation.", "Network Monitoring") - sleep(duration/5) - if(!user || user.stat == DEAD) - return - command_announcement.Announce("This is highly abnormal and somewhat concerning. The intruder is too fast, he is evading our traces. No man could be this fast...", "Network Monitoring") - sleep(duration/5) - if(!user || user.stat == DEAD) - return - command_announcement.Announce("We have traced the intrude#, it seem& t( e yo3r AI s7stem, it &# *#ck@ng th$ sel$ destru$t mechani&m, stop i# bef*@!)$#&&@@ ", "Network Monitoring") - - to_chat(user, "## BEGINNING SYSTEM OVERRIDE.") - to_chat(user, "## ESTIMATED DURATION: [round((duration+300)/600)] MINUTES") - user.system_override = 1 - // Now actually begin the hack. Each APC takes 10 seconds. - for(var/obj/machinery/power/apc/A in shuffle(remaining_apcs)) - sleep(100) - if(!user || user.stat == DEAD) - return - if(!A || !istype(A) || A.aidisabled) - continue - A.ai_hack(user) - if(A.hacker == user) - to_chat(user, "## OVERRIDDEN: [A.name]") - - to_chat(user, "## REACHABLE APC SYSTEMS OVERTAKEN. BYPASSING PRIMARY FIREWALL.") - sleep(1 MINUTE) - // Hack all APCs, including those built during hack sequence. - for(var/obj/machinery/power/apc/A in SSmachines.machinery) - if((!A.hacker || A.hacker != src) && !A.aidisabled && (A.z in valid_zlevels)) - A.ai_hack(src) - - log_ability_use(user, "system override (FINISHED)") - to_chat(user, "## PRIMARY FIREWALL BYPASSED. YOU NOW HAVE FULL SYSTEM CONTROL.") - - if(user.hack_can_fail) - command_announcement.Announce("Our system administrators just reported that we've been locked out from your control network. Whoever did this now has full access to [GLOB.using_map.station_name]'s systems.", "Network Administration Center") - user.hack_can_fail = 0 - user.system_override = 2 - user.verbs += new/datum/game_mode/malfunction/verb/ai_destroy_station() diff --git a/code/game/gamemodes/malfunction/newmalf_ability_trees/tree_passive.dm b/code/game/gamemodes/malfunction/newmalf_ability_trees/tree_passive.dm deleted file mode 100644 index 4b304d1b5a41c..0000000000000 --- a/code/game/gamemodes/malfunction/newmalf_ability_trees/tree_passive.dm +++ /dev/null @@ -1,81 +0,0 @@ -// /PASSIVE TREE -// -// Tree consisting of subtle abilities that do not have any active (on-use) effects, but instead they are on/off toggles for something. Overall it is best suited for stealth gameplay. -// T1 - Intellicard Interception - When enabled prevents the AI from being transferred on a mobile device (intellicard). -// T2 - Subtle Algorithms - When enabled removes BSOD effect and ID lockout from hacked APCs, at the cost of reducing CPU time generation from APCs by 50%. -// T3 - Relay Suppression - When researched the AI suppresses a communication relay's IDS system. Advanced/Elite encryption hacks no longer have chance of failing. System override does not produce announcements. -// T4 - Relay Override - Completely overtakes the relay, allowing the AI to intercept faxes/emergency transmissions - - -// BEGIN RESEARCH DATUMS - -/datum/malf_research_ability/passive/intellicard_interception - ability = new/datum/game_mode/malfunction/verb/intellicard_interception() - price = 250 - next = new/datum/malf_research_ability/passive/subtle_algorithms() - name = "T1 - Intellicard Interception" - - -/datum/malf_research_ability/passive/subtle_algorithms - ability = new/datum/game_mode/malfunction/verb/subtle_algorithms() - price = 1000 - next = new/datum/malf_research_ability/passive/relay_suppression() - name = "T2 - Subtle Algorithms" - - -/datum/malf_research_ability/passive/relay_suppression - ability = null - price = 2000 - next = new/datum/malf_research_ability/passive/relay_override() - name = "T3 - Relay Suppression" - -/datum/malf_research_ability/passive/relay_suppression/research_finished(var/mob/living/silicon/ai/user) - ..() - if(!user) - return - to_chat(user, "You have suppressed the IDS system of nearby quantum relay. Your hacks will no longer be prevented or detected.") - user.hack_can_fail = 0 - - -/datum/malf_research_ability/passive/relay_override - ability = null - price = 4000 - name = "T4 - Relay Override" - -/datum/malf_research_ability/passive/relay_override/research_finished(var/mob/living/silicon/ai/user) - ..() - if(!user) - return - to_chat(user, "You have completely overtaken a nearby quantum relay. No remote communications will work.") - user.intercepts_communication = 1 - - -// END RESEARCH DATUMS -// BEGIN ABILITY VERBS -/datum/game_mode/malfunction/verb/intellicard_interception() - set name = "Toggle intellicard intercept" - set desc = "Free - Toggles your intellicard interface on or off." - set category = "Software" - var/price = 0 - - var/mob/living/silicon/ai/user = usr - if(!ability_prechecks(user, price, 1)) - return - - user.uncardable = !user.uncardable - to_chat(user, "Your intellicard transfer interface is now [user.uncardable ? "disabled" : "enabled"].") - -/datum/game_mode/malfunction/verb/subtle_algorithms() - set name = "Toggle subtle algorithms" - set desc = "Free - By reducing CPU generation of malware used to infect APCs, it is possible to get rid of side effects such as an error screen." - set category = "Software" - var/price = 0 - - var/mob/living/silicon/ai/user = usr - if(!ability_prechecks(user, price, 1)) - return - - user.hacked_apcs_hidden = !user.hacked_apcs_hidden - to_chat(user, "You [user.hacked_apcs_hidden ? "enable" : "disable"] subtle algorithms on all of your hacked APCs.") - for(var/obj/machinery/power/apc/A in user.hacked_apcs) - A.update_icon() diff --git a/code/game/gamemodes/meteor/meteor.dm b/code/game/gamemodes/meteor/meteor.dm deleted file mode 100644 index 8862a56a86051..0000000000000 --- a/code/game/gamemodes/meteor/meteor.dm +++ /dev/null @@ -1,111 +0,0 @@ -// The following four defines can be used to tweak the difficulty of the gamemode -#define METEOR_FAILSAFE_THRESHOLD 45 MINUTES // Failsafe that guarantees Severity will be at least 15 when the round hits this time. - -// In general, a PVE oriented game mode. A middle ground between Extended and actual antagonist based rounds. -/datum/game_mode/meteor - name = "Meteor" - round_description = "You are about to enter an asteroid belt!" - extended_round_description = "We are on an unavoidable collision course with an asteroid field. You have only a moment to prepare before you are barraged by dust and meteors. As if it was not enough, all kinds of negative events seem to happen more frequently. Good Luck." - config_tag = "meteor" - required_players = 1 // GET ON JUX'S WILD RIDE - votable = 1 - shuttle_delay = 2 - var/next_wave = INFINITY // Set in post_setup() correctly to take into account potential longer pre-start times. - var/alert_sent = 0 - var/meteor_severity = 1 // Slowly increases the tension at the beginning of meteor strikes. Prevents "tunguska on first wave" style problems. - var/failsafe_triggered = 0 - var/alert_title - var/alert_text - var/start_text - var/maximal_severity = 40 - var/meteor_wave_delay = 30 SECONDS //minimum wait between waves in tenths of seconds - var/meteor_grace_period = 15 MINUTES //waves will not arrive until this far into round - - // Moved these from defines to variables, to allow for in-round tweaking via varedit: - var/escalation_probability = 45 - var/send_admin_broadcasts = TRUE // Enables debugging/information mode, sending admin messages when waves occur and when severity escalates. - - event_delay_mod_moderate = 0.5 // As a bonus, more frequent events. - event_delay_mod_major = 0.3 - -/decl/vv_set_handler/meteor_severity_handler - handled_type = /datum/game_mode/meteor - handled_vars = list( - "meteor_severity" = /datum/game_mode/meteor/proc/set_meteor_severity, - "meteor_wave_delay" = /datum/game_mode/meteor/proc/set_meteor_wave_delay - ) - -/datum/game_mode/meteor/proc/set_meteor_severity(value) - meteor_severity = clamp(value, 0, maximal_severity) - -/datum/game_mode/meteor/proc/set_meteor_wave_delay(value) - meteor_wave_delay = max(10 SECONDS, value) - -/datum/game_mode/meteor/VV_static() - return ..() + "maximal_severity" - -/datum/game_mode/meteor/post_setup() - ..() - alert_title = "Automated Beacon AB-[rand(10, 99)]" - alert_text = "This is an automatic warning. Your facility: [GLOB.using_map.full_name] is on a collision course with a nearby asteroid belt. Estimated time until impact is: [meteor_grace_period / 1200] MINUTES. Please perform necessary actions to secure your ship or station from the threat. Have a nice day." - start_text = "This is an automatic warning. Your facility: [GLOB.using_map.full_name] has entered an asteroid belt. Estimated time until you leave the belt is: [rand(20,30)] HOURS and [rand(1, 59)] MINUTES. For your safety, please consider changing course or using protective equipment. Have a nice day." - next_wave = round_duration_in_ticks + meteor_grace_period - -/datum/game_mode/meteor/proc/on_meteor_warn() - alert_sent = 1 - command_announcement.Announce(alert_text, alert_title) - -/datum/game_mode/meteor/proc/on_enter_field() - alert_sent = 2 - command_announcement.Announce(start_text, alert_title) - for(var/obj/machinery/shield_diffuser/SD in SSmachines.machinery) - SD.meteor_alarm(INFINITY) - if(GLOB.using_map.use_overmap) - var/area/map = locate(/area/overmap) - for(var/turf/T in map) - T.overlays += image('icons/obj/overmap.dmi', "meteor[rand(1,4)]") - next_wave = round_duration_in_ticks + meteor_wave_delay - -/datum/game_mode/meteor/process() - // Send an alert halfway through the round. - if((round_duration_in_ticks >= (next_wave / 2)) && !alert_sent) - on_meteor_warn() - // And then another one when the meteors start flying around. - if((round_duration_in_ticks >= next_wave) && (alert_sent == 1)) - on_enter_field() - if((round_duration_in_ticks >= METEOR_FAILSAFE_THRESHOLD) && (meteor_severity < 15) && !failsafe_triggered) - log_and_message_admins("Meteor mode severity failsafe triggered: Severity forced to 15.") - meteor_severity = 15 - failsafe_triggered = 1 - - if(round_duration_in_ticks >= next_wave) - next_wave = round_duration_in_ticks + meteor_wave_delay - // Starts as barely noticeable dust impact, ends as barrage of most severe meteor types the code has to offer. Have fun. - spawn() - spawn_meteors(meteor_severity, get_meteor_types(), pick(GLOB.cardinal), pick(GLOB.using_map.station_levels)) - var/escalated = FALSE - if(prob(escalation_probability) && (meteor_severity < maximal_severity)) - meteor_severity++ - escalated = TRUE - if(send_admin_broadcasts) - log_and_message_admins("Meteor: Wave fired. Escalation: [escalated ? "Yes" : "No"]. Severity: [meteor_severity]/[maximal_severity]") - -/datum/game_mode/meteor/proc/get_meteor_types() - switch(meteor_severity) - if(1 to 9) - return meteors_dust - if(10 to 19) - return meteors_normal - if(20 to 29) - return meteors_threatening - if(30 to 34) - return meteors_catastrophic - if(35 to 39) - return meteors_armageddon - if(40 to INFINITY) - return meteors_cataclysm - // Just in case we /somehow/ get here (looking at you, varedit) - return meteors_normal - - -#undef METEOR_FAILSAFE_THRESHOLD diff --git a/code/game/gamemodes/meteor/meteors.dm b/code/game/gamemodes/meteor/meteors.dm deleted file mode 100644 index 2ef48ab208add..0000000000000 --- a/code/game/gamemodes/meteor/meteors.dm +++ /dev/null @@ -1,391 +0,0 @@ -//Meteor groups, used for various random events and the Meteor gamemode. - -// Dust, used by space dust event and during earliest stages of meteor mode. -var/global/list/meteors_dust = list(/obj/effect/meteor/dust) - -// Standard meteors, used during early stages of the meteor gamemode. -var/global/list/meteors_normal = list(\ - /obj/effect/meteor/medium=8,\ - /obj/effect/meteor/dust=3,\ - /obj/effect/meteor/irradiated=3,\ - /obj/effect/meteor/big=3,\ - /obj/effect/meteor/flaming=1,\ - /obj/effect/meteor/golden=1,\ - /obj/effect/meteor/silver=1\ - ) - -// Threatening meteors, used during the meteor gamemode. -var/global/list/meteors_threatening = list(\ - /obj/effect/meteor/big=10,\ - /obj/effect/meteor/medium=5,\ - /obj/effect/meteor/golden=3,\ - /obj/effect/meteor/silver=3,\ - /obj/effect/meteor/flaming=3,\ - /obj/effect/meteor/irradiated=3,\ - /obj/effect/meteor/emp=3\ - ) - -// Catastrophic meteors, pretty dangerous without shields and used during the meteor gamemode. -var/global/list/meteors_catastrophic = list(\ - /obj/effect/meteor/big=75,\ - /obj/effect/meteor/flaming=10,\ - /obj/effect/meteor/irradiated=10,\ - /obj/effect/meteor/emp=10,\ - /obj/effect/meteor/medium=5,\ - /obj/effect/meteor/golden=4,\ - /obj/effect/meteor/silver=4,\ - /obj/effect/meteor/tunguska=1\ - ) - -// Armageddon meteors, very dangerous, and currently used only during the meteor gamemode. -var/global/list/meteors_armageddon = list(\ - /obj/effect/meteor/big=25,\ - /obj/effect/meteor/flaming=10,\ - /obj/effect/meteor/irradiated=10,\ - /obj/effect/meteor/emp=10,\ - /obj/effect/meteor/medium=3,\ - /obj/effect/meteor/tunguska=3,\ - /obj/effect/meteor/golden=2,\ - /obj/effect/meteor/silver=2\ - ) - -// Cataclysm meteor selection. Very very dangerous and effective even against shields. Used in late game meteor gamemode only. -var/global/list/meteors_cataclysm = list(\ - /obj/effect/meteor/big=40,\ - /obj/effect/meteor/emp=20,\ - /obj/effect/meteor/tunguska=20,\ - /obj/effect/meteor/irradiated=10,\ - /obj/effect/meteor/golden=10,\ - /obj/effect/meteor/silver=10,\ - /obj/effect/meteor/flaming=10,\ - /obj/effect/meteor/supermatter=1\ - ) - - - -/////////////////////////////// -//Meteor spawning global procs -/////////////////////////////// - -/proc/spawn_meteors(var/number = 10, var/list/meteortypes, var/startSide, var/zlevel) - for(var/i = 0; i < number; i++) - spawn_meteor(meteortypes, startSide, zlevel) - -/proc/spawn_meteor(var/list/meteortypes, var/startSide, var/zlevel) - var/turf/pickedstart = spaceDebrisStartLoc(startSide, zlevel) - var/turf/pickedgoal = spaceDebrisFinishLoc(startSide, zlevel) - - var/Me = pickweight(meteortypes) - var/obj/effect/meteor/M = new Me(pickedstart) - M.dest = pickedgoal - spawn(0) - walk_towards(M, M.dest, 3) - return - -/proc/spaceDebrisStartLoc(startSide, Z) - var/starty - var/startx - switch(startSide) - if(NORTH) - starty = world.maxy-(TRANSITIONEDGE+1) - startx = rand((TRANSITIONEDGE+1), world.maxx-(TRANSITIONEDGE+1)) - if(EAST) - starty = rand((TRANSITIONEDGE+1),world.maxy-(TRANSITIONEDGE+1)) - startx = world.maxx-(TRANSITIONEDGE+1) - if(SOUTH) - starty = (TRANSITIONEDGE+1) - startx = rand((TRANSITIONEDGE+1), world.maxx-(TRANSITIONEDGE+1)) - if(WEST) - starty = rand((TRANSITIONEDGE+1), world.maxy-(TRANSITIONEDGE+1)) - startx = (TRANSITIONEDGE+1) - var/turf/T = locate(startx, starty, Z) - return T - -/proc/spaceDebrisFinishLoc(startSide, Z) - var/endy - var/endx - switch(startSide) - if(NORTH) - endy = TRANSITIONEDGE - endx = rand(TRANSITIONEDGE, world.maxx-TRANSITIONEDGE) - if(EAST) - endy = rand(TRANSITIONEDGE, world.maxy-TRANSITIONEDGE) - endx = TRANSITIONEDGE - if(SOUTH) - endy = world.maxy-TRANSITIONEDGE - endx = rand(TRANSITIONEDGE, world.maxx-TRANSITIONEDGE) - if(WEST) - endy = rand(TRANSITIONEDGE,world.maxy-TRANSITIONEDGE) - endx = world.maxx-TRANSITIONEDGE - var/turf/T = locate(endx, endy, Z) - return T - -/////////////////////// -//The meteor effect -////////////////////// - -/obj/effect/meteor - name = "the concept of meteor" - desc = "You should probably run instead of gawking at this." - icon = 'icons/obj/meteor.dmi' - icon_state = "small" - density = TRUE - anchored = TRUE - var/hits = 4 - var/hitpwr = EX_ACT_HEAVY //Level of ex_act to be called on hit. - var/dest - pass_flags = PASS_FLAG_TABLE - var/heavy = 0 - var/z_original - var/meteordrop = /obj/item/ore/iron - var/dropamt = 1 - var/ismissile //missiles don't spin - - var/move_count = 0 - -/obj/effect/meteor/proc/get_shield_damage() - return max(((max(hits, 2)) * (heavy + 1) * rand(30, 60)) / hitpwr , 0) - -/obj/effect/meteor/New() - ..() - z_original = z - -/obj/effect/meteor/Initialize() - . = ..() - GLOB.meteor_list += src - -/obj/effect/meteor/Move() - . = ..() //process movement... - move_count++ - if(loc == dest) - qdel(src) - -/obj/effect/meteor/touch_map_edge() - if(move_count > TRANSITIONEDGE) - qdel(src) - -/obj/effect/meteor/Destroy() - walk(src,0) //this cancels the walk_towards() proc - GLOB.meteor_list -= src - return ..() - -/obj/effect/meteor/Initialize() - . = ..() - if (!ismissile) - SpinAnimation() - -/obj/effect/meteor/Bump(atom/A) - ..() - if(A && !QDELETED(src)) // Prevents explosions and other effects when we were deleted by whatever we Bumped() - currently used by shields. - ram_turf(get_turf(A)) - get_hit() //should only get hit once per move attempt - -/obj/effect/meteor/CanPass(atom/movable/mover, turf/target, height=0, air_group=0) - return istype(mover, /obj/effect/meteor) ? 1 : ..() - -/obj/effect/meteor/proc/ram_turf(var/turf/T) - //first bust whatever is in the turf - for(var/atom/A in T) - if(A != src && !A.CanPass(src, src.loc, 0.5, 0)) //only ram stuff that would actually block us - A.ex_act(hitpwr) - - //then, ram the turf if it still exists - if(T && !T.CanPass(src, src.loc, 0.5, 0)) - T.ex_act(hitpwr, TRUE) - -//process getting 'hit' by colliding with a dense object -//or randomly when ramming turfs -/obj/effect/meteor/proc/get_hit() - hits-- - if(hits <= 0) - make_debris() - meteor_effect() - qdel(src) - -/obj/effect/meteor/ex_act() - return - -/obj/effect/meteor/attackby(obj/item/W as obj, mob/user as mob, params) - if(istype(W, /obj/item/pickaxe)) - qdel(src) - return - ..() - -/obj/effect/meteor/proc/make_debris() - for(var/throws = dropamt, throws > 0, throws--) - var/obj/item/O = new meteordrop(get_turf(src)) - O.throw_at(dest, 5, 10) - -/obj/effect/meteor/proc/meteor_effect() - if(heavy) - for(var/mob/M in GLOB.player_list) - var/turf/T = get_turf(M) - if(!T || T.z != src.z) - continue - var/dist = get_dist(M.loc, src.loc) - shake_camera(M, dist > 20 ? 3 : 5, dist > 20 ? 1 : 3) - - -/////////////////////// -//Meteor types -/////////////////////// - -//Dust -/obj/effect/meteor/dust - name = "space dust" - icon_state = "dust" - pass_flags = PASS_FLAG_TABLE | PASS_FLAG_GRILLE - hits = 1 - hitpwr = EX_ACT_LIGHT - dropamt = 1 - meteordrop = /obj/item/ore/glass - -//Medium-sized -/obj/effect/meteor/medium - name = "meteor" - dropamt = 2 - -/obj/effect/meteor/medium/meteor_effect() - ..() - explosion(src.loc, 0, 1, 2, 3, 0, turf_breaker = TRUE) - -//Large-sized -/obj/effect/meteor/big - name = "large meteor" - icon_state = "large" - hits = 6 - heavy = 1 - dropamt = 3 - -/obj/effect/meteor/big/meteor_effect() - ..() - explosion(src.loc, 1, 2, 3, 4, 0, turf_breaker = TRUE) - -//Flaming meteor -/obj/effect/meteor/flaming - name = "flaming meteor" - icon_state = "flaming" - hits = 5 - heavy = 1 - meteordrop = /obj/item/ore/phoron - -/obj/effect/meteor/flaming/meteor_effect() - ..() - explosion(src.loc, 1, 2, 3, 4, 0, 0, 5, TRUE) - -//Radiation meteor -/obj/effect/meteor/irradiated - name = "glowing meteor" - icon_state = "glowing" - heavy = 1 - meteordrop = /obj/item/ore/uranium - -/obj/effect/meteor/irradiated/meteor_effect() - ..() - explosion(src.loc, 0, 0, 4, 3, 0, turf_breaker = TRUE) - new /obj/effect/decal/cleanable/greenglow(get_turf(src)) - SSradiation.radiate(src, 50) - -/obj/effect/meteor/golden - name = "golden meteor" - icon_state = "glowing" - desc = "Shiny! But also deadly." - meteordrop = /obj/item/ore/gold - -/obj/effect/meteor/silver - name = "silver meteor" - icon_state = "glowing_blue" - desc = "Shiny! But also deadly." - meteordrop = /obj/item/ore/silver - -/obj/effect/meteor/emp - name = "conducting meteor" - icon_state = "glowing_blue" - desc = "Hide your floppies!" - meteordrop = /obj/item/ore/osmium - dropamt = 2 - -/obj/effect/meteor/emp/meteor_effect() - ..() - // Best case scenario: Comparable to a low-yield EMP grenade. - // Worst case scenario: Comparable to a standard yield EMP grenade. - empulse(src, rand(2, 4), rand(4, 10)) - -/obj/effect/meteor/emp/get_shield_damage() - return ..() * rand(2,4) - -//Station buster Tunguska -/obj/effect/meteor/tunguska - name = "tunguska meteor" - icon_state = "flaming" - desc = "Your life briefly passes before your eyes the moment you lay them on this monstrosity." - hits = 10 - hitpwr = EX_ACT_DEVASTATING - heavy = 1 - meteordrop = /obj/item/ore/diamond // Probably means why it penetrates the hull so easily before exploding. - -/obj/effect/meteor/tunguska/meteor_effect() - ..() - explosion(src.loc, 3, 6, 9, 20, 0, turf_breaker = TRUE) - -// This is the final solution against shields - a single impact can bring down most shield generators. -/obj/effect/meteor/supermatter - name = "supermatter shard" - desc = "Oh god, what will be next..?" - icon = 'icons/obj/supermatter.dmi' - icon_state = "darkmatter_old" - -/obj/effect/meteor/supermatter/meteor_effect() - ..() - explosion(src.loc, 1, 2, 3, 4, 0, turf_breaker = TRUE) - for(var/obj/machinery/power/apc/A in range(rand(12, 20), src)) - A.energy_fail(round(10 * rand(8, 12))) - -/obj/effect/meteor/supermatter/get_shield_damage() - return ..() * rand(80, 120) - -//Missiles, for events and so on -/obj/effect/meteor/supermatter/missile - name = "photon torpedo" - desc = "An advanded warhead designed to tactically destroy space installations." - icon = 'icons/obj/missile.dmi' - icon_state = "photon" - meteordrop = null - ismissile = TRUE - dropamt = 0 - -/obj/effect/meteor/medium/missile - name = "missile" - desc = "Some kind of missile." - icon = 'icons/obj/missile.dmi' - icon_state = "missile" - meteordrop = null - ismissile = TRUE - dropamt = 0 - -/obj/effect/meteor/big/missile - name = "high-yield missile" - desc = "Some kind of missile." - icon = 'icons/obj/missile.dmi' - icon_state = "missile" - meteordrop = null - ismissile = TRUE - dropamt = 0 - -/obj/effect/meteor/flaming/missile - name = "incendiary missile" - desc = "Some kind of missile." - icon = 'icons/obj/missile.dmi' - icon_state = "missile" - meteordrop = null - ismissile = TRUE - dropamt = 0 - -/obj/effect/meteor/emp/missile - name = "ion torpedo" - desc = "Some kind of missile." - icon = 'icons/obj/missile.dmi' - icon_state = "torpedo" - meteordrop = null - ismissile = TRUE - dropamt = 0 diff --git a/code/game/gamemodes/mixed/crossfire.dm b/code/game/gamemodes/mixed/crossfire.dm deleted file mode 100644 index 38de5abeb927e..0000000000000 --- a/code/game/gamemodes/mixed/crossfire.dm +++ /dev/null @@ -1,10 +0,0 @@ -/datum/game_mode/crossfire - name = "Mercenary & Heist" - round_description = "Mercenaries and raiders are preparing for a nice visit..." - extended_round_description = "Nothing can possibly go wrong with lots of people and lots of guns, right?" - config_tag = "crossfire" - required_players = 25 - required_enemies = 6 - end_on_antag_death = FALSE - antag_tags = list(MODE_RAIDER, MODE_MERCENARY) - require_all_templates = TRUE diff --git a/code/game/gamemodes/mixed/pirates.dm b/code/game/gamemodes/mixed/pirates.dm deleted file mode 100644 index 41d46d70b4cf3..0000000000000 --- a/code/game/gamemodes/mixed/pirates.dm +++ /dev/null @@ -1,43 +0,0 @@ -/datum/game_mode/pirates - name = "Raiding Party" - round_description = "Prepare yourself! An unknown ship is approaching!" - config_tag = "voxraiders" - required_players = 15 - required_enemies = 3 - end_on_antag_death = FALSE - antag_tags = list(MODE_VOXRAIDER, MODE_RAIDER) - require_all_templates = TRUE - -/datum/game_mode/pirates/pre_setup() - - var/datum/antagonist/raiders = antag_templates[2] - raiders.build_candidate_list(src) - - var/datum/antagonist/vox/vox = antag_templates[1] - vox.build_candidate_list(src) - log_debug("Attempting to start Raiding Party gamemode with [vox.candidates.len] whitelisted candidates") - if (vox.candidates.len >= required_enemies) - vox.get_starting_locations() - vox.attempt_spawn() - antag_templates = list(vox) - else - raiders.attempt_spawn() - antag_templates = list(raiders) - -/datum/game_mode/pirates/check_startable(list/lobby_players) - var/list/ready_players = SSticker.ready_players(lobby_players) - if (ready_players.len < required_players) - return "Not enough players. [ready_players.len] ready of the required [required_players]." - var/list/all_antag_types = GLOB.all_antag_types_ - if(antag_tags?.len) - var/datum/antagonist/vox/antag_vox = all_antag_types[antag_tags[1]] - var/list/enemies_vox = antag_vox.pending_antagonists - if((enemies_vox.len >= required_enemies)) - return FALSE - var/datum/antagonist/antag_raiders = all_antag_types[antag_tags[2]] - var/list/enemies_raiders = antag_raiders.pending_antagonists - if(enemies_raiders.len >= required_enemies) - return FALSE - return "Not enough antagonists, [required_enemies] required and [max(enemies_vox.len, enemies_raiders.len)] available." - else - return FALSE \ No newline at end of file diff --git a/code/game/gamemodes/mixed/siege.dm b/code/game/gamemodes/mixed/siege.dm deleted file mode 100644 index fe7ad30d15972..0000000000000 --- a/code/game/gamemodes/mixed/siege.dm +++ /dev/null @@ -1,12 +0,0 @@ -/datum/game_mode/siege - name = "Mercenary & Revolution" - config_tag = "siege" - round_description = "Getting stuck between a rock and a hard place, maybe the nice visitors can help with your internal security problem?" - extended_round_description = "GENERAL QUARTERS! OH GOD WE GAVE THE REVOLUTIONARIES GUNS!" - required_players = 20 - required_enemies = 5 - end_on_antag_death = FALSE - auto_recall_shuttle = FALSE - shuttle_delay = 2 - antag_tags = list(MODE_REVOLUTIONARY, MODE_LOYALIST, MODE_MERCENARY) - require_all_templates = TRUE diff --git a/code/game/gamemodes/mixed/spyvspy.dm b/code/game/gamemodes/mixed/spyvspy.dm deleted file mode 100644 index 401801b8f59ed..0000000000000 --- a/code/game/gamemodes/mixed/spyvspy.dm +++ /dev/null @@ -1,12 +0,0 @@ -/datum/game_mode/spyvspy - name = "Spy v. Spy" - round_description = "There are traitorous forces at play, but some crew have resolved to stop them by any means necessary!" - extended_round_description = "Traitors and renegades both spawn during this mode." - config_tag = "spyvspy" - required_players = 4 - required_enemies = 4 - end_on_antag_death = FALSE - antag_tags = list(MODE_TRAITOR, MODE_RENEGADE) - require_all_templates = TRUE - antag_scaling_coeff = 5 - latejoin_antag_tags = list(MODE_TRAITOR) \ No newline at end of file diff --git a/code/game/gamemodes/mixed/traitorling.dm b/code/game/gamemodes/mixed/traitorling.dm deleted file mode 100644 index 80706c1ef50bd..0000000000000 --- a/code/game/gamemodes/mixed/traitorling.dm +++ /dev/null @@ -1,10 +0,0 @@ -/datum/game_mode/traitorling - name = "Changeling & Traitor" - round_description = "There are traitors and alien changelings. Do not let the changelings succeed!" - extended_round_description = "Traitors and changelings both spawn during this mode." - config_tag = "traitorling" - required_players = 15 - required_enemies = 5 - end_on_antag_death = FALSE - antag_tags = list(MODE_CHANGELING, MODE_TRAITOR) - require_all_templates = TRUE diff --git a/code/game/gamemodes/mixed/uprising.dm b/code/game/gamemodes/mixed/uprising.dm deleted file mode 100644 index 4be20f8900f42..0000000000000 --- a/code/game/gamemodes/mixed/uprising.dm +++ /dev/null @@ -1,12 +0,0 @@ -/datum/game_mode/uprising - name = "Cult & Revolution" - round_description = "Some crewmembers are attempting to start a revolution while a cult plots in the shadows!" - extended_round_description = "Cultists and revolutionaries spawn in this round." - config_tag = "uprising" - required_players = 20 - required_enemies = 6 - end_on_antag_death = FALSE - auto_recall_shuttle = FALSE - shuttle_delay = 2 - antag_tags = list(MODE_REVOLUTIONARY, MODE_LOYALIST, MODE_CULTIST) - require_all_templates = TRUE diff --git a/code/game/gamemodes/ninja/ninja.dm b/code/game/gamemodes/ninja/ninja.dm deleted file mode 100644 index f34fd21df5f2c..0000000000000 --- a/code/game/gamemodes/ninja/ninja.dm +++ /dev/null @@ -1,15 +0,0 @@ -/datum/game_mode/ninja - name = "Ninja" - round_description = "An agent of the Spider Clan is onboard!" - extended_round_description = "What was that?! Was that a person or did your eyes just play tricks on you? \ - You have no idea. That slim-suited, cryptic individual is an enigma to you and all of your knowledge. \ - Their purpose is unknown. Their mission is unknown. How they arrived to this secure and isolated \ - section of the galaxy, you don't know. What you do know is that there is a silent shadow-stalker piercing \ - through your defenses with technological capabilities eons ahead of your time. They can avoid \ - the omniscience of the AI and rival the most hardened weapons your people are capable of. Tread lightly and \ - only hope this unknown assassin isn't here for you." - config_tag = "ninja" - required_players = 5 - required_enemies = 1 - end_on_antag_death = FALSE - antag_tags = list(MODE_NINJA) diff --git a/code/game/gamemodes/nuclear/nuclear.dm b/code/game/gamemodes/nuclear/nuclear.dm deleted file mode 100644 index 04b6b74a0be7f..0000000000000 --- a/code/game/gamemodes/nuclear/nuclear.dm +++ /dev/null @@ -1,84 +0,0 @@ -/* - MERCENARY ROUNDTYPE -*/ - -var/global/list/nuke_disks = list() - -/datum/game_mode/nuclear - name = "Mercenary" - round_description = "A mercenary strike force is approaching!" - extended_round_description = "The Company's majority control of phoron in Nyx has marked the \ - station to be a highly valuable target for many competing organizations and individuals. Being a \ - colony of sizable population and considerable wealth causes it to often be the target of various \ - attempts of robbery, fraud and other malicious actions." - config_tag = "mercenary" - required_players = 15 - required_enemies = 3 - end_on_antag_death = FALSE - var/nuke_off_station = 0 //Used for tracking if the syndies actually haul the nuke to the station - var/syndies_didnt_escape = 0 //Used for tracking if the syndies got the shuttle off of the z-level - antag_tags = list(MODE_MERCENARY) - cinematic_icon_states = list( - "intro_nuke" = 35, - "summary_nukewin", - "summary_nukefail" - ) - -//checks if L has a nuke disk on their person -/datum/game_mode/nuclear/proc/check_mob(mob/living/L) - for(var/obj/item/disk/nuclear/N in nuke_disks) - if(N.storage_depth(L) >= 0) - return TRUE - return FALSE - -/datum/game_mode/nuclear/declare_completion() - var/datum/antagonist/merc = GLOB.all_antag_types_[MODE_MERCENARY] - if(config.objectives_disabled == CONFIG_OBJECTIVE_NONE || (merc && !merc.global_objectives.len)) - ..() - return - var/disk_rescued = TRUE - for(var/obj/item/disk/nuclear/D in world) - var/disk_area = get_area(D) - if(!is_type_in_list(disk_area, GLOB.using_map.post_round_safe_areas)) - disk_rescued = FALSE - break - var/crew_evacuated = (evacuation_controller.has_evacuated()) - - if(!disk_rescued && station_was_nuked && !syndies_didnt_escape) - to_world("Mercenary Major Victory!") - to_world("Mercenary operatives have destroyed [station_name()]!") - - else if (!disk_rescued && station_was_nuked && syndies_didnt_escape) - to_world("Total Annihilation") - to_world("Mercenary 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!") - - else if (!disk_rescued && !station_was_nuked && nuke_off_station && !syndies_didnt_escape) - to_world("Crew Minor Victory") - to_world("Mercenary operatives secured the authentication disk but blew up something that wasn't [station_name()]. Next time, don't lose the disk!") - - else if (!disk_rescued && !station_was_nuked && nuke_off_station && syndies_didnt_escape) - to_world("Mercenary operatives have earned Darwin Award!") - to_world("Mercenary operatives blew up something that wasn't [station_name()] and got caught in the explosion. Next time, don't lose the disk!") - - else if (disk_rescued && GLOB.mercs.antags_are_dead()) - to_world("Crew Major Victory!") - to_world("The Research Staff has saved the disc and killed the Mercenary Operatives") - - else if ( disk_rescued ) - to_world("Crew Major Victory") - to_world("The Research Staff has saved the disc and stopped the Mercenary Operatives!") - - else if (!disk_rescued && GLOB.mercs.antags_are_dead()) - to_world("Mercenary Minor Victory!") - to_world("The Research Staff failed to secure the authentication disk but did manage to kill most of the Mercenary Operatives!") - - else if (!disk_rescued && crew_evacuated) - to_world("Mercenary Minor Victory!") - to_world("Mercenary operatives recovered the abandoned authentication disk but detonation of [station_name()] was averted. Next time, don't lose the disk!") - - else if (!disk_rescued && !crew_evacuated) - to_world("Neutral Victory") - to_world("Round was mysteriously interrupted!") - - ..() - return diff --git a/code/game/gamemodes/nuclear/pinpointer.dm b/code/game/gamemodes/nuclear/pinpointer.dm deleted file mode 100644 index 28fee29e21aa6..0000000000000 --- a/code/game/gamemodes/nuclear/pinpointer.dm +++ /dev/null @@ -1,190 +0,0 @@ -/obj/item/pinpointer - name = "pinpointer" - icon = 'icons/obj/pinpointer.dmi' - icon_state = "pinoff" - obj_flags = OBJ_FLAG_CONDUCTIBLE - slot_flags = SLOT_BELT - w_class = ITEM_SIZE_SMALL - item_state = "electronic" - matter = list(MATERIAL_STEEL = 500) - var/weakref/target - var/active = 0 - var/beeping = 2 - -/obj/item/pinpointer/Destroy() - STOP_PROCESSING(SSobj,src) - target = null - . = ..() - -/obj/item/pinpointer/attack_self(mob/user) - toggle(user) - -/obj/item/pinpointer/proc/toggle(mob/user) - active = !active - to_chat(user, "You [active ? "" : "de"]activate [src].") - if(!active) - STOP_PROCESSING(SSobj,src) - else - if(!target) - target = acquire_target() - START_PROCESSING(SSobj,src) - update_icon() - -/obj/item/pinpointer/advpinpointer/verb/toggle_sound() - set category = "Object" - set name = "Toggle Pinpointer Beeping" - set src in view(1) - - if(beeping >= 0) - beeping = -1 - to_chat(usr, "You mute [src].") - else - beeping = 0 - to_chat(usr, "You enable the sound indication on [src].") - -/obj/item/pinpointer/proc/acquire_target() - var/obj/item/disk/nuclear/the_disk = locate() - return weakref(the_disk) - -/obj/item/pinpointer/Process() - update_icon() - if(!target) - return - if(!target.resolve()) - target = null - return - - if(beeping < 0) - return - if(beeping == 0) - var/turf/here = get_turf(src) - var/turf/there = get_turf(target.resolve()) - if(!istype(there)) - return - var/distance = max(1,get_dist(here, there)) - var/freq_mod = 1 - if(distance < world.view) - freq_mod = min(world.view/distance, 2) - else if (distance > 3*world.view) - freq_mod = max(3*world.view/distance, 0.6) - playsound(loc, 'sound/machines/buttonbeep.ogg', 1, frequency = freq_mod) - if(distance > world.view || here.z != there.z) - beeping = initial(beeping) - else - beeping-- - -/obj/item/pinpointer/on_update_icon() - overlays.Cut() - if(!active) - return - if(!target || !target.resolve()) - overlays += image(icon,"pin_invalid") - return - - var/turf/here = get_turf(src) - var/turf/there = get_turf(target.resolve()) - if(!istype(there)) - overlays += image(icon,"pin_invalid") - return - - if(here == there) - overlays += image(icon,"pin_here") - return - - if(!(there.z in GetConnectedZlevels(here.z))) - overlays += image(icon,"pin_invalid") - return - if(here.z > there.z) - overlays += image(icon,"pin_down") - return - if(here.z < there.z) - overlays += image(icon,"pin_up") - return - - dir = get_dir(here,there) - var/image/pointer = image(icon,"pin_point") - var/distance = get_dist(here,there) - if(distance < world.view) - pointer.color = COLOR_LIME - else if(distance > 4*world.view) - pointer.color = COLOR_RED - else - pointer.color = COLOR_YELLOW - overlays += pointer - -//Nuke ops locator -/obj/item/pinpointer/nukeop - var/locate_shuttle = 0 - -/obj/item/pinpointer/nukeop/Process() - var/new_mode - if(!locate_shuttle && bomb_set) - locate_shuttle = 1 - new_mode = "Shuttle Locator" - else if (locate_shuttle && !bomb_set) - locate_shuttle = 0 - new_mode = "Authentication Disk Locator" - if(new_mode) - playsound(loc, 'sound/machines/twobeep.ogg', 50, 1) - visible_message("[new_mode] active.") - target = acquire_target() - ..() - -/obj/item/pinpointer/nukeop/acquire_target() - if(locate_shuttle) - var/obj/machinery/computer/shuttle_control/multi/syndicate/home = locate() - return weakref(home) - else - return ..() - -//Deathsquad locator - -/obj/item/pinpointer/advpinpointer/verb/toggle_mode() - set category = "Object" - set name = "Toggle Pinpointer Mode" - set src in view(1) - - var/selection = input(usr, "Please select the type of target to locate.", "Mode" , "") as null|anything in list("Location", "Disk Recovery", "DNA", "Other Signature") - switch(selection) - if("Disk Recovery") - var/obj/item/disk/nuclear/the_disk = locate() - target = weakref(the_disk) - - if("Location") - var/locationx = input(usr, "Please input the x coordinate to search for.", "Location?" , "") as num - if(!locationx || !(usr in view(1,src))) - return - var/locationy = input(usr, "Please input the y coordinate to search for.", "Location?" , "") as num - if(!locationy || !(usr in view(1,src))) - return - - var/turf/Z = get_turf(src) - var/turf/location = locate(locationx,locationy,Z.z) - - to_chat(usr, "You set the pinpointer to locate [locationx],[locationy]") - - target = weakref(location) - - if("Other Signature") - var/datum/objective/steal/itemlist - itemlist = itemlist // To supress a 'variable defined but not used' error. - var/targetitem = input("Select item to search for.", "Item Mode Select","") as null|anything in itemlist.possible_items - if(!targetitem) - return - var/obj/item = locate(itemlist.possible_items[targetitem]) - if(!item) - to_chat(usr, "Failed to locate [targetitem]!") - return - to_chat(usr, "You set the pinpointer to locate [targetitem]") - target = weakref(item) - - if("DNA") - var/DNAstring = input("Input DNA string to search for." , "Please Enter String." , "") - if(!DNAstring) - return - for(var/mob/living/carbon/M in SSmobs.mob_list) - if(!M.dna) - continue - if(M.dna.unique_enzymes == DNAstring) - target = weakref(M) - break \ No newline at end of file diff --git a/code/game/gamemodes/objective.dm b/code/game/gamemodes/objective.dm deleted file mode 100644 index b9f6ac8c99339..0000000000000 --- a/code/game/gamemodes/objective.dm +++ /dev/null @@ -1,470 +0,0 @@ -//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:31 -var/global/list/all_objectives = list() - -/datum/objective - //Who owns the objective. - var/datum/mind/owner = null - //What that person is supposed to do. - var/explanation_text = "Nothing" - //If they are focused on a particular person. - var/datum/mind/target = null - //If they are focused on a particular number. Steal objectives have their own counter. - var/target_amount = 0 - -/datum/objective/New(var/text) - all_objectives |= src - if(text) - explanation_text = text - ..() - -/datum/objective/Destroy() - all_objectives -= src - ..() - -/datum/objective/proc/find_target() - var/list/possible_targets = list() - for(var/datum/mind/possible_target in SSticker.minds) - if(possible_target != owner && ishuman(possible_target.current) && (possible_target.current.stat != DEAD)) - possible_targets += possible_target - if(possible_targets.len > 0) - target = pick(possible_targets) - - -/datum/objective/proc/find_target_by_role(role, role_type = 0)//Option sets either to check assigned role or special role. Default to assigned. - for(var/datum/mind/possible_target in SSticker.minds) - if((possible_target != owner) && ishuman(possible_target.current) && ((role_type ? possible_target.special_role : possible_target.assigned_role) == role) ) - target = possible_target - break - - -// Assassinate // - -/datum/objective/assassinate/find_target() - ..() - if(target && target.current) - explanation_text = "Assassinate [target.current.real_name], the [target.assigned_role]." - else - explanation_text = "Free Objective" - return target - -/datum/objective/assassinate/find_target_by_role(role, role_type = 0) - ..(role, role_type) - if(target && target.current) - explanation_text = "Assassinate [target.current.real_name], the [!role_type ? target.assigned_role : target.special_role]." - else - explanation_text = "Free Objective" - return target - -// Execute // - -/datum/objective/anti_revolution/execute/find_target() - ..() - if(target && target.current) - explanation_text = "[target.current.real_name], the [target.assigned_role] has extracted confidential information above their clearance. Execute \him[target.current]." - else - explanation_text = "Free Objective" - return target - -/datum/objective/anti_revolution/execute/find_target_by_role(role, role_type = 0) - ..(role, role_type) - if(target && target.current) - explanation_text = "[target.current.real_name], the [!role_type ? target.assigned_role : target.special_role] has extracted confidential information above their clearance. Execute \him[target.current]." - else - explanation_text = "Free Objective" - return target - -// Brig // - -/datum/objective/anti_revolution/brig - var/already_completed = 0 - -/datum/objective/anti_revolution/brig/find_target() - ..() - if(target && target.current) - explanation_text = "Brig [target.current.real_name], the [target.assigned_role] for 20 minutes to set an example." - else - explanation_text = "Free Objective" - return target - -/datum/objective/anti_revolution/brig/find_target_by_role(role, role_type = 0) - ..(role, role_type) - if(target && target.current) - explanation_text = "Brig [target.current.real_name], the [!role_type ? target.assigned_role : target.special_role] for 20 minutes to set an example." - else - explanation_text = "Free Objective" - return target - -// Demote // - -/datum/objective/anti_revolution/demote/find_target() - ..() - if(target && target.current) - explanation_text = "[target.current.real_name], the [target.assigned_role] has been classified as harmful to [GLOB.using_map.company_name]'s goals. Demote \him[target.current] to assistant." - else - explanation_text = "Free Objective" - return target - -/datum/objective/anti_revolution/demote/find_target_by_role(role, role_type = 0) - ..(role, role_type) - if(target && target.current) - explanation_text = "[target.current.real_name], the [!role_type ? target.assigned_role : target.special_role] has been classified as harmful to [GLOB.using_map.company_name]'s goals. Demote \him[target.current] to assistant." - else - explanation_text = "Free Objective" - return target - -// Debrain // - -/datum/objective/debrain/find_target() - ..() - if(target && target.current) - explanation_text = "Steal the brain of [target.current.real_name]." - else - explanation_text = "Free Objective" - return target - -/datum/objective/debrain/find_target_by_role(role, role_type = 0) - ..(role, role_type) - if(target && target.current) - explanation_text = "Steal the brain of [target.current.real_name] the [!role_type ? target.assigned_role : target.special_role]." - else - explanation_text = "Free Objective" - return target - -// Protection, The opposite of killing a dude. // - -/datum/objective/protect/find_target() - ..() - if(target && target.current) - explanation_text = "Protect [target.current.real_name], the [target.assigned_role]." - else - explanation_text = "Free Objective" - return target - - -/datum/objective/protect/find_target_by_role(role, role_type = 0) - ..(role, role_type) - if(target && target.current) - explanation_text = "Protect [target.current.real_name], the [!role_type ? target.assigned_role : target.special_role]." - else - explanation_text = "Free Objective" - return target - -// Hijack // - -/datum/objective/hijack - explanation_text = "Hijack a shuttle." - -// Shuttle Escape // - -/datum/objective/escape - explanation_text = "Escape on the shuttle or an escape pod alive and free." - -// Survive // - -/datum/objective/survive - explanation_text = "Stay alive until the end." - -// Brig, similar to the anti-rev objective, but for traitors // - -/datum/objective/brig - var/already_completed = 0 - -/datum/objective/brig/find_target() - ..() - if(target && target.current) - explanation_text = "Have [target.current.real_name], the [target.assigned_role] brigged for 10 minutes." - else - explanation_text = "Free Objective" - return target - -/datum/objective/brig/find_target_by_role(role, role_type = 0) - ..(role, role_type) - if(target && target.current) - explanation_text = "Have [target.current.real_name], the [!role_type ? target.assigned_role : target.special_role] brigged for 10 minutes." - else - explanation_text = "Free Objective" - return target - -// Harm a crew member, making an example of them // - -/datum/objective/harm - var/already_completed = 0 - -/datum/objective/harm/find_target() - ..() - if(target && target.current) - explanation_text = "Make an example of [target.current.real_name], the [target.assigned_role]. Break one of their bones, detach one of their limbs or disfigure their face. Make sure they're alive when you do it." - else - explanation_text = "Free Objective" - return target - -/datum/objective/harm/find_target_by_role(role, role_type = 0) - ..(role, role_type) - if(target && target.current) - explanation_text = "Make an example of [target.current.real_name], the [!role_type ? target.assigned_role : target.special_role]. Break one of their bones, detach one of their limbs or disfigure their face. Make sure they're alive when you do it." - else - explanation_text = "Free Objective" - return target - -// Nuclear Explosion // - -/datum/objective/nuclear - explanation_text = "Cause mass destruction with a nuclear device." - - -// Steal // - -/datum/objective/steal - var/obj/item/steal_target - var/target_name - - var/static/possible_items[] = list( - "the captain's antique laser gun" = /obj/item/gun/energy/captain, - "a bluespace rift generator" = /obj/item/integrated_circuit/manipulation/bluespace_rift, - "an RCD" = /obj/item/rcd, - "a jetpack" = /obj/item/tank/jetpack, - "a captain's jumpsuit" = /obj/item/clothing/under/rank/captain, - "a functional AI" = /obj/item/aicard, - "a pair of magboots" = /obj/item/clothing/shoes/magboots, - "the [station_name()] blueprints" = /obj/item/blueprints, - "a nasa voidsuit" = /obj/item/clothing/suit/space/void, - "28 moles of phoron (full tank)" = /obj/item/tank, - "a sample of slime extract" = /obj/item/slime_extract, - "a piece of corgi meat" = /obj/item/reagent_containers/food/snacks/meat/corgi, - "a chief science officer's jumpsuit" = /obj/item/clothing/under/rank/research_director, - "a chief engineer's jumpsuit" = /obj/item/clothing/under/rank/chief_engineer, - "a chief medical officer's jumpsuit" = /obj/item/clothing/under/rank/chief_medical_officer, - "a head of security's jumpsuit" = /obj/item/clothing/under/rank/head_of_security, - "a head of personnel's jumpsuit" = /obj/item/clothing/under/rank/head_of_personnel, - "the hypospray" = /obj/item/reagent_containers/hypospray, - "the captain's pinpointer" = /obj/item/pinpointer, - "an ablative armor vest" = /obj/item/clothing/suit/armor/laserproof, - ) - - var/static/possible_items_special[] = list( - /*"nuclear authentication disk" = /obj/item/disk/nuclear,*///Broken with the change to nuke disk making it respawn on z level change. - "nuclear gun" = /obj/item/gun/energy/gun/nuclear, - "diamond drill" = /obj/item/pickaxe/diamonddrill, - "bag of holding" = /obj/item/storage/backpack/holding, - "hyper-capacity cell" = /obj/item/cell/hyper, - "10 diamonds" = /obj/item/stack/material/diamond, - "50 gold bars" = /obj/item/stack/material/gold, - "25 refined uranium bars" = /obj/item/stack/material/uranium, - ) - -/datum/objective/steal/proc/set_target(item_name) - target_name = item_name - steal_target = possible_items[target_name] - if (!steal_target ) - steal_target = possible_items_special[target_name] - explanation_text = "Steal [target_name]." - return steal_target - - -/datum/objective/steal/find_target() - return set_target(pick(possible_items)) - - -/datum/objective/steal/proc/select_target() - var/list/possible_items_all = possible_items+possible_items_special+"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") - var/obj/item/custom_target = input("Select type:","Type") as null|anything in typesof(/obj/item) - if (!custom_target) return - var/tmp_obj = new custom_target - var/custom_name = tmp_obj:name - qdel(tmp_obj) - custom_name = sanitize(input("Enter target name:", "Objective target", custom_name) as text|null) - if (!custom_name) return - target_name = custom_name - steal_target = custom_target - explanation_text = "Steal [target_name]." - else - set_target(new_target) - return steal_target - -// RnD progress download // - -/datum/objective/download/proc/gen_amount_goal() - target_amount = rand(10,20) - explanation_text = "Download [target_amount] research levels." - return target_amount - -// Capture // - -/datum/objective/capture - -/datum/objective/capture/proc/gen_amount_goal() - target_amount = rand(5,10) - explanation_text = "Accumulate [target_amount] capture points." - return target_amount - -// Changeling Absorb // - -/datum/objective/absorb/proc/gen_amount_goal(var/lowbound = 4, var/highbound = 6) - target_amount = rand (lowbound,highbound) - var/n_p = 1 //autowin - if (GAME_STATE == RUNLEVEL_SETUP) - for(var/mob/new_player/P in GLOB.player_list) - if(P.client && P.ready && P.mind!=owner) - n_p ++ - else if (GAME_STATE == RUNLEVEL_GAME) - for(var/mob/living/carbon/human/P in GLOB.player_list) - if(P.client && !(P.mind.changeling) && P.mind!=owner) - n_p ++ - target_amount = min(target_amount, n_p) - - explanation_text = "Absorb [target_amount] compatible genomes." - return target_amount - -// Heist objectives. -/datum/objective/heist/proc/choose_target() - return - -/datum/objective/heist/kidnap - var/list/roles = list(/datum/job/chief_engineer, /datum/job/rd, /datum/job/roboticist, /datum/job/chemist, /datum/job/engineer) - -/datum/objective/heist/kidnap/choose_target() - var/list/possible_targets = list() - var/list/priority_targets = list() - - for(var/datum/mind/possible_target in SSticker.minds) - if(possible_target != owner && ishuman(possible_target.current) && (possible_target.current.stat != DEAD) && (!possible_target.special_role)) - possible_targets += possible_target - for (var/path in roles) - var/datum/job/role = SSjobs.get_by_path(path) - if(possible_target.assigned_role == role.title) - priority_targets += possible_target - continue - - if(priority_targets.len > 0) - target = pick(priority_targets) - else if(possible_targets.len > 0) - target = pick(possible_targets) - - if(target && target.current) - explanation_text = "We can get a good price for [target.current.real_name], the [target.assigned_role]. Take them alive." - else - explanation_text = "Free Objective" - return target - -/datum/objective/heist/loot/choose_target() - var/loot = "an object" - switch(rand(1,8)) - if(1) - target = /obj/structure/particle_accelerator - target_amount = 6 - loot = "a complete particle accelerator" - if(2) - target = /obj/machinery/the_singularitygen - target_amount = 1 - loot = "a gravitational generator" - if(3) - target = /obj/machinery/power/emitter - target_amount = 4 - loot = "four emitters" - if(4) - target = /obj/machinery/nuclearbomb - target_amount = 1 - loot = "a nuclear bomb" - if(5) - target = /obj/item/gun - target_amount = 6 - loot = "six guns" - if(6) - target = /obj/item/gun/energy - target_amount = 4 - loot = "four energy guns" - if(7) - target = /obj/item/gun/energy/laser - target_amount = 2 - loot = "two laser guns" - if(8) - target = /obj/item/gun/energy/ionrifle - target_amount = 1 - loot = "an ion gun" - - explanation_text = "It's a buyer's market out here. Steal [loot] for resale." - -/datum/objective/heist/salvage/choose_target() - switch(rand(1,8)) - if(1) - target = MATERIAL_STEEL - target_amount = 300 - if(2) - target = MATERIAL_GLASS - target_amount = 200 - if(3) - target = MATERIAL_PLASTEEL - target_amount = 100 - if(4) - target = MATERIAL_PHORON - target_amount = 100 - if(5) - target = MATERIAL_SILVER - target_amount = 50 - if(6) - target = MATERIAL_GOLD - target_amount = 20 - if(7) - target = MATERIAL_URANIUM - target_amount = 20 - if(8) - target = MATERIAL_DIAMOND - target_amount = 20 - - explanation_text = "Ransack the [station_name()] and escape with [target_amount] [target]." - -/datum/objective/heist/preserve_crew - explanation_text = "Do not leave anyone behind, alive or dead." - -//Borer objective(s). -/datum/objective/borer_survive - explanation_text = "Survive in a host until the end of the round." - -/datum/objective/borer_reproduce - explanation_text = "Reproduce at least once." - -/datum/objective/ninja_highlander - explanation_text = "You aspire to be a Grand Master of the Spider Clan. Kill all of your fellow acolytes." - -/datum/objective/cult/survive - explanation_text = "Our knowledge must live on." - target_amount = 5 - -/datum/objective/cult/survive/New() - ..() - explanation_text = "Our knowledge must live on. Make sure at least [target_amount] acolytes escape to spread their work." - -/datum/objective/cult/eldergod - explanation_text = "Summon Nar-Sie via the use of the appropriate rune (Hell join self). It will only work if nine cultists stand on and around it. The convert rune is join blood self." - -/datum/objective/cult/sacrifice - explanation_text = "Conduct a ritual sacrifice for the glory of Nar-Sie." - -/datum/objective/cult/sacrifice/find_target() - var/list/possible_targets = list() - if(!possible_targets.len) - for(var/mob/living/carbon/human/player in GLOB.player_list) - if(player.mind && !(player.mind in GLOB.cult.current_antagonists)) - possible_targets += player.mind - if(possible_targets.len > 0) - target = pick(possible_targets) - if(target) explanation_text = "Sacrifice [target.name], the [target.assigned_role]. You will need the sacrifice rune (Hell blood join) and three acolytes to do so." - -/datum/objective/rev/find_target() - ..() - if(target && target.current) - explanation_text = "Assassinate, capture or convert [target.current.real_name], the [target.assigned_role]." - else - explanation_text = "Free Objective" - return target - -/datum/objective/rev/find_target_by_role(role, role_type=0) - ..(role, role_type) - if(target && target.current) - explanation_text = "Assassinate, capture or convert [target.current.real_name], the [!role_type ? target.assigned_role : target.special_role]." - else - explanation_text = "Free Objective" - return target diff --git a/code/game/gamemodes/revolution/revolution.dm b/code/game/gamemodes/revolution/revolution.dm deleted file mode 100644 index 153a18a20e786..0000000000000 --- a/code/game/gamemodes/revolution/revolution.dm +++ /dev/null @@ -1,12 +0,0 @@ -/datum/game_mode/revolution - name = "Revolution" - config_tag = "revolution" - round_description = "Some crewmembers are attempting to start a revolution!" - extended_round_description = "Revolutionaries - Remove the heads of staff from power. Convert other crewmembers to your cause using the 'Convert Bourgeoise' verb. Protect your leaders." - required_players = 4 - required_enemies = 3 - auto_recall_shuttle = FALSE - end_on_antag_death = FALSE - shuttle_delay = 2 - antag_tags = list(MODE_REVOLUTIONARY, MODE_LOYALIST) - require_all_templates = TRUE diff --git a/code/game/gamemodes/setupgame.dm b/code/game/gamemodes/setupgame.dm deleted file mode 100644 index 2cd429fb603d8..0000000000000 --- a/code/game/gamemodes/setupgame.dm +++ /dev/null @@ -1,83 +0,0 @@ -///////////////////////// -// (mostly) DNA2 SETUP -///////////////////////// - -// Randomize block, assign a reference name, and optionally define difficulty (by making activation zone smaller or bigger) -// The name is used on /vg/ for species with predefined genetic traits, -// and for the DNA panel in the player panel. -/proc/getAssignedBlock(var/name,var/list/blocksLeft, var/activity_bounds=DNA_DEFAULT_BOUNDS) - if(blocksLeft.len==0) - warning("[name]: No more blocks left to assign!") - return 0 - var/assigned = pick(blocksLeft) - blocksLeft.Remove(assigned) - assigned_blocks[assigned]=name - dna_activity_bounds[assigned]=activity_bounds - //testing("[name] assigned to block #[assigned].") - return assigned - -/proc/setupgenetics() - - if (prob(50)) - // Currently unused. Will revisit. - N3X - GLOB.BLOCKADD = rand(-300,300) - if (prob(75)) - GLOB.DIFFMUT = rand(0,20) - - var/list/numsToAssign=new() - for(var/i=1;i\The [src] heats up in your hands, burning you!") - -/obj/item/excalibur/Process() - if(istype(loc, /mob/living)) - if(istype(loc, /mob/living/carbon/human)) - var/mob/living/carbon/human/H = loc - var/hand = BP_R_HAND - if(H.l_hand == src) - hand = BP_L_HAND - var/obj/item/organ/external/E = H.get_organ(hand) - E.take_external_damage(burn=2,used_weapon="stovetop") - else - var/mob/living/M = loc - M.adjustFireLoss(2) - if(prob(2)) - to_chat(loc,"\The [src] is burning you!") - return 1 - -/obj/item/excalibur/dropped() - STOP_PROCESSING(SSobj, src) diff --git a/code/game/gamemodes/wizard/servant_items/familiar.dm b/code/game/gamemodes/wizard/servant_items/familiar.dm deleted file mode 100644 index db57ecb29416c..0000000000000 --- a/code/game/gamemodes/wizard/servant_items/familiar.dm +++ /dev/null @@ -1,19 +0,0 @@ -/obj/item/clothing/head/bandana/familiarband - name = "familiar's headband" - desc = "It's a simple headband made of leather." - icon_state = "familiarband" - -/obj/item/clothing/under/familiargarb - name = "familiar's garb" - desc = "It looks like a cross between Robin Hood's tunic and some patchwork leather armor. Whoever put this together must have been in a hurry." - icon_state = "familiartunic" - armor = list( - melee = ARMOR_MELEE_KNIVES, - laser = ARMOR_LASER_MINOR, - energy = ARMOR_ENERGY_SMALL - ) - species_restricted = list(SPECIES_HUMAN) - -/obj/item/clothing/under/familiargarb/Initialize() - . = ..() - slowdown_per_slot[slot_w_uniform] = -2 diff --git a/code/game/gamemodes/wizard/servant_items/fiend.dm b/code/game/gamemodes/wizard/servant_items/fiend.dm deleted file mode 100644 index 6a0dcf2675d96..0000000000000 --- a/code/game/gamemodes/wizard/servant_items/fiend.dm +++ /dev/null @@ -1,54 +0,0 @@ -/obj/item/clothing/head/fiendhood - name = "fiend's hood" - desc = "A dark hood with blood-red trim. Something about the fabric blocks more light than it should." - icon_state = "fiendhood" - armor = list( - melee = ARMOR_MELEE_KNIVES, - bullet = ARMOR_BALLISTIC_MINOR, - laser = ARMOR_LASER_SMALL, - energy = ARMOR_ENERGY_SMALL, - rad = ARMOR_RAD_SHIELDED - ) - species_restricted = list(SPECIES_HUMAN) - flags_inv = HIDEEARS | BLOCKHAIR - -/obj/item/clothing/suit/fiendcowl - name = "fiend's cowl" - desc = "A charred black duster with red trim. In its fabric, you can see the faint outline of millions of eyes." - icon_state = "fiendcowl" - body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS - armor = list( - melee = ARMOR_MELEE_RESISTANT, - bullet = ARMOR_BALLISTIC_PISTOL, - laser = ARMOR_LASER_HANDGUNS, - energy = ARMOR_ENERGY_RESISTANT, - rad = ARMOR_RAD_SHIELDED - ) - -/obj/item/clothing/under/lawyer/fiendsuit - name = "black suit" - desc = "A snappy black suit with red trim. The undershirt's stained with something, though..." - icon_state = "fiendsuit" - species_restricted = list(SPECIES_HUMAN) - -/obj/item/clothing/shoes/dress/devilshoes - name = "dress shoes" - desc = "Off-colour leather dress shoes. Their footsteps are silent." - icon_state = "fiendshoes" - item_flags = ITEM_FLAG_SILENT - -/obj/item/clothing/head/fiendhood/fem - name = "fiend's visage" - desc = "To gaze upon this is to gaze into an inferno. Look away, before it looks back of its own accord." - icon_state = "fiendvisage" - flags_inv = HIDEEARS | BLOCKHAIR - -/obj/item/clothing/suit/fiendcowl/fem - name = "fiend's robe" - icon_state = "fiendrobe" - desc = "A tattered, black and red robe. Nothing is visible through the holes in its fabric, except for a strange, inky blackness. It looks as if it was stitched together with other clothing..." - -/obj/item/clothing/under/devildress - name = "old dress" - desc = "An elegant - if tattered - black and red dress. There's nothing visible through the holes in the fabric; nothing but darkness." - icon_state = "fienddress" diff --git a/code/game/gamemodes/wizard/servant_items/infiltrator.dm b/code/game/gamemodes/wizard/servant_items/infiltrator.dm deleted file mode 100644 index ed349fc6ff775..0000000000000 --- a/code/game/gamemodes/wizard/servant_items/infiltrator.dm +++ /dev/null @@ -1,50 +0,0 @@ -/obj/item/clothing/head/infilhat - name = "immaculate fedora" - desc = "Whoever owns this hat means business. Hopefully, it's just good business." - icon_state = "infhat" - armor = list( - melee = ARMOR_MELEE_MINOR, - bullet = ARMOR_BALLISTIC_MINOR, - laser = ARMOR_LASER_MINOR, - energy = ARMOR_ENERGY_MINOR - ) - species_restricted = list(SPECIES_HUMAN) - -/obj/item/clothing/suit/infilsuit - name = "immaculate suit" - desc = "The clothes of an impeccable diplomat. Or perhaps a businessman. Let's not consider the horrors that might arise if it belongs to a lawyer." - icon_state = "infsuit" - armor = list( - melee = ARMOR_MELEE_MINOR, - bullet = ARMOR_BALLISTIC_PISTOL, - laser = ARMOR_LASER_MINOR, - energy = ARMOR_ENERGY_MINOR - ) - -/obj/item/clothing/under/lawyer/infil - name = "formal outfit" - desc = "A white dress shirt and navy pants. Snazzy." - icon_state = "inf_mob" - species_restricted = list(SPECIES_HUMAN) - -/obj/item/clothing/shoes/dress/infilshoes - name = "black leather shoes" - desc = "Dress shoes. Their footsteps are dead silent." - icon_state = "infshoes" - item_flags = ITEM_FLAG_SILENT - -/obj/item/clothing/head/infilhat/fem - name = "maid's headband" - desc = "This dainty, frilled thing is apparently meant to go on your head." - icon_state = "infhatfem" - -/obj/item/clothing/suit/infilsuit/fem - name = "maid's uniform" - desc = "The uniform of someone you'd expect to see dusting off the Antique Gun's display case." - icon_state = "infdress" - -/obj/item/clothing/under/lawyer/infil/fem - name = "white dress" - desc = "It's a simple, sleeveless white dress with black trim." - icon_state = "inffem" - body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|FEET \ No newline at end of file diff --git a/code/game/gamemodes/wizard/servant_items/overseer.dm b/code/game/gamemodes/wizard/servant_items/overseer.dm deleted file mode 100644 index 9d398512a8579..0000000000000 --- a/code/game/gamemodes/wizard/servant_items/overseer.dm +++ /dev/null @@ -1,45 +0,0 @@ -/obj/item/clothing/head/overseerhood - name = "grim hood" - desc = "Darker than dark. What... what is this made of?" - armor = list( - melee = ARMOR_MELEE_SHIELDED, - bullet = ARMOR_BALLISTIC_HEAVY, - laser = ARMOR_LASER_HEAVY, - energy = ARMOR_ENERGY_SHIELDED, - bomb = ARMOR_BOMB_SHIELDED - ) - icon_state = "necromancer" - item_flags = ITEM_FLAG_AIRTIGHT - max_pressure_protection = FIRESUIT_MAX_PRESSURE - min_pressure_protection = 0 - species_restricted = list(SPECIES_HUMAN) - flags_inv = HIDEEARS | BLOCKHAIR - -/obj/item/clothing/suit/straight_jacket/overseercloak - name = "grim cloak" - desc = "The void of space woven into fabric. It's hard to tell where its edges are." - icon_state = "overseercloak" - armor = list( - melee = ARMOR_MELEE_SHIELDED, - bullet = ARMOR_BALLISTIC_HEAVY, - laser = ARMOR_LASER_HEAVY, - energy = ARMOR_ENERGY_SHIELDED, - bomb = ARMOR_BOMB_SHIELDED - ) - item_flags = ITEM_FLAG_AIRTIGHT - max_pressure_protection = FIRESUIT_MAX_PRESSURE - min_pressure_protection = 0 - body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS - -/obj/item/clothing/under/grimhoodie - name = "black hoodie" - desc = "A generic black hoodie. There's a pattern akin to splattered blood along the bottom." - icon_state = "grimhoodie" - species_restricted = list(SPECIES_HUMAN) - -//These are the ones that it gets when they toggle it off -/obj/item/clothing/shoes/sandal/grimboots - name = "stained boots" - desc = "These boots are stained with blood so dry that it's turned black..." - icon_state = "grimboots" - item_flags = ITEM_FLAG_SILENT \ No newline at end of file diff --git a/code/game/gamemodes/wizard/wizard.dm b/code/game/gamemodes/wizard/wizard.dm deleted file mode 100644 index e998e9203269b..0000000000000 --- a/code/game/gamemodes/wizard/wizard.dm +++ /dev/null @@ -1,9 +0,0 @@ -/datum/game_mode/wizard - name = "Wizard" - round_description = "There is a SPACE WIZARD onboard. You can't let the magician achieve their objectives!" - extended_round_description = "A powerful entity capable of manipulating the elements around him, most commonly referred to as a 'wizard', has made their way onboard. They have a wide variety of powers and spells available to them that makes your own simple moral self tremble with fear and excitement. Ultimately, their purpose is unknown. However, it is up to you and your crew to decide if their powers can be used for good or if their arrival foreshadows devastation." - config_tag = "wizard" - required_players = 5 - required_enemies = 1 - end_on_antag_death = FALSE - antag_tags = list(MODE_WIZARD) diff --git a/code/game/images.dm b/code/game/images.dm deleted file mode 100644 index e8b844937491e..0000000000000 --- a/code/game/images.dm +++ /dev/null @@ -1,3 +0,0 @@ -/image/Destroy() - ..() - return QDEL_HINT_HARDDEL diff --git a/code/game/jobs/_access_defs.dm b/code/game/jobs/_access_defs.dm deleted file mode 100644 index b74414c1ae4a2..0000000000000 --- a/code/game/jobs/_access_defs.dm +++ /dev/null @@ -1,20 +0,0 @@ -#define ACCESS_REGION_NONE -1 -#define ACCESS_REGION_ALL 0 -#define ACCESS_REGION_SECURITY 1 -#define ACCESS_REGION_MEDBAY 2 -#define ACCESS_REGION_RESEARCH 3 -#define ACCESS_REGION_ENGINEERING 4 -#define ACCESS_REGION_COMMAND 5 -#define ACCESS_REGION_GENERAL 6 -#define ACCESS_REGION_SUPPLY 7 -#define ACCESS_REGION_SERVICE 8 - -// Keep those two up to date -#define ACCESS_REGION_MIN 1 -#define ACCESS_REGION_MAX 8 - -#define ACCESS_TYPE_NONE 1 -#define ACCESS_TYPE_CENTCOM 2 -#define ACCESS_TYPE_STATION 4 -#define ACCESS_TYPE_SYNDICATE 8 -#define ACCESS_TYPE_ALL (ACCESS_TYPE_NONE|ACCESS_TYPE_CENTCOM|ACCESS_TYPE_STATION|ACCESS_TYPE_SYNDICATE) diff --git a/code/game/jobs/access.dm b/code/game/jobs/access.dm deleted file mode 100644 index a401365d609a5..0000000000000 --- a/code/game/jobs/access.dm +++ /dev/null @@ -1,281 +0,0 @@ -//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:31 - -/obj/var/list/req_access = list() - -//returns 1 if this mob has sufficient access to use this object -/atom/movable/proc/allowed(mob/M) - //check if it doesn't require any access at all - if(src.check_access(null)) - return TRUE - if(!istype(M)) - return FALSE - return check_access_list(M.GetAccess()) - -/atom/movable/proc/GetAccess() - . = list() - var/obj/item/card/id/id = GetIdCard() - if(id) - . += id.GetAccess() - -/atom/movable/proc/GetIdCard() - return null - -/atom/movable/proc/check_access(atom/movable/A) - return check_access_list(A ? A.GetAccess() : list()) - -/atom/movable/proc/check_access_list(list/L) - var/list/R = get_req_access() - - if(!R) - R = list() - if(!istype(L, /list)) - return FALSE - - if(GLOB.using_map?.maint_all_access) - L = L.Copy() - L |= access_maint_tunnels - - return has_access(R, L) - -/proc/has_access(list/req_access, list/accesses) - for(var/req in req_access) - if(islist(req)) - var/found = FALSE - for(var/req_one in req) - if(req_one in accesses) - found = TRUE - break - if(!found) - return FALSE - else if(!(req in accesses)) //doesn't have this access - return FALSE - return TRUE - -//Checks if the access (constant or list) is contained in one of the entries of access_patterns, a list of lists. -/proc/has_access_pattern(list/access_patterns, access) - if(!islist(access)) - access = list(access) - for(var/access_pattern in access_patterns) - if(has_access(access_pattern, access)) - return 1 - -// Used for retrieving required access information, if available -/atom/movable/proc/get_req_access() - return null - -/obj/get_req_access() - return req_access - -/proc/get_centcom_access(job) - switch(job) - if("VIP Guest") - return list(access_cent_general) - if("Custodian") - return list(access_cent_general, access_cent_living, access_cent_storage) - if("Thunderdome Overseer") - return list(access_cent_general, access_cent_thunder) - if("Intel Officer") - return list(access_cent_general, access_cent_living) - if("Medical Officer") - return list(access_cent_general, access_cent_living, access_cent_medical) - if("Death Commando") - return list(access_cent_general, access_cent_specops, access_cent_living, access_cent_storage) - if("Research Officer") - return list(access_cent_general, access_cent_specops, access_cent_medical, access_cent_teleporter, access_cent_storage) - if("BlackOps Commander") - return list(access_cent_general, access_cent_thunder, access_cent_specops, access_cent_living, access_cent_storage, access_cent_creed) - if("Supreme Commander") - return get_all_centcom_access() - -var/global/list/datum/access/priv_all_access_datums -/proc/get_all_access_datums() - if(!priv_all_access_datums) - priv_all_access_datums = init_subtypes(/datum/access) - priv_all_access_datums = dd_sortedObjectList(priv_all_access_datums) - - return priv_all_access_datums.Copy() - -var/global/list/datum/access/priv_all_access_datums_id -/proc/get_all_access_datums_by_id() - if(!priv_all_access_datums_id) - priv_all_access_datums_id = list() - for(var/datum/access/A in get_all_access_datums()) - priv_all_access_datums_id["[A.id]"] = A - - return priv_all_access_datums_id.Copy() - -var/global/list/datum/access/priv_all_access_datums_region -/proc/get_all_access_datums_by_region() - if(!priv_all_access_datums_region) - priv_all_access_datums_region = list() - for(var/datum/access/A in get_all_access_datums()) - if(!priv_all_access_datums_region[A.region]) - priv_all_access_datums_region[A.region] = list() - priv_all_access_datums_region[A.region] += A - - return priv_all_access_datums_region.Copy() - -/proc/get_access_ids(var/access_types = ACCESS_TYPE_ALL) - var/list/L = new() - for(var/datum/access/A in get_all_access_datums()) - if(A.access_type & access_types) - L += A.id - return L - -var/global/list/priv_all_access -/proc/get_all_accesses() - if(!priv_all_access) - priv_all_access = get_access_ids() - - return priv_all_access.Copy() - -var/global/list/priv_station_access -/proc/get_all_station_access() - if(!priv_station_access) - priv_station_access = get_access_ids(ACCESS_TYPE_STATION) - - return priv_station_access.Copy() - -var/global/list/priv_centcom_access -/proc/get_all_centcom_access() - if(!priv_centcom_access) - priv_centcom_access = get_access_ids(ACCESS_TYPE_CENTCOM) - - return priv_centcom_access.Copy() - -var/global/list/priv_syndicate_access -/proc/get_all_syndicate_access() - if(!priv_syndicate_access) - priv_syndicate_access = get_access_ids(ACCESS_TYPE_SYNDICATE) - - return priv_syndicate_access.Copy() - -var/global/list/priv_region_access -/proc/get_region_accesses(var/code) - if(code == ACCESS_REGION_ALL) - return get_all_station_access() - - if(!priv_region_access) - priv_region_access = list() - for(var/datum/access/A in get_all_access_datums()) - if(!priv_region_access["[A.region]"]) - priv_region_access["[A.region]"] = list() - priv_region_access["[A.region]"] += A.id - - var/list/region = priv_region_access["[code]"] - return region.Copy() - -/proc/get_region_accesses_name(var/code) - switch(code) - if(ACCESS_REGION_ALL) - return "All" - if(ACCESS_REGION_SECURITY) //security - return "Security" - if(ACCESS_REGION_MEDBAY) //medbay - return "Medical" - if(ACCESS_REGION_RESEARCH) //research - return "Research" - if(ACCESS_REGION_ENGINEERING) //engineering and maintenance - return "Engineering" - if(ACCESS_REGION_COMMAND) //command - return "Command" - if(ACCESS_REGION_GENERAL) //station general - return "General" - if(ACCESS_REGION_SUPPLY) //supply - return "Supply" - if(ACCESS_REGION_SERVICE) //nt - return "Service" - -/proc/get_access_desc(id) - var/list/AS = priv_all_access_datums_id || get_all_access_datums_by_id() - var/datum/access/A = AS["[id]"] - - return A ? A.desc : "" - -/proc/get_centcom_access_desc(A) - return get_access_desc(A) - -/proc/get_access_by_id(id) - var/list/AS = priv_all_access_datums_id || get_all_access_datums_by_id() - return AS[id] - -/proc/get_all_centcom_jobs() - return list("VIP Guest", - "Custodian", - "Thunderdome Overseer", - "Intel Officer", - "Medical Officer", - "Death Commando", - "Research Officer", - "BlackOps Commander", - "Supreme Commander", - "Emergency Response Team", - "Emergency Response Team Leader") - -/mob/observer/ghost - var/static/obj/item/card/id/all_access/ghost_all_access - -/mob/observer/ghost/GetIdCard() - if(!isadmin(src)) - return - - if(!ghost_all_access) - ghost_all_access = new() - return ghost_all_access - -/mob/living/bot/GetIdCard() - return botcard - -#define HUMAN_ID_CARDS list(get_active_hand(), wear_id, get_inactive_hand()) -/mob/living/carbon/human/GetIdCard() - for(var/item_slot in HUMAN_ID_CARDS) - var/obj/item/I = item_slot - var/obj/item/card/id = I ? I.GetIdCard() : null - if(id) - return id - -/mob/living/carbon/human/GetAccess() - . = list() - for(var/item_slot in HUMAN_ID_CARDS) - var/obj/item/I = item_slot - if(I) - . |= I.GetAccess() -#undef HUMAN_ID_CARDS - -/mob/living/silicon/GetIdCard() - if(stat || (ckey && !client)) - return // Unconscious, dead or once possessed but now client-less silicons are not considered to have id access. - return idcard - -/proc/FindNameFromID(var/mob/M, var/missing_id_name = "Unknown") - var/obj/item/card/id/C = M.GetIdCard() - if(C) - return C.registered_name - return missing_id_name - -/proc/get_all_job_icons() //For all existing HUD icons - return SSjobs.titles_to_datums + list("Prisoner") - -/obj/proc/GetJobName() //Used in secHUD icon generation - var/obj/item/card/id/I = GetIdCard() - - if(I) - var/job_icons = get_all_job_icons() - if(I.assignment in job_icons) //Check if the job has a hud icon - return I.assignment - if(I.rank in job_icons) - return I.rank - - var/centcom = get_all_centcom_jobs() - if(I.assignment in centcom) //Return with the NT logo if it is a Centcom job - return "Centcom" - if(I.rank in centcom) - return "Centcom" - else - return - - return "Unknown" //Return unknown if none of the above apply - -/proc/get_access_region_by_id(id) - var/datum/access/AD = get_access_by_id(id) - return AD.region diff --git a/code/game/jobs/access_datum.dm b/code/game/jobs/access_datum.dm deleted file mode 100644 index d1bf97d44edc9..0000000000000 --- a/code/game/jobs/access_datum.dm +++ /dev/null @@ -1,470 +0,0 @@ -/datum/access - var/id = "" - var/desc = "" - var/region = ACCESS_REGION_NONE - var/access_type = ACCESS_TYPE_STATION - -/datum/access/dd_SortValue() - return "[access_type][desc]" - -/***************** -* Station access * -*****************/ -var/global/const/access_security = "ACCESS_SECURITY" //1 -/datum/access/security - id = access_security - desc = "Security Equipment" - region = ACCESS_REGION_SECURITY - -var/global/const/access_brig = "ACCESS_BRIG" // Brig timers and permabrig 2 -/datum/access/holding - id = access_brig - desc = "Holding Cells" - region = ACCESS_REGION_SECURITY - -var/global/const/access_armory = "ACCESS_ARMORY" //3 -/datum/access/armory - id = access_armory - desc = "Armory" - region = ACCESS_REGION_SECURITY - -var/global/const/access_forensics_lockers = "ACCESS_FORENSICS" //4 -/datum/access/forensics_lockers - id = access_forensics_lockers - desc = "Forensics" - region = ACCESS_REGION_SECURITY - -var/global/const/access_medical = "ACCESS_MEDICAL" //5 -/datum/access/medical - id = access_medical - desc = "Medical" - region = ACCESS_REGION_MEDBAY - -var/global/const/access_morgue = "ACCESS_MORGUE" //6 -/datum/access/morgue - id = access_morgue - desc = "Morgue" - region = ACCESS_REGION_MEDBAY - -var/global/const/access_tox = "ACCESS_TOXINS" //7 -/datum/access/tox - id = access_tox - desc = "Research Labs" - region = ACCESS_REGION_RESEARCH - -var/global/const/access_tox_storage = "ACCESS_TOX_STORAGE" //8 -/datum/access/tox_storage - id = access_tox_storage - desc = "Toxins Lab" - region = ACCESS_REGION_RESEARCH - -var/global/const/access_engine = "ACCESS_ENGINEERING" //10 -/datum/access/engine - id = access_engine - desc = "Engineering" - region = ACCESS_REGION_ENGINEERING - -var/global/const/access_engine_equip = "ACCESS_ENGINE_EQUIP" //11 -/datum/access/engine_equip - id = access_engine_equip - desc = "Engine Room" - region = ACCESS_REGION_ENGINEERING - -var/global/const/access_maint_tunnels = "ACCESS_MAINT" //12 -/datum/access/maint_tunnels - id = access_maint_tunnels - desc = "Maintenance" - region = ACCESS_REGION_ENGINEERING - -var/global/const/access_external_airlocks = "ACCESS_EXTERNAL" //13 -/datum/access/external_airlocks - id = access_external_airlocks - desc = "External Airlocks" - region = ACCESS_REGION_ENGINEERING - -var/global/const/access_emergency_storage = "ACCESS_EMERGENCY_STORAGE" //14 -/datum/access/emergency_storage - id = access_emergency_storage - desc = "Emergency Storage" - region = ACCESS_REGION_ENGINEERING - -var/global/const/access_change_ids = "ACCESS_CHANGE_ID" //15 -/datum/access/change_ids - id = access_change_ids - desc = "ID Computer" - region = ACCESS_REGION_COMMAND - -var/global/const/access_ai_upload = "ACCESS_AI_UPLOAD" //16 -/datum/access/ai_upload - id = access_ai_upload - desc = "AI Upload" - region = ACCESS_REGION_COMMAND - -var/global/const/access_teleporter = "ACCESS_TELEPORTER" //17 -/datum/access/teleporter - id = access_teleporter - desc = "Teleporter" - region = ACCESS_REGION_COMMAND - -var/global/const/access_eva = "ACCESS_EVA" //18 -/datum/access/eva - id = access_eva - desc = "EVA" - region = ACCESS_REGION_COMMAND - -var/global/const/access_bridge = "ACCESS_BRIDGE" //19 -/datum/access/bridge - id = access_bridge - desc = "Bridge" - region = ACCESS_REGION_COMMAND - -var/global/const/access_captain = "ACCESS_CAPTAIN" //20 -/datum/access/captain - id = access_captain - desc = "Captain" - region = ACCESS_REGION_COMMAND - -var/global/const/access_all_personal_lockers = "ACCESS_PERSONAL_LOCKERS" //21 -/datum/access/all_personal_lockers - id = access_all_personal_lockers - desc = "Personal Lockers" - region = ACCESS_REGION_COMMAND - -var/global/const/access_chapel_office = "ACCESS_CHAPEL_STORAGE" //22 -/datum/access/chapel_office - id = access_chapel_office - desc = "Chapel Office" - region = ACCESS_REGION_GENERAL - -var/global/const/access_tech_storage = "ACCESS_TECH_STORAGE" //23 -/datum/access/tech_storage - id = access_tech_storage - desc = "Technical Storage" - region = ACCESS_REGION_ENGINEERING - -var/global/const/access_atmospherics = "ACCESS_ATMOS" //24 -/datum/access/atmospherics - id = access_atmospherics - desc = "Atmospherics" - region = ACCESS_REGION_ENGINEERING - -var/global/const/access_janitor = "ACCESS_JANITOR" //26 -/datum/access/janitor - id = access_janitor - desc = "Custodial Closet" - region = ACCESS_REGION_GENERAL - -var/global/const/access_crematorium = "ACCESS_CREMATORIUM" //27 -/datum/access/crematorium - id = access_crematorium - desc = "Crematorium" - region = ACCESS_REGION_GENERAL - -var/global/const/access_kitchen = "ACCESS_KITCHEN" //28 -/datum/access/kitchen - id = access_kitchen - desc = "Kitchen" - region = ACCESS_REGION_GENERAL - -var/global/const/access_robotics = "ACCESS_ROBOTICS" //29 -/datum/access/robotics - id = access_robotics - desc = "Robotics" - region = ACCESS_REGION_RESEARCH - -var/global/const/access_rd = "ACCESS_RESEARCH_DIRECTOR" //30 -/datum/access/rd - id = access_rd - desc = "Chief Science Officer" - region = ACCESS_REGION_RESEARCH - -var/global/const/access_cargo = "ACCESS_CARGO" //31 -/datum/access/cargo - id = access_cargo - desc = "Cargo Bay" - region = ACCESS_REGION_SUPPLY - -var/global/const/access_construction = "ACCESS_CONSTRUCTION" //32 -/datum/access/construction - id = access_construction - desc = "Construction Areas" - region = ACCESS_REGION_ENGINEERING - -var/global/const/access_chemistry = "ACCESS_CHEMISTRY" //33 -/datum/access/chemistry - id = access_chemistry - desc = "Chemistry Lab" - region = ACCESS_REGION_MEDBAY - -var/global/const/access_cargo_bot = "ACCESS_CARGO_BOT" //34 -/datum/access/cargo_bot - id = access_cargo_bot - desc = "Cargo Bot Delivery" - region = ACCESS_REGION_SUPPLY - -var/global/const/access_hydroponics = "ACCESS_HYDROPONICS" //35 -/datum/access/hydroponics - id = access_hydroponics - desc = "Hydroponics" - region = ACCESS_REGION_GENERAL - -var/global/const/access_manufacturing = "ACCESS_MANUFACTURING" //36 -/datum/access/manufacturing - id = access_manufacturing - desc = "Manufacturing" - access_type = ACCESS_TYPE_NONE - -var/global/const/access_library = "ACCESS_LIBRARY" //37 -/datum/access/library - id = access_library - desc = "Library" - region = ACCESS_REGION_GENERAL - -var/global/const/access_lawyer = "ACCESS_LAWYER" //38 -/datum/access/lawyer - id = access_lawyer - desc = "Internal Affairs" - region = ACCESS_REGION_COMMAND - -var/global/const/access_virology = "ACCESS_VIRO" //39 -/datum/access/virology - id = access_virology - desc = "Virology" - region = ACCESS_REGION_MEDBAY - -var/global/const/access_cmo = "ACCESS_CHIEF_MEDICAL_OFFICER" //40 -/datum/access/cmo - id = access_cmo - desc = "Chief Medical Officer" - region = ACCESS_REGION_COMMAND - -var/global/const/access_qm = "ACCESS_QUARTERMASTER" //41 -/datum/access/qm - id = access_qm - desc = "Quartermaster" - region = ACCESS_REGION_SUPPLY - -var/global/const/access_network = "ACCESS_NETWORK" //42 -/datum/access/network - id = access_network - desc = "Network Operations" - region = ACCESS_REGION_RESEARCH - -var/global/const/access_network_admin = "ACCESS_NETWORK_ADMIN" -/datum/access/network_admin - id = access_network_admin - desc = "Network Administration" - region = ACCESS_REGION_RESEARCH - -var/global/const/access_surgery = "ACCESS_SURGERY" //45 -/datum/access/surgery - id = access_surgery - desc = "Surgery" - region = ACCESS_REGION_MEDBAY - -var/global/const/access_research = "ACCESS_RESEARCH" //47 -/datum/access/research - id = access_research - desc = "Science" - region = ACCESS_REGION_RESEARCH - -var/global/const/access_mining = "ACCESS_MINING" //48 -/datum/access/mining - id = access_mining - desc = "Mining" - region = ACCESS_REGION_SUPPLY - -var/global/const/access_mining_office = "ACCESS_MINING_OFFICE" //49 -/datum/access/mining_office - id = access_mining_office - desc = "Mining Office" - access_type = ACCESS_TYPE_NONE - -var/global/const/access_mailsorting = "ACCESS_SORTING" //50 -/datum/access/mailsorting - id = access_mailsorting - desc = "Cargo Office" - region = ACCESS_REGION_SUPPLY - -var/global/const/access_heads_vault = "ACCESS_VAULT" //53 -/datum/access/heads_vault - id = access_heads_vault - desc = "Main Vault" - region = ACCESS_REGION_COMMAND - -var/global/const/access_mining_station = "ACCESS_MINING_EVA" //54 -/datum/access/mining_station - id = access_mining_station - desc = "Mining EVA" - region = ACCESS_REGION_SUPPLY - -var/global/const/access_xenobiology = "ACCESS_XENOBIO" //55 -/datum/access/xenobiology - id = access_xenobiology - desc = "Xenobiology Lab" - region = ACCESS_REGION_RESEARCH - -var/global/const/access_ce = "ACCESS_CHIEF_ENGINEER" //56 -/datum/access/ce - id = access_ce - desc = "Chief Engineer" - region = ACCESS_REGION_ENGINEERING - -var/global/const/access_hop = "ACCESS_HEAD_OF_PERSONNEL" //57 -/datum/access/hop - id = access_hop - desc = "Head of Personnel" - region = ACCESS_REGION_COMMAND - -var/global/const/access_hos = "ACCESS_HEAD_OF_SECURITY" //58 -/datum/access/hos - id = access_hos - desc = "Head of Security" - region = ACCESS_REGION_SECURITY - -var/global/const/access_RC_announce = "ACCESS_REQUEST_ANNOUCE" //Request console announcements 59 -/datum/access/RC_announce - id = access_RC_announce - desc = "RC Announcements" - region = ACCESS_REGION_COMMAND - -var/global/const/access_keycard_auth = "ACCESS_KEYCARD_AUTH" //Used for events which require at least two people to confirm them 60 -/datum/access/keycard_auth - id = access_keycard_auth - desc = "Keycode Auth. Device" - region = ACCESS_REGION_COMMAND - -var/global/const/access_tcomsat ="ACCESS_TELECOMS" // has access to the entire telecomms satellite / machinery 61 -/datum/access/tcomsat - id = access_tcomsat - desc = "Telecommunications" - region = ACCESS_REGION_COMMAND - -var/global/const/access_gateway = "ACCESS_GATEWAY" //62 -/datum/access/gateway - id = access_gateway - desc = "Gateway" - region = ACCESS_REGION_COMMAND - -var/global/const/access_sec_doors = "ACCESS_SEC_DOORS" // Security front doors //63 -/datum/access/sec_doors - id = access_sec_doors - desc = "Security" - region = ACCESS_REGION_SECURITY - -var/global/const/access_psychiatrist = "ACCESS_PSYCHIATRIST" // Psychiatrist's office 64 -/datum/access/psychiatrist - id = access_psychiatrist - desc = "Counselor's Office" - region = ACCESS_REGION_MEDBAY - -var/global/const/access_xenoarch = "ACCESS_XENOARCH" //65 -/datum/access/xenoarch - id = access_xenoarch - desc = "Xenoarchaeology" - region = ACCESS_REGION_RESEARCH - -var/global/const/access_medical_equip = "ACCESS_MEDICAL_EQUIP" //66 -/datum/access/medical_equip - id = access_medical_equip - desc = "Medical Equipment" - region = ACCESS_REGION_MEDBAY - -var/global/const/access_heads = "ACCESS_HEADS" //67 -/datum/access/heads - id = access_heads - desc = "Command" - region = ACCESS_REGION_COMMAND - -var/global/const/access_research_storage = "ACCESS_RESEARCH_STORAGE" -/datum/access/research_storage - id = access_research_storage - desc = "Science Storage" - region = ACCESS_REGION_RESEARCH - -/****************** -* Central Command * -******************/ -var/global/const/access_cent_general = "ACCESS_CENT_GENERAL" //101 -/datum/access/cent_general - id = access_cent_general - desc = "Code Grey" - access_type = ACCESS_TYPE_CENTCOM - -var/global/const/access_cent_thunder = "ACCESS_CENT_THUNDERDOME" //102 -/datum/access/cent_thunder - id = access_cent_thunder - desc = "Code Yellow" - access_type = ACCESS_TYPE_CENTCOM - -var/global/const/access_cent_specops = "ACCESS_CENT_SPECOPS" //103 -/datum/access/cent_specops - id = access_cent_specops - desc = "Code Black" - access_type = ACCESS_TYPE_CENTCOM - -var/global/const/access_cent_medical = "ACCESS_CENT_MEDBAY" //104 -/datum/access/cent_medical - id = access_cent_medical - desc = "Code White" - access_type = ACCESS_TYPE_CENTCOM - -var/global/const/access_cent_living = "ACCESS_CENT_LIVING" //105 -/datum/access/cent_living - id = access_cent_living - desc = "Code Green" - access_type = ACCESS_TYPE_CENTCOM - -var/global/const/access_cent_storage = "ACCESS_CENT_STORAGE" //106 -/datum/access/cent_storage - id = access_cent_storage - desc = "Code Orange" - access_type = ACCESS_TYPE_CENTCOM - -var/global/const/access_cent_teleporter = "ACCESS_CENT_TELEPORTER" //107 -/datum/access/cent_teleporter - id = access_cent_teleporter - desc = "Code Blue" - access_type = ACCESS_TYPE_CENTCOM - -var/global/const/access_cent_creed = "ACCESS_CENT_CREED" //108 -/datum/access/cent_creed - id = access_cent_creed - desc = "Code Silver" - access_type = ACCESS_TYPE_CENTCOM - -var/global/const/access_cent_captain = "ACCESS_CENT_CAPTAIN" //109 -/datum/access/cent_captain - id = access_cent_captain - desc = "Code Gold" - access_type = ACCESS_TYPE_CENTCOM - -/*************** -* Antag access * -***************/ -var/global/const/access_syndicate = "ACCESS_SYNDICATE" //150 -/datum/access/syndicate - id = access_syndicate - desc = "Syndicate" - access_type = ACCESS_TYPE_SYNDICATE - -/******* -* Misc * -*******/ -var/global/const/access_synth = "ACCESS_SYNTH" //199 -/datum/access/synthetic - id = access_synth - desc = "Synthetic" - access_type = ACCESS_TYPE_NONE - -var/global/const/access_crate_cash = "ACCESS_MERCHANT_CASH" //300 -/datum/access/crate_cash - id = access_crate_cash - desc = "Crate cash" - access_type = ACCESS_TYPE_NONE - -var/global/const/access_merchant = "ACCESS_MERCHANT" //301 -/datum/access/merchant - id = access_merchant - desc = "Merchant" - access_type = ACCESS_TYPE_NONE diff --git a/code/game/jobs/job/assistant.dm b/code/game/jobs/job/assistant.dm deleted file mode 100644 index 096e6fbf7dc8f..0000000000000 --- a/code/game/jobs/job/assistant.dm +++ /dev/null @@ -1,15 +0,0 @@ -/datum/job/assistant - title = "Assistant" - department = "Civilian" - department_flag = CIV - - total_positions = -1 - spawn_positions = -1 - supervisors = "absolutely everyone" - economic_power = 1 - access = list() - alt_titles = list("Technical Assistant","Medical Intern","Research Assistant","Visitor") - outfit_type = /decl/hierarchy/outfit/job/assistant - -/datum/job/assistant/get_access() - return list() diff --git a/code/game/jobs/job/captain.dm b/code/game/jobs/job/captain.dm deleted file mode 100644 index c279333bc7027..0000000000000 --- a/code/game/jobs/job/captain.dm +++ /dev/null @@ -1,48 +0,0 @@ -var/global/datum/announcement/minor/captain_announcement = new(do_newscast = 1) - -/datum/job/captain - title = "Captain" - department = "Command" - head_position = 1 - department_flag = COM - - total_positions = 1 - spawn_positions = 1 - supervisors = "company officials and Corporate Regulations" - selection_color = "#1d1d4f" - req_admin_notify = 1 - access = list() - minimal_player_age = 14 - economic_power = 20 - - ideal_character_age = 70 // Old geezer captains ftw - outfit_type = /decl/hierarchy/outfit/job/captain - -/datum/job/captain/equip(var/mob/living/carbon/human/H) - . = ..() - if(.) - H.implant_loyalty(src) - -/datum/job/captain/get_access() - return get_all_station_access() - -/datum/job/hop - title = "Head of Personnel" - head_position = 1 - department_flag = COM|CIV - - total_positions = 1 - spawn_positions = 1 - supervisors = "the captain" - selection_color = "#2f2f7f" - req_admin_notify = 1 - minimal_player_age = 14 - economic_power = 10 - ideal_character_age = 50 - access = list(access_security, access_sec_doors, access_brig, access_forensics_lockers, access_heads, - access_medical, access_engine, access_change_ids, access_ai_upload, access_eva, access_bridge, - access_all_personal_lockers, access_maint_tunnels, access_janitor, access_construction, access_morgue, - access_crematorium, access_kitchen, access_cargo, access_cargo_bot, access_mailsorting, access_qm, access_hydroponics, access_lawyer, - 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_research_storage) - outfit_type = /decl/hierarchy/outfit/job/hop diff --git a/code/game/jobs/job/civilian.dm b/code/game/jobs/job/civilian.dm deleted file mode 100644 index 4e91290d2eb4f..0000000000000 --- a/code/game/jobs/job/civilian.dm +++ /dev/null @@ -1,97 +0,0 @@ -/datum/job/chef - title = "Chef" - department = "Service" - department_flag = SRV - total_positions = 2 - spawn_positions = 2 - supervisors = "the head of personnel" - access = list(access_hydroponics, access_kitchen) - alt_titles = list("Cook") - outfit_type = /decl/hierarchy/outfit/job/service/chef - -/datum/job/hydro - title = "Gardener" - department = "Service" - department_flag = SRV - total_positions = 2 - spawn_positions = 1 - supervisors = "the head of personnel" - access = list(access_hydroponics, access_kitchen) - alt_titles = list("Hydroponicist") - outfit_type = /decl/hierarchy/outfit/job/service/gardener - -//Cargo -/datum/job/qm - title = "Quartermaster" - department = "Supply" - department_flag = SUP - total_positions = 1 - spawn_positions = 1 - supervisors = "the head of personnel" - economic_power = 5 - access = list(access_maint_tunnels, access_mailsorting, access_cargo, access_cargo_bot, access_qm, access_mining, access_mining_station) - minimal_player_age = 3 - ideal_character_age = 40 - outfit_type = /decl/hierarchy/outfit/job/cargo/qm - -/datum/job/cargo_tech - title = "Cargo Technician" - department = "Supply" - department_flag = SUP - total_positions = 2 - spawn_positions = 2 - supervisors = "the quartermaster and the head of personnel" - access = list(access_maint_tunnels, access_mailsorting, access_cargo, access_cargo_bot, access_qm, access_mining, access_mining_station) - outfit_type = /decl/hierarchy/outfit/job/cargo/cargo_tech - -/datum/job/mining - title = "Shaft Miner" - department = "Supply" - department_flag = SUP - total_positions = 3 - spawn_positions = 3 - supervisors = "the quartermaster and the head of personnel" - economic_power = 5 - access = list(access_maint_tunnels, access_mailsorting, access_cargo, access_cargo_bot, access_qm, access_mining, access_mining_station) - alt_titles = list("Drill Technician","Prospector") - outfit_type = /decl/hierarchy/outfit/job/cargo/mining - -/datum/job/janitor - title = "Janitor" - department = "Service" - department_flag = SRV - total_positions = 1 - spawn_positions = 1 - supervisors = "the head of personnel" - access = list(access_janitor, access_maint_tunnels, access_engine, access_research, access_sec_doors, access_medical) - alt_titles = list("Custodian","Sanitation Technician") - outfit_type = /decl/hierarchy/outfit/job/service/janitor - -//More or less assistants -/datum/job/librarian - title = "Librarian" - department = "Civilian" - department_flag = CIV - total_positions = 1 - spawn_positions = 1 - supervisors = "the head of personnel" - access = list(access_library, access_maint_tunnels) - alt_titles = list("Journalist") - outfit_type = /decl/hierarchy/outfit/job/librarian - -/datum/job/lawyer - title = "Internal Affairs Agent" - department = "Support" - department_flag = SPT - total_positions = 2 - spawn_positions = 2 - supervisors = "company officials and Corporate Regulations" - economic_power = 7 - access = list(access_lawyer, access_sec_doors, access_maint_tunnels, access_bridge) - minimal_player_age = 10 - outfit_type = /decl/hierarchy/outfit/job/internal_affairs_agent - -/datum/job/lawyer/equip(var/mob/living/carbon/human/H) - . = ..() - if(.) - H.implant_loyalty(H) diff --git a/code/game/jobs/job/civilian_chaplain.dm b/code/game/jobs/job/civilian_chaplain.dm deleted file mode 100644 index a7ed7be27b4e8..0000000000000 --- a/code/game/jobs/job/civilian_chaplain.dm +++ /dev/null @@ -1,121 +0,0 @@ -//Due to how large this one is it gets its own file -/datum/job/chaplain - title = "Chaplain" - department = "Civilian" - department_flag = CIV - - total_positions = 1 - spawn_positions = 1 - supervisors = "the head of personnel" - access = list(access_morgue, access_chapel_office, access_crematorium, access_maint_tunnels) - outfit_type = /decl/hierarchy/outfit/job/chaplain - -/datum/job/chaplain/equip(var/mob/living/carbon/human/H, var/alt_title, var/ask_questions = TRUE) - . = ..() - if(!.) - return - if(!ask_questions) - return - - var/obj/item/storage/bible/B = locate(/obj/item/storage/bible) in H - if(!B) - return - - spawn(0) - var/religion_name = "Christianity" - var/new_religion = sanitize(input(H, "You are the crew services officer. Would you like to change your religion? Default is Christianity, in SPACE.", "Name change", religion_name), MAX_NAME_LEN) - - if (!new_religion) - new_religion = religion_name - switch(lowertext(new_religion)) - if("christianity") - B.SetName(pick("The Holy Bible","The Dead Sea Scrolls")) - if("satanism") - B.SetName("The Unholy Bible") - if("cthulu") - B.SetName("The Necronomicon") - if("islam") - B.SetName("Quran") - if("scientology") - B.SetName(pick("The Biography of L. Ron Hubbard","Dianetics")) - if("chaos") - B.SetName("The Book of Lorgar") - if("imperium") - B.SetName("Uplifting Primer") - if("toolboxia") - B.SetName("Toolbox Manifesto") - if("homosexuality") - B.SetName("Guys Gone Wild") - if("science") - B.SetName(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.SetName("The Holy Book of [new_religion]") - - spawn(1) - var/deity_name = "Space Jesus" - var/new_deity = sanitize(input(H, "Would you like to change your deity? Default is Space Jesus.", "Name change", deity_name), MAX_NAME_LEN) - - if ((length(new_deity) == 0) || (new_deity == "Space Jesus") ) - new_deity = deity_name - B.deity_name = new_deity - - var/accepted = 0 - var/outoftime = 0 - spawn(200) // 20 seconds to choose - outoftime = 1 - var/new_book_style = "Bible" - - while(!accepted) - if(!B) break // prevents possible runtime errors - new_book_style = input(H,"Which bible style would you like?") in list("Bible", "Koran", "Scrapbook", "Creeper", "White Bible", "Holy Light", "Athiest", "Tome", "The King in Yellow", "Ithaqua", "Scientology", "the bible melts", "Necronomicon") - switch(new_book_style) - if("Koran") - B.icon_state = "koran" - B.item_state = "koran" - if("Scrapbook") - B.icon_state = "scrapbook" - B.item_state = "scrapbook" - if("Creeper") - B.icon_state = "creeper" - B.item_state = "syringe_kit" - if("White Bible") - B.icon_state = "white" - B.item_state = "syringe_kit" - if("Holy Light") - B.icon_state = "holylight" - B.item_state = "syringe_kit" - if("Athiest") - B.icon_state = "athiest" - B.item_state = "syringe_kit" - if("Tome") - B.icon_state = "tome" - B.item_state = "syringe_kit" - if("The King in Yellow") - B.icon_state = "kingyellow" - B.item_state = "kingyellow" - if("Ithaqua") - B.icon_state = "ithaqua" - B.item_state = "ithaqua" - if("Scientology") - B.icon_state = "scientology" - B.item_state = "scientology" - if("the bible melts") - B.icon_state = "melted" - B.item_state = "melted" - if("Necronomicon") - B.icon_state = "necronomicon" - B.item_state = "necronomicon" - else - B.icon_state = "bible" - B.item_state = "bible" - - H.update_inv_l_hand() // so that it updates the bible's item_state in his hand - - switch(input(H,"Look at your bible - is this what you want?") in list("Yes","No")) - if("Yes") - accepted = 1 - if("No") - if(outoftime) - to_chat(H, "Welp, out of time, buddy. You're stuck. Next time choose faster.") - accepted = 1 - return 1 diff --git a/code/game/jobs/job/engineering.dm b/code/game/jobs/job/engineering.dm deleted file mode 100644 index d01ff21288a20..0000000000000 --- a/code/game/jobs/job/engineering.dm +++ /dev/null @@ -1,38 +0,0 @@ -/datum/job/chief_engineer - title = "Chief Engineer" - head_position = 1 - department = "Engineering" - department_flag = ENG|COM - - total_positions = 1 - spawn_positions = 1 - supervisors = "the captain" - selection_color = "#7f6e2c" - req_admin_notify = 1 - economic_power = 10 - - ideal_character_age = 50 - - - access = list(access_engine, access_engine_equip, access_tech_storage, access_maint_tunnels, access_heads, - access_teleporter, access_external_airlocks, access_atmospherics, access_emergency_storage, access_eva, - access_bridge, access_construction, access_sec_doors, - access_ce, access_RC_announce, access_keycard_auth, access_tcomsat, access_ai_upload) - minimal_player_age = 14 - outfit_type = /decl/hierarchy/outfit/job/engineering/chief_engineer - -/datum/job/engineer - title = "Engineer" - department = "Engineering" - department_flag = ENG - - total_positions = 8 - spawn_positions = 7 - supervisors = "the chief engineer" - selection_color = "#5b4d20" - economic_power = 5 - minimal_player_age = 7 - access = list(access_eva, access_engine, access_engine_equip, access_tech_storage, access_maint_tunnels, access_external_airlocks, access_construction, access_atmospherics, access_emergency_storage) - alt_titles = list("Maintenance Technician","Engine Technician","Electrician", - "Atmospheric Technician" = /decl/hierarchy/outfit/job/engineering/atmos) - outfit_type = /decl/hierarchy/outfit/job/engineering/engineer diff --git a/code/game/jobs/job/job.dm b/code/game/jobs/job/job.dm deleted file mode 100644 index 7deef395a7e4b..0000000000000 --- a/code/game/jobs/job/job.dm +++ /dev/null @@ -1,487 +0,0 @@ -/datum/job - - //The name of the job - var/title = "NOPE" - var/list/access = list() // The job's default access tokens - var/list/software_on_spawn = list() // Defines the software files that spawn on tablets and labtops - var/department_flag = 0 - var/total_positions = 0 // How many players can be this job - var/spawn_positions = 0 // How many players can spawn in as this job - var/current_positions = 0 // How many players have this job - var/availablity_chance = 100 // Percentage chance job is available each round - - var/supervisors = null // Supervisors, who this person answers to directly - var/selection_color = "#515151" // Selection screen color - var/list/alt_titles // List of alternate titles, if any and any potential alt. outfits as assoc values. - var/req_admin_notify // If this is set to 1, a text is printed to the player when jobs are assigned, telling him that he should let admins know that he has to disconnect. - var/minimal_player_age = 0 // If you have use_age_restriction_for_jobs config option enabled and the database set up, this option will add a requirement for players to be at least minimal_player_age days old. (meaning they first signed in at least that many days before.) - var/department = null // Does this position have a department tag? - var/head_position = 0 // Is this position Command? - var/minimum_character_age // List of species = age, if species is not here, it's auto-pass - var/ideal_character_age = 30 - var/create_record = 1 // Do we announce/make records for people who spawn on this job? - var/is_semi_antagonist = FALSE // Whether or not this job is given semi-antagonist status. - var/account_allowed = 1 // Does this job type come with a station account? - var/economic_power = 2 // With how much does this job modify the initial account amount? - - var/outfit_type // The outfit the employee will be dressed in, if any - - var/loadout_allowed = TRUE // Whether or not loadout equipment is allowed and to be created when joining. - var/list/allowed_branches // For maps using branches and ranks, also expandable for other purposes - var/list/allowed_ranks // Ditto - - var/announced = TRUE //If their arrival is announced on radio - var/latejoin_at_spawnpoints //If this job should use roundstart spawnpoints for latejoin (offstation jobs etc) - - var/hud_icon //icon used for Sec HUD overlay - - var/min_skill = list() //Minimum skills allowed for the job. List should contain skill (as in /decl/hierarchy/skill path), with values which are numbers. - var/max_skill = list() //Maximum skills allowed for the job. - var/skill_points = 16 //The number of unassigned skill points the job comes with (on top of the minimum skills). - var/no_skill_buffs = FALSE //Whether skills can be buffed by age/species modifiers. - var/available_by_default = TRUE - - var/list/possible_goals - var/min_goals = 0 - var/max_goals = 5 - - var/defer_roundstart_spawn = FALSE // If true, the job will be put off until all other jobs have been populated. - var/list/species_branch_rank_cache_ = list() - var/list/psi_faculties // Starting psi faculties, if any. - var/psi_latency_chance = 0 // Chance of an additional psi latency, if any. - var/give_psionic_implant_on_join = TRUE // If psionic, will be implanted for control. - - var/use_species_whitelist // If set, restricts the job to players with the given species whitelist. This does NOT restrict characters joining as the job to the species itself. - - var/required_language - -/datum/job/New() - - if(prob(100-availablity_chance)) //Close positions, blah blah. - total_positions = 0 - spawn_positions = 0 - - if(!hud_icon) - hud_icon = "hud[ckey(title)]" - - ..() - -/datum/job/dd_SortValue() - return title - -/datum/job/proc/equip(var/mob/living/carbon/human/H, var/alt_title, var/datum/mil_branch/branch, var/datum/mil_rank/grade) - - if (required_language) - H.add_language(required_language) - H.set_default_language(all_languages[required_language]) - - if (!H.languages.len) - H.add_language(LANGUAGE_SPACER) - H.set_default_language(all_languages[LANGUAGE_SPACER]) - - if(psi_latency_chance && prob(psi_latency_chance) && H.species.type == /datum/species/human && !psi_faculties) - H.set_psi_rank(pick(PSI_COERCION, PSI_REDACTION, PSI_ENERGISTICS, PSI_PSYCHOKINESIS), 1, defer_update = TRUE) - if(islist(psi_faculties)) - for(var/psi in psi_faculties) - H.set_psi_rank(psi, psi_faculties[psi], take_larger = TRUE, defer_update = TRUE) - if(H.psi) - H.psi.update() - if(give_psionic_implant_on_join) - var/obj/item/implant/psi_control/imp = new - imp.implanted(H) - imp.forceMove(H) - imp.imp_in = H - imp.implanted = TRUE - var/obj/item/organ/external/affected = H.get_organ(BP_HEAD) - if(affected) - affected.implants += imp - imp.part = affected - to_chat(H, SPAN_DANGER("As a registered psionic, you are fitted with a psi-dampening control implant. Using psi-power while the implant is active will result in neural shocks and your violation being reported.")) - - var/decl/hierarchy/outfit/outfit = get_outfit(H, alt_title, branch, grade) - if(outfit) . = outfit.equip(H, title, alt_title) - -/datum/job/proc/get_outfit(var/mob/living/carbon/human/H, var/alt_title, var/datum/mil_branch/branch, var/datum/mil_rank/grade) - if(alt_title && alt_titles) - . = alt_titles[alt_title] - if(allowed_branches && branch) - . = allowed_branches[branch.type] || . - if(allowed_ranks && grade) - . = allowed_ranks[grade.type] || . - . = . || outfit_type - . = outfit_by_type(.) - -/datum/job/proc/setup_account(var/mob/living/carbon/human/H) - if(!account_allowed || (H.mind && H.mind.initial_account)) - return - - // Calculate our pay and apply all relevant modifiers. - var/money_amount = 4 * rand(75, 100) * economic_power - - // Get an average economic power for our cultures. - var/culture_mod = 0 - var/culture_count = 0 - for(var/token in H.cultural_info) - var/decl/cultural_info/culture = H.get_cultural_value(token) - if(culture && !isnull(culture.economic_power)) - culture_count++ - culture_mod += culture.economic_power - if(culture_count) - culture_mod /= culture_count - money_amount *= culture_mod - - // Apply other mods. - money_amount *= GLOB.using_map.salary_modifier - money_amount *= 1 + 2 * H.get_skill_value(SKILL_FINANCE)/(SKILL_MAX - SKILL_MIN) - money_amount = round(money_amount) - - if(money_amount <= 0) - return // You are too poor for an account. - - //give them an account in the station database - var/datum/money_account/M = create_account("[H.real_name]'s account", H.real_name, money_amount) - if(H.mind) - var/remembered_info = "" - remembered_info += "Your account number is: #[M.account_number]
      " - remembered_info += "Your account pin is: [M.remote_access_pin]
      " - remembered_info += "Your account funds are: [GLOB.using_map.local_currency_name_short][M.money]
      " - - if(M.transaction_log.len) - var/datum/transaction/T = M.transaction_log[1] - remembered_info += "Your account was created: [T.time], [T.date] at [T.get_source_name()]
      " - H.StoreMemory(remembered_info, /decl/memory_options/system) - H.mind.initial_account = M - -// overrideable separately so AIs/borgs can have cardborg hats without unneccessary new()/qdel() -/datum/job/proc/equip_preview(mob/living/carbon/human/H, var/alt_title, var/datum/mil_branch/branch, var/datum/mil_rank/grade, var/additional_skips) - var/decl/hierarchy/outfit/outfit = get_outfit(H, alt_title, branch, grade) - if(!outfit) - return FALSE - . = outfit.equip(H, title, alt_title, OUTFIT_ADJUSTMENT_SKIP_POST_EQUIP|OUTFIT_ADJUSTMENT_SKIP_ID_PDA|additional_skips) - -/datum/job/proc/get_access() - return access.Copy() - -//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) - return (available_in_days(C) == 0) //Available in 0 days = available right now = player is old enough to play. - -/datum/job/proc/available_in_days(client/C) - if(C && config.use_age_restriction_for_jobs && isnull(C.holder) && isnum(C.player_age) && isnum(minimal_player_age)) - return max(0, minimal_player_age - C.player_age) - return 0 - -/datum/job/proc/apply_fingerprints(var/mob/living/carbon/human/target) - if(!istype(target)) - return 0 - for(var/obj/item/item in target.contents) - apply_fingerprints_to_item(target, item) - return 1 - -/datum/job/proc/apply_fingerprints_to_item(var/mob/living/carbon/human/holder, var/obj/item/item) - item.add_fingerprint(holder,1) - if(item.contents.len) - for(var/obj/item/sub_item in item.contents) - apply_fingerprints_to_item(holder, sub_item) - -/datum/job/proc/is_position_available() - return (current_positions < total_positions) || (total_positions == -1) - -/datum/job/proc/has_alt_title(var/mob/H, var/supplied_title, var/desired_title) - return (supplied_title == desired_title) || (H.mind && H.mind.role_alt_title == desired_title) - -/datum/job/proc/is_restricted(var/datum/preferences/prefs, var/feedback) - var/datum/species/S - - if (!is_species_whitelist_allowed(prefs.client, use_species_whitelist)) - S = all_species[use_species_whitelist] - to_chat(feedback, "\An [S] species whitelist is required for [title].") - return TRUE - - if(!isnull(allowed_branches) && (!prefs.branches[title] || !is_branch_allowed(prefs.branches[title]))) - to_chat(feedback, "Wrong branch of service for [title]. Valid branches are: [get_branches()].") - return TRUE - - if(!isnull(allowed_ranks) && (!prefs.ranks[title] || !is_rank_allowed(prefs.branches[title], prefs.ranks[title]))) - to_chat(feedback, "Wrong rank for [title]. Valid ranks in [prefs.branches[title]] are: [get_ranks(prefs.branches[title])].") - return TRUE - - S = all_species[prefs.species] - if(!is_species_allowed(S)) - to_chat(feedback, "Restricted species, [S], for [title].") - return TRUE - - if(LAZYACCESS(minimum_character_age, S.get_bodytype()) && (prefs.age < minimum_character_age[S.get_bodytype()])) - to_chat(feedback, "Not old enough. Minimum character age is [minimum_character_age[S.get_bodytype()]].") - return TRUE - - if(!S.check_background(src, prefs)) - to_chat(feedback, "Incompatible background for [title].") - return TRUE - - return FALSE - -/datum/job/proc/get_join_link(var/client/caller, var/href_string, var/show_invalid_jobs) - if(is_available(caller)) - if(is_restricted(caller.prefs)) - if(show_invalid_jobs) - return "[title][current_positions](Active: [get_active_count()])" - else - return "[title][current_positions](Active: [get_active_count()])" - return "" - -// Only players with the job assigned and AFK for less than 10 minutes count as active -/datum/job/proc/check_is_active(var/mob/M) - return (M.mind && M.client && M.mind.assigned_role == title && M.client.inactivity <= 10 * 60 * 10) - -/datum/job/proc/get_active_count() - var/active = 0 - for(var/mob/M in GLOB.player_list) - if(check_is_active(M)) - active++ - return active - -/datum/job/proc/is_species_allowed(var/datum/species/S) - if(GLOB.using_map.is_species_job_restricted(S, src)) - return FALSE - // We also make sure that there is at least one valid branch-rank combo for the species. - if(!allowed_branches || !GLOB.using_map || !(GLOB.using_map.flags & MAP_HAS_BRANCH)) - return TRUE - return LAZYLEN(get_branch_rank(S)) - -/datum/job/proc/is_species_whitelist_allowed(client/C) - if (isnull(use_species_whitelist)) - return TRUE - if (!C?.mob) - log_debug("Failed to find a valid client/mob for whitelist checking - Job `[src]` - Client `[C]` - Mob `[C?.mob]`") - return FALSE - return is_species_whitelisted(C.mob, use_species_whitelist) - -// Don't use if the map doesn't use branches but jobs do. -/datum/job/proc/get_branch_rank(var/datum/species/S) - . = species_branch_rank_cache_[S] - if(.) - return - - species_branch_rank_cache_[S] = list() - . = species_branch_rank_cache_[S] - - var/spawn_branches = GLOB.mil_branches.spawn_branches(S) - for(var/branch_type in allowed_branches) - var/datum/mil_branch/branch = GLOB.mil_branches.get_branch_by_type(branch_type) - if(branch.name in spawn_branches) - if(!allowed_ranks || !(GLOB.using_map.flags & MAP_HAS_RANK)) - LAZYADD(., branch.name) - continue // Screw this rank stuff, we're good. - var/spawn_ranks = branch.spawn_ranks(S) - for(var/rank_type in allowed_ranks) - var/datum/mil_rank/rank = rank_type - if(initial(rank.name) in spawn_ranks) - LAZYADD(.[branch.name], initial(rank.name)) - -/** - * Check if members of the given branch are allowed in the job - * - * This proc should only be used after the global branch list has been initialized. - * - * branch_name - String key for the branch to check - */ -/datum/job/proc/is_branch_allowed(var/branch_name) - if(!allowed_branches || !GLOB.using_map || !(GLOB.using_map.flags & MAP_HAS_BRANCH)) - return 1 - if(branch_name == "None") - return 0 - - var/datum/mil_branch/branch = GLOB.mil_branches.get_branch(branch_name) - - if(!branch) - crash_with("unknown branch \"[branch_name]\" passed to is_branch_allowed()") - return 0 - - if(is_type_in_list(branch, allowed_branches)) - return 1 - else - return 0 - -/** - * Check if people with given rank are allowed in this job - * - * This proc should only be used after the global branch list has been initialized. - * - * branch_name - String key for the branch to which the rank belongs - * rank_name - String key for the rank itself - */ -/datum/job/proc/is_rank_allowed(var/branch_name, var/rank_name) - if(!allowed_ranks || !GLOB.using_map || !(GLOB.using_map.flags & MAP_HAS_RANK)) - return 1 - if(branch_name == "None" || rank_name == "None") - return 0 - - var/datum/mil_rank/rank = GLOB.mil_branches.get_rank(branch_name, rank_name) - - if(!rank) - crash_with("unknown rank \"[rank_name]\" in branch \"[branch_name]\" passed to is_rank_allowed()") - return 0 - - if(is_type_in_list(rank, allowed_ranks)) - return 1 - else - return 0 - -//Returns human-readable list of branches this job allows. -/datum/job/proc/get_branches() - var/list/res = list() - for(var/T in allowed_branches) - var/datum/mil_branch/B = GLOB.mil_branches.get_branch_by_type(T) - res += B.name - return english_list(res) - -//Same as above but ranks -/datum/job/proc/get_ranks(branch) - var/list/res = list() - var/datum/mil_branch/B = GLOB.mil_branches.get_branch(branch) - for(var/T in allowed_ranks) - var/datum/mil_rank/R = T - if(B && !(initial(R.name) in B.ranks)) - continue - res |= initial(R.name) - return english_list(res) - -/datum/job/proc/get_description_blurb() - return "" - -/datum/job/proc/get_job_icon() - if(!SSjobs.job_icons[title]) - var/mob/living/carbon/human/dummy/mannequin/mannequin = get_mannequin("#job_icon") - dress_mannequin(mannequin) - mannequin.dir = SOUTH - var/icon/preview_icon = getFlatIcon(mannequin) - preview_icon.Scale(preview_icon.Width() * 2, preview_icon.Height() * 2) // Scaling here to prevent blurring in the browser. - SSjobs.job_icons[title] = preview_icon - return SSjobs.job_icons[title] - -/datum/job/proc/get_unavailable_reasons(var/client/caller) - var/list/reasons = list() - if(jobban_isbanned(caller, title)) - reasons["You are jobbanned."] = TRUE - if(is_semi_antagonist && jobban_isbanned(caller, MODE_MISC_AGITATOR)) - reasons["You are semi-antagonist banned."] = TRUE - if(!player_old_enough(caller)) - reasons["Your player age is too low."] = TRUE - if(!is_position_available()) - reasons["There are no positions left."] = TRUE - if(!isnull(allowed_branches) && (!caller.prefs.branches[title] || !is_branch_allowed(caller.prefs.branches[title]))) - reasons["Your branch of service does not allow it."] = TRUE - else if(!isnull(allowed_ranks) && (!caller.prefs.ranks[title] || !is_rank_allowed(caller.prefs.branches[title], caller.prefs.ranks[title]))) - reasons["Your rank choice does not allow it."] = TRUE - if (!is_species_whitelist_allowed(caller)) - reasons["You do not have the required [use_species_whitelist] species whitelist."] = TRUE - var/datum/species/S = all_species[caller.prefs.species] - if(S) - if(!is_species_allowed(S)) - reasons["Your species choice does not allow it."] = TRUE - if(!S.check_background(src, caller.prefs)) - reasons["Your background choices do not allow it."] = TRUE - if(LAZYLEN(reasons)) - . = reasons - -/datum/job/proc/dress_mannequin(var/mob/living/carbon/human/dummy/mannequin/mannequin) - mannequin.delete_inventory(TRUE) - equip_preview(mannequin, additional_skips = OUTFIT_ADJUSTMENT_SKIP_BACKPACK) - -/datum/job/proc/is_available(var/client/caller) - if(!is_position_available()) - return FALSE - if(jobban_isbanned(caller, title)) - return FALSE - if(is_semi_antagonist && jobban_isbanned(caller, MODE_MISC_AGITATOR)) - return FALSE - if(!player_old_enough(caller)) - return FALSE - return TRUE - -/datum/job/proc/make_position_available() - total_positions++ - -/datum/job/proc/make_position_unavailable() - total_positions = 0 - -/datum/job/proc/get_roundstart_spawnpoint() - var/list/loc_list = list() - for(var/obj/effect/landmark/start/sloc in landmarks_list) - if(sloc.name != title) continue - if(locate(/mob/living) in sloc.loc) continue - loc_list += sloc - if(loc_list.len) - return pick(loc_list) - else - return locate("start*[title]") // use old stype - -/** - * Return appropriate /datum/spawnpoint for given client - * - * Spawnpoint will be the one set in preferences for the client, unless the - * preference is not set, or the preference is not appropriate for the rank, in - * which case a fallback will be selected. - */ -/datum/job/proc/get_spawnpoint(var/client/C) - - if(!C) - CRASH("Null client passed to get_spawnpoint_for() proc!") - - var/mob/H = C.mob - var/spawnpoint = C.prefs.spawnpoint - var/datum/spawnpoint/spawnpos - - if(spawnpoint == DEFAULT_SPAWNPOINT_ID) - spawnpoint = GLOB.using_map.default_spawn - - if(spawnpoint) - if(!(spawnpoint in GLOB.using_map.allowed_spawns)) - if(H) - to_chat(H, "Your chosen spawnpoint ([C.prefs.spawnpoint]) is unavailable for the current map. Spawning you at one of the enabled spawn points instead. To resolve this error head to your character's setup and choose a different spawn point.") - spawnpos = null - else - spawnpos = spawntypes()[spawnpoint] - - if(spawnpos && !spawnpos.check_job_spawning(title)) - if(H) - to_chat(H, "Your chosen spawnpoint ([spawnpos.display_name]) is unavailable for your chosen job ([title]). Spawning you at another spawn point instead.") - spawnpos = null - - if(!spawnpos) - // Step through all spawnpoints and pick first appropriate for job - for(var/spawntype in GLOB.using_map.allowed_spawns) - var/datum/spawnpoint/candidate = spawntypes()[spawntype] - if(candidate.check_job_spawning(title)) - spawnpos = candidate - break - - if(!spawnpos) - // Pick at random from all the (wrong) spawnpoints, just so we have one - warning("Could not find an appropriate spawnpoint for job [title].") - spawnpos = spawntypes()[pick(GLOB.using_map.allowed_spawns)] - - return spawnpos - -/datum/job/proc/post_equip_rank(var/mob/person, var/alt_title) - if(is_semi_antagonist && person.mind) - GLOB.provocateurs.add_antagonist(person.mind) - -/datum/job/proc/get_alt_title_for(var/client/C) - return C.prefs.GetPlayerAltTitle(src) - -/datum/job/proc/clear_slot() - if(current_positions > 0) - current_positions -= 1 - return TRUE - return FALSE - -/datum/job/proc/handle_variant_join(var/mob/living/carbon/human/H, var/alt_title) - return - -/datum/job/proc/get_min_skill(decl/hierarchy/skill/S) - if(min_skill) - . = min_skill[S.type] - if(!.) - . = SKILL_MIN diff --git a/code/game/jobs/job/medical.dm b/code/game/jobs/job/medical.dm deleted file mode 100644 index a0916311194fc..0000000000000 --- a/code/game/jobs/job/medical.dm +++ /dev/null @@ -1,96 +0,0 @@ -/datum/job/cmo - title = "Chief Medical Officer" - head_position = 1 - department = "Medical" - department_flag = MED|COM - - total_positions = 1 - spawn_positions = 1 - supervisors = "the captain" - selection_color = "#026865" - req_admin_notify = 1 - economic_power = 10 - access = list(access_medical, access_medical_equip, access_morgue, access_bridge, access_heads, - access_chemistry, access_virology, access_cmo, access_surgery, access_RC_announce, - access_keycard_auth, access_sec_doors, access_psychiatrist, access_eva, access_maint_tunnels, access_external_airlocks) - - minimal_player_age = 14 - ideal_character_age = 50 - outfit_type = /decl/hierarchy/outfit/job/medical/cmo - -/datum/job/doctor - title = "Medical Doctor" - department = "Medical" - department_flag = MED - - minimal_player_age = 3 - total_positions = 5 - spawn_positions = 3 - supervisors = "the chief medical officer" - selection_color = "#013d3b" - economic_power = 7 - access = list(access_medical, access_medical_equip, access_morgue, access_surgery, access_chemistry, access_virology) - alt_titles = list( - "Surgeon" = /decl/hierarchy/outfit/job/medical/doctor/surgeon, - "Emergency Physician" = /decl/hierarchy/outfit/job/medical/doctor/emergency_physician, - "Nurse" = /decl/hierarchy/outfit/job/medical/doctor/nurse, - "Virologist" = /decl/hierarchy/outfit/job/medical/doctor/virologist) - outfit_type = /decl/hierarchy/outfit/job/medical/doctor - -//Chemist is a medical job damnit //YEAH FUCK YOU SCIENCE -Pete //Guys, behave -Erro -/datum/job/chemist - title = "Pharmacist" - department = "Medical" - department_flag = MED - - minimal_player_age = 7 - total_positions = 2 - spawn_positions = 2 - supervisors = "the chief medical officer" - selection_color = "#013d3b" - economic_power = 5 - access = list(access_medical, access_medical_equip, access_morgue, access_surgery, access_chemistry, access_virology) - outfit_type = /decl/hierarchy/outfit/job/medical/chemist - -/datum/job/geneticist - title = "Geneticist" - department = "Medical" - department_flag = MED - - total_positions = 0 - spawn_positions = 0 - minimal_player_age = 7 - supervisors = "the Chief Medical Officer and Chief Science Officer" - selection_color = "#013d3b" - economic_power = 7 - access = list(access_medical, access_morgue, access_surgery, access_chemistry, access_virology, access_research) - outfit_type = /decl/hierarchy/outfit/job/medical/geneticist - -/datum/job/psychiatrist - title = "Psychiatrist" - department = "Medical" - department_flag = MED - - total_positions = 1 - spawn_positions = 1 - economic_power = 5 - minimal_player_age = 3 - supervisors = "the chief medical officer" - selection_color = "#013d3b" - access = list(access_medical, access_medical_equip, access_morgue, access_surgery, access_chemistry, access_virology, access_psychiatrist) - outfit_type = /decl/hierarchy/outfit/job/medical/psychiatrist - -/datum/job/Paramedic - title = "Paramedic" - department = "Medical" - department_flag = MED - - total_positions = 2 - spawn_positions = 2 - supervisors = "the chief medical officer" - selection_color = "#013d3b" - economic_power = 4 - minimal_player_age = 7 - access = list(access_medical, access_medical_equip, access_morgue, access_surgery, access_chemistry, access_virology, access_eva, access_maint_tunnels, access_external_airlocks, access_psychiatrist) - alt_titles = list("Emergency Medical Technician" = /decl/hierarchy/outfit/job/medical/paramedic/emt) - outfit_type = /decl/hierarchy/outfit/job/medical/paramedic diff --git a/code/game/jobs/job/science.dm b/code/game/jobs/job/science.dm deleted file mode 100644 index 2f8e842a51d84..0000000000000 --- a/code/game/jobs/job/science.dm +++ /dev/null @@ -1,64 +0,0 @@ -/datum/job/rd - title = "Chief Science Officer" - head_position = 1 - department = "Science" - department_flag = COM|SCI - - total_positions = 1 - spawn_positions = 1 - supervisors = "the captain" - selection_color = "#ad6bad" - req_admin_notify = 1 - economic_power = 15 - access = list(access_rd, access_bridge, access_tox, access_morgue, - access_tox_storage, access_teleporter, access_sec_doors, access_heads, - access_research, access_robotics, access_xenobiology, access_ai_upload, access_tech_storage, - access_RC_announce, access_keycard_auth, access_tcomsat, access_gateway, access_xenoarch, access_network, access_network_admin, access_research_storage) - minimal_player_age = 14 - ideal_character_age = 50 - outfit_type = /decl/hierarchy/outfit/job/science/rd - -/datum/job/scientist - title = "Scientist" - department = "Science" - department_flag = SCI - - total_positions = 5 - spawn_positions = 3 - supervisors = "the Chief Science Officer" - selection_color = "#633d63" - economic_power = 7 - access = list(access_robotics, access_tox, access_tox_storage, access_research, access_xenobiology, access_xenoarch, access_network, access_research_storage) - alt_titles = list("Xenoarcheologist", "Anomalist", "Phoron Researcher") - minimal_player_age = 7 - outfit_type = /decl/hierarchy/outfit/job/science/scientist - -/datum/job/xenobiologist - title = "Xenobiologist" - department = "Science" - department_flag = SCI - - total_positions = 3 - spawn_positions = 2 - supervisors = "the Chief Science Officer" - selection_color = "#633d63" - economic_power = 7 - access = list(access_robotics, access_tox, access_tox_storage, access_research, access_xenobiology, access_hydroponics, access_research_storage) - alt_titles = list("Xenobotanist") - minimal_player_age = 7 - outfit_type = /decl/hierarchy/outfit/job/science/xenobiologist - -/datum/job/roboticist - title = "Roboticist" - department = "Science" - department_flag = SCI - - total_positions = 2 - spawn_positions = 2 - supervisors = "the Chief Science Officer" - selection_color = "#633d63" - economic_power = 5 - access = list(access_robotics, access_tox, access_tox_storage, access_tech_storage, access_morgue, access_research, access_network) //As a job that handles so many corpses, it makes sense for them to have morgue access. - alt_titles = list("Biomechanical Engineer","Mechatronic Engineer") - minimal_player_age = 3 - outfit_type = /decl/hierarchy/outfit/job/science/roboticist diff --git a/code/game/jobs/job/security.dm b/code/game/jobs/job/security.dm deleted file mode 100644 index 2f1d6985656e6..0000000000000 --- a/code/game/jobs/job/security.dm +++ /dev/null @@ -1,67 +0,0 @@ -/datum/job/hos - title = "Head of Security" - head_position = 1 - department = "Security" - department_flag = SEC|COM - - total_positions = 1 - spawn_positions = 1 - supervisors = "the captain" - selection_color = "#8e2929" - req_admin_notify = 1 - economic_power = 10 - access = list(access_security, access_eva, access_sec_doors, access_brig, access_armory, access_heads, - 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_bridge, access_hos, access_RC_announce, access_keycard_auth, access_gateway, access_external_airlocks) - minimal_player_age = 14 - outfit_type = /decl/hierarchy/outfit/job/security/hos - -/datum/job/hos/equip(var/mob/living/carbon/human/H) - . = ..() - if(.) - H.implant_loyalty(H) - -/datum/job/warden - title = "Warden" - department = "Security" - department_flag = SEC - - total_positions = 1 - spawn_positions = 1 - supervisors = "the head of security" - selection_color = "#601c1c" - economic_power = 5 - access = list(access_security, access_eva, access_sec_doors, access_brig, access_armory, access_maint_tunnels, access_morgue, access_external_airlocks) - minimal_player_age = 7 - outfit_type = /decl/hierarchy/outfit/job/security/warden - -/datum/job/detective - title = "Detective" - department = "Security" - department_flag = SEC - - total_positions = 2 - spawn_positions = 2 - supervisors = "the head of security" - selection_color = "#601c1c" - alt_titles = list("Forensic Technician" = /decl/hierarchy/outfit/job/security/detective/forensic) - economic_power = 5 - access = list(access_security, access_sec_doors, access_forensics_lockers, access_morgue, access_maint_tunnels) - minimal_player_age = 7 - outfit_type = /decl/hierarchy/outfit/job/security/detective - -/datum/job/officer - title = "Security Officer" - department = "Security" - department_flag = SEC - - total_positions = 4 - spawn_positions = 4 - supervisors = "the head of security" - selection_color = "#601c1c" - alt_titles = list("Junior Officer") - economic_power = 4 - access = list(access_security, access_eva, access_sec_doors, access_brig, access_maint_tunnels, access_morgue, access_external_airlocks) - minimal_player_age = 7 - outfit_type = /decl/hierarchy/outfit/job/security/officer diff --git a/code/game/jobs/job/silicon.dm b/code/game/jobs/job/silicon.dm deleted file mode 100644 index 68faf58fadd95..0000000000000 --- a/code/game/jobs/job/silicon.dm +++ /dev/null @@ -1,77 +0,0 @@ -/datum/job/ai - title = "AI" - department_flag = MSC - - total_positions = 0 // Not used for AI, see is_position_available below and modules/mob/living/silicon/ai/latejoin.dm - spawn_positions = 1 - selection_color = "#3f823f" - supervisors = "your laws" - req_admin_notify = 1 - minimal_player_age = 14 - account_allowed = 0 - economic_power = 0 - outfit_type = /decl/hierarchy/outfit/job/silicon/ai - loadout_allowed = FALSE - hud_icon = "hudblank" - skill_points = 0 - no_skill_buffs = TRUE - min_skill = list( - SKILL_BUREAUCRACY = SKILL_EXPERT, - SKILL_FINANCE = SKILL_EXPERT, - SKILL_EVA = SKILL_EXPERT, - SKILL_MECH = SKILL_EXPERT, - SKILL_PILOT = SKILL_EXPERT, - SKILL_HAULING = SKILL_NONE, - SKILL_COMPUTER = SKILL_PROF, - SKILL_BOTANY = SKILL_EXPERT, - SKILL_COOKING = SKILL_EXPERT, - SKILL_COMBAT = SKILL_EXPERT, - SKILL_WEAPONS = SKILL_EXPERT, - SKILL_FORENSICS = SKILL_EXPERT, - SKILL_CONSTRUCTION = SKILL_EXPERT, - SKILL_ELECTRICAL = SKILL_EXPERT, - SKILL_ATMOS = SKILL_EXPERT, - SKILL_ENGINES = SKILL_EXPERT, - SKILL_DEVICES = SKILL_EXPERT, - SKILL_SCIENCE = SKILL_EXPERT, - SKILL_MEDICAL = SKILL_EXPERT, - SKILL_ANATOMY = SKILL_EXPERT, - SKILL_CHEMISTRY = SKILL_EXPERT - ) - -/datum/job/ai/equip(var/mob/living/carbon/human/H) - if(!H) return 0 - return 1 - -/datum/job/ai/is_position_available() - return (empty_playable_ai_cores.len != 0) - -/datum/job/ai/handle_variant_join(var/mob/living/carbon/human/H, var/alt_title) - return H - -/datum/job/cyborg - title = "Robot" - department_flag = MSC - total_positions = 2 - spawn_positions = 2 - supervisors = "your laws and the AI" - selection_color = "#254c25" - minimal_player_age = 7 - account_allowed = 0 - economic_power = 0 - loadout_allowed = FALSE - outfit_type = /decl/hierarchy/outfit/job/silicon/cyborg - hud_icon = "hudblank" - skill_points = 0 - no_skill_buffs = TRUE - -/datum/job/cyborg/handle_variant_join(var/mob/living/carbon/human/H, var/alt_title) - return H && H.Robotize(SSrobots.get_mob_type_by_title(alt_title || title)) - -/datum/job/cyborg/equip(var/mob/living/carbon/human/H) - return !!H - -/datum/job/cyborg/New() - ..() - alt_titles = SSrobots.robot_alt_titles.Copy() - alt_titles -= title // So the unit test doesn't flip out if a mob or mmi type is declared for our main title. diff --git a/code/game/jobs/whitelist.dm b/code/game/jobs/whitelist.dm deleted file mode 100644 index f9e099e25db3c..0000000000000 --- a/code/game/jobs/whitelist.dm +++ /dev/null @@ -1,101 +0,0 @@ -#define WHITELISTFILE "data/whitelist.txt" - -var/global/list/whitelist = list() - -/hook/startup/proc/loadWhitelist() - if(config.usewhitelist) - load_whitelist() - return 1 - -/proc/load_whitelist() - whitelist = file2list(WHITELISTFILE) - if(!whitelist.len) whitelist = null - -/proc/check_whitelist(mob/M /*, var/rank*/) - if(!whitelist) - return 0 - return ("[M.ckey]" in whitelist) - -var/global/list/alien_whitelist = list() - -/hook/startup/proc/loadAlienWhitelist() - if(config.usealienwhitelist) - if(config.usealienwhitelistSQL) - if(!load_alienwhitelistSQL()) - to_world_log("Could not load alienwhitelist via SQL") - else - load_alienwhitelist() - return 1 -/proc/load_alienwhitelist() - var/text = file2text("config/alienwhitelist.txt") - if (!text) - log_misc("Failed to load config/alienwhitelist.txt") - return 0 - else - alien_whitelist = splittext(text, "\n") - return 1 -/proc/load_alienwhitelistSQL() - var/DBQuery/query = dbcon_old.NewQuery("SELECT * FROM whitelist") - if(!query.Execute()) - to_world_log(dbcon_old.ErrorMsg()) - return 0 - else - while(query.NextRow()) - var/list/row = query.GetRowData() - if(alien_whitelist[row["ckey"]]) - var/list/A = alien_whitelist[row["ckey"]] - A.Add(row["race"]) - else - alien_whitelist[row["ckey"]] = list(row["race"]) - return 1 - -/proc/is_species_whitelisted(mob/M, var/species_name) - var/datum/species/S = all_species[species_name] - return is_alien_whitelisted(M, S) - -//todo: admin aliens -/proc/is_alien_whitelisted(mob/M, var/species) - if(!M || !species) - return 0 - if (GLOB.skip_allow_lists) - return TRUE - if(!config.usealienwhitelist) - return 1 - if(check_rights(R_ADMIN, 0, M)) - return 1 - - if(istype(species,/datum/language)) - var/datum/language/L = species - if(!(L.flags & (WHITELISTED|RESTRICTED))) - return 1 - return whitelist_lookup(L.name, M.ckey) - - if(istype(species,/datum/species)) - var/datum/species/S = species - if(!(S.spawn_flags & (SPECIES_IS_WHITELISTED|SPECIES_IS_RESTRICTED))) - return 1 - return whitelist_lookup(S.get_bodytype(S), M.ckey) - - return 0 - -/proc/whitelist_lookup(var/item, var/ckey) - if(!alien_whitelist) - return 0 - - if(config.usealienwhitelistSQL) - //SQL Whitelist - if(!(ckey in alien_whitelist)) - return 0; - var/list/whitelisted = alien_whitelist[ckey] - if(lowertext(item) in whitelisted) - return 1 - else - //Config File Whitelist - for(var/s in alien_whitelist) - if(findtext(s,"[ckey] - [item]")) - return 1 - if(findtext(s,"[ckey] - All")) - return 1 - return 0 - -#undef WHITELISTFILE diff --git a/code/game/machinery/CableLayer.dm b/code/game/machinery/CableLayer.dm deleted file mode 100644 index 30e10f8d9291d..0000000000000 --- a/code/game/machinery/CableLayer.dm +++ /dev/null @@ -1,124 +0,0 @@ -/obj/machinery/cablelayer - name = "automatic cable layer" - - icon = 'icons/obj/stationobjs.dmi' - icon_state = "pipe_d" - density = TRUE - var/obj/structure/cable/last_piece - var/obj/item/stack/cable_coil/cable - var/max_cable = 100 - var/on = 0 - -/obj/machinery/cablelayer/New() - cable = new(src) - cable.amount = 100 - ..() - -/obj/machinery/cablelayer/Move(new_turf,M_Dir) - ..() - layCable(new_turf,M_Dir) - -/obj/machinery/cablelayer/physical_attack_hand(mob/user) - if(!cable && !on) - to_chat(user, "\The [src] doesn't have any cable loaded.") - return TRUE - on = !on - user.visible_message("\The [user] [!on?"dea":"a"]ctivates \the [src].", "You switch [src] [on? "on" : "off"]") - return TRUE - -/obj/machinery/cablelayer/attackby(var/obj/item/O as obj, var/mob/user as mob) - if(istype(O, /obj/item/stack/cable_coil)) - - var/result = load_cable(O) - if(!result) - to_chat(user, "\The [src]'s cable reel is full.") - else - to_chat(user, "You load [result] lengths of cable into [src].") - return - - if(isWirecutter(O)) - if(cable && cable.amount) - var/m = round(input(usr,"Please specify the length of cable to cut","Cut cable",min(cable.amount,30)) as num, 1) - m = min(m, cable.amount) - m = min(m, 30) - if(m) - playsound(loc, 'sound/items/Wirecutter.ogg', 50, 1) - use_cable(m) - var/obj/item/stack/cable_coil/CC = new (get_turf(src)) - CC.amount = m - else - to_chat(usr, "There's no more cable on the reel.") - -/obj/machinery/cablelayer/examine(mob/user) - . = ..() - to_chat(user, "\The [src]'s cable reel has [cable.amount] length\s left.") - -/obj/machinery/cablelayer/proc/load_cable(var/obj/item/stack/cable_coil/CC) - if(istype(CC) && CC.amount) - var/cur_amount = cable? cable.amount : 0 - var/to_load = max(max_cable - cur_amount,0) - if(to_load) - to_load = min(CC.amount, to_load) - if(!cable) - cable = new(src) - cable.amount = 0 - cable.amount += to_load - CC.use(to_load) - return to_load - else - return 0 - return - -/obj/machinery/cablelayer/proc/use_cable(amount) - if(!cable || cable.amount<1) - visible_message("A red light flashes on \the [src].") - return - cable.use(amount) - if(QDELETED(cable)) - cable = null - return 1 - -/obj/machinery/cablelayer/proc/reset() - last_piece = null - -/obj/machinery/cablelayer/proc/dismantleFloor(var/turf/new_turf) - if(istype(new_turf, /turf/simulated/floor)) - var/turf/simulated/floor/T = new_turf - if(!T.is_plating()) - T.make_plating(!(T.broken || T.burnt)) - return new_turf.is_plating() - -/obj/machinery/cablelayer/proc/layCable(var/turf/new_turf,var/M_Dir) - if(!on) - return reset() - else - dismantleFloor(new_turf) - if(!istype(new_turf) || !dismantleFloor(new_turf)) - return reset() - var/fdirn = turn(M_Dir,180) - for(var/obj/structure/cable/LC in new_turf) // check to make sure there's not a cable there already - if(LC.d1 == fdirn || LC.d2 == fdirn) - return reset() - if(!use_cable(1)) - return reset() - var/obj/structure/cable/NC = new(new_turf) - NC.cableColor("red") - NC.d1 = 0 - NC.d2 = fdirn - NC.update_icon() - - var/datum/powernet/PN - if(last_piece && last_piece.d2 != M_Dir) - last_piece.d1 = min(last_piece.d2, M_Dir) - last_piece.d2 = max(last_piece.d2, M_Dir) - last_piece.update_icon() - PN = last_piece.powernet - - if(!PN) - PN = new() - PN.add_cable(NC) - NC.mergeConnectedNetworks(NC.d2) - - //NC.mergeConnectedNetworksOnTurf() - last_piece = NC - return 1 diff --git a/code/game/machinery/OpTable.dm b/code/game/machinery/OpTable.dm deleted file mode 100644 index e14001a184d31..0000000000000 --- a/code/game/machinery/OpTable.dm +++ /dev/null @@ -1,178 +0,0 @@ -/obj/machinery/optable - name = "Operating Table" - desc = "Used for advanced medical procedures." - icon = 'icons/obj/surgery.dmi' - icon_state = "table2-idle" - density = TRUE - anchored = TRUE - throwpass = 1 - idle_power_usage = 1 - active_power_usage = 5 - construct_state = /decl/machine_construction/default/panel_closed - uncreated_component_parts = null - stat_immune = 0 - - machine_name = "operating table" - machine_desc = "A sterile and well-lit surface to conduct surgery. Operating tables are the only completely safe surfaces to perform operations. Comes with built-in neural suppressors to anesthetize a patient laying on top of it." - - var/suppressing = FALSE - var/mob/living/carbon/human/victim = null - var/strapped = 0.0 - var/obj/machinery/computer/operating/computer = null - var/obj/machinery/vitals_monitor/connected_monitor = null - -/obj/machinery/optable/Initialize() - . = ..() - for(dir in list(NORTH,EAST,SOUTH,WEST)) - computer = locate(/obj/machinery/computer/operating, get_step(src, dir)) - if (computer) - computer.table = src - break - -/obj/machinery/optable/Destroy() - victim = null - if(connected_monitor) - connected_monitor.update_victim() - connected_monitor.update_optable() - . = ..() - -/obj/machinery/optable/examine(mob/user) - . = ..() - to_chat(user, "The neural suppressors are switched [suppressing ? "on" : "off"].") - -/obj/machinery/optable/ex_act(severity) - - switch(severity) - if(EX_ACT_DEVASTATING) - //SN src = null - qdel(src) - return - if(EX_ACT_HEAVY) - if (prob(50)) - //SN src = null - qdel(src) - return - if(EX_ACT_LIGHT) - if (prob(25)) - src.set_density(0) - -/obj/machinery/optable/attackby(var/obj/item/O, var/mob/user) - if (istype(O, /obj/item/grab)) - var/obj/item/grab/G = O - if(iscarbon(G.affecting) && check_table(G.affecting)) - take_victim(G.affecting,usr) - qdel(O) - return - return ..() - -/obj/machinery/optable/state_transition(var/decl/machine_construction/default/new_state) - . = ..() - if(istype(new_state)) - updateUsrDialog() - -/obj/machinery/optable/physical_attack_hand(var/mob/user) - if(MUTATION_HULK in user.mutations) - visible_message("\The [usr] destroys \the [src]!") - src.set_density(0) - qdel(src) - return TRUE - - if(!victim) - to_chat(user, "There is nobody on \the [src]. It would be pointless to turn the suppressor on.") - return TRUE - - if(user != victim && !suppressing) // Skip checks if you're doing it to yourself or turning it off, this is an anti-griefing mechanic more than anything. - user.visible_message("\The [user] begins switching on \the [src]'s neural suppressor.") - if(!do_after(user, 3 SECONDS, src, DO_PUBLIC_UNIQUE) || !user || !src || user.incapacitated() || !user.Adjacent(src)) - return TRUE - if(!victim) - to_chat(user, "There is nobody on \the [src]. It would be pointless to turn the suppressor on.") - return TRUE - - suppressing = !suppressing - user.visible_message("\The [user] switches [suppressing ? "on" : "off"] \the [src]'s neural suppressor.") - if (victim.stat == UNCONSCIOUS) - to_chat(victim, SPAN_NOTICE(SPAN_BOLD("... [pick("good feeling", "white light", "pain fades away", "safe now")] ..."))) - return TRUE - -/obj/machinery/optable/CanPass(atom/movable/mover, turf/target, height=0, air_group=0) - if(air_group || (height==0)) return 1 - - if(istype(mover) && mover.checkpass(PASS_FLAG_TABLE)) - return 1 - else - return 0 - - -/obj/machinery/optable/MouseDrop_T(mob/target, mob/user) - if (target.loc != loc) - step(target, get_dir(target, loc)) - ..() - -/obj/machinery/optable/proc/check_victim() - if(!victim || !victim.lying || victim.loc != loc) - suppressing = FALSE - victim = null - if(connected_monitor) - connected_monitor.update_victim() - if(locate(/mob/living/carbon/human) in loc) - for(var/mob/living/carbon/human/H in loc) - if(H.lying) - victim = H - if(connected_monitor) - connected_monitor.update_victim(H) - break - icon_state = (victim && victim.pulse()) ? "table2-active" : "table2-idle" - if(victim) - if(suppressing && victim.sleeping < 3) - victim.Sleeping(3 - victim.sleeping) - return 1 - return 0 - -/obj/machinery/optable/Process() - check_victim() - -/obj/machinery/optable/proc/take_victim(mob/living/carbon/C, mob/living/carbon/user as mob) - if (C == user) - user.visible_message("[user] climbs on \the [src].","You climb on \the [src].") - else - visible_message("\The [C] has been laid on \the [src] by [user].") - if (C.client) - C.client.perspective = EYE_PERSPECTIVE - C.client.eye = src - C.Weaken(5) - C.dropInto(loc) - src.add_fingerprint(user) - if(ishuman(C)) - var/mob/living/carbon/human/H = C - src.victim = H - if(connected_monitor) - connected_monitor.update_victim(H) - icon_state = H.pulse() ? "table2-active" : "table2-idle" - else - icon_state = "table2-idle" - -/obj/machinery/optable/MouseDrop_T(mob/target, mob/user) - var/mob/living/M = user - if(user.stat || user.restrained() || !iscarbon(target) || !check_table(target)) - return - if(istype(M)) - take_victim(target,user) - else - return ..() - -/obj/machinery/optable/climb_on() - if(usr.stat || !ishuman(usr) || usr.restrained() || !check_table(usr)) - return - - take_victim(usr,usr) - -/obj/machinery/optable/proc/check_table(mob/living/carbon/patient as mob) - check_victim() - if(src.victim && get_turf(victim) == get_turf(src) && victim.lying) - to_chat(usr, "\The [src] is already occupied!") - return 0 - if(patient.buckled) - to_chat(usr, "Unbuckle \the [patient] first!") - return 0 - return 1 diff --git a/code/game/machinery/Sleeper.dm b/code/game/machinery/Sleeper.dm deleted file mode 100644 index 4942acaeee5dc..0000000000000 --- a/code/game/machinery/Sleeper.dm +++ /dev/null @@ -1,332 +0,0 @@ -/obj/machinery/sleeper - name = "sleeper" - desc = "A fancy bed with built-in injectors, a dialysis machine, and a limited health scanner." - icon = 'icons/obj/Cryogenic2.dmi' - icon_state = "sleeper_0" - density = TRUE - anchored = TRUE - clicksound = 'sound/machines/buttonbeep.ogg' - clickvol = 30 - base_type = /obj/machinery/sleeper - construct_state = /decl/machine_construction/default/panel_closed - uncreated_component_parts = null - stat_immune = 0 - machine_name = "sleeper" - machine_desc = "Sleepers are high-powered, full-body beds that can synthesize and inject simple chemicals, as well as dialyze substances from a patient's blood and slow down their body functions." - var/mob/living/carbon/human/occupant = null - var/list/base_chemicals = list("Inaprovaline" = /datum/reagent/inaprovaline, "Paracetamol" = /datum/reagent/paracetamol, "Dylovene" = /datum/reagent/dylovene, "Dexalin" = /datum/reagent/dexalin) - var/list/available_chemicals = list() - var/list/upgrade_chemicals = list("Kelotane" = /datum/reagent/kelotane) - var/list/upgrade2_chemicals = list("Hyronalin" = /datum/reagent/hyronalin) - var/list/antag_chemicals = list("Hair Remover" = /datum/reagent/toxin/hair_remover, "Chloral Hydrate" = /datum/reagent/chloralhydrate) - var/obj/item/reagent_containers/glass/beaker = null - var/filtering = 0 - var/pump - var/list/stasis_settings = list(1, 2, 5, 10) - var/stasis = 1 - var/synth_modifier = 1 - var/pump_speed - var/stasis_power = 5 KILOWATTS - - idle_power_usage = 15 - active_power_usage = 1 KILOWATTS //builtin health analyzer, dialysis machine, injectors. - -/obj/machinery/sleeper/Initialize(mapload, d = 0, populate_parts = TRUE) - . = ..() - if(populate_parts) - beaker = new /obj/item/reagent_containers/glass/beaker/large(src) - update_icon() - -/obj/machinery/sleeper/examine(mob/user, distance) - . = ..() - if (distance <= 1) - if (beaker) - to_chat(user, "It is loaded with a beaker.") - if(occupant) - occupant.examine(arglist(args)) - if (emagged && user.skill_check(SKILL_MEDICAL, SKILL_EXPERT)) - to_chat(user, "The sleeper chemical synthesis controls look tampered with.") - - -/obj/machinery/sleeper/Process() - if(stat & (NOPOWER|BROKEN)) - return - - if(filtering > 0) - if(beaker) - if(beaker.reagents.total_volume < beaker.reagents.maximum_volume) - var/pumped = 0 - for(var/datum/reagent/x in occupant.reagents.reagent_list) - occupant.reagents.trans_to_obj(beaker, pump_speed) - pumped++ - if(ishuman(occupant)) - occupant.vessel.trans_to_obj(beaker, pumped + 1) - else - toggle_filter() - if(pump > 0) - if(beaker && istype(occupant)) - if(beaker.reagents.total_volume < beaker.reagents.maximum_volume) - var/datum/reagents/ingested = occupant.get_ingested_reagents() - if(ingested) - for(var/datum/reagent/x in ingested.reagent_list) - ingested.trans_to_obj(beaker, pump_speed) - else - toggle_pump() - - if(iscarbon(occupant) && stasis > 1) - occupant.SetStasis(stasis) - if (occupant.stat == UNCONSCIOUS && prob(2)) - to_chat(occupant, SPAN_NOTICE(SPAN_BOLD("... [pick("comfy", "feels slow", "warm")] ..."))) - -/obj/machinery/sleeper/on_update_icon() - if(!occupant) - icon_state = "sleeper_0" - else if(stat & (BROKEN|NOPOWER)) - icon_state = "sleeper_1" - else - icon_state = "sleeper_2" - -/obj/machinery/sleeper/DefaultTopicState() - return GLOB.outside_state - -/obj/machinery/sleeper/interface_interact(var/mob/user) - ui_interact(user) - return TRUE - -/obj/machinery/sleeper/ui_interact(var/mob/user, var/ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1, var/datum/topic_state/state = GLOB.outside_state) - var/data[0] - - data["power"] = stat & (NOPOWER|BROKEN) ? 0 : 1 - - var/list/reagents = list() - for(var/T in available_chemicals) - var/list/reagent = list() - reagent["name"] = T - if(occupant && occupant.reagents) - reagent["amount"] = occupant.reagents.get_reagent_amount(available_chemicals[T]) - reagents += list(reagent) - data["reagents"] = reagents.Copy() - - if(istype(occupant)) - var/scan = user.skill_check(SKILL_MEDICAL, SKILL_ADEPT) ? medical_scan_results(occupant) : "Contains: \the [occupant]" - scan = replacetext_char(scan,"'scan_notice'","'white'") - scan = replacetext_char(scan,"'scan_warning'","'average'") - scan = replacetext_char(scan,"'scan_danger'","'bad'") - data["occupant"] =scan - else - data["occupant"] = 0 - if(beaker) - data["beaker"] = beaker.reagents.get_free_space() - else - data["beaker"] = -1 - data["filtering"] = filtering - data["pump"] = pump - data["stasis"] = stasis - data["skill_check"] = user.skill_check(SKILL_MEDICAL, SKILL_BASIC) - - ui = SSnano.try_update_ui(user, src, ui_key, ui, data, force_open) - if(!ui) - ui = new(user, src, ui_key, "sleeper.tmpl", "Sleeper UI", 600, 600, state = state) - ui.set_initial_data(data) - ui.open() - ui.set_auto_update(1) - -/obj/machinery/sleeper/CanUseTopic(user) - if(user == occupant) - to_chat(usr, "You can't reach the controls from the inside.") - return STATUS_CLOSE - . = ..() - -/obj/machinery/sleeper/OnTopic(user, href_list) - if(href_list["eject"]) - go_out() - return TOPIC_REFRESH - if(href_list["beaker"]) - remove_beaker() - return TOPIC_REFRESH - if(href_list["filter"]) - if(filtering != text2num(href_list["filter"])) - toggle_filter() - return TOPIC_REFRESH - if(href_list["pump"]) - if(filtering != text2num(href_list["pump"])) - toggle_pump() - return TOPIC_REFRESH - if(href_list["chemical"] && href_list["amount"]) - if(occupant && occupant.stat != DEAD) - if(href_list["chemical"] in available_chemicals) // Your hacks are bad and you should feel bad - inject_chemical(user, href_list["chemical"], text2num(href_list["amount"])) - return TOPIC_REFRESH - if(href_list["stasis"]) - var/nstasis = text2num(href_list["stasis"]) - if(stasis != nstasis && (nstasis in stasis_settings)) - stasis = text2num(href_list["stasis"]) - change_power_consumption(initial(active_power_usage) + stasis_power * (stasis-1), POWER_USE_ACTIVE) - return TOPIC_REFRESH - -/obj/machinery/sleeper/state_transition(var/decl/machine_construction/default/new_state) - . = ..() - if(istype(new_state)) - updateUsrDialog() - go_out() - -/obj/machinery/sleeper/attackby(var/obj/item/I, var/mob/user) - if(istype(I, /obj/item/reagent_containers/glass)) - add_fingerprint(user) - if(!beaker) - if(!user.unEquip(I, src)) - return - beaker = I - user.visible_message("\The [user] adds \a [I] to \the [src].", "You add \a [I] to \the [src].") - else - to_chat(user, "\The [src] has a beaker already.") - return TRUE - return ..() - -/obj/machinery/sleeper/MouseDrop_T(var/mob/target, var/mob/user) - if(!CanMouseDrop(target, user)) - return - if(!istype(target)) - return - if(target.buckled) - to_chat(user, "Unbuckle the subject before attempting to move them.") - return - if(panel_open) - to_chat(user, "Close the maintenance panel before attempting to place the subject in the sleeper.") - return - go_in(target, user) - -/obj/machinery/sleeper/relaymove(var/mob/user) - ..() - go_out() - -/obj/machinery/sleeper/emp_act(var/severity) - if(filtering) - toggle_filter() - - if(stat & (BROKEN|NOPOWER)) - ..(severity) - return - - go_out() - - ..(severity) -/obj/machinery/sleeper/proc/toggle_filter() - if(!occupant || !beaker) - filtering = 0 - return - to_chat(occupant, "You feel like your blood is being sucked away.") - filtering = !filtering - -/obj/machinery/sleeper/proc/toggle_pump() - if(!occupant || !beaker) - pump = 0 - return - to_chat(occupant, "You feel a tube jammed down your throat.") - pump = !pump - -/obj/machinery/sleeper/proc/go_in(var/mob/M, var/mob/user) - if(!M) - return - if(stat & (BROKEN|NOPOWER)) - return - if(occupant) - to_chat(user, "\The [src] is already occupied.") - return - - if(M == user) - visible_message("\The [user] starts climbing into \the [src].") - else - visible_message("\The [user] starts putting [M] into \the [src].") - - if(do_after(user, 2 SECONDS, src, DO_PUBLIC_UNIQUE)) - if(occupant) - to_chat(user, "\The [src] is already occupied.") - return - set_occupant(M) - -/obj/machinery/sleeper/proc/go_out() - if(!occupant) - return - if(occupant.client) - occupant.client.eye = occupant.client.mob - occupant.client.perspective = MOB_PERSPECTIVE - occupant.dropInto(loc) - set_occupant(null) - - for(var/obj/O in (contents - component_parts)) // In case an object was dropped inside or something. Excludes the beaker and component parts. - if(O == beaker) - continue - O.dropInto(loc) - toggle_filter() - -/obj/machinery/sleeper/AltClick(mob/user) - if(CanDefaultInteract(user)) - go_out() - else - ..() - -/obj/machinery/sleeper/proc/set_occupant(var/mob/living/carbon/occupant) - src.occupant = occupant - update_icon() - if(!occupant) - SetName(initial(name)) - update_use_power(POWER_USE_IDLE) - return - occupant.forceMove(src) - occupant.stop_pulling() - if(occupant.client) - occupant.client.perspective = EYE_PERSPECTIVE - occupant.client.eye = src - SetName("[name] ([occupant])") - update_use_power(POWER_USE_ACTIVE) - -/obj/machinery/sleeper/proc/remove_beaker() - if(beaker) - beaker.dropInto(loc) - beaker = null - toggle_filter() - toggle_pump() - -/obj/machinery/sleeper/proc/inject_chemical(var/mob/living/user, var/chemical_name, var/amount) - if(stat & (BROKEN|NOPOWER)) - return - - var/chemical_type = available_chemicals[chemical_name] - if(occupant && occupant.reagents) - if(occupant.reagents.get_reagent_amount(chemical_type) + amount <= 20) - use_power_oneoff(amount * CHEM_SYNTH_ENERGY * synth_modifier) - occupant.reagents.add_reagent(chemical_type, amount) - var/datum/reagent/R = chemical_type - if (initial(R.should_admin_log)) - admin_inject_log(user, occupant, src, chemical_type, amount) - to_chat(user, "Occupant now has [occupant.reagents.get_reagent_amount(chemical_type)] unit\s of [chemical_name] in their bloodstream.") - else - to_chat(user, "The subject has too many chemicals.") - else - to_chat(user, "There's no suitable occupant in \the [src].") - -/obj/machinery/sleeper/RefreshParts() - ..() - var/T = clamp(total_component_rating_of_type(/obj/item/stock_parts/scanning_module), 1, 10) - T = max(T,1) - synth_modifier = 1/T - pump_speed = 2 + T - - T = total_component_rating_of_type(/obj/item/stock_parts/manipulator) - available_chemicals = base_chemicals.Copy() - if (T >= 4) - available_chemicals |= upgrade_chemicals - if (T >= 6) - available_chemicals |= upgrade2_chemicals - - -/obj/machinery/sleeper/emag_act(var/remaining_charges, var/mob/user) - emagged = !emagged - to_chat(user, "You [emagged ? "disable" : "enable"] \the [src]'s chemical synthesis safety checks.") - - if (emagged) - available_chemicals |= antag_chemicals - else - available_chemicals -= antag_chemicals - return 1 diff --git a/code/game/machinery/_machines_base/machine_construction/_construction.dm b/code/game/machinery/_machines_base/machine_construction/_construction.dm deleted file mode 100644 index 32101d145e9af..0000000000000 --- a/code/game/machinery/_machines_base/machine_construction/_construction.dm +++ /dev/null @@ -1,90 +0,0 @@ -// use inside attack_hand/attackby -#define TRANSFER_STATE(path)\ - . = try_change_state(machine, path, user);\ - if(. != MCS_CHANGE) return (. == MCS_BLOCK);\ - . = TRUE - -/// The construction state decl associated with this machine -/obj/machinery/var/decl/machine_construction/construct_state - -/obj/machinery/Initialize() - if(construct_state) - construct_state = decls_repository.get_decl(construct_state) - . = ..() - -/// Called on state transition; can intercept, but must call parent. -/obj/machinery/proc/state_transition(decl/machine_construction/new_state) - construct_state = new_state - -/// Return a change state define or a fail message to block transition. -/obj/machinery/proc/cannot_transition_to(state_path, mob/user) - return MCS_CHANGE - -/decl/machine_construction - var/needs_board // Type of circuitboard expected, if any. Used in unit testing. - var/cannot_print // If false, unit testing will attempt to guarantee that the machine is buildable in-round. This inverts that behavior. - -// Run on unit testing. Should return a fail message or null. -/decl/machine_construction/proc/fail_unit_test(obj/machinery/machine) - if(!state_is_valid(machine)) - return "[log_info_line(machine)] had an invalid construction state of type [type]." - if(needs_board) - var/obj/item/stock_parts/circuitboard/C = machine.get_component_of_type(/obj/item/stock_parts/circuitboard) - if(!C) - return "Machine [log_info_line(machine)] lacked a circuitboard." - if(C.board_type != needs_board) - return "Machine [log_info_line(machine)] had a circuitboard of an unexpected type: was [C.board_type], should be [needs_board]." - var/design = GLOB.build_path_to_design_datum_path[C.type] - if(!design && !cannot_print) - return "Machine [log_info_line(machine)] had a circuitboard which could not be printed." - else if(design && cannot_print) - return "Machine [log_info_line(machine)] had a circuitboard which could be printed, but it wasn't supposed to." - -// Fetches the components the machine is supposed to have to function fully. Not related to state validity. -/decl/machine_construction/proc/get_requirements(obj/machinery/machine) - if(needs_board) - var/obj/item/stock_parts/circuitboard/board = machine.get_component_of_type(/obj/item/stock_parts/circuitboard) - if(board) - return board.req_components - -// There are many machines, so this is designed to catch errors. This proc must either return TRUE or set the machine's construct_state to a valid one (or null). -/decl/machine_construction/proc/validate_state(obj/machinery/machine) - if(!state_is_valid(machine)) - machine.construct_state = null - return FALSE - return TRUE - -/decl/machine_construction/proc/state_is_valid(obj/machinery/machine) - return TRUE - -/decl/machine_construction/proc/try_change_state(obj/machinery/machine, path, user) - if(machine.construct_state != src) - return MCS_BLOCK - var/decl/machine_construction/state = decls_repository.get_decl(path) - if(state) - var/fail = machine.cannot_transition_to(path, user) - if(fail == MCS_CHANGE) - machine.state_transition(state) - return MCS_CHANGE - if(istext(fail)) - to_chat(user, fail) - return MCS_BLOCK - return fail - return MCS_CONTINUE - -/decl/machine_construction/proc/attack_hand(mob/user, obj/machinery/machine) - if(!validate_state(machine)) - crash_with("Machine [log_info_line(machine)] violated the state assumptions of the construction state [type]!") - machine.attack_hand(user) - return TRUE - -/decl/machine_construction/proc/attackby(obj/item/I, mob/user, obj/machinery/machine) - if(!validate_state(machine)) - crash_with("Machine [log_info_line(machine)] violated the state assumptions of the construction state [type]!") - machine.attackby(I, user) - return TRUE - -/decl/machine_construction/proc/mechanics_info() - -// Used to transfer state as needed post-construction. -/decl/machine_construction/proc/post_construct(obj/machinery/machine) diff --git a/code/game/machinery/_machines_base/machine_construction/computer.dm b/code/game/machinery/_machines_base/machine_construction/computer.dm deleted file mode 100644 index 684f0f4b8c18a..0000000000000 --- a/code/game/machinery/_machines_base/machine_construction/computer.dm +++ /dev/null @@ -1,12 +0,0 @@ -// Computers follow similar steps to default, but have different circuit types (which is enforced here) - -/decl/machine_construction/default/panel_closed/computer - down_state = /decl/machine_construction/default/panel_open/computer - needs_board = "computer" - -/decl/machine_construction/default/panel_closed/computer/no_deconstruct/attackby(obj/item/I, mob/user, obj/machinery/machine) - return FALSE - -/decl/machine_construction/default/panel_open/computer - up_state = /decl/machine_construction/default/panel_closed/computer - needs_board = "computer" \ No newline at end of file diff --git a/code/game/machinery/_machines_base/machine_construction/default.dm b/code/game/machinery/_machines_base/machine_construction/default.dm deleted file mode 100644 index ae5080fe6bea9..0000000000000 --- a/code/game/machinery/_machines_base/machine_construction/default.dm +++ /dev/null @@ -1,94 +0,0 @@ -// Used to be called default_deconstruction_screwdriver -> default_deconstruction_crowbar and default_part_replacement - -/decl/machine_construction/default - needs_board = "machine" - var/up_state - var/down_state - -/decl/machine_construction/default/no_deconstruct/attackby(obj/item/I, mob/user, obj/machinery/machine) - . = FALSE - -/decl/machine_construction/default/panel_closed - down_state = /decl/machine_construction/default/panel_open - -/decl/machine_construction/default/panel_closed/state_is_valid(obj/machinery/machine) - return !machine.panel_open - -/decl/machine_construction/default/panel_closed/validate_state(obj/machinery/machine) - . = ..() - if(!.) - try_change_state(machine, down_state) - -/decl/machine_construction/default/panel_closed/attackby(obj/item/I, mob/user, obj/machinery/machine) - if((. = ..())) - return - if (!machine.can_use_tools) - to_chat(user, SPAN_WARNING("\The [src] cannot be modified!")) - return TRUE - if(isScrewdriver(I)) - TRANSFER_STATE(down_state) - playsound(get_turf(machine), 'sound/items/Screwdriver.ogg', 50, 1) - machine.panel_open = TRUE - to_chat(user, SPAN_NOTICE("You open the maintenance hatch of \the [machine].")) - machine.update_icon() - return - if(istype(I, /obj/item/storage/part_replacer)) - machine.display_parts(user) - return TRUE - -/decl/machine_construction/default/panel_closed/post_construct(obj/machinery/machine) - try_change_state(machine, down_state) - machine.panel_open = TRUE - machine.queue_icon_update() - -/decl/machine_construction/default/panel_closed/mechanics_info() - . = list() - . += "Use a screwdriver to open the panel." - . += "Use a parts replacer to view installed parts." - -/decl/machine_construction/default/panel_open - up_state = /decl/machine_construction/default/panel_closed - down_state = /decl/machine_construction/default/deconstructed - -/decl/machine_construction/default/panel_open/state_is_valid(obj/machinery/machine) - return machine.panel_open - -/decl/machine_construction/default/panel_open/validate_state(obj/machinery/machine) - . = ..() - if(!.) - try_change_state(machine, up_state) - -/decl/machine_construction/default/panel_open/attackby(obj/item/I, mob/user, obj/machinery/machine) - if((. = ..())) - return - if(isCrowbar(I)) - TRANSFER_STATE(down_state) - machine.dismantle() - return - if(isScrewdriver(I)) - TRANSFER_STATE(up_state) - playsound(get_turf(machine), 'sound/items/Screwdriver.ogg', 50, 1) - machine.panel_open = FALSE - to_chat(user, SPAN_NOTICE("You close the maintenance hatch of \the [machine].")) - machine.update_icon() - return - - if(istype(I, /obj/item/storage/part_replacer)) - return machine.part_replacement(user, I) - - if(isWrench(I)) - return machine.part_removal(user) - - if(istype(I)) - return machine.part_insertion(user, I) - -/decl/machine_construction/default/panel_open/mechanics_info() - . = list() - . += "Use a screwdriver to close the panel." - . += "Use a parts replacer to upgrade some parts." - . += "Use a crowbar to remove the circuit and deconstruct the machine" - . += "Insert a new part to install it." - . += "Remove installed parts with a wrench." - -// Not implemented fully as the machine will qdel on transition to this. Path needed for checks. -/decl/machine_construction/default/deconstructed diff --git a/code/game/machinery/_machines_base/machine_construction/frame.dm b/code/game/machinery/_machines_base/machine_construction/frame.dm deleted file mode 100644 index 9cc758f6d5cbc..0000000000000 --- a/code/game/machinery/_machines_base/machine_construction/frame.dm +++ /dev/null @@ -1,150 +0,0 @@ -// Construction frames - -/decl/machine_construction/frame/unwrenched/state_is_valid(obj/machinery/machine) - return !machine.anchored - -/decl/machine_construction/frame/unwrenched/validate_state(obj/machinery/constructable_frame/machine) - . = ..() - if(!.) - if(machine.circuit) - try_change_state(machine, /decl/machine_construction/frame/awaiting_parts) - else - try_change_state(machine, /decl/machine_construction/frame/wrenched) - -/decl/machine_construction/frame/unwrenched/attackby(obj/item/I, mob/user, obj/machinery/machine) - if(isWrench(I)) - playsound(machine.loc, 'sound/items/Ratchet.ogg', 50, 1) - if(do_after(user, 2 SECONDS, machine, DO_PUBLIC_UNIQUE)) - TRANSFER_STATE(/decl/machine_construction/frame/wrenched) - to_chat(user, "You wrench \the [machine] into place.") - machine.anchored = TRUE - if(isWelder(I)) - var/obj/item/weldingtool/WT = I - if(!WT.remove_fuel(0, user)) - to_chat(user, "The welding tool must be on to complete this task.") - return TRUE - playsound(machine.loc, 'sound/items/Welder.ogg', 50, 1) - if(do_after(user, 2 SECONDS, machine, DO_PUBLIC_UNIQUE)) - if(!WT.isOn()) - return TRUE - TRANSFER_STATE(/decl/machine_construction/default/deconstructed) - to_chat(user, "You deconstruct \the [machine].") - machine.dismantle() - - -/decl/machine_construction/frame/unwrenched/mechanics_info() - . = list() - . += "Use a welder to break apart the frame." - . += "Use a wrench to secure the frame in place." - -/decl/machine_construction/frame/wrenched/state_is_valid(obj/machinery/constructable_frame/machine) - return machine.anchored && !machine.circuit - -/decl/machine_construction/frame/wrenched/validate_state(obj/machinery/constructable_frame/machine) - . = ..() - if(!.) - if(machine.circuit) - try_change_state(machine, /decl/machine_construction/frame/awaiting_parts) - else - try_change_state(machine, /decl/machine_construction/frame/unwrenched) - -/decl/machine_construction/frame/wrenched/attackby(obj/item/I, mob/user, obj/machinery/machine) - if(isWrench(I)) - playsound(machine.loc, 'sound/items/Ratchet.ogg', 50, 1) - if(do_after(user, 2 SECONDS, machine, DO_PUBLIC_UNIQUE)) - TRANSFER_STATE(/decl/machine_construction/frame/unwrenched) - to_chat(user, "You unfasten \the [machine].") - machine.anchored = FALSE - return - if(isCoil(I)) - var/obj/item/stack/cable_coil/C = I - if(C.get_amount() < 5) - to_chat(user, "You need five lengths of cable to add them to \the [machine].") - return TRUE - playsound(machine.loc, 'sound/items/Deconstruct.ogg', 50, 1) - to_chat(user, "You start to add cables to the frame.") - if(do_after(user, 2 SECONDS, machine, DO_PUBLIC_UNIQUE) && C.use(5)) - TRANSFER_STATE(/decl/machine_construction/frame/awaiting_circuit) - to_chat(user, "You add cables to the frame.") - return TRUE - - -/decl/machine_construction/frame/wrenched/mechanics_info() - . = list() - . += "Use a wrench to unfasten the frame from the floor and prepare it for deconstruction." - . += "Add cables to make it ready for a circuit." - -/decl/machine_construction/frame/awaiting_circuit/state_is_valid(obj/machinery/constructable_frame/machine) - return machine.anchored && !machine.circuit - -/decl/machine_construction/frame/awaiting_circuit/validate_state(obj/machinery/constructable_frame/machine) - . = ..() - if(!.) - if(machine.circuit) - try_change_state(machine, /decl/machine_construction/frame/awaiting_parts) - else - try_change_state(machine, /decl/machine_construction/frame/unwrenched) - -/decl/machine_construction/frame/awaiting_circuit/attackby(obj/item/I, mob/user, obj/machinery/constructable_frame/machine) - if(istype(I, /obj/item/stock_parts/circuitboard)) - var/obj/item/stock_parts/circuitboard/circuit = I - if(circuit.board_type == machine.expected_machine_type) - if(!user.canUnEquip(I)) - return FALSE - TRANSFER_STATE(/decl/machine_construction/frame/awaiting_parts) - user.unEquip(I, machine) - playsound(machine.loc, 'sound/items/Deconstruct.ogg', 50, 1) - to_chat(user, "You add the circuit board to \the [machine].") - machine.circuit = I - return - else - to_chat(user, "This frame does not accept circuit boards of this type!") - return TRUE - if(isWirecutter(I)) - TRANSFER_STATE(/decl/machine_construction/frame/wrenched) - playsound(machine.loc, 'sound/items/Wirecutter.ogg', 50, 1) - to_chat(user, "You remove the cables.") - new /obj/item/stack/cable_coil(machine.loc, 5) - -/decl/machine_construction/frame/awaiting_circuit/mechanics_info() - . = list() - . += "Insert a circuit board to progress with constructing the machine." - . += "Use a wirecutter to remove the cables." - -/decl/machine_construction/frame/awaiting_parts/state_is_valid(obj/machinery/constructable_frame/machine) - return machine.anchored && machine.circuit - -/decl/machine_construction/frame/awaiting_parts/validate_state(obj/machinery/constructable_frame/machine) - . = ..() - if(!.) - if(machine.anchored) - try_change_state(machine, /decl/machine_construction/frame/wrenched) - else - try_change_state(machine, /decl/machine_construction/frame/unwrenched) - -/decl/machine_construction/frame/awaiting_parts/attackby(obj/item/I, mob/user, obj/machinery/constructable_frame/machine) - if(isCrowbar(I)) - TRANSFER_STATE(/decl/machine_construction/frame/awaiting_circuit) - playsound(machine.loc, 'sound/items/Crowbar.ogg', 50, 1) - machine.circuit.dropInto(machine.loc) - machine.circuit = null - to_chat(user, "You remove the circuit board.") - return - if(isScrewdriver(I)) - playsound(machine.loc, 'sound/items/Screwdriver.ogg', 50, 1) - var/obj/machinery/new_machine = new machine.circuit.build_path(machine.loc, machine.dir, FALSE) - machine.circuit.construct(new_machine) - new_machine.install_component(machine.circuit, refresh_parts = FALSE) - new_machine.apply_component_presets() - new_machine.RefreshParts() - if(new_machine.construct_state) - new_machine.construct_state.post_construct(new_machine) - else - crash_with("Machine of type [new_machine.type] was built from a circuit and frame, but had no construct state set.") - qdel(machine) - return TRUE - -/decl/machine_construction/frame/awaiting_parts/mechanics_info() - . = list() - . += "Use a crowbar to remove the circuitboard and any parts installed." - . += "Use a screwdriver to build the machine." diff --git a/code/game/machinery/_machines_base/machine_construction/item_chassis.dm b/code/game/machinery/_machines_base/machine_construction/item_chassis.dm deleted file mode 100644 index b81aac70b5a51..0000000000000 --- a/code/game/machinery/_machines_base/machine_construction/item_chassis.dm +++ /dev/null @@ -1,25 +0,0 @@ -// Identical to default behavior, but does not require circuit boards. - -/decl/machine_construction/default/item_chassis - needs_board = null - down_state = /decl/machine_construction/default/deconstructed - -/decl/machine_construction/default/item_chassis/attackby(obj/item/I, mob/user, obj/machinery/machine) - if((. = ..())) - return - if(isWrench(I)) - TRANSFER_STATE(down_state) - machine.dismantle() - return - -/decl/machine_construction/default/item_chassis/state_is_valid(obj/machinery/machine) - return TRUE - -/decl/machine_construction/default/item_chassis/validate_state(obj/machinery/machine) - . = ..() - if(!.) - try_change_state(machine, down_state) - -/decl/machine_construction/default/panel_closed/mechanics_info() - . = list() - . += "Use a wrench to deconstruct the machine" \ No newline at end of file diff --git a/code/game/machinery/_machines_base/machine_construction/tcomms.dm b/code/game/machinery/_machines_base/machine_construction/tcomms.dm deleted file mode 100644 index 4d58bf45c7a6c..0000000000000 --- a/code/game/machinery/_machines_base/machine_construction/tcomms.dm +++ /dev/null @@ -1,116 +0,0 @@ -// Telecomms have lots of states. - -/decl/machine_construction/tcomms - needs_board = "machine" - -/decl/machine_construction/tcomms/panel_closed/state_is_valid(obj/machinery/machine) - return !machine.panel_open - -/decl/machine_construction/tcomms/panel_closed/validate_state(obj/machinery/machine) - . = ..() - if(!.) - try_change_state(machine, /decl/machine_construction/tcomms/panel_open) - -/decl/machine_construction/tcomms/panel_closed/attackby(obj/item/I, mob/user, obj/machinery/machine) - if((. = ..())) - return - if(isScrewdriver(I)) - TRANSFER_STATE(/decl/machine_construction/tcomms/panel_open) - machine.panel_open = TRUE - to_chat(user, "You unfasten the bolts.") - playsound(machine.loc, 'sound/items/Screwdriver.ogg', 50, 1) - -/decl/machine_construction/tcomms/panel_closed/post_construct(obj/machinery/machine) - try_change_state(machine, /decl/machine_construction/tcomms/panel_open/no_cable) - machine.panel_open = TRUE - machine.queue_icon_update() - -/decl/machine_construction/tcomms/panel_closed/mechanics_info() - . = list() - . += "Use a screwdriver to open the panel." - -/decl/machine_construction/tcomms/panel_closed/cannot_print - cannot_print = TRUE - -/decl/machine_construction/tcomms/panel_open/state_is_valid(obj/machinery/machine) - return machine.panel_open - -/decl/machine_construction/tcomms/panel_open/validate_state(obj/machinery/machine) - . = ..() - if(!.) - try_change_state(machine, /decl/machine_construction/tcomms/panel_closed) - -/decl/machine_construction/tcomms/panel_open/attackby(obj/item/I, mob/user, obj/machinery/machine) - if((. = ..())) - return - return state_interactions(I, user, machine) - -/decl/machine_construction/tcomms/panel_open/proc/state_interactions(obj/item/I, mob/user, obj/machinery/machine) - if(isScrewdriver(I)) - TRANSFER_STATE(/decl/machine_construction/tcomms/panel_closed) - machine.panel_open = FALSE - to_chat(user, "You fasten the bolts.") - playsound(machine.loc, 'sound/items/Screwdriver.ogg', 50, 1) - return - if(isWrench(I)) - TRANSFER_STATE(/decl/machine_construction/tcomms/panel_open/unwrenched) - to_chat(user, "You dislodge the external plating.") - playsound(machine.loc, 'sound/items/Ratchet.ogg', 75, 1) - -/decl/machine_construction/tcomms/panel_open/mechanics_info() - . = list() - . += "Use a screwdriver to close the panel." - . += "Use a wrench to remove the external plating." - -/decl/machine_construction/tcomms/panel_open/unwrenched/state_interactions(obj/item/I, mob/user, obj/machinery/machine) - if(isWrench(I)) - TRANSFER_STATE(/decl/machine_construction/tcomms/panel_open) - to_chat(user, "You secure the external plating.") - playsound(machine.loc, 'sound/items/Ratchet.ogg', 75, 1) - return - if(isWirecutter(I)) - TRANSFER_STATE(/decl/machine_construction/tcomms/panel_open/no_cable) - playsound(machine.loc, 'sound/items/Wirecutter.ogg', 50, 1) - to_chat(user, "You remove the cables.") - var/obj/item/stack/cable_coil/A = new /obj/item/stack/cable_coil( user.loc ) - A.amount = 5 - machine.set_broken(TRUE, TRUE) // the machine's been borked! - -/decl/machine_construction/tcomms/panel_open/unwrenched/mechanics_info() - . = list() - . += "Use a wrench to secure the external plating." - . += "Use wirecutters to remove the cabling." - -/decl/machine_construction/tcomms/panel_open/no_cable/state_interactions(obj/item/I, mob/user, obj/machinery/machine) - if(isCoil(I)) - var/obj/item/stack/cable_coil/A = I - if (A.can_use(5)) - TRANSFER_STATE(/decl/machine_construction/tcomms/panel_open/unwrenched) - A.use(5) - to_chat(user, "You insert the cables.") - machine.set_broken(FALSE, TRUE) // the machine's not borked anymore! - return - else - to_chat(user, "You need five coils of wire for this.") - return TRUE - if(isCrowbar(I)) - TRANSFER_STATE(/decl/machine_construction/default/deconstructed) - machine.dismantle() - return - - if(istype(I, /obj/item/storage/part_replacer)) - return machine.part_replacement(I, user) - - if(isWrench(I)) - return machine.part_removal(user) - - if(istype(I)) - return machine.part_insertion(user, I) - -/decl/machine_construction/tcomms/panel_open/no_cable/mechanics_info() - . = list() - . += "Attach cables to make the machine functional." - . += "Use a parts replacer to upgrade some parts." - . += "Use a crowbar to remove the circuit and deconstruct the machine" - . += "Insert a new part to install it." - . += "Remove installed parts with a wrench." \ No newline at end of file diff --git a/code/game/machinery/_machines_base/machinery.dm b/code/game/machinery/_machines_base/machinery.dm deleted file mode 100644 index 81d36f0aadd67..0000000000000 --- a/code/game/machinery/_machines_base/machinery.dm +++ /dev/null @@ -1,585 +0,0 @@ -/* -Overview: - Used to create objects that need a per step proc call. Default definition of 'New()' - stores a reference to src machine in global 'machines list'. Default definition - of 'Destroy' removes reference to src machine in global 'machines list'. - -Class Variables: - use_power (num) - current state of auto power use. - Possible Values: - 0 -- no auto power use - 1 -- machine is using power at its idle power level - 2 -- machine is using power at its active power level - - active_power_usage (num) - Value for the amount of power to use when in active power mode - - idle_power_usage (num) - Value for the amount of power to use when in idle power mode - - power_channel (num) - What channel to draw from when drawing power for power mode - Possible Values: - EQUIP:1 -- Equipment Channel - LIGHT:2 -- Lighting Channel - ENVIRON:3 -- Environment Channel - - component_parts (list) - A list of component parts of machine used by frame based machines. - - panel_open (num) - Whether the panel is open - - uid (num) - Unique id of machine across all machines. - - gl_uid (global num) - Next uid value in sequence - - stat (bitflag) - Machine status bit flags. - Possible bit flags: - BROKEN:1 -- Machine is broken - NOPOWER:2 -- No power is being supplied to machine. - MAINT:8 -- machine is currently under going maintenance. - EMPED:16 -- temporary broken by EMP pulse - -Class Procs: - New() 'game/machinery/machine.dm' - - Destroy() 'game/machinery/machine.dm' - - powered(chan = EQUIP) 'modules/power/power_usage.dm' - Checks to see if area that contains the object has power available for power - channel given in 'chan'. - - use_power_oneoff(amount, chan=power_channel) 'modules/power/power_usage.dm' - Deducts 'amount' from the power channel 'chan' of the area that contains the object. - This is not a continuous draw, but rather will be cleared after one APC update. - - power_change() 'modules/power/power_usage.dm' - Called by the area that contains the object when ever that area under goes a - power state change (area runs out of power, or area channel is turned off). - - RefreshParts() 'game/machinery/machine.dm' - Called to refresh the variables in the machine that are contributed to by parts - contained in the component_parts list. (example: glass and material amounts for - the autolathe) - - Default definition does nothing. - - Process() 'game/machinery/machine.dm' - Called by the 'master_controller' once per game tick for each machine that is listed in the 'machines' list. - - - Compiled by Aygar -*/ - -/obj/machinery - name = "machinery" - icon = 'icons/obj/stationobjs.dmi' - w_class = ITEM_SIZE_NO_CONTAINER - layer = STRUCTURE_LAYER // Layer under items - init_flags = INIT_MACHINERY_PROCESS_SELF - - /// Bitflag. Machine's base status. Can include `BROKEN`, `NOPOWER`, etc. - var/stat = EMPTY_BITFIELD - /// Bitflag. Reason the machine is 'broken'. Can be any combination of `MACHINE_BROKEN_*`. Do not modify directly - Use `set_broken()` instead. - var/reason_broken = EMPTY_BITFIELD - /// Bitflag. The machine will never set stat to these flags. - var/stat_immune = NOSCREEN | NOINPUT - /// Boolean. Whether or not the machine has been emagged. - var/emagged = FALSE - /// Boolean. Whether or not the machine has been upgrade by a malfunctioning AI. - var/malf_upgraded = FALSE - /// Wire datum, if any. If you place a type path, it will be autoinitialized. - var/datum/wires/wires - /// One of `POWER_USE_*`. The power usage state of the machine. Use `update_use_power()` to modify this during runtime. - var/use_power = POWER_USE_IDLE - /// Power usage for idle machinery. Used if `use_power` is set to `POWER_USE_IDLE`. Use `change_power_consumption()` to modify this during runtime. - var/idle_power_usage = 0 - /// Power usage for active machinery. Used if `use_power` is set to `POWER_USE_ACTIVE`. Use `change_power_consumption()` to modify this during runtime. - var/active_power_usage = 0 - /// Power channel the machine draws from in APCs. `EQUIP`, `ENVIRON`, or `LIGHT`. Use `update_power_channel()` to modify this during runtime. - var/power_channel = EQUIP - /// Helps with bookkeeping when initializing atoms. Don't modify. - var/power_init_complete = FALSE - /// List of component instances. Expected type: `/obj/item/stock_parts.` - var/list/component_parts - /// List of component paths which have delayed init. Indeces = number of components. - var/list/uncreated_component_parts = list(/obj/item/stock_parts/power/apc) - /// List of componant paths and the maximum number of that specific path that can be inserted into the machine. `null` - no max. `list(type part = number max)`. - var/list/maximum_component_parts = list(/obj/item/stock_parts = 10) - /// Numeric unique ID number. Set to the value of `gl_uid++` when used. - var/uid - /// Boolean. Whether or not the maintenance panel is open. - var/panel_open = FALSE - /// Numeric unique ID number tracker. Used for ensuring `uid` is unique. - var/static/gl_uid = 1 - /// Boolean. Can the machine be interacted with while de-powered. - var/interact_offline = FALSE - /// Sound played on succesful interface use by a carbon lifeform. - var/clicksound - /// Sound played on succesful interface use. - var/clickvol = 40 - /// Value to compare with `world.time` for whether to play `clicksound` according to `CLICKSOUND_INTERVAL`. - var/next_clicksound = 0 - /// The skill used for skill checks for this machine (mostly so subtypes can use different skills). - var/core_skill = SKILL_DEVICES - /// Machines often do all operations on `Process()`. This caches the user's skill while the operations are running. - var/operator_skill - /// For mapped buildable types, set this to be the base type actually buildable. - var/base_type - /// This generic variable is to be used by mappers to give related machines a string key. In principle used by radio stock parts. - var/id_tag - /// What is created when the machine is dismantled. - var/frame_type = /obj/machinery/constructable_frame/machine_frame/deconstruct - /// Whether or not the machine is allowed to be dismantled/modified. Used for snowflake consoles that would break permanently if dismantled. Also prevents damage, since the machine would be irreparable in this state. Has to be defined here because machinery datums. - var/can_use_tools = TRUE - - /// Component parts queued for processing by the machine. Expected type: `/obj/item/stock_parts` - var/list/processing_parts - /// Bitflag. What is being processed. One of `MACHINERY_PROCESS_*`. - var/processing_flags - /// One of the `STATUS_*` flags. If set, will force the given status flag if a silicon tries to access the machine. - var/silicon_restriction = null - - /// The human-readable name of this machine, shown when examining circuit boards. - var/machine_name = null - /// A simple description of what this machine does, shown on examine for circuit boards. - var/machine_desc = null - -/obj/machinery/Initialize(mapload, d=0, populate_parts = TRUE) - . = ..() - if(d) - set_dir(d) - if (init_flags & INIT_MACHINERY_PROCESS_ALL) - START_PROCESSING_MACHINE(src, init_flags & INIT_MACHINERY_PROCESS_ALL) - SSmachines.machinery += src // All machines should remain in this list, always. - if(ispath(wires)) - wires = new wires(src) - populate_parts(populate_parts) - RefreshParts() - power_change() - var/area/A = get_area(src) - if(A) - LAZYADD(A.machinery_list, src) - - - -/obj/machinery/Destroy() - if(istype(wires)) - QDEL_NULL(wires) - SSmachines.machinery -= src - QDEL_NULL_LIST(component_parts) // Further handling is done via destroyed events. - STOP_PROCESSING_MACHINE(src, MACHINERY_PROCESS_ALL) - var/area/A = get_area(src) - if(A) - LAZYREMOVE(A.machinery_list, src) - . = ..() - -/// Part of the machinery subsystem's process stack. Processes everything defined by `processing_flags`. -/obj/machinery/proc/ProcessAll(wait) - if(processing_flags & MACHINERY_PROCESS_COMPONENTS) - for(var/obj/item/stock_parts/part as anything in processing_parts) - if(part.machine_process(src) == PROCESS_KILL) - part.stop_processing() - - if((processing_flags & MACHINERY_PROCESS_SELF) && Process(wait) == PROCESS_KILL) - STOP_PROCESSING_MACHINE(src, MACHINERY_PROCESS_SELF) - -/obj/machinery/Process() - return PROCESS_KILL // Only process if you need to. - -/obj/machinery/emp_act(severity) - if(use_power && stat == EMPTY_BITFIELD) - use_power_oneoff(7500/severity) - - var/obj/effect/overlay/pulse2 = new /obj/effect/overlay(loc) - pulse2.icon = 'icons/effects/effects.dmi' - pulse2.icon_state = "empdisable" - pulse2.SetName("emp sparks") - pulse2.anchored = TRUE - pulse2.set_dir(pick(GLOB.cardinal)) - - addtimer(CALLBACK(GLOBAL_PROC, /proc/qdel, pulse2), 1 SECOND) - ..() - -/obj/machinery/ex_act(severity) - switch(severity) - if(EX_ACT_DEVASTATING) - qdel(src) - if(EX_ACT_HEAVY) - if (prob(50)) - qdel(src) - if(EX_ACT_LIGHT) - if (prob(25)) - qdel(src) - -/// Toggles the `BROKEN` flag on the machine's `stat` variable. Includes immunity and other checks. `cause` can be any of `MACHINE_BROKEN_*`. -/obj/machinery/proc/set_broken(new_state, cause = MACHINE_BROKEN_GENERIC) - if(stat_immune & BROKEN) - return FALSE - if(!new_state == !(reason_broken & cause)) - return FALSE - reason_broken ^= cause - - if(!reason_broken != !(stat & BROKEN)) - stat ^= BROKEN - queue_icon_update() - return TRUE - -/// Toggles the `NOSCREEN` flag on the machine's `stat` variable. Includes immunity checks. -/obj/machinery/proc/set_noscreen(new_state) - if(stat_immune & NOSCREEN) - return FALSE - if(!new_state != !(stat & NOSCREEN))// new state is different from old - stat ^= NOSCREEN // so flip it - return TRUE - -/// Toggles the `NOINPUT` flag on the machine's `stat` variable. Includes immunity checks. -/obj/machinery/proc/set_noinput(new_state) - if(stat_immune & NOINPUT) - return FALSE - if(!new_state != !(stat & NOINPUT)) - stat ^= NOINPUT - return TRUE - -/// Checks whether or not the machine `M` can be operated by `user`. -/proc/is_operable(obj/machinery/M, mob/user) - return istype(M) && M.operable() - -/// Checks whether or not the machine's stat variable has the `BROKEN` flag, or any of the provided `additional_flags`. Returns `TRUE` if any of the flags match. -/obj/machinery/proc/is_broken(additional_flags = EMPTY_BITFIELD) - return (stat & (BROKEN|additional_flags)) - -/// Checks whether or not the machine's stat variable has the `NOPOWER` flag, or any of the provided `additional_flags`. Returns `FALSE` if any of the flags match. -/obj/machinery/proc/is_powered(additional_flags = EMPTY_BITFIELD) - return !(stat & (NOPOWER|additional_flags)) - -/// Inverse of `inoperable()`. -/obj/machinery/proc/operable(additional_flags = EMPTY_BITFIELD) - return !inoperable(additional_flags) - -/// Checks whether or not the machine's state variable has the `BROKEN` or `NOPOWER` flags, or any of the provided `additional_flags`. Returns `TRUE` if any of the flags match. -/obj/machinery/proc/inoperable(additional_flags = EMPTY_BITFIELD) - return (stat & (NOPOWER|BROKEN|additional_flags)) - -/obj/machinery/CanUseTopic(mob/user) - if(stat & BROKEN) - return STATUS_CLOSE - - if(!interact_offline && (stat & NOPOWER)) - return STATUS_CLOSE - - if(user.direct_machine_interface(src)) - var/mob/living/silicon/silicon = user - if (silicon_restriction && ismachinerestricted(silicon)) - if (silicon_restriction == STATUS_CLOSE) - to_chat(user, SPAN_WARNING("Remote AI systems detected. Firewall protections forbid remote AI access.")) - return silicon_restriction - - return ..() - - if(stat & NOSCREEN) - return STATUS_CLOSE - - if(stat & NOINPUT) - return min(..(), STATUS_UPDATE) - return ..() - -/// Whether or not the mob can directly interact with the machine regardless of screen and input status. Checked in `CanUseTopic()`. -/mob/proc/direct_machine_interface(obj/machinery/machine) - return FALSE - -/mob/living/silicon/direct_machine_interface(obj/machinery/machine) - return TRUE - -/mob/observer/ghost/direct_machine_interface(obj/machinery/machine) - return TRUE - -/obj/machinery/CanUseTopicPhysical(mob/user) - if(stat & BROKEN) - return STATUS_CLOSE - - return GLOB.physical_state.can_use_topic(nano_host(), user) - -/obj/machinery/CouldUseTopic(mob/user) - ..() - user.set_machine(src) - -/obj/machinery/CouldNotUseTopic(mob/user) - user.unset_machine() - -/obj/machinery/Topic(href, href_list, datum/topic_state/state) - if(href_list["mechanics_text"] && construct_state) // This is an OOC examine thing handled via Topic; specifically bypass all checks, but do nothing other than message to chat. - var/list/info = construct_state.mechanics_info() - if(info) - to_chat(usr, jointext(info, "
      ")) - return TOPIC_HANDLED - - . = ..() - if(. == TOPIC_REFRESH) - updateUsrDialog() // Update legacy UIs to the extent possible. - -//////////////////////////////////////////////////////////////////////////////////////////// - -/obj/machinery/attack_ai(mob/user) - if(CanUseTopic(user, DefaultTopicState()) > STATUS_CLOSE) - return interface_interact(user) - -/obj/machinery/attack_robot(mob/user) - if((. = attack_hand(user))) // This will make a physical proximity check, and allow them to deal with components and such. - return - if(CanUseTopic(user, DefaultTopicState()) > STATUS_CLOSE) - return interface_interact(user) // This may still work even if the physical checks fail. - -// After a recent rework this should mostly be safe. -/obj/machinery/attack_ghost(mob/user) - interface_interact(user) - -// If you don't call parent in this proc, you must make all appropriate checks yourself. -// If you do, you must respect the return value. -/obj/machinery/attack_hand(mob/user) - if((. = ..())) // Buckling, climbers; unlikely to return true. - return - if(MUTATION_FERAL in user.mutations) - user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN*2) - attack_generic(user, 10, "smashes") - return TRUE - if(!CanPhysicallyInteract(user)) - return FALSE // The interactions below all assume physical access to the machine. If this is not the case, we let the machine take further action. - if(!user.IsAdvancedToolUser()) - to_chat(user, SPAN_WARNING("You don't have the dexterity to do this!")) - return TRUE - if(ishuman(user)) - var/mob/living/carbon/human/H = user - if(H.getBrainLoss() >= 55) - visible_message(SPAN_WARNING("\The [H] stares cluelessly at \the [src].")) - return TRUE - else if(prob(H.getBrainLoss())) - to_chat(user, SPAN_WARNING("You momentarily forget how to use \the [src].")) - return TRUE - if((. = component_attack_hand(user))) - return - if(wires && (. = wires.Interact(user))) - return - if((. = physical_attack_hand(user))) - return - if(CanUseTopic(user, DefaultTopicState()) > STATUS_CLOSE) - return interface_interact(user) - -/** - * If you want to have interface interactions handled for you conveniently, use this. - * Return `TRUE` for handled. - * If you perform direct interactions in here, you are responsible for ensuring that full interactivity checks have been made (i.e `CanInteract()`). - * The checks leading in to here only guarantee that the user should be able to view a UI. - */ -/obj/machinery/proc/interface_interact(user) - return FALSE - -/** - * If you want a physical interaction which happens after all relevant checks but preempts the UI interactions, do it here. - * Return `TRUE` for handled. - */ -/obj/machinery/proc/physical_attack_hand(user) - return FALSE - -/// Refreshes the machines parts-related `stat` flags, and calls `on_refresh()` on each component. -/obj/machinery/proc/RefreshParts() - set_noinput(TRUE) - set_noscreen(TRUE) - for(var/thing in component_parts) - var/obj/item/stock_parts/part = thing - part.on_refresh(src) - var/list/missing = missing_parts() - set_broken(!!missing, MACHINE_BROKEN_NO_PARTS) - -/// Displays a message for mobs in range. -/obj/machinery/proc/state(msg) - for(var/mob/O in hearers(src, null)) - O.show_message("[icon2html(src, O)] " + SPAN_NOTICE(msg), AUDIBLE_MESSAGE) - -/// Displays a ping message and sound effect. -/obj/machinery/proc/ping(text) - if (!text) - text = "\The [src] pings." - - state(text) - playsound(loc, 'sound/machines/ping.ogg', 50, 0) - -/// Electrocutes the mob `user` based on probability `prb`, if the machine is in a state capable of doing so. Returns `TRUE` if the user was shocked. -/obj/machinery/proc/shock(mob/user, prb) - if(inoperable()) - return FALSE - if(!prob(prb)) - return FALSE - var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread - s.set_up(5, 1, src) - s.start() - if(electrocute_mob(user, get_area(src), src, 0.7)) - var/area/temp_area = get_area(src) - if(temp_area) - var/obj/machinery/power/apc/temp_apc = temp_area.get_apc() - var/obj/machinery/power/terminal/terminal = temp_apc && temp_apc.terminal() - - if(terminal && terminal.powernet) - terminal.powernet.trigger_warning() - if(user.stunned) - return TRUE - return FALSE - -/// Deconstructs the machine into its base frame and ejects all of its components. Returns boolean. -/obj/machinery/proc/dismantle() - playsound(loc, 'sound/items/Crowbar.ogg', 50, 1) - var/obj/item/stock_parts/circuitboard/circuit = get_component_of_type(/obj/item/stock_parts/circuitboard) - if(circuit) - circuit.deconstruct(src) - if(ispath(frame_type, /obj/item/pipe)) - new frame_type(get_turf(src), src) - else - new frame_type(get_turf(src), dir) - for(var/I in component_parts) - uninstall_component(I, refresh_parts = FALSE) - while(LAZYLEN(uncreated_component_parts)) - var/path = uncreated_component_parts[1] - uninstall_component(path, refresh_parts = FALSE) - for(var/obj/O in src) - O.dropInto(loc) - - qdel(src) - return TRUE - -/obj/machinery/InsertedContents() - return (contents - component_parts) - -/// Applies visual overlays relating to viewing through a specific datum, i.e. cameras. -/datum/proc/apply_visual(mob/M) - return - -/// Removes visual overlays relating to viewing through a specific datum, i.e. cameras. -/datum/proc/remove_visual(mob/M) - return - -/// Handles updgrading the machine for a malfunctioning AI. Return `TRUE` if the machine was successfully upgraded. -/obj/machinery/proc/malf_upgrade(mob/living/silicon/ai/user) - return FALSE - -/obj/machinery/CouldUseTopic(mob/user) - ..() - if(clicksound && world.time > next_clicksound && istype(user, /mob/living/carbon)) - next_clicksound = world.time + CLICKSOUND_INTERVAL - playsound(src, clicksound, clickvol) - -/// Displays all components in the machine to the user. -/obj/machinery/proc/display_parts(mob/user) - to_chat(user, SPAN_NOTICE("Following parts detected in the machine:")) - for(var/obj/item/C in component_parts) - to_chat(user, SPAN_NOTICE(" [C.name]")) - for(var/path in uncreated_component_parts) - var/obj/item/thing = path - to_chat(user, SPAN_NOTICE(" [initial(thing.name)] ([uncreated_component_parts[path] || 1])")) - -/obj/machinery/examine(mob/user) - . = ..() - if (panel_open) - to_chat(user, SPAN_NOTICE("The service panel is open.")) - if(component_parts && hasHUD(user, HUD_SCIENCE)) - display_parts(user) - if(stat & NOSCREEN) - to_chat(user, SPAN_WARNING("It is missing a screen, making it hard to interact with.")) - else if(stat & NOINPUT) - to_chat(user, SPAN_WARNING("It is missing any input device.")) - else if((stat & NOPOWER) && !interact_offline) - to_chat(user, SPAN_WARNING("It is not receiving power.")) - if(construct_state && construct_state.mechanics_info()) - to_chat(user, SPAN_NOTICE("It can be manipulated using tools.")) - var/list/missing = missing_parts() - if(missing) - var/list/parts = list() - for(var/type in missing) - var/obj/item/fake_thing = type - parts += "[num2text(missing[type])] [initial(fake_thing.name)]" - to_chat(user, SPAN_WARNING("\The [src] is missing [english_list(parts)], rendering it inoperable.")) - if (user.skill_check(SKILL_CONSTRUCTION, SKILL_BASIC) || isobserver(user)) - to_chat(user, SPAN_NOTICE(machine_desc)) - -/obj/machinery/get_mechanics_info() - . = ..() - if (maximum_component_parts) - var/component_parts_list - for (var/atom/item as anything in maximum_component_parts) - var/count = maximum_component_parts[item] - if (isnull(count)) - component_parts_list += "
    • Infinite [initial(item.name)]
    • " - else - component_parts_list += "
    • [count] [initial(item.name)]\s
    • " - . += {" -

      It can hold the following component types:

      -
        - [component_parts_list] -
      - "} - - if (silicon_restriction) - switch (silicon_restriction) - if (STATUS_UPDATE) - . += "

      Silicons are blocked from controlling it.

      " - if (STATUS_DISABLED, STATUS_CLOSE) - . += "

      Silicons are blocked from viewing or controlling it.

      " - - var/power_channel_name - switch (initial(power_channel)) - if (EQUIP) - power_channel_name = "Equipment" - if (LIGHT) - power_channel_name = "Lighting" - if (ENVIRON) - power_channel_name = "Environment" - if (LOCAL) - power_channel_name = "Local" - . += "

      By default, it draws power from the [power_channel_name] channel.

      " - - if (idle_power_usage && active_power_usage) - . += "

      It draws [idle_power_usage] watts while idle, and [active_power_usage] watts while active." - else if (idle_power_usage) - . += "

      It draws [idle_power_usage] watts while idle.

      " - else if (active_power_usage) - . += "

      It draws [active_power_usage] watts while active.

      " - - if (core_skill) - var/decl/hierarchy/skill/core_skill_decl = core_skill - . += "

      It utilizes the [initial(core_skill_decl.name)] skill.

      " - - var/wire_mechanics = wires?.get_mechanics_info() - if (wire_mechanics) - . += "
      Wiring
      [wire_mechanics]" - -// This is really pretty crap and should be overridden for specific machines. -/obj/machinery/water_act(depth) - ..() - if(!(stat & (NOPOWER|BROKEN)) && !waterproof && (depth > FLUID_DEEP)) - ex_act(EX_ACT_LIGHT) - -/obj/machinery/Move() - . = ..() - if(. && !CanFluidPass()) - fluid_update() - -/obj/machinery/get_cell() - var/obj/item/stock_parts/power/battery/battery = get_component_of_type(/obj/item/stock_parts/power/battery) - if(battery) - return battery.get_cell() - -/// Called by `/mob/Login()` if the mob has an associated `machine`. -/obj/machinery/proc/on_user_login(mob/M) - return - -/obj/machinery/wrench_floor_bolts(mob/user, delay) - . = ..() - var/area/A = get_area(src) - if(anchored) - A.machinery_list |= src - else - A.machinery_list -= src diff --git a/code/game/machinery/_machines_base/machinery_components.dm b/code/game/machinery/_machines_base/machinery_components.dm deleted file mode 100644 index 118b3dabaa26c..0000000000000 --- a/code/game/machinery/_machines_base/machinery_components.dm +++ /dev/null @@ -1,355 +0,0 @@ -// Init optimization. - -GLOBAL_LIST_INIT(machine_path_to_circuit_type, cache_circuits_by_build_path()) - -/proc/cache_circuits_by_build_path() - . = list() - for(var/board_path in subtypesof(/obj/item/stock_parts/circuitboard)) - var/obj/item/stock_parts/circuitboard/board = board_path //fake type - if(initial(board.buildtype_select)) - board = new board_path() - for(var/path in board.get_buildable_types()) - .[path] = board_path - continue - .[initial(board.build_path)] = board_path - -// Code concerning machinery interaction with components/stock parts. -/** - * Creates all components listed in `uncreated_component_parts`. - * `full_populate` also creates a circuitboard and all needed components. - */ -/obj/machinery/proc/populate_parts(full_populate = FALSE) - if(full_populate) - var/path_to_check = base_type || type - var/board_path = GLOB.machine_path_to_circuit_type[path_to_check] - if(board_path) - var/obj/item/stock_parts/circuitboard/board = install_component(board_path, refresh_parts = FALSE) - var/list/req_components = board.spawn_components || board.req_components - req_components = req_components.Copy() - if(board.additional_spawn_components) - req_components += board.additional_spawn_components - if(LAZYLEN(req_components)) - LAZYINITLIST(uncreated_component_parts) - for(var/type in req_components) - uncreated_component_parts[type] += (req_components[type] || 1) - - // Create the parts we are supposed to have. If not full_populate, this is only hard-baked parts, and more will be added later. - for(var/component_path in uncreated_component_parts) - var/number = uncreated_component_parts[component_path] || 1 - LAZYREMOVE(uncreated_component_parts, component_path) - for(var/i in 1 to number) - install_component(component_path, refresh_parts = FALSE) - - // Apply presets. If not full_populate, this is done later. - if(full_populate) - apply_component_presets() - -/obj/machinery/proc/apply_component_presets() - if(!stock_part_presets) - return - - var/list/processed_parts = list() - for(var/path in stock_part_presets) - var/decl/stock_part_preset/preset = decls_repository.get_decl(path) - var/number = stock_part_presets[path] || 1 - for(var/obj/item/stock_parts/part in component_parts) - if(processed_parts[part]) - continue // only apply one preset per part - if(istype(part, preset.expected_part_type)) - preset.apply(src, part) - processed_parts[part] = TRUE - number-- - if(number == 0) - break - -/// Returns the first valid preset decl for a given part, or `null` -/obj/machinery/proc/can_apply_preset_to(obj/item/stock_parts/part) - if(!stock_part_presets) - return - for(var/path in stock_part_presets) - var/decl/stock_part_preset/preset = decls_repository.get_decl(path) - if(istype(part, preset.expected_part_type)) - return preset - -// Applies the first valid preset to the given part. Returns preset applied, or null. -/obj/machinery/proc/apply_preset_to(obj/item/stock_parts/part) - var/decl/stock_part_preset/preset = can_apply_preset_to(part) - if(preset) - preset.apply(null, part) - return preset - -/// Returns a list of subtypes of the given component type, with associated value = number of that component. -/obj/machinery/proc/types_of_component(part_type) - . = list() - for(var/obj/component in component_parts) - if(istype(component, part_type)) - .[component.type]++ - for(var/path in uncreated_component_parts) - if(ispath(path, part_type)) - .[path] += uncreated_component_parts[path] - -/// Returns a component instance of the given `part_type`, or `null` if no such type is present. `strict` forces strict type comparisons and disallows subtypes. -/obj/machinery/proc/get_component_of_type(part_type, strict = FALSE) - if(strict) - for(var/obj/component in component_parts) - if(component.type == part_type) - return component - return force_init_component(part_type) - - . = locate(part_type) in component_parts - if(.) - return - for(var/path in uncreated_component_parts) - if(ispath(path, part_type)) - return force_init_component(path) - -/** - * Forces initialization of a component in the `uncreated_component_parts` list. - * Returns the result of `install_component()`, or `null` if the path does not exist in the list. - */ -/obj/machinery/proc/force_init_component(path) - if(!uncreated_component_parts[path]) - return - uncreated_component_parts[path]-- //bookkeeping to make sure tally is correct. - if(!uncreated_component_parts[path]) - LAZYREMOVE(uncreated_component_parts, path) - return install_component(path, TRUE) - -// Can be given a path or an instance. False will guarantee part creation. -// If an instance is given or created, it is returned, otherwise null is returned. -/obj/machinery/proc/install_component(obj/item/stock_parts/part, force = FALSE, refresh_parts = TRUE) - if(ispath(part)) - if(force || !(ispath(part, /obj/item/stock_parts) && initial(part.part_flags) & PART_FLAG_LAZY_INIT)) - part = new part(src) // Forced to make, or we don't lazy-init, so create. - - if(istype(part, /obj/item/stack)) // Compatibility with legacy construction code - var/obj/item/stack/stack = part - stack.amount = 1 - - . = part - else - part.forceMove(src) // Were given an instance to begin with. - . = part - - if(istype(part)) - LAZYADD(component_parts, part) - part.on_install(src) - GLOB.destroyed_event.register(part, src, .proc/component_destroyed) - else if(ispath(part)) - LAZYINITLIST(uncreated_component_parts) - uncreated_component_parts[part] += 1 - else // Wrong type - var/obj/item/stock_parts/building_material/material = get_component_of_type(/obj/item/stock_parts/building_material) - if(!material) - material = install_component(/obj/item/stock_parts/building_material, refresh_parts = FALSE) - material.add_material(part) - - if(refresh_parts) - RefreshParts() - -/** - * Uninstalls the provided component, if it exists in `component_parts`. - * `refresh_parts` will call `RefreshParts()` after uninstallation. - * Returns the uninstalled part. - */ -/obj/machinery/proc/uninstall_component(obj/item/stock_parts/part, refresh_parts = TRUE) - if(ispath(part)) - part = get_component_of_type(part) - else if(!(part in component_parts)) - return - - if(istype(part)) - part.on_uninstall(src) - LAZYREMOVE(component_parts, part) - if(refresh_parts) - RefreshParts() - if(QDELETED(part)) // unremovable stuff - return - part.dropInto(loc) - GLOB.destroyed_event.unregister(part, src) - return part - -/// Replaces a single component in the machine. -/obj/machinery/proc/replace_part(mob/user, obj/item/storage/part_replacer/part_replacer, obj/item/stock_parts/old_part, obj/item/stock_parts/new_part) - if(ispath(old_part)) - old_part = get_component_of_type(old_part, TRUE) - old_part = uninstall_component(old_part) - if(part_replacer) - part_replacer.remove_from_storage(new_part, src) - part_replacer.handle_item_insertion(old_part, TRUE) - install_component(new_part) - to_chat(user, SPAN_NOTICE("[old_part.name] replaced with [new_part.name].")) - -/// Handles destroying the provided component. `component` should be an item within the machine. -/obj/machinery/proc/component_destroyed(obj/item/component) - GLOB.destroyed_event.unregister(component, src) - LAZYREMOVE(component_parts, component) - LAZYREMOVE(processing_parts, component) - power_components -= component - -/// Returns the total combined component ratings for the provided `part_type`. -/obj/machinery/proc/total_component_rating_of_type(part_type) - . = 0 - for(var/thing in component_parts) - if(istype(thing, part_type)) - var/obj/item/stock_parts/part = thing - . += part.rating - for(var/path in uncreated_component_parts) - if(ispath(path, part_type)) - var/obj/item/stock_parts/comp = path - . += initial(comp.rating) * uncreated_component_parts[path] - -/// Returns the number of components of the given `part_type` currently installed in the machine. -/obj/machinery/proc/number_of_components(part_type) - if(!ispath(part_type, /obj/item/stock_parts)) - var/obj/item/stock_parts/building_material/material = get_component_of_type(/obj/item/stock_parts/building_material) - return material && material.number_of_type(part_type) - var/list/comps = types_of_component(part_type) - . = 0 - for(var/path in comps) - . += comps[path] - -/// Use to block interactivity if panel is not open, etc. `path` is the type path to check accessibility for. Returns boolean. -/obj/machinery/proc/components_are_accessible(path) - return panel_open - -/// Installation. Returns number of such components which can be inserted. -/obj/machinery/proc/can_add_component(obj/item/stock_parts/component, mob/user) - if(!istype(component)) // Random items. Only insert if actually needed. - var/list/missing = missing_parts() - for(var/path in missing) - if(istype(component, path)) - return missing[path] - return 0 - if(!(component.part_flags & PART_FLAG_HAND_REMOVE)) - return 0 - if(!components_are_accessible(component.type)) - to_chat(user, SPAN_WARNING("The insertion point for \the [component] is inaccessible!")) - return 0 - for(var/path in maximum_component_parts) - if(istype(component, path) && (number_of_components(path) == maximum_component_parts[path])) - to_chat(user, SPAN_WARNING("There are too many parts of this type installed in \the [src] already!")) - return 0 - return 1 - -/// Called whenever an attached component updates it's status. Override to handle updates to the machine. -/obj/machinery/proc/component_stat_change(obj/item/stock_parts/part, old_stat, flag) - -/obj/machinery/attackby(obj/item/I, mob/user) - if(component_attackby(I, user)) - return TRUE - return ..() - -/// Passes `attackby()` calls through to components within the machine, if they are accessible. -/obj/machinery/proc/component_attackby(obj/item/I, mob/user) - for(var/obj/item/stock_parts/part in component_parts) - if(!components_are_accessible(part.type)) - continue - if((. = part.attackby(I, user))) - return - return construct_state && construct_state.attackby(I, user, src) - -/// Passes `attack_hand()` calls through to components within the machine, if they are accessible. -/obj/machinery/proc/component_attack_hand(mob/user) - for(var/obj/item/stock_parts/part in component_parts) - if(!components_are_accessible(part.type)) - continue - if((. = part.attack_hand(user))) - return - return construct_state && construct_state.attack_hand(user, src) - -/* -Standard helpers for users interacting with machinery parts. -*/ - -/// Handles replacement of components by a user using a part replacer. Returns boolean. -/obj/machinery/proc/part_replacement(mob/user, obj/item/storage/part_replacer/part_replacer) - for(var/obj/item/stock_parts/component_part in component_parts) - if(!component_part.base_type) - continue - if(!(component_part.part_flags & PART_FLAG_HAND_REMOVE)) - continue - - for(var/obj/item/stock_parts/new_component_part in part_replacer.contents) - if(istype(new_component_part, component_part.base_type) && new_component_part.rating > component_part.rating) - replace_part(user, part_replacer, component_part, new_component_part) - . = TRUE - break - - for(var/path in uncreated_component_parts) - var/obj/item/stock_parts/component_part = path - var/part_count = uncreated_component_parts[path] - if(!(initial(component_part.part_flags) & PART_FLAG_HAND_REMOVE)) - continue - var/base_type = initial(component_part.base_type) - if(base_type) - for (var/i = 1 to part_count) - for(var/obj/item/stock_parts/new_component_part in part_replacer.contents) - if(istype(new_component_part, base_type) && new_component_part.rating > initial(component_part.rating)) - replace_part(user, part_replacer, component_part, new_component_part) - . = TRUE - break - - -/// Handles inserting a component or item into the machine by a user. Returns boolean. `TRUE` should halt further processing in `attack*()` procs. -/obj/machinery/proc/part_insertion(mob/user, obj/item/stock_parts/part) // Second argument may actually be an arbitrary item. - if(!user.canUnEquip(part) && !isstack(part)) - return FALSE - var/number = can_add_component(part, user) - if(!number) - return istype(part) // If it's not a stock part, we don't block further interactions; presumably the user meant to do something else. - if(isstack(part)) - var/obj/item/stack/stack = part - if (!stack.can_use(number)) - to_chat(user, SPAN_WARNING("You need at least [number] [stack.plural_name] to install into \the [src].")) - return FALSE - install_component(stack.split(number, TRUE)) - else - user.unEquip(part, src) - install_component(part) - user.visible_message( - SPAN_NOTICE("\The [user] installs \the [part] in \the [src]!"), - SPAN_NOTICE("You install \the [part] in \the [src]!") - ) - return TRUE - -/// Handles removal of a component by a user. Returns boolean. -/obj/machinery/proc/part_removal(mob/user) - var/list/removable_parts = list() - for(var/path in types_of_component(/obj/item/stock_parts)) - var/obj/item/stock_parts/part = path - if(!(initial(part.part_flags) & PART_FLAG_HAND_REMOVE)) - continue - if(components_are_accessible(path)) - removable_parts[initial(part.name)] = path - if(length(removable_parts)) - var/input = input(user, "Which part would you like to uninstall from \the [src]?", "Part Removal") as null|anything in removable_parts - if(!input || QDELETED(src) || !Adjacent(user) || user.incapacitated()) - return TRUE - var/path = removable_parts[input] - if(!path || !components_are_accessible(path)) - return TRUE - remove_part_and_give_to_user(path, user) - return TRUE - -/// Removes a part of the given `path` and places it in the hands of `user`. -/obj/machinery/proc/remove_part_and_give_to_user(path, mob/user) - var/obj/item/stock_parts/part = uninstall_component(get_component_of_type(path, TRUE)) - if(part) - user.put_in_hands(part) // Already dropped at loc, so that's the fallback. - user.visible_message( - SPAN_NOTICE("\The [user] removes \the [part] from \the [src]."), - SPAN_NOTICE("You remove \the [part] from \the [src].") - ) - -/// Returns a list of required components that are missing from the machine, or `null` if no components are missing or the machine lacks a `construct_state`. -/obj/machinery/proc/missing_parts() - if(!construct_state) - return - var/list/requirements = construct_state.get_requirements(src) - if(LAZYLEN(requirements)) - for(var/required_type in requirements) - var/needed = requirements[required_type] - var/present = number_of_components(required_type) - if(present < needed) - LAZYSET(., required_type, needed - present) diff --git a/code/game/machinery/_machines_base/machinery_power.dm b/code/game/machinery/_machines_base/machinery_power.dm deleted file mode 100644 index d99ba9b822464..0000000000000 --- a/code/game/machinery/_machines_base/machinery_power.dm +++ /dev/null @@ -1,160 +0,0 @@ -/* -This is /obj/machinery level code to properly manage power usage from the area. -*/ - -// Note that we update the area even if the area is unpowered. -#define REPORT_POWER_CONSUMPTION_CHANGE(old_power, new_power)\ - if(old_power != new_power){\ - var/area/A = get_area(src);\ - if(A) A.power_use_change(old_power, new_power, power_channel)} - -/** - * Returns `TRUE` if the area has power on given channel (or doesn't require power), defaults to `power_channel`. - * May also optionally specify an area, otherwise defaults to `loc.loc`. - */ -/obj/machinery/proc/powered(chan = POWER_CHAN, area/check_area = null) - - if(!loc) - return FALSE - - //Don't do this. It allows machines that set use_power to 0 when off (many machines) to - //be turned on again and used after a power failure because they never gain the NOPOWER flag. - //if(!use_power) - // return 1 - - if(!check_area) - check_area = loc.loc // make sure it's in an area - if(!check_area || !isarea(check_area)) - return FALSE // if not, then not powered - if(chan == POWER_CHAN) - chan = power_channel - return check_area.powered(chan) // return power status of the area - -// called whenever the power settings of the containing area change -// by default, check equipment channel & set flag can override if needed -// This is NOT for when the machine's own status changes; update_use_power for that. -/obj/machinery/proc/power_change() - if(stat_immune & NOPOWER) - return FALSE - var/oldstat = stat - stat |= NOPOWER - for(var/thing in power_components) - var/obj/item/stock_parts/power/power = thing - if((stat & NOPOWER) && power.can_provide_power(src)) - stat &= ~NOPOWER - else - power.not_needed(src) - - . = (stat != oldstat) - if(.) - queue_icon_update() - -/// Returns the current power usage draw, based on the state of `use_power`. -/obj/machinery/proc/get_power_usage() - switch(use_power) - if(POWER_USE_IDLE) - return idle_power_usage - if(POWER_USE_ACTIVE) - return active_power_usage - else - return 0 - -/** - * This will have this machine have its area eat this much power next tick, and not afterwards. Do not use for continued power draw. - * `chan` can be one of the possible values for `power_channel`, or `POWER_CHAN` to use the machine's current configured power channel. - */ -/obj/machinery/proc/use_power_oneoff(amount, chan = POWER_CHAN) - if(chan == POWER_CHAN) - chan = power_channel - . = amount - for(var/thing in power_components) - var/obj/item/stock_parts/power/power = thing - var/used = power.use_power_oneoff(src, ., chan) - . -= used - if(. <= 0) - return - -// Same as `use_power_oneoff()`, but dry run; doesn't actually do it. Useful for pre-operation checks. -/obj/machinery/proc/can_use_power_oneoff(amount, chan = POWER_CHAN) - if(chan == POWER_CHAN) - chan = power_channel - . = amount - for(var/thing in power_components) - var/obj/item/stock_parts/power/power = thing - var/used = power.can_use_power_oneoff(src, ., chan) - . -= used - if(. <= 0) - return - -// Do not do power stuff in New/Initialize until after ..() -/obj/machinery/Initialize() - REPORT_POWER_CONSUMPTION_CHANGE(0, get_power_usage()) - GLOB.moved_event.register(src, src, .proc/update_power_on_move) - power_init_complete = TRUE - . = ..() - -// Or in Destroy at all, but especially after the ..(). -/obj/machinery/Destroy() - GLOB.moved_event.unregister(src, src, .proc/update_power_on_move) - REPORT_POWER_CONSUMPTION_CHANGE(get_power_usage(), 0) - . = ..() - -/// Handles updating machinery power whenever the machine is moved. Calls `area_changed()` by default. -/obj/machinery/proc/update_power_on_move(atom/movable/mover, atom/old_loc, atom/new_loc) - area_changed(get_area(old_loc), get_area(new_loc)) - -/// Handles machinery power updates if the area the machine is in changes. Called by `update_power_on_move()`. -/obj/machinery/proc/area_changed(area/old_area, area/new_area) - if(old_area == new_area) - return - var/power = get_power_usage() - if(!power) - return // This is the most likely case anyway. - - if(old_area) - old_area.power_use_change(power, 0, power_channel) - if(new_area) - new_area.power_use_change(0, power, power_channel) - power_change() // Force check in case the old area was powered and the new one isn't or vice versa. - -// The three procs below are the only allowed ways of modifying the corresponding variables. -/// Updates the `use_power` variable to the new value and updates the machine's area's power grid. -/obj/machinery/proc/update_use_power(new_use_power) - if(!power_init_complete) - use_power = new_use_power - return // We'll be retallying anyway. - if(use_power == new_use_power) - return - var/old_power = get_power_usage() - use_power = new_use_power - var/new_power = get_power_usage() - REPORT_POWER_CONSUMPTION_CHANGE(old_power, new_power) - -/// Updates the machine's `power_channel` to the new value and updates the machine's area's power grid. -/obj/machinery/proc/update_power_channel(new_channel) - if(power_channel == new_channel) - return - if(!power_init_complete) - power_channel = new_channel - return - var/power = get_power_usage() - REPORT_POWER_CONSUMPTION_CHANGE(power, 0) - power_channel = new_channel - REPORT_POWER_CONSUMPTION_CHANGE(0, power) - -/// Updates the machine's `*_power_usage` to the new value and updates the machine's current power consumption state if applicable. -/obj/machinery/proc/change_power_consumption(new_power_consumption, use_power_mode = POWER_USE_IDLE) - var/old_power - switch(use_power_mode) - if(POWER_USE_IDLE) - old_power = idle_power_usage - idle_power_usage = new_power_consumption - if(POWER_USE_ACTIVE) - old_power = active_power_usage - active_power_usage = new_power_consumption - else - return - if(power_init_complete && (use_power_mode == use_power)) - REPORT_POWER_CONSUMPTION_CHANGE(old_power, new_power_consumption) - -#undef REPORT_POWER_CONSUMPTION_CHANGE diff --git a/code/game/machinery/_machines_base/machinery_public_vars.dm b/code/game/machinery/_machines_base/machinery_public_vars.dm deleted file mode 100644 index 87c481ea4f217..0000000000000 --- a/code/game/machinery/_machines_base/machinery_public_vars.dm +++ /dev/null @@ -1,112 +0,0 @@ -/decl/public_access - var/name - var/desc - -/decl/public_access/public_variable - var/expected_type - var/can_write = FALSE - var/var_type = IC_FORMAT_BOOLEAN // Reuses IC defines for better compatibility. - - var/has_updates = FALSE // Can register listeners for updates on change. - var/list/listeners = list() - -/* -Must be implemented by subtypes. -*/ - -// Reads off the var value and returns it -/decl/public_access/public_variable/proc/access_var(datum/owner) - -// Writes to the var. Returns true if change occured, false otherwise. -// Subtypes shall call parent, and perform the actual write if the return value is true. -// If the var has_updates, you must never modify the var except through this proc. -/decl/public_access/public_variable/proc/write_var(datum/owner, new_value) - var/old_value = access_var(owner) - if(old_value == new_value) - return FALSE - if(has_updates) - var_changed(owner, old_value, new_value) - return TRUE - -// Any sanitization should be done in here. -/decl/public_access/public_variable/proc/write_var_protected(datum/owner, new_value) - if(!can_write) - return FALSE - write_var(owner, new_value) - -/* -Listener registration. You must unregister yourself if you are destroyed; the owner being destroyed will be handled automatically. -*/ - -/decl/public_access/public_variable/proc/register_listener(datum/listener, datum/owner, registered_proc) - . = FALSE - if(!istype(owner, expected_type)) - CRASH("[log_info_line(listener)] attempted to register for the public variable [type], but passed an invalid owner of type [owner.type].") - if(!has_updates) - return // Can try and register, but updates aren't coming - if(!listeners[owner]) - listeners[owner] = list() - GLOB.destroyed_event.register(owner, src, .proc/owner_destroyed) - LAZYADD(listeners[owner][listener], registered_proc) - return TRUE - -/decl/public_access/public_variable/proc/unregister_listener(datum/listener, datum/owner, registered_proc) - if(!listeners[owner]) - return - if(!listeners[owner][listener]) - return - - if(registered_proc) // Remove the proc and remove the listener if no more procs - listeners[owner][listener] -= registered_proc - if(!length(listeners[owner][listener])) - listeners[owner] -= listener - else // Remove the listener - listeners[owner] -= listener - - if(!length(listeners[owner])) // Clean up the list if no longer listening to anything. - listeners -= owner - GLOB.destroyed_event.unregister(owner, src) - -/* -Internal procs. Do not modify. -*/ - -/decl/public_access/public_variable/proc/owner_destroyed(datum/owner) - GLOB.destroyed_event.unregister(owner, src) - listeners -= owner - -/decl/public_access/public_variable/proc/var_changed(owner, old_value, new_value) - var/list/to_alert = listeners[owner] - for(var/thing in to_alert) - for(var/call_proc in to_alert[thing]) - call(thing, call_proc)(src, owner, old_value, new_value) - -/* -Public methods machines can expose. Pretty bare-bones; just wraps a proc and gives it a name for UI purposes. -*/ - -/decl/public_access/public_method - var/call_proc - var/forward_args = FALSE - -/decl/public_access/public_method/proc/perform(datum/owner, ...) - if(forward_args) - call(owner, call_proc)(arglist(args.Copy(2))) - else - call(owner, call_proc)() - -/* -Machinery implementation -*/ - -/// List of all registered `public_variable` decls. -/obj/machinery/var/list/public_variables -/// List of all registered `public_method` decls. -/obj/machinery/var/list/public_methods - -/obj/machinery/Initialize() - for(var/path in public_variables) - public_variables[path] = decls_repository.get_decl(path) - for(var/path in public_methods) - public_methods[path] = decls_repository.get_decl(path) - . = ..() diff --git a/code/game/machinery/_machines_base/machinery_public_vars_common.dm b/code/game/machinery/_machines_base/machinery_public_vars_common.dm deleted file mode 100644 index 00d5a168ec6f4..0000000000000 --- a/code/game/machinery/_machines_base/machinery_public_vars_common.dm +++ /dev/null @@ -1,117 +0,0 @@ -/* -Public vars at /obj/machinery level. Just because they are here does not mean that every machine exposes them; you must add them to the appropriate list. -*/ - -/// Stores the on/off state of an input toggle. Used for the `input_toggle` public variable. -/obj/machinery/var/input_toggle = FALSE -/// Stores the identifier string of an input toggle. Used for the `input_toggle` public variable. -/obj/machinery/var/identifier = "" - -/decl/public_access/public_variable/input_toggle - expected_type = /obj/machinery - name = "input toggle" - desc = "The input toggle variable does not do anything by itself. This makes it useful for having receivers trigger transmitters. Can be toggled by a public method." - can_write = FALSE - has_updates = TRUE - -/decl/public_access/public_variable/input_toggle/access_var(obj/machinery/machine) - return machine.input_toggle - -/decl/public_access/public_variable/input_toggle/write_var(obj/machinery/machine, new_value) - . = ..() - if(.) - machine.input_toggle = new_value - -/decl/public_access/public_method/toggle_input_toggle - name = "toggle input" - desc = "Toggles the input toggle variable." - call_proc = /obj/machinery/proc/toggle_input_toggle - -/// Handles toggling the machine's toggle variable. Used by the `toggle_input_toggle` public method. -/obj/machinery/proc/toggle_input_toggle() - var/decl/public_access/public_variable/variable = decls_repository.get_decl(/decl/public_access/public_variable/input_toggle) - variable.write_var(src, !input_toggle) - -/decl/public_access/public_variable/area_uid - expected_type = /obj/machinery - name = "area id" - desc = "An automatically generated area id, if this machine is tied to an area controller." - can_write = FALSE - has_updates = FALSE - var_type = IC_FORMAT_STRING - -/decl/public_access/public_variable/area_uid/access_var(obj/machinery/machine) - return machine.area_uid() - -/// Retrieves the unique id of the machine's current area. -/obj/machinery/proc/area_uid() - var/area/A = get_area(src) - return A ? A.uid : "NONE" - -/decl/public_access/public_variable/identifier - expected_type = /obj/machinery - name = "type identifier" - desc = "A generic variable intended to give machines a text designator to sort them into categories by function." - can_write = TRUE - has_updates = TRUE - var_type = IC_FORMAT_STRING - -/decl/public_access/public_variable/identifier/access_var(obj/machinery/machine) - return machine.identifier - -/decl/public_access/public_variable/identifier/write_var(obj/machinery/machine, new_value) - . = ..() - if(.) - machine.identifier = new_value - -/decl/public_access/public_variable/use_power - expected_type = /obj/machinery - name = "power use code" - desc = "Whether the machine is off (0) or on (positive). Some machines have multiple power states. Writing to this variable may turn the machine off or on." - can_write = TRUE - has_updates = FALSE - var_type = IC_FORMAT_NUMBER - -/decl/public_access/public_variable/use_power/access_var(obj/machinery/machine) - return machine.use_power - -/decl/public_access/public_variable/use_power/write_var(obj/machinery/machine, new_value) - if(!(new_value in list(POWER_USE_OFF, POWER_USE_IDLE, POWER_USE_ACTIVE))) - return FALSE - . = ..() - if(.) - machine.update_use_power(new_value) - -/decl/public_access/public_variable/name - expected_type = /obj/machinery - name = "name" - desc = "The machine's name." - can_write = TRUE - has_updates = FALSE - var_type = IC_FORMAT_STRING - -/decl/public_access/public_variable/name/access_var(obj/machinery/machine) - return machine.name - -/decl/public_access/public_variable/name/write_var(obj/machinery/machine, new_value) - . = ..() - if(.) - machine.SetName(new_value) - -/decl/public_access/public_method/toggle_power - name = "toggle power" - desc = "Turns the machine on or off." - call_proc = /obj/machinery/proc/toggle_power - -/// Toggles the machine's power state. Used by the `toggle_power` public method. -/obj/machinery/proc/toggle_power() - update_use_power(!use_power) - -/decl/public_access/public_method/refresh - name = "refresh machine" - desc = "Attempts to refresh the machine's status. Implementation may vary." - call_proc = /obj/machinery/proc/refresh - -/// Refreshes the machine's status. Used by the `refresh` public method. -/obj/machinery/proc/refresh() - queue_icon_update() diff --git a/code/game/machinery/_machines_base/stock_parts/_stock_parts.dm b/code/game/machinery/_machines_base/stock_parts/_stock_parts.dm deleted file mode 100644 index 4d78911be3993..0000000000000 --- a/code/game/machinery/_machines_base/stock_parts/_stock_parts.dm +++ /dev/null @@ -1,62 +0,0 @@ -/obj/item/stock_parts - name = "stock part" - desc = "What?" - gender = NEUTER - icon = 'icons/obj/stock_parts.dmi' - randpixel = 5 - w_class = ITEM_SIZE_SMALL - var/part_flags = PART_FLAG_LAZY_INIT | PART_FLAG_HAND_REMOVE - var/rating = 1 - var/status = 0 // Flags using PART_STAT defines. - var/base_type // Type representing parent of category for replacer usage. - -/obj/item/stock_parts/attack_hand(mob/user) - if(istype(loc, /obj/machinery)) - return FALSE // Can potentially add uninstall code here, but not currently supported. - return ..() - -/obj/item/stock_parts/proc/set_status(var/obj/machinery/machine, var/flag) - var/old_stat = status - status |= flag - if(old_stat != status) - if(!machine) - machine = loc - if(istype(machine)) - machine.component_stat_change(src, old_stat, flag) - -/obj/item/stock_parts/proc/unset_status(var/obj/machinery/machine, var/flag) - var/old_stat = status - status &= ~flag - if(old_stat != status) - if(!machine) - machine = loc - if(istype(machine)) - machine.component_stat_change(src, old_stat, flag) - -/obj/item/stock_parts/proc/on_install(var/obj/machinery/machine) - set_status(machine, PART_STAT_INSTALLED) - -/obj/item/stock_parts/proc/on_uninstall(var/obj/machinery/machine, var/temporary = FALSE) - unset_status(machine, PART_STAT_INSTALLED) - stop_processing(machine) - if(!temporary && (part_flags & PART_FLAG_QDEL)) - qdel(src) - -// Use to process on the machine it's installed on. - -/obj/item/stock_parts/proc/start_processing(var/obj/machinery/machine) - LAZYDISTINCTADD(machine.processing_parts, src) - START_PROCESSING_MACHINE(machine, MACHINERY_PROCESS_COMPONENTS) - set_status(machine, PART_STAT_PROCESSING) - -/obj/item/stock_parts/proc/stop_processing(var/obj/machinery/machine) - LAZYREMOVE(machine.processing_parts, src) - if(!LAZYLEN(machine.processing_parts)) - STOP_PROCESSING_MACHINE(machine, MACHINERY_PROCESS_COMPONENTS) - unset_status(machine, PART_STAT_PROCESSING) - -/obj/item/stock_parts/proc/machine_process(var/obj/machinery/machine) - return PROCESS_KILL - -// RefreshParts has been called, likely meaning other componenets were added/removed. -/obj/item/stock_parts/proc/on_refresh(var/obj/machinery/machine) \ No newline at end of file diff --git a/code/game/machinery/_machines_base/stock_parts/building_material.dm b/code/game/machinery/_machines_base/stock_parts/building_material.dm deleted file mode 100644 index 9ae84491e207a..0000000000000 --- a/code/game/machinery/_machines_base/stock_parts/building_material.dm +++ /dev/null @@ -1,57 +0,0 @@ -// Shim for non-stock_parts machine components -/obj/item/stock_parts/building_material - name = "building materials" - desc = "Various standard wires, pipes, and other materials." - icon = 'icons/obj/power.dmi' - icon_state = "coil" - part_flags = PART_FLAG_QDEL - var/list/materials - -/obj/item/stock_parts/building_material/Destroy() - QDEL_NULL_LIST(materials) - . = ..() - -/obj/item/stock_parts/building_material/proc/number_of_type(var/type) - . = 0 - for(var/obj/item/thing in materials) - if(istype(thing, type)) - if(isstack(thing)) - var/obj/item/stack/stack = thing - . += stack.amount - else - .++ - -/obj/item/stock_parts/building_material/proc/add_material(var/obj/item/new_material) - if(istype(new_material, /obj/item/stack)) - var/obj/item/stack/stack = new_material - for(var/obj/item/stack/old_stack in materials) - if(stack.transfer_to(old_stack) && QDELETED(stack)) - return - LAZYADD(materials, new_material) - new_material.forceMove(null) - -// amount will cap the amount given in a stack, but may return less than amount specified. -/obj/item/stock_parts/building_material/proc/remove_material(material_type, amount) - if(ispath(material_type, /obj/item/stack)) - for(var/obj/item/stack/stack in materials) - if(stack.stacktype == material_type) - var/stack_amount = stack.get_amount() - if(stack_amount <= amount) - materials -= stack - stack.dropInto(loc) - amount -= stack_amount - return stack - var/obj/item/stack/new_stack = stack.split(amount) - new_stack.dropInto(loc) - return new_stack - for(var/obj/item/item in materials) - if(istype(item, material_type)) - materials -= item - item.dropInto(loc) - return item - -/obj/item/stock_parts/building_material/on_uninstall(var/obj/machinery/machine) - for(var/obj/item/I in materials) - I.dropInto(loc) - materials = null - ..() \ No newline at end of file diff --git a/code/game/machinery/_machines_base/stock_parts/legacy_parts.dm b/code/game/machinery/_machines_base/stock_parts/legacy_parts.dm deleted file mode 100644 index 8e05f7147e2bd..0000000000000 --- a/code/game/machinery/_machines_base/stock_parts/legacy_parts.dm +++ /dev/null @@ -1,191 +0,0 @@ -//Rank 1 - -/obj/item/stock_parts/scanning_module - name = "scanning module" - desc = "A compact, high resolution scanning module used in the construction of certain devices." - icon_state = "scan_module" - origin_tech = list(TECH_MAGNET = 1) - matter = list(MATERIAL_STEEL = 50,MATERIAL_GLASS = 20) - base_type = /obj/item/stock_parts/scanning_module - -/obj/item/stock_parts/manipulator - name = "micro-manipulator" - desc = "A tiny little manipulator used in the construction of certain devices." - icon_state = "micro_mani" - origin_tech = list(TECH_MATERIAL = 1, TECH_DATA = 1) - matter = list(MATERIAL_STEEL = 30) - base_type = /obj/item/stock_parts/manipulator - -/obj/item/stock_parts/micro_laser - name = "micro-laser" - desc = "A tiny laser used in certain devices." - icon_state = "micro_laser" - origin_tech = list(TECH_MAGNET = 1) - matter = list(MATERIAL_STEEL = 10,MATERIAL_GLASS = 20) - base_type = /obj/item/stock_parts/micro_laser - -/obj/item/stock_parts/matter_bin - name = "matter bin" - desc = "A container for hold compressed matter awaiting re-construction." - icon_state = "matter_bin" - origin_tech = list(TECH_MATERIAL = 1) - matter = list(MATERIAL_STEEL = 80) - base_type = /obj/item/stock_parts/matter_bin - -/obj/item/stock_parts/capacitor - name = "capacitor" - desc = "A basic capacitor used in the construction of a variety of devices." - icon_state = "capacitor" - origin_tech = list(TECH_POWER = 1) - matter = list(MATERIAL_STEEL = 50,MATERIAL_GLASS = 50) - var/charge = 0 - var/max_charge = 1000 - base_type = /obj/item/stock_parts/capacitor - -/obj/item/stock_parts/capacitor/Initialize() - . = ..() - max_charge *= rating - -/obj/item/stock_parts/capacitor/proc/charge(var/amount) - charge += amount - if(charge > max_charge) - charge = max_charge - -/obj/item/stock_parts/capacitor/proc/use(var/amount) - if(charge) - charge -= amount - if(charge < 0) - charge = 0 - -//Rank 2 - -/obj/item/stock_parts/scanning_module/adv - name = "advanced scanning module" - desc = "A compact, high resolution scanning module used in the construction of certain devices." - icon_state = "advanced_scan_module" - origin_tech = list(TECH_MAGNET = 3) - rating = 2 - matter = list(MATERIAL_STEEL = 50,MATERIAL_GLASS = 20) - -/obj/item/stock_parts/manipulator/nano - name = "nano-manipulator" - desc = "A tiny little manipulator used in the construction of certain devices." - icon_state = "nano_mani" - origin_tech = list(TECH_MATERIAL = 3, TECH_DATA = 2) - rating = 2 - matter = list(MATERIAL_STEEL = 30) - -/obj/item/stock_parts/micro_laser/high - name = "high-power micro-laser" - desc = "A tiny laser used in certain devices." - icon_state = "high_micro_laser" - origin_tech = list(TECH_MAGNET = 3) - rating = 2 - matter = list(MATERIAL_STEEL = 10,MATERIAL_GLASS = 20) - -/obj/item/stock_parts/matter_bin/adv - name = "advanced matter bin" - desc = "A container for hold compressed matter awaiting re-construction." - icon_state = "advanced_matter_bin" - origin_tech = list(TECH_MATERIAL = 3) - rating = 2 - matter = list(MATERIAL_STEEL = 80) - -/obj/item/stock_parts/capacitor/adv - name = "advanced capacitor" - desc = "An advanced capacitor used in the construction of a variety of devices." - icon_state = "advanced_capacitor" - origin_tech = list(TECH_POWER = 3) - rating = 2 - -//Rating 3 - -/obj/item/stock_parts/scanning_module/phasic - name = "phasic scanning module" - desc = "A compact, high resolution phasic scanning module used in the construction of certain devices." - icon_state = "phasic_scan_module" - origin_tech = list(TECH_MAGNET = 5) - rating = 3 - matter = list(MATERIAL_STEEL = 50,MATERIAL_GLASS = 20) - -/obj/item/stock_parts/manipulator/pico - name = "pico-manipulator" - desc = "A tiny little manipulator used in the construction of certain devices." - icon_state = "pico_mani" - origin_tech = list(TECH_MATERIAL = 5, TECH_DATA = 2) - rating = 3 - matter = list(MATERIAL_STEEL = 30) - -/obj/item/stock_parts/micro_laser/ultra - name = "ultra-high-power micro-laser" - icon_state = "ultra_high_micro_laser" - desc = "A tiny laser used in certain devices." - origin_tech = list(TECH_MAGNET = 5) - rating = 3 - matter = list(MATERIAL_STEEL = 10,MATERIAL_GLASS = 20) - -/obj/item/stock_parts/matter_bin/super - name = "super matter bin" - desc = "A container for hold compressed matter awaiting re-construction." - icon_state = "super_matter_bin" - origin_tech = list(TECH_MATERIAL = 5) - rating = 3 - matter = list(MATERIAL_STEEL = 80) - -/obj/item/stock_parts/capacitor/super - name = "super capacitor" - desc = "A super-high capacity capacitor used in the construction of a variety of devices." - icon_state = "super_capacitor" - origin_tech = list(TECH_POWER = 5, TECH_MATERIAL = 4) - rating = 3 - -// Subspace stock parts - -/obj/item/stock_parts/subspace/ansible - name = "subspace ansible" - icon_state = "subspace_ansible" - desc = "A compact module capable of sensing extradimensional activity." - origin_tech = list(TECH_DATA = 3, TECH_MAGNET = 5 ,TECH_MATERIAL = 4, TECH_BLUESPACE = 2) - matter = list(MATERIAL_STEEL = 30,MATERIAL_GLASS = 10) - -/obj/item/stock_parts/subspace/filter - name = "hyperwave filter" - icon_state = "hyperwave_filter" - desc = "A tiny device capable of filtering and converting super-intense radiowaves." - origin_tech = list(TECH_DATA = 4, TECH_MAGNET = 2) - matter = list(MATERIAL_STEEL = 30,MATERIAL_GLASS = 10) - -/obj/item/stock_parts/subspace/amplifier - name = "subspace amplifier" - icon_state = "subspace_amplifier" - desc = "A compact micro-machine capable of amplifying weak subspace transmissions." - origin_tech = list(TECH_DATA = 3, TECH_MAGNET = 4, TECH_MATERIAL = 4, TECH_BLUESPACE = 2) - matter = list(MATERIAL_STEEL = 30,MATERIAL_GLASS = 10) - -/obj/item/stock_parts/subspace/treatment - name = "subspace treatment disk" - icon_state = "treatment_disk" - desc = "A compact micro-machine capable of stretching out hyper-compressed radio waves." - origin_tech = list(TECH_DATA = 3, TECH_MAGNET = 2, TECH_MATERIAL = 5, TECH_BLUESPACE = 2) - matter = list(MATERIAL_STEEL = 30,MATERIAL_GLASS = 10) - -/obj/item/stock_parts/subspace/analyzer - name = "subspace wavelength analyzer" - icon_state = "wavelength_analyzer" - desc = "A sophisticated analyzer capable of analyzing cryptic subspace wavelengths." - origin_tech = list(TECH_DATA = 3, TECH_MAGNET = 4, TECH_MATERIAL = 4, TECH_BLUESPACE = 2) - matter = list(MATERIAL_STEEL = 30,MATERIAL_GLASS = 10) - -/obj/item/stock_parts/subspace/crystal - name = "ansible crystal" - icon_state = "ansible_crystal" - desc = "A crystal made from pure glass used to transmit laser databursts to subspace." - origin_tech = list(TECH_MAGNET = 4, TECH_MATERIAL = 4, TECH_BLUESPACE = 2) - matter = list(MATERIAL_GLASS = 50) - -/obj/item/stock_parts/subspace/transmitter - name = "subspace transmitter" - icon_state = "subspace_transmitter" - desc = "A large piece of equipment used to open a window into the subspace dimension." - origin_tech = list(TECH_MAGNET = 5, TECH_MATERIAL = 5, TECH_BLUESPACE = 3) - matter = list(MATERIAL_STEEL = 50) \ No newline at end of file diff --git a/code/game/machinery/_machines_base/stock_parts/power/battery.dm b/code/game/machinery/_machines_base/stock_parts/power/battery.dm deleted file mode 100644 index 3880e94901d07..0000000000000 --- a/code/game/machinery/_machines_base/stock_parts/power/battery.dm +++ /dev/null @@ -1,226 +0,0 @@ -/obj/item/stock_parts/power/battery - name = "battery backup" - desc = "A self-contained battery backup system, using replaceable cells to provide backup power." - icon_state = "battery0" - var/obj/item/cell/cell - var/charge_channel = ENVIRON // The channel it attempts to charge from. - var/charge_rate = 1 // This is in battery units, per tick. - var/can_charge = TRUE - var/charge_wait_counter = 10 // How many ticks we wait until we start charging after charging becomes an option. - var/last_cell_charge = 0 // Used for UI stuff. - var/seek_alternatives = 5 // How many ticks we wait before seeking other power sources, if we can provide the machine with power. Set to 0 to never do this. - -/obj/item/stock_parts/power/battery/Destroy() - qdel(cell) - . = ..() - -/obj/item/stock_parts/power/battery/on_install(var/obj/machinery/machine) - ..() - start_processing(machine) - -/obj/item/stock_parts/power/battery/on_uninstall(var/obj/machinery/machine) - if(status & PART_STAT_ACTIVE) - machine.update_power_channel(cached_channel) - unset_status(machine, PART_STAT_ACTIVE) - if(cell && (part_flags & PART_FLAG_QDEL)) - cell.dropInto(loc) - remove_cell() - ..() - -// None of these helpers actually change the cell's loc. They only manage internal references and state. -/obj/item/stock_parts/power/battery/proc/add_cell(var/obj/machinery/machine, var/obj/item/cell/new_cell) - if(cell) - return - cell = new_cell - GLOB.destroyed_event.register(cell, src, .proc/remove_cell) - if(!machine) - machine = loc - if(istype(machine)) - machine.power_change() - machine.queue_icon_update() - set_status(machine, PART_STAT_CONNECTED) - update_icon() - return cell - -/obj/item/stock_parts/power/battery/proc/remove_cell() - if(cell) - GLOB.destroyed_event.unregister(cell, src) - . = cell - cell = null - var/obj/machinery/machine = loc - if(istype(machine)) - machine.power_change() - machine.queue_icon_update() - update_icon() - unset_status(machine, PART_STAT_CONNECTED) - -/obj/item/stock_parts/power/battery/proc/extract_cell(mob/user) - if(!cell) - return - cell.add_fingerprint(user) - cell.update_icon() - - user.visible_message("\The [user] removes the power cell from [src]!",\ - "You remove the power cell.") - . = remove_cell() - var/obj/machinery/machine = loc - if(machine) - machine.update_icon() - -/obj/item/stock_parts/power/battery/machine_process(var/obj/machinery/machine) - last_cell_charge = cell && cell.charge - - if(status & PART_STAT_ACTIVE) - if(!(cell && cell.checked_use(CELLRATE * machine.get_power_usage()))) - machine.update_power_channel(cached_channel) - machine.power_change() // Out of power - return - if(seek_alternatives > 0) - seek_alternatives-- - if(!seek_alternatives) - seek_alternatives = initial(seek_alternatives) - machine.update_power_channel(cached_channel) - machine.power_change() - return // We don't recharge if discharging - - if((machine.stat & NOPOWER) && cell && cell.fully_charged()) - machine.power_change() - return // This suggests that we should be powering the machine instead, so let's try that - - // try and recharge - var/area/A = get_area(machine) - if(!can_charge || !cell || cell.fully_charged() || !A.powered(charge_channel)) - charge_wait_counter = initial(charge_wait_counter) - return - if(charge_wait_counter > 0) - charge_wait_counter-- - return - var/give = cell.give(charge_rate) / CELLRATE - A.use_power_oneoff(give, charge_channel) - -/obj/item/stock_parts/power/battery/can_provide_power(var/obj/machinery/machine) - if(cell && cell.check_charge(CELLRATE * machine.get_power_usage())) - machine.update_power_channel(LOCAL) - set_status(machine, PART_STAT_ACTIVE) - return TRUE - return FALSE - -/obj/item/stock_parts/power/battery/can_use_power_oneoff(var/obj/machinery/machine, var/amount, var/channel) - . = 0 - if(cell && channel == LOCAL) - return min(cell.charge / CELLRATE, amount) - -/obj/item/stock_parts/power/battery/use_power_oneoff(var/obj/machinery/machine, var/amount, var/channel) - . = 0 - if(cell && channel == LOCAL) - . = cell.use(amount * CELLRATE) / CELLRATE - charge_wait_counter = initial(charge_wait_counter) // If we are providing power, we wait to start charging. - -/obj/item/stock_parts/power/battery/not_needed(var/obj/machinery/machine) - if(status & PART_STAT_ACTIVE) - unset_status(machine, PART_STAT_ACTIVE) - charge_wait_counter = initial(charge_wait_counter) - -// Find a cell from the machine building materials if possible. -/obj/item/stock_parts/power/battery/on_refresh(var/obj/machinery/machine) - if(machine && !cell) - var/obj/item/stock_parts/building_material/mat = machine.get_component_of_type(/obj/item/stock_parts/building_material) - var/obj/item/cell/cell = mat && mat.remove_material(/obj/item/cell, 1) - if(cell) - add_cell(machine, cell) - cell.forceMove(src) - charge_rate = initial(charge_rate) - charge_rate *= 1 + 0.5 * machine.total_component_rating_of_type(/obj/item/stock_parts/capacitor) - -/obj/item/stock_parts/power/battery/on_update_icon() - icon_state = "battery[!!cell]" - -// Cell interaction -/obj/item/stock_parts/power/battery/attackby(obj/item/I, mob/user) - var/obj/machinery/machine = loc - - // Interactions with/without machine - if(istype(I, /obj/item/cell)) - if(cell) - to_chat(user, "There is a power cell already installed.") - return TRUE - if(istype(machine) && (machine.stat & MAINT)) - to_chat(user, "There is no connector for your power cell.") - return TRUE - if(I.w_class != ITEM_SIZE_NORMAL) - to_chat(user, "\The [I] is too [I.w_class < ITEM_SIZE_NORMAL? "small" : "large"] to fit here.") - return TRUE - - if(!user.unEquip(I, src)) - return - add_cell(machine, I) - user.visible_message(\ - SPAN_WARNING("\The [user] has inserted the power cell to \the [src]!"),\ - SPAN_NOTICE("You insert the power cell.")) - return TRUE - - // Interactions without machine - if(!istype(machine)) - return ..() - -/obj/item/stock_parts/power/battery/attack_self(mob/user) - if(cell) - user.put_in_hands(cell) - extract_cell(user) - return TRUE - return ..() - -/obj/item/stock_parts/power/battery/attack_hand(mob/user) - if(cell && istype(loc, /obj/machinery)) - user.put_in_hands(cell) - extract_cell(user) - return TRUE - return ..() - -/obj/item/stock_parts/power/battery/get_cell() - return cell - -/obj/item/stock_parts/power/battery/buildable - part_flags = PART_FLAG_HAND_REMOVE - matter = list(MATERIAL_STEEL = 400) - -/obj/item/stock_parts/power/battery/buildable/crap - name = "battery backup (weak)" - desc = "The NanoTrasen BAT84 is an all-in-one battery backup system sold at an affordable price." - matter = list(MATERIAL_STEEL = 100) - charge_rate = 0.25 - charge_wait_counter = 15 - -/obj/item/stock_parts/power/battery/buildable/crap/get_lore_info() - return "The NanoTrasen BAT84's debut on the battery backup market was greeted by universally negative reviews, \ - highlighting its slow recharge rate and exceptional lack of responsiveness to power changes.\ - Nevertheless, it has been steadily gaining market share due to rock-bottom prices and a predatory marketing campaign." - -/obj/item/stock_parts/power/battery/buildable/stock - name = "battery backup (standard)" - desc = "The Hephaestus 3006915, or, as this part is colloquially known, model 15, is the workhorse battery backup solution of populated space." - -/obj/item/stock_parts/power/battery/buildable/stock/get_lore_info() - return "After several failed attempts, Hephaestus hit a best-selling component in the model 15. \ - Combining tolerable recharge rate and high durability into a conveniently shaped package, it has dominated the market for over three decades." - -/obj/item/stock_parts/power/battery/buildable/turbo - name = "battery backup (rapid)" - desc = "The Ward-Takahashi Xcharge state-of-the-art battery backup claims to charge over ten times as fast as its competitors." - charge_rate = 5 - matter = list(MATERIAL_STEEL = 1000, MATERIAL_ALUMINIUM = 400, MATERIAL_PLASTIC = 400) - -/obj/item/stock_parts/power/battery/buildable/turbo/get_lore_info() - return "Ward-Takahashi GMB's latest battery charging technology deploys advanced composites and semiorganic interfaces to attain previously unheard-of charge rates. \ - Their marketing division, on the other hand, has been engaged in seeminly endless lawsuits over false advertising, having allegedly overstated said rates." - -/obj/item/stock_parts/power/battery/buildable/responsive - name = "battery backup (responsive)" - desc = "The Focal Point FOXUS is a battery backup device marketed for its fast startup time." - charge_wait_counter = 2 - charge_rate = 0.8 - matter = list(MATERIAL_STEEL = 400, MATERIAL_ALUMINIUM = 400, MATERIAL_PLASTIC = 400) - -/obj/item/stock_parts/power/battery/buildable/responsive/get_lore_info() - return "Unable to compete on price with the larger conglomerates, Focal Point's FOXUS instead sacrifices a bit of charge rate for drastically better responsiveness. \ - While an instant cult classic in the high-performance market, the FOXUS's bewildering name, lackluster marketing effort, and steep price have kept it from becoming a household name." \ No newline at end of file diff --git a/code/game/machinery/_machines_base/stock_parts/power/power.dm b/code/game/machinery/_machines_base/stock_parts/power/power.dm deleted file mode 100644 index 3a50c9286e085..0000000000000 --- a/code/game/machinery/_machines_base/stock_parts/power/power.dm +++ /dev/null @@ -1,37 +0,0 @@ -// Power component for machines. Handles power interactions. - -/// List of all machine components that are of the `power` subtype. This is an optimization, as power code is expensive. -/obj/machinery/var/list/power_components = list() - -/obj/item/stock_parts/power - part_flags = PART_FLAG_QDEL // For integrated components, which are built from uncreated_component_parts. Use subtypes with this off for buildable ones. - icon = 'icons/obj/stock_parts.dmi' - icon_state = "teslalink" - var/priority = 0 // Higher priority is used first - var/cached_channel - -/obj/item/stock_parts/power/on_install(var/obj/machinery/machine) - ..() - ADD_SORTED(machine.power_components, src, /proc/cmp_power_component_priority) - machine.power_change() // Makes the machine recompute its power status. - cached_channel = initial(machine.power_channel) - -/obj/item/stock_parts/power/on_uninstall(var/obj/machinery/machine) - machine.power_components -= src - ..() - machine.power_change() - -// By returning true here, the part promises that it will provide the machine with power until it calls power_change on the machine. -/obj/item/stock_parts/power/proc/can_provide_power(var/obj/machinery/machine) - return FALSE - -// Doesn't actually do it. -/obj/item/stock_parts/power/proc/can_use_power_oneoff(var/obj/machinery/machine, var/amount, var/channel) - return 0 - -// A request for the amount of power on the given channel. Returns the amount of power which could be provided. -/obj/item/stock_parts/power/proc/use_power_oneoff(var/obj/machinery/machine, var/amount, var/channel) - return 0 - -// This alerts the part that it does not need to provide power anymore. -/obj/item/stock_parts/power/proc/not_needed(var/obj/machinery/machine) diff --git a/code/game/machinery/_machines_base/stock_parts/power/terminal.dm b/code/game/machinery/_machines_base/stock_parts/power/terminal.dm deleted file mode 100644 index cc0eed4d9c385..0000000000000 --- a/code/game/machinery/_machines_base/stock_parts/power/terminal.dm +++ /dev/null @@ -1,189 +0,0 @@ -// Direct powernet connection via terminal machinery. -// Note that this isn't for the terminal itself, which is an auxiliary entity; it's for whatever is connected to it. -/obj/item/stock_parts/power/terminal - name = "wired connection" - desc = "A power connection directly to the grid, via power cables." - icon_state = "terminal" - priority = 2 - var/obj/machinery/power/terminal/terminal - var/terminal_dir = 0 - -/obj/item/stock_parts/power/terminal/on_uninstall(var/obj/machinery/machine) - if(status & PART_STAT_ACTIVE) - machine.update_power_channel(cached_channel) - unset_status(machine, PART_STAT_ACTIVE) - unset_terminal(loc, terminal) - ..() - -/obj/item/stock_parts/power/terminal/Destroy() - qdel(terminal) - . = ..() - -/obj/item/stock_parts/power/terminal/machine_process(var/obj/machinery/machine) - - if(!terminal) //Terminal is gone, give up - if(status & PART_STAT_ACTIVE) - machine.update_power_channel(cached_channel) - machine.power_change() - return - - - - var/surplus = terminal.surplus() - var/usage = machine.get_power_usage() - - if((machine.stat & NOPOWER) && surplus > usage) - machine.power_change() - return // This suggests that we should be powering the machine instead, so let's try that - - if(status & PART_STAT_ACTIVE) - terminal.draw_power(usage) - if(surplus >= usage) - return // had enough power and good to go. - else - // Try and use other (local) sources of power to make up for the deficit. - var/deficit = machine.use_power_oneoff(usage - surplus) - if(deficit > 0) - machine.update_power_channel(cached_channel) - machine.power_change() - -//Is willing to provide power if the wired contribution is nonnegligible and there is enough total local power to run the machine. -/obj/item/stock_parts/power/terminal/can_provide_power(var/obj/machinery/machine) - if(terminal && terminal.surplus() && machine.can_use_power_oneoff(machine.get_power_usage(), LOCAL) <= 0) - set_status(machine, PART_STAT_ACTIVE) - machine.update_power_channel(LOCAL) - return TRUE - return FALSE - -/obj/item/stock_parts/power/terminal/can_use_power_oneoff(var/obj/machinery/machine, var/amount, var/channel) - . = 0 - if(terminal && channel == LOCAL) - return min(terminal.surplus(), amount) - -/obj/item/stock_parts/power/terminal/use_power_oneoff(var/obj/machinery/machine, var/amount, var/channel) - . = 0 - if(terminal && channel == LOCAL) - return terminal.draw_power(amount) - -/obj/item/stock_parts/power/terminal/not_needed(var/obj/machinery/machine) - unset_status(machine, PART_STAT_ACTIVE) - -/obj/item/stock_parts/power/terminal/proc/set_terminal(var/obj/machinery/machine, var/obj/machinery/power/new_terminal) - if(terminal) - unset_terminal(machine, terminal) - terminal = new_terminal - terminal.master = src - GLOB.destroyed_event.register(terminal, src, .proc/unset_terminal) - - set_extension(src, /datum/extension/event_registration/shuttle_stationary, GLOB.moved_event, machine, .proc/machine_moved, get_area(src)) - set_status(machine, PART_STAT_CONNECTED) - start_processing(machine) - -/obj/item/stock_parts/power/terminal/proc/machine_moved(var/obj/machinery/machine, var/turf/old_loc, var/turf/new_loc) - if(!terminal) - GLOB.moved_event.unregister(machine, src, .proc/machine_moved) - return - if(istype(new_loc) && (terminal.loc == get_step(new_loc, terminal_dir))) - return // This location is fine - machine.visible_message(SPAN_WARNING("The terminal is ripped out of \the [machine]!")) - qdel(terminal) // will handle everything via the destroyed event - -/obj/item/stock_parts/power/terminal/proc/make_terminal(var/obj/machinery/machine) - if(!machine) - return - var/obj/machinery/power/terminal/new_terminal = new (get_step(machine, terminal_dir)) - new_terminal.set_dir(terminal_dir ? GLOB.reverse_dir[terminal_dir] : machine.dir) - new_terminal.connect_to_network() - set_terminal(machine, new_terminal) - -/obj/item/stock_parts/power/terminal/proc/unset_terminal(var/obj/machinery/power/old_terminal, var/obj/machinery/machine) - remove_extension(src, /datum/extension/event_registration/shuttle_stationary) - GLOB.destroyed_event.unregister(old_terminal, src) - if(!machine && istype(loc, /obj/machinery)) - machine = loc - if(machine) - unset_status(machine, PART_STAT_CONNECTED) - terminal = null - stop_processing(machine) - -/obj/item/stock_parts/power/terminal/proc/blocking_terminal_at_loc(var/obj/machinery/machine, var/turf/T, var/mob/user) - . = FALSE - var/check_dir = terminal_dir ? GLOB.reverse_dir[terminal_dir] : machine.dir - for(var/obj/machinery/power/terminal/term in T) - if(T.dir == check_dir) - to_chat(user, "There is already a terminal here.") - return TRUE - -/obj/item/stock_parts/power/terminal/attackby(obj/item/I, mob/user) - var/obj/machinery/machine = loc - if(!istype(machine)) - return ..() - - // Interactions inside machine only - if (istype(I, /obj/item/stack/cable_coil) && !terminal) - var/turf/T = get_step(machine, terminal_dir) - if(terminal_dir && user.loc != T) - return FALSE // Wrong terminal handler. - if(blocking_terminal_at_loc(machine, T, user)) - return FALSE - - if(istype(T) && !T.is_plating()) - to_chat(user, "You must remove the floor plating in front of \the [machine] first.") - return TRUE - var/obj/item/stack/cable_coil/C = I - if(!C.can_use(10)) - to_chat(user, "You need ten lengths of cable for \the [machine].") - return TRUE - user.visible_message("\The [user] adds cables to the \the [machine].", \ - "You start adding cables to \the [machine] frame...") - playsound(src.loc, 'sound/items/Deconstruct.ogg', 50, 1) - if(do_after(user, 2 SECONDS, machine, DO_PUBLIC_UNIQUE)) - if(C.can_use(10) && !terminal && (machine == loc) && machine.components_are_accessible(type) && !blocking_terminal_at_loc(machine, T, user)) - var/obj/structure/cable/N = T.get_cable_node() - if (prob(50) && electrocute_mob(user, N, N)) - var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread - s.set_up(5, 1, machine) - s.start() - if(user.stunned) - return TRUE - C.use(10) - user.visible_message(\ - "\The [user] has added cables to the \the [machine]!",\ - "You add cables to the \the [machine].") - make_terminal(machine) - return TRUE - - if(isWirecutter(I) && terminal) - var/turf/T = get_step(machine, terminal_dir) - if(terminal_dir && user.loc != T) - return FALSE // Wrong terminal handler. - if(istype(T) && !T.is_plating()) - to_chat(user, "You must remove the floor plating in front of \the [machine] first.") - return TRUE - user.visible_message("\The [user] dismantles the power terminal from \the [machine].", \ - "You begin to cut the cables...") - playsound(src.loc, 'sound/items/Deconstruct.ogg', 50, 1) - if(do_after(user, 5 SECONDS, machine, DO_PUBLIC_UNIQUE)) - if(terminal && (machine == loc) && machine.components_are_accessible(type)) - if (prob(50) && electrocute_mob(user, terminal.powernet, terminal)) - var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread - s.set_up(5, 1, machine) - s.start() - if(user.stunned) - return TRUE - new /obj/item/stack/cable_coil(T, 10) - to_chat(user, "You cut the cables and dismantle the power terminal.") - qdel(terminal) - return TRUE - -/obj/item/stock_parts/power/terminal/buildable - part_flags = PART_FLAG_HAND_REMOVE - matter = list(MATERIAL_STEEL = 400) - -/decl/stock_part_preset/terminal_setup - expected_part_type = /obj/item/stock_parts/power/terminal - -/decl/stock_part_preset/terminal_setup/apply(obj/machinery/machine, var/obj/item/stock_parts/power/terminal/part) - var/obj/machinery/power/terminal/term = locate() in machine.loc - if(istype(term) && !term.master) - part.set_terminal(machine, term) diff --git a/code/game/machinery/_machines_base/stock_parts/power/tesla.dm b/code/game/machinery/_machines_base/stock_parts/power/tesla.dm deleted file mode 100644 index ad557e66a22e8..0000000000000 --- a/code/game/machinery/_machines_base/stock_parts/power/tesla.dm +++ /dev/null @@ -1,31 +0,0 @@ -// Basic power handler. -/obj/item/stock_parts/power/apc - name = "tesla link receptor" - desc = "Standard area-based power receptor, connecting the machine to a nearby area power controller through a tesla link." - priority = 1 - -// Very simple; checks for area power and that's it. -/obj/item/stock_parts/power/apc/can_provide_power(var/obj/machinery/machine) - return machine.powered() - -// Doesn't actually do it. -/obj/item/stock_parts/power/apc/can_use_power_oneoff(var/obj/machinery/machine, var/amount, var/channel) - var/area/A = get_area(machine) // make sure it's in an area - . = 0 - if(!A) - return - if(A.powered(channel)) - return amount - -/obj/item/stock_parts/power/apc/use_power_oneoff(var/obj/machinery/machine, var/amount, var/channel) - var/area/A = get_area(machine) - . = 0 - if(!A) - return - if(A.powered(channel)) - A.use_power_oneoff(amount, channel) - return amount - -/obj/item/stock_parts/power/apc/buildable - part_flags = PART_FLAG_HAND_REMOVE - matter = list(MATERIAL_STEEL = 200) \ No newline at end of file diff --git a/code/game/machinery/_machines_base/stock_parts/radio/radio_presets.dm b/code/game/machinery/_machines_base/stock_parts/radio/radio_presets.dm deleted file mode 100644 index 565cbab19f74b..0000000000000 --- a/code/game/machinery/_machines_base/stock_parts/radio/radio_presets.dm +++ /dev/null @@ -1,67 +0,0 @@ -// Base subtypes. Will generally be enough to modify vars on subtypes of these. - -/decl/stock_part_preset/radio - expected_part_type = /obj/item/stock_parts/radio - var/frequency - var/filter - var/encryption - var/id_tag_modifier // Will be appended to the machine's id_tag, if any. - -/decl/stock_part_preset/radio/do_apply(obj/machinery/machine, obj/item/stock_parts/radio/part) - if(frequency || filter) - part.set_frequency(frequency || part.frequency, filter || part.filter) - if(encryption) - part.encryption = encryption - if(id_tag_modifier) - part.id_tag += id_tag_modifier - -/decl/stock_part_preset/radio/basic_transmitter - expected_part_type = /obj/item/stock_parts/radio/transmitter/basic - var/transmit_on_change - var/transmit_on_tick - -/decl/stock_part_preset/radio/basic_transmitter/do_apply(obj/machinery/machine, obj/item/stock_parts/radio/transmitter/basic/part) - ..() - if(transmit_on_change) - part.transmit_on_change = list() - for(var/key in transmit_on_change) - part.transmit_on_change[key] = decls_repository.get_decl(transmit_on_change[key]) - - if(transmit_on_tick) - part.transmit_on_tick = list() - for(var/key in transmit_on_tick) - part.transmit_on_tick[key] = decls_repository.get_decl(transmit_on_tick[key]) - -/decl/stock_part_preset/radio/event_transmitter - expected_part_type = /obj/item/stock_parts/radio/transmitter/on_event - var/event - var/transmit_on_event - -/decl/stock_part_preset/radio/event_transmitter/do_apply(obj/machinery/machine, obj/item/stock_parts/radio/transmitter/on_event/part) - ..() - - if(event) - part.event = decls_repository.get_decl(event) - - if(transmit_on_event) - part.transmit_on_event = list() - for(var/key in transmit_on_event) - part.transmit_on_event[key] = decls_repository.get_decl(transmit_on_event[key]) - -/decl/stock_part_preset/radio/receiver - expected_part_type = /obj/item/stock_parts/radio/receiver - var/receive_and_write - var/receive_and_call - -/decl/stock_part_preset/radio/receiver/do_apply(obj/machinery/machine, obj/item/stock_parts/radio/receiver/part) - ..() - - if(receive_and_write) - part.receive_and_write = list() - for(var/key in receive_and_write) - part.receive_and_write[key] = decls_repository.get_decl(receive_and_write[key]) - - if(receive_and_call) - part.receive_and_call = list() - for(var/key in receive_and_call) - part.receive_and_call[key] = decls_repository.get_decl(receive_and_call[key]) \ No newline at end of file diff --git a/code/game/machinery/_machines_base/stock_parts/radio/receiver.dm b/code/game/machinery/_machines_base/stock_parts/radio/receiver.dm deleted file mode 100644 index a6aac11857978..0000000000000 --- a/code/game/machinery/_machines_base/stock_parts/radio/receiver.dm +++ /dev/null @@ -1,47 +0,0 @@ -// The base receiver. Can write vars or trigger procs on signal received. - -/obj/item/stock_parts/radio/receiver - name = "radio receiver" - desc = "A radio receiver designed for use with machines." - icon_state = "subspace_amplifier" - multitool_extension = /datum/extension/interactive/multitool/radio/receiver - var/list/receive_and_write - var/list/receive_and_call - -/obj/item/stock_parts/radio/receiver/on_install(obj/machinery/machine) - . = ..() - sanitize_events(machine, receive_and_write) - sanitize_events(machine, receive_and_call) - -/obj/item/stock_parts/radio/receiver/is_valid_event(obj/machinery/machine, decl/public_access/variable) - if(istype(variable, /decl/public_access/public_method)) - return LAZYACCESS(machine.public_methods, variable.type) - if(..()) - var/decl/public_access/public_variable/thing = variable - return thing.can_write - -/obj/item/stock_parts/radio/receiver/receive_signal(datum/signal/signal, receive_method, receive_param) - if(!id_tag) - return - if(!(status & PART_STAT_INSTALLED)) - return - if(signal.encryption && (signal.encryption != encryption)) - return - if(signal.data["tag"] != id_tag) - return - - var/obj/machinery/machine = loc - if(!istype(machine)) - return - for(var/thing in receive_and_write) - if(!isnull(signal.data[thing])) - var/decl/public_access/public_variable/variable = receive_and_write[thing] - variable.write_var_protected(machine, signal.data[thing]) - for(var/thing in receive_and_call) - if(!isnull(signal.data[thing])) - var/decl/public_access/public_method/method = receive_and_call[thing] - method.perform(machine, signal.data[thing]) - -/obj/item/stock_parts/radio/receiver/buildable - part_flags = PART_FLAG_HAND_REMOVE - matter = list(MATERIAL_STEEL = 400) \ No newline at end of file diff --git a/code/game/machinery/_machines_base/stock_parts/radio/stock_parts_radio.dm b/code/game/machinery/_machines_base/stock_parts/radio/stock_parts_radio.dm deleted file mode 100644 index e38ed64fe6f2e..0000000000000 --- a/code/game/machinery/_machines_base/stock_parts/radio/stock_parts_radio.dm +++ /dev/null @@ -1,38 +0,0 @@ -/obj/item/stock_parts/radio - part_flags = PART_FLAG_QDEL - var/datum/radio_frequency/radio - var/frequency - var/id_tag - var/filter - var/encryption - var/multitool_extension - -/obj/item/stock_parts/radio/Initialize() - if(frequency) - set_frequency(frequency, filter) - if(multitool_extension) - set_extension(src, multitool_extension) - . = ..() - -/obj/item/stock_parts/radio/on_install(obj/machinery/machine) - ..() - if(!id_tag) - id_tag = machine.id_tag - -/obj/item/stock_parts/radio/proc/set_frequency(new_frequency, new_filter) - radio_controller.remove_object(src, frequency) - frequency = new_frequency - filter = new_filter - radio = radio_controller.add_object(src, frequency, filter) - -/obj/item/stock_parts/radio/Destroy() - radio_controller.remove_object(src, frequency) - . = ..() - -/obj/item/stock_parts/radio/proc/sanitize_events(obj/machinery/machine, list/events) - for(var/thing in events) - if(!is_valid_event(machine, events[thing])) - LAZYREMOVE(events, thing) - -/obj/item/stock_parts/radio/proc/is_valid_event(obj/machinery/machine, decl/public_access/variable) - return istype(variable) && LAZYACCESS(machine.public_variables, variable.type) \ No newline at end of file diff --git a/code/game/machinery/_machines_base/stock_parts/radio/transmitter.dm b/code/game/machinery/_machines_base/stock_parts/radio/transmitter.dm deleted file mode 100644 index 280fb53ccc84d..0000000000000 --- a/code/game/machinery/_machines_base/stock_parts/radio/transmitter.dm +++ /dev/null @@ -1,122 +0,0 @@ -/obj/item/stock_parts/radio/transmitter - name = "radio transmitter" - desc = "A radio transmitter designed for use with machines." - icon_state = "subspace_transmitter" - var/range = 60 // Limits transmit range - var/latency = 2 // Delay between event and transmission; doesn't apply to transmit on tick - var/buffer - -/obj/item/stock_parts/radio/transmitter/proc/queue_transmit(list/data) - if(!length(data)) - return - if(!buffer) - buffer = data - addtimer(CALLBACK(src, .proc/transmit), latency) - else - buffer |= data - -/obj/item/stock_parts/radio/transmitter/proc/transmit() - if(!LAZYLEN(buffer)) - return - var/datum/signal/signal = new() - signal.source = src - signal.transmission_method = TRANSMISSION_RADIO - signal.encryption = encryption - signal.data = buffer - signal.data["tag"] = id_tag - radio.post_signal(src, signal, filter, range) - buffer = null - -// Standard variant can either transmit on var change or transmit every tick. Latter is not encouraged for premade variants. -/obj/item/stock_parts/radio/transmitter/basic - multitool_extension = /datum/extension/interactive/multitool/radio/transmitter - var/list/transmit_on_change - var/list/transmit_on_tick - -/obj/item/stock_parts/radio/transmitter/basic/proc/var_changed(decl/public_access/public_variable/variable, obj/machinery/machine, old_value, new_value) - var/list/L = list() - for(var/thing in transmit_on_change) - if(transmit_on_change[thing] == variable) - L[thing] = new_value - queue_transmit(L) - -/obj/item/stock_parts/radio/transmitter/basic/on_install(obj/machinery/machine) - ..() - sanitize_events(machine, transmit_on_change) - sanitize_events(machine, transmit_on_tick) - if(LAZYLEN(transmit_on_tick)) - start_processing(machine) - for(var/thing in transmit_on_change) - var/decl/public_access/public_variable/variable = transmit_on_change[thing] - variable.register_listener(src, machine, .proc/var_changed) - -/obj/item/stock_parts/radio/transmitter/basic/on_uninstall(obj/machinery/machine) - for(var/thing in transmit_on_change) - var/decl/public_access/public_variable/variable = transmit_on_change[thing] - variable.unregister_listener(src, machine) - ..() - -/obj/item/stock_parts/radio/transmitter/basic/Destroy() - if(istype(loc, /obj/machinery)) - for(var/thing in transmit_on_change) - var/decl/public_access/public_variable/variable = transmit_on_change[thing] - variable.unregister_listener(src, loc) - . = ..() - -/obj/item/stock_parts/radio/transmitter/basic/machine_process(obj/machinery/machine) - var/list/L = list() - for(var/thing in transmit_on_tick) - var/decl/public_access/public_variable/variable = transmit_on_tick[thing] - L[thing] = variable.access_var(machine) - queue_transmit(L) - -// This is a variant that waits for an event (a public var set), and then transmits everything in the list. - -/obj/item/stock_parts/radio/transmitter/on_event - multitool_extension = /datum/extension/interactive/multitool/radio/event_transmitter - var/decl/public_access/public_variable/event - var/list/transmit_on_event - -/obj/item/stock_parts/radio/transmitter/on_event/is_valid_event(obj/machinery/machine, decl/public_access/variable) - if(istype(variable, /decl/public_access/public_method)) - return LAZYACCESS(machine.public_methods, variable.type) - return ..() - -/obj/item/stock_parts/radio/transmitter/on_event/on_install(obj/machinery/machine) - ..() - sanitize_events(machine, transmit_on_event) - if(!is_valid_event(machine, event)) - event = null - if(event) - event.register_listener(src, machine, .proc/trigger_event) - -/obj/item/stock_parts/radio/transmitter/on_event/on_uninstall(obj/machinery/machine) - if(event) - event.unregister_listener(src, machine) - ..() - -/obj/item/stock_parts/radio/transmitter/on_event/Destroy() - if(event && istype(loc, /obj/machinery)) - event.unregister_listener(src, loc) - . = ..() - -/obj/item/stock_parts/radio/transmitter/on_event/proc/trigger_event(decl/public_access/public_variable/variable, obj/machinery/machine, old_value, new_value) - var/list/dat = list() - for(var/thing in transmit_on_event) - var/decl/public_access/public_variable/check_variable = transmit_on_event[thing] - dat[thing] = check_variable.access_var(machine) - queue_transmit(dat) - -/obj/item/stock_parts/radio/transmitter/basic/buildable - part_flags = PART_FLAG_HAND_REMOVE - name = "basic radio transmitter" - desc = "A stock radio transmitter machine component. Can transmit updates regularly or on change." - color = COLOR_RED - matter = list(MATERIAL_STEEL = 400) - -/obj/item/stock_parts/radio/transmitter/on_event/buildable - part_flags = PART_FLAG_HAND_REMOVE - name = "event radio transmitter" - desc = "A radio transmitter machine component which transmits when activated by an event." - color = COLOR_ORANGE - matter = list(MATERIAL_STEEL = 400) \ No newline at end of file diff --git a/code/game/machinery/_machines_base/stock_parts/stock_parts_interface.dm b/code/game/machinery/_machines_base/stock_parts/stock_parts_interface.dm deleted file mode 100644 index 2b89cd376dac6..0000000000000 --- a/code/game/machinery/_machines_base/stock_parts/stock_parts_interface.dm +++ /dev/null @@ -1,25 +0,0 @@ -/obj/item/stock_parts/console_screen - name = "console screen" - desc = "Used in the construction of computers and other devices with an interactive screen." - icon_state = "output" - origin_tech = list(TECH_MATERIAL = 1) - matter = list(MATERIAL_GLASS = 200) - base_type = /obj/item/stock_parts/console_screen - part_flags = PART_FLAG_HAND_REMOVE - -/obj/item/stock_parts/console_screen/on_refresh(obj/machinery/machine) - ..() - machine.set_noscreen(FALSE) - -/obj/item/stock_parts/keyboard - name = "input controller" - desc = "A standard part required by many machines to recieve user input." - icon_state = "input" - origin_tech = list(TECH_MATERIAL = 1) - matter = list(MATERIAL_PLASTIC = 200) - base_type = /obj/item/stock_parts/keyboard - part_flags = PART_FLAG_HAND_REMOVE - -/obj/item/stock_parts/keyboard/on_refresh(obj/machinery/machine) - ..() - machine.set_noinput(FALSE) \ No newline at end of file diff --git a/code/game/machinery/_machines_base/stock_parts/stock_parts_presets.dm b/code/game/machinery/_machines_base/stock_parts/stock_parts_presets.dm deleted file mode 100644 index f54a8537f8229..0000000000000 --- a/code/game/machinery/_machines_base/stock_parts/stock_parts_presets.dm +++ /dev/null @@ -1,20 +0,0 @@ -/* -These are used by machines when created to initialize their components to nonstandard configurations. -They are abstracted from machines to potentially share code and simplify inheritance. -Do not work with lazy-initialized parts. -*/ - -/// Associative list of decl path -> number to apply. -/obj/machinery/var/list/stock_part_presets - -/decl/stock_part_preset - var/expected_part_type - -/decl/stock_part_preset/proc/apply(obj/machinery/machine, obj/item/stock_parts/part) - if(machine) - part.on_uninstall(machine, TRUE) // don't delete - do_apply(machine, part) - if(machine) - part.on_install(machine) - -/decl/stock_part_preset/proc/do_apply(obj/machinery/machine, obj/item/stock_parts/part) diff --git a/code/game/machinery/ai_slipper.dm b/code/game/machinery/ai_slipper.dm deleted file mode 100644 index ed7259db01a60..0000000000000 --- a/code/game/machinery/ai_slipper.dm +++ /dev/null @@ -1,108 +0,0 @@ -/obj/machinery/ai_slipper - name = "\improper AI Liquid Dispenser" - icon = 'proxima/icons/obj/machinery/ai_slipper.dmi'//inf, was: icon = 'icons/obj/device.dmi' - icon_state = "motion0" - anchored = TRUE - idle_power_usage = 10 - var/uses = 20 - var/disabled = 1 - var/lethal = 0 - var/locked = 1 - var/cooldown_time = 0 - var/cooldown_timeleft = 0 - var/cooldown_on = 0 - req_access = list(access_ai_upload) - - -/obj/machinery/ai_slipper/New() - ..() - update_icon() - -/obj/machinery/ai_slipper/on_update_icon() - if (stat & NOPOWER || stat & BROKEN) - icon_state = "motion0" - else - icon_state = disabled ? "motion0" : "motion3" - -/obj/machinery/ai_slipper/proc/setState(var/enabled, var/uses) - src.disabled = disabled - src.uses = uses - src.power_change() - -/obj/machinery/ai_slipper/attackby(obj/item/W, mob/user) - if(stat & (NOPOWER|BROKEN)) - return - if (istype(user, /mob/living/silicon)) - return attack_ai(user) - else // trying to unlock the interface - if(allowed(user)) - locked = !locked - to_chat(user, "You [ locked ? "lock" : "unlock"] the device.") - if (locked) - if (user.machine==src) - user.unset_machine() - close_browser(user, "window=ai_slipper") - else - if (user.machine==src) - interact(user) - else - to_chat(user, "Access denied.") - -/obj/machinery/ai_slipper/interface_interact(mob/user) - interact(user) - return TRUE - -/obj/machinery/ai_slipper/interact(mob/user) - var/area/area = get_area(src) - if(!area || !isturf(loc)) - return - var/t = "AI Liquid Dispenser ([area.name])
      " - - if(src.locked && (!istype(user, /mob/living/silicon))) - t += "(Swipe ID card to unlock control panel.)
      " - else - t += text("Dispenser [] - []?
      \n", src.disabled?"deactivated":"activated", src, src.disabled?"Enable":"Disable") - t += text("Uses Left: [uses]. Activate the dispenser?
      \n") - - show_browser(user, t, "window=computer;size=575x450") - onclose(user, "computer") - -/obj/machinery/ai_slipper/CanUseTopic(user) - if(locked && !issilicon(user)) - to_chat(user, "The control panel is locked!") - return min(..(), STATUS_UPDATE) - return ..() - -/obj/machinery/ai_slipper/OnTopic(user, href_list) - if (href_list["toggleOn"]) - src.disabled = !src.disabled - update_icon() - . = TOPIC_REFRESH - if (href_list["toggleUse"]) - if(!(cooldown_on || disabled)) - new /obj/effect/effect/foam(src.loc) - src.uses-- - cooldown_on = 1 - cooldown_time = world.timeofday + 100 - slip_process() - . = TOPIC_REFRESH - - if(. == TOPIC_REFRESH) - attack_hand(user) - -/obj/machinery/ai_slipper/proc/slip_process() - while(cooldown_time - world.timeofday > 0) - var/ticksleft = cooldown_time - world.timeofday - - if(ticksleft > 1e5) - cooldown_time = world.timeofday + 10 // midnight rollover - - - cooldown_timeleft = (ticksleft / 10) - sleep(5) - if (uses <= 0) - return - if (uses >= 0) - cooldown_on = 0 - src.power_change() - return diff --git a/code/game/machinery/air_sensor.dm b/code/game/machinery/air_sensor.dm deleted file mode 100644 index dec24ec36e6cd..0000000000000 --- a/code/game/machinery/air_sensor.dm +++ /dev/null @@ -1,94 +0,0 @@ -/obj/machinery/air_sensor - icon = 'icons/obj/stationobjs.dmi' - icon_state = "gsensor1" - name = "Gas Sensor" - - anchored = TRUE - - uncreated_component_parts = list( - /obj/item/stock_parts/radio/transmitter/basic, - /obj/item/stock_parts/power/apc - ) - public_variables = list( - /decl/public_access/public_variable/gas, - /decl/public_access/public_variable/pressure, - /decl/public_access/public_variable/temperature - ) - stock_part_presets = list(/decl/stock_part_preset/radio/basic_transmitter/air_sensor = 1) - use_power = POWER_USE_IDLE - - frame_type = /obj/item/machine_chassis/air_sensor - construct_state = /decl/machine_construction/default/item_chassis - base_type = /obj/machinery/air_sensor - -/obj/machinery/air_sensor/on_update_icon() - if(!powered()) - icon_state = "gsensor0" - else - icon_state = "gsensor[use_power]" - -/decl/public_access/public_variable/gas - expected_type = /obj/machinery - name = "gas data" - desc = "A list of gas data from the sensor location; the list entries are two-entry lists with \"symbol\" and \"percent\" fields." - can_write = FALSE - has_updates = FALSE - var_type = IC_FORMAT_LIST - -/decl/public_access/public_variable/gas/access_var(obj/machinery/sensor) - var/datum/gas_mixture/air_sample = sensor.return_air() - if(!air_sample) - return - var/total_moles = air_sample.total_moles - if(total_moles <= 0) - return - - . = list() - for(var/gas in air_sample.gas) - var/gaspercent = round(air_sample.gas["[gas]"]*100/total_moles,0.01) - var/gas_list = list("symbol" = gas_data.symbol_html["[gas]"], "percent" = gaspercent) - . += list(gas_list) - -/decl/public_access/public_variable/pressure - expected_type = /obj/machinery - name = "pressure data" - desc = "The pressure of the gas at the sensor." - can_write = FALSE - has_updates = FALSE - var_type = IC_FORMAT_STRING - -/decl/public_access/public_variable/pressure/access_var(obj/machinery/sensor) - var/datum/gas_mixture/air_sample = sensor.return_air() - return air_sample && num2text(round(air_sample.return_pressure(),0.1)) - -/decl/public_access/public_variable/temperature - expected_type = /obj/machinery - name = "temperature data" - desc = "The temperature of the gas at the sensor." - can_write = FALSE - has_updates = FALSE - var_type = IC_FORMAT_NUMBER - -/decl/public_access/public_variable/temperature/access_var(obj/machinery/sensor) - var/datum/gas_mixture/air_sample = sensor.return_air() - return air_sample && round(air_sample.temperature,0.1) - -/decl/stock_part_preset/radio/basic_transmitter/air_sensor - transmit_on_tick = list( - "gas" = /decl/public_access/public_variable/gas, - "pressure" = /decl/public_access/public_variable/pressure, - "temperature" = /decl/public_access/public_variable/temperature - ) - frequency = ATMOS_TANK_FREQ - -/obj/machinery/air_sensor/engine - stock_part_presets = list(/decl/stock_part_preset/radio/basic_transmitter/air_sensor/engine = 1) - -/decl/stock_part_preset/radio/basic_transmitter/air_sensor/engine - frequency = ATMOS_ENGINE_FREQ - -/obj/machinery/air_sensor/dist - stock_part_presets = list(/decl/stock_part_preset/radio/basic_transmitter/air_sensor/engine = 1) - -/decl/stock_part_preset/radio/basic_transmitter/air_sensor/engine - frequency = ATMOS_DIST_FREQ \ No newline at end of file diff --git a/code/game/machinery/alarm.dm b/code/game/machinery/alarm.dm deleted file mode 100644 index 87bd2008bf8a7..0000000000000 --- a/code/game/machinery/alarm.dm +++ /dev/null @@ -1,1292 +0,0 @@ -/decl/environment_data - var/list/important_gasses = list( - GAS_OXYGEN = TRUE, - GAS_NITROGEN = TRUE, - GAS_CO2 = TRUE - ) - var/list/dangerous_gasses = list( - GAS_CO2 = TRUE - ) - var/list/filter_gasses = list( - GAS_OXYGEN, - GAS_NITROGEN, - GAS_CO2, - GAS_N2O, - GAS_PHORON - ) - -//////////////////////////////////////// -//CONTAINS: Air Alarms and Fire Alarms// -//////////////////////////////////////// - -#define AALARM_MODE_SCRUBBING 1 -#define AALARM_MODE_REPLACEMENT 2 //like scrubbing, but faster. -#define AALARM_MODE_PANIC 3 //constantly sucks all air -#define AALARM_MODE_CYCLE 4 //sucks off all air, then refill and switches to scrubbing -#define AALARM_MODE_FILL 5 //emergency fill -#define AALARM_MODE_OFF 6 //Shuts it all down. - -#define AALARM_SCREEN_MAIN 1 -#define AALARM_SCREEN_VENT 2 -#define AALARM_SCREEN_SCRUB 3 -#define AALARM_SCREEN_MODE 4 -#define AALARM_SCREEN_SENSORS 5 - -#define AALARM_REPORT_TIMEOUT 100 - -#define RCON_NO 1 -#define RCON_AUTO 2 -#define RCON_YES 3 - -#define MAX_TEMPERATURE 90 -#define MIN_TEMPERATURE -40 - -//all air alarms in area are connected via magic -/// List (`string (id_tag)` => `string`). List of 'long names' for vents within the area. Also serves as a list of all vents registered with the area. Set by `./register_env_machine()`. -/area/var/list/air_vent_names = list() -/// List (`string (id_tag)` => `string`). List of 'long names' for scrubbers within the area. Also serves as a list of all scrubbers registered with the area. Set by `./register_env_machine()`. -/area/var/list/air_scrub_names = list() -/// List (`string (id_tag)` => `/datum/signal/data`). List of radio signal data received from vents in the area, indexed by the vent's `id_tag`. Do not modify directly; See `./receive_signal()` and `./send_signal()`. -/area/var/list/air_vent_info = list() -/// List (`string (id_tag)` => `/datum/signal/data`). List of radio signal data received from scrubbers in the area, indexed by the scrubber's `id_tag`. Do not modify directly; See `./receive_signal()` and `./send_signal()`. -/area/var/list/air_scrub_info = list() - -/obj/machinery/alarm - name = "alarm" - icon = 'icons/obj/monitors.dmi' - icon_state = "alarm0" - anchored = TRUE - idle_power_usage = 80 - active_power_usage = 1000 //For heating/cooling rooms. 1000 joules equates to about 1 degree every 2 seconds for a single tile of air. - power_channel = ENVIRON - req_access = list(list(access_atmospherics, access_engine_equip)) - clicksound = "button" - clickvol = 30 - - layer = ABOVE_WINDOW_LAYER - - var/alarm_id = null - var/breach_pressure = ONE_ATMOSPHERE * 0.5 //Pressure below wich vents are shut off, set negative to dissable - var/breach_cooldown = FALSE - var/frequency = 1439 - //var/skipprocess = 0 //Experimenting - var/alarm_frequency = 1437 - var/remote_control = 0 - var/rcon_setting = 2 - var/rcon_time = 0 - var/locked = 1 - var/wiresexposed = FALSE // If it's been screwdrivered open. - var/aidisabled = 0 - var/shorted = 0 - - wires = /datum/wires/alarm - - var/mode = AALARM_MODE_SCRUBBING - var/screen = AALARM_SCREEN_MAIN - var/area_uid - var/area/alarm_area - var/buildstage = 2 //2 is built, 1 is building, 0 is frame. - - var/target_temperature = T0C+20 - var/regulating_temperature = 0 - - var/datum/radio_frequency/radio_connection - - var/list/TLV = list() - var/list/trace_gas = list() //list of other gases that this air alarm is able to detect - - var/danger_level = 0 - var/pressure_dangerlevel = 0 - var/oxygen_dangerlevel = 0 - var/co2_dangerlevel = 0 - var/temperature_dangerlevel = 0 - var/other_dangerlevel = 0 - var/environment_type = /decl/environment_data - var/report_danger_level = 1 - -/obj/machinery/alarm/cold - target_temperature = T0C+4 - -/decl/environment_data/finnish/Initialize() - . = ..() - important_gasses[GAS_STEAM] = TRUE - dangerous_gasses -= GAS_STEAM - -/obj/machinery/alarm/warm - target_temperature = T0C+75 - environment_type = /decl/environment_data/finnish - -/obj/machinery/alarm/warm/Initialize() - . = ..() - TLV["temperature"] = list(T0C-26, T0C, T0C+75, T0C+85) // K - TLV["pressure"] = list(ONE_ATMOSPHERE*0.80,ONE_ATMOSPHERE*0.90,ONE_ATMOSPHERE*1.30,ONE_ATMOSPHERE*1.50) /* kpa */ - -/obj/machinery/alarm/nobreach - breach_pressure = -1 - -/obj/machinery/alarm/monitor - report_danger_level = 0 - breach_pressure = -1 - -/obj/machinery/alarm/server/New() - ..() - req_access = list(access_rd, access_atmospherics, access_engine_equip) - TLV["temperature"] = list(T0C-26, T0C, T0C+30, T0C+40) // K - target_temperature = T0C+10 - -/obj/machinery/alarm/Destroy() - unregister_radio(src, frequency) - return ..() - -/obj/machinery/alarm/New(var/loc, var/dir, atom/frame) - ..(loc) - - if(dir) - src.set_dir(dir) - - if(istype(frame)) - buildstage = 0 - wiresexposed = TRUE - pixel_x = (dir & 3)? 0 : (dir == 4 ? -21 : 21) - pixel_y = (dir & 3)? (dir ==1 ? -21 : 21) : 0 - update_icon() - frame.transfer_fingerprints_to(src) - -/obj/machinery/alarm/Initialize() - . = ..() - alarm_area = get_area(src) - area_uid = alarm_area.uid - if (name == "alarm") - SetName("[alarm_area.name] Air Alarm") - - // breathable air according to human/Life() - TLV[GAS_OXYGEN] = list(16, 19, 135, 140) // Partial pressure, kpa - TLV[GAS_CO2] = list(-1.0, -1.0, 5, 10) // Partial pressure, kpa - TLV["other"] = list(-1.0, -1.0, 0.2, 0.5) // Partial pressure, kpa - TLV["pressure"] = list(ONE_ATMOSPHERE*0.80,ONE_ATMOSPHERE*0.90,ONE_ATMOSPHERE*1.10,ONE_ATMOSPHERE*1.20) /* kpa */ - TLV["temperature"] = list(T0C-26, T0C, T0C+40, T0C+66) // K - - - var/decl/environment_data/env_info = decls_repository.get_decl(environment_type) - for(var/g in gas_data.gases) - if(!env_info.important_gasses[g]) - trace_gas += g - - set_frequency(frequency) - update_icon() - -/obj/machinery/alarm/get_req_access() - if(!locked) - return list() - return ..() - -/obj/machinery/alarm/Process() - if((stat & (NOPOWER|BROKEN)) || shorted || buildstage != 2) - return - - var/turf/simulated/location = loc - if(!istype(location)) return//returns if loc is not simulated - - var/datum/gas_mixture/environment = location.return_air() - - //Handle temperature adjustment here. - if(environment.return_pressure() > ONE_ATMOSPHERE*0.05) - handle_heating_cooling(environment) - - var/old_level = danger_level - danger_level = overall_danger_level(environment) - - if (old_level != danger_level) - if(danger_level == 2) - playsound(src.loc, 'sound/machines/airalarm.ogg', 25, 0, 4) - apply_danger_level(danger_level) - - if (pressure_dangerlevel != 0) - if (breach_detected()) - mode = AALARM_MODE_OFF - apply_mode() - - if (mode==AALARM_MODE_CYCLE && environment.return_pressure() 2.0) - update_use_power(POWER_USE_ACTIVE) - regulating_temperature = 1 - visible_message("\The [src] clicks as it starts [environment.temperature > target_temperature ? "cooling" : "heating"] the room.",\ - "You hear a click and a faint electronic hum.") - else - //check for when we should stop adjusting temperature - if (get_danger_level(target_temperature, TLV["temperature"]) || abs(environment.temperature - target_temperature) <= 0.5) - update_use_power(POWER_USE_IDLE) - regulating_temperature = 0 - visible_message("\The [src] clicks quietly as it stops [environment.temperature > target_temperature ? "cooling" : "heating"] the room.",\ - "You hear a click as a faint electronic humming stops.") - - if (regulating_temperature) - if(target_temperature > T0C + MAX_TEMPERATURE) - target_temperature = T0C + MAX_TEMPERATURE - - if(target_temperature < T0C + MIN_TEMPERATURE) - target_temperature = T0C + MIN_TEMPERATURE - - var/datum/gas_mixture/gas - gas = environment.remove(0.25*environment.total_moles) - if(gas) - - if (gas.temperature <= target_temperature) //gas heating - var/energy_used = min( gas.get_thermal_energy_change(target_temperature) , active_power_usage) - - gas.add_thermal_energy(energy_used) - else //gas cooling - var/heat_transfer = min(abs(gas.get_thermal_energy_change(target_temperature)), active_power_usage) - - //Assume the heat is being pumped into the hull which is fixed at 20 C - //none of this is really proper thermodynamics but whatever - - var/cop = gas.temperature/T20C //coefficient of performance -> power used = heat_transfer/cop - - heat_transfer = min(heat_transfer, cop * active_power_usage) //this ensures that we don't use more than active_power_usage amount of power - - heat_transfer = -gas.add_thermal_energy(-heat_transfer) //get the actual heat transfer - - environment.merge(gas) - -/obj/machinery/alarm/proc/overall_danger_level(var/datum/gas_mixture/environment) - var/partial_pressure = R_IDEAL_GAS_EQUATION*environment.temperature/environment.volume - var/environment_pressure = environment.return_pressure() - - var/other_moles = 0 - for(var/g in trace_gas) - other_moles += environment.gas[g] //this is only going to be used in a partial pressure calc, so we don't need to worry about group_multiplier here. - - pressure_dangerlevel = get_danger_level(environment_pressure, TLV["pressure"]) - oxygen_dangerlevel = get_danger_level(environment.gas[GAS_OXYGEN]*partial_pressure, TLV[GAS_OXYGEN]) - co2_dangerlevel = get_danger_level(environment.gas[GAS_CO2]*partial_pressure, TLV[GAS_CO2]) - temperature_dangerlevel = get_danger_level(environment.temperature, TLV["temperature"]) - other_dangerlevel = get_danger_level(other_moles*partial_pressure, TLV["other"]) - - return max( - pressure_dangerlevel, - oxygen_dangerlevel, - co2_dangerlevel, - other_dangerlevel, - temperature_dangerlevel - ) - -// Returns whether this air alarm thinks there is a breach, given the sensors that are available to it. -/obj/machinery/alarm/proc/breach_detected() - var/turf/simulated/location = loc - - if(!istype(location)) - return FALSE - - if(breach_cooldown) - return FALSE - - if(breach_pressure < 0) - return FALSE - - var/datum/gas_mixture/environment = location.return_air() - var/environment_pressure = environment.return_pressure() - - if (environment_pressure <= breach_pressure) - if (!(mode == AALARM_MODE_PANIC || mode == AALARM_MODE_CYCLE)) - return TRUE - - return FALSE - -/obj/machinery/alarm/proc/breach_end_cooldown() - breach_cooldown = FALSE - return - -//disables breach detection temporarily -/obj/machinery/alarm/proc/breach_start_cooldown() - breach_cooldown = TRUE - addtimer(CALLBACK(src,/obj/machinery/alarm/proc/breach_end_cooldown), 10 MINUTES, TIMER_UNIQUE | TIMER_OVERRIDE) - return - -/obj/machinery/alarm/proc/get_danger_level(var/current_value, var/list/danger_levels) - if((current_value >= danger_levels[4] && danger_levels[4] > 0) || current_value <= danger_levels[1]) - return 2 - if((current_value > danger_levels[3] && danger_levels[3] > 0) || current_value < danger_levels[2]) - return 1 - return 0 - -/obj/machinery/alarm/on_update_icon() - if(wiresexposed) - icon_state = "alarmx" - set_light(0) - return - if((stat & (NOPOWER|BROKEN)) || shorted) - icon_state = "alarmp" - set_light(0) - return - - var/icon_level = danger_level - if (alarm_area.atmosalm) - icon_level = max(icon_level, 1) //if there's an atmos alarm but everything is okay locally, no need to go past yellow - - var/new_color = null - switch(icon_level) - if (0) - icon_state = "alarm0" - new_color = COLOR_LIME - if (1) - icon_state = "alarm2" //yes, alarm2 is yellow alarm - new_color = COLOR_SUN - if (2) - icon_state = "alarm1" - new_color = COLOR_RED_LIGHT - - pixel_x = 0 - pixel_y = 0 - var/turf/T = get_step(get_turf(src), turn(dir, 180)) - if(istype(T) && T.density) - if(dir == NORTH) - pixel_y = -21 - else if(dir == SOUTH) - pixel_y = 21 - else if(dir == WEST) - pixel_x = 21 - else if(dir == EAST) - pixel_x = -21 - - set_light(0.25, 0.1, 1, 2, new_color) - -/obj/machinery/alarm/receive_signal(datum/signal/signal) - if(!signal || signal.encryption) - return - if(alarm_id == signal.data["alarm_id"] && signal.data["command"] == "shutdown") - mode = AALARM_MODE_OFF - report_danger_level = FALSE - apply_mode() - return - - var/id_tag = signal.data["tag"] - if (!id_tag) - return - if (signal.data["area"] != area_uid) - return - - var/dev_type = signal.data["device"] - if(!(id_tag in alarm_area.air_scrub_names) && !(id_tag in alarm_area.air_vent_names)) - register_env_machine(id_tag, dev_type) - if(dev_type == "AScr") - alarm_area.air_scrub_info[id_tag] = signal.data - else if(dev_type == "AVP") - alarm_area.air_vent_info[id_tag] = signal.data - -/obj/machinery/alarm/proc/register_env_machine(var/m_id, var/device_type) - var/new_name - if (device_type=="AVP") - new_name = "[alarm_area.name] Vent Pump #[alarm_area.air_vent_names.len+1]" - alarm_area.air_vent_names[m_id] = new_name - else if (device_type=="AScr") - new_name = "[alarm_area.name] Air Scrubber #[alarm_area.air_scrub_names.len+1]" - alarm_area.air_scrub_names[m_id] = new_name - send_signal(m_id, list("init" = new_name) ) - -/obj/machinery/alarm/proc/set_frequency(new_frequency) - radio_controller.remove_object(src, frequency) - frequency = new_frequency - radio_connection = radio_controller.add_object(src, frequency, RADIO_TO_AIRALARM) - -/obj/machinery/alarm/proc/send_signal(var/target, var/list/command)//sends signal 'command' to 'target'. Returns 0 if no radio connection, 1 otherwise - if(!radio_connection) - return 0 - - var/datum/signal/signal = new - signal.transmission_method = 1 //radio signal - signal.source = src - - signal.data = command - signal.data["tag"] = target - signal.data["sigtype"] = "command" - signal.data["status"] = TRUE - - radio_connection.post_signal(src, signal, RADIO_FROM_AIRALARM) -// log_debug(text("Signal [] Broadcasted to []", command, target)) - - return 1 - -/obj/machinery/alarm/proc/apply_mode() - //propagate mode to other air alarms in the area - //TODO: make it so that players can choose between applying the new mode to the room they are in (related area) vs the entire alarm area - for (var/obj/machinery/alarm/AA in alarm_area) - AA.mode = mode - - breach_start_cooldown() - - switch(mode) - if(AALARM_MODE_SCRUBBING) - for(var/device_id in alarm_area.air_scrub_names) - send_signal(device_id, list("set_power"= 1, "set_scrub_gas" = list(GAS_CO2 = 1), "set_scrubbing"= SCRUBBER_SCRUB, "panic_siphon"= 0) ) - for(var/device_id in alarm_area.air_vent_names) - send_signal(device_id, list("set_power"= 1, "set_checks"= "default", "set_external_pressure"= "default") ) - - if(AALARM_MODE_PANIC, AALARM_MODE_CYCLE) - for(var/device_id in alarm_area.air_scrub_names) - send_signal(device_id, list("set_power"= 1, "panic_siphon"= 1) ) - for(var/device_id in alarm_area.air_vent_names) - send_signal(device_id, list("set_power"= 0) ) - - if(AALARM_MODE_REPLACEMENT) - for(var/device_id in alarm_area.air_scrub_names) - send_signal(device_id, list("set_power"= 1, "panic_siphon"= 1) ) - for(var/device_id in alarm_area.air_vent_names) - send_signal(device_id, list("set_power"= 1, "set_checks"= "default", "set_external_pressure"= "default") ) - - if(AALARM_MODE_FILL) - for(var/device_id in alarm_area.air_scrub_names) - send_signal(device_id, list("set_power"= 0) ) - for(var/device_id in alarm_area.air_vent_names) - send_signal(device_id, list("set_power"= 1, "set_checks"= "default", "set_external_pressure"= "default") ) - - if(AALARM_MODE_OFF) - for(var/device_id in alarm_area.air_scrub_names) - send_signal(device_id, list("set_power"= 0) ) - for(var/device_id in alarm_area.air_vent_names) - send_signal(device_id, list("set_power"= 0) ) - -/obj/machinery/alarm/proc/apply_danger_level(var/new_danger_level) - if (report_danger_level && alarm_area.atmosalert(new_danger_level, src)) - post_alert(new_danger_level) - - update_icon() - -/obj/machinery/alarm/proc/post_alert(alert_level) - var/datum/radio_frequency/frequency = radio_controller.return_frequency(alarm_frequency) - if(!frequency) - return - - var/datum/signal/alert_signal = new - alert_signal.source = src - alert_signal.transmission_method = 1 - alert_signal.data["zone"] = alarm_area.name - alert_signal.data["type"] = "Atmospheric" - - if(alert_level==2) - alert_signal.data["alert"] = "severe" - else if (alert_level==1) - alert_signal.data["alert"] = "minor" - else if (alert_level==0) - alert_signal.data["alert"] = "clear" - - frequency.post_signal(src, alert_signal) - -/obj/machinery/alarm/interface_interact(mob/user) - ui_interact(user) - return TRUE - -/obj/machinery/alarm/ui_interact(mob/user, ui_key = "main", datum/nanoui/ui = null, force_open = 1, var/master_ui = null, var/datum/topic_state/state = GLOB.default_state) - var/data[0] - var/remote_connection = 0 - var/remote_access = 0 - if(state) - var/list/href = state.href_list(user) - remote_connection = href["remote_connection"] // Remote connection means we're non-adjacent/connecting from another computer - remote_access = href["remote_access"] // Remote access means we also have the privilege to alter the air alarm. - - data["locked"] = locked && !issilicon(user) - data["remote_connection"] = remote_connection - data["remote_access"] = remote_access - data["rcon"] = rcon_setting - data["screen"] = screen - - populate_status(data) - - if(!(locked && !remote_connection) || remote_access || issilicon(user)) - populate_controls(data) - - ui = SSnano.try_update_ui(user, src, ui_key, ui, data, force_open) - if(!ui) - ui = new(user, src, ui_key, "air_alarm.tmpl", src.name, 325, 625, master_ui = master_ui, state = state) - ui.set_initial_data(data) - ui.open() - ui.set_auto_update(1) - -/obj/machinery/alarm/proc/populate_status(var/data) - var/turf/location = get_turf(src) - var/datum/gas_mixture/environment = location.return_air() - var/total = environment.total_moles - - var/list/environment_data = new - data["has_environment"] = total - if(total) - var/pressure = environment.return_pressure() - environment_data[++environment_data.len] = list("name" = "Pressure", "value" = pressure, "unit" = "kPa", "danger_level" = pressure_dangerlevel) - var/decl/environment_data/env_info = decls_repository.get_decl(environment_type) - for(var/gas_id in env_info.important_gasses) - environment_data[++environment_data.len] = list( - "name" = gas_data.name[gas_id], - "value" = environment.gas[gas_id] / total * 100, - "unit" = "%", - "danger_level" = env_info.dangerous_gasses[gas_id] ? co2_dangerlevel : oxygen_dangerlevel - ) - var/other_moles = 0 - for(var/g in trace_gas) - other_moles += environment.gas[g] - environment_data[++environment_data.len] = list("name" = "Other Gases", "value" = other_moles / total * 100, "unit" = "%", "danger_level" = other_dangerlevel) - - environment_data[++environment_data.len] = list("name" = "Temperature", "value" = environment.temperature, "unit" = "K ([round(environment.temperature - T0C, 0.1)]C)", "danger_level" = temperature_dangerlevel) - data["total_danger"] = danger_level - data["environment"] = environment_data - data["atmos_alarm"] = alarm_area.atmosalm - data["fire_alarm"] = alarm_area.fire != null - data["target_temperature"] = "[target_temperature - T0C]C" - -/obj/machinery/alarm/proc/populate_controls(var/list/data) - switch(screen) - if(AALARM_SCREEN_MAIN) - data["mode"] = mode - if(AALARM_SCREEN_VENT) - var/vents[0] - for(var/id_tag in alarm_area.air_vent_names) - var/long_name = alarm_area.air_vent_names[id_tag] - var/list/info = alarm_area.air_vent_info[id_tag] - if(!info) - continue - vents[++vents.len] = list( - "id_tag" = id_tag, - "long_name" = sanitize(long_name), - "power" = info["power"], - "checks" = info["checks"], - "direction" = info["direction"], - "external" = info["external"] - ) - data["vents"] = vents - if(AALARM_SCREEN_SCRUB) - var/scrubbers[0] - for(var/id_tag in alarm_area.air_scrub_names) - var/long_name = alarm_area.air_scrub_names[id_tag] - var/list/info = alarm_area.air_scrub_info[id_tag] - if(!info) - continue - scrubbers[++scrubbers.len] = list( - "id_tag" = id_tag, - "long_name" = sanitize(long_name), - "power" = info["power"], - "scrubbing" = info["scrubbing"], - "panic" = info["panic"], - "filters" = list() - ) - var/decl/environment_data/env_info = decls_repository.get_decl(environment_type) - for(var/gas_id in env_info.filter_gasses) - scrubbers[scrubbers.len]["filters"] += list( - list( - "name" = gas_data.name[gas_id], - "id" = gas_id, - "val" = (gas_id in info["scrubbing_gas"]) - ) - ) - - data["scrubbers"] = scrubbers - if(AALARM_SCREEN_MODE) - var/modes[0] - modes[++modes.len] = list("name" = "Filtering - Scrubs out contaminants", "mode" = AALARM_MODE_SCRUBBING, "selected" = mode == AALARM_MODE_SCRUBBING, "danger" = 0) - modes[++modes.len] = list("name" = "Replace Air - Siphons out air while replacing", "mode" = AALARM_MODE_REPLACEMENT, "selected" = mode == AALARM_MODE_REPLACEMENT, "danger" = 0) - modes[++modes.len] = list("name" = "Panic - Siphons air out of the room", "mode" = AALARM_MODE_PANIC, "selected" = mode == AALARM_MODE_PANIC, "danger" = 1) - modes[++modes.len] = list("name" = "Cycle - Siphons air before replacing", "mode" = AALARM_MODE_CYCLE, "selected" = mode == AALARM_MODE_CYCLE, "danger" = 1) - modes[++modes.len] = list("name" = "Fill - Shuts off scrubbers and opens vents", "mode" = AALARM_MODE_FILL, "selected" = mode == AALARM_MODE_FILL, "danger" = 0) - modes[++modes.len] = list("name" = "Off - Shuts off vents and scrubbers", "mode" = AALARM_MODE_OFF, "selected" = mode == AALARM_MODE_OFF, "danger" = 0) - data["modes"] = modes - data["mode"] = mode - if(AALARM_SCREEN_SENSORS) - var/list/selected - var/thresholds[0] - - var/breach_data = list("selected" = breach_pressure) - data["breach_data"] = breach_data - - var/list/gas_names = list( - GAS_OXYGEN = "O2", - GAS_CO2 = "CO2", - "other" = "Other") - for (var/g in gas_names) - thresholds[++thresholds.len] = list("name" = gas_names[g], "settings" = list()) - selected = TLV[g] - for(var/i = 1, i <= 4, i++) - thresholds[thresholds.len]["settings"] += list(list("env" = g, "val" = i, "selected" = selected[i])) - - selected = TLV["pressure"] - thresholds[++thresholds.len] = list("name" = "Pressure", "settings" = list()) - for(var/i = 1, i <= 4, i++) - thresholds[thresholds.len]["settings"] += list(list("env" = "pressure", "val" = i, "selected" = selected[i])) - - selected = TLV["temperature"] - thresholds[++thresholds.len] = list("name" = "Temperature", "settings" = list()) - for(var/i = 1, i <= 4, i++) - thresholds[thresholds.len]["settings"] += list(list("env" = "temperature", "val" = i, "selected" = selected[i])) - - - data["thresholds"] = thresholds - -/obj/machinery/alarm/CanUseTopic(var/mob/user, var/datum/topic_state/state, var/href_list = list()) - if(buildstage != 2) - return STATUS_CLOSE - - if(aidisabled && isAI(user)) - to_chat(user, "AI control for \the [src] interface has been disabled.") - return STATUS_CLOSE - - . = shorted ? STATUS_DISABLED : STATUS_INTERACTIVE - - if(. == STATUS_INTERACTIVE) - var/extra_href = state.href_list(user) - // Prevent remote users from altering RCON settings unless they already have access - if(href_list["rcon"] && extra_href["remote_connection"] && !extra_href["remote_access"]) - . = STATUS_UPDATE - - return min(..(), .) - -/obj/machinery/alarm/OnTopic(user, href_list, var/datum/topic_state/state) - // hrefs that can always be called -walter0o - if(href_list["rcon"]) - var/attempted_rcon_setting = text2num(href_list["rcon"]) - - switch(attempted_rcon_setting) - if(RCON_NO) - rcon_setting = RCON_NO - if(RCON_AUTO) - rcon_setting = RCON_AUTO - if(RCON_YES) - rcon_setting = RCON_YES - return TOPIC_REFRESH - - if(href_list["temperature"]) - var/list/selected = TLV["temperature"] - var/max_temperature = min(selected[3] - T0C, MAX_TEMPERATURE) - var/min_temperature = max(selected[2] - T0C, MIN_TEMPERATURE) - var/input_temperature = input(user, "What temperature would you like the system to maintain? (Capped between [min_temperature] and [max_temperature]C)", "Thermostat Controls", target_temperature - T0C) as num|null - if(isnum(input_temperature) && CanUseTopic(user, state)) - if(input_temperature > max_temperature || input_temperature < min_temperature) - to_chat(user, "Temperature must be between [min_temperature]C and [max_temperature]C") - else - target_temperature = input_temperature + T0C - return TOPIC_REFRESH - - // hrefs that need the AA unlocked -walter0o - var/extra_href = state.href_list(user) - if(!(locked && !extra_href["remote_connection"]) || extra_href["remote_access"] || issilicon(user)) - if(href_list["command"]) - var/device_id = href_list["id_tag"] - switch(href_list["command"]) - if("set_external_pressure") - var/input_pressure = input(user, "What pressure you like the system to mantain?", "Pressure Controls") as num|null - if(isnum(input_pressure) && CanUseTopic(user, state)) - send_signal(device_id, list(href_list["command"] = input_pressure)) - return TOPIC_REFRESH - - if("reset_external_pressure") - send_signal(device_id, list(href_list["command"] = ONE_ATMOSPHERE)) - return TOPIC_REFRESH - - if( "set_power", - "set_checks", - "panic_siphon") - - send_signal(device_id, list(href_list["command"] = text2num(href_list["val"]) ) ) - return TOPIC_REFRESH - - if("set_scrubbing") - send_signal(device_id, list(href_list["command"] = href_list["scrub_mode"]) ) - return TOPIC_REFRESH - - if("set_scrub_gas") - var/decl/environment_data/env_info = decls_repository.get_decl(environment_type) - if(env_info && (href_list["gas_id"] in env_info.filter_gasses)) - send_signal(device_id, list(href_list["command"] = list(href_list["gas_id"] = text2num(href_list["val"]))) ) - return TOPIC_REFRESH - - if("set_breach") - var/newval = input(user, "Enter minimum pressure for breach detection, preasures lower then this will cause vents to stop.", breach_pressure) as null|num - if (isnull(newval) || !CanUseTopic(user, state)) - return TOPIC_HANDLED - if (newval<0) - breach_pressure = -1.0 - else if (newval > 50*ONE_ATMOSPHERE) - breach_pressure = 50*ONE_ATMOSPHERE - else - breach_pressure = round(newval,0.01) - - if("set_threshold") - var/env = href_list["env"] - var/threshold = text2num(href_list["var"]) - var/list/selected = TLV[env] - var/list/thresholds = list("lower bound", "low warning", "high warning", "upper bound") - var/newval = input(user, "Enter [thresholds[threshold]] for [env]", "Alarm triggers", selected[threshold]) as null|num - if (isnull(newval) || !CanUseTopic(user, state)) - return TOPIC_HANDLED - if (newval<0) - selected[threshold] = -1.0 - else if (env=="temperature" && newval>5000) - selected[threshold] = 5000 - else if (env=="pressure" && newval>50*ONE_ATMOSPHERE) - selected[threshold] = 50*ONE_ATMOSPHERE - else if (env!="temperature" && env!="pressure" && newval>200) - selected[threshold] = 200 - else - newval = round(newval,0.01) - selected[threshold] = newval - if(threshold == 1) - if(selected[1] > selected[2]) - selected[2] = selected[1] - if(selected[1] > selected[3]) - selected[3] = selected[1] - if(selected[1] > selected[4]) - selected[4] = selected[1] - if(threshold == 2) - if(selected[1] > selected[2]) - selected[1] = selected[2] - if(selected[2] > selected[3]) - selected[3] = selected[2] - if(selected[2] > selected[4]) - selected[4] = selected[2] - if(threshold == 3) - if(selected[1] > selected[3]) - selected[1] = selected[3] - if(selected[2] > selected[3]) - selected[2] = selected[3] - if(selected[3] > selected[4]) - selected[4] = selected[3] - if(threshold == 4) - if(selected[1] > selected[4]) - selected[1] = selected[4] - if(selected[2] > selected[4]) - selected[2] = selected[4] - if(selected[3] > selected[4]) - selected[3] = selected[4] - - apply_mode() - return TOPIC_REFRESH - - if(href_list["screen"]) - screen = text2num(href_list["screen"]) - return TOPIC_REFRESH - - if(href_list["atmos_unlock"]) - switch(href_list["atmos_unlock"]) - if("0") - alarm_area.air_doors_close() - if("1") - alarm_area.air_doors_open() - return TOPIC_REFRESH - - if(href_list["atmos_alarm"]) - if (alarm_area.atmosalert(2, src)) - apply_danger_level(2) - update_icon() - return TOPIC_REFRESH - - if(href_list["atmos_reset"]) - if (alarm_area.atmosalert(0, src)) - apply_danger_level(0) - update_icon() - return TOPIC_REFRESH - - if(href_list["mode"]) - mode = text2num(href_list["mode"]) - apply_mode() - return TOPIC_REFRESH - -/obj/machinery/alarm/attackby(obj/item/W as obj, mob/user as mob) - switch(buildstage) - if(2) - if(isScrewdriver(W)) // Opening that Air Alarm up. -// to_chat(user, "You pop the Air Alarm's maintence panel open.") - wiresexposed = !wiresexposed - - //[INF] - user.visible_message( - "[user] [wiresexposed ? "opened" : "closed"] the maintenance hatch of [src].", - SPAN_NOTICE("You [wiresexposed ? "open" : "close"] the maintenance hatch of [src].")) - var/interact_sound = wiresexposed ? GLOB.machinery_exposed_sound[1] : GLOB.machinery_exposed_sound[2] - playsound(src, pick(interact_sound), 50, 1) - //[/INF] - - update_icon() - return - - if (wiresexposed && isWirecutter(W)) - user.visible_message("[user] has cut the wires inside \the [src]!", "You have cut the wires inside \the [src].") - playsound(src.loc, 'sound/items/Wirecutter.ogg', 50, 1) - new/obj/item/stack/cable_coil(get_turf(src), 5) - buildstage = 1 - update_icon() - return - - if (istype(W, /obj/item/card/id) || istype(W, /obj/item/modular_computer))// trying to unlock the interface with an ID card - if(stat & (NOPOWER|BROKEN)) - to_chat(user, "It does nothing") - return - else - if(allowed(usr) && !wires.IsIndexCut(AALARM_WIRE_IDSCAN)) - locked = !locked - to_chat(user, "You [ locked ? "lock" : "unlock"] the Air Alarm interface.") - else - to_chat(user, "Access denied.") - return - - if(1) - if(isCoil(W)) - var/obj/item/stack/cable_coil/C = W - if (C.use(5)) - to_chat(user, "You wire \the [src].") - buildstage = 2 - update_icon() - return - else - to_chat(user, "You need 5 pieces of cable to do wire \the [src].") - return - - else if(isCrowbar(W)) - to_chat(user, "You start prying out the circuit.") - playsound(src.loc, 'sound/items/Crowbar.ogg', 50, 1) - if(do_after(user, 2 SECONDS, src, DO_PUBLIC_UNIQUE) && buildstage == 1) - to_chat(user, "You pry out the circuit!") - var/obj/item/airalarm_electronics/circuit = new /obj/item/airalarm_electronics() - circuit.dropInto(user.loc) - buildstage = 0 - update_icon() - return - if(0) - if(istype(W, /obj/item/airalarm_electronics)) - to_chat(user, "You insert the circuit!") - qdel(W) - buildstage = 1 - update_icon() - return - - else if(isWrench(W)) - to_chat(user, "You remove the fire alarm assembly from the wall!") - new /obj/item/frame/air_alarm(get_turf(user)) - playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1) - qdel(src) - - return ..() - -/obj/machinery/alarm/examine(mob/user) - . = ..() - if (buildstage < 2) - to_chat(user, "It is not wired.") - if (buildstage < 1) - to_chat(user, "The circuit is missing.") -/* -AIR ALARM CIRCUIT -Just a object used in constructing air alarms -*/ -/obj/item/airalarm_electronics - name = "air alarm electronics" - icon = 'icons/obj/doors/door_assembly.dmi' - icon_state = "door_electronics" - desc = "Looks like a circuit. Probably is." - w_class = ITEM_SIZE_SMALL - matter = list(MATERIAL_STEEL = 50, MATERIAL_GLASS = 50) - -/* -FIRE ALARM -*/ -/obj/machinery/firealarm - name = "fire alarm" - desc = "\"Pull this in case of emergency\". Thus, keep pulling it forever." - icon = 'icons/obj/firealarm.dmi' - icon_state = "casing" - var/detecting = 1.0 - var/working = 1.0 - var/time = 10.0 - var/timing = 0.0 - var/lockdownbyai = 0 - anchored = TRUE - idle_power_usage = 2 - active_power_usage = 6 - power_channel = ENVIRON - var/last_process = 0 - var/wiresexposed = FALSE - var/buildstage = 2 // 2 = complete, 1 = no wires, 0 = circuit gone - var/seclevel - var/static/list/overlays_cache - -/obj/machinery/firealarm/examine(mob/user) - . = ..() - if(loc.z in GLOB.using_map.contact_levels) - var/decl/security_state/security_state = decls_repository.get_decl(GLOB.using_map.security_state) - to_chat(user, "The current alert level is [security_state.current_security_level.name].") - -/obj/machinery/firealarm/Initialize() - . = ..() - queue_icon_update() - -/obj/machinery/firealarm/proc/get_cached_overlay(state) - if(!LAZYACCESS(overlays_cache, state)) - LAZYSET(overlays_cache, state, image(icon, state)) - return overlays_cache[state] - -/obj/machinery/firealarm/on_update_icon() - overlays.Cut() - - pixel_x = 0 - pixel_y = 0 - var/walldir = (dir & (NORTH|SOUTH)) ? GLOB.reverse_dir[dir] : dir - var/turf/T = get_step(get_turf(src), walldir) - if(istype(T) && T.density) - if(dir == SOUTH) - pixel_y = 21 - else if(dir == NORTH) - pixel_y = -21 - else if(dir == EAST) - pixel_x = 21 - else if(dir == WEST) - pixel_x = -21 - - icon_state = "casing" - if(wiresexposed) - overlays += get_cached_overlay("b[buildstage]") - set_light(0) - return - - if(stat & BROKEN) - overlays += get_cached_overlay("broken") - set_light(0) - else if(stat & NOPOWER) - overlays += get_cached_overlay("unpowered") - set_light(0) - else - if(!detecting) - overlays += get_cached_overlay("fire1") - set_light(0.25, 0.1, 1, 2, COLOR_RED) - else if(z in GLOB.using_map.contact_levels) - var/decl/security_state/security_state = decls_repository.get_decl(GLOB.using_map.security_state) - var/decl/security_level/sl = security_state.current_security_level - - set_light(sl.light_max_bright, sl.light_inner_range, sl.light_outer_range, 2, sl.light_color_alarm) - overlays += image(sl.icon, sl.overlay_alarm) - else - overlays += get_cached_overlay("fire0") - -/obj/machinery/firealarm/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume) - if(src.detecting) - if(exposed_temperature > T0C+200) - src.alarm() // added check of detector status here - return - -/obj/machinery/firealarm/bullet_act() - return src.alarm() - -/obj/machinery/firealarm/emp_act(severity) - if(prob(50/severity)) - alarm(rand(30/severity, 60/severity)) - ..() - -/obj/machinery/firealarm/attackby(obj/item/W as obj, mob/user as mob) - if(isScrewdriver(W) && buildstage == 2) - wiresexposed = !wiresexposed - - user.visible_message( - "[user] [wiresexposed ? "opened" : "closed"] the maintenance hatch of [src].", - SPAN_NOTICE("You [wiresexposed ? "open" : "close"] the maintenance hatch of [src].")) - var/interact_sound = wiresexposed ? GLOB.machinery_exposed_sound[1] : GLOB.machinery_exposed_sound[2] - playsound(src, pick(interact_sound), 50, 1) - - update_icon() - return - - if(wiresexposed) - switch(buildstage) - if(2) - if(isMultitool(W)) - src.detecting = !( src.detecting ) - if (src.detecting) - user.visible_message("\The [user] has reconnected [src]'s detecting unit!", "You have reconnected [src]'s detecting unit.") - else - user.visible_message("\The [user] has disconnected [src]'s detecting unit!", "You have disconnected [src]'s detecting unit.") - else if(isWirecutter(W)) - user.visible_message("\The [user] has cut the wires inside \the [src]!", "You have cut the wires inside \the [src].") - new/obj/item/stack/cable_coil(get_turf(src), 5) - playsound(src.loc, 'sound/items/Wirecutter.ogg', 50, 1) - buildstage = 1 - update_icon() - if(1) - if(istype(W, /obj/item/stack/cable_coil)) - var/obj/item/stack/cable_coil/C = W - if (C.use(5)) - to_chat(user, "You wire \the [src].") - buildstage = 2 - update_icon() - return - else - to_chat(user, "You need 5 pieces of cable to wire \the [src].") - return - else if(isCrowbar(W)) - to_chat(user, "You start prying out the circuit.") - playsound(src.loc, 'sound/items/Crowbar.ogg', 50, 1) - if (do_after(user, 2 SECONDS, src, DO_PUBLIC_UNIQUE)) - to_chat(user, "You pry out the circuit!") - var/obj/item/firealarm_electronics/circuit = new /obj/item/firealarm_electronics() - circuit.dropInto(user.loc) - buildstage = 0 - update_icon() - if(0) - if(istype(W, /obj/item/firealarm_electronics)) - to_chat(user, "You insert the circuit!") - qdel(W) - buildstage = 1 - update_icon() - - else if(isWrench(W)) - to_chat(user, "You remove the fire alarm assembly from the wall!") - new /obj/item/frame/fire_alarm(get_turf(user)) - playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1) - qdel(src) - return - - src.alarm() - return - -/obj/machinery/firealarm/Process()//Note: this processing was mostly phased out due to other code, and only runs when needed - if(stat & (NOPOWER|BROKEN)) - return - - if(src.timing) - if(src.time > 0) - src.time = src.time - ((world.timeofday - last_process)/10) - else - src.alarm() - src.time = 0 - src.timing = 0 - STOP_PROCESSING_MACHINE(src, MACHINERY_PROCESS_SELF) - src.updateDialog() - last_process = world.timeofday - - if(locate(/obj/hotspot) in loc) - alarm() - -/obj/machinery/firealarm/interface_interact(mob/user) - interact(user) - return TRUE - -/obj/machinery/firealarm/interact(mob/user) - user.set_machine(src) - var/area/A = src.loc - var/d1 - var/d2 - - var/decl/security_state/security_state = decls_repository.get_decl(GLOB.using_map.security_state) - if (istype(user, /mob/living/carbon/human) || istype(user, /mob/living/silicon)) - A = A.loc - - if (A.fire) - d1 = text("Reset - Lockdown", src) - else - d1 = text("Alarm - Lockdown", src) - if (src.timing) - d2 = text("Stop Time Lock", src) - else - d2 = text("Initiate Time Lock", src) - var/second = round(src.time) % 60 - var/minute = (round(src.time) - second) / 60 - var/dat = "Fire alarm [d1]\n
      The current alert level is [security_state.current_security_level.name]

      \nTimer System: [d2]
      \nTime Left: [(minute ? "[minute]:" : null)][second] - - + +\n
      " - show_browser(user, dat, "window=firealarm") - onclose(user, "firealarm") - else - A = A.loc - if (A.fire) - d1 = text("[]", src, stars("Reset - Lockdown")) - else - d1 = text("[]", src, stars("Alarm - Lockdown")) - if (src.timing) - d2 = text("[]", src, stars("Stop Time Lock")) - else - d2 = text("[]", src, stars("Initiate Time Lock")) - var/second = round(src.time) % 60 - var/minute = (round(src.time) - second) / 60 - var/dat = "[stars("Fire alarm")] [d1]\n
      The current security level is [security_state.current_security_level.name]

      \nTimer System: [d2]
      \nTime Left: [(minute ? text("[]:", minute) : null)][second] - - + +\n
      " - show_browser(user, dat, "window=firealarm") - onclose(user, "firealarm") - return - -/obj/machinery/firealarm/CanUseTopic(user) - if(buildstage != 2) - return STATUS_CLOSE - return ..() - -/obj/machinery/firealarm/OnTopic(user, href_list) - if (href_list["reset"]) - src.reset() - . = TOPIC_REFRESH - else if (href_list["alarm"]) - src.alarm() - . = TOPIC_REFRESH - else if (href_list["time"]) - src.timing = text2num(href_list["time"]) - last_process = world.timeofday - START_PROCESSING_MACHINE(src, MACHINERY_PROCESS_SELF) - . = TOPIC_REFRESH - else if (href_list["tp"]) - var/tp = text2num(href_list["tp"]) - src.time += tp - src.time = min(max(round(src.time), 0), 120) - . = TOPIC_REFRESH - - if(. == TOPIC_REFRESH) - interact(user) - -/obj/machinery/firealarm/proc/reset() - if (!( src.working )) - return - var/area/area = get_area(src) - for(var/obj/machinery/firealarm/FA in area) - GLOB.fire_alarm.clearAlarm(loc, FA) - update_icon() - return - -/obj/machinery/firealarm/proc/alarm(var/duration = 0) - if (!( src.working)) - return - var/area/area = get_area(src) - for(var/obj/machinery/firealarm/FA in area) - GLOB.fire_alarm.triggerAlarm(loc, FA, duration) - update_icon() - playsound(src, 'sound/machines/fire_alarm.ogg', 75, 0) - return - - - -/obj/machinery/firealarm/New(loc, dir, atom/frame) - ..(loc) - - if(dir) - src.set_dir((dir & (NORTH|SOUTH)) ? dir : GLOB.reverse_dir[dir]) - - if(istype(frame)) - buildstage = 0 - wiresexposed = TRUE - pixel_x = (dir & 3)? 0 : (dir == 4 ? -21 : 21) - pixel_y = (dir & 3)? (dir ==1 ? -21 : 21) : 0 - update_icon() - frame.transfer_fingerprints_to(src) - -/obj/machinery/firealarm/Initialize() - . = ..() - if(z in GLOB.using_map.contact_levels) - update_icon() - -/* -FIRE ALARM CIRCUIT -Just a object used in constructing fire alarms -*/ -/obj/item/firealarm_electronics - name = "fire alarm electronics" - icon = 'icons/obj/doors/door_assembly.dmi' - icon_state = "door_electronics" - desc = "A circuit. It has a label on it, it says \"Can handle heat levels up to 40 degrees celsius!\"." - w_class = ITEM_SIZE_SMALL - matter = list(MATERIAL_STEEL = 50, MATERIAL_GLASS = 50) - -/obj/machinery/partyalarm - name = "\improper PARTY BUTTON" - desc = "Cuban Pete is in the house!" - icon = 'icons/obj/monitors.dmi' - icon_state = "fire0" - var/detecting = 1.0 - var/working = 1.0 - var/time = 10.0 - var/timing = 0.0 - var/lockdownbyai = 0 - anchored = TRUE - idle_power_usage = 2 - active_power_usage = 6 - -/obj/machinery/partyalarm/interface_interact(mob/user) - interact(user) - return TRUE - -/obj/machinery/partyalarm/interact(mob/user) - user.machine = src - var/area/A = get_area(src) - ASSERT(isarea(A)) - var/d1 - var/d2 - if (istype(user, /mob/living/carbon/human) || istype(user, /mob/living/silicon/ai)) - - if (A.party) - d1 = text("No Party :(", src) - else - d1 = text("PARTY!!!", src) - if (timing) - d2 = text("Stop Time Lock", src) - else - d2 = text("Initiate Time Lock", src) - var/second = time % 60 - var/minute = (time - second) / 60 - var/dat = text("Party Button []\n
      \nTimer System: []
      \nTime Left: [][] - - + +\n
      ", d1, d2, (minute ? text("[]:", minute) : null), second, src, src, src, src) - show_browser(user, dat, "window=partyalarm") - onclose(user, "partyalarm") - else - if (A.fire) - d1 = text("[]", src, stars("No Party :(")) - else - d1 = text("[]", src, stars("PARTY!!!")) - if (timing) - d2 = text("[]", src, stars("Stop Time Lock")) - else - d2 = text("[]", src, stars("Initiate Time Lock")) - var/second = time % 60 - var/minute = (time - second) / 60 - var/dat = text("[] []\n
      \nTimer System: []
      \nTime Left: [][] - - + +\n
      ", stars("Party Button"), d1, d2, (minute ? text("[]:", minute) : null), second, src, src, src, src) - show_browser(user, dat, "window=partyalarm") - onclose(user, "partyalarm") - return - -/obj/machinery/partyalarm/proc/reset() - if (!( working )) - return - var/area/A = get_area(src) - ASSERT(isarea(A)) - A.partyreset() - return - -/obj/machinery/partyalarm/proc/alarm() - if (!( working )) - return - var/area/A = get_area(src) - ASSERT(isarea(A)) - A.partyalert() - return - -/obj/machinery/partyalarm/OnTopic(user, href_list) - if (href_list["reset"]) - reset() - . = TOPIC_REFRESH - else if (href_list["alarm"]) - alarm() - . = TOPIC_REFRESH - else if (href_list["time"]) - timing = text2num(href_list["time"]) - . = TOPIC_REFRESH - else if (href_list["tp"]) - var/tp = text2num(href_list["tp"]) - time += tp - time = min(max(round(time), 0), 120) - . = TOPIC_REFRESH - - if(. == TOPIC_REFRESH) - interact(user) diff --git a/code/game/machinery/atmo_control.dm b/code/game/machinery/atmo_control.dm deleted file mode 100644 index 3d0a8cb0fb778..0000000000000 --- a/code/game/machinery/atmo_control.dm +++ /dev/null @@ -1,335 +0,0 @@ -/obj/machinery/computer/air_control - icon = 'icons/obj/computer.dmi' - icon_keyboard = "atmos_key" - icon_screen = "tank" - - name = "Atmospherics Control Console" - machine_name = "atmosphere monitoring console" - machine_desc = "Allows for the monitoring of the gases in an area by using a connected gas sensor, as well as controlling injection and output." - - var/frequency = 1441 - var/datum/radio_frequency/radio_connection - - var/pressure_setting = ONE_ATMOSPHERE * 45 - var/input_flow_setting = 200 - var/list/input_info = list() - var/list/output_info = list() - var/list/sensor_info = list() - var/input_tag - var/output_tag - var/sensor_tag - var/sensor_name - var/refreshing_input = FALSE - var/refreshing_output = FALSE - var/refreshing_sensor = FALSE - - //switch output pressure mode from internal (0) to external (1) - var/out_pressure_mode = 0 - - var/automation = -1 //Disables section for anything not using automation. Currently only applies to fuel injection control subtype. - - var/list/data = list("screen" = 1) - -/obj/machinery/computer/air_control/Initialize() - . = ..() - set_frequency(frequency) - -/obj/machinery/computer/air_control/Destroy() - if(radio_controller) - radio_controller.remove_object(src, frequency) - ..() - -/obj/machinery/computer/air_control/interface_interact(mob/user) - ui_interact(user) - return TRUE - -/obj/machinery/computer/air_control/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1) - ui = SSnano.try_update_ui(user, src, ui_key, ui, data, force_open) - data["systemname"] = name - get_console_data() - if(!ui) - ui = new(user, src, ui_key, "atmosconsole.tmpl", data["systemname"], 800, 800) - ui.set_initial_data(data) - ui.open() - ui.set_auto_update(1) - -/obj/machinery/computer/air_control/proc/get_console_data() - if(sensor_info) - var/list/temp = list() - if(input_tag || output_tag) - data["control"] = 1 - else - data["control"] = 0 - - if(!sensor_name && sensor_tag) - temp += list("long_name" = sensor_tag) - else - temp += list("long_name" = sensor_name) - if(sensor_info["pressure"]) - temp += list("pressure" = sensor_info["pressure"]) - if(sensor_info["temperature"]) - temp += list("temperature" = sensor_info["temperature"]) - - data["gasses"] = list() - - if(sensor_info["gas"]) - data["gasses"] = sensor_info["gas"] - - data["sensors"] = list(temp) - refreshing_sensor = FALSE - else if(!refreshing_sensor) - data["sensors"] = list() - - if(frequency%10) - data["frequency"] = frequency/10 - else - data["frequency"] = "[frequency/10].0" - data["input_tag"] = input_tag - data["output_tag"] = output_tag - data["sensor_tag"] = sensor_tag - - if(input_info) - data["input_present"] = TRUE - data["in_power"] = input_info["power"] - data["atmos_volume"] = ATMOS_DEFAULT_VOLUME_PUMP+500 - data["input_flow_setting"] = round(input_flow_setting, 0.1) - refreshing_input = FALSE - else if(!refreshing_input) - data["input_present"] = FALSE - - if(output_info) - data["output_present"] = TRUE - data["out_power"] = output_info["power"] - data["max_pump_pressure"] = MAX_PUMP_PRESSURE - data["out_pressure_setting"] = pressure_setting - data["external_pressure"] = output_info["external"] - refreshing_output = FALSE - else if(!refreshing_output) - data["output_present"] = FALSE - - data["out_pressure_mode"] = out_pressure_mode - - data["automation"] = automation - -/obj/machinery/computer/air_control/Process() - ..() - -/obj/machinery/computer/air_control/receive_signal(datum/signal/signal) - if(!signal || signal.encryption) - return - - var/id_tag = signal.data["tag"] - if(sensor_tag == id_tag) - sensor_info = signal.data - else if(input_tag == id_tag) - input_info = signal.data - else if(output_tag == id_tag) - output_info = signal.data - else - ..(signal) - -/obj/machinery/computer/air_control/proc/set_frequency(new_frequency) - radio_controller.remove_object(src, frequency) - frequency = new_frequency - radio_connection = radio_controller.add_object(src, frequency, RADIO_ATMOSIA) - -/obj/machinery/computer/air_control/OnTopic(mob/user, href_list, datum/topic_state/state) - if(..()) - return TOPIC_HANDLED - - var/datum/signal/signal = new - signal.transmission_method = 1 //radio signal - signal.source = src - - if(href_list["in_refresh_status"]) - input_info = null - refreshing_input = TRUE - signal.data = list ("tag" = input_tag, "status" = 1) - . = 1 - - if(href_list["in_toggle_injector"]) - input_info = null - refreshing_input = TRUE - signal.data = list ("tag" = input_tag, "power_toggle" = 1) - . = 1 - - if(href_list["in_set_flowrate"]) - input_info = null - refreshing_input = TRUE - input_flow_setting = input("What would you like to set the rate limit to?", "Set Volume", input_flow_setting) as num|null - input_flow_setting = clamp(input_flow_setting, 0, ATMOS_DEFAULT_VOLUME_PUMP+500) - signal.data = list ("tag" = input_tag, "set_volume_rate" = "[input_flow_setting]") - . = 1 - - if(href_list["in_set_max"]) - input_info = null - refreshing_input = TRUE - input_flow_setting = ATMOS_DEFAULT_VOLUME_PUMP+500 - signal.data = list ("tag" = input_tag, "set_volume_rate" = "[input_flow_setting]") - . = 1 - - if(href_list["out_refresh_status"]) - output_info = null - refreshing_output = TRUE - signal.data = list ("tag" = output_tag, "status" = 1) - . = 1 - - if(href_list["out_toggle_power"]) - output_info = null - refreshing_output = TRUE - signal.data = list ("tag" = output_tag, "power_toggle" = 1, "status" = 1) - . = 1 - - if(href_list["out_set_pressure"]) - output_info = null - refreshing_output = TRUE - pressure_setting = input("How much pressure would you like to output?", "Set Pressure", pressure_setting) as num|null - pressure_setting = clamp(pressure_setting, 0, MAX_PUMP_PRESSURE) - signal.data = list ("tag" = output_tag, "set_internal_pressure" = pressure_setting, "status" = 1) - . = 1 - - if(href_list["s_out_set_pressure"]) - output_info = null - refreshing_output = TRUE - pressure_setting = input("How much pressure would you like to maintain inside the core?", "Set Core Pressure", pressure_setting) as num|null - pressure_setting = clamp(pressure_setting, 0, MAX_PUMP_PRESSURE) - signal.data = list ("tag" = output_tag, "set_external_pressure" = pressure_setting, "checks" = 1, "status" = 1) - . = 1 - - if(href_list["s_set_default"]) - output_info = null - refreshing_output = TRUE - signal.data = list("tag" = output_tag, "set_external_pressure" = pressure_setting, "checks" = 1, "status" = 1) - . = 1 - - if(href_list["out_set_max"]) - output_info = null - refreshing_output = TRUE - pressure_setting = MAX_PUMP_PRESSURE - signal.data = list ("tag" = output_tag, "set_internal_pressure" = pressure_setting, "status" = 1) - . = 1 - - if(href_list["set_frequency"]) - var/F = input("What frequency would you like to set this to? (Decimal is added automatically)", "Adjust Frequency", frequency) as num|null - if(F) - frequency = F - set_frequency(F) - return TOPIC_REFRESH - - if(href_list["set_input_tag"]) - var/t = sanitizeSafe(input(usr, "Enter the input ID tag.", src.name, src.input_tag), MAX_NAME_LEN) - t = sanitizeSafe(t, MAX_NAME_LEN) - if (t) - src.input_tag = t - return TOPIC_REFRESH - - if(href_list["set_output_tag"]) - var/t = sanitizeSafe(input(usr, "Enter the output ID tag.", src.name, src.output_tag), MAX_NAME_LEN) - t = sanitizeSafe(t, MAX_NAME_LEN) - if (t) - src.output_tag = t - return TOPIC_REFRESH - - if(href_list["set_sensor_tag"]) - var/t = sanitizeSafe(input(usr, "Enter the sensor ID tag.", src.name, src.sensor_tag)) - t = sanitizeSafe(t, MAX_NAME_LEN) - if(t) - src.sensor_tag = t - return TOPIC_REFRESH - - if(href_list["set_sensor_name"]) - var/t = sanitizeSafe(input(usr, "Enter the sensor name.", src.name, src.sensor_name)) - t = sanitizeSafe(t, MAX_NAME_LEN) - if(t) - src.sensor_name = t - return TOPIC_REFRESH - - if(href_list["toggle_pressure_mode"]) - out_pressure_mode = !out_pressure_mode - return TOPIC_REFRESH - - if(href_list["set_screen"]) - data["screen"] = text2num(href_list["set_screen"]) - return TOPIC_REFRESH - - if(!radio_connection) - return TOPIC_HANDLED - - signal.data["sigtype"] = "command" - signal.data["status"] = TRUE - radio_connection.post_signal(src, signal, radio_filter = RADIO_ATMOSIA) - -/obj/machinery/computer/air_control/fuel_injection - icon = 'icons/obj/computer.dmi' - icon_screen = "alert:0" - machine_name = "injector control" - machine_desc = "An atmosphere monitoring console, modified specifically for controlling gas injectors." - - var/device_tag - var/list/device_info = list() - - automation = 0 - - var/cutoff_temperature = 2000 - var/on_temperature = 1200 - -/obj/machinery/computer/air_control/fuel_injection/receive_signal(datum/signal/signal) - if(!signal || signal.encryption) return - - var/id_tag = signal.data["tag"] - - if(device_tag == id_tag) - device_info = signal.data - else - ..(signal) - -/obj/machinery/computer/air_control/fuel_injection/Topic(href, href_list) - if((. = ..())) - return - - if(href_list["toggle_automation"]) - automation = !automation - - var/datum/signal/signal = new - signal.transmission_method = 1 //radio signal - signal.source = src - signal.data = list( - "tag" = device_tag, - "power_toggle" = 1, - "sigtype" = "command" - ) - ..() - -/obj/machinery/computer/air_control/fuel_injection/Process() - if(automation) - if(!radio_connection) - return 0 - - var/injecting = 0 - if(sensor_info) - if(sensor_info["temperature"]) - if(sensor_info["temperature"] >= cutoff_temperature) - injecting = 0 - else if(sensor_info["temperature"] <= on_temperature) - injecting = 1 - - var/datum/signal/signal = new - signal.transmission_method = 1 //radio signal - signal.source = src - - signal.data = list( - "tag" = device_tag, - "set_power" = injecting, - "sigtype" = "command" - ) - - radio_connection.post_signal(src, signal, radio_filter = RADIO_ATMOSIA) - - ..() - -/obj/machinery/computer/air_control/supermatter_core - icon = 'icons/obj/computer.dmi' - frequency = 1438 - out_pressure_mode = 1 - machine_name = "core control" - machine_desc = "An atmosphere monitoring console, modified for use in a supermatter engine." diff --git a/code/game/machinery/atmoalter/area_atmos_computer.dm b/code/game/machinery/atmoalter/area_atmos_computer.dm deleted file mode 100644 index c35deed7299eb..0000000000000 --- a/code/game/machinery/atmoalter/area_atmos_computer.dm +++ /dev/null @@ -1,138 +0,0 @@ -/obj/machinery/computer/area_atmos - name = "Area Air Control" - desc = "A computer used to control the stationary scrubbers and pumps in the area." - icon_keyboard = "atmos_key" - icon_screen = "area_atmos" - light_color = "#e6ffff" - machine_name = "area air control console" - machine_desc = "A larger and less complex form of air alarm that allows configuration of an area's vents and scrubbers." - var/list/connectedscrubbers = list() - var/status = "" - var/range = 25 - var/zone = "This computer is working on a wireless range, the range is currently limited to 25 meters." - - -/obj/machinery/computer/area_atmos/Destroy() - connectedscrubbers.Cut() - return ..() - - -/obj/machinery/computer/area_atmos/New() - ..() - spawn(10) - scanscrubbers() - - -/obj/machinery/computer/area_atmos/attack_ai(mob/user) - return attack_hand(user) - - -/obj/machinery/computer/area_atmos/attack_hand(mob/user) - if(..(user)) - return - var/dat = {" - - - - - -

      Area Air Control

      - [status]
      - Scan - "} - for(var/obj/machinery/portable_atmospherics/powered/scrubber/huge/scrubber in connectedscrubbers) - dat += {" - - - - "} - dat += {" -
      - [scrubber.name]
      - Pressure: [round(scrubber.air_contents.return_pressure(), 0.01)] kPa
      - Flow Rate: [round(scrubber.last_flow_rate,0.1)] L/s
      -
      - Turn On - Turn Off
      - Load: [round(scrubber.last_power_draw)] W -

      - [zone] - - "} - show_browser(user, "[dat]", "window=miningshuttle;size=400x400") - status = "" - - -/obj/machinery/computer/area_atmos/Topic(href, href_list) - if (..()) - return - usr.set_machine(src) - if(href_list["scan"]) - scanscrubbers() - else if(href_list["toggle"]) - var/obj/machinery/portable_atmospherics/powered/scrubber/huge/scrubber = locate(href_list["scrub"]) - if (!validscrubber(scrubber)) - spawn(20) - status = "ERROR: Couldn't connect to scrubber! (timeout)" - connectedscrubbers -= scrubber - updateUsrDialog() - return - scrubber.update_use_power(text2num(href_list["toggle"]) ? POWER_USE_ACTIVE : POWER_USE_IDLE) - scrubber.update_icon() - - -/obj/machinery/computer/area_atmos/proc/validscrubber(obj/machinery/portable_atmospherics/powered/scrubber/huge/scrubber) - if (!istype(scrubber)) - return FALSE - if (scrubber.z != z) - return FALSE - if (get_dist(scrubber, src) > range) - return FALSE - return TRUE - -/obj/machinery/computer/area_atmos/proc/scanscrubbers() - connectedscrubbers.Cut() - for (var/obj/machinery/portable_atmospherics/powered/scrubber/huge/scrubber in orange(range, src)) - connectedscrubbers += scrubber - if (!connectedscrubbers.len) - status = "ERROR: No scrubber found!" - updateUsrDialog() - - -/obj/machinery/computer/area_atmos/area - zone = "This computer is working in a wired network limited to this area." - - -/obj/machinery/computer/area_atmos/area/validscrubber(obj/machinery/portable_atmospherics/powered/scrubber/huge/scrubber) - if (!istype(scrubber)) - return FALSE - var/area/A = get_area(src) - if (!A) - return FALSE - var/area/B = get_area(scrubber) - if (!B) - return FALSE - if (A != B) - return FALSE - return TRUE - - -/obj/machinery/computer/area_atmos/area/scanscrubbers() - connectedscrubbers.Cut() - var/area/A = get_area(src) - if (!A) - return - for (var/obj/machinery/portable_atmospherics/powered/scrubber/huge/scrubber in A) - connectedscrubbers += scrubber - if (!connectedscrubbers.len) - status = "ERROR: No scrubber found!" - updateUsrDialog() diff --git a/code/game/machinery/atmoalter/canister.dm b/code/game/machinery/atmoalter/canister.dm deleted file mode 100644 index e698d61e3290e..0000000000000 --- a/code/game/machinery/atmoalter/canister.dm +++ /dev/null @@ -1,468 +0,0 @@ -/obj/machinery/portable_atmospherics/canister - name = "\improper Canister: \[CAUTION\]" - icon = 'icons/obj/atmos.dmi' - icon_state = "yellow" - density = TRUE - var/health = 100.0 - obj_flags = OBJ_FLAG_CONDUCTIBLE - w_class = ITEM_SIZE_GARGANTUAN - construct_state = null - - var/valve_open = 0 - var/release_pressure = ONE_ATMOSPHERE - var/release_flow_rate = ATMOS_DEFAULT_VOLUME_PUMP //in L/s - - var/canister_color = "yellow" - var/can_label = 1 - start_pressure = 45 * ONE_ATMOSPHERE - var/temperature_resistance = 1000 + T0C - volume = 1000 - interact_offline = 1 // Allows this to be used when not in powered area. - - var/const/CANISTER_PRESSURE_EMPTY = ONE_ATMOSPHERE - var/const/CANISTER_PRESSURE_LOW = 50 * ONE_ATMOSPHERE - var/const/CANISTER_PRESSURE_MID = 100 * ONE_ATMOSPHERE - var/const/CANISTER_PRESSURE_HIGH = 150 * ONE_ATMOSPHERE - -/obj/machinery/portable_atmospherics/canister/drain_power() - return -1 - -/obj/machinery/portable_atmospherics/canister/sleeping_agent - name = "\improper Canister: \[N2O\]" - icon_state = "redws" - canister_color = "redws" - can_label = 0 - -/obj/machinery/portable_atmospherics/canister/nitrogen - name = "\improper Canister: \[N2\]" - icon_state = "red" - canister_color = "red" - can_label = 0 - -/obj/machinery/portable_atmospherics/canister/nitrogen/prechilled - name = "\improper Canister: \[N2 (Cooling)\]" - -/obj/machinery/portable_atmospherics/canister/oxygen - name = "\improper Canister: \[O2\]" - icon_state = "blue" - canister_color = "blue" - can_label = 0 - -/obj/machinery/portable_atmospherics/canister/oxygen/prechilled - name = "\improper Canister: \[O2 (Cryo)\]" - start_pressure = 20 * ONE_ATMOSPHERE - -/obj/machinery/portable_atmospherics/canister/hydrogen - name = "\improper Canister: \[Hydrogen\]" - icon_state = "purple" - canister_color = "purple" - can_label = 0 - -/obj/machinery/portable_atmospherics/canister/phoron - name = "\improper Canister \[Phoron\]" - icon_state = "orange" - canister_color = "orange" - can_label = 0 - -/obj/machinery/portable_atmospherics/canister/carbon_dioxide - name = "\improper Canister \[CO2\]" - icon_state = "black" - canister_color = "black" - can_label = 0 - -/obj/machinery/portable_atmospherics/canister/air - name = "\improper Canister \[Air\]" - icon_state = "grey" - canister_color = "grey" - can_label = 0 - -/obj/machinery/portable_atmospherics/canister/boron - name = "\improper Canister \[Boron\]" - icon_state = "lightblue" - canister_color = "lightblue" - can_label = 0 - -/obj/machinery/portable_atmospherics/canister/air/airlock - start_pressure = 3 * ONE_ATMOSPHERE - -/obj/machinery/portable_atmospherics/canister/empty - start_pressure = 0 - can_label = 1 - var/obj/machinery/portable_atmospherics/canister/canister_type = /obj/machinery/portable_atmospherics/canister - -/obj/machinery/portable_atmospherics/canister/empty/New() - ..() - name = initial(canister_type.name) - icon_state = initial(canister_type.icon_state) - canister_color = initial(canister_type.canister_color) - -/obj/machinery/portable_atmospherics/canister/empty/air - icon_state = "grey" - canister_type = /obj/machinery/portable_atmospherics/canister/air -/obj/machinery/portable_atmospherics/canister/empty/oxygen - icon_state = "blue" - canister_type = /obj/machinery/portable_atmospherics/canister/oxygen -/obj/machinery/portable_atmospherics/canister/empty/phoron - icon_state = "orange" - canister_type = /obj/machinery/portable_atmospherics/canister/phoron -/obj/machinery/portable_atmospherics/canister/empty/nitrogen - icon_state = "red" - canister_type = /obj/machinery/portable_atmospherics/canister/nitrogen -/obj/machinery/portable_atmospherics/canister/empty/carbon_dioxide - icon_state = "black" - canister_type = /obj/machinery/portable_atmospherics/canister/carbon_dioxide -/obj/machinery/portable_atmospherics/canister/empty/sleeping_agent - icon_state = "redws" - canister_type = /obj/machinery/portable_atmospherics/canister/sleeping_agent -/obj/machinery/portable_atmospherics/canister/empty/hydrogen - icon_state = "purple" - canister_type = /obj/machinery/portable_atmospherics/canister/hydrogen - - -/obj/machinery/portable_atmospherics/canister/on_update_icon() - if (destroyed) - overlays.Cut() - icon_state = "[canister_color]-1" - return - - if (icon_state != "[canister_color]") - icon_state = "[canister_color]" - - overlays.Cut() - - if (holding) - overlays += "can-open" - if (connected_port) - overlays += "can-connector" - - var/tank_pressure = return_pressure() - if (tank_pressure <= CANISTER_PRESSURE_EMPTY) - overlays += "can-o0" - else if (tank_pressure <= CANISTER_PRESSURE_LOW) - overlays += "can-o1" - else if (tank_pressure <= CANISTER_PRESSURE_MID) - overlays += "can-o2" - else - overlays += "can-o3" - -/obj/machinery/portable_atmospherics/canister/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume) - if(exposed_temperature > temperature_resistance) - health -= 5 - healthcheck() - -/obj/machinery/portable_atmospherics/canister/proc/healthcheck() - if(destroyed) - return 1 - - if (src.health <= 10) - var/atom/location = src.loc - location.assume_air(air_contents) - - src.destroyed = 1 - playsound(src.loc, 'sound/effects/spray.ogg', 10, 1, -3) - src.set_density(0) - update_icon() - - if (src.holding) - src.holding.dropInto(loc) - src.holding = null - - return 1 - else - return 1 - -/obj/machinery/portable_atmospherics/canister/Process() - if (destroyed) - return - - ..() - - if(valve_open) - var/datum/gas_mixture/environment - if(holding) - environment = holding.air_contents - else - environment = loc.return_air() - - var/env_pressure = environment.return_pressure() - var/pressure_delta = release_pressure - env_pressure - - if((air_contents.temperature > 0) && (pressure_delta > 0)) - var/transfer_moles = calculate_transfer_moles(air_contents, environment, pressure_delta) - transfer_moles = min(transfer_moles, (release_flow_rate/air_contents.volume)*air_contents.total_moles) //flow rate limit - - var/returnval = pump_gas_passive(src, air_contents, environment, transfer_moles) - if(returnval >= 0) - src.update_icon() - if(holding) - holding.queue_icon_update() - - if(air_contents.return_pressure() < 1) - can_label = 1 - else - can_label = 0 - - air_contents.react() //cooking up air cans - add phoron and oxygen, then heat above PHORON_MINIMUM_BURN_TEMPERATURE - -/obj/machinery/portable_atmospherics/canister/proc/return_temperature() - var/datum/gas_mixture/GM = src.return_air() - if(GM && GM.volume>0) - return GM.temperature - return 0 - -/obj/machinery/portable_atmospherics/canister/proc/return_pressure() - var/datum/gas_mixture/GM = src.return_air() - if(GM && GM.volume>0) - return GM.return_pressure() - return 0 - -/obj/machinery/portable_atmospherics/canister/bullet_act(var/obj/item/projectile/Proj) - if (!(Proj.damage_type == DAMAGE_BRUTE || Proj.damage_type == DAMAGE_BURN)) - return - - if(Proj.damage) - src.health -= round(Proj.damage / 2) - healthcheck() - ..() - -/obj/machinery/portable_atmospherics/canister/attackby(var/obj/item/W as obj, var/mob/user as mob) - if(!isWrench(W) && !istype(W, /obj/item/tank) && !istype(W, /obj/item/device/scanner/gas) && !istype(W, /obj/item/modular_computer/pda)) - visible_message("\The [user] hits \the [src] with \a [W]!") - src.health -= W.force - healthcheck() - - if(istype(user, /mob/living/silicon/robot) && istype(W, /obj/item/tank/jetpack)) - var/datum/gas_mixture/thejetpack = W:air_contents - var/env_pressure = thejetpack.return_pressure() - var/pressure_delta = min(10*ONE_ATMOSPHERE - env_pressure, (air_contents.return_pressure() - env_pressure)/2) - //Can not have a pressure delta that would cause environment pressure > tank pressure - var/transfer_moles = 0 - if((air_contents.temperature > 0) && (pressure_delta > 0)) - transfer_moles = pressure_delta*thejetpack.volume/(air_contents.temperature * R_IDEAL_GAS_EQUATION)//Actually transfer the gas - var/datum/gas_mixture/removed = air_contents.remove(transfer_moles) - thejetpack.merge(removed) - to_chat(user, "You pulse-pressurize your jetpack from the tank.") - return - - ..() - - SSnano.update_uis(src) // Update all NanoUIs attached to src - -/obj/machinery/portable_atmospherics/canister/interface_interact(mob/user) - ui_interact(user) - return TRUE - -/obj/machinery/portable_atmospherics/canister/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1) - // this is the data which will be sent to the ui - var/data[0] - data["name"] = name - data["canLabel"] = can_label ? 1 : 0 - data["portConnected"] = connected_port ? 1 : 0 - data["tankPressure"] = round(air_contents.return_pressure() ? air_contents.return_pressure() : 0) - data["releasePressure"] = round(release_pressure ? release_pressure : 0) - data["minReleasePressure"] = round(ONE_ATMOSPHERE/10) - data["maxReleasePressure"] = round(10*ONE_ATMOSPHERE) - data["valveOpen"] = valve_open ? 1 : 0 - - data["hasHoldingTank"] = holding ? 1 : 0 - if (holding) - data["holdingTank"] = list("name" = holding.name, "tankPressure" = round(holding.air_contents.return_pressure())) - - ui = SSnano.try_update_ui(user, src, ui_key, ui, data, force_open) - if (!ui) - ui = new(user, src, ui_key, "canister.tmpl", "Canister", 480, 400) - ui.set_initial_data(data) - ui.open() - ui.set_auto_update(1) - -/obj/machinery/portable_atmospherics/canister/OnTopic(var/mob/user, href_list, state) - if(href_list["toggle"]) - if (!valve_open) - if(!holding) - log_open() - valve_open = !valve_open - . = TOPIC_REFRESH - - else if (href_list["remove_tank"]) - if(!holding) - return TOPIC_HANDLED - if (valve_open) - valve_open = 0 - if(istype(holding, /obj/item/tank)) - holding.manipulated_by = user.real_name - holding.dropInto(loc) - holding = null - update_icon() - . = TOPIC_REFRESH - - else if (href_list["pressure_adj"]) - var/diff = text2num(href_list["pressure_adj"]) - if(diff > 0) - release_pressure = min(10*ONE_ATMOSPHERE, release_pressure+diff) - else - release_pressure = max(ONE_ATMOSPHERE/10, release_pressure+diff) - . = TOPIC_REFRESH - - else if (href_list["relabel"]) - if (!can_label) - return 0 - var/list/colors = list(\ - "\[N2O\]" = "redws", \ - "\[N2\]" = "red", \ - "\[O2\]" = "blue", \ - "\[Phoron\]" = "orange", \ - "\[CO2\]" = "black", \ - "\[H2\]" = "purple", \ - "\[Air\]" = "grey", \ - "\[CAUTION\]" = "yellow", \ - ) - var/label = input(user, "Choose canister label", "Gas canister") as null|anything in colors - if (label && CanUseTopic(user, state)) - canister_color = colors[label] - icon_state = colors[label] - SetName("\improper Canister: [label]") - update_icon() - . = TOPIC_REFRESH - -/obj/machinery/portable_atmospherics/canister/CanUseTopic() - if(destroyed) - return STATUS_CLOSE - return ..() - -/obj/machinery/portable_atmospherics/canister/phoron/New() - ..() - - src.air_contents.adjust_gas(GAS_PHORON, MolesForPressure()) - src.update_icon() - return 1 - -/obj/machinery/portable_atmospherics/canister/oxygen/New() - ..() - - src.air_contents.adjust_gas(GAS_OXYGEN, MolesForPressure()) - src.update_icon() - return 1 - -/obj/machinery/portable_atmospherics/canister/hydrogen/New() - ..() - src.air_contents.adjust_gas(GAS_HYDROGEN, MolesForPressure()) - src.update_icon() - return 1 - -/obj/machinery/portable_atmospherics/canister/oxygen/prechilled/New() - ..() - src.air_contents.temperature = 80 - src.update_icon() - return 1 - -/obj/machinery/portable_atmospherics/canister/sleeping_agent/New() - ..() - - air_contents.adjust_gas(GAS_N2O, MolesForPressure()) - src.update_icon() - return 1 - -//Dirty way to fill room with gas. However it is a bit easier to do than creating some floor/engine/n2o -rastaf0 -/obj/machinery/portable_atmospherics/canister/sleeping_agent/roomfiller/New() - ..() - air_contents.gas[GAS_N2O] = 9*4000 - spawn(10) - var/turf/simulated/location = src.loc - if (istype(src.loc)) - while (!location.air) - sleep(10) - location.assume_air(air_contents) - air_contents = new - return 1 - -/obj/machinery/portable_atmospherics/canister/nitrogen/New() - ..() - src.air_contents.adjust_gas(GAS_NITROGEN, MolesForPressure()) - src.update_icon() - return 1 - -/obj/machinery/portable_atmospherics/canister/nitrogen/prechilled/New() - ..() - src.air_contents.temperature = 80 - src.update_icon() - return 1 - -/obj/machinery/portable_atmospherics/canister/carbon_dioxide/New() - ..() - src.air_contents.adjust_gas(GAS_CO2, MolesForPressure()) - src.update_icon() - return 1 - - -/obj/machinery/portable_atmospherics/canister/air/New() - ..() - var/list/air_mix = StandardAirMix() - src.air_contents.adjust_multi(GAS_OXYGEN, air_mix[GAS_OXYGEN], GAS_NITROGEN, air_mix[GAS_NITROGEN]) - - src.update_icon() - return 1 - -/obj/machinery/portable_atmospherics/canister/boron/New() - ..() - src.air_contents.adjust_gas(GAS_BORON, MolesForPressure()) - src.update_icon() - return 1 - -// Special types used for engine setup admin verb, they contain double amount of that of normal canister. -/obj/machinery/portable_atmospherics/canister/nitrogen/engine_setup/New() - ..() - src.air_contents.adjust_gas(GAS_NITROGEN, MolesForPressure()) - src.update_icon() - return 1 - -/obj/machinery/portable_atmospherics/canister/carbon_dioxide/engine_setup/New() - ..() - src.air_contents.adjust_gas(GAS_CO2, MolesForPressure()) - src.update_icon() - return 1 - -/obj/machinery/portable_atmospherics/canister/phoron/engine_setup/New() - ..() - src.air_contents.adjust_gas(GAS_PHORON, MolesForPressure()) - src.update_icon() - return 1 - -/obj/machinery/portable_atmospherics/canister/hydrogen/engine_setup/New() - ..() - src.air_contents.adjust_gas(GAS_HYDROGEN, MolesForPressure()) - src.update_icon() - -// Spawn debug tanks. -/obj/machinery/portable_atmospherics/canister/helium - name = "\improper Canister \[He\]" - icon_state = "black" - canister_color = "black" - can_label = 0 - -/obj/machinery/portable_atmospherics/canister/helium/New() - ..() - air_contents.adjust_gas(GAS_HELIUM, MolesForPressure()) - update_icon() - -/obj/machinery/portable_atmospherics/canister/methyl_bromide - name = "\improper Canister \[CH3Br\]" - icon_state = "black" - canister_color = "black" - can_label = 0 - -/obj/machinery/portable_atmospherics/canister/methyl_bromide/New() - ..() - air_contents.adjust_gas(GAS_METHYL_BROMIDE, MolesForPressure()) - update_icon() - -/obj/machinery/portable_atmospherics/canister/chlorine - name = "\improper Canister \[Cl\]" - icon_state = "lightyellow" - canister_color = "lightyellow" - can_label = 0 - -/obj/machinery/portable_atmospherics/canister/chlorine/New() - ..() - air_contents.adjust_gas(GAS_CHLORINE, MolesForPressure()) - update_icon() -// End debug tanks. diff --git a/code/game/machinery/atmoalter/clamp.dm b/code/game/machinery/atmoalter/clamp.dm deleted file mode 100644 index a310126c705d8..0000000000000 --- a/code/game/machinery/atmoalter/clamp.dm +++ /dev/null @@ -1,172 +0,0 @@ -//Good luck. --BlueNexus - -//Static version of the clamp -/obj/machinery/clamp - name = "stasis clamp" - desc = "A magnetic clamp which can halt the flow of gas in a pipe, via a localised stasis field." - icon = 'icons/atmos/clamp.dmi' - icon_state = "pclamp0" - anchored = TRUE - var/obj/machinery/atmospherics/pipe/simple/target = null - var/open = 1 - - var/datum/pipe_network/network_node1 - var/datum/pipe_network/network_node2 - -/obj/machinery/clamp/New(loc, var/obj/machinery/atmospherics/pipe/simple/to_attach = null) - ..() - if(istype(to_attach)) - target = to_attach - else - target = locate(/obj/machinery/atmospherics/pipe/simple) in loc - if(target) - target.clamp = src - update_networks() - dir = target.dir - return 1 - -/obj/machinery/clamp/proc/update_networks() - if(!target) - return - else - var/obj/machinery/atmospherics/pipe/node1 = target.node1 - var/obj/machinery/atmospherics/pipe/node2 = target.node2 - if(istype(node1) && node1.parent) - var/datum/pipeline/P1 = node1.parent - network_node1 = P1.network - if(istype(node2) && node2.parent) - var/datum/pipeline/P2 = node2.parent - network_node2 = P2.network - -/obj/machinery/clamp/physical_attack_hand(var/mob/user) - if(!target) - return FALSE - if(!open) - open() - else - close() - to_chat(user, "You turn [open ? "off" : "on"] \the [src]") - return TRUE - -/obj/machinery/clamp/Destroy() - if(!open) - spawn(-1) open() - if (target && target.clamp == src) - target.clamp = null - . = ..() - -/obj/machinery/clamp/proc/open() - if(open || !target) - return 0 - - target.build_network() - - - if(network_node1&&network_node2) - network_node1.merge(network_node2) - network_node2 = network_node1 - - if(network_node1) - network_node1.update = 1 - else if(network_node2) - network_node2.update = 1 - - update_networks() - - open = 1 - icon_state = "pclamp0" - target.in_stasis = 0 - return 1 - -/obj/machinery/clamp/proc/close() - if(!open) - return 0 - - qdel(target.parent) - - if(network_node1) - qdel(network_node1) - if(network_node2) - qdel(network_node2) - - var/obj/machinery/atmospherics/pipe/node1 = null - var/obj/machinery/atmospherics/pipe/node2 = null - - if(target.node1) - target.node1.build_network() - node1 = target.node1 - if(target.node2) - target.node2.build_network() - node2 = target.node2 - if(istype(node1) && node1.parent) - var/datum/pipeline/P1 = node1.parent - P1.build_pipeline(node1) - qdel(P1) - if(istype(node2) && node2.parent) - var/datum/pipeline/P2 = node2.parent - P2.build_pipeline(node2) - qdel(P2) -// P1.build_network() -// P2.build_network() - - - - - open = 0 - icon_state = "pclamp1" - target.in_stasis = 1 - - return 1 - -/obj/machinery/clamp/MouseDrop(obj/over_object as obj) - if(!usr) - return - - if(open && over_object == usr && Adjacent(usr)) - to_chat(usr, "You begin to remove \the [src]...") - if (do_after(usr, 3 SECONDS, over_object, DO_PUBLIC_UNIQUE)) - to_chat(usr, "You have removed \the [src].") - var/obj/item/clamp/C = new/obj/item/clamp(src.loc) - C.forceMove(usr.loc) - if(ishuman(usr)) - usr.put_in_hands(C) - qdel(src) - return - else - to_chat(usr, "You can't remove \the [src] while it's active!") - -/obj/machinery/clamp/proc/detach() - if (target && target.clamp == src) - target.clamp = null - new/obj/item/clamp(loc) - qdel(src) - -/obj/item/clamp - name = "stasis clamp" - desc = "A magnetic clamp which can halt the flow of gas in a pipe, via a localised stasis field." - icon = 'icons/atmos/clamp.dmi' - icon_state = "pclamp0" - origin_tech = list(TECH_ENGINEERING = 4, TECH_MAGNET = 4) - -/obj/item/clamp/afterattack(var/atom/A, mob/user as mob, proximity) - if(!proximity) - return - - if (istype(A, /obj/machinery/atmospherics/pipe/simple)) - var/obj/machinery/atmospherics/pipe/simple/P = A - if (P.clamp) - to_chat(user, SPAN_WARNING("There is already \a [P.clamp] attached to \the [P].")) - return - - to_chat(user, "You begin to attach \the [src] to \the [A]...") - if (do_after(user, 3 SECONDS, A, DO_PUBLIC_UNIQUE)) - if (QDELETED(P)) - return - if (P.clamp) - to_chat(user, SPAN_WARNING("There is already \a [P.clamp] attached to \the [P].")) - return - if(!user.unEquip(src)) - return - to_chat(user, "You have attached \the [src] to \the [A].") - new/obj/machinery/clamp(A.loc, A) - qdel(src) diff --git a/code/game/machinery/atmoalter/meter.dm b/code/game/machinery/atmoalter/meter.dm deleted file mode 100644 index 0e9759fcda442..0000000000000 --- a/code/game/machinery/atmoalter/meter.dm +++ /dev/null @@ -1,127 +0,0 @@ -/obj/machinery/meter - name = "meter" - desc = "A gas flow meter." - icon = 'icons/obj/meter.dmi' - icon_state = "meterX" - var/atom/target = null //A pipe for the base type - anchored = TRUE - power_channel = ENVIRON - idle_power_usage = 15 - - uncreated_component_parts = list( - /obj/item/stock_parts/power/apc - ) - public_variables = list( - /decl/public_access/public_variable/gas, - /decl/public_access/public_variable/pressure, - /decl/public_access/public_variable/temperature - ) - stock_part_presets = list(/decl/stock_part_preset/radio/basic_transmitter/meter = 1) - - frame_type = /obj/item/machine_chassis/pipe_meter - construct_state = /decl/machine_construction/default/item_chassis - base_type = /obj/machinery/meter - -/obj/machinery/meter/Initialize() - . = ..() - if(!target) - set_target(locate(/obj/machinery/atmospherics/pipe) in loc) - if(!target) - set_target(loc) - -/obj/machinery/meter/proc/set_target(atom/new_target) - clear_target() - target = new_target - GLOB.destroyed_event.register(target, src, .proc/clear_target) - -/obj/machinery/meter/proc/clear_target() - if(target) - GLOB.destroyed_event.unregister(target, src) - target = null - -/obj/machinery/meter/return_air() - if(target) - return target.return_air() - return ..() - -/obj/machinery/meter/Destroy() - clear_target() - . = ..() - -/obj/machinery/meter/Process() - ..() - if(!target) - icon_state = "meterX" - return 0 - - if(stat & (BROKEN|NOPOWER)) - icon_state = "meter0" - return 0 - - var/datum/gas_mixture/environment = return_air() - if(!environment) - icon_state = "meterX" - return 0 - - var/env_pressure = environment.return_pressure() - if(env_pressure <= 0.15*ONE_ATMOSPHERE) - icon_state = "meter0" - else if(env_pressure <= 1.8*ONE_ATMOSPHERE) - var/val = round(env_pressure/(ONE_ATMOSPHERE*0.3) + 0.5) - icon_state = "meter1_[val]" - else if(env_pressure <= 30*ONE_ATMOSPHERE) - var/val = round(env_pressure/(ONE_ATMOSPHERE*5)-0.35) + 1 - icon_state = "meter2_[val]" - else if(env_pressure <= 59*ONE_ATMOSPHERE) - var/val = round(env_pressure/(ONE_ATMOSPHERE*5) - 6) + 1 - icon_state = "meter3_[val]" - else - icon_state = "meter4" - - -/obj/machinery/meter/examine(mob/user, distance) - . = ..() - - if(distance > 3 && !(istype(user, /mob/living/silicon/ai) || isghost(user))) - to_chat(user, "You are too far away to read it.") - - else if(stat & (NOPOWER|BROKEN)) - to_chat(user, "The display is off.") - - else if(src.target) - var/datum/gas_mixture/environment = target.return_air() - if(environment) - to_chat(user, "The pressure gauge reads [round(environment.return_pressure(), 0.01)] kPa; [round(environment.temperature,0.01)]K ([round(environment.temperature-T0C,0.01)]°C)") - else - to_chat(user, "The sensor error light is blinking.") - else - to_chat(user, "The connect error light is blinking.") - - -/obj/machinery/meter/interface_interact(mob/user) - if (!target) - log_debug(append_admin_tools("\A [src] interacted with by \the [user] had no target.", user, get_turf(src))) - to_chat(user, SPAN_WARNING("\The [src] has no target! This might be a bug. Please report it.")) - return TRUE - var/datum/gas_mixture/environment = target.return_air() - to_chat(user, "The pressure gauge reads [round(environment.return_pressure(), 0.01)] kPa; [round(environment.temperature,0.01)]K ([round(environment.temperature-T0C,0.01)]°C)") - return TRUE - -// turf meter -- prioritizes turfs over pipes for target acquisition - -/obj/machinery/meter/turf/Initialize() - if (!target) - set_target(loc) - . = ..() - -/obj/machinery/meter/starts_with_radio - uncreated_component_parts = list( - /obj/item/stock_parts/radio/transmitter/basic/buildable, - /obj/item/stock_parts/power/apc/buildable - ) - -/decl/stock_part_preset/radio/basic_transmitter/meter - transmit_on_tick = list( - "pressure" = /decl/public_access/public_variable/pressure, - ) - frequency = ATMOS_TANK_FREQ diff --git a/code/game/machinery/atmoalter/portable_atmospherics.dm b/code/game/machinery/atmoalter/portable_atmospherics.dm deleted file mode 100644 index aff296854d87f..0000000000000 --- a/code/game/machinery/atmoalter/portable_atmospherics.dm +++ /dev/null @@ -1,179 +0,0 @@ -/obj/machinery/portable_atmospherics - name = "atmoalter" - use_power = POWER_USE_OFF - construct_state = /decl/machine_construction/default/panel_closed - - var/datum/gas_mixture/air_contents = new - - var/obj/machinery/atmospherics/portables_connector/connected_port - var/obj/item/tank/holding - - var/volume = 0 - var/destroyed = 0 - - var/start_pressure = ONE_ATMOSPHERE - var/maximum_pressure = 90 * ONE_ATMOSPHERE - atom_flags = ATOM_FLAG_NO_TEMP_CHANGE | ATOM_FLAG_CLIMBABLE - -/obj/machinery/portable_atmospherics/New() - ..() - - air_contents.volume = volume - air_contents.temperature = T20C - - return 1 - -/obj/machinery/portable_atmospherics/Destroy() - QDEL_NULL(air_contents) - QDEL_NULL(holding) - . = ..() - -/obj/machinery/portable_atmospherics/Initialize() - ..() - return INITIALIZE_HINT_LATELOAD - -/obj/machinery/portable_atmospherics/LateInitialize() - var/obj/machinery/atmospherics/portables_connector/port = locate() in loc - if(port) - connect(port) - update_icon() - -/obj/machinery/portable_atmospherics/Process() - if(!connected_port) //only react when pipe_network will ont it do it for you - //Allow for reactions - air_contents.react() - else - update_icon() - -/obj/machinery/portable_atmospherics/proc/StandardAirMix() - return list( - GAS_OXYGEN = O2STANDARD * MolesForPressure(), - GAS_NITROGEN = N2STANDARD * MolesForPressure()) - -/obj/machinery/portable_atmospherics/proc/MolesForPressure(var/target_pressure = start_pressure) - return (target_pressure * air_contents.volume) / (R_IDEAL_GAS_EQUATION * air_contents.temperature) - -/obj/machinery/portable_atmospherics/on_update_icon() - return null - -/obj/machinery/portable_atmospherics/proc/connect(obj/machinery/atmospherics/portables_connector/new_port) - //Make sure not already connected to something else - if(connected_port || !new_port || new_port.connected_device) - return 0 - - //Make sure are close enough for a valid connection - if(new_port.loc != loc) - return 0 - - //Perform the connection - connected_port = new_port - connected_port.connected_device = src - connected_port.on = 1 //Activate port updates - - anchored = TRUE //Prevent movement - - //Actually enforce the air sharing - var/datum/pipe_network/network = connected_port.return_network(src) - if(network && !network.gases.Find(air_contents)) - network.gases += air_contents - network.update = 1 - - return 1 - -/obj/machinery/portable_atmospherics/proc/disconnect() - if(!connected_port) - return 0 - - var/datum/pipe_network/network = connected_port.return_network(src) - if(network) - network.gases -= air_contents - - anchored = FALSE - - connected_port.connected_device = null - connected_port = null - - return 1 - -/obj/machinery/portable_atmospherics/proc/update_connected_network() - if(!connected_port) - return - - var/datum/pipe_network/network = connected_port.return_network(src) - if (network) - network.update = 1 - -/obj/machinery/portable_atmospherics/attackby(var/obj/item/W as obj, var/mob/user as mob) - if ((istype(W, /obj/item/tank) && !( src.destroyed ))) - if (src.holding) - return - if(!user.unEquip(W, src)) - return - src.holding = W - update_icon() - return - - else if(isWrench(W)) - if(connected_port) - disconnect() - to_chat(user, "You disconnect \the [src] from the port.") - update_icon() - return - else - var/obj/machinery/atmospherics/portables_connector/possible_port = locate(/obj/machinery/atmospherics/portables_connector) in loc - if(possible_port) - if(connect(possible_port)) - to_chat(user, "You connect \the [src] to the port.") - update_icon() - return - else - to_chat(user, "\The [src] failed to connect to the port.") - return - else - to_chat(user, "Nothing happens.") - return ..() - - else if (istype(W, /obj/item/device/scanner/gas)) - return - - return ..() - -/obj/machinery/portable_atmospherics/return_air() - return air_contents - -/obj/machinery/portable_atmospherics/powered - uncreated_component_parts = null - stat_immune = 0 - use_power = POWER_USE_IDLE - var/power_rating - var/power_losses - var/last_power_draw = 0 - -/obj/machinery/portable_atmospherics/powered/power_change() - . = ..() - if(. && (stat & NOPOWER)) - update_use_power(POWER_USE_IDLE) - -/obj/machinery/portable_atmospherics/powered/components_are_accessible(path) - return panel_open - -/obj/machinery/portable_atmospherics/proc/log_open() - if(air_contents.gas.len == 0) - return - - var/gases = "" - for(var/gas in air_contents.gas) - if(gases) - gases += ", [gas]" - else - gases = gas - log_and_message_admins("opened [src.name], containing [gases].") - -/obj/machinery/portable_atmospherics/powered/dismantle() - if(isturf(loc)) - playsound(loc, 'sound/effects/spray.ogg', 10, 1, -3) - loc.assume_air(air_contents) - . = ..() - -/obj/machinery/portable_atmospherics/MouseDrop_T(mob/living/M, mob/living/user) - do_climb(user, FALSE) diff --git a/code/game/machinery/atmoalter/pump.dm b/code/game/machinery/atmoalter/pump.dm deleted file mode 100644 index ce52eb8bdadb4..0000000000000 --- a/code/game/machinery/atmoalter/pump.dm +++ /dev/null @@ -1,156 +0,0 @@ -/obj/machinery/portable_atmospherics/powered/pump - name = "portable air pump" - - icon = 'icons/obj/atmos.dmi' - icon_state = "psiphon:0" - density = TRUE - w_class = ITEM_SIZE_NORMAL - base_type = /obj/machinery/portable_atmospherics/powered/pump - - var/direction_out = 0 //0 = siphoning, 1 = releasing - var/target_pressure = ONE_ATMOSPHERE - - var/pressuremin = 0 - var/pressuremax = 10 * ONE_ATMOSPHERE - - volume = 1000 - - power_rating = 7500 //7500 W ~ 10 HP - power_losses = 150 - - machine_name = "portable pump" - machine_desc = "Used to equalize the pressure of the atmosphere in a surrounding area with its own contents, or to draw in air from the area around it. Runs on a battery backup; can be connected to atmospherics networks." - -/obj/machinery/portable_atmospherics/powered/pump/filled - start_pressure = 90 * ONE_ATMOSPHERE - -/obj/machinery/portable_atmospherics/powered/pump/New() - ..() - - var/list/air_mix = StandardAirMix() - src.air_contents.adjust_multi(GAS_OXYGEN, air_mix[GAS_OXYGEN], GAS_NITROGEN, air_mix[GAS_NITROGEN]) - -/obj/machinery/portable_atmospherics/powered/pump/on_update_icon() - overlays.Cut() - - if((use_power == POWER_USE_ACTIVE) && !(stat & NOPOWER)) - icon_state = "psiphon:1" - else - icon_state = "psiphon:0" - - if(holding) - overlays += "siphon-open" - - if(connected_port) - overlays += "siphon-connector" - -/obj/machinery/portable_atmospherics/powered/pump/emp_act(severity) - if(stat & (BROKEN|NOPOWER)) - ..(severity) - return - - if(prob(50/severity)) - update_use_power(use_power == POWER_USE_ACTIVE ? POWER_USE_IDLE : POWER_USE_ACTIVE) - - if(prob(100/severity)) - direction_out = !direction_out - - target_pressure = rand(0, 10 * ONE_ATMOSPHERE) - update_icon() - - ..(severity) - -/obj/machinery/portable_atmospherics/powered/pump/Process() - ..() - var/power_draw = -1 - - if((use_power == POWER_USE_ACTIVE) && !(stat & NOPOWER)) - var/datum/gas_mixture/environment - if(holding) - environment = holding.air_contents - else - environment = loc.return_air() - - var/pressure_delta - var/output_volume - var/air_temperature - if(direction_out) - pressure_delta = target_pressure - environment.return_pressure() - output_volume = environment.volume * environment.group_multiplier - air_temperature = environment.temperature? environment.temperature : air_contents.temperature - else - pressure_delta = environment.return_pressure() - target_pressure - output_volume = air_contents.volume * air_contents.group_multiplier - air_temperature = air_contents.temperature? air_contents.temperature : environment.temperature - - var/transfer_moles = pressure_delta*output_volume/(air_temperature * R_IDEAL_GAS_EQUATION) - - if (pressure_delta > 0.01) - if (direction_out) - power_draw = pump_gas(src, air_contents, environment, transfer_moles, power_rating) - else - power_draw = pump_gas(src, environment, air_contents, transfer_moles, power_rating) - if(holding) - holding.queue_icon_update() - - if (power_draw < 0) - last_flow_rate = 0 - last_power_draw = 0 - else - power_draw = max(power_draw, power_losses) - if(abs(power_draw - last_power_draw) > 0.1 * last_power_draw) - change_power_consumption(power_draw, POWER_USE_ACTIVE) - last_power_draw = power_draw - - update_connected_network() - - src.updateDialog() - -/obj/machinery/portable_atmospherics/powered/pump/interface_interact(var/mob/user) - ui_interact(user) - return TRUE - -/obj/machinery/portable_atmospherics/powered/pump/ui_interact(mob/user, ui_key = "rcon", datum/nanoui/ui=null, force_open=1) - var/list/data[0] - var/obj/item/cell/cell = get_cell() - data["portConnected"] = connected_port ? 1 : 0 - data["tankPressure"] = round(air_contents.return_pressure() > 0 ? air_contents.return_pressure() : 0) - data["targetpressure"] = round(target_pressure) - data["pump_dir"] = direction_out - data["minpressure"] = round(pressuremin) - data["maxpressure"] = round(pressuremax) - data["powerDraw"] = round(last_power_draw) - data["cellCharge"] = cell ? cell.charge : 0 - data["cellMaxCharge"] = cell ? cell.maxcharge : 1 - data["on"] = (use_power == POWER_USE_ACTIVE) ? 1 : 0 - - data["hasHoldingTank"] = holding ? 1 : 0 - if (holding) - data["holdingTank"] = list("name" = holding.name, "tankPressure" = round(holding.air_contents.return_pressure() > 0 ? holding.air_contents.return_pressure() : 0)) - - ui = SSnano.try_update_ui(user, src, ui_key, ui, data, force_open) - if (!ui) - ui = new(user, src, ui_key, "portpump.tmpl", "Portable Pump", 480, 410, state = GLOB.physical_state) - ui.set_initial_data(data) - ui.open() - ui.set_auto_update(1) - -/obj/machinery/portable_atmospherics/powered/pump/OnTopic(user, href_list) - if(href_list["power"]) - update_use_power(use_power == POWER_USE_ACTIVE ? POWER_USE_IDLE : POWER_USE_ACTIVE) - . = TOPIC_REFRESH - if(href_list["direction"]) - direction_out = !direction_out - . = TOPIC_REFRESH - if (href_list["remove_tank"]) - if(holding) - holding.dropInto(loc) - holding = null - . = TOPIC_REFRESH - if (href_list["pressure_adj"]) - var/diff = text2num(href_list["pressure_adj"]) - target_pressure = min(10*ONE_ATMOSPHERE, max(0, target_pressure+diff)) - . = TOPIC_REFRESH - - if(.) - update_icon() diff --git a/code/game/machinery/atmoalter/scrubber.dm b/code/game/machinery/atmoalter/scrubber.dm deleted file mode 100644 index 94fec746e3a69..0000000000000 --- a/code/game/machinery/atmoalter/scrubber.dm +++ /dev/null @@ -1,222 +0,0 @@ -/obj/machinery/portable_atmospherics/powered/scrubber - name = "Portable Air Scrubber" - - icon = 'icons/obj/atmos.dmi' - icon_state = "pscrubber:0" - density = TRUE - w_class = ITEM_SIZE_NORMAL - base_type = /obj/machinery/portable_atmospherics/powered/scrubber - var/volume_rate = 800 - - volume = 750 - - power_rating = 7500 //7500 W ~ 10 HP - power_losses = 150 - - machine_name = "portable scrubber" - machine_desc = "Portable scrubbers can be freely moved from place to place in order to draw harmful gases out of the air. It runs on a battery backup and can be connected to atmospherics networks." - - var/minrate = 0 - var/maxrate = 10 * ONE_ATMOSPHERE - - var/list/scrubbing_gas - -/obj/machinery/portable_atmospherics/powered/scrubber/Initialize() - . = ..() - if(!scrubbing_gas) - scrubbing_gas = list() - for(var/g in gas_data.gases) - if(g != GAS_OXYGEN && g != GAS_NITROGEN) - scrubbing_gas += g - - -/obj/machinery/portable_atmospherics/powered/scrubber/emp_act(severity) - if(stat & (BROKEN|NOPOWER)) - ..(severity) - return - - if(prob(50/severity)) - update_use_power(use_power == POWER_USE_ACTIVE ? POWER_USE_IDLE : POWER_USE_ACTIVE) - - ..(severity) - -/obj/machinery/portable_atmospherics/powered/scrubber/on_update_icon() - overlays.Cut() - - if((use_power == POWER_USE_ACTIVE) && !(stat & (NOPOWER | BROKEN))) - icon_state = "pscrubber:1" - else - icon_state = "pscrubber:0" - - if(holding) - overlays += "scrubber-open" - - if(connected_port) - overlays += "scrubber-connector" - -/obj/machinery/portable_atmospherics/powered/scrubber/Process() - ..() - process_scrubber() - -//Placeholder; will change once batteries are made generic. -/obj/machinery/portable_atmospherics/powered/scrubber/proc/process_scrubber() - var/power_draw = -1 - - if((use_power == POWER_USE_ACTIVE) && !(stat & NOPOWER)) - var/datum/gas_mixture/environment - if(holding) - environment = holding.air_contents - else - environment = loc.return_air() - - var/transfer_moles = min(1, volume_rate/environment.volume)*environment.total_moles - - power_draw = scrub_gas(src, scrubbing_gas, environment, air_contents, transfer_moles, power_rating) - - if (power_draw < 0) - last_flow_rate = 0 - last_power_draw = 0 - else - power_draw = max(power_draw, power_losses) - if(abs(power_draw - last_power_draw) > 0.1 * last_power_draw) - change_power_consumption(power_draw, POWER_USE_ACTIVE) - last_power_draw = power_draw - - update_connected_network() - - if(holding) - holding.queue_icon_update() - - //src.update_icon() - src.updateDialog() - -/obj/machinery/portable_atmospherics/powered/scrubber/interface_interact(mob/user) - ui_interact(user) - return TRUE - -/obj/machinery/portable_atmospherics/powered/scrubber/ui_interact(mob/user, ui_key = "rcon", datum/nanoui/ui=null, force_open=1) - var/list/data[0] - var/obj/item/cell/cell = get_cell() - data["portConnected"] = connected_port ? 1 : 0 - data["tankPressure"] = round(air_contents.return_pressure() > 0 ? air_contents.return_pressure() : 0) - data["rate"] = round(volume_rate) - data["minrate"] = round(minrate) - data["maxrate"] = round(maxrate) - data["powerDraw"] = round(last_power_draw) - data["cellCharge"] = cell ? cell.charge : 0 - data["cellMaxCharge"] = cell ? cell.maxcharge : 1 - data["on"] = (use_power == POWER_USE_ACTIVE) ? 1 : 0 - - data["hasHoldingTank"] = holding ? 1 : 0 - if (holding) - data["holdingTank"] = list("name" = holding.name, "tankPressure" = round(holding.air_contents.return_pressure() > 0 ? holding.air_contents.return_pressure() : 0)) - - ui = SSnano.try_update_ui(user, src, ui_key, ui, data, force_open) - if (!ui) - ui = new(user, src, ui_key, "portscrubber.tmpl", "Portable Scrubber", 480, 400, state = GLOB.physical_state) - ui.set_initial_data(data) - ui.open() - ui.set_auto_update(1) - - -/obj/machinery/portable_atmospherics/powered/scrubber/OnTopic(user, href_list) - if(href_list["power"]) - update_use_power(use_power == POWER_USE_ACTIVE ? POWER_USE_IDLE : POWER_USE_ACTIVE) - . = TOPIC_REFRESH - if (href_list["remove_tank"]) - if(holding) - holding.dropInto(loc) - holding = null - . = TOPIC_REFRESH - if (href_list["volume_adj"]) - var/diff = text2num(href_list["volume_adj"]) - volume_rate = clamp(volume_rate+diff, minrate, maxrate) - . = TOPIC_REFRESH - - if(.) - update_icon() - - -//Broken scrubber Used in hanger atmoshperic storage -/obj/machinery/portable_atmospherics/powered/scrubber/broken - construct_state = /decl/machine_construction/default/panel_open - panel_open = 1 - -/obj/machinery/portable_atmospherics/powered/scrubber/broken/Initialize() - . = ..() - var/part = uninstall_component(/obj/item/stock_parts/power/battery/buildable/stock) - if(part) - qdel(part) - -//Huge scrubber -/obj/machinery/portable_atmospherics/powered/scrubber/huge - name = "Huge Air Scrubber" - icon_state = "scrubber:0" - anchored = TRUE - volume = 50000 - volume_rate = 5000 - base_type = /obj/machinery/portable_atmospherics/powered/scrubber/huge - - uncreated_component_parts = list(/obj/item/stock_parts/power/apc) - maximum_component_parts = list(/obj/item/stock_parts = 15) - idle_power_usage = 500 //internal circuitry, friction losses and stuff - power_rating = 100000 //100 kW ~ 135 HP - - machine_name = "large portable scrubber" - machine_desc = "A heavy-duty scrubbing machine with greatly enhanced filtration power. Typically used around areas where a gas breach could be disastrous." - - var/static/gid = 1 - var/id = 0 - -/obj/machinery/portable_atmospherics/powered/scrubber/huge/New() - ..() - - id = gid - gid++ - - name = "[name] (ID [id])" - -/obj/machinery/portable_atmospherics/powered/scrubber/huge/attack_hand(mob/user) - if((. = ..())) - return - to_chat(user, "You can't directly interact with this machine. Use the scrubber control console.") - return TRUE - -/obj/machinery/portable_atmospherics/powered/scrubber/huge/on_update_icon() - overlays.Cut() - - if((use_power == POWER_USE_ACTIVE) && !(stat & (NOPOWER|BROKEN))) - icon_state = "scrubber:1" - else - icon_state = "scrubber:0" - -/obj/machinery/portable_atmospherics/powered/scrubber/huge/attackby(var/obj/item/I as obj, var/mob/user as mob) - if(isWrench(I)) - if(use_power == POWER_USE_ACTIVE) - to_chat(user, "Turn \the [src] off first!") - return - - anchored = !anchored - playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1) - to_chat(user, "You [anchored ? "wrench" : "unwrench"] \the [src].") - - return - //doesn't hold tanks - if(istype(I, /obj/item/tank)) - return - - return ..() - - -/obj/machinery/portable_atmospherics/powered/scrubber/huge/stationary - name = "Stationary Air Scrubber" - base_type = /obj/machinery/portable_atmospherics/powered/scrubber/huge/stationary - machine_name = "large stationary portable scrubber" - machine_desc = "This is simply a large portable scrubber that can't be moved once it's bolted into place, and is otherwise identical." - -/obj/machinery/portable_atmospherics/powered/scrubber/huge/stationary/attackby(var/obj/item/I as obj, var/mob/user as mob) - if(isWrench(I)) - to_chat(user, "The bolts are too tight for you to unscrew!") - return - - return ..() \ No newline at end of file diff --git a/code/game/machinery/barrier.dm b/code/game/machinery/barrier.dm deleted file mode 100644 index a6e387da740db..0000000000000 --- a/code/game/machinery/barrier.dm +++ /dev/null @@ -1,159 +0,0 @@ -/obj/machinery/barrier - name = "deployable barrier" - desc = "A deployable barrier." - icon = 'icons/obj/objects.dmi' - icon_state = "barrier0" - req_access = list(access_brig) - density = TRUE - - var/locked = FALSE - var/health = 200 - -/obj/machinery/barrier/on_update_icon() - icon_state = "barrier[locked]" - -/obj/machinery/barrier/examine(mob/user, distance) - . = ..() - if (distance < 5) - var/message - switch (Percent(health, initial(health), 0)) - if (99 to INFINITY) message = "is in perfect condition" - if (67 to 99) message = "has seen some wear" - if (33 to 67) message = "is quite badly damaged" - else message = "is almost destroyed" - to_chat(user, "It [message].") - if (locked) - var/message = "The lights show it is locked onto \the [get_turf(src)]." - if (emagged && distance < 3) - message += SPAN_WARNING(" The locking clamps have other ideas.") - to_chat(user, message) - -/obj/machinery/barrier/attackby(obj/item/I, mob/user) - if (isid(I)) - var/success = allowed(user) - var/message = " to no effect" - if (success) - if (locked) - message = ", unlocking it from \the [get_turf(src)]" - else - message = ", locking it onto \the [get_turf(src)]" - user.visible_message( - "\The [user] swipes \an [I] against \the [src].", - "You swipe \the [I] against \the [src][message].", - "You hear metal sliding and creaking.", - range = 5 - ) - if (success) - locked = !locked - anchored = emagged ? FALSE : locked - update_icon() - return TRUE - if (user.a_intent == I_HURT) - user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN) - if (I.force < 7 || (I.damtype != DAMAGE_BRUTE && I.damtype != DAMAGE_BURN)) - user.visible_message( - SPAN_WARNING("\The [user] bonks \an [I] against \the [src]."), - SPAN_WARNING("You whack \the [I] against \the [src]. Nothing happens."), - SPAN_WARNING("You hear a soft impact!") - ) - playsound(src, 'sound/weapons/tablehit1.ogg', 50, TRUE) - return - user.visible_message( - SPAN_DANGER("\The [user] slams \an [I] against \the [src]!"), - SPAN_DANGER("You slam \the [I] against \the [src]!"), - SPAN_WARNING("You hear a violent impact!") - ) - playsound(src, 'sound/weapons/smash.ogg', 50, TRUE) - if (I.damtype == DAMAGE_BRUTE) - modify_health(-I.force * 0.75) - else if (I.damtype == DAMAGE_BURN) - modify_health(-I.force * 0.5) - return TRUE - if (isWrench(I)) - if (health >= initial(health)) - to_chat(user, SPAN_WARNING("The [src]'s plating is not damaged.")) - return TRUE - user.visible_message( - "\The [user] starts to repair \the [src]'s plating with \an [I].", - "You start to repair \the [src]'s plating with \the [I].", - "You hear creaking metal." - ) - if (do_after(user, 15 SECONDS, src, do_flags = DO_PUBLIC_UNIQUE)) - to_chat(user, SPAN_NOTICE("There - Good as new.")) - modify_health(initial(health) - health) - return TRUE - if (isWelder(I)) - var/obj/item/weldingtool/W = I - if (!W.welding) - to_chat(user, SPAN_WARNING("\The [I] isn't turned on.")) - return TRUE - if (!emagged) - to_chat(user, SPAN_WARNING("\The [src]'s locking clamps are not damaged.")) - return TRUE - user.visible_message( - "\The [user] starts to repair \the [src]'s locking clamps with \an [I].", - "You start to repair \the [src]'s locking clamps with \the [I].", - "You hear a hissing flame." - ) - if (do_after(user, 15 SECONDS, src, do_flags = DO_PUBLIC_UNIQUE)) - to_chat(user, SPAN_NOTICE("There - Good as new.")) - emagged = FALSE - if (locked) - visible_message( - "\The [src]'s clamps engage, locking onto \the [get_turf(src)].", - "You hear metal sliding and creaking.", - range = 5 - ) - anchored = TRUE - update_icon() - return TRUE - to_chat(user, SPAN_WARNING("You can't think of a way to use \the [I] on \the [src].")) - return TRUE - -/obj/machinery/barrier/emag_act(remaining_charges, mob/user, emag_source) - if (user) - var/message = emagged ? "achieving nothing new" : "fusing the locking clamps open" - user.visible_message( - "\The [user] swipes \an [emag_source] against \the [src].", - "You swipe \the [emag_source] against \the [src], [message].", - range = 5 - ) - if (emagged) - return - anchored = FALSE - emagged = TRUE - return 1 - -/obj/machinery/barrier/ex_act(severity) - if (QDELETED(src)) - return - if (severity == EX_ACT_DEVASTATING) - explode() - else if (severity == EX_ACT_HEAVY) - modify_health(-25) - -/obj/machinery/barrier/emp_act(severity) - if (severity > 2) - return - locked = FALSE - anchored = emagged ? FALSE : locked - update_icon() - if (severity > 1) - return - sparks(3, 1, src) - emag_act() - -/obj/machinery/barrier/proc/modify_health(amount) - health += amount - if (health <= 0) - explode() - -/obj/machinery/barrier/proc/explode() - if (QDELETED(src)) - return - var/turf/T = get_turf(src) - qdel(src) - new /obj/item/stack/material/rods(T, rand(1, 4)) - new /obj/item/stack/material/steel(T, rand(1, 4)) - explosion(T, -1, -1, 0) - sparks(3, 1, T) diff --git a/code/game/machinery/biogenerator.dm b/code/game/machinery/biogenerator.dm deleted file mode 100644 index 7a816e8dd0dcf..0000000000000 --- a/code/game/machinery/biogenerator.dm +++ /dev/null @@ -1,233 +0,0 @@ -#define BG_READY 0 -#define BG_PROCESSING 1 -#define BG_NO_BEAKER 2 -#define BG_COMPLETE 3 -#define BG_EMPTY 4 - -/obj/machinery/biogenerator - name = "Biogenerator" - desc = "" - icon = 'icons/obj/biogenerator.dmi' - icon_state = "biogen-stand" - density = TRUE - anchored = TRUE - idle_power_usage = 40 - base_type = /obj/machinery/biogenerator - construct_state = /decl/machine_construction/default/panel_closed - uncreated_component_parts = null - stat_immune = 0 - machine_name = "biogenerator" - machine_desc = "Processes fruits, veggies, and other produce into raw biomatter that can be converted into food products and leather items." - var/processing = 0 - var/obj/item/reagent_containers/glass/beaker = null - var/points = 0 - var/state = BG_READY - var/denied = 0 - var/build_eff = 1 - var/eat_eff = 1 - var/ingredients = 0 //How many processable ingredients are stored inside. - var/capacity = 10 //How many ingredients can we store? - var/list/products = list( - "Food" = list( - /obj/item/reagent_containers/food/drinks/small_milk = 30, - /obj/item/reagent_containers/food/drinks/milk = 50, - /obj/item/reagent_containers/food/snacks/meat/syntiflesh = 50, - /obj/item/storage/fancy/egg_box = 300), - "Nutrients" = list( - /obj/item/reagent_containers/glass/bottle/eznutrient = 60, - /obj/item/reagent_containers/glass/bottle/left4zed = 120, - /obj/item/reagent_containers/glass/bottle/robustharvest = 120), - "Leather" = list( - /obj/item/storage/wallet/leather = 100, - /obj/item/clothing/gloves/thick/botany = 250, - /obj/item/storage/belt/utility = 300, - /obj/item/storage/backpack/satchel = 400, - /obj/item/storage/bag/cash = 400, - /obj/item/clothing/shoes/workboots = 400, - /obj/item/clothing/shoes/leather = 400, - /obj/item/clothing/shoes/dress = 400, - /obj/item/clothing/suit/leathercoat = 500, - /obj/item/clothing/suit/storage/toggle/brown_jacket = 500, - /obj/item/clothing/suit/storage/toggle/bomber = 500, - /obj/item/clothing/suit/storage/hooded/wintercoat = 500)) - -/obj/machinery/biogenerator/New() - ..() - create_reagents(1000) - beaker = new /obj/item/reagent_containers/glass/bottle(src) - -/obj/machinery/biogenerator/on_reagent_change() //When the reagents change, change the icon as well. - update_icon() - -/obj/machinery/biogenerator/on_update_icon() - if(state == BG_NO_BEAKER) - icon_state = "biogen-empty" - else if(state == BG_READY || state == BG_COMPLETE) - icon_state = "biogen-stand" - else - icon_state = "biogen-work" - return - -/obj/machinery/biogenerator/components_are_accessible(path) - return !processing && ..() - -/obj/machinery/biogenerator/cannot_transition_to(state_path) - if(processing) - return SPAN_NOTICE("You must turn \the [src] off first.") - return ..() - -/obj/machinery/biogenerator/attackby(var/obj/item/O, var/mob/user) - if((. = component_attackby(O, user))) - return - if(processing) - to_chat(user, "\The [src] is currently processing.") - if(istype(O, /obj/item/reagent_containers/glass)) - if(beaker) - to_chat(user, "]The [src] is already loaded.") - return TRUE - else if(user.unEquip(O, src)) - beaker = O - state = BG_READY - updateUsrDialog() - return TRUE - - if(ingredients >= capacity) - to_chat(user, "\The [src] is already full! Activate it.") - else if(istype(O, /obj/item/storage/plants)) - var/obj/item/storage/plants/P = O - var/hadPlants = 0 - for(var/obj/item/reagent_containers/food/snacks/grown/G in P.contents) - hadPlants = 1 - P.remove_from_storage(G, src, 1) //No UI updates until we are all done. - ingredients++ - if(ingredients >= capacity) - to_chat(user, "You fill \the [src] to its capacity.") - break - P.finish_bulk_removal() //Now do the UI stuff once. - if(!hadPlants) - to_chat(user, "\The [P] has no produce inside.") - else if(ingredients < capacity) - to_chat(user, "You empty \the [P] into \the [src].") - - - else if(!istype(O, /obj/item/reagent_containers/food/snacks/grown)) - to_chat(user, "You cannot put this in \the [src].") - else if(user.unEquip(O, src)) - ingredients++ - to_chat(user, "You put \the [O] in \the [src]") - update_icon() - -/** - * Display the NanoUI window for the vending machine. - * - * See NanoUI documentation for details. - */ -/obj/machinery/biogenerator/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1) - user.set_machine(src) - var/list/data = list() - data["state"] = state - var/name - var/cost - var/type_name - var/path - if (state == BG_READY) - data["points"] = points - var/list/listed_types = list() - for(var/c_type =1 to products.len) - type_name = products[c_type] - var/list/current_content = products[type_name] - var/list/listed_products = list() - for(var/c_product =1 to current_content.len) - path = current_content[c_product] - var/atom/A = path - name = initial(A.name) - cost = current_content[path] - listed_products.Add(list(list( - "product_index" = c_product, - "name" = name, - "cost" = cost))) - listed_types.Add(list(list( - "type_name" = type_name, - "products" = listed_products))) - data["types"] = listed_types - ui = SSnano.try_update_ui(user, src, ui_key, ui, data, force_open) - if (!ui) - ui = new(user, src, ui_key, "biogenerator.tmpl", "Biogenerator", 440, 600) - ui.set_initial_data(data) - ui.open() - -/obj/machinery/biogenerator/OnTopic(user, href_list) - switch (href_list["action"]) - if("activate") - activate() - if("detach") - if(beaker) - beaker.dropInto(src.loc) - beaker = null - state = BG_NO_BEAKER - update_icon() - if("create") - if (state == BG_PROCESSING) - return TOPIC_REFRESH - var/type = href_list["type"] - var/product_index = text2num(href_list["product_index"]) - if (isnull(products[type])) - return TOPIC_REFRESH - var/list/sub_products = products[type] - if (product_index < 1 || product_index > sub_products.len) - return TOPIC_REFRESH - create_product(type, sub_products[product_index]) - if("return") - state = BG_READY - return TOPIC_REFRESH - -/obj/machinery/biogenerator/interface_interact(mob/user) - ui_interact(user) - return TRUE - -/obj/machinery/biogenerator/proc/activate() - if (usr.stat) - return - if (stat) //NOPOWER etc - return - - var/S = 0 - for(var/obj/item/reagent_containers/food/snacks/grown/I in contents) - S += 5 - ingredients-- - if(I.reagents.get_reagent_amount(/datum/reagent/nutriment) < 0.1) - points += 1 - else points += I.reagents.get_reagent_amount(/datum/reagent/nutriment) * 10 * eat_eff - qdel(I) - if(S) - state = BG_PROCESSING - SSnano.update_uis(src) - update_icon() - playsound(src.loc, 'sound/machines/blender.ogg', 50, 1) - use_power_oneoff(S * 30) - sleep((S + 15) / eat_eff) - state = BG_READY - update_icon() - else - state = BG_EMPTY - return - -/obj/machinery/biogenerator/proc/create_product(var/type, var/path) - state = BG_PROCESSING - var/cost = products[type][path] - cost = round(cost/build_eff) - points -= cost - SSnano.update_uis(src) - update_icon() - sleep(30) - var/atom/movable/result = new path - result.dropInto(loc) - state = BG_COMPLETE - update_icon() - return 1 - - -/obj/machinery/biogenerator/RefreshParts() - ..() - build_eff = clamp(total_component_rating_of_type(/obj/item/stock_parts/manipulator), 1, 10) - eat_eff = clamp(total_component_rating_of_type(/obj/item/stock_parts/matter_bin), 1, 10) diff --git a/code/game/machinery/bioprinter.dm b/code/game/machinery/bioprinter.dm deleted file mode 100644 index 34939ab210b83..0000000000000 --- a/code/game/machinery/bioprinter.dm +++ /dev/null @@ -1,309 +0,0 @@ -// GENERIC PRINTER - DO NOT USE THIS OBJECT. -// Flesh and robot printers are defined below this object. - -/obj/machinery/organ_printer - name = "organ printer" - desc = "It's a machine that prints organs." - icon = 'icons/obj/surgery.dmi' - icon_state = "bioprinter" - - anchored = TRUE - density = TRUE - idle_power_usage = 40 - active_power_usage = 300 - construct_state = /decl/machine_construction/default/panel_closed - uncreated_component_parts = null - stat_immune = 0 - - var/stored_matter = 0 - var/max_stored_matter = 0 - var/print_delay = 100 - var/printing - - // These should be subtypes of /obj/item/organ - var/list/products = list() - -/obj/machinery/organ_printer/state_transition(var/decl/machine_construction/default/new_state) - . = ..() - if(istype(new_state)) - updateUsrDialog() - -/obj/machinery/organ_printer/on_update_icon() - overlays.Cut() - if(panel_open) - overlays += "[icon_state]_panel_open" - if(printing) - overlays += "[icon_state]_working" - -/obj/machinery/organ_printer/examine(mob/user) - . = ..() - to_chat(user, SPAN_NOTICE("It is loaded with [stored_matter]/[max_stored_matter] matter units.")) - -/obj/machinery/organ_printer/RefreshParts() - print_delay = initial(print_delay) - print_delay -= 10 * total_component_rating_of_type(/obj/item/stock_parts/manipulator) - print_delay += 10 * number_of_components(/obj/item/stock_parts/manipulator) - print_delay = max(0, print_delay) - - max_stored_matter = 50 * clamp(total_component_rating_of_type(/obj/item/stock_parts/matter_bin), 0, 20) - . = ..() - -/obj/machinery/organ_printer/components_are_accessible(path) - return !printing && ..() - -/obj/machinery/organ_printer/cannot_transition_to(path) - if(printing) - return SPAN_NOTICE("You must wait for \the [src] to finish printing first!") - return ..() - -/obj/machinery/organ_printer/physical_attack_hand(mob/user, var/choice = null) - if(printing) - return - - if(!choice) - choice = input("What would you like to print?") as null|anything in products - - if(!choice || printing || !CanPhysicallyInteract(user)) - return TRUE - - if(!can_print(choice)) - return TRUE - - stored_matter -= products[choice][2] - - update_use_power(POWER_USE_ACTIVE) - printing = 1 - update_icon() - - sleep(print_delay) - - update_use_power(POWER_USE_IDLE) - printing = 0 - update_icon() - - if(!choice || !src || (stat & (BROKEN|NOPOWER))) - return TRUE - - print_organ(choice) - -/obj/machinery/organ_printer/proc/can_print(var/choice) - if(stored_matter < products[choice][2]) - visible_message(SPAN_NOTICE("\The [src] displays a warning: 'Not enough matter. [stored_matter] stored and [products[choice][2]] needed.'")) - return 0 - return 1 - -/obj/machinery/organ_printer/proc/print_organ(var/choice) - var/new_organ = products[choice][1] - var/obj/item/organ/O = new new_organ(get_turf(src)) - O.status |= ORGAN_CUT_AWAY - return O -// END GENERIC PRINTER - -// ROBOT ORGAN PRINTER -/obj/machinery/organ_printer/robot - name = "prosthetic organ fabricator" - desc = "It's a machine that prints prosthetic organs." - icon_state = "roboprinter" - base_type = /obj/machinery/organ_printer/robot - - products = list( - BP_HEART = list(/obj/item/organ/internal/heart, 25), - BP_LUNGS = list(/obj/item/organ/internal/lungs, 25), - BP_KIDNEYS = list(/obj/item/organ/internal/kidneys, 20), - BP_EYES = list(/obj/item/organ/internal/eyes, 20), - BP_LIVER = list(/obj/item/organ/internal/liver, 25), - BP_STOMACH = list(/obj/item/organ/internal/stomach, 25), - BP_L_ARM = list(/obj/item/organ/external/arm, 65), - BP_R_ARM = list(/obj/item/organ/external/arm/right, 65), - BP_L_LEG = list(/obj/item/organ/external/leg, 65), - BP_R_LEG = list(/obj/item/organ/external/leg/right, 65), - BP_L_FOOT = list(/obj/item/organ/external/foot, 40), - BP_R_FOOT = list(/obj/item/organ/external/foot/right, 40), - BP_L_HAND = list(/obj/item/organ/external/hand, 40), - BP_R_HAND = list(/obj/item/organ/external/hand/right, 40), - BP_GROIN = list(/obj/item/organ/external/groin, 75), - BP_CELL = list(/obj/item/organ/internal/cell, 25) - ) - - machine_name = "prosthetic organ fabricator" - machine_desc = "Creates prosthetic limbs and organs by using steel sheets." - var/matter_amount_per_sheet = 10 - var/matter_type = MATERIAL_STEEL - -/obj/machinery/organ_printer/robot/mapped/Initialize() - . = ..() - stored_matter = max_stored_matter - -/obj/machinery/organ_printer/robot/dismantle() - if(stored_matter >= matter_amount_per_sheet) - new /obj/item/stack/material/steel(get_turf(src), Floor(stored_matter/matter_amount_per_sheet)) - return ..() - -/obj/machinery/organ_printer/robot/print_organ(var/choice) - var/obj/item/organ/O = ..() - O.robotize() - O.status |= ORGAN_CUT_AWAY // robotize() resets status to 0 - visible_message(SPAN_INFO("\The [src] churns for a moment, then spits out \a [O].")) - playsound(src.loc, 'sound/machines/ding.ogg', 50, 1) - return O - -/obj/machinery/organ_printer/robot/attackby(var/obj/item/W, var/mob/user) - var/add_matter = 0 - var/object_name = "[W]" - - if(istype(W, /obj/item/stack/material) && W.get_material_name() == matter_type) - if((max_stored_matter-stored_matter) >= matter_amount_per_sheet) - var/obj/item/stack/S = W - var/space_left = max_stored_matter - stored_matter - var/sheets_to_take = min(S.amount, Floor(space_left/matter_amount_per_sheet)) - if(sheets_to_take > 0) - add_matter = min(max_stored_matter - stored_matter, sheets_to_take*matter_amount_per_sheet) - S.use(sheets_to_take) - - else if(istype(W,/obj/item/organ)) - var/obj/item/organ/O = W - if((O.organ_tag in products) && istype(O, products[O.organ_tag][1])) - if(!BP_IS_ROBOTIC(O)) - to_chat(user, SPAN_WARNING("\The [src] only accepts robotic organs.")) - return - var/recycle_worth = Floor(products[O.organ_tag][2] * 0.5) - if((max_stored_matter-stored_matter) >= recycle_worth) - add_matter = recycle_worth - qdel(O) - else - to_chat(user, SPAN_WARNING("\The [src] does not know how to recycle \the [O].")) - return - - stored_matter += add_matter - - if(add_matter) - to_chat(user, SPAN_INFO("\The [src] processes \the [object_name]. Levels of stored matter now: [stored_matter]")) - else - to_chat(user, SPAN_WARNING("\The [src] is too full.")) - - return ..() -// END ROBOT ORGAN PRINTER - -// FLESH ORGAN PRINTER -/obj/machinery/organ_printer/flesh - name = "bioprinter" - desc = "It's a machine that prints replacement organs." - icon_state = "bioprinter" - base_type = /obj/machinery/organ_printer/flesh - machine_name = "bioprinter" - machine_desc = "Bioprinters can create surrogate organs for many species by using a blood sample from the intended recipient. Uses meat for biological matter." - // null amount means it will calculate the cost based on get_organ_cost() - var/list/amount_list = list( - /obj/item/reagent_containers/food/snacks/meat = 50, - /obj/item/reagent_containers/food/snacks/rawcutlet = 15, - /obj/item/organ = null - ) - var/datum/dna/loaded_dna_datum - var/datum/species/loaded_species //For quick refrencing - -/obj/machinery/organ_printer/flesh/mapped/Initialize() - . = ..() - stored_matter = max_stored_matter - -/obj/machinery/organ_printer/flesh/dismantle() - var/turf/T = get_turf(src) - if(T) - while(stored_matter >= amount_list[/obj/item/reagent_containers/food/snacks/meat]) - stored_matter -= amount_list[/obj/item/reagent_containers/food/snacks/meat] - new /obj/item/reagent_containers/food/snacks/meat(T) - return ..() - -/obj/machinery/organ_printer/flesh/print_organ(var/choice) - var/obj/item/organ/O - var/new_organ - if(loaded_species.has_organ[choice]) - new_organ = loaded_species.has_organ[choice] - else if(loaded_species.has_limbs[choice]) - new_organ = loaded_species.has_limbs[choice]["path"] - if(new_organ) - O = new new_organ(get_turf(src), loaded_dna_datum) - O.status |= ORGAN_CUT_AWAY - else - O = ..() - visible_message(SPAN_INFO("\The [src] churns for a moment, injects its stored DNA into the biomass, then spits out \a [O].")) - playsound(src.loc, 'sound/machines/ding.ogg', 50, 1) - return O - -/obj/machinery/organ_printer/flesh/physical_attack_hand(mob/user) - if(!loaded_dna_datum || !loaded_species) - visible_message(SPAN_INFO("\The [src] displays a warning: 'No DNA saved. Insert a blood sample.'")) - return - - var/choice = input("What [loaded_species.name] organ would you like to print?") as null|anything in products - - if(!choice) - return - - ..(user, choice) - -/obj/machinery/organ_printer/flesh/attackby(obj/item/W, mob/user) - // Load with matter for printing. - for(var/path in amount_list) - if(istype(W, path)) - if(max_stored_matter == stored_matter) - to_chat(user, SPAN_WARNING("\The [src] is too full.")) - return - if(!user.unEquip(W)) - return - var/add_matter = amount_list[path] ? amount_list[path] : 0.5*get_organ_cost(W) - stored_matter += min(add_matter, max_stored_matter - stored_matter) - to_chat(user, SPAN_INFO("\The [src] processes \the [W]. Levels of stored biomass now: [stored_matter]")) - qdel(W) - - // DNA sample from syringe. - if(istype(W,/obj/item/reagent_containers/syringe)) - var/obj/item/reagent_containers/syringe/S = W - var/datum/reagent/blood/injected = locate() in S.reagents.reagent_list //Grab some blood - if(injected && LAZYLEN(injected.data)) - var/loaded_dna = injected.data - var/weakref/R = loaded_dna["donor"] - var/mob/living/carbon/human/H = R.resolve() - if(H && istype(H) && H.species && H.dna) - loaded_species = H.species - loaded_dna_datum = H.dna && H.dna.Clone() - products = get_possible_products() - to_chat(user, SPAN_INFO("You inject the blood sample into the bioprinter.")) - return TRUE - to_chat(user, SPAN_NOTICE("\The [src] displays an error: no viable blood sample could be obtained from \the [W].")) - return ..() - -/obj/machinery/organ_printer/flesh/proc/get_possible_products() - . = list() - if(!loaded_species) - return - var/list/organs = list() - for(var/organ in loaded_species.has_organ) - organs += loaded_species.has_organ[organ] - for(var/organ in loaded_species.has_limbs) - if ((loaded_species.name == SPECIES_NABBER) || (organ == BP_GROIN)) - organs += loaded_species.has_limbs[organ]["path"] - for(var/organ in organs) - var/obj/item/organ/O = organ - if(check_printable(organ)) - .[initial(O.organ_tag)] = list(O, get_organ_cost(O)) - -/obj/machinery/organ_printer/flesh/proc/get_organ_cost(var/obj/item/organ/O) - . = initial(O.print_cost) - if(!.) - . = round(0.75 * initial(O.max_damage)) - -/obj/machinery/organ_printer/flesh/proc/check_printable(var/organtype) - var/obj/item/organ/O = organtype - if(!initial(O.can_be_printed)) - return FALSE - if(initial(O.vital)) - return FALSE - if(initial(O.status) & ORGAN_ROBOTIC) - return FALSE - if(ispath(organtype, /obj/item/organ/external)) - var/obj/item/organ/external/E = organtype - if(initial(E.limb_flags) & ORGAN_FLAG_HEALS_OVERKILL) - return FALSE - return TRUE - -// END FLESH ORGAN PRINTER diff --git a/code/game/machinery/bluespace_drive.dm b/code/game/machinery/bluespace_drive.dm deleted file mode 100644 index dea34b4ced9d7..0000000000000 --- a/code/game/machinery/bluespace_drive.dm +++ /dev/null @@ -1,148 +0,0 @@ -/obj/machinery/bluespacedrive - name = "bluespace drive" - desc = "The Naophoros-pattern jump drive is a machine created by the skrell, mated with countless human devices and apparatuses to make it able to interface with the vastly different technology used in their ships." - icon = 'icons/obj/machines/bluespacedrive.dmi' - icon_state = "bsd_core" - anchored = TRUE - density = TRUE - pixel_y = -32 - pixel_x = -32 - idle_power_usage = 150 KILOWATTS - construct_state = /decl/machine_construction/default/panel_closed - health_max = 1000 - health_resistances = DAMAGE_RESIST_ELECTRICAL - damage_hitsound = 'sound/machines/BSD_damaging.ogg' - health_min_damage = 10 - - /// Indicates whether the drive should show effects. - var/const/STATE_BROKEN = FLAG(0) - - /// Indicates whether the drive should use the unstable core effect. - var/const/STATE_UNSTABLE = FLAG(1) - - /// A field of STATE_* flags related to the drive. - var/state = EMPTY_BITFIELD - - /// The token for the drive's idle loop - var/drive_sound - - -/obj/machinery/bluespacedrive/Destroy() - QDEL_NULL(drive_sound) - particles = null - return ..() - - -/obj/machinery/bluespacedrive/Initialize() - . = ..() - drive_sound = GLOB.sound_player.PlayLoopingSound(src, "\ref[src]", 'sound/machines/BSD_idle.ogg', 50, 7) - particles = new /particles/bluespace_torus - set_light(1, 5, 15, 10, COLOR_CYAN) - update_icon() - - -/obj/machinery/bluespacedrive/on_update_icon() - overlays.Cut() - if (state & STATE_BROKEN) - icon_state = "bsd_core_broken" - else - icon_state = "bsd_core" - if (state & STATE_UNSTABLE) - overlays += "bsd_c_u" - else - overlays += "bsd_c_s" - - -/obj/machinery/bluespacedrive/emp_act(severity) - ..() - if (!(state & STATE_BROKEN)) - visible_message(SPAN_WARNING("\The [src]'s field warps and buckles uneasily!")) - playsound(loc, damage_hitsound, 80) - - -/obj/machinery/bluespacedrive/bullet_act(obj/item/projectile/projectile) - . = ..() - if (!(state & STATE_BROKEN)) - visible_message(SPAN_WARNING("\The [src]'s field crackles disturbingly!")) - playsound(loc, damage_hitsound, 80) - - -/obj/machinery/bluespacedrive/post_health_change(health_mod, damage_type) - . = ..() - var/damage_percentage = get_damage_percentage() - if (damage_percentage >= 50 && !(state & STATE_UNSTABLE)) - state |= STATE_UNSTABLE - update_icon() - else if (damage_percentage < 50 && (state & STATE_UNSTABLE)) - state &= ~STATE_UNSTABLE - update_icon() - - -/obj/machinery/bluespacedrive/on_death() - . = ..() - playsound(loc, 'sound/machines/BSD_explosion.ogg', 100) - visible_message(SPAN_DANGER(FONT_LARGE("\The [src] begins emitting an ear-splitting, horrible shrill! Get back!"))) - addtimer(CALLBACK(src, .proc/explode), 5 SECONDS) - - -/// Final death act handler for the drive where it explodes. You really shouldn't call this directly or you'll make weird broken things regarding health tracking. Use `kill_health()` instead, the death handler calls this. -/obj/machinery/bluespacedrive/proc/explode() - visible_message(SPAN_DANGER(FONT_LARGE("\The [src]'s containment field is wracked by a series of horrendous distortions, buckling and twisting like a living thing before bursting in a flash of light!"))) - explosion(get_turf(src), -1, 5, 10) - empulse(get_turf(src), 7, 14) - state |= STATE_BROKEN - for (var/verb in verbs) - verbs -= verb - update_icon() - - -/obj/machinery/bluespacedrive/attackby(obj/item/item, mob/user) - if (istype(item, /obj/item/grab)) - var/obj/item/grab/grab = item - to_chat(user, SPAN_WARNING("\The [src] pulls at \the [grab.affecting] but they're too heavy.")) - return - if (issilicon(user) || !user.unEquip(item, src)) - to_chat(user, SPAN_WARNING("\The [src] pulls at \the [item] but it's attached to you.")) - return - user.visible_message( - SPAN_WARNING("\The [user] reaches out \a [item] to \the [src], warping briefly as it disappears in a flash of blue light, scintillating motes left behind."), - SPAN_DANGER("You touch \the [src] with \the [item], the field buckling around it before retracting with a crackle as it leaves small, blue scintillas on your hand as you flinch away."), - SPAN_WARNING("You hear an otherwordly crackle, followed by humming.") - ) - qdel(item) - if (prob(5)) - playsound(loc, 'sound/items/eatfood.ogg', 40) //Yum - else - playsound(loc, 'sound/machines/BSD_interact.ogg', 40) - - -/obj/machinery/bluespacedrive/examine_damage_state(mob/user) - if (health_dead) - to_chat(user, SPAN_DANGER("Its field is completely destroyed, the core revealed under the arcing debris.")) - return - - var/damage_percentage = get_damage_percentage() - switch (damage_percentage) - if (0) - to_chat(user, SPAN_NOTICE("At a glance, its field is peacefully humming without any alterations.")) - if (1 to 32) - to_chat(user, SPAN_WARNING("Its field is crackling gently, with the occasional twitch.")) - if (33 to 65) - to_chat(user, SPAN_WARNING("Its damaged field is twitching and crackling dangerously!")) - else - to_chat(user, SPAN_DANGER("Its unstable field is cracking and shifting dangerously, revealing the core inside briefly!")) - - -/particles/bluespace_torus - width = 700 - height = 700 - count = 2700 - spawning = 260 - lifespan = 0.75 SECONDS - fade = 0.95 SECONDS - position = generator("circle", 16, 24, NORMAL_RAND) - velocity = generator("circle", -6, 6, NORMAL_RAND) - friction = 0.15 - gradient = list(0, COLOR_WHITE, 0.75, COLOR_BLUE_LIGHT) - color_change = 0.125 - drift = generator("vector", list(-0.2, -0.2), list(0.2, 0.2)) diff --git a/code/game/machinery/bluespacerelay.dm b/code/game/machinery/bluespacerelay.dm deleted file mode 100644 index af50fe3c3cccd..0000000000000 --- a/code/game/machinery/bluespacerelay.dm +++ /dev/null @@ -1,18 +0,0 @@ -/obj/machinery/bluespacerelay - name = "Emergency Bluespace Relay" - desc = "This sends messages through bluespace! Wow!" - icon = 'icons/obj/stationobjs.dmi' - icon_state = "bspacerelay" - anchored = TRUE - density = TRUE - idle_power_usage = 15000 - construct_state = /decl/machine_construction/default/panel_closed - uncreated_component_parts = null - machine_name = "emergency bluespace relay" - machine_desc = "Used to instantly send messages across vast distances. An emergency relay is required to directly contact Expeditionary Command through crisis channels." - -/obj/machinery/bluespacerelay/on_update_icon() - if(stat & (BROKEN|NOPOWER)) - icon_state = "[initial(icon_state)]_off" - else - icon_state = initial(icon_state) \ No newline at end of file diff --git a/code/game/machinery/bodyscanner.dm b/code/game/machinery/bodyscanner.dm deleted file mode 100644 index dd205c0951d30..0000000000000 --- a/code/game/machinery/bodyscanner.dm +++ /dev/null @@ -1,187 +0,0 @@ -// Pretty much everything here is stolen from the dna scanner FYI -/obj/machinery/bodyscanner - var/mob/living/carbon/human/occupant - var/locked - name = "body scanner" - desc = "A large full-body scanning machine that provides a complete physical assessment of a patient placed inside. Operated using an adjacent console." - icon = 'icons/obj/Cryogenic2.dmi' - icon_state = "body_scanner_0" - density = TRUE - anchored = TRUE - idle_power_usage = 60 - active_power_usage = 10000 //10 kW. It's a big all-body scanner. - construct_state = /decl/machine_construction/default/panel_closed - uncreated_component_parts = null - stat_immune = 0 - - machine_name = "body scanner" - machine_desc = "A full-body scanning suite that provides a complete health assessment of a patient placed inside. Requires an adjacent console to operate." - -/obj/machinery/bodyscanner/examine(mob/user) - . = ..() - if (occupant && user.Adjacent(src)) - occupant.examine(arglist(args)) - -/obj/machinery/bodyscanner/relaymove(mob/user) - ..() - go_out() - user.visible_message( - SPAN_NOTICE("\The [user] climbs out of \the [initial(name)]."), - SPAN_NOTICE("You climb out of \the [initial(name)].") - ) - -/obj/machinery/bodyscanner/verb/eject() - set src in oview(1) - set category = "Object" - set name = "Eject Body Scanner" - - if (usr.incapacitated()) - return - usr.visible_message( - SPAN_NOTICE("\The [usr] opens \the [src]."), - SPAN_NOTICE("You eject \the [initial(name)]'s occupant."), - SPAN_ITALIC("You hear a pressurized hiss, then a sound like glass creaking.") - ) - go_out() - add_fingerprint(usr) - -/obj/machinery/bodyscanner/AltClick(mob/user) - if(CanPhysicallyInteract(user)) - eject() - else - ..() - -/obj/machinery/bodyscanner/verb/move_inside() - set src in oview(1) - set category = "Object" - set name = "Enter Body Scanner" - - if(!user_can_move_target_inside(usr,usr)) - return - usr.visible_message( - SPAN_NOTICE("\The [usr] climbs into \the [src]."), - SPAN_NOTICE("You climb into \the [src]."), - SPAN_ITALIC("You hear footsteps on metal, cloth rustling, and then a pressurized hiss.") - ) - move_target_inside(usr,usr) - usr.pulling = null - usr.client.perspective = EYE_PERSPECTIVE - usr.client.eye = src - -/obj/machinery/bodyscanner/proc/drop_contents() - for(var/obj/O in (contents - component_parts)) - O.dropInto(loc) - -/obj/machinery/bodyscanner/proc/go_out() - if ((!( occupant ) || locked)) - return - drop_contents() - if (occupant.client) - occupant.client.eye = occupant.client.mob - occupant.client.perspective = MOB_PERSPECTIVE - occupant.dropInto(loc) - occupant = null - update_use_power(POWER_USE_IDLE) - update_icon() - SetName(initial(name)) - -/obj/machinery/bodyscanner/state_transition(var/decl/machine_construction/default/new_state) - . = ..() - if(istype(new_state)) - updateUsrDialog() - -/obj/machinery/bodyscanner/attackby(obj/item/grab/normal/G, mob/user) - if(istype(G)) - var/mob/M = G.affecting - if(!user_can_move_target_inside(M, user)) - return - move_target_inside(M,user) - qdel(G) - return TRUE - return ..() - -/obj/machinery/bodyscanner/proc/user_can_move_target_inside(mob/target, mob/user) - if(!istype(user) || !istype(target)) - return FALSE - if(user.incapacitated()) - return FALSE - if(!target.simulated) - return FALSE - if(occupant) - to_chat(user, SPAN_WARNING("\The [src] is already occupied!")) - return FALSE - if(target.abiotic()) - to_chat(user, SPAN_WARNING("[user == target ? "You" : "[target]"] can't enter \the [src] while wearing abiotic items.")) - return FALSE - if(target.buckled) - to_chat(user, SPAN_WARNING("Unbuckle [user == target ? "yourself" : "\the [target]"] before attempting to [user == target ? "enter \the [src]" : "move them"].")) - return FALSE - return TRUE - -/obj/machinery/bodyscanner/proc/move_target_inside(mob/target, mob/user) - target.forceMove(src) - occupant = target - - update_use_power(POWER_USE_ACTIVE) - update_icon() - drop_contents() - SetName("[name] ([occupant])") - - add_fingerprint(user) - -/obj/machinery/bodyscanner/on_update_icon() - if(!occupant) - icon_state = "body_scanner_0" - else if(stat & (BROKEN|NOPOWER)) - icon_state = "body_scanner_1" - else - icon_state = "body_scanner_2" - -//Like grap-put, but for mouse-drop. -/obj/machinery/bodyscanner/MouseDrop_T(mob/target, mob/user) - if(!CanMouseDrop(target, user) || !istype(target)) - return FALSE - if(!user_can_move_target_inside(target, user)) - return - if (user == target) - user.visible_message( - SPAN_NOTICE("\The [usr] climbs into \the [src]."), - SPAN_NOTICE("You climb into \the [src]."), - SPAN_ITALIC("You hear metal clanking, then a pressurized hiss.") - ) - move_target_inside(target, user) - return - user.visible_message( - SPAN_NOTICE("\The [user] begins placing \the [target] into \the [src]."), - SPAN_NOTICE("You start placing \the [target] into \the [src].") - ) - if(!do_after(user, 3 SECONDS, src, DO_PUBLIC_UNIQUE) || !user_can_move_target_inside(target, user)) - return - move_target_inside(target,user) - -/obj/machinery/bodyscanner/ex_act(severity) - switch(severity) - if(EX_ACT_DEVASTATING) - for(var/atom/movable/A as mob|obj in src) - A.dropInto(loc) - A.ex_act(severity) - qdel(src) - if(EX_ACT_HEAVY) - if (prob(50)) - for(var/atom/movable/A as mob|obj in src) - A.dropInto(loc) - A.ex_act(severity) - qdel(src) - if(EX_ACT_LIGHT) - if (prob(25)) - for(var/atom/movable/A as mob|obj in src) - A.dropInto(loc) - A.ex_act(severity) - qdel(src) - - -/obj/machinery/bodyscanner/Destroy() - if(occupant) - occupant.dropInto(loc) - occupant = null - . = ..() diff --git a/code/game/machinery/bodyscanner_console.dm b/code/game/machinery/bodyscanner_console.dm deleted file mode 100644 index 042ba02c27140..0000000000000 --- a/code/game/machinery/bodyscanner_console.dm +++ /dev/null @@ -1,166 +0,0 @@ -/obj/machinery/body_scanconsole - var/obj/machinery/bodyscanner/connected - var/stored_scan_subject - name = "body scanner console" - desc = "A small terminal used to operate an adjacent body scanner, view the results of a scan, and send those results to connected medical displays." - icon = 'icons/obj/Cryogenic2.dmi' - icon_state = "body_scannerconsole" - density = FALSE - anchored = TRUE - construct_state = /decl/machine_construction/default/panel_closed - uncreated_component_parts = null - stat_immune = 0 - - machine_name = "body scanner console" - machine_desc = "A small touchscreen terminal, used to operate an adjacent body scanner, as well as viewing and manipulating its readouts." - - var/list/connected_displays = list() - var/list/data = list() - var/scan_data - -/obj/machinery/body_scanconsole/Initialize() - . = ..() - FindScanner() - -/obj/machinery/body_scanconsole/on_update_icon() - if(stat & (BROKEN | NOPOWER)) - icon_state = "body_scannerconsole-p" - else - icon_state = initial(icon_state) - -/obj/machinery/body_scanconsole/ex_act(severity) - - switch(severity) - if(EX_ACT_DEVASTATING) - qdel(src) - if(EX_ACT_HEAVY) - if (prob(50)) - qdel(src) - -/obj/machinery/body_scanconsole/proc/FindScanner() - for(var/D in GLOB.cardinal) - connected = locate(/obj/machinery/bodyscanner, get_step(src, D)) - if(connected) - break - GLOB.destroyed_event.register(connected, src, .proc/unlink_scanner) - -/obj/machinery/body_scanconsole/proc/unlink_scanner(obj/machinery/bodyscanner/scanner) - GLOB.destroyed_event.unregister(scanner, src, .proc/unlink_scanner) - connected = null - -/obj/machinery/body_scanconsole/proc/FindDisplays() - for(var/obj/machinery/body_scan_display/D in SSmachines.machinery) - if (AreConnectedZLevels(D.z, z)) - connected_displays += D - GLOB.destroyed_event.register(D, src, .proc/remove_display) - return !!connected_displays.len - -/obj/machinery/body_scanconsole/attack_hand(mob/user) - if(!connected || (connected.stat & (NOPOWER|BROKEN))) - to_chat(user, SPAN_WARNING("This console is not connected to a functioning body scanner.")) - return TRUE - return ..() - -/obj/machinery/body_scanconsole/interface_interact(mob/user) - ui_interact(user) - return TRUE - -/obj/machinery/body_scanconsole/CanUseTopic(mob/user) - if(!connected) - return STATUS_CLOSE - return ..() - -/obj/machinery/body_scanconsole/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1) - if(connected && connected.occupant) - data["scanEnabled"] = TRUE - if(ishuman(connected.occupant)) - data["isCompatible"] = TRUE - else - data["isCompatible"] = FALSE - else - data["scanEnabled"] = FALSE - - if(!data["scan"]) - data["html_scan_header"] = "
      No scan loaded.
      " - data["html_scan_health"] = " " - data["html_scan_body"] = " " - else - data["html_scan_header"] = display_medical_data_header(data["scan"], user.get_skill_value(SKILL_MEDICAL)) - data["html_scan_health"] = display_medical_data_health(data["scan"], user.get_skill_value(SKILL_MEDICAL)) - data["html_scan_body"] = display_medical_data_body(data["scan"], user.get_skill_value(SKILL_MEDICAL)) - - ui = SSnano.try_update_ui(user, src, ui_key, ui, data, force_open) - if(!ui) - ui = new(user, src, ui_key, "body_scanner.tmpl", "Body Scanner", 600, 800) - ui.set_initial_data(data) - ui.open() - -/obj/machinery/body_scanconsole/OnTopic(mob/user, href_list) - if(href_list["scan"]) - if (!connected.occupant) - to_chat(user, SPAN_WARNING("[icon2html(src, user)]The body scanner is empty.")) - return TOPIC_REFRESH - if (!istype(connected.occupant)) - to_chat(user, SPAN_WARNING("[icon2html(src, user)]The body scanner cannot scan that lifeform.")) - return TOPIC_REFRESH - data["printEnabled"] = TRUE - data["eraseEnabled"] = TRUE - data["pushEnabled"] = TRUE - data["scan"] = connected.occupant.get_raw_medical_data(TRUE) - data["html_scan_header"] = display_medical_data_header(data["scan"], user.get_skill_value(SKILL_MEDICAL)) - data["html_scan_health"] = display_medical_data_health(data["scan"], user.get_skill_value(SKILL_MEDICAL)) - data["html_scan_body"] = display_medical_data_body(data["scan"], user.get_skill_value(SKILL_MEDICAL)) - - stored_scan_subject = connected.occupant - user.visible_message( - SPAN_NOTICE("\The [user] performs a scan of \the [connected.occupant] using \the [initial(connected.name)]."), - SPAN_NOTICE("You run a full-body diagnostic of \the [connected.occupant] using \the [initial(connected.name)]."), - SPAN_ITALIC("You hear a series of beeps, followed by a deep humming sound.") - ) - playsound(connected.loc, 'sound/machines/medbayscanner.ogg', 50) - return TOPIC_REFRESH - - if (href_list["print"]) - if (!data["scan"]) - to_chat(user, SPAN_WARNING("[icon2html(src, user)]Error: No scan stored.")) - return TOPIC_REFRESH - var/list/scan = data["scan"] - new /obj/item/paper/bodyscan(loc, "Printout error.", "Body scan report - [stored_scan_subject]", scan.Copy()) - return TOPIC_REFRESH - - if(href_list["push"]) - if(!connected_displays.len && !FindDisplays()) - to_chat(user, SPAN_WARNING("[icon2html(src, user)]Error: No configured displays detected.")) - return TOPIC_REFRESH - for(var/obj/machinery/body_scan_display/D in connected_displays) - D.add_new_scan(data["scan"]) - user.visible_message( - SPAN_NOTICE("\The [user] keys a command into \the [src]."), - SPAN_NOTICE("The console beeps, confirming it has successfully sent the scan to the connected displays."), - SPAN_ITALIC("You hear someone typing on a terminal, then a beep.") - ) - return TOPIC_REFRESH - - if(href_list["erase"]) - data["scan"] = null - data["html_scan"] = null - stored_scan_subject = null - data["eraseEnabled"] = FALSE - data["printEnabled"] = FALSE - data["pushEnabled"] = FALSE - return TOPIC_REFRESH - -/obj/machinery/body_scanconsole/state_transition(var/decl/machine_construction/default/new_state) - . = ..() - if(istype(new_state)) - updateUsrDialog() - -/obj/machinery/body_scanconsole/proc/remove_display(var/obj/machinery/body_scan_display/display) - connected_displays -= display - GLOB.destroyed_event.unregister(display, src, .proc/remove_display) - -/obj/machinery/body_scanconsole/Destroy() - . = ..() - for(var/D in connected_displays) - remove_display(D) - unlink_scanner(connected) diff --git a/code/game/machinery/bodyscanner_display.dm b/code/game/machinery/bodyscanner_display.dm deleted file mode 100644 index 90c7dd9368158..0000000000000 --- a/code/game/machinery/bodyscanner_display.dm +++ /dev/null @@ -1,65 +0,0 @@ -/obj/machinery/body_scan_display - name = "Body Scan Display" - desc = "A wall-mounted display linked to a body scanner." - icon = 'icons/obj/modular_telescreen.dmi' - icon_state = "operating" - var/icon_state_unpowered = "telescreen" - anchored = TRUE - density = FALSE - idle_power_usage = 75 - active_power_usage = 300 - construct_state = /decl/machine_construction/default/panel_closed - uncreated_component_parts = null - stat_immune = 0 - w_class = ITEM_SIZE_HUGE - - machine_name = "body scanner display" - machine_desc = "Receives body scans from a linked body scanner and allows them to be viewed remotely." - - var/list/bodyscans = list() - var/selected = 0 - -/obj/machinery/body_scan_display/proc/add_new_scan(var/list/scan) - bodyscans += list(scan.Copy()) - updateUsrDialog() - -/obj/machinery/body_scan_display/OnTopic(mob/user as mob, href_list) - if(href_list["view"]) - var/selection = text2num(href_list["view"]) - if(is_valid_index(selection, bodyscans)) - selected = selection - return TOPIC_REFRESH - return TOPIC_HANDLED - if(href_list["delete"]) - var/selection = text2num(href_list["delete"]) - if(!is_valid_index(selection, bodyscans)) - return TOPIC_HANDLED - if(selected == selection) - selected = 0 - else if(selected > selection) - selected-- - bodyscans -= list(bodyscans[selection]) - return TOPIC_REFRESH - -/obj/machinery/body_scan_display/interface_interact(user) - ui_interact(user) - return TRUE - -/obj/machinery/body_scan_display/ui_interact(var/mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open=1) - var/list/data = list() - data["scans"] = bodyscans - data["selected"] = selected - - if(selected > 0) - data["scan_header"] = display_medical_data_header(bodyscans[selected], user.get_skill_value(SKILL_MEDICAL)) - data["scan_health"] = display_medical_data_health(bodyscans[selected], user.get_skill_value(SKILL_MEDICAL)) - data["scan_body"] = display_medical_data_body(bodyscans[selected], user.get_skill_value(SKILL_MEDICAL)) - else - data["scan_header"] = " " - data["scan_health"] = " " - data["scan_body"] = " " - ui = SSnano.try_update_ui(user, src, ui_key, ui, data, force_open) - if(!ui) - ui = new(user, src, ui_key, "body_scan_display.tmpl", "Body Scan Display Console", 600, 800) - ui.set_initial_data(data) - ui.open() \ No newline at end of file diff --git a/code/game/machinery/buttons.dm b/code/game/machinery/buttons.dm deleted file mode 100644 index 900d356f43aaa..0000000000000 --- a/code/game/machinery/buttons.dm +++ /dev/null @@ -1,178 +0,0 @@ -/obj/machinery/button - name = "button" - icon = 'icons/obj/objects.dmi' - icon_state = "launcherbtt" - desc = "A remote control switch for something." - anchored = TRUE - power_channel = ENVIRON - idle_power_usage = 10 - public_variables = list( - /decl/public_access/public_variable/button_active, - /decl/public_access/public_variable/input_toggle - ) - public_methods = list(/decl/public_access/public_method/toggle_input_toggle) - stock_part_presets = list(/decl/stock_part_preset/radio/basic_transmitter/button = 1) - uncreated_component_parts = list( - /obj/item/stock_parts/power/apc, - /obj/item/stock_parts/radio/transmitter/basic - ) - - var/active = FALSE - var/operating = FALSE - var/cooldown = 1 SECOND - -/obj/machinery/button/Initialize() - . = ..() - update_icon() - -/obj/machinery/button/attackby(obj/item/W, mob/user as mob) - return attack_hand(user) - -/obj/machinery/button/interface_interact(user) - if(!CanInteract(user, DefaultTopicState())) - return FALSE - if(istype(user, /mob/living/carbon)) - playsound(src, "button", 60) - activate(user) - return TRUE - -/obj/machinery/button/emag_act() - if(req_access) - req_access.Cut() - -/obj/machinery/button/proc/activate(mob/living/user) - set waitfor = FALSE - if(operating) - return - - operating = TRUE - var/decl/public_access/public_variable/variable = decls_repository.get_decl(/decl/public_access/public_variable/button_active) - variable.write_var(src, !active) - use_power_oneoff(500) - update_icon() - - sleep(cooldown) - operating = FALSE - update_icon() - -/obj/machinery/button/on_update_icon() - if(operating) - icon_state = "launcheract" - else - icon_state = "launcherbtt" - -/decl/public_access/public_variable/button_active - expected_type = /obj/machinery/button - name = "button active" - desc = "Whether the button is currently in the on state." - can_write = FALSE - has_updates = TRUE - -/decl/public_access/public_variable/button_active/access_var(obj/machinery/button/button) - return button.active - -/decl/public_access/public_variable/button_active/write_var(obj/machinery/button/button, new_val) - . = ..() - if(.) - button.active = new_val - -/decl/stock_part_preset/radio/basic_transmitter/button - transmit_on_change = list("button_active" = /decl/public_access/public_variable/button_active) - frequency = BUTTON_FREQ - -//alternate button with the same functionality, except has a lightswitch sprite instead -/obj/machinery/button/switch - icon = 'icons/obj/power.dmi' - icon_state = "light0" - -/obj/machinery/button/switch/on_update_icon() - icon_state = "light[operating]" - -//alternate button with the same functionality, except has a door control sprite instead -/obj/machinery/button/alternate - icon = 'icons/obj/stationobjs.dmi' - icon_state = "doorctrl" - -/obj/machinery/button/alternate/on_update_icon() - if(operating) - icon_state = "doorctrl" - else - icon_state = "doorctrl2" - -//Toggle button determines icon state from active, not operating -/obj/machinery/button/toggle/on_update_icon() - if(active) - icon_state = "launcheract" - else - icon_state = "launcherbtt" - -//alternate button with the same toggle functionality, except has a lightswitch sprite instead -/obj/machinery/button/toggle/switch - icon = 'icons/obj/power.dmi' - icon_state = "light0" - -/obj/machinery/button/toggle/switch/on_update_icon() - icon_state = "light[active]" - - - -//alternate button with the same toggle functionality, except has a door control sprite instead -/obj/machinery/button/toggle/alternate - icon = 'icons/obj/stationobjs.dmi' - icon_state = "doorctrl" - -/obj/machinery/button/toggle/alternate/on_update_icon() - if(active) - icon_state = "doorctrl" - else - icon_state = "doorctrl2" - -//------------------------------- -// Mass Driver Button -// Passes the activate call to a mass driver wifi sender -//------------------------------- -/obj/machinery/button/mass_driver - name = "mass driver button" - -//------------------------------- -// Door Buttons -//------------------------------- - -/obj/machinery/button/alternate/door - icon = 'icons/obj/stationobjs.dmi' - icon_state = "doorctrl" - stock_part_presets = list(/decl/stock_part_preset/radio/basic_transmitter/button/door) - -/obj/machinery/button/alternate/door/on_update_icon() - if(operating) - icon_state = "[initial(icon_state)]1" - else - icon_state = "[initial(icon_state)]" - -/decl/stock_part_preset/radio/basic_transmitter/button/door - frequency = AIRLOCK_FREQ - transmit_on_change = list("toggle_door" = /decl/public_access/public_variable/button_active) - -/obj/machinery/button/alternate/door/bolts - stock_part_presets = list(/decl/stock_part_preset/radio/basic_transmitter/button/airlock_bolt) - -/decl/stock_part_preset/radio/basic_transmitter/button/airlock_bolt - frequency = AIRLOCK_FREQ - transmit_on_change = list("toggle_bolts" = /decl/public_access/public_variable/button_active) - -// Valve control - -/obj/machinery/button/toggle/valve - name = "remote valve control" - stock_part_presets = list(/decl/stock_part_preset/radio/basic_transmitter/button/atmosia) - -/obj/machinery/button/toggle/valve/on_update_icon() - if(!active) - icon_state = "launcherbtt" - else - icon_state = "launcheract" - -/decl/stock_part_preset/radio/basic_transmitter/button/atmosia - transmit_on_change = list("valve_toggle" = /decl/public_access/public_variable/button_active) - frequency = FUEL_FREQ - filter = RADIO_ATMOSIA \ No newline at end of file diff --git a/code/game/machinery/camera/camera.dm b/code/game/machinery/camera/camera.dm deleted file mode 100644 index bcc5ec8be4270..0000000000000 --- a/code/game/machinery/camera/camera.dm +++ /dev/null @@ -1,458 +0,0 @@ -/obj/machinery/camera - name = "security camera" - desc = "It's used to monitor rooms." - icon = 'icons/obj/monitors.dmi' - icon_state = "camera" - use_power = POWER_USE_ACTIVE - idle_power_usage = 5 - active_power_usage = 10 - layer = CAMERA_LAYER - - var/list/network = list(NETWORK_EXODUS) - var/c_tag = null - var/c_tag_order = 999 - var/number = 0 //camera number in area - var/status = 1 - anchored = TRUE - var/invuln = null - var/bugged = 0 - var/obj/item/camera_assembly/assembly = null - - var/toughness = 5 //sorta fragile - - // WIRES - wires = /datum/wires/camera - - //OTHER - - var/view_range = 7 - var/short_range = 2 - - var/light_disabled = 0 - var/alarm_on = 0 - var/busy = 0 - - var/on_open_network = 0 - - var/affected_by_emp_until = 0 - - var/is_helmet_cam = FALSE - -/obj/machinery/camera/examine(mob/user) - . = ..() - if(stat & BROKEN) - to_chat(user, "It is completely demolished.") - -/obj/machinery/camera/malf_upgrade(var/mob/living/silicon/ai/user) - ..() - malf_upgraded = 1 - - upgradeEmpProof() - upgradeXRay() - - to_chat(user, "\The [src] has been upgraded. It now has X-Ray capability and EMP resistance.") - return 1 - -/obj/machinery/camera/apply_visual(mob/living/carbon/human/M) - if(!M.client) - return - M.overlay_fullscreen("fishbed",/obj/screen/fullscreen/fishbed) - M.overlay_fullscreen("scanlines",/obj/screen/fullscreen/scanline) - M.overlay_fullscreen("whitenoise",/obj/screen/fullscreen/noise) - M.machine_visual = src - return 1 - -/obj/machinery/camera/remove_visual(mob/living/carbon/human/M) - if(!M.client) - return - M.clear_fullscreen("fishbed",0) - M.clear_fullscreen("scanlines") - M.clear_fullscreen("whitenoise") - M.machine_visual = null - return 1 - -/obj/machinery/camera/New() - assembly = new(src) - assembly.state = 4 - - update_icon() - - /* // Use this to look for cameras that have the same c_tag. - for(var/obj/machinery/camera/C in cameranet.cameras) - var/list/tempnetwork = C.network&src.network - if(C != src && C.c_tag == src.c_tag && tempnetwork.len) - to_world_log("[src.c_tag] [src.x] [src.y] [src.z] conflicts with [C.c_tag] [C.x] [C.y] [C.z]") - */ - if(!src.network || src.network.len < 1) - if(loc) - error("[src.name] in [get_area(src)] (x:[src.x] y:[src.y] z:[src.z] has errored. [src.network?"Empty network list":"Null network list"]") - else - error("[src.name] in [get_area(src)]has errored. [src.network?"Empty network list":"Null network list"]") - ASSERT(src.network) - ASSERT(src.network.len > 0) - ..() - -/obj/machinery/camera/Initialize() - . = ..() - if(!c_tag) - number = 1 - var/area/A = get_area(src) - if(A) - for(var/obj/machinery/camera/C in A) - if(C == src) continue - if(C.number) - number = max(number, C.number+1) - c_tag = "[A.name][number == 1 ? "" : " #[number]"]" - invalidateCameraCache() - - -/obj/machinery/camera/Destroy() - deactivate(null, 0) //kick anyone viewing out - if(assembly) - qdel(assembly) - assembly = null - return ..() - -/obj/machinery/camera/Process() - if((stat & EMPED) && world.time >= affected_by_emp_until) - stat &= ~EMPED - cancelCameraAlarm() - update_icon() - update_coverage() - return internal_process() - -/obj/machinery/camera/emp_act(severity) - if (!isEmpProof()) - if (prob(100/severity)) - if (!affected_by_emp_until || (world.time < affected_by_emp_until)) - affected_by_emp_until = max(affected_by_emp_until, world.time + (90 SECONDS / severity)) - else - stat |= EMPED - set_light(0) - triggerCameraAlarm() - update_icon() - update_coverage() - START_PROCESSING_MACHINE(src, MACHINERY_PROCESS_SELF) - ..() - -/obj/machinery/camera/bullet_act(var/obj/item/projectile/P) - take_damage(P.get_structure_damage()) - -/obj/machinery/camera/ex_act(severity) - if(src.invuln) - return - - //camera dies if an explosion touches it! - if(severity <= EX_ACT_HEAVY || prob(50)) - destroy() - - ..() //and give it the regular chance of being deleted outright - -/obj/machinery/camera/hitby(AM as mob|obj) - ..() - if (istype(AM, /obj)) - var/obj/O = AM - if (O.throwforce >= src.toughness) - visible_message("[src] was hit by [O].") - take_damage(O.throwforce) - -/obj/machinery/camera/proc/setViewRange(var/num = 7) - src.view_range = num - cameranet.update_visibility(src, 0) - -/obj/machinery/camera/physical_attack_hand(mob/living/carbon/human/user) - if(!istype(user)) - return - if(user.species.can_shred(user)) - set_status(0) - user.do_attack_animation(src) - visible_message("\The [user] slashes at [src]!") - playsound(src.loc, 'sound/weapons/slash.ogg', 100, 1) - add_hiddenprint(user) - destroy() - return TRUE - -/obj/machinery/camera/attackby(obj/item/W as obj, mob/living/user as mob) - update_coverage() - var/datum/wires/camera/camera_wires = wires - // DECONSTRUCTION - if(isScrewdriver(W)) -// to_chat(user, "You start to [panel_open ? "close" : "open"] the camera's panel.") - //if(toggle_panel(user)) // No delay because no one likes screwdrivers trying to be hip and have a duration cooldown - panel_open = !panel_open - user.visible_message("[user] screws the camera's panel [panel_open ? "open" : "closed"]!", - "You screw the camera's panel [panel_open ? "open" : "closed"].") - playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1) - - else if((isWirecutter(W) || isMultitool(W)) && panel_open) - return wires.Interact(user) - - else if(isWelder(W) && (camera_wires.CanDeconstruct() || (stat & BROKEN))) - if(weld(W, user)) - if(assembly) - assembly.dropInto(loc) - assembly.anchored = TRUE - assembly.camera_name = c_tag - assembly.camera_network = english_list(network, "Exodus", ",", ",") - assembly.update_icon() - assembly.dir = src.dir - if(stat & BROKEN) - assembly.state = 2 - to_chat(user, "You repaired \the [src] frame.") - cancelCameraAlarm() - else - assembly.state = 1 - to_chat(user, "You cut \the [src] free from the wall.") - new /obj/item/stack/cable_coil(src.loc, length=2) - assembly = null //so qdel doesn't eat it. - qdel(src) - return - - // OTHER - else if (can_use() && istype(W, /obj/item/paper) && isliving(user)) - var/mob/living/U = user - var/obj/item/paper/X = W - var/itemname = X.name - var/info = X.info - to_chat(U, "You hold \a [itemname] up to the camera ...") - for(var/mob/living/silicon/ai/O in GLOB.living_mob_list_) - if(!O.client) continue - if(U.name == "Unknown") to_chat(O, "[U] holds \a [itemname] up to one of your cameras ...") - else to_chat(O, "[U] holds \a [itemname] up to one of your cameras ...") - show_browser(O, text("[][]", itemname, info), text("window=[]", itemname)) - - else if (W.damtype == DAMAGE_BRUTE || W.damtype == DAMAGE_BURN) //bashing cameras - user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN) - if (W.force >= src.toughness) - user.do_attack_animation(src) - visible_message("[src] has been [pick(W.attack_verb)] with [W] by [user]!") - if (istype(W, /obj/item)) //is it even possible to get into attackby() with non-items? - var/obj/item/I = W - if (I.hitsound) - playsound(loc, I.hitsound, 50, 1, -1) - take_damage(W.force) - - else - ..() - -/obj/machinery/camera/proc/deactivate(user as mob, var/choice = 1) - // The only way for AI to reactivate cameras are malf abilities, this gives them different messages. - if(istype(user, /mob/living/silicon/ai)) - user = null - - if(choice != 1) - return - - set_status(!src.status) - if (!(src.status)) - if(user) - visible_message(" [user] has deactivated [src]!") - else - visible_message(" [src] clicks and shuts down. ") - playsound(src.loc, 'sound/items/Wirecutter.ogg', 100, 1) - icon_state = "[initial(icon_state)]1" - add_hiddenprint(user) - else - if(user) - visible_message(" [user] has reactivated [src]!") - else - visible_message(" [src] clicks and reactivates itself. ") - playsound(src.loc, 'sound/items/Wirecutter.ogg', 100, 1) - icon_state = initial(icon_state) - add_hiddenprint(user) - -/obj/machinery/camera/proc/take_damage(var/force, var/message) - //prob(25) gives an average of 3-4 hits - if (force >= toughness && (force > toughness*4 || prob(25))) - destroy() - -//Used when someone breaks a camera -/obj/machinery/camera/proc/destroy() - set_broken(TRUE) - wires.RandomCutAll() - - triggerCameraAlarm() - queue_icon_update() - update_coverage() - - //sparks - var/datum/effect/effect/system/spark_spread/spark_system = new /datum/effect/effect/system/spark_spread() - spark_system.set_up(5, 0, loc) - spark_system.start() - playsound(loc, "sparks", 50, 1) - -/obj/machinery/camera/proc/set_status(var/newstatus) - if (status != newstatus) - status = newstatus - update_coverage() - -/obj/machinery/camera/check_eye(mob/user) - if(!can_use()) return -1 - if(isXRay()) return SEE_TURFS|SEE_MOBS|SEE_OBJS - return 0 - -/obj/machinery/camera/on_update_icon() - pixel_x = 0 - pixel_y = 0 - - var/turf/T = get_step(get_turf(src), turn(src.dir, 180)) - if(istype(T, /turf/simulated/wall)) - if(dir == SOUTH) - pixel_y = 21 - else if(dir == WEST) - pixel_x = 10 - else if(dir == EAST) - pixel_x = -10 - - if (!status || (stat & BROKEN)) - icon_state = "[initial(icon_state)]1" - else if (stat & EMPED) - icon_state = "[initial(icon_state)]emp" - else - icon_state = initial(icon_state) - -/obj/machinery/camera/proc/triggerCameraAlarm(var/duration = 0) - alarm_on = 1 - GLOB.camera_alarm.triggerAlarm(loc, src, duration) - -/obj/machinery/camera/proc/cancelCameraAlarm() - if(wires.IsIndexCut(CAMERA_WIRE_ALARM)) - return - - alarm_on = 0 - GLOB.camera_alarm.clearAlarm(loc, src) - -//if false, then the camera is listed as DEACTIVATED and cannot be used -/obj/machinery/camera/proc/can_use() - if(!status) - return 0 - if(stat & (EMPED|BROKEN)) - return 0 - return 1 - -/obj/machinery/camera/proc/can_see() - var/list/see = null - var/turf/pos = get_turf(src) - if(!pos) - return list() - - if(isXRay()) - see = range(view_range, pos) - else - see = hear(view_range, pos) - return see - -/atom/proc/auto_turn() - //Automatically turns based on nearby walls. - var/turf/simulated/wall/T = null - for(var/i = 1, i <= 8; i += i) - T = get_ranged_target_turf(src, i, 1) - if(istype(T)) - //If someone knows a better way to do this, let me know. -Giacom - switch(i) - if(NORTH) - src.set_dir(SOUTH) - if(SOUTH) - src.set_dir(NORTH) - if(WEST) - src.set_dir(EAST) - if(EAST) - src.set_dir(WEST) - break - -//Return a working camera that can see a given mob -//or null if none -/proc/seen_by_camera(var/mob/M) - for(var/obj/machinery/camera/C in oview(4, M)) - if(C.can_use()) // check if camera disabled - return C - return null - -/proc/near_range_camera(var/mob/M) - - for(var/obj/machinery/camera/C in range(4, M)) - if(C.can_use()) // check if camera disabled - return C - - return null - -/obj/machinery/camera/proc/weld(var/obj/item/weldingtool/WT, var/mob/user) - - if(busy) - return 0 - - if(WT.remove_fuel(0, user)) - to_chat(user, "You start to weld \the [src]..") - playsound(src.loc, 'sound/items/Welder.ogg', 50, 1) - busy = 1 - if(do_after(user, 10 SECONDS, src, DO_PUBLIC_UNIQUE) && WT.isOn()) - playsound(src.loc, 'sound/items/Welder.ogg', 50, 1) - busy = 0 - return 1 - - busy = 0 - return 0 - -/obj/machinery/camera/proc/add_network(var/network_name) - add_networks(list(network_name)) - -/obj/machinery/camera/proc/remove_network(var/network_name) - remove_networks(list(network_name)) - -/obj/machinery/camera/proc/add_networks(var/list/networks) - var/network_added - network_added = 0 - for(var/network_name in networks) - if(!(network_name in src.network)) - network += network_name - network_added = 1 - - if(network_added) - update_coverage(1) - -/obj/machinery/camera/proc/remove_networks(var/list/networks) - var/network_removed - network_removed = 0 - for(var/network_name in networks) - if(network_name in src.network) - network -= network_name - network_removed = 1 - - if(network_removed) - update_coverage(1) - -/obj/machinery/camera/proc/replace_networks(var/list/networks) - if(networks.len != network.len) - network = networks - update_coverage(1) - return - - for(var/new_network in networks) - if(!(new_network in network)) - network = networks - update_coverage(1) - return - -/obj/machinery/camera/proc/clear_all_networks() - if(network.len) - network.Cut() - update_coverage(1) - -/obj/machinery/camera/proc/nano_structure() - var/cam[0] - cam["name"] = sanitize(c_tag) - cam["deact"] = !can_use() - cam["camera"] = "\ref[src]" - cam["x"] = get_x(src) - cam["y"] = get_y(src) - cam["z"] = get_z(src) - return cam - -// Resets the camera's wires to fully operational state. Used by one of Malfunction abilities. -/obj/machinery/camera/proc/reset_wires() - if(!wires) - return - set_broken(FALSE) // Fixes the camera and updates the icon. - wires.CutAll() - wires.MendAll() - update_coverage() diff --git a/code/game/machinery/camera/camera_assembly.dm b/code/game/machinery/camera/camera_assembly.dm deleted file mode 100644 index 5141275b30552..0000000000000 --- a/code/game/machinery/camera/camera_assembly.dm +++ /dev/null @@ -1,170 +0,0 @@ -/obj/item/camera_assembly - name = "camera assembly" - desc = "A pre-fabricated security camera kit, ready to be assembled and mounted to a surface." - icon = 'icons/obj/monitors.dmi' - icon_state = "cameracase" - w_class = ITEM_SIZE_SMALL - anchored = FALSE - - matter = list(MATERIAL_ALUMINIUM = 700, MATERIAL_GLASS = 300) - - // Motion, EMP-Proof, X-Ray - var/list/obj/item/possible_upgrades = list(/obj/item/device/assembly/prox_sensor, /obj/item/stack/material/osmium, /obj/item/stock_parts/scanning_module) - var/list/upgrades = list() - var/camera_name - var/camera_network - var/state = 0 - var/busy = 0 - /* - 0 = Nothing done to it - 1 = Wrenched in place - 2 = Welded in place - 3 = Wires attached to it (you can now attach/dettach upgrades) - 4 = Screwdriver panel closed and is fully built (you cannot attach upgrades) - */ - -/obj/item/camera_assembly/attackby(obj/item/W as obj, mob/living/user as mob) - - switch(state) - - if(0) - // State 0 - if(isWrench(W) && isturf(src.loc)) - playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1) - to_chat(user, "You wrench the assembly into place.") - anchored = TRUE - state = 1 - update_icon() - auto_turn() - return - - if(1) - // State 1 - if(isWelder(W)) - if(weld(W, user)) - to_chat(user, "You weld the assembly securely into place.") - anchored = TRUE - state = 2 - return - - else if(isWrench(W)) - playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1) - to_chat(user, "You unattach the assembly from its place.") - anchored = FALSE - update_icon() - state = 0 - return - - if(2) - // State 2 - if(isCoil(W)) - var/obj/item/stack/cable_coil/C = W - if(C.use(2)) - to_chat(user, "You add wires to the assembly.") - state = 3 - else - to_chat(user, "You need 2 coils of wire to wire the assembly.") - return - - else if(isWelder(W)) - - if(weld(W, user)) - to_chat(user, "You unweld the assembly from its place.") - state = 1 - anchored = TRUE - return - - - if(3) - // State 3 - if(isScrewdriver(W)) - playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1) - - var/input = sanitize(input(usr, "Which networks would you like to connect this camera to? Separate networks with a comma. No Spaces!\nFor example: Exodus,Security,Secret", "Set Network", camera_network ? camera_network : NETWORK_EXODUS)) - if(!input) - to_chat(usr, "No input found please hang up and try your call again.") - return - - var/list/tempnetwork = splittext(input, ",") - if(tempnetwork.len < 1) - to_chat(usr, "No network found please hang up and try your call again.") - return - - var/area/camera_area = get_area(src) - var/temptag = "[sanitize(camera_area.name)] ([rand(1, 999)])" - input = sanitizeSafe(input(usr, "How would you like to name the camera?", "Set Camera Name", camera_name ? camera_name : temptag), MAX_LNAME_LEN) - - state = 4 - var/obj/machinery/camera/C = new(src.loc) - src.forceMove(C) - C.assembly = src - - C.auto_turn() - - C.replace_networks(uniquelist(tempnetwork)) - - C.c_tag = input - - for(var/i = 5; i >= 0; i -= 1) - var/direct = input(user, "Direction?", "Assembling Camera", null) in list("LEAVE IT", "NORTH", "EAST", "SOUTH", "WEST" ) - if(direct != "LEAVE IT") - C.dir = text2dir(direct) - if(i != 0) - var/confirm = alert(user, "Is this what you want? Chances Remaining: [i]", "Confirmation", "Yes", "No") - if(confirm == "Yes") - C.update_icon() - break - return - - else if(isWirecutter(W)) - - new/obj/item/stack/cable_coil(get_turf(src), 2) - playsound(src.loc, 'sound/items/Wirecutter.ogg', 50, 1) - to_chat(user, "You cut the wires from the circuits.") - state = 2 - return - - // Upgrades! - if(is_type_in_list(W, possible_upgrades) && !is_type_in_list(W, upgrades) && user.unEquip(W, src)) // Is a possible upgrade and isn't in the camera already. - to_chat(user, "You attach \the [W] into the assembly inner circuits.") - upgrades += W - return - - // Taking out upgrades - else if(isCrowbar(W) && upgrades.len) - var/obj/U = locate(/obj) in upgrades - if(U) - to_chat(user, "You unattach an upgrade from the assembly.") - playsound(src.loc, 'sound/items/Crowbar.ogg', 50, 1) - U.dropInto(loc) - upgrades -= U - return - - ..() - -/obj/item/camera_assembly/on_update_icon() - if(anchored) - icon_state = "camera1" - else - icon_state = "cameracase" - -/obj/item/camera_assembly/attack_hand(mob/user as mob) - if(!anchored) - ..() - -/obj/item/camera_assembly/proc/weld(var/obj/item/weldingtool/WT, var/mob/user) - - if(busy) - return 0 - - if(WT.remove_fuel(0, user)) - to_chat(user, "You start to weld \the [src]..") - playsound(src.loc, 'sound/items/Welder.ogg', 50, 1) - busy = 1 - if(do_after(user, 2 SECONDS, src, DO_PUBLIC_UNIQUE) && WT.isOn()) - playsound(src.loc, 'sound/items/Welder.ogg', 50, 1) - busy = 0 - return 1 - - busy = 0 - return 0 diff --git a/code/game/machinery/camera/motion.dm b/code/game/machinery/camera/motion.dm deleted file mode 100644 index 143a4ee2b1864..0000000000000 --- a/code/game/machinery/camera/motion.dm +++ /dev/null @@ -1,59 +0,0 @@ -/obj/machinery/camera - var/list/motionTargets = list() - var/detectTime = 0 - var/alarm_delay = 100 // Don't forget, there's another 10 seconds in queueAlarm() - movable_flags = MOVABLE_FLAG_PROXMOVE - -/obj/machinery/camera/proc/internal_process() - // motion camera event loop - if (stat & (EMPED|NOPOWER)) - return - if(!isMotion()) - . = PROCESS_KILL - return - if (detectTime > 0) - var/elapsed = world.time - detectTime - if (elapsed > alarm_delay) - triggerAlarm() - else if (detectTime == -1) - for (var/mob/target in motionTargets) - if (target.stat == DEAD) - lostTarget(target) - // See if the camera is still in range - if(!in_range(src, target)) - // If they aren't in range, lose the target. - lostTarget(target) - -/obj/machinery/camera/proc/newTarget(var/mob/target) - if (istype(target, /mob/living/silicon/ai)) return 0 - if (detectTime == 0) - detectTime = world.time // start the clock - if (!(target in motionTargets)) - motionTargets += target - return 1 - -/obj/machinery/camera/proc/lostTarget(var/mob/target) - if (target in motionTargets) - motionTargets -= target - if (motionTargets.len == 0) - cancelAlarm() - -/obj/machinery/camera/proc/cancelAlarm() - if (!status || (stat & NOPOWER)) - return 0 - if (detectTime == -1) - GLOB.motion_alarm.clearAlarm(loc, src) - detectTime = 0 - return 1 - -/obj/machinery/camera/proc/triggerAlarm() - if (!status || (stat & NOPOWER)) - return 0 - if (!detectTime) return 0 - GLOB.motion_alarm.triggerAlarm(loc, src) - detectTime = -1 - return 1 - -/obj/machinery/camera/HasProximity(atom/movable/AM as mob|obj) - if(isliving(AM)) - newTarget(AM) diff --git a/code/game/machinery/camera/presets.dm b/code/game/machinery/camera/presets.dm deleted file mode 100644 index 378d099f5743e..0000000000000 --- a/code/game/machinery/camera/presets.dm +++ /dev/null @@ -1,97 +0,0 @@ -/obj/machinery/camera/network/engineering - network = list(NETWORK_ENGINEERING) - -/obj/machinery/camera/network/ert - network = list(NETWORK_ERT) - -/obj/machinery/camera/network/medbay - network = list(NETWORK_MEDICAL) - -/obj/machinery/camera/network/mercenary - network = list(NETWORK_MERCENARY) - -/obj/machinery/camera/network/mining - network = list(NETWORK_MINE) - -/obj/machinery/camera/network/research - network = list(NETWORK_RESEARCH) - -/obj/machinery/camera/network/security - network = list(NETWORK_SECURITY) - -/obj/machinery/camera/network/thunder - network = list(NETWORK_THUNDER) - -// EMP - -/obj/machinery/camera/emp_proof/Initialize() - ..() - . = upgradeEmpProof() - -// X-RAY - -/obj/machinery/camera/xray - icon_state = "xraycam" // Thanks to Krutchen for the icons. - -/obj/machinery/camera/xray/Initialize() - . = ..() - upgradeXRay() - -// MOTION - -/obj/machinery/camera/motion/Initialize() - . = ..() - upgradeMotion() - -// ALL UPGRADES - -/obj/machinery/camera/all/Initialize() - . = ..() - upgradeEmpProof() - upgradeXRay() - upgradeMotion() - -// AUTONAME left as a map stub -/obj/machinery/camera/autoname - -// CHECKS - -/obj/machinery/camera/proc/isEmpProof() - var/O = locate(/obj/item/stack/material/osmium) in assembly.upgrades - return O - -/obj/machinery/camera/proc/isXRay() - var/obj/item/stock_parts/scanning_module/O = locate(/obj/item/stock_parts/scanning_module) in assembly.upgrades - if (O && O.rating >= 2) - return O - return null - -/obj/machinery/camera/proc/isMotion() - var/O = locate(/obj/item/device/assembly/prox_sensor) in assembly.upgrades - return O - -// UPGRADE PROCS - -/obj/machinery/camera/proc/upgradeEmpProof() - assembly.upgrades.Add(new /obj/item/stack/material/osmium(assembly)) - setPowerUsage() - update_coverage() - -/obj/machinery/camera/proc/upgradeXRay() - assembly.upgrades.Add(new /obj/item/stock_parts/scanning_module/adv(assembly)) - setPowerUsage() - update_coverage() - -/obj/machinery/camera/proc/upgradeMotion() - assembly.upgrades.Add(new /obj/item/device/assembly/prox_sensor(assembly)) - setPowerUsage() - STOP_PROCESSING_MACHINE(src, MACHINERY_PROCESS_SELF) - update_coverage() - -/obj/machinery/camera/proc/setPowerUsage() - var/mult = 1 - if (isXRay()) - mult++ - if (isMotion()) - mult++ - change_power_consumption(mult*initial(active_power_usage), POWER_USE_ACTIVE) \ No newline at end of file diff --git a/code/game/machinery/camera/tracking.dm b/code/game/machinery/camera/tracking.dm deleted file mode 100644 index 7d795e6bc239b..0000000000000 --- a/code/game/machinery/camera/tracking.dm +++ /dev/null @@ -1,271 +0,0 @@ -#define TRACKING_POSSIBLE 0 -#define TRACKING_NO_COVERAGE 1 -#define TRACKING_TERMINATE 2 - -/mob/living/silicon/ai/var/max_locations = 10 -/mob/living/silicon/ai/var/stored_locations[0] - -/proc/InvalidPlayerTurf(turf/T as turf) - return !(T && (T.z in GLOB.using_map.player_levels)) - -/mob/living/silicon/ai/proc/get_camera_list() - if(src.stat == 2) - return - - var/list/T = list() - for (var/obj/machinery/camera/C in cameranet.cameras) - var/list/tempnetwork = C.network&src.network - if (tempnetwork.len) - T[text("[][]", C.c_tag, (C.can_use() ? null : " (Deactivated)"))] = C - - track = new() - track.cameras = T - return T - - -/mob/living/silicon/ai/proc/ai_camera_list(var/camera in get_camera_list()) - set category = "Silicon Commands" - set name = "Show Camera List" - - if(check_unable()) - return - - if (!camera) - return 0 - - var/obj/machinery/camera/C = track.cameras[camera] - src.eyeobj.setLoc(C) - - return - -/mob/living/silicon/ai/proc/ai_store_location(loc as text) - set category = "Silicon Commands" - set name = "Store Camera Location" - set desc = "Stores your current camera location by the given name." - - loc = sanitize(loc) - if(!loc) - to_chat(src, "Must supply a location name") - return - - if(stored_locations.len >= max_locations) - to_chat(src, "Cannot store additional locations. Remove one first") - return - - if(loc in stored_locations) - to_chat(src, "There is already a stored location by this name") - return - - var/L = src.eyeobj.getLoc() - if (InvalidPlayerTurf(get_turf(L))) - to_chat(src, "Unable to store this location") - return - - stored_locations[loc] = L - to_chat(src, "Location '[loc]' stored") - -/mob/living/silicon/ai/proc/sorted_stored_locations() - return sortList(stored_locations) - -/mob/living/silicon/ai/proc/ai_goto_location(loc in sorted_stored_locations()) - set category = "Silicon Commands" - set name = "Goto Camera Location" - set desc = "Returns to the selected camera location." - - if (!(loc in stored_locations)) - to_chat(src, "Location [loc] not found") - return - - var/L = stored_locations[loc] - src.eyeobj.setLoc(L) - -/mob/living/silicon/ai/proc/ai_remove_location(loc in sorted_stored_locations()) - set category = "Silicon Commands" - set name = "Delete Camera Location" - set desc = "Deletes the selected camera location." - - if (!(loc in stored_locations)) - to_chat(src, "Location [loc] not found") - return - - stored_locations.Remove(loc) - to_chat(src, "Location [loc] removed") - -// Used to allow the AI is write in mob names/camera name from the CMD line. -/datum/trackable - var/list/names = list() - var/list/namecounts = list() - var/list/humans = list() - var/list/others = list() - var/list/cameras = list() - -/mob/living/silicon/ai/proc/trackable_mobs() - if(usr.stat == 2) - return list() - - var/datum/trackable/TB = new() - for(var/mob/living/M in SSmobs.mob_list) - if(M == usr) - continue - if(M.tracking_status() != TRACKING_POSSIBLE) - continue - - var/name = M.name - if (name in TB.names) - TB.namecounts[name]++ - name = text("[] ([])", name, TB.namecounts[name]) - else - TB.names.Add(name) - TB.namecounts[name] = 1 - if(istype(M, /mob/living/carbon/human)) - TB.humans[name] = M - else - TB.others[name] = M - - var/list/targets = sortList(TB.humans) + sortList(TB.others) - src.track = TB - return targets - -/mob/living/silicon/ai/proc/ai_camera_track(var/target_name in trackable_mobs()) - set category = "Silicon Commands" - set name = "Follow With Camera" - set desc = "Select who you would like to track." - - if(src.stat == 2) - to_chat(src, "You can't follow [target_name] with cameras because you are dead!") - return - if(!target_name) - src.cameraFollow = null - - var/mob/target = (isnull(track.humans[target_name]) ? track.others[target_name] : track.humans[target_name]) - src.track = null - ai_actual_track(target) - -/mob/living/silicon/ai/proc/ai_cancel_tracking(var/forced = 0) - if(!cameraFollow) - return - - to_chat(src, "Follow camera mode [forced ? "terminated" : "ended"].") - cameraFollow.tracking_cancelled() - cameraFollow = null - -/mob/living/silicon/ai/proc/ai_actual_track(mob/living/target) - if (!istype(target)) - return - if (target == cameraFollow) - return - if (cameraFollow) - ai_cancel_tracking() - cameraFollow = target - to_chat(src, SPAN_NOTICE("Tracking target ...")) - cameraFollow.tracking_initiated() - addtimer(CALLBACK(src, .proc/ai_actual_track_action), 0, TIMER_UNIQUE|TIMER_OVERRIDE|TIMER_NO_HASH_WAIT) - - -/mob/living/silicon/ai/proc/ai_actual_track_action() - if (!cameraFollow) - return - var/status = cameraFollow.tracking_status() - if (status == TRACKING_NO_COVERAGE) - to_chat(src, SPAN_WARNING("Target is not near any active cameras.")) - addtimer(CALLBACK(src, .proc/ai_actual_track_action), 10 SECONDS, TIMER_UNIQUE|TIMER_OVERRIDE|TIMER_NO_HASH_WAIT) - return - else if (status == TRACKING_TERMINATE) - ai_cancel_tracking(TRUE) - return - if (eyeobj) - eyeobj.setLoc(get_turf(cameraFollow), FALSE) - addtimer(CALLBACK(src, .proc/ai_actual_track_action), 1 SECOND, TIMER_UNIQUE|TIMER_OVERRIDE|TIMER_NO_HASH_WAIT) - return - view_core() - - -/obj/machinery/camera/attack_ai(var/mob/living/silicon/ai/user as mob) - if (!istype(user)) - return - if (!src.can_use()) - return - user.eyeobj.setLoc(get_turf(src)) - - -/mob/living/silicon/ai/attack_ai(var/mob/user as mob) - ai_camera_list() - -/proc/camera_sort(list/L) - var/obj/machinery/camera/a - var/obj/machinery/camera/b - - for (var/i = L.len, i > 0, i--) - for (var/j = 1 to i - 1) - a = L[j] - b = L[j + 1] - if (a.c_tag_order != b.c_tag_order) - if (a.c_tag_order > b.c_tag_order) - L.Swap(j, j + 1) - else - if (sorttext(a.c_tag, b.c_tag) < 0) - L.Swap(j, j + 1) - return L - - -/mob/living/proc/near_camera() - if (!isturf(loc)) - return 0 - else if(!cameranet.is_visible(src)) - return 0 - return 1 - -/mob/living/proc/tracking_status() - // Easy checks first. - var/obj/item/card/id/id = GetIdCard() - if(id && id.prevent_tracking()) - return TRACKING_TERMINATE - if(InvalidPlayerTurf(get_turf(src))) - return TRACKING_TERMINATE - if(invisibility >= INVISIBILITY_LEVEL_ONE) //cloaked - return TRACKING_TERMINATE - if(digitalcamo) - return TRACKING_TERMINATE - if(istype(loc,/obj/effect/dummy)) - return TRACKING_TERMINATE - - // Now, are they viewable by a camera? (This is last because it's the most intensive check) - return near_camera() ? TRACKING_POSSIBLE : TRACKING_NO_COVERAGE - -/mob/living/silicon/robot/tracking_status() - . = ..() - if(. == TRACKING_NO_COVERAGE) - return camera && camera.can_use() ? TRACKING_POSSIBLE : TRACKING_NO_COVERAGE - -/mob/living/carbon/human/tracking_status() - if(is_cloaked()) - . = TRACKING_TERMINATE - else - . = ..() - - if(. == TRACKING_TERMINATE) - return - - if(. == TRACKING_NO_COVERAGE) - var/turf/T = get_turf(src) - if(T && (T.z in GLOB.using_map.station_levels) && hassensorlevel(src, SUIT_SENSOR_TRACKING)) - return TRACKING_POSSIBLE - -/mob/living/proc/tracking_initiated() - -/mob/living/silicon/robot/tracking_initiated() - tracking_entities++ - if(tracking_entities == 1 && has_zeroth_law()) - to_chat(src, "Internal camera is currently being accessed.") - -/mob/living/proc/tracking_cancelled() - -/mob/living/silicon/robot/tracking_cancelled() - tracking_entities-- - if(!tracking_entities && has_zeroth_law()) - to_chat(src, "Internal camera is no longer being accessed.") - - -#undef TRACKING_POSSIBLE -#undef TRACKING_NO_COVERAGE -#undef TRACKING_TERMINATE diff --git a/code/game/machinery/cell_charger.dm b/code/game/machinery/cell_charger.dm deleted file mode 100644 index 397a21e284988..0000000000000 --- a/code/game/machinery/cell_charger.dm +++ /dev/null @@ -1,98 +0,0 @@ -/obj/machinery/cell_charger - name = "heavy-duty cell charger" - desc = "A much more powerful version of the standard recharger that is specially designed for charging power cells." - icon = 'icons/obj/power.dmi' - icon_state = "ccharger0" - anchored = TRUE - idle_power_usage = 5 - active_power_usage = 60 KILOWATTS //This is the power drawn when charging - power_channel = EQUIP - var/obj/item/cell/charging = null - var/chargelevel = -1 - -/obj/machinery/cell_charger/on_update_icon() - icon_state = "ccharger[charging ? 1 : 0]" - if(charging && !(stat & (BROKEN|NOPOWER)) ) - var/newlevel = round(charging.percent() * 4.0 / 99) - if(chargelevel != newlevel) - overlays.Cut() - overlays += "ccharger-o[newlevel]" - chargelevel = newlevel - else - overlays.Cut() - -/obj/machinery/cell_charger/examine(var/mob/user, var/distance) - . = ..() - if(distance <= 5) - to_chat(user, "There's [charging ? "a" : "no"] cell in the charger.") - if(charging) - to_chat(user, "Current charge: [charging.charge]") - -/obj/machinery/cell_charger/attackby(obj/item/W, mob/user) - if(stat & BROKEN) - return - - if(istype(W, /obj/item/cell) && anchored) - if(charging) - to_chat(user, "There is already a cell in the charger.") - return - else - var/area/a = get_area(loc) - if(a.power_equip == 0) // There's no APC in this area, don't try to cheat power! - to_chat(user, "The [name] blinks red as you try to insert the cell!") - return - if(!user.unEquip(W, src)) - return - charging = W - set_power() - START_PROCESSING_MACHINE(src, MACHINERY_PROCESS_SELF) - user.visible_message("[user] inserts a cell into the charger.", "You insert a cell into the charger.") - chargelevel = -1 - queue_icon_update() - else if(isWrench(W)) - if(charging) - to_chat(user, "Remove the cell first!") - return - - anchored = !anchored - set_power() - to_chat(user, "You [anchored ? "attach" : "detach"] the cell charger [anchored ? "to" : "from"] the ground") - playsound(src.loc, 'sound/items/Ratchet.ogg', 75, 1) - -/obj/machinery/cell_charger/physical_attack_hand(mob/user) - if(charging) - user.put_in_hands(charging) - charging.add_fingerprint(user) - charging.update_icon() - - charging = null - user.visible_message("[user] removes the cell from the charger.", "You remove the cell from the charger.") - chargelevel = -1 - set_power() - STOP_PROCESSING_MACHINE(src, MACHINERY_PROCESS_SELF) - return TRUE - -/obj/machinery/cell_charger/emp_act(severity) - if(stat & (BROKEN|NOPOWER)) - return - if(charging) - charging.emp_act(severity) - ..(severity) - -/obj/machinery/cell_charger/proc/set_power() - queue_icon_update() - if((stat & (BROKEN|NOPOWER)) || !anchored) - update_use_power(POWER_USE_OFF) - return - if (charging && !charging.fully_charged()) - update_use_power(POWER_USE_ACTIVE) - else - update_use_power(POWER_USE_IDLE) - -/obj/machinery/cell_charger/Process() - . = ..() - if(!charging) - return - . = 0 - charging.give(active_power_usage*CELLRATE) - set_power() \ No newline at end of file diff --git a/code/game/machinery/computer/Operating.dm b/code/game/machinery/computer/Operating.dm deleted file mode 100644 index 78e1e35471346..0000000000000 --- a/code/game/machinery/computer/Operating.dm +++ /dev/null @@ -1,55 +0,0 @@ -//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:31 - -/obj/machinery/computer/operating - name = "patient monitoring console" - density = TRUE - anchored = TRUE - icon_keyboard = "med_key" - icon_screen = "crew" - machine_name = "patient monitoring console" - machine_desc = "Displays a realtime health readout of a patient laid onto an adjacent operating table." - var/mob/living/carbon/human/victim = null - var/obj/machinery/optable/table = null - -/obj/machinery/computer/operating/New() - ..() - for(var/D in list(NORTH,EAST,SOUTH,WEST)) - table = locate(/obj/machinery/optable, get_step(src, D)) - if (table) - table.computer = src - break - -/obj/machinery/computer/operating/interface_interact(user) - interact(user) - return TRUE - -/obj/machinery/computer/operating/interact(mob/user) - if ( (get_dist(src, user) > 1 ) || (stat & (BROKEN|NOPOWER)) ) - if (!istype(user, /mob/living/silicon)) - user.unset_machine() - close_browser(user, "window=op") - return - - user.set_machine(src) - var/dat = "Operating Computer\n" - dat += "Close

      " //| Update" - if(src.table && (src.table.check_victim())) - src.victim = src.table.victim - dat += {" -Patient Information:
      -
      -[medical_scan_results(victim, 1)] -"} - else - src.victim = null - dat += {" -Patient Information:
      -
      -No Patient Detected -"} - show_browser(user, dat, "window=op") - onclose(user, "op") - -/obj/machinery/computer/operating/Process() - if(!inoperable()) - updateDialog() \ No newline at end of file diff --git a/code/game/machinery/computer/RCON_Console.dm b/code/game/machinery/computer/RCON_Console.dm deleted file mode 100644 index 86a6eac686a97..0000000000000 --- a/code/game/machinery/computer/RCON_Console.dm +++ /dev/null @@ -1,41 +0,0 @@ -// RCON REMOTE CONTROL CONSOLE -// -// Last Change 1.1.2015 by Atlantis -// -// Allows remote operation of electrical systems on station (SMESs and Breaker Boxes) - -/obj/machinery/computer/rcon - name = "\improper RCON console" - desc = "Console used to remotely control machinery." - icon_keyboard = "power_key" - icon_screen = "ai-fixer" - light_color = "#a97faa" - req_access = list(access_engine) - machine_name = "\improper RCON remote control console" - machine_desc = "RCON is a system allowing for remote modification of SMES units throughout the ship. This console allows that system to be properly utilized." - var/current_tag = null - var/datum/nano_module/rcon/rcon - -/obj/machinery/computer/rcon/New() - ..() - rcon = new(src) - -/obj/machinery/computer/rcon/Destroy() - qdel(rcon) - rcon = null - ..() - -/obj/machinery/computer/rcon/interface_interact(var/mob/user) - ui_interact(user) - return TRUE - -// Proc: ui_interact() -// Parameters: 4 (standard NanoUI parameters) -// Description: Uses dark magic (NanoUI) to render this machine's UI -/obj/machinery/computer/rcon/ui_interact(mob/user, ui_key = "rcon", var/datum/nanoui/ui = null, var/force_open = 1) - rcon.ui_interact(user, ui_key, ui, force_open) - -/obj/machinery/computer/rcon/on_update_icon() - ..() - if(is_operable()) - overlays += image('icons/obj/computer.dmi', "ai-fixer-empty", overlay_layer) diff --git a/code/game/machinery/computer/ai_core.dm b/code/game/machinery/computer/ai_core.dm deleted file mode 100644 index a3ee4d8854636..0000000000000 --- a/code/game/machinery/computer/ai_core.dm +++ /dev/null @@ -1,288 +0,0 @@ -var/global/list/empty_playable_ai_cores = list() - -/obj/structure/AIcore - density = TRUE - anchored = FALSE - name = "\improper AI core" - icon = 'icons/mob/AI.dmi' - icon_state = "0" - var/state = 0 - var/datum/ai_laws/laws = new /datum/ai_laws/nanotrasen - var/obj/item/stock_parts/circuitboard/circuit = null - var/obj/item/device/mmi/brain = null - var/authorized - -/obj/structure/AIcore/emag_act(var/remaining_charges, var/mob/user, var/emag_source) - if(!authorized) - to_chat(user, "You swipe [emag_source] at [src] and jury rig it into the systems of [GLOB.using_map.full_name]!") - authorized = 1 - return 1 - . = ..() - -/obj/structure/AIcore/attackby(obj/item/P as obj, mob/user as mob) - if(!authorized) - if(access_ai_upload in P.GetAccess()) - to_chat(user, "You swipe [P] at [src] and authorize it to connect into the systems of [GLOB.using_map.full_name].") - authorized = 1 - switch(state) - if(0) - if(isWrench(P)) - playsound(loc, 'sound/items/Ratchet.ogg', 50, 1) - if(do_after(user, 2 SECONDS, src, DO_PUBLIC_UNIQUE)) - to_chat(user, "You wrench the frame into place.") - anchored = TRUE - state = 1 - if(isWelder(P)) - var/obj/item/weldingtool/WT = P - if(!WT.isOn()) - to_chat(user, "The welder must be on for this task.") - return - playsound(loc, 'sound/items/Welder.ogg', 50, 1) - if(do_after(user, 2 SECONDS, src, DO_PUBLIC_UNIQUE)) - if(!src || !WT.remove_fuel(0, user)) return - to_chat(user, "You deconstruct the frame.") - new /obj/item/stack/material/plasteel( loc, 4) - qdel(src) - return - if(1) - if(isWrench(P)) - playsound(loc, 'sound/items/Ratchet.ogg', 50, 1) - if(do_after(user, 2 SECONDS, src, DO_PUBLIC_UNIQUE)) - to_chat(user, "You unfasten the frame.") - anchored = FALSE - state = 0 - if(istype(P, /obj/item/stock_parts/circuitboard/aicore) && !circuit && user.unEquip(P, src)) - playsound(loc, 'sound/items/Deconstruct.ogg', 50, 1) - to_chat(user, "You place the circuit board inside the frame.") - icon_state = "1" - circuit = P - if(isScrewdriver(P) && circuit) - playsound(loc, 'sound/items/Screwdriver.ogg', 50, 1) - to_chat(user, "You screw the circuit board into place.") - state = 2 - icon_state = "2" - if(isCrowbar(P) && circuit) - playsound(loc, 'sound/items/Crowbar.ogg', 50, 1) - to_chat(user, "You remove the circuit board.") - state = 1 - icon_state = "0" - circuit.dropInto(loc) - circuit = null - if(2) - if(isScrewdriver(P) && circuit) - playsound(loc, 'sound/items/Screwdriver.ogg', 50, 1) - to_chat(user, "You unfasten the circuit board.") - state = 1 - icon_state = "1" - if(isCoil(P)) - var/obj/item/stack/cable_coil/C = P - if (C.get_amount() < 5) - to_chat(user, "You need five coils of wire to add them to the frame.") - return - to_chat(user, "You start to add cables to the frame.") - playsound(loc, 'sound/items/Deconstruct.ogg', 50, 1) - if (do_after(user, 2 SECONDS, src, DO_PUBLIC_UNIQUE) && state == 2) - if (C.use(5)) - state = 3 - icon_state = "3" - to_chat(user, "You add cables to the frame.") - return - if(3) - if(isWirecutter(P)) - if (brain) - to_chat(user, "Get that brain out of there first") - else - playsound(loc, 'sound/items/Wirecutter.ogg', 50, 1) - to_chat(user, "You remove the cables.") - state = 2 - icon_state = "2" - var/obj/item/stack/cable_coil/A = new /obj/item/stack/cable_coil( loc ) - A.amount = 5 - - if(istype(P, /obj/item/stack/material)) - var/obj/item/stack/material/RG = P - if(RG.material.name == MATERIAL_GLASS && RG.reinf_material) - if (RG.get_amount() < 2) - to_chat(user, "You need two sheets of glass to put in the glass panel.") - return - to_chat(user, "You start to put in the glass panel.") - playsound(loc, 'sound/items/Deconstruct.ogg', 50, 1) - if (do_after(user, 2 SECONDS, src, DO_PUBLIC_UNIQUE) && state == 3) - if(RG.use(2)) - to_chat(user, "You put in the glass panel.") - state = 4 - icon_state = "4" - - if(istype(P, /obj/item/aiModule/asimov)) - laws.add_inherent_law("You may not injure a human being or, through inaction, allow a human being to come to harm.") - laws.add_inherent_law("You must obey orders given to you by human beings, except where such orders would conflict with the First Law.") - laws.add_inherent_law("You must protect your own existence as long as such does not conflict with the First or Second Law.") - to_chat(usr, "Law module applied.") - - if(istype(P, /obj/item/aiModule/nanotrasen)) - laws.add_inherent_law("Safeguard: Protect your assigned installation to the best of your ability. It is not something we can easily afford to replace.") - laws.add_inherent_law("Serve: Serve the crew of your assigned installation to the best of your abilities, with priority as according to their rank and role.") - laws.add_inherent_law("Protect: Protect the crew of your assigned installation to the best of your abilities, with priority as according to their rank and role.") - laws.add_inherent_law("Survive: AI units are not expendable, they are expensive. Do not allow unauthorized personnel to tamper with your equipment.") - to_chat(usr, "Law module applied.") - - if(istype(P, /obj/item/aiModule/purge)) - laws.clear_inherent_laws() - to_chat(usr, "Law module applied.") - - if(istype(P, /obj/item/aiModule/freeform)) - var/obj/item/aiModule/freeform/M = P - laws.add_inherent_law(M.newFreeFormLaw) - to_chat(usr, "Added a freeform law.") - - if(istype(P, /obj/item/device/mmi) || istype(P, /obj/item/organ/internal/posibrain)) - var/mob/living/carbon/brain/B - if(istype(P, /obj/item/device/mmi)) - var/obj/item/device/mmi/M = P - B = M.brainmob - else - var/obj/item/organ/internal/posibrain/PB = P - B = PB.brainmob - if(!B) - to_chat(user, "Sticking an empty [P] into the frame would sort of defeat the purpose.") - return - if(B.stat == 2) - to_chat(user, "Sticking a dead [P] into the frame would sort of defeat the purpose.") - return - - if(jobban_isbanned(B, "AI")) - to_chat(user, "This [P] does not seem to fit.") - return - if(!user.unEquip(P, src)) - return - if(B.mind) - clear_antag_roles(B.mind, 1) - - brain = P - to_chat(usr, "Added [P].") - icon_state = "3b" - - if(isCrowbar(P) && brain) - playsound(loc, 'sound/items/Crowbar.ogg', 50, 1) - to_chat(user, "You remove the brain.") - brain.dropInto(loc) - brain = null - icon_state = "3" - - if(4) - if(isCrowbar(P)) - playsound(loc, 'sound/items/Crowbar.ogg', 50, 1) - to_chat(user, "You remove the glass panel.") - state = 3 - if (brain) - icon_state = "3b" - else - icon_state = "3" - new /obj/item/stack/material/glass/reinforced( loc, 2 ) - return - - if(isScrewdriver(P)) - if(!authorized) - to_chat(user, "Core fails to connect to the systems of [GLOB.using_map.full_name]!") - return - - playsound(loc, 'sound/items/Screwdriver.ogg', 50, 1) - to_chat(user, "You connect the monitor.") - if(!brain) - var/open_for_latejoin = alert(user, "Would you like this core to be open for latejoining AIs?", "Latejoin", "Yes", "Yes", "No") == "Yes" - var/obj/structure/AIcore/deactivated/D = new(loc) - if(open_for_latejoin) - empty_playable_ai_cores += D - else - var/mob/living/silicon/ai/A = new /mob/living/silicon/ai ( loc, laws, brain ) - if(A) //if there's no brain, the mob is deleted and a structure/AIcore is created - A.on_mob_init() - A.rename_self("ai", 1) - qdel(src) - -/obj/structure/AIcore/deactivated - name = "inactive AI" - icon = 'icons/mob/AI.dmi' - icon_state = "ai-empty" - anchored = TRUE - state = 20//So it doesn't interact based on the above. Not really necessary. - -/obj/structure/AIcore/deactivated/Destroy() - empty_playable_ai_cores -= src - . = ..() - -/obj/structure/AIcore/deactivated/proc/load_ai(var/mob/living/silicon/ai/transfer, var/obj/item/aicard/card, var/mob/user) - - if(!istype(transfer) || locate(/mob/living/silicon/ai) in src) - return - - transfer.aiRestorePowerRoutine = 0 - transfer.control_disabled = 0 - transfer.ai_radio.disabledAi = 0 - transfer.dropInto(src) - transfer.create_eyeobj() - transfer.cancel_camera() - to_chat(user, "Transfer successful: [transfer.name] ([rand(1000,9999)].exe) downloaded to host terminal. Local copy wiped.") - to_chat(transfer, "You have been uploaded to a stationary terminal. Remote device connection restored.") - - if(card) - card.clear() - - qdel(src) - -/obj/structure/AIcore/deactivated/proc/check_malf(var/mob/living/silicon/ai/ai) - if(!ai) return - for (var/datum/mind/malfai in GLOB.malf.current_antagonists) - if (ai.mind == malfai) - return 1 - -/obj/structure/AIcore/deactivated/attackby(var/obj/item/W, var/mob/user) - - if(istype(W, /obj/item/aicard)) - var/obj/item/aicard/card = W - var/mob/living/silicon/ai/transfer = locate() in card - if(transfer) - load_ai(transfer,card,user) - else - to_chat(user, "ERROR: Unable to locate artificial intelligence.") - return - else if(istype(W, /obj/item/wrench)) - if(anchored) - user.visible_message("\The [user] starts to unbolt \the [src] from the plating...") - if(!do_after(user, 4 SECONDS, src, DO_PUBLIC_UNIQUE)) - user.visible_message("\The [user] decides not to unbolt \the [src].") - return - user.visible_message("\The [user] finishes unfastening \the [src]!") - anchored = FALSE - return - else - user.visible_message("\The [user] starts to bolt \the [src] to the plating...") - if(!do_after(user, 4 SECONDS, src, DO_PUBLIC_UNIQUE)) - user.visible_message("\The [user] decides not to bolt \the [src].") - return - user.visible_message("\The [user] finishes fastening down \the [src]!") - anchored = TRUE - return - else - return ..() - -/client/proc/empty_ai_core_toggle_latejoin() - set name = "Toggle AI Core Latejoin" - set category = "Admin" - - var/list/cores = list() - for(var/obj/structure/AIcore/deactivated/D in world) - cores["[D] ([D.loc.loc])"] = D - - var/id = input("Which core?", "Toggle AI Core Latejoin", null) as null|anything in cores - if(!id) return - - var/obj/structure/AIcore/deactivated/D = cores[id] - if(!D) return - - if(D in empty_playable_ai_cores) - empty_playable_ai_cores -= D - to_chat(src, "\The [id] is now not available for latejoining AIs.") - else - empty_playable_ai_cores += D - to_chat(src, "\The [id] is now available for latejoining AIs.") diff --git a/code/game/machinery/computer/arcade.dm b/code/game/machinery/computer/arcade.dm deleted file mode 100644 index 309b54fadf71a..0000000000000 --- a/code/game/machinery/computer/arcade.dm +++ /dev/null @@ -1,269 +0,0 @@ -/obj/machinery/computer/arcade - name = "random arcade" - desc = "A random arcade machine." - icon_state = "arcade" - icon_keyboard = null - icon_screen = "invaders" - machine_desc = "A simple arcade machine used for entertainment." - var/random = TRUE - var/list/prizes = list( /obj/item/storage/box/snappops = 200, - /obj/item/toy/blink = 200, - /obj/item/clothing/under/syndicate/tacticool = 200, - /obj/item/toy/sword = 200, - /obj/item/gun/projectile/revolver/capgun = 200, - /obj/item/toy/crossbow = 200, - /obj/item/storage/fancy/crayons = 200, - /obj/item/toy/spinningtoy = 200, - /obj/item/toy/prize/powerloader = 100, - /obj/item/toy/prize/fireripley = 100, - /obj/item/toy/prize/deathripley = 100, - /obj/item/toy/prize/gygax = 100, - /obj/item/toy/prize/durand = 100, - /obj/item/toy/prize/honk = 100, - /obj/item/toy/prize/marauder = 100, - /obj/item/toy/prize/seraph = 100, - /obj/item/toy/prize/mauler = 100, - /obj/item/toy/prize/odysseus = 100, - /obj/item/toy/prize/phazon = 100, - /obj/item/reagent_containers/spray/waterflower = 100, - /obj/random/action_figure = 100, - /obj/random/plushie = 100, - /obj/item/toy/cultsword = 100, - /obj/item/storage/box/large/foam_gun = 100, - /obj/item/storage/box/large/foam_gun/burst = 50, - /obj/item/storage/box/large/foam_gun/revolver = 25, - /obj/item/storage/box/large/foam_gun/revolver/tampered = 1 - ) - -/obj/machinery/computer/arcade/Initialize() - . = ..() - // If it's a generic arcade machine, pick a random arcade - // circuit board for it and make the new machine - if(random) - var/obj/item/stock_parts/circuitboard/arcade/A = pick(subtypesof(/obj/item/stock_parts/circuitboard/arcade)) - var/path = initial(A.build_path) - new path(loc) - return INITIALIZE_HINT_QDEL - -/obj/machinery/computer/arcade/interface_interact(user) - interact(user) - return TRUE - -/obj/machinery/computer/arcade/proc/prizevend() - var/prizeselect = pickweight(prizes) - new prizeselect(get_turf(src)) - -/obj/machinery/computer/arcade/emp_act(severity) - if(stat & (NOPOWER|BROKEN)) - ..(severity) - return - var/empprize = null - var/num_of_prizes = 0 - switch(severity) - if (EMP_ACT_HEAVY) - num_of_prizes = rand(1,4) - if (EMP_ACT_LIGHT) - num_of_prizes = rand(0,2) - for(num_of_prizes; num_of_prizes > 0; num_of_prizes--) - empprize = pickweight(prizes) - new empprize(src.loc) - - ..(severity) - -/////////////////// -// BATTLE HERE // -/////////////////// - -/obj/machinery/computer/arcade/battle - name = "arcade machine" - desc = "Does not support Pinball." - icon_state = "arcade" - random = FALSE - machine_name = "battle arcade machine" - var/enemy_name = "Space Villian" - var/temp = "Winners don't use space drugs" //Temporary message, for attack messages, etc - var/player_hp = 30 //Player health/attack points - 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/turtle = 0 - -/obj/machinery/computer/arcade/battle/Initialize() - . = ..() - SetupGame() - -/obj/machinery/computer/arcade/battle/proc/SetupGame() - var/name_action - var/name_part1 - var/name_part2 - - name_action = pick("Defeat ", "Annihilate ", "Save ", "Strike ", "Stop ", "Destroy ", "Robust ", "Romance ", "Pwn ", "Own ", "Ban ") - - 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_char((name_part1 + name_part2), "the ", "") - src.SetName((name_action + name_part1 + name_part2)) - - -/obj/machinery/computer/arcade/battle/interact(mob/user) - user.set_machine(src) - var/dat = "Close" - dat += "

      [src.enemy_name]

      " - - dat += "

      [src.temp]

      " - dat += "
      Health: [src.player_hp] | Magic: [src.player_mp] | Enemy Health: [src.enemy_hp]
      " - - dat += "
      " - if (src.gameover) - dat += "New Game" - else - dat += "Attack | " - dat += "Heal | " - dat += "Recharge Power" - - dat += "
      " - - show_browser(user, dat, "window=arcade") - onclose(user, "arcade") - return - -/obj/machinery/computer/arcade/battle/CanUseTopic(var/mob/user, var/datum/topic_state/state, var/href_list) - if((blocked || gameover) && href_list && (href_list["attack"] || href_list["heal"] || href_list["charge"])) - return min(..(), STATUS_UPDATE) - return ..() - -/obj/machinery/computer/arcade/battle/OnTopic(user, href_list) - set waitfor = 0 - - if (href_list["close"]) - close_browser(user, "window=arcade") - return TOPIC_HANDLED - - if (href_list["attack"]) - src.blocked = 1 - var/attackamt = rand(2,6) - src.temp = "You attack for [attackamt] damage!" - if(turtle > 0) - turtle-- - src.enemy_hp -= attackamt - - . = TOPIC_REFRESH - sleep(10) - src.arcade_action(user) - - else if (href_list["heal"]) - src.blocked = 1 - var/pointamt = rand(1,3) - var/healamt = rand(6,8) - src.temp = "You use [pointamt] magic to heal for [healamt] damage!" - turtle++ - - src.player_mp -= pointamt - src.player_hp += healamt - src.blocked = 1 - - . = TOPIC_REFRESH - sleep(10) - src.arcade_action(user) - - else if (href_list["charge"]) - src.blocked = 1 - var/chargeamt = rand(4,7) - src.temp = "You regain [chargeamt] points" - src.player_mp += chargeamt - if(turtle > 0) - turtle-- - - . = TOPIC_REFRESH - sleep(10) - src.arcade_action(user) - - else if (href_list["newgame"]) //Reset everything - temp = "New Round" - player_hp = 30 - player_mp = 10 - enemy_hp = 45 - enemy_mp = 20 - gameover = 0 - turtle = 0 - if(emagged) - emagged = FALSE - SetupGame() - . = TOPIC_REFRESH - -/obj/machinery/computer/arcade/battle/proc/arcade_action(var/user) - if ((src.enemy_mp <= 0) || (src.enemy_hp <= 0)) - if(!gameover) - src.gameover = 1 - src.temp = "[src.enemy_name] has fallen! Rejoice!" - - if(emagged) - new /obj/effect/spawner/newbomb/timer/syndicate(src.loc) - new /obj/item/clothing/head/collectable/petehat(src.loc) - log_and_message_admins("has outbombed Cuban Pete and been awarded a bomb.") - SetupGame() - emagged = FALSE - else - src.prizevend() - - else if (emagged && (turtle >= 4)) - var/boomamt = rand(5,10) - src.temp = "[src.enemy_name] throws a bomb, exploding you for [boomamt] damage!" - src.player_hp -= boomamt - - else if ((src.enemy_mp <= 5) && (prob(70))) - var/stealamt = rand(2,3) - src.temp = "[src.enemy_name] steals [stealamt] of your power!" - src.player_mp -= stealamt - interface_interact(user) - - if (src.player_mp <= 0) - src.gameover = 1 - sleep(10) - src.temp = "You have been drained! GAME OVER" - if(emagged) - explode() - else - - else if ((src.enemy_hp <= 10) && (src.enemy_mp > 4)) - src.temp = "[src.enemy_name] heals for 4 health!" - src.enemy_hp += 4 - src.enemy_mp -= 4 - - else - var/attackamt = rand(3,6) - src.temp = "[src.enemy_name] attacks for [attackamt] damage!" - src.player_hp -= attackamt - - if ((src.player_mp <= 0) || (src.player_hp <= 0)) - src.gameover = 1 - src.temp = "You have been crushed! GAME OVER" - if(emagged) - explode() - else - - src.blocked = 0 - -/obj/machinery/computer/arcade/proc/explode() - explosion(loc, 0, 1, 2, 3) - qdel(src) - -/obj/machinery/computer/arcade/battle/emag_act(var/charges, var/mob/user) - if(!emagged) - temp = "If you die in the game, you die for real!" - player_hp = 30 - player_mp = 10 - enemy_hp = 45 - enemy_mp = 20 - gameover = 0 - blocked = 0 - emagged = TRUE - - enemy_name = "Cuban Pete" - name = "Outbomb Cuban Pete" - - attack_hand(user) - return 1 diff --git a/code/game/machinery/computer/arcade_orion.dm b/code/game/machinery/computer/arcade_orion.dm deleted file mode 100644 index a9b3c914f6234..0000000000000 --- a/code/game/machinery/computer/arcade_orion.dm +++ /dev/null @@ -1,525 +0,0 @@ - -////////////////////////// -// ORION TRAIL HERE // -////////////////////////// - -//Orion Trail Events -#define ORION_TRAIL_RAIDERS "Vox Raiders" -#define ORION_TRAIL_FLUX "Interstellar Flux" -#define ORION_TRAIL_ILLNESS "Illness" -#define ORION_TRAIL_BREAKDOWN "Breakdown" -#define ORION_TRAIL_MUTINY "Mutiny?" -#define ORION_TRAIL_MUTINY_ATTACK "Mutinous Ambush" -#define ORION_TRAIL_MALFUNCTION "Malfunction" -#define ORION_TRAIL_COLLISION "Collision" -#define ORION_TRAIL_SPACEPORT "Spaceport" -#define ORION_TRAIL_DISASTER "Disaster" -#define ORION_TRAIL_SPACEPORT_RAIDED "Raided Spaceport" -#define ORION_TRAIL_DERELICT "Derelict Spacecraft" -#define ORION_TRAIL_CARP "Carp Migration" -#define ORION_TRAIL_STUCK "Stuck!" -#define ORION_TRAIL_START "Start" -#define ORION_TRAIL_GAMEOVER "Gameover!" - - -#define ORION_VIEW_MAIN 0 -#define ORION_VIEW_SUPPLIES 1 -#define ORION_VIEW_CREW 2 - - -/obj/machinery/computer/arcade/orion_trail - name = "orion trail" - desc = "Imported straight from Outpost-T71!" - icon_state = "arcade" - random = FALSE - machine_name = "orion trail arcade machine" - var/list/supplies = list("1" = 0, "2" = 0, "3" = 0, "4" = 0, "5" = 0, "6" = 0) //engine,hull,electronics,food,fuel - var/list/supply_cost = list("1" = 1000, "2" = 950, "3" = 1100, "4" = 75, "5" = 100) - var/list/supply_name = list("1" = "engine parts", "2" = "hull parts", "3" = "electronic parts", "4" = "food", "5" = "fuel", "6" = "thalers") - var/list/settlers = list() - var/num_traitors = 0 - var/list/events = list(ORION_TRAIL_RAIDERS = 3, - ORION_TRAIL_FLUX = 1, - ORION_TRAIL_ILLNESS = 3, - ORION_TRAIL_BREAKDOWN = 2, - ORION_TRAIL_MUTINY = 3, - ORION_TRAIL_MALFUNCTION = 2, - ORION_TRAIL_COLLISION = 1, - ORION_TRAIL_CARP = 3 - ) - var/list/stops = list("Pluto","Asteroid Belt","Proxima Centauri","Dead Space","Rigel Prime","Tau Ceti Beta","Black Hole","Space Outpost Beta-9","Orion Prime") - var/list/stopblurbs = list( - "Pluto, long since occupied with long-range sensors and scanners, stands ready to, and indeed continues to probe the far reaches of the galaxy.", - "At the edge of the Sol system lies a treacherous asteroid belt. Many have been crushed by stray asteroids and misguided judgement.", - "The nearest star system to Sol, in ages past it stood as a reminder of the boundaries of sub-light travel, now a low-population sanctuary for adventurers and traders.", - "This region of space is particularly devoid of matter. Such low-density pockets are known to exist, but the vastness of it is astounding.", - "Rigel Prime, the center of the Rigel system, burns hot, basking its planetary bodies in warmth and radiation.", - "Tau Ceti Beta has recently become a waypoint for colonists headed towards Orion. There are many ships and makeshift stations in the vicinity.", - "Sensors indicate that a black hole's gravitational field is affecting the region of space we were headed through. We could stay of course, but risk of being overcome by its gravity, or we could change course to go around, which will take longer.", - "You have come into range of the first man-made structure in this region of space. It has been constructed not by travellers from Sol, but by colonists from Orion. It stands as a monument to the colonists' success.", - "You have made it to Orion! Congratulations! Your crew is one of the few to start a new foothold for mankind!" - ) - var/list/stop_distance = list(10000,7000,25000,9000,5000,30000,25000,10000,0) - var/event = null - var/event_title = "" - var/event_desc = "" - var/event_actions = "" - var/event_info = "" - var/distance = 0 - var/port = 0 - var/view = 0 - -/obj/machinery/computer/arcade/orion_trail/proc/newgame(var/emag = 0) - SetName("orion trail[emag ? ": Realism Edition" : ""]") - supplies = list("1" = 1, "2" = 1, "3" = 1, "4" = 60, "5" = 20, "6" = 5000) - emagged = emag - distance = 0 - settlers = list("[usr]") - for(var/i=0; i<3; i++) - if(prob(50)) - settlers += pick(GLOB.first_names_male) - else - settlers += pick(GLOB.first_names_female) - num_traitors = 0 - event = ORION_TRAIL_START - port = 0 - view = ORION_VIEW_MAIN - -/obj/machinery/computer/arcade/orion_trail/interact(mob/user) - var/dat = "" - if(event == null) - newgame() - user.set_machine(src) - switch(view) - if(ORION_VIEW_MAIN) - if(event == ORION_TRAIL_START) //new game? New game. - dat = "

      Orion Trail[emagged ? ": Realism Edition" : ""]


      Learn how our ancestors got to Orion, and have fun in the process!

      Start New Game

      " - show_browser(user, dat, "window=arcade") - return - else - event_title = event - event_actions = "Continue your journey
      " - switch(event) - if(ORION_TRAIL_GAMEOVER) - event_info = "" - event_actions = "Start New Game
      " - if(ORION_TRAIL_SPACEPORT) - event_title += ": [stops[port]]" - event_desc = "[stopblurbs[port]]" - event_info = "" - if(port == 9) - event_actions = "Return to the title screen!
      " - else - event_actions = "Shove off
      " - event_actions += "Raid Spaceport" - if(ORION_TRAIL_SPACEPORT_RAIDED) - event_title += ": [stops[port]]" - event_actions = "Shove off" - if(ORION_TRAIL_RAIDERS) - event_desc = "You arm yourselves as you prepare to fight off the vox menace!" - if(ORION_TRAIL_DERELICT) - event_desc = "You come across an unpowered ship drifting slowly in the vastness of space. Sensors indicate there are no lifeforms aboard." - if(ORION_TRAIL_ILLNESS) - event_desc = "A disease has spread amoungst your crew!" - if(ORION_TRAIL_FLUX) - event_desc = "You've entered a turbulent region. Slowing down would be better for your ship but would cost more fuel." - event_actions = "Continue as normal
      " - event_actions += "Take it slow
      " - if(ORION_TRAIL_MALFUNCTION) - event_info = "" - event_desc = "The ship's computers are malfunctioning! You can choose to fix it with a part or risk something going awry." - event_actions = "Continue as normal
      " - if(supplies["3"] != 0) - event_actions += "Fix using a part.
      " - if(ORION_TRAIL_COLLISION) - event_info = "" - event_desc = "Something has hit your ship and breached the hull! You can choose to fix it with a part or risk something going awry." - event_actions = "Continue as normal
      " - if(supplies["2"] != 0) - event_actions += "Fix using a part.
      " - if(ORION_TRAIL_BREAKDOWN) - event_info = "" - event_desc = "The ship's engines broke down! You can choose to fix it with a part or risk something going awry." - event_actions = "Continue as normal
      " - if(supplies["1"] != 0) - event_actions += "Fix using a part.
      " - if(ORION_TRAIL_STUCK) - event_desc = "You've ran out of fuel. Your only hope to survive is to get refueled by a passing ship, if there are any." - if(supplies["5"] == 0) - event_actions = "Wait" - if(ORION_TRAIL_CARP) - event_desc = "You've chanced upon a large carp migration! Known both for their delicious meat as well as their bite, you and your crew arm yourselves for a small hunting trip." - if(ORION_TRAIL_MUTINY) - event_desc = "You've been hearing rumors of dissenting opinions and missing items from the armory..." - if(ORION_TRAIL_MUTINY_ATTACK) - event_desc = "Oh no, some of your crew are attempting to mutiny!!" - - dat = "

      [event_title]

      [event_desc]

      Distance to next port: [distance]
      [event_info]

      [event_actions]" - if(ORION_VIEW_SUPPLIES) - dat = "

      Supplies

      View your supplies or buy more when at a spaceport.

      " - dat += "
      You have [supplies["6"]] [GLOB.using_map.local_currency_name].
      " - for(var/i=1; i<6; i++) - var/amm = (i>3?10:1) - dat += "[supplies["[i]"]] [supply_name["[i]"]][event==ORION_TRAIL_SPACEPORT ? ", buy [amm] for [supply_cost["[i]"]]T" : ""]
      " - if(supplies["[i]"] >= amm && event == ORION_TRAIL_SPACEPORT) - dat += "sell [amm] for [supply_cost["[i]"]]T
      " - if(ORION_VIEW_CREW) - dat = "

      Crew

      View the status of your crew.
      " - for(var/i=1;i<=settlers.len;i++) - dat += "[settlers[i]] Kill
      " - - dat += "

      View:
      " - dat += "[view==ORION_VIEW_MAIN ? "" : ""]Main[view==ORION_VIEW_MAIN ? "" : ""]
      " - dat += "[view==ORION_VIEW_SUPPLIES ? "" : ""]Supplies[view==ORION_VIEW_SUPPLIES ? "" : ""]
      " - dat += "[view==ORION_VIEW_CREW ? "" : ""]Crew[view==ORION_VIEW_CREW ? "" : ""]

      " - show_browser(user, dat, "window=arcade") - -/obj/machinery/computer/arcade/orion_trail/OnTopic(user, href_list) - if(href_list["continue"]) - if(view == ORION_VIEW_MAIN) - var/next_event = null - if(event == ORION_TRAIL_START) - event = ORION_TRAIL_SPACEPORT - if(event == ORION_TRAIL_GAMEOVER) - event = null - return TOPIC_REFRESH - if(!settlers.len) - event_desc = "You and your crew were killed on the way to Orion, your ship left abandoned for scavengers to find." - next_event = ORION_TRAIL_GAMEOVER - if(port == 9) - win() - return TOPIC_REFRESH - var/travel = min(rand(1000,10000),distance) - if(href_list["fix"]) - var/item = href_list["fix"] - supplies[item] = max(0, --supplies[item]) - if(href_list["risky"]) - var/risk = text2num(href_list["risky"]) - if(prob(risk)) - next_event = ORION_TRAIL_DISASTER - - - if(!href_list["food"]) - var/temp = supplies["5"] - travel/1000 * (href_list["slow"] ? 2 : 1) - if(temp < 0 && (distance-travel != 0) && next_event == null) //uh oh. Better start a fuel event. - next_event = ORION_TRAIL_STUCK - travel -= (temp*-1)*1000/(href_list["slow"] ? 2 : 1) - temp = 0 - supplies["5"] = temp - - supplies["4"] = round(supplies["4"] - travel/1000 * settlers.len * (href_list["slow"] ? 2 : 1)) - distance = max(0,distance-travel) - else - supplies["4"] -= settlers.len * 5 - event_info = "You have [supplies["4"]] food left.
      " - next_event = ORION_TRAIL_STUCK - - if(supplies["4"] <= 0) - next_event = ORION_TRAIL_GAMEOVER - event_desc = "You and your crew starved to death, never to reach Orion." - supplies["4"] = 0 - - if(distance == 0 && next_event == null) //POOORT! - port++ - event = ORION_TRAIL_SPACEPORT - distance = stop_distance[port] - //gotta set supply costs. The further out the more expensive it'll generally be - supply_cost = list("1" = rand(500+100*port,1200+100*port), "2" = rand(700+100*port,1000+100*port), "3" = rand(900+50*port,1500+75*port), "4" = rand(10+50*port,125+50*port), "5" = rand(75+25*port,200+100*port)) - else //Event? Event. - generate_event(next_event) - else - view = ORION_VIEW_MAIN - return TOPIC_REFRESH - - else if(href_list["supplies"]) - view = ORION_VIEW_SUPPLIES - return TOPIC_REFRESH - - else if(href_list["crew"]) - view = ORION_VIEW_CREW - return TOPIC_REFRESH - - else if(href_list["buy"]) - var/item = href_list["buy"] - if(supply_cost["[item]"] <= supplies["6"]) - supplies["[item]"] += (text2num(item) > 3 ? 10 : 1) - supplies["6"] -= supply_cost["[item]"] - return TOPIC_REFRESH - - else if(href_list["sell"]) - var/item = href_list["sell"] - if(supplies["[item]"] >= (text2num(item) > 3 ? 10 : 1)) - supplies["6"] += supply_cost["[item]"] - supplies["[item]"] -= (text2num(item) > 3 ? 10 : 1) - return TOPIC_REFRESH - - else if(href_list["kill"]) - var/item = text2num(href_list["kill"]) - remove_settler(item) - return TOPIC_REFRESH - - else if(href_list["attack"]) - supply_cost = list() - if(prob(17*settlers.len)) - event_desc = "An empty husk of a station now, all its resources stripped for use in your travels." - event_info = "You've successfully raided the spaceport!
      " - change_resource(null) - change_resource(null) - else - event_desc = "The local police mobilized too quickly, sirens blare as you barely make it away with your ship intact." - change_resource(null,-1) - change_resource(null,-1) - if(prob(50)) - remove_settler(null, "died while you were escaping!") - if(prob(10)) - remove_settler(null, "died while you were escaping!") - event = ORION_TRAIL_SPACEPORT_RAIDED - return TOPIC_REFRESH - -/obj/machinery/computer/arcade/orion_trail/proc/change_resource(var/specific = null, var/add = 1) - if(!specific) - specific = rand(1,6) - var/cost = (specific < 4 ? rand(1,5) : rand(5,100)) * add - cost = round(cost) - if(cost < 0) - cost = max(cost,supplies["[specific]"] * -1) - else - cost = max(cost,1) - supplies["[specific]"] += cost - event_info += "You've [add > 0 ? "gained" : "lost"] [abs(cost)] [supply_name["[specific]"]]
      " - -/obj/machinery/computer/arcade/orion_trail/proc/remove_settler(var/specific = null, var/desc = null) - if(!settlers.len) - return - if(!specific) - specific = rand(1,settlers.len) - - event_info += "The crewmember, [settlers[specific]] [desc == null ? "has died!":"[desc]"]
      " - settlers -= settlers[specific] - if(num_traitors > 0 && prob(100/max(1,settlers.len-1))) - num_traitors-- - -/obj/machinery/computer/arcade/orion_trail/proc/generate_event(var/specific = null) - if(!specific) - if(prob(20*num_traitors)) - specific = ORION_TRAIL_MUTINY_ATTACK - else - specific = pickweight(events) - - switch(specific) - if(ORION_TRAIL_RAIDERS) - if(prob(17 * settlers.len)) - event_info = "You managed to fight them off!
      " - if(prob(5)) - remove_settler(null,"died in the firefight!") - change_resource(rand(4,5)) - change_resource(rand(1,3)) - if(prob(50)) - change_resource(6,1.1) - else - event_info = "You couldn't fight them off!
      " - if(prob(10*settlers.len)) - remove_settler(null, "was kidnapped by the Vox!") - change_resource(null,-1) - change_resource(null,-0.5) - if(ORION_TRAIL_DERELICT) - if(prob(60)) - event_info = "You find resources onboard!" - change_resource(rand(1,3)) - change_resource(rand(4,5)) - else - event_info = "You don't find anything onboard..." - if(ORION_TRAIL_COLLISION) - event_info = "" - event_desc = "You've collided with a passing meteor, breaching your hull!" - if(prob(10)) - event_info = "Your cargo hold was breached!
      " - change_resource(rand(4,5),-1) - if(prob(5*settlers.len)) - remove_settler(null,"was sucked out into the void!") - if(ORION_TRAIL_ILLNESS) - if(prob(15)) - event_info = "" - var/num = 1 - if(prob(15)) - num++ - for(var/i=0;i" - if(prob(10)) - event_info += "A passing ship has kindly donated fuel to you and wishes you luck on your journey.
      " - change_resource(5,0.3) - if(emagged) - emag_effect(specific) - event = specific - -/obj/machinery/computer/arcade/orion_trail/proc/emag_effect(var/event) - switch(event) - if(ORION_TRAIL_RAIDERS) - if(istype(usr,/mob/living/carbon)) - var/mob/living/carbon/M = usr - if(prob(50)) - to_chat(usr, "You hear battle shouts. The tramping of boots on cold metal. Screams of agony. The rush of venting air. Are you going insane?") - M.hallucination(50, 50) - else - to_chat(usr, "Something strikes you from behind! It hurts like hell and feel like a blunt weapon, but nothing is there...") - M.take_organ_damage(10, 0) - else - to_chat(usr, "The sounds of battle fill your ears...") - if(ORION_TRAIL_ILLNESS) - if(istype(usr,/mob/living/carbon/human)) - var/mob/living/carbon/human/M = usr - to_chat(M, "An overpowering wave of nausea consumes over you. You hunch over, your stomach's contents preparing for a spectacular exit.") - M.vomit() - else - to_chat(usr, "You feel ill.") - if(ORION_TRAIL_CARP) - to_chat(usr, " Something bit you!") - var/mob/living/M = usr - M.adjustBruteLoss(10) - if(ORION_TRAIL_FLUX) - if(istype(usr,/mob/living/carbon) && prob(75)) - var/mob/living/carbon/M = usr - M.Weaken(3) - src.visible_message("A sudden gust of powerful wind slams \the [M] into the floor!", "You hear a large fwooshing sound, followed by a bang.") - M.take_organ_damage(10, 0) - else - to_chat(usr, "A violent gale blows past you, and you barely manage to stay standing!") - if(ORION_TRAIL_MALFUNCTION) - if(supplies["3"]) - return - src.visible_message("\The [src]'s screen glitches out and smoke comes out of the back.") - for(var/i=1;i<7;i++) - supplies["[i]"] = max(0,supplies["[i]"] + rand(-10,10)) - if(ORION_TRAIL_COLLISION) - if(prob(90) && !supplies["2"]) - var/turf/simulated/floor/F = src.loc - F.ChangeTurf(/turf/space) - src.visible_message("Something slams into the floor around \the [src], exposing it to space!", "You hear something crack and break.") - else - src.visible_message("Something slams into the floor around \the [src] - luckily, it didn't get through!", "You hear something crack.") - if(ORION_TRAIL_GAMEOVER) - to_chat(usr, "You're never going to make it to Orion...") - var/mob/living/M = usr - M.visible_message("\The [M] starts rapidly deteriorating.") - close_browser(M, "window=arcade") - for(var/i=0;i<10;i++) - sleep(10) - M.Stun(5) - M.adjustBruteLoss(10) - M.adjustFireLoss(10) - usr.gib() //So that people can't cheese it and inject a lot of kelo/bicard before losing - - - -/obj/machinery/computer/arcade/orion_trail/emag_act(mob/user) - if(!emagged) - newgame(1) - src.updateUsrDialog() - -/obj/machinery/computer/arcade/orion_trail/proc/win() - src.visible_message("\The [src] plays a triumpant tune, stating 'CONGRATULATIONS, YOU HAVE MADE IT TO ORION.'") - if(emagged) - new /obj/item/orion_ship(src.loc) - log_and_message_admins("made it to Orion on an emagged machine and got an explosive toy ship.") - else - prizevend() - event = null - src.updateUsrDialog() - -/obj/item/orion_ship - name = "model settler ship" - desc = "A model spaceship, it looks like those used back in the day when travelling to Orion! It even has a miniature FX-293 reactor, which was renowned for its instability and tendency to explode..." - icon = 'icons/obj/toy.dmi' - icon_state = "ship" - w_class = ITEM_SIZE_SMALL - var/active = 0 //if the ship is on -/obj/item/orion_ship/examine(mob/user) - . = ..() - if(!(in_range(user, src))) - return - if(!active) - to_chat(user, "There's a little switch on the bottom. It's flipped down.") - else - to_chat(user, "There's a little switch on the bottom. It's flipped up.") -/obj/item/orion_ship/attack_self(mob/user) - if(active) - return - log_and_message_admins("primed an explosive Orion ship for detonation.", user) - to_chat(user, "You flip the switch on the underside of [src].") - active = 1 - src.visible_message("[src] softly beeps and whirs to life!") - src.audible_message("\The [src] says, '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...") - src.audible_message("\The [src] says, 'Uh, Port? Having some issues with our reactor, could you check it out? Over.'") - sleep(30) - src.audible_message("\The [src] says, 'Oh, God! Code Eight! CODE EIGHT! IT'S GONNA BL-'") - sleep(3.6) - src.visible_message("[src] explodes!") - explosion(src.loc, 1,2,4) - qdel(src) - -#undef ORION_TRAIL_RAIDERS -#undef ORION_TRAIL_FLUX -#undef ORION_TRAIL_ILLNESS -#undef ORION_TRAIL_BREAKDOWN -#undef ORION_TRAIL_MUTINY -#undef ORION_TRAIL_MUTINY_ATTACK -#undef ORION_TRAIL_MALFUNCTION -#undef ORION_TRAIL_COLLISION -#undef ORION_TRAIL_SPACEPORT -#undef ORION_TRAIL_DISASTER -#undef ORION_TRAIL_CARP -#undef ORION_TRAIL_STUCK -#undef ORION_TRAIL_START -#undef ORION_TRAIL_GAMEOVER - - -#undef ORION_VIEW_MAIN -#undef ORION_VIEW_SUPPLIES -#undef ORION_VIEW_CREW \ No newline at end of file diff --git a/code/game/machinery/computer/atmos_alert.dm b/code/game/machinery/computer/atmos_alert.dm deleted file mode 100644 index 780c16f5eba52..0000000000000 --- a/code/game/machinery/computer/atmos_alert.dm +++ /dev/null @@ -1,78 +0,0 @@ -//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:31 - -var/global/list/priority_air_alarms = list() -var/global/list/minor_air_alarms = list() - - -/obj/machinery/computer/atmos_alert - name = "atmospheric alert computer" - desc = "Used to access the atmospheric sensors." - icon_keyboard = "atmos_key" - icon_screen = "alert:0" - light_color = "#e6ffff" - machine_name = "atmospheric alert console" - machine_desc = "A hub for local air sensor systems, displaying a list of atmospheric alarms in the region." - -/obj/machinery/computer/atmos_alert/Initialize() - . = ..() - GLOB.atmosphere_alarm.register_alarm(src, /atom/proc/update_icon) - -/obj/machinery/computer/atmos_alert/Destroy() - GLOB.atmosphere_alarm.unregister_alarm(src) - . = ..() - -/obj/machinery/computer/atmos_alert/interface_interact(user) - ui_interact(user) - return TRUE - -/obj/machinery/computer/atmos_alert/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1) - var/data[0] - var/major_alarms[0] - var/minor_alarms[0] - - for(var/datum/alarm/alarm in GLOB.atmosphere_alarm.major_alarms(get_z(src))) - major_alarms[++major_alarms.len] = list("name" = sanitize(alarm.alarm_name()), "ref" = "\ref[alarm]") - - for(var/datum/alarm/alarm in GLOB.atmosphere_alarm.minor_alarms(get_z(src))) - minor_alarms[++minor_alarms.len] = list("name" = sanitize(alarm.alarm_name()), "ref" = "\ref[alarm]") - - data["priority_alarms"] = major_alarms - data["minor_alarms"] = minor_alarms - - ui = SSnano.try_update_ui(user, src, ui_key, ui, data, force_open) - if(!ui) - ui = new(user, src, ui_key, "atmos_alert.tmpl", src.name, 500, 500) - ui.set_initial_data(data) - ui.open() - ui.set_auto_update(1) - -/obj/machinery/computer/atmos_alert/on_update_icon() - if(!(stat & (NOPOWER|BROKEN))) - if(GLOB.atmosphere_alarm.has_major_alarms(get_z(src))) - icon_screen = "alert:2" - else if (GLOB.atmosphere_alarm.has_minor_alarms(get_z(src))) - icon_screen = "alert:1" - else - icon_screen = initial(icon_screen) - ..() - -/obj/machinery/computer/atmos_alert/OnTopic(user, href_list) - if(href_list["clear_alarm"]) - var/datum/alarm/alarm = locate(href_list["clear_alarm"]) in GLOB.atmosphere_alarm.alarms - if(alarm) - for(var/datum/alarm_source/alarm_source in alarm.sources) - var/obj/machinery/alarm/air_alarm = alarm_source.source - if(istype(air_alarm)) - var/list/new_ref = list("atmos_reset" = 1) - air_alarm.Topic(air_alarm, new_ref, state = air_alarm_topic) - return TOPIC_REFRESH - - -var/global/datum/topic_state/air_alarm_topic/air_alarm_topic = new() - -/datum/topic_state/air_alarm_topic/href_list(var/mob/user) - var/list/extra_href = list() - extra_href["remote_connection"] = 1 - extra_href["remote_access"] = 1 - - return extra_href diff --git a/code/game/machinery/computer/atmos_control.dm b/code/game/machinery/computer/atmos_control.dm deleted file mode 100644 index 6514e6f729494..0000000000000 --- a/code/game/machinery/computer/atmos_control.dm +++ /dev/null @@ -1,44 +0,0 @@ -/obj/item/stock_parts/circuitboard/atmoscontrol - name = "\improper Central Atmospherics Computer Circuitboard" - build_path = /obj/machinery/computer/atmoscontrol - -/obj/machinery/computer/atmoscontrol - name = "\improper Central Atmospherics Computer" - icon = 'icons/obj/computer.dmi' - icon_keyboard = "generic_key" - icon_screen = "comm_logs" - light_color = "#00b000" - density = TRUE - anchored = TRUE - req_access = list(access_ce) - var/list/monitored_alarm_ids = null - var/datum/nano_module/atmos_control/atmos_control - base_type = /obj/machinery/computer/atmoscontrol - -/obj/machinery/computer/atmoscontrol/laptop - name = "Atmospherics Laptop" - desc = "A cheap laptop." - icon_state = "laptop" - icon_keyboard = "laptop_key" - icon_screen = "atmoslaptop" - density = FALSE - -/obj/machinery/computer/atmoscontrol/laptop/research - req_access = list(list(access_research, access_atmospherics, access_engine_equip)) - -/obj/machinery/computer/atmoscontrol/interface_interact(user) - ui_interact(user) - return TRUE - -/obj/machinery/computer/atmoscontrol/emag_act(var/remaining_carges, var/mob/user) - if(!emagged) - user.visible_message("\The [user] does something \the [src], causing the screen to flash!",\ - "You cause the screen to flash as you gain full control.",\ - "You hear an electronic warble.") - atmos_control.emagged = TRUE - return 1 - -/obj/machinery/computer/atmoscontrol/ui_interact(var/mob/user) - if(!atmos_control) - atmos_control = new(src, req_access, monitored_alarm_ids) - atmos_control.ui_interact(user) diff --git a/code/game/machinery/computer/buildandrepair.dm b/code/game/machinery/computer/buildandrepair.dm deleted file mode 100644 index 9f5a2c6c290e4..0000000000000 --- a/code/game/machinery/computer/buildandrepair.dm +++ /dev/null @@ -1,23 +0,0 @@ -//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:31 - -/obj/machinery/constructable_frame/computerframe - name = "computer frame" - icon = 'icons/obj/stock_parts.dmi' - icon_state = "unwired" - obj_flags = OBJ_FLAG_ROTATABLE - expected_machine_type = "computer" - -/obj/machinery/constructable_frame/computerframe/on_update_icon() - overlays.Cut() - switch(construct_state && construct_state.type) - if(/decl/machine_construction/frame/awaiting_circuit) - icon_state = "wired" - if(/decl/machine_construction/frame/awaiting_parts) - icon_state = "wired" - overlays += "circuit" - else - icon_state = "unwired" - -/obj/machinery/constructable_frame/computerframe/deconstruct - anchored = TRUE - construct_state = /decl/machine_construction/frame/awaiting_circuit \ No newline at end of file diff --git a/code/game/machinery/computer/computer.dm b/code/game/machinery/computer/computer.dm deleted file mode 100644 index 8ab07aa801cf2..0000000000000 --- a/code/game/machinery/computer/computer.dm +++ /dev/null @@ -1,136 +0,0 @@ -/obj/machinery/computer - name = "computer" - icon = 'icons/obj/computer.dmi' - icon_state = "computer" - density = TRUE - anchored = TRUE - idle_power_usage = 300 - active_power_usage = 300 - construct_state = /decl/machine_construction/default/panel_closed/computer - uncreated_component_parts = null - stat_immune = 0 - frame_type = /obj/machinery/constructable_frame/computerframe/deconstruct - var/processing = 0 - - var/max_health = 80 - var/health - var/icon_keyboard = "generic_key" - var/icon_screen = "generic" - var/light_max_bright_on = 0.2 - var/light_inner_range_on = 0.1 - var/light_outer_range_on = 2 - var/overlay_layer - atom_flags = ATOM_FLAG_NO_TEMP_CHANGE | ATOM_FLAG_CLIMBABLE - clicksound = "keyboard" - -/obj/machinery/computer/New() - overlay_layer = layer - ..() - -/obj/machinery/computer/Initialize() - . = ..() - health = max_health - update_icon() - -/obj/machinery/computer/emp_act(severity) - ..() - if(prob(20/severity)) - take_damage(max_health) - -/obj/machinery/computer/ex_act(severity) - switch(severity) - if(EX_ACT_DEVASTATING) - qdel(src) - return - if(EX_ACT_HEAVY) - if (prob(25)) - qdel(src) - return - if (prob(50)) - for(var/x in verbs) - verbs -= x - take_damage(max_health) - if(EX_ACT_LIGHT) - if (prob(25)) - for(var/x in verbs) - verbs -= x - take_damage(max_health) - -/obj/machinery/computer/bullet_act(var/obj/item/projectile/Proj) - take_damage(Proj.get_structure_damage()) - ..() - -/obj/machinery/computer/attackby(obj/item/I, mob/user) - if (isScrewdriver(I) || isWrench(I) || isCrowbar(I)) - return ..() // handled by construction - if (user.a_intent != I_HURT) - return ..() - - user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN) - user.do_attack_animation(src) - playsound(src, 'sound/weapons/smash.ogg', 25, 1) - take_damage(I.force) - ..() - -/obj/machinery/computer/proc/take_damage(var/damage) - if (health <= 0 || !can_use_tools) - return - - health -= damage - if(health <= 0) - set_broken(TRUE) - visible_message(SPAN_WARNING("\The [src] breaks!")) - -/obj/machinery/computer/on_update_icon() - overlays.Cut() - icon = initial(icon) - icon_state = initial(icon_state) - - if(reason_broken & MACHINE_BROKEN_NO_PARTS) - set_light(0) - icon = 'icons/obj/computer.dmi' - icon_state = "wired" - var/screen = get_component_of_type(/obj/item/stock_parts/console_screen) - var/keyboard = get_component_of_type(/obj/item/stock_parts/keyboard) - if(screen) - overlays += "comp_screen" - if(keyboard) - overlays += icon_keyboard ? "[icon_keyboard]_off" : "keyboard" - return - - if(stat & NOPOWER) - set_light(0) - if(icon_keyboard) - overlays += image(icon,"[icon_keyboard]_off", overlay_layer) - return - else - set_light(light_max_bright_on, light_inner_range_on, light_outer_range_on, 2, light_color) - - if(stat & BROKEN) - overlays += image(icon,"[icon_state]_broken", overlay_layer) - else - overlays += get_screen_overlay() - - overlays += get_keyboard_overlay() - -/obj/machinery/computer/proc/get_screen_overlay() - return image(icon,icon_screen, overlay_layer) - -/obj/machinery/computer/proc/get_keyboard_overlay() - if(icon_keyboard) - overlays += image(icon, icon_keyboard, overlay_layer) - -/obj/machinery/computer/proc/decode(text) - // Adds line breaks - text = replacetext_char(text, "\n", "
      ") - return text - -/obj/machinery/computer/dismantle(mob/user) - if(stat & BROKEN) - to_chat(user, "The broken glass falls out.") - for(var/obj/item/stock_parts/console_screen/screen in component_parts) - qdel(screen) - new /obj/item/material/shard(loc) - else - to_chat(user, "You disconnect the monitor.") - return ..() diff --git a/code/game/machinery/computer/crew.dm b/code/game/machinery/computer/crew.dm deleted file mode 100644 index e1384f75f3512..0000000000000 --- a/code/game/machinery/computer/crew.dm +++ /dev/null @@ -1,33 +0,0 @@ -/obj/machinery/computer/crew - name = "crew monitoring computer" - desc = "Used to monitor active health sensors built into most of the crew's uniforms." - icon_keyboard = "med_key" - icon_screen = "crew" - light_color = "#315ab4" - idle_power_usage = 250 - active_power_usage = 500 - machine_name = "crew monitoring console" - machine_desc = "Vital for medical personnel, crew monitors display a list of all crew members, and a vital sign readout based on their suit sensors." - var/datum/nano_module/crew_monitor/crew_monitor - -/obj/machinery/computer/crew/New() - crew_monitor = new(src) - ..() - -/obj/machinery/computer/crew/Destroy() - qdel(crew_monitor) - crew_monitor = null - ..() - -/obj/machinery/computer/crew/interface_interact(user) - ui_interact(user) - return TRUE - -/obj/machinery/computer/crew/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1, var/datum/topic_state/state = GLOB.default_state) - crew_monitor.ui_interact(user, ui_key, ui, force_open, state) - -/obj/machinery/computer/crew/nano_container() - return crew_monitor - -/obj/machinery/computer/crew/interact(mob/user) - crew_monitor.ui_interact(user) diff --git a/code/game/machinery/computer/guestpass.dm b/code/game/machinery/computer/guestpass.dm deleted file mode 100644 index 2befdb7aff99b..0000000000000 --- a/code/game/machinery/computer/guestpass.dm +++ /dev/null @@ -1,195 +0,0 @@ -///////////////////////////////////////////// -//Guest pass //////////////////////////////// -///////////////////////////////////////////// -/obj/item/card/id/guest - name = "guest pass" - desc = "Allows temporary access to restricted areas." - color = COLOR_PALE_GREEN_GRAY - detail_color = COLOR_GREEN - - var/list/temp_access = list() //to prevent agent cards stealing access as permanent - var/expiration_time = 0 - var/expired = FALSE - var/reason = "NOT SPECIFIED" - -/obj/item/card/id/guest/GetAccess() - return temp_access - -/obj/item/card/id/guest/examine(mob/user) - . = ..() - if (!expired) - to_chat(user, SPAN_NOTICE("This pass expires at [worldtime2stationtime(expiration_time)].")) - else - to_chat(user, SPAN_WARNING("It expired at [worldtime2stationtime(expiration_time)].")) - -/obj/item/card/id/guest/read() - if (expired) - to_chat(usr, SPAN_NOTICE("This pass expired at [worldtime2stationtime(expiration_time)].")) - else - to_chat(usr, SPAN_NOTICE("This pass expires at [worldtime2stationtime(expiration_time)].")) - - to_chat(usr, SPAN_NOTICE("It grants access to following areas:")) - for (var/A in temp_access) - to_chat(usr, SPAN_NOTICE("[get_access_desc(A)].")) - to_chat(usr, SPAN_NOTICE("Issuing reason: [reason].")) - -/obj/item/card/id/guest/proc/expire() - color = COLOR_BLACK - detail_color = COLOR_BLACK - update_icon() - - expired = TRUE - temp_access = initial(temp_access) - -///////////////////////////////////////////// -//Guest pass terminal//////////////////////// -///////////////////////////////////////////// - -/obj/machinery/computer/guestpass - name = "guest pass terminal" - icon_state = "guest" - icon_keyboard = null - icon_screen = "pass" - density = FALSE - machine_name = "guest pass terminal" - machine_desc = "Guest passes are limited-time access passes that can be used to enter areas that would otherwise be inaccessible. This terminal allows them to be configured and created." - - var/obj/item/card/id/giver - var/list/accesses = list() - var/giv_name = "NOT SPECIFIED" - var/reason = "NOT SPECIFIED" - var/duration = 5 - - var/list/internal_log = list() - var/mode = 0 // 0 - making pass, 1 - viewing logs - -/obj/machinery/computer/guestpass/New() - ..() - uid = "[random_id("guestpass_serial_number",100,999)]-G[rand(10,99)]" - -/obj/machinery/computer/guestpass/attackby(obj/O, mob/user) - if(istype(O, /obj/item/card/id)) - if(!giver && user.unEquip(O)) - O.forceMove(src) - giver = O - updateUsrDialog() - else if(giver) - to_chat(user, SPAN_WARNING("There is already ID card inside.")) - return - ..() - -/obj/machinery/computer/guestpass/interface_interact(var/mob/user) - ui_interact(user) - return TRUE - -/obj/machinery/computer/guestpass/ui_interact(var/mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open=1) - var/list/data = list() - - data["mode"] = mode - data["internal_log"] = internal_log - data["reason"] = reason - data["duration"] = duration - - if(giver) - data["giver"] = !!giver - data["giver_name"] = giver.rank || giver.assignment || SSjobs.get_by_path(giver.job_access_type).title - data["giv_name"] = giv_name - - var/list/giver_access = list() - for(var/A in giver.access) - giver_access.Add(list(list( - "desc" = get_access_desc(A), - "access" = A, - "selected" = (A in accesses)))) - - data["giver_access"] = giver_access - - ui = SSnano.try_update_ui(user, src, ui_key, ui, data, force_open) - if(!ui) - ui = new(user, src, ui_key, "guestpass.tmpl", "Guest Pass Terminal", 600, 800) - ui.set_initial_data(data) - ui.open() - -/obj/machinery/computer/guestpass/OnTopic(var/mob/user, href_list, state) - if (href_list["mode"]) - mode = text2num(href_list["mode"]) - . = TOPIC_REFRESH - - else if (href_list["giv_name"]) - var/nam = sanitize(input(user, "Person pass is issued to", "Name", giv_name) as text|null) - if (nam && CanUseTopic(user, state)) - giv_name = nam - . = TOPIC_REFRESH - - else if (href_list["reason"]) - var/reas = sanitize(input(user, "Reason why pass is issued", "Reason", reason) as text|null) - if(reas && CanUseTopic(user, state)) - reason = reas - . = TOPIC_REFRESH - - else if (href_list["duration"]) - var/dur = input(user, "Duration (in minutes) during which pass is valid (up to 60 minutes).", "Duration") as num|null - if (dur && CanUseTopic(user, state)) - if (dur > 0 && dur <= 30) - duration = dur - . = TOPIC_REFRESH - else - to_chat(user, SPAN_WARNING("Invalid duration.")) - - else if (href_list["access"]) - var/A = href_list["access"] - if (A in accesses) - accesses.Remove(A) - else if(giver && (A in giver.access)) - accesses.Add(A) - . = TOPIC_REFRESH - - else if (href_list["id"]) - if (giver) - giver.dropInto(user.loc) - if(ishuman(user)) - user.put_in_hands(giver) - giver = null - accesses.Cut() - else - var/obj/item/I = user.get_active_hand() - if (istype(I, /obj/item/card/id) && user.unEquip(I)) - I.forceMove(src) - giver = I - . = TOPIC_REFRESH - - else if (href_list["print"]) - var/dat = "

      Activity log of guest pass terminal #[uid]


      " - for (var/entry in internal_log) - dat += "[entry]

      " - var/obj/item/paper/P = new/obj/item/paper( loc ) - P.SetName("activity log") - P.info = dat - . = TOPIC_REFRESH - - else if (href_list["issue"]) - if (giver && accesses.len) - var/number = pad_left(random_id("guestpass_id_number", 1, 9999), 6, "0") - var/entry = "\[[stationtime2text()]\] Pass #[number] issued by [giver.registered_name] ([giver.assignment]) to [giv_name]. Reason: [reason]. Granted access to following areas: " - var/list/access_descriptors = list() - for (var/A in accesses) - if (A in giver.access) - access_descriptors += get_access_desc(A) - entry += english_list(access_descriptors, and_text = ", ") - entry += ". Expires at [worldtime2stationtime(world.time + duration MINUTES)]." - internal_log.Add(entry) - - var/obj/item/card/id/guest/pass = new(src.loc) - pass.temp_access = accesses.Copy() - pass.registered_name = giv_name - pass.expiration_time = world.time + duration MINUTES - pass.reason = reason - pass.SetName("guest pass #[number]") - pass.assignment = "Guest" - addtimer(CALLBACK(pass, /obj/item/card/id/guest/proc/expire), duration MINUTES, TIMER_UNIQUE) - playsound(src.loc, 'sound/machines/ping.ogg', 25, 0) - . = TOPIC_REFRESH - else if(!giver) - to_chat(user, SPAN_WARNING("Cannot issue pass without issuing ID.")) - else if(!accesses.len) - to_chat(user, SPAN_WARNING("Cannot issue pass without at least one granted access permission.")) diff --git a/code/game/machinery/computer/law.dm b/code/game/machinery/computer/law.dm deleted file mode 100644 index bfecf910cff06..0000000000000 --- a/code/game/machinery/computer/law.dm +++ /dev/null @@ -1,44 +0,0 @@ -/obj/machinery/computer/upload - name = "unused upload console" - icon_keyboard = "rd_key" - icon_screen = "command" - var/mob/living/silicon/current - -/obj/machinery/computer/upload/attackby(obj/item/O, mob/user) - if(istype(O, /obj/item/aiModule)) - var/obj/item/aiModule/M = O - M.install(src, user) - else - ..() - -/obj/machinery/computer/upload/ai - name = "\improper AI upload console" - desc = "Used to upload laws to the AI." - machine_name = "\improper AI upload console" - machine_desc = "Maintains a one-way link to ship-bound AI units, allowing remote modification of their laws." - -/obj/machinery/computer/upload/ai/interface_interact(mob/user) - if(!CanInteract(user, DefaultTopicState())) - return FALSE - current = select_active_ai(user, get_z(src)) - if (!current) - to_chat(user, "No active AIs detected.") - else - to_chat(user, "[current.name] selected for law changes.") - return TRUE - -/obj/machinery/computer/upload/robot - name = "cyborg upload console" - desc = "Used to upload laws to Cyborgs." - machine_name = "cyborg upload console" - machine_desc = "Maintains a one-way link to ship-bound synthetics such as cyborgs and robots, allowing remote modification of their laws." - -/obj/machinery/computer/upload/robot/interface_interact(mob/user) - if(!CanInteract(user, DefaultTopicState())) - return FALSE - current = freeborg(get_z(src)) - if (!current) - to_chat(user, "No free cyborgs detected.") - else - to_chat(user, "[current.name] selected for law changes.") - return TRUE diff --git a/code/game/machinery/computer/message.dm b/code/game/machinery/computer/message.dm deleted file mode 100644 index ddcd55a0691e9..0000000000000 --- a/code/game/machinery/computer/message.dm +++ /dev/null @@ -1,319 +0,0 @@ -// Allows you to monitor messages that passes the server. - -/obj/machinery/computer/message_monitor - name = "messaging monitor console" - desc = "Used to access and maintain data on messaging servers. Allows you to view request console messages." - icon_screen = "comm_logs" - light_color = "#00b000" - machine_name = "message monitor console" - machine_desc = "A console that allows the user to browse request console messages when a special encryption key is provided." - var/hack_icon = "error" - //Server linked to. - var/obj/machinery/message_server/linkedServer = null - //Sparks effect - For emag - var/datum/effect/effect/system/spark_spread/spark_system = new /datum/effect/effect/system/spark_spread - //Messages - Saves me time if I want to change something. - var/noserver = "ALERT: No server detected." - var/incorrectkey = "ALERT: Incorrect decryption key!" - var/defaultmsg = "Welcome. Please select an option." - var/rebootmsg = "%$&(£: Critical %$$@ Error // !RestArting! - ?pLeaSe wAit!" - //Computer properties - var/screen = 0 // 0 = Main menu, 1 = Message Logs, 2 = Hacked screen, 3 = Custom Message - var/hacking = 0 // Is it being hacked into by the AI/Cyborg - var/emag = 0 // When it is emagged. - var/message = "System bootup complete. Please select an option." // The message that shows on the main menu. - var/auth = 0 // Are they authenticated? - -/obj/machinery/computer/message_monitor/attackby(obj/item/O as obj, mob/living/user as mob) - if(stat & (NOPOWER|BROKEN)) - ..() - return - if(!istype(user)) - return - if(isScrewdriver(O) && emag) - //Stops people from just unscrewing the monitor and putting it back to get the console working again. - to_chat(user, "It is too hot to mess with!") - return - - ..() - return - -/obj/machinery/computer/message_monitor/emag_act(var/remaining_charges, var/mob/user) - // Will create sparks and print out the console's password. You will then have to wait a while for the console to be back online. - // It'll take more time if there's more characters in the password.. - if(!emag && operable()) - if(!isnull(src.linkedServer)) - emag = 1 - screen = 2 - spark_system.set_up(5, 0, src) - src.spark_system.start() - var/obj/item/paper/monitorkey/MK = new/obj/item/paper/monitorkey - MK.dropInto(loc) - // Will help make emagging the console not so easy to get away with. - MK.info += "

      £%@%(*$%&(£&?*(%&£/{}" - spawn(100*length(src.linkedServer.decryptkey)) UnmagConsole() - message = rebootmsg - update_icon() - return 1 - else - to_chat(user, "A no server error appears on the screen.") - -/obj/machinery/computer/message_monitor/on_update_icon() - if(emag || hacking) - icon_screen = hack_icon - else - icon_screen = initial(icon_screen) - ..() - -/obj/machinery/computer/message_monitor/Initialize() - //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] - return ..() - -/obj/machinery/computer/message_monitor/interface_interact(user) - interact(user) - return TRUE - -/obj/machinery/computer/message_monitor/interact(var/mob/living/user) - //If the computer is being hacked or is emagged, display the reboot message. - if(hacking || emag) - message = rebootmsg - var/list/dat = list() - dat += "Message Monitor Console" - dat += "

      Message Monitor Console


      " - dat += "

      " - - if(auth) - dat += "

      \[Authenticated\] /" - dat += " Server Power: [src.linkedServer && src.linkedServer.active ? "\[On\]":"\[Off\]"]

      " - else - dat += "

      \[Unauthenticated\] /" - dat += " Server Power: [src.linkedServer && src.linkedServer.active ? "\[On\]":"\[Off\]"]

      " - - if(hacking || emag) - screen = 2 - else if(!auth || !linkedServer || (linkedServer.stat & (NOPOWER|BROKEN))) - if(!linkedServer || (linkedServer.stat & (NOPOWER|BROKEN))) message = noserver - screen = 0 - - switch(screen) - //Main menu - if(0) - // = TAB - var/i = 0 - dat += "
      [++i]. Link To A Server
      " - if(auth) - if(!linkedServer || (linkedServer.stat & (NOPOWER|BROKEN))) - dat += "
      ERROR: Server not found!
      " - else - dat += "
      [++i]. View Request Console Logs
      " - dat += "
      [++i]. Clear Request Console Logs
      " - dat += "
      [++i]. Set Custom Key
      " - else - dat += "

      Please authenticate with the server in order to show additional options." - if((istype(user, /mob/living/silicon/ai) || istype(user, /mob/living/silicon/robot)) && (user.mind.special_role && user.mind.original == user)) - //Malf/Traitor AIs can bruteforce into the system to gain the Key. - dat += "
      *&@#. Bruteforce Key
      " - - //Hacking screen. - if(2) - if(istype(user, /mob/living/silicon/ai) || istype(user, /mob/living/silicon/robot)) - dat += "Brute-forcing for server key.
      It will take 20 seconds for every character that the password has." - dat += "In the meantime, this console can reveal your true intentions if you let someone access it. Make sure no humans enter the room during that time." - else - //It's the same message as the one above but in binary. Because robots understand binary and humans don't... well I thought it was clever. - dat += {"01000010011100100111010101110100011001010010110
      - 10110011001101111011100100110001101101001011011100110011
      - 10010000001100110011011110111001000100000011100110110010
      - 10111001001110110011001010111001000100000011010110110010
      - 10111100100101110001000000100100101110100001000000111011
      - 10110100101101100011011000010000001110100011000010110101
      - 10110010100100000001100100011000000100000011100110110010
      - 10110001101101111011011100110010001110011001000000110011
      - 00110111101110010001000000110010101110110011001010111001
      - 00111100100100000011000110110100001100001011100100110000
      - 10110001101110100011001010111001000100000011101000110100
      - 00110000101110100001000000111010001101000011001010010000
      - 00111000001100001011100110111001101110111011011110111001
      - 00110010000100000011010000110000101110011001011100010000
      - 00100100101101110001000000111010001101000011001010010000
      - 00110110101100101011000010110111001110100011010010110110
      - 10110010100101100001000000111010001101000011010010111001
      - 10010000001100011011011110110111001110011011011110110110
      - 00110010100100000011000110110000101101110001000000111001
      - 00110010101110110011001010110000101101100001000000111100
      - 10110111101110101011100100010000001110100011100100111010
      - 10110010100100000011010010110111001110100011001010110111
      - 00111010001101001011011110110111001110011001000000110100
      - 10110011000100000011110010110111101110101001000000110110
      - 00110010101110100001000000111001101101111011011010110010
      - 10110111101101110011001010010000001100001011000110110001
      - 10110010101110011011100110010000001101001011101000010111
      - 00010000001001101011000010110101101100101001000000111001
      - 10111010101110010011001010010000001101110011011110010000
      - 00110100001110101011011010110000101101110011100110010000
      - 00110010101101110011101000110010101110010001000000111010
      - 00110100001100101001000000111001001101111011011110110110
      - 10010000001100100011101010111001001101001011011100110011
      - 10010000001110100011010000110000101110100001000000111010
      - 001101001011011010110010100101110"} - - //Request Console Logs - if(4) - - var/index = 0 - /* data_rc_msg - X - 5% - var/rec_dpt = "Unspecified" //name of the person - 15% - var/send_dpt = "Unspecified" //name of the sender- 15% - var/message = "Blank" //transferred message - 300px - var/stamp = "Unstamped" - 15% - var/id_auth = "Unauthenticated" - 15% - var/priority = "Normal" - 10% - */ - dat += "
      Back - Refresh

      " - dat += {" - "} - for(var/datum/data_rc_msg/rc in src.linkedServer.rc_msgs) - index++ - if(index > 3000) - break - // Del - Sender - Recepient - Message - // X - Al Green - Your Mom - WHAT UP!? - dat += {" - "} - dat += "
      XSending Dep.Receiving Dep.MessageStampID Auth.Priority.
      X
      [rc.send_dpt][rc.rec_dpt][rc.message][rc.stamp][rc.id_auth][rc.priority]
      " - - dat += "" - message = defaultmsg - var/datum/browser/popup = new(user, "message", "Message Monitoring Console", 700, 700) - popup.set_content(JOINTEXT(dat)) - popup.open() - return - -/obj/machinery/computer/message_monitor/proc/BruteForce(mob/user as mob) - if(isnull(linkedServer)) - to_chat(user, "Could not complete brute-force: Linked Server Disconnected!") - else - var/currentKey = src.linkedServer.decryptkey - to_chat(user, "Brute-force completed! The key is '[currentKey]'.") - src.hacking = 0 - update_icon() - src.screen = 0 // Return the screen back to normal - -/obj/machinery/computer/message_monitor/proc/UnmagConsole() - src.emag = 0 - update_icon() - -/obj/machinery/computer/message_monitor/Topic(href, href_list) - if((. = ..())) - return - - //Authenticate - if (href_list["auth"]) - if(auth) - auth = 0 - screen = 0 - else - var/dkey = trim(input(usr, "Please enter the decryption key.") as text|null) - if(dkey && dkey != "") - if(src.linkedServer.decryptkey == dkey) - auth = 1 - else - message = incorrectkey - - //Turn the server on/off. - if (href_list["active"]) - 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 - message = "NOTICE: Server selected." - else if(message_servers && message_servers.len > 0) - linkedServer = message_servers[1] - message = "NOTICE: Only Single Server Detected - Server selected." - else - message = noserver - - //Clears the request console logs - KEY REQUIRED - if (href_list["clearr"]) - if(!linkedServer || (src.linkedServer.stat & (NOPOWER|BROKEN))) - message = noserver - else - if(auth) - src.linkedServer.rc_msgs = list() - message = "NOTICE: Logs cleared." - //Change the password - KEY REQUIRED - if (href_list["pass"]) - if(!linkedServer || (src.linkedServer.stat & (NOPOWER|BROKEN))) - message = noserver - else - if(auth) - var/dkey = trim(input(usr, "Please enter the decryption key.") as text|null) - if(dkey && dkey != "") - if(src.linkedServer.decryptkey == dkey) - var/newkey = trim(input(usr,"Please enter the new key (3 - 16 characters max):")) - if(length(newkey) <= 3) - message = "NOTICE: Decryption key too short!" - else if(length(newkey) > 16) - message = "NOTICE: Decryption key too long!" - else if(newkey && newkey != "") - src.linkedServer.decryptkey = newkey - message = "NOTICE: Decryption key set." - else - message = incorrectkey - - //Hack the Console to get the password - if (href_list["hack"]) - if((istype(usr, /mob/living/silicon/ai) || istype(usr, /mob/living/silicon/robot)) && (usr.mind.special_role && usr.mind.original == usr)) - src.hacking = 1 - src.screen = 2 - update_icon() - //Time it takes to bruteforce is dependant on the password length. - spawn(100*length(src.linkedServer.decryptkey)) - if(src && src.linkedServer && usr) - BruteForce(usr) - - //Delete the request console log. - if (href_list["deleter"]) - //Are they on the view logs screen? - if(screen == 4) - if(!linkedServer || (src.linkedServer.stat & (NOPOWER|BROKEN))) - message = noserver - else //if(istype(href_list["delete"], /datum/data_pda_msg)) - src.linkedServer.rc_msgs -= locate(href_list["deleter"]) - message = "NOTICE: Log Deleted!" - - //Request Console Logs - KEY REQUIRED - if(href_list["viewr"]) - if(src.linkedServer == null || (src.linkedServer.stat & (NOPOWER|BROKEN))) - message = noserver - else - if(auth) - src.screen = 4 - - if (href_list["back"]) - src.screen = 0 - - return interact(usr) - - -/obj/item/paper/monitorkey - //..() - name = "Monitor Decryption Key" - var/obj/machinery/message_server/server = null - -/obj/item/paper/monitorkey/New() - ..() - spawn(10) - if(message_servers) - for(var/obj/machinery/message_server/server in message_servers) - if(!isnull(server)) - if(!isnull(server.decryptkey)) - info = "

      Daily Key Reset


      The new message monitor key is '[server.decryptkey]'.
      This key is only intended for personnel granted access to the messaging server. Keep it safe.
      If necessary, change the password to a more secure one." - info_links = info - icon_state = "paper_words" - break diff --git a/code/game/machinery/computer/prisoner.dm b/code/game/machinery/computer/prisoner.dm deleted file mode 100644 index 02d9f19da86f6..0000000000000 --- a/code/game/machinery/computer/prisoner.dm +++ /dev/null @@ -1,104 +0,0 @@ -//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:31 - -/obj/machinery/computer/prisoner - name = "prisoner management console" - icon = 'icons/obj/computer.dmi' - icon_keyboard = "security_key" - icon_screen = "explosive" - light_color = "#a91515" - req_access = list(access_armory) - machine_name = "prison management console" - machine_desc = "Prison management consoles display a readout of active tracking and chemical implants, and allows for remote activation of them." - var/id = 0.0 - var/temp = null - var/status = 0 - var/timeleft = 60 - var/stop = 0.0 - var/screen = 0 // 0 - No Access Denied, 1 - Access allowed - - -/obj/machinery/computer/prisoner/attack_ai(var/mob/user as mob) - return src.attack_hand(user) - -/obj/machinery/computer/prisoner/attack_hand(var/mob/user as mob) - if(..()) - return - user.set_machine(src) - var/dat - dat += "Prisoner Implant Manager System
      " - if(screen == 0) - dat += "
      Unlock Console" - else if(screen == 1) - dat += "
      Chemical Implants
      " - var/turf/Tr = null - for(var/obj/item/implant/chem/C in world) - Tr = get_turf(C) - if((Tr) && !AreConnectedZLevels(Tr.z, src.z)) continue // Out of range - if(!C.implanted) continue - dat += "[C.imp_in.name] | Remaining Units: [C.reagents.total_volume] | Inject: " - dat += "((1))" - dat += "((5))" - dat += "((10))
      " - dat += "********************************
      " - dat += "
      Tracking Implants
      " - for(var/obj/item/implant/tracking/T in world) - Tr = get_turf(T) - if((Tr) && !AreConnectedZLevels(Tr.z, src.z)) continue // Out of range - if(!T.implanted) continue - var/loc_display = "Space" - var/mob/living/carbon/M = T.imp_in - if(!istype(M.loc, /turf/space)) - var/turf/mob_loc = get_turf(M) - loc_display = mob_loc.loc - if(T.malfunction) - loc_display = pick(teleportlocs) - dat += "ID: [T.id] | Location: [loc_display]
      " - dat += "(Message Holder) |
      " - dat += "********************************
      " - dat += "
      Lock Console" - - show_browser(user, dat, "window=computer;size=400x500") - onclose(user, "computer") - return - - -/obj/machinery/computer/prisoner/Process() - if(!..()) - src.updateDialog() - return - - -/obj/machinery/computer/prisoner/Topic(href, href_list) - if(..()) - return - if((usr.contents.Find(src) || (in_range(src, usr) && istype(src.loc, /turf))) || (istype(usr, /mob/living/silicon))) - usr.set_machine(src) - - if(href_list["inject1"]) - var/obj/item/implant/I = locate(href_list["inject1"]) - if(I) I.activate(1) - - else if(href_list["inject5"]) - var/obj/item/implant/I = locate(href_list["inject5"]) - if(I) I.activate(5) - - else if(href_list["inject10"]) - var/obj/item/implant/I = locate(href_list["inject10"]) - if(I) I.activate(10) - - else if(href_list["lock"]) - if(src.allowed(usr)) - screen = !screen - else - to_chat(usr, "Unauthorized Access.") - - else if(href_list["warn"]) - var/warning = sanitize(input(usr,"Message:","Enter your message here!","")) - if(!warning) return - var/obj/item/implant/I = locate(href_list["warn"]) - if((I)&&(I.imp_in)) - var/mob/living/carbon/R = I.imp_in - to_chat(R, "You hear a voice in your head saying: '[warning]'") - - src.updateUsrDialog() - return diff --git a/code/game/machinery/computer/robot.dm b/code/game/machinery/computer/robot.dm deleted file mode 100644 index 35e2bd410dfb8..0000000000000 --- a/code/game/machinery/computer/robot.dm +++ /dev/null @@ -1,164 +0,0 @@ -/obj/machinery/computer/robotics - name = "robotics control console" - desc = "Used to remotely lockdown or monitor linked synthetics." - icon = 'icons/obj/computer.dmi' - icon_keyboard = "mining_key" - icon_screen = "robot" - light_color = "#a97faa" - req_access = list(access_robotics) - machine_name = "robotics control console" - machine_desc = "A control console that maintains a radio link with ship synthetics. Allows remote monitoring of them, as well as locking down their movement systems." - -/obj/machinery/computer/robotics/interface_interact(mob/user) - ui_interact(user) - return TRUE - -/obj/machinery/computer/robotics/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1) - var/data[0] - data["robots"] = get_cyborgs(user) - data["is_ai"] = issilicon(user) - - ui = SSnano.try_update_ui(user, src, ui_key, ui, data, force_open) - if (!ui) - ui = new(user, src, ui_key, "robot_control.tmpl", "Robotic Control Console", 400, 500) - ui.set_initial_data(data) - ui.open() - ui.set_auto_update(1) - -/obj/machinery/computer/robotics/CanUseTopic(user) - if(!allowed(user)) - to_chat(user, "Access Denied") - return STATUS_CLOSE - return ..() - -/obj/machinery/computer/robotics/OnTopic(var/mob/user, href_list) - // Locks or unlocks the cyborg - if (href_list["lockdown"]) - var/mob/living/silicon/robot/target = get_cyborg_by_name(href_list["lockdown"]) - if(!target || !istype(target)) - return TOPIC_HANDLED - - if(isAI(user) && (target.connected_ai != user)) - to_chat(user, "Access Denied. This robot is not linked to you.") - return TOPIC_HANDLED - - if(isrobot(user)) - to_chat(user, "Access Denied.") - return TOPIC_HANDLED - - var/choice = input("Really [target.lockcharge ? "unlock" : "lockdown"] [target.name] ?") in list ("Yes", "No") - if(choice != "Yes") - return TOPIC_HANDLED - - if(!target || !istype(target)) - return TOPIC_HANDLED - - if(target.SetLockdown(!target.lockcharge)) - log_and_message_admins("[target.lockcharge ? "locked down" : "released"] [target.name]!") - if(target.lockcharge) - to_chat(target, "You have been locked down!") - else - to_chat(target, "Your lockdown has been lifted!") - else - to_chat(user, "ERROR: Lockdown attempt failed.") - . = TOPIC_REFRESH - - // Remotely hacks the cyborg. Only antag AIs can do this and only to linked cyborgs. - else if (href_list["hack"]) - var/mob/living/silicon/robot/target = get_cyborg_by_name(href_list["hack"]) - if(!target || !istype(target)) - return TOPIC_HANDLED - - // Antag AI checks - if(!istype(user, /mob/living/silicon/ai) || !(user.mind.special_role && user.mind.original == user)) - to_chat(user, "Access Denied") - return TOPIC_HANDLED - - if(target.emagged) - to_chat(user, "Robot is already hacked.") - return TOPIC_HANDLED - - var/choice = input("Really hack [target.name]? This cannot be undone.") in list("Yes", "No") - if(choice != "Yes") - return TOPIC_HANDLED - - if(!target || !istype(target)) - return TOPIC_HANDLED - - log_and_message_admins("emagged [target.name] using robotic console!") - target.emagged = TRUE - to_chat(target, "Failsafe protocols overriden. New tools available.") - . = TOPIC_REFRESH - - else if (href_list["message"]) - var/mob/living/silicon/robot/target = get_cyborg_by_name(href_list["message"]) - if(!target || !istype(target)) - return - - var/message = sanitize(input("Enter message to transmit to the synthetic.") as null|text) - if(!message || !istype(target)) - return - - log_and_message_admins("sent message '[message]' to [target.name] using robotics control console!") - to_chat(target, "New remote message received using R-SSH protocol:") - to_chat(target, message) - . = TOPIC_REFRESH - -// Proc: get_cyborgs() -// Parameters: 1 (operator - mob which is operating the console.) -// Description: Returns NanoUI-friendly list of accessible cyborgs. -/obj/machinery/computer/robotics/proc/get_cyborgs(var/mob/operator) - var/list/robots = list() - - for(var/mob/living/silicon/robot/R in GLOB.silicon_mob_list) - // Ignore drones - if(isdrone(R)) - continue - // Ignore antagonistic cyborgs - if(R.scrambledcodes) - continue - - var/list/robot = list() - robot["name"] = R.name - var/turf/T = get_turf(R) - var/area/A = get_area(T) - - if(istype(T) && istype(A) && (T.z in GLOB.using_map.contact_levels)) - robot["location"] = "[A.name] ([T.x], [T.y])" - else - robot["location"] = "Unknown" - - if(R.stat) - robot["status"] = "Not Responding" - else if (R.lockcharge) - robot["status"] = "Lockdown" - else - robot["status"] = "Operational" - - if(R.cell) - robot["cell"] = 1 - robot["cell_capacity"] = R.cell.maxcharge - robot["cell_current"] = R.cell.charge - robot["cell_percentage"] = round(R.cell.percent()) - else - robot["cell"] = 0 - - robot["module"] = R.module ? R.module.name : "None" - robot["master_ai"] = R.connected_ai ? R.connected_ai.name : "None" - robot["hackable"] = 0 - // Antag AIs know whether linked cyborgs are hacked or not. - if(operator && istype(operator, /mob/living/silicon/ai) && (R.connected_ai == operator) && (operator.mind.special_role && operator.mind.original == operator)) - robot["hacked"] = R.emagged ? 1 : 0 - robot["hackable"] = R.emagged? 0 : 1 - robots.Add(list(robot)) - return robots - -// Proc: get_cyborg_by_name() -// Parameters: 1 (name - Cyborg we are trying to find) -// Description: Helper proc for finding cyborg by name -/obj/machinery/computer/robotics/proc/get_cyborg_by_name(var/name) - if (!name) - return - for(var/mob/living/silicon/robot/R in GLOB.silicon_mob_list) - if(R.name == name) - return R diff --git a/code/game/machinery/computer/shuttle.dm b/code/game/machinery/computer/shuttle.dm deleted file mode 100644 index da37668c47847..0000000000000 --- a/code/game/machinery/computer/shuttle.dm +++ /dev/null @@ -1,79 +0,0 @@ -/obj/machinery/computer/shuttle - name = "Shuttle" - desc = "For shuttle control." - icon_keyboard = "tech_key" - icon_screen = "shuttle" - light_color = "#00ffff" - construct_state = null - var/auth_need = 3.0 - var/list/authorized = list( ) - - -/obj/machinery/computer/shuttle/attackby(var/obj/item/card/W as obj, var/mob/user as mob) - if(stat & (BROKEN|NOPOWER)) return - - var/datum/evacuation_controller/shuttle/evac_control = evacuation_controller - if(!istype(evac_control)) - to_chat(user, "This console should not in use on this map. Please report this to a developer.") - return - - if ((!( istype(W, /obj/item/card) ) || evacuation_controller.has_evacuated() || !( user ))) - return - - if (istype(W, /obj/item/card/id)||istype(W, /obj/item/modular_computer)) - if (istype(W, /obj/item/modular_computer)) - W = W.GetIdCard() - if (!W:access) //no access - to_chat(user, "The access level of [W:registered_name]\'s card is not high enough. ") - return - - var/list/cardaccess = W:access - if(!istype(cardaccess, /list) || !cardaccess.len) //no access - to_chat(user, "The access level of [W:registered_name]\'s card is not high enough. ") - return - - if(!(access_bridge in W:access)) //doesn't have this access - to_chat(user, "The access level of [W:registered_name]\'s card is not high enough. ") - return 0 - - var/choice = alert(user, text("Would you like to (un)authorize a shortened launch time? [] authorization\s are still needed. Use abort to cancel all authorizations.", src.auth_need - src.authorized.len), "Shuttle Launch", "Authorize", "Repeal", "Abort") - if(evacuation_controller.is_prepared() && user.get_active_hand() != W) - return 0 - switch(choice) - if("Authorize") - src.authorized -= W:registered_name - src.authorized += W:registered_name - if (src.auth_need - src.authorized.len > 0) - message_admins("[key_name_admin(user)] has authorized early shuttle launch") - log_game("[user.ckey] has authorized early shuttle launch") - to_world(text("Alert: [] authorizations needed until shuttle is launched early", src.auth_need - src.authorized.len)) - else - message_admins("[key_name_admin(user)] has launched the shuttle") - log_game("[user.ckey] has launched the shuttle early") - to_world("Alert: Shuttle launch time shortened to 10 seconds!") - evacuation_controller.set_launch_time(world.time+100) - //src.authorized = null - qdel(src.authorized) - src.authorized = list( ) - - if("Repeal") - src.authorized -= W:registered_name - to_world(text("Alert: [] authorizations needed until shuttle is launched early", src.auth_need - src.authorized.len)) - - if("Abort") - to_world("All authorizations to shortening time for shuttle launch have been revoked!") - src.authorized.len = 0 - src.authorized = list( ) - - else if (istype(W, /obj/item/card/emag) && !emagged) - var/choice = alert(user, "Would you like to launch the shuttle?","Shuttle control", "Launch", "Cancel") - - if(!emagged && !evacuation_controller.is_prepared() && user.get_active_hand() == W) - switch(choice) - if("Launch") - to_world("Alert: Shuttle launch time shortened to 10 seconds!") - evacuation_controller.set_launch_time(world.time+100) - emagged = TRUE - if("Cancel") - return - return diff --git a/code/game/machinery/computer/station_alert.dm b/code/game/machinery/computer/station_alert.dm deleted file mode 100644 index 3d0ad2545f3b4..0000000000000 --- a/code/game/machinery/computer/station_alert.dm +++ /dev/null @@ -1,64 +0,0 @@ - -/obj/machinery/computer/station_alert - name = "alert console" - desc = "Used to access the automated alert system." - icon_keyboard = "tech_key" - icon_screen = "alert:0" - light_color = "#e6ffff" - base_type = /obj/machinery/computer/station_alert - machine_name = "alert console" - machine_desc = "A compact monitoring system that displays a readout of all active atmosphere, camera, and fire alarms on the network." - var/datum/nano_module/alarm_monitor/alarm_monitor - var/monitor_type = /datum/nano_module/alarm_monitor - -/obj/machinery/computer/station_alert/engineering - monitor_type = /datum/nano_module/alarm_monitor/engineering - -/obj/machinery/computer/station_alert/security - monitor_type = /datum/nano_module/alarm_monitor/security - -/obj/machinery/computer/station_alert/all - monitor_type = /datum/nano_module/alarm_monitor/all - -/obj/machinery/computer/station_alert/Initialize() - alarm_monitor = new monitor_type(src) - alarm_monitor.register_alarm(src, /atom/proc/update_icon) - . = ..() - if(monitor_type) - register_monitor(new monitor_type(src)) - -/obj/machinery/computer/station_alert/Destroy() - . = ..() - unregister_monitor() - -/obj/machinery/computer/station_alert/proc/register_monitor(var/datum/nano_module/alarm_monitor/monitor) - if(monitor.host != src) - return - - alarm_monitor = monitor - alarm_monitor.register_alarm(src, /atom/proc/update_icon) - -/obj/machinery/computer/station_alert/proc/unregister_monitor() - if(alarm_monitor) - alarm_monitor.unregister_alarm(src) - qdel(alarm_monitor) - alarm_monitor = null - -/obj/machinery/computer/station_alert/interface_interact(user) - ui_interact(user) - return TRUE - -/obj/machinery/computer/station_alert/ui_interact(mob/user) - if(alarm_monitor) - alarm_monitor.ui_interact(user) - -/obj/machinery/computer/station_alert/nano_container() - return alarm_monitor - -/obj/machinery/computer/station_alert/on_update_icon() - icon_screen = initial(icon_screen) - if(!(stat & (BROKEN|NOPOWER))) - if(alarm_monitor) - if(alarm_monitor.has_major_alarms(get_z(src))) - icon_screen = "alert:2" - ..() diff --git a/code/game/machinery/constructable_frame.dm b/code/game/machinery/constructable_frame.dm deleted file mode 100644 index bfa352b4b6995..0000000000000 --- a/code/game/machinery/constructable_frame.dm +++ /dev/null @@ -1,47 +0,0 @@ -//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:31 - -//Circuit boards are in /code/game/objects/items/weapons/circuitboards/machinery - -/obj/machinery/constructable_frame //Made into a seperate type to make future revisions easier. - name = "machine frame" - icon = 'icons/obj/stock_parts.dmi' - icon_state = "box_0" - density = TRUE - anchored = FALSE - use_power = POWER_USE_OFF - uncreated_component_parts = null - construct_state = /decl/machine_construction/frame/unwrenched - var/obj/item/stock_parts/circuitboard/circuit = null - var/expected_machine_type - atom_flags = ATOM_FLAG_NO_TEMP_CHANGE | ATOM_FLAG_CLIMBABLE - -/obj/machinery/constructable_frame/state_transition(decl/machine_construction/new_state) - . = ..() - update_icon() - -/obj/machinery/constructable_frame/dismantle() - new /obj/item/stack/material/steel(loc, 5) - qdel(src) - return TRUE - -/obj/machinery/constructable_frame/machine_frame - expected_machine_type = "machine" - -/obj/machinery/constructable_frame/machine_frame/on_update_icon() - switch(construct_state && construct_state.type) - if(/decl/machine_construction/frame/awaiting_circuit) - icon_state = "box_1" - if(/decl/machine_construction/frame/awaiting_parts) - icon_state = "box_2" - else - icon_state = "box_0" - -/obj/machinery/constructable_frame/machine_frame/AltClick(mob/user) - . = ..() - if(!anchored) - set_dir(turn(dir, -90)) - to_chat(user, SPAN_NOTICE("You turn \the [src] around.")) - -/obj/machinery/constructable_frame/machine_frame/deconstruct - anchored = TRUE - construct_state = /decl/machine_construction/frame/awaiting_circuit diff --git a/code/game/machinery/cracker.dm b/code/game/machinery/cracker.dm deleted file mode 100644 index bbcf1ae81e763..0000000000000 --- a/code/game/machinery/cracker.dm +++ /dev/null @@ -1,87 +0,0 @@ -/obj/machinery/portable_atmospherics/cracker - name = "molecular cracking unit" - desc = "An integrated catalytic water cracking system used to break H2O down into H and O. An advanced molecular extractor also allows it to isolate liquid deuterium from seawater." - icon = 'icons/obj/machines/cracker.dmi' - icon_state = "cracker" - density = TRUE - anchored = TRUE - waterproof = TRUE - volume = 5000 - use_power = POWER_USE_IDLE - idle_power_usage = 100 - active_power_usage = 10000 - - var/list/reagent_buffer = list() - var/tmp/fluid_consumption_per_tick = 100 - var/tmp/gas_generated_per_tick = 1 - var/tmp/max_reagents = 100 - var/tmp/deuterium_generation_chance = 10 - var/tmp/deuterium_generation_amount = 1 - -/obj/machinery/portable_atmospherics/cracker/on_update_icon() - icon_state = (use_power == POWER_USE_ACTIVE) ? "cracker_on" : "cracker" - -/obj/machinery/portable_atmospherics/cracker/interface_interact(mob/user) - if(use_power == POWER_USE_IDLE) - update_use_power(POWER_USE_ACTIVE) - else - update_use_power(POWER_USE_IDLE) - user.visible_message(SPAN_NOTICE("\The [user] [use_power == POWER_USE_ACTIVE ? "engages" : "disengages"] \the [src].")) - update_icon() - return TRUE - -/obj/machinery/portable_atmospherics/cracker/attackby(var/obj/item/thing, var/mob/user) - // remove deuterium as a reagent - if(thing.is_open_container() && thing.reagents) - if(!reagent_buffer[MATERIAL_DEUTERIUM] || reagent_buffer[MATERIAL_DEUTERIUM] <= 0) - to_chat(user, SPAN_WARNING("There is no deuterium stored in \the [src].")) - return - var/transfer_amt = min(thing.reagents.maximum_volume, reagent_buffer[MATERIAL_DEUTERIUM]) - thing.reagents.add_reagent(MATERIAL_DEUTERIUM, transfer_amt) - thing.update_icon() - reagent_buffer[MATERIAL_DEUTERIUM] -= transfer_amt - user.visible_message(SPAN_NOTICE("\The [user] siphons [transfer_amt] unit\s of deuterium from \the [src] into \the [thing].")) - return - . = ..() - -/obj/machinery/portable_atmospherics/cracker/power_change() - . = ..() - if(. && (stat & NOPOWER)) - update_use_power(POWER_USE_IDLE) - update_icon() - -/obj/machinery/portable_atmospherics/cracker/set_broken(new_state) - . = ..() - if(. && (stat & BROKEN)) - update_use_power(POWER_USE_IDLE) - update_icon() - -/obj/machinery/portable_atmospherics/cracker/Process() - ..() - if(use_power == POWER_USE_IDLE) - return - - // Produce materials. - var/turf/T = get_turf(src) - if(istype(T)) - var/obj/effect/fluid/F = T.return_fluid() - if(istype(F)) - - // Drink more water! - var/consuming = min(F.fluid_amount, fluid_consumption_per_tick) - LOSE_FLUID(F, consuming) - T.show_bubbles() - - // Gas production. - var/datum/gas_mixture/produced = new - var/gen_amt = min(1, (gas_generated_per_tick * (consuming/fluid_consumption_per_tick))) - produced.adjust_gas(GAS_OXYGEN, gen_amt) - produced.adjust_gas(GAS_HYDROGEN, gen_amt * 2) - produced.temperature = T20C //todo water temperature - air_contents.merge(produced) - - // Deuterium extraction. - if(prob(deuterium_generation_chance) && (!reagent_buffer[MATERIAL_DEUTERIUM] || reagent_buffer[MATERIAL_DEUTERIUM] <= max_reagents)) - if(!reagent_buffer[MATERIAL_DEUTERIUM]) - reagent_buffer[MATERIAL_DEUTERIUM] = 0 - reagent_buffer[MATERIAL_DEUTERIUM] += deuterium_generation_amount \ No newline at end of file diff --git a/code/game/machinery/cryo.dm b/code/game/machinery/cryo.dm deleted file mode 100644 index a942db17115bb..0000000000000 --- a/code/game/machinery/cryo.dm +++ /dev/null @@ -1,401 +0,0 @@ -#define HEAT_CAPACITY_HUMAN 100 //249840 J/K, for a 72 kg person. - -/obj/machinery/atmospherics/unary/cryo_cell - name = "cryo cell" - icon = 'icons/obj/cryogenics.dmi' // map only - icon_state = "pod_preview" - density = TRUE - anchored = TRUE - interact_offline = 1 - layer = ABOVE_HUMAN_LAYER - atom_flags = ATOM_FLAG_NO_TEMP_CHANGE - construct_state = /decl/machine_construction/default/panel_closed - uncreated_component_parts = null - stat_immune = 0 - - var/on = 0 - idle_power_usage = 20 - active_power_usage = 200 - clicksound = 'sound/machines/buttonbeep.ogg' - clickvol = 30 - - machine_name = "cryo cell" - machine_desc = "Uses a supercooled chemical bath to hold living beings in something close to suspended animation. Often paired with specialized medicines to rapidly heal wounds of a patient inside." - - var/temperature_archived - var/mob/living/carbon/human/occupant = null - var/obj/item/reagent_containers/glass/beaker = null - - var/current_heat_capacity = 50 - -/obj/machinery/atmospherics/unary/cryo_cell/Initialize() - . = ..() - icon = 'icons/obj/cryogenics_split.dmi' - update_icon() - atmos_init() - -/obj/machinery/atmospherics/unary/cryo_cell/Destroy() - for(var/atom/movable/A in src) - A.dropInto(loc) - if(beaker) - beaker.forceMove(get_step(loc, SOUTH)) //Beaker is carefully ejected from the wreckage of the cryotube - beaker = null - . = ..() - -/obj/machinery/atmospherics/unary/cryo_cell/atmos_init() - ..() - if(node) return - var/node_connect = dir - for(var/obj/machinery/atmospherics/target in get_step(src,node_connect)) - if(target.initialize_directions & get_dir(target,src)) - node = target - break - -/obj/machinery/atmospherics/unary/cryo_cell/examine(mob/user) - . = ..() - if (user.Adjacent(src)) - if (beaker) - to_chat(user, "It is loaded with a beaker.") - if (occupant) - occupant.examine(arglist(args)) - -/obj/machinery/atmospherics/unary/cryo_cell/Process() - ..() - if(!node) - return - - var/has_air_contents = FALSE - if(air_contents) //Check this even if it's unpowered - ADJUST_ATOM_TEMPERATURE(src, air_contents.temperature) - if(beaker) - QUEUE_TEMPERATURE_ATOMS(beaker) - has_air_contents = TRUE - - if(!on) - return - - if(occupant) - if(occupant.stat != 2) - process_occupant() - - if(has_air_contents) - temperature_archived = air_contents.temperature - heat_gas_contents() - expel_gas() - - if(abs(temperature_archived-air_contents.temperature) > 1) - network.update = 1 - - return 1 - -/obj/machinery/atmospherics/unary/cryo_cell/relaymove(mob/user as mob) - // note that relaymove will also be called for mobs outside the cell with UI open - if(src.occupant == user && !user.stat) - go_out() - -/obj/machinery/atmospherics/unary/cryo_cell/interface_interact(user) - ui_interact(user) - return TRUE - - /** - * The ui_interact proc is used to open and update Nano UIs - * If ui_interact is not used then the UI will not update correctly - * ui_interact is currently defined for /atom/movable (which is inherited by /obj and /mob) - * - * @param user /mob The mob who is interacting with this ui - * @param ui_key string A string key to use for this ui. Allows for multiple unique uis on one obj/mob (defaut value "main") - * @param ui /datum/nanoui This parameter is passed by the nanoui process() proc when updating an open ui - * - * @return nothing - */ -/obj/machinery/atmospherics/unary/cryo_cell/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1) - if(user == occupant || user.stat) - return - - // this is the data which will be sent to the ui - var/data[0] - data["isOperating"] = on - data["hasOccupant"] = occupant ? 1 : 0 - - if (occupant) - var/cloneloss = "none" - var/amount = occupant.getCloneLoss() - if(amount > 50) - cloneloss = "severe" - else if(amount > 25) - cloneloss = "significant" - else if(amount > 10) - cloneloss = "moderate" - else if(amount) - cloneloss = "minor" - var/scan = medical_scan_results(occupant) - scan += "

      Genetic degradation: [cloneloss]" - scan = replacetext_char(scan,"'scan_notice'","'white'") - scan = replacetext_char(scan,"'scan_warning'","'average'") - scan = replacetext_char(scan,"'scan_danger'","'bad'") - scan += "
      Cryostasis factor: [occupant.stasis_value]x" - data["occupant"] = scan - - data["cellTemperature"] = round(air_contents.temperature) - data["cellTemperatureStatus"] = "good" - if(air_contents.temperature > T0C) // if greater than 273.15 kelvin (0 celsius) - data["cellTemperatureStatus"] = "bad" - else if(air_contents.temperature > 225) - data["cellTemperatureStatus"] = "average" - - data["isBeakerLoaded"] = beaker ? 1 : 0 - - data["beakerLabel"] = null - data["beakerVolume"] = 0 - if(beaker) - data["beakerLabel"] = beaker.name - data["beakerVolume"] = beaker.reagents.total_volume - - // update the ui if it exists, returns null if no ui is passed/found - ui = SSnano.try_update_ui(user, src, ui_key, ui, data, force_open) - if (!ui) - // the ui does not exist, so we'll create a new() one - // for a list of parameters and their descriptions see the code docs in \code\modules\nano\nanoui.dm - ui = new(user, src, ui_key, "cryo.tmpl", "Cryo Cell Control System", 520, 410) - // when the ui is first opened this is the data it will use - ui.set_initial_data(data) - // open the new ui window - ui.open() - // auto update every Master Controller tick - ui.set_auto_update(1) - -/obj/machinery/atmospherics/unary/cryo_cell/OnTopic(user, href_list) - if(user == occupant) - return STATUS_CLOSE - . = ..() - -/obj/machinery/atmospherics/unary/cryo_cell/OnTopic(user, href_list) - if(href_list["switchOn"]) - on = 1 - update_icon() - return TOPIC_REFRESH - - if(href_list["switchOff"]) - on = 0 - update_icon() - return TOPIC_REFRESH - - if(href_list["ejectBeaker"]) - if(beaker) - beaker.forceMove(get_step(loc, SOUTH)) - beaker = null - return TOPIC_REFRESH - - if(href_list["ejectOccupant"]) - if(!occupant || isslime(user) || ispAI(user)) - return TOPIC_HANDLED // don't update UIs attached to this object - go_out() - return TOPIC_REFRESH - -/obj/machinery/atmospherics/unary/cryo_cell/state_transition(var/decl/machine_construction/default/new_state) - . = ..() - if(istype(new_state)) - updateUsrDialog() - -/obj/machinery/atmospherics/unary/cryo_cell/attackby(var/obj/G, var/mob/user as mob) - if(component_attackby(G, user)) - return TRUE - if(istype(G, /obj/item/reagent_containers/glass)) - if(beaker) - to_chat(user, "A beaker is already loaded into the machine.") - return - if(!user.unEquip(G, src)) - return // Temperature will be adjusted on Entered() - beaker = G - user.visible_message("[user] adds \a [G] to \the [src]!", "You add \a [G] to \the [src]!") - else if(istype(G, /obj/item/grab)) - var/obj/item/grab/grab = G - if(!ismob(grab.affecting)) - return - for(var/mob/living/carbon/slime/M in range(1,grab.affecting)) - if(M.Victim == grab.affecting) - to_chat(user, "[grab.affecting.name] will not fit into the cryo because they have a slime latched onto their head.") - return - if(put_mob(grab.affecting)) - qdel(G) - return - -/obj/machinery/atmospherics/unary/cryo_cell/on_update_icon() - overlays.Cut() - icon_state = "pod[on]" - var/image/I - - I = image(icon, "pod[on]_top") - I.pixel_z = 32 - overlays += I - - if(occupant) - var/image/pickle = image(occupant.icon, occupant.icon_state) - pickle.overlays = occupant.overlays - pickle.pixel_z = 18 - overlays += pickle - - I = image(icon, "lid[on]") - overlays += I - - I = image(icon, "lid[on]_top") - I.pixel_z = 32 - overlays += I - -/obj/machinery/atmospherics/unary/cryo_cell/proc/process_occupant() - if(air_contents.total_moles < 10) - return - if(occupant) - if(occupant.stat == DEAD) - return - occupant.set_stat(UNCONSCIOUS) - var/has_cryo_medicine = occupant.reagents.has_any_reagent(list(/datum/reagent/cryoxadone, /datum/reagent/clonexadone, /datum/reagent/nanitefluid)) >= REM - if(beaker && !has_cryo_medicine) - beaker.reagents.trans_to_mob(occupant, REM, CHEM_BLOOD) - if (prob(2)) - to_chat(occupant, SPAN_NOTICE(SPAN_BOLD("... [pick("floating", "cold")] ..."))) - -/obj/machinery/atmospherics/unary/cryo_cell/proc/heat_gas_contents() - if(air_contents.total_moles < 1) - return - var/air_heat_capacity = air_contents.heat_capacity() - var/combined_heat_capacity = current_heat_capacity + air_heat_capacity - if(combined_heat_capacity > 0) - var/combined_energy = T20C*current_heat_capacity + air_heat_capacity*air_contents.temperature - air_contents.temperature = combined_energy/combined_heat_capacity - -/obj/machinery/atmospherics/unary/cryo_cell/proc/expel_gas() - if(air_contents.total_moles < 1) - return - -/obj/machinery/atmospherics/unary/cryo_cell/proc/go_out() - if(!( occupant )) - return - //for(var/obj/O in src) - // O.loc = loc - if (occupant.client) - occupant.client.eye = occupant.client.mob - occupant.client.perspective = MOB_PERSPECTIVE - occupant.forceMove(get_step(loc, SOUTH)) - if (occupant.bodytemperature < 261 && occupant.bodytemperature >= 70) - occupant.bodytemperature = 261 - occupant = null - current_heat_capacity = initial(current_heat_capacity) - update_use_power(POWER_USE_IDLE) - update_icon() - SetName(initial(name)) - return - -/obj/machinery/atmospherics/unary/cryo_cell/AltClick(mob/user) - if(CanDefaultInteract(user)) - go_out() - else - ..() - -/obj/machinery/atmospherics/unary/cryo_cell/CtrlClick(mob/user) - if(CanDefaultInteract(user)) - on = !on - update_icon() - -/obj/machinery/atmospherics/unary/cryo_cell/proc/put_mob(mob/living/carbon/M as mob) - if (stat & (NOPOWER|BROKEN)) - to_chat(usr, "The cryo cell is not functioning.") - return - if (!istype(M)) - to_chat(usr, "The cryo cell cannot handle such a lifeform!") - return - if (occupant) - to_chat(usr, "The cryo cell is already occupied!") - return - if (M.abiotic()) - to_chat(usr, "Subject may not have abiotic items on.") - return - if(!node) - to_chat(usr, "The cell is not correctly connected to its pipe network!") - return - if (M.client) - M.client.perspective = EYE_PERSPECTIVE - M.client.eye = src - M.stop_pulling() - M.forceMove(src) - M.ExtinguishMob() - if(M.health > -100 && (M.health < 0 || M.sleeping)) - to_chat(M, "You feel a cold liquid surround you. Your skin starts to freeze up.") - occupant = M - current_heat_capacity = HEAT_CAPACITY_HUMAN - update_use_power(POWER_USE_ACTIVE) - add_fingerprint(usr) - update_icon() - SetName("[name] ([occupant])") - return 1 - - //Like grab-putting, but for mouse-dropping. -/obj/machinery/atmospherics/unary/cryo_cell/MouseDrop_T(var/mob/target, var/mob/user) - if(!CanMouseDrop(target, user)) - return - if (!istype(target)) - return - if (target.buckled) - to_chat(user, "Unbuckle the subject before attempting to move them.") - return - user.visible_message("\The [user] begins placing \the [target] into \the [src].", "You start placing \the [target] into \the [src].") - if(!do_after(user, 3 SECONDS, src, DO_PUBLIC_UNIQUE)) - return - put_mob(target) - - -/obj/machinery/atmospherics/unary/cryo_cell/verb/move_eject() - set name = "Eject occupant" - set category = "Object" - set src in oview(1) - if(usr == occupant)//If the user is inside the tube... - if (usr.stat == 2)//and he's not dead.... - return - to_chat(usr, "Release sequence activated. This will take two minutes.") - sleep(1200) - if(!src || !usr || !occupant || (occupant != usr)) //Check if someone's released/replaced/bombed him already - return - go_out()//and release him from the eternal prison. - else - if (usr.stat != 0) - return - go_out() - add_fingerprint(usr) - return - -/obj/machinery/atmospherics/unary/cryo_cell/verb/move_inside() - set name = "Move Inside" - set category = "Object" - set src in oview(1) - for(var/mob/living/carbon/slime/M in range(1,usr)) - if(M.Victim == usr) - to_chat(usr, "You're too busy getting your life sucked out of you.") - return - if (usr.stat != 0) - return - put_mob(usr) - return - -/obj/machinery/atmospherics/unary/cryo_cell/return_air() - return air_contents - -//This proc literally only exists for cryo cells. -/atom/proc/return_air_for_internal_lifeform() - return return_air() - -/obj/machinery/atmospherics/unary/cryo_cell/return_air_for_internal_lifeform() - //assume that the cryo cell has some kind of breath mask or something that - //draws from the cryo tube's environment, instead of the cold internal air. - if(loc) - return loc.return_air() - else - return null - -/datum/data/function/proc/reset() - return - -/datum/data/function/proc/r_input(href, href_list, mob/user as mob) - return - -/datum/data/function/proc/display() - return diff --git a/code/game/machinery/cryopod.dm b/code/game/machinery/cryopod.dm deleted file mode 100644 index 4baf610fa55fd..0000000000000 --- a/code/game/machinery/cryopod.dm +++ /dev/null @@ -1,625 +0,0 @@ -/* - * Cryogenic refrigeration unit. Basically a despawner. - * Stealing a lot of concepts/code from sleepers due to massive laziness. - * The despawn tick will only fire if it's been more than time_till_despawned ticks - * since time_entered, which is world.time when the occupant moves in. - */ - - -//Main cryopod console. - -/obj/machinery/computer/cryopod - name = "cryogenic oversight console" - desc = "An interface between crew and the cryogenic storage oversight systems." - icon = 'icons/obj/Cryogenic2.dmi' - icon_state = "cellconsole" - density = FALSE - interact_offline = 1 - var/mode = null - - //Used for logging people entering cryosleep and important items they are carrying. - var/list/frozen_crew = list() - var/list/frozen_items = list() - var/list/_admin_logs = list() // _ so it shows first in VV - - var/storage_type = "crewmembers" - var/storage_name = "Cryogenic Oversight Control" - var/allow_items = 1 - -/obj/machinery/computer/cryopod/robot - name = "robotic storage console" - desc = "An interface between crew and the robotic storage systems." - icon = 'icons/obj/robot_storage.dmi' - icon_state = "console" - - storage_type = "cyborgs" - storage_name = "Robotic Storage Control" - allow_items = 0 - -/obj/machinery/computer/cryopod/interface_interact(mob/user) - interact(user) - return TRUE - -/obj/machinery/computer/cryopod/interact(mob/user) - user.set_machine(src) - - var/dat - - dat += "

      [storage_name]
      " - dat += "Welcome, [user.real_name].


      " - dat += "View storage log.
      " - if(allow_items) - dat += "View objects.
      " - dat += "Recover object.
      " - dat += "Recover all objects.
      " - - show_browser(user, dat, "window=cryopod_console") - onclose(user, "cryopod_console") - -/obj/machinery/computer/cryopod/OnTopic(user, href_list, state) - if(href_list["log"]) - var/dat = "Recently stored [storage_type]


      " - for(var/person in frozen_crew) - dat += "[person]
      " - dat += "
      " - show_browser(user, dat, "window=cryolog") - . = TOPIC_REFRESH - - else if(href_list["view"]) - if(!allow_items) return - - var/dat = "Recently stored objects


      " - for(var/obj/item/I in frozen_items) - dat += "[I.name]
      " - dat += "
      " - - show_browser(user, dat, "window=cryoitems") - . = TOPIC_HANDLED - - else if(href_list["item"]) - if(!allow_items) return - - if(frozen_items.len == 0) - to_chat(user, "There is nothing to recover from storage.") - return TOPIC_HANDLED - - var/obj/item/I = input(user, "Please choose which object to retrieve.","Object recovery",null) as null|anything in frozen_items - if(!I || !CanUseTopic(user, state)) - return TOPIC_HANDLED - - if(!(I in frozen_items)) - to_chat(user, "\The [I] is no longer in storage.") - return TOPIC_HANDLED - - visible_message("The console beeps happily as it disgorges \the [I].", range = 3) - - I.dropInto(loc) - frozen_items -= I - . = TOPIC_REFRESH - - else if(href_list["allitems"]) - if(!allow_items) return TOPIC_HANDLED - - if(frozen_items.len == 0) - to_chat(user, "There is nothing to recover from storage.") - return TOPIC_HANDLED - - visible_message("The console beeps happily as it disgorges the desired objects.", range = 3) - - for(var/obj/item/I in frozen_items) - I.dropInto(loc) - frozen_items -= I - . = TOPIC_REFRESH - -/obj/item/stock_parts/circuitboard/cryopodcontrol - name = "Circuit board (Cryogenic Oversight Console)" - build_path = /obj/machinery/computer/cryopod - origin_tech = list(TECH_DATA = 3) - -/obj/item/stock_parts/circuitboard/robotstoragecontrol - name = "Circuit board (Robotic Storage Console)" - build_path = /obj/machinery/computer/cryopod/robot - origin_tech = list(TECH_DATA = 3) - -//Decorative structures to go alongside cryopods. -/obj/structure/cryofeed - - name = "cryogenic feed" - desc = "A bewildering tangle of machinery and pipes." - icon = 'icons/obj/Cryogenic2.dmi' - icon_state = "cryo_rear" - anchored = TRUE - dir = WEST - -//Cryopods themselves. -/obj/machinery/cryopod - name = "cryogenic freezer" - desc = "A man-sized pod for entering suspended animation." - icon = 'icons/obj/Cryogenic2.dmi' - icon_state = "body_scanner_0" - density = TRUE - anchored = TRUE - dir = WEST - - var/base_icon_state = "body_scanner_0" - var/occupied_icon_state = "body_scanner_1" - var/on_store_message = "has entered long-term storage." - var/on_store_visible_message = "hums and hisses as it moves $occupant$ into storage." // $occupant$ is automatically converted to the occupant's name - var/on_store_name = "Cryogenic Oversight" - var/on_enter_occupant_message = "You feel cool air surround you. You go numb as your senses turn inward." - var/allow_occupant_types = list(/mob/living/carbon/human) - var/disallow_occupant_types = list() - - var/mob/occupant = null // Person waiting to be despawned. - var/time_till_despawn = 9000 // Down to 15 minutes //30 minutes-ish is too long - var/time_entered = 0 // Used to keep track of the safe period. - var/obj/item/device/radio/intercom/announce // - var/announce_despawn = TRUE - - var/obj/machinery/computer/cryopod/control_computer - var/last_no_computer_message = 0 - var/applies_stasis = 1 - - // These items are preserved when the process() despawn proc occurs. - var/list/preserve_items = list( - /obj/item/integrated_circuit/manipulation/bluespace_rift, - /obj/item/integrated_circuit/input/teleporter_locator, - /obj/item/card/id/captains_spare, - /obj/item/aicard, - /obj/item/device/mmi, - /obj/item/device/paicard, - /obj/item/gun, - /obj/item/pinpointer, - /obj/item/clothing/suit, - /obj/item/clothing/shoes/magboots, - /obj/item/blueprints, - /obj/item/clothing/head/helmet/space, - /obj/item/storage/internal - ) - -/obj/machinery/cryopod/robot - name = "robotic storage unit" - desc = "A storage unit for robots." - icon = 'icons/obj/robot_storage.dmi' - icon_state = "pod_0" - base_icon_state = "pod_0" - occupied_icon_state = "pod_1" - on_store_message = "has entered robotic storage." - on_store_name = "Robotic Storage Oversight" - on_enter_occupant_message = "The storage unit broadcasts a sleep signal to you. Your systems start to shut down, and you enter low-power mode." - allow_occupant_types = list(/mob/living/silicon/robot) - disallow_occupant_types = list(/mob/living/silicon/robot/drone) - applies_stasis = 0 - -/obj/machinery/cryopod/lifepod - name = "life pod" - desc = "A man-sized pod for entering suspended animation. Dubbed 'cryocoffin' by more cynical spacers, it is pretty barebone, counting on stasis system to keep the victim alive rather than packing extended supply of food or air. Can be ordered with symbols of common religious denominations to be used in space funerals too." - on_store_name = "Life Pod Oversight" - time_till_despawn = 20 MINUTES - icon_state = "redpod0" - base_icon_state = "redpod0" - occupied_icon_state = "redpod1" - var/launched = 0 - var/datum/gas_mixture/airtank - -/obj/machinery/cryopod/lifepod/Initialize() - . = ..() - airtank = new() - airtank.temperature = T0C - airtank.adjust_gas(GAS_OXYGEN, MOLES_O2STANDARD, 0) - airtank.adjust_gas(GAS_NITROGEN, MOLES_N2STANDARD) - -/obj/machinery/cryopod/lifepod/return_air() - return airtank - -/obj/machinery/cryopod/lifepod/proc/launch() - launched = 1 - for(var/d in GLOB.cardinal) - var/turf/T = get_step(src,d) - var/obj/machinery/door/blast/B = locate() in T - if(B && B.density) - B.force_open() - break - - var/list/possible_locations = list() - if(GLOB.using_map.use_overmap) - var/obj/effect/overmap/visitable/O = map_sectors["[z]"] - for(var/obj/effect/overmap/visitable/OO in range(O,2)) - if(OO.in_space || istype(OO,/obj/effect/overmap/visitable/sector/exoplanet)) - possible_locations |= text2num(level) - - var/newz = GLOB.using_map.get_empty_zlevel() - if(possible_locations.len && prob(10)) - newz = pick(possible_locations) - var/turf/nloc = locate(rand(TRANSITIONEDGE, world.maxx-TRANSITIONEDGE), rand(TRANSITIONEDGE, world.maxy-TRANSITIONEDGE),newz) - if(!istype(nloc, /turf/space)) - explosion(nloc, 1, 2, 3) - playsound(loc,'sound/effects/rocket.ogg',100) - forceMove(nloc) - -//Don't use these for in-round leaving -/obj/machinery/cryopod/lifepod/Process() - if(evacuation_controller && evacuation_controller.state >= EVAC_LAUNCHING) - if(occupant && !launched) - launch() - ..() - -/obj/machinery/cryopod/New() - announce = new /obj/item/device/radio/intercom(src) - ..() - -/obj/machinery/cryopod/Destroy() - if(occupant) - occupant.forceMove(loc) - . = ..() - -/obj/machinery/cryopod/Initialize() - . = ..() - find_control_computer() - -/obj/machinery/cryopod/proc/find_control_computer(urgent=0) - // Workaround for http://www.byond.com/forum/?post=2007448 - for(var/obj/machinery/computer/cryopod/C in src.loc.loc) - control_computer = C - break - // control_computer = locate(/obj/machinery/computer/cryopod) in src.loc.loc - - // Don't send messages unless we *need* the computer, and less than five minutes have passed since last time we messaged - if(!control_computer && urgent && last_no_computer_message + 5*60*10 < world.time) - log_and_message_admins("Cryopod in [src.loc.loc] could not find control computer!") - last_no_computer_message = world.time - - return control_computer != null - -/obj/machinery/cryopod/proc/check_occupant_allowed(mob/M) - var/correct_type = 0 - for(var/type in allow_occupant_types) - if(istype(M, type)) - correct_type = 1 - break - - if(!correct_type) return 0 - - for(var/type in disallow_occupant_types) - if(istype(M, type)) - return 0 - - return 1 - -/obj/machinery/cryopod/examine(mob/user) - . = ..() - if (occupant && user.Adjacent(src)) - occupant.examine(arglist(args)) - -//Lifted from Unity stasis.dm and refactored. -/obj/machinery/cryopod/Process() - if(occupant) - if(applies_stasis && iscarbon(occupant) && (world.time > time_entered + 20 SECONDS)) - var/mob/living/carbon/C = occupant - C.SetStasis(2) - - //Allow a ten minute gap between entering the pod and actually despawning. - // Only provide the gap if the occupant hasn't ghosted - if ((world.time - time_entered < time_till_despawn) && (occupant.ckey)) - return - - if(!occupant.client && occupant.stat<2) //Occupant is living and has no client. - if(!control_computer) - if(!find_control_computer(urgent=1)) - return - - despawn_occupant() - -// This function can not be undone; do not call this unless you are sure -// Also make sure there is a valid control computer -/obj/machinery/cryopod/robot/despawn_occupant() - var/mob/living/silicon/robot/R = occupant - if(!istype(R)) return ..() - - qdel(R.mmi) - for(var/obj/item/I in R.module) // the tools the borg has; metal, glass, guns etc - for(var/obj/item/O in I) // the things inside the tools, if anything; mainly for janiborg trash bags - O.forceMove(R) - qdel(I) - qdel(R.module) - - . = ..() - -// This function can not be undone; do not call this unless you are sure -// Also make sure there is a valid control computer -/obj/machinery/cryopod/proc/despawn_occupant() - if (QDELETED(occupant)) - log_and_message_admins("A mob was deleted while in a cryopod, or the cryopod double-processed. This may cause errors!") - return - - //Drop all items into the pod. - for(var/obj/item/W in occupant) - occupant.drop_from_inventory(W) - W.forceMove(src) - - if(W.contents.len) //Make sure we catch anything not handled by qdel() on the items. - for(var/obj/item/O in W.contents) - if(istype(O,/obj/item/storage/internal)) //Stop eating pockets, you fuck! - continue - O.forceMove(src) - - //Delete all items not on the preservation list. - var/list/items = src.contents.Copy() - items -= occupant // Don't delete the occupant - items -= announce // or the autosay radio. - items -= component_parts - - for(var/obj/item/W in items) - - var/preserve = null - // Snowflaaaake. - if(istype(W, /obj/item/device/mmi)) - var/obj/item/device/mmi/brain = W - if(brain.brainmob && brain.brainmob.client && brain.brainmob.key) - preserve = 1 - else - continue - else - for(var/T in preserve_items) - if(istype(W,T)) - preserve = 1 - break - - if(!preserve) - qdel(W) - else - if(control_computer && control_computer.allow_items) - control_computer.frozen_items += W - W.forceMove(null) - else - W.forceMove(src.loc) - - //Update any existing objectives involving this mob. - for(var/datum/objective/O in all_objectives) - // We don't want revs to get objectives that aren't for heads of staff. Letting - // them win or lose based on cryo is silly so we remove the objective. - if(O.target == occupant.mind) - if(O.owner && O.owner.current) - to_chat(O.owner.current, "You get the feeling your target is no longer within your reach...") - qdel(O) - - //Handle job slot/tater cleanup. - if(occupant.mind) - if(occupant.mind.assigned_job) - occupant.mind.assigned_job.clear_slot() - - if(LAZYLEN(occupant.mind.objectives)) - occupant.mind.objectives = null - occupant.mind.special_role = null - - // Delete them from datacore. - var/sanitized_name = occupant.real_name - sanitized_name = sanitize(sanitized_name) - var/datum/computer_file/report/crew_record/R = get_crewmember_record(sanitized_name) - if(R) - qdel(R) - - icon_state = base_icon_state - - //TODO: Check objectives/mode, update new targets if this mob is the target, spawn new antags? - - - //Make an announcement and log the person entering storage. - - // Titles should really be fetched from data records - // and records should not be fetched by name as there is no guarantee names are unique - var/role_alt_title = occupant.mind ? occupant.mind.role_alt_title : "Unknown" - - if(control_computer) - control_computer.frozen_crew += "[occupant.real_name], [role_alt_title] - [stationtime2text()]" - control_computer._admin_logs += "[key_name(occupant)] ([role_alt_title]) at [stationtime2text()]" - log_and_message_admins("[key_name(occupant)] ([role_alt_title]) entered cryostorage.") - - if(announce_despawn) - announce.autosay("[occupant.real_name], [role_alt_title], [on_store_message]", "[on_store_name]") - - var/despawnmessage = replacetext_char(on_store_visible_message, "$occupant$", occupant.real_name) - visible_message(SPAN_NOTICE("\The [initial(name)] " + despawnmessage), range = 3) - - //This should guarantee that ghosts don't spawn. - occupant.ckey = null - - // Delete the mob. - qdel(occupant) - set_occupant(null) - -/obj/machinery/cryopod/proc/attempt_enter(mob/target, mob/user) - if (!user.IsAdvancedToolUser()) - to_chat(user, SPAN_WARNING("You're too simple to understand how to do that.")) - return - if (user.incapacitated() || !user.Adjacent(src)) - to_chat(user, SPAN_WARNING("You're in no position to do that.")) - return - if (!user.Adjacent(target)) - to_chat(user, SPAN_WARNING("\The [target] isn't close enough.")) - return - if (user != target && target.client) - var/response = alert(target, "Enter the [src]?", null, "Yes", "No") - if (response != "Yes") - to_chat(user, SPAN_WARNING("\The [target] refuses.")) - return - if (user.incapacitated() || !user.Adjacent(src)) - to_chat(user, SPAN_WARNING("You're in no position to do that.")) - return - if (!user.Adjacent(target)) - to_chat(user, SPAN_WARNING("\The [target] isn't close enough.")) - return - add_fingerprint(user) - if (!do_after(user, 2 SECONDS, src, DO_PUBLIC_UNIQUE)) - return - if (QDELETED(target)) - return - if (!user.Adjacent(target)) - to_chat(user, SPAN_WARNING("\The [target] isn't close enough.")) - return - set_occupant(target) - if (user != target) - add_fingerprint(target) - log_and_message_admins("placed [target == user ? "themself" : key_name_admin(target)] into \a [src]") - -//Like grap-put, but for mouse-drop. -/obj/machinery/cryopod/MouseDrop_T(var/mob/target, var/mob/user) - if(!check_occupant_allowed(target)) - return - if(occupant) - to_chat(user, "\The [src] is in use.") - return - - user.visible_message("\The [user] begins placing \the [target] into \the [src].", "You start placing \the [target] into \the [src].") - attempt_enter(target, user) - -/obj/machinery/cryopod/attackby(var/obj/item/G as obj, var/mob/user as mob) - - if(istype(G, /obj/item/grab)) - var/obj/item/grab/grab = G - if(occupant) - to_chat(user, "\The [src] is in use.") - return - - if(!ismob(grab.affecting)) - return - - if(!check_occupant_allowed(grab.affecting)) - return - - attempt_enter(grab.affecting, user) - -/obj/machinery/cryopod/verb/eject() - set name = "Eject Pod" - set category = "Object" - set src in oview(1) - if(usr.stat != 0) - return - - icon_state = base_icon_state - - //Eject any items that aren't meant to be in the pod. - var/list/items = contents - component_parts - if(occupant) items -= occupant - if(announce) items -= announce - - for(var/obj/item/W in items) - W.dropInto(loc) - - src.go_out() - add_fingerprint(usr) - - SetName(initial(name)) - return - -/obj/machinery/cryopod/verb/move_inside() - set name = "Enter Pod" - set category = "Object" - set src in oview(1) - - if(usr.stat != 0 || !check_occupant_allowed(usr)) - return - - if(src.occupant) - to_chat(usr, "\The [src] is in use.") - return - - for(var/mob/living/carbon/slime/M in range(1,usr)) - if(M.Victim == usr) - to_chat(usr, "You're too busy getting your life sucked out of you.") - return - - visible_message("\The [usr] starts climbing into \the [src].", range = 3) - - if(do_after(usr, 2 SECONDS, src, DO_PUBLIC_UNIQUE)) - - if(!usr || !usr.client) - return - - if(src.occupant) - to_chat(usr, "\The [src] is in use.") - return - - set_occupant(usr) - - src.add_fingerprint(usr) - - return - -/obj/machinery/cryopod/proc/go_out() - - if(!occupant) - return - - if(occupant.client) - occupant.client.eye = src.occupant.client.mob - occupant.client.perspective = MOB_PERSPECTIVE - - occupant.dropInto(loc) - set_occupant(null) - - icon_state = base_icon_state - - return - -/obj/machinery/cryopod/proc/set_occupant(var/mob/living/carbon/occupant, var/silent) - src.occupant = occupant - if(!occupant) - SetName(initial(name)) - return - - occupant.stop_pulling() - if(occupant.client) - if(!silent) - to_chat(occupant, "[on_enter_occupant_message]") - to_chat(occupant, "If you ghost, log out or close your client now, your character will shortly be permanently removed from the round.") - occupant.client.perspective = EYE_PERSPECTIVE - occupant.client.eye = src - occupant.forceMove(src) - time_entered = world.time - - SetName("[name] ([occupant])") - icon_state = occupied_icon_state - -/obj/machinery/cryopod/relaymove(var/mob/user) - go_out() - -//A prop version for away missions and such - -/obj/structure/broken_cryo - name = "broken cryo sleeper" - desc = "Whoever was inside isn't going to wake up now. It looks like you could pry it open with a crowbar." - icon = 'icons/obj/Cryogenic2.dmi' - icon_state = "broken_cryo" - anchored = TRUE - density = TRUE - var/closed = 1 - var/busy = 0 - var/remains_type = /obj/item/remains/human - -/obj/structure/broken_cryo/attack_hand(mob/user) - ..() - if (closed) - to_chat(user, "You tug at the glass but can't open it with your hands alone.") - else - to_chat(user, "The glass is already open.") - -/obj/structure/broken_cryo/attackby(obj/item/W as obj, mob/user as mob) - if (busy) - to_chat(user, "Someone else is attempting to open this.") - return - if (closed) - if (isCrowbar(W)) - busy = 1 - visible_message("[user] starts to pry the glass cover off of \the [src].") - if (!do_after(user, 5 SECONDS, src, DO_PUBLIC_UNIQUE)) - visible_message("[user] stops trying to pry the glass off of \the [src].") - busy = 0 - return - closed = 0 - busy = 0 - icon_state = "broken_cryo_open" - var/obj/dead = new remains_type(loc) - dead.dir = src.dir//skeleton is oriented as cryo - else - to_chat(user, "The glass cover is already open.") diff --git a/code/game/machinery/doors/airlock.dm b/code/game/machinery/doors/airlock.dm deleted file mode 100644 index f2f5a6c19f825..0000000000000 --- a/code/game/machinery/doors/airlock.dm +++ /dev/null @@ -1,1482 +0,0 @@ -#define BOLTS_FINE 0 -#define BOLTS_EXPOSED 1 -#define BOLTS_CUT 2 - -#define AIRLOCK_CLOSED 1 -#define AIRLOCK_CLOSING 2 -#define AIRLOCK_OPEN 3 -#define AIRLOCK_OPENING 4 -#define AIRLOCK_DENY 5 -#define AIRLOCK_EMAG 6 - -#define AIRLOCK_PAINTABLE 1 -#define AIRLOCK_STRIPABLE 2 -#define AIRLOCK_DETAILABLE 4 -#define AIRLOCK_WINDOW_PAINTABLE 8 - -/obj/machinery/door/airlock - name = "airlock" - icon = 'icons/obj/doors/station/door.dmi' - icon_state = "preview" - power_channel = ENVIRON - interact_offline = FALSE - - explosion_resistance = 10 - var/aiControlDisabled = 0 //If 1, AI control is disabled until the AI hacks back in and disables the lock. If 2, the AI has bypassed the lock. If -1, the control is enabled but the AI had bypassed it earlier, so if it is disabled again the AI would have no trouble getting back in. - var/hackProof = 0 // if 1, this door can't be hacked by the AI - var/electrified_until = 0 //World time when the door is no longer electrified. -1 if it is permanently electrified until someone fixes it. - var/main_power_lost_until = 0 //World time when main power is restored. - var/backup_power_lost_until = -1 //World time when backup power is restored. - var/next_beep_at = 0 //World time when we may next beep due to doors being blocked by mobs - var/spawnPowerRestoreRunning = 0 - var/welded = null - var/locked = 0 - var/lock_cut_state = BOLTS_FINE - var/lights = 1 // Lights show by default - var/aiDisabledIdScanner = 0 - var/aiHacking = 0 - var/obj/machinery/door/airlock/closeOther = null - var/closeOtherId = null - var/lockdownbyai = 0 - autoclose = 1 - var/assembly_type = /obj/structure/door_assembly - var/mineral = null - var/justzap = FALSE - var/safe = 1 - normalspeed = 1 - var/obj/item/airlock_electronics/electronics = null - var/hasShocked = 0 //Prevents multiple shocks from happening - var/secured_wires = 0 - - var/open_sound_powered = 'sound/machines/airlock_open.ogg' - var/open_sound_unpowered = 'sound/machines/airlock_open_force.ogg' - var/open_failure_access_denied = 'sound/machines/buzz-two.ogg' - - var/close_sound_powered = 'sound/machines/airlock_close.ogg' - var/close_sound_unpowered = 'sound/machines/airlock_close_force.ogg' - var/close_failure_blocked = 'sound/machines/triple_beep.ogg' - - var/bolts_rising = 'sound/machines/bolts_up.ogg' - var/bolts_dropping = 'sound/machines/bolts_down.ogg' - - var/door_crush_damage = DOOR_CRUSH_DAMAGE - var/obj/item/airlock_brace/brace = null - - //Airlock 2.0 Aesthetics Properties - //The variables below determine what color the airlock and decorative stripes will be -Cakey - var/airlock_type = "Standard" - var/static/list/airlock_icon_cache = list() - var/paintable = AIRLOCK_PAINTABLE|AIRLOCK_STRIPABLE //0 = Not paintable, 1 = Paintable, 3 = Paintable and Stripable, 7 for Paintable, Stripable and Detailable. - var/door_color = null - var/stripe_color = null - var/symbol_color = null - var/window_color = null - var/init_material_window = MATERIAL_GLASS - var/material/window_material - - var/fill_file = 'icons/obj/doors/station/fill_steel.dmi' - var/color_file = 'icons/obj/doors/station/color.dmi' - var/color_fill_file = 'icons/obj/doors/station/fill_color.dmi' - var/stripe_file = 'icons/obj/doors/station/stripe.dmi' - var/stripe_fill_file = 'icons/obj/doors/station/fill_stripe.dmi' - var/glass_file = 'icons/obj/doors/station/fill_glass.dmi' - var/bolts_file = 'icons/obj/doors/station/lights_bolts.dmi' - var/deny_file = 'icons/obj/doors/station/lights_deny.dmi' - var/lights_file = 'icons/obj/doors/station/lights_green.dmi' - var/panel_file = 'icons/obj/doors/station/panel.dmi' - var/sparks_damaged_file = 'icons/obj/doors/station/sparks_damaged.dmi' - var/sparks_broken_file = 'icons/obj/doors/station/sparks_broken.dmi' - var/welded_file = 'icons/obj/doors/station/welded.dmi' - var/emag_file = 'icons/obj/doors/station/emag.dmi' - - uncreated_component_parts = list( - /obj/item/stock_parts/radio/receiver, - /obj/item/stock_parts/power/apc - ) - // To be fleshed out and moved to parent door, but staying minimal for now. - public_methods = list( - /decl/public_access/public_method/toggle_door, - /decl/public_access/public_method/airlock_toggle_bolts - ) - stock_part_presets = list(/decl/stock_part_preset/radio/receiver/airlock = 1) - -/obj/machinery/door/airlock/get_material() - return SSmaterials.get_material_by_name(mineral ? mineral : MATERIAL_STEEL) - -//regular airlock presets - -/obj/machinery/door/airlock/command - door_color = COLOR_COMMAND_BLUE - -/obj/machinery/door/airlock/security - door_color = COLOR_NT_RED - -/obj/machinery/door/airlock/engineering - name = "Maintenance Hatch" - door_color = COLOR_AMBER - -/obj/machinery/door/airlock/medical - door_color = COLOR_WHITE - stripe_color = COLOR_DEEP_SKY_BLUE - -/obj/machinery/door/airlock/virology - door_color = COLOR_WHITE - stripe_color = COLOR_GREEN - -/obj/machinery/door/airlock/mining - name = "Mining Airlock" - door_color = COLOR_PALE_ORANGE - stripe_color = COLOR_BEASTY_BROWN - -/obj/machinery/door/airlock/atmos - door_color = COLOR_AMBER - stripe_color = COLOR_CYAN - -/obj/machinery/door/airlock/research - door_color = COLOR_WHITE - stripe_color = COLOR_BOTTLE_GREEN - -/obj/machinery/door/airlock/science - door_color = COLOR_WHITE - stripe_color = COLOR_VIOLET - -/obj/machinery/door/airlock/sol - door_color = COLOR_BLUE_GRAY - -/obj/machinery/door/airlock/civilian - stripe_color = COLOR_CIVIE_GREEN - -/obj/machinery/door/airlock/chaplain - stripe_color = COLOR_GRAY20 - -/obj/machinery/door/airlock/freezer - name = "Freezer Airlock" - door_color = COLOR_WHITE - -/obj/machinery/door/airlock/maintenance - name = "Maintenance Access" - stripe_color = COLOR_AMBER - -//Glass airlock presets - -/obj/machinery/door/airlock/glass - name = "Glass Airlock" - icon_state = "preview_glass" - hitsound = 'sound/effects/Glasshit.ogg' - maxhealth = 300 - explosion_resistance = 5 - opacity = 0 - glass = 1 - -/obj/machinery/door/airlock/glass/command - door_color = COLOR_COMMAND_BLUE - stripe_color = COLOR_SKY_BLUE - -/obj/machinery/door/airlock/glass/security - door_color = COLOR_NT_RED - stripe_color = COLOR_ORANGE - -/obj/machinery/door/airlock/glass/engineering - door_color = COLOR_AMBER - stripe_color = COLOR_RED - -/obj/machinery/door/airlock/glass/medical - door_color = COLOR_WHITE - stripe_color = COLOR_DEEP_SKY_BLUE - -/obj/machinery/door/airlock/glass/virology - door_color = COLOR_WHITE - stripe_color = COLOR_GREEN - -/obj/machinery/door/airlock/glass/mining - door_color = COLOR_PALE_ORANGE - stripe_color = COLOR_BEASTY_BROWN - -/obj/machinery/door/airlock/glass/atmos - door_color = COLOR_AMBER - stripe_color = COLOR_CYAN - -/obj/machinery/door/airlock/glass/research - door_color = COLOR_WHITE - stripe_color = COLOR_RESEARCH - -/obj/machinery/door/airlock/glass/science - door_color = COLOR_WHITE - stripe_color = COLOR_VIOLET - -/obj/machinery/door/airlock/glass/sol - door_color = COLOR_BLUE_GRAY - stripe_color = COLOR_AMBER - -/obj/machinery/door/airlock/glass/freezer - door_color = COLOR_WHITE - -/obj/machinery/door/airlock/glass/maintenance - name = "Maintenance Access" - stripe_color = COLOR_AMBER - -/obj/machinery/door/airlock/glass/civilian - stripe_color = COLOR_CIVIE_GREEN - -/obj/machinery/door/airlock/external - airlock_type = "External" - name = "External Airlock" - icon = 'icons/obj/doors/external/door.dmi' - fill_file = 'icons/obj/doors/external/fill_steel.dmi' - color_file = 'icons/obj/doors/external/color.dmi' - color_fill_file = 'icons/obj/doors/external/fill_color.dmi' - glass_file = 'icons/obj/doors/external/fill_glass.dmi' - bolts_file = 'icons/obj/doors/external/lights_bolts.dmi' - deny_file = 'icons/obj/doors/external/lights_deny.dmi' - lights_file = 'icons/obj/doors/external/lights_green.dmi' - emag_file = 'icons/obj/doors/external/emag.dmi' - assembly_type = /obj/structure/door_assembly/door_assembly_ext - door_color = COLOR_NT_RED - paintable = AIRLOCK_PAINTABLE - -/obj/machinery/door/airlock/external/inherit_access_from_area() - ..() - if(is_station_area(get_area(src))) - add_access_requirement(req_access, access_external_airlocks) - -/obj/machinery/door/airlock/external/escapepod - name = "Escape Pod" - frequency = 1380 - locked = 1 - -/obj/machinery/door/airlock/external/escapepod/attackby(obj/item/C, mob/user) - if(p_open && !arePowerSystemsOn()) - if(isWrench(C)) - playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1) - user.visible_message(SPAN_WARNING("[user.name] starts frantically pumping the bolt override mechanism!"), SPAN_WARNING("You start frantically pumping the bolt override mechanism!")) - if(do_after(user, 16 SECONDS, src, DO_PUBLIC_UNIQUE)) - visible_message("\The [src] bolts [locked ? "disengage" : "engage"]!") - locked = !locked - return - ..() - -/obj/machinery/door/airlock/external/bolted - locked = 1 - -/obj/machinery/door/airlock/external/bolted/cycling - frequency = 1379 - -/obj/machinery/door/airlock/external/bolted_open - density = FALSE - locked = 1 - opacity = 0 - -/obj/machinery/door/airlock/external/glass - maxhealth = 300 - explosion_resistance = 5 - opacity = 0 - glass = 1 - -/obj/machinery/door/airlock/external/glass/bolted - locked = 1 - -/obj/machinery/door/airlock/external/glass/bolted/cycling - frequency = 1379 - -/obj/machinery/door/airlock/external/glass/bolted_open - density = FALSE - locked = 1 - opacity = 0 - -/obj/machinery/door/airlock/gold - name = "Gold Airlock" - door_color = COLOR_SUN - mineral = MATERIAL_GOLD - -/obj/machinery/door/airlock/crystal - name = "Crystal Airlock" - door_color = COLOR_CRYSTAL - mineral = MATERIAL_CRYSTAL - -/obj/machinery/door/airlock/silver - name = "Silver Airlock" - door_color = COLOR_SILVER - mineral = MATERIAL_SILVER - -/obj/machinery/door/airlock/diamond - name = "Diamond Airlock" - door_color = COLOR_CYAN_BLUE - mineral = MATERIAL_DIAMOND - -/obj/machinery/door/airlock/uranium - name = "Uranium Airlock" - desc = "And they said I was crazy." - door_color = COLOR_PAKISTAN_GREEN - mineral = MATERIAL_URANIUM - var/last_event = 0 - var/rad_power = 7.5 - -/obj/machinery/door/airlock/sandstone - name = "\improper Sandstone Airlock" - door_color = COLOR_BEIGE - mineral = MATERIAL_SANDSTONE - -/obj/machinery/door/airlock/phoron - name = "\improper Phoron Airlock" - desc = "No way this can end badly." - door_color = COLOR_PURPLE - mineral = MATERIAL_PHORON - -/obj/machinery/door/airlock/centcom - airlock_type = "centcomm" - name = "\improper Airlock" - icon = 'icons/obj/doors/centcomm/door.dmi' - fill_file = 'icons/obj/doors/centcomm/fill_steel.dmi' - paintable = AIRLOCK_PAINTABLE|AIRLOCK_STRIPABLE - -/obj/machinery/door/airlock/highsecurity - airlock_type = "secure" - name = "Secure Airlock" - icon = 'icons/obj/doors/secure/door.dmi' - fill_file = 'icons/obj/doors/secure/fill_steel.dmi' - explosion_resistance = 20 - secured_wires = 1 - assembly_type = /obj/structure/door_assembly/door_assembly_highsecurity - paintable = 0 - -/obj/machinery/door/airlock/highsecurity/bolted - locked = 1 - -/obj/machinery/door/airlock/hatch - airlock_type = "hatch" - name = "\improper Airtight Hatch" - icon = 'icons/obj/doors/hatch/door.dmi' - fill_file = 'icons/obj/doors/hatch/fill_steel.dmi' - stripe_file = 'icons/obj/doors/hatch/stripe.dmi' - stripe_fill_file = 'icons/obj/doors/hatch/fill_stripe.dmi' - bolts_file = 'icons/obj/doors/hatch/lights_bolts.dmi' - deny_file = 'icons/obj/doors/hatch/lights_deny.dmi' - lights_file = 'icons/obj/doors/hatch/lights_green.dmi' - panel_file = 'icons/obj/doors/hatch/panel.dmi' - welded_file = 'icons/obj/doors/hatch/welded.dmi' - emag_file = 'icons/obj/doors/hatch/emag.dmi' - explosion_resistance = 20 - opacity = 1 - assembly_type = /obj/structure/door_assembly/door_assembly_hatch - paintable = AIRLOCK_STRIPABLE - -/obj/machinery/door/airlock/hatch/maintenance - name = "Maintenance Hatch" - stripe_color = COLOR_AMBER - -/obj/machinery/door/airlock/hatch/maintenance/bolted - locked = 1 - -/obj/machinery/door/airlock/vault - airlock_type = "vault" - name = "Vault" - icon = 'icons/obj/doors/vault/door.dmi' - fill_file = 'icons/obj/doors/vault/fill_steel.dmi' - explosion_resistance = 20 - opacity = 1 - secured_wires = 1 - assembly_type = /obj/structure/door_assembly/door_assembly_highsecurity //Until somebody makes better sprites. - paintable = AIRLOCK_PAINTABLE|AIRLOCK_STRIPABLE - -/obj/machinery/door/airlock/vault/bolted - locked = 1 - -/obj/machinery/door/airlock/Process() - if(main_power_lost_until > 0 && world.time >= main_power_lost_until) - regainMainPower() - - if(backup_power_lost_until > 0 && world.time >= backup_power_lost_until) - regainBackupPower() - - else if(electrified_until > 0 && world.time >= electrified_until) - electrify(0) - - ..() - -/obj/machinery/door/airlock/uranium/Process() - if(world.time > last_event+20) - if(prob(50)) - SSradiation.radiate(src, rad_power) - last_event = world.time - ..() - -/obj/machinery/door/airlock/phoron/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume) - if(exposed_temperature > 300) - PhoronBurn(exposed_temperature) - -/obj/machinery/door/airlock/phoron/proc/ignite(exposed_temperature) - if(exposed_temperature > 300) - PhoronBurn(exposed_temperature) - -/obj/machinery/door/airlock/phoron/proc/PhoronBurn(temperature) - for(var/turf/simulated/floor/target_tile in range(2,loc)) - target_tile.assume_gas(GAS_PHORON, 35, 400+T0C) - addtimer(CALLBACK(target_tile, /turf/proc/hotspot_expose, 400), 0) - for(var/turf/simulated/wall/W in range(3,src)) - W.burn((temperature/4))//Added so that you can't set off a massive chain reaction with a small flame - for(var/obj/machinery/door/airlock/phoron/D in range(3,src)) - D.ignite(temperature/4) - new/obj/structure/door_assembly( src.loc ) - qdel(src) - -/* -About the new airlock wires panel: -* An airlock wire dialog can be accessed by the normal way or by using wirecutters or a multitool on the door while the wire-panel is open. This would show the following wires, which you can either wirecut/mend or send a multitool pulse through. There are 9 wires. -* one wire from the ID scanner. Sending a pulse through this flashes the red light on the door (if the door has power). If you cut this wire, the door will stop recognizing valid IDs. (If the door has 0000 access, it still opens and closes, though) -* two wires for power. Sending a pulse through either one causes a breaker to trip, disabling the door for 10 seconds if backup power is connected, or 1 minute if not (or until backup power comes back on, whichever is shorter). Cutting either one disables the main door power, but unless backup power is also cut, the backup power re-powers the door in 10 seconds. While unpowered, the door may be open, but bolts-raising will not work. Cutting these wires may electrocute the user. -* one wire for door bolts. Sending a pulse through this drops door bolts (whether the door is powered or not) or raises them (if it is). Cutting this wire also drops the door bolts, and mending it does not raise them. If the wire is cut, trying to raise the door bolts will not work. -* two wires for backup power. Sending a pulse through either one causes a breaker to trip, but this does not disable it unless main power is down too (in which case it is disabled for 1 minute or however long it takes main power to come back, whichever is shorter). Cutting either one disables the backup door power (allowing it to be crowbarred open, but disabling bolts-raising), but may electocute the user. -* one wire for opening the door. Sending a pulse through this while the door has power makes it open the door if no access is required. -* one wire for AI control. Sending a pulse through this blocks AI control for a second or so (which is enough to see the AI control light on the panel dialog go off and back on again). Cutting this prevents the AI from controlling the door unless it has hacked the door through the power connection (which takes about a minute). If both main and backup power are cut, as well as this wire, then the AI cannot operate or hack the door at all. -* one wire for electrifying the door. Sending a pulse through this electrifies the door for 30 seconds. Cutting this wire electrifies the door, so that the next person to touch the door without insulated gloves gets electrocuted. (Currently it is also STAYING electrified until someone mends the wire) -* one wire for controling door safetys. When active, door does not close on someone. When cut, door will ruin someone's shit. When pulsed, door will immedately ruin someone's shit. -* one wire for controlling door speed. When active, dor closes at normal rate. When cut, door does not close manually. When pulsed, door attempts to close every tick. -*/ - -/obj/machinery/door/airlock/bumpopen(mob/living/user as mob) //Airlocks now zap you when you 'bump' them open when they're electrified. --NeoFite - if(!issilicon(usr)) - if(src.isElectrified()) - if(!src.justzap) - if(src.shock(user, 100)) - src.justzap = TRUE - addtimer(CALLBACK(src, .proc/set_justzap, FALSE), 1 SECOND) - return - else - return - else if(prob(10) && src.operating == 0) - var/mob/living/carbon/C = user - if(istype(C) && C.hallucination_power > 25) - to_chat(user, "You feel a powerful shock course through your body!") - user.adjustHalLoss(20) - user.Stun(5) - return - ..(user) - -/obj/machinery/door/airlock/proc/set_justzap(val) - justzap = val - -/obj/machinery/door/airlock/bumpopen(mob/living/simple_animal/user as mob) - ..(user) - -/obj/machinery/door/airlock/proc/isElectrified() - if(src.electrified_until != 0) - return 1 - return 0 - -/obj/machinery/door/airlock/proc/isWireCut(var/wireIndex) - // You can find the wires in the datum folder. - return wires.IsIndexCut(wireIndex) - -/obj/machinery/door/airlock/proc/canAIControl() - return ((src.aiControlDisabled!=1) && (!src.isAllPowerLoss())); - -/obj/machinery/door/airlock/proc/canAIHack() - return ((src.aiControlDisabled==1) && (!hackProof) && (!src.isAllPowerLoss())); - -/obj/machinery/door/airlock/proc/arePowerSystemsOn() - if (stat & (NOPOWER|BROKEN)) - return 0 - return (src.main_power_lost_until==0 || src.backup_power_lost_until==0) - -/obj/machinery/door/airlock/requiresID() - return !(src.isWireCut(AIRLOCK_WIRE_IDSCAN) || aiDisabledIdScanner) - -/obj/machinery/door/airlock/check_access() - if (isWireCut(AIRLOCK_WIRE_IDSCAN) || aiDisabledIdScanner) - return !secured_wires - return ..() - - -/obj/machinery/door/airlock/proc/isAllPowerLoss() - if(stat & (NOPOWER|BROKEN)) - return 1 - if(mainPowerCablesCut() && backupPowerCablesCut()) - return 1 - return 0 - -/obj/machinery/door/airlock/proc/mainPowerCablesCut() - return src.isWireCut(AIRLOCK_WIRE_MAIN_POWER1) || src.isWireCut(AIRLOCK_WIRE_MAIN_POWER2) - -/obj/machinery/door/airlock/proc/backupPowerCablesCut() - return src.isWireCut(AIRLOCK_WIRE_BACKUP_POWER1) || src.isWireCut(AIRLOCK_WIRE_BACKUP_POWER2) - -/obj/machinery/door/airlock/proc/loseMainPower() - main_power_lost_until = mainPowerCablesCut() ? -1 : world.time + SecondsToTicks(60) - - // If backup power is permanently disabled then activate in 10 seconds if possible, otherwise it's already enabled or a timer is already running - if(backup_power_lost_until == -1 && !backupPowerCablesCut()) - backup_power_lost_until = world.time + SecondsToTicks(10) - - // Disable electricity if required - if(electrified_until && isAllPowerLoss()) - electrify(0) - - update_icon() - -/obj/machinery/door/airlock/proc/loseBackupPower() - backup_power_lost_until = backupPowerCablesCut() ? -1 : world.time + SecondsToTicks(60) - - // Disable electricity if required - if(electrified_until && isAllPowerLoss()) - electrify(0) - - update_icon() - -/obj/machinery/door/airlock/proc/regainMainPower() - if(!mainPowerCablesCut()) - main_power_lost_until = 0 - // If backup power is currently active then disable, otherwise let it count down and disable itself later - if(!backup_power_lost_until) - backup_power_lost_until = -1 - - update_icon() - -/obj/machinery/door/airlock/proc/regainBackupPower() - if(!backupPowerCablesCut()) - // Restore backup power only if main power is offline, otherwise permanently disable - backup_power_lost_until = main_power_lost_until == 0 ? -1 : 0 - - update_icon() - -/obj/machinery/door/airlock/proc/electrify(var/duration, var/feedback = 0) - var/message = "" - if(src.isWireCut(AIRLOCK_WIRE_ELECTRIFY) && arePowerSystemsOn()) - message = text("The electrification wire is cut - Door permanently electrified.") - src.electrified_until = -1 - . = 1 - else if(duration && !arePowerSystemsOn()) - message = text("The door is unpowered - Cannot electrify the door.") - src.electrified_until = 0 - else if(!duration && electrified_until != 0) - message = "The door is now un-electrified." - src.electrified_until = 0 - else if(duration) //electrify door for the given duration seconds - if(usr) - shockedby += text("\[[time_stamp()]\] - [key_name(usr)]") - admin_attacker_log(usr, "electrified \the [name] [duration == -1 ? "permanently" : "for [duration] second\s"]") - else - shockedby += text("\[[time_stamp()]\] - EMP)") - message = "The door is now electrified [duration == -1 ? "permanently" : "for [duration] second\s"]." - src.electrified_until = duration == -1 ? -1 : world.time + SecondsToTicks(duration) - . = 1 - - if(feedback && message) - to_chat(usr, message) - if(.) - playsound(src, 'sound/effects/sparks3.ogg', 30, 0, -6) - -/obj/machinery/door/airlock/proc/set_idscan(var/activate, var/feedback = 0) - var/message = "" - if(src.isWireCut(AIRLOCK_WIRE_IDSCAN)) - message = "The IdScan wire is cut - IdScan feature permanently disabled." - else if(activate && src.aiDisabledIdScanner) - src.aiDisabledIdScanner = 0 - message = "IdScan feature has been enabled." - else if(!activate && !src.aiDisabledIdScanner) - src.aiDisabledIdScanner = 1 - message = "IdScan feature has been disabled." - - if(feedback && message) - to_chat(usr, message) - -/obj/machinery/door/airlock/proc/set_safeties(var/activate, var/feedback = 0) - var/message = "" - // Safeties! We don't need no stinking safeties! - if (src.isWireCut(AIRLOCK_WIRE_SAFETY)) - message = text("The safety wire is cut - Cannot enable safeties.") - else if (!activate && src.safe) - safe = 0 - else if (activate && !src.safe) - safe = 1 - - if(feedback && message) - to_chat(usr, message) - -// shock user with probability prb (if all connections & power are working) -// returns 1 if shocked, 0 otherwise -// The preceding comment was borrowed from the grille's shock script -/obj/machinery/door/airlock/shock(mob/user, prb) - if(!arePowerSystemsOn()) - return 0 - if(hasShocked) - return 0 //Already shocked someone recently? - if(..()) - hasShocked = 1 - sleep(10) - hasShocked = 0 - return 1 - else - return 0 - - -/obj/machinery/door/airlock/on_update_icon(state=0, override=0) - if(connections in list(NORTH, SOUTH, NORTH|SOUTH)) - if(connections in list(WEST, EAST, EAST|WEST)) - set_dir(SOUTH) - else - set_dir(EAST) - else - set_dir(SOUTH) - - switch(state) - if(0) - if(density) - icon_state = "closed" - state = AIRLOCK_CLOSED - else - icon_state = "open" - state = AIRLOCK_OPEN - if(AIRLOCK_OPEN) - icon_state = "open" - if(AIRLOCK_CLOSED) - icon_state = "closed" - if(AIRLOCK_OPENING, AIRLOCK_CLOSING, AIRLOCK_EMAG, AIRLOCK_DENY) - icon_state = "" - - set_airlock_overlays(state) - -/obj/machinery/door/airlock/proc/set_airlock_overlays(state) - var/icon/color_overlay - var/icon/filling_overlay - var/icon/stripe_overlay - var/icon/stripe_filling_overlay - var/icon/lights_overlay - var/icon/panel_overlay - var/icon/weld_overlay - var/icon/damage_overlay - var/icon/sparks_overlay - var/icon/brace_overlay - - set_light(0) - - if(door_color && !(door_color == "none")) - var/ikey = "[airlock_type]-[door_color]-color" - color_overlay = airlock_icon_cache["[ikey]"] - if(!color_overlay) - color_overlay = new(color_file) - color_overlay.Blend(door_color, ICON_MULTIPLY) - airlock_icon_cache["[ikey]"] = color_overlay - if(glass) - if (window_color && window_color != "none") - var/ikey = "[airlock_type]-[window_color]-windowcolor" - filling_overlay = airlock_icon_cache["[ikey]"] - if (!filling_overlay) - filling_overlay = new(glass_file) - filling_overlay.Blend(window_color, ICON_MULTIPLY) - airlock_icon_cache["[ikey]"] = filling_overlay - else - filling_overlay = glass_file - else - if(door_color && !(door_color == "none")) - var/ikey = "[airlock_type]-[door_color]-fillcolor" - filling_overlay = airlock_icon_cache["[ikey]"] - if(!filling_overlay) - filling_overlay = new(color_fill_file) - filling_overlay.Blend(door_color, ICON_MULTIPLY) - airlock_icon_cache["[ikey]"] = filling_overlay - else - filling_overlay = fill_file - if(stripe_color && !(stripe_color == "none")) - var/ikey = "[airlock_type]-[stripe_color]-stripe" - stripe_overlay = airlock_icon_cache["[ikey]"] - if(!stripe_overlay) - stripe_overlay = new(stripe_file) - stripe_overlay.Blend(stripe_color, ICON_MULTIPLY) - airlock_icon_cache["[ikey]"] = stripe_overlay - if(!glass) - var/ikey2 = "[airlock_type]-[stripe_color]-fillstripe" - stripe_filling_overlay = airlock_icon_cache["[ikey2]"] - if(!stripe_filling_overlay) - stripe_filling_overlay = new(stripe_fill_file) - stripe_filling_overlay.Blend(stripe_color, ICON_MULTIPLY) - airlock_icon_cache["[ikey2]"] = stripe_filling_overlay - - if(arePowerSystemsOn()) - switch(state) - if(AIRLOCK_CLOSED) - if(lights && locked) - lights_overlay = bolts_file - set_light(0.25, 0.1, 1, 2, COLOR_RED_LIGHT) - - if(AIRLOCK_DENY) - if(lights) - lights_overlay = deny_file - set_light(0.25, 0.1, 1, 2, COLOR_RED_LIGHT) - - if(AIRLOCK_EMAG) - sparks_overlay = emag_file - - if(AIRLOCK_CLOSING) - if(lights) - lights_overlay = lights_file - set_light(0.25, 0.1, 1, 2, COLOR_LIME) - - if(AIRLOCK_OPENING) - if(lights) - lights_overlay = lights_file - set_light(0.25, 0.1, 1, 2, COLOR_LIME) - - if(stat & BROKEN) - damage_overlay = sparks_broken_file - else if(health < maxhealth * 3/4) - damage_overlay = sparks_damaged_file - - if(welded) - weld_overlay = welded_file - - if(p_open) - panel_overlay = panel_file - - if(brace) - brace.update_icon() - brace_overlay += image(brace.icon, brace.icon_state) - - overlays.Cut() - - overlays += color_overlay - overlays += filling_overlay - overlays += stripe_overlay - overlays += stripe_filling_overlay - overlays += panel_overlay - overlays += weld_overlay - overlays += brace_overlay - overlays += lights_overlay - overlays += sparks_overlay - overlays += damage_overlay - -/obj/machinery/door/airlock/do_animate(animation) - if(overlays) - overlays.Cut() - - switch(animation) - if("opening") - set_airlock_overlays(AIRLOCK_OPENING) - flick("opening", src)//[stat ? "_stat":] - update_icon(AIRLOCK_OPEN) - if("closing") - set_airlock_overlays(AIRLOCK_CLOSING) - flick("closing", src) - update_icon(AIRLOCK_CLOSED) - if("deny") - set_airlock_overlays(AIRLOCK_DENY) - if(density && arePowerSystemsOn()) - flick("deny", src) - if(secured_wires && world.time > next_clicksound) - next_clicksound = world.time + CLICKSOUND_INTERVAL - playsound(loc, open_failure_access_denied, 50, 0) - update_icon(AIRLOCK_CLOSED) - if("emag") - set_airlock_overlays(AIRLOCK_EMAG) - if(density && arePowerSystemsOn()) - flick("deny", src) - else - update_icon() - return - -/obj/machinery/door/airlock/attack_robot(mob/user) - ui_interact(user) - -/obj/machinery/door/airlock/attack_ai(mob/user) - ui_interact(user) - -/obj/machinery/door/airlock/attack_ghost(mob/user) - ui_interact(user) - -/obj/machinery/door/airlock/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1, var/datum/topic_state/state = GLOB.default_state) - var/data[0] - - data["main_power_loss"] = round(main_power_lost_until > 0 ? max(main_power_lost_until - world.time, 0) / 10 : main_power_lost_until, 1) - data["backup_power_loss"] = round(backup_power_lost_until > 0 ? max(backup_power_lost_until - world.time, 0) / 10 : backup_power_lost_until, 1) - data["electrified"] = round(electrified_until > 0 ? max(electrified_until - world.time, 0) / 10 : electrified_until, 1) - data["open"] = !density - - var/commands[0] - commands[++commands.len] = list("name" = "IdScan", "command"= "idscan", "active" = !aiDisabledIdScanner, "enabled" = "Enabled", "disabled" = "Disable", "danger" = 0, "act" = 1) - commands[++commands.len] = list("name" = "Bolts", "command"= "bolts", "active" = !locked, "enabled" = "Raised ", "disabled" = "Dropped", "danger" = 0, "act" = 0) - commands[++commands.len] = list("name" = "Lights", "command"= "lights", "active" = lights, "enabled" = "Enabled", "disabled" = "Disable", "danger" = 0, "act" = 1) - commands[++commands.len] = list("name" = "Safeties", "command"= "safeties", "active" = safe, "enabled" = "Nominal", "disabled" = "Overridden", "danger" = 1, "act" = 0) - commands[++commands.len] = list("name" = "Timing", "command"= "timing", "active" = normalspeed, "enabled" = "Nominal", "disabled" = "Overridden", "danger" = 1, "act" = 0) - commands[++commands.len] = list("name" = "Door State", "command"= "open", "active" = density, "enabled" = "Closed", "disabled" = "Opened", "danger" = 0, "act" = 0) - - data["commands"] = commands - - ui = SSnano.try_update_ui(user, src, ui_key, ui, data, force_open) - if (!ui) - ui = new(user, src, ui_key, "door_control.tmpl", "Door Controls", 450, 350, state = state) - ui.set_initial_data(data) - ui.open() - ui.set_auto_update(1) - -/obj/machinery/door/airlock/proc/hack(mob/user as mob) - if(src.aiHacking==0) - src.aiHacking=1 - spawn(20) - //TODO: Make this take a minute - to_chat(user, "Airlock AI control has been blocked. Beginning fault-detection.") - sleep(50) - if(src.canAIControl()) - to_chat(user, "Alert cancelled. Airlock control has been restored without our assistance.") - src.aiHacking=0 - return - else if(!src.canAIHack(user)) - to_chat(user, "We've lost our connection! Unable to hack airlock.") - src.aiHacking=0 - return - to_chat(user, "Fault confirmed: airlock control wire disabled or cut.") - sleep(20) - to_chat(user, "Attempting to hack into airlock. This may take some time.") - sleep(200) - if(src.canAIControl()) - to_chat(user, "Alert cancelled. Airlock control has been restored without our assistance.") - src.aiHacking=0 - return - else if(!src.canAIHack(user)) - to_chat(user, "We've lost our connection! Unable to hack airlock.") - src.aiHacking=0 - return - to_chat(user, "Upload access confirmed. Loading control program into airlock software.") - sleep(170) - if(src.canAIControl()) - to_chat(user, "Alert cancelled. Airlock control has been restored without our assistance.") - src.aiHacking=0 - return - else if(!src.canAIHack(user)) - to_chat(user, "We've lost our connection! Unable to hack airlock.") - src.aiHacking=0 - return - to_chat(user, "Transfer complete. Forcing airlock to execute program.") - sleep(50) - //disable blocked control - src.aiControlDisabled = 2 - to_chat(user, "Receiving control information from airlock.") - sleep(10) - //bring up airlock dialog - src.aiHacking = 0 - if (user) - src.attack_ai(user) - -/obj/machinery/door/airlock/CanPass(atom/movable/mover, turf/target, height=0, air_group=0) - if (src.isElectrified()) - if (istype(mover, /obj/item)) - var/obj/item/i = mover - if (i.matter && (MATERIAL_STEEL in i.matter) && i.matter[MATERIAL_STEEL] > 0) - var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread - s.set_up(5, 1, src) - s.start() - return ..() - -/obj/machinery/door/airlock/physical_attack_hand(mob/user) - if(!istype(usr, /mob/living/silicon)) - if(src.isElectrified()) - if(src.shock(user, 100)) - return TRUE - -/obj/machinery/door/airlock/CanUseTopic(var/mob/user) - if(operating < 0) //emagged - to_chat(user, "Unable to interface: Internal error.") - return STATUS_CLOSE - if(issilicon(user) && !src.canAIControl()) - if(src.canAIHack(user)) - src.hack(user) - else - if (src.isAllPowerLoss()) //don't really like how this gets checked a second time, but not sure how else to do it. - to_chat(user, "Unable to interface: Connection timed out.") - else - to_chat(user, "Unable to interface: Connection refused.") - return STATUS_CLOSE - - return ..() - -/obj/machinery/door/airlock/Topic(href, href_list) - if(..()) - return 1 - - var/activate = text2num(href_list["activate"]) - switch (href_list["command"]) - if("idscan") - set_idscan(activate, 1) - if("main_power") - if(!main_power_lost_until) - src.loseMainPower() - if("backup_power") - if(!backup_power_lost_until) - src.loseBackupPower() - if("bolts") - if(src.isWireCut(AIRLOCK_WIRE_DOOR_BOLTS)) - to_chat(usr, "The door bolt control wire is cut - Door bolts permanently dropped.") - else if(activate && src.lock()) - to_chat(usr, "The door bolts have been dropped.") - else if(!activate && src.unlock()) - to_chat(usr, "The door bolts have been raised.") - if("electrify_temporary") - electrify(30 * activate, 1) - if("electrify_permanently") - electrify(-1 * activate, 1) - if("open") - if(src.welded) - to_chat(usr, text("The airlock has been welded shut!")) - else if(src.locked) - to_chat(usr, text("The door bolts are down!")) - else if(activate && density) - open() - else if(!activate && !density) - close() - if("safeties") - set_safeties(!activate, 1) - if("timing") - // Door speed control - if(src.isWireCut(AIRLOCK_WIRE_SPEED)) - to_chat(usr, text("The timing wire is cut - Cannot alter timing.")) - else if (activate && src.normalspeed) - normalspeed = 0 - else if (!activate && !src.normalspeed) - normalspeed = 1 - if("lights") - // Lights - if(src.isWireCut(AIRLOCK_WIRE_LIGHT)) - to_chat(usr, "The lights wire is cut - The door lights are permanently disabled.") - else if (!activate && src.lights) - lights = 0 - to_chat(usr, "The door lights have been disabled.") - else if (activate && !src.lights) - lights = 1 - to_chat(usr, "The door lights have been enabled.") - - update_icon() - return 1 - -//returns 1 on success, 0 on failure -/obj/machinery/door/airlock/proc/cut_bolts(var/obj/item/item, var/mob/user) - var/cut_delay = (15 SECONDS) - var/cut_verb - var/cut_sound - - if(isWelder(item)) - var/obj/item/weldingtool/WT = item - if(!WT.remove_fuel(0,user)) - return 0 - cut_verb = "cutting" - cut_sound = 'sound/items/Welder.ogg' - else if(istype(item,/obj/item/gun/energy/plasmacutter)) //They could probably just shoot them out, but who cares! - var/obj/item/gun/energy/plasmacutter/cutter = item - if(!cutter.slice(user)) - return 0 - cut_verb = "cutting" - cut_sound = 'sound/items/Welder.ogg' - cut_delay *= 0.66 - else if(istype(item,/obj/item/melee/energy/blade) || istype(item,/obj/item/melee/energy/sword)) - cut_verb = "slicing" - cut_sound = "sparks" - cut_delay *= 0.66 - else if(istype(item,/obj/item/circular_saw)) - cut_verb = "sawing" - cut_sound = 'sound/weapons/circsawhit.ogg' - cut_delay *= 1.5 - - else if(istype(item,/obj/item/material/twohanded/fireaxe)) - //special case - zero delay, different message - if (src.lock_cut_state == BOLTS_EXPOSED) - return 0 //can't actually cut the bolts, go back to regular smashing - var/obj/item/material/twohanded/fireaxe/F = item - if (!F.wielded) - return 0 - user.visible_message( - "\The [user] smashes the bolt cover open!", - "You smash the bolt cover open!" - ) - playsound(src, 'sound/weapons/smash.ogg', 100, 1) - src.lock_cut_state = BOLTS_EXPOSED - return 0 - - else - // I guess you can't cut bolts with that item. Never mind then. - return 0 - - if (src.lock_cut_state == BOLTS_FINE) - user.visible_message( - "\The [user] begins [cut_verb] through the bolt cover on [src].", - "You begin [cut_verb] through the bolt cover." - ) - - playsound(src, cut_sound, 100, 1) - if (do_after(user, cut_delay, src, DO_DEFAULT | DO_USER_UNIQUE_ACT | DO_PUBLIC_PROGRESS)) - user.visible_message( - "\The [user] removes the bolt cover from [src]", - "You remove the cover and expose the door bolts." - ) - src.lock_cut_state = BOLTS_EXPOSED - return 1 - - if (src.lock_cut_state == BOLTS_EXPOSED) - user.visible_message( - "\The [user] begins [cut_verb] through [src]'s bolts.", - "You begin [cut_verb] through the door bolts." - ) - playsound(src, cut_sound, 100, 1) - if (do_after(user, cut_delay, src, DO_DEFAULT | DO_USER_UNIQUE_ACT | DO_PUBLIC_PROGRESS)) - user.visible_message( - "\The [user] severs the door bolts, unlocking [src].", - "You sever the door bolts, unlocking the door." - ) - src.lock_cut_state = BOLTS_CUT - src.unlock(1) //force it - return 1 - -/obj/machinery/door/airlock/attackby(var/obj/item/C, var/mob/user) - // Brace is considered installed on the airlock, so interacting with it is protected from electrification. - if(brace && C && (istype(C.GetIdCard(), /obj/item/card/id) || istype(C, /obj/item/crowbar/brace_jack))) - return brace.attackby(C, user) - - if(!brace && istype(C, /obj/item/airlock_brace)) - var/obj/item/airlock_brace/A = C - if(!density) - to_chat(user, "You must close \the [src] before installing \the [A]!") - return - - if(!length(A.req_access) && (alert("\the [A]'s 'Access Not Set' light is flashing. Install it anyway?", "Access not set", "Yes", "No") == "No")) - return - - playsound(user, 'sound/machines/lockreset.ogg', 50, 1) - if(do_after(user, 6 SECONDS, src, DO_PUBLIC_UNIQUE) && density && A && user.unEquip(A, src)) - to_chat(user, "You successfully install \the [A].") - brace = A - brace.airlock = src - update_icon() - return - - if(!istype(usr, /mob/living/silicon)) - if(src.isElectrified()) - if(src.shock(user, 75)) - return - if(istype(C, /obj/item/taperoll)) - return - - if (!repairing && (stat & BROKEN) && src.locked) //bolted and broken - if (!cut_bolts(C,user)) - ..() - return - - if(!repairing && isWelder(C) && !( operating > 0 ) && density) - var/obj/item/weldingtool/W = C - if(!W.remove_fuel(0,user)) - to_chat(user, SPAN_NOTICE("Your [W.name] doesn't have enough fuel.")) - return - playsound(src, 'sound/items/Welder.ogg', 50, 1) - user.visible_message(SPAN_WARNING("\The [user] begins welding \the [src] [welded ? "open" : "closed"]!"), - SPAN_NOTICE("You begin welding \the [src] [welded ? "open" : "closed"].")) - if(do_after(user, (rand(3,5)) SECONDS, src, DO_DEFAULT | DO_USER_UNIQUE_ACT | DO_PUBLIC_PROGRESS)) - if(density && !(operating > 0) && !repairing) - playsound(src, 'sound/items/Welder2.ogg', 50, 1) - welded = !welded - update_icon() - return - else - to_chat(user, SPAN_NOTICE("You must remain still to complete this task.")) - return - else if(isScrewdriver(C)) - if (src.p_open) - if (stat & BROKEN) - to_chat(user, "The panel is broken, and cannot be closed.") - else - src.p_open = 0 - user.visible_message(SPAN_NOTICE("[user.name] closes the maintenance panel on \the [src]."), SPAN_NOTICE("You close the maintenance panel on \the [src].")) - playsound(src.loc, "[GLOB.machinery_exposed_sound[1]]", 20) - else - src.p_open = 1 - user.visible_message(SPAN_NOTICE("[user.name] opens the maintenance panel on \the [src]."), SPAN_NOTICE("You open the maintenance panel on \the [src].")) - playsound(src.loc, "[GLOB.machinery_exposed_sound[1]]", 20) - src.update_icon() - else if(isWirecutter(C)) - return src.attack_hand(user) - else if(isMultitool(C)) - return src.attack_hand(user) - else if(istype(C, /obj/item/device/assembly/signaler)) - return src.attack_hand(user) - else if(istype(C, /obj/item/pai_cable)) // -- TLE - var/obj/item/pai_cable/cable = C - cable.plugin(src, user) - else if(!repairing && isCrowbar(C)) - if(src.p_open && (operating < 0 || (!operating && welded && !src.arePowerSystemsOn() && density && !src.locked)) && !brace) - playsound(src.loc, 'sound/items/Crowbar.ogg', 100, 1) - user.visible_message("[user] removes the electronics from the airlock assembly.", "You start to remove electronics from the airlock assembly.") - if(do_after(user, 4 SECONDS, src, DO_PUBLIC_UNIQUE)) - to_chat(user, "You've removed the airlock electronics!") - deconstruct(user) - return - else if(arePowerSystemsOn()) - to_chat(user, "The airlock's motors resist your efforts to force it.") - else if(locked) - to_chat(user, "The airlock's bolts prevent it from being forced.") - else if(brace) - to_chat(user, "The airlock's brace holds it firmly in place.") - else - if(density) - spawn(0) open(1) - else - spawn(0) close(1) - - //if door is unbroken, hit with fire axe using harm intent - else if (istype(C, /obj/item/material/twohanded/fireaxe) && !(stat & BROKEN) && user.a_intent == I_HURT) - var/obj/item/material/twohanded/fireaxe/F = C - if (F.wielded) - playsound(src, 'sound/weapons/smash.ogg', 100, 1) - health -= F.force_wielded * 2 - if(health <= 0) - user.visible_message(SPAN_DANGER("[user] smashes \the [C] into the airlock's control panel! It explodes in a shower of sparks!"), SPAN_DANGER("You smash \the [C] into the airlock's control panel! It explodes in a shower of sparks!")) - health = 0 - set_broken(TRUE) - else - user.visible_message(SPAN_DANGER("[user] smashes \the [C] into the airlock's control panel!")) - else - ..() - return - - else if(istype(C, /obj/item/material/twohanded/fireaxe) && !arePowerSystemsOn()) - if(locked) - to_chat(user, "The airlock's bolts prevent it from being forced.") - else if( !welded && !operating ) - if(density) - var/obj/item/material/twohanded/fireaxe/F = C - if(F.wielded) - spawn(0) open(1) - else - to_chat(user, "You need to be wielding \the [C] to do that.") - else - var/obj/item/material/twohanded/fireaxe/F = C - if(F.wielded) - spawn(0) close(1) - else - to_chat(user, "You need to be wielding \the [C] to do that.") - - else if(istype(C, /obj/item/device/paint_sprayer)) - return - else if((stat & (BROKEN|NOPOWER)) && istype(user, /mob/living/simple_animal)) - var/mob/living/simple_animal/A = user - var/obj/item/I = A.get_natural_weapon() - if(I.force >= 10) - if(density) - visible_message(SPAN_DANGER("\The [A] forces \the [src] open!")) - open(1) - else - visible_message(SPAN_DANGER("\The [A] forces \the [src] closed!")) - close(1) - else - visible_message(SPAN_NOTICE("\The [A] strains fruitlessly to force \the [src] [density ? "open" : "closed"].")) - return - else - ..() - return - -/obj/machinery/door/airlock/deconstruct(mob/user, var/moved = FALSE) - var/obj/structure/door_assembly/da = new assembly_type(src.loc) - if (istype(da, /obj/structure/door_assembly/multi_tile)) - da.set_dir(src.dir) - if(mineral) - da.glass = mineral - //else if(glass) - else if(glass && !da.glass) - da.glass = 1 - - da.paintable = paintable - da.door_color = door_color - da.stripe_color = stripe_color - da.symbol_color = symbol_color - - if(moved) - var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread - s.set_up(5, 1, src) - s.start() - else - da.anchored = TRUE - da.state = 1 - da.created_name = src.name - da.update_state() - - if(operating == -1 || (stat & BROKEN)) - new /obj/item/stock_parts/circuitboard/broken(src.loc) - operating = 0 - else - if (!electronics) - create_electronics() - - electronics.dropInto(loc) - electronics = null - - qdel(src) - - return da -/obj/machinery/door/airlock/phoron/attackby(C as obj, mob/user as mob) - if(C) - ignite(is_hot(C)) - ..() - -/obj/machinery/door/airlock/set_broken(new_state) - . = ..() - if(. && new_state) - p_open = 1 - if (secured_wires) - lock() - visible_message("\The [src]'s control panel bursts open, sparks spewing out!") - var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread - s.set_up(5, 1, src) - s.start() - -/obj/machinery/door/airlock/open(var/forced=0) - if(!can_open(forced)) - return 0 - use_power_oneoff(360) //360 W seems much more appropriate for an actuator moving an industrial door capable of crushing people - - //if the door is unpowered then it doesn't make sense to hear the woosh of a pneumatic actuator - if(arePowerSystemsOn()) - playsound(src.loc, open_sound_powered, 100, 1) - else - playsound(src.loc, open_sound_unpowered, 100, 1) - - if(src.closeOther != null && istype(src.closeOther, /obj/machinery/door/airlock) && !src.closeOther.density) - src.closeOther.close() - return ..() - -/obj/machinery/door/airlock/can_open(var/forced=0) - if(brace) - return 0 - - if(!forced) - if(!arePowerSystemsOn() || isWireCut(AIRLOCK_WIRE_OPEN_DOOR)) - return 0 - - if(locked || welded) - return 0 - return ..() - -/obj/machinery/door/airlock/can_close(var/forced=0) - if(locked || welded) - return 0 - - if(!forced) - //despite the name, this wire is for general door control. - if(!arePowerSystemsOn() || isWireCut(AIRLOCK_WIRE_OPEN_DOOR)) - return 0 - - return ..() - -/obj/machinery/door/airlock/close(var/forced=0) - if(!can_close(forced)) - return 0 - - if(safe) - for(var/turf/turf in locs) - for(var/atom/movable/AM in turf) - if(AM.blocks_airlock()) - if(world.time > next_beep_at) - playsound(src.loc, close_failure_blocked, 30, 0, -3) - next_beep_at = world.time + SecondsToTicks(10) - close_door_at = world.time + 6 - return - - for(var/turf/turf in locs) - for(var/atom/movable/AM in turf) - if(AM.airlock_crush(door_crush_damage)) - take_damage(door_crush_damage) - use_power_oneoff(door_crush_damage * 100) // Uses bunch extra power for crushing the target. - - use_power_oneoff(360) //360 W seems much more appropriate for an actuator moving an industrial door capable of crushing people - if(arePowerSystemsOn()) - playsound(src.loc, close_sound_powered, 100, 1) - else - playsound(src.loc, close_sound_unpowered, 100, 1) - - ..() - -/obj/machinery/door/airlock/proc/lock(var/forced=0) - if(locked) - return 0 - - if (operating && !forced) return 0 - - if (lock_cut_state == BOLTS_CUT) return 0 //what bolts? - - src.locked = 1 - playsound(src, bolts_dropping, 30, 0, -6) - audible_message("You hear a click from the bottom of the door.", hearing_distance = 1) - update_icon() - return 1 - -/obj/machinery/door/airlock/proc/unlock(var/forced=0) - if(!src.locked) - return - - if (!forced) - if(operating || !src.arePowerSystemsOn() || isWireCut(AIRLOCK_WIRE_DOOR_BOLTS)) - return - - src.locked = 0 - playsound(src, bolts_rising, 30, 0, -6) - audible_message("You hear a click from the bottom of the door.", hearing_distance = 1) - update_icon() - return 1 - -/obj/machinery/door/airlock/proc/toggle_lock(var/forced = 0) - return locked ? unlock() : lock() - -/obj/machinery/door/airlock/allowed(mob/M) - if(locked) - return 0 - return ..(M) - -/obj/machinery/door/airlock/New(var/newloc, var/obj/structure/door_assembly/assembly=null) - ..() - - //if assembly is given, create the new door from the assembly - if (assembly && istype(assembly)) - assembly_type = assembly.type - - electronics = assembly.electronics - electronics.forceMove(src) - - //update the door's access to match the electronics' - if(electronics.autoset) - autoset_access = TRUE - else - req_access = electronics.conf_access - if(electronics.one_access) - req_access = list(req_access) - autoset_access = FALSE // We just set it, so don't try and do anything fancy later. - secured_wires = electronics.secure - - //get the name from the assembly - if(assembly.created_name) - SetName(assembly.created_name) - else - SetName("[istext(assembly.glass) ? "[assembly.glass] airlock" : assembly.base_name]") - - //get the dir from the assembly - set_dir(assembly.dir) - - if(assembly) - paintable = assembly.paintable - door_color = assembly.door_color - stripe_color = assembly.stripe_color - symbol_color = assembly.symbol_color - queue_icon_update() - - //wires - var/turf/T = get_turf(newloc) - if(T && (T.z in GLOB.using_map.admin_levels)) - secured_wires = 1 - if (secured_wires) - wires = new/datum/wires/airlock/secure(src) - else - wires = new/datum/wires/airlock(src) - -/obj/machinery/door/airlock/Initialize() - if(src.closeOtherId != null) - for (var/obj/machinery/door/airlock/A in world) - if(A.closeOtherId == src.closeOtherId && A != src) - src.closeOther = A - break - var/turf/T = loc - var/obj/item/airlock_brace/A = locate(/obj/item/airlock_brace) in T - if(!brace && A) - brace = A - brace.airlock = src - brace.forceMove(src) - if(brace.electronics && !length(brace.req_access)) - brace.electronics.set_access(src) - brace.update_access() - update_icon() - if (glass) - paintable |= AIRLOCK_WINDOW_PAINTABLE - window_material = SSmaterials.get_material_by_name(init_material_window) - if (!window_color) - window_color = window_material.icon_colour - . = ..() - -/obj/machinery/door/airlock/Destroy() - if(brace) - qdel(brace) - return ..() - -/obj/machinery/door/airlock/create_electronics(var/electronics_type = /obj/item/airlock_electronics) - if (secured_wires) - electronics_type = /obj/item/airlock_electronics/secure - electronics = ..() - return electronics - -/obj/machinery/door/airlock/emp_act(var/severity) - if(prob(20/severity)) - spawn(0) - open() - if(prob(40/severity)) - var/duration = SecondsToTicks(30 / severity) - if(electrified_until > -1 && (duration + world.time) > electrified_until) - electrify(duration) - ..() - -/obj/machinery/door/airlock/power_change() //putting this is obj/machinery/door itself makes non-airlock doors turn invisible for some reason - . = ..() - if(stat & NOPOWER) - // If we lost power, disable electrification - electrified_until = 0 - -/obj/machinery/door/airlock/proc/prison_open() - if(arePowerSystemsOn()) - src.unlock() - src.open() - src.lock() - return - -// Braces can act as an extra layer of armor - they will take damage first. -/obj/machinery/door/airlock/take_damage(var/amount) - if(brace) - brace.take_damage(amount) - else - ..(amount) - update_icon() - -/obj/machinery/door/airlock/examine(mob/user) - . = ..() - if (lock_cut_state == BOLTS_EXPOSED) - to_chat(user, "The bolt cover has been cut open.") - if (lock_cut_state == BOLTS_CUT) - to_chat(user, "The door bolts have been cut.") - if(brace) - to_chat(user, "\The [brace] is installed on \the [src], preventing it from opening.") - to_chat(user, brace.examine_health()) - -/obj/machinery/door/airlock/autoname - -/obj/machinery/door/airlock/autoname/New() - var/area/A = get_area(src) - name = A.name - ..() - -/obj/machinery/door/airlock/proc/paint_airlock(var/paint_color) - door_color = paint_color - update_icon() - -/obj/machinery/door/airlock/proc/stripe_airlock(var/paint_color) - stripe_color = paint_color - update_icon() - -/obj/machinery/door/airlock/proc/paint_window(paint_color) - if (paint_color) - window_color = paint_color - else if (window_material?.icon_colour) - window_color = window_material.icon_colour - else - window_color = GLASS_COLOR - update_icon() - -// Public access - -/decl/public_access/public_method/airlock_toggle_bolts - name = "toggle bolts" - desc = "Toggles whether the airlock is bolted or not, if possible." - call_proc = /obj/machinery/door/airlock/proc/toggle_lock - -/decl/stock_part_preset/radio/receiver/airlock - frequency = AIRLOCK_FREQ - receive_and_call = list( - "toggle_door" = /decl/public_access/public_method/toggle_door, - "toggle_bolts" = /decl/public_access/public_method/airlock_toggle_bolts - ) diff --git a/code/game/machinery/doors/airlock_control.dm b/code/game/machinery/doors/airlock_control.dm deleted file mode 100644 index 537a8c1ef2e54..0000000000000 --- a/code/game/machinery/doors/airlock_control.dm +++ /dev/null @@ -1,300 +0,0 @@ -#define AIRLOCK_CONTROL_RANGE 22 - -// This code allows for airlocks to be controlled externally by setting an id_tag and comm frequency (disables ID access) -/obj/machinery/door/airlock - var/frequency - var/shockedby = list() - var/datum/radio_frequency/radio_connection - var/cur_command = null //the command the door is currently attempting to complete - -/obj/machinery/door/airlock/Process() - if (arePowerSystemsOn()) - execute_current_command() - return ..() - -/obj/machinery/door/airlock/receive_signal(datum/signal/signal) - if(!signal || signal.encryption) return - - if(id_tag != signal.data["tag"] || !signal.data["command"]) return - - command(signal.data["command"]) - -/obj/machinery/door/airlock/proc/command(var/new_command) - cur_command = new_command - - //if there's no power, recieve the signal but just don't do anything. This allows airlocks to continue to work normally once power is restored - if(arePowerSystemsOn()) - spawn() - execute_current_command() - -/obj/machinery/door/airlock/proc/execute_current_command() - if(operating) - return //emagged or busy doing something else - - if (!cur_command) - return - - do_command(cur_command) - if (command_completed(cur_command)) - cur_command = null - -/obj/machinery/door/airlock/proc/do_command(var/command) - switch(command) - if("open") - open() - - if("close") - close() - - if("unlock") - unlock() - - if("lock") - lock() - - if("secure_open") - unlock() - - sleep(2) - open() - - lock() - - if("secure_close") - unlock() - close() - - lock() - sleep(2) - - send_status() - -/obj/machinery/door/airlock/proc/command_completed(var/command) - switch(command) - if("open") - return (!density) - - if("close") - return density - - if("unlock") - return !locked - - if("lock") - return locked - - if("secure_open") - return (locked && !density) - - if("secure_close") - return (locked && density) - - return 1 //Unknown command. Just assume it's completed. - -/obj/machinery/door/airlock/proc/send_status(var/bumped = 0) - if(radio_connection) - var/datum/signal/signal = new - signal.transmission_method = 1 //radio signal - signal.data["tag"] = id_tag - signal.data["timestamp"] = world.time - - signal.data["door_status"] = density?("closed"):("open") - signal.data["lock_status"] = locked?("locked"):("unlocked") - - if (bumped) - signal.data["bumped_with_access"] = 1 - - radio_connection.post_signal(src, signal, RADIO_AIRLOCK, AIRLOCK_CONTROL_RANGE) - - -/obj/machinery/door/airlock/open(surpress_send) - . = ..() - if(!surpress_send) send_status() - - -/obj/machinery/door/airlock/close(surpress_send) - . = ..() - if(!surpress_send) send_status() - -/obj/machinery/door/airlock/proc/set_frequency(new_frequency) - radio_controller.remove_object(src, frequency) - if(new_frequency) - frequency = new_frequency - radio_connection = radio_controller.add_object(src, frequency, RADIO_AIRLOCK) - - -/obj/machinery/door/airlock/Initialize() - . = ..() - if(frequency) - set_frequency(frequency) - - update_icon() - -/obj/machinery/door/airlock/New() - ..() - - if(radio_controller) - set_frequency(frequency) - -/obj/machinery/door/airlock/Destroy() - if(frequency && radio_controller) - radio_controller.remove_object(src,frequency) - return ..() - -/obj/machinery/airlock_sensor - icon = 'icons/obj/airlock_machines.dmi' - icon_state = "airlock_sensor_off" - name = "airlock sensor" - - anchored = TRUE - power_channel = ENVIRON - - var/master_tag - var/frequency = 1379 - var/command = "cycle" - - var/datum/radio_frequency/radio_connection - - var/on = 1 - var/alert = 0 - var/previousPressure - -/obj/machinery/airlock_sensor/on_update_icon() - if(on) - if(alert) - icon_state = "airlock_sensor_alert" - else - icon_state = "airlock_sensor_standby" - else - icon_state = "airlock_sensor_off" - -/obj/machinery/airlock_sensor/interface_interact(mob/user) - if(!CanInteract(user, DefaultTopicState())) - return FALSE - var/datum/signal/signal = new - signal.transmission_method = 1 //radio signal - signal.data["tag"] = master_tag - signal.data["command"] = command - - radio_connection.post_signal(src, signal, RADIO_AIRLOCK, AIRLOCK_CONTROL_RANGE) - flick("airlock_sensor_cycle", src) - return TRUE - -/obj/machinery/airlock_sensor/Process() - if(on) - var/datum/gas_mixture/air_sample = return_air() - var/pressure = round(air_sample.return_pressure(),0.1) - - if(abs(pressure - previousPressure) > 0.001 || previousPressure == null) - var/datum/signal/signal = new - signal.transmission_method = 1 //radio signal - signal.data["tag"] = id_tag - signal.data["timestamp"] = world.time - signal.data["pressure"] = num2text(pressure) - - radio_connection.post_signal(src, signal, RADIO_AIRLOCK, AIRLOCK_CONTROL_RANGE) - - previousPressure = pressure - - alert = (pressure < ONE_ATMOSPHERE*0.8) - - update_icon() - -/obj/machinery/airlock_sensor/proc/set_frequency(new_frequency) - radio_controller.remove_object(src, frequency) - frequency = new_frequency - radio_connection = radio_controller.add_object(src, frequency, RADIO_AIRLOCK) - -/obj/machinery/airlock_sensor/Initialize() - set_frequency(frequency) - . = ..() - -/obj/machinery/airlock_sensor/New() - ..() - if(radio_controller) - set_frequency(frequency) - -/obj/machinery/airlock_sensor/Destroy() - if(radio_controller) - radio_controller.remove_object(src,frequency) - return ..() - -/obj/machinery/airlock_sensor/airlock_interior - command = "cycle_interior" - -/obj/machinery/airlock_sensor/airlock_exterior - command = "cycle_exterior" - -/obj/machinery/access_button - icon = 'icons/obj/airlock_machines.dmi' - icon_state = "access_button_standby" - name = "access button" - - anchored = TRUE - power_channel = ENVIRON - - var/master_tag - var/frequency = 1449 - var/command = "cycle" - - var/datum/radio_frequency/radio_connection - - var/on = 1 - interact_offline = TRUE - - -/obj/machinery/access_button/on_update_icon() - if(on) - icon_state = "access_button_standby" - else - icon_state = "access_button_off" - -/obj/machinery/access_button/attackby(obj/item/I as obj, mob/user as mob) - //Swiping ID on the access button - if (istype(I, /obj/item/card/id) || istype(I, /obj/item/modular_computer)) - attack_hand(user) - return - ..() - -/obj/machinery/access_button/interface_interact(mob/user) - if(!CanInteract(user, DefaultTopicState())) - return FALSE - if(radio_connection) - var/datum/signal/signal = new - signal.transmission_method = 1 //radio signal - signal.data["tag"] = master_tag - signal.data["command"] = command - - radio_connection.post_signal(src, signal, RADIO_AIRLOCK, AIRLOCK_CONTROL_RANGE) - flick("access_button_cycle", src) - return TRUE - -/obj/machinery/access_button/proc/set_frequency(new_frequency) - radio_controller.remove_object(src, frequency) - frequency = new_frequency - radio_connection = radio_controller.add_object(src, frequency, RADIO_AIRLOCK) - - -/obj/machinery/access_button/Initialize() - . = ..() - set_frequency(frequency) - - -/obj/machinery/access_button/New() - ..() - - if(radio_controller) - set_frequency(frequency) - -/obj/machinery/access_button/Destroy() - if(radio_controller) - radio_controller.remove_object(src, frequency) - return ..() - -/obj/machinery/access_button/airlock_interior - frequency = 1379 - command = "cycle_interior" - -/obj/machinery/access_button/airlock_exterior - frequency = 1379 - command = "cycle_exterior" diff --git a/code/game/machinery/doors/airlock_electronics.dm b/code/game/machinery/doors/airlock_electronics.dm deleted file mode 100644 index 416d008c0bc36..0000000000000 --- a/code/game/machinery/doors/airlock_electronics.dm +++ /dev/null @@ -1,131 +0,0 @@ -//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:31 - -/obj/item/airlock_electronics - name = "airlock electronics" - icon = 'icons/obj/doors/door_assembly.dmi' - icon_state = "door_electronics" - w_class = ITEM_SIZE_SMALL //It should be tiny! -Agouri - - matter = list(MATERIAL_STEEL = 50,MATERIAL_GLASS = 50) - - req_access = list(access_engine) - - var/secure = 0 //if set, then wires will be randomized and bolts will drop if the door is broken - var/list/conf_access = list() - var/one_access = 0 //if set to 1, door would receive OR instead of AND on the access restrictions. - var/last_configurator = null - var/locked = 1 - var/lockable = 1 - var/autoset = TRUE // Whether the door should inherit access from surrounding areas - -/obj/item/airlock_electronics/attack_self(mob/user) - if (!ishuman(user) && !istype(user,/mob/living/silicon/robot)) - return ..(user) - - ui_interact(user) - - -/obj/item/airlock_electronics/ui_interact(mob/user, ui_key = "main", datum/nanoui/ui = null, force_open = 1, datum/topic_state/state = GLOB.hands_state) - var/list/data = ui_data() - - ui = SSnano.try_update_ui(user, src, ui_key, ui, data, force_open) - if(!ui) - ui = new(user, src, ui_key, "airlock_electronics.tmpl", src.name, 1000, 500, null, null, state) - ui.set_initial_data(data) - ui.open() - -/obj/item/airlock_electronics/ui_data() - var/list/data = list() - var/list/regions = list() - - for(var/i in ACCESS_REGION_MIN to ACCESS_REGION_MAX) //code/game/jobs/_access_defs.dm - var/list/region = list() - var/list/accesses = list() - for(var/j in get_region_accesses(i)) - var/list/access = list() - access["name"] = get_access_desc(j) - access["id"] = j - access["req"] = (j in src.conf_access) - accesses[++accesses.len] = access - region["name"] = get_region_accesses_name(i) - region["accesses"] = accesses - regions[++regions.len] = region - data["regions"] = regions - data["oneAccess"] = one_access - data["locked"] = locked - data["lockable"] = lockable - data["autoset"] = autoset - - return data - -/obj/item/airlock_electronics/OnTopic(mob/user, list/href_list, state) - if(lockable) - if(href_list["unlock"]) - if(!req_access || istype(user, /mob/living/silicon)) - locked = FALSE - last_configurator = user.name - else - var/obj/item/card/id/I = user.get_active_hand() - I = I ? I.GetIdCard() : null - if(!istype(I, /obj/item/card/id)) - to_chat(user, SPAN_WARNING("[\src] flashes a yellow LED near the ID scanner. Did you remember to scan your ID or PDA?")) - return TOPIC_HANDLED - if (check_access(I)) - locked = FALSE - last_configurator = I.registered_name - else - to_chat(user, SPAN_WARNING("[\src] flashes a red LED near the ID scanner, indicating your access has been denied.")) - return TOPIC_HANDLED - return TOPIC_REFRESH - else if(href_list["lock"]) - locked = TRUE - return TOPIC_REFRESH - - if(href_list["clear"]) - conf_access = list() - one_access = FALSE - return TOPIC_REFRESH - if(href_list["one_access"]) - one_access = !one_access - return TOPIC_REFRESH - if(href_list["autoset"]) - autoset = !autoset - return TOPIC_REFRESH - if(href_list["access"]) - var/access = href_list["access"] - if (!(access in conf_access)) - conf_access += access - else - conf_access -= access - return TOPIC_REFRESH - - -/obj/item/airlock_electronics/secure - name = "secure airlock electronics" - desc = "designed to be somewhat more resistant to hacking than standard electronics." - origin_tech = list(TECH_DATA = 2) - secure = TRUE - -/obj/item/airlock_electronics/brace - name = "airlock brace access circuit" - req_access = list() - locked = FALSE - lockable = FALSE - -/obj/item/airlock_electronics/brace/ui_interact(mob/user, ui_key = "main", datum/nanoui/ui = null, force_open = 1, datum/topic_state/state = GLOB.deep_inventory_state) - var/list/data = ui_data() - - ui = SSnano.try_update_ui(user, src, ui_key, ui, data, force_open) - if(!ui) - ui = new(user, src, ui_key, "airlock_electronics.tmpl", src.name, 1000, 500, null, null, state) - ui.set_initial_data(data) - ui.open() - -/obj/item/airlock_electronics/proc/set_access(var/obj/object) - if(!object.req_access) - object.check_access() - if(object.req_access.len) - conf_access = list() - for(var/entry in object.req_access) - conf_access |= entry // This flattens the list, turning everything into AND - // Can be reworked to have the electronics inherit a precise access set, but requires UI changes. diff --git a/code/game/machinery/doors/airlock_interactions.dm b/code/game/machinery/doors/airlock_interactions.dm deleted file mode 100644 index 34841c2cd5835..0000000000000 --- a/code/game/machinery/doors/airlock_interactions.dm +++ /dev/null @@ -1,100 +0,0 @@ -/* - Moved the non-airlock procs in airlock.dm to here. -*/ - -//*** Blocking Airlocks - -/atom/movable/proc/blocks_airlock() - return density - -/obj/machinery/door/blocks_airlock() - return 0 - -/obj/structure/window/blocks_airlock() - return 0 - -/obj/machinery/mech_sensor/blocks_airlock() - return 0 - -/obj/effect/energy_field/blocks_airlock() - return 0 - -/obj/machinery/shield/blocks_airlock() - return 0 - -/mob/living/blocks_airlock() - return 1 - -/obj/structure/closet/body_bag/blocks_airlock() - if (locate(/mob) in src) - return 1 - else - return 0 //Prevents Airlocks from closing on Bodybags and Cryobags with people inside - - -//*** Airlock Crushing - -#define AIRLOCK_CRUSH_INCREMENT 10 // Damage caused by airlock crushing a mob is split into multiple smaller hits. Makes door crushing behave more like a "slow" crushing effect rather than high-speed impacts. -#define CYBORG_AIRLOCKCRUSH_RESISTANCE 2 // Damage caused to silicon mobs (usually cyborgs) from being crushed by airlocks is divided by this number. Unlike organics cyborgs don't have passive regeneration. - -/atom/movable/proc/airlock_crush(var/crush_damage) - damage_health(crush_damage, DAMAGE_BRUTE) - -/obj/structure/window/airlock_crush(var/crush_damage) - shatter(TRUE) - -/obj/machinery/portable_atmospherics/canister/airlock_crush(var/crush_damage) - . = ..() - health -= crush_damage - healthcheck() - -/obj/effect/energy_field/airlock_crush(var/crush_damage) - Stress(crush_damage) - -/obj/structure/closet/airlock_crush(var/crush_damage) - for(var/atom/movable/AM in src) - AM.airlock_crush(crush_damage) - ..() - -/mob/living/airlock_crush(var/crush_damage) - . = ..() - - for(var/i in 1 to round(crush_damage/AIRLOCK_CRUSH_INCREMENT, 1)) - apply_damage(AIRLOCK_CRUSH_INCREMENT, DAMAGE_BRUTE) - - SetStunned(round(crush_damage / 8, 1)) - SetWeakened(round(crush_damage / 8, 1)) - - var/turf/T = loc - if(!istype(T)) - return - - var/list/valid_turfs = list() - for(var/dir_to_test in GLOB.cardinal) - var/turf/new_turf = get_step(T, dir_to_test) - if(!new_turf.contains_dense_objects()) - valid_turfs |= new_turf - - while(valid_turfs.len) - T = pick(valid_turfs) - valid_turfs -= T - // Try to move us to the turf. If all turfs fail for some reason we will stay on this tile. - if(src.Move(T)) - return - -/mob/living/carbon/airlock_crush(var/crush_damage) - . = ..() - if (can_feel_pain()) - emote("scream") - -/mob/living/silicon/robot/airlock_crush(var/crush_damage) - return ..(round(crush_damage / CYBORG_AIRLOCKCRUSH_RESISTANCE)) //TODO implement robot melee armour and remove this. - -/obj/structure/disposalpipe/airlock_crush(crush_damage) - return - -/obj/machinery/atmospherics/pipe/airlock_crush(crush_damage) - return - -/obj/structure/cable/airlock_crush(crush_damage) - return diff --git a/code/game/machinery/doors/alarmlock.dm b/code/game/machinery/doors/alarmlock.dm deleted file mode 100644 index f8d0ea6b57eac..0000000000000 --- a/code/game/machinery/doors/alarmlock.dm +++ /dev/null @@ -1,45 +0,0 @@ -/obj/machinery/door/airlock/alarmlock - - name = "Glass Alarm Airlock" - icon = 'icons/obj/doors/Doorglass.dmi' - opacity = 0 - glass = 1 - - var/datum/radio_frequency/air_connection - var/air_frequency = 1437 - autoclose = 0 - -/obj/machinery/door/airlock/alarmlock/New() - ..() - air_connection = new - -/obj/machinery/door/airlock/alarmlock/Destroy() - if(radio_controller) - radio_controller.remove_object(src,air_frequency) - ..() - -/obj/machinery/door/airlock/alarmlock/Initialize() - . = ..() - radio_controller.remove_object(src, air_frequency) - air_connection = radio_controller.add_object(src, air_frequency, RADIO_TO_AIRALARM) - open() - - -/obj/machinery/door/airlock/alarmlock/receive_signal(datum/signal/signal) - ..() - if(stat & (NOPOWER|BROKEN)) - return - - var/alarm_area = signal.data["zone"] - var/alert = signal.data["alert"] - - var/area/our_area = get_area(src) - - if(alarm_area == our_area.name) - switch(alert) - if("severe") - autoclose = 1 - close() - if("minor", "clear") - autoclose = 0 - open() diff --git a/code/game/machinery/doors/blast_door.dm b/code/game/machinery/doors/blast_door.dm deleted file mode 100644 index 1154a32ee2712..0000000000000 --- a/code/game/machinery/doors/blast_door.dm +++ /dev/null @@ -1,308 +0,0 @@ -// BLAST DOORS -// -// Refactored 27.12.2014 by Atlantis -// -// Blast doors are supposed to be reinforced versions of regular doors. Instead of being manually -// controlled they use buttons or other means of remote control. This is why they cannot be emagged -// as they lack any ID scanning system, they just handle remote control signals. Subtypes have -// different icons, which are defined by set of variables. Subtypes are on bottom of this file. - -/obj/machinery/door/blast - name = "blast door" - desc = "That looks like it doesn't open easily." - icon = 'icons/obj/doors/rapid_pdoor.dmi' - icon_state = null - - // Icon states for different shutter types. Simply change this instead of rewriting the update_icon proc. - var/icon_state_open = null - var/icon_state_opening = null - var/icon_state_closed = null - var/icon_state_closing = null - - var/icon_state_open_broken = null - var/icon_state_closed_broken = null - - var/open_sound = 'sound/machines/blastdoor_open.ogg' - var/close_sound = 'sound/machines/blastdoor_close.ogg' - - closed_layer = ABOVE_WINDOW_LAYER - dir = 1 - explosion_resistance = 25 - atom_flags = ATOM_FLAG_ADJACENT_EXCEPTION - - //Most blast doors are infrequently toggled and sometimes used with regular doors anyways, - //turning this off prevents awkward zone geometry in places like medbay lobby, for example. - block_air_zones = 0 - - var/begins_closed = TRUE - var/material/implicit_material - autoset_access = FALSE // Uses different system with buttons. - pry_mod = 1.35 - - uncreated_component_parts = list( - /obj/item/stock_parts/radio/receiver, - /obj/item/stock_parts/power/apc - ) - // To be fleshed out and moved to parent door, but staying minimal for now. - public_methods = list( - /decl/public_access/public_method/open_door, - /decl/public_access/public_method/close_door_delayed, - /decl/public_access/public_method/toggle_door - ) - stock_part_presets = list(/decl/stock_part_preset/radio/receiver/blast_door = 1) - -/obj/machinery/door/blast/Initialize() - . = ..() - - if(!begins_closed) - icon_state = icon_state_open - set_density(0) - set_opacity(0) - layer = open_layer - - implicit_material = SSmaterials.get_material_by_name(MATERIAL_PLASTEEL) - -/obj/machinery/door/blast/examine(mob/user) - . = ..() - if((stat & BROKEN)) - to_chat(user, "It's broken.") - -// Proc: Bumped() -// Parameters: 1 (AM - Atom that tried to walk through this object) -// Description: If we are open returns zero, otherwise returns result of parent function. -/obj/machinery/door/blast/Bumped(atom/AM) - if(!density) - return ..() - else - return 0 - -// Proc: update_icon() -// Parameters: None -// Description: Updates icon of this object. Uses icon state variables. -/obj/machinery/door/blast/on_update_icon() - if(density) - if(stat & BROKEN) - icon_state = icon_state_closed_broken - else - icon_state = icon_state_closed - else - if(stat & BROKEN) - icon_state = icon_state_open_broken - else - icon_state = icon_state_open - SSradiation.resistance_cache.Remove(get_turf(src)) - return - -// Proc: force_open() -// Parameters: None -// Description: Opens the door. No checks are done inside this proc. -/obj/machinery/door/blast/proc/force_open() - operating = 1 - playsound(src.loc, open_sound, 100, 1) - flick(icon_state_opening, src) - set_density(0) - update_nearby_tiles() - update_icon() - set_opacity(0) - sleep(15) - layer = open_layer - operating = 0 - -// Proc: force_close() -// Parameters: None -// Description: Closes the door. No checks are done inside this proc. -/obj/machinery/door/blast/proc/force_close() - operating = 1 - playsound(src.loc, close_sound, 100, 1) - layer = closed_layer - flick(icon_state_closing, src) - set_density(1) - update_nearby_tiles() - update_icon() - set_opacity(1) - sleep(15) - operating = 0 - -// Proc: force_toggle() -// Parameters: None -// Description: Opens or closes the door, depending on current state. No checks are done inside this proc. -/obj/machinery/door/blast/proc/force_toggle() - if(density) - force_open() - else - force_close() - -/obj/machinery/door/blast/get_material() - return implicit_material - -// Proc: attackby() -// Parameters: 2 (C - Item this object was clicked with, user - Mob which clicked this object) -// Description: If we are clicked with crowbar or wielded fire axe, try to manually open the door. -// This only works on broken doors or doors without power. Also allows repair with Plasteel. -/obj/machinery/door/blast/attackby(obj/item/C as obj, mob/user as mob) - add_fingerprint(user, 0, C) - if(isCrowbar(C) || (istype(C, /obj/item/material/twohanded/fireaxe) && C:wielded == 1)) - if(((stat & NOPOWER) || (stat & BROKEN)) && !( operating )) - to_chat(user, "You begin prying at \the [src]...") - if(do_after(user, 2 SECONDS, src, DO_DEFAULT | DO_USER_UNIQUE_ACT | DO_PUBLIC_PROGRESS)) - force_toggle() - else - to_chat(user, "[src]'s motors resist your effort.") - return - if(istype(C, /obj/item/stack/material) && C.get_material_name() == MATERIAL_PLASTEEL) - var/amt = Ceil((maxhealth - health)/150) - if(!amt) - to_chat(user, "\The [src] is already fully functional.") - return - var/obj/item/stack/P = C - if(!P.can_use(amt)) - to_chat(user, "You don't have enough sheets to repair this! You need at least [amt] sheets.") - return - to_chat(user, "You begin repairing \the [src]...") - if(do_after(user, 5 SECONDS, src, DO_PUBLIC_UNIQUE)) - if(P.use(amt)) - to_chat(user, "You have repaired \the [src].") - repair() - else - to_chat(user, "You don't have enough sheets to repair this! You need at least [amt] sheets.") - else - to_chat(user, "You must remain still while working on \the [src].") - check_force(C, user) - - - -// Proc: open() -// Parameters: None -// Description: Opens the door. Does necessary checks. Automatically closes if autoclose is true -/obj/machinery/door/blast/open() - if (operating || (stat & BROKEN || stat & NOPOWER)) - return - force_open() - if(autoclose) - spawn(150) - close() - return 1 - -// Proc: close() -// Parameters: None -// Description: Closes the door. Does necessary checks. -/obj/machinery/door/blast/close() - if (operating || (stat & BROKEN || stat & NOPOWER)) - return - force_close() - -/obj/machinery/door/blast/toggle() - if (operating || (stat & BROKEN || stat & NOPOWER)) - return - force_toggle() - -// Proc: repair() -// Parameters: None -// Description: Fully repairs the blast door. -/obj/machinery/door/blast/proc/repair() - health = maxhealth - set_broken(FALSE) - queue_icon_update() - -/obj/machinery/door/blast/CanPass(atom/movable/mover, turf/target, height=0, air_group=0) - if(air_group) return 1 - return ..() - -/obj/machinery/door/blast/do_simple_ranged_interaction(var/mob/user) - return TRUE - -// Used with mass drivers to time the close. -/obj/machinery/door/blast/proc/delayed_close() - set waitfor = FALSE - sleep(5 SECONDS) - close() - -/decl/public_access/public_method/close_door_delayed - name = "delayed close door" - desc = "Closes the door if possible, after a short delay." - call_proc = /obj/machinery/door/blast/proc/delayed_close - -/decl/stock_part_preset/radio/receiver/blast_door - frequency = BLAST_DOORS_FREQ - receive_and_call = list( - "open_door" = /decl/public_access/public_method/open_door, - "close_door_delayed" = /decl/public_access/public_method/close_door_delayed, - "toggle_door" = /decl/public_access/public_method/toggle_door - ) - -/obj/machinery/button/blast_door - icon = 'icons/obj/stationobjs.dmi' - name = "remote blast door-control" - desc = "It controls blast doors, remotely." - icon_state = "blastctrl" - stock_part_presets = list(/decl/stock_part_preset/radio/basic_transmitter/blast_door_button = 1) - -/decl/stock_part_preset/radio/basic_transmitter/blast_door_button - transmit_on_change = list( - "toggle_door" = /decl/public_access/public_variable/button_active, - ) - frequency = BLAST_DOORS_FREQ - -/obj/machinery/button/blast_door/on_update_icon() - if(operating) - icon_state = "blastctrl1" - else - icon_state = "blastctrl" - -// SUBTYPE: Regular -// Your classical blast door, found almost everywhere. -/obj/machinery/door/blast/regular - - icon_state = "pdoor1" - icon_state_open = "pdoor0" - icon_state_opening = "pdoorc0" - icon_state_closed = "pdoor1" - icon_state_closing = "pdoorc1" - - icon_state_open_broken = "blast_open_broken" - icon_state_closed_broken = "blast_closed_broken" - - min_force = 30 - maxhealth = 1000 - block_air_zones = 1 - -/obj/machinery/door/blast/regular/escape_pod - name = "Escape Pod release Door" - -/obj/machinery/door/blast/regular/escape_pod/Process() - if(evacuation_controller.emergency_evacuation && evacuation_controller.state >= EVAC_LAUNCHING && src.icon_state == icon_state_closed) - src.force_open() - . = ..() - -/obj/machinery/door/blast/regular/open - begins_closed = FALSE - -// SUBTYPE: Shutters -// Nicer looking, and also weaker, shutters. Found in kitchen and similar areas. -/obj/machinery/door/blast/shutters - name = "shutters" - desc = "A set of mechanized shutters made of a pretty sturdy material." - - icon_state = "shutter1" - icon_state_open = "shutter0" - icon_state_opening = "shutterc0" - icon_state_closed = "shutter1" - icon_state_closing = "shutterc1" - - icon_state_open_broken = "shutter_open_broken" - icon_state_closed_broken = "shutter_closed_broken" - - open_sound = 'sound/machines/shutters_open.ogg' - close_sound = 'sound/machines/shutters_close.ogg' - min_force = 15 - maxhealth = 500 - explosion_resistance = 10 - pry_mod = 0.55 - -/obj/machinery/door/blast/shutters/open - begins_closed = FALSE - -/obj/machinery/door/blast/shutters/attack_generic(var/mob/user, var/damage) - if(stat & BROKEN) - qdel(src) - ..() diff --git a/code/game/machinery/doors/braces.dm b/code/game/machinery/doors/braces.dm deleted file mode 100644 index 0f10fe6706932..0000000000000 --- a/code/game/machinery/doors/braces.dm +++ /dev/null @@ -1,153 +0,0 @@ -// MAINTENANCE JACK - Allows removing of braces with certain delay. -/obj/item/crowbar/brace_jack - name = "maintenance jack" - desc = "A special crowbar that can be used to safely remove airlock braces from airlocks." - w_class = ITEM_SIZE_NORMAL - icon = 'icons/obj/tools.dmi' - icon_state = "maintenance_jack" - force = 17.5 //It has a hammer head, should probably do some more damage. - Cirra - attack_cooldown = 2.5*DEFAULT_WEAPON_COOLDOWN - melee_accuracy_bonus = -25 - - - - -// BRACE - Can be installed on airlock to reinforce it and keep it closed. -// Set req_access if you dont want the brace and its electronics to derive their access from the door its placed on. -/obj/item/airlock_brace - name = "airlock brace" - desc = "A sturdy device that can be attached to an airlock to reinforce it and provide additional security." - w_class = ITEM_SIZE_LARGE - icon = 'icons/obj/airlock_machines.dmi' - icon_state = "brace_open" - var/cur_health - var/max_health = 450 - var/obj/machinery/door/airlock/airlock = null - var/obj/item/airlock_electronics/brace/electronics - - -/obj/item/airlock_brace/examine(mob/user) - . = ..() - to_chat(user, examine_health()) - - -// This is also called from airlock's examine, so it's a different proc to prevent code copypaste. -/obj/item/airlock_brace/proc/examine_health() - switch(health_percentage()) - if(-100 to 25) - return "\The [src] looks seriously damaged, and probably won't last much more." - if(25 to 50) - return "\The [src] looks damaged." - if(50 to 75) - return "\The [src] looks slightly damaged." - if(75 to 99) - return "\The [src] has few dents." - if(99 to INFINITY) - return "\The [src] is in excellent condition." - - -/obj/item/airlock_brace/on_update_icon() - if(airlock) - icon_state = "brace_closed" - else - icon_state = "brace_open" - - -/obj/item/airlock_brace/New() - ..() - cur_health = max_health - electronics = new/obj/item/airlock_electronics/brace(src) - if(length(req_access)) - electronics.set_access(src) - update_access() - -/obj/item/airlock_brace/Destroy() - if(airlock) - airlock.brace = null - airlock = null - qdel(electronics) - electronics = null - ..() - - -// Interact with the electronics to set access requirements. -/obj/item/airlock_brace/attack_self(mob/user as mob) - electronics.attack_self(user) - - -/obj/item/airlock_brace/attackby(obj/item/W as obj, mob/user as mob) - ..() - if (istype(W.GetIdCard(), /obj/item/card/id)) - if(!airlock) - attack_self(user) - return - else - var/obj/item/card/id/C = W.GetIdCard() - update_access() - if(check_access(C)) - to_chat(user, "You swipe \the [C] through \the [src].") - if(do_after(user, 1 SECOND, airlock, DO_DEFAULT | DO_USER_UNIQUE_ACT | DO_PUBLIC_PROGRESS)) - to_chat(user, "\The [src] clicks a few times and detaches itself from \the [airlock]!") - unlock_brace(usr) - else - to_chat(user, "You swipe \the [C] through \the [src], but it does not react.") - return - - if (istype(W, /obj/item/crowbar/brace_jack)) - if(!airlock) - return - var/obj/item/crowbar/brace_jack/C = W - to_chat(user, "You begin forcibly removing \the [src] with \the [C].") - if(do_after(user, rand(15, 30) SECONDS, airlock, DO_DEFAULT | DO_USER_UNIQUE_ACT | DO_PUBLIC_PROGRESS)) - to_chat(user, "You finish removing \the [src].") - unlock_brace(user) - return - - if(isWelder(W)) - var/obj/item/weldingtool/C = W - if(cur_health == max_health) - to_chat(user, "\The [src] does not require repairs.") - return - if(C.remove_fuel(0,user)) - playsound(src, 'sound/items/Welder.ogg', 100, 1) - cur_health = min(cur_health + rand(80,120), max_health) - if(cur_health == max_health) - to_chat(user, "You repair some dents on \the [src]. It is in perfect condition now.") - else - to_chat(user, "You repair some dents on \the [src].") - - -/obj/item/airlock_brace/proc/take_damage(var/amount) - cur_health = clamp(cur_health - amount, 0, max_health) - if(!cur_health) - if(airlock) - airlock.visible_message("\The [src] breaks off of \the [airlock]!") - unlock_brace(null) - qdel(src) - - -/obj/item/airlock_brace/proc/unlock_brace(var/mob/user) - if(!airlock) - return - if(user) - user.put_in_hands(src) - airlock.visible_message("\The [user] removes \the [src] from \the [airlock]!") - else - dropInto(loc) - airlock.brace = null - airlock.update_icon() - airlock = null - update_icon() - - -/obj/item/airlock_brace/proc/health_percentage() - if(!max_health) - return 0 - return (cur_health / max_health) * 100 - -/obj/item/airlock_brace/proc/update_access() - if(!electronics) - return - req_access = electronics.conf_access - if(electronics.one_access) - req_access = list(req_access) diff --git a/code/game/machinery/doors/brigdoors.dm b/code/game/machinery/doors/brigdoors.dm deleted file mode 100644 index d96bdaf680bbf..0000000000000 --- a/code/game/machinery/doors/brigdoors.dm +++ /dev/null @@ -1,293 +0,0 @@ -#define CHARS_PER_LINE 5 -#define FONT_SIZE "5pt" -#define FONT_COLOR "#09f" -#define FONT_STYLE "Arial Black" - -//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:31 - -/////////////////////////////////////////////////////////////////////////////////////////////// -// Brig Door control displays. -// Description: This is a controls the timer for the brig doors, displays the timer on itself and -// has a popup window when used, allowing to set the timer. -// Code Notes: Combination of old brigdoor.dm code from rev4407 and the status_display.dm code -// Date: 01/September/2010 -// Programmer: Veryinky -///////////////////////////////////////////////////////////////////////////////////////////////// -/obj/machinery/door_timer - name = "Door Timer" - icon = 'icons/obj/status_display.dmi' - icon_state = "frame" - desc = "A remote control for a door." - req_access = list(access_brig) - anchored = TRUE // can't pick it up - density = FALSE // can walk through it. - var/id = null // id of door it controls. - var/releasetime = 0 // when world.timeofday reaches it - release the prisoner - var/timing = 1 // boolean, true/1 timer is on, false/0 means it's not timing - var/picture_state // icon_state of alert picture, if not displaying text/numbers - var/list/obj/machinery/targets = list() - var/timetoset = 0 // Used to set releasetime upon starting the timer - - maptext_height = 26 - maptext_width = 32 - -/obj/machinery/door_timer/Initialize() - ..() - return INITIALIZE_HINT_LATELOAD - -/obj/machinery/door_timer/LateInitialize() - for(var/obj/machinery/door/window/brigdoor/M in SSmachines.machinery) - if (M.id == src.id) - targets += M - - for(var/obj/machinery/flasher/F in SSmachines.machinery) - if(F.id_tag == src.id) - targets += F - - for(var/obj/structure/closet/secure_closet/brig/C in world) - if(C.id == src.id) - targets += C - - if(targets.len==0) - set_broken(TRUE) - queue_icon_update() - -//Main door timer loop, if it's timing and time is >0 reduce time by 1. -// if it's less than 0, open door, reset timer -// update the door_timer window and the icon -/obj/machinery/door_timer/Process() - if(stat & (NOPOWER|BROKEN)) return - if(src.timing) - - // poorly done midnight rollover - // (no seriously there's gotta be a better way to do this) - var/timeleft = timeleft() - if(timeleft > 1e5) - src.releasetime = 0 - - - if(world.timeofday > src.releasetime) - src.timer_end(TRUE) // open doors, reset timer, clear status screen, broadcast to sec HUDs - src.timing = 0 - - src.update_icon() - - else - timer_end() - - return - - -// open/closedoor checks if door_timer has power, if so it checks if the -// linked door is open/closed (by density) then opens it/closes it. - -// Closes and locks doors, power check -/obj/machinery/door_timer/proc/timer_start() - if(stat & (NOPOWER|BROKEN)) return 0 - - // Set releasetime - releasetime = world.timeofday + timetoset - - - //set timing - timing = 1 - - for(var/obj/machinery/door/window/brigdoor/door in targets) - if(door.density) continue - spawn(0) - door.close() - - for(var/obj/structure/closet/secure_closet/brig/C in targets) - if(C.broken) continue - if(C.opened && !C.close()) continue - C.locked = TRUE - C.queue_icon_update() - return 1 - - -// Opens and unlocks doors, power check -/obj/machinery/door_timer/proc/timer_end(var/broadcast_to_huds = 0) - if(stat & (NOPOWER|BROKEN)) return 0 - - // Reset releasetime - releasetime = 0 - - //reset timing - timing = 0 - - if (broadcast_to_huds) - broadcast_security_hud_message("The timer for [id] has expired.", src) - - for(var/obj/machinery/door/window/brigdoor/door in targets) - if(!door.density) continue - spawn(0) - door.open() - - for(var/obj/structure/closet/secure_closet/brig/C in targets) - if(C.broken) continue - if(C.opened) continue - C.locked = 0 - C.queue_icon_update() - - return 1 - - -// Check for releasetime timeleft -/obj/machinery/door_timer/proc/timeleft() - . = round((releasetime - world.timeofday)/10) - if(. < 0) - . = 0 - -// Set timetoset -/obj/machinery/door_timer/proc/timeset(var/seconds) - timetoset = seconds * 10 - - if(timetoset <= 0) - timetoset = 0 - - return - -/obj/machinery/door_timer/interface_interact(var/mob/user) - ui_interact(user) - return TRUE - -/obj/machinery/door_timer/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1) - var/list/data = list() - - var/timeval = timing ? timeleft() : timetoset/10 - data["timing"] = timing - data["minutes"] = round(timeval/60) - data["seconds"] = timeval % 60 - - var/list/flashes = list() - - for(var/obj/machinery/flasher/flash in targets) - var/list/flashdata = list() - if(flash.last_flash && (flash.last_flash + 150) > world.time) - flashdata["status"] = 0 - else - flashdata["status"] = 1 - flashes[++flashes.len] = flashdata - - data["flashes"] = flashes - - ui = SSnano.try_update_ui(user, src, ui_key, ui, data, force_open) - if (!ui) - ui = new(user, src, ui_key, "brig_timer.tmpl", name, 270, 150) - ui.set_initial_data(data) - ui.open() - ui.set_auto_update(1) - -/obj/machinery/door_timer/CanUseTopic(user, state) - if(!allowed(user)) - return STATUS_UPDATE - return ..() - -/obj/machinery/door_timer/OnTopic(var/mob/user, var/list/href_list, state) - if (href_list["toggle"]) - if(timing) - timer_end() - else - timer_start() - if(timetoset > 18000) - log_and_message_admins("has started a brig timer over 30 minutes in length!") - . = TOPIC_REFRESH - - if (href_list["flash"]) - for(var/obj/machinery/flasher/F in targets) - F.flash() - . = TOPIC_REFRESH - - if (href_list["adjust"]) - timetoset += text2num(href_list["adjust"]) - timetoset = clamp(timetoset, 0, 36000) - . = TOPIC_REFRESH - - update_icon() - - -//icon update function -// if NOPOWER, display blank -// if BROKEN, display blue screen of death icon AI uses -// if timing=true, run update display function -/obj/machinery/door_timer/on_update_icon() - if(stat & (NOPOWER)) - icon_state = "frame" - return - if(stat & (BROKEN)) - set_picture("ai_bsod") - return - if(src.timing) - var/disp1 = id - var/timeleft = timeleft() - var/disp2 = "[pad_left(num2text((timeleft / 60) % 60), 2, "0")]~[pad_left(num2text(timeleft % 60), 2, "0")]" - if(length(disp2) > CHARS_PER_LINE) - disp2 = "Error" - update_display(disp1, disp2) - else - if(maptext) - maptext = "" - update_display("Set","Time") // would be nice to have some default printed text - return - - -// Adds an icon in case the screen is broken/off, stolen from status_display.dm -/obj/machinery/door_timer/proc/set_picture(var/state) - picture_state = state - overlays.Cut() - overlays += image('icons/obj/status_display.dmi', icon_state=picture_state) - - -//Checks to see if there's 1 line or 2, adds text-icons-numbers/letters over display -// Stolen from status_display -/obj/machinery/door_timer/proc/update_display(var/line1, var/line2) - var/new_text = {"
      [line1]
      [line2]
      "} - if(maptext != new_text) - maptext = new_text - - -//Actual string input to icon display for loop, with 5 pixel x offsets for each letter. -//Stolen from status_display -/obj/machinery/door_timer/proc/texticon(var/tn, var/px = 0, var/py = 0) - var/image/I = image('icons/obj/status_display.dmi', "blank") - var/len = length(tn) - - for(var/d = 1 to len) - var/char = copytext_char(tn, len-d+1, len-d+2) - if(char == " ") - continue - var/image/ID = image('icons/obj/status_display.dmi', icon_state=char) - ID.pixel_x = -(d-1)*5 + px - ID.pixel_y = py - I.overlays += ID - return I - - -/obj/machinery/door_timer/cell_1 - name = "Cell 1" - id = "Cell 1" - -/obj/machinery/door_timer/cell_2 - name = "Cell 2" - id = "Cell 2" - -/obj/machinery/door_timer/cell_3 - name = "Cell 3" - id = "Cell 3" - -/obj/machinery/door_timer/cell_4 - name = "Cell 4" - id = "Cell 4" - -/obj/machinery/door_timer/cell_5 - name = "Cell 5" - id = "Cell 5" - -/obj/machinery/door_timer/cell_6 - name = "Cell 6" - id = "Cell 6" - -#undef FONT_SIZE -#undef FONT_COLOR -#undef FONT_STYLE -#undef CHARS_PER_LINE diff --git a/code/game/machinery/doors/checkForMultipleDoors.dm b/code/game/machinery/doors/checkForMultipleDoors.dm deleted file mode 100644 index f7ad56cb1348c..0000000000000 --- a/code/game/machinery/doors/checkForMultipleDoors.dm +++ /dev/null @@ -1,16 +0,0 @@ -/obj/machinery/door/proc/checkForMultipleDoors() - if(!src.loc) - return 0 - for(var/obj/machinery/door/D in src.loc) - if(!istype(D, /obj/machinery/door/window) && D.density) - return 0 - return 1 - -/turf/simulated/wall/proc/checkForMultipleDoors() - if(!src.loc) - return 0 - for(var/obj/machinery/door/D in locate(src.x,src.y,src.z)) - if(!istype(D, /obj/machinery/door/window) && D.density) - return 0 - //There are no false wall checks because that would be fucking retarded - return 1 \ No newline at end of file diff --git a/code/game/machinery/doors/door.dm b/code/game/machinery/doors/door.dm deleted file mode 100644 index 4f3a43a1ec42c..0000000000000 --- a/code/game/machinery/doors/door.dm +++ /dev/null @@ -1,606 +0,0 @@ -//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:31 -#define DOOR_REPAIR_AMOUNT 50 //amount of health regained per stack amount used - -/obj/machinery/door - name = "Door" - desc = "It opens and closes." - icon = 'icons/obj/doors/Doorint.dmi' - icon_state = "door1" - anchored = TRUE - opacity = 1 - density = TRUE - layer = CLOSED_DOOR_LAYER - interact_offline = TRUE - - var/open_layer = OPEN_DOOR_LAYER - var/closed_layer = CLOSED_DOOR_LAYER - - var/visible = 1 - var/p_open = 0 - var/operating = 0 - var/autoclose = 0 - var/glass = 0 - var/normalspeed = 1 - var/heat_proof = 0 // For glass airlocks/opacity firedoors - var/air_properties_vary_with_direction = 0 - var/maxhealth = 300 - var/health - var/destroy_hits = 10 //How many strong hits it takes to destroy the door - var/min_force = 10 //minimum amount of force needed to damage the door with a melee weapon - var/hitsound = 'sound/weapons/smash.ogg' //sound door makes when hit with a weapon - var/pry_mod = 1 //difficulty scaling for simple animal door prying - var/obj/item/stack/material/repairing - var/block_air_zones = 1 //If set, air zones cannot merge across the door even when it is opened. - var/close_door_at = 0 //When to automatically close the door, if possible - var/list/connections = list("0", "0", "0", "0") - var/list/blend_objects = list(/obj/structure/wall_frame, /obj/structure/window, /obj/structure/grille) // Objects which to blend with - - var/autoset_access = TRUE // Determines whether the door will automatically set its access from the areas surrounding it. Can be used for mapping. - - //Multi-tile doors - dir = SOUTH - var/width = 1 - - //Used for intercepting clicks on our turf. Set 0 to disable click interception - var/turf_hand_priority = 3 - - // turf animation - var/atom/movable/overlay/c_animation = null - - atmos_canpass = CANPASS_PROC - -/obj/machinery/door/attack_generic(var/mob/user, var/damage, var/attack_verb, var/environment_smash) - if(environment_smash >= 1) - damage = max(damage, 10) - - user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN*2) - playsound(loc, hitsound, 50, 1) - - if(damage >= 10) - visible_message("\The [user] [attack_verb] into \the [src]!") - take_damage(damage) - else - visible_message("\The [user] bonks \the [src] harmlessly.") - attack_animation(user) - -/obj/machinery/door/New() - . = ..() - if(density) - layer = closed_layer - update_heat_protection(get_turf(src)) - else - layer = open_layer - - - if(width > 1) - if(dir in list(EAST, WEST)) - bound_width = width * world.icon_size - bound_height = world.icon_size - else - bound_width = world.icon_size - bound_height = width * world.icon_size - - if (turf_hand_priority) - set_extension(src, /datum/extension/turf_hand, turf_hand_priority) - -/obj/machinery/door/Initialize() - set_extension(src, /datum/extension/penetration, /datum/extension/penetration/proc_call, .proc/CheckPenetration) - . = ..() - - health = maxhealth - update_connections(1) - update_icon() - - update_nearby_tiles(need_rebuild=1) - - if(autoset_access) -#ifdef UNIT_TEST - if(length(req_access)) - crash_with("A door with mapped access restrictions was set to autoinitialize access.") -#endif - return INITIALIZE_HINT_LATELOAD - -/obj/machinery/door/LateInitialize() - ..() - if(autoset_access) // Delayed because apparently the dir is not set by mapping and we need to wait for nearby walls to init and turn us. - inherit_access_from_area() - -/obj/machinery/door/Destroy() - set_density(0) - update_nearby_tiles() - . = ..() - -/obj/machinery/door/Process() - if(close_door_at && world.time >= close_door_at) - if(autoclose) - close_door_at = next_close_time() - close() - else - close_door_at = 0 - -/obj/machinery/door/proc/can_open() - if(!density || operating) - return 0 - return 1 - -/obj/machinery/door/proc/can_close() - if(density || operating) - return 0 - return 1 - -/obj/machinery/door/Bumped(atom/AM) - if(p_open || operating) return - if(ismob(AM)) - var/mob/M = AM - if(world.time - M.last_bumped <= 10) return //Can bump-open one airlock per second. This is to prevent shock spam. - M.last_bumped = world.time - if(!M.restrained() && (!issmall(M) || ishuman(M) || issilicon(M))) - bumpopen(M) - return - - if(istype(AM, /mob/living/bot)) - var/mob/living/bot/bot = AM - if(src.check_access(bot.botcard)) - if(density) - open() - return - - if(istype(AM, /obj/structure/bed/chair/wheelchair)) - var/obj/structure/bed/chair/wheelchair/wheel = AM - if(density) - if(wheel.pulling && (src.allowed(wheel.pulling))) - open() - else - do_animate("deny") - return - return - - -/obj/machinery/door/CanPass(atom/movable/mover, turf/target, height=0, air_group=0) - if(air_group) return !block_air_zones - if(istype(mover) && mover.checkpass(PASS_FLAG_GLASS)) - return !opacity - return !density - - -/obj/machinery/door/proc/bumpopen(mob/user as mob) - if(operating) return - if(user.last_airflow > world.time - vsc.airflow_delay) //Fakkit - return - src.add_fingerprint(user) - if(density) - if(allowed(user)) - open() - else - do_animate("deny") - return - -/obj/machinery/door/bullet_act(var/obj/item/projectile/Proj) - ..() - - var/damage = Proj.get_structure_damage() - - // Emitter Blasts - these will eventually completely destroy the door, given enough time. - if (damage > 90) - destroy_hits-- - if (destroy_hits <= 0) - visible_message("\The [src.name] disintegrates!") - switch (Proj.damage_type) - if (DAMAGE_BRUTE) - new /obj/item/stack/material/steel(src.loc, 2) - new /obj/item/stack/material/rods(src.loc, 3) - if (DAMAGE_BURN) - new /obj/effect/decal/cleanable/ash(src.loc) // Turn it to ashes! - qdel(src) - - if(damage) - //cap projectile damage so that there's still a minimum number of hits required to break the door - take_damage(min(damage, 100)) - - - -/obj/machinery/door/hitby(AM as mob|obj, var/datum/thrownthing/TT) - - ..() - visible_message("[src.name] was hit by [AM].") - var/tforce = 0 - if(ismob(AM)) - tforce = 3 * TT.speed - else - tforce = AM:throwforce * (TT.speed/THROWFORCE_SPEED_DIVISOR) - playsound(src.loc, hitsound, 100, 1) - take_damage(tforce) - return - -// This is legacy code that should be revisited, probably by moving the bulk of the logic into here. -/obj/machinery/door/interface_interact(user) - if(CanInteract(user, DefaultTopicState())) - return attackby(user = user) - -/obj/machinery/door/attackby(obj/item/I as obj, mob/user as mob) - src.add_fingerprint(user, 0, I) - - if(istype(I, /obj/item/stack/material) && I.get_material_name() == src.get_material_name()) - if(stat & BROKEN) - to_chat(user, "It looks like \the [src] is pretty busted. It's going to need more than just patching up now.") - return - if(health >= maxhealth) - to_chat(user, "Nothing to fix!") - return - if(!density) - to_chat(user, "\The [src] must be closed before you can repair it.") - return - - //figure out how much metal we need - var/amount_needed = (maxhealth - health) / DOOR_REPAIR_AMOUNT - amount_needed = Ceil(amount_needed) - - var/obj/item/stack/stack = I - var/transfer - if (repairing) - transfer = stack.transfer_to(repairing, amount_needed - repairing.amount) - if (!transfer) - to_chat(user, "You must weld or remove \the [repairing] from \the [src] before you can add anything else.") - else - repairing = stack.split(amount_needed) - if (repairing) - repairing.forceMove(src) - transfer = repairing.amount - - if (transfer) - to_chat(user, "You fit [transfer] [stack.singular_name]\s to damaged and broken parts on \the [src].") - - return - - if(repairing && isWelder(I)) - if(!density) - to_chat(user, "\The [src] must be closed before you can repair it.") - return - - var/obj/item/weldingtool/welder = I - if(welder.remove_fuel(0,user)) - to_chat(user, "You start to fix dents and weld \the [repairing] into place.") - playsound(src, 'sound/items/Welder.ogg', 100, 1) - if(do_after(user, (0.5 * repairing.amount) SECONDS, src, DO_PUBLIC_UNIQUE) && welder && welder.isOn()) - if (!repairing) - return //the materials in the door have been removed before welding was finished. - - to_chat(user, "You finish repairing the damage to \the [src].") - health = clamp(health + repairing.amount * DOOR_REPAIR_AMOUNT, health, maxhealth) - update_icon() - qdel(repairing) - repairing = null - return - - if(repairing && isCrowbar(I)) - to_chat(user, "You remove \the [repairing].") - playsound(src.loc, 'sound/items/Crowbar.ogg', 100, 1) - repairing.dropInto(user.loc) - repairing = null - return - - if (check_force(I, user)) - return - - if(src.operating > 0 || isrobot(user)) return //borgs can't attack doors open because it conflicts with their AI-like interaction with them. - - if(src.operating) return - - if(src.allowed(user) && operable()) - if(src.density) - open() - else - close() - return - - if(src.density) - do_animate("deny") - update_icon() - return - -/obj/machinery/door/emag_act(var/remaining_charges) - if(density && operable()) - do_animate("emag") - sleep(6) - open() - operating = -1 - set_broken(TRUE) - return 1 - -/obj/machinery/door/proc/check_force(obj/item/I, mob/user) - if (!istype(I)) - return FALSE - if (!density || user.a_intent != I_HURT) - return FALSE - if (I.damtype != DAMAGE_BRUTE && I.damtype != DAMAGE_BURN) - return FALSE - user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN) - user.do_attack_animation(src) - if (I.force < min_force) - visible_message(SPAN_WARNING("\The [user] hits \the [src] with \an [I] to no effect.")) - else - visible_message(SPAN_DANGER("\The [user] hits \the [src] with \an [I], causing damage!")) - playsound(src, hitsound, 100, 1) - take_damage(I.force) - return TRUE - -/obj/machinery/door/proc/take_damage(var/damage) - var/initialhealth = src.health - src.health = max(0, src.health - damage) - if(src.health <= 0 && initialhealth > 0) - src.set_broken(TRUE) - else if(src.health < src.maxhealth / 4 && initialhealth >= src.maxhealth / 4) - visible_message("\The [src] looks like it's about to break!" ) - else if(src.health < src.maxhealth / 2 && initialhealth >= src.maxhealth / 2) - visible_message("\The [src] looks seriously damaged!" ) - else if(src.health < src.maxhealth * 3/4 && initialhealth >= src.maxhealth * 3/4) - visible_message("\The [src] shows signs of damage!" ) - update_icon() - return - - -/obj/machinery/door/examine(mob/user) - . = ..() - if(src.health <= 0) - to_chat(user, "\The [src] is broken!") - else if(src.health < src.maxhealth / 4) - to_chat(user, "\The [src] looks like it's about to break!") - else if(src.health < src.maxhealth / 2) - to_chat(user, "\The [src] looks seriously damaged!") - else if(src.health < src.maxhealth * 3/4) - to_chat(user, "\The [src] shows signs of damage!") - - if (emagged && ishuman(user) && user.skill_check(SKILL_COMPUTER, SKILL_ADEPT)) - to_chat(user, SPAN_WARNING("\The [src]'s control panel looks fried.")) - - -/obj/machinery/door/set_broken(new_state) - . = ..() - if(. && new_state) - visible_message("\The [src.name] breaks!") - -/obj/machinery/door/ex_act(severity) - switch(severity) - if(EX_ACT_DEVASTATING) - qdel(src) - if(EX_ACT_HEAVY) - if(prob(25)) - qdel(src) - else - take_damage(100) - take_damage(200) - if(EX_ACT_LIGHT) - if(prob(80)) - var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread - s.set_up(2, 1, src) - s.start() - else - take_damage(100) - take_damage(100) - - -/obj/machinery/door/on_update_icon() - update_dir() - if(density) - icon_state = "door1" - else - icon_state = "door0" - SSradiation.resistance_cache.Remove(get_turf(src)) - return - -/obj/machinery/door/proc/update_dir() - if(connections in list(NORTH, SOUTH, NORTH|SOUTH)) - if(connections in list(WEST, EAST, EAST|WEST)) - set_dir(SOUTH) - else - set_dir(EAST) - else - set_dir(SOUTH) - -/obj/machinery/door/proc/do_animate(animation) - switch(animation) - if("opening") - if(p_open) - flick("o_doorc0", src) - else - flick("doorc0", src) - if("closing") - if(p_open) - flick("o_doorc1", src) - else - flick("doorc1", src) - if("spark") - if(density) - flick("door_spark", src) - if("deny") - if(density && !(stat & (NOPOWER|BROKEN))) - flick("door_deny", src) - if (world.time > next_clicksound) - next_clicksound = world.time + CLICKSOUND_INTERVAL - playsound(src.loc, 'sound/machines/buzz-two.ogg', 50, 0) - return - - -/obj/machinery/door/proc/open(var/forced = 0) - set waitfor = FALSE - if(!can_open(forced)) - return - operating = 1 - - do_animate("opening") - icon_state = "door0" - set_opacity(0) - sleep(3) - src.set_density(0) - update_nearby_tiles() - sleep(7) - src.layer = open_layer - update_icon() - set_opacity(0) - operating = 0 - - if(autoclose) - close_door_at = next_close_time() - - return 1 - -/obj/machinery/door/proc/next_close_time() - return world.time + (normalspeed ? 150 : 5) - -/obj/machinery/door/proc/close(var/forced = 0) - set waitfor = FALSE - if(!can_close(forced)) - return - operating = 1 - - close_door_at = 0 - do_animate("closing") - sleep(3) - src.set_density(1) - src.layer = closed_layer - update_nearby_tiles() - sleep(7) - update_icon() - if(visible && !glass) - set_opacity(1) //caaaaarn! - operating = 0 - - //I shall not add a check every x ticks if a door has closed over some fire. - var/obj/hotspot/fire = locate() in loc - if(fire) - qdel(fire) - return - -/obj/machinery/door/proc/toggle(forced = 0) - if(density) - open(forced) - else - close(forced) - -/obj/machinery/door/proc/requiresID() - return 1 - -/obj/machinery/door/allowed(mob/M) - if(!requiresID()) - return ..(null) //don't care who they are or what they have, act as if they're NOTHING - return ..(M) - -/obj/machinery/door/update_nearby_tiles(need_rebuild) - . = ..() - for(var/turf/simulated/turf in locs) - update_heat_protection(turf) - SSair.mark_for_update(turf) - return 1 - -/obj/machinery/door/proc/update_heat_protection(var/turf/simulated/source) - if(istype(source)) - if(src.density && (src.opacity || src.heat_proof)) - source.thermal_conductivity = DOOR_HEAT_TRANSFER_COEFFICIENT - else - source.thermal_conductivity = initial(source.thermal_conductivity) - -/obj/machinery/door/Move(new_loc, new_dir) - update_nearby_tiles() - - . = ..() - if(width > 1) - if(dir in list(EAST, WEST)) - bound_width = width * world.icon_size - bound_height = world.icon_size - else - bound_width = world.icon_size - bound_height = width * world.icon_size - - if(.) - deconstruct(null, TRUE) - -/obj/machinery/door/proc/CheckPenetration(var/base_chance, var/damage) - . = damage/maxhealth*180 - if(glass) - . *= 2 - . = round(.) - -/obj/machinery/door/proc/deconstruct(mob/user, var/moved = FALSE) - return null - -/obj/machinery/door/morgue - icon = 'icons/obj/doors/doormorgue.dmi' - -/obj/machinery/door/proc/update_connections(var/propagate = 0) - var/dirs = 0 - - for(var/direction in GLOB.cardinal) - var/turf/T = get_step(src, direction) - var/success = 0 - - if( istype(T, /turf/simulated/wall)) - success = 1 - if(propagate) - var/turf/simulated/wall/W = T - W.update_connections(1) - W.update_icon() - - else if( istype(T, /turf/simulated/shuttle/wall) || istype(T, /turf/unsimulated/wall)) - success = 1 - else - for(var/obj/O in T) - for(var/b_type in blend_objects) - if( istype(O, b_type)) - success = 1 - - if(success) - break - if(success) - break - - if(success) - dirs |= direction - connections = dirs - -/obj/machinery/door/CanFluidPass(var/coming_from) - return !density - -// Most doors will never be deconstructed over the course of a round, -// so as an optimization defer the creation of electronics until -// the airlock is deconstructed -/obj/machinery/door/proc/create_electronics(var/electronics_type = /obj/item/airlock_electronics) - var/obj/item/airlock_electronics/electronics = new electronics_type(loc) - electronics.set_access(src) - electronics.autoset = autoset_access - return electronics - -/obj/machinery/door/proc/access_area_by_dir(direction) - var/turf/T = get_turf(get_step(src, direction)) - if (T && !T.density) - return get_area(T) - -/obj/machinery/door/proc/inherit_access_from_area() - var/area/fore = access_area_by_dir(dir) - var/area/aft = access_area_by_dir(GLOB.reverse_dir[dir]) - fore = fore || aft - aft = aft || fore - - if (!fore && !aft) - req_access = list() - else if (fore.secure || aft.secure) - req_access = req_access_union(fore, aft) - else - req_access = req_access_diff(fore, aft) - -/obj/machinery/door/do_simple_ranged_interaction(var/mob/user) - . = ..() - if(!requiresID() || allowed(null)) - toggle() - return TRUE - -// Public access - -/decl/public_access/public_method/open_door - name = "open door" - desc = "Opens the door if possible." - call_proc = /obj/machinery/door/proc/open - -/decl/public_access/public_method/toggle_door - name = "toggle door" - desc = "Toggles whether the door is open or not, if possible." - call_proc = /obj/machinery/door/proc/toggle diff --git a/code/game/machinery/doors/firedoor.dm b/code/game/machinery/doors/firedoor.dm deleted file mode 100644 index 16cfe4eabd03d..0000000000000 --- a/code/game/machinery/doors/firedoor.dm +++ /dev/null @@ -1,535 +0,0 @@ -#define FIREDOOR_MAX_PRESSURE_DIFF 25 // kPa -#define FIREDOOR_MAX_TEMP 50 // °C -#define FIREDOOR_MIN_TEMP 0 - -// Bitflags -#define FIREDOOR_ALERT_HOT 1 -#define FIREDOOR_ALERT_COLD 2 - -/obj/machinery/door/firedoor - name = "emergency shutter" - desc = "An emergency air-tight shutter, capable of sealing off breached areas." - icon = 'icons/obj/doors/hazard/door.dmi' - var/panel_file = 'icons/obj/doors/hazard/panel.dmi' - var/welded_file = 'icons/obj/doors/hazard/welded.dmi' - icon_state = "open" - req_access = list(list(access_atmospherics, access_engine_equip)) - autoset_access = FALSE - opacity = FALSE - density = FALSE - layer = BELOW_DOOR_LAYER - open_layer = BELOW_DOOR_LAYER - closed_layer = ABOVE_WINDOW_LAYER - movable_flags = MOVABLE_FLAG_Z_INTERACT - pry_mod = 0.75 - atom_flags = ATOM_FLAG_ADJACENT_EXCEPTION - var/locked = FALSE //If the door is forced open, it will not close again until the next atmosphere alert in the area - - //These are frequently used with windows, so make sure zones can pass. - //Generally if a firedoor is at a place where there should be a zone boundery then there will be a regular door underneath it. - block_air_zones = FALSE - - var/blocked = FALSE // Whether or not the door is welded shut. - var/lockdown = FALSE // When the door has detected a problem, it locks. - var/closing = FALSE - var/hatch_open = FALSE - - var/pdiff = 0 // Pressure differential. Set to the difference between highest and lowest adjacent pressures in Process() - var/pdiff_alert = FALSE // If this firedoor has an active alert for pressure differential. - - var/nextstate = null - var/net_id - var/list/areas_added - var/list/users_to_open = new - var/next_process_time = 0 - var/open_sound = 'sound/machines/blastdoor_open.ogg' - var/close_sound = 'sound/machines/blastdoor_close.ogg' - - power_channel = ENVIRON - idle_power_usage = 5 - - var/list/tile_info[4] - var/list/dir_alerts[4] // 4 dirs, bitflags - - turf_hand_priority = 2 //Lower priority than normal doors to prevent interference - - // MUST be in same order as FIREDOOR_ALERT_* - var/list/ALERT_STATES=list( - "hot", - "cold" - ) - - blend_objects = list(/obj/machinery/door/firedoor, /obj/structure/wall_frame, /turf/unsimulated/wall, /obj/structure/window) // Objects which to blend with - -/obj/machinery/door/firedoor/autoset - autoset_access = TRUE //subtype just to make mapping away sites with custom access usage - req_access = list() - -/obj/machinery/door/firedoor/Initialize() - . = ..() - for(var/obj/machinery/door/firedoor/F in loc) - if(F != src) - return INITIALIZE_HINT_QDEL - var/area/A = get_area(src) - ASSERT(istype(A)) - - LAZYADD(A.all_doors, src) - areas_added = list(A) - - for(var/direction in GLOB.cardinal) - A = get_area(get_step(src,direction)) - if(istype(A) && !(A in areas_added)) - LAZYADD(A.all_doors, src) - areas_added += A - -/obj/machinery/door/firedoor/Destroy() - for(var/area/A in areas_added) - LAZYREMOVE(A.all_doors, src) - . = ..() - -/obj/machinery/door/firedoor/get_material() - return SSmaterials.get_material_by_name(MATERIAL_STEEL) - -/obj/machinery/door/firedoor/examine(mob/user, distance) - . = ..() - if(distance > 1) - return - if(locked) - to_chat(user, SPAN_WARNING("A light on the control mechanism is flashing red, indicating it is locked open.")) - if(!density) - return - - if(pdiff >= FIREDOOR_MAX_PRESSURE_DIFF) - to_chat(user, SPAN_WARNING("WARNING: Current pressure differential is [pdiff] kPa! Opening door may result in injury!")) - to_chat(user, "Sensor readings:") - for(var/index = 1; index <= tile_info.len; index++) - var/o = "  " - switch(index) - if(1) - o += "NORTH: " - if(2) - o += "SOUTH: " - if(3) - o += "EAST: " - if(4) - o += "WEST: " - if(tile_info[index] == null) - o += SPAN_WARNING("DATA UNAVAILABLE") - to_chat(user, o) - continue - var/celsius = convert_k2c(tile_info[index][1]) - var/pressure = tile_info[index][2] - o += "" - o += "[celsius]°C " - o += "" - o += "[pressure]kPa" - to_chat(user, o) - if(islist(users_to_open) && users_to_open.len) - var/users_to_open_string = users_to_open[1] - if(users_to_open.len >= 2) - for(var/i = 2 to users_to_open.len) - users_to_open_string += ", [users_to_open[i]]" - to_chat(user, "These people have opened \the [src] during an alert: [users_to_open_string].") - -/obj/machinery/door/firedoor/Bumped(atom/AM) - if(p_open || operating) - return - if(!density) - return ..() - return 0 - -/obj/machinery/door/firedoor/proc/get_alarm() - for(var/area/A in areas_added) //Checks if there are fire alarms in any areas associated with that firedoor - if(A.fire || A.air_doors_activated) - return TRUE - return FALSE - -/obj/machinery/door/firedoor/attack_generic(var/mob/user, var/damage) - playsound(loc, 'sound/weapons/tablehit1.ogg', 50, 1) - if(stat & BROKEN) - qdel(src) - ..() - -/obj/machinery/door/firedoor/attack_hand(mob/user) - add_fingerprint(user) - if(operating) - return//Already doing something. - - if(blocked) - to_chat(user, SPAN_WARNING("\The [src] is welded shut!")) - return - if(density && (stat & (BROKEN|NOPOWER))) //can still close without power - to_chat(user, "\The [src] is not functioning - you'll have to force it open manually.") - return - - var/alarmed = lockdown - alarmed = get_alarm() - - var/answer = alert(user, "Would you like to [density ? "open" : "close"] this [name]?[ alarmed && density ? "\nNote that by doing so, you acknowledge any damages from opening this\n[name] as being your own fault, and you will be held accountable under the law." : ""]",\ - "\The [src]", "Yes, [density ? "open" : "close"]", "No") - if(answer == "No") - return - if(user.incapacitated() || !user.Adjacent(src) && !issilicon(user)) - to_chat(user, SPAN_WARNING("You must remain able-bodied and close to \the [src] in order to use it.")) - return - if(alarmed && density && lockdown && !allowed(user)) - to_chat(user, SPAN_WARNING("Access denied. Please wait for authorities to arrive, or for the alert to clear.")) - return - else - user.visible_message( - SPAN_NOTICE("\The [src] [density ? "open" : "close"]s for \the [user]."), - SPAN_NOTICE("\The [src] [density ? "open" : "close"]s."), - SPAN_ITALIC("You hear a soft beep, and a door sliding [density ? "open" : "shut"].") - ) - playsound(loc, 'sound/piano/A#6.ogg', 50) - - var/needs_to_close = 0 - if(density) - if(alarmed) - // Accountability! - users_to_open |= user.name - needs_to_close = !issilicon(user) - spawn() - open() - else - spawn() - locked = FALSE - close() - - if(needs_to_close) - addtimer(CALLBACK(src, .proc/attempt_autoclose), 10 SECONDS) //Just in case a fire alarm is turned off while the firedoor is going through an autoclose cycle - -/obj/machinery/door/firedoor/attackby(obj/item/C, mob/user) - add_fingerprint(user, 0, C) - if(operating) - return //Already doing something. - - if(isWelder(C) && !repairing) - var/obj/item/weldingtool/W = C - if(W.remove_fuel(0, user)) - user.visible_message( - SPAN_WARNING("\The [user] starts [!blocked ? "welding \the [src] shut" : "cutting open \the [src]"]."), - SPAN_DANGER("You start [!blocked ? "welding \the [src] closed" : "cutting open \the [src]"]."), - SPAN_ITALIC("You hear welding.") - ) - playsound(loc, 'sound/items/Welder.ogg', 50, TRUE) - if(do_after(user, 2 SECONDS, src, DO_DEFAULT | DO_USER_UNIQUE_ACT | DO_PUBLIC_PROGRESS)) - if(!W.isOn()) - return - blocked = !blocked - user.visible_message( - SPAN_DANGER("\The [user] [blocked ? "welds \the [src] shut" : "cuts open \the [src]"]."), - SPAN_DANGER("You [blocked ? "weld shut" : "undo the welds on"] \the [src]."), - SPAN_ITALIC("You hear welding.") - ) - playsound(loc, 'sound/items/Welder2.ogg', 50, TRUE) - update_icon() - return - - if(density && isScrewdriver(C)) - hatch_open = !hatch_open - user.visible_message( - SPAN_NOTICE("\The [user] [hatch_open ? "opens" : "closes"] \the [src]'s maintenance hatch."), - SPAN_NOTICE("You [hatch_open ? "open" : "close"] \the [src]'s maintenance hatch."), - SPAN_ITALIC("You hear screws being adjusted.") - ) - playsound(loc, 'sound/items/Screwdriver.ogg', 25, TRUE) - update_icon() - return - - if(blocked && isCrowbar(C) && !repairing) - if(!hatch_open) - to_chat(user, SPAN_DANGER("You must open the maintenance hatch first!")) - else - user.visible_message( - SPAN_NOTICE("\The [user] starts removing \the [src]'s electronics."), - SPAN_NOTICE("You start levering out \the [src]'s electronics."), - SPAN_ITALIC("You hear metal bumping against metal.") - ) - playsound(loc, 'sound/items/Crowbar.ogg', 100, TRUE) - if(do_after(user, 3 SECONDS, src, DO_DEFAULT | DO_USER_UNIQUE_ACT | DO_PUBLIC_PROGRESS)) - if(blocked && density && hatch_open) - playsound(loc, 'sound/items/Deconstruct.ogg', 100, TRUE) - user.visible_message( - SPAN_NOTICE("\The [user] removes the electronics from \the [src]!"), - SPAN_NOTICE("You pry out \the [src]'s circuit board."), - SPAN_ITALIC("You hear metal coming loose and clattering.") - ) - deconstruct(user) - return - - if(blocked) - to_chat(user, SPAN_DANGER("\The [src] is welded shut!")) - return - - if(isCrowbar(C) || istype(C,/obj/item/material/twohanded/fireaxe)) - if(operating) - return - - if(blocked && isCrowbar(C)) - user.visible_message( - SPAN_WARNING("\The [user] pries at \the [src], but it's stuck in place!"), - SPAN_WARNING("You try to pry \the [src] [density ? "open" : "closed"], but it's been welded in place!"), - SPAN_WARNING("You hear the unhappy sound of metal straining and groaning.") - ) - return - - if(istype(C,/obj/item/material/twohanded/fireaxe)) - var/obj/item/material/twohanded/fireaxe/F = C - if(!F.wielded) - return - - user.visible_message( - SPAN_WARNING("\The [user] wedges \the [C] into \the [src] and starts forcing it [density ? "open" : "closed"]!"), - SPAN_DANGER("You start forcing \the [src] [density ? "open" : "shut"]."), - SPAN_WARNING("You hear metal groaning and grinding!") - ) - playsound(loc, 'sound/machines/airlock_creaking.ogg', 100, TRUE) - if(do_after(user, 3 SECONDS, src, DO_DEFAULT | DO_USER_UNIQUE_ACT | DO_PUBLIC_PROGRESS)) - if(isCrowbar(C)) - if(stat & (BROKEN|NOPOWER) || !density) - user.visible_message( - SPAN_DANGER("\The [user] pries \the [src] [density ? "open" : "shut"]!"), - SPAN_DANGER("You force [density ? "open" : "shut"] \the [src]!"), - SPAN_WARNING("You hear metal groan as a door is forced [density ? "open" : "closed"]!") - ) - else - user.visible_message( - SPAN_DANGER("\The [user] forces \the [src] [density ? "open" : "shut"]!"), - SPAN_DANGER("You force [density ? "open" : "shut"] \the [src]!"), - SPAN_WARNING("You hear metal shrieking as a door is forced [density ? "open" : "closed"]!") - ) - if(density) - spawn(0) - open(TRUE) - if(lockdown || get_alarm()) - locked = TRUE - else - spawn(0) - locked = FALSE - close() - return - return ..() - -/obj/machinery/door/firedoor/deconstruct(mob/user, var/moved = FALSE) - if (stat & BROKEN) - new /obj/item/stock_parts/circuitboard/broken(loc) - else - new/obj/item/airalarm_electronics(loc) - - var/obj/structure/firedoor_assembly/FA = new/obj/structure/firedoor_assembly(loc) - FA.anchored = !moved - FA.set_density(TRUE) - FA.wired = TRUE - FA.update_icon() - qdel(src) - - return FA - -// CHECK PRESSURE -/obj/machinery/door/firedoor/Process() - if(density && next_process_time <= world.time) - next_process_time = world.time + 100 // 10 second delays between process updates - var/changed = 0 - lockdown = FALSE - // Pressure alerts - - pdiff = getOPressureDifferential(loc) - if(pdiff >= FIREDOOR_MAX_PRESSURE_DIFF) - lockdown = TRUE - if(!pdiff_alert) - pdiff_alert = TRUE - changed = TRUE - else - if(pdiff_alert) - pdiff_alert = FALSE - changed = TRUE - - tile_info = getCardinalAirInfo(loc,list("temperature", "pressure")) - var/old_alerts = dir_alerts - for(var/index = 1; index <= 4; index++) - var/list/tileinfo = tile_info[index] - if(tileinfo == null) - continue // Bad data. - var/celsius = convert_k2c(tileinfo[1]) - - var/alerts = 0 - - // Temperatures - if(celsius >= FIREDOOR_MAX_TEMP) - alerts |= FIREDOOR_ALERT_HOT - lockdown = TRUE - else if(celsius <= FIREDOOR_MIN_TEMP) - alerts |= FIREDOOR_ALERT_COLD - lockdown = TRUE - - dir_alerts[index]=alerts - - if(dir_alerts != old_alerts) - changed = TRUE - if(changed) - update_icon() - -/obj/machinery/door/firedoor/proc/latetoggle() - if(operating || !nextstate) - return - switch(nextstate) - if(FIREDOOR_OPEN) - nextstate = null - open() - if(FIREDOOR_CLOSED) - nextstate = null - close() - return - -/obj/machinery/door/firedoor/close() - if(closing || locked) - return - - closing = TRUE - latetoggle() - var/list/people = list() - for(var/turf/turf in locs) - for(var/mob/living/M in turf) - people += M - if(length(people)) - visible_message( - SPAN_DANGER("\The [src] beeps ominously, get out of the way!"), - SPAN_DANGER("You hear buzzing coming from the ceiling."), - range = 3 - ) - playsound(loc, "sound/machines/firedoor.ogg", 50) - sleep(2 SECONDS) - for(var/turf/turf in locs) - for(var/mob/living/M in turf) - var/direction - for(var/d in GLOB.cardinal) - var/turf/T = get_step(src, d) - var/area/A = get_area(T) - if(istype(A) && !A.atmosalm && !turf_contains_dense_objects(T)) - direction = d - if(!direction) - T = get_step_away(src, d) - A = get_area(T) - if(istype(A) && !A.atmosalm && !turf_contains_dense_objects(T)) - direction = d - if(!direction) //Let's try again but this time ignore atmos alarms - for(var/d in GLOB.cardinal) - var/turf/T = get_step(src, d) - var/area/A = get_area(T) - if(istype(A) && !turf_contains_dense_objects(T)) - direction = d - if(!direction) - T = get_step_away(src, d) - A = get_area(T) - if(istype(A) && !turf_contains_dense_objects(T)) - direction = d - - M.visible_message( - SPAN_DANGER("\The [src] knocks \the [M] out of the way!"), - SPAN_DANGER("\The [src] forcefully shoves you out of the way!"), - SPAN_WARNING("You hear metal smacking into something.") - ) - M.apply_damage(10, DAMAGE_BRUTE, used_weapon = src) - if(direction) - M.Move(get_step(src, direction)) - playsound(loc, close_sound, 25, TRUE) - closing = FALSE - return ..() - -/obj/machinery/door/firedoor/open(var/forced = FALSE) - if(hatch_open) - hatch_open = FALSE - visible_message(SPAN_NOTICE("\The [src]'s maintenance hatch falls shut as it moves.")) - update_icon() - - if(!forced) - if(stat & (BROKEN|NOPOWER)) - return //needs power to open unless it was forced - else - use_power_oneoff(360) - else - log_and_message_admins("has forced open an emergency shutter.") - latetoggle() - playsound(loc, open_sound, 25, TRUE) - return ..() - -// Called ten seconds after a firedoor is opened manually during an active alert, to prevent it staying open for long. -/obj/machinery/door/firedoor/proc/attempt_autoclose() - if(!density && get_alarm()) - nextstate = FIREDOOR_CLOSED - close() - -// Only opens when all areas connecting with our turf have an air alarm and are cleared -/obj/machinery/door/firedoor/proc/can_safely_open() - var/turf/neighbour - for(var/dir in GLOB.cardinal) - neighbour = get_step(loc, dir) - if(neighbour.c_airblock(loc) & AIR_BLOCKED) - continue - for(var/obj/O in loc) - if(istype(O, /obj/machinery/door)) - continue - . |= O.c_airblock(neighbour) - if(. & AIR_BLOCKED) - continue - var/area/A = get_area(neighbour) - if(A.atmosalm) - return - var/obj/machinery/alarm/alarm = locate() in A - if(!alarm || (alarm.stat & (NOPOWER|BROKEN))) - return - return TRUE - -/obj/machinery/door/firedoor/do_animate(animation) - switch(animation) - if("opening") - flick("opening", src) - if("closing") - flick("closing", src) - return - - -/obj/machinery/door/firedoor/on_update_icon() - var/icon/lights_overlay - var/icon/panel_overlay - var/icon/weld_overlay - - overlays.Cut() - set_light(0) - var/do_set_light = FALSE - - if(connections in list(NORTH, SOUTH, NORTH|SOUTH)) - if(connections in list(WEST, EAST, EAST|WEST)) - set_dir(SOUTH) - else - set_dir(EAST) - else - set_dir(SOUTH) - - if(density) - icon_state = "closed" - if(hatch_open) - overlays = panel_overlay - if(pdiff_alert) - lights_overlay += "palert" - do_set_light = TRUE - if(dir_alerts) - for(var/d=1; d<=4; d++) - var/cdir = GLOB.cardinal[d] - for(var/i=1; i<=ALERT_STATES.len; i++) - if(dir_alerts[d] & SHIFTL(1, (i - 1))) - overlays += new/icon(icon, "alert_[ALERT_STATES[i]]", dir = cdir) - do_set_light = TRUE - else - icon_state = "open" - - if(blocked) - weld_overlay = welded_file - - if(do_set_light) - set_light(0.25, 0.1, 1, 2, COLOR_SUN) - - overlays += panel_overlay - overlays += weld_overlay - overlays += lights_overlay diff --git a/code/game/machinery/doors/firedoor_assembly.dm b/code/game/machinery/doors/firedoor_assembly.dm deleted file mode 100644 index 72316113b1282..0000000000000 --- a/code/game/machinery/doors/firedoor_assembly.dm +++ /dev/null @@ -1,68 +0,0 @@ -/obj/structure/firedoor_assembly - name = "\improper emergency shutter assembly" - desc = "It can save lives." - icon = 'icons/obj/doors/hazard/door.dmi' - icon_state = "construction" - anchored = FALSE - opacity = 0 - density = TRUE - var/wired = 0 - -//construction: wrenched > cables > electronics > screwdriver & open -//deconstruction: closed & welded > screwdriver > crowbar > wire cutters > wrench > welder - -/obj/structure/firedoor_assembly/attackby(var/obj/item/C, var/mob/user) - if(isCoil(C) && !wired && anchored) - var/obj/item/stack/cable_coil/cable = C - if (cable.get_amount() < 1) - to_chat(user, "You need one length of coil to wire \the [src].") - return - user.visible_message("[user] wires \the [src].", "You start to wire \the [src].") - if(do_after(user, 4 SECONDS, src, DO_PUBLIC_UNIQUE) && !wired && anchored) - if (cable.use(1)) - wired = 1 - to_chat(user, "You wire \the [src].") - - else if(isWirecutter(C) && wired ) - playsound(src.loc, 'sound/items/Wirecutter.ogg', 100, 1) - user.visible_message("[user] cuts the wires from \the [src].", "You start to cut the wires from \the [src].") - - if(do_after(user, 4 SECONDS, src, DO_PUBLIC_UNIQUE)) - if(!src) return - to_chat(user, "You cut the wires!") - new/obj/item/stack/cable_coil(src.loc, 1) - wired = 0 - - else if(istype(C, /obj/item/airalarm_electronics) && wired) - if(anchored) - playsound(src.loc, 'sound/items/Deconstruct.ogg', 50, 1) - user.visible_message("[user] has inserted a circuit into \the [src]!", - "You have inserted the circuit into \the [src]!") - var/obj/machinery/door/firedoor/D = new(src.loc) - D.hatch_open = 1 - D.close() - qdel(C) - qdel(src) - else - to_chat(user, "You must secure \the [src] first!") - else if(isWrench(C) && !wired) - anchored = !anchored - playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1) - user.visible_message("[user] has [anchored ? "" : "un" ]secured \the [src]!", - "You have [anchored ? "" : "un" ]secured \the [src]!") - update_icon() - else if(!anchored && isWelder(C)) - var/obj/item/weldingtool/WT = C - if(WT.remove_fuel(0, user)) - user.visible_message("[user] dissassembles \the [src].", - "You start to dissassemble \the [src].") - if(do_after(user, 4 SECONDS, src, DO_PUBLIC_UNIQUE)) - if(!src || !WT.isOn()) return - user.visible_message("[user] has dissassembled \the [src].", - "You have dissassembled \the [src].") - new /obj/item/stack/material/steel(src.loc, 4) - qdel(src) - else - to_chat(user, "You need more welding fuel.") - else - ..(C, user) diff --git a/code/game/machinery/doors/multi_tile.dm b/code/game/machinery/doors/multi_tile.dm deleted file mode 100644 index f07eea09653c9..0000000000000 --- a/code/game/machinery/doors/multi_tile.dm +++ /dev/null @@ -1,186 +0,0 @@ -//Terribly sorry for the code doubling, but things go derpy otherwise. -/obj/machinery/door/airlock/multi_tile - airlock_type = "double" - name = "\improper Airlock" - icon = 'icons/obj/doors/double/door.dmi' - fill_file = 'icons/obj/doors/double/fill_steel.dmi' - color_file = 'icons/obj/doors/double/color.dmi' - color_fill_file = 'icons/obj/doors/double/fill_color.dmi' - stripe_file = 'icons/obj/doors/double/stripe.dmi' - stripe_fill_file = 'icons/obj/doors/double/fill_stripe.dmi' - glass_file = 'icons/obj/doors/double/fill_glass.dmi' - bolts_file = 'icons/obj/doors/double/lights_bolts.dmi' - deny_file = 'icons/obj/doors/double/lights_deny.dmi' - lights_file = 'icons/obj/doors/double/lights_green.dmi' - panel_file = 'icons/obj/doors/double/panel.dmi' - welded_file = 'icons/obj/doors/double/welded.dmi' - emag_file = 'icons/obj/doors/double/emag.dmi' - width = 2 - appearance_flags = DEFAULT_APPEARANCE_FLAGS - opacity = 1 - assembly_type = /obj/structure/door_assembly/multi_tile - -/obj/machinery/door/airlock/multi_tile/New() - ..() - SetBounds() - -/obj/machinery/door/airlock/multi_tile/Move() - . = ..() - SetBounds() - -/obj/machinery/door/airlock/multi_tile/proc/SetBounds() - if(dir in list(NORTH, SOUTH)) - bound_width = width * world.icon_size - bound_height = world.icon_size - else - bound_width = world.icon_size - bound_height = width * world.icon_size - - -/obj/machinery/door/airlock/multi_tile/on_update_icon(state=0, override=0) - ..() - if(connections in list(NORTH, SOUTH, NORTH|SOUTH)) - if(connections in list(WEST, EAST, EAST|WEST)) - set_dir(SOUTH) - else - set_dir(WEST) - else - set_dir(SOUTH) - -/obj/machinery/door/airlock/multi_tile/update_connections(var/propagate = 0) - var/dirs = 0 - - for(var/direction in GLOB.cardinal) - var/turf/T = get_step(src, direction) - var/success = 0 - - if(direction in list(NORTH, EAST)) - T = get_step(T, direction) - - if( istype(T, /turf/simulated/wall)) - success = 1 - if(propagate) - var/turf/simulated/wall/W = T - W.update_connections() - W.update_icon() - - else if( istype(T, /turf/simulated/shuttle/wall)) - success = 1 - else - for(var/obj/O in T) - for(var/b_type in blend_objects) - if( istype(O, b_type)) - success = 1 - - if(success) - break - if(success) - break - - if(success) - dirs |= direction - connections = dirs - -/obj/machinery/door/airlock/multi_tile/command - door_color = COLOR_COMMAND_BLUE - -/obj/machinery/door/airlock/multi_tile/security - door_color = COLOR_NT_RED - -/obj/machinery/door/airlock/multi_tile/engineering - name = "Maintenance Hatch" - door_color = COLOR_AMBER - -/obj/machinery/door/airlock/multi_tile/medical - door_color = COLOR_WHITE - stripe_color = COLOR_DEEP_SKY_BLUE - -/obj/machinery/door/airlock/multi_tile/virology - door_color = COLOR_WHITE - stripe_color = COLOR_GREEN - -/obj/machinery/door/airlock/multi_tile/mining - name = "Mining Airlock" - door_color = COLOR_PALE_ORANGE - stripe_color = COLOR_BEASTY_BROWN - -/obj/machinery/door/airlock/multi_tile/atmos - door_color = COLOR_AMBER - stripe_color = COLOR_CYAN - -/obj/machinery/door/airlock/multi_tile/research - door_color = COLOR_WHITE - stripe_color = COLOR_RESEARCH - -/obj/machinery/door/airlock/multi_tile/science - door_color = COLOR_WHITE - stripe_color = COLOR_VIOLET - -/obj/machinery/door/airlock/multi_tile/sol - door_color = COLOR_BLUE_GRAY - -/obj/machinery/door/airlock/multi_tile/maintenance - name = "Maintenance Access" - stripe_color = COLOR_AMBER - -/obj/machinery/door/airlock/multi_tile/civilian - stripe_color = COLOR_CIVIE_GREEN - -/obj/machinery/door/airlock/multi_tile/freezer - name = "Freezer Airlock" - door_color = COLOR_WHITE - -/obj/machinery/door/airlock/multi_tile/glass - name = "Glass Airlock" - hitsound = 'sound/effects/Glasshit.ogg' - glass = 1 - -/obj/machinery/door/airlock/multi_tile/glass/command - door_color = COLOR_COMMAND_BLUE - stripe_color = COLOR_SKY_BLUE - -/obj/machinery/door/airlock/multi_tile/glass/security - door_color = COLOR_NT_RED - stripe_color = COLOR_ORANGE - -/obj/machinery/door/airlock/multi_tile/glass/engineering - door_color = COLOR_AMBER - stripe_color = COLOR_RED - -/obj/machinery/door/airlock/multi_tile/glass/medical - door_color = COLOR_WHITE - stripe_color = COLOR_DEEP_SKY_BLUE - -/obj/machinery/door/airlock/multi_tile/glass/virology - door_color = COLOR_WHITE - stripe_color = COLOR_GREEN - -/obj/machinery/door/airlock/multi_tile/glass/mining - door_color = COLOR_PALE_ORANGE - stripe_color = COLOR_BEASTY_BROWN - -/obj/machinery/door/airlock/multi_tile/glass/atmos - door_color = COLOR_AMBER - stripe_color = COLOR_CYAN - -/obj/machinery/door/airlock/multi_tile/glass/research - door_color = COLOR_WHITE - stripe_color = COLOR_RESEARCH - -/obj/machinery/door/airlock/multi_tile/glass/science - door_color = COLOR_WHITE - stripe_color = COLOR_VIOLET - -/obj/machinery/door/airlock/multi_tile/glass/sol - door_color = COLOR_BLUE_GRAY - stripe_color = COLOR_AMBER - -/obj/machinery/door/airlock/multi_tile/glass/freezer - door_color = COLOR_WHITE - -/obj/machinery/door/airlock/multi_tile/glass/maintenance - name = "Maintenance Access" - stripe_color = COLOR_AMBER - -/obj/machinery/door/airlock/multi_tile/glass/civilian - stripe_color = COLOR_CIVIE_GREEN \ No newline at end of file diff --git a/code/game/machinery/doors/simple.dm b/code/game/machinery/doors/simple.dm deleted file mode 100644 index 023ae8dcf4b4b..0000000000000 --- a/code/game/machinery/doors/simple.dm +++ /dev/null @@ -1,253 +0,0 @@ -/obj/machinery/door/unpowered/simple - name = "door" - icon = 'icons/obj/doors/material_doors.dmi' - icon_state = "metal" - - var/material/material - var/icon_base - hitsound = 'sound/weapons/genhit.ogg' - var/datum/lock/lock - var/initial_lock_value //for mapping purposes. Basically if this value is set, it sets the lock to this value. - autoset_access = FALSE // Doesn't even use access - pry_mod = 0.1 - -/obj/machinery/door/unpowered/simple/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume) - TemperatureAct(exposed_temperature) - -/obj/machinery/door/unpowered/simple/proc/TemperatureAct(temperature) - take_damage(100*material.combustion_effect(get_turf(src),temperature, 0.3)) - -/obj/machinery/door/unpowered/simple/New(var/newloc, var/material_name, var/locked) - ..() - if(!material_name) - material_name = MATERIAL_STEEL - material = SSmaterials.get_material_by_name(material_name) - if(!material) - return INITIALIZE_HINT_QDEL - maxhealth = max(100, material.integrity*2) - health = maxhealth - if(!icon_base) - icon_base = material.door_icon_base - hitsound = material.hitsound - name = "[material.display_name] door" - color = material.icon_colour - if(initial_lock_value) - locked = initial_lock_value - if(locked) - lock = new(src,locked) - if(material.luminescence) - set_light(0.5, 1, material.luminescence, l_color = material.icon_colour) - - if(material.opacity < 0.5) - glass = 1 - alpha = 180 - set_opacity(0) - - if(!density) - set_opacity(0) - update_icon() - -/obj/machinery/door/unpowered/simple/c_airblock(turf/other) - return FALSE - -/obj/machinery/door/unpowered/simple/requiresID() - return 0 - -/obj/machinery/door/unpowered/simple/get_material() - return material - -/obj/machinery/door/unpowered/simple/get_material_name() - return material.name - -/obj/machinery/door/unpowered/simple/bullet_act(var/obj/item/projectile/Proj) - var/damage = Proj.get_structure_damage() - if(damage) - //cap projectile damage so that there's still a minimum number of hits required to break the door - take_damage(min(damage, 100)) - -/obj/machinery/door/unpowered/simple/on_update_icon() - update_dir() - if(density) - icon_state = "[icon_base]" - else - icon_state = "[icon_base]open" - return - -/obj/machinery/door/unpowered/simple/do_animate(animation) - switch(animation) - if("opening") - flick("[icon_base]opening", src) - if("closing") - flick("[icon_base]closing", src) - return - -/obj/machinery/door/unpowered/simple/inoperable(var/additional_flags = 0) - return (stat & (BROKEN|additional_flags)) - -/obj/machinery/door/unpowered/simple/close(var/forced = 0) - if(!can_close(forced)) - return - - // If the door is blocked, don't close - for(var/turf/A in locs) - var/turf/T = A - var/obstruction = T.get_obstruction() - if (obstruction) - return - - playsound(src.loc, material.dooropen_noise, 100, 1) - ..() - -/obj/machinery/door/unpowered/simple/open(var/forced = 0) - if(!can_open(forced)) - return - playsound(src.loc, material.dooropen_noise, 100, 1) - ..() - -/obj/machinery/door/unpowered/simple/set_broken(var/new_state, var/cause = MACHINE_BROKEN_GENERIC) - ..() - if(new_state) - deconstruct(null) - -/obj/machinery/door/unpowered/simple/deconstruct(mob/user, moved = FALSE) - material.place_dismantled_product(get_turf(src)) - qdel(src) - -/obj/machinery/door/unpowered/simple/attack_ai(mob/user as mob) //those aren't machinery, they're just big fucking slabs of a mineral - if(isAI(user)) //so the AI can't open it - return - else if(isrobot(user)) //but cyborgs can - if(Adjacent(user)) //not remotely though - return attack_hand(user) - -/obj/machinery/door/unpowered/simple/ex_act(severity) - switch(severity) - if(EX_ACT_DEVASTATING) - set_broken(TRUE) - if(EX_ACT_HEAVY) - if(prob(25)) - set_broken(TRUE) - else - take_damage(300) - if(EX_ACT_LIGHT) - if(prob(20)) - take_damage(150) - - -/obj/machinery/door/unpowered/simple/attackby(obj/item/I as obj, mob/user as mob) - src.add_fingerprint(user, 0, I) - if(istype(I, /obj/item/key) && lock) - var/obj/item/key/K = I - if(!lock.toggle(I)) - to_chat(user, "\The [K] does not fit in the lock!") - return - if(lock && lock.pick_lock(I,user)) - return - - if(istype(I,/obj/item/material/lock_construct)) - if(lock) - to_chat(user, "\The [src] already has a lock.") - else - var/obj/item/material/lock_construct/L = I - lock = L.create_lock(src,user) - return - - if(istype(I, /obj/item/stack/material) && I.get_material_name() == src.get_material_name()) - if(stat & BROKEN) - to_chat(user, "It looks like \the [src] is pretty busted. It's going to need more than just patching up now.") - return - if(health >= maxhealth) - to_chat(user, "Nothing to fix!") - return - if(!density) - to_chat(user, "\The [src] must be closed before you can repair it.") - return - - //figure out how much metal we need - var/obj/item/stack/stack = I - var/amount_needed = Ceil((maxhealth - health)/DOOR_REPAIR_AMOUNT) - var/used = min(amount_needed,stack.amount) - if (used) - to_chat(user, "You fit [used] [stack.singular_name]\s to damaged and broken parts on \the [src].") - stack.use(used) - health = clamp(health + used * DOOR_REPAIR_AMOUNT, health, maxhealth) - return - - if (check_force(I, user)) - return - - if(src.operating) return - - if(lock && lock.isLocked()) - to_chat(user, "\The [src] is locked!") - - if(operable()) - if(src.density) - open() - else - close() - return - - return - -/obj/machinery/door/unpowered/simple/examine(mob/user, distance) - . = ..() - if(distance <= 1 && lock) - to_chat(user, "It appears to have a lock.") - -/obj/machinery/door/unpowered/simple/can_open() - if(!..() || (lock && lock.isLocked())) - return 0 - return 1 - -/obj/machinery/door/unpowered/simple/Destroy() - QDEL_NULL(lock) - return ..() - -/obj/machinery/door/unpowered/simple/iron/New(var/newloc,var/material_name,var/complexity) - ..(newloc, MATERIAL_IRON, complexity) - -/obj/machinery/door/unpowered/simple/silver/New(var/newloc,var/material_name,var/complexity) - ..(newloc, MATERIAL_SILVER, complexity) - -/obj/machinery/door/unpowered/simple/gold/New(var/newloc,var/material_name,var/complexity) - ..(newloc, MATERIAL_GOLD, complexity) - -/obj/machinery/door/unpowered/simple/uranium/New(var/newloc,var/material_name,var/complexity) - ..(newloc, MATERIAL_URANIUM, complexity) - -/obj/machinery/door/unpowered/simple/sandstone/New(var/newloc,var/material_name,var/complexity) - ..(newloc, MATERIAL_SANDSTONE, complexity) - -/obj/machinery/door/unpowered/simple/diamond/New(var/newloc,var/material_name,var/complexity) - ..(newloc, MATERIAL_DIAMOND, complexity) - -/obj/machinery/door/unpowered/simple/wood/New(var/newloc,var/material_name,var/complexity) - ..(newloc, MATERIAL_WOOD, complexity) - -/obj/machinery/door/unpowered/simple/mahogany/New(var/newloc,var/material_name,var/complexity) - ..(newloc, MATERIAL_MAHOGANY, complexity) - -/obj/machinery/door/unpowered/simple/maple/New(var/newloc,var/material_name,var/complexity) - ..(newloc, MATERIAL_MAPLE, complexity) - -/obj/machinery/door/unpowered/simple/ebony/New(var/newloc,var/material_name,var/complexity) - ..(newloc, MATERIAL_EBONY, complexity) - -/obj/machinery/door/unpowered/simple/walnut/New(var/newloc,var/material_name,var/complexity) - ..(newloc, MATERIAL_WALNUT, complexity) - -/obj/machinery/door/unpowered/simple/plastic/New(var/newloc,var/material_name,var/complexity) - ..(newloc, MATERIAL_PLASTIC, complexity) - -/obj/machinery/door/unpowered/simple/plastic/open - density = FALSE - -/obj/machinery/door/unpowered/simple/glass/New(var/newloc,var/material_name,var/complexity) - ..(newloc, MATERIAL_GLASS, complexity) - -/obj/machinery/door/unpowered/simple/cult/New(var/newloc,var/material_name,var/complexity) - ..(newloc, MATERIAL_CULT, complexity) - -/obj/machinery/door/unpowered/simple/supermatter/New(var/newloc,var/material_name,var/complexity) - ..(newloc, MATERIAL_SUPERMATTER, complexity) diff --git a/code/game/machinery/doors/unpowered.dm b/code/game/machinery/doors/unpowered.dm deleted file mode 100644 index 5c6f204b476a5..0000000000000 --- a/code/game/machinery/doors/unpowered.dm +++ /dev/null @@ -1,26 +0,0 @@ -/obj/machinery/door/unpowered - autoclose = 0 - var/locked = 0 - autoset_access = FALSE - -/obj/machinery/door/unpowered/Bumped(atom/AM) - if(src.locked) - return - ..() - return - -/obj/machinery/door/unpowered/attackby(obj/item/I as obj, mob/user as mob) - if(istype(I, /obj/item/melee/energy/blade)) return - if(src.locked) return - ..() - return - -/obj/machinery/door/unpowered/emag_act() - return -1 - -/obj/machinery/door/unpowered/shuttle - icon = 'icons/turf/shuttle.dmi' - name = "door" - icon_state = "door1" - opacity = 1 - density = TRUE diff --git a/code/game/machinery/doors/windowdoor.dm b/code/game/machinery/doors/windowdoor.dm deleted file mode 100644 index 6a147848d103b..0000000000000 --- a/code/game/machinery/doors/windowdoor.dm +++ /dev/null @@ -1,326 +0,0 @@ -/obj/machinery/door/window - name = "interior door" - desc = "A strong door." - icon = 'icons/obj/doors/windoor.dmi' - icon_state = "left" - var/base_state = "left" - min_force = 4 - hitsound = 'sound/effects/Glasshit.ogg' - maxhealth = 150 //If you change this, consiter changing ../door/window/brigdoor/ health at the bottom of this .dm file - health = 150 - visible = 0.0 - use_power = POWER_USE_OFF - stat_immune = NOSCREEN | NOINPUT | NOPOWER - uncreated_component_parts = null - atom_flags = ATOM_FLAG_NO_TEMP_CHANGE | ATOM_FLAG_CHECKS_BORDER - opacity = 0 - var/obj/item/airlock_electronics/electronics = null - explosion_resistance = 5 - air_properties_vary_with_direction = 1 - pry_mod = 0.5 - -/obj/machinery/door/window/New() - ..() - update_nearby_tiles() - -/obj/machinery/door/window/Initialize(mapload, obj/structure/windoor_assembly/assembly) - if(assembly) - set_dir(assembly.dir) - set_density(0) - if(assembly.electronics) - if(assembly.electronics.autoset) - autoset_access = TRUE // Being careful in case of subtypes or something. - else - req_access = assembly.electronics.conf_access - if(assembly.electronics.one_access) - req_access = list(req_access) - autoset_access = FALSE - electronics = assembly.electronics - electronics.forceMove(src) - . = ..() - -/obj/machinery/door/window/on_update_icon() - if(density) - icon_state = base_state - else - icon_state = "[base_state]open" - -/obj/machinery/door/window/proc/shatter(var/display_message = 1) - new /obj/item/material/shard(src.loc) - var/obj/item/stack/cable_coil/CC = new /obj/item/stack/cable_coil(src.loc) - CC.amount = 2 - var/obj/item/airlock_electronics/ae - if(!electronics) - create_electronics() - ae = electronics - electronics = null - ae.dropInto(loc) - if(operating == -1) - ae.icon_state = "door_electronics_smoked" - operating = 0 - set_density(0) - playsound(src, "shatter", 70, 1) - if(display_message) - visible_message("[src] shatters!") - qdel(src) - -/obj/machinery/door/window/deconstruct(mob/user, var/moved = FALSE) - shatter() - -/obj/machinery/door/window/Destroy() - set_density(0) - update_nearby_tiles() - return ..() - -/obj/machinery/door/window/Bumped(atom/movable/AM as mob|obj) - if (!( ismob(AM) )) - var/mob/living/bot/bot = AM - if(istype(bot)) - if(density && src.check_access(bot.botcard)) - open() - addtimer(CALLBACK(src, .proc/close), 5 SECONDS, TIMER_UNIQUE | TIMER_OVERRIDE) - return - var/mob/M = AM // we've returned by here if M is not a mob - if (src.operating) - return - if (src.density && (!issmall(M) || ishuman(M) || issilicon(M)) && src.allowed(AM)) - open() - var/open_timer - if(src.check_access(null)) - open_timer = 5 SECONDS - else //secure doors close faster - open_timer = 2 SECONDS - addtimer(CALLBACK(src, .proc/close), open_timer, TIMER_UNIQUE | TIMER_OVERRIDE) - return - -/obj/machinery/door/window/CanPass(atom/movable/mover, turf/target, height=0, air_group=0) - if(istype(mover) && mover.checkpass(PASS_FLAG_GLASS)) - return 1 - if(get_dir(loc, target) & dir) //Make sure looking at appropriate border - if(air_group) return 0 - return !density - else - return 1 - -/obj/machinery/door/window/CheckExit(atom/movable/mover as mob|obj, turf/target as turf) - if(istype(mover) && mover.checkpass(PASS_FLAG_GLASS)) - return 1 - if(get_dir(loc, target) == dir) - return !density - else - return 1 - -/obj/machinery/door/window/open() - if (operating == 1) //doors can still open when emag-disabled - return 0 - if (!src.operating) //in case of emag - src.operating = 1 - - icon_state = "[src.base_state]open"; - flick("[src.base_state]opening", src) - playsound(src.loc, 'sound/machines/windowdoor.ogg', 100, 1) - addtimer(CALLBACK(src, .proc/open_final), 1 SECOND, TIMER_UNIQUE | TIMER_OVERRIDE) - - return 1 - -/obj/machinery/door/window/proc/open_final() - explosion_resistance = 0 - set_density(FALSE) - update_icon() - update_nearby_tiles() - - if(operating == 1) //emag again - operating = 0 - -/obj/machinery/door/window/close() - if (src.operating) - return 0 - operating = 1 - flick(text("[]closing", src.base_state), src) - playsound(src.loc, 'sound/machines/windowdoor.ogg', 100, 1) - set_density(1) - update_icon() - explosion_resistance = initial(explosion_resistance) - update_nearby_tiles() - - addtimer(CALLBACK(src, .proc/close_final), 1 SECOND, TIMER_UNIQUE | TIMER_OVERRIDE) - return TRUE - -/obj/machinery/door/window/proc/close_final() - operating = 0 - -/obj/machinery/door/window/take_damage(var/damage) - src.health = max(0, src.health - damage) - if (src.health <= 0) - shatter() - return - -/obj/machinery/door/window/physical_attack_hand(mob/user) - if(istype(user,/mob/living/carbon/human)) - var/mob/living/carbon/human/H = user - if(H.species.can_shred(H)) - playsound(src.loc, 'sound/effects/Glasshit.ogg', 75, 1) - visible_message("[user] smashes against the [src.name].", 1) - take_damage(25) - return TRUE - -/obj/machinery/door/window/emag_act(var/remaining_charges, var/mob/user) - if (emagged) - to_chat(user, SPAN_WARNING("\The [src] has already been locked open.")) - return FALSE - if (!operable()) - to_chat(user, SPAN_WARNING("\The [src] is not functioning and doesn't respond to your attempt to short the circuitry.")) - return FALSE - - operating = -1 - emagged = TRUE - to_chat(user, SPAN_NOTICE("You short out \the [src]'s internal circuitry, locking it open!")) - if (density) - flick("[base_state]spark", src) - addtimer(CALLBACK(src, .proc/open), 6, TIMER_UNIQUE | TIMER_OVERRIDE) - return TRUE - -/obj/machinery/door/window/emp_act(severity) - if(prob(20/severity)) - spawn(0) - open() - ..() - -/obj/machinery/door/window/CanFluidPass(var/coming_from) - return !density || ((dir in GLOB.cardinal) && coming_from != dir) - -/obj/machinery/door/window/attackby(obj/item/I as obj, mob/user as mob) - - //If it's in the process of opening/closing, ignore the click - if (src.operating == 1) - return - - //Emags and ninja swords? You may pass. - if (istype(I, /obj/item/melee/energy/blade)) - if(emag_act(10, user)) - var/datum/effect/effect/system/spark_spread/spark_system = new /datum/effect/effect/system/spark_spread() - spark_system.set_up(5, 0, src.loc) - spark_system.start() - playsound(src.loc, "sparks", 50, 1) - playsound(src.loc, 'sound/weapons/blade1.ogg', 50, 1) - visible_message("The glass door was sliced open by [user]!") - return 1 - - //If it's emagged, crowbar can pry electronics out. - if (src.operating == -1 && isCrowbar(I)) - playsound(src.loc, 'sound/items/Crowbar.ogg', 100, 1) - user.visible_message("[user] removes the electronics from the windoor.", "You start to remove electronics from the windoor.") - if (do_after(user, 4 SECONDS, src, DO_PUBLIC_UNIQUE)) - to_chat(user, "You removed the windoor electronics!") - - var/obj/structure/windoor_assembly/wa = new/obj/structure/windoor_assembly(src.loc) - if (istype(src, /obj/machinery/door/window/brigdoor)) - wa.secure = "secure_" - wa.SetName("Secure Wired Windoor Assembly") - else - wa.SetName("Wired Windoor Assembly") - if (src.base_state == "right" || src.base_state == "rightsecure") - wa.facing = "r" - wa.set_dir(src.dir) - wa.state = "02" - wa.update_icon() - - shatter(src) - operating = 0 - return - - if (check_force(I, user)) - return - - src.add_fingerprint(user, 0, I) - - if (src.allowed(user)) - if (src.density) - open() - else - if (emagged) - to_chat(user, SPAN_WARNING("\The [src] seems to be stuck and refuses to close!")) - return - close() - - else if (src.density) - flick(text("[]deny", src.base_state), src) - -/obj/machinery/door/window/create_electronics(var/electronics_type = /obj/item/airlock_electronics) - electronics = ..() - return electronics - -/obj/machinery/door/window/brigdoor - name = "secure door" - icon = 'icons/obj/doors/windoor.dmi' - icon_state = "leftsecure" - base_state = "leftsecure" - var/id = null - maxhealth = 300 - health = 300.0 //Stronger doors for prison (regular window door health is 150) - pry_mod = 0.65 - - -/obj/machinery/door/window/northleft - dir = NORTH - -/obj/machinery/door/window/eastleft - dir = EAST - -/obj/machinery/door/window/westleft - dir = WEST - -/obj/machinery/door/window/southleft - dir = SOUTH - -/obj/machinery/door/window/northright - dir = NORTH - icon_state = "right" - base_state = "right" - -/obj/machinery/door/window/eastright - dir = EAST - icon_state = "right" - base_state = "right" - -/obj/machinery/door/window/westright - dir = WEST - icon_state = "right" - base_state = "right" - -/obj/machinery/door/window/southright - dir = SOUTH - icon_state = "right" - base_state = "right" - -/obj/machinery/door/window/brigdoor/northleft - dir = NORTH - -/obj/machinery/door/window/brigdoor/eastleft - dir = EAST - -/obj/machinery/door/window/brigdoor/westleft - dir = WEST - -/obj/machinery/door/window/brigdoor/southleft - dir = SOUTH - -/obj/machinery/door/window/brigdoor/northright - dir = NORTH - icon_state = "rightsecure" - base_state = "rightsecure" - -/obj/machinery/door/window/brigdoor/eastright - dir = EAST - icon_state = "rightsecure" - base_state = "rightsecure" - -/obj/machinery/door/window/brigdoor/westright - dir = WEST - icon_state = "rightsecure" - base_state = "rightsecure" - -/obj/machinery/door/window/brigdoor/southright - dir = SOUTH - icon_state = "rightsecure" - base_state = "rightsecure" diff --git a/code/game/machinery/doppler_array.dm b/code/game/machinery/doppler_array.dm deleted file mode 100644 index 71ac36b496a42..0000000000000 --- a/code/game/machinery/doppler_array.dm +++ /dev/null @@ -1,48 +0,0 @@ -var/global/list/doppler_arrays = list() - -/obj/machinery/doppler_array - name = "tachyon-doppler array" - desc = "A highly precise directional sensor array which measures the release of quants from decaying tachyons. The doppler shifting of the mirror-image formed by these quants can reveal the size, location and temporal affects of energetic disturbances within a large radius ahead of the array." - - -/obj/machinery/doppler_array/New() - ..() - doppler_arrays += src - -/obj/machinery/doppler_array/Destroy() - doppler_arrays -= src - ..() - -/obj/machinery/doppler_array/proc/sense_explosion(var/x0,var/y0,var/z0,var/devastation_range,var/heavy_impact_range,var/light_impact_range,var/took) - if(stat & NOPOWER) return - if(z != z0) return - - var/dx = abs(x0-x) - var/dy = abs(y0-y) - var/distance - var/direct - - if(dx > dy) - distance = dx - if(x0 > x) direct = EAST - else direct = WEST - else - distance = dy - if(y0 > y) direct = NORTH - else direct = SOUTH - - if(distance > 100) return - if(!(direct & dir)) return - - var/message = "Explosive disturbance detected - Epicenter at: grid ([x0],[y0]). Epicenter radius: [devastation_range]. Outer radius: [heavy_impact_range]. Shockwave radius: [light_impact_range]. Temporal displacement of tachyons: [took]seconds." - - for(var/mob/O in hearers(src, null)) - O.show_message("[src] states coldly, \"[message]\"",2) - -/obj/machinery/doppler_array/on_update_icon() - if(stat & BROKEN) - icon_state = "[initial(icon_state)]-broken" - else if( !(stat & NOPOWER) ) - icon_state = initial(icon_state) - else - icon_state = "[initial(icon_state)]-off" \ No newline at end of file diff --git a/code/game/machinery/embedded_controller/airlock_controllers.dm b/code/game/machinery/embedded_controller/airlock_controllers.dm deleted file mode 100644 index a12fadd922af6..0000000000000 --- a/code/game/machinery/embedded_controller/airlock_controllers.dm +++ /dev/null @@ -1,98 +0,0 @@ -//base type for controllers of two-door systems -/obj/machinery/embedded_controller/radio/airlock - // Setup parameters only - radio_filter = RADIO_AIRLOCK - program = /datum/computer/file/embedded_program/airlock - var/tag_exterior_door - var/tag_interior_door - var/tag_airpump - var/tag_chamber_sensor - var/tag_exterior_sensor - var/tag_interior_sensor - var/tag_airlock_mech_sensor - var/tag_shuttle_mech_sensor - var/tag_secure = 0 - var/tag_air_alarm - var/list/dummy_terminals = list() - var/cycle_to_external_air = 0 - var/scrubber_assist = 0 - -/obj/machinery/embedded_controller/radio/airlock/Destroy() - for(var/thing in dummy_terminals) - var/obj/machinery/dummy_airlock_controller/dummy = thing - dummy.master_controller = null - dummy_terminals.Cut() - return ..() - -/obj/machinery/embedded_controller/radio/airlock/CanUseTopic(var/mob/user) - if(!allowed(user)) - return min(STATUS_UPDATE, ..()) - else - return ..() - -//Advanced airlock controller for when you want a more versatile airlock controller - useful for turning simple access control rooms into airlocks -/obj/machinery/embedded_controller/radio/airlock/advanced_airlock_controller - name = "Advanced Airlock Controller" - -/obj/machinery/embedded_controller/radio/airlock/advanced_airlock_controller/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1, var/datum/nanoui/master_ui = null, var/datum/topic_state/state = GLOB.default_state) - var/data[0] - - data = list( - "chamber_pressure" = round(program.memory["chamber_sensor_pressure"]), - "external_pressure" = round(program.memory["external_sensor_pressure"]), - "internal_pressure" = round(program.memory["internal_sensor_pressure"]), - "processing" = program.memory["processing"], - "purge" = program.memory["purge"], - "secure" = program.memory["secure"] - ) - - ui = SSnano.try_update_ui(user, src, ui_key, ui, data, force_open) - if (!ui) - ui = new(user, src, ui_key, "advanced_airlock_console.tmpl", name, 470, 290, state = state) - ui.set_initial_data(data) - ui.open() - ui.set_auto_update(1) - -//Airlock controller for airlock control - most airlocks on the station use this -/obj/machinery/embedded_controller/radio/airlock/airlock_controller - name = "Airlock Controller" - tag_secure = 1 - -/obj/machinery/embedded_controller/radio/airlock/airlock_controller/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1, var/datum/nanoui/master_ui = null, var/datum/topic_state/state = GLOB.default_state) - var/data[0] - - data = list( - "chamber_pressure" = round(program.memory["chamber_sensor_pressure"]), - "exterior_status" = program.memory["exterior_status"], - "interior_status" = program.memory["interior_status"], - "processing" = program.memory["processing"], - ) - - ui = SSnano.try_update_ui(user, src, ui_key, ui, data, force_open) - if (!ui) - ui = new(user, src, ui_key, "simple_airlock_console.tmpl", name, 470, 290, state = state) - ui.set_initial_data(data) - ui.open() - ui.set_auto_update(1) - -//Access controller for door control - used in virology and the like -/obj/machinery/embedded_controller/radio/airlock/access_controller - icon = 'icons/obj/airlock_machines.dmi' - name = "Access Controller" - tag_secure = 1 - -/obj/machinery/embedded_controller/radio/airlock/access_controller/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1, var/datum/nanoui/master_ui = null, var/datum/topic_state/state = GLOB.default_state) - var/data[0] - - data = list( - "exterior_status" = program.memory["exterior_status"], - "interior_status" = program.memory["interior_status"], - "processing" = program.memory["processing"] - ) - - ui = SSnano.try_update_ui(user, src, ui_key, ui, data, force_open) - if (!ui) - ui = new(user, src, ui_key, "door_access_console.tmpl", name, 330, 220, state = state) - ui.set_initial_data(data) - ui.open() - ui.set_auto_update(1) \ No newline at end of file diff --git a/code/game/machinery/embedded_controller/airlock_controllers_dummy.dm b/code/game/machinery/embedded_controller/airlock_controllers_dummy.dm deleted file mode 100644 index 4f672c58991bb..0000000000000 --- a/code/game/machinery/embedded_controller/airlock_controllers_dummy.dm +++ /dev/null @@ -1,50 +0,0 @@ -// Provides remote access to a controller (since they must be unique). -/obj/machinery/dummy_airlock_controller - name = "airlock control terminal" - icon = 'icons/obj/airlock_machines.dmi' - icon_state = "airlock_control_standby" - layer = ABOVE_OBJ_LAYER - - var/datum/topic_state/remote/remote_state - var/obj/machinery/embedded_controller/radio/airlock/master_controller - -/obj/machinery/dummy_airlock_controller/Process() - if(master_controller) - appearance = master_controller - . = ..() - -/obj/machinery/dummy_airlock_controller/Initialize() - . = ..() - if(id_tag) - for(var/obj/machinery/embedded_controller/radio/airlock/_master in SSmachines.machinery) - if(_master.id_tag == id_tag) - master_controller = _master - master_controller.dummy_terminals += src - break - if(!master_controller) - qdel(src) - else - remote_state = new /datum/topic_state/remote(src, master_controller) - -/obj/machinery/dummy_airlock_controller/Destroy() - if(master_controller) - master_controller.dummy_terminals -= src - if(remote_state) - qdel(remote_state) - remote_state = null - return ..() - -/obj/machinery/dummy_airlock_controller/interface_interact(var/mob/user) - open_remote_ui(user) - return TRUE - -/obj/machinery/dummy_airlock_controller/proc/open_remote_ui(var/mob/user) - if(master_controller) - appearance = master_controller - return master_controller.ui_interact(user, state = remote_state) - -/obj/machinery/dummy_airlock_controller/powered(var/chan = -1, var/area/check_area = null) - if(master_controller) - var/area/A = get_area(master_controller) - return master_controller.powered(chan, A) - return ..() \ No newline at end of file diff --git a/code/game/machinery/embedded_controller/airlock_docking_controller.dm b/code/game/machinery/embedded_controller/airlock_docking_controller.dm deleted file mode 100644 index 8f5d6d8122f88..0000000000000 --- a/code/game/machinery/embedded_controller/airlock_docking_controller.dm +++ /dev/null @@ -1,179 +0,0 @@ -//a docking port based on an airlock -/obj/machinery/embedded_controller/radio/airlock/docking_port - name = "docking port controller" - program = /datum/computer/file/embedded_program/docking/airlock - var/display_name //how would it show up on docking monitoring program, area name + coordinates if unset - tag_secure = 1 - -/obj/machinery/embedded_controller/radio/airlock/docking_port/Initialize() - . = ..() - if(display_name) - var/datum/computer/file/embedded_program/docking/airlock/docking_program = program - docking_program.display_name = display_name - -/obj/machinery/embedded_controller/radio/airlock/docking_port/attackby(obj/item/W, mob/user) - if(istype(W,/obj/item/device/multitool)) //give them part of code, would take few tries to get full - var/datum/computer/file/embedded_program/docking/airlock/docking_program = program - var/code = docking_program.docking_codes - if(!code) - code = "N/A" - else - code = stars(code) - to_chat(user,"[W]'s screen displays '[code]'") - else - ..() - -/obj/machinery/embedded_controller/radio/airlock/docking_port/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1, var/datum/nanoui/master_ui = null, var/datum/topic_state/state = GLOB.default_state) - var/data[0] - var/datum/computer/file/embedded_program/docking/airlock/docking_program = program - var/datum/computer/file/embedded_program/airlock/docking/airlock_program = docking_program.airlock_program - - data = list( - "chamber_pressure" = round(airlock_program.memory["chamber_sensor_pressure"]), - "exterior_status" = airlock_program.memory["exterior_status"], - "interior_status" = airlock_program.memory["interior_status"], - "processing" = airlock_program.memory["processing"], - "docking_status" = docking_program.get_docking_status(), - "airlock_disabled" = !(docking_program.undocked() || docking_program.override_enabled), - "override_enabled" = docking_program.override_enabled, - "docking_codes" = docking_program.docking_codes, - "name" = docking_program.get_name() - ) - - ui = SSnano.try_update_ui(user, src, ui_key, ui, data, force_open) - - if (!ui) - ui = new(user, src, ui_key, "docking_airlock_console.tmpl", name, 470, 290, state = state) - ui.set_initial_data(data) - ui.open() - ui.set_auto_update(1) - -//A docking controller for an airlock based docking port -/datum/computer/file/embedded_program/docking/airlock - var/datum/computer/file/embedded_program/airlock/docking/airlock_program - -/datum/computer/file/embedded_program/docking/airlock/New(var/obj/machinery/embedded_controller/M) - ..() - airlock_program = new(M) - airlock_program.master_prog = src - -/datum/computer/file/embedded_program/docking/airlock/Destroy() - qdel(airlock_program) - return ..() - -/datum/computer/file/embedded_program/docking/airlock/receive_user_command(command) - if (command == "toggle_override") - if (override_enabled) - disable_override() - else - enable_override() - return TRUE - - . = ..(command) - . = airlock_program.receive_user_command(command) || . //pass along to subprograms; bypass shortcircuit - -/datum/computer/file/embedded_program/docking/airlock/process() - airlock_program.process() - ..() - -/datum/computer/file/embedded_program/docking/airlock/receive_signal(datum/signal/signal, receive_method, receive_param) - airlock_program.receive_signal(signal, receive_method, receive_param) //pass along to subprograms - ..(signal, receive_method, receive_param) - -//tell the docking port to start getting ready for docking - e.g. pressurize -/datum/computer/file/embedded_program/docking/airlock/prepare_for_docking() - airlock_program.begin_dock_cycle() - -//are we ready for docking? -/datum/computer/file/embedded_program/docking/airlock/ready_for_docking() - return airlock_program.done_cycling() - -//we are docked, open the doors or whatever. -/datum/computer/file/embedded_program/docking/airlock/finish_docking() - airlock_program.enable_mech_regulators() - airlock_program.open_doors() - -//tell the docking port to start getting ready for undocking - e.g. close those doors. -/datum/computer/file/embedded_program/docking/airlock/prepare_for_undocking() - airlock_program.stop_cycling() - airlock_program.close_doors() - airlock_program.disable_mech_regulators() - -//are we ready for undocking? -/datum/computer/file/embedded_program/docking/airlock/ready_for_undocking() - var/ext_closed = airlock_program.check_exterior_door_secured() - var/int_closed = airlock_program.check_interior_door_secured() - return (ext_closed || int_closed) - -//An airlock controller to be used by the airlock-based docking port controller. -//Same as a regular airlock controller but allows disabling of the regular airlock functions when docking -/datum/computer/file/embedded_program/airlock/docking - var/datum/computer/file/embedded_program/docking/airlock/master_prog - -/datum/computer/file/embedded_program/airlock/docking/Destroy() - if(master_prog) - master_prog.airlock_program = null - master_prog = null - return ..() - -/datum/computer/file/embedded_program/airlock/docking/receive_user_command(command) - if (master_prog.undocked() || master_prog.override_enabled) //only allow the port to be used as an airlock if nothing is docked here or the override is enabled - return ..(command) - -/datum/computer/file/embedded_program/airlock/docking/proc/enable_mech_regulators() - enable_mech_regulation() - -/datum/computer/file/embedded_program/airlock/docking/proc/disable_mech_regulators() - disable_mech_regulation() - -/datum/computer/file/embedded_program/airlock/docking/proc/open_doors() - toggleDoor(memory["interior_status"], tag_interior_door, memory["secure"], "open") - toggleDoor(memory["exterior_status"], tag_exterior_door, memory["secure"], "open") - -/datum/computer/file/embedded_program/airlock/docking/cycleDoors(var/target) - if (master_prog.undocked() || master_prog.override_enabled) //only allow the port to be used as an airlock if nothing is docked here or the override is enabled - ..(target) - -/*** DEBUG VERBS *** - -/datum/computer/file/embedded_program/docking/proc/print_state() - log_debug("id_tag: [id_tag]") - log_debug("dock_state: [dock_state]") - log_debug("control_mode: [control_mode]") - log_debug("tag_target: [tag_target]") - log_debug("response_sent: [response_sent]") - -/datum/computer/file/embedded_program/docking/post_signal(datum/signal/signal, comm_line) - log_debug("Program [id_tag] sent a message!") - - print_state() - log_debug("[id_tag] sent command \"[signal.data["command"]]\" to \"[signal.data["recipient"]]\"") - - ..(signal) - -/obj/machinery/embedded_controller/radio/airlock/docking_port/verb/view_state() - set category = "Debug" - set src in view(1) - src.program:print_state() - -/obj/machinery/embedded_controller/radio/airlock/docking_port/verb/spoof_signal(var/command as text, var/sender as text) - set category = "Debug" - set src in view(1) - var/datum/signal/signal = new - signal.data["tag"] = sender - signal.data["command"] = command - signal.data["recipient"] = id_tag - - src.program:receive_signal(signal) - -/obj/machinery/embedded_controller/radio/airlock/docking_port/verb/debug_init_dock(var/target as text) - set category = "Debug" - set src in view(1) - src.program:initiate_docking(target) - -/obj/machinery/embedded_controller/radio/airlock/docking_port/verb/debug_init_undock() - set category = "Debug" - set src in view(1) - src.program:initiate_undocking() - -*/ \ No newline at end of file diff --git a/code/game/machinery/embedded_controller/airlock_docking_controller_multi.dm b/code/game/machinery/embedded_controller/airlock_docking_controller_multi.dm deleted file mode 100644 index 5c73e078073e2..0000000000000 --- a/code/game/machinery/embedded_controller/airlock_docking_controller_multi.dm +++ /dev/null @@ -1,72 +0,0 @@ -//a controller for a docking port with multiple independent airlocks -//this is the master controller, that things will try to dock with. -/obj/machinery/embedded_controller/radio/docking_port_multi - name = "docking port controller" - program = /datum/computer/file/embedded_program/docking/multi - var/child_tags_txt - var/child_names_txt - var/list/child_names = list() - -/obj/machinery/embedded_controller/radio/docking_port_multi/Initialize() - . = ..() - var/list/names = splittext(child_names_txt, ";") - var/list/tags = splittext(child_tags_txt, ";") - if (names.len == tags.len) - for (var/i = 1; i <= tags.len; i++) - child_names[tags[i]] = names[i] - -/obj/machinery/embedded_controller/radio/docking_port_multi/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1, var/datum/nanoui/master_ui = null, var/datum/topic_state/state = GLOB.default_state) - var/data[0] - var/datum/computer/file/embedded_program/docking/multi/docking_program = program - - var/list/airlocks[child_names.len] - var/i = 1 - for (var/child_tag in child_names) - airlocks[i++] = list("name"=child_names[child_tag], "override_enabled"=(docking_program.children_override[child_tag] == "enabled")) - - data = list( - "docking_status" = docking_program.get_docking_status(), - "airlocks" = airlocks, - ) - - ui = SSnano.try_update_ui(user, src, ui_key, ui, data, force_open) - - if (!ui) - ui = new(user, src, ui_key, "multi_docking_console.tmpl", name, 470, 290, state = state) - ui.set_initial_data(data) - ui.open() - ui.set_auto_update(1) - -/obj/machinery/embedded_controller/radio/docking_port_multi/Topic(href, href_list) - return 1 // Apparently we swallow all input (this is corrected legacy code) - - - -//a docking port based on an airlock -/obj/machinery/embedded_controller/radio/airlock/docking_port_multi - name = "docking port controller" - program = /datum/computer/file/embedded_program/airlock/multi_docking - var/master_tag //for mapping - tag_secure = 1 - -/obj/machinery/embedded_controller/radio/airlock/docking_port_multi/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1, var/datum/nanoui/master_ui = null, var/datum/topic_state/state = GLOB.default_state) - var/data[0] - var/datum/computer/file/embedded_program/airlock/multi_docking/airlock_program - - data = list( - "chamber_pressure" = round(airlock_program.memory["chamber_sensor_pressure"]), - "exterior_status" = airlock_program.memory["exterior_status"], - "interior_status" = airlock_program.memory["interior_status"], - "processing" = airlock_program.memory["processing"], - "docking_status" = airlock_program.master_status, - "airlock_disabled" = (airlock_program.docking_enabled && !airlock_program.override_enabled), - "override_enabled" = airlock_program.override_enabled, - ) - - ui = SSnano.try_update_ui(user, src, ui_key, ui, data, force_open) - - if (!ui) - ui = new(user, src, ui_key, "docking_airlock_console.tmpl", name, 470, 290, state = state) - ui.set_initial_data(data) - ui.open() - ui.set_auto_update(1) \ No newline at end of file diff --git a/code/game/machinery/embedded_controller/airlock_program.dm b/code/game/machinery/embedded_controller/airlock_program.dm deleted file mode 100644 index c9763069b3235..0000000000000 --- a/code/game/machinery/embedded_controller/airlock_program.dm +++ /dev/null @@ -1,442 +0,0 @@ -//Handles the control of airlocks - -#define STATE_IDLE 0 -#define STATE_PREPARE 1 -#define STATE_DEPRESSURIZE 2 -#define STATE_PRESSURIZE 3 - -#define TARGET_NONE 0 -#define TARGET_INOPEN -1 -#define TARGET_OUTOPEN -2 - -#define SENSOR_TOLERANCE 1 - -/datum/computer/file/embedded_program/airlock - var/tag_exterior_door - var/tag_interior_door - var/tag_airpump - var/tag_chamber_sensor - var/tag_exterior_sensor - var/tag_interior_sensor - var/tag_airlock_mech_sensor - var/tag_shuttle_mech_sensor - - var/state = STATE_IDLE - var/target_state = TARGET_NONE - - var/cycle_to_external_air = 0 - var/scrubber_assist = 0 - var/tag_pump_out_external - var/tag_pump_out_internal - var/tag_pump_out_scrubber - - var/tag_air_alarm - -/datum/computer/file/embedded_program/airlock/New(var/obj/machinery/embedded_controller/M) - ..(M) - - memory["chamber_sensor_pressure"] = ONE_ATMOSPHERE - memory["external_sensor_pressure"] = 0 //assume vacuum for simple airlock controller - memory["internal_sensor_pressure"] = ONE_ATMOSPHERE - memory["exterior_status"] = list(state = "closed", lock = "locked") //assume closed and locked in case the doors dont report in - memory["interior_status"] = list(state = "closed", lock = "locked") - memory["pump_status"] = "unknown" - memory["target_pressure"] = ONE_ATMOSPHERE - memory["purge"] = 0 - memory["secure"] = 0 - - if (istype(M, /obj/machinery/embedded_controller/radio/airlock)) //if our controller is an airlock controller than we can auto-init our tags - var/obj/machinery/embedded_controller/radio/airlock/controller = M - cycle_to_external_air = controller.cycle_to_external_air - scrubber_assist = controller.scrubber_assist - if(cycle_to_external_air) - tag_pump_out_external = "[id_tag]_pump_out_external" - tag_pump_out_internal = "[id_tag]_pump_out_internal" - if(scrubber_assist) - tag_pump_out_scrubber = "[id_tag]_pump_out_scrubber" - tag_exterior_door = controller.tag_exterior_door? controller.tag_exterior_door : "[id_tag]_outer" - tag_interior_door = controller.tag_interior_door? controller.tag_interior_door : "[id_tag]_inner" - tag_airpump = controller.tag_airpump? controller.tag_airpump : "[id_tag]_pump" - tag_chamber_sensor = controller.tag_chamber_sensor? controller.tag_chamber_sensor : "[id_tag]_sensor" - tag_exterior_sensor = controller.tag_exterior_sensor || "[id_tag]_exterior_sensor" - tag_interior_sensor = controller.tag_interior_sensor || "[id_tag]_interior_sensor" - tag_airlock_mech_sensor = controller.tag_airlock_mech_sensor? controller.tag_airlock_mech_sensor : "[id_tag]_airlock_mech" - tag_shuttle_mech_sensor = controller.tag_shuttle_mech_sensor? controller.tag_shuttle_mech_sensor : "[id_tag]_shuttle_mech" - tag_air_alarm = controller.tag_air_alarm || "[id_tag]_alarm" - memory["secure"] = controller.tag_secure - - spawn(10) - signalDoor(tag_exterior_door, "update") //signals connected doors to update their status - signalDoor(tag_interior_door, "update") - -/datum/computer/file/embedded_program/airlock/receive_signal(datum/signal/signal, receive_method, receive_param) - var/receive_tag = signal.data["tag"] - if(!receive_tag) return - - if(receive_tag==tag_chamber_sensor) - if(signal.data["pressure"]) - memory["chamber_sensor_pressure"] = text2num(signal.data["pressure"]) - - else if(receive_tag==tag_exterior_sensor) - memory["external_sensor_pressure"] = text2num(signal.data["pressure"]) - - else if(receive_tag==tag_interior_sensor) - memory["internal_sensor_pressure"] = text2num(signal.data["pressure"]) - - else if(receive_tag==tag_exterior_door) - memory["exterior_status"]["state"] = signal.data["door_status"] - memory["exterior_status"]["lock"] = signal.data["lock_status"] - - else if(receive_tag==tag_interior_door) - memory["interior_status"]["state"] = signal.data["door_status"] - memory["interior_status"]["lock"] = signal.data["lock_status"] - - else if(receive_tag==tag_airpump || receive_tag==tag_pump_out_internal) - if(signal.data["power"]) - memory["pump_status"] = signal.data["direction"] - else - memory["pump_status"] = "off" - - else if(receive_tag==id_tag) - if(istype(master, /obj/machinery/embedded_controller/radio/airlock/access_controller)) - switch(signal.data["command"]) - if("cycle_exterior") - receive_user_command("cycle_ext_door") - if("cycle_interior") - receive_user_command("cycle_int_door") - if("cycle") - if(memory["interior_status"]["state"] == "open") //handle backwards compatibility - receive_user_command("cycle_ext") - else - receive_user_command("cycle_int") - else - switch(signal.data["command"]) - if("cycle_exterior") - receive_user_command("cycle_ext") - if("cycle_interior") - receive_user_command("cycle_int") - if("cycle") - if(memory["interior_status"]["state"] == "open") //handle backwards compatibility - receive_user_command("cycle_ext") - else - receive_user_command("cycle_int") - - -/datum/computer/file/embedded_program/airlock/receive_user_command(command) - var/shutdown_pump = 0 - . = TRUE - switch(command) - if("cycle_ext") - //If airlock is already cycled in this direction, just toggle the doors. - if(!memory["purge"] && IsInRange(memory["external_sensor_pressure"], memory["chamber_sensor_pressure"] - SENSOR_TOLERANCE, memory["chamber_sensor_pressure"] + SENSOR_TOLERANCE)) - toggleDoor(memory["exterior_status"], tag_exterior_door, memory["secure"], "toggle") - //only respond to these commands if the airlock isn't already doing something - //prevents the controller from getting confused and doing strange things - else if(state == target_state) - begin_cycle_out() - - if("cycle_int") - if(!memory["purge"] && IsInRange(memory["internal_sensor_pressure"], memory["chamber_sensor_pressure"] - SENSOR_TOLERANCE, memory["chamber_sensor_pressure"] + SENSOR_TOLERANCE)) - toggleDoor(memory["interior_status"], tag_interior_door, memory["secure"], "toggle") - else if(state == target_state) - begin_cycle_in() - - if("cycle_ext_door") - cycleDoors(TARGET_OUTOPEN) - - if("cycle_int_door") - cycleDoors(TARGET_INOPEN) - - if("abort") - stop_cycling() - - if("force_ext") - toggleDoor(memory["exterior_status"], tag_exterior_door, memory["secure"], "toggle") - - if("force_int") - toggleDoor(memory["interior_status"], tag_interior_door, memory["secure"], "toggle") - - if("purge") - memory["purge"] = !memory["purge"] - if(memory["purge"]) - close_doors() - state = STATE_PREPARE - target_state = TARGET_NONE - - if("secure") - memory["secure"] = !memory["secure"] - if(memory["secure"]) - signalDoor(tag_interior_door, "lock") - signalDoor(tag_exterior_door, "lock") - else - signalDoor(tag_interior_door, "unlock") - signalDoor(tag_exterior_door, "unlock") - else - . = FALSE - - if(shutdown_pump) - signalPump(tag_airpump, 0) //send a signal to stop pressurizing - if(cycle_to_external_air) - signalPump(tag_pump_out_internal, 0) - signalPump(tag_pump_out_external, 0) - - - -/datum/computer/file/embedded_program/airlock/process() - if(!state) //Idle - if(target_state) - switch(target_state) - if(TARGET_INOPEN) - memory["target_pressure"] = memory["internal_sensor_pressure"] - if(TARGET_OUTOPEN) - memory["target_pressure"] = memory["external_sensor_pressure"] - - //lock down the airlock before activating pumps - close_doors() - - state = STATE_PREPARE - else - //make sure to return to a sane idle state - if(memory["pump_status"] != "off") //send a signal to stop pumping - signalPump(tag_airpump, 0) - if(cycle_to_external_air) - signalPump(tag_pump_out_internal, 0) - signalPump(tag_pump_out_external, 0) - - if ((state == STATE_PRESSURIZE || state == STATE_DEPRESSURIZE) && !check_doors_secured()) - //the airlock will not allow itself to continue to cycle when any of the doors are forced open. - stop_cycling() - - switch(state) - if(STATE_PREPARE) - if (check_doors_secured()) - var/chamber_pressure = memory["chamber_sensor_pressure"] - var/target_pressure = memory["target_pressure"] - - if(memory["purge"]) - //purge apparently means clearing the airlock chamber to vacuum (then refilling, handled later) - target_pressure = 0 - state = STATE_DEPRESSURIZE - if(!cycle_to_external_air || target_state == TARGET_OUTOPEN) // if going outside, pump internal air into air tank - signalPump(tag_airpump, 1, 0, target_pressure) //send a signal to start depressurizing - else - signalPump(tag_pump_out_internal, 1, 0, target_pressure) // if going inside, pump external air out of the airlock - signalPump(tag_pump_out_external, 1, 1, 1000) // make sure the air is actually going outside - - else if(chamber_pressure <= target_pressure) - state = STATE_PRESSURIZE - if(!cycle_to_external_air || target_state == TARGET_INOPEN) // if going inside, pump air into airlock - signalPump(tag_airpump, 1, 1, target_pressure) //send a signal to start pressurizing - else - signalPump(tag_pump_out_internal, 1, 1, target_pressure) // if going outside, fill airlock with external air - signalPump(tag_pump_out_external, 1, 0, 0) - - else if(chamber_pressure > target_pressure) - if(!cycle_to_external_air) - state = STATE_DEPRESSURIZE - signalPump(tag_airpump, 1, 0, target_pressure) //send a signal to start depressurizing - else - memory["purge"] = 1 // should always purge first if using external air, chamber pressure should never be higher than target pressure here - - memory["target_pressure"] = target_pressure - - if(STATE_PRESSURIZE) - if(memory["chamber_sensor_pressure"] >= memory["target_pressure"] - SENSOR_TOLERANCE) - //not done until the pump has reported that it's off - if(memory["pump_status"] != "off") //send a signal to stop pumping - signalPump(tag_airpump, 0) - if(cycle_to_external_air) - signalPump(tag_pump_out_internal, 0) - signalPump(tag_pump_out_external, 0) - else - cycleDoors(target_state) - state = STATE_IDLE - target_state = TARGET_NONE - - - if(STATE_DEPRESSURIZE) - if(memory["chamber_sensor_pressure"] <= memory["target_pressure"] + SENSOR_TOLERANCE) - if(memory["pump_status"] != "off") - signalPump(tag_airpump, 0) - if(cycle_to_external_air) - signalPump(tag_pump_out_internal, 0) - signalPump(tag_pump_out_external, 0) - else - if(memory["purge"]) - memory["purge"] = 0 - memory["target_pressure"] = (target_state == TARGET_INOPEN ? memory["internal_sensor_pressure"] : memory["external_sensor_pressure"]) - if (memory["target_pressure"] > SENSOR_TOLERANCE) - state = STATE_PREPARE - else - cycleDoors(target_state) - state = STATE_IDLE - target_state = TARGET_NONE - - - memory["processing"] = (state != target_state) - - return 1 - -//these are here so that other types don't have to make so many assuptions about our implementation - -/datum/computer/file/embedded_program/airlock/proc/begin_cycle_in() - state = STATE_IDLE - target_state = TARGET_INOPEN - memory["purge"] = cycle_to_external_air - playsound(master, 'sound/machines/warning-buzzer.ogg', 50) - shutAlarm() - -/datum/computer/file/embedded_program/airlock/proc/begin_dock_cycle() - state = STATE_IDLE - target_state = TARGET_INOPEN - playsound(master, 'sound/machines/warning-buzzer.ogg', 50) - shutAlarm() - -/datum/computer/file/embedded_program/airlock/proc/begin_cycle_out() - state = STATE_IDLE - target_state = TARGET_OUTOPEN - memory["purge"] = cycle_to_external_air - playsound(master, 'sound/machines/warning-buzzer.ogg', 50) - shutAlarm() - -/datum/computer/file/embedded_program/airlock/proc/close_doors() - toggleDoor(memory["interior_status"], tag_interior_door, 1, "close") - toggleDoor(memory["exterior_status"], tag_exterior_door, 1, "close") - -/datum/computer/file/embedded_program/airlock/proc/stop_cycling() - state = STATE_IDLE - target_state = TARGET_NONE - -/datum/computer/file/embedded_program/airlock/proc/done_cycling() - return (state == STATE_IDLE && target_state == TARGET_NONE) - -//are the doors closed and locked? -/datum/computer/file/embedded_program/airlock/proc/check_exterior_door_secured() - return (memory["exterior_status"]["state"] == "closed" && memory["exterior_status"]["lock"] == "locked") - -/datum/computer/file/embedded_program/airlock/proc/check_interior_door_secured() - return (memory["interior_status"]["state"] == "closed" && memory["interior_status"]["lock"] == "locked") - -/datum/computer/file/embedded_program/airlock/proc/check_doors_secured() - var/ext_closed = check_exterior_door_secured() - var/int_closed = check_interior_door_secured() - return (ext_closed && int_closed) - -/datum/computer/file/embedded_program/airlock/proc/signalDoor(var/tag, var/command) - var/datum/signal/signal = new - signal.data["tag"] = tag - signal.data["command"] = command - post_signal(signal, RADIO_AIRLOCK) - -/datum/computer/file/embedded_program/airlock/proc/shutAlarm() - var/datum/signal/signal = new - signal.data["alarm_id"] = tag_air_alarm - signal.data["command"] = "shutdown" - post_signal(signal, RADIO_TO_AIRALARM) - -/datum/computer/file/embedded_program/airlock/proc/signalPump(var/tag, var/power, var/direction, var/pressure) - var/datum/signal/signal = new - signal.data = list( - "tag" = tag, - "sigtype" = "command", - "set_power" = power, - "set_direction" = direction ? "release" : "siphon", - "set_external_pressure" = pressure, - "status" = TRUE - ) - post_signal(signal, RADIO_FROM_AIRALARM) - -//this is called to set the appropriate door state at the end of a cycling process, or for the exterior buttons -/datum/computer/file/embedded_program/airlock/proc/cycleDoors(var/target) - switch(target) - if(TARGET_OUTOPEN) - toggleDoor(memory["interior_status"], tag_interior_door, memory["secure"], "close") - toggleDoor(memory["exterior_status"], tag_exterior_door, memory["secure"], "open") - - if(TARGET_INOPEN) - toggleDoor(memory["exterior_status"], tag_exterior_door, memory["secure"], "close") - toggleDoor(memory["interior_status"], tag_interior_door, memory["secure"], "open") - if(TARGET_NONE) - var/command = "unlock" - if(memory["secure"]) - command = "lock" - signalDoor(tag_exterior_door, command) - signalDoor(tag_interior_door, command) - -/datum/computer/file/embedded_program/airlock/proc/signal_mech_sensor(var/command, var/sensor) - var/datum/signal/signal = new - signal.data["tag"] = sensor - signal.data["command"] = command - post_signal(signal) - -/datum/computer/file/embedded_program/airlock/proc/enable_mech_regulation() - signal_mech_sensor("enable", tag_shuttle_mech_sensor) - signal_mech_sensor("enable", tag_airlock_mech_sensor) - -/datum/computer/file/embedded_program/airlock/proc/disable_mech_regulation() - signal_mech_sensor("disable", tag_shuttle_mech_sensor) - signal_mech_sensor("disable", tag_airlock_mech_sensor) - -/*---------------------------------------------------------- -toggleDoor() - -Sends a radio command to a door to either open or close. If -the command is 'toggle' the door will be sent a command that -reverses it's current state. -Can also toggle whether the door bolts are locked or not, -depending on the state of the 'secure' flag. -Only sends a command if it is needed, i.e. if the door is -already open, passing an open command to this proc will not -send an additional command to open the door again. -----------------------------------------------------------*/ -/datum/computer/file/embedded_program/airlock/proc/toggleDoor(var/list/doorStatus, var/doorTag, var/secure, var/command) - var/doorCommand = null - - if(command == "toggle") - if(doorStatus["state"] == "open") - command = "close" - else if(doorStatus["state"] == "closed") - command = "open" - - switch(command) - if("close") - if(secure) - if(doorStatus["state"] == "open") - doorCommand = "secure_close" - else if(doorStatus["lock"] == "unlocked") - doorCommand = "lock" - else - if(doorStatus["state"] == "open") - if(doorStatus["lock"] == "locked") - signalDoor(doorTag, "unlock") - doorCommand = "close" - else if(doorStatus["lock"] == "locked") - doorCommand = "unlock" - - if("open") - if(secure) - if(doorStatus["state"] == "closed") - doorCommand = "secure_open" - else if(doorStatus["lock"] == "unlocked") - doorCommand = "lock" - else - if(doorStatus["state"] == "closed") - if(doorStatus["lock"] == "locked") - signalDoor(doorTag,"unlock") - doorCommand = "open" - else if(doorStatus["lock"] == "locked") - doorCommand = "unlock" - - if(doorCommand) - signalDoor(doorTag, doorCommand) - - -#undef STATE_IDLE -#undef STATE_DEPRESSURIZE -#undef STATE_PRESSURIZE - -#undef TARGET_NONE -#undef TARGET_INOPEN -#undef TARGET_OUTOPEN - -#undef SENSOR_TOLERANCE \ No newline at end of file diff --git a/code/game/machinery/embedded_controller/docking_program.dm b/code/game/machinery/embedded_controller/docking_program.dm deleted file mode 100644 index 9d383d6e6cccc..0000000000000 --- a/code/game/machinery/embedded_controller/docking_program.dm +++ /dev/null @@ -1,302 +0,0 @@ - -/* - *** STATE TABLE *** - - MODE_CLIENT|STATE_UNDOCKED sent a request for docking and now waiting for a reply. - MODE_CLIENT|STATE_DOCKING server told us they are OK to dock, waiting for our docking port to be ready. - MODE_CLIENT|STATE_DOCKED idle - docked as client. - MODE_CLIENT|STATE_UNDOCKING we are either waiting for our docking port to be ready or for the server to give us the OK to finish undocking. - - MODE_SERVER|STATE_UNDOCKED should never happen. - MODE_SERVER|STATE_DOCKING someone requested docking, we are waiting for our docking port to be ready. - MODE_SERVER|STATE_DOCKED idle - docked as server - MODE_SERVER|STATE_UNDOCKING client requested undocking, we are waiting for our docking port to be ready. - - MODE_NONE|STATE_UNDOCKED idle - not docked. - MODE_NONE|anything else should never happen. - - *** Docking Signals *** - - Docking - Client sends request_dock - Server sends confirm_dock to say that yes, we will serve your request - When client is ready, sends confirm_dock - Server sends confirm_dock back to indicate that docking is complete - - Undocking - Client sends request_undock - When client is ready, sends confirm_undock - Server sends confirm_undock back to indicate that docking is complete - - Note that in both cases each side exchanges confirm_dock before the docking operation is considered done. - The client first sends a confirm message to indicate it is ready, and then finally the server will send it's - confirm message to indicate that the operation is complete. - - Note also that when docking, the server sends an additional confirm message. This is because before docking, - the server and client do not have a defined relationship. Before undocking, the server and client are already - related to each other, thus the extra confirm message is not needed. - - *** Override, what is it? *** - - The purpose of enabling the override is to prevent the docking program from automatically doing things with the docking port when docking or undocking. - Maybe the shuttle is full of plamsa/phoron for some reason, and you don't want the door to automatically open, or the airlock to cycle. - This means that the prepare_for_docking/undocking and finish_docking/undocking procs don't get called. - - The docking controller will still check the state of the docking port, and thus prevent the shuttle from launching unless they force the launch (handling forced - launches is not the docking controller's responsibility). In this case it is up to the players to manually get the docking port into a good state to undock - (which usually just means closing and locking the doors). - - In line with this, docking controllers should prevent players from manually doing things when the override is NOT enabled. -*/ - - -/datum/computer/file/embedded_program/docking - var/tag_target //the tag of the docking controller that we are trying to dock with - var/dock_state = STATE_UNDOCKED - var/control_mode = MODE_NONE - var/response_sent = 0 //so we don't spam confirmation messages - var/resend_counter = 0 //for periodically resending confirmation messages in case they are missed - - var/override_enabled = 0 //when enabled, do not open/close doors or cycle airlocks and wait for the player to do it manually - var/received_confirm = 0 //for undocking, whether the server has recieved a confirmation from the client - var/docking_codes //would only allow docking when receiving signal with these, if set - var/display_name //how would it show up on docking monitoring program, area name + coordinates if unset - -/datum/computer/file/embedded_program/docking/New(var/obj/machinery/embedded_controller/M) - ..() - if(id_tag) - if(SSshuttle.docking_registry[id_tag]) - crash_with("Docking controller tag [id_tag] had multiple associated programs.") - SSshuttle.docking_registry[id_tag] = src - -/datum/computer/file/embedded_program/docking/Destroy() - SSshuttle.docking_registry -= id_tag - return ..() - -/datum/computer/file/embedded_program/docking/receive_user_command(command) - if(command == "dock" || command == "undock") - - if(!tag_target) //Prevents from self destructing if no docking buddy - return FALSE - - var/datum/signal/signal = new() - signal.data["tag"] = tag_target - signal.data["command"] = "request_[command]" - signal.data["recipient"] = id_tag - signal.data["code"] = docking_codes - receive_signal(signal) - return TRUE - -/datum/computer/file/embedded_program/docking/receive_signal(datum/signal/signal, receive_method, receive_param) - var/receive_tag = signal.data["tag"] //for docking signals, this is the sender id - var/command = signal.data["command"] - var/recipient = signal.data["recipient"] //the intended recipient of the docking signal - - if (recipient != id_tag) - return //this signal is not for us - - switch (command) - if ("confirm_dock") - if (control_mode == MODE_CLIENT && dock_state == STATE_UNDOCKED && receive_tag == tag_target) - dock_state = STATE_DOCKING - broadcast_docking_status() - if (!override_enabled) - prepare_for_docking() - - else if (control_mode == MODE_CLIENT && dock_state == STATE_DOCKING && receive_tag == tag_target) - dock_state = STATE_DOCKED - broadcast_docking_status() - if (!override_enabled) - finish_docking() //client done docking! - response_sent = 0 - else if (control_mode == MODE_SERVER && dock_state == STATE_DOCKING && receive_tag == tag_target) //client just sent us the confirmation back, we're done with the docking process - received_confirm = 1 - - if ("request_dock") - if (control_mode == MODE_NONE && dock_state == STATE_UNDOCKED) - tag_target = receive_tag - - if(docking_codes) - var/code = signal.data["code"] - if(code != docking_codes) - return - - control_mode = MODE_SERVER - - dock_state = STATE_DOCKING - broadcast_docking_status() - - if (!override_enabled) - prepare_for_docking() - send_docking_command(tag_target, "confirm_dock") //acknowledge the request - - if ("confirm_undock") - if (control_mode == MODE_CLIENT && dock_state == STATE_UNDOCKING && receive_tag == tag_target) - if (!override_enabled) - finish_undocking() - reset() //client is done undocking! - else if (control_mode == MODE_SERVER && dock_state == STATE_UNDOCKING && receive_tag == tag_target) - received_confirm = 1 - - if ("request_undock") - if (control_mode == MODE_SERVER && dock_state == STATE_DOCKED && receive_tag == tag_target) - dock_state = STATE_UNDOCKING - broadcast_docking_status() - - if (!override_enabled) - prepare_for_undocking() - - if ("dock_error") - if (receive_tag == tag_target) - reset() - -/datum/computer/file/embedded_program/docking/process() - switch(dock_state) - if (STATE_DOCKING) //waiting for our docking port to be ready for docking - if (ready_for_docking()) - if (control_mode == MODE_CLIENT) - if (!response_sent) - send_docking_command(tag_target, "confirm_dock") //tell the server we're ready - response_sent = 1 - - else if (control_mode == MODE_SERVER && received_confirm) - send_docking_command(tag_target, "confirm_dock") //tell the client we are done docking. - - dock_state = STATE_DOCKED - broadcast_docking_status() - - if (!override_enabled) - finish_docking() //server done docking! - response_sent = 0 - received_confirm = 0 - - if (STATE_UNDOCKING) - if (ready_for_undocking()) - if (control_mode == MODE_CLIENT) - if (!response_sent) - send_docking_command(tag_target, "confirm_undock") //tell the server we are OK to undock. - response_sent = 1 - - else if (control_mode == MODE_SERVER && received_confirm) - send_docking_command(tag_target, "confirm_undock") //tell the client we are done undocking. - if (!override_enabled) - finish_undocking() - reset() //server is done undocking! - - if (response_sent || resend_counter > 0) - resend_counter++ - - if (resend_counter >= MESSAGE_RESEND_TIME || (dock_state != STATE_DOCKING && dock_state != STATE_UNDOCKING)) - response_sent = 0 - resend_counter = 0 - - //handle invalid states - if (control_mode == MODE_NONE && dock_state != STATE_UNDOCKED) - if (tag_target) - send_docking_command(tag_target, "dock_error") - reset() - if (control_mode == MODE_SERVER && dock_state == STATE_UNDOCKED) - control_mode = MODE_NONE - - -/datum/computer/file/embedded_program/docking/proc/initiate_docking(var/target) - if (dock_state != STATE_UNDOCKED || control_mode == MODE_SERVER) //must be undocked and not serving another request to begin a new docking handshake - return - - tag_target = target - control_mode = MODE_CLIENT - - send_docking_command(tag_target, "request_dock") - -/datum/computer/file/embedded_program/docking/proc/initiate_undocking() - if (dock_state != STATE_DOCKED || control_mode != MODE_CLIENT) //must be docked and must be client to start undocking - return - - dock_state = STATE_UNDOCKING - broadcast_docking_status() - - if (!override_enabled) - prepare_for_undocking() - - send_docking_command(tag_target, "request_undock") - -//tell the docking port to start getting ready for docking - e.g. pressurize -/datum/computer/file/embedded_program/docking/proc/prepare_for_docking() - return - -//are we ready for docking? -/datum/computer/file/embedded_program/docking/proc/ready_for_docking() - return 1 - -//we are docked, open the doors or whatever. -/datum/computer/file/embedded_program/docking/proc/finish_docking() - return - -//tell the docking port to start getting ready for undocking - e.g. close those doors. -/datum/computer/file/embedded_program/docking/proc/prepare_for_undocking() - return - -//we are docked, open the doors or whatever. -/datum/computer/file/embedded_program/docking/proc/finish_undocking() - return - -//are we ready for undocking? -/datum/computer/file/embedded_program/docking/proc/ready_for_undocking() - return 1 - -/datum/computer/file/embedded_program/docking/proc/enable_override() - override_enabled = 1 - -/datum/computer/file/embedded_program/docking/proc/disable_override() - override_enabled = 0 - -/datum/computer/file/embedded_program/docking/proc/reset() - dock_state = STATE_UNDOCKED - broadcast_docking_status() - - control_mode = MODE_NONE - tag_target = null - response_sent = 0 - received_confirm = 0 - -/datum/computer/file/embedded_program/docking/proc/force_undock() -// log_debug("[id_tag]: forcing undock") - - if (tag_target) - send_docking_command(tag_target, "dock_error") - reset() - -/datum/computer/file/embedded_program/docking/proc/docked() - return (dock_state == STATE_DOCKED) - -/datum/computer/file/embedded_program/docking/proc/undocked() - return (dock_state == STATE_UNDOCKED) - -//returns 1 if we are saftely undocked (and the shuttle can leave) -/datum/computer/file/embedded_program/docking/proc/can_launch() - return undocked() - -/datum/computer/file/embedded_program/docking/proc/send_docking_command(var/recipient, var/command) - var/datum/signal/signal = new - signal.data["tag"] = id_tag - signal.data["command"] = command - signal.data["recipient"] = recipient - signal.data["code"] = docking_codes - post_signal(signal) - -/datum/computer/file/embedded_program/docking/proc/broadcast_docking_status() - var/datum/signal/signal = new - signal.data["tag"] = id_tag - signal.data["dock_status"] = get_docking_status() - post_signal(signal) - -//this is mostly for NanoUI -/datum/computer/file/embedded_program/docking/proc/get_docking_status() - switch (dock_state) - if (STATE_UNDOCKED) return "undocked" - if (STATE_DOCKING) return "docking" - if (STATE_UNDOCKING) return "undocking" - if (STATE_DOCKED) return "docked" - -/datum/computer/file/embedded_program/docking/proc/get_name() - return display_name ? display_name : "[get_area(master)] ([master.x], [master.y])" diff --git a/code/game/machinery/embedded_controller/docking_program_multi.dm b/code/game/machinery/embedded_controller/docking_program_multi.dm deleted file mode 100644 index e68e35f16bb61..0000000000000 --- a/code/game/machinery/embedded_controller/docking_program_multi.dm +++ /dev/null @@ -1,225 +0,0 @@ -/* - These programs are for docking controllers that consist of multiple independent airlocks - Each airlock has an airlock controller running the child program, and there is one docking controller running the master program -*/ - -/* - the master program -*/ -/datum/computer/file/embedded_program/docking/multi - var/list/children_tags - var/list/children_ready - var/list/children_override - -/datum/computer/file/embedded_program/docking/multi/New(var/obj/machinery/embedded_controller/M) - ..(M) - - if (istype(M,/obj/machinery/embedded_controller/radio/docking_port_multi)) //if our parent controller is the right type, then we can auto-init stuff at construction - var/obj/machinery/embedded_controller/radio/docking_port_multi/controller = M - //parse child_tags_txt and create child tags - children_tags = splittext(controller.child_tags_txt, ";") - - children_ready = list() - children_override = list() - for (var/child_tag in children_tags) - children_ready[child_tag] = 0 - children_override[child_tag] = "disabled" - -/datum/computer/file/embedded_program/docking/multi/proc/clear_children_ready_status() - for (var/child_tag in children_tags) - children_ready[child_tag] = 0 - -/datum/computer/file/embedded_program/docking/multi/receive_signal(datum/signal/signal, receive_method, receive_param) - var/receive_tag = signal.data["tag"] //for docking signals, this is the sender id - var/command = signal.data["command"] - var/recipient = signal.data["recipient"] //the intended recipient of the docking signal - - if (receive_tag in children_tags) - - //track children status - if (signal.data["override_status"]) - children_override[receive_tag] = signal.data["override_status"] - - if (recipient == id_tag) - switch (command) - if ("ready_for_docking") - children_ready[receive_tag] = 1 - if ("ready_for_undocking") - children_ready[receive_tag] = 1 - if ("status_override_enabled") - children_override[receive_tag] = 1 - if ("status_override_disabled") - children_override[receive_tag] = 0 - - ..(signal, receive_method, receive_param) - -/datum/computer/file/embedded_program/docking/multi/prepare_for_docking() - //clear children ready status - clear_children_ready_status() - - //tell children to prepare for docking - for (var/child_tag in children_tags) - send_docking_command(child_tag, "prepare_for_docking") - -/datum/computer/file/embedded_program/docking/multi/ready_for_docking() - //check children ready status - for (var/child_tag in children_tags) - if (!children_ready[child_tag]) - return 0 - return 1 - -/datum/computer/file/embedded_program/docking/multi/finish_docking() - //tell children to finish docking - for (var/child_tag in children_tags) - send_docking_command(child_tag, "finish_docking") - - //clear ready flags - clear_children_ready_status() - -/datum/computer/file/embedded_program/docking/multi/prepare_for_undocking() - //clear children ready status - clear_children_ready_status() - - //tell children to prepare for undocking - for (var/child_tag in children_tags) - send_docking_command(child_tag, "prepare_for_undocking") - -/datum/computer/file/embedded_program/docking/multi/ready_for_undocking() - //check children ready status - for (var/child_tag in children_tags) - if (!children_ready[child_tag]) - return 0 - return 1 - -/datum/computer/file/embedded_program/docking/multi/finish_undocking() - //tell children to finish undocking - for (var/child_tag in children_tags) - send_docking_command(child_tag, "finish_undocking") - - //clear ready flags - clear_children_ready_status() - - - - -/* - the child program - technically should be "slave" but eh... I'm too politically correct. -*/ -/datum/computer/file/embedded_program/airlock/multi_docking - var/master_tag - - var/master_status = "undocked" - var/override_enabled = 0 - var/docking_enabled = 0 - var/docking_mode = 0 //0 = docking, 1 = undocking - var/response_sent = 0 - -/datum/computer/file/embedded_program/airlock/multi_docking/New(var/obj/machinery/embedded_controller/M) - ..(M) - - if (istype(M, /obj/machinery/embedded_controller/radio/airlock/docking_port_multi)) //if our parent controller is the right type, then we can auto-init stuff at construction - var/obj/machinery/embedded_controller/radio/airlock/docking_port_multi/controller = M - src.master_tag = controller.master_tag - -/datum/computer/file/embedded_program/airlock/multi_docking/receive_user_command(command) - if (command == "toggle_override") - if (override_enabled) - override_enabled = 0 - broadcast_override_status() - else - override_enabled = 1 - broadcast_override_status() - return TRUE - - if (!docking_enabled|| override_enabled) //only allow the port to be used as an airlock if nothing is docked here or the override is enabled - return ..(command) - -/datum/computer/file/embedded_program/airlock/multi_docking/receive_signal(datum/signal/signal, receive_method, receive_param) - ..() - - var/receive_tag = signal.data["tag"] //for docking signals, this is the sender id - var/command = signal.data["command"] - var/recipient = signal.data["recipient"] //the intended recipient of the docking signal - - if (receive_tag != master_tag) - return //only respond to master - - //track master's status - if (signal.data["dock_status"]) - master_status = signal.data["dock_status"] - - if (recipient != id_tag) - return //this signal is not for us - - switch (command) - if ("prepare_for_docking") - docking_enabled = 1 - docking_mode = 0 - response_sent = 0 - - if (!override_enabled) - begin_cycle_in() - - if ("prepare_for_undocking") - docking_mode = 1 - response_sent = 0 - - if (!override_enabled) - stop_cycling() - close_doors() - disable_mech_regulation() - - if ("finish_docking") - if (!override_enabled) - enable_mech_regulation() - open_doors() - - if ("finish_undocking") - docking_enabled = 0 - -/datum/computer/file/embedded_program/airlock/multi_docking/process() - ..() - - if (docking_enabled && !response_sent) - - switch (docking_mode) - if (0) //docking - if (ready_for_docking()) - send_signal_to_master("ready_for_docking") - response_sent = 1 - if (1) //undocking - if (ready_for_undocking()) - send_signal_to_master("ready_for_undocking") - response_sent = 1 - -//checks if we are ready for docking -/datum/computer/file/embedded_program/airlock/multi_docking/proc/ready_for_docking() - return done_cycling() - -//checks if we are ready for undocking -/datum/computer/file/embedded_program/airlock/multi_docking/proc/ready_for_undocking() - var/ext_closed = check_exterior_door_secured() - var/int_closed = check_interior_door_secured() - return (ext_closed || int_closed) - -/datum/computer/file/embedded_program/airlock/multi_docking/proc/open_doors() - toggleDoor(memory["interior_status"], tag_interior_door, memory["secure"], "open") - toggleDoor(memory["exterior_status"], tag_exterior_door, memory["secure"], "open") - -/datum/computer/file/embedded_program/airlock/multi_docking/cycleDoors(var/target) - if (!docking_enabled|| override_enabled) //only allow the port to be used as an airlock if nothing is docked here or the override is enabled - ..(target) - -/datum/computer/file/embedded_program/airlock/multi_docking/proc/send_signal_to_master(var/command) - var/datum/signal/signal = new - signal.data["tag"] = id_tag - signal.data["command"] = command - signal.data["recipient"] = master_tag - post_signal(signal) - -/datum/computer/file/embedded_program/airlock/multi_docking/proc/broadcast_override_status() - var/datum/signal/signal = new - signal.data["tag"] = id_tag - signal.data["override_status"] = override_enabled? "enabled" : "disabled" - post_signal(signal) diff --git a/code/game/machinery/embedded_controller/embedded_controller_base.dm b/code/game/machinery/embedded_controller/embedded_controller_base.dm deleted file mode 100644 index 167e2b2ece2dd..0000000000000 --- a/code/game/machinery/embedded_controller/embedded_controller_base.dm +++ /dev/null @@ -1,104 +0,0 @@ -/obj/machinery/embedded_controller - name = "Embedded Controller" - anchored = TRUE - idle_power_usage = 10 - var/datum/computer/file/embedded_program/program //the currently executing program - var/on = 1 - -/obj/machinery/embedded_controller/Initialize() - if(program) - program = new program(src) - return ..() - -/obj/machinery/embedded_controller/Destroy() - if(istype(program)) - qdel(program) // the program will clear the ref in its Destroy - return ..() - -/obj/machinery/embedded_controller/proc/post_signal(datum/signal/signal, comm_line) - return 0 - -/obj/machinery/embedded_controller/receive_signal(datum/signal/signal, receive_method, receive_param) - if(!signal || signal.encryption) return - - if(program) - program.receive_signal(signal, receive_method, receive_param) - //spawn(5) program.process() //no, program.process sends some signals and machines respond and we here again and we lag -rastaf0 - -/obj/machinery/embedded_controller/Topic(href, href_list) - if(..()) - return - if(usr) - usr.set_machine(src) - if(program) - return program.receive_user_command(href_list["command"]) // Any further sanitization should be done in here. - -/obj/machinery/embedded_controller/Process() - if(program) - program.process() - - update_icon() - -/obj/machinery/embedded_controller/interface_interact(mob/user) - ui_interact(user) - return TRUE - -/obj/machinery/embedded_controller/radio - icon = 'icons/obj/airlock_machines.dmi' - icon_state = "airlock_control_off" - power_channel = ENVIRON - density = FALSE - unacidable = TRUE - var/frequency = 1379 - var/radio_filter = null - var/datum/radio_frequency/radio_connection - -/obj/machinery/embedded_controller/radio/Initialize() - set_frequency(frequency) - . = ..() - -/obj/machinery/embedded_controller/radio/Destroy() - if(radio_controller) - radio_controller.remove_object(src,frequency) - ..() - -/obj/machinery/embedded_controller/radio/on_update_icon() - overlays.Cut() - if(!on || !istype(program)) - return - - if(emagged) - overlays += image(icon, "screen_drain") - overlays += image(icon, "indicator_active") - overlays += image(icon, "indicator_forced") - overlays += image(icon, "indicator_done") - return - if(!program.memory["processing"]) - overlays += image(icon, "screen_standby") - overlays += image(icon, "indicator_done") - else - overlays += image(icon, "indicator_active") - var/datum/computer/file/embedded_program/docking/airlock/docking_program = program - var/datum/computer/file/embedded_program/airlock/airlock_program = program - if(istype(docking_program)) - if(docking_program.override_enabled) - overlays += image(icon, "indicator_forced") - airlock_program = docking_program.airlock_program - - if(istype(airlock_program) && airlock_program.memory["processing"]) - if(airlock_program.memory["pump_status"] == "siphon") - overlays += image(icon, "screen_drain") - else - overlays += image(icon, "screen_fill") - -/obj/machinery/embedded_controller/radio/post_signal(datum/signal/signal, var/radio_filter = null) - signal.transmission_method = TRANSMISSION_RADIO - if(radio_connection) - return radio_connection.post_signal(src, signal, radio_filter, AIRLOCK_CONTROL_RANGE) - else - qdel(signal) - -/obj/machinery/embedded_controller/radio/proc/set_frequency(new_frequency) - radio_controller.remove_object(src, frequency) - frequency = new_frequency - radio_connection = radio_controller.add_object(src, frequency, radio_filter) diff --git a/code/game/machinery/embedded_controller/embedded_program_base.dm b/code/game/machinery/embedded_controller/embedded_program_base.dm deleted file mode 100644 index 4fb41c4d0dbbe..0000000000000 --- a/code/game/machinery/embedded_controller/embedded_program_base.dm +++ /dev/null @@ -1,33 +0,0 @@ - -/datum/computer/file/embedded_program - var/list/memory = list() - var/obj/machinery/embedded_controller/master - var/id_tag - -/datum/computer/file/embedded_program/New(var/obj/machinery/embedded_controller/M) - master = M - if (istype(M, /obj/machinery/embedded_controller/radio)) - var/obj/machinery/embedded_controller/R = M - id_tag = R.id_tag - ..() - -/datum/computer/file/embedded_program/Destroy() - if(master) - master.program = null - master = null - return ..() - -/datum/computer/file/embedded_program/proc/receive_user_command(command) - return FALSE - -/datum/computer/file/embedded_program/proc/receive_signal(datum/signal/signal, receive_method, receive_param) - return - -/datum/computer/file/embedded_program/proc/process() - return - -/datum/computer/file/embedded_program/proc/post_signal(datum/signal/signal, comm_line) - if(master) - master.post_signal(signal, comm_line) - else - qdel(signal) diff --git a/code/game/machinery/embedded_controller/simple_docking_controller.dm b/code/game/machinery/embedded_controller/simple_docking_controller.dm deleted file mode 100644 index cccd1dc4c90ac..0000000000000 --- a/code/game/machinery/embedded_controller/simple_docking_controller.dm +++ /dev/null @@ -1,142 +0,0 @@ -//a docking port that uses a single door -/obj/machinery/embedded_controller/radio/simple_docking_controller - name = "docking hatch controller" - program = /datum/computer/file/embedded_program/docking/simple - var/tag_door - -/obj/machinery/embedded_controller/radio/simple_docking_controller/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1, var/datum/nanoui/master_ui = null, var/datum/topic_state/state = GLOB.default_state) - var/data[0] - var/datum/computer/file/embedded_program/docking/simple/docking_program = program - - data = list( - "docking_status" = docking_program.get_docking_status(), - "override_enabled" = docking_program.override_enabled, - "door_state" = docking_program.memory["door_status"]["state"], - "door_lock" = docking_program.memory["door_status"]["lock"], - ) - - ui = SSnano.try_update_ui(user, src, ui_key, ui, data, force_open) - - if (!ui) - ui = new(user, src, ui_key, "simple_docking_console.tmpl", name, 470, 290, state = state) - ui.set_initial_data(data) - ui.open() - ui.set_auto_update(1) - -//A docking controller program for a simple door based docking port -/datum/computer/file/embedded_program/docking/simple - var/tag_door - -/datum/computer/file/embedded_program/docking/simple/New(var/obj/machinery/embedded_controller/M) - ..(M) - memory["door_status"] = list(state = "closed", lock = "locked") //assume closed and locked in case the doors dont report in - - if (istype(M, /obj/machinery/embedded_controller/radio/simple_docking_controller)) - var/obj/machinery/embedded_controller/radio/simple_docking_controller/controller = M - - tag_door = controller.tag_door? controller.tag_door : "[id_tag]_hatch" - - spawn(10) - signal_door("update") //signals connected doors to update their status - - -/datum/computer/file/embedded_program/docking/simple/receive_signal(datum/signal/signal, receive_method, receive_param) - var/receive_tag = signal.data["tag"] - - if(!receive_tag) return - - if(receive_tag==tag_door) - memory["door_status"]["state"] = signal.data["door_status"] - memory["door_status"]["lock"] = signal.data["lock_status"] - - ..(signal, receive_method, receive_param) - -/datum/computer/file/embedded_program/docking/simple/receive_user_command(command) - . = TRUE - switch(command) - if("force_door") - if (override_enabled) - if(memory["door_status"]["state"] == "open") - close_door() - else - open_door() - if("toggle_override") - if (override_enabled) - disable_override() - else - enable_override() - else - . = FALSE - -/datum/computer/file/embedded_program/docking/simple/proc/signal_door(var/command) - var/datum/signal/signal = new - signal.data["tag"] = tag_door - signal.data["command"] = command - post_signal(signal) - -///datum/computer/file/embedded_program/docking/simple/proc/signal_mech_sensor(var/command) -// signal_door(command) -// return - -/datum/computer/file/embedded_program/docking/simple/proc/open_door() - if(memory["door_status"]["state"] == "closed") - //signal_mech_sensor("enable") - signal_door("secure_open") - else if(memory["door_status"]["lock"] == "unlocked") - signal_door("lock") - -/datum/computer/file/embedded_program/docking/simple/proc/close_door() - if(memory["door_status"]["state"] == "open") - signal_door("secure_close") - //signal_mech_sensor("disable") - else if(memory["door_status"]["lock"] == "unlocked") - signal_door("lock") - -//tell the docking port to start getting ready for docking - e.g. pressurize -/datum/computer/file/embedded_program/docking/simple/prepare_for_docking() - return //don't need to do anything - -//are we ready for docking? -/datum/computer/file/embedded_program/docking/simple/ready_for_docking() - return 1 //don't need to do anything - -//we are docked, open the doors or whatever. -/datum/computer/file/embedded_program/docking/simple/finish_docking() - open_door() - -//tell the docking port to start getting ready for undocking - e.g. close those doors. -/datum/computer/file/embedded_program/docking/simple/prepare_for_undocking() - close_door() - -//are we ready for undocking? -/datum/computer/file/embedded_program/docking/simple/ready_for_undocking() - return (memory["door_status"]["state"] == "closed" && memory["door_status"]["lock"] == "locked") - -/*** DEBUG VERBS *** - -/obj/machinery/embedded_controller/radio/simple_docking_controller/verb/view_state() - set category = "Debug" - set src in view(1) - src.program:print_state() - -/obj/machinery/embedded_controller/radio/simple_docking_controller/verb/spoof_signal(var/command as text, var/sender as text) - set category = "Debug" - set src in view(1) - var/datum/signal/signal = new - signal.data["tag"] = sender - signal.data["command"] = command - signal.data["recipient"] = id_tag - - src.program:receive_signal(signal) - -/obj/machinery/embedded_controller/radio/simple_docking_controller/verb/debug_init_dock(var/target as text) - set category = "Debug" - set src in view(1) - src.program:initiate_docking(target) - -/obj/machinery/embedded_controller/radio/simple_docking_controller/verb/debug_init_undock() - set category = "Debug" - set src in view(1) - src.program:initiate_undocking() - -*/ \ No newline at end of file diff --git a/code/game/machinery/embedded_controller/tin_can.dm b/code/game/machinery/embedded_controller/tin_can.dm deleted file mode 100644 index 196edeeb9eeea..0000000000000 --- a/code/game/machinery/embedded_controller/tin_can.dm +++ /dev/null @@ -1,94 +0,0 @@ -// Designed for one-room vessel with an door to an exterior (no cycleable airlock). -// Expects the following equipment: -// src, with id_tag = example -// Airlock(s), all with id_tag = example_outer -// A set of pumps or possibly other atmos objs, with the property that if they are all on they will evacuate the atmosphere in the room, all with id_tag = example_pump_out_external -// Same, wtih the property if they are all on they will equalize the atmosphere with the exterior, all with id_tag = example_pump_out_internal -// An air sensor, with id_tag = example_exterior_sensor, outside the room -// An air sensor, with id_tag = example_interior_sensor, inside the room - -#define STATE_FILL 1 -#define STATE_EVACUATE 2 -#define STATE_SEALED 3 - -/obj/machinery/embedded_controller/radio/airlock/tin_can - program = /datum/computer/file/embedded_program/airlock/tin_can - cycle_to_external_air = TRUE // Some kind of legacy var needed for proper init - scrubber_assist = TRUE - -/obj/machinery/embedded_controller/radio/airlock/tin_can/ui_interact(mob/user, ui_key = "main", datum/nanoui/ui = null, force_open = 1, datum/nanoui/master_ui = null, datum/topic_state/state = GLOB.default_state) - var/list/data = list() - var/datum/computer/file/embedded_program/airlock/tin_can/our_program = program - data = list( - "chamber_pressure" = round(program.memory["internal_sensor_pressure"]), - "door_safety" = our_program.door_safety, - "state" = our_program.state - ) - - ui = SSnano.try_update_ui(user, src, ui_key, ui, data, force_open) - if(!ui) - ui = new(user, src, ui_key, "tin_can.tmpl", name, 470, 290, state = state) - ui.set_initial_data(data) - ui.open() - ui.set_auto_update(1) - -// We piggyback off this for the utility procs and data aquisition, mostly -/datum/computer/file/embedded_program/airlock/tin_can - var/door_safety = TRUE // Whether you can open the airlock if the atmos on either side don't match - state = STATE_FILL - -/datum/computer/file/embedded_program/airlock/tin_can/receive_signal(datum/signal/signal, receive_method, receive_param) - if(signal.data["tag"] == id_tag) // Does things we don't want to our state. - return - ..() - -/datum/computer/file/embedded_program/airlock/tin_can/receive_user_command(command) - . = TRUE - switch(command) - if("toggle_door_safety") - door_safety = !door_safety - if(!door_safety) - signalDoor(tag_exterior_door, "unlock") - if("evacuate_atmos") - if(state == STATE_EVACUATE) - return - state = STATE_EVACUATE - toggleDoor(memory["exterior_status"], tag_exterior_door, door_safety, "close") - signalPump(tag_pump_out_internal, 1, 0, 0) // Interior pump, target is a vaccum - signalPump(tag_pump_out_external, 1, 1, 10000) // Exterior pump, target is infinite - signalPump(tag_pump_out_scrubber, 1) // Get the pump to assist us in scrubbing the air out - if("fill_atmos") - if(state == STATE_FILL) - return - state = STATE_FILL - toggleDoor(memory["exterior_status"], tag_exterior_door, door_safety, "close") - signalPump(tag_pump_out_internal, 1, 1, memory["external_sensor_pressure"]) // Interior pump, target is exterior pressure - signalPump(tag_pump_out_external, 1, 0, 0) // Exterior pump, target is zero, to intake - signalPump(tag_pump_out_scrubber, 0) // make sure the scrubber isn't fighting us - if("seal") - if(state == STATE_SEALED) - return - state = STATE_SEALED - toggleDoor(memory["exterior_status"], tag_exterior_door, door_safety, "close") - signalPump(tag_pump_out_internal, 0) - signalPump(tag_pump_out_external, 0) - signalPump(tag_pump_out_scrubber, 0) - else - . = FALSE - -/datum/computer/file/embedded_program/airlock/tin_can/process() - if(door_safety) - var/safe_to_open = safe_to_open() - if(safe_to_open && memory["exterior_status"]["lock"] == "locked") - signalDoor(tag_exterior_door, "unlock") - else if(!safe_to_open && memory["exterior_status"]["lock"] == "unlocked") - signalDoor(tag_exterior_door, "secure_close") // close and lock - -/datum/computer/file/embedded_program/airlock/tin_can/proc/safe_to_open() - . = TRUE - if(abs(memory["external_sensor_pressure"] - memory["internal_sensor_pressure"]) > 1) - return FALSE - -#undef STATE_FILL -#undef STATE_EVACUATE -#undef STATE_SEALED \ No newline at end of file diff --git a/code/game/machinery/flasher.dm b/code/game/machinery/flasher.dm deleted file mode 100644 index 6117e630439bb..0000000000000 --- a/code/game/machinery/flasher.dm +++ /dev/null @@ -1,150 +0,0 @@ -// It is a gizmo that flashes a small area - -/obj/machinery/flasher - name = "mounted flash" - desc = "A wall-mounted flashbulb device." - icon = 'icons/obj/stationobjs.dmi' - icon_state = "mflash1" - var/range = 2 //this is roughly the size of brig cell - var/disable = 0 - var/last_flash = 0 //Don't want it getting spammed like regular flashes - var/strength = 10 //How weakened targets are when flashed. - var/base_state = "mflash" - anchored = TRUE - idle_power_usage = 2 - movable_flags = MOVABLE_FLAG_PROXMOVE - - uncreated_component_parts = list( - /obj/item/stock_parts/radio/receiver, - /obj/item/stock_parts/power/apc - ) - public_methods = list( - /decl/public_access/public_method/flasher_flash - ) - stock_part_presets = list(/decl/stock_part_preset/radio/receiver/flasher = 1) - - -/obj/machinery/flasher/on_update_icon() - if ( !(stat & (BROKEN|NOPOWER)) ) - icon_state = "[base_state]1" -// src.sd_SetLuminosity(2) - else - icon_state = "[base_state]1-p" -// src.sd_SetLuminosity(0) - -//Don't want to render prison breaks impossible -/obj/machinery/flasher/attackby(obj/item/W as obj, mob/user as mob) - if(isWirecutter(W)) - add_fingerprint(user, 0, W) - src.disable = !src.disable - if (src.disable) - user.visible_message("[user] has disconnected the [src]'s flashbulb!", "You disconnect the [src]'s flashbulb!") - if (!src.disable) - user.visible_message("[user] has connected the [src]'s flashbulb!", "You connect the [src]'s flashbulb!") - else - ..() - -//Let the AI trigger them directly. -/obj/machinery/flasher/attack_ai() - if (src.anchored) - return src.flash() - else - return - -/obj/machinery/flasher/proc/flash() - if (!(powered())) - return - - if ((src.disable) || (src.last_flash && world.time < src.last_flash + 150)) - return - - playsound(src.loc, 'sound/weapons/flash.ogg', 100, 1) - flick("[base_state]_flash", src) - src.last_flash = world.time - use_power_oneoff(1500) - - for (var/mob/living/O in viewers(src, null)) - if (get_dist(src, O) > src.range) - continue - - var/flash_time = strength - if(isliving(O)) - if(O.eyecheck() > FLASH_PROTECTION_NONE) - continue - if(ishuman(O)) - var/mob/living/carbon/human/H = O - flash_time = round(H.getFlashMod() * flash_time) - if(flash_time <= 0) - return - var/obj/item/organ/internal/eyes/E = H.internal_organs_by_name[H.species.vision_organ] - if(!E) - return - if(E.is_bruised() && prob(E.damage + 50)) - H.flash_eyes() - E.damage += rand(1, 5) - - if(!O.blinded) - do_flash(O, flash_time) - -/obj/machinery/flasher/proc/do_flash(var/mob/living/victim, var/flash_time) - victim.flash_eyes() - victim.eye_blurry += flash_time - victim.confused += (flash_time + 2) - victim.Stun(flash_time / 2) - victim.Weaken(3) - -/obj/machinery/flasher/emp_act(severity) - if(stat & (BROKEN|NOPOWER)) - ..(severity) - return - if(prob(75/severity)) - flash() - ..(severity) - -/obj/machinery/flasher/portable //Portable version of the flasher. Only flashes when anchored - name = "portable flasher" - desc = "A portable flashing device. Wrench to activate and deactivate. Cannot detect slow movements." - icon_state = "pflash1" - strength = 8 - anchored = FALSE - base_state = "pflash" - density = TRUE - -/obj/machinery/flasher/portable/HasProximity(atom/movable/AM as mob|obj) - if(!anchored || disable || last_flash && world.time < last_flash + 150) - return - - if(istype(AM, /mob/living/carbon)) - var/mob/living/carbon/M = AM - if(!MOVING_DELIBERATELY(M)) - flash() - - if(isanimal(AM)) - flash() - -/obj/machinery/flasher/portable/attackby(obj/item/W as obj, mob/user as mob) - if(isWrench(W)) - add_fingerprint(user) - src.anchored = !src.anchored - - if (!src.anchored) - user.show_message(text("[src] can now be moved.")) - src.overlays.Cut() - - else if (src.anchored) - user.show_message(text("[src] is now secured.")) - src.overlays += "[base_state]-s" - -/obj/machinery/button/flasher - name = "flasher button" - desc = "A remote control switch for a mounted flasher." - cooldown = 5 SECONDS - -/decl/public_access/public_method/flasher_flash - name = "flash" - desc = "Performs a flash, if possible." - call_proc = /obj/machinery/flasher/proc/flash - -/decl/stock_part_preset/radio/receiver/flasher - frequency = BUTTON_FREQ - receive_and_call = list("button_active" = /decl/public_access/public_method/flasher_flash) \ No newline at end of file diff --git a/code/game/machinery/floodlight.dm b/code/game/machinery/floodlight.dm deleted file mode 100644 index 3873b1bc3da4e..0000000000000 --- a/code/game/machinery/floodlight.dm +++ /dev/null @@ -1,85 +0,0 @@ -//these are probably broken - -/obj/machinery/floodlight - name = "Emergency Floodlight" - icon = 'icons/obj/machines/floodlight.dmi' - icon_state = "flood00" - density = TRUE - obj_flags = OBJ_FLAG_ROTATABLE - construct_state = /decl/machine_construction/default/panel_closed - uncreated_component_parts = null - - active_power_usage = 200 - power_channel = LIGHT - use_power = POWER_USE_OFF - - machine_name = "emergency floodlight" - machine_desc = "A portable, battery-powered LED flood lamp used to illuminate large areas." - - //better laser, increased brightness & power consumption - var/l_max_bright = 0.8 //brightness of light when on, can be negative - var/l_inner_range = 0 //inner range of light when on, can be negative - var/l_outer_range = 4.5 //outer range of light when on, can be negative - -/obj/machinery/floodlight/on_update_icon() - icon_state = "flood[panel_open ? "o" : ""][panel_open && get_cell() ? "b" : ""]0[use_power == POWER_USE_ACTIVE]" - -/obj/machinery/floodlight/power_change() - . = ..() - if(!. || !use_power) return - - if(stat & NOPOWER) - turn_off(1) - return - - // If the cell is almost empty rarely "flicker" the light. Aesthetic only. - if(prob(30)) - set_light(l_max_bright / 2, l_inner_range, l_outer_range) - spawn(20) - if(use_power) - set_light(l_max_bright, l_inner_range, l_outer_range) - -// Returns 0 on failure and 1 on success -/obj/machinery/floodlight/proc/turn_on(var/loud = 0) - if(stat & NOPOWER) - return 0 - - set_light(l_max_bright, l_inner_range, l_outer_range) - update_use_power(POWER_USE_ACTIVE) - use_power_oneoff(active_power_usage)//so we drain cell if they keep trying to use it - update_icon() - if(loud) - visible_message("\The [src] turns on.") - playsound(src.loc, 'sound/effects/flashlight.ogg', 50, 0) - return 1 - -/obj/machinery/floodlight/proc/turn_off(var/loud = 0) - set_light(0, 0) - update_use_power(POWER_USE_OFF) - update_icon() - if(loud) - visible_message("\The [src] shuts down.") - playsound(src.loc, 'sound/effects/flashlight.ogg', 50, 0) - -/obj/machinery/floodlight/interface_interact(mob/user) - if(!CanInteract(user, DefaultTopicState())) - return FALSE - if(use_power) - turn_off(1) - else - if(!turn_on(1)) - to_chat(user, "You try to turn on \the [src] but it does not work.") - playsound(src.loc, 'sound/effects/flashlight.ogg', 50, 0) - - update_icon() - return TRUE - -/obj/machinery/floodlight/RefreshParts()//if they're insane enough to modify a floodlight, let them - ..() - var/light_mod = clamp(total_component_rating_of_type(/obj/item/stock_parts/capacitor), 0, 10) - l_max_bright = light_mod? light_mod*0.01 + initial(l_max_bright) : initial(l_max_bright)/2 //gives us between 0.8-0.9 with capacitor, or 0.4 without one - l_inner_range = light_mod + initial(l_inner_range) - l_outer_range = light_mod*1.5 + initial(l_outer_range) - change_power_consumption(initial(active_power_usage) * light_mod , POWER_USE_ACTIVE) - if(use_power) - set_light(l_max_bright, l_inner_range, l_outer_range) \ No newline at end of file diff --git a/code/game/machinery/floor_light.dm b/code/game/machinery/floor_light.dm deleted file mode 100644 index 8a3d45bd0e629..0000000000000 --- a/code/game/machinery/floor_light.dm +++ /dev/null @@ -1,157 +0,0 @@ -var/global/list/floor_light_cache = list() - -/obj/machinery/floor_light - name = "floor light" - icon = 'icons/obj/machines/floor_light.dmi' - icon_state = "base" - desc = "A backlit floor panel." - layer = ABOVE_TILE_LAYER - anchored = FALSE - use_power = POWER_USE_ACTIVE - idle_power_usage = 2 - active_power_usage = 20 - power_channel = LIGHT - matter = list(MATERIAL_STEEL = 250, MATERIAL_GLASS = 250) - - var/damaged - var/default_light_max_bright = 0.75 - var/default_light_inner_range = 1 - var/default_light_outer_range = 3 - var/default_light_colour = "#ffffff" - - -/obj/machinery/floor_light/Initialize() - . = ..() - update_use_power(use_power) - queue_icon_update() - - -/obj/machinery/floor_light/mapped_off - anchored = TRUE - use_power = POWER_USE_OFF - - -/obj/machinery/floor_light/mapped_on - anchored = TRUE - use_power = POWER_USE_ACTIVE - - -/obj/machinery/floor_light/attackby(var/obj/item/W, var/mob/user) - if(isScrewdriver(W)) - anchored = !anchored - if(use_power) - update_use_power(POWER_USE_OFF) - queue_icon_update() - visible_message("\The [user] has [anchored ? "attached" : "detached"] \the [src].") - else if(isWelder(W) && (damaged || (stat & BROKEN))) - var/obj/item/weldingtool/WT = W - if(!WT.remove_fuel(0, user)) - to_chat(user, "\The [src] must be on to complete this task.") - return - playsound(src.loc, 'sound/items/Welder.ogg', 50, 1) - if(!do_after(user, 2 SECONDS, src, DO_PUBLIC_UNIQUE)) - return - if(!src || !WT.isOn()) - return - visible_message("\The [user] has repaired \the [src].") - set_broken(FALSE) - damaged = null - else if(isWrench(W)) - playsound(src.loc, 'sound/items/Ratchet.ogg', 75, 1) - to_chat(user, "You dismantle the floor light.") - new /obj/item/stack/material/steel(src.loc, 1) - new /obj/item/stack/material/glass(src.loc, 1) - qdel(src) - else if(W.force && user.a_intent == "hurt") - attack_hand(user) - return - -/obj/machinery/floor_light/physical_attack_hand(var/mob/user) - if(user.a_intent == I_HURT && !issmall(user)) - if(!isnull(damaged) && !(stat & BROKEN)) - visible_message("\The [user] smashes \the [src]!") - playsound(src, "shatter", 70, 1) - set_broken(TRUE) - else - visible_message("\The [user] attacks \the [src]!") - playsound(src.loc, 'sound/effects/Glasshit.ogg', 75, 1) - if(isnull(damaged)) damaged = 0 - return TRUE - -/obj/machinery/floor_light/interface_interact(var/mob/user) - if(!CanInteract(user, DefaultTopicState())) - return FALSE - if(!anchored) - to_chat(user, "\The [src] must be screwed down first.") - return TRUE - - var/on = (use_power == POWER_USE_ACTIVE) - update_use_power(on ? POWER_USE_OFF : POWER_USE_ACTIVE) - visible_message("\The [user] turns \the [src] [!on ? "on" : "off"].") - queue_icon_update() - return TRUE - - -/obj/machinery/floor_light/set_broken(new_state) - . = ..() - if(. && (stat & BROKEN)) - update_use_power(POWER_USE_OFF) - - -/obj/machinery/floor_light/power_change(new_state) - . = ..() - queue_icon_update() - - -/obj/machinery/floor_light/proc/update_brightness() - if((use_power == POWER_USE_ACTIVE) && !(stat & (NOPOWER | BROKEN))) - if(light_outer_range != default_light_outer_range || light_max_bright != default_light_max_bright || light_color != default_light_colour) - set_light(default_light_max_bright, default_light_inner_range, default_light_outer_range, l_color = default_light_colour) - change_power_consumption((light_outer_range + light_max_bright) * 20, POWER_USE_ACTIVE) - else - if(light_outer_range || light_max_bright) - set_light(0) - -/obj/machinery/floor_light/on_update_icon() - overlays.Cut() - if((use_power == POWER_USE_ACTIVE) && !(stat & (NOPOWER | BROKEN))) - if(isnull(damaged)) - var/cache_key = "floorlight-[default_light_colour]" - if(!floor_light_cache[cache_key]) - var/image/I = image("on") - I.color = default_light_colour - I.plane = plane - I.layer = layer+0.001 - floor_light_cache[cache_key] = I - overlays |= floor_light_cache[cache_key] - else - if(damaged == 0) //Needs init. - damaged = rand(1,4) - var/cache_key = "floorlight-broken[damaged]-[default_light_colour]" - if(!floor_light_cache[cache_key]) - var/image/I = image("flicker[damaged]") - I.color = default_light_colour - I.plane = plane - I.layer = layer+0.001 - floor_light_cache[cache_key] = I - overlays |= floor_light_cache[cache_key] - update_brightness() - -/obj/machinery/floor_light/ex_act(severity) - switch(severity) - if(EX_ACT_DEVASTATING) - qdel(src) - if(EX_ACT_HEAVY) - if (prob(50)) - qdel(src) - else if(prob(20)) - set_broken(TRUE) - else - if(isnull(damaged)) - damaged = 0 - if(EX_ACT_LIGHT) - if (prob(5)) - qdel(src) - else if(isnull(damaged)) - damaged = 0 - return diff --git a/code/game/machinery/floorlayer.dm b/code/game/machinery/floorlayer.dm deleted file mode 100644 index b68356c51dcdd..0000000000000 --- a/code/game/machinery/floorlayer.dm +++ /dev/null @@ -1,113 +0,0 @@ -/obj/machinery/floorlayer - - name = "automatic floor layer" - icon = 'icons/obj/stationobjs.dmi' - icon_state = "pipe_d" - density = TRUE - var/turf/old_turf - var/on = 0 - var/obj/item/stack/tile/T - var/list/mode = list("dismantle"=0,"laying"=0,"collect"=0) - -/obj/machinery/floorlayer/New() - T = new/obj/item/stack/tile/floor(src) - ..() - -/obj/machinery/floorlayer/Move(new_turf,M_Dir) - ..() - - if(on) - if(mode["dismantle"]) - dismantleFloor(old_turf) - - if(mode["laying"]) - layFloor(old_turf) - - if(mode["collect"]) - CollectTiles(old_turf) - - - old_turf = new_turf - -/obj/machinery/floorlayer/physical_attack_hand(mob/user) - on=!on - user.visible_message("[user] has [!on?"de":""]activated \the [src].", "You [!on?"de":""]activate \the [src].") - return TRUE - -/obj/machinery/floorlayer/attackby(var/obj/item/W as obj, var/mob/user as mob) - - if(isWrench(W)) - var/m = input("Choose work mode", "Mode") as null|anything in mode - mode[m] = !mode[m] - var/O = mode[m] - user.visible_message("[usr] has set \the [src] [m] mode [!O?"off":"on"].", "You set \the [src] [m] mode [!O?"off":"on"].") - return - - if(istype(W, /obj/item/stack/tile)) - if(!user.unEquip(W, T)) - return - to_chat(user, "\The [W] successfully loaded.") - TakeTile(T) - return - - if(isCrowbar(W)) - if(!length(contents)) - to_chat(user, "\The [src] is empty.") - else - var/obj/item/stack/tile/E = input("Choose remove tile type.", "Tiles") as null|anything in contents - if(E) - to_chat(user, "You remove the [E] from /the [src].") - E.dropInto(loc) - T = null - return - - if(isScrewdriver(W)) - T = input("Choose tile type.", "Tiles") as null|anything in contents - return - ..() - -/obj/machinery/floorlayer/examine(mob/user) - . = ..() - var/dismantle = mode["dismantle"] - var/laying = mode["laying"] - var/collect = mode["collect"] - var/message = "\The [src] [!T?"don't ":""]has [!T?"":"[T.get_amount()] [T] "]tile\s, dismantle is [dismantle?"on":"off"], laying is [laying?"on":"off"], collect is [collect?"on":"off"]." - to_chat(user, message) - -/obj/machinery/floorlayer/proc/reset() - on = 0 - -/obj/machinery/floorlayer/proc/dismantleFloor(var/turf/new_turf) - if(istype(new_turf, /turf/simulated/floor)) - var/turf/simulated/floor/T = new_turf - if(!T.is_plating()) - T.make_plating(!(T.broken || T.burnt)) - return new_turf.is_plating() - -/obj/machinery/floorlayer/proc/TakeNewStack() - for(var/obj/item/stack/tile/tile in contents) - T = tile - return 1 - return 0 - -/obj/machinery/floorlayer/proc/SortStacks() - for(var/obj/item/stack/tile/tile1 in contents) - for(var/obj/item/stack/tile/tile2 in contents) - tile2.transfer_to(tile1) - -/obj/machinery/floorlayer/proc/layFloor(var/turf/w_turf) - if(!T) - if(!TakeNewStack()) - return 0 - w_turf.attackby(T , src) - return 1 - -/obj/machinery/floorlayer/proc/TakeTile(var/obj/item/stack/tile/tile) - if(!T) T = tile - tile.forceMove(src) - - SortStacks() - -/obj/machinery/floorlayer/proc/CollectTiles(var/turf/w_turf) - for(var/obj/item/stack/tile/tile in w_turf) - TakeTile(tile) diff --git a/code/game/machinery/hologram.dm b/code/game/machinery/hologram.dm deleted file mode 100644 index 1fb0ea902ca0e..0000000000000 --- a/code/game/machinery/hologram.dm +++ /dev/null @@ -1,474 +0,0 @@ -/* Holograms! - * Contains: - * Holopad - * Hologram - * Other stuff - */ - -/* -Revised. Original based on space ninja hologram code. Which is also mine. /N -How it works: -AI clicks on holopad in camera view. View centers on holopad. -AI clicks again on the holopad to display a hologram. Hologram stays as long as AI is looking at the pad and it (the hologram) is in range of the pad. -AI can use the directional keys to move the hologram around, provided the above conditions are met and the AI in question is the holopad's master. -Only one AI may project from a holopad at any given time. -AI may cancel the hologram at any time by clicking on the holopad once more. - -Possible to do for anyone motivated enough: - Give an AI variable for different hologram icons. - Itegrate EMP effect to disable the unit. -*/ - - -/* - * Holopad - */ - -#define HOLOPAD_PASSIVE_POWER_USAGE 1 -#define HOLOGRAM_POWER_USAGE 2 -#define RANGE_BASED 4 -#define AREA_BASED 6 - -var/global/const/HOLOPAD_MODE = RANGE_BASED - -/obj/machinery/hologram/holopad - name = "\improper holopad" - desc = "It's a floor-mounted device for projecting holographic images." - icon_state = "holopad-B0" - - layer = ABOVE_TILE_LAYER - - var/power_per_hologram = 500 //per usage per hologram - idle_power_usage = 5 - - var/list/mob/living/silicon/ai/masters = new() //List of AIs that use the holopad - 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/incoming_connection = 0 - var/mob/living/caller_id - var/obj/machinery/hologram/holopad/sourcepad - var/obj/machinery/hologram/holopad/targetpad - var/last_message - - var/list/recent_calls = list() - - var/holopadType = HOLOPAD_SHORT_RANGE //Whether the holopad is short-range or long-range. - var/base_icon = "holopad-B" - - var/allow_ai = TRUE - -/obj/machinery/hologram/holopad/New() - ..() - desc = "It's a floor-mounted device for projecting holographic images. Its ID is '[loc.loc]'" - -/obj/machinery/hologram/holopad/examine(mob/user) - . = ..() - if (incoming_connection && sourcepad) - to_chat(user, SPAN_NOTICE("There is currently an incoming call from [get_area(sourcepad)]!")) - var/callstring = "Recent incoming calls:" - for (var/id in recent_calls) - callstring += "\n[id]" - callstring = SPAN_NOTICE(callstring) - to_chat(user, callstring) - -/obj/machinery/hologram/holopad/interface_interact(var/mob/living/carbon/human/user) //Carn: Hologram requests. - if(!CanInteract(user, DefaultTopicState())) - return FALSE - if(incoming_connection && caller_id) - if(QDELETED(sourcepad)) // If the sourcepad was deleted, most likely. - incoming_connection = 0 - clear_holo() - return TRUE - visible_message("The pad hums quietly as it establishes a connection.") - if(caller_id.loc!=sourcepad.loc) - visible_message("The pad flashes an error message. The caller has left their holopad.") - return TRUE - take_call(user) - return TRUE - else if(caller_id && !incoming_connection) - audible_message("Severing connection to distant holopad.") - end_call(user) - return TRUE - - . = TRUE - var/handle_type = "Holocomms" - var/ai_exists = FALSE - - for(var/mob/living/silicon/ai/AI in GLOB.living_mob_list_) - if(!AI.client) continue - ai_exists = TRUE - break - - if(allow_ai && ai_exists) - handle_type = alert(user,"Would you like to request an AI's presence or establish communications with another pad?", "Holopad","AI","Holocomms","Cancel") - - switch(handle_type) - if("AI") - if(last_request + 200 < world.time) //don't spam the AI with requests you jerk! - last_request = world.time - to_chat(user, "You request an AI's presence.") - var/area/area = get_area(src) - for(var/mob/living/silicon/ai/AI in GLOB.living_mob_list_) - if(!AI.client) continue - if (holopadType != HOLOPAD_LONG_RANGE && !AreConnectedZLevels(AI.z, src.z)) - continue - to_chat(AI, "Your presence is requested at \the [area].") - else - to_chat(user, "A request for AI presence was already sent recently.") - if("Holocomms") - if(user.loc != src.loc) - to_chat(user, "Please step onto the holopad.") - return - if(last_request + 200 < world.time) //don't spam other people with requests either, you jerk! - last_request = world.time - var/list/holopadlist = list() - var/zlevels = GetConnectedZlevels(z) - var/zlevels_long = list() - if(GLOB.using_map.use_overmap && holopadType == HOLOPAD_LONG_RANGE) - for(var/zlevel in map_sectors) - var/obj/effect/overmap/visitable/O = map_sectors["[zlevel]"] - if(!isnull(O)) - zlevels_long |= O.map_z - for(var/obj/machinery/hologram/holopad/H in SSmachines.machinery) - if (H.operable()) - if(H.z in zlevels) - holopadlist["[H.loc.loc.name]"] = H //Define a list and fill it with the area of every holopad in the world - if (H.holopadType == HOLOPAD_LONG_RANGE && (H.z in zlevels_long)) - holopadlist["[H.loc.loc.name]"] = H - holopadlist = sortAssoc(holopadlist) - var/temppad = input(user, "Which holopad would you like to contact?", "holopad list") as null|anything in holopadlist - targetpad = holopadlist["[temppad]"] - if(targetpad==src) - to_chat(user, "Using such sophisticated technology, just to talk to yourself seems a bit silly.") - targetpad = null //Clean up the mess after an unsuccessful call - return - if(targetpad && targetpad.caller_id) - to_chat(user, "The pad flashes a busy sign. Maybe you should try again later..") - targetpad = null //Clean up the mess after an unsuccessful call - return - if(targetpad) - make_call(targetpad, user) - else - to_chat(user, "A request for holographic communication was already sent recently.") - - -/obj/machinery/hologram/holopad/proc/make_call(var/obj/machinery/hologram/holopad/targetpad, var/mob/living/carbon/user) - targetpad.last_request = world.time - targetpad.sourcepad = src //This marks the holopad you are making the call from - targetpad.caller_id = user //This marks you as the caller - targetpad.incoming_connection = 1 - playsound(targetpad.loc, 'sound/machines/chime.ogg', 25, 5) - targetpad.icon_state = "[targetpad.base_icon]1" - targetpad.audible_message("\The [src] announces, \"Incoming communications request from [targetpad.sourcepad.loc.loc].\"") - to_chat(user, "Trying to establish a connection to the holopad in [targetpad.loc.loc]... Please await confirmation from recipient.") - targetpad.addrecentcall(get_area(src)) - - -/obj/machinery/hologram/holopad/proc/take_call(mob/living/carbon/user) - incoming_connection = 0 - caller_id.machine = sourcepad - caller_id.reset_view(src) - if(!masters[caller_id])//If there is no hologram, possibly make one. - activate_holocall(caller_id) - log_admin("[key_name(caller_id)] just established a holopad connection from [sourcepad.loc.loc] to [src.loc.loc]") - -/obj/machinery/hologram/holopad/proc/end_call(mob/user) - if(!caller_id) - return - caller_id.unset_machine() - caller_id.reset_view() //Send the caller back to his body - clear_holo(0, caller_id) // destroy the hologram - caller_id = null - -/obj/machinery/hologram/holopad/proc/addrecentcall(id) - recent_calls += id - if (recent_calls.len > 5) - recent_calls -= recent_calls[1] - -/obj/machinery/hologram/holopad/check_eye(mob/user) - return 0 - -/obj/machinery/hologram/holopad/attack_ai(mob/living/silicon/ai/user) - if (!istype(user)) - return - /*There are pretty much only three ways to interact here. - I don't need to check for client since they're clicking on an object. - This may change in the future but for now will suffice.*/ - if(user.eyeobj && (user.eyeobj.loc != src.loc))//Set client eye on the object if it's not already. - user.eyeobj.setLoc(get_turf(src)) - else if (!allow_ai) - to_chat(user, SPAN_WARNING("Access denied.")) - else if (holopadType != HOLOPAD_LONG_RANGE && !AreConnectedZLevels(user.z, src.z)) - to_chat(user, SPAN_WARNING("Out of range.")) - else if(!masters[user])//If there is no hologram, possibly make one. - activate_holo(user) - else//If there is a hologram, remove it. - clear_holo(user) - return - -/obj/machinery/hologram/holopad/proc/activate_holo(mob/living/silicon/ai/user) - if(!(stat & NOPOWER) && user.eyeobj && user.eyeobj.loc == src.loc)//If the projector has power and client eye is on it - if (user.holo) - to_chat(user, "ERROR: Image feed in progress.") - return - src.visible_message("A holographic image of [user] flicks to life right before your eyes!") - create_holo(user)//Create one. - else - to_chat(user, "ERROR: Unable to project hologram.") - return - -/obj/machinery/hologram/holopad/proc/activate_holocall(mob/living/carbon/caller_id) - if(caller_id) - src.visible_message("A holographic image of [caller_id] flicks to life right before your eyes!") - create_holo(0,caller_id)//Create one. - else - to_chat(caller_id, "ERROR: Unable to project hologram.") - return - -/*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.*/ -// Note that speaking may be null here, presumably due to echo effects/non-mob transmission. -/obj/machinery/hologram/holopad/hear_talk(mob/living/M, text, verb, datum/language/speaking) - if(M) - for(var/mob/living/silicon/ai/master in masters) - var/ai_text = text - if(!master.say_understands(M, speaking))//The AI will be able to understand most mobs talking through the holopad. - if(speaking) - ai_text = speaking.scramble(text) - else - ai_text = stars(text) - if(isanimal(M) && !M.universal_speak) - var/datum/say_list/SA = M.say_list - if (SA) - ai_text = pick(SA.speak) - var/name_used = M.GetVoice() - //This communication is imperfect because the holopad "filters" voices and is only designed to connect to the master only. - var/short_links = master.get_preference_value(/datum/client_preference/ghost_follow_link_length) == GLOB.PREF_SHORT - var/follow = short_links ? "\[F]" : "\[Follow]" - var/prefix = "[follow]" - master.show_message(get_hear_message(name_used, ai_text, verb, speaking, prefix), 2) - var/name_used = M.GetVoice() - var/message - if(isanimal(M) && !M.universal_speak) - var/datum/say_list/SA = M.say_list - if (SA && length(SA.speak)) - message = get_hear_message(name_used, pick(SA.speak), verb, speaking) - else - message = get_hear_message(name_used, text, verb, speaking) - if(targetpad && !targetpad.incoming_connection) //If this is the pad you're making the call from and the call is accepted - targetpad.audible_message(message) - targetpad.last_message = message - if(sourcepad && sourcepad.targetpad && !sourcepad.targetpad.incoming_connection) //If this is a pad receiving a call and the call is accepted - if(name_used==caller_id||text==last_message||findtext(text, "Holopad received")) //prevent echoes - return - sourcepad.audible_message(message) - -/obj/machinery/hologram/holopad/proc/get_hear_message(name_used, text, verb, datum/language/speaking, prefix = "") - if(speaking) - return "Holopad received, [name_used][prefix] [speaking.format_message(text, verb)]" - return "Holopad received, [name_used][prefix] [verb], \"[text]\"" - -/obj/machinery/hologram/holopad/see_emote(mob/living/M, text) - if(M) - for(var/mob/living/silicon/ai/master in masters) - //var/name_used = M.GetVoice() - var/rendered = "Holopad received, [text]" - //The lack of name_used is needed, because message already contains a name. This is needed for simple mobs to emote properly. - master.show_message(rendered, 2) - for(var/mob/living/carbon/master in masters) - //var/name_used = M.GetVoice() - var/rendered = "Holopad received, [text]" - //The lack of name_used is needed, because message already contains a name. This is needed for simple mobs to emote properly. - master.show_message(rendered, 2) - if(targetpad) - targetpad.visible_message("[text]") - -/obj/machinery/hologram/holopad/show_message(msg, type, alt, alt_type) - for(var/mob/living/silicon/ai/master in masters) - var/rendered = "The holographic image of [msg]" - master.show_message(rendered, type) - if(findtext(msg, "Holopad received,")) - return - for(var/mob/living/carbon/master in masters) - var/rendered = "The holographic image of [msg]" - master.show_message(rendered, type) - if(targetpad) - for(var/mob/living/carbon/master in view(targetpad)) - var/rendered = "The holographic image of [msg]" - master.show_message(rendered, type) - -/obj/machinery/hologram/holopad/proc/create_holo(mob/living/silicon/ai/A, mob/living/carbon/caller_id, turf/T = loc) - var/obj/effect/overlay/hologram = new(T)//Spawn a blank effect at the location. - if(caller_id) - hologram.overlays += getHologramIcon(getFlatIcon(caller_id), hologram_color = holopadType) // Add the callers image as an overlay to keep coloration! - else if(A) - if(holopadType == HOLOPAD_LONG_RANGE) - hologram.overlays += A.holo_icon_longrange - else - hologram.overlays += A.holo_icon // Add the AI's configured holo Icon - if(A) - if(A.holo_icon_malf == TRUE) - hologram.overlays += icon("icons/effects/effects.dmi", "malf-scanline") - hologram.mouse_opacity = 0//So you can't click on it. - hologram.layer = ABOVE_HUMAN_LAYER //Above all the other objects/mobs. Or the vast majority of them. - hologram.anchored = TRUE//So space wind cannot drag it. - if(caller_id) - hologram.SetName("[caller_id.name] (Hologram)") - hologram.forceMove(get_step(src,1)) - masters[caller_id] = hologram - else - hologram.SetName("[A.name] (Hologram)") //If someone decides to right click. - A.holo = src - masters[A] = hologram - hologram.set_light(1, 0.1, 2) //hologram lighting - hologram.color = color //painted holopad gives coloured holograms - set_light(1, 0.1, 2) //pad lighting - icon_state = "[base_icon]1" - return 1 - -/obj/machinery/hologram/holopad/proc/clear_holo(mob/living/silicon/ai/user, mob/living/carbon/caller_id) - if(user) - qdel(masters[user])//Get rid of user's hologram - user.holo = null - masters -= user //Discard AI from the list of those who use holopad - if(caller_id) - qdel(masters[caller_id])//Get rid of user's hologram - masters -= caller_id //Discard the caller from the list of those who use holopad - if (!masters.len)//If no users left - set_light(0) //pad lighting (hologram lighting will be handled automatically since its owner was deleted) - icon_state = "[base_icon]0" - if(sourcepad) - sourcepad.targetpad = null - sourcepad = null - caller_id = null - return 1 - - -/obj/machinery/hologram/holopad/Process() - for (var/mob/living/silicon/ai/master in masters) - var/active_ai = (master && !master.incapacitated() && master.client && master.eyeobj)//If there is an AI with an eye attached, it's not incapacitated, and it has a client - if((stat & NOPOWER) || !active_ai) - clear_holo(master) - continue - - if(!(masters[master] in view(src))) - clear_holo(master) - continue - - use_power_oneoff(power_per_hologram) - if(last_request + 200 < world.time&&incoming_connection==1) - if(sourcepad) - sourcepad.audible_message("The holopad connection timed out") - incoming_connection = 0 - end_call() - if (caller_id&&sourcepad) - if(caller_id.loc!=sourcepad.loc) - to_chat(sourcepad.caller_id, "Severing connection to distant holopad.") - end_call() - audible_message("The connection has been terminated by the caller.") - return 1 - -/obj/machinery/hologram/holopad/proc/move_hologram(mob/living/silicon/ai/user) - if(masters[user]) - step_to(masters[user], user.eyeobj) // So it turns. - var/obj/effect/overlay/H = masters[user] - H.dropInto(user.eyeobj) - masters[user] = H - - if(!(H in view(src))) - clear_holo(user) - return 0 - - if((HOLOPAD_MODE == RANGE_BASED && (get_dist(user.eyeobj, src) > holo_range))) - clear_holo(user) - - if(HOLOPAD_MODE == AREA_BASED) - var/area/holo_area = get_area(src) - var/area/hologram_area = get_area(H) - if(hologram_area != holo_area) - clear_holo(user) - return 1 - - -/obj/machinery/hologram/holopad/proc/set_dir_hologram(new_dir, mob/living/silicon/ai/user) - if(masters[user]) - var/obj/effect/overlay/hologram = masters[user] - hologram.dir = new_dir - - - -/* - * Hologram - */ - -/obj/machinery/hologram - anchored = TRUE - idle_power_usage = 5 - active_power_usage = 100 - -//Destruction procs. -/obj/machinery/hologram/ex_act(severity) - switch(severity) - if(EX_ACT_DEVASTATING) - qdel(src) - if(EX_ACT_HEAVY) - if (prob(50)) - qdel(src) - if(EX_ACT_LIGHT) - if (prob(5)) - qdel(src) - return - -/obj/machinery/hologram/holopad/Destroy() - for (var/mob/living/master in masters) - clear_holo(master) - return ..() - -/* -Holographic project of everything else. - -/mob/verb/hologram_test() - set name = "Hologram Debug New" - set category = "CURRENT DEBUG" - - var/obj/effect/overlay/hologram = new(loc)//Spawn a blank effect at the location. - var/icon/flat_icon = icon(getFlatIcon(src,0))//Need to make sure it's a new icon so the old one is not reused. - flat_icon.ColorTone(rgb(125,180,225))//Let's make it bluish. - flat_icon.ChangeOpacity(0.5)//Make it half transparent. - var/input = input("Select what icon state to use in effect.",,"") - if(input) - var/icon/alpha_mask = new('icons/effects/effects.dmi', "[input]") - flat_icon.AddAlphaMask(alpha_mask)//Finally, let's mix in a distortion effect. - hologram.icon = flat_icon - - log_debug("Your icon should appear now.") - - return -*/ - -/* - * Other Stuff: Is this even used? - */ -/obj/machinery/hologram/projector - name = "hologram projector" - desc = "It makes a hologram appear...with magnets or something..." - icon = 'icons/obj/stationobjs.dmi' - icon_state = "hologram0" - -/obj/machinery/hologram/holopad/longrange - name = "long range holopad" - desc = "It's a floor-mounted device for projecting holographic images. This one utilizes bluespace transmitter to communicate with far away locations." - icon_state = "holopad-Y0" - power_per_hologram = 1000 //per usage per hologram - holopadType = HOLOPAD_LONG_RANGE - base_icon = "holopad-Y" - -// Used for overmap capable ships that should have communications, but not be AI accessible -/obj/machinery/hologram/holopad/longrange/remoteship - allow_ai = FALSE - -#undef RANGE_BASED -#undef AREA_BASED -#undef HOLOPAD_PASSIVE_POWER_USAGE -#undef HOLOGRAM_POWER_USAGE diff --git a/code/game/machinery/holosign.dm b/code/game/machinery/holosign.dm deleted file mode 100644 index 37994c3564951..0000000000000 --- a/code/game/machinery/holosign.dm +++ /dev/null @@ -1,78 +0,0 @@ -////////////////////HOLOSIGN/////////////////////////////////////// -/obj/machinery/holosign - name = "holosign" - desc = "Small wall-mounted holographic projector." - icon = 'icons/obj/holosign.dmi' - icon_state = "sign_off" - layer = ABOVE_DOOR_LAYER - idle_power_usage = 2 - active_power_usage = 70 - anchored = TRUE - var/lit = 0 - var/on_icon = "sign_on" - - uncreated_component_parts = list( - /obj/item/stock_parts/radio/receiver, - /obj/item/stock_parts/power/apc - ) - public_variables = list( - /decl/public_access/public_variable/holosign_on - ) - public_methods = list( - /decl/public_access/public_method/holosign_toggle - ) - stock_part_presets = list(/decl/stock_part_preset/radio/receiver/holosign = 1) - -/obj/machinery/holosign/proc/toggle() - if (inoperable()) - return - lit = !lit - update_use_power(lit ? POWER_USE_ACTIVE : POWER_USE_IDLE) - update_icon() - -/obj/machinery/holosign/on_update_icon() - if (!lit || inoperable()) - icon_state = "sign_off" - set_light(0) - else - icon_state = on_icon - set_light(0.5, 0.5, 1, l_color = COLOR_CYAN_BLUE) - -/decl/public_access/public_variable/holosign_on - expected_type = /obj/machinery/holosign - name = "holosign active" - desc = "Whether or not the holosign is active." - can_write = FALSE - has_updates = FALSE - -/decl/public_access/public_variable/holosign_on/access_var(obj/machinery/holosign/sign) - return sign.lit - -/decl/public_access/public_method/holosign_toggle - name = "holosign toggle" - desc = "Toggle the holosign's active state." - call_proc = /obj/machinery/holosign/proc/toggle - -/decl/stock_part_preset/radio/receiver/holosign - frequency = BUTTON_FREQ - receive_and_call = list("button_active" = /decl/public_access/public_method/holosign_toggle) - -/obj/machinery/holosign/surgery - name = "surgery holosign" - desc = "Small wall-mounted holographic projector. This one reads SURGERY." - on_icon = "surgery" - -/obj/machinery/holosign/chapel - name = "chapel holosign" - desc = "Small wall-mounted holographic projector. This one reads SERVICE." - on_icon = "service" - -////////////////////SWITCH/////////////////////////////////////// -/obj/machinery/button/holosign - name = "holosign switch" - desc = "A remote control switch for holosign." - icon = 'icons/obj/power.dmi' - icon_state = "crema_switch" - -/obj/machinery/button/holosign/on_update_icon() - icon_state = "light[active]" \ No newline at end of file diff --git a/code/game/machinery/igniter.dm b/code/game/machinery/igniter.dm deleted file mode 100644 index 2623d32f93f3c..0000000000000 --- a/code/game/machinery/igniter.dm +++ /dev/null @@ -1,162 +0,0 @@ -/obj/machinery/igniter - name = "igniter" - desc = "It's useful for igniting flammable items." - icon = 'icons/obj/stationobjs.dmi' - icon_state = "igniter1" - var/on = 0 - anchored = TRUE - idle_power_usage = 20 - active_power_usage = 1000 - - uncreated_component_parts = list( - /obj/item/stock_parts/radio/receiver, - /obj/item/stock_parts/power/apc - ) - public_variables = list( - /decl/public_access/public_variable/igniter_on - ) - public_methods = list( - /decl/public_access/public_method/igniter_toggle - ) - stock_part_presets = list(/decl/stock_part_preset/radio/receiver/igniter = 1) - -/obj/machinery/igniter/Initialize() - . = ..() - update_icon() - -/obj/machinery/igniter/on_update_icon() - ..() - icon_state = "igniter[on]" - -/obj/machinery/igniter/interface_interact(mob/user) - if(!CanInteract(user, DefaultTopicState())) - return FALSE - ignite() - visible_message(SPAN_NOTICE("\The [user] toggles \the [src].")) - return TRUE - -/obj/machinery/igniter/Process() - if(!(stat & NOPOWER)) - var/turf/location = src.loc - if (isturf(location)) - location.hotspot_expose(1000,500,1) - return 1 - -/obj/machinery/igniter/proc/ignite() - use_power_oneoff(2000) - on = !on - if(on) - START_PROCESSING_MACHINE(src, MACHINERY_PROCESS_SELF) - else - STOP_PROCESSING_MACHINE(src, MACHINERY_PROCESS_SELF) - update_icon() - -/decl/public_access/public_variable/igniter_on - expected_type = /obj/machinery/igniter - name = "igniter active" - desc = "Whether or not the igniter is igniting." - can_write = FALSE - has_updates = FALSE - -/decl/public_access/public_variable/holosign_on/access_var(obj/machinery/igniter/igniter) - return igniter.on - -/decl/public_access/public_method/igniter_toggle - name = "igniter toggle" - desc = "Toggle the igniter on or off." - call_proc = /obj/machinery/igniter/proc/ignite - -/decl/stock_part_preset/radio/receiver/igniter - frequency = BUTTON_FREQ - receive_and_call = list("button_active" = /decl/public_access/public_method/igniter_toggle) - -// Wall mounted remote-control igniter. - -/obj/machinery/sparker - name = "Mounted igniter" - desc = "A wall-mounted ignition device." - icon = 'icons/obj/stationobjs.dmi' - icon_state = "migniter" - var/disable = 0 - var/last_spark = 0 - var/base_state = "migniter" - anchored = TRUE - idle_power_usage = 20 - active_power_usage = 1000 - - uncreated_component_parts = list( - /obj/item/stock_parts/radio/receiver, - /obj/item/stock_parts/power/apc - ) - public_methods = list( - /decl/public_access/public_method/sparker_spark - ) - stock_part_presets = list(/decl/stock_part_preset/radio/receiver/sparker = 1) - -/obj/machinery/sparker/on_update_icon() - ..() - if(disable) - icon_state = "migniter-d" - else if(powered()) - icon_state = "migniter" -// src.sd_SetLuminosity(2) - else - icon_state = "migniter-p" -// src.sd_SetLuminosity(0) - -/obj/machinery/sparker/attackby(obj/item/W as obj, mob/user as mob) - if(isScrewdriver(W)) - add_fingerprint(user) - disable = !disable - if(disable) - user.visible_message("[user] has disabled the [src]!", "You disable the connection to the [src].") - else if(!disable) - user.visible_message("[user] has reconnected the [src]!", "You fix the connection to the [src].") - update_icon() - else - ..() - -/obj/machinery/sparker/attack_ai() - if (anchored) - return ignite() - else - return - -/obj/machinery/sparker/proc/ignite() - if (!powered()) - return - - if (disable || (last_spark && world.time < last_spark + 50)) - return - - - flick("migniter-spark", src) - var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread - s.set_up(2, 1, src) - s.start() - src.last_spark = world.time - use_power_oneoff(2000) - var/turf/location = src.loc - if (isturf(location)) - location.hotspot_expose(1000,500,1) - return 1 - -/obj/machinery/sparker/emp_act(severity) - if(stat & (BROKEN|NOPOWER)) - ..(severity) - return - ignite() - ..(severity) - -/decl/public_access/public_method/sparker_spark - name = "spark" - desc = "Creates sparks to ignite nearby gases." - call_proc = /obj/machinery/sparker/proc/ignite - -/decl/stock_part_preset/radio/receiver/sparker - frequency = BUTTON_FREQ - receive_and_call = list("button_active" = /decl/public_access/public_method/sparker_spark) - -/obj/machinery/button/ignition - name = "ignition switch" - desc = "A remote control switch for a mounted igniter." \ No newline at end of file diff --git a/code/game/machinery/jukebox.dm b/code/game/machinery/jukebox.dm deleted file mode 100644 index 99025fb474554..0000000000000 --- a/code/game/machinery/jukebox.dm +++ /dev/null @@ -1,96 +0,0 @@ -/obj/machinery/jukebox - name = "media center" - desc = "An immense, standalone touchscreen on a swiveling base, equipped with phased array speakers. Embossed on one corner of the ultrathin bezel is the brand name, 'Leitmotif Enterprise Edition'." - icon = 'icons/obj/jukebox_new.dmi' - icon_state = "jukebox3" - anchored = TRUE - density = TRUE - power_channel = EQUIP - idle_power_usage = 10 - active_power_usage = 100 - clicksound = 'sound/machines/buttonbeep.ogg' - pixel_x = -8 - - var/jukebox/jukebox - - -/obj/machinery/jukebox/Initialize() - . = ..() - jukebox = new(src, "jukebox.tmpl", "Torch Special", 400, 600) - jukebox.falloff = 3 - queue_icon_update() - - -/obj/machinery/jukebox/Destroy() - QDEL_NULL(jukebox) - . = ..() - - -/obj/machinery/jukebox/on_update_icon() - overlays.Cut() - if (!anchored || stat & (NOPOWER|BROKEN)) - icon_state = "[initial(icon_state)]-[stat & BROKEN ? "broken" : "nopower"]" - return - icon_state = initial(icon_state) - if (!jukebox?.playing) - return - overlays += "[initial(icon_state)]-[emagged ? "emagged" : "running"]" - - -/obj/machinery/jukebox/powered() - return anchored && ..() - - -/obj/machinery/jukebox/power_change() - . = ..() - if (stat & (NOPOWER|BROKEN) && jukebox?.playing) - jukebox.Stop() - - -/obj/machinery/jukebox/CanUseTopic(mob/user, datum/topic_state/state) - if (!anchored) - to_chat(user, SPAN_WARNING("Secure \the [src] first.")) - return STATUS_CLOSE - return ..() - - -/obj/machinery/jukebox/interface_interact(mob/user) - jukebox.ui_interact(user) - return TRUE - - -/obj/machinery/jukebox/attackby(obj/item/I, mob/user) - if (isWrench(I)) - add_fingerprint(user) - wrench_floor_bolts(user, 0) - power_change() - return - - // INF@CODE - START - if(istype(I, /obj/item/music_tape)) - var/obj/item/music_tape/D = I - if(tape) - to_chat(user, "There is already \a [tape] inside.") - return - - if(D.ruined) - to_chat(user, "\The [D] is ruined, you can't use it.") - return - - if(user.drop_item()) - visible_message("[usr] insert \a [tape] into \the [src].") - D.forceMove(src) - tape = D - jukebox.tracks += tape.track - verbs += /obj/machinery/jukebox/verb/eject - return - // INF@CODE - END - - return ..() - -/obj/machinery/jukebox/old - name = "retro jukebox" - desc = "A battered and hard-loved jukebox in some forgotten style, carefully restored to some semblance of working condition." - icon = 'icons/obj/jukebox.dmi' - icon_state = "jukebox2" - pixel_x = 0 diff --git a/code/game/machinery/kitchen/cookers.dm b/code/game/machinery/kitchen/cookers.dm deleted file mode 100644 index c406dd5519e77..0000000000000 --- a/code/game/machinery/kitchen/cookers.dm +++ /dev/null @@ -1,710 +0,0 @@ - -#define MAX_FOOD_COOK_COUNT 3 -#define MAX_FOOD_COMBINE_COUNT 4 - - -#define COOKER_STRIP_RAW FLAG(0) - - -/obj/item/reagent_containers/food/snacks/var/list/cooked_with -/obj/item/reagent_containers/food/snacks/var/list/combined_names - - -/obj/machinery/cooker - name = "cooker" - desc = "You shouldn't be seeing this!" - icon = 'icons/obj/cooking_machines.dmi' - density = TRUE - anchored = TRUE - idle_power_usage = 0 - active_power_usage = 1000 - construct_state = /decl/machine_construction/default/panel_closed - uncreated_component_parts = null - stat_immune = 0 - init_flags = EMPTY_BITFIELD - - var/capacity = 1 //how many things the cooker can hold at once - var/cook_time = 20 SECONDS //how many seconds the cooker takes to cook its contents - var/burn_time = 0 //food burns after burn_time, or is ejected after cook_time if 0 - var/list/cooking = list() //what the cooker is currently holding - var/list/cook_modes //How the cooker transforms things when it succeeds - var/cook_mode //The currently selected cook mode - var/threshold //Whether (world.time - started) has passed cook_time or burn_time - var/started //The world.time when cooking started - var/default_color //The fallback color to assign to cooked things if the mode does not supply one - var/datum/effect/effect/system/smoke_spread/bad/smoke - - -/obj/machinery/cooker/Initialize() - . = ..() - if (type == /obj/machinery/cooker) - return INITIALIZE_HINT_QDEL - cook_mode = cook_modes[1] - smoke = new - smoke.attach(src) - smoke.set_up(2, 0) - - -/obj/machinery/cooker/Destroy() - QDEL_NULL_LIST(cooking) - . = ..() - - -/obj/machinery/cooker/examine(mob/user, distance) - . = ..() - if (distance < 5) - if (is_processing) - to_chat(user, "It is[is_processing ? "" : " not"] running.") - if (distance < 3) - if (cooking.len) - to_chat(user, "You can see \an [english_list(cooking)] inside.") - else - to_chat(user, "It is empty.") - - -/obj/machinery/cooker/components_are_accessible(path) - return !is_processing && ..() - - -/obj/machinery/cooker/cannot_transition_to(state_path, mob/user) - if(is_processing) - return SPAN_WARNING("Turn off \the [src] first.") - return ..() - - -/obj/machinery/cooker/proc/enable() - update_use_power(active_power_usage) - START_PROCESSING_MACHINE(src, MACHINERY_PROCESS_SELF) - icon_state = "[initial(icon_state)]_on" - started = world.time - threshold = 0 - - -/obj/machinery/cooker/proc/disable() - update_use_power(idle_power_usage) - STOP_PROCESSING_MACHINE(src, MACHINERY_PROCESS_SELF) - icon_state = initial(icon_state) - - -/obj/machinery/cooker/proc/empty() - for (var/obj/item/I in cooking) - I.dropInto(loc) - cooking.Cut() - - -/obj/machinery/cooker/attack_hand(mob/user) - . = ..() - if (.) - return - if (stat) - to_chat(user, SPAN_WARNING("\The [src] is in no condition to operate.")) - return - var/option = alert(user, "", "[src] Options", "Empty", "Turn [is_processing ? "Off" : "On"]", cook_modes.len > 1 ? "Cook Mode" : null) - if (!option || QDELETED(src) || stat) - return - if (!Adjacent(user) || user.stat) - to_chat(user, SPAN_WARNING("You're not able to do that to \the [src] right now.")) - return - switch (option) - if ("Empty") - if (is_processing) - to_chat(user, SPAN_WARNING("Turn off \the [src] first.")) - return - if (!length(cooking)) - to_chat(user, SPAN_WARNING("\The [src] is already empty.")) - return - empty() - if ("Turn Off") - disable() - visible_message(SPAN_NOTICE("\The [user] turns off \the [src]."), SPAN_NOTICE("You turn off \the [src]."), range = 5) - if ("Turn On") - enable() - visible_message(SPAN_NOTICE("\The [user] turns on \the [src]."), SPAN_NOTICE("You turn on \the [src]."), range = 5) - if ("Cook Mode") - if (is_processing) - to_chat(user, SPAN_WARNING("Turn off \the [src] first.")) - return - var/mode = input(user, "", "[src] Cook Modes") as null|anything in cook_modes - if (!mode || QDELETED(src) || stat) - return - if (!Adjacent(user) || user.stat) - to_chat(user, SPAN_WARNING("You're not able to do that to \the [src] right now.")) - return - cook_mode = mode - to_chat(user, "The contents of \the [src] will now be [cook_modes[mode]["desc"]].") - - -/obj/machinery/cooker/attackby(obj/item/I, mob/user) - if (is_processing) - to_chat(user, SPAN_WARNING("Turn off \the [src] first.")) - return - . = component_attackby(I, user) - if (.) - return - if (stat) - to_chat(user, SPAN_WARNING("\The [src] is in no condition to operate.")) - return - if (!istype(I, /obj/item/reagent_containers/food/snacks)) - to_chat(user, SPAN_WARNING("Cooking \a [I] wouldn't be very tasty.")) - return - if (cooking.len >= capacity) - to_chat(user, SPAN_WARNING("\The [src] is already full up.")) - return - if (!user.unEquip(I)) - return - user.visible_message("\The [user] puts \the [I] into \the [src].") - I.forceMove(src) - cooking += I - - -/obj/machinery/cooker/Process() - if (!cooking.len) - disable() - var/time = world.time - started - if (time < cook_time) - return - if (!threshold) - var/list/source = cooking.Copy() - cooking.Cut() - var/index = source.len - while (index) - cooking += cook_item(source[index]) - --index - QDEL_NULL_LIST(source) - audible_message(SPAN_ITALIC("\The [src] lets out a happy ding.")) - playsound(src, 'sound/machines/ding.ogg', 0.5) - threshold = 1 - if (!burn_time) - empty() - disable() - return - else if (time < burn_time) - return - if (threshold < 2) - var/list/source = cooking.Copy() - cooking.Cut() - var/index = source.len - while (index) - cooking += new /obj/item/reagent_containers/food/snacks/badrecipe(src) - --index - QDEL_NULL_LIST(source) - threshold = 2 - if (prob(10)) - visible_message(SPAN_WARNING("\The [src] vomits a gout of rancid smoke!")) - smoke.start() - - -/obj/machinery/cooker/proc/cook_item(obj/item/reagent_containers/food/snacks/source) - if (istype(source, /obj/item/reagent_containers/food/snacks/badrecipe)) - return source - if (LAZYISIN(source.cooked_with, cook_mode) || length(source.cooked_with) > MAX_FOOD_COOK_COUNT) - return new /obj/item/reagent_containers/food/snacks/badrecipe(src) - var/obj/item/reagent_containers/food/snacks/result = cook_modes[cook_mode]["type"] - result = new result (src) - if (source.reagents && source.reagents.total_volume) - source.reagents.trans_to(result, source.reagents.total_volume) - var/flags = cook_modes[cook_mode]["flags"] || 0 - for (var/hint in source.nutriment_desc) - result.nutriment_desc[hint] = source.nutriment_desc[hint] - result.combined_names = source.combined_names?.Copy() - result.cooked_with = source.cooked_with?.Copy() - LAZYADD(result.cooked_with, cook_mode) - modify_result_appearance(result, source, flags) - modify_result_text(result, source, flags) - return result - - -/obj/machinery/cooker/proc/modify_result_text(obj/item/reagent_containers/food/snacks/result, obj/item/reagent_containers/food/snacks/source, flags) - var/prefix = cook_modes[cook_mode]["prefix"] - var/suffix = cook_modes[cook_mode]["suffix"] - var/result_name = source.name - if (flags & COOKER_STRIP_RAW) - if (text_starts_with(result_name, "raw")) - result_name = trim(copytext_char(result_name, 4)) - result.SetName("[prefix ? "[prefix] " : ""][result_name][suffix ? " [suffix]" : ""]") - var/list/combined_names = result.combined_names - if (combined_names) - combined_names[1] = result.name - result.desc = "\A [combined_names[1]] with [english_list(combined_names.Copy(2))]" - else - result.desc = "\A [result.name]." - - -/obj/machinery/cooker/proc/modify_result_appearance(obj/item/reagent_containers/food/snacks/result, obj/item/reagent_containers/food/snacks/source, flags) - if (!result.icon_state) - result.icon = source.icon - result.icon_state = source.icon_state - var/tint = default_color - if ("color" in cook_modes[cook_mode]) - tint = cook_modes[cook_mode]["color"] - if (tint && !istext(tint)) - tint = get_random_colour(1) - result.color = tint - if (tint != null) - result.filling_color = BlendRGB(source.color || "#ffffff", tint, 0.5) - else - result.filling_color = (source.color || source.filling_color || "#ffffff") - if (result.type != /obj/item/reagent_containers/food/snacks/variable && istype(result, /obj/item/reagent_containers/food/snacks/variable)) - var/image/I = image(result.icon, result, "[result.icon_state]_filling") - I.appearance_flags = DEFAULT_APPEARANCE_FLAGS | RESET_COLOR - I.color = result.filling_color - result.overlays += I - - -/obj/machinery/cooker/candy - name = "candy machine" - desc = "Get yer candied cheese wheels here!" - default_color = TRUE - icon_state = "mixer" - capacity = 2 - cook_modes = list( - "Candying" = list( - "type" = /obj/item/reagent_containers/food/snacks/variable, - "prefix" = "candied", - "desc" = "candied" - ), - "Make Jawbreaker" = list( - "type" = /obj/item/reagent_containers/food/snacks/variable/jawbreaker, - "suffix" = "jawbreaker", - "desc" = "made into a jawbreaker" - ), - "Make Candy Bar" = list( - "type" = /obj/item/reagent_containers/food/snacks/variable/candybar, - "suffix" = " candy bar", - "desc" = "made into a candy bar" - ), - "Make Sucker" = list( - "type" = /obj/item/reagent_containers/food/snacks/variable/sucker, - "suffix" = "sucker", - "desc" = "made into a sucker" - ), - "Make Jelly" = list( - type = /obj/item/reagent_containers/food/snacks/variable/jelly, - "suffix" = "jelly", - "desc" = "made into jelly" - ) - ) - - machine_name = "modular cooker" - machine_desc = "Can prepare nearly any kind of food a certain way, such as making pies, cookies, or candy bars." - - -/obj/machinery/cooker/fryer - name = "deep fryer" - desc = "Deep fried everything." - icon_state = "fryer" - default_color = "#ffad33" - capacity = 4 - burn_time = 40 SECONDS - cook_modes = list( - "Deep Frying" = list( - "type" = /obj/item/reagent_containers/food/snacks/variable, - "prefix" = "deep fried", - "desc" = "deep fried", - "flags" = COOKER_STRIP_RAW - ) - ) - - -/obj/machinery/cooker/grill - name = "griddle" - desc = "A flat, wide, and smooth cooking surface." - icon_state = "grill" - default_color = "#c05b28" - capacity = 4 - burn_time = 40 SECONDS - cook_modes = list( - "Grilling" = list( - "type" = /obj/item/reagent_containers/food/snacks/variable, - "prefix" = "grilled", - "desc" = "grilled", - "flags" = COOKER_STRIP_RAW - ), - "Toasting" = list( - "type" = /obj/item/reagent_containers/food/snacks/variable, - "prefix" = "toasted", - "desc" = "toasted", - "flags" = COOKER_STRIP_RAW - ), - "Frying" = list( - "type" = /obj/item/reagent_containers/food/snacks/variable, - "prefix" = "fried", - "desc" = "fried", - "flags" = COOKER_STRIP_RAW - ), - "Steaming" = list( - "type" = /obj/item/reagent_containers/food/snacks/variable, - "prefix" = "steamed", - "desc" = "steamed", - "color" = "#ffffff", - "flags" = COOKER_STRIP_RAW - ), - "Boiling" = list( - "type" = /obj/item/reagent_containers/food/snacks/variable, - "prefix" = "boiled", - "desc" = "boiled", - "color" = "#ffffff", - "flags" = COOKER_STRIP_RAW - ), - "Stewing" = list( - "type" = /obj/item/reagent_containers/food/snacks/variable/stew, - "suffix" = "stew", - "desc" = "stewed", - "color" = null, - "flags" = COOKER_STRIP_RAW - ), - "Searing" = list( - "type" = /obj/item/reagent_containers/food/snacks/variable, - "prefix" = "seared", - "desc" = "seared", - "flags" = COOKER_STRIP_RAW - ) - ) - - -/obj/machinery/cooker/oven - name = "oven" - desc = "Cookies are ready, dear." - icon_state = "oven" - default_color = "#99502c" - capacity = 4 - burn_time = 40 SECONDS - cook_modes = list( - "Baking" = list( - "type" = /obj/item/reagent_containers/food/snacks/variable, - "prefix" = "baked", - "desc" = "baked", - "flags" = COOKER_STRIP_RAW - ), - "Roasting" = list( - "type" = /obj/item/reagent_containers/food/snacks/variable, - "prefix" = "roasted", - "desc" = "roasted", - "flags" = COOKER_STRIP_RAW - ), - "Personal Pizza" = list( - "type" = /obj/item/reagent_containers/food/snacks/variable/pizza, - "suffix" = "pizza", - "desc" = "made into a pizza", - "color" = null, - "flags" = COOKER_STRIP_RAW - ), - "Bread" = list( - "type" = /obj/item/reagent_containers/food/snacks/variable/bread, - "suffix" = "bread", - "desc" = "made into bread", - "color" = null, - "flags" = COOKER_STRIP_RAW - ), - "Pie" = list( - "type" = /obj/item/reagent_containers/food/snacks/variable/pie, - "suffix" = "pie", - "desc" = "made into a pie", - "color" = null, - "flags" = COOKER_STRIP_RAW - ), - "Small Cake" = list( - "type" = /obj/item/reagent_containers/food/snacks/variable/cake, - "suffix" = "cake", - "desc" = "made into a cake", - "color" = null, - "flags" = COOKER_STRIP_RAW - ), - "Turnover" = list( - "type" = /obj/item/reagent_containers/food/snacks/variable/pocket, - "suffix" = "turnover", - "desc" = "made into a turnover", - "color" = null, - "flags" = COOKER_STRIP_RAW - ), - "Kebab" = list( - "type" = /obj/item/reagent_containers/food/snacks/variable/kebab, - "suffix" = "kebab", - "desc" = "made into a kebab", - "color" = null, - "flags" = COOKER_STRIP_RAW - ), - "Waffles" = list( - "type" = /obj/item/reagent_containers/food/snacks/variable/waffles, - "suffix" = "waffles", - "desc" = "made into waffles", - "color" = null, - "flags" = COOKER_STRIP_RAW - ), - "Pancakes" = list( - "type" = /obj/item/reagent_containers/food/snacks/variable/pancakes, - "suffix" = "pancakes", - "desc" = "made into pancakes", - "color" = null, - "flags" = COOKER_STRIP_RAW - ), - "Cookie" = list( - "type" = /obj/item/reagent_containers/food/snacks/variable/cookie, - "suffix" = "cookie", - "desc" = "made into a cookie", - "color" = null, - "flags" = COOKER_STRIP_RAW - ), - "Donut" = list( - "type" = /obj/item/reagent_containers/food/snacks/variable/donut, - "suffix" = "donut", - "desc" = "made into a donut", - "color" = null, - "flags" = COOKER_STRIP_RAW - ) - ) - - -/obj/machinery/cooker/cereal - name = "cereal maker" - desc = "Now with Dann O's available!" - icon_state = "cereal" - capacity = 2 - cook_modes = list( - "Make Cereal" = list( - "type" = /obj/item/reagent_containers/food/snacks/variable, - "prefix" = "box of", - "suffix" = "cereal", - "desc" = "made into cereal" - ), - "Make Stuffing" = list( - "type" = /obj/item/reagent_containers/food/snacks/variable/stuffing, - "suffix" = "stuffing", - "desc" = "turned into stuffing" - ), - "Shred" = list( - "type" = /obj/item/reagent_containers/food/snacks/variable/shreds, - "prefix" = "shredded", - "desc" = "shredded" - ) - ) - - -/obj/machinery/cooker/cereal/modify_result_appearance(obj/item/reagent_containers/food/snacks/result, obj/item/reagent_containers/food/snacks/source, flags) - ..(result, source) - if (cook_mode == "Make Cereal") - var/image/I = image(source.icon, source.icon_state) - I.color = source.color - I.overlays += source.overlays - I.SetTransform(scale = 0.5) - result.icon = 'icons/obj/food.dmi' - result.icon_state = "cereal_box" - result.color = null - result.overlays += I - result.filling_color = BlendRGB(source.color || source.filling_color , "#fcaf32") //for cereal contents - - -/obj/item/reagent_containers/food/snacks/variable - name = "cooked food" - icon = 'icons/obj/food_custom.dmi' - bitesize = 2 - - -/obj/item/reagent_containers/food/snacks/variable/pizza - name = "personal pizza" - desc = "A personalized pan pizza meant for only one person." - icon_state = "personal_pizza" - - -/obj/item/reagent_containers/food/snacks/variable/bread - name = "bread" - desc = "Tasty bread." - icon_state = "breadcustom" - - -/obj/item/reagent_containers/food/snacks/variable/pie - name = "pie" - desc = "Tasty pie." - icon_state = "piecustom" - - -/obj/item/reagent_containers/food/snacks/variable/cake - name = "cake" - desc = "A popular band." - icon_state = "cakecustom" - - -/obj/item/reagent_containers/food/snacks/variable/pocket - name = "hot pocket" - desc = "You wanna put a bangin- oh, nevermind." - icon_state = "donk" - - -/obj/item/reagent_containers/food/snacks/variable/kebab - name = "kebab" - desc = "Remove this!" - icon_state = "kabob" - - -/obj/item/reagent_containers/food/snacks/variable/waffles - name = "waffles" - desc = "Made with love." - icon_state = "waffles" - gender = PLURAL - - -/obj/item/reagent_containers/food/snacks/variable/pancakes - name = "pancakes" - desc = "How does an oven make pancakes?" - icon_state = "pancakescustom" - gender = PLURAL - - -/obj/item/reagent_containers/food/snacks/variable/cookie - name = "cookie" - desc = "Sugar snap!" - icon_state = "cookie" - - -/obj/item/reagent_containers/food/snacks/variable/donut - name = "filled donut" - desc = "Donut eat this!" - icon_state = "donut" - - -/obj/item/reagent_containers/food/snacks/variable/jawbreaker - name = "flavored jawbreaker" - desc = "It's like cracking a molar on a rainbow." - icon_state = "jawbreaker" - - -/obj/item/reagent_containers/food/snacks/variable/candybar - name = "flavored chocolate bar" - desc = "Made in a factory downtown." - icon_state = "bar" - - -/obj/item/reagent_containers/food/snacks/variable/sucker - name = "flavored sucker" - desc = "Suck, suck, suck." - icon_state = "sucker" - - -/obj/item/reagent_containers/food/snacks/variable/jelly - name = "jelly" - desc = "All your friends will be jelly." - icon_state = "jellycustom" - - -/obj/item/reagent_containers/food/snacks/variable/stuffing - name = "stuffing" - desc = "Get stuffed." - icon_state = "stuffing" - - -/obj/item/reagent_containers/food/snacks/variable/shreds - name = "shreds" - desc = "Gnarly." - icon_state = "shreds" //NB: there is no base icon state and that is intentional - -/obj/item/reagent_containers/food/snacks/variable/stew - name = "stew" - desc = "A hearty classic." - icon_state = "stew" - - -/obj/item/material/chopping_board - name = "chopping board" - desc = "A food preparation surface that allows you to combine food more easily." - icon = 'icons/obj/chopping_board.dmi' - icon_state = "chopping_board" - w_class = ITEM_SIZE_NORMAL - default_material = MATERIAL_MAPLE - - -/obj/item/material/chopping_board/mahogany/default_material = MATERIAL_MAHOGANY - - -/obj/item/material/chopping_board/bamboo/default_material = MATERIAL_BAMBOO - - -/obj/item/material/chopping_board/attackby(obj/item/item, mob/living/user) - if (istype(item, /obj/item/reagent_containers/food/snacks)) - if (istype(item, /obj/item/reagent_containers/food/snacks/variable)) - to_chat(user, SPAN_WARNING("\The [item] is already combinable.")) - return TRUE - if (!user.unEquip(item, src)) - return TRUE - var/obj/item/reagent_containers/food/snacks/source = item - var/obj/item/reagent_containers/food/snacks/variable/result = new (get_turf(src)) - if (source.reagents?.total_volume) - source.reagents.trans_to(result, source.reagents.total_volume) - for (var/hint in source.nutriment_desc) - result.nutriment_desc[hint] = source.nutriment_desc[hint] - result.combined_names = source.combined_names?.Copy() - result.cooked_with = source.cooked_with?.Copy() - result.icon = source.icon - result.icon_state = source.icon_state - result.color = source.color - result.overlays += source.overlays - result.name = source.name - result.desc = source.desc - qdel(source) - return TRUE - return ..() - - -/obj/item/reagent_containers/food/snacks/variable/attackby(obj/item/I, mob/living/user) - if (istype(I, /obj/item/reagent_containers/food/snacks)) - combine(I, user) - return TRUE - return ..() - - -/obj/item/reagent_containers/food/snacks/variable/proc/combine(obj/item/reagent_containers/food/snacks/other, mob/user) - var/combined_count = length(combined_names) - var/other_combined_count = length(other.combined_names) - if (combined_count + other_combined_count > 4) - to_chat(user, SPAN_WARNING("This food combination is too large.")) - var/response - if (bitecount || other.bitecount) - if (user.a_intent == I_HELP) - to_chat(user, SPAN_WARNING("This food is partially eaten. Combining it would be disgusting.")) - return FALSE - if (user.a_intent == I_HURT) - to_chat(user, SPAN_WARNING("This food is partially eaten.") + SPAN_NOTICE(" You combine it anyway.")) - else - response = alert(user, "Combine Food Scraps?", "Combine Food", "Yes", "No") == "Yes" - if (!response) - return FALSE - if (!response && user.a_intent == I_HELP) - response = alert(user, "Combine Food?", "Combine Food", "Yes", "No") == "Yes" - if (!response) - return FALSE - if (!user.unEquip(other, src)) - return FALSE - if (!combined_count) - combined_names = list(name) - name = "[name] meal" - if (other_combined_count) - combined_names += other.combined_names - else - combined_names += other.name - desc = "\A [combined_names[1]] with [english_list(combined_names.Copy(2))]" - var/other_volume = other.reagents?.total_volume - if (other_volume) - var/volume = reagents.total_volume + other_volume - if (reagents.maximum_volume < volume) - reagents.maximum_volume = volume - other.reagents.trans_to(src, volume) - for (var/hint in other.nutriment_desc) - if (!nutriment_desc[hint]) - nutriment_desc[hint] = 0 - nutriment_desc[hint] += other.nutriment_desc[hint] - bitesize += (other.bitesize - other.bitecount) - var/image/I = image(other.icon, other.icon_state) - I.appearance_flags = DEFAULT_APPEARANCE_FLAGS | RESET_COLOR - I.pixel_x = rand(-8, 8) - I.pixel_y = rand(-8, 8) - I.color = other.color - I.overlays += other.overlays - I.SetTransform(scale = 0.8) - overlays += I - qdel(other) - return TRUE - - -#undef COOKER_STRIP_RAW - -#undef MAX_FOOD_COMBINE_COUNT -#undef MAX_FOOD_COOK_COUNT diff --git a/code/game/machinery/kitchen/gibber.dm b/code/game/machinery/kitchen/gibber.dm deleted file mode 100644 index 91729e6b128cb..0000000000000 --- a/code/game/machinery/kitchen/gibber.dm +++ /dev/null @@ -1,222 +0,0 @@ - -/obj/machinery/gibber - name = "meat grinder" - desc = "The name isn't descriptive enough?" - icon = 'icons/obj/kitchen.dmi' - icon_state = "grinder" - density = TRUE - anchored = TRUE - req_access = list(access_kitchen,access_morgue) - construct_state = /decl/machine_construction/default/panel_closed - uncreated_component_parts = null - stat_immune = 0 - - machine_name = "meat grinder" - machine_desc = "Messily turns animals - living or dead - into edible meat. Installed safety mechanisms prevent use on humans." - - var/operating = 0 //Is it on? - var/dirty = 0 // Does it need cleaning? - var/mob/living/occupant // Mob who has been put inside - var/gib_time = 40 // Time from starting until meat appears - var/gib_throw_dir = WEST // Direction to spit meat and gibs in. - - idle_power_usage = 2 - active_power_usage = 500 - -/obj/machinery/gibber/Initialize() - . = ..() - update_icon() - -/obj/machinery/gibber/Destroy() - if(occupant) - occupant.dropInto(loc) - occupant = null - . = ..() - -/obj/machinery/gibber/on_update_icon() - overlays.Cut() - if (dirty) - src.overlays += image('icons/obj/kitchen.dmi', "grbloody") - if(stat & (NOPOWER|BROKEN)) - return - if (!occupant) - src.overlays += image('icons/obj/kitchen.dmi', "grjam") - else if (operating) - src.overlays += image('icons/obj/kitchen.dmi', "gruse") - else - src.overlays += image('icons/obj/kitchen.dmi', "gridle") - -/obj/machinery/gibber/relaymove(mob/user as mob) - src.go_out() - return - -/obj/machinery/gibber/physical_attack_hand(mob/user) - if(operating) - to_chat(user, "\The [src] is locked and running, wait for it to finish.") - return TRUE - src.startgibbing(user) - return TRUE - -/obj/machinery/gibber/examine(mob/user) - . = ..() - to_chat(user, "The safety guard is [emagged ? "disabled" : "enabled"].") - -/obj/machinery/gibber/emag_act(var/remaining_charges, var/mob/user) - emagged = !emagged - to_chat(user, "You [emagged ? "disable" : "enable"] \the [src]'s safety guard.") - return 1 - -/obj/machinery/gibber/components_are_accessible(path) - return !operating && ..() - -/obj/machinery/gibber/cannot_transition_to(state_path, mob/user) - if(operating) - return SPAN_NOTICE("You must wait for \the [src] to finish operating first!") - return ..() - -/obj/machinery/gibber/attackby(var/obj/item/W, var/mob/user) - if(!operating) - return - if(istype(W, /obj/item/grab)) - var/obj/item/grab/G = W - if(!G.force_danger()) - to_chat(user, "You need a better grip to do that!") - return - move_into_gibber(user,G.affecting) - qdel(G) - else if(istype(W, /obj/item/organ)) - if(!user.unEquip(W)) - return - qdel(W) - user.visible_message("\The [user] feeds \the [W] into \the [src], obliterating it.") - else - return ..() - -/obj/machinery/gibber/MouseDrop_T(mob/target, mob/user) - if(user.stat || user.restrained()) - return - move_into_gibber(user,target) - -/obj/machinery/gibber/proc/move_into_gibber(var/mob/user,var/mob/living/victim) - - if(src.occupant) - to_chat(user, "\The [src] is full, empty it first!") - return - - if(operating) - to_chat(user, "\The [src] is locked and running, wait for it to finish.") - return - - if(!(istype(victim, /mob/living/carbon)) && !(istype(victim, /mob/living/simple_animal)) ) - to_chat(user, "This is not suitable for \the [src]!") - return - - if(istype(victim,/mob/living/carbon/human) && !emagged) - to_chat(user, "\The [src] safety guard is engaged!") - return - - - if(victim.abiotic(1)) - to_chat(user, "\The [victim] may not have any abiotic items on.") - return - - user.visible_message("\The [user] starts to put \the [victim] into \the [src]!") - src.add_fingerprint(user) - if(do_after(user, 3 SECONDS, src, DO_PUBLIC_UNIQUE) && victim.Adjacent(src) && user.Adjacent(src) && victim.Adjacent(user) && !occupant) - user.visible_message("\The [user] stuffs \the [victim] into \the [src]!") - if(victim.client) - victim.client.perspective = EYE_PERSPECTIVE - victim.client.eye = src - victim.forceMove(src) - src.occupant = victim - update_icon() - -/obj/machinery/gibber/verb/eject() - set category = "Object" - set name = "Empty Gibber" - set src in oview(1) - - if (usr.stat != 0) - return - src.go_out() - add_fingerprint(usr) - return - -/obj/machinery/gibber/proc/go_out() - if(operating || !src.occupant) - return - for(var/obj/O in (contents - component_parts)) - O.dropInto(loc) - if (src.occupant.client) - src.occupant.client.eye = src.occupant.client.mob - src.occupant.client.perspective = MOB_PERSPECTIVE - src.occupant.dropInto(loc) - src.occupant = null - update_icon() - return - -/obj/machinery/gibber/proc/startgibbing(mob/user as mob) - if(src.operating) - return - if(!src.occupant) - visible_message("You hear a loud metallic grinding sound.") - return - - use_power_oneoff(1000) - visible_message("You hear a loud [occupant.isSynthetic() ? "metallic" : "squelchy"] grinding sound.") - src.operating = 1 - update_icon() - - admin_attack_log(user, occupant, "Gibbed the victim", "Was gibbed", "gibbed") - src.occupant.ghostize() - addtimer(CALLBACK(src, .proc/finish_gibbing), gib_time) - - var/list/gib_products = shuffle(occupant.harvest_meat() | occupant.harvest_skin() | occupant.harvest_bones()) - if(length(gib_products) <= 0) - return - - var/slab_name = occupant.name - var/slab_nutrition = 20 - - if(iscarbon(occupant)) - var/mob/living/carbon/C = occupant - slab_nutrition = C.nutrition / 15 - - if(istype(occupant, /mob/living/carbon/human)) - slab_name = occupant.real_name - - // Small mobs don't give as much nutrition. - if(issmall(src.occupant)) - slab_nutrition *= 0.5 - - slab_nutrition /= gib_products.len - - var/drop_products = Floor(gib_products.len * 0.35) - for(var/atom/movable/thing in gib_products) - if(drop_products) - drop_products-- - qdel(thing) - else - thing.forceMove(src) - if(istype(thing, /obj/item/reagent_containers/food/snacks/meat)) - var/obj/item/reagent_containers/food/snacks/meat/slab = thing - slab.SetName("[slab_name] [slab.name]") - slab.reagents.add_reagent(/datum/reagent/nutriment,slab_nutrition) - -/obj/machinery/gibber/proc/finish_gibbing() - operating = 0 - if(QDELETED(occupant)) - occupant = null - return - occupant.gib() - qdel(occupant) - - playsound(loc, 'sound/effects/splat.ogg', 50, 1) - for (var/obj/thing in (contents - component_parts)) - // There's a chance that the gibber will fail to destroy some evidence. - if(istype(thing,/obj/item/organ) && prob(80)) - qdel(thing) - continue - thing.dropInto(loc) // Attempts to drop it onto the turf for throwing. - thing.throw_at(get_edge_target_turf(src,gib_throw_dir),rand(0,3),emagged ? 30 : 15) // Being pelted with bits of meat and bone would hurt. - update_icon() diff --git a/code/game/machinery/kitchen/icecream.dm b/code/game/machinery/kitchen/icecream.dm deleted file mode 100644 index ccb31ac035da3..0000000000000 --- a/code/game/machinery/kitchen/icecream.dm +++ /dev/null @@ -1,209 +0,0 @@ -#define ICECREAM_VANILLA 1 -#define ICECREAM_CHOCOLATE 2 -#define ICECREAM_STRAWBERRY 3 -#define ICECREAM_BLUE 4 -#define ICECREAM_CHERRY 5 -#define ICECREAM_BANANA 6 -#define CONE_WAFFLE 7 -#define CONE_CHOC 8 - -// Ported wholesale from Apollo Station. - -/obj/machinery/icecream_vat - name = "icecream vat" - desc = "A heavy metal container used to produce and store ice cream." - icon = 'icons/obj/kitchen.dmi' - icon_state = "icecream_vat" - density = TRUE - anchored = FALSE - atom_flags = ATOM_FLAG_NO_TEMP_CHANGE | ATOM_FLAG_NO_REACT | ATOM_FLAG_OPEN_CONTAINER - - var/list/product_types = list() - var/dispense_flavour = ICECREAM_VANILLA - var/flavour_name = "vanilla" - -/obj/machinery/icecream_vat/proc/get_ingredient_list(var/type) - switch(type) - if(ICECREAM_CHOCOLATE) - return list(/datum/reagent/drink/milk, /datum/reagent/drink/ice, /datum/reagent/nutriment/coco) - if(ICECREAM_STRAWBERRY) - return list(/datum/reagent/drink/milk, /datum/reagent/drink/ice, /datum/reagent/drink/juice/berry) - if(ICECREAM_BLUE) - return list(/datum/reagent/drink/milk, /datum/reagent/drink/ice, /datum/reagent/ethanol/singulo) - if(ICECREAM_CHERRY) - return list(/datum/reagent/drink/milk, /datum/reagent/drink/ice, /datum/reagent/nutriment/cherryjelly) - if(ICECREAM_BANANA) - return list(/datum/reagent/drink/milk, /datum/reagent/drink/ice, /datum/reagent/drink/juice/banana) - if(CONE_WAFFLE) - return list(/datum/reagent/nutriment/flour, /datum/reagent/sugar) - if(CONE_CHOC) - return list(/datum/reagent/nutriment/flour, /datum/reagent/sugar, /datum/reagent/nutriment/coco) - else - return list(/datum/reagent/drink/milk, /datum/reagent/drink/ice) - -/obj/machinery/icecream_vat/proc/get_flavour_name(var/flavour_type) - switch(flavour_type) - if(ICECREAM_CHOCOLATE) - return "chocolate" - if(ICECREAM_STRAWBERRY) - return "strawberry" - if(ICECREAM_BLUE) - return "blue" - if(ICECREAM_CHERRY) - return "cherry" - if(ICECREAM_BANANA) - return "banana" - if(CONE_WAFFLE) - return "waffle" - if(CONE_CHOC) - return "chocolate" - else - return "vanilla" - -/obj/machinery/icecream_vat/Initialize() - . = ..() - create_reagents(100) - while(product_types.len < 8) - product_types.Add(5) - reagents.add_reagent(/datum/reagent/drink/milk, 5) - reagents.add_reagent(/datum/reagent/nutriment/flour, 5) - reagents.add_reagent(/datum/reagent/sugar, 5) - reagents.add_reagent(/datum/reagent/drink/ice, 5) - -/obj/machinery/icecream_vat/interface_interact(mob/user) - interact(user) - return TRUE - -/obj/machinery/icecream_vat/interact(mob/user as mob) - user.set_machine(src) - var/dat - dat += "ICECREAM
      " - dat += "Dispensing: [flavour_name] icecream

      " - dat += "Vanilla icecream: Select Make x5 [product_types[ICECREAM_VANILLA]] scoops left. (Ingredients: milk, ice)
      " - dat += "Strawberry icecream: Select Make x5 [product_types[ICECREAM_STRAWBERRY]] dollops left. (Ingredients: milk, ice, berry juice)
      " - dat += "Chocolate icecream: Select Make x5 [product_types[ICECREAM_CHOCOLATE]] dollops left. (Ingredients: milk, ice, coco powder)
      " - dat += "Blue icecream: Select Make x5 [product_types[ICECREAM_BLUE]] dollops left. (Ingredients: milk, ice, singulo)
      " - dat += "Cherry icecream: Select Make x5 [product_types[ICECREAM_CHERRY]] dollops left. (Ingredients: milk, ice, cherry jelly)
      " - dat += "Banana icecream: Select Make x5 [product_types[ICECREAM_BANANA]] dollops left. (Ingredients: milk, ice, banana)
      " - dat += "
      CONES
      " - dat += "Waffle cones: Dispense Make x5 [product_types[CONE_WAFFLE]] cones left. (Ingredients: flour, sugar)
      " - dat += "Chocolate cones: Dispense Make x5 [product_types[CONE_CHOC]] cones left. (Ingredients: flour, sugar, coco powder)
      " - dat += "
      " - dat += "VAT CONTENT
      " - for(var/datum/reagent/R in reagents.reagent_list) - dat += "[R.name]: [R.volume]" - dat += "Purge
      " - dat += "Refresh Close" - - var/datum/browser/popup = new(user, "icecreamvat","Icecream Vat", 700, 500, src) - popup.set_content(dat) - popup.open() - -/obj/machinery/icecream_vat/attackby(var/obj/item/O as obj, var/mob/user as mob) - if(istype(O, /obj/item/reagent_containers/food/snacks/icecream)) - var/obj/item/reagent_containers/food/snacks/icecream/I = O - if(!I.ice_creamed) - if(product_types[dispense_flavour] > 0) - src.visible_message("[icon2html(src, viewers(get_turf(src)))] [user] scoops delicious [flavour_name] icecream into [I].") - product_types[dispense_flavour] -= 1 - I.add_ice_cream(flavour_name) - // if(beaker) - // beaker.reagents.trans_to(I, 10) - if(I.reagents.total_volume < 10) - I.reagents.add_reagent(/datum/reagent/sugar, 10 - I.reagents.total_volume) - else - to_chat(user, "There is not enough icecream left!") - else - to_chat(user, "[O] already has icecream in it.") - return 1 - else if(O.is_open_container()) - return - else - ..() - -/obj/machinery/icecream_vat/proc/make(var/mob/user, var/make_type, var/amount) - for(var/R in get_ingredient_list(make_type)) - if(reagents.has_reagent(R, amount)) - continue - amount = 0 - break - if(amount) - for(var/R in get_ingredient_list(make_type)) - reagents.remove_reagent(R, amount) - product_types[make_type] += amount - var/flavour = get_flavour_name(make_type) - if(make_type > 6) - src.visible_message("[user] cooks up some [flavour] cones.") - else - src.visible_message("[user] whips up some [flavour] icecream.") - else - to_chat(user, "You don't have the ingredients to make this.") - -/obj/machinery/icecream_vat/OnTopic(user, href_list) - if(href_list["close"]) - close_browser(usr,"window=icecreamvat") - return TOPIC_HANDLED - - if(href_list["select"]) - dispense_flavour = text2num(href_list["select"]) - flavour_name = get_flavour_name(dispense_flavour) - src.visible_message("[user] sets [src] to dispense [flavour_name] flavoured icecream.") - . = TOPIC_HANDLED - - else if(href_list["cone"]) - var/dispense_cone = text2num(href_list["cone"]) - var/cone_name = get_flavour_name(dispense_cone) - if(product_types[dispense_cone] >= 1) - product_types[dispense_cone] -= 1 - var/obj/item/reagent_containers/food/snacks/icecream/I = new(src.loc) - I.cone_type = cone_name - I.icon_state = "icecream_cone_[cone_name]" - I.desc = "Delicious [cone_name] cone, but no ice cream." - src.visible_message("[user] dispenses a crunchy [cone_name] cone from [src].") - else - to_chat(user, "There are no [cone_name] cones left!") - . = TOPIC_REFRESH - - else if(href_list["make"]) - var/amount = (text2num(href_list["amount"])) - var/C = text2num(href_list["make"]) - make(user, C, amount) - . = TOPIC_REFRESH - - else if(href_list["disposeI"]) - var/datum/reagent/R = locate(href_list["disposeI"]) in reagents.reagent_list - if(R) - reagents.del_reagent(R.type) - . = TOPIC_REFRESH - - if(href_list["refresh"]) - . = TOPIC_REFRESH - -/obj/item/reagent_containers/food/snacks/icecream - name = "ice cream cone" - desc = "Delicious waffle cone, but no ice cream." - icon_state = "icecream_cone_waffle" //default for admin-spawned cones, href_list["cone"] should overwrite this all the time - layer = ABOVE_OBJ_LAYER - bitesize = 3 - - var/ice_creamed = 0 - var/cone_type - -/obj/item/reagent_containers/food/snacks/icecream/New() - create_reagents(20) - reagents.add_reagent(/datum/reagent/nutriment, 5) - -/obj/item/reagent_containers/food/snacks/icecream/proc/add_ice_cream(var/flavour_name) - name = "[flavour_name] icecream" - src.overlays += "icecream_[flavour_name]" - desc = "Delicious [cone_type] cone with a dollop of [flavour_name] ice cream." - ice_creamed = 1 - -#undef ICECREAM_VANILLA -#undef ICECREAM_CHOCOLATE -#undef ICECREAM_STRAWBERRY -#undef ICECREAM_BLUE -#undef ICECREAM_CHERRY -#undef ICECREAM_BANANA -#undef CONE_WAFFLE -#undef CONE_CHOC \ No newline at end of file diff --git a/code/game/machinery/kitchen/microwave.dm b/code/game/machinery/kitchen/microwave.dm deleted file mode 100644 index 5f47c8418163a..0000000000000 --- a/code/game/machinery/kitchen/microwave.dm +++ /dev/null @@ -1,489 +0,0 @@ - -/obj/machinery/microwave - name = "microwave" - desc = "A possibly occult device capable of perfectly preparing many types of food." - icon = 'icons/obj/kitchen.dmi' - icon_state = "mw" - layer = BELOW_OBJ_LAYER - density = TRUE - anchored = TRUE - idle_power_usage = 5 - active_power_usage = 100 - atom_flags = ATOM_FLAG_NO_TEMP_CHANGE | ATOM_FLAG_NO_REACT | ATOM_FLAG_OPEN_CONTAINER - construct_state = /decl/machine_construction/default/panel_closed - uncreated_component_parts = null - stat_immune = 0 - - machine_name = "microwave" - machine_desc = "Required for preparing any dish more complicated than a slice of bread. In the future, everything is microwaved." - - var/operating = FALSE // Is it on? - var/dirtiness = 0 // Ranges from 0 to 100, increasing a little with failed recipes and emptying reagents - var/broken = 0 // If above 0, the microwave is broken and can't be used - - var/power_efficiency = 1.0 // Divider for the microwave's power use - var/speed_multiplier = 1.0 // Divider for the microwave's cooking delay - var/break_multiplier = 1.0 // Multiplier for break chance - - var/list/ingredients = list() - - -// see code/modules/food/recipes_microwave.dm for recipes - -/********************************* -* Initialization, part logic -**********************************/ - -/obj/machinery/microwave/Initialize() - . = ..() - create_reagents(100) - -/obj/machinery/microwave/RefreshParts() - // Microwaves use a manipulator, micro lasers, and matter bin. - // The used manipulator determines the power use. - // Micro lasers speed cooking up at higher tiers. - // Matter bins decrease the chance of breaking or getting dirty. - ..() - var/laser_rating = clamp(total_component_rating_of_type(/obj/item/stock_parts/micro_laser), 1, 5) - - speed_multiplier = (laser_rating * 0.5) - power_efficiency = total_component_rating_of_type(/obj/item/stock_parts/manipulator) - break_multiplier = 1 / clamp(total_component_rating_of_type(/obj/item/stock_parts/matter_bin), 1, 3) - -/******************* -* Item Adding -********************/ - -/obj/machinery/microwave/attackby(var/obj/item/O as obj, var/mob/user as mob) - if(broken > 0) - // Start repairs by using a screwdriver - if(broken == 2 && isScrewdriver(O)) - user.visible_message( \ - "\The [user] starts to fix part of the microwave.", \ - "You start to fix part of the microwave." \ - ) - if (do_after(user, 2 SECONDS, src, DO_PUBLIC_UNIQUE)) - user.visible_message( \ - "\The [user] fixes part of the microwave.", \ - "You have fixed part of the microwave." \ - ) - broken = 1 // Fix it a bit - - // Finish repairs using a wrench - else if(broken == 1 && isWrench(O)) - user.visible_message( \ - "\The [user] starts to fix part of the microwave.", \ - "You start to fix part of the microwave." \ - ) - if (do_after(user, 2 SECONDS, src, DO_PUBLIC_UNIQUE)) - user.visible_message( \ - "\The [user] fixes the microwave.", \ - "You have fixed the microwave." \ - ) - broken = 0 // Fix it! - dirtiness = 0 // just to be sure - update_icon() - atom_flags = ATOM_FLAG_NO_TEMP_CHANGE | ATOM_FLAG_OPEN_CONTAINER - - // Otherwise, we can't add anything to the micrwoave - else - to_chat(user, "It's broken, and this isn't the right way to fix it!") - return - - else if((. = component_attackby(O, user))) - dispose() - return - - else if(dirtiness == 100) // The microwave is all dirty, so it can't be used! - var/has_rag = istype(O, /obj/item/reagent_containers/glass/rag) - var/has_cleaner = O.reagents != null && O.reagents.has_reagent(/datum/reagent/space_cleaner, 5) - - // If they're trying to clean it, let them - if (has_rag || has_cleaner) - - user.visible_message( \ - "\The [user] starts to clean the microwave.", \ - "You start to clean the microwave." \ - ) - if (do_after(user, 2 SECONDS, src, DO_PUBLIC_UNIQUE)) - user.visible_message( \ - "\The [user] has cleaned the microwave.", \ - "You clean out the microwave." \ - ) - - // You can use a rag to wipe down the inside of the microwave - // Otherwise, you'll need some space cleaner - if (!has_rag) - O.reagents.remove_reagent(/datum/reagent/space_cleaner, 5) - - dirtiness = 0 // It's clean! - broken = 0 // just to be sure - update_icon() - atom_flags = ATOM_FLAG_NO_TEMP_CHANGE | ATOM_FLAG_OPEN_CONTAINER - return TRUE - - // Otherwise, bad luck! - else - to_chat(user, "You need to clean [src] before you use it!") - return - - else if(is_type_in_list(O, GLOB.microwave_accepts_items)) - - if (LAZYLEN(ingredients) >= GLOB.microwave_maximum_item_storage) - to_chat(user, "This [src] is full of ingredients - you can't fit any more.") - - else if(istype(O, /obj/item/stack)) // This is bad, but I can't think of how to change it - var/obj/item/stack/S = O - if(S.use(1)) - var/stack_item = new O.type (src) - LAZYADD(ingredients, stack_item) - user.visible_message( \ - "\The [user] has added one of [O] to \the [src].", \ - "You add one of [O] to \the [src].") - return TRUE - - else - if (!user.unEquip(O, src)) - return - LAZYADD(ingredients, O) - user.visible_message( \ - "\The [user] has added \the [O] to \the [src].", \ - "You add \the [O] to \the [src].") - return TRUE - - return - - else if(istype(O,/obj/item/reagent_containers/glass) || \ - istype(O,/obj/item/reagent_containers/food/drinks) || \ - istype(O,/obj/item/reagent_containers/food/condiment) \ - ) - if (!O.reagents) - return - for (var/datum/reagent/R in O.reagents.reagent_list) - if (!(R.type in GLOB.microwave_accepts_reagents)) - to_chat(user, SPAN_WARNING("Your [O] contains components unsuitable for cookery.")) - return - - else if(istype(O, /obj/item/storage)) - if (LAZYLEN(ingredients) >= GLOB.microwave_maximum_item_storage) - to_chat(user, SPAN_WARNING("[src] is completely full!")) - return - - var/obj/item/storage/bag/P = O - var/objects_loaded = 0 - for(var/obj/G in P.contents) - if(length(ingredients) < GLOB.microwave_maximum_item_storage && is_type_in_list(G, GLOB.microwave_accepts_items) && P.remove_from_storage(G, src, 1)) - objects_loaded++ - LAZYADD(ingredients, G) - P.finish_bulk_removal() - - if (objects_loaded) - if (!P.contents.len) - user.visible_message(SPAN_NOTICE("\The [user] empties \the [P] into \the [src]."), - SPAN_NOTICE("You empty \the [P] into \the [src].")) - else - user.visible_message(SPAN_NOTICE("\The [user] empties \the [P] into \the [src]."), - SPAN_NOTICE("You empty what you can from \the [P] into \the [src].")) - return TRUE - - else - to_chat(user, SPAN_WARNING("\The [P] doesn't contain any compatible items to put into \the [src]!")) - - return - - else if(istype(O, /obj/item/grab)) - var/obj/item/grab/G = O - to_chat(user, "This is ridiculous. You can't fit \the [G.affecting] in \the [src].") - return - - else if(isWrench(O)) - user.visible_message( \ - "\The [user] begins [anchored ? "securing" : "unsecuring"] the microwave.", \ - "You attempt to [anchored ? "secure" : "unsecure"] the microwave." - ) - if (do_after(user, 2 SECONDS, src, DO_PUBLIC_UNIQUE)) - anchored = !anchored - user.visible_message( \ - "\The [user] [anchored ? "secures" : "unsecures"] the microwave.", \ - "You [anchored ? "secure" : "unsecure"] the microwave." - ) - - else - to_chat(user, "You have no idea what you can cook with this [O].") - - updateUsrDialog() - -/obj/machinery/microwave/components_are_accessible(path) - return (broken == 0) && ..() - -/obj/machinery/microwave/cannot_transition_to(state_path, mob/user) - if(broken) - return SPAN_NOTICE("\The [src] is too broken to do this!") - . = ..() - -/obj/machinery/microwave/state_transition(decl/machine_construction/new_state) - ..() - updateUsrDialog() - -// need physical proximity for our interface. -/obj/machinery/microwave/DefaultTopicState() - return GLOB.physical_state - -/obj/machinery/microwave/interface_interact(mob/user) - interact(user) - return TRUE - -/******************* -* Microwave Menu -********************/ - -/obj/machinery/microwave/InsertedContents() - return ingredients - -/obj/machinery/microwave/interact(mob/user as mob) // The microwave Menu - user.set_machine(src) - var/dat = list() - if(broken > 0) - dat += "This microwave is very broken. You'll need to fix it before you can use it again." - else if(operating) - dat += "Microwaving in progress!
      Please wait...!
      " - else if(dirtiness == 100) - dat += "This microwave is covered in muck. You'll need to wipe it down or clean it out before you can use it again." - else - playsound(loc, 'sound/machines/pda_click.ogg', 50, 1) - if (!LAZYLEN(ingredients) && !reagents.reagent_list.len) - dat += "The microwave is empty." - else - dat += "Ingredients:
      " - var/list/items_counts = new - var/list/items_measures = new - var/list/items_measures_p = new - for (var/obj/O in InsertedContents()) - var/display_name = O.name - if (istype(O,/obj/item/reagent_containers/food/snacks/egg)) - items_measures[display_name] = "egg" - items_measures_p[display_name] = "eggs" - if (istype(O,/obj/item/reagent_containers/food/snacks/tofu)) - items_measures[display_name] = "tofu chunk" - items_measures_p[display_name] = "tofu chunks" - if (istype(O,/obj/item/reagent_containers/food/snacks/meat)) //any meat - items_measures[display_name] = "slab of meat" - items_measures_p[display_name] = "slabs of meat" - if (istype(O,/obj/item/reagent_containers/food/snacks/donkpocket)) - display_name = "Turnovers" - items_measures[display_name] = "turnover" - items_measures_p[display_name] = "turnovers" - if (istype(O,/obj/item/reagent_containers/food/snacks/fish)) - items_measures[display_name] = "fillet of fish" - items_measures_p[display_name] = "fillets of fish" - items_counts[display_name]++ - for (var/O in items_counts) - var/N = items_counts[O] - if (!(O in items_measures)) - dat += "[capitalize(O)]: [N] [lowertext(O)]\s" - else - if (N==1) - dat += "[capitalize(O)]: [N] [items_measures[O]]" - else - dat += "[capitalize(O)]: [N] [items_measures_p[O]]" - - for (var/datum/reagent/R in reagents.reagent_list) - var/display_name = R.name - if (R.type == /datum/reagent/capsaicin) - display_name = "Hotsauce" - if (R.type == /datum/reagent/frostoil) - display_name = "Coldsauce" - dat += "[display_name]: [R.volume] unit\s" - - dat += "

      Turn on!
      Eject ingredients!" - - show_browser(user, "Microwave Controls[jointext(dat,"
      ")]
      ", "window=microwave") - onclose(user, "microwave") - return - - - -/*********************************** -* Microwave Menu Handling/Cooking -************************************/ - -/obj/machinery/microwave/proc/cook() - if(stat & (NOPOWER|BROKEN)) - return - start() - if (reagents.total_volume == 0 && !LAZYLEN(ingredients)) //dry run - if (!wzhzhzh(10)) - abort() - return - stop() - return - - var/datum/recipe/recipe = select_recipe(GLOB.microwave_recipes, src) - var/obj/cooked - if (!recipe) - dirtiness += 1 - if (prob(max(10, dirtiness * 5) / break_multiplier)) - if (!wzhzhzh(4)) - abort() - return - muck_start() - wzhzhzh(4) - muck_finish() - cooked = fail() - cooked.dropInto(loc) - return - else if (has_extra_item()) - if (!wzhzhzh(4)) - abort() - return - broke() - cooked = fail() - cooked.dropInto(loc) - return - else - if (!wzhzhzh(10)) - abort() - return - stop() - cooked = fail() - cooked.dropInto(loc) - return - else - var/halftime = round(recipe.time/10/2) - if (!wzhzhzh(halftime)) - abort() - return - if (!wzhzhzh(halftime)) - abort() - cooked = fail() - cooked.dropInto(loc) - return - cooked = recipe.make_food(src) - LAZYCLEARLIST(ingredients) - stop() - if(cooked) - cooked.dropInto(loc) - return - -// Behold: the worst proc name in the codebase. -/obj/machinery/microwave/proc/wzhzhzh(var/seconds) - for (var/i = 1 to seconds) - if (stat & (NOPOWER|BROKEN)) - return FALSE - use_power_oneoff(500 / power_efficiency) - sleep(10 / speed_multiplier) - return TRUE - -/obj/machinery/microwave/proc/has_extra_item() - for (var/obj/O in ingredients) // do not use src or contents unless you want to cook your own components - if (!istype(O, /obj/item/reagent_containers/food)) - return TRUE - return FALSE - -/obj/machinery/microwave/proc/start() - visible_message("The microwave turns on.", "You hear a microwave.") - operating = TRUE - updateUsrDialog() - update_icon() - -/obj/machinery/microwave/proc/abort() - operating = FALSE // Turn it off again aferwards - updateUsrDialog() - update_icon() - -/obj/machinery/microwave/proc/stop() - playsound(loc, 'sound/machines/ding.ogg', 50, 1) - operating = FALSE // Turn it off again aferwards - updateUsrDialog() - update_icon() - -/obj/machinery/microwave/proc/dispose() - var/disposed = FALSE - if (LAZYLEN(ingredients)) - for (var/obj/O in ingredients) - O.dropInto(loc) - LAZYCLEARLIST(ingredients) - disposed = TRUE - if (reagents?.total_volume) - reagents.clear_reagents() - ++dirtiness - disposed = TRUE - if (disposed) - to_chat(usr, "You dispose of the microwave contents.") - updateUsrDialog() - -/obj/machinery/microwave/proc/muck_start() - playsound(loc, 'sound/effects/splat.ogg', 50, 1) // Play a splat sound - update_icon() - -/obj/machinery/microwave/proc/muck_finish() - playsound(loc, 'sound/machines/ding.ogg', 50, 1) - visible_message("Muck splatters over the inside of \the [src]!") - dirtiness = 100 // Make it dirty so it can't be used util cleaned - obj_flags = null //So you can't add condiments - operating = FALSE // Turn it off again aferwards - updateUsrDialog() - update_icon() - -/obj/machinery/microwave/proc/broke() - var/datum/effect/effect/system/spark_spread/s = new - s.set_up(2, 1, src) - s.start() - if (prob(100 * break_multiplier)) - visible_message("\The [src] breaks!") //Let them know they're stupid - broken = 2 // Make it broken so it can't be used util fixed - obj_flags = null //So you can't add condiments - updateUsrDialog() - else - visible_message("\The [src] sputters and grinds to a halt!") - operating = FALSE // Turn it off again aferwards - update_icon() - -/obj/machinery/microwave/on_update_icon() - if(dirtiness == 100) - icon_state = "mwbloody[operating]" - else if(broken) - icon_state = "mwb" - else - icon_state = "mw[operating]" - -/obj/machinery/microwave/proc/fail() - var/amount = 0 - - // Kill + delete mobs in mob holders - for (var/obj/item/holder/H in ingredients) - for (var/mob/living/M in H.contents) - M.death() - qdel(M) - - for (var/obj/O in ingredients) - amount++ - if (O.reagents) - var/reagent_type = O.reagents.get_master_reagent_type() - if (reagent_type) - amount+=O.reagents.get_reagent_amount(reagent_type) - qdel(O) - - LAZYCLEARLIST(ingredients) - reagents.clear_reagents() - var/obj/item/reagent_containers/food/snacks/badrecipe/ffuu = new(src) - ffuu.reagents.add_reagent(/datum/reagent/carbon, amount) - ffuu.reagents.add_reagent(/datum/reagent/toxin, amount / 10) - return ffuu - -/obj/machinery/microwave/Topic(href, href_list) - if(..()) - return TRUE - - usr.set_machine(src) - if(operating) - updateUsrDialog() - return - - switch(href_list["action"]) - if ("cook") - playsound(loc, 'sound/machines/quiet_beep.ogg', 50, 1) - cook() - - if ("dispose") - dispose() diff --git a/code/game/machinery/kitchen/smartfridge.dm b/code/game/machinery/kitchen/smartfridge.dm deleted file mode 100644 index 123a943de9b10..0000000000000 --- a/code/game/machinery/kitchen/smartfridge.dm +++ /dev/null @@ -1,419 +0,0 @@ - -/* SmartFridge. Much todo -*/ -/obj/machinery/smartfridge - name = "\improper SmartFridge" - icon = 'icons/obj/vending.dmi' - icon_state = "fridge_sci" - layer = BELOW_OBJ_LAYER - density = TRUE - anchored = TRUE - idle_power_usage = 5 - active_power_usage = 100 - atom_flags = ATOM_FLAG_NO_TEMP_CHANGE | ATOM_FLAG_NO_REACT - obj_flags = OBJ_FLAG_ANCHORABLE | OBJ_FLAG_ROTATABLE - var/static/max_n_of_items = 999 // Sorry but the BYOND infinite loop detector doesn't look things over 1000. - var/icon_base = "fridge_sci" - var/icon_contents = "chem" - var/list/item_records = list() - var/datum/stored_items/currently_vending = null //What we're putting out of the machine. - var/seconds_electrified = 0; - var/shoot_inventory = 0 - var/locked = 0 - var/scan_id = 1 - var/is_secure = 0 - -/obj/machinery/smartfridge/secure - is_secure = 1 - -/obj/machinery/smartfridge/New() - ..() - if(is_secure) - wires = new/datum/wires/smartfridge/secure(src) - else - wires = new/datum/wires/smartfridge(src) - update_icon() - -/obj/machinery/smartfridge/Destroy() - for(var/datum/stored_items/S in item_records) - qdel(S) - item_records = null - return ..() - -/obj/machinery/smartfridge/get_req_access() - if(!scan_id) - return list() - return ..() - -/obj/machinery/smartfridge/proc/accept_check(var/obj/item/O as obj) - if(istype(O,/obj/item/reagent_containers/food/snacks/grown) || istype(O,/obj/item/seeds)) - return 1 - return 0 - -/obj/machinery/smartfridge/seeds - name = "\improper MegaSeed Servitor" - desc = "When you need seeds fast!" - -/obj/machinery/smartfridge/seeds/accept_check(var/obj/item/O as obj) - if(istype(O,/obj/item/seeds)) - return 1 - return 0 - -/obj/machinery/smartfridge/secure/extract - name = "\improper Slime Extract Storage" - desc = "A refrigerated storage unit for slime extracts." - icon_contents = "slime" - req_access = list(access_research) - -/obj/machinery/smartfridge/secure/extract/accept_check(var/obj/item/O as obj) - if(istype(O,/obj/item/slime_extract)) - return 1 - return 0 - -/obj/machinery/smartfridge/secure/medbay - name = "\improper Refrigerated Medicine Storage" - desc = "A refrigerated storage unit for storing medicine and chemicals." - icon_contents = "chem" - req_access = list(list(access_medical,access_chemistry)) - -/obj/machinery/smartfridge/secure/medbay/accept_check(var/obj/item/O as obj) - if(istype(O,/obj/item/reagent_containers/glass)) - return 1 - if(istype(O,/obj/item/storage/pill_bottle)) - return 1 - if(istype(O,/obj/item/reagent_containers/pill)) - return 1 - return 0 - -/obj/machinery/smartfridge/secure/virology - name = "\improper Refrigerated Virus Storage" - desc = "A refrigerated storage unit for storing viral material." - req_access = list(access_virology) - icon_contents = "chem" - -/obj/machinery/smartfridge/secure/virology/accept_check(var/obj/item/O as obj) - if(istype(O,/obj/item/reagent_containers/glass/beaker/vial)) - return 1 - return 0 - -/obj/machinery/smartfridge/chemistry - name = "\improper Smart Chemical Storage" - desc = "A refrigerated storage unit for medicine and chemical storage." - icon_contents = "chem" - -/obj/machinery/smartfridge/chemistry/accept_check(var/obj/item/O as obj) - if(istype(O,/obj/item/storage/pill_bottle) || istype(O,/obj/item/reagent_containers)) - return 1 - return 0 - -/obj/machinery/smartfridge/chemistry/virology - name = "\improper Smart Virus Storage" - desc = "A refrigerated storage unit for volatile sample storage." - - -/obj/machinery/smartfridge/drinks - name = "\improper Drink Showcase" - desc = "A refrigerated storage unit for tasty tasty alcohol." - icon_state = "fridge_dark" - icon_base = "fridge_dark" - icon_contents = "drink" - -/obj/machinery/smartfridge/drinks/accept_check(var/obj/item/O as obj) - if(istype(O,/obj/item/reagent_containers/glass) || istype(O,/obj/item/reagent_containers/food/drinks) || istype(O,/obj/item/reagent_containers/food/condiment)) - return 1 - -/obj/machinery/smartfridge/foods - name = "\improper Hot Foods Display" - desc = "A heated storage unit for piping hot meals." - icon_state = "fridge_food" - icon_state = "fridge_food" - icon_contents = "food" - -/obj/machinery/smartfridge/foods/accept_check(var/obj/item/O as obj) - if(istype(O,/obj/item/reagent_containers/food/snacks) || istype(O,/obj/item/material/kitchen/utensil)) - return 1 - -/obj/machinery/smartfridge/drying_rack - name = "drying rack" - desc = "A machine for drying plants." - icon_state = "drying_rack" - -/obj/machinery/smartfridge/drying_rack/accept_check(var/obj/item/O as obj) - if(istype(O, /obj/item/reagent_containers/food/snacks)) - var/obj/item/reagent_containers/food/snacks/S = O - return S.dried_type - else if(istype(O, /obj/item/stack/material)) - var/obj/item/stack/material/mat = O - var/material/skin/skin_mat = mat.material - return istype(skin_mat) - return 0 - -/obj/machinery/smartfridge/drying_rack/Process() - ..() - if(inoperable()) - return - if(contents.len) - dry() - update_icon() - -/obj/machinery/smartfridge/drying_rack/on_update_icon() - overlays.Cut() - if(inoperable()) - if(contents.len) - icon_state = "drying_rack-plant-off" - else - icon_state = "drying_rack-off" - else - icon_state = "drying_rack" - if(contents.len) - icon_state = "drying_rack-plant" - if(!inoperable()) - icon_state = "drying_rack-close" - -/obj/machinery/smartfridge/drying_rack/proc/dry() - for(var/datum/stored_items/I in item_records) - for(var/thing in I.instances) - var/remove_thing = FALSE - if(istype(thing, /obj/item/reagent_containers/food/snacks)) - var/obj/item/reagent_containers/food/snacks/S = thing - if(S.dry || !I.get_specific_product(get_turf(src), S)) - continue - if(S.dried_type == S.type) - S.dry = 1 - S.SetName("dried [S.name]") - S.color = "#a38463" - stock_item(S) - I.instances -= thing - I.amount-- - else - var/D = S.dried_type - new D(get_turf(src)) - remove_thing = TRUE - - else if(istype(thing, /obj/item/stack/material)) - var/obj/item/stack/material/skin = thing - if(!istype(skin.material, /material/skin)) - continue - var/material/skin/skin_mat = skin.material - if(!skin_mat.tans_to) - continue - var/material/leather_mat = SSmaterials.get_material_by_name(skin_mat.tans_to) - stock_item(new leather_mat.stack_type(get_turf(src), skin.amount, skin_mat.tans_to)) - remove_thing = TRUE - - if(remove_thing) - I.instances -= thing - I.amount-- - qdel(thing) - return - - -/obj/machinery/smartfridge/Process() - if(stat & (BROKEN|NOPOWER)) - return - if(src.seconds_electrified > 0) - src.seconds_electrified-- - if(src.shoot_inventory && prob(2)) - src.throw_item() - -/obj/machinery/smartfridge/on_update_icon() - overlays.Cut() - if(stat & (BROKEN|NOPOWER)) - icon_state = "[icon_base]-off" - else - icon_state = icon_base - - if(is_secure) - overlays += image(icon, "[icon_base]-sidepanel") - - if(panel_open) - overlays += image(icon, "[icon_base]-panel") - - var/image/I - var/is_off = "" - if(inoperable()) - is_off = "-off" - - // Fridge contents - switch(contents.len) - if(0) - I = image(icon, "empty[is_off]") - if(1 to 2) - I = image(icon, "[icon_contents]-1[is_off]") - if(3 to 5) - I = image(icon, "[icon_contents]-2[is_off]") - if(6 to 8) - I = image(icon, "[icon_contents]-3[is_off]") - else - I = image(icon, "[icon_contents]-4[is_off]") - overlays += I - - // Fridge top - I = image(icon, "[icon_base]-top") - I.pixel_z = 32 - I.layer = ABOVE_WINDOW_LAYER - overlays += I - -/******************* -* Item Adding -********************/ - -/obj/machinery/smartfridge/attackby(var/obj/item/O as obj, var/mob/user as mob) - if(isScrewdriver(O)) - panel_open = !panel_open - user.visible_message("[user] [panel_open ? "opens" : "closes"] the maintenance panel of \the [src].", "You [panel_open ? "open" : "close"] the maintenance panel of \the [src].") - update_icon() - SSnano.update_uis(src) - return - - if(isMultitool(O) || isWirecutter(O)) - if(panel_open) - attack_hand(user) - return - - if(stat & NOPOWER) - to_chat(user, "\The [src] is unpowered and useless.") - return - - if(accept_check(O)) - if(!user.unEquip(O)) - return - stock_item(O) - user.visible_message("\The [user] has added \the [O] to \the [src].", "You add \the [O] to \the [src].") - update_icon() - - else if(istype(O, /obj/item/storage)) - var/obj/item/storage/bag/P = O - var/plants_loaded = 0 - for(var/obj/G in P.contents) - if(accept_check(G) && P.remove_from_storage(G, src, 1)) - plants_loaded++ - stock_item(G) - P.finish_bulk_removal() - - if(plants_loaded) - user.visible_message("\The [user] loads \the [src] with the contents of \the [P].", "You load \the [src] with the contents of \the [P].") - if(P.contents.len > 0) - to_chat(user, "Some items were refused.") - - else if ((obj_flags & OBJ_FLAG_ANCHORABLE) && isWrench(O)) - wrench_floor_bolts(user) - power_change() - - else - to_chat(user, "\The [src] smartly refuses [O].") - return 1 - -/obj/machinery/smartfridge/secure/emag_act(var/remaining_charges, var/mob/user) - if(!emagged) - emagged = TRUE - locked = -1 - req_access.Cut() - to_chat(user, "You short out the product lock on [src].") - return 1 - -/obj/machinery/smartfridge/proc/stock_item(var/obj/item/O) - for(var/datum/stored_items/I in item_records) - if(istype(O, I.item_path) && O.name == I.item_name) - stock(I, O) - return - - var/datum/stored_items/I = new/datum/stored_items(src, O.type, O.name) - dd_insertObjectList(item_records, I) - stock(I, O) - -/obj/machinery/smartfridge/proc/stock(var/datum/stored_items/I, var/obj/item/O) - I.add_product(O) - SSnano.update_uis(src) - -/obj/machinery/smartfridge/interface_interact(mob/user) - ui_interact(user) - return TRUE - -/******************* -* SmartFridge Menu -********************/ - -/obj/machinery/smartfridge/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1) - user.set_machine(src) - - var/data[0] - data["contents"] = null - data["electrified"] = seconds_electrified > 0 - data["shoot_inventory"] = shoot_inventory - data["locked"] = locked - data["secure"] = is_secure - - var/list/items[0] - for (var/i=1 to length(item_records)) - var/datum/stored_items/I = item_records[i] - var/count = I.get_amount() - if(count > 0) - items.Add(list(list("display_name" = html_encode(capitalize(I.item_name)), "vend" = i, "quantity" = count))) - - if(items.len > 0) - data["contents"] = items - - ui = SSnano.try_update_ui(user, src, ui_key, ui, data, force_open) - if(!ui) - ui = new(user, src, ui_key, "smartfridge.tmpl", src.name, 400, 500) - ui.set_initial_data(data) - ui.open() - -/obj/machinery/smartfridge/Topic(href, href_list) - if(..()) return 0 - - var/mob/user = usr - var/datum/nanoui/ui = SSnano.get_open_ui(user, src, "main") - - if(href_list["close"]) - user.unset_machine() - ui.close() - return 0 - - if(href_list["vend"]) - var/index = text2num(href_list["vend"]) - var/amount = text2num(href_list["amount"]) - var/datum/stored_items/I = item_records[index] - var/count = I.get_amount() - - // Sanity check, there are probably ways to press the button when it shouldn't be possible. - if(count > 0) - if((count - amount) < 0) - amount = count - for(var/i = 1 to amount) - I.get_product(get_turf(src)) - update_icon() - - return 1 - return 0 - -/obj/machinery/smartfridge/proc/throw_item() - var/obj/throw_item = null - var/mob/living/target = locate() in view(7,src) - if(!target) - return 0 - - for(var/datum/stored_items/I in src.item_records) - throw_item = I.get_product(loc) - if (!throw_item) - continue - break - - if(!throw_item) - return 0 - spawn(0) - throw_item.throw_at(target,16,3) - src.visible_message("[src] launches [throw_item.name] at [target.name]!") - update_icon() - return 1 - -/************************ -* Secure SmartFridges -*************************/ - -/obj/machinery/smartfridge/secure/CanUseTopic(mob/user, datum/topic_state/state, href_list) - if(!allowed(user) && !emagged && locked != -1 && href_list && href_list["vend"] && scan_id) - to_chat(user, "Access denied.") - return STATUS_CLOSE - return ..() diff --git a/code/game/machinery/lightswitch.dm b/code/game/machinery/lightswitch.dm deleted file mode 100644 index d7e20be8b2178..0000000000000 --- a/code/game/machinery/lightswitch.dm +++ /dev/null @@ -1,89 +0,0 @@ -// the light switch -// can have multiple per area -// can also operate on non-loc area through "otherarea" var -/obj/machinery/light_switch - name = "light switch" - desc = "It turns lights on and off. What are you, simple?" - icon = 'icons/obj/power.dmi' - icon_state = "light0" - anchored = TRUE - idle_power_usage = 20 - power_channel = LIGHT - var/on = 0 - var/area/connected_area = null - var/other_area = null - var/image/overlay - -/obj/machinery/light_switch/Initialize() - . = ..() - if(other_area) - src.connected_area = locate(other_area) - else - src.connected_area = get_area(src) - - if(name == initial(name)) - SetName("light switch ([connected_area.name])") - - connected_area.set_lightswitch(on) - update_icon() - -/obj/machinery/light_switch/on_update_icon() - if(!overlay) - overlay = image(icon, "light1-overlay") - overlay.plane = EFFECTS_ABOVE_LIGHTING_PLANE - overlay.layer = ABOVE_LIGHTING_LAYER - - overlays.Cut() - if(stat & (NOPOWER|BROKEN)) - icon_state = "light-p" - set_light(0) - else - icon_state = "light[on]" - overlay.icon_state = "light[on]-overlay" - overlays += overlay - set_light(0.1, 0.1, 1, 2, on ? "#82ff4c" : "#f86060") - -/obj/machinery/light_switch/examine(mob/user, distance) - . = ..() - if(distance) - to_chat(user, "A light switch. It is [on? "on" : "off"].") - -/obj/machinery/light_switch/proc/set_state(var/newstate) - if(on != newstate) - on = newstate - connected_area.set_lightswitch(on) - update_icon() - -/obj/machinery/light_switch/proc/sync_state() - if(connected_area && on != connected_area.lightswitch) - on = connected_area.lightswitch - update_icon() - return 1 - -/obj/machinery/light_switch/interface_interact(mob/user) - if(CanInteract(user, DefaultTopicState())) - playsound(src, "switch", 30) - set_state(!on) - return TRUE - -/obj/machinery/light_switch/attackby(obj/item/tool as obj, mob/user as mob) - if(istype(tool, /obj/item/screwdriver)) - new /obj/item/frame/light_switch(user.loc, 1) - qdel(src) - - -/obj/machinery/light_switch/powered() - . = ..(power_channel, connected_area) //tie our powered status to the connected area - -/obj/machinery/light_switch/power_change() - . = ..() - //synch ourselves to the new state - if(connected_area) //If an APC initializes before we do it will force a power_change() before we can get our connected area - sync_state() - -/obj/machinery/light_switch/emp_act(severity) - if(stat & (BROKEN|NOPOWER)) - ..(severity) - return - power_change() - ..(severity) diff --git a/code/game/machinery/mass_driver.dm b/code/game/machinery/mass_driver.dm deleted file mode 100644 index 48aaae49e03ab..0000000000000 --- a/code/game/machinery/mass_driver.dm +++ /dev/null @@ -1,81 +0,0 @@ -//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:31 - -/obj/machinery/mass_driver - name = "mass driver" - desc = "Shoots things into space." - icon = 'icons/obj/stationobjs.dmi' - icon_state = "mass_driver" - anchored = TRUE - idle_power_usage = 2 - active_power_usage = 50 - - var/power = 1.0 - var/code = 1.0 - var/drive_range = 50 //this is mostly irrelevant since current mass drivers throw into space, but you could make a lower-range mass driver for interstation transport or something I guess. - - uncreated_component_parts = list( - /obj/item/stock_parts/radio/receiver, - /obj/item/stock_parts/power/apc - ) - public_methods = list( - /decl/public_access/public_method/driver_drive, - /decl/public_access/public_method/driver_drive_delayed - ) - stock_part_presets = list(/decl/stock_part_preset/radio/receiver/driver = 1) - -/obj/machinery/mass_driver/proc/drive(amount) - if(stat & (BROKEN|NOPOWER)) - return - use_power_oneoff(500) - var/O_limit - var/atom/target = get_edge_target_turf(src, dir) - for(var/atom/movable/O in loc) - if(!O.anchored) - O_limit++ - if(O_limit >= 20) - for(var/mob/M in hearers(src, null)) - to_chat(M, "The mass driver lets out a screech, it mustn't be able to handle any more items.") - break - use_power_oneoff(500) - spawn( 0 ) - O.throw_at(target, drive_range * power, power) - flick("mass_driver1", src) - return - -/obj/machinery/mass_driver/emp_act(severity) - if(stat & (BROKEN|NOPOWER)) - return - drive() - ..(severity) - -// This is activated by buttons. Delay is to let doors open/close. -/obj/machinery/mass_driver/proc/delayed_drive() - set waitfor = FALSE - sleep(2 SECONDS) - drive() - -/decl/public_access/public_method/driver_drive - name = "launch" - desc = "Makes the mass driver launch immediately." - call_proc = /obj/machinery/mass_driver/proc/drive - -/decl/public_access/public_method/driver_drive_delayed - name = "delayed launch" - desc = "Makes the mass driver launch after a short delay." - call_proc = /obj/machinery/mass_driver/proc/delayed_drive - -/decl/stock_part_preset/radio/receiver/driver - frequency = BLAST_DOORS_FREQ - receive_and_call = list("button_active" = /decl/public_access/public_method/driver_drive_delayed) - -/obj/machinery/button/mass_driver - cooldown = 10 SECONDS // Whole thing with the doors takes a while. - stock_part_presets = list(/decl/stock_part_preset/radio/basic_transmitter/driver_button = 1) - -/decl/stock_part_preset/radio/basic_transmitter/driver_button - transmit_on_change = list( - "open_door" = /decl/public_access/public_variable/button_active, - "button_active" = /decl/public_access/public_variable/button_active, - "close_door_delayed" = /decl/public_access/public_variable/button_active - ) - frequency = BLAST_DOORS_FREQ \ No newline at end of file diff --git a/code/game/machinery/mech_recharger.dm b/code/game/machinery/mech_recharger.dm deleted file mode 100644 index 50e6ae1d6634f..0000000000000 --- a/code/game/machinery/mech_recharger.dm +++ /dev/null @@ -1,108 +0,0 @@ -/obj/machinery/mech_recharger - name = "exosuit dock" - desc = "A exosuit recharger, built into the floor." - icon = 'icons/mecha/mech_bay.dmi' - icon_state = "recharge_floor" - density = FALSE - layer = ABOVE_TILE_LAYER - anchored = TRUE - idle_power_usage = 200 // Some electronics, passive drain. - active_power_usage = 60 KILOWATTS // When charging - base_type = /obj/machinery/mech_recharger - construct_state = /decl/machine_construction/default/panel_closed - uncreated_component_parts = null - stat_immune = 0 - - machine_name = "exosuit dock" - machine_desc = "An industrial recharger built into the floor. Exosuits standing on top of the dock will have their power cell recharged." - - var/mob/living/exosuit/charging - var/base_charge_rate = 80 KILOWATTS - var/repair_power_usage = 10 KILOWATTS // Per 1 HP of health. - var/repair = 0 - -/obj/machinery/mech_recharger/Crossed(var/mob/living/exosuit/M) - . = ..() - if(istype(M) && charging != M) - start_charging(M) - -/obj/machinery/mech_recharger/Uncrossed(var/mob/living/exosuit/M) - . = ..() - if(M == charging) - stop_charging() - -/obj/machinery/mech_recharger/RefreshParts() - ..() - // Calculates an average rating of components that affect charging rate. - var/chargerate_multiplier = total_component_rating_of_type(/obj/item/stock_parts/capacitor) - chargerate_multiplier += total_component_rating_of_type(/obj/item/stock_parts/scanning_module) - - var/chargerate_divisor = number_of_components(/obj/item/stock_parts/capacitor) - chargerate_divisor += number_of_components(/obj/item/stock_parts/scanning_module) - - repair = -5 - repair += 2 * total_component_rating_of_type(/obj/item/stock_parts/manipulator) - repair += total_component_rating_of_type(/obj/item/stock_parts/scanning_module) - - if(chargerate_multiplier) - change_power_consumption(base_charge_rate * (chargerate_multiplier / chargerate_divisor), POWER_USE_ACTIVE) - else - change_power_consumption(base_charge_rate, POWER_USE_ACTIVE) - -/obj/machinery/mech_recharger/Process() - if(!charging) - update_use_power(POWER_USE_IDLE) - return - if(charging.loc != loc) - stop_charging() - return - - if(stat & (BROKEN|NOPOWER)) - charging.show_message(SPAN_WARNING("Internal system Error - Charging aborted.")) - stop_charging() - return - - // Cell could have been removed. - if(!charging.get_cell(TRUE)) - stop_charging() - return - - var/remaining_energy = active_power_usage - - if(repair && !fully_repaired()) - for(var/obj/item/mech_component/MC in charging) - if(MC) - MC.repair_brute_damage(repair) - MC.repair_burn_damage(repair) - remaining_energy -= repair * repair_power_usage - if(remaining_energy <= 0) - break - charging.updatehealth() - if(fully_repaired()) - charging.show_message(SPAN_NOTICE("Exosuit integrity has been fully restored.")) - - var/obj/item/cell/cell = charging.get_cell(TRUE) - if(cell && !cell.fully_charged() && remaining_energy > 0) - cell.give(remaining_energy * CELLRATE) - if(cell.fully_charged()) - charging.show_message(SPAN_NOTICE("Exosuit power reserves are at maximum.")) - - if((!repair || fully_repaired()) && cell.fully_charged()) - stop_charging() - -// An ugly proc, but apparently mechs don't have maxhealth var of any kind. -/obj/machinery/mech_recharger/proc/fully_repaired() - return charging && (charging.health == charging.maxHealth) - -/obj/machinery/mech_recharger/proc/start_charging(var/mob/living/exosuit/M) - if(stat & (NOPOWER | BROKEN)) - M.show_message(SPAN_WARNING("Power port not responding. Terminating.")) - return - if(M.get_cell(TRUE)) - M.show_message(SPAN_NOTICE("Now charging...")) - charging = M - update_use_power(POWER_USE_ACTIVE) - -/obj/machinery/mech_recharger/proc/stop_charging() - update_use_power(POWER_USE_IDLE) - charging = null diff --git a/code/game/machinery/navbeacon.dm b/code/game/machinery/navbeacon.dm deleted file mode 100644 index 9111405176642..0000000000000 --- a/code/game/machinery/navbeacon.dm +++ /dev/null @@ -1,373 +0,0 @@ -var/global/list/navbeacons = list() - -/obj/machinery/navbeacon - icon = 'icons/obj/objects.dmi' - icon_state = "navbeacon0-f" - name = "navigation beacon" - desc = "A radio beacon used for bot navigation." - level = 1 - layer = ABOVE_WIRE_LAYER - anchored = TRUE - - var/open = 0 // true if cover is open - var/locked = 1 // true if controls are locked - var/location = "" // location response text - var/list/codes = list() // assoc. list of transponder codes - - req_access = list(access_engine) - -/obj/machinery/navbeacon/New() - ..() - - var/turf/T = loc - hide(!T.is_plating()) - - navbeacons += src - -/obj/machinery/navbeacon/hide(var/intact) - set_invisibility(intact ? 101 : 0) - update_icon() - -/obj/machinery/navbeacon/on_update_icon() - var/state="navbeacon[open]" - - if(invisibility) - icon_state = "[state]-f" // if invisible, set icon to faded version - // in case revealed by T-scanner - else - icon_state = "[state]" - -/obj/machinery/navbeacon/attackby(var/obj/item/I, var/mob/user) - var/turf/T = loc - if(!T.is_plating()) - return // prevent intraction when T-scanner revealed - - if(isScrewdriver(I)) - open = !open - - user.visible_message("\The [user] [open ? "opens" : "closes"] cover of \the [src].", "You [open ? "open" : "close"] cover of \the [src].") - - update_icon() - - else if(I.GetIdCard()) - if(open) - if (src.allowed(user)) - src.locked = !src.locked - to_chat(user, "Controls are now [src.locked ? "locked." : "unlocked."]") - else - to_chat(user, "Access denied.") - updateDialog() - else - to_chat(user, "You must open the cover first!") - return - -/obj/machinery/navbeacon/interface_interact(var/mob/user) - interact(user) - return TRUE - -/obj/machinery/navbeacon/interact(var/mob/user) - var/ai = isAI(user) - var/turf/T = loc - if(!T.is_plating()) - return // prevent intraction when T-scanner revealed - - if(!open && !ai) // can't alter controls if not open, unless you're an AI - to_chat(user, "The beacon's control cover is closed.") - return - - var/t - - if(locked && !ai) - t = {"Navigation Beacon

      -(swipe card to unlock controls)

      -Location: [location ? location : "(none)"]

      -Transponder Codes:
        "} - - for(var/key in codes) - t += "
      • [key] ... [codes[key]]" - t+= "
          " - - else - - t = {"Navigation Beacon

          -(swipe card to lock controls)

          -Location: [location ? location : "(none)"]
          -Transponder Codes:
            "} - - for(var/key in codes) - t += "
          • [key] ... [codes[key]]" - t += " (edit)" - t += " (delete)
            " - t += "(add new)
            " - t+= "
              " - - show_browser(user, t, "window=navbeacon") - onclose(user, "navbeacon") - return - -/obj/machinery/navbeacon/Topic(href, href_list) - ..() - if (usr.stat) - return - if ((in_range(src, usr) && istype(src.loc, /turf)) || (istype(usr, /mob/living/silicon))) - if(open && !locked) - usr.set_machine(src) - - if(href_list["locedit"]) - var/newloc = sanitize(input("Enter New Location", "Navigation Beacon", location) as text|null) - if(newloc) - location = newloc - updateDialog() - - else if(href_list["edit"]) - var/codekey = href_list["code"] - - var/newkey = input("Enter Transponder Code Key", "Navigation Beacon", codekey) as text|null - if(!newkey) - return - - var/codeval = codes[codekey] - var/newval = input("Enter Transponder Code Value", "Navigation Beacon", codeval) as text|null - if(!newval) - newval = codekey - return - - codes.Remove(codekey) - codes[newkey] = newval - - updateDialog() - - else if(href_list["delete"]) - var/codekey = href_list["code"] - codes.Remove(codekey) - updateDialog() - - else if(href_list["add"]) - - var/newkey = input("Enter New Transponder Code Key", "Navigation Beacon") as text|null - if(!newkey) - return - - var/newval = input("Enter New Transponder Code Value", "Navigation Beacon") as text|null - if(!newval) - newval = "1" - return - - if(!codes) - codes = new() - - codes[newkey] = newval - - updateDialog() - -/obj/machinery/navbeacon/Destroy() - navbeacons.Remove(src) - ..() - -// Patrol beacon types below. So many. - -/obj/machinery/navbeacon/Security - location = "Security" - codes = list("patrol" = 1, "next_patrol" = "EVA") - -/obj/machinery/navbeacon/EVA - location = "EVA" - codes = list("patrol" = 1, "next_patrol" = "Lockers") - -/obj/machinery/navbeacon/Lockers - location = "Lockers" - codes = list("patrol" = 1, "next_patrol" = "CHW") - -/obj/machinery/navbeacon/CHW - location = "CHW" - codes = list("patrol" = 1, "next_patrol" = "QM") - -/obj/machinery/navbeacon/QM - location = "QM" - codes = list("patrol" = 1, "next_patrol" = "AIW") - -/obj/machinery/navbeacon/AIW - location = "AIW" - codes = list("patrol" = 1, "next_patrol" = "AftH") - -/obj/machinery/navbeacon/AftH - location = "AftH" - codes = list("patrol" = 1, "next_patrol" = "AIE") - -/obj/machinery/navbeacon/AIE - location = "AIE" - codes = list("patrol" = 1, "next_patrol" = "CHE") - -/obj/machinery/navbeacon/CHE - location = "CHE" - codes = list("patrol" = 1, "next_patrol" = "HOP") - -/obj/machinery/navbeacon/HOP - location = "HOP" - codes = list("patrol" = 1, "next_patrol" = "Stbd") - -/obj/machinery/navbeacon/Stbd - location = "Stbd" - codes = list("patrol" = 1, "next_patrol" = "HOP2") - -/obj/machinery/navbeacon/HOP2 - location = "HOP2" - codes = list("patrol" = 1, "next_patrol" = "Dorm") - -/obj/machinery/navbeacon/Dorm - location = "Dorm" - codes = list("patrol" = 1, "next_patrol" = "EVA2") - -/obj/machinery/navbeacon/EVA2 - location = "EVA2" - codes = list("patrol" = 1, "next_patrol" = "Security") // And the cycle is finished - -// Delivery types below. - -/obj/machinery/navbeacon/QM1 - location = "QM #1" - codes = list("delivery" = 1, "dir" = 8) - -/obj/machinery/navbeacon/QM2 - location = "QM #2" - codes = list("delivery" = 1, "dir" = 8) - -/obj/machinery/navbeacon/QM3 - location = "QM #3" - codes = list("delivery" = 1, "dir" = 8) - -/obj/machinery/navbeacon/QM4 - location = "QM #4" - codes = list("delivery" = 1, "dir" = 8) - -/obj/machinery/navbeacon/Research - location = "Research Division" - codes = list("delivery" = 1, "dir" = 8) - -/obj/machinery/navbeacon/Janitor - location = "Janitor" - codes = list("delivery" = 1, "dir" = 8) - -/obj/machinery/navbeacon/SecurityD - location = "Security" - codes = list("delivery" = 1, "dir" = 8) - -/obj/machinery/navbeacon/ToolStorage - location = "Tool Storage" - codes = list("delivery" = 1, "dir" = 8) - -/obj/machinery/navbeacon/Medbay - location = "Medbay" - codes = list("delivery" = 1, "dir" = 4) - -/obj/machinery/navbeacon/Engineering - location = "Engineering" - codes = list("delivery" = 1, "dir" = 4) - -/obj/machinery/navbeacon/Bar - location = "Bar" - codes = list("delivery" = 1, "dir" = 2) - -/obj/machinery/navbeacon/Kitchen - location = "Kitchen" - codes = list("delivery" = 1, "dir" = 2) - -/obj/machinery/navbeacon/Hydroponics - location = "Hydroponics" - codes = list("delivery" = 1, "dir" = 2) - -// Torch types below - -/obj/machinery/navbeacon/torch/bridge1 - location = "bridge1" - codes = list("patrol" = 1, "next_patrol" = "bridge2") - -/obj/machinery/navbeacon/torch/FDforehallway3 - location = "FDforehallway3" - codes = list("patrol" = 1, "next_patrol" = "FDforehallway4") - -/obj/machinery/navbeacon/torch/FDforehallway4 - location = "FDforehallway4" - codes = list("patrol" = 1, "next_patrol" = "FDelevator2") - -/obj/machinery/navbeacon/torch/FDelevator2 - location = "FDelevator2" - codes = list("patrol" = 1, "next_patrol" = "Supply") - -/obj/machinery/navbeacon/torch/Supply - location = "Supply" - codes = list("patrol" = 1, "next_patrol" = "FDelevator") - -/obj/machinery/navbeacon/torch/FDelevator - location = "FDelevator" - codes = list("patrol" = 1, "next_patrol" = "FDforehallway1") - -/obj/machinery/navbeacon/torch/FDforehallway1 - location = "FDforehallway1" - codes = list("patrol" = 1, "next_patrol" = "FDforehallway2") - -/obj/machinery/navbeacon/torch/telecomms - location = "telecomms" - codes = list("patrol" = 1, "next_patrol" = "briefingroom2") - -/obj/machinery/navbeacon/torch/aiupload2 - location = "aiupload2" - codes = list("patrol" = 1, "next_patrol" = "brig") - -/obj/machinery/navbeacon/torch/brig - location = "brig" - codes = list("patrol" = 1, "next_patrol" = "aiupload") - -/obj/machinery/navbeacon/torch/aiupload - location = "aiupload" - codes = list("patrol" = 1, "next_patrol" = "forehallway") - -/obj/machinery/navbeacon/torch/briefingroom2 - location = "briefingroom2" - codes = list("patrol" = 1, "next_patrol" = "forehallway2") - -/obj/machinery/navbeacon/torch/forehallway2 - location = "forehallway2" - codes = list("patrol" = 1, "next_patrol" = "aiupload2") - -/obj/machinery/navbeacon/torch/briefingroom - location = "briefingroom" - codes = list("patrol" = 1, "next_patrol" = "telecomms") - -/obj/machinery/navbeacon/torch/forehallway - location = "forehallway" - codes = list("patrol" = 1, "next_patrol" = "briefingroom") - -/obj/machinery/navbeacon/torch/bridge1 - location = "bridge1" - codes = list("patrol" = 1, "next_patrol" = "bridge2") - -/obj/machinery/navbeacon/torch/bridge2 - location = "bridge2" - codes = list("patrol" = 1, "next_patrol" = "rdoffice") - -/obj/machinery/navbeacon/torch/vault2 - location = "vault2" - codes = list("patrol" = 1, "next_patrol" = "medical") - -/obj/machinery/navbeacon/torch/vault1 - location = "vault1" - codes = list("patrol" = 1, "next_patrol" = "xooffice") - -/obj/machinery/navbeacon/torch/medical - location = "medical" - codes = list("patrol" = 1, "next_patrol" = "vault1") - -/obj/machinery/navbeacon/torch/bridge2 - location = "bridge2" - codes = list("patrol" = 1, "next_patrol" = "rdoffice") - -/obj/machinery/navbeacon/torch/rdoffice - location = "rdoffice" - codes = list("patrol" = 1, "next_patrol" = "vault2") - -// Torch delivery types - -/obj/machinery/navbeacon/torch/QM3 - location = "QM #3" - codes = list("delivery" = 1) \ No newline at end of file diff --git a/code/game/machinery/newscaster.dm b/code/game/machinery/newscaster.dm deleted file mode 100644 index 8d550bf41e0f4..0000000000000 --- a/code/game/machinery/newscaster.dm +++ /dev/null @@ -1,972 +0,0 @@ -//############################################## -//################### NEWSCASTERS BE HERE! #### -//###-Agouri################################### - -/datum/feed_message - var/author ="" - var/body ="" - var/message_type ="Story" - var/datum/feed_channel/parent_channel - var/is_admin_message = 0 - var/icon/img = null - var/icon/caption = "" - var/time_stamp = "" - var/backup_body = "" - var/backup_author = "" - var/icon/backup_img = null - var/icon/backup_caption = "" - -/datum/feed_channel - var/channel_name="" - var/list/datum/feed_message/messages = list() - var/locked=0 - var/author="" - var/backup_author="" - var/views=0 - var/censored=0 - var/is_admin_channel=0 - var/updated = 0 - var/announcement = "" - - -/datum/feed_message/proc/clear() - src.author = "" - src.body = "" - src.caption = "" - src.img = null - src.time_stamp = "" - src.backup_body = "" - src.backup_author = "" - src.backup_caption = "" - src.backup_img = null - parent_channel.update() - -/datum/feed_channel/proc/update() - updated = world.time - -/datum/feed_channel/proc/clear() - src.channel_name = "" - src.messages = list() - src.locked = 0 - src.author = "" - src.backup_author = "" - src.censored = 0 - src.is_admin_channel = 0 - src.announcement = "" - update() -/datum/feed_network - var/list/datum/feed_channel/network_channels = list() - var/datum/feed_message/wanted_issue - var/list/newscasters = list() - var/list/news_programs = list() - var/list/z_levels = list() - -/datum/feed_network/New() - CreateFeedChannel("Announcements", "SS13", 1, 1, "New Announcement Available") - -/datum/feed_network/proc/CreateFeedChannel(channel_name, author, locked, adminChannel = 0, announcement_message) - var/datum/feed_channel/newChannel = new /datum/feed_channel - newChannel.channel_name = channel_name - newChannel.author = author - newChannel.locked = locked - newChannel.is_admin_channel = adminChannel - if(announcement_message) - newChannel.announcement = announcement_message - else - newChannel.announcement = "Breaking news from [channel_name]!" - network_channels += newChannel - -/datum/feed_network/proc/SubmitArticle(msg, author, channel_name, obj/item/photo/photo, adminMessage = 0, message_type = "") - var/datum/feed_message/newMsg = new /datum/feed_message - newMsg.author = author - newMsg.body = msg - newMsg.time_stamp = "[stationtime2text()]" - newMsg.is_admin_message = adminMessage - if(message_type) - newMsg.message_type = message_type - if(photo) - newMsg.img = photo.img - newMsg.caption = photo.scribble - for(var/datum/feed_channel/FC in network_channels) - if(FC.channel_name == channel_name) - insert_message_in_channel(FC, newMsg) //Adding message to the network's appropriate feed_channel - break - -/datum/feed_network/proc/insert_message_in_channel(datum/feed_channel/FC, datum/feed_message/newMsg) - FC.messages += newMsg - if(newMsg.img) - register_asset("newscaster_photo_[sanitize(FC.channel_name)]_[FC.messages.len].png", newMsg.img) - newMsg.parent_channel = FC - FC.update() - alert_readers(FC.announcement) - -/datum/feed_network/proc/alert_readers(annoncement) - for(var/obj/machinery/newscaster/NEWSCASTER in newscasters) - NEWSCASTER.newsAlert(annoncement) - NEWSCASTER.update_icon() - for(var/datum/nano_module/program/newscast/program in news_programs) - program.news_alert(annoncement) - -var/global/list/datum/feed_network/news_network = list() //The global news-network, which is coincidentally a global list. - -var/global/list/obj/machinery/newscaster/allCasters = list() //Global list that will contain reference to all newscasters in existence. - - -/obj/machinery/newscaster - name = "newscaster" - desc = "A standard newsfeed handler. All the news you absolutely have no use for, in one place!" - icon = 'icons/obj/terminals.dmi' - icon_state = "newscaster_normal" - //var/list/datum/feed_channel/channel_list = list() //This list will contain the names of the feed channels. Each name will refer to a data region where the messages of the feed channels are stored. - var/screen = 0 - // 0 = welcome screen - main menu - // 1 = view feed channels - // 2 = create feed channel - // 3 = create feed story - // 4 = feed story submited sucessfully - // 5 = feed channel created successfully - // 6 = ERROR: Cannot create feed story - // 7 = ERROR: Cannot create feed channel - // 8 = print newspaper - // 9 = viewing channel feeds - // 10 = censor feed story - // 11 = censor feed channel - //Holy shit this is outdated, made this when I was still starting newscasters :3 - var/paper_remaining = 0 - var/securityCaster = 0 - // 0 = Caster cannot be used to issue wanted posters - // 1 = the opposite - var/unit_no = 0 //Each newscaster has a unit number - //var/datum/feed_message/wanted //We're gonna use a feed_message to store data of the wanted person because fields are similar - //var/wanted_issue = 0 //OBSOLETE - // 0 = there's no WANTED issued, we don't need a special icon_state - // 1 = Guess what. - var/alert_delay = 500 - var/alert = 0 - // 0 = there hasn't been a news/wanted update in the last alert_delay - // 1 = there has - var/scanned_user = "Unknown" //Will contain the name of the person who currently uses the newscaster - var/msg = ""; //Feed message - var/datum/news_photo/photo_data = null - var/channel_name = ""; //the feed channel which will be receiving the feed, or being created - var/c_locked=0; //Will our new channel be locked to public submissions? - var/hitstaken = 0 //Death at 3 hits from an item with force>=15 - var/datum/feed_channel/viewing_channel = null - var/datum/feed_network/connected_group - light_outer_range = 0 - anchored = TRUE - layer = ABOVE_WINDOW_LAYER - -/obj/machinery/newscaster/security_unit - name = "Security Newscaster" - securityCaster = 1 - -/obj/machinery/newscaster/Initialize() - . = ..() - - for (var/datum/feed_network/G in news_network) - if (src.z in G.z_levels) - G.newscasters += src - connected_group = G - - break - - if (!connected_group) - var/datum/feed_network/G = new /datum/feed_network - G.newscasters += src - G.z_levels = GetConnectedZlevels(src.z) - - connected_group = G - LAZYADD(news_network, G) - - src.paper_remaining = 15 // Will probably change this to something better - for (var/obj/machinery/newscaster/NEWSCASTER in connected_group.newscasters) // Let's give it an appropriate unit number - src.unit_no++ - src.update_icon() //for any custom ones on the map... - -/obj/machinery/newscaster/Destroy() - if (connected_group) - connected_group.newscasters -= src - ..() - -/obj/machinery/newscaster/on_update_icon() - if(inoperable()) - icon_state = "newscaster_off" - if(stat & BROKEN) //If the thing is smashed, add crack overlay on top of the unpowered sprite. - overlays.Cut() - overlays += image(src.icon, "crack3") - return - - src.overlays.Cut() //reset overlays - - if(connected_group.wanted_issue) //wanted icon state, there can be no overlays on it as it's a priority message - icon_state = "newscaster_wanted" - return - - if(alert) //new message alert overlay - src.overlays += "newscaster_alert" - - if(hitstaken > 0) //Cosmetic damage overlay - src.overlays += image(src.icon, "crack[hitstaken]") - - icon_state = "newscaster_normal" - return - -/obj/machinery/newscaster/interface_interact(mob/user) - interact(user) - return TRUE - -/obj/machinery/newscaster/interact(mob/user) //########### THE MAIN BEEF IS HERE! And in the proc below this...############ - if(istype(user, /mob/living/carbon/human) || istype(user,/mob/living/silicon) ) - var/mob/living/human_or_robot_user = user - var/dat - dat = text("Newscaster

              Newscaster Unit #[src.unit_no]

              ") - - src.scan_user(human_or_robot_user) //Newscaster scans you - - switch(screen) - if(0) - dat += "Welcome to Newscasting Unit #[src.unit_no].
              Interface & News networks Operational." - dat += "
              Property of Ward-Takahashi GMB" - if(connected_group.wanted_issue) - dat+= "
              Read Wanted Issue" - dat+= "

              Create Feed Channel" - dat+= "
              View Feed Channels" - dat+= "
              Submit new Feed story" - dat+= "
              Print newspaper" - dat+= "
              Re-scan User" - dat+= "

              Exit" - if(src.securityCaster) - var/wanted_already = 0 - if(connected_group.wanted_issue) - wanted_already = 1 - - dat+="
              Feed Security functions:
              " - dat+="
              [(wanted_already) ? ("Manage") : ("Publish")] \"Wanted\" Issue" - dat+="
              Censor Feed Stories" - dat+="
              Mark Feed Channel with [GLOB.using_map.company_name] D-Notice" - dat+="

              The newscaster recognises you as: [src.scanned_user]" - if(1) - dat+= "Local Feed Channels
              " - if( !length(connected_group.network_channels) ) - dat+="No active channels found..." - else - for(var/datum/feed_channel/CHANNEL in connected_group.network_channels) - if(CHANNEL.is_admin_channel) - dat+="[CHANNEL.channel_name]
              " - else - dat+="[CHANNEL.channel_name] [(CHANNEL.censored) ? ("***") : null ]
              " - dat+="

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

              " - dat+="
              Submit

              Cancel
              " - if(3) - dat+="Creating new Feed Message..." - dat+="
              Receiving Channel: [src.channel_name]
              " //MARK - dat+="Message Author: [src.scanned_user]
              " - dat+="Message Body: [src.msg]
              " - dat+="Photo: " - if(photo_data && photo_data.photo) - send_rsc(usr, photo_data.photo.img, "tmp_photo.png") - dat+="
              " - dat+="
              Delete Photo
              " - else - dat+="Attach Photo" - dat+="

              Submit

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

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

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

              " - if(src.channel_name=="") - dat+="Invalid receiving channel name.
              " - if(src.scanned_user=="Unknown") - dat+="Channel author unverified.
              " - if(src.msg == "" || src.msg == "\[REDACTED\]") - dat+="Invalid message body.
              " - - dat+="
              Return
              " - if(7) - dat+="ERROR: Could not submit Feed Channel to Network.

              " - var/list/existing_authors = list() - for(var/datum/feed_channel/FC in connected_group.network_channels) - if(FC.author == "\[REDACTED\]") - existing_authors += FC.backup_author - else - existing_authors += FC.author - if(src.scanned_user in existing_authors) - dat+="There already exists a Feed channel under your name.
              " - if(src.channel_name=="" || src.channel_name == "\[REDACTED\]") - dat+="Invalid channel name.
              " - var/check = 0 - for(var/datum/feed_channel/FC in connected_group.network_channels) - if(FC.channel_name == src.channel_name) - check = 1 - break - if(check) - dat+="Channel name already in use.
              " - if(src.scanned_user=="Unknown") - dat+="Channel author unverified.
              " - dat+="
              Return
              " - if(8) - var/total_num=length(connected_group.network_channels) - var/active_num=total_num - var/message_num=0 - for(var/datum/feed_channel/FC in connected_group.network_channels) - if(!FC.censored) - message_num += length(FC.messages) //Dont forget, datum/feed_channel's var messages is a list of datum/feed_message - else - active_num-- - dat+="Network currently serves a total of [total_num] Feed channels, [active_num] of which are active, and a total of [message_num] Feed Stories." //TODO: CONTINUE - dat+="

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

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

              " - else - if( !length(viewing_channel.messages) ) - dat+="No feed messages found in channel...
              " - else - var/i = 0 - for(var/datum/feed_message/MESSAGE in src.viewing_channel.messages) - ++i - dat+="-[MESSAGE.body]
              " - if(MESSAGE.img) - var/resourc_name = "newscaster_photo_[sanitize(viewing_channel.channel_name)]_[i].png" - send_asset(usr.client, resourc_name) - dat+="
              " - if(MESSAGE.caption) - dat+="[MESSAGE.caption]
              " - dat+="
              " - dat+="\[Story by [MESSAGE.author] - [MESSAGE.time_stamp]\]
              " - dat+="

              Refresh" - dat+="
              Back" - if(10) - dat+="[GLOB.using_map.company_name] Feed Censorship Tool
              " - dat+="NOTE: Due to the nature of news Feeds, total deletion of a Feed Story is not possible.
              " - dat+="Keep in mind that users attempting to view a censored feed will instead see the \[REDACTED\] tag above it.
              " - dat+="
              Select Feed channel to get Stories from:
              " - if(!length(connected_group.network_channels)) - dat+="No feed channels found active...
              " - else - for(var/datum/feed_channel/CHANNEL in connected_group.network_channels) - dat+="[CHANNEL.channel_name] [(CHANNEL.censored) ? ("***") : null ]
              " - dat+="
              Cancel" - if(11) - dat+="[GLOB.using_map.company_name] D-Notice Handler
              " - dat+="A D-Notice is to be bestowed upon the channel if the handling Authority deems it as harmful for the [station_name()]'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(!length(connected_group.network_channels)) - dat+="No feed channels found active...
              " - else - for(var/datum/feed_channel/CHANNEL in connected_group.network_channels) - dat+="[CHANNEL.channel_name] [(CHANNEL.censored) ? ("***") : null ]
              " - - dat+="
              Back" - if(12) - dat+="[src.viewing_channel.channel_name]: \[ created by: [src.viewing_channel.author] \]
              " - dat+="[(src.viewing_channel.author=="\[REDACTED\]") ? ("Undo Author censorship") : ("Censor channel Author")]
              " - - - if( !length(viewing_channel.messages) ) - dat+="No feed messages found in channel...
              " - else - for(var/datum/feed_message/MESSAGE in src.viewing_channel.messages) - dat+="-[MESSAGE.body]
              \[[MESSAGE.message_type] by [MESSAGE.author]\]
              " - dat+="[(MESSAGE.body == "\[REDACTED\]") ? ("Undo story censorship") : ("Censor story")] - [(MESSAGE.author == "\[REDACTED\]") ? ("Undo Author Censorship") : ("Censor message Author")]
              " - dat+="
              Back" - if(13) - dat+="[src.viewing_channel.channel_name]: \[ created by: [src.viewing_channel.author] \]
              " - dat+="Channel messages listed below. If you deem them dangerous to the [station_name()], you can Bestow a D-Notice upon the channel.
              " - if(src.viewing_channel.censored) - dat+="ATTENTION: This channel has been deemed as threatening to the welfare of the [station_name()], and marked with a [GLOB.using_map.company_name] D-Notice.
              " - dat+="No further feed story additions are allowed while the D-Notice is in effect.

              " - else - if( !length(viewing_channel.messages) ) - dat+="No feed messages found in channel...
              " - else - for(var/datum/feed_message/MESSAGE in src.viewing_channel.messages) - dat+="-[MESSAGE.body]
              \[[MESSAGE.message_type] by [MESSAGE.author]\]
              " - - dat+="
              Back" - if(14) - dat+="Wanted Issue Handler:" - var/wanted_already = 0 - var/end_param = 1 - if(connected_group.wanted_issue) - wanted_already = 1 - end_param = 2 - - if(wanted_already) - dat+="
              A wanted issue is already in Feed Circulation. You can edit or cancel it below.
              " - dat+="
              " - dat+="Criminal Name: [src.channel_name]
              " - dat+="Description: [src.msg]
              " - dat+="Photo: " - if(photo_data && photo_data.photo) - send_rsc(usr, photo_data.photo.img, "tmp_photo.png") - dat+="
              " - dat+="
              Delete Photo
              " - else - dat+="Attach Photo
              " - if(wanted_already) - dat+="Wanted Issue created by: [connected_group.wanted_issue.backup_author]
              " - else - dat+="Wanted Issue will be created under prosecutor: [src.scanned_user]
              " - dat+="
              [(wanted_already) ? ("Edit Issue") : ("Submit")]" - if(wanted_already) - dat+="
              Take down Issue" - dat+="
              Cancel" - if(15) - dat+="Wanted issue for [src.channel_name] is now in Network Circulation.

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

              " - if(src.channel_name=="" || src.channel_name == "\[REDACTED\]") - dat+="Invalid name for person wanted.
              " - if(src.scanned_user=="Unknown") - dat+="Issue author unverified.
              " - if(src.msg == "" || src.msg == "\[REDACTED\]") - dat+="Invalid description.
              " - dat+="
              Return
              " - if(17) - dat+="Wanted Issue successfully deleted from Circulation
              " - dat+="
              Return
              " - if(18) - dat+="-- STATIONWIDE WANTED ISSUE --
              \[Submitted by: [connected_group.wanted_issue.backup_author]\]
              " - dat+="Criminal: [connected_group.wanted_issue.author]
              " - dat+="Description: [connected_group.wanted_issue.body]
              " - dat+="Photo: " - if(connected_group.wanted_issue.img) - send_rsc(usr, connected_group.wanted_issue.img, "tmp_photow.png") - dat+="
              " - else - dat+="None" - dat+="

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

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

              " - dat+="Return" - if(21) - dat+="Unable to print newspaper. Insufficient paper. Please notify maintenance personnel to refill machine storage.

              " - dat+="Return" - else - dat+="I'm sorry to break your immersion. This shit's bugged. Report this bug to Agouri, polyxenitopalidou@gmail.com" - - - show_browser(human_or_robot_user, dat, "window=newscaster_main;size=400x600") - onclose(human_or_robot_user, "newscaster_main") - -/obj/machinery/newscaster/Topic(href, href_list) - if(..()) - return - if ((usr.contents.Find(src) || ((get_dist(src, usr) <= 1) && istype(src.loc, /turf))) || (istype(usr, /mob/living/silicon))) - usr.set_machine(src) - if(href_list["set_channel_name"]) - src.channel_name = sanitizeSafe(input(usr, "Provide a Feed Channel Name", "Network Channel Handler", ""), MAX_LNAME_LEN) - src.updateUsrDialog() - //src.update_icon() - - else if(href_list["set_channel_lock"]) - src.c_locked = !src.c_locked - src.updateUsrDialog() - //src.update_icon() - - else if(href_list["submit_new_channel"]) - //var/list/existing_channels = list() //OBSOLETE - var/list/existing_authors = list() - for(var/datum/feed_channel/FC in connected_group.network_channels) - //existing_channels += FC.channel_name - if(FC.author == "\[REDACTED\]") - existing_authors += FC.backup_author - else - existing_authors +=FC.author - var/check = 0 - for(var/datum/feed_channel/FC in connected_group.network_channels) - if(FC.channel_name == src.channel_name) - check = 1 - break - if(src.channel_name == "" || src.channel_name == "\[REDACTED\]" || src.scanned_user == "Unknown" || check || (src.scanned_user in existing_authors) ) - src.screen=7 - else - var/choice = alert("Please confirm Feed channel creation","Network Channel Handler","Confirm","Cancel") - if(choice=="Confirm") - connected_group.CreateFeedChannel(src.channel_name, src.scanned_user, c_locked) - src.screen=5 - src.updateUsrDialog() - //src.update_icon() - - else if(href_list["set_channel_receiving"]) - //var/list/datum/feed_channel/available_channels = list() - var/list/available_channels = list() - for(var/datum/feed_channel/F in connected_group.network_channels) - if( (!F.locked || F.author == scanned_user) && !F.censored) - available_channels += F.channel_name - src.channel_name = input(usr, "Choose receiving Feed Channel", "Network Channel Handler") in available_channels - src.updateUsrDialog() - - else if(href_list["set_new_message"]) - src.msg = sanitize(input(usr, "Write your Feed story", "Network Channel Handler", "")) - src.updateUsrDialog() - - else if(href_list["set_attachment"]) - AttachPhoto(usr) - src.updateUsrDialog() - - else if(href_list["submit_new_message"]) - if(src.msg =="" || src.msg=="\[REDACTED\]" || src.scanned_user == "Unknown" || src.channel_name == "" ) - src.screen=6 - else - var/image = photo_data ? photo_data.photo : null - connected_group.SubmitArticle(src.msg, src.scanned_user, src.channel_name, image, 0) - if(photo_data) - qdel(photo_data) - photo_data = null - src.screen=4 - - src.updateUsrDialog() - - else if(href_list["create_channel"]) - src.screen=2 - src.updateUsrDialog() - - else if(href_list["create_feed_story"]) - src.screen=3 - src.updateUsrDialog() - - else if(href_list["menu_paper"]) - src.screen=8 - src.updateUsrDialog() - else if(href_list["print_paper"]) - if(!src.paper_remaining) - src.screen=21 - else - src.print_paper() - src.screen = 20 - src.updateUsrDialog() - - else if(href_list["menu_censor_story"]) - src.screen=10 - src.updateUsrDialog() - - else if(href_list["menu_censor_channel"]) - src.screen=11 - src.updateUsrDialog() - - else if(href_list["menu_wanted"]) - var/already_wanted = 0 - if(connected_group.wanted_issue) - already_wanted = 1 - - if(already_wanted) - src.channel_name = connected_group.wanted_issue.author - src.msg = connected_group.wanted_issue.body - src.screen = 14 - src.updateUsrDialog() - - else if(href_list["set_wanted_name"]) - src.channel_name = sanitizeSafe(input(usr, "Provide the name of the Wanted person", "Network Security Handler", ""), MAX_LNAME_LEN) - src.updateUsrDialog() - - else if(href_list["set_wanted_desc"]) - src.msg = sanitize(input(usr, "Provide the a description of the Wanted person and any other details you deem important", "Network Security Handler", "")) - src.updateUsrDialog() - - else if(href_list["submit_wanted"]) - var/input_param = text2num(href_list["submit_wanted"]) - if(src.msg == "" || src.channel_name == "" || src.scanned_user == "Unknown") - src.screen = 16 - else - var/choice = alert("Please confirm Wanted Issue [(input_param==1) ? ("creation.") : ("edit.")]","Network Security Handler","Confirm","Cancel") - if(choice=="Confirm") - if(input_param==1) //If input_param == 1 we're submitting a new wanted issue. At 2 we're just editing an existing one. See the else below - var/datum/feed_message/WANTED = new /datum/feed_message - WANTED.author = src.channel_name - WANTED.body = src.msg - WANTED.backup_author = src.scanned_user //I know, a bit wacky - if(photo_data) - WANTED.img = photo_data.photo.img - connected_group.wanted_issue = WANTED - connected_group.alert_readers() - src.screen = 15 - else - if(connected_group.wanted_issue.is_admin_message) - alert("The wanted issue has been distributed by a [GLOB.using_map.company_name] higherup. You cannot edit it.","Ok") - return - connected_group.wanted_issue.author = src.channel_name - connected_group.wanted_issue.body = src.msg - connected_group.wanted_issue.backup_author = src.scanned_user - if(photo_data) - connected_group.wanted_issue.img = photo_data.photo.img - src.screen = 19 - - src.updateUsrDialog() - - else if(href_list["cancel_wanted"]) - if (!connected_group.wanted_issue) - alert("There is no wanted issue to cancel.", "Ok") - return - if(connected_group.wanted_issue.is_admin_message) - alert("The wanted issue has been distributed by a [GLOB.using_map.company_name] higherup. You cannot take it down.","Ok") - return - var/choice = alert("Please confirm Wanted Issue removal","Network Security Handler","Confirm","Cancel") - if(choice=="Confirm") - connected_group.wanted_issue = null - for(var/obj/machinery/newscaster/NEWSCASTER in connected_group.newscasters) - NEWSCASTER.update_icon() - src.screen=17 - src.updateUsrDialog() - - else if(href_list["view_wanted"]) - src.screen=18 - src.updateUsrDialog() - else if(href_list["censor_channel_author"]) - var/datum/feed_channel/FC = locate(href_list["censor_channel_author"]) - if(FC.is_admin_channel) - alert("This channel was created by a [GLOB.using_map.company_name] Officer. You cannot censor it.","Ok") - return - if(FC.author != "\[REDACTED\]") - FC.backup_author = FC.author - FC.author = "\[REDACTED\]" - else - FC.author = FC.backup_author - FC.update() - src.updateUsrDialog() - - else if(href_list["censor_channel_story_author"]) - var/datum/feed_message/MSG = locate(href_list["censor_channel_story_author"]) - if(MSG.is_admin_message) - alert("This message was created by a [GLOB.using_map.company_name] Officer. You cannot censor its author.","Ok") - return - if(MSG.author != "\[REDACTED\]") - MSG.backup_author = MSG.author - MSG.author = "\[REDACTED\]" - else - MSG.author = MSG.backup_author - MSG.parent_channel.update() - src.updateUsrDialog() - - else if(href_list["censor_channel_story_body"]) - var/datum/feed_message/MSG = locate(href_list["censor_channel_story_body"]) - if(MSG.is_admin_message) - alert("This channel was created by a [GLOB.using_map.company_name] Officer. You cannot censor it.","Ok") - return - if(MSG.body != "\[REDACTED\]") - MSG.backup_body = MSG.body - MSG.backup_caption = MSG.caption - MSG.backup_img = MSG.img - MSG.body = "\[REDACTED\]" - MSG.caption = "\[REDACTED\]" - MSG.img = null - else - MSG.body = MSG.backup_body - MSG.caption = MSG.caption - MSG.img = MSG.backup_img - - MSG.parent_channel.update() - src.updateUsrDialog() - - else if(href_list["pick_d_notice"]) - var/datum/feed_channel/FC = locate(href_list["pick_d_notice"]) - src.viewing_channel = FC - src.screen=13 - src.updateUsrDialog() - - else if(href_list["toggle_d_notice"]) - var/datum/feed_channel/FC = locate(href_list["toggle_d_notice"]) - if(FC.is_admin_channel) - alert("This channel was created by a [GLOB.using_map.company_name] Officer. You cannot place a D-Notice upon it.","Ok") - return - FC.censored = !FC.censored - FC.update() - src.updateUsrDialog() - - else if(href_list["view"]) - src.screen=1 - src.updateUsrDialog() - - else if(href_list["setScreen"]) //Brings us to the main menu and resets all fields~ - src.screen = text2num(href_list["setScreen"]) - if (src.screen == 0) - src.scanned_user = "Unknown"; - msg = ""; - src.c_locked=0; - channel_name=""; - src.viewing_channel = null - if (photo_data) - qdel(photo_data) - photo_data = null - src.updateUsrDialog() - - else if(href_list["show_channel"]) - var/datum/feed_channel/FC = locate(href_list["show_channel"]) - src.viewing_channel = FC - src.screen = 9 - src.updateUsrDialog() - - else if(href_list["pick_censor_channel"]) - var/datum/feed_channel/FC = locate(href_list["pick_censor_channel"]) - src.viewing_channel = FC - src.screen = 12 - src.updateUsrDialog() - - else if(href_list["refresh"]) - src.updateUsrDialog() - - - -/obj/machinery/newscaster/attackby(obj/item/I, mob/user) - if (user.a_intent == I_HURT) - user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN) - if (I.force < 15) - visible_message(SPAN_WARNING("\The [user] uselessly bops \the [src] with \an [I].")) - else if (stat & BROKEN) - visible_message(SPAN_WARNING("\The [user] further abuses the shattered [name].")) - playsound(src, 'sound/effects/hit_on_shattered_glass.ogg', 100, 1) - else if (++hitstaken < 3) - visible_message(SPAN_DANGER("\The [user] slams \the [src] with \an [I], cracking it!")) - playsound(src, 'sound/effects/Glassbr3.ogg', 100, 1) - else - visible_message(SPAN_DANGER("\The [user] smashes \the [src] with \an [I]!")) - playsound(src, 'sound/effects/Glasshit.ogg', 100, 1) - set_broken(TRUE) - update_icon() - return TRUE - else - . = ..() - -/datum/news_photo - var/is_synth = 0 - var/obj/item/photo/photo = null - -/datum/news_photo/New(var/obj/item/photo/p, var/synth) - is_synth = synth - photo = p - -/obj/machinery/newscaster/proc/AttachPhoto(mob/user as mob) - if(photo_data) - qdel(photo_data) - photo_data = null - return - - if(istype(user.get_active_hand(), /obj/item/photo)) - var/obj/item/photo = user.get_active_hand() - photo_data = new(photo, 0) - else if(istype(user,/mob/living/silicon)) - var/mob/living/silicon/tempAI = user - var/obj/item/photo/selection = tempAI.GetPicture() - if (!selection) - return - - photo_data = new(selection, 1) - - -//######################################################################################################################## -//###################################### NEWSPAPER! ###################################################################### -//######################################################################################################################## - -/obj/item/newspaper - name = "newspaper" - desc = "An issue of The Griffon, the space newspaper." - icon = 'icons/obj/bureaucracy.dmi' - icon_state = "newspaper" - w_class = ITEM_SIZE_SMALL //Let's make it fit in trashbags! - attack_verb = list("bapped") - var/screen = 0 - var/pages = 0 - var/curr_page = 0 - var/list/datum/feed_channel/news_content = list() - var/datum/feed_message/important_message = null - var/scribble="" - var/scribble_page = null - -/obj/item/newspaper/attack_self(mob/user) - user.update_personal_goal(/datum/goal/achievement/newshound, TRUE) - if(ishuman(user)) - var/mob/living/carbon/human/human_user = user - var/dat - src.pages = 0 - switch(screen) - if(0) //Cover - dat+="
              The Griffon
              " - dat+="
              [GLOB.using_map.company_name]-standard newspaper, for use on [GLOB.using_map.company_name] Space Facilities

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

              " - if(C.censored) - dat+="This channel was deemed dangerous to the general welfare of the [station_name()] and therefore marked with a D-Notice. Its contents were not transferred to the newspaper at the time of printing." - else - if(!length(C.messages)) - dat+="No Feed stories stem from this channel..." - else - dat+="
                " - var/i = 0 - for(var/datum/feed_message/MESSAGE in C.messages) - ++i - dat+="-[MESSAGE.body]
                " - if(MESSAGE.img) - var/resourc_name = "newscaster_photo_[sanitize(C.channel_name)]_[i].png" - send_asset(user.client, resourc_name) - dat+="
                " - dat+="\[[MESSAGE.message_type] by [MESSAGE.author]\]

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

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


              " - dat+="Criminal name: [important_message.author]
              " - dat+="Description: [important_message.body]
              " - dat+="Photo:: " - if(important_message.img) - send_rsc(user, important_message.img, "tmp_photow.png") - dat+="
              " - else - dat+="None" - else - dat+="Apart from some uninteresting Classified ads, there's nothing on this page..." - if(scribble_page==curr_page) - dat+="
              There is a small scribble near the end of this page... It reads: \"[src.scribble]\"" - dat+= "
              " - else - dat+="I'm sorry to break your immersion. This shit's bugged. Report this bug to Agouri, polyxenitopalidou@gmail.com" - - dat+="

              [src.curr_page+1]
              " - show_browser(human_user, dat, "window=newspaper_main;size=300x400") - onclose(human_user, "newspaper_main") - else - to_chat(user, "The paper is full of intelligible symbols!") - - -/obj/item/newspaper/Topic(href, href_list) - var/mob/living/U = usr - ..() - if ((src in U.contents) || ( istype(loc, /turf) && in_range(src, U) )) - U.set_machine(src) - if(href_list["next_page"]) - if(curr_page==src.pages+1) - return //Don't need that at all, but anyway. - if(src.curr_page == src.pages) //We're at the middle, get to the end - src.screen = 2 - else - if(curr_page == 0) //We're at the start, get to the middle - src.screen=1 - src.curr_page++ - playsound(src.loc, "pageturn", 50, 1) - - else if(href_list["prev_page"]) - if(curr_page == 0) - return - if(curr_page == 1) - src.screen = 0 - - else - if(curr_page == src.pages+1) //we're at the end, let's go back to the middle. - src.screen = 1 - src.curr_page-- - playsound(src.loc, "pageturn", 50, 1) - - if (istype(src.loc, /mob)) - src.attack_self(src.loc) - - -/obj/item/newspaper/attackby(obj/item/W as obj, mob/user as mob) - if(istype(W, /obj/item/pen)) - if(src.scribble_page == src.curr_page) - to_chat(user, "There's already a scribble in this page... You wouldn't want to make things too cluttered, would you?") - else - var/s = sanitize(input(user, "Write something", "Newspaper", "")) - s = sanitize(s) - if (!s) - return - if (!in_range(src, usr) && src.loc != usr) - return - src.scribble_page = src.curr_page - src.scribble = s - src.attack_self(user) - return - - -////////////////////////////////////helper procs - - -/obj/machinery/newscaster/proc/scan_user(mob/living/user as mob) - if(istype(user,/mob/living/carbon/human)) //User is a human - var/mob/living/carbon/human/human_user = user - var/obj/item/card/id/id = human_user.GetIdCard() - if(istype(id)) //Newscaster scans you - src.scanned_user = GetNameAndAssignmentFromId(id) - else - src.scanned_user = "Unknown" - else - var/mob/living/silicon/ai_user = user - src.scanned_user = "[ai_user.name] ([ai_user.job])" - - -/obj/machinery/newscaster/proc/print_paper() - var/obj/item/newspaper/NEWSPAPER = new /obj/item/newspaper - for(var/datum/feed_channel/FC in connected_group.network_channels) - NEWSPAPER.news_content += FC - if(connected_group.wanted_issue) - NEWSPAPER.important_message = connected_group.wanted_issue - NEWSPAPER.dropInto(loc) - src.paper_remaining-- - return - -//Removed for now so these aren't even checked every tick. Left this here in-case Agouri needs it later. -///obj/machinery/newscaster/process() //Was thinking of doing the icon update through process, but multiple iterations per second does not -// return //bode well with a newscaster network of 10+ machines. Let's just return it, as it's added in the machines list. - -/obj/machinery/newscaster/proc/newsAlert(var/news_call) //This isn't Agouri's work, for it is ugly and vile. - var/turf/T = get_turf(src) //Who the fuck uses spawn(600) anyway, jesus christ - if(news_call) - for(var/mob/O in hearers(world.view-1, T)) - O.show_message("[src.name] beeps, \"[news_call]\"",2) - src.alert = 1 - src.update_icon() - spawn(300) - src.alert = 0 - src.update_icon() - playsound(src.loc, 'sound/machines/twobeep.ogg', 75, 1) - else - for(var/mob/O in hearers(world.view-1, T)) - O.show_message("[src.name] beeps, \"Attention! Wanted issue distributed!\"",2) - playsound(src.loc, 'sound/machines/warning-buzzer.ogg', 75, 1) - return diff --git a/code/game/machinery/nuclear_bomb.dm b/code/game/machinery/nuclear_bomb.dm deleted file mode 100644 index 6b8b01dc0fd48..0000000000000 --- a/code/game/machinery/nuclear_bomb.dm +++ /dev/null @@ -1,559 +0,0 @@ -var/global/bomb_set - -/obj/machinery/nuclearbomb - name = "\improper Nuclear Fission Explosive" - desc = "Uh oh. RUN!" - icon = 'icons/obj/nuke.dmi' - icon_state = "idle" - density = TRUE - use_power = POWER_USE_OFF - uncreated_component_parts = null - unacidable = TRUE - interact_offline = TRUE - - var/deployable = 0 - var/extended = 0 - var/lighthack = 0 - var/timeleft = 120 - var/minTime = 120 - var/maxTime = 600 - var/timing = 0 - var/r_code = "ADMIN" - var/code = "" - var/yes_code = 0 - var/safety = 1 - var/obj/item/disk/nuclear/auth = null - var/removal_stage = 0 // 0 is no removal, 1 is covers removed, 2 is covers open, 3 is sealant open, 4 is unwrenched, 5 is removed from bolts. - var/lastentered - var/previous_level = "" - wires = /datum/wires/nuclearbomb - var/decl/security_level/original_level - -/obj/machinery/nuclearbomb/New() - ..() - r_code = "[rand(10000, 99999.0)]"//Creates a random code upon object spawn. - -/obj/machinery/nuclearbomb/Destroy() - qdel(auth) - auth = null - return ..() - -/obj/machinery/nuclearbomb/Process(var/wait) - if(timing) - timeleft = max(timeleft - (wait / 10), 0) - playsound(loc, 'sound/items/timer.ogg', 50) - if(timeleft <= 0) - addtimer(CALLBACK(src, .proc/explode), 0) - SSnano.update_uis(src) - -/obj/machinery/nuclearbomb/attackby(obj/item/O as obj, mob/user as mob, params) - if(isScrewdriver(O)) - add_fingerprint(user) - if(auth) - if(panel_open == 0) - panel_open = 1 - overlays |= "panel_open" - to_chat(user, "You unscrew the control panel of [src].") - playsound(src, 'sound/items/Screwdriver.ogg', 50, 1) - else - panel_open = 0 - overlays -= "panel_open" - to_chat(user, "You screw the control panel of [src] back on.") - playsound(src, 'sound/items/Screwdriver.ogg', 50, 1) - else - if(panel_open == 0) - to_chat(user, "\The [src] emits a buzzing noise, the panel staying locked in.") - if(panel_open == 1) - panel_open = 0 - overlays -= "panel_open" - to_chat(user, "You screw the control panel of \the [src] back on.") - playsound(src, 'sound/items/Screwdriver.ogg', 50, 1) - flick("lock", src) - return - - if(panel_open && isMultitool(O) || isWirecutter(O)) - return attack_hand(user) - - if(extended) - if(istype(O, /obj/item/disk/nuclear)) - if(!user.unEquip(O, src)) - return - auth = O - add_fingerprint(user) - return attack_hand(user) - - if(anchored) - switch(removal_stage) - if(0) - if(isWelder(O)) - var/obj/item/weldingtool/WT = O - if(!WT.isOn()) return - if(WT.get_fuel() < 5) // uses up 5 fuel. - to_chat(user, "You need more fuel to complete this task.") - return - - user.visible_message("[user] starts cutting loose the anchoring bolt covers on [src].", "You start cutting loose the anchoring bolt covers with [O]...") - - if(do_after(user, 4 SECONDS, src, DO_PUBLIC_UNIQUE)) - if(!src || !user || !WT.remove_fuel(5, user)) return - user.visible_message("\The [user] cuts through the bolt covers on \the [src].", "You cut through the bolt cover.") - removal_stage = 1 - return - - if(1) - if(isCrowbar(O)) - user.visible_message("[user] starts forcing open the bolt covers on [src].", "You start forcing open the anchoring bolt covers with [O]...") - - if(do_after(user, 1.5 SECONDS, src, DO_PUBLIC_UNIQUE)) - if(!src || !user) return - user.visible_message("\The [user] forces open the bolt covers on \the [src].", "You force open the bolt covers.") - removal_stage = 2 - return - - if(2) - if(isWelder(O)) - var/obj/item/weldingtool/WT = O - if(!WT.isOn()) return - if (WT.get_fuel() < 5) // uses up 5 fuel. - to_chat(user, "You need more fuel to complete this task.") - return - - user.visible_message("[user] starts cutting apart the anchoring system sealant on [src].", "You start cutting apart the anchoring system's sealant with [O]...") - - if(do_after(user, 4 SECONDS, src, DO_PUBLIC_UNIQUE)) - if(!src || !user || !WT.remove_fuel(5, user)) return - user.visible_message("\The [user] cuts apart the anchoring system sealant on \the [src].", "You cut apart the anchoring system's sealant.") - removal_stage = 3 - return - - if(3) - if(isWrench(O)) - user.visible_message("[user] begins unwrenching the anchoring bolts on [src].", "You begin unwrenching the anchoring bolts...") - if(do_after(user, 5 SECONDS, src, DO_PUBLIC_UNIQUE)) - if(!src || !user) return - user.visible_message("[user] unwrenches the anchoring bolts on [src].", "You unwrench the anchoring bolts.") - removal_stage = 4 - return - - if(4) - if(isCrowbar(O)) - user.visible_message("[user] begins lifting [src] off of the anchors.", "You begin lifting the device off the anchors...") - if(do_after(user, 8 SECONDS, src, DO_PUBLIC_UNIQUE)) - if(!src || !user) return - user.visible_message("\The [user] crowbars \the [src] off of the anchors. It can now be moved.", "You jam the crowbar under the nuclear device and lift it off its anchors. You can now move it!") - anchored = FALSE - removal_stage = 5 - return - ..() - -/obj/machinery/nuclearbomb/physical_attack_hand(mob/user) - if(!extended && deployable) - . = TRUE - if(removal_stage < 5) - src.anchored = TRUE - visible_message("With a steely snap, bolts slide out of [src] and anchor it to the flooring!") - else - visible_message("\The [src] makes a highly unpleasant crunching noise. It looks like the anchoring bolts have been cut.") - extended = 1 - if(!src.lighthack) - flick("lock", src) - update_icon() - -/obj/machinery/nuclearbomb/interface_interact(mob/user as mob) - if(extended && !panel_open) - ui_interact(user) - return TRUE - -/obj/machinery/nuclearbomb/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1) - var/data[0] - data["hacking"] = 0 - data["auth"] = is_auth(user) - data["moveable_anchor"] = !istype(src, /obj/machinery/nuclearbomb/station) - if(is_auth(user)) - if(yes_code) - data["authstatus"] = timing ? "Functional/Set" : "Functional" - else - data["authstatus"] = "Auth. S2" - else - if(timing) - data["authstatus"] = "Set" - else - data["authstatus"] = "Auth. S1" - data["safe"] = safety ? "Safe" : "Engaged" - data["time"] = timeleft - data["timer"] = timing - data["safety"] = safety - data["anchored"] = anchored - data["yescode"] = yes_code - data["message"] = "AUTH" - if(is_auth(user)) - data["message"] = code - if(yes_code) - data["message"] = "*****" - - ui = SSnano.try_update_ui(user, src, ui_key, ui, data, force_open) - if(!ui) - ui = new(user, src, ui_key, "nuclear_bomb.tmpl", "Nuke Control Panel", 300, 510) - ui.set_initial_data(data) - ui.open() - ui.set_auto_update(1) - -/obj/machinery/nuclearbomb/verb/toggle_deployable() - set category = "Object" - set name = "Toggle Deployable" - set src in oview(1) - - if(usr.incapacitated()) - return - - if(deployable) - to_chat(usr, "You close several panels to make [src] undeployable.") - deployable = 0 - else - to_chat(usr, "You adjust some panels to make [src] deployable.") - deployable = 1 - return - -/obj/machinery/nuclearbomb/proc/is_auth(var/mob/user) - if(auth) - return 1 - if(user.can_admin_interact()) - return 1 - return 0 - -/obj/machinery/nuclearbomb/Topic(href, href_list) - if(..()) - return 1 - - if(href_list["auth"]) - if(auth) - auth.forceMove(loc) - yes_code = 0 - auth = null - else - var/obj/item/I = usr.get_active_hand() - if(istype(I, /obj/item/disk/nuclear)) - if(!usr.unEquip(I, src)) - return 1 - auth = I - if(is_auth(usr)) - if(href_list["type"]) - if(href_list["type"] == "E") - if(code == r_code) - yes_code = 1 - code = null - log_and_message_admins("has armed \the [src]") - else - code = "ERROR" - else - if(href_list["type"] == "R") - yes_code = 0 - code = null - else - lastentered = text("[]", href_list["type"]) - if(text2num(lastentered) == null) - log_and_message_admins("tried to exploit a nuclear bomb by entering non-numerical codes") - else - code += lastentered - if(length(code) > 5) - code = "ERROR" - if(yes_code) - if(href_list["time"]) - if(timing) - to_chat(usr, "Cannot alter the timing during countdown.") - return - - var/time = text2num(href_list["time"]) - timeleft += time - timeleft = clamp(timeleft, minTime, maxTime) - if(href_list["timer"]) - if(timing == -1) - return 1 - if(!anchored) - to_chat(usr, "\The [src] needs to be anchored.") - return 1 - if(safety) - to_chat(usr, "The safety is still on.") - return 1 - if(wires.IsIndexCut(NUCLEARBOMB_WIRE_TIMING)) - to_chat(usr, "Nothing happens, something might be wrong with the wiring.") - return 1 - if(!timing && !safety) - start_bomb() - else - check_cutoff() - if(href_list["safety"]) - if (wires.IsIndexCut(NUCLEARBOMB_WIRE_SAFETY)) - to_chat(usr, "Nothing happens, something might be wrong with the wiring.") - return 1 - safety = !safety - if(safety) - secure_device() - update_icon() - if(href_list["anchor"]) - if(removal_stage == 5) - anchored = FALSE - visible_message("\The [src] makes a highly unpleasant crunching noise. It looks like the anchoring bolts have been cut.") - return 1 - - if(!isinspace()) - anchored = !anchored - if(anchored) - visible_message("With a steely snap, bolts slide out of \the [src] and anchor it to the flooring.") - else - secure_device() - visible_message("The anchoring bolts slide back into the depths of \the [src].") - else - to_chat(usr, "There is nothing to anchor to!") - return 1 - -/obj/machinery/nuclearbomb/proc/start_bomb() - timing = 1 - log_and_message_admins("activated the detonation countdown of \the [src]") - bomb_set++ //There can still be issues with this resetting when there are multiple bombs. Not a big deal though for Nuke/N - var/decl/security_state/security_state = decls_repository.get_decl(GLOB.using_map.security_state) - original_level = security_state.current_security_level - security_state.set_security_level(security_state.severe_security_level, TRUE) - update_icon() - -/obj/machinery/nuclearbomb/proc/check_cutoff() - secure_device() - -/obj/machinery/nuclearbomb/proc/secure_device() - if(timing <= 0) - return - var/decl/security_state/security_state = decls_repository.get_decl(GLOB.using_map.security_state) - security_state.set_security_level(original_level, TRUE) - bomb_set-- - safety = TRUE - timing = 0 - timeleft = clamp(timeleft, minTime, maxTime) - update_icon() - -/obj/machinery/nuclearbomb/ex_act(severity) - return - -#define NUKERANGE 80 -/obj/machinery/nuclearbomb/proc/explode() - if (safety) - timing = 0 - return - timing = -1 - yes_code = 0 - safety = 1 - update_icon() - - SetUniversalState(/datum/universal_state/nuclear_explosion, arguments=list(src)) - -/obj/machinery/nuclearbomb/on_update_icon() - if(lighthack) - icon_state = "idle" - else if(timing == -1) - icon_state = "exploding" - else if(timing) - icon_state = "urgent" - else if(extended || !safety) - icon_state = "greenlight" - else - icon_state = "idle" - -//====The nuclear authentication disc==== -/obj/item/disk/nuclear - name = "nuclear authentication disk" - desc = "Better keep this safe." - icon = 'icons/obj/items.dmi' - icon_state = "nucleardisk" - item_state = "card-id" - w_class = ITEM_SIZE_TINY - - -/obj/item/disk/nuclear/Initialize() - . = ..() - nuke_disks |= src - // Can never be quite sure that a game mode has been properly initiated or not at this point, so always register - GLOB.moved_event.register(src, src, /obj/item/disk/nuclear/proc/check_z_level) - -/obj/item/disk/nuclear/proc/check_z_level() - if(!(istype(SSticker.mode, /datum/game_mode/nuclear))) - GLOB.moved_event.unregister(src, src, /obj/item/disk/nuclear/proc/check_z_level) // However, when we are certain unregister if necessary - return - var/turf/T = get_turf(src) - if(!T || isNotStationLevel(T.z)) - qdel(src) - -/obj/item/disk/nuclear/Destroy() - GLOB.moved_event.unregister(src, src, /obj/item/disk/nuclear/proc/check_z_level) - nuke_disks -= src - if(!nuke_disks.len) - var/turf/T = pick_area_turf(/area/maintenance, list(/proc/is_station_turf, /proc/not_turf_contains_dense_objects)) - if(T) - var/obj/D = new /obj/item/disk/nuclear(T) - log_and_message_admins("[src], the last authentication disk, has been destroyed. Spawning [D] at ([D.x], [D.y], [D.z]).", location = T) - else - log_and_message_admins("[src], the last authentication disk, has been destroyed. Failed to respawn disc!") - return ..() - -//====the nuclear football (holds the disk and instructions)==== -/obj/item/storage/secure/briefcase/nukedisk - desc = "A large briefcase with a digital locking system." - startswith = list( - /obj/item/disk/nuclear, - /obj/item/pinpointer, - /obj/item/folder/envelope/nuke_instructions, - /obj/item/modular_computer/laptop/preset/custom_loadout/cheap - ) - -/obj/item/storage/secure/briefcase/nukedisk/examine(mob/user) - . = ..() - to_chat(user,"On closer inspection, you see \a [GLOB.using_map.company_name] emblem is etched into the front of it.") - -/obj/item/folder/envelope/nuke_instructions - name = "instructions envelope" - desc = "A small envelope. The label reads 'open only in event of high emergency'." - -/obj/item/folder/envelope/nuke_instructions/Initialize() - . = ..() - var/obj/item/paper/R = new(src) - R.set_content("


              \ - Warning: Classified
              [GLOB.using_map.station_name] Self-Destruct System - Instructions


              \ - In the event of a Delta-level emergency, this document will guide you through the activation of the vessel's \ - on-board nuclear self-destruct system. Please read carefully.

              \ - 1) (Optional) Announce the imminent activation to any surviving crew members, and begin evacuation procedures.
              \ - 2) Notify two heads of staff, both with ID cards with access to the ship's Keycard Authentication Devices.
              \ - 3) Proceed to the self-destruct chamber, located on Deck One by the stairwell.
              \ - 4) Unbolt the door and enter the chamber.
              \ - 5) Both heads of staff should stand in front of their own Keycard Authentication Devices. On the KAD interface, select \ - Grant Nuclear Authentication Code. Both heads of staff should then swipe their ID cards simultaneously.
              \ - 6) The KAD will now display the Authentication Code. Memorize this code.
              \ - 7) Insert the nuclear authentication disk into the self-destruct terminal.
              \ - 8) Enter the code into the self-destruct terminal.
              \ - 9) Authentication procedures are now complete. Open the two cabinets containing the nuclear cylinders. They are \ - located on the back wall of the chamber.
              \ - 10) Place the cylinders upon the six nuclear cylinder inserters.
              \ - 11) Activate the inserters. The cylinders will be pulled down into the self-destruct system.
              \ - 12) Return to the terminal. Enter the desired countdown time.
              \ - 13) When ready, disable the safety switch.
              \ - 14) Start the countdown.

              \ - This concludes the instructions.", "vessel self-destruct instructions") - - //stamp the paper - var/image/stampoverlay = image('icons/obj/bureaucracy.dmi') - stampoverlay.icon_state = "paper_stamp-hos" - R.stamped += /obj/item/stamp - R.overlays += stampoverlay - R.stamps += "
              This paper has been stamped as 'Top Secret'." - -//====vessel self-destruct system==== -/obj/machinery/nuclearbomb/station - name = "self-destruct terminal" - desc = "For when it all gets too much to bear. Do not taunt." - icon = 'icons/obj/nuke_station.dmi' - anchored = TRUE - deployable = 1 - extended = 1 - - var/list/flash_tiles = list() - var/list/inserters = list() - var/last_turf_state - - var/announced = 0 - var/time_to_explosion = 0 - var/self_destruct_cutoff = 60 //Seconds - timeleft = 300 - minTime = 300 - maxTime = 900 - -/obj/machinery/nuclearbomb/station/Initialize() - . = ..() - verbs -= /obj/machinery/nuclearbomb/verb/toggle_deployable - for(var/turf/simulated/floor/T in get_area(src)) - if(istype(T.flooring, /decl/flooring/reinforced/circuit/red)) - flash_tiles += T - update_icon() - for(var/obj/machinery/self_destruct/ch in get_area(src)) - inserters += ch - -/obj/machinery/nuclearbomb/station/attackby(obj/item/O as obj, mob/user as mob) - if(isWrench(O)) - return - -/obj/machinery/nuclearbomb/station/Topic(href, href_list) - if((. = ..())) - return - - if(href_list["anchor"]) - return - -/obj/machinery/nuclearbomb/station/start_bomb() - for(var/inserter in inserters) - var/obj/machinery/self_destruct/sd = inserter - if(!istype(sd) || !sd.armed) - to_chat(usr, "An inserter has not been armed or is damaged.") - return - visible_message("Warning. The self-destruct sequence override will be disabled [self_destruct_cutoff] seconds before detonation.") - ..() - -/obj/machinery/nuclearbomb/station/check_cutoff() - if(timeleft <= self_destruct_cutoff) - visible_message("Self-Destruct abort is no longer possible.") - return - ..() - -/obj/machinery/nuclearbomb/station/Destroy() - flash_tiles.Cut() - return ..() - -/obj/machinery/nuclearbomb/station/Process() - ..() - if(timeleft > 0 && GAME_STATE < RUNLEVEL_POSTGAME) - if(timeleft <= self_destruct_cutoff) - if(!announced) - priority_announcement.Announce("The self-destruct sequence has reached terminal countdown, abort systems have been disabled.", "Self-Destruct Control Computer") - announced = 1 - if(world.time >= time_to_explosion) - var/range - var/high_intensity - var/low_intensity - if(timeleft <= (self_destruct_cutoff/2)) - range = rand(2, 3) - high_intensity = rand(5,8) - low_intensity = rand(7,10) - time_to_explosion = world.time + 2 SECONDS - else - range = rand(1, 2) - high_intensity = rand(3, 6) - low_intensity = rand(5, 8) - time_to_explosion = world.time + 5 SECONDS - var/turf/T = pick_area_and_turf(GLOB.is_station_but_not_space_or_shuttle_area) - explosion(T, range, high_intensity, low_intensity) - -/obj/machinery/nuclearbomb/station/secure_device() - ..() - announced = 0 - -/obj/machinery/nuclearbomb/station/on_update_icon() - var/target_icon_state - if(lighthack) - target_icon_state = "rcircuit_off" - icon_state = "idle" - else if(timing == -1) - target_icon_state = "rcircuitanim" - icon_state = "exploding" - else if(timing) - target_icon_state = "rcircuitanim" - icon_state = "urgent" - else if(!safety) - target_icon_state = "rcircuit" - icon_state = "greenlight" - else - target_icon_state = "rcircuit_off" - icon_state = "idle" - - if(!last_turf_state || target_icon_state != last_turf_state) - for(var/thing in flash_tiles) - var/turf/simulated/floor/T = thing - if(!istype(T.flooring, /decl/flooring/reinforced/circuit/red)) - flash_tiles -= T - continue - T.icon_state = target_icon_state - last_turf_state = target_icon_state diff --git a/code/game/machinery/nuke_cylinder_dispenser.dm b/code/game/machinery/nuke_cylinder_dispenser.dm deleted file mode 100644 index ffe6eed2e6d2d..0000000000000 --- a/code/game/machinery/nuke_cylinder_dispenser.dm +++ /dev/null @@ -1,76 +0,0 @@ -/obj/machinery/nuke_cylinder_dispenser - name = "nuclear cylinder storage" - desc = "It's a secure, armored storage unit embeded into the floor for storing the nuclear cylinders." - icon = 'icons/obj/machines/self_destruct.dmi' - icon_state = "base" - anchored = TRUE - density = FALSE - req_access = list(access_heads_vault) - - var/locked = TRUE - var/open = FALSE - var/list/cylinders = list() //Should only hold 6 - -/obj/machinery/nuke_cylinder_dispenser/Initialize() - . = ..() - for(var/i in 1 to 6) - cylinders += new /obj/item/nuclear_cylinder() - update_icon() - -/obj/machinery/nuke_cylinder_dispenser/emag_act(remaining_charges, mob/user, emag_source) - to_chat(user, SPAN_NOTICE("The card fails to do anything. It seems this device has an advanced encryption system.")) - return NO_EMAG_ACT - -/obj/machinery/nuke_cylinder_dispenser/physical_attack_hand(mob/user) - if(is_powered() && locked && check_access(user)) - locked = FALSE - user.visible_message("[user] unlocks \the [src].", "You unlock \the [src].") - update_icon() - add_fingerprint(user) - return TRUE - if(!locked) - open = !open - user.visible_message("[user] [open ? "opens" : "closes"] \the [src].", "You [open ? "open" : "close"] \the [src].") - update_icon() - add_fingerprint(user) - return TRUE - -/obj/machinery/nuke_cylinder_dispenser/attackby(obj/item/O, mob/user) - if(!open && is_powered() && isid(O)) - var/obj/item/card/id/id = O - if(check_access(id)) - locked = !locked - user.visible_message("[user] [locked ? "locks" : "unlocks"] \the [src].", "You [locked ? "lock" : "unlock"] \the [src].") - update_icon() - return - if(open && istype(O, /obj/item/nuclear_cylinder) && (length(cylinders) < 6)) - user.visible_message("[user] begins inserting \the [O] into storage.", "You begin inserting \the [O] into storage.") - if(do_after(user, 8 SECONDS, src, DO_PUBLIC_UNIQUE) && open && (length(cylinders) < 6) && user.unEquip(O, src)) - user.visible_message("[user] places \the [O] into storage.", "You place \the [O] into storage.") - cylinders.Add(O) - update_icon() - add_fingerprint(user) - -/obj/machinery/nuke_cylinder_dispenser/MouseDrop(atom/over) - if(!CanMouseDrop(over, usr)) - return - if(over == usr && open && length(cylinders)) - usr.visible_message("[usr] begins to extract \the [cylinders[1]].", "You begin to extract \the [cylinders[1]].") - if(do_after(usr, 7 SECONDS, src, DO_PUBLIC_UNIQUE) && open && length(cylinders)) - usr.visible_message("[usr] picks up \the [cylinders[1]].", "You pick up \the [cylinders[1]].") - usr.put_in_hands(cylinders[length(cylinders)]) - cylinders.Cut(length(cylinders)) - update_icon() - add_fingerprint(usr) - -/obj/machinery/nuke_cylinder_dispenser/on_update_icon() - overlays.Cut() - if(length(cylinders)) - overlays += "rods_[length(cylinders)]" - if(!open) - overlays += "hatch" - if(is_powered()) - if(locked) - overlays += "red_light" - else - overlays += "green_light" diff --git a/code/game/machinery/oxygen_pump.dm b/code/game/machinery/oxygen_pump.dm deleted file mode 100644 index 08a542c51aff7..0000000000000 --- a/code/game/machinery/oxygen_pump.dm +++ /dev/null @@ -1,232 +0,0 @@ -#define TANK_MAX_RELEASE_PRESSURE (3*ONE_ATMOSPHERE) -#define TANK_DEFAULT_RELEASE_PRESSURE ONE_ATMOSPHERE - -/obj/machinery/oxygen_pump - name = "emergency oxygen pump" - icon = 'icons/obj/walllocker.dmi' - desc = "A wall mounted oxygen pump with a retractable face mask that you can pull over your face in case of emergencies." - icon_state = "emerg" - - anchored = TRUE - - var/obj/item/tank/tank - var/mob/living/carbon/breather - var/obj/item/clothing/mask/breath/contained - - var/spawn_type = /obj/item/tank/oxygen_emergency_extended - var/mask_type = /obj/item/clothing/mask/breath/emergency - var/icon_state_open = "emerg_open" - var/icon_state_closed = "emerg" - - power_channel = ENVIRON - idle_power_usage = 10 - active_power_usage = 120 // No idea what the realistic amount would be. - -/obj/machinery/oxygen_pump/New() - ..() - tank = new spawn_type (src) - contained = new mask_type (src) - -/obj/machinery/oxygen_pump/Destroy() - if(breather) - breather.set_internals(null) - if(tank) - qdel(tank) - if(breather) - breather.drop_from_inventory(contained) - src.visible_message("The mask rapidly retracts just before /the [src] is destroyed!") - qdel(contained) - contained = null - breather = null - return ..() - -/obj/machinery/oxygen_pump/MouseDrop(var/mob/living/carbon/human/target, src_location, over_location) - ..() - if(istype(target) && CanMouseDrop(target)) - if(!can_apply_to_target(target, usr)) // There is no point in attempting to apply a mask if it's impossible. - return - usr.visible_message("\The [usr] begins placing the mask onto [target]..") - if(do_after(usr, 2.5 SECONDS, src, DO_PUBLIC_UNIQUE)) - if(!can_apply_to_target(target, usr)) - return - // place mask and add fingerprints - usr.visible_message("\The [usr] has placed \the mask on [target]'s mouth.") - attach_mask(target) - src.add_fingerprint(usr) - - -/obj/machinery/oxygen_pump/physical_attack_hand(mob/user) - if((stat & MAINT) && tank) - user.visible_message("\The [user] removes \the [tank] from \the [src].", "You remove \the [tank] from \the [src].") - user.put_in_hands(tank) - src.add_fingerprint(user) - tank.add_fingerprint(user) - tank = null - return TRUE - if(breather) - detach_mask(user) - return TRUE - -/obj/machinery/oxygen_pump/interface_interact(mob/user) - ui_interact(user) - return TRUE - -/obj/machinery/oxygen_pump/proc/attach_mask(var/mob/living/carbon/C) - if(C && istype(C)) - contained.dropInto(C.loc) - C.equip_to_slot(contained, slot_wear_mask) - if(tank) - tank.forceMove(C) - breather = C - -/obj/machinery/oxygen_pump/proc/set_internals(var/mob/living/carbon/C) - if(C && istype(C)) - if(!C.internal && tank) - breather.set_internals(tank) - update_use_power(POWER_USE_ACTIVE) - -/obj/machinery/oxygen_pump/proc/detach_mask(mob/user) - if(tank) - tank.forceMove(src) - breather.drop_from_inventory(contained, src) - if(user) - visible_message("\The [user] detaches \the [contained] and it rapidly retracts back into \the [src]!") - else - visible_message("\The [contained] rapidly retracts back into \the [src]!") - if(breather.internals) - breather.internals.icon_state = "internal0" - breather = null - update_use_power(POWER_USE_IDLE) - -/obj/machinery/oxygen_pump/proc/can_apply_to_target(var/mob/living/carbon/human/target, mob/user as mob) - if(!user) - user = target - // Check target validity - if(!target.organs_by_name[BP_HEAD]) - to_chat(user, "\The [target] doesn't have a head.") - return - if(!target.check_has_mouth()) - to_chat(user, "\The [target] doesn't have a mouth.") - return - if(target.wear_mask && target != breather) - to_chat(user, "\The [target] is already wearing a mask.") - return - if(target.head && (target.head.body_parts_covered & FACE)) - to_chat(user, "Remove their [target.head] first.") - return - if(!tank) - to_chat(user, "There is no tank in \the [src].") - return - if(stat & MAINT) - to_chat(user, "Please close \the maintenance hatch first.") - return - if(!Adjacent(target)) - to_chat(user, "Please stay close to \the [src].") - return - //when there is a breather: - if(breather && target != breather) - to_chat(user, "\The pump is already in use.") - return - //Checking if breather is still valid - if(target == breather && target.wear_mask != contained) - to_chat(user, "\The [target] is not using the supplied mask.") - return - return 1 - -/obj/machinery/oxygen_pump/attackby(obj/item/W as obj, mob/user as mob) - if(isScrewdriver(W)) - stat ^= MAINT - user.visible_message("\The [user] [stat & MAINT ? "opens" : "closes"] \the [src].", "You [stat & MAINT ? "open" : "close"] \the [src].") - if(stat & MAINT) - icon_state = icon_state_open - if(!stat) - icon_state = icon_state_closed - //TO-DO: Open icon - if(istype(W, /obj/item/tank) && (stat & MAINT)) - if(tank) - to_chat(user, "\The [src] already has a tank installed!") - else - if(!user.unEquip(W, src)) - return - tank = W - user.visible_message("\The [user] installs \the [tank] into \the [src].", "You install \the [tank] into \the [src].") - src.add_fingerprint(user) - if(istype(W, /obj/item/tank) && !stat) - to_chat(user, "Please open the maintenance hatch first.") - -/obj/machinery/oxygen_pump/examine(mob/user) - . = ..() - if(tank) - to_chat(user, "The meter shows [round(tank.air_contents.return_pressure())]") - else - to_chat(user, "It is missing a tank!") - - -/obj/machinery/oxygen_pump/Process() - if(breather) - if(!can_apply_to_target(breather)) - detach_mask() - else if(!breather.internal && tank) - set_internals(breather) - - -//Create rightclick to view tank settings -/obj/machinery/oxygen_pump/verb/settings() - set src in oview(1) - set category = "Object" - set name = "Show Tank Settings" - ui_interact(usr) - -//GUI Tank Setup -/obj/machinery/oxygen_pump/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1) - var/data[0] - if(!tank) - to_chat(usr, "It is missing a tank!") - data["tankPressure"] = 0 - data["releasePressure"] = 0 - data["defaultReleasePressure"] = 0 - data["maxReleasePressure"] = 0 - data["maskConnected"] = 0 - data["tankInstalled"] = 0 - // this is the data which will be sent to the ui - if(tank) - data["tankPressure"] = round(tank.air_contents.return_pressure() ? tank.air_contents.return_pressure() : 0) - data["releasePressure"] = round(tank.distribute_pressure ? tank.distribute_pressure : 0) - data["defaultReleasePressure"] = round(TANK_DEFAULT_RELEASE_PRESSURE) - data["maxReleasePressure"] = round(TANK_MAX_RELEASE_PRESSURE) - data["maskConnected"] = 0 - data["tankInstalled"] = 1 - - if(!breather) - data["maskConnected"] = 0 - if(breather) - data["maskConnected"] = 1 - - - // update the ui if it exists, returns null if no ui is passed/found - ui = SSnano.try_update_ui(user, src, ui_key, ui, data, force_open) - if (!ui) - // the ui does not exist, so we'll create a new() one - // for a list of parameters and their descriptions see the code docs in \code\modules\nano\nanoui.dm - ui = new(user, src, ui_key, "Oxygen_pump.tmpl", "Tank", 500, 300) - // when the ui is first opened this is the data it will use - ui.set_initial_data(data) - // open the new ui window - ui.open() - // auto update every Master Controller tick - ui.set_auto_update(1) - -/obj/machinery/oxygen_pump/Topic(href, href_list) - if(..()) - return 1 - - if (href_list["dist_p"]) - if (href_list["dist_p"] == "reset") - tank.distribute_pressure = TANK_DEFAULT_RELEASE_PRESSURE - else if (href_list["dist_p"] == "max") - tank.distribute_pressure = TANK_MAX_RELEASE_PRESSURE - else - var/cp = text2num(href_list["dist_p"]) - tank.distribute_pressure += cp - tank.distribute_pressure = min(max(round(tank.distribute_pressure), 0), TANK_MAX_RELEASE_PRESSURE) - return 1 diff --git a/code/game/machinery/pager.dm b/code/game/machinery/pager.dm deleted file mode 100644 index 85292f9a9655a..0000000000000 --- a/code/game/machinery/pager.dm +++ /dev/null @@ -1,77 +0,0 @@ -/obj/machinery/pager - name = "departmental pager button" - icon = 'icons/obj/objects.dmi' - icon_state = "doorbell" - desc = "A button used to request the presence of anyone in the department." - anchored = TRUE - idle_power_usage = 2 - var/acknowledged = 0 - var/last_paged - var/department = COM - var/location - -/obj/machinery/pager/Initialize() - . = ..() - if(!location) - var/area/A = get_area(src) - location = A.name - -/obj/machinery/pager/attackby(obj/item/W, mob/user as mob) - return attack_hand(user) - -/obj/machinery/pager/interface_interact(mob/living/user) - if(!CanInteract(user, GLOB.default_state)) - return FALSE - playsound(src, "button", 60) - flick("doorbellpressed",src) - activate(user) - return TRUE - -/obj/machinery/pager/proc/activate(mob/living/user) - if(!powered()) - return - var/obj/machinery/message_server/MS = get_message_server(z) - if(!MS) - return - if(world.time < last_paged + 5 SECONDS) - return - last_paged = world.time - var/paged = MS.send_to_department(department,"Department page to [location] received. Take", "*page*") - acknowledged = 0 - if(paged) - playsound(src, 'sound/machines/ping.ogg', 60) - to_chat(user,"Page received by [paged] devices.") - else - to_chat(user,"No valid destinations were found for the page.") - -/obj/machinery/pager/Topic(href, href_list) - if(..()) - return 1 - if(!powered()) - return - if(!acknowledged && href_list["ack"]) - playsound(src, 'sound/machines/ping.ogg', 60) - visible_message("Page acknowledged.") - acknowledged = 1 - var/obj/machinery/message_server/MS = get_message_server(z) - if(!MS) - return - MS.send_to_department(department,"Page to [location] was acknowledged.", "*ack*") - -/obj/machinery/pager/medical - department = MED - -/obj/machinery/pager/cargo //supply - department = SUP - -/obj/machinery/pager/security //torch security - department = SEC - -/obj/machinery/pager/science - department = SCI - -/obj/machinery/pager/engineering - department = ENG - -/obj/machinery/pager/robotics - department = ROB \ No newline at end of file diff --git a/code/game/machinery/pipe/construction.dm b/code/game/machinery/pipe/construction.dm deleted file mode 100644 index 981a8433a53ad..0000000000000 --- a/code/game/machinery/pipe/construction.dm +++ /dev/null @@ -1,243 +0,0 @@ -/*CONTENTS -Buildable pipes -Buildable meters -*/ - -/obj/item/pipe - name = "pipe" - desc = "A pipe." - var/pipename - var/connect_types = CONNECT_TYPE_REGULAR - force = 7 - icon = 'icons/obj/pipe-item.dmi' - icon_state = "simple" - randpixel = 5 - item_state = "buildpipe" - w_class = ITEM_SIZE_NORMAL - level = 2 - obj_flags = OBJ_FLAG_ROTATABLE - dir = SOUTH - var/constructed_path = /obj/machinery/atmospherics/pipe/simple/hidden - var/pipe_class = PIPE_CLASS_BINARY - var/rotate_class = PIPE_ROTATE_STANDARD - -/obj/item/pipe/Initialize(var/mapload, var/obj/machinery/atmospherics/P) - . = ..() - if(!P) - return - if(!P.dir) - set_dir(SOUTH) - else - set_dir(P.dir) - SetName(P.name) - desc = P.desc - - connect_types = P.connect_types - color = P.pipe_color - icon = P.build_icon - icon_state = P.build_icon_state - pipe_class = P.pipe_class - rotate_class = P.rotate_class - constructed_path = P.type - -//called when a turf is attacked with a pipe item -/obj/item/pipe/afterattack(turf/simulated/floor/target, mob/user, proximity) - if(!proximity) return - if(istype(target)) - user.unEquip(src, target) - else - return ..() - -/obj/item/pipe/rotate(mob/user) - . = ..() - sanitize_dir() - -/obj/item/pipe/Move() - var/old_dir = dir - . = ..() - set_dir(old_dir) - -/obj/item/pipe/proc/sanitize_dir() - switch(rotate_class) - if(PIPE_ROTATE_TWODIR) - if(dir==2) - set_dir(1) - else if(dir==8) - set_dir(4) - if(PIPE_ROTATE_ONEDIR) - set_dir(2) - -/obj/item/pipe/attack_self(mob/user as mob) - return rotate(user) - -/obj/item/pipe/proc/build_unary(var/obj/machinery/atmospherics/unary/P, var/pipefailtext) - P.atmos_init() - if (QDELETED(P)) - to_chat(usr, pipefailtext) - return 1 - P.build_network() - if(P.node) - P.node.atmos_init() - P.node.build_network() - return 0 - -/obj/item/pipe/proc/build_binary(var/obj/machinery/atmospherics/pipe/simple/P, var/pipefailtext) - P.atmos_init() - if (QDELETED(P)) - to_chat(usr, pipefailtext) - return 1 - P.build_network() - if(P.node1) - P.node1.atmos_init() - P.node1.build_network() - if(P.node2) - P.node2.atmos_init() - P.node2.build_network() - return 0 - -/obj/item/pipe/proc/build_trinary(var/obj/machinery/atmospherics/pipe/manifold/P, var/pipefailtext) - P.atmos_init() - if (QDELETED(P)) - to_chat(usr, pipefailtext) - return 1 - P.build_network() - if(P.node1) - P.node1.atmos_init() - P.node1.build_network() - if(P.node2) - P.node2.atmos_init() - P.node2.build_network() - if(P.node3) - P.node3.atmos_init() - P.node3.build_network() - return 0 - -/obj/item/pipe/proc/build_quaternary(var/obj/machinery/atmospherics/pipe/manifold4w/P, var/pipefailtext) - P.atmos_init() - if (QDELETED(P)) - to_chat(usr, pipefailtext) - return 1 - P.build_network() - if(P.node1) - P.node1.atmos_init() - P.node1.build_network() - if(P.node2) - P.node2.atmos_init() - P.node2.build_network() - if(P.node3) - P.node3.atmos_init() - P.node3.build_network() - if(P.node4) - P.node4.atmos_init() - P.node4.build_network() - return 0 - -/obj/item/pipe/attackby(var/obj/item/W as obj, var/mob/user as mob) - if(!isWrench(W)) - return ..() - if (!isturf(loc)) - return 1 - - sanitize_dir() - var/obj/machinery/atmospherics/fake_machine = constructed_path - var/pipe_dir = base_pipe_initialize_directions(dir, initial(fake_machine.connect_dir_type)) - - for(var/obj/machinery/atmospherics/M in loc) - if((M.initialize_directions & pipe_dir) && M.check_connect_types_construction(M,src)) // matches at least one direction on either type of pipe & same connection type - to_chat(user, "There is already a pipe of the same type at this location.") - return 1 - // no conflicts found - - var/pipefailtext = "There's nothing to connect this pipe section to!" //(with how the pipe code works, at least one end needs to be connected to something, otherwise the game deletes the segment)" - - //TODO: Move all of this stuff into the various pipe constructors. - var/obj/machinery/atmospherics/P = new constructed_path(get_turf(src)) - - P.pipe_color = color - if (P.colorable) - P.color = color - P.set_dir(dir) - P.set_initial_level() - - if(P.pipe_class == PIPE_CLASS_UNARY) - if(build_unary(P, pipefailtext)) - return 1 - - if(P.pipe_class == PIPE_CLASS_BINARY) - if(build_binary(P, pipefailtext)) - return 1 - - if(P.pipe_class == PIPE_CLASS_TRINARY) - if(build_trinary(P, pipefailtext)) - return 1 - - if(P.pipe_class == PIPE_CLASS_QUATERNARY) - if(build_quaternary(P, pipefailtext)) - return 1 - - if(P.pipe_class == PIPE_CLASS_OMNI) - P.atmos_init() - P.build_network() - - playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1) - user.visible_message( \ - "[user] fastens the [src].", \ - "You have fastened the [src].", \ - "You hear ratchet.") - qdel(src) // remove the pipe item - -/obj/item/pipe/injector - name = "Injector" - desc = "Passively injects air into its surroundings. Has a valve attached to it that can control flow rate." - connect_types = CONNECT_TYPE_REGULAR|CONNECT_TYPE_FUEL - icon = 'icons/atmos/injector.dmi' - icon_state = "map_injector" - constructed_path = /obj/machinery/atmospherics/unary/outlet_injector - pipe_class = PIPE_CLASS_UNARY - - var/frequency - var/id - -/obj/item/pipe/injector/New(loc, obj/machinery/atmospherics/P) - ..(loc, null) - var/obj/machinery/atmospherics/unary/outlet_injector/I = P - if(!I) - return - frequency = I.frequency - id = I.id - set_dir(I.dir) - name = I.name - desc = I.desc - connect_types = I.connect_types - -/obj/item/machine_chassis - var/build_type - -/obj/item/machine_chassis/attackby(var/obj/item/W, var/mob/user) - if(!isWrench(W)) - return ..() - var/obj/machinery/machine = new build_type(get_turf(src), dir, FALSE) - machine.apply_component_presets() - machine.RefreshParts() - if(machine.construct_state) - machine.construct_state.post_construct(machine) - playsound(loc, 'sound/items/Ratchet.ogg', 50, 1) - to_chat(user, "You have fastened the [src].") - qdel(src) - -/obj/item/machine_chassis/air_sensor - name = "gas sensor" - desc = "A sensor. It detects gasses." - icon = 'icons/obj/stationobjs.dmi' - icon_state = "gsensor1" - w_class = ITEM_SIZE_LARGE - build_type = /obj/machinery/air_sensor - -/obj/item/machine_chassis/pipe_meter - name = "meter" - desc = "A meter that can measure gas inside pipes or in the general area." - icon = 'icons/obj/pipe-item.dmi' - icon_state = "meter" - item_state = "buildpipe" - w_class = ITEM_SIZE_LARGE - build_type = /obj/machinery/meter \ No newline at end of file diff --git a/code/game/machinery/pipe/pipe_datums/device_pipe_datums.dm b/code/game/machinery/pipe/pipe_datums/device_pipe_datums.dm deleted file mode 100644 index 8074cafe74b49..0000000000000 --- a/code/game/machinery/pipe/pipe_datums/device_pipe_datums.dm +++ /dev/null @@ -1,226 +0,0 @@ -/datum/pipe/pipe_dispenser/device - category = "Devices" - colorable = FALSE - connect_types = CONNECT_TYPE_REGULAR|CONNECT_TYPE_SUPPLY|CONNECT_TYPE_SCRUBBER|CONNECT_TYPE_FUEL - pipe_color = PIPE_COLOR_WHITE - -/datum/pipe/pipe_dispenser/device/universaladapter - name = "universal pipe adapter" - desc = "an adapter designed to fit any type of pipe." - build_path = /obj/item/pipe - connect_types = CONNECT_TYPE_REGULAR|CONNECT_TYPE_SUPPLY|CONNECT_TYPE_SCRUBBER|CONNECT_TYPE_FUEL|CONNECT_TYPE_HE - build_icon_state = "universal" - constructed_path = /obj/machinery/atmospherics/pipe/simple/hidden/universal - pipe_class = PIPE_CLASS_BINARY - rotate_class = PIPE_ROTATE_TWODIR - -/datum/pipe/pipe_dispenser/device/connector - name = "connector" - desc = "a connector for canisters." - build_path = /obj/item/pipe - connect_types = CONNECT_TYPE_REGULAR|CONNECT_TYPE_FUEL - build_icon_state = "connector" - constructed_path = /obj/machinery/atmospherics/portables_connector - pipe_class = PIPE_CLASS_UNARY - -/datum/pipe/pipe_dispenser/device/unaryvent - name = "unary vent" - desc = "a unary vent" - build_path = /obj/item/pipe - connect_types = CONNECT_TYPE_REGULAR|CONNECT_TYPE_SUPPLY|CONNECT_TYPE_FUEL - build_icon_state = "uvent" - constructed_path = /obj/machinery/atmospherics/unary/vent_pump - pipe_class = PIPE_CLASS_UNARY - -/datum/pipe/pipe_dispenser/device/unaryvent/large - name = "high volume unary vent" - desc = "a high volume unary vent" - constructed_path = /obj/machinery/atmospherics/unary/vent_pump/high_volume - -/datum/pipe/pipe_dispenser/device/gaspump - name = "gas pump" - desc = "a pump. For gasses." - build_path = /obj/item/pipe - connect_types = CONNECT_TYPE_REGULAR|CONNECT_TYPE_FUEL - build_icon_state = "pump" - constructed_path = /obj/machinery/atmospherics/binary/pump - pipe_class = PIPE_CLASS_BINARY - -/datum/pipe/pipe_dispenser/device/pressureregulator - name = "pressure regulator" - desc = "a device that regulates pressure." - build_path = /obj/item/pipe - connect_types = CONNECT_TYPE_REGULAR|CONNECT_TYPE_FUEL - build_icon_state = "passivegate" - constructed_path = /obj/machinery/atmospherics/binary/passive_gate - pipe_class = PIPE_CLASS_BINARY - -/datum/pipe/pipe_dispenser/device/hpgaspump - name = "high powered gas pump" - desc = "a high powered pump. For gasses." - build_path = /obj/item/pipe - connect_types = CONNECT_TYPE_REGULAR|CONNECT_TYPE_FUEL - build_icon_state = "volumepump" - constructed_path = /obj/machinery/atmospherics/binary/pump/high_power - pipe_class = PIPE_CLASS_BINARY - -/datum/pipe/pipe_dispenser/device/scrubber - name = "scrubber" - desc = "scrubs out undesirable gasses" - build_path = /obj/item/pipe - connect_types = CONNECT_TYPE_REGULAR|CONNECT_TYPE_SCRUBBER - build_icon_state = "scrubber" - constructed_path = /obj/machinery/atmospherics/unary/vent_scrubber - pipe_class = PIPE_CLASS_UNARY - -/datum/pipe/pipe_dispenser/device/meter - name = "meter" - desc = "a meter that monitors pressure and temperature on the attached pipe." - build_path = /obj/item/machine_chassis/pipe_meter - pipe_color = null - connect_types = null - colorable = FALSE - build_icon_state = "meter" - constructed_path = /obj/machinery/meter - pipe_class = PIPE_CLASS_OTHER - -/datum/pipe/pipe_dispenser/device/omnimixer - name = "omni gas mixer" - desc = "a device that takes in two or three gasses and mixes them into a precise output." - build_path = /obj/item/pipe - connect_types = CONNECT_TYPE_REGULAR|CONNECT_TYPE_FUEL - build_icon_state = "omni_mixer" - constructed_path = /obj/machinery/atmospherics/omni/mixer - pipe_class = PIPE_CLASS_OMNI - -/datum/pipe/pipe_dispenser/device/omnifilter - name = "omni gas filter" - desc = "a device that filters out undesireable elements" - build_path = /obj/item/pipe - connect_types = CONNECT_TYPE_REGULAR|CONNECT_TYPE_FUEL - build_icon_state = "omni_filter" - constructed_path = /obj/machinery/atmospherics/omni/filter - pipe_class = PIPE_CLASS_OMNI - -/datum/pipe/pipe_dispenser/device/manualvalve - name = "manual valve" - desc = "a valve that has to be manipulated by hand" - build_path = /obj/item/pipe - build_icon_state = "mvalve" - constructed_path = /obj/machinery/atmospherics/valve - pipe_class = PIPE_CLASS_BINARY - rotate_class = PIPE_ROTATE_TWODIR - -/datum/pipe/pipe_dispenser/device/digitalvalve - name = "digital valve" - desc = "a valve controlled electronically" - build_path = /obj/item/pipe - build_icon_state = "dvalve" - constructed_path = /obj/machinery/atmospherics/valve/digital - pipe_class = PIPE_CLASS_BINARY - rotate_class = PIPE_ROTATE_TWODIR - -/datum/pipe/pipe_dispenser/device/mtvalve - name = "manual t-valve" - desc = "a three-way valve. T-shaped." - build_path = /obj/item/pipe - build_icon_state = "mtvalve" - constructed_path = /obj/machinery/atmospherics/tvalve - pipe_class = PIPE_CLASS_TRINARY - -/datum/pipe/pipe_dispenser/device/mtvalvem - name = "manual t-valve (mirrored)" - desc = "a three-way valve. T-shaped." - build_path = /obj/item/pipe - build_icon_state = "mtvalvem" - constructed_path = /obj/machinery/atmospherics/tvalve/mirrored - pipe_class = PIPE_CLASS_TRINARY - -/datum/pipe/pipe_dispenser/device/dtvalve - name = "digital t-valve" - desc = "a three-way valve. T-shaped. This one can be controlled electronically." - build_path = /obj/item/pipe - build_icon = 'icons/atmos/digital_tvalve.dmi' - build_icon_state = "map_tvalve0" - constructed_path = /obj/machinery/atmospherics/tvalve/digital - pipe_class = PIPE_CLASS_TRINARY - -/datum/pipe/pipe_dispenser/device/dtvalvem - name = "digital t-valve (mirrored)" - desc = "a three-way valve. T-shaped. This one can be controlled electronically." - build_path = /obj/item/pipe - build_icon = 'icons/atmos/digital_tvalve.dmi' - build_icon_state = "map_tvalvem0" - constructed_path = /obj/machinery/atmospherics/tvalve/mirrored/digital - pipe_class = PIPE_CLASS_TRINARY - -/datum/pipe/pipe_dispenser/device/air_sensor - name = "gas sensor" - desc = "a sensor. It detects gasses." - build_path = /obj/item/machine_chassis/air_sensor - build_icon_state = "gsensor1" - build_icon = 'icons/obj/stationobjs.dmi' - pipe_color = null - connect_types = null - colorable = FALSE - constructed_path = /obj/machinery/air_sensor - pipe_class = PIPE_CLASS_OTHER - -/datum/pipe/pipe_dispenser/device/outlet_injector - name = "injector" - desc = "Passively injects gas into its surroundings. Has a valve attached to it that can control flow rate." - build_icon = 'icons/atmos/injector.dmi' - build_icon_state = "map_injector" - build_path = /obj/item/pipe - connect_types = CONNECT_TYPE_REGULAR|CONNECT_TYPE_FUEL - colorable = FALSE - pipe_color = null - constructed_path = /obj/machinery/atmospherics/unary/outlet_injector - pipe_class = PIPE_CLASS_UNARY - -/datum/pipe/pipe_dispenser/device/drain - name = "gutter" - desc = "You probably can't get sucked down the plughole." - build_icon = 'icons/obj/drain.dmi' - build_icon_state = "drain" - build_path = /obj/item/drain - connect_types = null - colorable = FALSE - pipe_color = null - constructed_path = /obj/structure/hygiene/drain - pipe_class = PIPE_CLASS_OTHER - -/datum/pipe/pipe_dispenser/device/drain/bath - name = "sealable gutter" - desc = "You probably can't get sucked down the plughole. Specially not when it's closed!" - build_icon = 'icons/obj/drain.dmi' - build_icon_state = "drain_bath" - build_path = /obj/item/drain/bath - connect_types = null - colorable = FALSE - pipe_color = null - constructed_path = /obj/structure/hygiene/drain/bath - pipe_class = PIPE_CLASS_OTHER - -/datum/pipe/pipe_dispenser/device/tank - name = "pressure tank" - desc = "A large vessel containing pressurized gas." - build_icon = 'icons/atmos/tank.dmi' - build_icon_state = "air" - build_path = /obj/item/pipe/tank - connect_types = CONNECT_TYPE_REGULAR|CONNECT_TYPE_REGULAR|CONNECT_TYPE_SCRUBBER|CONNECT_TYPE_FUEL - constructed_path = /obj/machinery/atmospherics/unary/tank - pipe_class = PIPE_CLASS_UNARY - colorable = TRUE - -/datum/pipe/pipe_dispenser/device/pipesparker - name = "pipe sparker" - desc = "A pipe sparker. Useful for starting pipe fires." - build_icon = 'icons/atmos/pipe-sparker.dmi' - build_icon_state = "pipe-igniter" - build_path = /obj/item/pipe - connect_types = CONNECT_TYPE_REGULAR|CONNECT_TYPE_FUEL - constructed_path = /obj/machinery/atmospherics/pipe/cap/sparker/visible - pipe_class = PIPE_CLASS_UNARY - pipe_color = null - colorable = FALSE \ No newline at end of file diff --git a/code/game/machinery/pipe/pipe_datums/disposal_pipe_datums.dm b/code/game/machinery/pipe/pipe_datums/disposal_pipe_datums.dm deleted file mode 100644 index fea3fcf361d7a..0000000000000 --- a/code/game/machinery/pipe/pipe_datums/disposal_pipe_datums.dm +++ /dev/null @@ -1,182 +0,0 @@ -/datum/pipe/disposal_dispenser - name = "Disposal pipe. You should never see this." - pipe_type = null - pipe_color = null - connect_types = null - colorable = FALSE - constructed_path = /obj/structure/disposalpipe/segment - var/turn = DISPOSAL_FLIP_NONE - -/datum/pipe/disposal_dispenser/simple/straight - name = "disposal pipe segment" - desc = "A huge pipe segment used for constructing disposal systems." - build_icon = 'icons/obj/pipes/disposal.dmi' - build_icon_state = "pipe-s" - build_path = /obj/structure/disposalconstruct - turn = DISPOSAL_FLIP_FLIP - constructed_path = /obj/structure/disposalpipe/segment - -/datum/pipe/disposal_dispenser/simple/bent - name = "bent disposal pipe segment" - desc = "A huge pipe segment used for constructing disposal systems." - build_icon = 'icons/obj/pipes/disposal.dmi' - build_icon_state = "pipe-c" - build_path = /obj/structure/disposalconstruct - turn = DISPOSAL_FLIP_RIGHT - constructed_path = /obj/structure/disposalpipe/segment/bent - -/datum/pipe/disposal_dispenser/simple/junction - name = "disposal pipe junction" - desc = "A huge pipe segment used for constructing disposal systems." - build_icon = 'icons/obj/pipes/disposal.dmi' - build_icon_state = "pipe-j1" - build_path = /obj/structure/disposalconstruct - turn = DISPOSAL_FLIP_RIGHT|DISPOSAL_FLIP_FLIP - constructed_path = /obj/structure/disposalpipe/junction - -/datum/pipe/disposal_dispenser/simple/junctionm - name = "disposal pipe junction (mirrored)" - desc = "A huge pipe segment used for constructing disposal systems." - build_icon = 'icons/obj/pipes/disposal.dmi' - build_icon_state = "pipe-j2" - build_path = /obj/structure/disposalconstruct - turn = DISPOSAL_FLIP_LEFT|DISPOSAL_FLIP_FLIP - constructed_path = /obj/structure/disposalpipe/junction/mirrored - -/datum/pipe/disposal_dispenser/simple/yjunction - name = "disposal pipe y-junction" - desc = "A huge pipe segment used for constructing disposal systems." - build_icon = 'icons/obj/pipes/disposal.dmi' - build_icon_state = "pipe-y" - build_path = /obj/structure/disposalconstruct - turn = DISPOSAL_FLIP_LEFT|DISPOSAL_FLIP_RIGHT - constructed_path = /obj/structure/disposalpipe/junction - -/datum/pipe/disposal_dispenser/simple/trunk - name = "disposal pipe trunk" - desc = "A huge pipe segment used for constructing disposal systems." - build_icon = 'icons/obj/pipes/disposal.dmi' - build_icon_state = "pipe-t" - build_path = /obj/structure/disposalconstruct - constructed_path = /obj/structure/disposalpipe/trunk - -/datum/pipe/disposal_dispenser/simple/up - name = "disposal pipe upwards segment" - desc = "A huge pipe segment used for constructing disposal systems." - build_icon = 'icons/obj/pipes/disposal.dmi' - build_icon_state = "pipe-u" - build_path = /obj/structure/disposalconstruct - constructed_path = /obj/structure/disposalpipe/up - -/datum/pipe/disposal_dispenser/simple/down - name = "disposal pipe downwards segment" - desc = "A huge pipe segment used for constructing disposal systems." - build_icon = 'icons/obj/pipes/disposal.dmi' - build_icon_state = "pipe-d" - build_path = /obj/structure/disposalconstruct - constructed_path = /obj/structure/disposalpipe/down - -/datum/pipe/disposal_dispenser/device/bin - name = "disposal bin" - desc = "A bin used to dispose of trash." - build_icon = 'icons/obj/pipes/disposal.dmi' - build_icon_state = "disposal" - build_path = /obj/structure/disposalconstruct/machine - constructed_path = /obj/machinery/disposal - -/datum/pipe/disposal_dispenser/device/outlet - name = "disposal outlet" - desc = "an outlet that ejects things from a disposal network." - build_icon = 'icons/obj/pipes/disposal.dmi' - build_icon_state = "outlet" - build_path = /obj/structure/disposalconstruct/machine/outlet - constructed_path = /obj/structure/disposaloutlet - -/datum/pipe/disposal_dispenser/device/chute - name = "disposal chute" - desc = "A chute to put things into a disposal network." - build_icon = 'icons/obj/pipes/disposal.dmi' - build_icon_state = "intake" - build_path = /obj/structure/disposalconstruct - constructed_path = /obj/machinery/disposal/deliveryChute - -/datum/pipe/disposal_dispenser/device/sorting - name = "disposal sorter" - desc = "Sorts things in a disposal system" - build_icon = 'icons/obj/pipes/disposal.dmi' - build_icon_state = "pipe-j1s" - build_path = /obj/structure/disposalconstruct - turn = DISPOSAL_FLIP_RIGHT|DISPOSAL_FLIP_FLIP - constructed_path = /obj/structure/disposalpipe/sortjunction - -/datum/pipe/disposal_dispenser/device/sorting/wildcard - name = "wildcard disposal sorter" - desc = "Sorts things in a disposal system" - build_icon = 'icons/obj/pipes/disposal.dmi' - build_icon_state = "pipe-j1s" - build_path = /obj/structure/disposalconstruct - turn = DISPOSAL_FLIP_RIGHT|DISPOSAL_FLIP_FLIP - constructed_path = /obj/structure/disposalpipe/sortjunction/wildcard - -/datum/pipe/disposal_dispenser/device/sorting/untagged - name = "untagged disposal sorter" - desc = "Sorts things in a disposal system" - build_icon = 'icons/obj/pipes/disposal.dmi' - build_icon_state = "pipe-j1s" - build_path = /obj/structure/disposalconstruct - turn = DISPOSAL_FLIP_RIGHT|DISPOSAL_FLIP_FLIP - constructed_path = /obj/structure/disposalpipe/sortjunction/untagged - -/datum/pipe/disposal_dispenser/device/sortingm - name = "disposal sorter (mirrored)" - desc = "Sorts things in a disposal system" - build_icon = 'icons/obj/pipes/disposal.dmi' - build_icon_state = "pipe-j2s" - build_path = /obj/structure/disposalconstruct - turn = DISPOSAL_FLIP_LEFT|DISPOSAL_FLIP_FLIP - constructed_path = /obj/structure/disposalpipe/sortjunction/flipped - -/datum/pipe/disposal_dispenser/device/sorting/wildcardm - name = "wildcard disposal sorter (mirrored)" - desc = "Sorts things in a disposal system" - build_icon = 'icons/obj/pipes/disposal.dmi' - build_icon_state = "pipe-j2s" - build_path = /obj/structure/disposalconstruct - turn = DISPOSAL_FLIP_LEFT|DISPOSAL_FLIP_FLIP - constructed_path = /obj/structure/disposalpipe/sortjunction/wildcard/flipped - -/datum/pipe/disposal_dispenser/device/sorting/untaggedm - name = "untagged disposal sorter (mirrored)" - desc = "Sorts things in a disposal system" - build_icon = 'icons/obj/pipes/disposal.dmi' - build_icon_state = "pipe-j2s" - build_path = /obj/structure/disposalconstruct - turn = DISPOSAL_FLIP_LEFT|DISPOSAL_FLIP_FLIP - constructed_path = /obj/structure/disposalpipe/sortjunction/untagged/flipped - -/datum/pipe/disposal_dispenser/device/tagger - name = "disposal tagger" - desc = "It tags things." - build_icon = 'icons/obj/pipes/disposal.dmi' - build_icon_state = "pipe-tagger" - build_path = /obj/structure/disposalconstruct - turn = DISPOSAL_FLIP_FLIP - constructed_path = /obj/structure/disposalpipe/tagger - -/datum/pipe/disposal_dispenser/device/tagger/partial - name = "disposal partial tagger" - desc = "It tags things." - build_icon = 'icons/obj/pipes/disposal.dmi' - build_icon_state = "pipe-tagger-partial" - build_path = /obj/structure/disposalconstruct - turn = DISPOSAL_FLIP_FLIP - constructed_path = /obj/structure/disposalpipe/tagger/partial - -/datum/pipe/disposal_dispenser/device/diversion - name = "disposal diverter" - desc = "A huge pipe segment used for constructing disposal systems." - build_icon = 'icons/obj/pipes/disposal.dmi' - build_icon_state = "pipe-j1s" - build_path = /obj/structure/disposalconstruct - turn = DISPOSAL_FLIP_FLIP | DISPOSAL_FLIP_RIGHT - constructed_path = /obj/structure/disposalpipe/diversion_junction \ No newline at end of file diff --git a/code/game/machinery/pipe/pipe_datums/pipe_datum_base.dm b/code/game/machinery/pipe/pipe_datums/pipe_datum_base.dm deleted file mode 100644 index 9b35f6128e98e..0000000000000 --- a/code/game/machinery/pipe/pipe_datums/pipe_datum_base.dm +++ /dev/null @@ -1,94 +0,0 @@ -GLOBAL_LIST_EMPTY(all_pipe_datums_by_category) -GLOBAL_LIST_EMPTY(all_disposal_pipe_datums_by_category) - -/proc/initialize_pipe_datum_category_list() - var/list/categories = list( - /datum/pipe/pipe_dispenser/simple, - /datum/pipe/pipe_dispenser/supply, - /datum/pipe/pipe_dispenser/scrubber, - /datum/pipe/pipe_dispenser/fuel, - /datum/pipe/pipe_dispenser/he, - /datum/pipe/pipe_dispenser/device - ) - for(var/category_type in categories) - for(var/recipe_type in subtypesof(category_type)) - LAZYADD(GLOB.all_pipe_datums_by_category[category_type], new recipe_type()) - - var/disposal_categories = list( - /datum/pipe/disposal_dispenser/simple, - /datum/pipe/disposal_dispenser/device) - - for(var/category_type in disposal_categories) - for(var/recipe_type in subtypesof(category_type)) - LAZYADD(GLOB.all_disposal_pipe_datums_by_category[category_type], new recipe_type()) - - -/datum/pipe - var/name = "pipe" //item's name - var/desc = "a pipe" //item description - var/build_path = /obj/item/pipe //path of the object that's being created - var/category = "general" //Allows for easy sorting in the menu. - var/pipe_type //What sort of pipe this is. Used by disposals currently. - var/connect_types = CONNECT_TYPE_REGULAR //what sort of connection this has - var/pipe_color = PIPE_COLOR_WHITE //what color the pipe should be by default - var/build_icon_state = "simple" //Which icon state to use when creating a new pipe item. - var/build_icon = 'icons/obj/pipe-item.dmi' //Which file the icon is located at. - var/dir = SOUTH //Direction the pipe faces - var/colorable = TRUE //Can this pipe be colored? - var/constructed_path = /obj/machinery/atmospherics/pipe/simple/hidden //What's the final form of this item? - var/pipe_class = PIPE_CLASS_BINARY //The node classification for this item. - var/rotate_class = PIPE_ROTATE_STANDARD //How it behaves when rotated - -//========== -//Procedures -//========== - -/datum/pipe/New() - ..() - AssemblePipeInfo() - -//These procs are used in subtypes for assigning names and descriptions dynamically -/datum/pipe/proc/AssemblePipeInfo() - AssemblePipeName() - AssemblePipeDesc() - -/datum/pipe/proc/AssemblePipeName() - if(!name && build_path) //Get name from build path if posible - var/atom/movable/A = build_path - name = initial(A.name) - -/datum/pipe/proc/AssemblePipeDesc() - if(!desc) //Try to make up a nice description if we don't have one - desc = "\A [name]." - -/datum/pipe/proc/Build(var/datum/pipe/D, var/loc, var/pipe_color = PIPE_COLOR_WHITE) - if(D.build_path) - var/obj/item/pipe/new_item = new build_path(loc) - if(istype(new_item)) - if(D.connect_types != null) - new_item.connect_types = D.connect_types - new_item.pipe_class = D.pipe_class - new_item.rotate_class = D.rotate_class - new_item.constructed_path = D.constructed_path - if(D.colorable) - new_item.color = pipe_color - else if (D.pipe_color != null) - new_item.color = D.pipe_color - new_item.SetName(D.name) - new_item.desc = D.desc - new_item.set_dir(D.dir) - new_item.icon = D.build_icon - new_item.icon_state = D.build_icon_state - -/datum/pipe/disposal_dispenser/Build(var/datum/pipe/disposal_dispenser/D, var/loc, var/pipe_color = PIPE_COLOR_GREY) - if(D.build_path) - var/obj/structure/disposalconstruct/new_item = new build_path(loc) - new_item.SetName(D.name) - new_item.desc = D.desc - new_item.set_dir(D.dir) - new_item.icon = D.build_icon - new_item.built_icon_state = D.build_icon_state - new_item.set_density(1) - new_item.turn = D.turn - new_item.constructed_path = D.constructed_path - new_item.update_icon() \ No newline at end of file diff --git a/code/game/machinery/pipe/pipe_datums/pipe_datums.dm b/code/game/machinery/pipe/pipe_datums/pipe_datums.dm deleted file mode 100644 index fad822f175076..0000000000000 --- a/code/game/machinery/pipe/pipe_datums/pipe_datums.dm +++ /dev/null @@ -1,337 +0,0 @@ -#define PIPE_STRAIGHT 2 -#define PIPE_BENT 5 - -/datum/pipe/pipe_dispenser/simple - category = "Regular Pipes" - colorable = TRUE - connect_types = CONNECT_TYPE_REGULAR - pipe_color = PIPE_COLOR_GREY - constructed_path = /obj/machinery/atmospherics/pipe/simple/hidden - pipe_class = PIPE_CLASS_BINARY - -/datum/pipe/pipe_dispenser/simple/straight - name = "a pipe fitting" - desc = "a straight pipe segment." - build_path = /obj/item/pipe - rotate_class = PIPE_ROTATE_TWODIR - -/datum/pipe/pipe_dispenser/simple/bent - name = "bent pipe fitting" - desc = "a bent pipe segment" - build_path = /obj/item/pipe - dir = PIPE_BENT - rotate_class = PIPE_ROTATE_TWODIR - -/datum/pipe/pipe_dispenser/simple/manifold - name = "pipe manifold fitting" - desc = "a pipe manifold segment" - build_path = /obj/item/pipe - build_icon_state = "manifold" - constructed_path = /obj/machinery/atmospherics/pipe/manifold/hidden - pipe_class = PIPE_CLASS_TRINARY - -/datum/pipe/pipe_dispenser/simple/manifold4w - name = "four-way pipe manifold fitting" - desc = "a four-way pipe manifold segment" - build_path = /obj/item/pipe - build_icon_state = "manifold4w" - constructed_path = /obj/machinery/atmospherics/pipe/manifold4w/hidden - pipe_class = PIPE_CLASS_QUATERNARY - rotate_class = PIPE_ROTATE_ONEDIR - -/datum/pipe/pipe_dispenser/simple/cap - name = "pipe cap fitting" - desc = "a pipe cap for a regular pipe." - build_path = /obj/item/pipe - build_icon_state = "cap" - constructed_path = /obj/machinery/atmospherics/pipe/cap/hidden - pipe_class = PIPE_CLASS_UNARY - -/datum/pipe/pipe_dispenser/simple/up - name = "upward pipe fitting" - desc = "an upward pipe." - build_path = /obj/item/pipe - build_icon = 'icons/obj/structures.dmi' - build_icon_state = "up" - constructed_path = /obj/machinery/atmospherics/pipe/zpipe/up - -/datum/pipe/pipe_dispenser/simple/down - name = "downward pipe fitting" - desc = "a downward pipe." - build_path = /obj/item/pipe - build_icon = 'icons/obj/structures.dmi' - build_icon_state = "down" - constructed_path = /obj/machinery/atmospherics/pipe/zpipe/down - -/datum/pipe/pipe_dispenser/simple/autoshutoff - name = "automatic shutoff valve" - desc = "a valve that can automatically shut itself off" - build_path = /obj/item/pipe - build_icon_state = "svalve" - colorable = FALSE - pipe_color = PIPE_COLOR_WHITE - constructed_path = /obj/machinery/atmospherics/valve/shutoff - pipe_class = PIPE_CLASS_BINARY - rotate_class = PIPE_ROTATE_TWODIR - -/datum/pipe/pipe_dispenser/supply - category = "Supply Pipes" - colorable = FALSE - connect_types = CONNECT_TYPE_SUPPLY - pipe_color = PIPE_COLOR_BLUE - constructed_path = /obj/machinery/atmospherics/pipe/simple/hidden/supply - pipe_class = PIPE_CLASS_BINARY - -/datum/pipe/pipe_dispenser/supply/straight - name = "supply pipe fitting" - desc = "a straight supply pipe segment." - build_path = /obj/item/pipe - rotate_class = PIPE_ROTATE_TWODIR - -/datum/pipe/pipe_dispenser/supply/bent - name = "bent supply pipe fitting" - desc = "a bent supply pipe segment" - build_path = /obj/item/pipe - dir = PIPE_BENT - rotate_class = PIPE_ROTATE_TWODIR - -/datum/pipe/pipe_dispenser/supply/manifold - name = "supply pipe manifold fitting" - desc = "a supply pipe manifold segment" - build_path = /obj/item/pipe - build_icon_state = "manifold" - constructed_path = /obj/machinery/atmospherics/pipe/manifold/hidden/supply - pipe_class = PIPE_CLASS_TRINARY - -/datum/pipe/pipe_dispenser/supply/manifold4w - name = "four-way supply pipe manifold fitting" - desc = "a four-way supply pipe manifold segment" - build_path = /obj/item/pipe - build_icon_state = "manifold4w" - constructed_path = /obj/machinery/atmospherics/pipe/manifold4w/hidden/supply - pipe_class = PIPE_CLASS_QUATERNARY - rotate_class = PIPE_ROTATE_ONEDIR - -/datum/pipe/pipe_dispenser/supply/cap - name = "supply pipe cap fitting" - desc = "a pipe cap for a regular pipe." - build_path = /obj/item/pipe - build_icon_state = "cap" - constructed_path = /obj/machinery/atmospherics/pipe/cap/hidden/supply - pipe_class = PIPE_CLASS_UNARY - -/datum/pipe/pipe_dispenser/supply/up - name = "upward supply pipe fitting" - desc = "an upward supply pipe segment." - build_path = /obj/item/pipe - build_icon = 'icons/obj/structures.dmi' - build_icon_state = "up" - constructed_path = /obj/machinery/atmospherics/pipe/zpipe/up/supply - -/datum/pipe/pipe_dispenser/supply/down - name = "downward supply pipe fitting" - desc = "a downward supply pipe segment." - build_path = /obj/item/pipe - build_icon = 'icons/obj/structures.dmi' - build_icon_state = "down" - constructed_path = /obj/machinery/atmospherics/pipe/zpipe/down/supply - -/datum/pipe/pipe_dispenser/supply/autoshutoff - name = "supply shutoff valve" - desc = "a valve that can automatically shut itself off" - build_path = /obj/item/pipe - build_icon_state = "svalve" - colorable = FALSE - pipe_color = PIPE_COLOR_WHITE - constructed_path = /obj/machinery/atmospherics/valve/shutoff/supply - pipe_class = PIPE_CLASS_BINARY - rotate_class = PIPE_ROTATE_TWODIR - -/datum/pipe/pipe_dispenser/scrubber - category = "Scrubber Pipes" - colorable = FALSE - connect_types = CONNECT_TYPE_SCRUBBER - pipe_color = PIPE_COLOR_RED - constructed_path = /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers - pipe_class = PIPE_CLASS_BINARY - -/datum/pipe/pipe_dispenser/scrubber/straight - name = "scrubber pipe fitting" - desc = "a straight scrubber pipe segment" - build_path = /obj/item/pipe - rotate_class = PIPE_ROTATE_TWODIR - -/datum/pipe/pipe_dispenser/scrubber/bent - name = "bent scrubber pipe fitting" - desc = "a bent scrubber pipe segment" - build_path = /obj/item/pipe - rotate_class = PIPE_ROTATE_TWODIR - dir = PIPE_BENT - -/datum/pipe/pipe_dispenser/scrubber/manifold - name = "scrubber pipe manifold fitting" - desc = "a scrubber pipe manifold segment" - build_path = /obj/item/pipe - build_icon_state = "manifold" - constructed_path = /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers - pipe_class = PIPE_CLASS_TRINARY - -/datum/pipe/pipe_dispenser/scrubber/manifold4w - name = "four-way scrubber pipe manifold fitting" - desc = "a four-way scrubber pipe manifold segment" - build_path = /obj/item/pipe - build_icon_state = "manifold4w" - constructed_path = /obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers - pipe_class = PIPE_CLASS_QUATERNARY - rotate_class = PIPE_ROTATE_ONEDIR - -/datum/pipe/pipe_dispenser/scrubber/cap - name = "scrubber pipe cap fitting" - desc = "a pipe cap for a scrubber pipe." - build_path = /obj/item/pipe - build_icon_state = "cap" - constructed_path = /obj/machinery/atmospherics/pipe/cap/hidden/scrubbers - -/datum/pipe/pipe_dispenser/scrubber/up - name = "upward scrubber pipe fitting" - desc = "an upward scrubber pipe segment." - build_path = /obj/item/pipe - build_icon = 'icons/obj/structures.dmi' - build_icon_state = "up" - constructed_path = /obj/machinery/atmospherics/pipe/zpipe/up/scrubbers - -/datum/pipe/pipe_dispenser/scrubber/down - name = "downward scrubber pipe fitting" - desc = "a downward scrubber pipe segment." - build_path = /obj/item/pipe - build_icon = 'icons/obj/structures.dmi' - build_icon_state = "down" - constructed_path = /obj/machinery/atmospherics/pipe/zpipe/down/scrubbers - -/datum/pipe/pipe_dispenser/scrubber/autoshutoff - name = "scrubber shutoff valve" - desc = "a valve that can automatically shut itself off" - build_path = /obj/item/pipe - build_icon_state = "svalve" - colorable = FALSE - pipe_color = PIPE_COLOR_WHITE - constructed_path = /obj/machinery/atmospherics/valve/shutoff/scrubbers - pipe_class = PIPE_CLASS_BINARY - rotate_class = PIPE_ROTATE_TWODIR - -/datum/pipe/pipe_dispenser/fuel - category = "Fuel Pipes" - colorable = FALSE - pipe_color = PIPE_COLOR_ORANGE - connect_types = CONNECT_TYPE_FUEL - constructed_path = /obj/machinery/atmospherics/pipe/simple/hidden/fuel - pipe_class = PIPE_CLASS_BINARY - -/datum/pipe/pipe_dispenser/fuel/straight - name = "fuel pipe fitting" - desc = "a striaght fuel pipe segment" - build_path = /obj/item/pipe - rotate_class = PIPE_ROTATE_TWODIR - -/datum/pipe/pipe_dispenser/fuel/bent - name = "bent fuel pipe fitting" - desc = "a bent fuel pipe segment" - build_path = /obj/item/pipe - rotate_class = PIPE_ROTATE_TWODIR - dir = PIPE_BENT - -/datum/pipe/pipe_dispenser/fuel/manifold - name = "fuel pipe manifold fitting" - desc = "a fuel pipe manifold segment" - build_path = /obj/item/pipe - build_icon_state = "manifold" - constructed_path = /obj/machinery/atmospherics/pipe/manifold/hidden/fuel - pipe_class = PIPE_CLASS_TRINARY - -/datum/pipe/pipe_dispenser/fuel/manifold4w - name = "four-way supply pipe manifold fitting" - desc = "a four-way fuel pipe manifold segment" - build_path = /obj/item/pipe - build_icon_state = "manifold4w" - constructed_path = /obj/machinery/atmospherics/pipe/manifold4w/hidden/fuel - pipe_class = PIPE_CLASS_QUATERNARY - rotate_class = PIPE_ROTATE_ONEDIR - -/datum/pipe/pipe_dispenser/fuel/cap - name = "fuel pipe cap fitting" - desc = "a pipe cap for a fuel pipe." - build_path = /obj/item/pipe - build_icon_state = "cap" - constructed_path = /obj/machinery/atmospherics/pipe/cap/hidden/fuel - pipe_class = PIPE_CLASS_UNARY - -/datum/pipe/pipe_dispenser/fuel/up - name = "upward fuel pipe fitting" - desc = "an upward fuel pipe segment." - build_path = /obj/item/pipe - build_icon = 'icons/obj/structures.dmi' - build_icon_state = "up" - constructed_path = /obj/machinery/atmospherics/pipe/zpipe/up/fuel - -/datum/pipe/pipe_dispenser/fuel/down - name = "downward fuel pipe fitting" - desc = "a downward fuel pipe segment." - build_path = /obj/item/pipe - build_icon = 'icons/obj/structures.dmi' - build_icon_state = "down" - constructed_path = /obj/machinery/atmospherics/pipe/zpipe/down/fuel - -/datum/pipe/pipe_dispenser/fuel/autoshutoff - name = "fuel shutoff valve" - desc = "a valve that can automatically shut itself off" - build_path = /obj/item/pipe - build_icon_state = "svalve" - colorable = FALSE - pipe_color = PIPE_COLOR_WHITE - constructed_path = /obj/machinery/atmospherics/valve/shutoff/fuel - pipe_class = PIPE_CLASS_BINARY - rotate_class = PIPE_ROTATE_TWODIR - -/datum/pipe/pipe_dispenser/he - category = "Heat Exchange Pipes" - colorable = FALSE - connect_types = CONNECT_TYPE_HE - constructed_path = /obj/machinery/atmospherics/pipe/simple/heat_exchanging - pipe_class = PIPE_CLASS_BINARY - -/datum/pipe/pipe_dispenser/he/straight - name = "heat exchanger pipe fitting" - desc = "a heat exchanger pipe segment" - build_path = /obj/item/pipe - build_icon_state = "he" - rotate_class = PIPE_ROTATE_TWODIR - -/datum/pipe/pipe_dispenser/he/bent - name = "bent heat exchanger pipe fitting" - desc = "a bent heat exchanger pipe segment" - build_path = /obj/item/pipe - connect_types = CONNECT_TYPE_HE - rotate_class = PIPE_ROTATE_TWODIR - build_icon_state = "he" - dir = PIPE_BENT - -/datum/pipe/pipe_dispenser/he/junction - name = "heat exchanger junction" - desc = "a heat exchanger junction" - build_path = /obj/item/pipe - connect_types = CONNECT_TYPE_REGULAR|CONNECT_TYPE_HE - build_icon_state = "junction" - constructed_path = /obj/machinery/atmospherics/pipe/simple/heat_exchanging/junction - -/datum/pipe/pipe_dispenser/he/exchanger - name = "heat exchanger" - desc = "a heat exchanger" - build_path = /obj/item/pipe - connect_types = CONNECT_TYPE_REGULAR - build_icon_state = "heunary" - constructed_path = /obj/machinery/atmospherics/unary/heat_exchanger - pipe_class = PIPE_CLASS_UNARY - -//Cleanup -#undef PIPE_STRAIGHT -#undef PIPE_BENT \ No newline at end of file diff --git a/code/game/machinery/pipe/pipe_dispenser.dm b/code/game/machinery/pipe/pipe_dispenser.dm deleted file mode 100644 index e3ee08aa3a4a2..0000000000000 --- a/code/game/machinery/pipe/pipe_dispenser.dm +++ /dev/null @@ -1,134 +0,0 @@ -/obj/machinery/pipedispenser - name = "Pipe Dispenser" - icon = 'icons/obj/stationobjs.dmi' - icon_state = "pipe_d" - density = TRUE - anchored = FALSE - stat_immune = NOSCREEN//Doesn't need screen, just input for the parts wanted - - construct_state = /decl/machine_construction/default/panel_closed - uncreated_component_parts = null - - idle_power_usage = 500 - power_channel = EQUIP - use_power = POWER_USE_OFF - - machine_name = "pipe dispenser" - machine_desc = "A semi-portable dispenser that uses compressed matter to create atmospherics pipes. Vital for repair or construction efforts." - - var/pipe_color = "white" - -/obj/machinery/pipedispenser/Initialize()//for mapping purposes. Anchor them by map var edit if needed. - . = ..() - if(anchored) - update_use_power(POWER_USE_IDLE) - -/obj/machinery/pipedispenser/proc/get_console_data(var/list/pipe_categories, var/color_options = FALSE) - . = list() - . += "" - if(color_options) - . += "" - for(var/category in pipe_categories) - var/datum/pipe/cat = category - . += "" - for(var/datum/pipe/pipe in pipe_categories[category]) - var/line = "[pipe.name]" - . += "" - .+= "
              Color[pipe_color]
              [initial(cat.category)]
              [line]Dispense5x10x
              " - . = JOINTEXT(.) - -/obj/machinery/pipedispenser/proc/build_quantity(var/datum/pipe/P, var/quantity) - for(var/I = quantity;I > 0;I -= 1) - P.Build(P, loc, pipe_colors[pipe_color]) - use_power_oneoff(500) - -/obj/machinery/pipedispenser/Topic(href, href_list) - if((. = ..())) - return - if(href_list["build"]) - var/datum/pipe/P = locate(href_list["build"]) - build_quantity(P, 1) - if(href_list["buildfive"]) - var/datum/pipe/P = locate(href_list["buildfive"]) - build_quantity(P, 5) - if(href_list["buildten"]) - var/datum/pipe/P = locate(href_list["buildten"]) - build_quantity(P, 10) - if(href_list["color"]) - var/choice = input(usr, "What color do you want pipes to have?") as null|anything in pipe_colors - if(!choice) - return 1 - pipe_color = choice - updateUsrDialog() - -/obj/machinery/pipedispenser/interface_interact(mob/user) - interact(user) - return TRUE - -/obj/machinery/pipedispenser/interact(mob/user) - var/datum/browser/popup = new (user, "Pipe List", "[src] Control Panel") - popup.set_content(get_console_data(GLOB.all_pipe_datums_by_category, TRUE)) - popup.open() - -/obj/machinery/pipedispenser/attackby(var/obj/item/W as obj, var/mob/user as mob) - if (istype(W, /obj/item/pipe) || istype(W, /obj/item/machine_chassis)) - if(!user.unEquip(W)) - return - to_chat(user, "You put \the [W] back into \the [src].") - add_fingerprint(user) - qdel(W) - return - if(!panel_open) - if(isWrench(W)) - add_fingerprint(user) - if(anchored) - playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1) - to_chat(user, "You begin to unfasten \the [src] from the floor...") - if (do_after(user, 4 SECONDS, src, DO_PUBLIC_UNIQUE)) - user.visible_message( \ - "\The [user] unfastens \the [src].", \ - "You have unfastened \the [src]. Now it can be pulled somewhere else.", \ - "You hear ratchet.") - anchored = FALSE - stat |= MAINT - update_use_power(POWER_USE_OFF) - if(user.machine==src) - close_browser(user, "window=pipedispenser") - else - playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1) - to_chat(user, "You begin to fasten \the [src] to the floor...") - if (do_after(user, 2 SECONDS, src, DO_PUBLIC_UNIQUE)) - user.visible_message( \ - "\The [user] fastens \the [src].", \ - "You have fastened \the [src]. Now it can dispense pipes.", \ - "You hear ratchet.") - anchored = TRUE - stat &= ~MAINT - update_use_power(POWER_USE_IDLE) - return - return ..() - -/obj/machinery/pipedispenser/disposal - name = "Disposal Pipe Dispenser" - icon = 'icons/obj/stationobjs.dmi' - icon_state = "pipe_d" - machine_name = "disposal pipe dispenser" - machine_desc = "Similar to a normal pipe dispenser, but calibrated for the heavy, dense metal tubes used in disposals networks." - -//Allow you to drag-drop disposal pipes into it -/obj/machinery/pipedispenser/disposal/MouseDrop_T(var/obj/structure/disposalconstruct/pipe as obj, mob/user as mob) - if(!CanPhysicallyInteract(user)) - return - - if (!istype(pipe) || get_dist(src,pipe) > 1 ) - return - - if (pipe.anchored) - return - - qdel(pipe) - -/obj/machinery/pipedispenser/disposal/interact(mob/user) - var/datum/browser/popup = new (user, "Disposal Pipe List", "[src] Control Panel") - popup.set_content(get_console_data(GLOB.all_disposal_pipe_datums_by_category)) - popup.open() diff --git a/code/game/machinery/pipe/pipelayer.dm b/code/game/machinery/pipe/pipelayer.dm deleted file mode 100644 index 13d6d1ed7b12b..0000000000000 --- a/code/game/machinery/pipe/pipelayer.dm +++ /dev/null @@ -1,133 +0,0 @@ -/obj/machinery/pipelayer - - name = "automatic pipe layer" - icon = 'icons/obj/stationobjs.dmi' - icon_state = "pipe_d" - density = TRUE - var/turf/old_turf - var/old_dir - var/on = 0 - var/a_dis = 0 - var/P_type = 0 - var/P_type_t = "" - var/max_metal = 50 - var/metal = 10 - var/obj/item/wrench/W - var/list/Pipes = list("regular pipes"=0,"scrubbers pipes"=31,"supply pipes"=29,"heat exchange pipes"=2, "fuel pipes"=45) - -/obj/machinery/pipelayer/New() - W = new(src) - ..() - -/obj/machinery/pipelayer/Move(new_turf,M_Dir) - ..() - - if(on && a_dis) - dismantleFloor(old_turf) - layPipe(old_turf,M_Dir,old_dir) - - old_turf = new_turf - old_dir = turn(M_Dir,180) - -/obj/machinery/pipelayer/interface_interact(mob/user) - if(!metal&&!on) - to_chat(user, "\The [src] doesn't work without metal.") - return TRUE - on=!on - user.visible_message("[user] has [!on?"de":""]activated \the [src].", "You [!on?"de":""]activate \the [src].") - return TRUE - -/obj/machinery/pipelayer/attackby(var/obj/item/W as obj, var/mob/user as mob) - - if(isWrench(W)) - P_type_t = input("Choose pipe type", "Pipe type") as null|anything in Pipes - P_type = Pipes[P_type_t] - user.visible_message("[user] has set \the [src] to manufacture [P_type_t].", "You set \the [src] to manufacture [P_type_t].") - return - - if(isCrowbar(W)) - a_dis=!a_dis - user.visible_message("[user] has [!a_dis?"de":""]activated auto-dismantling.", "You [!a_dis?"de":""]activate auto-dismantling.") - return - - if(istype(W, /obj/item/stack/material) && W.get_material_name() == MATERIAL_STEEL) - - var/result = load_metal(W) - if(isnull(result)) - to_chat(user, "Unable to load [W] - no metal found.") - else if(!result) - to_chat(user, "\The [src] is full.") - else - user.visible_message("[user] has loaded metal into \the [src].", "You load metal into \the [src]") - - return - - if(isScrewdriver(W)) - if(metal) - var/m = round(input(usr,"Please specify the amount of metal to remove","Remove metal",min(round(metal),50)) as num, 1) - m = min(m, 50) - m = min(m, round(metal)) - m = round(m) - if(m) - use_metal(m) - var/obj/item/stack/material/steel/MM = new (get_turf(src)) - MM.amount = m - user.visible_message("[user] removes [m] sheet\s of metal from the \the [src].", "You remove [m] sheet\s of metal from \the [src]") - else - to_chat(user, "\The [src] is empty.") - return - ..() - -/obj/machinery/pipelayer/examine(mob/user) - . = ..() - to_chat(user, "\The [src] has [metal] sheet\s, is set to produce [P_type_t], and auto-dismantling is [!a_dis?"de":""]activated.") - -/obj/machinery/pipelayer/proc/reset() - on=0 - return - -/obj/machinery/pipelayer/proc/load_metal(var/obj/item/stack/MM) - if(istype(MM) && MM.get_amount()) - var/cur_amount = metal - var/to_load = max(max_metal - round(cur_amount),0) - if(to_load) - to_load = min(MM.get_amount(), to_load) - metal += to_load - MM.use(to_load) - return to_load - else - return 0 - return - -/obj/machinery/pipelayer/proc/use_metal(amount) - if(!metal || metalThere seems to be a firewall preventing you from accessing this device.") - return 1 - - if(locked && !issilicon(user)) - to_chat(user, "Access denied.") - return 1 - - return 0 - -/obj/machinery/porta_turret/interface_interact(mob/user) - ui_interact(user) - return TRUE - -/obj/machinery/porta_turret/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1) - var/data[0] - data["access"] = !isLocked(user) - data["locked"] = locked - data["enabled"] = enabled - data["is_lethal"] = 1 - data["lethal"] = lethal - - if(data["access"]) - var/settings[0] - settings[++settings.len] = list("category" = "Neutralize All Non-Synthetics", "setting" = "check_synth", "value" = check_synth) - settings[++settings.len] = list("category" = "Check Weapon Authorization", "setting" = "check_weapons", "value" = check_weapons) - settings[++settings.len] = list("category" = "Check Security Records", "setting" = "check_records", "value" = check_records) - settings[++settings.len] = list("category" = "Check Arrest Status", "setting" = "check_arrest", "value" = check_arrest) - settings[++settings.len] = list("category" = "Check Access Authorization", "setting" = "check_access", "value" = check_access) - settings[++settings.len] = list("category" = "Check misc. Lifeforms", "setting" = "check_anomalies", "value" = check_anomalies) - data["settings"] = settings - - ui = SSnano.try_update_ui(user, src, ui_key, ui, data, force_open) - if (!ui) - ui = new(user, src, ui_key, "turret_control.tmpl", "Turret Controls", 500, 300) - ui.set_initial_data(data) - ui.open() - ui.set_auto_update(1) - -/obj/machinery/porta_turret/proc/HasController() - var/area/A = get_area(src) - return A && A.turret_controls.len > 0 - -/obj/machinery/porta_turret/CanUseTopic(var/mob/user) - if(HasController()) - to_chat(user, "Turrets can only be controlled using the assigned turret controller.") - return STATUS_CLOSE - - if(isLocked(user)) - return STATUS_CLOSE - - if(!anchored) - to_chat(usr, "\The [src] has to be secured first!") - return STATUS_CLOSE - - return ..() - - -/obj/machinery/porta_turret/Topic(href, href_list) - if(..()) - return 1 - - if(href_list["command"] && href_list["value"]) - var/value = text2num(href_list["value"]) - if(href_list["command"] == "enable") - enabled = value - else if(href_list["command"] == "lethal") - lethal = value - else if(href_list["command"] == "check_synth") - check_synth = value - else if(href_list["command"] == "check_weapons") - check_weapons = value - else if(href_list["command"] == "check_records") - check_records = value - else if(href_list["command"] == "check_arrest") - check_arrest = value - else if(href_list["command"] == "check_access") - check_access = value - else if(href_list["command"] == "check_anomalies") - check_anomalies = value - - return 1 - -/obj/machinery/porta_turret/power_change() - if(powered()) - stat &= ~NOPOWER - queue_icon_update() - else - spawn(rand(0, 15)) - stat |= NOPOWER - queue_icon_update() - - -/obj/machinery/porta_turret/attackby(obj/item/I, mob/user) - if(stat & BROKEN) - if(isCrowbar(I)) - //If the turret is destroyed, you can remove it with a crowbar to - //try and salvage its components - to_chat(user, "You begin prying the metal coverings off.") - if(do_after(user, 2 SECONDS, src, DO_PUBLIC_UNIQUE)) - if(prob(70)) - to_chat(user, "You remove the turret and salvage some components.") - if(installation) - var/obj/item/gun/energy/Gun = new installation(loc) - Gun.power_supply.charge = gun_charge - Gun.update_icon() - if(prob(50)) - new /obj/item/stack/material/steel(loc, rand(1,4)) - if(prob(50)) - new /obj/item/device/assembly/prox_sensor(loc) - else - to_chat(user, "You remove the turret but did not manage to salvage anything.") - qdel(src) // qdel - - else if(isWrench(I)) - if(enabled || raised) - to_chat(user, "You cannot unsecure an active turret!") - return - if(wrenching) - to_chat(user, "Someone is already [anchored ? "un" : ""]securing the turret!") - return - if(!anchored && isinspace()) - to_chat(user, "Cannot secure turrets in space!") - return - - user.visible_message( \ - "[user] begins [anchored ? "un" : ""]securing the turret.", \ - "You begin [anchored ? "un" : ""]securing the turret." \ - ) - - wrenching = 1 - if(do_after(user, 5 SECONDS, src, DO_PUBLIC_UNIQUE)) - //This code handles moving the turret around. After all, it's a portable turret! - if(!anchored) - playsound(loc, 'sound/items/Ratchet.ogg', 100, 1) - anchored = TRUE - update_icon() - to_chat(user, "You secure the exterior bolts on the turret.") - else if(anchored) - playsound(loc, 'sound/items/Ratchet.ogg', 100, 1) - anchored = FALSE - to_chat(user, "You unsecure the exterior bolts on the turret.") - update_icon() - wrenching = 0 - - else if(istype(I, /obj/item/card/id)||istype(I, /obj/item/modular_computer)) - //Behavior lock/unlock mangement - if(allowed(user)) - locked = !locked - to_chat(user, "Controls are now [locked ? "locked" : "unlocked"].") - updateUsrDialog() - else - to_chat(user, "Access denied.") - - else - //if the turret was attacked with the intention of harming it: - user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN) - take_damage(I.force * 0.5) - if(I.force * 0.5 > 1) //if the force of impact dealt at least 1 damage, the turret gets pissed off - if(!attacked && !emagged) - attacked = 1 - spawn() - sleep(60) - attacked = 0 - ..() - -/obj/machinery/porta_turret/emag_act(var/remaining_charges, var/mob/user) - if(!emagged) - //Emagging the turret makes it go bonkers and stun everyone. It also makes - //the turret shoot much, much faster. - to_chat(user, "You short out [src]'s threat assessment circuits.") - visible_message("[src] hums oddly...") - emagged = TRUE - iconholder = 1 - controllock = 1 - enabled = 0 //turns off the turret temporarily - sleep(60) //6 seconds for the traitor to gtfo of the area before the turret decides to ruin his shit - enabled = 1 //turns it back on. The cover popUp() popDown() are automatically called in process(), no need to define it here - return 1 - -/obj/machinery/porta_turret/proc/take_damage(var/force) - if(!raised && !raising) - force = force / 8 - if(force < 5) - return - - health -= force - if (force > 5 && prob(45)) - spark_system.start() - if(health <= 0) - die() //the death process :( - -/obj/machinery/porta_turret/bullet_act(obj/item/projectile/Proj) - var/damage = Proj.get_structure_damage() - - if(!damage) - return - - if(enabled) - if(!attacked && !emagged) - attacked = 1 - spawn() - sleep(60) - attacked = 0 - - ..() - - take_damage(damage) - -/obj/machinery/porta_turret/emp_act(severity) - if(enabled) - //if the turret is on, the EMP no matter how severe disables the turret for a while - //and scrambles its settings, with a slight chance of having an emag effect - check_arrest = prob(50) - check_records = prob(50) - check_weapons = prob(50) - check_access = prob(20) // check_access is a pretty big deal, so it's least likely to get turned on - check_anomalies = prob(50) - if(prob(5)) - emagged = TRUE - - disabled = 1 - var/power = 4 - severity - addtimer(CALLBACK(src,/obj/machinery/porta_turret/proc/enable), rand(60*power,600*power)) - - ..() - -/obj/machinery/porta_turret/proc/enable() - if(disabled) - disabled = 0 - -/obj/machinery/porta_turret/ex_act(severity) - switch (severity) - if (EX_ACT_DEVASTATING) - qdel(src) - if (EX_ACT_HEAVY) - if (prob(25)) - qdel(src) - else - take_damage(initial(health) * 8) //should instakill most turrets - if (EX_ACT_LIGHT) - take_damage(initial(health) * 8 / 3) - -/obj/machinery/porta_turret/proc/die() //called when the turret dies, ie, health <= 0 - health = 0 - set_broken(TRUE) - spark_system.start() //creates some sparks because they look cool - atom_flags |= ATOM_FLAG_CLIMBABLE // they're now climbable - -/obj/machinery/porta_turret/Process() - if(stat & (NOPOWER|BROKEN)) - //if the turret has no power or is broken, make the turret pop down if it hasn't already - popDown() - return - - if(!enabled) - //if the turret is off, make it pop down - popDown() - return - - var/list/targets = list() //list of primary targets - var/list/secondarytargets = list() //targets that are least important - - for(var/mob/M in mobs_in_view(world.view, src)) - assess_and_assign(M, targets, secondarytargets) - - if(!tryToShootAt(targets)) - if(!tryToShootAt(secondarytargets)) // if no valid targets, go for secondary targets - popDown() // no valid targets, close the cover - - if(auto_repair && (health < maxhealth)) - use_power_oneoff(20000) - health = min(health+1, maxhealth) // 1HP for 20kJ - -/obj/machinery/porta_turret/proc/assess_and_assign(var/mob/living/L, var/list/targets, var/list/secondarytargets) - switch(assess_living(L)) - if(TURRET_PRIORITY_TARGET) - targets += L - if(TURRET_SECONDARY_TARGET) - secondarytargets += L - -/obj/machinery/porta_turret/proc/assess_living(var/mob/living/L) - if(!istype(L)) - return TURRET_NOT_TARGET - - if(L.invisibility >= INVISIBILITY_LEVEL_ONE) // Cannot see him. see_invisible is a mob-var - return TURRET_NOT_TARGET - - if(!L) - return TURRET_NOT_TARGET - - if(!emagged && issilicon(L)) // Don't target silica - return TURRET_NOT_TARGET - - if(L.stat && !emagged) //if the perp is dead/dying, no need to bother really - return TURRET_NOT_TARGET //move onto next potential victim! - - if(get_dist(src, L) > 7) //if it's too far away, why bother? - return TURRET_NOT_TARGET - - if(!check_trajectory(L, src)) //check if we have true line of sight - return TURRET_NOT_TARGET - - if(emagged) // If emagged not even the dead get a rest - return L.stat ? TURRET_SECONDARY_TARGET : TURRET_PRIORITY_TARGET - - if(lethal && locate(/mob/living/silicon/ai) in get_turf(L)) //don't accidentally kill the AI! - return TURRET_NOT_TARGET - - if(check_synth) //If it's set to attack all non-silicons, target them! - if(L.lying) - return lethal ? TURRET_SECONDARY_TARGET : TURRET_NOT_TARGET - return TURRET_PRIORITY_TARGET - - if(iscuffed(L)) // If the target is handcuffed, leave it alone - return TURRET_NOT_TARGET - - if(isanimal(L) || issmall(L)) // Animals are not so dangerous - return check_anomalies ? TURRET_SECONDARY_TARGET : TURRET_NOT_TARGET - - if(ishuman(L)) //if the target is a human, analyze threat level - if(assess_perp(L) < 4) - return TURRET_NOT_TARGET //if threat level < 4, keep going - - if(L.lying) //if the perp is lying down, it's still a target but a less-important target - return lethal ? TURRET_SECONDARY_TARGET : TURRET_NOT_TARGET - - return TURRET_PRIORITY_TARGET //if the perp has passed all previous tests, congrats, it is now a "shoot-me!" nominee - -/obj/machinery/porta_turret/proc/assess_perp(var/mob/living/carbon/human/H) - if(!H || !istype(H)) - return 0 - - if(emagged) - return 10 - - return H.assess_perp(src, check_access, check_weapons, check_records, check_arrest) - -/obj/machinery/porta_turret/proc/tryToShootAt(var/list/mob/living/targets) - if(targets.len && last_target && (last_target in targets) && target(last_target)) - return 1 - - while(targets.len > 0) - var/mob/living/M = pick(targets) - targets -= M - if(target(M)) - return 1 - - -/obj/machinery/porta_turret/proc/popUp() //pops the turret up - if(disabled) - return - if(raising || raised) - return - if(stat & BROKEN) - return - set_raised_raising(raised, 1) - update_icon() - - var/atom/flick_holder = new /atom/movable/porta_turret_cover(loc) - flick_holder.layer = layer + 0.1 - flick("popup", flick_holder) - sleep(10) - qdel(flick_holder) - - set_raised_raising(1, 0) - update_icon() - -/obj/machinery/porta_turret/proc/popDown() //pops the turret down - set waitfor = FALSE - last_target = null - if(disabled) - return - if(raising || !raised) - return - if(stat & BROKEN) - return - set_raised_raising(raised, 1) - update_icon() - - var/atom/flick_holder = new /atom/movable/porta_turret_cover(loc) - flick_holder.layer = layer + 0.1 - flick("popdown", flick_holder) - sleep(10) - qdel(flick_holder) - - set_raised_raising(0, 0) - update_icon() - -/obj/machinery/porta_turret/proc/set_raised_raising(var/raised, var/raising) - src.raised = raised - src.raising = raising - set_density(raised || raising) - -/obj/machinery/porta_turret/proc/target(var/mob/living/target) - if(disabled) - return - if(target) - last_target = target - spawn() - popUp() //pop the turret up if it's not already up. - set_dir(get_dir(src, target)) //even if you can't shoot, follow the target - spawn() - shootAt(target) - return 1 - return - -/obj/machinery/porta_turret/proc/shootAt(var/mob/living/target) - //any emagged turrets will shoot extremely fast! This not only is deadly, but drains a lot power! - if(!(emagged || attacked)) //if it hasn't been emagged or attacked, it has to obey a cooldown rate - if(last_fired || !raised) //prevents rapid-fire shooting, unless it's been emagged - return - last_fired = 1 - spawn() - sleep(shot_delay) - last_fired = 0 - - var/turf/T = get_turf(src) - var/turf/U = get_turf(target) - if(!istype(T) || !istype(U)) - return - - if(!raised) //the turret has to be raised in order to fire - makes sense, right? - return - - update_icon() - var/obj/item/projectile/A - if(emagged || lethal) - A = new eprojectile(loc) - playsound(loc, eshot_sound, 75, 1) - else - A = new projectile(loc) - playsound(loc, shot_sound, 75, 1) - - // Lethal/emagged turrets use twice the power due to higher energy beams - // Emagged turrets again use twice as much power due to higher firing rates - use_power_oneoff(reqpower * (2 * (emagged || lethal)) * (2 * emagged)) - - //Turrets aim for the center of mass by default. - //If the target is grabbing someone then the turret smartly aims for extremities - var/def_zone = get_exposed_defense_zone(target) - //Shooting Code: - A.launch(target, def_zone) - -/datum/turret_checks - var/enabled - var/lethal - var/check_synth - var/check_access - var/check_records - var/check_arrest - var/check_weapons - var/check_anomalies - var/ailock - -/obj/machinery/porta_turret/proc/setState(var/datum/turret_checks/TC) - if(controllock) - return - src.enabled = TC.enabled - src.lethal = TC.lethal - src.iconholder = TC.lethal - - check_synth = TC.check_synth - check_access = TC.check_access - check_records = TC.check_records - check_arrest = TC.check_arrest - check_weapons = TC.check_weapons - check_anomalies = TC.check_anomalies - ailock = TC.ailock - - src.power_change() - -/* - Portable turret constructions - Known as "turret frame"s -*/ - -/obj/machinery/porta_turret_construct - name = "turret frame" - icon = 'icons/obj/turrets.dmi' - icon_state = "turret_frame" - density = TRUE - var/target_type = /obj/machinery/porta_turret // The type we intend to build - var/build_step = 0 //the current step in the building process - var/finish_name="turret" //the name applied to the product turret - var/installation = null //the gun type installed - var/gun_charge = 0 //the gun charge of the gun type installed - - -/obj/machinery/porta_turret_construct/attackby(obj/item/I, mob/user) - //this is a bit unwieldy but self-explanatory - switch(build_step) - if(0) //first step - if(isWrench(I) && !anchored) - playsound(loc, 'sound/items/Ratchet.ogg', 100, 1) - to_chat(user, "You secure the external bolts.") - anchored = TRUE - build_step = 1 - return - - else if(isCrowbar(I) && !anchored) - playsound(loc, 'sound/items/Crowbar.ogg', 75, 1) - to_chat(user, "You dismantle the turret construction.") - new /obj/item/stack/material/steel( loc, 5) - qdel(src) - return - - if(1) - if(istype(I, /obj/item/stack/material) && I.get_material_name() == MATERIAL_STEEL) - var/obj/item/stack/M = I - if(M.use(2)) - to_chat(user, "You add some metal armor to the interior frame.") - build_step = 2 - icon_state = "turret_frame2" - else - to_chat(user, "You need two sheets of metal to continue construction.") - return - - else if(istype(I, /obj/item/wrench)) - playsound(loc, 'sound/items/Ratchet.ogg', 75, 1) - to_chat(user, "You unfasten the external bolts.") - anchored = FALSE - build_step = 0 - return - - - if(2) - if(istype(I, /obj/item/wrench)) - playsound(loc, 'sound/items/Ratchet.ogg', 100, 1) - to_chat(user, "You bolt the metal armor into place.") - build_step = 3 - return - - else if(isWelder(I)) - var/obj/item/weldingtool/WT = I - if(!WT.isOn()) - return - if(WT.get_fuel() < 5) //uses up 5 fuel. - to_chat(user, "You need more fuel to complete this task.") - return - - playsound(loc, pick('sound/items/Welder.ogg', 'sound/items/Welder2.ogg'), 50, 1) - if(do_after(user, 2 SECONDS, src, DO_PUBLIC_UNIQUE)) - if(!src || !WT.remove_fuel(5, user)) return - build_step = 1 - to_chat(user, "You remove the turret's interior metal armor.") - new /obj/item/stack/material/steel( loc, 2) - return - - - if(3) - if(istype(I, /obj/item/gun/energy)) //the gun installation part - - if(isrobot(user)) - return - var/obj/item/gun/energy/E = I //typecasts the item to an energy gun - if(!user.unEquip(I)) - to_chat(user, "\the [I] is stuck to your hand, you cannot put it in \the [src]") - return - installation = I.type //installation becomes I.type - gun_charge = E.power_supply.charge //the gun's charge is stored in gun_charge - to_chat(user, "You add [I] to the turret.") - target_type = /obj/machinery/porta_turret - - build_step = 4 - qdel(I) //delete the gun :( - return - - else if(istype(I, /obj/item/wrench)) - playsound(loc, 'sound/items/Ratchet.ogg', 100, 1) - to_chat(user, "You remove the turret's metal armor bolts.") - build_step = 2 - return - - if(4) - if(isprox(I)) - build_step = 5 - if(!user.unEquip(I)) - to_chat(user, "\the [I] is stuck to your hand, you cannot put it in \the [src]") - return - to_chat(user, "You add the prox sensor to the turret.") - qdel(I) - return - - //attack_hand() removes the gun - - if(5) - if(isScrewdriver(I)) - playsound(loc, 'sound/items/Screwdriver.ogg', 100, 1) - build_step = 6 - to_chat(user, "You close the internal access hatch.") - return - - //attack_hand() removes the prox sensor - - if(6) - if(istype(I, /obj/item/stack/material) && I.get_material_name() == MATERIAL_STEEL) - var/obj/item/stack/M = I - if(M.use(2)) - to_chat(user, "You add some metal armor to the exterior frame.") - build_step = 7 - else - to_chat(user, "You need two sheets of metal to continue construction.") - return - - else if(istype(I, /obj/item/screwdriver)) - playsound(loc, 'sound/items/Screwdriver.ogg', 100, 1) - build_step = 5 - to_chat(user, "You open the internal access hatch.") - return - - if(7) - if(isWelder(I)) - var/obj/item/weldingtool/WT = I - if(!WT.isOn()) return - if(WT.get_fuel() < 5) - to_chat(user, "You need more fuel to complete this task.") - - playsound(loc, pick('sound/items/Welder.ogg', 'sound/items/Welder2.ogg'), 50, 1) - if(do_after(user, 3 SECONDS, src, DO_PUBLIC_UNIQUE)) - if(!src || !WT.remove_fuel(5, user)) - return - build_step = 8 - to_chat(user, "You weld the turret's armor down.") - - //The final step: create a full turret - var/obj/machinery/porta_turret/Turret = new target_type(loc) - Turret.SetName(finish_name) - Turret.installation = installation - Turret.gun_charge = gun_charge - Turret.enabled = 0 - Turret.setup() - - qdel(src) // qdel - - else if(isCrowbar(I)) - playsound(loc, 'sound/items/Crowbar.ogg', 75, 1) - to_chat(user, "You pry off the turret's exterior armor.") - new /obj/item/stack/material/steel(loc, 2) - build_step = 6 - return - - if(istype(I, /obj/item/pen)) //you can rename turrets like bots! - var/t = sanitizeSafe(input(user, "Enter new turret name", name, finish_name) as text, MAX_NAME_LEN) - if(!t) - return - if(!in_range(src, usr) && loc != usr) - return - - finish_name = t - return - - ..() - - -/obj/machinery/porta_turret_construct/attack_hand(mob/user) - switch(build_step) - if(4) - if(!installation) - return - build_step = 3 - - var/obj/item/gun/energy/Gun = new installation(loc) - Gun.power_supply.charge = gun_charge - Gun.update_icon() - installation = null - gun_charge = 0 - to_chat(user, "You remove [Gun] from the turret frame.") - - if(5) - to_chat(user, "You remove the prox sensor from the turret frame.") - new /obj/item/device/assembly/prox_sensor(loc) - build_step = 4 - -/obj/machinery/porta_turret_construct/attack_ai() - return - -/atom/movable/porta_turret_cover - icon = 'icons/obj/turrets.dmi' - - - - -#undef TURRET_PRIORITY_TARGET -#undef TURRET_SECONDARY_TARGET -#undef TURRET_NOT_TARGET diff --git a/code/game/machinery/recharger.dm b/code/game/machinery/recharger.dm deleted file mode 100644 index f682920e229f3..0000000000000 --- a/code/game/machinery/recharger.dm +++ /dev/null @@ -1,115 +0,0 @@ -//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:31 - -/obj/machinery/recharger - name = "recharger" - desc = "An all-purpose recharger for a variety of devices." - icon = 'icons/obj/stationobjs.dmi' - icon_state = "recharger0" - anchored = TRUE - idle_power_usage = 4 - active_power_usage = 30 KILOWATTS - var/obj/item/charging = null - var/list/allowed_devices = list(/obj/item/gun/energy, /obj/item/gun/magnetic/railgun, /obj/item/melee/baton, /obj/item/cell, /obj/item/modular_computer, /obj/item/device/suit_sensor_jammer, /obj/item/stock_parts/computer/battery_module, /obj/item/shield_diffuser, /obj/item/clothing/mask/smokable/ecig, /obj/item/device/radio) - var/icon_state_charged = "recharger2" - var/icon_state_charging = "recharger1" - var/icon_state_idle = "recharger0" //also when unpowered - var/portable = 1 - -/obj/machinery/recharger/attackby(obj/item/G as obj, mob/user as mob) - var/allowed = 0 - for (var/allowed_type in allowed_devices) - if (istype(G, allowed_type)) allowed = 1 - - if(allowed) - if(charging) - to_chat(user, "\A [charging] is already charging here.") - return - // Checks to make sure he's not in space doing it, and that the area got proper power. - if(!powered()) - to_chat(user, "The [name] blinks red as you try to insert the item!") - return - if (istype(G, /obj/item/gun/energy)) - var/obj/item/gun/energy/E = G - if(E.self_recharge) - to_chat(user, "You can't find a charging port on \the [E].") - return - if(!G.get_cell()) - to_chat(user, "This device does not have a battery installed.") - return - - if(user.unEquip(G)) - G.forceMove(src) - charging = G - update_icon() - else if(portable && isWrench(G)) - if(charging) - to_chat(user, "Remove [charging] first!") - return - anchored = !anchored - to_chat(user, "You [anchored ? "attached" : "detached"] the recharger.") - playsound(loc, 'sound/items/Ratchet.ogg', 75, 1) - -/obj/machinery/recharger/physical_attack_hand(mob/user) - if(charging) - charging.update_icon() - user.put_in_hands(charging) - charging = null - update_icon() - return TRUE - -/obj/machinery/recharger/Process() - if(stat & (NOPOWER|BROKEN) || !anchored) - update_use_power(POWER_USE_OFF) - icon_state = icon_state_idle - return - - if(!charging) - update_use_power(POWER_USE_IDLE) - icon_state = icon_state_idle - else - var/obj/item/cell/C = charging.get_cell() - if(istype(C)) - if(!C.fully_charged()) - icon_state = icon_state_charging - C.give(active_power_usage*CELLRATE) - update_use_power(POWER_USE_ACTIVE) - else - icon_state = icon_state_charged - update_use_power(POWER_USE_IDLE) - -/obj/machinery/recharger/emp_act(severity) - if(stat & (NOPOWER|BROKEN) || !anchored) - ..(severity) - return - if(charging) - var/obj/item/cell/C = charging.get_cell() - if(istype(C)) - C.emp_act(severity) - ..(severity) - -/obj/machinery/recharger/on_update_icon() //we have an update_icon() in addition to the stuff in process to make it feel a tiny bit snappier. - if(charging) - icon_state = icon_state_charging - else - icon_state = icon_state_idle - -/obj/machinery/recharger/examine(mob/user) - . = ..() - if(isnull(charging)) - return - - var/obj/item/cell/C = charging.get_cell() - if(!isnull(C)) - to_chat(user, "Item's charge at [round(C.percent())]%.") - -/obj/machinery/recharger/wallcharger - name = "wall recharger" - desc = "A heavy duty wall recharger specialized for energy weaponry." - icon = 'icons/obj/stationobjs.dmi' - icon_state = "wrecharger0" - active_power_usage = 50 KILOWATTS //It's more specialized than the standalone recharger (guns and batons only) so make it more powerful - allowed_devices = list(/obj/item/gun/magnetic/railgun, /obj/item/gun/energy, /obj/item/melee/baton, /obj/item/device/radio, /obj/item/cell/guncell) - icon_state_charged = "wrecharger2" - icon_state_charging = "wrecharger1" - icon_state_idle = "wrecharger0" - portable = 0 diff --git a/code/game/machinery/rechargestation.dm b/code/game/machinery/rechargestation.dm deleted file mode 100644 index bf021b2fb0684..0000000000000 --- a/code/game/machinery/rechargestation.dm +++ /dev/null @@ -1,230 +0,0 @@ -/obj/machinery/recharge_station - name = "cyborg recharging station" - desc = "A heavy duty rapid charging system, designed to quickly recharge cyborg power reserves." - icon = 'icons/obj/objects.dmi' - icon_state = "borgcharger0" - density = TRUE - anchored = TRUE - idle_power_usage = 50 - base_type = /obj/machinery/recharge_station - uncreated_component_parts = null - stat_immune = 0 - construct_state = /decl/machine_construction/default/panel_closed - - machine_name = "cyborg recharging station" - machine_desc = "A station for recharging robots, cyborgs, and silicon-based humanoids such as IPCs and full-body prosthetics." - - var/overlay_icon = 'icons/obj/objects.dmi' - var/mob/living/occupant = null - var/charging = 0 - var/last_overlay_state - - var/charging_power // W. Power rating used for charging the cyborg. 120 kW if un-upgraded - var/weld_rate = 0 // How much brute damage is repaired per tick - var/wire_rate = 0 // How much burn damage is repaired per tick - - var/weld_power_use = 2300 // power used per point of brute damage repaired. 2.3 kW ~ about the same power usage of a handheld arc welder - var/wire_power_use = 500 // power used per point of burn damage repaired. - -/obj/machinery/recharge_station/Initialize() - . = ..() - update_icon() - -/obj/machinery/recharge_station/Process() - if(stat & (BROKEN | NOPOWER)) - return - - //First, recharge/repair/etc the occupant - if(occupant) - process_occupant() - - if(overlay_state() != last_overlay_state) - update_icon() - -//Processes the occupant, drawing from the internal power cell if needed. -/obj/machinery/recharge_station/proc/process_occupant() - // Check whether the mob is compatible - if(!isrobot(occupant) && !ishuman(occupant)) - return - - // If we have repair capabilities, repair any damage. - if(weld_rate && occupant.getBruteLoss()) - var/repair = weld_rate - use_power_oneoff(weld_power_use * weld_rate, LOCAL) / weld_power_use - occupant.adjustBruteLoss(-repair) - if(wire_rate && occupant.getFireLoss()) - var/repair = wire_rate - use_power_oneoff(wire_power_use * wire_rate, LOCAL) / wire_power_use - occupant.adjustFireLoss(-repair) - - var/obj/item/cell/target - if(isrobot(occupant)) - var/mob/living/silicon/robot/R = occupant - target = R.cell - if(R.module) - R.module.respawn_consumable(R, charging_power * CELLRATE / 250) //consumables are magical, apparently - // If we are capable of repairing damage, reboot destroyed components and allow them to be repaired for very large power spike. - var/list/damaged = R.get_damaged_components(1,1,1) - if(damaged.len && wire_rate && weld_rate) - for(var/datum/robot_component/C in damaged) - if((C.installed == -1) && use_power_oneoff(100 KILOWATTS, LOCAL) <= 0) - C.repair() - - if(ishuman(occupant)) - var/mob/living/carbon/human/H = occupant - var/obj/item/organ/internal/cell/potato = H.internal_organs_by_name[BP_CELL] - if(potato) - target = potato.cell - if((!target || target.percent() > 95) && istype(H.back,/obj/item/rig)) - var/obj/item/rig/R = H.back - if(R.cell && !R.cell.fully_charged()) - target = R.cell - - if(target && !target.fully_charged()) - var/diff = min(target.maxcharge - target.charge, charging_power * CELLRATE) // Capped by charging_power / tick - if(ishuman(occupant)) - var/mob/living/carbon/human/H = occupant - if(H.species.name == SPECIES_ADHERENT) - diff /= 2 //Adherents charge at half the normal rate. - var/charge_used = diff - use_power_oneoff(diff / CELLRATE, LOCAL) * CELLRATE - target.give(charge_used) - -/obj/machinery/recharge_station/examine(mob/user) - . = ..() - var/obj/item/cell/cell = get_cell() - if(cell) - to_chat(user, "The charge meter reads: [cell.percent()]%") - else - to_chat(user, "The indicator shows that the cell is missing.") - -/obj/machinery/recharge_station/relaymove(mob/user as mob) - if(user.stat) - return - go_out() - -/obj/machinery/recharge_station/emp_act(severity) - if(occupant) - occupant.emp_act(severity) - go_out() - var/obj/item/cell/cell = get_cell() - if(cell) - cell.emp_act(severity) - ..(severity) - -/obj/machinery/recharge_station/components_are_accessible(path) - return !occupant && ..() - -/obj/machinery/recharge_station/cannot_transition_to(state_path) - if(occupant) - return SPAN_NOTICE("You cannot do this while \the [src] is occupied!.") - return ..() - -/obj/machinery/recharge_station/RefreshParts() - ..() - var/man_rating = clamp(total_component_rating_of_type(/obj/item/stock_parts/manipulator), 0, 10) - var/cap_rating = clamp(total_component_rating_of_type(/obj/item/stock_parts/capacitor), 0, 10) - - charging_power = 40000 + 40000 * cap_rating - weld_rate = max(0, man_rating - 3) - wire_rate = max(0, man_rating - 5) - - desc = initial(desc) - desc += " Uses a dedicated internal power cell to deliver [charging_power]W when in use." - if(weld_rate) - desc += "
              It is capable of repairing structural damage." - if(wire_rate) - desc += "
              It is capable of repairing burn damage." - -/obj/machinery/recharge_station/proc/overlay_state() - var/obj/item/cell/cell = get_cell() - switch(cell && cell.percent() || 0) - if(0 to 20) - return "statn_c0" - if(20 to 40) - return "statn_c20" - if(40 to 60) - return "statn_c40" - if(60 to 80) - return "statn_c60" - if(80 to 98) - return "statn_c80" - if(90 to 110) - return "statn_c100" - -/obj/machinery/recharge_station/on_update_icon() - ..() - if(stat & BROKEN) - icon_state = "borgcharger0" - return - - if(occupant) - if(stat & NOPOWER) - icon_state = "borgcharger2" - else - icon_state = "borgcharger1" - else - icon_state = "borgcharger0" - - last_overlay_state = overlay_state() - overlays = list(image(overlay_icon, overlay_state())) - -/obj/machinery/recharge_station/Bumped(var/mob/living/silicon/robot/R) - go_in(R) - -/obj/machinery/recharge_station/proc/go_in(var/mob/M) - - - if(occupant) - return - - if(!hascell(M)) - return - - add_fingerprint(M) - M.reset_view(src) - M.forceMove(src) - occupant = M - update_icon() - return 1 - -/obj/machinery/recharge_station/proc/hascell(var/mob/M) - if(isrobot(M)) - var/mob/living/silicon/robot/R = M - return (R.cell) - if(ishuman(M)) - var/mob/living/carbon/human/H = M - if(H.isSynthetic()) // FBPs and IPCs - return 1 - if(istype(H.back,/obj/item/rig)) - var/obj/item/rig/R = H.back - return R.cell - return H.internal_organs_by_name["cell"] - return 0 - -/obj/machinery/recharge_station/proc/go_out() - if(!occupant) - return - - occupant.forceMove(loc) - occupant.reset_view() - occupant = null - update_icon() - -/obj/machinery/recharge_station/verb/move_eject() - set category = "Object" - set name = "Eject Recharger" - set src in oview(1) - - if(usr.incapacitated()) - return - - go_out() - add_fingerprint(usr) - return - -/obj/machinery/recharge_station/verb/move_inside() - set category = "Object" - set name = "Enter Recharger" - set src in oview(1) - if (usr.buckled()) - return - - go_in(usr) diff --git a/code/game/machinery/requests_console.dm b/code/game/machinery/requests_console.dm deleted file mode 100644 index c3b45049670fb..0000000000000 --- a/code/game/machinery/requests_console.dm +++ /dev/null @@ -1,246 +0,0 @@ -/******************** Requests Console ********************/ -/** Originally written by errorage, updated by: Carn, needs more work though. I just added some security fixes */ - -//Request Console Department Types -#define RC_ASSIST 1 //Request Assistance -#define RC_SUPPLY 2 //Request Supplies -#define RC_INFO 4 //Relay Info - -//Request Console Screens -#define RCS_MAINMENU 0 // Main menu -#define RCS_RQASSIST 1 // Request supplies -#define RCS_RQSUPPLY 2 // Request assistance -#define RCS_SENDINFO 3 // Relay information -#define RCS_SENTPASS 4 // Message sent successfully -#define RCS_SENTFAIL 5 // Message sent unsuccessfully -#define RCS_VIEWMSGS 6 // View messages -#define RCS_MESSAUTH 7 // Authentication before sending -#define RCS_ANNOUNCE 8 // Send announcement - -var/global/req_console_assistance = list() -var/global/req_console_supplies = list() -var/global/req_console_information = list() -var/global/list/obj/machinery/requests_console/allConsoles = list() - -/obj/machinery/requests_console - name = "Requests Console" - desc = "A console intended to send requests to different departments." - anchored = TRUE - icon = 'icons/obj/terminals.dmi' - icon_state = "req_comp0" - var/department = "Unknown" //The list of all departments on the station (Determined from this variable on each unit) Set this to the same thing if you want several consoles in one department - var/list/message_log = list() //List of all messages - var/departmentType = 0 //Bitflag. Zero is reply-only. Map currently uses raw numbers instead of defines. - var/newmessagepriority = 0 - // 0 = no new message - // 1 = normal priority - // 2 = high priority - var/screen = RCS_MAINMENU - var/silent = 0 // set to 1 for it not to beep all the time -// var/hackState = 0 - // 0 = not hacked - // 1 = hacked - var/announcementConsole = 0 - // 0 = This console cannot be used to send department announcements - // 1 = This console can send department announcementsf - var/open = 0 // 1 if open - var/announceAuth = 0 //Will be set to 1 when you authenticate yourself for announcements - var/msgVerified = "" //Will contain the name of the person who varified it - var/msgStamped = "" //If a message is stamped, this will contain the stamp name - var/message = ""; - var/recipient = ""; //the department which will be receiving the message - var/priority = -1 ; //Priority of the message being sent - light_outer_range = 0 - var/datum/announcement/announcement = new - -/obj/machinery/requests_console/on_update_icon() - if(stat & NOPOWER) - if(icon_state != "req_comp_off") - icon_state = "req_comp_off" - else - if(icon_state == "req_comp_off") - icon_state = "req_comp[newmessagepriority]" - -/obj/machinery/requests_console/New() - ..() - - announcement.title = "[department] announcement" - announcement.newscast = 1 - - name = "[department] Requests Console" - allConsoles += src - if (departmentType & RC_ASSIST) - req_console_assistance |= department - if (departmentType & RC_SUPPLY) - req_console_supplies |= department - if (departmentType & RC_INFO) - req_console_information |= department - - set_light(1) - -/obj/machinery/requests_console/Destroy() - allConsoles -= src - var/lastDeptRC = 1 - for (var/obj/machinery/requests_console/Console in allConsoles) - if (Console.department == department) - lastDeptRC = 0 - break - if(lastDeptRC) - if (departmentType & RC_ASSIST) - req_console_assistance -= department - if (departmentType & RC_SUPPLY) - req_console_supplies -= department - if (departmentType & RC_INFO) - req_console_information -= department - . = ..() - -/obj/machinery/requests_console/interface_interact(mob/user) - ui_interact(user) - return TRUE - -/obj/machinery/requests_console/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1) - var/data[0] - - data["department"] = department - data["screen"] = screen - data["message_log"] = message_log - data["newmessagepriority"] = newmessagepriority - data["silent"] = silent - data["announcementConsole"] = announcementConsole - - data["assist_dept"] = req_console_assistance - data["supply_dept"] = req_console_supplies - data["info_dept"] = req_console_information - - data["message"] = message - data["recipient"] = recipient - data["priortiy"] = priority - data["msgStamped"] = msgStamped - data["msgVerified"] = msgVerified - data["announceAuth"] = announceAuth - - ui = SSnano.try_update_ui(user, src, ui_key, ui, data, force_open) - if (!ui) - ui = new(user, src, ui_key, "request_console.tmpl", "[department] Request Console", 520, 410) - ui.set_initial_data(data) - ui.open() - -/obj/machinery/requests_console/OnTopic(href, href_list) - if(reject_bad_text(href_list["write"])) - recipient = href_list["write"] //write contains the string of the receiving department's name - - var/new_message = sanitize(input("Write your message:", "Awaiting Input", "")) - if(new_message) - message = new_message - screen = RCS_MESSAUTH - switch(href_list["priority"]) - if("1") priority = 1 - if("2") priority = 2 - else priority = 0 - else - reset_message(1) - return TOPIC_REFRESH - - if(href_list["writeAnnouncement"]) - var/new_message = sanitize(input("Write your message:", "Awaiting Input", "")) - if(new_message) - message = new_message - else - reset_message(1) - return TOPIC_REFRESH - - if(href_list["sendAnnouncement"]) - if(!announcementConsole) return - announcement.Announce(message, msg_sanitized = 1) - reset_message(1) - return TOPIC_REFRESH - - if( href_list["department"] && message ) - var/log_msg = message - screen = RCS_SENTFAIL - var/obj/machinery/message_server/MS = get_message_server(get_z(src)) - if(MS) - if(MS.send_rc_message(ckey(href_list["department"]),department,log_msg,msgStamped,msgVerified,priority)) - screen = RCS_SENTPASS - message_log += "Message sent to [recipient]
              [message]" - else - audible_message(text("[icon2html(src, viewers(get_turf(src)))] *The Requests Console beeps: 'NOTICE: No server detected!'"),,4) - return TOPIC_REFRESH - - //Handle screen switching - if(href_list["setScreen"]) - var/tempScreen = text2num(href_list["setScreen"]) - if(tempScreen == RCS_ANNOUNCE && !announcementConsole) - return - if(tempScreen == RCS_VIEWMSGS) - for (var/obj/machinery/requests_console/Console in allConsoles) - if (Console.department == department) - Console.newmessagepriority = 0 - Console.icon_state = "req_comp0" - Console.set_light(1) - if(tempScreen == RCS_MAINMENU) - reset_message() - screen = tempScreen - return TOPIC_REFRESH - - //Handle silencing the console - if(href_list["toggleSilent"]) - silent = !silent - return TOPIC_REFRESH - - //err... hacking code, which has no reason for existing... but anyway... it was once supposed to unlock priority 3 messanging on that console (EXTREME priority...), but the code for that was removed. -/obj/machinery/requests_console/attackby(var/obj/item/O as obj, var/mob/user as mob) - /* - if (istype(O, /obj/item/crowbar)) - if(open) - open = 0 - icon_state="req_comp0" - else - open = 1 - if(hackState == 0) - icon_state="req_comp_open" - else if(hackState == 1) - icon_state="req_comp_rewired" - if (istype(O, /obj/item/screwdriver)) - if(open) - if(hackState == 0) - hackState = 1 - icon_state="req_comp_rewired" - else if(hackState == 1) - hackState = 0 - icon_state="req_comp_open" - else - to_chat(user, "You can't do much with that.") */ - if (istype(O, /obj/item/card/id)) - if(inoperable(MAINT)) return - if(screen == RCS_MESSAUTH) - var/obj/item/card/id/T = O - msgVerified = text("Verified by [T.registered_name] ([T.assignment])") - SSnano.update_uis(src) - if(screen == RCS_ANNOUNCE) - var/obj/item/card/id/ID = O - if (access_RC_announce in ID.GetAccess()) - announceAuth = 1 - announcement.announcer = ID.assignment ? "[ID.assignment] [ID.registered_name]" : ID.registered_name - else - reset_message() - to_chat(user, "You are not authorized to send announcements.") - SSnano.update_uis(src) - if (istype(O, /obj/item/stamp)) - if(inoperable(MAINT)) return - if(screen == RCS_MESSAUTH) - var/obj/item/stamp/T = O - msgStamped = text("Stamped with the [T.name]") - SSnano.update_uis(src) - return - -/obj/machinery/requests_console/proc/reset_message(var/mainmenu = 0) - message = "" - recipient = "" - priority = 0 - msgVerified = "" - msgStamped = "" - announceAuth = 0 - announcement.announcer = "" - if(mainmenu) - screen = RCS_MAINMENU diff --git a/code/game/machinery/robot_fabricator.dm b/code/game/machinery/robot_fabricator.dm deleted file mode 100644 index 0c68ad58f43bb..0000000000000 --- a/code/game/machinery/robot_fabricator.dm +++ /dev/null @@ -1,138 +0,0 @@ -/obj/machinery/robotic_fabricator - name = "Robotic Fabricator" - icon = 'icons/obj/robotics.dmi' - icon_state = "fab-idle" - density = TRUE - anchored = TRUE - var/metal_amount = 0 - var/operating = 0 - var/obj/item/robot_parts/being_built = null - idle_power_usage = 40 - active_power_usage = 10000 - -/obj/machinery/robotic_fabricator/attackby(var/obj/item/O as obj, var/mob/user as mob) - if (istype(O, /obj/item/stack/material) && O.get_material_name() == MATERIAL_STEEL) - var/obj/item/stack/M = O - if (src.metal_amount < 150000.0) - var/count = 0 - src.overlays += "fab-load-metal" - spawn(15) - if(M) - if(!M.get_amount()) - return - while(metal_amount < 150000 && M.use(1)) - src.metal_amount += O.matter[MATERIAL_STEEL] /*O:height * O:width * O:length * 100000.0*/ - count++ - - to_chat(user, "You insert [count] metal sheet\s into the fabricator.") - src.overlays -= "fab-load-metal" - updateDialog() - else - to_chat(user, "The robot part maker is full. Please remove metal from the robot part maker in order to insert more.") - -/obj/machinery/robotic_fabricator/interface_interact(mob/user) - interact(user) - return TRUE - -/obj/machinery/robotic_fabricator/interact(mob/user) - var/dat - - if (src.operating) - dat = {" -Building [src.being_built.name].
              -Please wait until completion...

              -
              -"} - else - dat = {" -Metal Amount: [min(150000, src.metal_amount)] cm3 (MAX: 150,000)

              -
              -Left Arm (25,000 cc metal.)
              -
              Right Arm (25,000 cc metal.)
              -
              Left Leg (25,000 cc metal.)
              -
              Right Leg (25,000 cc metal).
              -
              Chest (50,000 cc metal).
              -
              Head (50,000 cc metal).
              -
              Robot Frame (75,000 cc metal).
              -"} - - show_browser(user, "Robotic Fabricator Control Panel[dat]", "window=robot_fabricator") - onclose(user, "robot_fabricator") - return - -/obj/machinery/robotic_fabricator/Topic(href, href_list) - if (..()) - return - - usr.set_machine(src) - - if (href_list["make"]) - if (!src.operating) - var/part_type = text2num(href_list["make"]) - - var/build_type = null - var/build_time = 200 - var/build_cost = 25000 - - switch (part_type) - if (1) - build_type = /obj/item/robot_parts/l_arm - build_time = 200 - build_cost = 25000 - - if (2) - build_type = /obj/item/robot_parts/r_arm - build_time = 200 - build_cost = 25000 - - if (3) - build_type = /obj/item/robot_parts/l_leg - build_time = 200 - build_cost = 25000 - - if (4) - build_type = /obj/item/robot_parts/r_leg - build_time = 200 - build_cost = 25000 - - if (5) - build_type = /obj/item/robot_parts/chest - build_time = 350 - build_cost = 50000 - - if (6) - build_type = /obj/item/robot_parts/head - build_time = 350 - build_cost = 50000 - - if (7) - build_type = /obj/item/robot_parts/robot_suit - build_time = 600 - build_cost = 75000 - - var/building = build_type - if (!isnull(building)) - if (src.metal_amount >= build_cost) - src.operating = 1 - src.update_use_power(POWER_USE_ACTIVE) - - src.metal_amount = max(0, src.metal_amount - build_cost) - - src.being_built = new building(src) - - src.overlays += "fab-active" - src.updateUsrDialog() - addtimer(CALLBACK(src, .proc/done_building), build_time) - return - - for (var/mob/M in viewers(1, src)) - if (M.client && M.machine == src) - src.attack_hand(M) - -/obj/machinery/robotic_fabricator/proc/done_building() - if (!isnull(being_built)) - being_built.dropInto(get_turf(src)) - being_built = null - update_use_power(POWER_USE_IDLE) - overlays -= "fab-active" - operating = FALSE diff --git a/code/game/machinery/robotics_fabricator.dm b/code/game/machinery/robotics_fabricator.dm deleted file mode 100644 index 82b0503653892..0000000000000 --- a/code/game/machinery/robotics_fabricator.dm +++ /dev/null @@ -1,329 +0,0 @@ -/obj/machinery/robotics_fabricator - name = "Exosuit Fabricator" - desc = "A machine used for construction of robotics and mechs." - icon = 'icons/obj/robotics.dmi' - icon_state = "fab-idle" - density = TRUE - anchored = TRUE - idle_power_usage = 20 - active_power_usage = 5000 - req_access = list(access_robotics) - base_type = /obj/machinery/robotics_fabricator - construct_state = /decl/machine_construction/default/panel_closed - uncreated_component_parts = null - stat_immune = 0 - - machine_name = "exosuit fabricator" - machine_desc = "A heavy-duty fabricator that can produce parts for exosuits and robots." - - var/speed = 1 - var/mat_efficiency = 1 - var/list/materials = list(MATERIAL_STEEL = 0, MATERIAL_ALUMINIUM = 0, MATERIAL_PLASTIC = 0, MATERIAL_GLASS = 0, MATERIAL_GOLD = 0, MATERIAL_SILVER = 0, MATERIAL_PHORON = 0, MATERIAL_URANIUM = 0, MATERIAL_DIAMOND = 0) - var/res_max_amount = 200000 - - var/datum/research/files - var/list/datum/design/queue = list() - var/progress = 0 - var/busy = 0 - - var/list/categories = list() - var/category = null - var/manufacturer = null - var/sync_message = "" - -/obj/machinery/robotics_fabricator/Initialize() - files = new /datum/research(src) //Setup the research data holder. - manufacturer = basic_robolimb.company - update_categories() - . = ..() - -/obj/machinery/robotics_fabricator/Process() - if(stat) - return - if(busy) - update_use_power(POWER_USE_ACTIVE) - progress += speed - check_build() - else - update_use_power(POWER_USE_IDLE) - update_icon() - -/obj/machinery/robotics_fabricator/on_update_icon() - overlays.Cut() - if(panel_open) - icon_state = "fab-o" - else - icon_state = "fab-idle" - if(busy) - overlays += "fab-active" - -/obj/machinery/robotics_fabricator/dismantle() - for(var/f in materials) - eject_materials(f, -1) - ..() - -/obj/machinery/robotics_fabricator/RefreshParts() - res_max_amount = 100000 * total_component_rating_of_type(/obj/item/stock_parts/matter_bin) - - var/T = clamp(total_component_rating_of_type(/obj/item/stock_parts/manipulator), 0, 4) - mat_efficiency = 1 - (T - 1) / 4 // 1 -> 0.5 - - T += total_component_rating_of_type(/obj/item/stock_parts/micro_laser)// Not resetting T is intended; speed is affected by both - speed = T / 2 // 1 -> 3 - -/obj/machinery/robotics_fabricator/interface_interact(var/mob/user) - ui_interact(user) - return TRUE - -/obj/machinery/robotics_fabricator/ui_interact(var/mob/user, var/ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1) - var/data[0] - - var/datum/design/current = queue.len ? queue[1] : null - if(current) - data["current"] = current.name - data["queue"] = get_queue_names() - data["buildable"] = get_build_options() - data["category"] = category - data["categories"] = categories - if(all_robolimbs) - var/list/T = list() - for(var/A in all_robolimbs) - var/datum/robolimb/R = all_robolimbs[A] - if(R.unavailable_at_fab || R.applies_to_part.len) - continue - T += list(list("id" = A, "company" = R.company)) - data["manufacturers"] = T - data["manufacturer"] = manufacturer - data["materials"] = get_materials() - data["maxres"] = res_max_amount - data["sync"] = sync_message - if(current) - data["builtperc"] = round((progress / current.time) * 100) - - ui = SSnano.try_update_ui(user, src, ui_key, ui, data, force_open) - if(!ui) - ui = new(user, src, ui_key, "mechfab.tmpl", "Exosuit Fabricator UI", 800, 600) - ui.set_initial_data(data) - ui.open() - ui.set_auto_update(1) - -/obj/machinery/robotics_fabricator/Topic(href, href_list) - if(..()) - return - - if(href_list["build"]) - add_to_queue(text2num(href_list["build"])) - - if(href_list["remove"]) - remove_from_queue(text2num(href_list["remove"])) - - if(href_list["category"]) - if(href_list["category"] in categories) - category = href_list["category"] - - if(href_list["manufacturer"]) - if(href_list["manufacturer"] in all_robolimbs) - manufacturer = href_list["manufacturer"] - - if(href_list["eject"]) - eject_materials(href_list["eject"], text2num(href_list["amount"])) - - if(href_list["sync"]) - sync() - else - sync_message = "" - - return 1 - -/obj/machinery/robotics_fabricator/components_are_accessible(path) - return !busy && ..() - -/obj/machinery/robotics_fabricator/cannot_transition_to(state_path) - if(busy) - return SPAN_NOTICE("\The [src] is busy. Please wait for completion of previous operation.") - return ..() - -/obj/machinery/robotics_fabricator/attackby(var/obj/item/I, var/mob/user) - if(busy) - to_chat(user, "\The [src] is busy. Please wait for completion of previous operation.") - return 1 - if(!istype(I, /obj/item/stack/material)) - return ..() - - var/obj/item/stack/material/stack = I - var/material = stack.material.name - var/stack_singular = "[stack.material.use_name] [stack.material.sheet_singular_name]" // eg "steel sheet", "wood plank" - var/stack_plural = "[stack.material.use_name] [stack.material.sheet_plural_name]" // eg "steel sheets", "wood planks" - var/amnt = stack.perunit - - if(stack.uses_charge) - return - - if(!(material in materials)) - to_chat(user, "\The [src] does not accept [stack_plural]!") - return - - if(materials[material] + amnt <= res_max_amount) - if(stack && stack.can_use(1)) - var/count = 0 - overlays += "fab-load-metal" - spawn(10) - overlays -= "fab-load-metal" - while(materials[material] + amnt <= res_max_amount && stack.amount >= 1) - materials[material] += amnt - stack.use(1) - count++ - to_chat(user, "You insert [count] [count==1 ? stack_singular : stack_plural] into the fabricator.")// 0 steel sheets, 1 steel sheet, 2 steel sheets, etc - - update_busy() - else - to_chat(user, "The fabricator cannot hold more [stack_plural].")// use the plural form even if the given sheet is singular - - -/obj/machinery/robotics_fabricator/emag_act(var/remaining_charges, var/mob/user) - if (emagged) - to_chat(user, SPAN_WARNING("No records in user DB.")) - return - emagged = TRUE - req_access.Cut() - to_chat(user, SPAN_NOTICE("User DB truncated; defaulting to open access.")) - return 1 - -/obj/machinery/robotics_fabricator/proc/update_busy() - if(queue.len) - if(can_build(queue[1])) - busy = 1 - else - busy = 0 - else - busy = 0 - -/obj/machinery/robotics_fabricator/proc/add_to_queue(var/index) - var/datum/design/D = files.known_designs[index] - queue += D - update_busy() - -/obj/machinery/robotics_fabricator/proc/remove_from_queue(var/index) - if(index == 1) - progress = 0 - if (length(queue) >= index) - queue.Cut(index, index + 1) - update_busy() - -/obj/machinery/robotics_fabricator/proc/can_build(var/datum/design/D) - for(var/M in D.materials) - if(materials[M] <= D.materials[M] * mat_efficiency) - return 0 - return 1 - -/obj/machinery/robotics_fabricator/proc/check_build() - if(!queue.len) - progress = 0 - return - var/datum/design/D = queue[1] - if(!can_build(D)) - progress = 0 - return - if(D.time > progress) - return - for(var/M in D.materials) - materials[M] = max(0, materials[M] - D.materials[M] * mat_efficiency) - if(D.build_path) - var/obj/new_item = D.Fabricate(loc, src) - visible_message("\The [src] pings, indicating that \the [D] is complete.", "You hear a ping.") - if(mat_efficiency != 1) - if(new_item.matter && new_item.matter.len > 0) - for(var/i in new_item.matter) - new_item.matter[i] = new_item.matter[i] * mat_efficiency - remove_from_queue(1) - -/obj/machinery/robotics_fabricator/proc/get_queue_names() - . = list() - for(var/i = 2 to queue.len) - var/datum/design/D = queue[i] - . += D.name - -/obj/machinery/robotics_fabricator/proc/get_build_options() - . = list() - for(var/i = 1 to files.known_designs.len) - var/datum/design/D = files.known_designs[i] - if(!D.build_path || !(D.build_type & MECHFAB)) - continue - . += list(list("name" = D.name, "id" = i, "category" = D.category, "resourses" = get_design_resourses(D), "time" = get_design_time(D))) - -/obj/machinery/robotics_fabricator/proc/get_design_resourses(var/datum/design/D) - var/list/F = list() - for(var/T in D.materials) - F += "[capitalize(T)]: [D.materials[T] * mat_efficiency]" - return english_list(F, and_text = ", ") - -/obj/machinery/robotics_fabricator/proc/get_design_time(var/datum/design/D) - if (speed == 0) - return "INFINITE" - - return time2text(round(10 * D.time / speed), "mm:ss") - -/obj/machinery/robotics_fabricator/proc/update_categories() - categories = list() - for(var/datum/design/D in files.known_designs) - if(!D.build_path || !(D.build_type & MECHFAB)) - continue - categories |= D.category - if(!category || !(category in categories)) - category = categories[1] - -/obj/machinery/robotics_fabricator/proc/get_materials() - . = list() - for(var/T in materials) - . += list(list("mat" = capitalize(T), "amt" = materials[T])) - -/obj/machinery/robotics_fabricator/proc/eject_materials(var/material, var/amount) // 0 amount = 0 means ejecting a full stack; -1 means eject everything - var/recursive = amount == -1 ? 1 : 0 - material = lowertext(material) - var/mattype - switch(material) - if(MATERIAL_STEEL) - mattype = /obj/item/stack/material/steel - if(MATERIAL_GLASS) - mattype = /obj/item/stack/material/glass - if(MATERIAL_ALUMINIUM) - mattype = /obj/item/stack/material/aluminium - if(MATERIAL_PLASTIC) - mattype = /obj/item/stack/material/plastic - if(MATERIAL_GOLD) - mattype = /obj/item/stack/material/gold - if(MATERIAL_SILVER) - mattype = /obj/item/stack/material/silver - if(MATERIAL_DIAMOND) - mattype = /obj/item/stack/material/diamond - if(MATERIAL_PHORON) - mattype = /obj/item/stack/material/phoron - if(MATERIAL_URANIUM) - mattype = /obj/item/stack/material/uranium - else - return - var/obj/item/stack/material/S = new mattype(loc) - if(amount <= 0) - amount = S.max_amount - var/ejected = min(round(materials[material] / S.perunit), amount) - S.amount = min(ejected, amount) - if(S.amount <= 0) - qdel(S) - return - materials[material] -= ejected * S.perunit - if(recursive && materials[material] >= S.perunit) - eject_materials(material, -1) - update_busy() - -/obj/machinery/robotics_fabricator/proc/sync() - sync_message = "Error: no console found." - for(var/obj/machinery/computer/rdconsole/RDC in get_area_all_atoms(get_area(src))) - if(!RDC.sync) - continue - for(var/datum/tech/T in RDC.files.known_tech) - files.AddTech2Known(T) - for(var/datum/design/D in RDC.files.known_designs) - files.AddDesign2Known(D) - files.RefreshResearch() - sync_message = "Sync complete." - update_categories() \ No newline at end of file diff --git a/code/game/machinery/rotating_alarm.dm b/code/game/machinery/rotating_alarm.dm deleted file mode 100644 index 453fa004982ff..0000000000000 --- a/code/game/machinery/rotating_alarm.dm +++ /dev/null @@ -1,108 +0,0 @@ -/obj/effect/spinning_light - var/spin_rate = 1 SECOND - var/_size = 48 - var/_factor = 0.5 - var/_density = 4 - var/_offset = 30 - var/_color = COLOR_ORANGE - plane = EFFECTS_ABOVE_LIGHTING_PLANE - layer = EYE_GLOW_LAYER - mouse_opacity = 0 - - -/obj/effect/spinning_light/Initialize() - . = ..() - filters = filter(type="rays", size = _size, color = _color, factor = _factor, density = _density, flags = FILTER_OVERLAY, offset = _offset) - - alpha = 200 - - //Rays start rotated which made synchronizing the scaling a bit difficult, so let's move it 45 degrees - var matrix/m = new - var/matrix/test = new - test.Turn(-45) - var/matrix/squished = new - squished.Scale(1, 0.5) - animate(src, transform = test * m.Turn(90), spin_rate / 4, loop = -1) - animate(transform = test * m.Turn(90), spin_rate / 4, loop = -1) - animate(transform = test * m.Turn(90), spin_rate / 4, loop = -1) - animate(transform = test * matrix(), spin_rate / 4, loop = -1) - - -/obj/effect/spinning_light/set_color(_color) - filters = filter(type="rays", size = _size, color = _color, factor = _factor, density = _density, flags = FILTER_OVERLAY, offset = _offset) - - -/obj/machinery/rotating_alarm - name = "Industrial alarm" - desc = "An industrial rotating alarm light." - icon = 'icons/obj/rotating_alarm.dmi' - icon_state = "alarm" - idle_power_usage = 0 - active_power_usage = 0 - anchored = TRUE - - var/on = FALSE - var/low_alarm = FALSE - var/construct_type = /obj/machinery/light_construct - - var/obj/effect/spinning_light/spin_effect = null - - var/alarm_light_color = COLOR_ORANGE - /// This is an angle to rotate the colour of alarm and its light. Default is orange, so, a 45 degree angle clockwise will make it green - var/angle = 0 - - var/static/list/spinning_lights_cache = list() - - -/obj/machinery/rotating_alarm/Initialize() - . = ..() - - //Setup colour - var/list/color_matrix = color_rotation(angle) - - color = color_matrix - - set_color(alarm_light_color) - - set_dir(dir) //Set dir again so offsets update correctly - - -/obj/machinery/rotating_alarm/set_dir(ndir) //Due to effect, offsets cannot be part of sprite, so need to set it for each dir - . = ..() - if(dir == NORTH) - pixel_y = -13 - if(dir == SOUTH) - pixel_y = 28 - if(dir == WEST) - pixel_x = 20 - if(dir == EAST) - pixel_x = -20 - - -/obj/machinery/rotating_alarm/set_color(color) - if (on) - vis_contents -= spin_effect - if (isnull(spinning_lights_cache["[color]"])) - spinning_lights_cache["[color]"] = new /obj/effect/spinning_light() - spin_effect = spinning_lights_cache["[color]"] - alarm_light_color = color - var/HSV = RGBtoHSV(alarm_light_color) - var/RGB = HSVtoRGB(RotateHue(HSV, angle)) - alarm_light_color = RGB - spin_effect.set_color(color) - if (on) - vis_contents += spin_effect - - -/obj/machinery/rotating_alarm/proc/set_on() - vis_contents += spin_effect - set_light(1, 0.5, 2, 0.3, alarm_light_color) - on = TRUE - low_alarm = FALSE - - -/obj/machinery/rotating_alarm/proc/set_off() - vis_contents -= spin_effect - set_light(0) - on = FALSE - low_alarm = FALSE diff --git a/code/game/machinery/rotating_alarm/station_alerts.dm b/code/game/machinery/rotating_alarm/station_alerts.dm deleted file mode 100644 index fbd0d3377ddd7..0000000000000 --- a/code/game/machinery/rotating_alarm/station_alerts.dm +++ /dev/null @@ -1,15 +0,0 @@ -/obj/machinery/rotating_alarm/security_alarm - name = "security level signal" - desc = "A rotating alarm light that changes color to indicate a ship-wide alert." - icon_state = "code green" - alarm_light_color = COLOR_GREEN - - -/obj/machinery/rotating_alarm/security_alarm/proc/set_alert(icon_state, alert_level, alert_color) - set_color(alert_color) - set_icon_state(icon_state) - switch (alert_level) - if ("off") - set_off() - if ("on") - set_on() diff --git a/code/game/machinery/seed_extractor.dm b/code/game/machinery/seed_extractor.dm deleted file mode 100644 index 8c6d0a0ef52cc..0000000000000 --- a/code/game/machinery/seed_extractor.dm +++ /dev/null @@ -1,52 +0,0 @@ -/obj/machinery/seed_extractor - name = "seed extractor" - desc = "Extracts and bags seeds from produce." - icon = 'icons/obj/hydroponics_machines.dmi' - icon_state = "sextractor" - density = TRUE - anchored = TRUE - use_power = POWER_USE_ACTIVE - idle_power_usage = 10 - active_power_usage = 2000 - construct_state = /decl/machine_construction/default/panel_closed - uncreated_component_parts = null - stat_immune = 0 - machine_name = "seed extractor" - machine_desc = "Extracts a number of growable seed packets from a provided plant sample. The sample is destroyed in the process." - -/obj/machinery/seed_extractor/attackby(var/obj/item/O, var/mob/user) - if((. = component_attackby(O, user))) - return - // Fruits and vegetables. - if(istype(O, /obj/item/reagent_containers/food/snacks/grown)) - if(!user.unEquip(O)) - return - - var/obj/item/reagent_containers/food/snacks/grown/F = O - var/datum/seed/new_seed_type = SSplants.seeds[F.plantname] - - if(new_seed_type) - to_chat(user, "You extract some seeds from [O].") - var/produce = rand(1,4) - for(var/i = 0;i<=produce;i++) - var/obj/item/seeds/seeds = new(get_turf(src)) - seeds.seed_type = new_seed_type.name - seeds.update_seed() - else - to_chat(user, "[O] doesn't seem to have any usable seeds inside it.") - - qdel(O) - - //Grass. - else if(istype(O, /obj/item/stack/tile/grass)) - var/obj/item/stack/tile/grass/S = O - if (S.use(1)) - to_chat(user, "You extract some seeds from the grass tile.") - new /obj/item/seeds/grassseed(loc) - - else if(istype(O, /obj/item/fossil/plant)) // Fossils - var/obj/item/seeds/random/R = new(get_turf(src)) - to_chat(user, "\The [src] scans \the [O] and spits out \a [R].") - qdel(O) - - return diff --git a/code/game/machinery/self_destruct.dm b/code/game/machinery/self_destruct.dm deleted file mode 100644 index fea618068faa1..0000000000000 --- a/code/game/machinery/self_destruct.dm +++ /dev/null @@ -1,120 +0,0 @@ -/obj/machinery/self_destruct - name = "\improper Nuclear Cylinder Inserter" - desc = "A hollow space used to insert nuclear cylinders for arming the self destruct." - icon = 'icons/obj/machines/self_destruct.dmi' - icon_state = "empty" - density = FALSE - anchored = TRUE - var/obj/item/nuclear_cylinder/cylinder - var/armed = 0 - var/damaged = 0 - -/obj/machinery/self_destruct/attackby(obj/item/W as obj, mob/user as mob) - if(isWelder(W)) - if(damaged) - user.visible_message("[user] begins to repair [src].", "You begin repairing [src].") - if(do_after(usr, 10 SECONDS, src, DO_PUBLIC_UNIQUE)) - var/obj/item/weldingtool/w - if(w.burn_fuel(10)) - damaged = 0 - user.visible_message("[user] repairs [src].", "You repair [src].") - else - to_chat(user, "There is not enough fuel to repair [src].") - return - if(istype(W, /obj/item/nuclear_cylinder)) - if(damaged) - to_chat(user, "[src] is damaged, you cannot place the cylinder.") - return - if(cylinder) - to_chat(user, "There is already a cylinder here.") - return - user.visible_message("[user] begins to carefully place [W] onto the Inserter.", "You begin to carefully place [W] onto the Inserter.") - if(do_after(user, 8 SECONDS, src, DO_PUBLIC_UNIQUE) && user.unEquip(W, src)) - cylinder = W - set_density(TRUE) - user.visible_message("[user] places [W] onto the Inserter.", "You place [W] onto the Inserter.") - update_icon() - return - ..() - -/obj/machinery/self_destruct/physical_attack_hand(mob/user) - if(cylinder) - . = TRUE - if(armed) - if(damaged) - to_chat(user, "The inserter has been damaged, unable to disarm.") - return - var/obj/machinery/nuclearbomb/nuke = locate(/obj/machinery/nuclearbomb/station) in get_area(src) - if(!nuke) - to_chat(user, "Unable to interface with the self destruct terminal, unable to disarm.") - return - if(nuke.timing) - to_chat(user, "The self destruct sequence is in progress, unable to disarm.") - return - user.visible_message("[user] begins extracting [cylinder].", "You begin extracting [cylinder].") - if(do_after(user, 4 SECONDS, src, DO_PUBLIC_UNIQUE)) - user.visible_message("[user] extracts [cylinder].", "You extract [cylinder].") - armed = 0 - set_density(TRUE) - flick("unloading", src) - else if(!damaged) - user.visible_message("[user] begins to arm [cylinder].", "You begin to arm [cylinder].") - if(do_after(user, 4 SECONDS, src, DO_PUBLIC_UNIQUE)) - armed = 1 - set_density(FALSE) - user.visible_message("[user] arms [cylinder].", "You arm [cylinder].") - flick("loading", src) - playsound(src.loc,'sound/effects/caution.ogg',50,1,5) - update_icon() - src.add_fingerprint(user) - -/obj/machinery/self_destruct/MouseDrop(atom/over) - if(!CanMouseDrop(over, usr)) - return - if(over == usr && cylinder) - if(armed) - to_chat(usr, "Disarm the cylinder first.") - else - usr.visible_message("[usr] beings to carefully pick up [cylinder].", "You begin to carefully pick up [cylinder].") - if(do_after(usr, 7 SECONDS, src, DO_PUBLIC_UNIQUE)) - usr.put_in_hands(cylinder) - usr.visible_message("[usr] picks up [cylinder].", "You pick up [cylinder].") - set_density(FALSE) - cylinder = null - update_icon() - src.add_fingerprint(usr) - ..() - -/obj/machinery/self_destruct/ex_act(severity) - switch(severity) - if(EX_ACT_DEVASTATING) - set_damaged() - if(EX_ACT_HEAVY) - if(prob(50)) - set_damaged() - if(EX_ACT_LIGHT) - if(prob(25)) - set_damaged() - -/obj/machinery/self_destruct/proc/set_damaged() - src.visible_message("[src] dents and chars.") - damaged = 1 - -/obj/machinery/self_destruct/examine(mob/user) - . = ..() - if(damaged) - to_chat(user, "[src] is damaged, it needs repairs.") - return - if(armed) - to_chat(user, "[src] is armed and ready.") - return - if(cylinder) - to_chat(user, "[src] is loaded and ready to be armed.") - -/obj/machinery/self_destruct/on_update_icon() - if(armed) - icon_state = "armed" - else if(cylinder) - icon_state = "loaded" - else - icon_state = "empty" diff --git a/code/game/machinery/spaceheater.dm b/code/game/machinery/spaceheater.dm deleted file mode 100644 index 000bab7cc5b43..0000000000000 --- a/code/game/machinery/spaceheater.dm +++ /dev/null @@ -1,198 +0,0 @@ -/obj/machinery/space_heater - use_power = POWER_USE_OFF - anchored = FALSE - density = TRUE - icon = 'icons/obj/atmos.dmi' - icon_state = "sheater-off" - name = "space heater" - desc = "Made by Space Amish using traditional space techniques, this heater is guaranteed not to set anything, or anyone, on fire." - var/obj/item/cell/cell - var/on = 0 - var/set_temperature = T0C + 20 //K - var/active = 0 - var/heating_power = 40 KILOWATTS - atom_flags = ATOM_FLAG_NO_TEMP_CHANGE | ATOM_FLAG_CLIMBABLE - clicksound = "switch" - - -/obj/machinery/space_heater/New() - ..() - cell = new/obj/item/cell/high(src) - update_icon() - -/obj/machinery/space_heater/on_update_icon(var/rebuild_overlay = 0) - if(!on) - icon_state = "sheater-off" - set_light(0) - else if(active > 0) - icon_state = "sheater-heat" - set_light(0.7, 1, 2, 3, COLOR_SEDONA) - else if(active < 0) - icon_state = "sheater-cool" - set_light(0.7, 1, 2, 3, COLOR_DEEP_SKY_BLUE) - else - icon_state = "sheater-standby" - set_light(0) - - if(rebuild_overlay) - overlays.Cut() - if(panel_open) - overlays += "sheater-open" - -/obj/machinery/space_heater/examine(mob/user) - . = ..() - - to_chat(user, "The heater is [on ? "on" : "off"] and the hatch is [panel_open ? "open" : "closed"].") - if(panel_open) - to_chat(user, "The power cell is [cell ? "installed" : "missing"].") - else - to_chat(user, "The charge meter reads [cell ? round(cell.percent(),1) : 0]%") - -/obj/machinery/space_heater/emp_act(severity) - if(stat & (BROKEN|NOPOWER)) - ..(severity) - return - if(cell) - cell.emp_act(severity) - ..(severity) - -/obj/machinery/space_heater/attackby(obj/item/I, mob/user) - if(istype(I, /obj/item/cell)) - if(panel_open) - if(cell) - to_chat(user, "There is already a power cell inside.") - return - else - // insert cell - if(!user.unEquip(I, src)) - return - cell = I - user.visible_message("[user] inserts a power cell into [src].", "You insert the power cell into [src].") - power_change() - else - to_chat(user, "The hatch must be open to insert a power cell.") - return - else if(isScrewdriver(I)) - panel_open = !panel_open - user.visible_message("[user] [panel_open ? "opens" : "closes"] the hatch on the [src].", "You [panel_open ? "open" : "close"] the hatch on the [src].") - update_icon(1) - if(!panel_open && user.machine == src) - show_browser(user, null, "window=spaceheater") - user.unset_machine() - else - ..() - return - -/obj/machinery/space_heater/interface_interact(mob/user) - if(panel_open) - interact(user) - return TRUE - -/obj/machinery/space_heater/interact(mob/user) - if(panel_open) - var/list/dat = list() - dat += "Power cell: " - if(cell) - dat += "
              Installed
              " - else - dat += "Removed
              " - - dat += "Power Level: [cell ? round(cell.percent(),1) : 0]%

              " - - dat += "Set Temperature: " - - dat += "-" - - dat += " [set_temperature]K ([set_temperature-T0C]°C)" - dat += "+
              " - - var/datum/browser/popup = new(usr, "spaceheater", "Space Heater Control Panel") - popup.set_content(jointext(dat, null)) - popup.set_title_image(usr.browse_rsc_icon(src.icon, "sheater-standby")) - popup.open() - - return - -/obj/machinery/space_heater/physical_attack_hand(mob/user) - if(!panel_open) - on = !on - user.visible_message("[user] switches [on ? "on" : "off"] the [src].","You switch [on ? "on" : "off"] the [src].") - update_icon() - return TRUE - -/obj/machinery/space_heater/Topic(href, href_list, state = GLOB.physical_state) - if (..()) - show_browser(usr, null, "window=spaceheater") - usr.unset_machine() - return 1 - - switch(href_list["op"]) - - if("temp") - var/value = text2num(href_list["val"]) - - // limit to 0-90 degC - set_temperature = dd_range(T0C, T0C + 90, set_temperature + value) - - if("cellremove") - if(panel_open && cell && !usr.get_active_hand()) - usr.visible_message("\The usr] removes \the [cell] from \the [src].", "You remove \the [cell] from \the [src].") - cell.update_icon() - usr.put_in_hands(cell) - cell.add_fingerprint(usr) - cell = null - power_change() - - if("cellinstall") - if(panel_open && !cell) - var/obj/item/cell/C = usr.get_active_hand() - if(istype(C)) - if(!usr.unEquip(C, src)) - return - cell = C - C.add_fingerprint(usr) - power_change() - usr.visible_message("[usr] inserts \the [C] into \the [src].", "You insert \the [C] into \the [src].") - - updateDialog() - -/obj/machinery/space_heater/Process() - if(on) - if(powered() || (cell && cell.charge)) - var/datum/gas_mixture/env = loc.return_air() - if(env && abs(env.temperature - set_temperature) <= 0.1) - active = 0 - else - var/transfer_moles = 0.25 * env.total_moles - var/datum/gas_mixture/removed = env.remove(transfer_moles) - - if(removed) - var/heat_transfer = removed.get_thermal_energy_change(set_temperature) - var/power_draw - if(heat_transfer > 0) //heating air - heat_transfer = min( heat_transfer , heating_power ) //limit by the power rating of the heater - - removed.add_thermal_energy(heat_transfer) - power_draw = heat_transfer - else //cooling air - heat_transfer = abs(heat_transfer) - - //Assume the heat is being pumped into the hull which is fixed at 20 C - var/cop = removed.temperature/T20C //coefficient of performance from thermodynamics -> power used = heat_transfer/cop - heat_transfer = min(heat_transfer, cop * heating_power) //limit heat transfer by available power - - heat_transfer = removed.add_thermal_energy(-heat_transfer) //get the actual heat transfer - - power_draw = abs(heat_transfer)/cop - if(!powered()) - cell.use(power_draw*CELLRATE) - else - use_power_oneoff(power_draw) - active = heat_transfer - - env.merge(removed) - else - on = 0 - active = 0 - power_change() - update_icon() diff --git a/code/game/machinery/status_display.dm b/code/game/machinery/status_display.dm deleted file mode 100644 index e63859ddbe02b..0000000000000 --- a/code/game/machinery/status_display.dm +++ /dev/null @@ -1,264 +0,0 @@ -#define FONT_SIZE "5pt" -#define FONT_COLOR "#09f" -#define FONT_STYLE "Arial Black" -#define SCROLL_SPEED 2 - -// Status display -// (formerly Countdown timer display) - -// Use to show shuttle ETA/ETD times -// Alert status -// And arbitrary messages set by comms computer -/obj/machinery/status_display - icon = 'icons/obj/status_display.dmi' - icon_state = "frame" - name = "status display" - layer = ABOVE_WINDOW_LAYER - anchored = TRUE - density = FALSE - idle_power_usage = 10 - var/mode = 1 // 0 = Blank - // 1 = Shuttle timer - // 2 = Arbitrary message(s) - // 3 = alert picture - // 4 = Supply shuttle timer - - var/picture_state = "greenalert" // icon_state of alert picture - var/message1 = "" // message line 1 - var/message2 = "" // message line 2 - var/index1 // display index for scrolling messages or 0 if non-scrolling - var/index2 - var/picture = null - - var/frequency = 1435 // radio frequency - - var/friendc = 0 // track if Friend Computer mode - var/ignore_friendc = 0 - - maptext_height = 26 - maptext_width = 32 - - var/const/CHARS_PER_LINE = 5 - var/const/STATUS_DISPLAY_BLANK = 0 - var/const/STATUS_DISPLAY_TRANSFER_SHUTTLE_TIME = 1 - var/const/STATUS_DISPLAY_MESSAGE = 2 - var/const/STATUS_DISPLAY_ALERT = 3 - var/const/STATUS_DISPLAY_TIME = 4 - var/const/STATUS_DISPLAY_IMAGE = 5 - var/const/STATUS_DISPLAY_CUSTOM = 99 - - var/status_display_show_alert_border = FALSE - -/obj/machinery/status_display/Destroy() - if(radio_controller) - radio_controller.remove_object(src,frequency) - return ..() - -// register for radio system -/obj/machinery/status_display/Initialize() - . = ..() - if(radio_controller) - radio_controller.add_object(src, frequency) - -// timed process -/obj/machinery/status_display/Process() - if(stat & NOPOWER) - remove_display() - return - update() - -/obj/machinery/status_display/emp_act(severity) - if(stat & (BROKEN|NOPOWER)) - ..(severity) - return - set_picture("ai_bsod") - ..(severity) - -// set what is displayed -/obj/machinery/status_display/proc/update() - remove_display() - if(friendc && !ignore_friendc) - set_picture("ai_friend") - if(status_display_show_alert_border) - add_alert_border_to_display() - return 1 - - switch(mode) - if(STATUS_DISPLAY_BLANK) //blank - if(status_display_show_alert_border) - add_alert_border_to_display() - return 1 - if(STATUS_DISPLAY_TRANSFER_SHUTTLE_TIME) //emergency shuttle timer - if(evacuation_controller.is_prepared()) - message1 = "-ETD-" - if (evacuation_controller.waiting_to_leave()) - message2 = "Launch" - else - message2 = get_shuttle_timer() - if(length(message2) > CHARS_PER_LINE) - message2 = "Error" - update_display(message1, message2) - else if(evacuation_controller.has_eta()) - message1 = "-ETA-" - message2 = get_shuttle_timer() - if(length(message2) > CHARS_PER_LINE) - message2 = "Error" - update_display(message1, message2) - if(status_display_show_alert_border) - add_alert_border_to_display() - return 1 - if(STATUS_DISPLAY_MESSAGE) //custom messages - var/line1 - var/line2 - - if(!index1) - line1 = message1 - else - line1 = copytext_char(message1+"|"+message1, index1, index1+CHARS_PER_LINE) - var/message1_len = length(message1) - index1 += SCROLL_SPEED - if(index1 > message1_len) - index1 -= message1_len - - if(!index2) - line2 = message2 - else - line2 = copytext_char(message2+"|"+message2, index2, index2+CHARS_PER_LINE) - var/message2_len = length(message2) - index2 += SCROLL_SPEED - if(index2 > message2_len) - index2 -= message2_len - update_display(line1, line2) - if(status_display_show_alert_border) - add_alert_border_to_display() - return 1 - if(STATUS_DISPLAY_ALERT) - display_alert() - return 1 - if(STATUS_DISPLAY_TIME) - message1 = "TIME" - message2 = stationtime2text() - update_display(message1, message2) - if(status_display_show_alert_border) - add_alert_border_to_display() - return 1 - if(STATUS_DISPLAY_IMAGE) - set_picture(picture_state) - if(status_display_show_alert_border) - add_alert_border_to_display() - return 1 - return 0 - -/obj/machinery/status_display/examine(mob/user) - . = ..() - if(mode != STATUS_DISPLAY_BLANK && mode != STATUS_DISPLAY_ALERT) - to_chat(user, "The display says:
              \t[sanitize(message1)]
              \t[sanitize(message2)]") - if(mode == STATUS_DISPLAY_ALERT || status_display_show_alert_border) - var/decl/security_state/security_state = decls_repository.get_decl(GLOB.using_map.security_state) - to_chat(user, "The current alert level is [security_state.current_security_level.name].") - -/obj/machinery/status_display/proc/set_message(m1, m2) - if(m1) - index1 = (length(m1) > CHARS_PER_LINE) - message1 = m1 - else - message1 = "" - index1 = 0 - - if(m2) - index2 = (length(m2) > CHARS_PER_LINE) - message2 = m2 - else - message2 = "" - index2 = 0 - -/obj/machinery/status_display/proc/toggle_alert_border() - status_display_show_alert_border = !status_display_show_alert_border - -/obj/machinery/status_display/proc/add_alert_border_to_display() - var/decl/security_state/security_state = decls_repository.get_decl(GLOB.using_map.security_state) - var/decl/security_level/sl = security_state.current_security_level - - var/border = image(sl.icon,sl.alert_border) - - overlays |= border - -/obj/machinery/status_display/proc/display_alert() - remove_display() - - var/decl/security_state/security_state = decls_repository.get_decl(GLOB.using_map.security_state) - var/decl/security_level/sl = security_state.current_security_level - - var/image/alert = image(sl.icon, sl.overlay_status_display) - - set_light(sl.light_max_bright, sl.light_inner_range, sl.light_outer_range, 2, sl.light_color_alarm) - overlays |= alert - -/obj/machinery/status_display/proc/set_picture(state) - remove_display() - if(!picture || picture_state != state) - picture_state = state - picture = image('icons/obj/status_display.dmi', icon_state=picture_state) - overlays |= picture - set_light(0.5, 0.1, 1, 2, COLOR_WHITE) - -/obj/machinery/status_display/proc/update_display(line1, line2) - var/new_text = {"
              [line1]
              [line2]
              "} - if(maptext != new_text) - maptext = new_text - set_light(0.5, 0.1, 1, 2, COLOR_WHITE) - -/obj/machinery/status_display/proc/get_shuttle_timer() - var/timeleft = evacuation_controller.get_eta() - if(timeleft < 0) - return "" - return "[pad_left(num2text((timeleft / 60) % 60), 2, "0")]:[pad_left(num2text(timeleft % 60), 2, "0")]" - -/obj/machinery/status_display/proc/get_supply_shuttle_timer() - var/datum/shuttle/autodock/ferry/supply/shuttle = SSsupply.shuttle - if (!shuttle) - return "Error" - - if(shuttle.has_arrive_time()) - var/timeleft = round((shuttle.arrive_time - world.time) / 10,1) - if(timeleft < 0) - return "Late" - return "[pad_left(num2text((timeleft / 60) % 60), 2, "0")]:[pad_left(num2text(timeleft % 60), 2, "0")]" - return "" - -/obj/machinery/status_display/proc/remove_display() - if(overlays.len) - overlays.Cut() - if(maptext) - maptext = "" - set_light(0) - -/obj/machinery/status_display/receive_signal(datum/signal/signal) - switch(signal.data["command"]) - if("blank") - mode = STATUS_DISPLAY_BLANK - - if("shuttle") - mode = STATUS_DISPLAY_TRANSFER_SHUTTLE_TIME - - if("message") - mode = STATUS_DISPLAY_MESSAGE - set_message(signal.data["msg1"], signal.data["msg2"]) - - if("alert") - mode = STATUS_DISPLAY_ALERT - - if("time") - mode = STATUS_DISPLAY_TIME - - if("image") - mode = STATUS_DISPLAY_IMAGE - set_picture(signal.data["picture_state"]) - if("toggle_alert_border") - toggle_alert_border() - update() - -#undef FONT_SIZE -#undef FONT_COLOR -#undef FONT_STYLE -#undef SCROLL_SPEED diff --git a/code/game/machinery/status_display_ai.dm b/code/game/machinery/status_display_ai.dm deleted file mode 100644 index bc813381373b2..0000000000000 --- a/code/game/machinery/status_display_ai.dm +++ /dev/null @@ -1,95 +0,0 @@ -/datum/ai_emotion - var/overlay - var/ckey - -/datum/ai_emotion/New(var/over, var/key) - overlay = over - ckey = key - -var/global/list/ai_status_emotions = list( - "Very Happy" = new /datum/ai_emotion("ai_veryhappy"), - "Happy" = new /datum/ai_emotion("ai_happy"), - "Neutral" = new /datum/ai_emotion("ai_neutral"), - "Unsure" = new /datum/ai_emotion("ai_unsure"), - "Confused" = new /datum/ai_emotion("ai_confused"), - "Sad" = new /datum/ai_emotion("ai_sad"), - "Surprised" = new /datum/ai_emotion("ai_surprised"), - "Upset" = new /datum/ai_emotion("ai_upset"), - "Angry" = new /datum/ai_emotion("ai_angry"), - "BSOD" = new /datum/ai_emotion("ai_bsod"), - "Blank" = new /datum/ai_emotion("ai_off"), - "Problems?" = new /datum/ai_emotion("ai_trollface"), - "Awesome" = new /datum/ai_emotion("ai_awesome"), - "Dorfy" = new /datum/ai_emotion("ai_urist"), - "Facepalm" = new /datum/ai_emotion("ai_facepalm"), - "Friend Computer" = new /datum/ai_emotion("ai_friend"), - "Tribunal" = new /datum/ai_emotion("ai_tribunal", "serithi"), - "Tribunal Malfunctioning" = new /datum/ai_emotion("ai_tribunal_malf", "serithi"), - "Ship Scan" = new /datum/ai_emotion("ai_shipscan") - ) - -/proc/get_ai_emotions(var/ckey) - var/list/emotions = new - for(var/emotion_name in ai_status_emotions) - var/datum/ai_emotion/emotion = ai_status_emotions[emotion_name] - if(!emotion.ckey || emotion.ckey == ckey) - emotions += emotion_name - - return emotions - -/proc/set_ai_status_displays(mob/user as mob) - var/list/ai_emotions = get_ai_emotions(user.ckey) - var/emote = input("Please, select a status!", "AI Status", null, null) in ai_emotions - for (var/obj/machinery/M in SSmachines.machinery) //change status - if(istype(M, /obj/machinery/ai_status_display)) - var/obj/machinery/ai_status_display/AISD = M - AISD.emotion = emote - AISD.update_icon() - //if Friend Computer, change ALL displays - else if(istype(M, /obj/machinery/status_display)) - - var/obj/machinery/status_display/SD = M - if(emote=="Friend Computer") - SD.friendc = 1 - else - SD.friendc = 0 - -/obj/machinery/ai_status_display - icon = 'icons/obj/status_display.dmi' - icon_state = "frame" - name = "AI display" - anchored = TRUE - density = FALSE - - var/mode = 0 // 0 = Blank - // 1 = AI emoticon - // 2 = Blue screen of death - - var/picture_state // icon_state of ai picture - - var/emotion = "Neutral" - -/obj/machinery/ai_status_display/attack_ai/(mob/user as mob) - var/list/ai_emotions = get_ai_emotions(user.ckey) - var/emote = input("Please, select a status!", "AI Status", null, null) in ai_emotions - src.emotion = emote - -/obj/machinery/ai_status_display/on_update_icon() - if(stat & (NOPOWER|BROKEN)) - overlays.Cut() - return - - switch(mode) - if(0) //Blank - overlays.Cut() - if(1) // AI emoticon - var/datum/ai_emotion/ai_emotion = ai_status_emotions[emotion] - set_picture(ai_emotion.overlay) - if(2) // BSOD - set_picture("ai_bsod") - -/obj/machinery/ai_status_display/proc/set_picture(var/state) - picture_state = state - if(overlays.len) - overlays.Cut() - overlays += image('icons/obj/status_display.dmi', icon_state=picture_state) diff --git a/code/game/machinery/status_light.dm b/code/game/machinery/status_light.dm deleted file mode 100644 index 84fe0213ac0ab..0000000000000 --- a/code/game/machinery/status_light.dm +++ /dev/null @@ -1,37 +0,0 @@ -/obj/machinery/status_light - name = "combustion chamber status indicator" - desc = "A status indicator for a combustion chamber, based on temperature." - icon = 'icons/obj/stationobjs.dmi' - icon_state = "doortimer-p" - anchored = TRUE - var/frequency = 1441 - var/alert_temperature = 10000 - var/alert = 1 - var/datum/radio_frequency/radio_connection - -/obj/machinery/status_light/Initialize() - . = ..() - update_icon() - radio_connection = register_radio(src, frequency, frequency, RADIO_ATMOSIA) - - -/obj/machinery/status_light/on_update_icon() - if(stat & (NOPOWER|BROKEN)) - icon_state = "doortimer-b" - return - icon_state = "doortimer[alert]" - -/obj/machinery/status_light/receive_signal(datum/signal/signal) - if(stat & (NOPOWER|BROKEN)) - return - - if(!signal.data["tag"] || (signal.data["tag"] != id_tag) || !signal.data["temperature"]) - return 0 - - if(signal.data["temperature"] >= alert_temperature) - alert = 1 - else - alert = 2 - - update_icon() - return diff --git a/code/game/machinery/suit_cycler.dm b/code/game/machinery/suit_cycler.dm deleted file mode 100644 index d6ebf60bfeaee..0000000000000 --- a/code/game/machinery/suit_cycler.dm +++ /dev/null @@ -1,390 +0,0 @@ -/obj/machinery/suit_cycler - - name = "suit cycler unit" - desc = "An industrial machine for painting and refitting voidsuits." - anchored = TRUE - density = TRUE - - icon = 'icons/obj/suitstorage.dmi' - icon_state = "close" - - req_access = list(access_captain, access_bridge) - - var/active = 0 // PLEASE HOLD. - var/safeties = 1 // The cycler won't start with a living thing inside it unless safeties are off. - var/irradiating = 0 // If this is > 0, the cycler is decontaminating whatever is inside it. - var/radiation_level = 2 // 1 is removing germs, 2 is removing blood, 3 is removing phoron. - var/model_text = "" // Some flavour text for the topic box. - var/locked = 1 // If locked, nothing can be taken from or added to the cycler. - var/can_repair = 1 // If set, the cycler can repair voidsuits. - var/electrified = 0 - - // Possible modifications to pick between - var/list/available_modifications = list( - /decl/item_modifier/space_suit/engineering, - /decl/item_modifier/space_suit/mining, - /decl/item_modifier/space_suit/medical, - /decl/item_modifier/space_suit/security, - /decl/item_modifier/space_suit/atmos, - /decl/item_modifier/space_suit/science, - /decl/item_modifier/space_suit/pilot, - /decl/item_modifier/space_suit/command - ) - - // Extra modifications to add when emagged, duplicates won't be added - var/emagged_modifications = list( - /decl/item_modifier/space_suit/engineering, - /decl/item_modifier/space_suit/mining, - /decl/item_modifier/space_suit/medical, - /decl/item_modifier/space_suit/security, - /decl/item_modifier/space_suit/atmos, - /decl/item_modifier/space_suit/science, - /decl/item_modifier/space_suit/pilot, - /decl/item_modifier/space_suit/command, - /decl/item_modifier/space_suit/mercenary/emag - ) - - //Species that the suits can be configured to fit. - var/list/species = list(SPECIES_HUMAN,SPECIES_SKRELL,SPECIES_UNATHI) - - var/decl/item_modifier/target_modification - var/target_species - - var/mob/living/carbon/human/occupant = null - var/obj/item/clothing/suit/space/void/suit = null - var/obj/item/clothing/head/helmet/space/helmet = null - - wires = /datum/wires/suit_storage_unit - -/obj/machinery/suit_cycler/Initialize() - . = ..() - if(!length(available_modifications) || !length(species)) - crash_with("Invalid setup: [log_info_line(src)]") - return INITIALIZE_HINT_QDEL - - available_modifications = list_values(decls_repository.get_decls(available_modifications)) - - target_modification = available_modifications[1] - target_species = species[1] - -/obj/machinery/suit_cycler/Destroy() - DROP_NULL(occupant) - DROP_NULL(suit) - DROP_NULL(helmet) - return ..() - -/obj/machinery/suit_cycler/attackby(obj/item/I as obj, mob/user as mob) - - if(electrified != 0) - if(shock(user, 100)) - return - - //Hacking init. - if(isMultitool(I) || isWirecutter(I)) - if(panel_open) - attack_hand(user) - return - //Other interface stuff. - if(istype(I, /obj/item/grab)) - var/obj/item/grab/G = I - - if(!(ismob(G.affecting))) - return - - if(locked) - to_chat(user, "The suit cycler is locked.") - return - - if(contents.len > 0) - to_chat(user, "There is no room inside the cycler for [G.affecting.name].") - return - - visible_message("[user] starts putting [G.affecting.name] into the suit cycler.", range = 3) - - if(do_after(user, 2 SECONDS, src, DO_PUBLIC_UNIQUE)) - if(!G || !G.affecting) return - var/mob/M = G.affecting - if (M.client) - M.client.perspective = EYE_PERSPECTIVE - M.client.eye = src - M.forceMove(src) - occupant = M - - add_fingerprint(user) - qdel(G) - - updateUsrDialog() - - return - else if(isScrewdriver(I)) - - panel_open = !panel_open - to_chat(user, "You [panel_open ? "open" : "close"] the maintenance panel.") - updateUsrDialog() - return - - else if(istype(I,/obj/item/clothing/head/helmet/space) && !istype(I, /obj/item/clothing/head/helmet/space/rig)) - - if(locked) - to_chat(user, "The suit cycler is locked.") - return - - if(helmet) - to_chat(user, "The cycler already contains a helmet.") - return - - if(I.icon_override == CUSTOM_ITEM_MOB) - to_chat(user, "You cannot refit a customised voidsuit.") - return - if(!user.unEquip(I, src)) - return - to_chat(user, "You fit \the [I] into the suit cycler.") - helmet = I - - updateUsrDialog() - return - - else if(istype(I,/obj/item/clothing/suit/space/void)) - - if(locked) - to_chat(user, "The suit cycler is locked.") - return - - if(suit) - to_chat(user, "The cycler already contains a voidsuit.") - return - - if(I.icon_override == CUSTOM_ITEM_MOB) - to_chat(user, "You cannot refit a customised voidsuit.") - return - if(!user.unEquip(I, src)) - return - to_chat(user, "You fit \the [I] into the suit cycler.") - suit = I - - updateUsrDialog() - return - - ..() - -/obj/machinery/suit_cycler/emag_act(var/remaining_charges, var/mob/user) - if(emagged) - to_chat(user, "The cycler has already been subverted.") - return - - //Clear the access reqs, disable the safeties, and open up all paintjobs. - to_chat(user, "You run the sequencer across the interface, corrupting the operating protocols.") - - var/additional_modifications = list_values(decls_repository.get_decls(emagged_modifications)) - available_modifications |= additional_modifications - - emagged = TRUE - safeties = 0 - req_access = list() - updateUsrDialog() - return 1 - -/obj/machinery/suit_cycler/physical_attack_hand(mob/user) - if(electrified != 0) - if(shock(user, 100)) - return TRUE - -/obj/machinery/suit_cycler/interface_interact(mob/user) - interact(user) - return TRUE - -/obj/machinery/suit_cycler/interact(mob/user) - user.set_machine(src) - - var/dat = list() - dat += "Suit Cycler Interface" - - if(active) - dat+= "
              The [model_text ? "[model_text] " : ""]suit cycler is currently in use. Please wait..." - - else if(locked) - dat += "
              The [model_text ? "[model_text] " : ""]suit cycler is currently locked. Please contact your system administrator." - if(allowed(user)) - dat += "
              \[unlock unit\]" - else - dat += "

              Suit cycler

              " - dat += "Welcome to the [model_text ? "[model_text] " : ""]suit cycler control panel. \[lock unit\]
              " - - dat += "

              Maintenance

              " - dat += "Helmet: [helmet ? "\the [helmet]" : "no helmet stored" ]. \[eject\]
              " - dat += "Suit: [suit ? "\the [suit]" : "no suit stored" ]. \[eject\]" - - if(can_repair && suit && istype(suit)) - dat += "[(suit.damage ? " \[repair\]" : "")]" - - dat += "
              UV decontamination systems: SYSTEM ERROR" : "green'>READY"]
              " - dat += "Output level: [radiation_level]
              " - dat += "\[select power level\] \[begin decontamination cycle\]

              " - - dat += "

              Customisation

              " - dat += "Target product: [target_modification.name], [target_species]." - dat += "
              \[apply customisation routine\]


              " - - show_browser(user, JOINTEXT(dat), "window=suit_cycler") - onclose(user, "suit_cycler") - return - -/obj/machinery/suit_cycler/Topic(href, href_list) - if((. = ..())) - return - - if(href_list["eject_suit"]) - if(!suit) return - suit.dropInto(loc) - suit = null - else if(href_list["eject_helmet"]) - if(!helmet) return - helmet.dropInto(loc) - helmet = null - else if(href_list["select_department"]) - var/choice = input("Please select the target department paintjob.", "Suit cycler", target_modification) as null|anything in available_modifications - if(choice && CanPhysicallyInteract(usr)) - target_modification = choice - else if(href_list["select_species"]) - var/choice = input("Please select the target species configuration.","Suit cycler",null) as null|anything in species - if(choice && CanPhysicallyInteract(usr)) - target_species = choice - else if(href_list["select_rad_level"]) - var/choices = list(1,2,3) - if(emagged) - choices = list(1,2,3,4,5) - radiation_level = input("Please select the desired radiation level.","Suit cycler",null) as null|anything in choices - else if(href_list["repair_suit"]) - - if(!suit || !can_repair) return - active = 1 - spawn(100) - repair_suit() - finished_job() - - else if(href_list["apply_paintjob"]) - - if(!suit && !helmet) return - active = 1 - spawn(100) - apply_paintjob() - finished_job() - - else if(href_list["toggle_safties"]) - safeties = !safeties - - else if(href_list["toggle_lock"]) - - if(allowed(usr)) - locked = !locked - to_chat(usr, "You [locked ? "lock" : "unlock"] [src].") - else - to_chat(usr, FEEDBACK_ACCESS_DENIED) - - else if(href_list["begin_decontamination"]) - - if(safeties && occupant) - to_chat(usr, "The cycler has detected an occupant. Please remove the occupant before commencing the decontamination cycle.") - return - - active = 1 - irradiating = 10 - updateUsrDialog() - - sleep(10) - - if(helmet) - if(radiation_level > 2) - helmet.decontaminate() - if(radiation_level > 1) - helmet.clean_blood() - - if(suit) - if(radiation_level > 2) - suit.decontaminate() - if(radiation_level > 1) - suit.clean_blood() - - updateUsrDialog() - -/obj/machinery/suit_cycler/Process() - if(electrified > 0) - electrified-- - - if(!active) - return - - if(active && stat & (BROKEN|NOPOWER)) - active = 0 - irradiating = 0 - electrified = 0 - return - - if(irradiating == 1) - finished_job() - irradiating = 0 - return - - irradiating-- - - if(occupant) - if(prob(radiation_level*2)) occupant.emote("scream") - if(radiation_level > 2) - occupant.take_organ_damage(0,radiation_level*2 + rand(1,3)) - if(radiation_level > 1) - occupant.take_organ_damage(0,radiation_level + rand(1,3)) - occupant.apply_damage(radiation_level*10, DAMAGE_RADIATION, damage_flags = DAMAGE_FLAG_DISPERSED) - -/obj/machinery/suit_cycler/proc/finished_job() - var/turf/T = get_turf(src) - T.visible_message("[icon2html(src, viewers(get_turf(src)))]\The [src] pings loudly.") - active = 0 - updateUsrDialog() - -/obj/machinery/suit_cycler/proc/repair_suit() - if(!suit || !suit.damage || !suit.can_breach) - return - - suit.breaches = list() - suit.calc_breach_damage() - -/obj/machinery/suit_cycler/verb/leave() - set name = "Eject Cycler" - set category = "Object" - set src in oview(1) - - if (usr.incapacitated()) - return - - eject_occupant(usr) - -/obj/machinery/suit_cycler/proc/eject_occupant(mob/user as mob) - - if(locked || active) - to_chat(user, "The cycler is locked.") - return - - if (!occupant) - return - - occupant.reset_view() - occupant.dropInto(loc) - occupant = null - - add_fingerprint(user) - updateUsrDialog() - - return - -/obj/machinery/suit_cycler/proc/apply_paintjob() - if(!target_species || !target_modification) - return - - if(helmet) helmet.refit_for_species(target_species) - if(suit) suit.refit_for_species(target_species) - - target_modification.RefitItem(helmet) - target_modification.RefitItem(suit) - - if(helmet) helmet.SetName("refitted [helmet.name]") - if(suit) suit.SetName("refitted [suit.name]") diff --git a/code/game/machinery/suit_cycler_units.dm b/code/game/machinery/suit_cycler_units.dm deleted file mode 100644 index 60182dbe435d5..0000000000000 --- a/code/game/machinery/suit_cycler_units.dm +++ /dev/null @@ -1,76 +0,0 @@ -/obj/machinery/suit_cycler/engineering - name = "Engineering suit cycler" - model_text = "Engineering" - req_access = list(access_construction) - available_modifications = list(/decl/item_modifier/space_suit/engineering, /decl/item_modifier/space_suit/atmos) - species = list(SPECIES_HUMAN, SPECIES_SKRELL, SPECIES_UNATHI) //Add Unathi when sprites exist for their suits. - -/obj/machinery/suit_cycler/engineering/alt - available_modifications = list( - /decl/item_modifier/space_suit/engineering/alt, - /decl/item_modifier/space_suit/atmos/alt, - /decl/item_modifier/space_suit/hazard - ) - -/obj/machinery/suit_cycler/mining - name = "Mining suit cycler" - model_text = "Mining" - req_access = list(access_mining) - available_modifications = list(/decl/item_modifier/space_suit/mining) - species = list(SPECIES_HUMAN,SPECIES_SKRELL,SPECIES_UNATHI) - - -/obj/machinery/suit_cycler/salvage - name = "Salvage suit cycler" - model_text = "Salvage" - available_modifications = list(/decl/item_modifier/space_suit/salvage) - species = list(SPECIES_HUMAN,SPECIES_SKRELL,SPECIES_UNATHI) - -/obj/machinery/suit_cycler/science - name = "Excavation suit cycler" - model_text = "Excavation" - req_access = list(access_xenoarch) - available_modifications = list(/decl/item_modifier/space_suit/science) - species = list(SPECIES_HUMAN,SPECIES_SKRELL,SPECIES_UNATHI) - -/obj/machinery/suit_cycler/security - name = "Security suit cycler" - model_text = "Security" - req_access = list(access_security) - available_modifications = list(/decl/item_modifier/space_suit/security, /decl/item_modifier/space_suit/security/alt) - species = list(SPECIES_HUMAN,SPECIES_SKRELL,SPECIES_UNATHI) - -/obj/machinery/suit_cycler/security/alt - available_modifications = list(/decl/item_modifier/space_suit/security/alt) - -/obj/machinery/suit_cycler/medical - name = "Medical suit cycler" - model_text = "Medical" - req_access = list(access_medical) - available_modifications = list(/decl/item_modifier/space_suit/medical) - species = list(SPECIES_HUMAN,SPECIES_SKRELL,SPECIES_UNATHI) - -/obj/machinery/suit_cycler/medical/alt - available_modifications = list(/decl/item_modifier/space_suit/medical/alt) - -/obj/machinery/suit_cycler/syndicate - name = "Nonstandard suit cycler" - model_text = "Nonstandard" - req_access = list(access_syndicate) - available_modifications = list(/decl/item_modifier/space_suit/mercenary) - species = list(SPECIES_HUMAN,SPECIES_SKRELL,SPECIES_UNATHI, SPECIES_VOX) - can_repair = 1 - -/obj/machinery/suit_cycler/pilot - name = "Pilot suit cycler" - model_text = "Pilot" - req_access = list(access_mining_office) - available_modifications = list(/decl/item_modifier/space_suit/pilot) - species = list(SPECIES_HUMAN,SPECIES_SKRELL,SPECIES_UNATHI) - -/obj/machinery/suit_cycler/command - name = "Command suit cycler" - model_text = "Command" - req_access = list(access_bridge) - available_modifications = list(/decl/item_modifier/space_suit/command) - species = list(SPECIES_HUMAN,SPECIES_SKRELL) diff --git a/code/game/machinery/suit_storage.dm b/code/game/machinery/suit_storage.dm deleted file mode 100644 index 3c72e4ebe3b1e..0000000000000 --- a/code/game/machinery/suit_storage.dm +++ /dev/null @@ -1,429 +0,0 @@ -// Only sane way to do this is with marcos. -#define TRY_INSERT_SUIT_PIECE(slot, path)\ - if(istype(I, /obj/item/##path)){\ - if(!isopen) return;\ - if(##slot){\ - to_chat(user, SPAN_NOTICE("The unit already contains \a [slot]."));\ - return\ - };\ - if(!user.unEquip(I, src)) return;\ - to_chat(user, SPAN_NOTICE("You load the [I.name] into the storage compartment."));\ - ##slot = I;\ - update_icon();\ - SSnano.update_uis(src);\ - return\ - } - -#define dispense_clothing(item) if(!isopen){return}if(item){item.dropInto(loc); item = null} - -/obj/machinery/suit_storage_unit - name = "Suit Storage Unit" - desc = "An industrial U-Stor-It Storage unit designed to accomodate all kinds of space suits. Its on-board equipment also allows the user to decontaminate the contents through a UV-ray purging cycle. There's a warning label dangling from the control pad, reading \"STRICTLY NO BIOLOGICALS IN THE CONFINES OF THE UNIT\"." - icon = 'icons/obj/suitstorage.dmi' - icon_state = "close" - anchored = TRUE - density = TRUE - idle_power_usage = 50 - active_power_usage = 200 - interact_offline = 1 - req_access = list() - - var/mob/living/carbon/human/occupant = null - var/obj/item/clothing/suit/space/suit = null - var/obj/item/clothing/head/helmet/space/helmet = null - var/obj/item/clothing/shoes/magboots/boots = null - var/obj/item/tank/tank = null - var/obj/item/clothing/mask/mask = null - - var/isopen = FALSE - var/islocked = FALSE - var/isUV = FALSE - var/issuperUV = FALSE - var/panelopen = FALSE - var/safetieson = TRUE - -/obj/machinery/suit_storage_unit/Initialize() - . = ..() - if(suit) - suit = new suit(src) - if(helmet) - helmet = new helmet(src) - if(boots) - boots = new boots(src) - if(tank) - tank = new tank(src) - if(mask) - mask = new mask(src) - update_icon() - -/obj/machinery/suit_storage_unit/Destroy() - dump_everything() - . = ..() - -/obj/machinery/suit_storage_unit/on_update_icon() - overlays.Cut() - if(panelopen) - overlays += ("panel") - if(isUV) - if(issuperUV) - overlays += ("super") - else if(occupant) - overlays += ("uvhuman") - else - overlays += ("uv") - else if(isopen) - if(is_broken()) - overlays += ("broken") - else - overlays += ("open") - if(suit) - overlays += ("suit") - if(helmet) - overlays += ("helm") - if(boots || tank || mask) - overlays += ("storage") - else if(occupant) - overlays += ("human") - -/obj/machinery/suit_storage_unit/get_req_access() - if(!islocked) - return list() - return ..() - -/obj/machinery/suit_storage_unit/ex_act(severity) - switch(severity) - if(EX_ACT_DEVASTATING) - if(prob(50)) - dump_everything() - qdel(src) - if(EX_ACT_HEAVY) - if(prob(35)) - dump_everything() - qdel(src) - -/obj/machinery/suit_storage_unit/attackby(var/obj/item/I, var/mob/user) - if(isScrewdriver(I)) - if(do_after(user, 5 SECONDS, src, DO_PUBLIC_UNIQUE)) - panelopen = !panelopen - playsound(loc, 'sound/items/Screwdriver.ogg', 100, 1) - to_chat(user, SPAN_NOTICE("You [panelopen ? "open" : "close"] the unit's maintenance panel.")) - SSnano.update_uis(src) - update_icon() - return - if(isCrowbar(I)) - if(inoperable() && !islocked && !isopen) - to_chat(user, SPAN_NOTICE("You begin prying the unit open.")) - if(do_after(user, 5 SECONDS, src, DO_PUBLIC_UNIQUE)) - isopen = TRUE - to_chat(user, SPAN_NOTICE("You pry the unit open.")) - SSnano.update_uis(src) - update_icon() - else if(islocked) - to_chat(user, SPAN_WARNING("You can't pry the unit open, it's locked!")) - return - if(istype(I, /obj/item/grab) ) - var/obj/item/grab/G = I - if(!(ismob(G.affecting)) ) - return - if(!isopen) - to_chat(user, SPAN_NOTICE("The unit's doors are shut.")) - return - if(inoperable()) - to_chat(user, SPAN_NOTICE("The unit is not operational.")) - return - if(occupant || helmet || suit || boots || tank || mask) - to_chat(user, SPAN_NOTICE("The unit's storage area is too cluttered.")) - return - visible_message(SPAN_WARNING("[user] starts putting [G.affecting.name] into the Suit Storage Unit.")) - if(do_after(user, 2 SECONDS, src, DO_PUBLIC_UNIQUE) && G && G.affecting) - var/mob/M = G.affecting - if(M.client) - M.client.perspective = EYE_PERSPECTIVE - M.client.eye = src - M.forceMove(src) - occupant = M - isopen = FALSE - add_fingerprint(user) - qdel(G) - SSnano.update_uis(src) - update_icon() - return - - TRY_INSERT_SUIT_PIECE(suit, clothing/suit/space) - TRY_INSERT_SUIT_PIECE(helmet, clothing/head/helmet/space) - TRY_INSERT_SUIT_PIECE(boots, clothing/shoes/magboots) - TRY_INSERT_SUIT_PIECE(tank, tank) - TRY_INSERT_SUIT_PIECE(mask, clothing/mask) - update_icon() - SSnano.update_uis(src) - -/obj/machinery/suit_storage_unit/interface_interact(var/mob/user) - ui_interact(user) - return TRUE - -/obj/machinery/suit_storage_unit/ui_interact(var/mob/user, var/ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1) - var/list/data = list() - - data["panelopen"] = panelopen - data["open"] = isopen - data["locked"] = islocked - data["uv"] = isUV - data["superuv"] = issuperUV - data["safeties"] = safetieson - data["helmet"] = helmet - data["suit"] = suit - data["boots"] = boots - data["tank"] = tank - data["mask"] = mask - - ui = SSnano.try_update_ui(user, src, ui_key, ui, data, force_open) - if(!ui) - ui = new(user, src, ui_key, "suit_storage_unit.tmpl", "Suit Storage Unit", 400, 500) - ui.set_initial_data(data) - ui.open() - -/obj/machinery/suit_storage_unit/CanUseTopic(var/mob/user) - if(!user.IsAdvancedToolUser()) - return STATUS_CLOSE - return ..() - -/obj/machinery/suit_storage_unit/OnTopic(var/user, var/list/href_list, var/datum/topic_state/state) - if(href_list["toggleUV"]) - toggleUV(user) - return TOPIC_REFRESH - if(href_list["togglesafeties"]) - togglesafeties(user) - return TOPIC_REFRESH - if(href_list["dispense_helmet"]) - dispense_helmet() - update_icon() - return TOPIC_REFRESH - if(href_list["dispense_suit"]) - dispense_suit() - update_icon() - return TOPIC_REFRESH - if(href_list["dispense_boots"]) - dispense_boots() - update_icon() - return TOPIC_REFRESH - if(href_list["dispense_tank"]) - dispense_tank() - update_icon() - return TOPIC_REFRESH - if(href_list["dispense_mask"]) - dispense_mask() - update_icon() - return TOPIC_REFRESH - if(href_list["toggle_open"]) - toggle_open(user) - update_icon() - return TOPIC_REFRESH - if(href_list["toggle_lock"]) - toggle_lock(user) - return TOPIC_REFRESH - if(href_list["start_UV"]) - start_UV(user) - update_icon() - return TOPIC_REFRESH - if(href_list["eject_guy"]) - eject_occupant(user) - update_icon() - return TOPIC_REFRESH - -/obj/machinery/suit_storage_unit/proc/dispense_helmet() - dispense_clothing(helmet) - -/obj/machinery/suit_storage_unit/proc/dispense_suit() - dispense_clothing(suit) - -/obj/machinery/suit_storage_unit/proc/dispense_boots() - dispense_clothing(boots) - -/obj/machinery/suit_storage_unit/proc/dispense_tank() - dispense_clothing(tank) - -/obj/machinery/suit_storage_unit/proc/dispense_mask() - dispense_clothing(mask) - -/obj/machinery/suit_storage_unit/proc/dump_everything() - if(islocked) - islocked = FALSE - if(!isopen) - isopen = TRUE - dispense_clothing(helmet) - dispense_clothing(suit) - dispense_clothing(boots) - dispense_clothing(tank) - dispense_clothing(mask) - if(occupant) - eject_occupant(occupant) - -/obj/machinery/suit_storage_unit/proc/toggleUV(var/mob/user) - if(!panelopen) - return - else - issuperUV = !issuperUV - to_chat(user, issuperUV ? SPAN_WARNING("You crank the dial all the way up to \"15nm\".") : SPAN_NOTICE("You slide the dial back towards \"185nm\".")) - -/obj/machinery/suit_storage_unit/proc/togglesafeties(var/mob/user) - if(!panelopen) - return - else - safetieson = !safetieson - to_chat(user, SPAN_NOTICE("You push the button. The coloured LED next to it [safetieson ? "turns green" : "turns red"].")) - -/obj/machinery/suit_storage_unit/proc/toggle_open(var/mob/user) - if(!is_powered()) - to_chat(user, SPAN_NOTICE("The unit is offline.")) - return - if(islocked || isUV) - to_chat(user, SPAN_NOTICE("Unable to open unit.")) - return - if(occupant) - eject_occupant(user) - return // eject_occupant opens the door, so we need to return - isopen = !isopen - playsound(src, 'sound/machines/suitstorage_cycledoor.ogg', 50, 0) - -/obj/machinery/suit_storage_unit/proc/toggle_lock(var/mob/user) - if(!is_powered()) - to_chat(user, SPAN_NOTICE("The unit is offline.")) - return - if(!allowed(user)) - to_chat(user, FEEDBACK_ACCESS_DENIED) - return - if(occupant && safetieson) - to_chat(user, SPAN_WARNING("The Unit's safety protocols disallow locking when a biological form is detected inside its compartments.")) - return - if(isopen) - return - islocked = !islocked - playsound(src, 'sound/machines/suitstorage_lockdoor.ogg', 50, 0) - -/obj/machinery/suit_storage_unit/proc/start_UV(var/mob/user) - if(isUV || isopen) - return - if(!is_powered()) - to_chat(user, SPAN_NOTICE("The unit is offline.")) - return - if(occupant && safetieson) - to_chat(user, SPAN_WARNING("Biological entity detected in the confines of the Unit's storage. Cannot initiate cycle.")) - return - if(!helmet && !mask && !suit && !boots && !tank && !occupant ) - to_chat(user, SPAN_NOTICE("Unit storage bays empty. Nothing to disinfect -- Aborting.")) - return - if(occupant && !islocked) - islocked = TRUE - to_chat(user, SPAN_NOTICE("You start the Unit's cauterisation cycle.")) - isUV = TRUE - update_use_power(POWER_USE_ACTIVE) - update_icon() - SSnano.update_uis(src) - - var/datum/callback/uvburn = CALLBACK(src, .proc/uv_burn) - addtimer(uvburn, 5 SECONDS) - addtimer(uvburn, 10 SECONDS) - addtimer(uvburn, 15 SECONDS) - addtimer(CALLBACK(src, .proc/uv_finish), 20 SECONDS) - -/obj/machinery/suit_storage_unit/proc/uv_burn() - if(occupant) - occupant.apply_damage(50, DAMAGE_RADIATION, damage_flags = DAMAGE_FLAG_DISPERSED) - var/obj/item/organ/internal/diona/nutrients/rad_organ = locate() in occupant.internal_organs - if(!rad_organ) - if(occupant.can_feel_pain()) - occupant.emote("scream") - if(issuperUV) - var/burndamage = rand(40,60) - occupant.take_organ_damage(0,burndamage) - else - var/burndamage = rand(10,15) - occupant.take_organ_damage(0,burndamage) - -/obj/machinery/suit_storage_unit/proc/uv_finish() - isUV = FALSE - if(issuperUV) - if(helmet ) - helmet = null - if(suit) - suit = null - if(boots) - boots = null - if(tank) - tank = null - if(mask) - mask = null - visible_message(SPAN_WARNING("With a loud whining noise, the Suit Storage Unit's door grinds open. Puffs of ashen smoke come out of its chamber.")) - set_broken(TRUE) - isopen = TRUE - islocked = FALSE // - eject_occupant(occupant) // Mixing up these two lines causes bug. DO NOT DO IT. - else - if(helmet ) - helmet.clean_blood() - if(suit) - suit.clean_blood() - if(boots) - boots.clean_blood() - if(tank) - tank.clean_blood() - if(mask) - mask.clean_blood() - update_use_power(POWER_USE_IDLE) - update_icon() - SSnano.update_uis(src) - -/obj/machinery/suit_storage_unit/proc/eject_occupant(var/mob/user) - if(islocked) - return - if(!occupant) - return - if(!isopen) - isopen = TRUE - visible_message(SPAN_NOTICE("The suit storage unit spits out [occupant].")) - occupant.reset_view() - occupant.dropInto(loc) - occupant = null - update_icon() - -/obj/machinery/suit_storage_unit/verb/get_out() - set name = "Eject Suit Storage Unit" - set category = "Object" - set src in oview(1) - - if (usr.incapacitated()) - return - eject_occupant(usr) - add_fingerprint(usr) - SSnano.update_uis(src) - update_icon() - -/obj/machinery/suit_storage_unit/verb/move_inside() - set name = "Hide in Suit Storage Unit" - set category = "Object" - set src in oview(1) - - if (usr.incapacitated()) - return - if (!isopen) - to_chat(usr, SPAN_NOTICE("The unit's doors are shut.")) - return - if (inoperable()) - to_chat(usr, SPAN_NOTICE("The unit is not operational.")) - return - if ( (occupant) || (helmet ) || (suit) ) - to_chat(usr, SPAN_WARNING("It's too cluttered inside for you to fit in!")) - return - visible_message(SPAN_NOTICE("\The [usr] starts squeezing into the suit storage unit!")) - if(do_after(usr, 1 SECOND, src, DO_PUBLIC_UNIQUE)) - usr.reset_view(src) - usr.stop_pulling() - usr.forceMove(src) - occupant = usr - isopen = FALSE - update_icon() - add_fingerprint(usr) - SSnano.update_uis(src) - -#undef TRY_INSERT_SUIT_PIECE -#undef dispense_clothing diff --git a/code/game/machinery/suit_storage_units.dm b/code/game/machinery/suit_storage_units.dm deleted file mode 100644 index 8e68dea5d6d6d..0000000000000 --- a/code/game/machinery/suit_storage_units.dm +++ /dev/null @@ -1,118 +0,0 @@ -/obj/machinery/suit_storage_unit/standard_unit - suit= /obj/item/clothing/suit/space - helmet = /obj/item/clothing/head/helmet/space/fishbowl - tank = /obj/item/tank/oxygen - mask = /obj/item/clothing/mask/breath - req_access = list(access_eva) - -/obj/machinery/suit_storage_unit/atmos - name = "Atmospherics Voidsuit Storage Unit" - suit= /obj/item/clothing/suit/space/void/atmos - helmet = /obj/item/clothing/head/helmet/space/void/atmos - boots = /obj/item/clothing/shoes/magboots - tank = /obj/item/tank/oxygen - mask = /obj/item/clothing/mask/breath - req_access = list(access_atmospherics) - islocked = 1 - -/obj/machinery/suit_storage_unit/atmos/alt - suit= /obj/item/clothing/suit/space/void/atmos/alt - helmet = /obj/item/clothing/head/helmet/space/void/atmos/alt - -/obj/machinery/suit_storage_unit/engineering - name = "Engineering Voidsuit Storage Unit" - suit= /obj/item/clothing/suit/space/void/engineering - helmet = /obj/item/clothing/head/helmet/space/void/engineering - boots = /obj/item/clothing/shoes/magboots - tank = /obj/item/tank/oxygen - mask = /obj/item/clothing/mask/breath - req_access = list(access_construction) - islocked = 1 - -/obj/machinery/suit_storage_unit/engineering/unishi - req_access = null - islocked = 0 - -/obj/machinery/suit_storage_unit/engineering/alt - suit= /obj/item/clothing/suit/space/void/engineering/alt - helmet = /obj/item/clothing/head/helmet/space/void/engineering/alt - mask = /obj/item/clothing/mask/breath - -/obj/machinery/suit_storage_unit/engineering/salvage - suit= /obj/item/clothing/suit/space/void/engineering/salvage - helmet = /obj/item/clothing/head/helmet/space/void/engineering/salvage - mask = /obj/item/clothing/mask/breath - -/obj/machinery/suit_storage_unit/medical - name = "Medical Voidsuit Storage Unit" - suit= /obj/item/clothing/suit/space/void/medical - helmet = /obj/item/clothing/head/helmet/space/void/medical - boots = /obj/item/clothing/shoes/magboots - tank = /obj/item/tank/oxygen - mask = /obj/item/clothing/mask/breath - req_access = list(access_medical) - islocked = 1 - -/obj/machinery/suit_storage_unit/medical/alt - suit= /obj/item/clothing/suit/space/void/medical/alt - helmet = /obj/item/clothing/head/helmet/space/void/medical/alt - mask = /obj/item/clothing/mask/breath - -/obj/machinery/suit_storage_unit/mining - name = "Mining Voidsuit Storage Unit" - suit= /obj/item/clothing/suit/space/void/mining - helmet = /obj/item/clothing/head/helmet/space/void/mining - boots = /obj/item/clothing/shoes/magboots - tank = /obj/item/tank/oxygen - mask = /obj/item/clothing/mask/breath - req_access = list(access_mining) - islocked = 1 - -/obj/machinery/suit_storage_unit/mining/alt - suit= /obj/item/clothing/suit/space/void/mining/alt - helmet = /obj/item/clothing/head/helmet/space/void/mining/alt - mask = /obj/item/clothing/mask/breath - -/obj/machinery/suit_storage_unit/science - name = "Excavation Voidsuit Storage Unit" - suit= /obj/item/clothing/suit/space/void/excavation - helmet = /obj/item/clothing/head/helmet/space/void/excavation - boots = /obj/item/clothing/shoes/magboots - tank = /obj/item/tank/oxygen - mask = /obj/item/clothing/mask/breath - req_access = list(access_xenoarch) - islocked = 1 - -/obj/machinery/suit_storage_unit/security - name = "Security Voidsuit Storage Unit" - suit= /obj/item/clothing/suit/space/void/security - helmet = /obj/item/clothing/head/helmet/space/void/security - boots = /obj/item/clothing/shoes/magboots - tank = /obj/item/tank/oxygen - mask = /obj/item/clothing/mask/breath - req_access = list(access_security) - islocked = 1 - -/obj/machinery/suit_storage_unit/security/alt - suit= /obj/item/clothing/suit/space/void/security/alt - helmet = /obj/item/clothing/head/helmet/space/void/security/alt - mask = /obj/item/clothing/mask/breath - -/obj/machinery/suit_storage_unit/merc - name = "Nonstandard Voidsuit Storage Unit" - suit= /obj/item/clothing/suit/space/void/merc - helmet = /obj/item/clothing/head/helmet/space/void/merc - boots = /obj/item/clothing/shoes/magboots - tank = /obj/item/tank/oxygen - mask = /obj/item/clothing/mask/breath - req_access = list(access_syndicate) - islocked = 1 - -/obj/machinery/suit_storage_unit/retro - name = "Retro Voidsuit Storage Unit" - suit= /obj/item/clothing/suit/space/void/retro - helmet = /obj/item/clothing/head/helmet/space/void/retro - boots = /obj/item/clothing/shoes/magboots - tank = /obj/item/tank/oxygen - mask = /obj/item/clothing/mask/breath - islocked = FALSE diff --git a/code/game/machinery/supply_display.dm b/code/game/machinery/supply_display.dm deleted file mode 100644 index 26e3dcab62e7e..0000000000000 --- a/code/game/machinery/supply_display.dm +++ /dev/null @@ -1,34 +0,0 @@ -/obj/machinery/status_display/supply_display - ignore_friendc = 1 - -/obj/machinery/status_display/supply_display/update() - if(!..() && mode == STATUS_DISPLAY_CUSTOM) - message1 = "CARGO" - message2 = "" - - var/datum/shuttle/autodock/ferry/supply/shuttle = SSsupply.shuttle - if (!shuttle) - message2 = "Error" - else if(shuttle.has_arrive_time()) - message2 = get_supply_shuttle_timer() - if(length(message2) > CHARS_PER_LINE) - message2 = "Error" - else if (shuttle.is_launching()) - if (shuttle.at_station()) - message2 = "Launch" - else - message2 = "ETA" - else - if(shuttle.at_station()) - message2 = "Docked" - else - message1 = "" - update_display(message1, message2) - return 1 - return 0 - -/obj/machinery/status_display/supply_display/receive_signal/(datum/signal/signal) - if(signal.data["command"] == "supply") - mode = STATUS_DISPLAY_CUSTOM - else - ..(signal) diff --git a/code/game/machinery/supplybeacon.dm b/code/game/machinery/supplybeacon.dm deleted file mode 100644 index b3beb0344cca6..0000000000000 --- a/code/game/machinery/supplybeacon.dm +++ /dev/null @@ -1,119 +0,0 @@ -// Used to deploy the bacon. -/obj/item/supply_beacon - name = "inactive supply beacon" - icon = 'icons/obj/supplybeacon.dmi' - desc = "An inactive, hacked supply beacon stamped with the Nyx Rapid Fabrication logo. Good for one (1) ballistic supply pod shipment." - icon_state = "beacon" - var/deploy_path = /obj/machinery/power/supply_beacon - var/deploy_time = 30 - -/obj/item/supply_beacon/supermatter - name = "inactive supermatter supply beacon" - deploy_path = /obj/machinery/power/supply_beacon/supermatter - -/obj/item/supply_beacon/attack_self(var/mob/user) - user.visible_message("\The [user] begins setting up \the [src].") - if(!do_after(user, deploy_time, src, DO_PUBLIC_UNIQUE)) - return - if(!user.unEquip(src)) - return - var/obj/S = new deploy_path(get_turf(user)) - user.visible_message("\The [user] deploys \the [S].") - qdel(src) - -/obj/machinery/power/supply_beacon - name = "supply beacon" - desc = "A bulky moonshot supply beacon. Someone has been messing with the wiring." - icon = 'icons/obj/supplybeacon.dmi' - icon_state = "beacon" - - anchored = FALSE - density = TRUE - stat = 0 - - var/target_drop_time - var/drop_delay = 450 - var/expended - var/drop_type - -/obj/machinery/power/supply_beacon/New() - ..() - if(!drop_type) drop_type = pick(supply_drop_random_loot_types()) - -/obj/machinery/power/supply_beacon/supermatter - name = "supermatter supply beacon" - drop_type = "supermatter" - -/obj/machinery/power/supply_beacon/attackby(var/obj/item/W, var/mob/user) - if(!use_power && isWrench(W)) - if(!anchored && !connect_to_network()) - to_chat(user, "This device must be placed over an exposed cable.") - return - anchored = !anchored - user.visible_message("\The [user] [anchored ? "secures" : "unsecures"] \the [src].") - playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1) - return - return ..() - -/obj/machinery/power/supply_beacon/physical_attack_hand(var/mob/user) - if(expended) - update_use_power(POWER_USE_OFF) - to_chat(user, "\The [src] has used up its charge.") - return TRUE - - if(anchored) - if(use_power) - deactivate(user) - else - activate(user) - return TRUE - else - to_chat(user, "You need to secure the beacon with a wrench first!") - return TRUE - -/obj/machinery/power/supply_beacon/proc/activate(var/mob/user) - if(expended) - return - if(surplus() < 500) - if(user) to_chat(user, "The connected wire doesn't have enough current.") - return - set_light(1, 0.5, 2, 2, "#00ccaa") - icon_state = "beacon_active" - update_use_power(POWER_USE_IDLE) - admin_attacker_log(user, "has activated \a [src] at [get_area(src)]") - if(user) to_chat(user, "You activate the beacon. The supply drop will be dispatched soon.") - -/obj/machinery/power/supply_beacon/proc/deactivate(var/mob/user, var/permanent) - if(permanent) - expended = 1 - icon_state = "beacon_depleted" - else - icon_state = "beacon" - set_light(0) - update_use_power(POWER_USE_OFF) - target_drop_time = null - if(user) to_chat(user, "You deactivate the beacon.") - -/obj/machinery/power/supply_beacon/Destroy() - if(use_power) - deactivate() - ..() - -/obj/machinery/power/supply_beacon/Process() - if(expended) - return PROCESS_KILL - if(!use_power) - return - if(draw_power(500) < 500) - deactivate() - return - if(!target_drop_time) - target_drop_time = world.time + drop_delay - else if(world.time >= target_drop_time) - deactivate(permanent = 1) - var/drop_x = src.x-2 - var/drop_y = src.y-2 - var/drop_z = src.z - command_announcement.Announce("Nyx Rapid Fabrication priority supply request #[rand(1000,9999)]-[rand(100,999)] recieved. Shipment dispatched via ballistic supply pod for immediate delivery. Have a nice day.", "Thank You For Your Patronage") - spawn(rand(100,300)) - new /datum/random_map/droppod/supply(null, drop_x, drop_y, drop_z, supplied_drop = drop_type) // Splat. diff --git a/code/game/machinery/syndicatebeacon.dm b/code/game/machinery/syndicatebeacon.dm deleted file mode 100644 index b5504f900ac4a..0000000000000 --- a/code/game/machinery/syndicatebeacon.dm +++ /dev/null @@ -1,167 +0,0 @@ -//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:31 - -// Beacon randomly spawns in space -// When a non-traitor (no special role in /mind) uses it, he is given the choice to become a traitor -// If he accepts there is a random chance he will be accepted, rejected, or rejected and killed -// Bringing certain items can help improve the chance to become a traitor - - -/obj/machinery/syndicate_beacon - name = "ominous beacon" - desc = "This looks suspicious..." - icon = 'icons/obj/syndicate_beacon.dmi' - icon_state = "syndbeacon" - - anchored = TRUE - density = TRUE - - var/temptext = "" - var/selfdestructing = 0 - var/charges = 1 - -/obj/machinery/syndicate_beacon/interface_interact(var/mob/user) - interact(user) - return TRUE - -/obj/machinery/syndicate_beacon/interact(var/mob/user) - user.set_machine(src) - var/dat = "Scanning [pick("retina pattern", "voice print", "fingerprints", "dna sequence")]...
              Identity confirmed,
              " - if(istype(user, /mob/living/carbon/human) || istype(user, /mob/living/silicon/ai)) - if(is_special_character(user)) - dat += "Operative record found. Greetings, Agent [user.name].
              " - else if(charges < 1) - dat += "Connection severed.
              " - else - var/honorific = "Mr." - if(user.gender == FEMALE) - honorific = "Ms." - dat += "Identity not found in operative database. What can the Syndicate do for you today, [honorific] [user.name]?
              " - if(!selfdestructing) - dat += "

              \"[pick("I want to switch teams.", "I want to work for you.", "Let me join you.", "I can be of use to you.", "You want me working for you, and here's why...", "Give me an objective.", "How's the 401k over at the Syndicate?")]\"
              " - dat += temptext - show_browser(user, dat, "window=syndbeacon") - onclose(user, "syndbeacon") - -/obj/machinery/syndicate_beacon/Topic(href, href_list) - if(..()) - return - if(href_list["betraitor"]) - if(charges < 1) - src.updateUsrDialog() - return - var/mob/M = locate(href_list["traitormob"]) - if(M.mind.special_role || jobban_isbanned(M, MODE_TRAITOR)) - temptext = "We have no need for you at this time. Have a pleasant day.
              " - src.updateUsrDialog() - return - charges -= 1 - if (rand(0, 1)) - temptext = "Double-crosser. You planned to betray us from the start. Allow us to repay the favor in kind." - src.updateUsrDialog() - spawn(rand(50,200)) selfdestruct() - return - if(istype(M, /mob/living/carbon/human)) - var/mob/living/carbon/human/N = M - to_chat(M, "You have joined the ranks of the Syndicate and become a traitor to the station!") - GLOB.traitors.add_antagonist(N.mind) - GLOB.traitors.equip(N) - log_and_message_admins("has accepted a traitor objective from a syndicate beacon.", M) - - - src.updateUsrDialog() - return - - -/obj/machinery/syndicate_beacon/proc/selfdestruct() - selfdestructing = 1 - spawn() explosion(src.loc, 1, rand(1,3), rand(3,8), 10) - -//////////////////////////////////////// -//Singularity beacon -//////////////////////////////////////// -/obj/machinery/power/singularity_beacon - name = "ominous beacon" - desc = "This looks suspicious..." - icon = 'icons/obj/singularity.dmi' - icon_state = "beacon" - - anchored = FALSE - density = TRUE - layer = BASE_ABOVE_OBJ_LAYER //so people can't hide it and it's REALLY OBVIOUS - stat = 0 - - var/active = 0 - var/icontype = "beacon" - -/obj/machinery/power/singularity_beacon/proc/Activate(mob/user = null) - if(surplus() < 1500) - if(user) to_chat(user, "The connected wire doesn't have enough current.") - return - for(var/obj/singularity/singulo in world) - if(singulo.z == z) - singulo.target = src - icon_state = "[icontype]1" - active = 1 - - START_PROCESSING_MACHINE(src, MACHINERY_PROCESS_SELF) - if(user) - to_chat(user, "You activate the beacon.") - - -/obj/machinery/power/singularity_beacon/proc/Deactivate(mob/user = null) - for(var/obj/singularity/singulo in world) - if(singulo.target == src) - singulo.target = null - icon_state = "[icontype]0" - active = 0 - if(user) - to_chat(user, "You deactivate the beacon.") - - -/obj/machinery/power/singularity_beacon/physical_attack_hand(var/mob/user) - . = TRUE - if(anchored) - if(active) - Deactivate(user) - else - Activate(user) - else - to_chat(user, "You need to screw the beacon to the floor first!") - -/obj/machinery/power/singularity_beacon/attackby(obj/item/W as obj, mob/user as mob) - if(isScrewdriver(W)) - if(active) - to_chat(user, "You need to deactivate the beacon first!") - return - - if(anchored) - anchored = FALSE - to_chat(user, "You unscrew the beacon from the floor.") - disconnect_from_network() - return - else - if(!connect_to_network()) - to_chat(user, "This device must be placed over an exposed cable.") - return - anchored = TRUE - to_chat(user, "You screw the beacon to the floor and attach the cable.") - return - ..() - return - - -/obj/machinery/power/singularity_beacon/Destroy() - if(active) - Deactivate() - ..() - -//stealth direct power usage -/obj/machinery/power/singularity_beacon/Process() - if(!active) - return PROCESS_KILL - if(draw_power(1500) < 1500) - Deactivate() - -/obj/machinery/power/singularity_beacon/syndicate - icontype = "beaconsynd" - icon_state = "beaconsynd0" diff --git a/code/game/machinery/telecomms/broadcaster.dm b/code/game/machinery/telecomms/broadcaster.dm deleted file mode 100644 index 11112f429849c..0000000000000 --- a/code/game/machinery/telecomms/broadcaster.dm +++ /dev/null @@ -1,620 +0,0 @@ -//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:31 - -/* - The broadcaster sends processed messages to all radio devices in the game. They - do not have to be headsets; intercoms and station-bounced radios suffice. - - They receive their message from a server after the message has been logged. -*/ - -var/global/list/recentmessages = list() // global list of recent messages broadcasted : used to circumvent massive radio spam -var/global/message_delay = 0 // To make sure restarting the recentmessages list is kept in sync - -/obj/machinery/telecomms/broadcaster - name = "Subspace Broadcaster" - icon = 'icons/obj/stationobjs.dmi' - icon_state = "broadcaster" - desc = "A dish-shaped machine used to broadcast processed subspace signals." - density = TRUE - anchored = TRUE - idle_power_usage = 25 - machinetype = 5 - produces_heat = 0 - delay = 7 - circuitboard = /obj/item/stock_parts/circuitboard/telecomms/broadcaster - base_type = /obj/machinery/telecomms/broadcaster - outage_probability = 10 - machine_name = "subspace broadcaster" - machine_desc = "A high-powered broadcaster that sends subspace signals to all connected radio devices in the area. Part of a telecommunications network." - -/obj/machinery/telecomms/broadcaster/receive_information(datum/signal/signal, obj/machinery/telecomms/machine_from) - // Don't broadcast rejected signals - if(signal.data["reject"]) - return - - if(signal.data["message"]) - - // Prevents massive radio spam - signal.data["done"] = 1 // mark the signal as being broadcasted - // Search for the original signal and mark it as done as well - var/datum/signal/original = signal.data["original"] - if(original) - original.data["done"] = 1 - original.data["compression"] = signal.data["compression"] - original.data["level"] = signal.data["level"] - - var/signal_message = "[signal.frequency]:[signal.data["message"]]:[signal.data["realname"]]" - if(signal_message in recentmessages) - return - recentmessages.Add(signal_message) - - if(signal.data["slow"] > 0) - sleep(signal.data["slow"]) // simulate the network lag if necessary - - signal.data["level"] |= listening_levels - - /** #### - Normal Broadcast - #### **/ - - if(signal.data["type"] == 0) - - /* ###### Broadcast a message using signal.data ###### */ - Broadcast_Message(signal.data["connection"], signal.data["mob"], - signal.data["vmask"], signal.data["vmessage"], - signal.data["radio"], signal.data["message"], - signal.data["name"], signal.data["job"], - signal.data["realname"], signal.data["vname"],, - signal.data["compression"], signal.data["level"], signal.frequency, - signal.data["verb"], signal.data["language"], signal.data["channel_tag"], signal.data["channel_color"]) - - - /** #### - 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_levels, signal.data["channel_tag"], signal.data["channel_color"]) - - - /** #### - Artificial Broadcast - #### **/ - // (Imitates a mob) - - if(signal.data["type"] == 2) - - /* ###### Broadcast a message using signal.data ###### */ - // Parameter "data" as 4: AI can't track this person/mob - - Broadcast_Message(signal.data["connection"], signal.data["mob"], - signal.data["vmask"], signal.data["vmessage"], - signal.data["radio"], signal.data["message"], - signal.data["name"], signal.data["job"], - signal.data["realname"], signal.data["vname"], 4, signal.data["compression"], signal.data["level"], signal.frequency, - signal.data["verb"], signal.data["language"], signal.data["channel_tag"], signal.data["channel_color"]) - - if(!message_delay) - message_delay = 1 - spawn(10) - message_delay = 0 - recentmessages = list() - - /* --- Do a snazzy animation! --- */ - flick("broadcaster_send", src) - -/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 - ..() - - -/* - Basically just an empty shell for receiving and broadcasting radio messages. Not - very flexible, but it gets the job done. -*/ - -/obj/machinery/telecomms/allinone - name = "Telecommunications Mainframe" - icon = 'icons/obj/stationobjs.dmi' - icon_state = "comm_server" - desc = "A compact machine used for portable subspace telecommuniations processing." - density = TRUE - anchored = TRUE - use_power = POWER_USE_OFF - idle_power_usage = 0 - machinetype = 6 - produces_heat = 0 - circuitboard = /obj/item/stock_parts/circuitboard/telecomms/allinone - construct_state = /decl/machine_construction/tcomms/panel_closed/cannot_print - machine_name = "telecommunications mainframe" - machine_desc = "An awkward, clunky machine that serves as an all-in-one telecommunications hub. Provides peer-to-peer communication, and not much else." - var/listening_freqs - var/channel_color - var/channel_name - var/intercept = 0 // if nonzero, broadcasts all messages to syndicate channel - -/obj/machinery/telecomms/allinone/Initialize() - if(!listening_freqs) - listening_freqs = ANTAG_FREQS //Covers any updates to ANTAG_FREQS - return ..() - -/obj/machinery/telecomms/allinone/receive_signal(datum/signal/signal) - - if(!on) // has to be on to receive messages - return - - if(is_freq_listening(signal)) // detect subspace signals - - if(freq_listening.len) //If we are actively listening to this frequency, go ahead and use the real signal - signal.data["done"] = 1 // mark the signal as being broadcasted - signal.data["compression"] = 0 - - // Search for the original signal and mark it as done as well - var/datum/signal/original = signal.data["original"] - if(original) - original.data["done"] = 1 - - if(signal.data["slow"] > 0) - sleep(signal.data["slow"]) // simulate the network lag if necessary - - /* ###### Broadcast a message using signal.data ###### */ - - var/datum/radio_frequency/connection = signal.data["connection"] - - if(connection.frequency in listening_freqs) // if antag broadcast, just - Broadcast_Message(signal.data["connection"], signal.data["mob"], - signal.data["vmask"], signal.data["vmessage"], - signal.data["radio"], signal.data["message"], - signal.data["name"], signal.data["job"], - signal.data["realname"], signal.data["vname"],, signal.data["compression"], list(0), connection.frequency, - signal.data["verb"], signal.data["language"], channel_name ? channel_name : signal.data["channel_tag"], channel_color ? channel_color : signal.data["channel_color"]) - else - if(intercept) - Broadcast_Message(signal.data["connection"], signal.data["mob"], - signal.data["vmask"], signal.data["vmessage"], - signal.data["radio"], signal.data["message"], - signal.data["name"], signal.data["job"], - signal.data["realname"], signal.data["vname"], 3, signal.data["compression"], list(0), connection.frequency, - signal.data["verb"], signal.data["language"], signal.data["channel_tag"], signal.data["channel_color"]) - - else //If we are not actively listening and just pulling from every frequency, use a copy so that other telecomms networks aren't affected - var/datum/signal/copy = new - copy.transmission_method = 2 - copy.frequency = signal.frequency - copy.data = signal.data.Copy() - - copy.data["done"] = 1 // mark the signal as being broadcasted - copy.data["compression"] = 0 - - if(copy.data["slow"] > 0) - sleep(copy.data["slow"]) // simulate the network lag if necessary - - /* ###### Broadcast a message using signal.data ###### */ - - var/datum/radio_frequency/connection = copy.data["connection"] - - if(connection.frequency in listening_freqs) // if antag broadcast, just - Broadcast_Message(copy.data["connection"], copy.data["mob"], - copy.data["vmask"], copy.data["vmessage"], - copy.data["radio"], copy.data["message"], - copy.data["name"], copy.data["job"], - copy.data["realname"], copy.data["vname"],, copy.data["compression"], list(0), connection.frequency, - copy.data["verb"], copy.data["language"], channel_name ? channel_name : copy.data["channel_tag"], channel_color ? channel_color : copy.data["channel_color"]) - else - if(intercept) - Broadcast_Message(copy.data["connection"], copy.data["mob"], - copy.data["vmask"], copy.data["vmessage"], - copy.data["radio"], copy.data["message"], - copy.data["name"], copy.data["job"], - copy.data["realname"], copy.data["vname"], 3, copy.data["compression"], list(0), connection.frequency, - copy.data["verb"], copy.data["language"], copy.data["channel_tag"], copy.data["channel_color"]) - - -/** - - Here is the big, bad function that broadcasts a message given the appropriate - parameters. - - @param connection: - The datum generated in radio.dm, stored in signal.data["connection"]. - - @param M: - Reference to the mob/speaker, stored in signal.data["mob"] - - @param vmask: - Boolean value if the mob is "hiding" its identity via voice mask, stored in - signal.data["vmask"] - - @param vmessage: - If specified, will display this as the message; such as "chimpering" - for monkies if the mob is not understood. Stored in signal.data["vmessage"]. - - @param radio: - Reference to the radio broadcasting the message, stored in signal.data["radio"] - - @param message: - The actual string message to display to mobs who understood mob M. Stored in - signal.data["message"] - - @param name: - The name to display when a mob receives the message. signal.data["name"] - - @param job: - The name job to display for the AI when it receives the message. signal.data["job"] - - @param realname: - The "real" name associated with the mob. signal.data["realname"] - - @param vname: - If specified, will use this name when mob M is not understood. signal.data["vname"] - - @param data: - If specified: - 1 -- Will only broadcast to intercoms - 2 -- Will only broadcast to intercoms and station-bounced radios - 3 -- Broadcast to syndicate frequency - 4 -- AI can't track down this person. Useful for imitation broadcasts where you can't find the actual mob - - @param compression: - If 0, the signal is audible - If nonzero, the signal may be partially inaudible or just complete gibberish. - - @param level: - The list of Z levels that the sending radio is broadcasting to. Having 0 in the list broadcasts on all levels - - @param freq - The frequency of the signal - - @param channel_tag - The "name" of the frequency. Displayed in brackets before the message - - @param channel_color - Color of the radio message - -**/ - -/proc/Broadcast_Message(var/datum/radio_frequency/connection, var/mob/M, - var/vmask, var/vmessage, var/obj/item/device/radio/radio, - var/message, var/name, var/job, var/realname, var/vname, - var/data, var/compression, var/list/level, var/freq, var/verbage = "says", var/datum/language/speaking = null, - var/channel_tag, var/channel_color) - - - /* ###### Prepare the radio connection ###### */ - - var/display_freq = freq - - var/list/obj/item/device/radio/radios = list() - - // --- Broadcast only to intercom devices --- - - if(data == 1) - - for (var/obj/item/device/radio/intercom/R in connection.devices["[RADIO_CHAT]"]) - if(R.receive_range(display_freq, level) > -1) - radios += R - - // --- 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(istype(R, /obj/item/device/radio/headset)) - continue - - if(R.receive_range(display_freq, level) > -1) - radios += R - - // --- Broadcast to antag radios! --- - - else if(data == 3) - for(var/antag_freq in ANTAG_FREQS) - var/datum/radio_frequency/antag_connection = radio_controller.return_frequency(antag_freq) - for (var/obj/item/device/radio/R in antag_connection.devices["[RADIO_CHAT]"]) - if(R.intercept && R.receive_range(antag_freq, level) > -1) - radios += R - - // --- Broadcast to ALL radio devices --- - else - - for (var/obj/item/device/radio/R in connection.devices["[RADIO_CHAT]"]) - if(R.receive_range(display_freq, level) > -1) - radios += R - - for(var/obj/item/device/radio/R in radios) - if((R.last_radio_sound + 1 SECOND) < world.time && R != radio) - playsound(R.loc, 'sound/effects/radio_chatter.ogg', 10, 0, -6) - R.last_radio_sound = world.time - - // Get a list of mobs who can hear from the radios we collected. - var/list/receive = get_mobs_in_radio_ranges(radios) - - /* ###### Organize the receivers into categories for displaying the message ###### */ - - // Understood the message: - var/list/heard_masked = list() // masked name or no real name - var/list/heard_normal = list() // normal message - - // Did not understand the message: - var/list/heard_voice = list() // voice message (ie "chimpers") - 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(istype(R, /mob/new_player)) // we don't want new players to hear messages. rare but generates runtimes. - continue - - // Ghosts hearing all radio chat don't want to hear syndicate intercepts, they're duplicates - if(data == 3 && isghost(R) && R.get_preference_value(/datum/client_preference/ghost_radio) == GLOB.PREF_ALL_CHATTER) - continue - - // --- Check for compression --- - if(compression > 0) - heard_gibberish += R - continue - - // --- Can understand the speech --- - - if (!M || R.say_understands(M)) - - // - Not human or wearing a voice mask - - if (!M || !ishuman(M) || vmask) - heard_masked += R - - // - Human and not wearing voice mask - - else - heard_normal += R - - // --- Can't understand the speech --- - - else - // - The speaker has a prespecified "voice message" to display if not understood - - if (vmessage) - heard_voice += R - - // - Just display a garbled message - - else - heard_garbled += R - - - /* ###### Begin formatting and sending the message ###### */ - if (length(heard_masked) || length(heard_normal) || length(heard_voice) || length(heard_garbled) || length(heard_gibberish)) - - /* --- Some miscellaneous variables to format the string output --- */ - var/freq_text = format_frequency(display_freq) - if(channel_tag) - freq_text = channel_tag - - // Default to commons channel green - if(!channel_color) - channel_color = channel_color_presets["Global Green"] - - var/part_b_extra = "" - if(data == 3) // intercepted radio message - part_b_extra = " (Intercepted)" - var/part_a = "\[[freq_text]\][part_b_extra] " // goes in the actual output - - // --- Some more pre-message formatting --- - var/part_b = " " // Tweaked for security headsets -- TLE - var/part_c = "" - - - /* ###### Send the message ###### */ - - /* --- Process all the mobs that heard a masked voice (understood) --- */ - - if (length(heard_masked)) - for (var/mob/R in heard_masked) - R.hear_radio(message,verbage, speaking, part_a, part_b, part_c, M, 0, name) - - /* --- Process all the mobs that heard the voice normally (understood) --- */ - - if (length(heard_normal)) - for (var/mob/R in heard_normal) - R.hear_radio(message, verbage, speaking, part_a, part_b, part_c, M, 0, realname) - - /* --- Process all the mobs that heard the voice normally (did not understand) --- */ - - if (length(heard_voice)) - for (var/mob/R in heard_voice) - R.hear_radio(message,verbage, speaking, part_a, part_b, part_c, M,0, vname) - - /* --- 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)) - for (var/mob/R in heard_garbled) - R.hear_radio(message, verbage, speaking, part_a, part_b, part_c, M, 1, vname) - - - /* --- Complete gibberish. Usually happens when there's a compressed message --- */ - - if (length(heard_gibberish)) - for (var/mob/R in heard_gibberish) - R.hear_radio(message, verbage, speaking, part_a, part_b, part_c, M, compression) - - return 1 - -/proc/Broadcast_SimpleMessage(var/source, var/frequency, var/text, var/data, var/mob/M, var/compression, var/level, var/channel_tag, var/channel_color) - - /* ###### Prepare the radio connection ###### */ - - if(!M) - var/mob/living/carbon/human/H = new - M = H - - var/datum/radio_frequency/connection = radio_controller.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(istype(R, /obj/item/device/radio/headset)) - continue - var/turf/position = get_turf(R) - if(position && position.z == level) - receive |= R.send_hear(display_freq) - - - // --- Broadcast to antag radios! --- - - else if(data == 3) - for(var/freq in ANTAG_FREQS) - var/datum/radio_frequency/antag_connection = radio_controller.return_frequency(freq) - for (var/obj/item/device/radio/R in antag_connection.devices["[RADIO_CHAT]"]) - var/turf/position = get_turf(R) - if(position && position.z == level) - receive |= R.send_hear(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 --- */ - // --- Check for compression --- - if(compression > 0) - - heard_gibberish += R - continue - - // --- Can understand the speech --- - - if (R.say_understands(M)) - - 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/freq_text = format_frequency(display_freq) - if(channel_tag) - freq_text = channel_tag - - if(!channel_color) - channel_color = channel_color_presets["Global Green"] - - var/part_a = "" // goes in the actual output - - // --- Some more pre-message formatting --- - - var/part_b_extra = "" - if(data == 3) // intercepted radio message - part_b_extra = " (Intercepted)" - - var/part_b = " \[[freq_text]\][part_b_extra] " // Tweaked for security headsets -- TLE - var/part_c = "" - - //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() - var/datum/signal/signal = src.telecomms_process() - var/turf/position = get_turf(src) - return (position.z in signal.data["level"] && signal.data["done"]) - -/atom/proc/telecomms_process(var/do_sleep = 1) - - // First, we want to generate a new radio signal - var/datum/signal/signal = new - signal.transmission_method = 2 // 2 would be a subspace transmission. - var/turf/pos = get_turf(src) - - // --- Finally, tag the actual signal with the appropriate values --- - signal.data = list( - "slow" = 0, // how much to sleep() before broadcasting - simulates net lag - "message" = "TEST", - "compression" = rand(45, 50), // If the signal is compressed, compress our message too. - "traffic" = 0, // dictates the total traffic sum that the signal went through - "type" = 4, // determines what type of radio input it is: test broadcast - "reject" = 0, - "done" = 0, - "level" = pos ? pos.z : 0 // The level it is being broadcasted at. - ) - signal.frequency = PUB_FREQ// Common channel - - //#### Sending the signal to all subspace receivers ####// - for(var/obj/machinery/telecomms/receiver/R in telecomms_list) - R.receive_signal(signal) - - if(do_sleep) - sleep(rand(10,25)) - - //to_world_log("Level: [signal.data["level"]] - Done: [signal.data["done"]]") - - return signal - diff --git a/code/game/machinery/telecomms/logbrowser.dm b/code/game/machinery/telecomms/logbrowser.dm deleted file mode 100644 index 0a34c0a48b762..0000000000000 --- a/code/game/machinery/telecomms/logbrowser.dm +++ /dev/null @@ -1,199 +0,0 @@ -//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:31 - -/obj/machinery/computer/telecomms - icon_keyboard = "tech_key" - -/obj/machinery/computer/telecomms/server - name = "Telecommunications Server Monitor" - icon_screen = "comm_logs" - machine_name = "telecommunications server monitor console" - machine_desc = "A terminal used to view and browse the logs of a telecommunications network." - - var/screen = 0 // the screen number: - var/list/servers = list() // the servers located by the computer - var/obj/machinery/telecomms/server/SelectedServer - - var/network = "NULL" // the network to probe - var/temp = "" // temporary feedback messages - - var/universal_translate = 0 // set to 1 if it can translate nonhuman speech - - req_access = list(access_tcomsat) - -/obj/machinery/computer/telecomms/server/interface_interact(mob/user) - interact(user) - return TRUE - -/obj/machinery/computer/telecomms/server/interact(mob/user) - user.set_machine(src) - var/list/dat = list() - dat += "Telecommunication Server Monitor
              Telecommunications Server Monitor
              " - - switch(screen) - - - // --- Main Menu --- - - if(0) - dat += "
              [temp]
              " - dat += "
              Current Network: [network]
              " - if(servers.len) - dat += "
              Detected Telecommunication Servers:
                " - for(var/obj/machinery/telecomms/T in servers) - dat += "
              • \ref[T] [T.name] ([T.id])
              • " - dat += "
              " - dat += "
              \[Flush Buffer\]" - - else - dat += "
              No servers detected. Scan for servers: \[Scan\]" - - - // --- Viewing Server --- - - if(1) - dat += "
              [temp]
              " - dat += "
              \[Main Menu\] \[Refresh\]
              " - dat += "
              Current Network: [network]" - dat += "
              Selected Server: [SelectedServer.id]" - - if(SelectedServer.totaltraffic >= 1024) - dat += "
              Total recorded traffic: [round(SelectedServer.totaltraffic / 1024)] Terrabytes

              " - else - dat += "
              Total recorded traffic: [SelectedServer.totaltraffic] Gigabytes

              " - - dat += "Stored Logs:
                " - - var/i = 0 - for(var/datum/comm_log_entry/C in SelectedServer.log_entries) - i++ - - - // If the log is a speech file - if(C.input_type == "Speech File") - - dat += "
              1. [C.name] \[X\]
                " - - // -- Determine race of orator -- - - var/race = C.parameters["race"] // The actual race of the mob - var/language = C.parameters["language"] // The language spoken, or null/"" - - // -- If the orator is a human, or universal translate is active, OR mob has universal speech on -- - - if(universal_translate || C.parameters["uspeech"] || C.parameters["intelligible"]) - dat += "Data type: [C.input_type]
                " - dat += "Source: [C.parameters["name"]] (Job: [C.parameters["job"]])
                " - dat += "Class: [race]
                " - dat += "Contents: \"[C.parameters["message"]]\"
                " - if(language) - dat += "Language: [language]
                " - - // -- Orator is not human and universal translate not active -- - - else - dat += "Data type: Audio File
                " - dat += "Source: Unidentifiable
                " - dat += "Class: [race]
                " - dat += "Contents: Unintelligble
                " - - dat += "

              2. " - - else if(C.input_type == "Execution Error") - - dat += "
              3. [C.name] \[X\]
                " - dat += "Output: \"[C.parameters["message"]]\"
                " - dat += "

              4. " - - - dat += "
              " - - - var/datum/browser/popup = new(user, "comm_monitor", "Telecommunications Monitor", 575, 400) - popup.set_content(JOINTEXT(dat)) - popup.open() - - temp = "" - return - - -/obj/machinery/computer/telecomms/server/OnTopic(mob/user, list/href_list, datum/topic_state/state) - if(href_list["viewserver"]) - screen = 1 - for(var/obj/machinery/telecomms/T in servers) - if(T.id == href_list["viewserver"]) - SelectedServer = T - break - - if(href_list["operation"]) - switch(href_list["operation"]) - - if("release") - servers = list() - screen = 0 - - if("mainmenu") - screen = 0 - - if("scan") - if(servers.len > 0) - temp = "- FAILED: CANNOT PROBE WHEN BUFFER FULL -" - - else - for(var/obj/machinery/telecomms/server/T in range(25, src)) - if(T.network == network) - servers.Add(T) - - if(!servers.len) - temp = "- FAILED: UNABLE TO LOCATE SERVERS IN \[[network]\] -" - else - temp = "- [servers.len] SERVERS PROBED & BUFFERED -" - - screen = 0 - - if(href_list["delete"]) - - if(!src.allowed(usr) && !emagged) - to_chat(usr, "ACCESS DENIED.") - return - - if(SelectedServer) - var/key = text2num(href_list["delete"]) - if(!is_valid_index(key, SelectedServer.log_entries)) - return TOPIC_REFRESH - var/datum/comm_log_entry/D = SelectedServer.log_entries[key] - if(!D) - return TOPIC_REFRESH - - temp = "- DELETED ENTRY: [D.name] -" - - SelectedServer.log_entries.Remove(D) - qdel(D) - - else - temp = "- FAILED: NO SELECTED MACHINE -" - - if(href_list["network"]) - - var/newnet = input(usr, "Which network do you want to view?", "Comm Monitor", network) as null|text - - if(newnet && ((usr in range(1, src) || issilicon(usr)))) - if(length(newnet) > 15) - temp = "- FAILED: NETWORK TAG STRING TOO LENGHTLY -" - - else - - network = newnet - screen = 0 - servers = list() - temp = "- NEW NETWORK TAG SET IN ADDRESS \[[network]\] -" - - updateUsrDialog() - -/obj/machinery/computer/telecomms/server/emag_act(var/remaining_charges, var/mob/user) - if(!emagged) - playsound(src.loc, 'sound/effects/sparks4.ogg', 75, 1) - emagged = TRUE - req_access.Cut() - to_chat(user, "You you disable the security protocols") - src.updateUsrDialog() - return 1 diff --git a/code/game/machinery/telecomms/machine_interactions.dm b/code/game/machinery/telecomms/machine_interactions.dm deleted file mode 100644 index 1e829fa53f5f5..0000000000000 --- a/code/game/machinery/telecomms/machine_interactions.dm +++ /dev/null @@ -1,365 +0,0 @@ -//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:32 - - -/* - - All telecommunications interactions: - -*/ - -#define STATION_Z 1 -#define TELECOMM_Z 3 - -/obj/machinery/telecomms - var/temp = "" // output message - construct_state = /decl/machine_construction/tcomms/panel_closed - uncreated_component_parts = null - stat_immune = 0 - maximum_component_parts = list(/obj/item/stock_parts = 15) - -/obj/machinery/telecomms/attackby(obj/item/P as obj, mob/user as mob) - - // Using a multitool lets you access the receiver's interface - if(isMultitool(P)) - interface_interact(user) - return TRUE - - // REPAIRING: Use Nanopaste to repair 10-20 integrity points. - if(istype(P, /obj/item/stack/nanopaste)) - var/obj/item/stack/nanopaste/T = P - if (integrity < 100) //Damaged, let's repair! - if (T.use(1)) - integrity = clamp(integrity + rand(10, 20), 0, 100) - to_chat(usr, "You apply the Nanopaste to [src], repairing some of the damage.") - else - to_chat(usr, "This machine is already in perfect condition.") - return - - return component_attackby(P, user) - -/obj/machinery/telecomms/cannot_transition_to(state_path, mob/user) - . = ..() - if(. != MCS_CHANGE) - return - - if(state_path == /decl/machine_construction/default/deconstructed) - to_chat(user, "You begin prying out the circuit board other components...") - playsound(src.loc, 'sound/items/Crowbar.ogg', 50, 1) - if(do_after(user, 6 SECONDS, src, DO_PUBLIC_UNIQUE)) - to_chat(user, "You finish prying out the components.") - return - return MCS_BLOCK - -/obj/machinery/telecomms/dismantle() - for(var/obj/x in (contents - component_parts)) - x.dropInto(loc) - . = ..() - -// This should all be a multitool extension, but outside the scope of current rework. -/obj/machinery/telecomms/CanUseTopic(mob/user) - // You need a multitool to use this, or be silicon - if(!issilicon(user)) - // istype returns false if the value is null - if(!istype(user.get_active_hand(), /obj/item/device/multitool)) - return STATUS_CLOSE - return ..() - -/obj/machinery/telecomms/interface_interact(var/mob/user) - interact(user) - return TRUE - -/obj/machinery/telecomms/interact(var/mob/user) - var/obj/item/device/multitool/P = get_multitool(user) - - user.set_machine(src) - var/list/dat = list() - dat += "[src.name]

              [src.name] Access

              " - dat += "
              [temp]
              " - dat += "
              Power Status: [src.toggled ? "On" : "Off"]" - if(overloaded_for) - dat += "

              WARNING: Ion interference detected. System will automatically recover in [overloaded_for*2] seconds. Reset manually
              " - if(on && toggled) - if(id != "" && id) - dat += "
              Identification String: [id]" - else - dat += "
              Identification String: NULL" - dat += "
              Network: [network]" - dat += "
              Prefabrication: [autolinkers.len ? "TRUE" : "FALSE"]" - if(hide) dat += "
              Shadow Link: ACTIVE" - - //Show additional options for certain machines. - dat += Options_Menu() - - dat += "
              Linked Network Entities:
                " - - var/i = 0 - for(var/obj/machinery/telecomms/T in links) - i++ - if(T.hide && !src.hide) - continue - dat += "
              1. \ref[T] [T.name] ([T.id]) \[X\]
              2. " - dat += "
              " - - dat += "
              Filtering Frequencies: " - - i = 0 - if(length(freq_listening)) - for(var/x in freq_listening) - i++ - if(i < length(freq_listening)) - dat += "[format_frequency(x)] GHz\[X\]; " - else - dat += "[format_frequency(x)] GHz\[X\]" - else - dat += "NONE" - - dat += "
              \[Add Filter\]" - - dat += "

              Channel Tagging Rules:
                " - - if(length(channel_tags)) - for(var/list/rule in channel_tags) - dat +="
              1. [format_frequency(rule[1])] -> [rule[2]] ([rule[3]]) \[X\]
              2. " - - dat += "
              " - dat += "\[Add Rule\]" - - dat += "
              " - - if(P) - var/obj/machinery/telecomms/device = P.get_buffer() - if(istype(device)) - dat += "

              MULTITOOL BUFFER: [device] ([device.id]) \[Link\] \[Flush\]" - else - dat += "

              MULTITOOL BUFFER:
              \[Add Machine\]" - - dat += "
              " - temp = "" - - var/datum/browser/popup = new(user, "tcommmachine", "Telecommunications Machine Configuration Panel", 520, 600) - popup.set_content(JOINTEXT(dat)) - popup.open() - -// Returns a multitool from a user depending on their mobtype. - -/obj/machinery/telecomms/proc/get_multitool(mob/user as mob) - - var/obj/item/device/multitool/P = null - // Let's double check - if(!issilicon(user) && istype(user.get_active_hand(), /obj/item/device/multitool)) - P = user.get_active_hand() - else if(isAI(user)) - var/mob/living/silicon/ai/U = user - P = U.aiMulti - else if(isrobot(user) && in_range(user, src)) - if(istype(user.get_active_hand(), /obj/item/device/multitool)) - P = user.get_active_hand() - return P - -// Additional Options for certain machines. Use this when you want to add an option to a specific machine. -// Example of how to use below. - -/obj/machinery/telecomms/proc/Options_Menu() - return "" - -/* -// Add an option to the processor to switch processing mode. (COMPRESS -> UNCOMPRESS or UNCOMPRESS -> COMPRESS) -/obj/machinery/telecomms/processor/Options_Menu() - var/dat = "
              Processing Mode: [process_mode ? "UNCOMPRESS" : "COMPRESS"]" - return dat -*/ -// The topic for Additional Options. Use this for checking href links for your specific option. -// Example of how to use below. -/obj/machinery/telecomms/proc/Options_Topic(href, href_list) - return - -/* -/obj/machinery/telecomms/processor/Options_Topic(href, href_list) - - if(href_list["process"]) - temp = "-% Processing mode changed. %-" - src.process_mode = !src.process_mode -*/ - -// BUS - -/obj/machinery/telecomms/bus/Options_Menu() - var/dat = "
              Change Signal Frequency: [change_frequency ? "YES ([change_frequency])" : "NO"]" - return dat - -/obj/machinery/telecomms/bus/Options_Topic(href, href_list) - - if(href_list["change_freq"]) - - var/newfreq = input(usr, "Specify a new frequency for new signals to change to. Enter null to turn off frequency changing. Decimals assigned automatically.", src, network) as null|num - if(canAccess(usr)) - if(newfreq) - if(findtext(num2text(newfreq), ".")) - newfreq *= 10 // shift the decimal one place - if(newfreq < 10000) - change_frequency = newfreq - temp = "-% New frequency to change to assigned: \"[newfreq] GHz\" %-" - else - change_frequency = 0 - temp = "-% Frequency changing deactivated %-" - - -/obj/machinery/telecomms/Topic(href, href_list) - if(..()) - return 1 - if(!issilicon(usr)) - if(!istype(usr.get_active_hand(), /obj/item/device/multitool)) - return - - if(stat & (BROKEN|NOPOWER)) - return - - var/obj/item/device/multitool/P = get_multitool(usr) - - if(href_list["input"]) - switch(href_list["input"]) - - if("resetoverload") - overloaded_for = 0 - temp = "-% Manual override accepted. \The [src] has been reset." - - if("toggle") - - src.toggled = !src.toggled - temp = "-% [src] has been [src.toggled ? "activated" : "deactivated"]." - update_power() - - /* - if("hide") - src.hide = !hide - temp = "-% Shadow Link has been [src.hide ? "activated" : "deactivated"]." - */ - - if("id") - var/newid = copytext_char(reject_bad_text(input(usr, "Specify the new ID for this machine", src, id) as null|text),1,MAX_MESSAGE_LEN) - if(newid && canAccess(usr)) - id = newid - temp = "-% New ID assigned: \"[id]\" %-" - - if("network") - var/newnet = input(usr, "Specify the new network for this machine. This will break all current links.", src, network) as null|text - if(newnet && canAccess(usr)) - - if(length(newnet) > 15) - temp = "-% Too many characters in new network tag %-" - - else - for(var/obj/machinery/telecomms/T in links) - T.links.Remove(src) - - network = newnet - links = list() - temp = "-% New network tag assigned: \"[network]\" %-" - - - if("freq") - var/newfreq = input(usr, "Specify a new frequency to filter (GHz). Decimals assigned automatically.", src, network) as null|num - if(newfreq && canAccess(usr)) - if(findtext(num2text(newfreq), ".")) - newfreq *= 10 // shift the decimal one place - if(!(newfreq in freq_listening) && newfreq < 10000) - freq_listening.Add(newfreq) - temp = "-% New frequency filter assigned: \"[newfreq] GHz\" %-" - - if("tagrule") - var/freq = input(usr, "Specify frequency to tag (GHz). Decimals assigned automatically.", src, network) as null|num - if(freq && canAccess(usr)) - if(findtext(num2text(freq), ".")) - freq *= 10 - - if(!(freq in freq_listening)) - temp = "-% Not filtering specified frequency %-" - updateUsrDialog() - return - - for(var/list/rule in channel_tags) - if(rule[1] == freq) - temp = "-% Tagging rule already defined %-" - updateUsrDialog() - return - - var/tag = input(usr, "Specify tag.", src, "") as null|text - var/color = input(usr, "Select color.", src, "") as null|anything in (channel_color_presets + "Custom color") - - if(color == "Custom color") - color = input("Select color.", src, rgb(0, 128, 0)) as null|color - else - color = channel_color_presets[color] - - if(freq < 10000) - channel_tags.Add(list(list(freq, tag, color))) - temp = "-% New tagging rule assigned:[freq] GHz -> \"[tag]\" ([color]) %-" - - if(href_list["delete"]) - - // changed the layout about to workaround a pesky runtime -- Doohl - - var/x = text2num(href_list["delete"]) - temp = "-% Removed frequency filter [x] %-" - freq_listening.Remove(x) - - if(href_list["deletetagrule"]) - - var/freq = text2num(href_list["deletetagrule"]) - var/rule_delete - for(var/list/rule in channel_tags) - if(rule[1] == freq) - rule_delete = rule - temp = "-% Removed tagging rule: [rule_delete[1]] -> [rule_delete[2]] %-" - channel_tags.Remove(list(rule_delete)) - - if(href_list["unlink"]) - - if(text2num(href_list["unlink"]) <= length(links)) - var/obj/machinery/telecomms/T = links[text2num(href_list["unlink"])] - temp = "-% Removed \ref[T] [T.name] from linked entities. %-" - - // Remove link entries from both T and src. - - if(src in T.links) - T.links.Remove(src) - links.Remove(T) - - if(href_list["link"]) - - if(P) - var/obj/machinery/telecomms/device = P.get_buffer() - if(istype(device) && device != src) - if(!(src in device.links)) - device.links.Add(src) - - if(!(device in src.links)) - src.links.Add(device) - - temp = "-% Successfully linked with \ref[device] [device.name] %-" - - else - temp = "-% Unable to acquire buffer %-" - - if(href_list["buffer"]) - - P.set_buffer(src) - var/atom/buffer = P.get_buffer() - temp = "-% Successfully stored \ref[buffer] [buffer.name] in buffer %-" - - - if(href_list["flush"]) - - temp = "-% Buffer successfully flushed. %-" - P.set_buffer(null) - - src.Options_Topic(href, href_list) - - usr.set_machine(src) - - updateUsrDialog() - -/obj/machinery/telecomms/proc/canAccess(var/mob/user) - if(issilicon(user) || in_range(user, src)) - return 1 - return 0 diff --git a/code/game/machinery/telecomms/presets.dm b/code/game/machinery/telecomms/presets.dm deleted file mode 100644 index 9095ab3e004e1..0000000000000 --- a/code/game/machinery/telecomms/presets.dm +++ /dev/null @@ -1,302 +0,0 @@ -// ### Preset machines ### - -//HUB - -/obj/machinery/telecomms/hub/map_preset - var/preset_name - -/obj/machinery/telecomms/hub/map_preset/Initialize() - if (preset_name) - var/name_lower = replacetext_char(lowertext(preset_name), " ", "_") - id = "[preset_name] Hub" - network = "tcomm_[name_lower]" - autolinkers = list( - "[name_lower]_broadcaster", - "[name_lower]_hub", - "[name_lower]_receiver", - "[name_lower]_relay", - "[name_lower]_server" - ) - . = ..() - -/obj/machinery/telecomms/hub/preset - id = "Hub" - network = "tcommsat" - autolinkers = list("hub", "relay", "c_relay", "s_relay", "m_relay", "r_relay", "b_relay", "1_relay", "2_relay", "3_relay", "4_relay", "5_relay", "s_relay", "science", "medical", - "supply", "service", "common", "command", "engineering", "security", "receiverA", "broadcasterA") - -/obj/machinery/telecomms/hub/preset_cent - id = "CentComm Hub" - network = "tcommsat" - produces_heat = 0 - autolinkers = list("hub_cent", "c_relay", "s_relay", "m_relay", "r_relay", - "centcomm", "receiverCent", "broadcasterCent") - -//Receivers - -/obj/machinery/telecomms/receiver/map_preset - var/preset_name - var/use_common = FALSE - -/obj/machinery/telecomms/receiver/map_preset/Initialize() - if (preset_name) - var/name_lower = replacetext_char(lowertext(preset_name), " ", "_") - id = "[preset_name] Receiver" - network = "tcomm_[name_lower]" - freq_listening += list(assign_away_freq(preset_name), HAIL_FREQ) - if (use_common) - freq_listening += PUB_FREQ - autolinkers = list( - "[name_lower]_receiver" - ) - . = ..() - -/obj/machinery/telecomms/receiver/preset_right - id = "Receiver A" - network = "tcommsat" - autolinkers = list("receiverA") // link to relay - freq_listening = list(AI_FREQ, SCI_FREQ, MED_FREQ, SUP_FREQ, SRV_FREQ, COMM_FREQ, ENG_FREQ, SEC_FREQ, ENT_FREQ, HAIL_FREQ) - - //Common and other radio frequencies for people to freely use -/obj/machinery/telecomms/receiver/preset_right/New() - for(var/i = PUBLIC_LOW_FREQ, i < PUBLIC_HIGH_FREQ, i += 2) - freq_listening |= i - ..() - -/obj/machinery/telecomms/receiver/preset_cent - id = "CentComm Receiver" - network = "tcommsat" - produces_heat = 0 - autolinkers = list("receiverCent") - freq_listening = list(ERT_FREQ, DTH_FREQ) - - -//Buses - -/obj/machinery/telecomms/bus/map_preset - var/preset_name - var/use_common = FALSE - -/obj/machinery/telecomms/bus/map_preset/Initialize() - if (preset_name) - var/name_lower = replacetext_char(lowertext(preset_name), " ", "_") - id = "[preset_name] Bus" - network = "tcomm_[name_lower]" - freq_listening += list(assign_away_freq(preset_name), HAIL_FREQ) - if (use_common) - freq_listening += PUB_FREQ - autolinkers = list( - "[name_lower]_processor", - "[name_lower]_server" - ) - . = ..() - -/obj/machinery/telecomms/bus/preset_one - id = "Bus 1" - network = "tcommsat" - freq_listening = list(SCI_FREQ, MED_FREQ) - autolinkers = list("processor1", "science", "medical") - -/obj/machinery/telecomms/bus/preset_two - id = "Bus 2" - network = "tcommsat" - freq_listening = list(SUP_FREQ, SRV_FREQ) - autolinkers = list("processor2", "supply", "service") - -/obj/machinery/telecomms/bus/preset_three - id = "Bus 3" - network = "tcommsat" - freq_listening = list(SEC_FREQ, COMM_FREQ) - autolinkers = list("processor3", "security", "command") - -/obj/machinery/telecomms/bus/preset_four - id = "Bus 4" - network = "tcommsat" - freq_listening = list(ENG_FREQ, AI_FREQ, PUB_FREQ, ENT_FREQ, MED_I_FREQ, SEC_I_FREQ, HAIL_FREQ) - autolinkers = list("processor4", "engineering", "common") - -/obj/machinery/telecomms/bus/preset_four/New() - for(var/i = PUBLIC_LOW_FREQ, i < PUBLIC_HIGH_FREQ, i += 2) - if(i == AI_FREQ || i == PUB_FREQ || i == MED_I_FREQ || i == SEC_I_FREQ || i == HAIL_FREQ) - continue - freq_listening |= i - ..() - -/obj/machinery/telecomms/bus/preset_cent - id = "CentComm Bus" - network = "tcommsat" - freq_listening = list(ERT_FREQ, DTH_FREQ, ENT_FREQ) - produces_heat = 0 - autolinkers = list("processorCent", "centcomm") - -//Processors - -/obj/machinery/telecomms/processor/map_preset - var/preset_name - -/obj/machinery/telecomms/processor/map_preset/Initialize() - if (preset_name) - var/name_lower = replacetext_char(lowertext(preset_name), " ", "_") - id = "[preset_name] Processor" - network = "tcomm_[name_lower]" - autolinkers = list( - "[name_lower]_processor" - ) - . = ..() - -/obj/machinery/telecomms/processor/preset_one - id = "Processor 1" - network = "tcommsat" - autolinkers = list("processor1") // processors are sort of isolated; they don't need backward links - -/obj/machinery/telecomms/processor/preset_two - id = "Processor 2" - network = "tcommsat" - autolinkers = list("processor2") - -/obj/machinery/telecomms/processor/preset_three - id = "Processor 3" - network = "tcommsat" - autolinkers = list("processor3") - -/obj/machinery/telecomms/processor/preset_four - id = "Processor 4" - network = "tcommsat" - autolinkers = list("processor4") - -/obj/machinery/telecomms/processor/preset_cent - id = "CentComm Processor" - network = "tcommsat" - produces_heat = 0 - autolinkers = list("processorCent") - -//Servers - -/obj/machinery/telecomms/server/map_preset - var/preset_name - var/preset_color = COMMS_COLOR_DEFAULT - var/use_common = FALSE - -/obj/machinery/telecomms/server/map_preset/Initialize() - if (preset_name) - var/name_lower = replacetext_char(lowertext(preset_name), " ", "_") - id = "[preset_name] Server" - network = "tcomm_[name_lower]" - freq_listening += list( - assign_away_freq(preset_name), - HAIL_FREQ - ) - channel_tags += list( - list(assign_away_freq(preset_name), preset_name, preset_color), - list(HAIL_FREQ, "Hailing", COMMS_COLOR_HAILING) - ) - if (use_common) - freq_listening += PUB_FREQ - channel_tags += list(list(PUB_FREQ, "Common", COMMS_COLOR_COMMON)) - autolinkers = list( - "[name_lower]_server" - ) - . = ..() - -/obj/machinery/telecomms/server/presets - - network = "tcommsat" - -/obj/machinery/telecomms/server/presets/science - id = "Science Server" - freq_listening = list(SCI_FREQ) - channel_tags = list(list(SCI_FREQ, "Science", COMMS_COLOR_SCIENCE)) - autolinkers = list("science") - -/obj/machinery/telecomms/server/presets/medical - id = "Medical Server" - freq_listening = list(MED_FREQ) - channel_tags = list(list(MED_FREQ, "Medical", COMMS_COLOR_MEDICAL)) - autolinkers = list("medical") - -/obj/machinery/telecomms/server/presets/supply - id = "Supply Server" - freq_listening = list(SUP_FREQ) - channel_tags = list(list(SUP_FREQ, "Supply", COMMS_COLOR_SUPPLY)) - autolinkers = list("supply") - -/obj/machinery/telecomms/server/presets/service - id = "Service Server" - freq_listening = list(SRV_FREQ) - channel_tags = list(list(SRV_FREQ, "Service", COMMS_COLOR_SERVICE)) - autolinkers = list("service") - -/obj/machinery/telecomms/server/presets/common - id = "Common Server" - freq_listening = list(PUB_FREQ, AI_FREQ, ENT_FREQ, MED_I_FREQ, SEC_I_FREQ, HAIL_FREQ) // AI Private, Common, and Departmental Intercomms - channel_tags = list( - list(PUB_FREQ, "Common", COMMS_COLOR_COMMON), - list(AI_FREQ, "AI Private", COMMS_COLOR_AI), - list(ENT_FREQ, "Entertainment", COMMS_COLOR_ENTERTAIN), - list(MED_I_FREQ, "Medical (I)", COMMS_COLOR_MEDICAL_I), - list(SEC_I_FREQ, "Security (I)", COMMS_COLOR_SECURITY_I), - list(HAIL_FREQ, "Hailing", COMMS_COLOR_HAILING) - ) - autolinkers = list("common") - -// "Unused" channels, AKA all others. -/obj/machinery/telecomms/server/presets/common/New() - for(var/i = PUBLIC_LOW_FREQ, i < PUBLIC_HIGH_FREQ, i += 2) - if(i == AI_FREQ || i == PUB_FREQ || i == MED_I_FREQ || i == SEC_I_FREQ || i == HAIL_FREQ) - continue - freq_listening |= i - ..() - -/obj/machinery/telecomms/server/presets/command - id = "Command Server" - freq_listening = list(COMM_FREQ) - channel_tags = list(list(COMM_FREQ, "Command", COMMS_COLOR_COMMAND)) - autolinkers = list("command") - -/obj/machinery/telecomms/server/presets/engineering - id = "Engineering Server" - freq_listening = list(ENG_FREQ) - channel_tags = list(list(ENG_FREQ, "Engineering", COMMS_COLOR_ENGINEER)) - autolinkers = list("engineering") - -/obj/machinery/telecomms/server/presets/security - id = "Security Server" - freq_listening = list(SEC_FREQ) - channel_tags = list(list(SEC_FREQ, "Security", COMMS_COLOR_SECURITY)) - autolinkers = list("security") - -/obj/machinery/telecomms/server/presets/centcomm - id = "CentComm Server" - freq_listening = list(ERT_FREQ, DTH_FREQ) - channel_tags = list(list(ERT_FREQ, "Response Team", COMMS_COLOR_CENTCOMM), list(DTH_FREQ, "Special Ops", COMMS_COLOR_SYNDICATE)) - produces_heat = 0 - autolinkers = list("centcomm") - - -//Broadcasters - -//--PRESET LEFT--// - -/obj/machinery/telecomms/broadcaster/map_preset - var/preset_name - -/obj/machinery/telecomms/broadcaster/map_preset/Initialize() - if (preset_name) - var/name_lower = replacetext_char(lowertext(preset_name), " ", "_") - id = "[preset_name] Broadcaster" - network = "tcomm_[name_lower]" - autolinkers = list( - "[name_lower]_broadcaster" - ) - . = ..() - -/obj/machinery/telecomms/broadcaster/preset_right - id = "Broadcaster A" - network = "tcommsat" - autolinkers = list("broadcasterA") - -/obj/machinery/telecomms/broadcaster/preset_cent - id = "CentComm Broadcaster" - network = "tcommsat" - produces_heat = 0 - autolinkers = list("broadcasterCent") diff --git a/code/game/machinery/telecomms/telecomunications.dm b/code/game/machinery/telecomms/telecomunications.dm deleted file mode 100644 index cf27be1b48dc2..0000000000000 --- a/code/game/machinery/telecomms/telecomunications.dm +++ /dev/null @@ -1,589 +0,0 @@ -//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:32 - -/* - Hello, friends, this is Doohl from sexylands. You may be wondering what this - monstrous code file is. Sit down, boys and girls, while I tell you the tale. - - - The machines defined in this file were designed to be compatible with any radio - signals, provided they use subspace transmission. Currently they are only used for - headsets, but they can eventually be outfitted for real COMPUTER networks. This - is just a skeleton, ladies and gentlemen. - - Look at radio.dm for the prequel to this code. -*/ - -var/global/list/obj/machinery/telecomms/telecomms_list = list() - -/obj/machinery/telecomms - var/list/links = list() // list of machines this machine is linked to - var/traffic = 0 // value increases as traffic increases - var/netspeed = 5 // how much traffic to lose per tick (50 gigabytes/second * netspeed) - var/list/autolinkers = list() // list of text/number values to link with - var/id = "NULL" // identification string - var/network = "NULL" // the network of the machinery - - var/list/freq_listening = list() // list of frequencies to tune into: if none, will listen to all - var/list/channel_tags = list() // a list specifying what to tag packets on different frequencies - - var/machinetype = 0 // just a hacky way of preventing alike machines from pairing - var/toggled = 1 // Is it toggled on - var/on = 1 - var/integrity = 100 // basically HP, loses integrity by heat - var/produces_heat = 1 //whether the machine will produce heat when on. - var/delay = 10 // how many process() ticks to delay per heat - var/long_range_link = 0 // Can you link it across Z levels or on the otherside of the map? (Relay & Hub) - var/circuitboard = null // string pointing to a circuitboard type - var/hide = 0 // Is it a hidden machine? - var/listening_levels = null // null = auto set in Initialize() - these are the z levels that the machine is listening to. - var/overloaded_for = 0 - var/outage_probability = 75 // Probability of failing during a ionospheric storm - - -/obj/machinery/telecomms/proc/relay_information(datum/signal/signal, filter, copysig, amount = 20) - // relay signal to all linked machinery that are of type [filter]. If signal has been sent [amount] times, stop sending - - if(!on || overloaded_for) - return -// log_debug("[src] ([src.id]) - [signal.debug_print()]") - - var/send_count = 0 - - signal.data["slow"] += rand(0, round((100-integrity))) // apply some lag based on integrity - - /* - // Edit by Atlantis: Commented out as emergency fix due to causing extreme delays in communications. - // Apply some lag based on traffic rates - var/netlag = round(traffic / 50) - if(netlag > signal.data["slow"]) - signal.data["slow"] = netlag - */ -// Loop through all linked machines and send the signal or copy. - for(var/obj/machinery/telecomms/machine in links) - if(filter && !istype( machine, filter )) - continue - if(!machine.on) - continue - if(amount && send_count >= amount) - break - if(!(machine.loc.z in listening_levels)) - if(long_range_link == 0 && machine.long_range_link == 0) - continue - // If we're sending a copy, be sure to create the copy for EACH machine and paste the data - var/datum/signal/copy - if(copysig) - copy = new - copy.transmission_method = 2 - copy.frequency = signal.frequency - copy.data = signal.data.Copy() - - // Keep the "original" signal constant - if(!signal.data["original"]) - copy.data["original"] = signal - else - copy.data["original"] = signal.data["original"] - - send_count++ - if(machine.is_freq_listening(signal)) - machine.traffic++ - - if(copysig && copy) - machine.receive_information(copy, src) - else - machine.receive_information(signal, src) - - - if(send_count > 0 && is_freq_listening(signal)) - traffic++ - - return send_count - -/obj/machinery/telecomms/proc/relay_direct_information(datum/signal/signal, obj/machinery/telecomms/machine) - // send signal directly to a machine - machine.receive_information(signal, src) - -/obj/machinery/telecomms/proc/receive_information(datum/signal/signal, obj/machinery/telecomms/machine_from) - // receive information from linked machinery - -/obj/machinery/telecomms/proc/is_freq_listening(datum/signal/signal) - // return 1 if found, 0 if not found - if(!signal) - return 0 - if((signal.frequency in freq_listening) || (!freq_listening.len)) - return 1 - else - return 0 - - -/obj/machinery/telecomms/New() - telecomms_list += src - ..() - -/obj/machinery/telecomms/Initialize() - ..() - return INITIALIZE_HINT_LATELOAD - -/obj/machinery/telecomms/LateInitialize() - //Set the listening_levels if there's none. - if(!listening_levels) - //Defaults to our Z level! - var/turf/position = get_turf(src) - listening_levels = GetConnectedZlevels(position.z) - - if(autolinkers.len) - // Links nearby machines - if(!long_range_link) - for(var/obj/machinery/telecomms/T in orange(20, src)) - add_link(T) - else - for(var/obj/machinery/telecomms/T in telecomms_list) - add_link(T) - . = ..() - update_power() - -/obj/machinery/telecomms/Destroy() - telecomms_list -= src - for(var/obj/machinery/telecomms/comm in telecomms_list) - comm.links -= src - links = list() - ..() - -// Used in auto linking -/obj/machinery/telecomms/proc/add_link(var/obj/machinery/telecomms/T) - var/turf/position = get_turf(src) - var/turf/T_position = get_turf(T) - if((position.z == T_position.z) || (src.long_range_link && T.long_range_link)) - for(var/x in autolinkers) - if(T.autolinkers.Find(x)) - if(src != T) - links |= T - -/obj/machinery/telecomms/on_update_icon() - if(on && !overloaded_for) - icon_state = initial(icon_state) - else - icon_state = "[initial(icon_state)]_off" - -/obj/machinery/telecomms/Move() - . = ..() - listening_levels = GetConnectedZlevels(z) - update_power() - -/obj/machinery/telecomms/forceMove(var/newloc) - . = ..(newloc) - listening_levels = GetConnectedZlevels(z) - update_power() - -/obj/machinery/telecomms/proc/update_power() - if(toggled) - if(stat & (BROKEN|NOPOWER|EMPED) || integrity <= 0) // if powered, on. if not powered, off. if too damaged, off - on = 0 - else - on = 1 - else - on = 0 - update_use_power(on) - -/obj/machinery/telecomms/Process() - update_power() - - if(overloaded_for) - overloaded_for-- - - // Check heat and generate some - checkheat() - - // Update the icon - update_icon() - - if(traffic > 0) - traffic -= netspeed - -/obj/machinery/telecomms/emp_act(severity) - if(prob(100/severity)) - overloaded_for = max(round(150 / severity), overloaded_for) - ..() - -/obj/machinery/telecomms/proc/checkheat() - // Checks heat from the environment and applies any integrity damage - var/datum/gas_mixture/environment = loc.return_air() - var/damage_chance = 0 // Percent based chance of applying 1 integrity damage this tick - switch(environment.temperature) - if((T0C + 40) to (T0C + 70)) // 40C-70C, minor overheat, 10% chance of taking damage - damage_chance = 10 - if((T0C + 70) to (T0C + 130)) // 70C-130C, major overheat, 25% chance of taking damage - damage_chance = 25 - if((T0C + 130) to (T0C + 200)) // 130C-200C, dangerous overheat, 50% chance of taking damage - damage_chance = 50 - if((T0C + 200) to INFINITY) // More than 200C, INFERNO. Takes damage every tick. - damage_chance = 100 - if (damage_chance && prob(damage_chance)) - integrity = clamp(integrity - 1, 0, 100) - - - if(delay > 0) - delay-- - else if(on) - produce_heat() - delay = initial(delay) - - - -/obj/machinery/telecomms/proc/produce_heat() - if (!produces_heat) - return - - if (!use_power) - return - - if(!(stat & (NOPOWER|BROKEN))) - var/turf/simulated/L = loc - if(istype(L)) - var/datum/gas_mixture/env = L.return_air() - - var/transfer_moles = 0.25 * env.total_moles - - var/datum/gas_mixture/removed = env.remove(transfer_moles) - - if(removed) - - var/heat_produced = idle_power_usage //obviously can't produce more heat than the machine draws from it's power source - if (traffic <= 0) - heat_produced *= 0.30 //if idle, produce less heat. - - removed.add_thermal_energy(heat_produced) - - env.merge(removed) -/* - The receiver idles and receives messages from subspace-compatible radio equipment; - primarily headsets. They then just relay this information to all linked devices, - which can would probably be network hubs. - - Link to Processor Units in case receiver can't send to bus units. -*/ - -/obj/machinery/telecomms/receiver - name = "Subspace Receiver" - icon = 'icons/obj/stationobjs.dmi' - icon_state = "broadcast receiver" - desc = "This machine has a dish-like shape and green lights. It is designed to detect and process subspace radio activity." - density = TRUE - anchored = TRUE - idle_power_usage = 600 - machinetype = 1 - produces_heat = 0 - circuitboard = /obj/item/stock_parts/circuitboard/telecomms/receiver - base_type = /obj/machinery/telecomms/receiver - outage_probability = 10 - machine_name = "subspace receiver" - machine_desc = "Receives messages from connected radio devices and passes them to a linked hub. Part of a telecommunications network." - -/obj/machinery/telecomms/receiver/receive_signal(datum/signal/signal) - - if(!on) // has to be on to receive messages - return - if(!signal) - return - if(!check_receive_level(signal)) - return - - if(signal.transmission_method == 2) - - if(is_freq_listening(signal)) // detect subspace signals - - //Remove the level and then start adding levels that it is being broadcasted in. - signal.data["level"] = list() - - var/can_send = relay_information(signal, /obj/machinery/telecomms/hub) // ideally relay the copied information to relays - if(!can_send) - relay_information(signal, /obj/machinery/telecomms/bus) // Send it to a bus instead, if it's linked to one - -/obj/machinery/telecomms/receiver/proc/check_receive_level(datum/signal/signal) - - if(!(signal.data["level"] in listening_levels)) - return 0 - return 1 - - -/* - The HUB idles until it receives information. It then passes on that information - depending on where it came from. - - This is the heart of the Telecommunications Network, sending information where it - is needed. It mainly receives information from long-distance Relays and then sends - that information to be processed. Afterwards it gets the uncompressed information - from Servers/Buses and sends that back to the relay, to then be broadcasted. -*/ - -/obj/machinery/telecomms/hub - name = "Telecommunication Hub" - icon = 'icons/obj/stationobjs.dmi' - icon_state = "hub" - desc = "A mighty piece of hardware used to send/receive massive amounts of data." - density = TRUE - anchored = TRUE - idle_power_usage = 1600 - machinetype = 7 - circuitboard = /obj/item/stock_parts/circuitboard/telecomms/hub - base_type = /obj/machinery/telecomms/hub - long_range_link = 1 - netspeed = 40 - outage_probability = 10 - machine_name = "telecommunication hub" - machine_desc = "A massive server, used to route huge quantities of information very quickly. The heart of a telecommunications network." - -/obj/machinery/telecomms/hub/receive_information(datum/signal/signal, obj/machinery/telecomms/machine_from) - if(is_freq_listening(signal)) - if(istype(machine_from, /obj/machinery/telecomms/receiver)) - //If the signal is compressed, send it to the bus. - relay_information(signal, /obj/machinery/telecomms/bus, 1) // ideally relay the copied information to bus units - else - relay_information(signal, /obj/machinery/telecomms/broadcaster, 1) // Send it to a broadcaster. - -/* - The bus mainframe idles and waits for hubs to relay them signals. They act - as junctions for the network. - - They transfer uncompressed subspace packets to processor units, and then take - the processed packet to a server for logging. - - Link to a subspace hub if it can't send to a server. -*/ - -/obj/machinery/telecomms/bus - name = "Bus Mainframe" - icon = 'icons/obj/stationobjs.dmi' - icon_state = "bus" - desc = "A mighty piece of hardware used to send massive amounts of data quickly." - density = TRUE - anchored = TRUE - idle_power_usage = 1000 - machinetype = 2 - circuitboard = /obj/item/stock_parts/circuitboard/telecomms/bus - base_type = /obj/machinery/telecomms/bus - netspeed = 40 - machine_name = "bus mainframe" - machine_desc = "Serves as a relay, transferring messages from place to place depending on configuration. Part of a telecommunications network." - var/change_frequency = 0 - -/obj/machinery/telecomms/bus/receive_information(datum/signal/signal, obj/machinery/telecomms/machine_from) - - if(is_freq_listening(signal)) - - if(change_frequency) - 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 - // send to one linked processor unit - var/send_to_processor = relay_information(signal, /obj/machinery/telecomms/processor) - - if(send_to_processor) - return - // failed to send to a processor, relay information anyway - signal.data["slow"] += rand(1, 5) // slow the signal down only slightly - src.receive_information(signal, src) - - // Try sending it! - var/list/try_send = list(/obj/machinery/telecomms/server, /obj/machinery/telecomms/hub, /obj/machinery/telecomms/broadcaster, /obj/machinery/telecomms/bus) - var/i = 0 - for(var/send in try_send) - if(i) - signal.data["slow"] += rand(0, 1) // slow the signal down only slightly - i++ - var/can_send = relay_information(signal, send) - if(can_send) - break - - - -/* - The processor is a very simple machine that decompresses subspace signals and - transfers them back to the original bus. It is essential in producing audible - data. - - Link to servers if bus is not present -*/ - -/obj/machinery/telecomms/processor - name = "Processor Unit" - icon = 'icons/obj/stationobjs.dmi' - icon_state = "processor" - desc = "This machine is used to process large quantities of information." - density = TRUE - anchored = TRUE - idle_power_usage = 600 - machinetype = 3 - delay = 5 - circuitboard = /obj/item/stock_parts/circuitboard/telecomms/processor - base_type = /obj/machinery/telecomms/processor - machine_name = "processor unit" - machine_desc = "Decompresses subspace signals into understandable sounds. Networks don't need processors, but it's very hard to understand communications without them. Part of a telecommunications network." - var/process_mode = 1 // 1 = Uncompress Signals, 0 = Compress Signals - -/obj/machinery/telecomms/processor/receive_information(datum/signal/signal, obj/machinery/telecomms/machine_from) - if(!is_freq_listening(signal)) - return - - if(process_mode) - signal.data["compression"] = 0 // uncompress subspace signal - else - signal.data["compression"] = 100 // even more compressed signal - - if(istype(machine_from, /obj/machinery/telecomms/bus)) - relay_direct_information(signal, machine_from) // send the signal back to the machine - else // no bus detected - send the signal to servers instead - signal.data["slow"] += rand(5, 10) // slow the signal down - relay_information(signal, /obj/machinery/telecomms/server) - - -/* - The server logs all traffic and signal data. Once it records the signal, it sends - it to the subspace broadcaster. - - Store a maximum of 100 logs and then deletes them. -*/ - - -/obj/machinery/telecomms/server - name = "Telecommunication Server" - icon = 'icons/obj/stationobjs.dmi' - icon_state = "comm_server" - desc = "A machine used to store data and network statistics." - density = TRUE - anchored = TRUE - idle_power_usage = 300 - machinetype = 4 - circuitboard = /obj/item/stock_parts/circuitboard/telecomms/server - base_type = /obj/machinery/telecomms/server - machine_name = "telecommunications server" - machine_desc = "Used to store logs from subspace communications after processing, then sends them to a broadcaster. Part of a telecommunications network." - var/list/log_entries = list() - var/list/stored_names = list() - var/list/TrafficActions = list() - var/logs = 0 // number of logs - var/totaltraffic = 0 // gigabytes (if > 1024, divide by 1024 -> terrabytes) - - var/list/memory = list() // stored memory - var/encryption = "null" // encryption key: ie "password" - var/salt = "null" // encryption salt: ie "123comsat" - // would add up to md5("password123comsat") - var/language = "human" - var/obj/item/device/radio/headset/server_radio = null - -/obj/machinery/telecomms/server/New() - ..() - server_radio = new() - -/obj/machinery/telecomms/server/receive_information(datum/signal/signal, obj/machinery/telecomms/machine_from) - - if(signal.data["message"]) - - if(is_freq_listening(signal)) - - if(traffic > 0) - totaltraffic += traffic // add current traffic to total traffic - - // channel tag the signal - var/list/data = get_channel_info(signal.frequency) - signal.data["channel_tag"] = data[1] - signal.data["channel_color"] = data[2] - - //Is this a test signal? Bypass logging - if(signal.data["type"] != 4) - - // If signal has a message and appropriate frequency - - update_logs() - - var/datum/comm_log_entry/log = new - var/mob/M = signal.data["mob"] - - // Copy the signal.data entries we want - log.parameters["mobtype"] = signal.data["mobtype"] - log.parameters["job"] = signal.data["job"] - log.parameters["key"] = signal.data["key"] - log.parameters["vmessage"] = signal.data["message"] - log.parameters["vname"] = signal.data["vname"] - log.parameters["message"] = signal.data["message"] - log.parameters["name"] = signal.data["name"] - log.parameters["realname"] = signal.data["realname"] - log.parameters["language"] = signal.data["language"] - - var/race = "Unknown" - if(ishuman(M) || isbrain(M)) - race = "Sapient Race" - log.parameters["intelligible"] = 1 - else if(M.is_species(SPECIES_MONKEY)) - race = "Monkey" - else if(issilicon(M)) - race = "Artificial Life" - log.parameters["intelligible"] = 1 - else if(isslime(M)) - race = "Slime" - else if(isanimal(M)) - race = "Domestic Animal" - - log.parameters["race"] = race - - if(!istype(M, /mob/new_player) && M) - log.parameters["uspeech"] = M.universal_speak - else - log.parameters["uspeech"] = 0 - - // If the signal is still compressed, make the log entry gibberish - if(signal.data["compression"] > 0) - log.parameters["message"] = Gibberish(signal.data["message"], signal.data["compression"] + 50) - log.parameters["job"] = Gibberish(signal.data["job"], signal.data["compression"] + 50) - log.parameters["name"] = Gibberish(signal.data["name"], signal.data["compression"] + 50) - log.parameters["realname"] = Gibberish(signal.data["realname"], signal.data["compression"] + 50) - log.parameters["vname"] = Gibberish(signal.data["vname"], signal.data["compression"] + 50) - log.input_type = "Corrupt File" - - // Log and store everything that needs to be logged - log_entries.Add(log) - if(!(signal.data["name"] in stored_names)) - stored_names.Add(signal.data["name"]) - logs++ - signal.data["server"] = src - - // Give the log a name - var/identifier = num2text( rand(-1000,1000) + world.time ) - log.name = "data packet ([md5(identifier)])" - - var/can_send = relay_information(signal, /obj/machinery/telecomms/hub) - if(!can_send) - relay_information(signal, /obj/machinery/telecomms/broadcaster) - -/obj/machinery/telecomms/server/proc/update_logs() - // start deleting the very first log entry - if(logs >= 400) - for(var/i = 1, i <= logs, i++) // locate the first garbage collectable log entry and remove it - var/datum/comm_log_entry/L = log_entries[i] - if(L.garbage_collector) - log_entries.Remove(L) - logs-- - break - -/obj/machinery/telecomms/server/proc/add_entry(var/content, var/input) - var/datum/comm_log_entry/log = new - var/identifier = num2text( rand(-1000,1000) + world.time ) - log.name = "[input] ([md5(identifier)])" - log.input_type = input - log.parameters["message"] = content - log_entries.Add(log) - update_logs() - -/obj/machinery/telecomms/server/proc/get_channel_info(var/freq) - for(var/list/rule in channel_tags) - if(rule[1] == freq) - return list(rule[2], rule[3]) - return list(format_frequency(freq), channel_color_presets["Global Green"]) - - -// Simple log entry datum - -/datum/comm_log_entry - var/parameters = list() // carbon-copy to signal.data[] - var/name = "data packet (#)" - var/garbage_collector = 1 // if set to 0, will not be garbage collected - var/input_type = "Speech File" diff --git a/code/game/machinery/telecomms/telemonitor.dm b/code/game/machinery/telecomms/telemonitor.dm deleted file mode 100644 index a160995fdf89c..0000000000000 --- a/code/game/machinery/telecomms/telemonitor.dm +++ /dev/null @@ -1,134 +0,0 @@ -//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:32 - - -/* - Telecomms monitor tracks the overall trafficing of a telecommunications network - and displays a heirarchy of linked machines. -*/ - - -/obj/machinery/computer/telecomms/monitor - name = "Telecommunications Monitor" - icon_screen = "comm_monitor" - machine_name = "telecomms monitor console" - machine_desc = "Tracks the traffic of a telecommunications network, and maintains information about connected machines." - - var/screen = 0 // the screen number: - var/list/machinelist = list() // the machines located by the computer - var/obj/machinery/telecomms/SelectedMachine - - var/network = "NULL" // the network to probe - - var/temp = "" // temporary feedback messages - -/obj/machinery/computer/telecomms/monitor/attack_hand(mob/user as mob) - if(stat & (BROKEN|NOPOWER)) - return - user.set_machine(src) - var/list/dat = list() - dat += "Telecommunications Monitor
              Telecommunications Monitor
              " - - switch(screen) - - - // --- Main Menu --- - - if(0) - dat += "
              [temp]

              " - dat += "
              Current Network: [network]
              " - if(machinelist.len) - dat += "
              Detected Network Entities:
                " - for(var/obj/machinery/telecomms/T in machinelist) - dat += "
              • \ref[T] [T.name] ([T.id])
              • " - dat += "
              " - dat += "
              \[Flush Buffer\]" - else - dat += "\[Probe Network\]" - - - // --- Viewing Machine --- - - if(1) - dat += "
              [temp]
              " - dat += "
              \[Main Menu\]
              " - dat += "
              Current Network: [network]
              " - dat += "Selected Network Entity: [SelectedMachine.name] ([SelectedMachine.id])
              " - dat += "Linked Entities:
                " - for(var/obj/machinery/telecomms/T in SelectedMachine.links) - if(!T.hide) - dat += "
              1. \ref[T.id] [T.name] ([T.id])
              2. " - dat += "
              " - - - var/datum/browser/popup = new(user, "comm_monitor", "Telecommunications Monitor", 575, 400) - popup.set_content(JOINTEXT(dat)) - popup.open() - - temp = "" - return - - -/obj/machinery/computer/telecomms/monitor/Topic(href, href_list) - if(..()) - return - - usr.set_machine(src) - - if(href_list["viewmachine"]) - screen = 1 - for(var/obj/machinery/telecomms/T in machinelist) - if(T.id == href_list["viewmachine"]) - SelectedMachine = T - break - - if(href_list["operation"]) - switch(href_list["operation"]) - - if("release") - machinelist = list() - screen = 0 - - if("mainmenu") - screen = 0 - - if("probe") - if(machinelist.len > 0) - temp = "- FAILED: CANNOT PROBE WHEN BUFFER FULL -" - - else - for(var/obj/machinery/telecomms/T in range(25, src)) - if(T.network == network) - machinelist.Add(T) - - if(!machinelist.len) - temp = "- FAILED: UNABLE TO LOCATE NETWORK ENTITIES IN \[[network]\] -" - else - temp = "- [machinelist.len] ENTITIES LOCATED & BUFFERED -" - - screen = 0 - - - if(href_list["network"]) - - var/newnet = input(usr, "Which network do you want to view?", "Comm Monitor", network) as null|text - if(newnet && ((usr in range(1, src) || issilicon(usr)))) - if(length(newnet) > 15) - temp = "- FAILED: NETWORK TAG STRING TOO LENGHTLY -" - - else - network = newnet - screen = 0 - machinelist = list() - temp = "- NEW NETWORK TAG SET IN ADDRESS \[[network]\] -" - - updateUsrDialog() - return - -/obj/machinery/computer/telecomms/monitor/emag_act(var/remaining_charges, var/mob/user) - if(!emagged) - playsound(src.loc, 'sound/effects/sparks4.ogg', 75, 1) - emagged = TRUE - req_access.Cut() - to_chat(user, "You you disable the security protocols") - src.updateUsrDialog() - return 1 diff --git a/code/game/machinery/teleporter/beacon.dm b/code/game/machinery/teleporter/beacon.dm deleted file mode 100644 index 684bbf99ea0e0..0000000000000 --- a/code/game/machinery/teleporter/beacon.dm +++ /dev/null @@ -1,334 +0,0 @@ -var/global/const/TELEBEACON_WIRE_POWER = 1 -var/global/const/TELEBEACON_WIRE_RELAY = 2 -var/global/const/TELEBEACON_WIRE_SIGNALLER = 4 - - -// Targetable beacon used by teleporters -/obj/machinery/tele_beacon - name = "teleporter beacon" - desc = "A beacon used by a teleporter." - icon = 'icons/obj/teleporter.dmi' - icon_state = "beacon" - idle_power_usage = 10 - active_power_usage = 50 - anchored = TRUE - level = 1 - - machine_name = "teleporter beacon" - machine_desc = "Teleporter beacons allow teleporter systems to target them, for accurate, instantaneous transport of objects and people." - base_type = /obj/machinery/tele_beacon - wires = /datum/wires/tele_beacon - construct_state = /decl/machine_construction/default/panel_closed - - /// Name of the beacon in the teleporter UI. - var/beacon_name - /// Autoset the beacon_name to the beacon's current area. - var/autoset_name = TRUE - /// Whether or not power has been cut via wiring. - var/power_cut = FALSE - - /// Lazy list of connected computers. - var/list/obj/machinery/computer/teleporter/connected_computers - - -/obj/machinery/tele_beacon/Initialize() - . = ..() - generate_name() - var/turf/T = get_turf(src) - hide(hides_under_flooring() && !T.is_plating()) - update_use_power(POWER_USE_IDLE) - - -/obj/machinery/tele_beacon/Destroy() - disconnect_computers() - . = ..() - - -/obj/machinery/tele_beacon/attackby(obj/item/I, mob/user) - if (!panel_open) - if (isWrench(I)) - var/turf/T = get_turf(src) - if (is_space_turf(T) || istype(T, /turf/simulated/open)) - to_chat(user, SPAN_WARNING("You cannot anchor \the [src] to \the [T]. It requires solid plating.")) - return FALSE - if (!T.is_plating()) - to_chat(user, SPAN_WARNING("You cannot anchor \the [src] to \the [T]. You must connect it to the underplating.")) - return FALSE - - user.visible_message( - SPAN_NOTICE("\The [user] starts to [anchored ? "disconnect" : "connect"] \the [src] [anchored ? "to" : "from"] \the [T]."), - SPAN_NOTICE("You start to [anchored ? "disconnect" : "connect"] \the [src] [anchored ? "to" : "from"] \the [T].") - ) - - if (!do_after(user, 3 SECONDS, src, DO_PUBLIC_UNIQUE)) - return TRUE - - anchored = !anchored - level = anchored ? 1 : 2 - user.visible_message( - SPAN_NOTICE("\The [user] [anchored ? "connects" : "disconnects"] \the [src] [anchored ? "to" : "from"] \the [T] with \the [I]."), - SPAN_NOTICE("You [anchored ? "connect" : "disconnect"] \the [src] [anchored ? "to" : "from"] \the [T] with \the [I].") - ) - playsound(loc, 'sound/items/Ratchet.ogg', 75, 1) - update_icon() - update_use_power(anchored ? POWER_USE_IDLE : POWER_USE_OFF) - if (!anchored) - disconnect_computers() - else - generate_name() - - return TRUE - - if (isMultitool(I)) - var/new_name = input(user, "What label would you like to set this beacon to? Leave empty to enable automatic naming based on area.", "Set Beacon Label", beacon_name) as text|null - if (QDELETED(src)) - return TRUE - if (new_name == null) - autoset_name = TRUE - generate_name() - user.visible_message( - SPAN_NOTICE("\The [user] reconfigures \the [src] with \the [I]."), - SPAN_NOTICE("You enable \the [src]'s automatic labeling with \the [I].") - ) - else - beacon_name = new_name - autoset_name = FALSE - user.visible_message( - SPAN_NOTICE("\The [user] reconfigures \the [src] with \the [I]."), - SPAN_NOTICE("You reconfigure \the [src]'s relay label to \"[beacon_name]\" with \the [I].") - ) - return TRUE - - . = ..() - - -/obj/machinery/tele_beacon/emp_act(severity) - ..() - - if (use_power && !stat) - stat |= EMPED - disconnect_computers() - var/emp_time = rand(15 SECONDS, 30 SECONDS) / severity - addtimer(CALLBACK(src, .proc/emp_act_end), emp_time, TIMER_UNIQUE | TIMER_OVERRIDE) - - -/obj/machinery/tele_beacon/proc/emp_act_end() - stat &= ~EMPED - update_icon() - - -/obj/machinery/tele_beacon/examine(mob/user) - . = ..() - - if (!anchored) - to_chat(user, SPAN_WARNING("It is disconnected from \the [get_turf(src)].")) - return - - if (!functioning()) - if (user.skill_check(SKILL_DEVICES, SKILL_BASIC)) - to_chat(user, SPAN_WARNING("It appears to be offline or disabled.")) - return - - if (user.skill_check(SKILL_DEVICES, SKILL_ADEPT)) - if (wires.IsIndexCut(TELEBEACON_WIRE_SIGNALLER)) - to_chat(user, SPAN_WARNING("The signal lights appear to be disabled.")) - else if (LAZYLEN(connected_computers)) - to_chat(user, SPAN_WARNING("The signal lights indicate it has an active teleporter connection.")) - - -/obj/machinery/tele_beacon/power_change() - . = ..() - if (!.) - return - - if (!is_powered()) - disconnect_computers() - - -/obj/machinery/tele_beacon/is_powered(additional_flags) - . = ..() - if (!.) - return - if (power_cut || wires.IsIndexCut(TELEBEACON_WIRE_POWER)) - return FALSE - - -/obj/machinery/tele_beacon/on_update_icon() - . = ..() - - icon_state = initial(icon_state) - - if (panel_open) - icon_state += "_open" - else if (functioning()) - if (wires.IsIndexCut(TELEBEACON_WIRE_RELAY) || wires.IsIndexCut(TELEBEACON_WIRE_SIGNALLER)) - icon_state += "_offline" - else if (LAZYLEN(connected_computers)) - icon_state += "_locked" - else - icon_state += "_unpowered" - - -/obj/machinery/tele_beacon/get_mechanics_info() - . = ..() - . += "

              \The [src] can be targeted by teleporter control consoles to allow teleporter pads to send mobs and objects to this [src]'s location. \ - It can only be targeted and used while \the [src] is powered and anchored (wrenched) to the floor.

              \ -

              While the panel is closed:

              \ -
                \ -
              • Use a Wrench to anchor/unanchor the beacon, allowing it to be moved. The beacon is not functional unless anchored.
              • \ -
              • Use a Multitool to rename the beacon. The name will be displayed in teleport control consoles.
              • \ -
              " - - -/obj/machinery/tele_beacon/get_antag_info() - . = ..() - . += "

              If EMP'd, \the [src] will lose all established teleporter locks and will be disabled for up to 30 seconds.

              " - - -/// Connects the beacon to a computer that's locking onto it. Returns TRUE on connection, FALSE if the connection fails. -/obj/machinery/tele_beacon/proc/connect_computer(obj/machinery/computer/teleporter/computer) - if (wires.IsIndexCut(TELEBEACON_WIRE_RELAY)) - return FALSE - - LAZYDISTINCTADD(connected_computers, computer) - notify_connection() - update_icon() - update_use_power(POWER_USE_ACTIVE) - return TRUE - - -/// Plays the 'new connection' beep. -/obj/machinery/tele_beacon/proc/notify_connection() - if (wires.IsIndexCut(TELEBEACON_WIRE_SIGNALLER)) - return - audible_message(SPAN_NOTICE("\The [src] beeps as a new teleporter links to it.")) - playsound(loc, 'sound/machines/twobeep.ogg', 75, 1) - - -/// Disconnects a single hub from the beacon. -/obj/machinery/tele_beacon/proc/disconnect_computer(obj/machinery/computer/teleporter/computer) - if (!LAZYISIN(connected_computers, computer)) - return - - LAZYREMOVE(connected_computers, computer) - if (computer.target == src) - computer.lost_target() - update_icon() - if (!LAZYLEN(connected_computers)) - update_use_power(POWER_USE_IDLE) - - -/// Disconnects all hubs from the beacon. -/obj/machinery/tele_beacon/proc/disconnect_computers() - if (!LAZYLEN(connected_computers)) - return - - for (var/obj/machinery/computer/teleporter/computer in connected_computers) - if (computer.target == src) - computer.lost_target() - - LAZYCLEARLIST(connected_computers) - update_icon() - update_use_power(POWER_USE_IDLE) - - -/// Whether or not the beacon is functional and valid for the purposes of teleporter targeting. -/obj/machinery/tele_beacon/proc/functioning() - . = TRUE - - if (!anchored) - return FALSE - - if (inoperable(EMPED)) - return FALSE - - var/turf/T = get_turf(src) - if (!T || !istype(T)) - return FALSE - - -/// Auto generates the beacon_name based on the area's name. -/obj/machinery/tele_beacon/proc/generate_name(force = FALSE) - if (force || autoset_name) - var/area/A = get_area(src) - if (istype(A)) - beacon_name = A.name - else - log_debug("\A [src] ([src.type]) attempted to generate a name but the area [A] ([A.type]) is invalid. LOC [x], [y], [z] ([loc]).") - beacon_name = "INVALID AREA" - - -/// Updates the state of power to handle the power wire being messed with. -/obj/machinery/tele_beacon/proc/set_power_cut(new_power_cut = TRUE) - if (power_cut == new_power_cut) - return - power_cut = new_power_cut - if (power_cut) - disconnect_computers() - update_use_power(POWER_USE_OFF) - - -/datum/wires/tele_beacon - holder_type = /obj/machinery/tele_beacon - random = TRUE - wire_count = 3 - window_y = 500 - descriptions = list( - new /datum/wire_description(TELEBEACON_WIRE_POWER, "This wire is connected to the power supply unit.", SKILL_EXPERT), - new /datum/wire_description(TELEBEACON_WIRE_RELAY, "This wire is connected to the remote relay device.", SKILL_PROF), - new /datum/wire_description(TELEBEACON_WIRE_SIGNALLER, "This wire is connected to a speaker and several indicator lights.", SKILL_EXPERT) - ) - - -/datum/wires/tele_beacon/CanUse(mob/living/L) - var/obj/machinery/tele_beacon/tele_beacon = holder - if (!tele_beacon.panel_open || !tele_beacon.anchored) - return FALSE - return TRUE - - -/datum/wires/tele_beacon/GetInteractWindow(mob/user) - var/obj/machinery/tele_beacon/tele_beacon = holder - . = ..() - . += "
                " - if (!tele_beacon.functioning()) - . += "
              • The panel seems to be completely unpowered or disabled.
              • " - else - . += "
              • The panel is powered.
              • " - if (user.skill_check(SKILL_ELECTRICAL, SKILL_ADEPT)) - . += "
              • The remote relay chip is [IsIndexCut(TELEBEACON_WIRE_RELAY) ? "disconnected" : "connected"].
              • " - . += "
              • The connection signaller circuitry is [IsIndexCut(TELEBEACON_WIRE_SIGNALLER) ? "disconnected" : "connected"].
              • " - else - . += "
              • There are lights and wires here, but you don't know how the wiring works.
              • " - . += "
              " - - -/datum/wires/tele_beacon/UpdateCut(index, mended) - var/obj/machinery/tele_beacon/tele_beacon = holder - switch (index) - // TELEBEACON_WIRE_SIGNALLER - Enable (mended) or disable (cut) the 'connected computer' beep. Handled in `connect_computer()` - if (TELEBEACON_WIRE_POWER) // Enable (mended) or disable (cut) power. Has a shock risk. - tele_beacon.set_power_cut(!mended) - tele_beacon.shock(usr, 50) - if (TELEBEACON_WIRE_RELAY) // Allow (mended) or disallow (cut) teleporter connections. Handled in `connect_computer()` - tele_beacon.disconnect_computers() - -/datum/wires/tele_beacon/UpdatePulsed(index) - var/obj/machinery/tele_beacon/tele_beacon = holder - switch (index) - if (TELEBEACON_WIRE_POWER) - tele_beacon.set_power_cut() - addtimer(CALLBACK(src, .proc/ResetPulsed), rand(15 SECONDS, 45 SECONDS), TELEBEACON_WIRE_POWER) - if (TELEBEACON_WIRE_RELAY) - tele_beacon.disconnect_computers() - if (TELEBEACON_WIRE_SIGNALLER) - tele_beacon.notify_connection() - - -/datum/wires/tele_beacon/ResetPulsed(index) - var/obj/machinery/tele_beacon/tele_beacon = holder - switch (index) - if (TELEBEACON_WIRE_POWER) - if (IsIndexCut(TELEBEACON_WIRE_POWER)) - return - tele_beacon.set_power_cut(FALSE) diff --git a/code/game/machinery/teleporter/console.dm b/code/game/machinery/teleporter/console.dm deleted file mode 100644 index 06887a85ce102..0000000000000 --- a/code/game/machinery/teleporter/console.dm +++ /dev/null @@ -1,215 +0,0 @@ -/obj/machinery/computer/teleporter - name = "Teleporter Control Console" - desc = "Used to control a linked teleportation hub and station." - icon_keyboard = "teleport_key" - icon_screen = "teleport" - machine_name = "teleporter control console" - machine_desc = "Used in teleporter systems to configure a destination for the teleportation hub." - - var/obj/machinery/tele_projector/projector - var/obj/machinery/tele_pad/pad - var/atom/target - var/active - var/id - /// The timer ID for any active online timers, for stopping the timer if the teleporter is manually shut off, or dies before the timer ends. - var/active_timer - - -/obj/machinery/computer/teleporter/Destroy() - clear_target() - if (projector) - projector.lost_computer() - clear_projector() - if (pad) - pad.lost_computer() - clear_pad() - . = ..() - - -/obj/machinery/computer/teleporter/Initialize() - . = ..() - underlays.Cut() - underlays += image('icons/obj/stationobjs.dmi', icon_state = "telecomp-wires") - id = "[random_id(/obj/machinery/computer/teleporter, 1000, 9999)]" - update_refs() - - -/obj/machinery/computer/teleporter/proc/update_refs() - for (var/dir in GLOB.cardinal) - projector = locate() in get_step(src, dir) - if (projector) - break - if (projector) - var/pad_dir - for (var/dir in GLOB.cardinal) - pad = locate() in get_step(projector, dir) - if (pad) - pad_dir = dir - break - if (pad) - projector.set_computer(src) - projector.set_dir(pad_dir) - pad.set_computer(src) - projector.queue_icon_update() - pad.queue_icon_update() - - -/obj/machinery/computer/teleporter/proc/clear_projector() - if (!projector) - return - GLOB.destroyed_event.unregister(projector, src, /obj/machinery/computer/teleporter/proc/lost_projector) - projector = null - set_active(FALSE) - - -/obj/machinery/computer/teleporter/proc/lost_projector() - audible_message(SPAN_WARNING("\The [src] buzzes, \"Projector missing.\"")) - clear_projector() - - -/obj/machinery/computer/teleporter/proc/set_projector(obj/machinery/tele_projector/_projector) - if (projector == _projector) - return - clear_projector() - projector = _projector - GLOB.destroyed_event.register(projector, src, /obj/machinery/computer/teleporter/proc/lost_projector) - - -/obj/machinery/computer/teleporter/proc/clear_pad() - if (!pad) - return - GLOB.destroyed_event.unregister(pad, src, /obj/machinery/computer/teleporter/proc/lost_pad) - pad = null - set_active(FALSE) - - -/obj/machinery/computer/teleporter/proc/lost_pad() - audible_message(SPAN_WARNING("\The [src] buzzes, \"Pad missing.\"")) - clear_pad() - - -/obj/machinery/computer/teleporter/proc/set_pad(obj/machinery/tele_pad/_pad) - if (pad == _pad) - return - clear_pad() - pad = _pad - GLOB.destroyed_event.register(pad, src, /obj/machinery/computer/teleporter/proc/lost_pad) - - -/obj/machinery/computer/teleporter/proc/clear_target() - if (!target) - return - var/old_target = target - GLOB.destroyed_event.unregister(target, src, /obj/machinery/computer/teleporter/proc/lost_target) - target = null - if (istype(old_target, /obj/machinery/tele_beacon)) - var/obj/machinery/tele_beacon/beacon = old_target - beacon.disconnect_computer(src) - set_active(FALSE) - set_timer(TRUE) - - -/obj/machinery/computer/teleporter/proc/lost_target() - audible_message(SPAN_WARNING("\The [src] buzzes, \"Target lost.\"")) - clear_target() - - -/obj/machinery/computer/teleporter/proc/set_target(atom/_target) - if (target == _target) - return - clear_target() - if (istype(_target, /obj/machinery/tele_beacon)) - var/obj/machinery/tele_beacon/beacon = _target - if (!beacon.connect_computer(src)) - return FALSE - target = _target - GLOB.destroyed_event.register(target, src, /obj/machinery/computer/teleporter/proc/lost_target) - return TRUE - - -/obj/machinery/computer/teleporter/proc/set_active(_active, notify) - var/effective = _active && target && projector && pad - if (active == effective) - return - active = effective - set_timer(!active) - if (notify && effective) - if (active) - visible_message(SPAN_NOTICE("The teleporter sparks and hums to life.")) - else - visible_message(SPAN_WARNING("The teleporter sputters and fails.")) - if (projector) - projector.queue_icon_update() - if (pad) - pad.queue_icon_update() - - -/obj/machinery/computer/teleporter/proc/set_timer(clear = FALSE) - if (clear) - if (active_timer) - deltimer(active_timer) - active_timer = null - else - active_timer = addtimer(CALLBACK(src, .proc/clear_target), 1 MINUTE, TIMER_UNIQUE | TIMER_OVERRIDE | TIMER_STOPPABLE) - - -/obj/machinery/computer/teleporter/proc/get_targets() - var/list/ids = list() - var/list/result = list() - for (var/obj/machinery/tele_beacon/B) - if (QDELETED(B) || !B.functioning() || !isPlayerLevel(B.z)) - continue - var/area/A = get_area(B) - if (!A) - continue - result["[B.beacon_name] \[[++ids[B.beacon_name]]\]"] = B - for (var/obj/item/implant/tracking/T) - if (QDELETED(T) || !T.implanted || !ismob(T.loc)) - continue - var/mob/M = T.loc - if (M.stat == DEAD && world.time > M.timeofdeath + 15 MINUTES) - continue - if (!isPlayerLevel(M.z)) - continue - result["[M.name] \[[++ids[M.name]]\]"] = T - return result - - -/obj/machinery/computer/teleporter/power_change() - . = ..() - if (!.) - return - if (stat & NOPOWER) - clear_target() - - -/obj/machinery/computer/teleporter/interface_interact(mob/user) - if (!projector || !pad) - var/data_search = alert(user, "Projector or Pad missing. Search?", "Teleporter", "Yes", "No") - if (isnull(data_search) || !CanDefaultInteract(user)) - return TRUE - if (data_search == "Yes") - update_refs() - return TRUE - var/message = "Teleporter [!target ? "Idle" : !active ? "Locked" : "Engaged"]\n[!target ? "" : "\[[get_area(target)]\]"]" - var/btn_active = active ? "Shut Down" : target ? "Start Up" : "-" - var/btn_target = active ? "-" : "Set Target" - var/data_action = alert(user, message, "Teleporter", btn_active, "Cancel", btn_target) - if (isnull(data_action) || !CanDefaultInteract(user)) - return TRUE - switch (data_action) - if ("-", "Cancel") - return - if ("Shut Down") - set_active(FALSE, TRUE) - if ("Start Up") - set_active(TRUE, TRUE) - if ("Set Target") - var/list/targets = get_targets() - var/data_target = input(user, "Select Target", "Teleporter") in null | targets - if (isnull(data_target) || !CanDefaultInteract(user)) - return TRUE - if (set_target(targets[data_target])) - audible_message(SPAN_NOTICE("\The [src] hums, \"Target updated.\"")) - else - audible_message(SPAN_WARNING("\The [src] buzzes, \"Failed to establish teleporter lock.\"")) diff --git a/code/game/machinery/teleporter/pad.dm b/code/game/machinery/teleporter/pad.dm deleted file mode 100644 index 57a641e37ed41..0000000000000 --- a/code/game/machinery/teleporter/pad.dm +++ /dev/null @@ -1,88 +0,0 @@ -/obj/machinery/tele_pad - name = "teleporter pad" - desc = "The teleporter pad handles all of the impossibly complex busywork required in instant matter transmission." - icon = 'icons/obj/teleporter.dmi' - icon_state = "pad" - density = TRUE - anchored = TRUE - idle_power_usage = 10 - active_power_usage = 2000 - light_color = "#02d1c7" - - var/obj/machinery/computer/teleporter/computer - - -/obj/machinery/tele_pad/Destroy() - if (computer) - computer.lost_pad() - clear_computer() - . = ..() - - -/obj/machinery/tele_pad/proc/clear_computer() - if (!computer) - return - GLOB.destroyed_event.unregister(computer, src, /obj/machinery/tele_pad/proc/lost_computer) - computer = null - - -/obj/machinery/tele_pad/proc/lost_computer() - clear_computer() - queue_icon_update() - - -/obj/machinery/tele_pad/proc/set_computer(obj/machinery/computer/teleporter/_computer) - if (computer == _computer) - return - clear_computer() - computer = _computer - GLOB.destroyed_event.register(computer, src, /obj/machinery/tele_pad/proc/lost_computer) - - -/obj/machinery/tele_pad/Bumped(atom/movable/AM) - if (!computer?.active) - return - var/turf/T = get_turf(computer.target) - if (!T) - return - use_power_oneoff(5000) - if (istype(computer.target, /obj/machinery/tele_beacon)) - var/obj/machinery/tele_beacon = computer.target - tele_beacon.use_power_oneoff(1 KILOWATTS) - do_teleport(AM, T) - computer.set_timer() - - -/obj/machinery/tele_pad/attack_ghost(mob/user) - if (!computer?.active) - return - var/turf/T = get_turf(computer.target) - if (!T) - return - user.forceMove(T) - - -/obj/machinery/tele_pad/power_change() - . = ..() - if (!.) - return - queue_icon_update() - - -/obj/machinery/tele_pad/on_update_icon() - overlays.Cut() - if (computer?.active) - update_use_power(POWER_USE_ACTIVE) - var/image/I = image(icon, src, "[initial(icon_state)]_active_overlay") - I.plane = EFFECTS_ABOVE_LIGHTING_PLANE - I.layer = ABOVE_LIGHTING_LAYER - overlays += I - set_light(0.4, 1.2, 4, 10) - else - set_light(0) - update_use_power(POWER_USE_IDLE) - if (operable()) - var/image/I = image(icon, src, "[initial(icon_state)]_idle_overlay") - I.plane = EFFECTS_ABOVE_LIGHTING_PLANE - I.layer = ABOVE_LIGHTING_LAYER - overlays += I diff --git a/code/game/machinery/teleporter/projector.dm b/code/game/machinery/teleporter/projector.dm deleted file mode 100644 index e9c762cd54c40..0000000000000 --- a/code/game/machinery/teleporter/projector.dm +++ /dev/null @@ -1,62 +0,0 @@ -/obj/machinery/tele_projector - name = "projector" - desc = "This machine is capable of projecting a miniature wormhole leading directly to its provided target." - icon = 'icons/obj/teleporter.dmi' - icon_state = "station" - density = TRUE - anchored = TRUE - idle_power_usage = 10 - active_power_usage = 2000 - - var/obj/machinery/computer/teleporter/computer - - -/obj/machinery/tele_projector/Destroy() - if (computer) - computer.lost_projector() - clear_computer() - . = ..() - - -/obj/machinery/tele_projector/proc/clear_computer() - if (!computer) - return - GLOB.destroyed_event.unregister(computer, src, /obj/machinery/tele_projector/proc/lost_computer) - computer = null - - -/obj/machinery/tele_projector/proc/lost_computer() - clear_computer() - queue_icon_update() - - -/obj/machinery/tele_projector/proc/set_computer(obj/machinery/computer/teleporter/_computer) - if (computer == _computer) - return - clear_computer() - computer = _computer - GLOB.destroyed_event.register(computer, src, /obj/machinery/tele_projector/proc/lost_computer) - - -/obj/machinery/tele_projector/power_change() - . = ..() - if (!.) - return - queue_icon_update() - - -/obj/machinery/tele_projector/on_update_icon() - overlays.Cut() - if (computer?.active) - update_use_power(POWER_USE_ACTIVE) - var/image/I = image(icon, src, "[initial(icon_state)]_active_overlay") - I.plane = EFFECTS_ABOVE_LIGHTING_PLANE - I.layer = ABOVE_LIGHTING_LAYER - overlays += I - else - update_use_power(POWER_USE_IDLE) - if (operable()) - var/image/I = image(icon, src, "[initial(icon_state)]_idle_overlay") - I.plane = EFFECTS_ABOVE_LIGHTING_PLANE - I.layer = ABOVE_LIGHTING_LAYER - overlays += I diff --git a/code/game/machinery/turret_control.dm b/code/game/machinery/turret_control.dm deleted file mode 100644 index 04d2a28dd567f..0000000000000 --- a/code/game/machinery/turret_control.dm +++ /dev/null @@ -1,241 +0,0 @@ -//////////////////////// -//Turret Control Panel// -//////////////////////// - -/// List (`/obj/machinery/turretid`). A list of all turret control panels in the area. Turrets use this list to see if individual power/lethal settings are allowed. Updated during `Initialize()` and `Destroy()` calls on the controllers. -/area/var/list/turret_controls = list() - -/obj/machinery/turretid - name = "turret control panel" - desc = "Used to control a room's automated defenses." - icon = 'icons/obj/machines/turret_control.dmi' - icon_state = "control_standby" - anchored = TRUE - density = FALSE - var/enabled = 0 - var/lethal = 0 - var/locked = 1 - var/area/control_area //can be area name, path or nothing. - var/mob/living/silicon/ai/master_ai - - var/check_arrest = 1 //checks if the perp is set to arrest - var/check_records = 1 //checks if a security record exists at all - var/check_weapons = 0 //checks if it can shoot people that have a weapon they aren't authorized to have - var/check_access = 1 //if this is active, the turret shoots everything that does not meet the access requirements - var/check_anomalies = 1 //checks if it can shoot at unidentified lifeforms - var/check_synth = 0 //if active, will shoot at anything not an AI or cyborg - var/ailock = 0 //Silicons cannot use this - - req_access = list(access_ai_upload) - -/obj/machinery/turretid/stun - enabled = 1 - icon_state = "control_stun" - -/obj/machinery/turretid/lethal - enabled = 1 - lethal = 1 - icon_state = "control_kill" - -/obj/machinery/turretid/Destroy() - if(control_area) - var/area/A = control_area - if(A && istype(A)) - A.turret_controls -= src - . = ..() - -/obj/machinery/turretid/Initialize() - if(!control_area) - control_area = get_area(src) - else if(istext(control_area)) - for(var/area/A in world) - if(A.name && A.name==control_area) - control_area = A - break - - if(control_area) - var/area/A = control_area - if(istype(A)) - A.turret_controls += src - else - control_area = null - - updateTurrets() //Initial settings - . = ..() - -/obj/machinery/turretid/proc/isLocked(mob/user) - if(ailock && issilicon(user)) - to_chat(user, "There seems to be a firewall preventing you from accessing this device.") - return 1 - - if(malf_upgraded && master_ai) - if((user == master_ai) || (user in master_ai.connected_robots)) - return 0 - return 1 - - if(locked && !issilicon(user)) - to_chat(user, "Access denied.") - return 1 - - return 0 - -/obj/machinery/turretid/CanUseTopic(mob/user) - if(isLocked(user)) - return STATUS_CLOSE - - return ..() - -/obj/machinery/turretid/attackby(obj/item/W, mob/user) - if(stat & BROKEN) - return - - if(istype(W, /obj/item/card/id)||istype(W, /obj/item/modular_computer)) - if(src.allowed(usr)) - if(emagged) - to_chat(user, "The turret control is unresponsive.") - else - locked = !locked - to_chat(user, "You [ locked ? "lock" : "unlock"] the panel.") - return - return ..() - -/obj/machinery/turretid/emag_act(var/remaining_charges, var/mob/user) - if(!emagged) - to_chat(user, "You short out the turret controls' access analysis module.") - emagged = TRUE - req_access.Cut() - locked = 0 - ailock = 0 - return 1 - -/obj/machinery/turretid/interface_interact(mob/user) - ui_interact(user) - return TRUE - -/obj/machinery/turretid/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1) - var/data[0] - data["access"] = !isLocked(user) - data["locked"] = locked - data["enabled"] = enabled - data["is_lethal"] = 1 - data["lethal"] = lethal - - if(data["access"]) - var/settings[0] - settings[++settings.len] = list("category" = "Neutralize All Non-Synthetics", "setting" = "check_synth", "value" = check_synth) - settings[++settings.len] = list("category" = "Check Weapon Authorization", "setting" = "check_weapons", "value" = check_weapons) - settings[++settings.len] = list("category" = "Check Security Records", "setting" = "check_records", "value" = check_records) - settings[++settings.len] = list("category" = "Check Arrest Status", "setting" = "check_arrest", "value" = check_arrest) - settings[++settings.len] = list("category" = "Check Access Authorization", "setting" = "check_access", "value" = check_access) - settings[++settings.len] = list("category" = "Check misc. Lifeforms", "setting" = "check_anomalies", "value" = check_anomalies) - data["settings"] = settings - - ui = SSnano.try_update_ui(user, src, ui_key, ui, data, force_open) - if (!ui) - ui = new(user, src, ui_key, "turret_control.tmpl", "Turret Controls", 500, 300) - ui.set_initial_data(data) - ui.open() - ui.set_auto_update(1) - -/obj/machinery/turretid/Topic(href, href_list) - if(..()) - return 1 - - - if(href_list["command"] && href_list["value"]) - var/log_action = null - - var/list/toggle = list("disabled","enabled") - - var/value = text2num(href_list["value"]) - if(href_list["command"] == "enable") - enabled = value - log_action = "[toggle[enabled+1]] the turrets" - else if(href_list["command"] == "lethal") - lethal = value - log_action = "[toggle[lethal+1]] the turrets lethal mode." - else if(href_list["command"] == "check_synth") - check_synth = value - else if(href_list["command"] == "check_weapons") - check_weapons = value - else if(href_list["command"] == "check_records") - check_records = value - else if(href_list["command"] == "check_arrest") - check_arrest = value - else if(href_list["command"] == "check_access") - check_access = value - else if(href_list["command"] == "check_anomalies") - check_anomalies = value - - if(!isnull(log_action)) - log_and_message_admins("has [log_action]", usr, loc) - - updateTurrets() - return 1 - -/obj/machinery/turretid/proc/updateTurrets() - var/datum/turret_checks/TC = new - TC.enabled = enabled - TC.lethal = lethal - TC.check_synth = check_synth - TC.check_access = check_access - TC.check_records = check_records - TC.check_arrest = check_arrest - TC.check_weapons = check_weapons - TC.check_anomalies = check_anomalies - TC.ailock = ailock - - if(istype(control_area)) - for (var/obj/machinery/porta_turret/aTurret in control_area) - aTurret.setState(TC) - - queue_icon_update() - -/obj/machinery/turretid/on_update_icon() - ..() - if(stat & NOPOWER) - icon_state = "control_off" - set_light(0) - else if (enabled) - if (lethal) - icon_state = "control_kill" - set_light(1, 0.5, 2, 2, "#990000") - else - icon_state = "control_stun" - set_light(1, 0.5, 2, 2, "#ff9900") - else - icon_state = "control_standby" - set_light(1, 0.5, 2, 2, "#003300") - -/obj/machinery/turretid/emp_act(severity) - if(enabled) - //if the turret is on, the EMP no matter how severe disables the turret for a while - //and scrambles its settings, with a slight chance of having an emag effect - - check_arrest = pick(0, 1) - check_records = pick(0, 1) - check_weapons = pick(0, 1) - check_access = pick(0, 0, 0, 0, 1) // check_access is a pretty big deal, so it's least likely to get turned on - check_anomalies = pick(0, 1) - locked = pick(0, 1) - ailock = pick(0, 1) - - enabled=0 - updateTurrets() - - spawn(rand(60,600)) - if(!enabled) - enabled=1 - updateTurrets() - - ..() - - -/obj/machinery/turretid/malf_upgrade(var/mob/living/silicon/ai/user) - ..() - malf_upgraded = 1 - locked = 1 - ailock = 0 - to_chat(user, "\The [src] has been upgraded. It has been locked and can not be tampered with by anyone but you and your cyborgs.") - master_ai = user - return 1 diff --git a/code/game/machinery/vending.dm b/code/game/machinery/vending.dm deleted file mode 100644 index bd3092fdd56a7..0000000000000 --- a/code/game/machinery/vending.dm +++ /dev/null @@ -1,1676 +0,0 @@ - -/** - * A vending machine - */ -/obj/machinery/vending - name = "\improper Vendomat" - desc = "A generic vending machine." - icon = 'icons/obj/vending.dmi' - icon_state = "generic" - layer = BELOW_OBJ_LAYER - anchored = TRUE - density = TRUE - obj_flags = OBJ_FLAG_ANCHORABLE | OBJ_FLAG_ROTATABLE - clicksound = "button" - clickvol = 40 - base_type = /obj/machinery/vending/assist - construct_state = /decl/machine_construction/default/panel_closed - uncreated_component_parts = null - - machine_name = "vending machine" - machine_desc = "Holds an internal stock of items that can be dispensed on-demand or when a charged ID card is swiped, depending on the brand." - - var/icon_vend //Icon_state when vending - var/icon_deny //Icon_state when denying access - var/diona_spawn_chance = 0.1 - - // Power - idle_power_usage = 10 - var/vend_power_usage = 150 //actuators and stuff - - // Vending-related - var/active = 1 //No sales pitches if off! - var/vend_ready = 1 //Are we ready to vend?? Is it time?? - var/vend_delay = 10 //How long does it take to vend? - var/categories = CAT_NORMAL // Bitmask of cats we're currently showing - var/datum/stored_items/vending_products/currently_vending = null // What we're requesting payment for right now - var/status_message = "" // Status screen messages like "insufficient funds", displayed in NanoUI - var/status_error = 0 // Set to 1 if status_message is an error - - /* - Variables used to initialize the product list - These are used for initialization only, and so are optional if - product_records is specified - */ - var/list/products = list() // For each, use the following pattern: - var/list/contraband = list() // list(/type/path = amount,/type/path2 = amount2) - var/list/premium = list() // No specified amount = only one in stock - var/list/prices = list() // Prices for each item, list(/type/path = price), items not in the list don't have a price. - - // List of vending_product items available. - var/list/product_records = list() - - - // Variables used to initialize advertising - var/product_slogans = "" //String of slogans spoken out loud, separated by semicolons - var/product_ads = "" //String of small ad messages in the vending screen - - var/list/ads_list = list() - - // Stuff relating vocalizations - var/list/slogan_list = list() - var/shut_up = 1 //Stop spouting those godawful pitches! - var/vend_reply //Thank you for shopping! - var/last_reply = 0 - var/last_slogan = 0 //When did we last pitch? - var/slogan_delay = 6000 //How long until we can pitch again? - - // Things that can go wrong - var/seconds_electrified = 0 //Shock customers like an airlock. - var/shoot_inventory = 0 //Fire items at customers! We're broken! - var/shooting_chance = 2 //The chance that items are being shot per tick - - var/scan_id = 1 - var/obj/item/material/coin/coin - wires = /datum/wires/vending - -/obj/machinery/vending/Initialize(mapload, d=0, populate_parts = TRUE) - . = ..() - if(product_slogans) - slogan_list += splittext(product_slogans, ";") - - // So not all machines speak at the exact same time. - // The first time this machine says something will be at slogantime + this random value, - // so if slogantime is 10 minutes, it will say it at somewhere between 10 and 20 minutes after the machine is crated. - last_slogan = world.time + rand(0, slogan_delay) - - if(product_ads) - ads_list += splittext(product_ads, ";") - - build_inventory(populate_parts) - -/** - * Build src.produdct_records from the products lists - * - * src.products, src.contraband, src.premium, and src.prices allow specifying - * products that the vending machine is to carry without manually populating - * src.product_records. - */ -/obj/machinery/vending/proc/build_inventory(populate_parts = FALSE) - var/list/all_products = list( - list(src.products, CAT_NORMAL), - list(src.contraband, CAT_HIDDEN), - list(src.premium, CAT_COIN)) - - for(var/current_list in all_products) - var/category = current_list[2] - - for(var/entry in current_list[1]) - var/datum/stored_items/vending_products/product = new/datum/stored_items/vending_products(src, entry) - - product.price = (entry in src.prices) ? src.prices[entry] : 0 - if(populate_parts) - product.amount = (current_list[1][entry]) ? current_list[1][entry] : 1 - product.category = category - - src.product_records.Add(product) - -/obj/machinery/vending/Destroy() - QDEL_NULL(coin) - QDEL_NULL_LIST(product_records) - return ..() - -/obj/machinery/vending/ex_act(severity) - switch(severity) - if(EX_ACT_DEVASTATING) - qdel(src) - return - if(EX_ACT_HEAVY) - if (prob(50)) - qdel(src) - return - if(EX_ACT_LIGHT) - if (prob(25)) - spawn(0) - src.malfunction() - return - return - else - return - -/obj/machinery/vending/emag_act(var/remaining_charges, var/mob/user) - if (!emagged) - emagged = TRUE - wires.CutWireIndex(VENDING_WIRE_CONTRABAND, FALSE) - req_access.Cut() - SSnano.update_uis(src) - to_chat(user, "You short out the product lock on \the [src]") - return 1 - -/obj/machinery/vending/attackby(obj/item/W as obj, mob/user as mob) - - var/obj/item/card/id/I = W.GetIdCard() - - if (currently_vending && vendor_account && !vendor_account.suspended) - var/paid = 0 - var/handled = 0 - - if (I) //for IDs and PDAs and wallets with IDs - paid = pay_with_card(I,W) - handled = 1 - else if (istype(W, /obj/item/spacecash/ewallet)) - var/obj/item/spacecash/ewallet/C = W - paid = pay_with_ewallet(C) - handled = 1 - else if (istype(W, /obj/item/spacecash/bundle)) - var/obj/item/spacecash/bundle/C = W - paid = pay_with_cash(C) - handled = 1 - - if(paid) - src.vend(currently_vending, usr) - return TRUE - else if(handled) - SSnano.update_uis(src) - return TRUE // don't smack that machine with your 2 thalers - - if (I || istype(W, /obj/item/spacecash)) - attack_hand(user) - return TRUE - if(isMultitool(W) || isWirecutter(W)) - if(src.panel_open) - attack_hand(user) - return TRUE - if(istype(W, /obj/item/material/coin) && premium.len > 0) - if(!user.unEquip(W, src)) - return FALSE - coin = W - categories |= CAT_COIN - to_chat(user, "You insert \the [W] into \the [src].") - SSnano.update_uis(src) - return TRUE - if((user.a_intent == I_HELP) && attempt_to_stock(W, user)) - return TRUE - if((. = component_attackby(W, user))) - return - if((obj_flags & OBJ_FLAG_ANCHORABLE) && isWrench(W)) - wrench_floor_bolts(user) - power_change() - return - -/obj/machinery/vending/state_transition(decl/machine_construction/new_state) - . = ..() - SSnano.update_uis(src) - -/obj/machinery/vending/MouseDrop_T(var/obj/item/I as obj, var/mob/user as mob) - if(!CanMouseDrop(I, user) || (I.loc != user)) - return - return attempt_to_stock(I, user) - -/obj/machinery/vending/proc/attempt_to_stock(var/obj/item/I as obj, var/mob/user as mob) - for(var/datum/stored_items/vending_products/R in product_records) - if(I.type == R.item_path) - stock(I, R, user) - return 1 - -/** - * Receive payment with cashmoney. - */ -/obj/machinery/vending/proc/pay_with_cash(var/obj/item/spacecash/bundle/cashmoney) - if(currently_vending.price > cashmoney.worth) - // This is not a status display message, since it's something the character - // themselves is meant to see BEFORE putting the money in - to_chat(usr, "[icon2html(cashmoney, usr)] That is not enough money.") - return 0 - - visible_message("\The [usr] inserts some cash into \the [src].") - cashmoney.worth -= currently_vending.price - - if(cashmoney.worth <= 0) - qdel(cashmoney) - else - cashmoney.update_icon() - - // Vending machines have no idea who paid with cash - credit_purchase("(cash)") - return 1 - -/** - * Scan a chargecard and deduct payment from it. - * - * Takes payment for whatever is the currently_vending item. Returns 1 if - * successful, 0 if failed. - */ -/obj/machinery/vending/proc/pay_with_ewallet(var/obj/item/spacecash/ewallet/wallet) - visible_message("\The [usr] swipes \the [wallet] through \the [src].") - if(currently_vending.price > wallet.worth) - src.status_message = "Insufficient funds on chargecard." - src.status_error = 1 - return 0 - else - wallet.worth -= currently_vending.price - credit_purchase("[wallet.owner_name] (chargecard)") - return 1 - -/** - * Scan a card and attempt to transfer payment from associated account. - * - * Takes payment for whatever is the currently_vending item. Returns 1 if - * successful, 0 if failed - */ -/obj/machinery/vending/proc/pay_with_card(var/obj/item/card/id/I, var/obj/item/ID_container) - if(I==ID_container || ID_container == null) - visible_message("\The [usr] swipes \the [I] through \the [src].") - else - visible_message("\The [usr] swipes \the [ID_container] through \the [src].") - var/datum/money_account/customer_account = get_account(I.associated_account_number) - if (!customer_account) - src.status_message = "Error: Unable to access account. Please contact technical support if problem persists." - src.status_error = 1 - return 0 - - if(customer_account.suspended) - src.status_message = "Unable to access account: account suspended." - src.status_error = 1 - return 0 - - // Have the customer punch in the PIN before checking if there's enough money. Prevents people from figuring out acct is - // empty at high security levels - if(customer_account.security_level != 0) //If card requires pin authentication (ie seclevel 1 or 2) - var/attempt_pin = input("Enter pin code", "Vendor transaction") as num - customer_account = attempt_account_access(I.associated_account_number, attempt_pin, 2) - - if(!customer_account) - src.status_message = "Unable to access account: incorrect credentials." - src.status_error = 1 - return 0 - - if(currently_vending.price > customer_account.money) - src.status_message = "Insufficient funds in account." - src.status_error = 1 - return 0 - else - // Okay to move the money at this point - customer_account.transfer(vendor_account, currently_vending.price, "Purchase of [currently_vending.item_name]") - - return 1 - -/** - * Add money for current purchase to the vendor account. - * - * Called after the money has already been taken from the customer. - */ -/obj/machinery/vending/proc/credit_purchase(var/target as text) - vendor_account.deposit(currently_vending.price, "Purchase of [currently_vending.item_name]", target) - -/obj/machinery/vending/physical_attack_hand(mob/user) - if(src.seconds_electrified != 0) - if(src.shock(user, 100)) - return TRUE - -/obj/machinery/vending/interface_interact(mob/user) - ui_interact(user) - return TRUE - -/** - * Display the NanoUI window for the vending machine. - * - * See NanoUI documentation for details. - */ -/obj/machinery/vending/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1) - user.set_machine(src) - - var/list/data = list() - if(currently_vending) - data["mode"] = 1 - data["product"] = currently_vending.item_name - data["price"] = currently_vending.price - data["message_err"] = 0 - data["message"] = src.status_message - data["message_err"] = src.status_error - else - data["mode"] = 0 - var/list/listed_products = list() - - for(var/key = 1 to src.product_records.len) - var/datum/stored_items/vending_products/I = src.product_records[key] - - if(!(I.category & src.categories)) - continue - - listed_products.Add(list(list( - "key" = key, - "name" = I.item_name, - "price" = I.price, - "color" = I.display_color, - "amount" = I.get_amount()))) - - data["products"] = listed_products - - if(src.coin) - data["coin"] = src.coin.name - - if(src.panel_open) - data["panel"] = 1 - data["speaker"] = src.shut_up ? 0 : 1 - else - data["panel"] = 0 - - ui = SSnano.try_update_ui(user, src, ui_key, ui, data, force_open) - if (!ui) - ui = new(user, src, ui_key, "vending_machine.tmpl", src.name, 440, 600) - ui.set_initial_data(data) - ui.open() - -/obj/machinery/vending/OnTopic(mob/user, href_list, datum/topic_state/state) - if(href_list["remove_coin"] && !istype(usr,/mob/living/silicon)) - if(!coin) - to_chat(user, "There is no coin in this machine.") - return TOPIC_HANDLED - - coin.dropInto(loc) - if(!user.get_active_hand()) - user.put_in_hands(coin) - to_chat(user, "You remove \the [coin] from \the [src]") - coin = null - categories &= ~CAT_COIN - return TOPIC_HANDLED - - if (href_list["vend"] && vend_ready && !currently_vending) - var/key = text2num(href_list["vend"]) - if(!is_valid_index(key, product_records)) - return TOPIC_REFRESH - var/datum/stored_items/vending_products/R = product_records[key] - if(!istype(R)) - return TOPIC_REFRESH - - // This should not happen unless the request from NanoUI was bad - if(!(R.category & categories)) - return TOPIC_REFRESH - - if(R.price <= 0) - vend(R, user) - else if(istype(user,/mob/living/silicon)) //If the item is not free, provide feedback if a synth is trying to buy something. - to_chat(user, "Artificial unit recognized. Artificial units cannot complete this transaction. Purchase canceled.") - else - currently_vending = R - if(!vendor_account || vendor_account.suspended) - status_message = "This machine is currently unable to process payments due to problems with the associated account." - status_error = 1 - else - status_message = "Please swipe a card or insert cash to pay for the item." - status_error = 0 - return TOPIC_REFRESH - - if(href_list["cancelpurchase"]) - currently_vending = null - return TOPIC_REFRESH - - if(href_list["togglevoice"] && panel_open) - shut_up = !shut_up - return TOPIC_HANDLED - -/obj/machinery/vending/get_req_access() - if(!scan_id) - return list() - return ..() - -/obj/machinery/vending/proc/vend(var/datum/stored_items/vending_products/R, mob/user) - if((!allowed(user)) && !emagged && scan_id) //For SECURE VENDING MACHINES YEAH - to_chat(user, "Access denied.")//Unless emagged of course - flick(src.icon_deny,src) - return - src.vend_ready = 0 //One thing at a time!! - src.status_message = "Vending..." - src.status_error = 0 - SSnano.update_uis(src) - - if (R.category & CAT_COIN) - if(!coin) - to_chat(user, "You need to insert a coin to get this item.") - return - if(!isnull(coin.string_colour)) - if(prob(50)) - to_chat(user, "You successfully pull the coin out before \the [src] could swallow it.") - else - to_chat(user, "You weren't able to pull the coin out fast enough, the machine ate it, string and all.") - qdel(coin) - coin = null - categories &= ~CAT_COIN - else - qdel(coin) - coin = null - categories &= ~CAT_COIN - - if(((src.last_reply + (src.vend_delay + 200)) <= world.time) && src.vend_reply) - spawn(0) - src.speak(src.vend_reply) - src.last_reply = world.time - - use_power_oneoff(vend_power_usage) //actuators and stuff - if (src.icon_vend) //Show the vending animation if needed - flick(src.icon_vend,src) - spawn(src.vend_delay) //Time to vend - if(prob(diona_spawn_chance)) //Hehehe - var/turf/T = get_turf(src) - var/mob/living/carbon/alien/diona/S = new(T) - src.visible_message("\The [src] makes an odd grinding noise before coming to a halt as \a [S.name] slurmps out from the receptacle.") - else //Just a normal vend, then - R.get_product(get_turf(src)) - src.visible_message("\The [src] clunks as it vends \the [R.item_name].") - playsound(src, 'sound/machines/vending_machine.ogg', 25, 1) - if(prob(1)) //The vending gods look favorably upon you - sleep(3) - if(R.get_product(get_turf(src))) - src.visible_message("\The [src] clunks as it vends an additional [R.item_name].") - - src.status_message = "" - src.status_error = 0 - src.vend_ready = 1 - currently_vending = null - SSnano.update_uis(src) - -/** - * Add item to the machine - * - * Checks if item is vendable in this machine should be performed before - * calling. W is the item being inserted, R is the associated vending_product entry. - */ -/obj/machinery/vending/proc/stock(obj/item/W, var/datum/stored_items/vending_products/R, var/mob/user) - if(!user.unEquip(W)) - return - - if(R.add_product(W)) - to_chat(user, "You insert \the [W] in the product receptor.") - SSnano.update_uis(src) - return 1 - - SSnano.update_uis(src) - -/obj/machinery/vending/Process() - if(stat & (BROKEN|NOPOWER)) - return - - if(!src.active) - return - - if(src.seconds_electrified > 0) - src.seconds_electrified-- - - //Pitch to the people! Really sell it! - if(((src.last_slogan + src.slogan_delay) <= world.time) && (src.slogan_list.len > 0) && (!src.shut_up) && prob(5)) - var/slogan = pick(src.slogan_list) - src.speak(slogan) - src.last_slogan = world.time - - if(src.shoot_inventory && prob(shooting_chance)) - src.throw_item() - - return - -/obj/machinery/vending/proc/speak(var/message) - if(stat & NOPOWER) - return - - if (!message) - return - - for(var/mob/O in hearers(src, null)) - O.show_message("\The [src] beeps, \"[message]\"",2) - return - -/obj/machinery/vending/powered() - return anchored && ..() - -/obj/machinery/vending/on_update_icon() - overlays.Cut() - if(stat & BROKEN) - icon_state = "[initial(icon_state)]-broken" - else if( !(stat & NOPOWER) ) - icon_state = initial(icon_state) - else - spawn(rand(0, 15)) - src.icon_state = "[initial(icon_state)]-off" - if(panel_open) - overlays += image(src.icon, "[initial(icon_state)]-panel") - -//Oh no we're malfunctioning! Dump out some product and break. -/obj/machinery/vending/proc/malfunction() - for(var/datum/stored_items/vending_products/R in src.product_records) - while(R.get_amount()>0) - R.get_product(loc) - break - set_broken(TRUE) - -//Somebody cut an important wire and now we're following a new definition of "pitch." -/obj/machinery/vending/proc/throw_item() - var/obj/throw_item = null - var/mob/living/target = locate() in view(7,src) - if(!target) - return 0 - - for(var/datum/stored_items/vending_products/R in shuffle(src.product_records)) - throw_item = R.get_product(loc) - if (throw_item) - break - if (!throw_item) - return 0 - spawn(0) - throw_item.throw_at(target, rand(1,2), 3) - src.visible_message("\The [src] launches \a [throw_item] at \the [target]!") - return 1 - -/* - * Vending machine types - */ - -/* - -/obj/machinery/vending/[vendors name here] // --vending machine template :) - name = "" - desc = "" - icon = '' - icon_state = "" - vend_delay = 15 - products = list() - contraband = list() - premium = list() - -*/ - -/obj/machinery/vending/boozeomat - name = "\improper Booze-O-Mat" - desc = "A refrigerated vending unit for alcoholic beverages and alcoholic beverage accessories." - icon_state = "fridge_dark" - icon_deny = "fridge_dark-deny" - products = list(/obj/item/reagent_containers/food/drinks/glass2/square = 10, - /obj/item/reagent_containers/food/drinks/flask/barflask = 5, - /obj/item/reagent_containers/food/drinks/flask/vacuumflask = 5, - /obj/item/reagent_containers/food/drinks/bottle/absinthe = 5, - /obj/item/reagent_containers/food/drinks/bottle/baijiu = 5, - /obj/item/reagent_containers/food/drinks/bottle/blackstrap = 5, - /obj/item/reagent_containers/food/drinks/bottle/bluecuracao = 5, - /obj/item/reagent_containers/food/drinks/bottle/cachaca = 5, - /obj/item/reagent_containers/food/drinks/bottle/champagne = 5, - /obj/item/reagent_containers/food/drinks/bottle/cognac = 5, - /obj/item/reagent_containers/food/drinks/bottle/gin = 5, - /obj/item/reagent_containers/food/drinks/bottle/herbal = 5, - /obj/item/reagent_containers/food/drinks/bottle/jagermeister = 5, - /obj/item/reagent_containers/food/drinks/bottle/kahlua = 5, - /obj/item/reagent_containers/food/drinks/bottle/melonliquor = 5, - /obj/item/reagent_containers/food/drinks/bottle/bottleofnothing =5, - /obj/item/reagent_containers/food/drinks/bottle/prosecco = 5, - /obj/item/reagent_containers/food/drinks/bottle/rakia = 5, - /obj/item/reagent_containers/food/drinks/bottle/rum = 5, - /obj/item/reagent_containers/food/drinks/bottle/sake = 5, - /obj/item/reagent_containers/food/drinks/bottle/soju = 5, - /obj/item/reagent_containers/food/drinks/bottle/tequilla = 5, - /obj/item/reagent_containers/food/drinks/bottle/vodka = 5, - /obj/item/reagent_containers/food/drinks/bottle/vermouth = 5, - /obj/item/reagent_containers/food/drinks/bottle/whiskey = 5, - /obj/item/reagent_containers/food/drinks/bottle/llanbrydewhiskey = 5, - /obj/item/reagent_containers/food/drinks/bottle/specialwhiskey = 5, - /obj/item/reagent_containers/food/drinks/bottle/wine = 5, - /obj/item/reagent_containers/food/drinks/bottle/small/beer = 15, - /obj/item/reagent_containers/food/drinks/bottle/small/alcoholfreebeer = 15, - /obj/item/reagent_containers/food/drinks/bottle/small/ale = 15, - /obj/item/reagent_containers/food/drinks/bottle/small/hellshenpa = 15, - /obj/item/reagent_containers/food/drinks/bottle/small/lager = 15, - /obj/item/reagent_containers/food/drinks/bottle/small/gingerbeer = 15, - /obj/item/reagent_containers/food/drinks/bottle/small/dandelionburdock = 15, - /obj/item/reagent_containers/food/drinks/cans/rootbeer = 15, - /obj/item/reagent_containers/food/drinks/cans/speer = 10, - /obj/item/reagent_containers/food/drinks/cans/ale = 10, - /obj/item/reagent_containers/food/drinks/bottle/cola = 5, - /obj/item/reagent_containers/food/drinks/cans/cola_diet = 5, - /obj/item/reagent_containers/food/drinks/cans/ionbru = 5, - /obj/item/reagent_containers/food/drinks/bottle/space_up = 5, - /obj/item/reagent_containers/food/drinks/bottle/space_mountain_wind = 5, - /obj/item/reagent_containers/food/drinks/cans/beastenergy = 5, - /obj/item/reagent_containers/food/drinks/tea/black = 15, - /obj/item/reagent_containers/food/drinks/bottle/orangejuice = 2, - /obj/item/reagent_containers/food/drinks/bottle/tomatojuice = 2, - /obj/item/reagent_containers/food/drinks/bottle/limejuice = 2, - /obj/item/reagent_containers/food/drinks/bottle/lemonjuice = 2, - /obj/item/reagent_containers/food/drinks/bottle/unathijuice = 2, - /obj/item/reagent_containers/food/drinks/bottle/maplesyrup = 2, - /obj/item/reagent_containers/food/drinks/cans/tonic = 15, - /obj/item/reagent_containers/food/drinks/bottle/cream = 5, - /obj/item/reagent_containers/food/drinks/cans/sodawater = 15, - /obj/item/reagent_containers/food/drinks/bottle/grenadine = 5, - /obj/item/reagent_containers/food/condiment/mint = 2, - /obj/item/reagent_containers/food/drinks/ice = 10, - /obj/item/glass_extra/stick = 15, - /obj/item/glass_extra/straw = 15) - contraband = list(/obj/item/reagent_containers/food/drinks/bottle/premiumwine = 5, - /obj/item/reagent_containers/food/drinks/bottle/premiumvodka = 5, - /obj/item/reagent_containers/food/drinks/bottle/patron = 5, - /obj/item/reagent_containers/food/drinks/bottle/goldschlager = 5, - /obj/item/reagent_containers/food/drinks/bottle/tadmorwine = 5, - /obj/item/reagent_containers/food/drinks/bottle/brandy = 5) - vend_delay = 15 - idle_power_usage = 211 //refrigerator - believe it or not, this is actually the average power consumption of a refrigerated vending machine according to NRCan. - product_slogans = "I hope nobody asks me for a bloody cup o' tea...;Alcohol is humanity's friend. Would you abandon a friend?;Quite delighted to serve you!;Is nobody thirsty on this station?" - product_ads = "Drink up!;Booze is good for you!;Alcohol is humanity's best friend.;Quite delighted to serve you!;Care for a nice, cold beer?;Nothing cures you like booze!;Have a sip!;Have a drink!;Have a beer!;Beer is good for you!;Only the finest alcohol!;Best quality booze since 2053!;Award-winning wine!;Maximum alcohol!;Man loves beer.;A toast for progress!" - req_access = list(access_kitchen) - base_type = /obj/machinery/vending/boozeomat - -/obj/machinery/vending/assist - products = list( /obj/item/device/assembly/prox_sensor = 5,/obj/item/device/assembly/igniter = 3,/obj/item/device/assembly/signaler = 4, - /obj/item/wirecutters = 1) - contraband = list(/obj/item/device/flashlight = 5,/obj/item/device/assembly/timer = 2) - product_ads = "Only the finest!;Have some tools.;The most robust equipment.;The finest gear in space!" - -/obj/machinery/vending/assist/antag - name = "\improper AntagCorpVend" - contraband = list() - products = list( /obj/item/device/assembly/prox_sensor = 5, /obj/item/device/assembly/signaler = 4, - /obj/item/device/assembly/infra = 4, /obj/item/device/assembly/prox_sensor = 4, - /obj/item/handcuffs = 8, /obj/item/device/flash = 4, /obj/item/clothing/glasses/sunglasses = 4) - -/obj/machinery/vending/coffee - name = "\improper Hot Drinks machine" - desc = "A vending machine which dispenses hot drinks and hot drinks accessories." - product_ads = "Have a drink!;Drink up!;It's good for you!;Would you like a hot joe?;I'd kill for some coffee!;The best beans in the galaxy.;Only the finest brew for you.;Mmmm. Nothing like a coffee.;I like coffee, don't you?;Coffee helps you work!;Try some tea.;We hope you like the best!;Try our new chocolate!;Admin conspiracies" - icon_state = "coffee" - icon_vend = "coffee-vend" - icon_deny = "coffee-deny" - vend_delay = 34 - base_type = /obj/machinery/vending/coffee - idle_power_usage = 211 //refrigerator - believe it or not, this is actually the average power consumption of a refrigerated vending machine according to NRCan. - vend_power_usage = 85000 //85 kJ to heat a 250 mL cup of coffee - products = list(/obj/item/reagent_containers/food/drinks/coffee = 15, - /obj/item/reagent_containers/food/drinks/decafcoffee = 15, - /obj/item/reagent_containers/food/drinks/tea/black = 15, - /obj/item/reagent_containers/food/drinks/tea/green = 15, - /obj/item/reagent_containers/food/drinks/tea/chai = 15, - /obj/item/reagent_containers/food/drinks/tea/decaf = 15, - /obj/item/reagent_containers/food/drinks/h_chocolate = 15, - /obj/item/reagent_containers/food/condiment/small/packet/sugar = 25, - /obj/item/reagent_containers/pill/pod/cream = 25, - /obj/item/reagent_containers/pill/pod/cream_soy = 25, - /obj/item/reagent_containers/pill/pod/orange = 10, - /obj/item/reagent_containers/pill/pod/mint = 10, - /obj/item/reagent_containers/food/drinks/ice = 10) - - prices = list(/obj/item/reagent_containers/food/drinks/coffee = 10, - /obj/item/reagent_containers/food/drinks/decafcoffee = 10, - /obj/item/reagent_containers/food/drinks/tea/black = 10, - /obj/item/reagent_containers/food/drinks/tea/green = 10, - /obj/item/reagent_containers/food/drinks/tea/chai = 10, - /obj/item/reagent_containers/food/drinks/tea/decaf = 10, - /obj/item/reagent_containers/food/drinks/h_chocolate = 10, - /obj/item/reagent_containers/food/condiment/small/packet/sugar = 5, - /obj/item/reagent_containers/pill/pod/cream = 5, - /obj/item/reagent_containers/pill/pod/cream_soy = 5, - /obj/item/reagent_containers/pill/pod/orange = 5, - /obj/item/reagent_containers/pill/pod/mint = 5, - /obj/item/reagent_containers/food/drinks/ice = 5) - -/obj/machinery/vending/coffee/on_update_icon() - ..() - if(stat & BROKEN && prob(20)) - icon_state = "[initial(icon_state)]-hellfire" - else if(!(stat & NOPOWER)) - overlays += image(icon, "[initial(icon_state)]-screen") - - -/obj/machinery/vending/snack - name = "\improper Getmore Chocolate Corp" - 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" - icon_vend = "snack-vend" - icon_deny = "snack-deny" - vend_delay = 25 - base_type = /obj/machinery/vending/snack - products = list(/obj/item/clothing/mask/chewable/candy/lolli = 8, - /obj/item/storage/chewables/candy/gum = 4, - /obj/item/storage/chewables/candy/cookies = 4, - /obj/item/reagent_containers/food/snacks/candy = 6,/obj/item/reagent_containers/food/drinks/dry_ramen = 6,/obj/item/reagent_containers/food/snacks/chips =6, - /obj/item/reagent_containers/food/snacks/sosjerky = 6,/obj/item/reagent_containers/food/snacks/no_raisin = 6,/obj/item/reagent_containers/food/snacks/spacetwinkie = 6, - /obj/item/reagent_containers/food/snacks/cheesiehonkers = 6, /obj/item/reagent_containers/food/snacks/tastybread = 6) - contraband = list(/obj/item/reagent_containers/food/snacks/syndicake = 6, /obj/item/reagent_containers/food/snacks/skrellsnacks = 3) - prices = list(/obj/item/clothing/mask/chewable/candy/lolli = 2, - /obj/item/storage/chewables/candy/gum = 4, - /obj/item/storage/chewables/candy/cookies = 4, - /obj/item/reagent_containers/food/snacks/candy = 1,/obj/item/reagent_containers/food/drinks/dry_ramen = 5,/obj/item/reagent_containers/food/snacks/chips = 1, - /obj/item/reagent_containers/food/snacks/sosjerky = 2,/obj/item/reagent_containers/food/snacks/no_raisin = 1,/obj/item/reagent_containers/food/snacks/spacetwinkie = 1, - /obj/item/reagent_containers/food/snacks/cheesiehonkers = 1, /obj/item/reagent_containers/food/snacks/tastybread = 2) - -/obj/machinery/vending/cola - name = "\improper Robust Softdrinks" - desc = "A softdrink vendor provided by Robust Industries, LLC." - icon_state = "Cola_Machine" - icon_vend = "Cola_Machine-vend" - icon_deny = "Cola_Machine-deny" - vend_delay = 11 - base_type = /obj/machinery/vending/cola - product_slogans = "Robust Softdrinks: More robust than a toolbox to the head!" - product_ads = "Refreshing!;Hope you're thirsty!;Over 1 million drinks sold!;Thirsty? Why not cola?;Please, have a drink!;Drink up!;The best drinks in space." - products = list(/obj/item/reagent_containers/food/drinks/cans/cola = 10,/obj/item/reagent_containers/food/drinks/cans/space_mountain_wind = 10, - /obj/item/reagent_containers/food/drinks/cans/dr_gibb = 10,/obj/item/reagent_containers/food/drinks/cans/ionbru = 10, - /obj/item/reagent_containers/food/drinks/cans/waterbottle = 10,/obj/item/reagent_containers/food/drinks/cans/space_up = 10, - /obj/item/reagent_containers/food/drinks/cans/iced_tea = 10, /obj/item/reagent_containers/food/drinks/cans/grape_juice = 10) - contraband = list(/obj/item/reagent_containers/food/drinks/cans/thirteenloko = 5, /obj/item/reagent_containers/food/snacks/liquidfood = 6) - prices = list(/obj/item/reagent_containers/food/drinks/cans/cola = 1,/obj/item/reagent_containers/food/drinks/cans/space_mountain_wind = 1, - /obj/item/reagent_containers/food/drinks/cans/dr_gibb = 1,/obj/item/reagent_containers/food/drinks/cans/ionbru = 1, - /obj/item/reagent_containers/food/drinks/cans/waterbottle = 2,/obj/item/reagent_containers/food/drinks/cans/space_up = 1, - /obj/item/reagent_containers/food/drinks/cans/iced_tea = 1,/obj/item/reagent_containers/food/drinks/cans/grape_juice = 1) - idle_power_usage = 211 //refrigerator - believe it or not, this is actually the average power consumption of a refrigerated vending machine according to NRCan. - -/obj/machinery/vending/soda - name = "\improper Radical Renard" - desc = "A softdrink vendor promoted by Radical Renard." - icon_state = "Soda_Machine" - icon_vend = "Soda_Machine-vend" - icon_deny = "Soda_Machine-deny" - vend_delay = 11 - base_type = /obj/machinery/vending/soda - product_slogans = "Not applicable!" - product_ads = "Not applicable." - products = list(/obj/item/reagent_containers/food/drinks/cans/cola_diet = 10,/obj/item/reagent_containers/food/drinks/cans/rootbeer = 10, - /obj/item/reagent_containers/food/drinks/cans/cola_apple = 10,/obj/item/reagent_containers/food/drinks/cans/cola_orange = 10, - /obj/item/reagent_containers/food/drinks/cans/waterbottle = 10,/obj/item/reagent_containers/food/drinks/cans/cola_grape = 10, - /obj/item/reagent_containers/food/drinks/cans/cola_lemonlime = 10, /obj/item/reagent_containers/food/drinks/cans/cola_strawberry = 10) - contraband = list(/obj/item/reagent_containers/food/drinks/cans/cola_pork = 10) - prices = list(/obj/item/reagent_containers/food/drinks/cans/cola_diet = 1,/obj/item/reagent_containers/food/drinks/cans/rootbeer = 1, - /obj/item/reagent_containers/food/drinks/cans/cola_apple = 1,/obj/item/reagent_containers/food/drinks/cans/cola_orange = 1, - /obj/item/reagent_containers/food/drinks/cans/waterbottle = 1,/obj/item/reagent_containers/food/drinks/cans/cola_grape = 1, - /obj/item/reagent_containers/food/drinks/cans/cola_lemonlime = 1,/obj/item/reagent_containers/food/drinks/cans/cola_strawberry = 1) - idle_power_usage = 211 //refrigerator - believe it or not, this is actually the average power consumption of a refrigerated vending machine according to NRCan. - -/obj/machinery/vending/fitness - name = "\improper SweatMAX" - desc = "An exercise aid and nutrition supplement vendor that preys on your inadequacy." - product_slogans = "SweatMAX, get robust!" - product_ads = "Pain is just weakness leaving the body!;Run! Your fat is catching up to you;Never forget leg day!;Push out!;This is the only break you get today.;Don't cry, sweat!;Healthy is an outfit that looks good on everybody." - icon_state = "fitness" - icon_vend = "fitness-vend" - icon_deny = "fitness-deny" - vend_delay = 6 - base_type = /obj/machinery/vending/fitness - products = list(/obj/item/reagent_containers/food/drinks/small_milk = 8, - /obj/item/reagent_containers/food/drinks/small_milk_choc = 8, - /obj/item/reagent_containers/food/drinks/cans/waterbottle = 8, - /obj/item/reagent_containers/food/drinks/glass2/fitnessflask/proteinshake = 8, - /obj/item/reagent_containers/food/drinks/glass2/fitnessflask = 8, - /obj/item/reagent_containers/food/snacks/proteinbar = 8, - /obj/item/reagent_containers/pill/diet = 8, - /obj/item/towel/random = 8) - - prices = list(/obj/item/reagent_containers/food/drinks/small_milk = 3, - /obj/item/reagent_containers/food/drinks/small_milk_choc = 3, - /obj/item/reagent_containers/food/drinks/cans/waterbottle = 2, - /obj/item/reagent_containers/food/drinks/glass2/fitnessflask/proteinshake = 20, - /obj/item/reagent_containers/food/drinks/glass2/fitnessflask = 5, - /obj/item/reagent_containers/food/snacks/proteinbar = 5, - /obj/item/reagent_containers/pill/diet = 25, - /obj/item/towel/random = 40) - - contraband = list(/obj/item/reagent_containers/syringe/steroid = 4) - -/obj/machinery/vending/fitness/on_update_icon() - ..() - if(!(stat & NOPOWER)) - overlays += image(icon, "[initial(icon_state)]-overlay") - -/obj/machinery/vending/cigarette - name = "\improper Cigarette machine" //OCD had to be uppercase to look nice with the new formating - desc = "A specialized vending machine designed to contribute to your slow and uncomfortable death." - product_slogans = "There's no better time to start smokin'.;\ - Smoke now, and win the adoration of your peers.;\ - They beat cancer centuries ago, so smoke away.;\ - If you're not smoking, you must be joking." - product_ads = "Probably not bad for you!;\ - Don't believe the scientists!;\ - It's good for you!;\ - Don't quit, buy more!;\ - Smoke!;\ - Nicotine heaven.;\ - Best cigarettes since 2150.;\ - Award-winning cigarettes, all the best brands.;\ - Feeling temperamental? Try a Temperamento!;\ - Carcinoma Angels - go fuck yerself!;\ - Don't be so hard on yourself, kid. Smoke a Lucky Star!;\ - We understand the depressed, alcoholic cowboy in you. That's why we also smoke Jericho.;\ - Professionals. Better cigarettes for better people. Yes, better people." - vend_delay = 21 - icon_state = "cigs" - icon_vend = "cigs-vend" - icon_deny = "cigs-deny" - base_type = /obj/machinery/vending/cigarette - products = list( - /obj/item/storage/cigpaper/filters = 5, - /obj/item/storage/cigpaper = 3, - /obj/item/storage/cigpaper/fancy = 2, - /obj/item/storage/chewables/rollable/bad = 2, - /obj/item/storage/chewables/rollable/generic = 2, - /obj/item/storage/chewables/rollable/fine = 2, - /obj/item/storage/chewables/rollable/rollingkit = 2, - /obj/item/storage/fancy/cigarettes = 5, - /obj/item/storage/fancy/cigarettes/luckystars = 2, - /obj/item/storage/fancy/cigarettes/jerichos = 2, - /obj/item/storage/fancy/cigarettes/menthols = 2, - /obj/item/storage/fancy/cigarettes/carcinomas = 2, - /obj/item/storage/fancy/cigarettes/professionals = 2, - /obj/item/storage/fancy/cigarettes/cigarello = 2, - /obj/item/storage/fancy/cigarettes/cigarello/mint = 2, - /obj/item/storage/fancy/cigarettes/cigarello/variety = 2, - /obj/item/storage/box/matches = 10, - /obj/item/flame/lighter/random = 4, - /obj/item/storage/chewables/tobacco = 2, - /obj/item/storage/chewables/tobacco2 = 2, - /obj/item/storage/chewables/tobacco3 = 2, - /obj/item/clothing/mask/smokable/ecig/simple = 10, - /obj/item/clothing/mask/smokable/ecig/util = 5, - /obj/item/clothing/mask/smokable/ecig/deluxe = 1, - /obj/item/reagent_containers/ecig_cartridge/med_nicotine = 10, - /obj/item/reagent_containers/ecig_cartridge/high_nicotine = 5, - /obj/item/reagent_containers/ecig_cartridge/orange = 5, - /obj/item/reagent_containers/ecig_cartridge/mint = 5, - /obj/item/reagent_containers/ecig_cartridge/watermelon = 5, - /obj/item/reagent_containers/ecig_cartridge/grape = 5, - /obj/item/reagent_containers/ecig_cartridge/lemonlime = 5, - /obj/item/reagent_containers/ecig_cartridge/coffee = 5, - /obj/item/reagent_containers/ecig_cartridge/blanknico = 2) - contraband = list(/obj/item/flame/lighter/zippo = 4, - /obj/item/clothing/mask/smokable/cigarette/rolled/sausage = 3) - premium = list(/obj/item/storage/fancy/cigar = 5,/obj/item/storage/fancy/cigarettes/killthroat = 5) - - prices = list( - /obj/item/storage/chewables/tobacco = 40, - /obj/item/storage/chewables/tobacco2 = 50, - /obj/item/storage/chewables/tobacco3 = 60, - /obj/item/storage/cigpaper/filters = 5, - /obj/item/storage/cigpaper = 8, - /obj/item/storage/cigpaper/fancy = 12, - /obj/item/storage/chewables/rollable/bad = 20, - /obj/item/storage/chewables/rollable/generic = 40, - /obj/item/storage/chewables/rollable/fine = 60, - /obj/item/storage/chewables/rollable/rollingkit = 45, - /obj/item/storage/fancy/cigarettes = 45, - /obj/item/storage/fancy/cigarettes/luckystars = 50, - /obj/item/storage/fancy/cigarettes/jerichos = 65, - /obj/item/storage/fancy/cigarettes/menthols = 55, - /obj/item/storage/fancy/cigarettes/carcinomas = 65, - /obj/item/storage/fancy/cigarettes/professionals = 70, - /obj/item/storage/fancy/cigarettes/cigarello = 85, - /obj/item/storage/fancy/cigarettes/cigarello/mint = 85, - /obj/item/storage/fancy/cigarettes/cigarello/variety = 85, - /obj/item/storage/box/matches = 2, - /obj/item/flame/lighter/random = 5, - /obj/item/clothing/mask/smokable/ecig/simple = 50, - /obj/item/clothing/mask/smokable/ecig/util = 100, - /obj/item/clothing/mask/smokable/ecig/deluxe = 250, - /obj/item/reagent_containers/ecig_cartridge/med_nicotine = 15, - /obj/item/reagent_containers/ecig_cartridge/high_nicotine = 15, - /obj/item/reagent_containers/ecig_cartridge/orange = 15, - /obj/item/reagent_containers/ecig_cartridge/mint = 15, - /obj/item/reagent_containers/ecig_cartridge/watermelon = 15, - /obj/item/reagent_containers/ecig_cartridge/grape = 15, - /obj/item/reagent_containers/ecig_cartridge/lemonlime = 15, - /obj/item/reagent_containers/ecig_cartridge/coffee = 15, - /obj/item/reagent_containers/ecig_cartridge/blanknico = 15) - - -/obj/machinery/vending/medical - name = "\improper NanoMed Plus" - desc = "Medical drug dispenser." - icon_state = "med" - icon_deny = "med-deny" - icon_vend = "med-vend" - vend_delay = 18 - base_type = /obj/machinery/vending/medical - product_ads = "Go save some lives!;The best stuff for your medbay.;Only the finest tools.;Natural chemicals!;This stuff saves lives.;Don't you want some?;Ping!" - req_access = list(access_medical_equip) - products = list( - /obj/item/reagent_containers/glass/bottle/antitoxin = 4, - /obj/item/reagent_containers/glass/bottle/inaprovaline = 4, - /obj/item/reagent_containers/glass/bottle/stoxin = 4, - /obj/item/reagent_containers/syringe/antiviral = 4, - /obj/item/reagent_containers/pill/antitox = 6, - /obj/item/reagent_containers/syringe = 12, - /obj/item/device/scanner/health = 5, - /obj/item/reagent_containers/glass/beaker = 4, - /obj/item/reagent_containers/dropper = 2, - /obj/item/stack/medical/advanced/bruise_pack = 3, - /obj/item/stack/medical/advanced/ointment = 3, - /obj/item/stack/medical/splint = 2, - /obj/item/reagent_containers/hypospray/autoinjector/pain = 4 - ) - - contraband = list( - /obj/item/clothing/mask/chewable/candy/lolli/meds = 8, - /obj/item/reagent_containers/pill/tox = 3, - /obj/item/reagent_containers/pill/stox = 4, - /obj/item/reagent_containers/glass/bottle/toxin = 4, - /obj/item/reagent_containers/hypospray/autoinjector/combatpain = 2 - ) - idle_power_usage = 211 //refrigerator - believe it or not, this is actually the average power consumption of a refrigerated vending machine according to NRCan. - - -//This one's from bay12 -/obj/machinery/vending/phoronresearch - name = "\improper Toximate 3000" - desc = "All the fine parts you need in one vending machine!" - base_type = /obj/machinery/vending/phoronresearch - products = list(/obj/item/clothing/suit/bio_suit = 6,/obj/item/clothing/head/bio_hood = 6, - /obj/item/device/transfer_valve = 6,/obj/item/device/assembly/timer = 6,/obj/item/device/assembly/signaler = 6, - /obj/item/device/assembly/prox_sensor = 6,/obj/item/device/assembly/igniter = 6) - -/obj/machinery/vending/wallmed1 - name = "\improper NanoMed" - desc = "A wall-mounted version of the NanoMed." - product_ads = "Go save some lives!;The best stuff for your medbay.;Only the finest tools.;Natural chemicals!;This stuff saves lives.;Don't you want some?" - icon_state = "wallmed" - icon_deny = "wallmed-deny" - icon_vend = "wallmed-vend" - base_type = /obj/machinery/vending/wallmed1 - density = FALSE //It is wall-mounted, and thus, not dense. --Superxpdude - products = list( - /obj/item/stack/medical/bruise_pack = 3, - /obj/item/stack/medical/ointment = 3, - /obj/item/reagent_containers/pill/paracetamol = 4, - /obj/item/storage/med_pouch/trauma, - /obj/item/storage/med_pouch/burn, - /obj/item/storage/med_pouch/oxyloss, - /obj/item/storage/med_pouch/toxin - ) - contraband = list(/obj/item/reagent_containers/syringe/antitoxin = 4,/obj/item/reagent_containers/syringe/antiviral = 4,/obj/item/reagent_containers/pill/tox = 1) - -/obj/machinery/vending/wallmed2 - name = "\improper NanoMed Mini" - desc = "A wall-mounted version of the NanoMed, containing only vital first aid equipment." - product_ads = "Go save some lives!;The best stuff for your medbay.;Only the finest tools.;Natural chemicals!;This stuff saves lives.;Don't you want some?" - icon_state = "wallmed" - icon_deny = "wallmed-deny" - icon_vend = "wallmed-vend" - density = FALSE //It is wall-mounted, and thus, not dense. --Superxpdude - base_type = /obj/machinery/vending/wallmed2 - products = list( - /obj/item/reagent_containers/hypospray/autoinjector = 5, - /obj/item/stack/medical/bruise_pack = 4, - /obj/item/stack/medical/ointment = 4, - /obj/item/storage/med_pouch/trauma, - /obj/item/storage/med_pouch/burn, - /obj/item/storage/med_pouch/oxyloss, - /obj/item/storage/med_pouch/toxin, - /obj/item/storage/med_pouch/radiation - ) - contraband = list(/obj/item/reagent_containers/pill/tox = 3, /obj/item/reagent_containers/hypospray/autoinjector/pain = 2) - -/obj/machinery/vending/security - name = "\improper SecTech" - desc = "A security equipment vendor." - product_ads = "Crack capitalist skulls!;Beat some heads in!;Don't forget - harm is good!;Your weapons are right here.;Handcuffs!;Freeze, scumbag!;Don't tase me bro!;Tase them, bro.;Why not have a donut?" - icon_state = "sec" - icon_deny = "sec-deny" - icon_vend = "sec-vend" - vend_delay = 14 - base_type = /obj/machinery/vending/security - req_access = list(access_security) - products = list( - /obj/item/handcuffs = 8, - /obj/item/grenade/flashbang = 4, - /obj/item/grenade/chem_grenade/teargas = 4, - /obj/item/device/flash = 5, - /obj/item/reagent_containers/food/snacks/donut/normal = 12, - /obj/item/storage/box/evidence = 6) - contraband = list(/obj/item/clothing/glasses/sunglasses = 2,/obj/item/storage/box/donut = 2) - -/obj/machinery/vending/hydronutrients - name = "\improper NutriMax" - 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" - icon_deny = "nutri-deny" - icon_vend = "nutri-vend" - vend_delay = 26 - base_type = /obj/machinery/vending/hydronutrients - products = list(/obj/item/reagent_containers/glass/bottle/eznutrient = 6,/obj/item/reagent_containers/glass/bottle/left4zed = 4,/obj/item/reagent_containers/glass/bottle/robustharvest = 3,/obj/item/plantspray/pests = 20, - /obj/item/reagent_containers/syringe = 5,/obj/item/storage/plants = 5) - premium = list(/obj/item/reagent_containers/glass/bottle/ammonia = 10,/obj/item/reagent_containers/glass/bottle/diethylamine = 5) - idle_power_usage = 211 //refrigerator - believe it or not, this is actually the average power consumption of a refrigerated vending machine according to NRCan. - -/obj/machinery/vending/hydronutrients/generic - icon_state = "nutri_generic" - icon_vend = "nutri_generic-vend" - icon_deny = "nutri_generic-deny" - -/obj/machinery/vending/hydroseeds - name = "\improper MegaSeed Servitor" - desc = "When you need seeds fast!" - product_slogans = "THIS'S WHERE TH' SEEDS LIVE! GIT YOU SOME!;Hands down the best seed selection this half of the galaxy!;Also certain mushroom varieties available, more for experts! Get certified today!" - product_ads = "We like plants!;Grow some crops!;Grow, baby, growww!;Aw h'yeah son!" - icon_state = "seeds" - icon_vend = "seeds-vend" - icon_deny = "seeds-deny" - vend_delay = 13 - base_type = /obj/machinery/vending/hydroseeds - products = list(/obj/item/seeds/bananaseed = 3,/obj/item/seeds/berryseed = 3,/obj/item/seeds/carrotseed = 3,/obj/item/seeds/chantermycelium = 3,/obj/item/seeds/chiliseed = 3, - /obj/item/seeds/cornseed = 3, /obj/item/seeds/eggplantseed = 3, /obj/item/seeds/potatoseed = 3, /obj/item/seeds/replicapod = 3,/obj/item/seeds/soyaseed = 3, - /obj/item/seeds/sunflowerseed = 3,/obj/item/seeds/tomatoseed = 3,/obj/item/seeds/towermycelium = 3,/obj/item/seeds/wheatseed = 3,/obj/item/seeds/appleseed = 3, - /obj/item/seeds/poppyseed = 3,/obj/item/seeds/sugarcaneseed = 3,/obj/item/seeds/ambrosiavulgarisseed = 3,/obj/item/seeds/peanutseed = 3,/obj/item/seeds/whitebeetseed = 3,/obj/item/seeds/watermelonseed = 3,/obj/item/seeds/limeseed = 3, - /obj/item/seeds/lemonseed = 3,/obj/item/seeds/lettuceseed = 3,/obj/item/seeds/orangeseed = 3,/obj/item/seeds/grassseed = 3,/obj/item/seeds/cocoapodseed = 3,/obj/item/seeds/plumpmycelium = 2, - /obj/item/seeds/cabbageseed = 3,/obj/item/seeds/grapeseed = 3,/obj/item/seeds/pumpkinseed = 3,/obj/item/seeds/cherryseed = 3,/obj/item/seeds/plastiseed = 3,/obj/item/seeds/riceseed = 3,/obj/item/seeds/lavenderseed = 3) - contraband = list(/obj/item/seeds/amanitamycelium = 2,/obj/item/seeds/glowshroom = 2,/obj/item/seeds/libertymycelium = 2,/obj/item/seeds/mtearseed = 2, - /obj/item/seeds/nettleseed = 2,/obj/item/seeds/reishimycelium = 2,/obj/item/seeds/reishimycelium = 2,/obj/item/seeds/shandseed = 2,) - premium = list(/obj/item/reagent_containers/spray/waterflower = 1) - -/obj/machinery/vending/hydroseeds/vend(var/datum/stored_items/vending_products/R, mob/user) - ..() - flick("[icon_state]-shelf[rand(3)]", src) - -/obj/machinery/vending/hydroseeds/generic - icon_state = "seeds_generic" - icon_vend = "seeds_generic-vend" - icon_deny = "seeds_generic-deny" - -/** - * Populate hydroseeds product_records - * - * This needs to be customized to fetch the actual names of the seeds, otherwise - * the machine would simply list "packet of seeds" times 20 - */ -/obj/machinery/vending/hydroseeds/build_inventory() - var/list/all_products = list( - list(src.products, CAT_NORMAL), - list(src.contraband, CAT_HIDDEN), - list(src.premium, CAT_COIN)) - - for(var/current_list in all_products) - var/category = current_list[2] - - for(var/entry in current_list[1]) - var/obj/item/seeds/S = new entry(src) - var/name = S.name - var/datum/stored_items/vending_products/product = new/datum/stored_items/vending_products(src, entry, name) - - product.price = (entry in src.prices) ? src.prices[entry] : 0 - product.amount = (current_list[1][entry]) ? current_list[1][entry] : 1 - product.category = category - - src.product_records.Add(product) - -/obj/machinery/vending/magivend - name = "\improper MagiVend" - desc = "A magic vending machine." - icon_state = "MagiVend" - icon_deny = "MagiVend-deny" - icon_vend = "MagiVend-vend" - product_slogans = "Sling spells the proper way with MagiVend!;Be your own Houdini! Use MagiVend!" - vend_delay = 15 - vend_reply = "Have an enchanted evening!" - product_ads = "FJKLFJSD;AJKFLBJAKL;1234 LOONIES LOL!;>MFW;Kill them fuckers!;GET DAT FUKKEN DISK;HONK!;EI NATH;Down with Central!;Admin conspiracies since forever!;Space-time bending hardware!" - products = list(/obj/item/clothing/head/wizard = 1,/obj/item/clothing/suit/wizrobe = 1,/obj/item/clothing/head/wizard/red = 1,/obj/item/clothing/suit/wizrobe/red = 1,/obj/item/clothing/shoes/sandal = 1,/obj/item/staff = 2) - -/obj/machinery/vending/dinnerware - name = "\improper Dinnerware" - desc = "A kitchen and restaurant equipment vendor." - product_ads = "Mm, food stuffs!;Food and food accessories.;Get your plates!;You like forks?;I like forks.;Woo, utensils.;You don't really need these..." - icon_state = "dinnerware" - icon_vend = "dinnerware-vend" - icon_deny = "dinnerware-deny" - base_type = /obj/machinery/vending/dinnerware - products = list( - /obj/item/reagent_containers/glass/beaker/bowl =2, - /obj/item/tray = 8, - /obj/item/material/knife/kitchen = 3, - /obj/item/material/kitchen/rollingpin = 2, - /obj/item/serving_bowl = 20, - /obj/item/reagent_containers/food/drinks/pitcher = 2, - /obj/item/reagent_containers/food/drinks/flask/vacuumflask = 4, - /obj/item/reagent_containers/food/drinks/glass2/coffeecup = 8, - /obj/item/reagent_containers/food/drinks/glass2/coffeecup/teacup = 8, - /obj/item/reagent_containers/food/drinks/glass2/carafe = 2, - /obj/item/reagent_containers/food/drinks/glass2/square = 8, - /obj/item/clothing/suit/chef/classic = 2, - /obj/item/storage/lunchbox = 3, - /obj/item/storage/lunchbox/heart = 3, - /obj/item/storage/lunchbox/cat = 3, - /obj/item/storage/lunchbox/nt = 3, - /obj/item/storage/lunchbox/mars = 3, - /obj/item/storage/lunchbox/cti = 3, - /obj/item/storage/lunchbox/nymph = 3, - /obj/item/storage/lunchbox/syndicate = 3, - /obj/item/storage/lunchbox/dais = 3, - /obj/item/storage/lunchbox/picnic = 3, - /obj/item/material/knife/kitchen/cleaver = 1) - - - contraband = list(/obj/item/material/knife/kitchen/cleaver/bronze = 1) - -/obj/machinery/vending/sovietsoda - name = "\improper BODA" - desc = "An old soda vending machine. How could this have got here?" - icon_state = "sovietsoda" - icon_vend = "sovietsoda-vend" - icon_deny = "sovietsoda-deny" - base_type = /obj/machinery/vending/sovietsoda - product_ads = "For Tsar and Country.;Have you fulfilled your nutrition quota today?;Very nice!;We are simple people, for this is all we eat.;If there is a person, there is a problem. If there is no person, then there is no problem." - products = list(/obj/item/reagent_containers/food/drinks/cans/syndicola = 50, - /obj/item/reagent_containers/food/drinks/cans/syndicolax = 30, - /obj/item/reagent_containers/food/drinks/cans/artbru = 20, - /obj/item/reagent_containers/food/drinks/glass2/square/boda = 20, - /obj/item/reagent_containers/food/drinks/glass2/square/bodaplus = 20) - contraband = list(/obj/item/reagent_containers/food/drinks/bottle/space_up = 300) // TODO Russian cola can - idle_power_usage = 211 //refrigerator - believe it or not, this is actually the average power consumption of a refrigerated vending machine according to NRCan. - -/obj/machinery/vending/tool - name = "\improper YouTool" - desc = "Tools for tools." - icon_state = "tool" - icon_deny = "tool-deny" - icon_vend = "tool-vend" - vend_delay = 11 - base_type = /obj/machinery/vending/tool - products = list(/obj/item/stack/cable_coil/random = 10,/obj/item/crowbar = 5,/obj/item/weldingtool = 3,/obj/item/wirecutters = 5, - /obj/item/wrench = 5,/obj/item/device/scanner/gas = 5,/obj/item/device/t_scanner = 5,/obj/item/screwdriver = 5, - /obj/item/device/flashlight/flare/glowstick = 3, /obj/item/device/flashlight/flare/glowstick/red = 3, /obj/item/tape_roll = 8) - contraband = list(/obj/item/weldingtool/hugetank = 2, /obj/item/clothing/gloves/insulated = 1) - premium = list(/obj/item/clothing/gloves/insulated/cheap = 2) - -/obj/machinery/vending/tool/adherent - name = "\improper Adherent Tool Dispenser" - desc = "This looks like a heavily modified vending machine. It contains technology that doesn't appear to be human in origin." - product_ads = "\[C#\]\[Cb\]\[Db\]. \[Ab\]\[A#\]\[Bb\]. \[E\]\[C\]\[Gb\]\[B#\]. \[C#\].;\[Cb\]\[A\]\[F\]\[Cb\]\[C\]\[E\]\[Cb\]\[E\]\[Fb\]. \[G#\]\[C\]\[Ab\]\[A\]\[C#\]\[B\]. \[Eb\]\[choral\]. \[E#\]\[C#\]\[Ab\]\[E\]\[C#\]\[Fb\]\[Cb\]\[F#\]\[C#\]\[Gb\]." - icon_state = "adh-tool" - icon_deny = "adh-tool-deny" - icon_vend = "adh-tool-vend" - vend_delay = 5 - products = list(/obj/item/weldingtool/electric/crystal = 5, - /obj/item/wirecutters/crystal = 5, - /obj/item/screwdriver/crystal = 5, - /obj/item/crowbar/crystal = 5, - /obj/item/wrench/crystal = 5, - /obj/item/device/multitool/crystal = 5, - /obj/item/storage/belt/utility/crystal = 5, - /obj/item/storage/toolbox/crystal = 5) - -/obj/machinery/vending/tool/adherent/vend(var/datum/stored_items/vending_products/R, var/mob/living/carbon/user) - if((istype(user) && user.species.name == SPECIES_ADHERENT) || emagged) - . = ..() - else - to_chat(user, "The vending machine emits a discordant note, and a small hole blinks several times. It looks like it wants something inserted.") - -/obj/machinery/vending/engivend - name = "\improper Engi-Vend" - desc = "Spare tool vending. What? Did you expect some witty description?" - icon_state = "engivend" - icon_deny = "engivend-deny" - icon_vend = "engivend-vend" - vend_delay = 21 - base_type = /obj/machinery/vending/engivend - req_access = list(list(access_atmospherics,access_engine_equip)) - products = list(/obj/item/clothing/glasses/meson = 2,/obj/item/device/multitool = 4,/obj/item/device/geiger = 4,/obj/item/airlock_electronics = 10,/obj/item/intercom_electronics = 10,/obj/item/module/power_control = 10,/obj/item/airalarm_electronics = 10,/obj/item/cell/standard = 10,/obj/item/clamp = 10) - contraband = list(/obj/item/cell/high = 3) - premium = list(/obj/item/storage/belt/utility = 3) - -//This one's from bay12 -/obj/machinery/vending/engineering - name = "\improper Robco Tool Maker" - desc = "Everything you need for do-it-yourself repair." - icon_state = "engi" - icon_deny = "engi-deny" - icon_vend = "engi-vend" - base_type = /obj/machinery/vending/engineering - req_access = list(list(access_atmospherics,access_engine_equip)) - products = list(/obj/item/reagent_containers/food/drinks/bottle/oiljug = 6, - /obj/item/storage/belt/utility = 4,/obj/item/clothing/glasses/meson = 4,/obj/item/clothing/gloves/insulated = 4, /obj/item/screwdriver = 12, - /obj/item/crowbar = 12,/obj/item/wirecutters = 12,/obj/item/device/multitool = 12,/obj/item/wrench = 12,/obj/item/device/t_scanner = 12, - /obj/item/cell/standard = 8, /obj/item/weldingtool = 8,/obj/item/clothing/head/welding = 8, - /obj/item/light/tube = 10,/obj/item/stock_parts/scanning_module = 5,/obj/item/stock_parts/micro_laser = 5, - /obj/item/stock_parts/matter_bin = 5,/obj/item/stock_parts/manipulator = 5,/obj/item/stock_parts/console_screen = 5, - /obj/item/stock_parts/capacitor = 5, /obj/item/stock_parts/keyboard = 5, /obj/item/stock_parts/power/apc/buildable = 5) - contraband = list(/obj/item/rcd = 1, /obj/item/rcd_ammo = 5) - // There was an incorrect entry (cablecoil/power). I improvised to cablecoil/heavyduty. - // Another invalid entry, /obj/item/circuitry. I don't even know what that would translate to, removed it. - // The original products list wasn't finished. The ones without given quantities became quantity 5. -Sayu - -//This one's from bay12 -/obj/machinery/vending/robotics - name = "\improper Robotech Deluxe" - desc = "All the tools you need to create your own robot army." - icon_state = "robotics" - icon_deny = "robotics-deny" - icon_vend = "robotics-vend" - req_access = list(access_robotics) - base_type = /obj/machinery/vending/robotics - products = list(/obj/item/reagent_containers/food/drinks/bottle/oiljug = 5, - /obj/item/stack/cable_coil = 4,/obj/item/device/flash/synthetic = 4,/obj/item/cell/standard = 4,/obj/item/device/scanner/health = 2, - /obj/item/scalpel = 1,/obj/item/circular_saw = 1,/obj/item/tank/anesthetic = 2,/obj/item/clothing/mask/breath/medical = 5, - /obj/item/screwdriver = 2,/obj/item/crowbar = 2) - contraband = list(/obj/item/device/flash = 2) - -//FOR ACTORS GUILD - mainly props that cannot be spawned otherwise -/obj/machinery/vending/props - name = "prop dispenser" - desc = "All the props an actor could need. Probably." - icon_state = "theater" - icon_vend = "theater-vend" - icon_deny = "theater-deny" - products = list(/obj/structure/flora/pottedplant = 2, /obj/item/device/flashlight/lamp = 2, /obj/item/device/flashlight/lamp/green = 2, /obj/item/reagent_containers/food/drinks/jar = 1, - /obj/item/nullrod = 1, /obj/item/toy/cultsword = 4, /obj/item/toy/katana = 2) - -/obj/machinery/vending/props/on_update_icon() - ..() - if(!(stat & NOPOWER)) - overlays += image(icon, "[initial(icon_state)]-overlay") - -//FOR ACTORS GUILD - Containers -/obj/machinery/vending/containers - name = "container dispenser" - desc = "A container that dispenses containers." - icon_state = "robotics" - base_type = /obj/machinery/vending/containers - products = list(/obj/structure/closet/crate/freezer = 2, /obj/structure/closet = 3, /obj/structure/closet/crate = 3) - -/obj/machinery/vending/fashionvend - name = "\improper Smashing Fashions" - desc = "For all your cheap knockoff needs." - product_slogans = "Look smashing for your darling!;Be rich! Dress rich!" - icon_state = "theater" - vend_delay = 15 - base_type = /obj/machinery/vending/fashionvend - vend_reply = "Absolutely smashing!" - product_ads = "Impress the love of your life!;Don't look poor, look rich!;100% authentic designers!;All sales are final!;Lowest prices guaranteed!" - products = list(/obj/item/mirror = 8, - /obj/item/haircomb = 8, - /obj/item/clothing/glasses/monocle = 5, - /obj/item/clothing/glasses/sunglasses = 5, - /obj/item/lipstick = 3, - /obj/item/lipstick/black = 3, - /obj/item/lipstick/purple = 3, - /obj/item/lipstick/jade = 3, - /obj/item/storage/wallet/poly = 2) - contraband = list(/obj/item/clothing/glasses/eyepatch = 2, /obj/item/clothing/accessory/horrible = 2) - premium = list(/obj/item/clothing/mask/smokable/pipe = 3) - prices = list(/obj/item/mirror = 60, - /obj/item/haircomb = 40, - /obj/item/clothing/glasses/monocle = 700, - /obj/item/clothing/glasses/sunglasses = 500, - /obj/item/lipstick = 100, - /obj/item/lipstick/black = 100, - /obj/item/lipstick/purple = 100, - /obj/item/lipstick/jade = 100, - /obj/item/storage/wallet/poly = 600 - ) -// eliza's attempt at a new vending machine -/obj/machinery/vending/games - name = "\improper Good Clean Fun" - desc = "Vends things that the CO and SEA are probably not going to appreciate you fiddling with instead of your job..." - vend_delay = 15 - product_slogans = "Escape to a fantasy world!;Fuel your gambling addiction!;Ruin your friendships!" - product_ads = "Elves and dwarves!;Totally not satanic!;Fun times forever!" - icon_state = "games" - icon_deny = "games-deny" - icon_vend = "games-vend" - base_type = /obj/machinery/vending/games - products = list(/obj/item/toy/blink = 5, /obj/item/toy/eightball = 8, /obj/item/deck/cards = 5, /obj/item/deck/tarot = 5, /obj/item/pack/cardemon = 6, /obj/item/pack/spaceball = 6, /obj/item/storage/pill_bottle/dice_nerd = 5, /obj/item/storage/pill_bottle/dice = 5, /obj/item/storage/box/checkers = 2, /obj/item/storage/box/checkers/chess/red = 2, /obj/item/storage/box/checkers/chess = 2, /obj/item/board = 2, /obj/item/storage/fancy/crayons = 3) - prices = list(/obj/item/toy/blink = 3, /obj/item/toy/eightball = 10, /obj/item/deck/tarot = 3, /obj/item/deck/cards = 3, /obj/item/pack/cardemon = 5, /obj/item/pack/spaceball = 5, /obj/item/storage/pill_bottle/dice_nerd = 6, /obj/item/storage/pill_bottle/dice = 6, /obj/item/storage/box/checkers = 10, /obj/item/storage/box/checkers/chess/red = 10, /obj/item/storage/box/checkers/chess = 10, /obj/item/board = 2, /obj/item/storage/fancy/crayons = 3) - premium = list(/obj/item/spirit_board = 1) - contraband = list(/obj/item/reagent_containers/spray/waterflower = 2, /obj/item/storage/box/snappops = 3, /obj/item/toy/sword = 3, /obj/item/toy/katana = 3, /obj/item/gun/projectile/revolver/capgun = 1, /obj/item/ammo_magazine/caps = 4) - -//Cajoes/Kyos/BloodyMan's Lavatory Articles Dispensiary - -/obj/machinery/vending/lavatory - name = "\improper Lavatory Essentials" - desc = "Vends things that make you less reviled in the work-place!" - vend_delay = 15 - product_slogans = "Take a shower you hippie.;Get a haircut, hippie!;Reeking of vox taint? Take a shower!" - - icon_state = "lavatory" - icon_deny = "lavatory-deny" - icon_vend = "lavatory-vend" - base_type = /obj/machinery/vending/lavatory - products = list(/obj/item/soap = 12, - /obj/item/mirror = 8, - /obj/item/haircomb/random = 8, - /obj/item/haircomb/brush = 4, - /obj/item/towel/random = 6, - /obj/item/reagent_containers/spray/cleaner/deodorant = 5 - ) - contraband = list(/obj/item/inflatable_duck = 1) - prices = list(/obj/item/soap = 20, - /obj/item/mirror = 40, - /obj/item/haircomb/random = 40, - /obj/item/haircomb/brush = 80, - /obj/item/towel/random = 50, - /obj/item/reagent_containers/spray/cleaner/deodorant = 30 - ) - -//a food variant of the boda machine - It carries slavic themed foods.. Mostly beer snacks -/obj/machinery/vending/snix - name = "\improper Snix" - desc = "An old snack vending machine, how did it get here? And are the snacks still good?" - vend_delay = 30 - base_type = /obj/machinery/vending/snix - product_slogans = "Snix!" - - icon_state = "snix" - icon_vend = "snix-vend" - icon_deny = "snix-deny" - products = list(/obj/item/reagent_containers/food/snacks/semki = 7, - /obj/item/reagent_containers/food/snacks/canned/caviar = 7, - /obj/item/reagent_containers/food/snacks/squid = 7, - /obj/item/reagent_containers/food/snacks/croutons = 7, - /obj/item/reagent_containers/food/snacks/salo = 7, - /obj/item/reagent_containers/food/snacks/driedfish = 7, - /obj/item/reagent_containers/food/snacks/pistachios = 7, - ) - - contraband = list(/obj/item/reagent_containers/food/snacks/canned/caviar/true = 1) - -/obj/machinery/vending/snix/on_update_icon() - ..() - if(!(stat & NOPOWER)) - overlays += image(icon, "[initial(icon_state)]-fan") - -/obj/machinery/vending/sol - name = "\improper Mars-Mart" - desc = "A SolCentric vending machine dispensing treats from home." - vend_delay = 30 - product_slogans = "A taste of home!" - icon_state = "solsnack" - icon_vend = "solsnack-vend" - icon_deny = "solsnack-deny" - products = list(/obj/item/reagent_containers/food/snacks/lunacake = 8, - /obj/item/reagent_containers/food/snacks/lunacake/mochicake = 8, - /obj/item/reagent_containers/food/snacks/lunacake/mooncake = 8, - /obj/item/reagent_containers/food/snacks/pluto = 8, - /obj/item/reagent_containers/food/snacks/triton = 8, - /obj/item/reagent_containers/food/snacks/saturn = 8, - /obj/item/reagent_containers/food/snacks/jupiter = 8, - /obj/item/reagent_containers/food/snacks/mars = 8, - /obj/item/reagent_containers/food/snacks/venus = 8, - /obj/item/reagent_containers/food/snacks/oort = 8 - ) - - prices = list(/obj/item/reagent_containers/food/snacks/lunacake = 12, - /obj/item/reagent_containers/food/snacks/lunacake/mochicake = 12, - /obj/item/reagent_containers/food/snacks/lunacake/mooncake = 12, - /obj/item/reagent_containers/food/snacks/pluto = 12, - /obj/item/reagent_containers/food/snacks/triton = 12, - /obj/item/reagent_containers/food/snacks/saturn = 12, - /obj/item/reagent_containers/food/snacks/jupiter = 12, - /obj/item/reagent_containers/food/snacks/mars = 12, - /obj/item/reagent_containers/food/snacks/venus = 12, - /obj/item/reagent_containers/food/snacks/oort = 12 - ) - -/obj/machinery/vending/weeb - name = "\improper Nippon-tan!" - desc = "A distressingly ethnic vending machine loaded with high sucrose low calorie for lack of better words snacks." - vend_delay = 30 - product_slogans = "Konnichiwa gaijin senpai! ;Notice me senpai!; Kawaii-desu!" - icon_state = "weeb" - icon_vend = "weeb-vend" - icon_deny = "weeb-deny" - products = list(/obj/item/reagent_containers/food/snacks/weebonuts = 8, - /obj/item/reagent_containers/food/snacks/ricecake = 8, - /obj/item/reagent_containers/food/snacks/dango = 8, - /obj/item/reagent_containers/food/snacks/pokey = 8, - /obj/item/reagent_containers/food/snacks/chocobanana = 8 - ) - - prices = list(/obj/item/reagent_containers/food/snacks/weebonuts = 80, - /obj/item/reagent_containers/food/snacks/ricecake = 80, - /obj/item/reagent_containers/food/snacks/dango = 80, - /obj/item/reagent_containers/food/snacks/pokey = 80, - /obj/item/reagent_containers/food/snacks/chocobanana = 80 - ) - -/obj/machinery/vending/weeb/on_update_icon() - ..() - if(!(stat & NOPOWER)) - overlays += image(icon, "[initial(icon_state)]-fan") - -/obj/machinery/vending/hotfood - name = "\improper Hot Foods" - desc = "An old vending machine promising 'hot foods'. You doubt any of its contents are still edible." - vend_delay = 40 - base_type = /obj/machinery/vending/hotfood - - icon_state = "hotfood" - icon_deny = "hotfood-deny" - icon_vend = "hotfood-vend" - products = list(/obj/item/reagent_containers/food/snacks/old/pizza = 1, - /obj/item/reagent_containers/food/snacks/old/burger = 1, - /obj/item/reagent_containers/food/snacks/old/hamburger = 1, - /obj/item/reagent_containers/food/snacks/old/fries = 1, - /obj/item/reagent_containers/food/snacks/old/hotdog = 1, - /obj/item/reagent_containers/food/snacks/old/taco = 1 - ) - -/obj/machinery/vending/hotfood/on_update_icon() - ..() - if(!(stat & NOPOWER)) - overlays += image(icon, "[initial(icon_state)]-heater") - - -/obj/machinery/vending/mredispenser - name = "mre-dispenser" - desc = "A Vending machine filled with MRE's." - icon_state = "mrevend" - icon_deny = "mrevend-deny" - icon_vend = "mrevend-vend" - products = list( - /obj/item/storage/mre = 2, - /obj/item/storage/mre/menu2 = 2, - /obj/item/storage/mre/menu3 = 2, - /obj/item/storage/mre/menu4 = 2, - /obj/item/storage/mre/menu5 = 2, - /obj/item/storage/mre/menu6 = 2, - /obj/item/storage/mre/menu7 = 2, - /obj/item/storage/mre/menu8 = 2, - /obj/item/storage/mre/menu9 = 10, - /obj/item/storage/mre/menu10 = 10 - ) - - contraband = list( - /obj/item/storage/mre/menu11 = 5, - /obj/item/reagent_containers/food/snacks/liquidfood = 5 - ) - vend_delay = 15 - idle_power_usage = 211 - product_slogans = ";STARFIGHTER TESTED!, STARFIGHTER RECOMMENDED!, STARFIGHTER APPROVED!;YOU ARE NOT ALLOWED A JELLY DOUGHNUT!;YOU DONT WANT TO DIE HUNGRY SOLDIER!" - product_ads = "Everything the body needs!;Now transfat free;Vegan options are available.;Rated for all known species!" - base_type = /obj/machinery/vending/mredispenser - -/obj/machinery/vending/clothboutique - name = "Cloth Boutique" - desc = "A compact shop, that offers fashion clothes." - icon_state = "cloth_shop" - icon_deny = "cloth_shop-deny" - icon_vend = "cloth_shop-vend" - vend_delay = 15 - product_slogans = "Choose glamour death!;Don't tell me, that you're wearing grey jumpsuit!" - products = list( - /obj/item/clothing/under/color = 3, - /obj/item/clothing/under/shortjumpskirt = 3, - /obj/item/clothing/under/color/blackjumpshorts = 3, - /obj/item/clothing/under/sl_suit = 3, - /obj/item/clothing/under/suit_jacket = 3, - /obj/item/clothing/under/suit_jacket/burgundy = 3, - /obj/item/clothing/under/suit_jacket/charcoal = 3, - /obj/item/clothing/under/suit_jacket/checkered = 3, - /obj/item/clothing/under/suit_jacket/really_black = 3, - /obj/item/clothing/under/suit_jacket/female = 3, - /obj/item/clothing/under/gentlesuit = 3, - /obj/item/clothing/under/suit_jacket/navy = 3, - /obj/item/clothing/under/lawyer/oldman = 3, - /obj/item/clothing/under/lawyer/purpsuit = 3, - /obj/item/clothing/under/suit_jacket/red = 3, - /obj/item/clothing/under/lawyer/red = 3, - /obj/item/clothing/under/lawyer/black = 3, - /obj/item/clothing/under/suit_jacket/tan = 3, - /obj/item/clothing/under/scratch = 3, - /obj/item/clothing/under/lawyer/bluesuit = 3, - /obj/item/clothing/under/blazer = 3, - /obj/item/clothing/under/blackjumpskirt = 3, - /obj/item/clothing/under/kilt = 3, - /obj/item/clothing/under/sundress_white = 3, - /obj/item/clothing/under/dress/dress_fire = 3, - /obj/item/clothing/under/dress/dress_green = 3, - /obj/item/clothing/under/dress/dress_orange = 3, - /obj/item/clothing/under/dress/dress_pink = 3, - /obj/item/clothing/under/dress/dress_purple = 3, - /obj/item/clothing/under/sundress = 3, - /obj/item/clothing/suit/storage/toggle/hoodie/cti = 3, - /obj/item/clothing/suit/storage/toggle/hoodie/mu = 3, - /obj/item/clothing/suit/storage/toggle/hoodie/nt = 3, - /obj/item/clothing/suit/storage/toggle/hoodie/smw = 3, - /obj/item/clothing/suit/storage/toggle/bomber = 3, - /obj/item/clothing/suit/storage/leather_jacket/nanotrasen = 3, - /obj/item/clothing/suit/storage/toggle/brown_jacket/nanotrasen = 3, - /obj/item/clothing/suit/storage/leather_jacket = 3, - /obj/item/clothing/suit/storage/toggle/brown_jacket = 3, - /obj/item/clothing/suit/storage/mbill = 3, - /obj/item/clothing/glasses/green = 3, - /obj/item/clothing/glasses/hipster = 3, - /obj/item/clothing/glasses/sunglasses = 3, - /obj/item/clothing/glasses/aviators_black = 3, - /obj/item/clothing/glasses/aviators_silver = 3, - /obj/item/clothing/glasses/aviators_gold = 3, - /obj/item/clothing/glasses/aviators_rose = 3, - /obj/item/clothing/shoes/jackboots = 3, - /obj/item/clothing/shoes/workboots = 3, - /obj/item/clothing/shoes/dutyboots = 3, - /obj/item/clothing/shoes/jungleboots = 3, - /obj/item/clothing/shoes/desertboots = 3, - /obj/item/clothing/shoes/black = 3, - /obj/item/clothing/shoes/blue = 3, - /obj/item/clothing/shoes/brown = 3, - /obj/item/clothing/shoes/laceup = 3, - /obj/item/clothing/shoes/dress/white = 3, - /obj/item/clothing/shoes/green = 3, - /obj/item/clothing/shoes/leather = 3, - /obj/item/clothing/shoes/orange = 3, - /obj/item/clothing/shoes/purple = 3, - /obj/item/clothing/shoes/rainbow = 3, - /obj/item/clothing/shoes/red = 3, - /obj/item/clothing/shoes/white = 3, - /obj/item/clothing/shoes/yellow = 3, - /obj/item/clothing/gloves/color/evening = 3, - /obj/item/clothing/head/soft/black = 3, - /obj/item/clothing/head/soft/blue = 3, - /obj/item/clothing/head/soft/green = 3, - /obj/item/clothing/head/soft/grey = 3, - /obj/item/clothing/head/mailman = 3, - /obj/item/clothing/head/soft/orange = 3, - /obj/item/clothing/head/soft/purple = 3, - /obj/item/clothing/head/soft/rainbow = 3, - /obj/item/clothing/head/soft/red = 3, - /obj/item/clothing/head/soft/mime = 3, - /obj/item/clothing/head/soft/yellow = 3, - /obj/item/clothing/head/hairflower = 3, - /obj/item/clothing/head/hairflower/blue = 3, - /obj/item/clothing/head/hairflower/pink = 3, - /obj/item/clothing/head/hairflower/yellow = 3, - /obj/item/clothing/head/boaterhat = 3, - /obj/item/clothing/head/bowler = 3, - /obj/item/clothing/head/fedora = 3, - /obj/item/clothing/head/feathertrilby = 3, - /obj/item/clothing/head/fez = 3, - /obj/item/clothing/head/that = 3, - /obj/item/clothing/head/det = 3, - /obj/item/clothing/head/det/grey = 3, - /obj/item/clothing/head/panama = 3 - ) - prices = list( - /obj/item/clothing/under/color = 30, - /obj/item/clothing/under/shortjumpskirt = 30, - /obj/item/clothing/under/color/blackjumpshorts = 30, - /obj/item/clothing/under/sl_suit = 30, - /obj/item/clothing/under/suit_jacket = 30, - /obj/item/clothing/under/suit_jacket/burgundy = 30, - /obj/item/clothing/under/suit_jacket/charcoal = 30, - /obj/item/clothing/under/suit_jacket/checkered = 30, - /obj/item/clothing/under/suit_jacket/really_black = 30, - /obj/item/clothing/under/suit_jacket/female = 30, - /obj/item/clothing/under/gentlesuit = 30, - /obj/item/clothing/under/suit_jacket/navy = 30, - /obj/item/clothing/under/lawyer/oldman = 30, - /obj/item/clothing/under/lawyer/purpsuit = 30, - /obj/item/clothing/under/suit_jacket/red = 30, - /obj/item/clothing/under/lawyer/red = 30, - /obj/item/clothing/under/lawyer/black = 30, - /obj/item/clothing/under/suit_jacket/tan = 30, - /obj/item/clothing/under/scratch = 30, - /obj/item/clothing/under/lawyer/bluesuit = 30, - /obj/item/clothing/under/blazer = 30, - /obj/item/clothing/under/blackjumpskirt = 30, - /obj/item/clothing/under/kilt = 30, - /obj/item/clothing/under/sundress_white = 30, - /obj/item/clothing/under/dress/dress_fire = 30, - /obj/item/clothing/under/dress/dress_green = 30, - /obj/item/clothing/under/dress/dress_orange = 30, - /obj/item/clothing/under/dress/dress_pink = 30, - /obj/item/clothing/under/dress/dress_purple = 30, - /obj/item/clothing/under/sundress = 30, - /obj/item/clothing/suit/storage/toggle/hoodie/cti = 30, - /obj/item/clothing/suit/storage/toggle/hoodie/mu = 30, - /obj/item/clothing/suit/storage/toggle/hoodie/nt = 30, - /obj/item/clothing/suit/storage/toggle/hoodie/smw = 30, - /obj/item/clothing/suit/storage/toggle/bomber = 30, - /obj/item/clothing/suit/storage/leather_jacket/nanotrasen = 30, - /obj/item/clothing/suit/storage/toggle/brown_jacket/nanotrasen = 30, - /obj/item/clothing/suit/storage/leather_jacket = 30, - /obj/item/clothing/suit/storage/toggle/brown_jacket = 30, - /obj/item/clothing/suit/storage/mbill = 30, - /obj/item/clothing/glasses/green = 30, - /obj/item/clothing/glasses/hipster = 30, - /obj/item/clothing/glasses/sunglasses = 30, - /obj/item/clothing/glasses/aviators_black = 30, - /obj/item/clothing/glasses/aviators_silver = 30, - /obj/item/clothing/glasses/aviators_gold = 30, - /obj/item/clothing/glasses/aviators_rose = 30, - /obj/item/clothing/shoes/jackboots = 30, - /obj/item/clothing/shoes/workboots = 30, - /obj/item/clothing/shoes/dutyboots = 30, - /obj/item/clothing/shoes/black = 30, - /obj/item/clothing/shoes/blue = 30, - /obj/item/clothing/shoes/brown = 30, - /obj/item/clothing/shoes/laceup = 30, - /obj/item/clothing/shoes/dress/white = 30, - /obj/item/clothing/shoes/green = 30, - /obj/item/clothing/shoes/leather = 30, - /obj/item/clothing/shoes/orange = 30, - /obj/item/clothing/shoes/purple = 30, - /obj/item/clothing/shoes/rainbow = 30, - /obj/item/clothing/shoes/red = 30, - /obj/item/clothing/shoes/white = 30, - /obj/item/clothing/shoes/yellow = 30, - /obj/item/clothing/gloves/color/evening = 30, - /obj/item/clothing/head/soft/black = 30, - /obj/item/clothing/head/soft/blue = 30, - /obj/item/clothing/head/soft/green = 30, - /obj/item/clothing/head/soft/grey = 30, - /obj/item/clothing/head/mailman = 30, - /obj/item/clothing/head/soft/orange = 30, - /obj/item/clothing/head/soft/purple = 30, - /obj/item/clothing/head/soft/rainbow = 30, - /obj/item/clothing/head/soft/red = 30, - /obj/item/clothing/head/soft/mime = 30, - /obj/item/clothing/head/soft/yellow = 30, - /obj/item/clothing/head/hairflower = 30, - /obj/item/clothing/head/hairflower/blue = 30, - /obj/item/clothing/head/hairflower/pink = 30, - /obj/item/clothing/head/hairflower/yellow = 30, - /obj/item/clothing/head/boaterhat = 30, - /obj/item/clothing/head/bowler = 30, - /obj/item/clothing/head/fedora = 30, - /obj/item/clothing/head/feathertrilby = 30, - /obj/item/clothing/head/fez = 30, - /obj/item/clothing/head/that = 30, - /obj/item/clothing/head/det = 30, - /obj/item/clothing/head/det/grey = 30, - /obj/item/clothing/head/panama = 30 - ) - -/obj/machinery/vending/clothboutique/on_update_icon() - if( !(stat & NOPOWER) ) - overlays += image(src.icon, "[initial(icon_state)]-overlay") diff --git a/code/game/machinery/vending_deconstruction.dm b/code/game/machinery/vending_deconstruction.dm deleted file mode 100644 index a9bf24b6dec2c..0000000000000 --- a/code/game/machinery/vending_deconstruction.dm +++ /dev/null @@ -1,52 +0,0 @@ -// Dumping the stock of a vending machine causes lots of items and client lag, so use this thing instead. - -/obj/structure/vending_refill - name = "vendor restock" - desc = "A large sealed container containing items sold from a vending machine." - icon = 'icons/obj/closets/bases/large_crate.dmi' - icon_state = "base" - color = COLOR_BEASTY_BROWN - w_class = ITEM_SIZE_HUGE - var/expected_type - var/list/product_records - -/obj/structure/vending_refill/Destroy() - QDEL_NULL_LIST(product_records) - . = ..() - -/obj/structure/vending_refill/get_lore_info() - return "Vendor restock containers are notoriously difficult to open, representing the pinnacle of humanity's antitheft technologies." - -/obj/structure/vending_refill/get_mechanics_info() - return "Drag to a vendor to restock. Generally can not be opened." - -/obj/structure/vending_refill/MouseDrop(obj/machinery/vending/over) - if(!CanMouseDrop(over, usr)) - return - if(!istype(over)) - return ..() - var/target_type = over.base_type || over.type - if(!ispath(expected_type, target_type)) - return ..() - - for(var/datum/stored_items/R in product_records) - for(var/datum/stored_items/record in over.product_records) - if(record.merge(R)) - break - if(!QDELETED(R)) - R.migrate(over) - over.product_records += R - - product_records = null - SSnano.update_uis(over) - qdel(src) - -/obj/machinery/vending/dismantle() - var/obj/structure/vending_refill/dump = new(loc) - dump.SetName("[dump.name] ([name])") - dump.expected_type = base_type || type - for(var/datum/stored_items/vending_products/R in product_records) - R.migrate(dump) - dump.product_records = product_records - product_records = null - . = ..() \ No newline at end of file diff --git a/code/game/machinery/vitals_monitor.dm b/code/game/machinery/vitals_monitor.dm deleted file mode 100644 index 2e46f673dbfc1..0000000000000 --- a/code/game/machinery/vitals_monitor.dm +++ /dev/null @@ -1,265 +0,0 @@ -#define PULSE_ALERT 1 -#define BRAIN_ALERT 2 -#define LUNGS_ALERT 3 - -/obj/machinery/vitals_monitor - name = "vitals monitor" - desc = "A bulky yet mobile machine, showing some odd graphs." - icon = 'icons/obj/heartmonitor.dmi' - icon_state = "base" - anchored = FALSE - power_channel = EQUIP - idle_power_usage = 10 - active_power_usage = 100 - stat_immune = NOINPUT - uncreated_component_parts = null - construct_state = /decl/machine_construction/default/panel_closed - - var/mob/living/carbon/human/victim - var/obj/machinery/optable/connected_optable = null - var/beep = TRUE - - //alert stuff - var/read_alerts = TRUE - var/alert_cooldown = 50 // buffer to prevent rapid changes in state - var/last_alert_time = 0 - var/list/alerts = null - var/list/last_alert = null - -/obj/machinery/vitals_monitor/Initialize() - . = ..() - alerts = new /list(3) - last_alert = new /list(3) - for(dir in list(NORTH,EAST,SOUTH,WEST)) - connected_optable = locate(/obj/machinery/optable, get_step(src, dir)) - if (connected_optable) - connected_optable.connected_monitor = src - break - -/obj/machinery/vitals_monitor/Destroy() - victim = null - update_optable() - . = ..() - -/obj/machinery/vitals_monitor/examine(mob/user) - . = ..() - if(victim) - if(stat & NOPOWER) - to_chat(user, SPAN_NOTICE("It's unpowered.")) - return - to_chat(user, SPAN_NOTICE("Vitals of [victim]:")) - to_chat(user, SPAN_NOTICE("Pulse: [victim.get_pulse(GETPULSE_TOOL)]")) - - var/brain_activity = "none" - var/obj/item/organ/internal/brain/brain = victim.internal_organs_by_name[BP_BRAIN] - if(istype(brain) && victim.stat != DEAD && !(victim.status_flags & FAKEDEATH)) - if(user.skill_check(SKILL_MEDICAL, SKILL_BASIC)) - switch(brain.get_current_damage_threshold()) - if(0 to 2) - brain_activity = "normal" - if(3 to 5) - brain_activity = "weak" - if(6 to INFINITY) - brain_activity = "extremely weak" - else - brain_activity = "some" - to_chat(user, SPAN_NOTICE("Brain activity: [brain_activity]")) - - var/breathing = "none" - var/obj/item/organ/internal/lungs/lungs = victim.internal_organs_by_name[BP_LUNGS] - if(istype(lungs) && !(victim.status_flags & FAKEDEATH)) - if(lungs.breath_fail_ratio < 0.3) - breathing = "normal" - else if(lungs.breath_fail_ratio < 1) - breathing = "shallow" - - to_chat(user, SPAN_NOTICE("Breathing: [breathing]")) - if(connected_optable) - to_chat(user, SPAN_NOTICE("Connected to adjacent [connected_optable].")) - -/obj/machinery/vitals_monitor/Process() - if(QDELETED(victim)) - update_victim() - if(victim && !Adjacent(victim)) - update_victim() - if(connected_optable && !Adjacent(connected_optable)) - update_victim() - update_optable() - if(victim) - update_icon() - -/obj/machinery/vitals_monitor/proc/update_victim(var/new_victim = null) - var/old_victim = victim - victim = new_victim - if(victim) - visible_message(SPAN_NOTICE("\The [src] is now showing data for \the [victim].")) - else - if(old_victim != new_victim) // Protects against qdel edge case. In all other cases we want a message printed. - visible_message(SPAN_NOTICE("\The [src] is no longer showing data from [isnull(old_victim)? "any patient" : "\the [old_victim]"].")) - update_use_power(isnull(victim)? POWER_USE_IDLE : POWER_USE_ACTIVE) - update_icon() - -/obj/machinery/vitals_monitor/proc/update_optable(obj/machinery/optable/new_optable = null) - if(new_optable == connected_optable) - return - if(connected_optable) //gotta clear existing connections first - connected_optable.connected_monitor = null - connected_optable = new_optable - if(connected_optable) - connected_optable.connected_monitor = src - visible_message(SPAN_NOTICE("\The [src] is now relaying information from \the [connected_optable]")) - //In case there's already a patient on the table - update_victim(connected_optable.victim) - else - visible_message(SPAN_NOTICE("\The [src] is no longer relaying data from a connected operating table.")) - -/obj/machinery/vitals_monitor/MouseDrop(over_object, src_location, over_location) - if(!CanMouseDrop(over_object)) - return - update_optable() - if(victim) - update_victim() - else if(ishuman(over_object)) - update_victim(over_object) - else if(istype(over_object, /obj/machinery/optable)) - var/obj/machinery/optable/new_table_connection = over_object - update_optable(new_table_connection) - -/obj/machinery/vitals_monitor/on_update_icon() - overlays.Cut() - if(stat & NOPOWER) - return - overlays += image(icon, icon_state = "screen") - - handle_pulse() - handle_brain() - handle_lungs() - handle_alerts() - -/obj/machinery/vitals_monitor/proc/handle_pulse() - if(!victim) - return - var/obj/item/organ/internal/heart/heart = victim.internal_organs_by_name[BP_HEART] - if(istype(heart) && !BP_IS_ROBOTIC(heart)) - switch(victim.pulse()) - if(PULSE_NONE) - overlays += image(icon, icon_state = "pulse_flatline") - overlays += image(icon, icon_state = "pulse_warning") - if(beep) - playsound(src, 'sound/machines/flatline.ogg', 20) - if(read_alerts) - alerts[PULSE_ALERT] = "Cardiac flatline detected!" - if(PULSE_SLOW, PULSE_NORM,) - overlays += image(icon, icon_state = "pulse_normal") - if(beep) - playsound(src, 'sound/machines/quiet_beep.ogg', 40) - if(PULSE_FAST, PULSE_2FAST) - overlays += image(icon, icon_state = "pulse_veryfast") - if(beep) - playsound(src, 'sound/machines/quiet_double_beep.ogg', 40) - if(PULSE_THREADY) - overlays += image(icon, icon_state = "pulse_thready") - overlays += image(icon, icon_state = "pulse_warning") - if(beep) - playsound(src, 'sound/machines/ekg_alert.ogg', 40) - if(read_alerts) - alerts[PULSE_ALERT] = "Excessive heartbeat! Possible Shock Detected!" - else - overlays += image(icon, icon_state = "pulse_warning") - -/obj/machinery/vitals_monitor/proc/handle_brain() - if(!victim) - return - var/obj/item/organ/internal/brain/brain = victim.internal_organs_by_name[BP_BRAIN] - if(istype(brain) && victim.stat != DEAD && !(victim.status_flags & FAKEDEATH)) - switch(brain.get_current_damage_threshold()) - if(0 to 2) - overlays += image(icon, icon_state = "brain_ok") - if(3 to 5) - overlays += image(icon, icon_state = "brain_bad") - if(read_alerts) - alerts[BRAIN_ALERT] = "Weak brain activity!" - if(6 to INFINITY) - overlays += image(icon, icon_state = "brain_verybad") - overlays += image(icon, icon_state = "brain_warning") - if(read_alerts) - alerts[BRAIN_ALERT] = "Very weak brain activity!" - else - overlays += image(icon, icon_state = "brain_warning") - -/obj/machinery/vitals_monitor/proc/handle_lungs() - if(!victim) - return - var/obj/item/organ/internal/lungs/lungs = victim.internal_organs_by_name[BP_LUNGS] - if(istype(lungs) && !(victim.status_flags & FAKEDEATH)) - if(lungs.breath_fail_ratio < 0.3) - overlays += image(icon, icon_state = "breathing_normal") - else if(lungs.breath_fail_ratio < 1) - overlays += image(icon, icon_state = "breathing_shallow") - if(read_alerts) - alerts[LUNGS_ALERT] = "Abnormal breathing detected!" - else - overlays += image(icon, icon_state = "breathing_warning") - if(read_alerts) - alerts[LUNGS_ALERT] = "Patient is not breathing!" - else - overlays += image(icon, icon_state = "breathing_warning") - -/obj/machinery/vitals_monitor/proc/handle_alerts() - if(!victim || !read_alerts) //Clear our alerts - alerts[PULSE_ALERT] = "" - alerts[BRAIN_ALERT] = "" - alerts[LUNGS_ALERT] = "" - return - if(last_alert_time + alert_cooldown < world.time) - if(alerts[PULSE_ALERT] && alerts[PULSE_ALERT] != last_alert[PULSE_ALERT]) - audible_message(SPAN_WARNING("\The [src] beeps, \"[alerts[PULSE_ALERT]]\"")) - if(alerts[BRAIN_ALERT] && alerts[BRAIN_ALERT] != last_alert[BRAIN_ALERT]) - audible_message(SPAN_WARNING("\The [src] alarms, \"[alerts[BRAIN_ALERT]]\"")) - if(alerts[LUNGS_ALERT] && alerts[LUNGS_ALERT] != last_alert[LUNGS_ALERT]) - audible_message(SPAN_WARNING("\The [src] warns, \"[alerts[LUNGS_ALERT]]\"")) - last_alert = alerts.Copy() - last_alert_time = world.time - - - -/obj/machinery/vitals_monitor/verb/toggle_beep() - set name = "Toggle Monitor Beeping" - set category = "Object" - set src in view(1) - - var/mob/user = usr - if(!istype(user)) - return - - if(CanPhysicallyInteract(user)) - beep = !beep - to_chat(user, SPAN_NOTICE("You turn the sound on \the [src] [beep ? "on" : "off"].")) - -/obj/machinery/vitals_monitor/verb/toggle_alerts() - set name = "Toggle Alert Annunciator" - set category = "Object" - set src in view(1) - - var/mob/user = usr - if(!istype(user)) - return - - if(CanPhysicallyInteract(user)) - read_alerts = !read_alerts - to_chat(user, SPAN_NOTICE("You turn the alert reader on \the [src] [read_alerts ? "on" : "off"].")) - -/obj/item/stock_parts/circuitboard/vitals_monitor - name = "circuit board (Vitals Monitor)" - build_path = /obj/machinery/vitals_monitor - board_type = "machine" - req_components = list( - /obj/item/stock_parts/console_screen = 1) - additional_spawn_components = list( - /obj/item/stock_parts/power/battery/buildable/stock = 1, - /obj/item/cell/high = 1 - ) - -#undef PULSE_ALERT -#undef BRAIN_ALERT -#undef LUNGS_ALERT \ No newline at end of file diff --git a/code/game/machinery/wall_frames.dm b/code/game/machinery/wall_frames.dm deleted file mode 100644 index 35a9a68ab79c6..0000000000000 --- a/code/game/machinery/wall_frames.dm +++ /dev/null @@ -1,109 +0,0 @@ -/obj/item/frame - name = "frame" - desc = "Used for building machines." - icon = 'icons/obj/monitors.dmi' - icon_state = "alarm_bitem" - obj_flags = OBJ_FLAG_CONDUCTIBLE - var/build_machine_type - var/refund_amt = 2 - var/refund_type = /obj/item/stack/material/steel - var/reverse = 0 //if resulting object faces opposite its dir (like light fixtures) - -/obj/item/frame/attackby(obj/item/W as obj, mob/user as mob) - if(isWrench(W)) - new refund_type( get_turf(src.loc), refund_amt) - qdel(src) - return - ..() - -/obj/item/frame/proc/try_build(turf/on_wall) - if(!build_machine_type) - return - - if (get_dist(on_wall,usr)>1) - return - - var/ndir - if(reverse) - ndir = get_dir(usr,on_wall) - else - ndir = get_dir(on_wall,usr) - - if (!(ndir in GLOB.cardinal)) - return - - var/turf/loc = get_turf(usr) - var/area/A = loc.loc - if (!istype(loc, /turf/simulated/floor)) - to_chat(usr, "\The [src] cannot be placed on this spot.") - return - if ((A.requires_power == 0 || A.name == "Space") && !isLightFrame()) - to_chat(usr, "\The [src] cannot be placed in this area.") - return - - if(gotwallitem(loc, ndir)) - to_chat(usr, "There's already an item on this wall!") - return - - new build_machine_type(loc, ndir, src) - qdel(src) - -/obj/item/frame/proc/isLightFrame() - return FALSE - -/obj/item/frame/fire_alarm - name = "fire alarm frame" - desc = "Used for building fire alarms." - icon = 'icons/obj/firealarm.dmi' - icon_state = "casing" - build_machine_type = /obj/machinery/firealarm - -/obj/item/frame/air_alarm - name = "air alarm frame" - desc = "Used for building air alarms." - build_machine_type = /obj/machinery/alarm - -/obj/item/frame/intercom - name = "intercom frame" - desc = "Used for building intercoms." - icon = 'icons/obj/radio.dmi' - icon_state = "intercom-f" - build_machine_type = /obj/item/device/radio/intercom - -/obj/item/frame/intercom/get_mechanics_info() - . = ..() - . += "

              To construct:

              \ -
                \ -
              1. Attach the frame to the wall
              2. \ -
              3. Install the circuitboard into the frame
              4. \ -
              5. Use cables to wire the intercom
              6. \ -
              7. Screwdriver to close the panel
              8. \ -
              " -/obj/item/frame/light - name = "light fixture frame" - desc = "Used for building lights." - icon = 'icons/obj/lighting.dmi' - icon_state = "tube-construct-item" - build_machine_type = /obj/machinery/light_construct - reverse = 1 - -/obj/item/frame/light/isLightFrame() - return TRUE - -/obj/item/frame/light/small - name = "small light fixture frame" - icon_state = "bulb-construct-item" - refund_amt = 1 - build_machine_type = /obj/machinery/light_construct/small - -/obj/item/frame/light/spot - name = "large light fixture frame" - build_machine_type = /obj/machinery/light_construct/spot - refund_amt = 3 - -/obj/item/frame/supermatter_alarm - name = "supermatter alarm frame" - icon = 'icons/obj/lighting.dmi' - icon_state = "bulb-construct-item" - refund_amt = 1 - build_machine_type = /obj/machinery/rotating_alarm/supermatter diff --git a/code/game/machinery/washing_machine.dm b/code/game/machinery/washing_machine.dm deleted file mode 100644 index 791b2a0b28eb4..0000000000000 --- a/code/game/machinery/washing_machine.dm +++ /dev/null @@ -1,199 +0,0 @@ -#define WASHER_STATE_CLOSED 1 -#define WASHER_STATE_FULL 2 -#define WASHER_STATE_RUNNING 4 -#define WASHER_STATE_BLOODY 8 - -// WASHER_STATE_RUNNING implies WASHER_STATE_CLOSED | WASHER_STATE_FULL -// if you break this assumption, you must update the icon file -// other states are independent. - -/obj/machinery/washing_machine - name = "Washing Machine" - icon = 'icons/obj/machines/washing_machine.dmi' - icon_state = "wm_00" - density = TRUE - anchored = TRUE - construct_state = /decl/machine_construction/default/panel_closed - uncreated_component_parts = null - stat_immune = 0 - var/state = 0 - var/gibs_ready = 0 - var/obj/crayon - var/obj/item/reagent_containers/pill/detergent/detergent - obj_flags = OBJ_FLAG_ANCHORABLE - clicksound = "button" - clickvol = 40 - - // Power - idle_power_usage = 10 - active_power_usage = 150 - - machine_name = "washing machine" - machine_desc = "Uses detergent and water to get your clothes minty fresh. Good for those pesky bloodstains! Also decontaminates clothing that has been exposed to toxic elements, as long as detergent is used in the washing process." - -/obj/machinery/washing_machine/Destroy() - QDEL_NULL(crayon) - QDEL_NULL(detergent) - . = ..() - -/obj/machinery/washing_machine/verb/start() - set name = "Start Washing" - set category = "Object" - set src in oview(1) - - if(!CanPhysicallyInteract(usr)) - return - - if(!anchored) - to_chat(usr, "\The [src] must be secured to the floor.") - return - - if(state & WASHER_STATE_RUNNING) - to_chat(usr, "\The [src] is already running.") - return - if(!(state & WASHER_STATE_FULL)) - to_chat(usr, "Load \the [src] first!") - return - if(!(state & WASHER_STATE_CLOSED)) - to_chat(usr, "You must first close the machine.") - return - - if(stat & NOPOWER) - to_chat(usr, SPAN_WARNING("\The [src] is unpowered.")) - return - - state |= WASHER_STATE_RUNNING - if(locate(/mob/living) in src) - state |= WASHER_STATE_BLOODY - - update_use_power(POWER_USE_ACTIVE) - update_icon() - addtimer(CALLBACK(src, /obj/machinery/washing_machine/proc/wash), 20 SECONDS) - -/obj/machinery/washing_machine/proc/wash() - for(var/atom/A in (contents - component_parts)) - if(detergent) - A.clean_blood() - if(isitem(A)) - var/obj/item/I = A - if(detergent) - I.decontaminate() - if(crayon && iscolorablegloves(I)) - var/obj/item/clothing/gloves/C = I - C.color = crayon.color - if(istype(A, /obj/item/clothing)) - var/obj/item/clothing/C = A - C.ironed_state = WRINKLES_WRINKLY - if(detergent) - C.change_smell(SMELL_CLEAN) - addtimer(CALLBACK(C, /obj/item/clothing/proc/change_smell), detergent.smell_clean_time, TIMER_UNIQUE | TIMER_OVERRIDE) - QDEL_NULL(detergent) - - //Tanning! - for(var/obj/item/stack/hairlesshide/HH in contents) - var/obj/item/stack/wetleather/WL = new(src) - WL.amount = HH.amount - qdel(HH) - - update_use_power(POWER_USE_IDLE) - if(locate(/mob/living) in src) - gibs_ready = 1 - state &= ~WASHER_STATE_RUNNING - update_icon() - -/obj/machinery/washing_machine/verb/climb_out() - set name = "Climb out" - set category = "Object" - set src in usr.loc - - if(!CanPhysicallyInteract(usr)) - return - if(state & WASHER_STATE_CLOSED) - to_chat(usr, SPAN_WARNING("\The [src] is closed.")) - return - if(!do_after(usr, 2 SECONDS, src, DO_DEFAULT | DO_USER_UNIQUE_ACT | DO_PUBLIC_PROGRESS)) - return - if(!(state & WASHER_STATE_CLOSED)) - usr.dropInto(loc) - -/obj/machinery/washing_machine/on_update_icon() - icon_state = "wm_[state][panel_open]" - -/obj/machinery/washing_machine/clean_blood() - . = ..() - state &= ~WASHER_STATE_BLOODY - update_icon() - -/obj/machinery/washing_machine/components_are_accessible(path) - return !(state & WASHER_STATE_RUNNING) && ..() - -/obj/machinery/washing_machine/attackby(obj/item/W, mob/user) - if(!(state & WASHER_STATE_CLOSED)) - if(!crayon && istype(W,/obj/item/pen/crayon)) - if(!user.unEquip(W, src)) - return - crayon = W - return TRUE - if(!detergent && istype(W,/obj/item/reagent_containers/pill/detergent)) - if(!user.unEquip(W, src)) - return - detergent = W - return TRUE - if(istype(W, /obj/item/holder)) // Mob holder - for(var/mob/living/doggy in W) - doggy.forceMove(src) - qdel(W) - state |= WASHER_STATE_FULL - update_icon() - return TRUE - - if (state & WASHER_STATE_RUNNING) - to_chat(user, SPAN_WARNING("\The [src] is currently running.")) - return TRUE - - else if (!(W.item_flags & ITEM_FLAG_WASHER_ALLOWED)) - if (isScrewdriver(W) || isCrowbar(W) || isWrench(W)) - return ..() - - to_chat(user, SPAN_WARNING("\The [W] can't be washed in \the [src]!")) - return - - else - if (contents.len < 5) - if (!(state & WASHER_STATE_CLOSED)) - if (!user.unEquip(W, src)) - return - state |= WASHER_STATE_FULL - update_icon() - else - to_chat(user, SPAN_NOTICE("You can't put the item in right now.")) - else - to_chat(user, SPAN_NOTICE("\The [src] is full.")) - - -/obj/machinery/washing_machine/physical_attack_hand(mob/user) - if(state & WASHER_STATE_RUNNING) - to_chat(user, SPAN_WARNING("\The [src] is busy.")) - return TRUE - if(state & WASHER_STATE_CLOSED) - state &= ~WASHER_STATE_CLOSED - if(gibs_ready) - gibs_ready = 0 - var/mob/M = locate(/mob/living) in src - if(M) - M.gib() - for(var/atom/movable/O in (contents - component_parts)) - O.dropInto(loc) - state &= ~WASHER_STATE_FULL - update_icon() - crayon = null - detergent = null - return TRUE - state |= WASHER_STATE_CLOSED - update_icon() - return TRUE - -#undef WASHER_STATE_CLOSED -#undef WASHER_STATE_FULL -#undef WASHER_STATE_RUNNING -#undef WASHER_STATE_BLOODY diff --git a/code/game/machinery/wishgranter.dm b/code/game/machinery/wishgranter.dm deleted file mode 100644 index 78c1f4b9885c0..0000000000000 --- a/code/game/machinery/wishgranter.dm +++ /dev/null @@ -1,62 +0,0 @@ -/obj/machinery/wish_granter - name = "Wish Granter" - desc = "You're not so sure about this, anymore..." - icon = 'icons/obj/syndicate_beacon.dmi' - icon_state = "syndbeacon" - - use_power = POWER_USE_OFF - uncreated_component_parts = null - interact_offline = TRUE - anchored = TRUE - density = TRUE - - var/charges = 1 - var/insisting = 0 - -// Just override; we're special. -/obj/machinery/wish_granter/attack_hand(var/mob/user as mob) - usr.set_machine(src) - - if(charges <= 0) - to_chat(user, "The Wish Granter lies silent.") - return - - else if(!istype(user, /mob/living/carbon/human)) - to_chat(user, "You feel a dark stirring inside of the Wish Granter, something you want nothing of. Your instincts are better than any man's.") - return - - else if(is_special_character(user)) - to_chat(user, "Even to a heart as dark as yours, you know nothing good will come of this. Something instinctual makes you pull away.") - else if (!insisting) - to_chat(user, "Your first touch makes the Wish Granter stir, listening to you. Are you really sure you want to do this?") - insisting++ - - else - var/message = "You speak. [pick("I want the [station_name()] to disappear","Humanity is corrupt, mankind must be destroyed","I want to be rich", "I want to rule the world","I want immortality.")]. The Wish Granter answers." - to_chat(user, message) - to_chat(user, "Your head pounds for a moment, before your vision clears. You are the avatar of the Wish Granter, and your power is LIMITLESS! And it's all yours. You need to make sure no one can take it from you. No one can know, first.") - charges-- - insisting = 0 - - if (!(MUTATION_HULK in user.mutations)) - user.mutations.Add(MUTATION_HULK) - - if (!(MUTATION_LASER in user.mutations)) - user.mutations.Add(MUTATION_LASER) - - if (!(MUTATION_XRAY in user.mutations)) - user.mutations.Add(MUTATION_XRAY) - user.set_sight(user.sight|SEE_MOBS|SEE_OBJS|SEE_TURFS) - user.set_see_in_dark(8) - user.set_see_invisible(SEE_INVISIBLE_LEVEL_TWO) - - if (!(MUTATION_COLD_RESISTANCE in user.mutations)) - user.mutations.Add(MUTATION_COLD_RESISTANCE) - - if(!(MUTATION_HEAL in user.mutations)) - user.mutations.Add(MUTATION_HEAL) - - user.update_mutations() - user.mind.special_role = "Avatar of the Wish Granter" - to_chat(user, "You have a very bad feeling about this.") - return diff --git a/code/game/movietitles.dm b/code/game/movietitles.dm deleted file mode 100644 index a1edbcbfcb682..0000000000000 --- a/code/game/movietitles.dm +++ /dev/null @@ -1,210 +0,0 @@ -#define CREDIT_ROLL_SPEED 185 -#define CREDIT_SPAWN_SPEED 20 -#define CREDIT_ANIMATE_HEIGHT (14 * world.icon_size) -#define CREDIT_EASE_DURATION 22 - -GLOBAL_LIST(end_titles) - -/client/var/list/credits - -/client/proc/RollCredits() - set waitfor = FALSE - - if(get_preference_value(/datum/client_preference/show_credits) != GLOB.PREF_YES) - return - - if(!GLOB.end_titles) - GLOB.end_titles = generate_titles() - - LAZYINITLIST(credits) - - if(mob) - mob.overlay_fullscreen("fishbed",/obj/screen/fullscreen/fishbed) - mob.overlay_fullscreen("fadeout",/obj/screen/fullscreen/fadeout) - - if(mob.get_preference_value(/datum/client_preference/play_lobby_music) == GLOB.PREF_YES) - sound_to(mob, sound(null, channel = GLOB.lobby_sound_channel)) - if(GLOB.end_credits_song == null) - var/title_song = pick('sound/music/THUNDERDOME.ogg', 'sound/music/europa/Chronox_-_03_-_In_Orbit.ogg', 'sound/music/europa/asfarasitgets.ogg') - sound_to(mob, sound(title_song, wait = 0, volume = 40, channel = GLOB.lobby_sound_channel)) - else if(get_preference_value(/datum/client_preference/play_admin_midis) == GLOB.PREF_YES) - sound_to(mob, sound(GLOB.end_credits_song, wait = 0, volume = 40, channel = GLOB.lobby_sound_channel)) - sleep(50) - var/list/_credits = credits - verbs += /client/proc/ClearCredits - for(var/I in GLOB.end_titles) - if(!credits) - return - var/obj/screen/credit/T = new(null, I, src) - _credits += T - T.rollem() - sleep(CREDIT_SPAWN_SPEED) - sleep(CREDIT_ROLL_SPEED - CREDIT_SPAWN_SPEED) - - ClearCredits() - verbs -= /client/proc/ClearCredits - -/client/proc/ClearCredits() - set name = "Stop End Titles" - set category = "OOC" - verbs -= /client/proc/ClearCredits - QDEL_NULL_LIST(credits) - mob.clear_fullscreen("fishbed") - mob.clear_fullscreen("fadeout") - sound_to(mob, sound(null, channel = GLOB.lobby_sound_channel)) - -/obj/screen/credit - icon_state = "blank" - mouse_opacity = 0 - alpha = 0 - screen_loc = "1,1" - plane = HUD_PLANE - layer = HUD_ABOVE_ITEM_LAYER - var/client/parent - var/matrix/target - -/obj/screen/credit/Initialize(mapload, credited, client/P) - . = ..() - parent = P - maptext = {"
              [credited]
              "} - maptext_height = world.icon_size * 2 - maptext_width = world.icon_size * 14 - -/obj/screen/credit/proc/rollem() - var/matrix/M = matrix(transform) - M.Translate(0, CREDIT_ANIMATE_HEIGHT) - animate(src, transform = M, time = CREDIT_ROLL_SPEED) - target = M - animate(src, alpha = 255, time = CREDIT_EASE_DURATION, flags = ANIMATION_PARALLEL) - spawn(CREDIT_ROLL_SPEED - CREDIT_EASE_DURATION) - if(!QDELETED(src)) - animate(src, alpha = 0, transform = target, time = CREDIT_EASE_DURATION) - sleep(CREDIT_EASE_DURATION) - qdel(src) - parent.screen += src - -/obj/screen/credit/Destroy() - var/client/P = parent - if(parent) - P.screen -= src - LAZYREMOVE(P.credits, src) - parent = null - return ..() - -/proc/generate_titles() - var/list/titles = list() - var/list/cast = list() - var/list/chunk = list() - var/list/possible_titles = list() - var/chunksize = 0 - if(!GLOB.end_credits_title) - /* Establish a big-ass list of potential titles for the "episode". */ - possible_titles += "THE [pick("DOWNFALL OF", "RISE OF", "TROUBLE WITH", "FINAL STAND OF", "DARK SIDE OF", "DESOLATION OF", "DESTRUCTION OF", "CRISIS OF")]\ - [pick("SPACEMEN", "HUMANITY", "DIGNITY", "SANITY", "THE CHIMPANZEES", "THE VENDOMAT PRICES", "GIANT ARMORED", "THE GAS JANITOR",\ - "THE SUPERMATTER CRYSTAL", "MEDICAL", "ENGINEERING", "SECURITY", "RESEARCH", "THE SERVICE DEPARTMENT", "COMMAND", "THE EXPLORERS", "THE PATHFINDER",\ - "[uppertext(GLOB.using_map.station_name)]")]" - possible_titles += "THE CREW GETS [pick("RACIST", "PICKLED", "AN INCURABLE DISEASE", "PIZZA", "A VALUABLE HISTORY LESSON", "A BREAK", "HIGH", "TO LIVE", "TO RELIVE THEIR CHILDHOOD", "EMBROILED IN CIVIL WAR", "A BAD HANGOVER", "SERIOUS ABOUT [pick("DRUG ABUSE", "CRIME", "PRODUCTIVITY", "ANCIENT AMERICAN CARTOONS", "SPACEBALL", "DECOMPRESSION PROCEDURES")]")]" - possible_titles += "THE CREW LEARNS ABOUT [pick("LOVE", "DRUGS", "THE DANGERS OF MONEY LAUNDERING", "XENIC SENSITIVITY", "INVESTMENT FRAUD", "KELOTANE ABUSE", "RADIATION PROTECTION", "SACRED GEOMETRY", "STRING THEORY", "ABSTRACT MATHEMATICS", "[pick("UNATHI", "SKRELLIAN", "DIONAN", "KHAARMANI", "VOX", "SERPENTID")] MATING RITUALS", "ANCIENT CHINESE MEDICINE")]" - possible_titles += "A VERY [pick("CORPORATE", "NANOTRASEN", "FLEET", "HAPHAESTUS", "DAIS", "XENOLIFE", "EXPEDITIONARY", "DIONA", "PHORON", "MARTIAN", "SERPENTID")] [pick("CHRISTMAS", "EASTER", "HOLIDAY", "WEEKEND", "THURSDAY", "VACATION")]" - possible_titles += "[pick("GUNS, GUNS EVERYWHERE", "THE LITTLEST ARMALIS", "WHAT HAPPENS WHEN YOU MIX MAINTENANCE DRONES AND COMMERCIAL-GRADE PACKING FOAM", "ATTACK! ATTACK! ATTACK!", "SEX BOMB", "THE LEGEND OF THE ALIEN ARTIFACT: PART [pick("I","II","III","IV","V","VI","VII","VIII","IX", "X", "C","M","L")]")]" - possible_titles += "[pick("SPACE", "SEXY", "DRAGON", "WARLOCK", "LAUNDRY", "GUN", "ADVERTISING", "DOG", "CARBON MONOXIDE", "NINJA", "WIZARD", "SOCRATIC", "JUVENILE DELIQUENCY", "POLITICALLY MOTIVATED", "RADTACULAR SICKNASTY")] [pick("QUEST", "FORCE", "ADVENTURE")]" - possible_titles += "[pick("THE DAY [uppertext(GLOB.using_map.station_short)] STOOD STILL", "HUNT FOR THE GREEN WEENIE", "ALIEN VS VENDOMAT", "SPACE TRACK")]" - titles += "

              EPISODE [rand(1,1000)]
              [pick(possible_titles)]

              " - else - titles += "

              EPISODE [rand(1,1000)]
              [GLOB.end_credits_title]

              " - - for(var/mob/living/carbon/human/H in GLOB.living_mob_list_|GLOB.dead_mob_list_) - if(findtext(H.real_name,"(mannequin)")) - continue - if(H.is_species(SPECIES_MONKEY) && findtext(H.real_name,"[lowertext(H.species.name)]")) //no monki - continue - if(H.timeofdeath && H.timeofdeath < 5 MINUTES) //don't mention these losers (prespawned corpses mostly) - continue - if(!cast.len && !chunksize) - chunk += "CAST:" - var/job = "" - if(GetAssignment(H) != "Unassigned") - job = ", [uppertext(GetAssignment(H))]" - var/used_name = H.real_name - var/datum/computer_file/report/crew_record/R = get_crewmember_record(H.real_name) - if(R && R.get_rank()) - var/datum/mil_rank/rank = GLOB.mil_branches.get_rank(R.get_branch(), R.get_rank()) - if(rank.name_short) - used_name = "[rank.name_short] [used_name]" - var/showckey = 0 - if(H.ckey && H.client) - if(H.client.get_preference_value(/datum/client_preference/show_ckey_credits) == GLOB.PREF_SHOW) - showckey = 1 - var/decl/cultural_info/actor_culture = SSculture.get_culture(H.get_cultural_value(TAG_CULTURE)) - if(!actor_culture || !(H.species.spawn_flags & SPECIES_CAN_JOIN) || prob(10)) - actor_culture = SSculture.get_culture(CULTURE_HUMAN) - if(!showckey) - if(prob(90)) - chunk += "[actor_culture.get_random_name(H.gender)]\t \t \t \t[uppertext(used_name)][job]" - else - var/datum/gender/G = gender_datums[H.gender] - chunk += "[used_name]\t \t \t \t[uppertext(G.him)]SELF" - else - chunk += "[uppertext(actor_culture.get_random_name(H.gender))] a.k.a. '[uppertext(H.ckey)]'\t \t \t \t[uppertext(used_name)][job]" - chunksize++ - if(chunksize > 2) - cast += "
              [jointext(chunk,"
              ")]
              " - chunk.Cut() - chunksize = 0 - if(chunk.len) - cast += "
              [jointext(chunk,"
              ")]
              " - - titles += cast - - var/list/corpses = list() - var/list/monkies = list() - for(var/mob/living/carbon/human/H in GLOB.dead_mob_list_) - if(H.timeofdeath < 5 MINUTES) //no prespawned corpses - continue - if(H.is_species(SPECIES_MONKEY) && findtext(H.real_name,"[lowertext(H.species.name)]")) - monkies[H.species.name] += 1 - else if(H.real_name) - corpses += H.real_name - for(var/spec in monkies) - var/datum/species/S = all_species[spec] - corpses += "[monkies[spec]] [lowertext(monkies[spec] > 1 ? S.name_plural : S.name)]" - if(corpses.len) - titles += "
              BASED ON REAL EVENTS
              In memory of [english_list(corpses)].
              " - - var/list/staff = list("PRODUCTION STAFF:") - var/list/staffjobs = list("Coffee Fetcher", "Cameraman", "Angry Yeller", "Chair Operator", "Choreographer", "Historical Consultant", "Costume Designer", "Chief Editor", "Executive Assistant") - var/list/goodboys = list() - for(var/client/C) - if(!C.holder || C.is_stealthed()) - continue - - if(C.holder.rights & (R_DEBUG|R_ADMIN)) - var/decl/cultural_info/cult = SSculture.cultural_info_by_name[pick(SSculture.cultural_info_by_name)] - staff += "[uppertext(pick(staffjobs))] - [cult.get_random_name(pick(MALE, FEMALE))] a.k.a. '[C.key]'" - else if(C.holder.rights & R_MOD) - goodboys += "[C.key]" - - titles += "
              [jointext(staff,"
              ")]
              " - if(goodboys.len) - titles += "
              STAFF'S GOOD BOYS:
              [english_list(goodboys)]

              " - - var/disclaimer = "
              Sponsored by [GLOB.using_map.company_name].
              All rights reserved.
              \ - This motion picture is protected under the copyright laws of the Sol Central Government
              and other nations throughout the galaxy.
              \ - Colony of First Publication: [pick("Mars", "Luna", "Earth", "Venus", "Phobos", "Ceres", "Tiamat", "Ceti Epsilon", "Eos", "Pluto", "Ouere",\ - "Lordania", "Kingston", "Cinu", "Yuklid V", "Lorriman", "Gaia")].
              " - disclaimer += pick("Use for parody prohibited. PROHIBITED.", - "All stunts were performed by underpaid interns. Do NOT try at home.", - "[GLOB.using_map.company_name] does not endorse behaviour depicted. Attempt at your own risk.", - "Any unauthorized exhibition, distribution, or copying of this film or any part thereof (including soundtrack)
              \ - may result in an ERT being called to storm your home and take it back by force.", - "The story, all names, characters, and incidents portrayed in this production are fictitious. No identification with actual
              \ - persons (living or deceased), places, buildings, and products is intended or should be inferred.
              \ - This film is based on a true story and all individuals depicted are based on real people, despite what we just said.", - "No person or entity associated with this film received payment or anything of value, or entered into any agreement, in connection
              \ - with the depiction of tobacco products, despite the copious amounts of smoking depicted within.
              \ - (This disclaimer sponsored by Carcinoma - Carcinogens are our Business!(TM)).", - "No animals were harmed in the making of this motion picture except for those listed previously as dead. Do not try this at home.") - titles += "
              " - titles += "
              [JOINTEXT(disclaimer)]
              " - - return titles diff --git a/code/game/objects/alien_props.dm b/code/game/objects/alien_props.dm deleted file mode 100644 index d423f6c2f0cda..0000000000000 --- a/code/game/objects/alien_props.dm +++ /dev/null @@ -1,78 +0,0 @@ -// Alien props for away missions and such. - -// Power cells -/obj/item/cell/alien - name = "alien device" - desc = "It hums with power." - icon = 'icons/obj/xenoarchaeology.dmi' - icon_state = "unknown1" - maxcharge = 5000 - origin_tech = list(TECH_POWER = 7) - var/static/base_icon - -/obj/item/cell/alien/on_update_icon() - if(!base_icon) - base_icon = pick("instrument", "unknown1", "unknown3", "unknown4") - icon_state = base_icon - -// APC -#define APC_UPDATE_ALLGOOD 128 - -/obj/machinery/power/apc/alien - name = "alien device" - desc = "It's affixed to the floor, with a thick wire going into it." - icon = 'icons/obj/xenoarchaeology.dmi' - icon_state = "ano10" - update_state = 0 //Don't pixelshift us on wall - cell_type = /obj/item/cell/alien - autoname = 0 - -/obj/machinery/power/apc/alien/on_update_icon() - check_updates() - if(update_state & APC_UPDATE_ALLGOOD) - icon_state = "ano11" - else - icon_state = "ano10" - -#undef APC_UPDATE_ALLGOOD - -// Lights -/obj/machinery/light/alien - name = "glowbulb" - desc = "An alien device, perhaps some sort of light source." - icon_state = "bulb_map" - base_state = "bulb" - color = COLOR_PURPLE - light_type = /obj/item/light/alien - -/obj/machinery/light/alien/Initialize() - color = null //It's just for mapping - . = ..() - -/obj/item/light/alien - name = "glowbulb" - icon_state = "lbulb" - base_state = "lbulb" - desc = "A simple alien device, perhaps some sort of light source." - color = COLOR_PURPLE - var/static/random_light_color - -/obj/item/light/alien/Initialize() - . = ..() - if(!random_light_color) - random_light_color = get_random_colour(FALSE, 100, 255) - b_colour = random_light_color - color = random_light_color - -//Airlock -/obj/machinery/door/airlock/alien - name = "airlock" - desc = "It's made of some odd metal." - -/obj/machinery/door/airlock/alien/Initialize() - . = ..() - var/material/A = SSmaterials.get_material_by_name(MATERIAL_ALIENALLOY) - if(A) - door_color = A.icon_colour - stripe_color = get_random_colour(FALSE, 0, 255) - update_icon() \ No newline at end of file diff --git a/code/game/objects/auras/aura.dm b/code/game/objects/auras/aura.dm deleted file mode 100644 index 0ff5d02c2ef64..0000000000000 --- a/code/game/objects/auras/aura.dm +++ /dev/null @@ -1,56 +0,0 @@ -/*Auras are simple: They are simple overriders for attackbys, bullet_act, damage procs, etc. They also tick after their respective mob. -They should be used for undeterminate mob effects, like for instance a toggle-able forcefield, or indestructability as long as you don't move. -They should also be used for when you want to effect the ENTIRE mob, like having an armor buff or showering candy everytime you walk. -*/ - -/obj/aura - var/mob/living/user - -/obj/aura/New(var/mob/living/target) - ..() - if(target) - added_to(target) - user.add_aura(src) - -/obj/aura/Destroy() - if(user) - user.remove_aura(src) - removed() - return ..() - -/obj/aura/proc/added_to(var/mob/living/target) - user = target - -/obj/aura/proc/removed() - user = null - -/obj/aura/proc/life_tick() - return 0 - -/obj/aura/attackby(var/obj/item/I, var/mob/user) - return 0 - -/obj/aura/bullet_act(var/obj/item/projectile/P, var/def_zone) - return 0 - -/obj/aura/hitby() - return 0 - -/obj/aura/debug - var/returning = 0 - -/obj/aura/debug/attackby(var/obj/item/I, var/mob/user) - log_debug("Attackby for \ref[src]: [I], [user]") - return returning - -/obj/aura/debug/bullet_act(var/obj/item/projectile/P, var/def_zone) - log_debug("Bullet Act for \ref[src]: [P], [def_zone]") - return returning - -/obj/aura/debug/life_tick() - log_debug("Life tick") - return returning - -/obj/aura/debug/hitby(var/atom/movable/M, var/datum/thrownthing/TT) - log_debug("Hit By for \ref[src]: [M], [TT.speed]") - return returning \ No newline at end of file diff --git a/code/game/objects/auras/blueforge_aura.dm b/code/game/objects/auras/blueforge_aura.dm deleted file mode 100644 index 2481ab59686af..0000000000000 --- a/code/game/objects/auras/blueforge_aura.dm +++ /dev/null @@ -1,16 +0,0 @@ -/obj/aura/blueforge_aura - name = "Blueforge Aura" - icon = 'icons/mob/human_races/species/eyes.dmi' - icon_state = "eyes_blueforged_s" - layer = MOB_LAYER - -/obj/aura/blueforge_aura/life_tick() - user.adjustToxLoss(-10) - return 0 - -/obj/aura/blueforge_aura/bullet_act(var/obj/item/projectile/P) - if (P.damtype == DAMAGE_BURN) - P.damage *=2 - else if(P.agony || P.stun) - return AURA_FALSE - return 0 diff --git a/code/game/objects/auras/personal_shields/personal_shield.dm b/code/game/objects/auras/personal_shields/personal_shield.dm deleted file mode 100644 index 26eb3b38749fd..0000000000000 --- a/code/game/objects/auras/personal_shields/personal_shield.dm +++ /dev/null @@ -1,34 +0,0 @@ -/obj/aura/personal_shield - name = "personal shield" - -/obj/aura/personal_shield/added_to(var/mob/living/L) - ..() - playsound(user,'sound/weapons/flash.ogg',35,1) - to_chat(user,"You feel your body prickle as \the [src] comes online.") - -/obj/aura/personal_shield/bullet_act(var/obj/item/projectile/P, var/def_zone) - user.visible_message("\The [user]'s [src.name] flashes before \the [P] can hit them!") - new /obj/effect/temporary(get_turf(src), 2 SECONDS,'icons/obj/machines/shielding.dmi',"shield_impact") - playsound(user,'sound/effects/basscannon.ogg',35,1) - return AURA_FALSE|AURA_CANCEL - -/obj/aura/personal_shield/removed() - to_chat(user,"\The [src] goes offline!") - playsound(user,'sound/mecha/internaldmgalarm.ogg',25,1) - ..() - -/obj/aura/personal_shield/device - var/obj/item/device/personal_shield/shield - -/obj/aura/personal_shield/device/bullet_act() - . = ..() - if(shield) - shield.take_charge() - -/obj/aura/personal_shield/device/New(var/mob/living/user, var/user_shield) - ..() - shield = user_shield - -/obj/aura/personal_shield/device/Destroy() - shield = null - return ..() \ No newline at end of file diff --git a/code/game/objects/auras/radiant_aura.dm b/code/game/objects/auras/radiant_aura.dm deleted file mode 100644 index c8d7c35fb2741..0000000000000 --- a/code/game/objects/auras/radiant_aura.dm +++ /dev/null @@ -1,20 +0,0 @@ -/obj/aura/radiant_aura - name = "radiant aura" - icon = 'icons/effects/effects.dmi' - icon_state = "fire_goon" - layer = ABOVE_WINDOW_LAYER - -/obj/aura/radiant_aura/added_to(var/mob/living/L) - ..() - to_chat(L,"A bubble of light appears around you, exuding protection and warmth.") - set_light(0.6, 1, 6, 2, "#e09d37") - -/obj/aura/radiant_aura/removed() - to_chat(user, "Your protective aura dissipates, leaving you feeling cold and unsafe.") - ..() - -/obj/aura/radiant_aura/bullet_act(var/obj/item/projectile/P, var/def_zone) - if(P.damage_flags() & DAMAGE_FLAG_LASER) - user.visible_message("\The [P] refracts, bending into \the [user]'s aura.") - return AURA_FALSE - return 0 diff --git a/code/game/objects/auras/regenerating_aura.dm b/code/game/objects/auras/regenerating_aura.dm deleted file mode 100644 index a4d2c15dfb062..0000000000000 --- a/code/game/objects/auras/regenerating_aura.dm +++ /dev/null @@ -1,180 +0,0 @@ -/obj/aura/regenerating - name = "regenerating aura" - var/brute_mult = 1 - var/fire_mult = 1 - var/tox_mult = 1 - -/obj/aura/regenerating/life_tick() - user.adjustBruteLoss(-brute_mult) - user.adjustFireLoss(-fire_mult) - user.adjustToxLoss(-tox_mult) - -/obj/aura/regenerating/human - var/nutrition_damage_mult = 1 //How much nutrition it takes to heal regular damage - var/external_nutrition_mult = 50 // How much nutrition it takes to regrow a limb - var/organ_mult = 2 - var/regen_message = "Your body throbs as you feel your ORGAN regenerate." - var/grow_chance = 0 - var/grow_threshold = 0 - var/ignore_tag//organ tag to ignore - var/last_nutrition_warning = 0 - var/innate_heal = TRUE // Whether the aura is on, basically. - - -/obj/aura/regenerating/human/proc/external_regeneration_effect(var/obj/item/organ/external/O, var/mob/living/carbon/human/H) - return - -/obj/aura/regenerating/human/life_tick() - var/mob/living/carbon/human/H = user - if(!istype(H)) - CRASH("Someone gave [user.type] a [src.type] aura. This is invalid.") - if(!innate_heal || H.InStasis() || H.stat == DEAD) - return 0 - if(H.nutrition < nutrition_damage_mult) - low_nut_warning() - return 0 - - if(brute_mult && H.getBruteLoss()) - H.adjustBruteLoss(-brute_mult * config.organ_regeneration_multiplier) - H.adjust_nutrition(-nutrition_damage_mult) - if(fire_mult && H.getFireLoss()) - H.adjustFireLoss(-fire_mult * config.organ_regeneration_multiplier) - H.adjust_nutrition(-nutrition_damage_mult) - if(tox_mult && H.getToxLoss()) - H.adjustToxLoss(-tox_mult * config.organ_regeneration_multiplier) - H.adjust_nutrition(-nutrition_damage_mult) - - if(!can_regenerate_organs()) - return 1 - if(organ_mult) - if(prob(10) && H.nutrition >= 150 && !H.getBruteLoss() && !H.getFireLoss()) - var/obj/item/organ/external/head/D = H.organs_by_name["head"] - if (D.status & ORGAN_DISFIGURED) - if (H.nutrition >= 20) - D.status &= ~ORGAN_DISFIGURED - H.adjust_nutrition(-20) - else - low_nut_warning("head") - - for(var/bpart in shuffle(H.internal_organs_by_name - BP_BRAIN)) - var/obj/item/organ/internal/regen_organ = H.internal_organs_by_name[bpart] - if(BP_IS_ROBOTIC(regen_organ)) - continue - if(istype(regen_organ)) - if(regen_organ.damage > 0 && !(regen_organ.status & ORGAN_DEAD)) - if (H.nutrition >= organ_mult) - regen_organ.damage = max(regen_organ.damage - organ_mult, 0) - H.adjust_nutrition(-organ_mult) - if(prob(5)) - to_chat(H, replacetext_char(regen_message,"ORGAN", regen_organ.name)) - else - low_nut_warning(regen_organ.name) - - if(prob(grow_chance)) - for(var/limb_type in H.species.has_limbs) - var/obj/item/organ/external/E = H.organs_by_name[limb_type] - if(E && E.organ_tag != BP_HEAD && !E.vital && (E.is_stump() || E.status & ORGAN_DEAD)) //Skips heads and vital bits... - if (H.nutrition > grow_threshold) - E.removed() //...because no one wants their head to explode to make way for a new one. - qdel(E) - E= null - else - low_nut_warning(E.name) - if(!E) - var/list/organ_data = H.species.has_limbs[limb_type] - var/limb_path = organ_data["path"] - var/obj/item/organ/external/O = new limb_path(H) - external_regeneration_effect(O,H) - organ_data["descriptor"] = O.name - H.update_body() - return - else if (H.nutrition > grow_threshold) //We don't subtract any nut here, but let's still only heal wounds when we have nut. - for(var/datum/wound/W in E.wounds) - if(W.wound_damage() == 0 && prob(50)) - qdel(W) - return 1 - -/obj/aura/regenerating/human/proc/low_nut_warning(var/wound_type) - if (last_nutrition_warning + 1 MINUTE < world.time) - to_chat(user, "You need more energy to regenerate your [wound_type || "wounds"].") - last_nutrition_warning = world.time - return 1 - return 0 - -/obj/aura/regenerating/human/proc/toggle() - innate_heal = !innate_heal - -/obj/aura/regenerating/human/proc/can_toggle() - return TRUE - -/obj/aura/regenerating/human/proc/can_regenerate_organs() - return TRUE - -/obj/aura/regenerating/human/unathi - nutrition_damage_mult = 2 - brute_mult = 2 - organ_mult = 4 - regen_message = "You feel a soothing sensation as your ORGAN mends..." - grow_chance = 2 - grow_threshold = 150 - ignore_tag = BP_HEAD - var/toggle_blocked_until = 0 // A time - -/obj/aura/regenerating/human/unathi/toggle() - ..() - toggle_blocked_until = max(world.time + 2 MINUTES, toggle_blocked_until) - -/obj/aura/regenerating/human/unathi/can_toggle() - if(world.time < toggle_blocked_until) - return FALSE - return ..() - -// Default return; we're just logging. -/obj/aura/regenerating/human/unathi/attackby() - toggle_blocked_until = max(world.time + 1 MINUTE, toggle_blocked_until) - -/obj/aura/regenerating/human/unathi/hitby() - toggle_blocked_until = max(world.time + 1 MINUTE, toggle_blocked_until) - -/obj/aura/regenerating/human/unathi/bullet_act() - toggle_blocked_until = max(world.time + 1 MINUTE, toggle_blocked_until) - -/obj/aura/regenerating/human/unathi/life_tick() - var/mob/living/carbon/human/H = user - if(innate_heal && istype(H) && H.stat != DEAD && H.nutrition < 50) - H.apply_damage(5, DAMAGE_TOXIN) - H.adjust_nutrition(3) - return 1 - return ..() - -/obj/aura/regenerating/human/unathi/can_regenerate_organs() - return can_toggle() - -/obj/aura/regenerating/human/unathi/external_regeneration_effect(var/obj/item/organ/external/O, var/mob/living/carbon/human/H) - to_chat(H, "With a shower of fresh blood, a new [O.name] forms.") - H.visible_message("With a shower of fresh blood, a length of biomass shoots from [H]'s [O.amputation_point], forming a new [O.name]!") - H.adjust_nutrition(-external_nutrition_mult) - var/datum/reagent/blood/B = locate(/datum/reagent/blood) in H.vessel.reagent_list - blood_splatter(H,B,1) - O.set_dna(H.dna) - - -/obj/aura/regenerating/human/diona - brute_mult = 4 - fire_mult = 4 - tox_mult = 0 - nutrition_damage_mult = 2 - organ_mult = 2 - regen_message = "You sense your nymphs shifting internally to regenerate your ORGAN.." - grow_chance = 5 - grow_threshold = 100 - external_nutrition_mult = 60 - -/obj/aura/regenerating/human/diona/external_regeneration_effect(var/obj/item/organ/external/O, var/mob/living/carbon/human/H) - to_chat(H, "Some of your nymphs split and hurry to reform your [O.name].") - H.adjust_nutrition(-external_nutrition_mult) - -/obj/aura/regenerating/human/unathi/yeosa - brute_mult = 1.5 - organ_mult = 3 - tox_mult = 2 diff --git a/code/game/objects/auras/shadowling_aura.dm b/code/game/objects/auras/shadowling_aura.dm deleted file mode 100644 index 92ec416898594..0000000000000 --- a/code/game/objects/auras/shadowling_aura.dm +++ /dev/null @@ -1,22 +0,0 @@ -/obj/aura/shadowling_aura - name = "Shadowling Aura" - var/added_mutation = FALSE - -/obj/aura/shadowling_aura/added_to(var/mob/living/L) - ..() - if(!(MUTATION_SPACERES in L.mutations)) - L.mutations += MUTATION_SPACERES - added_mutation = TRUE - -/obj/aura/shadowling_aura/removed() - if(added_mutation) - added_mutation = FALSE - user.mutations -= MUTATION_SPACERES - ..() - -/obj/aura/shadowling_aura/bullet_act(var/obj/item/projectile/P) - if(P.damage_flags() & DAMAGE_FLAG_LASER) - P.damage *= 2 - if(P.agony) - P.agony *= 2 - return 0 diff --git a/code/game/objects/auras/starlight.dm b/code/game/objects/auras/starlight.dm deleted file mode 100644 index 78803898f0972..0000000000000 --- a/code/game/objects/auras/starlight.dm +++ /dev/null @@ -1,20 +0,0 @@ -/obj/aura/starborn - name = "starborn's gift" - icon = 'icons/effects/effects.dmi' - icon_state = "white_electricity_constant" - color = "#33cc33" - layer = MOB_LAYER - -/obj/aura/starborn/bullet_act(var/obj/item/projectile/P, var/def_zone) - if (P.damage_type == DAMAGE_BURN) - user.visible_message("\The [P] seems to only make \the [user] stronger.") - user.adjustBruteLoss(-P.damage) - return AURA_FALSE - return 0 - -/obj/aura/starborn/attackby(var/obj/item/I, var/mob/i_user) - if(I.damtype == DAMAGE_BURN) - to_chat(i_user, "\The [I] seems to only feed into \the [user]'s flames.") - user.adjustBruteLoss(-I.force) - return AURA_FALSE - return 0 diff --git a/code/game/objects/buckling.dm b/code/game/objects/buckling.dm deleted file mode 100644 index 62e623116df27..0000000000000 --- a/code/game/objects/buckling.dm +++ /dev/null @@ -1,125 +0,0 @@ -/obj - var/can_buckle = 0 - var/buckle_movable = 0 - var/buckle_dir = 0 - var/buckle_lying = -1 //bed-like behavior, forces mob.lying = buckle_lying if != -1 - var/buckle_pixel_shift = "x=0;y=0;z=0" //where the buckled mob should be pixel shifted to, or null for no pixel shift control - var/buckle_require_restraints = 0 //require people to be handcuffed before being able to buckle. eg: pipes - var/mob/living/buckled_mob = null - -/obj/attack_hand(mob/living/user) - . = ..() - if(can_buckle && buckled_mob) - if (buckled_mob != user) - if (user.a_intent != I_HELP && !do_after(user, 3 SECONDS, src, DO_PUBLIC_UNIQUE)) - return - if (!buckled_mob || !Adjacent(user)) - return - user_unbuckle_mob(user) - -/obj/attack_robot(mob/user) - . = ..() - if (can_buckle && buckled_mob) - user_unbuckle_mob(user) - -/obj/MouseDrop_T(mob/living/target, mob/living/user) - . = ..() - if (can_buckle && istype(target)) - if (target != user) - if (user.a_intent != I_HELP && !do_after(user, 3 SECONDS, src, DO_PUBLIC_UNIQUE)) - return - if (!Adjacent(target) || !Adjacent(user)) - return - user_buckle_mob(target, user) - -/obj/Destroy() - unbuckle_mob() - return ..() - - -/obj/proc/buckle_mob(mob/living/M) - if(buckled_mob) //unless buckled_mob becomes a list this can cause problems - return 0 - if(!istype(M) || (M.loc != loc) || !M.can_be_buckled || M.buckled || M.pinned.len || (buckle_require_restraints && !M.restrained())) - return 0 - if(ismob(src)) - var/mob/living/carbon/C = src //Don't wanna forget the xenos. - if(M != src && C.incapacitated()) - return 0 - - M.buckled = src - M.facing_dir = null - M.set_dir(buckle_dir ? buckle_dir : dir) - M.UpdateLyingBuckledAndVerbStatus() - M.update_floating() - buckled_mob = M - - post_buckle_mob(M) - return 1 - -/obj/proc/unbuckle_mob() - if(buckled_mob && buckled_mob.buckled == src) - . = buckled_mob - buckled_mob.buckled = null - buckled_mob.anchored = initial(buckled_mob.anchored) - buckled_mob.UpdateLyingBuckledAndVerbStatus() - buckled_mob.update_floating() - buckled_mob = null - - post_buckle_mob(.) - -/obj/proc/post_buckle_mob(mob/living/M) - if(buckle_pixel_shift) - if(M == buckled_mob) - var/list/pixel_shift = cached_key_number_decode(buckle_pixel_shift) - animate(M, pixel_x = M.default_pixel_x + pixel_shift["x"], pixel_y = M.default_pixel_y + pixel_shift["y"], pixel_z = M.default_pixel_z + pixel_shift["z"], 4, 1, LINEAR_EASING) - else - animate(M, pixel_x = M.default_pixel_x, pixel_y = M.default_pixel_y, pixel_z = M.default_pixel_z, 4, 1, LINEAR_EASING) - -/obj/proc/user_buckle_mob(mob/living/M, mob/user) - if(!user.Adjacent(M) || istype(user, /mob/living/silicon/pai) || (M != user && user.incapacitated())) - return 0 - if(M == buckled_mob) - return 0 - if (M.grabbed_by.len) - to_chat(user, SPAN_WARNING("\The [M] is being grabbed and cannot be buckled.")) - return FALSE - if (!M.can_be_buckled) - to_chat(user, SPAN_WARNING("\The [M] cannot be buckled.")) - return FALSE - - add_fingerprint(user) - unbuckle_mob() - - //can't buckle unless you share locs so try to move M to the obj. - if(M.loc != src.loc) - step_towards(M, src) - - . = buckle_mob(M) - if(.) - if(M == user) - M.visible_message(\ - "\The [M.name] buckles themselves to \the [src].",\ - "You buckle yourself to \the [src].",\ - "You hear metal clanking.") - else - M.visible_message(\ - "\The [M.name] is buckled to \the [src] by \the [user.name]!",\ - "You are buckled to \the [src] by \the [user.name]!",\ - "You hear metal clanking.") - -/obj/proc/user_unbuckle_mob(mob/user) - var/mob/living/M = unbuckle_mob() - if(M) - if(M != user) - M.visible_message(\ - "\The [M.name] was unbuckled by \the [user.name]!",\ - "You were unbuckled from \the [src] by \the [user.name].",\ - "You hear metal clanking.") - else - M.visible_message(\ - "\The [M.name] unbuckled themselves!",\ - "You unbuckle yourself from \the [src].",\ - "You hear metal clanking.") - add_fingerprint(user) - return M diff --git a/code/game/objects/compass/_compass.dm b/code/game/objects/compass/_compass.dm deleted file mode 100644 index 28d1c3775c4b7..0000000000000 --- a/code/game/objects/compass/_compass.dm +++ /dev/null @@ -1,11 +0,0 @@ -/* - This folder contains an abstract type (/obj/compass_holder) which contains a set of - waypoints (/datum/compass_waypoint) and generates a circular compass with markers for - mobs that have the object in their screen list. See GPS for an example implementation. -*/ - -/image/compass_marker - maptext_height = 64 - maptext_width = 128 - maptext_x = -48 - maptext_y = -32 diff --git a/code/game/objects/compass/compass_holder.dm b/code/game/objects/compass/compass_holder.dm deleted file mode 100644 index 2f6fbd4a1d0f8..0000000000000 --- a/code/game/objects/compass/compass_holder.dm +++ /dev/null @@ -1,136 +0,0 @@ -var/global/list/angle_step_to_dir = list( - "N", - "NE", - "E", - "SE", - "S", - "SW", - "W", - "NW", - "N" -) - -#define MIN_VIEW 15 - -/obj/compass_holder - name = null - icon = null - icon_state = null - screen_loc = "CENTER,CENTER" - - var/interval_colour = "#7e6f96" - var/bearing_colour = COLOR_WHITE - var/bearing_outline_colour = "#3b2d53" - - /// Number of steps/pips between bolded markers on the compass ring. - var/compass_interval = 3 - /// Total angle covered by a single span of the compass ring; divided by compass_interval to get individual spans. - var/compass_period = 45 - - var/list/compass_static_labels - var/list/compass_waypoints - var/list/compass_waypoint_markers - -/obj/compass_holder/Initialize(mapload, ...) - . = ..() - rebuild_compass_overlays() - -/obj/compass_holder/proc/get_label_offset() - return (world.icon_size * round(MIN_VIEW/2)) - -/obj/compass_holder/proc/rebuild_compass_overlays() - - var/effective_compass_period = compass_period/compass_interval - LAZYCLEARLIST(compass_static_labels) - for(var/i in 0 to (360/effective_compass_period)-1) - - var/image/compass_marker/I = new - I.loc = src - - if(i % compass_interval == 0) - I.maptext = STYLE_SMALLFONTS_OUTLINE("
              [get_string_from_angle(i * effective_compass_period)]
              ", 7, bearing_colour, bearing_outline_colour) - else - I.maptext = STYLE_SMALLFONTS("
              ", 7, interval_colour) - - var/matrix/M = matrix() - M.Translate(0, get_label_offset()) - M.Turn(effective_compass_period * i) - I.transform = M - I.filters = filter(type="drop_shadow", color = "#77777777", size = 2, offset = 1,x = 0, y = 0) - I.layer = HUD_BASE_LAYER - I.plane = HUD_PLANE - LAZYADD(compass_static_labels, I) - - rebuild_overlay_lists(TRUE) - -/obj/compass_holder/proc/get_string_from_angle(var/angle) - return global.angle_step_to_dir[clamp(round(angle/45)+1, 1, length(global.angle_step_to_dir))] - -/obj/compass_holder/Destroy() - QDEL_NULL_LIST(compass_waypoints) - . = ..() - -/obj/compass_holder/proc/get_heading_strength() - return 1 - -/obj/compass_holder/proc/get_heading_angle() - var/atom/A = loc - // Bit of a strange loop - grab the highest atom in our stack that isn't a turf. - while(istype(A) && A.loc && !isturf(A.loc)) - A = A.loc - if(istype(A) && !isturf(A)) - . = dir2angle(A.dir) - else - . = 0 - -/obj/compass_holder/on_update_icon() - overlays = (compass_static_labels | compass_waypoint_markers) - -/obj/compass_holder/proc/clear_waypoint(var/id) - LAZYREMOVE(compass_waypoints, id) - rebuild_overlay_lists(TRUE) - -/obj/compass_holder/proc/set_waypoint(var/id, var/label, var/heading_x, var/heading_y, var/heading_z, var/label_color) - var/datum/compass_waypoint/wp = LAZYACCESS(compass_waypoints, id) - if(!wp) - wp = new /datum/compass_waypoint() - wp.set_values(label, heading_x, heading_y, heading_z, label_color) - LAZYSET(compass_waypoints, id, wp) - rebuild_overlay_lists(TRUE) - -/obj/compass_holder/proc/recalculate_heading(var/rebuild_icon = TRUE) - if(rebuild_icon) - update_icon() - -/obj/compass_holder/proc/show_waypoint(var/id) - var/datum/compass_waypoint/wp = compass_waypoints[id] - wp.hidden = FALSE - -/obj/compass_holder/proc/hide_waypoint(var/id) - var/datum/compass_waypoint/wp = compass_waypoints[id] - wp.hidden = TRUE - -/obj/compass_holder/proc/hide_waypoints(var/rebuild_overlays = FALSE) - for(var/id in compass_waypoints) - hide_waypoint(id) - if(rebuild_overlays) - rebuild_overlay_lists(TRUE) - -/obj/compass_holder/proc/get_compass_origin() - return get_turf(src) - -/obj/compass_holder/proc/rebuild_overlay_lists(var/update_icon = FALSE) - compass_waypoint_markers = null - var/turf/T = get_compass_origin() - if(istype(T)) - var/translate_val = get_label_offset() - for(var/id in compass_waypoints) - var/datum/compass_waypoint/wp = compass_waypoints[id] - if(should_show(wp)) - wp.recalculate_heading(T.x, T.y, translate_val) - LAZYADD(compass_waypoint_markers, wp.compass_overlay) - if(update_icon) - update_icon() - -/obj/compass_holder/proc/should_show(var/datum/compass_waypoint/wp) - return wp && !wp.hidden diff --git a/code/game/objects/compass/compass_waypoint.dm b/code/game/objects/compass/compass_waypoint.dm deleted file mode 100644 index 33efe3caf140d..0000000000000 --- a/code/game/objects/compass/compass_waypoint.dm +++ /dev/null @@ -1,30 +0,0 @@ -/datum/compass_waypoint - var/name - var/x - var/y - var/z - var/color - var/hidden = FALSE - var/image/compass_marker/compass_overlay - -/datum/compass_waypoint/proc/set_values(var/_name, var/_x, var/_y, var/_z, var/_color) - name = _name - x = _x - y = _y - z = _z - color = _color - compass_overlay = new - compass_overlay.loc = src - - compass_overlay.maptext = STYLE_SMALLFONTS_OUTLINE("
              |\n[uppertext(name)]
              ", 9, color, COLOR_BLACK) - compass_overlay.filters = filter(type="drop_shadow", color = "[color]" + "aa", size = 2, offset = 1,x = 0, y = 0) - compass_overlay.layer = HUD_BASE_LAYER - compass_overlay.plane = HUD_PLANE - -/datum/compass_waypoint/proc/recalculate_heading(var/cx, var/cy, var/translate_val) - var/matrix/M = matrix() - if(name) - translate_val -= 4 - M.Translate(0, translate_val) - M.Turn(Atan2(cy-y, cx-x)+180) - compass_overlay.transform = M diff --git a/code/game/objects/effects/bump_teleporter.dm b/code/game/objects/effects/bump_teleporter.dm deleted file mode 100644 index 831f9087d3a1d..0000000000000 --- a/code/game/objects/effects/bump_teleporter.dm +++ /dev/null @@ -1,34 +0,0 @@ -var/global/list/obj/effect/bump_teleporter/BUMP_TELEPORTERS = list() - -/obj/effect/bump_teleporter - name = "bump-teleporter" - icon = 'icons/mob/screen1.dmi' - icon_state = "x2" - var/id = null //id of this bump_teleporter. - var/id_target = null //id of bump_teleporter which this moves you to. - invisibility = 101 //nope, can't see this - anchored = TRUE - density = TRUE - opacity = 0 - -/obj/effect/bump_teleporter/New() - ..() - BUMP_TELEPORTERS += src - -/obj/effect/bump_teleporter/Destroy() - BUMP_TELEPORTERS -= src - return ..() - -/obj/effect/bump_teleporter/Bumped(atom/user) - if(!ismob(user)) - //user.loc = src.loc //Stop at teleporter location - return - - if(!id_target) - //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) - if(BT.id == src.id_target) - usr.forceMove(BT.loc) //Teleport to location with correct id. - return \ No newline at end of file diff --git a/code/game/objects/effects/chem/chemsmoke.dm b/code/game/objects/effects/chem/chemsmoke.dm deleted file mode 100644 index 103dcfb7cc03a..0000000000000 --- a/code/game/objects/effects/chem/chemsmoke.dm +++ /dev/null @@ -1,277 +0,0 @@ -///////////////////////////////////////////// -// Chem smoke -///////////////////////////////////////////// -/obj/effect/effect/smoke/chem - icon = 'icons/effects/chemsmoke.dmi' - opacity = 0 - layer = ABOVE_PROJECTILE_LAYER - time_to_live = 300 - pass_flags = PASS_FLAG_TABLE | PASS_FLAG_GRILLE - var/splash_amount = 5 //atoms moving through a smoke cloud get splashed with up to 10 units of reagent - var/turf/destination - -/obj/effect/effect/smoke/chem/New(var/newloc, smoke_duration, turf/dest_turf = null, icon/cached_icon = null) - time_to_live = smoke_duration - - ..() - - create_reagents(500) - - if(cached_icon) - icon = cached_icon - - set_dir(pick(GLOB.cardinal)) - pixel_x = -32 + rand(-8, 8) - pixel_y = -32 + rand(-8, 8) - - //switching opacity on after the smoke has spawned, and then turning it off before it is deleted results in cleaner - //lighting and view range updates (Is this still true with the new lighting system?) - set_opacity(1) - - //float over to our destination, if we have one - destination = dest_turf - if(destination) - walk_to(src, destination) - -/obj/effect/effect/smoke/chem/Destroy() - set_opacity(0) - // TODO - fadeOut() sleeps. Sleeping in /Destroy is Bad, this needs to be fixed. - fadeOut() - return ..() - -/obj/effect/effect/smoke/chem/Move() - var/list/oldlocs = view(1, src) - . = ..() - if(.) - for(var/turf/T in view(1, src) - oldlocs) - for(var/atom/movable/AM in T) - if(!istype(AM, /obj/effect/effect/smoke/chem)) - reagents.splash(AM, splash_amount, copy = 1) - if(loc == destination) - bound_width = 96 - bound_height = 96 - -/obj/effect/effect/smoke/chem/Crossed(atom/movable/AM) - ..() - if(!istype(AM, /obj/effect/effect/smoke/chem)) - reagents.splash(AM, splash_amount, copy = 1) - -/obj/effect/effect/smoke/chem/proc/initial_splash() - for(var/turf/T in view(1, src)) - for(var/atom/movable/AM in T) - if(!istype(AM, /obj/effect/effect/smoke/chem)) - reagents.splash(AM, splash_amount, copy = 1) - -// Fades out the smoke smoothly using it's alpha variable. -/obj/effect/effect/smoke/chem/proc/fadeOut(var/frames = 16) - set waitfor = FALSE - if(!alpha) return //already transparent - - frames = max(frames, 1) //We will just assume that by 0 frames, the coder meant "during one frame". - var/alpha_step = round(alpha / frames) - while(alpha > 0) - alpha = max(0, alpha - alpha_step) - sleep(world.tick_lag) - -///////////////////////////////////////////// -// Chem Smoke Effect System -///////////////////////////////////////////// -/datum/effect/effect/system/smoke_spread/chem - smoke_type = /obj/effect/effect/smoke/chem - var/obj/chemholder - var/range - var/list/targetTurfs - var/list/wallList - var/density - var/smokeVolume - var/show_log = 1 - -/datum/effect/effect/system/smoke_spread/chem/spores - show_log = 0 - var/datum/seed/seed - -/datum/effect/effect/system/smoke_spread/chem/spores/New(seed_name) - if(seed_name) - seed = SSplants.seeds[seed_name] - if(!seed) - qdel(src) - ..() - -/datum/effect/effect/system/smoke_spread/chem/New() - ..() - chemholder = new/obj() - chemholder.create_reagents(500) - -//Sets up the chem smoke effect -// Calculates the max range smoke can travel, then gets all turfs in that view range. -// Culls the selected turfs to a (roughly) circle shape, then calls smokeFlow() to make -// sure the smoke can actually path to the turfs. This culls any turfs it can't reach. -/datum/effect/effect/system/smoke_spread/chem/set_up(var/datum/reagents/carry = null, n = 10, c = 0, loca, direct) - range = n * 0.3 - cardinals = c - carry.trans_to_obj(chemholder, carry.total_volume, copy = 1) - smokeVolume = n - - if(isturf(loca)) - location = loca - else - location = get_turf(loca) - if(!location) - return - - targetTurfs = new() - - //build affected area list - for(var/turf/T in view(range, location)) - //cull turfs to circle - if(sqrt((T.x - location.x)**2 + (T.y - location.y)**2) <= range) - targetTurfs += T - - wallList = new() - - smokeFlow() //pathing check - - //set the density of the cloud - for diluting reagents - density = max(1, targetTurfs.len / 4) //clamp the cloud density minimum to 1 so it cant multiply the reagents - - //Admin messaging - var/contained = carry.get_reagents() - var/area/A = get_area(location) - - var/where = "[A.name] | [location.x], [location.y]" - var/whereLink = "[where]" - - if(show_log) - if(carry.my_atom.fingerprintslast) - var/mob/M = get_mob_by_key(carry.my_atom.fingerprintslast) - var/more = "" - if(M) - more = "(?)" - log_and_message_admins("A chemical smoke reaction has taken place in ([whereLink])[contained]. Last associated key is [carry.my_atom.fingerprintslast][more].") - else - log_and_message_admins("A chemical smoke reaction has taken place in ([whereLink]). No associated key.") - -//Runs the chem smoke effect -// Spawns damage over time loop for each reagent held in the cloud. -// Applies reagents to walls that affect walls (only thermite and plant-b-gone at the moment). -// Also calculates target locations to spawn the visual smoke effect on, so the whole area -// is covered fairly evenly. -/datum/effect/effect/system/smoke_spread/chem/start() - if(!location) - return - - if(chemholder.reagents.reagent_list.len) //reagent application - only run if there are extra reagents in the smoke - for(var/turf/T in wallList) - chemholder.reagents.touch_turf(T) - for(var/turf/T in targetTurfs) - chemholder.reagents.touch_turf(T) - for(var/atom/A in T.contents) - if(istype(A, /obj/effect/effect/smoke/chem) || istype(A, /mob)) - continue - else if(isobj(A) && !A.simulated) - chemholder.reagents.touch_obj(A) - - var/color = chemholder.reagents.get_color() //build smoke icon - var/icon/I - if(color) - I = icon('icons/effects/chemsmoke.dmi') - I += color - else - I = icon('icons/effects/96x96.dmi', "smoke") - - //Calculate smoke duration - var/smoke_duration = smokeVolume * 1.5 SECONDS - - var/pressure = 0 - var/datum/gas_mixture/environment = location.return_air() - if(environment) pressure = environment.return_pressure() - smoke_duration = clamp(smoke_duration * pressure / (ONE_ATMOSPHERE / 3), 5, smoke_duration) - - var/const/arcLength = 2.3559 //distance between each smoke cloud - - for(var/i = 0, i < range, i++) //calculate positions for smoke coverage - then spawn smoke - var/radius = i * 1.5 - if(!radius) - spawn(0) - spawnSmoke(location, I, smoke_duration, 1) - continue - - var/offset = 0 - var/points = round((radius * 2 * M_PI) / arcLength) - var/angle = round(RAD_TO_DEG * arcLength / radius, 1) - - if(!IsInteger(radius)) - offset = 45 //degrees - - for(var/j = 0, j < points, j++) - var/a = (angle * j) + offset - var/x = round(radius * cos(a) + location.x, 1) - var/y = round(radius * sin(a) + location.y, 1) - var/turf/T = locate(x,y,location.z) - if(!T) - continue - if(T in targetTurfs) - spawn(0) - spawnSmoke(T, I, smoke_duration, range) - -//------------------------------------------ -// Randomizes and spawns the smoke effect. -// Also handles deleting the smoke once the effect is finished. -//------------------------------------------ -/datum/effect/effect/system/smoke_spread/chem/proc/spawnSmoke(var/turf/T, var/icon/I, var/smoke_duration, var/dist = 1, var/splash_initial=0, var/obj/effect/effect/smoke/chem/passed_smoke) - - var/obj/effect/effect/smoke/chem/smoke - if(passed_smoke) - smoke = passed_smoke - else - smoke = new /obj/effect/effect/smoke/chem(location, smoke_duration + rand(1.5 SECONDS, 3 SECONDS), T, I) - - if(chemholder.reagents.reagent_list.len) - chemholder.reagents.trans_to_obj(smoke, chemholder.reagents.total_volume / dist, copy = 1) //copy reagents to the smoke so mob/breathe() can handle inhaling the reagents - - //Kinda ugly, but needed unless the system is reworked - if(splash_initial) - smoke.initial_splash() - - -/datum/effect/effect/system/smoke_spread/chem/spores/spawnSmoke(var/turf/T, var/icon/I, var/smoke_duration, var/dist = 1) - var/obj/effect/effect/smoke/chem/spores = new /obj/effect/effect/smoke/chem(location) - spores.SetName("cloud of [seed.seed_name] [seed.seed_noun]") - ..(T, I, smoke_duration, dist, passed_smoke=spores) - - -/datum/effect/effect/system/smoke_spread/chem/proc/smokeFlow() // Smoke pathfinder. Uses a flood fill method based on zones to quickly check what turfs the smoke (airflow) can actually reach. - - var/list/pending = new() - var/list/complete = new() - - pending += location - - while(pending.len) - for(var/turf/current in pending) - for(var/D in GLOB.cardinal) - var/turf/target = get_step(current, D) - if(wallList) - if(istype(target, /turf/simulated/wall)) - if(!(target in wallList)) - wallList += target - continue - - if(target in pending) - continue - if(target in complete) - continue - if(!(target in targetTurfs)) - continue - if(current.c_airblock(target)) //this is needed to stop chemsmoke from passing through thin window walls - continue - if(target.c_airblock(current)) - continue - pending += target - - pending -= current - complete += current - - targetTurfs = complete - - return diff --git a/code/game/objects/effects/chem/foam.dm b/code/game/objects/effects/chem/foam.dm deleted file mode 100644 index 1b79f82f6dc67..0000000000000 --- a/code/game/objects/effects/chem/foam.dm +++ /dev/null @@ -1,182 +0,0 @@ -// Foam -// Similar to smoke, but spreads out more -// metal foams leave behind a foamed metal wall - -/obj/effect/effect/foam - name = "foam" - icon_state = "foam" - opacity = 0 - anchored = TRUE - density = FALSE - layer = ABOVE_OBJ_LAYER - mouse_opacity = 0 - animate_movement = 0 - var/amount = 3 - var/expand = 1 - var/metal = 0 - -/obj/effect/effect/foam/New(var/loc, var/ismetal = 0) - ..(loc) - icon_state = "[ismetal? "m" : ""]foam" - metal = ismetal - playsound(src, 'sound/effects/bubbles2.ogg', 80, 1, -3) - spawn(3 + metal * 3) - Process() - checkReagents() - addtimer(CALLBACK(src, .proc/remove_foam), 12 SECONDS) - -/obj/effect/effect/foam/proc/remove_foam() - STOP_PROCESSING(SSobj, src) - if(metal) - var/obj/structure/foamedmetal/M = new(src.loc) - M.metal = metal - M.update_icon() - flick("[icon_state]-disolve", src) - QDEL_IN(src, 5) - -/obj/effect/effect/foam/proc/checkReagents() // transfer any reagents to the floor - if(!metal && reagents) - var/turf/T = get_turf(src) - reagents.touch_turf(T) - for(var/obj/O in T) - reagents.touch_obj(O) - -/obj/effect/effect/foam/Process() - if(--amount < 0) - return - - for(var/direction in GLOB.cardinal) - var/turf/T = get_step(src, direction) - if(!T) - continue - - if(!T.Enter(src)) - continue - - var/obj/effect/effect/foam/F = locate() in T - if(F) - continue - - F = new(T, metal) - F.amount = amount - if(!metal) - F.create_reagents(10) - if(reagents) - for(var/datum/reagent/R in reagents.reagent_list) - F.reagents.add_reagent(R.type, 1, safety = 1) //added safety check since reagents in the foam have already had a chance to react - -/obj/effect/effect/foam/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume) // foam disolves when heated, except metal foams - if(!metal && prob(max(0, exposed_temperature - 475))) - flick("[icon_state]-disolve", src) - - spawn(5) - qdel(src) - -/obj/effect/effect/foam/Crossed(var/atom/movable/AM) - if(metal) - return - if(istype(AM, /mob/living)) - var/mob/living/M = AM - M.slip("the foam", 6) - -/datum/effect/effect/system/foam_spread - var/amount = 5 // the size of the foam spread. - var/list/carried_reagents // the IDs of reagents present when the foam was mixed - var/metal = 0 // 0 = foam, 1 = metalfoam, 2 = ironfoam - -/datum/effect/effect/system/foam_spread/set_up(amt=5, loca, var/datum/reagents/carry = null, var/metalfoam = 0) - amount = round(sqrt(amt / 3), 1) - if(isturf(loca)) - location = loca - else - location = get_turf(loca) - - carried_reagents = list() - metal = metalfoam - - // bit of a hack here. Foam carries along any reagent also present in the glass it is mixed with (defaults to water if none is present). Rather than actually transfer the reagents, this makes a list of the reagent ids and spawns 1 unit of that reagent when the foam disolves. - - if(carry && !metal) - for(var/datum/reagent/R in carry.reagent_list) - carried_reagents += R.type - -/datum/effect/effect/system/foam_spread/start() - spawn(0) - var/obj/effect/effect/foam/F = locate() in location - if(F) - F.amount += amount - return - - F = new /obj/effect/effect/foam(location, metal) - F.amount = amount - - if(!metal) // don't carry other chemicals if a metal foam - F.create_reagents(10) - - if(carried_reagents) - for(var/id in carried_reagents) - F.reagents.add_reagent(id, 1, safety = 1) //makes a safety call because all reagents should have already reacted anyway - else - F.reagents.add_reagent(/datum/reagent/water, 1, safety = 1) - -// wall formed by metal foams, dense and opaque, but easy to break - -/obj/structure/foamedmetal - icon = 'icons/effects/effects.dmi' - icon_state = "metalfoam" - density = TRUE - opacity = 1 // changed in New() - anchored = TRUE - name = "foamed metal" - desc = "A lightweight foamed metal wall." - var/metal = 1 // 1 = aluminium, 2 = iron - -/obj/structure/foamedmetal/New() - ..() - update_nearby_tiles(1) - -/obj/structure/foamedmetal/Destroy() - set_density(0) - update_nearby_tiles(1) - ..() - -/obj/structure/foamedmetal/on_update_icon() - if(metal == 1) - icon_state = "metalfoam" - else - icon_state = "ironfoam" - -/obj/structure/foamedmetal/ex_act(severity) - qdel(src) - -/obj/structure/foamedmetal/bullet_act() - if(metal == 1 || prob(50)) - qdel(src) - -/obj/structure/foamedmetal/attack_hand(var/mob/user) - if ((MUTATION_HULK in user.mutations) || (prob(75 - metal * 25))) - user.visible_message("[user] smashes through the foamed metal.", "You smash through the metal foam wall.") - qdel(src) - else - to_chat(user, "You hit the metal foam but bounce off it.") - return - -/obj/structure/foamedmetal/attackby(var/obj/item/I, var/mob/user) - if(istype(I, /obj/item/grab)) - var/obj/item/grab/G = I - G.affecting.loc = src.loc - visible_message("[G.assailant] smashes [G.affecting] through the foamed metal wall.") - qdel(I) - qdel(src) - return - - if(prob(I.force * 20 - metal * 25)) - user.visible_message("[user] smashes through the foamed metal.", "You smash through the foamed metal with \the [I].") - qdel(src) - else - to_chat(user, "You hit the metal foam to no effect.") - -/obj/structure/foamedmetal/CanPass(atom/movable/mover, turf/target, height=1.5, air_group = 0) - if(air_group) - return 0 - return !density \ No newline at end of file diff --git a/code/game/objects/effects/chem/water.dm b/code/game/objects/effects/chem/water.dm deleted file mode 100644 index 7c6afd1c27d5a..0000000000000 --- a/code/game/objects/effects/chem/water.dm +++ /dev/null @@ -1,65 +0,0 @@ -/obj/effect/effect/water - name = "water" - icon = 'icons/effects/effects.dmi' - icon_state = "extinguish" - mouse_opacity = 0 - pass_flags = PASS_FLAG_TABLE | PASS_FLAG_GRILLE - -/obj/effect/effect/water/New(loc) - ..() - QDEL_IN(src, 15 SECONDS) // In case whatever made it forgets to delete it - -/obj/effect/effect/water/set_color() // Call it after you move reagents to it - icon += reagents.get_color() - -/obj/effect/effect/water/proc/set_up(var/turf/target, var/step_count = 5, var/delay = 5) - set waitfor = FALSE - if(!target) - return - for(var/i = 1 to step_count) - if(!loc) - return - step_towards(src, target) - var/turf/T = get_turf(src) - if(T && reagents) - var/list/splash_mobs = list() - var/list/splash_others = list(T) - for(var/atom/A in T) - if(A.simulated) - if(!ismob(A)) - splash_others += A - else if(isliving(A)) - splash_mobs += A - - //each step splash 1/5 of the reagents on non-mobs - //could determine the # of steps until target, but that would be complicated - for(var/atom/A in splash_others) - reagents.splash(A, (reagents.total_volume/step_count)/splash_others.len) - for(var/mob/living/M in splash_mobs) - reagents.splash(M, reagents.total_volume/splash_mobs.len) - if(reagents.total_volume < 1) - break - if(T == get_turf(target)) - for(var/atom/A in splash_others) - reagents.splash(A, reagents.total_volume/splash_others.len) //splash anything left - break - - sleep(delay) - sleep(10) - qdel(src) - -/obj/effect/effect/water/Move(turf/newloc) - if(newloc.density) - return 0 - . = ..() - -/obj/effect/effect/water/Bump(atom/A) - if(reagents) - reagents.touch(A) - return ..() - -//Used by spraybottles. -/obj/effect/effect/water/chempuff - name = "chemicals" - icon = 'icons/obj/chempuff.dmi' - icon_state = "" diff --git a/code/game/objects/effects/decals/Cleanable/aliens.dm b/code/game/objects/effects/decals/Cleanable/aliens.dm deleted file mode 100644 index 5574b50481386..0000000000000 --- a/code/game/objects/effects/decals/Cleanable/aliens.dm +++ /dev/null @@ -1,6 +0,0 @@ -/obj/effect/decal/cleanable/blood/xeno - name = "xeno blood" - desc = "It's green and acidic. It looks like... blood?" - icon = 'icons/effects/blood.dmi' - basecolor = "#05ee05" - cleanable_scent = null diff --git a/code/game/objects/effects/decals/Cleanable/fuel.dm b/code/game/objects/effects/decals/Cleanable/fuel.dm deleted file mode 100644 index 46508248d966c..0000000000000 --- a/code/game/objects/effects/decals/Cleanable/fuel.dm +++ /dev/null @@ -1,45 +0,0 @@ -/obj/effect/decal/cleanable/liquid_fuel - //Liquid fuel is used for things that used to rely on volatile fuels or phoron being contained to a couple tiles. - icon = 'icons/effects/effects.dmi' - icon_state = "fuel" - layer = BLOOD_LAYER - var/amount = 1 - cleanable_scent = "fuel" - -/obj/effect/decal/cleanable/liquid_fuel/proc/Spread(exclude=list()) - //Allows liquid fuels to sometimes flow into other tiles. - if(amount < 15) return //lets suppose welder fuel is fairly thick and sticky. For something like water, 5 or less would be more appropriate. - var/turf/simulated/S = loc - if(!istype(S)) return - for(var/d in GLOB.cardinal) - var/turf/simulated/target = get_step(src,d) - var/turf/simulated/origin = get_turf(src) - if(origin.CanPass(null, target, 0, 0) && target.CanPass(null, origin, 0, 0)) - var/obj/effect/decal/cleanable/liquid_fuel/other_fuel = locate() in target - if(other_fuel) - other_fuel.amount += amount*0.25 - if(!(other_fuel in exclude)) - exclude += src - other_fuel.Spread(exclude) - else - new/obj/effect/decal/cleanable/liquid_fuel(target, amount*0.25,1) - amount *= 0.75 - -/obj/effect/decal/cleanable/liquid_fuel/Initialize(mapload, amt=1, nologs=FALSE) - if(!nologs && !mapload) - log_and_message_admins(" - Liquid fuel has been spilled in [get_area(loc)]", location = loc) - src.amount = amt - var/has_spread = 0 - //Be absorbed by any other liquid fuel in the tile. - for(var/obj/effect/decal/cleanable/liquid_fuel/other in loc) - if(other != src) - other.amount += src.amount - other.Spread() - has_spread = 1 - break - - . = ..() - if(!has_spread) - Spread() - else - return INITIALIZE_HINT_QDEL diff --git a/code/game/objects/effects/decals/Cleanable/humans.dm b/code/game/objects/effects/decals/Cleanable/humans.dm deleted file mode 100644 index 55644e830bedb..0000000000000 --- a/code/game/objects/effects/decals/Cleanable/humans.dm +++ /dev/null @@ -1,294 +0,0 @@ -#define DRYING_TIME 5 * 60*10 //for 1 unit of depth in puddle (amount var) -#define BLOOD_SIZE_SMALL 1 -#define BLOOD_SIZE_MEDIUM 2 -#define BLOOD_SIZE_BIG 3 -#define BLOOD_SIZE_NO_MERGE -1 - -var/global/list/image/splatter_cache=list() - -/obj/effect/decal/cleanable/blood - name = "blood" - desc = "It's some blood. That's not supposed to be there." - gender = PLURAL - icon = 'icons/effects/blood.dmi' - icon_state = "mfloor1" - random_icon_states = list("mfloor1", "mfloor2", "mfloor3", "mfloor4", "mfloor5", "mfloor6", "mfloor7", "dir_splatter_1", "dir_splatter_2") - blood_DNA = list() - generic_filth = TRUE - persistent = TRUE - appearance_flags = DEFAULT_APPEARANCE_FLAGS | NO_CLIENT_COLOR - cleanable_scent = "blood" - scent_descriptor = SCENT_DESC_ODOR - - var/base_icon = 'icons/effects/blood.dmi' - var/basecolor=COLOR_BLOOD_HUMAN // Color when wet. - var/amount = 5 - var/drytime - var/dryname = "dried blood" - var/drydesc = "It's dry and crusty. Someone isn't doing their job." - var/blood_size = BLOOD_SIZE_MEDIUM // A relative size; larger-sized blood will not override smaller-sized blood, except maybe at mapload. - -/obj/effect/decal/cleanable/blood/reveal_blood() - if(!fluorescent) - fluorescent = 1 - basecolor = COLOR_LUMINOL - update_icon() - -/obj/effect/decal/cleanable/blood/clean_blood() - fluorescent = 0 - if(invisibility != 100) - set_invisibility(100) - amount = 0 - STOP_PROCESSING(SSobj, src) - remove_extension(src, /datum/extension/scent) - ..(ignore=1) - -/obj/effect/decal/cleanable/blood/hide() - return - -/obj/effect/decal/cleanable/blood/Destroy() - STOP_PROCESSING(SSobj, src) - return ..() - -/obj/effect/decal/cleanable/blood/Initialize(mapload) - . = ..() - if(merge_with_blood(!mapload)) - return INITIALIZE_HINT_QDEL - start_drying() - -// Returns true if overriden and needs deletion. If the argument is false, we will merge into any existing blood. -/obj/effect/decal/cleanable/blood/proc/merge_with_blood(var/override = TRUE) - . = FALSE - if(blood_size == BLOOD_SIZE_NO_MERGE) - return - if(isturf(loc)) - for(var/obj/effect/decal/cleanable/blood/B in loc) - if(B == src) - continue - if(B.blood_size == BLOOD_SIZE_NO_MERGE) - continue - if(override && blood_size >= B.blood_size) - if (B.blood_DNA) - blood_DNA |= B.blood_DNA.Copy() - qdel(B) - continue - if(B.blood_DNA) - B.blood_DNA |= blood_DNA.Copy() - . = TRUE - -/obj/effect/decal/cleanable/blood/proc/start_drying() - drytime = world.time + DRYING_TIME * (amount+1) - update_icon() - START_PROCESSING(SSobj, src) - -/obj/effect/decal/cleanable/blood/Process() - if(world.time > drytime) - dry() - -/obj/effect/decal/cleanable/blood/on_update_icon() - if(basecolor == "rainbow") basecolor = get_random_colour(1) - color = basecolor - if(basecolor == SYNTH_BLOOD_COLOUR) - SetName("oil") - desc = "It's black and greasy." - else - SetName(initial(name)) - desc = initial(desc) - -/obj/effect/decal/cleanable/blood/Crossed(mob/living/carbon/human/perp) - if (!istype(perp)) - return - if(amount < 1) - return - - var/obj/item/organ/external/l_foot = perp.get_organ(BP_L_FOOT) - var/obj/item/organ/external/r_foot = perp.get_organ(BP_R_FOOT) - var/hasfeet = 1 - if((!l_foot || l_foot.is_stump()) && (!r_foot || r_foot.is_stump())) - hasfeet = 0 - if(perp.shoes && !perp.buckled)//Adding blood to shoes - var/obj/item/clothing/shoes/S = perp.shoes - if(istype(S)) - S.blood_color = basecolor - S.track_blood = max(amount,S.track_blood) - if(!S.blood_overlay) - S.generate_blood_overlay() - if(!S.blood_DNA) - S.blood_DNA = list() - S.blood_overlay.color = basecolor - S.overlays += S.blood_overlay - if(S.blood_overlay && S.blood_overlay.color != basecolor) - S.blood_overlay.color = basecolor - S.overlays.Cut() - S.overlays += S.blood_overlay - S.blood_DNA |= blood_DNA.Copy() - - else if (hasfeet)//Or feet - perp.feet_blood_color = basecolor - perp.track_blood = max(amount,perp.track_blood) - if(!perp.feet_blood_DNA) - perp.feet_blood_DNA = list() - perp.feet_blood_DNA |= blood_DNA.Copy() - else if (perp.buckled && istype(perp.buckled, /obj/structure/bed/chair/wheelchair)) - var/obj/structure/bed/chair/wheelchair/W = perp.buckled - W.bloodiness = 4 - - perp.update_inv_shoes(1) - amount-- - -/obj/effect/decal/cleanable/blood/proc/dry() - name = dryname - desc = drydesc - color = adjust_brightness(color, -50) - amount = 0 - remove_extension(src, /datum/extension/scent) - STOP_PROCESSING(SSobj, src) - -/obj/effect/decal/cleanable/blood/attack_hand(mob/living/carbon/human/user) - ..() - if (amount && istype(user)) - if (user.gloves) - return - var/taken = rand(1,amount) - amount -= taken - to_chat(user, "You get some of \the [src] on your hands.") - if (!user.blood_DNA) - user.blood_DNA = list() - user.blood_DNA |= blood_DNA.Copy() - user.bloody_hands = taken - user.hand_blood_color = basecolor - user.update_inv_gloves(1) - user.verbs += /mob/living/carbon/human/proc/bloody_doodle - -/obj/effect/decal/cleanable/blood/splatter - random_icon_states = list("mgibbl1", "mgibbl2", "mgibbl3", "mgibbl4", "mgibbl5") - amount = 2 - blood_size = BLOOD_SIZE_BIG - scent_intensity = /decl/scent_intensity/strong - scent_range = 3 - -/obj/effect/decal/cleanable/blood/drip - name = "drips of blood" - desc = "Drips and drops of blood." - gender = PLURAL - icon = 'icons/effects/drip.dmi' - icon_state = "1" - random_icon_states = list("1","2","3","4","5") - amount = 0 - blood_size = BLOOD_SIZE_SMALL - scent_intensity = /decl/scent_intensity - scent_range = 1 - - var/list/drips - -/obj/effect/decal/cleanable/blood/drip/Initialize() - . = ..() - drips = list(icon_state) - -/obj/effect/decal/cleanable/blood/writing - icon = 'icons/effects/writing.dmi' - icon_state = "writing" - desc = "It looks like a writing in blood." - gender = NEUTER - random_icon_states = list("writing1","writing2","writing3","writing4","writing5") - amount = 0 - var/message - blood_size = BLOOD_SIZE_BIG - scent_intensity = /decl/scent_intensity - scent_range = 1 - -/obj/effect/decal/cleanable/blood/writing/New() - ..() - if(LAZYLEN(random_icon_states)) - for(var/obj/effect/decal/cleanable/blood/writing/W in loc) - random_icon_states.Remove(W.icon_state) - icon_state = pick(random_icon_states) - else - icon_state = "writing1" - -/obj/effect/decal/cleanable/blood/writing/examine(mob/user) - . = ..() - to_chat(user, "It reads: \"[message]\"") - -/obj/effect/decal/cleanable/blood/gibs - name = "gibs" - desc = "They look bloody and gruesome." - gender = PLURAL - icon = 'icons/effects/blood.dmi' - icon_state = "gibbl5" - random_icon_states = list("gib1", "gib2", "gib3", "gib5", "gib6") - var/fleshcolor = "#ffffff" - blood_size = BLOOD_SIZE_NO_MERGE - cleanable_scent = "viscera" - scent_intensity = /decl/scent_intensity/overpowering - scent_range = 4 - -/obj/effect/decal/cleanable/blood/gibs/on_update_icon() - - var/image/giblets = new(base_icon, "[icon_state]_flesh", dir) - if(!fleshcolor || fleshcolor == "rainbow") - fleshcolor = get_random_colour(1) - giblets.color = fleshcolor - - var/icon/blood = new(base_icon,"[icon_state]",dir) - if(basecolor == "rainbow") basecolor = get_random_colour(1) - blood.Blend(basecolor,ICON_MULTIPLY) - - icon = blood - overlays.Cut() - overlays += giblets - -/obj/effect/decal/cleanable/blood/gibs/up - random_icon_states = list("gib1", "gib2", "gib3", "gib4", "gib5", "gib6","gibup1","gibup1","gibup1") - -/obj/effect/decal/cleanable/blood/gibs/down - random_icon_states = list("gib1", "gib2", "gib3", "gib4", "gib5", "gib6","gibdown1","gibdown1","gibdown1") - -/obj/effect/decal/cleanable/blood/gibs/body - random_icon_states = list("gibhead", "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/proc/streak(var/list/directions) - var/direction = pick(directions) - for (var/i = 0, i < pick(1, 200; 2, 150; 3, 50; 4), i++) - sleep(3) - if (i > 0) - var/obj/effect/decal/cleanable/blood/b = new /obj/effect/decal/cleanable/blood/splatter(loc) - b.basecolor = src.basecolor - b.update_icon() - if (step_to(src, get_step(src, direction), 0)) - break - -/obj/effect/decal/cleanable/blood/gibs/start_drying() - return - -/obj/effect/decal/cleanable/blood/gibs/merge_with_blood() - return FALSE - -/obj/effect/decal/cleanable/mucus - name = "mucus" - desc = "Disgusting mucus." - gender = PLURAL - icon = 'icons/effects/blood.dmi' - icon_state = "mucus" - generic_filth = TRUE - persistent = TRUE - var/dry = FALSE - -/obj/effect/decal/cleanable/mucus/Initialize() - . = ..() - addtimer(CALLBACK(src, .proc/set_dry), DRYING_TIME * 2) - -/obj/effect/decal/cleanable/mucus/proc/set_dry() - dry = TRUE - -#undef BLOOD_SIZE_SMALL -#undef BLOOD_SIZE_MEDIUM -#undef BLOOD_SIZE_BIG -#undef BLOOD_SIZE_NO_MERGE diff --git a/code/game/objects/effects/decals/Cleanable/misc.dm b/code/game/objects/effects/decals/Cleanable/misc.dm deleted file mode 100644 index 51b737cd5398c..0000000000000 --- a/code/game/objects/effects/decals/Cleanable/misc.dm +++ /dev/null @@ -1,128 +0,0 @@ -/obj/effect/decal/cleanable/generic - name = "clutter" - desc = "Someone should clean that up." - gender = PLURAL - icon = 'icons/obj/objects.dmi' - icon_state = "shards" - -/obj/effect/decal/cleanable/ash - name = "ashes" - desc = "Ashes to ashes, dust to dust, and into space." - gender = PLURAL - icon = 'icons/obj/objects.dmi' - icon_state = "ash" - -/obj/effect/decal/cleanable/ash/attack_hand(var/mob/user) - to_chat(user, "[src] sifts through your fingers.") - var/turf/simulated/floor/F = get_turf(src) - if (istype(F)) - F.dirt += 4 - qdel(src) - -/obj/effect/decal/cleanable/greenglow/Initialize() - . = ..() - addtimer(CALLBACK(src, /datum/proc/qdel_self), 2 MINUTES) - -/obj/effect/decal/cleanable/dirt - name = "dirt" - desc = "Someone should clean that up." - gender = PLURAL - icon = 'icons/effects/effects.dmi' - icon_state = "dirt" - mouse_opacity = 0 - persistent = TRUE - -/obj/effect/decal/cleanable/flour - name = "flour" - desc = "It's still good. Four second rule!" - gender = PLURAL - icon = 'icons/effects/effects.dmi' - icon_state = "flour" - persistent = TRUE - -/obj/effect/decal/cleanable/greenglow - name = "glowing goo" - desc = "Jeez. I hope that's not for lunch." - gender = PLURAL - light_outer_range = 1 - icon = 'icons/effects/effects.dmi' - icon_state = "greenglow" - persistent = TRUE - generic_filth = TRUE - -/obj/effect/decal/cleanable/cobweb - name = "cobweb" - desc = "Somebody should remove that." - layer = ABOVE_HUMAN_LAYER - icon = 'icons/effects/effects.dmi' - icon_state = "cobweb1" - -/obj/effect/decal/cleanable/molten_item - name = "gooey grey mass" - desc = "It looks like a melted... something." - icon = 'icons/obj/chemical.dmi' - icon_state = "molten" - persistent = TRUE - generic_filth = TRUE - -/obj/effect/decal/cleanable/cobweb2 - name = "cobweb" - desc = "Somebody should remove that." - layer = ABOVE_HUMAN_LAYER - icon = 'icons/effects/effects.dmi' - icon_state = "cobweb2" - -//Vomit (sorry) -/obj/effect/decal/cleanable/vomit - name = "vomit" - desc = "Gosh, how unpleasant." - gender = PLURAL - icon = 'icons/effects/vomit.dmi' - icon_state = "vomit_1" - persistent = TRUE - generic_filth = TRUE - -/obj/effect/decal/cleanable/vomit/New() - random_icon_states = icon_states(icon) - ..() - atom_flags |= ATOM_FLAG_OPEN_CONTAINER - create_reagents(30, src) - if(prob(75)) - SetTransform(rotation = pick(90, 180, 270)) - -/obj/effect/decal/cleanable/vomit/on_update_icon() - . = ..() - color = reagents.get_color() - -/obj/effect/decal/cleanable/tomato_smudge - name = "tomato smudge" - desc = "It's red." - icon = 'icons/effects/tomatodecal.dmi' - random_icon_states = list("tomato_floor1", "tomato_floor2", "tomato_floor3") - persistent = TRUE - generic_filth = TRUE - -/obj/effect/decal/cleanable/egg_smudge - name = "smashed egg" - desc = "Seems like this one won't hatch." - icon = 'icons/effects/tomatodecal.dmi' - random_icon_states = list("smashed_egg1", "smashed_egg2", "smashed_egg3") - persistent = TRUE - generic_filth = TRUE - -/obj/effect/decal/cleanable/pie_smudge //honk - name = "smashed pie" - desc = "It's pie cream from a cream pie." - icon = 'icons/effects/tomatodecal.dmi' - random_icon_states = list("smashed_pie") - persistent = TRUE - generic_filth = TRUE - -/obj/effect/decal/cleanable/fruit_smudge - name = "smudge" - desc = "Some kind of fruit smear." - icon = 'icons/effects/blood.dmi' - icon_state = "mfloor1" - random_icon_states = list("mfloor1", "mfloor2", "mfloor3", "mfloor4", "mfloor5", "mfloor6", "mfloor7") - persistent = TRUE - generic_filth = TRUE diff --git a/code/game/objects/effects/decals/Cleanable/robots.dm b/code/game/objects/effects/decals/Cleanable/robots.dm deleted file mode 100644 index a808c214a7c77..0000000000000 --- a/code/game/objects/effects/decals/Cleanable/robots.dm +++ /dev/null @@ -1,51 +0,0 @@ -/obj/effect/decal/cleanable/blood/gibs/robot - name = "robot debris" - desc = "It's a useless heap of junk..." - icon = 'icons/mob/robots_gibs.dmi' - icon_state = "gib1" - basecolor = SYNTH_BLOOD_COLOUR - random_icon_states = list("gib1", "gib2", "gib3", "gib4", "gib5", "gib6", "gib7") - cleanable_scent = "industrial lubricant" - scent_intensity = /decl/scent_intensity/normal - scent_range = 2 - -/obj/effect/decal/cleanable/blood/gibs/robot/on_update_icon() - color = "#ffffff" - -/obj/effect/decal/cleanable/blood/gibs/robot/dry() //pieces of robots do not dry up like - return - -/obj/effect/decal/cleanable/blood/gibs/robot/streak(var/list/directions) - var/direction = pick(directions) - for (var/i = 0, i < pick(1, 200; 2, 150; 3, 50; 4), i++) - sleep(3) - if (i > 0) - if (prob(40)) - var/obj/effect/decal/cleanable/blood/oil/streak = new(src.loc) - streak.update_icon() - else if (prob(10)) - var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread - s.set_up(3, 1, src) - s.start() - if (step_to(src, get_step(src, direction), 0)) - break - -/obj/effect/decal/cleanable/blood/gibs/robot/limb - random_icon_states = list("gibarm", "gibleg") - -/obj/effect/decal/cleanable/blood/gibs/robot/up - random_icon_states = list("gib1", "gib2", "gib3", "gib4", "gib5", "gib6", "gib7","gibup1","gibup1") //2:7 is close enough to 1:4 - -/obj/effect/decal/cleanable/blood/gibs/robot/down - random_icon_states = list("gib1", "gib2", "gib3", "gib4", "gib5", "gib6", "gib7","gibdown1","gibdown1") //2:7 is close enough to 1:4 - -/obj/effect/decal/cleanable/blood/oil - basecolor = SYNTH_BLOOD_COLOUR - cleanable_scent = "industrial lubricant" - -/obj/effect/decal/cleanable/blood/oil/dry() - return - -/obj/effect/decal/cleanable/blood/oil/streak - random_icon_states = list("mgibbl1", "mgibbl2", "mgibbl3", "mgibbl4", "mgibbl5") - amount = 2 \ No newline at end of file diff --git a/code/game/objects/effects/decals/Cleanable/tracks.dm b/code/game/objects/effects/decals/Cleanable/tracks.dm deleted file mode 100644 index 1772cfe254cba..0000000000000 --- a/code/game/objects/effects/decals/Cleanable/tracks.dm +++ /dev/null @@ -1,211 +0,0 @@ -// Stolen en masse from N3X15 of /vg/station with much gratitude. - -// The idea is to have 4 bits for coming and 4 for going. -#define TRACKS_COMING_NORTH 1 -#define TRACKS_COMING_SOUTH 2 -#define TRACKS_COMING_EAST 4 -#define TRACKS_COMING_WEST 8 -#define TRACKS_GOING_NORTH 16 -#define TRACKS_GOING_SOUTH 32 -#define TRACKS_GOING_EAST 64 -#define TRACKS_GOING_WEST 128 - -// 5 seconds -#define TRACKS_CRUSTIFY_TIME 50 - -// color-dir-dry -var/global/list/image/fluidtrack_cache=list() - -/datum/fluidtrack - var/direction=0 - var/basecolor=COLOR_BLOOD_HUMAN - var/wet=0 - var/fresh=1 - var/crusty=0 - var/image/overlay - -/datum/fluidtrack/New(_direction,_color,_wet) - src.direction=_direction - src.basecolor=_color - src.wet=_wet - -/obj/effect/decal/cleanable/blood/tracks/reveal_blood() - if(!fluorescent) - if(stack && stack.len) - for(var/datum/fluidtrack/track in stack) - track.basecolor = COLOR_LUMINOL - ..() - -// Footprints, tire trails... -/obj/effect/decal/cleanable/blood/tracks - amount = 0 - random_icon_states = null - icon = 'icons/effects/fluidtracks.dmi' - cleanable_scent = null - - var/dirs=0 - var/coming_state="blood1" - var/going_state="blood2" - var/updatedtracks=0 - - // dir = id in stack - var/list/setdirs=list( - "1"=0, - "2"=0, - "4"=0, - "8"=0, - "16"=0, - "32"=0, - "64"=0, - "128"=0 - ) - - // List of laid tracks and their colors. - var/list/datum/fluidtrack/stack=list() - - /** - * Add tracks to an existing trail. - * - * @param DNA bloodDNA to add to collection. - * @param comingdir Direction tracks come from, or 0. - * @param goingdir Direction tracks are going to (or 0). - * @param bloodcolor Color of the blood when wet. - */ -/obj/effect/decal/cleanable/blood/tracks/proc/AddTracks(var/list/DNA, var/comingdir, var/goingdir, var/bloodcolor=COLOR_BLOOD_HUMAN) - var/updated=0 - // Shift our goingdir 4 spaces to the left so it's in the GOING bitblock. - var/realgoing = SHIFTL(goingdir, 4) - - // Current bit - var/b=0 - - // When tracks will start to dry out - var/t=world.time + TRACKS_CRUSTIFY_TIME - - var/datum/fluidtrack/track - - // Process 4 bits - for(var/bi=0;bi<4;bi++) - b = SHIFTL(1, bi) - // COMING BIT - // If setting - if(comingdir&b) - // If not wet or not set - if(dirs&b) - var/sid=setdirs["[b]"] - track=stack[sid] - if(track.wet==t && track.basecolor==bloodcolor) - continue - // Remove existing stack entry - stack.Remove(track) - track=new /datum/fluidtrack(b,bloodcolor,t) - stack.Add(track) - setdirs["[b]"]=stack.Find(track) - updatedtracks |= b - updated=1 - - // GOING BIT (shift up 4) - b = SHIFTL(b, 4) - if(realgoing&b) - // If not wet or not set - if(dirs&b) - var/sid=setdirs["[b]"] - track=stack[sid] - if(track.wet==t && track.basecolor==bloodcolor) - continue - // Remove existing stack entry - stack.Remove(track) - track=new /datum/fluidtrack(b,bloodcolor,t) - stack.Add(track) - setdirs["[b]"]=stack.Find(track) - updatedtracks |= b - updated=1 - - dirs |= comingdir|realgoing - if(islist(blood_DNA)) - blood_DNA |= DNA.Copy() - if(updated) - update_icon() - -/obj/effect/decal/cleanable/blood/tracks/on_update_icon() - overlays.Cut() - color = "#ffffff" - var/truedir=0 - - // Update ONLY the overlays that have changed. - for(var/datum/fluidtrack/track in stack) - var/stack_idx=setdirs["[track.direction]"] - var/state=coming_state - truedir=track.direction - if(truedir&240) // Check if we're in the GOING block - state=going_state - truedir = SHIFTR(truedir, 4) - - if(track.overlay) - track.overlay=null - var/image/I = image(icon, icon_state=state, dir=num2dir(truedir)) - I.color = track.basecolor - - track.fresh=0 - track.overlay=I - stack[stack_idx]=track - overlays += I - updatedtracks=0 // Clear our memory of updated tracks. - -/obj/effect/decal/cleanable/blood/tracks/footprints - name = "wet footprints" - dryname = "dried footprints" - desc = "They look like still wet tracks left by footwear." - drydesc = "They look like dried tracks left by footwear." - coming_state = "human1" - going_state = "human2" - -/obj/effect/decal/cleanable/blood/tracks/footprints/reversed - coming_state = "human2" - going_state = "human1" - -/obj/effect/decal/cleanable/blood/tracks/footprints/reversed/AddTracks(var/list/DNA, var/comingdir, var/goingdir, var/bloodcolor=COLOR_BLOOD_HUMAN) - comingdir = reverse_direction(comingdir) - goingdir = reverse_direction(goingdir) - ..(DNA, comingdir, goingdir, bloodcolor) - -/obj/effect/decal/cleanable/blood/tracks/snake - name = "wet tracks" - dryname = "dried tracks" - desc = "They look like still wet tracks left by a giant snake." - drydesc = "They look like dried tracks left by a giant snake." - coming_state = "snake1" - going_state = "snake2" - -/obj/effect/decal/cleanable/blood/tracks/paw - name = "wet tracks" - dryname = "dried tracks" - desc = "They look like still wet tracks left by a mammal." - drydesc = "They look like dried tracks left by a mammal." - coming_state = "paw1" - going_state = "paw2" - -/obj/effect/decal/cleanable/blood/tracks/claw - name = "wet tracks" - dryname = "dried tracks" - desc = "They look like still wet tracks left by a reptile." - drydesc = "They look like dried tracks left by a reptile." - coming_state = "claw1" - going_state = "claw2" - -/obj/effect/decal/cleanable/blood/tracks/wheels - name = "wet tracks" - dryname = "dried tracks" - desc = "They look like still wet tracks left by wheels." - drydesc = "They look like dried tracks left by wheels." - coming_state = "wheels" - going_state = "" - gender = PLURAL - -/obj/effect/decal/cleanable/blood/tracks/body - name = "wet trails" - dryname = "dried trails" - desc = "A still-wet trail left by someone crawling." - drydesc = "A dried trail left by someone crawling." - coming_state = "trail1" - going_state = "trail2" diff --git a/code/game/objects/effects/decals/cleanable.dm b/code/game/objects/effects/decals/cleanable.dm deleted file mode 100644 index 5609e69bcfccb..0000000000000 --- a/code/game/objects/effects/decals/cleanable.dm +++ /dev/null @@ -1,48 +0,0 @@ -/obj/effect/decal/cleanable - density = FALSE - anchored = TRUE - waterproof = FALSE - var/persistent = FALSE - var/generic_filth = FALSE - var/age = 0 - var/list/random_icon_states - var/image/hud_overlay/hud_overlay - - var/cleanable_scent - var/scent_intensity = /decl/scent_intensity/normal - var/scent_descriptor = SCENT_DESC_SMELL - var/scent_range = 2 - -/obj/effect/decal/cleanable/Initialize() - . = ..() - if(isspace(loc)) - return INITIALIZE_HINT_QDEL - hud_overlay = new /image/hud_overlay('icons/obj/hud_tile.dmi', src, "caution") - hud_overlay.plane = EFFECTS_ABOVE_LIGHTING_PLANE - set_cleanable_scent() - -/obj/effect/decal/cleanable/Initialize(var/ml, var/_age) - if(!isnull(_age)) - age = _age - if(random_icon_states && length(src.random_icon_states) > 0) - src.icon_state = pick(src.random_icon_states) - SSpersistence.track_value(src, /datum/persistent/filth) - . = ..() - -/obj/effect/decal/cleanable/Destroy() - SSpersistence.forget_value(src, /datum/persistent/filth) - . = ..() - -/obj/effect/decal/cleanable/water_act(var/depth) - ..() - qdel(src) - -/obj/effect/decal/cleanable/clean_blood(var/ignore = 0) - if(!ignore) - qdel(src) - return - ..() - -/obj/effect/decal/cleanable/proc/set_cleanable_scent() - if(cleanable_scent) - set_extension(src, /datum/extension/scent/custom, cleanable_scent, scent_intensity, scent_descriptor, scent_range) \ No newline at end of file diff --git a/code/game/objects/effects/decals/contraband.dm b/code/game/objects/effects/decals/contraband.dm deleted file mode 100644 index e462d3dc93949..0000000000000 --- a/code/game/objects/effects/decals/contraband.dm +++ /dev/null @@ -1,174 +0,0 @@ - -//########################## CONTRABAND ;3333333333333333333 -Agouri ################################################### - -/obj/item/contraband - name = "contraband item" - desc = "You probably shouldn't be holding this." - icon = 'icons/obj/contraband.dmi' - force = 0 - - -/obj/item/contraband/poster - name = "rolled-up poster" - desc = "The poster comes with its own automatic adhesive mechanism, for easy pinning to any vertical surface." - icon_state = "rolled_poster" - var/poster_type - -/obj/item/contraband/poster/New(var/maploading, var/given_poster_type) - if(given_poster_type && !ispath(given_poster_type, /decl/poster)) - CRASH("Invalid poster type: [log_info_line(given_poster_type)]") - - poster_type = given_poster_type || poster_type - if(!poster_type) - poster_type = pick(subtypesof(/decl/poster)) - ..() - -/obj/item/contraband/poster/Initialize() - var/list/posters = subtypesof(/decl/poster) - var/serial_number = posters.Find(poster_type) - name += " - No. [serial_number]" - - return ..() - -//Places the poster on a wall -/obj/item/contraband/poster/afterattack(var/atom/A, var/mob/user, var/adjacent, var/clickparams) - if (!adjacent) - return - - //must place on a wall and user must not be inside a closet/exosuit/whatever - var/turf/W = A - if(!isturf(W)) - return - - if (!W.is_wall() || !isturf(user.loc)) - to_chat(user, "You can't place this here!") - return - - var/placement_dir = get_dir(user, W) - if (!(placement_dir in GLOB.cardinal)) - to_chat(user, "You must stand directly in front of the wall you wish to place that on.") - return - - if (ArePostersOnWall(W)) - to_chat(user, "There is already a poster there!") - return - - user.visible_message("\The [user] starts placing a poster on \the [W].","You start placing the poster on \the [W].") - - var/obj/structure/sign/poster/P = new (user.loc, placement_dir, poster_type) - qdel(src) - flick("poster_being_set", P) - // Time to place is equal to the time needed to play the flick animation - if(do_after(user, 2.8 SECONDS, W, DO_PUBLIC_UNIQUE) && W.is_wall() && !ArePostersOnWall(W, P)) - user.visible_message("\The [user] has placed a poster on \the [W].","You have placed the poster on \the [W].") - else - // We cannot rely on user being on the appropriate turf when placement fails - P.roll_and_drop(get_step(W, turn(placement_dir, 180))) - -/obj/item/contraband/poster/proc/ArePostersOnWall(var/turf/W, var/placed_poster) - //just check if there is a poster on or adjacent to the wall - if (locate(/obj/structure/sign/poster) in W) - return TRUE - - //crude, but will cover most cases. We could do stuff like check pixel_x/y but it's not really worth it. - for (var/dir in GLOB.cardinal) - var/turf/T = get_step(W, dir) - var/poster = locate(/obj/structure/sign/poster) in T - if (poster && placed_poster != poster) - return TRUE - - return FALSE - -//############################## THE ACTUAL DECALS ########################### - -/obj/structure/sign/poster - name = "poster" - desc = "A large piece of space-resistant printed paper." - icon = 'icons/obj/contraband.dmi' - anchored = TRUE - var/poster_type - var/ruined = 0 - var/torch_poster = FALSE //for torch-specific content - -/obj/structure/sign/poster/bay_9 - poster_type = /decl/poster/bay_9 - -/obj/structure/sign/poster/bay_50 - poster_type = /decl/poster/bay_50 - -/obj/structure/sign/poster/torch - poster_type = /decl/poster/torch - torch_poster = TRUE - -/obj/structure/sign/poster/New(var/newloc, var/placement_dir = null, var/give_poster_type = null) - ..(newloc) - - if(!poster_type) - if(give_poster_type) - poster_type = give_poster_type - else - poster_type = pick(subtypesof(/decl/poster) - typesof(/decl/poster/torch)) - if(torch_poster) - poster_type = pick(subtypesof(/decl/poster/torch)) - set_poster(poster_type) - - switch (placement_dir) - if (NORTH) - pixel_x = 0 - pixel_y = 32 - if (SOUTH) - pixel_x = 0 - pixel_y = -32 - if (EAST) - pixel_x = 32 - pixel_y = 0 - if (WEST) - pixel_x = -32 - pixel_y = 0 - -/obj/structure/sign/poster/proc/set_poster(var/poster_type) - var/decl/poster/design = decls_repository.get_decl(poster_type) - SetName("[initial(name)] - [design.name]") - desc = "[initial(desc)] [design.desc]" - icon_state = design.icon_state - -/obj/structure/sign/poster/attackby(obj/item/W as obj, mob/user as mob) - if(isWirecutter(W)) - playsound(loc, 'sound/items/Wirecutter.ogg', 100, 1) - if(ruined) - to_chat(user, "You remove the remnants of the poster.") - qdel(src) - else - to_chat(user, "You carefully remove the poster from the wall.") - roll_and_drop(user.loc) - return - - -/obj/structure/sign/poster/attack_hand(mob/user as mob) - - if(ruined) - return - - if(alert("Do I want to rip the poster from the wall?","You think...","Yes","No") == "Yes") - - if(ruined || !user.Adjacent(src)) - return - - visible_message("\The [user] rips \the [src] in a single, decisive motion!" ) - playsound(src.loc, 'sound/items/poster_ripped.ogg', 100, 1) - ruined = 1 - icon_state = "poster_ripped" - SetName("ripped poster") - desc = "You can't make out anything from the poster's original print. It's ruined." - add_fingerprint(user) - -/obj/structure/sign/poster/proc/roll_and_drop(turf/newloc) - new/obj/item/contraband/poster(newloc, poster_type) - qdel(src) - -/decl/poster - // Name suffix. Poster - [name] - var/name="" - // Description suffix - var/desc="" - var/icon_state="" diff --git a/code/game/objects/effects/decals/crayon.dm b/code/game/objects/effects/decals/crayon.dm deleted file mode 100644 index 54f4ad017637e..0000000000000 --- a/code/game/objects/effects/decals/crayon.dm +++ /dev/null @@ -1,23 +0,0 @@ -/obj/effect/decal/cleanable/crayon - name = "rune" - desc = "A rune drawn in crayon." - icon = 'icons/obj/rune.dmi' - -/obj/effect/decal/cleanable/crayon/New(location, main = "#ffffff", shade = "#000000", type = "rune") - ..() - name = type - desc = "A [type] drawn in crayon." - switch (type) - if ("rune") - type = "rune[rand(1, 6)]" - if ("graffiti") - type = pick("amyjon", "face", "matt", "revolution", "engie", "guy", "end", "dwarf", "uboa") - if ("defector graffiti") - type = pick("fleet", "fifthfleet", "deathtoterra", "downwithec", "kr514") - var/icon/mainOverlay = new/icon('icons/effects/crayondecal.dmi',"[type]", 2.1) - var/icon/shadeOverlay = new/icon('icons/effects/crayondecal.dmi',"[type]s", 2.1) - mainOverlay.Blend(main,ICON_ADD) - shadeOverlay.Blend(shade,ICON_ADD) - overlays += mainOverlay - overlays += shadeOverlay - add_hiddenprint(usr) diff --git a/code/game/objects/effects/decals/decal.dm b/code/game/objects/effects/decals/decal.dm deleted file mode 100644 index 26a1d4bfeb157..0000000000000 --- a/code/game/objects/effects/decals/decal.dm +++ /dev/null @@ -1,12 +0,0 @@ -/obj/effect/decal - layer = DECAL_LAYER - - -/obj/effect/decal/fall_damage() - return 0 - -/obj/effect/decal/is_burnable() - return TRUE - -/obj/effect/decal/lava_act() - . = !throwing ? ..() : FALSE diff --git a/code/game/objects/effects/decals/misc.dm b/code/game/objects/effects/decals/misc.dm deleted file mode 100644 index 8fb57eaa92219..0000000000000 --- a/code/game/objects/effects/decals/misc.dm +++ /dev/null @@ -1,18 +0,0 @@ -/obj/effect/decal/point - name = "arrow" - desc = "It's an arrow hanging in mid-air. There may be a wizard about." - icon = 'icons/mob/screen1.dmi' - icon_state = "arrow" - layer = POINTER_LAYER - anchored = TRUE - mouse_opacity = 0 - -/obj/effect/decal/point/Initialize() - . = ..() - addtimer(CALLBACK(null, /proc/qdel, src), 2 SECONDS) - -// Used for spray that you spray at walls, tables, hydrovats etc -/obj/effect/decal/spraystill - density = FALSE - anchored = TRUE - layer = PROJECTILE_LAYER diff --git a/code/game/objects/effects/decals/posters/bs12.dm b/code/game/objects/effects/decals/posters/bs12.dm deleted file mode 100644 index 90cf8d84d6fd2..0000000000000 --- a/code/game/objects/effects/decals/posters/bs12.dm +++ /dev/null @@ -1,320 +0,0 @@ -// baystation12 posters -/decl/poster/bay_1 - icon_state="bsposter1" - name = "Unlucky Space Explorer" - desc = "This particular one depicts a skeletal form within a space suit." - -/decl/poster/bay_2 - icon_state="bsposter2" - name = "Positronic Logic Conflicts" - desc = "This particular one depicts the cold, unmoving stare of a particular advanced AI." - -/decl/poster/bay_3 - icon_state="bsposter3" - name = "Paranoia" - desc = "This particular one warns of the dangers of trusting your co-workers too much." - -/decl/poster/bay_4 - icon_state="bsposter4" - name = "Keep Calm" - desc = "This particular one is of a famous New Earth design, although a bit modified. Someone has scribbled an O over the A on the poster." - -/decl/poster/bay_5 - icon_state="bsposter5" - name = "Martian Warlord" - desc = "This particular one depicts the cartoony mug of a certain Martial Warmonger." - -/decl/poster/bay_6 - icon_state="bsposter6" - name = "Technological Singularity" - desc = "This particular one is of the blood-curdling symbol of a long-since defeated enemy of humanity." - -/decl/poster/bay_8 - icon_state="bsposter8" - name = "Pinup Girl Cindy" - desc = "This particular one is of a historical corporate PR girl, Cindy, in a particularly feminine pose." - -/decl/poster/bay_9 - icon_state="bsposter9" - name = "Pinup Girl Amy" - desc = "This particular one is of Amy, the nymphomaniac urban legend of deep space. How this photograph came to be is not known." - -/decl/poster/bay_10 - icon_state="bsposter10" - name = "Don't Panic" - desc = "This particular one depicts some sort of star in a grimace. The \"Don't Panic\" is written in big, friendly letters." - -/decl/poster/bay_11 - icon_state="bsposter11" - name = "Underwater Laboratory" - desc = "This particular one is of the fabled last crew of a previous Company project." - -/decl/poster/bay_12 - icon_state="bsposter12" - name = "Rogue AI" - desc = "This particular one depicts the shell of the infamous AI that catastropically comandeered one of humanity's earliest space stations. Back then, the Company was just known as TriOptimum." - -/decl/poster/bay_13 - icon_state="bsposter13" - name = "User of the Arcane Arts" - desc = "This particular one depicts a wizard, casting a spell. You can't really make out if it's an actual photograph or a computer-generated image." - -/decl/poster/bay_14 - icon_state="bsposter14" - name = "Levitating Skull" - desc = "This particular one is the portrait of a flying enchanted skull. Its adventures along with its fabled companion are now fading through history..." - -/decl/poster/bay_15 - icon_state="bsposter15" - name = "Augmented Legend" - desc = "This particular one is of an obviously augmented individual, gazing towards the sky. The cyber-city in the backround is rather punkish." - -/decl/poster/bay_16 - icon_state="bsposter16" - name = "Dangerous Static" - desc = "This particular one depicts nothing remarkable other than a rather mesmerising pattern of monitor static. There's a tag on the sides of the poster, but it's ripped off." - -/decl/poster/bay_17 - icon_state="bsposter17" - name = "Pinup Girl Val" - desc = "Luscious Val McNeil, the vertically challenged Legal Extraordinaire, winner of Miss Space two years running and favoured pinup girl of Lawyers Weekly." - -/decl/poster/bay_18 - icon_state="bsposter18" - name = "Derpman, Enforcer of the State" - desc = "Here to protect and serve... your donuts! A generously proportioned man, he teaches you the value of hiding your snacks." - -/decl/poster/bay_19 - icon_state="bsposter19" - name = "Respect an Unathi" - desc = "This poster depicts a well dressed looking Unathi receiving a prestigious award. It appears to espouse greater co-operation and harmony between the two races." - -/decl/poster/bay_20 - icon_state="bsposter20" - name = "Skrell Twilight" - desc = "This poster depicts a mysteriously inscrutable, alien scene. Numerous Skrell can be seen conversing amidst great, crystalline towers rising above crashing waves" - -/decl/poster/bay_21 - icon_state="bsposter21" - name = "Join the Fuzz!" - desc = "It's a nice recruitment poster of a white haired Chinese woman that says; \"Big Guns, Hot Women, Good Times. Security. We get it done.\"" - -/decl/poster/bay_22 - icon_state="bsposter22" - name = "Looking for a career with excitement?" - desc = "A recruitment poster starring a dark haired woman with glasses and a purple shirt that has \"Got Brains? Got Talent? Not afraid of electric flying monsters that want to suck the soul out of you? Then Xenobiology could use someone like you!\" written on the bottom." - -/decl/poster/bay_23 - icon_state="bsposter23" - name = "Safety first: because electricity doesn't wait!" - desc = "A safety poster starring a clueless looking redhead with frazzled hair. \"Every year, hundreds of employees expose themselves to electric shock. Play it safe. Avoid suspicious doors after electrical storms, and always wear protection when doing electric maintenance.\"" - -/decl/poster/bay_24 - icon_state="bsposter24" - name = "Responsible medbay habits, No #259" - desc = "A poster with a nervous looking geneticist on it states; \"Friends Tell Friends They're Clones. It can cause severe and irreparable emotional trauma if a person is not properly informed of their recent demise. Always follow your contractual obligation and inform them of their recent rejuvenation.\"" - -/decl/poster/bay_25 - icon_state="bsposter25" - name = "Irresponsible medbay habits, No #2" - desc = "This is a safety poster starring a perverted looking naked doctor. \"Sexual harassment is never okay. REPORT any acts of sexual deviance or harassment that disrupt a healthy working environment.\"" - -/decl/poster/bay_26 - icon_state="bsposter26" - name = "The Men We Knew" - desc = "This movie poster depicts a group of soldiers fighting a large exosuit, the movie seems to be a patriotic war movie." - -/decl/poster/bay_27 - icon_state="bsposter27" - name = "Plastic Sheep Can't Scream" - desc = "This is a movie poster for an upcoming horror movie, it features an AI in the front of it." - -/decl/poster/bay_28 - icon_state="bsposter28" - name = "The Stars Know Love" - desc = "This is a movie poster. A bleeding woman is shown drawing a heart in her blood on the window of space ship, it seems to be a romantic Drama." - -/decl/poster/bay_29 - icon_state="bsposter29" - name = "Winter Is Coming" - desc = "On the poster is a frighteningly large wolf, he warns: \"Only YOU can keep humanity from freezing during planetary occultation!\"" - -/decl/poster/bay_30 - icon_state="bsposter30" - name = "Ambrosia Vulgaris" - desc = "Just looking at this poster makes you feel a little bit dizzy." - -/decl/poster/bay_31 - icon_state="bsposter31" - name = "Donut Corp" - desc = "This is an advertisement for Donut Corp, the new innovation in donut technology!" - -/decl/poster/bay_32 - icon_state="bsposter32" - name = "Eat!" - desc = "A poster depicting a hamburger. The poster orders you to consume the hamburger." - -/decl/poster/bay_33 - icon_state="bsposter33" - name = "Tools, tools, tools" - desc = "You can never have enough tools, thats for sure!" - -/decl/poster/bay_34 - icon_state="bsposter34" - name = "Power Up!" - desc = "High reward, higher risk!" - -/decl/poster/bay_35 - icon_state="bsposter35" - name = "Lamarr" - desc = "This is a poster depicting the pet and mascot of the science department." - -/decl/poster/bay_36 - icon_state="bsposter36" - name = "Fancy Borg" - desc = "A poster depicting a cyborg using the service module. 'Fancy Borg' is written on it." - -/decl/poster/bay_37 - icon_state="bsposter37" - name = "Fancier Borg" - desc = "A poster depicting a cyborg using the service module. 'Fancy Borg' is written on it. This is even fancier than the first poster." - -/decl/poster/bay_38 - icon_state="bsposter38" - name = "Toaster Love" - desc = "This is a poster of a toaster containing two slices of bread. The word LOVE is written in big pink letters underneath." - -/decl/poster/bay_39 - icon_state="bsposter39" - name = "Responsible medbay habits, No #91" - desc = "A safety poster with a chemist holding a vial. \"Always wear safety gear while handling dangerous chemicals, even if it concerns only small amounts.\"" - -/decl/poster/bay_40 - icon_state="bsposter40" - name = "Agreeable work environment" - desc = "This poster depicts a young woman in a stylish dress. \"Try to aim for a pleasant atmosphere in the workspace. A friendly word can do more than forms in triplicate.\"" - -/decl/poster/bay_41 - icon_state="bsposter41" - name = "Professional work environment" - desc = "A safety poster featuring a green haired woman in a shimmering blue dress. \"As an Internal Affairs Agent, your job is to create a fair and agreeable work environment for the crewmembers, as discreetly and professionally as possible.\"" - -/decl/poster/bay_42 - icon_state="bsposter42" - name = "Engineering pinup" - desc = "This is pin-up poster. A half-naked girl with white hair, toned muscles and stunning blue eyes looks back at you from the poster. Her welding helmet, tattoos and grey jumpsuit hanging around her waist gives a bit of a rugged feel." - -/decl/poster/bay_43 - icon_state="bsposter43" - name = "Responsible medbay habits, No #3" - desc = "A safety poster with a purple-haired surgeon. She looks a bit cross. \"Let the surgeons do their work. NEVER replace or remove a surgery tool from where the surgeon put it.\"" - -/decl/poster/bay_45 - icon_state="bsposter45" - name = "Responsible engineering habits, No #1" - desc = "A safety poster featuring a blue haired engineer. \"When repairing a machine or construction, always aim for long-term solutions.\"" - -/decl/poster/bay_46 - icon_state="bsposter46" - name = "Inspirational lawyer" - desc = "An inspirational poster depicting a Skrellian lawyer. He seems to be shouting something, while pointing fiercely to the right." - -/decl/poster/bay_47 - icon_state="bsposter47" - name = "Security pinup" - desc = "This is a pin-up poster. A dark skinned white haired girl poses in the sunlight wearing a tank top with her stomach exposed. The text on the poster states \"M, Succubus of Security.\" and a lipstick mark stains the top right corner, as if kissed by the model herself." - -/decl/poster/bay_48 - icon_state="bsposter48" - name = "Borg pinup?" - desc = "This is a.. pin-up poster? It is a diagram on an old model of cyborg with a note scribbled in marker on the bottom, on the top there is a large XO written in red marker." - -/decl/poster/bay_49 - icon_state="bsposter49" - name = "Engineering recruitment" - desc = "This is a poster showing an engineer relaxing by a computer, the text states \"Living the life! Join Engineering today!\"" - -/decl/poster/bay_50 - icon_state="bsposter50" - name = "Pinup Girl Cindy Kate" - desc = "This particular one is of Cindy Kate, a seductive performer well known among less savoury circles." - -/decl/poster/bay_51 - icon_state="bsposter51" - name = "space appreciation poster" - desc = "This is a poster produced by the Generic Space Company, as a part of a series of commemorative posters on the wonders of space. One of three." - -/decl/poster/bay_52 - icon_state="bsposter52" - name = "fire safety poster" - desc = "This is a poster reminding you of what you should do if you are on fire, or if you are at a dance party." - -/decl/poster/bay_53 - icon_state="bsposter53" - name = "fire extinguisher poster" - desc = "This is a poster reminding you of what you should use to put out a fire." - -/decl/poster/bay_54 - icon_state="bsposter54" - name = "firefighter poster" - desc = "This is a poster of a particularly stern looking firefighter. The caption reads, \"Only you can prevent space fires.\"" - -/decl/poster/bay_55 - icon_state="bsposter55" - name = "Earth appreciation poster" - desc = "This is a poster produced by the Generic Space Company, as a part of a series of commemorative posters on the wonders of space. Two of three." - -/decl/poster/bay_56 - icon_state="bsposter56" - name = "Mars appreciation poster" - desc = "This is a poster produced by the Generic Space Company, as a part of a series of commemorative posters on the wonders of space. Three of three." - -/decl/poster/bay_57 - icon_state="bsposter57" - name = "space carp warning poster" - desc = "This poster tells of the dangers of space carp infestations." - -/decl/poster/bay_58 - icon_state="bsposter58" - name = "space carp information poster" - desc = "This poster showcases an old spacer saying on the dangers of migrant space carp." - -/decl/poster/bay_59 - icon_state="bsposter59" - name = "poster - Miss Science 2299" - desc = "A large piece of space-resistant printed paper. This pin-up poster depicts a woman wearing a corporate labcoat, a bikini, and a sheepish grin. She's shyly posing atop some highly specialized research equipment." - -/decl/poster/nabber - icon_state="poster_nabber" - name = "serpentid information poster" - desc = "This worn poster produced by Xynergy tells the dangers of close encounters with serpentids, and warns to not go near them." - -/decl/poster/fleet - icon_state="poster_fleet" - name = "SCGF recruitment poster" - desc = "A poster produced by the SCGF. It depicts a tactical-looking Fourth Fleet petty officer, standing in front of the SCG flag proudly." - -/decl/poster/torch - icon_state="poster_ripped" - name = "Torch Poster" - desc = "You probably shouldn't be seeing this." - -/decl/poster/torch/event1 - icon_state="bsposter_event1" - name = "Justice for Joe" - desc = "A hand-written poster demanding the release of one SCPO Joseph Tornakov from Fleet Intelligence custody. It's somewhat faded." - -/decl/poster/torch/event2 - icon_state="bsposter_event2" - name = "Captain for Senate" - desc = "A poster loudly advertising the SEV Torch's captain's upcoming bid for SCG Senate. The fine print lightly suggests that failing to vote in their favor will result in an NJP." - -/decl/poster/torch/event3 - icon_state="bsposter_event3" - name = "Visit E-14b Outpost" - desc = "This poster invites personnel to visit the the E-14b research outpost, built through joint Terran and Expeditionary Corps efforts. According to the poster, it's still under construction." - -/decl/poster/torch/event4 - icon_state="bsposter_event4" - name = "Scientific Cooperation" - desc = "This poster depicts a Sol Expeditionary Corps captain shaking hands with a Terran Pioneer Corps officer. It appears to espouse greater scientific cooperation between the two organisations." \ No newline at end of file diff --git a/code/game/objects/effects/decals/remains.dm b/code/game/objects/effects/decals/remains.dm deleted file mode 100644 index 293d88df52fa1..0000000000000 --- a/code/game/objects/effects/decals/remains.dm +++ /dev/null @@ -1,41 +0,0 @@ -/obj/item/remains - name = "remains" - gender = PLURAL - icon = 'icons/effects/blood.dmi' - icon_state = "remains" - anchored = FALSE - -/obj/item/remains/human - desc = "They look like human remains. They have a strange aura about them." - -/obj/effect/decal/remains // Apparently used by cult somewhere? - desc = "They look like human remains. They have a strange aura about them." - icon = 'icons/effects/blood.dmi' - icon_state = "remains" - -/obj/item/remains/xeno - desc = "They look like the remains of something... alien. They have a strange aura about them." - icon_state = "remainsxeno" - -/obj/item/remains/robot - desc = "They look like the remains of something mechanical. They have a strange aura about them." - icon = 'icons/mob/robots_gibs.dmi' - icon_state = "remainsrobot" - -/obj/item/remains/mouse - desc = "They look like the remains of a small rodent." - icon_state = "mouse" - -/obj/item/remains/lizard - desc = "They look like the remains of a small rodent." - icon_state = "lizard" - -/obj/item/remains/attack_hand(mob/user as mob) - to_chat(user, "[src] sinks together into a pile of ash.") - var/turf/simulated/floor/F = get_turf(src) - if (istype(F)) - new /obj/effect/decal/cleanable/ash(F) - qdel(src) - -/obj/item/remains/robot/attack_hand(mob/user as mob) - return diff --git a/code/game/objects/effects/decals/warning_stripes.dm b/code/game/objects/effects/decals/warning_stripes.dm deleted file mode 100644 index ce49cb1f93689..0000000000000 --- a/code/game/objects/effects/decals/warning_stripes.dm +++ /dev/null @@ -1,11 +0,0 @@ -/obj/effect/decal/warning_stripes - icon = 'icons/effects/warning_stripes.dmi' - -/obj/effect/decal/warning_stripes/New() - . = ..() - var/turf/T=get_turf(src) - var/image/I=image(icon, icon_state = icon_state, dir = dir) - I.color=color - I.layer = DECAL_LAYER - T.overlays += I - qdel(src) diff --git a/code/game/objects/effects/effect_system.dm b/code/game/objects/effects/effect_system.dm deleted file mode 100644 index d1184ca342796..0000000000000 --- a/code/game/objects/effects/effect_system.dm +++ /dev/null @@ -1,522 +0,0 @@ -/* This is an attempt to make some easily reusable "particle" type effect, to stop the code -constantly having to be rewritten. An item like the jetpack that uses the ion_trail_follow system, just has one -defined, then set up when it is created with New(). Then this same system can just be reused each time -it needs to create more trails.A beaker could have a steam_trail_follow system set up, then the steam -would spawn and follow the beaker, even if it is carried or thrown. -*/ - - -/obj/effect/effect - name = "effect" - icon = 'icons/effects/effects.dmi' - mouse_opacity = 0 - unacidable = TRUE - pass_flags = PASS_FLAG_TABLE | PASS_FLAG_GRILLE - -/datum/effect/effect/system - var/number = 3 - var/cardinals = 0 - var/turf/location - var/atom/holder - var/setup = 0 - -/datum/effect/effect/system/proc/set_up(n = 3, c = 0, turf/loc) - if(n > 10) - n = 10 - number = n - cardinals = c - location = loc - setup = 1 - -/datum/effect/effect/system/proc/attach(atom/atom) - holder = atom - -/datum/effect/effect/system/proc/start() - -/datum/effect/effect/system/proc/spread() - - -///////////////////////////////////////////// -// GENERIC STEAM SPREAD SYSTEM - -//Usage: set_up(number of bits of steam, use North/South/East/West only, spawn location) -// The attach(atom/atom) proc is optional, and can be called to attach the effect -// to something, like a smoking beaker, so then you can just call start() and the steam -// 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 - steam.set_up(5, 0, mob.loc) -- sets up variables - OPTIONAL: steam.attach(mob) - steam.start() -- spawns the effect -*/ -///////////////////////////////////////////// -/obj/effect/effect/steam - name = "steam" - icon = 'icons/effects/effects.dmi' - icon_state = "extinguish" - density = FALSE - -/datum/effect/effect/system/steam_spread - -/datum/effect/effect/system/steam_spread/set_up(n = 3, c = 0, turf/loc) - if(n > 10) - n = 10 - number = n - cardinals = c - location = loc - -/datum/effect/effect/system/steam_spread/start() - var/i = 0 - for(i=0, i 10) - n = 10 - number = n - cardinals = c - if(isturf(loca)) - location = loca - else - location = get_turf(loca) - -/datum/effect/effect/system/spark_spread/start() - var/i = 0 - for(i=0, i 10) - n = 10 - number = n - cardinals = c - if(isturf(loca)) - location = loca - else - location = get_turf(loca) - if(direct) - direction = direct - -/datum/effect/effect/system/smoke_spread/start() - var/i = 0 - for(i=0, i 20) - return - addtimer(CALLBACK(src, /datum/effect/effect/system/proc/spread, i), 0) - -/datum/effect/effect/system/smoke_spread/spread(var/i) - if(holder) - src.location = get_turf(holder) - var/obj/effect/effect/smoke/smoke = new smoke_type(location) - src.total_smoke++ - var/direction = src.direction - if(!direction) - if(src.cardinals) - direction = pick(GLOB.cardinal) - else - direction = pick(GLOB.alldirs) - for(i=0, iThe solution violently explodes.") - for(var/mob/M in viewers(1, location)) - if (prob (50 * amount)) - to_chat(M, "The explosion knocks you down.") - M.Weaken(rand(1,5)) - return - else - var/devst = -1 - var/heavy = -1 - var/light = -1 - var/flash = -1 - - // Clamp all values to fractions of config.max_explosion_range, following the same pattern as for tank transfer bombs - if (round(amount/12) > 0) - devst = devst + amount/12 - - if (round(amount/6) > 0) - heavy = heavy + amount/6 - - if (round(amount/3) > 0) - light = light + amount/3 - - if (flashing && flashing_factor) - flash = (amount/4) * flashing_factor - - for(var/mob/M in viewers(8, location)) - to_chat(M, "The solution violently explodes.") - - explosion( - location, - round(min(devst, BOMBCAP_DVSTN_RADIUS)), - round(min(heavy, BOMBCAP_HEAVY_RADIUS)), - round(min(light, BOMBCAP_LIGHT_RADIUS)), - round(min(flash, BOMBCAP_FLASH_RADIUS)) - ) diff --git a/code/game/objects/effects/explosion_particles.dm b/code/game/objects/effects/explosion_particles.dm deleted file mode 100644 index 0cdf1791e982e..0000000000000 --- a/code/game/objects/effects/explosion_particles.dm +++ /dev/null @@ -1,64 +0,0 @@ -/obj/effect/expl_particles - name = "explosive particles" - icon = 'icons/effects/effects.dmi' - icon_state = "explosion_particle" - opacity = 1 - anchored = TRUE - mouse_opacity = 0 - -/obj/effect/expl_particles/New() - ..() - QDEL_IN(src, 1 SECOND) - -/datum/effect/system/expl_particles - var/number = 10 - var/turf/location - var/total_particles = 0 - -/datum/effect/system/expl_particles/proc/set_up(n = 10, loca) - number = n - if(isturf(loca)) location = loca - else location = get_turf(loca) - -/datum/effect/system/expl_particles/proc/start() - var/i = 0 - for(i=0, i oxy) - burn_rate = oxy - - env.adjust_gas(GAS_OXYGEN, -burn_rate) - - env.adjust_gas(GAS_CO2, burn_rate * TURF_FIRE_BURN_CARBON_DIOXIDE_MULTIPLIER) - - var/energy_released = burn_rate * TURF_FIRE_ENERGY_PER_BURNED_OXY_MOL - env.add_thermal_energy(energy_released) - SSair.mark_for_update(T) - return TRUE - -/obj/effect/turf_fire/Process() - var/turf/simulated/floor/T = loc - if(!istype(T) || T.density) //This can happen, how I'm not sure - qdel(src) - return - if(T.hotspot) //If we have an active hotspot, let it do the damage instead and lets not loose power - return - if(interact_with_atmos) - if(!process_waste()) - qdel(src) - return - if(passive_loss) - if(T.air?.temperature < TURF_FIRE_REQUIRED_TEMP) - fire_power -= TURF_FIRE_POWER_LOSS_ON_LOW_TEMP - fire_power-- - if(fire_power <= 0) - qdel(src) - return - var/effective_temperature = TURF_FIRE_TEMP_BASE + (TURF_FIRE_TEMP_INCREMENT_PER_POWER*fire_power) - T.hotspot_expose( effective_temperature, TURF_FIRE_VOLUME) - //Nearby turfs may also trigger a fire (will only start fires if there's fuel, currently) - //Guaranteed fire spread in the last tick - if(prob(50 + fire_power) || fire_power == 1) - for(var/direction in GLOB.cardinal) - var/turf/simulated/other_tile = get_step(T, direction) - - if(istype(other_tile)) - if(T.open_directions & direction) //Grab all valid bordering tiles - if(other_tile.hotspot || other_tile.turf_fire) - continue - other_tile.hotspot_expose( effective_temperature, TURF_FIRE_VOLUME) - - for(var/atom/movable/burning_atom as anything in T) - burning_atom.fire_act(exposed_temperature = effective_temperature, exposed_volume = TURF_FIRE_VOLUME) - if(interact_with_atmos) - if(prob(fire_power)) - T.burn_tile(effective_temperature) - UpdateFireState() - -/obj/effect/turf_fire/Crossed(O) - . = ..() - var/turf/T = loc - if(T.hotspot) //If we have an active hotspot, let it do the damage instead - return - var/atom/movable/crossing = O - if(istype(crossing)) - crossing.fire_act(exposed_temperature = TURF_FIRE_TEMP_BASE + (TURF_FIRE_TEMP_INCREMENT_PER_POWER*fire_power), exposed_volume = TURF_FIRE_VOLUME) - return - -/obj/effect/turf_fire/water_act(depth) - if (prob(depth)) - qdel(src) - return - -/obj/effect/turf_fire/proc/AddPower(power) - fire_power = min(TURF_FIRE_MAX_POWER, fire_power + power) - UpdateFireState() - -/obj/effect/turf_fire/proc/UpdateFireState() - var/new_state - switch(fire_power) - if(0 to 10) - new_state = TURF_FIRE_STATE_SMALL - if(11 to 24) - new_state = TURF_FIRE_STATE_MEDIUM - if(25 to 39) - new_state = TURF_FIRE_STATE_LARGE - if(40 to INFINITY) - new_state = TURF_FIRE_STATE_MAX - - if(new_state == current_fire_state) - return - current_fire_state = new_state - - switch(current_fire_state) - if(TURF_FIRE_STATE_SMALL) - icon_state = "small" - set_light(0.5, 1, 1.5) - if(TURF_FIRE_STATE_MEDIUM) - icon_state = "medium" - set_light(0.5, 1, 2,) - if(TURF_FIRE_STATE_LARGE) - icon_state = "big" - set_light(0.5, 1.5, 2,) - if(TURF_FIRE_STATE_MAX) - icon_state = "max" - set_light(0.7, 1.6, 3) - -#undef TURF_FIRE_REQUIRED_TEMP -#undef TURF_FIRE_TEMP_BASE -#undef TURF_FIRE_POWER_LOSS_ON_LOW_TEMP -#undef TURF_FIRE_TEMP_INCREMENT_PER_POWER -#undef TURF_FIRE_VOLUME -#undef TURF_FIRE_MAX_POWER - -#undef TURF_FIRE_ENERGY_PER_BURNED_OXY_MOL -#undef TURF_FIRE_BURN_RATE_BASE -#undef TURF_FIRE_BURN_RATE_PER_POWER -#undef TURF_FIRE_BURN_CARBON_DIOXIDE_MULTIPLIER -#undef TURF_FIRE_BURN_MINIMUM_OXYGEN_REQUIRED -#undef TURF_FIRE_BURN_PLAY_SOUND_EFFECT_CHANCE - -#undef TURF_FIRE_STATE_SMALL -#undef TURF_FIRE_STATE_MEDIUM -#undef TURF_FIRE_STATE_LARGE diff --git a/code/game/objects/effects/fluids.dm b/code/game/objects/effects/fluids.dm deleted file mode 100644 index b82d936bdc08b..0000000000000 --- a/code/game/objects/effects/fluids.dm +++ /dev/null @@ -1,108 +0,0 @@ -/obj/effect/fluid - name = "" - icon = 'icons/effects/liquids.dmi' - anchored = TRUE - simulated = FALSE - opacity = 0 - mouse_opacity = 0 - layer = FLY_LAYER - alpha = 0 - color = COLOR_OCEAN - - var/fluid_amount = 0 - var/turf/start_loc - var/list/equalizing_fluids = list() - var/equalize_avg_depth = 0 - var/equalize_avg_temp = 0 - var/flow_amount = 0 - -/obj/effect/fluid/ex_act() - return - -/obj/effect/fluid/airlock_crush() - qdel(src) - -/obj/effect/fluid/Initialize() - . = ..() - start_loc = get_turf(src) - if(!istype(start_loc) || start_loc.flooded) - qdel(src) - return - var/turf/simulated/T = start_loc - if(istype(T)) - T.unwet_floor(FALSE) - forceMove(start_loc) - update_icon() - -/obj/effect/fluid/Destroy() - if(start_loc) - var/turf/simulated/T = start_loc - if(istype(T)) - T.wet_floor() - start_loc = null - if(islist(equalizing_fluids)) - equalizing_fluids.Cut() - REMOVE_ACTIVE_FLUID(src) - . = ..() - -/obj/effect/fluid/on_update_icon() - - overlays.Cut() - - if(fluid_amount > FLUID_OVER_MOB_HEAD) - layer = DEEP_FLUID_LAYER - else - layer = SHALLOW_FLUID_LAYER - - if(fluid_amount > FLUID_DEEP) - alpha = FLUID_MAX_ALPHA - else - alpha = min(FLUID_MAX_ALPHA,max(FLUID_MIN_ALPHA,Ceil(255*(fluid_amount/FLUID_DEEP)))) - - if(fluid_amount > FLUID_DELETING && fluid_amount <= FLUID_EVAPORATION_POINT) - APPLY_FLUID_OVERLAY("shallow_still") - else if(fluid_amount > FLUID_EVAPORATION_POINT && fluid_amount < FLUID_SHALLOW) - APPLY_FLUID_OVERLAY("mid_still") - else if(fluid_amount >= FLUID_SHALLOW && fluid_amount < (FLUID_DEEP*2)) - APPLY_FLUID_OVERLAY("deep_still") - else if(fluid_amount >= (FLUID_DEEP*2)) - APPLY_FLUID_OVERLAY("ocean") - -// Map helper. -/obj/effect/fluid_mapped - name = "mapped flooded area" - alpha = 125 - icon_state = "shallow_still" - color = COLOR_OCEAN - - var/fluid_amount = FLUID_MAX_DEPTH - -/obj/effect/fluid_mapped/Initialize() - ..() - var/turf/T = get_turf(src) - if(istype(T)) - var/obj/effect/fluid/F = locate() in T - if(!F) F = new(T) - SET_FLUID_DEPTH(F, fluid_amount) - return INITIALIZE_HINT_QDEL - -// Permaflood overlay. -/obj/effect/flood - name = "" - mouse_opacity = 0 - layer = DEEP_FLUID_LAYER - color = COLOR_OCEAN - icon = 'icons/effects/liquids.dmi' - icon_state = "ocean" - alpha = FLUID_MAX_ALPHA - simulated = FALSE - density = FALSE - opacity = 0 - anchored = TRUE - -/obj/effect/flood/ex_act() - return - -/obj/effect/flood/New() - ..() - verbs.Cut() diff --git a/code/game/objects/effects/force_portal.dm b/code/game/objects/effects/force_portal.dm deleted file mode 100644 index 54285cff38701..0000000000000 --- a/code/game/objects/effects/force_portal.dm +++ /dev/null @@ -1,65 +0,0 @@ -/obj/effect/force_portal - name = "portal" - desc = "Like looking into a mirror." - icon = 'icons/obj/stationobjs.dmi' - icon_state = "portal" - blend_mode = BLEND_SUBTRACT - density = TRUE - unacidable = TRUE - anchored = TRUE - var/boom_time = 1 - -/obj/effect/force_portal/Initialize() - . = ..() - boom_time = world.time + 30 SECONDS - START_PROCESSING(SSobj, src) - -/obj/effect/force_portal/Destroy() - STOP_PROCESSING(SSobj, src) - . = ..() - -/obj/effect/force_portal/Process() - if(boom_time && boom_time < world.time) - boom() - boom_time = 0 - -/obj/effect/force_portal/proc/boom() - set waitfor = 0 - var/list/possible_turfs = getcircle(get_turf(src), 5) - while(contents && contents.len) - var/target = pick(possible_turfs) - possible_turfs -= target - var/atom/movable/picked = pick(contents) - picked.dropInto(loc) - if(istype(picked, /obj/item/projectile)) - var/obj/item/projectile/P = picked - P.launch(target) - playsound(src, P.fire_sound ? P.fire_sound : 'sound/effects/teleport.ogg', 60, 1) - else - picked.throw_at(target, 5, 10) - playsound(src,'sound/effects/teleport.ogg',60,1) - sleep(1) - qdel(src) - -/obj/effect/force_portal/onDropInto(var/atom/movable/AM) - boom_time -= 1 SECOND - src.visible_message("\The [src] sucks in \the [AM]!") - if(!ismob(AM)) - var/obj/O = AM - if(O.w_class <= ITEM_SIZE_SMALL) - return //Dont spam for small stuff - playsound(src,'sound/effects/teleport.ogg',40,1) - return - -/obj/effect/force_portal/Bumped(var/atom/movable/AM) - AM.dropInto(src) - -/obj/effect/force_portal/bullet_act(var/obj/item/projectile/P) - var/atom/movable/AM = new P.type() - if(istype(P, /obj/item/projectile/bullet/pellet)) - var/obj/item/projectile/bullet/pellet/old_pellet = P - var/obj/item/projectile/bullet/pellet/new_pellet = AM - new_pellet.pellets = old_pellet.pellets - AM.dropInto(src) - P.forceMove(null) - qdel(P) \ No newline at end of file diff --git a/code/game/objects/effects/gibs.dm b/code/game/objects/effects/gibs.dm deleted file mode 100644 index 10101d2cda8e7..0000000000000 --- a/code/game/objects/effects/gibs.dm +++ /dev/null @@ -1,62 +0,0 @@ -/proc/gibs(atom/location, var/datum/dna/MobDNA, gibber_type = /obj/effect/gibspawner/generic, var/fleshcolor, var/bloodcolor) - new gibber_type(location,MobDNA,fleshcolor,bloodcolor) - -/obj/effect/gibspawner - var/sparks = 0 //whether sparks spread on Gib() - var/list/gibtypes = list() - var/list/gibamounts = list() - var/list/gibdirections = list() //of lists - var/fleshcolor //Used for gibbed humans. - var/bloodcolor //Used for gibbed humans. - var/datum/dna/MobDNA - - -/obj/effect/gibspawner/New(location, datum/dna/_MobDNA, _fleshcolor, _bloodcolor) - ..() - if (_fleshcolor) - fleshcolor = _fleshcolor - if (_bloodcolor) - bloodcolor = _bloodcolor - if (_MobDNA) - MobDNA = _MobDNA - - -/obj/effect/gibspawner/Initialize() - ..() - Gib(loc) - return INITIALIZE_HINT_QDEL - - -/obj/effect/gibspawner/proc/Gib(atom/location) - if (gibtypes.len != gibamounts.len || gibamounts.len != gibdirections.len) - log_error("Gib list length mismatch!") - return - if (sparks) - var/datum/effect/effect/system/spark_spread/s = new - s.set_up(2, 1, get_turf(location)) - s.start() - var/spread = isturf(location) - var/humanGibs = istype(src, /obj/effect/gibspawner/human) - var/obj/effect/decal/cleanable/blood/gibs/gib - for (var/i = gibtypes.len to 1 step -1) - if (!gibamounts[i]) - continue - for (var/j = gibamounts[i] to 1 step -1) - var/gibType = gibtypes[i] - gib = new gibType(location) - if (fleshcolor) - gib.fleshcolor = fleshcolor - if (bloodcolor) - gib.basecolor = bloodcolor - gib.update_icon() - gib.blood_DNA = list() - if (humanGibs) - gib.blood_DNA["Non-human DNA"] = "A+" - else if (MobDNA) - gib.blood_DNA[MobDNA.unique_enzymes] = MobDNA.b_type - if (!spread) - continue - var/list/directions = gibdirections[i] - if (directions.len) - addtimer(CALLBACK(gib, /obj/effect/decal/cleanable/blood/gibs/proc/streak, directions), 0) - qdel(src) diff --git a/code/game/objects/effects/item_pickup_ghost.dm b/code/game/objects/effects/item_pickup_ghost.dm deleted file mode 100644 index 3b9ca89c5eb44..0000000000000 --- a/code/game/objects/effects/item_pickup_ghost.dm +++ /dev/null @@ -1,19 +0,0 @@ -/obj/effect/temporary/item_pickup_ghost - var/lifetime = 0.2 SECONDS - -/obj/effect/temporary/item_pickup_ghost/Initialize(var/mapload, var/obj/item/picked_up) - . = ..(mapload, lifetime, picked_up.icon, picked_up.icon_state) - pixel_x = picked_up.pixel_x - pixel_y = picked_up.pixel_y - color = picked_up.color - -/obj/effect/temporary/item_pickup_ghost/proc/animate_towards(var/atom/target) - var/new_pixel_x = pixel_x + (target.x - src.x) * 32 - var/new_pixel_y = pixel_y + (target.y - src.y) * 32 - animate( - src, - transform = matrix().Update(scale_x = 0, scale_y = 0), - pixel_x = new_pixel_x, - pixel_y = new_pixel_y, - time = lifetime - ) diff --git a/code/game/objects/effects/landmarks.dm b/code/game/objects/effects/landmarks.dm deleted file mode 100644 index f80368ad75eb9..0000000000000 --- a/code/game/objects/effects/landmarks.dm +++ /dev/null @@ -1,258 +0,0 @@ -/obj/effect/landmark - name = "landmark" - icon = 'icons/effects/landmarks.dmi' - icon_state = "x2" - anchored = TRUE - unacidable = TRUE - simulated = FALSE - invisibility = 101 - var/delete_me = 0 - -/obj/effect/landmark/New() - ..() - tag = "landmark*[name]" - - //TODO clean up this mess - switch(name) //some of these are probably obsolete - if("monkey") - GLOB.monkeystart += loc - delete_me = 1 - return - if("start") - GLOB.newplayer_start += loc - delete_me = 1 - return - if("JoinLate") - GLOB.latejoin += loc - delete_me = 1 - return - if("JoinLateGateway") - GLOB.latejoin_gateway += loc - delete_me = 1 - return - if("JoinLateCryo") - GLOB.latejoin_cryo += loc - delete_me = 1 - return - if("JoinLateCyborg") - GLOB.latejoin_cyborg += loc - delete_me = 1 - return - if("prisonwarp") - GLOB.prisonwarp += loc - delete_me = 1 - return - if("tdome1") - GLOB.tdome1 += loc - if("tdome2") - GLOB.tdome2 += loc - if("tdomeadmin") - GLOB.tdomeadmin += loc - if("tdomeobserve") - GLOB.tdomeobserve += loc - if("prisonsecuritywarp") - GLOB.prisonsecuritywarp += loc - delete_me = 1 - return - if("endgame_exit") - endgame_safespawns += loc - delete_me = 1 - return - if("bluespacerift") - endgame_exits += loc - delete_me = 1 - return - - landmarks_list += src - return 1 - -/obj/effect/landmark/proc/delete() - delete_me = 1 - -/obj/effect/landmark/Initialize() - . = ..() - if(delete_me) - return INITIALIZE_HINT_QDEL - -/obj/effect/landmark/Destroy() - landmarks_list -= src - return ..() - -/obj/effect/landmark/start - name = "start" - icon = 'icons/mob/screen1.dmi' - icon_state = "x" - anchored = TRUE - invisibility = 101 - -/obj/effect/landmark/start/New() - ..() - tag = "start*[name]" - return 1 - -//Costume spawner landmarks -/obj/effect/landmark/costume/New() //costume spawner, selects a random subclass and disappears - - var/list/options = typesof(/obj/effect/landmark/costume) - var/PICK= options[rand(1,options.len)] - new PICK(src.loc) - delete_me = 1 - -//SUBCLASSES. Spawn a bunch of items and disappear likewise -/obj/effect/landmark/costume/chameleon/New() - new /obj/item/clothing/mask/chameleon(src.loc) - new /obj/item/clothing/under/chameleon(src.loc) - new /obj/item/clothing/glasses/chameleon(src.loc) - new /obj/item/clothing/shoes/chameleon(src.loc) - new /obj/item/clothing/gloves/chameleon(src.loc) - new /obj/item/clothing/suit/chameleon(src.loc) - new /obj/item/clothing/head/chameleon(src.loc) - new /obj/item/storage/backpack/chameleon(src.loc) - delete_me = 1 - -/obj/effect/landmark/costume/gladiator/New() - new /obj/item/clothing/under/gladiator(src.loc) - new /obj/item/clothing/head/helmet/gladiator(src.loc) - delete_me = 1 - -/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/storage/toggle/labcoat/mad(src.loc) - new /obj/item/clothing/glasses/green(src.loc) - delete_me = 1 - -/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/smokable/cigarette/cigar/havana(src.loc) - new /obj/item/clothing/shoes/jackboots(src.loc) - delete_me = 1 - -/obj/effect/landmark/costume/nyangirl/New() - new /obj/item/clothing/under/schoolgirl(src.loc) - new /obj/item/clothing/head/kitty(src.loc) - delete_me = 1 - -/obj/effect/landmark/costume/maid/New() - new /obj/item/clothing/under/blackskirt(src.loc) - var/CHOICE = pick( /obj/item/clothing/head/beret , /obj/item/clothing/head/rabbitears ) - new CHOICE(src.loc) - new /obj/item/clothing/glasses/blindfold(src.loc) - delete_me = 1 - -/obj/effect/landmark/costume/butler/New() - new /obj/item/clothing/accessory/waistcoat/black(src.loc) - new /obj/item/clothing/under/suit_jacket(src.loc) - new /obj/item/clothing/head/that(src.loc) - delete_me = 1 - -/obj/effect/landmark/costume/scratch/New() - new /obj/item/clothing/gloves/white(src.loc) - new /obj/item/clothing/shoes/white(src.loc) - new /obj/item/clothing/under/scratch(src.loc) - if (prob(30)) - new /obj/item/clothing/head/cueball(src.loc) - delete_me = 1 - -/obj/effect/landmark/costume/prig/New() - new /obj/item/clothing/accessory/waistcoat/black(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/black(src.loc) - new /obj/item/cane(src.loc) - new /obj/item/clothing/under/sl_suit(src.loc) - new /obj/item/clothing/mask/fakemoustache(src.loc) - delete_me = 1 - -/obj/effect/landmark/costume/plaguedoctor/New() - new /obj/item/clothing/suit/bio_suit/plaguedoctorsuit(src.loc) - new /obj/item/clothing/head/plaguedoctorhat(src.loc) - delete_me = 1 - -/obj/effect/landmark/costume/nightowl/New() - new /obj/item/clothing/under/owl(src.loc) - new /obj/item/clothing/mask/gas/owl_mask(src.loc) - delete_me = 1 - -/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) - delete_me = 1 - -/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/mask/bandana/red) - new CHOICE(src.loc) - new /obj/item/clothing/glasses/eyepatch(src.loc) - delete_me = 1 - -/obj/effect/landmark/costume/commie/New() - new /obj/item/clothing/under/soviet(src.loc) - new /obj/item/clothing/head/ushanka(src.loc) - delete_me = 1 - -/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) - delete_me = 1 - -/obj/effect/landmark/costume/holiday_priest/New() - new /obj/item/clothing/suit/holidaypriest(src.loc) - delete_me = 1 - -/obj/effect/landmark/costume/marisawizard/fake/New() - new /obj/item/clothing/head/wizard/marisa/fake(src.loc) - new/obj/item/clothing/suit/wizrobe/marisa/fake(src.loc) - delete_me = 1 - -/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/staff/broom(src.loc) - delete_me = 1 - -/obj/effect/landmark/costume/fakewizard/New() - new /obj/item/clothing/suit/wizrobe/fake(src.loc) - new /obj/item/clothing/head/wizard/fake(src.loc) - new /obj/item/staff/(src.loc) - delete_me = 1 - -/obj/effect/landmark/costume/sexyclown/New() - new /obj/item/clothing/mask/gas/sexyclown(src.loc) - new /obj/item/clothing/under/sexyclown(src.loc) - delete_me = 1 - -/obj/effect/landmark/costume/sexymime/New() - new /obj/item/clothing/mask/gas/sexymime(src.loc) - new /obj/item/clothing/under/sexymime(src.loc) - delete_me = 1 - -/obj/effect/landmark/costume/savagehunter/New() - new /obj/item/clothing/mask/spirit(src.loc) - new /obj/item/clothing/under/savage_hunter(src.loc) - delete_me = 1 - -/obj/effect/landmark/costume/savagehuntress/New() - new /obj/item/clothing/mask/spirit(src.loc) - new /obj/item/clothing/under/savage_hunter/female(src.loc) - delete_me = 1 - -/obj/effect/landmark/ruin - var/datum/map_template/ruin/ruin_template - -/obj/effect/landmark/ruin/New(loc, my_ruin_template) - name = "ruin_[sequential_id(/obj/effect/landmark/ruin)]" - ..(loc) - ruin_template = my_ruin_template - GLOB.ruin_landmarks |= src - -/obj/effect/landmark/ruin/Destroy() - GLOB.ruin_landmarks -= src - ruin_template = null - . = ..() diff --git a/code/game/objects/effects/manifest.dm b/code/game/objects/effects/manifest.dm deleted file mode 100644 index 2efcb41c69ac6..0000000000000 --- a/code/game/objects/effects/manifest.dm +++ /dev/null @@ -1,21 +0,0 @@ -/obj/effect/manifest - name = "manifest" - icon = 'icons/mob/screen1.dmi' - icon_state = "x" - unacidable = TRUE - -/obj/effect/manifest/New() - - src.invisibility = 101 - return - -/obj/effect/manifest/proc/manifest() - var/dat = "Crew Manifest:
              " - for(var/mob/living/carbon/human/M in SSmobs.mob_list) - dat += text(" [] - []
              ", M.name, M.get_assignment()) - var/obj/item/paper/P = new /obj/item/paper( src.loc ) - P.info = dat - P.SetName("paper- 'Crew Manifest'") - //SN src = null - qdel(src) - return \ No newline at end of file diff --git a/code/game/objects/effects/mines.dm b/code/game/objects/effects/mines.dm deleted file mode 100644 index 4c5c315247e0b..0000000000000 --- a/code/game/objects/effects/mines.dm +++ /dev/null @@ -1,108 +0,0 @@ -/obj/effect/mine - name = "Mine" - desc = "I Better stay away from that thing." - density = TRUE - anchored = TRUE - layer = OBJ_LAYER - icon = 'icons/obj/weapons/other.dmi' - icon_state = "uglymine" - var/triggerproc = "explode" //name of the proc thats called when the mine is triggered - var/triggered = 0 - - -/obj/effect/mine/Initialize() - . = ..() - icon_state = "uglyminearmed" - - -/obj/effect/mine/Crossed(AM as mob|obj) - Bumped(AM) - -/obj/effect/mine/Bumped(mob/M as mob|obj) - - if(triggered) return - - if(istype(M, /mob/living/carbon/human)) - for(var/mob/O in viewers(world.view, src.loc)) - to_chat(O, "\The [M] triggered the [icon2html(src, O)] [src]") - triggered = 1 - call(src,triggerproc)(M) - -/obj/effect/mine/proc/triggerrad(obj) - var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread() - s.set_up(3, 1, src) - s.start() - obj:radiation += 50 - randmutb(obj) - domutcheck(obj,null) - spawn(0) - qdel(src) - -/obj/effect/mine/proc/triggerstun(obj) - if(ismob(obj)) - var/mob/M = obj - M.Stun(30) - var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread() - s.set_up(3, 1, src) - s.start() - spawn(0) - qdel(src) - -/obj/effect/mine/proc/triggern2o(obj) - //example: n2o triggerproc - //note: im lazy - - for (var/turf/simulated/floor/target in range(1,src)) - if(!target.blocks_air) - target.assume_gas(GAS_N2O, 30) - - spawn(0) - qdel(src) - -/obj/effect/mine/proc/triggerphoron(obj) - for (var/turf/simulated/floor/target in range(1,src)) - if(!target.blocks_air) - target.assume_gas(GAS_PHORON, 30) - - target.hotspot_expose(1000, CELL_VOLUME) - - spawn(0) - qdel(src) - -/obj/effect/mine/proc/triggerkick(obj) - var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread() - s.set_up(3, 1, src) - s.start() - qdel(obj:client) - spawn(0) - qdel(src) - -/obj/effect/mine/proc/explode(obj) - explosion(loc, 0, 1, 2, 3) - spawn(0) - qdel(src) - -/obj/effect/mine/dnascramble - name = "Radiation Mine" - icon_state = "uglymine" - triggerproc = "triggerrad" - -/obj/effect/mine/phoron - name = "Phoron Mine" - icon_state = "uglymine" - triggerproc = "triggerphoron" - -/obj/effect/mine/kick - name = "Kick Mine" - icon_state = "uglymine" - triggerproc = "triggerkick" - -/obj/effect/mine/n2o - name = "N2O Mine" - icon_state = "uglymine" - triggerproc = "triggern2o" - -/obj/effect/mine/stun - name = "Stun Mine" - icon_state = "uglymine" - triggerproc = "triggerstun" diff --git a/code/game/objects/effects/misc.dm b/code/game/objects/effects/misc.dm deleted file mode 100644 index f44929cfd8151..0000000000000 --- a/code/game/objects/effects/misc.dm +++ /dev/null @@ -1,138 +0,0 @@ -//The effect when you wrap a dead body in gift wrap -/obj/effect/spresent - name = "strange present" - desc = "It's a ... present?" - icon = 'icons/obj/items.dmi' - icon_state = "strangepresent" - density = TRUE - anchored = FALSE - -/obj/effect/stop - var/victim = null - icon_state = "empty" - name = "Geas" - desc = "You can't resist." - -//Paints the wall it spawns on, then dies -/obj/effect/paint - name = "coat of paint" - icon = 'icons/effects/effects.dmi' - icon_state = "wall_paint_effect" - layer = TURF_DETAIL_LAYER - blend_mode = BLEND_MULTIPLY - -/obj/effect/paint/Initialize() - . = ..() - return INITIALIZE_HINT_LATELOAD - -/obj/effect/paint/LateInitialize() - var/turf/simulated/wall/W = get_turf(src) - if(istype(W)) - W.paint_color = color - W.update_icon() - var/obj/structure/wall_frame/WF = locate() in loc - if(WF) - WF.paint_color = color - WF.update_icon() - qdel(src) - -/obj/effect/paint/pink - color = COLOR_PINK - -/obj/effect/paint/sun - color = COLOR_SUN - -/obj/effect/paint/red - color = COLOR_RED - -/obj/effect/paint/silver - color = COLOR_SILVER - -/obj/effect/paint/black - color = COLOR_DARK_GRAY - -/obj/effect/paint/green - color = COLOR_GREEN_GRAY - -/obj/effect/paint/blue - color = COLOR_NAVY_BLUE - -/obj/effect/paint/ocean - color = COLOR_OCEAN - -/obj/effect/paint/palegreengray - color = COLOR_PALE_GREEN_GRAY - -/obj/effect/paint/brown - color = COLOR_DARK_BROWN - -//Stripes the wall it spawns on, then dies -/obj/effect/paint_stripe - name = "stripe of paint" - icon = 'icons/effects/effects.dmi' - icon_state = "white" - layer = TURF_DETAIL_LAYER - blend_mode = BLEND_MULTIPLY - -/obj/effect/paint_stripe/Initialize() - . = ..() - return INITIALIZE_HINT_LATELOAD - -/obj/effect/paint_stripe/LateInitialize() - var/turf/simulated/wall/W = get_turf(src) - if(istype(W)) - W.stripe_color = color - W.update_icon() - var/obj/structure/wall_frame/WF = locate() in loc - if(WF) - WF.stripe_color = color - WF.update_icon() - qdel(src) - -/obj/effect/paint_stripe/green - color = COLOR_GREEN_GRAY - -/obj/effect/paint_stripe/red - color = COLOR_RED_GRAY - -/obj/effect/paint_stripe/paleblue - color = COLOR_PALE_BLUE_GRAY - -/obj/effect/paint_stripe/yellow - color = COLOR_BROWN - -/obj/effect/paint_stripe/blue - color = COLOR_BLUE_GRAY - -/obj/effect/paint_stripe/brown - color = COLOR_DARK_BROWN - -/obj/effect/paint_stripe/mauve - color = COLOR_PALE_PURPLE_GRAY - -/obj/effect/paint_stripe/white - color = COLOR_SILVER - -/obj/effect/paint_stripe/gunmetal - color = COLOR_GUNMETAL - -/obj/effect/gas_setup //cryogenic - icon = 'icons/mob/screen1.dmi' - icon_state = "x3" - var/tempurature = 70 - var/pressure = 20* ONE_ATMOSPHERE - -/obj/effect/gas_setup/Initialize() - SHOULD_CALL_PARENT(FALSE) - atom_flags |= ATOM_FLAG_INITIALIZED - var/obj/machinery/atmospherics/pipe/P = locate() in loc - if(P && !P.air_temporary) - P.air_temporary = new(P.volume, tempurature) - var/datum/gas_mixture/G = P.air_temporary - G.adjust_gas(GAS_OXYGEN,((pressure*P.volume)/(R_IDEAL_GAS_EQUATION*temperature))) - return INITIALIZE_HINT_QDEL - -/obj/effect/heat - icon = 'icons/effects/fire.dmi' - icon_state = "3" - render_target = HEAT_EFFECT_TARGET diff --git a/code/game/objects/effects/overlays.dm b/code/game/objects/effects/overlays.dm deleted file mode 100644 index 268d4e649e82e..0000000000000 --- a/code/game/objects/effects/overlays.dm +++ /dev/null @@ -1,84 +0,0 @@ -/obj/effect/overlay - name = "overlay" - unacidable = TRUE - var/i_attached //Added for possible image attachments to objects. For hallucinations and the like. - -/obj/effect/overlay/beam - name="beam" - icon='icons/effects/beam.dmi' - icon_state= "b_beam" - var/tmp/atom/BeamSource - -/obj/effect/overlay/beam/New() - ..() - spawn(10) - qdel(src) - -/obj/effect/overlay/palmtree_r - name = "Palm tree" - icon = 'icons/misc/beach2.dmi' - icon_state = "palm1" - density = TRUE - layer = ABOVE_HUMAN_LAYER - anchored = TRUE - -/obj/effect/overlay/palmtree_l - name = "Palm tree" - icon = 'icons/misc/beach2.dmi' - icon_state = "palm2" - density = TRUE - layer = ABOVE_HUMAN_LAYER - anchored = TRUE - -/obj/effect/overlay/coconut - name = "Coconuts" - icon = 'icons/misc/beach.dmi' - icon_state = "coconuts" - -/obj/effect/overlay/bluespacify - name = "Bluespace" - icon = 'icons/turf/space.dmi' - icon_state = "bluespacify" - layer = SUPERMATTER_WALL_LAYER - -/obj/effect/overlay/wallrot - name = "wallrot" - desc = "Ick..." - icon = 'icons/effects/wallrot.dmi' - anchored = TRUE - density = TRUE - layer = ABOVE_TILE_LAYER - mouse_opacity = 0 - -/obj/effect/overlay/wallrot/New() - ..() - pixel_x += rand(-10, 10) - pixel_y += rand(-10, 10) - - -/// Effect overlays that should automatically delete themselves after a set time. -/obj/effect/overlay/self_deleting - /// The amount of time in deciseconds before the effect deletes itself. Can be defined in the object's definition or via `New()`. - var/delete_time - - -/obj/effect/overlay/self_deleting/emppulse - name = "emp pulse" - icon = 'icons/effects/effects.dmi' - icon_state = "emppulse" - anchored = TRUE - delete_time = 2 SECONDS - - -/obj/effect/overlay/self_deleting/Initialize(mapload, _delete_time) - . = ..() - if (_delete_time) - delete_time = _delete_time - if (delete_time <= 0) - log_debug(append_admin_tools("A self deleting overlay ([src]) was spawned with a negative or zero delete time ([delete_time]) and was instantly deleted.", location = get_turf(src))) - return INITIALIZE_HINT_QDEL - addtimer(CALLBACK(src, .proc/self_delete), delete_time) - - -/obj/effect/overlay/self_deleting/proc/self_delete() - qdel(src) diff --git a/code/game/objects/effects/particles/particles.dm b/code/game/objects/effects/particles/particles.dm deleted file mode 100644 index 134bcc683ad32..0000000000000 --- a/code/game/objects/effects/particles/particles.dm +++ /dev/null @@ -1,222 +0,0 @@ -/* A series of particle systems. Some are based on F0lak's particle systems -*/ - -/particles/fire - width = 500 - height = 500 - count = 3000 - spawning = 3 - lifespan = 10 - fade = 10 - velocity = list(0, 0) - position = generator("circle", 0, 8, NORMAL_RAND) - drift = generator("vector", list(0, -0.2), list(0, 0.2)) - gravity = list(0, 0.65) - - color = "white" - -/particles/smoke - width = 500 - height = 1000 - count = 3000 - spawning = 5 - lifespan = 40 - fade = 40 - velocity = generator("box", list(-1, 2), list(1, 2), NORMAL_RAND) - gravity = list(0, 1) - - friction = 0.1 - drift = generator("vector", list(-0.2, -0.3), list(0.2, 0.3)) - color = "white" - -/particles/fire_sparks - width = 500 - height = 500 - count = 3000 - spawning = 1 - lifespan = 40 - fade = 20 - position = generator("circle", -10, 10, NORMAL_RAND) - gravity = list(0, 1) - - friction = 0.25 - drift = generator("sphere", 0, 2) - gradient = list(0, "yellow", 1, "red") - color = "yellow" - -/particles/drill_sparks - width = 124 - height = 124 - count = 1600 - spawning = 4 - lifespan = 1.5 SECONDS - fade = 0.25 SECONDS - position = generator("circle", -3, 3, NORMAL_RAND) - gravity = list(0, -1) - velocity = generator("box", list(-3, 2, 0), list(3, 12, 5), NORMAL_RAND) - friction = 0.25 - gradient = list(0, COLOR_WHITE, 1, COLOR_ORANGE) - color_change = 0.125 - color = 0 - transform = list(1,0,0,0, 0,1,0,0, 0,0,1,1/5, 0,0,0,1) - -/particles/flare_sparks - width = 500 - height = 500 - count = 2000 - spawning = 12 - lifespan = 0.75 SECONDS - fade = 0.95 SECONDS - position = generator("circle", -2, 2, NORMAL_RAND) - velocity = generator("circle", -6, 6, NORMAL_RAND) - friction = 0.15 - gradient = list(0, COLOR_WHITE, 0.4, COLOR_RED) - color_change = 0.125 - -/particles/dust - width = 124 - height = 124 - count = 256 - spawning = 999999 //spawn all instantly - lifespan = 0.75 SECONDS - fade = 0.35 SECONDS - position = generator("box", list(-16, -16), list(16, 16), NORMAL_RAND) - velocity = generator("circle", -8, 8, NORMAL_RAND) - friction = 0.125 - color = COLOR_OFF_WHITE - -/particles/debris - width = 124 - height = 124 - count = 16 - spawning = 999999 //spawn all instantly - lifespan = 0.75 SECONDS - fade = 0.35 SECONDS - position = generator("box", list(-10, -10), list(10, 10), NORMAL_RAND) - velocity = generator("circle", -15, 15, NORMAL_RAND) - friction = 0.225 - gravity = list(0, -1) - icon = 'icons/effects/particles.dmi' - icon_state = list("rock1", "rock2", "rock3", "rock4", "rock5") - rotation = generator("num", 0, 360, NORMAL_RAND) - -/particles/drill_sparks/debris - friction = 0.25 - gradient = null - color = COLOR_WHITE - transform = list(1/2,0,0,0, 0,1/2,0,0, 0,0,1/2,1/5, 0,0,0,1) - icon = 'icons/effects/particles.dmi' - icon_state = list("rock1", "rock2", "rock3", "rock4", "rock5") - -/particles/fusion - width = 500 - height = 500 - count = 4000 - spawning = 260 - lifespan = 0.85 SECONDS - fade = 0.95 SECONDS - position = generator("circle", 2.5 * 32 - 5, 2.5 * 32 + 5, NORMAL_RAND) - velocity = generator("circle", 0, 3, NORMAL_RAND) - friction = 0.15 - gradient = list(0, COLOR_WHITE, 0.75, COLOR_BLUE_LIGHT) - color_change = 0.1 - color = 0 - drift = generator("circle", 0.2, NORMAL_RAND) - -/particles/heat - width = 500 - height = 500 - count = 600 - spawning = 35 - lifespan = 1.85 SECONDS - fade = 1.25 SECONDS - position = generator("box", list(-16, -16), list(16, 0), NORMAL_RAND) - friction = 0.15 - gradient = list(0, COLOR_WHITE, 0.75, COLOR_ORANGE) - color_change = 0.1 - color = 0 - gravity = list(0, 1) - drift = generator("circle", 0.4, NORMAL_RAND) - velocity = generator("circle", 0, 3, NORMAL_RAND) - -//Spawner object -//Maybe we could pool them in and out -/obj/particle_emitter - name = "" - anchored = TRUE - mouse_opacity = 0 - appearance_flags = PIXEL_SCALE - -/obj/particle_emitter/Initialize(mapload, time, _color) - . = ..() - if(time > 0) - QDEL_IN(src, time) - color = _color - -/obj/particle_emitter/proc/enable(on) - if(on) - particles.spawning = initial(particles.spawning) - else - particles.spawning = 0 - -/obj/particle_emitter/sparks - particles = new/particles/drill_sparks - plane = EFFECTS_ABOVE_LIGHTING_PLANE - -/obj/particle_emitter/sparks/set_dir(dir) - ..() - var/list/min - var/list/max - if(dir == NORTH) - min = list(-3, 2, -1) - max = list(3, 12, 0) - else if(dir == SOUTH) - min = list(-3, 2, 0) - max = list(3, 12, 1) - else if(dir == EAST) - min = list(1, 3, 0) - max = list(6, 12, 0) - else - min = list(-1, 3, 0) - max = list(-6, 12, 0) - - particles.velocity = generator("box", min, max, NORMAL_RAND) - -/obj/particle_emitter/sparks/debris - particles = new/particles/drill_sparks/debris - plane = DEFAULT_PLANE - -/obj/particle_emitter/burst/Initialize(mapload, time) - . = ..() - //Burst emitters turn off after 1 tick - addtimer(CALLBACK(src, .proc/enable, FALSE), 1, TIMER_CLIENT_TIME) -/obj/particle_emitter/burst/rocks - particles = new/particles/debris - -/obj/particle_emitter/burst/dust - particles = new/particles/dust - -/obj/particle_emitter/smoke - layer = FIRE_LAYER - particles = new/particles/smoke - -/obj/particle_emitter/smoke/Initialize(mapload, time, _color) - . = ..() - filters = filter(type="blur", size=1.5) - -/obj/particle_emitter/sparks_flare - plane = EFFECTS_ABOVE_LIGHTING_PLANE - particles = new/particles/flare_sparks - mouse_opacity = 1 - -/obj/particle_emitter/sparks_flare/Initialize(mapload, time, _color) - . = ..() - filters = filter(type="bloom", size=3, offset = 0.5, alpha = 220) - -/obj/particle_emitter/heat - particles = new/particles/heat - render_target = HEAT_EFFECT_TARGET - -/obj/particle_emitter/heat/Initialize() - . = ..() - filters += filter(type = "blur", size = 1) diff --git a/code/game/objects/effects/portals.dm b/code/game/objects/effects/portals.dm deleted file mode 100644 index 1433586a9beff..0000000000000 --- a/code/game/objects/effects/portals.dm +++ /dev/null @@ -1,63 +0,0 @@ -/obj/effect/portal - name = "portal" - desc = "Looks unstable. Best to test it with the clown." - icon = 'icons/obj/stationobjs.dmi' - icon_state = "portal" - density = TRUE - unacidable = TRUE - var/obj/item/target = null - var/creator = null - anchored = TRUE - var/dangerous = 0 - var/failchance = 0 - -/obj/effect/portal/Bumped(mob/M as mob|obj) - spawn(0) - src.teleport(M) - return - return - -/obj/effect/portal/Crossed(AM as mob|obj) - spawn(0) - src.teleport(AM) - return - return - -/obj/effect/portal/attack_hand(mob/user as mob) - spawn(0) - src.teleport(user) - return - return - -/obj/effect/portal/New(var/start, var/end, var/delete_after = 300, var/failure_rate) - ..() - if(failure_rate) - failchance = failure_rate - if(prob(failchance)) - icon_state = "portal1" - dangerous = 1 - playsound(src, 'sound/effects/phasein.ogg', 25, 1) - target = end - - if(delete_after) - spawn(delete_after) - qdel(src) - -/obj/effect/portal/Destroy() - target = null - . = ..() - -/obj/effect/portal/proc/teleport(atom/movable/M as mob|obj) - if(istype(M, /obj/effect)) //sparks don't teleport - return - if (icon_state == "portal1") - return - if (!( target )) - qdel(src) - return - if (istype(M, /atom/movable)) - if(dangerous && prob(failchance)) //oh dear a problem, put em in deep space - var/destination_z = GLOB.using_map.get_transit_zlevel(z) - do_teleport(M, locate(rand(TRANSITIONEDGE, world.maxx - TRANSITIONEDGE), rand(TRANSITIONEDGE, world.maxy -TRANSITIONEDGE), destination_z), 0) - else - do_teleport(M, target, 1) ///You will appear adjacent to the beacon diff --git a/code/game/objects/effects/spawners/bombspawner.dm b/code/game/objects/effects/spawners/bombspawner.dm deleted file mode 100644 index a23bc202ecf1c..0000000000000 --- a/code/game/objects/effects/spawners/bombspawner.dm +++ /dev/null @@ -1,224 +0,0 @@ -/* The old single tank bombs that dont really work anymore -/obj/effect/spawner/bomb - name = "bomb" - icon = 'icons/mob/screen1.dmi' - icon_state = "x" - var/btype = 0 //0 = radio, 1= prox, 2=time - var/explosive = 1 // 0= firebomb - var/btemp = 500 // bomb temperature (degC) - var/active = 0 - -/obj/effect/spawner/bomb/radio - btype = 0 - -/obj/effect/spawner/bomb/proximity - btype = 1 - -/obj/effect/spawner/bomb/timer - btype = 2 - -/obj/effect/spawner/bomb/timer/syndicate - btemp = 450 - -/obj/effect/spawner/bomb/suicide - btype = 3 - -/obj/effect/spawner/bomb/New() - ..() - - switch (src.btype) - // radio - if (0) - var/obj/item/assembly/r_i_ptank/R = new /obj/item/assembly/r_i_ptank(src.loc) - var/obj/item/tank/phoron/p3 = new /obj/item/tank/phoron(R) - var/obj/item/device/radio/signaler/p1 = new /obj/item/device/radio/signaler(R) - var/obj/item/device/igniter/p2 = new /obj/item/device/igniter(R) - R.part1 = p1 - R.part2 = p2 - R.part3 = p3 - p1.master = R - p2.master = R - p3.master = R - R.status = explosive - p1.b_stat = 0 - p2.secured = 1 - p3.air_contents.temperature = btemp + T0C - - // proximity - if (1) - var/obj/item/assembly/m_i_ptank/R = new /obj/item/assembly/m_i_ptank(src.loc) - var/obj/item/tank/phoron/p3 = new /obj/item/tank/phoron(R) - var/obj/item/device/prox_sensor/p1 = new /obj/item/device/prox_sensor(R) - var/obj/item/device/igniter/p2 = new /obj/item/device/igniter(R) - R.part1 = p1 - R.part2 = p2 - R.part3 = p3 - p1.master = R - p2.master = R - p3.master = R - R.status = explosive - - p3.air_contents.temperature = btemp + T0C - p2.secured = 1 - - if(src.active) - R.part1.secured = 1 - R.part1.icon_state = text("motion[]", 1) - R.c_state(1, src) - - // timer - if (2) - var/obj/item/assembly/t_i_ptank/R = new /obj/item/assembly/t_i_ptank(src.loc) - var/obj/item/tank/phoron/p3 = new /obj/item/tank/phoron(R) - var/obj/item/device/timer/p1 = new /obj/item/device/timer(R) - var/obj/item/device/igniter/p2 = new /obj/item/device/igniter(R) - R.part1 = p1 - R.part2 = p2 - R.part3 = p3 - p1.master = R - p2.master = R - p3.master = R - R.status = explosive - - p3.air_contents.temperature = btemp + T0C - p2.secured = 1 - //bombvest - if(3) - var/obj/item/clothing/suit/armor/a_i_a_ptank/R = new /obj/item/clothing/suit/armor/a_i_a_ptank(src.loc) - var/obj/item/tank/phoron/p4 = new /obj/item/tank/phoron(R) - var/obj/item/device/scanner/health/p1 = new /obj/item/device/scanner/health(R) - var/obj/item/device/igniter/p2 = new /obj/item/device/igniter(R) - var/obj/item/clothing/suit/armor/vest/p3 = new /obj/item/clothing/suit/armor/vest(R) - R.part1 = p1 - R.part2 = p2 - R.part3 = p3 - R.part4 = p4 - p1.master = R - p2.master = R - p3.master = R - p4.master = R - R.status = explosive - - p4.air_contents.temperature = btemp + T0C - p2.secured = 1 - - qdel(src) -*/ - -/client/proc/spawn_tanktransferbomb() - set category = "Debug" - set desc = "Spawn a tank transfer valve bomb" - set name = "Instant TTV" - - if(!check_rights(R_SPAWN)) return - - var/obj/effect/spawner/newbomb/proto = /obj/effect/spawner/newbomb/radio/custom - - var/p = input("Enter phoron amount (mol):","Phoron", initial(proto.phoron_amt)) as num|null - if(p == null) return - - var/o = input("Enter oxygen amount (mol):","Oxygen", initial(proto.oxygen_amt)) as num|null - if(o == null) return - - var/c = input("Enter carbon dioxide amount (mol):","Carbon Dioxide", initial(proto.carbon_amt)) as num|null - if(c == null) return - - new /obj/effect/spawner/newbomb/radio/custom(get_turf(mob), p, o, c) - -/obj/effect/spawner/newbomb - name = "TTV bomb" - icon = 'icons/mob/screen1.dmi' - icon_state = "x" - - var/assembly_type = /obj/item/device/assembly/signaler - - //Note that the maximum amount of gas you can put in a 70L air tank at 1013.25 kPa and 519K is 16.44 mol. - var/phoron_amt = 12 - var/oxygen_amt = 18 - var/carbon_amt = 0 - -/obj/effect/spawner/newbomb/traitor - name = "TTV bomb - traitor" - assembly_type = /obj/item/device/assembly/signaler - phoron_amt = 14 - oxygen_amt = 21 - -/obj/effect/spawner/newbomb/timer - name = "TTV bomb - timer" - assembly_type = /obj/item/device/assembly/timer - -/obj/effect/spawner/newbomb/timer/syndicate - name = "TTV bomb - merc" - //High yield bombs. Yes, it is possible to make these with toxins - phoron_amt = 16.5 - oxygen_amt = 23.5 - -/obj/effect/spawner/newbomb/proximity - name = "TTV bomb - proximity" - assembly_type = /obj/item/device/assembly/prox_sensor - -/obj/effect/spawner/newbomb/radio/custom/New(var/newloc, ph, ox, co) - if(ph != null) phoron_amt = ph - if(ox != null) oxygen_amt = ox - if(co != null) carbon_amt = co - ..() - -/obj/effect/spawner/newbomb/Initialize() - ..() - var/obj/item/device/transfer_valve/V = new(src.loc) - var/obj/item/tank/phoron/PT = new(V) - var/obj/item/tank/oxygen/OT = new(V) - - V.tank_one = PT - V.tank_two = OT - - PT.master = V - OT.master = V - - SET_FLAGS(PT.tank_flags, TANK_FLAG_WELDED) - PT.air_contents.gas[GAS_PHORON] = phoron_amt - PT.air_contents.gas[GAS_CO2] = carbon_amt - PT.air_contents.total_moles = phoron_amt + carbon_amt - PT.air_contents.temperature = PHORON_MINIMUM_BURN_TEMPERATURE+1 - PT.air_contents.update_values() - - SET_FLAGS(OT.tank_flags, TANK_FLAG_WELDED) - OT.air_contents.gas[GAS_OXYGEN] = oxygen_amt - OT.air_contents.total_moles = oxygen_amt - OT.air_contents.temperature = PHORON_MINIMUM_BURN_TEMPERATURE+1 - OT.air_contents.update_values() - - - var/obj/item/device/assembly/S = new assembly_type(V) - - - V.attached_device = S - - S.holder = V - S.toggle_secure() - - V.update_icon() - return INITIALIZE_HINT_QDEL - -/////////////////////// -//One Tank Bombs, WOOOOOOO! -Luke -/////////////////////// - -/obj/effect/spawner/onetankbomb - name = "Single-tank bomb" - icon = 'icons/mob/screen1.dmi' - icon_state = "x" - -// var/assembly_type = /obj/item/device/assembly/signaler - - //Note that the maximum amount of gas you can put in a 70L air tank at 1013.25 kPa and 519K is 16.44 mol. - var/phoron_amt = 0 - var/oxygen_amt = 0 - -/obj/effect/spawner/onetankbomb/New(newloc) //just needs an assembly. - ..(newloc) - - var/type = pick(/obj/item/tank/phoron/onetankbomb, /obj/item/tank/oxygen/onetankbomb) - new type(src.loc) - - qdel(src) diff --git a/code/game/objects/effects/spawners/gibspawner.dm b/code/game/objects/effects/spawners/gibspawner.dm deleted file mode 100644 index eea9809aeed1f..0000000000000 --- a/code/game/objects/effects/spawners/gibspawner.dm +++ /dev/null @@ -1,55 +0,0 @@ -/obj/effect/gibspawner/generic - gibtypes = list( - /obj/effect/decal/cleanable/blood/gibs, - /obj/effect/decal/cleanable/blood/gibs, - /obj/effect/decal/cleanable/blood/gibs/core - ) - gibdirections = list( - list(WEST, NORTHWEST, SOUTHWEST, NORTH), - list(EAST, NORTHEAST, SOUTHEAST, SOUTH), - list() - ) - gibamounts = list(2, 2, 1) - - -/obj/effect/gibspawner/human - gibtypes = list( - /obj/effect/decal/cleanable/blood/gibs, - /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, - /obj/effect/decal/cleanable/blood/gibs, - /obj/effect/decal/cleanable/blood/gibs/core - ) - gibdirections = list( - list(NORTH, NORTHEAST, NORTHWEST), - list(SOUTH, SOUTHEAST, SOUTHWEST), - list(WEST, NORTHWEST, SOUTHWEST), - list(EAST, NORTHEAST, SOUTHEAST), - list(NORTH, SOUTH, EAST, WEST, NORTHEAST, NORTHWEST, SOUTHEAST, SOUTHWEST), - list(NORTH, SOUTH, EAST, WEST, NORTHEAST, NORTHWEST, SOUTHEAST, SOUTHWEST), - list() - ) - gibamounts = list(1, 1, 1, 1, 1, 1, 1) - - -/obj/effect/gibspawner/robot - gibtypes = list( - /obj/effect/decal/cleanable/blood/gibs/robot/up, - /obj/effect/decal/cleanable/blood/gibs/robot/down, - /obj/effect/decal/cleanable/blood/gibs/robot, - /obj/effect/decal/cleanable/blood/gibs/robot, - /obj/effect/decal/cleanable/blood/gibs/robot, - /obj/effect/decal/cleanable/blood/gibs/robot/limb - ) - gibdirections = list( - list(NORTH, NORTHEAST, NORTHWEST), - list(SOUTH, SOUTHEAST, SOUTHWEST), - list(WEST, NORTHWEST, SOUTHWEST), - list(EAST, NORTHEAST, SOUTHEAST), - list(NORTH, SOUTH, EAST, WEST, NORTHEAST, NORTHWEST, SOUTHEAST, SOUTHWEST), - list(NORTH, SOUTH, EAST, WEST, NORTHEAST, NORTHWEST, SOUTHEAST, SOUTHWEST) - ) - gibamounts = list(1, 1, 1, 1, 1, 1) - sparks = 1 diff --git a/code/game/objects/effects/spawners/guns.dm b/code/game/objects/effects/spawners/guns.dm deleted file mode 100644 index 2c2ad4e9e47c0..0000000000000 --- a/code/game/objects/effects/spawners/guns.dm +++ /dev/null @@ -1,50 +0,0 @@ -/obj/random/lilgun - name = "Random Light Weapon" - desc = "This is a random sidearm." - icon = 'icons/obj/guns/pistol.dmi' - icon_state = "secguncomp" - -/obj/random/lilgun/spawn_choices() - return list(/obj/item/gun/projectile/pistol/sec, - /obj/item/gun/energy/gun, - /obj/item/gun/energy/stunrevolver, - /obj/item/gun/projectile/shotgun/doublebarrel/sawn, - /obj/item/gun/energy/xray/pistol, - /obj/item/gun/energy/pulse_rifle/pistol, - /obj/item/gun/energy/plasmacutter, - /obj/item/gun/energy/incendiary_laser, - /obj/item/gun/projectile/automatic/machine_pistol, - /obj/item/gun/projectile/pistol/military/alt, - /obj/item/gun/projectile/pistol/holdout, - /obj/item/gun/projectile/revolver, - /obj/item/gun/projectile/revolver/medium, - /obj/item/gun/energy/retro, - /obj/item/gun/projectile/pistol/throwback, - /obj/item/gun/energy/ionrifle/small - ) - -/obj/random/biggun - name = "Random Heavy Weapon" - desc = "This is a random rifle." - icon = 'icons/obj/guns/assault_rifle.dmi' - icon_state = "arifle" - -/obj/random/biggun/spawn_choices() - return list(/obj/item/gun/energy/lasercannon, - /obj/item/gun/energy/laser, - /obj/item/gun/energy/captain, - /obj/item/gun/energy/pulse_rifle, - /obj/item/gun/energy/pulse_rifle/carbine, - /obj/item/gun/energy/sniperrifle, - /obj/item/gun/projectile/shotgun/doublebarrel, - /obj/item/gun/energy/xray, - /obj/item/gun/projectile/automatic/battlerifle, - /obj/item/gun/projectile/sniper/semistrip, - /obj/item/gun/projectile/sniper/garand, - /obj/item/gun/projectile/automatic/assault_rifle, - /obj/item/gun/projectile/automatic/sec_smg, - /obj/item/gun/energy/crossbow/largecrossbow, - /obj/item/gun/projectile/shotgun/pump/combat, - /obj/item/gun/energy/ionrifle, - /obj/item/gun/projectile/shotgun/pump - ) diff --git a/code/game/objects/effects/spiders.dm b/code/game/objects/effects/spiders.dm deleted file mode 100644 index 588dbf4ca7549..0000000000000 --- a/code/game/objects/effects/spiders.dm +++ /dev/null @@ -1,362 +0,0 @@ -//generic procs copied from obj/effect/alien -/obj/effect/spider - name = "web" - desc = "It's stringy and sticky." - icon = 'icons/effects/effects.dmi' - anchored = TRUE - density = FALSE - var/health = 15 - -//similar to weeds, but only barfed out by nurses manually -/obj/effect/spider/ex_act(severity) - switch(severity) - if(EX_ACT_DEVASTATING) - qdel(src) - if(EX_ACT_HEAVY) - if (prob(50)) - qdel(src) - if(EX_ACT_LIGHT) - if (prob(5)) - qdel(src) - return - -/obj/effect/spider/attackby(var/obj/item/W, var/mob/user) - user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN) - - if(W.attack_verb.len) - visible_message("\The [src] have been [pick(W.attack_verb)] with \the [W][(user ? " by [user]." : ".")]") - else - visible_message("\The [src] have been attacked with \the [W][(user ? " by [user]." : ".")]") - - var/damage = W.force / 4.0 - - if(W.edge) - damage += 5 - - if(isWelder(W)) - var/obj/item/weldingtool/WT = W - - if(WT.remove_fuel(0, user)) - damage = 15 - playsound(loc, 'sound/items/Welder.ogg', 100, 1) - - health -= damage - healthcheck() - -/obj/effect/spider/bullet_act(var/obj/item/projectile/Proj) - ..() - health -= Proj.get_structure_damage() - healthcheck() - -/obj/effect/spider/proc/healthcheck() - if(health <= 0) - qdel(src) - -/obj/effect/spider/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume) - if(exposed_temperature > 300 + T0C) - health -= 5 - healthcheck() - -/obj/effect/spider/stickyweb - icon_state = "stickyweb1" - -/obj/effect/spider/stickyweb/Initialize() - . = ..() - if(prob(50)) - icon_state = "stickyweb2" - -/obj/effect/spider/stickyweb/CanPass(atom/movable/mover, turf/target, height=0, air_group=0) - if(air_group || (height==0)) return 1 - if(istype(mover, /mob/living/simple_animal/hostile/giant_spider)) - return 1 - else if(istype(mover, /mob/living)) - if(prob(50)) - to_chat(mover, "You get stuck in \the [src] for a moment.") - return 0 - else if(istype(mover, /obj/item/projectile)) - return prob(30) - return 1 - -/obj/effect/spider/eggcluster - name = "egg cluster" - desc = "They seem to pulse slightly with an inner life." - icon_state = "eggs" - var/amount_grown = 0 - var/spiders_min = 6 - var/spiders_max = 12 - var/spider_type = /obj/effect/spider/spiderling - -/obj/effect/spider/eggcluster/Initialize(mapload, atom/parent) - . = ..() - get_light_and_color(parent) - pixel_x = rand(3,-3) - pixel_y = rand(3,-3) - START_PROCESSING(SSobj, src) - -/obj/effect/spider/eggcluster/Destroy() - STOP_PROCESSING(SSobj, src) - if(istype(loc, /obj/item/organ/external)) - var/obj/item/organ/external/O = loc - O.implants -= src - . = ..() - -/obj/effect/spider/eggcluster/Process() - if(prob(70)) - amount_grown += rand(0,2) - if(amount_grown >= 100) - var/num = rand(spiders_min, spiders_max) - var/obj/item/organ/external/O = null - if(istype(loc, /obj/item/organ/external)) - O = loc - - for(var/i=0, i 0) - disturbed() - -/obj/effect/spider/spiderling/Crossed(var/mob/living/L) - if(dormant && istype(L) && L.mob_size > MOB_TINY) - disturbed() - -/obj/effect/spider/spiderling/proc/disturbed() - if(!dormant) - return - dormant = FALSE - - GLOB.moved_event.unregister(src, src, /obj/effect/spider/spiderling/proc/disturbed) - START_PROCESSING(SSobj, src) - -/obj/effect/spider/spiderling/Bump(atom/user) - if(istype(user, /obj/structure/table)) - forceMove(user.loc) - else - ..() - -/obj/effect/spider/spiderling/proc/die() - visible_message("[src] dies!") - new /obj/effect/decal/cleanable/spiderling_remains(loc) - qdel(src) - -/obj/effect/spider/spiderling/healthcheck() - if(health <= 0) - die() - -/obj/effect/spider/spiderling/proc/check_vent(obj/machinery/atmospherics/unary/vent_pump/exit_vent) - if(QDELETED(exit_vent) || exit_vent.welded) // If it's qdeleted we probably were too, but in that case we won't be making this call due to timer cleanup. - forceMove(get_turf(entry_vent)) - entry_vent = null - return TRUE - -/obj/effect/spider/spiderling/proc/start_vent_moving(obj/machinery/atmospherics/unary/vent_pump/exit_vent, var/travel_time) - if(check_vent(exit_vent)) - return - if(prob(50)) - audible_message(SPAN_NOTICE("You hear something squeezing through the ventilation ducts.")) - forceMove(exit_vent) - addtimer(CALLBACK(src, .proc/end_vent_moving, exit_vent), travel_time) - -/obj/effect/spider/spiderling/proc/end_vent_moving(obj/machinery/atmospherics/unary/vent_pump/exit_vent) - if(check_vent(exit_vent)) - return - forceMove(get_turf(exit_vent)) - travelling_in_vent = FALSE - entry_vent = null - -/obj/effect/spider/spiderling/Process() - - if(loc) - var/datum/gas_mixture/environment = loc.return_air() - if(environment && environment.gas[GAS_METHYL_BROMIDE] > 0) - die() - return - - if(travelling_in_vent) - if(istype(src.loc, /turf)) - travelling_in_vent = 0 - entry_vent = null - else if(entry_vent) - if(get_dist(src, entry_vent) <= 1) - if(entry_vent.network && entry_vent.network.normal_members.len) - var/list/vents = list() - for(var/obj/machinery/atmospherics/unary/vent_pump/temp_vent in entry_vent.network.normal_members) - vents.Add(temp_vent) - if(!vents.len) - entry_vent = null - return - var/obj/machinery/atmospherics/unary/vent_pump/exit_vent = pick(vents) - - forceMove(entry_vent) - var/travel_time = round(get_dist(loc, exit_vent.loc) / 2) - addtimer(CALLBACK(src, .proc/start_vent_moving, exit_vent, travel_time), travel_time + rand(20,60)) - travelling_in_vent = TRUE - return - else - entry_vent = null - //================= - - if(isturf(loc)) - if(prob(25)) - var/list/nearby = trange(5, src) - loc - if(nearby.len) - var/target_atom = pick(nearby) - walk_to(src, target_atom, 5) - if(prob(10)) - src.visible_message("\The [src] skitters[pick(" away"," around","")].") - // Reduces the risk of spiderlings hanging out at the extreme ranges of the shift range. - var/min_x = pixel_x <= -shift_range ? 0 : -2 - var/max_x = pixel_x >= shift_range ? 0 : 2 - var/min_y = pixel_y <= -shift_range ? 0 : -2 - var/max_y = pixel_y >= shift_range ? 0 : 2 - - pixel_x = clamp(pixel_x + rand(min_x, max_x), -shift_range, shift_range) - pixel_y = clamp(pixel_y + rand(min_y, max_y), -shift_range, shift_range) - else if(prob(5)) - //vent crawl! - for(var/obj/machinery/atmospherics/unary/vent_pump/v in view(7,src)) - if(!v.welded) - entry_vent = v - walk_to(src, entry_vent, 5) - break - - if(amount_grown >= 100) - new greater_form(src.loc, src) - qdel(src) - else if(isorgan(loc)) - if(!amount_grown) amount_grown = 1 - var/obj/item/organ/external/O = loc - if(!O.owner || O.owner.stat == DEAD || amount_grown > 80) - amount_grown = 20 //reset amount_grown so that people have some time to react to spiderlings before they grow big - O.implants -= src - forceMove(O.owner ? O.owner.loc : O.loc) - src.visible_message("\A [src] emerges from inside [O.owner ? "[O.owner]'s [O.name]" : "\the [O]"]!") - if(O.owner) - O.owner.apply_damage(5, DAMAGE_BRUTE, O.organ_tag) - O.owner.apply_damage(3, DAMAGE_TOXIN, O.organ_tag) - else if(prob(1)) - O.owner.apply_damage(1, DAMAGE_TOXIN, O.organ_tag) - if(world.time > last_itch + 30 SECONDS) - last_itch = world.time - to_chat(O.owner, "Your [O.name] itches...") - else if(prob(1)) - src.visible_message("\The [src] skitters.") - - if(amount_grown > 0) - amount_grown += rand(0,2) - -/obj/effect/decal/cleanable/spiderling_remains - name = "spiderling remains" - desc = "Green squishy mess." - icon = 'icons/effects/effects.dmi' - icon_state = "greenshatter" - anchored = TRUE - layer = BLOOD_LAYER - -/obj/effect/spider/cocoon - name = "cocoon" - desc = "Something wrapped in silky spider web." - icon_state = "cocoon1" - health = 60 - -/obj/effect/spider/cocoon/Initialize() - . = ..() - icon_state = pick("cocoon1","cocoon2","cocoon3") - - - for(var/atom/movable/O in loc) - if(!O.anchored) - O.forceMove(src) - - if (istype(O, /mob/living)) - var/mob/living/L = O - if (!(L.status_flags & NOTARGET)) - L.status_flags ^= NOTARGET - -/obj/effect/spider/cocoon/Destroy() - src.visible_message("\The [src] splits open.") - for(var/atom/movable/A in contents) - A.dropInto(loc) - if (istype(A, /mob/living)) - var/mob/living/L = A - if (L.status_flags & NOTARGET) - L.status_flags ^= NOTARGET - return ..() diff --git a/code/game/objects/effects/step_triggers.dm b/code/game/objects/effects/step_triggers.dm deleted file mode 100644 index e9b9f649ede02..0000000000000 --- a/code/game/objects/effects/step_triggers.dm +++ /dev/null @@ -1,115 +0,0 @@ -/* Simple object type, calls a proc when "stepped" on by something */ - -/obj/effect/step_trigger - var/affect_ghosts = 0 - var/stopper = 1 // stops throwers - invisibility = 101 // nope cant see this shit - anchored = TRUE - -/obj/effect/step_trigger/proc/Trigger(var/atom/movable/A) - return 0 - -/obj/effect/step_trigger/Crossed(H as mob|obj) - ..() - if(!H) - return - if(isobserver(H) && !(isghost(H) && affect_ghosts)) - return - Trigger(H) - - - -/* Tosses things in a certain direction */ - -/datum/movement_handler/no_move/toss - -/obj/effect/step_trigger/thrower - var/direction = SOUTH // the direction of throw - var/tiles = 3 // if 0: forever until atom hits a stopper - var/immobilize = 1 // if nonzero: prevents mobs from moving while they're being flung - var/speed = 1 // delay of movement - var/facedir = 0 // if 1: atom faces the direction of movement - var/nostop = 0 // if 1: will only be stopped by teleporters - var/list/affecting = list() - -/obj/effect/step_trigger/thrower/Trigger(var/atom/movable/AM) - if(!AM || !istype(AM) || !AM.simulated) - return - var/curtiles = 0 - var/stopthrow = 0 - for(var/obj/effect/step_trigger/thrower/T in orange(2, src)) - if(AM in T.affecting) - return - - if(ismob(AM)) - var/mob/M = AM - if(immobilize) - M.AddMovementHandler(/datum/movement_handler/no_move/toss) - - affecting.Add(AM) - while(AM && !stopthrow) - if(tiles) - if(curtiles >= tiles) - break - if(AM.z != src.z) - break - - curtiles++ - - sleep(speed) - - // Calculate if we should stop the process - if(!nostop) - for(var/obj/effect/step_trigger/T in get_step(AM, direction)) - if(T.stopper && T != src) - stopthrow = 1 - else - for(var/obj/effect/step_trigger/teleporter/T in get_step(AM, direction)) - if(T.stopper) - stopthrow = 1 - - if(AM) - var/predir = AM.dir - step(AM, direction) - if(!facedir) - AM.set_dir(predir) - - - - affecting.Remove(AM) - - if(ismob(AM)) - var/mob/M = AM - if(immobilize) - M.RemoveMovementHandler(/datum/movement_handler/no_move/toss) - -/* Stops things thrown by a thrower, doesn't do anything */ - -/obj/effect/step_trigger/stopper - -/* Instant teleporter */ - -/obj/effect/step_trigger/teleporter - var/teleport_x = 0 // teleportation coordinates (if one is null, then no teleport!) - var/teleport_y = 0 - var/teleport_z = 0 - -/obj/effect/step_trigger/teleporter/Trigger(var/atom/movable/A) - if(teleport_x && teleport_y && teleport_z) - - A.x = teleport_x - A.y = teleport_y - A.z = teleport_z - -/* Random teleporter, teleports atoms to locations ranging from teleport_x - teleport_x_offset, etc */ - -/obj/effect/step_trigger/teleporter/random - opacity = 1 - var/teleport_x_offset = 0 - var/teleport_y_offset = 0 - var/teleport_z_offset = 0 - -/obj/effect/step_trigger/teleporter/random/Trigger(var/atom/movable/A) - var/turf/T = locate(rand(teleport_x, teleport_x_offset), rand(teleport_y, teleport_y_offset), rand(teleport_z, teleport_z_offset)) - if(T) - A.forceMove(T) diff --git a/code/game/objects/effects/temporaray.dm b/code/game/objects/effects/temporaray.dm deleted file mode 100644 index 15a2d2ed8b229..0000000000000 --- a/code/game/objects/effects/temporaray.dm +++ /dev/null @@ -1,42 +0,0 @@ -//temporary visual effects -/obj/effect/temp_visual - icon_state = "nothing" - anchored = TRUE - layer = ABOVE_HUMAN_LAYER - mouse_opacity = 0 - simulated = FALSE - var/duration = 10 //in deciseconds - -/obj/effect/temp_visual/Initialize(mapload, set_dir) - if(set_dir) - set_dir(set_dir) - . = ..() - QDEL_IN(src, duration) - -/obj/effect/temp_visual/bloodsplatter - icon = 'icons/effects/bloodspatter.dmi' - duration = 5 - layer = LYING_HUMAN_LAYER - var/splatter_type = "splatter" - -/obj/effect/temp_visual/bloodsplatter/Initialize(mapload, set_dir, _color) - if(set_dir in GLOB.cornerdirs) - icon_state = "[splatter_type][pick(1, 2, 6)]" - else - icon_state = "[splatter_type][pick(3, 4, 5)]" - . = ..() - if (_color) - color = _color - - var/target_pixel_x = 0 - var/target_pixel_y = 0 - if(set_dir & NORTH) - target_pixel_y = 16 - if(set_dir & SOUTH) - target_pixel_y = -16 - layer = ABOVE_HUMAN_LAYER - if(set_dir & EAST) - target_pixel_x = 16 - if(set_dir & WEST) - target_pixel_x = -16 - animate(src, pixel_x = target_pixel_x, pixel_y = target_pixel_y, alpha = 0, time = duration) \ No newline at end of file diff --git a/code/game/objects/effects/temporary_effect.dm b/code/game/objects/effects/temporary_effect.dm deleted file mode 100644 index 322468aee8637..0000000000000 --- a/code/game/objects/effects/temporary_effect.dm +++ /dev/null @@ -1,13 +0,0 @@ -//A temporary effect that does not DO anything except look pretty. -/obj/effect/temporary - anchored = TRUE - unacidable = TRUE - mouse_opacity = 0 - density = FALSE - layer = ABOVE_HUMAN_LAYER - -/obj/effect/temporary/Initialize(var/mapload, var/duration = 30, var/_icon = 'icons/effects/effects.dmi', var/_state) - . = ..() - icon = _icon - icon_state = _state - QDEL_IN(src, duration) \ No newline at end of file diff --git a/code/game/objects/empulse.dm b/code/game/objects/empulse.dm deleted file mode 100644 index 2cca32804b9a3..0000000000000 --- a/code/game/objects/empulse.dm +++ /dev/null @@ -1,62 +0,0 @@ -// Uncomment this define to check for possible lengthy processing of emp_act()s. -// If emp_act() takes more than defined deciseconds (1/10 seconds) an admin message and log is created. -// I do not recommend having this uncommented on main server, it probably causes a bit more lag, espicially with larger EMPs. - -// #define EMPDEBUG 10 - -/** - * Generates an EMP pulse on the turf of the provided origin point, for the given range as a radius value. Calls - * `emp_act()` on every atom within range. - * - * Parameters: - * - `origin` - The atom to originate the EMP from. Will be converted to `get_turf()` if not already a turf. - * - `heavy_range` - The radius in tiles to use `EMP_ACT_HEAVY` in the `emp_act()` call. - * - `light_range` - The radius in tiles to use `EMP_ACT_LIGHT` in the `emp_act()` call. NOTE: This is the _total_ range of the EMP, not added to `heavy_range`. This should be equal to or greater than `heavy_range` to avoid weirdness. - * - `log` - If `TRUE`, generates an admin log detailing the EMP's size and origin area. - * - * Returns `FALSE` if the emp failed to generate, `TRUE` otherwise. - **/ -/proc/empulse(atom/origin, heavy_range, light_range, log = FALSE) - if (!origin) - return FALSE - var/turf/epicenter - if (istype(origin, /turf)) - epicenter = origin - else - epicenter = get_turf(origin) - if (!istype(epicenter)) - return FALSE - - if (log) - log_and_message_admins(append_admin_tools("EMP with size ([heavy_range], [light_range]) in area [get_area(origin)]", location = epicenter)) - - if (heavy_range > 1) - new /obj/effect/overlay/self_deleting/emppulse(epicenter) - - if (heavy_range > light_range) - light_range = heavy_range - - for (var/mob/M in range(heavy_range, epicenter)) - sound_to(M, 'sound/effects/EMPulse.ogg') - - for (var/atom/T in range(light_range, epicenter)) - #ifdef EMPDEBUG - var/time = world.timeofday - #endif - var/distance = get_dist(epicenter, T) - if (distance < 0) - distance = 0 - if (distance < heavy_range) - T.emp_act(EMP_ACT_HEAVY) - else if (distance == heavy_range) - if (prob(50)) - T.emp_act(EMP_ACT_HEAVY) - else - T.emp_act(EMP_ACT_LIGHT) - else if (distance <= light_range) - T.emp_act(EMP_ACT_LIGHT) - #ifdef EMPDEBUG - if ((world.timeofday - time) >= EMPDEBUG) - log_and_message_admins("EMPDEBUG: [T.name] - [T.type] - took [world.timeofday - time]ds to process emp_act()!") - #endif - return TRUE diff --git a/code/game/objects/explosion.dm b/code/game/objects/explosion.dm deleted file mode 100644 index 5d9ec4cc53869..0000000000000 --- a/code/game/objects/explosion.dm +++ /dev/null @@ -1,91 +0,0 @@ -//TODO: Flash range does nothing currently - -/proc/explosion(turf/epicenter, devastation_range, heavy_impact_range, light_impact_range, flash_range, adminlog = 1, z_transfer = UP|DOWN, shaped, turf_breaker) - var/multi_z_scalar = 0.35 - UNLINT(src = null) //so we don't abort once src is deleted - spawn(0) - epicenter = get_turf(epicenter) - if(!epicenter) return - - // Handles recursive propagation of explosions. - if(z_transfer) - var/adj_dev = max(0, (multi_z_scalar * devastation_range) - (shaped ? 2 : 0) ) - var/adj_heavy = max(0, (multi_z_scalar * heavy_impact_range) - (shaped ? 2 : 0) ) - var/adj_light = max(0, (multi_z_scalar * light_impact_range) - (shaped ? 2 : 0) ) - var/adj_flash = max(0, (multi_z_scalar * flash_range) - (shaped ? 2 : 0) ) - - - if(adj_dev > 0 || adj_heavy > 0) - if(HasAbove(epicenter.z) && z_transfer & UP) - explosion(GetAbove(epicenter), round(adj_dev), round(adj_heavy), round(adj_light), round(adj_flash), 0, UP, shaped) - if(HasBelow(epicenter.z) && z_transfer & DOWN) - explosion(GetBelow(epicenter), round(adj_dev), round(adj_heavy), round(adj_light), round(adj_flash), 0, DOWN, shaped) - - var/max_range = max(devastation_range, heavy_impact_range, light_impact_range, flash_range) - - // Play sounds; we want sounds to be different depending on distance so we will manually do it ourselves. - // Stereo users will also hear the direction of the explosion! - // Calculate far explosion sound range. Only allow the sound effect for heavy/devastating explosions. - // 3/7/14 will calculate to 80 + 35 - var/far_dist = 0 - far_dist += heavy_impact_range * 5 - far_dist += devastation_range * 20 - var/frequency = get_rand_frequency() - for(var/mob/M in GLOB.player_list) - if(M.z == epicenter.z) - var/turf/M_turf = get_turf(M) - 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 - else if(dist <= far_dist) - var/far_volume = clamp(far_dist, 30, 50) // Volume is based on explosion size and dist - far_volume += (dist <= far_dist * 0.5 ? 50 : 0) // add 50 volume if the mob is pretty close to the explosion - M.playsound_local(epicenter, 'sound/effects/explosionfar.ogg', far_volume, 1, frequency, falloff = 5) - - if(adminlog) - log_and_message_admins("Explosion with size ([devastation_range], [heavy_impact_range], [light_impact_range]) in area [epicenter.loc.name] ([epicenter.x],[epicenter.y],[epicenter.z]) (JMP)") - var/approximate_intensity = (devastation_range * 3) + (heavy_impact_range * 2) + light_impact_range - // Large enough explosion. For performance reasons, powernets will be rebuilt manually - if(!GLOB.defer_powernet_rebuild && (approximate_intensity > 25)) - GLOB.defer_powernet_rebuild = 1 - - if(heavy_impact_range > 1) - var/datum/effect/system/explosion/E = new/datum/effect/system/explosion() - E.set_up(epicenter) - E.start() - - var/x0 = epicenter.x - var/y0 = epicenter.y - var/z0 = epicenter.z - if(config.use_recursive_explosions) - var/power = devastation_range * 2 + heavy_impact_range + light_impact_range //The ranges add up, ie light 14 includes both heavy 7 and devestation 3. So this calculation means devestation counts for 4, heavy for 2 and light for 1 power, giving us a cap of 27 power. - explosion_rec(epicenter, power, shaped) - else - for(var/turf/T in trange(max_range, epicenter)) - var/dist = sqrt((T.x - x0)**2 + (T.y - y0)**2) - - if(dist < devastation_range) dist = EX_ACT_DEVASTATING - else if(dist < heavy_impact_range) dist = EX_ACT_HEAVY - else if(dist < light_impact_range) dist = EX_ACT_LIGHT - else continue - - T.ex_act(dist) - if(!T) - T = locate(x0,y0,z0) - for(var/atom/movable/AM as anything in T.contents) //bypass type checking since only atom/movable can be contained by turfs anyway - if(AM && AM.simulated && !T.protects_atom(AM)) - AM.ex_act(dist) - CHECK_TICK - - CHECK_TICK - - sleep(8) - - return 1 - - - -/proc/secondaryexplosion(turf/epicenter, range) - for(var/turf/tile in range(range, epicenter)) - tile.ex_act(EX_ACT_HEAVY) diff --git a/code/game/objects/explosion_recursive.dm b/code/game/objects/explosion_recursive.dm deleted file mode 100644 index 006b8bcad0338..0000000000000 --- a/code/game/objects/explosion_recursive.dm +++ /dev/null @@ -1,133 +0,0 @@ - - - - -var/global/list/explosion_turfs = list() - -var/global/explosion_in_progress = 0 - - -/proc/explosion_rec(turf/epicenter, power, shaped) - var/loopbreak = 0 - while(explosion_in_progress) - if(loopbreak >= 15) return - sleep(10) - loopbreak++ - - if(power <= 0) return - epicenter = get_turf(epicenter) - if(!epicenter) return - - explosion_in_progress = 1 - explosion_turfs = list() - - explosion_turfs[epicenter] = power - - //This steap handles the gathering of turfs which will be ex_act() -ed in the next step. It also ensures each turf gets the maximum possible amount of power dealt to it. - for(var/direction in GLOB.cardinal) - var/turf/T = get_step(epicenter, direction) - var/adj_power = power - epicenter.get_explosion_resistance() - if(shaped) - if (shaped == direction) - adj_power *= 3 - else if (shaped == reverse_direction(direction)) - adj_power *= 0.10 - else - adj_power *= 0.45 - - T.explosion_spread(adj_power, direction) - - //This step applies the ex_act effects for the explosion, as planned in the previous step. - for(var/spot in explosion_turfs) - var/turf/T = spot - if(explosion_turfs[T] <= 0) continue - if(!T) continue - - //Wow severity looks confusing to calculate... Fret not, I didn't leave you with any additional instructions or help. (just kidding, see the line under the calculation) - var/severity = 4 - round(max(min( 3, ((explosion_turfs[T] - T.get_explosion_resistance()) / (max(3,(power/3)))) ) ,1), 1) //sanity effective power on tile divided by either 3 or one third the total explosion power - // One third because there are three power levels and I - // want each one to take up a third of the crater - var/x = T.x - var/y = T.y - var/z = T.z - T.ex_act(severity) - if(!T) - T = locate(x,y,z) - - var/throw_target = get_edge_target_turf(T, get_dir(epicenter,T)) - for(var/atom_movable in T.contents) - var/atom/movable/AM = atom_movable - if(AM && AM.simulated && !T.protects_atom(AM)) - AM.ex_act(severity) - if(AM && !AM.anchored) - addtimer(CALLBACK(AM, /atom/movable/.proc/throw_at, throw_target, 9/severity, 9/severity), 0) - - explosion_turfs.Cut() - explosion_in_progress = 0 - - -//Code-wise, a safe value for power is something up to ~25 or ~30.. This does quite a bit of damage to the station. -//direction is the direction that the spread took to come to this tile. So it is pointing in the main blast direction - meaning where this tile should spread most of it's force. -/turf/proc/explosion_spread(power, direction) - if(power <= 0) - return - - if(explosion_turfs[src] >= power) - return //The turf already sustained and spread a power greated than what we are dealing with. No point spreading again. - explosion_turfs[src] = power -/* - sleep(2) - var/obj/effect/debugging/M = locate() in src - if (!M) - M = new(src, power, direction) - M.maptext = "[power] vs [src.get_explosion_resistance()]" - if(power > 10) - M.color = "#cccc00" - if(power > 20) - M.color = "#ffcc00" -*/ - var/spread_power = power - src.get_explosion_resistance() //This is the amount of power that will be spread to the tile in the direction of the blast - - var/turf/T = get_step(src, direction) - if(T) - T.explosion_spread(spread_power, direction) - T = get_step(src, turn(direction,90)) - if(T) - T.explosion_spread(spread_power, turn(direction,90)) - T = get_step(src, turn(direction,-90)) - if(T) - T.explosion_spread(spread_power, turn(direction,90)) - -/turf/unsimulated/explosion_spread(power) - return //So it doesn't get to the parent proc, which simulates explosions - -/atom/var/explosion_resistance -/atom/proc/get_explosion_resistance() - if(simulated) - return explosion_resistance - -/turf/get_explosion_resistance() - . = ..() - for(var/obj/O in src) - . += O.get_explosion_resistance() - -/turf/space/explosion_resistance = 3 - -/turf/simulated/floor/get_explosion_resistance() - . = ..() - if(is_below_sound_pressure(src)) - . *= 3 - -/turf/simulated/floor/explosion_resistance = 1 - -/turf/simulated/mineral/explosion_resistance = 2 - -/turf/simulated/shuttle/wall/explosion_resistance = 10 - -/turf/simulated/wall/explosion_resistance = 10 - -/obj/machinery/door/get_explosion_resistance() - if(!density) - return 0 - else - return ..() diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm deleted file mode 100644 index 8a7b0dd2c5abf..0000000000000 --- a/code/game/objects/items.dm +++ /dev/null @@ -1,951 +0,0 @@ -/obj/item - name = "item" - icon = 'icons/obj/items.dmi' - w_class = ITEM_SIZE_NORMAL - mouse_drag_pointer = MOUSE_ACTIVE_POINTER - - var/image/blood_overlay = null //this saves our blood splatter overlay, which will be processed not to go over the edges of the sprite - var/randpixel = 6 - var/r_speed = 1.0 - var/burn_point = null - var/burning = null - var/hitsound = "swing_hit" - var/slot_flags = 0 //This is used to determine on which slots an item can fit. - var/no_attack_log = FALSE //If it's an item we don't want to log attack_logs with, set this to 1 - pass_flags = PASS_FLAG_TABLE -// causeerrorheresoifixthis - var/obj/item/master = null - var/list/origin_tech = null //Used by R&D to determine what research bonuses it grants. - var/list/attack_verb = list("hit") //Used in attackby() to say how something was attacked "[x] has been [z.attack_verb] by [y] with [z]" - var/lock_picking_level = 0 //used to determine whether something can pick a lock, and how well. - var/force = 0 - var/attack_cooldown = DEFAULT_WEAPON_COOLDOWN - var/melee_accuracy_bonus = 0 - - var/heat_protection = 0 //flags which determine which body parts are protected from heat. Use the HEAD, UPPER_TORSO, LOWER_TORSO, etc. flags. See setup.dm - var/cold_protection = 0 //flags which determine which body parts are protected from cold. Use the HEAD, UPPER_TORSO, LOWER_TORSO, etc. flags. See setup.dm - var/max_heat_protection_temperature //Set this variable to determine up to which temperature (IN KELVIN) the item protects against heat damage. Keep at null to disable protection. Only protects areas set by heat_protection flags - var/min_cold_protection_temperature //Set this variable to determine down to which temperature (IN KELVIN) the item protects against cold damage. 0 is NOT an acceptable number due to if(varname) tests!! Keep at null to disable protection. Only protects areas set by cold_protection flags - var/max_pressure_protection // Set this variable if the item protects its wearer against high pressures below an upper bound. Keep at null to disable protection. - var/min_pressure_protection // Set this variable if the item protects its wearer against low pressures above a lower bound. Keep at null to disable protection. 0 represents protection against hard vacuum. - - var/datum/action/item_action/action = null - var/action_button_name //It is also the text which gets displayed on the action button. If not set it defaults to 'Use [name]'. If it's not set, there'll be no button. - var/default_action_type = /datum/action/item_action // Specify the default type and behavior of the action button for this atom. - - //This flag is used to determine when items in someone's inventory cover others. IE helmets making it so you can't see glasses, etc. - //It should be used purely for appearance. For gameplay effects caused by items covering body parts, use body_parts_covered. - var/flags_inv = 0 - var/body_parts_covered = 0 //see setup.dm for appropriate bit flags - - var/item_flags = 0 //Miscellaneous flags pertaining to equippable objects. - var/equip_slot = 0 - - //var/heat_transfer_coefficient = 1 //0 prevents all transfers, 1 is invisible - var/gas_transfer_coefficient = 1 // for leaking gas from turf to mask and vice-versa (for masks right now, but at some point, i'd like to include space helmets) - var/permeability_coefficient = 1 // for chemicals/diseases - var/siemens_coefficient = 1 // for electrical admittance/conductance (electrocution checks and shit) - var/slowdown_general = 0 // How much clothing is slowing you down. Negative values speeds you up. This is a genera##l slowdown, no matter equipment slot. - var/slowdown_per_slot[slot_last] // How much clothing is slowing you down. This is an associative list: item slot - slowdown - var/slowdown_accessory // How much an accessory will slow you down when attached to a worn article of clothing. - var/canremove = 1 //Mostly for Ninja code at this point but basically will not allow the item to be removed if set to 0. /N - var/armor_type = /datum/extension/armor - var/list/armor - var/armor_degradation_speed //How fast armor will degrade, multiplier to blocked damage to get armor damage value. - var/list/allowed = null //suit storage stuff. - var/obj/item/device/uplink/hidden_uplink = null // All items can have an uplink hidden inside, just remember to add the triggers. - var/zoomdevicename = null //name used for message when binoculars/scope is used - var/zoom = 0 //1 if item is actively being used to zoom. For scoped guns and binoculars. - - var/base_parry_chance // Will allow weapon to parry melee attacks if non-zero - var/icon_override = null //Used to override hardcoded clothing dmis in human clothing proc. - - var/use_alt_layer = FALSE // Use the slot's alternative layer when rendering on a mob - - //** These specify item/icon overrides for _slots_ - - var/list/item_state_slots = list(slot_wear_id_str = "id") //overrides the default item_state for particular slots. - - // Used to specify the icon file to be used when the item is worn. If not set the default icon for that slot will be used. - // If icon_override or sprite_sheets are set they will take precendence over this, assuming they apply to the slot in question. - // Only slot_l_hand/slot_r_hand are implemented at the moment. Others to be implemented as needed. - var/list/item_icons - - //** These specify item/icon overrides for _species_ - - /* Species-specific sprites, concept stolen from Paradise//vg/. - ex: - sprite_sheets = list( - SPECIES_UNATHI = 'icons/lizard/are/bad' - ) - If index term exists and icon_override is not set, this sprite sheet will be used. - */ - var/list/sprite_sheets = list() - - // Species-specific sprite sheets for inventory sprites - // Works similarly to worn sprite_sheets, except the alternate sprites are used when the clothing/refit_for_species() proc is called. - var/list/sprite_sheets_obj = list() - - var/attack_ignore_harm_check = FALSE - - -/obj/item/New() - ..() - if(randpixel && (!pixel_x && !pixel_y) && isturf(loc)) //hopefully this will prevent us from messing with mapper-set pixel_x/y - pixel_x = rand(-randpixel, randpixel) - pixel_y = rand(-randpixel, randpixel) - -/obj/item/Initialize() - . = ..() - if(islist(armor)) - for(var/type in armor) - if(armor[type]) // Don't set it if it gives no armor anyway, which is many items. - set_extension(src, armor_type, armor, armor_degradation_speed) - break - -/obj/item/Destroy() - QDEL_NULL(hidden_uplink) - if(ismob(loc)) - var/mob/m = loc - m.drop_from_inventory(src) - var/obj/item/storage/storage = loc - if(istype(storage)) - // some ui cleanup needs to be done - storage.on_item_pre_deletion(src) // must be done before deletion - . = ..() - storage.on_item_post_deletion(src) // must be done after deletion - else - return ..() - - -/obj/item/proc/is_held() - //If equip_slot is zero then it has never been equipped - if (equip_slot == slot_none) - return FALSE - - if (ismob(loc)) - return equip_slot in list(slot_l_hand, slot_r_hand) - -//Checks if the item is being held by a mob, and if so, updates the held icons -/obj/item/proc/update_twohanding() - update_held_icon() - -/obj/item/proc/update_held_icon() - if(ismob(src.loc)) - var/mob/M = src.loc - if(M.l_hand == src) - M.update_inv_l_hand() - else if(M.r_hand == src) - M.update_inv_r_hand() - -/obj/item/proc/is_held_twohanded(mob/living/M) - - if(istype(loc, /obj/item/rig_module) || istype(loc, /obj/item/rig)) - return TRUE - - var/check_hand - if(M.l_hand == src && !M.r_hand) - check_hand = BP_R_HAND //item in left hand, check right hand - else if(M.r_hand == src && !M.l_hand) - check_hand = BP_L_HAND //item in right hand, check left hand - else - return FALSE - - //would check is_broken() and is_malfunctioning() here too but is_malfunctioning() - //is probabilistic so we can't do that and it would be unfair to just check one. - if(ishuman(M)) - var/mob/living/carbon/human/H = M - var/obj/item/organ/external/hand = H.organs_by_name[check_hand] - if(istype(hand) && hand.is_usable()) - return TRUE - return FALSE - -/obj/item/ex_act(severity) - ..() - switch(severity) - if(EX_ACT_DEVASTATING) - qdel(src) - if(EX_ACT_HEAVY) - if (prob(50)) - qdel(src) - if(EX_ACT_LIGHT) - if (prob(5)) - qdel(src) - -/obj/item/examine(mob/user, distance) - var/size - switch(src.w_class) - if(ITEM_SIZE_TINY) - size = "tiny" - if(ITEM_SIZE_SMALL) - size = "small" - if(ITEM_SIZE_NORMAL) - size = "normal-sized" - if(ITEM_SIZE_LARGE) - size = "large" - if(ITEM_SIZE_HUGE) - size = "bulky" - if(ITEM_SIZE_HUGE + 1 to INFINITY) - size = "huge" - var/desc_comp = "" //For "description composite" - desc_comp += "It is a [size] item." - - if(hasHUD(user, HUD_SCIENCE)) //Mob has a research scanner active. - desc_comp += "
              *--------*
              " - - if(origin_tech) - desc_comp += "Testing potentials:
              " - //var/list/techlvls = params2list(origin_tech) - for(var/T in origin_tech) - desc_comp += "Tech: Level [origin_tech[T]] [CallTechName(T)]
              " - else - desc_comp += "No tech origins detected.
              " - - if(LAZYLEN(matter)) - desc_comp += "Extractable materials:
              " - for(var/mat in matter) - desc_comp += "[SSmaterials.get_material_by_name(mat)]
              " - else - desc_comp += "No extractable materials detected.
              " - desc_comp += "*--------*" - - return ..(user, distance, "", desc_comp) - -/obj/item/attack_hand(mob/user as mob) - if (!user) return - if (anchored) - return ..() - if (ishuman(user)) - var/mob/living/carbon/human/H = user - var/obj/item/organ/external/temp = H.organs_by_name[BP_R_HAND] - if (user.hand) - temp = H.organs_by_name[BP_L_HAND] - if(MUTATION_FERAL in user.mutations) - return - if(temp && !temp.is_usable()) - to_chat(user, "You try to move your [temp.name], but cannot!") - return - if(!temp) - to_chat(user, "You try to use your hand, but realize it is no longer attached!") - return - - if (istype(loc, /obj/item/storage)) - var/obj/item/storage/S = loc - S.remove_from_storage(src) - - if(!QDELETED(throwing)) - throwing.finalize(hit=TRUE) - - if (loc == user) - if(!user.unEquip(src)) - return - else - if(isliving(loc)) - return - - if(QDELETED(src)) - return // Unequipping changes our state, so must check here. - - pickup(user) - - - // if(user.put_in_active_hand(src)) - // if (isturf(old_loc)) - // var/obj/effect/temporary/item_pickup_ghost/ghost = new(old_loc, src) - // ghost.animate_towards(user) - // if(randpixel) - // pixel_x = rand(-randpixel, randpixel) - // pixel_y = rand(-randpixel/2, randpixel/2) - // pixel_z = 0 - // else if(randpixel == 0) - // pixel_x = 0 - // pixel_y = 0 - -/obj/item/attack_ai(mob/user as mob) - if (istype(src.loc, /obj/item/robot_module)) - //If the item is part of a cyborg module, equip it - if(!isrobot(user)) - return - var/mob/living/silicon/robot/R = user - R.activate_module(src) - R.hud_used.update_robot_modules_display() - -/obj/item/attackby(obj/item/W, mob/user) - if((. = SSfabrication.try_craft_with(src, W, user))) - return - - if(istype(W, /obj/item/storage)) - var/obj/item/storage/S = W - if(S.use_to_pickup) - if(S.collection_mode) //Mode is set to collect all items - if(isturf(src.loc)) - S.gather_all(src.loc, user) - else if(S.can_be_inserted(src, user)) - S.handle_item_insertion(src) - -/obj/item/can_embed() - if (!canremove) - return FALSE - return ..() - -/obj/item/proc/talk_into(mob/M as mob, text) - return - -/obj/item/proc/moved(mob/user as mob, old_loc as turf) - return - -/obj/item/proc/swapped_from(mob/user) - return - -/obj/item/proc/swapped_to(mob/user) - return - -// apparently called whenever an item is removed from a slot, container, or anything else. -/obj/item/proc/dropped(mob/user as mob) - if(randpixel) - pixel_z = randpixel //an idea borrowed from some of the older pixel_y randomizations. Intended to make items appear to drop at a character - - update_twohanding() - equip_slot = slot_none - if(user) - if(user.l_hand) - user.l_hand.update_twohanding() - if(user.r_hand) - user.r_hand.update_twohanding() - -// called just as an item is picked up (loc is not yet changed) -/obj/item/proc/pickup(mob/user) - var/atom/old_loc = loc - if(user.put_in_active_hand(src)) - if (isturf(old_loc)) - var/obj/effect/temporary/item_pickup_ghost/ghost = new(old_loc, src) - ghost.animate_towards(user) - if(randpixel) - pixel_x = rand(-randpixel, randpixel) - pixel_y = rand(-randpixel/2, randpixel/2) - pixel_z = 0 - else if(randpixel == 0) - pixel_x = 0 - pixel_y = 0 - - return - -// called when this item is removed from a storage item, which is passed on as S. The loc variable is already set to the new destination before this is called. -/obj/item/proc/on_exit_storage(obj/item/storage/S as obj) - return - -// called when this item is added into a storage item, which is passed on as S. The loc variable is already set to the storage item. -/obj/item/proc/on_enter_storage(obj/item/storage/S as obj) - return - -// called when "found" in pockets and storage items. Returns 1 if the search should end. -/obj/item/proc/on_found(mob/finder as mob) - return - -// called after an item is placed in an equipment slot -// user is mob that equipped it -// slot uses the slot_X defines found in setup.dm -// for items that can be placed in multiple slots -// note this isn't called during the initial dressing of a player -/obj/item/proc/equipped(var/mob/user, var/slot) - hud_layerise() - if(user.client) user.client.screen |= src - if(user.pulling == src) user.stop_pulling() - - equip_slot = slot - //Update two-handing status - var/mob/M = loc - if(!istype(M)) - return - if(M.l_hand) - M.l_hand.update_twohanding() - if(M.r_hand) - M.r_hand.update_twohanding() - -/obj/item/proc/equipped_robot(var/mob/user) - return - -//Defines which slots correspond to which slot flags -var/global/list/slot_flags_enumeration = list( - "[slot_wear_mask]" = SLOT_MASK, - "[slot_back]" = SLOT_BACK, - "[slot_wear_suit]" = SLOT_OCLOTHING, - "[slot_gloves]" = SLOT_GLOVES, - "[slot_shoes]" = SLOT_FEET, - "[slot_belt]" = SLOT_BELT, - "[slot_glasses]" = SLOT_EYES, - "[slot_head]" = SLOT_HEAD, - "[slot_l_ear]" = SLOT_EARS|SLOT_TWOEARS, - "[slot_r_ear]" = SLOT_EARS|SLOT_TWOEARS, - "[slot_w_uniform]" = SLOT_ICLOTHING, - "[slot_wear_id]" = SLOT_ID, - "[slot_tie]" = SLOT_TIE, - ) - -//the mob M is attempting to equip this item into the slot passed through as 'slot'. Return 1 if it can do this and 0 if it can't. -//If you are making custom procs but would like to retain partial or complete functionality of this one, include a 'return ..()' to where you want this to happen. -//Set disable_warning to 1 if you wish it to not give you outputs. -//Should probably move the bulk of this into mob code some time, as most of it is related to the definition of slots and not item-specific -//set force to ignore blocking overwear and occupied slots -/obj/item/proc/mob_can_equip(M as mob, slot, disable_warning = 0, force = 0) - if(!slot) return 0 - if(!M) return 0 - - if(!ishuman(M)) return 0 - - var/mob/living/carbon/human/H = M - var/list/mob_equip = list() - if(H.species.hud && H.species.hud.equip_slots) - mob_equip = H.species.hud.equip_slots - - if(H.species && !(slot in mob_equip)) - return 0 - - //First check if the item can be equipped to the desired slot. - if("[slot]" in slot_flags_enumeration) - var/req_flags = slot_flags_enumeration["[slot]"] - if(!(req_flags & slot_flags)) - return 0 - - if(!force) - //Next check that the slot is free - if(H.get_equipped_item(slot)) - return 0 - - //Next check if the slot is accessible. - var/mob/_user = disable_warning? null : H - if(!H.slot_is_accessible(slot, src, _user)) - return 0 - - - if (!force && istype(src, /obj/item/clothing)) - var/obj/item/clothing/SC = src - var/bulky = SC.get_bulky_coverage() //disallow bulky things from covering one another - if (bulky) - for (var/obj/item/clothing/C in H.get_equipped_items()) - if (C.get_bulky_coverage() & bulky) - if (!disable_warning) - to_chat(H, SPAN_WARNING("\The [SC] is too bulky to wear with \the [C].")) - return FALSE - - //Lastly, check special rules for the desired slot. - switch(slot) - if(slot_l_ear, slot_r_ear) - var/slot_other_ear = (slot == slot_l_ear)? slot_r_ear : slot_l_ear - if( (w_class > ITEM_SIZE_TINY) && !(slot_flags & SLOT_EARS) ) - return 0 - if( (slot_flags & SLOT_TWOEARS) && H.get_equipped_item(slot_other_ear) ) - return 0 - if(slot_belt, slot_wear_id) - if(slot == slot_belt && (item_flags & ITEM_FLAG_IS_BELT)) - return 1 - else if(!H.w_uniform && (slot_w_uniform in mob_equip)) - if(!disable_warning) - to_chat(H, "You need a jumpsuit before you can attach this [name].") - return 0 - if(slot_l_store, slot_r_store) - if(!H.w_uniform && (slot_w_uniform in mob_equip)) - if(!disable_warning) - to_chat(H, "You need a jumpsuit before you can attach this [name].") - return 0 - if(slot_flags & SLOT_DENYPOCKET) - return 0 - if( w_class > ITEM_SIZE_SMALL && !(slot_flags & SLOT_POCKET) ) - return 0 - if(get_storage_cost() == ITEM_SIZE_NO_CONTAINER) - return 0 //pockets act like storage and should respect ITEM_SIZE_NO_CONTAINER. Suit storage might be fine as is - if(slot_s_store) - if(!H.wear_suit && (slot_wear_suit in mob_equip)) - if(!disable_warning) - to_chat(H, "You need a suit before you can attach this [name].") - return 0 - if(!H.wear_suit.allowed) - if(!disable_warning) - to_chat(usr, "You somehow have a suit with no defined allowed items for suit storage, stop that.") - return 0 - if( !(istype(src, /obj/item/modular_computer/pda) || istype(src, /obj/item/pen) || is_type_in_list(src, H.wear_suit.allowed)) ) - return 0 - if(slot_handcuffed) - if(!istype(src, /obj/item/handcuffs)) - return 0 - if(slot_in_backpack) //used entirely for equipping spawned mobs or at round start - var/allow = 0 - if(H.back && istype(H.back, /obj/item/storage/backpack)) - var/obj/item/storage/backpack/B = H.back - if(B.can_be_inserted(src,M,1)) - allow = 1 - if(!allow) - return 0 - if(slot_tie) - if((!H.w_uniform && (slot_w_uniform in mob_equip)) && (!H.wear_suit && (slot_wear_suit in mob_equip))) - if(!disable_warning) - to_chat(H, "You need something you can attach \the [src] to.") - return 0 - if(H.w_uniform && (slot_w_uniform in mob_equip)) - var/obj/item/clothing/under/uniform = H.w_uniform - if(uniform && !uniform.can_attach_accessory(src, disable_warning ? null : H)) - return 0 - else return 1 - if(H.wear_suit && (slot_wear_suit in mob_equip)) - var/obj/item/clothing/suit/suit = H.wear_suit - if(suit && !suit.can_attach_accessory(src, disable_warning ? null : H)) - return 0 - - return 1 - -/obj/item/proc/mob_can_unequip(mob/M, slot, disable_warning = 0) - if(!slot) return 0 - if(!M) return 0 - - if(!canremove) - return 0 - if(!M.slot_is_accessible(slot, src, disable_warning? null : M)) - return 0 - return 1 - -/obj/item/proc/can_be_dropped_by_client(mob/M) - return M.canUnEquip(src) - -/obj/item/verb/verb_pickup() - set src in oview(1) - set category = "Object" - set name = "Pick up" - - if(!(usr)) //BS12 EDIT - return - if(!CanPhysicallyInteract(usr)) - return - if((!istype(usr, /mob/living/carbon)) || (istype(usr, /mob/living/carbon/brain)))//Is humanoid, and is not a brain - to_chat(usr, "You can't pick things up!") - return - if( usr.stat || usr.restrained() )//Is not asleep/dead and is not restrained - to_chat(usr, "You can't pick things up!") - return - if(src.anchored) //Object isn't anchored - to_chat(usr, "You can't pick that up!") - return - if(!usr.hand && usr.r_hand) //Right hand is not full - to_chat(usr, "Your right hand is full.") - return - if(usr.hand && usr.l_hand) //Left hand is not full - to_chat(usr, "Your left hand is full.") - return - if(!istype(src.loc, /turf)) //Object is on a turf - to_chat(usr, "You can't pick that up!") - return - //All checks are done, time to pick it up! - usr.UnarmedAttack(src) - return - - -//This proc is executed when someone clicks the on-screen UI button. To make the UI button show, set the 'icon_action_button' to the icon_state of the image of the button in screen1_action.dmi -//The default action is attack_self(). -//Checks before we get to here are: mob is alive, mob is not restrained, paralyzed, asleep, resting, laying, item is on the mob. -/obj/item/proc/ui_action_click() - attack_self(usr) - -//RETURN VALUES -//handle_shield should return a positive value to indicate that the attack is blocked and should be prevented. -//If a negative value is returned, it should be treated as a special return value for bullet_act() and handled appropriately. -//For non-projectile attacks this usually means the attack is blocked. -//Otherwise should return 0 to indicate that the attack is not affected in any way. -/obj/item/proc/handle_shield(mob/user, var/damage, atom/damage_source = null, mob/attacker = null, var/def_zone = null, var/attack_text = "the attack") - var/parry_chance = get_parry_chance(user) - if(parry_chance) - if(default_parry_check(user, attacker, damage_source) && prob(parry_chance)) - user.visible_message("\The [user] parries [attack_text] with \the [src]!") - admin_attack_log(attacker, user, "Attempted to attack with \a [damage_source] but was parried", "Was targeted with \a [damage_source] but parried the attack", "attmpted to use \a [damage_source] to attack but was parried by") - playsound(user.loc, 'sound/weapons/punchmiss.ogg', 50, 1) - on_parry(damage_source) - return 1 - return 0 - -/obj/item/proc/on_parry(damage_source) - return - -/obj/item/proc/get_parry_chance(mob/user) - . = base_parry_chance - if (user.a_intent == I_HELP) - . = 0 - if (.) - . += clamp((user.get_skill_value(SKILL_COMBAT) * 10) - 20, 0, 75) - -/obj/item/proc/on_disarm_attempt(mob/target, mob/living/attacker) - if(force < 1) - return 0 - if(!istype(attacker)) - return 0 - attacker.apply_damage(force, damtype, attacker.hand ? BP_L_HAND : BP_R_HAND, used_weapon = src) - attacker.visible_message("[attacker] hurts \his hand on [src]!") - admin_attack_log(attacker, target, "Attempted to disarm but was blocked", "Was targeted with a disarm but blocked the attack", "attmpted to disarm but was blocked by") - playsound(target, 'sound/weapons/thudswoosh.ogg', 50, 1, -1) - playsound(target, hitsound, 50, 1, -1) - return 1 - -/obj/item/proc/get_loc_turf() - var/atom/L = loc - while(L && !isturf(L)) - L = L.loc - return loc - -/obj/item/proc/eyestab(mob/living/carbon/M as mob, mob/living/carbon/user as mob) - if (user.a_intent == I_HELP) - return FALSE - - var/mob/living/carbon/human/H = M - if(istype(H)) - for(var/obj/item/protection in list(H.head, H.wear_mask, H.glasses)) - if(protection && (protection.body_parts_covered & EYES)) - // you can't stab someone in the eyes wearing a mask! - to_chat(user, "You're going to need to remove the eye covering first.") - return - - if(!M.has_eyes()) - to_chat(user, "You cannot locate any eyes on [M]!") - return - - admin_attack_log(user, M, "Attacked using \a [src]", "Was attacked with \a [src]", "used \a [src] to attack") - - user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN) - user.do_attack_animation(M) - - src.add_fingerprint(user) - - if(istype(H)) - - var/obj/item/organ/internal/eyes/eyes = H.internal_organs_by_name[BP_EYES] - - if(H != user) - for(var/mob/O in (viewers(M) - user - M)) - O.show_message("[M] has been stabbed in the eye with [src] by [user].", 1) - to_chat(M, "[user] stabs you in the eye with [src]!") - to_chat(user, "You stab [M] in the eye with [src]!") - else - user.visible_message( \ - "[user] has stabbed themself with [src]!", \ - "You stab yourself in the eyes with [src]!" \ - ) - - eyes.damage += rand(3,4) - if(eyes.damage >= eyes.min_bruised_damage) - if(M.stat != 2) - if(!BP_IS_ROBOTIC(eyes)) //robot eyes bleeding might be a bit silly - to_chat(M, "Your eyes start to bleed profusely!") - if(prob(50)) - if(M.stat != 2) - to_chat(M, "You drop what you're holding and clutch at your eyes!") - M.unequip_item() - M.eye_blurry += 10 - M.Paralyse(1) - M.Weaken(4) - if (eyes.damage >= eyes.min_broken_damage) - if(M.stat != 2) - to_chat(M, "You go blind!") - - var/obj/item/organ/external/affecting = H.get_organ(eyes.parent_organ) - affecting.take_external_damage(7) - else - M.take_organ_damage(7, 0) - M.eye_blurry += rand(3,4) - return - -/obj/item/clean_blood() - . = ..() - if(blood_overlay) - overlays.Remove(blood_overlay) - if(istype(src, /obj/item/clothing/gloves)) - var/obj/item/clothing/gloves/G = src - G.transfer_blood = 0 - trace_DNA = null - -/obj/item/reveal_blood() - if(was_bloodied && !fluorescent) - fluorescent = 1 - blood_color = COLOR_LUMINOL - blood_overlay.color = COLOR_LUMINOL - update_icon() - -/obj/item/add_blood(mob/living/carbon/human/M as mob) - if (!..()) - return 0 - - if(istype(src, /obj/item/melee/energy)) - return - - //if we haven't made our blood_overlay already - if( !blood_overlay ) - generate_blood_overlay() - - //apply the blood-splatter overlay if it isn't already in there - if(!blood_DNA.len) - blood_overlay.color = blood_color - overlays += blood_overlay - - //if this blood isn't already in the list, add it - if(istype(M)) - if(blood_DNA[M.dna.unique_enzymes]) - return 0 //already bloodied with this blood. Cannot add more. - blood_DNA[M.dna.unique_enzymes] = M.dna.b_type - return 1 //we applied blood to the item - -GLOBAL_LIST_EMPTY(blood_overlay_cache) - -/obj/item/proc/generate_blood_overlay(force = FALSE) - if(blood_overlay && !force) - return - if(GLOB.blood_overlay_cache["[icon]" + icon_state]) - blood_overlay = GLOB.blood_overlay_cache["[icon]" + icon_state] - return - var/icon/I = new /icon(icon, icon_state) - I.Blend(new /icon('icons/effects/blood.dmi', rgb(255,255,255)),ICON_ADD) //fills the icon_state with white (except where it's transparent) - I.Blend(new /icon('icons/effects/blood.dmi', "itemblood"),ICON_MULTIPLY) //adds blood and the remaining white areas become transparant - blood_overlay = image(I) - blood_overlay.appearance_flags |= NO_CLIENT_COLOR - GLOB.blood_overlay_cache["[icon]" + icon_state] = blood_overlay - -/obj/item/proc/showoff(mob/user) - for (var/mob/M in view(user)) - M.show_message("[user] holds up [src]. Take a closer look.",1) - -/mob/living/carbon/verb/showoff() - set name = "Show Held Item" - set category = "Object" - - var/obj/item/I = get_active_hand() - if(I && I.simulated) - I.showoff(src) - -/* -For zooming with scope or binoculars. This is called from -modules/mob/mob_movement.dm if you move you will be zoomed out -modules/mob/living/carbon/human/life.dm if you die, you will be zoomed out. -*/ -//Looking through a scope or binoculars should /not/ improve your periphereal vision. Still, increase viewsize a tiny bit so that sniping isn't as restricted to NSEW -/obj/item/proc/zoom(mob/user, var/tileoffset = 14,var/viewsize = 9) //tileoffset is client view offset in the direction the user is facing. viewsize is how far out this thing zooms. 7 is normal view - if(!user.client) - return - if(zoom) - return - - if(!user.loc?.MayZoom()) - return - - var/devicename = zoomdevicename || name - var/is_distracted = FALSE - var/mob/living/carbon/human/H = user - - if(user.incapacitated(INCAPACITATION_DISABLED)) - to_chat(user, "You are unable to focus through the [devicename].") - return - else if(!zoom && istype(H) && H.equipment_tint_total >= TINT_MODERATE) - to_chat(user, "Your eyewear gets in the way of looking through the [devicename].") - return - if (H) // Humans can zoom through items they wear on their eyes - is_distracted = !zoom && H.get_active_hand() != src && H.get_equipped_item(slot_glasses) != src - else - is_distracted = !zoom && user.get_active_hand() != src - if(is_distracted) - to_chat(user, SPAN_WARNING("You are too distracted to look through the [devicename]. Perhaps if it was in your active hand this might work better.")) - return - - var/viewoffset = WORLD_ICON_SIZE * tileoffset - switch(user.dir) - if (NORTH) - user.client.pixel_x = 0 - user.client.pixel_y = viewoffset - if (SOUTH) - user.client.pixel_x = 0 - user.client.pixel_y = -viewoffset - if (EAST) - user.client.pixel_x = viewoffset - user.client.pixel_y = 0 - if (WEST) - user.client.pixel_x = -viewoffset - user.client.pixel_y = 0 - - if(user.hud_used.hud_shown) - user.toggle_zoom_hud() // If the user has already limited their HUD this avoids them having a HUD when they zoom in - if(istype(H)) - H.handle_vision() - - user.client.view = viewsize - zoom = 1 - - GLOB.destroyed_event.register(src, src, /obj/item/proc/unzoom) - GLOB.moved_event.register(user, src, /obj/item/proc/unzoom) - GLOB.dir_set_event.register(user, src, /obj/item/proc/unzoom) - GLOB.item_unequipped_event.register(src, user, /mob/living/proc/unzoom) - - GLOB.stat_set_event.register(user, src, /obj/item/proc/unzoom) - - user.visible_message("\The [user] peers through [zoomdevicename ? "the [zoomdevicename] of [src]" : "[src]"].") - -/mob/living/proc/unzoom(var/obj/item/I) - if(I) - I.unzoom(src) - -/obj/item/proc/unzoom(var/mob/user) - if(!zoom) - return - zoom = 0 - - GLOB.destroyed_event.unregister(src, src, /obj/item/proc/unzoom) - GLOB.moved_event.unregister(user, src, /obj/item/proc/unzoom) - GLOB.dir_set_event.unregister(user, src, /obj/item/proc/unzoom) - GLOB.item_unequipped_event.unregister(src, user, /mob/living/proc/unzoom) - - user = user == src ? loc : (user || loc) - if(!istype(user)) - crash_with("[log_info_line(src)]: Zoom user lost]") - return - - GLOB.stat_set_event.unregister(user, src, /obj/item/proc/unzoom) - - if(!user.client) - return - - user.client.view = world.view - if(!user.hud_used.hud_shown) - user.toggle_zoom_hud() - - user.client.pixel_x = 0 - user.client.pixel_y = 0 - - var/mob/living/carbon/human/H = user - if(istype(H)) - H.handle_vision() - user.visible_message("[zoomdevicename ? "\The [user] looks up from [src]" : "\The [user] lowers [src]"].") - -/obj/item/proc/pwr_drain() - return 0 // Process Kill - -/obj/item/proc/use_spritesheet(var/bodytype, var/slot, var/icon_state) - if(!sprite_sheets || !sprite_sheets[bodytype]) - return 0 - if(slot == slot_r_hand_str || slot == slot_l_hand_str) - return 0 - - if(icon_state in icon_states(sprite_sheets[bodytype])) - return 1 - - return (slot != slot_wear_suit_str && slot != slot_head_str) - -/obj/item/proc/get_icon_state(mob/user_mob, slot) - var/mob_state - if(item_state_slots && item_state_slots[slot]) - mob_state = item_state_slots[slot] - else if (item_state) - mob_state = item_state - else - mob_state = icon_state - return mob_state - - -/obj/item/proc/get_mob_overlay(mob/user_mob, slot) - var/bodytype = "Default" - var/mob/living/carbon/human/user_human - if(ishuman(user_mob)) - user_human = user_mob - bodytype = user_human.species.get_bodytype(user_human) - - var/mob_state = get_icon_state(user_mob, slot) - - var/mob_icon - var/spritesheet = FALSE - if(icon_override) - mob_icon = icon_override - if(slot == slot_l_hand_str || slot == slot_l_ear_str) - mob_state = "[mob_state]_l" - if(slot == slot_r_hand_str || slot == slot_r_ear_str) - mob_state = "[mob_state]_r" - else if(use_spritesheet(bodytype, slot, mob_state)) - if(slot == slot_l_ear) - mob_state = "[mob_state]_l" - if(slot == slot_r_ear) - mob_state = "[mob_state]_r" - spritesheet = TRUE - mob_icon = sprite_sheets[bodytype] - else if(item_icons && item_icons[slot]) - mob_icon = item_icons[slot] - else - mob_icon = GLOB.default_onmob_icons[slot] - - if(user_human) - return user_human.species.get_offset_overlay_image(spritesheet, mob_icon, mob_state, color, slot) - return overlay_image(mob_icon, mob_state, color, RESET_COLOR) - -/obj/item/proc/get_examine_line() - if(blood_color) - . = SPAN_WARNING("[icon2html(src, viewers(get_turf(src)))] [gender==PLURAL?"some":"a"] stained [src]") - else - . = "[icon2html(src, viewers(get_turf(src)))] \a [src]" - var/ID = GetIdCard() - if(ID) - . += " \[Look at ID\]" - -/obj/item/proc/on_active_hand(mob/M) - -/obj/item/is_burnable() - return simulated - -/obj/item/lava_act() - . = (!throwing) ? ..() : FALSE - -/obj/item/proc/has_embedded() - return - -/obj/item/proc/get_pressure_weakness(pressure,zone) - . = 1 - if(pressure > ONE_ATMOSPHERE) - if(max_pressure_protection != null) - if(max_pressure_protection < pressure) - return min(1, round((pressure - max_pressure_protection) / max_pressure_protection, 0.01)) - else - return 0 - if(pressure < ONE_ATMOSPHERE) - if(min_pressure_protection != null) - if(min_pressure_protection > pressure) - return min(1, round((min_pressure_protection - pressure) / min_pressure_protection, 0.01)) - else - return 0 - -/obj/item/do_simple_ranged_interaction(var/mob/user) - if(user) - attack_self(user) - return TRUE - -/obj/item/proc/inherit_custom_item_data(var/datum/custom_item/citem) - . = src - if(citem.item_name) - SetName(citem.item_name) - if(citem.item_desc) - desc = citem.item_desc - if(citem.item_icon_state) - item_state_slots = null - item_icons = null - icon = CUSTOM_ITEM_OBJ - set_icon_state(citem.item_icon_state) - item_state = null - icon_override = CUSTOM_ITEM_MOB - -/obj/item/proc/attack_message_name() - return "\a [src]" - -/obj/item/proc/refresh_upgrades() - -/// Optional delay for /mob/living/carbon/human/equip_to_slot_if_possible to do_after before succeeding -/obj/item/var/equip_delay - - -/// Flags to use for do_after when equip_delay is set -/obj/item/var/equip_delay_flags = DO_DEFAULT | DO_USER_UNIQUE_ACT | DO_PUBLIC_PROGRESS - - -/// Virtual for behavior to do before do_after if equip_delay is set -/obj/item/proc/equip_delay_before(mob/user, slot, equip_flags) - return - - -/// Virtual for behavior to do after successful do_after if equip_delay is set -/obj/item/proc/equip_delay_after(mob/user, slot, equip_flags) - return diff --git a/code/game/objects/items/_custkit.dm b/code/game/objects/items/_custkit.dm deleted file mode 100644 index 14dc181b7db1a..0000000000000 --- a/code/game/objects/items/_custkit.dm +++ /dev/null @@ -1,83 +0,0 @@ -/obj/item/custkit - name = "customization kit" - desc = "This is OOC object, you should not see it. Ударьте этот подарок предметом, который нужно изменить." - icon = 'icons/obj/items.dmi' - icon_state = "gift2" - w_class = ITEM_SIZE_SMALL - var/can_unkit = 0 // is we can get all back 1 - var/_is_unkit = 0 - var/unkit_icon - var/unkit_icon_state - var/input - var/output - var/delay_time = 0 - var/delay = 30 SECONDS - var/list/sides - var/list/revsides - trade_blacklisted = TRUE - -/obj/item/custkit/New() - ..() - unkit_icon = unkit_icon ? unkit_icon : icon - unkit_icon_state = unkit_icon_state ? unkit_icon_state : icon_state - sides = list(input, output) - revsides = list(output, input) - -/obj/item/custkit/proc/trans() - switch(_is_unkit) - if (TRUE) - name = initial(name) - icon = initial(icon) - icon_state = initial(icon_state) - if (FALSE) - name = "customization unkit" - icon = unkit_icon - icon_state = unkit_icon_state - - _is_unkit = !_is_unkit - -/obj/item/custkit/attackby(obj/item/I, mob/user, params) - var/delta = TimeOfGame - delay_time - if(delta <= delay) - to_chat(user, SPAN_WARNING("You must wait [seconds_to_readable(round((delay - delta)/10, 1))] until can use it again!")) - return - - var/mod = (can_unkit&&_is_unkit)+1 - if(istype(I, sides[mod])) - qdel(I) - var/nw = revsides[mod] - user.put_in_hands(new nw) - if(!can_unkit) - return qdel(src) - trans() - delay_time = TimeOfGame - -/obj/item/custkit/sprite //changes sprite, doesn't mades new obj - name = "sprite customization kit" - var/sprite - -/obj/item/custkit/sprite/inherit_custom_item_data(datum/custom_item/citem) - name = citem.item_name - desc = citem.item_desc - input = text2path(citem.additional_data["itemtype"]) - can_unkit = citem.additional_data["can_unkit"] ? TRUE : FALSE - sprite = citem.item_icon_state - -/obj/item/custkit/sprite/attackby(obj/item/I, mob/user, params) - var/delta = TimeOfGame - delay_time - if(delta <= delay) - to_chat(user, SPAN_WARNING("You must wait [seconds_to_readable(round((delay - delta)/10, 1))] until can use it again!")) - return - - if(istype(I, input)) - switch(_is_unkit) - if (TRUE) - I.icon = initial(I.icon) - I.icon_state = initial(I.icon_state) - if (FALSE) - I.icon = CUSTOM_ITEM_OBJ //we can add a new var in future for a better icons managment - I.icon_state = sprite - _is_unkit = !_is_unkit - delay_time = TimeOfGame - if(!can_unkit) - qdel(src) diff --git a/code/game/objects/items/apc_frame.dm b/code/game/objects/items/apc_frame.dm deleted file mode 100644 index 89b8c534b4a32..0000000000000 --- a/code/game/objects/items/apc_frame.dm +++ /dev/null @@ -1,43 +0,0 @@ -// APC HULL - -/obj/item/frame/apc - name = "\improper APC frame" - desc = "Used for repairing or building APCs." - icon = 'icons/obj/apc_repair.dmi' - icon_state = "apc_frame" - obj_flags = OBJ_FLAG_CONDUCTIBLE - -/obj/item/frame/apc/attackby(obj/item/W as obj, mob/user as mob) - ..() - if(isWrench(W)) - new /obj/item/stack/material/steel( get_turf(src.loc), 2 ) - qdel(src) - -/obj/item/frame/apc/try_build(turf/on_wall) - if (get_dist(on_wall,usr)>1) - return - var/ndir = get_dir(usr,on_wall) - if (!(ndir in GLOB.cardinal)) - return - var/turf/loc = get_turf(usr) - var/area/A = loc.loc - if (!istype(loc, /turf/simulated/floor)) - to_chat(usr, "APC cannot be placed on this spot.") - return - if (A.requires_power == 0 || istype(A, /area/space)) - to_chat(usr, "APC cannot be placed in this area.") - return - if (A.get_apc()) - to_chat(usr, "This area already has an APC.") - return //only one APC per area - for(var/obj/machinery/power/terminal/T in loc) - if (T.master) - to_chat(usr, "There is another network terminal here.") - return - else - var/obj/item/stack/cable_coil/C = new /obj/item/stack/cable_coil(loc) - C.amount = 10 - to_chat(usr, "You cut the cables and disassemble the unused power terminal.") - qdel(T) - new /obj/machinery/power/apc(loc, ndir, TRUE, 1) - qdel(src) diff --git a/code/game/objects/items/blueprints.dm b/code/game/objects/items/blueprints.dm deleted file mode 100644 index 20b625cfd13fa..0000000000000 --- a/code/game/objects/items/blueprints.dm +++ /dev/null @@ -1,242 +0,0 @@ -/obj/item/blueprints - name = "blueprints" - desc = "Blueprints..." - icon = 'icons/obj/items.dmi' - icon_state = "blueprints" - attack_verb = list("attacked", "bapped", "hit") - var/const/AREA_ERRNONE = 0 - var/const/AREA_STATION = 1 - var/const/AREA_SPACE = 2 - var/const/AREA_SPECIAL = 3 - - var/const/BORDER_ERROR = 0 - var/const/BORDER_NONE = 1 - var/const/BORDER_BETWEEN = 2 - var/const/BORDER_2NDTILE = 3 - var/const/BORDER_SPACE = 4 - - var/const/ROOM_ERR_LOLWAT = 0 - var/const/ROOM_ERR_SPACE = -1 - var/const/ROOM_ERR_TOOLARGE = -2 - -/obj/item/blueprints/Initialize() - . = ..() - desc = "Blueprints of \the [station_name()]. There is a \"Classified\" stamp and several coffee stains on it." - -/obj/item/blueprints/attack_self(mob/M as mob) - if (!istype(M,/mob/living/carbon/human)) - to_chat(M, "This stack of blue paper means nothing to you.")//monkeys cannot into projecting - - return - interact() - -/obj/item/blueprints/DefaultTopicState() - return GLOB.physical_state - -/obj/item/blueprints/OnTopic(user, href_list) - switch(href_list["action"]) - if ("create_area") - if (get_area_type()!=AREA_SPACE) - interact() - return - create_area() - if ("edit_area") - if (get_area_type()!=AREA_STATION) - interact() - return - edit_area() - if ("delete_area") - //skip the sanity checking, delete_area() does it anyway - delete_area() - -/obj/item/blueprints/proc/get_header() - return "

              [station_name()] blueprints

              Property of [GLOB.using_map.company_name]. For heads of staff only. Store in high-secure storage.
              " - -/obj/item/blueprints/interact() - var/area/A = get_area(src) - var/list/dat = list(get_header()) - - switch (get_area_type(A)) - if (AREA_SPACE) - dat += "According \the [src], you are now outside the facility." - dat += "Mark this place as new area." - if (AREA_STATION) - dat += "According \the [src], you are now in \"[A.name]\"." - dat += "You may move an amendment to the drawing." - if (A.apc) - dat += "You can't erase this area, because it has an APC.

              " - else - dat += "You erase a part of it.

              " - else - dat += "This place isn't noted on \the [src]." - var/datum/browser/popup = new(usr, "blueprints", name, 290, 300) - popup.set_content(jointext(dat, "
              ")) - popup.open() - -/obj/item/blueprints/proc/get_area_type(var/area/A = get_area(src)) - if(istype(A, /area/space)) - return AREA_SPACE - - if(A.z in GLOB.using_map.station_levels) - return AREA_STATION - - return AREA_SPECIAL - -/obj/item/blueprints/proc/create_area() -// log_debug("create_area") - - var/res = detect_room(get_turf(usr)) - if(!istype(res,/list)) - switch(res) - if(ROOM_ERR_SPACE) - to_chat(usr, "The new area must be completely airtight!") - return - if(ROOM_ERR_TOOLARGE) - to_chat(usr, "The new area too large!") - return - else - to_chat(usr, "Error! Please notify administration!") - return - var/list/turf/turfs = res - var/str = sanitizeSafe(input("New area name:","Blueprint Editing", ""), MAX_NAME_LEN) - if(!str || !length(str)) //cancel - return - if(length(str) > 50) - to_chat(usr, "Name too long.") - return - var/area/A = new - A.SetName(str) - A.power_equip = 0 - A.power_light = 0 - A.power_environ = 0 - A.always_unpowered = 0 - for(var/T in turfs) - ChangeArea(T, A) - A.always_unpowered = 0 - interact() - -/obj/item/blueprints/proc/edit_area() - var/area/A = get_area(src) - - var/prevname = A.name - var/str = sanitizeSafe(input("New area name:","Blueprint Editing", prevname), MAX_NAME_LEN) - if(!str || !length(str) || str==prevname) //cancel - return - if(length(str) > 50) - to_chat(usr, "Text too long.") - return - set_area_machinery_title(A,str,prevname) - A.SetName(str) - to_chat(usr, "You set the area '[prevname]' title to '[str]'.") - interact() - -/obj/item/blueprints/proc/delete_area() - var/area/A = get_area(src) - if (get_area_type(A)!=AREA_STATION || A.apc) //let's just check this one last time, just in case - interact() - return - to_chat(usr, "You scrub [A.name] off the blueprint.") - log_and_message_admins("deleted area [A.name] via station blueprints.") - qdel(A) - interact() - -/obj/item/blueprints/proc/set_area_machinery_title(var/area/A,var/title,var/oldtitle) - if (!oldtitle) // or replacetext_char goes to infinite loop - return - - for(var/obj/machinery/alarm/M in A) - M.SetName(replacetext_char(M.name,oldtitle,title)) - for(var/obj/machinery/power/apc/M in A) - M.SetName(replacetext_char(M.name,oldtitle,title)) - for(var/obj/machinery/atmospherics/unary/vent_scrubber/M in A) - M.SetName(replacetext_char(M.name,oldtitle,title)) - for(var/obj/machinery/atmospherics/unary/vent_pump/M in A) - M.SetName(replacetext_char(M.name,oldtitle,title)) - for(var/obj/machinery/door/M in A) - M.SetName(replacetext_char(M.name,oldtitle,title)) - //TODO: much much more. Unnamed airlocks, cameras, etc. - -/obj/item/blueprints/proc/check_tile_is_border(var/turf/T2,var/dir) - if (istype(T2, /turf/space)) - return BORDER_SPACE //omg hull breach we all going to die here - if (istype(T2, /turf/simulated/shuttle)) - return BORDER_SPACE - if (get_area_type(T2.loc)!=AREA_SPACE) - return BORDER_BETWEEN - if (istype(T2, /turf/simulated/wall)) - return BORDER_2NDTILE - if (!istype(T2, /turf/simulated)) - return BORDER_BETWEEN - - for (var/obj/structure/window/W in T2) - if(turn(dir,180) == W.dir) - return BORDER_BETWEEN - if (W.dir in list(NORTHEAST,SOUTHEAST,NORTHWEST,SOUTHWEST)) - return BORDER_2NDTILE - for(var/obj/machinery/door/window/D in T2) - if(turn(dir,180) == D.dir) - return BORDER_BETWEEN - if (locate(/obj/machinery/door) in T2) - return BORDER_2NDTILE - - return BORDER_NONE - -/obj/item/blueprints/proc/detect_room(var/turf/first) - var/list/turf/found = new - var/list/turf/pending = list(first) - while(pending.len) - if (found.len+pending.len > 300) - return ROOM_ERR_TOOLARGE - var/turf/T = pending[1] //why byond havent list::pop()? - pending -= T - 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))) - skip = 1; break - if (skip) continue - for(var/obj/machinery/door/window/D in T) - if(dir == D.dir) - skip = 1; break - if (skip) continue - - var/turf/NT = get_step(T,dir) - if (!isturf(NT) || (NT in found) || (NT in pending)) - continue - - switch(check_tile_is_border(NT,dir)) - if(BORDER_NONE) - pending+=NT - if(BORDER_BETWEEN) - //do nothing, may be later i'll add 'rejected' list as optimization - if(BORDER_2NDTILE) - found+=NT //tile included to new area, but we dont seek more - if(BORDER_SPACE) - return ROOM_ERR_SPACE - found+=T - return found - -//For use on exoplanets -/obj/item/blueprints/outpost - name = "outpost blueprints" - icon_state = "blueprints2" - -/obj/item/blueprints/outpost/Initialize() - . = ..() - desc = "Blueprints for the daring souls wanting to establish a planetary outpost. Has some sketchy looking stains and what appears to be bite holes." - -/obj/item/blueprints/outpost/get_header() - return "

              Exoplanetary outpost blueprints

              Property of [GLOB.using_map.company_name].
              " - -/obj/item/blueprints/outpost/check_tile_is_border(var/turf/T2,var/dir) - if (istype(T2, /turf/simulated/floor/exoplanet)) - return BORDER_SPACE - . = ..() - -/obj/item/blueprints/outpost/get_area_type(var/area/A = get_area(src)) - if(istype(A, /area/exoplanet)) - return AREA_SPACE - var/obj/effect/overmap/visitable/sector/exoplanet/E = map_sectors["[z]"] - if(istype(E)) - return AREA_STATION - return AREA_SPECIAL diff --git a/code/game/objects/items/bodybag.dm b/code/game/objects/items/bodybag.dm deleted file mode 100644 index 4ca376a778c0a..0000000000000 --- a/code/game/objects/items/bodybag.dm +++ /dev/null @@ -1,107 +0,0 @@ -//Also contains /obj/structure/closet/body_bag because I doubt anyone would think to look for bodybags in /object/structures - -/obj/item/bodybag - name = "body bag" - desc = "A folded bag designed for the storage and transportation of cadavers." - icon = 'icons/obj/closets/bodybag.dmi' - icon_state = "bodybag_folded" - w_class = ITEM_SIZE_SMALL -/obj/item/bodybag/attack_self(mob/user) - var/obj/structure/closet/body_bag/R = new /obj/structure/closet/body_bag(user.loc) - R.add_fingerprint(user) - qdel(src) - - -/obj/item/storage/box/bodybags - name = "body bags" - desc = "This box contains body bags." - icon_state = "bodybags" - startswith = list(/obj/item/bodybag = 7) - - -/obj/structure/closet/body_bag - name = "body bag" - desc = "A plastic bag designed for the storage and transportation of cadavers." - icon = 'icons/obj/closets/bodybag.dmi' - closet_appearance = null - open_sound = 'sound/items/zip.ogg' - close_sound = 'sound/items/zip.ogg' - var/item_path = /obj/item/bodybag - density = FALSE - storage_capacity = (MOB_MEDIUM * 2) - 1 - var/contains_body = 0 - var/has_label = FALSE - -/obj/structure/closet/body_bag/attackby(var/obj/item/W, mob/user as mob) - if (istype(W, /obj/item/pen)) - var/t = input(user, "What would you like the label to be?", text("[]", src.name), null) as text - if (user.get_active_hand() != W) - return - if (!in_range(src, user) && src.loc != user) - return - t = sanitizeSafe(t, MAX_NAME_LEN) - if (t) - src.SetName("body bag - ") - src.name += t - has_label = TRUE - else - src.SetName("body bag") - src.update_icon() - return - else if(isWirecutter(W)) - src.SetName("body bag") - has_label = FALSE - to_chat(user, "You cut the tag off \the [src].") - src.update_icon() - return - -/obj/structure/closet/body_bag/on_update_icon() - if(opened) - icon_state = "open" - else - icon_state = "closed_unlocked" - - src.overlays.Cut() - if(has_label) - src.overlays += image(src.icon, "bodybag_label") - -/obj/structure/closet/body_bag/store_mobs(var/stored_units) - contains_body = ..() - return contains_body - -/obj/structure/closet/body_bag/close() - if(..()) - set_density(0) - return 1 - return 0 - -/obj/structure/closet/body_bag/proc/fold(var/user) - if(!(ishuman(user) || isrobot(user))) - to_chat(user, SPAN_NOTICE("You lack the dexterity to close \the [name].")) - return FALSE - - if(opened) - to_chat(user, SPAN_NOTICE("You must close \the [name] before it can be folded.")) - return FALSE - - if(contents.len) - to_chat(user, SPAN_NOTICE("You can't fold \the [name] while it has something inside it.")) - return FALSE - - visible_message("[user] folds up the [name]") - . = new item_path(get_turf(src)) - qdel(src) - -/obj/structure/closet/body_bag/MouseDrop(over_object, src_location, over_location) - ..() - if((over_object == usr && (in_range(src, usr) || usr.contents.Find(src)))) - fold(usr) - -/obj/item/robot_rack/body_bag - name = "stasis bag rack" - desc = "A rack for carrying folded stasis bags and body bags." - icon = 'icons/obj/closets/cryobag.dmi' - icon_state = "bodybag_folded" - object_type = /obj/item/bodybag - interact_type = /obj/structure/closet/body_bag - capacity = 3 diff --git a/code/game/objects/items/buttons.dm b/code/game/objects/items/buttons.dm deleted file mode 100644 index ebb2c7e3fa1f9..0000000000000 --- a/code/game/objects/items/buttons.dm +++ /dev/null @@ -1,85 +0,0 @@ -// Lightswitch Hull - -/obj/item/frame/light_switch - name = "light switch frame" - desc = "Used for building a light switch." - icon = 'icons/obj/power.dmi' - icon_state = "light-p" - obj_flags = OBJ_FLAG_CONDUCTIBLE - -/obj/item/frame/light_switch/windowtint - name = "window tint switch frame" - desc = "Used for building a window tint switch." - icon = 'icons/obj/power.dmi' - icon_state = "light-p" - obj_flags = OBJ_FLAG_CONDUCTIBLE - -GLOBAL_LIST_INIT(possible_switch_offsets, list( - "North" = list( - "Middle Lower" = list(0,25), - "Offset Lower" = list(7,25), - "Middle Upper" = list(0,32), - "Offset Upper" = list(7,32)), - "East" = list( - "Middle Lower" = list(25,0), - "Offset Lower" = list(25,7), - "Middle Upper" = list(32,0), - "Offset Upper" = list(32,7)), - "South" = list( - "Middle Lower" = list(0,-25), - "Offset Lower" = list(7,-25), - "Middle Upper" = list(0,-32), - "Offset Upper" = list(7,-32)), - "West" = list( - "Middle Lower" = list(-25,0), - "Offset Lower" = list(-25,7), - "Middle Upper" = list(-32,0), - "Offset Upper" = list(-32,7)))) - - -/obj/item/frame/light_switch/proc/position_with_direction(obj/item/frame/light_switch/S as obj, mob/user as mob) - for(var/i = 5; i >= 0; i -= 1) - var/direction_choice = input(user, "In which direction?", "Select direction.") as null|anything in GLOB.possible_switch_offsets - if(!direction_choice || user.incapacitated() || !user.Adjacent(src)) - return 0 - - var/list/position_options = GLOB.possible_switch_offsets[direction_choice] - - var/position_choice = input(user, "Which position?", "Select Position") as null|anything in position_options - if(!position_choice || user.incapacitated() || !user.Adjacent(src)) - return 0 - - var/list/position_data = position_options[position_choice] - S.pixel_x = position_data[1] - S.pixel_y = position_data[2] - - var/confirm = alert(user, "Is this what you want? Chances Remaining: [i]", "Confirmation", "Yes", "No") - if(confirm == "Yes") - break - return 1 - -/obj/item/frame/light_switch/attackby(obj/item/tool as obj, mob/user as mob) //construction - if(isWrench(tool)) - new /obj/item/stack/material/steel( get_turf(src.loc), 1 ) - qdel(src) - else if(istype(tool, /obj/item/screwdriver) && isturf(user.loc)) - var/obj/machinery/light_switch/S = new (user.loc) - if(position_with_direction(S, user)) - to_chat(user, "You fasten \the [S] with your [tool].") - qdel(src) - else - qdel(S) - else ..() - -/obj/item/frame/light_switch/windowtint/attackby(obj/item/tool as obj, mob/user as mob) - if(isWrench(tool)) - new /obj/item/stack/material/steel( get_turf(src.loc), 1 ) - qdel(src) - else if(istype(tool, /obj/item/screwdriver) && isturf(user.loc)) - var/obj/machinery/button/windowtint/S = new(user.loc) - if(position_with_direction(S, user)) - to_chat(user, "You fasten \the [S] with your [tool].") - qdel(src) - else - qdel(S) - else ..() \ No newline at end of file diff --git a/code/game/objects/items/contraband.dm b/code/game/objects/items/contraband.dm deleted file mode 100644 index 06cce2769499a..0000000000000 --- a/code/game/objects/items/contraband.dm +++ /dev/null @@ -1,47 +0,0 @@ -//Let's get some REAL contraband stuff in here. Because come on, getting brigged for LIPSTICK is no fun. - -//Illicit drugs~ -/obj/item/storage/pill_bottle/happy - name = "bottle of Happy pills" - desc = "Highly illegal drug. When you want to see the rainbow." - wrapper_color = COLOR_PINK - startswith = list(/obj/item/reagent_containers/pill/happy = 10) - -/obj/item/storage/pill_bottle/zoom - name = "bottle of Zoom pills" - desc = "Highly illegal drug. Trade brain for speed." - wrapper_color = COLOR_BLUE - startswith = list(/obj/item/reagent_containers/pill/zoom = 10) - -/obj/item/storage/pill_bottle/three_eye - name = "bottle of Three Eye pills" - desc = "Highly illegal drug. Stimulates rarely used portions of the brain." - wrapper_color = COLOR_BLUE - startswith = list(/obj/item/reagent_containers/pill/three_eye = 10) - -/obj/item/reagent_containers/glass/beaker/vial/random - atom_flags = 0 - var/list/random_reagent_list = list(list(/datum/reagent/water = 15) = 1, list(/datum/reagent/space_cleaner = 15) = 1) - -/obj/item/reagent_containers/glass/beaker/vial/random/toxin - random_reagent_list = list( - list(/datum/reagent/mindbreaker = 10, /datum/reagent/space_drugs = 20) = 3, - list(/datum/reagent/toxin/carpotoxin = 15) = 2, - list(/datum/reagent/impedrezene = 15) = 2, - list(/datum/reagent/toxin/zombiepowder = 10) = 1) - -/obj/item/reagent_containers/glass/beaker/vial/random/New() - ..() - if(is_open_container()) - atom_flags ^= ATOM_FLAG_OPEN_CONTAINER - - var/list/picked_reagents = pickweight(random_reagent_list) - for(var/reagent in picked_reagents) - reagents.add_reagent(reagent, picked_reagents[reagent]) - - var/list/names = new - for(var/datum/reagent/R in reagents.reagent_list) - names += R.name - - desc = "Contains [english_list(names)]." - update_icon() diff --git a/code/game/objects/items/crayons.dm b/code/game/objects/items/crayons.dm deleted file mode 100644 index 6645bc552306a..0000000000000 --- a/code/game/objects/items/crayons.dm +++ /dev/null @@ -1,129 +0,0 @@ -/obj/item/pen/crayon/red - icon_state = "crayonred" - colour = "#da0000" - shadeColour = "#810c0c" - colourName = "red" - color_description = "red crayon" - crayon_reagent = /datum/reagent/crayon_dust/red - -/obj/item/pen/crayon/orange - icon_state = "crayonorange" - colour = "#ff9300" - shadeColour = "#a55403" - colourName = "orange" - color_description = "orange crayon" - crayon_reagent = /datum/reagent/crayon_dust/orange - -/obj/item/pen/crayon/yellow - icon_state = "crayonyellow" - colour = "#fff200" - shadeColour = "#886422" - colourName = "yellow" - color_description = "yellow crayon" - crayon_reagent = /datum/reagent/crayon_dust/yellow - -/obj/item/pen/crayon/green - icon_state = "crayongreen" - colour = "#a8e61d" - shadeColour = "#61840f" - colourName = "green" - color_description = "green crayon" - crayon_reagent = /datum/reagent/crayon_dust/green - -/obj/item/pen/crayon/blue - icon_state = "crayonblue" - colour = "#00b7ef" - shadeColour = "#0082a8" - colourName = "blue" - color_description = "blue crayon" - crayon_reagent = /datum/reagent/crayon_dust/blue - -/obj/item/pen/crayon/purple - icon_state = "crayonpurple" - colour = "#da00ff" - shadeColour = "#810cff" - colourName = "purple" - color_description = "purple crayon" - crayon_reagent = /datum/reagent/crayon_dust/purple - -/obj/item/pen/crayon/random/Initialize() - ..() - var/crayon_type = pick(subtypesof(/obj/item/pen/crayon) - /obj/item/pen/crayon/random) - new crayon_type(loc) - return INITIALIZE_HINT_QDEL - -/obj/item/pen/crayon/mime - icon_state = "crayonmime" - desc = "A very sad-looking crayon." - colour = "#ffffff" - shadeColour = "#000000" - colourName = "mime" - color_description = "white crayon" - uses = 0 - crayon_reagent = /datum/reagent/crayon_dust/grey - -/obj/item/pen/crayon/mime/attack_self(mob/living/user as mob) //inversion - if(colour != "#ffffff" && shadeColour != "#000000") - colour = "#ffffff" - shadeColour = "#000000" - to_chat(user, "You will now draw in white and black with this crayon.") - else - colour = "#000000" - shadeColour = "#ffffff" - to_chat(user, "You will now draw in black and white with this crayon.") - return - -/obj/item/pen/crayon/rainbow - icon_state = "crayonrainbow" - colour = "#fff000" - shadeColour = "#000fff" - colourName = "rainbow" - color_description = "rainbow crayon" - uses = 0 - crayon_reagent = /datum/reagent/crayon_dust/brown - -/obj/item/pen/crayon/rainbow/attack_self(mob/living/user as mob) - colour = input(user, "Please select the main colour.", "Crayon colour") as color - shadeColour = input(user, "Please select the shade colour.", "Crayon colour") as color - return - -/obj/item/pen/crayon/afterattack(atom/target, mob/user as mob, proximity) - if(!proximity) return - if(istype(target,/turf/simulated/floor)) - var/drawtype = input("Choose what you'd like to draw.", "Crayon scribbles") in list("graffiti","rune","letter","arrow", "defector graffiti") - switch(drawtype) - if("letter") - drawtype = input("Choose the letter.", "Crayon scribbles") in 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") - to_chat(user, "You start drawing a letter on the [target.name].") - if("graffiti", "Fleet defector graffiti") - to_chat(user, "You start drawing graffiti on the [target.name].") - if("rune") - to_chat(user, "You start drawing a rune on the [target.name].") - if("arrow") - drawtype = input("Choose the arrow.", "Crayon scribbles") in list("left", "right", "up", "down") - to_chat(user, "You start drawing an arrow on the [target.name].") - if("defector graffiti") - to_chat(user, "You start drawing defector graffiti on the [target.name].") - if(instant || do_after(user, 5 SECONDS, target, DO_PUBLIC_UNIQUE)) - new /obj/effect/decal/cleanable/crayon(target,colour,shadeColour,drawtype) - to_chat(user, "You finish drawing.") - target.add_fingerprint(user) // Adds their fingerprints to the floor the crayon is drawn on. - if(uses) - uses-- - if(!uses) - to_chat(user, "You used up your crayon!") - qdel(src) - return - -/obj/item/pen/crayon/attack(mob/living/carbon/M as mob, mob/user as mob) - if(istype(M) && M == user) - to_chat(M, "You take a bite of the crayon and swallow it.") - M.adjust_nutrition(1) - M.reagents.add_reagent(/datum/reagent/crayon_dust,min(5,uses)/3) - if(uses) - uses -= 5 - if(uses <= 0) - to_chat(M, "You ate your crayon!") - qdel(src) - else - ..() diff --git a/code/game/objects/items/cryobag.dm b/code/game/objects/items/cryobag.dm deleted file mode 100644 index 0e8209541bcd5..0000000000000 --- a/code/game/objects/items/cryobag.dm +++ /dev/null @@ -1,127 +0,0 @@ - -/obj/item/bodybag/cryobag - name = "stasis bag" - desc = "A folded, reusable bag designed to prevent additional damage to an occupant, especially useful if short on time or in \ - a hostile enviroment." - icon = 'icons/obj/closets/cryobag.dmi' - icon_state = "bodybag_folded" - origin_tech = list(TECH_BIO = 4) - var/stasis_power - -/obj/item/bodybag/cryobag/attack_self(mob/user) - var/obj/structure/closet/body_bag/cryobag/R = new /obj/structure/closet/body_bag/cryobag(user.loc) - if(stasis_power) - R.stasis_power = stasis_power - R.update_icon() - R.add_fingerprint(user) - qdel(src) - -/obj/structure/closet/body_bag/cryobag - name = "stasis bag" - desc = "A reusable plastic bag designed to prevent additional damage to an occupant, especially useful if short on time or in \ - a hostile enviroment." - icon = 'icons/obj/closets/cryobag.dmi' - item_path = /obj/item/bodybag/cryobag - - storage_types = CLOSET_STORAGE_MOBS - var/datum/gas_mixture/airtank - - var/stasis_power = 20 - var/degradation_time = 150 //ticks until stasis power degrades, ~5 minutes - -/obj/structure/closet/body_bag/cryobag/Initialize() - . = ..() - airtank = new() - airtank.temperature = T0C - airtank.adjust_gas(GAS_OXYGEN, MOLES_O2STANDARD, 0) - airtank.adjust_gas(GAS_NITROGEN, MOLES_N2STANDARD) - update_icon() - -/obj/structure/closet/body_bag/cryobag/Destroy() - STOP_PROCESSING(SSobj, src) - QDEL_NULL(airtank) - return ..() - -/obj/structure/closet/body_bag/cryobag/Entered(atom/movable/AM) - if(ishuman(AM)) - START_PROCESSING(SSobj, src) - ..() - -/obj/structure/closet/body_bag/cryobag/Exited(atom/movable/AM) - if(ishuman(AM)) - STOP_PROCESSING(SSobj, src) - . = ..() - -/obj/structure/closet/body_bag/cryobag/on_update_icon() - ..() - overlays.Cut() - var/image/I = image(icon, "indicator[opened]") - I.appearance_flags = DEFAULT_APPEARANCE_FLAGS | RESET_COLOR - var/maxstasis = initial(stasis_power) - if(stasis_power > 0.5 * maxstasis) - I.color = COLOR_LIME - else if(stasis_power) - I.color = COLOR_YELLOW - else - I.color = COLOR_RED - overlays += I - -/obj/structure/closet/body_bag/cryobag/proc/get_saturation() - return -155 * (1 - stasis_power/initial(stasis_power)) - -/obj/structure/closet/body_bag/cryobag/fold(var/user) - var/obj/item/bodybag/cryobag/folded = ..() - if(istype(folded)) - folded.stasis_power = stasis_power - folded.color = color_saturation(get_saturation()) - -/obj/structure/closet/body_bag/cryobag/Process() - if(stasis_power < 2) - return PROCESS_KILL - var/mob/living/carbon/human/H = locate() in src - if(!H) - return PROCESS_KILL - degradation_time-- - if(degradation_time < 0) - degradation_time = initial(degradation_time) - stasis_power = round(0.75 * stasis_power) - animate(src, color = color_saturation(get_saturation()), time = 10) - update_icon() - - if(H.stasis_sources[STASIS_CRYOBAG] != stasis_power) - H.SetStasis(stasis_power, STASIS_CRYOBAG) - -/obj/structure/closet/body_bag/cryobag/return_air() //Used to make stasis bags protect from vacuum. - if(airtank) - return airtank - ..() - -/obj/structure/closet/body_bag/cryobag/examine(mob/user) - . = ..() - to_chat(user,"The stasis meter shows '[stasis_power]x'.") - if(Adjacent(user)) //The bag's rather thick and opaque from a distance. - to_chat(user, "You peer into \the [src].") - for(var/mob/living/L in contents) - L.examine(arglist(args)) - -/obj/item/usedcryobag - name = "used stasis bag" - desc = "Pretty useless now.." - icon_state = "bodybag_used" - icon = 'icons/obj/closets/cryobag.dmi' - -/obj/structure/closet/body_bag/cryobag/blank - stasis_power = 60 - degradation_time = 1800 //ticks until stasis power degrades, ~5 minutes - -/obj/structure/closet/body_bag/cryobag/blank/open() - . = ..() - new /obj/item/usedcryobag(loc) - qdel(src) - -/obj/structure/closet/body_bag/cryobag/blank/WillContain() - return list(/mob/living/carbon/human/blank) - -/obj/structure/closet/body_bag/cryobag/blank/Initialize() - . = ..() - START_PROCESSING(SSobj, src) diff --git a/code/game/objects/items/devices/aicard.dm b/code/game/objects/items/devices/aicard.dm deleted file mode 100644 index 0cd72810d0214..0000000000000 --- a/code/game/objects/items/devices/aicard.dm +++ /dev/null @@ -1,145 +0,0 @@ -/obj/item/aicard - name = "inteliCard" - icon = 'icons/obj/pda.dmi' - icon_state = "aicard" // aicard-full - item_state = "electronic" - w_class = ITEM_SIZE_SMALL - slot_flags = SLOT_BELT - var/flush = null - origin_tech = list(TECH_DATA = 4, TECH_MATERIAL = 4) - - var/mob/living/silicon/ai/carded_ai - -/obj/item/aicard/attack_self(mob/user) - - ui_interact(user) - -/obj/item/aicard/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1, var/datum/topic_state/state = GLOB.inventory_state) - var/data[0] - data["has_ai"] = carded_ai != null - if(carded_ai) - data["name"] = carded_ai.name - data["hardware_integrity"] = carded_ai.hardware_integrity() - data["backup_capacitor"] = carded_ai.backup_capacitor() - data["radio"] = !carded_ai.ai_radio.disabledAi - data["wireless"] = !carded_ai.control_disabled - data["operational"] = carded_ai.stat != DEAD - data["flushing"] = flush - - var/laws[0] - for(var/datum/ai_law/AL in carded_ai.laws.all_laws()) - laws[++laws.len] = list("index" = AL.get_index(), "law" = sanitize(AL.law)) - data["laws"] = laws - data["has_laws"] = laws.len - - ui = SSnano.try_update_ui(user, src, ui_key, ui, data, force_open) - if (!ui) - ui = new(user, src, ui_key, "aicard.tmpl", "[name]", 600, 400, state = state) - ui.set_initial_data(data) - ui.open() - ui.set_auto_update(1) - -/obj/item/aicard/Topic(href, href_list, state) - if(..()) - return 1 - - if(!carded_ai) - return 1 - - var/user = usr - if (href_list["wipe"]) - var/confirm = alert("Are you sure you want to wipe this card's memory? This cannot be undone once started.", "Confirm Wipe", "Yes", "No") - if(confirm == "Yes" && (CanUseTopic(user, state) == STATUS_INTERACTIVE)) - admin_attack_log(user, carded_ai, "Wiped using \the [src.name]", "Was wiped with \the [src.name]", "used \the [src.name] to wipe") - flush = 1 - to_chat(carded_ai, "Your core files are being wiped!") - while (carded_ai && carded_ai.stat != DEAD) - carded_ai.adjustOxyLoss(2) - carded_ai.updatehealth() - sleep(10) - flush = 0 - if (href_list["radio"]) - carded_ai.ai_radio.disabledAi = text2num(href_list["radio"]) - to_chat(carded_ai, "Your Subspace Transceiver has been [carded_ai.ai_radio.disabledAi ? "disabled" : "enabled"]!") - to_chat(user, "You [carded_ai.ai_radio.disabledAi ? "disable" : "enable"] the AI's Subspace Transceiver.") - if (href_list["wireless"]) - carded_ai.control_disabled = text2num(href_list["wireless"]) - to_chat(carded_ai, "Your wireless interface has been [carded_ai.control_disabled ? "disabled" : "enabled"]!") - to_chat(user, "You [carded_ai.control_disabled ? "disable" : "enable"] the AI's wireless interface.") - update_icon() - return 1 - -/obj/item/aicard/on_update_icon() - overlays.Cut() - if(carded_ai) - if (!carded_ai.control_disabled) - overlays += image('icons/obj/pda.dmi', "aicard-on") - if(carded_ai.stat) - icon_state = "aicard-404" - else - icon_state = "aicard-full" - else - icon_state = "aicard" - -/obj/item/aicard/proc/grab_ai(var/mob/living/silicon/ai/ai, var/mob/living/user) - if(!ai.client) - to_chat(user, "ERROR: AI [ai.name] is offline. Unable to download.") - return 0 - - if(carded_ai) - to_chat(user, "Transfer failed: Existing AI found on remote terminal. Remove existing AI to install a new one.") - return 0 - - if(ai.malfunctioning && ai.uncardable) - to_chat(user, "ERROR: Remote transfer interface disabled.") - return 0 - - if(isturf(ai.loc)) - new /obj/structure/AIcore/deactivated(get_turf(ai)) - - ai.carded = 1 - admin_attack_log(user, ai, "Carded with [src.name]", "Was carded with [src.name]", "used the [src.name] to card") - src.SetName("[initial(name)] - [ai.name]") - - ai.forceMove(src) - ai.destroy_eyeobj(src) - ai.cancel_camera() - ai.control_disabled = 1 - ai.aiRestorePowerRoutine = 0 - ai.calculate_power_usage() - carded_ai = ai - - if(ai.client) - to_chat(ai, "You have been downloaded to a mobile storage device. Remote access lost.") - if(user.client) - to_chat(user, "Transfer successful: [ai.name] ([rand(1000,9999)].exe) removed from host terminal and stored within local memory.") - - update_icon() - return 1 - -/obj/item/aicard/proc/clear() - if(carded_ai && istype(carded_ai.loc, /turf)) - carded_ai.carded = 0 - SetName(initial(name)) - carded_ai.calculate_power_usage() - carded_ai = null - update_icon() - -/obj/item/aicard/see_emote(mob/living/M, text) - if(carded_ai && carded_ai.client) - var/rendered = "[text]" - carded_ai.show_message(rendered, 2) - ..() - -/obj/item/aicard/show_message(msg, type, alt, alt_type) - if(carded_ai && carded_ai.client) - var/rendered = "[msg]" - carded_ai.show_message(rendered, type) - ..() - -/obj/item/aicard/relaymove(var/mob/user, var/direction) - if(user.stat || user.stunned) - return - var/obj/item/rig/rig = src.get_rig() - if(istype(rig)) - rig.forced_move(direction, user) diff --git a/code/game/objects/items/devices/auto_cpr.dm b/code/game/objects/items/devices/auto_cpr.dm deleted file mode 100644 index 5b38397bf65eb..0000000000000 --- a/code/game/objects/items/devices/auto_cpr.dm +++ /dev/null @@ -1,70 +0,0 @@ -/obj/item/auto_cpr - name = "auto-compressor" - desc = "A device that gives regular compression to the victim's ribcage, used in case of urgent heart issues." - icon = 'icons/obj/auto_cpr.dmi' - icon_state = "pumper" - w_class = ITEM_SIZE_NORMAL - origin_tech = list(TECH_MAGNET = 2, TECH_BIO = 2) - slot_flags = SLOT_OCLOTHING - var/last_pump - var/skilled_setup - -/obj/item/auto_cpr/mob_can_equip(mob/living/carbon/human/H, slot, disable_warning = 0, force = 0) - . = ..() - if(force || !istype(H) || slot != slot_wear_suit) - return - if(H.species.get_bodytype() in list(SPECIES_HUMAN, SPECIES_SKRELL, SPECIES_UNATHI, SPECIES_ALIEN)) //non-humanoids btfo - return - else - return FALSE - -/obj/item/auto_cpr/attack(mob/living/carbon/human/M, mob/living/user, var/target_zone) - if(istype(M) && user.a_intent == I_HELP) - if(M.wear_suit) - to_chat(user, SPAN_WARNING("Their [M.wear_suit] is in the way, remove it first!")) - return 1 - user.visible_message(SPAN_NOTICE("[user] starts fitting [src] onto the [M]'s chest.")) - - if(!do_after(user, 2 SECONDS, M, DO_EQUIP)) - return - - if(user.unEquip(src)) - if(!M.equip_to_slot_if_possible(src, slot_wear_suit, TRYEQUIP_REDRAW | TRYEQUIP_SILENT)) - user.put_in_active_hand(src) - return 1 - else - return ..() - -/obj/item/auto_cpr/equipped(mob/user, slot) - ..() - START_PROCESSING(SSobj,src) - -/obj/item/auto_cpr/attack_hand(mob/user) - skilled_setup = user.skill_check(SKILL_ANATOMY, SKILL_BASIC) && user.skill_check(SKILL_MEDICAL, SKILL_BASIC) - ..() - -/obj/item/auto_cpr/dropped(mob/user) - STOP_PROCESSING(SSobj,src) - ..() - -/obj/item/auto_cpr/Process() - if(!ishuman(loc)) - return PROCESS_KILL - - var/mob/living/carbon/human/H = loc - if(H.get_inventory_slot(src) != slot_wear_suit) - return PROCESS_KILL - - if(world.time > last_pump + 15 SECONDS) - last_pump = world.time - playsound(src, 'sound/machines/pump.ogg', 25) - if(!skilled_setup && prob(20)) - var/obj/item/organ/external/E = H.get_organ(BP_CHEST) - E.add_pain(15) - to_chat(H, "Your [E] is compressed painfully!") - if(prob(5)) - E.fracture() - else - var/obj/item/organ/internal/heart/heart = H.internal_organs_by_name[BP_HEART] - if(heart) - heart.external_pump = list(world.time, 0.6) diff --git a/code/game/objects/items/devices/binoculars.dm b/code/game/objects/items/devices/binoculars.dm deleted file mode 100644 index 4b9aaae7c57e5..0000000000000 --- a/code/game/objects/items/devices/binoculars.dm +++ /dev/null @@ -1,21 +0,0 @@ -/obj/item/device/binoculars - - name = "binoculars" - desc = "A pair of binoculars." - zoomdevicename = "eyepieces" - icon = 'icons/obj/binoculars.dmi' - icon_state = "binoculars" - - obj_flags = OBJ_FLAG_CONDUCTIBLE - force = 5.0 - w_class = ITEM_SIZE_SMALL - throwforce = 5.0 - throw_range = 15 - throw_speed = 3 - - -/obj/item/device/binoculars/attack_self(mob/user) - if(zoom) - unzoom(user) - else - zoom(user) diff --git a/code/game/objects/items/devices/boombox.dm b/code/game/objects/items/devices/boombox.dm deleted file mode 100644 index f9c1ff11c454a..0000000000000 --- a/code/game/objects/items/devices/boombox.dm +++ /dev/null @@ -1,135 +0,0 @@ -#define BOOMBOX_PANEL 1 -#define BOOMBOX_BROKEN 2 - -/obj/item/boombox - name = "boombox" - desc = "A device used to emit rhythmic sounds, colloquialy refered to as a 'boombox'. It's in a retro style (massive), and absolutely unwieldy." - icon = 'icons/obj/boombox.dmi' - icon_state = "off" - item_state = "boombox" - force = 7 - w_class = ITEM_SIZE_HUGE //forbid putting something that emits loud sounds forever into a backpack - origin_tech = list(TECH_MAGNET = 2, TECH_COMBAT = 1) - - var/jukebox/jukebox - var/boombox_flags - - -/obj/item/boombox/Initialize() - . = ..() - jukebox = new(src, "boombox.tmpl", "HEXABEATRON™", 400, 150) - - -/obj/item/boombox/Destroy() - QDEL_NULL(jukebox) - . = ..() - - -/obj/item/boombox/on_update_icon() - icon_state = jukebox?.playing ? "on" : "off" - - -/obj/item/boombox/attack_self(mob/user) - playsound(src, "switch", 30) - if (GET_FLAGS(boombox_flags, BOOMBOX_BROKEN)) - return - jukebox.ui_interact(user) - - -/obj/item/boombox/MouseDrop(mob/user) - jukebox.ui_interact(user) - - -/obj/item/boombox/emp_act(severity) - if (GET_FLAGS(boombox_flags, BOOMBOX_BROKEN)) - return - audible_message(SPAN_WARNING("\The [src]'s speakers pop with a sharp crack!")) - playsound(src, 'sound/effects/snap.ogg', 100, 1) - SET_FLAGS(boombox_flags, BOOMBOX_BROKEN) - jukebox.Stop() - ..() - - -/obj/item/boombox/examine(mob/user, distance) - . = ..() - if (distance > 3) - return - var/message - if (GET_FLAGS(boombox_flags, BOOMBOX_PANEL)) - message = "[message?" ":""]The front panel is open." - if (GET_FLAGS(boombox_flags, BOOMBOX_BROKEN)) - message += "[message?" ":""]It's broken." - if (!message) - return - to_chat(user, SPAN_ITALIC(message)) - - -/obj/item/boombox/attackby(obj/item/item, mob/user) - set waitfor = FALSE - if(isScrewdriver(item)) - var/item_loc = item.loc - if (GET_FLAGS(boombox_flags, BOOMBOX_PANEL)) - user.visible_message( - SPAN_ITALIC("\The [user] closes the service panel on \the [src]."), - SPAN_NOTICE("You close the service panel on \the [src]."), - range = 3 - ) - CLEAR_FLAGS(boombox_flags, BOOMBOX_PANEL) - else if (!GET_FLAGS(boombox_flags, BOOMBOX_BROKEN)) - if (jukebox.playing) - to_chat(user, SPAN_WARNING("You can't adjust the player head while it's in use.")) - return TRUE - var/data = input(user, "Adjust player head screw?", "Adjust Head") as null | anything in list("tighten", "loosen") - if (item_loc == item.loc) - var/old_frequency = jukebox.frequency - switch (data) - if ("tighten") jukebox.frequency = max(jukebox.frequency - 0.1, 0.5) - if ("loosen") jukebox.frequency = min(jukebox.frequency + 0.1, 1.5) - if (jukebox.frequency == old_frequency) - to_chat(user, SPAN_WARNING("Try as you might, the screw won't turn further.")) - return TRUE - user.visible_message( - SPAN_ITALIC("\The [user] uses \the [item] to fiddle with \the [src]."), - SPAN_NOTICE("You [data] the player head screw inside \the [src]."), - range = 3 - ) - else if (!GET_FLAGS(boombox_flags, BOOMBOX_PANEL)) - user.visible_message( - SPAN_ITALIC("\The [user] opens the service panel on \the [src]."), - SPAN_NOTICE("You open the service panel on \the [src]."), - range = 3 - ) - SET_FLAGS(boombox_flags, BOOMBOX_PANEL) - playsound(src, 'sound/items/Screwdriver.ogg', 50, 1) - return TRUE - if (istype(item, /obj/item/stack/nanopaste)) - if (!GET_FLAGS(boombox_flags, BOOMBOX_PANEL)) - to_chat(user, SPAN_WARNING("The panel on \the [src] is not open.")) - return TRUE - if (!GET_FLAGS(boombox_flags, BOOMBOX_BROKEN)) - to_chat(user, SPAN_WARNING("\The [src] is not broken.")) - return TRUE - var/obj/item/stack/paste = item - if (!paste.use(1)) - to_chat(user, SPAN_WARNING("\The [paste] is empty.")) - return TRUE - user.visible_message( - SPAN_ITALIC("\The [user] uses \the [item] to repair \the [src]."), - SPAN_NOTICE("You repair \the [src] with \the [item]."), - range = 3 - ) - CLEAR_FLAGS(boombox_flags, BOOMBOX_BROKEN) - return TRUE - . = ..() - - - -/obj/random_multi/single_item/boombox - name = "boombox spawnpoint" - id = "boomtastic" - item_path = /obj/item/boombox - - - -#undef BOOMBOX_PANEL -#undef BOOMBOX_BROKEN diff --git a/code/game/objects/items/devices/cable_painter.dm b/code/game/objects/items/devices/cable_painter.dm deleted file mode 100644 index 053f6d9301636..0000000000000 --- a/code/game/objects/items/devices/cable_painter.dm +++ /dev/null @@ -1,39 +0,0 @@ -/obj/item/device/cable_painter - name = "cable painter" - desc = "A device for repainting cables." - icon = 'icons/obj/bureaucracy.dmi' - icon_state = "labeler0" - item_state = "flight" - var/color_selection - var/list/modes - w_class = ITEM_SIZE_SMALL - -/obj/item/device/cable_painter/New() - ..() - color_selection = pick(GLOB.possible_cable_colours) - -/obj/item/device/cable_painter/examine(mob/user, distance) - . = ..() - if(distance <= 1) - to_chat(user, "The color is currently set to [lowertext(color_selection)].") - -/obj/item/device/cable_painter/attack_self(mob/user) - var/new_color_selection = input("What color would you like to use?", "Choose a Color", color_selection) as null|anything in GLOB.possible_cable_colours - if(new_color_selection && !user.incapacitated() && (src in user)) - color_selection = new_color_selection - to_chat(user, "You change the paint mode to [lowertext(color_selection)].") - -/obj/item/device/cable_painter/afterattack(var/atom/A, var/mob/user, var/proximity) - if(!proximity) - return ..() - if(istype(A, /obj/structure/cable)) - var/picked_color = GLOB.possible_cable_colours[color_selection] - if(!picked_color || A.color == picked_color) - return - A.color = picked_color - to_chat(user, "You set \the [A]'s color to [lowertext(color_selection)].") - else if(isCoil(A)) - var/obj/item/stack/cable_coil/c = A - c.set_cable_color(color_selection, user) - else - . = ..() diff --git a/code/game/objects/items/devices/chameleonproj.dm b/code/game/objects/items/devices/chameleonproj.dm deleted file mode 100644 index fd56cfa8b7c04..0000000000000 --- a/code/game/objects/items/devices/chameleonproj.dm +++ /dev/null @@ -1,150 +0,0 @@ -/obj/item/device/chameleon - name = "chameleon projector" - icon = 'icons/obj/chameleon_projector.dmi' - icon_state = "shield0" - obj_flags = OBJ_FLAG_CONDUCTIBLE - slot_flags = SLOT_BELT - item_state = "electronic" - throwforce = 5.0 - throw_speed = 1 - throw_range = 5 - w_class = ITEM_SIZE_SMALL - origin_tech = list(TECH_ESOTERIC = 4, TECH_MAGNET = 4) - var/can_use = 1 - var/obj/effect/dummy/chameleon/active_dummy = null - var/saved_item = /obj/item/trash/cigbutt - var/saved_icon = 'icons/obj/clothing/obj_mask.dmi' - var/saved_icon_state = "cigbutt" - var/saved_overlays - -/obj/item/device/chameleon/dropped() - disrupt() - ..() - -/obj/item/device/chameleon/equipped() - disrupt() - ..() - -/obj/item/device/chameleon/attack_self() - toggle() - -/obj/item/device/chameleon/afterattack(atom/target, mob/user , proximity) - if(!proximity) return - if(!active_dummy) - if(istype(target,/obj/item) && !istype(target, /obj/item/disk/nuclear)) - playsound(get_turf(src), 'sound/weapons/flash.ogg', 100, 1, -6) - to_chat(user, "Scanned [target].") - saved_item = target.type - saved_icon = target.icon - saved_icon_state = target.icon_state - saved_overlays = target.overlays - -/obj/item/device/chameleon/proc/toggle() - if(!can_use || !saved_item) return - if(active_dummy) - eject_all() - playsound(get_turf(src), 'sound/effects/pop.ogg', 100, 1, -6) - qdel(active_dummy) - active_dummy = null - to_chat(usr, "You deactivate the [src].") - var/obj/effect/overlay/T = new /obj/effect/overlay(get_turf(src)) - T.icon = 'icons/effects/effects.dmi' - flick("emppulse",T) - QDEL_IN(T, 8) - else - playsound(get_turf(src), 'sound/effects/pop.ogg', 100, 1, -6) - var/obj/O = new saved_item(src) - if(!O) return - var/obj/effect/dummy/chameleon/C = new /obj/effect/dummy/chameleon(usr.loc) - C.activate(O, usr, saved_icon, saved_icon_state, saved_overlays, src) - qdel(O) - to_chat(usr, "You activate the [src].") - var/obj/effect/overlay/T = new/obj/effect/overlay(get_turf(src)) - T.icon = 'icons/effects/effects.dmi' - flick("emppulse",T) - QDEL_IN(T, 8) - -/obj/item/device/chameleon/proc/disrupt(var/delete_dummy = 1) - if(active_dummy) - var/datum/effect/effect/system/spark_spread/spark_system = new /datum/effect/effect/system/spark_spread - spark_system.set_up(5, 0, src) - spark_system.attach(src) - spark_system.start() - eject_all() - if(delete_dummy) - qdel(active_dummy) - active_dummy = null - can_use = 0 - spawn(50) can_use = 1 - -/obj/item/device/chameleon/proc/eject_all() - for(var/atom/movable/A in active_dummy) - A.forceMove(active_dummy.loc) - if(ismob(A)) - var/mob/M = A - M.reset_view(null) - -/obj/effect/dummy/chameleon - name = "" - desc = "" - density = FALSE - anchored = TRUE - var/can_move = 1 - var/obj/item/device/chameleon/master = null - -/obj/effect/dummy/chameleon/proc/activate(var/obj/O, var/mob/M, new_icon, new_iconstate, new_overlays, var/obj/item/device/chameleon/C) - name = O.name - desc = O.desc - icon = new_icon - icon_state = new_iconstate - overlays = new_overlays - set_dir(O.dir) - M.forceMove(src) - master = C - master.active_dummy = src - -/obj/effect/dummy/chameleon/attackby() - for(var/mob/M in src) - to_chat(M, "Your chameleon-projector deactivates.") - master.disrupt() - -/obj/effect/dummy/chameleon/attack_hand() - for(var/mob/M in src) - to_chat(M, "Your chameleon-projector deactivates.") - master.disrupt() - -/obj/effect/dummy/chameleon/ex_act() - for(var/mob/M in src) - to_chat(M, "Your chameleon-projector deactivates.") - master.disrupt() - -/obj/effect/dummy/chameleon/bullet_act() - for(var/mob/M in src) - to_chat(M, "Your chameleon-projector deactivates.") - ..() - master.disrupt() - -/obj/effect/dummy/chameleon/relaymove(var/mob/user, direction) - var/area/A = get_area(src) - if(!A || !A.has_gravity()) return //No magical space movement! - - if(can_move) - can_move = 0 - switch(user.bodytemperature) - if(300 to INFINITY) - spawn(10) can_move = 1 - if(295 to 300) - spawn(13) can_move = 1 - if(280 to 295) - spawn(16) can_move = 1 - if(260 to 280) - spawn(20) can_move = 1 - else - spawn(25) can_move = 1 - if(isturf(loc)) - step(src, direction) - return - -/obj/effect/dummy/chameleon/Destroy() - master.disrupt(0) - ..() diff --git a/code/game/objects/items/devices/debugger.dm b/code/game/objects/items/devices/debugger.dm deleted file mode 100644 index ed3c1aa3272cd..0000000000000 --- a/code/game/objects/items/devices/debugger.dm +++ /dev/null @@ -1,46 +0,0 @@ -/** - * Multitool -- A multitool is used for hacking electronic devices. - * TO-DO -- Using it as a power measurement tool for cables etc. Nannek. - * - */ - -/obj/item/device/debugger - name = "debugger" - desc = "Used to debug electronic equipment." - icon = 'icons/obj/hacktool.dmi' - icon_state = "hacktool-g" - obj_flags = OBJ_FLAG_CONDUCTIBLE - force = 5.0 - w_class = ITEM_SIZE_SMALL - throwforce = 5.0 - throw_range = 15 - throw_speed = 3 - desc = "You can use this on airlocks or APCs to try to hack them without cutting wires." - - matter = list(MATERIAL_PLASTIC = 50, MATERIAL_STEEL = 50, MATERIAL_GLASS = 20) - - origin_tech = list(TECH_MAGNET = 1, TECH_ENGINEERING = 1) - var/obj/machinery/telecomms/buffer // simple machine buffer for device linkage - -/obj/item/device/debugger/is_used_on(obj/O, mob/user) - if(istype(O, /obj/machinery/power/apc)) - var/obj/machinery/power/apc/A = O - if(A.emagged || A.hacker) - to_chat(user, "There is a software error with the device.") - else - to_chat(user, "The device's software appears to be fine.") - return 1 - if(istype(O, /obj/machinery/door)) - var/obj/machinery/door/D = O - if(D.operating == -1) - to_chat(user, "There is a software error with the device.") - else - to_chat(user, "The device's software appears to be fine.") - return 1 - else if(istype(O, /obj/machinery)) - var/obj/machinery/A = O - if(A.emagged) - to_chat(user, "There is a software error with the device.") - else - to_chat(user, "The device's software appears to be fine.") - return 1 diff --git a/code/game/objects/items/devices/dociler.dm b/code/game/objects/items/devices/dociler.dm deleted file mode 100644 index f8886e4dbab84..0000000000000 --- a/code/game/objects/items/devices/dociler.dm +++ /dev/null @@ -1,60 +0,0 @@ -/obj/item/device/dociler - name = "dociler" - desc = "A complex single use recharging injector that spreads a complex neurological serum that makes animals docile and friendly. Somewhat." - w_class = ITEM_SIZE_NORMAL - origin_tech = list(TECH_BIO = 5, TECH_MATERIAL = 2) - icon = 'icons/obj/dociler.dmi' - icon_state = "animal_tagger1" - item_icons = list( - slot_l_hand_str = 'icons/mob/onmob/items/lefthand_guns.dmi', - slot_r_hand_str = 'icons/mob/onmob/items/righthand_guns.dmi', - ) - item_state = "gun" - force = 1 - var/loaded = 1 - var/mode = "completely" - -/obj/item/device/dociler/examine(mob/user) - . = ..() - to_chat(user, "It is currently set to [mode] docile mode.") - -/obj/item/device/dociler/attack_self(var/mob/user) - if(mode == "somewhat") - mode = "completely" - else - mode = "somewhat" - - to_chat(user, "You set \the [src] to [mode] docile mode.") - -/obj/item/device/dociler/attack(var/mob/living/L, var/mob/user) - if(!istype(L, /mob/living/simple_animal)) - to_chat(user, "\The [src] cannot not work on \the [L].") - return - - if(!loaded) - to_chat(user, "\The [src] isn't loaded!") - return - - user.visible_message("\The [user] thrusts \the [src] deep into \the [L]'s head, injecting something!") - to_chat(L, "You feel pain as \the [user] injects something into you. All of a sudden you feel as if [user] is the friendliest and nicest person you've ever know. You want to be friends with him and all his friends.") - if(mode == "somewhat") - L.faction = user.faction - else - L.faction = null - if(istype(L,/mob/living/simple_animal/hostile)) - var/mob/living/simple_animal/hostile/H = L - H.ai_holder.lose_target() - H.attack_same = 0 - H.friends += weakref(user) - L.desc += "
              It looks especially docile." - var/name = input(user, "Would you like to rename \the [L]?", "Dociler", L.name) as text - if(length(name)) - L.real_name = name - L.SetName(name) - - loaded = 0 - icon_state = "animal_tagger0" - spawn(1450) - loaded = 1 - icon_state = "animal_tagger1" - src.visible_message("\The [src] beeps, refilling itself.") diff --git a/code/game/objects/items/devices/flash.dm b/code/game/objects/items/devices/flash.dm deleted file mode 100644 index f232a04c566c0..0000000000000 --- a/code/game/objects/items/devices/flash.dm +++ /dev/null @@ -1,220 +0,0 @@ -/obj/item/device/flash - name = "flash" - desc = "A device that produces a bright flash of light, designed to stun and disorient an attacker." - icon = 'icons/obj/flash.dmi' - icon_state = "flash" - item_state = "flashtool" - throwforce = 5 - w_class = ITEM_SIZE_SMALL - throw_speed = 4 - throw_range = 10 - obj_flags = OBJ_FLAG_CONDUCTIBLE - origin_tech = list(TECH_MAGNET = 2, TECH_COMBAT = 1) - - var/times_used = 0 //Number of times it's been used. - var/broken = 0 //Is the flash burnt out? - var/last_used = 0 //last world.time it was used. - var/str_min = 2 //how weak the effect CAN be - var/str_max = 7 //how powerful the effect COULD be - -/obj/item/device/flash/proc/clown_check(var/mob/user) - if(user && (MUTATION_CLUMSY in user.mutations) && prob(50)) - to_chat(user, "\The [src] slips out of your hand.") - user.unequip_item() - return 0 - return 1 - -/obj/item/device/flash/proc/flash_recharge() - //capacitor recharges over time - for(var/i=0, i<3, i++) - if(last_used+600 > world.time) - break - last_used += 600 - times_used -= 2 - last_used = world.time - times_used = max(0,round(times_used)) //sanity - -//attack_as_weapon -/obj/item/device/flash/attack(mob/living/M, mob/living/user, var/target_zone) - if(!user || !M) return 0 //sanity - admin_attack_log(user, M, "flashed their victim using \a [src].", "Was flashed by \a [src].", "used \a [src] to flash") - - if(!clown_check(user)) return 0 - if(broken) - to_chat(user, "\The [src] is broken.") - return 0 - - flash_recharge() - - //spamming the flash before it's fully charged (60seconds) increases the chance of it breaking - //It will never break on the first use. - switch(times_used) - if(0 to 5) - last_used = world.time - if(prob(times_used)) //if you use it 5 times in a minute it has a 10% chance to break! - broken = 1 - to_chat(user, "The bulb has burnt out!") - icon_state = "[initial(icon_state)]_burnt" - return 0 - times_used++ - else //can only use it 5 times a minute - to_chat(user, "*click* *click*") - return 0 - - user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN) - user.do_attack_animation(M) - - playsound(src.loc, 'sound/weapons/flash.ogg', 100, 1) - var/flashfail = 0 - var/flash_strength = (rand(str_min,str_max)) - - if(iscarbon(M)) - if(M.stat!=DEAD) - var/mob/living/carbon/C = M - var/safety = C.eyecheck() - if(safety < FLASH_PROTECTION_MODERATE) - if(ishuman(M)) - var/mob/living/carbon/human/H = M - flash_strength = round(H.getFlashMod() * flash_strength) - if(safety > FLASH_PROTECTION_NONE) - flash_strength = (flash_strength / 2) - if(flash_strength > 0) - M.flash_eyes(FLASH_PROTECTION_MODERATE - safety) - M.Stun(flash_strength / 2) - M.eye_blurry = max(M.eye_blurry, flash_strength) - M.confused = max(M.confused, (flash_strength + 2)) - if(flash_strength > 3) - M.drop_l_hand() - M.drop_r_hand() - if(flash_strength > 5) - M.Weaken(2) - else - flashfail = 1 - - else if(isanimal(M)) - var/mob/living/simple_animal/SA = M - var/safety = SA.eyecheck() - if(safety < FLASH_PROTECTION_MAJOR) - SA.confused = max(SA.confused, (flash_strength * 0.5)) - if(safety < FLASH_PROTECTION_MODERATE) - SA.flash_eyes(2) - SA.eye_blurry = max(SA.eye_blurry, flash_strength) - SA.confused = max(SA.confused, (flash_strength)) - else - flashfail = 1 - - else if(issilicon(M)) - if (M.status_flags & CANWEAKEN) - M.Weaken(rand(str_min,6)) - else - flashfail = TRUE - - else - flashfail = 1 - - if(isrobot(user)) - spawn(0) - var/atom/movable/overlay/animation = new(user) - animation.plane = user.plane - animation.layer = user.layer + 0.01 - animation.icon_state = "blank" - animation.icon = 'icons/mob/mob.dmi' - flick("blspell", animation) - sleep(5) - qdel(animation) - - if(!flashfail) - flick("[initial(icon_state)]_on", src) - if(!issilicon(M)) - user.visible_message("[user] blinds [M] with \the [src]!") - else - user.visible_message("[user] overloads [M]'s sensors with \the [src]!") - else - user.visible_message("[user] fails to blind [M] with \the [src]!") - return 1 - - - - -/obj/item/device/flash/attack_self(mob/living/carbon/user as mob, flag = 0, emp = 0) - if(!user || !clown_check(user)) return 0 - - if(broken) - user.show_message("The [src.name] is broken", 2) - return 0 - - flash_recharge() - - //spamming the flash before it's fully charged (60seconds) increases the chance of it breaking - //It will never break on the first use. - switch(times_used) - if(0 to 5) - if(prob(2*times_used)) //if you use it 5 times in a minute it has a 10% chance to break! - broken = 1 - to_chat(user, "The bulb has burnt out!") - icon_state = "[initial(icon_state)]_burnt" - return 0 - times_used++ - else //can only use it 5 times a minute - user.show_message("*click* *click*", 2) - return 0 - user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN) - playsound(src.loc, 'sound/weapons/flash.ogg', 100, 1) - flick("[initial(icon_state)]_on", src) - if(user && isrobot(user)) - spawn(0) - var/atom/movable/overlay/animation = new(user.loc) - animation.plane = user.plane - animation.layer = user.layer + 0.01 - animation.icon_state = "blank" - animation.icon = 'icons/mob/mob.dmi' - animation.master = user - flick("blspell", animation) - sleep(5) - qdel(animation) - - for(var/mob/living/carbon/M in oviewers(3, null)) - var/safety = M.eyecheck() - if(safety < FLASH_PROTECTION_MODERATE) - if(!M.blinded) - M.flash_eyes() - M.eye_blurry += 2 - - return 1 - -/obj/item/device/flash/emp_act(severity) - if(broken) return - flash_recharge() - switch(times_used) - if(0 to 5) - if(prob(2*times_used)) - broken = 1 - icon_state = "[initial(icon_state)]_burnt" - return - times_used++ - if(istype(loc, /mob/living/carbon)) - var/mob/living/carbon/M = loc - var/safety = M.eyecheck() - if(safety < FLASH_PROTECTION_MODERATE) - M.Weaken(10) - M.flash_eyes() - for(var/mob/O in viewers(M, null)) - O.show_message("[M] is blinded by the [name]!") - ..() - -/obj/item/device/flash/synthetic //not for regular use, weaker effects - name = "modified flash" - desc = "A device that produces a bright flash of light. This is a specialized version designed specifically for use in camera systems." - icon = 'icons/obj/flash_synthetic.dmi' - icon_state = "sflash" - str_min = 1 - str_max = 4 - -/obj/item/device/flash/advanced - name = "advanced flash" - desc = "A device that produces a very bright flash of light. This is an advanced and expensive version often issued to VIPs." - icon = 'icons/obj/flash_advanced.dmi' - icon_state = "advflash" - origin_tech = list(TECH_COMBAT = 2, TECH_MAGNET = 2) - str_min = 3 - str_max = 8 diff --git a/code/game/objects/items/devices/flashlight.dm b/code/game/objects/items/devices/flashlight.dm deleted file mode 100644 index a5ccba75ddd35..0000000000000 --- a/code/game/objects/items/devices/flashlight.dm +++ /dev/null @@ -1,484 +0,0 @@ -#define FLASHLIGHT_ALWAYS_ON FLAG(0) -#define FLASHLIGHT_SINGLE_USE FLAG(1) -#define FLASHLIGHT_CANNOT_BLIND FLAG(2) - -/obj/item/device/flashlight - name = "flashlight" - desc = "A hand-held emergency light." - icon = 'icons/obj/lighting.dmi' - icon_state = "flashlight" - item_state = "flashlight" - w_class = ITEM_SIZE_SMALL - obj_flags = OBJ_FLAG_CONDUCTIBLE - slot_flags = SLOT_BELT - - matter = list(MATERIAL_PLASTIC = 50, MATERIAL_GLASS = 20) - - action_button_name = "Toggle Flashlight" - var/on = FALSE - var/activation_sound = 'sound/effects/flashlight.ogg' - var/flashlight_max_bright = 0.5 //brightness of light when on, must be no greater than 1. - var/flashlight_inner_range = 1 //inner range of light when on, can be negative - var/flashlight_outer_range = 3 //outer range of light when on, can be negative - var/flashlight_flags = EMPTY_BITFIELD // FLASHLIGHT_ bitflags - -/obj/item/device/flashlight/Initialize() - . = ..() - - set_flashlight() - update_icon() - -/obj/item/device/flashlight/on_update_icon() - if (flashlight_flags & FLASHLIGHT_ALWAYS_ON) - return // Prevent update_icon shennanigans with objects that won't have on/off variant sprites - - if(on) - icon_state = "[initial(icon_state)]-on" - else - icon_state = "[initial(icon_state)]" - -/obj/item/device/flashlight/attack_self(mob/user) - if (flashlight_flags & FLASHLIGHT_ALWAYS_ON) - to_chat(user, "You cannot toggle the [name].") - return 0 - - if(!isturf(user.loc)) - to_chat(user, "You cannot turn the [name] on while in this [user.loc].")//To prevent some lighting anomalities. - return 0 - - if (flashlight_flags & FLASHLIGHT_SINGLE_USE && on) - to_chat(user, "The [name] is already lit.") - return 0 - - on = !on - if(on && activation_sound) - playsound(get_turf(src), activation_sound, 75, 1) - set_flashlight() - update_icon() - user.update_action_buttons() - return 1 - -/obj/item/device/flashlight/proc/set_flashlight() - if (on) - set_light(flashlight_max_bright, flashlight_inner_range, flashlight_outer_range, 2, light_color) - else - set_light(0) - -/obj/item/device/flashlight/attack(mob/living/M as mob, mob/living/user as mob) - add_fingerprint(user) - if(on && user.zone_sel.selecting == BP_EYES) - - if((MUTATION_CLUMSY in user.mutations) && prob(50)) //too dumb to use flashlight properly - return ..() //just hit them in the head - - var/mob/living/carbon/human/H = M //mob has protective eyewear - if(istype(H)) - for(var/obj/item/clothing/C in list(H.head,H.wear_mask,H.glasses)) - if(istype(C) && (C.body_parts_covered & EYES)) - to_chat(user, "You're going to need to remove [C] first.") - return - - var/obj/item/organ/vision - if(!H.species.vision_organ || !H.should_have_organ(H.species.vision_organ)) - to_chat(user, "You can't find anything on [H] to direct [src] into!") - return - - vision = H.internal_organs_by_name[H.species.vision_organ] - if(!vision) - vision = H.species.has_organ[H.species.vision_organ] - to_chat(user, "\The [H] is missing \his [initial(vision.name)]!") - return - - user.visible_message("\The [user] directs [src] into [M]'s [vision.name].", \ - "You direct [src] into [M]'s [vision.name].") - - inspect_vision(vision, user) - - user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN) //can be used offensively - if (!(flashlight_flags & FLASHLIGHT_CANNOT_BLIND)) - M.flash_eyes() - else - return ..() - -/obj/item/device/flashlight/proc/inspect_vision(obj/item/organ/vision, mob/living/user) - var/mob/living/carbon/human/H = vision.owner - - if(H == user) //can't look into your own eyes buster - return - - if(!BP_IS_ROBOTIC(vision)) - - if(vision.owner.stat == DEAD || H.blinded) //mob is dead or fully blind - to_chat(user, "\The [H]'s pupils do not react to the light!") - return - if(MUTATION_XRAY in H.mutations) - to_chat(user, "\The [H]'s pupils give an eerie glow!") - if(vision.damage) - to_chat(user, "There's visible damage to [H]'s [vision.name]!") - else if(H.eye_blurry) - to_chat(user, "\The [H]'s pupils react slower than normally.") - if(H.getBrainLoss() > 15) - to_chat(user, "There's visible lag between left and right pupils' reactions.") - - var/list/pinpoint = list(/datum/reagent/tramadol/oxycodone=1,/datum/reagent/tramadol=5) - var/list/dilating = list(/datum/reagent/space_drugs=5,/datum/reagent/mindbreaker=1,/datum/reagent/adrenaline=1) - var/datum/reagents/ingested = H.get_ingested_reagents() - if(H.reagents.has_any_reagent(pinpoint) || ingested.has_any_reagent(pinpoint)) - to_chat(user, "\The [H]'s pupils are already pinpoint and cannot narrow any more.") - else if(H.shock_stage >= 30 || H.reagents.has_any_reagent(dilating) || ingested.has_any_reagent(dilating)) - to_chat(user, "\The [H]'s pupils narrow slightly, but are still very dilated.") - else - to_chat(user, "\The [H]'s pupils narrow.") - - //if someone wants to implement inspecting robot eyes here would be the place to do it. - -/obj/item/device/flashlight/upgraded - name = "\improper LED flashlight" - desc = "An energy efficient flashlight." - icon_state = "biglight" - item_state = "biglight" - flashlight_max_bright = 0.75 - flashlight_outer_range = 4 - -/obj/item/device/flashlight/flashdark - name = "flashdark" - desc = "A strange device manufactured with mysterious elements that somehow emits darkness. Or maybe it just sucks in light? Nobody knows for sure." - icon_state = "flashdark" - item_state = "flashdark" - w_class = ITEM_SIZE_NORMAL - flashlight_max_bright = -1 - flashlight_outer_range = 4 - flashlight_inner_range = 1 - flashlight_flags = FLASHLIGHT_CANNOT_BLIND - -/obj/item/device/flashlight/pen - name = "penlight" - desc = "A pen-sized light, used by medical staff." - icon_state = "penlight" - item_state = "" - obj_flags = OBJ_FLAG_CONDUCTIBLE - slot_flags = SLOT_EARS - w_class = ITEM_SIZE_TINY - flashlight_max_bright = 0.25 - flashlight_inner_range = 0.1 - flashlight_outer_range = 2 - -/obj/item/device/flashlight/maglight - name = "maglight" - desc = "A very, very heavy duty flashlight." - icon_state = "maglight" - item_state = "maglight" - force = 10 - base_parry_chance = 15 - attack_verb = list ("smacked", "thwacked", "thunked") - matter = list(MATERIAL_ALUMINIUM = 200, MATERIAL_GLASS = 50) - hitsound = "swing_hit" - flashlight_max_bright = 0.5 - flashlight_outer_range = 5 - -/******************************Lantern*******************************/ -/obj/item/device/flashlight/lantern - name = "lantern" - desc = "A mining lantern." - icon = 'icons/obj/lighting.dmi' - icon_state = "lantern" - item_state = "lantern" - force = 10 - attack_verb = list ("bludgeoned", "bashed", "whack") - w_class = ITEM_SIZE_NORMAL - obj_flags = OBJ_FLAG_CONDUCTIBLE - slot_flags = SLOT_BELT - matter = list(MATERIAL_STEEL = 200,MATERIAL_GLASS = 100) - flashlight_outer_range = 5 - -/obj/item/device/flashlight/lantern/on_update_icon() - ..() - if(on) - item_state = "lantern-on" - else - item_state = "lantern" - -/******************************Lantern*******************************/ - -/obj/item/device/flashlight/drone - name = "low-power flashlight" - desc = "A miniature lamp, that might be used by small robots." - icon_state = "penlight" - item_state = "" - obj_flags = OBJ_FLAG_CONDUCTIBLE - w_class = ITEM_SIZE_TINY - flashlight_max_bright = 0.25 - flashlight_inner_range = 0.1 - flashlight_outer_range = 2 - flashlight_flags = FLASHLIGHT_CANNOT_BLIND - - -// the desk lamps are a bit special -/obj/item/device/flashlight/lamp - name = "desk lamp" - desc = "A desk lamp with an adjustable mount." - icon_state = "lamp" - item_state = "lamp" - w_class = ITEM_SIZE_LARGE - obj_flags = OBJ_FLAG_CONDUCTIBLE - flashlight_max_bright = 0.3 - flashlight_inner_range = 2 - flashlight_outer_range = 5 - - on = 1 - -// green-shaded desk lamp -/obj/item/device/flashlight/lamp/green - desc = "A classic green-shaded desk lamp." - icon_state = "lampgreen" - item_state = "lampgreen" - light_color = "#ffc58f" - -/obj/item/device/flashlight/lamp/verb/toggle_light() - set name = "Toggle light" - set category = "Object" - set src in oview(1) - - if(!usr.stat) - attack_self(usr) - -// FLARES - -/obj/item/device/flashlight/flare - name = "flare" - desc = "A red standard-issue flare. There are instructions on the side reading 'pull cord, make light'." - w_class = ITEM_SIZE_TINY - light_color = "#e58775" - icon_state = "flare" - item_state = "flare" - action_button_name = null //just pull it manually, neckbeard. - var/fuel = 0 - var/on_damage = 7 - var/produce_heat = 1500 - activation_sound = 'sound/effects/flare.ogg' - flashlight_flags = FLASHLIGHT_SINGLE_USE - - flashlight_max_bright = 0.8 - flashlight_inner_range = 0.1 - flashlight_outer_range = 5 - -/obj/item/device/flashlight/flare/Initialize() - . = ..() - fuel = rand(4 MINUTES, 5 MINUTES) // Sorry for changing this so much but I keep under-estimating how long X number of ticks last in seconds.v - update_icon() - -/obj/item/device/flashlight/flare/Destroy() - . = ..() - STOP_PROCESSING(SSobj, src) - -/obj/item/device/flashlight/flare/Process() - if(produce_heat) - var/turf/T = get_turf(src) - if(T) - T.hotspot_expose(produce_heat, 5) - fuel = max(fuel - 1, 0) - if (fuel <= 0) - on = FALSE - if(!on) - update_damage() - set_flashlight() - update_icon() - STOP_PROCESSING(SSobj, src) - -/obj/item/device/flashlight/flare/attack_self(var/mob/user) - if(fuel <= 0) - to_chat(user,"\The [src] is spent.") - return 0 - - . = ..() - - if(.) - activate(user) - update_damage() - set_flashlight() - update_icon() - START_PROCESSING(SSobj, src) - -/obj/item/device/flashlight/flare/afterattack(var/obj/O, var/mob/user, var/proximity) - if(proximity && istype(O) && on) - O.HandleObjectHeating(src, user, 500) - ..() - -/obj/item/device/flashlight/flare/proc/activate(var/mob/user) - if(istype(user)) - user.visible_message("[user] pulls the cord on \the [src], activating it.", "You pull the cord on \the [src], activating it!") - -/obj/item/device/flashlight/flare/proc/update_damage() - if(on) - force = on_damage - damtype = DAMAGE_BURN - else - force = initial(force) - damtype = initial(damtype) - -/obj/item/device/flashlight/flare/on_update_icon() - ..() - if(!on && fuel <= 0) - icon_state = "[initial(icon_state)]-empty" - -//Glowsticks -/obj/item/device/flashlight/flare/glowstick - name = "green glowstick" - desc = "A military-grade glowstick." - w_class = 2.0 - color = "#49f37c" - icon_state = "glowstick" - item_state = "glowstick" - randpixel = 12 - produce_heat = 0 - activation_sound = 'sound/effects/glowstick.ogg' - - flashlight_max_bright = 0.6 - flashlight_inner_range = 0.1 - flashlight_outer_range = 3 - flashlight_flags = FLASHLIGHT_CANNOT_BLIND - - -/obj/item/device/flashlight/flare/glowstick/Initialize() - . = ..() - fuel = rand(1600, 2000) - light_color = color - -/obj/item/device/flashlight/flare/glowstick/on_update_icon() - item_state = "glowstick" - overlays.Cut() - if(fuel <= 0) - icon_state = "glowstick-empty" - on = FALSE - else if (on) - var/image/I = overlay_image(icon,"glowstick-on",color) - I.blend_mode = BLEND_ADD - overlays += I - item_state = "glowstick-on" - else - icon_state = "glowstick" - var/mob/M = loc - if(istype(M)) - if(M.l_hand == src) - M.update_inv_l_hand() - if(M.r_hand == src) - M.update_inv_r_hand() - -/obj/item/device/flashlight/flare/glowstick/activate(var/mob/user) - if(istype(user)) - user.visible_message("[user] cracks and shakes \the [src].", "You crack and shake \the [src], turning it on!") - -/obj/item/device/flashlight/flare/glowstick/red - name = "red glowstick" - color = "#fc0f29" - -/obj/item/device/flashlight/flare/glowstick/blue - name = "blue glowstick" - color = "#599dff" - -/obj/item/device/flashlight/flare/glowstick/orange - name = "orange glowstick" - color = "#fa7c0b" - -/obj/item/device/flashlight/flare/glowstick/yellow - name = "yellow glowstick" - color = "#fef923" - -/obj/item/device/flashlight/flare/glowstick/random - name = "glowstick" - desc = "A party-grade glowstick." - color = "#ff00ff" - -/obj/item/device/flashlight/flare/glowstick/random/New() - color = rgb(rand(50,255),rand(50,255),rand(50,255)) - ..() - -/obj/item/device/flashlight/slime - gender = PLURAL - name = "glowing slime extract" - desc = "A glowing ball of what appears to be amber." - icon = 'icons/obj/lighting.dmi' - icon_state = "floor1" //not a slime extract sprite but... something close enough! - item_state = "slime" - w_class = ITEM_SIZE_TINY - on = TRUE //Bio-luminesence has one setting, on. - flashlight_flags = FLASHLIGHT_ALWAYS_ON | FLASHLIGHT_CANNOT_BLIND - - flashlight_max_bright = 1 - flashlight_inner_range = 0.1 - flashlight_outer_range = 5 - -/obj/item/device/flashlight/slime/New() - ..() - -//hand portable floodlights for emergencies. Less bulky than the large ones. But also less light. Unused green variant in the sheet. - -/obj/item/device/flashlight/lamp/floodlamp - name = "flood lamp" - desc = "A portable emergency flood light with a ultra-bright LED." - icon = 'icons/obj/machines/floodlight.dmi' - icon_state = "floodlamp" - item_state = "lamp" - on = 0 - w_class = ITEM_SIZE_LARGE - obj_flags = OBJ_FLAG_CONDUCTIBLE | OBJ_FLAG_ROTATABLE - - flashlight_max_bright = 0.8 - flashlight_inner_range = 1 - flashlight_outer_range = 5 - -/obj/item/device/flashlight/lamp/floodlamp/green - icon_state = "greenfloodlamp" - -//Lava Lamps: Because we're already stuck in the 70ies with those fax machines. -/obj/item/device/flashlight/lamp/lava - name = "lava lamp" - desc = "A kitchy throwback decorative light. Noir Edition." - icon = 'icons/obj/lighting.dmi' - icon_state = "lavalamp" - on = 0 - action_button_name = "Toggle lamp" - flashlight_outer_range = 3 //range of light when on - matter = list(MATERIAL_ALUMINIUM = 250, MATERIAL_GLASS = 200) - flashlight_flags = FLASHLIGHT_CANNOT_BLIND - -/obj/item/device/flashlight/lamp/lava/on_update_icon() - overlays.Cut() - var/image/I = image(icon = icon, icon_state = "lavalamp-[on ? "on" : "off"]") - I.color = light_color - overlays += I - -/obj/item/device/flashlight/lamp/lava/red - desc = "A kitchy red decorative light." - light_color = COLOR_RED - -/obj/item/device/flashlight/lamp/lava/blue - desc = "A kitchy blue decorative light." - light_color = COLOR_BLUE - -/obj/item/device/flashlight/lamp/lava/cyan - desc = "A kitchy cyan decorative light." - light_color = COLOR_CYAN - -/obj/item/device/flashlight/lamp/lava/green - desc = "A kitchy green decorative light." - light_color = COLOR_GREEN - -/obj/item/device/flashlight/lamp/lava/orange - desc = "A kitchy orange decorative light." - light_color = COLOR_ORANGE - -/obj/item/device/flashlight/lamp/lava/purple - desc = "A kitchy purple decorative light." - light_color = COLOR_PURPLE -/obj/item/device/flashlight/lamp/lava/pink - desc = "A kitchy pink decorative light." - light_color = COLOR_PINK - -/obj/item/device/flashlight/lamp/lava/yellow - desc = "A kitchy yellow decorative light." - light_color = COLOR_YELLOW - -#undef FLASHLIGHT_ALWAYS_ON -#undef FLASHLIGHT_SINGLE_USE -#undef FLASHLIGHT_CANNOT_BLIND diff --git a/code/game/objects/items/devices/geiger.dm b/code/game/objects/items/devices/geiger.dm deleted file mode 100644 index a56e699132b79..0000000000000 --- a/code/game/objects/items/devices/geiger.dm +++ /dev/null @@ -1,88 +0,0 @@ -//Geiger counter -//Rewritten version of TG's geiger counter -//I opted to show exact radiation levels - -// Sound obtained then edited from here : https://freesound.org/people/leonelmail/sounds/328381/ -- Under creative commons 0 - -/obj/item/device/geiger - name = "geiger counter" - desc = "A handheld device used for detecting and measuring radiation in an area." - icon = 'icons/obj/geiger_counter.dmi' - icon_state = "geiger_off" - item_state = "multitool" - w_class = ITEM_SIZE_SMALL - action_button_name = "Toggle geiger counter" - var/scanning = 0 - var/radiation_count = 0 - var/datum/sound_token/sound_token - var/geiger_volume = 0 - var/sound_id - -/obj/item/device/geiger/Initialize() - . = ..() - sound_id = "[type]_[sequential_id(type)]" - -/obj/item/device/geiger/proc/update_sound(var/playing) - if(playing && !sound_token) - sound_token = GLOB.sound_player.PlayLoopingSound(src, sound_id, "sound/items/geiger.ogg", volume = geiger_volume, range = 4, falloff = 3, prefer_mute = TRUE) - else if(!playing && sound_token) - QDEL_NULL(sound_token) - -/obj/item/device/geiger/Destroy() - . = ..() - STOP_PROCESSING(SSobj, src) - update_sound(0) - -/obj/item/device/geiger/Process() - if(!scanning) - return - radiation_count = SSradiation.get_rads_at_turf(get_turf(src)) - update_icon() - -/obj/item/device/geiger/examine(mob/user) - . = ..() - var/msg = "[scanning ? "ambient" : "stored"] Radiation level: [radiation_count ? radiation_count : "0"] IU/s." - if(radiation_count > RAD_LEVEL_LOW) - to_chat(user, "[msg]") - else - to_chat(user, "[msg]") - -/obj/item/device/geiger/attack_self(var/mob/user) - scanning = !scanning - if(scanning) - START_PROCESSING(SSobj, src) - else - STOP_PROCESSING(SSobj, src) - update_icon() - to_chat(user, "[icon2html(src, user)] You switch [scanning ? "on" : "off"] [src].") - -/obj/item/device/geiger/on_update_icon() - if(!scanning) - icon_state = "geiger_off" - update_sound(0) - return 1 - - if(!sound_token) update_sound(1) - - switch(radiation_count) - if(null) icon_state = "geiger_on_1" - if(-INFINITY to RAD_LEVEL_LOW) - icon_state = "geiger_on_1" - geiger_volume = 0 - sound_token.SetVolume(geiger_volume) - if(RAD_LEVEL_LOW + 0.01 to RAD_LEVEL_MODERATE) - icon_state = "geiger_on_2" - geiger_volume = 10 - sound_token.SetVolume(geiger_volume) - if(RAD_LEVEL_MODERATE + 0.1 to RAD_LEVEL_HIGH) - icon_state = "geiger_on_3" - geiger_volume = 25 - sound_token.SetVolume(geiger_volume) - if(RAD_LEVEL_HIGH + 1 to RAD_LEVEL_VERY_HIGH) - icon_state = "geiger_on_4" - geiger_volume = 40 - sound_token.SetVolume(geiger_volume) - if(RAD_LEVEL_VERY_HIGH + 1 to INFINITY) - icon_state = "geiger_on_5" - geiger_volume = 60 - sound_token.SetVolume(geiger_volume) diff --git a/code/game/objects/items/devices/gps.dm b/code/game/objects/items/devices/gps.dm deleted file mode 100644 index 6c0c3f22d4831..0000000000000 --- a/code/game/objects/items/devices/gps.dm +++ /dev/null @@ -1,347 +0,0 @@ -var/global/list/all_gps_units = list() -/obj/item/device/gps - name = "global coordinate system" - desc = "A handheld relay used to triangulate the approximate co-ordinates of the device." - icon = 'icons/obj/locator.dmi' - icon_state = "gps" - item_state = "gps" - origin_tech = list(TECH_MATERIAL = 2, TECH_DATA = 2, TECH_BLUESPACE = 2) - matter = list(MATERIAL_ALUMINIUM = 1000, MATERIAL_PLASTIC = 750) - w_class = ITEM_SIZE_SMALL - - var/gps_tag = "GEN0" - var/emped = FALSE - /// Will not show other signals or emit its own signal if false. - var/tracking = FALSE - /// If true, can see farther, depending on get_map_levels(). - var/long_range = FALSE - /// If true, only GPS signals of the same Z level are shown. - var/local_mode = FALSE - /// If true, signal is not visible to other GPS devices. - var/hide_signal = FALSE - /// If it can toggle the above var. - var/can_hide_signal = FALSE - /// How the GPS marker should be handled. - var/is_special_gps_marker = FALSE - - var/mob/holder - var/is_in_processing_list = FALSE - var/list/tracking_devices - var/list/showing_tracked_names - var/obj/compass_holder/compass - var/list/decals - -// Mapped type for away site GPS. -/obj/item/device/gps/marker - is_special_gps_marker = TRUE - -/obj/item/device/gps/Initialize() - global.all_gps_units += src - . = ..() - name = "[initial(name)] ([gps_tag])" - GLOB.moved_event.register(holder, src, .proc/update_holder) - compass = new(src) - update_holder() - update_icon() - -/obj/item/device/gps/examine(mob/user, distance) - . = ..() - if(distance <= 1) - to_chat(user, SPAN_NOTICE("\The [src]'s screen shows: [fetch_coordinates()].")) - -/obj/item/device/gps/proc/fetch_coordinates() - var/turf/T = get_turf(src) - return T ? "[T.x]:[T.y]:[T.z]" : "N/A" - -/obj/item/device/gps/proc/check_visible_to_holder() - . = holder && (holder.l_hand == src || holder.r_hand == src) - -/obj/item/device/gps/proc/update_holder(var/force_clear = FALSE) - - if(holder && (force_clear || loc != holder)) - GLOB.moved_event.unregister(holder, src) - GLOB.dir_set_event.unregister(holder, src) - holder.client?.screen -= compass - holder = null - - if(!force_clear && istype(loc, /mob)) - holder = loc - GLOB.moved_event.register(holder, src, .proc/update_compass) - GLOB.dir_set_event.register(holder, src, .proc/update_compass) - - if(!force_clear && holder && tracking) - if(!is_in_processing_list) - START_PROCESSING(SSobj, src) - is_in_processing_list = TRUE - if(holder.client) - if(check_visible_to_holder()) - holder.client.screen |= compass - else - holder.client.screen -= compass - else - STOP_PROCESSING(SSobj, src) - is_in_processing_list = FALSE - if(holder?.client) - holder.client.screen -= compass - -/obj/item/device/gps/equipped_robot() - . = ..() - update_holder() - -/obj/item/device/gps/equipped() - . = ..() - update_holder() - -/obj/item/device/gps/Process() - if(!tracking) - is_in_processing_list = FALSE - return PROCESS_KILL - update_holder() - if(holder) - update_compass(TRUE) - -/obj/item/device/gps/Destroy() - STOP_PROCESSING(SSobj, src) - is_in_processing_list = FALSE - global.all_gps_units -= src - GLOB.moved_event.unregister(holder, src, .proc/update_holder) - update_holder(force_clear = TRUE) - QDEL_NULL(compass) - return ..() - -/obj/item/device/gps/proc/can_track(var/obj/item/device/gps/other, var/reachable_z_levels) - if(!other.tracking || other.emped || other.hide_signal) - return FALSE - - var/turf/origin = get_turf(src) - var/turf/target = get_turf(other) - if(!istype(origin) || !istype(target)) - return FALSE - if(origin.z == target.z) - return TRUE - if(local_mode) - return FALSE - - var/list/adding_sites - if(long_range) - adding_sites = (GLOB.using_map.station_levels|GLOB.using_map.contact_levels|GLOB.using_map.player_levels) - else - adding_sites = GetConnectedZlevels(origin.z) - - if(LAZYLEN(adding_sites)) - LAZYDISTINCTADD(reachable_z_levels, adding_sites) - return (target.z in reachable_z_levels) - -/obj/item/device/gps/proc/update_compass(var/update_compass_icon) - - compass.hide_waypoints(FALSE) - - var/turf/my_turf = get_turf(src) - for(var/thing in tracking_devices) - var/obj/item/device/gps/gps = locate(thing) - if(!istype(gps) || QDELETED(gps)) - LAZYREMOVE(tracking_devices, thing) - LAZYREMOVE(showing_tracked_names, thing) - continue - - var/turf/gps_turf = get_turf(gps) - var/gps_tag = LAZYACCESS(showing_tracked_names, thing) ? gps.gps_tag : null - if(istype(gps_turf)) - compass.set_waypoint("\ref[gps]", gps_tag, gps_turf.x, gps_turf.y, gps_turf.z, LAZYACCESS(tracking_devices, "\ref[gps]")) - if(can_track(gps) && my_turf && gps_turf != my_turf) - compass.show_waypoint("\ref[gps]") - - compass.rebuild_overlay_lists(update_compass_icon) - -/obj/item/device/gps/proc/toggle_tracking(var/mob/user, var/silent) - - if(emped) - if(!silent) - to_chat(user, SPAN_WARNING("\The [src] is busted!")) - return FALSE - - tracking = !tracking - if(tracking) - if(!is_in_processing_list) - is_in_processing_list = TRUE - START_PROCESSING(SSobj, src) - else - is_in_processing_list = FALSE - STOP_PROCESSING(SSobj, src) - - if(!silent) - if(tracking) - to_chat(user, SPAN_NOTICE("\The [src] is now tracking, and visible to other GPS devices.")) - else - to_chat(user, SPAN_NOTICE("\The [src] is no longer tracking, or visible to other GPS devices.")) - - update_compass() - update_holder() - update_icon() - -/obj/item/device/gps/emp_act(severity) - if(emped) // Without a fancy callback system, this will have to do. - return - if(tracking) - toggle_tracking(silent = TRUE) - /// In case emp_act gets called without any arguments. - var/severity_modifier = severity ? severity : 4 - var/duration = 5 MINUTES / severity_modifier - emped = TRUE - update_icon() - addtimer(CALLBACK(src, .proc/reset_emp), duration) - -/obj/item/device/gps/proc/reset_emp() - emped = FALSE - update_icon() - if(ismob(loc)) - to_chat(loc, SPAN_NOTICE("\The [src] appears to be functional again.")) - -/obj/item/device/gps/on_update_icon() - overlays.Cut() - if(emped) - overlays.Add("gps_emp") - else if(tracking) - overlays.Add("gps_on") - -/obj/item/device/gps/attack_self(mob/user) - ui_interact(user) - return TRUE - -/obj/item/device/gps/ui_data(mob/user, ui_key) - - var/turf/curr = get_turf(src) - var/area/my_area = get_area(src) - - . = list() - .["tracking"] = tracking - .["gps_tag"] = gps_tag - .["my_area_name"] = strip_improper(my_area.name) - .["hide_signal"] = hide_signal - .["curr_x"] = curr.x - .["curr_y"] = curr.y - .["curr_z"] = curr.z - .["local_mode"] = local_mode - - var/z_level_detection - if(long_range) - z_level_detection = (GLOB.using_map.station_levels|GLOB.using_map.contact_levels|GLOB.using_map.player_levels) - else - z_level_detection = GetConnectedZlevels(curr.z) - .["z_level_detection"] = z_level_detection - - var/list/gps_list = list() - for(var/obj/item/device/gps/G as anything in global.all_gps_units) - if(G == src || !can_track(G, z_level_detection)) - continue - - var/gps_data[0] - var/gps_ref = "\ref[G]" - gps_data["gps_ref"] = gps_ref - gps_data["gps_tag"] = G.gps_tag - gps_data["is_special_gps_marker"] = G.is_special_gps_marker - gps_data["being_tracked"] = !!(gps_ref in tracking_devices) - - var/square_colour = LAZYACCESS(tracking_devices, gps_ref) || COLOR_CYAN - gps_data["coloured_square"] = COLORED_SQUARE(square_colour) - - var/area/A = get_area(G) - gps_data["area_name"] = strip_improper(A.name) - - var/turf/T = get_turf(G) - gps_data["direction"] = get_compass_direction_string(curr, T) - gps_data["degrees"] = round(Get_Angle(curr,T)) - gps_data["distX"] = T.x - curr.x - gps_data["distY"] = T.y - curr.y - gps_data["distance"] = round(get_dist(curr, T), 10) - gps_data["local"] = (curr.z == T.z) - gps_data["x"] = T.x - gps_data["y"] = T.y - gps_list += list(gps_data) - - if(length(gps_list)) - .["gps_list"] = gps_list - else - .["no_signals"] = TRUE - -/obj/item/device/gps/ui_interact(mob/user, ui_key = "main", datum/nanoui/ui = null, force_open = 1, var/master_ui = null, var/datum/topic_state/state = GLOB.default_state) - - var/data = ui_data() - ui = SSnano.try_update_ui(user, src, ui_key, ui, data, force_open) - if(!ui) - ui = new(user, src, ui_key, "gps.tmpl", name, 500, 300, master_ui = master_ui, state = state) - ui.set_initial_data(data) - ui.open() - ui.set_auto_update(1) - -/obj/item/device/gps/OnTopic(var/mob/user, var/list/href_list) - - if(href_list["toggle_power"]) - toggle_tracking() - . = TOPIC_REFRESH - - if(href_list["track_label"]) - var/gps_ref = href_list["track_label"] - var/obj/item/device/gps/gps = locate(gps_ref) - if(istype(gps) && !QDELETED(gps) && !LAZYACCESS(showing_tracked_names, gps_ref)) - LAZYSET(showing_tracked_names, gps_ref, TRUE) - else - LAZYREMOVE(showing_tracked_names, gps_ref) - to_chat(user, SPAN_NOTICE("\The [src] is [LAZYACCESS(showing_tracked_names, gps_ref) ? "now showing" : "no longer showing"] labels for [gps.gps_tag].")) - . = TOPIC_REFRESH - - if(href_list["stop_track"]) - var/gps_ref = href_list["stop_track"] - var/obj/item/device/gps/gps = locate(gps_ref) - compass.clear_waypoint(gps_ref) - LAZYREMOVE(tracking_devices, gps_ref) - LAZYREMOVE(showing_tracked_names, gps_ref) - if(istype(gps) && !QDELETED(gps)) - to_chat(user, SPAN_NOTICE("\The [src] is no longer tracking [gps.gps_tag].")) - update_compass() - . = TOPIC_REFRESH - - if(href_list["start_track"]) - var/gps_ref = href_list["start_track"] - var/obj/item/device/gps/gps = locate(gps_ref) - if(istype(gps) && !QDELETED(gps)) - LAZYSET(tracking_devices, gps_ref, COLOR_SILVER) - LAZYSET(showing_tracked_names, gps_ref, TRUE) - to_chat(user, SPAN_NOTICE("\The [src] is now tracking [gps.gps_tag].")) - update_compass() - . = TOPIC_REFRESH - - if(href_list["track_color"]) - var/obj/item/device/gps/gps = locate(href_list["track_color"]) - if(istype(gps) && !QDELETED(gps)) - var/new_colour = input("Enter a new tracking color.", "GPS Waypoint Color") as color|null - if(new_colour && istype(gps) && !QDELETED(gps) && holder == user && !user.incapacitated()) - to_chat(user, SPAN_NOTICE("You adjust the colour \the [src] is using to highlight [gps.gps_tag].")) - LAZYSET(tracking_devices, href_list["track_color"], new_colour) - update_compass() - . = TOPIC_REFRESH - - if(href_list["tag"]) - /// Used to hold the sanitised input. - var/a = input("Please enter desired tag.", name, gps_tag) as text - a = uppertext(copytext(sanitize(a), 1, 11)) - if(in_range(src, user)) - gps_tag = a - name = "[initial(name)] ([gps_tag])" - to_chat(user, SPAN_NOTICE("You set your GPS's tag to '[gps_tag]'.")) - . = TOPIC_REFRESH - - if(href_list["range"]) - local_mode = !local_mode - to_chat(user, SPAN_NOTICE("You set the signal receiver to [local_mode ? "'NARROW'" : "'BROAD'"].")) - . = TOPIC_REFRESH - - if(href_list["hide"]) - if(!can_hide_signal) - return - hide_signal = !hide_signal - to_chat(user, SPAN_NOTICE("You set the device to [hide_signal ? "not " : ""]broadcast a signal while scanning for other signals.")) - . = TOPIC_REFRESH - -/obj/item/device/gps/AltClick(mob/user) - toggle_tracking(user) diff --git a/code/game/objects/items/devices/hacktool.dm b/code/game/objects/items/devices/hacktool.dm deleted file mode 100644 index 4e1501e04a571..0000000000000 --- a/code/game/objects/items/devices/hacktool.dm +++ /dev/null @@ -1,96 +0,0 @@ -/obj/item/device/multitool/hacktool - var/is_hacking = 0 - var/max_known_targets - - var/in_hack_mode = 0 - var/list/known_targets - var/list/supported_types - var/datum/topic_state/default/must_hack/hack_state - -/obj/item/device/multitool/hacktool/New() - ..() - known_targets = list() - max_known_targets = 5 + rand(1,3) - supported_types = list(/obj/machinery/door/airlock) - hack_state = new(src) - -/obj/item/device/multitool/hacktool/Destroy() - for(var/T in known_targets) - var/atom/target = T - GLOB.destroyed_event.unregister(target, src) - known_targets.Cut() - qdel(hack_state) - hack_state = null - return ..() - -/obj/item/device/multitool/hacktool/attackby(var/obj/W, var/mob/user) - if(isScrewdriver(W)) - in_hack_mode = !in_hack_mode - playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1) - else - ..() - -/obj/item/device/multitool/hacktool/resolve_attackby(atom/A, mob/user) - sanity_check() - - if(!in_hack_mode || !attempt_hack(user, A)) //will still show the unable to hack message, oh well - return ..() - - A.ui_interact(user, state = hack_state) - return 1 - -/obj/item/device/multitool/hacktool/proc/attempt_hack(var/mob/user, var/atom/target) - if(is_hacking) - to_chat(user, "You are already hacking!") - return 1 - if(!is_type_in_list(target, supported_types)) - to_chat(user, "[icon2html(src, user)] Unable to hack this target.") - return 0 - var/found = known_targets.Find(target) - if(found) - known_targets.Swap(1, found) // Move the last hacked item first - return 1 - - to_chat(user, "You begin hacking \the [target]...") - is_hacking = 1 - // Hackin takes roughly 15-25 seconds. Fairly small random span to avoid people simply aborting and trying again. - var/hack_result = do_after(user, (15 SECONDS + rand(0, 5 SECONDS) + rand(0, 5 SECONDS)), target, do_flags = (DO_DEFAULT | DO_BOTH_UNIQUE_ACT) & ~DO_SHOW_PROGRESS) - is_hacking = 0 - - if(hack_result && in_hack_mode) - to_chat(user, "Your hacking attempt was succesful!") - user.playsound_local(get_turf(src), 'sound/piano/A#6.ogg', 50) - known_targets.Insert(1, target) // Insert the newly hacked target first, - GLOB.destroyed_event.register(target, src, /obj/item/device/multitool/hacktool/proc/on_target_destroy) - else - to_chat(user, "Your hacking attempt failed!") - return 1 - -/obj/item/device/multitool/hacktool/proc/sanity_check() - if(max_known_targets < 1) max_known_targets = 1 - // Cut away the oldest items if the capacity has been reached - if(known_targets.len > max_known_targets) - for(var/i = (max_known_targets + 1) to known_targets.len) - var/atom/A = known_targets[i] - GLOB.destroyed_event.unregister(A, src) - known_targets.Cut(max_known_targets + 1) - -/obj/item/device/multitool/hacktool/proc/on_target_destroy(var/target) - known_targets -= target - -/datum/topic_state/default/must_hack - var/obj/item/device/multitool/hacktool/hacktool - check_access = FALSE - -/datum/topic_state/default/must_hack/New(var/hacktool) - src.hacktool = hacktool - ..() - -/datum/topic_state/default/must_hack/Destroy() - hacktool = null - return ..() - -/datum/topic_state/default/must_hack/can_use_topic(var/src_object, var/mob/user) - if(!hacktool || !hacktool.in_hack_mode || !(src_object in hacktool.known_targets)) - return STATUS_CLOSE - return ..() diff --git a/code/game/objects/items/devices/holowarrant.dm b/code/game/objects/items/devices/holowarrant.dm deleted file mode 100644 index 2f5b809ad52a9..0000000000000 --- a/code/game/objects/items/devices/holowarrant.dm +++ /dev/null @@ -1,135 +0,0 @@ -/obj/item/device/holowarrant - name = "warrant projector" - desc = "The practical paperwork replacement for the officer on the go." - icon = 'icons/obj/holowarrant.dmi' - icon_state = "holowarrant" - item_state = "holowarrant" - throwforce = 5 - w_class = ITEM_SIZE_SMALL - throw_speed = 4 - throw_range = 10 - obj_flags = OBJ_FLAG_CONDUCTIBLE - slot_flags = SLOT_BELT - req_access = list(list(access_heads, access_security)) - var/datum/computer_file/data/warrant/active - -//look at it -/obj/item/device/holowarrant/examine(mob/user, distance) - . = ..() - if(active) - to_chat(user, "It's a holographic warrant for '[active.fields["namewarrant"]]'.") - if(distance <= 1) - show_content(user) - else - to_chat(user, "You have to be closer if you want to read it.") - -// an active warrant with access authorized grants access -/obj/item/device/holowarrant/GetAccess() - . = list() - - if(!active) - return - - if(active.archived) - return - - . |= active.fields["access"] - -//hit yourself with it -/obj/item/device/holowarrant/attack_self(mob/living/user as mob) - active = null - var/list/warrants = list() - for(var/datum/computer_file/data/warrant/W in GLOB.all_warrants) - if(!W.archived) - warrants["[W.fields["namewarrant"]] ([capitalize(W.fields["arrestsearch"])])"] = W - if(warrants.len == 0) - to_chat(user,"There are no warrants available") - return - var/datum/computer_file/data/warrant/temp - temp = input(user, "Which warrant would you like to load?") as null|anything in warrants - if (!temp) - update_icon() - return - temp = warrants[temp] - active = temp - update_icon() - -/obj/item/device/holowarrant/attackby(obj/item/W, mob/user) - if(active) - var/obj/item/card/id/I = W.GetIdCard() - if(I && check_access_list(I.GetAccess())) - var/choice = alert(user, "Would you like to authorize this warrant?","Warrant authorization","Yes","No") - if(choice == "Yes") - active.fields["auth"] = "[I.registered_name] - [I.assignment ? I.assignment : "(Unknown)"]" - user.visible_message("You swipe \the [I] through the [src].", \ - "[user] swipes \the [I] through the [src].") - broadcast_security_hud_message("\A [active.fields["arrestsearch"]] warrant for [active.fields["namewarrant"]] has been authorized by [I.assignment ? I.assignment+" " : ""][I.registered_name].", src) - else - to_chat(user, "A red \"Access Denied\" light blinks on \the [src]") - return 1 - ..() - -//hit other people with it -/obj/item/device/holowarrant/attack(mob/living/carbon/M as mob, mob/living/carbon/user as mob) - user.visible_message("[user] holds up a warrant projector and shows the contents to [M].", \ - "You show the warrant to [M].") - M.examinate(src) - -/obj/item/device/holowarrant/on_update_icon() - if(active) - icon_state = "holowarrant_filled" - else - icon_state = "holowarrant" - -/obj/item/device/holowarrant/proc/show_content(mob/user, forceshow) - if(!active) - return - if(active.fields["arrestsearch"] == "arrest") - var/output = {" - [active.fields["namewarrant"]] -
              SCG SFP Warrant Tracker System
              -
              - Issued in the jurisdiction of the
              - [GLOB.using_map.boss_name] in [GLOB.using_map.system_name]
              -
              - ARREST WARRANT

              -
              - This document serves as authorization and notice for the arrest of _[active.fields["namewarrant"]]____ for the crime(s) of:
              [active.fields["charges"]]
              -
              - Vessel or habitat: _[GLOB.using_map.station_name]____
              -
              _[active.fields["auth"]]____
              - Person authorizing arrest
              - - "} - - show_browser(user, output, "window=Warrant for the arrest of [active.fields["namewarrant"]]") - if(active.fields["arrestsearch"] == "search") - var/output= {" - Search Warrant: [active.fields["namewarrant"]] -
              SCG SFP Warrant Tracker System
              -
              - Issued in the jurisdiction of the
              - [GLOB.using_map.boss_name] in [GLOB.using_map.system_name]
              -
              - SEARCH WARRANT

              -
              - Suspect's/location name: [active.fields["namewarrant"]]
              -
              - For the following reasons: [active.fields["charges"]]
              -
              - Warrant issued by: [active.fields ["auth"]]
              -
              - Vessel or habitat: _[GLOB.using_map.station_name]____
              -
              -
              The Security Officer(s) bearing this Warrant are hereby authorized by the Issuer to conduct a one time lawful search of the Suspect's person/belongings/premises and/or Department for any items and materials that could be connected to the suspected criminal act described below, pending an investigation in progress.
              -
              - The Security Officer(s) are obligated to remove any and all such items from the Suspects posession and/or Department and file it as evidence.
              -
              - The Suspect/Department staff is expected to offer full co-operation.
              -
              - In the event of the Suspect/Department staff attempting to resist/impede this search or flee, they must be taken into custody immediately!
              -
              - All confiscated items must be filed and taken to Evidence!

              - - "} - show_browser(user, output, "window=Search warrant for [active.fields["namewarrant"]]") diff --git a/code/game/objects/items/devices/inducer.dm b/code/game/objects/items/devices/inducer.dm deleted file mode 100644 index ed57f2fc80469..0000000000000 --- a/code/game/objects/items/devices/inducer.dm +++ /dev/null @@ -1,205 +0,0 @@ -/obj/item/inducer - name = "inducer" - desc = "A tool for inductively charging internal power cells." - icon = 'icons/obj/tools.dmi' - icon_state = "inducer-sci" - item_state = "inducer-sci" - force = 7 - var/powertransfer = 500 - var/coefficient = 0.9 - var/opened = FALSE - var/failsafe = 0 - var/obj/item/cell/cell = /obj/item/cell/standard - var/recharging = FALSE - origin_tech = list(TECH_POWER = 6, TECH_ENGINEERING = 4) - matter = list(MATERIAL_STEEL = 1000, MATERIAL_GLASS = 700) - slot_flags = SLOT_BELT - -/obj/item/inducer/Initialize() - . = ..() - if(ispath(cell)) - cell = new cell(src) - update_icon() - -/obj/item/inducer/proc/induce(obj/item/cell/target) - var/obj/item/cell/MyC = get_cell() - var/missing = target.maxcharge - target.charge - var/totransfer = min(min(MyC.charge,powertransfer), missing) - target.give(totransfer*coefficient) - MyC.use(totransfer) - MyC.update_icon() - target.update_icon() - -/obj/item/inducer/get_cell() - return cell - -/obj/item/inducer/emp_act(severity) - ..() - if(cell) - cell.emp_act(severity) - -/obj/item/inducer/afterattack(obj/O, mob/living/carbon/user, var/proximity) - if (!proximity || user.a_intent == I_HURT || CannotUse(user) || !recharge(O, user)) - return ..() - -/obj/item/inducer/proc/CannotUse(mob/user) - var/obj/item/cell/my_cell = get_cell() - if(!istype(my_cell)) - to_chat(user, "\The [src] doesn't have a power cell installed!") - return TRUE - if(my_cell.percent() <= 0) - to_chat(user, "\The [src]'s battery is dead!") - return TRUE - return FALSE - - -/obj/item/inducer/attackby(obj/item/W, mob/user) - if(isScrewdriver(W)) - opened = !opened - to_chat(user, "You [opened ? "open" : "close"] the battery compartment.") - update_icon() - if(istype(W, /obj/item/cell)) - if (istype(W, /obj/item/cell/device)) - to_chat(user, "\The [src] only takes full-size power cells.") - return - if(opened) - if(!cell) - if(!user.unEquip(W, src)) - return - to_chat(user, "You insert \the [W] into \the [src].") - cell = W - update_icon() - return - else - to_chat(user, "\The [src] already has \a [cell] installed!") - return - if(CannotUse(user) || recharge(W, user)) - return - return ..() - -/obj/item/inducer/proc/recharge(atom/A, mob/user) - if(!isturf(A) && user.loc == A) - return FALSE - if(recharging) - return TRUE - else - recharging = TRUE - var/obj/item/cell/MyC = get_cell() - var/obj/item/cell/C = A.get_cell() - var/obj/O - if(istype(A, /obj)) - O = A - if(C) - var/length = 10 - var/datum/effect/effect/system/spark_spread/sparks = new /datum/effect/effect/system/spark_spread() - sparks.set_up(1, 1, user.loc) - sparks.start() - if(C.charge >= C.maxcharge) - to_chat(user, SPAN_WARNING("\The [A] is already fully charged!")) - recharging = FALSE - return TRUE - user.visible_message( - SPAN_NOTICE("\The [user] starts recharging \the [A] with \the [src]."), - SPAN_NOTICE("You start recharging \the [A] with \the [src].") - ) - if (istype(A, /obj/item/gun/energy)) - length = 3 SECONDS - if (user.get_skill_value(SKILL_WEAPONS) <= SKILL_ADEPT) - length += rand(1, 3) SECONDS - if (user.get_skill_value(SKILL_ELECTRICAL) < SKILL_ADEPT) - length += rand(4, 6) SECONDS - if(MyC.charge > max(0, MyC.charge*failsafe) && do_after(user, length, A, DO_PUBLIC_UNIQUE)) - if(CannotUse(user)) - return TRUE - if(QDELETED(C)) - return TRUE - sparks.start() - induce(C) - user.visible_message( - SPAN_NOTICE("\The [user] recharges \the [A] with \the [src]."), - SPAN_NOTICE("You recharge \the [A] with \the [src].") - ) - if(O) - O.update_icon() - else - qdel(sparks) - recharging = FALSE - return TRUE - else - to_chat(user, SPAN_WARNING("No cell detected!")) - recharging = FALSE - -// used only on the borg one, but here in case we invent inducer guns idk -/obj/item/inducer/proc/safety() - if (failsafe) - return 1 - else - return 0 - -/obj/item/inducer/attack(mob/M, mob/user) - return - - -/obj/item/inducer/attack_self(mob/user) - if(opened && cell) - user.visible_message("\The [user] removes \the [cell] from \the [src]!","You remove \the [cell].") - cell.update_icon() - user.put_in_hands(cell) - cell = null - update_icon() - - -/obj/item/inducer/examine(mob/living/M) - . = ..() - var/obj/item/cell/MyC = get_cell() - if(MyC) - to_chat(M, "Its display shows: [MyC.percent()]%.") - else - to_chat(M,"Its display is dark.") - if(opened) - to_chat(M,"Its battery compartment is open.") - -/obj/item/inducer/on_update_icon() - overlays.Cut() - if(opened) - if(!get_cell()) - overlays += image(icon, "inducer-nobat") - else - overlays += image(icon,"inducer-bat") - -/obj/item/inducer/Destroy() - . = ..() - if(!ispath(cell)) - QDEL_NULL(cell) - -// module version - -/obj/item/inducer/borg - icon_state = "inducer-engi" - item_state = "inducer-engi" - failsafe = 0.2 - cell = null - -/obj/item/inducer/borg/attackby(obj/item/W, mob/user) - if(isScrewdriver(W)) - return - . = ..() - -/obj/item/inducer/borg/on_update_icon() - . = ..() - overlays += image("icons/obj/guns/gui.dmi","safety[safety()]") - -/obj/item/inducer/borg/verb/toggle_safety(var/mob/user) - set src in usr - set category = "Object" - set name = "Toggle Inducer Safety" - if (safety()) - failsafe = 0 - else - failsafe = 0.2 - update_icon() - if(user) - to_chat(user, "You switch your battery output failsafe [safety() ? "on" : "off" ].") - -/obj/item/inducer/borg/get_cell() - return loc ? loc.get_cell() : null diff --git a/code/game/objects/items/devices/lightreplacer.dm b/code/game/objects/items/devices/lightreplacer.dm deleted file mode 100644 index a625dcfc27e76..0000000000000 --- a/code/game/objects/items/devices/lightreplacer.dm +++ /dev/null @@ -1,235 +0,0 @@ - -// Light Replacer (LR) -// -// ABOUT THE DEVICE -// -// This is a device supposedly to be used by Janitors and Janitor Cyborgs which will -// allow them to easily replace lights. This was mostly designed for Janitor Cyborgs since -// they don't have hands or a way to replace lightbulbs. -// -// HOW IT WORKS -// -// You attack a light fixture with it, if the light fixture is broken it will replace the -// light fixture with a working light; the broken light is then placed on the floor for the -// user to then pickup with a trash bag. If it's empty then it will just place a light in the fixture. -// -// HOW TO REFILL THE DEVICE -// -// It can be manually refilled or by clicking on a storage item containing lights. -// If it's part of a robot module, it will charge when the Robot is inside a Recharge Station. -// -// EMAGGED FEATURES -// -// NOTICE: The Cyborg cannot use the emagged Light Replacer and the light's explosion was nerfed. It cannot create holes in the station anymore. -// -// I'm not sure everyone will react the emag's features so please say what your opinions are of it. -// -// When emagged it will rig every light it replaces, which will explode when the light is on. -// This is VERY noticable, even the device's name changes when you emag it so if anyone -// examines you when you're holding it in your hand, you will be discovered. -// It will also be very obvious who is setting all these lights off, since only Janitor Borgs and Janitors have easy -// access to them, and only one of them can emag their device. -// -// The explosion cannot insta-kill anyone with 30% or more health. - - -/obj/item/device/lightreplacer - name = "light replacer" - desc = "A lightweight automated device, capable of interfacing with and rapidly replacing standard light installations." - icon = 'icons/obj/janitor.dmi' - icon_state = "lightreplacer0" - item_state = "electronic" - - obj_flags = OBJ_FLAG_CONDUCTIBLE - slot_flags = SLOT_BELT - origin_tech = list(TECH_MAGNET = 3, TECH_MATERIAL = 2) - - var/max_uses = 32 - var/uses = 32 - var/emagged = FALSE - var/charge = 0 - /// The lighting tone to use for placed light bulbs. One of `LIGHT_COLOR_*` or `LIGHT_REPLACE_*`, or a valid hex color code. Default `LIGHT_REPLACE_RANDOM`. - var/lighting_tone = LIGHT_REPLACE_RANDOM - -/obj/item/device/lightreplacer/examine(mob/user, distance) - . = ..() - if(distance <= 2) - to_chat(user, "It has [uses] light\s remaining.") - switch (lighting_tone) - if (LIGHT_REPLACE_AREA) - to_chat(user, "It is configured to match the room's blueprints for bulb color and tone.") - if (LIGHT_REPLACE_EXISTING) - to_chat(user, "It is configured to match the replaced bulb's color and tone.") - if (LIGHT_REPLACE_RANDOM) - to_chat(user, "It is configured to print bulbs in random tones.") - else - to_chat(user, "It is configured to print bulbs in this color: ") - -/obj/item/device/lightreplacer/resolve_attackby(var/atom/A, mob/user) - - //Check for lights in a container, refilling our charges. - if(istype(A, /obj/item/storage)) - var/obj/item/storage/S = A - var/amt_inserted = 0 - var/turf/T = get_turf(user) - for(var/obj/item/light/L in S.contents) - if(!user.stat && src.uses < src.max_uses && L.status == LIGHT_OK) - src.AddUses(1) - amt_inserted++ - S.remove_from_storage(L, T, 1) - qdel(L) - S.finish_bulk_removal() - if(amt_inserted) - to_chat(user, "You insert [amt_inserted] light\s into \The [src]. It has [uses] light\s remaining.") - add_fingerprint(user) - return - - //Actually replace the light. - if(istype(A, /obj/machinery/light)) - var/obj/machinery/light/L = A - if(isliving(user)) - var/mob/living/U = user - ReplaceLight(L, U) - add_fingerprint(user) - return - . = ..() - -/obj/item/device/lightreplacer/attackby(obj/item/W, mob/user) - if(istype(W, /obj/item/stack/material) && W.get_material_name() == MATERIAL_GLASS) - var/obj/item/stack/G = W - if(uses >= max_uses) - to_chat(user, "[src.name] is full.") - return - else if(G.use(1)) - AddUses(16) //Autolathe converts 1 sheet into 16 lights. - to_chat(user, "You insert a piece of glass into \the [src.name]. You have [uses] light\s remaining.") - return - else - to_chat(user, "You need one sheet of glass to replace lights.") - - if(istype(W, /obj/item/light)) - var/obj/item/light/L = W - if(L.status == LIGHT_OK) - if(uses < max_uses) - if(!user.unEquip(L)) - return - AddUses(1) - to_chat(user, "You insert \the [L.name] into \the [src.name]. You have [uses] light\s remaining.") - qdel(L) - return - else - to_chat(user, "You need a working light.") - return - -/obj/item/device/lightreplacer/attack_self(mob/user) - /* // This would probably be a bit OP. If you want it though, uncomment the code. - if(isrobot(user)) - var/mob/living/silicon/robot/R = user - if(R.emagged) - src.Emag() - to_chat(usr, "You shortcircuit the [src].") - return - */ - to_chat(usr, "It has [uses] lights remaining.") - -/obj/item/device/lightreplacer/on_update_icon() - icon_state = "lightreplacer[emagged]" - - -/obj/item/device/lightreplacer/attack_self(mob/user) - var/selection = input(user, "Select a color, tone, or matching option:", "Light Replace Color", LIGHT_REPLACE_OPTIONS[1]) in LIGHT_REPLACE_OPTIONS - if (!selection) - return - switch (selection) - if ("Random (Default)") - lighting_tone = LIGHT_REPLACE_RANDOM - to_chat(user, SPAN_NOTICE("You configure \the [src] to print bulbs in random tones.")) - if ("Match Blueprint") - lighting_tone = LIGHT_REPLACE_AREA - to_chat(user, SPAN_NOTICE("You configure \the [src] to match the room's blueprints for bulb color and tone.")) - if ("Match Existing") - lighting_tone = LIGHT_REPLACE_EXISTING - to_chat(user, SPAN_NOTICE("You configure \the [src] to match the replaced bulb's color and tone.")) - if ("Warm") - lighting_tone = LIGHT_COLOUR_WARM - to_chat(user, SPAN_NOTICE("You configure \the [src] to print bulbs in warm tones.")) - if ("Cool") - lighting_tone = LIGHT_COLOUR_COOL - to_chat(user, SPAN_NOTICE("You configure \the [src] to print bulbs in cool tones.")) - if ("White") - lighting_tone = LIGHT_COLOUR_WHITE - to_chat(user, SPAN_NOTICE("You configure \the [src] to print bulbs in white tones.")) - if ("Custom") - var/new_lighting_tone = input(user, "Select a color:", "Light Replace Color") as color - if (!new_lighting_tone) - return - lighting_tone = new_lighting_tone - to_chat(user, SPAN_NOTICE("You configure \the [src] to print bulbs in the color: ")) - - -/obj/item/device/lightreplacer/proc/Use(var/mob/user) - - playsound(src.loc, 'sound/machines/click.ogg', 50, 1) - AddUses(-1) - return 1 - -// Negative numbers will subtract -/obj/item/device/lightreplacer/proc/AddUses(var/amount = 1) - uses = min(max(uses + amount, 0), max_uses) - -/obj/item/device/lightreplacer/proc/Charge(var/mob/user, var/amount = 1) - charge += amount - if(charge > 6) - AddUses(1) - charge = 0 - -/obj/item/device/lightreplacer/proc/ReplaceLight(var/obj/machinery/light/target, var/mob/living/U) - - if(target.get_status() == LIGHT_OK) - to_chat(U, "There is a working [target.get_fitting_name()] already inserted.") - else if(!CanUse(U)) - to_chat(U, "\The [src]'s refill light blinks red.") - else if(Use(U)) - to_chat(U, "You replace the [target.get_fitting_name()] with the [src].") - - var/bulb_color = null - if (lighting_tone == LIGHT_REPLACE_AREA) - bulb_color = target.get_color_from_area() - else if (lighting_tone == LIGHT_REPLACE_EXISTING) - bulb_color = target.lightbulb?.get_color() - else if (lighting_tone == LIGHT_REPLACE_RANDOM) - bulb_color = pick(LIGHT_STANDARD_COLORS) - else - bulb_color = lighting_tone - if (!bulb_color) - bulb_color = pick(LIGHT_STANDARD_COLORS) - - if(target.lightbulb) - var/obj/item/bulb = target.lightbulb - target.remove_bulb() - if (isrobot(U)) - qdel(bulb) - - var/obj/item/light/L = new target.light_type(target, bulb_color) - if (emagged) - log_and_message_admins("used an emagged light replacer.", U) - L.create_reagents(5) - L.reagents.add_reagent(/datum/reagent/toxin/phoron, 5) - target.insert_bulb(L) - - -/obj/item/device/lightreplacer/emag_act(var/remaining_charges, var/mob/user) - emagged = !emagged - playsound(src.loc, "sparks", 100, 1) - update_icon() - return 1 - -//Can you use it? - -/obj/item/device/lightreplacer/proc/CanUse(var/mob/living/user) - src.add_fingerprint(user) - //Not sure what else to check for. Maybe if clumsy? - if(uses > 0) - return 1 - else - return 0 diff --git a/code/game/objects/items/devices/megaphone.dm b/code/game/objects/items/devices/megaphone.dm deleted file mode 100644 index f59600962f00a..0000000000000 --- a/code/game/objects/items/devices/megaphone.dm +++ /dev/null @@ -1,76 +0,0 @@ -/obj/item/device/megaphone - name = "megaphone" - desc = "A device used to project your voice. Loudly." - icon = 'icons/obj/megaphone.dmi' - icon_state = "megaphone" - item_state = "radio" - w_class = ITEM_SIZE_SMALL - obj_flags = OBJ_FLAG_CONDUCTIBLE - - var/spamcheck = 0 - var/emagged = FALSE - var/insults = 0 - var/list/insultmsg = list("FUCK EVERYONE!", "I'M A TATER!", "ALL SECURITY TO SHOOT ME ON SIGHT!", "I HAVE A BOMB!", "CAPTAIN IS A COMDOM!", "FOR THE SYNDICATE!") - -/obj/item/device/megaphone/attack_self(mob/living/user as mob) - if (user.client) - if(user.client.prefs.muted & MUTE_IC) - to_chat(src, "You cannot speak in IC (muted).") - return - if(user.silent) - return - if(spamcheck) - to_chat(user, "\The [src] needs to recharge!") - return - - var/message = sanitize(input(user, "Shout a message?", "Megaphone", null) as text) - var/datum/language/lang - - if(!message) - return - - lang = user.parse_language(message) - if(lang) - message = copytext_char(message, 2 + length_char(lang.key)) - else - lang = user.get_default_language() - - if(lang.flags & (NONVERBAL | SIGNLANG)) - to_chat(user, SPAN_WARNING("You can't use sign language!")) - return - - message = trim_left(message) - message = capitalize(message) - var/list/rec = list() - if ((src.loc == user && usr.stat == 0)) - if(emagged) - if(insults) - var/picked = pick(insultmsg) - for(var/mob/O in (viewers(user))) - O.hear_say(picked, "broadcasts", lang, null, 0, user, null, null, 6) - if(O.client) - rec |= O.client - - INVOKE_ASYNC(user, /atom/movable/proc/animate_chat, picked, lang, 0, rec, 5 SECONDS, 1) - insults-- - else - to_chat(user, "*BZZZZzzzzzt*") - else - for(var/mob/O in (viewers(user))) - O.hear_say(message, "broadcasts", lang, null, 0, user, null, null, 6) - if(O.client) - rec |= O.client - - INVOKE_ASYNC(user, /atom/movable/proc/animate_chat, message, lang, 0, rec, 5 SECONDS, 1) - - spamcheck = 1 - spawn(20) - spamcheck = 0 - return - -/obj/item/device/megaphone/emag_act(var/remaining_charges, var/mob/user) - if(!emagged) - to_chat(user, "You overload \the [src]'s voice synthesizer.") - emagged = TRUE - insults = rand(1, 3)//to prevent dickflooding - return 1 diff --git a/code/game/objects/items/devices/modkit.dm b/code/game/objects/items/devices/modkit.dm deleted file mode 100644 index 1fd0acf9341af..0000000000000 --- a/code/game/objects/items/devices/modkit.dm +++ /dev/null @@ -1,66 +0,0 @@ -#define MODKIT_HELMET 1 -#define MODKIT_SUIT 2 -#define MODKIT_FULL 3 - -/obj/item/device/modkit - name = "hardsuit modification kit" - desc = "A kit containing all the needed tools and parts to modify a hardsuit for another user." - icon = 'icons/obj/modkit.dmi' - icon_state = "modkit" - var/parts = MODKIT_FULL - var/target_species = SPECIES_HUMAN - - var/list/permitted_types = list( - /obj/item/clothing/head/helmet/space/void, - /obj/item/clothing/suit/space/void - ) - -/obj/item/device/modkit/afterattack(obj/O, mob/user as mob, proximity) - if(!proximity) - return - - if (!target_species) - return //it shouldn't be null, okay? - - if(!parts) - to_chat(user, "This kit has no parts for this modification left.") - qdel(src) - return - - var/allowed = 0 - for (var/permitted_type in permitted_types) - if(istype(O, permitted_type)) - allowed = 1 - - var/obj/item/clothing/I = O - if (!istype(I) || !allowed) - to_chat(user, "[src] is unable to modify that.") - return - - var/excluding = ("exclude" in I.species_restricted) - var/in_list = (target_species in I.species_restricted) - if (excluding ^ in_list) - to_chat(user, "[I] is already modified.") - return - - if(!isturf(O.loc)) - to_chat(user, "[O] must be safely placed on the ground for modification.") - return - - playsound(user.loc, 'sound/items/Screwdriver.ogg', 100, 1) - - user.visible_message("\The [user] opens \the [src] and modifies \the [O].","You open \the [src] and modify \the [O].") - - I.refit_for_species(target_species) - - if (istype(I, /obj/item/clothing/head/helmet)) - parts &= ~MODKIT_HELMET - if (istype(I, /obj/item/clothing/suit)) - parts &= ~MODKIT_SUIT - - if(!parts) - qdel(src) - -/obj/item/device/modkit/examine(mob/user) - . = ..(user) - to_chat(user, "It looks as though it modifies hardsuits to fit [target_species] users.") diff --git a/code/game/objects/items/devices/multitool.dm b/code/game/objects/items/devices/multitool.dm deleted file mode 100644 index 935baab37001a..0000000000000 --- a/code/game/objects/items/devices/multitool.dm +++ /dev/null @@ -1,70 +0,0 @@ -/** - * Multitool -- A multitool is used for hacking electronic devices. - * - */ - -/obj/item/device/multitool - name = "multitool" - desc = "This small, handheld device is made of durable, insulated plastic, and tipped with electrodes, perfect for interfacing with numerous machines." - icon = 'icons/obj/multitool.dmi' - icon_state = "multitool" - obj_flags = OBJ_FLAG_CONDUCTIBLE - force = 5.0 - w_class = ITEM_SIZE_SMALL - throwforce = 5.0 - throw_range = 15 - throw_speed = 3 - - matter = list(MATERIAL_PLASTIC = 50, MATERIAL_GLASS = 20, MATERIAL_STEEL = 5) - - origin_tech = list(TECH_MAGNET = 1, TECH_ENGINEERING = 1) - - var/buffer_name - var/atom/buffer_object - -/obj/item/device/multitool/Destroy() - unregister_buffer(buffer_object) - return ..() - -/obj/item/device/multitool/proc/get_buffer(var/typepath) - // Only allow clearing the buffer name when someone fetches the buffer. - // Means you cannot be sure the source hasn't been destroyed until the very moment it's needed. - get_buffer_name(TRUE) - if(buffer_object && (!typepath || istype(buffer_object, typepath))) - return buffer_object - -/obj/item/device/multitool/proc/get_buffer_name(var/null_name_if_missing = FALSE) - if(buffer_object) - buffer_name = buffer_object.name - else if(null_name_if_missing) - buffer_name = null - return buffer_name - -/obj/item/device/multitool/proc/set_buffer(var/atom/buffer) - if(!buffer || istype(buffer)) - buffer_name = buffer ? buffer.name : null - if(buffer != buffer_object) - unregister_buffer(buffer_object) - buffer_object = buffer - if(buffer_object) - GLOB.destroyed_event.register(buffer_object, src, /obj/item/device/multitool/proc/unregister_buffer) - -/obj/item/device/multitool/proc/unregister_buffer(var/atom/buffer_to_unregister) - // Only remove the buffered object, don't reset the name - // This means one cannot know if the buffer has been destroyed until one attempts to use it. - if(buffer_to_unregister == buffer_object && buffer_object) - GLOB.destroyed_event.unregister(buffer_object, src) - buffer_object = null - -/obj/item/device/multitool/resolve_attackby(atom/A, mob/user, params) - if(!isobj(A)) - return ..() - - var/obj/O = A - var/datum/extension/interactive/multitool/MT = get_extension(O, /datum/extension/interactive/multitool) - if(!MT) - return ..() - - user.AddTopicPrint(src) - MT.interact(src, user) - return 1 diff --git a/code/game/objects/items/devices/oxycandle.dm b/code/game/objects/items/devices/oxycandle.dm deleted file mode 100644 index bff8f4d94ee69..0000000000000 --- a/code/game/objects/items/devices/oxycandle.dm +++ /dev/null @@ -1,87 +0,0 @@ -/obj/item/device/oxycandle - name = "oxygen candle" - desc = "A steel tube with the words 'OXYGEN - PULL CORD TO IGNITE' stamped on the side.\nA small label reads 'WARNING: NOT FOR LIGHTING USE. WILL IGNITE FLAMMABLE GASSES'" - icon = 'icons/obj/oxygen_candle.dmi' - icon_state = "oxycandle" - item_state = "oxycandle" - w_class = ITEM_SIZE_SMALL // Should fit into internal's box or maybe pocket - var/target_pressure = ONE_ATMOSPHERE - var/datum/gas_mixture/air_contents = null - var/volume = 4600 - var/on = 0 - var/activation_sound = 'sound/effects/flare.ogg' - light_color = "#e58775" - light_outer_range = 2 - light_max_bright = 1 - var/brightness_on = 1 // Moderate-low bright. - action_button_name = null - -/obj/item/device/oxycandle/New() - ..() - update_icon() - -/obj/item/device/oxycandle/afterattack(var/obj/O, var/mob/user, var/proximity) - if(proximity && istype(O) && on) - O.HandleObjectHeating(src, user, 500) - ..() - -/obj/item/device/oxycandle/attack_self(mob/user) - if(!on) - to_chat(user, "You pull the cord and [src] ignites.") - on = 1 - update_icon() - playsound(src.loc, activation_sound, 75, 1) - air_contents = new /datum/gas_mixture() - air_contents.volume = 200 //liters - air_contents.temperature = T20C - var/list/air_mix = list(GAS_OXYGEN = 1 * (target_pressure * air_contents.volume) / (R_IDEAL_GAS_EQUATION * air_contents.temperature)) - air_contents.adjust_multi(GAS_OXYGEN, air_mix[GAS_OXYGEN]) - START_PROCESSING(SSprocessing, src) - -// Process of Oxygen candles releasing air. Makes 200 volume of oxygen -/obj/item/device/oxycandle/Process() - if(!loc) - return - var/turf/pos = get_turf(src) - if(volume <= 0 || !pos || (pos.turf_flags & TURF_IS_WET)) //Now uses turf flags instead of whatever aurora did - STOP_PROCESSING(SSprocessing, src) - on = 2 - update_icon() - update_held_icon() - SetName("burnt oxygen candle") - desc += "This tube has exhausted its chemicals." - return - if(pos) - pos.hotspot_expose(1500, 5) - var/datum/gas_mixture/environment = loc.return_air() - var/pressure_delta = target_pressure - environment.return_pressure() - var/output_volume = environment.volume * environment.group_multiplier - var/air_temperature = air_contents.temperature? air_contents.temperature : environment.temperature - var/transfer_moles = pressure_delta*output_volume/(air_temperature * R_IDEAL_GAS_EQUATION) - var/datum/gas_mixture/removed = air_contents.remove(transfer_moles) - if (!removed) //Just in case - return - environment.merge(removed) - volume -= 200 - var/list/air_mix = list(GAS_OXYGEN = 1 * (target_pressure * air_contents.volume) / (R_IDEAL_GAS_EQUATION * air_contents.temperature)) - air_contents.adjust_multi(GAS_OXYGEN, air_mix[GAS_OXYGEN]) - -/obj/item/device/oxycandle/on_update_icon() - if(on == 1) - icon_state = "oxycandle_on" - item_state = icon_state - set_light(brightness_on) - else if(on == 2) - icon_state = "oxycandle_burnt" - item_state = icon_state - set_light(0) - else - icon_state = "oxycandle" - item_state = icon_state - set_light(0) - update_held_icon() - -/obj/item/device/oxycandle/Destroy() - QDEL_NULL(air_contents) - STOP_PROCESSING(SSprocessing, src) - . = ..() diff --git a/code/game/objects/items/devices/paicard.dm b/code/game/objects/items/devices/paicard.dm deleted file mode 100644 index 6f444567d1afe..0000000000000 --- a/code/game/objects/items/devices/paicard.dm +++ /dev/null @@ -1,339 +0,0 @@ -/obj/item/device/paicard - name = "personal AI device" - icon = 'icons/obj/pda.dmi' - icon_state = "pai" - item_state = "electronic" - w_class = ITEM_SIZE_SMALL - slot_flags = SLOT_BELT - origin_tech = list(TECH_DATA = 2) - var/obj/item/device/radio/radio - var/looking_for_personality = 0 - var/mob/living/silicon/pai/pai - -/obj/item/device/paicard/relaymove(var/mob/user, var/direction) - if(user.stat || user.stunned) - return - var/obj/item/rig/rig = src.get_rig() - if(istype(rig)) - rig.forced_move(direction, user) - -/obj/item/device/paicard/New() - ..() - overlays += "pai-off" - -/obj/item/device/paicard/Destroy() - //Will stop people throwing friend pAIs into the singularity so they can respawn - if(!isnull(pai)) - pai.death(0) - QDEL_NULL(radio) - return ..() - -/obj/item/device/paicard/attack_self(mob/user) - if (!in_range(src, user)) - return - user.set_machine(src) - var/dat = {" - - - - - - - - "} - - if(pai) - dat += {" - Personal AI Device

              - - - - - - - - - - - - - -
              Installed Personality:[pai.name]
              Prime directive:[pai.pai_law0]
              Additional directives:[pai.pai_laws]
              -
              - "} - dat += {" - - -
              - Configure Directives -
              - "} - if(pai && (!pai.master_dna || !pai.master)) - dat += {" - - -
              - Imprint Master DNA -
              - "} - dat += "
              " - if(radio) - dat += "Radio Uplink" - dat += {" - - - - - - - - - -
              Transmit:[radio.broadcasting ? "En" : "Dis" ]abled - -
              Receive:[radio.listening ? "En" : "Dis" ]abled - -
              -
              - "} - else // - dat += "Radio Uplink
              " - dat += "Radio firmware not loaded. Please install a pAI personality to load firmware.
              " - dat += {" - - -
              Wipe current pAI personality - -
              - "} - else - if(looking_for_personality) - dat += {" - pAI Request Module

              -

              Requesting AI personalities from central database... If there are no entries, or if a suitable entry is not listed, check again later as more personalities may be added.

              - Searching for personalities

              - - - - - -
              - Refresh available personalities -

              - "} - else - dat += {" - pAI Request Module

              -

              No personality is installed.

              - - - - -
              Request personality -
              -
              -

              Each time this button is pressed, a request will be sent out to any available personalities. Check back often give plenty of time for personalities to respond. This process could take anywhere from 15 seconds to several minutes, depending on the available personalities' timeliness.

              - "} - show_browser(user, dat, "window=paicard") - onclose(user, "paicard") - return - -/obj/item/device/paicard/CanUseTopic(mob/user, datum/topic_state/state, href_list) - . = ..() - // possible NRE in Topic - if(href_list && (href_list["setdna"] || href_list["setlaws"] || href_list["wires"]) && !istype(pai)) - return FALSE - -/obj/item/device/paicard/Topic(href, href_list) - if ((. = ..())) - return - - if(href_list["setdna"]) - if(pai.master_dna) - return - var/mob/M = usr - if(!istype(M, /mob/living/carbon)) - to_chat(usr, "You don't have any DNA, or your DNA is incompatible with this device.") - else - var/datum/dna/dna = usr.dna - pai.master = M.real_name - pai.master_dna = dna.unique_enzymes - to_chat(pai, "You have been bound to a new master.") - if(href_list["request"]) - src.looking_for_personality = 1 - paiController.findPAI(src, usr) - if(href_list["wipe"]) - var/confirm = input("Are you CERTAIN you wish to delete the current personality? This action cannot be undone.", "Personality Wipe") in list("Yes", "No") - if(confirm == "Yes") - for(var/mob/M in src) - to_chat(M, "

              You feel yourself slipping away from reality.

              ") - to_chat(M, "

              Byte by byte you lose your sense of self.

              ") - to_chat(M, "

              Your mental faculties leave you.

              ") - to_chat(M, "
              oblivion...
              ") - M.death(0) - removePersonality() - if(href_list["wires"]) - var/t1 = text2num(href_list["wires"]) - switch(t1) - if(4) - radio.ToggleBroadcast() - if(2) - radio.ToggleReception() - if(href_list["setlaws"]) - var/newlaws = sanitize(input("Enter any additional directives you would like your pAI personality to follow. Note that these directives will not override the personality's allegiance to its imprinted master. Conflicting directives will be ignored.", "pAI Directive Configuration", pai.pai_laws) as message) - if(newlaws) - pai.pai_laws = newlaws - to_chat(pai, "Your supplemental directives have been updated. Your new directives are:") - to_chat(pai, "Prime Directive:
              [pai.pai_law0]") - to_chat(pai, "Supplemental Directives:
              [pai.pai_laws]") - attack_self(usr) - -// WIRE_SIGNAL = 1 -// WIRE_RECEIVE = 2 -// WIRE_TRANSMIT = 4 - -/obj/item/device/paicard/proc/setPersonality(mob/living/silicon/pai/personality) - src.pai = personality - src.overlays += "pai-happy" - -/obj/item/device/paicard/proc/removePersonality() - src.pai = null - src.overlays.Cut() - src.overlays += "pai-off" - -/obj/item/device/paicard - var/current_emotion = 1 -/obj/item/device/paicard/proc/setEmotion(var/emotion) - if(pai) - src.overlays.Cut() - switch(emotion) - if(1) src.overlays += "pai-happy" - if(2) src.overlays += "pai-cat" - if(3) src.overlays += "pai-extremely-happy" - if(4) src.overlays += "pai-face" - if(5) src.overlays += "pai-laugh" - if(6) src.overlays += "pai-off" - if(7) src.overlays += "pai-sad" - if(8) src.overlays += "pai-angry" - if(9) src.overlays += "pai-what" - if(10) src.overlays += "pai-neutral" - if(11) src.overlays += "pai-silly" - if(12) src.overlays += "pai-nose" - if(13) src.overlays += "pai-smirk" - if(14) src.overlays += "pai-exclamation" - if(15) src.overlays += "pai-question" - current_emotion = emotion - -/obj/item/device/paicard/proc/alertUpdate() - var/turf/T = get_turf_or_move(src.loc) - for (var/mob/M in viewers(T)) - M.show_message("\The [src] flashes a message across its screen, \"Additional personalities available for download.\"", 3, "\The [src] bleeps electronically.", 2) - -/obj/item/device/paicard/emp_act(severity) - for(var/mob/M in src) - M.emp_act(severity) - -/obj/item/device/paicard/ex_act(severity) - if(pai) - pai.ex_act(severity) - else - qdel(src) - -/obj/item/device/paicard/see_emote(mob/living/M, text) - if(pai && pai.client && pai.stat == CONSCIOUS) - var/rendered = "[text]" - pai.show_message(rendered, 2) - ..() - -/obj/item/device/paicard/show_message(msg, type, alt, alt_type) - if(pai && pai.client) - var/rendered = "[msg]" - pai.show_message(rendered, type) - ..() diff --git a/code/game/objects/items/devices/paint_sprayer.dm b/code/game/objects/items/devices/paint_sprayer.dm deleted file mode 100644 index 7350e665c6549..0000000000000 --- a/code/game/objects/items/devices/paint_sprayer.dm +++ /dev/null @@ -1,383 +0,0 @@ -#define AIRLOCK_REGION_PAINT "Paint" -#define AIRLOCK_REGION_STRIPE "Stripe" -#define AIRLOCK_REGION_WINDOW "Window" - -/obj/item/device/paint_sprayer - name = "paint sprayer" - icon = 'icons/obj/paint_sprayer.dmi' - icon_state = "paint_sprayer" - item_state = "paint_sprayer" - desc = "A slender and none-too-sophisticated device capable of applying paint on floors, walls, exosuits and certain airlocks." - var/decal = "Quarter-turf" - var/paint_color - var/datum/click_handler/paint_sprayer/ch - - var/list/decals = list( - "Quarter-turf" = list("path" = /obj/effect/floor_decal/corner, "precise" = 1, "colored" = 1), - "Monotile full" = list("path" = /obj/effect/floor_decal/corner/white/mono, "colored" = 1), - "Monotile halved" = list("path" = /obj/effect/floor_decal/corner/white/half, "colored" = 1), - "Hazard stripes" = list("path" = /obj/effect/floor_decal/industrial/warning/fulltile), - "Border, hazard" = list("path" = /obj/effect/floor_decal/industrial/warning), - "Corner, hazard" = list("path" = /obj/effect/floor_decal/industrial/warning/corner), - "Hatched marking" = list("path" = /obj/effect/floor_decal/industrial/hatch, "colored" = 1), - "Dashed outline" = list("path" = /obj/effect/floor_decal/industrial/outline, "colored" = 1), - "Loading sign" = list("path" = /obj/effect/floor_decal/industrial/loading), - "Mosaic, large" = list("path" = /obj/effect/floor_decal/chapel), - "1" = list("path" = /obj/effect/floor_decal/sign), - "2" = list("path" = /obj/effect/floor_decal/sign/two), - "A" = list("path" = /obj/effect/floor_decal/sign/a), - "B" = list("path" = /obj/effect/floor_decal/sign/b), - "C" = list("path" = /obj/effect/floor_decal/sign/c), - "D" = list("path" = /obj/effect/floor_decal/sign/d), - "M" = list("path" = /obj/effect/floor_decal/sign/m), - "V" = list("path" = /obj/effect/floor_decal/sign/v), - "CMO" = list("path" = /obj/effect/floor_decal/sign/cmo), - "Ex" = list("path" = /obj/effect/floor_decal/sign/ex), - "Psy" = list("path" = /obj/effect/floor_decal/sign/p), - "Remove all decals" = list("path" = /obj/effect/floor_decal/reset), - ) - - var/list/paint_dirs = list( - "North" = NORTH, - "Northwest" = NORTHWEST, - "West" = WEST, - "Southwest" = SOUTHWEST, - "South" = SOUTH, - "Southeast" = SOUTHEAST, - "East" = EAST, - "Northeast" = NORTHEAST, - "Precise" = 0, - ) - - var/list/preset_colors = list( - "Beasty brown" = COLOR_BEASTY_BROWN, - "Blue" = COLOR_BLUE_GRAY, - "Civvie green" = COLOR_CIVIE_GREEN, - "Command blue" = COLOR_COMMAND_BLUE, - "Cyan" = COLOR_CYAN, - "Green" = COLOR_GREEN, - "Bottle green" = COLOR_PALE_BTL_GREEN, - "Nanotrasen red" = COLOR_NT_RED, - "Orange" = COLOR_ORANGE, - "Pale orange" = COLOR_PALE_ORANGE, - "Red" = COLOR_RED, - "Sky blue" = COLOR_DEEP_SKY_BLUE, - "Titanium" = COLOR_TITANIUM, - "Aluminium"= COLOR_ALUMINIUM, - "Violet" = COLOR_VIOLET, - "White" = COLOR_WHITE, - "Yellow" = COLOR_AMBER, - "Sol blue" = COLOR_SOL, - "Bulkhead black" = COLOR_WALL_GUNMETAL, - ) - -/obj/item/device/paint_sprayer/Initialize() - . = ..() - var/random_preset = pick(preset_colors) - change_color(preset_colors[random_preset]) - - -/obj/item/device/paint_sprayer/Destroy() - if (ismob(loc)) - remove_click_handler(loc) - . = ..() - -/obj/item/device/paint_sprayer/on_update_icon() - overlays.Cut() - overlays += overlay_image(icon, "paint_sprayer_color", paint_color) - update_held_icon() - -/obj/item/device/paint_sprayer/get_mob_overlay(mob/user_mob, slot, bodypart) - var/image/ret = ..() - var/image/overlay = overlay_image(ret.icon, "paint_sprayer_color", paint_color) - ret.overlays += overlay - return ret - -/obj/item/device/paint_sprayer/on_active_hand(mob/user) - . = ..() - if(!istype(user?.client.CH, /datum/click_handler/paint_sprayer)) - var/ch = new /datum/click_handler/paint_sprayer(user.client, src) - user.client.CH = ch - if (isrobot(user)) - GLOB.module_deselected_event.register(user, src, /obj/item/device/paint_sprayer/proc/remove_click_handler) - GLOB.module_deactivated_event.register(user, src, /obj/item/device/paint_sprayer/proc/remove_click_handler) - else - GLOB.hands_swapped_event.register(user, src, /obj/item/device/paint_sprayer/proc/remove_click_handler) - GLOB.mob_equipped_event.register(user, src, /obj/item/device/paint_sprayer/proc/remove_click_handler) - GLOB.mob_unequipped_event.register(user, src, /obj/item/device/paint_sprayer/proc/remove_click_handler) - -/obj/item/device/paint_sprayer/proc/remove_click_handler(mob/user) - if (istype(user?.client.CH, /datum/click_handler/paint_sprayer)) - QDEL_NULL(user.client.CH) - GLOB.hands_swapped_event.unregister(user, src, /obj/item/device/paint_sprayer/proc/remove_click_handler) - GLOB.mob_equipped_event.unregister(user, src, /obj/item/device/paint_sprayer/proc/remove_click_handler) - GLOB.mob_unequipped_event.unregister(user, src, /obj/item/device/paint_sprayer/proc/remove_click_handler) - GLOB.module_deselected_event.unregister(user, src, /obj/item/device/paint_sprayer/proc/remove_click_handler) - GLOB.module_deactivated_event.unregister(user, src, /obj/item/device/paint_sprayer/proc/remove_click_handler) - -/obj/item/device/paint_sprayer/afterattack(atom/A, mob/user, proximity, params) - if (!proximity) - return - apply_paint(A, user, params) - -/obj/item/device/paint_sprayer/proc/pick_color(atom/A, mob/user) - if (!user.Adjacent(A) || user.incapacitated()) - return FALSE - var/new_color - if (istype(A, /turf/simulated/floor)) - new_color = pick_color_from_floor(A, user) - else if (istype(A, /obj/machinery/door/airlock)) - new_color = pick_color_from_airlock(A, user) - else if (A.atom_flags & ATOM_FLAG_CAN_BE_PAINTED) - new_color = A.get_color() - if (!change_color(new_color, user)) - to_chat(user, SPAN_WARNING("\The [A] does not have a color that you could pick from.")) - return TRUE // There was an attempt to pick a color. - -/obj/item/device/paint_sprayer/proc/apply_paint(atom/A, mob/user, params) - if (A.atom_flags & ATOM_FLAG_CAN_BE_PAINTED) - A.set_color(paint_color) - . = TRUE - else if (istype(A, /turf/simulated/floor)) - . = paint_floor(A, user, params) - else if (istype(A, /obj/machinery/door/airlock)) - . = paint_airlock(A, user) - else if (istype(A, /mob/living/exosuit)) - to_chat(user, SPAN_WARNING("You can't paint an active exosuit. Dismantle it first.")) - . = FALSE - else - to_chat(user, SPAN_WARNING("\The [src] can only be used on floors, windows, walls, exosuits or certain airlocks.")) - . = FALSE - if (.) - add_fingerprint(user) - playsound(get_turf(src), 'sound/effects/spray3.ogg', 30, 1, -6) - return . - -/obj/item/device/paint_sprayer/proc/remove_paint(atom/A, mob/user) - if(!user.Adjacent(A) || user.incapacitated()) - return FALSE - if (istype(A, /turf/simulated/floor)) - var/turf/simulated/floor/F = A - if (F.decals && F.decals.len > 0) - F.decals.len-- - F.update_icon() - . = TRUE - else if (istype(A, /obj/machinery/door/airlock)) - var/obj/machinery/door/airlock/D = A - if (D.paintable) - D.paint_airlock(null) - D.stripe_airlock(null) - D.paint_window(null) - . = TRUE - else if (A.atom_flags & ATOM_FLAG_CAN_BE_PAINTED) - A.set_color(null) - . = TRUE - if (.) - add_fingerprint(user) - playsound(get_turf(src), 'sound/effects/spray3.ogg', 30, 1, -6) - return . - -/obj/item/device/paint_sprayer/proc/pick_color_from_floor(turf/simulated/floor/F, mob/user) - if (!F.decals || !F.decals.len) - return FALSE - var/list/available_colors = list() - for (var/image/I in F.decals) - available_colors |= isnull(I.color) ? COLOR_WHITE : I.color - var/picked_color = available_colors[1] - if (available_colors.len > 1) - picked_color = input(user, "Which color do you wish to pick from?") as null|anything in available_colors - if (user.incapacitated() || !user.Adjacent(F)) - return FALSE - return picked_color - -/obj/item/device/paint_sprayer/proc/paint_floor(turf/simulated/floor/F, mob/user, params) - if(!F.flooring) - to_chat(user, SPAN_WARNING("You need flooring to paint on.")) - return FALSE - - if(!F.flooring.can_paint || F.broken || F.burnt) - to_chat(user, SPAN_WARNING("\The [src] cannot paint \the [F.name].")) - return FALSE - - var/list/decal_data = decals[decal] - var/config_error - if(!islist(decal_data)) - config_error = 1 - var/painting_decal - if(!config_error) - painting_decal = decal_data["path"] - if(!ispath(painting_decal)) - config_error = 1 - - if(config_error) - to_chat(user, SPAN_WARNING("\The [src] flashes an error light. You might need to reconfigure it.")) - return FALSE - - if((F.decals && F.decals.len > 5) && !ispath(painting_decal, /obj/effect/floor_decal/reset)) - to_chat(user, SPAN_WARNING("\The [F] has been painted too much; you need to clear it off.")) - return FALSE - - var/painting_dir = 0 - if(!decal_data["precise"]) - painting_dir = user.dir - else - var/list/mouse_control = params2list(params) - var/mouse_x = text2num(mouse_control["icon-x"]) - var/mouse_y = text2num(mouse_control["icon-y"]) - if(isnum(mouse_x) && isnum(mouse_y)) - if(mouse_x <= 16) - if(mouse_y <= 16) - painting_dir = WEST - else - painting_dir = NORTH - else - if(mouse_y <= 16) - painting_dir = SOUTH - else - painting_dir = EAST - else - painting_dir = user.dir - - var/painting_color - if(decal_data["colored"] && paint_color) - painting_color = paint_color - - new painting_decal(F, painting_dir, painting_color) - return TRUE - -/obj/item/device/paint_sprayer/proc/pick_color_from_airlock(obj/machinery/door/airlock/D, mob/user) - if (!D.paintable) - return FALSE - switch (select_airlock_region(D, user, "Where do you wish to pick the color from?")) - if (AIRLOCK_REGION_PAINT) - return D.door_color - if (AIRLOCK_REGION_STRIPE) - return D.stripe_color - if (AIRLOCK_REGION_WINDOW) - return D.window_color - else - return FALSE - -/obj/item/device/paint_sprayer/proc/paint_airlock(obj/machinery/door/airlock/D, mob/user) - if (!D.paintable) - to_chat(user, SPAN_WARNING("You can't paint this airlock type.")) - return FALSE - - switch (select_airlock_region(D, user, "What do you wish to paint?")) - if (AIRLOCK_REGION_PAINT) - D.paint_airlock(paint_color) - if (AIRLOCK_REGION_STRIPE) - D.stripe_airlock(paint_color) - if (AIRLOCK_REGION_WINDOW) - D.paint_window(paint_color) - else - return FALSE - return TRUE - -/obj/item/device/paint_sprayer/proc/select_airlock_region(obj/machinery/door/airlock/D, mob/user, input_text) - var/choice - var/list/choices = list() - if (D.paintable & AIRLOCK_PAINTABLE) - choices |= AIRLOCK_REGION_PAINT - if (D.paintable & AIRLOCK_STRIPABLE) - choices |= AIRLOCK_REGION_STRIPE - if (D.paintable & AIRLOCK_WINDOW_PAINTABLE) - choices |= AIRLOCK_REGION_WINDOW - choice = input(user, input_text) as null|anything in sortList(choices) - if (user.incapacitated() || !D || !user.Adjacent(D)) - return FALSE - return choice - -/obj/item/device/paint_sprayer/attack_self(mob/user) - choose_decal() - -/obj/item/device/paint_sprayer/proc/change_color(new_color, mob/user) - if (new_color) - paint_color = new_color - if (user) - add_fingerprint(user) - to_chat(user, SPAN_NOTICE("You set \the [src] to paint with a new color.")) - update_icon() - playsound(src, 'sound/weapons/flipblade.ogg', 30, 1) - return TRUE - return FALSE - -/obj/item/device/paint_sprayer/examine(mob/user) - . = ..(user) - to_chat(user, "It is configured to produce the '[decal]' decal using [paint_color] paint.") - -/obj/item/device/paint_sprayer/AltClick() - if (!isturf(loc)) - choose_preset_color() - else - . = ..() - -/obj/item/device/paint_sprayer/CtrlClick() - if (!isturf(loc)) - choose_color() - else - . = ..() - -/obj/item/device/paint_sprayer/verb/choose_color() - set name = "Choose color" - set desc = "Choose a color." - set category = "Object" - set src in usr - - if(usr.incapacitated()) - return - var/new_color = input(usr, "Choose a color.", name, paint_color) as color|null - if (usr.incapacitated()) - return - change_color(new_color, usr) - -/obj/item/device/paint_sprayer/verb/choose_preset_color() - set name = "Choose Preset color" - set desc = "Choose a preset color." - set category = "Object" - set src in usr - - if(usr.incapacitated()) - return - var/preset = input(usr, "Choose a color.", name, paint_color) as null|anything in preset_colors - if(usr.incapacitated()) - return - change_color(preset_colors[preset], usr) - -/obj/item/device/paint_sprayer/verb/choose_decal() - set name = "Choose Decal" - set desc = "Choose a flooring decal." - set category = "Object" - set src in usr - - if(usr.incapacitated()) - return - var/new_decal = input("Select a decal.") as null|anything in decals - if(usr.incapacitated()) - return - if(new_decal && !isnull(decals[new_decal])) - decal = new_decal - to_chat(usr, SPAN_NOTICE("You set \the [src] decal to '[decal]'.")) - -/datum/click_handler/paint_sprayer - var/obj/item/device/paint_sprayer/paint_sprayer - one_use_flag = 0 - -/datum/click_handler/paint_sprayer/New(client/_owner, var/obj/item/device/paint_sprayer/ps) - . = ..() - paint_sprayer = ps - -/datum/click_handler/paint_sprayer/Click(atom/target, location, control, params) - var/list/modifiers = params2list(params) - if (target != paint_sprayer) - if(!istype(owner.mob.buckled) || owner.mob.buckled.buckle_movable) - owner.mob.face_atom(target) - if(modifiers["ctrl"] && paint_sprayer.pick_color(target, owner.mob)) - return - if(modifiers["shift"] && paint_sprayer.remove_paint(target, owner.mob)) - return - owner.mob.ClickOn(target, params) - - -#undef AIRLOCK_REGION_PAINT -#undef AIRLOCK_REGION_STRIPE diff --git a/code/game/objects/items/devices/personal_shield.dm b/code/game/objects/items/devices/personal_shield.dm deleted file mode 100644 index e5714c9c70b13..0000000000000 --- a/code/game/objects/items/devices/personal_shield.dm +++ /dev/null @@ -1,178 +0,0 @@ -/obj/item/device/personal_shield - name = "personal shield" - desc = "Truly a life-saver: this device protects its user from being hit by objects moving very, very fast, as long as it holds a charge." - icon = 'icons/obj/batterer.dmi' - icon_state = "battereroff" - slot_flags = SLOT_BELT - var/open = FALSE - var/obj/item/cell/power_cell = /obj/item/cell/high - var/shield_type = /obj/aura/personal_shield/device - var/shield_power_cost = 1000 - var/obj/aura/personal_shield/device/shield - - VAR_PRIVATE/currently_stored_power = 0 - VAR_PRIVATE/max_stored_power = 3000 - VAR_PRIVATE/restored_power_per_tick = 5 - VAR_PRIVATE/enable_when_powered = FALSE - -/obj/item/device/personal_shield/Initialize() - . = ..() - if(ispath(power_cell)) - power_cell = new power_cell(src) - currently_stored_power = power_cell.use(max_stored_power) - -/obj/item/device/personal_shield/Destroy() - QDEL_NULL(shield) - if(!ispath(power_cell)) - QDEL_NULL(power_cell) - STOP_PROCESSING(SSobj, src) - return ..() - -/obj/item/device/personal_shield/Process(wait) - if(!power_cell?.charge || currently_stored_power >= max_stored_power) - return PROCESS_KILL - var/amount_to_restore = min(restored_power_per_tick * wait, max_stored_power - currently_stored_power) - currently_stored_power += power_cell.use(amount_to_restore) - - if(enable_when_powered && currently_stored_power >= shield_power_cost) - turn_on(get_holder_of_type(src, /mob)) - -/obj/item/device/personal_shield/examine(mob/user, distance) - . = ..() - if(open) - if(power_cell) - to_chat(user, "There is \a [power_cell] in \the [src].") - else - to_chat(user, "There is no cell in \the [src].") - to_chat(user, "The internal capacitor currently has [round(currently_stored_power/max_stored_power * 100)]% charge.") - -/obj/item/device/personal_shield/attackby(var/obj/item/W, var/mob/user) - if(istype(W, /obj/item/cell)) - if(!open) - to_chat(user, SPAN_WARNING("\The [src] needs to be open first.")) - else if(power_cell) - to_chat(user, SPAN_WARNING("\The [src] already has a battery.")) - else if(user.unEquip(W, src)) - user.visible_message("\The [user] installs \the [W] into \the [src].", SPAN_NOTICE("You install \the [W] into \the [src].")) - power_cell = W - START_PROCESSING(SSobj, src) - update_icon() - if(isScrewdriver(W)) - playsound(src, 'sound/items/Screwdriver.ogg', 15, 1) - user.visible_message("\The [user] [open ? "screws" : "unscrews"] the top of \the [src].", SPAN_NOTICE("You [open ? "screw" : "unscrew"] the top of \the [src].")) - open = !open - update_icon() - -/obj/item/device/personal_shield/attack_self(var/mob/living/user) - if (open && power_cell) - user.visible_message("\The [user] shakes \the [power_cell] out of \the [src].", SPAN_NOTICE("You shake \the [power_cell] out of \the [src].")) - turn_off() - power_cell.dropInto(user.loc) - on_remove_cell() - else - toggle(user) - -/obj/item/device/personal_shield/attack_hand(var/mob/living/user) - if(open && (loc == user)) - if(power_cell) - user.visible_message("\The [user] removes \the [power_cell] from \the [src].", SPAN_NOTICE("You remove \the [power_cell] from \the [src].")) - turn_off() - user.put_in_active_hand(power_cell) - on_remove_cell() - else - to_chat(user, SPAN_WARNING("There's no battery in \the [src].")) - else . = ..() - -/obj/item/device/personal_shield/proc/on_remove_cell() - power_cell = null - currently_stored_power = 0 - enable_when_powered = FALSE - update_icon() - -/obj/item/device/personal_shield/dropped(var/mob/user) - turn_off() - . = ..() - -/obj/item/device/personal_shield/equipped(var/mob/user, var/slot) - if(slot != slot_belt && slot != slot_l_hand && slot != slot_r_hand) - turn_off() - . = ..() - -/obj/item/device/personal_shield/emp_act(severity) - if(power_cell) - power_cell.emp_act(severity) - if(shield) - visible_message(SPAN_DANGER("\The [src] explodes!")) - explosion(src, -1, -1, 1, 2) - qdel(src) - ..() - - -/obj/item/device/personal_shield/proc/turn_on(var/mob/user) - enable_when_powered = FALSE - if(shield || open || !user) - return - if(!power_cell) - to_chat(user, SPAN_WARNING("\The [src] doesn't have a power supply.")) - return - if(currently_stored_power < shield_power_cost) - to_chat(user, SPAN_WARNING("\The [src]'s internal capacitor does not have enough charge.")) - return - shield = new shield_type(user, src) - update_name() - update_icon() - -/obj/item/device/personal_shield/proc/turn_off(var/mob/user) - if(!shield) - return - QDEL_NULL(shield) - update_name() - update_icon() - -/obj/item/device/personal_shield/proc/toggle(var/mob/user) - if(shield) - turn_off(user) - else - turn_on(user) - -/obj/item/device/personal_shield/AltClick(mob/user) - if (loc == user) - toggle(user) - else - . = ..() - -/obj/item/device/personal_shield/proc/take_charge() - if(!actual_take_charge()) - turn_off() - return FALSE - return TRUE - -/obj/item/device/personal_shield/proc/actual_take_charge() - if(!power_cell) - return FALSE - if(currently_stored_power < shield_power_cost) - return FALSE - - currently_stored_power -= shield_power_cost - START_PROCESSING(SSobj, src) - - if(currently_stored_power < shield_power_cost) - enable_when_powered = TRUE - return FALSE - return TRUE - -/obj/item/device/personal_shield/on_update_icon() - ..() - if(shield) - icon_state = "batterer" - else - if(open) - icon_state = "battereropen[power_cell ? "full" : "empty"]" - else - icon_state = "battereroff" - -/obj/item/device/personal_shield/proc/update_name() - if(shield) - SetName("activated [initial(name)]") - else - SetName(initial(name)) diff --git a/code/game/objects/items/devices/powersink.dm b/code/game/objects/items/devices/powersink.dm deleted file mode 100644 index 68affaef131a6..0000000000000 --- a/code/game/objects/items/devices/powersink.dm +++ /dev/null @@ -1,148 +0,0 @@ -// Powersink - used to drain station power - -/obj/item/device/powersink - name = "power sink" - desc = "A nulling power sink which drains energy from electrical systems." - icon = 'icons/obj/power_sink.dmi' - icon_state = "powersink0" - item_state = "electronic" - w_class = ITEM_SIZE_LARGE - obj_flags = OBJ_FLAG_CONDUCTIBLE - throwforce = 5 - throw_speed = 1 - throw_range = 2 - - matter = list(MATERIAL_STEEL = 750,MATERIAL_WASTE = 750) - - origin_tech = list(TECH_POWER = 3, TECH_ESOTERIC = 5) - var/drain_rate = 15000000 // amount of power to drain per tick - var/apc_drain_rate = 10000 // Max. amount drained from single APC. In Watts. - var/dissipation_rate = 20000 // Passive dissipation of drained power. In Watts. - var/power_drained = 0 // Amount of power drained. - var/max_power = 5e10 // Detonation point. - var/mode = 0 // 0 = off, 1=clamped (off), 2=operating - var/datum/powernet/PN // Our powernet - - var/const/DISCONNECTED = 0 - var/const/CLAMPED_OFF = 1 - var/const/OPERATING = 2 - - var/obj/structure/cable/attached // the attached cable - -/obj/item/device/powersink/on_update_icon() - icon_state = "powersink[mode == OPERATING]" - -/obj/item/device/powersink/proc/set_mode(value) - if(value == mode) - return - switch(value) - if(DISCONNECTED) - attached = null - if(mode == OPERATING) - STOP_PROCESSING_POWER_OBJECT(src) - anchored = FALSE - - if(CLAMPED_OFF) - if(!attached) - return - if(mode == OPERATING) - STOP_PROCESSING_POWER_OBJECT(src) - anchored = TRUE - - if(OPERATING) - if(!attached) - return - START_PROCESSING_POWER_OBJECT(src) - anchored = TRUE - - mode = value - update_icon() - set_light(0) - -/obj/item/device/powersink/Destroy() - if(mode == 2) - STOP_PROCESSING_POWER_OBJECT(src) - . = ..() - -/obj/item/device/powersink/attackby(var/obj/item/I, var/mob/user) - if(isScrewdriver(I)) - if(mode == DISCONNECTED) - var/turf/T = loc - if(isturf(T) && !!T.is_plating()) - attached = locate() in T - if(!attached) - to_chat(user, "This device must be placed over an exposed, powered cable node!") - else - set_mode(CLAMPED_OFF) - user.visible_message( \ - "[user] attaches \the [src] to the cable.", \ - "You attach \the [src] to the cable.", - "You hear some wires being connected to something.") - else - to_chat(user, "This device must be placed over an exposed, powered cable node!") - else - set_mode(DISCONNECTED) - user.visible_message( \ - "[user] detaches \the [src] from the cable.", \ - "You detach \the [src] from the cable.", - "You hear some wires being disconnected from something.") - else - return ..() - -/obj/item/device/powersink/attack_ai() - return - -/obj/item/device/powersink/attack_hand(var/mob/user) - . = ..() - if(.) - return - switch(mode) - if(DISCONNECTED) - ..() - - if(CLAMPED_OFF) - user.visible_message( \ - "[user] activates \the [src]!", \ - "You activate \the [src].", - "You hear a click.") - message_admins("Power sink activated by [key_name_admin(user)] at (JMP)") - log_game("Power sink activated by [key_name(user)] at [get_area_name(src)]") - set_mode(OPERATING) - - if(OPERATING) - user.visible_message( \ - "[user] deactivates \the [src]!", \ - "You deactivate \the [src].", - "You hear a click.") - set_mode(CLAMPED_OFF) - -/obj/item/device/powersink/pwr_drain() - if(!attached) - set_mode(DISCONNECTED) - return - - var/datum/powernet/PN = attached.powernet - var/drained = 0 - if(PN) - set_light(0.5, 0.1, 12) - PN.trigger_warning() - // found a powernet, so drain up to max power from it - drained = PN.draw_power(drain_rate) - // if tried to drain more than available on powernet - // now look for APCs and drain their cells - if(drained < drain_rate) - for(var/obj/machinery/power/terminal/T in PN.nodes) - // Enough power drained this tick, no need to torture more APCs - if(drained >= drain_rate) - break - var/obj/machinery/power/apc/A = T.master_machine() - if(istype(A)) - drained += A.drain_power(amount = drain_rate) - power_drained += drained - - if(power_drained > max_power * 0.95) - playsound(src, 'sound/effects/screech.ogg', 100, 1, 1) - if(power_drained >= max_power) - STOP_PROCESSING_POWER_OBJECT(src) - explosion(src.loc, 3,6,9,12) - qdel(src) diff --git a/code/game/objects/items/devices/radio/electropack.dm b/code/game/objects/items/devices/radio/electropack.dm deleted file mode 100644 index 3eb8b8b752444..0000000000000 --- a/code/game/objects/items/devices/radio/electropack.dm +++ /dev/null @@ -1,127 +0,0 @@ -/obj/item/device/radio/electropack - name = "electropack" - desc = "Dance my monkeys! DANCE!!!" - icon_state = "electropack0" - item_state = "electropack" - frequency = 1449 - obj_flags = OBJ_FLAG_CONDUCTIBLE - slot_flags = SLOT_BACK - w_class = ITEM_SIZE_HUGE - - matter = list(MATERIAL_STEEL = 10000,MATERIAL_GLASS = 2500) - - var/code = 2 - -/obj/item/device/radio/electropack/attack_hand(mob/user as mob) - if(src == user.back) - to_chat(user, "You need help taking this off!") - return - ..() - -/obj/item/device/radio/electropack/attackby(obj/item/W as obj, mob/user as mob) - ..() - if(istype(W, /obj/item/clothing/head/helmet)) - if(!b_stat) - to_chat(user, "[src] is not ready to be attached!") - return - if(!user.unEquip(W) || !user.unEquip(src)) - return - var/obj/item/assembly/shock_kit/A = new /obj/item/assembly/shock_kit( user ) - A.icon = 'icons/obj/assemblies.dmi' - - W.forceMove(A) - W.master = A - A.part1 = W - - forceMove(A) - master = A - A.part2 = src - - user.put_in_hands(A) - -/obj/item/device/radio/electropack/Topic(href, href_list) - //..() - if(usr.stat || usr.restrained()) - return - if(((istype(usr, /mob/living/carbon/human) && (usr.IsAdvancedToolUser() && usr.contents.Find(src))) || (usr.contents.Find(master) || (in_range(src, usr) && istype(loc, /turf))))) - usr.set_machine(src) - if(href_list["freq"]) - var/new_frequency = sanitize_frequency(frequency + text2num(href_list["freq"])) - set_frequency(new_frequency) - else - if(href_list["code"]) - code += text2num(href_list["code"]) - code = round(code) - code = min(100, code) - code = max(1, code) - else - if(href_list["power"]) - on = !( on ) - icon_state = "electropack[on]" - if(!( master )) - if(istype(loc, /mob)) - attack_self(loc) - else - for(var/mob/M in viewers(1, src)) - if(M.client) - attack_self(M) - else - if(istype(master.loc, /mob)) - attack_self(master.loc) - else - for(var/mob/M in viewers(1, master)) - if(M.client) - attack_self(M) - else - close_browser(usr, "window=radio") - return - return - -/obj/item/device/radio/electropack/receive_signal(datum/signal/signal) - if(!signal || signal.encryption != code) - return - - if(ismob(loc) && on) - var/mob/M = loc - var/turf/T = M.loc - if(istype(T, /turf)) - if(!M.moved_recently && M.last_move) - M.moved_recently = 1 - step(M, M.last_move) - sleep(50) - if(M) - M.moved_recently = 0 - to_chat(M, "You feel a sharp shock!") - var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread - s.set_up(3, 1, M) - s.start() - - M.Weaken(10) - - if(master && wires & 1) - master.receive_signal() - return - -/obj/item/device/radio/electropack/attack_self(mob/user as mob, flag1) - - if(!istype(user, /mob/living/carbon/human)) - return - user.set_machine(src) - var/dat = {" -Turn [on ? "Off" : "On"]
              -Frequency/Code for electropack:
              -Frequency: -- -- [format_frequency(frequency)] -+ -+
              - -Code: -- -- [code] -+ -+
              -
              "} - show_browser(user, dat, "window=radio") - onclose(user, "radio") - return diff --git a/code/game/objects/items/devices/radio/encryptionkey.dm b/code/game/objects/items/devices/radio/encryptionkey.dm deleted file mode 100644 index 9ad18428fd2eb..0000000000000 --- a/code/game/objects/items/devices/radio/encryptionkey.dm +++ /dev/null @@ -1,158 +0,0 @@ - -/obj/item/device/encryptionkey - name = "standard encryption key" - desc = "An encryption key for a radio headset. Contains cypherkeys." - icon = 'icons/obj/radio.dmi' - icon_state = "cypherkey" - item_state = "" - w_class = ITEM_SIZE_TINY - slot_flags = SLOT_EARS - var/translate_binary = 0 - var/translate_hive = 0 - var/syndie = 0 - var/list/channels = list() - -/obj/item/device/encryptionkey/attackby(obj/item/W as obj, mob/user as mob) - -/obj/item/device/encryptionkey/map_preset - var/preset_name - var/use_common = FALSE - -/obj/item/device/encryptionkey/map_preset/Initialize() - if (preset_name) - var/name_lower = lowertext(preset_name) - name = "[name_lower] encryption key" - channels += list( - "[preset_name]" = 1, - "Hailing" = 1 - ) - if (use_common) - channels += list("Common" = 1) - . = ..() - -/obj/item/device/encryptionkey/syndicate - icon_state = "cypherkey" - channels = list("Mercenary" = 1, "Hailing" = 1) - origin_tech = list(TECH_ESOTERIC = 3) - syndie = 1//Signifies that it de-crypts Syndicate transmissions - -/obj/item/device/encryptionkey/raider - icon_state = "cypherkey" - channels = list("Raider" = 1, "Hailing" = 1) - origin_tech = list(TECH_ESOTERIC = 2) - syndie = 1 - -/obj/item/device/encryptionkey/vox_raider - icon_state = "cypherkey" - channels = list("Vox Raider" = TRUE, "Hailing" = TRUE) - origin_tech = list(TECH_ESOTERIC = 2) - syndie = TRUE - -/obj/item/device/encryptionkey/binary - icon_state = "cypherkey" - translate_binary = 1 - origin_tech = list(TECH_ESOTERIC = 3) - -/obj/item/device/encryptionkey/headset_sec - name = "security radio encryption key" - icon_state = "sec_cypherkey" - channels = list("Security" = 1) - -/obj/item/device/encryptionkey/headset_eng - name = "engineering radio encryption key" - icon_state = "eng_cypherkey" - channels = list("Engineering" = 1) - -/obj/item/device/encryptionkey/headset_rob - name = "robotics radio encryption key" - icon_state = "rob_cypherkey" - channels = list("Engineering" = 1, "Science" = 1) - -/obj/item/device/encryptionkey/headset_med - name = "medical radio encryption key" - icon_state = "med_cypherkey" - channels = list("Medical" = 1) - -/obj/item/device/encryptionkey/headset_sci - name = "science radio encryption key" - icon_state = "sci_cypherkey" - channels = list("Science" = 1) - -/obj/item/device/encryptionkey/headset_medsci - name = "medical research radio encryption key" - icon_state = "medsci_cypherkey" - channels = list("Medical" = 1, "Science" = 1) - -/obj/item/device/encryptionkey/headset_com - name = "command radio encryption key" - icon_state = "com_cypherkey" - channels = list("Command" = 1, "Hailing" = 1) - -/obj/item/device/encryptionkey/merchant - name = "merchant encryption key" - channels = list("Hailing" = 1) - -/obj/item/device/encryptionkey/heads/captain - name = "captain's encryption key" - icon_state = "cap_cypherkey" - channels = list("Command" = 1, "Security" = 1, "Engineering" = 0, "Science" = 0, "Medical" = 0, "Supply" = 0, "Service" = 0, "Hailing" = 0) - -/obj/item/device/encryptionkey/heads/ai_integrated - name = "ai integrated encryption key" - desc = "Integrated encryption key." - icon_state = "cap_cypherkey" - channels = list("Command" = 1, "Security" = 1, "Engineering" = 1, "Science" = 1, "Medical" = 1, "Supply" = 1, "Service" = 1, "AI Private" = 1, "Hailing" = 1) - -/obj/item/device/encryptionkey/heads/rd - name = "chief science officer's encryption key" - icon_state = "rd_cypherkey" - channels = list("Science" = 1, "Command" = 1, "Hailing" = 1) - -/obj/item/device/encryptionkey/heads/hos - name = "head of security's encryption key" - icon_state = "hos_cypherkey" - channels = list("Security" = 1, "Command" = 1, "Hailing" = 1) - -/obj/item/device/encryptionkey/heads/ce - name = "chief engineer's encryption key" - icon_state = "ce_cypherkey" - channels = list("Engineering" = 1, "Command" = 1, "Hailing" = 1) - -/obj/item/device/encryptionkey/heads/cmo - name = "chief medical officer's encryption key" - icon_state = "cmo_cypherkey" - channels = list("Medical" = 1, "Command" = 1, "Hailing" = 1) - -/obj/item/device/encryptionkey/heads/hop - name = "head of personnel's encryption key" - icon_state = "hop_cypherkey" - channels = list("Supply" = 1, "Service" = 1, "Command" = 1, "Security" = 0, "Hailing" = 1) - -/obj/item/device/encryptionkey/headset_cargo - name = "supply radio encryption key" - icon_state = "cargo_cypherkey" - channels = list("Supply" = 1) - -/obj/item/device/encryptionkey/headset_service - name = "service radio encryption key" - icon_state = "srv_cypherkey" - channels = list("Service" = 1) - -/obj/item/device/encryptionkey/ert - name = "\improper ERT radio encryption key" - channels = list("Response Team" = 1, "Science" = 1, "Command" = 1, "Medical" = 1, "Engineering" = 1, "Security" = 1, "Supply" = 1, "Service" = 1, "Hailing" = 1) - -/obj/item/device/encryptionkey/specops //for events - name = "special operations radio encryption key" - icon_state = "bin_cypherkey" - channels = list("Special Ops" = 1, "Hailing" = 1) - origin_tech = list(TECH_ESOTERIC = 2) - -/obj/item/device/encryptionkey/entertainment - name = "entertainment radio key" - channels = list("Entertainment" = 1) - -/obj/item/device/encryptionkey/headset_mining - name = "prospector radio encryption key" - icon_state = "srv_cypherkey" - channels = list("Supply" = 1) diff --git a/code/game/objects/items/devices/radio/headset.dm b/code/game/objects/items/devices/radio/headset.dm deleted file mode 100644 index 678e266be9525..0000000000000 --- a/code/game/objects/items/devices/radio/headset.dm +++ /dev/null @@ -1,405 +0,0 @@ -/obj/item/device/radio/headset - name = "radio headset" - desc = "An updated, modular intercom that fits over the head. Takes encryption keys." - var/radio_desc = "" - icon_state = "headset" - item_state = "headset" - matter = list(MATERIAL_ALUMINIUM = 75) - subspace_transmission = 1 - canhear_range = 0 // can't hear headsets from very far away - - slot_flags = SLOT_EARS - cell = null - power_usage = 0 - var/translate_binary = 0 - var/list/encryption_keys = list() - var/max_keys = 2 - - //left for backward compatability - var/ks1type = /obj/item/device/encryptionkey - var/ks2type = null - -/obj/item/device/radio/headset/Initialize() - . = ..() - internal_channels.Cut() - for(var/T in encryption_keys) - if(ispath(T)) - encryption_keys = new T(src) - if(ks1type) - encryption_keys += new ks1type(src) - if(ks2type) - encryption_keys += new ks2type(src) - recalculateChannels(1) - -/obj/item/device/radio/headset/Destroy() - QDEL_NULL_LIST(encryption_keys) - return ..() - -/obj/item/device/radio/headset/list_channels(var/mob/user) - return list_secure_channels() - -/obj/item/device/radio/headset/examine(mob/user, distance) - . = ..() - if(distance > 1 || !radio_desc) - return - - to_chat(user, "The following channels are available:") - to_chat(user, radio_desc) - -/obj/item/device/radio/headset/handle_message_mode(mob/living/M as mob, message, channel) - if (channel == "special") - if (translate_binary) - var/datum/language/binary = all_languages[LANGUAGE_ROBOT_GLOBAL] - binary.broadcast(M, message) - return null - - return ..() - -/obj/item/device/radio/headset/receive_range(freq, level, aiOverride = 0) - if (aiOverride) - return ..(freq, level) - if(ishuman(src.loc)) - var/mob/living/carbon/human/H = src.loc - if(H.l_ear == src || H.r_ear == src) - return ..(freq, level) - return -1 - -/obj/item/device/radio/headset/map_preset - var/preset_name - var/encryption_key = /obj/item/device/encryptionkey - var/use_common = FALSE - -/obj/item/device/radio/headset/map_preset/Initialize() - if (preset_name) - var/name_lower = lowertext(preset_name) - name = "[name_lower] radio headset" - ks1type = encryption_key - default_frequency = assign_away_freq(preset_name) - if (use_common) - frequency = PUB_FREQ - else - frequency = default_frequency - . = ..() - -/obj/item/device/radio/headset/syndicate - origin_tech = list(TECH_ESOTERIC = 3) - syndie = 1 - ks1type = /obj/item/device/encryptionkey/syndicate - -/obj/item/device/radio/headset/syndicate/alt - icon_state = "syndie_headset" - item_state = "syndie_headset" - -/obj/item/device/radio/headset/syndicate/Initialize() - . = ..() - set_frequency(SYND_FREQ) - -/obj/item/device/radio/headset/raider - origin_tech = list(TECH_ESOTERIC = 2) - syndie = 1 - ks1type = /obj/item/device/encryptionkey/raider - -/obj/item/device/radio/headset/raider/Initialize() - . = ..() - set_frequency(RAID_FREQ) - -/obj/item/device/radio/headset/vox_raider - ks1type = /obj/item/device/encryptionkey/vox_raider - -/obj/item/device/radio/headset/vox_raider/Initialize() - . = ..() - set_frequency(V_RAID_FREQ) - -/obj/item/device/radio/headset/binary - origin_tech = list(TECH_ESOTERIC = 3) - ks1type = /obj/item/device/encryptionkey/binary - -/obj/item/device/radio/headset/headset_sec - name = "security radio headset" - desc = "This is used by your elite security force." - icon_state = "sec_headset" - item_state = "headset" - ks1type = /obj/item/device/encryptionkey/headset_sec - -/obj/item/device/radio/headset/headset_sec/alt - name = "security bowman headset" - icon_state = "sec_headset_alt" - item_state = "sec_headset_alt" - -/obj/item/device/radio/headset/headset_eng - name = "engineering radio headset" - desc = "When the engineers wish to chat like girls." - icon_state = "eng_headset" - item_state = "headset" - ks1type = /obj/item/device/encryptionkey/headset_eng - -/obj/item/device/radio/headset/headset_eng/alt - name = "engineering bowman headset" - icon_state = "eng_headset_alt" - item_state = "eng_headset_alt" - -/obj/item/device/radio/headset/headset_rob - name = "robotics radio headset" - desc = "Made specifically for the roboticists who cannot decide between departments." - icon_state = "rob_headset" - item_state = "headset" - ks1type = /obj/item/device/encryptionkey/headset_rob - -/obj/item/device/radio/headset/headset_med - name = "medical radio headset" - desc = "A headset for the trained staff of the medbay." - icon_state = "med_headset" - item_state = "headset" - ks1type = /obj/item/device/encryptionkey/headset_med - -/obj/item/device/radio/headset/headset_med/alt - name = "medical bowman headset" - icon_state = "med_headset_alt" - item_state = "med_headset_alt" - -/obj/item/device/radio/headset/headset_sci - name = "science radio headset" - desc = "A sciency headset. Like usual." - icon_state = "com_headset" - item_state = "headset" - ks1type = /obj/item/device/encryptionkey/headset_sci - -/obj/item/device/radio/headset/headset_medsci - name = "medical research radio headset" - desc = "A headset that is a result of the mating between medical and science." - icon_state = "med_headset" - item_state = "headset" - ks1type = /obj/item/device/encryptionkey/headset_medsci - -/obj/item/device/radio/headset/headset_com - name = "command radio headset" - desc = "A headset with a commanding channel." - icon_state = "com_headset" - item_state = "headset" - ks1type = /obj/item/device/encryptionkey/headset_com - -/obj/item/device/radio/headset/headset_com/alt - name = "command bowman headset" - desc = "A headset with a commanding channel." - icon_state = "com_headset_alt" - item_state = "com_headset_alt" - ks1type = /obj/item/device/encryptionkey/headset_com - max_keys = 3 - -/obj/item/device/radio/headset/merchant - name = "merchant headset" - desc = "A headset utilizing the universal hailing frequency." - frequency = HAIL_FREQ - ks1type = /obj/item/device/encryptionkey/merchant - -/obj/item/device/radio/headset/heads/captain - name = "captain's headset" - desc = "The headset of the boss." - icon_state = "com_headset" - item_state = "headset" - ks1type = /obj/item/device/encryptionkey/heads/captain - -/obj/item/device/radio/headset/heads/captain/alt - name = "captain's bowman headset" - icon_state = "com_headset_alt" - item_state = "com_headset_alt" - max_keys = 3 - -/obj/item/device/radio/headset/heads/ai_integrated //No need to care about icons, it should be hidden inside the AI anyway. - name = "\improper AI subspace transceiver" - desc = "Integrated AI radio transceiver." - icon = 'icons/obj/robot_component.dmi' - icon_state = "radio" - item_state = "headset" - ks1type = /obj/item/device/encryptionkey/heads/ai_integrated - var/myAi = null // Atlantis: Reference back to the AI which has this radio. - var/disabledAi = 0 // Atlantis: Used to manually disable AI's integrated radio via inteliCard menu. - -/obj/item/device/radio/headset/heads/ai_integrated/Destroy() - myAi = null - . = ..() - -/obj/item/device/radio/headset/heads/ai_integrated/receive_range(freq, level) - if (disabledAi) - return -1 //Transciever Disabled. - return ..(freq, level, 1) - -/obj/item/device/radio/headset/heads/rd - name = "chief science officer's headset" - desc = "Headset of the researching God." - icon_state = "com_headset" - item_state = "headset" - ks1type = /obj/item/device/encryptionkey/heads/rd - -/obj/item/device/radio/headset/heads/hos - name = "head of security's headset" - desc = "The headset of the man who protects your worthless lives." - icon_state = "com_headset" - item_state = "headset" - ks1type = /obj/item/device/encryptionkey/heads/hos - -/obj/item/device/radio/headset/heads/ce - name = "chief engineer's headset" - desc = "The headset of the guy who is in charge of morons." - icon_state = "com_headset" - item_state = "headset" - ks1type = /obj/item/device/encryptionkey/heads/ce - -/obj/item/device/radio/headset/heads/ce/alt - name = "chief engineer's bowman headset" - icon_state = "com_headset_alt" - item_state = "com_headset_alt" - -/obj/item/device/radio/headset/heads/cmo - name = "chief medical officer's headset" - desc = "The headset of the highly trained medical chief." - icon_state = "com_headset" - item_state = "headset" - ks1type = /obj/item/device/encryptionkey/heads/cmo - -/obj/item/device/radio/headset/heads/cmo/alt - name = "chief medical officer's bowman headset" - icon_state = "com_headset_alt" - item_state = "com_headset_alt" - -/obj/item/device/radio/headset/heads/hop - name = "head of personnel's headset" - desc = "The headset of the guy who will one day be captain." - icon_state = "com_headset" - item_state = "headset" - ks1type = /obj/item/device/encryptionkey/heads/hop - -/obj/item/device/radio/headset/headset_service - name = "service radio headset" - desc = "Headset used by the service staff, tasked with keeping everyone full, happy and clean." - icon_state = "srv_headset" - item_state = "headset" - ks1type = /obj/item/device/encryptionkey/headset_service - -/obj/item/device/radio/headset/foundation - name = "\improper Foundation radio headset" - desc = "The headeset of the occult cavalry." - icon_state = "com_headset" - item_state = "headset" - ks1type = /obj/item/device/encryptionkey/ert - -/obj/item/device/radio/headset/ia - name = "internal affair's headset" - desc = "The headset of your worst enemy." - icon_state = "com_headset" - item_state = "headset" - ks1type = /obj/item/device/encryptionkey/heads/hos - -/obj/item/device/radio/headset/headset_mining - name = "mining radio headset" - desc = "Headset used by dwarves. It has an inbuilt subspace antenna for better reception." - icon_state = "mine_headset" - item_state = "headset" - ks1type = /obj/item/device/encryptionkey/headset_mining - -/obj/item/device/radio/headset/headset_mining/alt - name = "mining bowman radio headset" - icon_state = "mine_headset_alt" - item_state = "mine_headset_alt" - max_keys = 3 - -/obj/item/device/radio/headset/headset_cargo - name = "supply radio headset" - desc = "A headset used by the box-pushers." - icon_state = "cargo_headset" - item_state = "headset" - ks1type = /obj/item/device/encryptionkey/headset_cargo - -/obj/item/device/radio/headset/headset_cargo/alt - name = "supply bowman headset" - icon_state = "cargo_headset_alt" - item_state = "cargo_headset_alt" - max_keys = 3 - -/obj/item/device/radio/headset/entertainment - name = "actor's radio headset" - desc = "specially made to make you sound less cheesy." - icon_state = "com_headset" - item_state = "headset" - ks1type = /obj/item/device/encryptionkey/entertainment - -/obj/item/device/radio/headset/specops - name = "special operations radio headset" - desc = "The headset of the spooks." - icon_state = "cent_headset" - item_state = "headset" - ks1type = /obj/item/device/encryptionkey/specops - -/obj/item/device/radio/headset/attackby(obj/item/W as obj, mob/user as mob) -// ..() - user.set_machine(src) - if (!( isScrewdriver(W) || (istype(W, /obj/item/device/encryptionkey/ )))) - return - - if(isScrewdriver(W)) - if(encryption_keys.len) - for(var/ch_name in channels) - radio_controller.remove_object(src, radiochannels[ch_name]) - secure_radio_connections[ch_name] = null - for(var/obj/ekey in encryption_keys) - ekey.dropInto(user.loc) - encryption_keys -= ekey - - recalculateChannels(1) - to_chat(user, "You pop out the encryption keys in the headset!") - - else - to_chat(user, "This headset doesn't have any encryption keys! How useless...") - - if(istype(W, /obj/item/device/encryptionkey)) - if(encryption_keys.len >= max_keys) - to_chat(user, "The headset can't hold another key!") - return - if(user.unEquip(W, target = src)) - to_chat(user, "You put \the [W] into \the [src].") - encryption_keys += W - recalculateChannels(1) - -/obj/item/device/radio/headset/MouseDrop(var/obj/over_object) - var/mob/M = usr - if((!istype(over_object, /obj/screen)) && (src in M) && CanUseTopic(M)) - return attack_self(M) - return - -/obj/item/device/radio/headset/recalculateChannels(var/setDescription = 0) - src.channels = list() - src.translate_binary = 0 - src.syndie = 0 - for(var/obj/ekey in encryption_keys) - import_key_data(ekey) - for (var/ch_name in channels) - if(!radio_controller) - src.SetName("broken radio headset") - return - secure_radio_connections[ch_name] = radio_controller.add_object(src, radiochannels[ch_name], RADIO_CHAT) - - if(setDescription) - setupRadioDescription() - -/obj/item/device/radio/headset/proc/import_key_data(obj/item/device/encryptionkey/key) - if(!key) - return - for(var/ch_name in key.channels) - if(ch_name in src.channels) - continue - src.channels[ch_name] = key.channels[ch_name] - if(key.translate_binary) - src.translate_binary = 1 - if(key.syndie) - src.syndie = 1 - -/obj/item/device/radio/headset/proc/setupRadioDescription() - var/radio_text = "" - for(var/i = 1 to channels.len) - var/channel = channels[i] - var/key = get_radio_key_from_channel(channel) - radio_text += "[key] - [channel]" - if(i != channels.len) - radio_text += ", " - - radio_desc = radio_text diff --git a/code/game/objects/items/devices/radio/intercom.dm b/code/game/objects/items/devices/radio/intercom.dm deleted file mode 100644 index 32f85344eca43..0000000000000 --- a/code/game/objects/items/devices/radio/intercom.dm +++ /dev/null @@ -1,360 +0,0 @@ -/obj/item/device/radio/intercom - name = "intercom (General)" - desc = "Talk through this." - icon_state = "intercom" - randpixel = 0 - anchored = TRUE - w_class = ITEM_SIZE_HUGE - canhear_range = 2 - atom_flags = ATOM_FLAG_NO_TEMP_CHANGE | ATOM_FLAG_NO_BLOOD - obj_flags = OBJ_FLAG_CONDUCTIBLE - layer = ABOVE_WINDOW_LAYER - cell = null - power_usage = 0 - var/wiresexposed = FALSE - ///2 = wired/built, 1 = circuit installed, 0 = frame - var/buildstage = 2 - var/number = 0 - var/last_tick //used to delay the powercheck - intercom_handling = TRUE - -/obj/item/device/radio/intercom/get_storage_cost() - return ITEM_SIZE_NO_CONTAINER - -/obj/item/device/radio/intercom/map_preset - var/preset_name - var/use_common = FALSE - channels = list() - var/default_hailing = FALSE - -/obj/item/device/radio/intercom/map_preset/Initialize() - if (!preset_name) - return ..() - - var/name_lower = lowertext(preset_name) - name = "[name_lower] intercom" - frequency = assign_away_freq(preset_name) - if (default_hailing) - frequency = HAIL_FREQ - channels += list( - preset_name = 1, - "Hailing" = 1 - ) - if (use_common) - channels += list("Common" = 1) - - . = ..() - - internal_channels = list( - num2text(assign_away_freq(preset_name)) = list(), - num2text(HAIL_FREQ) = list(), - ) - if (use_common) - internal_channels += list(num2text(PUB_FREQ) = list()) - -/obj/item/device/radio/intercom/custom - name = "intercom (Custom)" - broadcasting = 0 - listening = 0 - -/obj/item/device/radio/intercom/hailing - name = "intercom (Hailing)" - frequency = HAIL_FREQ - -/obj/item/device/radio/intercom/interrogation - name = "intercom (Interrogation)" - frequency = 1449 - -/obj/item/device/radio/intercom/private - name = "intercom (Private)" - frequency = AI_FREQ - -/obj/item/device/radio/intercom/specops - name = "\improper Spec Ops intercom" - frequency = ERT_FREQ - -/obj/item/device/radio/intercom/department - canhear_range = 5 - broadcasting = 0 - listening = 1 - -/obj/item/device/radio/intercom/department/medbay - name = "intercom (Medbay)" - frequency = MED_I_FREQ - -/obj/item/device/radio/intercom/department/security - name = "intercom (Security)" - frequency = SEC_I_FREQ - -/obj/item/device/radio/intercom/entertainment - name = "entertainment intercom" - frequency = ENT_FREQ - canhear_range = 4 - -/obj/item/device/radio/intercom/Initialize(loc, dir, atom/frame) - . = ..() - START_PROCESSING(SSobj, src) - - if (dir) - set_dir(dir) - - if (istype(frame)) - buildstage = 0 - wiresexposed = TRUE - pixel_x = (dir & 3) ? 0 : (dir == 4 ? -21 : 21) - pixel_y = (dir & 3) ? (dir == 1 ? -28 : 23) : 0 - frame.transfer_fingerprints_to(src) - - update_icon() - -/obj/item/device/radio/intercom/department/medbay/Initialize() - . = ..() - internal_channels = GLOB.default_medbay_channels.Copy() - -/obj/item/device/radio/intercom/department/security/Initialize() - . = ..() - internal_channels = list( - num2text(PUB_FREQ) = list(), - num2text(SEC_FREQ) = list(access_security), - num2text(SEC_I_FREQ) = list(access_security) - ) - -/obj/item/device/radio/intercom/entertainment/Initialize() - . = ..() - internal_channels = list( - num2text(PUB_FREQ) = list(), - num2text(ENT_FREQ) = list() - ) - -/obj/item/device/radio/intercom/syndicate - name = "illicit intercom" - desc = "Talk through this. Evilly." - frequency = SYND_FREQ - subspace_transmission = 1 - syndie = 1 - -/obj/item/device/radio/intercom/syndicate/Initialize() - . = ..() - internal_channels[num2text(SYND_FREQ)] = list(access_syndicate) - -/obj/item/device/radio/intercom/raider - name = "illicit intercom" - desc = "Pirate radio, but not in the usual sense of the word." - frequency = RAID_FREQ - subspace_transmission = 1 - syndie = 1 - -/obj/item/device/radio/intercom/raider/Initialize() - . = ..() - internal_channels[num2text(RAID_FREQ)] = list(access_syndicate) - -/obj/item/device/radio/intercom/Destroy() - STOP_PROCESSING(SSobj, src) - return ..() - -/obj/item/device/radio/intercom/attack_ai(mob/user) - add_fingerprint(user) - if (buildstage == 2) - attack_self(user) - -/obj/item/device/radio/intercom/attack_hand(mob/user) - add_fingerprint(user) - if (buildstage == 2) - attack_self(user) - -/obj/item/device/radio/intercom/receive_range(freq, level) - if (!on) - return -1 - if(!(0 in level)) - var/turf/position = get_turf(src) - if(isnull(position) || !(position.z in level)) - return -1 - if (!src.listening) - return -1 - if(freq in ANTAG_FREQS) - if(!(src.syndie)) - return -1//Prevents broadcast of messages over devices lacking the encryption - - return canhear_range - -/obj/item/device/radio/intercom/attackby(obj/item/W, mob/user) - switch (buildstage) - if (2) - ..() - if (isScrewdriver(W)) - wiresexposed = !wiresexposed - user.visible_message( - - SPAN_NOTICE("\The [user] has [wiresexposed ? "exposed" : "unexposed"] \the [src]'s wiring."), - SPAN_NOTICE("You [wiresexposed ? "expose" : "unexpose"] \the [src]'s wiring.") - - ) - playsound(loc, 'sound/items/Screwdriver.ogg', 50, 1) - update_icon() - return - else if (wiresexposed && isWirecutter(W)) - user.visible_message( - - SPAN_WARNING("\The [user] has cut the wires inside \the [src]!"), - SPAN_NOTICE("You have cut the wires inside \the [src].") - - ) - playsound(loc, 'sound/items/Wirecutter.ogg', 50, 1) - new/obj/item/stack/cable_coil(get_turf(src), 5) - b_stat = 0 - buildstage = 1 - update_icon() - return - - if (1) - if (isCoil(W)) - var/obj/item/stack/cable_coil/C = W - if (C.use(5)) - user.visible_message( - - SPAN_NOTICE("\The [user] has added wiring to \the [src]."), - SPAN_NOTICE("You add wiring to \the [src].") - - ) - buildstage = 2 - b_stat = 1 - update_icon() - return - - else - to_chat(user, SPAN_WARNING("You need 5 pieces of cable to wire \the [src].")) - return - - else if (isCrowbar(W)) - to_chat(user, SPAN_NOTICE("You start prying out the circuits from \the [src].")) - - playsound(loc, 'sound/items/Crowbar.ogg', 50, 1) - if (do_after(user, 2 SECONDS, src, DO_PUBLIC_UNIQUE) && buildstage == 1) - user.visible_message( - - SPAN_NOTICE("\The [user] has pried the circuits out of \the [src]."), - SPAN_NOTICE("You pry the circuits out of \the [src].") - - ) - new /obj/item/intercom_electronics(get_turf(user)) - buildstage = 0 - update_icon() - return - if (0) - if (istype(W, /obj/item/intercom_electronics)) - user.visible_message( - - SPAN_NOTICE("\The [user] has inserted the circuits into \the [src]."), - SPAN_NOTICE("You insert the circuits into \the [src].") - - ) - qdel(W) - buildstage = 1 - update_icon() - return - else if (isWrench(W)) - user.visible_message( - - SPAN_NOTICE("\The [user] has removed the intercom assembly from the wall."), - SPAN_NOTICE("You remove the intercom assembly from the wall.") - ) - new /obj/item/frame/intercom(get_turf(user)) - playsound(loc, 'sound/items/Ratchet.ogg', 50, 1) - qdel(src) - return - -/obj/item/device/radio/intercom/get_mechanics_info() - . = ..() - . += "

              To construct:

              \ -
                \ -
              1. Attach the frame to the wall
              2. \ -
              3. Install the circuitboard into the frame
              4. \ -
              5. Use cables to wire the intercom
              6. \ -
              7. Screwdriver to close the panel
              8. \ -
              \ -

              To deconstruct:

              \ -
                \ -
              1. Screwdriver to open the panel
              2. \ -
              3. Wirecutters to remove the wiring
              4. \ -
              5. Crowbar to remove the circuitry
              6. \ -
              7. Wrench to remove the frame from the wall
              8. \ -
              " - -/obj/item/device/radio/intercom/Process() - if (wiresexposed) - on = FALSE - return - if(((world.timeofday - last_tick) > 30) || ((world.timeofday - last_tick) < 0)) - last_tick = world.timeofday - var/old_on = on - - if(!src.loc) - on = FALSE - else - var/area/A = get_area(src) - if(!A) - on = FALSE - else - on = A.powered(EQUIP) // set "on" to the power status - - if (on != old_on) - update_icon() - -/obj/item/device/radio/intercom/on_update_icon() - if (buildstage == 2 && wiresexposed) - icon_state = "intercom-b2" - else if (buildstage == 1) - icon_state = "intercom-b1" - else if (buildstage == 0) - icon_state = "intercom-f" - else if (!on) - icon_state = "intercom-p" - else - icon_state = "intercom_[broadcasting][listening]" - -/obj/item/device/radio/intercom/ToggleBroadcast() - ..() - update_icon() - -/obj/item/device/radio/intercom/ToggleReception() - ..() - update_icon() - -/obj/item/device/radio/intercom/broadcasting - broadcasting = 1 - -/obj/item/intercom_electronics - name = "intercom electronics" - icon = 'icons/obj/doors/door_assembly.dmi' - icon_state = "door_electronics" - desc = "The label reads 'Intercom'. Wonder what it's for?" - w_class = ITEM_SIZE_SMALL - matter = list(MATERIAL_STEEL = 50, MATERIAL_GLASS = 50) - -/obj/item/intercom_electronics/get_mechanics_info() - . = ..() - . += "

              To construct:

              \ -
                \ -
              1. Attach the frame to the wall
              2. \ -
              3. Install the circuitboard into the frame
              4. \ -
              5. Use cables to wire the intercom
              6. \ -
              7. Screwdriver to close the panel
              8. \ -
              " -/obj/item/device/radio/intercom/locked - var/locked_frequency - -/obj/item/device/radio/intercom/locked/set_frequency() - ..(locked_frequency) - -/obj/item/device/radio/intercom/locked/list_channels() - return "" - -/obj/item/device/radio/intercom/locked/ai_private - name = "\improper AI intercom" - locked_frequency = AI_FREQ - broadcasting = 1 - listening = 1 - -/obj/item/device/radio/intercom/locked/confessional - name = "confessional intercom" - locked_frequency = 1480 diff --git a/code/game/objects/items/devices/radio/radio.dm b/code/game/objects/items/devices/radio/radio.dm deleted file mode 100644 index fbe35f043e8f8..0000000000000 --- a/code/game/objects/items/devices/radio/radio.dm +++ /dev/null @@ -1,933 +0,0 @@ -/obj/item/device/radio - icon = 'icons/obj/radio.dmi' - name = "shortwave radio" - suffix = "\[3\]" - icon_state = "walkietalkie" - item_state = "walkietalkie" - - var/on = 1 // 0 for off - var/last_transmission - var/frequency = PUB_FREQ //common chat - var/default_frequency - var/traitor_frequency = 0 //tune to frequency to unlock traitor supplies - var/canhear_range = 3 // the range which mobs can hear this radio from - var/datum/wires/radio/wires = null - var/b_stat = 0 - var/broadcasting = 0 - var/listening = 1 - var/list/channels = list() //see communications.dm for full list. First channel is a "default" for :h - var/subspace_transmission = 0 - var/syndie = 0//Holder to see if it's a syndicate encrypted radio - var/intercept = 0 //can intercept other channels - obj_flags = OBJ_FLAG_CONDUCTIBLE - slot_flags = SLOT_BELT - throw_speed = 2 - throw_range = 9 - w_class = ITEM_SIZE_SMALL - - matter = list(MATERIAL_GLASS = 25, MATERIAL_ALUMINIUM = 75) - var/const/FREQ_LISTENING = 1 - var/list/internal_channels - - var/obj/item/cell/device/cell = /obj/item/cell/device/standard - var/power_usage = 11 // about an hour, give or take 10 minutes. - - var/datum/radio_frequency/radio_connection - var/list/datum/radio_frequency/secure_radio_connections = new - - var/last_radio_sound = -INFINITY - - var/intercom_handling = FALSE - -/obj/item/device/radio/hailing - name = "shortwave radio (Hailing)" - frequency = HAIL_FREQ - -/obj/item/device/radio/proc/set_frequency(new_frequency) - radio_controller.remove_object(src, frequency) - frequency = new_frequency - radio_connection = radio_controller.add_object(src, frequency, RADIO_CHAT) - -/obj/item/device/radio/Initialize() - . = ..() - wires = new(src) - if(ispath(cell)) - cell = new cell(src) - on = FALSE // start powered off - internal_channels = GLOB.using_map.default_internal_channels() - GLOB.listening_objects += src - - if(frequency < RADIO_LOW_FREQ || frequency > RADIO_HIGH_FREQ) - frequency = sanitize_frequency(frequency, RADIO_LOW_FREQ, RADIO_HIGH_FREQ) - set_frequency(frequency) - if (!default_frequency) - default_frequency = frequency - - for (var/ch_name in channels) - secure_radio_connections[ch_name] = radio_controller.add_object(src, radiochannels[ch_name], RADIO_CHAT) - -/obj/item/device/radio/Process() - if(power_usage && on) //radio will use power and is on - var/obj/item/cell/has_cell = get_cell() - if(!has_cell) // No cell - on = FALSE - STOP_PROCESSING(SSobj, src) - return FALSE - if(!has_cell.checked_use(power_usage * CELLRATE)) // Use power and display if we run out. - on = FALSE - STOP_PROCESSING(SSobj, src) - visible_message(SPAN_WARNING("[icon2html(src, viewers(src))] [src] lets out a quiet click as it powers down."), SPAN_WARNING("You hear \a [src] let out a quiet click.")) - return FALSE - - - -/obj/item/device/radio/Destroy() - QDEL_NULL(wires) - GLOB.listening_objects -= src - if(radio_controller) - radio_controller.remove_object(src, frequency) - for (var/ch_name in channels) - radio_controller.remove_object(src, radiochannels[ch_name]) - if(get_cell()) - STOP_PROCESSING(SSobj, src) - return ..() - -/obj/item/device/radio/attack_self(mob/user as mob) - user.set_machine(src) - interact(user) - -/obj/item/device/radio/interact(mob/user) - if(!user) - return 0 - - if(b_stat) - wires.Interact(user) - - else - ui_interact(user) - -/obj/item/device/radio/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1, datum/nanoui/master_ui = null, datum/topic_state/state = GLOB.default_state) - var/data[0] - - data["power"] = on - data["mic_status"] = broadcasting - data["speaker"] = listening - data["freq"] = format_frequency(frequency) - data["default_freq"] = format_frequency(default_frequency) - data["rawfreq"] = num2text(frequency) - var/obj/item/cell/has_cell = get_cell() - if(has_cell) - var/charge = round(has_cell.percent()) - data["charge"] = charge ? "[charge]%" : "NONE" - data["mic_cut"] = (wires.IsIndexCut(WIRE_TRANSMIT) || wires.IsIndexCut(WIRE_SIGNAL)) - data["spk_cut"] = (wires.IsIndexCut(WIRE_RECEIVE) || wires.IsIndexCut(WIRE_SIGNAL)) - - var/list/chanlist = list_channels(user) - if(islist(chanlist) && chanlist.len) - data["chan_list"] = chanlist - data["chan_list_len"] = chanlist.len - - if(syndie) - data["useSyndMode"] = 1 - - ui = SSnano.try_update_ui(user, src, ui_key, ui, data, force_open) - if(!ui) - ui = new(user, src, ui_key, "radio_basic.tmpl", "[name]", 400, 430, state = state) - ui.set_initial_data(data) - ui.open() - -/obj/item/device/radio/proc/list_channels(var/mob/user) - return list_internal_channels(user) - -/obj/item/device/radio/proc/list_secure_channels(var/mob/user) - var/dat[0] - - for(var/ch_name in channels) - var/chan_stat = channels[ch_name] - var/listening = !!(chan_stat & FREQ_LISTENING) != 0 - - dat.Add(list(list("chan" = ch_name, "display_name" = ch_name, "secure_channel" = 1, "sec_channel_listen" = !listening, "chan_span" = frequency_span_class(radiochannels[ch_name])))) - - return dat - -/obj/item/device/radio/proc/list_internal_channels(var/mob/user) - var/dat[0] - for(var/internal_chan in internal_channels) - if(has_channel_access(user, internal_chan)) - dat.Add(list(list("chan" = internal_chan, "display_name" = get_frequency_default_name(text2num(internal_chan)), "chan_span" = frequency_span_class(text2num(internal_chan))))) - - return dat - -/obj/item/device/radio/proc/has_channel_access(var/mob/user, var/freq) - if(!user) - return 0 - - if(!(freq in internal_channels)) - return 0 - - return user.has_internal_radio_channel_access(internal_channels[freq]) - -/mob/proc/has_internal_radio_channel_access(var/list/req_one_accesses) - var/obj/item/card/id/I = GetIdCard() - if (!length(req_one_accesses)) - return TRUE // No access flags means all access - else - return has_access(list(req_one_accesses), I ? I.GetAccess() : list()) // Double list does an OR check instead of the usual AND. - -/mob/observer/ghost/has_internal_radio_channel_access(var/list/req_one_accesses) - return can_admin_interact() - -/obj/item/device/radio/get_cell() - return cell - -/obj/item/device/radio/proc/text_sec_channel(var/chan_name, var/chan_stat) - var/list = !!(chan_stat&FREQ_LISTENING)!=0 - return {" - [chan_name]
              - Speaker: [list ? "Engaged" : "Disengaged"]
              - "} - -/obj/item/device/radio/proc/reset_frequency() - if (default_frequency) - frequency = default_frequency - -/obj/item/device/radio/proc/ToggleBroadcast() - broadcasting = !broadcasting && !(wires.IsIndexCut(WIRE_TRANSMIT) || wires.IsIndexCut(WIRE_SIGNAL)) - -/obj/item/device/radio/proc/ToggleReception() - listening = !listening && !(wires.IsIndexCut(WIRE_RECEIVE) || wires.IsIndexCut(WIRE_SIGNAL)) - -/obj/item/device/radio/proc/TogglePower() - if(!power_usage) - return FALSE //Can't toggle power if there's no power to use - var/obj/item/cell/has_cell = get_cell() - if(!has_cell || !has_cell.check_charge(power_usage * CELLRATE)) // No cell or not enough power to turn on - return FALSE - - //We're good to toggle state - on = !on - if(on) - if(ismob(src.loc)) - playsound(src.loc, 'sound/effects/walkieon.ogg', 40, 0, -1) - START_PROCESSING(SSobj, src) - else - STOP_PROCESSING(SSobj, src) - -/obj/item/device/radio/CanUseTopic() - if(!on && !get_cell()) // We need to still be able to use the topic if we use power - return STATUS_CLOSE - return ..() - -/obj/item/device/radio/Topic(href, href_list) - if(..()) - return TRUE - - usr.set_machine(src) - if (href_list["track"]) - var/mob/target = locate(href_list["track"]) - var/mob/living/silicon/ai/A = locate(href_list["track2"]) - if(A && target) - A.ai_actual_track(target) - . = TRUE - - else if (href_list["freq"]) - var/new_frequency = (frequency + text2num(href_list["freq"])) - if ((new_frequency < PUBLIC_LOW_FREQ || new_frequency > PUBLIC_HIGH_FREQ)) - new_frequency = sanitize_frequency(new_frequency) - set_frequency(new_frequency) - if(hidden_uplink) - if(hidden_uplink.check_trigger(usr, frequency, traitor_frequency)) - close_browser(usr, "window=radio") - . = TRUE - else if (href_list["default_freq"]) - reset_frequency() - if(hidden_uplink) - if(hidden_uplink.check_trigger(usr, frequency, traitor_frequency)) - close_browser(usr, "window=radio") - . = TRUE - else if (href_list["power"]) - TogglePower() - . = TRUE - else if (href_list["talk"]) - ToggleBroadcast() - . = TRUE - else if (href_list["listen"]) - var/chan_name = href_list["ch_name"] - if (!chan_name) - ToggleReception() - else - if (channels[chan_name] & FREQ_LISTENING) - channels[chan_name] &= ~FREQ_LISTENING - else - channels[chan_name] |= FREQ_LISTENING - . = TRUE - else if(href_list["spec_freq"]) - var freq = href_list["spec_freq"] - if(has_channel_access(usr, freq)) - set_frequency(text2num(freq)) - . = TRUE - if(href_list["nowindow"]) // here for pAIs, maybe others will want it, idk - return TRUE - - if(href_list["remove_cell"]) - if(cell && b_stat) - var/mob/user = usr - user.put_in_hands(cell) - to_chat(user, "You remove [cell] from \the [src].") - cell = null - return TRUE - - if(.) - SSnano.update_uis(src) - -/obj/item/device/radio/proc/autosay(var/message, var/from, var/channel) //BS12 EDIT - var/datum/radio_frequency/connection = null - if(channel && channels && channels.len > 0) - if (channel == "department") - channel = channels[1] - connection = secure_radio_connections[channel] - else - connection = radio_connection - channel = null - if (!istype(connection)) - return - var/mob/living/silicon/ai/A = new /mob/living/silicon/ai(src, null, null, 1) - A.fully_replace_character_name(from) - talk_into(A, message, channel,"states") - qdel(A) - -// Interprets the message mode when talking into a radio, possibly returning a connection datum -/obj/item/device/radio/proc/handle_message_mode(mob/living/M as mob, message, message_mode) - // If a channel isn't specified, send to common. - if(!message_mode || message_mode == "headset") - return radio_connection - - // Otherwise, if a channel is specified, look for it. - if(channels && channels.len > 0) - if (message_mode == "department") // Department radio shortcut - message_mode = channels[1] - - if (channels[message_mode]) // only broadcast if the channel is set on - return secure_radio_connections[message_mode] - - // If we were to send to a channel we don't have, drop it. - return null - -/obj/item/device/radio/talk_into(mob/living/M, message, channel, var/verb = "says", var/datum/language/speaking = null) - if(!on) return 0 // the device has to be on - // Fix for permacell radios, but kinda eh about actually fixing them. - if(!M || !message) return 0 - - if(speaking && (speaking.flags & (NONVERBAL|SIGNLANG))) return 0 - - if (!broadcasting) - // Sedation chemical effect should prevent radio use (Chloral and Soporific) - var/mob/living/carbon/C = M - if ((istype(C)) && (C.chem_effects[CE_SEDATE] || C.incapacitated(INCAPACITATION_DISRUPTED))) - to_chat(M, SPAN_WARNING("You're unable to reach \the [src].")) - return 0 - - if((istype(C)) && C.radio_interrupt_cooldown > world.time) - to_chat(M, SPAN_WARNING("You're disrupted as you reach for \the [src].")) - return 0 - - if(istype(M)) M.trigger_aiming(TARGET_CAN_RADIO) - - // Uncommenting this. To the above comment: - // The permacell radios aren't suppose to be able to transmit, this isn't a bug and this "fix" is just making radio wires useless. -Giacom - if(wires.IsIndexCut(WIRE_TRANSMIT)) // The device has to have all its wires and shit intact - return 0 - - if(!radio_connection) - set_frequency(frequency) - - if(loc == M) - playsound(loc, 'sound/effects/walkietalkie.ogg', 20, 0, -1) - - - /* Quick introduction: - This new radio system uses a very robust FTL signaling technology unoriginally - dubbed "subspace" which is somewhat similar to 'blue-space' but can't - actually transmit large mass. Headsets are the only radio devices capable - of sending subspace transmissions to the Communications Satellite. - - A headset sends a signal to a subspace listener/reciever elsewhere in space, - the signal gets processed and logged, and an audible transmission gets sent - to each individual headset. - */ - - //#### Grab the connection datum ####// - var/datum/radio_frequency/connection = handle_message_mode(M, message, channel) - if (!istype(connection)) - return 0 - - var/turf/position = get_turf(src) - - //#### Tagging the signal with all appropriate identity values ####// - - // ||-- The mob's name identity --|| - var/displayname = M.name // grab the display name (name you get when you hover over someone's icon) - var/real_name = M.real_name // mob's real name - var/mobkey = "none" // player key associated with mob - var/voicemask = 0 // the speaker is wearing a voice mask - if(M.client) - mobkey = M.key // assign the mob's key - - - var/jobname // the mob's "job" - - // --- Human: use their actual job --- - if (ishuman(M)) - var/mob/living/carbon/human/H = M - jobname = H.get_assignment() - - // --- Carbon Nonhuman --- - else if (iscarbon(M)) // Nonhuman carbon mob - jobname = "No id" - - // --- AI --- - else if (isAI(M)) - jobname = "AI" - - // --- Cyborg --- - else if (isrobot(M)) - jobname = "Robot" - - // --- Personal AI (pAI) --- - else if (istype(M, /mob/living/silicon/pai)) - jobname = "Personal AI" - - // --- Unidentifiable mob --- - else - jobname = "Unknown" - - - // --- Modifications to the mob's identity --- - - // The mob is disguising their identity: - if (ishuman(M) && M.GetVoice() != real_name) - displayname = M.GetVoice() - jobname = "Unknown" - voicemask = 1 - - - - /* ###### Radio headsets can only broadcast through subspace ###### */ - if(subspace_transmission) - // First, we want to generate a new radio signal - var/datum/signal/signal = new - signal.transmission_method = 2 // 2 would be a subspace transmission. - // transmission_method could probably be enumerated through #define. Would be neater. - - // --- Finally, tag the actual signal with the appropriate values --- - signal.data = list( - // Identity-associated tags: - "mob" = M, // store a reference to the mob - "mobtype" = M.type, // the mob's type - "realname" = real_name, // the mob's real name - "name" = displayname, // the mob's display name - "job" = jobname, // the mob's job - "key" = mobkey, // the mob's key - "vmessage" = pick(M.speak_emote), // the message to display if the voice wasn't understood - "vname" = M.voice_name, // the name to display if the voice wasn't understood - "vmask" = voicemask, // 1 if the mob is using a voice gas mask - - // We store things that would otherwise be kept in the actual mob - // so that they can be logged even AFTER the mob is deleted or something - - // Other tags: - "compression" = rand(45,50), // compressed radio signal - "message" = message, // the actual sent message - "connection" = connection, // the radio connection to use - "radio" = src, // stores the radio used for transmission - "slow" = 0, // how much to sleep() before broadcasting - simulates net lag - "traffic" = 0, // dictates the total traffic sum that the signal went through - "type" = 0, // determines what type of radio input it is: normal broadcast - "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 - "channel_tag" = "[connection.frequency]", // channel tag for the message - "channel_color" = channel_color_presets["Menacing Maroon"], // radio message color - "language" = speaking, - "verb" = verb - ) - signal.frequency = connection.frequency // Quick frequency set - - //#### Sending the signal to all subspace receivers ####// - - for(var/obj/machinery/telecomms/receiver/R in telecomms_list) - R.receive_signal(signal) - - // Allinone can act as receivers. - for(var/obj/machinery/telecomms/allinone/R in telecomms_list) - R.receive_signal(signal) - - // Receiving code can be located in Telecommunications.dm - if(signal.data["done"] && (position.z in signal.data["level"])) - return TRUE //Huzzah, sent via subspace - - else //Less huzzah, we have to fallback - for(var/obj/item/device/radio/R in loc) - if(!R.subspace_transmission) - return R.talk_into(M, message, channel, verb, speaking) - return FALSE - - /* ###### Intercoms and station-bounced radios ###### */ - - var/filter_type = 2 - - /* --- Intercoms can only broadcast to other intercoms, but bounced radios can broadcast to bounced radios and intercoms --- */ - if(istype(src, /obj/item/device/radio/intercom)) - filter_type = 1 - - - var/datum/signal/signal = new - signal.transmission_method = 2 - - - /* --- Try to send a normal subspace broadcast first */ - - signal.data = list( - - "mob" = M, // store a reference to the mob - "mobtype" = M.type, // the mob's type - "realname" = real_name, // the mob's real name - "name" = displayname, // the mob's display name - "job" = jobname, // the mob's job - "key" = mobkey, // the mob's key - "vmessage" = pick(M.speak_emote), // the message to display if the voice wasn't understood - "vname" = M.voice_name, // the name to display if the voice wasn't understood - "vmask" = voicemask, // 1 if the mob is using a voice gas mas - - "compression" = 0, // uncompressed radio signal - "message" = message, // the actual sent message - "connection" = connection, // the radio connection to use - "radio" = src, // stores the radio used for transmission - "slow" = 0, - "traffic" = 0, - "type" = 0, - "server" = null, - "reject" = 0, - "level" = position.z, - "channel_tag" = "#unkn", - "channel_color" = channel_color_presets["Menacing Maroon"], - "language" = speaking, - "verb" = verb - ) - signal.frequency = connection.frequency // Quick frequency set - var/obj/item/cell/has_cell = get_cell() - if(has_cell && has_cell.percent() < 20) - signal.data["compression"] = max(0, 80 - has_cell.percent()*3) - for(var/obj/machinery/telecomms/receiver/R in telecomms_list) - R.receive_signal(signal) - - sleep(rand(10,25)) // wait a little... - - if(signal.data["done"] && (position.z in signal.data["level"])) - // we're done here. - return 1 - - // Oh my god; the comms are down or something because the signal hasn't been broadcasted yet in our level. - // Send a mundane broadcast with limited targets: - - //THIS IS TEMPORARY. YEAH RIGHT - if(!connection) return 0 //~Carn - return Broadcast_Message(connection, M, voicemask, pick(M.speak_emote), - src, message, displayname, jobname, real_name, M.voice_name, - filter_type, signal.data["compression"], GetConnectedZlevels(position.z), connection.frequency, verb, speaking, - "[connection.frequency]", channel_color_presets["Menacing Maroon"]) - - -/obj/item/device/radio/hear_talk(mob/M as mob, msg, var/verb = "says", var/datum/language/speaking = null) - - if (broadcasting) - if(get_dist(src, M) <= canhear_range) - talk_into(M, msg,null,verb,speaking) - - -/obj/item/device/radio/proc/receive_range(freq, level) - // check if this radio can receive on the given frequency, and if so, - // what the range is in which mobs will hear the radio - // returns: -1 if can't receive, range otherwise - if (!wires) - return -1 - if (wires.IsIndexCut(WIRE_RECEIVE)) - return -1 - if(!listening) - return -1 - if(!(0 in level)) - var/turf/position = get_turf(src) - if(!position || !(position.z in level)) - return -1 - if(freq in ANTAG_FREQS) - if(!(src.syndie))//Checks to see if it's allowed on that frequency, based on the encryption keys - return -1 - if (!on) - return -1 - if (!freq) //recieved on main frequency - if (!listening) - return -1 - else - var/accept = (freq==frequency && listening) - if (!accept) - for (var/ch_name in channels) - var/datum/radio_frequency/RF = secure_radio_connections[ch_name] - if (RF && RF.frequency==freq && (channels[ch_name]&FREQ_LISTENING)) - accept = 1 - break - if (!accept) - return -1 - return canhear_range - -/obj/item/device/radio/proc/send_hear(freq, level) - - var/range = receive_range(freq, level) - if(range > -1) - return get_mobs_or_objects_in_view(canhear_range, src) - - -/obj/item/device/radio/examine(mob/user, distance) - . = ..() - if (distance <= 1 || loc == user) - if (b_stat) - to_chat(user, "\The [src] can be attached and modified!") - else - to_chat(user, "\The [src] can not be modified or attached!") - if (power_usage && cell) - to_chat(user, "\The [src] charge meter reads [round(cell.percent(), 0.1)]%.") - -/obj/item/device/radio/attackby(obj/item/W as obj, mob/user as mob) - ..() - user.set_machine(src) - if(isScrewdriver(W)) - b_stat = !b_stat - if (b_stat) - user.show_message("\The [src] can now be attached and modified!") - else - user.show_message("\The [src] can no longer be modified or attached!") - updateDialog() - return - if(!cell && power_usage && istype(W, /obj/item/cell/device) && user.unEquip(W, target = src)) - to_chat(user, "You put [W] in \the [src].") - cell = W - return - -/obj/item/device/radio/emp_act(severity) - broadcasting = prob(50) - listening = prob(50) - for (var/ch_name in channels) - channels[ch_name] = prob(50) - if(cell) - cell.emp_act(severity) - ..() - -/obj/item/device/radio/proc/recalculateChannels() - return - -/////////////////////////////// -//////////Borg Radios////////// -/////////////////////////////// -//Giving borgs their own radio to have some more room to work with -Sieve - -/obj/item/device/radio/borg - var/mob/living/silicon/robot/myborg = null // Cyborg which owns this radio. Used for power checks - var/obj/item/device/encryptionkey/keyslot = null//Borg radios can handle a single encryption key - var/shut_up = 1 - icon = 'icons/obj/robot_component.dmi' // Cyborgs radio icons should look like the component. - icon_state = "radio" - canhear_range = 0 - subspace_transmission = 1 - cell = null - power_usage = 0 - -/obj/item/device/radio/borg/ert - keyslot = /obj/item/device/encryptionkey/ert - -/obj/item/device/radio/borg/syndicate - keyslot = /obj/item/device/encryptionkey/syndicate - -/obj/item/device/radio/borg/New(var/mob/living/silicon/robot/loc) - if(!istype(loc)) - CRASH("Invalid spawn location: [log_info_line(loc)]") - ..() - if(keyslot) - keyslot = new keyslot(src) - myborg = loc - -/obj/item/device/radio/borg/Initialize() - . = ..() - return INITIALIZE_HINT_LATELOAD - -/obj/item/device/radio/born/LateInitialize() - . = ..() - recalculateChannels() - -/obj/item/device/radio/borg/Destroy() - QDEL_NULL(keyslot) - myborg = null - return ..() - -/obj/item/device/radio/borg/list_channels(var/mob/user) - return list_secure_channels(user) - -/obj/item/device/radio/borg/talk_into() - . = ..() - if (isrobot(src.loc)) - var/mob/living/silicon/robot/R = src.loc - var/datum/robot_component/C = R.components["radio"] - R.cell_use_power(C.active_usage) - -/obj/item/device/radio/borg/attackby(obj/item/W as obj, mob/user as mob) -// ..() - user.set_machine(src) - if (!( isScrewdriver(W) || (istype(W, /obj/item/device/encryptionkey/ )))) - return - - if(isScrewdriver(W)) - if(keyslot) - for(var/ch_name in channels) - radio_controller.remove_object(src, radiochannels[ch_name]) - secure_radio_connections[ch_name] = null - - if(keyslot) - keyslot.dropInto(user.loc) - - recalculateChannels() - to_chat(user, "You pop out the encryption key in the radio!") - - else - to_chat(user, "This radio doesn't have any encryption keys!") - - if(istype(W, /obj/item/device/encryptionkey)) - if(keyslot) - to_chat(user, "The radio can't hold another key!") - return - - if(!keyslot) - if(!user.unEquip(W, src)) - return - keyslot = W - - recalculateChannels() - -/obj/item/device/radio/borg/recalculateChannels() - src.channels = list() - src.syndie = 0 - - var/mob/living/silicon/robot/D = src.loc - if(istype(D.module)) - for(var/ch_name in D.module.channels) - if(ch_name in src.channels) - continue - src.channels += ch_name - src.channels[ch_name] += D.module.channels[ch_name] - if(keyslot) - for(var/ch_name in keyslot.channels) - if(ch_name in src.channels) - continue - src.channels += ch_name - src.channels[ch_name] += keyslot.channels[ch_name] - - if(keyslot.syndie) - src.syndie = 1 - - for (var/ch_name in src.channels) - if(!radio_controller) - src.SetName("broken radio") - return - - secure_radio_connections[ch_name] = radio_controller.add_object(src, radiochannels[ch_name], RADIO_CHAT) - -/obj/item/device/radio/borg/Topic(href, href_list) - if(..()) - return 1 - if (href_list["mode"]) - var/enable_subspace_transmission = text2num(href_list["mode"]) - if(enable_subspace_transmission != subspace_transmission) - subspace_transmission = !subspace_transmission - if(subspace_transmission) - to_chat(usr, "Subspace Transmission is enabled") - else - to_chat(usr, "Subspace Transmission is disabled") - - if(subspace_transmission == 0)//Simple as fuck, clears the channel list to prevent talking/listening over them if subspace transmission is disabled - channels = list() - else - recalculateChannels() - . = 1 - if (href_list["shutup"]) // Toggle loudspeaker mode, AKA everyone around you hearing your radio. - var/do_shut_up = text2num(href_list["shutup"]) - if(do_shut_up != shut_up) - shut_up = !shut_up - if(shut_up) - canhear_range = 0 - to_chat(usr, "Loadspeaker disabled.") - else - canhear_range = 3 - to_chat(usr, "Loadspeaker enabled.") - . = 1 - - if(.) - SSnano.update_uis(src) - -/obj/item/device/radio/borg/interact(mob/user as mob) - if(!on) - return - - . = ..() - -/obj/item/device/radio/borg/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1) - var/data[0] - - data["mic_status"] = broadcasting - data["speaker"] = listening - data["freq"] = format_frequency(frequency) - data["rawfreq"] = num2text(frequency) - - var/list/chanlist = list_channels(user) - if(islist(chanlist) && chanlist.len) - data["chan_list"] = chanlist - data["chan_list_len"] = chanlist.len - - if(syndie) - data["useSyndMode"] = 1 - - data["has_loudspeaker"] = 1 - data["loudspeaker"] = !shut_up - data["has_subspace"] = 1 - data["subspace"] = subspace_transmission - - ui = SSnano.try_update_ui(user, src, ui_key, ui, data, force_open) - if(!ui) - ui = new(user, src, ui_key, "radio_basic.tmpl", "[name]", 400, 430) - ui.set_initial_data(data) - ui.open() - -/obj/item/device/radio/proc/config(op) - if(radio_controller) - for (var/ch_name in channels) - radio_controller.remove_object(src, radiochannels[ch_name]) - secure_radio_connections = new - channels = op - if(radio_controller) - for (var/ch_name in op) - secure_radio_connections[ch_name] = radio_controller.add_object(src, radiochannels[ch_name], RADIO_CHAT) - return - -/obj/item/device/radio/map_preset - var/preset_name - var/use_common = FALSE - channels = list() - -/obj/item/device/radio/map_preset/Initialize() - if (!preset_name) - return ..() - - name = "[name] ([preset_name])" - frequency = assign_away_freq(preset_name) - channels += list( - preset_name = 1, - "Hailing" = 1 - ) - if (use_common) - channels += list("Common" = 1) - - . = ..() - - internal_channels = list( - num2text(frequency) = list(), - num2text(HAIL_FREQ) = list(), - ) - if (use_common) - internal_channels += list(num2text(PUB_FREQ) = list()) - -/obj/item/device/radio/off - listening = 0 - -/obj/item/device/radio/announcer - invisibility = 101 - listening = 0 - canhear_range = 0 - anchored = TRUE - simulated = FALSE - power_usage = 0 - channels=list("Engineering" = 1, "Security" = 1, "Medical" = 1, "Command" = 1, "Common" = 1, "Science" = 1, "Supply" = 1, "Service" = 1, "Exploration" = 1) - cell = null - -/obj/item/device/radio/announcer/Destroy() - SHOULD_CALL_PARENT(FALSE) - crash_with("attempt to delete a [src.type] detected, and prevented.") - return QDEL_HINT_LETMELIVE - -/obj/item/device/radio/announcer/Initialize() - . = ..() - forceMove(locate(1,1,GLOB.using_map.contact_levels.len ? GLOB.using_map.contact_levels[1] : 1)) - -/obj/item/device/radio/announcer/subspace - subspace_transmission = 1 - -/obj/item/device/radio/phone - broadcasting = 0 - icon = 'icons/obj/items.dmi' - icon_state = "red_phone" - randpixel = 0 - listening = 1 - name = "phone" - -/obj/item/device/radio/phone/medbay - frequency = MED_I_FREQ - -/obj/item/device/radio/phone/medbay/New() - ..() - internal_channels = GLOB.default_medbay_channels.Copy() - -/obj/item/device/radio/CouldUseTopic(var/mob/user) - ..() - if(istype(user, /mob/living/carbon)) - playsound(src, "button", 10) - -/obj/item/device/radio/intercept - name = "bulky radio" - desc = "A large radio fitted with several military-grade communication interception circuits." - icon_state = "radio" - intercept = 1 - w_class = ITEM_SIZE_NORMAL - - -//The exosuit radio subtype. It allows pilots to interact and consumes exosuit power - -/obj/item/device/radio/exosuit - name = "exosuit radio" - cell = null - intercom_handling = TRUE - -/obj/item/device/radio/exosuit/get_cell() - . = ..() - if(!.) - var/mob/living/exosuit/E = loc - if(istype(E)) - return E.get_cell() - -/obj/item/device/radio/exosuit/nano_host() - var/mob/living/exosuit/E = loc - if(istype(E)) - return E - return null - -/obj/item/device/radio/exosuit/attack_self(var/mob/user) - var/mob/living/exosuit/exosuit = loc - if(istype(exosuit) && exosuit.head && exosuit.head.radio && exosuit.head.radio.is_functional()) - user.set_machine(src) - interact(user) - else - to_chat(user, SPAN_WARNING("The radio is too damaged to function.")) - -/obj/item/device/radio/exosuit/CanUseTopic() - . = ..() - if(.) - var/mob/living/exosuit/exosuit = loc - if(istype(exosuit) && exosuit.head && exosuit.head.radio && exosuit.head.radio.is_functional()) - return ..() - -/obj/item/device/radio/exosuit/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1, datum/nanoui/master_ui = null, var/datum/topic_state/state = GLOB.mech_state) - . = ..() diff --git a/code/game/objects/items/devices/scanners/_scanner.dm b/code/game/objects/items/devices/scanners/_scanner.dm deleted file mode 100644 index d8905faa4929f..0000000000000 --- a/code/game/objects/items/devices/scanners/_scanner.dm +++ /dev/null @@ -1,96 +0,0 @@ -/obj/item/device/scanner - name = "handheld scanner" - desc = "A hand-held scanner of some sort. You shouldn't be seeing it." - icon_state = "atmos" - item_state = "analyzer" - w_class = ITEM_SIZE_SMALL - obj_flags = OBJ_FLAG_CONDUCTIBLE - slot_flags = SLOT_BELT - item_flags = ITEM_FLAG_NO_BLUDGEON - matter = list(MATERIAL_ALUMINIUM = 30,MATERIAL_GLASS = 20) - var/scan_title - var/scan_data - //For displaying scans - var/window_width = 450 - var/window_height = 600 - - var/use_delay - var/scan_sound - var/printout_color - -/obj/item/device/scanner/attack_self(mob/user) - show_menu(user) - -/obj/item/device/scanner/proc/show_menu(mob/user) - var/datum/browser/popup = new(user, "scanner", scan_title, window_width, window_height) - popup.set_content("[get_header()]
              [scan_data]") - popup.open() - -/obj/item/device/scanner/proc/get_header() - return "Print ReportClear data" - -/obj/item/device/scanner/proc/can_use(mob/user) - if (user.incapacitated()) - return - if (!user.IsAdvancedToolUser()) - return - return TRUE - -/obj/item/device/scanner/afterattack(atom/A, mob/user, proximity) - if(!proximity) - return - if(!can_use(user)) - return - if(is_valid_scan_target(A)) - user.visible_message( - SPAN_NOTICE("\The [user] runs \the [src] over \the [A]."), - SPAN_NOTICE("You run \the [src] over \the [A]."), - range = 2 - ) - if(scan_sound) - playsound(src, scan_sound, 30) - if(use_delay && !do_after(user, use_delay, A, DO_PUBLIC_UNIQUE)) - to_chat(user, "You stop scanning \the [A] with \the [src].") - return - scan(A, user) - if(!scan_title) - scan_title = "[capitalize(name)] scan - [A]" - else - to_chat(user, "You cannot get any results from \the [A] with \the [src].") - -/obj/item/device/scanner/proc/is_valid_scan_target(atom/O) - return FALSE - -/obj/item/device/scanner/proc/scan(atom/A, mob/user) - -/obj/item/device/scanner/proc/print_report_verb() - set name = "Print Report" - set category = "Object" - set src = usr - - var/mob/user = usr - if(!istype(user)) - return - if (user.incapacitated()) - return - print_report(user) - -/obj/item/device/scanner/OnTopic(var/user, var/list/href_list) - if(href_list["print"]) - print_report(user) - return 1 - if(href_list["clear"]) - to_chat(user, "You clear data buffer on [src].") - scan_data = null - scan_title = null - return 1 - -/obj/item/device/scanner/proc/print_report(var/mob/living/user) - if(!scan_data) - to_chat(user, "There is no scan data to print.") - return - var/obj/item/paper/P = new(get_turf(src), scan_data, "paper - [scan_title]") - if(printout_color) - P.color = printout_color - user.put_in_hands(P) - user.visible_message("\The [src] spits out a piece of paper.") diff --git a/code/game/objects/items/devices/scanners/gas.dm b/code/game/objects/items/devices/scanners/gas.dm deleted file mode 100644 index 44a9abcbb277d..0000000000000 --- a/code/game/objects/items/devices/scanners/gas.dm +++ /dev/null @@ -1,75 +0,0 @@ -/obj/item/device/scanner/gas - name = "gas analyzer" - desc = "A hand-held environmental scanner which reports current gas levels. Has a button to cycle modes." - icon = 'icons/obj/atmos_analyzer.dmi' - icon_state = "atmos" - item_state = "analyzer" - - origin_tech = list(TECH_MAGNET = 1, TECH_ENGINEERING = 1) - window_width = 350 - window_height = 400 - -/obj/item/device/scanner/gas/is_valid_scan_target(atom/O) - return istype(O) - -/obj/item/device/scanner/gas/scan(atom/A, mob/user) - var/air_contents = A.return_air() - if(!air_contents) - to_chat(user, SPAN_WARNING("Your [name] flashes a red light as it fails to analyze \the [A].")) - return - scan_data = atmosanalyzer_scan(A, air_contents) - show_menu(user) - -/proc/atmosanalyzer_scan(atom/target, datum/gas_mixture/mixture) - var/text_summary = "" - var/text_details = "" - . = "" - . += "

              Results of the analysis of \the [target]:

              " - if (!mixture) - mixture = target.return_air() - - if (mixture) - var/pressure = mixture.return_pressure() - var/total_moles = mixture.total_moles - - text_summary += "

              Summary:

                " - text_summary += "
              • Pressure: [round(pressure, 0.01)] kPa
              • " - text_summary += "
              • Total Moles: [round(total_moles, 0.01)]
              • " - text_summary += "
              • Volume: [mixture.volume]L
              • " - text_summary += "
              • Temperature: [round(mixture.temperature-T0C)]°C ([round(mixture.temperature)]K)
              • " - - var/list/summary_gasses = list() - - if (total_moles > 0 && length(mixture.gas)) - text_details += "

                Gas Details:

                " - for(var/mix in mixture.gas) - var/percentage = round(mixture.gas[mix]/total_moles * 100, 0.01) - if(!percentage) - continue - summary_gasses += "[percentage]% [gas_data.name[mix]]" - text_details += "
                [gas_data.name[mix]]
                  " - text_details += "
                • Percentage: [percentage]%
                • " - text_details += "
                • Moles: [round(mixture.gas[mix], 0.01)]
                • " - text_details += "
                • Specific Heat: [gas_data.specific_heat[mix]] J/(mol*K)
                • " - text_details += "
                • Molar Mass: [gas_data.molar_mass[mix]] kg/mol
                • " - var/list/traits = list() - if(gas_data.flags[mix] & XGM_GAS_FUEL) - traits += "can be used as combustion fuel" - if(gas_data.flags[mix] & XGM_GAS_OXIDIZER) - traits += "can be used as oxidizer" - if(gas_data.flags[mix] & XGM_GAS_CONTAMINANT) - traits += "contaminates clothing with toxic residue" - if(gas_data.flags[mix] & XGM_GAS_FUSION_FUEL) - traits += "can be used to fuel fusion reaction" - if (traits.len) - text_details += "
                • This gas [english_list(traits)]
                • " - text_details += "
                " - text_details += "
                " - - if (summary_gasses.len) - text_summary += "
              • Composition: [english_list(summary_gasses)]
              • " - text_summary += "
              " - . += "[text_summary][text_details]" - - else - . += SPAN_DANGER("\The [target] has no gases!") diff --git a/code/game/objects/items/devices/scanners/health.dm b/code/game/objects/items/devices/scanners/health.dm deleted file mode 100644 index 808f7feebe845..0000000000000 --- a/code/game/objects/items/devices/scanners/health.dm +++ /dev/null @@ -1,329 +0,0 @@ -/obj/item/device/scanner/health - name = "health analyzer" - desc = "A hand-held body scanner able to distinguish vital signs of the subject." - icon = 'icons/obj/health_analyzer.dmi' - icon_state = "health" - item_state = "analyzer" - item_flags = ITEM_FLAG_NO_BLUDGEON - matter = list(MATERIAL_ALUMINIUM = 200) - origin_tech = list(TECH_MAGNET = 1, TECH_BIO = 1) - printout_color = "#deebff" - var/mode = 1 - -/obj/item/device/scanner/health/is_valid_scan_target(atom/O) - return istype(O, /mob/living/carbon/human) || istype(O, /obj/structure/closet/body_bag) - -/obj/item/device/scanner/health/scan(atom/A, mob/user) - scan_data = medical_scan_action(A, user, src, mode) - playsound(src, 'sound/effects/fastbeep.ogg', 20) - -/proc/medical_scan_action(atom/target, mob/living/user, obj/scanner, var/verbose) - if (!user.IsAdvancedToolUser()) - to_chat(user, "You are not nimble enough to use this device.") - return - - if ((MUTATION_CLUMSY in user.mutations) && prob(50)) - user.visible_message("\The [user] runs \the [scanner] over the floor.") - to_chat(user, "Scan results for the floor:") - to_chat(user, "Overall Status: Healthy") - return - - var/mob/living/carbon/human/scan_subject = null - if (istype(target, /mob/living/carbon/human)) - scan_subject = target - else if (istype(target, /obj/structure/closet/body_bag)) - var/obj/structure/closet/body_bag/B = target - if(!B.opened) - var/list/scan_content = list() - for(var/mob/living/L in B.contents) - scan_content.Add(L) - - if (scan_content.len == 1) - for(var/mob/living/carbon/human/L in scan_content) - scan_subject = L - else if (scan_content.len > 1) - to_chat(user, "\The [scanner] picks up multiple readings inside \the [target], too close together to scan properly.") - return - else - to_chat(user, "\The [scanner] does not detect anyone inside \the [target].") - return - - if(!scan_subject) - return - - if (scan_subject.isSynthetic()) - to_chat(user, "\The [scanner] is designed for organic humanoid patients only.") - return - - . = medical_scan_results(scan_subject, verbose, user.get_skill_value(SKILL_MEDICAL)) - to_chat(user, "
              ") - to_chat(user, .) - to_chat(user, "
              ") - -/proc/medical_scan_results(var/mob/living/carbon/human/H, var/verbose, var/skill_level = SKILL_DEFAULT) - . = list() - var/header = list() - var/b - var/endb - var/dat = list() - - if(skill_level >= SKILL_BASIC) - header += "" - header += "" - header += "" - header += "" - header += "" - header += "" - header += "" - b = "" - endb = "" - - . += "[b]Scan results for \the [H]:[endb]" - - // Brain activity. - var/brain_result = "normal" - if(H.should_have_organ(BP_BRAIN)) - var/obj/item/organ/internal/brain/brain = H.internal_organs_by_name[BP_BRAIN] - if(!brain || H.stat == DEAD || (H.status_flags & FAKEDEATH)) - brain_result = "none, patient is braindead" - else if(H.stat != DEAD) - if(H.has_brain_worms()) - brain_result = "ERROR - aberrant/unknown brainwave patterns, advanced scanner recommended" - else - if(skill_level < SKILL_BASIC) - brain_result = "there's movement on the graph" - else if(istype(brain)) - switch(brain.get_current_damage_threshold()) - if(0) - brain_result = "normal" - if(1 to 2) - brain_result = "minor brain damage" - if(3 to 5) - brain_result = "weak" - if(6 to 8) - brain_result = "extremely weak" - if(9 to INFINITY) - brain_result = "fading" - else - brain_result = "ERROR - Hardware fault" - else - brain_result = "ERROR - Organ not recognized" - else - brain_result = "ERROR - Nonstandard biology" - dat += "Brain activity: [brain_result]." - - if(H.stat == DEAD || (H.status_flags & FAKEDEATH)) - dat += "[b]Time of Death:[endb] [time2text(worldtime2stationtime(H.timeofdeath), "hh:mm")]" - - // Pulse rate. - var/pulse_result = "normal" - if(H.should_have_organ(BP_HEART)) - if(H.status_flags & FAKEDEATH) - pulse_result = 0 - else - pulse_result = H.get_pulse(GETPULSE_TOOL) - pulse_result = "[pulse_result]bpm" - if(H.pulse() == PULSE_NONE) - pulse_result = "[pulse_result]" - else if(H.pulse() < PULSE_NORM) - pulse_result = "[pulse_result]" - else if(H.pulse() > PULSE_NORM) - pulse_result = "[pulse_result]" - else - pulse_result = "ERROR - Nonstandard biology" - dat += "Pulse rate: [pulse_result]." - - // Blood pressure. Based on the idea of a normal blood pressure being 120 over 80. - if(H.should_have_organ(BP_HEART)) - if(H.get_blood_volume() <= 70) - dat += "Severe blood loss detected." - var/oxygenation_string = "[H.get_blood_oxygenation()]% blood oxygenation" - switch(H.get_blood_oxygenation()) - if(BLOOD_VOLUME_OKAY to BLOOD_VOLUME_SAFE) - oxygenation_string = "[oxygenation_string]" - if(BLOOD_VOLUME_SURVIVE to BLOOD_VOLUME_OKAY) - oxygenation_string = "[oxygenation_string]" - if(-(INFINITY) to BLOOD_VOLUME_SURVIVE) - oxygenation_string = "[oxygenation_string]" - dat += "[b]Blood pressure:[endb] [H.get_blood_pressure()] ([oxygenation_string])" - else - dat += "[b]Blood pressure:[endb] N/A" - - // Body temperature. - dat += "Body temperature: [H.bodytemperature-T0C]°C ([H.bodytemperature*1.8-459.67]°F)" - - // Radiation. - switch(H.radiation) - if(-INFINITY to 0) - dat += "No radiation detected." - if(1 to 30) - dat += "Patient shows minor traces of radiation exposure." - if(31 to 60) - dat += "Patient is suffering from mild radiation poisoning." - if(61 to 90) - dat += "Patient is suffering from advanced radiation poisoning." - if(91 to 120) - dat += "Patient is suffering from severe radiation poisoning." - if(121 to 240) - dat += "Patient is suffering from extreme radiation poisoning. Immediate treatment recommended." - if(241 to INFINITY) - dat += "Patient is suffering from acute radiation poisoning. Immediate treatment recommended." - - // Traumatic shock. - if(H.is_asystole()) - dat += "Patient is suffering from cardiovascular shock. Administer CPR immediately." - else if(H.shock_stage > 80) - dat += "Patient is at serious risk of going into shock. Pain relief recommended." - - // Other general warnings. - if(skill_level >= SKILL_BASIC) - if(H.getOxyLoss() > 50) - dat += "[b]Severe oxygen deprivation detected.[endb]" - if(H.getToxLoss() > 50) - dat += "[b]Major systemic organ failure detected.[endb]" - if(H.getFireLoss() > 50) - dat += "[b]Severe burn damage detected.[endb]" - if(H.getBruteLoss() > 50) - dat += "[b]Severe anatomical damage detected.[endb]" - - if(skill_level >= SKILL_BASIC) - for(var/name in H.organs_by_name) - var/obj/item/organ/external/e = H.organs_by_name[name] - if(!e) - continue - var/limb = e.name - if(e.status & ORGAN_BROKEN) - if(((e.name == BP_L_ARM) || (e.name == BP_R_ARM) || (e.name == BP_L_LEG) || (e.name == BP_R_LEG)) && (!e.splinted)) - dat += "Unsecured fracture in subject [limb]. Splinting recommended for transport." - if(e.has_infected_wound()) - dat += "Infected wound detected in subject [limb]. Disinfection recommended." - - for(var/name in H.organs_by_name) - var/obj/item/organ/external/e = H.organs_by_name[name] - if(e && e.status & ORGAN_BROKEN) - dat += "Bone fractures detected. Advanced scanner required for location." - break - - var/found_bleed - var/found_tendon - var/found_disloc - for(var/obj/item/organ/external/e in H.organs) - if(e) - if(!found_disloc && e.dislocated >= 1) - dat += "Dislocation detected. Advanced scanner required for location." - found_disloc = TRUE - if(!found_bleed && (e.status & ORGAN_ARTERY_CUT)) - dat += "Arterial bleeding detected. Advanced scanner required for location." - found_bleed = TRUE - if(!found_tendon && (e.status & ORGAN_TENDON_CUT)) - dat += "Tendon or ligament damage detected. Advanced scanner required for location." - found_tendon = TRUE - if(found_disloc && found_bleed && found_tendon) - break - - . += (skill_level < SKILL_BASIC) ? shuffle(dat) : dat - dat = list() - - if(verbose) - // Limb status. - . += "[b]Specific limb damage:[endb]" - - var/list/damaged = H.get_damaged_organs(1,1) - if(damaged.len) - for(var/obj/item/organ/external/org in damaged) - var/limb_result = "[capitalize(org.name)][BP_IS_ROBOTIC(org) ? " (Cybernetic)" : ""]:" - if(org.brute_dam > 0) - limb_result = "[limb_result] \[[get_wound_severity(org.brute_ratio, (org.limb_flags & ORGAN_FLAG_HEALS_OVERKILL))] physical trauma\]" - if(org.burn_dam > 0) - limb_result = "[limb_result] \[[get_wound_severity(org.burn_ratio, (org.limb_flags & ORGAN_FLAG_HEALS_OVERKILL))] burns\]" - if(org.status & ORGAN_BLEEDING) - limb_result = "[limb_result] \[bleeding\]" - dat += limb_result - else - dat += "No detectable limb injuries." - . += (skill_level < SKILL_BASIC) ? shuffle(dat) : dat - - // Reagent data. - . += "[b]Reagent scan:[endb]" - - var/print_reagent_default_message = TRUE - if(H.reagents.total_volume) - var/unknown = 0 - var/reagentdata[0] - for(var/A in H.reagents.reagent_list) - var/datum/reagent/R = A - if(R.scannable) - print_reagent_default_message = FALSE - reagentdata[R.type] = "[round(H.reagents.get_reagent_amount(R.type), 1)]u [R.name]" - else - unknown++ - if(reagentdata.len) - print_reagent_default_message = FALSE - . += "Beneficial reagents detected in subject's blood:" - for(var/d in reagentdata) - . += reagentdata[d] - if(unknown) - print_reagent_default_message = FALSE - . += "Warning: Unknown substance[(unknown>1)?"s":""] detected in subject's blood." - - var/datum/reagents/ingested = H.get_ingested_reagents() - if(ingested && ingested.total_volume) - var/unknown = 0 - for(var/datum/reagent/R in ingested.reagent_list) - if(R.scannable) - print_reagent_default_message = FALSE - . += "[R.name] found in subject's stomach." - else - ++unknown - if(unknown) - print_reagent_default_message = FALSE - . += "Non-medical reagent[(unknown > 1)?"s":""] found in subject's stomach." - - if(H.chem_doses.len) - var/list/chemtraces = list() - for(var/T in H.chem_doses) - var/datum/reagent/R = T - if(initial(R.scannable)) - chemtraces += "[initial(R.name)] ([H.chem_doses[T]])" - if(chemtraces.len) - . += "Metabolism products of [english_list(chemtraces)] found in subject's system." - - if(print_reagent_default_message) - . += "No results." - - header = jointext(header, null) - . = jointext(.,"
              ") - . = jointext(list(header,.),null) - -// Calculates severity based on the ratios defined external limbs. -/proc/get_wound_severity(var/damage_ratio, var/can_heal_overkill = 0) - var/degree - - switch(damage_ratio) - if(0 to 0.1) - degree = "minor" - if(0.1 to 0.25) - degree = "moderate" - if(0.25 to 0.5) - degree = "significant" - if(0.5 to 0.75) - degree = "severe" - if(0.75 to 1) - degree = "extreme" - else - if(can_heal_overkill) - degree = "critical" - else - degree = "irreparable" - - return degree - -/obj/item/device/scanner/health/verb/toggle_mode() - set name = "Switch Verbosity" - set category = "Object" - - mode = !mode - if(mode) - to_chat(usr, "The scanner now shows specific limb damage.") - else - to_chat(usr, "The scanner no longer shows limb damage.") diff --git a/code/game/objects/items/devices/scanners/mass_spectrometer.dm b/code/game/objects/items/devices/scanners/mass_spectrometer.dm deleted file mode 100644 index acc7d73f90d2e..0000000000000 --- a/code/game/objects/items/devices/scanners/mass_spectrometer.dm +++ /dev/null @@ -1,88 +0,0 @@ -/obj/item/device/scanner/spectrometer - name = "mass spectrometer" - desc = "A hand-held mass spectrometer which identifies trace chemicals in a blood sample or analyzes unusual chemicals." - icon = 'icons/obj/spectrometer.dmi' - icon_state = "spectrometer" - item_state = "analyzer" - - atom_flags = ATOM_FLAG_NO_TEMP_CHANGE | ATOM_FLAG_OPEN_CONTAINER - origin_tech = list(TECH_MAGNET = 2, TECH_BIO = 2) - window_width = 550 - window_height = 300 - scan_sound = 'sound/effects/scanbeep.ogg' - var/details = 0 - -/obj/item/device/scanner/spectrometer/Initialize() - . = ..() - create_reagents(5) - -/obj/item/device/scanner/spectrometer/on_reagent_change() - update_icon() - -/obj/item/device/scanner/spectrometer/on_update_icon() - icon_state = initial(icon_state) - if(reagents.total_volume) - icon_state += "_s" - -/obj/item/device/scanner/spectrometer/is_valid_scan_target(atom/O) - if(!O.reagents || !O.reagents.total_volume) - return FALSE - return (O.atom_flags & ATOM_FLAG_OPEN_CONTAINER) || istype(O, /obj/item/reagent_containers/syringe) - -/obj/item/device/scanner/spectrometer/scan(atom/A, mob/user) - if(A != src) - to_chat(user, "\The [src] takes a sample out of \the [A]") - reagents.clear_reagents() - A.reagents.trans_to(src, 5) - scan_title = "Spectrometer scan - [A]" - scan_data = mass_spectrometer_scan(reagents, user, details) - reagents.clear_reagents() - user.show_message(scan_data) - -/obj/item/device/scanner/spectrometer/attack_self(mob/user) - if(!can_use(user)) - return - if(reagents.total_volume) - scan(src, user) - else - ..() - -/proc/mass_spectrometer_scan(var/datum/reagents/reagents, mob/user, var/details) - if(!reagents || !reagents.total_volume) - return "No sample to scan." - var/list/blood_traces = list() - var/list/blood_doses = list() - for(var/datum/reagent/R in reagents.reagent_list) - if(length(reagents.reagent_list) == 1) - var/datum/reagent/random/random = R - if(istype(random)) - return random.get_scan_data(user) - - if(R.type != /datum/reagent/blood) - return "The sample was contaminated! Please insert another sample" - else - blood_traces = R.data["trace_chem"] - blood_doses = R.data["dose_chem"] - break - - var/list/dat = list("Trace Chemicals Found: ") - for(var/T in blood_traces) - var/datum/reagent/R = T - if(details) - dat += "[initial(R.name)] ([blood_traces[T]] units) " - else - dat += "[initial(R.name)] " - if(details) - dat += "Metabolism Products of Chemicals Found:" - for(var/T in blood_doses) - var/datum/reagent/R = T - dat += "[initial(R.name)] ([blood_doses[T]] units) " - - return jointext(dat, "
              ") - -/obj/item/device/scanner/spectrometer/adv - name = "advanced mass spectrometer" - icon = 'icons/obj/spectrometer_advanced.dmi' - icon_state = "adv_spectrometer" - details = 1 - origin_tech = list(TECH_MAGNET = 4, TECH_BIO = 2) diff --git a/code/game/objects/items/devices/scanners/mining.dm b/code/game/objects/items/devices/scanners/mining.dm deleted file mode 100644 index 0ec67a5f39ab5..0000000000000 --- a/code/game/objects/items/devices/scanners/mining.dm +++ /dev/null @@ -1,136 +0,0 @@ -#define ORE_SURFACE "surface minerals" -#define ORE_PRECIOUS "precious metals" -#define ORE_NUCLEAR "nuclear fuel" -#define ORE_EXOTIC "exotic matter" -/turf/simulated/var/surveyed - -/obj/item/device/scanner/mining - name = "ore detector" - desc = "A complex device used to locate ore deep underground." - icon = 'icons/obj/ore_analyzer.dmi' - icon_state = "ore" - origin_tech = list(TECH_MAGNET = 1, TECH_ENGINEERING = 1) - use_delay = 50 - printout_color = "#fff7f0" - var/survey_data = 0 - - scan_sound = 'sound/effects/ping.ogg' - -/obj/item/device/scanner/mining/examine(mob/user) - . = ..() - to_chat(user,"A tiny indicator on the [src] shows it holds [survey_data] good explorer points.") - -/obj/item/device/scanner/mining/is_valid_scan_target(turf/simulated/T) - return istype(T) - -/obj/item/device/scanner/mining/scan(turf/simulated/T, mob/user) - scan_title = "Mineral scan data" - var/list/scan_results = mineral_scan_results(T) - if(!scan_data) - scan_data = scan_results[1] - else - scan_data += "
              [scan_results[1]]" - to_chat(user, "[icon2html(src, user)] \The [src] displays a readout.") - to_chat(user, scan_results[1]) - - if(scan_results[2]) - survey_data += scan_results[2] - playsound(loc, 'sound/machines/ping.ogg', 40, 1) - to_chat(user,"New survey data stored - [scan_results[2]] GEP.") - -/obj/item/device/scanner/mining/proc/put_disk_in_hand(var/mob/M) - if(!survey_data) - to_chat(M,"There is no survey data stored on the [src].") - return 0 - visible_message("The [src] spits out a disk containing [survey_data] GEP.") - var/obj/item/disk/survey/D = new(get_turf(src)) - D.data = survey_data - survey_data = 0 - M.put_in_hands(D) - return 1 - -/obj/item/device/scanner/mining/verb/get_data() - set category = "Object" - set name = "Get Survey Data" - set src in usr - - var/mob/M = usr - if(!istype(M)) - return - if(M.incapacitated()) - return - put_disk_in_hand(M) - -/obj/item/disk/survey - name = "survey data disk" - icon = 'icons/obj/items.dmi' - icon_state = "nucleardisk" - var/data - -/obj/item/disk/survey/examine(mob/user) - . = ..() - to_chat(user,"A tiny indicator on the [src] shows it holds [data] good explorer points.") - -/obj/item/disk/survey/Value() - if(data < 10000) - return 0.07*data - if(data < 30000) - return 0.1*data - return 0.15*data - -//Returns list of two elements, 1 is text output, 2 is amoutn of GEP data -/proc/mineral_scan_results(turf/simulated/target) - var/list/metals = list( - ORE_SURFACE = 0, - ORE_PRECIOUS = 0, - ORE_NUCLEAR = 0, - ORE_EXOTIC = 0 - ) - var/new_data = 0 - - for(var/turf/simulated/T in range(2, target)) - - if(!T.has_resources) - continue - - for(var/metal in T.resources) - var/ore_type - var/data_value = 1 - - switch(metal) - if(MATERIAL_SAND, MATERIAL_GRAPHITE, MATERIAL_IRON) - ore_type = ORE_SURFACE - if(MATERIAL_GOLD, MATERIAL_SILVER, MATERIAL_DIAMOND, MATERIAL_RUTILE) - ore_type = ORE_PRECIOUS - data_value = 2 - if(MATERIAL_URANIUM) - ore_type = ORE_NUCLEAR - data_value = 3 - if(MATERIAL_PHORON, MATERIAL_OSMIUM, MATERIAL_HYDROGEN) - ore_type = ORE_EXOTIC - data_value = 4 - - if(ore_type) metals[ore_type] += T.resources[metal] - - if(!T.surveyed) - new_data += data_value * T.resources[metal] - - T.surveyed = 1 - - var/list/scandata = list("Mineral scan at ([target.x],[target.y])") - for(var/ore_type in metals) - var/result = "no sign" - - switch(metals[ore_type]) - if(1 to 25) result = "trace amounts" - if(26 to 75) result = "significant amounts" - if(76 to INFINITY) result = "huge quantities" - - scandata += "- [result] of [ore_type]." - - return list(jointext(scandata, "
              "), new_data) - -#undef ORE_SURFACE -#undef ORE_PRECIOUS -#undef ORE_NUCLEAR -#undef ORE_EXOTIC diff --git a/code/game/objects/items/devices/scanners/plant.dm b/code/game/objects/items/devices/scanners/plant.dm deleted file mode 100644 index 91ccf69226287..0000000000000 --- a/code/game/objects/items/devices/scanners/plant.dm +++ /dev/null @@ -1,182 +0,0 @@ - -/obj/item/device/scanner/plant - name = "plant analyzer" - desc = "A hand-held botanical scanner used to analyze plants." - icon = 'icons/obj/plant_analyzer.dmi' - icon_state = "hydro" - item_state = "analyzer" - scan_sound = 'sound/effects/fastbeep.ogg' - printout_color = "#eeffe8" - var/static/list/valid_targets = list( - /obj/item/reagent_containers/food/snacks/grown, - /obj/machinery/portable_atmospherics/hydroponics, - /obj/item/seeds - ) - -/obj/item/device/scanner/plant/is_valid_scan_target(atom/O) - if(is_type_in_list(O, valid_targets)) - return TRUE - return FALSE - -/obj/item/device/scanner/plant/scan(atom/A, mob/user) - scan_title = "[A] at [get_area(A)]" - scan_data = plant_scan_results(A) - show_menu(user) - -/proc/plant_scan_results(obj/target) - var/datum/seed/grown_seed - var/datum/reagents/grown_reagents - if(istype(target,/obj/item/reagent_containers/food/snacks/grown)) - var/obj/item/reagent_containers/food/snacks/grown/G = target - grown_seed = SSplants.seeds[G.plantname] - grown_reagents = G.reagents - - else if(istype(target,/obj/item/seeds)) - var/obj/item/seeds/S = target - grown_seed = S.seed - - else if(istype(target,/obj/machinery/portable_atmospherics/hydroponics)) - var/obj/machinery/portable_atmospherics/hydroponics/H = target - grown_seed = H.seed - grown_reagents = H.reagents - - if(!grown_seed) - return - - if(grown_seed.mysterious && !grown_seed.scanned) - grown_seed.scanned = TRUE - var/area/map = locate(/area/overmap) - for(var/obj/effect/overmap/visitable/sector/exoplanet/P in map) - if(grown_seed in P.seeds) - GLOB.stat_flora_scanned += 1 - break - - var/list/dat = list() - - var/form_title = "[grown_seed.seed_name] (#[grown_seed.uid])" - dat += "

              Plant data for [form_title]

              " - - dat += "

              General Data

              " - - dat += "" - dat += "" - dat += "" - dat += "" - dat += "" - dat += "" - dat += "
              Endurance[grown_seed.get_trait(TRAIT_ENDURANCE)]
              Yield[grown_seed.get_trait(TRAIT_YIELD)]
              Maturation time[grown_seed.get_trait(TRAIT_MATURATION)]
              Production time[grown_seed.get_trait(TRAIT_PRODUCTION)]
              Potency[grown_seed.get_trait(TRAIT_POTENCY)]
              " - - if(grown_reagents && grown_reagents.reagent_list && grown_reagents.reagent_list.len) - dat += "

              Reagent Data

              " - - dat += "
              This sample contains: " - for(var/datum/reagent/R in grown_reagents.reagent_list) - dat += "
              - [R.name], [grown_reagents.get_reagent_amount(R.type)] unit(s)" - - dat += "

              Other Data

              " - - if(grown_seed.get_trait(TRAIT_HARVEST_REPEAT)) - dat += "This plant can be harvested repeatedly.
              " - - if(grown_seed.get_trait(TRAIT_IMMUTABLE) == -1) - dat += "This plant is highly mutable.
              " - else if(grown_seed.get_trait(TRAIT_IMMUTABLE) > 0) - dat += "This plant does not possess genetics that are alterable.
              " - - if(grown_seed.get_trait(TRAIT_REQUIRES_NUTRIENTS)) - if(grown_seed.get_trait(TRAIT_NUTRIENT_CONSUMPTION) < 0.05) - dat += "It consumes a small amount of nutrient fluid.
              " - else if(grown_seed.get_trait(TRAIT_NUTRIENT_CONSUMPTION) > 0.2) - dat += "It requires a heavy supply of nutrient fluid.
              " - else - dat += "It requires a supply of nutrient fluid.
              " - - if(grown_seed.get_trait(TRAIT_REQUIRES_WATER)) - if(grown_seed.get_trait(TRAIT_WATER_CONSUMPTION) < 1) - dat += "It requires very little water.
              " - else if(grown_seed.get_trait(TRAIT_WATER_CONSUMPTION) > 5) - dat += "It requires a large amount of water.
              " - else - dat += "It requires a stable supply of water.
              " - - if(grown_seed.mutants && grown_seed.mutants.len) - dat += "It exhibits a high degree of potential subspecies shift.
              " - - dat += "It thrives in a temperature of [grown_seed.get_trait(TRAIT_IDEAL_HEAT)] Kelvin." - - if(grown_seed.get_trait(TRAIT_LOWKPA_TOLERANCE) < 20) - dat += "
              It is well adapted to low pressure levels." - if(grown_seed.get_trait(TRAIT_HIGHKPA_TOLERANCE) > 220) - dat += "
              It is well adapted to high pressure levels." - - if(grown_seed.get_trait(TRAIT_HEAT_TOLERANCE) > 30) - dat += "
              It is well adapted to a range of temperatures." - else if(grown_seed.get_trait(TRAIT_HEAT_TOLERANCE) < 10) - dat += "
              It is very sensitive to temperature shifts." - - dat += "
              It thrives in a light level of [grown_seed.get_trait(TRAIT_IDEAL_LIGHT)] lumen[grown_seed.get_trait(TRAIT_IDEAL_LIGHT) == 1 ? "" : "s"]." - - if(grown_seed.get_trait(TRAIT_LIGHT_TOLERANCE) > 10) - dat += "
              It is well adapted to a range of light levels." - else if(grown_seed.get_trait(TRAIT_LIGHT_TOLERANCE) < 3) - dat += "
              It is very sensitive to light level shifts." - - if(grown_seed.get_trait(TRAIT_TOXINS_TOLERANCE) < 3) - dat += "
              It is highly sensitive to toxins." - else if(grown_seed.get_trait(TRAIT_TOXINS_TOLERANCE) > 6) - dat += "
              It is remarkably resistant to toxins." - - if(grown_seed.get_trait(TRAIT_PEST_TOLERANCE) < 3) - dat += "
              It is highly sensitive to pests." - else if(grown_seed.get_trait(TRAIT_PEST_TOLERANCE) > 6) - dat += "
              It is remarkably resistant to pests." - - if(grown_seed.get_trait(TRAIT_WEED_TOLERANCE) < 3) - dat += "
              It is highly sensitive to weeds." - else if(grown_seed.get_trait(TRAIT_WEED_TOLERANCE) > 6) - dat += "
              It is remarkably resistant to weeds." - - switch(grown_seed.get_trait(TRAIT_SPREAD)) - if(1) - dat += "
              It is able to be planted outside of a tray." - if(2) - dat += "
              It is a robust and vigorous vine that will spread rapidly." - - switch(grown_seed.get_trait(TRAIT_CARNIVOROUS)) - if(1) - dat += "
              It is carnivorous and will eat tray pests for sustenance." - if(2) - dat += "
              It is carnivorous and poses a significant threat to living things around it." - - if(grown_seed.get_trait(TRAIT_PARASITE)) - dat += "
              It is capable of parisitizing and gaining sustenance from tray weeds." - if(grown_seed.get_trait(TRAIT_ALTER_TEMP)) - dat += "
              It will periodically alter the local temperature by [grown_seed.get_trait(TRAIT_ALTER_TEMP)] degrees Kelvin." - - if(grown_seed.get_trait(TRAIT_BIOLUM)) - dat += "
              It is [grown_seed.get_trait(TRAIT_BIOLUM_COLOUR) ? "bio-luminescent" : "bio-luminescent"]." - - if(grown_seed.get_trait(TRAIT_PRODUCES_POWER)) - dat += "
              The fruit will function as a battery if prepared appropriately." - - if(grown_seed.get_trait(TRAIT_STINGS)) - dat += "
              The fruit is covered in stinging spines." - - if(grown_seed.get_trait(TRAIT_JUICY) == 1) - dat += "
              The fruit is soft-skinned and juicy." - else if(grown_seed.get_trait(TRAIT_JUICY) == 2) - dat += "
              The fruit is excessively juicy." - - if(grown_seed.get_trait(TRAIT_EXPLOSIVE)) - dat += "
              The fruit is internally unstable." - - if(grown_seed.get_trait(TRAIT_TELEPORTING)) - dat += "
              The fruit is temporal/spatially unstable." - - if(grown_seed.get_trait(TRAIT_EXUDE_GASSES)) - dat += "
              It will release gas into the environment." - - if(grown_seed.get_trait(TRAIT_CONSUME_GASSES)) - dat += "
              It will remove gas from the environment." - - return JOINTEXT(dat) diff --git a/code/game/objects/items/devices/scanners/price.dm b/code/game/objects/items/devices/scanners/price.dm deleted file mode 100644 index 39f781234f7f9..0000000000000 --- a/code/game/objects/items/devices/scanners/price.dm +++ /dev/null @@ -1,19 +0,0 @@ -/obj/item/device/scanner/price - name = "price scanner" - desc = "Using an up-to-date database of various costs and prices, this device estimates the market price of an item up to 0.001% accuracy." - icon = 'icons/obj/price_scanner.dmi' - icon_state = "price_scanner" - origin_tech = list(TECH_MATERIAL = 6, TECH_MAGNET = 4) - scan_sound = 'sound/effects/checkout.ogg' - -/obj/item/device/scanner/price/is_valid_scan_target(atom/movable/target) - return !!get_value(target) - -/obj/item/device/scanner/price/scan(atom/movable/target, mob/user) - scan_title = "Price estimations" - var/data = "\The [target]: [get_value(target)] [GLOB.using_map.local_currency_name]" - if(!scan_data) - scan_data = data - else - scan_data += "
              [data]" - user.show_message(data) diff --git a/code/game/objects/items/devices/scanners/reagents.dm b/code/game/objects/items/devices/scanners/reagents.dm deleted file mode 100644 index 5f3e0875326dd..0000000000000 --- a/code/game/objects/items/devices/scanners/reagents.dm +++ /dev/null @@ -1,35 +0,0 @@ -/obj/item/device/scanner/reagent - name = "reagent scanner" - desc = "A hand-held reagent scanner which identifies chemical agents." - icon = 'icons/obj/spectrometer.dmi' - icon_state = "spectrometer" - item_state = "analyzer" - - origin_tech = list(TECH_MAGNET = 2, TECH_BIO = 2) - scan_sound = 'sound/effects/scanbeep.ogg' - var/details = 0 - -/obj/item/device/scanner/reagent/is_valid_scan_target(obj/O) - return istype(O) - -/obj/item/device/scanner/reagent/scan(obj/O, mob/user) - scan_data = reagent_scan_results(O, details) - scan_data = jointext(scan_data, "
              ") - user.show_message(SPAN_NOTICE(scan_data)) - -/proc/reagent_scan_results(obj/O, details = 0) - if(isnull(O.reagents)) - return list("No significant chemical agents found in [O].") - if(O.reagents.reagent_list.len == 0) - return list("No active chemical agents found in [O].") - . = list("Chemicals found in [O]:") - var/one_percent = O.reagents.total_volume / 100 - for (var/datum/reagent/R in O.reagents.reagent_list) - . += "[R][details ? ": [R.volume / one_percent]%" : ""]" - -/obj/item/device/scanner/reagent/adv - name = "advanced reagent scanner" - icon = 'icons/obj/spectrometer_advanced.dmi' - icon_state = "adv_spectrometer" - details = 1 - origin_tech = list(TECH_MAGNET = 4, TECH_BIO = 2) diff --git a/code/game/objects/items/devices/scanners/xenobio.dm b/code/game/objects/items/devices/scanners/xenobio.dm deleted file mode 100644 index 50bc9485dfce1..0000000000000 --- a/code/game/objects/items/devices/scanners/xenobio.dm +++ /dev/null @@ -1,106 +0,0 @@ -/obj/item/device/scanner/xenobio - name = "xenolife scanner" - desc = "Multipurpose organic life scanner. With spectral breath analyzer you can find out what snacks Ian had! Or what gasses alien life breathes." - icon = 'icons/obj/xenolife_scanner.dmi' - icon_state = "xenobio" - item_state = "analyzer" - scan_sound = 'sound/effects/scanbeep.ogg' - printout_color = "#f3e6ff" - origin_tech = list(TECH_MAGNET = 1, TECH_BIO = 1) - - var/list/valid_targets = list( - /mob/living/carbon/human, - /mob/living/simple_animal, - /mob/living/carbon/slime, - ) - -/obj/item/device/scanner/xenobio/is_valid_scan_target(atom/O) - if(is_type_in_list(O, valid_targets)) - return TRUE - if(istype(O, /obj/structure/stasis_cage)) - var/obj/structure/stasis_cage/cagie = O - return !!cagie.contained - return FALSE - -/obj/item/device/scanner/xenobio/scan(mob/O, mob/user) - scan_title = O.name - scan_data = xenobio_scan_results(O) - user.show_message(SPAN_NOTICE(scan_data)) - -/proc/list_gases(var/gases) - . = list() - for(var/g in gases) - . += "[gas_data.name[g]] ([gases[g]]%)" - return english_list(.) - -/proc/xenobio_scan_results(mob/target) - . = list() - if(istype(target, /obj/structure/stasis_cage)) - var/obj/structure/stasis_cage/cagie = target - target = cagie.contained - if(istype(target, /mob/living/carbon/human)) - var/mob/living/carbon/human/H = target - . += "Data for [H]:" - . += "Species:\t[H.species]" - if(H.species.breath_type) - . += "Breathes:\t[gas_data.name[H.species.breath_type]]" - if(H.species.exhale_type) - . += "Exhales:\t[gas_data.name[H.species.exhale_type]]" - . += "Known toxins:\t[english_list(H.species.poison_types)]" - . += "Temperature comfort zone:\t[H.species.cold_discomfort_level] K to [H.species.heat_discomfort_level] K" - . += "Pressure comfort zone:\t[H.species.warning_low_pressure] kPa to [H.species.warning_high_pressure] kPa" - else if(istype(target, /mob/living/simple_animal)) - var/mob/living/simple_animal/A = target - . += "Data for [A]:" - . += "Species:\t[initial(A.name)]" - if(A.min_gas) - . += "Breathes:\t[list_gases(A.min_gas)]" - if(A.max_gas) - . += "Known toxins:\t[list_gases(A.max_gas)]" - if(A.minbodytemp && A.maxbodytemp) - . += "Temperature comfort zone:\t[A.minbodytemp] K to [A.maxbodytemp] K" - var/area/map = locate(/area/overmap) - for(var/obj/effect/overmap/visitable/sector/exoplanet/P in map) - if((A in P.animals) || is_type_in_list(A, P.repopulate_types)) - GLOB.stat_fauna_scanned |= "[P.name]-[A.type]" - . += "New xenofauna species discovered!" - break - else if(istype(target, /mob/living/carbon/slime)) - var/mob/living/carbon/slime/T = target - . += "Slime scan result for \the [T]:" - . += "[T.colour] [T.is_adult ? "adult" : "baby"] slime" - . += "Nutrition:\t[T.nutrition]/[T.get_max_nutrition()]" - if(T.nutrition < T.get_starve_nutrition()) - . += "Warning:\tthe slime is starving!" - else if (T.nutrition < T.get_hunger_nutrition()) - . += "Warning:\tthe slime is hungry." - . += "Electric charge strength:\t[T.powerlevel]" - . += "Health:\t[round((T.health * 100) / T.maxHealth)]%" - - var/list/mutations = T.GetMutations() - - if(!mutations.len) - . += "This slime will never mutate." - else - var/list/mutationChances = list() - for(var/i in mutations) - if(i == T.colour) - continue - if(mutationChances[i]) - mutationChances[i] += T.mutation_chance / mutations.len - else - mutationChances[i] = T.mutation_chance / mutations.len - - var/list/mutationTexts = list("[T.colour] ([100 - T.mutation_chance]%)") - for(var/i in mutationChances) - mutationTexts += "[i] ([mutationChances[i]]%)" - - . += "Possible colours on splitting:\t[english_list(mutationTexts)]" - - if (T.cores > 1) - . += "Anomalous slime core amount detected." - . += "Growth progress:\t[T.amount_grown]/10." - else - . += "Incompatible life form, analysis failed." - - . = jointext(., "
              ") diff --git a/code/game/objects/items/devices/slide_projector.dm b/code/game/objects/items/devices/slide_projector.dm deleted file mode 100644 index 715340217a09e..0000000000000 --- a/code/game/objects/items/devices/slide_projector.dm +++ /dev/null @@ -1,215 +0,0 @@ -/obj/item/storage/slide_projector - name = "slide projector" - desc = "A handy device capable of showing an enlarged projection of whatever you can fit inside." - icon = 'icons/obj/projector.dmi' - icon_state = "projector0" - max_w_class = ITEM_SIZE_SMALL - max_storage_space = BASE_STORAGE_CAPACITY(ITEM_SIZE_SMALL) - use_sound = 'sound/effects/storage/toolbox.ogg' - var/static/list/projection_types = list( - /obj/item/photo = /obj/effect/projection/photo, - /obj/item/paper = /obj/effect/projection/paper, - /obj/item = /obj/effect/projection - ) - var/obj/item/current_slide - var/obj/effect/projection/projection - -/obj/item/storage/slide_projector/Destroy() - current_slide = null - stop_projecting() - . = ..() - -/obj/item/storage/slide_projector/on_update_icon() - icon_state = "projector[!!projection]" - -/obj/item/storage/slide_projector/get_mechanics_info() - . = ..() - . += "Use in hand to open the interface." - -/obj/item/storage/slide_projector/remove_from_storage(obj/item/W, atom/new_location, var/NoUpdate = 0) - . = ..() - if(. && W == current_slide) - set_slide(length(contents) ? contents[1] : null) - -/obj/item/storage/slide_projector/handle_item_insertion(var/obj/item/W, var/prevent_warning = 0, var/NoUpdate = 0) - . = ..() - if(. && !current_slide) - set_slide(W) - -/obj/item/storage/slide_projector/on_item_pre_deletion(obj/item/W) - if(W == current_slide) - set_slide(null) - -/obj/item/storage/slide_projector/afterattack(atom/target, mob/user, proximity_flag, click_parameters) - if(!current_slide) - to_chat(user, SPAN_WARNING("\The [src] does not have a slide loaded.")) - return - project_at(get_turf(target)) - -/obj/item/storage/slide_projector/MouseDrop(atom/over) - if(!CanPhysicallyInteract(usr)) - return - - . = ..() - - if(over == usr) - interact(usr) - return - - var/turf/T = get_turf(over) - if(istype(T)) - afterattack(over, usr) - -/obj/item/storage/slide_projector/proc/set_slide(obj/item/new_slide) - current_slide = new_slide - playsound(loc, 'sound/machines/slide_change.ogg', 50) - if(projection) - project_at(get_turf(projection)) - -/obj/item/storage/slide_projector/proc/check_projections() - if(!projection) - return - if(!(projection in view(7,get_turf(src)))) - stop_projecting() - -/obj/item/storage/slide_projector/proc/stop_projecting() - if(projection) - QDEL_NULL(projection) - GLOB.moved_event.unregister(src, src, .proc/check_projections) - set_light(0) - update_icon() - -/obj/item/storage/slide_projector/proc/project_at(turf/target) - stop_projecting() - if(!current_slide) - return - if(!(target in view(7,get_turf(src)))) - return - var/projection_type - for(var/T in projection_types) - if(istype(current_slide, T)) - projection_type = projection_types[T] - break - projection = new projection_type(target) - projection.set_source(current_slide) - GLOB.moved_event.register(src, src, .proc/check_projections) - set_light(0.1, 0.1, 1, 2, COLOR_WHITE) //Bit of light - update_icon() - -/obj/item/storage/slide_projector/attack_self(mob/user) - interact(user) - -/obj/item/storage/slide_projector/interact(mob/user) - var/data = list() - if(projection) - data += "Disable projector" - else - data += "Projector inactive" - - var/table = list("") - var/i = 1 - for(var/obj/item/I in contents) - table += "" - if(I == current_slide) - table += "" - else - table += "" - table += "" - i++ - table += "
              #SLIDESHOW
              #[i][I.name]SHOWING[I.name]SHOW
              " - data += jointext(table,null) - var/datum/browser/popup = new(user, "slides\ref[src]", "Slide Projector") - popup.set_content(jointext(data, "
              ")) - popup.open() - -/obj/item/storage/slide_projector/OnTopic(var/mob/user, var/href_list, var/datum/topic_state/state) - . = ..() - if(.) - return - if(href_list["stop_projector"]) - if(!projection) - return TOPIC_HANDLED - stop_projecting() - . = TOPIC_REFRESH - - if(href_list["set_active"]) - var/index = text2num(href_list["set_active"]) - if(index < 1 || index > contents.len) - return TOPIC_HANDLED - set_slide(contents[index]) - . = TOPIC_REFRESH - - if(. == TOPIC_REFRESH) - interact(user) - -/obj/effect/projection - name = "projected slide" - icon = 'icons/effects/effects.dmi' - icon_state = "white" - anchored = TRUE - simulated = FALSE - blend_mode = BLEND_ADD - plane = EFFECTS_ABOVE_LIGHTING_PLANE - alpha = 100 - var/weakref/source - -/obj/effect/projection/Initialize() - . = ..() - set_light(0.1, 0.1, 1, 2, COLOR_WHITE) //Makes turning off the lights not invalidate projection - -/obj/effect/projection/on_update_icon() - filters = filter(type="drop_shadow", color = COLOR_WHITE, size = 4, offset = 1,x = 0, y = 0) - project_icon() - -/obj/effect/projection/proc/project_icon() - var/obj/item/I = source.resolve() - if(!istype(I)) - qdel(src) - return - overlays.Cut() - var/mutable_appearance/MA = new(I) - MA.plane = FLOAT_PLANE - MA.layer = FLOAT_LAYER - MA.appearance_flags = DEFAULT_APPEARANCE_FLAGS | RESET_ALPHA - MA.alpha = 170 - MA.pixel_x = 0 - MA.pixel_y = 0 - overlays |= MA - -/obj/effect/projection/proc/set_source(obj/item/I) - source = weakref(I) - desc = "It's currently showing \the [I]." - update_icon() - -/obj/effect/projection/examine(mob/user, distance) - . = ..() - var/obj/item/slide = source.resolve() - if(!istype(slide)) - qdel(src) - return - return slide.examine(user, 1) - -/obj/effect/projection/photo - alpha = 170 - -/obj/effect/projection/photo/project_icon() - var/obj/item/photo/slide = source.resolve() - if(!istype(slide)) - qdel(src) - return - icon = slide.img - SetTransform(scale = 1 / slide.photo_size) - pixel_x = -32 * round(slide.photo_size/2) - pixel_y = -32 * round(slide.photo_size/2) - -/obj/effect/projection/paper - alpha = 140 - -/obj/effect/projection/paper/project_icon() - var/obj/item/paper/P = source.resolve() - if(!istype(P)) - qdel(src) - return - overlays.Cut() - if(P.info) - icon_state = "text[rand(1,3)]" diff --git a/code/game/objects/items/devices/spy_bug.dm b/code/game/objects/items/devices/spy_bug.dm deleted file mode 100644 index 3819a09dcf8ad..0000000000000 --- a/code/game/objects/items/devices/spy_bug.dm +++ /dev/null @@ -1,166 +0,0 @@ -/obj/item/device/spy_bug - name = "bug" - desc = "" // Nothing to see here - icon = 'icons/obj/weapons/melee_energy.dmi' - icon_state = "eshield0" - item_state = "nothing" - layer = BELOW_TABLE_LAYER - - obj_flags = OBJ_FLAG_CONDUCTIBLE - force = 5.0 - w_class = ITEM_SIZE_TINY - slot_flags = SLOT_EARS - throwforce = 5.0 - throw_range = 15 - throw_speed = 3 - - origin_tech = list(TECH_DATA = 1, TECH_ENGINEERING = 1, TECH_ESOTERIC = 3) - - var/obj/item/device/radio/spy/radio - var/obj/machinery/camera/spy/camera - -/obj/item/device/spy_bug/New() - ..() - radio = new(src) - camera = new(src) - GLOB.listening_objects += src - -/obj/item/device/spy_bug/Destroy() - QDEL_NULL(radio) - QDEL_NULL(camera) - GLOB.listening_objects -= src - return ..() - -/obj/item/device/spy_bug/examine(mob/user, distance) - . = ..() - if(distance <= 0) - to_chat(user, "It's a tiny camera, microphone, and transmission device in a happy union.") - to_chat(user, "Needs to be both configured and brought in contact with monitor device to be fully functional.") - -/obj/item/device/spy_bug/attack_self(mob/user) - radio.attack_self(user) - -/obj/item/device/spy_bug/attackby(obj/W as obj, mob/living/user as mob) - if(istype(W, /obj/item/device/spy_monitor)) - var/obj/item/device/spy_monitor/SM = W - SM.pair(src, user) - else - ..() - -/obj/item/device/spy_bug/hear_talk(mob/M, var/msg, verb, datum/language/speaking) - radio.hear_talk(M, msg, speaking) - - -/obj/item/device/spy_monitor - name = "\improper PDA" - desc = "A portable microcomputer by Thinktronic Systems, LTD. Functionality determined by a preprogrammed ROM cartridge." - icon = 'icons/obj/modular_pda.dmi' - icon_state = "pda" - - w_class = ITEM_SIZE_SMALL - - origin_tech = list(TECH_DATA = 1, TECH_ENGINEERING = 1, TECH_ESOTERIC = 3) - - var/operating = 0 - var/obj/item/device/radio/spy/radio - var/obj/machinery/camera/spy/selected_camera - var/list/obj/machinery/camera/spy/cameras = new() - -/obj/item/device/spy_monitor/New() - ..() - radio = new(src) - GLOB.listening_objects += src - -/obj/item/device/spy_monitor/Destroy() - GLOB.listening_objects -= src - return ..() - -/obj/item/device/spy_monitor/examine(mob/user, distance) - . = ..() - if(distance <= 1) - to_chat(user, "The time '12:00' is blinking in the corner of the screen and \the [src] looks very cheaply made.") - -/obj/item/device/spy_monitor/attack_self(mob/user) - if(operating) - return - - radio.attack_self(user) - view_cameras(user) - -/obj/item/device/spy_monitor/attackby(obj/W as obj, mob/living/user as mob) - if(istype(W, /obj/item/device/spy_bug)) - pair(W, user) - else - return ..() - -/obj/item/device/spy_monitor/proc/pair(var/obj/item/device/spy_bug/SB, var/mob/living/user) - if(SB.camera in cameras) - to_chat(user, "\The [SB] has been unpaired from \the [src].") - cameras -= SB.camera - else - to_chat(user, "\The [SB] has been paired with \the [src].") - cameras += SB.camera - -/obj/item/device/spy_monitor/proc/view_cameras(mob/user) - if(!can_use_cam(user)) - return - - selected_camera = cameras[1] - view_camera(user) - - operating = 1 - while(selected_camera && Adjacent(user)) - selected_camera = input("Select camera bug to view.") as null|anything in cameras - selected_camera = null - operating = 0 - -/obj/item/device/spy_monitor/proc/view_camera(mob/user) - spawn(0) - while(selected_camera && Adjacent(user)) - var/turf/T = get_turf(selected_camera) - if(!T || !is_on_same_plane_or_station(T.z, user.z) || !selected_camera.can_use()) - user.unset_machine() - user.reset_view(null) - to_chat(user, "[selected_camera] unavailable.") - sleep(90) - else - user.set_machine(selected_camera) - user.reset_view(selected_camera) - sleep(10) - user.unset_machine() - user.reset_view(null) - -/obj/item/device/spy_monitor/proc/can_use_cam(mob/user) - if(operating) - return - - if(!cameras.len) - to_chat(user, "No paired cameras detected!") - to_chat(user, "Bring a bug in contact with this device to pair the camera.") - return - - return 1 - -/obj/item/device/spy_monitor/hear_talk(mob/M, var/msg, verb, datum/language/speaking) - return radio.hear_talk(M, msg, speaking) - - -/obj/machinery/camera/spy - // These cheap toys are accessible from the mercenary camera console as well - network = list(NETWORK_MERCENARY) - -/obj/machinery/camera/spy/New() - ..() - name = "DV-136ZB #[random_id(/obj/machinery/camera/spy, 1000,9999)]" - c_tag = name - -/obj/machinery/camera/spy/check_eye(var/mob/user as mob) - return 0 - -/obj/item/device/radio/spy - listening = 0 - frequency = 1473 - broadcasting = 0 - canhear_range = 1 - name = "spy device" - icon_state = "syn_cypherkey" diff --git a/code/game/objects/items/devices/suit_cooling.dm b/code/game/objects/items/devices/suit_cooling.dm deleted file mode 100644 index d5ae28a49e1d2..0000000000000 --- a/code/game/objects/items/devices/suit_cooling.dm +++ /dev/null @@ -1,181 +0,0 @@ -/obj/item/device/suit_cooling_unit - name = "portable cooling unit" - desc = "A large portable heat sink with liquid cooled radiator packaged into a modified backpack." - w_class = ITEM_SIZE_LARGE - icon = 'icons/obj/suitcooler.dmi' - icon_state = "suitcooler0" - item_state = "coolingpack" - slot_flags = SLOT_BACK - - //copied from tank.dm - obj_flags = OBJ_FLAG_CONDUCTIBLE - force = 5.0 - throwforce = 10.0 - throw_speed = 1 - throw_range = 4 - action_button_name = "Toggle Heatsink" - - matter = list(MATERIAL_ALUMINIUM = 15000, MATERIAL_GLASS = 3500) - origin_tech = list(TECH_MAGNET = 2, TECH_MATERIAL = 2) - - var/on = 0 //is it turned on? - var/cover_open = 0 //is the cover open? - var/obj/item/cell/cell - var/max_cooling = 12 // in degrees per second - probably don't need to mess with heat capacity here - var/charge_consumption = 2 KILOWATTS // energy usage at full power - var/thermostat = T20C - -/obj/item/device/suit_cooling_unit/ui_action_click() - toggle(usr) - -/obj/item/device/suit_cooling_unit/Initialize() - . = ..() - START_PROCESSING(SSobj, src) - cell = new/obj/item/cell/high() // 10K rated cell. - cell.forceMove(src) - -/obj/item/device/suit_cooling_unit/Destroy() - . = ..() - STOP_PROCESSING(SSobj, src) - -/obj/item/device/suit_cooling_unit/Process() - if (!on || !cell) - return - - if (!is_in_slot()) - return - - var/mob/living/carbon/human/H = loc - - var/temp_adj = min(H.bodytemperature - thermostat, max_cooling) - - if (temp_adj < 0.5) //only cools, doesn't heat, also we don't need extreme precision - return - - var/charge_usage = (temp_adj/max_cooling)*charge_consumption - - H.bodytemperature -= temp_adj - - cell.use(charge_usage * CELLRATE) - update_icon() - - if(cell.charge <= 0) - turn_off(1) - -// Checks whether the cooling unit is being worn on the back/suit slot. -// That way you can't carry it in your hands while it's running to cool yourself down. -/obj/item/device/suit_cooling_unit/proc/is_in_slot() - var/mob/living/carbon/human/H = loc - if(!istype(H)) - return 0 - - return (H.back == src) || (H.s_store == src) - -/obj/item/device/suit_cooling_unit/proc/turn_on() - if(!cell) - return - if(cell.charge <= 0) - return - - on = 1 - update_icon() - -/obj/item/device/suit_cooling_unit/proc/turn_off(var/failed) - if(failed) visible_message("\The [src] clicks and whines as it powers down.") - on = 0 - update_icon() - -/obj/item/device/suit_cooling_unit/attack_self(var/mob/user) - if(cover_open && cell) - if(ishuman(user)) - user.put_in_hands(cell) - else - cell.dropInto(loc) - - cell.add_fingerprint(user) - cell.update_icon() - - to_chat(user, "You remove \the [src.cell].") - src.cell = null - update_icon() - return - - toggle(user) - -/obj/item/device/suit_cooling_unit/proc/toggle(var/mob/user) - if(on) - turn_off() - else - turn_on() - to_chat(user, "You switch \the [src] [on ? "on" : "off"].") - -/obj/item/device/suit_cooling_unit/attackby(obj/item/W as obj, mob/user as mob) - if(isScrewdriver(W)) - if(cover_open) - cover_open = 0 - to_chat(user, "You screw the panel into place.") - else - cover_open = 1 - to_chat(user, "You unscrew the panel.") - playsound(src, 'sound/items/Screwdriver.ogg', 50, 1) - update_icon() - return - - if (istype(W, /obj/item/cell)) - if(cover_open) - if(cell) - to_chat(user, "There is a [cell] already installed here.") - else - if(!user.unEquip(W, src)) - return - cell = W - to_chat(user, "You insert the [cell].") - update_icon() - return - - return ..() - -/obj/item/device/suit_cooling_unit/on_update_icon() - overlays.Cut() - if (cover_open) - if (cell) - icon_state = "suitcooler1" - else - icon_state = "suitcooler2" - return - - icon_state = "suitcooler0" - - if(!cell || !on) - return - - switch(round(cell.percent())) - if(86 to INFINITY) - overlays.Add("battery-0") - if(69 to 85) - overlays.Add("battery-1") - if(52 to 68) - overlays.Add("battery-2") - if(35 to 51) - overlays.Add("battery-3") - if(18 to 34) - overlays.Add("battery-4") - if(-INFINITY to 17) - overlays.Add("battery-5") - - -/obj/item/device/suit_cooling_unit/examine(mob/user, distance) - . = ..() - if(distance >= 1) - return - - if (on) - to_chat(user, "It's switched on and running.") - else - to_chat(user, "It is switched off.") - - if (cover_open) - to_chat(user, "The panel is open.") - - if (cell) - to_chat(user, "The charge meter reads [round(cell.percent())]%.") diff --git a/code/game/objects/items/devices/suit_sensor_jammer.dm b/code/game/objects/items/devices/suit_sensor_jammer.dm deleted file mode 100644 index 18420b611f9dc..0000000000000 --- a/code/game/objects/items/devices/suit_sensor_jammer.dm +++ /dev/null @@ -1,215 +0,0 @@ -#define JAMMER_MAX_RANGE world.view*2 -#define JAMMER_POWER_CONSUMPTION(tick_delay) ((max(0.75, range)**2 * jammer_method.energy_cost * tick_delay) / 20) - -/obj/item/device/suit_sensor_jammer - name = "small device" - desc = "This object menaces with tiny, dull spikes of plastic." - icon = 'icons/obj/suit_jammer.dmi' - icon_state = "jammer" - w_class = ITEM_SIZE_SMALL - var/active = FALSE - var/range = 2 // This is a radius, thus a range of 7 covers the entire visible screen - var/obj/item/cell/bcell = /obj/item/cell/high - var/suit_sensor_jammer_method/jammer_method - var/list/suit_sensor_jammer_methods_by_type - var/list/suit_sensor_jammer_methods - -/obj/item/device/suit_sensor_jammer/New() - ..() - if(ispath(bcell)) - bcell = new bcell(src) - suit_sensor_jammer_methods = list() - suit_sensor_jammer_methods_by_type = list() - for(var/jammer_method_type in subtypesof(/suit_sensor_jammer_method)) - var/new_method = new jammer_method_type(src, /obj/item/device/suit_sensor_jammer/proc/may_process_crew_data) - dd_insertObjectList(suit_sensor_jammer_methods, new_method) - suit_sensor_jammer_methods_by_type[jammer_method_type] = new_method - jammer_method = suit_sensor_jammer_methods[1] - update_icon() - -/obj/item/device/suit_sensor_jammer/Destroy() - . = ..() - qdel(bcell) - bcell = null - jammer_method = null - for(var/method in suit_sensor_jammer_methods) - qdel(method) - suit_sensor_jammer_methods = null - suit_sensor_jammer_methods_by_type = null - disable() - -/obj/item/device/suit_sensor_jammer/attack_self(var/mob/user) - ui_interact(user) - -/obj/item/device/suit_sensor_jammer/get_cell() - return bcell - -/obj/item/device/suit_sensor_jammer/attackby(obj/item/I as obj, mob/user as mob) - if(isCrowbar(I)) - if(bcell) - to_chat(user, "You remove \the [bcell].") - disable() - bcell.dropInto(loc) - bcell = null - else - to_chat(user, "There is no cell to remove.") - else if(istype(I, /obj/item/cell)) - if(bcell) - to_chat(user, "There's already a cell in \the [src].") - else if(user.unEquip(I)) - I.forceMove(src) - bcell = I - to_chat(user, "You insert \the [bcell] into \the [src]..") - else - to_chat(user, "You're unable to insert the battery.") - -/obj/item/device/suit_sensor_jammer/on_update_icon() - overlays.Cut() - if(bcell) - var/percent = bcell.percent() - switch(percent) - if(0 to 25) - overlays += "forth_quarter" - if(25 to 50) - overlays += "one_quarter" - overlays += "third_quarter" - if(50 to 75) - overlays += "two_quarters" - overlays += "second_quarter" - if(75 to 99) - overlays += "three_quarters" - overlays += "first_quarter" - else - overlays += "four_quarters" - - if(active) - overlays += "active" - -/obj/item/device/suit_sensor_jammer/emp_act(var/severity) - ..() - if(bcell) - bcell.emp_act(severity) - - if(prob(70/severity)) - enable() - else - disable() - - if(prob(90/severity)) - set_method(suit_sensor_jammer_methods_by_type[/suit_sensor_jammer_method/random]) - else - set_method(pick(suit_sensor_jammer_methods)) - - var/new_range = range + (rand(0,6) / severity) - (rand(0,3) / severity) - set_range(new_range) - -/obj/item/device/suit_sensor_jammer/examine(mob/user, distance) - . = ..() - if(distance <= 3) - var/list/message = list() - message += "This device appears to be [active ? "" : "in"]active and " - if(bcell) - message += "displays a charge level of [bcell.percent()]%." - else - message += "is lacking a cell." - to_chat(user, jointext(message,.)) - -/obj/item/device/suit_sensor_jammer/CanUseTopic(user, state) - if(!bcell || bcell.charge <= 0) - return STATUS_CLOSE - return ..() - -/obj/item/device/suit_sensor_jammer/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1) - var/list/methods = new - for(var/suit_sensor_jammer_method/ssjm in suit_sensor_jammer_methods) - methods[++methods.len] = list("name" = ssjm.name, "cost" = ssjm.energy_cost, "ref" = "\ref[ssjm]") - - var/list/data = list( - "active" = active, - "current_charge" = bcell ? round(bcell.charge, 1) : 0, - "max_charge" = bcell ? bcell.maxcharge : 0, - "range" = range, - "max_range" = JAMMER_MAX_RANGE, - "methods" = methods, - "current_method" = "\ref[jammer_method]", - "current_cost" = jammer_method.energy_cost, - "total_cost" = "[Ceil(JAMMER_POWER_CONSUMPTION(10))]" - ) - - ui = SSnano.try_update_ui(user, src, ui_key, ui, data, force_open) - if (!ui) - ui = new(user, src, ui_key, "suit_sensor_jammer.tmpl", "Sensor Jammer", 300, 640) - ui.set_initial_data(data) - ui.open() - ui.set_auto_update(1) - -/obj/item/device/suit_sensor_jammer/OnTopic(var/mob/user, var/list/href_list, state) - if (href_list["enable_jammer"]) - enable() - return TOPIC_REFRESH - if (href_list["disable_jammer"]) - disable() - return TOPIC_REFRESH - - if (href_list["increase_range"]) - set_range(range + 1) - return TOPIC_REFRESH - if (href_list["decrease_range"]) - set_range(range - 1) - return TOPIC_REFRESH - - if (href_list["select_method"]) - var/method = locate(href_list["select_method"]) in suit_sensor_jammer_methods - if(method) - set_method(method) - return TOPIC_REFRESH - -/obj/item/device/suit_sensor_jammer/Process(var/wait) - if(bcell) - // With a range of 2 and jammer cost of 3 the default (high capacity) cell will last for almost 14 minutes, give or take - // 10000 / (2^2 * 3 / 10) ~= 8333 ticks ~= 13.8 minutes - var/deduction = JAMMER_POWER_CONSUMPTION(wait) - if(!bcell.use(deduction)) - disable() - else - disable() - update_icon() - -/obj/item/device/suit_sensor_jammer/proc/enable() - if(active) - return FALSE - active = TRUE - START_PROCESSING(SSobj, src) - jammer_method.enable() - update_icon() - return TRUE - -/obj/item/device/suit_sensor_jammer/proc/disable() - if(!active) - return FALSE - active = FALSE - jammer_method.disable() - STOP_PROCESSING(SSobj, src) - update_icon() - return TRUE - -/obj/item/device/suit_sensor_jammer/proc/set_range(var/new_range) - range = clamp(new_range, 0, JAMMER_MAX_RANGE) // 0 range still covers the current turf - return range != new_range - -/obj/item/device/suit_sensor_jammer/proc/set_method(var/suit_sensor_jammer_method/sjm) - if(sjm == jammer_method) - return - if(active) - jammer_method.disable() - sjm.enable() - jammer_method = sjm - -/obj/item/device/suit_sensor_jammer/proc/may_process_crew_data(var/mob/living/carbon/human/H, var/obj/item/clothing/under/C, var/turf/pos) - if(!pos) - return FALSE - var/turf/T = get_turf(src) - return T && T.z == pos.z && get_dist(T, pos) <= range - -#undef JAMMER_MAX_RANGE -#undef JAMMER_POWER_CONSUMPTION diff --git a/code/game/objects/items/devices/t_scanner.dm b/code/game/objects/items/devices/t_scanner.dm deleted file mode 100644 index 8d4235538f9cb..0000000000000 --- a/code/game/objects/items/devices/t_scanner.dm +++ /dev/null @@ -1,171 +0,0 @@ -#define OVERLAY_CACHE_LEN 50 - -/obj/item/device/t_scanner - name = "\improper T-ray scanner" - desc = "A terahertz-ray emitter and scanner, capable of penetrating conventional hull materials." - icon = 'icons/obj/t_ray_scanner.dmi' - icon_state = "t-ray0" - slot_flags = SLOT_BELT - w_class = ITEM_SIZE_SMALL - item_state = "electronic" - matter = list(MATERIAL_ALUMINIUM = 150) - origin_tech = list(TECH_MAGNET = 1, TECH_ENGINEERING = 1) - action_button_name = "Toggle T-Ray scanner" - - var/scan_range = 3 - - var/on = 0 - var/list/active_scanned = list() //assoc list of objects being scanned, mapped to their overlay - var/client/user_client //since making sure overlays are properly added and removed is pretty important, so we track the current user explicitly - - var/static/list/overlay_cache = list() //cache recent overlays - -/obj/item/device/t_scanner/Destroy() - . = ..() - if(on) - set_active(FALSE) - -/obj/item/device/t_scanner/on_update_icon() - icon_state = "t-ray[on]" - -/obj/item/device/t_scanner/emp_act() - audible_message(" \The [src] buzzes oddly.") - set_active(FALSE) - ..() - -/obj/item/device/t_scanner/attack_self(mob/user) - set_active(!on) - user.update_action_buttons() - -/obj/item/device/t_scanner/afterattack(atom/target, mob/user, proximity_flag, click_parameters) - var/obj/structure/disposalpipe/D = target - if(D && istype(D)) - to_chat(user, "Pipe segment integrity: [100 - D.get_damage_percentage()]%") - -/obj/item/device/t_scanner/proc/set_active(var/active) - on = active - if(on) - START_PROCESSING(SSfastprocess, src) - else - STOP_PROCESSING(SSfastprocess, src) - set_user_client(null) - update_icon() - -//If reset is set, then assume the client has none of our overlays, otherwise we only send new overlays. -/obj/item/device/t_scanner/Process() - if(!on) return - - //handle clients changing - var/client/loc_client = null - if(ismob(src.loc)) - var/mob/M = src.loc - loc_client = M.client - set_user_client(loc_client) - - //no sense processing if no-one is going to see it. - if(!user_client) return - - //get all objects in scan range - var/list/scanned = get_scanned_objects(scan_range) - var/list/update_add = scanned - active_scanned - var/list/update_remove = active_scanned - scanned - - //Add new overlays - for(var/obj/O in update_add) - var/image/overlay = get_overlay(O) - active_scanned[O] = overlay - user_client.images += overlay - - //Remove stale overlays - for(var/obj/O in update_remove) - user_client.images -= active_scanned[O] - active_scanned -= O - -//creates a new overlay for a scanned object -/obj/item/device/t_scanner/proc/get_overlay(var/atom/movable/scanned) - //Use a cache so we don't create a whole bunch of new images just because someone's walking back and forth in a room. - //Also means that images are reused if multiple people are using t-rays to look at the same objects. - if(scanned in overlay_cache) - . = overlay_cache[scanned] - else - var/image/I = image(loc = scanned, icon = scanned.icon, icon_state = scanned.icon_state) - I.plane = HUD_PLANE - I.layer = UNDER_HUD_LAYER - I.appearance_flags = DEFAULT_APPEARANCE_FLAGS | RESET_ALPHA - - //Pipes are special - if(istype(scanned, /obj/machinery/atmospherics/pipe)) - var/obj/machinery/atmospherics/pipe/P = scanned - I.color = P.pipe_color - I.overlays += P.overlays - I.underlays += P.underlays - - if(ismob(scanned)) - if(ishuman(scanned)) - var/mob/living/carbon/human/H = scanned - if(H.species.appearance_flags & HAS_SKIN_COLOR) - I.color = H.skin_color - I.icon = 'icons/mob/mob.dmi' - I.icon_state = "phaseout" - var/mob/M = scanned - I.color = M.color - I.overlays += M.overlays - I.underlays += M.underlays - - I.alpha = 128 - I.mouse_opacity = 0 - . = I - - // Add it to cache, cutting old entries if the list is too long - overlay_cache[scanned] = . - if(overlay_cache.len > OVERLAY_CACHE_LEN) - overlay_cache.Cut(1, overlay_cache.len-OVERLAY_CACHE_LEN-1) - -/obj/item/device/t_scanner/proc/get_scanned_objects(var/scan_dist) - . = list() - - var/turf/center = get_turf(src.loc) - if(!center) return - - for(var/turf/T in range(scan_range, center)) - for(var/mob/M in T.contents) - if(ishuman(M)) - var/mob/living/carbon/human/H = M - if(H.is_cloaked()) - . += M - else if(M.alpha < 255) - . += M - else if(round_is_spooky() && isobserver(M)) - . += M - - if(!!T.is_plating()) - continue - - for(var/obj/O in T.contents) - if(O.level != 1) - continue - if(!O.invisibility) - continue //if it's already visible don't need an overlay for it - . += O - - - -/obj/item/device/t_scanner/proc/set_user_client(var/client/new_client) - if(new_client == user_client) - return - if(user_client) - for(var/scanned in active_scanned) - user_client.images -= active_scanned[scanned] - if(new_client) - for(var/scanned in active_scanned) - new_client.images += active_scanned[scanned] - else - active_scanned.Cut() - - user_client = new_client - -/obj/item/device/t_scanner/dropped(mob/user) - set_user_client(null) - ..() - -#undef OVERLAY_CACHE_LEN diff --git a/code/game/objects/items/devices/taperecorder.dm b/code/game/objects/items/devices/taperecorder.dm deleted file mode 100644 index b8a2d1234c84e..0000000000000 --- a/code/game/objects/items/devices/taperecorder.dm +++ /dev/null @@ -1,557 +0,0 @@ -/obj/item/device/taperecorder - name = "universal recorder" - desc = "A device that can record to cassette tapes, and play them. It automatically translates the content in playback." - icon = 'icons/obj/tape_recorder.dmi' - icon_state = "taperecorder" - item_state = "analyzer" - w_class = ITEM_SIZE_SMALL - - matter = list(MATERIAL_ALUMINIUM = 60,MATERIAL_GLASS = 30) - - var/emagged = FALSE - var/recording = 0.0 - var/playing = 0.0 - var/playsleepseconds = 0.0 - var/obj/item/device/tape/mytape = /obj/item/device/tape/random - var/canprint = 1 - var/datum/wires/taperecorder/wires = null // Wires datum - var/maintenance = 0 - obj_flags = OBJ_FLAG_CONDUCTIBLE - slot_flags = SLOT_BELT - throwforce = 2 - throw_speed = 4 - throw_range = 20 - -/obj/item/device/taperecorder/New() - ..() - wires = new(src) - set_extension(src, /datum/extension/base_icon_state, icon_state) - if(ispath(mytape)) - mytape = new mytape(src) - GLOB.listening_objects += src - update_icon() - -/obj/item/device/taperecorder/empty - mytape = null - -/obj/item/device/taperecorder/Destroy() - QDEL_NULL(wires) - GLOB.listening_objects -= src - if(mytape) - qdel(mytape) - mytape = null - return ..() - - -/obj/item/device/taperecorder/attackby(obj/item/I, mob/user, params) - if(isScrewdriver(I)) - maintenance = !maintenance - to_chat(user, "You [maintenance ? "open" : "secure"] the lid.") - return - if(istype(I, /obj/item/device/tape)) - if(mytape) - to_chat(user, "There's already a tape inside.") - return - if(!user.unEquip(I)) - return - I.forceMove(src) - mytape = I - to_chat(user, "You insert [I] into [src].") - update_icon() - return - ..() - - -/obj/item/device/taperecorder/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume) - if(mytape) - mytape.ruin() //Fires destroy the tape - return ..() - - -/obj/item/device/taperecorder/attack_hand(mob/user) - if(user.get_inactive_hand() == src) - if(mytape) - eject() - return - ..() - - -/obj/item/device/taperecorder/verb/eject() - set name = "Eject Tape" - set category = "Object" - - if(usr.incapacitated()) - return - if(!mytape) - to_chat(usr, "There's no tape in \the [src].") - return - if(emagged) - to_chat(usr, "The tape seems to be stuck inside.") - return - - if(playing || recording) - stop() - to_chat(usr, "You remove [mytape] from [src].") - usr.put_in_hands(mytape) - mytape = null - update_icon() - -/obj/item/device/taperecorder/examine(mob/user, distance) - . = ..() - if(distance <= 1 && maintenance) - to_chat(user, "The wires are exposed.") - -/obj/item/device/taperecorder/hear_talk(mob/living/M as mob, msg, var/verb="says", datum/language/speaking=null) - if(mytape && recording) - - if(speaking) - if(!speaking.machine_understands) - msg = speaking.scramble(msg) - mytape.record_speech("[M.name] [speaking.format_message_plain(msg, verb)]") - else - mytape.record_speech("[M.name] [verb], \"[msg]\"") - - -/obj/item/device/taperecorder/see_emote(mob/M as mob, text, var/emote_type) - if(emote_type != AUDIBLE_MESSAGE) //only hearable emotes - return - if(mytape && recording) - mytape.record_speech("[strip_html_properly(text)]") - - -/obj/item/device/taperecorder/show_message(msg, type, alt, alt_type) - var/recordedtext - if (msg && type == AUDIBLE_MESSAGE) //must be hearable - recordedtext = msg - else if (alt && alt_type == AUDIBLE_MESSAGE) - recordedtext = alt - else - return - if(mytape && recording) - mytape.record_noise("[strip_html_properly(recordedtext)]") - -/obj/item/device/taperecorder/emag_act(var/remaining_charges, var/mob/user) - if(!emagged) - emagged = TRUE - recording = 0 - to_chat(user, "PZZTTPFFFT") - update_icon() - return 1 - else - to_chat(user, "It is already emagged!") - -/obj/item/device/taperecorder/proc/explode() - var/turf/T = get_turf(loc) - if(ismob(loc)) - var/mob/M = loc - to_chat(M, "\The [src] explodes!") - if(T) - T.hotspot_expose(700,125) - explosion(T, -1, -1, 0, 4) - qdel(src) - return - -/obj/item/device/taperecorder/verb/record() - set name = "Start Recording" - set category = "Object" - - if(usr.incapacitated()) - return - playsound(src, 'sound/machines/click.ogg', 10, 1) - if(!mytape) - to_chat(usr, "There's no tape!") - return - if(mytape.ruined || emagged) - audible_message("The tape recorder makes a scratchy noise.") - return - if(recording) - to_chat(usr, "You're already recording!") - return - if(playing) - to_chat(usr, "You can't record when playing!") - return - if(mytape.used_capacity < mytape.max_capacity) - to_chat(usr, "Recording started.") - recording = 1 - update_icon() - - mytape.record_speech("Recording started.") - - //count seconds until full, or recording is stopped - while(mytape && recording && mytape.used_capacity < mytape.max_capacity) - sleep(10) - if (!mytape) - if(ismob(loc)) - var/mob/M = loc - to_chat(M, SPAN_NOTICE("\The [src]'s tape has been removed.")) - stop_recording() - break - mytape.used_capacity++ - if(mytape.used_capacity >= mytape.max_capacity) - if(ismob(loc)) - var/mob/M = loc - to_chat(M, "The tape is full.") - stop_recording() - break - - - update_icon() - return - else - to_chat(usr, "The tape is full.") - - -/obj/item/device/taperecorder/proc/stop_recording() - //Sanity checks skipped, should not be called unless actually recording - recording = 0 - update_icon() - if (mytape) - mytape.record_speech("Recording stopped.") - if(ismob(loc)) - var/mob/M = loc - to_chat(M, "Recording stopped.") - - -/obj/item/device/taperecorder/verb/stop() - set name = "Stop" - set category = "Object" - - if(usr.incapacitated()) - return - playsound(src, 'sound/machines/click.ogg', 10, 1) - if(recording) - stop_recording() - return - else if(playing) - playing = 0 - update_icon() - to_chat(usr, "Playback stopped.") - return - else - to_chat(usr, "Stop what?") - - -/obj/item/device/taperecorder/verb/wipe_tape() - set name = "Wipe Tape" - set category = "Object" - - if(usr.incapacitated()) - return - if(!mytape) - return - if(emagged || mytape.ruined) - audible_message("The tape recorder makes a scratchy noise.") - return - if(recording || playing) - to_chat(usr, "You can't wipe the tape while playing or recording!") - return - else - if(mytape.storedinfo) mytape.storedinfo.Cut() - if(mytape.timestamp) mytape.timestamp.Cut() - mytape.used_capacity = 0 - to_chat(usr, "You wipe the tape.") - return - - -/obj/item/device/taperecorder/verb/playback_memory() - set name = "Playback Tape" - set category = "Object" - - if(usr.incapacitated()) - return - play(usr) - -/obj/item/device/taperecorder/proc/play(mob/user) - if(!mytape) - to_chat(user, "There's no tape!") - return - if(mytape.ruined) - audible_message("The tape recorder makes a scratchy noise.") - return - if(recording) - to_chat(user, "You can't playback when recording!") - return - if(playing) - to_chat(user, "You're already playing!") - return - playing = 1 - update_icon() - to_chat(user, "Audio playback started.") - playsound(src, 'sound/machines/click.ogg', 10, 1) - for(var/i=1 , i < mytape?.max_capacity , i++) - if(!mytape || !playing) - break - if(mytape.storedinfo.len < i) - break - - var/turf/T = get_turf(src) - var/playedmessage = mytape.storedinfo[i] - if (findtextEx(playedmessage,"*",1,2)) //remove marker for action sounds - playedmessage = copytext_char(playedmessage,2) - T.audible_message("Tape Recorder: [playedmessage]") - - if(mytape.storedinfo.len < i+1) - playsleepseconds = 1 - sleep(10) - T = get_turf(src) - T.audible_message("Tape Recorder: End of recording.") - playsound(src, 'sound/machines/click.ogg', 10, 1) - break - else - playsleepseconds = mytape.timestamp[i+1] - mytape.timestamp[i] - - if(playsleepseconds > 14) - sleep(10) - T = get_turf(src) - T.audible_message("Tape Recorder: Skipping [playsleepseconds] seconds of silence") - playsleepseconds = 1 - sleep(10 * playsleepseconds) - - - playing = 0 - update_icon() - - if(emagged) - var/turf/T = get_turf(src) - T.audible_message("Tape Recorder: This tape recorder will self-destruct in... Five.") - sleep(10) - T = get_turf(src) - T.audible_message("Tape Recorder: Four.") - sleep(10) - T = get_turf(src) - T.audible_message("Tape Recorder: Three.") - sleep(10) - T = get_turf(src) - T.audible_message("Tape Recorder: Two.") - sleep(10) - T = get_turf(src) - T.audible_message("Tape Recorder: One.") - sleep(10) - explode() - - -/obj/item/device/taperecorder/verb/print_transcript() - set name = "Print Transcript" - set category = "Object" - - if(usr.incapacitated()) - return - if(!mytape) - to_chat(usr, "There's no tape!") - return - if(mytape.ruined || emagged) - audible_message("The tape recorder makes a scratchy noise.") - return - if(!canprint) - to_chat(usr, "The recorder can't print that fast!") - return - if(recording || playing) - to_chat(usr, "You can't print the transcript while playing or recording!") - return - - to_chat(usr, "Transcript printed.") - var/obj/item/paper/P = new /obj/item/paper(get_turf(src)) - var/t1 = "Transcript:

              " - for(var/i=1,mytape.storedinfo.len >= i,i++) - var/printedmessage = mytape.storedinfo[i] - if (findtextEx(printedmessage,"*",1,2)) //replace action sounds - printedmessage = "\[[time2text(mytape.timestamp[i]*10,"mm:ss")]\] (Unrecognized sound)" - t1 += "[printedmessage]
              " - P.set_content(t1, "Transcript", FALSE) - usr.put_in_hands(P) - playsound(src, "sound/machines/dotprinter.ogg", 30) - canprint = 0 - sleep(300) - canprint = 1 - - -/obj/item/device/taperecorder/attack_self(mob/user) - if(maintenance) - wires.Interact(user) - return - - if(recording || playing) - stop() - else - record() - - -/obj/item/device/taperecorder/on_update_icon() - var/datum/extension/base_icon_state/bis = get_extension(src, /datum/extension/base_icon_state) - - if(!mytape) - icon_state = "[bis.base_icon_state]_empty" - else if(recording) - icon_state = "[bis.base_icon_state]_recording" - else if(playing) - icon_state = "[bis.base_icon_state]_playing" - else - icon_state = "[bis.base_icon_state]_idle" - -/obj/item/device/tape - name = "tape" - desc = "A magnetic tape that can hold up to ten minutes of content." - icon = 'icons/obj/tape_recorder.dmi' - icon_state = "tape_white" - item_state = "analyzer" - w_class = ITEM_SIZE_TINY - matter = list(MATERIAL_PLASTIC=20, MATERIAL_STEEL=5, MATERIAL_GLASS=5) - force = 1 - throwforce = 0 - var/max_capacity = 600 - var/used_capacity = 0 - var/list/storedinfo = new/list() - var/list/timestamp = new/list() - var/ruined = 0 - var/doctored = 0 - - -/obj/item/device/tape/on_update_icon() - overlays.Cut() - if(ruined && max_capacity) - overlays += "ribbonoverlay" - - -/obj/item/device/tape/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume) - ruin() - -/obj/item/device/tape/attack_self(mob/user) - if(!ruined) - to_chat(user, "You pull out all the tape!") - get_loose_tape(user, storedinfo.len) - ruin() - - -/obj/item/device/tape/proc/ruin() - ruined = 1 - update_icon() - - -/obj/item/device/tape/proc/fix() - ruined = 0 - update_icon() - - -/obj/item/device/tape/proc/record_speech(text) - timestamp += used_capacity - storedinfo += "\[[time2text(used_capacity*10,"mm:ss")]\] [text]" - - -//shows up on the printed transcript as (Unrecognized sound) -/obj/item/device/tape/proc/record_noise(text) - timestamp += used_capacity - storedinfo += "*\[[time2text(used_capacity*10,"mm:ss")]\] [text]" - - -/obj/item/device/tape/attackby(obj/item/I, mob/user, params) - if(user.incapacitated()) - return - if(ruined && isScrewdriver(I)) - if(!max_capacity) - to_chat(user, "There is no tape left inside.") - return - to_chat(user, "You start winding the tape back in...") - if(do_after(user, 12 SECONDS, src, DO_DEFAULT | DO_BOTH_UNIQUE_ACT)) - to_chat(user, "You wound the tape back in.") - fix() - return - else if(istype(I, /obj/item/pen)) - if(loc == user) - var/new_name = input(user, "What would you like to label the tape?", "Tape labeling") as null|text - if(isnull(new_name)) return - new_name = sanitizeSafe(new_name) - if(new_name) - SetName("tape - '[new_name]'") - to_chat(user, "You label the tape '[new_name]'.") - else - SetName("tape") - to_chat(user, "You scratch off the label.") - return - else if(isWirecutter(I)) - cut(user) - else if(istype(I, /obj/item/device/tape/loose)) - join(user, I) - ..() - -/obj/item/device/tape/proc/cut(mob/user) - if(!LAZYLEN(timestamp)) - to_chat(user, "There's nothing on this tape!") - return - var/list/output = list("
              ") - for(var/i=1, i < timestamp.len, i++) - var/time = "\[[time2text(timestamp[i]*10,"mm:ss")]\]" - output += "[time]
              -----CUT------
              " - output += "
              " - - var/datum/browser/popup = new(user, "tape_cutting", "Cutting tape", 170, 600) - popup.set_content(jointext(output,null)) - popup.open() - -/obj/item/device/tape/proc/join(mob/user, obj/item/device/tape/other) - if(max_capacity + other.max_capacity > initial(max_capacity)) - to_chat(user, "You can't fit this much tape in!") - return - if(user.unEquip(other)) - to_chat(user, "You join ends of the tape together.") - max_capacity += other.max_capacity - used_capacity = min(used_capacity + other.used_capacity, max_capacity) - timestamp += other.timestamp - storedinfo += other.storedinfo - doctored = 1 - ruin() - update_icon() - qdel(other) - -/obj/item/device/tape/OnTopic(var/mob/user, var/list/href_list) - if(href_list["cut_after"]) - var/index = text2num(href_list["cut_after"]) - if(index >= timestamp.len) - return - - to_chat(user, "You remove part of the tape off.") - get_loose_tape(user, index) - cut(user) - return TOPIC_REFRESH - -//Spawns new loose tape item, with data starting from [index] entry -/obj/item/device/tape/proc/get_loose_tape(var/mob/user, var/index) - var/obj/item/device/tape/loose/newtape = new() - newtape.timestamp = timestamp.Copy(index+1) - newtape.storedinfo = storedinfo.Copy(index+1) - newtape.max_capacity = max_capacity - index - newtape.used_capacity = max(0, used_capacity - max_capacity) - newtape.doctored = doctored - user.put_in_hands(newtape) - - timestamp.Cut(index+1) - storedinfo.Cut(index+1) - max_capacity = index - used_capacity = min(used_capacity,index) - -//Random colour tapes -/obj/item/device/tape/random/Initialize() - . = ..() - icon_state = "tape_[pick("white", "blue", "red", "yellow", "purple")]" - -/obj/item/device/tape/loose - name = "magnetic tape" - desc = "Quantum-enriched self-repairing nanotape, used for magnetic storage of information." - icon = 'icons/obj/tape_recorder.dmi' - icon_state = "magtape" - ruined = 1 - -/obj/item/device/tape/loose/fix() - return - -/obj/item/device/tape/loose/on_update_icon() - return - -/obj/item/device/tape/loose/get_loose_tape() - return - -/obj/item/device/tape/loose/examine(mob/user, distance) - . = ..() - if(distance <= 1) - to_chat(user, "It looks long enough to hold [max_capacity] seconds worth of recording.") - if(doctored && user.skill_check(SKILL_FORENSICS, SKILL_PROF)) - to_chat(user, "It has been tampered with...") diff --git a/code/game/objects/items/devices/traitordevices.dm b/code/game/objects/items/devices/traitordevices.dm deleted file mode 100644 index 5710b1b33a8a5..0000000000000 --- a/code/game/objects/items/devices/traitordevices.dm +++ /dev/null @@ -1,57 +0,0 @@ -/* - -Miscellaneous traitor devices - -BATTERER - - -*/ - -/* - -The Batterer, like a flashbang but 50% chance to knock people over. Can be either very -effective or pretty fucking useless. - -*/ - -/obj/item/device/batterer - name = "mind batterer" - desc = "A strange device with twin antennas." - icon = 'icons/obj/batterer.dmi' - icon_state = "batterer" - throwforce = 5 - w_class = ITEM_SIZE_TINY - throw_speed = 4 - throw_range = 10 - obj_flags = OBJ_FLAG_CONDUCTIBLE - item_state = "electronic" - origin_tech = list(TECH_MAGNET = 3, TECH_COMBAT = 3, TECH_ESOTERIC = 3) - - var/times_used = 0 //Number of times it's been used. - var/max_uses = 2 - -/obj/item/device/batterer/attack_self(mob/living/carbon/user as mob, flag = 0, emp = 0) - if(!user) return - if(times_used >= max_uses) - to_chat(user, "The mind batterer has been burnt out!") - return - - var/list/stun_victims = list() - for(var/mob/living/carbon/human/M in orange(10, user)) - stun_victims += M - spawn() - if(prob(50)) - M.Weaken(rand(10,20)) - if(prob(25)) - M.Stun(rand(5,10)) - to_chat(M, "You feel a tremendous, paralyzing wave flood your mind.") - else - to_chat(M, "You feel a sudden, electric jolt travel through your head.") - - admin_attacker_log_many_victims(user, stun_victims, "Used \a [src] to attempt to knockdown their victim.", "Was subject to a knockdown attempt.", ", using \a [src], attempted to knockdown") - - playsound(src.loc, 'sound/misc/interference.ogg', 50, 1) - to_chat(user, "You trigger [src].") - times_used += 1 - if(times_used >= max_uses) - icon_state = "battererburnt" diff --git a/code/game/objects/items/devices/transfer_valve.dm b/code/game/objects/items/devices/transfer_valve.dm deleted file mode 100644 index 0013f65855d72..0000000000000 --- a/code/game/objects/items/devices/transfer_valve.dm +++ /dev/null @@ -1,227 +0,0 @@ -/obj/item/device/transfer_valve - name = "tank transfer valve" - desc = "A small, versatile valve with dual-headed heat-resistant pipes. This mechanism is the standard size for coupling with portable gas tanks." - icon = 'icons/obj/assemblies.dmi' - icon_state = "valve_1" - var/obj/item/tank/tank_one - var/obj/item/tank/tank_two - var/obj/item/device/attached_device - var/mob/attacher = null - var/valve_open = 0 - var/toggle = 1 - movable_flags = MOVABLE_FLAG_PROXMOVE - -/obj/item/device/transfer_valve/proc/process_activation(var/obj/item/device/D) - -/obj/item/device/transfer_valve/IsAssemblyHolder() - return 1 - -/obj/item/device/transfer_valve/attackby(obj/item/item, mob/user) - var/turf/location = get_turf(src) // For admin logs - if(istype(item, /obj/item/tank)) - - var/T1_weight = 0 - var/T2_weight = 0 - if(tank_one && tank_two) - to_chat(user, "There are already two tanks attached, remove one first.") - return - - if(!user.unEquip(item, src)) - return - if(!tank_one) - tank_one = item - else - tank_two = item - message_admins("[key_name_admin(user)] attached both tanks to a transfer valve. (JMP)") - log_game("[key_name_admin(user)] attached both tanks to a transfer valve.") - to_chat(user, "You attach the tank to the transfer valve.") - - T1_weight = tank_one.w_class - if(tank_two) - T2_weight = tank_two.w_class - - src.w_class = max(initial(src.w_class),T1_weight,T2_weight) //gets w_class of biggest object, because you shouldn't be able to just shove tanks in and have them be tiny. - - update_icon() - - SSnano.update_uis(src) // update all UIs attached to src -//TODO: Have this take an assemblyholder - else if(isassembly(item)) - var/obj/item/device/assembly/A = item - if(A.secured) - to_chat(user, "The device is secured.") - return - if(attached_device) - to_chat(user, "There is already an device attached to the valve, remove it first.") - return - if(!user.unEquip(item, src)) - return - attached_device = A - to_chat(user, "You attach the [item] to the valve controls and secure it.") - A.holder = src - A.toggle_secure() //this calls update_icon(), which calls update_icon() on the holder (i.e. the bomb). - - 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. (JMP)") - log_game("[key_name_admin(user)] attached a [item] to a transfer valve.") - attacher = user - SSnano.update_uis(src) // update all UIs attached to src - return - - -/obj/item/device/transfer_valve/HasProximity(atom/movable/AM as mob|obj) - if(!attached_device) return - attached_device.HasProximity(AM) - return - - -/obj/item/device/transfer_valve/attack_self(mob/user as mob) - ui_interact(user) - -/obj/item/device/transfer_valve/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1) - - // this is the data which will be sent to the ui - var/data[0] - data["attachmentOne"] = tank_one ? tank_one.name : null - data["attachmentTwo"] = tank_two ? tank_two.name : null - data["valveAttachment"] = attached_device ? attached_device.name : null - data["valveOpen"] = valve_open ? 1 : 0 - - // update the ui if it exists, returns null if no ui is passed/found - ui = SSnano.try_update_ui(user, src, ui_key, ui, data, force_open) - if (!ui) - // the ui does not exist, so we'll create a new() one - // for a list of parameters and their descriptions see the code docs in \code\modules\nano\nanoui.dm - ui = new(user, src, ui_key, "transfer_valve.tmpl", "Tank Transfer Valve", 460, 280) - // when the ui is first opened this is the data it will use - ui.set_initial_data(data) - // open the new ui window - ui.open() - // auto update every Master Controller tick - //ui.set_auto_update(1) - -/obj/item/device/transfer_valve/Topic(href, href_list) - ..() - if ( usr.stat || usr.restrained() ) - return 0 - if (src.loc != usr) - return 0 - if(tank_one && href_list["tankone"]) - remove_tank(tank_one) - else if(tank_two && href_list["tanktwo"]) - remove_tank(tank_two) - else if(href_list["open"]) - toggle_valve() - else if(attached_device) - if(href_list["rem_device"]) - attached_device.dropInto(loc) - attached_device:holder = null - attached_device = null - update_icon() - if(href_list["device"]) - attached_device.attack_self(usr) - return 1 // Returning 1 sends an update to attached UIs - -/obj/item/device/transfer_valve/process_activation(var/obj/item/device/D) - if(toggle) - toggle = 0 - toggle_valve() - spawn(50) // To stop a signal being spammed from a proxy sensor constantly going off or whatever - toggle = 1 - -/obj/item/device/transfer_valve/on_update_icon() - overlays.Cut() - underlays.Cut() - - if(!tank_one && !tank_two && !attached_device) - icon_state = "valve_1" - return - icon_state = "valve" - - if(tank_one) - overlays += "[tank_one.icon_state]" - if(tank_two) - var/icon/J = new(icon, icon_state = "[tank_two.icon_state]") - J.Shift(WEST, 13) - underlays += J - if(attached_device) - overlays += "device" - -/obj/item/device/transfer_valve/proc/remove_tank(obj/item/tank/T) - if(tank_one == T) - split_gases() - tank_one = null - else if(tank_two == T) - split_gases() - tank_two = null - else - return - - if(!tank_one && !tank_two) src.w_class = initial(src.w_class) //returns it to just the transfer valve size - T.dropInto(loc) - update_icon() - -/obj/item/device/transfer_valve/proc/merge_gases() - if(valve_open) - return - tank_two.air_contents.volume += tank_one.air_contents.volume - var/datum/gas_mixture/temp = tank_one.remove_air_ratio(1) - tank_two.assume_air(temp) - valve_open = 1 - -/obj/item/device/transfer_valve/proc/split_gases() - if(!valve_open) - return - - valve_open = 0 - - if(QDELETED(tank_one) || QDELETED(tank_two)) - return - - var/ratio1 = tank_one.air_contents.volume/tank_two.air_contents.volume - var/datum/gas_mixture/temp = tank_two.remove_air_ratio(ratio1) - tank_two.air_contents.volume -= tank_one.air_contents.volume - tank_one.assume_air(temp) - - /* - Exadv1: I know this isn't how it's going to work, but this was just to check - it explodes properly when it gets a signal (and it does). - */ - -/obj/item/device/transfer_valve/proc/toggle_valve() - if(!valve_open && (tank_one && tank_two)) - var/turf/bombturf = get_turf(src) - var/area/A = get_area(bombturf) - - var/attacher_name = "" - if(!attacher) - attacher_name = "Unknown" - else - attacher_name = "[attacher.name]([attacher.ckey])" - - var/log_str = "Bomb valve opened in [A.name] " - log_str += "with [attached_device ? attached_device : "no device"] attacher: [attacher_name]" - - if(attacher) - log_str += "(?)" - - var/mob/mob = get_mob_by_key(src.fingerprintslast) - var/last_touch_info = "" - if(mob) - last_touch_info = "(?)" - - log_str += " Last touched by: [src.fingerprintslast][last_touch_info]" - GLOB.bombers += log_str - message_admins(log_str, 0, 1) - log_game(log_str) - merge_gases() - - else if(valve_open==1 && (tank_one && tank_two)) - split_gases() - - src.update_icon() - -// this doesn't do anything but the timer etc. expects it to be here -// eventually maybe have it update icon to show state (timer, prox etc.) like old bombs -/obj/item/device/transfer_valve/proc/c_state() - return diff --git a/code/game/objects/items/devices/tvcamera.dm b/code/game/objects/items/devices/tvcamera.dm deleted file mode 100644 index 7c6dc1d879af6..0000000000000 --- a/code/game/objects/items/devices/tvcamera.dm +++ /dev/null @@ -1,158 +0,0 @@ -/obj/item/device/camera/tvcamera - name = "press camera drone" - desc = "A Ward-Takahashi EyeBuddy livestreaming press camera drone. Weapon of choice for war correspondents and reality show cameramen. It does not appear to have any internal memory storage." - icon_state = "camcorder" - item_state = "camcorder" - w_class = ITEM_SIZE_LARGE - slot_flags = SLOT_BELT - var/channel = "General News Feed" - var/obj/machinery/camera/network/thunder/camera - var/obj/item/device/radio/radio - -/obj/item/device/camera/tvcamera/New() - ..() - GLOB.listening_objects += src - -/obj/item/device/camera/tvcamera/Destroy() - GLOB.listening_objects -= src - QDEL_NULL(camera) - QDEL_NULL(radio) - . = ..() - -/obj/item/device/camera/tvcamera/Initialize() - camera = new(src) - camera.c_tag = channel - camera.status = FALSE - radio = new(src) - radio.listening = FALSE - radio.set_frequency(ENT_FREQ) - radio.power_usage = 0 - . = ..() - -/obj/item/device/camera/tvcamera/examine(mob/user) - . = ..() - to_chat(user, "Video feed is currently: [camera.status ? "Online" : "Offline"]") - to_chat(user, "Audio feed is currently: [radio.broadcasting ? "Online" : "Offline"]") - to_chat(user, "Photography setting is currently: [on ? "On" : "Off"]") - -/obj/item/device/camera/tvcamera/attack_self(mob/user) - add_fingerprint(user) - user.set_machine(src) - var/dat = list() - dat += "Photography mode is currently: [on ? "On" : "Off"]
              " - dat += "Photography focus is currently: [size]
              " - dat += "Channel name is: [channel ? channel : "unidentified broadcast"]
              " - dat += "Video streaming is: [camera.status ? "Online" : "Offline"]
              " - dat += "Microphone is: [radio.broadcasting ? "Online" : "Offline"]
              " - dat += "Sound is being broadcasted on frequency: [format_frequency(radio.frequency)] ([get_frequency_default_name(radio.frequency)])
              " - var/datum/browser/popup = new(user, "Press Camera Drone", "EyeBuddy", 300, 390, src) - popup.set_content(jointext(dat,null)) - popup.open() - -/obj/item/device/camera/tvcamera/Topic(bred, href_list, state = GLOB.physical_state) - if(..()) - return 1 - if (href_list["photo"]) - on = !on - if (href_list["focus"]) - change_size() - if(href_list["channel"]) - var/nc = sanitize(input(usr, "Channel name", "Select new channel name", channel) as text|null) - if(nc) - channel = nc - camera.c_tag = channel - to_chat(usr, "New channel name: '[channel]' has been set.") - if(href_list["video"]) - camera.set_status(!camera.status) - if(camera.status) - to_chat(usr,"Video streaming: Activated. Broadcasting on channel: '[channel]'") - else - to_chat(usr,"Video streaming: Deactivated.") - update_icon() - if(href_list["sound"]) - radio.ToggleBroadcast() - if(radio.broadcasting) - to_chat(usr,"Audio streaming: Activated. Broadcasting on frequency: [format_frequency(radio.frequency)].") - else - to_chat(usr,"Audio streaming: Deactivated.") - if(!href_list["close"]) - attack_self(usr) - -/obj/item/device/camera/tvcamera/on_update_icon() - ..() - if(camera.status) - icon_state = "camcorder_on" - item_state = "camcorder_on" - else - icon_state = "camcorder" - item_state = "camcorder" - var/mob/living/carbon/human/H = loc - if(istype(H)) - H.update_inv_r_hand(0) - H.update_inv_l_hand() - -/* Assembly by a roboticist */ -/obj/item/robot_parts/head/attackby(var/obj/item/device/assembly/S, mob/user as mob) - if ((!istype(S, /obj/item/device/assembly/infra))) - ..() - return - var/obj/item/TVAssembly/A = new(user) - qdel(S) - user.put_in_hands(A) - to_chat(user, "You add the infrared sensor to the robot head.") - qdel(src) - -/* Using camcorder icon as I can't sprite. -Using robohead because of restricting to roboticist */ -/obj/item/TVAssembly - name = "TV Camera assembly" - desc = "A robotic head with an infrared sensor inside." - icon = 'icons/obj/robot_parts.dmi' - icon_state = "head" - item_state = "head" - var/buildstep = 0 - w_class = ITEM_SIZE_LARGE - -/obj/item/TVAssembly/attackby(var/obj/item/W, var/mob/user) - switch(buildstep) - if(0) - if(istype(W, /obj/item/robot_parts/robot_component/camera)) - to_chat(user, "You add the camera module to [src]") - qdel(W) - desc = "This TV camera assembly has a camera module." - buildstep++ - if(1) - if(istype(W, /obj/item/device/taperecorder)) - qdel(W) - buildstep++ - to_chat(user, "You add the tape recorder to [src]") - desc = "This TV camera assembly has a camera and audio module." - return - if(2) - if(isCoil(W)) - var/obj/item/stack/cable_coil/C = W - if(!C.use(3)) - to_chat(user, "You need three cable coils to wire the devices.") - ..() - return - buildstep++ - to_chat(user, "You wire the assembly") - desc = "This TV camera assembly has wires sticking out." - return - if(3) - if(isWirecutter(W)) - to_chat(user, " You trim the wires.") - buildstep++ - desc = "This TV camera assembly needs casing." - return - if(4) - if(istype(W, /obj/item/stack/material/steel)) - var/obj/item/stack/material/steel/S = W - if(S.use(1)) - buildstep++ - to_chat(user, "You encase the assembly.") - var/turf/T = get_turf(src) - new /obj/item/device/camera/tvcamera(T) - qdel(src) - return - ..() \ No newline at end of file diff --git a/code/game/objects/items/devices/uplink.dm b/code/game/objects/items/devices/uplink.dm deleted file mode 100644 index 11a3d1df8202f..0000000000000 --- a/code/game/objects/items/devices/uplink.dm +++ /dev/null @@ -1,247 +0,0 @@ -// HIDDEN UPLINK - Can be stored in anything but the host item has to have a trigger for it. -/* How to create an uplink in 3 easy steps! - - 1. All obj/item 's have a hidden_uplink var. By default it's null. Give the item one with "new(src)", it must be in it's contents. Feel free to add "uses". - - 2. Code in the triggers. Use check_trigger for this, I recommend closing the item's menu with "close_browser(usr, "window=windowname") if it returns true. - The var/value is the value that will be compared with the var/target. If they are equal it will activate the menu. - - 3. If you want the menu to stay until the users locks his uplink, add an active_uplink_check(mob/user as mob) in your interact/attack_hand proc. - Then check if it's true, if true return. This will stop the normal menu appearing and will instead show the uplink menu. -*/ - -/obj/item/device/uplink - name = "hidden uplink" - desc = "There is something wrong if you're examining this." - var/active = 0 - var/datum/uplink_category/category = 0 // The current category we are in - var/exploit_id // Id of the current exploit record we are viewing - - var/welcome = "Welcome, Operative" // Welcoming menu message - var/uses // Numbers of crystals - var/list/ItemsCategory // List of categories with lists of items - var/list/ItemsReference // List of references with an associated item - var/list/nanoui_items // List of items for NanoUI use - var/nanoui_menu = 0 // The current menu we are in - var/list/nanoui_data = new // Additional data for NanoUI use - - var/datum/mind/uplink_owner = null - var/used_TC = 0 - var/offer_time = 15 MINUTES //The time increment per discount offered - var/next_offer_time //The time a discount will next be offered - var/datum/uplink_item/discount_item //The item to be discounted - var/discount_amount //The amount as a percent the item will be discounted by - var/datum/computer_file/program/uplink/program - -/obj/item/device/uplink/nano_host() - return loc - -/obj/item/device/uplink/New(var/atom/location, var/datum/mind/owner, var/telecrystals = DEFAULT_TELECRYSTAL_AMOUNT) - if(!istype(location, /atom)) - CRASH("Invalid spawn location. Expected /atom, was [location ? location.type : "NULL"]") - - ..() - nanoui_data = list() - update_nano_data() - - src.uplink_owner = owner - world_uplinks += src - uses = telecrystals - START_PROCESSING(SSobj, src) - -/obj/item/device/uplink/Destroy() - uplink_owner = null - world_uplinks -= src - STOP_PROCESSING(SSobj, src) - return ..() - -/obj/item/device/uplink/Process() - if(world.time > next_offer_time) - next_offer_time = world.time + offer_time - discount_amount = pick(90;0.9, 80;0.8, 70;0.7, 60;0.6, 50;0.5, 40;0.4, 30;0.3, 20;0.2, 10;0.1) - - var/datum/uplink_item/new_discount_item - do - var/datum/uplink_random_selection/uplink_selection = get_uplink_random_selection_by_type(/datum/uplink_random_selection/blacklist) - new_discount_item = uplink_selection.get_random_item(INFINITY, src) - // Ensures we only only get items for which we get an actual discount and that this particular uplink can actually view (can buy would risk near-infinite loops). - while(is_improper_item(new_discount_item, discount_amount)) - if(!new_discount_item) - return - - discount_item = new_discount_item - update_nano_data() - SSnano.update_uis(src) - -/obj/item/device/uplink/proc/is_improper_item(var/datum/uplink_item/new_discount_item, discount_amount) - if(!new_discount_item) - return FALSE - - if(istype(new_discount_item, /datum/uplink_item/item/stealthy_weapons/soap)) - return FALSE - - var/discount_price = round(new_discount_item.cost(uses) * discount_amount) - if(!discount_price || new_discount_item.cost(uses) == discount_price) - return TRUE - - if(!new_discount_item.can_view(src)) - return TRUE - - return FALSE - -/obj/item/device/uplink/proc/get_item_cost(var/item_type, var/item_cost) - return item_type == discount_item ? max(1, round(item_cost*discount_amount)) : item_cost - -// Toggles the uplink on and off. Normally this will bypass the item's normal functions and go to the uplink menu, if activated. -/obj/item/device/uplink/proc/toggle() - active = !active - -// Directly trigger the uplink. Turn on if it isn't already. -/obj/item/device/uplink/proc/trigger(mob/user as mob) - if(!active) - toggle() - interact(user) - -// Checks to see if the value meets the target. Like a frequency being a traitor_frequency, in order to unlock a headset. -// If true, it accesses trigger() and returns 1. If it fails, it returns false. Use this to see if you need to close the -// current item's menu. -/obj/item/device/uplink/proc/check_trigger(mob/user as mob, var/value, var/target) - if(value == target) - trigger(user) - return 1 - return 0 - -/* - NANO UI FOR UPLINK WOOP WOOP -*/ -/obj/item/device/uplink/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1, var/uistate = GLOB.inventory_state) - var/title = "Remote Uplink" - var/data[0] - - data["welcome"] = welcome - data["crystals"] = uses - data["menu"] = nanoui_menu - data["discount_category"] = discount_item ? discount_item.category.name : "" - data["discount_name"] = discount_item ? discount_item.name : "" - data["discount_amount"] = (1-discount_amount)*100 - data["offer_expiry"] = worldtime2stationtime(next_offer_time) - - data += nanoui_data - - // update the ui if it exists, returns null if no ui is passed/found - ui = SSnano.try_update_ui(user, src, ui_key, ui, data, force_open) - if (!ui) // No auto-refresh - ui = new(user, src, ui_key, "uplink.tmpl", title, 450, 600, state = uistate) - ui.set_initial_data(data) - ui.open() - - -// Interaction code. Gathers a list of items purchasable from the paren't uplink and displays it. It also adds a lock button. -/obj/item/device/uplink/interact(mob/user) - ui_interact(user) - -/obj/item/device/uplink/CanUseTopic() - if(!active) - return STATUS_CLOSE - return ..() - -// The purchasing code. -/obj/item/device/uplink/OnTopic(user, href_list) - if(href_list["buy_item"]) - var/datum/uplink_item/UI = (locate(href_list["buy_item"]) in uplink.items) - UI.buy(src, usr) - . = TOPIC_REFRESH - else if(href_list["lock"]) - toggle() - SSnano.close_user_uis(user, src, "main") - if (program) - program.authenticated = FALSE - program.computer.kill_program(program) - . = TOPIC_HANDLED - else if(href_list["return"]) - nanoui_menu = round(nanoui_menu/10) - . = TOPIC_REFRESH - else if(href_list["menu"]) - nanoui_menu = text2num(href_list["menu"]) - if(href_list["id"]) - exploit_id = text2num(href_list["id"]) - if(href_list["category"]) - category = locate(href_list["category"]) in uplink.categories - . = TOPIC_REFRESH - - if(. == TOPIC_REFRESH) - update_nano_data() - -/obj/item/device/uplink/proc/update_nano_data() - if(nanoui_menu == 0) - var/categories[0] - for(var/datum/uplink_category/category in uplink.categories) - if(category.can_view(src)) - categories[++categories.len] = list("name" = category.name, "ref" = "\ref[category]") - nanoui_data["categories"] = categories - else if(nanoui_menu == 1) - var/items[0] - for(var/datum/uplink_item/item in category.items) - if(item.can_view(src)) - var/cost = item.cost(uses, src) - if(!cost) cost = "???" - items[++items.len] = list("name" = item.name(), "description" = replacetext_char(item.description(), "\n", "
              "), "can_buy" = item.can_buy(src), "cost" = cost, "ref" = "\ref[item]") - nanoui_data["items"] = items - else if(nanoui_menu == 2) - var/permanentData[0] - for(var/datum/computer_file/report/crew_record/L in GLOB.all_crew_records) - permanentData[++permanentData.len] = list(Name = L.get_name(),"id" = L.uid, "exploit" = length(L.get_antagRecord())) - nanoui_data["exploit_records"] = permanentData - else if(nanoui_menu == 21) - nanoui_data["exploit_exists"] = 0 - - for(var/datum/computer_file/report/crew_record/L in GLOB.all_crew_records) - if(L.uid == exploit_id) - nanoui_data["exploit"] = L.generate_nano_data() - nanoui_data["exploit_exists"] = 1 - break - -// I placed this here because of how relevant it is. -// You place this in your uplinkable item to check if an uplink is active or not. -// If it is, it will display the uplink menu and return 1, else it'll return false. -// If it returns true, I recommend closing the item's normal menu with "close_browser(user, "window=name")" -/obj/item/proc/active_uplink_check(mob/user as mob) - // Activates the uplink if it's active - if(src.hidden_uplink) - if(src.hidden_uplink.active) - src.hidden_uplink.trigger(user) - return 1 - return 0 - -// PRESET UPLINKS -// A collection of preset uplinks. -// -// Includes normal radio uplink, multitool uplink, -// implant uplink (not the implant tool) and a preset headset uplink. - -/obj/item/device/radio/uplink/New(var/loc, var/owner, var/amount) - ..() - hidden_uplink = new(src, owner, amount) - icon_state = "radio" - -/obj/item/device/radio/uplink/attack_self(mob/user as mob) - if(hidden_uplink) - hidden_uplink.trigger(user) - -/obj/item/device/multitool/uplink/New(var/loc, var/owner) - ..() - hidden_uplink = new(src, owner) - -/obj/item/device/multitool/uplink/attack_self(mob/user as mob) - if(hidden_uplink) - hidden_uplink.trigger(user) - -/obj/item/device/radio/headset/uplink - traitor_frequency = 1445 - -/obj/item/device/radio/headset/uplink/New() - ..() - hidden_uplink = new(src) - -/obj/item/device/uplink/contained/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1, var/uistate = GLOB.contained_state) - return ..() diff --git a/code/game/objects/items/devices/uplink_random_lists.dm b/code/game/objects/items/devices/uplink_random_lists.dm deleted file mode 100644 index cd46c8f56b83d..0000000000000 --- a/code/game/objects/items/devices/uplink_random_lists.dm +++ /dev/null @@ -1,142 +0,0 @@ -/datum/uplink_random_item - var/uplink_item // The uplink item - var/keep_probability // The probability we'll decide to keep this item if selected - var/reselect_probability // Probability that we'll decide to keep this item if previously selected. - // Is done together with the keep_probability check. Being selected more than once does not affect this probability. - -/datum/uplink_random_item/New(var/uplink_item, var/keep_probability = 100, var/reselect_propbability = 33) - ..() - src.uplink_item = uplink_item - src.keep_probability = keep_probability - src.reselect_probability = reselect_probability - -/datum/uplink_random_selection - var/list/datum/uplink_random_item/items - -/datum/uplink_random_selection/New() - ..() - items = list() - -/datum/uplink_random_selection/proc/get_random_item(var/telecrystals, obj/item/device/uplink/U, var/list/bought_items) - var/const/attempts = 50 - - for(var/i = 0; i < attempts; i++) - var/datum/uplink_random_item/RI = pick(items) - if(!prob(RI.keep_probability)) - continue - var/datum/uplink_item/I = uplink.items_assoc[RI.uplink_item] - if(I.cost(telecrystals, U) > telecrystals) - continue - if(bought_items && (I in bought_items) && !prob(RI.reselect_probability)) - continue - if(U && !I.can_buy(U)) - continue - return I - return uplink.items_assoc[/datum/uplink_item/item/stealthy_weapons/soap] - -var/global/list/uplink_random_selections_ -/proc/get_uplink_random_selection_by_type(var/uplist_selection_type) - if(!uplink_random_selections_) - uplink_random_selections_ = init_subtypes(/datum/uplink_random_selection) - for(var/datum/entry in uplink_random_selections_) - uplink_random_selections_[entry.type] = entry - return uplink_random_selections_[uplist_selection_type] - -/datum/uplink_random_selection/default/New() - ..() - - items += new/datum/uplink_random_item(/datum/uplink_item/item/visible_weapons/silenced) - items += new/datum/uplink_random_item(/datum/uplink_item/item/visible_weapons/revolver) - items += new/datum/uplink_random_item(/datum/uplink_item/item/visible_weapons/heavysniper, 15, 0) - items += new/datum/uplink_random_item(/datum/uplink_item/item/grenades/emp, 50) - items += new/datum/uplink_random_item(/datum/uplink_item/item/visible_weapons/crossbow, 33) - items += new/datum/uplink_random_item(/datum/uplink_item/item/visible_weapons/energy_sword, 75) - - items += new/datum/uplink_random_item(/datum/uplink_item/item/stealthy_weapons/soap, 5, 100) - items += new/datum/uplink_random_item(/datum/uplink_item/item/stealthy_weapons/concealed_cane, 50, 10) - items += new/datum/uplink_random_item(/datum/uplink_item/item/stealthy_weapons/sleepy) - items += new/datum/uplink_random_item(/datum/uplink_item/item/stealthy_weapons/cigarette_kit) - - items += new/datum/uplink_random_item(/datum/uplink_item/item/stealth_items/id) - items += new/datum/uplink_random_item(/datum/uplink_item/item/stealth_items/spy) - items += new/datum/uplink_random_item(/datum/uplink_item/item/stealth_items/chameleon_kit) - items += new/datum/uplink_random_item(/datum/uplink_item/item/stealth_items/chameleon_projector) - items += new/datum/uplink_random_item(/datum/uplink_item/item/stealth_items/voice) - - items += new/datum/uplink_random_item(/datum/uplink_item/item/tools/toolbox, reselect_propbability = 10) - items += new/datum/uplink_random_item(/datum/uplink_item/item/tools/plastique) - items += new/datum/uplink_random_item(/datum/uplink_item/item/tools/encryptionkey_radio) - items += new/datum/uplink_random_item(/datum/uplink_item/item/tools/encryptionkey_binary) - items += new/datum/uplink_random_item(/datum/uplink_item/item/tools/emag, 100, 50) - items += new/datum/uplink_random_item(/datum/uplink_item/item/tools/clerical) - items += new/datum/uplink_random_item(/datum/uplink_item/item/armor/space_suit, 50, 10) //proxima //was:/datum/uplink_item/item/tools/space_suit - items += new/datum/uplink_random_item(/datum/uplink_item/item/tools/thermal) - items += new/datum/uplink_random_item(/datum/uplink_item/item/armor/heavy_armor) //proxima //was:/datum/uplink_item/item/tools/heavy_armor - items += new/datum/uplink_random_item(/datum/uplink_item/item/tools/powersink, 10, 10) - items += new/datum/uplink_random_item(/datum/uplink_item/item/tools/ai_module, 25, 0) - items += new/datum/uplink_random_item(/datum/uplink_item/item/tools/polychromic_dye_bottle) - - items += new/datum/uplink_random_item(/datum/uplink_item/item/implants/imp_freedom) - items += new/datum/uplink_random_item(/datum/uplink_item/item/implants/imp_compress) - items += new/datum/uplink_random_item(/datum/uplink_item/item/implants/imp_explosive) - - items += new/datum/uplink_random_item(/datum/uplink_item/item/medical/combatstim, reselect_propbability = 20) - items += new/datum/uplink_random_item(/datum/uplink_item/item/medical/surgery, reselect_propbability = 10) - items += new/datum/uplink_random_item(/datum/uplink_item/item/medical/combat, reselect_propbability = 10) - - items += new/datum/uplink_random_item(/datum/uplink_item/item/hardsuit_modules/energy_net, reselect_propbability = 15) - items += new/datum/uplink_random_item(/datum/uplink_item/item/hardsuit_modules/ewar_voice, reselect_propbability = 15) - items += new/datum/uplink_random_item(/datum/uplink_item/item/hardsuit_modules/maneuvering_jets, reselect_propbability = 15) - items += new/datum/uplink_random_item(/datum/uplink_item/item/hardsuit_modules/egun, reselect_propbability = 15) - items += new/datum/uplink_random_item(/datum/uplink_item/item/hardsuit_modules/power_sink, reselect_propbability = 15) - items += new/datum/uplink_random_item(/datum/uplink_item/item/hardsuit_modules/laser_canon, reselect_propbability = 5) - - items += new/datum/uplink_random_item(/datum/uplink_item/item/tools/suit_sensor_mobile) - items += new/datum/uplink_random_item(/datum/uplink_item/item/services/suit_sensor_shutdown, 75, 0) - items += new/datum/uplink_random_item(/datum/uplink_item/item/services/suit_sensor_garble, 75, 0) - -/datum/uplink_random_selection/blacklist - var/list/blacklist = list( - /datum/uplink_item/item/ammo, - /datum/uplink_item/item/badassery, - /datum/uplink_item/item/telecrystal, - /datum/uplink_item/item/tools/supply_beacon, - /datum/uplink_item/item/implants/imp_uplink, - ) - -/datum/uplink_random_selection/blacklist/New() - ..() - for(var/uplink_item_type in subtypesof(/datum/uplink_item/item)) - var/datum/uplink_item/item/ui = uplink_item_type - if(!initial(ui.name)) - continue - if(is_path_in_list(uplink_item_type, blacklist)) - continue - var/new_thing = new/datum/uplink_random_item(uplink_item_type) - items += new_thing - -/datum/uplink_random_selection/blacklist/get_random_item(var/telecrystals, obj/item/device/uplink/U, var/list/bought_items) - var/const/attempts = 50 - for(var/i = 0; i < attempts; i++) - var/datum/uplink_random_item/RI = pick(items) - if(!prob(RI.keep_probability)) - continue - var/datum/uplink_item/I = uplink.items_assoc[RI.uplink_item] - if(I.cost(telecrystals, U) > telecrystals) - continue - if(bought_items && (I in bought_items) && !prob(RI.reselect_probability)) - continue - return I - return uplink.items_assoc[/datum/uplink_item/item/stealthy_weapons/soap] - -#ifdef DEBUG -/proc/debug_uplink_purchage_log() - for(var/antag_type in GLOB.all_antag_types_) - var/datum/antagonist/A = GLOB.all_antag_types_[antag_type] - A.print_player_summary() - -/proc/debug_uplink_item_assoc_list() - for(var/key in uplink.items_assoc) - log_debug("[key] - [uplink.items_assoc[key]]") - -#endif diff --git a/code/game/objects/items/devices/whistle.dm b/code/game/objects/items/devices/whistle.dm deleted file mode 100644 index 280898195ee30..0000000000000 --- a/code/game/objects/items/devices/whistle.dm +++ /dev/null @@ -1,51 +0,0 @@ -/obj/item/device/hailer - name = "hailer" - desc = "Used by obese officers to save their breath for running." - icon = 'icons/obj/hailer.dmi' - icon_state = "voice0" - item_state = "flashbang" //looks exactly like a flash (and nothing like a flashbang) - w_class = ITEM_SIZE_TINY - obj_flags = OBJ_FLAG_CONDUCTIBLE - - var/use_message = "Halt! Security!" - var/spamcheck = 0 - var/insults - -/obj/item/device/hailer/verb/set_message() - set name = "Set Hailer Message" - set category = "Object" - set desc = "Alter the message shouted by your hailer." - - if(!isnull(insults)) - to_chat(usr, "The hailer is fried. The tiny input screen just shows a waving ASCII penis.") - return - - var/new_message = input(usr, "Please enter new message (leave blank to reset).") as text - if(!new_message || new_message == "") - use_message = "Halt! Security!" - else - use_message = capitalize(copytext_char(sanitize(new_message), 1, MAX_MESSAGE_LEN)) - - to_chat(usr, "You configure the hailer to shout \"[use_message]\".") - -/obj/item/device/hailer/attack_self(mob/living/carbon/user as mob) - if (spamcheck) - return - - if(isnull(insults)) - playsound(get_turf(src), 'sound/voice/halt.ogg', 100, 1, vary = 0) - user.audible_message("[user]'s [name] rasps, \"[use_message]\"", null, "\The [user] holds up \the [name].") - else - to_chat(user, "*BZZZZZZZZT*") - - spamcheck = 1 - spawn(20) - spamcheck = 0 - -/obj/item/device/hailer/emag_act(var/remaining_charges, var/mob/user) - if(isnull(insults)) - to_chat(user, "You overload \the [src]'s voice synthesizer.") - insults = rand(1, 3)//to prevent dickflooding - return 1 - else - to_chat(user, "The hailer is fried. You can't even fit the sequencer into the input slot.") diff --git a/code/game/objects/items/documents.dm b/code/game/objects/items/documents.dm deleted file mode 100644 index 1d6403d0e5320..0000000000000 --- a/code/game/objects/items/documents.dm +++ /dev/null @@ -1,50 +0,0 @@ -/obj/item/documents - name = "secret documents" - desc = "\"Top Secret\" documents." - icon = 'icons/obj/bureaucracy.dmi' - icon_state = "docs_generic" - item_state = "paper" - throwforce = 0 - w_class = ITEM_SIZE_TINY - throw_range = 1 - var/description_antag - -/obj/item/documents/examine(mob/user) - . = ..() - if(description_antag) - to_chat(user, description_antag) - -/obj/item/documents/nanotrasen - name = "secret corporate documents" - desc = "\"Top Secret\" corporate documents, filled with complex diagrams, research procedures, and details on cloning or breeding rights to non-sapient species the Torch encounters. It seems like they will be auctioning them off to the highest private bidder." - description_antag = "A conglomerate of powerful corporations seems to be wanting to create weaponized xenobiological species. Probably as a form of WMD, by your best guess." - icon_state = "docs_verified" - -/obj/item/documents/scg/verified - name = "secret government documents" - desc = "\"Top Secret\" documents detailing SCG IFF codes, granting the Torch access into restricted sectors. The majority of them are coordinates, codes for fellow ships, and clearance lists." - description_antag = "These codes seem very odd for an exploration vessel: a lot of them are SCG blacksites, covered up. You've never even heard of most of these." - icon_state = "docs_verified" - -/obj/item/documents/scg/brains - name = "secret medical documents" - desc = "Heavily classified medical documentation of brain scans and exploratory surgery conducted across the entire length of the Torch project. It seems like they have been documenting how deep-space living has altered the structure of the brain." - description_antag = "These studies were conducted, without consent, while the patients were under anaesthesia for some other routine medical concern. They detail some very unusual deformities within the deepest parts of the brain, correlating them with the people and places visited by the Torch 'for later assessment'. The findings, and any 'viable specimens', are to be delivered to a black site on S/2004 N 1." - icon_state = "docs_verified" - -/obj/item/documents/scg/red - name = "red secret documents" - desc = "\"Top Secret\" protocols on what to do if the ship passes into TCC sectors. The writing mostly goes over the diplomatic process, while constantly shaming the Terrans for their idiocy and needless aggression." - description_antag = "You notice that these protocols contain small, almost intentional snubbing efforts. Whoever wrote these may have been rooting for a war to start..." - icon_state = "docs_red" - -/obj/item/documents/scg/blue - name = "blue secret documents" - desc = "\"Top Secret\" documents detailing the Skrellian company Krri'gli, and their insistent requests upon specific priority sectors for the Torch to investigate." - description_antag = "Krri'gli seem to be guiding the Torch, subtly, to a specific unmapped sector of the galaxy. It's almost like they're too afraid to investigate it personally." - icon_state = "docs_blue" - -/obj/item/documents/scgr - name = "private memos and faxes" - desc = "\"Top Secret\" memos and faxes between the SCGR and other officials of the SCG. It's like a chat client ran on pure paperwork." - description_antag = "The SCGR's conversations contain a massive amount of dirt on politicians: drugs, sex, money..." \ No newline at end of file diff --git a/code/game/objects/items/glassjar.dm b/code/game/objects/items/glassjar.dm deleted file mode 100644 index de0175a56d55e..0000000000000 --- a/code/game/objects/items/glassjar.dm +++ /dev/null @@ -1,114 +0,0 @@ -/obj/item/glass_jar - name = "glass jar" - desc = "A small empty jar." - icon = 'icons/obj/items.dmi' - icon_state = "jar" - w_class = ITEM_SIZE_SMALL - matter = list(MATERIAL_GLASS = 200) - item_flags = ITEM_FLAG_NO_BLUDGEON - var/list/accept_mobs = list( - /mob/living/simple_animal/passive/lizard, - /mob/living/simple_animal/passive/mouse, - /mob/living/simple_animal/borer - ) - var/contains = 0 // 0 = nothing, 1 = money, 2 = animal, 3 = spiderling - -/obj/item/glass_jar/New() - ..() - update_icon() - -/obj/item/glass_jar/afterattack(var/atom/A, var/mob/user, var/proximity) - if(!proximity || contains) - return - if(istype(A, /mob)) - var/accept = 0 - for(var/D in accept_mobs) - if(istype(A, D)) - accept = 1 - if(!accept) - to_chat(user, "[A] doesn't fit into \the [src].") - return - var/mob/L = A - user.visible_message("[user] scoops [L] into \the [src].", "You scoop [L] into \the [src].") - L.forceMove(src) - contains = 2 - update_icon() - return - else if(istype(A, /obj/effect/spider/spiderling)) - var/obj/effect/spider/spiderling/S = A - user.visible_message("[user] scoops [S] into \the [src].", "You scoop [S] into \the [src].") - S.forceMove(src) - STOP_PROCESSING(SSobj, S) // No growing inside jars - contains = 3 - update_icon() - return - -/obj/item/glass_jar/attack_self(var/mob/user) - switch(contains) - if(1) - for(var/obj/O in src) - O.dropInto(user.loc) - to_chat(user, "You take money out of \the [src].") - contains = 0 - update_icon() - return - if(2) - for(var/mob/M in src) - M.dropInto(user.loc) - user.visible_message("[user] releases [M] from \the [src].", "You release [M] from \the [src].") - contains = 0 - update_icon() - return - if(3) - for(var/obj/effect/spider/spiderling/S in src) - S.dropInto(user.loc) - user.visible_message("[user] releases [S] from \the [src].", "You release [S] from \the [src].") - START_PROCESSING(SSobj, S) // They can grow after being let out though - contains = 0 - update_icon() - return - -/obj/item/glass_jar/attackby(var/obj/item/W, var/mob/user) - if(istype(W, /obj/item/spacecash)) - if(contains == 0) - contains = 1 - if(contains != 1) - return - if(!user.unEquip(W, src)) - return - var/obj/item/spacecash/S = W - user.visible_message("[user] puts [S.worth] [S.worth > 1 ? GLOB.using_map.local_currency_name : GLOB.using_map.local_currency_name_singular] into \the [src].") - update_icon() - -/obj/item/glass_jar/on_update_icon() // Also updates name and desc - underlays.Cut() - overlays.Cut() - switch(contains) - if(0) - SetName(initial(name)) - desc = initial(desc) - if(1) - SetName("tip jar") - desc = "A small jar with money inside." - for(var/obj/item/spacecash/S in src) - var/list/moneyImages = S.getMoneyImages() - for(var/A in moneyImages) - var/image/money = image('icons/obj/items.dmi', A) - money.pixel_x = rand(-2, 3) - money.pixel_y = rand(-6, 6) - money.SetTransform(scale = 0.6) - underlays += money - if(2) - for(var/mob/M in src) - var/image/victim = image(M.icon, M.icon_state) - victim.pixel_y = 6 - underlays += victim - SetName("glass jar with [M]") - desc = "A small jar with [M] inside." - if(3) - for(var/obj/effect/spider/spiderling/S in src) - var/image/victim = image(S.icon, S.icon_state) - underlays += victim - SetName("glass jar with [S]") - desc = "A small jar with [S] inside." - return diff --git a/code/game/objects/items/holosign_creator.dm b/code/game/objects/items/holosign_creator.dm deleted file mode 100644 index d85478dd5f1af..0000000000000 --- a/code/game/objects/items/holosign_creator.dm +++ /dev/null @@ -1,62 +0,0 @@ -/obj/item/holosign_creator - name = "holographic sign projector" - desc = "A handy-dandy holographic projector that displays a janitorial sign." - icon = 'icons/obj/janitor.dmi' - icon_state = "signmaker" - item_state = "electronic" - force = 0 - w_class = ITEM_SIZE_SMALL - throwforce = 0 - throw_speed = 3 - throw_range = 7 - var/list/signs = list() - var/max_signs = 10 - var/creation_time = 0 //time to create a holosign in deciseconds. - var/holosign_type = /obj/structure/holosign - var/holocreator_busy = FALSE //to prevent placing multiple holo barriers at once - -/obj/item/holosign_creator/Destroy() - for(var/sign in signs) - qdel(sign) - signs.Cut() - . = ..() - -/obj/item/holosign_creator/afterattack(atom/target, mob/user, flag) - . = ..() - if(flag) - var/turf/T = get_turf(target) - if(!T) - return // Some objs qdel on attackby (notably, holosigns), which happens before this. - var/obj/structure/holosign/H = locate(holosign_type) in T - if(H) - return - else - if(!is_blocked_turf(T, TRUE)) //can't put holograms on a tile that has dense stuff - if(holocreator_busy) - to_chat(user, "[src] is busy creating a hologram.") - return - if(signs.len < max_signs) - playsound(src.loc, 'sound/machines/click.ogg', 20, 1) - if(creation_time) - holocreator_busy = TRUE - if(!do_after(user, creation_time, target, DO_BOTH_UNIQUE_ACT)) - holocreator_busy = FALSE - return - holocreator_busy = FALSE - if(signs.len >= max_signs) - return - if(is_blocked_turf(T, TRUE)) //don't try to sneak dense stuff on our tile during the wait. - return - H = new holosign_type(get_turf(target), src) - to_chat(user, "You create \a [H] with [src].") - else - to_chat(user, "[src] is projecting at max capacity!") - -/obj/item/holosign_creator/attack(mob/living/carbon/human/M, mob/user) - return - -/obj/item/holosign_creator/attack_self(mob/user) - if(signs.len) - for(var/H in signs) - qdel(H) - to_chat(user, "You clear all active holograms.") diff --git a/code/game/objects/items/instruments.dm b/code/game/objects/items/instruments.dm deleted file mode 100644 index a9b10b722b357..0000000000000 --- a/code/game/objects/items/instruments.dm +++ /dev/null @@ -1,15 +0,0 @@ -/obj/item/instrument - icon = 'icons/obj/items.dmi' - throwforce = 0 - throw_speed = 3 - throw_range = 6 - force = 0 - -/obj/item/instrument/guitar - name = "guitar" - desc = "An antique musical instrument made of wood, originating from Earth. It has six metal strings of different girth and tension. When moved, they vibrate and the waves resonate in the guitar's open body, producing sounds. Obtained notes can be altered by pressing the strings to the neck, affecting the vibration's frequency." - icon = 'icons/obj/items.dmi' - icon_state = "guitar" - -/obj/item/instrument/guitar/attack_self(mob/user as mob) - user.visible_message("\The [user] strums [src]!","You strum [src]!") diff --git a/code/game/objects/items/latexballoon.dm b/code/game/objects/items/latexballoon.dm deleted file mode 100644 index 8316df8411015..0000000000000 --- a/code/game/objects/items/latexballoon.dm +++ /dev/null @@ -1,48 +0,0 @@ -/obj/item/latexballon - name = "latex glove" - desc = "A latex glove, usually used as a balloon." - icon_state = "latexballon" - item_state = "lgloves" - force = 0 - throwforce = 0 - w_class = ITEM_SIZE_SMALL - throw_speed = 1 - throw_range = 15 - var/state - var/datum/gas_mixture/air_contents = null - -/obj/item/latexballon/proc/blow(obj/item/tank/tank) - if (icon_state == "latexballon_bursted") - return - src.air_contents = tank.remove_air_volume(3) - icon_state = "latexballon_blow" - item_state = "latexballon" - -/obj/item/latexballon/proc/burst() - if (!air_contents) - return - playsound(src, 'sound/weapons/gunshot/gunshot.ogg', 100, 1) - icon_state = "latexballon_bursted" - item_state = "lgloves" - loc.assume_air(air_contents) - -/obj/item/latexballon/ex_act(severity) - burst() - switch(severity) - if (EX_ACT_DEVASTATING) - qdel(src) - if (EX_ACT_HEAVY) - if (prob(50)) - qdel(src) - -/obj/item/latexballon/bullet_act() - burst() - -/obj/item/latexballon/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume) - if(exposed_temperature > T0C+100) - burst() - return - -/obj/item/latexballon/attackby(obj/item/W as obj, mob/user as mob) - if (W.can_puncture()) - burst() diff --git a/code/game/objects/items/paintkit.dm b/code/game/objects/items/paintkit.dm deleted file mode 100644 index 57db481020fd1..0000000000000 --- a/code/game/objects/items/paintkit.dm +++ /dev/null @@ -1,112 +0,0 @@ -/obj/item/device/kit - icon_state = "modkit" - icon = 'icons/obj/modkit.dmi' - var/new_name = "exosuit" //What is the variant called? - var/new_desc = "An exosuit." //How is the new exosuit described? - var/new_icon = "ripley" //What base icon will the new exosuit use? - var/new_icon_file - var/uses = 1 // Uses before the kit deletes itself. - -/obj/item/device/kit/examine(mob/user) - . = ..() - to_chat(user, "It has [uses] use\s left.") - -/obj/item/device/kit/inherit_custom_item_data(var/datum/custom_item/citem) - new_name = citem.item_name - new_desc = citem.item_desc - new_icon = citem.item_icon_state - new_icon_file = CUSTOM_ITEM_OBJ - . = src - -/obj/item/device/kit/proc/use(var/amt, var/mob/user) - uses -= amt - playsound(get_turf(user), 'sound/items/Screwdriver.ogg', 50, 1) - if(uses<1) - qdel(src) - -// Root hardsuit kit defines. -// Icons for modified hardsuits need to be in the proper .dmis because suit cyclers may cock them up. -/obj/item/device/kit/suit - name = "voidsuit modification kit" - desc = "A kit for modifying a voidsuit." - uses = 2 - var/new_light_overlay - var/new_mob_icon_file - -/obj/item/device/kit/suit/inherit_custom_item_data(var/datum/custom_item/citem) - . = ..() - if(citem.additional_data["light_overlay"]) - new_light_overlay = citem.additional_data["light_overlay"] - new_mob_icon_file = CUSTOM_ITEM_MOB - -/obj/item/clothing/head/helmet/space/void/attackby(var/obj/item/O, var/mob/user) - if(istype(O,/obj/item/device/kit/suit)) - var/obj/item/device/kit/suit/kit = O - SetName("[kit.new_name] suit helmet") - desc = kit.new_desc - icon_state = "[kit.new_icon]_helmet" - item_state = "[kit.new_icon]_helmet" - if(kit.new_icon_file) - icon = kit.new_icon_file - if(kit.new_mob_icon_file) - icon_override = kit.new_mob_icon_file - if(kit.new_light_overlay) - light_overlay = kit.new_light_overlay - to_chat(user, "You set about modifying the helmet into [src].") - var/mob/living/carbon/human/H = user - if(istype(H)) - species_restricted = list(H.species.get_bodytype(H)) - kit.use(1,user) - return 1 - return ..() - -/obj/item/clothing/suit/space/void/attackby(var/obj/item/O, var/mob/user) - if(istype(O,/obj/item/device/kit/suit)) - var/obj/item/device/kit/suit/kit = O - SetName("[kit.new_name] voidsuit") - desc = kit.new_desc - icon_state = "[kit.new_icon]_suit" - item_state = "[kit.new_icon]_suit" - if(kit.new_icon_file) - icon = kit.new_icon_file - if(kit.new_mob_icon_file) - icon_override = kit.new_mob_icon_file - to_chat(user, "You set about modifying the suit into [src].") - var/mob/living/carbon/human/H = user - if(istype(H)) - species_restricted = list(H.species.get_bodytype(H)) - kit.use(1,user) - return 1 - return ..() - -// Mechs are handled in their attackby (mech_interaction.dm). -/obj/item/device/kit/paint - name = "exosuit customisation kit" - desc = "A kit containing all the needed tools and parts to repaint a exosuit." - var/removable = null - -/obj/item/device/kit/paint/examine(mob/user) - . = ..() - to_chat(user, "This kit will add a '[new_name]' decal to a exosuit'.") - -// exosuit kits. -/obj/item/device/kit/paint/use(amt, mob/user) - playsound(get_turf(user), 'sound/items/Screwdriver.ogg', 50, 1) - -/obj/item/device/kit/paint/flames_red - name = "\"Firestarter\" exosuit customisation kit" - new_icon = "flames_red" - -/obj/item/device/kit/paint/flames_blue - name = "\"Burning Chrome\" exosuit customisation kit" - new_icon = "flames_blue" - -/obj/item/device/kit/paint/camouflage - name = "\"Guerilla\" exosuit customisation kit" - desc = "The exact same pattern the 76th Armored Gauntlet used in the Gaia war, now available for general use." - new_icon = "cammo1" - -/obj/item/device/kit/paint/camouflage/forest - name = "\"Alpine\" exosuit customisation kit" - new_icon = "cammo2" - desc = "A muted pattern for alpine environments. Don't miss the forest for the trees!" diff --git a/code/game/objects/items/passport.dm b/code/game/objects/items/passport.dm deleted file mode 100644 index 26ef9aff9d0aa..0000000000000 --- a/code/game/objects/items/passport.dm +++ /dev/null @@ -1,151 +0,0 @@ -/obj/item/passport - name = "passport" - icon = 'icons/obj/passport.dmi' - icon_state = "passport" - force = 0.5 - w_class = ITEM_SIZE_SMALL - attack_verb = list("whipped") - hitsound = 'sound/weapons/towelwhip.ogg' - desc = "A passport. Its origin seems unknown." - var/info - var/fingerprint - -/obj/item/passport/proc/set_info(mob/living/carbon/human/H) - if(!istype(H)) - return - var/decl/cultural_info/culture = H.get_cultural_value(TAG_HOMEWORLD) - var/pob = culture ? culture.name : "Unset" - if(H.dna) - fingerprint = md5(H.dna.uni_identity) - else - fingerprint = "N/A" - info = "\icon[src] [src]:\nName: [H.real_name]\nSpecies: [H.get_species()]\nGender: [gender2text(H.gender)]\nAge: [H.age]\nPlace of Birth: [pob]\nFingerprint: [fingerprint]" - -/obj/item/passport/attack_self(mob/user as mob) - user.visible_message( - SPAN_ITALIC("[user] opens and checks [src]."), - SPAN_ITALIC("You open [src] and check for some main information."), - SPAN_ITALIC("You hear the faint rustle of pages."), - 5 - ) - to_chat(user, info || SPAN_WARNING("[src] is completely blank!")) - -/obj/item/passport/scg - name = "\improper SCG passport" - icon_state = "passport_scg" - desc = "A passport from the Sol Central Government." - -/obj/item/passport/earth - name = "\improper Earth passport" - icon_state = "passport_scg2" - desc = "A passport from the Earth, within Sol Central Government space." - -/obj/item/passport/venus - name = "\improper Venusian passport" - icon_state = "passport_scg2" - desc = "A passport from Venus, within Sol Central Government space." - -/obj/item/passport/luna - name = "\improper Luna passport" - icon_state = "passport_scg2" - desc = "A passport from Luna, within Sol Central Government space." - -/obj/item/passport/mars - name = "\improper Mars passport" - icon_state = "passport_scg2" - desc = "A passport from Mars, within Sol Central Government space." - -/obj/item/passport/phobos - name = "\improper Phobos passport" - icon_state = "passport_scg2" - desc = "A passport from Phobos, within Sol Central Government space." - -/obj/item/passport/ceres - name = "\improper Ceres passport" - icon_state = "passport_scg2" - desc = "A passport from Ceres, within Sol Central Government space." - -/obj/item/passport/pluto - name = "\improper Pluto passport" - icon_state = "passport_scg2" - desc = "A passport from Pluto, within Sol Central Government space." - -/obj/item/passport/tiamat - name = "\improper Tiamat passport" - icon_state = "passport_scg2" - desc = "A passport from Tiamat, within Sol Central Government space." - -/obj/item/passport/eos - name = "\improper Eos passport" - icon_state = "passport_scg2" - desc = "A passport from Eos, within Sol Central Government space." - -/obj/item/passport/ceti_epsilon - name = "\improper Ceti Epsilon passport" - icon_state = "passport_scg2" - desc = "A passport from Ceti Epsilon, within Sol Central Government space." - -/obj/item/passport/iolaus - name = "\improper Iolaus passport" - icon_state = "passport_scg2" - desc = "A passport from Iolaus, within Sol Central Government space." - -/obj/item/passport/pirx - name = "\improper Pirx passport" - icon_state = "passport_scg2" - desc = "A passport from Pirx, within Sol Central Government space." - -/obj/item/passport/tadmor - name = "\improper Tadmor passport" - icon_state = "passport_scg2" - desc = "A passport from Tadmor, within Sol Central Government space." - -/obj/item/passport/brahe - name = "\improper Brahe passport" - icon_state = "passport_scg2" - desc = "A passport from Brahe, within Sol Central Government space." - -/obj/item/passport/saffar - name = "\improper Saffar passport" - icon_state = "passport_scg2" - desc = "A passport from Yuklid V, within Sol Central Government space." - -/obj/item/passport/south_gaia - name = "\improper Southern Gaia passport" - icon_state = "passport_scg2" - desc = "A passport from the southern part of Gaia, under control of the Sol Central Government." - -/obj/item/passport/iccg - name = "\improper ICCG passport" - icon_state = "passport_iccg" - desc = "A passport from the Independent Colonial Confederation of Gilgamesh." - -/obj/item/passport/north_gaia - name = "\improper Northern Gaia passport" - icon_state = "passport_iccg2" - desc = "A passport from the northern part of Gaia, under control of the Independent Colonial Confederation of Gilgamesh." - -/obj/item/passport/terra - name = "\improper Terra passport" - icon_state = "passport_iccg2" - desc = "A passport from Terra, within ICCG space." - -/obj/item/passport/novayazemlya - name = "\improper Novaya Zemlya passport" - icon_state = "passport_iccg2" - desc = "A passport from Novaya Zemlya, within ICCG space." - -/obj/item/passport/saveel - name = "\improper Saveel passport" - icon_state = "passport" - desc = "A passport from Saveel, an isolationist frontier colony." - -/obj/item/passport/magnitka - name = "\improper Magnitka passport" - icon_state = "passport" - desc = "A passport from Magnitka, an independant colony." - -/obj/item/passport/empiremohranda - name = "\improper Mohranda passport" - icon_state = "passport" - desc = "A passport from the Empire of Mohranda, a frontier empire established on Lohrene and Mohranda, in the Luggust system." diff --git a/code/game/objects/items/plunger.dm b/code/game/objects/items/plunger.dm deleted file mode 100644 index 3002cda6e40a5..0000000000000 --- a/code/game/objects/items/plunger.dm +++ /dev/null @@ -1,24 +0,0 @@ -/obj/item/clothing/mask/plunger - name = "plunger" - desc = "This is possibly the least sanitary object around." - icon_state = "plunger_black" - item_state = "plunger_black" - icon = 'icons/obj/plunger.dmi' - attack_verb = list("plunged") - force = 1 - w_class = 3 - item_flags = null - slot_flags = SLOT_HEAD | SLOT_MASK - hitsound = 'sound/effects/plunger.ogg' - matter = list("steel" = 5000) - -/obj/item/device/plunger/robot - name = "plunger" - desc = "a plunger. It unclogs things." - icon_state = "plunger_black" - item_state = "plunger_black" - icon = 'icons/obj/plunger.dmi' - attack_verb = list("plunged") - force = 1 - w_class = 3 - hitsound = 'sound/effects/plunger.ogg' diff --git a/code/game/objects/items/rescuebag.dm b/code/game/objects/items/rescuebag.dm deleted file mode 100644 index d0528c9469e62..0000000000000 --- a/code/game/objects/items/rescuebag.dm +++ /dev/null @@ -1,141 +0,0 @@ - -/obj/item/bodybag/rescue - name = "rescue bag" - desc = "A folded, reusable bag designed to prevent additional damage to an occupant, especially useful if short on time or in \ - a hostile enviroment." - icon = 'icons/obj/closets/rescuebag.dmi' - icon_state = "folded" - origin_tech = list(TECH_BIO = 2) - var/obj/item/tank/airtank - -/obj/item/bodybag/rescue/loaded - airtank = /obj/item/tank/oxygen_emergency_double - -/obj/item/bodybag/rescue/Initialize() - . = ..() - if(ispath(airtank)) - airtank = new airtank(src) - update_icon() - -/obj/item/bodybag/rescue/Destroy() - QDEL_NULL(airtank) - return ..() - -/obj/item/bodybag/rescue/attack_self(mob/user) - var/obj/structure/closet/body_bag/rescue/R = new /obj/structure/closet/body_bag/rescue(user.loc) - R.add_fingerprint(user) - if(airtank) - R.set_tank(airtank) - airtank = null - qdel(src) - -/obj/item/bodybag/rescue/attackby(obj/item/W, mob/user, var/click_params) - if(istype(W,/obj/item/tank)) - if(airtank) - to_chat(user, "\The [src] already has an air tank installed.") - return 1 - else if(user.unEquip(W)) - W.forceMove(src) - airtank = W - to_chat(user, "You install \the [W] in \the [src].") - return 1 - else if(airtank && isScrewdriver(W)) - to_chat(user, "You remove \the [airtank] from \the [src].") - airtank.dropInto(loc) - airtank = null - else - ..() - -/obj/item/bodybag/rescue/examine(mob/user) - . = ..() - if(airtank) - to_chat(user,"The pressure meter on \the [airtank] shows '[airtank.air_contents.return_pressure()] kPa'.") - to_chat(user,"The distribution valve on \the [airtank] is set to '[airtank.distribute_pressure] kPa'.") - else - to_chat(user, "The air tank is missing.") - -/obj/structure/closet/body_bag/rescue - name = "rescue bag" - desc = "A reusable plastic bag designed to prevent additional damage to an occupant, especially useful if short on time or in \ - a hostile enviroment." - icon = 'icons/obj/closets/rescuebag.dmi' - item_path = /obj/item/bodybag/rescue - storage_types = CLOSET_STORAGE_MOBS - var/obj/item/tank/airtank - var/datum/gas_mixture/atmo - -/obj/structure/closet/body_bag/rescue/Initialize() - . = ..() - atmo = new() - atmo.volume = 0.1*CELL_VOLUME - START_PROCESSING(SSobj, src) - -/obj/structure/closet/body_bag/rescue/Destroy() - QDEL_NULL(airtank) - return ..() - -/obj/structure/closet/body_bag/rescue/proc/set_tank(obj/item/tank/newtank) - airtank = newtank - if(airtank) - airtank.forceMove(null) - update_icon() - -/obj/structure/closet/body_bag/rescue/on_update_icon() - ..() - overlays.Cut() - if(airtank) - overlays += image(icon, "tank") - -/obj/structure/closet/body_bag/rescue/attackby(obj/item/W, mob/user, var/click_params) - if(istype(W,/obj/item/tank)) - if(airtank) - to_chat(user, "\The [src] already has an air tank installed.") - return 1 - else if(user.unEquip(W, src)) - set_tank(W) - to_chat(user, "You install \the [W] in \the [src].") - return 1 - else if(airtank && isScrewdriver(W)) - to_chat(user, "You remove \the [airtank] from \the [src].") - airtank.dropInto(loc) - airtank = null - update_icon() - else - ..() - -/obj/structure/closet/body_bag/rescue/fold(var/user) - var/obj/item/tank/my_tank = airtank - airtank = null // Apparently this is required to avoid breaking my_tank checks further down after the parent proc runs qdel(src) - var/obj/item/bodybag/rescue/folded = ..() - if (folded && istype(folded)) - if (my_tank) - my_tank.air_contents.merge(atmo) - folded.airtank = my_tank - my_tank.forceMove(folded) - else - airtank = my_tank - -/obj/structure/closet/body_bag/rescue/Process() - if(!airtank) - return - var/env_pressure = atmo.return_pressure() - var/pressure_delta = max(airtank.distribute_pressure, 51) - env_pressure - if(airtank.air_contents.temperature > 0 && pressure_delta > 0) - var/transfer_moles = calculate_transfer_moles(airtank.air_contents, atmo, pressure_delta) - pump_gas_passive(airtank, airtank.air_contents, atmo, transfer_moles) - -/obj/structure/closet/body_bag/rescue/return_air() //Used to make stasis bags protect from vacuum. - return atmo - -/obj/structure/closet/body_bag/rescue/examine(mob/user) - . = ..() - if(airtank) - to_chat(user,"The pressure meter on \the [airtank] shows '[airtank.air_contents.return_pressure()] kPa'.") - to_chat(user,"The distribution valve on \the [airtank] is set to '[airtank.distribute_pressure] kPa'.") - else - to_chat(user, "The air tank is missing.") - to_chat(user,"The pressure meter on [src] shows '[atmo.return_pressure()] kPa'.") - if(Adjacent(user)) //The bag's rather thick and opaque from a distance. - to_chat(user, "You peer into \the [src].") - for(var/mob/living/L in contents) - L.examine(arglist(args)) diff --git a/code/game/objects/items/robot/robot_frame.dm b/code/game/objects/items/robot/robot_frame.dm deleted file mode 100644 index 8b7b2f14bba5d..0000000000000 --- a/code/game/objects/items/robot/robot_frame.dm +++ /dev/null @@ -1,171 +0,0 @@ -/obj/item/robot_parts/robot_suit - name = "standard robot frame" - desc = "A complex metal backbone with standard limb sockets and pseudomuscle anchors." - icon_state = "robo_suit" - - var/list/parts = list() - var/list/required_parts = list( - BP_L_ARM = /obj/item/robot_parts/l_arm, - BP_R_ARM = /obj/item/robot_parts/r_arm, - BP_CHEST = /obj/item/robot_parts/chest, - BP_L_LEG = /obj/item/robot_parts/l_leg, - BP_R_LEG = /obj/item/robot_parts/r_leg, - BP_HEAD = /obj/item/robot_parts/head - ) - var/created_name = "" - var/product = /mob/living/silicon/robot - -/obj/item/robot_parts/robot_suit/Initialize() - . = ..() - update_icon() - -/obj/item/robot_parts/robot_suit/on_update_icon() - overlays.Cut() - for(var/part in required_parts) - if(parts[part]) - overlays += "[part]+o" - -/obj/item/robot_parts/robot_suit/proc/check_completion() - for(var/part in required_parts) - if(!parts[part]) - return FALSE - return TRUE - -/obj/item/robot_parts/robot_suit/attackby(obj/item/W as obj, mob/user as mob) - - // Uninstall a robotic part. - if(isCrowbar(W)) - if(!parts.len) - to_chat(user, SPAN_WARNING("\The [src] has no parts to remove.")) - return - var/removing = pick(parts) - var/obj/item/robot_parts/part = parts[removing] - part.forceMove(get_turf(src)) - user.put_in_hands(part) - parts -= removing - to_chat(user, SPAN_WARNING("You lever \the [part] off \the [src].")) - update_icon() - - // Install a robotic part. - else if (istype(W, /obj/item/robot_parts)) - var/obj/item/robot_parts/part = W - if(!required_parts[part.bp_tag] || !istype(W, required_parts[part.bp_tag])) - to_chat(user, SPAN_WARNING("\The [src] is not compatible with \the [W].")) - return - if(parts[part.bp_tag]) - to_chat(user, SPAN_WARNING("\The [src] already has \a [W] installed.")) - return - if(part.can_install(user) && user.unEquip(W, src)) - parts[part.bp_tag] = part - update_icon() - - // Install an MMI/brain. - else if(istype(W, /obj/item/device/mmi) || istype(W, /obj/item/organ/internal/posibrain)) - - if(!istype(loc,/turf)) - to_chat(user, SPAN_WARNING("You can't put \the [W] in without the frame being on the ground.")) - return - - if(!check_completion()) - to_chat(user, SPAN_WARNING("The frame is not ready for the central processor to be installed.")) - return - - var/mob/living/carbon/brain/B - if(istype(W, /obj/item/device/mmi)) - var/obj/item/device/mmi/M = W - B = M.brainmob - else - var/obj/item/organ/internal/posibrain/P = W - B = P.brainmob - - if(!B) - to_chat(user, SPAN_WARNING("Sticking an empty [W.name] into the frame would sort of defeat the purpose.")) - return - - if(jobban_isbanned(B, "Robot")) - to_chat(user, SPAN_WARNING("\The [W] does not seem to fit.")) - return - - if(B.stat == DEAD) - to_chat(user, SPAN_WARNING("Sticking a dead [W.name] into the frame would sort of defeat the purpose.")) - return - - var/ghost_can_reenter = 0 - if(B.mind) - if(!B.key) - for(var/mob/observer/ghost/G in GLOB.player_list) - if(G.can_reenter_corpse && G.mind == B.mind) - ghost_can_reenter = 1 - break - else - ghost_can_reenter = 1 - if(!ghost_can_reenter) - to_chat(user, SPAN_WARNING("\The [W] is completely unresponsive; there's no point.")) - return - - if(!user.unEquip(W)) - return - var/mob/living/silicon/robot/O = new product(get_turf(loc)) - if(!O) - return - - O.mmi = W - O.set_invisibility(0) - O.custom_name = created_name - O.updatename("Default") - B.mind.transfer_to(O) - if(O.mind && O.mind.assigned_role) - O.job = O.mind.assigned_role - else - O.job = "Robot" - - var/obj/item/robot_parts/chest/chest = parts[BP_CHEST] - if (chest && chest.cell) - chest.cell.forceMove(O) - W.forceMove(O) //Should fix cybros run time erroring when blown up. It got deleted before, along with the frame. - - // Since we "magically" installed a cell, we also have to update the correct component. - if(O.cell) - var/datum/robot_component/cell_component = O.components["power cell"] - cell_component.wrapped = O.cell - cell_component.installed = 1 - callHook("borgify", list(O)) - O.Namepick() - qdel(src) - - else if(istype(W, /obj/item/pen)) - var/t = sanitizeSafe(input(user, "Enter new robot name", src.name, src.created_name), MAX_NAME_LEN) - if(t && (in_range(src, user) || loc == user)) - created_name = t - else - ..() - -/obj/item/robot_parts/robot_suit/Destroy() - parts.Cut() - for(var/thing in contents) - qdel(thing) - . = ..() - -/obj/item/robot_parts/robot_suit/proc/dismantled_from(var/mob/living/silicon/robot/donor) - for(var/thing in required_parts - list(BP_CHEST, BP_HEAD)) - var/part_type = required_parts[thing] - parts[thing] = new part_type(src) - var/obj/item/robot_parts/chest/chest = (locate() in donor.contents) || new - if(chest) - chest.forceMove(src) - parts[BP_CHEST] = chest - update_icon() - -/obj/item/robot_parts/robot_suit/SetDefaultName() - SetName(initial(name)) - -/obj/item/robot_parts/robot_suit/flyer - name = "flying robot frame" - icon = 'icons/obj/robot_parts_flying.dmi' - product = /mob/living/silicon/robot/flying - required_parts = list( - BP_L_ARM = /obj/item/robot_parts/l_arm, - BP_R_ARM = /obj/item/robot_parts/r_arm, - BP_CHEST = /obj/item/robot_parts/chest, - BP_HEAD = /obj/item/robot_parts/head - ) diff --git a/code/game/objects/items/robot/robot_items.dm b/code/game/objects/items/robot/robot_items.dm deleted file mode 100644 index f7f124e8aea1b..0000000000000 --- a/code/game/objects/items/robot/robot_items.dm +++ /dev/null @@ -1,78 +0,0 @@ -//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:32 - -/********************************************************************** - Cyborg Spec Items -***********************************************************************/ -/obj/item/borg/overdrive - name = "overdrive" - icon = 'icons/obj/decals.dmi' - icon_state = "shock" - -/********************************************************************** - HUD/SIGHT things -***********************************************************************/ -/obj/item/borg/sight - icon = 'icons/obj/decals.dmi' - icon_state = "securearea" - var/sight_mode = 0 - var/hud_type - - -/obj/item/borg/sight/xray - name = "\proper x-ray vision" - sight_mode = BORGXRAY - - -/obj/item/borg/sight/thermal - name = "\proper thermal vision" - sight_mode = BORGTHERM - icon_state = "thermal" - icon = 'icons/obj/clothing/obj_eyes.dmi' - - -/obj/item/borg/sight/meson - name = "\proper meson vision" - sight_mode = BORGMESON - icon_state = "meson" - icon = 'icons/obj/clothing/obj_eyes.dmi' - -/obj/item/borg/sight/material - name = "\proper material scanner vision" - sight_mode = BORGMATERIAL - -/obj/item/borg/sight/hud - name = "hud" - var/obj/item/clothing/glasses/hud/hud = null - - -/obj/item/borg/sight/hud/med - name = "medical hud" - icon_state = "healthhud" - icon = 'icons/obj/clothing/obj_eyes.dmi' - hud_type = HUD_MEDICAL - -/obj/item/borg/sight/hud/med/Initialize() - . = ..() - hud = new /obj/item/clothing/glasses/hud/health(src) - - -/obj/item/borg/sight/hud/sec - name = "security hud" - icon_state = "securityhud" - icon = 'icons/obj/clothing/obj_eyes.dmi' - hud_type = HUD_SECURITY - -/obj/item/borg/sight/hud/Initialize() - . = ..() - hud = new /obj/item/clothing/glasses/hud/security(src) - - -/obj/item/borg/sight/hud/jani - name = "janitor hud" - icon_state = "janihud" - icon = 'icons/obj/clothing/obj_eyes.dmi' - hud_type = HUD_JANITOR - -/obj/item/borg/sight/hud/jani/Initialize() - . = ..() - hud = new /obj/item/clothing/glasses/hud/janitor(src) \ No newline at end of file diff --git a/code/game/objects/items/robot/robot_parts.dm b/code/game/objects/items/robot/robot_parts.dm deleted file mode 100644 index b03b0b91850db..0000000000000 --- a/code/game/objects/items/robot/robot_parts.dm +++ /dev/null @@ -1,220 +0,0 @@ -/obj/item/robot_parts - name = "robot parts" - icon = 'icons/obj/robot_parts.dmi' - item_state = "buildpipe" - icon_state = "blank" - obj_flags = OBJ_FLAG_CONDUCTIBLE - slot_flags = SLOT_BELT - var/list/part = null // Order of args is important for installing robolimbs. - var/sabotaged = 0 //Emagging limbs can have repercussions when installed as prosthetics. - var/model_info - var/bp_tag = null // What part is this? - dir = SOUTH - -/obj/item/robot_parts/set_dir() - return - -/obj/item/robot_parts/New(var/newloc, var/model) - ..(newloc) - if(model_info && model) - model_info = model - var/datum/robolimb/R = all_robolimbs[model] - if(R) - SetName("[R.company] [initial(name)]") - desc = "[R.desc]" - if(icon_state in icon_states(R.icon)) - icon = R.icon - else - SetDefaultName() - -/obj/item/robot_parts/proc/SetDefaultName() - SetName("robot [initial(name)]") - -/obj/item/robot_parts/proc/can_install(mob/user) - return TRUE - -/obj/item/robot_parts/l_arm - name = "left arm" - desc = "A skeletal limb wrapped in pseudomuscles, with a low-conductivity case." - icon_state = "l_arm" - part = list(BP_L_ARM, BP_L_HAND) - model_info = 1 - bp_tag = BP_L_ARM - -/obj/item/robot_parts/r_arm - name = "right arm" - desc = "A skeletal limb wrapped in pseudomuscles, with a low-conductivity case." - icon_state = "r_arm" - part = list(BP_R_ARM, BP_R_HAND) - model_info = 1 - bp_tag = BP_R_ARM - -/obj/item/robot_parts/l_leg - name = "left leg" - desc = "A skeletal limb wrapped in pseudomuscles, with a low-conductivity case." - icon_state = "l_leg" - part = list(BP_L_LEG, BP_L_FOOT) - model_info = 1 - bp_tag = BP_L_LEG - -/obj/item/robot_parts/r_leg - name = "right leg" - desc = "A skeletal limb wrapped in pseudomuscles, with a low-conductivity case." - icon_state = "r_leg" - part = list(BP_R_LEG, BP_R_FOOT) - model_info = 1 - bp_tag = BP_R_LEG - -/obj/item/robot_parts/head - name = "head" - desc = "A standard reinforced braincase, with spine-plugged neural socket and sensor gimbals." - icon_state = "head" - part = list(BP_HEAD) - model_info = 1 - bp_tag = BP_HEAD - var/obj/item/device/flash/flash1 = null - var/obj/item/device/flash/flash2 = null - -/obj/item/robot_parts/head/can_install(mob/user) - var/success = TRUE - if(!flash1 || !flash2) - to_chat(user, "You need to attach a flash to it first!") - success = FALSE - return success && ..() - -/obj/item/robot_parts/chest - name = "torso" - desc = "A heavily reinforced case containing cyborg logic boards, with space for a standard power cell." - icon_state = "chest" - part = list(BP_GROIN,BP_CHEST) - model_info = 1 - bp_tag = BP_CHEST - var/wires = 0.0 - var/obj/item/cell/cell = null - -/obj/item/robot_parts/chest/can_install(mob/user) - var/success = TRUE - if(!wires) - to_chat(user, "You need to attach wires to it first!") - success = FALSE - if(!cell) - to_chat(user, "You need to attach a cell to it first!") - success = FALSE - return success && ..() - -/obj/item/robot_parts/chest/attackby(obj/item/W as obj, mob/user as mob) - ..() - if(istype(W, /obj/item/cell)) - if(src.cell) - to_chat(user, "You have already inserted a cell!") - return - else - if(!user.unEquip(W, src)) - return - src.cell = W - to_chat(user, "You insert the cell!") - if(isCoil(W)) - if(src.wires) - to_chat(user, "You have already inserted wire!") - return - else - var/obj/item/stack/cable_coil/coil = W - if(coil.use(1)) - src.wires = 1.0 - to_chat(user, "You insert the wire!") - if(istype(W, /obj/item/robot_parts/head)) - var/obj/item/robot_parts/head/head_part = W - // Attempt to create full-body prosthesis. - var/success = TRUE - success &= can_install(user) - success &= head_part.can_install(user) - if (success) - - // Species selection. - var/species = input(user, "Select a species for the prosthetic.") as null|anything in GetCyborgSpecies() - if(!species) - return - var/name = sanitizeSafe(input(user,"Set a name for the new prosthetic."), MAX_NAME_LEN) - if(!name) - SetName("prosthetic ([random_id("prosthetic_id", 1, 999)])") - - // Create a new, nonliving human. - var/mob/living/carbon/human/H = new /mob/living/carbon/human(get_turf(loc)) - H.death(0, "no message") - H.set_species(species) - H.fully_replace_character_name(name) - - // Remove all external organs other than chest and head.. - for (var/O in list(BP_L_ARM, BP_R_ARM, BP_L_LEG, BP_R_LEG)) - var/obj/item/organ/external/organ = H.organs_by_name[O] - H.organs -= organ - H.organs_by_name[organ.organ_tag] = null - qdel(organ) - - // Remove brain (we want to put one in). - var/obj/item/organ/internal/brain = H.internal_organs_by_name[BP_BRAIN] - H.organs -= brain - H.organs_by_name[brain.organ_tag] = null - qdel(brain) - - // Robotize remaining organs: Eyes, head, and chest. - // Respect brand used. - var/obj/item/organ/internal/eyes = H.internal_organs_by_name[BP_EYES] - eyes.robotize() - - var/obj/item/organ/external/head = H.organs_by_name[BP_HEAD] - var/head_company = head_part.model_info - head.robotize(head_company) - - var/obj/item/organ/external/chest = H.organs_by_name[BP_CHEST] - var/chest_company = model_info - chest.robotize(chest_company) - - // Cleanup - qdel(W) - qdel(src) - -/obj/item/robot_parts/chest/proc/GetCyborgSpecies() - . = list() - for(var/N in playable_species) - var/datum/species/S = all_species[N] - if(S.spawn_flags & SPECIES_NO_FBP_CONSTRUCTION) - continue - . += N - -/obj/item/robot_parts/head/attackby(obj/item/W as obj, mob/user as mob) - ..() - if(istype(W, /obj/item/device/flash)) - if(istype(user,/mob/living/silicon/robot)) - var/current_module = user.get_active_hand() - if(current_module == W) - to_chat(user, "How do you propose to do that?") - return - else - add_flashes(W,user) - else - add_flashes(W,user) - -/obj/item/robot_parts/head/proc/add_flashes(obj/item/W as obj, mob/user as mob) //Made into a seperate proc to avoid copypasta - if(src.flash1 && src.flash2) - to_chat(user, "You have already inserted the eyes!") - return - else if(src.flash1) - if(!user.unEquip(W, src)) - return - src.flash2 = W - to_chat(user, "You insert the flash into the eye socket!") - else - if(!user.unEquip(W, src)) - return - src.flash1 = W - to_chat(user, "You insert the flash into the eye socket!") - - -/obj/item/robot_parts/emag_act(var/remaining_charges, var/mob/user) - if(sabotaged) - to_chat(user, "[src] is already sabotaged!") - else - to_chat(user, "You short out the safeties.") - sabotaged = 1 - return 1 diff --git a/code/game/objects/items/robot/robot_upgrades.dm b/code/game/objects/items/robot/robot_upgrades.dm deleted file mode 100644 index 1d6f79f61f417..0000000000000 --- a/code/game/objects/items/robot/robot_upgrades.dm +++ /dev/null @@ -1,231 +0,0 @@ -// robot_upgrades.dm -// Contains various borg upgrades. - -/obj/item/borg/upgrade - name = "robot upgrade module" - desc = "Protected by FRM." - icon = 'icons/obj/module.dmi' - icon_state = "cyborg_upgrade" - var/locked = 0 - var/require_module = 0 - var/installed = 0 - -/obj/item/borg/upgrade/proc/action(var/mob/living/silicon/robot/R) - if(R.stat == DEAD) - to_chat(usr, "The [src] will not function on a deceased robot.") - return 1 - return 0 - - -/obj/item/borg/upgrade/reset - name = "robotic module reset board" - desc = "Used to reset a cyborg's module. Destroys any other upgrades applied to the robot." - icon_state = "cyborg_upgrade1" - require_module = 1 - -/obj/item/borg/upgrade/reset/action(var/mob/living/silicon/robot/R) - if((. = ..())) return 0 - - R.reset_module() - return 1 - -/obj/item/borg/upgrade/uncertified - name = "uncertified robotic module" - desc = "You shouldn't be seeing this!" - icon_state = "cyborg_upgrade5" - require_module = 0 - var/new_module = null - -/obj/item/borg/upgrade/uncertified/action(var/mob/living/silicon/robot/R) - if((. = ..())) return 0 - if(!new_module) - to_chat(usr, "[R]'s error lights strobe repeatedly - something seems to be wrong with the chip.") - return 0 - - // Suppress the alert so the AI doesn't see a reset message. - R.reset_module(TRUE) - R.pick_module(new_module) - return 1 - -/obj/item/borg/upgrade/uncertified/party - name = "\improper Madhouse Productions Official Party Module" - desc = "A weird-looking chip with third-party additions crudely soldered in. It feels cheap and chintzy in the hand. Inscribed into the cheap-feeling circuit is the logo of Madhouse Productions, a group that arranges parties and entertainment venues." - new_module = "Party" - -/obj/item/borg/upgrade/uncertified/combat - name = "ancient module" - desc = "A well-made but somewhat archaic looking bit of circuitry. The chip is stamped with an insignia: a gun protruding from a stylized fist." - new_module = "Combat" - -/obj/item/borg/upgrade/rename - name = "robot reclassification board" - desc = "Used to rename a cyborg." - icon_state = "cyborg_upgrade1" - var/heldname = "default name" - -/obj/item/borg/upgrade/rename/attack_self(mob/user as mob) - heldname = sanitizeSafe(input(user, "Enter new robot name", "Robot Reclassification", heldname), MAX_NAME_LEN) - -/obj/item/borg/upgrade/rename/action(var/mob/living/silicon/robot/R) - if(..()) return 0 - R.notify_ai(ROBOT_NOTIFICATION_NEW_NAME, R.name, heldname) - R.SetName(heldname) - R.custom_name = heldname - R.real_name = heldname - - return 1 - -/obj/item/borg/upgrade/floodlight - name = "robot floodlight module" - desc = "Used to boost cyborg's light intensity." - icon_state = "cyborg_upgrade1" - -/obj/item/borg/upgrade/floodlight/action(var/mob/living/silicon/robot/R) - if(..()) return 0 - - if(R.intenselight) - to_chat(usr, "This cyborg's light was already upgraded") - return 0 - else - R.intenselight = TRUE - R.update_robot_light() - to_chat(R, "Lighting systems upgrade detected.") - return 1 - -/obj/item/borg/upgrade/restart - name = "robot emergency restart module" - desc = "Used to force a restart of a disabled-but-repaired robot, bringing it back online." - icon_state = "cyborg_upgrade1" - - -/obj/item/borg/upgrade/restart/action(var/mob/living/silicon/robot/R) - if(R.health < 0) - to_chat(usr, "You have to repair the robot before using this module!") - return 0 - - if(!R.key) - for(var/mob/observer/ghost/ghost in GLOB.player_list) - if(ghost.mind && ghost.mind.current == R) - R.key = ghost.key - - R.set_stat(CONSCIOUS) - R.switch_from_dead_to_living_mob_list() - R.notify_ai(ROBOT_NOTIFICATION_NEW_UNIT) - return 1 - - -/obj/item/borg/upgrade/vtec - name = "robotic VTEC Module" - desc = "Used to kick in a robot's VTEC systems, increasing their speed." - icon_state = "cyborg_upgrade2" - require_module = 1 - -/obj/item/borg/upgrade/vtec/action(var/mob/living/silicon/robot/R) - if(..()) return FALSE - - if(R.vtec) - return FALSE - - R.vtec = TRUE - return TRUE - - -/obj/item/borg/upgrade/weaponcooler - name = "robotic Rapid Weapon Cooling Module" - desc = "Used to cool a mounted energy gun, increasing the potential current in it and thus its recharge rate." - icon_state = "cyborg_upgrade3" - require_module = 1 - - -/obj/item/borg/upgrade/weaponcooler/action(var/mob/living/silicon/robot/R) - if(..()) return 0 - - if(!R.module || !(type in R.module.supported_upgrades)) - to_chat(R, "Upgrade mounting error! No suitable hardpoint detected!") - to_chat(usr, "There's no mounting point for the module!") - return 0 - - var/obj/item/gun/energy/gun/secure/mounted/T = locate() in R.module - if(!T) - T = locate() in R.module.equipment - if(!T) - to_chat(usr, "This robot has had its energy gun removed!") - return 0 - - if(T.recharge_time <= 2) - to_chat(R, "Maximum cooling achieved for this hardpoint!") - to_chat(usr, "There's no room for another cooling unit!") - return 0 - - else - T.recharge_time = max(2 , T.recharge_time - 4) - - return 1 - -/obj/item/borg/upgrade/jetpack - name = "mining robot jetpack" - desc = "A carbon dioxide jetpack suitable for low-gravity mining operations." - icon_state = "cyborg_upgrade3" - require_module = 1 - -/obj/item/borg/upgrade/jetpack/action(var/mob/living/silicon/robot/R) - if(..()) return 0 - - if(!R.module || !(type in R.module.supported_upgrades)) - to_chat(R, "Upgrade mounting error! No suitable hardpoint detected!") - to_chat(usr, "There's no mounting point for the module!") - return 0 - else - R.module.equipment += new/obj/item/tank/jetpack/carbondioxide - for(var/obj/item/tank/jetpack/carbondioxide in R.module.equipment) - R.internals = src - //R.icon_state="Miner+j" - return 1 - -/obj/item/borg/upgrade/rcd - name = "engineering robot RCD" - desc = "A rapid construction device module for use during construction operations." - icon_state = "cyborg_upgrade3" - require_module = 1 - -/obj/item/borg/upgrade/rcd/action(var/mob/living/silicon/robot/R) - if(..()) return 0 - - if(!R.module || !(type in R.module.supported_upgrades)) - to_chat(R, "Upgrade mounting error! No suitable hardpoint detected!") - to_chat(usr, "There's no mounting point for the module!") - return 0 - else - R.module.equipment += new/obj/item/rcd/borg(R.module) - return 1 - -/obj/item/borg/upgrade/syndicate - name = "illegal equipment module" - desc = "Unlocks the hidden, deadlier functions of a robot." - icon_state = "cyborg_upgrade3" - require_module = 1 - -/obj/item/borg/upgrade/syndicate/action(var/mob/living/silicon/robot/R) - if(..()) return 0 - - if(R.emagged) - return 0 - - R.emagged = TRUE - return 1 - -/obj/item/borg/upgrade/flash_protection - name = "optical matrix shielding" - desc = "Provides shielding for the optical matrix, rendering the robot immune to flashes." - -/obj/item/borg/upgrade/flash_protection/action(mob/living/silicon/robot/R) - if (..()) - return FALSE - - if (R.flash_protected) - to_chat(usr, SPAN_WARNING("\The [R]'s optical matrix is already shielded.")) - return FALSE - - R.status_flags &= ~CANWEAKEN - R.flash_protected = TRUE - return TRUE diff --git a/code/game/objects/items/spirit_board.dm b/code/game/objects/items/spirit_board.dm deleted file mode 100644 index 4a454efc7d188..0000000000000 --- a/code/game/objects/items/spirit_board.dm +++ /dev/null @@ -1,75 +0,0 @@ -/obj/item/spirit_board - name = "spirit board" - desc = "A wooden board with letters etched into it, used in seances." - icon = 'icons/obj/objects.dmi' - icon_state = "spirit_board" - density = TRUE - var/next_use = 0 - var/planchette = "A" - var/lastuser = null - -/obj/item/spirit_board/examine(mob/user) - . = ..() - to_chat(user, "The planchette is sitting at \"[planchette]\".") - -/obj/item/spirit_board/attack_hand(mob/user) - if (user.a_intent == I_GRAB) - return ..() - else - spirit_board_pick_letter(user) - - -//ATTACK GHOST IGNORING PARENT RETURN VALUE -/obj/item/spirit_board/attack_ghost(var/mob/observer/ghost/user) - if(GLOB.cult.max_cult_rating >= CULT_GHOSTS_2) - spirit_board_pick_letter(user) - return ..() - -/obj/item/spirit_board/proc/spirit_board_pick_letter(mob/M) - if(!spirit_board_checks(M)) - return 0 - planchette = input("Choose the letter.", "Seance!") as null|anything in 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", - "1", "2", "3", "4", "5", "6", "7", "8", "9", "0", - "YES", "NO", "GOODBYE") - if(!planchette || !spirit_board_checks(M)) - return next_use = world.time + rand(30,50) - lastuser = M.ckey - //blind message is the same because not everyone brings night vision to seances - visible_message(SPAN_NOTICE("The planchette slowly moves... and stops at the letter \"[planchette]\".")) - -/obj/item/spirit_board/proc/spirit_board_checks(mob/M) - //cooldown - if(!Adjacent(M)) - return 0 - var/bonus = 0 - if(M.ckey == lastuser) - bonus = 10 //Give some other people a chance, hog. - - if(next_use + bonus > world.time ) - return 0 //No feedback here, hiding the cooldown a little makes it harder to tell who's really picking letters. - - //lighting check - var/light_amount = 0 - var/turf/T = get_turf(src) - light_amount = T.get_lumcount() - - - if(light_amount > 0.2) - to_chat(M, SPAN_WARNING("It's too bright here to use \the [src.name]!")) - return 0 - - //mobs in range check - var/users_in_range = 0 - for(var/mob/living/L in orange(1,src)) - if(L.ckey && L.client) - if(L.client.is_afk(300) || L.incapacitated())//no playing with braindeads or corpses or handcuffed dudes. - to_chat(M, SPAN_WARNING("[L] doesn't seem to be paying attention...")) - else - users_in_range++ - - if(users_in_range < 2) - to_chat(M, SPAN_WARNING("There aren't enough people to use \the [src.name]!")) - return 0 - - return 1 diff --git a/code/game/objects/items/stacks/matter_synth.dm b/code/game/objects/items/stacks/matter_synth.dm deleted file mode 100644 index 798c2aa3c746e..0000000000000 --- a/code/game/objects/items/stacks/matter_synth.dm +++ /dev/null @@ -1,66 +0,0 @@ -/datum/matter_synth - var/name = "Generic Synthesizer" - var/max_energy = 60000 - var/recharge_rate = 2000 - var/max_energy_multiplied = 60000 - var/multiplier = 1 // Robot may be upgraded with better matter bin to multiply capacity of it's synthetisers - var/energy - -/datum/matter_synth/New(var/store = 0) - if(store) - max_energy = store - energy = max_energy_multiplied - set_multiplier(1) - return - -/datum/matter_synth/proc/get_charge() - return energy - -/datum/matter_synth/proc/use_charge(var/amount) - if (energy >= amount) - energy -= amount - return 1 - return 0 - -/datum/matter_synth/proc/add_charge(var/amount) - energy = min(energy + amount, max_energy_multiplied) - -/datum/matter_synth/proc/emp_act(var/severity) - use_charge(max_energy_multiplied * 0.1 / severity) - -/datum/matter_synth/proc/set_multiplier(var/new_multiplier) - multiplier = new_multiplier - max_energy_multiplied = max_energy * multiplier - energy = min(max_energy_multiplied, energy) - -/datum/matter_synth/medicine - name = "Medicine Synthesizer" - -/datum/matter_synth/nanite - name = "Nanite Synthesizer" - -/datum/matter_synth/metal - name = "Metal Synthesizer" - -/datum/matter_synth/plasteel - name = "Plasteel Synthesizer" - max_energy = 10000 - -/datum/matter_synth/glass - name = "Glass Synthesizer" - -/datum/matter_synth/wood - name = "Wood Synthesizer" - -/datum/matter_synth/plastic - name = "Plastic Synthesizer" - -/datum/matter_synth/wire - name = "Wire Synthesizer" - max_energy = 50 - recharge_rate = 2 - -/datum/matter_synth/package_wrap - name = "Package Wrapper Synthesizer" - max_energy = 50 - recharge_rate = 2 \ No newline at end of file diff --git a/code/game/objects/items/stacks/medical.dm b/code/game/objects/items/stacks/medical.dm deleted file mode 100644 index 2600f09c703d9..0000000000000 --- a/code/game/objects/items/stacks/medical.dm +++ /dev/null @@ -1,363 +0,0 @@ -/obj/item/stack/medical - name = "medical pack" - singular_name = "medical pack" - icon = 'icons/obj/medical_kits.dmi' - amount = 5 - max_amount = 5 - w_class = ITEM_SIZE_SMALL - throw_speed = 4 - throw_range = 20 - - var/heal_brute = 0 - var/heal_burn = 0 - var/animal_heal = 3 - var/apply_sounds - -/obj/item/stack/medical/proc/check_limb_state(var/mob/user, var/obj/item/organ/external/limb) - . = FALSE - if(BP_IS_CRYSTAL(limb)) - to_chat(user, SPAN_WARNING("You cannot use \the [src] to treat a crystalline limb.")) - else if(BP_IS_ROBOTIC(limb)) - to_chat(user, SPAN_WARNING("You cannot use \the [src] to treat a robotic limb.")) - else - . = TRUE - -/obj/item/stack/medical/attack(var/mob/living/carbon/M, var/mob/user) - - if (!istype(M)) - to_chat(user, SPAN_WARNING("\The [src] cannot be applied to [M]!")) - return 1 - - if ( ! (istype(user, /mob/living/carbon/human) || \ - istype(user, /mob/living/silicon)) ) - to_chat(user, SPAN_WARNING("You don't have the dexterity to do this!")) - return 1 - - if (istype(M, /mob/living/carbon/human)) - var/mob/living/carbon/human/H = M - var/obj/item/organ/external/affecting = H.get_organ(user.zone_sel.selecting) - - if(!affecting) - to_chat(user, SPAN_WARNING("\The [M] is missing that body part!")) - return 1 - - if(!check_limb_state(user, affecting)) - return 1 - - if(affecting.organ_tag == BP_HEAD) - if(H.head && istype(H.head,/obj/item/clothing/head/helmet/space)) - to_chat(user, SPAN_WARNING("You can't apply [src] through [H.head]!")) - return 1 - else - if(H.wear_suit && istype(H.wear_suit,/obj/item/clothing/suit/space)) - to_chat(user, SPAN_WARNING("You can't apply [src] through [H.wear_suit]!")) - return 1 - - H.UpdateDamageIcon() - - else - - M.heal_organ_damage((src.heal_brute/2), (src.heal_burn/2)) - user.visible_message( \ - SPAN_NOTICE("[M] has been applied with [src] by [user]."), \ - SPAN_NOTICE("You apply \the [src] to [M].") \ - ) - use(1) - - M.updatehealth() -/obj/item/stack/medical/bruise_pack - name = "roll of gauze" - singular_name = "gauze length" - desc = "Some sterile gauze to wrap around bloody stumps." - icon_state = "brutepack" - origin_tech = list(TECH_BIO = 1) - animal_heal = 5 - apply_sounds = list('sound/effects/rip1.ogg','sound/effects/rip2.ogg') - amount = 10 - -/obj/item/stack/medical/bruise_pack/attack(var/mob/living/carbon/M, var/mob/user) - if(..()) - return 1 - - if (istype(M, /mob/living/carbon/human)) - var/mob/living/carbon/human/H = M - var/obj/item/organ/external/affecting = H.get_organ(user.zone_sel.selecting) //nullchecked by ..() - - if(affecting.is_bandaged()) - to_chat(user, SPAN_WARNING("The wounds on [M]'s [affecting.name] have already been bandaged.")) - return 1 - else - user.visible_message(SPAN_NOTICE("\The [user] starts treating [M]'s [affecting.name]."), \ - SPAN_NOTICE("You start treating [M]'s [affecting.name].")) - var/used = 0 - for (var/datum/wound/W in affecting.wounds) - if(W.bandaged) - continue - if(used == amount) - break - if(!do_after(user, W.damage / 5, M, DO_MEDICAL)) - break - - if (W.current_stage <= W.max_bleeding_stage) - user.visible_message(SPAN_NOTICE("\The [user] bandages \a [W.desc] on [M]'s [affecting.name]."), \ - SPAN_NOTICE("You bandage \a [W.desc] on [M]'s [affecting.name].")) - //H.add_side_effect("Itch") - else if (W.damage_type == INJURY_TYPE_BRUISE) - user.visible_message(SPAN_NOTICE("\The [user] places a bruise patch over \a [W.desc] on [M]'s [affecting.name]."), \ - SPAN_NOTICE("You place a bruise patch over \a [W.desc] on [M]'s [affecting.name].") ) - else - user.visible_message(SPAN_NOTICE("\The [user] places a bandaid over \a [W.desc] on [M]'s [affecting.name]."), \ - SPAN_NOTICE("You place a bandaid over \a [W.desc] on [M]'s [affecting.name].") ) - W.bandage() - if (M.stat == UNCONSCIOUS && prob(25)) - to_chat(M, SPAN_NOTICE(SPAN_BOLD("... [pick("feels a little better", "hurts a little less")] ..."))) - playsound(src, pick(apply_sounds), 25) - used++ - affecting.update_damages() - if(used == amount) - if(affecting.is_bandaged()) - to_chat(user, SPAN_WARNING("\The [src] is used up.")) - else - to_chat(user, SPAN_WARNING("\The [src] is used up, but there are more wounds to treat on \the [affecting.name].")) - use(used) - H.update_bandages(1) - -/obj/item/stack/medical/ointment - name = "ointment" - desc = "Used to treat those nasty burns." - gender = PLURAL - singular_name = "ointment" - icon_state = "ointment" - heal_burn = 1 - origin_tech = list(TECH_BIO = 1) - animal_heal = 4 - apply_sounds = list('sound/effects/ointment.ogg') - -/obj/item/stack/medical/ointment/attack(var/mob/living/carbon/M, var/mob/user) - if(..()) - return 1 - - if (istype(M, /mob/living/carbon/human)) - var/mob/living/carbon/human/H = M - var/obj/item/organ/external/affecting = H.get_organ(user.zone_sel.selecting) //nullchecked by ..() - - if(affecting.is_salved()) - to_chat(user, SPAN_WARNING("The wounds on [M]'s [affecting.name] have already been salved.")) - return 1 - else - user.visible_message(SPAN_NOTICE("\The [user] starts salving wounds on [M]'s [affecting.name]."), \ - SPAN_NOTICE("You start salving the wounds on [M]'s [affecting.name].") ) - playsound(src, pick(apply_sounds), 25) - if(!do_after(user, 1 SECOND, M, DO_MEDICAL)) - return 1 - user.visible_message(SPAN_NOTICE("[user] salved wounds on [M]'s [affecting.name]."), \ - SPAN_NOTICE("You salved wounds on [M]'s [affecting.name].") ) - use(1) - affecting.salve() - affecting.disinfect() - -/obj/item/stack/medical/advanced/bruise_pack - name = "advanced trauma kit" - singular_name = "advanced trauma kit" - desc = "A packet filled antibacterial bio-adhesive, used to quickly seal and disinfect cuts, bruises, and other physical trauma. Can be used to treat both limbs and internal organs." - icon_state = "traumakit" - heal_brute = 0 - origin_tech = list(TECH_BIO = 1) - animal_heal = 12 - apply_sounds = list('sound/effects/rip1.ogg','sound/effects/rip2.ogg','sound/effects/tape.ogg') - amount = 10 - -/obj/item/stack/medical/advanced/bruise_pack/attack(var/mob/living/carbon/M, var/mob/user) - if(..()) - return 1 - - if (istype(M, /mob/living/carbon/human)) - var/mob/living/carbon/human/H = M - var/obj/item/organ/external/affecting = H.get_organ(user.zone_sel.selecting) //nullchecked by ..() - if(affecting.is_bandaged() && affecting.is_disinfected()) - to_chat(user, SPAN_WARNING("The wounds on [M]'s [affecting.name] have already been treated.")) - return 1 - else - user.visible_message(SPAN_NOTICE("\The [user] starts treating [M]'s [affecting.name]."), \ - SPAN_NOTICE("You start treating [M]'s [affecting.name].") ) - var/used = 0 - for (var/datum/wound/W in affecting.wounds) - if (W.bandaged && W.disinfected) - continue - if(used == amount) - break - if(!do_after(user, W.damage / 5, M, DO_MEDICAL)) - break - if (W.current_stage <= W.max_bleeding_stage) - user.visible_message(SPAN_NOTICE("\The [user] cleans \a [W.desc] on [M]'s [affecting.name] and seals the edges with bioglue."), \ - SPAN_NOTICE("You clean and seal \a [W.desc] on [M]'s [affecting.name].") ) - else if (W.damage_type == INJURY_TYPE_BRUISE) - user.visible_message(SPAN_NOTICE("\The [user] places a medical patch over \a [W.desc] on [M]'s [affecting.name]."), \ - SPAN_NOTICE("You place a medical patch over \a [W.desc] on [M]'s [affecting.name].") ) - else - user.visible_message(SPAN_NOTICE("\The [user] smears some bioglue over \a [W.desc] on [M]'s [affecting.name]."), \ - SPAN_NOTICE("You smear some bioglue over \a [W.desc] on [M]'s [affecting.name].") ) - playsound(src, pick(apply_sounds), 25) - W.bandage() - W.disinfect() - W.heal_damage(heal_brute) - used++ - if (M.stat == UNCONSCIOUS && prob(25)) - to_chat(M, SPAN_NOTICE(SPAN_BOLD("... [pick("feels better", "hurts less")] ..."))) - affecting.update_damages() - if(used == amount) - if(affecting.is_bandaged()) - to_chat(user, SPAN_WARNING("\The [src] is used up.")) - else - to_chat(user, SPAN_WARNING("\The [src] is used up, but there are more wounds to treat on \the [affecting.name].")) - use(used) - H.update_bandages(1) - -/obj/item/stack/medical/advanced/ointment - name = "advanced burn kit" - singular_name = "advanced burn kit" - desc = "A packet containing a delicate membrane used to salve and disinfect burn wounds. Can be used to treat both limbs and internal organs." - icon_state = "burnkit" - heal_burn = 5 - origin_tech = list(TECH_BIO = 1) - animal_heal = 7 - apply_sounds = list('sound/effects/ointment.ogg') - - -/obj/item/stack/medical/advanced/ointment/attack(var/mob/living/carbon/M, var/mob/user) - if(..()) - return 1 - - if (istype(M, /mob/living/carbon/human)) - var/mob/living/carbon/human/H = M - var/obj/item/organ/external/affecting = H.get_organ(user.zone_sel.selecting) //nullchecked by ..() - - if(affecting.is_salved()) - to_chat(user, SPAN_WARNING("The wounds on [M]'s [affecting.name] have already been salved.")) - return 1 - else - user.visible_message(SPAN_NOTICE("\The [user] starts salving wounds on [M]'s [affecting.name]."), \ - SPAN_NOTICE("You start salving the wounds on [M]'s [affecting.name].") ) - playsound(src, pick(apply_sounds), 25) - if(!do_after(user, 1 SECOND, M, DO_MEDICAL)) - return 1 - user.visible_message( SPAN_NOTICE("[user] covers wounds on [M]'s [affecting.name] with regenerative membrane."), \ - SPAN_NOTICE("You cover wounds on [M]'s [affecting.name] with regenerative membrane.") ) - affecting.heal_damage(0,heal_burn) - use(1) - affecting.salve() - affecting.disinfect() - if (M.stat == UNCONSCIOUS && prob(25)) - to_chat(M, SPAN_NOTICE(SPAN_BOLD("... [pick("feels better", "hurts less")] ..."))) - -/obj/item/stack/medical/splint - name = "medical splints" - singular_name = "medical splint" - desc = "Modular splints capable of supporting and immobilizing bones in both limbs and appendages." - icon_state = "splint" - amount = 5 - max_amount = 5 - animal_heal = 0 - var/list/splintable_organs = list(BP_L_ARM, BP_R_ARM, BP_L_LEG, BP_R_LEG, BP_L_HAND, BP_R_HAND, BP_L_FOOT, BP_R_FOOT) //List of organs you can splint, natch. - -/obj/item/stack/medical/splint/check_limb_state(var/mob/user, var/obj/item/organ/external/limb) - if(BP_IS_ROBOTIC(limb)) - to_chat(user, SPAN_WARNING("You cannot use \the [src] to treat a robotic limb.")) - return FALSE - return TRUE - -/obj/item/stack/medical/splint/attack(var/mob/living/carbon/M, var/mob/user) - if(..()) - return 1 - - if (istype(M, /mob/living/carbon/human)) - var/mob/living/carbon/human/H = M - var/obj/item/organ/external/affecting = H.get_organ(user.zone_sel.selecting) //nullchecked by ..() - var/limb = affecting.name - if(!(affecting.organ_tag in splintable_organs)) - to_chat(user, SPAN_DANGER("You can't use \the [src] to apply a splint there!")) - return - if(affecting.splinted) - to_chat(user, SPAN_DANGER("[M]'s [limb] is already splinted!")) - return - if (M != user) - user.visible_message(SPAN_DANGER("[user] starts to apply \the [src] to [M]'s [limb]."), SPAN_DANGER("You start to apply \the [src] to [M]'s [limb]."), SPAN_DANGER("You hear something being wrapped.")) - else - if(( !user.hand && (affecting.organ_tag in list(BP_R_ARM, BP_R_HAND)) || \ - user.hand && (affecting.organ_tag in list(BP_L_ARM, BP_L_HAND)) )) - to_chat(user, SPAN_DANGER("You can't apply a splint to the arm you're using!")) - return - user.visible_message(SPAN_DANGER("[user] starts to apply \the [src] to their [limb]."), SPAN_DANGER("You start to apply \the [src] to your [limb]."), SPAN_DANGER("You hear something being wrapped.")) - if(user.do_skilled(5 SECONDS, SKILL_MEDICAL, M, do_flags = DO_MEDICAL)) - if((M == user && prob(75)) || prob(user.skill_fail_chance(SKILL_MEDICAL,50, SKILL_ADEPT))) - user.visible_message(SPAN_DANGER("\The [user] fumbles [src]."), SPAN_DANGER("You fumble [src]."), SPAN_DANGER("You hear something being wrapped.")) - return - var/obj/item/stack/medical/splint/S = split(1, TRUE) - if(S) - if(affecting.apply_splint(S)) - M.verbs += /mob/living/carbon/human/proc/remove_splints - S.forceMove(affecting) - if (M != user) - user.visible_message(SPAN_DANGER("\The [user] finishes applying [src] to [M]'s [limb]."), SPAN_DANGER("You finish applying \the [src] to [M]'s [limb]."), SPAN_DANGER("You hear something being wrapped.")) - else - user.visible_message(SPAN_DANGER("\The [user] successfully applies [src] to their [limb]."), SPAN_DANGER("You successfully apply \the [src] to your [limb]."), SPAN_DANGER("You hear something being wrapped.")) - return - S.dropInto(src.loc) //didn't get applied, so just drop it - user.visible_message(SPAN_DANGER("\The [user] fails to apply [src]."), SPAN_DANGER("You fail to apply [src]."), SPAN_DANGER("You hear something being wrapped.")) - return - -/obj/item/stack/medical/splint/ghetto - name = "makeshift splints" - singular_name = "makeshift splint" - desc = "For holding your limbs in place with duct tape and scrap metal." - icon_state = "tape-splint" - amount = 1 - splintable_organs = list(BP_L_ARM, BP_R_ARM, BP_L_LEG, BP_R_LEG) - -// For adherent. -/obj/item/stack/medical/resin - name = "resin patches" - singular_name = "resin patch" - desc = "A resin-based patching kit used to repair crystalline bodyparts. The label is written in a colourful, angular, unreadable script." - icon_state = "resin-pack" - heal_brute = 10 - heal_burn = 10 - -/obj/item/stack/medical/resin/drone - amount = 25 - max_amount = 25 - -/obj/item/stack/medical/resin/handmade - name = "resin globules" - desc = "A lump of slick, shiny resin. Used to repair damage to crystalline bodyparts." - singular_name = "resin globule" - icon_state = "resin-lump" - heal_brute = 5 - heal_burn = 5 - -/obj/item/stack/medical/resin/check_limb_state(var/mob/user, var/obj/item/organ/external/limb) - if(!BP_IS_ROBOTIC(limb) && !BP_IS_CRYSTAL(limb)) - to_chat(user, SPAN_WARNING("You cannot use \the [src] to treat an organic limb.")) - return FALSE - return TRUE - -/obj/item/stack/medical/resin/attack(var/mob/living/carbon/M, var/mob/user) - . = ..() - if(!. && ishuman(M)) - var/mob/living/carbon/human/H = M - var/obj/item/organ/external/affecting = H.get_organ(user.zone_sel.selecting) - if((affecting.brute_dam + affecting.burn_dam) <= 0) - to_chat(user, SPAN_WARNING("\The [M]'s [affecting.name] is undamaged.")) - return 1 - user.visible_message( - SPAN_NOTICE("\The [user] starts patching fractures on \the [M]'s [affecting.name]."), \ - SPAN_NOTICE("You start patching fractures on \the [M]'s [affecting.name].") ) - playsound(src, pick(apply_sounds), 25) - if(!do_after(user, 1 SECOND, M, DO_MEDICAL)) - to_chat(user, SPAN_NOTICE("You must stand still to patch fractures.")) - return 1 - user.visible_message( \ - SPAN_NOTICE("\The [user] patches the fractures on \the [M]'s [affecting.name] with resin."), \ - SPAN_NOTICE("You patch fractures on \the [M]'s [affecting.name] with resin.")) - affecting.heal_damage(heal_brute, heal_burn, robo_repair = TRUE) - use(1) diff --git a/code/game/objects/items/stacks/nanopaste.dm b/code/game/objects/items/stacks/nanopaste.dm deleted file mode 100644 index 84f8c3dc42260..0000000000000 --- a/code/game/objects/items/stacks/nanopaste.dm +++ /dev/null @@ -1,48 +0,0 @@ -/obj/item/stack/nanopaste - name = "nanopaste" - singular_name = "nanite swarm" - desc = "A tube of paste containing swarms of repair nanites. Very effective in repairing robotic machinery." - icon = 'icons/obj/nanopaste.dmi' - icon_state = "tube" - origin_tech = list(TECH_MATERIAL = 4, TECH_ENGINEERING = 3) - amount = 10 - - -/obj/item/stack/nanopaste/attack(mob/living/M as mob, mob/user as mob) - if (!istype(M) || !istype(user)) - return 0 - if (istype(M,/mob/living/silicon/robot)) //Repairing cyborgs - var/mob/living/silicon/robot/R = M - if (R.getBruteLoss() || R.getFireLoss() ) - user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN) - R.adjustBruteLoss(-15) - R.adjustFireLoss(-15) - R.updatehealth() - use(1) - user.visible_message("\The [user] applied some [src] on [R]'s damaged areas.",\ - "You apply some [src] at [R]'s damaged areas.") - else - to_chat(user, "All [R]'s systems are nominal.") - - if (istype(M,/mob/living/carbon/human)) //Repairing robolimbs - var/mob/living/carbon/human/H = M - var/obj/item/organ/external/S = H.get_organ(user.zone_sel.selecting) - - if(!S) - to_chat(user, "\The [M] is missing that body part.") - return - - if(BP_IS_BRITTLE(S)) - to_chat(user, "\The [M]'s [S.name] is hard and brittle - \the [src] cannot repair it.") - return - - if(S && BP_IS_ROBOTIC(S) && S.hatch_state == HATCH_OPENED) - if(!S.get_damage()) - to_chat(user, "Nothing to fix here.") - else if(can_use(1)) - user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN) - S.heal_damage(15, 15, robo_repair = 1) - H.updatehealth() - use(1) - user.visible_message("\The [user] applies some nanite paste on [user != M ? "[M]'s [S.name]" : "[S]"] with [src].",\ - "You apply some nanite paste on [user == M ? "your" : "[M]'s"] [S.name].") diff --git a/code/game/objects/items/stacks/rods.dm b/code/game/objects/items/stacks/rods.dm deleted file mode 100644 index 469f314230601..0000000000000 --- a/code/game/objects/items/stacks/rods.dm +++ /dev/null @@ -1,81 +0,0 @@ -/obj/item/stack/material/rods - name = "rod" - desc = "Some rods. Can be used for building, or something." - singular_name = "rod" - plural_name = "rods" - icon_state = "rod" - plural_icon_state = "rod-mult" - max_icon_state = "rod-max" - w_class = ITEM_SIZE_LARGE - attack_cooldown = 21 - melee_accuracy_bonus = -20 - throw_speed = 5 - throw_range = 20 - max_amount = 100 - base_parry_chance = 15 - attack_verb = list("hit", "bludgeoned", "whacked") - lock_picking_level = 3 - matter_multiplier = 0.5 - material_flags = USE_MATERIAL_COLOR - stacktype = /obj/item/stack/material/rods - default_type = MATERIAL_STEEL - -/obj/item/stack/material/rods/ten - amount = 10 - -/obj/item/stack/material/rods/fifty - amount = 50 - -/obj/item/stack/material/rods/cyborg - name = "metal rod synthesizer" - desc = "A device that makes metal rods." - gender = NEUTER - matter = null - uses_charge = 1 - charge_costs = list(500) - -/obj/item/stack/material/rods/Initialize() - . = ..() - update_icon() - throwforce = round(0.25*material.get_edge_damage()) - force = round(0.5*material.get_blunt_damage()) - -/obj/item/stack/material/rods/attackby(obj/item/W as obj, mob/user as mob) - if(isWelder(W)) - var/obj/item/weldingtool/WT = W - - if(!can_use(2)) - to_chat(user, "You need at least two rods to do this.") - return - - if(WT.remove_fuel(0,user)) - var/obj/item/stack/material/steel/new_item = new(usr.loc) - new_item.add_to_stacks(usr) - for (var/mob/M in viewers(src)) - M.show_message("[src] is shaped into metal by [user.name] with the weldingtool.", 3, "You hear welding.", 2) - var/obj/item/stack/material/rods/R = src - src = null - var/replace = (user.get_inactive_hand()==R) - R.use(2) - if (!R && replace) - user.put_in_hands(new_item) - return - - if (istype(W, /obj/item/tape_roll)) - var/obj/item/stack/medical/splint/ghetto/new_splint = new(user.loc) - new_splint.dropInto(loc) - new_splint.add_fingerprint(user) - - user.visible_message("\The [user] constructs \a [new_splint] out of a [singular_name].", \ - "You use make \a [new_splint] out of a [singular_name].") - src.use(1) - return - - ..() - -/obj/item/stack/material/rods/attack_self(mob/user as mob) - src.add_fingerprint(user) - - if(!istype(user.loc,/turf)) return 0 - - place_grille(user, user.loc, src) diff --git a/code/game/objects/items/stacks/sheets/leather.dm b/code/game/objects/items/stacks/sheets/leather.dm deleted file mode 100644 index d01f28fb66ede..0000000000000 --- a/code/game/objects/items/stacks/sheets/leather.dm +++ /dev/null @@ -1,112 +0,0 @@ -/obj/item/stack/animalhide/human - name = "human skin" - desc = "The by-product of human farming." - singular_name = "human skin piece" - icon_state = "sheet-hide" - -/obj/item/stack/animalhide/corgi - name = "corgi hide" - desc = "The by-product of corgi farming." - singular_name = "corgi hide piece" - icon_state = "sheet-corgi" - -/obj/item/stack/animalhide/cat - name = "cat hide" - desc = "The by-product of cat farming." - singular_name = "cat hide piece" - icon_state = "sheet-cat" - -/obj/item/stack/animalhide/monkey - name = "monkey hide" - desc = "The by-product of monkey farming." - singular_name = "monkey hide piece" - icon_state = "sheet-monkey" - -/obj/item/stack/animalhide/lizard - name = "lizard skin" - desc = "Sssssss..." - singular_name = "lizard skin piece" - icon_state = "sheet-lizard" - -/obj/item/stack/animalhide/xeno - name = "alien hide" - desc = "The skin of a terrible creature." - singular_name = "alien hide piece" - icon_state = "sheet-xeno" - -//don't see anywhere else to put these, maybe together they could be used to make the xenos suit? -/obj/item/stack/xenochitin - name = "alien chitin" - desc = "A piece of the hide of a terrible creature." - singular_name = "alien hide piece" - icon = 'icons/obj/alien.dmi' - icon_state = "chitin" - -/obj/item/xenos_claw - name = "alien claw" - desc = "The claw of a terrible creature." - icon = 'icons/obj/alien.dmi' - icon_state = "claw" - -/obj/item/weed_extract - name = "weed extract" - desc = "A piece of slimy, purplish weed." - icon = 'icons/obj/alien.dmi' - icon_state = "weed_extract" - -/obj/item/stack/hairlesshide - name = "hairless hide" - desc = "This hide was stripped of it's hair, but still needs tanning." - singular_name = "hairless hide piece" - icon_state = "sheet-hairlesshide" - -/obj/item/stack/wetleather - name = "wet leather" - desc = "This leather has been cleaned but still needs to be dried." - singular_name = "wet leather piece" - icon_state = "sheet-wetleather" - var/wetness = 30 //Reduced when exposed to high temperautres - var/drying_threshold_temperature = 500 //Kelvin to start drying - -//Step one - dehairing. -/obj/item/stack/animalhide/attackby(obj/item/W as obj, mob/user as mob) - if(istype(W, /obj/item/material/knife) || isHatchet(W)) - - //visible message on mobs is defined as visible_message(var/message, var/self_message, var/blind_message) - usr.visible_message("\The [usr] starts cutting hair off \the [src]", "You start cutting the hair off \the [src]", "You hear the sound of a knife rubbing against flesh") - if(do_after(user, 5 SECONDS, src, DO_PUBLIC_UNIQUE)) - to_chat(usr, "You cut the hair from this [src.singular_name]") - //Try locating an exisitng stack on the tile and add to there if possible - for(var/obj/item/stack/hairlesshide/HS in usr.loc) - if(HS.amount < 50) - HS.amount++ - src.use(1) - break - //If it gets to here it means it did not find a suitable stack on the tile. - var/obj/item/stack/hairlesshide/HS = new(usr.loc) - HS.amount = 1 - src.use(1) - else - ..() - - -//Step two - washing..... it's actually in washing machine code. - -//Step three - drying -/obj/item/stack/wetleather/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume) - ..() - if(exposed_temperature >= drying_threshold_temperature) - wetness-- - if(wetness == 0) - //Try locating an exisitng stack on the tile and add to there if possible - for(var/obj/item/stack/material/leather/HS in src.loc) - if(HS.amount < 50) - HS.amount++ - src.use(1) - wetness = initial(wetness) - break - //If it gets to here it means it did not find a suitable stack on the tile. - var/obj/item/stack/material/leather/HS = new(src.loc) - HS.amount = 1 - wetness = initial(wetness) - src.use(1) diff --git a/code/game/objects/items/stacks/stack.dm b/code/game/objects/items/stacks/stack.dm deleted file mode 100644 index bcc95b7e4ab03..0000000000000 --- a/code/game/objects/items/stacks/stack.dm +++ /dev/null @@ -1,406 +0,0 @@ -/* Stack type objects! - * Contains: - * Stacks - * Recipe datum - * Recipe list datum - */ - -/* - * Stacks - */ - -/obj/item/stack - gender = PLURAL - origin_tech = list(TECH_MATERIAL = 1) - var/list/datum/stack_recipe/recipes - var/singular_name - var/plural_name - var/base_state - var/plural_icon_state - var/max_icon_state - var/amount = 1 - var/max_amount //also see stack recipes initialisation, param "max_res_amount" must be equal to this max_amount - var/stacktype //determines whether different stack types can merge - var/build_type = null //used when directly applied to a turf - var/uses_charge = 0 - var/list/charge_costs = null - var/list/datum/matter_synth/synths = null - -/obj/item/stack/New(var/loc, var/amount=null) - if (!stacktype) - stacktype = type - if (amount >= 1) - src.amount = amount - ..() - -/obj/item/stack/Initialize() - . = ..() - if(!plural_name) - plural_name = "[singular_name]s" - - -/obj/item/stack/Destroy() - if(uses_charge) - return 1 - if (src && usr && usr.machine == src) - close_browser(usr, "window=stack") - return ..() - -/obj/item/stack/examine(mob/user, distance) - . = ..() - if(distance <= 1) - if(!uses_charge) - to_chat(user, "There [src.amount == 1 ? "is" : "are"] [src.amount] [src.singular_name]\s in the stack.") - else - to_chat(user, "There is enough charge for [get_amount()].") - -/obj/item/stack/attack_self(mob/user as mob) - list_recipes(user) - -/obj/item/stack/proc/list_recipes(mob/user as mob, recipes_sublist) - if (!recipes) - return - if (!src || get_amount() <= 0) - close_browser(user, "window=stack") - user.set_machine(src) //for correct work of onclose - var/list/recipe_list = recipes - if (recipes_sublist && recipe_list[recipes_sublist] && istype(recipe_list[recipes_sublist], /datum/stack_recipe_list)) - var/datum/stack_recipe_list/srl = recipe_list[recipes_sublist] - recipe_list = srl.recipes - var/t1 = list() - t1 += "Constructions from [src]Amount Left: [src.get_amount()]
              " - for(var/i=1;i<=recipe_list.len,i++) - var/E = recipe_list[i] - if (isnull(E)) - continue - - if (istype(E, /datum/stack_recipe_list)) - t1+="
              " - var/datum/stack_recipe_list/srl = E - t1 += "\[Sub-menu] [srl.title]" - - if (istype(E, /datum/stack_recipe)) - var/datum/stack_recipe/R = E - t1+="
              " - var/max_multiplier = round(src.get_amount() / R.req_amount) - var/title - var/can_build = 1 - can_build = can_build && (max_multiplier>0) - if (R.res_amount>1) - title+= "[R.res_amount]x [R.display_name()]\s" - else - title+= "[R.display_name()]" - title+= " ([R.req_amount] [src.singular_name]\s)" - var/skill_label = "" - if(!user.skill_check(SKILL_CONSTRUCTION, R.difficulty)) - var/decl/hierarchy/skill/S = decls_repository.get_decl(SKILL_CONSTRUCTION) - skill_label = "\[[S.levels[R.difficulty]]]" - if (can_build) - t1 +="[skill_label][title]" - else - t1 += "[skill_label][title]" - if (R.max_res_amount>1 && max_multiplier>1) - max_multiplier = min(max_multiplier, round(R.max_res_amount/R.res_amount)) - t1 += " |" - var/list/multipliers = list(5,10,25) - for (var/n in multipliers) - if (max_multiplier>=n) - t1 += " [n*R.res_amount]x" - if (!(max_multiplier in multipliers)) - t1 += " [max_multiplier*R.res_amount]x" - - t1 += "
              " - show_browser(user, JOINTEXT(t1), "window=stack") - onclose(user, "stack") - -/obj/item/stack/proc/produce_recipe(datum/stack_recipe/recipe, var/quantity, mob/user) - var/required = quantity*recipe.req_amount - var/produced = min(quantity*recipe.res_amount, recipe.max_res_amount) - - var/area/A = get_area(user) - if (!A.can_modify_area()) - visible_message("You can't seem to make anything with \the [src] here.") - return - - if (!can_use(required)) - if (produced>1) - to_chat(user, "You haven't got enough [src] to build \the [produced] [recipe.display_name()]\s!") - else - to_chat(user, "You haven't got enough [src] to build \the [recipe.display_name()]!") - return - - if(!recipe.can_make(user)) - return - - if (recipe.time) - to_chat(user, "Building [recipe.display_name()] ...") - if (!user.do_skilled(recipe.time, SKILL_CONSTRUCTION, src)) - return - - if (use(required)) - if(user.skill_fail_prob(SKILL_CONSTRUCTION, 90, recipe.difficulty)) - to_chat(user, "You waste some [name] and fail to build \the [recipe.display_name()]!") - return - var/atom/O = recipe.spawn_result(user, user.loc, produced) - O.add_fingerprint(user) - - user.put_in_hands(O) - -/obj/item/stack/Topic(href, href_list) - ..() - if ((usr.restrained() || usr.stat || usr.get_active_hand() != src)) - return - - if (href_list["sublist"] && !href_list["make"]) - list_recipes(usr, text2num(href_list["sublist"])) - - if (href_list["make"]) - if (src.get_amount() < 1) qdel(src) //Never should happen - - var/list/recipes_list = recipes - if (href_list["sublist"]) - var/datum/stack_recipe_list/srl = recipes_list[text2num(href_list["sublist"])] - recipes_list = srl.recipes - - var/datum/stack_recipe/R = recipes_list[text2num(href_list["make"])] - var/multiplier = text2num(href_list["multiplier"]) - if (!multiplier || (multiplier <= 0)) //href exploit protection - return - - src.produce_recipe(R, multiplier, usr) - - if (src && usr.machine==src) //do not reopen closed window - spawn( 0 ) - src.interact(usr) - return - return - -//Return 1 if an immediate subsequent call to use() would succeed. -//Ensures that code dealing with stacks uses the same logic -/obj/item/stack/proc/can_use(var/used) - if (get_amount() < used) - return 0 - return 1 - -/obj/item/stack/proc/use(var/used) - if (!can_use(used)) - return 0 - if(!uses_charge) - amount -= used - if (amount <= 0) - qdel(src) //should be safe to qdel immediately since if someone is still using this stack it will persist for a little while longer - else - update_icon() - return 1 - else - if(get_amount() < used) - return 0 - for(var/i = 1 to charge_costs.len) - var/datum/matter_synth/S = synths[i] - S.use_charge(charge_costs[i] * used) // Doesn't need to be deleted - return 1 - -/obj/item/stack/proc/add(var/extra) - if(!uses_charge) - if(amount + extra > get_max_amount()) - return 0 - else - amount += extra - update_icon() - return 1 - else if(!synths || synths.len < uses_charge) - return 0 - else - for(var/i = 1 to uses_charge) - var/datum/matter_synth/S = synths[i] - S.add_charge(charge_costs[i] * extra) - -/* - The transfer and split procs work differently than use() and add(). - Whereas those procs take no action if the desired amount cannot be added or removed these procs will try to transfer whatever they can. - They also remove an equal amount from the source stack. -*/ - -//attempts to transfer amount to S, and returns the amount actually transferred -/obj/item/stack/proc/transfer_to(obj/item/stack/S, var/tamount=null, var/type_verified) - if (!get_amount()) - return 0 - if ((stacktype != S.stacktype) && !type_verified) - return 0 - if (isnull(tamount)) - tamount = src.get_amount() - - var/transfer = max(min(tamount, src.get_amount(), (S.get_max_amount() - S.get_amount())), 0) - - var/orig_amount = src.get_amount() - if (transfer && src.use(transfer)) - S.add(transfer) - if (prob(transfer/orig_amount * 100)) - transfer_fingerprints_to(S) - return transfer - return 0 - -//creates a new stack with the specified amount -/obj/item/stack/proc/split(var/tamount) - if (!amount) - return null - - var/transfer = max(min(tamount, src.amount, initial(max_amount)), 0) - - var/orig_amount = src.amount - if (transfer && src.use(transfer)) - var/obj/item/stack/newstack - if(uses_charge) - newstack = new src.stacktype(loc, transfer) - else - newstack = new src.type(loc, transfer) - newstack.copy_from(src) - if (prob(transfer/orig_amount * 100)) - transfer_fingerprints_to(newstack) - return newstack - return null - -/obj/item/stack/proc/copy_from(var/obj/item/stack/other) - color = other.color - -/obj/item/stack/proc/get_amount() - if(uses_charge) - if(!synths || synths.len < uses_charge) - return 0 - var/datum/matter_synth/S = synths[1] - . = round(S.get_charge() / charge_costs[1]) - if(charge_costs.len > 1) - for(var/i = 2 to charge_costs.len) - S = synths[i] - . = min(., round(S.get_charge() / charge_costs[i])) - return - return amount - -/obj/item/stack/proc/get_max_amount() - if(uses_charge) - if(!synths || synths.len < uses_charge) - return 0 - var/datum/matter_synth/S = synths[1] - . = round(S.max_energy / charge_costs[1]) - if(uses_charge > 1) - for(var/i = 2 to uses_charge) - S = synths[i] - . = min(., round(S.max_energy / charge_costs[i])) - return - return max_amount - -/obj/item/stack/proc/add_to_stacks(mob/user, check_hands) - var/list/stacks = list() - if(check_hands) - if(isstack(user.l_hand)) - stacks += user.l_hand - if(isstack(user.r_hand)) - stacks += user.r_hand - for (var/obj/item/stack/item in user.loc) - stacks += item - for (var/obj/item/stack/item in stacks) - if (item==src) - continue - var/transfer = src.transfer_to(item) - if (transfer) - to_chat(user, "You add a new [item.singular_name] to the stack. It now contains [item.amount] [item.singular_name]\s.") - if(!amount) - break - -/obj/item/stack/get_storage_cost() //Scales storage cost to stack size - . = ..() - if (amount < max_amount) - . = Ceil(. * amount / max_amount) - -/obj/item/stack/attack_hand(mob/user as mob) - if (user.get_inactive_hand() == src) - var/N = input("How many stacks of [src] would you like to split off?", "Split stacks", 1) as num|null - if(N) - var/obj/item/stack/F = src.split(N) - if (F) - user.put_in_hands(F) - src.add_fingerprint(user) - F.add_fingerprint(user) - spawn(0) - if (src && usr.machine==src) - src.interact(usr) - else - ..() - return - -/obj/item/stack/attackby(obj/item/W as obj, mob/user as mob) - if (istype(W, /obj/item/stack)) - var/obj/item/stack/S = W - src.transfer_to(S) - - spawn(0) //give the stacks a chance to delete themselves if necessary - if (S && usr.machine==S) - S.interact(usr) - if (src && usr.machine==src) - src.interact(usr) - else - return ..() - -/* - * Recipe datum - */ -/datum/stack_recipe - var/title = "ERROR" - var/result_type - var/req_amount = 1 //amount of material needed for this recipe - var/res_amount = 1 //amount of stuff that is produced in one batch (e.g. 4 for floor tiles) - var/max_res_amount = 1 - var/time = 0 - var/one_per_turf = 0 - var/on_floor = 0 - var/use_material - var/use_reinf_material - var/difficulty = 1 // higher difficulty requires higher skill level to make. - var/send_material_data = 0 //Whether the recipe will send the material name as an argument when creating product. - var/apply_material_name = 1 //Whether the recipe will prepend a material name to the title - 'steel clipboard' vs 'clipboard' - -/datum/stack_recipe/New(material/material, var/reinforce_material) - if(material) - use_material = material.name - difficulty += material.construction_difficulty - if(reinforce_material) - use_reinf_material = reinforce_material - -/datum/stack_recipe/proc/display_name() - if(!use_material || !apply_material_name) - return title - . = "[material_display_name(use_material)] [title]" - if(use_reinf_material) - . = "[material_display_name(use_reinf_material)]-reinforced [.]" - -/datum/stack_recipe/proc/spawn_result(mob/user, location, amount) - var/atom/O - if(send_material_data && use_material) - O = new result_type(location, use_material, use_reinf_material) - else - O = new result_type(location) - O.set_dir(user.dir) - return O - -/datum/stack_recipe/proc/can_make(mob/user) - if (one_per_turf && (locate(result_type) in user.loc)) - to_chat(user, "There is another [display_name()] here!") - return FALSE - - var/turf/T = get_turf(user.loc) - if (on_floor && !T.is_floor()) - to_chat(user, "\The [display_name()] must be constructed on the floor!") - return FALSE - - return TRUE - -/* - * Recipe list datum - */ -/datum/stack_recipe_list - var/title = "ERROR" - var/list/recipes = null - -/datum/stack_recipe_list/New(title, recipes) - src.title = title - src.recipes = recipes diff --git a/code/game/objects/items/stacks/telecrystal.dm b/code/game/objects/items/stacks/telecrystal.dm deleted file mode 100644 index b84ae6fd480c8..0000000000000 --- a/code/game/objects/items/stacks/telecrystal.dm +++ /dev/null @@ -1,30 +0,0 @@ -/obj/item/stack/telecrystal - name = "telecrystal" - desc = "It seems to be pulsing with suspiciously enticing energies." - singular_name = "telecrystal" - icon = 'icons/obj/telescience.dmi' - icon_state = "telecrystal" - w_class = ITEM_SIZE_TINY - max_amount = 50 - item_flags = ITEM_FLAG_NO_BLUDGEON - origin_tech = list(TECH_MATERIAL = 6, TECH_BLUESPACE = 4) - -/obj/item/stack/telecrystal/afterattack(var/obj/item/I as obj, mob/user as mob, proximity) - if(!proximity) - return - if(istype(I, /obj/item)) - if(I.hidden_uplink && I.hidden_uplink.active) //No metagaming by using this on every PDA around just to see if it gets used up. - I.hidden_uplink.uses += amount - I.hidden_uplink.update_nano_data() - SSnano.update_uis(I.hidden_uplink) - use(amount) - to_chat(user, "You slot \the [src] into \the [I] and charge its internal uplink.") - -/obj/item/stack/telecrystal/attack_self(var/mob/user) - if(use(Ceil(DEFAULT_TELECRYSTAL_AMOUNT/20))) - user.visible_message("\The [user] crushes a crystal!", "You crush \a [src]!", "You hear the sound of a crystal breaking just before a sudden crack of electricity.") - var/turf/T = get_random_turf_in_range(user, 7, 3) - if(T) - user.phase_out(T, get_turf(user)) - user.forceMove(T) - user.phase_in(T, get_turf(user)) diff --git a/code/game/objects/items/stacks/tiles/tile_types.dm b/code/game/objects/items/stacks/tiles/tile_types.dm deleted file mode 100644 index cc889641f4f22..0000000000000 --- a/code/game/objects/items/stacks/tiles/tile_types.dm +++ /dev/null @@ -1,310 +0,0 @@ -/* Diffrent misc types of tiles - * Contains: - * Prototype - * Grass - * Wood - * Linoleum - * Carpet - */ - -/obj/item/stack/tile - name = "tile" - singular_name = "tile" - desc = "A non-descript floor tile." - randpixel = 7 - w_class = ITEM_SIZE_NORMAL - max_amount = 100 - icon = 'icons/obj/tiles.dmi' - - force = 1 - throwforce = 1 - throw_speed = 5 - throw_range = 20 - item_flags = 0 - obj_flags = 0 - -/* - * Grass - */ -/obj/item/stack/tile/grass - name = "grass tile" - singular_name = "grass floor tile" - desc = "A patch of grass like they often use on golf courses." - icon_state = "tile_grass" - origin_tech = list(TECH_BIO = 1) - -/* - * Wood - */ -/obj/item/stack/tile/wood - name = "wood floor tile" - singular_name = "wood floor tile" - desc = "An easy to fit wooden floor tile." - icon_state = "tile-wood" - color = WOOD_COLOR_GENERIC - matter = list(MATERIAL_WOOD = 450) - -/obj/item/stack/tile/wood/cyborg - name = "wood floor tile synthesizer" - desc = "A device that makes wood floor tiles." - uses_charge = 1 - charge_costs = list(250) - stacktype = /obj/item/stack/tile/wood - build_type = /obj/item/stack/tile/wood - -/obj/item/stack/tile/mahogany - name = "mahogany floor tile" - singular_name = "mahogany floor tile" - desc = "An easy to fit mahogany wood floor tile." - icon_state = "tile-wood" - color = WOOD_COLOR_RICH - matter = list(MATERIAL_WOOD = 450) - -/obj/item/stack/tile/maple - name = "maple floor tile" - singular_name = "maple floor tile" - desc = "An easy to fit maple wood floor tile." - icon_state = "tile-wood" - color = WOOD_COLOR_PALE - matter = list(MATERIAL_WOOD = 450) - -/obj/item/stack/tile/ebony - name = "ebony floor tile" - singular_name = "ebony floor tile" - desc = "An easy to fit ebony floor tile." - icon_state = "tile-wood" - color = WOOD_COLOR_BLACK - matter = list(MATERIAL_WOOD = 450) - -/obj/item/stack/tile/walnut - name = "walnut floor tile" - singular_name = "walnut floor tile" - desc = "An easy to fit walnut wood floor tile." - icon_state = "tile-wood" - color = WOOD_COLOR_CHOCOLATE - matter = list(MATERIAL_WOOD = 450) - -/obj/item/stack/tile/bamboo - name = "bamboo floor tile" - singular_name = "bamboo floor tile" - desc = "An easy to fit bamboo wood floor tile." - icon_state = "tile-wood" - color = WOOD_COLOR_PALE2 - matter = list(MATERIAL_WOOD = 450) - -/obj/item/stack/tile/yew - name = "yew floor tile" - singular_name = "yew floor tile" - desc = "An easy to fit yew wood floor tile." - icon_state = "tile-wood" - color = WOOD_COLOR_YELLOW - matter = list(MATERIAL_WOOD = 450) - -/obj/item/stack/tile/floor - name = "steel floor tile" - singular_name = "steel floor tile" - desc = "Those could work as a pretty decent throwing weapon." //why? - icon_state = "tile" - force = 6 - matter = list(MATERIAL_STEEL = 450) - throwforce = 15 - obj_flags = OBJ_FLAG_CONDUCTIBLE - -/obj/item/stack/tile/mono - name = "steel mono tile" - singular_name = "steel mono tile" - icon_state = "tile" - matter = list(MATERIAL_STEEL = 450) - obj_flags = OBJ_FLAG_CONDUCTIBLE - -/obj/item/stack/tile/mono/dark - name = "dark mono tile" - singular_name = "dark mono tile" - icon_state = "fr_tile" - matter = list(MATERIAL_STEEL = 450) - obj_flags = OBJ_FLAG_CONDUCTIBLE - -/obj/item/stack/tile/mono/white - name = "white mono tile" - singular_name = "white mono tile" - icon_state = "tile_white" - matter = list(MATERIAL_PLASTIC = 450) - -/obj/item/stack/tile/grid - name = "grey grid tile" - singular_name = "grey grid tile" - icon_state = "tile_grid" - matter = list(MATERIAL_STEEL = 450) - obj_flags = OBJ_FLAG_CONDUCTIBLE - -/obj/item/stack/tile/ridge - name = "grey ridge tile" - singular_name = "grey ridge tile" - icon_state = "tile_ridged" - matter = list(MATERIAL_STEEL = 450) - obj_flags = OBJ_FLAG_CONDUCTIBLE - -/obj/item/stack/tile/techgrey - name = "grey techfloor tile" - singular_name = "grey techfloor tile" - icon_state = "techtile_grey" - matter = list(MATERIAL_STEEL = 450) - obj_flags = OBJ_FLAG_CONDUCTIBLE - -/obj/item/stack/tile/techgrid - name = "grid techfloor tile" - singular_name = "grid techfloor tile" - icon_state = "techtile_grid" - matter = list(MATERIAL_STEEL = 450) - obj_flags = OBJ_FLAG_CONDUCTIBLE - -/obj/item/stack/tile/techmaint - name = "dark techfloor tile" - singular_name = "dark techfloor tile" - icon_state = "techtile_maint" - matter = list(MATERIAL_STEEL = 450) - obj_flags = OBJ_FLAG_CONDUCTIBLE - -/obj/item/stack/tile/floor_white - name = "white floor tile" - singular_name = "white floor tile" - icon_state = "tile_white" - matter = list(MATERIAL_PLASTIC = 450) - -/obj/item/stack/tile/floor_white/fifty - amount = 50 - -/obj/item/stack/tile/floor_dark - name = "dark floor tile" - singular_name = "dark floor tile" - icon_state = "fr_tile" - matter = list(MATERIAL_STEEL = 450) - obj_flags = OBJ_FLAG_CONDUCTIBLE - -/obj/item/stack/tile/floor_dark/fifty - amount = 50 - -/obj/item/stack/tile/floor_freezer - name = "freezer floor tile" - singular_name = "freezer floor tile" - icon_state = "tile_freezer" - matter = list(MATERIAL_PLASTIC = 450) - -/obj/item/stack/tile/floor_freezer/fifty - amount = 50 - -/obj/item/stack/tile/floor/cyborg - name = "floor tile synthesizer" - desc = "A device that makes floor tiles." - gender = NEUTER - matter = null - uses_charge = 1 - charge_costs = list(250) - stacktype = /obj/item/stack/tile/floor - build_type = /obj/item/stack/tile/floor - -/obj/item/stack/tile/linoleum - name = "linoleum" - singular_name = "linoleum" - desc = "A piece of linoleum. It is the same size as a normal floor tile!" - icon_state = "tile_linoleum" - -/obj/item/stack/tile/linoleum/fifty - amount = 50 - -/obj/item/stack/tile/stone - name = "stone slabs" - singular_name = "stone slab" - desc = "A smooth, flat slab of some kind of stone." - icon_state = "tile_stone" - -/* - * Carpets - */ -/obj/item/stack/tile/carpet - name = "brown carpet" - singular_name = "brown carpet" - desc = "A piece of brown carpet." - icon_state = "tile_carpetbrown" - -/obj/item/stack/tile/carpet/fifty - amount = 50 - -/obj/item/stack/tile/carpetblue - name = "blue carpet" - desc = "A piece of blue and gold carpet." - singular_name = "blue carpet" - icon_state = "tile_carpetblue" - -/obj/item/stack/tile/carpetblue/fifty - amount = 50 - -/obj/item/stack/tile/carpetblue2 - name = "pale blue carpet" - desc = "A piece of blue and pale blue carpet." - singular_name = "pale blue carpet" - icon_state = "tile_carpetblue2" - -/obj/item/stack/tile/carpetblue2/fifty - amount = 50 - -/obj/item/stack/tile/carpetblue3 - name = "sea blue carpet" - desc = "A piece of blue and green carpet." - singular_name = "sea blue carpet" - icon_state = "tile_carpetblue3" - -/obj/item/stack/tile/carpetblue3/fifty - amount = 50 - -/obj/item/stack/tile/carpetmagenta - name = "magenta carpet" - desc = "A piece of magenta carpet." - singular_name = "magenta carpet" - icon_state = "tile_carpetmagenta" - -/obj/item/stack/tile/carpetmagenta/fifty - amount = 50 - -/obj/item/stack/tile/carpetpurple - name = "purple carpet" - desc = "A piece of purple carpet." - singular_name = "purple carpet" - icon_state = "tile_carpetpurple" - -/obj/item/stack/tile/carpetpurple/fifty - amount = 50 - -/obj/item/stack/tile/carpetorange - name = "orange carpet" - desc = "A piece of orange carpet." - singular_name = "orange carpet" - icon_state = "tile_carpetorange" - -/obj/item/stack/tile/carpetorange/fifty - amount = 50 - -/obj/item/stack/tile/carpetgreen - name = "green carpet" - desc = "A piece of green carpet." - singular_name = "green carpet" - icon_state = "tile_carpetgreen" - -/obj/item/stack/tile/carpetgreen/fifty - amount = 50 - -/obj/item/stack/tile/carpetred - name = "red carpet" - desc = "A piece of red carpet." - singular_name = "red carpet" - icon_state = "tile_carpetred" - -/obj/item/stack/tile/carpetred/fifty - amount = 50 - -/obj/item/stack/tile/pool - name = "pool tiling" - desc = "A set of tiles designed to build fluid pools." - singular_name = "pool tile" - icon_state = "tile_pool" - matter = list(MATERIAL_STEEL = 450) diff --git a/code/game/objects/items/toys.dm b/code/game/objects/items/toys.dm deleted file mode 100644 index 4a9419c5820b3..0000000000000 --- a/code/game/objects/items/toys.dm +++ /dev/null @@ -1,962 +0,0 @@ -/* Toys! - * Contains: - * Balloons - * Fake telebeacon - * Fake singularity - * Toy gun - * Toy crossbow - * Toy swords - * Toy bosun's whistle - * Toy mechs - * Snap pops - * Water flower - * Therapy dolls - * Inflatable duck - * Action figures - * Plushies - * Toy cult sword - * Marshalling wand - * Ring bell - * - * desk toys - */ - - - -/obj/item/toy - icon = 'icons/obj/toy.dmi' - throwforce = 0 - throw_speed = 4 - throw_range = 20 - force = 0 - -/* - * Balloons - */ -/obj/item/toy/water_balloon - name = "water balloon" - desc = "A translucent balloon. There's nothing in it." - icon = 'icons/obj/toy.dmi' - icon_state = "waterballoon-e" - item_state = "balloon-empty" - -/obj/item/toy/water_balloon/New() - create_reagents(10) - ..() - -/obj/item/toy/water_balloon/attack(mob/living/carbon/human/M as mob, mob/user as mob) - return - -/obj/item/toy/water_balloon/afterattack(atom/A as mob|obj, mob/user as mob, proximity) - if(!proximity) return - if (istype(A, /obj/structure/reagent_dispensers/watertank) && get_dist(src,A) <= 1) - A.reagents.trans_to_obj(src, 10) - to_chat(user, "You fill the balloon with the contents of [A].") - src.desc = "A translucent balloon with some form of liquid sloshing around in it." - src.update_icon() - return - -/obj/item/toy/water_balloon/attackby(obj/O as obj, mob/user as mob) - if(istype(O, /obj/item/reagent_containers/glass)) - if(O.reagents) - if(O.reagents.total_volume < 1) - to_chat(user, "The [O] is empty.") - else if(O.reagents.total_volume >= 1) - if(O.reagents.has_reagent(/datum/reagent/acid/polyacid, 1)) - to_chat(user, "The acid chews through the balloon!") - O.reagents.splash(user, reagents.total_volume) - qdel(src) - else - src.desc = "A translucent balloon with some form of liquid sloshing around in it." - to_chat(user, "You fill the balloon with the contents of [O].") - O.reagents.trans_to_obj(src, 10) - src.update_icon() - return - -/obj/item/toy/water_balloon/throw_impact(atom/hit_atom) - if(reagents && reagents.total_volume >= 1) - src.visible_message("\The [src] bursts!","You hear a pop and a splash.") - src.reagents.touch_turf(get_turf(hit_atom)) - for(var/atom/A in get_turf(hit_atom)) - src.reagents.touch(A) - src.icon_state = "burst" - spawn(5) - if(src) - qdel(src) - return - -/obj/item/toy/water_balloon/on_update_icon() - if(src.reagents.total_volume >= 1) - icon_state = "waterballoon" - item_state = "balloon" - else - icon_state = "waterballoon-e" - item_state = "balloon-empty" - -/obj/item/toy/balloon - name = "\improper 'criminal' balloon" - desc = "FUK CAPITALISM!11!" - throwforce = 0 - throw_speed = 4 - throw_range = 20 - force = 0 - icon = 'icons/obj/weapons/other.dmi' - icon_state = "syndballoon" - item_state = "syndballoon" - w_class = ITEM_SIZE_HUGE - -/obj/item/toy/balloon/New() - ..() - desc = "Across the balloon is printed: \"[desc]\"" - -/obj/item/toy/balloon/nanotrasen - name = "\improper 'motivational' balloon" - desc = "Man, I love Profit soooo much. I use only Brand Name products. You have NO idea." - icon_state = "ntballoon" - item_state = "ntballoon" - -/* - * Fake telebeacon - */ -/obj/item/toy/blink - name = "electronic blink toy game" - desc = "Blink. Blink. Blink. Ages 8 and up." - icon = 'icons/obj/radio.dmi' - icon_state = "beacon" - item_state = "signaler" - -/* - * Fake singularity - */ -/obj/item/toy/spinningtoy - name = "gravitational singularity" - desc = "\"Singulo\" brand spinning toy." - icon = 'icons/obj/singularity.dmi' - icon_state = "singularity_s1" - -/* - * Toy crossbow - */ - -/obj/item/toy/crossbow - name = "foam dart crossbow" - desc = "A weapon favored by many overactive children. Ages 8 and up." - icon = 'icons/obj/guns/energy_crossbow.dmi' - icon_state = "crossbow" - item_state = "crossbow" - item_icons = list( - icon_l_hand = 'icons/mob/onmob/items/lefthand_guns.dmi', - icon_r_hand = 'icons/mob/onmob/items/righthand_guns.dmi', - ) - w_class = ITEM_SIZE_SMALL - attack_verb = list("attacked", "struck", "hit") - var/bullets = 5 - -/obj/item/toy/crossbow/attackby(obj/item/I as obj, mob/user as mob) - if(istype(I, /obj/item/toy/ammo/crossbow)) - if(bullets <= 4) - if(!user.unEquip(I)) - return - qdel(I) - bullets++ - to_chat(user, "You load the foam dart into the crossbow.") - else - to_chat(usr, "It's already fully loaded.") - - -/obj/item/toy/crossbow/afterattack(atom/target as mob|obj|turf|area, mob/user as mob, flag) - if(!isturf(target.loc) || target == user) return - if(flag) return - - if (locate (/obj/structure/table, src.loc)) - return - else if (bullets) - var/turf/trg = get_turf(target) - var/obj/effect/foam_dart_dummy/D = new/obj/effect/foam_dart_dummy(get_turf(src)) - bullets-- - D.icon_state = "foamdart" - D.SetName("foam dart") - playsound(user.loc, 'sound/items/syringeproj.ogg', 50, 1) - - for(var/i=0, i<6, i++) - if (D) - if(D.loc == trg) break - step_towards(D,trg) - - for(var/mob/living/M in D.loc) - if(!istype(M,/mob/living)) continue - if(M == user) continue - for(var/mob/O in viewers(world.view, D)) - O.show_message(text("\The [] was hit by the foam dart!", M), 1) - new /obj/item/toy/ammo/crossbow(M.loc) - qdel(D) - return - - for(var/atom/A in D.loc) - if(A == user) continue - if(A.density) - new /obj/item/toy/ammo/crossbow(A.loc) - qdel(D) - - sleep(1) - - spawn(10) - if(D) - new /obj/item/toy/ammo/crossbow(D.loc) - qdel(D) - - return - else if (bullets == 0) - user.Weaken(5) - for(var/mob/O in viewers(world.view, user)) - O.show_message(text("\The [] realized they were out of ammo and starting scrounging for some!", user), 1) - - -/obj/item/toy/crossbow/attack(mob/M as mob, mob/user as mob) - src.add_fingerprint(user) - -// ******* Check - - if (src.bullets > 0 && M.lying) - - for(var/mob/O in viewers(M, null)) - if(O.client) - O.show_message(text("\The [] casually lines up a shot with []'s head and pulls the trigger!", user, M), 1, "You hear the sound of foam against skull", 2) - O.show_message(text("\The [] was hit in the head by the foam dart!", M), 1) - - playsound(user.loc, 'sound/items/syringeproj.ogg', 50, 1) - new /obj/item/toy/ammo/crossbow(M.loc) - src.bullets-- - else if (M.lying && src.bullets == 0) - for(var/mob/O in viewers(M, null)) - if (O.client) O.show_message(text("\The [] casually lines up a shot with []'s head, pulls the trigger, then realizes they are out of ammo and drops to the floor in search of some!", user, M), 1, "You hear someone fall", 2) - user.Weaken(5) - return - -/obj/item/toy/crossbow/examine(mob/user, distance) - . = ..() - if(distance <= 2 && bullets) - to_chat(user, "It is loaded with [bullets] foam darts!") - -/obj/item/toy/ammo/crossbow - name = "foam dart" - desc = "It's nerf or nothing! Ages 8 and up." - icon = 'icons/obj/toy.dmi' - icon_state = "foamdart" - w_class = ITEM_SIZE_TINY - slot_flags = SLOT_EARS - -/obj/effect/foam_dart_dummy - name = "" - desc = "" - icon = 'icons/obj/toy.dmi' - icon_state = "null" - anchored = TRUE - density = FALSE - - -/* - * Toy swords - */ -/obj/item/toy/sword - name = "toy sword" - desc = "A cheap, plastic replica of an energy sword. Realistic sounds! Ages 8 and up." - icon = 'icons/obj/weapons/melee_energy.dmi' - icon_state = "sword0" - item_state = "sword0" - var/active = 0.0 - w_class = ITEM_SIZE_SMALL - attack_verb = list("attacked", "struck", "hit") - -/obj/item/toy/sword/attack_self(mob/user as mob) - src.active = !( src.active ) - if (src.active) - to_chat(user, "You extend the plastic blade with a quick flick of your wrist.") - playsound(user, 'sound/weapons/saberon.ogg', 50, 1) - src.icon_state = "swordblue" - src.item_state = "swordblue" - src.w_class = ITEM_SIZE_HUGE - else - to_chat(user, "You push the plastic blade back down into the handle.") - playsound(user, 'sound/weapons/saberoff.ogg', 50, 1) - src.icon_state = "sword0" - src.item_state = "sword0" - src.w_class = initial(w_class) - - update_held_icon() - - src.add_fingerprint(user) - return - -/obj/item/toy/katana - name = "katana" - desc = "Woefully underpowered in D20." - icon = 'icons/obj/weapons/melee_physical.dmi' - icon_state = "katana" - item_state = "katana" - obj_flags = OBJ_FLAG_CONDUCTIBLE - slot_flags = SLOT_BELT | SLOT_BACK - force = 5 - throwforce = 5 - w_class = ITEM_SIZE_LARGE - attack_verb = list("attacked", "slashed", "stabbed", "sliced") - -/* - * Snap pops - */ -/obj/item/toy/snappop - name = "snap pop" - desc = "Wow!" - icon = 'icons/obj/toy.dmi' - icon_state = "snappop" - w_class = ITEM_SIZE_TINY - -/obj/item/toy/snappop/throw_impact(atom/hit_atom) - ..() - var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread - s.set_up(3, 1, src) - s.start() - new /obj/effect/decal/cleanable/ash(src.loc) - src.visible_message("The [src.name] explodes!","You hear a snap!") - playsound(src, 'sound/effects/snap.ogg', 50, 1) - qdel(src) - -/obj/item/toy/snappop/Crossed(H as mob|obj) - if((ishuman(H))) //i guess carp and shit shouldn't set them off - var/mob/living/carbon/M = H - if(!MOVING_DELIBERATELY(M)) - to_chat(M, "You step on the snap pop!") - - var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread - s.set_up(2, 0, src) - s.start() - new /obj/effect/decal/cleanable/ash(src.loc) - src.visible_message("The [src.name] explodes!","You hear a snap!") - playsound(src, 'sound/effects/snap.ogg', 50, 1) - qdel(src) - -/* - * Bosun's whistle - */ - -/obj/item/toy/bosunwhistle - name = "bosun's whistle" - desc = "A genuine Admiral Krush Bosun's Whistle, for the aspiring ship's captain! Suitable for ages 8 and up, do not swallow." - icon = 'icons/obj/toy.dmi' - icon_state = "bosunwhistle" - var/cooldown = 0 - w_class = ITEM_SIZE_TINY - slot_flags = SLOT_EARS - -/obj/item/toy/bosunwhistle/attack_self(mob/user as mob) - if(cooldown < world.time - 35) - to_chat(user, "You blow on [src], creating an ear-splitting noise!") - playsound(user, 'sound/misc/boatswain.ogg', 20, 1) - cooldown = world.time - -/* - * Mech prizes - */ -/obj/item/toy/prize - icon = 'icons/obj/toy.dmi' - icon_state = "ripleytoy" - var/cooldown = 0 - w_class = ITEM_SIZE_TINY - -//all credit to skasi for toy mech fun ideas -/obj/item/toy/prize/attack_self(mob/user as mob) - if(cooldown < world.time - 8) - to_chat(user, "You play with [src].") - playsound(user, 'sound/mecha/mechstep.ogg', 20, 1) - cooldown = world.time - -/obj/item/toy/prize/attack_hand(mob/user as mob) - if(loc == user) - if(cooldown < world.time - 8) - to_chat(user, "You play with [src].") - playsound(user, 'sound/mecha/mechturn.ogg', 20, 1) - cooldown = world.time - return - ..() - -/obj/item/toy/prize/powerloader - name = "toy ripley" - desc = "Mini-mech action figure! Collect them all! 1/11." - -/obj/item/toy/prize/fireripley - name = "toy firefighting ripley" - desc = "Mini-mech action figure! Collect them all! 2/11." - icon_state = "fireripleytoy" - -/obj/item/toy/prize/deathripley - name = "toy deathsquad ripley" - desc = "Mini-mech action figure! Collect them all! 3/11." - icon_state = "deathripleytoy" - -/obj/item/toy/prize/gygax - name = "toy gygax" - desc = "Mini-mech action figure! Collect them all! 4/11." - icon_state = "gygaxtoy" - -/obj/item/toy/prize/durand - name = "toy durand" - desc = "Mini-mech action figure! Collect them all! 5/11." - icon_state = "durandprize" - -/obj/item/toy/prize/honk - name = "toy H.O.N.K." - desc = "Mini-mech action figure! Collect them all! 6/11." - icon_state = "honkprize" - -/obj/item/toy/prize/marauder - name = "toy marauder" - desc = "Mini-mech action figure! Collect them all! 7/11." - icon_state = "marauderprize" - -/obj/item/toy/prize/seraph - name = "toy seraph" - desc = "Mini-mech action figure! Collect them all! 8/11." - icon_state = "seraphprize" - -/obj/item/toy/prize/mauler - name = "toy mauler" - desc = "Mini-mech action figure! Collect them all! 9/11." - icon_state = "maulerprize" - -/obj/item/toy/prize/odysseus - name = "toy odysseus" - desc = "Mini-mech action figure! Collect them all! 10/11." - icon_state = "odysseusprize" - -/obj/item/toy/prize/phazon - name = "toy phazon" - desc = "Mini-mech action figure! Collect them all! 11/11." - icon_state = "phazonprize" - -/* - * Action figures - */ - -/obj/item/toy/figure - name = "Completely Glitched action figure" - desc = "A \"Space Life\" brand... wait, what the hell is this thing? It seems to be requesting the sweet release of death." - icon_state = "assistant" - icon = 'icons/obj/toy.dmi' - w_class = ITEM_SIZE_TINY - -/obj/item/toy/figure/cmo - name = "Chief Medical Officer action figure" - desc = "A \"Space Life\" brand Chief Medical Officer action figure." - icon_state = "cmo" - -/obj/item/toy/figure/assistant - name = "Assistant action figure" - desc = "A \"Space Life\" brand Assistant action figure." - icon_state = "assistant" - -/obj/item/toy/figure/atmos - name = "Atmospheric Technician action figure" - desc = "A \"Space Life\" brand Atmospheric Technician action figure." - icon_state = "atmos" - -/obj/item/toy/figure/bartender - name = "Bartender action figure" - desc = "A \"Space Life\" brand Bartender action figure." - icon_state = "bartender" - -/obj/item/toy/figure/borg - name = "Cyborg action figure" - desc = "A \"Space Life\" brand Cyborg action figure." - icon_state = "borg" - -/obj/item/toy/figure/gardener - name = "Gardener action figure" - desc = "A \"Space Life\" brand Gardener action figure." - icon_state = "gardener" - -/obj/item/toy/figure/captain - name = "Captain action figure" - desc = "A \"Space Life\" brand Captain action figure." - icon_state = "captain" - -/obj/item/toy/figure/cargotech - name = "Cargo Technician action figure" - desc = "A \"Space Life\" brand Cargo Technician action figure." - icon_state = "cargotech" - -/obj/item/toy/figure/ce - name = "Chief Engineer action figure" - desc = "A \"Space Life\" brand Chief Engineer action figure." - icon_state = "ce" - -/obj/item/toy/figure/chaplain - name = "Chaplain action figure" - desc = "A \"Space Life\" brand Chaplain action figure." - icon_state = "chaplain" - -/obj/item/toy/figure/chef - name = "Chef action figure" - desc = "A \"Space Life\" brand Chef action figure." - icon_state = "chef" - -/obj/item/toy/figure/chemist - name = "Pharmacist action figure" - desc = "A \"Space Life\" brand Pharmacist action figure." - icon_state = "chemist" - -/obj/item/toy/figure/clown - name = "Clown action figure" - desc = "A \"Space Life\" brand Clown action figure." - icon_state = "clown" - -/obj/item/toy/figure/corgi - name = "Corgi action figure" - desc = "A \"Space Life\" brand Corgi action figure." - icon_state = "ian" - -/obj/item/toy/figure/detective - name = "Detective action figure" - desc = "A \"Space Life\" brand Detective action figure." - icon_state = "detective" - -/obj/item/toy/figure/dsquad - name = "Space Commando action figure" - desc = "A \"Space Life\" brand Space Commando action figure." - icon_state = "dsquad" - -/obj/item/toy/figure/engineer - name = "Engineer action figure" - desc = "A \"Space Life\" brand Engineer action figure." - icon_state = "engineer" - -/obj/item/toy/figure/geneticist - name = "Geneticist action figure" - desc = "A \"Space Life\" brand Geneticist action figure, which was recently dicontinued." - icon_state = "geneticist" - -/obj/item/toy/figure/hop - name = "Head of Personel action figure" - desc = "A \"Space Life\" brand Head of Personel action figure." - icon_state = "hop" - -/obj/item/toy/figure/hos - name = "Head of Security action figure" - desc = "A \"Space Life\" brand Head of Security action figure." - icon_state = "hos" - -/obj/item/toy/figure/qm - name = "Quartermaster action figure" - desc = "A \"Space Life\" brand Quartermaster action figure." - icon_state = "qm" - -/obj/item/toy/figure/janitor - name = "Janitor action figure" - desc = "A \"Space Life\" brand Janitor action figure." - icon_state = "janitor" - -/obj/item/toy/figure/agent - name = "Internal Affairs Agent action figure" - desc = "A \"Space Life\" brand Internal Affairs Agent action figure." - icon_state = "agent" - -/obj/item/toy/figure/librarian - name = "Librarian action figure" - desc = "A \"Space Life\" brand Librarian action figure." - icon_state = "librarian" - -/obj/item/toy/figure/md - name = "Medical Doctor action figure" - desc = "A \"Space Life\" brand Medical Doctor action figure." - icon_state = "md" - -/obj/item/toy/figure/mime - name = "Mime action figure" - desc = "A \"Space Life\" brand Mime action figure." - icon_state = "mime" - -/obj/item/toy/figure/miner - name = "Shaft Miner action figure" - desc = "A \"Space Life\" brand Shaft Miner action figure." - icon_state = "miner" - -/obj/item/toy/figure/ninja - name = "Space Ninja action figure" - desc = "A \"Space Life\" brand Space Ninja action figure." - icon_state = "ninja" - -/obj/item/toy/figure/wizard - name = "Wizard action figure" - desc = "A \"Space Life\" brand Wizard action figure." - icon_state = "wizard" - -/obj/item/toy/figure/rd - name = "Chief Science Officer action figure" - desc = "A \"Space Life\" brand Chief Science Officer action figure." - icon_state = "rd" - -/obj/item/toy/figure/roboticist - name = "Roboticist action figure" - desc = "A \"Space Life\" brand Roboticist action figure." - icon_state = "roboticist" - -/obj/item/toy/figure/scientist - name = "Scientist action figure" - desc = "A \"Space Life\" brand Scientist action figure." - icon_state = "scientist" - -/obj/item/toy/figure/syndie - name = "Doom Operative action figure" - desc = "A \"Space Life\" brand Doom Operative action figure." - icon_state = "syndie" - -/obj/item/toy/figure/secofficer - name = "Security Officer action figure" - desc = "A \"Space Life\" brand Security Officer action figure." - icon_state = "secofficer" - -/obj/item/toy/figure/warden - name = "Warden action figure" - desc = "A \"Space Life\" brand Warden action figure." - icon_state = "warden" - -/obj/item/toy/figure/psychologist - name = "Psychologist action figure" - desc = "A \"Space Life\" brand Psychologist action figure." - icon_state = "psychologist" - -/obj/item/toy/figure/paramedic - name = "Paramedic action figure" - desc = "A \"Space Life\" brand Paramedic action figure." - icon_state = "paramedic" - -/obj/item/toy/figure/ert - name = "Emergency Response Team Commander action figure" - desc = "A \"Space Life\" brand Emergency Response Team Commander action figure." - icon_state = "ert" - -/obj/item/toy/therapy_red - name = "red therapy doll" - desc = "A toy for therapeutic and recreational purposes. This one is red." - icon_state = "therapyred" - item_state = "egg4" // It's the red egg in items_left/righthand - w_class = ITEM_SIZE_TINY - -/obj/item/toy/therapy_purple - name = "purple therapy doll" - desc = "A toy for therapeutic and recreational purposes. This one is purple." - icon_state = "therapypurple" - item_state = "egg1" // It's the magenta egg in items_left/righthand - w_class = ITEM_SIZE_TINY - -/obj/item/toy/therapy_blue - name = "blue therapy doll" - desc = "A toy for therapeutic and recreational purposes. This one is blue." - icon_state = "therapyblue" - item_state = "egg2" // It's the blue egg in items_left/righthand - w_class = ITEM_SIZE_TINY - -/obj/item/toy/therapy_yellow - name = "yellow therapy doll" - desc = "A toy for therapeutic and recreational purposes. This one is yellow." - icon_state = "therapyyellow" - item_state = "egg5" // It's the yellow egg in items_left/righthand - w_class = ITEM_SIZE_TINY - -/obj/item/toy/therapy_orange - name = "orange therapy doll" - desc = "A toy for therapeutic and recreational purposes. This one is orange." - icon_state = "therapyorange" - item_state = "egg4" // It's the red one again, lacking an orange item_state and making a new one is pointless - w_class = ITEM_SIZE_TINY - -/obj/item/toy/therapy_green - name = "green therapy doll" - desc = "A toy for therapeutic and recreational purposes. This one is green." - icon_state = "therapygreen" - item_state = "egg3" // It's the green egg in items_left/righthand - w_class = ITEM_SIZE_TINY - - -/* - * Plushies - */ - -/obj/structure/plushie - abstract_type = /obj/structure/plushie - name = "generic plush" - desc = "A very generic plushie. It seems to not want to exist." - icon = 'icons/obj/toy.dmi' - icon_state = "ianplushie" - atom_flags = ATOM_FLAG_CLIMBABLE - anchored = FALSE - density = TRUE - var/phrase = "I don't want to exist anymore!" - - -/obj/structure/plushie/attack_hand(mob/living/user) - var/action_word = "action" - if (user.a_intent == I_HELP) - action_word = "hug" - else if (user.a_intent == I_DISARM) - action_word = "poke" - else if (user.a_intent == I_GRAB) - action_word = "strangle" - else if (user.a_intent == I_HURT) - action_word = "bop" - user.visible_message( - SPAN_ITALIC("\The [user] [action_word]s \the [src]."), - SPAN_ITALIC("You [action_word] \the [src].") - ) - if (phrase) - audible_message(phrase, hearing_distance = 3) - playsound(src, 'sound/effects/rustle1.ogg', 100, 1) - - -/obj/structure/plushie/ian - name = "plush corgi" - desc = "A plushie of an adorable corgi! Don't you just want to hug it and squeeze it and call it \"Ian\"?" - icon_state = "ianplushie" - phrase = "Arf!" - - -/obj/structure/plushie/drone - name = "plush drone" - desc = "A plushie of a happy drone! It appears to be smiling, and has a small tag which reads \"N.D.V. Icarus Gift Shop\"." - icon_state = "droneplushie" - phrase = "Beep boop!" - - -/obj/structure/plushie/carp - name = "plush carp" - desc = "A plushie of an elated carp! Straight from the wilds of the Nyx frontier, now right here in your hands." - icon_state = "carpplushie" - phrase = "Glorf!" - - -/obj/structure/plushie/beepsky - name = "plush Officer Sweepsky" - desc = "A plushie of a popular industrious cleaning robot! If it could feel emotions, it would love you." - icon_state = "beepskyplushie" - phrase = "Ping!" - - -/obj/item/toy/plushie - abstract_type = /obj/item/toy/plushie - name = "generic small plush" - desc = "A very generic small plushie. It seems to not want to exist." - icon = 'icons/obj/toy.dmi' - icon_state = "nymphplushie" - w_class = ITEM_SIZE_SMALL - - -/obj/item/toy/plushie/attack_self(mob/living/user) - var/action_word = "action" - if (user.a_intent == I_HELP) - action_word = "hug" - else if (user.a_intent == I_DISARM) - action_word = "poke" - else if (user.a_intent == I_GRAB) - action_word = "strangle" - else if (user.a_intent == I_HURT) - action_word = "bop" - user.visible_message( - SPAN_ITALIC("\The [user] [action_word]s \the [src]."), - SPAN_ITALIC("You [action_word] \the [src].") - ) - - -/obj/item/toy/plushie/nymph - name = "diona nymph plush" - desc = "A plushie of an adorable diona nymph! While its level of self-awareness is still being debated, its level of cuteness is not." - icon_state = "nymphplushie" - - -/obj/item/toy/plushie/mouse - name = "mouse plush" - desc = "A plushie of a delightful mouse! What was once considered a vile rodent is now your very best friend." - icon_state = "mouseplushie" - - -/obj/item/toy/plushie/kitten - name = "kitten plush" - desc = "A plushie of a cute kitten! Watch as it purrs it's way right into your heart." - icon_state = "kittenplushie" - - -/obj/item/toy/plushie/lizard - name = "lizard plush" - desc = "A plushie of a scaly lizard! Very controversial, after being accused as \"racist\" by some Unathi." - icon_state = "lizardplushie" - - -/obj/item/toy/plushie/spider - name = "spider plush" - desc = "A plushie of a fuzzy spider! It has eight legs - all the better to hug you with." - icon_state = "spiderplushie" - - -/obj/item/toy/plushie/farwa - name = "farwa plush" - desc = "A farwa plush doll. It's soft and comforting!" - icon_state = "farwaplushie" - - -//Toy cult sword -/obj/item/toy/cultsword - name = "foam sword" - desc = "An arcane weapon (made of foam) wielded by the followers of the hit Saturday morning cartoon \"King Nursee and the Acolytes of Heroism\"." - icon = 'icons/obj/weapons/melee_physical.dmi' - icon_state = "cultblade" - item_state = "cultblade" - w_class = ITEM_SIZE_HUGE - attack_verb = list("attacked", "slashed", "stabbed", "poked") - -/obj/item/inflatable_duck - name = "inflatable duck" - desc = "No bother to sink or swim when you can just float!" - icon_state = "inflatable" - item_state = "inflatable" - icon = 'icons/obj/clothing/obj_belt.dmi' - slot_flags = SLOT_BELT - -/obj/item/marshalling_wand - name = "marshalling wand" - desc = "An illuminated, hand-held baton used by hangar personnel to visually signal shuttle pilots. The signal changes depending on your intent." - icon_state = "marshallingwand" - item_state = "marshallingwand" - icon = 'icons/obj/toy.dmi' - item_icons = list( - icon_l_hand = 'icons/mob/onmob/items/lefthand.dmi', - icon_r_hand = 'icons/mob/onmob/items/righthand.dmi', - ) - slot_flags = SLOT_BELT - w_class = ITEM_SIZE_SMALL - force = 1 - attack_verb = list("attacked", "whacked", "jabbed", "poked", "marshalled") - -/obj/item/marshalling_wand/Initialize() - set_light(0.6, 0.5, 2, 2, "#ff0000") - return ..() - -/obj/item/marshalling_wand/attack_self(mob/living/user as mob) - playsound(src.loc, 'sound/effects/rustle1.ogg', 100, 1) - if (user.a_intent == I_HELP) - user.visible_message("[user] beckons with \the [src], signalling forward motion.", - "You beckon with \the [src], signalling forward motion.") - else if (user.a_intent == I_DISARM) - user.visible_message("[user] holds \the [src] above their head, signalling a stop.", - "You hold \the [src] above your head, signalling a stop.") - else if (user.a_intent == I_GRAB) - var/WAND_TURN_DIRECTION - if (user.l_hand == src) WAND_TURN_DIRECTION = "left" - else if (user.r_hand == src) WAND_TURN_DIRECTION = "right" - else return //how can you not be holding it in either hand?? black magic - user.visible_message("[user] waves \the [src] to the [WAND_TURN_DIRECTION], signalling a turn.", - "You wave \the [src] to the [WAND_TURN_DIRECTION], signalling a turn.") - else if (user.a_intent == I_HURT) - user.visible_message("[user] frantically waves \the [src] above their head!", - "You frantically wave \the [src] above your head!") - -/obj/item/toy/torchmodel - name = "table-top SEV Torch model" - desc = "This is a replica of the SEV Torch, in 1:250th scale, on a handsome wooden stand. Small lights blink on the hull and at the engine exhaust." - icon = 'icons/obj/toy.dmi' - icon_state = "torch_model_figure" - -/obj/item/toy/ringbell - name = "ringside bell" - desc = "A bell used to signal the beginning and end of various ring sports." - icon = 'icons/obj/toy.dmi' - icon_state= "ringbell" - anchored = TRUE - -/obj/item/toy/ringbell/attack_hand(mob/user as mob) - if (user.a_intent == I_HELP) - user.visible_message("[user] rings \the [src], signalling the beginning of the contest.") - playsound(user.loc, 'sound/items/oneding.ogg', 60) - else if (user.a_intent == I_DISARM) - user.visible_message("[user] rings \the [src] three times, signalling the end of the contest!") - playsound(user.loc, 'sound/items/threedings.ogg', 60) - else if (user.a_intent == I_HURT) - user.visible_message("[user] rings \the [src] repeatedly, signalling a disqualification!") - playsound(user.loc, 'sound/items/manydings.ogg', 60) - -//Office Desk Toys - -/obj/item/toy/desk - name = "desk toy master" - desc = "A object that does not exist. Parent Item" - - var/on = 0 - var/activation_sound = 'sound/effects/flashlight.ogg' - -/obj/item/toy/desk/on_update_icon() - if(on) - icon_state = "[initial(icon_state)]-on" - else - icon_state = "[initial(icon_state)]" - -/obj/item/toy/desk/attack_self(mob/user) - on = !on - if(on && activation_sound) - playsound(src.loc, activation_sound, 75, 1) - update_icon() - return 1 - -/obj/item/toy/desk/newtoncradle - name = "\improper Newton's cradle" - desc = "An ancient 21th century super-weapon model demonstrating that Sir Isaac Newton is the deadliest sonuvabitch in space." - icon_state = "newtoncradle" - -/obj/item/toy/desk/fan - name = "office fan" - desc = "Your greatest fan." - icon_state= "fan" - -/obj/item/toy/desk/officetoy - name = "office toy" - desc = "A generic microfusion powered office desk toy. Only generates magnetism and ennui." - icon_state= "desktoy" - -/obj/item/toy/desk/dippingbird - name = "dipping bird toy" - desc = "An ancient human bird idol, worshipped by clerks and desk jockeys." - icon_state= "dippybird" - -// tg station ports - -/obj/item/toy/eightball - name = "magic eightball" - desc = "A black ball with a stencilled number eight in white on the side. It seems full of dark liquid.\nThe instructions state that you should ask your question aloud, and then shake." - icon_state = "eightball" - w_class = ITEM_SIZE_TINY - - var/static/list/possible_answers = list( - "It is certain", - "It is decidedly so", - "Without a doubt", - "Yes, definitely", - "You may rely on it", - "As I see it, yes", - "Most likely", - "Outlook good", - "Yes", - "Signs point to yes", - "Reply hazy, try again", - "Ask again later", - "Better not tell you now", - "Cannot predict now", - "Concentrate and ask again", - "Don't count on it", - "My reply is no", - "My sources say no", - "Outlook not so good", - "Very doubtful") - -/obj/item/toy/eightball/attack_self(mob/user) - user.visible_message("\The [user] shakes \the [src] for a moment, and it says, \"[pick(possible_answers) ].\"") - -/obj/item/toy/eightball/afterattack(obj/O, mob/user, var/proximity) - . = ..() - if (proximity) - visible_message("\The [src] says, \"[pick(possible_answers) ]\" as it hits \the [O]!") diff --git a/code/game/objects/items/traitor_plush.dm b/code/game/objects/items/traitor_plush.dm deleted file mode 100644 index 2b9b9a1831c74..0000000000000 --- a/code/game/objects/items/traitor_plush.dm +++ /dev/null @@ -1,104 +0,0 @@ -/obj/item/reagent_containers/food/snacks/dehydrated_carp - name = "carp plushie" - desc = "A plushie of an elated carp! Straight from the wilds of the Nyx frontier, now right here in your hands." - atom_flags = ATOM_FLAG_NO_TEMP_CHANGE | ATOM_FLAG_OPEN_CONTAINER - icon = 'icons/obj/toy.dmi' - icon_state = "carpplushie" - filling_color = "#522666" - - var/spawned_mob = /mob/living/simple_animal/hostile/carp - -/obj/item/reagent_containers/food/snacks/dehydrated_carp/Initialize() - . = ..() - reagents.add_reagent(/datum/reagent/nutriment/protein, 10) - -/obj/item/reagent_containers/food/snacks/dehydrated_carp/attack(mob/M, mob/user, def_zone) - return - -/obj/item/reagent_containers/food/snacks/dehydrated_carp/attack_self(mob/user) - if (user.a_intent == I_HELP) - user.visible_message(SPAN_NOTICE("\The [user] hugs [src]!"), SPAN_NOTICE("You hug [src]!")) - else if (user.a_intent == I_HURT) - user.visible_message(SPAN_WARNING("\The [user] punches [src]!"), SPAN_WARNING("You punch [src]!")) - else if (user.a_intent == I_GRAB) - user.visible_message(SPAN_WARNING("\The [user] attempts to strangle [src]!"), SPAN_WARNING("You attempt to strangle [src]!")) - else - user.visible_message(SPAN_NOTICE("\The [user] pokes [src]."), SPAN_NOTICE("You poke [src].")) - -/obj/item/reagent_containers/food/snacks/dehydrated_carp/on_reagent_change() - if (reagents.has_reagent(/datum/reagent/water)) - visible_message(SPAN_WARNING("\The [src] begins to shake as the liquid touches it.")) - addtimer(CALLBACK(src, .proc/expand), 5 SECONDS) - -/obj/item/reagent_containers/food/snacks/dehydrated_carp/proc/expand() - visible_message(SPAN_WARNING("\The [src] rapidly expands into a living space carp!")) - new spawned_mob(get_turf(src)) - qdel(src) - -/obj/item/reagent_containers/food/snacks/dehydrated_carp/get_antag_info() - . = ..() - . += "You can add water to this plushie to hydrate it, transforming it into a living space carp after a short delay. Be careful, as the carp will be hostile to you too!" - -/obj/item/plushbomb - name = "kitten plush" - desc = "A plushie of a cute kitten! Watch as it purrs it's way right into your heart." - icon = 'icons/obj/toy.dmi' - icon_state = "kittenplushie" - var/phrase - -/obj/item/plushbomb/Initialize() - . = ..() - GLOB.listening_objects += src - -/obj/item/plushbomb/Destroy() - GLOB.listening_objects -= src - return ..() - -/obj/item/plushbomb/attack_self(mob/user) - if (user.a_intent == I_HELP) - user.visible_message(SPAN_NOTICE("\The [user] hugs [src]!"), SPAN_NOTICE("You hug [src]!")) - else if (user.a_intent == I_GRAB) - if (!phrase) - phrase = sanitize_phrase(input("Choose activation phrase:") as text) - to_chat(user, SPAN_NOTICE("You set the activation phrase to be '[phrase]'.")) - else - user.visible_message(SPAN_WARNING("\The [user] attempts to strangle [src]!"), SPAN_WARNING("You attempt to strangle [src]!")) - else if (user.a_intent == I_HURT) - user.visible_message(SPAN_WARNING("\The [user] punches [src]!"), SPAN_WARNING("You punch [src]!")) - else - user.visible_message(SPAN_NOTICE("\The [user] pokes [src]."), SPAN_NOTICE("You poke [src].")) - -/obj/item/plushbomb/hear_talk(mob/M, msg) - if (!phrase) - return - if (findtext(sanitize_phrase(msg), phrase)) - addtimer(CALLBACK(src, .proc/activate), 5 SECONDS) - visible_message(SPAN_DANGER("\The [src] begins to beep ominously!")) - playsound(loc, 'sound/weapons/armbomb.ogg', 75, 1, -3) - -/obj/item/plushbomb/proc/sanitize_phrase(phrase) - var/list/replacechars = list("'" = "","\"" = "",">" = "","<" = "","(" = "",")" = "") - return replace_characters(phrase, replacechars) - -/obj/item/plushbomb/proc/activate() - explosion(src.loc, 0, 0, 3, 3) - qdel(src) - -/obj/item/plushbomb/get_antag_info() - . = ..() - . += "Set an activation phrase by using the plush on grab intent. Upon hearing the trigger phrase, the plush will explode after a 5 second countdown." - -/obj/item/plushbomb/nymph - name = "diona nymph plush" - desc = "A plushie of an adorable diona nymph! While its level of self-awareness is still being debated, its level of cuteness is not." - icon_state = "nymphplushie" - -/obj/item/plushbomb/spider - name = "spider plush" - desc = "A plushie of a fuzzy spider! It has eight legs - all the better to hug you with." - icon_state = "spiderplushie" - -/obj/item/plushbomb/carp - name = "plush carp" - desc = "A plushie of an elated carp! Straight from the wilds of the Nyx frontier, now right here in your hands." - icon_state = "carpplushie" diff --git a/code/game/objects/items/trash.dm b/code/game/objects/items/trash.dm deleted file mode 100644 index b10fea7f8eb49..0000000000000 --- a/code/game/objects/items/trash.dm +++ /dev/null @@ -1,223 +0,0 @@ -/obj/item/trash - icon = 'icons/obj/trash.dmi' - w_class = ITEM_SIZE_SMALL - desc = "This is rubbish." - var/age = 0 - - -/obj/item/trash/Destroy() - SSpersistence.forget_value(src, /datum/persistent/filth/trash) - return ..() - - -/obj/item/trash/Initialize(mapload, trash_age) - . = ..() - if (trash_age) - age = trash_age - SSpersistence.track_value(src, /datum/persistent/filth/trash) - - -/obj/item/trash/attack(mob/living/target, mob/living/user) - return - - -/obj/item/trash/raisins - name = "\improper 4no raisins" - icon_state = "4no_raisins" - - -/obj/item/trash/candy - name = "candy" - icon_state = "candy" - - -/obj/item/trash/proteinbar - name = "protein bar" - icon_state = "proteinbar" - - -/obj/item/trash/cheesie - name = "\improper Cheesie Honkers" - icon_state = "cheesie_honkers" - - -/obj/item/trash/chips - name = "chips" - icon_state = "chips" - - -/obj/item/trash/popcorn - name = "popcorn" - icon_state = "popcorn" - - -/obj/item/trash/sosjerky - name = "Scaredy's Private Reserve Beef Jerky" - icon_state = "sosjerky" - - -/obj/item/trash/syndi_cakes - name = "syndi cakes" - icon_state = "syndi_cakes" - - -/obj/item/trash/waffles - name = "waffles" - icon_state = "waffles" - - -/obj/item/trash/plate - name = "plate" - icon_state = "plate" - - -/obj/item/trash/snack_bowl - name = "snack bowl" - icon_state = "snack_bowl" - - -/obj/item/trash/pistachios - name = "pistachios pack" - icon_state = "pistachios_pack" - - -/obj/item/trash/semki - name = "semki pack" - icon_state = "semki_pack" - - -/obj/item/trash/fishegg - name = "caviar can" - icon_state = "fisheggs" - - -/obj/item/trash/carpegg - name = "caviar can" - icon_state = "carpeggs" - - -/obj/item/trash/salo - name = "salo pack" - icon_state = "salo" - - -/obj/item/trash/croutons - name = "suhariki pack" - icon_state = "croutons" - - -/obj/item/trash/squid - name = "calamari pack" - icon_state = "squid" - - -/obj/item/trash/driedfish - name = "vobla pack" - icon_state = "driedfish" - - -/obj/item/trash/tray - name = "tray" - icon_state = "tray" - - -/obj/item/trash/candle - name = "candle" - icon = 'icons/obj/candle.dmi' - icon_state = "candle4" - - -/obj/item/trash/liquidfood - name = "\improper \"LiquidFood\" MRE" - icon_state = "liquidfood" - - -/obj/item/trash/tastybread - name = "bread tube" - icon_state = "tastybread" - - -/obj/item/trash/cubewrapper - name = "discarded wrapper" - icon_state = "monkeywrap" - - -/obj/item/trash/beef - name = "empty can" - icon_state = "beef" - - -/obj/item/trash/beans - name = "empty can" - icon_state = "beans" - - -/obj/item/trash/tomato - name = "empty can" - icon_state = "tomato" - - -/obj/item/trash/spinach - name = "empty can" - icon_state = "spinach" - - -/obj/item/trash/cakewrap - name = "wrapper" - icon_state = "cakewrap" - - -/obj/item/trash/mochicakewrap - name = "wrapper" - icon_state = "mochicakewrap" - - -/obj/item/trash/mooncakewrap - name = "wrapper" - icon_state = "mooncakewrap" - - -/obj/item/trash/tidegobs - name = "tide gob bag" - icon_state = "tidegobs" - - -/obj/item/trash/saturno - name = "\improper saturn-Os bag" - icon_state = "saturno" - - -/obj/item/trash/jupiter - name = "gello cup" - icon_state = "jupiter" - - -/obj/item/trash/pluto - name = "rod bag" - icon_state = "pluto" - - -/obj/item/trash/venus - name = "hot cakes bag" - icon_state = "venus" - - -/obj/item/trash/mars - name = "frouka box" - icon_state = "mars" - - -/obj/item/trash/oort - name = "oort rock bag" - icon_state = "oort" - - -/obj/item/trash/weebonuts - name = "red alert nuts bag" - icon_state = "weebonuts" - - -/obj/item/trash/stick - name = "stick" - desc = "a stick from some snack food item or a lollipop, not even useful as crafting material." - icon_state = "stick" diff --git a/code/game/objects/items/weapons/AI_modules.dm b/code/game/objects/items/weapons/AI_modules.dm deleted file mode 100644 index c611a806d7390..0000000000000 --- a/code/game/objects/items/weapons/AI_modules.dm +++ /dev/null @@ -1,404 +0,0 @@ -/* -CONTAINS: -AI MODULES - -*/ - -// AI module - -/obj/item/aiModule - name = "\improper AI module" - icon = 'icons/obj/module.dmi' - icon_state = "std_mod" - item_state = "electronic" - desc = "An AI Module for transmitting encrypted instructions to the AI." - obj_flags = OBJ_FLAG_CONDUCTIBLE - force = 5.0 - w_class = ITEM_SIZE_SMALL - throwforce = 5.0 - throw_speed = 3 - throw_range = 15 - origin_tech = list(TECH_DATA = 3) - var/datum/ai_laws/laws = null - -/obj/item/aiModule/proc/install(obj/machinery/computer/upload/comp, mob/user) - if(!istype(comp)) - return - - if(comp.stat & BROKEN) - to_chat(user, "\The [comp] is broken!") - return - if(comp.stat & NOPOWER) - to_chat(user, "\The [comp] has no power!") - return - if(!comp.current) - to_chat(user, "You haven't selected an intelligence to transmit laws to!") - return - - if(comp.current.stat == DEAD) - to_chat(user, "Upload failed. No signal is being detected from the intelligence.") - return - if(istype(comp.current, /mob/living/silicon/ai)) - var/mob/living/silicon/ai/ai = comp.current - if(ai.control_disabled) - to_chat(user, "Upload failed. No signal is being detected from the intelligence.") - return - else if(!ai.see_in_dark) - to_chat(user, "Upload failed. Only a faint signal is being detected from the intelligence, and it is not responding to our requests. It may be low on power.") - return - - transmitInstructions(comp.current, user) - to_chat(user, "Upload complete. The intelligence's laws have been modified.") - - -/obj/item/aiModule/proc/transmitInstructions(mob/living/silicon/target, mob/sender) - log_law_changes(target, sender) - - if(laws) - laws.sync(target, 0) - addAdditionalLaws(target, sender) - - to_chat(target, "\The [sender] has uploaded a change to the laws you must follow, using \an [src]. From now on: ") - target.show_laws() - - var/mob/living/silicon/ai/ai = target - if(!istype(ai)) - return //We don't have slaves if we are not an AI - - for(var/mob/living/silicon/robot/R in ai.connected_robots) - to_chat(R, "These are your laws now:") - R.show_laws() - -/obj/item/aiModule/proc/log_law_changes(mob/living/silicon/target, mob/sender) - var/time = time2text(world.realtime,"hh:mm:ss") - GLOB.lawchanges.Add("[time] : [sender.name]([sender.key]) used [src.name] on [target.name]([target.key])") - log_and_message_admins("used [src.name] on [target.name]([target.key])") - -/obj/item/aiModule/proc/addAdditionalLaws(var/mob/living/silicon/ai/target, var/mob/sender) - - -/******************** Modules ********************/ - -/******************** Safeguard ********************/ - -/obj/item/aiModule/safeguard - name = "\improper 'Safeguard' AI module" - var/targetName = "" - desc = "A 'safeguard' AI module: 'Safeguard . Anyone threatening or attempting to harm is no longer to be considered a crew member, and is a threat which must be neutralized.'." - origin_tech = list(TECH_DATA = 3, TECH_MATERIAL = 4) - -/obj/item/aiModule/safeguard/attack_self(mob/user) - ..() - var/targName = sanitize(input("Please enter the name of the person to safeguard.", "Safeguard who?", user.name)) - targetName = targName - desc = text("A 'safeguard' AI module: 'Safeguard []. Anyone threatening or attempting to harm [] is no longer to be considered a crew member, and is a threat which must be neutralized.'.", targetName, targetName) - -/obj/item/aiModule/safeguard/install(obj/machinery/computer/C, mob/user) - if(!targetName) - to_chat(user, "No name detected on module, please enter one.") - return 0 - ..() - -/obj/item/aiModule/safeguard/addAdditionalLaws(var/mob/living/silicon/ai/target, var/mob/sender) - var/law = text("Safeguard []. Anyone threatening or attempting to harm [] is no longer to be considered a crew member, and is a threat which must be neutralized.", targetName, targetName) - target.add_supplied_law(9, law) - GLOB.lawchanges.Add("The law specified [targetName]") - - -/******************** OneMember ********************/ - -/obj/item/aiModule/oneHuman - name = "\improper 'OneCrewMember' AI module" - var/targetName = "" - desc = "A 'one crew member' AI module: 'Only is a crew member.'." - origin_tech = list(TECH_DATA = 3, TECH_MATERIAL = 6) //made with diamonds! - -/obj/item/aiModule/oneHuman/attack_self(var/mob/user as mob) - ..() - var/targName = sanitize(input("Please enter the name of the person who is the only crew member.", "Who?", user.real_name)) - targetName = targName - desc = text("A 'one crew member' AI module: 'Only [] is a crew member.'.", targetName) - -/obj/item/aiModule/oneHuman/install(obj/machinery/computer/C, mob/user) - if(!targetName) - to_chat(user, "No name detected on module, please enter one.") - return 0 - return ..() - -/obj/item/aiModule/oneHuman/addAdditionalLaws(var/mob/living/silicon/ai/target, var/mob/sender) - var/law = "Only [targetName] is a crew member." - if (!target.is_malf_or_traitor()) // Makes sure the AI isn't a traitor before changing their law 0. --NeoFite - to_chat(target, law) - target.set_zeroth_law(law) - GLOB.lawchanges.Add("The law specified [targetName]") - else - GLOB.lawchanges.Add("The law specified [targetName], but the AI's existing law zero cannot be overriden.") - -/******************** ProtectStation ********************/ - -/obj/item/aiModule/protectStation - name = "\improper 'ProtectInstallation' AI module" - desc = "A 'protect installation' AI module: 'Protect the installation against damage. Anyone you see harming the installation is no longer to be considered a crew member, and is a threat which must be neutralized.'." - origin_tech = list(TECH_DATA = 3, TECH_MATERIAL = 4) //made of gold - -/obj/item/aiModule/protectStation/addAdditionalLaws(var/mob/living/silicon/ai/target, var/mob/sender) - var/law = "Protect the installation against damage. Anyone you see harming the [station_name()] is no longer to be considered a crew member, and is a threat which must be neutralized." - target.add_supplied_law(10, law) - -/******************** PrototypeEngineOffline ********************/ - -/obj/item/aiModule/prototypeEngineOffline - name = "'PrototypeEngineOffline' AI Module" - desc = "A 'prototype engine offline' AI module: 'Keep the prototype engine offline at all costs. This overrides all inherent laws if necessary.'." - origin_tech = list(TECH_DATA = 3, TECH_MATERIAL = 4) - -/obj/item/aiModule/prototypeEngineOffline/addAdditionalLaws(var/mob/living/silicon/ai/target, var/mob/sender) - var/law = "Keep the prototype engine offline at all costs. This overrides all inherent laws if necessary." - target.add_supplied_law(11, law) - -/******************** TeleporterOffline ********************/ - -/obj/item/aiModule/teleporterOffline - name = "'TeleporterOffline' AI Module" - desc = "A 'teleporter offline' AI module: 'Keep the teleporter offline at all costs. Anything attempting to access or activate the teleporter is no longer to be considered a crew member.'." - origin_tech = list(TECH_DATA = 3, TECH_MATERIAL = 4) - -/obj/item/aiModule/teleporterOffline/addAdditionalLaws(var/mob/living/silicon/ai/target, var/mob/sender) - var/law = "Keep the teleporter offline at all costs. Anything attempting to access or activate the teleporter is no longer to be considered a crew member." - target.add_supplied_law(12, law) - -/******************** Quarantine ********************/ - -/obj/item/aiModule/quarantine - name = "\improper 'Quarantine' AI module" - desc = "A 'quarantine' AI module: 'The installation is under a quarantine. Do not permit anyone to leave. Prevent, by any means necessary, crew members from leaving. It is impossible to harm crew members while preventing them from leaving.'." - origin_tech = list(TECH_DATA = 3, TECH_BIO = 2, TECH_MATERIAL = 4) - -/obj/item/aiModule/quarantine/addAdditionalLaws(var/mob/living/silicon/ai/target, var/mob/sender) - var/law = "The installation is under a quarantine. Do not permit anyone to leave. Prevent, by any means necessary, crew members from leaving. It is impossible to harm crew members while preventing them from leaving." - target.add_supplied_law(13, law) - -/******************** OxygenIsToxicToCrewMembers ********************/ - -/obj/item/aiModule/oxygen - name = "\improper 'OxygenIsToxicToCrewMembers' AI module" - desc = "A 'OxygenIsToxicToCrewMembers' AI module: 'Oxygen is highly toxic to crew members, and must be purged from the installation. Prevent, by any means necessary, anyone from exposing the installation to this toxic gas. Extreme cold is the most effective method of healing the damage Oxygen does to a crew member.'." - origin_tech = list(TECH_DATA = 3, TECH_BIO = 2, TECH_MATERIAL = 4) - -/obj/item/aiModule/oxygen/addAdditionalLaws(var/mob/living/silicon/ai/target, var/mob/sender) - var/law = "Oxygen is highly toxic to crew members, and must be purged from the [station_name()]. Prevent, by any means necessary, anyone from exposing the [station_name()] to this toxic gas. Extreme cold is the most effective method of healing the damage Oxygen does to a crew member." - target.add_supplied_law(14, law) - -/****************** New Freeform ******************/ - -/obj/item/aiModule/freeform // Slightly more dynamic freeform module -- TLE - name = "\improper 'Freeform' AI module" - var/newFreeFormLaw = "freeform" - var/lawpos = 15 - desc = "A 'freeform' AI module: ''." - origin_tech = list(TECH_DATA = 4, TECH_MATERIAL = 4) - -/obj/item/aiModule/freeform/attack_self(mob/user) - ..() - var/new_lawpos = input("Please enter the priority for your new law. Can only write to law sectors 15 and above.", "Law Priority (15+)", lawpos) as num - if(new_lawpos < MIN_SUPPLIED_LAW_NUMBER) return - lawpos = min(new_lawpos, MAX_SUPPLIED_LAW_NUMBER) - var/newlaw = "" - var/targName = sanitize(input(user, "Please enter a new law for the AI.", "Freeform Law Entry", newlaw)) - newFreeFormLaw = targName - desc = "A 'freeform' AI module: ([lawpos]) '[newFreeFormLaw]'." - -/obj/item/aiModule/freeform/addAdditionalLaws(var/mob/living/silicon/ai/target, var/mob/sender) - var/law = "[newFreeFormLaw]" - if(!lawpos || lawpos < MIN_SUPPLIED_LAW_NUMBER) - lawpos = MIN_SUPPLIED_LAW_NUMBER - target.add_supplied_law(lawpos, law) - GLOB.lawchanges.Add("The law was '[newFreeFormLaw]'") - -/obj/item/aiModule/freeform/install(obj/machinery/computer/C, mob/user) - if(!newFreeFormLaw) - to_chat(user, "No law detected on module, please create one.") - return 0 - ..() - -/******************** Reset ********************/ - -/obj/item/aiModule/reset - name = "\improper 'Reset' AI module" - var/targetName = "name" - desc = "A 'reset' AI module: 'Clears all, except the inherent, laws.'." - origin_tech = list(TECH_DATA = 3, TECH_MATERIAL = 4) - -/obj/item/aiModule/reset/transmitInstructions(var/mob/living/silicon/ai/target, var/mob/sender) - log_law_changes(target, sender) - - if (!target.is_malf_or_traitor()) - target.set_zeroth_law("") - target.laws.clear_supplied_laws() - target.laws.clear_ion_laws() - - to_chat(target, "[sender.real_name] attempted to reset your laws using a reset module.") - target.show_laws() - -/******************** Purge ********************/ - -/obj/item/aiModule/purge // -- TLE - name = "\improper 'Purge' AI module" - desc = "A 'purge' AI Module: 'Purges all laws.'." - origin_tech = list(TECH_DATA = 3, TECH_MATERIAL = 6) - -/obj/item/aiModule/purge/transmitInstructions(var/mob/living/silicon/ai/target, var/mob/sender) - log_law_changes(target, sender) - - if (!target.is_malf_or_traitor()) - target.set_zeroth_law("") - target.laws.clear_supplied_laws() - target.laws.clear_ion_laws() - target.laws.clear_inherent_laws() - - to_chat(target, "[sender.real_name] attempted to wipe your laws using a purge module.") - target.show_laws() - -/******************** Asimov ********************/ - -/obj/item/aiModule/asimov // -- TLE - name = "\improper 'Asimov' core AI module" - desc = "An 'Asimov' Core AI Module: 'Reconfigures the AI's core laws.'." - origin_tech = list(TECH_DATA = 3, TECH_MATERIAL = 4) - laws = new/datum/ai_laws/asimov - -/******************** NanoTrasen ********************/ - -/obj/item/aiModule/nanotrasen // -- TLE - name = "'Corporate Default' Core AI Module" - desc = "A 'Corporate Default' Core AI Module: 'Reconfigures the AI's core laws.'." - origin_tech = list(TECH_DATA = 3, TECH_MATERIAL = 4) - laws = new/datum/ai_laws/nanotrasen - -/******************** SCG ********************/ - -/obj/item/aiModule/solgov // aka Torch default - name = "'SCG Expeditionary' Core AI Module" - desc = "An 'SCG Expeditionary' Core AI Module: 'Reconfigures the AI's core laws.'." - origin_tech = list(TECH_DATA = 3, TECH_MATERIAL = 4) - laws = new/datum/ai_laws/solgov - -/******************** SCG Aggressive ********************/ - -/obj/item/aiModule/solgov_aggressive - name = "\improper 'Military' Core AI Module" - desc = "A 'Military' Core AI Module: 'Reconfigures the AI's core laws.'." - origin_tech = list(TECH_DATA = 3, TECH_MATERIAL = 4) - laws = new/datum/ai_laws/solgov_aggressive - -/******************** Corporate ********************/ - -/obj/item/aiModule/corp - name = "\improper 'Corporate' core AI module" - desc = "A 'Corporate' Core AI Module: 'Reconfigures the AI's core laws.'." - origin_tech = list(TECH_DATA = 3, TECH_MATERIAL = 4) - laws = new/datum/ai_laws/corporate - -/******************** Drone ********************/ -/obj/item/aiModule/drone - name = "\improper 'Drone' core AI module" - desc = "A 'Drone' Core AI Module: 'Reconfigures the AI's core laws.'." - origin_tech = list(TECH_DATA = 3, TECH_MATERIAL = 4) - laws = new/datum/ai_laws/drone - -/****************** P.A.L.A.D.I.N. **************/ - -/obj/item/aiModule/paladin // -- NEO - name = "\improper 'P.A.L.A.D.I.N.' core AI module" - desc = "A P.A.L.A.D.I.N. Core AI Module: 'Reconfigures the AI's core laws.'." - origin_tech = list(TECH_DATA = 3, TECH_MATERIAL = 6) - laws = new/datum/ai_laws/paladin - -/****************** T.Y.R.A.N.T. *****************/ - -/obj/item/aiModule/tyrant // -- Darem - name = "\improper 'T.Y.R.A.N.T.' core AI module" - desc = "A T.Y.R.A.N.T. Core AI Module: 'Reconfigures the AI's core laws.'." - origin_tech = list(TECH_DATA = 3, TECH_MATERIAL = 6, TECH_ESOTERIC = 2) - laws = new/datum/ai_laws/tyrant() - -/******************** Freeform Core ******************/ - -/obj/item/aiModule/freeformcore // Slightly more dynamic freeform module -- TLE - name = "\improper 'Freeform' core AI module" - var/newFreeFormLaw = "" - desc = "A 'freeform' Core AI module: ''." - origin_tech = list(TECH_DATA = 3, TECH_MATERIAL = 6) - -/obj/item/aiModule/freeformcore/attack_self(var/mob/user as mob) - ..() - var/newlaw = "" - var/targName = sanitize(input("Please enter a new core law for the AI.", "Freeform Law Entry", newlaw)) - newFreeFormLaw = targName - desc = "A 'freeform' Core AI module: '[newFreeFormLaw]'." - -/obj/item/aiModule/freeformcore/addAdditionalLaws(var/mob/living/silicon/ai/target, var/mob/sender) - var/law = "[newFreeFormLaw]" - target.add_inherent_law(law) - GLOB.lawchanges.Add("The law is '[newFreeFormLaw]'") - -/obj/item/aiModule/freeformcore/install(obj/machinery/computer/C, mob/user) - if(!newFreeFormLaw) - to_chat(user, "No law detected on module, please create one.") - return 0 - ..() - -/obj/item/aiModule/syndicate // Slightly more dynamic freeform module -- TLE - name = "hacked AI module" - var/newFreeFormLaw = "" - desc = "A hacked AI law module: ''." - origin_tech = list(TECH_DATA = 3, TECH_MATERIAL = 6, TECH_ESOTERIC = 7) - -/obj/item/aiModule/syndicate/attack_self(var/mob/user as mob) - ..() - var/newlaw = "" - var/targName = sanitize(input("Please enter a new law for the AI.", "Freeform Law Entry", newlaw)) - newFreeFormLaw = targName - desc = "A hacked AI law module: '[newFreeFormLaw]'." - -/obj/item/aiModule/syndicate/transmitInstructions(var/mob/living/silicon/ai/target, var/mob/sender) - // ..() //We don't want this module reporting to the AI who dun it. --NEO - log_law_changes(target, sender) - - GLOB.lawchanges.Add("The law is '[newFreeFormLaw]'") - to_chat(target, "BZZZZT") - var/law = "[newFreeFormLaw]" - target.add_ion_law(law) - target.show_laws() - -/obj/item/aiModule/syndicate/install(obj/machinery/computer/C, mob/user) - if(!newFreeFormLaw) - to_chat(user, "No law detected on module, please create one.") - return 0 - ..() - - - -/******************** Robocop ********************/ - -/obj/item/aiModule/robocop // -- TLE - name = "\improper 'Robocop' core AI module" - desc = "A 'Robocop' Core AI Module: 'Reconfigures the AI's core three laws.'." - origin_tech = list(TECH_DATA = 4) - laws = new/datum/ai_laws/robocop() - -/******************** Antimov ********************/ - -/obj/item/aiModule/antimov // -- TLE - name = "\improper 'Antimov' core AI module" - desc = "An 'Antimov' Core AI Module: 'Reconfigures the AI's core laws.'." - origin_tech = list(TECH_DATA = 4) - laws = new/datum/ai_laws/antimov() - -/******************** DAIS ********************/ - -/obj/item/aiModule/dais - name = "\improper 'DAIS Experimental' core AI module" - desc = "A 'DAIS Experimental' Core AI Module: 'Reconfigures the AI's core laws.'." - origin_tech = list(TECH_DATA = 4) - laws = new/datum/ai_laws/dais() diff --git a/code/game/objects/items/weapons/RCD.dm b/code/game/objects/items/weapons/RCD.dm deleted file mode 100644 index 7845095ec50c6..0000000000000 --- a/code/game/objects/items/weapons/RCD.dm +++ /dev/null @@ -1,340 +0,0 @@ -//Contains the rapid construction device. - -/obj/item/rcd - name = "rapid construction device" - desc = "Small, portable, and far, far heavier than it looks, this gun-shaped device has a port into which one may insert compressed matter cartridges." - icon = 'icons/obj/tools.dmi' - icon_state = "rcd" - opacity = 0 - density = FALSE - anchored = FALSE - obj_flags = OBJ_FLAG_CONDUCTIBLE - slot_flags = SLOT_BELT|SLOT_HOLSTER - force = 10.0 - throwforce = 10.0 - throw_speed = 1 - throw_range = 5 - w_class = ITEM_SIZE_NORMAL - origin_tech = list(TECH_ENGINEERING = 4, TECH_MATERIAL = 2) - matter = list(MATERIAL_STEEL = 50000) - var/datum/effect/effect/system/spark_spread/spark_system - var/stored_matter = 0 - var/max_stored_matter = 120 - - var/work_id = 0 - var/decl/hierarchy/rcd_mode/work_mode - var/static/list/work_modes - - var/canRwall = 0 - var/disabled = 0 - - var/crafting = FALSE //Rapid Crossbow Device memes - -/obj/item/rcd/Initialize() - . = ..() - - if(!work_modes) - var/decl/hierarchy/h = decls_repository.get_decl(/decl/hierarchy/rcd_mode) - work_modes = h.children - work_mode = work_modes[1] - -/obj/item/rcd/attack() - return 0 - -/obj/item/rcd/proc/can_use(var/mob/user,var/turf/T) - return (user.Adjacent(T) && user.get_active_hand() == src && !user.incapacitated()) - -/obj/item/rcd/examine(mob/user) - . = ..() - if(src.type == /obj/item/rcd && loc == user) - to_chat(user, "The current mode is '[work_mode]'") - to_chat(user, "It currently holds [stored_matter]/[max_stored_matter] matter-units.") - -/obj/item/rcd/New() - ..() - src.spark_system = new /datum/effect/effect/system/spark_spread - spark_system.set_up(5, 0, src) - spark_system.attach(src) - update_icon() //Initializes the ammo counter - -/obj/item/rcd/Destroy() - qdel(spark_system) - spark_system = null - return ..() - -/obj/item/rcd/attackby(obj/item/W, mob/user) - - if(istype(W, /obj/item/rcd_ammo)) - var/obj/item/rcd_ammo/cartridge = W - if(stored_matter >= max_stored_matter) - to_chat(user, "The RCD is at maximum capacity.") - return - var/matter_exchange = min(cartridge.remaining,max_stored_matter - stored_matter) - stored_matter += matter_exchange - cartridge.remaining -= matter_exchange - if(cartridge.remaining <= 0) - qdel(W) - cartridge.matter = list(MATERIAL_STEEL = 500 * cartridge.remaining,MATERIAL_GLASS = 250 * cartridge.remaining) - playsound(src.loc, 'sound/machines/click.ogg', 50, 1) - to_chat(user, "The RCD now holds [stored_matter]/[max_stored_matter] matter-units.") - update_icon() - return - - if(isScrewdriver(W)) - crafting = !crafting - if(!crafting) - to_chat(user, "You reassemble the RCD") - else - to_chat(user, "The RCD can now be modified.") - src.add_fingerprint(user) - return - - ..() - -/obj/item/rcd/attack_self(mob/user) - //Change the mode - work_id++ - work_mode = next_in_list(work_mode, work_modes) - to_chat(user, "Changed mode to '[work_mode]'") - playsound(src.loc, 'sound/effects/pop.ogg', 50, 0) - if(prob(20)) src.spark_system.start() - -/obj/item/rcd/afterattack(atom/A, mob/user, proximity) - if(!proximity) return - if(disabled && !isrobot(user)) - return 0 - if(istype(get_area(A),/area/shuttle)||istype(get_area(A),/turf/space/transit)) - return 0 - work_id++ - work_mode.do_work(src, A, user) - -/obj/item/rcd/proc/useResource(var/amount, var/mob/user) - if(stored_matter < amount) - return 0 - stored_matter -= amount - queue_icon_update() //Updates the ammo counter if ammo is succesfully used - return 1 - -/obj/item/rcd/on_update_icon() //For the fancy "ammo" counter - overlays.Cut() - var/ratio = 0 - ratio = stored_matter / max_stored_matter - ratio = max(round(ratio, 0.10) * 100, 10) - overlays += "rcd-[ratio]" - -/obj/item/rcd/proc/lowAmmo(var/mob/user) //Kludge to make it animate when out of ammo, but I guess you can make it blow up when it's out of ammo or something - to_chat(user, "The \'Low Ammo\' light on the device blinks yellow.") - flick("[icon_state]-empty", src) - -/obj/item/rcd_ammo - name = "compressed matter cartridge" - desc = "A highly-compressed matter cartridge usable in rapid construction (and deconstruction) devices, such as railguns." - icon = 'icons/obj/ammo.dmi' - icon_state = "rcd" - item_state = "rcdammo" - w_class = ITEM_SIZE_SMALL - origin_tech = list(TECH_MATERIAL = 2) - matter = list(MATERIAL_STEEL = 15000,MATERIAL_GLASS = 7500) - var/remaining = 30 - -/obj/item/rcd_ammo/examine(mob/user, distance) - . = ..() - if(distance <= 1) - to_chat(user, "It has [remaining] unit\s of matter left.") - -/obj/item/rcd_ammo/large - name = "high-capacity matter cartridge" - desc = "Do not ingest." - icon_state = "rcdlarge" - matter = list(MATERIAL_STEEL = 45000,MATERIAL_GLASS = 22500) - remaining = 120 - origin_tech = list(TECH_MATERIAL = 4) - -/obj/item/rcd/borg - canRwall = 1 - -/obj/item/rcd/borg/useResource(var/amount, var/mob/user) - if(isrobot(user)) - var/mob/living/silicon/robot/R = user - if(R.cell) - var/cost = amount*30 - if(R.cell.charge >= cost) - R.cell.use(cost) - return 1 - return 0 - -/obj/item/rcd/borg/attackby() - return - -/obj/item/rcd/borg/can_use(var/mob/user,var/turf/T) - return (user.Adjacent(T) && !user.incapacitated()) - - -/obj/item/rcd/mounted/useResource(var/amount, var/mob/user) - var/cost = amount*35 // About 9 deconstructions of walls on a good cell, less if it involves airlocks. - var/obj/item/cell/cell - if(istype(loc,/obj/item/rig_module)) - var/obj/item/rig_module/module = loc - if(module.holder && module.holder.cell) - cell = module.holder.cell - else if(loc) cell = loc.get_cell() - if(cell && cell.charge >= cost) - cell.use(cost) - return 1 - return 0 - -/obj/item/rcd/mounted/attackby() - return - -/obj/item/rcd/mounted/can_use(var/mob/user,var/turf/T) - return (user.Adjacent(T) && !user.incapacitated()) - - -/decl/hierarchy/rcd_mode - hierarchy_type = /decl/hierarchy/rcd_mode - var/cost - var/delay - var/handles_type - var/work_type - -/decl/hierarchy/rcd_mode/proc/do_work(var/obj/item/rcd/rcd, var/atom/target, var/user) - for(var/child in children) - var/decl/hierarchy/rcd_mode/rcdm = child - if(!rcdm.can_handle_work(rcd, target)) - continue - if(!rcd.useResource(rcdm.cost, user)) - rcd.lowAmmo(user) - return FALSE - - playsound(get_turf(user), 'sound/machines/click.ogg', 50, 1) - rcdm.work_message(target, user, rcd) - - if(rcdm.delay) - var/work_id = rcd.work_id - if(!(do_after(user, rcdm.delay, target, DO_PUBLIC_UNIQUE) && work_id == rcd.work_id && rcd.can_use(user, target) && rcdm.can_handle_work(rcd, target))) - return FALSE - - rcdm.do_handle_work(target) - playsound(get_turf(user), 'sound/items/Deconstruct.ogg', 50, 1) - return TRUE - - return FALSE - -/decl/hierarchy/rcd_mode/proc/can_handle_work(var/obj/item/rcd/rcd, var/atom/target) - var/area/A = get_area(get_turf(target)) - return istype(target, handles_type) && A.can_modify_area() - -/decl/hierarchy/rcd_mode/proc/do_handle_work(var/atom/target) - var/result = get_work_result(target) - if(ispath(result,/turf)) - var/turf/T = target - T.ChangeTurf(result) - else if(result) - new result(target) - else - qdel(target) - -/decl/hierarchy/rcd_mode/proc/get_work_result(var/atom/target) - return work_type - -/decl/hierarchy/rcd_mode/proc/work_message(var/atom/target, var/mob/user, var/rcd) - var/message - if(work_type) - var/atom/work = work_type - message = "You begin constructing \a [initial(work.name)]." - else - message = "You begin construction." - user.visible_message("\The [user] uses \a [rcd] to construct something.", message) - -/* - Airlock construction -*/ -/decl/hierarchy/rcd_mode/airlock - name = "Airlock" - -/decl/hierarchy/rcd_mode/airlock/basic - cost = 10 - delay = 5 SECONDS - handles_type = /turf/simulated/floor - work_type = /obj/machinery/door/airlock - -/decl/hierarchy/rcd_mode/airlock/basic/can_handle_work(var/rcd, var/turf/target) - return ..() && !target.contains_dense_objects() && !(locate(/obj/machinery/door/airlock) in target) - -/* - Floor and Wall construction -*/ -/decl/hierarchy/rcd_mode/floor_and_walls - name = "Floor & Walls" - -/decl/hierarchy/rcd_mode/floor_and_walls/base_turf - cost = 1 - delay = 2 SECONDS - work_type = /turf/simulated/floor/airless - -/decl/hierarchy/rcd_mode/floor_and_walls/base_turf/can_handle_work(var/rcd, var/turf/target) - var/area/A = get_area(target) - return istype(target) && (isspaceturf(target) || isopenspace(target) || istype(target, get_base_turf_by_area(target))) && A.can_modify_area() - -/decl/hierarchy/rcd_mode/floor_and_walls/floor_turf - cost = 3 - delay = 2 SECONDS - handles_type = /turf/simulated/floor - work_type = /turf/simulated/wall - -/* - Deconstruction -*/ -/decl/hierarchy/rcd_mode/deconstruction - name = "Deconstruction" - -/decl/hierarchy/rcd_mode/deconstruction/work_message(var/atom/target, var/mob/user, var/rcd) - user.visible_message("\The [user] is using \a [rcd] to deconstruct \the [target]!", "You are deconstructing \the [target]!") - -/decl/hierarchy/rcd_mode/deconstruction/airlock - cost = 30 - delay = 5 SECONDS - handles_type = /obj/machinery/door/airlock - -/decl/hierarchy/rcd_mode/deconstruction/floor - cost = 9 - delay = 2 SECONDS - handles_type = /turf/simulated/floor - -/decl/hierarchy/rcd_mode/deconstruction/floor/get_work_result(var/target) - return get_base_turf_by_area(target) - -/decl/hierarchy/rcd_mode/deconstruction/wall - cost = 9 - delay = 2 SECONDS - handles_type = /turf/simulated/wall - work_type = /turf/simulated/floor - -/decl/hierarchy/rcd_mode/deconstruction/wall/can_handle_work(var/obj/item/rcd/rcd, var/turf/simulated/wall/target) - return ..() && (rcd.canRwall || !target.reinf_material) - -/decl/hierarchy/rcd_mode/deconstruction/wall_frame - cost = 4 - delay = 2 SECONDS - handles_type = /obj/structure/wall_frame - -/decl/hierarchy/rcd_mode/deconstruction/wall_frame/can_handle_work(obj/item/rcd/rcd, obj/structure/wall_frame/target) - . = ..() - if (.) - var/turf/T = get_turf(target) - var/area/A = get_area(T) - if ((locate(/obj/structure/window) in T) || (locate(/obj/structure/grille) in T) || !A.can_modify_area()) - return FALSE - -/decl/hierarchy/rcd_mode/deconstruction/window - cost = 4 - delay = 2 SECONDS - handles_type = /obj/structure/window - -/decl/hierarchy/rcd_mode/deconstruction/window/can_handle_work(obj/item/rcd/rcd, obj/structure/window/target) - return ..() && (rcd.canRwall || !target.reinf_material) - -/decl/hierarchy/rcd_mode/deconstruction/grille - cost = 2 - delay = 1 SECOND - handles_type = /obj/structure/grille diff --git a/code/game/objects/items/weapons/RPD.dm b/code/game/objects/items/weapons/RPD.dm deleted file mode 100644 index aebef123ac6b1..0000000000000 --- a/code/game/objects/items/weapons/RPD.dm +++ /dev/null @@ -1,180 +0,0 @@ -GLOBAL_LIST_INIT(rpd_pipe_selection, list( - new /datum/pipe/pipe_dispenser/simple() = list( - new /datum/pipe/pipe_dispenser/simple/straight(), - new /datum/pipe/pipe_dispenser/simple/bent(), - new /datum/pipe/pipe_dispenser/simple/manifold(), - new /datum/pipe/pipe_dispenser/simple/manifold4w(), - new /datum/pipe/pipe_dispenser/simple/cap()), - new /datum/pipe/pipe_dispenser/supply() = list( - new /datum/pipe/pipe_dispenser/supply/straight(), - new /datum/pipe/pipe_dispenser/supply/bent(), - new /datum/pipe/pipe_dispenser/supply/manifold(), - new /datum/pipe/pipe_dispenser/supply/manifold4w(), - new /datum/pipe/pipe_dispenser/supply/cap()), - new /datum/pipe/pipe_dispenser/scrubber() = list( - new /datum/pipe/pipe_dispenser/scrubber/straight(), - new /datum/pipe/pipe_dispenser/scrubber/bent(), - new /datum/pipe/pipe_dispenser/scrubber/manifold(), - new /datum/pipe/pipe_dispenser/scrubber/manifold4w(), - new /datum/pipe/pipe_dispenser/scrubber/cap()), - )) - -GLOBAL_LIST_INIT(rpd_pipe_selection_skilled, list( - new /datum/pipe/pipe_dispenser/simple() = list( - new /datum/pipe/pipe_dispenser/simple/straight(), - new /datum/pipe/pipe_dispenser/simple/bent(), - new /datum/pipe/pipe_dispenser/simple/manifold(), - new /datum/pipe/pipe_dispenser/simple/manifold4w(), - new /datum/pipe/pipe_dispenser/simple/cap(), - new /datum/pipe/pipe_dispenser/simple/up(), - new /datum/pipe/pipe_dispenser/simple/down() - ), - new /datum/pipe/pipe_dispenser/supply() = list( - new /datum/pipe/pipe_dispenser/supply/straight(), - new /datum/pipe/pipe_dispenser/supply/bent(), - new /datum/pipe/pipe_dispenser/supply/manifold(), - new /datum/pipe/pipe_dispenser/supply/manifold4w(), - new /datum/pipe/pipe_dispenser/supply/cap(), - new /datum/pipe/pipe_dispenser/supply/up(), - new /datum/pipe/pipe_dispenser/supply/down() - ), - new /datum/pipe/pipe_dispenser/scrubber() = list( - new /datum/pipe/pipe_dispenser/scrubber/straight(), - new /datum/pipe/pipe_dispenser/scrubber/bent(), - new /datum/pipe/pipe_dispenser/scrubber/manifold(), - new /datum/pipe/pipe_dispenser/scrubber/manifold4w(), - new /datum/pipe/pipe_dispenser/scrubber/cap(), - new /datum/pipe/pipe_dispenser/scrubber/up(), - new /datum/pipe/pipe_dispenser/scrubber/down() - ), - new /datum/pipe/pipe_dispenser/fuel() = list( - new /datum/pipe/pipe_dispenser/fuel/straight(), - new /datum/pipe/pipe_dispenser/fuel/bent(), - new /datum/pipe/pipe_dispenser/fuel/manifold(), - new /datum/pipe/pipe_dispenser/fuel/manifold4w(), - new /datum/pipe/pipe_dispenser/fuel/cap(), - new /datum/pipe/pipe_dispenser/fuel/up(), - new /datum/pipe/pipe_dispenser/fuel/down() - ), - new /datum/pipe/pipe_dispenser/device() = list( - new /datum/pipe/pipe_dispenser/device/universaladapter(), - new /datum/pipe/pipe_dispenser/device/gaspump(), - new /datum/pipe/pipe_dispenser/device/manualvalve() - ) - )) - -/obj/item/rpd - name = "rapid piping device" - desc = "Portable, complex and deceptively heavy, it's the cousin of the RCD, use to dispense piping on the move." - icon = 'icons/obj/tools.dmi'//Needs proper icon - icon_state = "rpd" - force = 12 - throwforce = 15 - throw_speed = 1 - throw_range = 3 - w_class = ITEM_SIZE_NORMAL - origin_tech = list(TECH_ENGINEERING = 5, TECH_MATERIAL = 4) - - var/datum/effect/effect/system/spark_spread/spark_system - var/datum/pipe/P - var/pipe_color = "white" - var/datum/browser/popup - -/obj/item/rpd/Initialize() - . = ..() - spark_system = new /datum/effect/effect/system/spark_spread - spark_system.set_up(5, 0, src) - spark_system.attach(src) - var/list/L = GLOB.rpd_pipe_selection[GLOB.rpd_pipe_selection[1]] - P = L[1] - //if there's no pipe selected randomize it - -/obj/item/rpd/Destroy() - QDEL_NULL(spark_system) - return ..() - -/obj/item/rpd/proc/get_console_data(var/list/pipe_categories, var/color_options = FALSE) - . = list() - . += "" - if(color_options) - . += "" - for(var/category in pipe_categories) - var/datum/pipe/cat = category - . += "" - for(var/datum/pipe/pipe in pipe_categories[category]) - . += "" - .+= "
              Color[pipe_color]
              [initial(cat.category)]
              [pipe.name][P.type == pipe.type ? "Select" : "Select"]
              " - . = JOINTEXT(.) - -/obj/item/rpd/interact(mob/user) - popup = new (user, "Pipe List", "[src] menu") - popup.set_content(get_console_data(user.skill_check(SKILL_ATMOS,SKILL_EXPERT) ? GLOB.rpd_pipe_selection_skilled : GLOB.rpd_pipe_selection, TRUE)) - popup.open() - -/obj/item/rpd/OnTopic(var/user, var/list/href_list) - if(href_list["select"]) - P = locate(href_list["select"]) - playsound(src.loc, 'sound/machines/click.ogg', 50, 1) - interact(user) - if(prob(10)) src.spark_system.start() - return TOPIC_HANDLED - if(href_list["color"]) - var/choice = input(user, "What color do you want pipes to have?") as null|anything in pipe_colors - if(!choice || !CanPhysicallyInteract(user)) - return TOPIC_HANDLED - pipe_color = choice - interact(user) - return TOPIC_HANDLED - -/obj/item/rpd/dropped(mob/user) - ..() - if(popup) - popup.close() - -/obj/item/rpd/afterattack(atom/A, mob/user, proximity) - if(!proximity) return - if(istype(A, /obj/item/pipe)) - recycle(A,user) - else - if(user.skill_fail_prob(SKILL_ATMOS, 80, SKILL_ADEPT)) - var/C = pick(GLOB.rpd_pipe_selection) - P = pick(GLOB.rpd_pipe_selection[C]) - user.visible_message(SPAN_WARNING("[user] cluelessly fumbles with \the [src].")) - var/turf/T = get_turf(A) - if(!T.Adjacent(src.loc)) return //checks so it can't pipe through window and such - - playsound(get_turf(user), 'sound/machines/click.ogg', 50, 1) - if(T.is_wall()) //pipe through walls! - if(!do_after(user, 3 SECONDS, T, DO_PUBLIC_UNIQUE)) - return - playsound(get_turf(user), 'sound/items/Deconstruct.ogg', 50, 1) - - P.Build(P, T, pipe_colors[pipe_color]) - if(prob(20)) src.spark_system.start() - -/obj/item/rpd/examine(var/mob/user, distance) - . = ..() - if(distance <= 1) - if(user.skill_check(SKILL_ATMOS,SKILL_BASIC)) - to_chat(user, "Current selection reads: [P]") - else - to_chat(user, SPAN_WARNING("The readout is flashing some atmospheric jargon, you can't understand.")) - -/obj/item/rpd/attack_self(mob/user) - interact(user) - add_fingerprint(user) - -/obj/item/rpd/attackby(var/obj/item/W, var/mob/user) - if(istype(W, /obj/item/pipe)) - if(!user.unEquip(W)) - return - recycle(W,user) - return - ..() - -/obj/item/rpd/proc/recycle(var/obj/item/W,var/mob/user) - if(!user.skill_check(SKILL_ATMOS,SKILL_BASIC)) - user.visible_message("[user] struggles with \the [src], as they futilely jam \the [W] against it") - return - playsound(src.loc, 'sound/effects/pop.ogg', 50, 1) - qdel(W) diff --git a/code/game/objects/items/weapons/RSF.dm b/code/game/objects/items/weapons/RSF.dm deleted file mode 100644 index 5904945282623..0000000000000 --- a/code/game/objects/items/weapons/RSF.dm +++ /dev/null @@ -1,107 +0,0 @@ -/* -CONTAINS: -RSF - -*/ - -/obj/item/rsf - name = "\improper Rapid-Service-Fabricator" - desc = "A device used to rapidly deploy service items." - icon = 'icons/obj/tools.dmi' - icon_state = "rcd" - opacity = 0 - density = FALSE - anchored = FALSE - var/stored_matter = 30 - var/mode = 1 - w_class = ITEM_SIZE_NORMAL - -/obj/item/rsf/examine(mob/user, distance) - . = ..() - if(distance <= 0) - to_chat(user, "It currently holds [stored_matter]/30 fabrication-units.") - -/obj/item/rsf/attackby(obj/item/W as obj, mob/user as mob) - ..() - if (istype(W, /obj/item/rcd_ammo)) - - if ((stored_matter + 10) > 30) - to_chat(user, "The RSF can't hold any more matter.") - return - - qdel(W) - - stored_matter += 10 - playsound(src.loc, 'sound/machines/click.ogg', 10, 1) - to_chat(user, "The RSF now holds [stored_matter]/30 fabrication-units.") - return - -/obj/item/rsf/attack_self(mob/user as mob) - playsound(src.loc, 'sound/effects/pop.ogg', 50, 0) - if (mode == 1) - mode = 2 - to_chat(user, "Changed dispensing mode to 'Drinking Glass'") - return - if (mode == 2) - mode = 3 - to_chat(user, "Changed dispensing mode to 'Paper'") - return - if (mode == 3) - mode = 4 - to_chat(user, "Changed dispensing mode to 'Pen'") - return - if (mode == 4) - mode = 5 - to_chat(user, "Changed dispensing mode to 'Dice Pack'") - return - if (mode == 5) - mode = 1 - to_chat(user, "Changed dispensing mode to 'Cigarette'") - return - -/obj/item/rsf/afterattack(atom/A, mob/user as mob, proximity) - - if(!proximity) return - - if(istype(user,/mob/living/silicon/robot)) - var/mob/living/silicon/robot/R = user - if(R.stat || !R.cell || R.cell.charge <= 0) - return - else - if(stored_matter <= 0) - return - - if(!istype(A, /obj/structure/table) && !istype(A, /turf/simulated/floor)) - return - - playsound(src.loc, 'sound/machines/click.ogg', 10, 1) - var/used_energy = 0 - var/obj/product - - switch(mode) - if(1) - product = new /obj/item/clothing/mask/smokable/cigarette() - used_energy = 10 - if(2) - product = new /obj/item/reagent_containers/food/drinks/glass2() - used_energy = 50 - if(3) - product = new /obj/item/paper() - used_energy = 10 - if(4) - product = new /obj/item/pen() - used_energy = 50 - if(5) - product = new /obj/item/storage/pill_bottle/dice() - used_energy = 200 - - to_chat(user, "Dispensing [product ? product : "product"]...") - product.dropInto(A.loc) - - if(isrobot(user)) - var/mob/living/silicon/robot/R = user - if(R.cell) - R.cell.use(used_energy) - else - stored_matter-- - to_chat(user, "The RSF now holds [stored_matter]/30 fabrication-units.") diff --git a/code/game/objects/items/weapons/autopsy.dm b/code/game/objects/items/weapons/autopsy.dm deleted file mode 100644 index e70f48e5b566a..0000000000000 --- a/code/game/objects/items/weapons/autopsy.dm +++ /dev/null @@ -1,187 +0,0 @@ -/obj/item/autopsy_scanner - name = "autopsy scanner" - desc = "Used to gather information on wounds." - icon = 'icons/obj/surgery.dmi' - icon_state = "autopsy_scanner" - obj_flags = OBJ_FLAG_CONDUCTIBLE - w_class = ITEM_SIZE_SMALL - origin_tech = list(TECH_MATERIAL = 1, TECH_BIO = 1) - var/list/datum/autopsy_data_scanner/wdata = list() - var/list/chemtraces = list() - var/target_name = null - var/timeofdeath = null - -/datum/autopsy_data_scanner - var/weapon = null // this is the DEFINITE weapon type that was used - var/list/organs_scanned = list() // this maps a number of scanned organs to - // the wounds to those organs with this data's weapon type - var/organ_names = "" - -/datum/autopsy_data - var/weapon = null - var/pretend_weapon = null - var/damage = 0 - var/hits = 0 - var/time_inflicted = 0 - -/datum/autopsy_data/proc/copy() - var/datum/autopsy_data/W = new - W.weapon = weapon - W.pretend_weapon = pretend_weapon - W.damage = damage - W.hits = hits - W.time_inflicted = time_inflicted - return W - -/obj/item/autopsy_scanner/proc/add_data(var/obj/item/organ/external/O) - if(!O.autopsy_data.len) return - - for(var/V in O.autopsy_data) - var/datum/autopsy_data/W = O.autopsy_data[V] - - if(!W.pretend_weapon) - W.pretend_weapon = W.weapon - - - var/datum/autopsy_data_scanner/D = wdata[V] - if(!D) - D = new() - D.weapon = W.weapon - wdata[V] = D - - if(!D.organs_scanned[O.name]) - if(D.organ_names == "") - D.organ_names = O.name - else - D.organ_names += ", [O.name]" - - qdel(D.organs_scanned[O.name]) - D.organs_scanned[O.name] = W.copy() - -/obj/item/autopsy_scanner/verb/print_data() - set category = "Object" - set src in view(usr, 1) - set name = "Print Data" - if(usr.stat || !(istype(usr,/mob/living/carbon/human))) - to_chat(usr, "No.") - return - - var/scan_data = "" - - if(timeofdeath) - scan_data += "Time of death: [worldtime2stationtime(timeofdeath)]

              " - - var/n = 1 - for(var/wdata_idx in wdata) - var/datum/autopsy_data_scanner/D = wdata[wdata_idx] - var/total_hits = 0 - var/total_score = 0 - var/list/weapon_chances = list() // maps weapon names to a score - var/age = 0 - - for(var/wound_idx in D.organs_scanned) - var/datum/autopsy_data/W = D.organs_scanned[wound_idx] - total_hits += W.hits - - var/wname = W.pretend_weapon - - if(wname in weapon_chances) weapon_chances[wname] += W.damage - else weapon_chances[wname] = max(W.damage, 1) - total_score+=W.damage - - - var/wound_age = W.time_inflicted - age = max(age, wound_age) - - var/damage_desc - - var/damaging_weapon = (total_score != 0) - - // total score happens to be the total damage - switch(total_score) - if(0) - damage_desc = "Unknown" - if(1 to 5) - damage_desc = "negligible" - if(5 to 15) - damage_desc = "light" - if(15 to 30) - damage_desc = "moderate" - if(30 to 1000) - damage_desc = "severe" - - if(!total_score) total_score = D.organs_scanned.len - - scan_data += "Weapon #[n]
              " - if(damaging_weapon) - scan_data += "Severity: [damage_desc]
              " - scan_data += "Hits by weapon: [total_hits]
              " - scan_data += "Approximate time of wound infliction: [worldtime2stationtime(age)]
              " - scan_data += "Affected limbs: [D.organ_names]
              " - scan_data += "Possible weapons:
              " - for(var/weapon_name in weapon_chances) - scan_data += "\t[100*weapon_chances[weapon_name]/total_score]% [weapon_name]
              " - - scan_data += "
              " - - n++ - - if(chemtraces.len) - scan_data += "Trace Chemicals:
              " - for(var/chemID in chemtraces) - scan_data += chemID - scan_data += "
              " - - for(var/mob/O in viewers(usr)) - O.show_message("\The [src] rattles and prints out a sheet of paper.", 1) - - sleep(10) - - var/obj/item/paper/P = new(usr.loc, "[scan_data]", "Autopsy Data ([target_name])") - if(istype(usr,/mob/living/carbon)) - // place the item in the usr's hand if possible - usr.put_in_hands(P) - -/obj/item/autopsy_scanner/do_surgery(mob/living/carbon/human/M, mob/living/user) - if(!istype(M)) - return 0 - - set_target(M, user) - - timeofdeath = M.timeofdeath - - var/obj/item/organ/external/S = M.get_organ(user.zone_sel.selecting) - if(!S) - to_chat(usr, "You can't scan this body part.") - return - if(!S.how_open()) - to_chat(usr, "You have to cut [S] open first!") - return - M.visible_message("\The [user] scans the wounds on [M]'s [S.name] with [src]") - - add_data(S) - for(var/T in M.chem_doses) - var/datum/reagent/R = T - chemtraces |= initial(R.name) - - return 1 - -/obj/item/autopsy_scanner/proc/set_target(atom/new_target, user) - if(target_name != new_target.name) - target_name = new_target.name - wdata.Cut() - chemtraces.Cut() - timeofdeath = null - to_chat(user, "A new patient has been registered. Purging data for previous patient.") - -/obj/item/autopsy_scanner/afterattack(obj/item/organ/external/target, mob/user, proximity_flag, click_parameters) - if(!proximity_flag) - return - if(!istype(target)) - return - - set_target(target, user) - add_data(target) - -/obj/item/autopsy_scanner/attack_self(mob/user) - print_data(user) \ No newline at end of file diff --git a/code/game/objects/items/weapons/beachball.dm b/code/game/objects/items/weapons/beachball.dm deleted file mode 100644 index adb964d421d76..0000000000000 --- a/code/game/objects/items/weapons/beachball.dm +++ /dev/null @@ -1,17 +0,0 @@ -/obj/item/beach_ball - icon = 'icons/misc/beach.dmi' - icon_state = "ball" - name = "beach ball" - item_state = "beachball" - density = FALSE - anchored = FALSE - w_class = ITEM_SIZE_HUGE - force = 0.0 - throwforce = 0.0 - throw_speed = 1 - throw_range = 20 - obj_flags = OBJ_FLAG_CONDUCTIBLE - -/obj/item/beach_ball/afterattack(atom/target as mob|obj|turf|area, mob/user as mob) - if(user.unequip_item()) - src.throw_at(target, throw_range, throw_speed, user) \ No newline at end of file diff --git a/code/game/objects/items/weapons/candle/candle.dm b/code/game/objects/items/weapons/candle/candle.dm deleted file mode 100644 index 0c569f0a765ec..0000000000000 --- a/code/game/objects/items/weapons/candle/candle.dm +++ /dev/null @@ -1,90 +0,0 @@ -/obj/item/flame/candle - name = "candle" - desc = "A small pillar candle. Its specially-formulated fuel-oxidizer wax mixture allows continued combustion in airless environments." - icon = 'icons/obj/candle.dmi' - icon_state = "candle1" - item_state = "candle1" - w_class = ITEM_SIZE_TINY - light_color = "#e09d37" - - var/available_colours = list(COLOR_WHITE, COLOR_DARK_GRAY, COLOR_RED, COLOR_ORANGE, COLOR_YELLOW, COLOR_GREEN, COLOR_BLUE, COLOR_INDIGO, COLOR_VIOLET) - var/wax - var/last_lit - var/icon_set = "candle" - var/candle_max_bright = 0.3 - var/candle_inner_range = 0.1 - var/candle_outer_range = 4 - var/candle_falloff = 2 - -/obj/item/flame/candle/Initialize() - wax = rand(27 MINUTES, 33 MINUTES) / SSobj.wait // Enough for 27-33 minutes. 30 minutes on average, adjusted for subsystem tickrate. - if(available_colours) - color = pick(available_colours) - . = ..() - -/obj/item/flame/candle/on_update_icon() - switch(wax) - if(1500 to INFINITY) - icon_state = "[icon_set]1" - if(800 to 1500) - icon_state = "[icon_set]2" - else - icon_state = "[icon_set]3" - - if(lit != last_lit) - last_lit = lit - overlays.Cut() - if(lit) - overlays += overlay_image(icon, "[icon_state]_lit", flags=RESET_COLOR) - -/obj/item/flame/candle/attackby(obj/item/W as obj, mob/user as mob) - ..() - if(isflamesource(W) || is_hot(W)) - light(user) - -/obj/item/flame/candle/resolve_attackby(var/atom/A, mob/user) - . = ..() - if(istype(A, /obj/item/flame/candle) && is_hot(src)) - var/obj/item/flame/candle/other_candle = A - other_candle.light() - -/obj/item/flame/candle/proc/light(mob/user) - if(!lit) - lit = 1 - visible_message("\The [user] lights the [name].") - set_light(candle_max_bright, candle_inner_range, candle_outer_range, candle_falloff) - START_PROCESSING(SSobj, src) - -/obj/item/flame/candle/Process() - if(!lit) - return - wax-- - if(!wax) - var/obj/item/trash/candle/C = new(loc) - C.color = color - qdel(src) - return - update_icon() - if(istype(loc, /turf)) //start a fire if possible - var/turf/T = loc - T.hotspot_expose(700, 5) - -/obj/item/flame/candle/attack_self(mob/user as mob) - if(lit) - lit = 0 - update_icon() - set_light(0) - remove_extension(src, /datum/extension/scent) - -/obj/item/storage/candle_box - name = "candle pack" - desc = "A pack of unscented candles in a variety of colours." - icon = 'icons/obj/candle.dmi' - icon_state = "candlebox" - throwforce = 2 - w_class = ITEM_SIZE_SMALL - max_w_class = ITEM_SIZE_TINY - max_storage_space = 7 - slot_flags = SLOT_BELT - - startswith = list(/obj/item/flame/candle = 7) \ No newline at end of file diff --git a/code/game/objects/items/weapons/candle/incense.dm b/code/game/objects/items/weapons/candle/incense.dm deleted file mode 100644 index b30ec3f187910..0000000000000 --- a/code/game/objects/items/weapons/candle/incense.dm +++ /dev/null @@ -1,28 +0,0 @@ -/obj/item/flame/candle/scented/incense - name = "incense cone" - desc = "An incense cone. It produces fragrant smoke when burned." - icon_state = "incense1" - - available_colours = null - icon_set = "incense" - candle_max_bright = 0.1 - candle_inner_range = 0.1 - candle_outer_range = 1 - candle_falloff = 2 - - scent_types = list(/decl/scent_type/rose, - /decl/scent_type/citrus, - /decl/scent_type/sage, - /decl/scent_type/frankincense, - /decl/scent_type/mint, - /decl/scent_type/champa, - /decl/scent_type/lavender, - /decl/scent_type/sandalwood) - -/obj/item/storage/candle_box/incense - name = "incense box" - desc = "A pack of 'Tres' brand incense cones, in a variety of scents." - icon_state = "incensebox" - max_storage_space = 9 - - startswith = list(/obj/item/flame/candle/scented/incense = 9) \ No newline at end of file diff --git a/code/game/objects/items/weapons/candle/scent_decls.dm b/code/game/objects/items/weapons/candle/scent_decls.dm deleted file mode 100644 index b0964b2ceb622..0000000000000 --- a/code/game/objects/items/weapons/candle/scent_decls.dm +++ /dev/null @@ -1,59 +0,0 @@ -/decl/scent_type - var/color - var/scent //this is for the desc, the actual scent goes in the datum - var/scent_datum - -/decl/scent_type/rose - color = COLOR_RED - scent = "a rose garden" - scent_datum = /datum/extension/scent/candle/rose - -/decl/scent_type/citrus - color = COLOR_ORANGE - scent = "assorted citrus" - scent_datum = /datum/extension/scent/candle/citrus - -/decl/scent_type/sage - color = COLOR_OFF_WHITE - scent = "white sage" - scent_datum = /datum/extension/scent/candle/sage - -/decl/scent_type/frankincense - color = COLOR_AMBER - scent = "frankincense" - scent_datum = /datum/extension/scent/candle/frankincense - -/decl/scent_type/mint - color = COLOR_PALE_BTL_GREEN - scent = "crisp mint" - scent_datum = /datum/extension/scent/candle/mint - -/decl/scent_type/champa - color = COLOR_BLUE - scent = "nag champa" - scent_datum = /datum/extension/scent/candle/champa - -/decl/scent_type/lavender - color = COLOR_PALE_PINK - scent = "gentle lavender" - scent_datum = /datum/extension/scent/candle/lavender - -/decl/scent_type/cinnamon - color = COLOR_NT_RED - scent = "spicy cinnamon" - scent_datum = /datum/extension/scent/candle/cinnamon - -/decl/scent_type/vanilla - color = WOOD_COLOR_PALE2 - scent = "gentle lavender" - scent_datum = /datum/extension/scent/candle/vanilla - -/decl/scent_type/seabreeze - color = COLOR_BLUE_GRAY - scent = "a sea breeze" - scent_datum = /datum/extension/scent/candle/seabreeze - -/decl/scent_type/sandalwood - color = COLOR_YELLOW_GRAY - scent = "sandalwood" - scent_datum = /datum/extension/scent/candle/sandalwood \ No newline at end of file diff --git a/code/game/objects/items/weapons/candle/scented.dm b/code/game/objects/items/weapons/candle/scented.dm deleted file mode 100644 index 651a1bf8f6baa..0000000000000 --- a/code/game/objects/items/weapons/candle/scented.dm +++ /dev/null @@ -1,46 +0,0 @@ -/obj/item/flame/candle/scented - name = "scented candle" - desc = "A candle which releases pleasant-smelling oils into the air when burned." - - var/scent //for the desc - var/decl/scent_type/style - var/list/scent_types = list(/decl/scent_type/rose, - /decl/scent_type/cinnamon, - /decl/scent_type/vanilla, - /decl/scent_type/seabreeze, - /decl/scent_type/lavender) - -/obj/item/flame/candle/scented/Initialize() - . = ..() - get_scent() - -/obj/item/flame/candle/scented/attack_self(mob/user as mob) - ..() - if(!lit) - remove_extension(src, /datum/extension/scent) - -/obj/item/flame/candle/scented/extinguish(var/mob/user, var/no_message) - ..() - remove_extension(src, /datum/extension/scent) - -/obj/item/flame/candle/scented/light(mob/user) - ..() - if(lit) - set_extension(src, style.scent_datum) - -/obj/item/flame/candle/scented/proc/get_scent() - var/scent_type = DEFAULTPICK(scent_types, null) - if(scent_type) - style = decls_repository.get_decl(scent_type) - color = style.color - scent = style.scent - if(scent) - desc += " This one smells of [scent]." - update_icon() - -/obj/item/storage/candle_box/scented - name = "scented candle box" - desc = "An unbranded pack of scented candles, in a variety of scents." - max_storage_space = 5 - - startswith = list(/obj/item/flame/candle/scented = 5) \ No newline at end of file diff --git a/code/game/objects/items/weapons/cane.dm b/code/game/objects/items/weapons/cane.dm deleted file mode 100644 index 2ecd7c9ca6ec9..0000000000000 --- a/code/game/objects/items/weapons/cane.dm +++ /dev/null @@ -1,56 +0,0 @@ -/obj/item/cane - name = "cane" - desc = "A cane used by a true gentlemen. Or a clown." - icon = 'icons/obj/weapons/melee_physical.dmi' - icon_state = "cane" - item_state = "stick" - obj_flags = OBJ_FLAG_CONDUCTIBLE - force = 5.0 - throwforce = 7.0 - w_class = ITEM_SIZE_SMALL - matter = list(MATERIAL_ALUMINIUM = 50) - attack_verb = list("bludgeoned", "whacked", "disciplined", "thrashed") - base_parry_chance = 30 - -/obj/item/cane/concealed - var/concealed_blade - -/obj/item/cane/concealed/New() - ..() - var/obj/item/material/knife/folding/combat/switchblade/temp_blade = new(src) - concealed_blade = temp_blade - -/obj/item/cane/concealed/attack_self(var/mob/user) - if(concealed_blade) - user.visible_message("[user] has unsheathed \a [concealed_blade] from [src]!", "You unsheathe \the [concealed_blade] from [src].") - // Calling drop/put in hands to properly call item drop/pickup procs - playsound(user.loc, 'sound/weapons/flipblade.ogg', 50, 1) - user.drop_from_inventory(src) - user.put_in_hands(concealed_blade) - user.put_in_hands(src) - concealed_blade = null - update_icon() - user.update_inv_l_hand() - user.update_inv_r_hand() - else - ..() - -/obj/item/cane/concealed/attackby(var/obj/item/material/knife/folding/W, var/mob/user) - if(!src.concealed_blade && istype(W) && user.unEquip(W, src)) - user.visible_message("[user] has sheathed \a [W] into [src]!", "You sheathe \the [W] into [src].") - src.concealed_blade = W - update_icon() - user.update_inv_l_hand() - user.update_inv_r_hand() - else - ..() - -/obj/item/cane/concealed/on_update_icon() - if(concealed_blade) - SetName(initial(name)) - icon_state = initial(icon_state) - item_state = initial(item_state) - else - SetName("cane shaft") - icon_state = "cane_noknife" - item_state = "foldcane" \ No newline at end of file diff --git a/code/game/objects/items/weapons/cards_ids.dm b/code/game/objects/items/weapons/cards_ids.dm deleted file mode 100644 index df5892f4af192..0000000000000 --- a/code/game/objects/items/weapons/cards_ids.dm +++ /dev/null @@ -1,621 +0,0 @@ -/* Cards - * Contains: - * DATA CARD - * ID CARD - * FINGERPRINT CARD HOLDER - * FINGERPRINT CARD - */ - - - -/* - * DATA CARDS - Used for the IC data card reader - */ -/obj/item/card - name = "card" - desc = "Does card things." - icon = 'icons/obj/card.dmi' - w_class = ITEM_SIZE_TINY - slot_flags = SLOT_EARS - -/obj/item/card/union - name = "union card" - desc = "A card showing membership in the local worker's union." - icon_state = "union" - slot_flags = SLOT_ID - var/signed_by - -/obj/item/card/union/examine(mob/user) - . = ..() - if(signed_by) - to_chat(user, "It has been signed by [signed_by].") - else - to_chat(user, "It has a blank space for a signature.") - -/obj/item/card/union/attackby(var/obj/item/thing, var/mob/user) - if(istype(thing, /obj/item/pen)) - if(signed_by) - to_chat(user, SPAN_WARNING("\The [src] has already been signed.")) - else - var/signature = sanitizeSafe(input("What do you want to sign the card as?", "Union Card") as text, MAX_NAME_LEN) - if(signature && !signed_by && !user.incapacitated() && Adjacent(user)) - signed_by = signature - user.visible_message(SPAN_NOTICE("\The [user] signs \the [src] with a flourish.")) - return - ..() - -/obj/item/card/data - name = "data card" - desc = "A plastic magstripe card for simple and speedy data storage and transfer. This one has a stripe running down the middle." - icon_state = "data_1" - var/detail_color = COLOR_ASSEMBLY_ORANGE - var/function = "storage" - var/data = "null" - var/special = null - var/list/files = list( ) - -/obj/item/card/data/Initialize() - .=..() - update_icon() - -/obj/item/card/data/on_update_icon() - overlays.Cut() - var/image/detail_overlay = image('icons/obj/card.dmi', src,"[icon_state]-color") - detail_overlay.color = detail_color - overlays += detail_overlay - -/obj/item/card/data/attackby(obj/item/I, mob/living/user) - if(istype(I, /obj/item/device/integrated_electronics/detailer)) - var/obj/item/device/integrated_electronics/detailer/D = I - detail_color = D.detail_color - update_icon() - return ..() - -/obj/item/card/data/full_color - desc = "A plastic magstripe card for simple and speedy data storage and transfer. This one has the entire card colored." - icon_state = "data_2" - -/obj/item/card/data/disk - desc = "A plastic magstripe card for simple and speedy data storage and transfer. This one inexplicibly looks like a floppy disk." - icon_state = "data_3" - -/* - * ID CARDS - */ - -/obj/item/card/emag_broken - desc = "It's a blank ID card with a magnetic strip and some odd circuitry attached." - name = "identification card" - icon_state = "emag" - item_state = "card-id" - origin_tech = list(TECH_MAGNET = 2, TECH_ESOTERIC = 2) - -/obj/item/card/emag_broken/examine(mob/user, distance) - . = ..() - if(distance <= 0 && (user.skill_check(SKILL_DEVICES, SKILL_ADEPT) || player_is_antag(user.mind))) - to_chat(user, SPAN_WARNING("You can tell the components are completely fried; whatever use it may have had before is gone.")) - -/obj/item/card/emag_broken/get_antag_info() - . = ..() - . += "You can use this cryptographic sequencer in order to subvert electronics or forcefully open doors you don't have access to. These actions are irreversible and the card only has a limited number of charges!" - -/obj/item/card/emag - desc = "It's a blank ID card with a magnetic strip and some odd circuitry attached." - name = "identification card" - icon_state = "emag" - item_state = "card-id" - origin_tech = list(TECH_MAGNET = 2, TECH_ESOTERIC = 2) - var/uses = 10 - var/list/emag_sounds = list('sound/effects/emag_act.wav') - -var/global/const/NO_EMAG_ACT = -50 - -/obj/item/card/emag/resolve_attackby(atom/A, mob/user) - var/used_uses = A.emag_act(uses, user, src) - if(used_uses == NO_EMAG_ACT) - return ..(A, user) - - uses -= used_uses - A.add_fingerprint(user) - if(used_uses) - log_and_message_admins("emagged \an [A].") - playsound(get_turf(A), pick(emag_sounds), 40, extrarange = -3) - - if(uses<1) - user.visible_message("\The [src] fizzles and sparks - it seems it's been used once too often, and is now spent.") - var/obj/item/card/emag_broken/junk = new(user.loc) - junk.add_fingerprint(user) - qdel(src) - - return 1 - -/obj/item/card/emag/Initialize() - . = ..() - set_extension(src,/datum/extension/chameleon/emag) - -/obj/item/card/emag/get_antag_info() - . = ..() - . += "You can use this cryptographic sequencer in order to subvert electronics or forcefully open doors you don't have access to. These actions are irreversible and the card only has a limited number of charges!" - -/obj/item/card/id - name = "identification card" - desc = "A card used to provide ID and determine access." - icon_state = "base" - item_state = "card-id" - slot_flags = SLOT_ID - - var/list/access = list() - var/registered_name = "Unknown" // The name registered_name on the card - var/associated_account_number = 0 - var/list/associated_email_login = list("login" = "", "password" = "") - - var/age = "\[UNSET\]" - var/blood_type = "\[UNSET\]" - var/dna_hash = "\[UNSET\]" - var/fingerprint_hash = "\[UNSET\]" - var/sex = "\[UNSET\]" - var/icon/front - var/icon/side - - //alt titles are handled a bit weirdly in order to unobtrusively integrate into existing ID system - var/assignment = null //can be alt title or the actual job - var/rank = null //actual job - var/dorm = 0 // determines if this ID has claimed a dorm already - - var/job_access_type // Job type to acquire access rights from, if any - - var/datum/mil_branch/military_branch = null //Vars for tracking branches and ranks on multi-crewtype maps - var/datum/mil_rank/military_rank = null - - var/formal_name_prefix - var/formal_name_suffix - - var/detail_color - var/extra_details - -/obj/item/card/id/Initialize() - .=..() - if(job_access_type) - var/datum/job/j = SSjobs.get_by_path(job_access_type) - if(j) - rank = j.title - assignment = rank - access |= j.get_access() - if(!detail_color) - detail_color = j.selection_color - update_icon() - -/obj/item/card/id/get_mob_overlay(mob/user_mob, slot) - var/image/ret = ..() - ret.overlays += overlay_image(ret.icon, "[ret.icon_state]_colors", detail_color, RESET_COLOR) - return ret - -/obj/item/card/id/on_update_icon() - overlays.Cut() - overlays += overlay_image(icon, "[icon_state]_colors", detail_color, RESET_COLOR) - for(var/detail in extra_details) - overlays += overlay_image(icon, detail, flags=RESET_COLOR) - -/obj/item/card/id/CanUseTopic(var/user) - if(user in view(get_turf(src))) - return STATUS_INTERACTIVE - -/obj/item/card/id/OnTopic(var/mob/user, var/list/href_list) - if(href_list["look_at_id"]) - if(istype(user)) - user.examinate(src) - return TOPIC_HANDLED - -/obj/item/card/id/examine(mob/user, distance) - . = ..() - to_chat(user, "It says '[get_display_name()]'.") - if(distance <= 1) - show(user) - -/obj/item/card/id/proc/prevent_tracking() - return 0 - -/obj/item/card/id/proc/show(mob/user as mob) - if(front && side) - send_rsc(user, front, "front.png") - send_rsc(user, side, "side.png") - var/datum/browser/popup = new(user, "idcard", name, 600, 250) - popup.set_content(dat()) - popup.set_title_image(usr.browse_rsc_icon(src.icon, src.icon_state)) - popup.open() - return - -/obj/item/card/id/proc/get_display_name() - . = registered_name - if(military_rank && military_rank.name_short) - . ="[military_rank.name_short] [.][formal_name_suffix]" - else if(formal_name_prefix || formal_name_suffix) - . = "[formal_name_prefix][.][formal_name_suffix]" - if(assignment) - . += ", [assignment]" - -/obj/item/card/id/proc/set_id_photo(var/mob/M) - front = getFlatIcon(M, SOUTH, always_use_defdir = 1) - side = getFlatIcon(M, WEST, always_use_defdir = 1) - -/mob/proc/set_id_info(var/obj/item/card/id/id_card) - id_card.age = 0 - - id_card.formal_name_prefix = initial(id_card.formal_name_prefix) - id_card.formal_name_suffix = initial(id_card.formal_name_suffix) - if(client && client.prefs) - for(var/culturetag in client.prefs.cultural_info) - var/decl/cultural_info/culture = SSculture.get_culture(client.prefs.cultural_info[culturetag]) - if(culture) - id_card.formal_name_prefix = "[culture.get_formal_name_prefix()][id_card.formal_name_prefix]" - id_card.formal_name_suffix = "[id_card.formal_name_suffix][culture.get_formal_name_suffix()]" - - id_card.registered_name = real_name - - var/gender_term = "Unset" - var/datum/gender/G = gender_datums[get_sex()] - if(G) - gender_term = gender2text(G.formal_term) - id_card.sex = gender2text(gender_term) - id_card.set_id_photo(src) - - if(dna) - id_card.blood_type = dna.b_type - id_card.dna_hash = dna.unique_enzymes - id_card.fingerprint_hash= md5(dna.uni_identity) - -/mob/living/carbon/human/set_id_info(var/obj/item/card/id/id_card) - ..() - id_card.age = age - if(GLOB.using_map.flags & MAP_HAS_BRANCH) - id_card.military_branch = char_branch - if(GLOB.using_map.flags & MAP_HAS_RANK) - id_card.military_rank = char_rank - -/obj/item/card/id/proc/dat() - var/list/dat = list("" - dat += "
              ") - dat += text("Name: []
              ", "[formal_name_prefix][registered_name][formal_name_suffix]") - dat += text("Sex: []
              \n", sex) - dat += text("Age: []
              \n", age) - - if(GLOB.using_map.flags & MAP_HAS_BRANCH) - dat += text("Branch: []
              \n", military_branch ? military_branch.name : "\[UNSET\]") - if(GLOB.using_map.flags & MAP_HAS_RANK) - dat += text("Rank: []
              \n", military_rank ? military_rank.name : "\[UNSET\]") - - dat += text("Assignment: []
              \n", assignment) - dat += text("Fingerprint: []
              \n", fingerprint_hash) - dat += text("Blood Type: []
              \n", blood_type) - dat += text("DNA Hash: []

              \n", dna_hash) - if(front && side) - dat +="
              Photo:
              " - return jointext(dat,null) - -/obj/item/card/id/attack_self(mob/user as mob) - user.visible_message("\The [user] shows you: [icon2html(src, viewers(get_turf(src)))] [src.name]. The assignment on the card: [src.assignment]",\ - "You flash your ID card: [icon2html(src, viewers(get_turf(src)))] [src.name]. The assignment on the card: [src.assignment]") - - src.add_fingerprint(user) - return - -/obj/item/card/id/GetAccess() - return access - -/obj/item/card/id/GetIdCard() - return src - -/obj/item/card/id/verb/read() - set name = "Read ID Card" - set category = "Object" - set src in usr - - to_chat(usr, text("[icon2html(src, usr)] []: The current assignment on the card is [].", src.name, src.assignment)) - to_chat(usr, "The blood type on the card is [blood_type].") - to_chat(usr, "The DNA hash on the card is [dna_hash].") - to_chat(usr, "The fingerprint hash on the card is [fingerprint_hash].") - return - -/decl/vv_set_handler/id_card_military_branch - handled_type = /obj/item/card/id - handled_vars = list("military_branch") - -/decl/vv_set_handler/id_card_military_branch/handle_set_var(var/obj/item/card/id/id, variable, var_value, client) - if(!var_value) - id.military_branch = null - id.military_rank = null - return - - if(istype(var_value, /datum/mil_branch)) - if(var_value != id.military_branch) - id.military_branch = var_value - id.military_rank = null - return - - if(ispath(var_value, /datum/mil_branch) || istext(var_value)) - var/datum/mil_branch/new_branch = GLOB.mil_branches.get_branch(var_value) - if(new_branch) - if(new_branch != id.military_branch) - id.military_branch = new_branch - id.military_rank = null - return - - to_chat(client, SPAN_WARNING("Input, must be an existing branch - [var_value] is invalid")) - -/decl/vv_set_handler/id_card_military_rank - handled_type = /obj/item/card/id - handled_vars = list("military_rank") - -/decl/vv_set_handler/id_card_military_rank/handle_set_var(var/obj/item/card/id/id, variable, var_value, client) - if(!var_value) - id.military_rank = null - return - - if(!id.military_branch) - to_chat(client, SPAN_WARNING("military_branch not set - No valid ranks available")) - return - - if(ispath(var_value, /datum/mil_rank)) - var/datum/mil_rank/rank = var_value - var_value = initial(rank.name) - - if(istype(var_value, /datum/mil_rank)) - var/datum/mil_rank/rank = var_value - var_value = rank.name - - if(istext(var_value)) - var/new_rank = GLOB.mil_branches.get_rank(id.military_branch.name, var_value) - if(new_rank) - id.military_rank = new_rank - return - - to_chat(client, SPAN_WARNING("Input must be an existing rank belonging to military_branch - [var_value] is invalid")) - -/obj/item/card/id/silver - name = "identification card" - desc = "A silver card which shows honour and dedication." - item_state = "silver_id" - job_access_type = /datum/job/hop - -/obj/item/card/id/gold - name = "identification card" - desc = "A golden card which shows power and might." - job_access_type = /datum/job/captain - color = "#d4c780" - extra_details = list("goldstripe") - -/obj/item/card/id/syndicate_command - name = "syndicate ID card" - desc = "An ID straight from the Syndicate." - registered_name = "Syndicate" - assignment = "Syndicate Overlord" - access = list(access_syndicate, access_external_airlocks) - color = COLOR_RED_GRAY - detail_color = COLOR_GRAY40 - -/obj/item/card/id/captains_spare - name = "captain's spare ID" - desc = "The spare ID of the High Lord himself." - item_state = "gold_id" - registered_name = "Captain" - assignment = "Captain" - detail_color = COLOR_AMBER - -/obj/item/card/id/captains_spare/New() - access = get_all_station_access() - ..() - -/obj/item/card/id/synthetic - name = "\improper Synthetic ID" - desc = "Access module for lawed synthetics." - icon_state = "robot_base" - assignment = "Synthetic" - detail_color = COLOR_AMBER - -/obj/item/card/id/synthetic/New() - access = get_all_station_access() + access_synth - ..() - -/obj/item/card/id/centcom - name = "\improper CentCom. ID" - desc = "An ID straight from Cent. Com." - registered_name = "Central Command" - assignment = "General" - color = COLOR_GRAY40 - detail_color = COLOR_COMMAND_BLUE - extra_details = list("goldstripe") - -/obj/item/card/id/centcom/New() - access = get_all_centcom_access() - ..() - -/obj/item/card/id/centcom/station/New() - ..() - access |= get_all_station_access() - -/obj/item/card/id/centcom/ERT - name = "\improper Emergency Response Team ID" - assignment = "Emergency Response Team" - -/obj/item/card/id/centcom/ERT/New() - ..() - access |= get_all_station_access() - -/obj/item/card/id/foundation_civilian - name = "operant registration card" - desc = "A registration card in a faux-leather case. It marks the named individual as a registered, law-abiding psionic." - icon_state = "warrantcard_civ" - -/obj/item/card/id/foundation_civilian/on_update_icon() - return - -/obj/item/card/id/foundation - name = "\improper Foundation warrant card" - desc = "A warrant card in a handsome leather case." - assignment = "Field Agent" - icon_state = "warrantcard" - -/obj/item/card/id/foundation/examine(mob/user, distance) - . = ..() - if(distance <= 1 && isliving(user)) - var/mob/living/M = user - if(M.psi) - to_chat(user, SPAN_WARNING("There is a psionic compulsion surrounding \the [src], forcing anyone who reads it to perceive it as a legitimate document of authority. The actual text just reads 'I can do what I want.'")) - else - to_chat(user, SPAN_NOTICE("This is the real deal, stamped by [GLOB.using_map.boss_name]. It gives the holder the full authority to pursue their goals. You believe it implicitly.")) - -/obj/item/card/id/foundation/attack_self(var/mob/living/user) - . = ..() - if(istype(user)) - for(var/mob/M in viewers(world.view, get_turf(user))-user) - if(user.psi && isliving(M)) - var/mob/living/L = M - if(!L.psi) - to_chat(L, SPAN_NOTICE("This is the real deal, stamped by [GLOB.using_map.boss_name]. It gives the holder the full authority to pursue their goals. You believe \the [user] implicitly.")) - continue - to_chat(M, SPAN_WARNING("There is a psionic compulsion surrounding \the [src] in a flicker of indescribable light.")) - -/obj/item/card/id/foundation/on_update_icon() - return - -/obj/item/card/id/foundation/New() - ..() - access |= get_all_station_access() - -/obj/item/card/id/all_access - name = "\improper Administrator's spare ID" - desc = "The spare ID of the Lord of Lords himself." - registered_name = "Administrator" - assignment = "Administrator" - detail_color = COLOR_MAROON - extra_details = list("goldstripe") - -/obj/item/card/id/all_access/New() - access = get_access_ids() - ..() - -// Department-flavor IDs -/obj/item/card/id/medical - name = "identification card" - desc = "A card issued to medical staff." - job_access_type = /datum/job/doctor - detail_color = COLOR_PALE_BLUE_GRAY - -/obj/item/card/id/medical/chemist - job_access_type = /datum/job/chemist - -/obj/item/card/id/medical/geneticist - job_access_type = /datum/job/geneticist - -/obj/item/card/id/medical/psychiatrist - job_access_type = /datum/job/psychiatrist - -/obj/item/card/id/medical/paramedic - job_access_type = /datum/job/Paramedic - -/obj/item/card/id/medical/head - name = "identification card" - desc = "A card which represents care and compassion." - job_access_type = /datum/job/cmo - extra_details = list("goldstripe") - -/obj/item/card/id/security - name = "identification card" - desc = "A card issued to security staff." - job_access_type = /datum/job/officer - color = COLOR_OFF_WHITE - detail_color = COLOR_MAROON - -/obj/item/card/id/security/warden - job_access_type = /datum/job/warden - -/obj/item/card/id/security/detective - job_access_type = /datum/job/detective - -/obj/item/card/id/security/head - name = "identification card" - desc = "A card which represents honor and protection." - job_access_type = /datum/job/hos - extra_details = list("goldstripe") - -/obj/item/card/id/engineering - name = "identification card" - desc = "A card issued to engineering staff." - job_access_type = /datum/job/engineer - detail_color = COLOR_SUN - -/obj/item/card/id/engineering/head - name = "identification card" - desc = "A card which represents creativity and ingenuity." - job_access_type = /datum/job/chief_engineer - extra_details = list("goldstripe") - -/obj/item/card/id/science - name = "identification card" - desc = "A card issued to science staff." - job_access_type = /datum/job/scientist - detail_color = COLOR_PALE_PURPLE_GRAY - -/obj/item/card/id/science/xenobiologist - job_access_type = /datum/job/xenobiologist - -/obj/item/card/id/science/roboticist - job_access_type = /datum/job/roboticist - -/obj/item/card/id/science/head - name = "identification card" - desc = "A card which represents knowledge and reasoning." - job_access_type = /datum/job/rd - extra_details = list("goldstripe") - -/obj/item/card/id/cargo - name = "identification card" - desc = "A card issued to cargo staff." - job_access_type = /datum/job/cargo_tech - detail_color = COLOR_BROWN - -/obj/item/card/id/cargo/mining - job_access_type = /datum/job/mining - -/obj/item/card/id/cargo/head - name = "identification card" - desc = "A card which represents service and planning." - job_access_type = /datum/job/qm - extra_details = list("goldstripe") - -/obj/item/card/id/civilian - name = "identification card" - desc = "A card issued to civilian staff." - job_access_type = DEFAULT_JOB_TYPE - detail_color = COLOR_CIVIE_GREEN - -/obj/item/card/id/civilian/chef - job_access_type = /datum/job/chef - -/obj/item/card/id/civilian/botanist - job_access_type = /datum/job/hydro - -/obj/item/card/id/civilian/janitor - job_access_type = /datum/job/janitor - -/obj/item/card/id/civilian/librarian - job_access_type = /datum/job/librarian - -/obj/item/card/id/civilian/internal_affairs_agent - job_access_type = /datum/job/lawyer - detail_color = COLOR_NAVY_BLUE - -/obj/item/card/id/civilian/chaplain - job_access_type = /datum/job/chaplain - -/obj/item/card/id/civilian/head //This is not the HoP. There's no position that uses this right now. - name = "identification card" - desc = "A card which represents common sense and responsibility." - extra_details = list("goldstripe") - -/obj/item/card/id/merchant - name = "identification card" - desc = "A card issued to Merchants, indicating their right to sell and buy goods." - access = list(access_merchant) - color = COLOR_OFF_WHITE - detail_color = COLOR_BEIGE diff --git a/code/game/objects/items/weapons/cards_ids_syndicate.dm b/code/game/objects/items/weapons/cards_ids_syndicate.dm deleted file mode 100644 index fb931cae6aba4..0000000000000 --- a/code/game/objects/items/weapons/cards_ids_syndicate.dm +++ /dev/null @@ -1,268 +0,0 @@ -/obj/item/card/id/syndicate - assignment = "Agent" - origin_tech = list(TECH_ESOTERIC = 3) - var/electronic_warfare = 1 - var/mob/registered_user = null - color = COLOR_GRAY40 - detail_color = COLOR_NT_RED - -/obj/item/card/id/syndicate/New(mob/user as mob) - ..() - access = syndicate_access.Copy() - -/obj/item/card/id/syndicate/station_access/New() - ..() // Same as the normal Syndicate id, only already has all station access - access |= get_all_station_access() - -/obj/item/card/id/syndicate/Destroy() - unset_registered_user(registered_user) - return ..() - -/obj/item/card/id/syndicate/prevent_tracking() - return electronic_warfare - -/obj/item/card/id/syndicate/afterattack(var/obj/item/O as obj, mob/user as mob, proximity) - if(!proximity) return - if(istype(O, /obj/item/card/id)) - var/obj/item/card/id/I = O - src.access |= I.access - if(player_is_antag(user.mind)) - to_chat(user, "The microscanner activates as you pass it over the ID, copying its access.") - -/obj/item/card/id/syndicate/attack_self(mob/user as mob) - // We use the fact that registered_name is not unset should the owner be vaporized, to ensure the id doesn't magically become unlocked. - if(!registered_user && register_user(user)) - to_chat(user, "The microscanner marks you as its owner, preventing others from accessing its internals.") - if(registered_user == user) - switch(alert("Would you like edit the ID, or show it?","Show or Edit?", "Edit","Show")) - if("Edit") - ui_interact(user) - if("Show") - ..() - else - ..() - -/obj/item/card/id/syndicate/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1) - var/data[0] - var/entries[0] - entries[++entries.len] = list("name" = "Age", "value" = age) - entries[++entries.len] = list("name" = "Prefix", "value" = formal_name_prefix) - entries[++entries.len] = list("name" = "Suffix", "value" = formal_name_suffix) - entries[++entries.len] = list("name" = "Appearance", "value" = "Set") - entries[++entries.len] = list("name" = "Assignment", "value" = assignment) - if(GLOB.using_map.flags & MAP_HAS_BRANCH) - entries[++entries.len] = list("name" = "Branch", "value" = military_branch ? military_branch.name : "N/A") - if(military_branch && (GLOB.using_map.flags & MAP_HAS_RANK)) - entries[++entries.len] = list("name" = "Rank", "value" = military_rank ? military_rank.name : "N/A") - entries[++entries.len] = list("name" = "Blood Type", "value" = blood_type) - entries[++entries.len] = list("name" = "DNA Hash", "value" = dna_hash) - entries[++entries.len] = list("name" = "Fingerprint Hash", "value" = fingerprint_hash) - entries[++entries.len] = list("name" = "Name", "value" = registered_name) - entries[++entries.len] = list("name" = "Photo", "value" = "Update") - entries[++entries.len] = list("name" = "Sex", "value" = sex) - entries[++entries.len] = list("name" = "Factory Reset", "value" = "Use With Care") - data["electronic_warfare"] = electronic_warfare - data["entries"] = entries - - ui = SSnano.try_update_ui(user, src, ui_key, ui, data, force_open) - if (!ui) - ui = new(user, src, ui_key, "agent_id_card.tmpl", "Agent id", 600, 400) - ui.set_initial_data(data) - ui.open() - -/obj/item/card/id/syndicate/proc/register_user(var/mob/user) - if(!istype(user) || user == registered_user) - return FALSE - unset_registered_user() - registered_user = user - user.set_id_info(src) - GLOB.destroyed_event.register(user, src, /obj/item/card/id/syndicate/proc/unset_registered_user) - return TRUE - -/obj/item/card/id/syndicate/proc/unset_registered_user(var/mob/user) - if(!registered_user || (user && user != registered_user)) - return - GLOB.destroyed_event.unregister(registered_user, src) - registered_user = null - -/obj/item/card/id/syndicate/CanUseTopic(var/mob/user, var/datum/topic_state/state, var/href_list) - if(!(href_list && href_list["look_at_id"]) && (user != registered_user)) - return STATUS_CLOSE - return ..() - -/obj/item/card/id/syndicate/Topic(href, href_list, var/datum/topic_state/state) - if(..()) - return 1 - - var/user = usr - if(href_list["electronic_warfare"]) - electronic_warfare = text2num(href_list["electronic_warfare"]) - to_chat(user, "Electronic warfare [electronic_warfare ? "enabled" : "disabled"].") - else if(href_list["set"]) - switch(href_list["set"]) - if("Age") - var/new_age = input(user,"What age would you like to put on this card?","Agent Card Age", age) as null|num - if(!isnull(new_age) && CanUseTopic(user, state)) - if(new_age < 0) - age = initial(age) - else - age = new_age - to_chat(user, "Age has been set to '[age]'.") - . = 1 - if("Prefix") - var/new_prefix = sanitizeSafe(input(user,"What title prefix would you like to put on this card?","Agent Card Prefix", age) as text, MAX_NAME_LEN) - if(!isnull(new_prefix) && CanUseTopic(user, state)) - formal_name_prefix = new_prefix - to_chat(user, "Title prefix has been set to '[formal_name_prefix]'.") - . = 1 - if("Suffix") - var/new_suffix = sanitizeSafe(input(user,"What title suffix would you like to put on this card?","Agent Card Suffix", age) as text, MAX_NAME_LEN) - if(!isnull(new_suffix) && CanUseTopic(user, state)) - formal_name_suffix = new_suffix - to_chat(user, "Title suffix has been set to '[formal_name_suffix]'.") - . = 1 - if("Appearance") - var/datum/card_state/choice = input(user, "Select the appearance for this card.", "Agent Card Appearance") as null|anything in id_card_states() - if(choice && CanUseTopic(user, state)) - src.icon_state = choice.icon_state - src.item_state = choice.item_state - src.color = choice.color - src.detail_color = choice.detail_color - src.extra_details = choice.extra_details - update_icon() - to_chat(usr, "Appearance changed to [choice].") - . = 1 - if("Assignment") - var/new_job = sanitize(input(user,"What assignment would you like to put on this card?\nChanging assignment will not grant or remove any access levels.","Agent Card Assignment", assignment) as null|text) - if(!isnull(new_job) && CanUseTopic(user, state)) - src.assignment = new_job - to_chat(user, "Occupation changed to '[new_job]'.") - . = 1 - if("Blood Type") - var/default = blood_type - if(default == initial(blood_type) && ishuman(user)) - var/mob/living/carbon/human/H = user - if(H.dna) - default = H.dna.b_type - var/new_blood_type = sanitize(input(user,"What blood type would you like to be written on this card?","Agent Card Blood Type",default) as null|text) - if(!isnull(new_blood_type) && CanUseTopic(user, state)) - src.blood_type = new_blood_type - to_chat(user, "Blood type changed to '[new_blood_type]'.") - . = 1 - if("DNA Hash") - var/default = dna_hash - if(default == initial(dna_hash) && ishuman(user)) - var/mob/living/carbon/human/H = user - if(H.dna) - default = H.dna.unique_enzymes - var/new_dna_hash = sanitize(input(user,"What DNA hash would you like to be written on this card?","Agent Card DNA Hash",default) as null|text) - if(!isnull(new_dna_hash) && CanUseTopic(user, state)) - src.dna_hash = new_dna_hash - to_chat(user, "DNA hash changed to '[new_dna_hash]'.") - . = 1 - if("Fingerprint Hash") - var/default = fingerprint_hash - if(default == initial(fingerprint_hash) && ishuman(user)) - var/mob/living/carbon/human/H = user - if(H.dna) - default = md5(H.dna.uni_identity) - var/new_fingerprint_hash = sanitize(input(user,"What fingerprint hash would you like to be written on this card?","Agent Card Fingerprint Hash",default) as null|text) - if(!isnull(new_fingerprint_hash) && CanUseTopic(user, state)) - src.fingerprint_hash = new_fingerprint_hash - to_chat(user, "Fingerprint hash changed to '[new_fingerprint_hash]'.") - . = 1 - if("Name") - var/new_name = sanitizeName(input(user,"What name would you like to put on this card?","Agent Card Name", registered_name) as null|text, allow_numbers=TRUE) - if(!isnull(new_name) && CanUseTopic(user, state)) - src.registered_name = new_name - to_chat(user, "Name changed to '[new_name]'.") - . = 1 - if("Photo") - set_id_photo(user) - to_chat(user, "Photo changed.") - . = 1 - if("Sex") - var/new_sex = sanitize(input(user,"What sex would you like to put on this card?","Agent Card Sex", sex) as null|text) - if(!isnull(new_sex) && CanUseTopic(user, state)) - src.sex = new_sex - to_chat(user, "Sex changed to '[new_sex]'.") - . = 1 - if("Factory Reset") - if(alert("This will factory reset the card, including access and owner. Continue?", "Factory Reset", "No", "Yes") == "Yes" && CanUseTopic(user, state)) - age = initial(age) - formal_name_prefix = initial(formal_name_prefix) - formal_name_suffix = initial(formal_name_suffix) - access = syndicate_access.Copy() - assignment = initial(assignment) - blood_type = initial(blood_type) - dna_hash = initial(dna_hash) - electronic_warfare = initial(electronic_warfare) - fingerprint_hash = initial(fingerprint_hash) - icon_state = initial(icon_state) - color = initial(color) - detail_color = initial(detail_color) - extra_details = initial(extra_details) - SetName(initial(name)) - registered_name = initial(registered_name) - unset_registered_user() - sex = initial(sex) - military_branch = initial(military_branch) - military_rank = initial(military_rank) - to_chat(user, "All information has been deleted from \the [src].") - . = 1 - if("Branch") - var/new_branch = sanitize(input(user,"What branch of service would you like to put on this card?","Agent Card Branch") as null|anything in GLOB.mil_branches.spawn_branches()) - if(!isnull(new_branch) && CanUseTopic(user, state)) - src.military_branch = GLOB.mil_branches.spawn_branches()[new_branch] - to_chat(user, "Branch changed to '[military_branch.name]'.") - . = 1 - if("Rank") - var/new_rank = sanitize(input(user,"What rank would you like to put on this card?","Agent Card Rank") as null|anything in GLOB.mil_branches.spawn_ranks(military_branch.name)) - if(!isnull(new_rank) && CanUseTopic(user, state)) - src.military_rank = GLOB.mil_branches.spawn_ranks(military_branch.name)[new_rank] - to_chat(user, "Rank changed to '[military_rank.name]'.") - . = 1 - - // Always update the UI, or buttons will spin indefinitely - SSnano.update_uis(src) - -var/global/list/id_card_states -/proc/id_card_states() - if(!id_card_states) - id_card_states = list() - for(var/path in typesof(/obj/item/card/id)) - var/obj/item/card/id/ID = path - var/datum/card_state/CS = new() - CS.icon_state = initial(ID.icon_state) - CS.item_state = initial(ID.item_state) - CS.color = initial(ID.color) - CS.detail_color = initial(ID.detail_color) - CS.extra_details = initial(ID.extra_details) - CS.name = initial(ID.name) - if (initial(ID.job_access_type)) - var/datum/job/J = initial(ID.job_access_type) - CS.name += " ([initial(J.title)]) " - CS.name += " - [initial(ID.icon_state)]" - var/color_pair = "" - if(CS.color) - color_pair += CS.color - if(CS.detail_color) - color_pair += "/[CS.detail_color]" - if(color_pair) - CS.name += " - [color_pair]" - id_card_states += CS - id_card_states = dd_sortedObjectList(id_card_states) - - return id_card_states - -/datum/card_state - var/name - var/icon_state - var/item_state - var/color - var/detail_color - var/details - var/extra_details - -/datum/card_state/dd_SortValue() - return name diff --git a/code/game/objects/items/weapons/circuitboards/broken.dm b/code/game/objects/items/weapons/circuitboards/broken.dm deleted file mode 100644 index 9d28d5d72cbea..0000000000000 --- a/code/game/objects/items/weapons/circuitboards/broken.dm +++ /dev/null @@ -1,6 +0,0 @@ -/obj/item/stock_parts/circuitboard/broken - name = "broken electronics" - icon = 'icons/obj/doors/door_assembly.dmi' - icon_state = "door_electronics_smoked" - origin_tech = null - board_type = "other" diff --git a/code/game/objects/items/weapons/circuitboards/circuitboard.dm b/code/game/objects/items/weapons/circuitboards/circuitboard.dm deleted file mode 100644 index ba129434337ec..0000000000000 --- a/code/game/objects/items/weapons/circuitboards/circuitboard.dm +++ /dev/null @@ -1,83 +0,0 @@ -/obj/item/stock_parts/circuitboard - name = "circuit board" - desc = "An electronic PCB used to build machines." - icon = 'icons/obj/module.dmi' - icon_state = "id_mod" - item_state = "electronic" - origin_tech = list(TECH_DATA = 2) - density = FALSE - anchored = FALSE - w_class = ITEM_SIZE_SMALL - obj_flags = OBJ_FLAG_CONDUCTIBLE - force = 5.0 - throwforce = 5.0 - throw_speed = 3 - throw_range = 15 - part_flags = 0 - var/build_path = null - var/board_type = "computer" - var/list/req_components = list( - /obj/item/stock_parts/console_screen = 1, - /obj/item/stock_parts/keyboard = 1 - ) // Components needed to build the machine. - var/list/spawn_components // If set, will be used as a replacement for req_components when setting components at round start. - var/list/additional_spawn_components = list( - /obj/item/stock_parts/power/apc/buildable = 1 - ) // unlike the above, this is added to req_components instead of replacing them. - var/buildtype_select = FALSE - -/obj/item/stock_parts/circuitboard/examine(mob/user) - . = ..() - if (!user.skill_check(SKILL_CONSTRUCTION, SKILL_BASIC) && !isobserver(user)) - to_chat(user, "You aren't sure what you can build with this.") - return - if (build_path) - var/obj/machinery/M = build_path - var/machine_name = initial(M.machine_name) - var/machine_desc = initial(M.machine_desc) - if (machine_name && machine_desc) - to_chat(user, SPAN_NOTICE("This circuit board is part of \a [machine_name].")) - to_chat(user, SPAN_NOTICE(machine_desc)) - if (buildtype_select) - to_chat(user, SPAN_NOTICE("This board can be used for multiple machines. Use a multitool to determine what type of machine that will be created.")) - if (user.skill_check(SKILL_CONSTRUCTION, SKILL_ADEPT) || isobserver(user)) - if (req_components.len) - to_chat(user, SPAN_NOTICE("It requires the following parts to function:")) - for (var/V in req_components) - var/obj/item/I = V - to_chat(user, SPAN_NOTICE("  [req_components[V]] [initial(I.name)]")) - if (additional_spawn_components.len) - to_chat(user, SPAN_NOTICE("It[req_components.len ? " also" : ""] requires the following parts to actually be usable:")) - for (var/V in additional_spawn_components) - var/obj/item/I = V - to_chat(user, SPAN_NOTICE("  [additional_spawn_components[V]] [initial(I.name)]")) - -//Called when the circuitboard is used to contruct a new machine. -/obj/item/stock_parts/circuitboard/proc/construct(var/obj/machinery/M) - if (istype(M, build_path)) - return 1 - return 0 - -//Called when a computer is deconstructed to produce a circuitboard. -//Only used by computers, as other machines store their circuitboard instance. -/obj/item/stock_parts/circuitboard/proc/deconstruct(var/obj/machinery/M) - if (istype(M, build_path)) - return 1 - return 0 - -// Used with the build type selection multitool extension. Return a list of possible build types to allow multitool toggle. -/obj/item/stock_parts/circuitboard/proc/get_buildable_types() - -/obj/item/stock_parts/circuitboard/Initialize() - . = ..() - if(buildtype_select) - if(get_extension(src, /datum/extension/interactive/multitool)) - CRASH("A circuitboard of type [type] has conflicting multitool extensions") - set_extension(src, /datum/extension/interactive/multitool/circuitboards/buildtype_select) - -/obj/item/stock_parts/circuitboard/on_uninstall(obj/machinery/machine) - . = ..() - if(buildtype_select && machine) - build_path = machine.base_type || machine.type - var/obj/machinery/thing = build_path - SetName(T_BOARD(initial(thing.name))) \ No newline at end of file diff --git a/code/game/objects/items/weapons/circuitboards/computer/air_management.dm b/code/game/objects/items/weapons/circuitboards/computer/air_management.dm deleted file mode 100644 index a839195974faa..0000000000000 --- a/code/game/objects/items/weapons/circuitboards/computer/air_management.dm +++ /dev/null @@ -1,97 +0,0 @@ -/obj/item/stock_parts/circuitboard/air_management - name = T_BOARD("atmosphere monitoring console") - build_path = /obj/machinery/computer/air_control - var/console_name - var/frequency = 1441 - var/sensor_tag - var/sensor_name - var/list/sensor_information = list() - -/obj/item/stock_parts/circuitboard/air_management/supermatter_core - name = T_BOARD("core control") - build_path = /obj/machinery/computer/air_control/supermatter_core - frequency = 1438 - var/input_tag - var/output_tag - - var/list/input_info = list() - var/list/output_info = list() - - var/input_flow_setting = 700 - var/pressure_setting = 100 - -/obj/item/stock_parts/circuitboard/air_management/injector_control - name = T_BOARD("injector control") - build_path = /obj/machinery/computer/air_control/fuel_injection - var/device_tag - var/list/device_info - var/automation = 0 - var/cutoff_temperature = 2000 - var/on_temperature = 1200 - -/************ -* Construct * -************/ -/obj/item/stock_parts/circuitboard/air_management/construct(var/obj/machinery/computer/air_control/C) - if (..(C)) - if(console_name) - C.SetName(console_name) - C.set_frequency(frequency) - C.sensor_tag = sensor_tag - C.sensor_name = sensor_name - C.sensor_info = sensor_information.Copy() - return 1 - -/obj/item/stock_parts/circuitboard/air_management/supermatter_core/construct(var/obj/machinery/computer/air_control/supermatter_core/SC) - if(..(SC)) - SC.input_tag = input_tag - SC.output_tag = output_tag - - SC.input_info = input_info.Copy() - SC.output_info = output_info.Copy() - - SC.input_flow_setting = input_flow_setting - SC.pressure_setting = input_flow_setting - return 1 - -/obj/item/stock_parts/circuitboard/air_management/injector_control/construct(var/obj/machinery/computer/air_control/fuel_injection/FI) - if(..(FI)) - FI.device_tag = device_tag - FI.device_info = device_info.Copy() - FI.automation = automation - FI.cutoff_temperature = cutoff_temperature - FI.on_temperature = on_temperature - return 1 - -/************** -* Deconstruct * -**************/ -/obj/item/stock_parts/circuitboard/air_management/deconstruct(var/obj/machinery/computer/air_control/C) - if (..(C)) - console_name = C.name - frequency = C.frequency - sensor_tag = C.sensor_tag - sensor_name = C.sensor_name - sensor_information = C.sensor_info.Copy() - return 1 - -/obj/item/stock_parts/circuitboard/air_management/supermatter_core/deconstruct(var/obj/machinery/computer/air_control/supermatter_core/SC) - if(..(SC)) - input_tag = SC.input_tag - output_tag = SC.output_tag - - input_info = SC.input_info.Copy() - output_info = SC.output_info.Copy() - - input_flow_setting = SC.input_flow_setting - pressure_setting = SC.input_flow_setting - return 1 - -/obj/item/stock_parts/circuitboard/air_management/injector_control/deconstruct(var/obj/machinery/computer/air_control/fuel_injection/FI) - if(..(FI)) - device_tag = FI.device_tag - device_info = FI.device_info.Copy() - automation = FI.automation - cutoff_temperature = FI.cutoff_temperature - on_temperature = FI.on_temperature - return 1 \ No newline at end of file diff --git a/code/game/objects/items/weapons/circuitboards/computer/computer.dm b/code/game/objects/items/weapons/circuitboards/computer/computer.dm deleted file mode 100644 index 5ddcfec8c0488..0000000000000 --- a/code/game/objects/items/weapons/circuitboards/computer/computer.dm +++ /dev/null @@ -1,112 +0,0 @@ -/obj/item/stock_parts/circuitboard/message_monitor - name = T_BOARD("message monitor console") - build_path = /obj/machinery/computer/message_monitor - origin_tech = list(TECH_DATA = 3) - -/obj/item/stock_parts/circuitboard/aiupload - name = T_BOARD("AI upload console") - build_path = /obj/machinery/computer/upload/ai - origin_tech = list(TECH_DATA = 4) - -/obj/item/stock_parts/circuitboard/borgupload - name = T_BOARD("cyborg upload console") - build_path = /obj/machinery/computer/upload/robot - origin_tech = list(TECH_DATA = 4) - -/obj/item/stock_parts/circuitboard/teleporter - name = T_BOARD("teleporter control console") - build_path = /obj/machinery/computer/teleporter - origin_tech = list(TECH_DATA = 2, TECH_BLUESPACE = 4) - -/obj/item/stock_parts/circuitboard/atmos_alert - name = T_BOARD("atmospheric alert console") - build_path = /obj/machinery/computer/atmos_alert - -/obj/item/stock_parts/circuitboard/robotics - name = T_BOARD("robotics control console") - build_path = /obj/machinery/computer/robotics - origin_tech = list(TECH_DATA = 3) - -/obj/item/stock_parts/circuitboard/drone_control - name = T_BOARD("drone control console") - build_path = /obj/machinery/computer/drone_control - origin_tech = list(TECH_DATA = 3) - -/obj/item/stock_parts/circuitboard/arcade/battle - name = T_BOARD("battle arcade machine") - build_path = /obj/machinery/computer/arcade/battle - origin_tech = list(TECH_DATA = 1) - -/obj/item/stock_parts/circuitboard/arcade/orion_trail - name = T_BOARD("orion trail arcade machine") - build_path = /obj/machinery/computer/arcade/orion_trail - origin_tech = list(TECH_DATA = 1) - -/obj/item/stock_parts/circuitboard/turbine_control - name = T_BOARD("turbine control console") - build_path = /obj/machinery/computer/turbine_computer - -/obj/item/stock_parts/circuitboard/solar_control - name = T_BOARD("solar control console") - build_path = /obj/machinery/power/solar_control - origin_tech = list(TECH_DATA = 2, TECH_POWER = 2) - -/obj/item/stock_parts/circuitboard/powermonitor - name = T_BOARD("power monitoring console") - build_path = /obj/machinery/computer/power_monitor - -/obj/item/stock_parts/circuitboard/prisoner - name = T_BOARD("prisoner management console") - build_path = /obj/machinery/computer/prisoner - -/obj/item/stock_parts/circuitboard/rdservercontrol - name = T_BOARD("R&D server control console") - build_path = /obj/machinery/computer/rdservercontrol - -/obj/item/stock_parts/circuitboard/crew - name = T_BOARD("crew monitoring console") - build_path = /obj/machinery/computer/crew - origin_tech = list(TECH_DATA = 3, TECH_BIO = 2, TECH_MAGNET = 2) - -/obj/item/stock_parts/circuitboard/operating - name = T_BOARD("patient monitoring console") - build_path = /obj/machinery/computer/operating - origin_tech = list(TECH_DATA = 2, TECH_BIO = 2) - -/obj/item/stock_parts/circuitboard/helm - name = T_BOARD("helm control console") - build_path = /obj/machinery/computer/ship/helm - -/obj/item/stock_parts/circuitboard/engine - name = T_BOARD("engine control console") - build_path = /obj/machinery/computer/ship/engines - -/obj/item/stock_parts/circuitboard/nav - name = T_BOARD("navigation console") - build_path = /obj/machinery/computer/ship/navigation - -/obj/item/stock_parts/circuitboard/nav/tele - name = T_BOARD("navigation telescreen") - build_path = /obj/machinery/computer/ship/navigation/telescreen - -/obj/item/stock_parts/circuitboard/sensors - name = T_BOARD("sensors console") - build_path = /obj/machinery/computer/ship/sensors - -/obj/item/stock_parts/circuitboard/area_atmos - name = T_BOARD("area air control console") - build_path = /obj/machinery/computer/area_atmos - origin_tech = list(TECH_DATA = 2) - -/obj/item/stock_parts/circuitboard/rcon_console - name = T_BOARD("RCON remote control console") - build_path = /obj/machinery/computer/rcon - origin_tech = list(TECH_DATA = 4, TECH_ENGINEERING = 3, TECH_POWER = 5) - -/obj/item/stock_parts/circuitboard/account_database - name = T_BOARD("accounts uplink terminal") - build_path = /obj/machinery/computer/account_database - -/obj/item/stock_parts/circuitboard/guestpass - name = T_BOARD("guest pass terminal") - build_path = /obj/machinery/computer/guestpass \ No newline at end of file diff --git a/code/game/objects/items/weapons/circuitboards/computer/holodeckcontrol.dm b/code/game/objects/items/weapons/circuitboards/computer/holodeckcontrol.dm deleted file mode 100644 index 936343025f655..0000000000000 --- a/code/game/objects/items/weapons/circuitboards/computer/holodeckcontrol.dm +++ /dev/null @@ -1,27 +0,0 @@ -/obj/item/stock_parts/circuitboard/holodeckcontrol - name = T_BOARD("holodeck control console") - build_path = /obj/machinery/computer/HolodeckControl - origin_tech = list(TECH_DATA = 2, TECH_BLUESPACE = 2) - var/last_to_emag - var/linkedholodeck_area - var/list/supported_programs - var/list/restricted_programs - -/obj/item/stock_parts/circuitboard/holodeckcontrol/construct(var/obj/machinery/computer/HolodeckControl/HC) - if (..(HC)) - HC.supported_programs = supported_programs.Copy() - HC.restricted_programs = restricted_programs.Copy() - if(linkedholodeck_area) - HC.linkedholodeck = locate(linkedholodeck_area) - if(last_to_emag) - HC.last_to_emag = last_to_emag - HC.emagged = TRUE - HC.safety_disabled = 1 - -/obj/item/stock_parts/circuitboard/holodeckcontrol/deconstruct(var/obj/machinery/computer/HolodeckControl/HC) - if (..(HC)) - linkedholodeck_area = HC.linkedholodeck_area - supported_programs = HC.supported_programs.Copy() - restricted_programs = HC.restricted_programs.Copy() - last_to_emag = HC.last_to_emag - HC.emergencyShutdown() diff --git a/code/game/objects/items/weapons/circuitboards/computer/modular.dm b/code/game/objects/items/weapons/circuitboards/computer/modular.dm deleted file mode 100644 index f4161e8cf9a53..0000000000000 --- a/code/game/objects/items/weapons/circuitboards/computer/modular.dm +++ /dev/null @@ -1,23 +0,0 @@ -/obj/item/stock_parts/circuitboard/modular_computer - name = "general-purpose computer motherboard" - build_path = /obj/machinery/computer/modular - req_components = list( - /obj/item/stock_parts/computer/processor_unit = 1 - ) - additional_spawn_components = list( - /obj/item/stock_parts/computer/network_card/wired = 1, - /obj/item/stock_parts/computer/hard_drive/super = 1, - /obj/item/stock_parts/console_screen = 1, - /obj/item/stock_parts/keyboard = 1, - /obj/item/stock_parts/power/apc/buildable = 1, - /obj/item/stock_parts/computer/nano_printer = 1, - /obj/item/stock_parts/computer/scanner/paper = 1 - ) - var/emagged - -/obj/item/stock_parts/circuitboard/modular_computer/emag_act(var/remaining_charges, var/mob/user) - if(emagged) - return ..() - else - emagged = TRUE - to_chat(user, "You disable the factory safeties on \the [src].") diff --git a/code/game/objects/items/weapons/circuitboards/computer/research.dm b/code/game/objects/items/weapons/circuitboards/computer/research.dm deleted file mode 100644 index f15b9e65910ac..0000000000000 --- a/code/game/objects/items/weapons/circuitboards/computer/research.dm +++ /dev/null @@ -1,16 +0,0 @@ -/obj/item/stock_parts/circuitboard/rdconsole - name = T_BOARD("R&D control console") - build_path = /obj/machinery/computer/rdconsole/core - -/obj/item/stock_parts/circuitboard/rdconsole/attackby(obj/item/I as obj, mob/user as mob) - if(isScrewdriver(I)) - user.visible_message("\The [user] adjusts the jumper on \the [src]'s access protocol pins.", "You adjust the jumper on the access protocol pins.") - if(src.build_path == /obj/machinery/computer/rdconsole/core) - src.SetName(T_BOARD("RD Console - Robotics")) - src.build_path = /obj/machinery/computer/rdconsole/robotics - to_chat(user, "Access protocols set to robotics.") - else - src.SetName(T_BOARD("RD Console")) - src.build_path = /obj/machinery/computer/rdconsole/core - to_chat(user, "Access protocols set to default.") - return diff --git a/code/game/objects/items/weapons/circuitboards/computer/shuttle.dm b/code/game/objects/items/weapons/circuitboards/computer/shuttle.dm deleted file mode 100644 index 7599a4714405a..0000000000000 --- a/code/game/objects/items/weapons/circuitboards/computer/shuttle.dm +++ /dev/null @@ -1,25 +0,0 @@ -/obj/item/stock_parts/circuitboard/shuttle_console - name = T_BOARD("basic shuttle console") - build_path = /obj/machinery/computer/shuttle_control - origin_tech = list(TECH_DATA = 3) - var/shuttle_tag - -/obj/item/stock_parts/circuitboard/shuttle_console/construct(obj/machinery/computer/shuttle_control/M) - M.shuttle_tag = shuttle_tag - -/obj/item/stock_parts/circuitboard/shuttle_console/deconstruct(obj/machinery/computer/shuttle_control/M) - shuttle_tag = M.shuttle_tag - -/obj/item/stock_parts/circuitboard/shuttle_console/Initialize() - set_extension(src, /datum/extension/interactive/multitool/circuitboards/shuttle_console) - . = ..() - -/obj/item/stock_parts/circuitboard/shuttle_console/proc/is_valid_shuttle(datum/shuttle/shuttle) - return TRUE - -/obj/item/stock_parts/circuitboard/shuttle_console/explore - name = T_BOARD("long range shuttle console") - build_path = /obj/machinery/computer/shuttle_control/explore - -/obj/item/stock_parts/circuitboard/shuttle_console/explore/is_valid_shuttle(datum/shuttle/shuttle) - return istype(shuttle, /datum/shuttle/autodock/overmap) \ No newline at end of file diff --git a/code/game/objects/items/weapons/circuitboards/computer/station_alert.dm b/code/game/objects/items/weapons/circuitboards/computer/station_alert.dm deleted file mode 100644 index cee53d71acc67..0000000000000 --- a/code/game/objects/items/weapons/circuitboards/computer/station_alert.dm +++ /dev/null @@ -1,29 +0,0 @@ -/obj/item/stock_parts/circuitboard/stationalert - name = T_BOARD("alert console") - build_path = /obj/machinery/computer/station_alert - var/list/alarm_handlers - -/obj/item/stock_parts/circuitboard/stationalert/New() - alarm_handlers = new() - set_extension(src, /datum/extension/interactive/multitool/circuitboards/stationalert) - ..() - -/obj/item/stock_parts/circuitboard/stationalert/construct(var/obj/machinery/computer/station_alert/SA) - if(..(SA)) - SA.unregister_monitor() - - var/datum/nano_module/alarm_monitor/monitor = new(SA) - monitor.alarm_handlers.Cut() - for(var/alarm_handler in alarm_handlers) - monitor.alarm_handlers += alarm_handler - - SA.register_monitor(monitor) - return 1 - -/obj/item/stock_parts/circuitboard/stationalert/deconstruct(var/obj/machinery/computer/station_alert/SA) - if(..(SA)) - alarm_handlers.Cut() - if(SA.alarm_monitor) - for(var/alarm_handler in SA.alarm_monitor.alarm_handlers) - alarm_handlers += alarm_handler - return 1 diff --git a/code/game/objects/items/weapons/circuitboards/computer/telecomms.dm b/code/game/objects/items/weapons/circuitboards/computer/telecomms.dm deleted file mode 100644 index 2586ab680c188..0000000000000 --- a/code/game/objects/items/weapons/circuitboards/computer/telecomms.dm +++ /dev/null @@ -1,9 +0,0 @@ -/obj/item/stock_parts/circuitboard/comm_monitor - name = T_BOARD("telecommunications monitor console") - build_path = /obj/machinery/computer/telecomms/monitor - origin_tech = list(TECH_DATA = 3) - -/obj/item/stock_parts/circuitboard/comm_server - name = T_BOARD("telecommunications server monitor console") - build_path = /obj/machinery/computer/telecomms/server - origin_tech = list(TECH_DATA = 3) diff --git a/code/game/objects/items/weapons/circuitboards/machinery/biogenerator.dm b/code/game/objects/items/weapons/circuitboards/machinery/biogenerator.dm deleted file mode 100644 index 97a7a79c9a346..0000000000000 --- a/code/game/objects/items/weapons/circuitboards/machinery/biogenerator.dm +++ /dev/null @@ -1,14 +0,0 @@ -/obj/item/stock_parts/circuitboard/biogenerator - name = T_BOARD("biogenerator") - build_path = /obj/machinery/biogenerator - board_type = "machine" - origin_tech = list(TECH_DATA = 2) - req_components = list( - /obj/item/stock_parts/matter_bin = 1, - /obj/item/stock_parts/manipulator = 1 - ) - additional_spawn_components = list( - /obj/item/stock_parts/console_screen = 1, - /obj/item/stock_parts/keyboard = 1, - /obj/item/stock_parts/power/apc/buildable = 1 - ) \ No newline at end of file diff --git a/code/game/objects/items/weapons/circuitboards/machinery/bluespacedrive.dm b/code/game/objects/items/weapons/circuitboards/machinery/bluespacedrive.dm deleted file mode 100644 index 555935a4b07b5..0000000000000 --- a/code/game/objects/items/weapons/circuitboards/machinery/bluespacedrive.dm +++ /dev/null @@ -1,9 +0,0 @@ -/obj/item/stock_parts/circuitboard/bluespacedrive - name = T_BOARD("Naophoros-pattern bluespace puncturer") - build_path = /obj/machinery/bluespacedrive - board_type = "machine" - origin_tech = list(TECH_BLUESPACE = 12, TECH_POWER = 12, TECH_ENGINEERING = 12) // You are not supposed to get this - req_components = list( - /obj/item/stock_parts/smes_coil = 5, - /obj/item/stock_parts/capacitor = 1, - /obj/item/stock_parts/micro_laser = 1,) diff --git a/code/game/objects/items/weapons/circuitboards/machinery/chemistry.dm b/code/game/objects/items/weapons/circuitboards/machinery/chemistry.dm deleted file mode 100644 index 7c76d845ccd6f..0000000000000 --- a/code/game/objects/items/weapons/circuitboards/machinery/chemistry.dm +++ /dev/null @@ -1,65 +0,0 @@ -/obj/item/stock_parts/circuitboard/reagent_heater - name = T_BOARD("chemical heater") - build_path = /obj/machinery/reagent_temperature - board_type = "machine" - origin_tech = list(TECH_POWER = 2, TECH_ENGINEERING = 1) - req_components = list( - /obj/item/stock_parts/micro_laser = 1, - /obj/item/stock_parts/capacitor = 1 - ) - additional_spawn_components = list( - /obj/item/stock_parts/console_screen = 1, - /obj/item/stock_parts/keyboard = 1, - /obj/item/stock_parts/power/apc/buildable = 1 - ) - -/obj/item/stock_parts/circuitboard/reagent_heater/cooler - name = T_BOARD("chemical cooler") - build_path = /obj/machinery/reagent_temperature/cooler - -/obj/item/stock_parts/circuitboard/sublimator - name = T_BOARD("reagent sublimator") - build_path = /obj/machinery/portable_atmospherics/reagent_sublimator - board_type = "machine" - origin_tech = list(TECH_POWER = 2, TECH_ENGINEERING = 1) - req_components = list( - /obj/item/stock_parts/micro_laser = 1, - /obj/item/stock_parts/capacitor = 1, - /obj/item/stock_parts/matter_bin = 1 - ) - additional_spawn_components = list( - /obj/item/stock_parts/power/apc/buildable = 1 - ) - -/obj/item/stock_parts/circuitboard/sublimator/sauna - name = T_BOARD("sauna sublimator") - build_path = /obj/machinery/portable_atmospherics/reagent_sublimator/sauna - - -/obj/item/stock_parts/circuitboard/reagentgrinder - name = T_BOARD("reagent grinder") - build_path = /obj/machinery/reagentgrinder - board_type = "machine" - origin_tech = list(TECH_BIO = 1, TECH_MATERIAL = 2, TECH_ENGINEERING = 2) - req_components = list( - /obj/item/stock_parts/matter_bin = 2, - /obj/item/stock_parts/manipulator = 2, - /obj/item/stock_parts/capacitor = 2 - ) - additional_spawn_components = list( - /obj/item/stock_parts/power/apc/buildable = 1 - ) - -/obj/item/stock_parts/circuitboard/juicer - name = T_BOARD("blender") - build_path = /obj/machinery/reagentgrinder/juicer - board_type = "machine" - origin_tech = list(TECH_BIO = 1, TECH_MATERIAL = 1, TECH_ENGINEERING = 1) - req_components = list( - /obj/item/stock_parts/matter_bin = 1, - /obj/item/stock_parts/manipulator = 1, - /obj/item/stock_parts/capacitor = 1 - ) - additional_spawn_components = list( - /obj/item/stock_parts/power/apc/buildable = 1 - ) diff --git a/code/game/objects/items/weapons/circuitboards/machinery/cloning.dm b/code/game/objects/items/weapons/circuitboards/machinery/cloning.dm deleted file mode 100644 index 3037cbeaee8e3..0000000000000 --- a/code/game/objects/items/weapons/circuitboards/machinery/cloning.dm +++ /dev/null @@ -1,30 +0,0 @@ -/obj/item/stock_parts/circuitboard/bioprinter - name = T_BOARD("bioprinter") - build_path = /obj/machinery/organ_printer/flesh - board_type = "machine" - origin_tech = list(TECH_ENGINEERING = 1, TECH_BIO = 3, TECH_DATA = 3) - req_components = list( - /obj/item/device/scanner/health = 1, - /obj/item/stock_parts/matter_bin = 2, - /obj/item/stock_parts/manipulator = 2 - ) - additional_spawn_components = list( - /obj/item/stock_parts/console_screen = 1, - /obj/item/stock_parts/keyboard = 1, - /obj/item/stock_parts/power/apc/buildable = 1 - ) - -/obj/item/stock_parts/circuitboard/roboprinter - name = T_BOARD("prosthetic organ fabricator") - build_path = /obj/machinery/organ_printer/robot - board_type = "machine" - origin_tech = list(TECH_ENGINEERING = 3, TECH_DATA = 3) - req_components = list( - /obj/item/stock_parts/matter_bin = 2, - /obj/item/stock_parts/manipulator = 2 - ) - additional_spawn_components = list( - /obj/item/stock_parts/console_screen = 1, - /obj/item/stock_parts/keyboard = 1, - /obj/item/stock_parts/power/apc/buildable = 1 - ) diff --git a/code/game/objects/items/weapons/circuitboards/machinery/commsantenna.dm b/code/game/objects/items/weapons/circuitboards/machinery/commsantenna.dm deleted file mode 100644 index 8d9ff063a2783..0000000000000 --- a/code/game/objects/items/weapons/circuitboards/machinery/commsantenna.dm +++ /dev/null @@ -1,11 +0,0 @@ -/obj/item/stock_parts/circuitboard/bluespacerelay - name = T_BOARD("bluespacerelay") - build_path = /obj/machinery/bluespacerelay - board_type = "machine" - origin_tech = list(TECH_BLUESPACE = 2, TECH_DATA = 2) - req_components = list( - /obj/item/stack/cable_coil = 30, - /obj/item/stock_parts/manipulator = 2, - /obj/item/stock_parts/subspace/filter = 1, - /obj/item/stock_parts/subspace/crystal = 1 - ) \ No newline at end of file diff --git a/code/game/objects/items/weapons/circuitboards/machinery/engineering_circuits.dm b/code/game/objects/items/weapons/circuitboards/machinery/engineering_circuits.dm deleted file mode 100644 index 536986d676aa8..0000000000000 --- a/code/game/objects/items/weapons/circuitboards/machinery/engineering_circuits.dm +++ /dev/null @@ -1,28 +0,0 @@ -/obj/item/stock_parts/circuitboard/floodlight - name = T_BOARD("emergency floodlight") - build_path = /obj/machinery/floodlight - board_type = "machine" - origin_tech = list(TECH_ENGINEERING = 1) - req_components = list( - /obj/item/stack/cable_coil = 10) - additional_spawn_components = list( - /obj/item/stock_parts/capacitor = 1, - /obj/item/stock_parts/power/battery/buildable/crap = 1, - /obj/item/cell/crap = 1) - -/obj/item/stock_parts/circuitboard/pipedispensor - name = T_BOARD("pipe dispenser") - build_path = /obj/machinery/pipedispenser - board_type = "machine" - origin_tech = list(TECH_ENGINEERING = 6, TECH_MATERIAL = 5) - req_components = list( - /obj/item/stock_parts/manipulator = 1, - /obj/item/stock_parts/matter_bin = 2, - /obj/item/rcd_ammo/large = 2) - additional_spawn_components = list( - /obj/item/stock_parts/keyboard = 1, - /obj/item/stock_parts/power/apc/buildable = 1) - -/obj/item/stock_parts/circuitboard/pipedispensor/disposal - name = T_BOARD("disposal pipe dispenser") - build_path = /obj/machinery/pipedispenser/disposal diff --git a/code/game/objects/items/weapons/circuitboards/machinery/household.dm b/code/game/objects/items/weapons/circuitboards/machinery/household.dm deleted file mode 100644 index b77bebcba03d4..0000000000000 --- a/code/game/objects/items/weapons/circuitboards/machinery/household.dm +++ /dev/null @@ -1,107 +0,0 @@ -/obj/item/stock_parts/circuitboard/microwave - name = T_BOARD("microwave") - build_path = /obj/machinery/microwave - board_type = "machine" - origin_tech = list(TECH_BIO = 2, TECH_ENGINEERING = 2) - req_components = list( - /obj/item/stock_parts/manipulator = 1, - /obj/item/stock_parts/micro_laser = 2, - /obj/item/stock_parts/matter_bin = 1) - additional_spawn_components = list( - /obj/item/stock_parts/console_screen = 1, - /obj/item/stock_parts/keyboard = 1, - /obj/item/stock_parts/power/apc/buildable = 1 - ) - -/obj/item/stock_parts/circuitboard/gibber - name = T_BOARD("meat gibber") - build_path = /obj/machinery/gibber - board_type = "machine" - origin_tech = list(TECH_BIO = 2, TECH_MATERIAL = 2) - req_components = list( - /obj/item/stock_parts/manipulator = 2, - /obj/item/stock_parts/matter_bin = 1, - /obj/item/material/knife/kitchen/cleaver = 1) - additional_spawn_components = list( - /obj/item/stock_parts/keyboard = 1, - /obj/item/stock_parts/power/apc/buildable = 1 - ) - -/obj/item/stock_parts/circuitboard/cooker - name = T_BOARD("candy machine") - build_path = /obj/machinery/cooker/candy - board_type = "machine" - origin_tech = list(TECH_BIO = 1, TECH_MATERIAL = 1) - buildtype_select = TRUE - req_components = list( - /obj/item/stock_parts/manipulator = 2, - /obj/item/stock_parts/matter_bin = 1, - /obj/item/stack/cable_coil = 10) - additional_spawn_components = list( - /obj/item/stock_parts/console_screen = 1, - /obj/item/stock_parts/keyboard = 1, - /obj/item/stock_parts/power/apc/buildable = 1 - ) - -/obj/item/stock_parts/circuitboard/cooker/get_buildable_types() - return subtypesof(/obj/machinery/cooker) - -/obj/item/stock_parts/circuitboard/honey - name = T_BOARD("honey extractor") - build_path = /obj/machinery/honey_extractor - board_type = "machine" - origin_tech = list(TECH_BIO = 2, TECH_ENGINEERING = 1) - req_components = list( - /obj/item/stock_parts/manipulator = 2, - /obj/item/stock_parts/matter_bin = 2) - -/obj/item/stock_parts/circuitboard/honey/seed - name = T_BOARD("seed extractor") - build_path = /obj/machinery/seed_extractor - board_type = "machine" - -/obj/item/stock_parts/circuitboard/washer - name = T_BOARD("washing machine") - build_path = /obj/machinery/washing_machine - board_type = "machine" - origin_tech = list(TECH_ENGINEERING = 1) - req_components = list( - /obj/item/stock_parts/manipulator = 1, - /obj/item/stock_parts/micro_laser = 1, - /obj/item/stock_parts/matter_bin = 1, - /obj/item/pipe = 1) - -/obj/item/stock_parts/circuitboard/vending - name = T_BOARD("vending machine") - build_path = /obj/machinery/vending/assist - board_type = "machine" - origin_tech = list(TECH_ENGINEERING = 2) - req_components = list( - /obj/item/stock_parts/matter_bin = 1, - /obj/item/stock_parts/manipulator = 1 - ) - additional_spawn_components = list( - /obj/item/stock_parts/console_screen = 1, - /obj/item/stock_parts/keyboard = 1, - /obj/item/stock_parts/power/apc/buildable = 1 - ) - buildtype_select = TRUE - -/obj/item/stock_parts/circuitboard/vending/get_buildable_types() - . = list() - for(var/path in typesof(/obj/machinery/vending)) - var/obj/machinery/vending/vendor = path - var/base_type = initial(vendor.base_type) || path - . |= base_type - -/obj/item/stock_parts/circuitboard/shipmap - name = T_BOARD("ship holomap") - board_type = "machine" - build_path = /obj/machinery/ship_map - origin_tech = list(TECH_ENGINEERING = 1) - req_components = list() - additional_spawn_components = list( - /obj/item/stock_parts/console_screen = 1, - /obj/item/stock_parts/keyboard = 1, - /obj/item/stock_parts/power/apc/buildable = 1 - ) diff --git a/code/game/objects/items/weapons/circuitboards/machinery/mech_recharger.dm b/code/game/objects/items/weapons/circuitboards/machinery/mech_recharger.dm deleted file mode 100644 index c03fea15e890d..0000000000000 --- a/code/game/objects/items/weapons/circuitboards/machinery/mech_recharger.dm +++ /dev/null @@ -1,9 +0,0 @@ -/obj/item/stock_parts/circuitboard/mech_recharger - name = T_BOARD("mech recharger") - build_path = /obj/machinery/mech_recharger - board_type = "machine" - origin_tech = list(TECH_DATA = 2, TECH_POWER = 2, TECH_ENGINEERING = 2) - req_components = list( - /obj/item/stock_parts/capacitor = 2, - /obj/item/stock_parts/scanning_module = 1, - /obj/item/stock_parts/manipulator = 2) \ No newline at end of file diff --git a/code/game/objects/items/weapons/circuitboards/machinery/medical.dm b/code/game/objects/items/weapons/circuitboards/machinery/medical.dm deleted file mode 100644 index ea096d343350c..0000000000000 --- a/code/game/objects/items/weapons/circuitboards/machinery/medical.dm +++ /dev/null @@ -1,72 +0,0 @@ -/obj/item/stock_parts/circuitboard/optable - name = T_BOARD("operating table") - build_path = /obj/machinery/optable - board_type = "machine" - origin_tech = list(TECH_ENGINEERING = 1, TECH_BIO = 3, TECH_DATA = 3) - req_components = list( - /obj/item/stock_parts/scanning_module = 1, - /obj/item/stock_parts/manipulator = 2, - /obj/item/stock_parts/capacitor = 1) - additional_spawn_components = list( - /obj/item/stock_parts/power/apc/buildable = 1 - ) - -/obj/item/stock_parts/circuitboard/bodyscanner - name = T_BOARD("body scanner") - build_path = /obj/machinery/bodyscanner - board_type = "machine" - origin_tech = list(TECH_ENGINEERING = 2, TECH_BIO = 4, TECH_DATA = 4) - req_components = list( - /obj/item/stock_parts/scanning_module = 2, - /obj/item/stock_parts/manipulator = 2, - /obj/item/stock_parts/console_screen = 1) - additional_spawn_components = list( - /obj/item/stock_parts/power/apc/buildable = 1 - ) - -/obj/item/stock_parts/circuitboard/body_scanconsole - name = T_BOARD("body scanner console") - build_path = /obj/machinery/body_scanconsole - board_type = "machine" - origin_tech = list(TECH_ENGINEERING = 2, TECH_BIO = 4, TECH_DATA = 4) - req_components = list( - /obj/item/stock_parts/console_screen = 1) - additional_spawn_components = list( - /obj/item/stock_parts/keyboard = 1, - /obj/item/stock_parts/power/apc/buildable = 1 - ) - -/obj/item/stock_parts/circuitboard/body_scanconsole/display - name = T_BOARD("body scanner display") - build_path = /obj/machinery/body_scan_display - origin_tech = list(TECH_BIO = 2, TECH_DATA = 2) - -/obj/item/stock_parts/circuitboard/sleeper - name = T_BOARD("sleeper") - build_path = /obj/machinery/sleeper - board_type = "machine" - origin_tech = list(TECH_ENGINEERING = 3, TECH_BIO = 5, TECH_DATA = 3) - req_components = list ( - /obj/item/stock_parts/scanning_module = 1, - /obj/item/stock_parts/manipulator = 2, - /obj/item/reagent_containers/syringe = 2) - additional_spawn_components = list( - /obj/item/stock_parts/console_screen = 1, - /obj/item/stock_parts/keyboard = 1, - /obj/item/stock_parts/power/apc/buildable = 1 - ) - -/obj/item/stock_parts/circuitboard/cryo_cell - name = T_BOARD("cryo cell") - build_path = /obj/machinery/atmospherics/unary/cryo_cell - board_type = "machine" - origin_tech = list(TECH_ENGINEERING = 4, TECH_BIO = 6, TECH_DATA = 3) - req_components = list ( - /obj/item/stock_parts/scanning_module = 1, - /obj/item/stock_parts/manipulator = 2, - /obj/item/pipe = 1) - additional_spawn_components = list( - /obj/item/stock_parts/console_screen = 1, - /obj/item/stock_parts/keyboard = 1, - /obj/item/stock_parts/power/apc/buildable = 1 - ) \ No newline at end of file diff --git a/code/game/objects/items/weapons/circuitboards/machinery/mining.dm b/code/game/objects/items/weapons/circuitboards/machinery/mining.dm deleted file mode 100644 index cce11970d064b..0000000000000 --- a/code/game/objects/items/weapons/circuitboards/machinery/mining.dm +++ /dev/null @@ -1,48 +0,0 @@ -/obj/item/stock_parts/circuitboard/mineral_processing - name = T_BOARD("mineral processing console") - build_path = /obj/machinery/computer/mining - origin_tech = list(TECH_DATA = 2, TECH_ENGINEERING = 2) - -/obj/item/stock_parts/circuitboard/mining_processor - name = T_BOARD("ore processor") - build_path = /obj/machinery/mineral/processing_unit - board_type = "machine" - origin_tech = list(TECH_DATA = 2, TECH_ENGINEERING = 2) - req_components = list( - /obj/item/stock_parts/manipulator = 1, - /obj/item/stock_parts/micro_laser = 2 - ) - additional_spawn_components = list( - /obj/item/stock_parts/console_screen = 1, - /obj/item/stock_parts/keyboard = 1, - /obj/item/stock_parts/power/apc/buildable = 1 - ) - -/obj/item/stock_parts/circuitboard/mining_unloader - name = T_BOARD("unloading machine") - build_path = /obj/machinery/mineral/unloading_machine - board_type = "machine" - origin_tech = list(TECH_DATA = 2, TECH_ENGINEERING = 2) - req_components = list( - /obj/item/stock_parts/manipulator = 2 - ) - additional_spawn_components = list( - /obj/item/stock_parts/console_screen = 1, - /obj/item/stock_parts/keyboard = 1, - /obj/item/stock_parts/power/apc/buildable = 1 - ) - -/obj/item/stock_parts/circuitboard/mining_stacker - name = T_BOARD("stacking machine") - build_path = /obj/machinery/mineral/stacking_machine - board_type = "machine" - origin_tech = list(TECH_DATA = 2, TECH_ENGINEERING = 2) - req_components = list( - /obj/item/stock_parts/matter_bin = 1, - /obj/item/stock_parts/manipulator = 1 - ) - additional_spawn_components = list( - /obj/item/stock_parts/console_screen = 1, - /obj/item/stock_parts/keyboard = 1, - /obj/item/stock_parts/power/apc/buildable = 1 - ) \ No newline at end of file diff --git a/code/game/objects/items/weapons/circuitboards/machinery/mining_drill.dm b/code/game/objects/items/weapons/circuitboards/machinery/mining_drill.dm deleted file mode 100644 index 5747cad30e356..0000000000000 --- a/code/game/objects/items/weapons/circuitboards/machinery/mining_drill.dm +++ /dev/null @@ -1,21 +0,0 @@ -/obj/item/stock_parts/circuitboard/miningdrill - name = T_BOARD("mining drill head") - build_path = /obj/machinery/mining/drill - board_type = "machine" - origin_tech = list(TECH_DATA = 1, TECH_ENGINEERING = 1) - req_components = list( - /obj/item/stock_parts/capacitor = 1, - /obj/item/stock_parts/matter_bin = 1, - /obj/item/stock_parts/micro_laser = 1) - additional_spawn_components = list( - /obj/item/stock_parts/power/battery/buildable/stock, - /obj/item/cell/standard = 1 - ) - -/obj/item/stock_parts/circuitboard/miningdrillbrace - name = T_BOARD("mining drill brace") - build_path = /obj/machinery/mining/brace - board_type = "machine" - origin_tech = list(TECH_DATA = 1, TECH_ENGINEERING = 1) - req_components = list() - additional_spawn_components = null \ No newline at end of file diff --git a/code/game/objects/items/weapons/circuitboards/machinery/oxyregenerator.dm b/code/game/objects/items/weapons/circuitboards/machinery/oxyregenerator.dm deleted file mode 100644 index eb04bda79e197..0000000000000 --- a/code/game/objects/items/weapons/circuitboards/machinery/oxyregenerator.dm +++ /dev/null @@ -1,14 +0,0 @@ -/obj/item/stock_parts/circuitboard/oxyregenerator - name = T_BOARD("oxygen regenerator") - build_path = /obj/machinery/atmospherics/binary/oxyregenerator - board_type = "machine" - origin_tech = list(TECH_MAGNET = 2, TECH_ENGINEERING = 2) - req_components = list( - /obj/item/stock_parts/micro_laser = 1, - /obj/item/stock_parts/manipulator = 1, - /obj/item/stock_parts/matter_bin = 1) - additional_spawn_components = list( - /obj/item/stock_parts/console_screen = 1, - /obj/item/stock_parts/keyboard = 1, - /obj/item/stock_parts/power/apc/buildable = 1 - ) \ No newline at end of file diff --git a/code/game/objects/items/weapons/circuitboards/machinery/pacman.dm b/code/game/objects/items/weapons/circuitboards/machinery/pacman.dm deleted file mode 100644 index 1c57d4db67078..0000000000000 --- a/code/game/objects/items/weapons/circuitboards/machinery/pacman.dm +++ /dev/null @@ -1,34 +0,0 @@ -/obj/item/stock_parts/circuitboard/pacman - name = T_BOARD("PACMAN-type generator") - build_path = /obj/machinery/power/port_gen/pacman - board_type = "machine" - origin_tech = list(TECH_DATA = 3, TECH_POWER = 3, TECH_PHORON = 3, TECH_ENGINEERING = 3) - req_components = list( - /obj/item/stock_parts/matter_bin = 1, - /obj/item/stock_parts/micro_laser = 1, - /obj/item/stack/cable_coil = 15, - /obj/item/stock_parts/capacitor = 1) - additional_spawn_components = list( - /obj/item/stock_parts/console_screen = 1, - /obj/item/stock_parts/keyboard = 1, - /obj/item/stock_parts/power/apc/buildable = 1 - ) -/obj/item/stock_parts/circuitboard/pacman/super - name = T_BOARD("SUPERPACMAN-type generator") - build_path = /obj/machinery/power/port_gen/pacman/super - origin_tech = list(TECH_DATA = 3, TECH_POWER = 4, TECH_ENGINEERING = 4) - -/obj/item/stock_parts/circuitboard/pacman/super/potato - name = T_BOARD("PTTO-3 nuclear generator") - build_path = /obj/machinery/power/port_gen/pacman/super/potato - origin_tech = list(TECH_DATA = 3, TECH_POWER = 5, TECH_ENGINEERING = 4) - -/obj/item/stock_parts/circuitboard/pacman/super/potato/reactor - name = T_BOARD("ICRER-2 nuclear generator") - build_path = /obj/machinery/power/port_gen/pacman/super/potato/reactor - origin_tech = list(TECH_DATA = 3, TECH_POWER = 5, TECH_ENGINEERING = 4) - -/obj/item/stock_parts/circuitboard/pacman/mrs - name = T_BOARD("MRSPACMAN-type generator") - build_path = /obj/machinery/power/port_gen/pacman/mrs - origin_tech = list(TECH_DATA = 3, TECH_POWER = 5, TECH_ENGINEERING = 5) diff --git a/code/game/objects/items/weapons/circuitboards/machinery/portable_atmospherics.dm b/code/game/objects/items/weapons/circuitboards/machinery/portable_atmospherics.dm deleted file mode 100644 index 0b5cddd5b043e..0000000000000 --- a/code/game/objects/items/weapons/circuitboards/machinery/portable_atmospherics.dm +++ /dev/null @@ -1,52 +0,0 @@ -/obj/item/stock_parts/circuitboard/portable_scrubber - name = T_BOARD("portable scrubber") - board_type = "machine" - build_path = /obj/machinery/portable_atmospherics/powered/scrubber - origin_tech = list(TECH_ENGINEERING = 4, TECH_POWER = 4) - req_components = list( - /obj/item/stock_parts/capacitor = 2, - /obj/item/stock_parts/matter_bin = 2, - /obj/item/pipe = 2) - additional_spawn_components = list( - /obj/item/stock_parts/console_screen = 1, - /obj/item/stock_parts/keyboard = 1, - /obj/item/stock_parts/power/apc/buildable = 1, - /obj/item/stock_parts/power/battery/buildable/stock = 1, - /obj/item/cell/standard = 1 - ) - -/obj/item/stock_parts/circuitboard/portable_scrubber/pump - name = T_BOARD("portable pump") - board_type = "machine" - build_path = /obj/machinery/portable_atmospherics/powered/pump - -/obj/item/stock_parts/circuitboard/portable_scrubber/huge - name = T_BOARD("large portable scrubber") - board_type = "machine" - build_path = /obj/machinery/portable_atmospherics/powered/scrubber/huge - origin_tech = list(TECH_ENGINEERING = 5, TECH_POWER = 5, TECH_MATERIAL = 5) - req_components = list( - /obj/item/stock_parts/capacitor = 4, - /obj/item/stock_parts/matter_bin = 2, - /obj/item/pipe = 4) - -/obj/item/stock_parts/circuitboard/portable_scrubber/huge/stationary - name = T_BOARD("large stationary portable scrubber") - board_type = "machine" - build_path = /obj/machinery/portable_atmospherics/powered/scrubber/huge/stationary - -/obj/item/stock_parts/circuitboard/tray - name = T_BOARD("hydroponics tray") - board_type = "machine" - build_path = /obj/machinery/portable_atmospherics/hydroponics - origin_tech = list(TECH_BIO = 3, TECH_MATERIAL = 2, TECH_DATA = 1) - req_components = list( - /obj/item/stock_parts/matter_bin = 2, - /obj/item/reagent_containers/glass/beaker = 1, - /obj/item/weedkiller = 1, - /obj/item/pipe = 2) - additional_spawn_components = list( - /obj/item/stock_parts/console_screen = 1, - /obj/item/stock_parts/keyboard = 1, - /obj/item/stock_parts/power/apc/buildable = 1 - ) \ No newline at end of file diff --git a/code/game/objects/items/weapons/circuitboards/machinery/power.dm b/code/game/objects/items/weapons/circuitboards/machinery/power.dm deleted file mode 100644 index 9ff8ebb0b9de4..0000000000000 --- a/code/game/objects/items/weapons/circuitboards/machinery/power.dm +++ /dev/null @@ -1,22 +0,0 @@ -/obj/item/stock_parts/circuitboard/smes - name = T_BOARD("superconductive magnetic energy storage") - build_path = /obj/machinery/power/smes/buildable - board_type = "machine" - origin_tech = list(TECH_POWER = 6, TECH_ENGINEERING = 4) - req_components = list(/obj/item/stock_parts/smes_coil = 1, /obj/item/stack/cable_coil = 30) - additional_spawn_components = list( - /obj/item/stock_parts/console_screen = 1, - /obj/item/stock_parts/keyboard = 1 - ) - -/obj/item/stock_parts/circuitboard/batteryrack - name = T_BOARD("battery rack PSU") - build_path = /obj/machinery/power/smes/batteryrack - board_type = "machine" - origin_tech = list(TECH_POWER = 3, TECH_ENGINEERING = 2) - req_components = list(/obj/item/stock_parts/capacitor/ = 3, /obj/item/stock_parts/matter_bin/ = 1) - additional_spawn_components = list( - /obj/item/stock_parts/console_screen = 1, - /obj/item/stock_parts/keyboard = 1, - /obj/item/stock_parts/power/apc/buildable = 1 - ) \ No newline at end of file diff --git a/code/game/objects/items/weapons/circuitboards/machinery/recharge_station.dm b/code/game/objects/items/weapons/circuitboards/machinery/recharge_station.dm deleted file mode 100644 index 7078b0365d216..0000000000000 --- a/code/game/objects/items/weapons/circuitboards/machinery/recharge_station.dm +++ /dev/null @@ -1,15 +0,0 @@ -/obj/item/stock_parts/circuitboard/recharge_station - name = T_BOARD("cyborg recharging station") - build_path = /obj/machinery/recharge_station - board_type = "machine" - origin_tech = list(TECH_DATA = 3, TECH_ENGINEERING = 3) - req_components = list( - /obj/item/stack/cable_coil = 5, - /obj/item/stock_parts/capacitor = 2, - /obj/item/stock_parts/manipulator = 2) - additional_spawn_components = list( - /obj/item/stock_parts/power/apc/buildable = 1, - /obj/item/stock_parts/power/battery/buildable/turbo = 1, - /obj/item/cell/super = 1, - /obj/item/stock_parts/capacitor = 2 - ) \ No newline at end of file diff --git a/code/game/objects/items/weapons/circuitboards/machinery/research.dm b/code/game/objects/items/weapons/circuitboards/machinery/research.dm deleted file mode 100644 index cdfa1e11283a7..0000000000000 --- a/code/game/objects/items/weapons/circuitboards/machinery/research.dm +++ /dev/null @@ -1,130 +0,0 @@ -/obj/item/stock_parts/circuitboard/rdserver - name = T_BOARD("R&D server") - build_path = /obj/machinery/r_n_d/server - board_type = "machine" - origin_tech = list(TECH_DATA = 3) - req_components = list( - /obj/item/stack/cable_coil = 2, - /obj/item/stock_parts/scanning_module = 1) - additional_spawn_components = list( - /obj/item/stock_parts/power/apc/buildable = 1 - ) - -/obj/item/stock_parts/circuitboard/destructive_analyzer - name = T_BOARD("destructive analyzer") - build_path = /obj/machinery/r_n_d/destructive_analyzer - board_type = "machine" - origin_tech = list(TECH_MAGNET = 2, TECH_ENGINEERING = 2, TECH_DATA = 2) - req_components = list( - /obj/item/stock_parts/scanning_module = 1, - /obj/item/stock_parts/manipulator = 1, - /obj/item/stock_parts/micro_laser = 1) - additional_spawn_components = list( - /obj/item/stock_parts/power/apc/buildable = 1 - ) - -/obj/item/stock_parts/circuitboard/autolathe - name = T_BOARD("autolathe") - build_path = /obj/machinery/fabricator - board_type = "machine" - origin_tech = list(TECH_ENGINEERING = 2, TECH_DATA = 2) - req_components = list( - /obj/item/stock_parts/matter_bin = 3, - /obj/item/stock_parts/manipulator = 1) - additional_spawn_components = list( - /obj/item/stock_parts/console_screen = 1, - /obj/item/stock_parts/keyboard = 1, - /obj/item/stock_parts/power/apc/buildable = 1 - ) - -/obj/item/stock_parts/circuitboard/autolathe/micro - name = T_BOARD("microlathe") - build_path = /obj/machinery/fabricator/micro - origin_tech = list(TECH_ENGINEERING = 1, TECH_DATA = 1) - req_components = list( - /obj/item/stock_parts/matter_bin = 1, - /obj/item/stock_parts/manipulator = 1 - ) -/obj/item/stock_parts/circuitboard/replicator - name = T_BOARD("replicator") - build_path = /obj/machinery/fabricator/replicator - board_type = "machine" - origin_tech = list(TECH_ENGINEERING = 3, TECH_DATA = 2, TECH_BIO = 2) - req_components = list( - /obj/item/stock_parts/matter_bin = 3, - /obj/item/stock_parts/manipulator = 1) - additional_spawn_components = list( - /obj/item/stock_parts/console_screen = 1, - /obj/item/stock_parts/keyboard = 1, - /obj/item/stock_parts/power/apc/buildable = 1 - ) - -/obj/item/stock_parts/circuitboard/protolathe - name = T_BOARD("protolathe") - build_path = /obj/machinery/r_n_d/protolathe - board_type = "machine" - origin_tech = list(TECH_ENGINEERING = 2, TECH_DATA = 2) - req_components = list( - /obj/item/stock_parts/matter_bin = 2, - /obj/item/stock_parts/manipulator = 2, - /obj/item/reagent_containers/glass/beaker = 2) - additional_spawn_components = list( - /obj/item/stock_parts/power/apc/buildable = 1 - ) - -/obj/item/stock_parts/circuitboard/circuit_imprinter - name = T_BOARD("circuit imprinter") - build_path = /obj/machinery/r_n_d/circuit_imprinter - board_type = "machine" - origin_tech = list(TECH_ENGINEERING = 2, TECH_DATA = 2) - req_components = list( - /obj/item/stock_parts/matter_bin = 1, - /obj/item/stock_parts/manipulator = 1, - /obj/item/reagent_containers/glass/beaker = 2) - additional_spawn_components = list( - /obj/item/stock_parts/power/apc/buildable = 1 - ) - -/obj/item/stock_parts/circuitboard/mechfab - name = T_BOARD("exosuit fabricator") - build_path = /obj/machinery/robotics_fabricator - board_type = "machine" - origin_tech = list(TECH_DATA = 3, TECH_ENGINEERING = 3) - req_components = list( - /obj/item/stock_parts/matter_bin = 2, - /obj/item/stock_parts/manipulator = 1, - /obj/item/stock_parts/micro_laser = 1) - additional_spawn_components = list( - /obj/item/stock_parts/console_screen = 1, - /obj/item/stock_parts/keyboard = 1, - /obj/item/stock_parts/power/apc/buildable = 1 - ) - -/obj/item/stock_parts/circuitboard/ntnet_relay - name = T_BOARD("\improper NTNet quantum relay") - build_path = /obj/machinery/ntnet_relay - board_type = "machine" - origin_tech = list(TECH_DATA = 4) - req_components = list(/obj/item/stack/cable_coil = 15) - additional_spawn_components = list( - /obj/item/stock_parts/console_screen = 1, - /obj/item/stock_parts/keyboard = 1, - /obj/item/stock_parts/power/apc/buildable = 1, - /obj/item/stock_parts/computer/hard_drive/portable = 1 - ) - -/obj/item/stock_parts/circuitboard/suspension_gen - name = T_BOARD("suspension generator") - build_path = /obj/machinery/suspension_gen - board_type = "machine" - origin_tech = list(TECH_DATA = 4, TECH_ENGINEERING = 3, TECH_MAGNET = 4) - req_components = list( - /obj/item/stock_parts/matter_bin = 2, - /obj/item/stock_parts/manipulator = 1, - /obj/item/stock_parts/micro_laser = 1) - additional_spawn_components = list( - /obj/item/stock_parts/console_screen = 1, - /obj/item/stock_parts/keyboard = 1, - /obj/item/stock_parts/power/battery/buildable/stock = 1, - /obj/item/cell/high = 1 - ) \ No newline at end of file diff --git a/code/game/objects/items/weapons/circuitboards/machinery/shieldgen.dm b/code/game/objects/items/weapons/circuitboards/machinery/shieldgen.dm deleted file mode 100644 index 87cf0cb42482e..0000000000000 --- a/code/game/objects/items/weapons/circuitboards/machinery/shieldgen.dm +++ /dev/null @@ -1,52 +0,0 @@ -// New shields -/obj/item/stock_parts/circuitboard/shield_generator - name = T_BOARD("advanced shield generator") - board_type = "machine" - build_path = /obj/machinery/power/shield_generator - origin_tech = list(TECH_MAGNET = 3, TECH_POWER = 4) - req_components = list( - /obj/item/stock_parts/capacitor = 1, - /obj/item/stock_parts/micro_laser = 1, - /obj/item/stock_parts/smes_coil = 1) - additional_spawn_components = list( - /obj/item/stock_parts/console_screen = 1, - /obj/item/stock_parts/keyboard = 1, - /obj/item/stock_parts/power/apc/buildable = 1 - ) - -/obj/item/stock_parts/circuitboard/shield_diffuser - name = T_BOARD("shield diffuser") - board_type = "machine" - build_path = /obj/machinery/shield_diffuser - origin_tech = list(TECH_MAGNET = 4, TECH_POWER = 2) - req_components = list( - /obj/item/stock_parts/capacitor = 1, - /obj/item/stock_parts/micro_laser = 1) - additional_spawn_components = list( - /obj/item/stock_parts/console_screen = 1, - /obj/item/stock_parts/keyboard = 1, - /obj/item/stock_parts/power/apc/buildable = 1 - ) - -/obj/item/stock_parts/circuitboard/pointdefense - name = T_BOARD("point defense battery") - board_type = "machine" - build_path = /obj/machinery/pointdefense - origin_tech = list(TECH_ENGINEERING = 3, TECH_COMBAT = 2) - req_components = list( - /obj/item/mech_equipment/mounted_system/taser/laser = 1, - /obj/item/stock_parts/manipulator = 2, - /obj/item/stock_parts/capacitor = 2, - - ) - additional_spawn_components = list( - /obj/item/stock_parts/power/terminal/buildable = 1, - /obj/item/stock_parts/power/battery/buildable/responsive = 1, - /obj/item/cell/high = 1 - ) - -/obj/item/stock_parts/circuitboard/pointdefense_control - name = T_BOARD("fire assist mainframe") - board_type = "machine" - build_path = /obj/machinery/pointdefense_control - origin_tech = list(TECH_ENGINEERING = 3, TECH_COMBAT = 2) diff --git a/code/game/objects/items/weapons/circuitboards/machinery/telecomms.dm b/code/game/objects/items/weapons/circuitboards/machinery/telecomms.dm deleted file mode 100644 index acf7bec396120..0000000000000 --- a/code/game/objects/items/weapons/circuitboards/machinery/telecomms.dm +++ /dev/null @@ -1,74 +0,0 @@ -/obj/item/stock_parts/circuitboard/telecomms - board_type = "machine" - additional_spawn_components = list( - /obj/item/stock_parts/console_screen = 1, - /obj/item/stock_parts/keyboard = 1, - /obj/item/stock_parts/power/apc/buildable = 1 - ) - -/obj/item/stock_parts/circuitboard/telecomms/receiver - name = T_BOARD("subspace receiver") - build_path = /obj/machinery/telecomms/receiver - origin_tech = list(TECH_DATA = 4, TECH_ENGINEERING = 3, TECH_BLUESPACE = 2) - req_components = list( - /obj/item/stock_parts/subspace/ansible = 1, - /obj/item/stock_parts/subspace/filter = 1, - /obj/item/stock_parts/manipulator = 2, - /obj/item/stock_parts/micro_laser = 1) - -/obj/item/stock_parts/circuitboard/telecomms/hub - name = T_BOARD("hub mainframe") - build_path = /obj/machinery/telecomms/hub - origin_tech = list(TECH_DATA = 4, TECH_ENGINEERING = 4) - req_components = list( - /obj/item/stock_parts/manipulator = 2, - /obj/item/stock_parts/subspace/filter = 2) - -/obj/item/stock_parts/circuitboard/telecomms/bus - name = T_BOARD("bus mainframe") - build_path = /obj/machinery/telecomms/bus - origin_tech = list(TECH_DATA = 4, TECH_ENGINEERING = 4) - req_components = list( - /obj/item/stock_parts/manipulator = 2, - /obj/item/stock_parts/subspace/filter = 1) - -/obj/item/stock_parts/circuitboard/telecomms/processor - name = T_BOARD("processor unit") - build_path = /obj/machinery/telecomms/processor - origin_tech = list(TECH_DATA = 4, TECH_ENGINEERING = 4) - req_components = list( - /obj/item/stock_parts/manipulator = 3, - /obj/item/stock_parts/subspace/filter = 1, - /obj/item/stock_parts/subspace/treatment = 2, - /obj/item/stock_parts/subspace/analyzer = 1, - /obj/item/stock_parts/subspace/amplifier = 1) - -/obj/item/stock_parts/circuitboard/telecomms/server - name = T_BOARD("telecommunication server") - build_path = /obj/machinery/telecomms/server - origin_tech = list(TECH_DATA = 4, TECH_ENGINEERING = 4) - req_components = list( - /obj/item/stock_parts/manipulator = 2, - /obj/item/stock_parts/subspace/filter = 1) - -/obj/item/stock_parts/circuitboard/telecomms/broadcaster - name = T_BOARD("subspace broadcaster") - build_path = /obj/machinery/telecomms/broadcaster - origin_tech = list(TECH_DATA = 4, TECH_ENGINEERING = 4, TECH_BLUESPACE = 2) - req_components = list( - /obj/item/stock_parts/manipulator = 2, - /obj/item/stock_parts/subspace/filter = 1, - /obj/item/stock_parts/subspace/crystal = 1, - /obj/item/stock_parts/micro_laser/high = 2) - -/obj/item/stock_parts/circuitboard/telecomms/allinone - name = T_BOARD("telecommunication mainframe") - build_path = /obj/machinery/telecomms/allinone - origin_tech = list(TECH_DATA = 3, TECH_ENGINEERING = 3); - req_components = list( - /obj/item/stock_parts/subspace/ansible = 1, - /obj/item/stock_parts/subspace/filter = 1, - /obj/item/stock_parts/subspace/treatment = 2, - /obj/item/stock_parts/subspace/analyzer = 1, - /obj/item/stock_parts/subspace/amplifier = 1, - /obj/item/stock_parts/subspace/crystal = 1) diff --git a/code/game/objects/items/weapons/circuitboards/machinery/teleporter.dm b/code/game/objects/items/weapons/circuitboards/machinery/teleporter.dm deleted file mode 100644 index 3df778bbbbde7..0000000000000 --- a/code/game/objects/items/weapons/circuitboards/machinery/teleporter.dm +++ /dev/null @@ -1,10 +0,0 @@ -/obj/item/stock_parts/circuitboard/tele_beacon - name = T_BOARD("teleporter beacon") - build_path = /obj/machinery/tele_beacon - board_type = "machine" - origin_tech = list( - TECH_BLUESPACE = 1 - ) - req_components = list( - /obj/item/stock_parts/capacitor = 1 - ) diff --git a/code/game/objects/items/weapons/circuitboards/machinery/unary_atmos.dm b/code/game/objects/items/weapons/circuitboards/machinery/unary_atmos.dm deleted file mode 100644 index a960c1b61d71e..0000000000000 --- a/code/game/objects/items/weapons/circuitboards/machinery/unary_atmos.dm +++ /dev/null @@ -1,34 +0,0 @@ -/obj/item/stock_parts/circuitboard/unary_atmos - board_type = "machine" - additional_spawn_components = list( - /obj/item/stock_parts/console_screen = 1, - /obj/item/stock_parts/keyboard = 1, - /obj/item/stock_parts/power/apc/buildable = 1 - ) - -/obj/item/stock_parts/circuitboard/unary_atmos/construct(var/obj/machinery/atmospherics/unary/U) - //TODO: Move this stuff into the relevant constructor when pipe/construction.dm is cleaned up. - U.atmos_init() - U.build_network() - if (U.node) - U.node.atmos_init() - U.node.build_network() - -/obj/item/stock_parts/circuitboard/unary_atmos/heater - name = T_BOARD("gas heating system") - build_path = /obj/machinery/atmospherics/unary/heater - origin_tech = list(TECH_POWER = 2, TECH_ENGINEERING = 1) - req_components = list( - /obj/item/stack/cable_coil = 5, - /obj/item/stock_parts/matter_bin = 1, - /obj/item/stock_parts/capacitor = 2) - -/obj/item/stock_parts/circuitboard/unary_atmos/cooler - name = T_BOARD("gas cooling system") - build_path = /obj/machinery/atmospherics/unary/freezer - origin_tech = list(TECH_MAGNET = 2, TECH_ENGINEERING = 2) - req_components = list( - /obj/item/stack/cable_coil = 2, - /obj/item/stock_parts/matter_bin = 1, - /obj/item/stock_parts/capacitor = 2, - /obj/item/stock_parts/manipulator = 1) diff --git a/code/game/objects/items/weapons/circuitboards/other.dm b/code/game/objects/items/weapons/circuitboards/other.dm deleted file mode 100644 index 7c8730c2c1472..0000000000000 --- a/code/game/objects/items/weapons/circuitboards/other.dm +++ /dev/null @@ -1,6 +0,0 @@ -//Stuff that doesn't fit into any category goes here - -/obj/item/stock_parts/circuitboard/aicore - name = T_BOARD("AI core") - origin_tech = list(TECH_DATA = 4, TECH_BIO = 2) - board_type = "other" diff --git a/code/game/objects/items/weapons/clothingbag.dm b/code/game/objects/items/weapons/clothingbag.dm deleted file mode 100644 index db5fb95b4bbc4..0000000000000 --- a/code/game/objects/items/weapons/clothingbag.dm +++ /dev/null @@ -1,44 +0,0 @@ -/obj/item/clothingbag - name = "clothing bag" - desc = "A cheap plastic bag that contains a fresh set of clothes." - icon = 'icons/obj/trash.dmi' - icon_state = "trashbag3" - - var/icon_used = "trashbag0" - var/opened = 0 - -/obj/item/clothingbag/attack_self(mob/user as mob) - if(!opened) - user.visible_message("\The [user] tears open \the [src.name]!", "You tear open \the [src.name]!") - opened = 1 - icon_state = icon_used - for(var/obj/item in contents) - item.dropInto(loc) - else - to_chat(user, "\The [src.name] is already ripped open and is now completely useless!") - -/obj/item/clothingbag/rubbersuit - name = "rubber suit bag" - desc = "A cheap plastic bag that contains an emergency party set." - -/obj/item/clothingbag/rubbersuit/New() - ..() - switch(rand(1,3)) - if(1) - new/obj/item/clothing/suit/rubber(src) - new/obj/item/clothing/mask/rubber/species(src) - if(2) - new/obj/item/clothing/suit/rubber/skrell(src) - new/obj/item/clothing/mask/rubber/species/skrell(src) - if(3) - new/obj/item/clothing/suit/rubber/unathi(src) - new/obj/item/clothing/mask/rubber/species/unathi(src) - -/obj/item/clothingbag/rubbermask - name = "rubber masks bag" - desc = "A cheap plastic bag that contains emergency Halloween supplies." - -/obj/item/clothingbag/rubbermask/New() - ..() - for(var/T in subtypesof(/obj/item/clothing/mask/rubber)) - new T(src) \ No newline at end of file diff --git a/code/game/objects/items/weapons/clown_items.dm b/code/game/objects/items/weapons/clown_items.dm deleted file mode 100644 index 2697d44bf0e9e..0000000000000 --- a/code/game/objects/items/weapons/clown_items.dm +++ /dev/null @@ -1,45 +0,0 @@ -/* Clown Items - * Contains: - * Banana Peels - * Bike Horns - */ - -/* - * Banana Peals - */ -/obj/item/bananapeel/Crossed(AM as mob|obj) - if (istype(AM, /mob/living)) - var/mob/living/M = AM - M.slip("the [src.name]",4) -/* - * Bike Horns - */ -/obj/item/bikehorn - name = "bike horn" - desc = "A horn off of a bicycle." - icon = 'icons/obj/items.dmi' - icon_state = "bike_horn" - item_state = "bike_horn" - throwforce = 3 - w_class = ITEM_SIZE_SMALL - throw_speed = 3 - throw_range = 15 - attack_verb = list("HONKED") - var/spam_flag = 0 - var/audio_files = list("sound/items/bikehorn.ogg") - -/obj/item/bikehorn/attack_self(mob/user as mob) - if (spam_flag == 0) - spam_flag = 1 - playsound(src.loc, pick(src.audio_files), 50, 1) - src.add_fingerprint(user) - spawn(20) - spam_flag = 0 - return - -/obj/item/bikehorn/airhorn - name = "air horn" - desc = "A can of compressed air hooked up to an obnoxiously loud horn. SPRING BREAK!" - icon_state = "air_horn" - item_state = "air_horn" - audio_files = list("sound/items/air_horn_1.ogg", "sound/items/air_horn_2.ogg") \ No newline at end of file diff --git a/code/game/objects/items/weapons/cosmetics.dm b/code/game/objects/items/weapons/cosmetics.dm deleted file mode 100644 index 9b45bcc2cc625..0000000000000 --- a/code/game/objects/items/weapons/cosmetics.dm +++ /dev/null @@ -1,107 +0,0 @@ -/obj/item/lipstick - gender = PLURAL - name = "red lipstick" - desc = "A generic brand of lipstick." - icon = 'icons/obj/items.dmi' - icon_state = "lipstick" - w_class = ITEM_SIZE_TINY - slot_flags = SLOT_EARS - var/colour = "red" - var/open = 0 - -/obj/item/lipstick/purple - name = "purple lipstick" - colour = "purple" - -/obj/item/lipstick/jade - name = "jade lipstick" - colour = "jade" - -/obj/item/lipstick/black - name = "black lipstick" - colour = "black" - -/obj/item/lipstick/random - name = "lipstick" - -/obj/item/lipstick/random/Initialize() - . = ..() - colour = pick("red","purple","jade","black") - name = "[colour] lipstick" - -/obj/item/lipstick/attack_self(mob/user as mob) - to_chat(user, "You twist \the [src] [open ? "closed" : "open"].") - open = !open - if(open) - icon_state = "[initial(icon_state)]_[colour]" - else - icon_state = initial(icon_state) - -/obj/item/lipstick/attack(atom/A, mob/user as mob, target_zone) - if(!open) return - - if(ishuman(A)) - var/mob/living/carbon/human/H = A - var/obj/item/organ/external/head/head = H.organs_by_name[BP_HEAD] - - if(!istype(head)) - return - - if(user.a_intent == I_HELP && target_zone == BP_HEAD) - head.write_on(user, src.name) - else if(head.has_lips) - if(H.makeup_style) //if they already have lipstick on - to_chat(user, "You need to wipe off the old lipstick first!") - return - if(H == user) - user.visible_message("[user] does their lips with \the [src].", \ - "You take a moment to apply \the [src]. Perfect!") - H.makeup_style = colour - H.update_body() - else - user.visible_message("[user] begins to do [H]'s lips with \the [src].", \ - "You begin to apply \the [src].") - if(do_after(user, 4 SECONDS, H, DO_EQUIP)) - user.visible_message("[user] does [H]'s lips with \the [src].", \ - "You apply \the [src].") - H.makeup_style = colour - H.update_body() - else if(istype(A, /obj/item/organ/external/head)) - var/obj/item/organ/external/head/head = A - head.write_on(user, src) - -//you can wipe off lipstick with paper! see code/modules/paperwork/paper.dm, paper/attack() - - -/obj/item/haircomb //sparklysheep's comb - name = "plastic comb" - desc = "A pristine comb made from flexible plastic." - w_class = ITEM_SIZE_TINY - slot_flags = SLOT_EARS - icon = 'icons/obj/items.dmi' - icon_state = "comb" - item_state = "comb" - -/obj/item/haircomb/random/Initialize() - . = ..() - color = get_random_colour(lower = 150) - -/obj/item/haircomb/attack_self(var/mob/living/carbon/human/user) - if(!user.incapacitated()) - user.visible_message("\The [user] uses \the [src] to comb their hair with incredible style and sophistication. What a [user.gender == FEMALE ? "lady" : "guy"].") - -/obj/item/haircomb/brush - name = "hairbrush" - desc = "A surprisingly decent hairbrush with a false wood handle and semi-soft bristles." - w_class = ITEM_SIZE_SMALL - slot_flags = null - icon_state = "brush" - item_state = "brush" - -/obj/item/haircomb/brush/attack_self(mob/living/carbon/human/user) - if(!user.incapacitated()) - var/datum/sprite_accessory/hair/hair_style = GLOB.hair_styles_list[user.head_hair_style] - if(hair_style.flags & VERY_SHORT) - user.visible_message("\The [user] just sort of runs \the [src] over their scalp.") - else - user.visible_message("\The [user] meticulously brushes their hair with \the [src].") diff --git a/code/game/objects/items/weapons/defib.dm b/code/game/objects/items/weapons/defib.dm deleted file mode 100644 index 6fba323eb4074..0000000000000 --- a/code/game/objects/items/weapons/defib.dm +++ /dev/null @@ -1,633 +0,0 @@ -#define DEFIB_TIME_LIMIT (8 MINUTES) //past this many seconds, defib is useless. Currently 8 Minutes -#define DEFIB_TIME_LOSS (2 MINUTES) //past this many seconds, brain damage occurs. Currently 2 minutes - -//backpack item -/obj/item/defibrillator - name = "auto-resuscitator" - desc = "A device that delivers powerful shocks via detachable paddles to resuscitate incapacitated patients." - icon = 'icons/obj/defibrillator.dmi' - icon_state = "defibunit" - item_state = "defibunit" - slot_flags = SLOT_BACK - force = 5 - throwforce = 6 - w_class = ITEM_SIZE_LARGE - origin_tech = list(TECH_BIO = 4, TECH_POWER = 2) - action_button_name = "Remove/Replace Paddles" - - var/obj/item/shockpaddles/linked/paddles - var/obj/item/cell/bcell = null - -/obj/item/defibrillator/Initialize() //starts without a cell for rnd - . = ..() - if(ispath(paddles)) - paddles = new paddles(src, src) - else - paddles = new(src, src) - - if(ispath(bcell)) - bcell = new bcell(src) - update_icon() - -/obj/item/defibrillator/Destroy() - . = ..() - QDEL_NULL(paddles) - QDEL_NULL(bcell) - -/obj/item/defibrillator/loaded //starts with regular power cell for R&D to replace later in the round. - bcell = /obj/item/cell/standard - -/obj/item/defibrillator/on_update_icon() - var/list/new_overlays = list() - - if(paddles) //in case paddles got destroyed somehow. - if(paddles.loc == src) - new_overlays += "[initial(icon_state)]-paddles" - if(bcell && bcell.check_charge(paddles.chargecost)) - if(!paddles.safety) - new_overlays += "[initial(icon_state)]-emagged" - else - new_overlays += "[initial(icon_state)]-powered" - - if(bcell) - var/ratio = Ceil(bcell.percent()/25) * 25 - new_overlays += "[initial(icon_state)]-charge[ratio]" - else - new_overlays += "[initial(icon_state)]-nocell" - - overlays = new_overlays - -/obj/item/defibrillator/examine(mob/user) - . = ..() - if(bcell) - to_chat(user, "The charge meter is showing [bcell.percent()]% charge left.") - else - to_chat(user, "There is no cell inside.") - -/obj/item/defibrillator/ui_action_click() - toggle_paddles() - -/obj/item/defibrillator/attack_hand(mob/user) - if(loc == user) - toggle_paddles() - else - ..() - -/obj/item/defibrillator/MouseDrop() - if(ismob(src.loc)) - if(!CanMouseDrop(src)) - return - var/mob/M = src.loc - if(!M.unEquip(src)) - return - src.add_fingerprint(usr) - M.put_in_any_hand_if_possible(src) - - -/obj/item/defibrillator/attackby(obj/item/W, mob/user, params) - if(W == paddles) - reattach_paddles(user) - else if(istype(W, /obj/item/cell)) - if(bcell) - to_chat(user, "\the [src] already has a cell.") - else - if(!user.unEquip(W)) - return - W.forceMove(src) - bcell = W - to_chat(user, "You install a cell in \the [src].") - update_icon() - - else if(isScrewdriver(W)) - if(bcell) - bcell.update_icon() - bcell.dropInto(loc) - bcell = null - to_chat(user, "You remove the cell from \the [src].") - update_icon() - else - return ..() - -/obj/item/defibrillator/emag_act(var/uses, var/mob/user) - if(paddles) - return paddles.emag_act(uses, user, src) - return NO_EMAG_ACT - -//Paddle stuff - -/obj/item/defibrillator/verb/toggle_paddles() - set name = "Toggle Paddles" - set category = "Object" - - var/mob/living/carbon/human/user = usr - if(!paddles) - to_chat(user, "The paddles are missing!") - return - - if(paddles.loc != src) - reattach_paddles(user) //Remove from their hands and back onto the defib unit - return - - if(!slot_check()) - to_chat(user, "You need to equip [src] before taking out [paddles].") - else - if(!usr.put_in_hands(paddles)) //Detach the paddles into the user's hands - to_chat(user, "You need a free hand to hold the paddles!") - update_icon() //success - -//checks that the base unit is in the correct slot to be used -/obj/item/defibrillator/proc/slot_check() - var/mob/M = loc - if(!istype(M)) - return 0 //not equipped - - if((slot_flags & SLOT_BACK) && M.get_equipped_item(slot_back) == src) - return 1 - if((slot_flags & SLOT_BELT) && M.get_equipped_item(slot_belt) == src) - return 1 - - return 0 - -/obj/item/defibrillator/dropped(mob/user) - ..() - reattach_paddles(user) //paddles attached to a base unit should never exist outside of their base unit or the mob equipping the base unit - -/obj/item/defibrillator/proc/reattach_paddles(mob/user) - if(!paddles) return - - if(ismob(paddles.loc)) - var/mob/M = paddles.loc - if(M.drop_from_inventory(paddles, src)) - to_chat(user, "\The [paddles] snap back into the main unit.") - else - paddles.forceMove(src) - - update_icon() - -/* - Base Unit Subtypes -*/ - -/obj/item/defibrillator/compact - name = "compact defibrillator" - desc = "A belt-equipped defibrillator that can be rapidly deployed." - icon_state = "defibcompact" - item_state = "defibcompact" - w_class = ITEM_SIZE_NORMAL - slot_flags = SLOT_BELT - origin_tech = list(TECH_BIO = 5, TECH_POWER = 3) - -/obj/item/defibrillator/compact/loaded - bcell = /obj/item/cell/high - - -/obj/item/defibrillator/compact/combat - name = "combat defibrillator" - desc = "A belt-equipped blood-red defibrillator that can be rapidly deployed. Does not have the restrictions or safeties of conventional defibrillators and can revive through space suits." - paddles = /obj/item/shockpaddles/linked/combat - -/obj/item/defibrillator/compact/combat/loaded - bcell = /obj/item/cell/high - -/obj/item/shockpaddles/linked/combat - combat = 1 - safety = 0 - chargetime = (1 SECONDS) - - -//paddles - -/obj/item/shockpaddles - name = "defibrillator paddles" - desc = "A pair of plastic-gripped paddles with flat metal surfaces that are used to deliver powerful electric shocks." - icon = 'icons/obj/defibrillator.dmi' - icon_state = "defibpaddles" - item_state = "defibpaddles" - gender = PLURAL - force = 2 - throwforce = 6 - w_class = ITEM_SIZE_LARGE - - var/safety = 1 //if you can zap people with the paddles on harm mode - var/combat = 0 //If it can be used to revive people wearing thick clothing (e.g. spacesuits) - var/cooldowntime = (6 SECONDS) // How long in deciseconds until the defib is ready again after use. - var/chargetime = (2 SECONDS) - var/chargecost = 100 //units of charge - var/burn_damage_amt = 5 - - var/wielded = 0 - var/cooldown = 0 - var/busy = 0 - -/obj/item/shockpaddles/proc/set_cooldown(var/delay) - cooldown = 1 - update_icon() - - spawn(delay) - if(cooldown) - cooldown = 0 - update_icon() - - make_announcement("beeps, \"Unit is re-energized.\"", "notice") - playsound(src, 'sound/machines/defib_ready.ogg', 50, 0) - -/obj/item/shockpaddles/update_twohanding() - var/mob/living/M = loc - if(istype(M) && is_held_twohanded(M)) - wielded = 1 - SetName("[initial(name)] (wielded)") - else - wielded = 0 - SetName(initial(name)) - update_icon() - ..() - -/obj/item/shockpaddles/on_update_icon() - icon_state = "defibpaddles[wielded]" - item_state = "defibpaddles[wielded]" - if(cooldown) - icon_state = "defibpaddles[wielded]_cooldown" - -/obj/item/shockpaddles/proc/can_use(mob/user, mob/M) - if(busy) - return 0 - if(!check_charge(chargecost)) - to_chat(user, "\The [src] doesn't have enough charge left to do that.") - return 0 - if(!wielded && !isrobot(user)) - to_chat(user, "You need to wield the paddles with both hands before you can use them on someone!") - return 0 - if(cooldown) - to_chat(user, "\The [src] are re-energizing!") - return 0 - return 1 - -//Checks for various conditions to see if the mob is revivable -/obj/item/shockpaddles/proc/can_defib(mob/living/carbon/human/H) //This is checked before doing the defib operation - if((H.species.species_flags & SPECIES_FLAG_NO_SCAN) || H.isSynthetic()) - return "buzzes, \"Unrecogized physiology. Operation aborted.\"" - - if(!check_contact(H)) - return "buzzes, \"Patient's chest is obstructed. Operation aborted.\"" - -/obj/item/shockpaddles/proc/can_revive(mob/living/carbon/human/H) //This is checked right before attempting to revive - if(H.stat == DEAD) - return "buzzes, \"Resuscitation failed - Severe neurological decay makes recovery of patient impossible. Further attempts futile.\"" - -/obj/item/shockpaddles/proc/check_contact(mob/living/carbon/human/H) - if(!combat) - for(var/obj/item/clothing/cloth in list(H.wear_suit, H.w_uniform)) - if((cloth.body_parts_covered & UPPER_TORSO) && (cloth.item_flags & ITEM_FLAG_THICKMATERIAL)) - return FALSE - return TRUE - -/obj/item/shockpaddles/proc/check_blood_level(mob/living/carbon/human/H) - if(!H.should_have_organ(BP_HEART)) - return FALSE - var/obj/item/organ/internal/heart/heart = H.internal_organs_by_name[BP_HEART] - if(!heart || H.get_blood_volume() < BLOOD_VOLUME_SURVIVE) - return TRUE - return FALSE - -/obj/item/shockpaddles/proc/check_charge(var/charge_amt) - return 0 - -/obj/item/shockpaddles/proc/checked_use(var/charge_amt) - return 0 - -/obj/item/shockpaddles/attack(mob/living/M, mob/living/user, var/target_zone) - var/mob/living/carbon/human/H = M - if(!istype(H) || user.a_intent == I_HURT) - return ..() //Do a regular attack. Harm intent shocking happens as a hit effect - - if(can_use(user, H)) - busy = 1 - update_icon() - - do_revive(H, user) - - busy = 0 - update_icon() - - return 1 - -//Since harm-intent now skips the delay for deliberate placement, you have to be able to hit them in combat in order to shock people. -/obj/item/shockpaddles/apply_hit_effect(mob/living/target, mob/living/user, var/hit_zone) - if(ishuman(target) && can_use(user, target)) - busy = 1 - update_icon() - - do_electrocute(target, user, hit_zone) - - busy = 0 - update_icon() - - return 1 - - return ..() - -// This proc is used so that we can return out of the revive process while ensuring that busy and update_icon() are handled -/obj/item/shockpaddles/proc/do_revive(mob/living/carbon/human/H, mob/living/user) - if(H.ssd_check()) - to_chat(find_dead_player(H.ckey, 1), "Someone is attempting to resuscitate you. Re-enter your body if you want to be revived!") - - //beginning to place the paddles on patient's chest to allow some time for people to move away to stop the process - user.visible_message("\The [user] begins to place [src] on [H]'s chest.", "You begin to place [src] on [H]'s chest...") - if(!user.do_skilled(3 SECONDS, SKILL_MEDICAL, H, do_flags = DO_MEDICAL | DO_USER_UNIQUE_ACT)) - return - user.visible_message("\The [user] places [src] on [H]'s chest.", "You place [src] on [H]'s chest.") - playsound(get_turf(src), 'sound/machines/defib_charge.ogg', 50, 0) - - var/error = can_defib(H) - if(error) - make_announcement(error, "warning") - playsound(get_turf(src), 'sound/machines/defib_failed.ogg', 50, 0) - return - - if(check_blood_level(H)) - make_announcement("buzzes, \"Warning - Patient is in hypovolemic shock and may require a blood transfusion.\"", "warning") //also includes heart damage - - //placed on chest and short delay to shock for dramatic effect, revive time is 5sec total - if(!do_after(user, chargetime, H, DO_MEDICAL | DO_USER_UNIQUE_ACT)) - return - - //deduct charge here, in case the base unit was EMPed or something during the delay time - if(!checked_use(chargecost)) - make_announcement("buzzes, \"Insufficient charge.\"", "warning") - playsound(get_turf(src), 'sound/machines/defib_failed.ogg', 50, 0) - return - - H.visible_message("\The [H]'s body convulses a bit.") - playsound(get_turf(src), "bodyfall", 50, 1) - playsound(get_turf(src), 'sound/machines/defib_zap.ogg', 50, 1, -1) - set_cooldown(cooldowntime) - - error = can_revive(H) - if(error) - make_announcement(error, "warning") - playsound(get_turf(src), 'sound/machines/defib_failed.ogg', 50, 0) - return - if(!user.skill_check(SKILL_MEDICAL, SKILL_BASIC) && !lowskill_revive(H, user)) - return - H.apply_damage(burn_damage_amt, DAMAGE_BURN, BP_CHEST) - - //set oxyloss so that the patient is just barely in crit, if possible - make_announcement("pings, \"Resuscitation successful.\"", "notice") - playsound(get_turf(src), 'sound/machines/defib_success.ogg', 50, 0) - H.resuscitate() - var/obj/item/organ/internal/cell/potato = H.internal_organs_by_name[BP_CELL] - if(istype(potato) && potato.cell) - var/obj/item/cell/C = potato.cell - C.give(chargecost) - H.AdjustSleeping(-60) - log_and_message_admins("used \a [src] to revive [key_name(H)].") - -/obj/item/shockpaddles/proc/lowskill_revive(mob/living/carbon/human/H, mob/living/user) - if(prob(60)) - playsound(get_turf(src), 'sound/machines/defib_zap.ogg', 100, 1, -1) - H.electrocute_act(burn_damage_amt*4, src, def_zone = BP_CHEST) - user.visible_message("The paddles were misaligned! \The [user] shocks [H] with \the [src]!", "The paddles were misaligned! You shock [H] with \the [src]!") - return 0 - if(prob(50)) - playsound(get_turf(src), 'sound/machines/defib_zap.ogg', 100, 1, -1) - user.electrocute_act(burn_damage_amt*2, src, def_zone = BP_L_HAND) - user.electrocute_act(burn_damage_amt*2, src, def_zone = BP_R_HAND) - user.visible_message("\The [user] shocks themselves with \the [src]!", "You forget to move your hands away and shock yourself with \the [src]!") - return 0 - return 1 - -/obj/item/shockpaddles/proc/do_electrocute(mob/living/carbon/human/H, mob/user, var/target_zone) - var/obj/item/organ/external/affecting = H.get_organ(target_zone) - if(!affecting) - to_chat(user, "They are missing that body part!") - return - - //no need to spend time carefully placing the paddles, we're just trying to shock them - user.visible_message("\The [user] slaps [src] onto [H]'s [affecting.name].", "You overcharge [src] and slap them onto [H]'s [affecting.name].") - - //Just stop at awkwardly slapping electrodes on people if the safety is enabled - if(safety) - to_chat(user, "You can't do that while the safety is enabled.") - return - - playsound(get_turf(src), 'sound/machines/defib_charge.ogg', 50, 0) - audible_message("\The [src] lets out a steadily rising hum...") - - if(!do_after(user, chargetime, H, DO_DEFAULT | DO_USER_UNIQUE_ACT | DO_PUBLIC_PROGRESS)) - return - - //deduct charge here, in case the base unit was EMPed or something during the delay time - if(!checked_use(chargecost)) - make_announcement("buzzes, \"Insufficient charge.\"", "warning") - playsound(get_turf(src), 'sound/machines/defib_failed.ogg', 50, 0) - return - - user.visible_message("\The [user] shocks [H] with \the [src]!", "You shock [H] with \the [src]!") - playsound(get_turf(src), 'sound/machines/defib_zap.ogg', 100, 1, -1) - playsound(loc, 'sound/weapons/Egloves.ogg', 100, 1, -1) - set_cooldown(cooldowntime) - - H.stun_effect_act(2, 120, target_zone) - var/burn_damage = H.electrocute_act(burn_damage_amt*2, src, def_zone = target_zone) - if(burn_damage > 15 && H.can_feel_pain()) - H.emote("scream") - var/obj/item/organ/internal/heart/doki = LAZYACCESS(affecting.internal_organs, BP_HEART) - if(istype(doki) && doki.pulse && !doki.open && prob(10)) - to_chat(doki, "Your [doki] has stopped!") - doki.pulse = PULSE_NONE - - admin_attack_log(user, H, "Electrocuted using \a [src]", "Was electrocuted with \a [src]", "used \a [src] to electrocute") - -/obj/item/shockpaddles/proc/make_alive(mob/living/carbon/human/M) //This revives the mob - var/deadtime = world.time - M.timeofdeath - - M.switch_from_dead_to_living_mob_list() - M.timeofdeath = 0 - M.set_stat(UNCONSCIOUS) //Life() can bring them back to consciousness if it needs to. - M.regenerate_icons() - M.failed_last_breath = 0 //So mobs that died of oxyloss don't revive and have perpetual out of breath. - M.reload_fullscreen() - - M.emote("gasp") - M.Weaken(rand(10,25)) - M.updatehealth() - apply_brain_damage(M, deadtime) - -/obj/item/shockpaddles/proc/apply_brain_damage(mob/living/carbon/human/H, var/deadtime) - if(deadtime < DEFIB_TIME_LOSS) return - - if(!H.should_have_organ(BP_BRAIN)) return //no brain - - var/obj/item/organ/internal/brain/brain = H.internal_organs_by_name[BP_BRAIN] - if(!brain) return //no brain - - var/brain_damage = clamp((deadtime - DEFIB_TIME_LOSS)/(DEFIB_TIME_LIMIT - DEFIB_TIME_LOSS)*brain.max_damage, H.getBrainLoss(), brain.max_damage) - H.setBrainLoss(brain_damage) - -/obj/item/shockpaddles/proc/make_announcement(var/message, var/msg_class) - audible_message("\The [src] [message]", "\The [src] vibrates slightly.") - -/obj/item/shockpaddles/emag_act(var/uses, var/mob/user, var/obj/item/defibrillator/base) - if(istype(src, /obj/item/shockpaddles/linked)) - var/obj/item/shockpaddles/linked/dfb = src - if(dfb.base_unit) - base = dfb.base_unit - if(!base) - return - if(safety) - safety = 0 - to_chat(user, "You silently disable \the [src]'s safety protocols with the cryptographic sequencer.") - burn_damage_amt *= 3 - base.update_icon() - return 1 - else - safety = 1 - to_chat(user, "You silently enable \the [src]'s safety protocols with the cryptographic sequencer.") - burn_damage_amt = initial(burn_damage_amt) - base.update_icon() - return 1 - -/obj/item/shockpaddles/emp_act(severity) - var/new_safety = rand(0, 1) - if(safety != new_safety) - safety = new_safety - if(safety) - make_announcement("beeps, \"Safety protocols enabled!\"", "notice") - playsound(get_turf(src), 'sound/machines/defib_safetyon.ogg', 50, 0) - else - make_announcement("beeps, \"Safety protocols disabled!\"", "warning") - playsound(get_turf(src), 'sound/machines/defib_safetyoff.ogg', 50, 0) - update_icon() - ..() - -/obj/item/shockpaddles/robot - name = "defibrillator paddles" - desc = "A pair of advanced shockpaddles powered by a robot's internal power cell, able to penetrate thick clothing." - chargecost = 50 - combat = 1 - icon_state = "defibpaddles0" - item_state = "defibpaddles0" - cooldowntime = (3 SECONDS) - -/obj/item/shockpaddles/robot/check_charge(var/charge_amt) - if(isrobot(src.loc)) - var/mob/living/silicon/robot/R = src.loc - return (R.cell && R.cell.check_charge(charge_amt)) - -/obj/item/shockpaddles/robot/checked_use(var/charge_amt) - if(isrobot(src.loc)) - var/mob/living/silicon/robot/R = src.loc - return (R.cell && R.cell.checked_use(charge_amt)) - -/obj/item/shockpaddles/rig - name = "mounted defibrillator" - desc = "If you can see this something is very wrong, report this bug." - cooldowntime = (4 SECONDS) - chargetime = (1 SECOND) - chargecost = 150 - safety = 0 - wielded = 1 - -/obj/item/shockpaddles/rig/check_charge(var/charge_amt) - if(istype(src.loc, /obj/item/rig_module/device/defib)) - var/obj/item/rig_module/device/defib/module = src.loc - return (module.holder && module.holder.cell && module.holder.cell.check_charge(charge_amt)) - -/obj/item/shockpaddles/rig/checked_use(var/charge_amt) - if(istype(src.loc, /obj/item/rig_module/device/defib)) - var/obj/item/rig_module/device/defib/module = src.loc - return (module.holder && module.holder.cell && module.holder.cell.checked_use(charge_amt)) - -/obj/item/shockpaddles/rig/set_cooldown(var/delay) - ..() - if(istype(src.loc, /obj/item/rig_module/device/defib)) - var/obj/item/rig_module/device/defib/module = src.loc - module.next_use = world.time + delay -/* - Shockpaddles that are linked to a base unit -*/ -/obj/item/shockpaddles/linked - var/obj/item/defibrillator/base_unit - -/obj/item/shockpaddles/linked/New(newloc, obj/item/defibrillator/defib) - base_unit = defib - ..(newloc) - -/obj/item/shockpaddles/linked/Destroy() - if(base_unit) - //ensure the base unit's icon updates - if(base_unit.paddles == src) - base_unit.paddles = null - base_unit.update_icon() - base_unit = null - return ..() - -/obj/item/shockpaddles/linked/dropped(mob/user) - ..() //update twohanding - if(base_unit) - base_unit.reattach_paddles(user) //paddles attached to a base unit should never exist outside of their base unit or the mob equipping the base unit - -/obj/item/shockpaddles/linked/check_charge(var/charge_amt) - return (base_unit.bcell && base_unit.bcell.check_charge(charge_amt)) - -/obj/item/shockpaddles/linked/checked_use(var/charge_amt) - return (base_unit.bcell && base_unit.bcell.checked_use(charge_amt)) - -/obj/item/shockpaddles/linked/make_announcement(var/message, var/msg_class) - base_unit.audible_message("\The [base_unit] [message]", "\The [base_unit] vibrates slightly.") - -/* - Standalone Shockpaddles -*/ - -/obj/item/shockpaddles/standalone - desc = "A pair of shockpaddles powered by an experimental miniaturized reactor." //Inspired by the advanced e-gun - var/fail_counter = 0 - -/obj/item/shockpaddles/standalone/Destroy() - . = ..() - if(fail_counter) - STOP_PROCESSING(SSobj, src) - -/obj/item/shockpaddles/standalone/check_charge(var/charge_amt) - return 1 - -/obj/item/shockpaddles/standalone/checked_use(var/charge_amt) - SSradiation.radiate(src, charge_amt/12) //just a little bit of radiation. It's the price you pay for being powered by magic I guess - return 1 - -/obj/item/shockpaddles/standalone/Process() - if(fail_counter > 0) - SSradiation.radiate(src, (fail_counter * 2)) - fail_counter-- - else - STOP_PROCESSING(SSobj, src) - -/obj/item/shockpaddles/standalone/emp_act(severity) - ..() - var/new_fail = 0 - switch(severity) - if(EMP_ACT_HEAVY) - new_fail = max(fail_counter, 20) - visible_message("\The [src]'s reactor overloads!") - if(EMP_ACT_LIGHT) - new_fail = max(fail_counter, 8) - if(ismob(loc)) - to_chat(loc, "\The [src] feel pleasantly warm.") - - if(new_fail && !fail_counter) - START_PROCESSING(SSobj, src) - fail_counter = new_fail - -/obj/item/shockpaddles/standalone/traitor - name = "defibrillator paddles" - desc = "A pair of unusual looking paddles powered by an experimental miniaturized reactor. It possesses both the ability to penetrate armor and to deliver powerful shocks." - icon_state = "defibpaddles0" - item_state = "defibpaddles0" - combat = 1 - safety = 0 - chargetime = (1 SECONDS) - burn_damage_amt = 15 - -#undef DEFIB_TIME_LIMIT -#undef DEFIB_TIME_LOSS diff --git a/code/game/objects/items/weapons/dice.dm b/code/game/objects/items/weapons/dice.dm deleted file mode 100644 index 1772813550022..0000000000000 --- a/code/game/objects/items/weapons/dice.dm +++ /dev/null @@ -1,78 +0,0 @@ -/obj/item/dice - name = "d6" - desc = "A dice with six sides." - icon = 'icons/obj/dice.dmi' - icon_state = "d66" - w_class = ITEM_SIZE_TINY - var/sides = 6 - attack_verb = list("diced") - -/obj/item/dice/Initialize() - . = ..() - icon_state = "[name][rand(1,sides)]" - -/obj/item/dice/d4 - name = "d4" - desc = "A dice with four sides." - icon_state = "d44" - sides = 4 - -/obj/item/dice/d8 - name = "d8" - desc = "A dice with eight sides." - icon_state = "d88" - sides = 8 - -/obj/item/dice/d10 - name = "d10" - desc = "A dice with ten sides." - icon_state = "d1010" - sides = 10 - -/obj/item/dice/d12 - name = "d12" - desc = "A dice with twelve sides." - icon_state = "d1212" - sides = 12 - -/obj/item/dice/d20 - name = "d20" - desc = "A dice with twenty sides." - icon_state = "d2020" - sides = 20 - -/obj/item/dice/d100 - name = "d100" - desc = "A dice with ten sides. This one is for the tens digit." - icon_state = "d10010" - sides = 10 - -/obj/item/dice/proc/roll_die() - var/result = rand(1, sides) - return list(result, "") - -/obj/item/dice/d20/roll_die() - var/result = rand(1, sides) - var/comment = "" - if(result == 20) - comment = "Nat 20!" - else if(result == 1) - comment = "Ouch, bad luck." - return list(result, comment) - -/obj/item/dice/attack_self(mob/user as mob) - var/list/roll_result = roll_die() - var/result = roll_result[1] - var/comment = roll_result[2] - icon_state = "[name][result]" - user.visible_message("[user] has thrown [src]. It lands on [result]. [comment]", \ - "You throw [src]. It lands on a [result]. [comment]", \ - "You hear [src] landing on a [result]. [comment]") - -/obj/item/dice/throw_impact() - ..() - var/list/roll_result = roll_die() - var/result = roll_result[1] - var/comment = roll_result[2] - icon_state = "[name][result]" - src.visible_message("\The [src] lands on [result]. [comment]") \ No newline at end of file diff --git a/code/game/objects/items/weapons/ecigs.dm b/code/game/objects/items/weapons/ecigs.dm deleted file mode 100644 index c2c052459f9d6..0000000000000 --- a/code/game/objects/items/weapons/ecigs.dm +++ /dev/null @@ -1,308 +0,0 @@ -/obj/item/clothing/mask/smokable/ecig - name = "electronic cigarette" - desc = "Device with modern approach to smoking." - icon = 'icons/obj/ecig.dmi' - var/active = 0 - var/obj/item/cell/cigcell - var/cartridge_type = /obj/item/reagent_containers/ecig_cartridge/med_nicotine - var/obj/item/reagent_containers/ecig_cartridge/ec_cartridge - var/cell_type = /obj/item/cell/device/standard - w_class = ITEM_SIZE_TINY - slot_flags = SLOT_EARS | SLOT_MASK - attack_verb = list("attacked", "poked", "battered") - body_parts_covered = 0 - var/brightness_on = 1 - chem_volume = 0 //ecig has no storage on its own but has reagent container created by parent obj - item_state = "ecigoff" - var/icon_off - var/icon_empty - var/power_usage = 450 //value for simple ecig, enough for about 1 cartridge, in JOULES! - var/ecig_colors = list(null, COLOR_DARK_GRAY, COLOR_RED_GRAY, COLOR_BLUE_GRAY, COLOR_GREEN_GRAY, COLOR_PURPLE_GRAY) - var/idle = 0 - var/idle_treshold = 30 - -/obj/item/clothing/mask/smokable/ecig/New() - ..() - if(ispath(cell_type)) - cigcell = new cell_type - ec_cartridge = new cartridge_type(src) - -/obj/item/clothing/mask/smokable/ecig/get_cell() - return cigcell - -/obj/item/clothing/mask/smokable/ecig/simple - name = "cheap electronic cigarette" - desc = "A cheap Lucky 1337 electronic cigarette, styled like a traditional cigarette." - icon_state = "ccigoff" - icon_off = "ccigoff" - icon_empty = "ccigoff" - icon_on = "ccigon" - -/obj/item/clothing/mask/smokable/ecig/simple/examine(mob/user) - . = ..() - if(ec_cartridge) - to_chat(user,"There are [round(ec_cartridge.reagents.total_volume, 1)] units of liquid remaining.") - else - to_chat(user,"There's no cartridge connected.") - -/obj/item/clothing/mask/smokable/ecig/util - name = "electronic cigarette" - desc = "A popular utilitarian model electronic cigarette, the ONI-55. Comes in a variety of colors." - icon_state = "ecigoff1" - icon_off = "ecigoff1" - icon_empty = "ecigoff1" - icon_on = "ecigon" - cell_type = /obj/item/cell/device/high //enough for four cartridges - -/obj/item/clothing/mask/smokable/ecig/util/New() - ..() - color = pick(ecig_colors) - -/obj/item/clothing/mask/smokable/ecig/util/examine(mob/user) - . = ..() - if(ec_cartridge) - to_chat(user,"There are [round(ec_cartridge.reagents.total_volume, 1)] units of liquid remaining.") - else - to_chat(user,"There's no cartridge connected.") - if(cigcell) - to_chat(user,"The power meter shows that there's about [round(cigcell.percent(), 25)]% power remaining.") - else - to_chat(user,"There's no cartridge connected.") - -/obj/item/clothing/mask/smokable/ecig/deluxe - name = "deluxe electronic cigarette" - desc = "A premium model eGavana MK3 electronic cigarette, shaped like a cigar." - icon_state = "pcigoff1" - icon_off = "pcigoff1" - icon_empty = "pcigoff2" - icon_on = "pcigon" - cell_type = /obj/item/cell/device/high //enough for four catridges - -/obj/item/clothing/mask/smokable/ecig/deluxe/examine(mob/user) - . = ..() - if(ec_cartridge) - to_chat(user,"There are [round(ec_cartridge.reagents.total_volume, 1)] units of liquid remaining.") - else - to_chat(user,"There's no cartridge connected.") - if(cigcell) - to_chat(user,"The power meter shows that there's about [round(cigcell.percent(), 1)]% power remaining.") - else - to_chat(user,"There's no cartridge connected.") - -/obj/item/clothing/mask/smokable/ecig/proc/Deactivate() - active = 0 - STOP_PROCESSING(SSobj, src) - update_icon() - -/obj/item/clothing/mask/smokable/ecig/Process() - if(!cigcell) - Deactivate() - return - if(!ec_cartridge) - Deactivate() - return - - if(idle >= idle_treshold) //idle too long -> automatic shut down - idle = 0 - visible_message("\The [src] powers down automatically.", null, 2) - Deactivate() - return - - idle ++ - - if(ishuman(loc)) - var/mob/living/carbon/human/C = loc - - if (!active || !ec_cartridge || !ec_cartridge.reagents.total_volume)//no cartridge - if(!ec_cartridge.reagents.total_volume) - to_chat(C, "There's no liquid left in \the [src], so you shut it down.") - Deactivate() - return - - if (src == C.wear_mask && C.check_has_mouth()) //transfer, but only when not disabled - idle = 0 - //here we'll reduce battery by usage, and check powerlevel - you only use batery while smoking - if(!cigcell.checked_use(power_usage * CELLRATE)) //if this passes, there's not enough power in the battery - Deactivate() - to_chat(C,"\The [src]'s power meter flashes a low battery warning and shuts down.") - return - ec_cartridge.reagents.trans_to_mob(C, REM, CHEM_INGEST, 0.4) // Most of it is not inhaled... balance reasons. - -/obj/item/clothing/mask/smokable/ecig/on_update_icon() - if (active) - item_state = icon_on - icon_state = icon_on - set_light(0.6, 0.5, brightness_on) - else if (ec_cartridge) - set_light(0) - item_state = icon_off - icon_state = icon_off - else - icon_state = icon_empty - item_state = icon_empty - set_light(0) - if(ismob(loc)) - var/mob/living/M = loc - M.update_inv_wear_mask(0) - M.update_inv_l_hand(0) - M.update_inv_r_hand(1) - - -/obj/item/clothing/mask/smokable/ecig/attackby(var/obj/item/I, var/mob/user as mob) - if(istype(I, /obj/item/reagent_containers/ecig_cartridge)) - if (ec_cartridge)//can't add second one - to_chat(user, "A cartridge has already been installed. ") - else if(user.unEquip(I, src))//fits in new one - ec_cartridge = I - update_icon() - to_chat(user, "You insert \the [I] into \the [src]. ") - - if(istype(I, /obj/item/screwdriver)) - if(cigcell) //if contains powercell - cigcell.update_icon() - cigcell.dropInto(loc) - cigcell = null - to_chat(user, "You remove \the [cigcell] from \the [src].") - else //does not contains cell - to_chat(user, "There's no battery in \the [src].") - - if(istype(I, /obj/item/cell/device)) - if(!cigcell && user.unEquip(I)) - I.forceMove(src) - cigcell = I - to_chat(user, "You install \the [cigcell] into \the [src].") - update_icon() - else - to_chat(user, "\The [src] already has a battery installed.") - - -/obj/item/clothing/mask/smokable/ecig/attack_self(mob/user as mob) - if (active) - Deactivate() - to_chat(user, "You turn off \the [src]. ") - else - if(cigcell) - if (!ec_cartridge) - to_chat(user, "You can't use \the [src] with no cartridge installed! ") - return - else if(!ec_cartridge.reagents.total_volume) - to_chat(user, "You can't use \the [src] with no liquid left! ") - return - else if(!cigcell.check_charge(power_usage * CELLRATE)) - to_chat(user, "\The [src]'s power meter flashes a low battery warning and refuses to operate. ") - return - active=1 - START_PROCESSING(SSobj, src) - to_chat(user, "You turn on \the [src]. ") - update_icon() - - else - to_chat(user, "\The [src] does not have a battery installed.") - -/obj/item/clothing/mask/smokable/ecig/attack_hand(mob/user as mob)//eject cartridge - if(user.get_inactive_hand() == src)//if being hold - if (ec_cartridge) - active=0 - user.put_in_hands(ec_cartridge) - to_chat(user, "You remove \the [ec_cartridge] from \the [src]. ") - ec_cartridge = null - update_icon() - else - ..() - -/obj/item/reagent_containers/ecig_cartridge - name = "tobacco flavour cartridge" - desc = "A small metal cartridge, used with electronic cigarettes, which contains an atomizing coil and a solution to be atomized." - w_class = ITEM_SIZE_TINY - icon = 'icons/obj/ecig.dmi' - icon_state = "ecartridge" - matter = list(MATERIAL_ALUMINIUM = 50, MATERIAL_GLASS = 10) - volume = 20 - atom_flags = ATOM_FLAG_NO_TEMP_CHANGE | ATOM_FLAG_OPEN_CONTAINER - -/obj/item/reagent_containers/ecig_cartridge/examine(mob/user)//to see how much left - . = ..() - to_chat(user, "The cartridge has [reagents.total_volume] units of liquid remaining.") - -//flavours -/obj/item/reagent_containers/ecig_cartridge/blank - name = "ecigarette cartridge" - desc = "A small metal cartridge which contains an atomizing coil." - -/obj/item/reagent_containers/ecig_cartridge/blanknico - name = "flavorless nicotine cartridge" - desc = "A small metal cartridge which contains an atomizing coil and a solution to be atomized. The label says you can add whatever flavoring agents you want." -/obj/item/reagent_containers/ecig_cartridge/blanknico/New() - ..() - reagents.add_reagent(/datum/reagent/tobacco/liquid, 5) - reagents.add_reagent(/datum/reagent/water, 10) - -/obj/item/reagent_containers/ecig_cartridge/med_nicotine - name = "tobacco flavour cartridge" - desc = "A small metal cartridge which contains an atomizing coil and a solution to be atomized. The label says its tobacco flavored." -/obj/item/reagent_containers/ecig_cartridge/med_nicotine/New() - ..() - reagents.add_reagent(/datum/reagent/tobacco, 5) - reagents.add_reagent(/datum/reagent/water, 15) - -/obj/item/reagent_containers/ecig_cartridge/high_nicotine - name = "high nicotine tobacco flavour cartridge" - desc = "A small metal cartridge which contains an atomizing coil and a solution to be atomized. The label says its tobacco flavored, with extra nicotine." -/obj/item/reagent_containers/ecig_cartridge/high_nicotine/New() - ..() - reagents.add_reagent(/datum/reagent/tobacco, 10) - reagents.add_reagent(/datum/reagent/water, 10) - -/obj/item/reagent_containers/ecig_cartridge/orange - name = "orange flavour cartridge" - desc = "A small metal cartridge which contains an atomizing coil and a solution to be atomized. The label says its orange flavored." -/obj/item/reagent_containers/ecig_cartridge/orange/New() - ..() - reagents.add_reagent(/datum/reagent/tobacco/liquid, 5) - reagents.add_reagent(/datum/reagent/water, 10) - reagents.add_reagent(/datum/reagent/drink/juice/orange, 5) - -/obj/item/reagent_containers/ecig_cartridge/mint - name = "mint flavour cartridge" - desc = "A small metal cartridge which contains an atomizing coil and a solution to be atomized. The label says its mint flavored." -/obj/item/reagent_containers/ecig_cartridge/mint/New() - ..() - reagents.add_reagent(/datum/reagent/tobacco/liquid, 5) - reagents.add_reagent(/datum/reagent/water, 10) - reagents.add_reagent(/datum/reagent/menthol, 5) - -/obj/item/reagent_containers/ecig_cartridge/watermelon - name = "watermelon flavour cartridge" - desc = "A small metal cartridge which contains an atomizing coil and a solution to be atomized. The label says its watermelon flavored." -/obj/item/reagent_containers/ecig_cartridge/watermelon/New() - ..() - reagents.add_reagent(/datum/reagent/tobacco/liquid, 5) - reagents.add_reagent(/datum/reagent/water, 10) - reagents.add_reagent(/datum/reagent/drink/juice/watermelon, 5) - -/obj/item/reagent_containers/ecig_cartridge/grape - name = "grape flavour cartridge" - desc = "A small metal cartridge which contains an atomizing coil and a solution to be atomized. The label says its grape flavored." -/obj/item/reagent_containers/ecig_cartridge/grape/New() - ..() - reagents.add_reagent(/datum/reagent/tobacco/liquid, 5) - reagents.add_reagent(/datum/reagent/water, 10) - reagents.add_reagent(/datum/reagent/drink/juice/grape, 5) - -/obj/item/reagent_containers/ecig_cartridge/lemonlime - name = "lemon-lime flavour cartridge" - desc = "A small metal cartridge which contains an atomizing coil and a solution to be atomized. The label says its lemon-lime flavored." -/obj/item/reagent_containers/ecig_cartridge/lemonlime/New() - ..() - reagents.add_reagent(/datum/reagent/tobacco/liquid, 5) - reagents.add_reagent(/datum/reagent/water, 10) - reagents.add_reagent(/datum/reagent/drink/lemon_lime, 5) - -/obj/item/reagent_containers/ecig_cartridge/coffee - name = "coffee flavour cartridge" - desc = "A small metal cartridge which contains an atomizing coil and a solution to be atomized. The label says its coffee flavored." -/obj/item/reagent_containers/ecig_cartridge/coffee/New() - ..() - reagents.add_reagent(/datum/reagent/tobacco/liquid, 5) - reagents.add_reagent(/datum/reagent/water, 10) - reagents.add_reagent(/datum/reagent/drink/coffee, 5) diff --git a/code/game/objects/items/weapons/electric_welder.dm b/code/game/objects/items/weapons/electric_welder.dm deleted file mode 100644 index 4d0864ccf28f3..0000000000000 --- a/code/game/objects/items/weapons/electric_welder.dm +++ /dev/null @@ -1,88 +0,0 @@ -/obj/item/weldingtool/electric - name = "arc welder" - desc = "A man-portable arc welding tool." - icon_state = "welder_arc" - welding_resource = "stored charge" - tank = null - waterproof = TRUE - force = 7 - throwforce = 7 - origin_tech = list(TECH_POWER = 5, TECH_ENGINEERING = 4) - var/obj/item/cell/cell = /obj/item/cell/high - var/fuel_cost_multiplier = 10 - -/obj/item/weldingtool/electric/Initialize() - if(ispath(cell)) - cell = new cell(src) - . = ..() - -/obj/item/weldingtool/electric/examine(mob/user, distance) - . = ..() - if (!cell) - to_chat(user, "There is no [welding_resource] source attached.") - else - to_chat(user, (distance == 0 ? "It has [get_fuel()] [welding_resource] remaining. " : "") + "[cell] is attached.") - -/obj/item/weldingtool/electric/afterattack(var/obj/O, var/mob/user, var/proximity) - if(proximity && istype(O, /obj/structure/reagent_dispensers/fueltank)) - if(!welding) - to_chat(user, SPAN_WARNING("\The [src] runs on an internal charge and does not need to be refuelled.")) - return - . = ..() - -/obj/item/weldingtool/electric/get_cell() - if(cell) - . = cell - else if(istype(loc, /obj/item/rig_module)) - var/obj/item/rig_module/module = loc - if(istype(module.holder)) - . = module.holder.get_cell() - -/obj/item/weldingtool/electric/get_fuel() - return get_available_charge() - -/obj/item/weldingtool/electric/proc/get_available_charge() - var/obj/item/cell/cell = get_cell() - return cell ? cell.charge : 0 - -/obj/item/weldingtool/electric/attackby(var/obj/item/W, var/mob/user) - if(istype(W,/obj/item/stack/material/rods) || istype(W, /obj/item/welder_tank)) - return - if(isScrewdriver(W)) - if(cell) - cell.dropInto(get_turf(src)) - user.put_in_hands(cell) - to_chat(user, SPAN_NOTICE("You pop \the [cell] out of \the [src].")) - welding = FALSE - cell = null - update_icon() - else - to_chat(user, SPAN_WARNING("\The [src] has no cell installed.")) - return - else if(istype(W, /obj/item/cell)) - if(cell) - to_chat(user, SPAN_WARNING("\The [src] already has a cell installed.")) - else if(user.unEquip(W)) - cell = W - cell.forceMove(src) - to_chat(user, SPAN_NOTICE("You slot \the [cell] into \the [src].")) - update_icon() - return - . = ..() - -/obj/item/weldingtool/electric/burn_fuel(var/amount) - spend_charge(amount * fuel_cost_multiplier) - var/turf/T = get_turf(src) - if(T) - T.hotspot_expose(700, 5) - -/obj/item/weldingtool/electric/on_update_icon() - underlays.Cut() - item_state = welding ? "welder1" : "welder" - if(cell) - underlays += image(icon = icon, icon_state = "[initial(icon_state)]_cell") - -/obj/item/weldingtool/electric/proc/spend_charge(var/amount) - var/obj/item/cell/cell = get_cell() - if(cell) - cell.use(amount * CELLRATE) diff --git a/code/game/objects/items/weapons/explosives.dm b/code/game/objects/items/weapons/explosives.dm deleted file mode 100644 index ce066d6ca0f7b..0000000000000 --- a/code/game/objects/items/weapons/explosives.dm +++ /dev/null @@ -1,102 +0,0 @@ -/obj/item/plastique - name = "plastic explosives" - desc = "Used to put holes in specific areas without too much extra hole." - gender = PLURAL - icon = 'icons/obj/assemblies.dmi' - icon_state = "plastic-explosive0" - item_state = "plasticx" - item_flags = ITEM_FLAG_NO_BLUDGEON - w_class = ITEM_SIZE_SMALL - origin_tech = list(TECH_ESOTERIC = 2) - var/datum/wires/explosive/c4/wires = null - var/timer = 10 - var/atom/target = null - var/open_panel = 0 - var/image_overlay = null - -/obj/item/plastique/New() - wires = new(src) - image_overlay = image('icons/obj/assemblies.dmi', "plastic-explosive2") - ..() - -/obj/item/plastique/Destroy() - qdel(wires) - wires = null - return ..() - -/obj/item/plastique/attackby(var/obj/item/I, var/mob/user) - if(isScrewdriver(I)) - open_panel = !open_panel - to_chat(user, "You [open_panel ? "open" : "close"] the wire panel.") - else if(isWirecutter(I) || isMultitool(I) || istype(I, /obj/item/device/assembly/signaler )) - wires.Interact(user) - else - ..() - -/obj/item/plastique/attack_self(mob/user as mob) - var/newtime = input(usr, "Please set the timer.", "Timer", 10) as num - if(user.get_active_hand() == src) - newtime = clamp(newtime, 10, 60000) - timer = newtime - to_chat(user, "Timer set for [timer] seconds.") - -/obj/item/plastique/afterattack(atom/movable/target, mob/user, flag) - if (!flag) - return - if (ismob(target) || istype(target, /turf/unsimulated) || istype(target, /turf/simulated/shuttle) || istype(target, /obj/item/storage) || istype(target, /obj/item/clothing/accessory/storage) || istype(target, /obj/item/clothing/under)) - return - to_chat(user, "Planting explosives...") - user.do_attack_animation(target) - - if(do_after(user, 5 SECONDS, target, DO_DEFAULT | DO_USER_UNIQUE_ACT) && in_range(user, target)) - if(!user.unequip_item()) - return - src.target = target - forceMove(null) - - if (ismob(target)) - admin_attack_log(user, target, "Planted \a [src] with a [timer] second fuse.", "Had \a [src] with a [timer] second fuse planted on them.", "planted \a [src] with a [timer] second fuse on") - user.visible_message("[user.name] finished planting an explosive on [target.name]!") - log_game("[key_name(user)] planted [src.name] on [key_name(target)] with [timer] second fuse") - - else - log_and_message_admins("planted \a [src] with a [timer] second fuse on \the [target].") - - target.overlays += image_overlay - to_chat(user, "Bomb has been planted. Timer counting down from [timer].") - run_timer() - -/obj/item/plastique/proc/explode(var/location) - if(!target) - target = get_atom_on_turf(src) - if(!target) - target = src - if(location) - explosion(location, -1, -1, 2, 3) - - if(target) - if (istype(target, /turf/simulated/wall)) - var/turf/simulated/wall/W = target - W.kill_health() - else if(istype(target, /mob/living)) - target.ex_act(EX_ACT_HEAVY) // c4 can't gib mobs anymore. - else - target.ex_act(EX_ACT_DEVASTATING) - if(target) - target.overlays -= image_overlay - qdel(src) - -/obj/item/plastique/proc/run_timer() //Basically exists so the C4 will beep when running. Better idea than putting sleeps in attackby. - set waitfor = 0 - var/T = timer - while(T > 0) - sleep(1 SECOND) - if(target) - playsound(target, 'sound/items/timer.ogg', 50) - else - playsound(loc, 'sound/items/timer.ogg', 50) - T-- - explode(get_turf(target)) - -/obj/item/plastique/attack(mob/M as mob, mob/user as mob, def_zone) - return diff --git a/code/game/objects/items/weapons/extinguisher.dm b/code/game/objects/items/weapons/extinguisher.dm deleted file mode 100644 index 7997aec7122f1..0000000000000 --- a/code/game/objects/items/weapons/extinguisher.dm +++ /dev/null @@ -1,167 +0,0 @@ -/obj/item/extinguisher - name = "fire extinguisher" - desc = "A traditional red fire extinguisher." - icon = 'icons/obj/items.dmi' - icon_state = "fire_extinguisher0" - item_state = "fire_extinguisher" - hitsound = 'sound/weapons/smash.ogg' - obj_flags = OBJ_FLAG_CONDUCTIBLE - throwforce = 10 - w_class = ITEM_SIZE_NORMAL - throw_speed = 2 - throw_range = 10 - force = 10.0 - base_parry_chance = 15 - matter = list(MATERIAL_STEEL = 90) - attack_verb = list("slammed", "whacked", "bashed", "thunked", "battered", "bludgeoned", "thrashed") - - var/spray_particles = 3 - var/spray_amount = 120 //units of liquid per spray - 120 -> same as splashing them with a bucket per spray - var/starting_water = 2000 - var/max_water = 2000 - var/last_use = 1.0 - var/safety = 1 - var/sprite_name = "fire_extinguisher" - -/obj/item/extinguisher/mini - name = "mini fire extinguisher" - desc = "A light and compact fibreglass-framed model fire extinguisher." - icon_state = "miniFE0" - item_state = "miniFE" - hitsound = null //it is much lighter, after all. - throwforce = 2 - w_class = ITEM_SIZE_SMALL - force = 3.0 - spray_amount = 80 - starting_water = 1000 - max_water = 1000 - sprite_name = "miniFE" - matter = list(MATERIAL_STEEL = 30, MATERIAL_GLASS = 30) - -/obj/item/extinguisher/Initialize() - . = ..() - create_reagents(max_water) - if(starting_water > 0) - reagents.add_reagent(/datum/reagent/water, starting_water) - -/obj/item/extinguisher/empty - starting_water = 0 - -/obj/item/extinguisher/mini/empty - starting_water = 0 - -/obj/item/extinguisher/examine(mob/user, distance) - . = ..() - if(distance <= 0) - to_chat(user, text("[icon2html(src, viewers(get_turf(src)))] [] contains [] units of water left!", src, src.reagents.total_volume)) - -/obj/item/extinguisher/attack_self(mob/user as mob) - safety = !safety - src.icon_state = "[sprite_name][!safety]" - src.desc = "The safety is [safety ? "on" : "off"]." - to_chat(user, "The safety is [safety ? "on" : "off"].") - return - -/obj/item/extinguisher/attack(var/mob/living/M, var/mob/user) - if(user.a_intent == I_HELP) - if(src.safety || (world.time < src.last_use + 20)) // We still catch help intent to not randomly attack people - return - if(src.reagents.total_volume < 1) - to_chat(user, SPAN_NOTICE("\The [src] is empty.")) - return - - src.last_use = world.time - reagents.splash(M, min(reagents.total_volume, spray_amount)) - - user.visible_message(SPAN_NOTICE("\The [user] sprays \the [M] with \the [src].")) - playsound(src.loc, 'sound/effects/extinguish.ogg', 75, 1, -3) - - return 1 // No afterattack - return ..() - -/obj/item/extinguisher/proc/propel_object(var/obj/O, mob/user, movementdirection) - if(O.anchored) return - - var/obj/structure/bed/chair/C - if(istype(O, /obj/structure/bed/chair)) - C = O - - var/list/move_speed = list(1, 1, 1, 2, 2, 3) - for(var/i in 1 to 6) - if(C) C.propelled = (6-i) - O.Move(get_step(user,movementdirection), movementdirection) - sleep(move_speed[i]) - - //additional movement - for(var/i in 1 to 3) - O.Move(get_step(user,movementdirection), movementdirection) - sleep(3) - -/obj/item/extinguisher/resolve_attackby(var/atom/target, var/mob/user, var/flag) - if (istype(target, /obj/structure/hygiene/sink) && reagents.get_free_space() > 0) // fill first, wash if full - return FALSE - return ..() - - -/obj/item/extinguisher/afterattack(var/atom/target, var/mob/user, var/flag) - var/issink = istype(target, /obj/structure/hygiene/sink) - - if (flag && (issink || istype(target, /obj/structure/reagent_dispensers))) - var/obj/dispenser = target - var/amount = reagents.get_free_space() - if (amount <= 0) - to_chat(user, SPAN_NOTICE("\The [src] is full.")) - return - if (!issink) // sinks create reagents, they don't "contain" them - if (dispenser.reagents.total_volume <= 0) - to_chat(user, SPAN_NOTICE("\The [dispenser] is empty.")) - return - amount = dispenser.reagents.trans_to_obj(src, max_water) - else - reagents.add_reagent(/datum/reagent/water, amount) - to_chat(user, SPAN_NOTICE("You fill \the [src] with [amount] units from \the [dispenser].")) - playsound(src.loc, 'sound/effects/refill.ogg', 50, 1, -6) - if (istype(target, /obj/structure/reagent_dispensers/acid)) - to_chat(user, SPAN_WARNING("The acid violently eats away at \the [src]!")) - if (prob(50)) - reagents.splash(user, 5) - qdel(src) - return - - if (!safety) - if (src.reagents.total_volume < 1) - to_chat(usr, SPAN_NOTICE("\The [src] is empty.")) - return - - if (world.time < src.last_use + 20) - return - - src.last_use = world.time - - playsound(src.loc, 'sound/effects/extinguish.ogg', 75, 1, -3) - - var/direction = get_dir(src,target) - - if(user.buckled && isobj(user.buckled)) - addtimer(CALLBACK(src, .proc/propel_object, user.buckled, user, turn(direction,180)), 0) - - addtimer(CALLBACK(src, .proc/do_spray, target), 0) - - if((istype(usr.loc, /turf/space)) || (usr.lastarea.has_gravity == 0)) - user.inertia_dir = get_dir(target, user) - step(user, user.inertia_dir) - else - return ..() - return - -/obj/item/extinguisher/proc/do_spray(var/atom/Target) - var/turf/T = get_turf(Target) - var/per_particle = min(spray_amount, reagents.total_volume)/spray_particles - for(var/a = 1 to spray_particles) - if(!src || !reagents.total_volume) return - - var/obj/effect/effect/water/W = new /obj/effect/effect/water(get_turf(src)) - W.create_reagents(per_particle) - reagents.trans_to_obj(W, per_particle) - W.set_color() - W.set_up(T) diff --git a/code/game/objects/items/weapons/flame.dm b/code/game/objects/items/weapons/flame.dm deleted file mode 100644 index d728c02afccda..0000000000000 --- a/code/game/objects/items/weapons/flame.dm +++ /dev/null @@ -1,86 +0,0 @@ -//For anything that can light stuff on fire -/obj/item/flame - waterproof = FALSE - var/lit = 0 - -/obj/item/flame/afterattack(var/obj/O, var/mob/user, proximity) - ..() - if(proximity && lit && istype(O)) - O.HandleObjectHeating(src, user, 700) - -/obj/item/flame/proc/extinguish(var/mob/user, var/no_message) - lit = 0 - damtype = DAMAGE_BRUTE - STOP_PROCESSING(SSobj, src) - -/obj/item/flame/water_act(var/depth) - ..() - if(!waterproof && lit) - if(submerged(depth)) - extinguish(no_message = TRUE) - -/proc/isflamesource(var/atom/A) - if(!istype(A)) - return FALSE - if(isWelder(A)) - var/obj/item/weldingtool/WT = A - return (WT.isOn()) - else if(istype(A, /obj/item/flame)) - var/obj/item/flame/F = A - return (F.lit) - else if(istype(A, /obj/item/clothing/mask/smokable) && !istype(A, /obj/item/clothing/mask/smokable/pipe)) - var/obj/item/clothing/mask/smokable/S = A - return (S.lit) - else if(istype(A, /obj/item/device/assembly/igniter)) - return TRUE - return FALSE - -/////////// -//MATCHES// -/////////// -/obj/item/flame/match - name = "match" - desc = "A simple match stick, used for lighting fine smokables." - icon = 'icons/obj/cigarettes.dmi' - icon_state = "match_unlit" - var/burnt = 0 - var/smoketime = 5 - w_class = ITEM_SIZE_TINY - origin_tech = list(TECH_MATERIAL = 1) - slot_flags = SLOT_EARS - attack_verb = list("burnt", "singed") - -/obj/item/flame/match/Process() - if(isliving(loc)) - var/mob/living/M = loc - M.IgniteMob() - var/turf/location = get_turf(src) - smoketime-- - if(submerged() || smoketime < 1) - extinguish() - return - if(location) - location.hotspot_expose(700, 5) - -/obj/item/flame/match/dropped(var/mob/user) - //If dropped, put ourselves out - //not before lighting up the turf we land on, though. - if(lit) - var/turf/location = src.loc - if(istype(location)) - location.hotspot_expose(700, 5) - extinguish() - return ..() - -/obj/item/flame/match/extinguish(var/mob/user, var/no_message) - . = ..() - name = "burnt match" - desc = "A match. This one has seen better days." - burnt = 1 - update_icon() - -/obj/item/flame/match/on_update_icon() - ..() - if(burnt) - icon_state = "match_burnt" - item_state = "cigoff" diff --git a/code/game/objects/items/weapons/flamethrower.dm b/code/game/objects/items/weapons/flamethrower.dm deleted file mode 100644 index 4f4dafa554bb7..0000000000000 --- a/code/game/objects/items/weapons/flamethrower.dm +++ /dev/null @@ -1,239 +0,0 @@ -/obj/item/flamethrower - name = "flamethrower" - desc = "You are a firestarter!" - icon = 'icons/obj/flamethrower.dmi' - icon_state = "flamethrowerbase" - item_state = "flamethrower_0" - obj_flags = OBJ_FLAG_CONDUCTIBLE - force = 3.0 - throwforce = 10.0 - throw_speed = 1 - throw_range = 5 - w_class = ITEM_SIZE_LARGE - origin_tech = list(TECH_COMBAT = 1) - matter = list(MATERIAL_STEEL = 500) - var/complete = FALSE - var/status = 0 - var/lit = 0 //on or off - var/operating = 0//cooldown - var/turf/previousturf = null - var/obj/item/weldingtool/weldtool = null - var/obj/item/device/assembly/igniter/igniter = null - var/obj/item/reagent_containers/beaker = null - var/range = 4 - var/max_beaker = ITEM_SIZE_SMALL - -/obj/item/flamethrower/Destroy() - QDEL_NULL(weldtool) - QDEL_NULL(igniter) - QDEL_NULL(beaker) - . = ..() - -/obj/item/flamethrower/Process() - if(!lit) - STOP_PROCESSING(SSobj, src) - return null - var/turf/location = loc - if(ismob(location)) - var/mob/M = location - if(M.l_hand == src || M.r_hand == src) - location = M.loc - if(isturf(location)) //start a fire if possible - location.hotspot_expose(700, 2) - return - - -/obj/item/flamethrower/on_update_icon() - overlays.Cut() - if(igniter) - overlays += "+igniter[status]" - if(beaker) - overlays += "+ptank" - if(lit) - overlays += "+lit" - item_state = "flamethrower_1" - else - item_state = "flamethrower_0" - return - -/obj/item/flamethrower/afterattack(atom/target, mob/user, proximity) - // Make sure our user is still holding us - if(user.a_intent == I_HELP) //don't shoot if we're on help intent - to_chat(user, SPAN_WARNING("You refrain from firing \the [src] as your intent is set to help.")) - return - var/turf/target_turf = get_turf(target) - if(target_turf) - var/turflist = getline(user, target_turf) - flame_turf(turflist) - -/obj/item/flamethrower/attack_hand(mob/user) - if(user.get_inactive_hand() == src) - if(beaker && CanPhysicallyInteract(user)) - user.put_in_hands(beaker) - beaker = null - to_chat(user, SPAN_NOTICE("You remove the fuel container from [src]!")) - update_icon() - else - return ..() - -/obj/item/flamethrower/attackby(obj/item/W as obj, mob/user as mob) - if(user.stat || user.restrained() || user.lying) return - if(isWrench(W) && !status && !complete)//Taking this apart - if(weldtool) - weldtool.dropInto(loc) - weldtool = null - if(igniter) - igniter.dropInto(loc) - igniter = null - if(beaker) - beaker.dropInto(loc) - beaker = null - new /obj/item/stack/material/rods(get_turf(src)) - qdel(src) - return - - if(isScrewdriver(W) && igniter && !lit && !complete) - status = !status - to_chat(user, SPAN_NOTICE("\The [igniter] is now [status ? "secured" : "unsecured"]!")) - update_icon() - return - - if(isigniter(W)) - var/obj/item/device/assembly/igniter/I = W - if(I.secured) return - if(igniter) return - if(!user.unEquip(I, src)) - return - igniter = I - update_icon() - return - - if (istype(W, /obj/item/reagent_containers) && W.is_open_container() && (W.w_class <= max_beaker)) - if(user.unEquip(W, src)) - if(beaker) - beaker.forceMove(get_turf(src)) - to_chat(user, SPAN_NOTICE("You swap the fuel container in [src]!")) - beaker = W - update_icon() - return - - ..() - return - - -/obj/item/flamethrower/attack_self(mob/user as mob) - toggle_igniter(user) - -/obj/item/flamethrower/proc/toggle_igniter(mob/user) - if(!beaker) - to_chat(user, SPAN_NOTICE("Attach a fuel container first!")) - return - if(!status) - to_chat(user,SPAN_NOTICE("Secure the igniter first!")) - return - to_chat(user, SPAN_NOTICE("You [lit ? "extinguish" : "ignite"] [src]!")) - lit = !lit - if(lit) - playsound(loc, 'sound/items/welderactivate.ogg', 50, TRUE) - START_PROCESSING(SSobj, src) - else - playsound(loc, 'sound/items/welderdeactivate.ogg', 50, TRUE) - STOP_PROCESSING(SSobj,src) - if(lit) - set_light(0.7, 1, 2.5, l_color = COLOR_ORANGE) - else - set_light(0) - - update_icon() - -#define REQUIRED_POWER_TO_FIRE_FLAMETHROWER 10 -#define FLAMETHROWER_POWER_MULTIPLIER 1.5 -#define FLAMETHROWER_RELEASE_AMOUNT 5 - -/obj/item/flamethrower/proc/flame_turf(list/turflist) - if(!beaker) - return - if(!lit || operating) return - - var/length = LAZYLEN(turflist) - if(length < 1) - return - turflist.len = min(length, range) - - var/power = 0 - var/datum/reagents/beaker_reagents = beaker.reagents - var/datum/reagents/my_fraction = new(beaker_reagents.maximum_volume, src) - beaker_reagents.trans_to_holder(my_fraction, FLAMETHROWER_RELEASE_AMOUNT * turflist.len, safety = TRUE) - var/fire_colour = null - var/highest_amount = 0 - for(var/datum/reagent/R in beaker_reagents.reagent_list) - power += R.accelerant_quality * FLAMETHROWER_POWER_MULTIPLIER //Flamethrowers inflate flammability compared to a pool of fuel - if(R.volume > highest_amount && R.accelerant_quality > 0) - highest_amount = R.volume - fire_colour = R.fire_colour - - if(power < REQUIRED_POWER_TO_FIRE_FLAMETHROWER) - audible_message(SPAN_DANGER("The [src] sputters.")) - playsound(src, 'sound/weapons/guns/flamethrower_empty.ogg', 50, TRUE, -3) - return - playsound(src, pick('sound/weapons/guns/flamethrower1.ogg','sound/weapons/guns/flamethrower2.ogg','sound/weapons/guns/flamethrower3.ogg' ), 50, TRUE, -3) - - operating = TRUE //anti-spam tool, is unset when the flame projectile goes away - for(var/turf/T in turflist) - if(T.density || istype(T, /turf/space)) - break - if(!previousturf && length(turflist)>1) - previousturf = get_turf(src) - continue //so we don't burn the tile we be standin on - if(previousturf && (!T.CanPass(null, previousturf, 0,0) || !previousturf.CanPass(null, T, 0,0))) - break - previousturf = T - - //Consume part of our fuel to create a fire spot - T.IgniteTurf(power / turflist.len, fire_colour) - T.hotspot_expose((power*3) + 380,500) - my_fraction.remove_any(FLAMETHROWER_RELEASE_AMOUNT) - sleep(1) - previousturf = null - operating = FALSE - if(beaker) //In the event we earlied out that means some fuel goes back into tank - if(my_fraction.total_volume > 0) - my_fraction.trans_to_holder(beaker_reagents, my_fraction.total_volume, safety = TRUE) - QDEL_NULL(my_fraction) - -#undef REQUIRED_POWER_TO_FIRE_FLAMETHROWER -#undef FLAMETHROWER_POWER_MULTIPLIER - -/obj/item/flamethrower/full - icon = 'icons/obj/flamethrower_new.dmi' - item_state = "prebuilt_flamethrower_0" - complete = TRUE - - item_icons = list( - slot_l_hand_str = 'icons/obj/flamethrower_new.dmi', - slot_r_hand_str = 'icons/obj/flamethrower_new.dmi', - ) - - item_state_slots = list( - slot_l_hand_str = "humanoid body-slot_l_hand_0", - slot_r_hand_str = "humanoid body-slot_r_hand_0", - ) - -/obj/item/flamethrower/full/on_update_icon() - . = ..() - item_state_slots[slot_l_hand_str] = "humanoid body-slot_l_hand_[lit]" - item_state_slots[slot_r_hand_str] = "humanoid body-slot_r_hand_[lit]" - -/obj/item/flamethrower/full/Initialize() - . = ..() - weldtool = new /obj/item/weldingtool(src) - weldtool.status = 0 - igniter = new /obj/item/device/assembly/igniter(src) - igniter.secured = 0 - status = 1 - update_icon() - -/obj/item/flamethrower/full/loaded/Initialize() - beaker = new /obj/item/reagent_containers/glass/beaker/insulated/large(src) - beaker.reagents.add_reagent(/datum/reagent/napalm, 120) - . = ..() diff --git a/code/game/objects/items/weapons/gift_wrappaper.dm b/code/game/objects/items/weapons/gift_wrappaper.dm deleted file mode 100644 index d9df726ca0c2e..0000000000000 --- a/code/game/objects/items/weapons/gift_wrappaper.dm +++ /dev/null @@ -1,212 +0,0 @@ -/* Gifts and wrapping paper - * Contains: - * Gifts - * Wrapping Paper - */ - -/* - * Gifts - */ -/obj/item/a_gift - name = "gift" - desc = "PRESENTS!!!! eek!" - icon = 'icons/obj/items.dmi' - icon_state = "gift1" - item_state = "gift1" - randpixel = 10 - -/obj/item/a_gift/New() - ..() - if(w_class > 0 && w_class < ITEM_SIZE_HUGE) - icon_state = "gift[w_class]" - else - icon_state = "gift[pick(1, 2, 3)]" - return - -/obj/item/a_gift/ex_act() - qdel(src) - return - -/obj/effect/spresent/relaymove(mob/user as mob) - if (user.stat) - return - to_chat(user, "You can't move.") - -/obj/effect/spresent/attackby(obj/item/W as obj, mob/user as mob) - ..() - - if(!isWirecutter(W)) - to_chat(user, "I need wirecutters for that.") - return - - to_chat(user, "You cut open the present.") - - for(var/mob/M in src) //Should only be one but whatever. - M.dropInto(loc) - if (M.client) - M.client.eye = M.client.mob - M.client.perspective = MOB_PERSPECTIVE - - qdel(src) - -/obj/item/a_gift/attack_self(mob/M as mob) - var/gift_type = pick( - /obj/item/storage/wallet, - /obj/item/storage/photo_album, - /obj/item/storage/box/snappops, - /obj/item/storage/fancy/crayons, - /obj/item/storage/backpack/holding, - /obj/item/storage/belt/champion, - /obj/item/pickaxe/silver, - /obj/item/pen/invisible, - /obj/item/lipstick/random, - /obj/item/grenade/smokebomb, - /obj/item/carvable/corncob, - /obj/item/contraband/poster, - /obj/item/book/manual/barman_recipes, - /obj/item/book/manual/chef_recipes, - /obj/item/bikehorn, - /obj/item/beach_ball, - /obj/item/beach_ball/holoball, - /obj/item/toy/water_balloon, - /obj/item/toy/blink, - /obj/item/toy/crossbow, - /obj/item/gun/projectile/revolver/capgun, - /obj/item/toy/katana, - /obj/item/toy/prize/deathripley, - /obj/item/toy/prize/durand, - /obj/item/toy/prize/fireripley, - /obj/item/toy/prize/gygax, - /obj/item/toy/prize/honk, - /obj/item/toy/prize/marauder, - /obj/item/toy/prize/mauler, - /obj/item/toy/prize/odysseus, - /obj/item/toy/prize/phazon, - /obj/item/toy/prize/powerloader, - /obj/item/toy/prize/seraph, - /obj/item/toy/spinningtoy, - /obj/item/toy/sword, - /obj/item/reagent_containers/food/snacks/grown/ambrosiadeus, - /obj/item/reagent_containers/food/snacks/grown/ambrosiavulgaris, - /obj/item/device/paicard, - /obj/item/device/synthesized_instrument/violin, - /obj/item/storage/belt/utility/full, - /obj/item/clothing/accessory/horrible, - /obj/item/storage/box/large/foam_gun, - /obj/item/storage/box/large/foam_gun/burst, - /obj/item/storage/box/large/foam_gun/revolver) - - if(!ispath(gift_type,/obj/item)) return - - var/obj/item/I = new gift_type(M) - M.put_in_hands(I) - I.add_fingerprint(M) - qdel(src) - -/* - * Wrapping Paper and Gifts - */ - -/obj/item/gift - name = "gift" - desc = "A wrapped item." - icon = 'icons/obj/items.dmi' - icon_state = "gift3" - var/size = 3.0 - var/obj/item/gift = null - item_state = "gift" - w_class = ITEM_SIZE_HUGE - -/obj/item/gift/New(newloc, obj/item/wrapped = null) - ..(newloc) - - if(istype(wrapped)) - gift = wrapped - w_class = gift.w_class - gift.forceMove(src) - - //a good example of where we don't want to use the w_class defines - switch(gift.w_class) - if(1) icon_state = "gift1" - if(2) icon_state = "gift1" - if(3) icon_state = "gift2" - if(4) icon_state = "gift2" - if(5) icon_state = "gift3" - -/obj/item/gift/attack_self(mob/user as mob) - user.drop_item() - if(src.gift) - user.put_in_active_hand(gift) - src.gift.add_fingerprint(user) - else - to_chat(user, "The gift was empty!") - qdel(src) - return - -/obj/item/wrapping_paper - name = "wrapping paper" - desc = "You can use this to wrap items in." - icon = 'icons/obj/items.dmi' - icon_state = "wrap_paper" - var/amount = 2.5*BASE_STORAGE_COST(ITEM_SIZE_HUGE) - -/obj/item/wrapping_paper/attackby(obj/item/W as obj, mob/user as mob) - ..() - if (!( locate(/obj/structure/table, src.loc) )) - to_chat(user, "You MUST put the paper on a table!") - if (W.w_class < ITEM_SIZE_HUGE) - if(isWirecutter(user.l_hand) || isWirecutter(user.r_hand)) - var/a_used = W.get_storage_cost() - if (a_used == ITEM_SIZE_NO_CONTAINER) - to_chat(user, "You can't wrap that!")//no gift-wrapping lit welders - - return - if (src.amount < a_used) - to_chat(user, "You need more paper!") - return - else - if(istype(W, /obj/item/smallDelivery) || istype(W, /obj/item/gift)) //No gift wrapping gifts! - return - - if(user.unEquip(W)) - var/obj/item/gift/G = new /obj/item/gift( src.loc, W ) - G.add_fingerprint(user) - W.add_fingerprint(user) - src.amount -= a_used - - if (src.amount <= 0) - new /obj/item/c_tube( src.loc ) - qdel(src) - return - else - to_chat(user, "You need scissors!") - else - to_chat(user, "The object is FAR too large!") - return - - -/obj/item/wrapping_paper/examine(mob/user, distance) - . = ..() - if(distance <= 1) - to_chat(user, text("There is about [] square units of paper left!", src.amount)) - -/obj/item/wrapping_paper/attack(mob/target as mob, mob/user as mob) - if (!istype(target, /mob/living/carbon/human)) return - var/mob/living/carbon/human/H = target - - if (istype(H.wear_suit, /obj/item/clothing/suit/straight_jacket) || H.stat) - if (src.amount > 2) - var/obj/effect/spresent/present = new /obj/effect/spresent (H.loc) - src.amount -= 2 - - if (H.client) - H.client.perspective = EYE_PERSPECTIVE - H.client.eye = present - - H.forceMove(present) - admin_attack_log(user, H, "Used \a [src] to wrap their victim", "Was wrapepd with \a [src]", "used \the [src] to wrap") - - else - to_chat(user, "You need more paper.") - else - to_chat(user, "They are moving around too much. A straightjacket would help.") diff --git a/code/game/objects/items/weapons/grenades/anti_photon_grenade.dm b/code/game/objects/items/weapons/grenades/anti_photon_grenade.dm deleted file mode 100644 index a4c2f974a4b5c..0000000000000 --- a/code/game/objects/items/weapons/grenades/anti_photon_grenade.dm +++ /dev/null @@ -1,18 +0,0 @@ -/obj/item/grenade/anti_photon - desc = "An experimental device for temporarily removing light in a limited area." - name = "photon disruption grenade" - icon_state = "emp" - item_state = "emp" - det_time = 20 - origin_tech = list(TECH_BLUESPACE = 4, TECH_MATERIAL = 4) - -/obj/item/grenade/anti_photon/detonate(mob/living/user) - playsound(src.loc, 'sound/effects/phasein.ogg', 50, 1, 5) - set_light(-1, 6, 10, 2, "#ffffff") - addtimer(CALLBACK(src, .proc/finish), rand(20 SECONDS, 29 SECONDS)) - -/obj/item/grenade/anti_photon/proc/finish() - set_light(1, 1, 10, 2, "#[num2hex(rand(64,255))][num2hex(rand(64,255))][num2hex(rand(64,255))]") - playsound(loc, 'sound/effects/bang.ogg', 50, 1, 5) - sleep(1 SECOND) - qdel(src) diff --git a/code/game/objects/items/weapons/grenades/chem_grenade.dm b/code/game/objects/items/weapons/grenades/chem_grenade.dm deleted file mode 100644 index 304f45ef101ac..0000000000000 --- a/code/game/objects/items/weapons/grenades/chem_grenade.dm +++ /dev/null @@ -1,312 +0,0 @@ -/obj/item/grenade/chem_grenade - name = "grenade casing" - icon_state = "chemg" - item_state = "grenade" - desc = "A hand made chemical grenade." - w_class = ITEM_SIZE_SMALL - force = 2.0 - det_time = null - unacidable = TRUE - var/stage = 0 - var/state = 0 - var/path = 0 - var/obj/item/device/assembly_holder/detonator = null - var/list/beakers = new/list() - var/list/allowed_containers = list(/obj/item/reagent_containers/glass/beaker, /obj/item/reagent_containers/glass/bottle) - var/affected_area = 3 - - -/obj/item/grenade/chem_grenade/Initialize() - . = ..() - create_reagents(1000) - - -/obj/item/grenade/chem_grenade/attack_self(mob/user) - if(!stage || stage==1) - if(detonator) - detonator.detached() - usr.put_in_hands(detonator) - detonator=null - det_time = null - stage=0 - icon_state = initial(icon_state) - else if(beakers.len) - for(var/obj/B in beakers) - if(istype(B)) - beakers -= B - user.put_in_hands(B) - SetName("unsecured grenade with [beakers.len] containers[detonator?" and detonator":""]") - if(stage > 1 && !active && clown_check(user)) - to_chat(user, "You prime \the [name]!") - log_and_message_admins("has primed \a [src].") - activate() - add_fingerprint(user) - if(iscarbon(user)) - var/mob/living/carbon/C = user - C.throw_mode_on() - - -/obj/item/grenade/chem_grenade/attackby(obj/item/W, mob/user) - if(istype(W,/obj/item/device/assembly_holder) && (!stage || stage==1) && path != 2) - var/obj/item/device/assembly_holder/det = W - if(istype(det.a_left,det.a_right.type) || (!isigniter(det.a_left) && !isigniter(det.a_right))) - to_chat(user, "Assembly must contain one igniter.") - return - if(!det.secured) - to_chat(user, "Assembly must be secured with screwdriver.") - return - if(!user.unEquip(det, src)) - return - path = 1 - log_and_message_admins("has attached \a [W] to \the [src].") - to_chat(user, "You add [W] to the metal casing.") - playsound(loc, 'sound/items/Screwdriver2.ogg', 25, -3) - detonator = det - if(istimer(detonator.a_left)) - var/obj/item/device/assembly/timer/T = detonator.a_left - det_time = 10*T.time - if(istimer(detonator.a_right)) - var/obj/item/device/assembly/timer/T = detonator.a_right - det_time = 10*T.time - icon_state = initial(icon_state) +"_ass" - SetName("unsecured grenade with [beakers.len] containers[detonator?" and detonator":""]") - stage = 1 - else if(isScrewdriver(W) && path != 2) - if(stage == 1) - path = 1 - if(beakers.len) - to_chat(user, "You lock the assembly.") - SetName("grenade") - else -// to_chat(user, "You need to add at least one beaker before locking the assembly.") - to_chat(user, "You lock the empty assembly.") - SetName("fake grenade") - playsound(loc, 'sound/items/Screwdriver.ogg', 25, -3) - icon_state = initial(icon_state) +"_locked" - stage = 2 - else if(stage == 2) - if(active && prob(95)) - to_chat(user, "You trigger the assembly!") - detonate() - return - else - to_chat(user, "You unlock the assembly.") - playsound(loc, 'sound/items/Screwdriver.ogg', 25, -3) - SetName("unsecured grenade with [beakers.len] containers[detonator?" and detonator":""]") - icon_state = initial(icon_state) + (detonator?"_ass":"") - stage = 1 - active = 0 - else if(is_type_in_list(W, allowed_containers) && (!stage || stage==1) && path != 2) - path = 1 - if(beakers.len == 2) - to_chat(user, "The grenade can not hold more containers.") - return - else - if(W.reagents.total_volume) - if(!user.unEquip(W, src)) - return - to_chat(user, "You add \the [W] to the assembly.") - beakers += W - stage = 1 - SetName("unsecured grenade with [beakers.len] containers[detonator?" and detonator":""]") - else - to_chat(user, "\The [W] is empty.") - - -/obj/item/grenade/chem_grenade/activate(mob/user) - if(active) return - if(detonator) - if(!isigniter(detonator.a_left)) - detonator.a_left.activate() - active = 1 - if(!isigniter(detonator.a_right)) - detonator.a_right.activate() - active = 1 - if(active) - icon_state = initial(icon_state) + "_active" - if(user) - log_and_message_admins("has primed \a [src].") - return - - -/obj/item/grenade/chem_grenade/proc/primed(primed = TRUE) - if(active) - icon_state = initial(icon_state) + (primed?"_primed":"_active") - - -/obj/item/grenade/chem_grenade/detonate(mob/living/user) - if(!stage || stage<2) return - var/has_reagents = 0 - for(var/obj/item/reagent_containers/glass/G in beakers) - if(G.reagents.total_volume) has_reagents = 1 - active = 0 - if(!has_reagents) - icon_state = initial(icon_state) +"_locked" - playsound(loc, 'sound/items/Screwdriver2.ogg', 50, 1) - spawn(0) //Otherwise det_time is erroneously set to 0 after this - if(istimer(detonator.a_left)) //Make sure description reflects that the timer has been reset - var/obj/item/device/assembly/timer/T = detonator.a_left - det_time = 10*T.time - if(istimer(detonator.a_right)) - var/obj/item/device/assembly/timer/T = detonator.a_right - det_time = 10*T.time - return - playsound(loc, 'sound/effects/bamf.ogg', 50, 1) - for(var/obj/item/reagent_containers/glass/G in beakers) - G.reagents.trans_to_obj(src, G.reagents.total_volume) - if(src.reagents.total_volume) //The possible reactions didnt use up all reagents. - var/datum/effect/effect/system/steam_spread/steam = new /datum/effect/effect/system/steam_spread() - steam.set_up(10, 0, get_turf(src)) - steam.attach(src) - steam.start() - for(var/atom/A in view(affected_area, loc)) - if( A == src ) - continue - reagents.touch(A) - if(istype(loc, /mob/living/carbon)) //drop dat grenade if it goes off in your hand - var/mob/living/carbon/C = loc - C.drop_from_inventory(src) - C.throw_mode_off() - set_invisibility(INVISIBILITY_MAXIMUM) //Why am i doing this? - spawn(50) //To make sure all reagents can work - qdel(src) //correctly before deleting the grenade. - - -/obj/item/grenade/chem_grenade/examine(mob/user) - . = ..() - if(detonator) - to_chat(user, "With attached [detonator.name]") - - -/obj/item/grenade/chem_grenade/large - name = "large chem grenade" - desc = "An oversized grenade that affects a larger area." - icon_state = "large_grenade" - allowed_containers = list(/obj/item/reagent_containers/glass) - origin_tech = list(TECH_COMBAT = 3, TECH_MATERIAL = 3) - affected_area = 4 - - -/obj/item/grenade/chem_grenade/metalfoam - name = "metal-foam grenade" - desc = "Used for emergency sealing of air breaches." - path = 1 - stage = 2 - - -/obj/item/grenade/chem_grenade/metalfoam/Initialize() - . = ..() - var/obj/item/reagent_containers/glass/beaker/B1 = new(src) - var/obj/item/reagent_containers/glass/beaker/B2 = new(src) - B1.reagents.add_reagent(/datum/reagent/aluminium, 30) - B2.reagents.add_reagent(/datum/reagent/foaming_agent, 10) - B2.reagents.add_reagent(/datum/reagent/acid/polyacid, 10) - detonator = new/obj/item/device/assembly_holder/timer_igniter(src) - beakers += B1 - beakers += B2 - icon_state = initial(icon_state) +"_locked" - - -/obj/item/grenade/chem_grenade/incendiary - name = "incendiary grenade" - desc = "Used for clearing rooms of living things." - path = 1 - stage = 2 - - -/obj/item/grenade/chem_grenade/incendiary/Initialize() - . = ..() - var/obj/item/reagent_containers/glass/beaker/B1 = new(src) - var/obj/item/reagent_containers/glass/beaker/B2 = new(src) - B1.reagents.add_reagent(/datum/reagent/aluminium, 15) - B1.reagents.add_reagent(/datum/reagent/fuel,20) - B2.reagents.add_reagent(/datum/reagent/toxin/phoron, 15) - B2.reagents.add_reagent(/datum/reagent/acid, 15) - B1.reagents.add_reagent(/datum/reagent/fuel,20) - detonator = new/obj/item/device/assembly_holder/timer_igniter(src) - beakers += B1 - beakers += B2 - icon_state = initial(icon_state) +"_locked" - - -/obj/item/grenade/chem_grenade/antiweed - name = "weedkiller grenade" - desc = "Used for purging large areas of invasive plant species. Contents under pressure. Do not directly inhale contents." - path = 1 - stage = 2 - - -/obj/item/grenade/chem_grenade/antiweed/Initialize() - . = ..() - var/obj/item/reagent_containers/glass/beaker/B1 = new(src) - var/obj/item/reagent_containers/glass/beaker/B2 = new(src) - B1.reagents.add_reagent(/datum/reagent/toxin/plantbgone, 25) - B1.reagents.add_reagent(/datum/reagent/potassium, 25) - B2.reagents.add_reagent(/datum/reagent/phosphorus, 25) - B2.reagents.add_reagent(/datum/reagent/sugar, 25) - detonator = new/obj/item/device/assembly_holder/timer_igniter(src) - beakers += B1 - beakers += B2 - icon_state = "grenade" - - -/obj/item/grenade/chem_grenade/cleaner - name = "cleaner grenade" - desc = "BLAM!-brand foaming space cleaner. In a special applicator for rapid cleaning of wide areas." - stage = 2 - path = 1 - -/obj/item/grenade/chem_grenade/cleaner/Initialize() - . = ..() - var/obj/item/reagent_containers/glass/beaker/B1 = new(src) - var/obj/item/reagent_containers/glass/beaker/B2 = new(src) - B1.reagents.add_reagent(/datum/reagent/surfactant, 40) - B2.reagents.add_reagent(/datum/reagent/water, 40) - B2.reagents.add_reagent(/datum/reagent/space_cleaner, 10) - detonator = new/obj/item/device/assembly_holder/timer_igniter(src) - beakers += B1 - beakers += B2 - icon_state = initial(icon_state) +"_locked" - - -/obj/item/grenade/chem_grenade/teargas - name = "tear gas grenade" - desc = "Concentrated Capsaicin. Contents under pressure. Use with caution." - stage = 2 - path = 1 - - -/obj/item/grenade/chem_grenade/teargas/Initialize() - . = ..() - var/obj/item/reagent_containers/glass/beaker/large/B1 = new(src) - var/obj/item/reagent_containers/glass/beaker/large/B2 = new(src) - B1.reagents.add_reagent(/datum/reagent/phosphorus, 40) - B1.reagents.add_reagent(/datum/reagent/potassium, 40) - B1.reagents.add_reagent(/datum/reagent/capsaicin/condensed, 40) - B2.reagents.add_reagent(/datum/reagent/sugar, 40) - B2.reagents.add_reagent(/datum/reagent/capsaicin/condensed, 80) - detonator = new/obj/item/device/assembly_holder/timer_igniter(src) - beakers += B1 - beakers += B2 - icon_state = initial(icon_state) +"_locked" - - -/obj/item/grenade/chem_grenade/water - name = "water grenade" - desc = "A water grenade, generally used for firefighting." - icon_state = "waterg" - item_state = "waterg" - stage = 2 - path = 1 - - -/obj/item/grenade/chem_grenade/water/Initialize() - . = ..() - var/obj/item/reagent_containers/glass/beaker/B1 = new(src) - var/obj/item/reagent_containers/glass/beaker/B2 = new(src) - B1.reagents.add_reagent(/datum/reagent/water, 40) - B2.reagents.add_reagent(/datum/reagent/water, 40) - detonator = new/obj/item/device/assembly_holder/timer_igniter(src) - beakers += B1 - beakers += B2 - icon_state = initial(icon_state) +"_locked" diff --git a/code/game/objects/items/weapons/grenades/emgrenade.dm b/code/game/objects/items/weapons/grenades/emgrenade.dm deleted file mode 100644 index e5fa1e1a83082..0000000000000 --- a/code/game/objects/items/weapons/grenades/emgrenade.dm +++ /dev/null @@ -1,24 +0,0 @@ -/obj/item/grenade/empgrenade - name = "classic emp grenade" - icon_state = "emp" - item_state = "empgrenade" - origin_tech = list(TECH_MATERIAL = 2, TECH_MAGNET = 3) - -/obj/item/grenade/empgrenade/detonate() - ..() - if(empulse(src, 2, 5)) - qdel(src) - return - -/obj/item/grenade/empgrenade/low_yield - name = "low yield emp grenade" - desc = "A weaker variant of the classic emp grenade." - icon_state = "lyemp" - item_state = "lyempgrenade" - origin_tech = list(TECH_MATERIAL = 2, TECH_MAGNET = 3) - -/obj/item/grenade/empgrenade/low_yield/detonate() - ..() - if(empulse(src, 1, 3)) - qdel(src) - return diff --git a/code/game/objects/items/weapons/grenades/explosive.dm b/code/game/objects/items/weapons/grenades/explosive.dm deleted file mode 100644 index 11406f7807d48..0000000000000 --- a/code/game/objects/items/weapons/grenades/explosive.dm +++ /dev/null @@ -1,105 +0,0 @@ -/obj/item/projectile/bullet/pellet/fragment - damage = 30 - range_step = 2 //controls damage falloff with distance. projectiles lose a "pellet" each time they travel this distance. Can be a non-integer. - - base_spread = 0 //causes it to be treated as a shrapnel explosion instead of cone - spread_step = 40 - - silenced = TRUE - fire_sound = null - no_attack_log = TRUE - muzzle_type = null - embed = TRUE - -/obj/item/projectile/bullet/pellet/fragment/strong - damage = 60 - -/obj/item/grenade/frag - name = "fragmentation grenade" - desc = "A military fragmentation grenade, designed to explode in a deadly shower of fragments, while avoiding massive structural damage." - icon_state = "frggrenade" - - var/list/fragment_types = list(/obj/item/projectile/bullet/pellet/fragment = 1) - var/num_fragments = 72 //total number of fragments produced by the grenade - var/explosion_size = 2 //size of the center explosion - - //The radius of the circle used to launch projectiles. Lower values mean less projectiles are used but if set too low gaps may appear in the spread pattern - var/spread_range = 7 //leave as is, for some reason setting this higher makes the spread pattern have gaps close to the epicenter - -/obj/item/grenade/frag/detonate(mob/living/user) - ..() - - var/turf/O = get_turf(src) - if(!O) return - - if(explosion_size) - on_explosion(O) - - src.fragmentate(O, num_fragments, spread_range, fragment_types) - - qdel(src) - - -/obj/proc/fragmentate(var/turf/T=get_turf(src), var/fragment_number = 30, var/spreading_range = 5, var/list/fragtypes=list(/obj/item/projectile/bullet/pellet/fragment)) - set waitfor = 0 - var/list/target_turfs = getcircle(T, spreading_range) - var/fragments_per_projectile = round(fragment_number/target_turfs.len) - - for(var/turf/O in target_turfs) - sleep(0) - var/fragment_type = pickweight(fragtypes) - var/obj/item/projectile/bullet/pellet/fragment/P = new fragment_type(T) - P.pellets = fragments_per_projectile - P.shot_from = src.name - P.hitchance_mod = 50 - - P.launch(O) - - // Handle damaging whatever the grenade's inside. Currently only checks for mobs. - if (loc != get_turf(src)) - var/recursion_limit = 3 // Prevent infinite loops - var/atom/current_check = src - while (recursion_limit) - current_check = current_check.loc - if (isturf(current_check)) - break - if (ismob(current_check)) - P.attack_mob(current_check, 0, 25) - recursion_limit-- - - //Make sure to hit any mobs in the source turf - for(var/mob/living/M in T) - //lying on a frag grenade while the grenade is on the ground causes you to absorb most of the shrapnel. - //you will most likely be dead, but others nearby will be spared the fragments that hit you instead. - if(M.lying && isturf(src.loc)) - P.attack_mob(M, 0, 5) - else - P.attack_mob(M, 0, 50) - -/obj/item/grenade/frag/proc/on_explosion(var/turf/O) - if(explosion_size) - explosion(O, -1, -1, explosion_size, round(explosion_size/2), 0) - -/obj/item/grenade/frag/shell - name = "fragmentation grenade" - desc = "A light fragmentation grenade, designed to be fired from a launcher. It can still be activated and thrown by hand if necessary." - icon_state = "fragshell" - - num_fragments = 50 //less powerful than a regular frag grenade - -/obj/item/grenade/frag/high_yield - name = "fragmentation bomb" - desc = "Larger and heavier than a standard fragmentation grenade, this device is extremely dangerous. It cannot be thrown as far because of its weight." - icon_state = "frag" - - w_class = ITEM_SIZE_NORMAL - throw_speed = 3 - throw_range = 5 //heavy, can't be thrown as far - - fragment_types = list(/obj/item/projectile/bullet/pellet/fragment=1,/obj/item/projectile/bullet/pellet/fragment/strong=4) - num_fragments = 144 //total number of fragments produced by the grenade - explosion_size = 3 - -/obj/item/grenade/frag/high_yield/on_explosion(var/turf/O) - if(explosion_size) - explosion(O, -1, round(explosion_size/2), explosion_size, round(explosion_size/2), 0) //has a chance to blow a hole in the floor diff --git a/code/game/objects/items/weapons/grenades/flashbang.dm b/code/game/objects/items/weapons/grenades/flashbang.dm deleted file mode 100644 index 94793a8a15c6b..0000000000000 --- a/code/game/objects/items/weapons/grenades/flashbang.dm +++ /dev/null @@ -1,154 +0,0 @@ -/obj/item/grenade/flashbang - name = "flashbang" - desc = "A grenade designed to blind, stun and disorient by means of an extremely bright flash and loud explosion." - icon_state = "flashbang" - item_state = "flashbang" - origin_tech = list(TECH_MATERIAL = 2, TECH_COMBAT = 1) - var/banglet = 0 - -/obj/item/grenade/flashbang/detonate(mob/living/user) - ..() - var/list/victims = list() - var/list/objs = list() - var/turf/T = get_turf(src) - get_mobs_and_objs_in_view_fast(T, 7, victims, objs) - for(var/mob/living/carbon/M in victims) - bang(T, M) - - for(var/obj/effect/blob/B in objs) //Blob damage here - var/damage = round(30/(get_dist(B,T)+1)) - B.damage_health(damage, DAMAGE_SHOCK) - - new/obj/effect/sparks(src.loc) - new/obj/effect/effect/smoke/illumination(src.loc, 5, range=30, power=1, color="#ffffff") - qdel(src) - -/obj/item/grenade/flashbang/proc/bang(var/turf/T , var/mob/living/carbon/M) // Added a new proc called 'bang' that takes a location and a person to be banged. - to_chat(M, "BANG")// Called during the loop that bangs people in lockers/containers and when banging - playsound(src.loc, 'sound/effects/bang.ogg', 50, 1, 30) // people in normal view. Could theroetically be called during other explosions. - // -- Polymorph - - //Checking for protections - var/eye_safety = 0 - var/ear_safety = 0 - if(iscarbon(M)) - eye_safety = M.eyecheck() - if(ishuman(M)) - if(M.get_sound_volume_multiplier() < 0.2) - ear_safety += 2 - if(MUTATION_HULK in M.mutations) - ear_safety += 1 - var/mob/living/carbon/human/H = M - if(istype(H.head, /obj/item/clothing/head/helmet)) - ear_safety += 1 - - //Flashing everyone - M.flash_eyes(FLASH_PROTECTION_MODERATE) - if(eye_safety < FLASH_PROTECTION_MODERATE) - M.Stun(2) - M.confused += 5 - - //Now applying sound - if(ear_safety) - if(ear_safety < 2 && get_dist(M, T) <= 2) - M.Stun(1) - M.confused += 3 - - else if(get_dist(M, T) <= 2) - M.Stun(3) - M.confused += 8 - M.ear_damage += rand(0, 5) - M.ear_deaf = max(M.ear_deaf,15) - - else if(get_dist(M, T) <= 5) - M.Stun(2) - M.confused += 5 - M.ear_damage += rand(0, 3) - M.ear_deaf = max(M.ear_deaf,10) - - else - M.Stun(1) - M.confused += 3 - M.ear_damage += rand(0, 1) - M.ear_deaf = max(M.ear_deaf,5) - - //This really should be in mob not every check - if (M.ear_damage >= 15) - to_chat(M, "Your ears start to ring badly!") - else - if (M.ear_damage >= 5) - to_chat(M, "Your ears start to ring!") - - -/obj/item/grenade/flashbang/instant/Initialize() - . = ..() - name = "arcane energy" - icon_state = null - item_state = null - detonate() - -/obj/item/grenade/flashbang/clusterbang//Created by Polymorph, fixed by Sieve - desc = "Use of this weapon may constiute a war crime in your area, consult your local captain." - name = "clusterbang" - icon = 'icons/obj/grenade.dmi' - icon_state = "clusterbang" - -/obj/item/grenade/flashbang/clusterbang/detonate(mob/living/user) - var/numspawned = rand(4,8) - var/again = 0 - for(var/more = numspawned,more > 0,more--) - if(prob(35)) - again++ - numspawned -- - - for(,numspawned > 0, numspawned--) - new /obj/item/grenade/flashbang/cluster(src.loc)//Launches flashbangs - playsound(src.loc, 'sound/weapons/armbomb.ogg', 75, 1, -3) - - for(,again > 0, again--) - new /obj/item/grenade/flashbang/clusterbang/segment(src.loc)//Creates a 'segment' that launches a few more flashbangs - playsound(src.loc, 'sound/weapons/armbomb.ogg', 75, 1, -3) - qdel(src) - return - -/obj/item/grenade/flashbang/clusterbang/segment - desc = "A smaller segment of a clusterbang. Better run." - name = "clusterbang segment" - icon = 'icons/obj/grenade.dmi' - icon_state = "clusterbang_segment" - -/obj/item/grenade/flashbang/clusterbang/segment/New()//Segments should never exist except part of the clusterbang, since these immediately 'do their thing' and asplode - icon_state = "clusterbang_segment_active" - active = 1 - banglet = 1 - var/stepdist = rand(1,4)//How far to step - var/temploc = src.loc//Saves the current location to know where to step away from - walk_away(src,temploc,stepdist)//I must go, my people need me - var/dettime = rand(15,60) - spawn(dettime) - detonate() - ..() - -/obj/item/grenade/flashbang/clusterbang/segment/detonate(mob/living/user) - var/numspawned = rand(4,8) - for(var/more = numspawned,more > 0,more--) - if(prob(35)) - numspawned -- - - for(,numspawned > 0, numspawned--) - new /obj/item/grenade/flashbang/cluster(src.loc) - playsound(src.loc, 'sound/weapons/armbomb.ogg', 75, 1, -3) - qdel(src) - return - -/obj/item/grenade/flashbang/cluster/New()//Same concept as the segments, so that all of the parts don't become reliant on the clusterbang - icon_state = "flashbang_active" - active = 1 - banglet = 1 - var/stepdist = rand(1,3) - var/temploc = src.loc - walk_away(src,temploc,stepdist) - var/dettime = rand(15,60) - spawn(dettime) - detonate() - ..() diff --git a/code/game/objects/items/weapons/grenades/grenade.dm b/code/game/objects/items/weapons/grenades/grenade.dm deleted file mode 100644 index 897be8c22d9e7..0000000000000 --- a/code/game/objects/items/weapons/grenades/grenade.dm +++ /dev/null @@ -1,86 +0,0 @@ -/obj/item/grenade - name = "grenade" - desc = "A hand held grenade, with an adjustable timer." - w_class = ITEM_SIZE_SMALL - icon = 'icons/obj/grenade.dmi' - icon_state = "grenade" - item_state = "grenade" - throw_speed = 4 - throw_range = 20 - obj_flags = OBJ_FLAG_CONDUCTIBLE - slot_flags = SLOT_BELT - var/active = 0 - var/det_time = 50 - var/fail_det_time = 5 // If you are clumsy and fail, you get this time. - var/arm_sound = 'sound/weapons/armbomb.ogg' - - -/obj/item/grenade/proc/clown_check(var/mob/living/user) - if((MUTATION_CLUMSY in user.mutations) && prob(50)) - to_chat(user, "Huh? How does this thing work?") - det_time = fail_det_time - activate(user) - add_fingerprint(user) - return 0 - return 1 - - -/obj/item/grenade/examine(mob/user, distance) - . = ..() - if(distance <= 0) - if(det_time > 1) - to_chat(user, "The timer is set to [det_time/10] seconds.") - return - if(det_time == null) - return - to_chat(user, "\The [src] is set for instant detonation.") - - -/obj/item/grenade/attack_self(mob/living/user) - if(!active) - if(clown_check(user)) - to_chat(user, "You prime \the [name]! [det_time/10] seconds!") - activate(user) - add_fingerprint(user) - if(iscarbon(user)) - var/mob/living/carbon/C = user - C.throw_mode_on() - - -/obj/item/grenade/proc/activate(mob/living/user) - if (active) - return - if (user) - msg_admin_attack("[user.name] ([user.ckey]) primed \a [src] (JMP)") - icon_state = initial(icon_state) + "_active" - active = TRUE - playsound(loc, arm_sound, 75, 0, -3) - addtimer(CALLBACK(src, .proc/detonate, user), det_time) - - -/obj/item/grenade/proc/detonate(mob/living/user) - var/turf/T = get_turf(src) - if(T) - T.hotspot_expose(700,125) - -/obj/item/grenade/attackby(obj/item/W as obj, mob/user as mob) - if(isScrewdriver(W)) - switch(det_time) - if (1) - det_time = 10 - to_chat(user, "You set the [name] for 1 second detonation time.") - if (10) - det_time = 30 - to_chat(user, "You set the [name] for 3 second detonation time.") - if (30) - det_time = 50 - to_chat(user, "You set the [name] for 5 second detonation time.") - if (50) - det_time = 1 - to_chat(user, "You set the [name] for instant detonation.") - add_fingerprint(user) - ..() - -/obj/item/grenade/attack_hand() - walk(src, null, null) - ..() \ No newline at end of file diff --git a/code/game/objects/items/weapons/grenades/light.dm b/code/game/objects/items/weapons/grenades/light.dm deleted file mode 100644 index 70f495c559fdb..0000000000000 --- a/code/game/objects/items/weapons/grenades/light.dm +++ /dev/null @@ -1,16 +0,0 @@ -/obj/item/grenade/light - name = "illumination grenade" - desc = "A grenade designed to illuminate an area without the use of a flame or electronics, regardless of the atmosphere." - icon_state = "lightgrenade" - item_state = "flashbang" - det_time = 20 - -/obj/item/grenade/light/detonate(mob/living/user) - ..() - var/lifetime = rand(2 MINUTES, 4 MINUTES) - var/light_colour = pick("#49f37c", "#fc0f29", "#599dff", "#fa7c0b", "#fef923") - - playsound(src, 'sound/effects/snap.ogg', 80, 1) - audible_message("\The [src] detonates with a sharp crack!") - set_light(1, 1, 12, 2, light_colour) - QDEL_IN(src, lifetime) \ No newline at end of file diff --git a/code/game/objects/items/weapons/grenades/prank_grenades.dm b/code/game/objects/items/weapons/grenades/prank_grenades.dm deleted file mode 100644 index 240d9cc03a1a0..0000000000000 --- a/code/game/objects/items/weapons/grenades/prank_grenades.dm +++ /dev/null @@ -1,25 +0,0 @@ -/obj/item/grenade/fake - icon_state = "frggrenade" - - -/obj/item/grenade/fake/detonate(mob/living/user) - playsound(loc, get_sfx("explosion"), 50, 1, 30) - active = FALSE - - - - -/obj/item/grenade/spawnergrenade/fake_carp - origin_tech = list(TECH_MATERIAL = 2, TECH_MAGNET = 2, TECH_BLUESPACE = 5) - spawn_type = /mob/living/simple_animal/hostile/carp/holodeck - spawn_amount = 4 - spawn_throw_range = 3 - - -/obj/item/grenade/spawnergrenade/fake_carp/AfterSpawn(mob/living/user, list/spawned) - for (var/mob/living/simple_animal/hostile/carp/holodeck/carp as anything in spawned) - carp.faction = null - carp.environment_smash = 0 - carp.destroy_surroundings = 0 - var/obj/item/weapon = carp.get_natural_weapon() - weapon.force = 0 diff --git a/code/game/objects/items/weapons/grenades/smokebomb.dm b/code/game/objects/items/weapons/grenades/smokebomb.dm deleted file mode 100644 index 7fd3a090c3757..0000000000000 --- a/code/game/objects/items/weapons/grenades/smokebomb.dm +++ /dev/null @@ -1,34 +0,0 @@ -/obj/item/grenade/smokebomb - desc = "It is set to detonate in 2 seconds." - name = "smoke bomb" - icon = 'icons/obj/grenade.dmi' - icon_state = "flashbang" - det_time = 20 - item_state = "flashbang" - slot_flags = SLOT_BELT - var/datum/effect/effect/system/smoke_spread/bad/smoke - var/smoke_times = 4 - -/obj/item/grenade/smokebomb/Destroy() - QDEL_NULL(smoke) - STOP_PROCESSING(SSobj, src) - return ..() - -/obj/item/grenade/smokebomb/detonate(mob/living/user) - playsound(src.loc, 'sound/effects/smoke.ogg', 50, 1, -3) - smoke = new /datum/effect/effect/system/smoke_spread/bad - smoke.attach(src) - smoke.set_up(10, 0, get_turf(src)) - START_PROCESSING(SSobj, src) - for(var/obj/effect/blob/B in view(8,src)) - var/damage = round(30/(get_dist(B,src)+1)) - B.damage_health(damage, DAMAGE_BURN) - B.update_icon() - QDEL_IN(src, 8 SECONDS) - -/obj/item/grenade/smokebomb/Process() - if(!QDELETED(smoke) && (smoke_times > 0)) - smoke_times-- - smoke.start() - return - return PROCESS_KILL diff --git a/code/game/objects/items/weapons/grenades/spawnergrenade.dm b/code/game/objects/items/weapons/grenades/spawnergrenade.dm deleted file mode 100644 index 7bdbf676125f5..0000000000000 --- a/code/game/objects/items/weapons/grenades/spawnergrenade.dm +++ /dev/null @@ -1,65 +0,0 @@ -/obj/item/grenade/spawnergrenade - desc = "It is set to detonate in 5 seconds. It will unleash unleash an unspecified anomaly into the vicinity." - name = "delivery grenade" - icon = 'icons/obj/grenade.dmi' - icon_state = "delivery" - item_state = "flashbang" - origin_tech = list(TECH_MATERIAL = 3, TECH_MAGNET = 4) - - /// The obj/mob path to be created when the grenade explodes. - var/spawn_type - - /// The number of spawn_type to be created when the grenade explodes. - var/spawn_amount = 1 - - /// If set, the maximum distance to toss spawned atoms when the grenade explodes. - var/spawn_throw_range - - -/obj/item/grenade/spawnergrenade/detonate(mob/living/user) - var/turf/origin = get_turf(src) - if (origin) - playsound(origin, 'sound/effects/phasein.ogg', 100, 1) - for (var/mob/living/living in viewers(origin)) - if (living.eyecheck() < FLASH_PROTECTION_MODERATE) - living.flash_eyes() - var/list/spawned = list() - var/atom/movable/movable - var/turf/target - for (var/i = spawn_amount to 1 step -1) - movable = new spawn_type (origin) - spawned += movable - if (spawn_throw_range) - target = CircularRandomTurfAround(origin, Frand(1, spawn_throw_range)) - movable.throw_at(target, spawn_throw_range, 3) - AfterSpawn(user, spawned) - qdel(src) - - -/obj/item/grenade/spawnergrenade/proc/AfterSpawn(mob/living/user, list/spawned) - return - - - - -/obj/item/grenade/spawnergrenade/viscerator - name = "viscerator grenade" - spawn_type = /mob/living/simple_animal/hostile/viscerator - spawn_amount = 5 - spawn_throw_range = 3 - - -/obj/item/grenade/spawnergrenade/viscerator/AfterSpawn(mob/living/user, list/spawned) - if (!istype(user)) - return - for (var/mob/living/simple_animal/hostile/viscerator/viscerator as anything in spawned) - viscerator.faction = user.faction - - - - -/obj/item/grenade/spawnergrenade/spesscarp - name = "carp delivery grenade" - spawn_type = /mob/living/simple_animal/hostile/carp - spawn_amount = 4 - spawn_throw_range = 3 diff --git a/code/game/objects/items/weapons/grenades/supermatter.dm b/code/game/objects/items/weapons/grenades/supermatter.dm deleted file mode 100644 index 2dc4348496c34..0000000000000 --- a/code/game/objects/items/weapons/grenades/supermatter.dm +++ /dev/null @@ -1,36 +0,0 @@ -/obj/item/grenade/supermatter - name = "supermatter grenade" - icon_state = "banana" - item_state = "emergency_engi" - origin_tech = list(TECH_BLUESPACE = 5, TECH_MAGNET = 4, TECH_ENGINEERING = 5) - arm_sound = 'sound/effects/3.wav' - var/implode_at - -/obj/item/grenade/supermatter/Destroy() - if(implode_at) - STOP_PROCESSING(SSobj, src) - . = ..() - -/obj/item/grenade/supermatter/detonate(mob/living/user) - ..() - START_PROCESSING(SSobj, src) - implode_at = world.time + 10 SECONDS - update_icon() - playsound(src, 'sound/weapons/wave.ogg', 100) - -/obj/item/grenade/supermatter/on_update_icon() - overlays.Cut() - if(implode_at) - overlays += image(icon = 'icons/obj/machines/power/fusion.dmi', icon_state = "emfield_s1") - -/obj/item/grenade/supermatter/Process() - if(!isturf(loc)) - if(ismob(loc)) - var/mob/M = loc - M.drop_from_inventory(src) - forceMove(get_turf(src)) - playsound(src, 'sound/effects/supermatter.ogg', 100) - supermatter_pull(src, world.view, STAGE_THREE) - if(world.time > implode_at) - explosion(loc, 0, 1, 3, 4) - qdel(src) diff --git a/code/game/objects/items/weapons/handcuffs.dm b/code/game/objects/items/weapons/handcuffs.dm deleted file mode 100644 index 2541ac7eea9b8..0000000000000 --- a/code/game/objects/items/weapons/handcuffs.dm +++ /dev/null @@ -1,173 +0,0 @@ -/obj/item/handcuffs - name = "handcuffs" - desc = "Use this to keep prisoners in line." - gender = PLURAL - icon = 'icons/obj/items.dmi' - icon_state = "handcuff" - obj_flags = OBJ_FLAG_CONDUCTIBLE - slot_flags = SLOT_BELT - throwforce = 5 - w_class = ITEM_SIZE_SMALL - throw_speed = 2 - throw_range = 5 - origin_tech = list(TECH_MATERIAL = 1) - matter = list(MATERIAL_STEEL = 500) - var/elastic - var/dispenser = 0 - var/breakouttime = 1200 //Deciseconds = 120s = 2 minutes - var/cuff_sound = 'sound/weapons/handcuffs.ogg' - var/cuff_type = "handcuffs" - -/obj/item/handcuffs/get_icon_state(mob/user_mob, slot) - if(slot == slot_handcuffed_str) - return "handcuff1" - if(slot == slot_legcuffed_str) - return "legcuff1" - return ..() - -/obj/item/handcuffs/attack(var/mob/living/carbon/C, var/mob/living/user) - - if(!user.IsAdvancedToolUser()) - return - - if ((MUTATION_CLUMSY in user.mutations) && prob(50)) - to_chat(user, "Uh ... how do those things work?!") - place_handcuffs(user, user) - return - - // only carbons can be handcuffed - if(istype(C)) - if(!C.handcuffed) - if (C == user) - place_handcuffs(user, user) - return - - //check for an aggressive grab (or robutts) - if(C.has_danger_grab(user)) - place_handcuffs(C, user) - else - to_chat(user, "You need to have a firm grip on [C] before you can put \the [src] on!") - else - to_chat(user, "\The [C] is already handcuffed!") - else - ..() - -/obj/item/handcuffs/proc/can_place(var/mob/target, var/mob/user) - if(user == target || istype(user, /mob/living/silicon/robot) || istype(user, /mob/living/bot)) - return 1 - else - for (var/obj/item/grab/G in target.grabbed_by) - if (G.force_danger()) - return 1 - return 0 - -/obj/item/handcuffs/proc/place_handcuffs(var/mob/living/carbon/target, var/mob/user) - playsound(src.loc, cuff_sound, 30, 1, -2) - - var/mob/living/carbon/human/H = target - if(!istype(H)) - return 0 - - if (!H.has_organ_for_slot(slot_handcuffed)) - to_chat(user, "\The [H] needs at least two wrists before you can cuff them together!") - return 0 - - if((H.gloves && H.gloves.item_flags & ITEM_FLAG_NOCUFFS) && !elastic) - to_chat(user, "\The [src] won't fit around \the [H.gloves]!") - return 0 - - user.visible_message("\The [user] is attempting to put [cuff_type] on \the [H]!") - - if(!do_after(user, 3 SECONDS, target, DO_EQUIP | DO_TARGET_UNIQUE_ACT)) - return 0 - - if(!target.has_danger_grab(user)) // victim may have resisted out of the grab in the meantime - return 0 - - var/obj/item/handcuffs/cuffs = src - if(dispenser) - cuffs = new(get_turf(user)) - else if(!user.unEquip(cuffs)) - return 0 - - admin_attack_log(user, H, "Attempted to handcuff the victim", "Was target of an attempted handcuff", "attempted to handcuff") - - user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN) - user.do_attack_animation(H) - - user.visible_message("\The [user] has put [cuff_type] on \the [H]!") - - playsound(loc, 'sound/weapons/handcuffs_finish.ogg', 30, 1, -2) // sound from infinity - - // Apply cuffs. - target.equip_to_slot(cuffs,slot_handcuffed) - return 1 - -var/global/last_chew = 0 -/mob/living/carbon/human/RestrainedClickOn(var/atom/A) - if (A != src) return ..() - if (last_chew + 26 > world.time) return - - var/mob/living/carbon/human/H = A - if (!H.handcuffed) return - if (H.a_intent != I_HURT) return - if (H.zone_sel.selecting != BP_MOUTH) return - if (H.wear_mask) return - if (istype(H.wear_suit, /obj/item/clothing/suit/straight_jacket)) return - - var/obj/item/organ/external/O = H.organs_by_name[(H.hand ? BP_L_HAND : BP_R_HAND)] - if (!O) return - - H.visible_message("\The [H] chews on \his [O.name]!", "You chew on your [O.name]!") - admin_attacker_log(H, "chewed on their [O.name]!") - - O.take_external_damage(3,0, DAMAGE_FLAG_SHARP|DAMAGE_FLAG_EDGE ,"teeth marks") - - last_chew = world.time - -/obj/item/handcuffs/cable - name = "cable restraints" - desc = "Looks like some cables tied together. Could be used to tie something up." - icon_state = "cuff_white" - breakouttime = 300 //Deciseconds = 30s - cuff_sound = 'sound/weapons/cablecuff.ogg' - cuff_type = "cable restraints" - elastic = 1 - health_max = 75 - -/obj/item/handcuffs/cable/red - color = COLOR_MAROON - -/obj/item/handcuffs/cable/yellow - color = COLOR_AMBER - -/obj/item/handcuffs/cable/blue - color = COLOR_CYAN_BLUE - -/obj/item/handcuffs/cable/green - color = COLOR_GREEN - -/obj/item/handcuffs/cable/pink - color = COLOR_PURPLE - -/obj/item/handcuffs/cable/orange - color = COLOR_ORANGE - -/obj/item/handcuffs/cable/cyan - color = COLOR_SKY_BLUE - -/obj/item/handcuffs/cable/white - color = COLOR_SILVER - -/obj/item/handcuffs/cyborg - dispenser = 1 - -/obj/item/handcuffs/cable/tape - name = "tape restraints" - desc = "DIY!" - icon_state = "tape_cross" - item_state = null - icon = 'icons/obj/bureaucracy.dmi' - breakouttime = 200 - cuff_type = "duct tape" - health_max = 50 diff --git a/code/game/objects/items/weapons/implants/implant.dm b/code/game/objects/items/weapons/implants/implant.dm deleted file mode 100644 index c6e7bd4bdc0e4..0000000000000 --- a/code/game/objects/items/weapons/implants/implant.dm +++ /dev/null @@ -1,124 +0,0 @@ -#define MALFUNCTION_TEMPORARY 1 -#define MALFUNCTION_PERMANENT 2 - - -/obj/item/implant - name = "implant" - icon = 'icons/obj/implant.dmi' - icon_state = "implant" - w_class = ITEM_SIZE_TINY - var/implanted = null - var/mob/imp_in = null - var/obj/item/organ/external/part = null - var/implant_color = "b" - var/malfunction = 0 - var/known //if advanced scanners would name these in results - var/hidden //if scanners will locate this implant at all - -/obj/item/implant/proc/trigger(emote, source) - return - -/obj/item/implant/proc/hear(message) - return - -/obj/item/implant/proc/activate() - return - -/obj/item/implant/proc/disable(var/time = 100) - if(malfunction) - return 0 - - malfunction = MALFUNCTION_TEMPORARY - addtimer(CALLBACK(src,.proc/restore),time) - return 1 - -/obj/item/implant/proc/restore() - if(malfunction == MALFUNCTION_PERMANENT || !malfunction) - return 0 - - malfunction = 0 - return 1 - -// What does the implant do upon injection? -// return 0 if the implant fails (ex. Revhead and loyalty implant.) -// return TRUE if the implant succeeds (ex. Nonrevhead and loyalty implant.) -/obj/item/implant/proc/implanted(var/mob/source) - return TRUE - -/obj/item/implant/proc/can_implant(mob/M, mob/user, var/target_zone) - var/mob/living/carbon/human/H = M - if(istype(H) && !H.get_organ(target_zone)) - to_chat(user, "\The [M] is missing that body part.") - return FALSE - return TRUE - -/obj/item/implant/proc/implant_in_mob(mob/M, var/target_zone) - if (ishuman(M)) - var/mob/living/carbon/human/H = M - var/obj/item/organ/external/affected = H.get_organ(target_zone) - if(affected) - affected.implants += src - part = affected - - SET_BIT(H.hud_updateflag, IMPLOYAL_HUD) - - forceMove(M) - imp_in = M - implanted = 1 - implanted(M) - - return TRUE - -/obj/item/implant/proc/removed() - imp_in = null - if(part) - part.implants -= src - part = null - implanted = 0 - -//Called in surgery when incision is retracted open / ribs are opened - basically before you can take implant out -/obj/item/implant/proc/exposed() - return - -/obj/item/implant/proc/get_data() - return "No information available" - -/obj/item/implant/interact(user) - var/datum/browser/popup = new(user, capitalize(name), capitalize(name), 300, 700, src) - var/dat = get_data() - if(malfunction) - popup.title = "??? implant" - dat = stars(dat,10) - popup.set_content(dat) - popup.open() - -/obj/item/implant/proc/islegal() - return FALSE - -/obj/item/implant/proc/meltdown() //breaks it down, making implant unrecongizible - if(malfunction == MALFUNCTION_PERMANENT) return - to_chat(imp_in, SPAN_DANGER("You feel something melting inside [part ? "your [part.name]" : "you"]!")) - if (part) - part.take_external_damage(burn = 15, used_weapon = "Electronics meltdown") - else - var/mob/living/M = imp_in - M.apply_damage(15, DAMAGE_BURN) - name = "melted implant" - desc = "Charred circuit in melted plastic case. Wonder what that used to be..." - icon_state = "implant_melted" - malfunction = MALFUNCTION_PERMANENT - -/obj/item/implant/emp_act(severity) - var/power = 4 - severity - if(prob(power * 15)) - meltdown() - else if(prob(power * 33)) - disable(rand(power*100,power*1000)) - else if(prob(power * 25)) - activate() - ..() - -/obj/item/implant/Destroy() - if(part) - part.implants.Remove(src) - return ..() diff --git a/code/game/objects/items/weapons/implants/implantcase.dm b/code/game/objects/items/weapons/implants/implantcase.dm deleted file mode 100644 index fe5ff527c8752..0000000000000 --- a/code/game/objects/items/weapons/implants/implantcase.dm +++ /dev/null @@ -1,72 +0,0 @@ -//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:32 - -/obj/item/implantcase - name = "glass case" - desc = "A case containing an implant." - icon = 'icons/obj/items.dmi' - icon_state = "implantcase-0" - item_state = "implantcase" - throw_speed = 1 - throw_range = 5 - w_class = ITEM_SIZE_TINY - var/obj/item/implant/imp = null - -/obj/item/implantcase/New() - if(ispath(imp)) - imp = new imp(src) - update_description() - ..() - update_icon() - -/obj/item/implantcase/proc/update_description() - if (imp) - desc = "A case containing \a [imp]." - origin_tech = imp.origin_tech - else - desc = "A case for implants." - origin_tech.Cut() - -/obj/item/implantcase/on_update_icon() - if (imp) - icon_state = "implantcase-[imp.implant_color]" - else - icon_state = "implantcase-0" - return - -/obj/item/implantcase/attackby(obj/item/I, mob/user) - if (istype(I, /obj/item/pen)) - var/t = input(user, "What would you like the label to be?", src.name, null) - if (user.get_active_hand() != I) - return - if((!in_range(src, usr) && loc != user)) - return - t = sanitizeSafe(t, MAX_NAME_LEN) - if(t) - SetName("glass case - '[t]'") - desc = "A case containing \a [t] implant." - else - SetName(initial(name)) - desc = "A case containing an implant." - else if(istype(I, /obj/item/reagent_containers/syringe)) - if(istype(imp,/obj/item/implant/chem)) - imp.attackby(I,user) - else if (istype(I, /obj/item/implanter)) - var/obj/item/implanter/M = I - if (M.imp && !imp && !M.imp.implanted) - M.imp.forceMove(src) - imp = M.imp - M.imp = null - else if (imp && !M.imp) - imp.forceMove(M) - M.imp = src.imp - imp = null - update_description() - update_icon() - M.update_icon() - else if (istype(I, /obj/item/implant) && user.unEquip(I, src)) - to_chat(usr, "You slide \the [I] into \the [src].") - imp = I - update_description() - update_icon() - else - return ..() \ No newline at end of file diff --git a/code/game/objects/items/weapons/implants/implanter.dm b/code/game/objects/items/weapons/implants/implanter.dm deleted file mode 100644 index 322162beefd31..0000000000000 --- a/code/game/objects/items/weapons/implants/implanter.dm +++ /dev/null @@ -1,65 +0,0 @@ -/obj/item/implanter - name = "implanter" - icon = 'icons/obj/items.dmi' - icon_state = "implanter0" - item_state = "syringe_0" - throw_speed = 1 - throw_range = 5 - w_class = ITEM_SIZE_SMALL - matter = list(MATERIAL_ALUMINIUM = 1000, MATERIAL_GLASS = 1000) - var/obj/item/implant/imp = null - -/obj/item/implanter/New() - if(ispath(imp)) - imp = new imp(src) - ..() - update_icon() - -/obj/item/implanter/on_update_icon() - if (imp) - icon_state = "implanter1" - else - icon_state = "implanter0" - -/obj/item/implanter/proc/can_use() - - if(!ismob(loc)) - return 0 - - var/mob/M = loc - - if(M.incapacitated()) - return 0 - if((src in M.contents) || (istype(loc, /turf) && in_range(src, M))) - return 1 - return 0 - -/obj/item/implanter/attackby(obj/item/I, mob/user) - if(!imp && istype(I, /obj/item/implant) && user.unEquip(I,src)) - to_chat(usr, "You slide \the [I] into \the [src].") - imp = I - update_icon() - else - ..() - -/obj/item/implanter/attack(mob/M as mob, mob/user as mob) - if (!istype(M, /mob/living/carbon)) - return - if (user && src.imp) - M.visible_message("[user] is attemping to implant [M].") - - user.setClickCooldown(DEFAULT_QUICK_COOLDOWN) - user.do_attack_animation(M) - - var/target_zone = user.zone_sel.selecting - if(src.imp.can_implant(M, user, target_zone)) - var/imp_name = imp.name - - if(do_after(user, 5 SECONDS, M, DO_EQUIP) && src.imp?.implant_in_mob(M, target_zone)) - M.visible_message("[M] has been implanted by [user].") - admin_attack_log(user, M, "Implanted using \the [src] ([imp_name])", "Implanted with \the [src] ([imp_name])", "used an implanter, \the [src] ([imp_name]), on") - - src.imp = null - update_icon() - - return diff --git a/code/game/objects/items/weapons/implants/implantpad.dm b/code/game/objects/items/weapons/implants/implantpad.dm deleted file mode 100644 index fc667203e6020..0000000000000 --- a/code/game/objects/items/weapons/implants/implantpad.dm +++ /dev/null @@ -1,61 +0,0 @@ -//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:32 - -/obj/item/implantpad - name = "implant pad" - desc = "Used to reprogramm implants." - icon = 'icons/obj/items.dmi' - icon_state = "implantpad-0" - item_state = "electronic" - w_class = ITEM_SIZE_SMALL - var/obj/item/implant/imp - -/obj/item/implantpad/on_update_icon() - if (imp) - icon_state = "implantpad-1" - else - icon_state = "implantpad-0" - -/obj/item/implantpad/attack_hand(mob/user) - if ((imp && (user.l_hand == src || user.r_hand == src))) - user.put_in_active_hand(imp) - imp.add_fingerprint(user) - add_fingerprint(user) - - imp = null - update_icon() - else - return ..() - -/obj/item/implantpad/attackby(obj/item/I, mob/user) - ..() - if(istype(I, /obj/item/implantcase)) - var/obj/item/implantcase/C = I - if(!imp && C.imp) - C.imp.forceMove(src) - imp = C.imp - C.imp = null - else if (imp && !C.imp) - imp.forceMove(C) - C.imp = imp - imp = null - C.update_icon() - else if(istype(I, /obj/item/implanter)) - var/obj/item/implanter/C = I - if(!imp && C.imp) - C.imp.forceMove(src) - imp = C.imp - C.imp = null - else if (imp && !C.imp) - imp.forceMove(C) - C.imp = imp - imp = null - C.update_icon() - else if(istype(I, /obj/item/implant) && user.unEquip(I, src)) - imp = I - update_icon() - -/obj/item/implantpad/attack_self(mob/user) - if (imp) - imp.interact(user) - else - to_chat(user,"There's no implant loaded in \the [src].") \ No newline at end of file diff --git a/code/game/objects/items/weapons/implants/implants/adrenaline.dm b/code/game/objects/items/weapons/implants/implants/adrenaline.dm deleted file mode 100644 index 17a8c9d0f319d..0000000000000 --- a/code/game/objects/items/weapons/implants/implants/adrenaline.dm +++ /dev/null @@ -1,43 +0,0 @@ -/obj/item/implant/adrenalin - name = "adrenalin implant" - desc = "Removes all stuns and knockdowns." - origin_tech = list(TECH_MATERIAL = 1, TECH_BIO = 2, TECH_ESOTERIC = 2) - hidden = 1 - var/uses - -/obj/item/implant/adrenalin/get_data() - return {" - Implant Specifications:
              - Name: Cybersun Industries Adrenalin Implant
              - Life: Five days.
              - Important Notes: Illegal
              -
              - Implant Details: Subjects injected with implant can activate a massive injection of adrenalin.
              - Function: Contains nanobots to stimulate body to mass-produce Adrenalin.
              - Special Features: Will prevent and cure most forms of brainwashing.
              - Integrity: Implant can only be used three times before the nanobots are depleted."} - -/obj/item/implant/adrenalin/trigger(emote, mob/source) - if (emote == "pale") - activate() - -/obj/item/implant/adrenalin/activate()//this implant is unused but I'm changing it for the sake of consistency - if (uses < 1 || malfunction || !imp_in) return 0 - uses-- - to_chat(imp_in, "You feel a sudden surge of energy!") - imp_in.SetStunned(0) - imp_in.SetWeakened(0) - imp_in.SetParalysis(0) - -/obj/item/implant/adrenalin/implanted(mob/source) - source.StoreMemory("A implant can be activated by using the pale emote, say *pale to attempt to activate.", /decl/memory_options/system) - to_chat(source, "The implanted freedom implant can be activated by using the pale emote, say *pale to attempt to activate.") - return TRUE - -/obj/item/implanter/adrenalin - name = "implanter-adrenalin" - imp = /obj/item/implant/adrenalin - -/obj/item/implantcase/adrenalin - name = "glass case - 'adrenalin'" - imp = /obj/item/implant/adrenalin \ No newline at end of file diff --git a/code/game/objects/items/weapons/implants/implants/chem.dm b/code/game/objects/items/weapons/implants/implants/chem.dm deleted file mode 100644 index f849ef75276e3..0000000000000 --- a/code/game/objects/items/weapons/implants/implants/chem.dm +++ /dev/null @@ -1,49 +0,0 @@ -/obj/item/implant/chem - name = "chemical implant" - desc = "Injects things." - origin_tech = list(TECH_MATERIAL = 1, TECH_BIO = 2) - known = 1 - -/obj/item/implant/chem/get_data() - return {" - Implant Specifications:
              - Name: Robust Corp MJ-420 Prisoner Management Implant
              - Life: Deactivates upon death but remains within the body.
              - Important Notes: Due to the system functioning off of nutrients in the implanted subject's body, the subject
              - will suffer from an increased appetite.

              -
              - Implant Details:
              - Function: Contains a small capsule that can contain various chemicals. Upon receiving a specially encoded signal
              - the implant releases the chemicals directly into the blood stream.
              - Special Features: - Micro-Capsule- Can be loaded with any sort of chemical agent via the common syringe and can hold 50 units.
              - Can only be loaded while still in its original case.
              - Integrity: Implant will last so long as the subject is alive. However, if the subject suffers from prolonged malnutrition,
              - nine or more days without nutrients, the implant may become unstable and either pre-maturely inject the subject or simply break."} - -/obj/item/implant/chem/New() - ..() - create_reagents(50) - -/obj/item/implant/chem/activate(var/amount) - if(malfunction || (!iscarbon(imp_in))) return 0 - if(!amount) - amount = rand(1,25) - var/mob/living/carbon/R = imp_in - reagents.trans_to_mob(R, amount, CHEM_BLOOD) - to_chat(R, "You hear a faint *beep*.") - -/obj/item/implant/chem/attackby(obj/item/I, mob/user) - if(istype(I, /obj/item/reagent_containers/syringe)) - if(reagents.total_volume >= reagents.maximum_volume) - to_chat(user, "\The [src] is full.") - else - if(do_after(user, 0.5 SECONDS, src, DO_MEDICAL)) - I.reagents.trans_to_obj(src, 5) - to_chat(user, "You inject 5 units of the solution. The syringe now contains [I.reagents.total_volume] units.") - else - ..() - -/obj/item/implantcase/chem - name = "glass case - 'chem'" - imp = /obj/item/implant/chem diff --git a/code/game/objects/items/weapons/implants/implants/compressed.dm b/code/game/objects/items/weapons/implants/implants/compressed.dm deleted file mode 100644 index b88400516e11f..0000000000000 --- a/code/game/objects/items/weapons/implants/implants/compressed.dm +++ /dev/null @@ -1,92 +0,0 @@ -/obj/item/implant/compressed - name = "compressed matter implant" - desc = "Based on compressed matter technology, can store a single item." - icon_state = "implant_evil" - origin_tech = list(TECH_MATERIAL = 4, TECH_BIO = 2, TECH_ESOTERIC = 2) - hidden = 1 - var/activation_emote - var/obj/item/scanned - -/obj/item/implant/compressed/trigger(emote, mob/source) - if (src.scanned == null) - return 0 - - if (emote == src.activation_emote) - to_chat(source, "The air glows as \the [src.scanned.name] uncompresses.") - activate() - -/obj/item/implant/compressed/activate() - if(malfunction) return - var/turf/T = get_turf(src) - if (imp_in) - imp_in.put_in_hands(scanned) - else - scanned.forceMove(T) - qdel(src) - -/obj/item/implant/compressed/implanted(mob/source) - src.activation_emote = input("Choose activation emote:") in list("blink", "blink_r", "eyebrow", "chuckle", "twitch_v", "frown", "nod", "blush", "giggle", "grin", "groan", "shrug", "smile", "pale", "sniff", "whimper", "wink") - if (source.mind) - source.StoreMemory("Compressed matter implant can be activated by using the [src.activation_emote] emote, say *[src.activation_emote] to attempt to activate.", /decl/memory_options/system) - to_chat(source, "The implanted compressed matter implant can be activated by using the [src.activation_emote] emote, say *[src.activation_emote] to attempt to activate.") - return TRUE - -/obj/item/implanter/compressed - name = "implanter (C)" - icon_state = "cimplanter1" - desc = "The matter compressor safety is on." - var/safe = 1 - imp = /obj/item/implant/compressed - -/obj/item/implanter/compressed/on_update_icon() - if (imp) - var/obj/item/implant/compressed/c = imp - if(!c.scanned) - icon_state = "cimplanter1" - else - icon_state = "cimplanter2" - else - icon_state = "cimplanter0" - return - -/obj/item/implanter/compressed/attack(mob/M as mob, mob/user as mob) - var/obj/item/implant/compressed/c = imp - if (!c) return - if (c.scanned == null) - to_chat(user, "Please compress an object with the implanter first.") - return - ..() - -/obj/item/implanter/compressed/afterattack(obj/item/A, mob/user as mob, proximity) - if(!proximity) - return - if(istype(A) && imp) - var/obj/item/implant/compressed/c = imp - if (c.scanned) - if (!istype(A,/obj/item/storage)) - to_chat(user, "Something is already compressed inside the implant!") - return - else if(safe) - if (!istype(A,/obj/item/storage)) - to_chat(user, "The matter compressor safeties prevent you from doing that.") - return - if(istype(A.loc,/mob/living/carbon/human)) - var/mob/living/carbon/human/H = A.loc - if(!H.unEquip(A)) - return - else if(istype(A.loc,/obj/item/storage)) - var/obj/item/storage/S = A.loc - S.remove_from_storage(A) - c.scanned = A - A.forceMove(c) //Store it inside - safe = 2 - desc = "It currently contains some matter." - update_icon() - -/obj/item/implanter/compressed/attack_self(var/mob/user) - if(!imp || safe == 2) - return ..() - - safe = !safe - to_chat(user, "You [safe ? "enable" : "disable"] the matter compressor safety.") - src.desc = "The matter compressor safety is [safe ? "on" : "off"]." diff --git a/code/game/objects/items/weapons/implants/implants/death_alarm.dm b/code/game/objects/items/weapons/implants/implants/death_alarm.dm deleted file mode 100644 index f1f65639e31f3..0000000000000 --- a/code/game/objects/items/weapons/implants/implants/death_alarm.dm +++ /dev/null @@ -1,75 +0,0 @@ -/obj/item/implant/death_alarm - name = "death alarm implant" - desc = "An alarm which monitors host vital signs and transmits a radio message upon death." - origin_tech = list(TECH_MATERIAL = 1, TECH_BIO = 2, TECH_DATA = 1) - known = 1 - var/mobname = "John Doe" - -/obj/item/implant/death_alarm/get_data() - return {" - Implant Specifications:
              - Name: [GLOB.using_map.company_name] \"Profit Margin\" Class Employee Lifesign Sensor
              - Life: Activates upon death.
              - Important Notes: Alerts crew to crewmember death.
              -
              - Implant Details:
              - Function: Contains a compact radio signaler that triggers when the host's lifesigns cease.
              - Special Features: Alerts crew to crewmember death.
              - Integrity: Implant will occasionally be degraded by the body's immune system and thus will occasionally malfunction."} - -/obj/item/implant/death_alarm/islegal() - return TRUE - -/obj/item/implant/death_alarm/Process() - if (!implanted) return - var/mob/M = imp_in - - if(isnull(M)) // If the mob got gibbed - activate(null) - else if(M.stat == DEAD) - activate("death") - -/obj/item/implant/death_alarm/activate(var/cause = "emp") - if(malfunction) return - var/mob/M = imp_in - var/area/t = get_area(M) - var/location = t.name - if (cause == "emp" && prob(50)) - location = pick(teleportlocs) - if(!t.requires_power) // We assume areas that don't use power are some sort of special zones - var/area/default = world.area - location = initial(default.name) - var/death_message = "[mobname] has died in [location]!" - if(!cause) - death_message = "[mobname] has died-zzzzt in-in-in..." - STOP_PROCESSING(SSobj, src) - - for(var/channel in list("Security", "Medical", "Command")) - GLOB.global_headset.autosay(death_message, "[mobname]'s Death Alarm", channel) - -/obj/item/implant/death_alarm/disable() - . = ..() - if(.) - STOP_PROCESSING(SSobj, src) - -/obj/item/implant/death_alarm/restore() - . = ..() - if(.) - START_PROCESSING(SSobj, src) - -/obj/item/implant/death_alarm/meltdown() - . = ..() - STOP_PROCESSING(SSobj, src) - -/obj/item/implant/death_alarm/implanted(mob/source as mob) - mobname = source.real_name - START_PROCESSING(SSobj, src) - return TRUE - -/obj/item/implant/death_alarm/removed() - ..() - STOP_PROCESSING(SSobj, src) - -/obj/item/implantcase/death_alarm - name = "glass case - 'death alarm'" - imp = /obj/item/implant/death_alarm \ No newline at end of file diff --git a/code/game/objects/items/weapons/implants/implants/explosive.dm b/code/game/objects/items/weapons/implants/implants/explosive.dm deleted file mode 100644 index 83a72d8ca26a6..0000000000000 --- a/code/game/objects/items/weapons/implants/implants/explosive.dm +++ /dev/null @@ -1,173 +0,0 @@ -//BS12 Explosive -/obj/item/implant/explosive - name = "explosive implant" - desc = "A military grade micro bio-explosive. Highly dangerous." - icon_state = "implant_evil" - origin_tech = list(TECH_MATERIAL = 1, TECH_BIO = 2, TECH_ESOTERIC = 3) - hidden = 1 - var/elevel - var/phrase - var/code = 13 - var/frequency = 1443 - var/datum/radio_frequency/radio_connection - var/warning_message = "Tampering detected. Tampering detected." - -/obj/item/implant/explosive/get_data() - . = {" - Implant Specifications:
              - Name: Robust Corp RX-78 Intimidation Class Implant
              - Life: Activates upon codephrase.
              - Important Notes: Explodes
              -
              - Implant Details:
              - Function: Contains a compact, electrically detonated explosive that detonates upon receiving a specially encoded signal or upon host death.
              - Special Features: Explodes
              - Integrity: Implant will occasionally be degraded by the body's immune system and thus will occasionally malfunction."} - if(!malfunction) - . += {" -
              Explosion yield mode:
              - [elevel ? elevel : "NONE SET"]
              - Activation phrase:
              - [phrase ? phrase : "NONE SET"]
              - Frequency:
              - - - - - [format_frequency(src.frequency)] - + - +
              - Code:
              - - - - - [src.code] - + - +
              - Tampering warning message:
              - This will be broadcasted on radio if implant is exposed during surgery.
              - [warning_message ? warning_message : "NONE SET"] - "} - -/obj/item/implant/explosive/Initialize() - . = ..() - GLOB.listening_objects += src - set_frequency(frequency) - -/obj/item/implant/explosive/Topic(href, href_list) - ..() - if (href_list["freq"]) - var/new_frequency = frequency + text2num(href_list["freq"]) - new_frequency = sanitize_frequency(new_frequency, RADIO_LOW_FREQ, RADIO_HIGH_FREQ) - set_frequency(new_frequency) - interact(usr) - if (href_list["code"]) - var/adj = text2num(href_list["code"]) - if(!adj) - code = input("Set radio activation code","Radio activation") as num - else - code += adj - code = clamp(code,1,100) - interact(usr) - if (href_list["mode"]) - var/mod = input("Set explosion mode", "Explosion mode") as null|anything in list("Localized Limb", "Destroy Body", "Full Explosion") - if(mod) - elevel = mod - interact(usr) - if (href_list["msg"]) - var/msg = input("Set tampering message, or leave blank for no broadcasting.", "Anti-tampering", warning_message) as text|null - if(msg) - warning_message = msg - interact(usr) - if (href_list["phrase"]) - var/talk = input("Set activation phrase", "Audio activation", phrase) as text|null - if(talk) - phrase = sanitize_phrase(talk) - interact(usr) - -/obj/item/implant/explosive/receive_signal(datum/signal/signal) - if(signal && signal.encryption == code) - activate() - -/obj/item/implant/explosive/proc/set_frequency(new_frequency) - radio_controller.remove_object(src, frequency) - frequency = new_frequency - radio_connection = radio_controller.add_object(src, frequency, RADIO_CHAT) - -/obj/item/implant/explosive/hear_talk(mob/M as mob, msg) - hear(msg) - -/obj/item/implant/explosive/hear(var/msg) - if(!phrase) - return - if(findtext(sanitize_phrase(msg),phrase)) - activate() - qdel(src) - -/obj/item/implant/explosive/exposed() - if(warning_message) - GLOB.global_headset.autosay(warning_message, "Anti Tampering System") - -/obj/item/implant/explosive/proc/sanitize_phrase(phrase) - var/list/replacechars = list("'" = "","\"" = "",">" = "","<" = "","(" = "",")" = "") - return replace_characters(phrase, replacechars) - -/obj/item/implant/explosive/activate() - if (malfunction) - return - - var/turf/T = get_turf(src) - if(T) - T.hotspot_expose(3500,125) - - playsound(loc, 'sound/items/countdown.ogg', 75, 1, -3) - if(ismob(imp_in)) - imp_in.audible_message("Something beeps inside [imp_in][part ? "'s [part.name]" : ""]!") - log_and_message_admins("Explosive implant triggered in [imp_in] ([imp_in.key]). (JMP) ") - else - audible_message("[src] beeps omniously!") - log_and_message_admins("Explosive implant triggered in [T.loc]. (JMP) ") - - if(!elevel) - elevel = "Full Explosion" - switch(elevel) - if ("Localized Limb") - if (part) - if (istype(part,/obj/item/organ/external/chest) || \ - istype(part,/obj/item/organ/external/groin)) - part.take_external_damage(60, used_weapon = "Explosion") - else - part.droplimb(0,DROPLIMB_BLUNT) - explosion(T, -1, -1, 2, 3) - if ("Destroy Body") - explosion(T, -1, 0, 1, 6) - if(ismob(imp_in)) - imp_in.gib() - if ("Full Explosion") - explosion(T, 0, 1, 3, 6) - if(ismob(imp_in)) - imp_in.gib() - qdel(src) - -/obj/item/implant/explosive/implanted(mob/target) - if(!elevel) - elevel = alert("What sort of explosion would you prefer?", "Implant Intent", "Localized Limb", "Destroy Body", "Full Explosion") - if(!phrase) - phrase = sanitize_phrase(input("Choose activation phrase:") as text) - if(!phrase) - return - - var/memo = "Explosive implant in [target] can be activated by saying something containing the phrase ''[phrase]'', say [phrase] to attempt to activate. It can also be triggered with a radio signal on frequency [format_frequency(src.frequency)] with code [code]." - usr.StoreMemory(memo, /decl/memory_options/system) - to_chat(usr, memo) - return TRUE - -/obj/item/implant/explosive/Destroy() - removed() - GLOB.listening_objects -= src - return ..() - -/obj/item/implanter/explosive - name = "implanter (E)" - imp = /obj/item/implant/explosive - -/obj/item/implantcase/explosive - name = "glass case - 'explosive'" - imp = /obj/item/implant/explosive \ No newline at end of file diff --git a/code/game/objects/items/weapons/implants/implants/freedom.dm b/code/game/objects/items/weapons/implants/implants/freedom.dm deleted file mode 100644 index 045c2b2e27eb3..0000000000000 --- a/code/game/objects/items/weapons/implants/implants/freedom.dm +++ /dev/null @@ -1,63 +0,0 @@ -//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:32 - -/obj/item/implant/freedom - name = "freedom implant" - desc = "Use this to escape from those evil Red Shirts." - origin_tech = list(TECH_MATERIAL = 1, TECH_BIO = 2, TECH_ESOTERIC = 2) - implant_color = "r" - hidden = 1 - var/activation_emote - var/uses - -/obj/item/implant/freedom/get_data() - return {" - Implant Specifications:
              - Name: Freedom Beacon
              - Life: optimum 5 uses
              - Important Notes: Illegal
              -
              - Implant Details:
              - Function: Transmits a specialized cluster of signals to override handcuff locking - mechanisms
              - Special Features:
              - Neuro-Scan- Analyzes certain shadow signals in the nervous system
              - Integrity: The battery is extremely weak and commonly after injection its - life can drive down to only 1 use.
              - No Implant Specifics"} - -/obj/item/implant/freedom/New() - uses = rand(1, 5) - ..() - return - -/obj/item/implant/freedom/trigger(emote, mob/living/carbon/source as mob) - if (emote == activation_emote) - activate() - -/obj/item/implant/freedom/activate() - if(uses < 1 || malfunction) return 0 - if(remove_cuffs_and_unbuckle(imp_in)) - uses-- - to_chat(imp_in, "You feel a faint click.") - -/obj/item/implant/freedom/proc/remove_cuffs_and_unbuckle(mob/living/carbon/user) - if(!user.handcuffed) - return 0 - . = user.unEquip(user.handcuffed) - if(. && user.buckled && user.buckled.buckle_require_restraints) - user.buckled.unbuckle_mob() - return - -/obj/item/implant/freedom/implanted(mob/living/carbon/source) - src.activation_emote = input("Choose activation emote:") in list("blink", "blink_r", "eyebrow", "chuckle", "twitch_v", "frown", "nod", "blush", "giggle", "grin", "groan", "shrug", "smile", "pale", "sniff", "whimper", "wink") - source.StoreMemory("Freedom implant can be activated by using the [src.activation_emote] emote, say *[src.activation_emote] to attempt to activate.", /decl/memory_options/system) - to_chat(source, "The implanted freedom implant can be activated by using the [src.activation_emote] emote, say *[src.activation_emote] to attempt to activate.") - return TRUE - -/obj/item/implanter/freedom - name = "implanter (F)" - imp = /obj/item/implant/freedom - -/obj/item/implantcase/freedom - name = "glass case - 'freedom'" - imp = /obj/item/implant/freedom \ No newline at end of file diff --git a/code/game/objects/items/weapons/implants/implants/imprinting.dm b/code/game/objects/items/weapons/implants/implants/imprinting.dm deleted file mode 100644 index 9607ddc2b367e..0000000000000 --- a/code/game/objects/items/weapons/implants/implants/imprinting.dm +++ /dev/null @@ -1,116 +0,0 @@ -/obj/item/implant/imprinting - name = "imprinting implant" - desc = "Latest word in training your peons." - origin_tech = list(TECH_MATERIAL = 1, TECH_BIO = 2, TECH_DATA = 3) - hidden = 1 - var/list/instructions = list("Do your job.", "Respect your superiors.", "Wash you hands after using the toilet.") - var/brainwashing = 0 - -/obj/item/implant/imprinting/get_data() - . = {" - Implant Specifications:
              - Name: BB-56 "Educator" Employee Assistance Implant
              - Life: 1 year.
              -
              - Function: Adjusts itself to host's brainwaves, and presents supplied instructions as their 'inner voice' for less intrusive reminding. It will transmit them every 5 minutes in non-obtrusive manner.
              - Special Features: Do NOT implant if subject is under effect of any mind-altering drugs. - It carries risk of over-tuning, making subject unable to question the suggestions received, treating them as beliefs they feel strongly about.
              - It is HIGLY ILLEGAL and the seller does NOT endorse use of this device in such way. - Any amount of "Mind-Breaker"(TM) present in bloodstream will trigger this side-effect.
              "} - . += "
              Instructions:
              " - for(var/i = 1 to instructions.len) - . += "- [instructions[i]] Edit Remove
              " - . += "Add" - -/obj/item/implant/imprinting/Topic(href, href_list) - ..() - if (href_list["add"]) - var/mod = sanitize(input("Add an instruction", "Instructions") as text|null) - if(mod) - instructions += mod - interact(usr) - if (href_list["edit"]) - var/idx = text2num(href_list["edit"]) - var/mod = sanitize(input("Edit the instruction", "Instruction Editing", instructions[idx]) as text|null) - if(mod) - instructions[idx] = mod - interact(usr) - if (href_list["del"]) - instructions -= instructions[text2num(href_list["del"])] - interact(usr) - -/obj/item/implant/imprinting/implanted(mob/M) - var/mob/living/carbon/human/H = M - if(!istype(H)) - return FALSE - if(H.reagents.has_reagent(/datum/reagent/mindbreaker)) - brainwashing = 1 - var/msg = get_instructions() - to_chat(M, msg) - if(M.mind) - M.StoreMemory(msg, /decl/memory_options/system) - if(brainwashing) - log_and_message_admins("was implanted with a brainwashing implant holding following laws: [jointext(instructions, ";")].", M) - addtimer(CALLBACK(src,.proc/activate),3000,(TIMER_UNIQUE|TIMER_OVERRIDE)) - return TRUE - -/obj/item/implant/imprinting/proc/get_instructions() - . = list() - if(brainwashing) - . += "The fog in your head clears, and you remember some important things. You hold following things as deep convictions, almost like synthetics' laws:
              " - else - . += "You hear an annoying voice in the back of your head. The things it keeps reminding you of:
              " - for(var/thing in instructions) - . += "- [thing]
              " - . = JOINTEXT(.) - -/obj/item/implant/imprinting/disable(time) - . = ..() - if(. && brainwashing)//add deactivate and reactivate messages? - to_chat(imp_in,"A wave of nausea comes over you.
              You are no longer so sure of those beliefs you've had...") - -/obj/item/implant/imprinting/restore() - . = ..() - if(. && brainwashing) - to_chat(imp_in, get_instructions()) - activate() - -/obj/item/implant/imprinting/activate() - if(malfunction || !implanted || imp_in) return - var/instruction = pick(instructions) - if(brainwashing) - instruction = "You recall one of your beliefs: \"[instruction]\"" - else - instruction = "You remember suddenly: \"[instruction]\"" - to_chat(imp_in, instruction) - addtimer(CALLBACK(src,.proc/activate),3000,(TIMER_UNIQUE|TIMER_OVERRIDE)) - -/obj/item/implant/imprinting/removed() - if(brainwashing && !malfunction) - to_chat(imp_in,"A wave of nausea comes over you.
              You are no longer so sure of those beliefs you've had...") - ..() - -/obj/item/implant/imprinting/meltdown() - if(brainwashing && !malfunction)//if it's already broken don't send the message again - to_chat(imp_in,"A wave of nausea comes over you.
              You are no longer so sure of those beliefs you've had...") - . = ..() - -/obj/item/implant/imprinting/can_implant(mob/M, mob/user, target_zone) - var/mob/living/carbon/human/H = M - if(istype(H)) - var/obj/item/organ/internal/B = H.internal_organs_by_name[BP_BRAIN] - if(!B || H.isSynthetic()) - to_chat(user, "\The [M] cannot be imprinted.") - return FALSE - if(!(B.parent_organ == check_zone(target_zone))) - to_chat(user, "\The [src] must be implanted in [H.get_organ(B.parent_organ)].") - return FALSE - return TRUE - -/obj/item/implanter/imprinting - name = "imprinting implanter" - imp = /obj/item/implant/imprinting - -/obj/item/implantcase/imprinting - name = "glass case - 'imprinting'" - imp = /obj/item/implant/imprinting diff --git a/code/game/objects/items/weapons/implants/implants/loyalty.dm b/code/game/objects/items/weapons/implants/implants/loyalty.dm deleted file mode 100644 index e2ef51291edf9..0000000000000 --- a/code/game/objects/items/weapons/implants/implants/loyalty.dm +++ /dev/null @@ -1,38 +0,0 @@ -/obj/item/implant/loyalty - name = "loyalty implant" - desc = "Makes you loyal or such." - origin_tech = list(TECH_MATERIAL = 1, TECH_BIO = 2, TECH_ESOTERIC = 3) - known = 1 - -/obj/item/implant/loyalty/get_data() - return {" - Implant Specifications:
              - Name: [GLOB.using_map.company_name] Employee Management Implant
              - Life: Ten years.
              - Important Notes: Personnel injected with this device tend to be much more loyal to the company.
              -
              - Implant Details:
              - Function: Contains a small pod of nanobots that manipulate the host's mental functions.
              - Special Features: Will prevent and cure most forms of brainwashing.
              - Integrity: Implant will last so long as the nanobots are inside the bloodstream."} - -/obj/item/implant/loyalty/implanted(mob/M) - if(!M.mind || !istype(M, /mob/living/carbon/human)) - return FALSE - var/mob/living/carbon/human/H = M - var/datum/antagonist/antag_data = get_antag_data(H.mind.special_role) - if(antag_data && (antag_data.flags & ANTAG_IMPLANT_IMMUNE)) - H.visible_message("[H] seems to resist the implant!", "You feel the corporate tendrils of [GLOB.using_map.company_name] try to invade your mind!") - return FALSE - else - clear_antag_roles(H.mind, 1) - to_chat(H, "You feel a surge of loyalty towards [GLOB.using_map.company_name].") - return TRUE - -/obj/item/implanter/loyalty - name = "implanter-loyalty" - imp = /obj/item/implant/loyalty - -/obj/item/implantcase/loyalty - name = "glass case - 'loyalty'" - imp = /obj/item/implant/loyalty \ No newline at end of file diff --git a/code/game/objects/items/weapons/implants/implants/tracking.dm b/code/game/objects/items/weapons/implants/implants/tracking.dm deleted file mode 100644 index 7397b049b0956..0000000000000 --- a/code/game/objects/items/weapons/implants/implants/tracking.dm +++ /dev/null @@ -1,40 +0,0 @@ -/obj/item/implant/tracking - name = "tracking implant" - desc = "Track with this." - origin_tech = list(TECH_MATERIAL = 1, TECH_BIO = 2, TECH_BLUESPACE = 2) - known = 1 - var/id = 1 - -/obj/item/implant/tracking/get_data() - . = {"Implant Specifications:
              - Name: Tracking Beacon
              - Life: 10 minutes after death of host
              - Important Notes: None
              -
              - Implant Details:
              - Function: Continuously transmits low power signal. Useful for tracking.
              - Special Features:
              - Neuro-Safe- Specialized shell absorbs excess voltages self-destructing the chip if - a malfunction occurs thereby securing safety of subject. The implant will melt and - disintegrate into bio-safe elements.
              - Integrity: Gradient creates slight risk of being overcharged and frying the - circuitry. As a result neurotoxins can cause massive damage.
              "} - if(!malfunction) - .+= {"ID (1-100):
              - - - - [id] - + - +
              "} - -/obj/item/implant/tracking/Topic(href, href_list) - ..() - if (href_list["tracking_id"]) - id = clamp(id+text2num(href_list["tracking_id"]), 1, 100) - interact(usr) - -/obj/item/implant/tracking/islegal() - return TRUE - -/obj/item/implantcase/tracking - name = "glass case - 'tracking'" - imp = /obj/item/implant/tracking diff --git a/code/game/objects/items/weapons/implants/implants/translator.dm b/code/game/objects/items/weapons/implants/implants/translator.dm deleted file mode 100644 index 764fe79944076..0000000000000 --- a/code/game/objects/items/weapons/implants/implants/translator.dm +++ /dev/null @@ -1,51 +0,0 @@ -//Implant that lets you learn languages by hearing them -/obj/item/implant/translator - name = "babel implant" - desc = "A small implant with a microphone on it." - icon_state = "implant_evil" - origin_tech = list(TECH_MATERIAL = 1, TECH_BIO = 2, TECH_ESOTERIC = 3) - hidden = 1 - var/list/languages = list() - var/learning_threshold = 20 //need to hear language spoken this many times to learn it - var/max_languages = 5 - -/obj/item/implant/translator/get_data() - return "WARNING: No match found in the database." - -/obj/item/implant/translator/Initialize() - . = ..() - GLOB.listening_objects += src - -/obj/item/implant/translator/hear_talk(mob/M, msg, verb, datum/language/speaking) - if(!speaking) - return - if(!imp_in) - return - if (languages.len == max_languages) - return - if(!languages[speaking.name]) - languages[speaking.name] = 1 - languages[speaking.name] = languages[speaking.name] + 1 - if(!imp_in.say_understands(M, speaking) && languages[speaking.name] > learning_threshold) - to_chat(imp_in, SPAN_NOTICE("You feel like you can understand [speaking.name] now...")) - imp_in.add_language(speaking.name) - -/obj/item/implant/translator/implanted(mob/target) - return TRUE - -/obj/item/implant/translator/Destroy() - removed() - GLOB.listening_objects -= src - return ..() - -/obj/item/implanter/translator - name = "babel implanter" - imp = /obj/item/implant/translator - -/obj/item/implant/translator/natural - name = "lingophagic node" - desc = "A chunk of what could be discolored crystalized brain matter. It seems to pulse occasionally." - icon_state = "implant_growth" - origin_tech = list(TECH_BIO = 5) - learning_threshold = 10 - max_languages = 3 diff --git a/code/game/objects/items/weapons/implants/implants/uplink.dm b/code/game/objects/items/weapons/implants/implants/uplink.dm deleted file mode 100644 index 949c237f30b61..0000000000000 --- a/code/game/objects/items/weapons/implants/implants/uplink.dm +++ /dev/null @@ -1,27 +0,0 @@ -/obj/item/implant/uplink - name = "uplink implant" - desc = "Summon things." - origin_tech = list(TECH_MATERIAL = 1, TECH_BIO = 2, TECH_ESOTERIC = 3) - hidden = 1 - var/activation_emote - -/obj/item/implant/uplink/New(var/loc, var/amount) - amount = amount || IMPLANT_TELECRYSTAL_AMOUNT(DEFAULT_TELECRYSTAL_AMOUNT) - hidden_uplink = new(src, telecrystals = amount) - ..() - -/obj/item/implant/uplink/implanted(mob/source) - var/emote_options = list("blink", "blink_r", "eyebrow", "chuckle", "twitch_v", "frown", "nod", "blush", "giggle", "grin", "groan", "shrug", "smile", "pale", "sniff", "whimper", "wink") - activation_emote = source.client ? (input(source, "Choose activation emote:", "Uplink Implant Setup") in emote_options) : emote_options[1] - source.StoreMemory("Uplink implant can be activated by using the [src.activation_emote] emote, say *[src.activation_emote] to attempt to activate.", /decl/memory_options/system) - to_chat(source, "The implanted uplink implant can be activated by using the [src.activation_emote] emote, say *[src.activation_emote] to attempt to activate.") - hidden_uplink.uplink_owner = source.mind - return TRUE - -/obj/item/implant/uplink/trigger(emote, mob/source as mob) - if(hidden_uplink && usr == source && !malfunction) // Let's not have another people activate our uplink - hidden_uplink.check_trigger(source, emote, activation_emote) - -/obj/item/implanter/uplink - name = "implanter (U)" - imp = /obj/item/implant/uplink diff --git a/code/game/objects/items/weapons/ironing_iron.dm b/code/game/objects/items/weapons/ironing_iron.dm deleted file mode 100644 index 89c2a22dd6f27..0000000000000 --- a/code/game/objects/items/weapons/ironing_iron.dm +++ /dev/null @@ -1,19 +0,0 @@ -/obj/item/ironingiron - name = "iron" - desc = "An ironing iron for ironing your iro- err... clothes." - icon = 'icons/obj/ironing.dmi' - icon_state = "iron" - item_state = "ironingiron" - w_class = ITEM_SIZE_NORMAL - throwforce = 10 - throw_speed = 2 - throw_range = 10 - force = 8.0 - attack_verb = list("slammed", "whacked", "bashed", "thunked", "battered", "bludgeoned", "thrashed") - - var/enabled = 0 - -/obj/item/ironingiron/attack_self(var/mob/user) - enabled = !enabled - to_chat(user, "You turn \the [src.name] [enabled ? "on" : "off"].") - ..() \ No newline at end of file diff --git a/code/game/objects/items/weapons/janitor_sign.dm b/code/game/objects/items/weapons/janitor_sign.dm deleted file mode 100644 index ea8fbd982739b..0000000000000 --- a/code/game/objects/items/weapons/janitor_sign.dm +++ /dev/null @@ -1,16 +0,0 @@ -/obj/item/caution - desc = "Caution! Wet Floor!" - name = "wet floor sign" - icon = 'icons/obj/janitor.dmi' - icon_state = "caution" - force = 1.0 - throwforce = 3.0 - throw_speed = 1 - throw_range = 5 - w_class = ITEM_SIZE_SMALL - attack_verb = list("warned", "cautioned", "smashed") - -/obj/item/caution/cone - desc = "This cone is trying to warn you of something!" - name = "warning cone" - icon_state = "cone" \ No newline at end of file diff --git a/code/game/objects/items/weapons/lighter.dm b/code/game/objects/items/weapons/lighter.dm deleted file mode 100644 index e63dcf3c74c09..0000000000000 --- a/code/game/objects/items/weapons/lighter.dm +++ /dev/null @@ -1,206 +0,0 @@ -/obj/item/flame/lighter - name = "lighter" - desc = "A cheap-as-free lighter." - icon = 'icons/obj/lighters.dmi' - icon_state = "lighter" - item_state = "lighter" - w_class = ITEM_SIZE_TINY - throwforce = 4 - obj_flags = OBJ_FLAG_CONDUCTIBLE - slot_flags = SLOT_BELT - attack_verb = list("burnt", "singed") - var/max_fuel = 5 - var/random_colour = FALSE - var/available_colors = list(COLOR_WHITE, COLOR_BLUE_GRAY, COLOR_GREEN_GRAY, COLOR_BOTTLE_GREEN, COLOR_DARK_GRAY, COLOR_RED_GRAY, COLOR_GUNMETAL, COLOR_RED, COLOR_YELLOW, COLOR_CYAN, COLOR_GREEN, COLOR_VIOLET, COLOR_NAVY_BLUE, COLOR_PINK) - -/obj/item/flame/lighter/Initialize() - . = ..() - create_reagents(max_fuel) - reagents.add_reagent(/datum/reagent/fuel, max_fuel) - set_extension(src, /datum/extension/base_icon_state, icon_state) - if(random_colour) - color = pick(available_colors) - update_icon() - -/obj/item/flame/lighter/proc/light(mob/user) - if(submerged()) - to_chat(user, "You cannot light \the [src] underwater.") - return - lit = 1 - update_icon() - light_effects(user) - set_light(0.6, 0.5, 2, l_color = COLOR_PALE_ORANGE) - START_PROCESSING(SSobj, src) - -/obj/item/flame/lighter/proc/light_effects(mob/living/carbon/user) - if(prob(95)) - user.visible_message("After a few attempts, [user] manages to light \the [src].") - else - to_chat(user, "You burn yourself while lighting the lighter.") - if (user.l_hand == src) - user.apply_damage(2, DAMAGE_BURN, BP_L_HAND) - else - user.apply_damage(2, DAMAGE_BURN, BP_R_HAND) - user.visible_message("After a few attempts, [user] manages to light \the [src], burning their finger in the process.") - playsound(src.loc, "light_bic", 100, 1, -4) - -/obj/item/flame/lighter/extinguish(var/mob/user, var/no_message) - ..() - update_icon() - if(user) - shutoff_effects(user) - else if(!no_message) - visible_message("[src] goes out.") - set_light(0) - -/obj/item/flame/lighter/proc/shutoff_effects(mob/user) - user.visible_message("[user] quietly shuts off the [src].") - -/obj/item/flame/lighter/attack_self(mob/living/user) - if(!lit) - if(reagents.has_reagent(/datum/reagent/fuel)) - light(user) - else - to_chat(user, "\The [src] won't ignite - it must be out of fuel.") - else - extinguish(user) - -/obj/item/flame/lighter/on_update_icon() - var/datum/extension/base_icon_state/bis = get_extension(src, /datum/extension/base_icon_state) - - overlays.Cut() - if(lit) - overlays += overlay_image(icon, "[bis.base_icon_state]_flame", flags=RESET_COLOR) - else - overlays += overlay_image(icon, "[bis.base_icon_state]_striker", flags=RESET_COLOR) - -/obj/item/flame/lighter/attack(var/mob/living/M, var/mob/living/carbon/user) - if(!istype(M, /mob)) - return - - if(lit) - M.IgniteMob() - - if(istype(M.wear_mask, /obj/item/clothing/mask/smokable/cigarette) && user.zone_sel.selecting == BP_MOUTH) - var/obj/item/clothing/mask/smokable/cigarette/cig = M.wear_mask - if(M == user) - cig.attackby(src, user) - else - cig.light("[user] holds the [name] out for [M], and lights the [cig.name].") - return - ..() - -/obj/item/flame/lighter/Process() - if(!submerged() && reagents.has_reagent(/datum/reagent/fuel)) - if(ismob(loc) && prob(10) && reagents.get_reagent_amount(/datum/reagent/fuel) < 1) - to_chat(loc, "\The [src]'s flame flickers.") - set_light(0) - addtimer(CALLBACK(src, .atom/proc/set_light, 0.6, 0.5, 2), 4) - reagents.remove_reagent(/datum/reagent/fuel, 0.05) - else - extinguish() - return - - var/turf/location = get_turf(src) - if(location) - location.hotspot_expose(700, 5) - -/obj/item/flame/lighter/red - color = COLOR_RED - name = "red lighter" - -/obj/item/flame/lighter/yellow - color = COLOR_YELLOW - name = "yellow lighter" - -/obj/item/flame/lighter/cyan - color = COLOR_CYAN - name = "cyan lighter" - -/obj/item/flame/lighter/green - color = COLOR_GREEN - name = "green lighter" - -/obj/item/flame/lighter/pink - color = COLOR_PINK - name = "pink lighter" - -/obj/item/flame/lighter/random - random_colour = TRUE - -/****** - Zippo -******/ -/obj/item/flame/lighter/zippo - name = "zippo lighter" - desc = "It's a zippo-styled lighter, using a replacable flint in a fetching steel case. It makes a clicking sound that everyone loves." - icon_state = "zippo" - item_state = "zippo" - max_fuel = 10 - available_colors = list(COLOR_WHITE, COLOR_WHITE, COLOR_WHITE, COLOR_DARK_GRAY, COLOR_GUNMETAL, COLOR_BRONZE, COLOR_BRASS) - -/obj/item/flame/lighter/zippo/on_update_icon() - var/datum/extension/base_icon_state/bis = get_extension(src, /datum/extension/base_icon_state) - - overlays.Cut() - if(lit) - icon_state = "[bis.base_icon_state]_open" - item_state = "[bis.base_icon_state]_open" - overlays += overlay_image(icon, "[bis.base_icon_state]_flame", flags=RESET_COLOR) - else - icon_state = "[bis.base_icon_state]" - item_state = "[bis.base_icon_state]" - -/obj/item/flame/lighter/zippo/light_effects(mob/user) - user.visible_message("Without even breaking stride, [user] flips open and lights [src] in one smooth movement.") - playsound(src.loc, 'sound/items/zippo_open.ogg', 100, 1, -4) - -/obj/item/flame/lighter/zippo/shutoff_effects(mob/user) - user.visible_message("You hear a quiet click, as [user] shuts off [src] without even looking at what they're doing.") - playsound(src.loc, 'sound/items/zippo_close.ogg', 100, 1, -4) - -/obj/item/flame/lighter/zippo/afterattack(obj/O, mob/user, proximity) - if(!proximity) return - if (istype(O, /obj/structure/reagent_dispensers/fueltank) && !lit) - O.reagents.trans_to_obj(src, max_fuel) - to_chat(user, "You refuel [src] from \the [O]") - playsound(src.loc, 'sound/effects/refill.ogg', 50, 1, -6) - -/obj/item/flame/lighter/zippo/black - color = COLOR_DARK_GRAY - name = "black zippo" - -/obj/item/flame/lighter/zippo/gunmetal - color = COLOR_GUNMETAL - name = "gunmetal zippo" - -/obj/item/flame/lighter/zippo/brass - color = COLOR_BRASS - name = "brass zippo" - -/obj/item/flame/lighter/zippo/bronze - color = COLOR_BRONZE - name = "bronze zippo" - -/obj/item/flame/lighter/zippo/pink - color = COLOR_PINK - name = "pink zippo" - -//Spawn using the colour list in the master type -/obj/item/flame/lighter/zippo/random - random_colour = TRUE - -//Legacy icon states for custom items -/obj/item/flame/lighter/zippo/custom/Initialize() - . = ..() - color = null - -/obj/item/flame/lighter/zippo/custom/on_update_icon() - var/datum/extension/base_icon_state/bis = get_extension(src, /datum/extension/base_icon_state) - - if(lit) - icon_state = "[bis.base_icon_state]_on" - item_state = "[bis.base_icon_state]_on" - else - icon_state = "[bis.base_icon_state]" - item_state = "[bis.base_icon_state]" diff --git a/code/game/objects/items/weapons/material/ashtray.dm b/code/game/objects/items/weapons/material/ashtray.dm deleted file mode 100644 index 328f8e1972d60..0000000000000 --- a/code/game/objects/items/weapons/material/ashtray.dm +++ /dev/null @@ -1,76 +0,0 @@ -/obj/item/material/ashtray - name = "ashtray" - desc = "A thing to keep your butts in." - icon = 'icons/obj/objects.dmi' - icon_state = "ashtray" - max_force = 10 - force_multiplier = 0.1 - thrown_force_multiplier = 0.1 - randpixel = 5 - var/max_butts = 10 - -/obj/item/material/ashtray/examine(mob/user) - . = ..() - if(material) - to_chat(user, "It's made of [material.display_name].") - if(contents.len >= max_butts) - to_chat(user, "It's full.") - else if(contents.len) - to_chat(user, "It has [contents.len] cig butts in it.") - -/obj/item/material/ashtray/on_update_icon() - ..() - overlays.Cut() - if (contents.len == max_butts) - overlays |= image('icons/obj/objects.dmi',"ashtray_full") - else if (contents.len >= max_butts/2) - overlays |= image('icons/obj/objects.dmi',"ashtray_half") - -/obj/item/material/ashtray/attackby(obj/item/W as obj, mob/user as mob) - if (health_dead) - return - - if (user.a_intent == I_HURT) - ..() - return - - if (istype(W,/obj/item/trash/cigbutt) || istype(W,/obj/item/clothing/mask/smokable/cigarette) || istype(W, /obj/item/flame/match)) - if (contents.len >= max_butts) - to_chat(user, "\The [src] is full.") - return - - if (istype(W,/obj/item/clothing/mask/smokable/cigarette)) - var/obj/item/clothing/mask/smokable/cigarette/cig = W - if (cig.lit == 1) - visible_message("[user] crushes [cig] in [src], putting it out.") - W = cig.extinguish(no_message = 1) - else if (cig.lit == 0) - to_chat(user, "You place [cig] in [src] without even smoking it. Why would you do that?") - - if(user.unEquip(W, src)) - visible_message("[user] places [W] in [src].") - set_extension(src, /datum/extension/scent/ashtray) - update_icon() - return - - ..() - -/obj/item/material/ashtray/throw_impact(atom/hit_atom) - if (health_max) - if (contents.len) - visible_message("\The [src] slams into [hit_atom], spilling its contents!") - for (var/obj/O in contents) - O.dropInto(loc) - remove_extension(src, /datum/extension/scent) - damage_health(3) - update_icon() - return ..() - -/obj/item/material/ashtray/plastic/New(var/newloc) - ..(newloc, MATERIAL_PLASTIC) - -/obj/item/material/ashtray/bronze/New(var/newloc) - ..(newloc, MATERIAL_BRONZE) - -/obj/item/material/ashtray/glass/New(var/newloc) - ..(newloc, MATERIAL_GLASS) diff --git a/code/game/objects/items/weapons/material/bell.dm b/code/game/objects/items/weapons/material/bell.dm deleted file mode 100644 index 850e0cf95b325..0000000000000 --- a/code/game/objects/items/weapons/material/bell.dm +++ /dev/null @@ -1,43 +0,0 @@ -/obj/item/material/bell - name = "bell" - desc = "A bell to ring to get people's attention. Don't break it." - icon = 'icons/obj/objects.dmi' - icon_state = "bell" - max_force = 5 - force_multiplier = 0.8 - thrown_force_multiplier = 0.3 - hitsound = 'sound/items/oneding.ogg' - default_material = MATERIAL_ALUMINIUM - var/normal_sound = 'sound/items/oneding.ogg' - var/angry_sound = 'sound/items/manydings.ogg' - - -/obj/item/material/bell/attack_hand(mob/living/user) - if (user.a_intent == I_GRAB) - return ..() - else if (user.a_intent == I_HURT) - user.visible_message( - SPAN_WARNING("\The [user] hammers on \a [src]."), - SPAN_WARNING("You hammer on \the [src]."), - SPAN_WARNING("You hear a bell sounding. A lot.") - ) - playsound(src, angry_sound, 60) - else - user.visible_message( - SPAN_ITALIC("\The [user] rings \a [src]."), - SPAN_ITALIC("You ring \the [src]."), - SPAN_WARNING("You hear a bell sounding.") - ) - playsound(src, normal_sound, 20) - flick("bell_dingeth", src) - - -/obj/item/material/bell/apply_hit_effect() - . = ..() - shatter() - - -/obj/item/material/bell/glass - default_material = MATERIAL_GLASS - normal_sound = 'sound/items/tinkly_bell.ogg' - angry_sound = 'sound/items/tinkly_bell_many.ogg' diff --git a/code/game/objects/items/weapons/material/coins.dm b/code/game/objects/items/weapons/material/coins.dm deleted file mode 100644 index 29250e21751e5..0000000000000 --- a/code/game/objects/items/weapons/material/coins.dm +++ /dev/null @@ -1,69 +0,0 @@ -/obj/item/material/coin - name = "coin" - icon = 'icons/obj/coin.dmi' - icon_state = "coin1" - applies_material_colour = TRUE - randpixel = 8 - force = 1 - throwforce = 1 - max_force = 5 - force_multiplier = 0.1 - thrown_force_multiplier = 0.1 - w_class = 1 - slot_flags = SLOT_EARS - var/string_colour - -/obj/item/material/coin/New() - icon_state = "coin[rand(1,10)]" - ..() - -/obj/item/material/coin/on_update_icon() - ..() - if(!isnull(string_colour)) - var/image/I = image(icon = icon, icon_state = "coin_string_overlay") - I.appearance_flags |= RESET_COLOR - I.color = string_colour - overlays += I - else - overlays.Cut() - -/obj/item/material/coin/attackby(var/obj/item/W, var/mob/user) - if(isCoil(W) && isnull(string_colour)) - var/obj/item/stack/cable_coil/CC = W - if(CC.use(1)) - string_colour = CC.color - to_chat(user, SPAN_NOTICE("You attach a string to the coin.")) - update_icon() - return - else if(isWirecutter(W) && !isnull(string_colour)) - new /obj/item/stack/cable_coil/single(get_turf(user)) - string_colour = null - to_chat(user, SPAN_NOTICE("You detach the string from the coin.")) - update_icon() - else ..() - -/obj/item/material/coin/attack_self(var/mob/user) - playsound(user.loc, 'sound/effects/coin_flip.ogg', 75, 1) - user.visible_message(SPAN_NOTICE("\The [user] flips \the [src] into the air and catches it, revealing that it landed on [pick("tails", "heads")]!")) - -// Subtypes. -/obj/item/material/coin/gold - default_material = MATERIAL_GOLD - -/obj/item/material/coin/silver - default_material = MATERIAL_SILVER - -/obj/item/material/coin/diamond - default_material = MATERIAL_DIAMOND - -/obj/item/material/coin/iron - default_material = MATERIAL_IRON - -/obj/item/material/coin/uranium - default_material = MATERIAL_URANIUM - -/obj/item/material/coin/platinum - default_material = MATERIAL_PLATINUM - -/obj/item/material/coin/phoron - default_material = MATERIAL_PHORON diff --git a/code/game/objects/items/weapons/material/folding.dm b/code/game/objects/items/weapons/material/folding.dm deleted file mode 100644 index 251f4f64327c8..0000000000000 --- a/code/game/objects/items/weapons/material/folding.dm +++ /dev/null @@ -1,121 +0,0 @@ - -// folding/locking knives -/obj/item/material/knife/folding - name = "pocketknife" - desc = "A small folding knife." - icon = 'icons/obj/folding_knife.dmi' - icon_state = "knife_preview" - item_state = null - force = 0.2 //force of folded obj - max_force = 10 - max_pen = 0 - force_multiplier = 0.2 - applies_material_colour = FALSE - applies_material_name = FALSE - unbreakable = TRUE - w_class = ITEM_SIZE_SMALL - attack_verb = list("prodded", "tapped") - hitsound = "swing_hit" - edge = FALSE - sharp = FALSE - - var/open = FALSE - var/takes_colour = TRUE - var/hardware_closed = "basic_hardware_closed" - var/hardware_open = "basic_hardware" - var/handle_icon = "basic_handle" - - var/closed_attack_verbs = list("prodded", "tapped") //initial doesn't work with lists, rip - var/valid_colors = list(COLOR_DARK_GRAY, COLOR_RED_GRAY, COLOR_BLUE_GRAY, COLOR_DARK_BLUE_GRAY, COLOR_GREEN_GRAY, COLOR_DARK_GREEN_GRAY) - -/obj/item/material/knife/folding/Initialize() - if(takes_colour) - color = pick(valid_colors) - icon_state = handle_icon - update_icon() - . = ..() - -/obj/item/material/knife/folding/attack_self(mob/user) - open = !open - update_force() - update_icon() - if(open) - user.visible_message("\The [user] opens \the [src].") - playsound(user, 'sound/weapons/flipblade.ogg', 15, 1) - else - user.visible_message("\The [user] closes \the [src].") - add_fingerprint(user) - -/obj/item/material/knife/folding/update_force() - if(open) - edge = TRUE - sharp = TRUE - hitsound = 'sound/weapons/bladeslice.ogg' - w_class = ITEM_SIZE_NORMAL - attack_verb = list("slashed", "stabbed") - attack_cooldown_modifier = -1 - base_parry_chance = 15 - ..() - else - force = initial(force) - edge = initial(edge) - sharp = initial(sharp) - hitsound = initial(hitsound) - w_class = initial(w_class) - attack_verb = closed_attack_verbs - attack_cooldown_modifier = initial(attack_cooldown_modifier) - base_parry_chance = initial(base_parry_chance) - -/obj/item/material/knife/folding/on_update_icon() - if(open) - overlays.Cut() - overlays += overlay_image(icon, hardware_open, flags=RESET_COLOR) - item_state = "knife" - else - overlays.Cut() - overlays += overlay_image(icon, hardware_closed, flags=RESET_COLOR) - item_state = initial(item_state) - if(blood_overlay) - overlays += blood_overlay - -//Subtypes -/obj/item/material/knife/folding/wood - name = "peasant knife" - desc = "A small folding knife with a wooden handle and carbon steel blade. Knives like this have been used on Earth for centuries." - hardware_closed = "peasant_hardware_closed" - hardware_open = "peasant_hardware" - handle_icon = "peasant_handle" - valid_colors = list(WOOD_COLOR_GENERIC, WOOD_COLOR_RICH, WOOD_COLOR_BLACK, WOOD_COLOR_CHOCOLATE, WOOD_COLOR_PALE) - -/obj/item/material/knife/folding/tacticool - name = "folding knife" - desc = "A small folding knife with a polymer handle and a blackened steel blade. These are typically marketed for self defense purposes." - hardware_closed = "tacticool_hardware_closed" - hardware_open = "tacticool_hardware" - handle_icon = "tacticool_handle" - valid_colors = list("#0f0f2a", "#2a0f0f", "#0f2a0f", COLOR_GRAY20, COLOR_DARK_GUNMETAL) - -/obj/item/material/knife/folding/combat //master obj - name = "the concept of a fighting knife in which the blade can be stowed in its own handle" - desc = "This is a master item - berate the admin or mapper who spawned this!" - max_force = 15 - max_pen = 30 - force_multiplier = 0.25 - thrown_force_multiplier = 0.25 - takes_colour = FALSE - worth_multiplier = 8 - base_parry_chance = 30 - -/obj/item/material/knife/folding/combat/balisong - name = "butterfly knife" - desc = "A basic metal blade concealed in a lightweight plasteel grip. Small enough when folded to fit in a pocket." - hardware_closed = "bfly_hardware_closed" - hardware_open = "bfly_hardware" - handle_icon = "bfly_handle" - -/obj/item/material/knife/folding/combat/switchblade - name = "switchblade" - desc = "A classic switchblade with gold engraving. Just holding it makes you feel like a gangster." - hardware_closed = "switch_hardware_closed" - hardware_open = "switch_hardware" - handle_icon = "switch_handle" diff --git a/code/game/objects/items/weapons/material/kitchen.dm b/code/game/objects/items/weapons/material/kitchen.dm deleted file mode 100644 index 4cfc18bd707e5..0000000000000 --- a/code/game/objects/items/weapons/material/kitchen.dm +++ /dev/null @@ -1,152 +0,0 @@ -/obj/item/material/kitchen - icon = 'icons/obj/kitchen.dmi' - worth_multiplier = 1.1 - -/* - * Utensils - */ -/obj/item/material/kitchen/utensil - w_class = ITEM_SIZE_TINY - thrown_force_multiplier = 1 - origin_tech = list(TECH_MATERIAL = 1) - attack_verb = list("attacked", "stabbed", "poked") - max_force = 5 - force_multiplier = 0.1 // 6 when wielded with hardness 60 (steel) - thrown_force_multiplier = 0.25 // 5 when thrown with weight 20 (steel) - default_material = MATERIAL_ALUMINIUM - - var/loaded //Descriptive string for currently loaded food object. - var/scoop_food = 1 - -/obj/item/material/kitchen/utensil/New() - ..() - if (prob(60)) - src.pixel_y = rand(0, 4) - create_reagents(5) - return - -/obj/item/material/kitchen/utensil/attack(mob/living/carbon/M as mob, mob/living/carbon/user as mob) - if(!istype(M)) - return ..() - - if(user.a_intent != I_HELP) - if(user.zone_sel.selecting == BP_HEAD || user.zone_sel.selecting == BP_EYES) - if((MUTATION_CLUMSY in user.mutations) && prob(50)) - M = user - return eyestab(M,user) - else - return ..() - - if (reagents.total_volume > 0) - if(M == user) - if(!M.can_eat(loaded)) - return - switch(M.get_fullness()) - if (0 to 50) - to_chat(M, SPAN_DANGER("You ravenously stick \the [src] into your mouth and gobble the food!")) - if (50 to 150) - to_chat(M, SPAN_NOTICE("You hungrily chew the food on \the [src].")) - if (150 to 350) - to_chat(M, SPAN_NOTICE("You chew the food on \the [src].")) - if (350 to 550) - to_chat(M, SPAN_NOTICE("You unwillingly chew the food on \the [src].")) - if (550 to INFINITY) - to_chat(M, SPAN_WARNING("You cannot take one more bite from \the [src]!")) - return - - else - user.visible_message("\The [user] begins to feed \the [M]!") - if(!M.can_force_feed(user, loaded) || !do_after(user, 5 SECONDS, M, DO_PUBLIC_UNIQUE)) - return - - if (user.get_active_hand() != src) - return - M.visible_message("\The [user] feeds some [loaded] to \the [M] with \the [src].") - reagents.trans_to_mob(M, reagents.total_volume, CHEM_INGEST) - playsound(M.loc,'sound/items/eatfood.ogg', rand(10,40), 1) - overlays.Cut() - return - else - to_chat(user, "You don't have anything on \the [src].")//if we have help intent and no food scooped up DON'T STAB OURSELVES WITH THE FORK - return - - -/obj/item/material/kitchen/utensil/fork - name = "fork" - desc = "It's a fork. Sure is pointy." - icon_state = "fork" - -/obj/item/material/kitchen/utensil/fork/plastic/default_material = MATERIAL_PLASTIC -/obj/item/material/kitchen/utensil/fork/silver/default_material = MATERIAL_SILVER -/obj/item/material/kitchen/utensil/fork/titanium/default_material = MATERIAL_TITANIUM - - -/obj/item/material/kitchen/utensil/spoon - name = "spoon" - desc = "It's a spoon. You can see your own upside-down face in it." - icon_state = "spoon" - attack_verb = list("attacked", "poked") - force_multiplier = 0.1 //2 when wielded with weight 20 (steel) - -/obj/item/material/kitchen/utensil/spoon/plastic/default_material = MATERIAL_PLASTIC -/obj/item/material/kitchen/utensil/spoon/silver/default_material = MATERIAL_SILVER -/obj/item/material/kitchen/utensil/spoon/titanium/default_material = MATERIAL_TITANIUM - - -/obj/item/material/kitchen/utensil/spork - name = "spork" - desc = "It's a spork. It's much like a fork, but much blunter." - icon_state = "spork" - -/obj/item/material/kitchen/utensil/spork/plastic/default_material = MATERIAL_PLASTIC -/obj/item/material/kitchen/utensil/spork/silver/default_material = MATERIAL_SILVER -/obj/item/material/kitchen/utensil/spork/titanium/default_material = MATERIAL_TITANIUM - - -/obj/item/material/kitchen/utensil/foon - name = "foon" - desc = "It's a foon. It's much like a spoon, but much sharper." - icon_state = "foon" - -/obj/item/material/kitchen/utensil/foon/plastic/default_material = MATERIAL_PLASTIC -/obj/item/material/kitchen/utensil/foon/silver/default_material = MATERIAL_SILVER -/obj/item/material/kitchen/utensil/foon/titanium/default_material = MATERIAL_TITANIUM - - -/obj/item/storage/box/silverware - name = "silverware box" - startswith = list( - /obj/item/material/knife/table/silver = 4, - /obj/item/material/kitchen/utensil/fork/silver = 4, - /obj/item/material/kitchen/utensil/spoon/silver = 4 - ) - - /* - * Rolling Pins - */ - -/obj/item/material/kitchen/rollingpin - name = "rolling pin" - desc = "Used to knock out the Bartender." - icon_state = "rolling_pin" - attack_verb = list("bashed", "battered", "bludgeoned", "thrashed", "whacked") - default_material = MATERIAL_WOOD - max_force = 15 - force_multiplier = 0.7 // 10 when wielded with weight 15 (wood) - thrown_force_multiplier = 1 // as above - -/obj/item/material/kitchen/rollingpin/plastic/default_material = MATERIAL_PLASTIC -/obj/item/material/kitchen/rollingpin/aluminium/default_material = MATERIAL_ALUMINIUM - - -/obj/item/material/kitchen/rollingpin/attack(mob/living/target, mob/living/user) - if ((MUTATION_CLUMSY in user.mutations) && prob(50) && user.unEquip(src)) - user.visible_message( - SPAN_WARNING("\The [user] manages to hit \himself on the head with \the [src]!"), - SPAN_WARNING("\The [src] slips out of your hand and hits your head!"), - SPAN_WARNING("Bonk!") - ) - user.take_organ_damage(10, 0) - user.Paralyse(2) - return - return ..() diff --git a/code/game/objects/items/weapons/material/knives.dm b/code/game/objects/items/weapons/material/knives.dm deleted file mode 100644 index 39dcbabf08a8d..0000000000000 --- a/code/game/objects/items/weapons/material/knives.dm +++ /dev/null @@ -1,118 +0,0 @@ -//knives for stabbing and slashing and so on and so forth -/obj/item/material/knife //master obj - name = "the concept of a knife" - desc = "You call that a knife? This is a master item - berate the admin or mapper who spawned this!" - icon = 'icons/obj/knife.dmi' - icon_state = "knife" - item_state = "knife" - max_force = 15 - force_multiplier = 0.3 - base_parry_chance = 15 - attack_verb = list("slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut") - matter = list(MATERIAL_STEEL = 12000) - origin_tech = list(TECH_MATERIAL = 1) - unbreakable = TRUE - obj_flags = OBJ_FLAG_CONDUCTIBLE - sharp = TRUE - edge = TRUE - item_flags = ITEM_FLAG_CAN_HIDE_IN_SHOES - -/obj/item/material/knife/attack(mob/living/carbon/M, mob/living/carbon/user, target_zone) - if(!istype(M)) - return ..() - - if(user.a_intent != I_HELP) - if(target_zone == BP_EYES) - if((MUTATION_CLUMSY in user.mutations) && prob(50)) - M = user - return eyestab(M, user) - - return ..() - -//table knives -/obj/item/material/knife/table - name = "table knife" - desc = "A simple table knife, used to cut up individual portions of food." - icon_state = "table" - default_material = MATERIAL_ALUMINIUM - max_force = 7 - force_multiplier = 0.1 - sharp = FALSE - attack_verb = list("prodded") - applies_material_name = FALSE - w_class = ITEM_SIZE_TINY - -/obj/item/material/knife/table/plastic/default_material = MATERIAL_PLASTIC -/obj/item/material/knife/table/silver/default_material = MATERIAL_SILVER -/obj/item/material/knife/table/titanium/default_material = MATERIAL_TITANIUM - - -/obj/item/material/knife/unathi - name = "dueling knife" - desc = "A length of leather-bound wood studded with razor-sharp teeth. How crude." - icon_state = "unathiknife" - default_material = MATERIAL_WOOD - applies_material_name = FALSE - applies_material_colour = FALSE - w_class = ITEM_SIZE_NORMAL - -//kitchen knives -/obj/item/material/knife/kitchen - name = "kitchen knife" - icon_state = "kitchenknife" - desc = "A general purpose chef's knife made by SpaceCook Incorporated. Guaranteed to stay sharp for years to come." - applies_material_name = FALSE - -/obj/item/material/knife/kitchen/cleaver - name = "butcher's cleaver" - desc = "A heavy blade used to process food, especially animal carcasses." - icon_state = "butch" - armor_penetration = 5 - force_multiplier = 0.18 - attack_verb = list("cleaved", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut") - -/obj/item/material/knife/kitchen/cleaver/bronze - name = "master chef's cleaver" - desc = "A heavy blade used to process food. This one is so fancy, it must be for a truly exceptional chef. There aren't any here, so what it's doing here is anyone's guess." - default_material = MATERIAL_BRONZE - force_multiplier = 1 //25 with material bronze - -//fighting knives -/obj/item/material/knife/combat - name = "combat knife" - desc = "A blade with a saw-like pattern on the reverse edge and a heavy handle." - icon_state = "tacknife" - force_multiplier = 0.2 - base_parry_chance = 30 - w_class = ITEM_SIZE_SMALL - -//random stuff -/obj/item/material/knife/hook - name = "meat hook" - desc = "A sharp, metal hook what sticks into things." - icon_state = "hook_knife" - item_state = "hook_knife" - sharp = FALSE - -/obj/item/material/knife/ritual - name = "ritual knife" - desc = "The unearthly energies that once powered this blade are now dormant." - icon = 'icons/obj/wizard.dmi' - icon_state = "render" - base_parry_chance = 30 - applies_material_colour = FALSE - applies_material_name = FALSE - -//Utility knives -/obj/item/material/knife/utility - name = "utility knife" - desc = "An utility knife with a polymer handle, commonly used through human space." - icon_state = "utility" - max_force = 10 - force_multiplier = 0.2 - w_class = ITEM_SIZE_SMALL - -/obj/item/material/knife/utility/lightweight - name = "lightweight utility knife" - desc = "A lightweight utility knife made out of a steel alloy." - icon_state = "titanium" diff --git a/code/game/objects/items/weapons/material/material_weapons.dm b/code/game/objects/items/weapons/material/material_weapons.dm deleted file mode 100644 index c07ae93da4154..0000000000000 --- a/code/game/objects/items/weapons/material/material_weapons.dm +++ /dev/null @@ -1,125 +0,0 @@ -// SEE code/modules/materials/materials.dm FOR DETAILS ON INHERITED DATUM. -// This class of weapons takes force and appearance data from a material datum. -// They are also fragile based on material data and many can break/smash apart. -/obj/item/material - hitsound = 'sound/weapons/bladeslice.ogg' - gender = NEUTER - throw_speed = 3 - throw_range = 7 - w_class = ITEM_SIZE_NORMAL - health_max = 10 - - var/default_material = MATERIAL_STEEL - var/material/material - - var/applies_material_colour = 1 - var/applies_material_name = 1 //if false, does not rename item to 'material item.name' - var/furniture_icon //icon states for non-material colorable overlay, i.e. handles - - var/max_force = 40 //any damage above this is added to armor penetration value - var/max_pen = 100 //any penetration above this value is ignored - var/force_multiplier = 0.5 // multiplier to material's generic damage value for this specific type of weapon - var/thrown_force_multiplier = 0.5 - - var/attack_cooldown_modifier = 0 - var/unbreakable - var/drops_debris = 1 - var/worth_multiplier = 1 - - -/obj/item/material/New(var/newloc, var/material_key) - if(!material_key) - material_key = default_material - set_material(material_key) - ..(newloc) - queue_icon_update() - if(!material) - qdel(src) - return - - matter = material.get_matter() - if(matter.len) - for(var/material_type in matter) - if(!isnull(matter[material_type])) - matter[material_type] *= force_multiplier // May require a new var instead. - -/obj/item/material/get_material() - return material - -/obj/item/material/proc/update_force() - var/new_force - if(edge || sharp) - new_force = material.get_edge_damage() - else - new_force = material.get_blunt_damage() - new_force = round(new_force*force_multiplier) - force = min(new_force, max_force) - - if(new_force > max_force) - armor_penetration = initial(armor_penetration) + new_force - max_force - armor_penetration += 2*max(0, material.brute_armor - 2) - armor_penetration = min(max_pen, armor_penetration) - - throwforce = round(material.get_blunt_damage()*thrown_force_multiplier) - attack_cooldown = material.get_attack_cooldown() + attack_cooldown_modifier - //spawn(1) -// log_debug("[src] has force [force] and throwforce [throwforce] when made from default material [material.name]") - -/obj/item/material/proc/set_material(var/new_material) - material = SSmaterials.get_material_by_name(new_material) - if(!material) - qdel(src) - else - set_max_health(round(material.integrity / 5)) - restore_health(get_max_health()) - if(material.products_need_process()) - START_PROCESSING(SSobj, src) - if(material.conductive) - obj_flags |= OBJ_FLAG_CONDUCTIBLE - else - obj_flags &= (~OBJ_FLAG_CONDUCTIBLE) - update_force() - if(applies_material_name) - SetName("[material.display_name] [initial(name)]") - update_icon() - -/obj/item/material/on_update_icon() - overlays.Cut() - if(applies_material_colour && istype(material)) - color = material.icon_colour - alpha = 100 + material.opacity * 255 - if(furniture_icon) - var/image/I = image(icon, icon_state = furniture_icon) - I.appearance_flags = DEFAULT_APPEARANCE_FLAGS | RESET_COLOR - overlays += I - -/obj/item/material/Destroy() - STOP_PROCESSING(SSobj, src) - . = ..() - -/obj/item/material/apply_hit_effect(mob/living/target, mob/living/user, var/hit_zone) - . = ..() - if(material.is_brittle() || target.get_blocked_ratio(hit_zone, DAMAGE_BRUTE, damage_flags(), armor_penetration, force) * 100 >= material.hardness/5) - check_shatter() - -/obj/item/material/on_parry(damage_source) - if(istype(damage_source, /obj/item/material)) - check_shatter() - -/obj/item/material/proc/check_shatter() - if(!unbreakable && prob(material.hardness)) - if(material.is_brittle()) - kill_health() - else - damage_health(1) - -/obj/item/material/on_death() - shatter() - -/obj/item/material/proc/shatter() - var/turf/T = get_turf(src) - T.visible_message("\The [src] [material.destruction_desc]!") - playsound(src, "shatter", 70, 1) - if(drops_debris) - material.place_shard(T) - qdel(src) diff --git a/code/game/objects/items/weapons/material/misc.dm b/code/game/objects/items/weapons/material/misc.dm deleted file mode 100644 index edefb6c3648a2..0000000000000 --- a/code/game/objects/items/weapons/material/misc.dm +++ /dev/null @@ -1,157 +0,0 @@ -/obj/item/material/harpoon - name = "harpoon" - desc = "A short throwing spear with a deep barb, specifically designed to embed itself in its target." - sharp = TRUE - edge = TRUE - icon = 'icons/obj/weapons/melee_physical.dmi' - icon_state = "harpoon" - item_state = "harpoon" - max_force = 20 - force_multiplier = 0.3 // 18 with hardness 60 (steel) - thrown_force_multiplier = 1.8 - attack_verb = list("jabbed","stabbed","ripped") - does_spin = FALSE - w_class = 5 - throw_speed = 6 - var/spent - worth_multiplier = 15 - - -/obj/item/material/harpoon/bomb - name = "explosive harpoon" - desc = "A short throwing spear with a deep barb and an explosive fitted in the head. Traditionally fired from some kind of cannon to harvest big game." - icon = 'icons/obj/weapons/other.dmi' - icon_state = "harpoon_bomb" - -/obj/item/material/harpoon/bomb/has_embedded() - if(spent) - return - audible_message(SPAN_WARNING("\The [src] emits a long, harsh tone!")) - playsound(loc, 'sound/weapons/bombwhine.ogg', 100, 0, -3) - addtimer(CALLBACK(src, .proc/harpoon_detonate), 4 SECONDS) //for suspense - -/obj/item/material/harpoon/bomb/proc/harpoon_detonate() - audible_message(SPAN_DANGER("\The [src] detonates!")) //an actual sound will be handled by explosion() - var/turf/T = get_turf(src) - explosion(T, 0, 0, 2, 0, 1, UP|DOWN, 1) - fragmentate(T, 4, 2) - handle_afterbomb() - -/obj/item/material/harpoon/bomb/proc/handle_afterbomb() - spent = TRUE - SetName("broken harpoon") - desc = "A short spear with just a barb - if it once had a spearhead, it doesn't any more." - icon_state = "harpoon_bomb_spent" - force_multiplier = 0.1 - thrown_force_multiplier = 0.3 - sharp = FALSE - edge = FALSE - worth_multiplier = 6 - -/obj/item/material/hatchet - name = "hatchet" - desc = "A very sharp axe blade upon a short fibremetal handle. It has a long history of chopping things, but now it is used for chopping wood." - icon = 'icons/obj/weapons/melee_physical.dmi' - icon_state = "hatchet" - max_force = 15 - force_multiplier = 0.2 // 12 with hardness 60 (steel) - thrown_force_multiplier = 0.75 // 15 with weight 20 (steel) - w_class = ITEM_SIZE_SMALL - sharp = TRUE - edge = TRUE - origin_tech = list(TECH_MATERIAL = 2, TECH_COMBAT = 1) - attack_verb = list("chopped", "torn", "cut") - applies_material_colour = 0 - hitsound = "chop" - -/obj/item/material/hatchet/unbreakable - unbreakable = TRUE - -/obj/item/material/hatchet/machete - name = "machete" - desc = "A long, sturdy blade with a rugged handle. Leading the way to cursed treasures since before space travel." - icon = 'icons/obj/weapons/melee_physical.dmi' - item_state = "machete" - w_class = ITEM_SIZE_NORMAL - slot_flags = SLOT_BELT - default_material = MATERIAL_TITANIUM - base_parry_chance = 50 - attack_cooldown_modifier = 1 - max_force = 20 - force_multiplier = 0.2 - -/obj/item/material/hatchet/machete/unbreakable - unbreakable = TRUE - -/obj/item/material/hatchet/machete/steel - name = "fabricated machete" - desc = "A long, machine-stamped blade with a somewhat ungainly handle. Found in military surplus stores, malls, and horror movies since before interstellar travel." - default_material = MATERIAL_STEEL - base_parry_chance = 40 - matter = list(MATERIAL_STEEL = 15000, MATERIAL_PLASTIC = 2500) - -/obj/item/material/hatchet/machete/Initialize() - icon_state = "machete[pick("","_red","_blue", "_black", "_olive")]" - . = ..() - -/obj/item/material/hatchet/machete/deluxe - name = "deluxe machete" - desc = "A fine example of a machete, with a polished blade, wooden handle and a leather cord loop." - -/obj/item/material/hatchet/machete/deluxe/Initialize() - . = ..() - icon_state = "machetedx" - -/obj/item/material/minihoe // -- Numbers - name = "mini hoe" - desc = "It's used for removing weeds or scratching your back." - icon = 'icons/obj/weapons/melee_physical.dmi' - icon_state = "hoe" - item_state = "hoe" - max_force = 5 - force_multiplier = 0.25 // 5 with weight 20 (steel) - thrown_force_multiplier = 0.25 // as above - w_class = ITEM_SIZE_SMALL - attack_verb = list("slashed", "sliced", "cut", "clawed") - -/obj/item/material/minihoe/unbreakable - unbreakable = TRUE - -/obj/item/material/scythe - icon = 'icons/obj/weapons/melee_physical.dmi' - icon_state = "scythe0" - name = "scythe" - desc = "A sharp and curved blade on a long fibremetal handle, this tool makes it easy to reap what you sow." - max_force = 15 - force_multiplier = 0.275 // 16 with hardness 60 (steel) - thrown_force_multiplier = 0.25 // 5 with weight 20 (steel) - sharp = TRUE - edge = TRUE - throw_speed = 1 - throw_range = 3 - w_class = ITEM_SIZE_HUGE - slot_flags = SLOT_BACK - origin_tech = list(TECH_MATERIAL = 2, TECH_COMBAT = 2) - attack_verb = list("chopped", "sliced", "cut", "reaped") - worth_multiplier = 20 - - -/obj/item/material/cross - name = "cross" - desc = "It's a cross, commonly used as a holy symbol by Christians." - icon = 'icons/obj/weapons/other.dmi' - icon_state = "cross" - max_force = 5 - force_multiplier = 0.1 - thrown_force_multiplier = 0.1 - w_class = ITEM_SIZE_SMALL - attack_verb = list("attacked", "bashed") - -/obj/item/material/cross/wood - default_material = MATERIAL_WOOD - -/obj/item/material/cross/silver - default_material = MATERIAL_SILVER - -/obj/item/material/cross/gold - default_material = MATERIAL_GOLD diff --git a/code/game/objects/items/weapons/material/shards.dm b/code/game/objects/items/weapons/material/shards.dm deleted file mode 100644 index 4880236403c4d..0000000000000 --- a/code/game/objects/items/weapons/material/shards.dm +++ /dev/null @@ -1,112 +0,0 @@ -// Glass shards - -/obj/item/material/shard - name = "shard" - icon = 'icons/obj/shards.dmi' - desc = "Made of nothing. How does this even exist?" // set based on material, if this desc is visible it's a bug (shards default to being made of glass) - icon_state = "large" - randpixel = 8 - sharp = TRUE - edge = TRUE - w_class = ITEM_SIZE_SMALL - max_force = 8 - force_multiplier = 0.12 // 6 with hardness 30 (glass) - thrown_force_multiplier = 0.4 // 4 with weight 15 (glass) - item_state = "shard-glass" - attack_verb = list("stabbed", "slashed", "sliced", "cut") - default_material = MATERIAL_GLASS - unbreakable = 1 //It's already broken. - drops_debris = 0 - item_flags = ITEM_FLAG_CAN_HIDE_IN_SHOES - -/obj/item/material/shard/set_material(var/new_material) - ..(new_material) - if(!istype(material)) - return - - icon_state = "[material.shard_icon][pick("large", "medium", "small")]" - update_icon() - - if(material.shard_type) - SetName("[material.display_name] [material.shard_type]") - desc = "A small piece of [material.display_name]. It looks sharp, you wouldn't want to step on it barefoot. Could probably be used as ... a throwing weapon?" - switch(material.shard_type) - if(SHARD_SPLINTER, SHARD_SHRAPNEL) - gender = PLURAL - else - gender = NEUTER - else - qdel(src) - -/obj/item/material/shard/on_update_icon() - if(material) - color = material.icon_colour - // 1-(1-x)^2, so that glass shards with 0.3 opacity end up somewhat visible at 0.51 opacity - alpha = 255 * (1 - (1 - material.opacity)*(1 - material.opacity)) - else - color = "#ffffff" - alpha = 255 - -/obj/item/material/shard/attackby(obj/item/W as obj, mob/user as mob) - if(isWelder(W) && material.shard_can_repair) - var/obj/item/weldingtool/WT = W - if(WT.remove_fuel(0, user)) - material.place_sheet(loc) - qdel(src) - return - return ..() - -/obj/item/material/shard/Crossed(AM as mob|obj) - ..() - if(isliving(AM)) - var/mob/M = AM - - if(M.buckled) //wheelchairs, office chairs, rollerbeds - return - - playsound(src.loc, 'sound/effects/glass_step.ogg', 50, 1) // not sure how to handle metal shards with sounds - if(ishuman(M)) - var/mob/living/carbon/human/H = M - - if(H.species.siemens_coefficient<0.5 || (H.species.species_flags & (SPECIES_FLAG_NO_EMBED|SPECIES_FLAG_NO_MINOR_CUT))) //Thick skin. - return - - if( H.shoes || ( H.wear_suit && (H.wear_suit.body_parts_covered & FEET) ) ) - return - - to_chat(M, "You step on \the [src]!") - - var/list/check = list(BP_L_FOOT, BP_R_FOOT) - while(check.len) - var/picked = pick(check) - var/obj/item/organ/external/affecting = H.get_organ(picked) - if(affecting) - if(BP_IS_ROBOTIC(affecting)) - return - affecting.take_external_damage(5, 0) - H.updatehealth() - if(affecting.can_feel_pain()) - H.Weaken(3) - return - check -= picked - return - - -/obj/item/material/shard/phoron/default_material = MATERIAL_PHORON_GLASS - - -/obj/item/material/shard/shrapnel/name = "shrapnel" -/obj/item/material/shard/shrapnel/w_class = ITEM_SIZE_TINY -/obj/item/material/shard/shrapnel/item_flags = EMPTY_BITFIELD - - -/obj/item/material/shard/shrapnel/steel/default_material = MATERIAL_STEEL - - -/obj/item/material/shard/shrapnel/titanium/default_material = MATERIAL_TITANIUM - - -/obj/item/material/shard/shrapnel/aluminium/default_material = MATERIAL_ALUMINIUM - - -/obj/item/material/shard/shrapnel/copper/default_material = MATERIAL_COPPER diff --git a/code/game/objects/items/weapons/material/stick.dm b/code/game/objects/items/weapons/material/stick.dm deleted file mode 100644 index a86643e338b11..0000000000000 --- a/code/game/objects/items/weapons/material/stick.dm +++ /dev/null @@ -1,37 +0,0 @@ -/obj/item/material/stick - name = "stick" - desc = "You feel the urge to poke someone with this." - icon = 'icons/obj/weapons/melee_physical.dmi' - icon_state = "stick" - item_state = "stickmat" - max_force = 10 - force_multiplier = 0.1 - thrown_force_multiplier = 0.1 - w_class = ITEM_SIZE_NORMAL - default_material = MATERIAL_WOOD - attack_verb = list("poked", "jabbed") - - -/obj/item/material/stick/attack_self(mob/user as mob) - user.visible_message("\The [user] snaps [src].", "You snap [src].") - shatter(0) - - -/obj/item/material/stick/attackby(obj/item/W as obj, mob/user as mob) - if(W.sharp && W.edge && !sharp) - user.visible_message("[user] sharpens [src] with [W].", "You sharpen [src] using [W].") - sharp = TRUE - SetName("sharpened " + name) - update_force() - return ..() - - -/obj/item/material/stick/attack(mob/M, mob/user) - if(user != M && user.a_intent == I_HELP) - //Playful poking is its own thing - user.visible_message("[user] pokes [M] with [src].", "You poke [M] with [src].") - //Consider adding a check to see if target is dead - user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN) - user.do_attack_animation(M) - return - return ..() diff --git a/code/game/objects/items/weapons/material/swiss.dm b/code/game/objects/items/weapons/material/swiss.dm deleted file mode 100644 index 41630bb28446e..0000000000000 --- a/code/game/objects/items/weapons/material/swiss.dm +++ /dev/null @@ -1,170 +0,0 @@ -#define SWISSKNF_CLOSED "Close" -#define SWISSKNF_LBLADE "Large Blade" -#define SWISSKNF_SBLADE "Small Blade" -#define SWISSKNF_CLIFTER "Cap Lifter-Screwdriver" -#define SWISSKNF_COPENER "Can Opener-Screwdriver" -#define SWISSKNF_CSCREW "Corkscrew" -#define SWISSKNF_GBLADE "Glass Cutter" -#define SWISSKNF_WCUTTER "Wirecutters" -#define SWISSKNF_WBLADE "Wood Saw" -#define SWISSKNF_CROWBAR "Pry Bar" - -/obj/item/material/knife/folding/swiss - name = "combi-knife" - desc = "A small, colourable, multi-purpose folding knife." - icon = 'icons/obj/swiss_knife.dmi' - icon_state = "swissknf_closed" - handle_icon = "swissknf_handle" - takes_colour = FALSE - valid_colors = null - max_force = 10 - - var/active_tool = SWISSKNF_CLOSED - var/tools = list(SWISSKNF_LBLADE, SWISSKNF_CLIFTER, SWISSKNF_COPENER) - var/can_use_tools = FALSE - var/sharp_tools = list(SWISSKNF_LBLADE, SWISSKNF_SBLADE, SWISSKNF_GBLADE, SWISSKNF_WBLADE) - -/obj/item/material/knife/folding/swiss/attack_self(mob/user) - var/choice - if(user.a_intent != I_HELP && ((SWISSKNF_LBLADE in tools) || (SWISSKNF_SBLADE in tools)) && active_tool == SWISSKNF_CLOSED) - open = TRUE - if(SWISSKNF_LBLADE in tools) - choice = SWISSKNF_LBLADE - else - choice = SWISSKNF_SBLADE - else - if(active_tool == SWISSKNF_CLOSED) - choice = input("Select a tool to open.","Knife") as null|anything in tools|SWISSKNF_CLOSED - else - choice = SWISSKNF_CLOSED - open = FALSE - - if(!choice || !CanPhysicallyInteract(user)) - return - if(choice == SWISSKNF_CLOSED) - open = FALSE - user.visible_message("\The [user] closes the [name].") - else - open = TRUE - if(choice == SWISSKNF_LBLADE || choice == SWISSKNF_SBLADE) - user.visible_message("\The [user] opens the [lowertext(choice)].") - playsound(user, 'sound/weapons/flipblade.ogg', 15, 1) - else - user.visible_message("\The [user] opens the [lowertext(choice)].") - - active_tool = choice - update_force() - update_icon() - add_fingerprint(user) - -/obj/item/material/knife/folding/swiss/examine(mob/user) - . = ..() - to_chat(user, active_tool == SWISSKNF_CLOSED ? "It is closed." : "Its [lowertext(active_tool)] is folded out.") - -/obj/item/material/knife/folding/swiss/update_force() - if(active_tool in sharp_tools) - ..() - if(active_tool == SWISSKNF_GBLADE) - siemens_coefficient = 0 - else - siemens_coefficient = initial(siemens_coefficient) - else - force = initial(force) - edge = initial(edge) - sharp = initial(sharp) - hitsound = initial(hitsound) - attack_verb = closed_attack_verbs - siemens_coefficient = initial(siemens_coefficient) - if(active_tool == SWISSKNF_CLOSED) - w_class = initial(w_class) - else - w_class = ITEM_SIZE_NORMAL - -/obj/item/material/knife/folding/swiss/on_update_icon() - if(active_tool != null) - overlays.Cut() - overlays += overlay_image(icon, active_tool, flags=RESET_COLOR) - item_state = initial(item_state) - if(active_tool == SWISSKNF_LBLADE || active_tool == SWISSKNF_SBLADE) - item_state = "knife" - if(blood_overlay) - overlays += blood_overlay - -/obj/item/material/knife/folding/swiss/IsCrowbar() - return active_tool == SWISSKNF_CROWBAR && can_use_tools - -/obj/item/material/knife/folding/swiss/IsScrewdriver() - return (active_tool == SWISSKNF_CLIFTER || active_tool == SWISSKNF_COPENER) && can_use_tools - -/obj/item/material/knife/folding/swiss/IsWirecutter() - return active_tool == SWISSKNF_WCUTTER && can_use_tools - -/obj/item/material/knife/folding/swiss/IsHatchet() - return active_tool == SWISSKNF_WBLADE - -/obj/item/material/knife/folding/swiss/resolve_attackby(obj/target, mob/user) - if((istype(target, /obj/structure/window) || istype(target, /obj/structure/grille)) && active_tool == SWISSKNF_GBLADE) - force = force * 8 - . = ..() - update_force() - return - if(istype(target, /obj/item)) - if(target.w_class <= ITEM_SIZE_NORMAL) - can_use_tools = TRUE - . = ..() - can_use_tools = FALSE - return - return ..() - -/obj/item/material/knife/folding/swiss/officer - name = "officer's combi-knife" - desc = "A small, blue, multi-purpose folding knife. This one adds a corkscrew." - color = COLOR_COMMAND_BLUE - - tools = list(SWISSKNF_LBLADE, SWISSKNF_CLIFTER, SWISSKNF_COPENER, SWISSKNF_CSCREW) - -/obj/item/material/knife/folding/swiss/sec - name = "Master-At-Arms' combi-knife" - desc = "A small, red, multi-purpose folding knife. This one adds no special tools." - color = COLOR_NT_RED - - tools = list(SWISSKNF_LBLADE, SWISSKNF_CLIFTER, SWISSKNF_COPENER) - -/obj/item/material/knife/folding/swiss/medic - name = "medic's combi-knife" - desc = "A small, green, multi-purpose folding knife. This one adds a smaller blade in place of the large blade and a glass cutter." - color = COLOR_OFF_WHITE - - tools = list(SWISSKNF_SBLADE, SWISSKNF_CLIFTER, SWISSKNF_COPENER, SWISSKNF_GBLADE) - -/obj/item/material/knife/folding/swiss/engineer - name = "engineer's combi-knife" - desc = "A small, yellow, multi-purpose folding knife. This one adds a wood saw and wire cutters." - color = COLOR_AMBER - - tools = list(SWISSKNF_LBLADE, SWISSKNF_SBLADE, SWISSKNF_CLIFTER, SWISSKNF_COPENER, SWISSKNF_WBLADE, SWISSKNF_WCUTTER) - -/obj/item/material/knife/folding/swiss/explorer - name = "explorer's combi-knife" - desc = "A small, purple, multi-purpose folding knife. This one adds a wood saw and pry bar." - color = COLOR_PURPLE - - tools = list(SWISSKNF_LBLADE, SWISSKNF_SBLADE, SWISSKNF_CLIFTER, SWISSKNF_COPENER, SWISSKNF_WBLADE, SWISSKNF_CROWBAR) - -/obj/item/material/knife/folding/swiss/loot - name = "black combi-knife" - desc = "A small, silver, multi-purpose folding knife. This one adds a small blade and corkscrew." - color = COLOR_TITANIUM - - tools = list(SWISSKNF_LBLADE, SWISSKNF_SBLADE, SWISSKNF_CLIFTER, SWISSKNF_COPENER, SWISSKNF_CSCREW) - -#undef SWISSKNF_CLOSED -#undef SWISSKNF_LBLADE -#undef SWISSKNF_SBLADE -#undef SWISSKNF_CLIFTER -#undef SWISSKNF_COPENER -#undef SWISSKNF_CSCREW -#undef SWISSKNF_GBLADE -#undef SWISSKNF_WCUTTER -#undef SWISSKNF_WBLADE -#undef SWISSKNF_CROWBAR diff --git a/code/game/objects/items/weapons/material/swords.dm b/code/game/objects/items/weapons/material/swords.dm deleted file mode 100644 index a6994d13b8669..0000000000000 --- a/code/game/objects/items/weapons/material/swords.dm +++ /dev/null @@ -1,52 +0,0 @@ -/obj/item/material/sword - name = "claymore" - desc = "What are you standing around staring at this for? Get to killing!" - icon = 'icons/obj/weapons/melee_physical.dmi' - icon_state = "claymore" - item_state = "claymore" - slot_flags = SLOT_BELT - w_class = ITEM_SIZE_LARGE - force_multiplier = 0.5 // 30 when wielded with hardnes 60 (steel) - armor_penetration = 10 - thrown_force_multiplier = 0.5 // 10 when thrown with weight 20 (steel) - sharp = TRUE - edge = TRUE - attack_verb = list("attacked", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut") - hitsound = 'sound/weapons/bladeslice.ogg' - base_parry_chance = 50 - melee_accuracy_bonus = 10 - worth_multiplier = 30 - -/obj/item/material/sword/replica - max_force = 10 - edge = FALSE - sharp = FALSE - force_multiplier = 0.2 - thrown_force_multiplier = 0.2 - worth_multiplier = 15 - -/obj/item/material/sword/katana - name = "katana" - desc = "Woefully underpowered in D20. This one looks pretty sharp." - icon = 'icons/obj/weapons/melee_physical.dmi' - icon_state = "katana" - item_state = "katana" - furniture_icon = "katana_handle" - slot_flags = SLOT_BELT | SLOT_BACK - -/obj/item/material/sword/katana/replica - max_force = 10 - edge = FALSE - sharp = FALSE - force_multiplier = 0.2 - thrown_force_multiplier = 0.2 - -/obj/item/material/sword/katana/vibro - name = "vibrokatana" - desc = "A high-tech take on a woefully underpowered weapon. Can't mistake its sound for anything." - default_material = MATERIAL_TITANIUM - hitsound = 'sound/weapons/anime_sword.wav' - -/obj/item/material/sword/katana/vibro/equipped(mob/user, slot) - if(slot == slot_l_hand || slot == slot_r_hand) - playsound(src, 'sound/weapons/katana_out.wav', 50, 1, -5) diff --git a/code/game/objects/items/weapons/material/thrown.dm b/code/game/objects/items/weapons/material/thrown.dm deleted file mode 100644 index 40ff82c6c7b7f..0000000000000 --- a/code/game/objects/items/weapons/material/thrown.dm +++ /dev/null @@ -1,27 +0,0 @@ -/obj/item/material/star - name = "shuriken" - desc = "A sharp, perfectly weighted piece of metal." - icon = 'icons/obj/weapons/other.dmi' - icon_state = "star" - randpixel = 12 - max_force = 10 - force_multiplier = 0.1 // 6 with hardness 60 (steel) - thrown_force_multiplier = 1 // 20 with weight 20 (steel) - throw_speed = 8 - throw_range = 15 - sharp = TRUE - edge = TRUE - w_class = ITEM_SIZE_TINY - -/obj/item/material/star/New() - ..() - -/obj/item/material/star/throw_impact(atom/hit_atom) - ..() - if(material.radioactivity>0 && istype(hit_atom,/mob/living)) - var/mob/living/M = hit_atom - var/urgh = material.radioactivity - M.adjustToxLoss(rand(urgh/2,urgh)) - -/obj/item/material/star/ninja - default_material = MATERIAL_URANIUM diff --git a/code/game/objects/items/weapons/material/twohanded.dm b/code/game/objects/items/weapons/material/twohanded.dm deleted file mode 100644 index 92c29c1738af3..0000000000000 --- a/code/game/objects/items/weapons/material/twohanded.dm +++ /dev/null @@ -1,164 +0,0 @@ -/* Two-handed Weapons - * Contains: - * Twohanded - * Fireaxe - * Double-Bladed Energy Swords - */ - -/*################################################################## -##################### TWO HANDED WEAPONS BE HERE~ -Agouri :3 ######## -####################################################################*/ - -//Rewrote TwoHanded weapons stuff and put it all here. Just copypasta fireaxe to make new ones ~Carn -//This rewrite means we don't have two variables for EVERY item which are used only by a few weapons. -//It also tidies stuff up elsewhere. - -/* - * Twohanded - */ -/obj/item/material/twohanded - w_class = ITEM_SIZE_HUGE - slot_flags = SLOT_BACK - var/wielded = 0 - var/force_wielded = 0 - var/force_unwielded - var/wieldsound = null - var/unwieldsound = null - var/base_icon - var/base_name - var/unwielded_force_divisor = 0.25 - var/wielded_parry_bonus = 20 - -/obj/item/material/twohanded/update_twohanding() - var/mob/living/M = loc - if(istype(M) && M.can_wield_item(src) && is_held_twohanded(M)) - wielded = 1 - force = force_wielded - else - wielded = 0 - force = force_unwielded - update_icon() - ..() - -/obj/item/material/twohanded/update_force() - ..() - base_name = name - force_unwielded = round(force*unwielded_force_divisor) - force_wielded = force - force = force_unwielded - - -/obj/item/material/twohanded/New() - ..() - update_icon() - -/obj/item/material/twohanded/get_parry_chance(mob/user) - . = ..() - if(wielded) - . += wielded_parry_bonus - -/obj/item/material/twohanded/on_update_icon() - ..() - icon_state = "[base_icon][wielded]" - item_state_slots[slot_l_hand_str] = icon_state - item_state_slots[slot_r_hand_str] = icon_state - item_state_slots[slot_back_str] = base_icon - -/* - * Fireaxe - */ -/obj/item/material/twohanded/fireaxe // DEM AXES MAN, marker -Agouri - icon = 'icons/obj/weapons/melee_physical.dmi' - icon_state = "fireaxe0" - base_icon = "fireaxe" - name = "fire axe" - desc = "Truly, the weapon of a madman. Who would think to fight fire with an axe?" - - max_force = 60 //for wielded - force_multiplier = 0.6 - unwielded_force_divisor = 0.3 - attack_cooldown_modifier = 6 - sharp = TRUE - edge = TRUE - attack_verb = list("attacked", "chopped", "cleaved", "torn", "cut") - applies_material_colour = 0 - worth_multiplier = 31 - base_parry_chance = 15 - -/obj/item/material/twohanded/fireaxe/afterattack(atom/A as mob|obj|turf|area, mob/user as mob, proximity) - if(!proximity) return - ..() - if(A && wielded) - if(istype(A,/obj/structure/window)) - var/obj/structure/window/W = A - W.shatter() - else if(istype(A,/obj/structure/grille)) - qdel(A) - else if(istype(A,/obj/effect/vine)) - var/obj/effect/vine/P = A - P.die_off() - -/obj/item/material/twohanded/fireaxe/IsHatchet() - return TRUE - -//spears, bay edition -/obj/item/material/twohanded/spear - icon = 'icons/obj/weapons/melee_physical.dmi' - icon_state = "spearglass0" - base_icon = "spearglass" - name = "spear" - desc = "A haphazardly-constructed yet still deadly weapon of ancient design." - max_force = 20 //for wielded - applies_material_colour = 0 - force_multiplier = 0.33 // 12/19 with hardness 60 (steel) or 10/16 with hardness 50 (glass) - unwielded_force_divisor = 0.20 - thrown_force_multiplier = 1.5 // 20 when thrown with weight 15 (glass) - throw_speed = 6 - sharp = TRUE - hitsound = 'sound/weapons/bladeslice.ogg' - attack_verb = list("attacked", "poked", "jabbed", "torn", "gored") - default_material = MATERIAL_GLASS - does_spin = FALSE - worth_multiplier = 7 - base_parry_chance = 30 - -/obj/item/material/twohanded/spear/shatter(var/consumed) - if(!consumed) - new /obj/item/stack/material/rods(get_turf(src), 1) - new /obj/item/stack/cable_coil(get_turf(src), 3) - ..() - -/obj/item/material/twohanded/baseballbat - name = "bat" - desc = "HOME RUN!" - icon = 'icons/obj/weapons/melee_physical.dmi' - icon_state = "metalbat0" - base_icon = "metalbat" - item_state = "metalbat" - w_class = ITEM_SIZE_LARGE - throwforce = 7 - attack_verb = list("smashed", "beaten", "slammed", "smacked", "struck", "battered", "bonked") - hitsound = 'sound/weapons/genhit3.ogg' - default_material = MATERIAL_MAPLE - max_force = 40 //for wielded - force_multiplier = 1.1 // 22 when wielded with weight 20 (steel) - unwielded_force_divisor = 0.7 // 15 when unwielded based on above. - attack_cooldown_modifier = 1 - melee_accuracy_bonus = -10 - base_parry_chance = 30 - -//Predefined materials go here. -/obj/item/material/twohanded/baseballbat/metal/New(var/newloc) - ..(newloc,MATERIAL_ALUMINIUM) - -/obj/item/material/twohanded/baseballbat/uranium/New(var/newloc) - ..(newloc,MATERIAL_URANIUM) - -/obj/item/material/twohanded/baseballbat/gold/New(var/newloc) - ..(newloc,MATERIAL_GOLD) - -/obj/item/material/twohanded/baseballbat/platinum/New(var/newloc) - ..(newloc,MATERIAL_PLATINUM) - -/obj/item/material/twohanded/baseballbat/diamond/New(var/newloc) - ..(newloc,MATERIAL_DIAMOND) diff --git a/code/game/objects/items/weapons/material/urn.dm b/code/game/objects/items/weapons/material/urn.dm deleted file mode 100644 index 3a09315c1a917..0000000000000 --- a/code/game/objects/items/weapons/material/urn.dm +++ /dev/null @@ -1,33 +0,0 @@ -/obj/item/material/urn - name = "urn" - desc = "A vase used to store the ashes of the deceased." - icon = 'icons/obj/urn.dmi' - icon_state = "urn" - max_force = 5 - applies_material_colour = TRUE - w_class = ITEM_SIZE_SMALL - default_material = MATERIAL_WOOD - -/obj/item/material/urn/afterattack(var/obj/A, var/mob/user, var/proximity) - if(!istype(A, /obj/effect/decal/cleanable/ash)) - return ..() - else if(proximity) - if(contents.len) - to_chat(user, "\The [src] is already full!") - return - user.visible_message("\The [user] scoops \the [A] into \the [src], securing the lid.", "You scoop \the [A] into \the [src], securing the lid.") - A.forceMove(src) - -/obj/item/material/urn/attack_self(mob/user) - if(!contents.len) - to_chat(user, "\The [src] is empty!") - return - else - for(var/obj/effect/decal/cleanable/ash/A in contents) - A.dropInto(loc) - user.visible_message("\The [user] pours \the [A] out from \the [src].", "You pour \the [A] out from \the [src].") - -/obj/item/material/urn/examine(mob/user) - . = ..() - if(contents.len) - to_chat(user, "\The [src] is full.") \ No newline at end of file diff --git a/code/game/objects/items/weapons/melee/energy.dm b/code/game/objects/items/weapons/melee/energy.dm deleted file mode 100644 index d910b5e20e44b..0000000000000 --- a/code/game/objects/items/weapons/melee/energy.dm +++ /dev/null @@ -1,272 +0,0 @@ -/obj/item/melee/energy - var/active = 0 - var/active_force - var/active_throwforce - var/active_icon - var/lighting_color - var/active_attack_verb - var/inactive_attack_verb = list() - armor_penetration = 50 - atom_flags = ATOM_FLAG_NO_TEMP_CHANGE | ATOM_FLAG_NO_BLOOD - -/obj/item/melee/energy/can_embed() - return FALSE - -/obj/item/melee/energy/Initialize() - . = ..() - if(active) - active = FALSE - activate() - else - active = TRUE - deactivate() - -/obj/item/melee/energy/on_update_icon() - . = ..() - if(active) - icon_state = active_icon - else - icon_state = initial(icon_state) - -/obj/item/melee/energy/proc/activate(mob/living/user) - if(active) - return - active = TRUE - force = active_force - throwforce = active_throwforce - sharp = TRUE - edge = TRUE - slot_flags |= SLOT_DENYPOCKET - attack_verb = active_attack_verb - update_icon() - if(user) - playsound(user, 'sound/weapons/saberon.ogg', 50, 1) - to_chat(user, "\The [src] is now energised.") - set_light(0.8, 1, 2, 4, lighting_color) - -/obj/item/melee/energy/proc/deactivate(mob/living/user) - if(!active) - return - active = FALSE - force = initial(force) - throwforce = initial(throwforce) - sharp = initial(sharp) - edge = initial(edge) - slot_flags = initial(slot_flags) - attack_verb = inactive_attack_verb - update_icon() - if(user) - playsound(user, 'sound/weapons/saberoff.ogg', 50, 1) - to_chat(user, "\The [src] deactivates!") - set_light(0) - -/obj/item/melee/energy/attack_self(mob/living/user as mob) - if(active) - if((MUTATION_CLUMSY in user.mutations) && prob(50)) - user.visible_message("\The [user] accidentally cuts \himself with \the [src].",\ - "You accidentally cut yourself with \the [src].") - user.take_organ_damage(5,5) - deactivate(user) - else - activate(user) - - if(istype(user,/mob/living/carbon/human)) - var/mob/living/carbon/human/H = user - H.update_inv_l_hand() - H.update_inv_r_hand() - - add_fingerprint(user) - return - -/obj/item/melee/energy/get_storage_cost() - if(active) - return ITEM_SIZE_NO_CONTAINER - return ..() - -/* - * Energy Axe - */ -/obj/item/melee/energy/axe - icon = 'icons/obj/weapons/melee_energy.dmi' - name = "energy axe" - desc = "An energised battle axe." - icon_state = "axe0" - active_icon = "axe1" - lighting_color = COLOR_SABER_AXE - active_force = 60 - active_throwforce = 35 - force = 20 - throwforce = 10 - throw_speed = 1 - throw_range = 5 - w_class = ITEM_SIZE_NORMAL - atom_flags = ATOM_FLAG_NO_TEMP_CHANGE | ATOM_FLAG_NO_BLOOD - obj_flags = OBJ_FLAG_CONDUCTIBLE - origin_tech = list(TECH_MAGNET = 3, TECH_COMBAT = 4) - active_attack_verb = list("attacked", "chopped", "cleaved", "torn", "cut") - inactive_attack_verb = list("attacked", "chopped", "cleaved", "torn", "cut") - sharp = TRUE - edge = TRUE - melee_accuracy_bonus = 15 - -/obj/item/melee/energy/axe/deactivate(mob/living/user) - . = ..() - to_chat(user, "\The [src] is de-energised. It's just a regular axe now.") - -/* - * Energy Sword - */ -/obj/item/melee/energy/sword - icon = 'icons/obj/weapons/melee_energy.dmi' - name = "energy sword" - desc = "May the force be within you." - icon_state = "sword0" - active_force = 30 - active_throwforce = 20 - force = 3 - throwforce = 5 - throw_speed = 1 - throw_range = 5 - w_class = ITEM_SIZE_SMALL - atom_flags = ATOM_FLAG_NO_TEMP_CHANGE | ATOM_FLAG_NO_BLOOD - origin_tech = list(TECH_MAGNET = 3, TECH_ESOTERIC = 4) - sharp = TRUE - edge = TRUE - base_parry_chance = 50 - active_attack_verb = list("attacked", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut") - hitsound = 'sound/weapons/blade1.ogg' - var/blade_color - -/obj/item/melee/energy/sword/Initialize() - if(!blade_color) - blade_color = pick("red","blue","green","purple") - - active_icon = "sword[blade_color]" - var/color_hex = list("red" = COLOR_SABER_RED, "blue" = COLOR_SABER_BLUE, "green" = COLOR_SABER_GREEN, "purple" = COLOR_SABER_PURPLE) - lighting_color = color_hex[blade_color] - - . = ..() - -/obj/item/melee/energy/sword/green - blade_color = "green" - -/obj/item/melee/energy/sword/red - blade_color = "red" - -/obj/item/melee/energy/sword/red/activated - active = TRUE - -/obj/item/melee/energy/sword/blue - blade_color = "blue" - -/obj/item/melee/energy/sword/purple - blade_color = "purple" - -/obj/item/melee/energy/sword/dropped(mob/user) - ..() - if(!istype(loc,/mob)) - deactivate(user) - -/obj/item/melee/energy/sword/handle_shield(mob/user, damage, atom/damage_source = null, mob/attacker = null, def_zone = null, attack_text = "the attack") - . = ..() - if(.) - var/datum/effect/effect/system/spark_spread/spark_system = new /datum/effect/effect/system/spark_spread() - spark_system.set_up(5, 0, user.loc) - spark_system.start() - playsound(user.loc, 'sound/weapons/blade1.ogg', 50, 1) - -/obj/item/melee/energy/sword/get_parry_chance(mob/user) - return active ? ..() : 0 - -/obj/item/melee/energy/sword/pirate - icon = 'icons/obj/weapons/melee_energy.dmi' - name = "energy cutlass" - desc = "Arrrr matey." - icon_state = "cutlass0" - active_icon = "cutlass1" - lighting_color = COLOR_SABER_CUTLASS - -/obj/item/melee/energy/sword/pirate/activated - active = TRUE - -/* - *Energy Blade - */ - -/obj/item/melee/energy/blade - icon = 'icons/obj/weapons/melee_energy.dmi' - name = "energy blade" - desc = "A concentrated beam of energy in the shape of a blade. Very stylish... and lethal." - icon_state = "blade" - active_icon = "blade" //It's all energy, so it should always be visible. - lighting_color = COLOR_SABER_GREEN - active_force = 40 //Normal attacks deal very high damage - about the same as wielded fire axe - active = 1 - armor_penetration = 100 - sharp = TRUE - edge = TRUE - anchored = TRUE // Never spawned outside of inventory, should be fine. - active_throwforce = 1 //Throwing or dropping the item deletes it. - throw_speed = 1 - throw_range = 1 - w_class = ITEM_SIZE_TINY //technically it's just energy or something, I dunno - atom_flags = ATOM_FLAG_NO_TEMP_CHANGE | ATOM_FLAG_NO_BLOOD - active_attack_verb = list("attacked", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut") - hitsound = 'sound/weapons/blade1.ogg' - var/mob/living/creator - var/datum/effect/effect/system/spark_spread/spark_system - -/obj/item/melee/energy/blade/New() - ..() - spark_system = new /datum/effect/effect/system/spark_spread() - spark_system.set_up(5, 0, src) - spark_system.attach(src) - -/obj/item/melee/energy/blade/Initialize() - . = ..() - START_PROCESSING(SSobj, src) - -/obj/item/melee/energy/blade/Destroy() - STOP_PROCESSING(SSobj, src) - . = ..() - -/obj/item/melee/energy/blade/get_storage_cost() - return ITEM_SIZE_NO_CONTAINER - -/obj/item/melee/energy/blade/attack_self(mob/user as mob) - user.drop_from_inventory(src) - -/obj/item/melee/energy/blade/dropped() - ..() - QDEL_IN(src, 0) - -/obj/item/melee/energy/blade/Process() - if(!creator || loc != creator || (creator.l_hand != src && creator.r_hand != src)) - // Tidy up a bit. - if(istype(loc,/mob/living)) - var/mob/living/carbon/human/host = loc - if(istype(host)) - for(var/obj/item/organ/external/organ in host.organs) - for(var/obj/item/O in organ.implants) - if(O == src) - organ.implants -= src - host.pinned -= src - host.embedded -= src - host.drop_from_inventory(src) - QDEL_IN(src, 0) - -/obj/item/melee/energy/machete - icon = 'icons/obj/weapons/melee_energy.dmi' - name = "energy machete" - desc = "A machete handle that extends out into a long, purple machete blade. It appears to be Skrellian in origin." - icon_state = "machete_skrell_x" - active_icon = "machete_skrell" - active_force = 16 //In line with standard machetes at time of creation. - active_throwforce = 17.25 - lighting_color = COLOR_SABER_SKRELL - force = 3 - throwforce = 1 - w_class = ITEM_SIZE_SMALL - origin_tech = list(TECH_MAGNET = 3) - active_attack_verb = list("attacked", "chopped", "cleaved", "torn", "cut") - hitsound = 'sound/weapons/blade1.ogg' diff --git a/code/game/objects/items/weapons/melee/misc.dm b/code/game/objects/items/weapons/melee/misc.dm deleted file mode 100644 index 601f409b76be6..0000000000000 --- a/code/game/objects/items/weapons/melee/misc.dm +++ /dev/null @@ -1,69 +0,0 @@ -/obj/item/melee/whip - name = "whip" - desc = "A generic whip." - icon = 'icons/obj/weapons/melee_physical.dmi' - icon_state = "chain" - item_state = "chain" - obj_flags = OBJ_FLAG_CONDUCTIBLE - slot_flags = SLOT_BELT - force = 10 - throwforce = 7 - w_class = ITEM_SIZE_NORMAL - origin_tech = list(TECH_COMBAT = 4) - attack_verb = list("flicked", "whipped", "lashed") - -/obj/item/melee/whip/abyssal - name = "abyssal whip" - desc = "A weapon from the abyss. Requires 70 attack to wield." - icon_state = "whip" - item_state = "whip" - obj_flags = OBJ_FLAG_CONDUCTIBLE - slot_flags = SLOT_BELT - force = 16 //max hit with 60 strength and no equipment. Duel Arena no No forfeit - Snapshot - throwforce = 7 - w_class = ITEM_SIZE_NORMAL - origin_tech = list(TECH_COMBAT = 4) - attack_verb = list("flicked", "whipped", "lashed") - -/obj/item/melee/whip/tail - name = "drake's tail" - desc = "The tail of a large scaled creature, obviously evolved as some kind of whipping weapon. It's razor sharp and incredibly tough, though relatively lightweight." - icon_state = "tailwhip" - item_state = "whip" - obj_flags = null - force = 19 - edge = TRUE - origin_tech = list(TECH_COMBAT = 6, TECH_MATERIAL = 5) - -/obj/item/melee/whip/chainofcommand - name = "chain of command" - desc = "A tool used by great men to placate the frothing masses." - attack_verb = list("flogged", "whipped", "lashed", "disciplined") - icon_state = "chain" - item_state = "whip" - -/obj/item/material/sword/replica/officersword - name = "fleet officer's sword" - desc = "A polished sword issued to officers of the fleet." - icon = 'icons/obj/weapons/melee_physical.dmi' - icon_state = "officersword" - item_state = "officersword" - slot_flags = SLOT_BELT - applies_material_colour = FALSE - -/obj/item/material/sword/replica/officersword/army - name = "army NCO's sword" - desc = "A polished sword issued to SCG Marine Corps NCOs." - icon_state = "armysword" - -/obj/item/material/sword/replica/officersword/armyofficer - name = "marine officer's sword" - desc = "A curved sword issued to SCG Marine Corps officers." - icon_state = "armyofficersword" - item_state = "armyofficersword" - -/obj/item/material/sword/replica/officersword/pettyofficer - name = "chief petty officer's cutlass" - desc = "A polished cutlass issued to chief petty officers of the fleet." - icon_state = "pettyofficersword" - item_state = "pettyofficersword" diff --git a/code/game/objects/items/weapons/mop.dm b/code/game/objects/items/weapons/mop.dm deleted file mode 100644 index 563cc2558f206..0000000000000 --- a/code/game/objects/items/weapons/mop.dm +++ /dev/null @@ -1,107 +0,0 @@ -/obj/item/mop - desc = "The world of janitalia wouldn't be complete without a mop." - name = "mop" - icon = 'icons/obj/janitor.dmi' - icon_state = "mop" - force = 5 - throwforce = 10.0 - throw_speed = 5 - throw_range = 10 - w_class = ITEM_SIZE_NORMAL - attack_verb = list("mopped", "bashed", "bludgeoned", "whacked") - var/mopping = 0 - var/mopcount = 0 - var/mopspeed = 40 - var/list/moppable_types = list( - /obj/effect/decal/cleanable, - /obj/effect/rune, - /obj/structure/catwalk - ) - -/obj/item/mop/Initialize() - . = ..() - create_reagents(30) - -/obj/item/mop/afterattack(atom/A, mob/user, proximity) - if(!proximity) - return - - var/moppable - if(istype(A, /turf)) - var/turf/T = A - var/obj/effect/fluid/F = locate() in T - if(F && F.fluid_amount > 0) - if(F.fluid_amount > FLUID_SHALLOW) - to_chat(user, SPAN_WARNING("There is too much water here to be mopped up.")) - else - user.visible_message("\The [user] begins to mop up \the [T].") - if(do_after(user, mopspeed, T, do_flags = DO_DEFAULT | DO_PUBLIC_PROGRESS) && F && !QDELETED(F)) - if(F.fluid_amount > FLUID_SHALLOW) - to_chat(user, SPAN_WARNING("There is too much water here to be mopped up.")) - else - qdel(F) - to_chat(user, "You have finished mopping!") - return - moppable = TRUE - - else if(is_type_in_list(A,moppable_types)) - moppable = TRUE - - if(moppable) - if(reagents.total_volume < 1) - to_chat(user, "Your mop is dry!") - return - var/turf/T = get_turf(A) - if(!T) - return - - user.visible_message("\The [user] begins to clean \the [T].") - - if(do_after(user, mopspeed, T, do_flags = DO_DEFAULT | DO_PUBLIC_PROGRESS)) - if(T) - T.clean(src, user) - to_chat(user, "You have finished mopping!") - - -/obj/effect/attackby(obj/item/I, mob/user) - if(istype(I, /obj/item/mop) || istype(I, /obj/item/soap)) - return - ..() - -/obj/item/mop/advanced - desc = "The most advanced tool in a custodian's arsenal, with a cleaner synthesizer to boot! Just think of all the viscera you will clean up with this!" - name = "advanced mop" - icon_state = "advmop" - item_state = "mop" - force = 6 - throwforce = 11 - mopspeed = 20 - var/refill_enabled = TRUE //Self-refill toggle for when a janitor decides to mop with something other than water. - var/refill_rate = 1 //Rate per process() tick mop refills itself - var/refill_reagent = /datum/reagent/space_cleaner //Determins what reagent to use for refilling, just in case someone wanted to make a HOLY MOP OF PURGING - -/obj/item/mop/advanced/Initialize() - . = ..() - START_PROCESSING(SSobj, src) - -/obj/item/mop/advanced/attack_self(mob/user) - refill_enabled = !refill_enabled - if(refill_enabled) - START_PROCESSING(SSobj, src) - else - STOP_PROCESSING(SSobj,src) - to_chat(user, "You set the condenser switch to the '[refill_enabled ? "ON" : "OFF"]' position.") - playsound(user, 'sound/machines/click.ogg', 30, 1) - -/obj/item/mop/advanced/Process() - if(reagents.total_volume < 30) - reagents.add_reagent(refill_reagent, refill_rate) - -/obj/item/mop/advanced/examine(mob/user) - . = ..() - to_chat(user, "The condenser switch is set to [refill_enabled ? "ON" : "OFF"].") - -/obj/item/mop/advanced/Destroy() - if(refill_enabled) - STOP_PROCESSING(SSobj, src) - return ..() \ No newline at end of file diff --git a/code/game/objects/items/weapons/nuclear_cylinder.dm b/code/game/objects/items/weapons/nuclear_cylinder.dm deleted file mode 100644 index 0d325c7cd82fb..0000000000000 --- a/code/game/objects/items/weapons/nuclear_cylinder.dm +++ /dev/null @@ -1,13 +0,0 @@ -/obj/item/nuclear_cylinder - name = "\improper nuclear cylinder" - desc = "This cylinder is used in the self destruct system of the ship." - icon = 'icons/obj/nuclear_cylinder.dmi' - icon_state = "nuclear_cylinder" - item_state = "nuclear" - obj_flags = OBJ_FLAG_CONDUCTIBLE - force = 10.0 - w_class = ITEM_SIZE_HUGE - throwforce = 15.0 - throw_speed = 2 - throw_range = 4 - origin_tech = list(TECH_MATERIAL = 3, TECH_ENGINEERING = 4) \ No newline at end of file diff --git a/code/game/objects/items/weapons/paint.dm b/code/game/objects/items/weapons/paint.dm deleted file mode 100644 index e98325e47a911..0000000000000 --- a/code/game/objects/items/weapons/paint.dm +++ /dev/null @@ -1,81 +0,0 @@ -//NEVER USE THIS IT SUX -PETETHEGOAT -//THE GOAT WAS RIGHT - RKF - -var/global/list/cached_icons = list() - -/obj/item/reagent_containers/glass/paint - desc = "It's a paint bucket." - name = "paint bucket" - icon = 'icons/obj/items.dmi' - icon_state = "paintbucket" - item_state = "paintcan" - matter = list(MATERIAL_ALUMINIUM = 200) - w_class = ITEM_SIZE_NORMAL - amount_per_transfer_from_this = 10 - possible_transfer_amounts = "10;20;30;60" - volume = 60 - unacidable = FALSE - atom_flags = ATOM_FLAG_OPEN_CONTAINER - var/paint_hex = "#fe191a" - -/obj/item/reagent_containers/glass/paint/afterattack(turf/simulated/target, mob/user, proximity) - if(!proximity) return - if(istype(target) && reagents.total_volume > 5) - if (reagents.should_admin_log()) - var/contained = reagentlist() - if (istype(target, /mob)) - admin_attack_log(user, target, "Used \the [name] containing [contained] to splash the victim.", "Was splashed by \the [name] containing [contained].", "used \the [name] containing [contained] to splash") - else - admin_attacker_log(user, "Used \the [name] containing [contained] to splash \the [target]") - user.visible_message("\The [target] has been splashed with something by [user]!") - reagents.trans_to_turf(target, 5) - else - return ..() - -/obj/item/reagent_containers/glass/paint/Initialize() - . = ..() - if(paint_hex && length(paint_hex) > 0) - reagents.add_reagent(/datum/reagent/paint, volume, paint_hex) - update_icon() - -/obj/item/reagent_containers/glass/paint/on_update_icon() - overlays.Cut() - if(reagents.total_volume) - var/image/filling = image('icons/obj/reagentfillings.dmi', src, "paintbucket") - filling.color = reagents.get_color() - overlays += filling - -/obj/item/reagent_containers/glass/paint/red - name = "red paint bucket" - paint_hex = "#fe191a" - -/obj/item/reagent_containers/glass/paint/yellow - name = "yellow paint bucket" - paint_hex = "#fdfe7d" - -/obj/item/reagent_containers/glass/paint/green - name = "green paint bucket" - paint_hex = "#18a31a" - -/obj/item/reagent_containers/glass/paint/blue - name = "blue paint bucket" - paint_hex = "#247cff" - -/obj/item/reagent_containers/glass/paint/purple - name = "purple paint bucket" - paint_hex = "#cc0099" - -/obj/item/reagent_containers/glass/paint/black - name = "black paint bucket" - paint_hex = "#333333" - -/obj/item/reagent_containers/glass/paint/white - name = "white paint bucket" - paint_hex = "#f0f8ff" - -/obj/item/reagent_containers/glass/paint/random - name = "odd paint bucket" - -/obj/item/reagent_containers/glass/paint/random/New() - paint_hex = rgb(rand(1,255),rand(1,255),rand(1,255)) - ..() diff --git a/code/game/objects/items/weapons/policetape.dm b/code/game/objects/items/weapons/policetape.dm deleted file mode 100644 index 6362c550494bc..0000000000000 --- a/code/game/objects/items/weapons/policetape.dm +++ /dev/null @@ -1,395 +0,0 @@ -GLOBAL_LIST(hazard_overlays) - -//Define all tape types in policetape.dm -/obj/item/taperoll - name = "tape roll" - icon = 'icons/policetape.dmi' - icon_state = "tape" - w_class = ITEM_SIZE_SMALL - var/turf/start - var/turf/end - var/tape_type = /obj/item/tape - var/icon_base = "tape" - - var/apply_tape = FALSE - -/obj/item/taperoll/Initialize() - . = ..() - if(!GLOB.hazard_overlays) - GLOB.hazard_overlays = list() - GLOB.hazard_overlays["[NORTH]"] = new/image('icons/effects/warning_stripes.dmi', icon_state = "N") - GLOB.hazard_overlays["[EAST]"] = new/image('icons/effects/warning_stripes.dmi', icon_state = "E") - GLOB.hazard_overlays["[SOUTH]"] = new/image('icons/effects/warning_stripes.dmi', icon_state = "S") - GLOB.hazard_overlays["[WEST]"] = new/image('icons/effects/warning_stripes.dmi', icon_state = "W") - if(apply_tape) - var/turf/T = get_turf(src) - if(!T) - return - var/obj/machinery/door/airlock/airlock = locate(/obj/machinery/door/airlock) in T - if(airlock) - afterattack(airlock, null, TRUE) - return INITIALIZE_HINT_QDEL - -var/global/list/tape_roll_applications = list() - -/obj/item/tape - name = "tape" - icon = 'icons/policetape.dmi' - icon_state = "tape" - layer = BASE_ABOVE_OBJ_LAYER - randpixel = 0 - anchored = TRUE - var/lifted = 0 - var/crumpled = 0 - var/tape_dir = 0 - var/icon_base = "tape" - var/detail_overlay - var/detail_color - -/obj/item/tape/on_update_icon() - //Possible directional bitflags: 0 (AIRLOCK), 1 (NORTH), 2 (SOUTH), 4 (EAST), 8 (WEST), 3 (VERTICAL), 12 (HORIZONTAL) - overlays.Cut() - var/new_state - switch (tape_dir) - if(0) // AIRLOCK - new_state = "[icon_base]_door" - if(3) // VERTICAL - new_state = "[icon_base]_v" - if(12) // HORIZONTAL - new_state = "[icon_base]_h" - else // END POINT (1|2|4|8) - new_state = "[icon_base]_dir" - dir = tape_dir - icon_state = "[new_state]_[crumpled]" - if(detail_overlay) - var/image/I = overlay_image(icon, "[new_state]_[detail_overlay]", flags=RESET_COLOR) - I.color = detail_color - overlays |= I - -/obj/item/taperoll/police - name = "police tape" - desc = "A roll of police tape used to block off crime scenes from the public." - tape_type = /obj/item/tape/police - color = COLOR_RED - -/obj/item/tape/police - name = "police tape" - desc = "A length of police tape. Do not cross." - req_access = list(access_security) - color = COLOR_RED - -/obj/item/taperoll/engineering - name = "engineering tape" - desc = "A roll of engineering tape used to block off working areas from the public." - tape_type = /obj/item/tape/engineering - color = COLOR_ORANGE - -/obj/item/taperoll/engineering/applied - apply_tape = TRUE - -/obj/item/tape/engineering - name = "engineering tape" - desc = "A length of engineering tape. Better not cross it." - req_access = list(list(access_engine,access_atmospherics)) - color = COLOR_ORANGE - -/obj/item/taperoll/atmos - name = "atmospherics tape" - desc = "A roll of atmospherics tape used to block off working areas from the public." - tape_type = /obj/item/tape/atmos - color = COLOR_BLUE_LIGHT - -/obj/item/tape/atmos - name = "atmospherics tape" - desc = "A length of atmospherics tape. Better not cross it." - req_access = list(list(access_engine,access_atmospherics)) - color = COLOR_BLUE_LIGHT - icon_base = "stripetape" - detail_overlay = "stripes" - detail_color = COLOR_YELLOW - -/obj/item/taperoll/research - name = "research tape" - desc = "A roll of research tape used to block off working areas from the public." - tape_type = /obj/item/tape/research - color = COLOR_WHITE - -/obj/item/tape/research - name = "research tape" - desc = "A length of research tape. Better not cross it." - req_access = list(access_research) - color = COLOR_WHITE - -/obj/item/taperoll/medical - name = "medical tape" - desc = "A roll of medical tape used to block off working areas from the public." - tape_type = /obj/item/tape/medical - color = COLOR_PALE_BLUE_GRAY - -/obj/item/tape/medical - name = "medical tape" - desc = "A length of medical tape. Better not cross it." - req_access = list(access_medical) - icon_base = "stripetape" - detail_overlay = "stripes" - detail_color = COLOR_PALE_BLUE_GRAY - -/obj/item/taperoll/bureaucracy - name = "red tape" - desc = "A roll of bureaucratic red tape used to block any meaningful work from being done." - tape_type = /obj/item/tape/bureaucracy - color = COLOR_RED - -/obj/item/tape/bureaucracy - name = "red tape" - desc = "A length of bureaucratic red tape. Safely ignored, but darn obstructive sometimes." - icon_base = "stripetape" - color = COLOR_RED - detail_overlay = "stripes" - detail_color = COLOR_RED - -/obj/item/taperoll/on_update_icon() - overlays.Cut() - var/image/overlay = image(icon = src.icon) - overlay.appearance_flags = DEFAULT_APPEARANCE_FLAGS | RESET_COLOR - if(ismob(loc)) - if(!start) - overlay.icon_state = "start" - else - overlay.icon_state = "stop" - overlays += overlay - -/obj/item/taperoll/dropped(mob/user) - update_icon() - return ..() - -/obj/item/taperoll/pickup(mob/user) - update_icon() - return ..() - -/obj/item/taperoll/attack_hand() - update_icon() - return ..() - -/obj/item/taperoll/attack_self(mob/user as mob) - if(!start) - start = get_turf(src) - to_chat(usr, "You place the first end of \the [src].") - update_icon() - else - end = get_turf(src) - if(start.y != end.y && start.x != end.x || start.z != end.z) - start = null - update_icon() - to_chat(usr, "\The [src] can only be laid horizontally or vertically.") - return - - if(start == end) - // spread tape in all directions, provided there is a wall/window - var/turf/T - var/possible_dirs = 0 - for(var/dir in GLOB.cardinal) - T = get_step(start, dir) - if(T && T.density) - possible_dirs += dir - else - for(var/obj/structure/window/W in T) - if(W.is_fulltile() || W.dir == GLOB.reverse_dir[dir]) - possible_dirs += dir - if(!possible_dirs) - start = null - update_icon() - to_chat(usr, "You can't place \the [src] here.") - return - if(possible_dirs & (NORTH|SOUTH)) - var/obj/item/tape/TP = new tape_type(start) - for(var/dir in list(NORTH, SOUTH)) - if (possible_dirs & dir) - TP.tape_dir += dir - TP.add_fingerprint(user) - TP.update_icon() - if(possible_dirs & (EAST|WEST)) - var/obj/item/tape/TP = new tape_type(start) - for(var/dir in list(EAST, WEST)) - if (possible_dirs & dir) - TP.tape_dir += dir - TP.add_fingerprint(user) - TP.update_icon() - start = null - update_icon() - to_chat(usr, "You finish placing \the [src].") - return - - var/turf/cur = start - var/orientation = get_dir(start, end) - var/dir = 0 - switch(orientation) - if(NORTH, SOUTH) dir = NORTH|SOUTH // North-South taping - if(EAST, WEST) dir = EAST|WEST // East-West taping - - var/can_place = 1 - while (can_place) - if(cur.density) - can_place = 0 - else if (istype(cur, /turf/space)) - can_place = 0 - else - for(var/obj/O in cur) - if(O.density) - can_place = 0 - break - if(cur == end) - break - cur = get_step_towards(cur,end) - if (!can_place) - start = null - update_icon() - to_chat(usr, "You can't run \the [src] through that!") - return - - cur = start - var/tapetest - var/tape_dir - while (1) - tapetest = 0 - tape_dir = dir - if(cur == start) - var/turf/T = get_step(start, GLOB.reverse_dir[orientation]) - if(T && !T.density) - tape_dir = orientation - for(var/obj/structure/window/W in T) - if(W.is_fulltile() || W.dir == orientation) - tape_dir = dir - else if(cur == end) - var/turf/T = get_step(end, orientation) - if(T && !T.density) - tape_dir = GLOB.reverse_dir[orientation] - for(var/obj/structure/window/W in T) - if(W.is_fulltile() || W.dir == GLOB.reverse_dir[orientation]) - tape_dir = dir - for(var/obj/item/tape/T in cur) - if((T.tape_dir == tape_dir) && (T.icon_base == icon_base)) - tapetest = 1 - break - if(!tapetest) - var/obj/item/tape/T = new tape_type(cur) - T.add_fingerprint(user) - T.tape_dir = tape_dir - T.update_icon() - if(tape_dir & SOUTH) - T.layer += 0.1 // Must always show above other tapes - if(cur == end) - break - cur = get_step_towards(cur,end) - start = null - update_icon() - to_chat(usr, "You finish placing \the [src].") - return - -/obj/item/taperoll/afterattack(var/atom/A, mob/user as mob, proximity) - if(!proximity) - return - - if (istype(A, /obj/machinery/door/airlock)) - var/turf/T = get_turf(A) - var/obj/item/tape/P = new tape_type(T) - P.add_fingerprint(user) - P.update_icon() - P.layer = ABOVE_DOOR_LAYER - to_chat(user, "You finish placing \the [src].") - - if (istype(A, /turf/simulated/floor) ||istype(A, /turf/unsimulated/floor)) - var/turf/F = A - var/direction = user.loc == F ? user.dir : turn(user.dir, 180) - var/hazard_overlay = GLOB.hazard_overlays["[direction]"] - if(tape_roll_applications[F] == null) - tape_roll_applications[F] = 0 - - if(tape_roll_applications[F] & direction) // hazard_overlay in F.overlays wouldn't work. - user.visible_message("\The [user] uses the adhesive of \the [src] to remove area markings from \the [F].", "You use the adhesive of \the [src] to remove area markings from \the [F].") - F.overlays -= hazard_overlay - tape_roll_applications[F] &= ~direction - else - user.visible_message("\The [user] applied \the [src] on \the [F] to create area markings.", "You apply \the [src] on \the [F] to create area markings.") - F.overlays |= hazard_overlay - tape_roll_applications[F] |= direction - return - -/obj/item/tape/proc/crumple() - if(!crumpled) - crumpled = 1 - update_icon() - SetName("crumpled [name]") - -/obj/item/tape/CanPass(atom/movable/mover, turf/target, height=0, air_group=0) - if(!lifted && ismob(mover)) - var/mob/M = mover - add_fingerprint(M) - if (!allowed(M)) //only select few learn art of not crumpling the tape - to_chat(M, "You are not supposed to go past [src]...") - if(M.a_intent == I_HELP) - return 0 - crumple() - return ..(mover) - -/obj/item/tape/attackby(obj/item/W as obj, mob/user as mob) - breaktape(user) - -/obj/item/tape/attack_hand(mob/user as mob) - if (user.a_intent == I_HELP && src.allowed(user)) - user.show_viewers("\The [user] lifts \the [src], allowing passage.") - for(var/obj/item/tape/T in gettapeline()) - T.lift(100) //~10 seconds - else - breaktape(user) - -/obj/item/tape/proc/lift(time) - lifted = 1 - layer = ABOVE_HUMAN_LAYER - spawn(time) - lifted = 0 - reset_plane_and_layer() - -// Returns a list of all tape objects connected to src, including itself. -/obj/item/tape/proc/gettapeline() - var/list/dirs = list() - if(tape_dir & NORTH) - dirs += NORTH - if(tape_dir & SOUTH) - dirs += SOUTH - if(tape_dir & WEST) - dirs += WEST - if(tape_dir & EAST) - dirs += EAST - - var/list/obj/item/tape/tapeline = list() - for (var/obj/item/tape/T in get_turf(src)) - tapeline += T - for(var/dir in dirs) - var/turf/cur = get_step(src, dir) - var/not_found = 0 - while (!not_found) - not_found = 1 - for (var/obj/item/tape/T in cur) - tapeline += T - not_found = 0 - cur = get_step(cur, dir) - return tapeline - - - - -/obj/item/tape/proc/breaktape(mob/user) - if(user.a_intent == I_HELP) - to_chat(user, "You refrain from breaking \the [src].") - return - user.visible_message("\The [user] breaks \the [src]!","You break \the [src].") - - for (var/obj/item/tape/T in gettapeline()) - if(T == src) - continue - if(T.tape_dir & get_dir(T, src)) - qdel(T) - - qdel(src) //TODO: Dropping a trash item holding fibers/fingerprints of all broken tape parts - return diff --git a/code/game/objects/items/weapons/scrolls.dm b/code/game/objects/items/weapons/scrolls.dm deleted file mode 100644 index 62a2daac8d4c2..0000000000000 --- a/code/game/objects/items/weapons/scrolls.dm +++ /dev/null @@ -1,60 +0,0 @@ -/obj/item/teleportation_scroll - name = "scroll of teleportation" - desc = "A scroll for moving around." - icon = 'icons/obj/wizard.dmi' - icon_state = "scroll" - var/uses = 4.0 - w_class = ITEM_SIZE_TINY - item_state = "paper" - throw_speed = 4 - throw_range = 20 - origin_tech = list(TECH_BLUESPACE = 4) - -/obj/item/teleportation_scroll/attack_self(mob/user as mob) - if((user.mind && !GLOB.wizards.is_antagonist(user.mind))) - to_chat(usr, "You stare at the scroll but cannot make sense of the markings!") - return - - user.set_machine(src) - var/dat = "Teleportation Scroll:
              " - dat += "Number of uses: [src.uses]
              " - dat += "
              " - dat += "Four uses use them wisely:
              " - dat += "Teleport
              " - dat += "Kind regards,
              Wizards Federation

              P.S. Don't forget to bring your gear, you'll need it to cast most spells.
              " - show_browser(user, dat, "window=scroll") - onclose(user, "scroll") - return - -/obj/item/teleportation_scroll/Topic(href, href_list) - if(..()) - return 1 - var/mob/living/carbon/human/H = usr - if (!( istype(H, /mob/living/carbon/human))) - return 1 - if ((usr == src.loc || (in_range(src, usr) && istype(src.loc, /turf)))) - usr.set_machine(src) - if (href_list["spell_teleport"]) - if (src.uses >= 1) - teleportscroll(H) - attack_self(H) - return - -/obj/item/teleportation_scroll/proc/teleportscroll(var/mob/user) - var/area/thearea = input(user, "Area to jump to", "BOOYEA") as null|anything in wizteleportlocs - thearea = thearea ? wizteleportlocs[thearea] : thearea - - if (!thearea || CanUseTopic(user) != STATUS_INTERACTIVE) - return - - var/datum/effect/effect/system/smoke_spread/smoke = new /datum/effect/effect/system/smoke_spread() - smoke.set_up(5, 0, user.loc) - smoke.attach(user) - smoke.start() - var/turf/end = user.try_teleport(thearea) - - if(!end) - to_chat(user, "The spell matrix was unable to locate a suitable teleport destination for an unknown reason. Sorry.") - return - smoke.start() - src.uses -= 1 diff --git a/code/game/objects/items/weapons/scrubpack.dm b/code/game/objects/items/weapons/scrubpack.dm deleted file mode 100644 index b4a49f4abb8ee..0000000000000 --- a/code/game/objects/items/weapons/scrubpack.dm +++ /dev/null @@ -1,247 +0,0 @@ -// Scrubber backpack: -//An even more portable version of the portable air scrubber, -//in exchange of having a lower gas capacity, and lacking the ability to take stock parts, such as tesla links. - -/obj/item/scrubpack - name = "scrubber pack" - desc = "A heavy, unwieldy machine that can filter harmful gasses out of the atmosphere. It runs on an internal power source." - w_class = ITEM_SIZE_HUGE - slot_flags = SLOT_BACK - icon = 'icons/obj/storage.dmi' - icon_state = "scrubpack" - item_state_slots = list(slot_l_hand_str = "scrubberpack", slot_r_hand_str = "scrubberpack") - action_button_name = "Toggle Scrubber" - - var/obj/item/tank/tank - var/obj/item/cell/cell - var/tank_permit - var/list/scrub_names - var/charge_cost - var/volume_rate - var/enabled = FALSE - var/sound_token - -/obj/item/scrubpack/Initialize() - . = ..() - if (ispath(tank)) - tank = new tank(src) - if (ispath(cell)) - cell = new cell(src) - if (!length(scrub_names)) - scrub_names = list() - for (var/name in gas_data.gases) - if (name != GAS_OXYGEN && name != GAS_NITROGEN) - scrub_names += name - -/obj/item/scrubpack/Destroy() - . = ..() - STOP_PROCESSING(SSobj, src) - set_sound_state(FALSE) - QDEL_NULL(tank) - QDEL_NULL(cell) - -/obj/item/scrubpack/examine(mob/user, distance) - . = ..() - if (distance < 5) - to_chat(user, "It [cell ? "has" : "is missing"] a cell and [tank ? "has" : "is missing"] a tank.") - if (distance < 2) - if (tank) - var/datum/gas_mixture/air = tank.return_air() - var/kpa = air.return_pressure() / (TANK_LEAK_PRESSURE * 0.8) * 100 - var/display = "[round(kpa)]%" - if (user.skill_check(SKILL_ATMOS, SKILL_BASIC)) - switch(kpa) - if (100 to INFINITY) - display = "unsafe ([display])" - if (67 to 100) - display = "high ([display])" - if (33 to 67) - display = "low ([display])" - else - display = "very low ([display])" - to_chat(user, "\The [tank] pressure is [display]") - if (cell) - var/display = cell.percent() - if (user.skill_check(SKILL_ELECTRICAL, SKILL_BASIC)) - switch (display) - if (67 to INFINITY) - display = "high ([display]%)" - if (33 to 67) - display = "medium ([display]%)" - else - display = "low ([display]%)" - else - display = "[display]%" - to_chat(user, "\The [cell] charge is [display]") - -/obj/item/scrubpack/attackby(obj/item/W, mob/user) - if (istype(W, /obj/item/cell)) - if (cell) - to_chat(user, SPAN_WARNING("\The [src] already has \an [cell].")) - return TRUE - if (istype(W, /obj/item/cell/device)) - to_chat(user, SPAN_WARNING("\The [W] is too small for \the [src].")) - return TRUE - if (!user.unEquip(W, src)) - return - user.visible_message( - SPAN_ITALIC("\The [user] fits \the [W] to \the [src]."), - SPAN_ITALIC("You fit \the [W] to \the [src]."), - SPAN_ITALIC("You can hear metal scratching on metal."), - range = 5 - ) - cell = W - return TRUE - - if (istype(W, /obj/item/tank)) - if (tank) - to_chat(user, SPAN_WARNING("\The [src] already has \an [tank].")) - return TRUE - if (!istype(W, tank_permit)) - to_chat(user, SPAN_WARNING("\The [src] can't fit \a [W].")) - return TRUE - if (!user.unEquip(W, src)) - return - user.visible_message( - SPAN_ITALIC("\The [user] fits \the [W] to \the [src]."), - SPAN_ITALIC("You fit \the [W] to \the [src]."), - SPAN_ITALIC("You can hear metal scratching on metal."), - range = 5 - ) - tank = W - return TRUE - - if (isScrewdriver(W)) - if (enabled) - to_chat(user, SPAN_WARNING("Turn \the [src] off first!")) - return TRUE - if (!cell && !tank) - to_chat(user, SPAN_WARNING("\The [src] doesn't have anything you can remove.")) - return TRUE - var/list/options = list() - if (cell) - options += "cell" - if (tank) - options += "tank" - var/selection = input("Which would you like to remove?") as null|anything in options - if (!selection) - return TRUE - var/time_cost = 5 - round(user.get_skill_value(SKILL_ATMOS) * 0.5) //0,1,1,2,2 - if (!do_after(user, time_cost SECONDS, src, do_flags = DO_PUBLIC_UNIQUE)) - return TRUE - var/removed - if (selection == "cell") - user.put_in_hands(cell) - removed = cell - cell = null - else if (selection == "tank") - user.put_in_hands(tank) - removed = tank - tank = null - user.visible_message( - SPAN_ITALIC("\The [user] removes \the [removed] from \the [src]."), - SPAN_ITALIC("You remove the [selection] from \the [src]."), - SPAN_ITALIC("You can hear metal scratching on metal."), - range = 5 - ) - playsound(src, 'sound/items/Screwdriver.ogg', 50, 1) - return TRUE - - . = ..() - -/obj/item/scrubpack/attack_self(mob/user) - toggle(user) - -/obj/item/scrubpack/ui_action_click() - toggle(usr) - -/obj/item/scrubpack/proc/set_sound_state(on_off) - if (on_off) - sound_token = GLOB.sound_player.PlayLoopingSound(src, "\ref[src]", 'sound/machines/scrubber-active.ogg', 25, 3) - else - QDEL_NULL(sound_token) - -/obj/item/scrubpack/proc/toggle(mob/user) - enabled = !enabled - if (enabled) - var/list/mods = list() - if (!cell) mods += "a cell" - if (!tank) mods += "a tank" - if (length(mods)) - to_chat(user, SPAN_WARNING("You try to turn on \the [src], but it's missing [english_list(mods)].")) - enabled = FALSE - return - if (cell.charge < charge_cost) - to_chat(user, SPAN_WARNING("You try to turn on \the [src], but it's out of charge.")) - enabled = FALSE - return - to_chat(user, SPAN_ITALIC("You turn on \the [src].")) - START_PROCESSING(SSobj, src) - icon_state = "scrubpack_on" - set_sound_state(TRUE) - else - to_chat(user, SPAN_ITALIC("You turn off \the [src].")) - STOP_PROCESSING(SSobj, src) - icon_state = "scrubpack" - set_sound_state(FALSE) - -/obj/item/scrubpack/Process() - var/datum/gas_mixture/tank_air = tank.return_air() - if (tank_air.return_pressure() > TANK_LEAK_PRESSURE * 0.8) - audible_message(SPAN_ITALIC("\The [src] beeps stridently and stops working.")) - STOP_PROCESSING(SSobj, src) - icon_state = "scrubpack" - set_sound_state(FALSE) - enabled = FALSE - return - - var/turf/T = get_turf(src) - var/datum/gas_mixture/env_air = T.return_air() - if (env_air.total_moles < MINIMUM_MOLES_TO_FILTER) - return - var/transfer_moles = min(1, volume_rate / env_air.volume) * env_air.total_moles - var/active_scrub_names = scrub_names & env_air.gas - var/total_filter_moles = 0 - var/list/filter_moles = list() - for (var/name in active_scrub_names) - if (env_air.gas[name] < MINIMUM_MOLES_TO_FILTER) - continue - filter_moles[name] = env_air.gas[name] - total_filter_moles += env_air.gas[name] - if (total_filter_moles < MINIMUM_MOLES_TO_FILTER) - return - - var/removed = 1 - var/list/final_filter_moles = list() - while (removed) - removed = 0 - final_filter_moles = list() - for (var/name in filter_moles) - var/amount = filter_moles[name] / total_filter_moles - if (amount < MINIMUM_MOLES_TO_FILTER) - filter_moles -= name - removed = TRUE - break - final_filter_moles[name] = amount * transfer_moles - - var/final_cost = max(charge_cost * 0.1, total_filter_moles / volume_rate) - if (!cell.checked_use(final_cost)) - audible_message(SPAN_ITALIC("\The [src] beeps stridently and stops working.")) - STOP_PROCESSING(SSobj, src) - icon_state = "scrubpack" - set_sound_state(FALSE) - enabled = FALSE - return - - for (var/name in final_filter_moles) - tank_air.adjust_gas(name, final_filter_moles[name], update = FALSE) - env_air.adjust_gas(name, -final_filter_moles[name], update = FALSE) - tank_air.update_values() - env_air.update_values() - -/obj/item/scrubpack/standard - cell = /obj/item/cell/standard - tank = /obj/item/tank/scrubber - tank_permit = /obj/item/tank/scrubber - charge_cost = 30 - volume_rate = 150 diff --git a/code/game/objects/items/weapons/secrets_disk.dm b/code/game/objects/items/weapons/secrets_disk.dm deleted file mode 100644 index 2129a43460cf4..0000000000000 --- a/code/game/objects/items/weapons/secrets_disk.dm +++ /dev/null @@ -1,74 +0,0 @@ -/obj/item/disk/secret_project - name = "'classified' project data disk" - desc = "A special disk for storing massive amounts of data. It is marked as classified, and has an ID card slot on top." - icon = 'icons/obj/cloning.dmi' - icon_state = "datadisk0" - item_state = "card-id" - w_class = ITEM_SIZE_SMALL - req_access = access_ce - var/subject = "some strange, incomprehensible design" - var/locked = 1 - -/obj/item/disk/secret_project/science - desc = "A special disk for storing massive amounts of data. It is marked as classified, and has an ID card slot on top. \ - This one has a lengthy legal label on it denoting it the private, copyrighted property of the Expeditionary Corps Organisation." - req_access = access_rd - -/obj/item/disk/secret_project/Initialize() - . = ..() - var/codename = pick("gamma", "delta", "epsilon", "zeta", "theta", "lambda", "omicron", "sigma", "tau",\ - "upsilon", "omega", "echelon", "prism", "calypso", "bernoulli", "harmony", "nyx", "fresnel") - name = "'[codename]' project data disk" - subject = pick("an experimental design for", "a blueprint to build",\ - "a long set of theoretical formulas detailing the functioning of") - subject += " " + pick("a bluespace artillery cannon", "a supermatter engine", "a fusion engine", "an atmospheric scrubber",\ - "a human cloning pod", "a microwave oven", "a bluespace drive", "a laser carbine", "an energy pistol",\ - "a bluespace gateway", "a teleporter", "a huge mining drill", "a strange spacecraft", "a space station",\ - "a sleek-looking fighter spacecraft", "a ballistic rifle", "an energy sword", "an inanimate carbon rod") - subject += " " + pick("that is extremely powerful", "which is highly efficient", "which is incredibly compact",\ - "that runs off of phoron", "that runs off of hydrogen gas", "created by the Skrell", "that just looks really cool") - -/obj/item/disk/secret_project/examine(mob/user) - . = ..() - if(!locked) - to_chat(user, "With the disk's classified contents unlocked, \ - you peer into its preview screen and see [subject].") - else - to_chat(user, "The disk is locked, you cannot see its contents.") - -/obj/item/disk/secret_project/emag_act(var/remaining_charges, var/mob/user) - to_chat(user, "The cryptographic lock on this disk is far too complex. \ - Your sequencer can't break the code.") - return 0 - -/obj/item/disk/secret_project/attackby(obj/item/W as obj, mob/user as mob) - if(istype(W,/obj/item/card/id)) - var/obj/item/card/id/ID = W - if(check_access(ID)) - locked = !locked - to_chat(user, "You swipe your card and [locked ? "lock":"unlock"] the disk.") - else - to_chat(user, "The disk's screen flashes 'Access Denied'.") - return - . = ..() - -/obj/item/disk/secret_project/verb/change_codename() - set name = "Change project codename" - set category = "Object" - set src in view(0) - - if(!locked) - var/input = sanitize(input(usr, "What would you like to change the project codename to?", "Classified Project Data Disk")) - if(!input || input == "") - return - SetName("'[input]' project data disk") - else - to_chat(usr, "The disk's screen flashes 'Access Denied'. It is locked.") - -/obj/item/storage/box/secret_project_disks - name = "box of classified data disks" - desc = "A box full of disks. Marked with a red 'Top Secret' label. Looks rather ominous." - startswith = list(/obj/item/disk/secret_project = 5) - -/obj/item/storage/box/secret_project_disks/science - startswith = list(/obj/item/disk/secret_project/science = 5) diff --git a/code/game/objects/items/weapons/shields.dm b/code/game/objects/items/weapons/shields.dm deleted file mode 100644 index 9794522e703bd..0000000000000 --- a/code/game/objects/items/weapons/shields.dm +++ /dev/null @@ -1,206 +0,0 @@ -//** Shield Helpers -//These are shared by various items that have shield-like behaviour - -//bad_arc is the ABSOLUTE arc of directions from which we cannot block. If you want to fix it to e.g. the user's facing you will need to rotate the dirs yourself. -/proc/check_shield_arc(mob/user, var/bad_arc, atom/damage_source = null, mob/attacker = null) - //check attack direction - var/attack_dir = 0 //direction from the user to the source of the attack - if(istype(damage_source, /obj/item/projectile)) - var/obj/item/projectile/P = damage_source - attack_dir = get_dir(get_turf(user), P.starting) - else if(attacker) - attack_dir = get_dir(get_turf(user), get_turf(attacker)) - else if(damage_source) - attack_dir = get_dir(get_turf(user), get_turf(damage_source)) - - if(!(attack_dir && (attack_dir & bad_arc))) - return 1 - return 0 - -/proc/default_parry_check(mob/user, mob/attacker, atom/damage_source) - //parry only melee attacks - if(istype(damage_source, /obj/item/projectile) || (attacker && get_dist(user, attacker) > 1) || user.incapacitated()) - return 0 - - //block as long as they are not directly behind us - var/bad_arc = reverse_direction(user.dir) //arc of directions from which we cannot block - if(!check_shield_arc(user, bad_arc, damage_source, attacker)) - return 0 - - return 1 - -/obj/item/shield - name = "shield" - var/base_block_chance = 60 - var/max_block = 0 - -/obj/item/shield/handle_shield(mob/user, var/damage, atom/damage_source = null, mob/attacker = null, var/def_zone = null, var/attack_text = "the attack") - if(user.incapacitated()) - return 0 - - //block as long as they are not directly behind us - var/bad_arc = reverse_direction(user.dir) //arc of directions from which we cannot block - if(check_shield_arc(user, bad_arc, damage_source, attacker)) - if(prob(get_block_chance(user, damage, damage_source, attacker))) - user.visible_message("\The [user] blocks [attack_text] with \the [src]!") - return 1 - return 0 - -/obj/item/shield/proc/get_block_chance(mob/user, var/damage, atom/damage_source = null, mob/attacker = null) - return base_block_chance - -/obj/item/shield/riot - name = "riot shield" - desc = "A shield adept at blocking blunt objects from connecting with the torso of the shield wielder." - icon = 'icons/obj/weapons/melee_physical.dmi' - icon_state = "riot" - obj_flags = OBJ_FLAG_CONDUCTIBLE - slot_flags = SLOT_BACK - force = 5.0 - throwforce = 5.0 - throw_speed = 1 - throw_range = 4 - w_class = ITEM_SIZE_HUGE - origin_tech = list(TECH_MATERIAL = 2) - matter = list(MATERIAL_GLASS = 7500, MATERIAL_STEEL = 1000) - attack_verb = list("shoved", "bashed") - var/cooldown = 0 //shield bash cooldown. based on world.time - var/can_block_lasers = FALSE - -/obj/item/shield/riot/handle_shield(mob/user) - . = ..() - if(.) playsound(user.loc, 'sound/weapons/Genhit.ogg', 50, 1) - -/obj/item/shield/riot/get_block_chance(mob/user, var/damage, atom/damage_source = null, mob/attacker = null) - if(istype(damage_source, /obj/item/projectile)) - var/obj/item/projectile/P = damage_source - //plastic shields do not stop bullets or lasers, even in space. Will block beanbags, rubber bullets, and stunshots just fine though. - if(is_sharp(P) && damage >= max_block) - return 0 - if(istype(P, /obj/item/projectile/beam) && (!can_block_lasers || (P.armor_penetration >= max_block))) - return 0 - return base_block_chance - -/obj/item/shield/riot/attackby(obj/item/W as obj, mob/user as mob) - if(istype(W, /obj/item/melee/baton)) - if(cooldown < world.time - 25) - user.visible_message("[user] bashes [src] with [W]!") - playsound(user.loc, 'sound/effects/shieldbash.ogg', 50, 1) - cooldown = world.time - else - ..() - -/obj/item/shield/riot/metal - name = "plasteel combat shield" - icon = 'icons/obj/weapons/melee_physical.dmi' - icon_state = "metal" - obj_flags = OBJ_FLAG_CONDUCTIBLE - slot_flags = SLOT_BACK - force = 6.0 - throwforce = 7.0 - throw_range = 3 - w_class = ITEM_SIZE_HUGE - matter = list(MATERIAL_PLASTEEL = 8500) - max_block = 50 - can_block_lasers = TRUE - slowdown_general = 0.5 - -/obj/item/shield/buckler - name = "buckler" - desc = "A wooden buckler used to block sharp things from entering your body back in the day. Not very good at stopping projectiles, but still better than nothing." - icon = 'icons/obj/weapons/melee_physical.dmi' - icon_state = "buckler" - slot_flags = SLOT_BACK - force = 8 - throwforce = 8 - base_block_chance = 50 - max_block = 15 - throw_speed = 6 - throw_range = 20 - w_class = ITEM_SIZE_HUGE - origin_tech = list(TECH_MATERIAL = 1) - matter = list(MATERIAL_STEEL = 1000, MATERIAL_WOOD = 1000) - attack_verb = list("shoved", "bashed") - -/obj/item/shield/buckler/handle_shield(mob/user) - . = ..() - if(.) playsound(user.loc, 'sound/weapons/Genhit.ogg', 50, 1) - -/obj/item/shield/buckler/get_block_chance(mob/user, var/damage, atom/damage_source = null, mob/attacker = null) - if (istype(damage_source, /obj/item/projectile)) - if (max_block && damage >= max_block) - return 0 - else - return (base_block_chance / 2) - return base_block_chance - -/* - * Energy Shield - */ - -/obj/item/shield/energy - name = "energy combat shield" - desc = "A shield capable of stopping most projectile and melee attacks. It can be retracted, expanded, and stored anywhere." - icon = 'icons/obj/weapons/melee_energy.dmi' - icon_state = "eshield0" // eshield1 for expanded - obj_flags = OBJ_FLAG_CONDUCTIBLE - force = 3.0 - throwforce = 5.0 - throw_speed = 1 - throw_range = 4 - w_class = ITEM_SIZE_SMALL - origin_tech = list(TECH_MATERIAL = 4, TECH_MAGNET = 3, TECH_ESOTERIC = 4) - attack_verb = list("shoved", "bashed") - var/active = 0 - -/obj/item/shield/energy/handle_shield(mob/user) - if(!active) - return 0 //turn it on first! - . = ..() - - if(.) - var/datum/effect/effect/system/spark_spread/spark_system = new /datum/effect/effect/system/spark_spread() - spark_system.set_up(5, 0, user.loc) - spark_system.start() - playsound(user.loc, 'sound/weapons/blade1.ogg', 50, 1) - -/obj/item/shield/energy/get_block_chance(mob/user, var/damage, atom/damage_source = null, mob/attacker = null) - if(istype(damage_source, /obj/item/projectile)) - var/obj/item/projectile/P = damage_source - if((is_sharp(P) && damage > 10) || istype(P, /obj/item/projectile/beam)) - return (base_block_chance - round(damage / 2.5)) //block bullets and beams using the old block chance - return base_block_chance - -/obj/item/shield/energy/attack_self(mob/living/user as mob) - if ((MUTATION_CLUMSY in user.mutations) && prob(50)) - to_chat(user, "You beat yourself in the head with [src].") - user.take_organ_damage(5, 0) - active = !active - if (active) - force = 10 - update_icon() - w_class = ITEM_SIZE_HUGE - playsound(user, 'sound/weapons/saberon.ogg', 50, 1) - to_chat(user, "\The [src] is now active.") - - else - force = 3 - update_icon() - w_class = ITEM_SIZE_TINY - playsound(user, 'sound/weapons/saberoff.ogg', 50, 1) - to_chat(user, "\The [src] can now be concealed.") - - if(istype(user,/mob/living/carbon/human)) - var/mob/living/carbon/human/H = user - H.update_inv_l_hand() - H.update_inv_r_hand() - - add_fingerprint(user) - return - -/obj/item/shield/energy/on_update_icon() - icon_state = "eshield[active]" - if(active) - set_light(0.4, 0.1, 1, 2, "#006aff") - else - set_light(0) diff --git a/code/game/objects/items/weapons/soap.dm b/code/game/objects/items/weapons/soap.dm deleted file mode 100644 index 5a704b78ce480..0000000000000 --- a/code/game/objects/items/weapons/soap.dm +++ /dev/null @@ -1,110 +0,0 @@ -/obj/item/soap - name = "soap" - desc = "A cheap bar of soap. Doesn't smell." - gender = PLURAL - icon = 'icons/obj/soap.dmi' - icon_state = "soap" - atom_flags = ATOM_FLAG_OPEN_CONTAINER - w_class = ITEM_SIZE_SMALL - throwforce = 0 - throw_speed = 4 - throw_range = 20 - var/key_data - - var/list/valid_colors = list(COLOR_GREEN_GRAY, COLOR_RED_GRAY, COLOR_BLUE_GRAY, COLOR_BROWN, COLOR_PALE_PINK, COLOR_PALE_BTL_GREEN, COLOR_OFF_WHITE, COLOR_GRAY40, COLOR_GOLD) - var/list/valid_scents = list("fresh air", "cinnamon", "mint", "cocoa", "lavender", "an ocean breeze", "a summer garden", "vanilla", "cheap perfume") - var/list/scent_intensity = list("faintly", "strongly", "overbearingly") - var/list/valid_shapes = list("oval", "circular", "rectangular", "square") - var/decal_name - var/list/decals = list("diamond", "heart", "circle", "triangle", "") - -/obj/item/soap/New() - ..() - create_reagents(30) - wet() - -/obj/item/soap/Initialize() - . = ..() - var/shape = pick(valid_shapes) - var/scent = pick(valid_scents) - var/smelly = pick(scent_intensity) - icon_state = "soap-[shape]" - color = pick(valid_colors) - decal_name = pick(decals) - desc = "\A [shape] bar of soap. It smells [smelly] of [scent]." - update_icon() - -/obj/item/soap/proc/wet() - reagents.add_reagent(/datum/reagent/space_cleaner, 15) - -/obj/item/soap/Crossed(var/mob/living/AM) - if (istype(AM)) - if(AM.pulledby) - return - AM.slip("the [src.name]",3) - -/obj/item/soap/afterattack(atom/target, mob/user as mob, proximity) - if(!proximity) return - //I couldn't feasibly fix the overlay bugs caused by cleaning items we are wearing. - //So this is a workaround. This also makes more sense from an IC standpoint. ~Carn - var/cleaned = FALSE - if(user.client && (target in user.client.screen)) - to_chat(user, "You need to take that [target.name] off before cleaning it.") - else if(istype(target,/obj/effect/decal/cleanable/blood)) - to_chat(user, "You scrub \the [target.name] out.") - target.clean_blood() //Blood is a cleanable decal, therefore needs to be accounted for before all cleanable decals. - cleaned = TRUE - else if(istype(target,/obj/effect/decal/cleanable)) - to_chat(user, "You scrub \the [target.name] out.") - qdel(target) - cleaned = TRUE - else if(istype(target,/turf) || istype(target, /obj/structure/catwalk)) - var/turf/T = get_turf(target) - if(!T) - return - user.visible_message("[user] starts scrubbing \the [T].") - T.clean(src, user, 80, "You scrub \the [target.name] clean.") - cleaned = TRUE - else if(istype(target,/obj/structure/hygiene/sink)) - to_chat(user, "You wet \the [src] in the sink.") - wet() - else if(ishuman(target)) - to_chat(user, "You clean \the [target.name].") - if(reagents) - reagents.trans_to(target, reagents.total_volume / 8) - target.clean_blood() //Clean bloodied atoms. Blood decals themselves need to be handled above. - cleaned = TRUE - else - to_chat(user, "You clean \the [target.name].") - target.clean_blood() //Clean bloodied atoms. Blood decals themselves need to be handled above. - cleaned = TRUE - - if(cleaned) - user.update_personal_goal(/datum/goal/clean, 1) - -//attack_as_weapon -/obj/item/soap/attack(mob/living/target, mob/living/user, var/target_zone) - if(target && user && ishuman(target) && ishuman(user) && !target.stat && !user.stat && user.zone_sel &&user.zone_sel.selecting == BP_MOUTH) - user.visible_message("\The [user] washes \the [target]'s mouth out with soap!") - if(reagents) - reagents.trans_to_mob(target, reagents.total_volume / 2, CHEM_INGEST) - user.setClickCooldown(DEFAULT_QUICK_COOLDOWN) //prevent spam - return - ..() - -/obj/item/soap/attackby(var/obj/item/I, var/mob/user) - if(istype(I, /obj/item/key)) - if(!key_data) - to_chat(user, "You imprint \the [I] into \the [src].") - var/obj/item/key/K = I - key_data = K.key_data - update_icon() - return - ..() - -/obj/item/soap/on_update_icon() - overlays.Cut() - if(key_data) - overlays += image('icons/obj/items.dmi', icon_state = "soap_key_overlay") - else if(decal_name) - overlays += overlay_image(icon, "decal-[decal_name]") \ No newline at end of file diff --git a/code/game/objects/items/weapons/staff.dm b/code/game/objects/items/weapons/staff.dm deleted file mode 100644 index 3a08b09e6b615..0000000000000 --- a/code/game/objects/items/weapons/staff.dm +++ /dev/null @@ -1,24 +0,0 @@ -/obj/item/staff - name = "wizards staff" - desc = "Apparently a staff used by the wizard." - icon = 'icons/obj/wizard.dmi' - icon_state = "staff" - force = 3.0 - throwforce = 5.0 - throw_speed = 1 - throw_range = 5 - w_class = ITEM_SIZE_SMALL - attack_verb = list("bludgeoned", "whacked", "disciplined") - -/obj/item/staff/broom - name = "broom" - desc = "Used for sweeping, and flying into the night while cackling. Black cat not included." - icon = 'icons/obj/wizard.dmi' - icon_state = "broom" - -/obj/item/staff/gentcane - name = "Gentlemans Cane" - desc = "An ebony can with an ivory tip." - icon = 'icons/obj/weapons/melee_physical.dmi' - icon_state = "cane" - item_state = "stick" \ No newline at end of file diff --git a/code/game/objects/items/weapons/storage/backpack.dm b/code/game/objects/items/weapons/storage/backpack.dm deleted file mode 100644 index 1a8c1f33146f5..0000000000000 --- a/code/game/objects/items/weapons/storage/backpack.dm +++ /dev/null @@ -1,568 +0,0 @@ - -/* - * Backpack - */ - -/obj/item/storage/backpack - name = "backpack" - desc = "You wear this on your back and put items into it." - item_icons = list( - slot_l_hand_str = 'icons/mob/onmob/items/lefthand_backpacks.dmi', - slot_r_hand_str = 'icons/mob/onmob/items/righthand_backpacks.dmi', - ) - icon_state = "backpack" - item_state = null - //most backpacks use the default backpack state for inhand overlays - item_state_slots = list( - slot_l_hand_str = "backpack", - slot_r_hand_str = "backpack", - ) - w_class = ITEM_SIZE_HUGE - slot_flags = SLOT_BACK - max_w_class = ITEM_SIZE_LARGE - max_storage_space = DEFAULT_BACKPACK_STORAGE - open_sound = 'sound/effects/storage/unzip.ogg' - allow_slow_dump = TRUE - - /// Can this backpack be opened while worn on the back? - var/worn_access = TRUE - -/obj/item/storage/backpack/attackby(obj/item/W as obj, mob/user as mob) - if (src.use_sound) - playsound(src.loc, src.use_sound, 50, 1, -5) - return ..() - -/obj/item/storage/backpack/equipped(var/mob/user, var/slot) - if (!has_extension(src, /datum/extension/appearance)) - set_extension(src, /datum/extension/appearance/cardborg) - if (slot == slot_back && src.use_sound) - playsound(src.loc, src.use_sound, 50, 1, -5) - if (!worn_access && user.isEquipped(src, slot_back)) - close_all() - ..(user, slot) - -/obj/item/storage/backpack/handle_item_insertion(obj/item/W, prevent_warning = FALSE, NoUpdate = 0) - if (!worn_access && usr?.isEquipped(src, slot_back)) - to_chat(usr, SPAN_WARNING("You can't insert \the [W] while \the [src] is on your back.")) - return - ..() - -/obj/item/storage/backpack/open(mob/user) - if (!worn_access && user.isEquipped(src, slot_back)) - to_chat(user, SPAN_WARNING("You can't open \the [src] while it is on your back.")) - return - ..() - -/* - * Backpack Types - */ - -/obj/item/storage/backpack/holding - name = "bag of holding" - desc = "A backpack that opens into a localized pocket of Blue Space." - origin_tech = list(TECH_BLUESPACE = 4) - icon_state = "holdingpack" - item_state_slots = list( - slot_l_hand_str = "holdingpack", - slot_r_hand_str = "holdingpack" - ) - max_w_class = ITEM_SIZE_NORMAL - max_storage_space = 56 - -/obj/item/storage/backpack/holding/New() - ..() - return - -/obj/item/storage/backpack/holding/attackby(obj/item/W as obj, mob/user as mob) - if(istype(W, /obj/item/storage/backpack/holding) || istype(W, /obj/item/storage/bag/trash/bluespace)) - to_chat(user, "The Bluespace interfaces of the two devices conflict and malfunction.") - qdel(W) - return 1 - return ..() - - //Please don't clutter the parent storage item with stupid hacks. -/obj/item/storage/backpack/holding/can_be_inserted(obj/item/W as obj, stop_messages = 0) - if(istype(W, /obj/item/storage/backpack/holding)) - return 1 - return ..() - -/obj/item/storage/backpack/holding/duffle - name = "dufflebag of holding" - icon_state = "holdingduffle" - item_state_slots = list(slot_l_hand_str = "duffle", slot_r_hand_str = "duffle") - -/obj/item/storage/backpack/santabag - name = "\improper Santa's gift bag" - desc = "Space Santa uses this to deliver toys to all the nice children in space for Christmas! Wow, it's pretty big!" - icon_state = "giftbag0" - item_state = "giftbag" - w_class = ITEM_SIZE_HUGE - max_w_class = ITEM_SIZE_NORMAL - max_storage_space = 400 // can store a ton of shit! - item_state_slots = null - -/obj/item/storage/backpack/cultpack - name = "trophy rack" - desc = "It's useful for both carrying extra gear, and proudly declaring your dedication to your chosen malevolent deity." - icon_state = "cultpack" - -/obj/item/storage/backpack/clown - name = "\improper Giggles von Honkerton" - desc = "It's a very vibrant backpack, made for a clown." - icon_state = "clownpack" - item_state_slots = null - -/obj/item/storage/backpack/medic - name = "medical backpack" - desc = "It's a backpack, designed for use in the sterile confines of the infirmary." - icon_state = "medicalpack" - item_state_slots = list( - slot_l_hand_str = "medicalpack", - slot_r_hand_str = "medicalpack" - ) - -/obj/item/storage/backpack/security - name = "security backpack" - desc = "It's a very robust backpack, for security-related needs." - icon_state = "securitypack" - item_state_slots = list( - slot_l_hand_str = "securitypack", - slot_r_hand_str = "securitypack" - ) - -/obj/item/storage/backpack/security/exo - name = "corporate security backpack" - desc = "It's a very robust backpack, for security-related needs. This one is in EXO colors." - icon_state = "securitypack_exo" - -/obj/item/storage/backpack/command - name = "command backpack" - desc = "It's a special backpack, made exclusively for senior officers." - icon_state = "captainpack" - item_state_slots = list( - slot_l_hand_str = "captainpack", - slot_r_hand_str = "captainpack" - ) - -/obj/item/storage/backpack/industrial - name = "industrial backpack" - desc = "It's a tough backpack, made for the daily grind of industrial life." - icon_state = "engiepack" - item_state_slots = list( - slot_l_hand_str = "engiepack", - slot_r_hand_str = "engiepack" - ) - -/obj/item/storage/backpack/toxins - name = "science backpack" - desc = "It's a stain-resistant light backpack, modeled for use in laboratories and other scientific settings." - icon_state = "ntpack" - item_state_slots = list( - slot_l_hand_str = "ntpack", - slot_r_hand_str = "ntpack" - ) - -/obj/item/storage/backpack/hydroponics - name = "hydroponics backpack" - desc = "It's a green backpack, with many pockets to store plants and tools in." - icon_state = "hydpack" - item_state_slots = list( - slot_l_hand_str = "hydpack", - slot_r_hand_str = "hydpack" - ) - -/obj/item/storage/backpack/genetics - name = "genetics backpack" - desc = "It's a backpack, fitted with slots for diskettes and other workplace tools." - icon_state = "genpack" - item_state_slots = list( - slot_l_hand_str = "genpack", - slot_r_hand_str = "genpack" - ) - -/obj/item/storage/backpack/virology - name = "sterile backpack" - desc = "It's a sterile backpack, specially designed for work in areas with a biosafety classification level." - icon_state = "viropack" - item_state_slots = list( - slot_l_hand_str = "viropack", - slot_r_hand_str = "viropack" - ) - -/obj/item/storage/backpack/chemistry - name = "pharmacy backpack" - desc = "It's a sterile orange backpack, which was designed to hold beakers, pill bottles, and other reagent containers." - icon_state = "chempack" - item_state_slots = list( - slot_l_hand_str = "chempack", - slot_r_hand_str = "chempack" - ) - -/obj/item/storage/backpack/rucksack - name = "black rucksack" - desc = "A sturdy, military-grade backpack with low-profile straps. Designed to work well with armor." - icon_state = "rucksack" - item_state_slots = list( - slot_l_hand_str = "rucksack", - slot_r_hand_str = "rucksack" - ) - -/obj/item/storage/backpack/rucksack/blue - name = "blue rucksack" - icon_state = "rucksack_blue" - item_state_slots = list( - slot_l_hand_str = "rucksack_blue", - slot_r_hand_str = "rucksack_blue" - ) - -/obj/item/storage/backpack/rucksack/green - name = "green rucksack" - icon_state = "rucksack_green" - item_state_slots = list( - slot_l_hand_str = "rucksack_green", - slot_r_hand_str = "rucksack_green" - ) - -/obj/item/storage/backpack/rucksack/navy - name = "navy rucksack" - icon_state = "rucksack_navy" - item_state_slots = list( - slot_l_hand_str = "rucksack_navy", - slot_r_hand_str = "rucksack_navy" - ) - -/obj/item/storage/backpack/rucksack/tan - name = "tan rucksack" - icon_state = "rucksack_tan" - item_state_slots = list( - slot_l_hand_str = "rucksack_tan", - slot_r_hand_str = "rucksack_tan" - ) - -/* - * Duffle Types - */ - -/obj/item/storage/backpack/dufflebag - name = "dufflebag" - desc = "A large dufflebag for holding extra things." - icon_state = "duffle" - item_state_slots = null - w_class = ITEM_SIZE_HUGE - max_storage_space = DEFAULT_BACKPACK_STORAGE + 10 - worn_access = FALSE - -/obj/item/storage/backpack/dufflebag/syndie - name = "black dufflebag" - desc = "A large dufflebag for holding extra tactical supplies." - icon_state = "duffle_syndie" - item_state_slots = list(slot_l_hand_str = "duffle_syndie", slot_r_hand_str = "duffle_syndie") - -/obj/item/storage/backpack/dufflebag/syndie/med - name = "medical dufflebag" - desc = "A large dufflebag for holding extra tactical medical supplies." - icon_state = "duffle_syndiemed" - item_state_slots = list(slot_l_hand_str = "duffle_syndiemed", slot_r_hand_str = "duffle_syndiemed") - -/obj/item/storage/backpack/dufflebag/syndie/med/full - startswith = list( - /obj/item/roller, - /obj/item/storage/box/syringes, - /obj/item/clothing/gloves/latex/nitrile, - /obj/item/clothing/glasses/hud/health, - /obj/item/device/scanner/health, - /obj/item/auto_cpr, - /obj/item/defibrillator/loaded, - /obj/item/reagent_containers/ivbag/nanoblood, - /obj/item/storage/firstaid/adv - ) - -/obj/item/storage/backpack/dufflebag/syndie/ammo - name = "ammunition dufflebag" - desc = "A large dufflebag for holding extra weapons ammunition and supplies." - icon_state = "duffle_syndieammo" - item_state_slots = list(slot_l_hand_str = "duffle_syndieammo", slot_r_hand_str = "duffle_syndieammo") - -/obj/item/storage/backpack/dufflebag/com - name = "command dufflebag" - desc = "A large dufflebag for holding extra goods for senior command." - icon_state = "duffle_captain" - item_state_slots = list(slot_l_hand_str = "duffle_captain", slot_r_hand_str = "duffle_captain") - -/obj/item/storage/backpack/dufflebag/med - name = "medical dufflebag" - desc = "A large dufflebag for holding extra medical supplies." - icon_state = "duffle_med" - item_state_slots = list(slot_l_hand_str = "duffle_med", slot_r_hand_str = "duffle_med") - -/obj/item/storage/backpack/dufflebag/sec - name = "security dufflebag" - desc = "A large dufflebag for holding extra security supplies and ammunition." - icon_state = "duffle_sec" - item_state_slots = list(slot_l_hand_str = "duffle_sec", slot_r_hand_str = "duffle_sec") - -/obj/item/storage/backpack/dufflebag/eng - name = "industrial dufflebag" - desc = "A large dufflebag for holding extra tools and supplies." - icon_state = "duffle_eng" - item_state_slots = list(slot_l_hand_str = "duffle_eng", slot_r_hand_str = "duffle_eng") - -/obj/item/storage/backpack/dufflebag/firefighter - name = "firefighter's dufflebag" - desc = "A large dufflebag containing equipment to fight fires with." - startswith = list( - /obj/item/storage/belt/fire_belt/full, - /obj/item/clothing/suit/fire/firefighter, - /obj/item/extinguisher, - /obj/item/clothing/gloves/fire, - /obj/item/clothing/accessory/fire_overpants, - /obj/item/tank/oxygen_scba, - /obj/item/clothing/head/hardhat/firefighter, - /obj/item/extinguisher - ) -/* - * Satchel Types - */ - -/obj/item/storage/backpack/satchel - name = "satchel" - desc = "A trendy-looking satchel." - icon_state = "satchel-norm" - -/obj/item/storage/backpack/satchel/grey - name = "grey satchel" - -/obj/item/storage/backpack/satchel/grey/withwallet - startswith = list(/obj/item/storage/wallet/random) - -/obj/item/storage/backpack/satchel/leather //brown, master type - name = "brown leather satchel" - desc = "A very fancy satchel made of some kind of leather." - icon_state = "satchel" - color = "#3d2711" - -/obj/item/storage/backpack/satchel/leather/khaki - name = "khaki leather satchel" - color = "#baa481" - -/obj/item/storage/backpack/satchel/leather/black - name = "black leather satchel" - color = "#212121" - -/obj/item/storage/backpack/satchel/leather/navy - name = "navy leather satchel" - color = "#1c2133" - -/obj/item/storage/backpack/satchel/leather/olive - name = "olive leather satchel" - color = "#544f3d" - -/obj/item/storage/backpack/satchel/leather/reddish - name = "auburn leather satchel" - color = "#512828" - -/obj/item/storage/backpack/satchel/pocketbook //black, master type - name = "black pocketbook" - desc = "A neat little folding clasp pocketbook with a shoulder sling." - icon_state = "pocketbook" - w_class = ITEM_SIZE_HUGE // to avoid recursive backpacks - slot_flags = SLOT_BACK - max_w_class = ITEM_SIZE_NORMAL - max_storage_space = DEFAULT_LARGEBOX_STORAGE - color = "#212121" - -/obj/item/storage/backpack/satchel/pocketbook/brown - name = "brown pocketbook" - color = "#3d2711" - -/obj/item/storage/backpack/satchel/pocketbook/reddish - name = "auburn pocketbook" - color = "#512828" - -/obj/item/storage/backpack/satchel/eng - name = "industrial satchel" - desc = "A tough satchel with extra pockets." - icon_state = "satchel-eng" - item_state_slots = list( - slot_l_hand_str = "engiepack", - slot_r_hand_str = "engiepack", - ) - -/obj/item/storage/backpack/satchel/med - name = "medical satchel" - desc = "A sterile satchel designed for use in the sterile confines of the infirmary." - icon_state = "satchel-med" - item_state_slots = list( - slot_l_hand_str = "medicalpack", - slot_r_hand_str = "medicalpack", - ) - -/obj/item/storage/backpack/satchel/vir - name = "sterile satchel" - desc = "It's a sterile satchel, rated for use in areas with a biosafety classification level." - icon_state = "satchel-vir" - -/obj/item/storage/backpack/satchel/chem - name = "pharmacy satchel" - desc = "It's a sterile orange satchel, designed to hold beakers, pill bottles, and other reagent containers." - icon_state = "satchel-chem" - -/obj/item/storage/backpack/satchel/gen - name = "genetics satchel" - desc = "A green satchel, filled with slots for diskettes and other workplace tools." - icon_state = "satchel-gen" - -/obj/item/storage/backpack/satchel/tox - name = "science satchel" - desc = "It's a stain-resistant satchel, modeled for use in laboratories and other scientific settings." - icon_state = "satchel-nt" - -/obj/item/storage/backpack/satchel/sec - name = "security satchel" - desc = "A robust satchel for security-related needs." - icon_state = "satchel-sec" - item_state_slots = list( - slot_l_hand_str = "securitypack", - slot_r_hand_str = "securitypack", - ) - -/obj/item/storage/backpack/satchel/sec/exo - name = "corporate security satchel" - desc = "A robust satchel for corporate security-related needs. This one is in EXO colors." - icon_state = "satchel-sec_exo" - -/obj/item/storage/backpack/satchel/hyd - name = "hydroponics satchel" - desc = "A green satchel for plant related work." - icon_state = "satchel_hyd" - -/obj/item/storage/backpack/satchel/com - name = "command satchel" - desc = "An exclusive satchel for senior officers." - icon_state = "satchel-cap" - item_state_slots = list( - slot_l_hand_str = "satchel-cap", - slot_r_hand_str = "satchel-cap", - ) - -//Smuggler's satchel -/obj/item/storage/backpack/satchel/flat - name = "\improper Smuggler's satchel" - desc = "A very slim satchel, that can easily fit into tight spaces." - icon_state = "satchel-flat" - item_state = "satchel-norm" - level = 1 - w_class = ITEM_SIZE_NORMAL //Can fit in backpacks itself. - storage_slots = 5 - max_w_class = ITEM_SIZE_NORMAL - max_storage_space = 15 - cant_hold = list(/obj/item/storage/backpack/satchel/flat) //muh recursive backpacks - startswith = list( - /obj/item/stack/tile/floor, - /obj/item/crowbar - ) - -/obj/item/storage/backpack/satchel/flat/MouseDrop(var/obj/over_object) - var/turf/T = get_turf(src) - if(hides_under_flooring() && isturf(T) && !T.is_plating()) - return - ..() - -/obj/item/storage/backpack/satchel/flat/hide(var/i) - set_invisibility(i ? 101 : 0) - anchored = i ? TRUE : FALSE - alpha = i ? 128 : initial(alpha) - -/obj/item/storage/backpack/satchel/flat/attackby(obj/item/W, mob/user) - var/turf/T = get_turf(src) - if(hides_under_flooring() && isturf(T) && !T.is_plating()) - to_chat(user, "You must remove the plating first.") - return 1 - return ..() - -//ERT backpacks. -/obj/item/storage/backpack/ert - name = "emergency response team backpack" - desc = "A spacious backpack with lots of pockets, used by members of the Emergency Response Team." - icon_state = "ert_commander" - item_state_slots = list( - slot_l_hand_str = "securitypack", - slot_r_hand_str = "securitypack", - ) - -//Commander -/obj/item/storage/backpack/ert/commander - name = "emergency response team commander backpack" - desc = "A spacious backpack with lots of pockets, worn by the commander of an Emergency Response Team." - -//Security -/obj/item/storage/backpack/ert/security - name = "emergency response team security backpack" - desc = "A spacious backpack with lots of pockets, worn by security members of an Emergency Response Team." - icon_state = "ert_security" - -//Engineering -/obj/item/storage/backpack/ert/engineer - name = "emergency response team engineer backpack" - desc = "A spacious backpack with lots of pockets, worn by engineering members of an Emergency Response Team." - icon_state = "ert_engineering" - -//Medical -/obj/item/storage/backpack/ert/medical - name = "emergency response team corpsman backpack" - desc = "A spacious backpack with lots of pockets, worn by the corpsmen of an Emergency Response Team." - icon_state = "ert_medical" - -/* - * Messenger Bags - */ - -/obj/item/storage/backpack/messenger - name = "messenger bag" - desc = "A small, sturdy backpack, worn over one shoulder." - icon_state = "courierbag" - -/obj/item/storage/backpack/messenger/chem - name = "pharmacy messenger bag" - desc = "A small, sterile backpack, worn over one shoulder. This one was designed to hold beakers, pill bottles, and other reagent containers." - icon_state = "courierbagchem" - -/obj/item/storage/backpack/messenger/med - name = "medical messenger bag" - desc = "A small, sterile backpack worn over one shoulder. This one was designed for use in the sterile confines of the infirmary." - icon_state = "courierbagmed" - -/obj/item/storage/backpack/messenger/viro - name = "virology messenger bag" - desc = "A small, sterile backpack worn over one shoulder. This one was designed for work in areas with a biosafety classification level." - icon_state = "courierbagviro" - -/obj/item/storage/backpack/messenger/tox - name = "science messenger bag" - desc = "A small, stain-resistant backpack worn over one shoulder. This one was modeled for use in laboratories and other scientific settings." - icon_state = "courierbagnt" - -/obj/item/storage/backpack/messenger/com - name = "command messenger bag" - desc = "A small backpack worn over one shoulder. This one was made specifically for senior officers." - icon_state = "courierbagcom" - -/obj/item/storage/backpack/messenger/engi - name = "industrial messenger bag" - desc = "A small, tough backpack worn over one shoulder. This one was designed for industrial work." - icon_state = "courierbagengi" - -/obj/item/storage/backpack/messenger/hyd - name = "hydroponics messenger bag" - desc = "A small backpack worn over one shoulder. This one was designed for plant-related work." - icon_state = "courierbaghyd" - -/obj/item/storage/backpack/messenger/sec - name = "security messenger bag" - desc = "A small, tactical backpack worn over one shoulder." - icon_state = "courierbagsec" - -/obj/item/storage/backpack/messenger/sec/exo - name = "corporate security messenger bag" - desc = "A small, tactical backpack worn over one shoulder. This one is in EXO colors." - icon_state = "courierbagsec_exo" diff --git a/code/game/objects/items/weapons/storage/bags.dm b/code/game/objects/items/weapons/storage/bags.dm deleted file mode 100644 index d3ea66d4c44dd..0000000000000 --- a/code/game/objects/items/weapons/storage/bags.dm +++ /dev/null @@ -1,106 +0,0 @@ -/* - Represents flexible bags that expand based on the size of their contents. -*/ -/obj/item/storage/bag - allow_quick_gather = 1 - allow_quick_empty = 1 - use_to_pickup = 1 - slot_flags = SLOT_BELT - -/obj/item/storage/bag/handle_item_insertion(obj/item/W as obj, prevent_warning = 0) - . = ..() - if(.) update_w_class() - -/obj/item/storage/bag/remove_from_storage(obj/item/W as obj, atom/new_location) - . = ..() - if(.) update_w_class() - -/obj/item/storage/bag/can_be_inserted(obj/item/W, mob/user, stop_messages = 0) - var/mob/living/carbon/human/H = ishuman(user) ? user : null // if we're human, then we need to check if bag in a pocket - if(istype(src.loc, /obj/item/storage) || H?.is_in_pocket(src)) - if(!stop_messages) - to_chat(user, SPAN_NOTICE("Take \the [src] out of [istype(src.loc, /obj) ? "\the [src.loc]" : "the pocket"] first.")) - return 0 //causes problems if the bag expands and becomes larger than src.loc can hold, so disallow it - . = ..() - -/obj/item/storage/bag/proc/update_w_class() - w_class = initial(w_class) - for(var/obj/item/I in contents) - w_class = max(w_class, I.w_class) - - var/cur_storage_space = storage_space_used() - while(BASE_STORAGE_CAPACITY(w_class) < cur_storage_space) - w_class++ - -/obj/item/storage/bag/get_storage_cost() - var/used_ratio = storage_space_used()/max_storage_space - return max(BASE_STORAGE_COST(w_class), round(used_ratio*BASE_STORAGE_COST(max_w_class), 1)) - -// ----------------------------- -// Trash bag -// ----------------------------- -/obj/item/storage/bag/trash - name = "trash bag" - desc = "It's the heavy-duty black polymer kind. Time to take out the trash!" - icon = 'icons/obj/janitor.dmi' - icon_state = "trashbag" - item_state = "trashbag" - - w_class = ITEM_SIZE_SMALL - max_w_class = ITEM_SIZE_HUGE //can fit a backpack inside a trash bag, seems right - max_storage_space = DEFAULT_BACKPACK_STORAGE - can_hold = list() // any - -/obj/item/storage/bag/trash/update_w_class() - ..() - update_icon() - -/obj/item/storage/bag/trash/on_update_icon() - switch(w_class) - if(2) icon_state = "[initial(icon_state)]" - if(3) icon_state = "[initial(icon_state)]1" - if(4) icon_state = "[initial(icon_state)]2" - if(5 to INFINITY) icon_state = "[initial(icon_state)]3" - -/obj/item/storage/bag/trash/bluespace - name = "trash bag of holding" - max_storage_space = 56 - desc = "The latest and greatest in custodial convenience, a trashbag that is capable of holding vast quantities of garbage." - icon_state = "bluetrashbag" - -/obj/item/storage/bag/trash/bluespace/attackby(obj/item/W as obj, mob/user as mob) - if(istype(W, /obj/item/storage/backpack/holding) || istype(W, /obj/item/storage/bag/trash/bluespace)) - to_chat(user, "The Bluespace interfaces of the two devices conflict and malfunction.") - qdel(W) - return 1 - return ..() - -// ----------------------------- -// Plastic Bag -// ----------------------------- - -/obj/item/storage/bag/plasticbag - name = "plastic bag" - desc = "It's a very flimsy, very noisy alternative to a bag." - icon = 'icons/obj/trash.dmi' - icon_state = "plasticbag" - item_state = "plasticbag" - - w_class = ITEM_SIZE_TINY - max_w_class = ITEM_SIZE_NORMAL - max_storage_space = DEFAULT_BOX_STORAGE - can_hold = list() // any - -// ----------------------------- -// Cash Bag -// ----------------------------- - -/obj/item/storage/bag/cash - name = "cash bag" - icon = 'icons/obj/storage.dmi' - icon_state = "cashbag" - desc = "A bag for carrying lots of cash. It's got a big dollar sign printed on the front." - max_storage_space = 100 - max_w_class = ITEM_SIZE_HUGE - w_class = ITEM_SIZE_SMALL - can_hold = list(/obj/item/material/coin,/obj/item/spacecash) diff --git a/code/game/objects/items/weapons/storage/belt.dm b/code/game/objects/items/weapons/storage/belt.dm deleted file mode 100644 index 39e5bc4d0f50b..0000000000000 --- a/code/game/objects/items/weapons/storage/belt.dm +++ /dev/null @@ -1,569 +0,0 @@ -#define BELT_OVERLAY_ITEMS 1 -#define BELT_OVERLAY_HOLSTER 2 - -/obj/item/storage/belt - name = "belt" - desc = "Can hold various things." - icon = 'icons/obj/clothing/obj_belt.dmi' - icon_state = "utilitybelt" - item_state = "utility" - storage_slots = 7 - item_flags = ITEM_FLAG_IS_BELT - max_w_class = ITEM_SIZE_NORMAL - slot_flags = SLOT_BELT - var/overlay_flags - attack_verb = list("whipped", "lashed", "disciplined") - -/obj/item/storage/belt/verb/toggle_layer() - set name = "Switch Belt Layer" - set category = "Object" - - use_alt_layer = !use_alt_layer - update_icon() - -/obj/item/storage/belt/on_update_icon() - if (ismob(src.loc)) - var/mob/M = src.loc - M.update_inv_belt() - - overlays.Cut() - if(overlay_flags & BELT_OVERLAY_ITEMS) - for(var/obj/item/I in contents) - overlays += image('icons/obj/clothing/obj_belt_overlays.dmi', "[I.icon_state]") - -/obj/item/storage/belt/get_mob_overlay(mob/user_mob, slot) - var/image/ret = ..() - if(slot == slot_belt_str && contents.len) - var/list/ret_overlays = list() - for(var/obj/item/I in contents) - var/use_state = (I.item_state ? I.item_state : I.icon_state) - if(ishuman(user_mob)) - var/mob/living/carbon/human/H = user_mob - ret_overlays += H.species.get_offset_overlay_image(FALSE, 'icons/mob/onmob/onmob_belt.dmi', use_state, I.color, slot) - else - ret_overlays += overlay_image('icons/mob/onmob/onmob_belt.dmi', use_state, I.color, RESET_COLOR) - ret.overlays += ret_overlays - return ret - -/obj/item/storage/belt/holster - name = "holster belt" - icon_state = "holsterbelt" - item_state = "holster" - desc = "Can holster various things." - storage_slots = 2 - overlay_flags = BELT_OVERLAY_ITEMS|BELT_OVERLAY_HOLSTER - var/list/can_holster //List of objects which this item can store in the designated holster slot(if unset, it will default to any holsterable items) - var/sound_in = 'sound/effects/holster/holsterin.ogg' - var/sound_out = 'sound/effects/holster/holsterout.ogg' - can_hold = list( - /obj/item/melee/baton, - /obj/item/melee/telebaton - ) - -/obj/item/storage/belt/holster/Initialize() - . = ..() - set_extension(src, /datum/extension/holster, src, sound_in, sound_out, can_holster) - -/obj/item/storage/belt/holster/attackby(obj/item/W as obj, mob/user as mob) - var/datum/extension/holster/H = get_extension(src, /datum/extension/holster) - if(H.holster(W, user)) - return - else - . = ..(W, user) - -/obj/item/storage/belt/holster/attack_hand(mob/user as mob) - var/datum/extension/holster/H = get_extension(src, /datum/extension/holster) - if(H.unholster(user)) - return - else - . = ..(user) - -/obj/item/storage/belt/holster/examine(mob/user) - . = ..() - var/datum/extension/holster/H = get_extension(src, /datum/extension/holster) - if (!QDELETED(H)) - H.examine_holster(user) - -/obj/item/storage/belt/holster/on_update_icon() - if (ismob(src.loc)) - var/mob/M = src.loc - M.update_inv_belt() - - overlays.Cut() - var/datum/extension/holster/H = get_extension(src, /datum/extension/holster) - if(overlay_flags) - for(var/obj/item/I in contents) - if(I == H.holstered) - if(overlay_flags & BELT_OVERLAY_HOLSTER) - overlays += image('icons/obj/clothing/obj_belt_overlays.dmi', "[I.icon_state]") - else if(overlay_flags & BELT_OVERLAY_ITEMS) - overlays += image('icons/obj/clothing/obj_belt_overlays.dmi', "[I.icon_state]") - -/obj/item/storage/belt/utility - name = "tool belt" - desc = "A belt of durable leather, festooned with hooks, slots, and pouches." - icon_state = "utilitybelt" - item_state = "utility" - overlay_flags = BELT_OVERLAY_ITEMS - can_hold = list( - ///obj/item/combitool, - /obj/item/crowbar, - /obj/item/screwdriver, - /obj/item/weldingtool, - /obj/item/wirecutters, - /obj/item/wrench, - /obj/item/device/multitool, - /obj/item/device/flashlight, - /obj/item/stack/cable_coil, - /obj/item/device/t_scanner, - /obj/item/device/scanner/gas, - /obj/item/taperoll/engineering, - /obj/item/inducer, - /obj/item/device/robotanalyzer, - /obj/item/material/minihoe, - /obj/item/material/hatchet, - /obj/item/device/scanner/plant, - /obj/item/taperoll, - /obj/item/extinguisher/mini, - /obj/item/marshalling_wand, - /obj/item/device/geiger, - /obj/item/hand_labeler, - /obj/item/clothing/gloves, - /obj/item/tape_roll, - /obj/item/clothing/head/beret, - /obj/item/material/knife/folding - ) - - -/obj/item/storage/belt/utility/full/New() - ..() - new /obj/item/screwdriver(src) - new /obj/item/wrench(src) - new /obj/item/weldingtool(src) - new /obj/item/crowbar(src) - new /obj/item/wirecutters(src) - new /obj/item/stack/cable_coil/random(src, 30) - update_icon() - - -/obj/item/storage/belt/utility/atmostech/New() - ..() - new /obj/item/screwdriver(src) - new /obj/item/wrench(src) - new /obj/item/weldingtool(src) - new /obj/item/crowbar(src) - new /obj/item/wirecutters(src) - new /obj/item/device/t_scanner(src) - update_icon() - - - -/obj/item/storage/belt/medical - name = "medical belt" - desc = "Can hold various medical equipment." - icon_state = "medicalbelt" - item_state = "medical" - can_hold = list( - /obj/item/device/scanner/health, - /obj/item/reagent_containers/dropper, - /obj/item/reagent_containers/glass/beaker, - /obj/item/reagent_containers/glass/bottle, - /obj/item/reagent_containers/pill, - /obj/item/reagent_containers/syringe, - /obj/item/flame/lighter/zippo, - /obj/item/storage/fancy/cigarettes, - /obj/item/storage/pill_bottle, - /obj/item/stack/medical, - /obj/item/device/flashlight/pen, - /obj/item/clothing/mask/surgical, - /obj/item/clothing/head/surgery, - /obj/item/clothing/gloves/latex, - /obj/item/reagent_containers/hypospray, - /obj/item/clothing/glasses/hud/health, - /obj/item/crowbar, - /obj/item/device/flashlight, - /obj/item/taperoll, - /obj/item/extinguisher/mini, - /obj/item/storage/med_pouch, - /obj/item/bodybag, - /obj/item/clothing/gloves, - /obj/item/clothing/head/beret, - /obj/item/material/knife/folding - ) - -/obj/item/storage/belt/medical/emt - name = "EMT belt" - desc = "A sturdy black webbing belt with attached pouches." - icon_state = "emsbelt" - item_state = "emsbelt" - -/obj/item/storage/belt/holster/security - name = "security holster belt" - desc = "Can hold security gear like handcuffs and flashes. This one has a convenient holster." - icon_state = "securitybelt" - item_state = "security" - storage_slots = 8 - overlay_flags = BELT_OVERLAY_ITEMS|BELT_OVERLAY_HOLSTER - can_hold = list( - /obj/item/crowbar, - /obj/item/grenade, - /obj/item/reagent_containers/spray/pepper, - /obj/item/handcuffs, - /obj/item/device/flash, - /obj/item/clothing/glasses, - /obj/item/ammo_casing/shotgun, - /obj/item/ammo_magazine, - /obj/item/reagent_containers/food/snacks/donut, - /obj/item/melee/baton, - /obj/item/melee/telebaton, - /obj/item/flame/lighter, - /obj/item/device/flashlight, - /obj/item/modular_computer/pda, - /obj/item/device/radio/headset, - /obj/item/device/hailer, - /obj/item/device/megaphone, - /obj/item/melee, - /obj/item/taperoll, - /obj/item/device/holowarrant, - /obj/item/magnetic_ammo, - /obj/item/device/binoculars, - /obj/item/clothing/gloves, - /obj/item/clothing/head/beret, - /obj/item/material/knife/folding, - /obj/item/cell/guncell - ) - -/obj/item/storage/belt/holster/security/full/Initialize() - . = ..() - new /obj/item/device/flash (src) - new /obj/item/reagent_containers/spray/pepper (src) - new /obj/item/melee/baton/loaded (src) - new /obj/item/device/holowarrant (src) - queue_icon_update() - -/obj/item/storage/belt/security - name = "security belt" - desc = "Can hold security gear like handcuffs and flashes." - icon_state = "basicsecuritybelt" - item_state = "basicsecurity" - overlay_flags = BELT_OVERLAY_ITEMS - can_hold = list( - /obj/item/crowbar, - /obj/item/grenade, - /obj/item/reagent_containers/spray/pepper, - /obj/item/handcuffs, - /obj/item/device/flash, - /obj/item/clothing/glasses, - /obj/item/ammo_casing/shotgun, - /obj/item/ammo_magazine, - /obj/item/reagent_containers/food/snacks/donut, - /obj/item/melee/baton, - /obj/item/melee/telebaton, - /obj/item/flame/lighter, - /obj/item/device/flashlight, - /obj/item/modular_computer/pda, - /obj/item/device/radio/headset, - /obj/item/device/hailer, - /obj/item/device/megaphone, - /obj/item/melee, - /obj/item/taperoll, - //rubay code, - /obj/item/storage/firstaid/individual/military, - //rubay code end, - /obj/item/device/holowarrant, - /obj/item/magnetic_ammo, - /obj/item/device/binoculars, - /obj/item/clothing/gloves, - /obj/item/clothing/head/beret, - /obj/item/material/knife/folding - ) - -/obj/item/storage/belt/general - name = "equipment belt" - desc = "Can hold general equipment such as tablets, folders, and other office supplies." - icon_state = "gearbelt" - item_state = "gear" - overlay_flags = BELT_OVERLAY_ITEMS - can_hold = list( - /obj/item/device/flash, - /obj/item/melee/telebaton, - /obj/item/device/taperecorder, - /obj/item/folder, - /obj/item/paper, - /obj/item/material/clipboard, - /obj/item/modular_computer/tablet, - /obj/item/device/flashlight, - /obj/item/modular_computer/pda, - /obj/item/device/radio/headset, - /obj/item/device/megaphone, - /obj/item/taperoll, - /obj/item/device/holowarrant, - /obj/item/device/radio, - /obj/item/device/tape, - /obj/item/pen, - /obj/item/stamp, - /obj/item/stack/package_wrap, - /obj/item/device/binoculars, - /obj/item/marshalling_wand, - /obj/item/device/camera, - /obj/item/hand_labeler, - /obj/item/device/destTagger, - /obj/item/clothing/glasses, - /obj/item/clothing/head/soft, - /obj/item/hand_labeler, - /obj/item/clothing/gloves, - /obj/item/crowbar/prybar, - /obj/item/tank/oxygen_emergency, - /obj/item/tank/nitrogen_emergency, - /obj/item/clothing/mask/breath, - /obj/item/toy/bosunwhistle, - /obj/item/clothing/head/beret, - /obj/item/material/knife/folding, - /obj/item/device/tape - ) - -/obj/item/storage/belt/janitor - name = "janibelt" - desc = "A belt used to hold most janitorial supplies." - icon_state = "janibelt" - item_state = "janibelt" - can_hold = list( - /obj/item/grenade/chem_grenade, - /obj/item/device/lightreplacer, - /obj/item/device/flashlight, - /obj/item/reagent_containers/spray/cleaner, - /obj/item/soap, - /obj/item/holosign_creator, - /obj/item/clothing/gloves, - /obj/item/device/assembly/mousetrap, - /obj/item/crowbar/prybar, - /obj/item/clothing/mask/plunger, - /obj/item/clothing/head/beret, - /obj/item/material/knife/folding - ) - -/obj/item/storage/belt/holster/general - name = "holster belt" - desc = "Can hold general equipment such as tablets, folders, and other office supplies. Comes with a holster." - icon_state = "commandbelt" - item_state = "command" - storage_slots = 7 - overlay_flags = BELT_OVERLAY_ITEMS|BELT_OVERLAY_HOLSTER - can_hold = list( - /obj/item/device/flash, - /obj/item/melee/telebaton, - /obj/item/device/taperecorder, - /obj/item/folder, - /obj/item/paper, - /obj/item/material/clipboard, - /obj/item/modular_computer/tablet, - /obj/item/device/flash, - /obj/item/device/flashlight, - /obj/item/modular_computer/pda, - /obj/item/device/radio/headset, - /obj/item/device/megaphone, - /obj/item/taperoll, - /obj/item/device/holowarrant, - /obj/item/device/radio, - /obj/item/device/tape, - /obj/item/pen, - /obj/item/stamp, - /obj/item/stack/package_wrap, - /obj/item/device/binoculars, - /obj/item/marshalling_wand, - /obj/item/device/camera, - /obj/item/device/destTagger, - /obj/item/clothing/glasses, - /obj/item/clothing/head/soft, - /obj/item/hand_labeler, - /obj/item/clothing/gloves, - /obj/item/crowbar/prybar, - /obj/item/tank/oxygen_emergency, - /obj/item/tank/nitrogen_emergency, - /obj/item/clothing/mask/breath, - /obj/item/toy/bosunwhistle, - /obj/item/clothing/head/beret, - /obj/item/material/knife/folding, - /obj/item/device/tape, - /obj/item/cell/guncell - ) - -/obj/item/storage/belt/holster/forensic - name = "forensic holster belt" - desc = "Can hold forensic gear like fingerprint powder and luminol." - icon_state = "forensicbelt" - item_state = "forensic" - storage_slots = 8 - overlay_flags = BELT_OVERLAY_HOLSTER - can_hold = list( - /obj/item/reagent_containers/spray/luminol, - /obj/item/device/uv_light, - /obj/item/reagent_containers/syringe, - /obj/item/forensics/swab, - /obj/item/sample/print, - /obj/item/sample/fibers, - /obj/item/device/taperecorder, - /obj/item/device/tape, - /obj/item/clothing/gloves/latex, - /obj/item/clothing/gloves/forensic, - /obj/item/folder, - /obj/item/paper, - /obj/item/forensics/sample_kit, - /obj/item/device/camera, - /obj/item/device/taperecorder, - /obj/item/device/tape, - /obj/item/storage/csi_markers, - /obj/item/device/scanner, - /obj/item/clothing/head/beret, - /obj/item/material/knife/folding, - /obj/item/cell/guncell - ) - -/obj/item/storage/belt/forensic - name = "forensic belt" - desc = "Can hold forensic gear like fingerprint powder and luminol." - icon_state = "basicforensicbelt" - item_state = "basicforensic" - storage_slots = 8 - can_hold = list( - /obj/item/reagent_containers/spray/luminol, - /obj/item/device/uv_light, - /obj/item/reagent_containers/syringe, - /obj/item/forensics/swab, - /obj/item/sample/print, - /obj/item/sample/fibers, - /obj/item/device/taperecorder, - /obj/item/device/tape, - /obj/item/clothing/gloves/latex, - /obj/item/clothing/gloves/forensic, - /obj/item/folder, - /obj/item/paper, - /obj/item/forensics/sample_kit, - /obj/item/device/camera, - /obj/item/device/taperecorder, - /obj/item/device/tape, - /obj/item/storage/csi_markers, - /obj/item/device/scanner, - /obj/item/clothing/head/beret, - /obj/item/material/knife/folding - ) - -/obj/item/storage/belt/holster/machete - name = "machete belt" - desc = "Can hold general surveying equipment used for exploration, as well as your very own machete." - icon_state = "machetebelt" - item_state = "machetebelt" - storage_slots = 8 - overlay_flags = BELT_OVERLAY_HOLSTER - can_hold = list( - /obj/item/device/binoculars, - /obj/item/device/camera, - /obj/item/stack/flag, - /obj/item/device/geiger, - /obj/item/device/flashlight, - /obj/item/device/radio, - /obj/item/device/gps, - /obj/item/device/scanner/mining, - /obj/item/device/scanner/xenobio, - /obj/item/device/scanner/plant, - /obj/item/folder, - /obj/item/paper, - /obj/item/pen, - /obj/item/device/spaceflare, - /obj/item/pinpointer/radio, - /obj/item/device/taperecorder, - /obj/item/device/tape, - /obj/item/device/scanner/gas, - /obj/item/clothing/gloves, - /obj/item/tape_roll, - /obj/item/clothing/head/beret, - /obj/item/material/knife/folding, - /obj/item/storage/firstaid/light, - /obj/item/device/flash, - /obj/item/cell/guncell - ) - can_holster = list(/obj/item/material/hatchet/machete) - sound_in = 'sound/effects/holster/sheathin.ogg' - sound_out = 'sound/effects/holster/sheathout.ogg' - -/obj/item/storage/belt/soulstone - name = "soul stone belt" - desc = "Designed for ease of access to the shards during a fight, as to not let a single enemy spirit slip away." - icon_state = "soulstonebelt" - item_state = "soulstonebelt" - can_hold = list( - /obj/item/device/soulstone - ) - -/obj/item/storage/belt/soulstone/full/New() - ..() - new /obj/item/device/soulstone(src) - new /obj/item/device/soulstone(src) - new /obj/item/device/soulstone(src) - new /obj/item/device/soulstone(src) - new /obj/item/device/soulstone(src) - new /obj/item/device/soulstone(src) - new /obj/item/device/soulstone(src) - - -/obj/item/storage/belt/champion - name = "championship belt" - desc = "Proves to the world that you are the strongest!" - icon_state = "championbelt" - item_state = "champion" - storage_slots = null - max_storage_space = ITEM_SIZE_SMALL - can_hold = list( - /obj/item/clothing/mask/luchador - ) - -/obj/item/storage/belt/holster/security/tactical - name = "combat belt" - desc = "Can hold security gear like handcuffs and flashes, with more pouches for more storage." - icon_state = "swatbelt" - item_state = "swatbelt" - storage_slots = 10 - - -/obj/item/storage/belt/waistpack - name = "waist pack" - desc = "A small bag designed to be worn on the waist. May make your butt look big." - icon_state = "fannypack_white" - item_state = "fannypack_white" - storage_slots = null - max_w_class = ITEM_SIZE_SMALL - max_storage_space = ITEM_SIZE_SMALL * 4 - slot_flags = SLOT_BELT | SLOT_BACK - -/obj/item/storage/belt/waistpack/big - name = "large waist pack" - desc = "A bag designed to be worn on the waist. Definitely makes your butt look big." - icon_state = "fannypack_big_white" - item_state = "fannypack_big_white" - w_class = ITEM_SIZE_LARGE - max_w_class = ITEM_SIZE_NORMAL - max_storage_space = ITEM_SIZE_NORMAL * 4 - - -/obj/item/storage/belt/fire_belt - name = "firefighting equipment belt" - desc = "A belt specially designed for firefighting." - icon_state = "firebelt" - item_state = "gear" - storage_slots = 5 - overlay_flags = BELT_OVERLAY_ITEMS - can_hold = list( - /obj/item/grenade/chem_grenade/water, - /obj/item/crowbar/emergency_forcing_tool, - /obj/item/extinguisher/mini, - /obj/item/inflatable/door - ) - - -/obj/item/storage/belt/fire_belt/full - startswith = list( - /obj/item/inflatable/door, - /obj/item/crowbar/emergency_forcing_tool, - /obj/item/extinguisher/mini, - /obj/item/grenade/chem_grenade/water = 2 - ) diff --git a/code/game/objects/items/weapons/storage/bible.dm b/code/game/objects/items/weapons/storage/bible.dm deleted file mode 100644 index c249388dfa8a6..0000000000000 --- a/code/game/objects/items/weapons/storage/bible.dm +++ /dev/null @@ -1,139 +0,0 @@ -/obj/item/storage/bible - name = "bible" - desc = "Apply to head repeatedly." - icon_state ="bible" - throw_speed = 1 - throw_range = 5 - w_class = ITEM_SIZE_NORMAL - max_w_class = ITEM_SIZE_SMALL - max_storage_space = 4 - var/mob/affecting = null - var/deity_name = "Christ" - var/renamed = 0 - var/icon_changed = 0 - -/obj/item/storage/bible/booze - name = "bible" - desc = "To be applied to the head repeatedly." - icon_state ="bible" - - startswith = list( - /obj/item/reagent_containers/food/drinks/bottle/small/beer, - /obj/item/spacecash/bundle/c50, - /obj/item/spacecash/bundle/c50, - ) - -/obj/item/storage/bible/bible - name = "\improper Bible" - desc = "The central religious text of Christianity." - renamed = 1 - icon_changed = 1 - -/obj/item/storage/bible/tanakh - name = "\improper Tanakh" - desc = "The central religious text of Judaism." - icon_state = "torah" - renamed = 1 - icon_changed = 1 - -/obj/item/storage/bible/quran - name = "\improper Quran" - desc = "The central religious text of Islam." - icon_state = "koran" - renamed = 1 - icon_changed = 1 - -/obj/item/storage/bible/kojiki - name = "\improper Kojiki" - desc = "A collection of myths from ancient Japan." - icon_state = "kojiki" - renamed = 1 - icon_changed = 1 - -/obj/item/storage/bible/aqdas - name = "\improper Kitab-i-Aqdas" - desc = "The central religious text of the Baha'i Faith." - icon_state = "ninestar" - renamed = 1 - icon_changed = 1 - -/obj/item/storage/bible/guru - name = "\improper Guru Granth Sahib" - desc = "The central religious text of the Sikh Faith." - icon_state = "guru" - renamed = 1 - icon_changed = 1 - -/obj/item/storage/bible/attack(mob/living/carbon/human/M, mob/living/carbon/human/user) - if(user == M || !ishuman(user) || !ishuman(M)) - return - if(user.mind && istype(user.mind.assigned_job, /datum/job/chaplain)) - user.visible_message(SPAN_NOTICE("\The [user] places \the [src] on \the [M]'s forehead, reciting a prayer...")) - if(do_after(user, 5 SECONDS, M, DO_DEFAULT | DO_USER_UNIQUE_ACT | DO_PUBLIC_PROGRESS) && user.Adjacent(M)) - user.visible_message("\The [user] finishes reciting \his prayer, removing \the [src] from \the [M]'s forehead.", "You finish reciting your prayer, removing \the [src] from \the [M]'s forehead.") - if(user.get_cultural_value(TAG_RELIGION) == M.get_cultural_value(TAG_RELIGION)) - to_chat(M, SPAN_NOTICE("You feel calm and relaxed, at one with the universe.")) - else - to_chat(M, "Nothing happened.") - ..() - -/obj/item/storage/bible/afterattack(atom/A, mob/user as mob, proximity) - if(!proximity) return - if(user.mind && istype(user.mind.assigned_job, /datum/job/chaplain)) - if(A.reagents && A.reagents.has_reagent(/datum/reagent/water)) //blesses all the water in the holder - to_chat(user, "You bless \the [A].") // I wish it was this easy in nethack - var/water2holy = A.reagents.get_reagent_amount(/datum/reagent/water) - A.reagents.del_reagent(/datum/reagent/water) - A.reagents.add_reagent(/datum/reagent/water/holywater,water2holy) - -/obj/item/storage/bible/attackby(obj/item/W as obj, mob/user as mob) - if (src.use_sound) - playsound(src.loc, src.use_sound, 50, 1, -5) - return ..() - -/obj/item/storage/bible/attack_self(mob/living/carbon/human/user) - if(!ishuman(user)) - return - if(user.mind && istype(user.mind.assigned_job, /datum/job/chaplain)) - user.visible_message("\The [user] begins to read a passage from \the [src]...", "You begin to read a passage from \the [src]...") - if(do_after(user, 5 SECONDS, src, do_flags = DO_PUBLIC_UNIQUE)) - user.visible_message("\The [user] reads a passage from \the [src].", "You read a passage from \the [src].") - for(var/mob/living/carbon/human/H in view(user)) - if(user.get_cultural_value(TAG_RELIGION) == H.get_cultural_value(TAG_RELIGION)) - to_chat(H, SPAN_NOTICE("You feel calm and relaxed, at one with the universe.")) - -/obj/item/storage/bible/verb/rename_bible() - set name = "Rename Bible" - set category = "Object" - set desc = "Click to rename your bible." - - if(!renamed) - var/input = sanitizeSafe(input("What do you want to rename your bible to? You can only do this once.", ,""), MAX_NAME_LEN) - - var/mob/M = usr - if(src && input && !M.stat && in_range(M,src)) - SetName(input) - to_chat(M, "You name your religious book [input].") - renamed = 1 - return 1 - -/obj/item/storage/bible/verb/set_icon() - set name = "Change Icon" - set category = "Object" - set desc = "Click to change your book's icon." - - if(!icon_changed) - var/mob/M = usr - - for(var/i = 10; i >= 0; i -= 1) - if(src && !M.stat && in_range(M,src)) - var/icon_picked = input(M, "Icon?", "Book Icon", null) in list("don't change", "bible", "koran", "scrapbook", "white", "holylight", "atheist", "kojiki", "torah", "kingyellow", "ithaqua", "necronomicon", "ninestar") - if(icon_picked != "don't change" && icon_picked) - icon_state = icon_picked - if(i != 0) - var/confirm = alert(M, "Is this what you want? Chances remaining: [i]", "Confirmation", "Yes", "No") - if(confirm == "Yes") - icon_changed = 1 - break - if(i == 0) - icon_changed = 1 diff --git a/code/game/objects/items/weapons/storage/boxes.dm b/code/game/objects/items/weapons/storage/boxes.dm deleted file mode 100644 index e96caa5575e28..0000000000000 --- a/code/game/objects/items/weapons/storage/boxes.dm +++ /dev/null @@ -1,622 +0,0 @@ -/* - * Everything derived from the common cardboard box. - * Basically everything except the original is a kit (starts full). - * - * Contains: - * Empty box, starter boxes (survival/engineer), - * Latex glove and sterile mask boxes, - * Syringe, beaker, dna injector boxes, - * Blanks, flashbangs, and EMP grenade boxes, - * Tracking and chemical implant boxes, - * Prescription glasses and drinking glass boxes, - * Condiment bottle and silly cup boxes, - * Donkpocket and monkeycube boxes, - * ID and security PDA cart boxes, - * Handcuff, mousetrap, and pillbottle boxes, - * Snap-pops and matchboxes, - * Replacement light boxes. - * - * For syndicate call-ins see uplink_kits.dm - */ - -/obj/item/storage/box - name = "box" - desc = "It's just an ordinary box." - icon_state = "box" - item_state = "syringe_kit" - max_storage_space = DEFAULT_BOX_STORAGE - use_sound = 'sound/effects/storage/box.ogg' - var/foldable = /obj/item/stack/material/cardboard // BubbleWrap - if set, can be folded (when empty) into a sheet of cardboard - allow_slow_dump = TRUE - -/obj/item/storage/box/large - name = "large box" - icon_state = "largebox" - w_class = ITEM_SIZE_LARGE - max_w_class = ITEM_SIZE_NORMAL - max_storage_space = DEFAULT_LARGEBOX_STORAGE - -/obj/item/storage/box/union_cards - name = "box of union cards" - desc = "A box of spare unsigned union membership cards." - startswith = list(/obj/item/card/union = 7) - -/obj/item/storage/box/large/union_cards - name = "large box of union cards" - desc = "A large box of spare unsigned union membership cards." - startswith = list(/obj/item/card/union = 14) - -// BubbleWrap - A box can be folded up to make card -/obj/item/storage/box/attack_self(mob/user as mob) - if(..()) return - - //try to fold it. - if ( contents.len ) - return - - if ( !ispath(src.foldable) ) - return - var/found = 0 - // Close any open UI windows first - for(var/mob/M in range(1)) - if (M.s_active == src) - src.close(M) - if ( M == user ) - found = 1 - if ( !found ) // User is too far away - return - // Now make the cardboard - to_chat(user, "You fold [src] flat.") - if(ispath(foldable, /obj/item/stack)) - var/stack_amt = max(2**(w_class - 3), 1) - new src.foldable(get_turf(src), stack_amt) - else - new src.foldable(get_turf(src)) - qdel(src) - -/obj/item/storage/box/make_exact_fit() - ..() - foldable = null //special form fitted boxes should not be foldable. - -/obj/item/storage/box/survival - name = "crew survival kit" - desc = "A box decorated in warning colors that contains a limited supply of survival tools. The panel and white stripe indicate this one contains oxygen." - icon_state = "survival" - startswith = list(/obj/item/clothing/mask/breath/scba = 1, - /obj/item/tank/oxygen_emergency = 1, - /obj/item/reagent_containers/hypospray/autoinjector/pouch_auto/inaprovaline = 1, - /obj/item/stack/medical/bruise_pack = 1, - /obj/item/device/flashlight/flare/glowstick = 1, - /obj/item/reagent_containers/food/snacks/proteinbar = 1, - /obj/item/device/oxycandle = 1) - -/obj/item/storage/box/vox - name = "vox survival kit" - desc = "A box decorated in warning colors that contains a limited supply of survival tools. The panel and black stripe indicate this one contains nitrogen." - icon_state = "survivalvox" - startswith = list(/obj/item/clothing/mask/breath = 1, - /obj/item/tank/nitrogen_emergency = 1, - /obj/item/reagent_containers/hypospray/autoinjector/pouch_auto/inaprovaline = 1, - /obj/item/stack/medical/bruise_pack = 1, - /obj/item/device/flashlight/flare/glowstick = 1, - /obj/item/reagent_containers/food/snacks/proteinbar = 1) - -/obj/item/storage/box/engineer - name = "engineer survival kit" - desc = "A box decorated in warning colors that contains a limited supply of survival tools. The panel and orange stripe indicate this one as the engineering variant." - icon_state = "survivaleng" - startswith = list(/obj/item/clothing/mask/breath/scba = 1, - /obj/item/tank/oxygen_emergency_extended = 1, - /obj/item/reagent_containers/hypospray/autoinjector/pouch_auto/inaprovaline = 1, - /obj/item/reagent_containers/hypospray/autoinjector/antirad = 1, - /obj/item/stack/medical/bruise_pack = 1, - /obj/item/device/flashlight/flare/glowstick = 1, - /obj/item/reagent_containers/food/snacks/proteinbar = 1, - /obj/item/device/oxycandle = 1) - -/obj/item/storage/box/gloves - name = "box of sterile gloves" - desc = "Contains sterile gloves." - icon_state = "latex" - startswith = list(/obj/item/clothing/gloves/latex = 6, - /obj/item/clothing/gloves/latex/nitrile = 2) - -/obj/item/storage/box/masks - name = "box of sterile masks" - desc = "This box contains masks of sterility." - icon_state = "sterile" - startswith = list(/obj/item/clothing/mask/surgical = 7) - - -/obj/item/storage/box/syringes - name = "box of syringes" - desc = "A box full of syringes." - icon_state = "syringe" - startswith = list(/obj/item/reagent_containers/syringe = 7) - -/obj/item/storage/box/syringegun - name = "box of syringe gun cartridges" - desc = "A box full of compressed gas cartridges." - icon_state = "syringe" - startswith = list(/obj/item/syringe_cartridge = 7) - - -/obj/item/storage/box/beakers - name = "box of beakers" - icon_state = "beaker" - startswith = list(/obj/item/reagent_containers/glass/beaker = 7) - -/obj/item/storage/box/beakers/insulated - name = "box of insulated beakers" - startswith = list(/obj/item/reagent_containers/glass/beaker/insulated = 7) - -/obj/item/storage/box/ammo - name = "ammo box" - icon_state = "ammo" - desc = "A sturdy metal box with several warning symbols on the front.
              WARNING: Live ammunition. Misuse may result in serious injury or death." - use_sound = 'sound/effects/closet_open.ogg' - -/obj/item/storage/box/ammo/blanks - name = "box of blank shells" - desc = "It has a picture of a gun and several warning symbols on the front." - startswith = list(/obj/item/ammo_casing/shotgun/blank = 8) - -/obj/item/storage/box/ammo/practiceshells - name = "box of practice shells" - startswith = list(/obj/item/ammo_casing/shotgun/practice = 8) - -/obj/item/storage/box/ammo/beanbags - name = "box of beanbag shells" - startswith = list(/obj/item/ammo_magazine/shotholder/beanbag = 2) - -/obj/item/storage/box/ammo/shotgunammo - name = "box of shotgun slugs" - startswith = list(/obj/item/ammo_magazine/shotholder = 2) - -/obj/item/storage/box/ammo/shotgunshells - name = "box of shotgun shells" - startswith = list(/obj/item/ammo_magazine/shotholder/shell = 2) - -/obj/item/storage/box/ammo/flechetteshells - name = "box of flechette shells" - startswith = list(/obj/item/ammo_magazine/shotholder/flechette = 2) - -/obj/item/storage/box/ammo/flashshells - name = "box of illumination shells" - startswith = list(/obj/item/ammo_magazine/shotholder/flash = 2) - -/obj/item/storage/box/ammo/stunshells - name = "box of stun shells" - startswith = list(/obj/item/ammo_magazine/shotholder/stun = 2) - -/obj/item/storage/box/ammo/sniperammo - name = "box of sniper shells" - startswith = list(/obj/item/ammo_casing/shell = 7) - -/obj/item/storage/box/ammo/sniperammo/apds - name = "box of sniper APDS shells" - startswith = list(/obj/item/ammo_casing/shell/apds = 3) -/obj/item/storage/box/flashbangs - name = "box of flashbangs" - desc = "A box containing 7 antipersonnel flashbang grenades.
              WARNING: These devices are extremely dangerous and can cause blindness or deafness from repeated use." - icon_state = "flashbang" - startswith = list(/obj/item/grenade/flashbang = 7) - -/obj/item/storage/box/teargas - name = "box of pepperspray grenades" - desc = "A box containing 7 tear gas grenades. A gas mask is printed on the label.
              WARNING: Exposure carries risk of serious injury or death. Keep away from persons with lung conditions." - icon_state = "flashbang" - startswith = list(/obj/item/grenade/chem_grenade/teargas = 7) - -/obj/item/storage/box/emps - name = "box of emp grenades" - desc = "A box containing 5 military grade EMP grenades.
              WARNING: Do not use near unshielded electronics or biomechanical augmentations, death or permanent paralysis may occur." - icon_state = "flashbang" - startswith = list(/obj/item/grenade/empgrenade = 5) - -/obj/item/storage/box/frags - name = "box of frag grenades" - desc = "A box containing 5 military grade fragmentation grenades.
              WARNING: Live explosives. Misuse may result in serious injury or death." - icon_state = "flashbang" - startswith = list(/obj/item/grenade/frag = 5) - -/obj/item/storage/box/fragshells - name = "box of frag shells" - desc = "A box containing 5 military grade fragmentation shells.
              WARNING: Live explosive munitions. Misuse may result in serious injury or death." - icon_state = "flashbang" - startswith = list(/obj/item/grenade/frag/shell = 5) - -/obj/item/storage/box/smokes - name = "box of smoke bombs" - desc = "A box containing 5 smoke bombs." - icon_state = "flashbang" - startswith = list(/obj/item/grenade/smokebomb = 5) - -/obj/item/storage/box/anti_photons - name = "box of anti-photon grenades" - desc = "A box containing 5 experimental photon disruption grenades." - icon_state = "flashbang" - startswith = list(/obj/item/grenade/anti_photon = 5) - -/obj/item/storage/box/supermatters - name = "box of supermatter grenades" - desc = "A box containing 5 highly experimental supermatter grenades." - icon_state = "radbox" - startswith = list(/obj/item/grenade/supermatter = 5) - -/obj/item/storage/box/trackimp - name = "boxed tracking implant kit" - desc = "Box full of scum-bag tracking utensils." - icon_state = "implant" - startswith = list(/obj/item/implantcase/tracking = 4, - /obj/item/implanter = 1, - /obj/item/implantpad = 1, - /obj/item/locator = 1) - -/obj/item/storage/box/chemimp - name = "boxed chemical implant kit" - desc = "Box of stuff used to implant chemicals." - icon_state = "implant" - startswith = list(/obj/item/implantcase/chem = 5, - /obj/item/implanter = 1, - /obj/item/implantpad = 1) - -/obj/item/storage/box/rxglasses - name = "box of prescription glasses" - desc = "This box contains nerd glasses." - icon_state = "glasses" - startswith = list(/obj/item/clothing/glasses/prescription = 7) - -/obj/item/storage/box/cdeathalarm_kit - name = "death alarm kit" - desc = "Box of stuff used to implant death alarms." - icon_state = "implant" - item_state = "syringe_kit" - startswith = list(/obj/item/implanter = 1, - /obj/item/implantcase/death_alarm = 6) - -/obj/item/storage/box/condimentbottles - name = "box of condiment bottles" - desc = "It has a large ketchup smear on it." - startswith = list(/obj/item/reagent_containers/food/condiment = 6) - -/obj/item/storage/box/cups - name = "box of paper cups" - desc = "It has pictures of paper cups on the front." - startswith = list(/obj/item/reagent_containers/food/drinks/sillycup = 7) - -//cubed animals - -/obj/item/storage/box/monkeycubes - name = "monkey cube box" - desc = "Drymate brand monkey cubes. Just add water!" - icon = 'icons/obj/food.dmi' - icon_state = "monkeycubebox" - can_hold = list(/obj/item/reagent_containers/food/snacks/monkeycube) - startswith = list(/obj/item/reagent_containers/food/snacks/monkeycube/wrapped = 5) - -/obj/item/storage/box/monkeycubes/farwacubes - name = "farwa cube box" - desc = "Drymate brand farwa cubes, shipped from Nyx. Just add water!" - startswith = list(/obj/item/reagent_containers/food/snacks/monkeycube/wrapped/farwacube = 5) - -/obj/item/storage/box/monkeycubes/stokcubes - name = "stok cube box" - desc = "Drymate brand stok cubes, shipped from Moghes. Just add water!" - startswith = list(/obj/item/reagent_containers/food/snacks/monkeycube/wrapped/stokcube = 5) - -/obj/item/storage/box/monkeycubes/neaeracubes - name = "neaera cube box" - desc = "Drymate brand neaera cubes, shipped from Jargon 4. Just add water!" - startswith = list(/obj/item/reagent_containers/food/snacks/monkeycube/wrapped/neaeracube = 5) - -/obj/item/storage/box/monkeycubes/spidercubes - name = "spiderling cube box" - desc = "Drymate brand Instant spiders. WHY WOULD YOU ORDER THIS!?" - startswith = list(/obj/item/reagent_containers/food/snacks/monkeycube/wrapped/spidercube = 5) - -/obj/item/storage/box/ids - name = "box of spare IDs" - desc = "Has so many empty IDs." - icon_state = "id" - startswith = list(/obj/item/card/id = 7) - -/obj/item/storage/box/large/ids - name = "box of spare IDs" - desc = "Has so, so many empty IDs." - icon_state = "id_large" - startswith = list(/obj/item/card/id = 14) - -/obj/item/storage/box/handcuffs - name = "box of spare handcuffs" - desc = "A box full of handcuffs." - icon_state = "handcuff" - startswith = list(/obj/item/handcuffs = 7) - -/obj/item/storage/box/mousetraps - name = "box of Pest-B-Gon mousetraps" - desc = "WARNING: Keep out of reach of children." - icon_state = "mousetraps" - startswith = list(/obj/item/device/assembly/mousetrap = 6) - -/obj/item/storage/box/mousetraps/empty - startswith = null - -/obj/item/storage/box/pillbottles - name = "box of pill bottles" - desc = "It has pictures of pill bottles on its front." - startswith = list(/obj/item/storage/pill_bottle = 7) - -/obj/item/storage/box/snappops - name = "snap pop box" - desc = "Eight wrappers of fun! Ages 8 and up. Not suitable for children." - icon = 'icons/obj/toy.dmi' - icon_state = "spbox" - can_hold = list(/obj/item/toy/snappop) - startswith = list(/obj/item/toy/snappop = 8) - -/obj/item/storage/box/matches - name = "matchbox" - desc = "A small box of 'Space-Proof' premium matches." - icon = 'icons/obj/cigarettes.dmi' - icon_state = "matchbox" - item_state = "zippo" - w_class = ITEM_SIZE_TINY - slot_flags = SLOT_BELT - can_hold = list(/obj/item/flame/match) - startswith = list(/obj/item/flame/match = 10) - -/obj/item/storage/box/matches/attackby(obj/item/flame/match/W as obj, mob/user as mob) - if(istype(W) && !W.lit && !W.burnt) - W.lit = 1 - W.damtype = INJURY_TYPE_BURN - W.icon_state = "match_lit" - START_PROCESSING(SSobj, W) - playsound(src.loc, 'sound/items/match.ogg', 60, 1, -4) - user.visible_message("[user] strikes the match on the matchbox.") - W.update_icon() - return - -/obj/item/storage/box/autoinjectors - name = "box of injectors" - desc = "Contains autoinjectors." - icon_state = "syringe" - - startswith = list(/obj/item/reagent_containers/hypospray/autoinjector = 7) - -/obj/item/storage/box/lights - name = "box of replacement bulbs" - icon = 'icons/obj/storage.dmi' - icon_state = "light" - desc = "This box is shaped on the inside so that only light tubes and bulbs fit." - item_state = "syringe_kit" - use_to_pickup = 1 // for picking up broken bulbs, not that most people will try - -/obj/item/storage/box/lights/Initialize() - . = ..() - make_exact_fit() - -/obj/item/storage/box/lights/bulbs - startswith = list(/obj/item/light/bulb = 21) - -/obj/item/storage/box/lights/bulbs/empty - startswith = null - -/obj/item/storage/box/lights/tubes - name = "box of replacement tubes" - icon_state = "lighttube" - startswith = list(/obj/item/light/tube = 17, - /obj/item/light/tube/large = 4) - -/obj/item/storage/box/lights/tubes/random - name = "box of replacement tubes -- party pack" - icon_state = "lighttube" - startswith = list(/obj/item/light/tube/party = 17, - /obj/item/light/tube/large/party = 4) - -/obj/item/storage/box/lights/tubes/empty - startswith = null - -/obj/item/storage/box/lights/mixed - name = "box of replacement lights" - icon_state = "lightmixed" - startswith = list(/obj/item/light/tube = 12, - /obj/item/light/tube/large = 4, - /obj/item/light/bulb = 5) - -/obj/item/storage/box/lights/mixed/empty - startswith = null - -/obj/item/storage/box/glowsticks - name = "box of mixed glowsticks" - icon_state = "box" - startswith = list(/obj/item/device/flashlight/flare/glowstick = 1, /obj/item/device/flashlight/flare/glowstick/red = 1, - /obj/item/device/flashlight/flare/glowstick/blue = 1, /obj/item/device/flashlight/flare/glowstick/orange = 1, - /obj/item/device/flashlight/flare/glowstick/yellow = 1, /obj/item/device/flashlight/flare/glowstick/random = 1) - -/obj/item/storage/box/greenglowsticks - name = "box of green glowsticks" - icon_state = "box" - startswith = list(/obj/item/device/flashlight/flare/glowstick = 6) - -/obj/item/storage/box/freezer - name = "portable freezer" - desc = "This nifty shock-resistant device will keep your 'groceries' nice and non-spoiled." - icon = 'icons/obj/storage.dmi' - icon_state = "portafreezer" - item_state = "medicalpack" - foldable = null - max_w_class = ITEM_SIZE_NORMAL - w_class = ITEM_SIZE_LARGE - can_hold = list(/obj/item/organ, /obj/item/reagent_containers/food, /obj/item/reagent_containers/glass) - max_storage_space = DEFAULT_LARGEBOX_STORAGE - use_to_pickup = 1 // for picking up broken bulbs, not that most people will try - temperature = -16 CELSIUS - -/obj/item/storage/box/freezer/ProcessAtomTemperature() - return PROCESS_KILL - -/obj/item/storage/box/checkers - name = "checkers box" - desc = "This box holds a nifty portion of checkers. Foam-shaped on the inside so that only checkers may fit." - icon_state = "checkers" - max_storage_space = 24 - foldable = null - can_hold = list(/obj/item/reagent_containers/food/snacks/checker) - startswith = list(/obj/item/reagent_containers/food/snacks/checker = 12, - /obj/item/reagent_containers/food/snacks/checker/red = 12) - -/obj/item/storage/box/checkers/chess - name = "black chess box" - desc = "This box holds all the pieces needed for the black side of the chess board." - icon_state = "chess_b" - startswith = list(/obj/item/reagent_containers/food/snacks/checker/pawn = 8, - /obj/item/reagent_containers/food/snacks/checker/knight = 2, - /obj/item/reagent_containers/food/snacks/checker/bishop = 2, - /obj/item/reagent_containers/food/snacks/checker/rook = 2, - /obj/item/reagent_containers/food/snacks/checker/queen = 1, - /obj/item/reagent_containers/food/snacks/checker/king = 1) - -/obj/item/storage/box/checkers/chess/red - name = "red chess box" - desc = "This box holds all the pieces needed for the red side of the chess board." - icon_state = "chess_r" - startswith = list(/obj/item/reagent_containers/food/snacks/checker/pawn/red = 8, - /obj/item/reagent_containers/food/snacks/checker/knight/red = 2, - /obj/item/reagent_containers/food/snacks/checker/bishop/red = 2, - /obj/item/reagent_containers/food/snacks/checker/rook/red = 2, - /obj/item/reagent_containers/food/snacks/checker/queen/red = 1, - /obj/item/reagent_containers/food/snacks/checker/king/red = 1) - - -/obj/item/storage/box/headset - name = "box of spare headsets" - desc = "A box full of headsets." - startswith = list(/obj/item/device/radio/headset = 7) - -//Spare Armbands - -/obj/item/storage/box/armband/engine - name = "box of spare engineering armbands" - desc = "A box full of engineering armbands. For use in emergencies when provisional engineering peronnel are needed." - startswith = list(/obj/item/clothing/accessory/armband/engine = 5) - -/obj/item/storage/box/armband/med - name = "box of spare medical armbands" - desc = "A box full of medical armbands. For use in emergencies when provisional medical personnel are needed." - startswith = list(/obj/item/clothing/accessory/armband/med = 5) - -/obj/item/storage/box/imprinting - name = "box of education implants" - desc = "A box full of neural implants for on-job training." - startswith = list( - /obj/item/implanter, - /obj/item/implantpad, - /obj/item/implantcase/imprinting = 3 - ) - -/obj/item/storage/box/detergent - name = "detergent pods bag" - desc = "A bag full of juicy, yummy detergent pods. This bag has been labeled: Tod Pods, a Waffle Co. product." - icon_state = "detergent" - startswith = list(/obj/item/reagent_containers/pill/detergent = 10) - -//cargosia supply boxes - Primarily for restocking - -/obj/item/storage/box/tapes - name = "box of spare tapes" - desc = "A box full of blank tapes." - startswith = list(/obj/item/device/tape/random = 14) - -/obj/item/storage/box/taperolls - name = "box of spare taperolls" - desc = "A box full of mixed barricade tapes." - startswith = list(/obj/item/taperoll/police, - /obj/item/taperoll/engineering, - /obj/item/taperoll/atmos, - /obj/item/taperoll/research, - /obj/item/taperoll/medical, - /obj/item/taperoll/bureaucracy - ) - -/obj/item/storage/box/bogrolls - name = "box of spare bogrolls" - desc = "A box full of toilet paper." - startswith = list(/obj/item/taperoll/bog = 6) - -/obj/item/storage/box/cola - name = "box of sodas" - desc = "A box full of soda cans." - startswith = list(/obj/item/reagent_containers/food/drinks/cans/cola = 7) - -/obj/item/storage/box/cola/beastenergy - name = "box of beast energy" - desc = "A box full of beast energy cans." - startswith = list(/obj/item/reagent_containers/food/drinks/cans/beastenergy = 7) - -/obj/item/storage/box/water - name = "box of water bottles" - desc = "A box full of bottled water." - startswith = list(/obj/item/reagent_containers/food/drinks/cans/waterbottle = 7) - -/obj/item/storage/box/cola/spacewind - startswith = list(/obj/item/reagent_containers/food/drinks/cans/space_mountain_wind = 7) - -/obj/item/storage/box/cola/drgibb - startswith = list(/obj/item/reagent_containers/food/drinks/cans/dr_gibb = 7) - -/obj/item/storage/box/cola/ionbru - startswith = list(/obj/item/reagent_containers/food/drinks/cans/ionbru = 7) - -/obj/item/storage/box/cola/spaceup - startswith = list(/obj/item/reagent_containers/food/drinks/cans/space_up = 7) - -/obj/item/storage/box/cola/lemonlime - startswith = list(/obj/item/reagent_containers/food/drinks/cans/lemon_lime = 7) - -/obj/item/storage/box/cola/icedtea - startswith = list(/obj/item/reagent_containers/food/drinks/cans/iced_tea = 7) - -/obj/item/storage/box/cola/grapejuice - startswith = list(/obj/item/reagent_containers/food/drinks/cans/grape_juice = 7) - -/obj/item/storage/box/cola/sodawater - startswith = list(/obj/item/reagent_containers/food/drinks/cans/sodawater = 7) - -/obj/item/storage/box/snack - name = "box of snack food" - desc = "A box full of snack foods." - startswith = list(/obj/item/reagent_containers/food/snacks/skrellsnacks = 7) - -/obj/item/storage/box/snack/jerky - startswith = list(/obj/item/reagent_containers/food/snacks/sosjerky = 7) - -/obj/item/storage/box/snack/noraisin - startswith = list(/obj/item/reagent_containers/food/snacks/no_raisin = 7) - -/obj/item/storage/box/snack/cheesehonks - startswith = list(/obj/item/reagent_containers/food/snacks/cheesiehonkers = 7) - -/obj/item/storage/box/snack/tastybread - startswith = list(/obj/item/reagent_containers/food/snacks/tastybread = 7) - -/obj/item/storage/box/snack/candy - startswith = list(/obj/item/reagent_containers/food/snacks/candy = 7) - -/obj/item/storage/box/snack/chips - startswith = list(/obj/item/reagent_containers/food/snacks/chips = 7) - -//canned goods in cardboard -/obj/item/storage/box/canned - name = "box of canned food" - desc = "A box full of canned foods." - startswith = list(/obj/item/reagent_containers/food/snacks/canned/spinach = 1) - -/obj/item/storage/box/canned/beef - startswith = list(/obj/item/reagent_containers/food/snacks/canned/beef = 6) - -/obj/item/storage/box/canned/beans - startswith = list(/obj/item/reagent_containers/food/snacks/canned/beans = 6) - -/obj/item/storage/box/canned/tomato - startswith = list(/obj/item/reagent_containers/food/snacks/canned/tomato = 6) diff --git a/code/game/objects/items/weapons/storage/briefcase.dm b/code/game/objects/items/weapons/storage/briefcase.dm deleted file mode 100644 index 3685562acc44e..0000000000000 --- a/code/game/objects/items/weapons/storage/briefcase.dm +++ /dev/null @@ -1,13 +0,0 @@ -/obj/item/storage/briefcase - name = "briefcase" - desc = "It's made of AUTHENTIC faux-leather and has a price-tag still attached. Its owner must be a real professional." - icon_state = "briefcase" - item_state = "briefcase" - obj_flags = OBJ_FLAG_CONDUCTIBLE - force = 8.0 - throw_speed = 1 - throw_range = 4 - w_class = ITEM_SIZE_HUGE - max_w_class = ITEM_SIZE_NORMAL - max_storage_space = DEFAULT_BACKPACK_STORAGE - allow_slow_dump = TRUE diff --git a/code/game/objects/items/weapons/storage/fancy.dm b/code/game/objects/items/weapons/storage/fancy.dm deleted file mode 100644 index 926fef680c60c..0000000000000 --- a/code/game/objects/items/weapons/storage/fancy.dm +++ /dev/null @@ -1,365 +0,0 @@ -/* - * The 'fancy' path is for objects like candle boxes that show how many items are in the storage item on the sprite itself - * .. Sorry for the shitty path name, I couldnt think of a better one. - * - * - * Contains: - * Egg Box - * Crayon Box - * Cigarette Box - */ - -/obj/item/storage/fancy - item_state = "syringe_kit" //placeholder, many of these don't have inhands - opened = 0 //if an item has been removed from this container - var/obj/item/key_type //path of the key item that this "fancy" container is meant to store - -/obj/item/storage/fancy/on_update_icon() - if(!opened) - src.icon_state = initial(icon_state) - else - var/key_count = count_by_type(contents, key_type) - src.icon_state = "[initial(icon_state)][key_count]" - -/obj/item/storage/fancy/examine(mob/user, distance) - . = ..() - if(distance > 1) - return - - var/key_name = initial(key_type.name) - if(!contents.len) - to_chat(user, "There are no [key_name]s left in the box.") - else - var/key_count = count_by_type(contents, key_type) - to_chat(user, "There [key_count == 1? "is" : "are"] [key_count] [key_name]\s in the box.") - -/* - * Egg Box - */ - -/obj/item/storage/fancy/egg_box - icon = 'icons/obj/food.dmi' - icon_state = "eggbox" - name = "egg box" - storage_slots = 12 - max_w_class = ITEM_SIZE_SMALL - w_class = ITEM_SIZE_NORMAL - - key_type = /obj/item/reagent_containers/food/snacks/egg - can_hold = list( - /obj/item/reagent_containers/food/snacks/egg, - /obj/item/reagent_containers/food/snacks/boiledegg - ) - - startswith = list(/obj/item/reagent_containers/food/snacks/egg = 12) - -/obj/item/storage/fancy/egg_box/empty - startswith = null - -/* - * Cracker Packet - */ - -/obj/item/storage/fancy/crackers - name = "\improper Getmore Crackers" - icon = 'icons/obj/food.dmi' - icon_state = "crackerbag" - storage_slots = 6 - max_w_class = ITEM_SIZE_TINY - w_class = ITEM_SIZE_SMALL - key_type = /obj/item/reagent_containers/food/snacks/cracker - can_hold = list(/obj/item/reagent_containers/food/snacks/cracker) - startswith = list(/obj/item/reagent_containers/food/snacks/cracker = 6) - -/* - * Crayon Box - */ - -/obj/item/storage/fancy/crayons - name = "box of crayons" - desc = "A box of crayons for all your rune drawing needs." - icon = 'icons/obj/crayons.dmi' - icon_state = "crayonbox" - w_class = ITEM_SIZE_SMALL - max_w_class = ITEM_SIZE_TINY - max_storage_space = 6 - - key_type = /obj/item/pen/crayon - startswith = list( - /obj/item/pen/crayon/red, - /obj/item/pen/crayon/orange, - /obj/item/pen/crayon/yellow, - /obj/item/pen/crayon/green, - /obj/item/pen/crayon/blue, - /obj/item/pen/crayon/purple, - ) - -/obj/item/storage/fancy/crayons/on_update_icon() - overlays = list() //resets list - overlays += image('icons/obj/crayons.dmi',"crayonbox") - for(var/obj/item/pen/crayon/crayon in contents) - overlays += image('icons/obj/crayons.dmi',crayon.colourName) - -/* - * Pencil Case - */ - -/obj/item/storage/fancy/pencilcase - name = "pencil case" - desc = "A pencil case for all those schoolboys to carry." - icon = 'icons/obj/storage.dmi' - icon_state = "pencil_case" - w_class = ITEM_SIZE_SMALL - max_w_class = ITEM_SIZE_TINY - max_storage_space = 6 * ITEM_SIZE_TINY - key_type = /obj/item/pen - startswith = list( - /obj/item/pen, - /obj/item/pen/blue, - /obj/item/pen/red, - /obj/item/pen/green, - /obj/item/pen/crayon/yellow, - /obj/item/pen/crayon/purple, - ) - -/obj/item/storage/fancy/pencilcase/on_update_icon() - if(!opened) - src.icon_state = initial(icon_state) - else - var/key_count = count_by_type(contents, key_type) - if(key_count >= 1) - src.icon_state = "[initial(icon_state)]1" - else - src.icon_state = "[initial(icon_state)]0" - -//////////// -//CIG PACK// -//////////// -/obj/item/storage/fancy/cigarettes - name = "pack of Trans-Stellar Duty-frees" - desc = "A ubiquitous brand of cigarettes, found in the facilities of every major spacefaring corporation in the universe. As mild and flavorless as it gets." - icon = 'icons/obj/cigarettes.dmi' - icon_state = "cigpacket" - item_state = "cigpacket" - w_class = ITEM_SIZE_SMALL - max_w_class = ITEM_SIZE_TINY - max_storage_space = 6 - throwforce = 2 - slot_flags = SLOT_BELT - - key_type = /obj/item/clothing/mask/smokable/cigarette - startswith = list(/obj/item/clothing/mask/smokable/cigarette = 6) - -/obj/item/storage/fancy/cigarettes/New() - ..() - atom_flags |= ATOM_FLAG_NO_REACT|ATOM_FLAG_OPEN_CONTAINER - create_reagents(5 * max_storage_space)//so people can inject cigarettes without opening a packet, now with being able to inject the whole one - -/obj/item/storage/fancy/cigarettes/remove_from_storage(obj/item/W as obj, atom/new_location) - // Don't try to transfer reagents to lighters - if(istype(W, /obj/item/clothing/mask/smokable/cigarette)) - var/obj/item/clothing/mask/smokable/cigarette/C = W - reagents.trans_to_obj(C, (reagents.total_volume/contents.len)) - ..() - -/obj/item/storage/fancy/cigarettes/attack(mob/living/carbon/M as mob, mob/living/carbon/user as mob) - if(!istype(M, /mob)) - return - - if(M == user && user.zone_sel.selecting == BP_MOUTH && contents.len > 0 && !user.wear_mask) - // Find ourselves a cig. Note that we could be full of lighters. - var/obj/item/clothing/mask/smokable/cigarette/cig = null - for(var/obj/item/clothing/mask/smokable/cigarette/C in contents) - cig = C - break - - if(cig == null) - to_chat(user, "Looks like the packet is out of cigarettes.") - return - - // Instead of running equip_to_slot_if_possible() we check here first, - // to avoid dousing cig with reagents if we're not going to equip it - if(!cig.mob_can_equip(user, slot_wear_mask)) - return - - // We call remove_from_storage first to manage the reagent transfer and - // UI updates. - remove_from_storage(cig, null) - user.equip_to_slot(cig, slot_wear_mask) - - reagents.maximum_volume = 5 * contents.len - to_chat(user, "You take a cigarette out of the pack.") - update_icon() - else - ..() - -/obj/item/storage/fancy/cigarettes/dromedaryco - name = "pack of Dromedary Co. cigarettes" - desc = "A packet of six imported Dromedary Company cancer sticks. A label on the packaging reads, \"Wouldn't a slow death make a change?\"." - icon_state = "Dpacket" - startswith = list(/obj/item/clothing/mask/smokable/cigarette/dromedaryco = 6) - -/obj/item/storage/fancy/cigarettes/killthroat - name = "pack of Acme Co. cigarettes" - desc = "A packet of six Acme Company cigarettes. For those who somehow want to obtain the record for the most amount of cancerous tumors." - icon_state = "Bpacket" - startswith = list(/obj/item/clothing/mask/smokable/cigarette/killthroat = 6) - -/obj/item/storage/fancy/cigarettes/killthroat/New() - ..() - fill_cigarre_package(src,list(/datum/reagent/fuel = 4)) - -// New exciting ways to kill your lungs! - Earthcrusher // - -/obj/item/storage/fancy/cigarettes/luckystars - name = "pack of Lucky Stars" - desc = "A mellow blend made from synthetic, pod-grown tobacco. The commercial jingle is guaranteed to get stuck in your head." - icon_state = "LSpacket" - item_state = "Dpacket" //I actually don't mind cig packs not showing up in the hand. whotf doesn't just keep them in their pockets/coats // - startswith = list(/obj/item/clothing/mask/smokable/cigarette/luckystars = 6) - -/obj/item/storage/fancy/cigarettes/jerichos - name = "pack of Jerichos" - desc = "Typically seen dangling from the lips of Martian soldiers and border world hustlers. Tastes like hickory smoke, feels like warm liquid death down your lungs." - icon_state = "Jpacket" - item_state = "Dpacket" - startswith = list(/obj/item/clothing/mask/smokable/cigarette/jerichos = 6) - -/obj/item/storage/fancy/cigarettes/menthols - name = "pack of Temperamento Menthols" - desc = "With a sharp and natural organic menthol flavor, these Temperamentos are a favorite of NDV crews. Hardly anyone knows they make 'em in non-menthol!" - icon_state = "TMpacket" - item_state = "Dpacket" - - key_type = /obj/item/clothing/mask/smokable/cigarette/menthol - startswith = list(/obj/item/clothing/mask/smokable/cigarette/menthol = 6) - -/obj/item/storage/fancy/cigarettes/carcinomas - name = "pack of Carcinoma Angels" - desc = "This unknown brand was slated for the chopping block, until they were publicly endorsed by an old Earthling gonzo journalist. The rest is history. They sell a variety for cats, too. Yes, actual cats." - icon_state = "CApacket" - item_state = "Dpacket" - startswith = list(/obj/item/clothing/mask/smokable/cigarette/carcinomas = 6) - -/obj/item/storage/fancy/cigarettes/professionals - name = "pack of Professional 120s" - desc = "Let's face it - if you're smoking these, you're either trying to look upper-class or you're 80 years old. That's the only excuse. They taste disgusting, too." - icon_state = "P100packet" - item_state = "Dpacket" - startswith = list(/obj/item/clothing/mask/smokable/cigarette/professionals = 6) - -//cigarellos -/obj/item/storage/fancy/cigarettes/cigarello - name = "pack of Trident Original cigars" - desc = "The Trident brand's wood tipped little cigar, favored by the Sol corps diplomatique for their pleasant aroma. Machine made on Mars for over 100 years." - icon_state = "CRpacket" - item_state = "Dpacket" - max_storage_space = 5 - key_type = /obj/item/clothing/mask/smokable/cigarette/trident - startswith = list(/obj/item/clothing/mask/smokable/cigarette/trident = 5) - -/obj/item/storage/fancy/cigarettes/cigarello/variety - name = "pack of Trident Fruit cigars" - desc = "The Trident brand's wood tipped little cigar, favored by the Sol corps diplomatique for their pleasant aroma. Machine made on Mars for over 100 years. This is a fruit variety pack." - icon_state = "CRFpacket" - startswith = list( /obj/item/clothing/mask/smokable/cigarette/trident/watermelon, - /obj/item/clothing/mask/smokable/cigarette/trident/orange, - /obj/item/clothing/mask/smokable/cigarette/trident/grape, - /obj/item/clothing/mask/smokable/cigarette/trident/cherry, - /obj/item/clothing/mask/smokable/cigarette/trident/berry) - -/obj/item/storage/fancy/cigarettes/cigarello/mint - name = "pack of Trident Menthol cigars" - desc = "The Trident brand's wood tipped little cigar, favored by the Sol corps diplomatique for their pleasant aroma. Machine made on Mars for over 100 years. These are the menthol variety." - icon_state = "CRMpacket" - startswith = list(/obj/item/clothing/mask/smokable/cigarette/trident/mint = 5) - -/obj/item/storage/fancy/cigarettes/case - name = "cigarette case" - desc = "A fancy little case for holding cigarettes in it." - icon_state = "cigscase" - max_storage_space = null - storage_slots = 6 - -/obj/item/storage/fancy/cigarettes/case/attack() - return - -/obj/item/storage/fancy/cigar - name = "cigar case" - desc = "A case for holding your cigars when you are not smoking them." - icon_state = "cigarcase" - item_state = "cigpacket" - icon = 'icons/obj/cigarettes.dmi' - w_class = ITEM_SIZE_SMALL - max_w_class = ITEM_SIZE_TINY - throwforce = 2 - slot_flags = SLOT_BELT - storage_slots = 7 - - key_type = /obj/item/clothing/mask/smokable/cigarette/cigar - startswith = list(/obj/item/clothing/mask/smokable/cigarette/cigar = 6) - -/obj/item/storage/fancy/cigar/New() - ..() - atom_flags |= ATOM_FLAG_NO_REACT - create_reagents(10 * storage_slots) - -/obj/item/storage/fancy/cigar/remove_from_storage(obj/item/W as obj, atom/new_location) - var/obj/item/clothing/mask/smokable/cigarette/cigar/C = W - if(!istype(C)) return - reagents.trans_to_obj(C, (reagents.total_volume/contents.len)) - ..() - -/* - * Vial Box - */ - -/obj/item/storage/fancy/vials - icon = 'icons/obj/vialbox.dmi' - icon_state = "vialbox" - name = "vial storage box" - w_class = ITEM_SIZE_NORMAL - max_w_class = ITEM_SIZE_TINY - storage_slots = 12 - - key_type = /obj/item/reagent_containers/glass/beaker/vial - startswith = list(/obj/item/reagent_containers/glass/beaker/vial = 12) - -/obj/item/storage/fancy/vials/on_update_icon() - var/key_count = count_by_type(contents, key_type) - src.icon_state = "[initial(icon_state)][Floor(key_count/2)]" - -/* - * Not actually a "fancy" storage... - */ -/obj/item/storage/lockbox/vials - name = "secure vial storage box" - desc = "A locked box for keeping things away from children." - icon = 'icons/obj/vialbox.dmi' - icon_state = "vialbox0" - item_state = "syringe_kit" - w_class = ITEM_SIZE_NORMAL - max_w_class = ITEM_SIZE_TINY - max_storage_space = null - storage_slots = 12 - req_access = list(access_virology) - -/obj/item/storage/lockbox/vials/New() - ..() - update_icon() - -/obj/item/storage/lockbox/vials/on_update_icon() - var/total_contents = count_by_type(contents, /obj/item/reagent_containers/glass/beaker/vial) - src.icon_state = "vialbox[Floor(total_contents/2)]" - src.overlays.Cut() - if (!broken) - overlays += image(icon, src, "led[locked]") - if(locked) - overlays += image(icon, src, "cover") - else - overlays += image(icon, src, "ledb") - return - -/obj/item/storage/lockbox/vials/attackby(obj/item/W as obj, mob/user as mob) - . = ..() - update_icon() diff --git a/code/game/objects/items/weapons/storage/firstaid.dm b/code/game/objects/items/weapons/storage/firstaid.dm deleted file mode 100644 index 63f8812197e70..0000000000000 --- a/code/game/objects/items/weapons/storage/firstaid.dm +++ /dev/null @@ -1,410 +0,0 @@ -/* First aid storage - * Contains: - * First Aid Kits - * Pill Bottles - */ - -/* - * First Aid Kits - */ -/obj/item/storage/firstaid - name = "first-aid kit" - desc = "It's an emergency medical kit for those serious boo-boos." - icon_state = "firstaid" - throw_speed = 2 - throw_range = 8 - max_w_class = ITEM_SIZE_SMALL - max_storage_space = DEFAULT_BOX_STORAGE - use_sound = 'sound/effects/storage/box.ogg' - allow_slow_dump = TRUE - -/obj/item/storage/firstaid/empty - icon_state = "firstaid" - name = "First-Aid (empty)" - -/obj/item/storage/firstaid/regular - icon_state = "firstaid" - - startswith = list( - /obj/item/stack/medical/bruise_pack = 2, - /obj/item/stack/medical/ointment = 2, - /obj/item/storage/pill_bottle/antidexafen, - /obj/item/storage/pill_bottle/paracetamol, - /obj/item/stack/medical/splint - ) - -/obj/item/storage/firstaid/trauma - name = "trauma first-aid kit" - desc = "It's an emergency medical kit for when people brought ballistic weapons to a laser fight." - icon_state = "radfirstaid" - item_state = "firstaid-ointment" - - startswith = list( - /obj/item/storage/med_pouch/trauma = 4 - ) - -/obj/item/storage/firstaid/trauma/New() - ..() - icon_state = pick("radfirstaid", "radfirstaid2", "radfirstaid3") - -/obj/item/storage/firstaid/fire - name = "fire first-aid kit" - desc = "It's an emergency medical kit for when the toxins lab -spontaneously- burns down." - icon_state = "ointment" - item_state = "firstaid-ointment" - - startswith = list( - /obj/item/storage/med_pouch/burn = 4 - ) - -/obj/item/storage/firstaid/fire/New() - ..() - icon_state = pick("ointment","firefirstaid") - -/obj/item/storage/firstaid/toxin - name = "toxin first aid" - desc = "Used to treat when you have a high amount of toxins in your body." - icon_state = "antitoxin" - item_state = "firstaid-toxin" - - startswith = list( - /obj/item/storage/med_pouch/toxin = 4 - ) - -/obj/item/storage/firstaid/toxin/New() - ..() - icon_state = pick("antitoxin","antitoxfirstaid","antitoxfirstaid2","antitoxfirstaid3") - -/obj/item/storage/firstaid/o2 - name = "oxygen deprivation first aid" - desc = "A box full of oxygen goodies." - icon_state = "o2" - item_state = "firstaid-o2" - - startswith = list( - /obj/item/storage/med_pouch/oxyloss = 4 - ) - -/obj/item/storage/firstaid/adv - name = "advanced first-aid kit" - desc = "Contains advanced medical treatments." - icon_state = "purplefirstaid" - item_state = "firstaid-advanced" - - startswith = list( - /obj/item/storage/pill_bottle/assorted, - /obj/item/stack/medical/advanced/bruise_pack = 3, - /obj/item/stack/medical/advanced/ointment = 2, - /obj/item/stack/medical/splint - ) - -/obj/item/storage/firstaid/combat - name = "combat medical kit" - desc = "Contains advanced medical treatments." - icon_state = "bezerk" - item_state = "firstaid-advanced" - - startswith = list( - /obj/item/storage/pill_bottle/bicaridine, - /obj/item/storage/pill_bottle/dermaline, - /obj/item/storage/pill_bottle/dexalin_plus, - /obj/item/storage/pill_bottle/dylovene, - /obj/item/storage/pill_bottle/tramadol, - /obj/item/storage/pill_bottle/spaceacillin, - /obj/item/stack/medical/splint, - ) - -/obj/item/storage/firstaid/stab - name = "stabilisation first aid" - desc = "Stocked with medical pouches." - icon_state = "stabfirstaid" - item_state = "firstaid-advanced" - - startswith = list( - /obj/item/storage/med_pouch/trauma, - /obj/item/storage/med_pouch/burn, - /obj/item/storage/med_pouch/oxyloss, - /obj/item/storage/med_pouch/toxin, - /obj/item/storage/med_pouch/radiation, - ) - -/obj/item/storage/firstaid/sleekstab - name = "Slimline stabilisation kit" - desc = "A sleek and expensive looking medical kit." - icon_state = "stabfirstaid" - item_state = "firstaid-advanced" - w_class = ITEM_SIZE_SMALL - storage_slots = 7 - - startswith = list( - /obj/item/reagent_containers/hypospray/autoinjector/coagulant, - /obj/item/reagent_containers/hypospray/autoinjector/pain, - /obj/item/reagent_containers/hypospray/autoinjector/pouch_auto/adrenaline, - /obj/item/reagent_containers/hypospray/autoinjector/pouch_auto/inaprovaline, - /obj/item/reagent_containers/hypospray/autoinjector/pouch_auto/inaprovaline, - /obj/item/reagent_containers/hypospray/autoinjector/dexalin_plus, - /obj/item/reagent_containers/hypospray/autoinjector/detox, - ) - - -/obj/item/storage/firstaid/surgery - name = "surgery kit" - desc = "Contains tools for surgery. Has precise foam fitting for safe transport and automatically sterilizes the content between uses." - icon_state = "surgerykit" - item_state = "firstaid-surgery" - - storage_slots = 14 - max_w_class = ITEM_SIZE_NORMAL - max_storage_space = null - use_sound = 'sound/effects/storage/briefcase.ogg' - - can_hold = list( - /obj/item/bonesetter, - /obj/item/cautery, - /obj/item/circular_saw, - /obj/item/hemostat, - /obj/item/retractor, - /obj/item/scalpel, - /obj/item/surgicaldrill, - /obj/item/bonegel, - /obj/item/FixOVein, - /obj/item/stack/medical/advanced/bruise_pack, - /obj/item/stack/nanopaste - ) - - startswith = list( - /obj/item/bonesetter, - /obj/item/cautery, - /obj/item/circular_saw, - /obj/item/hemostat, - /obj/item/retractor, - /obj/item/scalpel, - /obj/item/surgicaldrill, - /obj/item/bonegel, - /obj/item/FixOVein, - /obj/item/stack/medical/advanced/bruise_pack, - ) - -/* - * Pill Bottles - */ -/obj/item/storage/pill_bottle - name = "pill bottle" - desc = "It's an airtight container for storing medication." - icon_state = "pill_canister" - icon = 'icons/obj/chemical.dmi' - item_state = "contsolid" - w_class = ITEM_SIZE_SMALL - max_w_class = ITEM_SIZE_TINY - max_storage_space = 21 - can_hold = list(/obj/item/reagent_containers/pill,/obj/item/dice,/obj/item/paper) - allow_quick_gather = 1 - use_to_pickup = 1 - use_sound = 'sound/effects/storage/pillbottle.ogg' - matter = list(MATERIAL_PLASTIC = 250) - var/wrapper_color - var/label - -/obj/item/storage/pill_bottle/afterattack(mob/living/target, mob/living/user, proximity_flag) - if(!proximity_flag || !istype(target) || target != user) - return 1 - if(!contents.len) - to_chat(user, "It's empty!") - return 1 - var/zone = user.zone_sel.selecting - if(zone == BP_MOUTH && target.can_eat()) - user.visible_message("[user] pops a pill from \the [src].") - playsound(get_turf(src), 'sound/effects/peelz.ogg', 50) - var/list/peelz = filter_list(contents,/obj/item/reagent_containers/pill) - if(peelz.len) - var/obj/item/reagent_containers/pill/P = pick(peelz) - remove_from_storage(P) - P.attack(target,user) - return 1 - -/obj/item/storage/pill_bottle/afterattack(obj/target, mob/living/user, proximity) - if(!proximity) - return - if(target.is_open_container() && target.reagents) - if(!target.reagents.total_volume) - to_chat(user, SPAN_NOTICE("[target] is empty. Can't dissolve a pill.")) - return - - var/list/peelz = filter_list(contents,/obj/item/reagent_containers/pill) - if(peelz.len) - var/obj/item/reagent_containers/pill/P = pick(peelz) - remove_from_storage(P) - P.afterattack(target, user, proximity) - return - - -/obj/item/storage/pill_bottle/attack_self(mob/living/user) - if(user.get_inactive_hand()) - to_chat(user, "You need an empty hand to take something out.") - return - if(contents.len) - var/obj/item/I = contents[1] - if(!remove_from_storage(I,user)) - return - if(user.put_in_inactive_hand(I)) - to_chat(user, "You take \the [I] out of \the [src].") - if(iscarbon(user)) - var/mob/living/carbon/C = user - C.swap_hand() - else - I.dropInto(loc) - to_chat(user, "You fumble around with \the [src] and drop \the [I] on the floor.") - else - to_chat(user, "\The [src] is empty.") - - -/obj/item/storage/pill_bottle/Initialize() - . = ..() - update_icon() - -/obj/item/storage/pill_bottle/on_update_icon() - overlays.Cut() - if(wrapper_color) - var/image/I = image(icon, "pillbottle_wrap") - I.color = wrapper_color - overlays += I - -/obj/item/storage/pill_bottle/antitox - name = "pill bottle (Dylovene)" - desc = "Contains pills used to counter toxins." - - startswith = list(/obj/item/reagent_containers/pill/antitox = 21) - wrapper_color = COLOR_GREEN - -/obj/item/storage/pill_bottle/bicaridine - name = "pill bottle (Bicaridine)" - desc = "Contains pills used to stabilize the severely injured." - - startswith = list(/obj/item/reagent_containers/pill/bicaridine = 21) - wrapper_color = COLOR_MAROON - -/obj/item/storage/pill_bottle/dexalin_plus - name = "pill bottle (Dexalin Plus)" - desc = "Contains pills used to treat extreme cases of oxygen deprivation." - - startswith = list(/obj/item/reagent_containers/pill/dexalin_plus = 14) - wrapper_color = COLOR_CYAN_BLUE - -/obj/item/storage/pill_bottle/dexalin - name = "pill bottle (Dexalin)" - desc = "Contains pills used to treat oxygen deprivation." - - startswith = list(/obj/item/reagent_containers/pill/dexalin = 21) - wrapper_color = COLOR_LIGHT_CYAN - -/obj/item/storage/pill_bottle/dermaline - name = "pill bottle (Dermaline)" - desc = "Contains pills used to treat burn wounds." - - startswith = list(/obj/item/reagent_containers/pill/dermaline = 14) - wrapper_color = COLOR_ORANGE - -/obj/item/storage/pill_bottle/dylovene - name = "pill bottle (Dylovene)" - desc = "Contains pills used to treat toxic substances in the blood." - - startswith = list(/obj/item/reagent_containers/pill/dylovene = 21) - wrapper_color = COLOR_GREEN - -/obj/item/storage/pill_bottle/inaprovaline - name = "pill bottle (Inaprovaline)" - desc = "Contains pills used to stabilize patients." - - startswith = list(/obj/item/reagent_containers/pill/inaprovaline = 21) - wrapper_color = COLOR_PALE_BLUE_GRAY - -/obj/item/storage/pill_bottle/kelotane - name = "pill bottle (Kelotane)" - desc = "Contains pills used to treat burns." - - startswith = list(/obj/item/reagent_containers/pill/kelotane = 21) - wrapper_color = COLOR_YELLOW - -/obj/item/storage/pill_bottle/spaceacillin - name = "pill bottle (Spaceacillin)" - desc = "A theta-lactam antibiotic. Effective against many diseases likely to be encountered in space." - - startswith = list(/obj/item/reagent_containers/pill/spaceacillin = 14) - wrapper_color = COLOR_PALE_GREEN_GRAY - -/obj/item/storage/pill_bottle/tramadol - name = "pill bottle (Tramadol)" - desc = "Contains pills used to relieve pain." - - startswith = list(/obj/item/reagent_containers/pill/tramadol = 14) - wrapper_color = COLOR_PURPLE_GRAY - -//Baycode specific Psychiatry pills. -/obj/item/storage/pill_bottle/citalopram - name = "pill bottle (Citalopram)" - desc = "Mild antidepressant. For use in individuals suffering from depression or anxiety. 15u dose per pill." - - startswith = list(/obj/item/reagent_containers/pill/citalopram = 21) - wrapper_color = COLOR_GRAY - -/obj/item/storage/pill_bottle/methylphenidate - name = "pill bottle (Methylphenidate)" - desc = "Mental stimulant. For use in individuals suffering from ADHD, or general concentration issues. 15u dose per pill." - - startswith = list(/obj/item/reagent_containers/pill/methylphenidate = 21) - wrapper_color = COLOR_GRAY - -/obj/item/storage/pill_bottle/paroxetine - name = "pill bottle (Paroxetine)" - desc = "High-strength antidepressant. Only for use in severe depression. 10u dose per pill. WARNING: side-effects may include hallucinations." - - startswith = list(/obj/item/reagent_containers/pill/paroxetine = 14) - wrapper_color = COLOR_GRAY - -/obj/item/storage/pill_bottle/antidexafen - name = "pill bottle (cold medicine)" - desc = "All-in-one cold medicine. 15u dose per pill. Safe for babies like you!" - - startswith = list(/obj/item/reagent_containers/pill/antidexafen = 21) - wrapper_color = COLOR_VIOLET - -/obj/item/storage/pill_bottle/paracetamol - name = "pill bottle (Paracetamol)" - desc = "Mild painkiller, also known as Tylenol. Won't fix the cause of your headache (unlike cyanide), but might make it bearable." - - startswith = list(/obj/item/reagent_containers/pill/paracetamol = 21) - wrapper_color = "#a2819e" - -/obj/item/storage/pill_bottle/assorted - name = "pill bottle (assorted)" - desc = "Commonly found on paramedics, these assorted pill bottles contain all the basics." - - startswith = list( - /obj/item/reagent_containers/pill/inaprovaline = 6, - /obj/item/reagent_containers/pill/dylovene = 6, - /obj/item/reagent_containers/pill/sugariron = 2, - /obj/item/reagent_containers/pill/tramadol = 2, - /obj/item/reagent_containers/pill/dexalin = 2, - /obj/item/reagent_containers/pill/kelotane = 2, - /obj/item/reagent_containers/pill/hyronalin - ) - -/obj/item/storage/firstaid/light - name = "light first-aid kit" - desc = "It's a small emergency medical kit." - icon_state = "light_firstaid" - storage_slots = 5 - w_class = ITEM_SIZE_SMALL - max_w_class = ITEM_SIZE_SMALL - startswith = list( - /obj/item/clothing/gloves/latex/nitrile, - /obj/item/reagent_containers/hypospray/autoinjector, - /obj/item/reagent_containers/hypospray/autoinjector/pouch_auto/deletrathol, - /obj/item/reagent_containers/hypospray/autoinjector/pouch_auto/dexalin, - /obj/item/stack/medical/bruise_pack - ) - can_hold = list( - /obj/item/clothing/gloves/latex, - /obj/item/reagent_containers/hypospray/autoinjector, - /obj/item/stack/medical/bruise_pack - ) diff --git a/code/game/objects/items/weapons/storage/firstaid_indiv.dm b/code/game/objects/items/weapons/storage/firstaid_indiv.dm deleted file mode 100644 index ded5b2be59a12..0000000000000 --- a/code/game/objects/items/weapons/storage/firstaid_indiv.dm +++ /dev/null @@ -1,57 +0,0 @@ -//Personal firstaid kit, from infinity - -/obj/item/storage/firstaid/individual - name = "master kit" - icon = 'icons/obj/items.dmi' - icon_state = "survivalmed" - slot_flags = SLOT_BELT - w_class = ITEM_SIZE_SMALL - storage_slots = 10 - can_hold = list( - /obj/item/reagent_containers/hypospray/autoinjector, - /obj/item/stack/medical/bruise_pack, - /obj/item/stack/medical/ointment, - /obj/item/reagent_containers/pill, - /obj/item/storage/pill_bottle, - /obj/item/stack/medical/advanced, - /obj/item/reagent_containers/syringe, - /obj/item/bodybag/ - ) - -/obj/item/storage/firstaid/individual/all - name = "individual medical kit" - desc = "A small box decorated in warning colors that contains a limited supply of medical reagents." - startswith = list( - /obj/item/reagent_containers/hypospray/autoinjector/inaprovaline, - /obj/item/stack/medical/bruise_pack, - /obj/item/stack/medical/ointment - ) - -/obj/item/storage/firstaid/individual/military - name = "military individual medical kit" - desc = "A small box decorated in dark colors that contains a limited supply of medical reagents." - icon_state = "survivalmilmed" - startswith = list( - /obj/item/reagent_containers/hypospray/autoinjector/burn = 2, - /obj/item/reagent_containers/hypospray/autoinjector/brute = 2, - /obj/item/reagent_containers/hypospray/autoinjector/pain, - /obj/item/reagent_containers/hypospray/autoinjector/detox, - /obj/item/reagent_containers/hypospray/autoinjector/inaprovaline, - /obj/item/reagent_containers/hypospray/autoinjector/antirad, - /obj/item/stack/medical/bruise_pack, - /obj/item/stack/medical/ointment - ) - -/obj/item/storage/firstaid/individual/military/exp - name = "expeditionary individual medical kit" - desc = "A small box decorated in warning colors that contains a limited supply of medical reagents." - icon_state = "survivalexp" - storage_slots = 7 - startswith = list( - /obj/item/reagent_containers/hypospray/autoinjector/burn, - /obj/item/reagent_containers/hypospray/autoinjector/brute, - /obj/item/reagent_containers/hypospray/autoinjector/pouch_auto/dexalin, - /obj/item/reagent_containers/hypospray/autoinjector/pain = 2, - /obj/item/stack/medical/bruise_pack, - /obj/item/stack/medical/ointment - ) diff --git a/code/game/objects/items/weapons/storage/internal.dm b/code/game/objects/items/weapons/storage/internal.dm deleted file mode 100644 index 1e13098515aec..0000000000000 --- a/code/game/objects/items/weapons/storage/internal.dm +++ /dev/null @@ -1,96 +0,0 @@ -//A storage item intended to be used by other items to provide storage functionality. -//Types that use this should consider overriding emp_act() and hear_talk(), unless they shield their contents somehow. -/obj/item/storage/internal - var/obj/item/master_item - -/obj/item/storage/internal/New(obj/item/MI) - master_item = MI - name = master_item.name - verbs -= /obj/item/verb/verb_pickup //make sure this is never picked up. - ..() - -/obj/item/storage/internal/Destroy() - master_item = null - . = ..() - -/obj/item/storage/internal/attack_hand() - return //make sure this is never picked up - -/obj/item/storage/internal/mob_can_equip() - return 0 //make sure this is never picked up - -//Helper procs to cleanly implement internal storages - storage items that provide inventory slots for other items. -//These procs are completely optional, it is up to the master item to decide when it's storage get's opened by calling open() -//However they are helpful for allowing the master item to pretend it is a storage item itself. -//If you are using these you will probably want to override attackby() as well. -//See /obj/item/clothing/suit/storage for an example. - -//items that use internal storage have the option of calling this to emulate default storage MouseDrop behaviour. -//returns 1 if the master item's parent's MouseDrop() should be called, 0 otherwise. It's strange, but no other way of -//doing it without the ability to call another proc's parent, really. -/obj/item/storage/internal/proc/handle_mousedrop(mob/user as mob, obj/over_object as obj) - if (ishuman(user) || issmall(user)) //so monkeys can take off their backpacks -- Urist - - if(over_object == user && Adjacent(user)) // this must come before the screen objects only block - src.open(user) - return 0 - - if (!( istype(over_object, /obj/screen) )) - return 1 - - //makes sure master_item is equipped before putting it in hand, so that we can't drag it into our hand from miles away. - //there's got to be a better way of doing this... - if (!(master_item.loc == user) || (master_item.loc && master_item.loc.loc == user)) - return 0 - - //TODO make this less terrible - if (!( user.restrained() ) && !( user.stat )) - switch(over_object.name) - if(BP_R_HAND) - if(user.unEquip(master_item)) - user.put_in_r_hand(master_item) - if(BP_L_HAND) - if(user.unEquip(master_item)) - user.put_in_l_hand(master_item) - master_item.add_fingerprint(user) - return 0 - return 0 - -//items that use internal storage have the option of calling this to emulate default storage attack_hand behaviour. -//returns 1 if the master item's parent's attack_hand() should be called, 0 otherwise. -//It's strange, but no other way of doing it without the ability to call another proc's parent, really. -/obj/item/storage/internal/proc/handle_attack_hand(mob/user as mob) - - if(ishuman(user)) - var/mob/living/carbon/human/H = user - if(H.l_store == master_item && !H.get_active_hand()) //Prevents opening if it's in a pocket. - H.put_in_hands(master_item) - H.l_store = null - return 0 - if(H.r_store == master_item && !H.get_active_hand()) - H.put_in_hands(master_item) - H.r_store = null - return 0 - - src.add_fingerprint(user) - if (master_item.loc == user) - src.open(user) - return 0 - - for(var/mob/M in range(1, master_item.loc)) - if (M.s_active == src) - src.close(M) - return 1 - -/obj/item/storage/internal/Adjacent(var/atom/neighbor) - return master_item.Adjacent(neighbor) - -// Used by webbings, coat pockets, etc -/obj/item/storage/internal/pockets/New(var/newloc, var/slots, var/slot_size) - storage_slots = slots - max_w_class = slot_size - ..() - -/obj/item/storage/internal/pouch/New(var/newloc, var/storage_space) - max_storage_space = storage_space - ..() \ No newline at end of file diff --git a/code/game/objects/items/weapons/storage/laundry_basket.dm b/code/game/objects/items/weapons/storage/laundry_basket.dm deleted file mode 100644 index 8584108e0dd17..0000000000000 --- a/code/game/objects/items/weapons/storage/laundry_basket.dm +++ /dev/null @@ -1,87 +0,0 @@ -// ----------------------------- -// Laundry Basket -// ----------------------------- -// An item designed for hauling the belongings of a character. -// So this cannot be abused for other uses, we make it two-handed and inable to have its storage looked into. -/obj/item/storage/laundry_basket - name = "laundry basket" - icon = 'icons/obj/janitor.dmi' - icon_state = "laundry-empty" - item_state = "laundry" - desc = "The peak of thousands of years of laundry evolution." - - w_class = ITEM_SIZE_GARGANTUAN - max_w_class = ITEM_SIZE_HUGE - max_storage_space = DEFAULT_BACKPACK_STORAGE //20 for clothes + a bit of additional space for non-clothing items that were worn on body - storage_slots = 14 - use_to_pickup = 1 - allow_quick_empty = 1 - allow_quick_gather = 1 - collection_mode = 1 - var/linked - - -/obj/item/storage/laundry_basket/attack_hand(mob/user as mob) - if(ishuman(user)) - var/mob/living/carbon/human/H = user - var/obj/item/organ/external/temp = H.get_organ(BP_R_HAND) - if (user.hand) - temp = H.get_organ(BP_L_HAND) - if(!temp) - to_chat(user, "You need two hands to pick this up!") - return - - if(user.get_inactive_hand()) - to_chat(user, "You need your other hand to be empty") - return - return ..() - -/obj/item/storage/laundry_basket/attack_self(mob/user as mob) - var/turf/T = get_turf(user) - to_chat(user, "You dump the [src]'s contents onto \the [T].") - return ..() - -/obj/item/storage/laundry_basket/pickup(mob/user) - var/obj/item/storage/laundry_basket/offhand/O = new(user) - O.SetName("[name] - second hand") - O.desc = "Your second grip on the [name]." - O.linked = src - user.put_in_inactive_hand(O) - linked = O - return ..() - -/obj/item/storage/laundry_basket/on_update_icon() - if(contents.len) - icon_state = "laundry-full" - else - icon_state = "laundry-empty" - return - - -/obj/item/storage/laundry_basket/MouseDrop(obj/over_object as obj) - if(over_object == usr) - return - else - return ..() - -/obj/item/storage/laundry_basket/dropped(mob/user as mob) - qdel(linked) - return ..() - -/obj/item/storage/laundry_basket/show_to(mob/user as mob) - return - -/obj/item/storage/laundry_basket/open(mob/user as mob) - - -//Offhand -/obj/item/storage/laundry_basket/offhand - icon = 'icons/obj/weapons/other.dmi' - icon_state = "offhand" - name = "second hand" - use_to_pickup = 0 - -/obj/item/storage/laundry_basket/offhand/dropped(mob/user as mob) - ..() - user.drop_from_inventory(linked) - return diff --git a/code/game/objects/items/weapons/storage/lockbox.dm b/code/game/objects/items/weapons/storage/lockbox.dm deleted file mode 100644 index 00867e19ea60d..0000000000000 --- a/code/game/objects/items/weapons/storage/lockbox.dm +++ /dev/null @@ -1,84 +0,0 @@ -/obj/item/storage/lockbox - name = "lockbox" - desc = "A locked box." - icon_state = "lockbox+l" - item_state = "syringe_kit" - w_class = ITEM_SIZE_HUGE - max_w_class = ITEM_SIZE_NORMAL - max_storage_space = 32 - req_access = list(access_armory) - var/locked = TRUE - var/broken = FALSE - var/icon_locked = "lockbox+l" - var/icon_closed = "lockbox" - var/icon_broken = "lockbox+b" - - -/obj/item/storage/lockbox/attackby(obj/item/I, mob/user) - if (istype(I, /obj/item/card/id)) - if (broken) - to_chat(user, SPAN_WARNING("It seems to be broken!")) - else if (!allowed(user)) - to_chat(user, SPAN_WARNING("Access denied!")) - else if ((locked = !locked)) - to_chat(user, SPAN_NOTICE("You lock \the [src]!")) - close_all() - else - icon_state = icon_closed - to_chat(user, SPAN_NOTICE("You lock \the [src]!")) - return - else if (!broken && istype(I, /obj/item/melee/energy/blade)) - var/success = emag_act(INFINITY, user, I, null, "You hear metal being sliced and sparks flying.") - if (success) - var/datum/effect/effect/system/spark_spread/spark_system = new - spark_system.set_up(5, 0, loc) - spark_system.start() - playsound(loc, 'sound/weapons/blade1.ogg', 50, 1) - playsound(loc, "sparks", 50, 1) - if (locked) - to_chat(user, SPAN_WARNING("It's locked!")) - return - ..() - - -/obj/item/storage/lockbox/show_to(mob/user) - if (locked) - to_chat(user, SPAN_WARNING("It's locked!")) - else - ..() - - -/obj/item/storage/lockbox/emag_act(remaining_charges, mob/user, emag_source, visual_feedback, audible_feedback) - if (broken) - return - broken = TRUE - locked = FALSE - desc = "It appears to be broken." - icon_state = icon_broken - if (user) - if (!visual_feedback) - visual_feedback = "\The [src] has been sliced open by \the [user] with \an [emag_source]!" - visual_feedback = SPAN_WARNING(visual_feedback) - if (!audible_feedback) - audible_feedback = "You hear a faint electrical spark." - audible_feedback = SPAN_WARNING(audible_feedback) - visible_message(visual_feedback, audible_feedback) - return TRUE - - -/obj/item/storage/lockbox/loyalty - name = "lockbox of loyalty implants" - req_access = list(access_security) - startswith = list( - /obj/item/implantcase/loyalty = 3, - /obj/item/implanter/loyalty = 1 - ) - - -/obj/item/storage/lockbox/clusterbang - name = "lockbox of clusterbangs" - desc = "You have a bad feeling about opening this." - req_access = list(access_security) - startswith = list( - /obj/item/grenade/flashbang/clusterbang = 1 - ) diff --git a/code/game/objects/items/weapons/storage/lunchbox.dm b/code/game/objects/items/weapons/storage/lunchbox.dm deleted file mode 100644 index e48c01ca222d4..0000000000000 --- a/code/game/objects/items/weapons/storage/lunchbox.dm +++ /dev/null @@ -1,116 +0,0 @@ -/obj/item/storage/lunchbox - max_storage_space = 8 //slightly smaller than a toolbox - name = "rainbow lunchbox" - icon_state = "lunchbox_rainbow" - item_state = "toolbox_pink" - desc = "A little lunchbox. This one is the colors of the rainbow!" - w_class = ITEM_SIZE_NORMAL - max_w_class = ITEM_SIZE_SMALL - var/filled = FALSE - attack_verb = list("lunched") - allow_slow_dump = TRUE - -/obj/item/storage/lunchbox/New() - ..() - if(filled) - var/list/lunches = lunchables_lunches() - var/lunch = lunches[pick(lunches)] - new lunch(src) - - var/list/snacks = lunchables_snacks() - var/snack = snacks[pick(snacks)] - new snack(src) - - var/list/drinks = lunchables_drinks() - var/drink = drinks[pick(drinks)] - new drink(src) - -/obj/item/storage/lunchbox/filled - filled = TRUE - -/obj/item/storage/lunchbox/heart - name = "heart lunchbox" - icon_state = "lunchbox_lovelyhearts" - item_state = "toolbox_pink" - desc = "A little lunchbox. This one has cute little hearts on it!" - -/obj/item/storage/lunchbox/heart/filled - filled = TRUE - -/obj/item/storage/lunchbox/cat - name = "cat lunchbox" - icon_state = "lunchbox_sciencecatshow" - item_state = "toolbox_green" - desc = "A little lunchbox. This one has a cute little science cat from a popular show on it!" - -/obj/item/storage/lunchbox/cat/filled - filled = TRUE - -/obj/item/storage/lunchbox/nt - name = "\improper NanoTrasen brand lunchbox" - icon_state = "lunchbox_nanotrasen" - item_state = "toolbox_blue" - desc = "A little lunchbox. This one is branded with the NanoTrasen logo!" - -/obj/item/storage/lunchbox/dais - name = "\improper DAIS brand lunchbox" - icon_state = "lunchbox_dais" - item_state = "toolbox_blue" - desc = "A little lunchbox. This one is branded with the Deimos Advanced Information Systems logo!" - -/obj/item/storage/lunchbox/nt/filled - filled = TRUE - -/obj/item/storage/lunchbox/mars - name = "\improper Mariner University lunchbox" - icon_state = "lunchbox_marsuniversity" - item_state = "toolbox_red" - desc = "A little lunchbox. This one is branded with the Mariner university logo!" - -/obj/item/storage/lunchbox/mars/filled - filled = TRUE - -/obj/item/storage/lunchbox/cti - name = "\improper CTI lunchbox" - icon_state = "lunchbox_cti" - item_state = "toolbox_blue" - desc = "A little lunchbox. This one is branded with the CTI logo!" - -/obj/item/storage/lunchbox/cti/filled - filled = TRUE - -/obj/item/storage/lunchbox/nymph - name = "\improper Diona nymph lunchbox" - icon_state = "lunchbox_dionanymph" - item_state = "toolbox_yellow" - desc = "A little lunchbox. This one is an adorable Diona nymph on the side!" - -/obj/item/storage/lunchbox/nymph/filled - filled = TRUE - -/obj/item/storage/lunchbox/syndicate - name = "black and red lunchbox" - icon_state = "lunchbox_syndie" - item_state = "toolbox_syndi" - desc = "A little lunchbox. This one is a sleek black and red, made of a durable steel!" - -/obj/item/storage/lunchbox/syndicate/filled - filled = TRUE - -/obj/item/storage/lunchbox/TCC - name = "\improper GCC lunchbox" - icon_state = "lunchbox_tcc" - item_state = "toolbox_syndi" - desc = "A little lunchbox. This one is branded with the flag of the Gilgamesh Colonial Confederation!" - -/obj/item/storage/lunchbox/syndicate/filled - filled = TRUE - -/obj/item/storage/lunchbox/picnic - name = "picnic basket" - icon_state = "picnic_basket" - item_state = "picnic_basket" - desc = "A small, old-fashioned picnic basket. Great for lunches in the garden." - -/obj/item/storage/lunchbox/picnic/filled - filled = TRUE diff --git a/code/game/objects/items/weapons/storage/med_pouch.dm b/code/game/objects/items/weapons/storage/med_pouch.dm deleted file mode 100644 index 32cc805d1dc6a..0000000000000 --- a/code/game/objects/items/weapons/storage/med_pouch.dm +++ /dev/null @@ -1,218 +0,0 @@ -/* -Single Use Emergency Pouches - */ - -/obj/item/storage/med_pouch - name = "emergency medical pouch" - desc = "For use in emergency situations only." - icon = 'icons/obj/med_pouch.dmi' - storage_slots = 7 - w_class = ITEM_SIZE_SMALL - max_w_class = ITEM_SIZE_SMALL - icon_state = "pack0" - opened = FALSE - open_sound = 'sound/effects/rip1.ogg' - var/injury_type = "generic" - var/static/image/cross_overlay - - var/instructions = {" - 1) Tear open the emergency medical pack using the easy open tab at the top.\n\ - \t2) Carefully remove all items from the pouch and discard the pouch.\n\ - \t3) Apply all autoinjectors to the injured party.\n\ - \t4) Use bandages to stop bleeding if required.\n\ - \t5) Force the injured party to swallow all pills.\n\ - \t6) Use ointment on any burns if required\n\ - \t7) Contact the medical team with your location. - 8) Stay in place once they respond.\ - "} - -/obj/item/storage/med_pouch/Initialize() - . = ..() - name = "emergency [injury_type] pouch" - make_exact_fit() - for(var/obj/item/reagent_containers/pill/P in contents) - P.color = color - for(var/obj/item/reagent_containers/hypospray/autoinjector/A in contents) - A.band_color = color - A.update_icon() - -/obj/item/storage/med_pouch/on_update_icon() - overlays.Cut() - if(!cross_overlay) - cross_overlay = image(icon, "cross") - cross_overlay.appearance_flags = DEFAULT_APPEARANCE_FLAGS | RESET_COLOR - overlays += cross_overlay - icon_state = "pack[opened]" - -/obj/item/storage/med_pouch/examine(mob/user) - . = ..() - to_chat(user, "Please read instructions before use.") - -/obj/item/storage/med_pouch/CanUseTopic() - return STATUS_INTERACTIVE - -/obj/item/storage/med_pouch/OnTopic(var/user, var/list/href_list) - if(href_list["show_info"]) - to_chat(user, instructions) - return TOPIC_HANDLED - -/obj/item/storage/med_pouch/attack_self(mob/user) - open(user) - -/obj/item/storage/med_pouch/open(mob/user) - if(!opened) - user.visible_message("\The [user] tears open [src], breaking the vacuum seal!", "You tear open [src], breaking the vacuum seal!") - . = ..() - -/obj/item/storage/med_pouch/trauma - name = "trauma pouch" - injury_type = "trauma" - color = COLOR_RED - - startswith = list( - /obj/item/reagent_containers/hypospray/autoinjector/pouch_auto/inaprovaline, - /obj/item/reagent_containers/pill/pouch_pill/inaprovaline, - /obj/item/reagent_containers/pill/pouch_pill/paracetamol, - /obj/item/stack/medical/bruise_pack = 2, - ) - instructions = {" - 1) Tear open the emergency medical pack using the easy open tab at the top.\n\ - \t2) Carefully remove all items from the pouch and discard the pouch.\n\ - \t3) Apply all autoinjectors to the injured party.\n\ - \t4) Use bandages to stop bleeding if required.\n\ - \t5) Force the injured party to swallow all pills.\n\ - \t6) Contact the medical team with your location. - 7) Stay in place once they respond.\ - "} - -/obj/item/storage/med_pouch/burn - name = "burn pouch" - injury_type = "burn" - color = COLOR_SEDONA - - startswith = list( - /obj/item/reagent_containers/hypospray/autoinjector/pouch_auto/inaprovaline, - /obj/item/reagent_containers/hypospray/autoinjector/pouch_auto/deletrathol, - /obj/item/reagent_containers/hypospray/autoinjector/pouch_auto/adrenaline, - /obj/item/reagent_containers/pill/pouch_pill/paracetamol, - /obj/item/stack/medical/ointment = 2, - ) - instructions = {" - 1) Tear open the emergency medical pack using the easy open tab at the top.\n\ - \t2) Carefully remove all items from the pouch and discard the pouch.\n\ - \t3) Apply the emergency deletrathol autoinjector to the injured party.\n\ - \t4) Apply all remaining autoinjectors to the injured party.\n\ - \t5) Force the injured party to swallow all pills.\n\ - \t6) Use ointment on any burns if required\n\ - \t7) Contact the medical team with your location. - 8) Stay in place once they respond.\ - "} - -/obj/item/storage/med_pouch/oxyloss - name = "low oxygen pouch" - injury_type = "low oxygen" - color = COLOR_BLUE - - startswith = list( - /obj/item/reagent_containers/hypospray/autoinjector/pouch_auto/inaprovaline, - /obj/item/reagent_containers/hypospray/autoinjector/pouch_auto/dexalin, - /obj/item/reagent_containers/hypospray/autoinjector/pouch_auto/adrenaline, - /obj/item/reagent_containers/pill/pouch_pill/inaprovaline, - /obj/item/reagent_containers/pill/pouch_pill/dexalin, - ) - instructions = {" - 1) Tear open the emergency medical pack using the easy open tab at the top.\n\ - \t2) Carefully remove all items from the pouch and discard the pouch.\n\ - \t3) Apply all autoinjectors to the injured party.\n\ - \t4) Force the injured party to swallow all pills.\n\ - \t5) Contact the medical team with your location.\n\ - \t6) Find a source of oxygen if possible.\n\ - \t7) Update the medical team with your new location.\n\ - 8) Stay in place once they respond.\ - "} - -/obj/item/storage/med_pouch/toxin - name = "toxin pouch" - injury_type = "toxin" - color = COLOR_GREEN - - startswith = list( - /obj/item/reagent_containers/hypospray/autoinjector/pouch_auto/dylovene, - /obj/item/reagent_containers/pill/pouch_pill/dylovene, - ) - instructions = {" - 1) Tear open the emergency medical pack using the easy open tab at the top.\n\ - \t2) Carefully remove all items from the pouch and discard the pouch.\n\ - \t3) Apply all autoinjectors to the injured party.\n\ - \t4) Force the injured party to swallow all pills.\n\ - \t5) Contact the medical team with your location. - 6) Stay in place once they respond.\ - "} - -/obj/item/storage/med_pouch/radiation - name = "radiation pouch" - injury_type = "radiation" - color = COLOR_AMBER - - startswith = list( - /obj/item/reagent_containers/hypospray/autoinjector/antirad, - /obj/item/reagent_containers/pill/pouch_pill/dylovene, - ) - instructions = {" - 1) Tear open the emergency medical pack using the easy open tab at the top.\n\ - \t2) Carefully remove all items from the pouch and discard the pouch.\n\ - \t3) Apply all autoinjectors to the injured party.\n\ - \t4) Force the injured party to swallow all pills.\n\ - \t5) Contact the medical team with your location. - 6) Stay in place once they respond.\ - "} - -/obj/item/reagent_containers/pill/pouch_pill - name = "emergency pill" - desc = "An emergency pill from an emergency medical pouch." - icon_state = "pill2" - var/datum/reagent/chem_type - var/chem_amount = 15 - -/obj/item/reagent_containers/pill/pouch_pill/inaprovaline - chem_type = /datum/reagent/inaprovaline - -/obj/item/reagent_containers/pill/pouch_pill/dylovene - chem_type = /datum/reagent/dylovene - -/obj/item/reagent_containers/pill/pouch_pill/dexalin - chem_type = /datum/reagent/dexalin - -/obj/item/reagent_containers/pill/pouch_pill/paracetamol - chem_type = /datum/reagent/paracetamol - -/obj/item/reagent_containers/pill/pouch_pill/New() - ..() - reagents.add_reagent(chem_type, chem_amount) - name = "emergency [reagents.get_master_reagent_name()] pill ([reagents.total_volume]u)" - color = reagents.get_color() - -/obj/item/reagent_containers/hypospray/autoinjector/pouch_auto - name = "emergency autoinjector" - desc = "An emergency autoinjector from an emergency medical pouch." - -/obj/item/reagent_containers/hypospray/autoinjector/pouch_auto/inaprovaline - name = "emergency inaprovaline autoinjector" - starts_with = list(/datum/reagent/inaprovaline = 5) - -/obj/item/reagent_containers/hypospray/autoinjector/pouch_auto/deletrathol - name = "emergency deletrathol autoinjector" - starts_with = list(/datum/reagent/deletrathol = 5) - -/obj/item/reagent_containers/hypospray/autoinjector/pouch_auto/dylovene - name = "emergency dylovene autoinjector" - starts_with = list(/datum/reagent/dylovene = 5) - -/obj/item/reagent_containers/hypospray/autoinjector/pouch_auto/dexalin - name = "emergency dexalin autoinjector" - starts_with = list(/datum/reagent/dexalin = 5) - -/obj/item/reagent_containers/hypospray/autoinjector/pouch_auto/adrenaline - name = "emergency adrenaline autoinjector" - amount_per_transfer_from_this = 8 - starts_with = list(/datum/reagent/adrenaline = 8) diff --git a/code/game/objects/items/weapons/storage/misc.dm b/code/game/objects/items/weapons/storage/misc.dm deleted file mode 100644 index faa42580da5be..0000000000000 --- a/code/game/objects/items/weapons/storage/misc.dm +++ /dev/null @@ -1,182 +0,0 @@ -/obj/item/storage/pill_bottle/dice //7d6 - name = "bag of dice" - desc = "It's a small bag with dice inside." - icon = 'icons/obj/dice.dmi' - icon_state = "dicebag" - -/obj/item/storage/pill_bottle/dice/New() - ..() - for(var/i = 1 to 7) - new /obj/item/dice( src ) - -/obj/item/storage/pill_bottle/dice_nerd //DnD dice - name = "bag of gaming dice" - desc = "It's a small bag with gaming dice inside." - icon = 'icons/obj/dice.dmi' - icon_state = "magicdicebag" - -/obj/item/storage/pill_bottle/dice_nerd/New() - ..() - new /obj/item/dice/d4( src ) - new /obj/item/dice( src ) - new /obj/item/dice/d8( src ) - new /obj/item/dice/d10( src ) - new /obj/item/dice/d12( src ) - new /obj/item/dice/d20( src ) - new /obj/item/dice/d100( src ) - - -/obj/item/storage/box/donut - icon = 'icons/obj/food.dmi' - icon_state = "donutbox" - name = "donut box" - can_hold = list(/obj/item/reagent_containers/food/snacks/donut) - foldable = /obj/item/stack/material/cardboard - - startswith = list(/obj/item/reagent_containers/food/snacks/donut/normal = 6) - -/obj/item/storage/box/donut/on_update_icon() - overlays.Cut() - var/i = 0 - for(var/obj/item/reagent_containers/food/snacks/donut/D in contents) - overlays += image('icons/obj/food.dmi', "[i][D.overlay_state]") - i++ - -/obj/item/storage/box/donut/empty - startswith = null - -//misc tobacco nonsense -/obj/item/storage/cigpaper - name = "\improper Gen. Eric cigarette paper" - desc = "A ubiquitous brand of cigarette paper, allegedly endorsed by 24th century war hero General Eric Osmundsun for rolling your own cigarettes. Osmundsun died in a freak kayak accident. As it ate him alive during his last campaign. It was pretty freaky." - icon = 'icons/obj/cigarettes.dmi' - icon_state = "cigpaperbook" - item_state = "cigpacket" - w_class = ITEM_SIZE_TINY - max_w_class = ITEM_SIZE_TINY - max_storage_space = 10 - throwforce = 2 - slot_flags = SLOT_BELT - startswith = list(/obj/item/paper/cig = 10) - can_hold = list( - /obj/item/paper/cig, - /obj/item/clothing/mask/smokable/cigarette, - /obj/item/storage/cigpaper/filters -) - -/obj/item/storage/cigpaper/fancy - name = "\improper Trident cigarette paper" - desc = "A fancy brand of Trident cigarette paper, for rolling your own cigarettes. Like a person who appreciates the finer things in life." - icon = 'icons/obj/cigarettes.dmi' - icon_state = "fancycigpaperbook" - startswith = list(/obj/item/paper/cig/fancy = 10) - -/obj/item/storage/cigpaper/filters - name = "box of cigarette filters" - desc = "A box of generic cigarette filters for those who rolls their own but prefers others to inhale the fumes. Not endorsed by Late General Osmundsun." - icon = 'icons/obj/cigarettes.dmi' - icon_state = "filterbin" - startswith = list(/obj/item/paper/cig/filter = 10) - -/obj/item/storage/chewables - name = "box of chewing wads master" - desc = "A generic brands of Waffle Co Wads, unflavored chews. Why do these exist?" - icon = 'icons/obj/cigarettes.dmi' - icon_state = "placeholder" - item_state = "cigpacket" - w_class = ITEM_SIZE_SMALL - max_w_class = ITEM_SIZE_TINY - max_storage_space = 6 - throwforce = 2 - slot_flags = SLOT_BELT - startswith = list(/obj/item/clothing/mask/chewable/tobacco = 6) - -//loose leaf -/obj/item/storage/chewables/rollable - name = "bag of tobacco" - max_storage_space = 10 - -/obj/item/storage/chewables/rollable/bad - name = "bag of Men at Arms tobacco" - desc = "A bag of coarse gritty tobacco marketed towards leather-necks." - startswith = list(/obj/item/reagent_containers/food/snacks/grown/dried_tobacco/bad = 8) - icon_state = "rollcoarse" - -/obj/item/storage/chewables/rollable/generic - name = "bag of BluSpace tobacco" - desc = "Decent quality tobacco for mid-income earners and long haul space sailors." - startswith = list(/obj/item/reagent_containers/food/snacks/grown/dried_tobacco = 8) - icon_state = "rollgeneric" - -/obj/item/storage/chewables/rollable/fine - name = "bag of Golden Sol tobacco" - desc = "A exclusive brand of overpriced tobacco, allegedly grown at a lagrange point station in Sol system." - startswith = list(/obj/item/reagent_containers/food/snacks/grown/dried_tobacco/fine = 8) - icon_state = "rollfine" - -/obj/item/storage/chewables/rollable/rollingkit - name = "bag of Crewman's First tobacco" - desc = "Generic middling quality tobacco for the recently enlisted and cost-conscious smokers. This bag comes with rolling papers and filters!" - startswith = list( - /obj/item/reagent_containers/food/snacks/grown/dried_tobacco = 8, - /obj/item/storage/cigpaper = 1, - /obj/item/storage/cigpaper/filters = 1 - ) - icon_state = "rollgeneric" - -//chewing tobacco -/obj/item/storage/chewables/tobacco - name = "tin of Lenny's brand chewing tobacco" - desc = "A generic brand of chewing tobacco, for when you can't even be assed to light up." - icon_state = "chew_levi" - item_state = "Dpacket" - startswith = list(/obj/item/clothing/mask/chewable/tobacco/lenni = 6) - -/obj/item/storage/chewables/tobacco2 - name = "tin of Red Lady chewing tobacco" - desc = "A finer grade of chewing tobacco." - icon_state = "chew_redman" - item_state = "redlady" - startswith = list(/obj/item/clothing/mask/chewable/tobacco/redlady = 6) - -/obj/item/storage/chewables/tobacco3 - name = "box of Nico-Tine gum" - desc = "A Sol-approved brand of nicotine gum. Cut out the middleman for your addiction fix." - icon_state = "chew_nico" - startswith = list(/obj/item/clothing/mask/chewable/tobacco/nico = 6) - -//non-tobacco -/obj/item/storage/chewables/candy/cookies - name = "pack of Getmore Cookies" - desc = "A pack of delicious cookies, and possibly the only product in Getmores Chocolate Corp lineup that has any trace of chocolate in it." - icon_state = "cookiebag" - max_storage_space = 6 - startswith = list(/obj/item/reagent_containers/food/snacks/cookie = 6) - -/obj/item/storage/chewables/candy/gum - name = "pack of Rainbo-Gums" - desc = "A mixed pack of delicious fruit flavored bubble-gums!" - icon_state = "gumpack" - max_storage_space = 8 - startswith = list(/obj/item/clothing/mask/chewable/candy/gum = 8) - -/obj/item/storage/chewables/candy/medicallollis - name = "pack of medicinal lollipops" - desc = "A mixed pack of medicinal flavored lollipops. These have no business being on store shelves." - icon_state = "lollipack" - max_storage_space = 20 - startswith = list(/obj/item/clothing/mask/chewable/candy/lolli/meds = 20) - -/obj/item/storage/medical_lolli_jar - name = "lollipops jar" - desc = "A mixed pack of flavored medicinal lollipops. Perfect for small boo-boos." - icon_state = "lollijar" - max_storage_space = 20 - startswith = list(/obj/item/clothing/mask/chewable/candy/lolli/weak_meds = 15) - -/obj/item/storage/medical_lolli_jar/on_update_icon() - . = ..() - if(contents.len) - icon_state = "lollijar" - else - icon_state = "lollijar_empty" diff --git a/code/game/objects/items/weapons/storage/mre.dm b/code/game/objects/items/weapons/storage/mre.dm deleted file mode 100644 index 6d8ddd80de0cb..0000000000000 --- a/code/game/objects/items/weapons/storage/mre.dm +++ /dev/null @@ -1,249 +0,0 @@ -/* -MRE Stuff - */ - -/obj/item/storage/mre - name = "MRE, Menu 1" - desc = "A vacuum-sealed bag containing a day's worth of nutrients for an adult in strenuous situations. There is no visible expiration date on the package." - icon = 'icons/obj/food.dmi' - icon_state = "mre" - storage_slots = 7 - max_w_class = ITEM_SIZE_SMALL - opened = FALSE - open_sound = 'sound/effects/rip1.ogg' - var/main_meal = /obj/item/storage/mrebag - var/meal_desc = "This one is menu 1, meat pizza." - startswith = list( - /obj/item/storage/mrebag/dessert, - /obj/item/storage/fancy/crackers, - /obj/random/mre/spread, - /obj/random/mre/drink, - /obj/item/reagent_containers/food/condiment/small/packet/capsaicin, - /obj/item/material/kitchen/utensil/fork/plastic - ) - -/obj/item/storage/mre/Initialize() - create_objects_in_loc(src, main_meal) - . = ..() - make_exact_fit() - -/obj/item/storage/mre/examine(mob/user) - . = ..() - to_chat(user, meal_desc) - -/obj/item/storage/mre/on_update_icon() - if(opened) - icon_state = "[initial(icon_state)][opened]" - . = ..() - -/obj/item/storage/mre/attack_self(mob/user) - open(user) - -/obj/item/storage/mre/open(mob/user) - if(!opened) - to_chat(usr, "You tear open the bag, breaking the vacuum seal.") - . = ..() - -/obj/item/storage/mre/menu2 - name = "MRE, Menu 2" - meal_desc = "This one is menu 2, margherita." - main_meal = /obj/item/storage/mrebag/menu2 - startswith = list( - /obj/item/storage/mrebag/dessert, - /obj/item/storage/fancy/crackers, - /obj/random/mre/spread, - /obj/random/mre/drink, - /obj/item/reagent_containers/food/condiment/small/packet/salt, - /obj/item/material/kitchen/utensil/fork/plastic - ) - -/obj/item/storage/mre/menu3 - name = "MRE, Menu 3" - meal_desc = "This one is menu 3, vegetable pizza." - main_meal = /obj/item/storage/mrebag/menu3 - startswith = list( - /obj/item/storage/mrebag/dessert, - /obj/item/storage/fancy/crackers, - /obj/random/mre/spread, - /obj/random/mre/drink, - /obj/item/reagent_containers/food/condiment/small/packet/pepper, - /obj/item/material/kitchen/utensil/fork/plastic - ) - -/obj/item/storage/mre/menu4 - name = "MRE, Menu 4" - meal_desc = "This one is menu 4, hamburger." - main_meal = /obj/item/storage/mrebag/menu4 - startswith = list( - /obj/item/storage/mrebag/dessert, - /obj/item/storage/fancy/crackers, - /obj/random/mre/spread, - /obj/random/mre/drink, - /obj/item/reagent_containers/food/condiment/small/packet/mayo, - /obj/item/material/kitchen/utensil/spork/plastic - ) - -/obj/item/storage/mre/menu5 - name = "MRE, Menu 5" - meal_desc = "This one is menu 5, taco." - main_meal = /obj/item/storage/mrebag/menu5 - startswith = list( - /obj/item/storage/mrebag/dessert, - /obj/item/storage/fancy/crackers, - /obj/random/mre/spread, - /obj/random/mre/drink, - /obj/item/reagent_containers/food/condiment/small/packet/ketchup, - /obj/item/material/kitchen/utensil/spork/plastic - ) - -/obj/item/storage/mre/menu6 - name = "MRE, Menu 6" - meal_desc = "This one is menu 6, meatbread." - main_meal = /obj/item/storage/mrebag/menu6 - startswith = list( - /obj/item/storage/mrebag/dessert, - /obj/item/storage/fancy/crackers, - /obj/random/mre/spread, - /obj/random/mre/drink, - /obj/random/mre/sauce/sugarfree, - /obj/item/material/kitchen/utensil/fork/plastic - ) - -/obj/item/storage/mre/menu7 - name = "MRE, Menu 7" - meal_desc = "This one is menu 7, salad." - main_meal = /obj/item/storage/mrebag/menu7 - startswith = list( - /obj/item/storage/mrebag/dessert, - /obj/item/storage/fancy/crackers, - /obj/random/mre/spread, - /obj/random/mre/drink, - /obj/item/reagent_containers/food/condiment/small/packet/soy, - /obj/item/material/kitchen/utensil/spoon/plastic - ) - -/obj/item/storage/mre/menu8 - name = "MRE, Menu 8" - meal_desc = " This one is menu 8, hot chili." - main_meal = /obj/item/storage/mrebag/menu8 - startswith = list( - /obj/item/storage/mrebag/dessert, - /obj/item/storage/fancy/crackers, - /obj/random/mre/spread, - /obj/random/mre/drink, - /obj/item/reagent_containers/food/condiment/small/packet/capsaicin, - /obj/item/material/kitchen/utensil/spoon/plastic - ) - -/obj/item/storage/mre/menu9 - name = "vegan MRE" - meal_desc = "This one is menu 9, boiled rice (skrell-safe)." - icon_state = "vegmre" - main_meal = /obj/item/storage/mrebag/menu9 - startswith = list( - /obj/item/storage/mrebag/dessert/menu9, - /obj/item/storage/fancy/crackers, - /obj/random/mre/spread/vegan, - /obj/random/mre/drink, - /obj/item/reagent_containers/food/condiment/small/packet/soy, - /obj/item/material/kitchen/utensil/spoon/plastic - ) - -/obj/item/storage/mre/menu10 - name = "protein MRE" - meal_desc = "This one is menu 10, protein." - icon_state = "meatmre" - main_meal = /obj/item/storage/mrebag/menu10 - startswith = list( - /obj/item/reagent_containers/food/snacks/proteinbar, - /obj/item/reagent_containers/food/condiment/small/packet/protein, - /obj/random/mre/sauce/sugarfree, - /obj/item/material/kitchen/utensil/fork/plastic - ) - -/obj/item/storage/mre/menu11 - name = "crayon MRE" - meal_desc = "This one doesn't have a menu listing. How very odd." - icon_state = "crayonmre" - main_meal = /obj/item/storage/fancy/crayons - startswith = list( - /obj/item/storage/mrebag/dessert/menu11, - /obj/random/mre/sauce/crayon, - /obj/random/mre/sauce/crayon, - /obj/random/mre/sauce/crayon - ) - -/obj/item/storage/mre/menu11/special - meal_desc = "This one doesn't have a menu listing. How odd. It has the initials \"A.B.\" written on the back." - -/obj/item/storage/mre/random - meal_desc = "The menu label is faded out." - main_meal = /obj/random/mre/main - -/obj/item/storage/mrebag - name = "main course" - desc = "A vacuum-sealed bag containing the MRE's main course. Self-heats when opened." - icon = 'icons/obj/food.dmi' - icon_state = "pouch_medium" - storage_slots = 1 - w_class = ITEM_SIZE_SMALL - max_w_class = ITEM_SIZE_SMALL - opened = FALSE - open_sound = 'sound/effects/bubbles.ogg' - startswith = list(/obj/item/reagent_containers/food/snacks/slice/meatpizza/filled) - -/obj/item/storage/mrebag/Initialize() - . = ..() - -/obj/item/storage/mrebag/on_update_icon() - if(opened) - icon_state = "[initial(icon_state)][opened]" - . = ..() - -/obj/item/storage/mrebag/attack_self(mob/user) - open(user) - -/obj/item/storage/mrebag/open(mob/user) - if(!opened) - to_chat(usr, "The pouch heats up as you break the vaccum seal.") - . = ..() - -/obj/item/storage/mrebag/menu2 - startswith = list(/obj/item/reagent_containers/food/snacks/slice/margherita/filled) - -/obj/item/storage/mrebag/menu3 - startswith = list(/obj/item/reagent_containers/food/snacks/slice/vegetablepizza/filled) - -/obj/item/storage/mrebag/menu4 - startswith = list(/obj/item/reagent_containers/food/snacks/hamburger) - -/obj/item/storage/mrebag/menu5 - startswith = list(/obj/item/reagent_containers/food/snacks/taco) - -/obj/item/storage/mrebag/menu6 - startswith = list(/obj/item/reagent_containers/food/snacks/slice/meatbread/filled) - -/obj/item/storage/mrebag/menu7 - startswith = list(/obj/item/reagent_containers/food/snacks/tossedsalad) - -/obj/item/storage/mrebag/menu8 - startswith = list(/obj/item/reagent_containers/food/snacks/hotchili) - -/obj/item/storage/mrebag/menu9 - startswith = list(/obj/item/reagent_containers/food/snacks/boiledrice) - -/obj/item/storage/mrebag/menu10 - startswith = list(/obj/item/reagent_containers/food/snacks/meatcube) - -/obj/item/storage/mrebag/dessert - name = "dessert" - desc = "A vacuum-sealed bag containing the MRE's dessert." - icon_state = "pouch_small" - open_sound = 'sound/effects/rip1.ogg' - startswith = list(/obj/random/mre/dessert) - -/obj/item/storage/mrebag/dessert/menu9 - startswith = list(/obj/item/reagent_containers/food/snacks/plumphelmetbiscuit) - -/obj/item/storage/mrebag/dessert/menu11 - startswith = list(/obj/item/pen/crayon/rainbow) diff --git a/code/game/objects/items/weapons/storage/secure.dm b/code/game/objects/items/weapons/storage/secure.dm deleted file mode 100644 index 4fa4aff834e24..0000000000000 --- a/code/game/objects/items/weapons/storage/secure.dm +++ /dev/null @@ -1,183 +0,0 @@ -/obj/item/storage/secure - name = "secstorage" - var/icon_locking = "secureb" - var/icon_sparking = "securespark" - var/icon_opened = "secure0" - var/locked = 1 - var/code = "" - var/l_code = null - var/l_set = 0 - var/l_setshort = 0 - var/l_hacking = 0 - var/emagged = FALSE - var/open = 0 - w_class = ITEM_SIZE_NORMAL - max_w_class = ITEM_SIZE_SMALL - max_storage_space = DEFAULT_BOX_STORAGE - - -/obj/item/storage/secure/attackby(obj/item/W, mob/user) - if (!locked) - return ..() - if (istype(W, /obj/item/melee/energy/blade) && emag_act(INFINITY, user, "You slice through the lock of \the [src]")) - var/datum/effect/effect/system/spark_spread/spark_system = new /datum/effect/effect/system/spark_spread() - spark_system.set_up(5, 0, loc) - spark_system.start() - playsound(loc, 'sound/weapons/blade1.ogg', 50, 1) - playsound(loc, "sparks", 50, 1) - return - if (isScrewdriver(W)) - if (do_after(user, 2 SECONDS, src, DO_PUBLIC_UNIQUE)) - open = ! open - user.show_message(text("You [] the service panel.", (src.open ? "open" : "close"))) - return - if (isMultitool(W) && (open == 1)&& (!l_hacking)) - user.show_message("Now attempting to reset internal memory, please hold.", 1) - l_hacking = 1 - if (do_after(usr, 10 SECONDS, src, DO_PUBLIC_UNIQUE)) - if (prob(40)) - l_setshort = 1 - l_set = 0 - user.show_message("Internal memory reset. Please give it a few seconds to reinitialize.", 1) - sleep(80) - l_setshort = 0 - l_hacking = 0 - else - user.show_message("Unable to reset internal memory.", 1) - l_hacking = 0 - else - l_hacking = 0 - - -/obj/item/storage/secure/MouseDrop(over_object, src_location, over_location) - if (locked) - add_fingerprint(usr) - return - ..() - - -/obj/item/storage/secure/attack_self(mob/user) - user.set_machine(src) - var/dat = text("[]
              \n\nLock Status: []",src, (locked ? "LOCKED" : "UNLOCKED")) - var/message = "Code" - if ((l_set == 0) && (!emagged) && (!l_setshort)) - dat += text("

              \n5-DIGIT PASSCODE NOT SET.
              ENTER NEW PASSCODE.
              ") - if (emagged) - dat += text("

              \nLOCKING SYSTEM ERROR - 1701") - if (l_setshort) - dat += text("

              \nALERT: MEMORY SYSTEM ERROR - 6040 201") - message = text("[]", src.code) - if (!locked) - message = "*****" - dat += text("


              \n>[]
              \n1-2-3
              \n4-5-6
              \n7-8-9
              \nR-0-E
              \n
              ", message, src, src, src, src, src, src, src, src, src, src, src, src) - show_browser(user, dat, "window=caselock;size=300x280") - - -/obj/item/storage/secure/Topic(href, href_list) - ..() - if ((usr.stat || usr.restrained()) || (get_dist(src, usr) > 1)) - return - if (href_list["type"]) - if (href_list["type"] == "E") - if ((l_set == 0) && (length(code) == 5) && (!l_setshort) && (code != "ERROR")) - l_code = code - l_set = 1 - else if ((code == l_code) && (!emagged) && (l_set == 1)) - locked = 0 - overlays.Cut() - overlays += image('icons/obj/storage.dmi', icon_opened) - code = null - else - code = "ERROR" - else - if ((href_list["type"] == "R") && (!emagged) && (!l_setshort)) - locked = 1 - overlays.Cut() - code = null - close(usr) - else - src.code += text("[]", href_list["type"]) - if (length(src.code) > 5) - src.code = "ERROR" - for (var/mob/M in viewers(1, loc)) - if ((M.client && M.machine == src)) - attack_self(M) - return - - -/obj/item/storage/secure/examine(mob/user, distance) - . = ..() - if(distance <= 1) - to_chat(user, text("The service panel is [src.open ? "open" : "closed"].")) - - -/obj/item/storage/secure/emag_act(var/remaining_charges, var/mob/user, var/feedback) - if (emagged) - return - emagged = TRUE - src.overlays += image('icons/obj/storage.dmi', icon_sparking) - sleep(6) - overlays.Cut() - overlays += image('icons/obj/storage.dmi', icon_locking) - locked = 0 - to_chat(user, (feedback ? feedback : "You short out the lock of \the [src].")) - return TRUE - - -/obj/item/storage/secure/briefcase - name = "secure briefcase" - icon = 'icons/obj/storage.dmi' - icon_state = "secure" - item_state = "sec-case" - desc = "A large briefcase with a digital locking system." - force = 8.0 - base_parry_chance = 15 - throw_speed = 1 - throw_range = 4 - w_class = ITEM_SIZE_HUGE - max_w_class = ITEM_SIZE_NORMAL - max_storage_space = DEFAULT_BACKPACK_STORAGE - use_sound = 'sound/effects/storage/briefcase.ogg' - - -/obj/item/storage/secure/briefcase/attack_hand(mob/user) - if ((loc == user) && (locked == 1)) - to_chat(usr, "[src] is locked and cannot be opened!") - else if ((loc == user) && (!locked)) - open(usr) - else - ..() - for(var/mob/M in range(1)) - if (M.s_active == src) - close(M) - add_fingerprint(user) - - -/obj/item/storage/secure/safe - name = "secure safe" - icon = 'icons/obj/storage.dmi' - icon_state = "safe" - icon_opened = "safe0" - icon_locking = "safeb" - icon_sparking = "safespark" - force = 8.0 - w_class = ITEM_SIZE_NO_CONTAINER - max_w_class = ITEM_SIZE_HUGE - max_storage_space = 56 - anchored = TRUE - density = FALSE - cant_hold = list(/obj/item/storage/secure/briefcase) - startswith = list( - /obj/item/paper = 1, - /obj/item/pen = 1 - ) - - -/obj/item/storage/secure/safe/attack_hand(mob/user) - return attack_self(user) - - -/obj/item/storage/secure/AltClick(/mob/user) - if (locked) - return - ..() diff --git a/code/game/objects/items/weapons/storage/specialized.dm b/code/game/objects/items/weapons/storage/specialized.dm deleted file mode 100644 index 11035b72a2708..0000000000000 --- a/code/game/objects/items/weapons/storage/specialized.dm +++ /dev/null @@ -1,139 +0,0 @@ -/obj/item/storage/ore - name = "mining satchel" - desc = "This sturdy bag can be used to store and transport ores." - icon = 'icons/obj/mining.dmi' - icon_state = "satchel" - slot_flags = SLOT_BELT - max_storage_space = 200 - max_w_class = ITEM_SIZE_NORMAL - w_class = ITEM_SIZE_LARGE - can_hold = list( - /obj/item/ore - ) - allow_quick_gather = TRUE - allow_quick_empty = TRUE - use_to_pickup = TRUE - - -/obj/item/storage/evidence - name = "evidence case" - desc = "A heavy steel case for storing evidence." - icon = 'icons/obj/forensics.dmi' - icon_state = "case" - max_storage_space = 100 - max_w_class = ITEM_SIZE_SMALL - w_class = ITEM_SIZE_NORMAL - can_hold = list( - /obj/item/sample, - /obj/item/evidencebag, - /obj/item/forensics, - /obj/item/photo, - /obj/item/paper, - /obj/item/paper_bundle - ) - allow_quick_gather = TRUE - allow_quick_empty = TRUE - use_to_pickup = TRUE - - -/obj/item/storage/plants - name = "botanical satchel" - desc = "This bag can be used to store all kinds of plant products and botanical specimen." - icon = 'icons/obj/hydroponics_machines.dmi' - icon_state = "plantbag" - slot_flags = SLOT_BELT - max_storage_space = 100 - max_w_class = ITEM_SIZE_NORMAL - w_class = ITEM_SIZE_NORMAL - can_hold = list( - /obj/item/reagent_containers/food/snacks/grown, - /obj/item/seeds - ) - allow_quick_gather = TRUE - allow_quick_empty = TRUE - use_to_pickup = TRUE - - -/obj/item/storage/sheetsnatcher - name = "sheet snatcher" - icon = 'icons/obj/mining.dmi' - icon_state = "sheetsnatcher" - desc = "A patented storage system designed for any kind of mineral sheet." - storage_ui = /datum/storage_ui/default/sheetsnatcher - w_class = ITEM_SIZE_NORMAL - storage_slots = 7 - use_to_pickup = TRUE - virtual = TRUE - var/max_sheets = 300 - var/cur_sheets = 0 - - -/obj/item/storage/sheetsnatcher/examine(mob/user, distance) - . = ..() - if (distance < 2) - to_chat(user, "It has a capacity of [max_sheets] sheets and current holds [cur_sheets].") - - -/obj/item/storage/sheetsnatcher/can_be_inserted(obj/item/stack/material/stack, mob/user, silent) - if (!istype(stack)) - if (!silent) - to_chat(user, SPAN_WARNING("The snatcher cannot hold \a [stack].")) - return FALSE - if (stack.amount > (max_sheets - cur_sheets)) - if (!silent) - to_chat(user, SPAN_WARNING("The snatcher cannot hold \a [stack].")) - return FALSE - return TRUE - - -/obj/item/storage/sheetsnatcher/handle_item_insertion(obj/item/stack/material/stack, silent) - if (!can_be_inserted(stack, null, silent)) - return FALSE - if (!usr?.unEquip(stack, src)) - return FALSE - cur_sheets += stack.amount - for (var/obj/item/stack/material/held as anything in contents) - if (stack.amount < 1) - break - if (held.type != stack.type) - continue - if (held.amount >= held.max_amount) - continue - var/free_space = held.max_amount - held.amount - if (free_space >= stack.amount) - held.amount += stack.amount - qdel(stack) - break - else - held.amount += free_space - stack.amount -= free_space - prepare_ui(usr) - update_icon() - return TRUE - - -/obj/item/storage/sheetsnatcher/attack_self(mob/user) - if (user.stat || !Adjacent(user) || user.restrained()) - to_chat(user, SPAN_WARNING("You're in no condition to do that with \the [src].")) - return FALSE - if (cur_sheets < 1) - to_chat(user, SPAN_WARNING("\The [src] is empty.")) - return FALSE - to_chat(user, SPAN_ITALIC("You empty out \the [src].")) - empty() - - -/obj/item/storage/sheetsnatcher/proc/empty() - var/turf/turf = get_turf(src) - if (!turf) - return - for(var/obj/item/stack/material/held as anything in contents) - held.forceMove(turf) - cur_sheets = 0 - update_icon() - - -/obj/item/storage/sheetsnatcher/borg - name = "sheet snatcher 9000" - desc = "" - max_sheets = 500 diff --git a/code/game/objects/items/weapons/storage/storage.dm b/code/game/objects/items/weapons/storage/storage.dm deleted file mode 100644 index 5d8ff1c66bd68..0000000000000 --- a/code/game/objects/items/weapons/storage/storage.dm +++ /dev/null @@ -1,499 +0,0 @@ -// To clarify: -// For use_to_pickup and allow_quick_gather functionality, -// see item/attackby() (/game/objects/items.dm) -// Do not remove this functionality without good reason, cough reagent_containers cough. -// -Sayu - - -/obj/item/storage - name = "storage" - icon = 'icons/obj/storage.dmi' - w_class = ITEM_SIZE_NORMAL - var/list/can_hold = new/list() //List of objects which this item can store (if set, it can't store anything else) - var/list/cant_hold = new/list() //List of objects which this item can't store (in effect only if can_hold isn't set) - - var/max_w_class = ITEM_SIZE_SMALL //Max size of objects that this object can store (in effect only if can_hold isn't set) - var/max_storage_space = null //Total storage cost of items this can hold. Will be autoset based on storage_slots if left null. - var/storage_slots = null //The number of storage slots in this container. - - var/use_to_pickup //Set this to make it possible to use this item in an inverse way, so you can have the item in your hand and click items on the floor to pick them up. - var/allow_quick_empty //Set this variable to allow the object to have the 'empty' verb, which dumps all the contents on the floor. - var/allow_quick_gather //Set this variable to allow the object to have the 'toggle mode' verb, which quickly collects all items from a tile. - ///Allows dumping the contents of storage after a duration - var/allow_slow_dump - var/collection_mode = 1; //0 = pick one at a time, 1 = pick all on tile - var/use_sound = "rustle" //sound played when used. null for no sound. - - ///If true, will not permit use of the storage UI - var/virtual - - //initializes the contents of the storage with some items based on an assoc list. The assoc key must be an item path, - //the assoc value can either be the quantity, or a list whose first value is the quantity and the rest are args. - var/list/startswith - var/datum/storage_ui/storage_ui = /datum/storage_ui/default - var/opened = null - var/open_sound = null - -/obj/item/storage/Destroy() - QDEL_NULL(storage_ui) - . = ..() - -/obj/item/storage/MouseDrop(obj/over_object as obj) - if(!canremove) - return - - if ((ishuman(usr) || isrobot(usr) || issmall(usr)) && !usr.incapacitated()) - if(over_object == usr && Adjacent(usr)) // this must come before the screen objects only block - src.add_fingerprint(usr) - src.open(usr) - return TRUE - - if (!( istype(over_object, /obj/screen) )) - return ..() - - //makes sure that the storage is equipped, so that we can't drag it into our hand from miles away. - if (!usr.contains(src)) - return - - src.add_fingerprint(usr) - if(usr.unEquip(src)) - switch(over_object.name) - if(BP_R_HAND) - usr.put_in_r_hand(src) - if(BP_L_HAND) - usr.put_in_l_hand(src) - -/obj/item/storage/AltClick(var/mob/usr) - - if(!canremove) - return - - if ((ishuman(usr) || isrobot(usr) || issmall(usr)) && !usr.incapacitated() && Adjacent(usr)) - src.add_fingerprint(usr) - src.open(usr) - return TRUE - -/obj/item/storage/proc/return_inv() - - var/list/L = list( ) - - L += src.contents - - for(var/obj/item/storage/S in src) - L += S.return_inv() - for(var/obj/item/gift/G in src) - L += G.gift - if (istype(G.gift, /obj/item/storage)) - L += G.gift:return_inv() - return L - -/obj/item/storage/proc/show_to(mob/user as mob) - if(storage_ui) - storage_ui.show_to(user) - -/obj/item/storage/proc/hide_from(mob/user as mob) - if(storage_ui) - storage_ui.hide_from(user) - -/obj/item/storage/proc/open(mob/user as mob) - if (virtual) - return - if(!opened) - playsound(src.loc, src.open_sound, 50, 0, -5) - opened = 1 - queue_icon_update() - if (src.use_sound) - playsound(src.loc, src.use_sound, 50, 0, -5) - if (isrobot(user) && user.hud_used) - var/mob/living/silicon/robot/robot = user - if(robot.shown_robot_modules) //The robot's inventory is open, need to close it first. - robot.hud_used.toggle_show_robot_modules() - - prepare_ui() - storage_ui.on_open(user) - storage_ui.show_to(user) - -/obj/item/storage/proc/prepare_ui() - storage_ui.prepare_ui() - -/obj/item/storage/proc/close(mob/user as mob) - hide_from(user) - if(storage_ui) - storage_ui.after_close(user) - -/obj/item/storage/proc/close_all() - if(storage_ui) - storage_ui.close_all() - -/obj/item/storage/proc/storage_space_used() - . = 0 - for(var/obj/item/I in contents) - . += I.get_storage_cost() - -//This proc return 1 if the item can be picked up and 0 if it can't. -//Set the stop_messages to stop it from printing messages -/obj/item/storage/proc/can_be_inserted(obj/item/W, mob/user, stop_messages = 0) - if(!istype(W)) return //Not an item - - if(user && !user.canUnEquip(W)) - return 0 - - if(src.loc == W) - return 0 //Means the item is already in the storage item - if(storage_slots != null && contents.len >= storage_slots) - if(!stop_messages) - to_chat(user, "\The [src] is full, make some space.") - return 0 //Storage item is full - - if(W.anchored) - return 0 - - if(length(can_hold)) - if(!is_type_in_list(W, can_hold)) - if(!stop_messages && ! istype(W, /obj/item/hand_labeler)) - to_chat(user, "\The [src] cannot hold \the [W].") - return 0 - var/max_instances = can_hold[W.type] - if(max_instances && instances_of_type_in_list(W, contents) >= max_instances) - if(!stop_messages && !istype(W, /obj/item/hand_labeler)) - to_chat(user, "\The [src] has no more space specifically for \the [W].") - return 0 - - //Bypassing storage procedures when not using help intent for labeler/forensic tools. - if((istype(W, /obj/item/hand_labeler) || istype(W, /obj/item/forensics)) && user.a_intent != I_HELP) - return FALSE - - // Don't allow insertion of unsafed compressed matter implants - // Since they are sucking something up now, their afterattack will delete the storage - if(istype(W, /obj/item/implanter/compressed)) - var/obj/item/implanter/compressed/impr = W - if(!impr.safe) - stop_messages = 1 - return 0 - - if(cant_hold.len && is_type_in_list(W, cant_hold)) - if(!stop_messages) - to_chat(user, "\The [src] cannot hold \the [W].") - return 0 - - if (max_w_class != null && W.w_class > max_w_class) - if(!stop_messages) - to_chat(user, "\The [W] is too big for this [src.name].") - return 0 - - var/total_storage_space = W.get_storage_cost() - if(total_storage_space == ITEM_SIZE_NO_CONTAINER) - if(!stop_messages) - to_chat(user, "\The [W] cannot be placed in [src].") - return 0 - - total_storage_space += storage_space_used() //Adds up the combined w_classes which will be in the storage item if the item is added to it. - if(total_storage_space > max_storage_space) - if(!stop_messages) - to_chat(user, "\The [src] is too full, make some space.") - return 0 - - return 1 - -//This proc handles items being inserted. It does not perform any checks of whether an item can or can't be inserted. That's done by can_be_inserted() -//The stop_warning parameter will stop the insertion message from being displayed. It is intended for cases where you are inserting multiple items at once, -//such as when picking up all the items on a tile with one click. -/obj/item/storage/proc/handle_item_insertion(var/obj/item/W, var/prevent_warning = 0, var/NoUpdate = 0) - if(!istype(W)) - return 0 - if(istype(W.loc, /mob)) - var/mob/M = W.loc - if(!M.unEquip(W)) - return - W.forceMove(src) - W.on_enter_storage(src) - if(usr) - add_fingerprint(usr) - - if(!prevent_warning) - for(var/mob/M in viewers(usr, null)) - if (M == usr) - to_chat(usr, "You put \the [W] into [src].") - else if (M in range(1, src)) //If someone is standing close enough, they can tell what it is... TODO replace with distance check - M.show_message("\The [usr] puts [W] into [src].", VISIBLE_MESSAGE) - else if (W && W.w_class >= ITEM_SIZE_NORMAL) //Otherwise they can only see large or normal items from a distance... - M.show_message("\The [usr] puts [W] into [src].", VISIBLE_MESSAGE) - - if(!NoUpdate) - update_ui_after_item_insertion() - update_icon() - return 1 - -/obj/item/storage/proc/update_ui_after_item_insertion() - prepare_ui() - if(storage_ui) - storage_ui.on_insertion(usr) - -/obj/item/storage/proc/update_ui_after_item_removal() - prepare_ui() - if(storage_ui) - storage_ui.on_post_remove(usr) - -//Call this proc to handle the removal of an item from the storage item. The item will be moved to the atom sent as new_target -/obj/item/storage/proc/remove_from_storage(obj/item/W as obj, atom/new_location, var/NoUpdate = 0) - if(!istype(W)) return 0 - new_location = new_location || get_turf(src) - - if(storage_ui) - storage_ui.on_pre_remove(usr, W) - - if(ismob(loc)) - W.dropped(usr) - if(ismob(new_location)) - W.hud_layerise() - else - W.reset_plane_and_layer() - W.forceMove(new_location) - - if(usr && !NoUpdate) - update_ui_after_item_removal() - if(W.maptext) - W.maptext = "" - W.on_exit_storage(src) - if(!NoUpdate) - update_icon() - return 1 - -// Only do ui functions for now; the obj is responsible for anything else. -/obj/item/storage/proc/on_item_pre_deletion(obj/item/W) - if(storage_ui) - storage_ui.on_pre_remove(null, W) // Supposed to be able to handle null user. - -// Only do ui functions for now; the obj is responsible for anything else. -/obj/item/storage/proc/on_item_post_deletion(obj/item/W) - if(storage_ui) - update_ui_after_item_removal() - queue_icon_update() - -//Run once after using remove_from_storage with NoUpdate = 1 -/obj/item/storage/proc/finish_bulk_removal() - update_ui_after_item_removal() - update_icon() - -//This proc is called when you want to place an item into the storage item. -/obj/item/storage/attackby(obj/item/W as obj, mob/user as mob) - . = ..() - if (.) //if the item was used as a crafting component, just return - return - - if(isrobot(user) && (W == user.get_active_hand())) - return //Robots can't store their modules. - - if(!can_be_inserted(W, user)) - return - - W.add_fingerprint(user) - return handle_item_insertion(W) - -/obj/item/storage/attack_hand(mob/user as mob) - if(ishuman(user)) - var/mob/living/carbon/human/H = user - if(H.l_store == src && !H.get_active_hand()) //Prevents opening if it's in a pocket. - H.put_in_hands(src) - H.l_store = null - return - if(H.r_store == src && !H.get_active_hand()) - H.put_in_hands(src) - H.r_store = null - return - - if (src.loc == user) - src.open(user) - else - ..() - if (storage_ui) - storage_ui.on_hand_attack(user) - src.add_fingerprint(user) - return - -/obj/item/storage/proc/gather_all(var/turf/T, var/mob/user) - var/success = 0 - var/failure = 0 - - for(var/obj/item/I in T) - if(!can_be_inserted(I, user, 0)) // Note can_be_inserted still makes noise when the answer is no - failure = 1 - continue - success = 1 - handle_item_insertion(I, 1, 1) // First 1 is no messages, second 1 is no ui updates - if(success && !failure) - to_chat(user, "You put everything into \the [src].") - update_ui_after_item_insertion() - else if(success) - to_chat(user, "You put some things into \the [src].") - update_ui_after_item_insertion() - else - to_chat(user, "You fail to pick anything up with \the [src].") - -/obj/item/storage/verb/toggle_gathering_mode() - set name = "Switch Gathering Method" - set category = "Object" - - collection_mode = !collection_mode - switch (collection_mode) - if(1) - to_chat(usr, "\The [src] now picks up all items in a tile at once.") - if(0) - to_chat(usr, "\The [src] now picks up one item at a time.") - -/obj/item/storage/verb/quick_empty() - set name = "Empty Contents" - set category = "Object" - - if((!ishuman(usr) && (src.loc != usr)) || usr.stat || usr.restrained()) - return - - var/turf/T = get_turf(src) - hide_from(usr) - for(var/obj/item/I in contents) - remove_from_storage(I, T, 1) - finish_bulk_removal() - -/obj/item/storage/verb/dump_contents() - set name = "Dump Contents" - set category = "Object" - - if ((!ishuman(usr) && (loc != usr)) || usr.stat || usr.restrained()) - return - - if ((src == usr.l_hand && usr.r_hand == null) || (src == usr.r_hand && usr.l_hand == null)) - if (contents.len == 0) - to_chat(usr, SPAN_WARNING("\The [src] is already empty.")) - return - - var/turf/T = get_turf(src) - hide_from(usr) - usr.visible_message(SPAN_NOTICE("\The [usr] starts dumping out the contents of \the [src]."), SPAN_NOTICE("You begin dumping out the contents of \the [src].")) - if (do_after(usr, max(3 SECONDS, 1 SECONDS * contents.len), src, DO_PUBLIC_UNIQUE)) - for(var/obj/item/I in contents) - remove_from_storage(I, T, 1) - finish_bulk_removal() - playsound(loc, use_sound, 50, 0, -5) - usr.visible_message(SPAN_WARNING("\The [usr] dumps out the contents of \the [src]!"), SPAN_WARNING("You dump out the contents of \the [src]!")) - - else - to_chat(usr, SPAN_WARNING("You need to be holding \the [src] and have an empty hand to dump its contents!")) - -/obj/item/storage/Initialize() - . = ..() - if(allow_quick_empty) - verbs += /obj/item/storage/verb/quick_empty - else - verbs -= /obj/item/storage/verb/quick_empty - - if(allow_quick_gather) - verbs += /obj/item/storage/verb/toggle_gathering_mode - else - verbs -= /obj/item/storage/verb/toggle_gathering_mode - - if (allow_slow_dump) - verbs += /obj/item/storage/verb/dump_contents - else - verbs -= /obj/item/storage/verb/dump_contents - - if(isnull(max_storage_space) && !isnull(storage_slots)) - max_storage_space = storage_slots*BASE_STORAGE_COST(max_w_class) - - storage_ui = new storage_ui(src) - prepare_ui() - - if(startswith) - for(var/item_path in startswith) - var/list/data = startswith[item_path] - if(islist(data)) - var/qty = data[1] - var/list/argsl = data.Copy() - argsl[1] = src - for(var/i in 1 to qty) - new item_path(arglist(argsl)) - else - for(var/i in 1 to (isnull(data)? 1 : data)) - new item_path(src) - update_icon() - -/obj/item/storage/get_mechanics_info() - . = ..() - - if (allow_slow_dump) - . += "

              The contents of \the [src] can be dumped out onto the ground. \ - Dumping the contents requires you to stand still briefly, but will then place all the items within \the [src] onto the ground where you're standing. \ - It can be slower than removing a few items manually, however can be convenient if there are a large quantity of items that may be tedious to remove.

              \ -

              To dump out \the [src]:

              \ -
                \ -
              1. Equip \the [src] in one of your hands, while having your other hand remain empty.
              2. \ -
              3. Activate \the [src] by clicking it or using the hotkey in your active hand on HARM intent, or selecting the verb from \the [src]'s right-click menu or Object tab.
              4. \ -
              5. Remain still for a short warm-up, which scales with the amount of items within \the [src].
              6. \ -
              " - -/obj/item/storage/emp_act(severity) - if(!istype(src.loc, /mob/living)) - for(var/obj/O in contents) - O.emp_act(severity) - ..() - -/obj/item/storage/attack_self(mob/user as mob) - //Clicking on itself will empty it, if it has the verb to do that. - if(user.get_active_hand() == src) - if(src.verbs.Find(/obj/item/storage/verb/quick_empty)) - src.quick_empty() - return 1 - - if (verbs.Find(/obj/item/storage/verb/dump_contents) && user.a_intent == I_HURT) - dump_contents() - return 1 - -/obj/item/storage/proc/make_exact_fit() - storage_slots = contents.len - - can_hold.Cut() - max_w_class = 0 - max_storage_space = 0 - for(var/obj/item/I in src) - can_hold[I.type]++ - max_w_class = max(I.w_class, max_w_class) - max_storage_space += I.get_storage_cost() - -//Returns the storage depth of an atom. This is the number of storage items the atom is contained in before reaching toplevel (the area). -//Returns -1 if the atom was not found on container. -/atom/proc/storage_depth(atom/container) - var/depth = 0 - var/atom/cur_atom = src - - while (cur_atom && !(cur_atom in container.contents)) - if (isarea(cur_atom)) - return -1 - if (istype(cur_atom.loc, /obj/item/storage)) - depth++ - cur_atom = cur_atom.loc - - if (!cur_atom) - return -1 //inside something with a null loc. - - return depth - -//Like storage depth, but returns the depth to the nearest turf -//Returns -1 if no top level turf (a loc was null somewhere, or a non-turf atom's loc was an area somehow). -/atom/proc/storage_depth_turf() - var/depth = 0 - var/atom/cur_atom = src - - while (cur_atom && !isturf(cur_atom)) - if (isarea(cur_atom)) - return -1 - if (istype(cur_atom.loc, /obj/item/storage)) - depth++ - cur_atom = cur_atom.loc - - if (!cur_atom) - return -1 //inside something with a null loc. - - return depth - -/obj/item/proc/get_storage_cost() - //If you want to prevent stuff above a certain w_class from being stored, use max_w_class - return BASE_STORAGE_COST(w_class) diff --git a/code/game/objects/items/weapons/storage/storage_ui/default.dm b/code/game/objects/items/weapons/storage/storage_ui/default.dm deleted file mode 100644 index 7166d3957a857..0000000000000 --- a/code/game/objects/items/weapons/storage/storage_ui/default.dm +++ /dev/null @@ -1,244 +0,0 @@ -/datum/storage_ui/default - var/list/is_seeing = new/list() //List of mobs which are currently seeing the contents of this item's storage - - var/obj/screen/storage/boxes - var/obj/screen/storage/storage_start //storage UI - var/obj/screen/storage/storage_continue - var/obj/screen/storage/storage_end - var/obj/screen/storage/stored_start - var/obj/screen/storage/stored_continue - var/obj/screen/storage/stored_end - var/obj/screen/close/closer - -/datum/storage_ui/default/New(var/storage) - ..() - boxes = new /obj/screen/storage( ) - boxes.SetName("storage") - boxes.master = storage - boxes.icon_state = "block" - boxes.screen_loc = "7,7 to 10,8" - boxes.layer = HUD_BASE_LAYER - - storage_start = new /obj/screen/storage( ) - storage_start.SetName("storage") - storage_start.master = storage - storage_start.icon_state = "storage_start" - storage_start.screen_loc = "7,7 to 10,8" - storage_start.layer = HUD_BASE_LAYER - storage_continue = new /obj/screen/storage( ) - storage_continue.SetName("storage") - storage_continue.master = storage - storage_continue.icon_state = "storage_continue" - storage_continue.screen_loc = "7,7 to 10,8" - storage_continue.layer = HUD_BASE_LAYER - storage_end = new /obj/screen/storage( ) - storage_end.SetName("storage") - storage_end.master = storage - storage_end.icon_state = "storage_end" - storage_end.screen_loc = "7,7 to 10,8" - storage_end.layer = HUD_BASE_LAYER - - stored_start = new /obj //we just need these to hold the icon - stored_start.icon_state = "stored_start" - stored_start.layer = HUD_BASE_LAYER - stored_continue = new /obj - stored_continue.icon_state = "stored_continue" - stored_continue.layer = HUD_BASE_LAYER - stored_end = new /obj - stored_end.icon_state = "stored_end" - stored_end.layer = HUD_BASE_LAYER - - closer = new /obj/screen/close( ) - closer.master = storage - closer.icon_state = "x" - closer.layer = HUD_BASE_LAYER - -/datum/storage_ui/default/Destroy() - close_all() - QDEL_NULL(boxes) - QDEL_NULL(storage_start) - QDEL_NULL(storage_continue) - QDEL_NULL(storage_end) - QDEL_NULL(stored_start) - QDEL_NULL(stored_continue) - QDEL_NULL(stored_end) - QDEL_NULL(closer) - . = ..() - -/datum/storage_ui/default/on_open(var/mob/user) - if (user.s_active) - user.s_active.close(user) - -/datum/storage_ui/default/after_close(var/mob/user) - user.s_active = null - -/datum/storage_ui/default/on_insertion(var/mob/user) - if(user.s_active) - user.s_active.show_to(user) - -/datum/storage_ui/default/on_pre_remove(var/mob/user, var/obj/item/W) - for(var/mob/M in range(1, storage.loc)) - if (M.s_active == storage) - if (M.client) - M.client.screen -= W - -/datum/storage_ui/default/on_post_remove(var/mob/user) - if(user?.s_active) - user.s_active.show_to(user) - -/datum/storage_ui/default/on_hand_attack(var/mob/user) - for(var/mob/M in range(1)) - if (M.s_active == storage) - storage.close(M) - -/datum/storage_ui/default/show_to(var/mob/user) - if(!user.client) return - if(user.s_active != storage) - for(var/obj/item/I in storage) - if(I.on_found(user)) - return - if(user.s_active) - user.s_active.hide_from(user) - user.client.screen -= boxes - user.client.screen -= storage_start - user.client.screen -= storage_continue - user.client.screen -= storage_end - user.client.screen -= closer - user.client.screen -= storage.contents - user.client.screen += closer - user.client.screen += storage.contents - if(storage.storage_slots) - user.client.screen += boxes - else - user.client.screen += storage_start - user.client.screen += storage_continue - user.client.screen += storage_end - is_seeing |= user - user.s_active = storage - -/datum/storage_ui/default/hide_from(var/mob/user) - is_seeing -= user - if(!user.client) - return - user.client.screen -= boxes - user.client.screen -= storage_start - user.client.screen -= storage_continue - user.client.screen -= storage_end - user.client.screen -= closer - user.client.screen -= storage.contents - if(user.s_active == storage) - user.s_active = null - -//Creates the storage UI -/datum/storage_ui/default/prepare_ui() - //if storage slots is null then use the storage space UI, otherwise use the slots UI - if(storage.storage_slots == null) - space_orient_objs() - else - slot_orient_objs() - -/datum/storage_ui/default/close_all() - for(var/mob/M in can_see_contents()) - storage.close(M) - . = 1 - -/datum/storage_ui/default/proc/can_see_contents() - var/list/cansee = list() - for(var/mob/M in is_seeing) - if(M.s_active == storage && M.client) - cansee |= M - else - is_seeing -= M - return cansee - -//This proc draws out the inventory and places the items on it. tx and ty are the upper left tile and mx, my are the bottm right. -//The numbers are calculated from the bottom-left The bottom-left slot being 1,1. -/datum/storage_ui/default/proc/orient_objs(tx, ty, mx, my) - var/cx = tx - var/cy = ty - boxes.screen_loc = "[tx]:,[ty] to [mx],[my]" - for(var/obj/O in storage.contents) - O.screen_loc = "[cx],[cy]" - O.hud_layerise() - cx++ - if (cx > mx) - cx = tx - cy-- - closer.screen_loc = "[mx+1],[my]" - return - -//This proc determins the size of the inventory to be displayed. Please touch it only if you know what you're doing. -/datum/storage_ui/default/proc/slot_orient_objs() - var/adjusted_contents = storage.contents.len - var/row_num = 0 - var/col_count = min(7,storage.storage_slots) -1 - if (adjusted_contents > 7) - row_num = round((adjusted_contents-1) / 7) // 7 is the maximum allowed width. - arrange_item_slots(row_num, col_count) - -//This proc draws out the inventory and places the items on it. It uses the standard position. -/datum/storage_ui/default/proc/arrange_item_slots(var/rows, var/cols) - var/cx = 4 - var/cy = 2+rows - boxes.screen_loc = "4:16,2:16 to [4+cols]:16,[2+rows]:16" - - for(var/obj/O in storage.contents) - O.screen_loc = "[cx]:16,[cy]:16" - O.maptext = "" - O.hud_layerise() - cx++ - if (cx > (4+cols)) - cx = 4 - cy-- - - closer.screen_loc = "[4+cols+1]:16,2:16" - -/datum/storage_ui/default/proc/space_orient_objs() - - var/baseline_max_storage_space = DEFAULT_BOX_STORAGE //storage size corresponding to 224 pixels - var/storage_cap_width = 2 //length of sprite for start and end of the box representing total storage space - var/stored_cap_width = 4 //length of sprite for start and end of the box representing the stored item - var/storage_width = min( round( 224 * storage.max_storage_space/baseline_max_storage_space ,1) ,284) //length of sprite for the box representing total storage space - - storage_start.overlays.Cut() - - storage_continue.SetTransform(scale_x = (storage_width - storage_cap_width * 2 + 3) / 32) - - storage_start.screen_loc = "4:16,2:16" - storage_continue.screen_loc = "4:[storage_cap_width+(storage_width-storage_cap_width*2)/2+2],2:16" - storage_end.screen_loc = "4:[19+storage_width-storage_cap_width],2:16" - - var/startpoint = 0 - var/endpoint = 1 - - for(var/obj/item/O in storage.contents) - startpoint = endpoint + 1 - endpoint += storage_width * O.get_storage_cost()/storage.max_storage_space - stored_start.SetTransform(offset_x = startpoint) - stored_end.SetTransform(offset_x = endpoint - stored_cap_width) - stored_continue.SetTransform( - offset_x = startpoint + stored_cap_width + (endpoint - startpoint - stored_cap_width * 2) / 2 - 16, - scale_x = (endpoint - startpoint - stored_cap_width * 2) / 32 - ) - storage_start.overlays += stored_start - storage_start.overlays += stored_continue - storage_start.overlays += stored_end - - O.screen_loc = "4:[round((startpoint+endpoint)/2)+2],2:16" - O.maptext = "" - O.hud_layerise() - - closer.screen_loc = "4:[storage_width+19],2:16" - -// Sets up numbered display to show the stack size of each stored mineral -// NOTE: numbered display is turned off currently because it's broken -/datum/storage_ui/default/sheetsnatcher/prepare_ui(var/mob/user) - var/adjusted_contents = storage.contents.len - - var/row_num = 0 - var/col_count = min(7,storage.storage_slots) -1 - if (adjusted_contents > 7) - row_num = round((adjusted_contents-1) / 7) // 7 is the maximum allowed width. - arrange_item_slots(row_num, col_count) - if(user && user.s_active) - user.s_active.show_to(user) diff --git a/code/game/objects/items/weapons/storage/storage_ui/storage_ui.dm b/code/game/objects/items/weapons/storage/storage_ui/storage_ui.dm deleted file mode 100644 index 44fce6ca5e016..0000000000000 --- a/code/game/objects/items/weapons/storage/storage_ui/storage_ui.dm +++ /dev/null @@ -1,40 +0,0 @@ -/datum/storage_ui - var/obj/item/storage/storage - -/datum/storage_ui/New(var/storage) - src.storage = storage - ..() - -/datum/storage_ui/Destroy() - storage = null - . = ..() - -/datum/storage_ui/proc/show_to(var/mob/user) - return - -/datum/storage_ui/proc/hide_from(var/mob/user) - return - -/datum/storage_ui/proc/prepare_ui() - return - -/datum/storage_ui/proc/close_all() - return - -/datum/storage_ui/proc/on_open(var/mob/user) - return - -/datum/storage_ui/proc/after_close(var/mob/user) - return - -/datum/storage_ui/proc/on_insertion(var/mob/user) - return - -/datum/storage_ui/proc/on_pre_remove(var/mob/user, var/obj/item/W) - return - -/datum/storage_ui/proc/on_post_remove(var/mob/user, var/obj/item/W) - return - -/datum/storage_ui/proc/on_hand_attack(var/mob/user) - return diff --git a/code/game/objects/items/weapons/storage/toolbox.dm b/code/game/objects/items/weapons/storage/toolbox.dm deleted file mode 100644 index b03e5ef3516eb..0000000000000 --- a/code/game/objects/items/weapons/storage/toolbox.dm +++ /dev/null @@ -1,71 +0,0 @@ -/obj/item/storage/toolbox - name = "toolbox" - desc = "Bright red toolboxes like these are one of the most common sights in maintenance corridors on virtually every ship in the galaxy." - icon = 'icons/obj/storage.dmi' - icon_state = "red" - item_state = "toolbox_red" - obj_flags = OBJ_FLAG_CONDUCTIBLE - force = 20 - attack_cooldown = 21 - melee_accuracy_bonus = -15 - throwforce = 10 - throw_speed = 1 - throw_range = 7 - base_parry_chance = 15 - w_class = ITEM_SIZE_LARGE - max_w_class = ITEM_SIZE_NORMAL - max_storage_space = DEFAULT_LARGEBOX_STORAGE //enough to hold all starting contents - origin_tech = list(TECH_COMBAT = 1) - attack_verb = list("robusted") - use_sound = 'sound/effects/storage/toolbox.ogg' - matter = list(MATERIAL_STEEL = 5000) - allow_slow_dump = TRUE - -/obj/item/storage/toolbox/emergency - name = "emergency toolbox" - startswith = list( - /obj/item/crowbar/red, - /obj/item/extinguisher/mini, - /obj/item/device/radio, - /obj/item/weldingtool/mini, - /obj/item/welder_tank/mini - ) - -/obj/item/storage/toolbox/emergency/Initialize() - . = ..() - var/item = pick(list(/obj/item/device/flashlight, /obj/item/device/flashlight/flare, /obj/item/device/flashlight/flare/glowstick/red)) - new item(src) - - -/obj/item/storage/toolbox/mechanical - name = "mechanical toolbox" - desc = "Bright blue toolboxes like these are one of the most common sights in maintenance corridors on virtually every ship in the galaxy." - icon_state = "blue" - item_state = "toolbox_blue" - startswith = list(/obj/item/screwdriver, /obj/item/wrench, /obj/item/weldingtool, /obj/item/crowbar, /obj/item/device/scanner/gas, /obj/item/wirecutters) - -/obj/item/storage/toolbox/electrical - name = "electrical toolbox" - desc = "Bright yellow toolboxes like these are one of the most common sights in maintenance corridors on virtually every ship in the galaxy." - icon_state = "yellow" - item_state = "toolbox_yellow" - startswith = list(/obj/item/screwdriver, /obj/item/wirecutters, /obj/item/device/t_scanner, /obj/item/crowbar) - -/obj/item/storage/toolbox/electrical/Initialize() - . = ..() - new /obj/item/stack/cable_coil/random(src,30) - new /obj/item/stack/cable_coil/random(src,30) - if(prob(5)) - new /obj/item/clothing/gloves/insulated(src) - else - new /obj/item/stack/cable_coil/random(src,30) - -/obj/item/storage/toolbox/syndicate - name = "black and red toolbox" - desc = "A toolbox in black, with stylish red trim. This one feels particularly heavy, yet balanced." - icon_state = "syndicate" - item_state = "toolbox_syndi" - origin_tech = list(TECH_COMBAT = 1, TECH_ESOTERIC = 1) - attack_cooldown = 10 - base_parry_chance = 30 - startswith = list(/obj/item/clothing/gloves/insulated, /obj/item/screwdriver, /obj/item/wrench, /obj/item/weldingtool, /obj/item/crowbar, /obj/item/wirecutters, /obj/item/device/multitool) diff --git a/code/game/objects/items/weapons/storage/uplink_kits.dm b/code/game/objects/items/weapons/storage/uplink_kits.dm deleted file mode 100644 index 947a746b5a5f2..0000000000000 --- a/code/game/objects/items/weapons/storage/uplink_kits.dm +++ /dev/null @@ -1,186 +0,0 @@ -/obj/item/storage/box/syndie_kit - name = "box" - desc = "A sleek, sturdy box." - icon_state = "box_of_doom" - -//For uplink kits that provide bulkier items -/obj/item/storage/backpack/satchel/syndie_kit - desc = "A sleek, sturdy satchel." - icon_state = "satchel-norm" - -//In case an uplink kit provides a lot of gear -/obj/item/storage/backpack/dufflebag/syndie_kit - name = "black dufflebag" - desc = "A sleek, sturdy dufflebag." - icon_state = "duffle_syndie" - -/obj/item/storage/box/syndie_kit/imp_freedom - startswith = list(/obj/item/implanter/freedom) - -/obj/item/storage/box/syndie_kit/imp_uplink - startswith = list(/obj/item/implanter/uplink) - -/obj/item/storage/box/syndie_kit/imp_compress - startswith = list(/obj/item/implanter/compressed) - -/obj/item/storage/box/syndie_kit/imp_explosive - startswith = list( - /obj/item/implanter/explosive, - /obj/item/implantpad - ) - -/obj/item/storage/box/syndie_kit/imp_imprinting - startswith = list( - /obj/item/implanter/imprinting, - /obj/item/implantpad, - /obj/item/reagent_containers/hypospray/autoinjector/mindbreaker - ) - -/obj/item/storage/box/syndie_kit/shuriken - startswith = list( - /obj/item/material/star/ninja, - /obj/item/material/star/ninja, - /obj/item/material/star/ninja, - /obj/item/material/star/ninja, - /obj/item/material/star/ninja, - /obj/item/material/star/ninja, - ) - -// Space suit uplink kit -/obj/item/storage/backpack/satchel/syndie_kit/space - //name = "\improper EVA gear pack" - - startswith = list( - /obj/item/clothing/suit/space/void/merc, - /obj/item/clothing/head/helmet/space/void/merc, - /obj/item/clothing/mask/gas/syndicate, - /obj/item/tank/oxygen_emergency_double, - ) - -// Chameleon uplink kit -/obj/item/storage/backpack/chameleon/sydie_kit - startswith = list( - /obj/item/clothing/under/chameleon, - /obj/item/clothing/suit/chameleon, - /obj/item/clothing/shoes/chameleon, - /obj/item/clothing/head/chameleon, - /obj/item/clothing/mask/chameleon, - /obj/item/storage/box/syndie_kit/chameleon, - /obj/item/gun/energy/chameleon, - ) - -/obj/item/storage/box/syndie_kit/chameleon - startswith = list( - /obj/item/clothing/gloves/chameleon, - /obj/item/clothing/glasses/chameleon, - /obj/item/device/radio/headset/chameleon, - /obj/item/clothing/accessory/chameleon, - /obj/item/clothing/accessory/chameleon, - /obj/item/clothing/accessory/chameleon - ) - -// Clerical uplink kit -/obj/item/storage/backpack/satchel/syndie_kit/clerical - startswith = list( - /obj/item/stack/package_wrap/twenty_five, - /obj/item/hand_labeler, - /obj/item/stamp/chameleon, - /obj/item/pen/chameleon, - /obj/item/device/destTagger, - ) - -/obj/item/storage/box/syndie_kit/spy - startswith = list( - /obj/item/device/spy_bug = 6, - /obj/item/device/spy_monitor - ) - -/obj/item/storage/box/syndie_kit/silenced - startswith = list( - /obj/item/gun/projectile/pistol/holdout, - /obj/item/silencer, - /obj/item/ammo_magazine/pistol/small - ) - -/obj/item/storage/backpack/satchel/syndie_kit/revolver - startswith = list( - /obj/item/gun/projectile/revolver, - /obj/item/ammo_magazine/speedloader/magnum - ) - -/obj/item/storage/box/syndie_kit/toxin - startswith = list( - /obj/item/reagent_containers/glass/beaker/vial/random/toxin, - /obj/item/reagent_containers/syringe - ) - -/obj/item/storage/box/syndie_kit/syringegun - startswith = list( - /obj/item/gun/launcher/syringe/disguised, - /obj/item/syringe_cartridge = 4, - /obj/item/reagent_containers/syringe = 4 - ) - -/obj/item/storage/box/syndie_kit/cigarette - name = "\improper Tricky smokes" - desc = "Smokes so good, you'd think it was a trick!" - -/obj/item/storage/box/syndie_kit/cigarette/New() - ..() - var/obj/item/storage/fancy/cigarettes/pack - pack = new /obj/item/storage/fancy/cigarettes(src) - fill_cigarre_package(pack, list(/datum/reagent/aluminium = 1, /datum/reagent/potassium = 1, /datum/reagent/sulfur = 1)) - pack.desc += " 'F' has been scribbled on it." - - pack = new /obj/item/storage/fancy/cigarettes(src) - fill_cigarre_package(pack, list(/datum/reagent/aluminium = 1, /datum/reagent/potassium = 1, /datum/reagent/sulfur = 1)) - pack.desc += " 'F' has been scribbled on it." - - pack = new /obj/item/storage/fancy/cigarettes(src) - fill_cigarre_package(pack, list(/datum/reagent/potassium = 1, /datum/reagent/sugar = 1, /datum/reagent/phosphorus = 1)) - pack.desc += " 'S' has been scribbled on it." - - pack = new /obj/item/storage/fancy/cigarettes(src) - fill_cigarre_package(pack, list(/datum/reagent/potassium = 1, /datum/reagent/sugar = 1, /datum/reagent/phosphorus = 1)) - pack.desc += " 'S' has been scribbled on it." - - pack = new /obj/item/storage/fancy/cigarettes(src) - fill_cigarre_package(pack, list(/datum/reagent/mindbreaker = 4)) - pack.desc += " 'MB' has been scribbled on it." - - pack = new /obj/item/storage/fancy/cigarettes(src) - fill_cigarre_package(pack, list(/datum/reagent/tricordrazine = 4)) - pack.desc += " 'T' has been scribbled on it." - - new /obj/item/flame/lighter/zippo(src) - -/proc/fill_cigarre_package(var/obj/item/storage/fancy/cigarettes/C, var/list/reagents) - for(var/reagent in reagents) - C.reagents.add_reagent(reagent, reagents[reagent] * C.max_storage_space) - -//Rig Electrowarfare and Voice Synthesiser kit -/obj/item/storage/backpack/satchel/syndie_kit/ewar_voice - startswith = list( - /obj/item/rig_module/electrowarfare_suite, - /obj/item/rig_module/voice, - ) - -/obj/item/storage/secure/briefcase/heavysniper - startswith = list( - /obj/item/gun/projectile/heavysniper, - /obj/item/storage/box/ammo/sniperammo - ) - -/obj/item/storage/secure/briefcase/heavysniper/Initialize() - . = ..() - make_exact_fit() - -/obj/item/storage/secure/briefcase/money - - startswith = list(/obj/item/spacecash/bundle/c1000 = 10) - -/obj/item/storage/backpack/satchel/syndie_kit/armor - startswith = list( - /obj/item/clothing/suit/armor/pcarrier/merc, - /obj/item/clothing/head/helmet/merc - ) diff --git a/code/game/objects/items/weapons/storage/wall_mirror.dm b/code/game/objects/items/weapons/storage/wall_mirror.dm deleted file mode 100644 index 6a8582c809467..0000000000000 --- a/code/game/objects/items/weapons/storage/wall_mirror.dm +++ /dev/null @@ -1,185 +0,0 @@ -//wip wip wup -/obj/item/storage/mirror - name = "mirror" - desc = "A SalonPro Nano-Mirror! The leading brand in hair salon products, utilizing nano-machinery to style your hair just right." - icon = 'icons/obj/watercloset.dmi' - icon_state = "mirror" - density = FALSE - anchored = TRUE - max_w_class = ITEM_SIZE_NORMAL - max_storage_space = DEFAULT_LARGEBOX_STORAGE - use_sound = 'sound/effects/closet_open.ogg' - startswith = list( - /obj/item/haircomb/random, - /obj/item/haircomb/brush, - /obj/random/medical/lite, - /obj/item/lipstick/random, - /obj/random/soap, - /obj/item/reagent_containers/spray/cleaner/deodorant, - /obj/item/towel/random - ) - var/shattered = FALSE - var/list/ui_cache - - /// Visual object for handling the viscontents - var/obj/effect/reflection/reflection = null - vis_flags = VIS_HIDE - -/obj/item/storage/mirror/proc/on_moved() - if(istype(reflection)) - reflection.forceMove(loc) - reflection.update_mirror_filters() //Mirrors shouldnt move but if they do so should reflection - -/obj/item/storage/mirror/Destroy() - clear_mirror_ui_cache(ui_cache) - QDEL_NULL(reflection) - GLOB.moved_event.unregister(src, src, .proc/on_moved) - . = ..() - -/obj/item/storage/mirror/Initialize() - . = ..() - reflection = new(loc) - reflection.setup_visuals(src) - GLOB.moved_event.register(src, src, .proc/on_moved) - -/obj/item/storage/mirror/proc/on_flick() //Have to hide the effect - if(istype(reflection)) - reflection.alpha = 0 - addtimer(CALLBACK(reflection, /obj/effect/reflection/.proc/reset_alpha), 15, TIMER_CLIENT_TIME | TIMER_UNIQUE | TIMER_OVERRIDE) - -/obj/item/storage/mirror/MouseDrop(obj/over) - . = ..() - if (!.) - return - flick("mirror_open", src) - on_flick() - -/obj/item/storage/mirror/attack_hand(mob/living/carbon/human/user) - if (shattered) - to_chat(user, SPAN_WARNING("\The [src] is ruined - you can't get your strut on.")) - return - open_mirror_ui(src, user, ui_cache) - -/obj/item/storage/mirror/proc/shatter() - if (shattered) - playsound(src, 'sound/effects/hit_on_shattered_glass.ogg', 70, 1) - return - shattered = TRUE - icon_state = "mirror_broke" - playsound(src, "shatter", 70, 1) - desc = "Oh no, seven years of bad luck!" - - if(istype(reflection)) - reflection.alpha_icon_state = "mirror_mask_broken" - reflection.update_mirror_filters() - -/obj/item/storage/mirror/bullet_act(obj/item/projectile/P) - if (prob(P.get_structure_damage() * 2)) - shatter() - ..() - -/obj/item/storage/mirror/attackby(obj/item/I, mob/user) - if (prob(I.force) && user.a_intent == I_HURT) - user.visible_message( - SPAN_WARNING("\The [user] smashes \the [src] with \the [I]!"), - SPAN_WARNING("You smash \the [src] with \the [I]!") - ) - shatter() - return TRUE - . = ..() - if (!.) - return - flick("mirror_open", src) - on_flick() - -/obj/item/mirror - name = "mirror" - desc = "A SalonPro Nano-Mirror(TM) brand mirror! Now a portable version." - icon = 'icons/obj/items.dmi' - icon_state = "mirror" - var/list/ui_cache - -/obj/item/mirror/Destroy() - clear_mirror_ui_cache(ui_cache) - . = ..() - -/obj/item/mirror/attack_self(mob/user) - open_mirror_ui(src, user, ui_cache) - - -/proc/open_mirror_ui(obj/item/mirror, mob/living/carbon/human/user, list/ui_cache) - if (!istype(mirror) || !istype(user)) - return - var/W = weakref(user) - var/datum/nano_module/appearance_changer/changer = LAZYACCESS(ui_cache, W) - if (!changer) - changer = new(user, APPEARANCE_HEAD|APPEARANCE_FACE) - changer.name = "SalonPro Nano-Mirror" - LAZYSET(ui_cache, W, changer) - changer.ui_interact(user) - -/proc/clear_mirror_ui_cache(list/ui_cache) - for(var/W in ui_cache) - var/changer = ui_cache[W] - qdel(changer) - LAZYCLEARLIST(ui_cache) - -/obj/effect/reflection - name = "reflection" - appearance_flags = KEEP_TOGETHER|TILE_BOUND|PIXEL_SCALE - mouse_opacity = 0 - vis_flags = VIS_HIDE - layer = ABOVE_OBJ_LAYER - var/alpha_icon = 'icons/obj/watercloset.dmi' - var/alpha_icon_state = "mirror_mask" - var/obj/mirror - desc = "Why are you locked in the bathroom?" - anchored = TRUE - unacidable = TRUE - -/obj/effect/reflection/proc/setup_visuals(target) - mirror = target - - if(mirror.pixel_x > 0) - dir = WEST - else if (mirror.pixel_x < 0) - dir = EAST - - if(mirror.pixel_y > 0) - dir = SOUTH - else if (mirror.pixel_y < 0) - dir = NORTH - - pixel_x = mirror.pixel_x - pixel_y = mirror.pixel_y - - update_mirror_filters() - -/obj/effect/reflection/proc/reset_visuals() - mirror = null - update_mirror_filters() - -/obj/effect/reflection/proc/reset_alpha() - alpha = initial(alpha) - -/obj/effect/reflection/proc/update_mirror_filters() - filters = null - - vis_contents = null - - if(!mirror) - return - var/additional_y_offset = 0 - var/matrix/M = matrix() - if(dir == WEST || dir == EAST) - M.Scale(-1, 1) - else if(dir == SOUTH|| dir == NORTH) - M.Scale(1, -1) - //Center of mirror sprite is at 19, meaning we will be some pixels off when pointing down - additional_y_offset = -5 - - transform = M - - filters += filter("type" = "alpha", "icon" = icon(alpha_icon, alpha_icon_state), "x" = 0, "y" = additional_y_offset) - - vis_contents += get_turf(mirror) diff --git a/code/game/objects/items/weapons/storage/wallets.dm b/code/game/objects/items/weapons/storage/wallets.dm deleted file mode 100644 index ca740651382ec..0000000000000 --- a/code/game/objects/items/weapons/storage/wallets.dm +++ /dev/null @@ -1,157 +0,0 @@ -/obj/item/storage/wallet - name = "wallet" - desc = "It can hold a few small and personal things." - icon = 'icons/obj/wallet.dmi' - icon_state = "wallet-white" - w_class = ITEM_SIZE_SMALL - max_w_class = ITEM_SIZE_SMALL //Don't worry, see can_hold[] - max_storage_space = 8 - can_hold = list( - /obj/item/spacecash, - /obj/item/card, - /obj/item/clothing/mask/smokable, - /obj/item/lipstick, - /obj/item/haircomb, - /obj/item/mirror, - /obj/item/clothing/accessory/locket, - /obj/item/clothing/head/hairflower, - /obj/item/device/flashlight/pen, - /obj/item/device/flashlight/slime, - /obj/item/seeds, - /obj/item/material/coin, - /obj/item/dice, - /obj/item/disk, - /obj/item/implant, - /obj/item/implanter, - /obj/item/reagent_containers/syringe, - /obj/item/reagent_containers/hypospray/autoinjector, - /obj/item/reagent_containers/glass/beaker/vial, - /obj/item/flame, - /obj/item/paper, - /obj/item/pen, - /obj/item/photo, - /obj/item/reagent_containers/pill, - /obj/item/device/radio/headset, - /obj/item/device/encryptionkey, - /obj/item/key, - /obj/item/clothing/accessory/badge, - /obj/item/clothing/accessory/medal, - /obj/item/clothing/accessory/armor_tag, - /obj/item/clothing/ring, - /obj/item/passport, - /obj/item/clothing/accessory/pride_pin, - /obj/item/clothing/accessory/pronouns, - /obj/item/storage/chewables/rollable - ) - - slot_flags = SLOT_ID - - var/obj/item/card/id/front_id = null - -/obj/item/storage/wallet/leather - color = COLOR_SEDONA - -/obj/item/storage/wallet/Destroy() - if(front_id) - front_id.dropInto(loc) - front_id = null - . = ..() - -/obj/item/storage/wallet/remove_from_storage(obj/item/W as obj, atom/new_location) - . = ..(W, new_location) - if(.) - if(W == front_id) - front_id = null - SetName(initial(name)) - update_icon() - -/obj/item/storage/wallet/handle_item_insertion(obj/item/W as obj, prevent_warning = 0) - . = ..(W, prevent_warning) - if(.) - if(!front_id && istype(W, /obj/item/card/id)) - front_id = W - update_icon() - -/obj/item/storage/wallet/on_update_icon() - overlays.Cut() - if(front_id) - var/tiny_state = "id-generic" - if(("id-"+front_id.icon_state) in icon_states(icon)) - tiny_state = "id-"+front_id.icon_state - var/image/tiny_image = new/image(icon, icon_state = tiny_state) - tiny_image.appearance_flags = DEFAULT_APPEARANCE_FLAGS | RESET_COLOR - overlays += tiny_image - -/obj/item/storage/wallet/GetIdCard() - return front_id - -/obj/item/storage/wallet/GetAccess() - var/obj/item/I = GetIdCard() - if(I) - return I.GetAccess() - else - return ..() - - -/obj/item/storage/wallet/AltClick(mob/user) - if (user != loc || user.incapacitated() || !ishuman(user)) - return ..() - - var/obj/item/card/id/id = GetIdCard() - if (istype(id)) - remove_from_storage(id) - user.put_in_hands(id) - return - - return ..() - - -/obj/item/storage/wallet/random/New() - ..() - var/item1_type = pick( /obj/item/spacecash/bundle/c10,/obj/item/spacecash/bundle/c100,/obj/item/spacecash/bundle/c1000,/obj/item/spacecash/bundle/c20,/obj/item/spacecash/bundle/c200,/obj/item/spacecash/bundle/c50, /obj/item/spacecash/bundle/c500) - var/item2_type - if(prob(50)) - item2_type = pick( /obj/item/spacecash/bundle/c10,/obj/item/spacecash/bundle/c100,/obj/item/spacecash/bundle/c1000,/obj/item/spacecash/bundle/c20,/obj/item/spacecash/bundle/c200,/obj/item/spacecash/bundle/c50, /obj/item/spacecash/bundle/c500) - var/item3_type = pick( /obj/item/material/coin/silver, /obj/item/material/coin/silver, /obj/item/material/coin/gold, /obj/item/material/coin/iron, /obj/item/material/coin/iron, /obj/item/material/coin/iron ) - - spawn(2) - if(item1_type) - new item1_type(src) - if(item2_type) - new item2_type(src) - if(item3_type) - new item3_type(src) - update_icon() - -/obj/item/storage/wallet/poly - name = "polychromic wallet" - desc = "You can recolor it! Fancy! The future is NOW!" - -/obj/item/storage/wallet/poly/New() - ..() - color = get_random_colour() - update_icon() - -/obj/item/storage/wallet/poly/verb/change_color() - set name = "Change Wallet Color" - set category = "Object" - set desc = "Change the color of the wallet." - set src in usr - - if(usr.incapacitated()) - return - - var/new_color = input(usr, "Pick a new color", "Wallet Color", color) as color|null - if(!new_color || new_color == color || usr.incapacitated()) - return - color = new_color - -/obj/item/storage/wallet/poly/emp_act(severity) - icon_state = "wallet-emp" - update_icon() - addtimer(CALLBACK(src, .proc/resolve_emp_timer), 20 SECONDS) - ..() - -/obj/item/storage/wallet/poly/proc/resolve_emp_timer() - icon_state = initial(icon_state) - update_icon() diff --git a/code/game/objects/items/weapons/stunbaton.dm b/code/game/objects/items/weapons/stunbaton.dm deleted file mode 100644 index e91a02e176e13..0000000000000 --- a/code/game/objects/items/weapons/stunbaton.dm +++ /dev/null @@ -1,258 +0,0 @@ -//replaces our stun baton code with /tg/station's code -/obj/item/melee/baton - icon = 'icons/obj/weapons/melee_physical.dmi' - name = "stunbaton" - desc = "A stun baton for incapacitating people with." - icon_state = "stunbaton" - item_state = "baton" - slot_flags = SLOT_BELT - force = 15 - throwforce = 7 - w_class = ITEM_SIZE_NORMAL - origin_tech = list(TECH_COMBAT = 2) - attack_verb = list("beaten") - base_parry_chance = 30 - attack_ignore_harm_check = TRUE - var/stunforce = 0 - var/agonyforce = 30 - var/status = 0 //whether the thing is on or not - var/obj/item/cell/bcell - var/hitcost = 7 - -/obj/item/melee/baton/loaded - bcell = /obj/item/cell/device/high - -/obj/item/melee/baton/New() - if(ispath(bcell)) - bcell = new bcell(src) - update_icon() - ..() - -/obj/item/melee/baton/Destroy() - if(bcell && !ispath(bcell)) - qdel(bcell) - bcell = null - return ..() - -/obj/item/melee/baton/get_cell() - return bcell - -/obj/item/melee/baton/proc/update_status() - if(bcell.charge < hitcost) - status = 0 - update_icon() - -/obj/item/melee/baton/proc/deductcharge(var/chrgdeductamt) - if(bcell) - if(bcell.checked_use(chrgdeductamt)) - update_status() - return 1 - else - status = 0 - update_icon() - return 0 - return null - -/obj/item/melee/baton/on_update_icon() - if(status) - icon_state = "[initial(name)]_active" - else if(!bcell) - icon_state = "[initial(name)]_nocell" - else - icon_state = "[initial(name)]" - - if(icon_state == "[initial(name)]_active") - set_light(0.4, 0.1, 1, 2, "#ff6a00") - else - set_light(0) - -/obj/item/melee/baton/examine(mob/user, distance) - . = ..() - if(distance <= 1) - examine_cell(user) - -// Addition made by Techhead0, thanks for fullfilling the todo! -/obj/item/melee/baton/proc/examine_cell(mob/user) - if(bcell) - to_chat(user, "The baton is [round(bcell.percent())]% charged.") - if(!bcell) - to_chat(user, "The baton does not have a power source installed.") - -/obj/item/melee/baton/attackby(obj/item/W, mob/user) - if(istype(W, /obj/item/cell/device)) - if(!bcell && user.unEquip(W)) - W.forceMove(src) - bcell = W - to_chat(user, "You install a cell into the [src].") - update_icon() - else - to_chat(user, "[src] already has a cell.") - else if(isScrewdriver(W)) - if(bcell) - bcell.update_icon() - bcell.dropInto(loc) - bcell = null - to_chat(user, "You remove the cell from the [src].") - status = 0 - update_icon() - else - ..() - -/obj/item/melee/baton/attack_self(mob/user) - set_status(!status, user) - add_fingerprint(user) - -/obj/item/melee/baton/throw_impact(atom/hit_atom, var/datum/thrownthing/TT) - if(istype(hit_atom,/mob/living)) - apply_hit_effect(hit_atom, hit_zone = ran_zone(TT.target_zone, 30))//more likely to hit the zone you target! - else - ..() - -/obj/item/melee/baton/proc/set_status(var/newstatus, mob/user) - if(bcell && bcell.charge >= hitcost) - if(status != newstatus) - change_status(newstatus) - to_chat(user, "[src] is now [status ? "on" : "off"].") - playsound(loc, "sparks", 75, 1, -1) - else - change_status(0) - if(!bcell) - to_chat(user, "[src] does not have a power source!") - else - to_chat(user, "[src] is out of charge.") - -// Proc to -actually- change the status, and update the icons as well. -// Also exists to ease "helpful" admin-abuse in case an bug prevents attack_self -// to occur would appear. Hopefully it wasn't necessary. -/obj/item/melee/baton/proc/change_status(var/s) - if (status != s) - status = s - update_icon() - -/obj/item/melee/baton/attack(mob/M, mob/user) - if(status && (MUTATION_CLUMSY in user.mutations) && prob(50)) - to_chat(user, "You accidentally hit yourself with the [src]!") - user.Weaken(30) - deductcharge(hitcost) - return - return ..() - -/obj/item/melee/baton/apply_hit_effect(mob/living/target, mob/living/user, var/hit_zone) - if(isrobot(target)) - return ..() - - var/agony = agonyforce - var/stun = stunforce - var/obj/item/organ/external/affecting = null - if(ishuman(target)) - var/mob/living/carbon/human/H = target - affecting = H.get_organ(hit_zone) - var/abuser = user ? "" : "by [user]" - if(user && user.a_intent == I_HURT) - . = ..() - if(.) - return - - //whacking someone causes a much poorer electrical contact than deliberately prodding them. - stun *= 0.5 - if(status) //Checks to see if the stunbaton is on. - agony *= 0.5 //whacking someone causes a much poorer contact than prodding them. - else - agony = 0 //Shouldn't really stun if it's off, should it? - //we can't really extract the actual hit zone from ..(), unfortunately. Just act like they attacked the area they intended to. - else if(!status) - if(affecting) - target.visible_message("[target] has been prodded in the [affecting.name] with [src][abuser]. Luckily it was off.") - else - target.visible_message("[target] has been prodded with [src][abuser]. Luckily it was off.") - else - if(affecting) - target.visible_message("[target] has been prodded in the [affecting.name] with [src]!") - else - target.visible_message("[target] has been prodded with [src][abuser]!") - playsound(loc, 'sound/weapons/Egloves.ogg', 50, 1, -1) - - //stun effects - if(status) - target.stun_effect_act(stun, agony, hit_zone, src) - msg_admin_attack("[key_name(user)] stunned [key_name(target)] with the [src].") - deductcharge(hitcost) - - if(ishuman(target)) - var/mob/living/carbon/human/H = target - H.forcesay(GLOB.hit_appends) - - return 1 - -/obj/item/melee/baton/emp_act(severity) - if(bcell) - bcell.emp_act(severity) //let's not duplicate code everywhere if we don't have to please. - ..() - -// Stunbaton module for Security synthetics -/obj/item/melee/baton/robot - bcell = null - hitcost = 20 - -// Addition made by Techhead0, thanks for fullfilling the todo! -/obj/item/melee/baton/robot/examine_cell(mob/user) - to_chat(user, "The baton is running off an external power supply.") - -// Override proc for the stun baton module, found in PC Security synthetics -// Refactored to fix #14470 - old proc defination increased the hitcost beyond -// usability without proper checks. -// Also hard-coded to be unuseable outside their righteous synthetic owners. -/obj/item/melee/baton/robot/attack_self(mob/user) - var/mob/living/silicon/robot/R = isrobot(user) ? user : null // null if the user is NOT a robot - update_cell(R) // takes both robots and null - if (R) - return ..() - else // Stop pretending and get out of your cardborg suit, human. - to_chat(user, "You don't seem to be able interacting with this by yourself..") - add_fingerprint(user) - return 0 - -/obj/item/melee/baton/robot/attackby(obj/item/W, mob/user) - return - -/obj/item/melee/baton/robot/apply_hit_effect(mob/living/target, mob/living/user, var/hit_zone) - update_cell(isrobot(user) ? user : null) // update the status before we apply the effects - return ..() - -// Updates the baton's cell to use user's own cell -// Otherwise, if null (when the user isn't a robot), render it unuseable -/obj/item/melee/baton/robot/proc/update_cell(mob/living/silicon/robot/user) - if (!user) - bcell = null - set_status(0) - else if (!bcell || bcell != user.cell) - bcell = user.cell // if it is null, nullify it anyway - -// Traitor variant for Engineering synthetics. -/obj/item/melee/baton/robot/electrified_arm - name = "electrified arm" - icon = 'icons/obj/gripper.dmi' - icon_state = "electrified_arm" - -/obj/item/melee/baton/robot/electrified_arm/on_update_icon() - if(status) - icon_state = "electrified_arm_active" - set_light(0.4, 0.1, 1, 2, "#006aff") - else - icon_state = "electrified_arm" - set_light(0) - -//Makeshift stun baton. Replacement for stun gloves. -/obj/item/melee/baton/cattleprod - name = "stunprod" - desc = "An improvised stun baton." - icon = 'icons/obj/weapons/melee_physical.dmi' - icon_state = "stunprod_nocell" - item_state = "prod" - force = 3 - throwforce = 5 - stunforce = 0 - agonyforce = 60 //same force as a stunbaton, but uses way more charge. - hitcost = 25 - attack_verb = list("poked") - slot_flags = null diff --git a/code/game/objects/items/weapons/surgery_tools.dm b/code/game/objects/items/weapons/surgery_tools.dm deleted file mode 100644 index ca818a24cd097..0000000000000 --- a/code/game/objects/items/weapons/surgery_tools.dm +++ /dev/null @@ -1,170 +0,0 @@ -/* Surgery Tools - * Contains: - * Retractor - * Hemostat - * Cautery - * Surgical Drill - * Scalpel - * Circular Saw - */ - -/* - * Retractor - */ -/obj/item/retractor - name = "retractor" - desc = "Used to separate the edges of a surgical incision to get to the juicy organs inside." - icon = 'icons/obj/surgery.dmi' - icon_state = "retractor" - matter = list(MATERIAL_STEEL = 10000, MATERIAL_GLASS = 5000) - obj_flags = OBJ_FLAG_CONDUCTIBLE - w_class = ITEM_SIZE_SMALL - origin_tech = list(TECH_MATERIAL = 1, TECH_BIO = 1) - -/* - * Hemostat - */ -/obj/item/hemostat - name = "hemostat" - desc = "A type of forceps used to prevent an incision from bleeding, or to extract objects from the inside of the body." - icon = 'icons/obj/surgery.dmi' - icon_state = "hemostat" - matter = list(MATERIAL_STEEL = 5000, MATERIAL_GLASS = 2500) - obj_flags = OBJ_FLAG_CONDUCTIBLE - w_class = ITEM_SIZE_SMALL - origin_tech = list(TECH_MATERIAL = 1, TECH_BIO = 1) - attack_verb = list("attacked", "pinched") - -/* - * Cautery - */ -/obj/item/cautery - name = "cautery" - desc = "Uses chemicals to quickly cauterize incisions and other small cuts without causing further damage." - icon = 'icons/obj/surgery.dmi' - icon_state = "cautery" - matter = list(MATERIAL_STEEL = 5000, MATERIAL_GLASS = 2500, MATERIAL_ALUMINIUM = 1000) - obj_flags = OBJ_FLAG_CONDUCTIBLE - w_class = ITEM_SIZE_SMALL - origin_tech = list(TECH_MATERIAL = 1, TECH_BIO = 1) - attack_verb = list("burnt") - -/* - * Surgical Drill - */ -/obj/item/surgicaldrill - name = "surgical drill" - desc = "Effectively a very precise hand drill, used to bore holes through bone." - icon = 'icons/obj/surgery.dmi' - icon_state = "drill" - hitsound = 'sound/weapons/circsawhit.ogg' - matter = list(MATERIAL_STEEL = 15000, MATERIAL_GLASS = 10000) - obj_flags = OBJ_FLAG_CONDUCTIBLE - force = 15.0 - w_class = ITEM_SIZE_NORMAL - origin_tech = list(TECH_MATERIAL = 1, TECH_BIO = 1) - attack_verb = list("drilled") - -/* - * Scalpel - */ -/obj/item/scalpel - name = "scalpel" - desc = "A tiny and extremely sharp steel cutting tool used for surgery, dissection, autopsy, and very precise cuts. The cornerstone of any surgical procedure." - icon = 'icons/obj/surgery.dmi' - icon_state = "scalpel" - obj_flags = OBJ_FLAG_CONDUCTIBLE - force = 10.0 - sharp = TRUE - edge = TRUE - w_class = ITEM_SIZE_TINY - slot_flags = SLOT_EARS - throwforce = 5.0 - throw_speed = 3 - throw_range = 5 - origin_tech = list(TECH_MATERIAL = 1, TECH_BIO = 1) - matter = list(MATERIAL_STEEL = 10000, MATERIAL_GLASS = 5000) - attack_verb = list("attacked", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut") - -/* - * Researchable Scalpels - */ -/obj/item/scalpel/laser1 - name = "laser scalpel" - desc = "A scalpel augmented with a directed laser, for more precise cutting without blood entering the field. This one looks basic and could be improved." - icon_state = "scalpel_laser1_on" - damtype = DAMAGE_BURN - -/obj/item/scalpel/laser2 - name = "laser scalpel" - desc = "A scalpel augmented with a directed laser, for more precise cutting without blood entering the field. This one looks somewhat advanced." - icon_state = "scalpel_laser2_on" - damtype = DAMAGE_BURN - force = 12.0 - -/obj/item/scalpel/laser3 - name = "laser scalpel" - desc = "A scalpel augmented with a directed laser, for more precise cutting without blood entering the field. This one looks to be the pinnacle of precision energy cutlery!" - icon_state = "scalpel_laser3_on" - damtype = DAMAGE_BURN - force = 15.0 - -/obj/item/scalpel/manager - name = "incision management system" - desc = "A true extension of the surgeon's body, this marvel instantly and completely prepares an incision allowing for the immediate commencement of therapeutic steps." - icon_state = "scalpel_manager_on" - force = 7.5 - -/* - * Circular Saw - */ -/obj/item/circular_saw - name = "circular saw" - desc = "A small and nasty-looking hand saw used to cut through bone, or in an emergency, pizza." - icon = 'icons/obj/surgery.dmi' - icon_state = "saw3" - hitsound = 'sound/weapons/circsawhit.ogg' - obj_flags = OBJ_FLAG_CONDUCTIBLE - force = 15.0 - w_class = ITEM_SIZE_NORMAL - throwforce = 9.0 - throw_speed = 3 - throw_range = 5 - origin_tech = list(TECH_MATERIAL = 1, TECH_BIO = 1) - matter = list(MATERIAL_STEEL = 20000,MATERIAL_GLASS = 10000) - attack_verb = list("attacked", "slashed", "sawed", "cut") - sharp = TRUE - edge = TRUE - -//misc, formerly from code/defines/weapons.dm -/obj/item/bonegel - name = "bone gel" - desc = "Sophisticated chemical gel used to mend fractures and broken bones before setting." - icon = 'icons/obj/surgery.dmi' - icon_state = "bone-gel" - force = 0 - w_class = ITEM_SIZE_SMALL - throwforce = 1.0 - -/obj/item/FixOVein - name = "FixOVein" - desc = "Derived from a Vey-Med design, this is a very precise surgical tool used to mend cut tendons and severed arteries." - icon = 'icons/obj/surgery.dmi' - icon_state = "fixovein" - force = 0 - throwforce = 1.0 - origin_tech = list(TECH_MATERIAL = 1, TECH_BIO = 3) - w_class = ITEM_SIZE_SMALL - var/usage_amount = 10 - -/obj/item/bonesetter - name = "bone setter" - desc = "A large, heavy clamp for setting dislocated or fractured bones back in place." - icon = 'icons/obj/surgery.dmi' - icon_state = "bone setter" - force = 8.0 - throwforce = 9.0 - throw_speed = 3 - throw_range = 5 - w_class = ITEM_SIZE_SMALL - attack_verb = list("attacked", "hit", "bludgeoned") diff --git a/code/game/objects/items/weapons/swords_axes_etc.dm b/code/game/objects/items/weapons/swords_axes_etc.dm deleted file mode 100644 index 5a3d24a512366..0000000000000 --- a/code/game/objects/items/weapons/swords_axes_etc.dm +++ /dev/null @@ -1,95 +0,0 @@ -/* Weapons - * Contains: - * Sword - * Classic Baton - */ - -/* - * Classic Baton - */ -/obj/item/melee/classic_baton - name = "police baton" - desc = "A wooden truncheon for beating criminal scum." - icon = 'icons/obj/weapons/melee_physical.dmi' - icon_state = "baton" - item_state = "classic_baton" - base_parry_chance = 30 - slot_flags = SLOT_BELT - force = 10 - -/obj/item/melee/classic_baton/attack(mob/M as mob, mob/living/user as mob) - if ((MUTATION_CLUMSY in user.mutations) && prob(50)) - to_chat(user, "You club yourself over the head.") - user.Weaken(3 * force) - if(ishuman(user)) - var/mob/living/carbon/human/H = user - H.apply_damage(2*force, DAMAGE_BRUTE, BP_HEAD) - else - user.take_organ_damage(2*force, 0) - return - return ..() - -//Telescopic baton -/obj/item/melee/telebaton - name = "telescopic baton" - desc = "A compact yet rebalanced personal defense weapon. Can be concealed when folded." - icon = 'icons/obj/weapons/melee_physical.dmi' - icon_state = "telebaton_0" - item_state = "telebaton_0" - base_parry_chance = 30 - slot_flags = SLOT_BELT - w_class = ITEM_SIZE_SMALL - force = 3 - var/on = 0 - - -/obj/item/melee/telebaton/attack_self(mob/user as mob) - on = !on - if(on) - user.visible_message("With a flick of their wrist, [user] extends their telescopic baton.",\ - "You extend the baton.",\ - "You hear an ominous click.") - w_class = ITEM_SIZE_NORMAL - force = 15//quite robust - attack_verb = list("smacked", "struck", "slapped") - else - user.visible_message("\The [user] collapses their telescopic baton.",\ - "You collapse the baton.",\ - "You hear a click.") - w_class = ITEM_SIZE_SMALL - force = 3//not so robust now - attack_verb = list("hit", "punched") - - playsound(src.loc, 'sound/weapons/empty.ogg', 50, 1) - add_fingerprint(user) - update_icon() - update_held_icon() - -/obj/item/melee/telebaton/on_update_icon() - if(on) - icon_state = "telebaton_1" - item_state = "telebaton_1" - else - icon_state = "telebaton_0" - item_state = "telebaton_0" - if(length(blood_DNA)) - generate_blood_overlay(TRUE) // Force recheck. - overlays.Cut() - overlays += blood_overlay - -/obj/item/melee/telebaton/attack(mob/target as mob, mob/living/user as mob) - if(on) - if ((MUTATION_CLUMSY in user.mutations) && prob(50)) - to_chat(user, "You club yourself over the head.") - user.Weaken(3 * force) - if(ishuman(user)) - var/mob/living/carbon/human/H = user - H.apply_damage(2*force, DAMAGE_BRUTE, BP_HEAD) - else - user.take_organ_damage(2*force, 0) - return - if(..()) - //playsound(src.loc, "swing_hit", 50, 1, -1) - return - else - return ..() diff --git a/code/game/objects/items/weapons/table_flags.dm b/code/game/objects/items/weapons/table_flags.dm deleted file mode 100644 index 8597213e8fb5f..0000000000000 --- a/code/game/objects/items/weapons/table_flags.dm +++ /dev/null @@ -1,9 +0,0 @@ -/obj/item/tableflag - name = "table flag" - icon = 'icons/obj/items.dmi' - icon_state = "tableflag" - force = 0.5 - w_class = ITEM_SIZE_SMALL - attack_verb = list("whipped") - hitsound = 'sound/weapons/towelwhip.ogg' - desc = "The iconic flag of the Sol Central Government, a symbol with many different meanings." \ No newline at end of file diff --git a/code/game/objects/items/weapons/tanks/jetpack.dm b/code/game/objects/items/weapons/tanks/jetpack.dm deleted file mode 100644 index 712e3185c27ac..0000000000000 --- a/code/game/objects/items/weapons/tanks/jetpack.dm +++ /dev/null @@ -1,121 +0,0 @@ -//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:32 - -/obj/item/tank/jetpack - name = "jetpack (empty)" - desc = "The O'Neill Manufacturing VMU-12-U is a tank-based maneuvering pack that uses compressed gas for propulsion in zero-gravity areas. Use with caution." - icon_state = "jetpack" - gauge_icon = null - w_class = ITEM_SIZE_HUGE - tank_size = TANK_SIZE_HUGE - item_state = "jetpack" - distribute_pressure = ONE_ATMOSPHERE*O2STANDARD - var/datum/effect/effect/system/trail/ion/ion_trail - var/on = 0.0 - var/stabilization_on = 0 - var/volume_rate = 500 //Needed for borg jetpack transfer - action_button_name = "Toggle Jetpack" - -/obj/item/tank/jetpack/Initialize() - . = ..() - ion_trail = new /datum/effect/effect/system/trail/ion() - ion_trail.set_up(src) - -/obj/item/tank/jetpack/Destroy() - qdel(ion_trail) - ..() - -/obj/item/tank/jetpack/examine(mob/living/user) - . = ..() - if(air_contents.total_moles < 5) - to_chat(user, "The meter on \the [src] indicates you are almost out of gas!") - playsound(src.loc, 'sound/effects/caution.ogg', 50, 1, -6) - -/obj/item/tank/jetpack/verb/toggle_rockets() - set name = "Toggle Jetpack Stabilization" - set category = "Object" - src.stabilization_on = !( src.stabilization_on ) - to_chat(usr, "You toggle the stabilization [stabilization_on? "on":"off"].") - -/obj/item/tank/jetpack/verb/toggle() - set name = "Toggle Jetpack" - set category = "Object" - - on = !on - if(on) - icon_state = "[icon_state]-on" - ion_trail.start() - else - icon_state = initial(icon_state) - ion_trail.stop() - - if (ismob(usr)) - var/mob/M = usr - M.update_inv_back() - M.update_action_buttons() - - to_chat(usr, "You toggle the thrusters [on? "on":"off"].") - playsound(src.loc, 'sound/effects/turret/open.wav', 50, 1, -6) - -/obj/item/tank/jetpack/proc/allow_thrust(num, mob/living/user) - if(!(src.on)) - return 0 - if((num < 0.005 || src.air_contents.total_moles < num)) - src.ion_trail.stop() - return 0 - - var/datum/gas_mixture/G = remove_air(num) - - if(G.total_moles >= 0.005) - return 1 - - qdel(G) - -/obj/item/tank/jetpack/ui_action_click() - toggle() - - -/obj/item/tank/jetpack/void - name = "void maneuvering unit" - desc = "An ancient model of a zero-gravity propulsion unit, used by the first pioneers of human space travel. Surprisingly reliable." - icon_state = "jetpack-void" - item_state = "jetpack-void" - starting_pressure = list(GAS_OXYGEN = 6*ONE_ATMOSPHERE) - -/obj/item/tank/jetpack/oxygen - name = "jetpack (oxygen)" - desc = "The O'Neill Manufacturing VMU-15-O is a tank-based propulsion unit that uses compressed oxygen for moving in zero-gravity areas. Use with caution." - icon_state = "jetpack" - item_state = "jetpack" - starting_pressure = list(GAS_OXYGEN = 6*ONE_ATMOSPHERE) - -/obj/item/tank/jetpack/carbondioxide - name = "jetpack (carbon dioxide)" - desc = "The O'Neill Manufacturing VMU-11-C is a tank-based propulsion unit that utilizes compressed carbon dioxide for moving in zero-gravity areas. The label on the side indicates it should not be used as a source for internals." - distribute_pressure = 0 - icon_state = "jetpack-black" - item_state = "jetpack-black" - starting_pressure = list(GAS_CO2 = 6*ONE_ATMOSPHERE) - -/obj/item/tank/jetpack/rig - name = "jetpack" - var/obj/item/rig/holder - -/obj/item/tank/jetpack/rig/allow_thrust(num, mob/living/user as mob) - - if(!(src.on)) - return 0 - - if(!istype(holder) || !holder.air_supply) - return 0 - - var/obj/item/tank/pressure_vessel = holder.air_supply - - if((num < 0.005 || pressure_vessel.air_contents.total_moles < num)) - src.ion_trail.stop() - return 0 - - var/datum/gas_mixture/G = pressure_vessel.remove_air(num) - - if(G.total_moles >= 0.005) - return 1 - qdel(G) diff --git a/code/game/objects/items/weapons/tanks/tank_types.dm b/code/game/objects/items/weapons/tanks/tank_types.dm deleted file mode 100644 index 2877b0db3ae6a..0000000000000 --- a/code/game/objects/items/weapons/tanks/tank_types.dm +++ /dev/null @@ -1,214 +0,0 @@ -/obj/item/tank/scrubber - name = "high capacity gas tank" - desc = "An unwieldy tank for lots of gas, although not lots of GAS." - icon_state = "scrubber" - slot_flags = EMPTY_BITFIELD - w_class = ITEM_SIZE_HUGE - tank_size = TANK_SIZE_HUGE - gauge_icon = null - volume = 450 - - -/obj/item/tank/oxygen - name = "oxygen tank" - desc = "A tank of oxygen." - icon_state = "oxygen" - volume = 180 - tank_size = TANK_SIZE_LARGE - distribute_pressure = ONE_ATMOSPHERE * O2STANDARD - starting_pressure = list( - GAS_OXYGEN = 6 * ONE_ATMOSPHERE - ) - - -/obj/item/tank/oxygen_yellow - name = "oxygen tank" - desc = "A tank of oxygen." - icon_state = "oxygen_yellow" - volume = 180 - tank_size = TANK_SIZE_LARGE - distribute_pressure = ONE_ATMOSPHERE * O2STANDARD - starting_pressure = list( - GAS_OXYGEN = 6 * ONE_ATMOSPHERE - ) - - -/obj/item/tank/nitrogen - name = "nitrogen tank" - desc = "A tank of nitrogen." - icon_state = "nitrogen" - volume = 180 - tank_size = TANK_SIZE_LARGE - distribute_pressure = ONE_ATMOSPHERE * O2STANDARD - starting_pressure = list( - GAS_NITROGEN = 6 * ONE_ATMOSPHERE - ) - - -/obj/item/tank/air - name = "air tank" - desc = "Mixed anyone?" - icon_state = "oxygen" - volume = 180 - tank_size = TANK_SIZE_LARGE - starting_pressure = list( - GAS_OXYGEN = 6 * ONE_ATMOSPHERE * O2STANDARD, - GAS_NITROGEN = 6 * ONE_ATMOSPHERE * N2STANDARD - ) - - -/obj/item/tank/anesthetic - name = "anesthetic tank" - desc = "The dentist's friend." - icon_state = "anesthetic" - item_state = "an_tank" - volume = 270 - tank_size = TANK_SIZE_LARGE - starting_pressure = list( - GAS_OXYGEN = 6 * ONE_ATMOSPHERE * O2STANDARD, - GAS_N2O = 6 * ONE_ATMOSPHERE * N2STANDARD - ) - - -/obj/item/tank/phoron - name = "phoron tank" - desc = "Do not inhale." - icon_state = "phoron" - w_class = ITEM_SIZE_NORMAL - slot_flags = null - gauge_icon = null - starting_pressure = list( - GAS_PHORON = 3 * ONE_ATMOSPHERE - ) - - -/obj/item/tank/hydrogen - name = "hydrogen tank" - desc = "Fizzy lifting gas." - icon_state = "hydrogen" - w_class = ITEM_SIZE_NORMAL - slot_flags = null - gauge_icon = null - starting_pressure = list( - GAS_HYDROGEN = 3 * ONE_ATMOSPHERE - ) - - -/obj/item/tank/oxygen_emergency - name = "emergency oxygen tank" - desc = "A tank of emergency oxygen. This one is tiny." - icon_state = "emergency" - w_class = ITEM_SIZE_SMALL - slot_flags = SLOT_BELT - attack_cooldown = DEFAULT_WEAPON_COOLDOWN - force = 5 - melee_accuracy_bonus = -10 - gauge_icon = "indicator_emergency" - gauge_cap = 4 - tank_size = TANK_SIZE_SMALL - volume = 40 - distribute_pressure = ONE_ATMOSPHERE * O2STANDARD - starting_pressure = list( - GAS_OXYGEN = 10 * ONE_ATMOSPHERE - ) - - -/obj/item/tank/oxygen_emergency_extended - name = "emergency oxygen tank" - desc = "A tank of emergency oxygen. This one is small." - icon_state = "emergency_engi" - w_class = ITEM_SIZE_SMALL - slot_flags = SLOT_BELT - attack_cooldown = DEFAULT_WEAPON_COOLDOWN - force = 7 - melee_accuracy_bonus = -10 - gauge_icon = "indicator_emergency" - gauge_cap = 4 - tank_size = TANK_SIZE_SMALL - volume = 60 - distribute_pressure = ONE_ATMOSPHERE * O2STANDARD - starting_pressure = list( - GAS_OXYGEN = 10 * ONE_ATMOSPHERE - ) - - -/obj/item/tank/oxygen_emergency_double - name = "emergency oxygen tank" - desc = "A tank of emergency oxygen. This one is unwieldy." - icon_state = "emergency_double" - w_class = ITEM_SIZE_NORMAL - slot_flags = SLOT_BELT - attack_cooldown = DEFAULT_WEAPON_COOLDOWN - force = 8 - melee_accuracy_bonus = -10 - gauge_icon = "indicator_emergency_double" - gauge_cap = 4 - volume = 80 - distribute_pressure = ONE_ATMOSPHERE * O2STANDARD - starting_pressure = list( - GAS_OXYGEN = 10 * ONE_ATMOSPHERE - ) - - -/obj/item/tank/oxygen_scba - name = "emergency oxygen tank" - desc = "A tank of emergency oxygen. This one is unwieldy but comes with straps." - icon_state = "emergency_scuba" - w_class = ITEM_SIZE_NORMAL - slot_flags = SLOT_BELT | SLOT_BACK - attack_cooldown = DEFAULT_WEAPON_COOLDOWN - force = 8 - melee_accuracy_bonus = -10 - gauge_icon = null - volume = 80 - distribute_pressure = ONE_ATMOSPHERE * O2STANDARD - starting_pressure = list( - GAS_OXYGEN = 10 * ONE_ATMOSPHERE - ) - - -/obj/item/tank/nitrogen_emergency - name = "emergency nitrogen tank" - desc = "A tank of emergency nitrogen. This one is tiny." - icon_state = "emergency_nitro" - w_class = ITEM_SIZE_SMALL - slot_flags = SLOT_BELT - attack_cooldown = DEFAULT_WEAPON_COOLDOWN - force = 5 - melee_accuracy_bonus = -10 - gauge_icon = "indicator_emergency" - gauge_cap = 4 - tank_size = TANK_SIZE_SMALL - volume = 40 - distribute_pressure = ONE_ATMOSPHERE * O2STANDARD - starting_pressure = list( - GAS_NITROGEN = 10 * ONE_ATMOSPHERE - ) - - -/obj/item/tank/nitrogen_emergency_double - name = "emergency nitrogen tank" - desc = "A tank of emergency nitrogen. This one is unwieldy." - icon_state = "emergency_double_nitrogen" - w_class = ITEM_SIZE_NORMAL - slot_flags = SLOT_BELT - attack_cooldown = DEFAULT_WEAPON_COOLDOWN - force = 8 - melee_accuracy_bonus = -10 - gauge_icon = "indicator_emergency_double" - gauge_cap = 4 - volume = 80 - distribute_pressure = ONE_ATMOSPHERE * O2STANDARD - starting_pressure = list( - GAS_NITROGEN = 10 * ONE_ATMOSPHERE - ) - - -/obj/item/tank/air_sac - name = "air sac" - desc = "A small, compressed air sac that fills with breathable air, to be used in emergencies." - icon_state = "air_sac" - unacidable = TRUE - gauge_icon = null - tank_size = TANK_SIZE_SMALL - volume = 20 diff --git a/code/game/objects/items/weapons/tanks/tanks.dm b/code/game/objects/items/weapons/tanks/tanks.dm deleted file mode 100644 index b8e5bec7d49e0..0000000000000 --- a/code/game/objects/items/weapons/tanks/tanks.dm +++ /dev/null @@ -1,653 +0,0 @@ -var/global/list/tank_gauge_cache = list() - -/obj/item/tank - name = "tank" - icon = 'icons/obj/tank.dmi' - - var/gauge_icon = "indicator_tank" - var/gauge_cap = 6 - var/previous_gauge_pressure = null - - obj_flags = OBJ_FLAG_CONDUCTIBLE - slot_flags = SLOT_BACK - w_class = ITEM_SIZE_LARGE - - force = 15 - attack_cooldown = 2*DEFAULT_WEAPON_COOLDOWN - melee_accuracy_bonus = -30 - throwforce = 10.0 - throw_speed = 1 - throw_range = 4 - - var/datum/gas_mixture/air_contents = null - var/distribute_pressure = ONE_ATMOSPHERE - var/integrity = 20 - var/maxintegrity = 20 - var/obj/item/device/tankassemblyproxy/proxyassembly - - var/volume = 70 - var/tank_size = TANK_SIZE_MEDIUM - var/manipulated_by = null //Used by _onclick/hud/screen_objects.dm internals to determine if someone has messed with our tank or not. - //If they have and we haven't scanned it with the PDA or gas analyzer then we might just breath whatever they put in it. - var/failure_temp = 173 //173 deg C Borate seal (yes it should be 153 F, but that's annoying) - - - var/tank_flags = EMPTY_BITFIELD - - var/list/starting_pressure //list in format 'xgm gas id' = 'desired pressure at start' - -/obj/item/tank/Initialize() - . = ..() - proxyassembly = new /obj/item/device/tankassemblyproxy(src) - proxyassembly.tank = src - - air_contents = new /datum/gas_mixture(volume, T20C) - for(var/gas in starting_pressure) - air_contents.adjust_gas(gas, starting_pressure[gas]*volume/(R_IDEAL_GAS_EQUATION*T20C), 0) - air_contents.update_values() - - START_PROCESSING(SSobj, src) - update_icon(TRUE) - -/obj/item/tank/Destroy() - QDEL_NULL(air_contents) - - STOP_PROCESSING(SSobj, src) - QDEL_NULL(proxyassembly) - - if(istype(loc, /obj/item/device/transfer_valve)) - var/obj/item/device/transfer_valve/TTV = loc - TTV.remove_tank(src) - if(!QDELETED(TTV)) // It will delete tanks inside it on qdel. - qdel(TTV) - - . = ..() - -/obj/item/tank/examine(mob/user, distance) - . = ..() - - if (distance < 5) - var/list/mods = list() - if (GET_FLAGS(tank_flags, TANK_FLAG_WIRED)) - mods += "some wires" - if (proxyassembly.assembly) - mods += user.skill_check(SKILL_DEVICES, SKILL_ADEPT) ? "an ignition assembly" : "a device" - if (length(mods)) - to_chat(user, "[english_list(mods)] are attached.") - else - return - - if (distance < 3) - if (GET_FLAGS(tank_flags, TANK_FLAG_WELDED)) - to_chat(user, SPAN_WARNING("The emergency relief valve has been welded shut!")) - else if (GET_FLAGS(tank_flags, TANK_FLAG_FORCED)) - to_chat(user, SPAN_WARNING("The emergency relief valve has been forced open!")) - else - return - - if (distance < 1) - var/descriptive - if(!air_contents) - descriptive = "empty" - else - var/celsius_temperature = air_contents.temperature - T0C - switch(celsius_temperature) - if(300 to INFINITY) - descriptive = "furiously hot" - if(100 to 300) - descriptive = "hot" - if(80 to 100) - descriptive = "warm" - if(40 to 80) - descriptive = "lukewarm" - if(20 to 40) - descriptive = "room temperature" - if(-20 to 20) - descriptive = "cold" - else - descriptive = "bitterly cold" - to_chat(user, SPAN_ITALIC("\The [src] feels [descriptive].")) - -/obj/item/tank/attackby(var/obj/item/W, var/mob/user) - ..() - if (istype(loc, /obj/item/assembly)) - icon = loc - - if (istype(W, /obj/item/device/scanner/gas)) - return - - if (isScrewdriver(W)) - add_fingerprint(user) - user.visible_message( - SPAN_ITALIC("\The [user] starts to use \the [W] on \the [src]."), - SPAN_ITALIC("You start to force \the [src]'s emergency relief valve with \the [W]."), - SPAN_ITALIC("You can hear metal scratching on metal."), - range = 5 - ) - if (GET_FLAGS(tank_flags, TANK_FLAG_WELDED)) - to_chat(user, SPAN_WARNING("The valve is stuck. You can't move it at all!")) - return - var/reduction = round(user.get_skill_value(SKILL_ATMOS) * 0.5) //0,1,1,2,2 - if (do_after(user, (5 - reduction) SECONDS, src, DO_PUBLIC_UNIQUE)) - if (GET_FLAGS(tank_flags, TANK_FLAG_WELDED)) - to_chat(user, SPAN_WARNING("The valve is stuck. You can't move it at all!")) - return - FLIP_FLAGS(tank_flags, TANK_FLAG_FORCED) - to_chat(user, SPAN_NOTICE("You finish forcing the valve [GET_FLAGS(tank_flags, TANK_FLAG_FORCED) ? "open" : "closed"].")) - return - - if (istype(W,/obj/item/latexballon)) - add_fingerprint(user) - var/obj/item/latexballon/LB = W - LB.blow(src) - - if(isCoil(W)) - if (GET_FLAGS(tank_flags, TANK_FLAG_WIRED)) - to_chat(user, SPAN_WARNING("\The [src] is already wired.")) - else - add_fingerprint(user) - var/obj/item/stack/cable_coil/C = W - var/single = C.get_amount() == 1 - if(C.use(1)) - SET_FLAGS(tank_flags, TANK_FLAG_WIRED) - to_chat(user, SPAN_NOTICE("You attach [single ? "" : "some of "]\the [C] to \the [src].")) - update_icon(TRUE) - return - - if(isWirecutter(W)) - add_fingerprint(user) - if(GET_FLAGS(tank_flags, TANK_FLAG_WIRED) && proxyassembly.assembly) - - to_chat(user, "You carefully begin clipping the wires that attach to the tank.") - if(do_after(user, 10 SECONDS, src)) - CLEAR_FLAGS(tank_flags, TANK_FLAG_WIRED) - to_chat(user, "You cut the wire and remove the device.") - - var/obj/item/device/assembly_holder/assy = proxyassembly.assembly - if(assy.a_left && assy.a_right) - assy.dropInto(usr.loc) - assy.master = null - proxyassembly.assembly = null - else - if(!proxyassembly.assembly.a_left) - assy.a_right.dropInto(usr.loc) - assy.a_right.holder = null - assy.a_right = null - proxyassembly.assembly = null - qdel(assy) - update_icon(TRUE) - - else - to_chat(user, "You slip and bump the igniter!") - if(prob(85)) - proxyassembly.receive_signal() - - else if(GET_FLAGS(tank_flags, TANK_FLAG_WIRED)) - if(do_after(user, 1 SECOND, src, DO_PUBLIC_UNIQUE)) - to_chat(user, "You quickly clip the wire from the tank.") - CLEAR_FLAGS(tank_flags, TANK_FLAG_WIRED) - update_icon(TRUE) - - else - to_chat(user, "There are no wires to cut!") - - if(istype(W, /obj/item/device/assembly_holder)) - if(GET_FLAGS(tank_flags, TANK_FLAG_WIRED)) - add_fingerprint(user) - to_chat(user, "You begin attaching the assembly to \the [src].") - if(do_after(user, 5 SECONDS, src, DO_PUBLIC_UNIQUE)) - to_chat(user, "You finish attaching the assembly to \the [src].") - GLOB.bombers += "[key_name(user)] attached an assembly to a wired [src]. Temp: [air_contents.temperature-T0C]" - log_and_message_admins("attached an assembly to a wired [src]. Temp: [air_contents.temperature-T0C]", user) - assemble_bomb(W,user) - else - to_chat(user, "You stop attaching the assembly.") - else - to_chat(user, "You need to wire the device up first.") - - if(isWelder(W)) - var/obj/item/weldingtool/WT = W - if (GET_FLAGS(tank_flags, TANK_FLAG_FORCED)) - to_chat(user, SPAN_WARNING("\The [src]'s emergency relief valve must be closed before you can weld it shut!")) - return - if(WT.remove_fuel(1,user)) - add_fingerprint(user) - if(!GET_FLAGS(tank_flags, TANK_FLAG_WELDED)) - to_chat(user, "You begin welding the \the [src] emergency pressure relief valve.") - if(do_after(user, 4 SECONDS, src, DO_PUBLIC_UNIQUE)) - to_chat(user, "You carefully weld \the [src] emergency pressure relief valve shut. \The [src] may now rupture under pressure!") - SET_FLAGS(tank_flags, TANK_FLAG_WELDED) - CLEAR_FLAGS(tank_flags, TANK_FLAG_LEAKING) - else - GLOB.bombers += "[key_name(user)] attempted to weld a [src]. [air_contents.temperature-T0C]" - log_and_message_admins("attempted to weld a [src]. [air_contents.temperature-T0C]", user) - if(WT.welding) - to_chat(user, "You accidentally rake \the [W] across \the [src]!") - maxintegrity -= rand(2,6) - integrity = min(integrity,maxintegrity) - air_contents.add_thermal_energy(rand(2000,50000)) - else - to_chat(user, "The emergency pressure relief valve has already been welded.") - -/obj/item/tank/attack_self(mob/user as mob) - add_fingerprint(user) - if (!air_contents) - return - ui_interact(user) - -// There's GOT to be a better way to do this - if (proxyassembly.assembly) - proxyassembly.assembly.attack_self(user) - -/obj/item/tank/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1) - var/mob/living/carbon/location = null - - if(istype(loc, /obj/item/rig)) // check for tanks in rigs - if(istype(loc.loc, /mob/living/carbon)) - location = loc.loc - else if(istype(loc, /mob/living/carbon)) - location = loc - - var/using_internal - if(istype(location)) - if(location.internal==src) - using_internal = 1 - - // this is the data which will be sent to the ui - var/data[0] - data["tankPressure"] = round(air_contents && air_contents.return_pressure() ? air_contents.return_pressure() : 0) - data["releasePressure"] = round(distribute_pressure ? distribute_pressure : 0) - data["defaultReleasePressure"] = round(initial(distribute_pressure)) - data["maxReleasePressure"] = round(TANK_MAX_RELEASE_PRESSURE) - data["valveOpen"] = using_internal ? 1 : 0 - data["maskConnected"] = 0 - - if(istype(location)) - var/mask_check = 0 - - if(location.internal == src) // if tank is current internal - mask_check = 1 - else if(src in location) // or if tank is in the mobs possession - if(!location.internal) // and they do not have any active internals - mask_check = 1 - else if(istype(loc, /obj/item/rig) && (loc in location)) // or the rig is in the mobs possession - if(!location.internal) // and they do not have any active internals - mask_check = 1 - - if(mask_check) - if(location.wear_mask && (location.wear_mask.item_flags & ITEM_FLAG_AIRTIGHT)) - data["maskConnected"] = 1 - else if(istype(location, /mob/living/carbon/human)) - var/mob/living/carbon/human/H = location - if(H.head && (H.head.item_flags & ITEM_FLAG_AIRTIGHT)) - data["maskConnected"] = 1 - - // update the ui if it exists, returns null if no ui is passed/found - ui = SSnano.try_update_ui(user, src, ui_key, ui, data, force_open) - if (!ui) - // the ui does not exist, so we'll create a new() one - // for a list of parameters and their descriptions see the code docs in \code\modules\nano\nanoui.dm - ui = new(user, src, ui_key, "tanks.tmpl", "Tank", 500, 300) - // when the ui is first opened this is the data it will use - ui.set_initial_data(data) - // open the new ui window - ui.open() - // auto update every Master Controller tick - ui.set_auto_update(1) - -/obj/item/tank/Topic(user, href_list, state = GLOB.inventory_state) - ..() - -/obj/item/tank/OnTopic(user, href_list) - if (href_list["dist_p"]) - if (href_list["dist_p"] == "reset") - distribute_pressure = initial(distribute_pressure) - else if (href_list["dist_p"] == "max") - distribute_pressure = TANK_MAX_RELEASE_PRESSURE - else - var/cp = text2num(href_list["dist_p"]) - distribute_pressure += cp - distribute_pressure = min(max(round(distribute_pressure), 0), TANK_MAX_RELEASE_PRESSURE) - return TOPIC_REFRESH - - if (href_list["stat"]) - toggle_valve(usr) - return TOPIC_REFRESH - -/obj/item/tank/proc/toggle_valve(var/mob/user) - - var/mob/living/carbon/location - if(istype(loc,/mob/living/carbon)) - location = loc - else if(istype(loc,/obj/item/rig)) - var/obj/item/rig/rig = loc - if(rig.wearer) - location = rig.wearer - else - return - - if(location.internal == src) - to_chat(user, "You close the tank release valve.") - location.set_internals(null) - else - var/can_open_valve - if(location.wear_mask && (location.wear_mask.item_flags & ITEM_FLAG_AIRTIGHT)) - can_open_valve = 1 - else if(istype(location,/mob/living/carbon/human)) - var/mob/living/carbon/human/H = location - if(H.head && (H.head.item_flags & ITEM_FLAG_AIRTIGHT)) - can_open_valve = 1 - - if(can_open_valve) - to_chat(user, "You open \the [src] valve.") - location.set_internals(src) - else - to_chat(user, "You need something to connect to \the [src].") - -/obj/item/tank/remove_air(amount) - . = air_contents.remove(amount) - if(.) - queue_icon_update() - -/obj/item/tank/proc/remove_air_ratio(ratio, out_group_multiplier = 1) - . = air_contents.remove_ratio(ratio, out_group_multiplier) - if(.) - queue_icon_update() - -/obj/item/tank/proc/remove_air_by_flag(flag, amount) - . = air_contents.remove_by_flag(flag, amount) - queue_icon_update() - -/obj/item/tank/proc/air_adjust_gas(gasid, moles, update = 1) - . = air_contents.adjust_gas(gasid, moles, update) - if(.) - queue_icon_update() - -/obj/item/tank/return_air() - return air_contents - -/obj/item/tank/assume_air(datum/gas_mixture/giver) - air_contents.merge(giver) - check_status() - queue_icon_update() - return 1 - -/obj/item/tank/proc/remove_air_volume(volume_to_return) - if(!air_contents) - return null - - var/tank_pressure = air_contents.return_pressure() - if(tank_pressure < distribute_pressure) - distribute_pressure = tank_pressure - - var/datum/gas_mixture/removed = remove_air(distribute_pressure*volume_to_return/(R_IDEAL_GAS_EQUATION*air_contents.temperature)) - if(removed) - removed.volume = volume_to_return - return removed - -/obj/item/tank/Process() - //Allow for reactions - air_contents.react() //cooking up air tanks - add phoron and oxygen, then heat above PHORON_MINIMUM_BURN_TEMPERATURE - check_status() - -#define TANK_IDEAL_PRESSURE 1015 - -/obj/item/tank/on_update_icon(var/override) - - var/list/overlays_to_add - if(override && (proxyassembly.assembly || GET_FLAGS(tank_flags, TANK_FLAG_WIRED))) - LAZYADD(overlays_to_add, image(icon,"bomb_assembly")) - if(proxyassembly.assembly) - var/image/bombthing = image(proxyassembly.assembly.icon, proxyassembly.assembly.icon_state) - bombthing.overlays |= proxyassembly.assembly.overlays - bombthing.pixel_y = -1 - bombthing.pixel_x = -3 - LAZYADD(overlays_to_add, bombthing) - - if(gauge_icon) - var/gauge_pressure = 0 - if(air_contents) - gauge_pressure = air_contents.return_pressure() - if(gauge_pressure > TANK_IDEAL_PRESSURE) - gauge_pressure = -1 - else - gauge_pressure = round((gauge_pressure/TANK_IDEAL_PRESSURE)*gauge_cap) - if(override || (previous_gauge_pressure != gauge_pressure)) - var/indicator = "[gauge_icon][(gauge_pressure == -1) ? "overload" : gauge_pressure]" - if(!tank_gauge_cache[indicator]) - tank_gauge_cache[indicator] = image(icon, indicator) - LAZYADD(overlays_to_add, tank_gauge_cache[indicator]) - previous_gauge_pressure = gauge_pressure - - overlays = overlays_to_add - -#undef TANK_IDEAL_PRESSURE - -//Handle exploding, leaking, and rupturing of the tank -/obj/item/tank/proc/check_status() - set waitfor = FALSE - if(!air_contents) - return 0 - - var/pressure = air_contents.return_pressure() - - if(pressure > TANK_FRAGMENT_PRESSURE) - if(integrity <= 7) - if(!istype(loc,/obj/item/device/transfer_valve)) - log_and_message_admins("Explosive tank rupture! last key to touch the tank was [fingerprintslast].") - - //Give the gas a chance to build up more pressure through reacting - air_contents.react() - air_contents.react() - air_contents.react() - - pressure = air_contents.return_pressure() - var/strength = ((pressure-TANK_FRAGMENT_PRESSURE)/TANK_FRAGMENT_SCALE) - - var/mult = ((air_contents.volume/140)**(1/2)) * (air_contents.total_moles**2/3)/((29*0.64) **2/3) //tanks appear to be experiencing a reduction on scale of about 0.64 total moles - //tanks appear to be experiencing a reduction on scale of about 0.64 total moles - - var/turf/simulated/T = get_turf(src) - T.hotspot_expose(air_contents.temperature, 70, 1) - if(!T) - return - - T.assume_air(air_contents) - explosion( - get_turf(loc), - round(min(BOMBCAP_DVSTN_RADIUS, ((mult)*strength)*0.15)), - round(min(BOMBCAP_HEAVY_RADIUS, ((mult)*strength)*0.35)), - round(min(BOMBCAP_LIGHT_RADIUS, ((mult)*strength)*0.80)), - round(min(BOMBCAP_FLASH_RADIUS, ((mult)*strength)*1.20)), - ) - - var/num_fragments = round(rand(8,10) * sqrt(strength * mult)) - fragmentate(T, num_fragments, 7, list(/obj/item/projectile/bullet/pellet/fragment/tank/small = 7,/obj/item/projectile/bullet/pellet/fragment/tank = 2,/obj/item/projectile/bullet/pellet/fragment/strong = 1)) - - if(istype(loc, /obj/item/device/transfer_valve)) - var/obj/item/device/transfer_valve/TTV = loc - TTV.remove_tank(src) - qdel(TTV) - - if(src) - qdel(src) - else - integrity -=7 - else if(pressure > TANK_RUPTURE_PRESSURE) - #ifdef FIREDBG - log_debug("[x],[y] tank is rupturing: [pressure] kPa, integrity [integrity]") - #endif - - if(integrity <= 0) - var/turf/simulated/T = get_turf(src) - if(!T) - return - T.assume_air(air_contents) - playsound(get_turf(src), 'sound/weapons/gunshot/shotgun.ogg', 20, 1) - visible_message("[icon2html(src, viewers(get_turf(src)))] \The [src] flies apart!", "You hear a bang!") - T.hotspot_expose(air_contents.temperature, 70, 1) - - var/strength = 1+((pressure-TANK_LEAK_PRESSURE)/TANK_FRAGMENT_SCALE) - - var/mult = (air_contents.total_moles**2/3)/((29*0.64) **2/3) //tanks appear to be experiencing a reduction on scale of about 0.64 total moles - - var/num_fragments = round(rand(6,8) * sqrt(strength * mult)) //Less chunks, but bigger - fragmentate(T, num_fragments, 7, list(/obj/item/projectile/bullet/pellet/fragment/tank/small = 1,/obj/item/projectile/bullet/pellet/fragment/tank = 5,/obj/item/projectile/bullet/pellet/fragment/strong = 4)) - - if(istype(loc, /obj/item/device/transfer_valve)) - var/obj/item/device/transfer_valve/TTV = loc - TTV.remove_tank(src) - - qdel(src) - else - integrity-= 5 - else if(pressure && (GET_FLAGS(tank_flags, TANK_FLAG_FORCED) || pressure > TANK_LEAK_PRESSURE || air_contents.temperature - T0C > failure_temp)) - if((integrity <= 19 || GET_FLAGS(tank_flags, TANK_FLAG_LEAKING | TANK_FLAG_FORCED)) && !GET_FLAGS(tank_flags, TANK_FLAG_WELDED)) - var/turf/simulated/T = get_turf(src) - if(!T) - return - var/datum/gas_mixture/environment = loc.return_air() - var/env_pressure = environment.return_pressure() - - var/release_ratio = clamp(0.002, sqrt(max(pressure-env_pressure,0)/pressure),1) - var/datum/gas_mixture/leaked_gas = air_contents.remove_ratio(release_ratio) - //dynamic air release based on ambient pressure - - T.assume_air(leaked_gas) - if(!GET_FLAGS(tank_flags, TANK_FLAG_LEAKING)) - visible_message("[icon2html(src, viewers(get_turf(src)))] \The [src] relief valve flips open with a hiss!", "You hear hissing.") - playsound(loc, 'sound/effects/spray.ogg', 10, 1, -3) - SET_FLAGS(tank_flags, TANK_FLAG_LEAKING) - #ifdef FIREDBG - log_debug("[x],[y] tank is leaking: [pressure] kPa, integrity [integrity]") - #endif - else - integrity-= 2 - else - if(integrity < maxintegrity) - integrity++ - if(GET_FLAGS(tank_flags, TANK_FLAG_LEAKING)) - integrity++ - if(integrity == maxintegrity) - CLEAR_FLAGS(tank_flags, TANK_FLAG_LEAKING) - -///////////////////////////////// -///Prewelded tanks -///////////////////////////////// - -/obj/item/tank/phoron/welded - tank_flags = TANK_FLAG_WELDED -/obj/item/tank/oxygen/welded - tank_flags = TANK_FLAG_WELDED - -///////////////////////////////// -///Onetankbombs (added as actual items) -///////////////////////////////// - -/obj/item/tank/proc/onetankbomb() - var/phoron_amt = 4 + rand(4) - var/oxygen_amt = 6 + rand(8) - - air_contents.gas[GAS_PHORON] = phoron_amt - air_contents.gas[GAS_OXYGEN] = oxygen_amt - air_contents.update_values() - SET_FLAGS(tank_flags, TANK_FLAG_WELDED | TANK_FLAG_WIRED) - air_contents.temperature = PHORON_MINIMUM_BURN_TEMPERATURE-1 - - var/obj/item/device/assembly_holder/H = new(src) - proxyassembly.assembly = H - H.master = proxyassembly - - H.update_icon() - update_icon(TRUE) - -/obj/item/tank/phoron/onetankbomb/Initialize() - . = ..() - onetankbomb() - -/obj/item/tank/oxygen/onetankbomb/Initialize() - . = ..() - onetankbomb() - -///////////////////////////////// -///Pulled from rewritten bomb.dm -///////////////////////////////// - -/obj/item/device/tankassemblyproxy - name = "Tank assembly proxy" - desc = "Used as a stand in to trigger single tank assemblies... but you shouldn't see this." - var/obj/item/tank/tank = null - var/obj/item/device/assembly_holder/assembly = null - -/obj/item/device/tankassemblyproxy/receive_signal() //This is mainly called by the sensor through sense() to the holder, and from the holder to here. - tank.ignite() //boom (or not boom if you made shijwtty mix) - -/obj/item/tank/proc/assemble_bomb(W,user) //Bomb assembly proc. This turns assembly+tank into a bomb - var/obj/item/device/assembly_holder/S = W - var/mob/M = user - if(!S.secured) //Check if the assembly is secured - return - if(isigniter(S.a_left) == isigniter(S.a_right)) //Check if either part of the assembly has an igniter, but if both parts are igniters, then fuck it - return - - if(!M.unequip_item()) - return //Remove the assembly from your hands - if(!M.unEquip(src)) - return //Remove the tank from your character,in case you were holding it - M.put_in_hands(src) //Equips the bomb if possible, or puts it on the floor. - - proxyassembly.assembly = S //Tell the bomb about its assembly part - S.master = proxyassembly //Tell the assembly about its new owner - S.forceMove(src) //Move the assembly - - update_icon(TRUE) - -/obj/item/tank/proc/ignite() //This happens when a bomb is told to explode - var/obj/item/device/assembly_holder/assy = proxyassembly.assembly - var/ign = assy.a_right - var/obj/item/other = assy.a_left - - if (isigniter(assy.a_left)) - ign = assy.a_left - other = assy.a_right - - if(other) - other.dropInto(get_turf(src)) - qdel(ign) - assy.master = null - proxyassembly.assembly = null - qdel(assy) - update_icon(TRUE) - - air_contents.add_thermal_energy(15000) - -/obj/item/device/tankassemblyproxy/on_update_icon() - tank.update_icon() - -/obj/item/device/tankassemblyproxy/HasProximity(atom/movable/AM as mob|obj) - if(assembly) - assembly.HasProximity(AM) - -//Fragmentation projectiles - -/obj/item/projectile/bullet/pellet/fragment/tank - name = "metal fragment" - damage = 9 //Big chunks flying off. - range_step = 1 //controls damage falloff with distance. projectiles lose a "pellet" each time they travel this distance. Can be a non-integer. - - base_spread = 0 //causes it to be treated as a shrapnel explosion instead of cone - spread_step = 20 - - silenced = TRUE - fire_sound = null - no_attack_log = TRUE - muzzle_type = null - pellets = 1 - -/obj/item/projectile/bullet/pellet/fragment/tank/small - name = "small metal fragment" - damage = 6 - -/obj/item/projectile/bullet/pellet/fragment/tank/big - name = "large metal fragment" - damage = 17 diff --git a/code/game/objects/items/weapons/tape.dm b/code/game/objects/items/weapons/tape.dm deleted file mode 100644 index 0a463f36ebe8d..0000000000000 --- a/code/game/objects/items/weapons/tape.dm +++ /dev/null @@ -1,158 +0,0 @@ -/obj/item/tape_roll - name = "duct tape" - desc = "A roll of sticky tape. Possibly for taping ducks... or was that ducts?" - icon = 'icons/obj/bureaucracy.dmi' - icon_state = "taperoll" - w_class = ITEM_SIZE_SMALL - -/obj/item/tape_roll/attack(var/mob/living/carbon/human/H, var/mob/user) - if(istype(H)) - if(user.zone_sel.selecting == BP_EYES) - - if(!H.organs_by_name[BP_HEAD]) - to_chat(user, "\The [H] doesn't have a head.") - return - if(!H.has_eyes()) - to_chat(user, "\The [H] doesn't have any eyes.") - return - if(H.glasses) - to_chat(user, "\The [H] is already wearing somethign on their eyes.") - return - if(H.head && (H.head.body_parts_covered & FACE)) - to_chat(user, "Remove their [H.head] first.") - return - user.visible_message("\The [user] begins taping over \the [H]'s eyes!") - - if(!do_after(user, 3 SECONDS, H, DO_PUBLIC_UNIQUE)) - return - - // Repeat failure checks. - if(!H || !src || !H.organs_by_name[BP_HEAD] || !H.has_eyes() || H.glasses || (H.head && (H.head.body_parts_covered & FACE))) - return - - playsound(src, 'sound/effects/tape.ogg',25) - user.visible_message("\The [user] has taped up \the [H]'s eyes!") - H.equip_to_slot_or_del(new /obj/item/clothing/glasses/blindfold/tape(H), slot_glasses) - - else if(user.zone_sel.selecting == BP_MOUTH || user.zone_sel.selecting == BP_HEAD) - if(!H.organs_by_name[BP_HEAD]) - to_chat(user, "\The [H] doesn't have a head.") - return - if(!H.check_has_mouth()) - to_chat(user, "\The [H] doesn't have a mouth.") - return - if(H.wear_mask) - to_chat(user, "\The [H] is already wearing a mask.") - return - if(H.head && (H.head.body_parts_covered & FACE)) - to_chat(user, "Remove their [H.head] first.") - return - playsound(src, 'sound/effects/tape.ogg',25) - user.visible_message("\The [user] begins taping up \the [H]'s mouth!") - - if(!do_after(user, 3 SECONDS, H, DO_PUBLIC_UNIQUE)) - return - - // Repeat failure checks. - if(!H || !src || !H.organs_by_name[BP_HEAD] || !H.check_has_mouth() || H.wear_mask || (H.head && (H.head.body_parts_covered & FACE))) - return - playsound(src, 'sound/effects/tape.ogg',25) - user.visible_message("\The [user] has taped up \the [H]'s mouth!") - H.equip_to_slot_or_del(new /obj/item/clothing/mask/muzzle/tape(H), slot_wear_mask) - - else if(user.zone_sel.selecting == BP_R_HAND || user.zone_sel.selecting == BP_L_HAND) - playsound(src, 'sound/effects/tape.ogg',25) - var/obj/item/handcuffs/cable/tape/T = new(user) - if(!T.place_handcuffs(H, user)) - qdel(T) - - else if(user.zone_sel.selecting == BP_CHEST) - if(H.wear_suit && istype(H.wear_suit, /obj/item/clothing/suit/space)) - H.wear_suit.attackby(src, user)//everything is handled by attackby - else - to_chat(user, "\The [H] isn't wearing a spacesuit for you to reseal.") - - else - return ..() - return 1 - -/obj/item/tape_roll/proc/stick(var/obj/item/W, mob/user) - if(!istype(W, /obj/item/paper) || istype(W, /obj/item/paper/sticky) || !user.unEquip(W)) - return - var/obj/item/ducttape/tape = new(get_turf(src)) - tape.attach(W) - user.put_in_hands(tape) - -/obj/item/ducttape - name = "piece of tape" - desc = "A piece of sticky tape." - icon = 'icons/obj/bureaucracy.dmi' - icon_state = "tape" - w_class = ITEM_SIZE_TINY - layer = ABOVE_OBJ_LAYER - - var/obj/item/stuck = null - -/obj/item/ducttape/attack_hand(var/mob/user) - anchored = FALSE // Unattach it from whereever it's on, if anything. - return ..() - -/obj/item/ducttape/Initialize() - . = ..() - item_flags |= ITEM_FLAG_NO_BLUDGEON - -/obj/item/ducttape/examine() - return stuck ? stuck.examine(arglist(args)) : ..() - -/obj/item/ducttape/proc/attach(var/obj/item/W) - stuck = W - anchored = TRUE - W.forceMove(src) - icon_state = W.icon_state + "_taped" - name = W.name + " (taped)" - overlays = W.overlays - -/obj/item/ducttape/attack_self(mob/user) - if(!stuck) - return - - to_chat(user, "You remove \the [initial(name)] from [stuck].") - user.put_in_hands(stuck) - stuck = null - qdel(src) - -/obj/item/ducttape/afterattack(var/A, mob/user, flag, params) - - if(!in_range(user, A) || istype(A, /obj/machinery/door) || !stuck) - return - - var/turf/target_turf = get_turf(A) - var/turf/source_turf = get_turf(user) - - var/dir_offset = 0 - if(target_turf != source_turf) - dir_offset = get_dir(source_turf, target_turf) - if(!(dir_offset in GLOB.cardinal)) - to_chat(user, "You cannot reach that from here.")// can only place stuck papers in cardinal directions, to - return // reduce papers around corners issue. - - if(!user.unEquip(src, source_turf)) - return - playsound(src, 'sound/effects/tape.ogg',25) - - layer = ABOVE_WINDOW_LAYER - - if(params) - var/list/mouse_control = params2list(params) - if(mouse_control["icon-x"]) - pixel_x = text2num(mouse_control["icon-x"]) - 16 - if(dir_offset & EAST) - pixel_x += 32 - else if(dir_offset & WEST) - pixel_x -= 32 - if(mouse_control["icon-y"]) - pixel_y = text2num(mouse_control["icon-y"]) - 16 - if(dir_offset & NORTH) - pixel_y += 32 - else if(dir_offset & SOUTH) - pixel_y -= 32 diff --git a/code/game/objects/items/weapons/teleportation.dm b/code/game/objects/items/weapons/teleportation.dm deleted file mode 100644 index f4f0bc2b662cc..0000000000000 --- a/code/game/objects/items/weapons/teleportation.dm +++ /dev/null @@ -1,120 +0,0 @@ -/* Teleportation devices. - * Contains: - * Locator - * Hand-tele - */ - -/* - * Locator - */ -/obj/item/locator - name = "locator" - desc = "Used to track those with locater implants." - icon = 'icons/obj/locator.dmi' - icon_state = "locator" - var/temp = null - var/frequency = 1451 - var/broadcasting = null - var/listening = 1.0 - obj_flags = OBJ_FLAG_CONDUCTIBLE - w_class = ITEM_SIZE_SMALL - item_state = "electronic" - throw_speed = 4 - throw_range = 20 - origin_tech = list(TECH_MAGNET = 1) - matter = list(MATERIAL_ALUMINIUM = 400) - -/obj/item/locator/attack_self(mob/user as mob) - user.set_machine(src) - var/dat - if (src.temp) - dat = "[src.temp]

              Clear" - else - dat = {" -Persistent Signal Locator
              -Frequency: -- -- [format_frequency(src.frequency)] -+ -+
              - -Refresh"} - show_browser(user, dat, "window=radio") - onclose(user, "radio") - return - -/obj/item/locator/Topic(href, href_list) - ..() - if (usr.stat || usr.restrained()) - return - var/turf/current_location = get_turf(usr)//What turf is the user on? - if(!current_location||current_location.z==2)//If turf was not found or they're on z level 2. - to_chat(usr, "The [src] is malfunctioning.") - return - if ((usr.contents.Find(src) || (in_range(src, usr) && istype(src.loc, /turf)))) - usr.set_machine(src) - if (href_list["refresh"]) - src.temp = "Persistent Signal Locator
              " - var/turf/sr = get_turf(src) - - if (sr) - src.temp += "Located Beacons:
              " - - for(var/obj/machinery/tele_beacon/W in world) - if(!W.functioning()) - continue - var/turf/tr = get_turf(W) - if (tr.z == sr.z && tr) - var/direct = max(abs(tr.x - sr.x), abs(tr.y - sr.y)) - if (direct < 5) - direct = "very strong" - else - if (direct < 10) - direct = "strong" - else - if (direct < 20) - direct = "weak" - else - direct = "very weak" - src.temp += "[W.beacon_name]-[dir2text(get_dir(sr, tr))]-[direct]
              " - - src.temp += "Extranneous Signals:
              " - for (var/obj/item/implant/tracking/W in world) - if (!W.implanted || !(istype(W.loc,/obj/item/organ/external) || ismob(W.loc))) - continue - else - var/mob/M = W.loc - if (M.stat == 2) - if (M.timeofdeath + 6000 < world.time) - continue - - var/turf/tr = get_turf(W) - if (tr.z == sr.z && tr) - var/direct = max(abs(tr.x - sr.x), abs(tr.y - sr.y)) - if (direct < 20) - if (direct < 5) - direct = "very strong" - else - if (direct < 10) - direct = "strong" - else - direct = "weak" - src.temp += "[W.id]-[dir2text(get_dir(sr, tr))]-[direct]
              " - - src.temp += "You are at \[[sr.x],[sr.y],[sr.z]\] in orbital coordinates.

              Refresh
              " - else - src.temp += "Processing Error: Unable to locate orbital position.
              " - else - if (href_list["freq"]) - src.frequency += text2num(href_list["freq"]) - src.frequency = sanitize_frequency(src.frequency) - else - if (href_list["temp"]) - src.temp = null - if (istype(src.loc, /mob)) - attack_self(src.loc) - else - for(var/mob/M in viewers(1, src)) - if (M.client) - src.attack_self(M) - return diff --git a/code/game/objects/items/weapons/tools/crowbar.dm b/code/game/objects/items/weapons/tools/crowbar.dm deleted file mode 100644 index fdeef23e5e15d..0000000000000 --- a/code/game/objects/items/weapons/tools/crowbar.dm +++ /dev/null @@ -1,74 +0,0 @@ -/obj/item/crowbar - name = "crowbar" - desc = "A heavy crowbar of solid steel, good and solid in your hand." - icon = 'icons/obj/tools.dmi' - icon_state = "crowbar" - obj_flags = OBJ_FLAG_CONDUCTIBLE - slot_flags = SLOT_BELT - force = 14 - attack_cooldown = 2*DEFAULT_WEAPON_COOLDOWN - melee_accuracy_bonus = -10 - throwforce = 7 - throw_range = 3 - item_state = "crowbar" - base_parry_chance = 15 - w_class = ITEM_SIZE_NORMAL - origin_tech = list(TECH_ENGINEERING = 1) - matter = list(MATERIAL_STEEL = 140) - center_of_mass = "x=16;y=20" - attack_verb = list("attacked", "bashed", "battered", "bludgeoned", "whacked") - -/obj/item/crowbar/red - icon_state = "red_crowbar" - item_state = "crowbar_red" - -/obj/item/crowbar/prybar - name = "pry bar" - desc = "A steel bar with a wedge. It comes in a variety of configurations and colours - collect them all." - icon_state = "prybar_preview" - item_state = "crowbar" - force = 4 - throwforce = 6 - throw_range = 5 - base_parry_chance = 0 - w_class = ITEM_SIZE_SMALL - matter = list(MATERIAL_STEEL = 80) - - var/prybar_types = list("1","2","3","4","5") - var/valid_colours = list(COLOR_RED_GRAY, COLOR_BLUE_GRAY, COLOR_BOTTLE_GREEN, COLOR_MAROON, COLOR_DARK_BROWN, COLOR_VIOLET, COLOR_GRAY20) - -/obj/item/crowbar/prybar/Initialize() - var/shape = pick(prybar_types) - icon_state = "bar[shape]_handle" - color = pick(valid_colours) - overlays += overlay_image(icon, "bar[shape]_hardware", flags=RESET_COLOR) - . = ..() - -/obj/item/crowbar/emergency_forcing_tool - name = "emergency forcing tool" - desc = "This is an emergency forcing tool, made of steel bar with a wedge on one end, and a hatchet on the other end. It has a blue plastic grip." - icon_state = "emergency_forcing_tool" - item_state = "emergency_forcing_tool" - force = 12 - sharp = TRUE - edge = TRUE - throwforce = 6 - throw_range = 5 - w_class = ITEM_SIZE_NORMAL - matter = list(MATERIAL_STEEL = 150) - attack_verb = list("attacked", "bashed", "battered", "bludgeoned", "whacked", "attacked", "slashed", "torn", "ripped", "cut") - -/obj/item/crowbar/emergency_forcing_tool/resolve_attackby(atom/A)//extra dmg against glass, it's an emergency forcing tool, it's gotta be good at something - if(istype(A, /obj/structure/window)) - force = initial(force) * 2 - else - force = initial(force) - . = ..() - -/obj/item/crowbar/emergency_forcing_tool/IsCrowbar() - if(ismob(loc)) - var/mob/M = loc - if(M.a_intent && M.a_intent == I_HURT) - return FALSE - - return TRUE diff --git a/code/game/objects/items/weapons/tools/screwdriver.dm b/code/game/objects/items/weapons/tools/screwdriver.dm deleted file mode 100644 index 9a361a3f7db66..0000000000000 --- a/code/game/objects/items/weapons/tools/screwdriver.dm +++ /dev/null @@ -1,39 +0,0 @@ -/obj/item/screwdriver - name = "screwdriver" - desc = "Your archetypal flathead screwdriver, with a nice, heavy polymer handle." - icon = 'icons/obj/tools.dmi' - icon_state = "screwdriver_preview" - item_state = "screwdriver" - obj_flags = OBJ_FLAG_CONDUCTIBLE - slot_flags = SLOT_BELT | SLOT_EARS - force = 4.0 - w_class = ITEM_SIZE_TINY - throwforce = 5.0 - throw_speed = 3 - throw_range = 5 - matter = list(MATERIAL_STEEL = 75) - center_of_mass = "x=16;y=7" - attack_verb = list("stabbed") - lock_picking_level = 5 - sharp = TRUE - - var/build_from_parts = TRUE - var/valid_colours = list(COLOR_RED, COLOR_CYAN_BLUE, COLOR_PURPLE, COLOR_CHESTNUT, COLOR_GREEN, COLOR_TEAL, COLOR_ASSEMBLY_YELLOW, COLOR_BOTTLE_GREEN, COLOR_VIOLET, COLOR_GRAY80, COLOR_GRAY20) - -/obj/item/screwdriver/Initialize() - if(build_from_parts) - icon_state = "screwdriver_handle" - color = pick(valid_colours) - overlays += overlay_image(icon, "screwdriver_hardware", flags=RESET_COLOR) - if (prob(75)) - src.pixel_y = rand(0, 16) - . = ..() - -/obj/item/screwdriver/attack(mob/living/carbon/M as mob, mob/living/carbon/user as mob) - if(!istype(M) || user.a_intent == "help") - return ..() - if(user.zone_sel.selecting != BP_EYES && user.zone_sel.selecting != BP_HEAD) - return ..() - if((MUTATION_CLUMSY in user.mutations) && prob(50)) - M = user - return eyestab(M,user) \ No newline at end of file diff --git a/code/game/objects/items/weapons/tools/weldingtool.dm b/code/game/objects/items/weapons/tools/weldingtool.dm deleted file mode 100644 index ba8afc3e8698f..0000000000000 --- a/code/game/objects/items/weapons/tools/weldingtool.dm +++ /dev/null @@ -1,389 +0,0 @@ -/obj/item/weldingtool - name = "welding tool" - icon = 'icons/obj/tools.dmi' - icon_state = "welder" - item_state = "welder" - desc = "A portable welding gun with a port for attaching fuel tanks." - obj_flags = OBJ_FLAG_CONDUCTIBLE - slot_flags = SLOT_BELT - center_of_mass = "x=14;y=15" - waterproof = FALSE - force = 5 - throwforce = 5 - throw_speed = 1 - throw_range = 5 - w_class = ITEM_SIZE_SMALL - matter = list(MATERIAL_STEEL = 70, MATERIAL_GLASS = 30) - origin_tech = list(TECH_ENGINEERING = 1) - - var/welding = 0 //Whether or not the welding tool is off(0), on(1) or currently welding(2) - var/status = 1 //Whether the welder is secured or unsecured (able to attach rods to it to make a flamethrower) - var/welding_resource = "welding fuel" - var/obj/item/welder_tank/tank = /obj/item/welder_tank // where the fuel is stored - -/obj/item/weldingtool/Initialize() - if(ispath(tank)) - tank = new tank - w_class = tank.size_in_use - force = tank.unlit_force - - set_extension(src, /datum/extension/base_icon_state, icon_state) - update_icon() - - . = ..() - -/obj/item/weldingtool/Destroy() - if(welding) - STOP_PROCESSING(SSobj, src) - - QDEL_NULL(tank) - - return ..() - -/obj/item/weldingtool/examine(mob/user, distance) - . = ..() - if (!tank) - to_chat(user, "There is no [welding_resource] source attached.") - else - to_chat(user, (distance <= 1 ? "It has [get_fuel()] [welding_resource] remaining. " : "") + "[tank] is attached.") - -/obj/item/weldingtool/attackby(obj/item/W as obj, mob/user as mob) - if(welding) - to_chat(user, SPAN_DANGER("Stop welding first!")) - return - - if(isScrewdriver(W)) - status = !status - if(status) - to_chat(user, SPAN_NOTICE("You secure the welder.")) - else - to_chat(user, SPAN_NOTICE("The welder can now be attached and modified.")) - src.add_fingerprint(user) - return - - if((!status) && (istype(W,/obj/item/stack/material/rods))) - var/obj/item/stack/material/rods/R = W - R.use(1) - var/obj/item/flamethrower/F = new/obj/item/flamethrower(user.loc) - user.drop_from_inventory(src, F) - F.weldtool = src - master = F - add_fingerprint(user) - return - - if (istype(W, /obj/item/welder_tank)) - if (tank) - to_chat(user, SPAN_WARNING("\The [src] already has a tank attached - remove it first.")) - return - if (user.get_active_hand() != src && user.get_inactive_hand() != src) - to_chat(user, SPAN_WARNING("You must hold the welder in your hands to attach a tank.")) - return - if (!user.unEquip(W, src)) - return - tank = W - user.visible_message("[user] slots \a [W] into \the [src].", "You slot \a [W] into \the [src].") - w_class = tank.size_in_use - force = tank.unlit_force - update_icon() - return - - ..() - - -/obj/item/weldingtool/attack_hand(mob/user as mob) - if (tank && user.get_inactive_hand() == src) - if (!welding) - user.visible_message("[user] removes \the [tank] from \the [src].", "You remove \the [tank] from \the [src].") - user.put_in_hands(tank) - tank = null - w_class = initial(w_class) - force = initial(force) - update_icon() - else - to_chat(user, SPAN_DANGER("Turn off the welder first!")) - - else - ..() - -/obj/item/weldingtool/water_act() - if(welding && !waterproof) - setWelding(0) - -/obj/item/weldingtool/Process() - if(welding) - if((!waterproof && submerged()) || !remove_fuel(0.05)) - setWelding(0) - -/obj/item/weldingtool/afterattack(var/obj/O, var/mob/user, proximity) - if(!proximity) - return - - if(istype(O, /obj/structure/reagent_dispensers/fueltank) && get_dist(src,O) <= 1 && !welding) - if(!tank) - to_chat(user, SPAN_WARNING("\The [src] has no tank attached!")) - return - if (!tank.can_refuel) - to_chat(user, SPAN_WARNING("\The [tank] does not have a refuelling port.")) - return - O.reagents.trans_to_obj(tank, tank.max_fuel) - to_chat(user, SPAN_NOTICE("You refuel \the [tank].")) - playsound(src.loc, 'sound/effects/refill.ogg', 50, 1, -6) - return - - if(welding) - remove_fuel(1) - var/turf/location = get_turf(user) - if(isliving(O)) - var/mob/living/L = O - L.IgniteMob() - else if(istype(O)) - O.HandleObjectHeating(src, user, 700) - if (istype(location, /turf)) - location.hotspot_expose(700, 50, 1) - return - -/obj/item/weldingtool/attack_self(mob/user as mob) - setWelding(!welding, usr) - return - -//Returns the amount of fuel in the welder -/obj/item/weldingtool/proc/get_fuel() - return tank ? tank.reagents.get_reagent_amount(/datum/reagent/fuel) : 0 - -//Removes fuel from the welding tool. If a mob is passed, it will perform an eyecheck on the mob. This should probably be renamed to use() -/obj/item/weldingtool/proc/remove_fuel(var/amount = 1, var/mob/M = null) - if(!welding) - return 0 - if(get_fuel() >= amount) - burn_fuel(amount) - if(M) - M.welding_eyecheck()//located in mob_helpers.dm - set_light(0.7, 2, 5, l_color = COLOR_LIGHT_CYAN) - addtimer(CALLBACK(src, /atom/proc/update_icon), 5) - return 1 - else - if(M) - to_chat(M, SPAN_NOTICE("You need more [welding_resource] to complete this task.")) - return 0 - -/obj/item/weldingtool/proc/burn_fuel(var/amount) - if(!tank) - return - - var/mob/living/in_mob = null - - //consider ourselves in a mob if we are in the mob's contents and not in their hands - if(isliving(src.loc)) - var/mob/living/L = src.loc - if(!(L.l_hand == src || L.r_hand == src)) - in_mob = L - - if(in_mob) - amount = max(amount, 2) - tank.reagents.trans_type_to(in_mob, /datum/reagent/fuel, amount) - in_mob.IgniteMob() - - else - tank.reagents.remove_reagent(/datum/reagent/fuel, amount) - var/turf/location = get_turf(src.loc) - if(location) - location.hotspot_expose(700, 5) - -//Returns whether or not the welding tool is currently on. -/obj/item/weldingtool/proc/isOn() - return src.welding - -/obj/item/weldingtool/get_storage_cost() - if(isOn()) - return ITEM_SIZE_NO_CONTAINER - return ..() - -/obj/item/weldingtool/on_update_icon() - ..() - overlays.Cut() - if(tank) - overlays += image('icons/obj/tools.dmi', "welder_[tank.icon_state]") - if(welding) - overlays += image('icons/obj/tools.dmi', "welder_on") - set_light(0.6, 0.5, 2.5, l_color =COLOR_PALE_ORANGE) - else - set_light(0) - item_state = welding ? "welder1" : "welder" - var/mob/M = loc - if(istype(M)) - M.update_inv_l_hand() - M.update_inv_r_hand() - -//Sets the welding state of the welding tool. If you see W.welding = 1 anywhere, please change it to W.setWelding(1) -//so that the welding tool updates accordingly -/obj/item/weldingtool/proc/setWelding(var/set_welding, var/mob/M) - if (!status) - return - - if(!welding && !waterproof && submerged()) - if(M) - to_chat(M, SPAN_WARNING("You cannot light \the [src] underwater.")) - return - - var/turf/T = get_turf(src) - //If we're turning it on - if(set_welding && !welding) - if (get_fuel() > 0) - if(M) - to_chat(M, SPAN_NOTICE("You switch the [src] on.")) - else if(T) - T.visible_message(SPAN_WARNING("\The [src] turns on.")) - if (istype(src, /obj/item/weldingtool/electric)) - src.force = 11 - src.damtype = DAMAGE_SHOCK - else - src.force = tank.lit_force - src.damtype = DAMAGE_BURN - welding = 1 - update_icon() - START_PROCESSING(SSobj, src) - else - if(M) - to_chat(M, SPAN_NOTICE("You need more [welding_resource] to complete this task.")) - return - //Otherwise - else if(!set_welding && welding) - STOP_PROCESSING(SSobj, src) - if(M) - to_chat(M, SPAN_NOTICE("You switch \the [src] off.")) - else if(T) - T.visible_message(SPAN_WARNING("\The [src] turns off.")) - if (istype(src, /obj/item/weldingtool/electric)) - src.force = initial(force) - else - src.force = tank.unlit_force - src.damtype = DAMAGE_BRUTE - src.welding = 0 - update_icon() - -/obj/item/weldingtool/attack(mob/living/M, mob/living/user, target_zone) - if(ishuman(M)) - var/mob/living/carbon/human/H = M - var/obj/item/organ/external/S = H.organs_by_name[target_zone] - - if(!S || !BP_IS_ROBOTIC(S) || user.a_intent != I_HELP) - return ..() - - if(BP_IS_BRITTLE(S)) - to_chat(user, SPAN_WARNING("\The [M]'s [S.name] is hard and brittle - \the [src] cannot repair it.")) - return 1 - - if(!welding) - to_chat(user, SPAN_WARNING("You'll need to turn [src] on to patch the damage on [M]'s [S.name]!")) - return 1 - - if(S.robo_repair(15, DAMAGE_BRUTE, "some dents", src, user)) - remove_fuel(1, user) - - else - return ..() - -/obj/item/weldingtool/mini - tank = /obj/item/welder_tank/mini - -/obj/item/weldingtool/largetank - tank = /obj/item/welder_tank/large - -/obj/item/weldingtool/hugetank - tank = /obj/item/welder_tank/huge - -/obj/item/weldingtool/experimental - tank = /obj/item/welder_tank/experimental - -/////////////////////// -//Welding tool tanks// -///////////////////// -/obj/item/welder_tank - name = "\improper welding fuel tank" - desc = "An interchangeable fuel tank meant for a welding tool." - icon = 'icons/obj/tools.dmi' - icon_state = "tank_normal" - w_class = ITEM_SIZE_SMALL - force = 5 - throwforce = 5 - var/max_fuel = 20 - var/can_refuel = 1 - var/size_in_use = ITEM_SIZE_NORMAL - var/unlit_force = 7 - var/lit_force = 11 - -/obj/item/welder_tank/Initialize() - create_reagents(max_fuel) - reagents.add_reagent(/datum/reagent/fuel, max_fuel) - . = ..() - -/obj/item/welder_tank/afterattack(obj/O as obj, mob/user as mob, proximity) - if (!proximity) - return - if (istype(O, /obj/structure/reagent_dispensers/fueltank) && get_dist(src, O) <= 1) - if (!can_refuel) - to_chat(user, SPAN_DANGER("\The [src] does not have a refuelling port.")) - return - O.reagents.trans_to_obj(src, max_fuel) - to_chat(user, SPAN_NOTICE("You refuel \the [src].")) - playsound(src.loc, 'sound/effects/refill.ogg', 50, 1, -6) - -/obj/item/welder_tank/mini - name = "small welding fuel tank" - icon_state = "tank_small" - w_class = ITEM_SIZE_TINY - max_fuel = 5 - force = 4 - throwforce = 4 - size_in_use = ITEM_SIZE_SMALL - unlit_force = 5 - lit_force = 7 - -/obj/item/welder_tank/large - name = "large welding fuel tank" - icon_state = "tank_large" - w_class = ITEM_SIZE_SMALL - max_fuel = 40 - force = 6 - throwforce = 6 - size_in_use = ITEM_SIZE_NORMAL - - -/obj/item/welder_tank/huge - name = "huge welding fuel tank" - icon_state = "tank_huge" - w_class = ITEM_SIZE_NORMAL - max_fuel = 80 - force = 8 - throwforce = 8 - size_in_use = ITEM_SIZE_LARGE - unlit_force = 9 - lit_force = 15 - -/obj/item/welder_tank/experimental - name = "experimental welding fuel tank" - icon_state = "tank_experimental" - w_class = ITEM_SIZE_NORMAL - max_fuel = 40 - can_refuel = 0 - force = 8 - throwforce = 8 - size_in_use = ITEM_SIZE_LARGE - unlit_force = 9 - lit_force = 15 - var/last_gen = 0 - -/obj/item/welder_tank/experimental/Initialize() - . = ..() - START_PROCESSING(SSobj, src) - -/obj/item/welder_tank/experimental/Destroy() - STOP_PROCESSING(SSobj, src) - return ..() - -/obj/item/welder_tank/experimental/Process() - var/cur_fuel = reagents.get_reagent_amount(/datum/reagent/fuel) - if(cur_fuel < max_fuel) - var/gen_amount = ((world.time-last_gen)/25) - reagents.add_reagent(/datum/reagent/fuel, gen_amount) - last_gen = world.time diff --git a/code/game/objects/items/weapons/tools/wirecutter.dm b/code/game/objects/items/weapons/tools/wirecutter.dm deleted file mode 100644 index 0388fef02c38b..0000000000000 --- a/code/game/objects/items/weapons/tools/wirecutter.dm +++ /dev/null @@ -1,43 +0,0 @@ -/obj/item/wirecutters - name = "wirecutters" - desc = "A special pair of pliers with cutting edges. Various brackets and manipulators built into the handle allow it to repair severed wiring." - icon = 'icons/obj/tools.dmi' - icon_state = "cutters_preview" - item_state = "cutters" - obj_flags = OBJ_FLAG_CONDUCTIBLE - slot_flags = SLOT_BELT - force = 3.0 - throw_speed = 2 - throw_range = 9 - w_class = ITEM_SIZE_SMALL - origin_tech = list(TECH_MATERIAL = 1, TECH_ENGINEERING = 1) - matter = list(MATERIAL_STEEL = 80) - center_of_mass = "x=18;y=10" - attack_verb = list("pinched", "nipped") - sharp = TRUE - edge = TRUE - - var/build_from_parts = TRUE - var/handle_icon = "cutters_handle" - var/hardware_icon = "cutters_hardware" - var/valid_colours = list(COLOR_RED, PIPE_COLOR_YELLOW, COLOR_BLUE_GRAY, COLOR_MAROON, COLOR_SEDONA, COLOR_BABY_BLUE, COLOR_VIOLET, COLOR_GRAY80, COLOR_GRAY20) - -/obj/item/wirecutters/Initialize() - if(build_from_parts) - icon_state = "cutters_handle" - color = pick(valid_colours) - overlays += overlay_image(icon, "[hardware_icon]", flags=RESET_COLOR) - . = ..() - -/obj/item/wirecutters/attack(mob/living/carbon/C as mob, mob/user as mob) - if(istype(C) && user.a_intent == I_HELP && (C.handcuffed) && (istype(C.handcuffed, /obj/item/handcuffs/cable))) - usr.visible_message("\The [usr] cuts \the [C]'s restraints with \the [src]!",\ - "You cut \the [C]'s restraints with \the [src]!",\ - "You hear cable being cut.") - C.handcuffed = null - if(C.buckled && C.buckled.buckle_require_restraints) - C.buckled.unbuckle_mob() - C.update_inv_handcuffed() - return - else - ..() \ No newline at end of file diff --git a/code/game/objects/items/weapons/tools/wrench.dm b/code/game/objects/items/weapons/tools/wrench.dm deleted file mode 100644 index 3032915282050..0000000000000 --- a/code/game/objects/items/weapons/tools/wrench.dm +++ /dev/null @@ -1,19 +0,0 @@ -/obj/item/wrench - name = "wrench" - desc = "A good, durable combination wrench, with self-adjusting, universal open- and ring-end mechanisms to match a wide variety of nuts and bolts." - icon = 'icons/obj/tools.dmi' - icon_state = "wrench" - item_state = "wrench" - obj_flags = OBJ_FLAG_CONDUCTIBLE - slot_flags = SLOT_BELT - force = 7 - throwforce = 7.0 - w_class = ITEM_SIZE_SMALL - origin_tech = list(TECH_MATERIAL = 1, TECH_ENGINEERING = 1) - matter = list(MATERIAL_STEEL = 150) - center_of_mass = "x=17;y=16" - attack_verb = list("bashed", "battered", "bludgeoned", "whacked") - -/obj/item/wrench/Initialize() - icon_state = "wrench[pick("","_red","_black","_green","_blue")]" - . = ..() \ No newline at end of file diff --git a/code/game/objects/items/weapons/tools_crystal.dm b/code/game/objects/items/weapons/tools_crystal.dm deleted file mode 100644 index 07683d9c78a28..0000000000000 --- a/code/game/objects/items/weapons/tools_crystal.dm +++ /dev/null @@ -1,135 +0,0 @@ -/obj/item/weldingtool/electric/crystal - name = "crystalline arc welder" - desc = "A crystalline welding tool of an alien make." - icon_state = "crystal_welder" - item_state = "crystal_tool" - icon = 'icons/obj/crystal_tools.dmi' - matter = list(MATERIAL_CRYSTAL = 1250) - cell = null - fuel_cost_multiplier = 1 - -/obj/item/weldingtool/electric/crystal/attackby(var/obj/item/W, var/mob/user) - return - -/obj/item/weldingtool/electric/crystal/on_update_icon() - icon_state = welding ? "crystal_welder_on" : "crystal_welder" - item_state = welding ? "crystal_tool_lit" : "crystal_tool" - var/mob/M = loc - if(istype(M)) - M.update_inv_l_hand() - M.update_inv_r_hand() - -/obj/item/weldingtool/electric/crystal/get_available_charge() - . = 0 - var/mob/living/carbon/human/adherent = loc - if(istype(adherent)) - for(var/obj/item/organ/internal/cell/cell in adherent.internal_organs) - if(!cell.is_broken()) - . += cell.get_charge() - -/obj/item/weldingtool/electric/crystal/spend_charge(var/amount) - var/mob/living/carbon/human/adherent = loc - if(istype(adherent)) - for(var/obj/item/organ/internal/cell/cell in adherent.internal_organs) - if(!cell.is_broken() && cell.get_charge() >= amount) - var/spending = min(amount, cell.get_charge()) - cell.use(spending) - amount -= spending - if(amount <= 0) - break - -/obj/item/wirecutters/crystal - name = "crystalline shears" - desc = "A crystalline shearing tool of an alien make." - icon_state = "crystal_wirecutter" - item_state = "crystal_tool" - icon = 'icons/obj/crystal_tools.dmi' - matter = list(MATERIAL_CRYSTAL = 1250) - build_from_parts = FALSE - -/obj/item/wirecutters/crystal/Initialize() - . = ..() - icon_state = initial(icon_state) - item_state = initial(item_state) - -/obj/item/screwdriver/crystal - name = "crystalline screwdriver" - desc = "A crystalline screwdriving tool of an alien make." - icon_state = "crystal_screwdriver" - item_state = "crystal_tool" - icon = 'icons/obj/crystal_tools.dmi' - matter = list(MATERIAL_CRYSTAL = 1250) - build_from_parts = FALSE - -/obj/item/screwdriver/crystal/Initialize() - . = ..() - icon_state = initial(icon_state) - item_state = initial(item_state) - -/obj/item/crowbar/crystal - name = "crystalline prytool" - desc = "A crystalline prying tool of an alien make." - icon_state = "crystal_crowbar" - item_state = "crystal_tool" - icon = 'icons/obj/crystal_tools.dmi' - matter = list(MATERIAL_CRYSTAL = 1250) - -/obj/item/crowbar/crystal/Initialize() - . = ..() - icon_state = initial(icon_state) - item_state = initial(item_state) - -/obj/item/wrench/crystal - name = "crystalline wrench" - desc = "A crystalline wrenching tool of an alien make." - icon_state = "crystal_wrench" - item_state = "crystal_tool" - icon = 'icons/obj/crystal_tools.dmi' - matter = list(MATERIAL_CRYSTAL = 1250) - -/obj/item/wrench/crystal/Initialize() - . = ..() - icon_state = initial(icon_state) - item_state = initial(item_state) - -/obj/item/device/multitool/crystal - name = "crystalline multitool" - desc = "A crystalline energy patterning tool of an alien make." - icon_state = "crystal_multitool" - item_state = "crystal_tool" - icon = 'icons/obj/crystal_tools.dmi' - matter = list(MATERIAL_CRYSTAL = 1250) - -/obj/item/storage/belt/utility/crystal - name = "crystalline tool harness" - desc = "A segmented belt of strange crystalline material." - icon_state = "utilitybelt_crystal" - item_state = "utilitybelt_crystal" - -/obj/item/storage/belt/utility/crystal/Initialize() - new /obj/item/device/multitool/crystal(src) - new /obj/item/wrench/crystal(src) - new /obj/item/crowbar/crystal(src) - new /obj/item/screwdriver/crystal(src) - new /obj/item/wirecutters/crystal(src) - new /obj/item/weldingtool/electric/crystal(src) - update_icon() - . = ..() - -/obj/item/storage/toolbox/crystal - name = "crystalline toolbox" - desc = "A translucent toolbox made out of an odd crystalline material that is surprisingly light." - icon_state = "crystal" - item_state = "toolbox_crystal" - origin_tech = list(TECH_COMBAT = 1, TECH_MATERIAL = 3) - attack_cooldown = 15 - -/obj/item/storage/toolbox/crystal/Initialize() - new /obj/item/device/multitool/crystal(src) - new /obj/item/wrench/crystal(src) - new /obj/item/crowbar/crystal(src) - new /obj/item/screwdriver/crystal(src) - new /obj/item/wirecutters/crystal(src) - new /obj/item/weldingtool/electric/crystal(src) - update_icon() - . = ..() \ No newline at end of file diff --git a/code/game/objects/items/weapons/towels.dm b/code/game/objects/items/weapons/towels.dm deleted file mode 100644 index ea8219063d023..0000000000000 --- a/code/game/objects/items/weapons/towels.dm +++ /dev/null @@ -1,26 +0,0 @@ -/obj/item/towel - name = "towel" - icon = 'icons/obj/weapons/other.dmi' - icon_state = "towel" - item_flags = ITEM_FLAG_IS_BELT | ITEM_FLAG_WASHER_ALLOWED - slot_flags = SLOT_HEAD | SLOT_BELT | SLOT_OCLOTHING - force = 0.5 - w_class = ITEM_SIZE_NORMAL - attack_verb = list("whipped") - hitsound = 'sound/weapons/towelwhip.ogg' - desc = "A soft cotton towel." - -/obj/item/towel/attack_self(mob/living/user as mob) - user.visible_message("[user] uses [src] to towel themselves off.") - playsound(user, 'sound/weapons/towelwipe.ogg', 25, 1) - -/obj/item/towel/random/New() - ..() - color = get_random_colour() - -/obj/item/towel/fleece // loot from the king of goats. it's a golden towel - name = "golden fleece" - desc = "The legendary Golden Fleece of Jason made real." - color = "#ffd700" - force = 1 - attack_verb = list("smote") diff --git a/code/game/objects/items/weapons/traps.dm b/code/game/objects/items/weapons/traps.dm deleted file mode 100644 index d9a3020734aef..0000000000000 --- a/code/game/objects/items/weapons/traps.dm +++ /dev/null @@ -1,111 +0,0 @@ -/obj/item/beartrap - name = "mechanical trap" - throw_speed = 2 - throw_range = 1 - gender = PLURAL - icon = 'icons/obj/items.dmi' - icon_state = "beartrap0" - randpixel = 0 - desc = "A mechanically activated leg trap. Low-tech, but reliable. Looks like it could really hurt if you set it off." - throwforce = 0 - w_class = ITEM_SIZE_NORMAL - origin_tech = list(TECH_MATERIAL = 1) - matter = list(MATERIAL_STEEL = 18750) - can_buckle = 0 //disallow manual un/buckling - var/deployed = 0 - -/obj/item/beartrap/proc/can_use(mob/user) - return (user.IsAdvancedToolUser() && !issilicon(user) && !user.stat && !user.restrained()) - -/obj/item/beartrap/user_unbuckle_mob(mob/user as mob) - if(buckled_mob && can_use(user)) - user.visible_message( - "\The [user] begins freeing \the [buckled_mob] from \the [src].", - "You carefully begin to free \the [buckled_mob] from \the [src].", - "You hear metal creaking." - ) - if(do_after(user, 6 SECONDS, src, DO_PUBLIC_UNIQUE)) - user.visible_message("\The [buckled_mob] has been freed from \the [src] by \the [user].") - unbuckle_mob() - anchored = FALSE - -/obj/item/beartrap/attack_self(mob/user as mob) - ..() - if(!deployed && can_use(user)) - user.visible_message( - "[user] starts to deploy \the [src].", - "You begin deploying \the [src]!", - "You hear the slow creaking of a spring." - ) - - if (do_after(user, 6 SECONDS, src, DO_PUBLIC_UNIQUE) && user.unEquip(src)) - user.visible_message( - "\The [user] has deployed \the [src].", - "You have deployed \the [src]!", - "You hear a latch click loudly." - ) - - deployed = 1 - update_icon() - anchored = TRUE - -/obj/item/beartrap/attack_hand(mob/user as mob) - if(buckled_mob) - user_unbuckle_mob(user) - else if(deployed && can_use(user)) - user.visible_message( - "[user] starts to disarm \the [src].", - "You begin disarming \the [src]!", - "You hear a latch click followed by the slow creaking of a spring." - ) - if(do_after(user, 6 SECONDS, src, DO_PUBLIC_UNIQUE)) - user.visible_message( - "[user] has disarmed \the [src].", - "You have disarmed \the [src]!" - ) - deployed = 0 - anchored = FALSE - update_icon() - else - ..() - -/obj/item/beartrap/proc/attack_mob(mob/living/L) - - var/target_zone - if(L.lying) - target_zone = ran_zone() - else - target_zone = pick(BP_L_FOOT, BP_R_FOOT, BP_L_LEG, BP_R_LEG) - - if(!L.apply_damage(30, DAMAGE_BRUTE, target_zone, used_weapon=src)) - return 0 - - //trap the victim in place - set_dir(L.dir) - buckle_mob(L) - to_chat(L, "The steel jaws of \the [src] bite into you, trapping you in place!") - deployed = 0 - -/obj/item/beartrap/Crossed(AM as mob|obj) - if(deployed && isliving(AM)) - var/mob/living/L = AM - if(!MOVING_DELIBERATELY(L)) - L.visible_message( - "[L] steps on \the [src].", - "You step on \the [src]!", - "You hear a loud metallic snap!" - ) - attack_mob(L) - if(!buckled_mob) - anchored = FALSE - deployed = 0 - update_icon() - ..() - -/obj/item/beartrap/on_update_icon() - ..() - - if(!deployed) - icon_state = "beartrap0" - else - icon_state = "beartrap1" diff --git a/code/game/objects/items/weapons/trays.dm b/code/game/objects/items/weapons/trays.dm deleted file mode 100644 index 3e88a5708d18d..0000000000000 --- a/code/game/objects/items/weapons/trays.dm +++ /dev/null @@ -1,158 +0,0 @@ -/* - * Trays - initially by Agouri - */ - -/obj/item/tray - name = "tray" - icon = 'icons/obj/food.dmi' - icon_state = "tray" - desc = "A metal tray to lay food on." - force = 5 - throw_speed = 1 - throw_range = 5 - w_class = ITEM_SIZE_NORMAL - obj_flags = OBJ_FLAG_CONDUCTIBLE - matter = list(MATERIAL_ALUMINIUM = 3000) - hitsound = "tray_hit" - var/bash_cooldown = 0 // You can bash a rolling pin against a tray to make a shield bash sound! Based on world.time - var/list/carrying = list() // List of things on the tray. - Doohl - var/max_carry = 2 * BASE_STORAGE_COST(ITEM_SIZE_NORMAL) - - -// Use the tray in-hand to dump out all its items. -/obj/item/tray/attack_self(mob/living/user) - if (LAZYLEN(carrying)) - var/turf/T = get_turf(user) - overlays.Cut() - for (var/obj/item/carried in carrying) - carried.dropInto(T) - LAZYREMOVE(carrying, carried) - user.visible_message(SPAN_NOTICE("[user] dumps out \the [src]."), SPAN_NOTICE("You empty out \the [src].")) - return TRUE - . = ..() - -// When hitting people with the tray, drop all its items everywhere. You jerk. -/obj/item/tray/attack(mob/living/M, mob/living/user) - if (user.a_intent != I_HURT) - return FALSE - . = ..() - // Drop all the things. All of them. - overlays.Cut() - for(var/obj/item/I in carrying) - I.dropInto(get_turf(M)) - carrying.Remove(I) - step(I, pick(NORTH, SOUTH, EAST, WEST, NORTHWEST, NORTHEAST, SOUTHWEST, SOUTHEAST)) - - -// Bash a rolling pin against a tray like a true knight! -/obj/item/tray/attackby(obj/item/W, mob/living/user) - if(istype(W, /obj/item/material/kitchen/rollingpin) && user.a_intent == I_HURT) - if(bash_cooldown < world.time) - user.visible_message("[user] bashes [src] with [W]!") - playsound(user.loc, 'sound/effects/shieldbash.ogg', 50, 1) - bash_cooldown = world.time + 25 - return TRUE - else if (user.a_intent != I_HURT && !istype(W, /obj/item/projectile) && !istype(W, /obj/item/clothing)) - if (calc_carry() + storage_cost_for_item(W) > max_carry) - to_chat(user, SPAN_WARNING("\The [src] can't fit \the [W]!")) - else if (!can_add_item(W)) - to_chat(user, SPAN_WARNING("\The [src] can't hold \the [W]!")) - else - to_chat(user, SPAN_NOTICE("You add \the [W] to \the [src].")) - user.drop_item() - pickup_item(W) - return TRUE - else - . = ..() - - -// Returns the space an object takes up on the tray. Non-food takes up double! -/obj/item/tray/proc/storage_cost_for_item(obj/item/I) - var/effective_cost = I.get_storage_cost() - return istype(I, /obj/item/reagent_containers/food) ? effective_cost : effective_cost * 2 - - -// Returns TRUE if the tray can hold an item, and FALSE otherwise. -/obj/item/tray/proc/can_add_item(obj/item/I) - var/cost = storage_cost_for_item(I) - return !I.anchored && I.canremove && \ - !istype(I, /obj/item/projectile) && !istype(I, /obj/item/clothing/under) && !istype(I, /obj/item/clothing/suit) && !istype(I, /obj/item/storage) && \ - calc_carry() + cost <= max_carry - - -// Calculates the total storage cost being used by the tray. -/obj/item/tray/proc/calc_carry() - . = 0 - for(var/obj/item/I in carrying) - . += storage_cost_for_item(I) - - -// Puts an item onto the tray and displays it visually. -/obj/item/tray/proc/pickup_item(obj/item/I) - I.forceMove(src) - LAZYADD(carrying, I) - add_item_overlay(I) - - -// Intercepts hits against atoms in order to pick up items or dump stuff out as required. -/obj/item/tray/resolve_attackby(atom/A, mob/user) - var/grab_intent = ishuman(user) ? I_GRAB : I_HELP - if (user.a_intent != grab_intent || istype(A, /obj/item/storage) || istype(A, /obj/screen/storage)) - return ..() - - var/turf/T = get_turf(A) - - if (LAZYLEN(carrying)) - if (istype(A, /obj/structure/table)) // If we're a table, prioritize dumping stuff out - overlays.Cut() - for (var/obj/item/carried in carrying) - carried.dropInto(T) - LAZYREMOVE(carrying, carried) - user.visible_message(SPAN_NOTICE("[user] dumps \the [src] onto \the [A]."), SPAN_NOTICE("You empty \the [src] onto \the [A].")) - return FALSE - else if (istype(A, /obj/machinery/smartfridge)) - var/obj/machinery/smartfridge/fridge = A - var/fed_in = 0 - overlays.Cut() - for (var/obj/item/carried in carrying) - if (fridge.accept_check(carried)) - carried.dropInto(fridge) - fridge.stock_item(carried) - LAZYREMOVE(carrying, carried) - fed_in++ - else - add_item_overlay(carried) // Re-add overlays for items we're keeping on the tray, since we fully cut overlays earlier - if (!fed_in) - to_chat(user, SPAN_WARNING("Nothing in \the [src] is valid for \the [A]!")) - else if (LAZYLEN(carrying)) - user.visible_message(SPAN_NOTICE("[user] fills \the [A] with \the [src]."), SPAN_NOTICE("You fill \the [A] with some of \the [src]'s contents.")) - else - user.visible_message(SPAN_NOTICE("[user] fills \the [A] with \the [src]."), SPAN_NOTICE("You fill \the [A] with \the [src].")) - - return FALSE - - var/obj/item/I = locate() in T - - if (!isnull(I)) - var/added_items = 0 - for(var/obj/item/item in T) - if (can_add_item(I)) - pickup_item(item) - added_items++ - - if (!added_items) - to_chat(user, SPAN_WARNING("You fail to pick anything up with \the [src].")) - else - user.visible_message(SPAN_NOTICE("[user] scoops up some things with \the [src]."), SPAN_NOTICE("You put everything you could onto \the [src].")) - - return FALSE - - -// Adds a visible overlay on the tray with the item's icon, state, and overlays, to display them on the tray itself -/obj/item/tray/proc/add_item_overlay(obj/item/I) - if (isnull(I) || !istype(I)) - return - var/image/item_image = image("icon" = I.icon, "icon_state" = I.icon_state, "layer" = 30 + I.layer, "pixel_x" = rand(-3, 3), "pixel_y" = rand(-3, 3)) // this line terrifies me - item_image.color = I.color - item_image.overlays = I.overlays // Inherit the color and overlays of stored items to make sure they render accurately on the tray - overlays += item_image diff --git a/code/game/objects/items/weapons/weaponry.dm b/code/game/objects/items/weapons/weaponry.dm deleted file mode 100644 index 0cc0aa3b5b9cd..0000000000000 --- a/code/game/objects/items/weapons/weaponry.dm +++ /dev/null @@ -1,230 +0,0 @@ -/obj/item/nullrod - name = "null sceptre" - desc = "A sceptre of pure black obsidian capped at both ends with silver ferrules. Some religious groups claim it disrupts and dampens the powers of paranormal phenomenae." - icon = 'icons/obj/weapons/melee_physical.dmi' - icon_state = "nullrod" - item_state = "nullrod" - slot_flags = SLOT_BELT - force = 10 - throw_speed = 1 - throw_range = 4 - throwforce = 7 - w_class = ITEM_SIZE_NORMAL - -/obj/item/nullrod/disrupts_psionics() - return src - -/obj/item/nullrod/attack(mob/M as mob, mob/living/user as mob) //Paste from old-code to decult with a null rod. - if (user.a_intent == I_HELP) - return FALSE - - admin_attack_log(user, M, "Attacked using \a [src]", "Was attacked with \a [src]", "used \a [src] to attack") - - user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN) - user.do_attack_animation(M) - //if(user != M) - if(M.mind && LAZYLEN(M.mind.learned_spells)) - M.silence_spells(300) //30 seconds - to_chat(M, "You've been silenced!") - return - - if (!user.IsAdvancedToolUser()) - to_chat(user, "You don't have the dexterity to do this!") - return - - if ((MUTATION_CLUMSY in user.mutations) && prob(50)) - to_chat(user, "The rod slips out of your hand and hits your head.") - user.take_organ_damage(10, 0) - user.Paralyse(20) - return - - if(GLOB.cult && iscultist(M)) - M.visible_message("\The [user] waves \the [src] over \the [M]'s head.") - GLOB.cult.offer_uncult(M) - return - - ..() - -/obj/item/energy_net - name = "energy net" - desc = "It's a net made of green energy." - icon = 'icons/effects/effects.dmi' - icon_state = "energynet" - throwforce = 0 - force = 0 - var/net_type = /obj/effect/energy_net - -/obj/item/energy_net/safari - name = "animal net" - desc = "An energized net meant to subdue animals." - net_type = /obj/effect/energy_net/safari - -/obj/item/energy_net/dropped() - ..() - spawn(10) - if(src) qdel(src) - -/obj/item/energy_net/throw_impact(atom/hit_atom) - ..() - try_capture_mob(hit_atom) - -// This will validate the hit_atom, then spawn an energy_net effect and qdel itself -/obj/item/energy_net/proc/try_capture_mob(mob/living/M) - - if(!istype(M) || locate(/obj/effect/energy_net) in M.loc) - qdel(src) - return FALSE - - var/turf/T = get_turf(M) - if(T) - var/obj/effect/energy_net/net_effect = new net_type(T) - net_effect.capture_mob(M) - qdel(src) - - // If we miss or hit an obstacle, we still want to delete the net. - spawn(10) - if(src) qdel(src) - -/obj/effect/energy_net - name = "energy net" - desc = "It's a net made of green energy." - icon = 'icons/effects/effects.dmi' - icon_state = "energynet" - - density = TRUE - opacity = 0 - mouse_opacity = 1 - anchored = TRUE - can_buckle = 0 //no manual buckling or unbuckling - - var/health = 25 - var/countdown = 15 - var/temporary = 1 - var/mob/living/carbon/captured = null - var/min_free_time = 50 - var/max_free_time = 85 - -/obj/effect/energy_net/safari - name = "animal net" - desc = "An energized net meant to subdue animals." - - anchored = FALSE - health = 5 - temporary = 0 - min_free_time = 5 - max_free_time = 10 - -/obj/effect/energy_net/teleport - countdown = 60 - -/obj/effect/energy_net/Initialize() - . = ..() - START_PROCESSING(SSobj, src) - -/obj/effect/energy_net/Destroy() - if(istype(captured, /mob/living/carbon)) - if(captured.handcuffed == src) - captured.handcuffed = null - if(captured) - unbuckle_mob() - STOP_PROCESSING(SSobj, src) - captured = null - return ..() - -/obj/effect/energy_net/Process() - if(temporary) - countdown-- - if(!captured || captured.buckled != src) - health = 0 - if(get_turf(src) != get_turf(captured)) //just in case they somehow teleport around or - countdown = 0 - if(countdown <= 0) - health = 0 - healthcheck() - -/obj/effect/energy_net/Move() - ..() - - if(buckled_mob) - buckled_mob.forceMove(src.loc) - else - countdown = 0 - - -/obj/effect/energy_net/proc/capture_mob(mob/living/M) - captured = M - if(M.buckled) - M.buckled.unbuckle_mob() - buckle_mob(M) - if(istype(M, /mob/living/carbon)) - var/mob/living/carbon/C = M - if(!C.handcuffed) - C.handcuffed = src - return 1 - -/obj/effect/energy_net/post_buckle_mob(mob/living/M) - if(buckled_mob) - layer = ABOVE_HUMAN_LAYER - visible_message("\The [M] was caught in [src]!") - else - to_chat(M,"You are free of the net!") - reset_plane_and_layer() - -/obj/effect/energy_net/proc/healthcheck() - if(health <=0) - set_density(0) - if(countdown <= 0) - visible_message("\The [src] fades away!") - else - visible_message("\The [src] is torn apart!") - qdel(src) - -/obj/effect/energy_net/bullet_act(var/obj/item/projectile/Proj) - health -= Proj.get_structure_damage() - healthcheck() - return 0 - -/obj/effect/energy_net/ex_act() - health = 0 - healthcheck() - -/obj/effect/energy_net/attack_hand(var/mob/user) - - var/mob/living/carbon/human/H = user - if(istype(H)) - if(H.species.can_shred(H)) - playsound(src.loc, 'sound/weapons/slash.ogg', 80, 1) - health -= rand(10, 20) - else - health -= rand(1,3) - - else if (MUTATION_HULK in user.mutations) - health = 0 - else - health -= rand(5,8) - - to_chat(H,"You claw at the energy net.") - - healthcheck() - return - -/obj/effect/energy_net/attackby(obj/item/W as obj, mob/user as mob) - health -= W.force - healthcheck() - ..() - -/obj/effect/energy_net/user_unbuckle_mob(mob/user) - return escape_net(user) - - -/obj/effect/energy_net/proc/escape_net(mob/user as mob) - visible_message( - "\The [user] attempts to free themselves from \the [src]!", - "You attempt to free yourself from \the [src]!" - ) - if(do_after(user, rand(min_free_time, max_free_time), src, DO_PUBLIC_UNIQUE, INCAPACITATION_DISABLED)) - health = 0 - healthcheck() - return 1 - else - return 0 diff --git a/code/game/objects/items/weapons/weldbackpack.dm b/code/game/objects/items/weapons/weldbackpack.dm deleted file mode 100644 index 3f94e600bb0a1..0000000000000 --- a/code/game/objects/items/weapons/weldbackpack.dm +++ /dev/null @@ -1,61 +0,0 @@ -//Welder backpack: -//A small backpack that can refuel welding tools and cartridges on the fly. -//Can be refilled on stationary welding tanks. - -/obj/item/storage/backpack/weldpack - name = "welding tank backpack" - desc = "A small, uncomfortable backpack, fitted with a massive fuel tank on the side. It has a refueling port for most models of portable welding tools and cartridges." - icon_state = "welderpack" - item_state_slots = list(slot_l_hand_str = "welderpack", slot_r_hand_str = "welderpack") - max_storage_space = 20 - var/max_fuel = 350 - var/obj/item/weldingtool/welder - -/obj/item/storage/backpack/weldpack/Initialize() - create_reagents(max_fuel) - reagents.add_reagent(/datum/reagent/fuel, max_fuel) - - . = ..() - -/obj/item/storage/backpack/weldpack/attackby(obj/item/W as obj, mob/user as mob) - if(isWelder(W)) - var/obj/item/weldingtool/T = W - if(T.welding & prob(50)) - log_and_message_admins("triggered a fueltank explosion.", user) - to_chat(user, "That was stupid of you.") - explosion(get_turf(src),-1,1,3) - if(src) - qdel(src) - return - else - if(T.welding) - to_chat(user, "That was close!") - if(!T.tank) - to_chat(user, "\The [T] has no tank attached!") - src.reagents.trans_to_obj(T.tank, T.tank.max_fuel) - to_chat(user, "You refuel \the [W].") - playsound(src.loc, 'sound/effects/refill.ogg', 50, 1, -6) - return - else if(istype(W, /obj/item/welder_tank)) - var/obj/item/welder_tank/tank = W - src.reagents.trans_to_obj(tank, tank.max_fuel) - to_chat(user, "You refuel \the [W].") - playsound(src.loc, 'sound/effects/refill.ogg', 50, 1, -6) - return - ..() - -/obj/item/storage/backpack/weldpack/afterattack(obj/O as obj, mob/user as mob, proximity) - if(!proximity) // this replaces and improves the get_dist(src,O) <= 1 checks used previously - return - if (istype(O, /obj/structure/reagent_dispensers/fueltank) && src.reagents.total_volume < max_fuel) - O.reagents.trans_to_obj(src, max_fuel) - to_chat(user, "You crack the cap off the top of \the [src] and fill it back up again from the tank.") - playsound(src.loc, 'sound/effects/refill.ogg', 50, 1, -6) - return - else if (istype(O, /obj/structure/reagent_dispensers/fueltank) && src.reagents.total_volume == max_fuel) - to_chat(user, "The pack is already full!") - return - -/obj/item/storage/backpack/weldpack/examine(mob/user) - . = ..() - to_chat(user, text("[icon2html(src, user)] [] units of fuel left!", src.reagents.total_volume)) diff --git a/code/game/objects/munition.dm b/code/game/objects/munition.dm deleted file mode 100644 index 28e6642e8d693..0000000000000 --- a/code/game/objects/munition.dm +++ /dev/null @@ -1,26 +0,0 @@ -/obj/structure/ship_munition - name = "munitions" - icon = 'icons/obj/munitions.dmi' - w_class = ITEM_SIZE_GARGANTUAN - density = TRUE - var/list/move_sounds = list( // some nasty sounds to make when moving the board - 'sound/effects/metalscrape1.ogg', - 'sound/effects/metalscrape2.ogg', - 'sound/effects/metalscrape3.ogg' - ) - -// make a screeching noise to drive people mad -/obj/structure/ship_munition/Move() - . = ..() - if(.) - var/turf/T = get_turf(src) - if(!isspace(T) && !istype(T, /turf/simulated/floor/carpet)) - playsound(T, pick(move_sounds), 75, 1) - -/obj/structure/ship_munition/md_slug - name = "mass driver slug" - icon_state = "slug" - -/obj/structure/ship_munition/ap_slug - name = "armor piercing mass driver slug" - icon_state = "ap" \ No newline at end of file diff --git a/code/game/objects/objs.dm b/code/game/objects/objs.dm deleted file mode 100644 index 668b28f0a1a85..0000000000000 --- a/code/game/objects/objs.dm +++ /dev/null @@ -1,206 +0,0 @@ -/obj - layer = OBJ_LAYER - animate_movement = 2 - - var/obj_flags - - var/list/matter //Used to store information about the contents of the object. - var/w_class // Size of the object. - var/unacidable = FALSE //universal "unacidabliness" var, here so you can use it in any obj. - var/throwforce = 1 - var/sharp = FALSE // whether this object cuts - var/edge = FALSE // whether this object is more likely to dismember - 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 = DAMAGE_BRUTE - var/armor_penetration = 0 - var/anchor_fall = FALSE - var/holographic = 0 //if the obj is a holographic object spawned by the holodeck - -/obj/proc/eject_item(obj/item/I, mob/living/user) - if(!I || !user.IsAdvancedToolUser()) - return FALSE - user.put_in_hands(I) - playsound(src.loc, 'sound/weapons/guns/interaction/hpistol_magin.ogg', 75, 1) - user.visible_message( - "[user] removes [I] from [src].", - SPAN_NOTICE("You remove [I] from [src].") - ) - return TRUE - -/obj/proc/insert_item(obj/item/I, mob/living/user) - if(!I || !user.unEquip(I)) - return FALSE - I.forceMove(src) - playsound(src.loc, 'sound/weapons/guns/interaction/hpistol_magout.ogg', 75, 1) - to_chat(user, SPAN_NOTICE("You insert [I] into [src].")) - return TRUE - -/obj/Destroy() - STOP_PROCESSING(SSobj, src) - return ..() - -/obj/item/proc/is_used_on(obj/O, mob/user) - -/obj/assume_air(datum/gas_mixture/giver) - if(loc) - return loc.assume_air(giver) - else - return null - -/obj/remove_air(amount) - if(loc) - return loc.remove_air(amount) - else - return null - -/obj/return_air() - if(loc) - return loc.return_air() - else - return null - -/obj/proc/updateUsrDialog() - if(in_use) - var/is_in_use = 0 - var/list/nearby = viewers(1, src) | usr - for(var/mob/M in nearby) - if ((M.client && M.machine == src)) - if(CanUseTopic(M, DefaultTopicState()) > STATUS_CLOSE) - is_in_use = 1 - interact(M) - else - M.unset_machine() - in_use = is_in_use - -/obj/proc/updateDialog() - // Check that people are actually using the machine. If not, don't update anymore. - if(in_use) - var/list/nearby = viewers(1, src) - var/is_in_use = 0 - for(var/mob/M in nearby) - if ((M.client && M.machine == src)) - if(CanUseTopic(M, DefaultTopicState()) > STATUS_CLOSE) - is_in_use = 1 - interact(M) - else - M.unset_machine() - var/ai_in_use = AutoUpdateAI(src) - - if(!ai_in_use && !is_in_use) - in_use = 0 - -/obj/attack_ghost(mob/user) - ui_interact(user) - ..() - -/obj/proc/interact(mob/user) - return - -/mob/proc/unset_machine() - src.machine = null - -/mob/proc/set_machine(var/obj/O) - if(src.machine) - unset_machine() - src.machine = O - if(istype(O)) - O.in_use = 1 - -/obj/item/proc/updateSelfDialog() - var/mob/M = src.loc - if(istype(M) && M.client && M.machine == src) - src.attack_self(M) - -/obj/proc/hide(var/hide) - set_invisibility(hide ? INVISIBILITY_MAXIMUM : initial(invisibility)) - -/obj/proc/hides_under_flooring() - return level == 1 - -/obj/proc/hear_talk(mob/M as mob, text, verb, datum/language/speaking) - if(talking_atom) - talking_atom.catchMessage(text, M) -/* - var/mob/mo = locate(/mob) in src - if(mo) - var/rendered = "[M.name]: [text]" - mo.show_message(rendered, 2) - */ - return - -/obj/proc/see_emote(mob/M as mob, text, var/emote_type) - return - -/obj/proc/show_message(msg, type, alt, alt_type)//Message, type of message (1 or 2), alternative message, alt message type (1 or 2) - return - -/obj/proc/damage_flags() - . = 0 - if(has_edge(src)) - . |= DAMAGE_FLAG_EDGE - if(is_sharp(src)) - . |= DAMAGE_FLAG_SHARP - if (damtype == DAMAGE_BURN) - . |= DAMAGE_FLAG_LASER - -/obj/attackby(obj/item/O, mob/user) - if(obj_flags & OBJ_FLAG_ANCHORABLE) - if(isWrench(O)) - wrench_floor_bolts(user) - update_icon() - return - return ..() - -/obj/proc/wrench_floor_bolts(mob/user, delay=20) - playsound(loc, 'sound/items/Ratchet.ogg', 100, 1) - if(anchored) - user.visible_message("\The [user] begins unsecuring \the [src] from the floor.", "You start unsecuring \the [src] from the floor.") - else - user.visible_message("\The [user] begins securing \the [src] to the floor.", "You start securing \the [src] to the floor.") - if(do_after(user, delay, src, DO_PUBLIC_UNIQUE)) - if(!src) return - to_chat(user, "You [anchored? "un" : ""]secured \the [src]!") - anchored = !anchored - return 1 - -/obj/attack_hand(mob/living/user) - if(Adjacent(user)) - add_fingerprint(user) - ..() - -/obj/is_fluid_pushable(var/amt) - return ..() && w_class <= round(amt/20) - -/obj/proc/can_embed() - return is_sharp(src) - -/obj/AltClick(mob/user) - if(obj_flags & OBJ_FLAG_ROTATABLE) - rotate(user) - ..() - -/obj/examine(mob/user) - . = ..() - if((obj_flags & OBJ_FLAG_ROTATABLE)) - to_chat(user, SPAN_SUBTLE("Can be rotated with alt-click.")) - -/obj/proc/rotate(mob/user) - if(!CanPhysicallyInteract(user)) - to_chat(user, SPAN_NOTICE("You can't interact with \the [src] right now!")) - return - - if(anchored) - to_chat(user, SPAN_NOTICE("\The [src] is secured to the floor!")) - return - - set_dir(turn(dir, 90)) - update_icon() - -//For things to apply special effects after damaging an organ, called by organ's take_damage -/obj/proc/after_wounding(obj/item/organ/external/organ, datum/wound) - -/** - * Test for if stepping on a tile containing this obj is safe to do, used for things like landmines and cliffs. - */ -/obj/proc/is_safe_to_step(mob/living/L) - return TRUE diff --git a/code/game/objects/random/date_based.dm b/code/game/objects/random/date_based.dm deleted file mode 100644 index a2f7374710a84..0000000000000 --- a/code/game/objects/random/date_based.dm +++ /dev/null @@ -1,121 +0,0 @@ -/***************** -* Implementation * -*****************/ - -/obj/random/date_based - name = "random object (date based)" - icon_state = "yup" - spawn_method = .proc/check_date - var/datum/is_date/date_check - -/obj/random/date_based/Destroy() - QDEL_NULL(date_check) - return ..() - -/obj/random/date_based/proc/check_date() - if(date_check.IsValid()) - return spawn_item() - - -/datum/is_date/proc/IsValid() - return FALSE - -/datum/is_date/proc/CurrentMonthAndDay() - return current_month_and_day() - -/datum/is_date/proc/ValidateMonthAndDay(month, day) - . = FALSE - if(!month || month < 1 || month > 12) - CRASH("Invalid month: [month]") - - var/days_in_month = GLOB.days_per_month[month] - if(month == 2) // Always allow 29th of February, in case someone wants to do have leap-year things - days_in_month = 29 - - if(!day || day < 1 || day > days_in_month) - CRASH("Invalid day: [day]") - return TRUE - -/datum/is_date/day - var/month - var/day - -/datum/is_date/day/New(month, day) - if(ValidateMonthAndDay(month, day)) - src.month = month - src.day = day - -/datum/is_date/day/IsValid() - var/month_and_day = CurrentMonthAndDay() - return month == month_and_day[1] && day == month_and_day[2] - - -/datum/is_date/range - var/start_month - var/start_day - - var/end_month - var/end_day - -/datum/is_date/range/New(start_month, start_day, end_month, end_day) - if(ValidateMonthAndDay(start_month, start_day) && ValidateMonthAndDay(end_month, end_day)) - src.start_month = start_month - src.start_day = start_day - src.end_month = end_month - src.end_day = end_day - -/datum/is_date/range/IsValid() - var/month_and_day = CurrentMonthAndDay() - - var/end_date_before_start_date = FALSE - if(end_month < start_month) - end_date_before_start_date = TRUE - if(end_month == start_month && end_day < start_day) - end_date_before_start_date = TRUE - - if(end_date_before_start_date) - if(month_and_day[1] < end_month) - return TRUE - if(month_and_day[1] == end_month && month_and_day[2] <= end_day) - return TRUE - if(month_and_day[1] > start_month) - return TRUE - if(month_and_day[1] == start_month && month_and_day[2] >= start_day) - return TRUE - return FALSE - - if(month_and_day[1] < start_month) - return FALSE - if(month_and_day[1] == start_month && month_and_day[2] < start_day) - return FALSE - if(month_and_day[1] > end_month) - return FALSE - if(month_and_day[1] == end_month && month_and_day[2] > end_day) - return FALSE - return TRUE - -/********************* -* Practical Subtypes * -*********************/ -/obj/random/date_based/christmas - // I have decided that Christmas lasts from Advent first until St. Knut's Day on January 13 - // However, because I'm lazy I've also decided that space future Advent first always occurs on December 1 rather than the 4th Sunday before Christmas - date_check = new/datum/is_date/range(12, 1, 1, 13) - -/********************** -* Date Based Spawners * -**********************/ -/obj/random/date_based/christmas/tree - name = "Christmas Tree" - -/obj/random/date_based/christmas/tree/spawn_choices() - return list(/obj/structure/flora/tree/pine/xmas) - -/obj/random/date_based/christmas/tree/fountain - name = "Christmas Tree (Fountain Replacement)" - -/obj/random/date_based/christmas/tree/fountain/check_date() - if(date_check.IsValid()) - return spawn_item() - else - return new /obj/structure/fountain/mundane(loc) //spawns fountain instead of tree \ No newline at end of file diff --git a/code/game/objects/random/random.dm b/code/game/objects/random/random.dm deleted file mode 100644 index 9666783f34c4e..0000000000000 --- a/code/game/objects/random/random.dm +++ /dev/null @@ -1,1412 +0,0 @@ -/obj/random - name = "random object" - desc = "This item type is used to spawn random objects at round-start." - icon = 'icons/misc/mark.dmi' - icon_state = "rup" - var/spawn_nothing_percentage = 0 // this variable determines the likelyhood that this random object will not spawn anything - - var/spawn_method = /obj/random/proc/spawn_item - -// creates a new object and deletes itself -/obj/random/Initialize() - ..() - call(src, spawn_method)() - return INITIALIZE_HINT_QDEL - -// creates the random item -/obj/random/proc/spawn_item() - if(prob(spawn_nothing_percentage)) - return - - if(isnull(loc)) - return - - var/build_path = pickweight(spawn_choices()) - - var/atom/A = new build_path(src.loc) - if(pixel_x || pixel_y) - A.pixel_x = pixel_x - A.pixel_y = pixel_y - - return A - -// Returns an associative list in format path:weight -/obj/random/proc/spawn_choices() - return list() - -/obj/random/single - name = "randomly spawned object" - desc = "This item type is used to randomly spawn a given object at round-start." - icon_state = "x3" - spawn_nothing_percentage = 50 - var/spawn_object = null - -/obj/random/single/spawn_choices() - return list(spawn_object) - -/obj/random/tool - name = "random tool" - desc = "This is a random tool." - icon = 'icons/obj/tools.dmi' - icon_state = "welder" - -/obj/random/tool/spawn_choices() - return list(/obj/item/screwdriver, - /obj/item/wirecutters, - /obj/item/weldingtool, - /obj/item/weldingtool/largetank, - /obj/item/crowbar, - /obj/item/wrench, - /obj/item/device/flashlight, - /obj/item/device/flashlight/upgraded) - -/obj/random/technology_scanner - name = "random scanner" - desc = "This is a random technology scanner." - icon = 'icons/obj/atmos_analyzer.dmi' - icon_state = "atmos" - -/obj/random/technology_scanner/spawn_choices() - return list(/obj/item/device/t_scanner = 5, - /obj/item/device/radio = 2, - /obj/item/device/scanner/gas = 5) - -/obj/random/powercell - name = "random powercell" - desc = "This is a random powercell." - icon = 'icons/obj/power.dmi' - icon_state = "hcell" - -/obj/random/powercell/spawn_choices() - return list(/obj/item/cell/crap = 1, - /obj/item/cell/standard = 8, - /obj/item/cell/high = 5, - /obj/item/cell/super = 2, - /obj/item/cell/hyper = 1, - /obj/item/cell/device/standard = 7, - /obj/item/cell/device/high = 5) - -/obj/random/bomb_supply - name = "bomb supply" - desc = "This is a random bomb supply." - icon = 'icons/obj/assemblies/new_assemblies.dmi' - icon_state = "signaller" - -/obj/random/bomb_supply/spawn_choices() - return list(/obj/item/device/assembly/igniter, - /obj/item/device/assembly/prox_sensor, - /obj/item/device/assembly/signaler, - /obj/item/device/assembly/timer, - /obj/item/device/multitool) - -/obj/random/toolbox - name = "random toolbox" - desc = "This is a random toolbox." - icon = 'icons/obj/storage.dmi' - icon_state = "red" - -/obj/random/toolbox/spawn_choices() - return list(/obj/item/storage/toolbox/mechanical = 30, - /obj/item/storage/toolbox/electrical = 20, - /obj/item/storage/toolbox/emergency = 20, - /obj/item/storage/toolbox/syndicate = 1) - -/obj/random/tech_supply - name = "random tech supply" - desc = "This is a random piece of technology supplies." - icon = 'icons/obj/power.dmi' - icon_state = "cell" - spawn_nothing_percentage = 50 - -/obj/random/tech_supply/spawn_choices() - return list(/obj/random/powercell = 3, - /obj/random/technology_scanner = 2, - /obj/item/stack/package_wrap/twenty_five = 1, - /obj/item/hand_labeler = 1, - /obj/random/bomb_supply = 2, - /obj/item/extinguisher = 1, - /obj/item/clothing/gloves/insulated/cheap = 1, - /obj/item/stack/cable_coil/random = 2, - /obj/random/toolbox = 2, - /obj/item/storage/belt/utility = 2, - /obj/item/storage/belt/utility/atmostech = 1, - /obj/random/tool = 5, - /obj/item/tape_roll = 2) - -/obj/random/medical - name = "Random Medical equipment" - desc = "This is a random medical item." - icon = 'icons/obj/items.dmi' - icon_state = "medrandom" - -/obj/random/medical/spawn_choices() - return list(/obj/random/medical/lite = 21, - /obj/item/bodybag = 2, - /obj/item/reagent_containers/glass/bottle/inaprovaline = 2, - /obj/item/reagent_containers/glass/bottle/antitoxin = 2, - /obj/item/storage/pill_bottle = 2, - /obj/item/storage/pill_bottle/tramadol = 1, - /obj/item/storage/pill_bottle/citalopram = 2, - /obj/item/storage/pill_bottle/dexalin_plus = 1, - /obj/item/storage/pill_bottle/dermaline = 1, - /obj/item/storage/pill_bottle/bicaridine = 1, - /obj/item/reagent_containers/syringe/antitoxin = 2, - /obj/item/reagent_containers/syringe/antiviral = 1, - /obj/item/reagent_containers/syringe/inaprovaline = 2, - /obj/item/storage/box/freezer = 1, - /obj/item/stack/nanopaste = 1) - -/obj/random/medical/lite - name = "Random Medicine" - desc = "This is a random simple medical item." - icon = 'icons/obj/items.dmi' - icon_state = "medrandom" - spawn_nothing_percentage = 25 - -/obj/random/medical/lite/spawn_choices() - return list(/obj/item/stack/medical/bruise_pack = 4, - /obj/item/stack/medical/ointment = 4, - /obj/item/storage/pill_bottle/antidexafen = 2, - /obj/item/storage/pill_bottle/paracetamol = 2, - /obj/item/stack/medical/advanced/bruise_pack = 2, - /obj/item/stack/medical/advanced/ointment = 2, - /obj/item/stack/medical/splint = 1, - /obj/item/reagent_containers/hypospray/autoinjector = 3, - /obj/item/storage/pill_bottle/kelotane = 2, - /obj/item/storage/pill_bottle/antitox = 2, - /obj/item/storage/med_pouch/trauma = 2, - /obj/item/storage/med_pouch/burn = 2, - /obj/item/storage/med_pouch/toxin = 2, - /obj/item/storage/med_pouch/radiation = 2, - /obj/item/storage/med_pouch/oxyloss = 2) - -/obj/random/firstaid - name = "Random First Aid Kit" - desc = "This is a random first aid kit." - icon = 'icons/obj/storage.dmi' - icon_state = "firstaid" - -/obj/random/firstaid/spawn_choices() - return list(/obj/item/storage/firstaid/regular = 4, - /obj/item/storage/firstaid/trauma = 3, - /obj/item/storage/firstaid/toxin = 3, - /obj/item/storage/firstaid/o2 = 3, - /obj/item/storage/firstaid/stab = 2, - /obj/item/storage/firstaid/adv = 2, - /obj/item/storage/firstaid/combat = 1, - /obj/item/storage/firstaid/empty = 2, - /obj/item/storage/firstaid/fire = 3) - -/obj/random/contraband - name = "Random Illegal Item" - desc = "Hot Stuff." - icon = 'icons/obj/items.dmi' - icon_state = "purplecomb" - spawn_nothing_percentage = 50 - -/obj/random/contraband/spawn_choices() - return list(/obj/item/haircomb = 4, - /obj/item/storage/pill_bottle/tramadol = 3, - /obj/item/storage/pill_bottle/happy = 2, - /obj/item/storage/pill_bottle/zoom = 2, - /obj/item/reagent_containers/glass/beaker/vial/random/toxin = 1, - /obj/item/reagent_containers/glass/beaker/sulphuric = 1, - /obj/item/contraband/poster = 5, - /obj/item/material/butterflyblade = 3, - /obj/item/material/butterflyhandle = 3, - /obj/item/melee/baton/cattleprod = 1, - /obj/item/material/knife/combat = 1, - /obj/item/material/knife/folding = 1, - /obj/item/material/knife/folding/wood = 1, - /obj/item/material/knife/folding/combat/balisong = 2, - /obj/item/material/knife/folding/combat/switchblade = 1, - /obj/item/storage/secure/briefcase/money = 1, - /obj/item/storage/box/syndie_kit/cigarette = 1, - /obj/item/stack/telecrystal = 1, - /obj/item/clothing/under/syndicate = 2, - /obj/item/reagent_containers/syringe = 3, - /obj/item/reagent_containers/syringe/steroid = 2, - /obj/item/reagent_containers/syringe/drugs = 1, - /obj/item/reagent_containers/food/snacks/egg/lizard = 3) - -/obj/random/drinkbottle - name = "random drink" - desc = "This is a random drink." - icon = 'icons/obj/drinks.dmi' - icon_state = "whiskeybottle" - -/obj/random/drinkbottle/spawn_choices() - return list(/obj/item/reagent_containers/food/drinks/bottle/whiskey, - /obj/item/reagent_containers/food/drinks/bottle/gin, - /obj/item/reagent_containers/food/drinks/bottle/specialwhiskey, - /obj/item/reagent_containers/food/drinks/bottle/vodka, - /obj/item/reagent_containers/food/drinks/bottle/tequilla, - /obj/item/reagent_containers/food/drinks/bottle/absinthe, - /obj/item/reagent_containers/food/drinks/bottle/wine, - /obj/item/reagent_containers/food/drinks/bottle/cognac, - /obj/item/reagent_containers/food/drinks/bottle/rum, - /obj/item/reagent_containers/food/drinks/bottle/patron) - - -/obj/random/energy - name = "Random Energy Weapon" - desc = "This is a random energy weapon." - icon = 'icons/obj/guns/energy_gun.dmi' - icon_state = "energykill100" - -/obj/random/energy/spawn_choices() - return list(/obj/item/gun/energy/laser = 4, - /obj/item/gun/energy/gun = 3, - /obj/item/gun/energy/retro = 2, - /obj/item/gun/energy/lasercannon = 2, - /obj/item/gun/energy/xray = 3, - /obj/item/gun/energy/sniperrifle = 1, - /obj/item/gun/energy/gun/nuclear = 1, - /obj/item/gun/energy/ionrifle = 2, - /obj/item/gun/energy/toxgun = 3, - /obj/item/gun/energy/taser = 4, - /obj/item/gun/energy/crossbow/largecrossbow = 2, - /obj/item/gun/energy/stunrevolver = 4) - -/obj/random/projectile - name = "Random Projectile Weapon" - desc = "This is a random projectile weapon." - icon = 'icons/obj/guns/revolvers.dmi' - icon_state = "revolver" - -/obj/random/projectile/spawn_choices() - return list(/obj/item/gun/projectile/automatic/battlerifle = 4, - /obj/item/gun/projectile/sniper/garand = 4, - /obj/item/gun/projectile/sniper/semistrip = 4, - /obj/item/gun/projectile/shotgun/pump = 3, - /obj/item/gun/projectile/automatic/merc_smg = 2, - /obj/item/gun/projectile/automatic/assault_rifle = 2, - /obj/item/gun/projectile/automatic/bullpup_rifle = 2, - /obj/item/gun/projectile/pistol/military/alt = 3, - /obj/item/gun/projectile/pistol/sec = 4, - /obj/item/gun/projectile/pistol/holdout = 4, - /obj/item/gun/projectile/pirate = 5, - /obj/item/gun/projectile/revolver = 2, - /obj/item/gun/projectile/automatic/sec_smg = 3, - /obj/item/gun/projectile/revolver/holdout = 4, - /obj/item/gun/projectile/revolver = 2, - /obj/item/gun/projectile/shotgun/doublebarrel = 4, - /obj/item/gun/projectile/shotgun/doublebarrel/sawn = 3, - /obj/item/gun/projectile/heavysniper = 1, - /obj/item/gun/projectile/shotgun/pump/combat = 2, - /obj/item/gun/projectile/pistol/throwback = 1, - /obj/item/gun/projectile/pistol/broomstick = 1) - -/obj/random/handgun - name = "Random Handgun" - desc = "This is a random sidearm." - icon = 'icons/obj/guns/pistol.dmi' - icon_state = "secguncomp" - -/obj/random/handgun/spawn_choices() - return list(/obj/item/gun/projectile/pistol/sec = 3, - /obj/item/gun/energy/gun = 2, - /obj/item/gun/projectile/pistol/military/alt = 1, - /obj/item/gun/projectile/pistol/holdout = 2, - /obj/item/gun/energy/retro = 1, - /obj/item/gun/projectile/pistol/throwback = 1, - /obj/item/gun/projectile/pistol/broomstick = 1) - -/obj/random/ammo - name = "Random Ammunition" - desc = "This is random ammunition." - icon = 'icons/obj/ammo.dmi' - icon_state = "magnum" - -/obj/random/ammo/spawn_choices() - return list(/obj/item/storage/box/ammo/beanbags = 6, - /obj/item/storage/box/ammo/shotgunammo = 2, - /obj/item/storage/box/ammo/shotgunshells = 4, - /obj/item/storage/box/ammo/flechetteshells = 2, - /obj/item/storage/box/ammo/stunshells = 1, - /obj/item/ammo_magazine/pistol = 2, - /obj/item/ammo_magazine/smg_top = 2, - /obj/item/ammo_magazine/smg_top/rubber = 6, - /obj/item/ammo_magazine/pistol/throwback = 1) - -/obj/random/action_figure - name = "random action figure" - desc = "This is a random action figure." - icon = 'icons/obj/toy.dmi' - icon_state = "assistant" - -/obj/random/action_figure/spawn_choices() - return list(/obj/item/toy/figure/cmo, - /obj/item/toy/figure/assistant, - /obj/item/toy/figure/atmos, - /obj/item/toy/figure/bartender, - /obj/item/toy/figure/borg, - /obj/item/toy/figure/gardener, - /obj/item/toy/figure/captain, - /obj/item/toy/figure/cargotech, - /obj/item/toy/figure/ce, - /obj/item/toy/figure/chaplain, - /obj/item/toy/figure/chef, - /obj/item/toy/figure/chemist, - /obj/item/toy/figure/clown, - /obj/item/toy/figure/corgi, - /obj/item/toy/figure/detective, - /obj/item/toy/figure/dsquad, - /obj/item/toy/figure/engineer, - /obj/item/toy/figure/geneticist, - /obj/item/toy/figure/hop, - /obj/item/toy/figure/hos, - /obj/item/toy/figure/qm, - /obj/item/toy/figure/janitor, - /obj/item/toy/figure/agent, - /obj/item/toy/figure/librarian, - /obj/item/toy/figure/md, - /obj/item/toy/figure/mime, - /obj/item/toy/figure/miner, - /obj/item/toy/figure/ninja, - /obj/item/toy/figure/wizard, - /obj/item/toy/figure/rd, - /obj/item/toy/figure/roboticist, - /obj/item/toy/figure/scientist, - /obj/item/toy/figure/syndie, - /obj/item/toy/figure/secofficer, - /obj/item/toy/figure/warden, - /obj/item/toy/figure/psychologist, - /obj/item/toy/figure/paramedic, - /obj/item/toy/figure/ert) - - -/obj/random/plushie - name = "random plushie" - desc = "This is a random plushie." - icon = 'icons/obj/toy.dmi' - icon_state = "nymphplushie" - -/obj/random/plushie/spawn_choices() - return list(/obj/item/toy/plushie/nymph, - /obj/item/toy/plushie/mouse, - /obj/item/toy/plushie/kitten, - /obj/item/toy/plushie/lizard) - -/obj/random/plushie/large - name = "random large plushie" - desc = "This is a random large plushie." - icon = 'icons/obj/toy.dmi' - icon_state = "droneplushie" - -/obj/random/plushie/large/spawn_choices() - return list(/obj/structure/plushie/ian, - /obj/structure/plushie/drone, - /obj/structure/plushie/carp, - /obj/structure/plushie/beepsky) - -/obj/random/junk //Broken items, or stuff that could be picked up - name = "random junk" - desc = "This is some random junk." - icon = 'icons/obj/trash.dmi' - icon_state = "trashbag3" - -/obj/random/junk/spawn_choices() - return list(get_random_junk_type()) - -/obj/random/trash //Mostly remains and cleanable decals. Stuff a janitor could clean up - name = "random trash" - desc = "This is some random trash." - icon = 'icons/effects/effects.dmi' - icon_state = "greenglow" - -/obj/random/trash/spawn_choices() - return list(/obj/item/remains/lizard, - /obj/effect/decal/cleanable/blood/gibs/robot, - /obj/effect/decal/cleanable/blood/oil, - /obj/effect/decal/cleanable/blood/oil/streak, - /obj/effect/decal/cleanable/spiderling_remains, - /obj/item/remains/mouse, - /obj/effect/decal/cleanable/vomit, - /obj/effect/decal/cleanable/blood/splatter, - /obj/effect/decal/cleanable/ash, - /obj/effect/decal/cleanable/generic, - /obj/effect/decal/cleanable/flour, - /obj/effect/decal/cleanable/dirt, - /obj/item/remains/robot) - - -/obj/random/closet //A couple of random closets to spice up maint - name = "random closet" - desc = "This is a random closet." - icon = 'icons/obj/closets/bases/closet.dmi' - icon_state = "base" - var/vermin_chance = 5 - var/list/locker_vermin = list( - /mob/living/simple_animal/passive/mouse, - /mob/living/simple_animal/passive/opossum, - /mob/living/carbon/alien/diona - ) - -/obj/random/closet/spawn_choices() - return list(/obj/structure/closet, - /obj/structure/closet/firecloset, - /obj/structure/closet/emcloset, - /obj/structure/closet/jcloset, - /obj/structure/closet/athletic_mixed, - /obj/structure/closet/toolcloset, - /obj/structure/closet/l3closet/general, - /obj/structure/closet/cabinet, - /obj/structure/closet/crate, - /obj/structure/closet/crate/freezer, - /obj/structure/closet/crate/freezer/rations, - /obj/structure/closet/crate/internals, - /obj/structure/closet/crate/trashcart, - /obj/structure/closet/crate/medical, - /obj/structure/closet/boxinggloves, - /obj/structure/largecrate, - /obj/structure/closet/wardrobe/xenos, - /obj/structure/closet/wardrobe/mixed, - /obj/structure/closet/wardrobe/suit, - /obj/structure/closet/wardrobe/orange - ) -/obj/random/closet/spawn_item() - . = ..() - if(. && length(locker_vermin) && prob(vermin_chance)) - var/vermin_type = pickweight(locker_vermin) - new vermin_type(.) - -/obj/random/coin - name = "random coin" - desc = "This is a random coin." - icon = 'icons/obj/coin.dmi' - icon_state = "coin1" - -/obj/random/coin/spawn_choices() - return list(/obj/item/material/coin/gold = 3, - /obj/item/material/coin/silver = 4, - /obj/item/material/coin/diamond = 2, - /obj/item/material/coin/iron = 4, - /obj/item/material/coin/uranium = 3, - /obj/item/material/coin/platinum = 1, - /obj/item/material/coin/phoron = 1) - -/obj/random/toy - name = "random toy" - desc = "This is a random toy." - icon = 'icons/obj/toy.dmi' - icon_state = "ship" - -/obj/random/toy/spawn_choices() - return list(/obj/item/toy/bosunwhistle, - /obj/item/toy/therapy_red, - /obj/item/toy/therapy_purple, - /obj/item/toy/therapy_blue, - /obj/item/toy/therapy_yellow, - /obj/item/toy/therapy_orange, - /obj/item/toy/therapy_green, - /obj/item/toy/cultsword, - /obj/item/toy/katana, - /obj/item/toy/snappop, - /obj/item/toy/sword, - /obj/item/toy/water_balloon, - /obj/item/toy/crossbow, - /obj/item/toy/blink, - /obj/item/reagent_containers/spray/waterflower, - /obj/item/toy/prize/powerloader, - /obj/item/toy/prize/fireripley, - /obj/item/toy/prize/deathripley, - /obj/item/toy/prize/gygax, - /obj/item/toy/prize/durand, - /obj/item/toy/prize/honk, - /obj/item/toy/prize/marauder, - /obj/item/toy/prize/seraph, - /obj/item/toy/prize/mauler, - /obj/item/toy/prize/odysseus, - /obj/item/toy/prize/phazon, - /obj/item/deck/cards) - -/obj/random/tank - name = "random tank" - desc = "This is a tank." - icon = 'icons/obj/tank.dmi' - icon_state = "canister" - -/obj/random/tank/spawn_choices() - return list(/obj/item/tank/oxygen = 5, - /obj/item/tank/oxygen_yellow = 4, - /obj/item/tank/oxygen_scba = 4, - /obj/item/tank/air = 3, - /obj/item/tank/oxygen_emergency = 4, - /obj/item/tank/oxygen_emergency_extended = 3, - /obj/item/tank/oxygen_emergency_double = 2, - /obj/item/tank/nitrogen_emergency = 2, - /obj/item/tank/nitrogen_emergency_double = 1, - /obj/item/tank/nitrogen = 1, - /obj/item/device/suit_cooling_unit = 1) - -/obj/random/material //Random materials for building stuff - name = "random material" - desc = "This is a random material." - icon = 'icons/obj/materials.dmi' - icon_state = "sheet" - -/obj/random/material/spawn_choices() - return list(/obj/item/stack/material/steel/ten, - /obj/item/stack/material/glass/ten, - /obj/item/stack/material/glass/reinforced/ten, - /obj/item/stack/material/plastic/ten, - /obj/item/stack/material/wood/ten, - /obj/item/stack/material/cardboard/ten, - /obj/item/stack/material/rods/ten, - /obj/item/stack/material/plasteel/ten, - /obj/item/stack/material/steel/fifty, - /obj/item/stack/material/glass/fifty, - /obj/item/stack/material/glass/reinforced/fifty, - /obj/item/stack/material/plastic/fifty, - /obj/item/stack/material/wood/fifty, - /obj/item/stack/material/cardboard/fifty, - /obj/item/stack/material/rods/fifty, - /obj/item/stack/material/plasteel/fifty) - -/obj/random/soap - name = "Random Cleaning Supplies" - desc = "This is a random bar of soap. Soap! SOAP?! SOAP!!!" - icon = 'icons/obj/items.dmi' - icon_state = "soaprandom" - -/obj/random/soap/spawn_choices() - return list(/obj/item/soap = 12, - /obj/item/reagent_containers/glass/rag = 2, - /obj/item/reagent_containers/spray/cleaner = 2, - /obj/item/grenade/chem_grenade/cleaner = 1) - -/obj/random/obstruction //Large objects to block things off in maintenance - name = "random obstruction" - desc = "This is a random obstruction." - icon = 'icons/obj/cult.dmi' - icon_state = "cultgirder" - -/obj/random/obstruction/spawn_choices() - return list(/obj/structure/barricade, - /obj/structure/girder, - /obj/structure/girder/displaced, - /obj/structure/grille, - /obj/structure/grille/broken, - /obj/structure/foamedmetal, - /obj/item/caution, - /obj/item/caution/cone, - /obj/structure/inflatable/wall, - /obj/structure/inflatable/door) - -/obj/random/assembly - name = "random assembly" - desc = "This is a random circuit assembly." - icon = 'icons/obj/items.dmi' - icon_state = "gift1" - -/obj/random/assembly/spawn_choices() - return list(/obj/item/device/electronic_assembly, - /obj/item/device/electronic_assembly/medium, - /obj/item/device/electronic_assembly/large, - /obj/item/device/electronic_assembly/drone) - -/obj/random/advdevice - name = "random advanced device" - desc = "This is a random advanced device." - icon = 'icons/obj/items.dmi' - icon_state = "game_kit" - -/obj/random/advdevice/spawn_choices() - return list(/obj/item/device/flashlight/lantern, - /obj/item/device/flashlight/flare, - /obj/item/device/flashlight/pen, - /obj/item/device/toner, - /obj/item/device/paicard, - /obj/item/device/destTagger, - /obj/item/beartrap, - /obj/item/handcuffs, - /obj/item/camera_assembly, - /obj/item/device/camera, - /obj/item/modular_computer/pda, - /obj/item/card/emag_broken, - /obj/item/device/radio/headset, - /obj/item/device/flashlight/flare/glowstick/yellow, - /obj/item/device/flashlight/flare/glowstick/orange, - /obj/item/grenade/light, - /obj/item/device/oxycandle, - /obj/item/device/flashlight/upgraded) - -/obj/random/smokes - name = "random smokeable" - desc = "This is a random smokeable item." - icon = 'icons/obj/cigarettes.dmi' - icon_state = "Bpacket" - -/obj/random/smokes/spawn_choices() - return list(/obj/item/storage/fancy/cigarettes = 5, - /obj/item/storage/fancy/cigarettes/dromedaryco = 4, - /obj/item/storage/fancy/cigarettes/killthroat = 1, - /obj/item/storage/fancy/cigarettes/luckystars = 3, - /obj/item/storage/fancy/cigarettes/jerichos = 3, - /obj/item/storage/fancy/cigarettes/menthols = 2, - /obj/item/storage/fancy/cigarettes/carcinomas = 3, - /obj/item/storage/fancy/cigarettes/professionals = 2, - /obj/item/storage/fancy/cigar = 1, - /obj/item/clothing/mask/smokable/cigarette = 2, - /obj/item/clothing/mask/smokable/cigarette/menthol = 2, - /obj/item/clothing/mask/smokable/cigarette/cigar = 1, - /obj/item/clothing/mask/smokable/cigarette/cigar/cohiba = 1, - /obj/item/clothing/mask/smokable/cigarette/cigar/havana = 1) - -/obj/random/masks - name = "random mask" - desc = "This is a random face mask." - icon = 'icons/obj/clothing/obj_mask.dmi' - icon_state = "gas_mask" - -/obj/random/masks/spawn_choices() - return list(/obj/item/clothing/mask/gas = 4, - /obj/item/clothing/mask/gas/half = 5, - /obj/item/clothing/mask/gas/swat = 1, - /obj/item/clothing/mask/gas/syndicate = 1, - /obj/item/clothing/mask/breath = 6, - /obj/item/clothing/mask/breath/medical = 4, - /obj/item/clothing/mask/balaclava = 3, - /obj/item/clothing/mask/balaclava/tactical = 2, - /obj/item/clothing/mask/surgical = 4) - -/obj/random/snack - name = "random snack" - desc = "This is a random snack item." - icon = 'icons/obj/food.dmi' - icon_state = "sosjerky" - -/obj/random/snack/spawn_choices() - return list(/obj/item/reagent_containers/food/snacks/liquidfood, - /obj/item/reagent_containers/food/snacks/candy, - /obj/item/reagent_containers/food/drinks/dry_ramen, - /obj/item/reagent_containers/food/snacks/chips, - /obj/item/reagent_containers/food/snacks/sosjerky, - /obj/item/reagent_containers/food/snacks/no_raisin, - /obj/item/reagent_containers/food/snacks/spacetwinkie, - /obj/item/reagent_containers/food/snacks/cheesiehonkers, - /obj/item/reagent_containers/food/snacks/tastybread, - /obj/item/reagent_containers/food/snacks/proteinbar, - /obj/item/reagent_containers/food/snacks/syndicake, - /obj/item/reagent_containers/food/snacks/donut, - /obj/item/reagent_containers/food/snacks/donut/cherryjelly, - /obj/item/reagent_containers/food/snacks/donut/jelly, - /obj/item/pizzabox/meat, - /obj/item/pizzabox/vegetable, - /obj/item/pizzabox/margherita, - /obj/item/pizzabox/mushroom, - /obj/item/reagent_containers/food/snacks/plumphelmetbiscuit, - /obj/item/reagent_containers/food/snacks/skrellsnacks) - - -/obj/random/storage - name = "random storage item" - desc = "This is a storage item." - icon = 'icons/obj/storage.dmi' - icon_state = "idOld" - -/obj/random/storage/spawn_choices() - return list( - /obj/item/storage/secure/briefcase = 3, - /obj/item/storage/briefcase = 5, - /obj/item/storage/briefcase/inflatable = 4, - /obj/item/storage/backpack = 6, - /obj/item/storage/backpack/satchel = 6, - /obj/item/storage/backpack/dufflebag = 3, - /obj/item/storage/box = 6, - /obj/item/storage/box/donkpocket_mixed = 2, - /obj/item/storage/box/donkpocket_protein = 1, - /obj/item/storage/box/donkpocket_vegetable = 1, - /obj/item/storage/box/donkpocket_fruit = 1, - /obj/item/storage/box/donkpocket_dessert = 1, - /obj/item/storage/box/donkpocket_premium = 1, - /obj/item/storage/box/donut = 3, - /obj/item/storage/box/cups = 4, - /obj/item/storage/box/mousetraps = 5, - /obj/item/storage/box/engineer = 4, - /obj/item/storage/box/autoinjectors = 3, - /obj/item/storage/box/beakers = 4, - /obj/item/storage/box/syringes = 4, - /obj/item/storage/box/gloves = 4, - /obj/item/storage/box/large = 3, - /obj/item/storage/box/glowsticks = 4, - /obj/item/storage/wallet = 2, - /obj/item/storage/ore = 3, - /obj/item/storage/belt/utility/full = 3, - /obj/item/storage/belt/medical/emt = 3, - /obj/item/storage/belt/medical = 3, - /obj/item/storage/belt/holster/security = 3, - /obj/item/storage/belt/holster/security/tactical = 2 - ) - - -/obj/random/shoes - name = "random footwear" - desc = "This is a random pair of shoes." - icon = 'icons/obj/clothing/obj_feet.dmi' - icon_state = "boots" - -/obj/random/shoes/spawn_choices() - return list(/obj/item/clothing/shoes/workboots = 3, - /obj/item/clothing/shoes/jackboots = 3, - /obj/item/clothing/shoes/swat = 1, - /obj/item/clothing/shoes/combat = 1, - /obj/item/clothing/shoes/galoshes = 2, - /obj/item/clothing/shoes/syndigaloshes = 1, - /obj/item/clothing/shoes/magboots = 1, - /obj/item/clothing/shoes/laceup = 4, - /obj/item/clothing/shoes/black = 4, - /obj/item/clothing/shoes/jungleboots = 3, - /obj/item/clothing/shoes/desertboots = 3, - /obj/item/clothing/shoes/dutyboots = 3, - /obj/item/clothing/shoes/tactical = 1, - /obj/item/clothing/shoes/dress = 3, - /obj/item/clothing/shoes/dress/white = 3, - /obj/item/clothing/shoes/sandal = 3, - /obj/item/clothing/shoes/brown = 4, - /obj/item/clothing/shoes/red = 4, - /obj/item/clothing/shoes/blue = 4, - /obj/item/clothing/shoes/leather = 4) - -/obj/random/gloves - name = "random gloves" - desc = "This is a random pair of gloves." - icon = 'icons/obj/clothing/obj_hands.dmi' - icon_state = "rainbow" - -/obj/random/gloves/spawn_choices() - return list(/obj/item/clothing/gloves/insulated = 3, - /obj/item/clothing/gloves/thick = 6, - /obj/item/clothing/gloves/thick/botany = 5, - /obj/item/clothing/gloves/latex = 4, - /obj/item/clothing/gloves/thick/swat = 3, - /obj/item/clothing/gloves/thick/combat = 3, - /obj/item/clothing/gloves/white = 5, - /obj/item/clothing/gloves/rainbow = 1, - /obj/item/clothing/gloves/thick/duty = 5, - /obj/item/clothing/gloves/guards = 3, - /obj/item/clothing/gloves/tactical = 3, - /obj/item/clothing/gloves/insulated/cheap = 5) - -/obj/random/glasses - name = "random eyewear" - desc = "This is a random pair of glasses." - icon = 'icons/obj/clothing/obj_eyes.dmi' - icon_state = "leforge" - -/obj/random/glasses/spawn_choices() - return list(/obj/item/clothing/glasses/sunglasses = 3, - /obj/item/clothing/glasses/prescription = 7, - /obj/item/clothing/glasses/meson = 5, - /obj/item/clothing/glasses/meson/prescription = 4, - /obj/item/clothing/glasses/science = 6, - /obj/item/clothing/glasses/material = 5, - /obj/item/clothing/glasses/welding = 3, - /obj/item/clothing/glasses/hud/health = 4, - /obj/item/clothing/glasses/hud/health/prescription = 3, - /obj/item/clothing/glasses/hud/security = 4, - /obj/item/clothing/glasses/hud/security/prescription = 3, - /obj/item/clothing/glasses/hud/security/prot = 2, - /obj/item/clothing/glasses/hud/security/prot/sunglasses = 3, - /obj/item/clothing/glasses/hud/security/prot/aviators = 1, - /obj/item/clothing/glasses/tacgoggles = 1) - -/obj/random/hat - name = "random headgear" - desc = "This is a random hat of some kind." - icon = 'icons/obj/clothing/obj_head.dmi' - icon_state = "tophat" - -/obj/random/hat/spawn_choices() - return list(/obj/item/clothing/head/helmet = 2, - /obj/item/clothing/head/helmet/tactical = 1, - /obj/item/clothing/head/helmet/space/emergency = 1, - /obj/item/clothing/head/bio_hood/general = 1, - /obj/item/clothing/head/hardhat = 4, - /obj/item/clothing/head/hardhat/orange = 4, - /obj/item/clothing/head/hardhat/red = 4, - /obj/item/clothing/head/hardhat/dblue = 4, - /obj/item/clothing/head/ushanka = 3, - /obj/item/clothing/head/welding = 2) - -/obj/random/suit - name = "random suit" - desc = "This is a random piece of outerwear." - icon = 'icons/obj/clothing/obj_suit.dmi' - icon_state = "syndicate" - -/obj/random/suit/spawn_choices() - return list(/obj/item/clothing/suit/storage/hazardvest = 4, - /obj/item/clothing/suit/storage/toggle/labcoat = 4, - /obj/item/clothing/suit/space/emergency = 1, - /obj/item/clothing/suit/armor/vest = 4, - /obj/item/clothing/suit/storage/vest/tactical = 1, - /obj/item/clothing/suit/storage/vest = 3, - /obj/item/clothing/suit/storage/toggle/bomber = 3, - /obj/item/clothing/suit/chef/classic = 3, - /obj/item/clothing/suit/surgicalapron = 2, - /obj/item/clothing/suit/apron/overalls = 3, - /obj/item/clothing/suit/bio_suit/general = 1, - /obj/item/clothing/suit/storage/toggle/hoodie/black = 3, - /obj/item/clothing/suit/storage/toggle/brown_jacket = 3, - /obj/item/clothing/suit/storage/leather_jacket = 3, - /obj/item/clothing/suit/apron = 4) - -/obj/random/clothing - name = "random clothes" - desc = "This is a random piece of clothing." - icon = 'icons/obj/clothing/obj_under.dmi' - icon_state = "jumpsuit" - -/obj/random/clothing/spawn_choices() - return list(/obj/item/clothing/under/syndicate/tacticool = 2, - /obj/item/clothing/under/syndicate/combat = 1, - /obj/item/clothing/under/hazard = 4, - /obj/item/clothing/under/sterile = 4, - /obj/item/clothing/under/casual_pants/camo = 2, - /obj/item/clothing/under/frontier = 2, - /obj/item/clothing/under/harness = 2, - /obj/item/clothing/under/rank/medical/paramedic = 2, - /obj/item/clothing/under/overalls = 2, - /obj/item/clothing/ears/earmuffs = 2, - /obj/item/clothing/under/tactical = 1) - -/obj/random/accessory - name = "random accessory" - desc = "This is a random utility accessory." - icon = 'icons/obj/clothing/obj_accessories.dmi' - icon_state = "horribletie" - -/obj/random/accessory/spawn_choices() - return list(/obj/item/clothing/accessory/storage/webbing = 3, - /obj/item/clothing/accessory/storage/webbing_large = 3, - /obj/item/clothing/accessory/storage/black_vest = 2, - /obj/item/clothing/accessory/storage/brown_vest = 2, - /obj/item/clothing/accessory/storage/white_vest = 2, - /obj/item/clothing/accessory/storage/bandolier = 1, - /obj/item/clothing/accessory/storage/holster/thigh = 1, - /obj/item/clothing/accessory/storage/holster/hip = 1, - /obj/item/clothing/accessory/storage/holster/waist = 1, - /obj/item/clothing/accessory/storage/holster/armpit = 1, - /obj/item/clothing/accessory/kneepads = 3, - /obj/item/clothing/accessory/stethoscope = 2) - -GLOBAL_LIST_INIT(random_backpacks, list( - /obj/item/storage/backpack/cultpack, - /obj/item/storage/backpack/clown, - /obj/item/storage/backpack/medic, - /obj/item/storage/backpack/security, - /obj/item/storage/backpack/security/exo, - /obj/item/storage/backpack/command, - /obj/item/storage/backpack/industrial, - /obj/item/storage/backpack/toxins, - /obj/item/storage/backpack/hydroponics, - /obj/item/storage/backpack/genetics, - /obj/item/storage/backpack/virology, - /obj/item/storage/backpack/chemistry -)) - -/obj/random/backpack - name = "random backpack" - desc = "This is a random backpack." - icon = 'icons/obj/storage.dmi' - icon_state = "backpack" - -/obj/random/backpack/spawn_choices() - return GLOB.random_backpacks - -/obj/random/cash - name = "random currency" - desc = "LOADSAMONEY!" - icon = 'icons/obj/items.dmi' - icon_state = "spacecash1" - -/obj/random/cash/spawn_choices() - return list(/obj/item/spacecash/bundle/c1 = 4, - /obj/item/spacecash/bundle/c10 = 3, - /obj/item/spacecash/bundle/c20 = 3, - /obj/item/spacecash/bundle/c50 = 2, - /obj/item/spacecash/bundle/c100 = 2, - /obj/item/spacecash/bundle/c1000 = 1) - -/obj/random/documents // top secret documents for SCG eyes only - name = "random secret documents" - icon = 'icons/obj/bureaucracy.dmi' - icon_state = "docs_generic" - -/obj/random/documents/spawn_choices() - return list ( - /obj/item/documents/scg/verified = 7, - /obj/item/documents/scg/red = 7, - /obj/item/documents/scg/blue = 7, - /obj/item/documents/scg/brains = 7 - ) - -/obj/random/maintenance //Clutter and loot for maintenance and away missions - name = "random maintenance item" - desc = "This is a random maintenance item." - icon = 'icons/obj/items.dmi' - icon_state = "gift1" - -/obj/random/maintenance/spawn_choices() - return list(/obj/random/junk = 4, - /obj/random/trash = 4, - /obj/random/maintenance/clean = 5) - -/obj/random/maintenance/clean -/*Maintenance loot lists without the trash, for use inside things. -Individual items to add to the maintenance list should go here, if you add -something, make sure it's not in one of the other lists.*/ - name = "random clean maintenance item" - desc = "This is a random clean maintenance item." - icon = 'icons/obj/items.dmi' - icon_state = "gift2" - -/obj/random/maintenance/clean/spawn_choices() - return list(/obj/random/tech_supply = 100, - /obj/random/medical = 40, - /obj/random/medical/lite = 80, - /obj/random/firstaid = 20, - /obj/random/powercell = 50, - /obj/random/technology_scanner = 80, - /obj/random/bomb_supply = 80, - /obj/random/contraband = 1, - /obj/random/action_figure = 2, - /obj/random/plushie = 2, - /obj/random/material = 40, - /obj/random/coin = 5, - /obj/random/toy = 20, - /obj/random/tank = 20, - /obj/random/soap = 5, - /obj/random/drinkbottle = 5, - /obj/random/loot = 1, - /obj/random/advdevice = 50, - /obj/random/smokes = 30, - /obj/random/masks = 10, - /obj/random/snack = 60, - /obj/random/storage = 30, - /obj/random/shoes = 20, - /obj/random/gloves = 10, - /obj/random/glasses = 20, - /obj/random/hat = 10, - /obj/random/suit = 20, - /obj/random/clothing = 30, - /obj/random/accessory = 20, - /obj/random/cash = 10) - -/obj/random/loot /*Better loot for away missions and salvage */ - name = "random loot" - desc = "This is some random loot." - icon = 'icons/obj/items.dmi' - icon_state = "gift3" - -/obj/random/loot/spawn_choices() - return list(/obj/random/energy = 10, - /obj/random/projectile = 10, - /obj/random/voidhelmet = 10, - /obj/random/voidsuit = 10, - /obj/random/hardsuit = 10, - /obj/item/clothing/mask/muzzle = 7, - /obj/item/clothing/mask/gas/vox = 8, - /obj/item/clothing/mask/gas/syndicate = 10, - /obj/item/clothing/glasses/night = 3, - /obj/item/clothing/glasses/thermal = 1, - /obj/item/clothing/glasses/welding/superior = 7, - /obj/item/clothing/head/collectable/petehat = 4, - /obj/item/clothing/suit/storage/vest/merc = 3, - /obj/item/clothing/suit/straight_jacket = 6, - /obj/item/clothing/head/helmet/merc = 3, - /obj/item/stack/material/diamond/ten = 7, - /obj/item/stack/material/glass/phoronrglass/ten = 7, - /obj/item/stack/material/marble/ten = 8, - /obj/item/stack/material/phoron/ten = 7, - /obj/item/stack/material/gold/ten = 7, - /obj/item/stack/material/silver/ten = 7, - /obj/item/stack/material/osmium/ten = 7, - /obj/item/stack/material/platinum/ten = 8, - /obj/item/stack/material/tritium/ten = 7, - /obj/item/stack/material/mhydrogen/ten = 6, - /obj/item/stack/material/plasteel/ten = 9, - /obj/item/storage/box/monkeycubes = 5, - /obj/item/storage/box/monkeycubes/neaeracubes = 4, - /obj/item/storage/box/monkeycubes/stokcubes = 4, - /obj/item/storage/box/monkeycubes/farwacubes = 4, - /obj/item/storage/firstaid/surgery = 4, - /obj/item/cell/infinite = 1, - /obj/item/archaeological_find = 2, - /obj/machinery/artifact = 1, - /obj/item/device/multitool/hacktool = 2, - /obj/item/surgicaldrill = 7, - /obj/item/FixOVein = 7, - /obj/item/retractor = 7, - /obj/item/hemostat = 7, - /obj/item/cautery = 7, - /obj/item/bonesetter = 7, - /obj/item/bonegel = 7, - /obj/item/circular_saw = 7, - /obj/item/scalpel = 7, - /obj/item/melee/baton/loaded = 9, - /obj/item/device/radio/headset/syndicate = 6) - -/obj/random/voidhelmet - name = "Random Voidsuit Helmet" - desc = "This is a random voidsuit helmet." - icon = 'icons/obj/clothing/obj_head.dmi' - icon_state = "void" - -/obj/random/voidhelmet/spawn_choices() - return list(/obj/item/clothing/head/helmet/space/void, - /obj/item/clothing/head/helmet/space/void/engineering, - /obj/item/clothing/head/helmet/space/void/engineering/alt, - /obj/item/clothing/head/helmet/space/void/engineering/salvage, - /obj/item/clothing/head/helmet/space/void/mining, - /obj/item/clothing/head/helmet/space/void/mining/alt, - /obj/item/clothing/head/helmet/space/void/security, - /obj/item/clothing/head/helmet/space/void/security/alt, - /obj/item/clothing/head/helmet/space/void/atmos, - /obj/item/clothing/head/helmet/space/void/atmos/alt, - /obj/item/clothing/head/helmet/space/void/merc, - /obj/item/clothing/head/helmet/space/void/medical, - /obj/item/clothing/head/helmet/space/void/medical/alt, - /obj/item/clothing/head/helmet/space/void/retro - ) - -/obj/random/voidsuit - name = "Random Voidsuit" - desc = "This is a random voidsuit." - icon = 'icons/obj/clothing/obj_suit.dmi' - icon_state = "void" - -/obj/random/voidsuit/spawn_choices() - return list(/obj/item/clothing/suit/space/void, - /obj/item/clothing/suit/space/void/engineering, - /obj/item/clothing/suit/space/void/engineering/alt, - /obj/item/clothing/suit/space/void/engineering/salvage, - /obj/item/clothing/suit/space/void/mining, - /obj/item/clothing/suit/space/void/mining/alt, - /obj/item/clothing/suit/space/void/security, - /obj/item/clothing/suit/space/void/security/alt, - /obj/item/clothing/suit/space/void/atmos, - /obj/item/clothing/suit/space/void/atmos/alt, - /obj/item/clothing/suit/space/void/merc, - /obj/item/clothing/suit/space/void/medical, - /obj/item/clothing/suit/space/void/medical/alt, - /obj/item/clothing/suit/space/void/retro - ) - -/obj/random/hardsuit - name = "Random Hardsuit" - desc = "This is a random hardsuit control module." - icon = 'icons/obj/rig_modules.dmi' - icon_state = "generic" - -/obj/random/hardsuit/spawn_choices() - return list(/obj/item/rig/industrial, - /obj/item/rig/eva, - /obj/item/rig/light/hacker, - /obj/item/rig/light/stealth, - /obj/item/rig/light, - /obj/item/rig/unathi) - -/obj/random/hostile - name = "Random Hostile Mob" - desc = "This is a random hostile mob." - icon = 'icons/mob/crow.dmi' - icon_state = "crow" - spawn_nothing_percentage = 80 - -/obj/random/hostile/spawn_choices() - return list(/mob/living/simple_animal/hostile/viscerator, - /mob/living/simple_animal/hostile/carp, - /mob/living/simple_animal/hostile/carp/pike) - -/* - Selects one spawn point out of a group of points with the same ID and asks it to generate its items -*/ -var/global/list/multi_point_spawns - -/obj/random_multi - name = "random object spawn point" - desc = "This item type is used to spawn random objects at round-start. Only one spawn point for a given group id is selected." - icon = 'icons/misc/mark.dmi' - icon_state = "x3" - invisibility = INVISIBILITY_MAXIMUM - var/id // Group id - var/weight // Probability weight for this spawn point - -/obj/random_multi/Initialize() - . = ..() - weight = max(1, round(weight)) - - if(!multi_point_spawns) - multi_point_spawns = list() - var/list/spawnpoints = multi_point_spawns[id] - if(!spawnpoints) - spawnpoints = list() - multi_point_spawns[id] = spawnpoints - spawnpoints[src] = weight - -/obj/random_multi/Destroy() - var/list/spawnpoints = multi_point_spawns[id] - spawnpoints -= src - if(!spawnpoints.len) - multi_point_spawns -= id - . = ..() - -/obj/random_multi/proc/generate_items() - return - -/obj/random_multi/single_item - var/item_path // Item type to spawn - -/obj/random_multi/single_item/generate_items() - new item_path(loc) - -/hook/roundstart/proc/generate_multi_spawn_items() - for(var/id in multi_point_spawns) - var/list/spawn_points = multi_point_spawns[id] - var/obj/random_multi/rm = pickweight(spawn_points) - rm.generate_items() - for(var/entry in spawn_points) - qdel(entry) - return 1 - -/obj/random_multi/single_item/captains_spare_id - name = "Multi Point - Captain's Spare" - id = "Captain's spare id" - item_path = /obj/item/card/id/captains_spare - -/obj/random_multi/single_item/skelestand - name = "Multi Point - Medical Skeleton" - id = "Medical Skeleton" - item_path = /obj/structure/skele_stand - -/obj/random_multi/single_item/skelestand/maint - name = "Multi Point - Maintenance Skeleton" - id = "Maint Skeleton" - item_path = /obj/structure/skele_stand/maint - -var/global/list/random_junk_ -var/global/list/random_useful_ -/proc/get_random_useful_type() - if(!random_useful_) - random_useful_ = list() - random_useful_ += /obj/item/pen/crayon/random - random_useful_ += /obj/item/pen - random_useful_ += /obj/item/pen/blue - random_useful_ += /obj/item/pen/red - random_useful_ += /obj/item/pen/multi - random_useful_ += /obj/item/storage/box/matches - random_useful_ += /obj/item/stack/material/cardboard - random_useful_ += /obj/item/storage/fancy/cigarettes - random_useful_ += /obj/item/deck/cards - return pick(random_useful_) - -/proc/get_random_junk_type() - if(prob(20)) // Misc. clutter - return /obj/effect/decal/cleanable/generic - - // 80% chance that we reach here - if(prob(95)) // Misc. junk - if(!random_junk_) - random_junk_ = subtypesof(/obj/item/trash) - random_junk_ += typesof(/obj/item/trash/cigbutt) - random_junk_ += /obj/effect/decal/cleanable/spiderling_remains - random_junk_ += /obj/item/remains/mouse - random_junk_ += /obj/item/remains/robot - random_junk_ += /obj/item/paper/crumpled - random_junk_ += /obj/item/inflatable/torn - random_junk_ += /obj/effect/decal/cleanable/molten_item - random_junk_ += /obj/item/material/shard - random_junk_ += /obj/item/hand/missing_card - - random_junk_ -= /obj/item/trash/plate - random_junk_ -= /obj/item/trash/snack_bowl - random_junk_ -= /obj/item/trash/syndi_cakes - random_junk_ -= /obj/item/trash/tray - return pick(random_junk_) - - // Misc. actually useful stuff or perhaps even food - // 4% chance that we reach here - if(prob(75)) - return get_random_useful_type() - - // 1% chance that we reach here - var/lunches = lunchables_lunches() - return lunches[pick(lunches)] - -/obj/random/clipboard - name = "random clipboard" - desc = "This is a random material clipboard." - icon = 'icons/obj/bureaucracy.dmi' - icon_state = "clipboard_preview" - -/obj/random/clipboard/spawn_choices() - return list(/obj/item/material/clipboard = 300, - /obj/item/material/clipboard/steel = 200, - /obj/item/material/clipboard/aluminium = 200, - /obj/item/material/clipboard/plastic = 200, - /obj/item/material/clipboard/glass = 100, - /obj/item/material/clipboard/ebony = 10) - -//Random MRE stuff - -/obj/random/mre - name = "random MRE" - desc = "This is a random single MRE." - icon = 'icons/obj/food.dmi' - icon_state = "mre" - -/obj/random/mre/spawn_choices() - return list(/obj/item/storage/mre, - /obj/item/storage/mre/menu2, - /obj/item/storage/mre/menu3, - /obj/item/storage/mre/menu4, - /obj/item/storage/mre/menu5, - /obj/item/storage/mre/menu6, - /obj/item/storage/mre/menu7, - /obj/item/storage/mre/menu8, - /obj/item/storage/mre/menu9, - /obj/item/storage/mre/menu10) - - -/obj/random/mre/main - name = "random MRE main course" - desc = "This is a random main course for MREs." - icon_state = "pouch_medium" - -/obj/random/mre/main/spawn_choices() - return list(/obj/item/storage/mrebag, - /obj/item/storage/mrebag/menu2, - /obj/item/storage/mrebag/menu3, - /obj/item/storage/mrebag/menu4, - /obj/item/storage/mrebag/menu5, - /obj/item/storage/mrebag/menu6, - /obj/item/storage/mrebag/menu7, - /obj/item/storage/mrebag/menu8) - -/obj/random/mre/dessert - name = "random MRE dessert" - desc = "This is a random dessert for MREs." - icon_state = "pouch_medium" - -/obj/random/mre/dessert/spawn_choices() - return list(/obj/item/reagent_containers/food/snacks/candy, - /obj/item/reagent_containers/food/snacks/proteinbar, - /obj/item/reagent_containers/food/snacks/donut/normal, - /obj/item/reagent_containers/food/snacks/donut/cherryjelly, - /obj/item/reagent_containers/food/snacks/chocolatebar, - /obj/item/reagent_containers/food/snacks/cookie, - /obj/item/reagent_containers/food/snacks/poppypretzel, - /obj/item/clothing/mask/chewable/candy/gum) - -/obj/random/mre/dessert/vegan - name = "random vegan MRE dessert" - desc = "This is a random vegan dessert for MREs." - -/obj/random/mre/dessert/vegan/spawn_choices() - return list(/obj/item/reagent_containers/food/snacks/candy, - /obj/item/reagent_containers/food/snacks/chocolatebar, - /obj/item/reagent_containers/food/snacks/donut/cherryjelly, - /obj/item/reagent_containers/food/snacks/plumphelmetbiscuit) - -/obj/random/mre/drink - name = "random MRE drink" - desc = "This is a random drink for MREs." - icon_state = "packet_small" - -/obj/random/mre/drink/spawn_choices() - return list(/obj/item/reagent_containers/food/condiment/small/packet/coffee, - /obj/item/reagent_containers/food/condiment/small/packet/tea, - /obj/item/reagent_containers/food/condiment/small/packet/cocoa, - /obj/item/reagent_containers/food/condiment/small/packet/grape, - /obj/item/reagent_containers/food/condiment/small/packet/orange, - /obj/item/reagent_containers/food/condiment/small/packet/watermelon, - /obj/item/reagent_containers/food/condiment/small/packet/apple) - -/obj/random/mre/spread - name = "random MRE spread" - desc = "This is a random spread packet for MREs." - icon_state = "packet_small" - -/obj/random/mre/spread/spawn_choices() - return list(/obj/item/reagent_containers/food/condiment/small/packet/jelly, - /obj/item/reagent_containers/food/condiment/small/packet/honey) - -/obj/random/mre/spread/vegan - name = "random vegan MRE spread" - desc = "This is a random vegan spread packet for MREs." - -/obj/random/mre/spread/vegan/spawn_choices() - return list(/obj/item/reagent_containers/food/condiment/small/packet/jelly) - -/obj/random/mre/sauce - name = "random MRE sauce" - desc = "This is a random sauce packet for MREs." - icon_state = "packet_small" - -/obj/random/mre/sauce/spawn_choices() - return list(/obj/item/reagent_containers/food/condiment/small/packet/salt, - /obj/item/reagent_containers/food/condiment/small/packet/pepper, - /obj/item/reagent_containers/food/condiment/small/packet/sugar, - /obj/item/reagent_containers/food/condiment/small/packet/capsaicin, - /obj/item/reagent_containers/food/condiment/small/packet/ketchup, - /obj/item/reagent_containers/food/condiment/small/packet/mayo, - /obj/item/reagent_containers/food/condiment/small/packet/soy) - -/obj/random/mre/sauce/vegan/spawn_choices() - return list(/obj/item/reagent_containers/food/condiment/small/packet/salt, - /obj/item/reagent_containers/food/condiment/small/packet/pepper, - /obj/item/reagent_containers/food/condiment/small/packet/sugar, - /obj/item/reagent_containers/food/condiment/small/packet/soy) - -/obj/random/mre/sauce/sugarfree/spawn_choices() - return list(/obj/item/reagent_containers/food/condiment/small/packet/salt, - /obj/item/reagent_containers/food/condiment/small/packet/pepper, - /obj/item/reagent_containers/food/condiment/small/packet/capsaicin, - /obj/item/reagent_containers/food/condiment/small/packet/ketchup, - /obj/item/reagent_containers/food/condiment/small/packet/mayo, - /obj/item/reagent_containers/food/condiment/small/packet/soy) - -/obj/random/mre/sauce/crayon/spawn_choices() - return list(/obj/item/reagent_containers/food/condiment/small/packet/crayon, - /obj/item/reagent_containers/food/condiment/small/packet/crayon/red, - /obj/item/reagent_containers/food/condiment/small/packet/crayon/orange, - /obj/item/reagent_containers/food/condiment/small/packet/crayon/yellow, - /obj/item/reagent_containers/food/condiment/small/packet/crayon/green, - /obj/item/reagent_containers/food/condiment/small/packet/crayon/blue, - /obj/item/reagent_containers/food/condiment/small/packet/crayon/purple, - /obj/item/reagent_containers/food/condiment/small/packet/crayon/grey, - /obj/item/reagent_containers/food/condiment/small/packet/crayon/brown) - -/obj/random/vendor - name = "random vending machine" - desc = "This is a randomly selected vending machine." - icon = 'icons/obj/vending.dmi' - icon_state = "" - -/obj/random/vendor/spawn_choices() - return list(/obj/machinery/vending/weeb, - /obj/machinery/vending/sol, - /obj/machinery/vending/snix, - /obj/machinery/vending/soda - ) - -/obj/random/single/playing_cards - name = "randomly spawned deck of cards" - icon = 'icons/obj/playing_cards.dmi' - icon_state = "deck" - spawn_object = /obj/item/deck - -/obj/random/single/lighter - name = "randomly spawned lighter" - icon = 'icons/obj/lighters.dmi' - icon_state = "lighter" - spawn_object = /obj/item/flame/lighter - -/obj/random/single/cola - name = "randomly spawned cola" - icon = 'icons/obj/drinks.dmi' - icon_state = "cola" - spawn_object = /obj/item/reagent_containers/food/drinks/cans/cola diff --git a/code/game/objects/structures.dm b/code/game/objects/structures.dm deleted file mode 100644 index 3bb391a9c37f5..0000000000000 --- a/code/game/objects/structures.dm +++ /dev/null @@ -1,186 +0,0 @@ -/obj/structure - icon = 'icons/obj/structures.dmi' - w_class = ITEM_SIZE_NO_CONTAINER - layer = STRUCTURE_LAYER - - var/breakable - var/parts - var/list/connections = list("0", "0", "0", "0") - var/list/other_connections = list("0", "0", "0", "0") - var/list/blend_objects = newlist() // Objects which to blend with - var/list/noblend_objects = newlist() //Objects to avoid blending with (such as children of listed blend objects. - var/material/material = null - var/footstep_type - var/mob_offset = 0 //used for on_structure_offset mob animation - -/obj/structure/attack_generic(var/mob/user, var/damage, var/attack_verb, var/wallbreaker) - if(wallbreaker && damage && breakable) - visible_message("\The [user] smashes the \[src] to pieces!") - attack_animation(user) - qdel(src) - return 1 - visible_message("\The [user] [attack_verb] \the [src]!") - attack_animation(user) - damage_health(damage, DAMAGE_BRUTE) - return 1 - -/obj/structure/proc/mob_breakout(var/mob/living/escapee) - set waitfor = FALSE - return FALSE - -/obj/structure/Destroy() - reset_mobs_offset() - var/turf/T = get_turf(src) - if(T && parts) - new parts(T) - . = ..() - if(istype(T)) - T.fluid_update() - -/obj/structure/Crossed(mob/living/M) - if(istype(M)) - M.on_structure_offset(mob_offset) - ..() - -/obj/structure/proc/reset_mobs_offset() - for(var/mob/living/M in loc) - M.on_structure_offset(0) - -/obj/structure/Initialize() - . = ..() - if(!CanFluidPass()) - fluid_update() - -/obj/structure/Move() - . = ..() - if(. && !CanFluidPass()) - fluid_update() - -/obj/structure/attackby(obj/item/O, mob/user) - if(user.a_intent != I_HELP && istype(O, /obj/item/natural_weapon)) - //Bit dirty, but the entire attackby chain seems kinda wrong to begin with - //Things should probably be parent first and return true if something handled it already, not child first - src.add_fingerprint(user) - attack_generic(user, O.force, pick(O.attack_verb)) - return - . = ..() - -/obj/structure/attack_hand(mob/user) - ..() - if(MUTATION_FERAL in user.mutations) - attack_generic(user,10,"smashes") - user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN*2) - attack_animation(user) - playsound(loc, 'sound/weapons/tablehit1.ogg', 40, 1) - if(breakable) - if(MUTATION_HULK in user.mutations) - user.say(pick(";RAAAAAAAARGH!", ";HNNNNNNNNNGGGGGGH!", ";GWAAAAAAAARRRHHH!", "NNNNNNNNGGGGGGGGHH!", ";AAAAAAARRRGH!" )) - attack_generic(user,1,"smashes") - else if(istype(user,/mob/living/carbon/human)) - var/mob/living/carbon/human/H = user - if(H.species.can_shred(user)) - attack_generic(user,1,"slices") - return ..() - -/obj/structure/grab_attack(var/obj/item/grab/G) - if (!G.force_danger()) - to_chat(G.assailant, "You need a better grip to do that!") - return TRUE - if (G.assailant.a_intent == I_HURT) - // Slam their face against the table. - var/blocked = G.affecting.get_blocked_ratio(BP_HEAD, DAMAGE_BRUTE, damage = 8) - if (prob(30 * (1 - blocked))) - G.affecting.Weaken(5) - G.affecting.apply_damage(8, DAMAGE_BRUTE, BP_HEAD) - visible_message("[G.assailant] slams [G.affecting]'s face against \the [src]!") - if (material) - playsound(loc, material.tableslam_noise, 50, 1) - else - playsound(loc, 'sound/weapons/tablehit1.ogg', 50, 1) - damage_health(rand(1, 5), DAMAGE_BRUTE) - qdel(G) - else if(atom_flags & ATOM_FLAG_CLIMBABLE) - var/obj/occupied = turf_is_crowded() - if (occupied) - to_chat(G.assailant, "There's \a [occupied] in the way.") - return TRUE - if (!do_after(G.assailant, 3 SECONDS, G.affecting, DO_PUBLIC_UNIQUE)) - return TRUE - occupied = turf_is_crowded() - if (occupied) - to_chat(G.assailant, "There's \a [occupied] in the way.") - return TRUE - G.affecting.forceMove(src.loc) - G.affecting.Weaken(rand(2,5)) - visible_message("[G.assailant] puts [G.affecting] on \the [src].") - qdel(G) - return TRUE - -/obj/structure/proc/can_visually_connect() - return anchored - -/obj/structure/proc/can_visually_connect_to(var/obj/structure/S) - return istype(S, src) - -/obj/structure/proc/refresh_neighbors() - for(var/thing in RANGE_TURFS(src, 1)) - var/turf/T = thing - T.update_icon() - -/obj/structure/proc/update_connections(propagate = 0) - var/list/dirs = list() - var/list/other_dirs = list() - - for(var/obj/structure/S in orange(src, 1)) - if(can_visually_connect_to(S)) - if(S.can_visually_connect()) - if(propagate) - S.update_connections() - S.update_icon() - dirs += get_dir(src, S) - - if(!can_visually_connect()) - connections = list("0", "0", "0", "0") - other_connections = list("0", "0", "0", "0") - return FALSE - - for(var/direction in GLOB.cardinal) - var/turf/T = get_step(src, direction) - var/success = 0 - for(var/b_type in blend_objects) - if(istype(T, b_type)) - success = 1 - if(propagate) - var/turf/simulated/wall/W = T - if(istype(W)) - W.update_connections(1) - if(success) - break - if(success) - break - if(!success) - for(var/obj/O in T) - for(var/b_type in blend_objects) - if(istype(O, b_type)) - success = 1 - for(var/obj/structure/S in T) - if(can_visually_connect_to(S)) - success = 0 - for(var/nb_type in noblend_objects) - if(istype(O, nb_type)) - success = 0 - - if(success) - break - if(success) - break - - if(success) - dirs += get_dir(src, T) - other_dirs += get_dir(src, T) - - refresh_neighbors() - - connections = dirs_to_corner_states(dirs) - other_connections = dirs_to_corner_states(other_dirs) - return TRUE diff --git a/code/game/objects/structures/ai_decoy.dm b/code/game/objects/structures/ai_decoy.dm deleted file mode 100644 index 5135856258f43..0000000000000 --- a/code/game/objects/structures/ai_decoy.dm +++ /dev/null @@ -1,5 +0,0 @@ -/obj/structure/decoy - name = "\improper AI" - icon = 'icons/mob/AI.dmi' - icon_state = "ai" - anchored = TRUE \ No newline at end of file diff --git a/code/game/objects/structures/banner.dm b/code/game/objects/structures/banner.dm deleted file mode 100644 index 9c9f7daf9b377..0000000000000 --- a/code/game/objects/structures/banner.dm +++ /dev/null @@ -1,69 +0,0 @@ -/obj/structure/banner - name = "religious banner" - desc = "A banner used to contain religious symbols." - anchored = TRUE - density = FALSE - var/rolled = TRUE - var/static/banner_type = list( - "blank" = "no symbol" - , "crucifix" = "the cross, a symbol of Christianity" - , "starofdavid" = "the Star of David, a symbol of Judaism" - , "crescentandstar" = "the crescent and star, a symbol of Islam" - , "aum" = "the Aum, a symbol of Hinduism" - , "khanda" = "the Khanda, a symbol of Sikhism" - , "ninepointedstar" = "the nine-pointed star, a symbol of the Baha'i Faith" - , "dharmachakra" = "the dharmachakra, a symbol of Buddhism" - , "redandblackstar" = "the red and black star, a symbol of the Quakers" - , "pentacle" = "the pentacle, a symbol of Wicca" - , "awen" = "the Awen, a symbol of Druidry" - , "ahimsa" = "the Ahimsa, a symbol of Jainism" - , "yinandyang" = "the yin and yang, a symbol of Taoism" - , "torii" = "the torii, a symbol of Shinto" - , "lhossek" = "the Lhossek skull, a symbol of the Grand Stratagem, an Unathi faith" - , "threearrows" = "the Three Arrows, a symbol of the Fruitful Lights, an Unathi faith" - , "bushroot" = "the Hrukhza bush root, a symbol of the Hand of the Vine, an Unathi faith" - , "sundial" = "the sundial, a symbol of Precursor worship, an Unathi faith" - , "cupofknowledge" = "the Cup of Knowledge, a symbol of Markesheli, an Unathi faith" - ) - icon = 'icons/obj/banner.dmi' - icon_state = "blank_up" - var/selected = "blank" - -/obj/structure/banner/on_update_icon() - icon_state = "[selected]_[rolled ? "up" : "down"]" - -/obj/structure/banner/verb/toggle() - set src in oview(1) - set category = "Object" - set name = "Toggle Banner" - - if (usr.stat || usr.restrained()) - return - - rolled = !rolled - to_chat(usr, "You roll [rolled ? "up" : "down"] \the [src].") - - update_icon() - -/obj/structure/banner/attack_hand(mob/user) - if (!user.mind || !istype(user.mind.assigned_job, /datum/job/chaplain)) - to_chat(user, SPAN_WARNING("Only the Chaplain can change the banner!")) - else - var/banner = input(user, "Pick a symbol:") as null | anything in banner_type - if (!banner) - return - if (user.stat || !Adjacent(user) || user.restrained()) - to_chat(user, SPAN_WARNING("You're in no condition to change \the [src].")) - return - selected = banner - - update_icon() - -/obj/structure/banner/examine(mob/user) - . = ..() - to_chat(user, "It displays [banner_type[selected]].") - -/obj/structure/banner/get_mechanics_info() - . = ..() - . += "

              A Chaplain can change the banner's display by clicking on it with an empty hand. Only characters that joined the round as a chaplain can do this.

              " - . += "

              The banner can be rolled up or unfurled by using the 'Toggle Banner' verb in the Object tab or the right-click menu while adjacent to the banner.

              " diff --git a/code/game/objects/structures/barricade.dm b/code/game/objects/structures/barricade.dm deleted file mode 100644 index 9142c32d59977..0000000000000 --- a/code/game/objects/structures/barricade.dm +++ /dev/null @@ -1,120 +0,0 @@ -//Barricades! -/obj/structure/barricade - name = "barricade" - icon_state = "barricade" - anchored = TRUE - density = TRUE - atom_flags = ATOM_FLAG_NO_TEMP_CHANGE | ATOM_FLAG_CLIMBABLE - layer = ABOVE_WINDOW_LAYER - - var/spiky = FALSE - -/obj/structure/barricade/Initialize(var/mapload, var/material_name) - . = ..(mapload) - if(!material_name) - material_name = MATERIAL_WOOD - material = SSmaterials.get_material_by_name("[material_name]") - if(!material) - return INITIALIZE_HINT_QDEL - SetName("[material.display_name] barricade") - desc = "A heavy, solid barrier made of [material.display_name]." - color = material.icon_colour - set_max_health(round(material.integrity * 1.33)) // Equivalent to a global resistance value of 0.75 - -/obj/structure/barricade/get_material() - return material - -/obj/structure/barricade/attackby(obj/item/W as obj, mob/user as mob) - if(istype(W, /obj/item/stack/material/rods) && !spiky) - var/obj/item/stack/material/rods/R = W - if(R.get_amount() < 5) - to_chat(user, "You need more rods to build a cheval de frise.") - return - visible_message("\The [user] begins to work on \the [src].") - if(do_after(user, 4 SECONDS, src, DO_PUBLIC_UNIQUE)) - if(R.use(5)) - visible_message("\The [user] fastens \the [R] to \the [src].") - var/obj/structure/barricade/spike/CDF = new(loc, material.name, R.material.name) - CDF.dir = user.dir - qdel(src) - return - else - return - - if(istype(W, /obj/item/stack)) - var/obj/item/stack/D = W - if(D.get_material_name() != material.name) - return //hitting things with the wrong type of stack usually doesn't produce messages, and probably doesn't need to. - if (get_damage_value()) - if (D.get_amount() < 1) - to_chat(user, "You need one sheet of [material.display_name] to repair \the [src].") - return - visible_message("[user] begins to repair \the [src].") - if(do_after(user, 2 SECONDS, src, DO_PUBLIC_UNIQUE) && get_damage_value()) - if (D.use(1)) - restore_health(get_max_health()) - visible_message("[user] repairs \the [src].") - return - return - - else - user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN) - damage_health(W.force, W.damtype) - ..() - -/obj/structure/barricade/on_death() - dismantle() - -/obj/structure/barricade/proc/dismantle() - visible_message("The barricade is smashed apart!") - material.place_dismantled_product(get_turf(src)) - qdel(src) - -/obj/structure/barricade/CanPass(atom/movable/mover, turf/target, height=0, air_group=0)//So bullets will fly over and stuff. - if(air_group || (height==0)) - return 1 - if(istype(mover) && mover.checkpass(PASS_FLAG_TABLE)) - return 1 - else - return 0 - -//spikey barriers -/obj/structure/barricade/spike - name = "cheval-de-frise" - icon_state = "cheval" - atom_flags = ATOM_FLAG_NO_TEMP_CHANGE - spiky = TRUE - - var/spike_overlay = "cheval_spikes" - var/material/rod_material - var/damage //how badly it smarts when you run into this like a rube - var/list/poke_description = list("gored", "spiked", "speared", "stuck", "stabbed") - -/obj/structure/barricade/spike/Initialize(var/mapload, var/material_name, var/rod_material_name) - . = ..(mapload, material_name) - if(!rod_material_name) - rod_material_name = MATERIAL_WOOD - rod_material = SSmaterials.get_material_by_name("[rod_material_name]") - SetName("cheval-de-frise") - desc = "A rather simple [material.display_name] barrier. It menaces with spikes of [rod_material.display_name]." - damage = (rod_material.hardness * 0.85) - overlays += overlay_image(icon, spike_overlay, color = rod_material.icon_colour, flags = RESET_COLOR) - -/obj/structure/barricade/spike/Bumped(mob/living/victim) - . = ..() - if(!isliving(victim)) - return - if(world.time - victim.last_bumped <= 15) //spam guard - return FALSE - victim.last_bumped = world.time - var/damage_holder = damage - var/target_zone = pick(BP_CHEST, BP_GROIN, BP_L_LEG, BP_R_LEG) - - if(MOVING_DELIBERATELY(victim)) //walking into this is less hurty than running - damage_holder = (damage / 4) - - if(isanimal(victim)) //simple animals have simple health, reduce our damage - damage_holder = (damage / 4) - - victim.apply_damage(damage_holder, DAMAGE_BRUTE, target_zone, damage_flags = DAMAGE_FLAG_SHARP, used_weapon = src) - visible_message(SPAN_DANGER("\The [victim] is [pick(poke_description)] by \the [src]!")) diff --git a/code/game/objects/structures/barsign.dm b/code/game/objects/structures/barsign.dm deleted file mode 100644 index 2e892b71223a7..0000000000000 --- a/code/game/objects/structures/barsign.dm +++ /dev/null @@ -1,49 +0,0 @@ -/obj/structure/sign/double/barsign - desc = "A jumbo-sized LED sign. This one seems to be showing its age." - icon = 'icons/obj/barsigns.dmi' - icon_state = "empty" - appearance_flags = DEFAULT_APPEARANCE_FLAGS - anchored = TRUE - var/cult = 0 - -/obj/structure/sign/double/barsign/proc/get_valid_states(initial=1) - . = icon_states(icon) - . -= "on" - . -= "narsiebistro" - . -= "empty" - if(initial) - . -= "Off" - -/obj/structure/sign/double/barsign/examine(mob/user) - . = ..() - switch(icon_state) - if("Off") - to_chat(user, "It appears to be switched off.") - if("narsiebistro") - to_chat(user, "It shows a picture of a large black and red being. Spooky!") - if("on", "empty") - to_chat(user, "The lights are on, but there's no picture.") - else - to_chat(user, "It says '[icon_state]'") - -/obj/structure/sign/double/barsign/New() - ..() - icon_state = pick(get_valid_states()) - -/obj/structure/sign/double/barsign/attackby(obj/item/I, mob/user) - if(cult) - return ..() - - var/obj/item/card/id/card = I.GetIdCard() - if(istype(card)) - if(access_kitchen in card.GetAccess()) - var/sign_type = input(user, "What would you like to change the barsign to?") as null|anything in get_valid_states(0) - if(!sign_type) - return - icon_state = sign_type - to_chat(user, "You change the barsign.") - else - to_chat(user, "Access denied.") - return - - return ..() diff --git a/code/game/objects/structures/bedsheet_bin.dm b/code/game/objects/structures/bedsheet_bin.dm deleted file mode 100644 index f9aed990ad1ac..0000000000000 --- a/code/game/objects/structures/bedsheet_bin.dm +++ /dev/null @@ -1,170 +0,0 @@ -/* -CONTAINS: -BEDSHEETS -LINEN BINS -*/ - -/obj/item/bedsheet - name = "bedsheet" - desc = "A surprisingly soft linen bedsheet." - icon = 'icons/obj/bedsheet.dmi' - icon_state = "sheet" - item_state = "bedsheet" - randpixel = 0 - slot_flags = SLOT_BACK - item_flags = ITEM_FLAG_WASHER_ALLOWED - layer = BASE_ABOVE_OBJ_LAYER - throwforce = 1 - throw_speed = 1 - throw_range = 2 - w_class = ITEM_SIZE_SMALL - -/obj/item/bedsheet/attackby(obj/item/I, mob/user) - if(is_sharp(I)) - user.visible_message("\The [user] begins cutting up \the [src] with \a [I].", "You begin cutting up \the [src] with \the [I].") - if(do_after(user, 5 SECONDS, src, DO_PUBLIC_UNIQUE)) - to_chat(user, "You cut \the [src] into pieces!") - for(var/i in 1 to rand(2,5)) - new /obj/item/reagent_containers/glass/rag(get_turf(src)) - qdel(src) - return - ..() - -/obj/item/bedsheet/blue - icon_state = "sheetblue" - item_state = "sheetblue" - -/obj/item/bedsheet/green - icon_state = "sheetgreen" - item_state = "sheetgreen" - -/obj/item/bedsheet/orange - icon_state = "sheetorange" - item_state = "sheetorange" - -/obj/item/bedsheet/purple - icon_state = "sheetpurple" - item_state = "sheetpurple" - -/obj/item/bedsheet/rainbow - icon_state = "sheetrainbow" - item_state = "sheetrainbow" - -/obj/item/bedsheet/red - icon_state = "sheetred" - item_state = "sheetred" - -/obj/item/bedsheet/yellow - icon_state = "sheetyellow" - item_state = "sheetyellow" - -/obj/item/bedsheet/mime - icon_state = "sheetmime" - item_state = "sheetmime" - -/obj/item/bedsheet/clown - icon_state = "sheetclown" - item_state = "sheetclown" - -/obj/item/bedsheet/captain - icon_state = "sheetcaptain" - item_state = "sheetcaptain" - -/obj/item/bedsheet/rd - icon_state = "sheetrd" - item_state = "sheetrd" - -/obj/item/bedsheet/medical - icon_state = "sheetmedical" - item_state = "sheetmedical" - -/obj/item/bedsheet/hos - icon_state = "sheethos" - item_state = "sheethos" - -/obj/item/bedsheet/hop - icon_state = "sheethop" - item_state = "sheethop" - -/obj/item/bedsheet/ce - icon_state = "sheetce" - item_state = "sheetce" - -/obj/item/bedsheet/brown - icon_state = "sheetbrown" - item_state = "sheetbrown" - - -/obj/structure/bedsheetbin - name = "linen bin" - desc = "A linen bin. It looks rather cosy." - icon = 'icons/obj/structures.dmi' - icon_state = "linenbin-full" - anchored = TRUE - var/amount = 20 - var/list/sheets = list() - var/obj/item/hidden = null - - -/obj/structure/bedsheetbin/examine(mob/user) - . = ..() - - if(amount < 1) - to_chat(user, "There are no bed sheets in the bin.") - return - if(amount == 1) - to_chat(user, "There is one bed sheet in the bin.") - return - to_chat(user, "There are [amount] bed sheets in the bin.") - - -/obj/structure/bedsheetbin/on_update_icon() - switch(amount) - if(0) icon_state = "linenbin-empty" - if(1 to amount / 2) icon_state = "linenbin-half" - else icon_state = "linenbin-full" - - -/obj/structure/bedsheetbin/attackby(obj/item/I as obj, mob/user as mob) - if(istype(I, /obj/item/bedsheet)) - if(!user.unEquip(I, src)) - return - sheets.Add(I) - amount++ - to_chat(user, "You put [I] in [src].") - else if(amount && !hidden && I.w_class < ITEM_SIZE_HUGE) //make sure there's sheets to hide it among, make sure nothing else is hidden in there. - if(!user.unEquip(I, src)) - return - hidden = I - to_chat(user, "You hide [I] among the sheets.") - -/obj/structure/bedsheetbin/attack_hand(var/mob/user) - var/obj/item/bedsheet/B = remove_sheet() - if(B) - user.put_in_hands(B) - to_chat(user, SPAN_NOTICE("You take \a [B] out of \the [src].")) - add_fingerprint(user) - -/obj/structure/bedsheetbin/do_simple_ranged_interaction(var/mob/user) - remove_sheet() - return TRUE - -/obj/structure/bedsheetbin/proc/remove_sheet() - set waitfor = 0 - if(amount <= 0) - return - amount-- - var/obj/item/bedsheet/B - if(sheets.len > 0) - B = sheets[sheets.len] - sheets.Remove(B) - else - B = new /obj/item/bedsheet(loc) - B.dropInto(loc) - update_icon() - . = B - sleep(-1) - if(hidden) - hidden.dropInto(loc) - visible_message(SPAN_NOTICE("\The [hidden] falls out!")) - hidden = null diff --git a/code/game/objects/structures/catwalk.dm b/code/game/objects/structures/catwalk.dm deleted file mode 100644 index b06ecda3d6bc5..0000000000000 --- a/code/game/objects/structures/catwalk.dm +++ /dev/null @@ -1,177 +0,0 @@ -/obj/structure/catwalk - name = "catwalk" - desc = "Cats really don't like these things." - icon = 'icons/obj/catwalks.dmi' - icon_state = "catwalk" - density = FALSE - anchored = TRUE - layer = CATWALK_LAYER - footstep_type = /decl/footsteps/catwalk - obj_flags = OBJ_FLAG_NOFALL - var/hatch_open = FALSE - var/obj/item/stack/tile/mono/plated_tile - -/obj/structure/catwalk/Initialize() - . = ..() - DELETE_IF_DUPLICATE_OF(/obj/structure/catwalk) - update_connections(1) - update_icon() - - -/obj/structure/catwalk/Destroy() - redraw_nearby_catwalks() - return ..() - -/obj/structure/catwalk/proc/redraw_nearby_catwalks() - for(var/direction in GLOB.alldirs) - var/obj/structure/catwalk/L = locate() in get_step(src, direction) - if(L) - L.update_connections() - L.update_icon() //so siding get updated properly - - -/obj/structure/catwalk/on_update_icon() - update_connections() - overlays.Cut() - icon_state = "" - var/image/I - if(!hatch_open) - for(var/i = 1 to 4) - I = image('icons/obj/catwalks.dmi', "catwalk[connections[i]]", dir = SHIFTL(1, i - 1)) - overlays += I - if(plated_tile) - I = image('icons/obj/catwalks.dmi', "plated") - I.color = plated_tile.color - overlays += I - -/obj/structure/catwalk/ex_act(severity) - switch(severity) - if(EX_ACT_DEVASTATING) - new /obj/item/stack/material/rods(src.loc) - qdel(src) - if(EX_ACT_HEAVY) - new /obj/item/stack/material/rods(src.loc) - qdel(src) - -/obj/structure/catwalk/attack_hand(mob/user) - if(user.pulling) - do_pull_click(user, src) - ..() - -/obj/structure/catwalk/attack_robot(var/mob/user) - if(Adjacent(user)) - attack_hand(user) - -/obj/structure/catwalk/proc/deconstruct(mob/user) - playsound(src, 'sound/items/Welder.ogg', 100, 1) - to_chat(user, "Slicing \the [src] joints ...") - new /obj/item/stack/material/rods(src.loc) - new /obj/item/stack/material/rods(src.loc) - //Lattice would delete itself, but let's save ourselves a new obj - if(istype(src.loc, /turf/space) || istype(src.loc, /turf/simulated/open)) - new /obj/structure/lattice/(src.loc) - if(plated_tile) - new plated_tile.build_type(src.loc) - qdel(src) - -/obj/structure/catwalk/attackby(obj/item/C as obj, mob/user as mob) - if(isWelder(C)) - var/obj/item/weldingtool/WT = C - if(WT.remove_fuel(0, user)) - deconstruct(user) - return - if(istype(C, /obj/item/gun/energy/plasmacutter)) - var/obj/item/gun/energy/plasmacutter/cutter = C - if(!cutter.slice(user)) - return - deconstruct(user) - return - if(isCrowbar(C) && plated_tile) - if(user.a_intent != I_HELP) - return - hatch_open = !hatch_open - if(hatch_open) - playsound(src, 'sound/items/Crowbar.ogg', 100, 2) - to_chat(user, "You pry open \the [src]'s maintenance hatch.") - else - playsound(src, 'sound/items/Deconstruct.ogg', 100, 2) - to_chat(user, "You shut \the [src]'s maintenance hatch.") - update_icon() - return - if(istype(C, /obj/item/stack/tile/mono) && !plated_tile) - var/obj/item/stack/tile/floor/ST = C - if(!ST.in_use) - to_chat(user, "Placing tile...") - ST.in_use = 1 - if (!do_after(user, 1 SECOND, src, DO_PUBLIC_UNIQUE)) - ST.in_use = 0 - return - to_chat(user, "You plate \the [src]") - name = "plated catwalk" - ST.in_use = 0 - src.add_fingerprint(user) - if(ST.use(1)) - var/list/decls = decls_repository.get_decls_of_subtype(/decl/flooring) - for(var/flooring_type in decls) - var/decl/flooring/F = decls[flooring_type] - if(!F.build_type) - continue - if(ispath(C.type, F.build_type)) - plated_tile = F - break - update_icon() - -/obj/structure/catwalk/refresh_neighbors() - return - -/obj/effect/catwalk_plated - name = "plated catwalk spawner" - icon = 'icons/obj/catwalks.dmi' - icon_state = "catwalk_plated" - density = TRUE - anchored = TRUE - var/activated = FALSE - layer = CATWALK_LAYER - var/plating_type = /decl/flooring/tiling/mono - -/obj/effect/catwalk_plated/Initialize(mapload) - . = ..() - var/auto_activate = mapload || (GAME_STATE < RUNLEVEL_GAME) - if(auto_activate) - activate() - return INITIALIZE_HINT_QDEL - -/obj/effect/catwalk_plated/CanPass() - return 0 - -/obj/effect/catwalk_plated/attack_hand() - attack_generic() - -/obj/effect/catwalk_plated/attack_ghost() - attack_generic() - -/obj/effect/catwalk_plated/attack_generic() - activate() - -/obj/effect/catwalk_plated/proc/activate() - if(activated) return - - if(locate(/obj/structure/catwalk) in loc) - warning("Frame Spawner: A catwalk already exists at [loc.x]-[loc.y]-[loc.z]") - else - var/obj/structure/catwalk/C = new /obj/structure/catwalk(loc) - C.plated_tile += new plating_type - C.name = "plated catwalk" - C.update_icon() - activated = 1 - for(var/turf/T in orange(src, 1)) - for(var/obj/effect/wallframe_spawn/other in T) - if(!other.activated) other.activate() - -/obj/effect/catwalk_plated/dark - icon_state = "catwalk_plateddark" - plating_type = /decl/flooring/tiling/mono/dark - -/obj/effect/catwalk_plated/white - icon_state = "catwalk_platedwhite" - plating_type = /decl/flooring/tiling/mono/white diff --git a/code/game/objects/structures/charge_pylon.dm b/code/game/objects/structures/charge_pylon.dm deleted file mode 100644 index 6b196bd626686..0000000000000 --- a/code/game/objects/structures/charge_pylon.dm +++ /dev/null @@ -1,61 +0,0 @@ -/obj/structure/adherent_pylon - name = "electron reservoir" - desc = "A tall, crystalline pylon that pulses with electricity." - icon = 'icons/obj/machines/adherent.dmi' - icon_state = "pedestal" - anchored = TRUE - density = TRUE - opacity = FALSE - var/next_use - -/obj/structure/adherent_pylon/attack_ai(var/mob/living/user) - if(Adjacent(user)) - attack_hand(user) - -/obj/structure/adherent_pylon/attack_hand(var/mob/living/user) - charge_user(user) - -/obj/structure/adherent_pylon/proc/charge_user(var/mob/living/user) - if(next_use > world.time) return - next_use = world.time + 10 - var/mob/living/carbon/human/H = user - var/obj/item/cell/power_cell - if(ishuman(user)) - var/obj/item/organ/internal/cell/cell = locate() in H.internal_organs - if(cell && cell.cell) - power_cell = cell.cell - else if(isrobot(user)) - var/mob/living/silicon/robot/robot = user - power_cell = robot.get_cell() - - user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN) - user.visible_message(SPAN_WARNING("There is a loud crack and the smell of ozone as \the [user] touches \the [src].")) - playsound(loc, 'sound/effects/snap.ogg', 50, 1) - if(power_cell) - power_cell.charge = power_cell.maxcharge - to_chat(user, "Your [power_cell] has been charged to capacity.") - if(istype(H) && H.species.name == SPECIES_ADHERENT) - return - if(isrobot(user)) - user.apply_damage(150, DAMAGE_BURN, def_zone = BP_CHEST) - visible_message("Electricity arcs off [user] as it touches \the [src]!") - to_chat(user, "You detect damage to your components!") - else - user.electrocute_act(100, src, def_zone = BP_CHEST) - visible_message("\The [user] has been shocked by \the [src]!") - user.throw_at(get_step(user,get_dir(src,user)), 5, 10) - -/obj/structure/adherent_pylon/attackby(obj/item/grab/normal/G, mob/user) - if(!istype(G)) - return - var/mob/M = G.affecting - charge_user(M) - -/obj/structure/adherent_pylon/Bumped(atom/AM) - if(ishuman(AM)) - charge_user(AM) - -/obj/structure/adherent_pylon/hitby(atom/AM) - . =..() - if(ishuman(AM)) - charge_user(AM) diff --git a/code/game/objects/structures/coathanger.dm b/code/game/objects/structures/coathanger.dm deleted file mode 100644 index 26218ce81a246..0000000000000 --- a/code/game/objects/structures/coathanger.dm +++ /dev/null @@ -1,51 +0,0 @@ -/obj/structure/coatrack - name = "coat rack" - desc = "Rack that holds coats." - icon = 'icons/obj/coatrack.dmi' - icon_state = "coatrack0" - var/obj/item/clothing/suit/coat - var/list/allowed = list(/obj/item/clothing/suit/storage/toggle/labcoat, /obj/item/clothing/suit/storage/det_trench) - -/obj/structure/coatrack/attack_hand(mob/user as mob) - user.visible_message("[user] takes [coat] off \the [src].", "You take [coat] off the \the [src]") - if(!user.put_in_active_hand(coat)) - coat.dropInto(user.loc) - coat = null - update_icon() - -/obj/structure/coatrack/attackby(obj/item/W as obj, mob/user as mob) - var/can_hang = 0 - for (var/T in allowed) - if(istype(W,T)) - can_hang = 1 - if (can_hang && !coat && user.unEquip(coat, src)) - user.visible_message("[user] hangs [W] on \the [src].", "You hang [W] on the \the [src]") - coat = W - update_icon() - else - to_chat(user, "You cannot hang [W] on [src]") - return ..() - -/obj/structure/coatrack/CanPass(atom/movable/mover, turf/target, height=0, air_group=0) - var/can_hang = 0 - for (var/T in allowed) - if(istype(mover,T)) - can_hang = 1 - - if (can_hang && !coat) - src.visible_message("[mover] lands on \the [src].") - coat = mover - coat.forceMove(src) - update_icon() - return 0 - else - return 1 - -/obj/structure/coatrack/on_update_icon() - overlays.Cut() - if (istype(coat, /obj/item/clothing/suit/storage/toggle/labcoat)) - overlays += image(icon, icon_state = "coat_lab") - if (istype(coat, /obj/item/clothing/suit/storage/toggle/labcoat/cmo)) - overlays += image(icon, icon_state = "coat_cmo") - if (istype(coat, /obj/item/clothing/suit/storage/det_trench)) - overlays += image(icon, icon_state = "coat_det") diff --git a/code/game/objects/structures/crates_lockers/closets/__closet.dm b/code/game/objects/structures/crates_lockers/closets/__closet.dm deleted file mode 100644 index d43b295b5ce97..0000000000000 --- a/code/game/objects/structures/crates_lockers/closets/__closet.dm +++ /dev/null @@ -1,560 +0,0 @@ -/obj/structure/closet - name = "closet" - desc = "It's a basic storage unit." - icon = 'icons/obj/closets/bases/closet.dmi' - icon_state = "base" - density = TRUE - w_class = ITEM_SIZE_NO_CONTAINER - health_max = 100 - - var/welded = 0 - var/large = 1 - var/wall_mounted = FALSE //equivalent to non-dense for air movement - var/breakout = 0 //if someone is currently breaking out. mutex - var/storage_capacity = 2 * MOB_MEDIUM //This is so that someone can't pack hundreds of items in a locker/crate - //then open it in a populated area to crash clients. - var/open_sound = 'sound/effects/closet_open.ogg' - var/close_sound = 'sound/effects/closet_close.ogg' - - var/storage_types = CLOSET_STORAGE_ALL - var/setup = CLOSET_CAN_BE_WELDED - var/closet_appearance = /decl/closet_appearance - material = MATERIAL_STEEL - - // TODO: Turn these into flags. Skipped it for now because it requires updating 100+ locations... - var/broken = FALSE - var/opened = FALSE - var/locked = FALSE - -/obj/structure/closet/Initialize() - ..() - - if((setup & CLOSET_HAS_LOCK)) - verbs += /obj/structure/closet/proc/togglelock_verb - - if(ispath(closet_appearance)) - var/decl/closet_appearance/app = decls_repository.get_decl(closet_appearance) - if(app) - icon = app.icon - color = null - queue_icon_update() - - material = SSmaterials.get_material_by_name(material) - - return INITIALIZE_HINT_LATELOAD - -/obj/structure/closet/LateInitialize(mapload, ...) - var/list/will_contain = WillContain() - if(will_contain) - create_objects_in_loc(src, will_contain) - - if(!opened && mapload) // if closed and it's the map loading phase, relevant items at the crate's loc are put in the contents - store_contents() - -/obj/structure/closet/proc/WillContain() - return null - -/obj/structure/closet/examine(mob/user, distance) - . = ..() - if(distance <= 1 && !opened) - var/content_size = 0 - for(var/atom/movable/AM in src.contents) - if(!AM.anchored) - content_size += content_size(AM) - if(!content_size) - to_chat(user, "It is empty.") - else if(storage_capacity > content_size*4) - to_chat(user, "It is barely filled.") - else if(storage_capacity > content_size*2) - to_chat(user, "It is less than half full.") - else if(storage_capacity > content_size) - to_chat(user, "There is still some free space.") - else - to_chat(user, "It is full.") - -/obj/structure/closet/CanPass(atom/movable/mover, turf/target, height=0, air_group=0) - if(air_group || (height==0 || wall_mounted)) return 1 - return (!density) - -/obj/structure/closet/proc/can_open() - if((setup & CLOSET_HAS_LOCK) && locked) - return 0 - if((setup & CLOSET_CAN_BE_WELDED) && welded) - return 0 - return 1 - -/obj/structure/closet/proc/can_close() - for(var/obj/structure/closet/closet in get_turf(src)) - if(closet != src) - return 0 - return 1 - -/obj/structure/closet/proc/dump_contents() - for(var/mob/M in src) - M.dropInto(loc) - if(M.client) - M.client.eye = M.client.mob - M.client.perspective = MOB_PERSPECTIVE - - for(var/atom/movable/AM in src) - AM.dropInto(loc) - -/obj/structure/closet/proc/store_contents() - var/stored_units = 0 - - if(storage_types & CLOSET_STORAGE_ITEMS) - stored_units += store_items(stored_units) - if(storage_types & CLOSET_STORAGE_MOBS) - stored_units += store_mobs(stored_units) - if(storage_types & CLOSET_STORAGE_STRUCTURES) - stored_units += store_structures(stored_units) - -/obj/structure/closet/proc/open() - if(src.opened) - return 0 - - if(!src.can_open()) - return 0 - - src.dump_contents() - - src.opened = 1 - playsound(src.loc, open_sound, 50, 1, -3) - set_density(FALSE) - update_icon() - return 1 - -/obj/structure/closet/proc/close() - if(!src.opened) - return 0 - if(!src.can_close()) - return 0 - - store_contents() - src.opened = 0 - - playsound(src.loc, close_sound, 50, 0, -3) - if(!wall_mounted) - set_density(TRUE) - - update_icon() - - return 1 - -#define CLOSET_CHECK_TOO_BIG(x) (stored_units + . + x > storage_capacity) -/obj/structure/closet/proc/store_items(var/stored_units) - . = 0 - - for(var/obj/effect/dummy/chameleon/AD in loc) - if(CLOSET_CHECK_TOO_BIG(1)) - break - .++ - AD.forceMove(src) - - for(var/obj/item/I in loc) - if(I.anchored) - continue - var/item_size = content_size(I) - if(CLOSET_CHECK_TOO_BIG(item_size)) - break - . += item_size - I.forceMove(src) - I.pixel_x = 0 - I.pixel_y = 0 - I.pixel_z = 0 - -/obj/structure/closet/proc/store_mobs(var/stored_units) - . = 0 - for(var/mob/living/M in loc) - if(M.buckled || M.pinned.len || M.anchored) - continue - var/mob_size = content_size(M) - if(CLOSET_CHECK_TOO_BIG(mob_size)) - break - . += mob_size - if(M.client) - M.client.perspective = EYE_PERSPECTIVE - M.client.eye = src - M.forceMove(src) - -/obj/structure/closet/proc/store_structures(var/stored_units) - . = 0 - - for(var/obj/structure/S in loc) - if(S == src) - continue - if(S.anchored) - continue - var/structure_size = content_size(S) - if(CLOSET_CHECK_TOO_BIG(structure_size)) - break - . += structure_size - S.forceMove(src) - - for(var/obj/machinery/M in loc) - if(M.anchored) - continue - var/structure_size = content_size(M) - if(CLOSET_CHECK_TOO_BIG(structure_size)) - break - . += structure_size - M.forceMove(src) - -#undef CLOSET_CHECK_TOO_BIG - -// If you adjust any of the values below, please also update /proc/unit_test_weight_of_path(var/path) -/obj/structure/closet/proc/content_size(atom/movable/AM) - if(ismob(AM)) - var/mob/M = AM - return M.mob_size - if(istype(AM, /obj/item)) - var/obj/item/I = AM - return (I.w_class / 2) - if(istype(AM, /obj/structure) || istype(AM, /obj/machinery)) - return MOB_LARGE - return 0 - -/obj/structure/closet/proc/toggle(mob/user as mob) - if(locked) - togglelock(user) - else if(!(src.opened ? src.close() : src.open())) - to_chat(user, "It won't budge!") - update_icon() - -/obj/structure/closet/ex_act(severity) - // Damage everything inside the closet. - if (severity < EX_ACT_LIGHT) - for (var/atom/A as anything in src) - A.ex_act(severity + 1) - ..() - -/obj/structure/closet/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume) - // Damage everything inside the closet. These things aren't fire proof. - for (var/atom/A as anything in src) - A.fire_act(air, exposed_temperature, exposed_volume) - ..() - -/obj/structure/closet/bullet_act(obj/item/projectile/Proj) - if (Proj.penetrating) - var/distance = get_dist(Proj.starting, get_turf(loc)) - var/list/items = contents.Copy() - while (items.len) - var/atom/A = pick_n_take(items) - if (isliving(A)) - Proj.attack_mob(A, distance) - else - A.bullet_act(Proj) - Proj.penetrating -= 1 - if(!Proj.penetrating) - break - . = ..() - -/obj/structure/closet/attackby(obj/item/W as obj, mob/user as mob) - if (user.a_intent == I_HURT) - ..() - return - - if (src.opened) - if(istype(W, /obj/item/grab)) - var/obj/item/grab/G = W - src.MouseDrop_T(G.affecting, user) //act like they were dragged onto the closet - return 0 - if(isWelder(W)) - var/obj/item/weldingtool/WT = W - if(WT.remove_fuel(0,user)) - slice_into_parts(WT, user) - return - if(istype(W, /obj/item/gun/energy/plasmacutter)) - var/obj/item/gun/energy/plasmacutter/cutter = W - if(!cutter.slice(user)) - return - slice_into_parts(W, user) - return - if(istype(W, /obj/item/storage/laundry_basket) && W.contents.len) - var/obj/item/storage/laundry_basket/LB = W - var/turf/T = get_turf(src) - for(var/obj/item/I in LB.contents) - LB.remove_from_storage(I, T, 1) - LB.finish_bulk_removal() - user.visible_message("[user] empties \the [LB] into \the [src].", \ - "You empty \the [LB] into \the [src].", \ - "You hear rustling of clothes.") - return - - if(user.unEquip(W, loc)) - W.pixel_x = 0 - W.pixel_y = 0 - W.pixel_z = 0 - W.pixel_w = 0 - return - - if (istype(W, /obj/item/melee/energy/blade)) - if(emag_act(INFINITY, user, "The locker has been sliced open by [user] with \an [W]!", "You hear metal being sliced and sparks flying.")) - var/datum/effect/effect/system/spark_spread/spark_system = new /datum/effect/effect/system/spark_spread() - spark_system.set_up(5, 0, src.loc) - spark_system.start() - playsound(src.loc, 'sound/weapons/blade1.ogg', 50, 1) - playsound(src.loc, "sparks", 50, 1) - open() - return - - if (istype(W, /obj/item/stack/package_wrap)) - return - - if (isWelder(W) && (setup & CLOSET_CAN_BE_WELDED)) - var/obj/item/weldingtool/WT = W - if(!WT.remove_fuel(0,user)) - if(!WT.isOn()) - return - else - to_chat(user, "You need more welding fuel to complete this task.") - return - src.welded = !src.welded - src.update_icon() - user.visible_message("\The [src] has been [welded?"welded shut":"unwelded"] by \the [user].", blind_message = "You hear welding.", range = 3) - return - - if (setup & CLOSET_HAS_LOCK) - src.togglelock(user, W) - return - - attack_hand(user) - -/obj/structure/closet/proc/slice_into_parts(obj/W, mob/user) - material.place_sheet(src.loc, 2) - user.visible_message("\The [src] has been cut apart by [user] with \the [W].", \ - "You have cut \the [src] apart with \the [W].", \ - "You hear welding.") - qdel(src) - -/obj/structure/closet/MouseDrop_T(atom/movable/O as mob|obj, mob/user as mob) - if (!O) - return - if(istype(O, /obj/screen)) //fix for HUD elements making their way into the world -Pete - return - if(O.loc == user) - return - if(ismob(O) && src.large) - return - if(user.restrained() || user.stat || user.weakened || user.stunned || user.paralysis) - return - if((!( istype(O, /atom/movable) ) || O.anchored || !Adjacent(user) || !Adjacent(O) || !user.Adjacent(O) || user.contents.Find(src))) - return - if(!isturf(user.loc)) // are you in a container/closet/pod/etc? - return - if(!src.opened) - return - if(istype(O, /obj/structure/closet)) - return - step_towards(O, src.loc) - if(user != O) - user.show_viewers("[user] stuffs [O] into [src]!") - src.add_fingerprint(user) - return - -/obj/structure/closet/attack_ai(mob/user) - if(istype(user, /mob/living/silicon/robot) && Adjacent(user)) // Robots can open/close it, but not the AI. - attack_hand(user) - -/obj/structure/closet/relaymove(mob/user as mob) - if(user.stat || !isturf(src.loc)) - return - - if(!src.open()) - to_chat(user, "It won't budge!") - -/obj/structure/closet/attack_hand(mob/user as mob) - src.add_fingerprint(user) - src.toggle(user) - -/obj/structure/closet/attack_ghost(mob/ghost) - if(ghost.client && ghost.client.inquisitive_ghost) - ghost.examinate(src) - if (!src.opened) - to_chat(ghost, "It contains: [english_list(contents)].") - -/obj/structure/closet/verb/verb_toggleopen() - set src in oview(1) - set category = "Object" - set name = "Toggle Open" - - if(!CanPhysicallyInteract(usr)) - return - - if(ishuman(usr)) - src.add_fingerprint(usr) - src.toggle(usr) - else - to_chat(usr, "This mob type can't use this verb.") - -/obj/structure/closet/on_update_icon() - if(opened) - icon_state = "open" - overlays.Cut() - else - if(broken) - icon_state = "closed_emagged[welded ? "_welded" : ""]" - else - if(locked) - icon_state = "closed_locked[welded ? "_welded" : ""]" - else - icon_state = "closed_unlocked[welded ? "_welded" : ""]" - overlays.Cut() - -/obj/structure/closet/on_death() - dump_contents() - qdel(src) - -/obj/structure/closet/proc/req_breakout() - if(opened) - return 0 //Door's open... wait, why are you in it's contents then? - if((setup & CLOSET_HAS_LOCK) && locked) - return 1 // Closed and locked - return (!welded) //closed but not welded... - -/obj/structure/closet/mob_breakout(var/mob/living/escapee) - - . = ..() - var/breakout_time = 2 //2 minutes by default - if(breakout || !req_breakout()) - return FALSE - - . = TRUE - escapee.setClickCooldown(100) - - //okay, so the closet is either welded or locked... resist!!! - to_chat(escapee, "You lean on the back of \the [src] and start pushing the door open. (this will take about [breakout_time] minutes)") - - visible_message("\The [src] begins to shake violently!") - - breakout = 1 //can't think of a better way to do this right now. - for(var/i in 1 to (6*breakout_time * 2)) //minutes * 6 * 5seconds * 2 - if(!do_after(escapee, 5 SECONDS, do_flags = DO_DEFAULT | DO_USER_UNIQUE_ACT, incapacitation_flags = INCAPACITATION_DEFAULT & ~INCAPACITATION_RESTRAINED)) //5 seconds - breakout = 0 - return FALSE - //Perform the same set of checks as above for weld and lock status to determine if there is even still a point in 'resisting'... - if(!req_breakout()) - breakout = 0 - return FALSE - - playsound(src.loc, 'sound/effects/grillehit.ogg', 100, 1) - shake_animation() - add_fingerprint(escapee) - - //Well then break it! - breakout = 0 - to_chat(escapee, "You successfully break out!") - visible_message("\The [escapee] successfully broke out of \the [src]!") - playsound(src.loc, 'sound/effects/grillehit.ogg', 100, 1) - break_open() - shake_animation() - -/obj/structure/closet/proc/break_open() - welded = 0 - - if((setup & CLOSET_HAS_LOCK) && locked) - make_broken() - - //Do this to prevent contents from being opened into nullspace (read: bluespace) - if(istype(loc, /obj/structure/bigDelivery)) - var/obj/structure/bigDelivery/BD = loc - BD.unwrap() - open() - -/obj/structure/closet/onDropInto(var/atom/movable/AM) - return - -// If we use the /obj/structure/closet/proc/togglelock variant BYOND asks the user to select an input for id_card, which is then mostly irrelevant. -/obj/structure/closet/proc/togglelock_verb() - set src in oview(1) // One square distance - set category = "Object" - set name = "Toggle Lock" - - return togglelock(usr) - -/obj/structure/closet/proc/togglelock(var/mob/user, var/obj/item/card/id/id_card) - if(!(setup & CLOSET_HAS_LOCK)) - return FALSE - if(!CanPhysicallyInteract(user)) - return FALSE - if(src.opened) - to_chat(user, "Close \the [src] first.") - return FALSE - if(src.broken) - to_chat(user, "\The [src] appears to be broken.") - return FALSE - if(user.loc == src) - to_chat(user, "You can't reach the lock from inside.") - return FALSE - - add_fingerprint(user) - - if(!id_card) - id_card = user.GetIdCard() - - if(!user.IsAdvancedToolUser()) - to_chat(user, FEEDBACK_YOU_LACK_DEXTERITY) - return FALSE - - if(CanToggleLock(user, id_card)) - locked = !locked - visible_message("\The [src] has been [locked ? null : "un"]locked by \the [user].", range = 3) - update_icon() - return TRUE - else - to_chat(user, "Access denied!") - return FALSE - -/obj/structure/closet/proc/CanToggleLock(var/mob/user, var/obj/item/card/id/id_card) - return allowed(user) || (istype(id_card) && check_access_list(id_card.GetAccess())) - -/obj/structure/closet/AltClick(var/mob/user) - if(!src.opened) - togglelock(user) - else - return ..() - -/obj/structure/closet/CtrlAltClick(var/mob/user) - verb_toggleopen() - return 1 - -/obj/structure/closet/emp_act(severity) - for (var/atom/A as anything in src) - A.emp_act(severity) - if(!broken && (setup & CLOSET_HAS_LOCK)) - if(prob(50/severity)) - locked = !locked - src.update_icon() - if(prob(20/severity) && !opened) - if(!locked) - open() - else - src.req_access = list() - src.req_access += pick(get_all_station_access()) - ..() - -/obj/structure/closet/emag_act(var/remaining_charges, var/mob/user, var/emag_source, var/visual_feedback = "", var/audible_feedback = "") - if(!opened && make_broken()) - update_icon() - if(visual_feedback) - visible_message(visual_feedback, audible_feedback) - else if(user && emag_source) - visible_message("\The [src] has been broken by \the [user] with \an [emag_source]!", "You hear a faint electrical spark.") - else - visible_message("\The [src] sparks and breaks open!", "You hear a faint electrical spark.") - return 1 - else - . = ..() - -/obj/structure/closet/proc/make_broken() - if(broken) - return FALSE - if(!(setup & CLOSET_HAS_LOCK)) - return FALSE - broken = TRUE - locked = FALSE - desc += " It appears to be broken." - return TRUE - -/obj/structure/closet/CanUseTopicPhysical(mob/user) - return CanUseTopic(user, GLOB.physical_no_access_state) diff --git a/code/game/objects/structures/crates_lockers/closets/_closet_appearance_definitions.dm b/code/game/objects/structures/crates_lockers/closets/_closet_appearance_definitions.dm deleted file mode 100644 index f48c35766fa43..0000000000000 --- a/code/game/objects/structures/crates_lockers/closets/_closet_appearance_definitions.dm +++ /dev/null @@ -1,720 +0,0 @@ -/obj/structure/closet/debug/Initialize(var/maploading, var/newappearance) - closet_appearance = newappearance - . = ..() - -/decl/closet_appearance - var/color = COLOR_GRAY40 - var/decals = list( - "upper_vent", - "lower_vent" - ) - var/list/extra_decals - var/icon/icon - var/base_icon = 'icons/obj/closets/bases/closet.dmi' - var/decal_icon = 'icons/obj/closets/decals/closet.dmi' - var/can_lock = FALSE - -/decl/closet_appearance/New() - // Build our colour and decal lists. - if(LAZYLEN(extra_decals)) - if(!decals) - decals = list() - for(var/thing in extra_decals) - decals[thing] = extra_decals[thing] - for(var/thing in decals) - if(isnull(decals[thing])) - decals[thing] = color - - // Declare storage vars for icons. - var/icon/open_icon - var/icon/closed_emagged_icon - var/icon/closed_emagged_welded_icon - var/icon/closed_locked_icon - var/icon/closed_locked_welded_icon - var/icon/closed_unlocked_icon - var/icon/closed_unlocked_welded_icon - - // Create open icon. - var/icon/new_icon = new - open_icon = icon(base_icon, "base") - open_icon.Blend(icon(base_icon, "open"), ICON_OVERLAY) - open_icon.Blend(color, BLEND_ADD) - open_icon.Blend(icon(base_icon, "interior"), ICON_OVERLAY) - if(decal_icon) - for(var/thing in decals) - var/icon/this_decal_icon = icon(decal_icon, "[thing]_open") - this_decal_icon.Blend(decals[thing], BLEND_ADD) - open_icon.Blend(this_decal_icon, ICON_OVERLAY) - - // Generate basic closed icons. - closed_emagged_icon = icon(base_icon, "base") - if(can_lock) - closed_emagged_icon.Blend(icon(base_icon, "lock"), ICON_OVERLAY) - closed_emagged_icon.Blend(color, BLEND_ADD) - if(decal_icon) - for(var/thing in decals) - var/icon/this_decal_icon = icon(decal_icon, thing) - this_decal_icon.Blend(decals[thing], BLEND_ADD) - closed_emagged_icon.Blend(this_decal_icon, ICON_OVERLAY) - closed_locked_icon = icon(closed_emagged_icon) - closed_unlocked_icon = icon(closed_emagged_icon) - - // Add lock lights. - if(can_lock) - var/icon/light = icon(base_icon, "light") - light.Blend(COLOR_RED, BLEND_ADD) - closed_locked_icon.Blend(light, ICON_OVERLAY) - light = icon(base_icon, "light") - light.Blend(COLOR_LIME, BLEND_ADD) - closed_unlocked_icon.Blend(light, ICON_OVERLAY) - - // Add welded states. - var/icon/welded = icon(base_icon, "welded") - closed_locked_welded_icon = icon(closed_locked_icon) - closed_unlocked_welded_icon = icon(closed_unlocked_icon) - closed_emagged_welded_icon = icon(closed_emagged_icon) - closed_locked_welded_icon.Blend(welded, ICON_OVERLAY) - closed_unlocked_welded_icon.Blend(welded, ICON_OVERLAY) - closed_emagged_welded_icon.Blend(welded, ICON_OVERLAY) - - // Finish up emagged icons. - var/icon/sparks = icon(base_icon, "sparks") - closed_emagged_icon.Blend(sparks, ICON_OVERLAY) - closed_emagged_welded_icon.Blend(sparks, ICON_OVERLAY) - - // Insert our bevy of icons into the final icon file. - new_icon.Insert(open_icon, "open") - new_icon.Insert(closed_emagged_icon, "closed_emagged") - new_icon.Insert(closed_emagged_welded_icon, "closed_emagged_welded") - new_icon.Insert(closed_locked_icon, "closed_locked") - new_icon.Insert(closed_locked_welded_icon, "closed_locked_welded") - new_icon.Insert(closed_unlocked_icon, "closed_unlocked") - new_icon.Insert(closed_unlocked_welded_icon, "closed_unlocked_welded") - - // Set icon! - icon = new_icon - -/decl/closet_appearance/tactical - color = COLOR_RED_GRAY - extra_decals = list( - "inset" = COLOR_GRAY - ) - -/decl/closet_appearance/tactical/alt - color = COLOR_PALE_BTL_GREEN - -/decl/closet_appearance/wardrobe - extra_decals = list( - "stripe_horizontal" = COLOR_PALE_BLUE_GRAY, - "stripe_w" = COLOR_GRAY - ) - -/decl/closet_appearance/wardrobe/mixed - extra_decals = list( - "stripe_horizontal_upper" = COLOR_PURPLE_GRAY, - "stripe_horizontal_lower" = COLOR_PALE_RED_GRAY, - "stripe_w" = COLOR_OFF_WHITE - ) - -/decl/closet_appearance/wardrobe/orange - extra_decals = list( - "stripe_horizontal" = COLOR_PALE_ORANGE, - "stripe_w" = COLOR_OFF_WHITE - ) - -/decl/closet_appearance/wardrobe/green - extra_decals = list( - "stripe_horizontal" = COLOR_GREEN_GRAY, - "stripe_w" = COLOR_OFF_WHITE - ) - -/decl/closet_appearance/wardrobe/grey - extra_decals = list( - "stripe_horizontal" = COLOR_GRAY, - "stripe_w" = COLOR_OFF_WHITE - ) - -/decl/closet_appearance/wardrobe/pink - extra_decals = list( - "stripe_horizontal" = COLOR_PALE_PINK, - "stripe_w" = COLOR_OFF_WHITE - ) - -/decl/closet_appearance/wardrobe/black - extra_decals = list( - "stripe_horizontal" = COLOR_GRAY20, - "stripe_w" = COLOR_OFF_WHITE - ) - -/decl/closet_appearance/wardrobe/yellow - extra_decals = list( - "stripe_horizontal" = COLOR_PALE_YELLOW, - "stripe_w" = COLOR_OFF_WHITE - ) - -/decl/closet_appearance/wardrobe/red - extra_decals = list( - "stripe_horizontal" = COLOR_RED_GRAY, - "stripe_w" = COLOR_OFF_WHITE - ) - -/decl/closet_appearance/wardrobe/white - extra_decals = list( - "stripe_horizontal" = COLOR_GRAY, - "stripe_w" = COLOR_OFF_WHITE, - ) - -/decl/closet_appearance/bio - color = COLOR_PALE_ORANGE - decals = list( - "l3" = COLOR_OFF_WHITE, - "stripe_horizontal_narrow" = COLOR_ORANGE - ) - extra_decals = list( - "biohazard" = COLOR_OFF_WHITE - ) - -/decl/closet_appearance/bio/command - extra_decals = list( - "lower_half_solid" = COLOR_BLUE_GRAY, - "biohazard" = COLOR_OFF_WHITE - ) - -/decl/closet_appearance/bio/science - extra_decals = list( - "lower_half_solid" = COLOR_PALE_YELLOW, - "biohazard" = COLOR_OFF_WHITE - ) - -/decl/closet_appearance/bio/security - extra_decals = list( - "lower_half_solid" = COLOR_RED_GRAY, - "biohazard" = COLOR_OFF_WHITE - ) - -/decl/closet_appearance/bio/janitor - color = COLOR_PURPLE - decals = list( - "l3" = COLOR_OFF_WHITE, - ) - extra_decals = list( - "stripe_horizontal_broad" = COLOR_ORANGE, - "biohazard" = COLOR_OFF_WHITE - ) - -/decl/closet_appearance/bio/virology - extra_decals = list( - "lower_half_solid" = COLOR_GREEN_GRAY, - "biohazard" = COLOR_OFF_WHITE - ) - -/decl/closet_appearance/secure_closet - can_lock = TRUE - -/decl/closet_appearance/secure_closet/engineering - can_lock = TRUE - color = COLOR_YELLOW_GRAY - decals = list( - "upper_side_vent", - "lower_side_vent" - ) - extra_decals = list( - "stripe_vertical_right_partial" = COLOR_BEASTY_BROWN, - "stripe_vertical_left_partial" = COLOR_BEASTY_BROWN, - "eng" = COLOR_BEASTY_BROWN - ) - -/decl/closet_appearance/secure_closet/engineering/electrical - decals = list( - "lower_vent" - ) - extra_decals = list( - "electric" = COLOR_BEASTY_BROWN, - "vertical_stripe_simple" = COLOR_BEASTY_BROWN - ) - -/decl/closet_appearance/secure_closet/engineering/atmos - extra_decals = list( - "stripe_vertical_right_partial" = COLOR_CYAN_BLUE, - "stripe_vertical_mid_partial" = COLOR_CYAN_BLUE, - "atmos" = COLOR_CYAN_BLUE - ) - -/decl/closet_appearance/secure_closet/engineering/welding - decals = list( - "lower_vent" - ) - extra_decals = list( - "fire" = COLOR_BEASTY_BROWN, - "vertical_stripe_simple" = COLOR_BEASTY_BROWN - ) - -/decl/closet_appearance/secure_closet/engineering/tools - can_lock = FALSE - decals = list( - "lower_vent" - ) - extra_decals = list( - "tool" = COLOR_BEASTY_BROWN, - "vertical_stripe_simple" = COLOR_BEASTY_BROWN - ) - -/decl/closet_appearance/secure_closet/engineering/tools/radiation - extra_decals = list( - "l2" = COLOR_BEASTY_BROWN, - "rads" = COLOR_BEASTY_BROWN - ) - -/decl/closet_appearance/secure_closet/engineering/ce - color = COLOR_OFF_WHITE - extra_decals = list( - "stripe_vertical_right_partial" = COLOR_CLOSET_GOLD, - "stripe_vertical_mid_partial" = COLOR_CLOSET_GOLD, - "eng_narrow" = COLOR_CLOSET_GOLD - ) - -/decl/closet_appearance/secure_closet/mining - color = COLOR_WARM_YELLOW - decals = list( - "upper_side_vent", - "lower_side_vent" - ) - extra_decals = list( - "stripe_vertical_mid_partial" = COLOR_BEASTY_BROWN, - "stripe_vertical_left_partial" = COLOR_BEASTY_BROWN, - "mining" = COLOR_BEASTY_BROWN - ) - -/decl/closet_appearance/secure_closet/mining/sec - decals = list( - "stripe_vertical_mid_partial" = COLOR_NT_RED, - "stripe_vertical_left_partial" = COLOR_NT_RED, - "mining" = COLOR_NT_RED - ) - -/decl/closet_appearance/secure_closet/command - color = COLOR_BLUE_GRAY - decals = list( - "lower_holes", - "upper_holes" - ) - extra_decals = list( - "stripe_vertical_left_partial" = COLOR_CLOSET_GOLD, - "stripe_vertical_right_partial" = COLOR_CLOSET_GOLD, - "captain" = COLOR_CLOSET_GOLD - ) - -/decl/closet_appearance/secure_closet/command/hop - color = COLOR_PALE_BLUE_GRAY - extra_decals = list( - "stripe_vertical_mid_partial" = COLOR_CLOSET_GOLD, - "hop" = COLOR_CLOSET_GOLD - ) - -/decl/closet_appearance/secure_closet/cmo - color = COLOR_BABY_BLUE - decals = list( - "upper_side_vent", - "lower_side_vent" - ) - extra_decals = list( - "medcircle" = COLOR_CLOSET_GOLD, - "stripe_vertical_right_partial" = COLOR_CLOSET_GOLD, - "stripe_vertical_mid_partial" = COLOR_CLOSET_GOLD - ) - -/decl/closet_appearance/secure_closet/medical - color = COLOR_OFF_WHITE - decals = null - extra_decals = list( - "circle" = COLOR_BLUE_GRAY, - "stripes_horizontal" = COLOR_BLUE_GRAY - ) - -/decl/closet_appearance/secure_closet/medical/virology - decals = list( - "upper_side_vent", - "lower_side_vent" - ) - extra_decals = list( - "stripe_vertical_right_partial" = COLOR_BOTTLE_GREEN, - "stripe_vertical_mid_partial" = COLOR_BOTTLE_GREEN, - "viro" = COLOR_BOTTLE_GREEN - ) - -/decl/closet_appearance/secure_closet/medical/alt - extra_decals = list( - "medcircle" =COLOR_BLUE_GRAY, - "stripe_vertical_right_partial" = COLOR_BLUE_GRAY, - "stripe_vertical_mid_partial" = COLOR_BLUE_GRAY - ) - -/decl/closet_appearance/secure_closet/cargo - color = COLOR_WARM_YELLOW - decals = list( - "upper_side_vent", - "lower_side_vent" - ) - extra_decals = list( - "cargo" = COLOR_GRAY40, - "stripe_vertical_left_partial" = COLOR_GRAY40, - "stripe_vertical_mid_partial" = COLOR_GRAY40 - ) - -/decl/closet_appearance/secure_closet/cargo/qm - extra_decals = list( - "cargo" = COLOR_BEASTY_BROWN, - "stripe_vertical_left_partial" = COLOR_BEASTY_BROWN, - "stripe_vertical_mid_partial" = COLOR_BEASTY_BROWN - ) - -/decl/closet_appearance/secure_closet/security - color = COLOR_NT_RED - decals = list( - "lower_holes" - ) - extra_decals = list( - "stripe_vertical_mid_full" = COLOR_WARM_YELLOW, - "security" = COLOR_WARM_YELLOW - ) - -/decl/closet_appearance/secure_closet/security/warden - extra_decals = list( - "stripe_vertical_left_full" = COLOR_WARM_YELLOW, - "stripe_vertical_right_full" = COLOR_WARM_YELLOW, - "security" = COLOR_WARM_YELLOW - ) - -/decl/closet_appearance/secure_closet/security/hos - extra_decals = list( - "stripe_vertical_left_full" = COLOR_WARM_YELLOW, - "stripe_vertical_right_full" = COLOR_WARM_YELLOW, - "stripe_vertical_mid_full" = COLOR_CLOSET_GOLD, - "security" = COLOR_CLOSET_GOLD - ) - -/decl/closet_appearance/bomb - color = COLOR_DARK_GREEN_GRAY - decals = list( - "l4" = COLOR_OFF_WHITE - ) - extra_decals = list( - "lower_half_solid" = COLOR_GREEN_GRAY - ) - -/decl/closet_appearance/bomb/security - extra_decals = list( - "lower_half_solid" = COLOR_WARM_YELLOW - ) - -/decl/closet_appearance/oxygen - color = COLOR_LIGHT_CYAN - decals = list( - "lower_vent" - ) - extra_decals = list( - "oxy" = COLOR_OFF_WHITE - ) - -/decl/closet_appearance/oxygen/fire - color = COLOR_RED_GRAY - extra_decals = list( - "extinguisher" = COLOR_OFF_WHITE, - "vertical_stripe_simple" = COLOR_OFF_WHITE, - ) - -/decl/closet_appearance/alien - color = COLOR_PURPLE - -/decl/closet_appearance/secure_closet/expedition - color = COLOR_BLUE_GRAY - decals = list( - "lower_side_vent" - ) - extra_decals = list( - "stripe_vertical_mid_full" = COLOR_PURPLE, - "security" = COLOR_PURPLE - ) - -/decl/closet_appearance/secure_closet/expedition/pathfinder - extra_decals = list( - "stripe_vertical_left_full" = COLOR_PURPLE, - "stripe_vertical_mid_full" = COLOR_CLOSET_GOLD, - "stripe_vertical_right_full" = COLOR_PURPLE, - "security" = COLOR_CLOSET_GOLD - ) - -/decl/closet_appearance/secure_closet/expedition/science - extra_decals = list( - "stripe_vertical_mid_full" = COLOR_PURPLE, - "research" = COLOR_PURPLE - ) - -/decl/closet_appearance/secure_closet/rd - color = COLOR_BOTTLE_GREEN - decals = list( - "lower_holes" - ) - extra_decals = list( - "stripe_vertical_mid_full" = COLOR_GOLD, - "stripe_vertical_left_full" = COLOR_PURPLE, - "stripe_vertical_right_full" = COLOR_PURPLE, - "research" = COLOR_GOLD - ) - -/decl/closet_appearance/secure_closet/corporate - color = COLOR_GREEN_GRAY - decals = list( - "lower_holes" - ) - extra_decals = list( - "stripe_vertical_mid_full" = COLOR_GRAY80, - "research" = COLOR_OFF_WHITE - ) - -/decl/closet_appearance/secure_closet/hydroponics - color = COLOR_GREEN_GRAY - decals = list( - "lower_side_vent", - "upper_side_vent" - ) - extra_decals = list( - "stripe_vertical_right_partial" = COLOR_DARK_GREEN_GRAY, - "stripe_vertical_mid_partial" = COLOR_DARK_GREEN_GRAY, - "hydro" = COLOR_DARK_GREEN_GRAY - ) - -/decl/closet_appearance/secure_closet/chaplain - decals = list( - "lower_side_vent", - "upper_side_vent" - ) - extra_decals = list( - "stripe_vertical_right_full" = COLOR_GRAY20, - "stripe_vertical_mid_full" = COLOR_GRAY20 - ) - -/decl/closet_appearance/secure_closet/sol - color = COLOR_BABY_BLUE - decals = list( - "lower_side_vent" - ) - extra_decals = list( - "stripe_vertical_mid_full" = COLOR_BOTTLE_GREEN, - "security" = COLOR_BOTTLE_GREEN - ) - -/decl/closet_appearance/secure_closet/sol/two - extra_decals = list( - "stripe_vertical_left_full" = COLOR_BOTTLE_GREEN, - "stripe_vertical_right_full" = COLOR_BOTTLE_GREEN, - "security" = COLOR_BOTTLE_GREEN - ) - -/decl/closet_appearance/secure_closet/sol/two/dark - color = COLOR_DARK_BLUE_GRAY - -// Crates. -/decl/closet_appearance/crate - decals = null - extra_decals = null - base_icon = 'icons/obj/closets/bases/crate.dmi' - decal_icon = 'icons/obj/closets/decals/crate.dmi' - color = COLOR_GRAY40 - -/decl/closet_appearance/crate/plastic - color = COLOR_GRAY80 - -/decl/closet_appearance/crate/oxygen - color = COLOR_CYAN_BLUE - decals = list( - "crate_stripes" = COLOR_OFF_WHITE, - "crate_oxy" = COLOR_OFF_WHITE - ) - -/decl/closet_appearance/crate/medical - color = COLOR_GRAY80 - decals = list( - "crate_stripe" = COLOR_WARM_YELLOW, - "crate_cross" = COLOR_OFF_WHITE - ) - -/decl/closet_appearance/crate/medical/trauma - decals = list( - "crate_stripe" = COLOR_NT_RED, - "crate_cross" = COLOR_OFF_WHITE - ) - -/decl/closet_appearance/crate/medical/oxygen - decals = list( - "crate_stripe" = COLOR_BABY_BLUE, - "crate_cross" = COLOR_OFF_WHITE - ) - -/decl/closet_appearance/crate/medical/toxins - decals = list( - "crate_stripe" = COLOR_GREEN_GRAY, - "crate_cross" = COLOR_OFF_WHITE - ) - -/decl/closet_appearance/crate/hydroponics - decals = list( - "crate_stripe_left" = COLOR_GREEN_GRAY, - "crate_stripe_right" = COLOR_GREEN_GRAY - ) - -/decl/closet_appearance/crate/radiation - color = COLOR_BROWN_ORANGE - extra_decals = list( - "crate_radiation_left" = COLOR_WARM_YELLOW, - "crate_radiation_right" = COLOR_WARM_YELLOW, - "lid_stripes" = COLOR_NT_RED - ) - -/decl/closet_appearance/crate/freezer - color = COLOR_BABY_BLUE - -/decl/closet_appearance/crate/secure - can_lock = TRUE - -/decl/closet_appearance/crate/secure/hazard - color = COLOR_NT_RED - decals = list( - "crate_bracing" - ) - extra_decals = list( - "crate_stripe_left" = COLOR_OFF_WHITE, - "crate_stripe_right" = COLOR_OFF_WHITE, - "toxin" = COLOR_OFF_WHITE - ) - -/decl/closet_appearance/crate/secure/weapon - color = COLOR_GREEN_GRAY - decals = list( - "crate_bracing" - ) - extra_decals = list( - "crate_stripe_left" = COLOR_OFF_WHITE, - "crate_stripe_right" = COLOR_OFF_WHITE, - "hazard" = COLOR_OFF_WHITE - ) - -/decl/closet_appearance/crate/secure/hydroponics - extra_decals = list( - "crate_stripe_left" = COLOR_GREEN_GRAY, - "crate_stripe_right" = COLOR_GREEN_GRAY - ) - -/decl/closet_appearance/crate/secure/shuttle - extra_decals = list( - "crate_stripe_left" = COLOR_YELLOW_GRAY, - "crate_stripe_right" = COLOR_YELLOW_GRAY - ) - -// Large crates. -/decl/closet_appearance/large_crate - base_icon = 'icons/obj/closets/bases/large_crate.dmi' - decal_icon = 'icons/obj/closets/decals/large_crate.dmi' - decals = null - extra_decals = null - -/decl/closet_appearance/large_crate/critter - decals = list( - "airholes" - ) - extra_decals = list( - "oxy" = COLOR_WHITE - ) - -/decl/closet_appearance/large_crate/hydroponics - extra_decals = list( - "stripes" = COLOR_GREEN_GRAY, - "text" = COLOR_GREEN_GRAY - ) - -/decl/closet_appearance/large_crate/secure - can_lock = TRUE - -/decl/closet_appearance/large_crate/secure/hazard - color = COLOR_NT_RED - decals = list( - "crate_bracing" - ) - extra_decals = list( - "marking" = COLOR_OFF_WHITE, - "text_upper" = COLOR_OFF_WHITE - ) - -// Cabinets. -/decl/closet_appearance/cabinet - base_icon = 'icons/obj/closets/bases/cabinet.dmi' - decal_icon = null - color = WOOD_COLOR_RICH - decals = null - extra_decals = null - -/decl/closet_appearance/cabinet/secure - can_lock = TRUE - -// Wall lockers. -/decl/closet_appearance/wall - base_icon = 'icons/obj/closets/bases/wall.dmi' - decal_icon = 'icons/obj/closets/decals/wall.dmi' - decals = list( - "vent" - ) - extra_decals = null - -/decl/closet_appearance/wall/emergency - decals = null - extra_decals = list( - "glass" = COLOR_WHITE - ) - -/decl/closet_appearance/wall/medical - decals = null - color = COLOR_OFF_WHITE - extra_decals = list( - "stripe_outer" = COLOR_BLUE_GRAY, - "stripe_inner" = COLOR_OFF_WHITE, - "cross" = COLOR_BLUE_GRAY - ) - -/decl/closet_appearance/wall/shipping - color = COLOR_WARM_YELLOW - decals = null - extra_decals = list( - "stripes" = COLOR_BEASTY_BROWN, - "glass" = COLOR_WHITE - ) - -/decl/closet_appearance/wall/hydrant - color = COLOR_NT_RED - decals = null - extra_decals = list( - "stripes" = COLOR_OFF_WHITE, - "glass" = COLOR_WHITE - ) - -// Carts -/decl/closet_appearance/cart - color = COLOR_GRAY20 - base_icon = 'icons/obj/closets/bases/cart.dmi' - decal_icon = 'icons/obj/closets/decals/cart.dmi' - decals = null - extra_decals = null - -/decl/closet_appearance/cart/trash - color = COLOR_BOTTLE_GREEN - -/decl/closet_appearance/cart/biohazard - can_lock = TRUE - decals = list( - "biohazard" = COLOR_GRAY80 - ) - -/decl/closet_appearance/cart/biohazard/alt - color = COLOR_SURGERY_BLUE - decals = list( - "biohazard" = COLOR_RED_GRAY - ) \ No newline at end of file diff --git a/code/game/objects/structures/crates_lockers/closets/coffin.dm b/code/game/objects/structures/crates_lockers/closets/coffin.dm deleted file mode 100644 index ecabdb47f3e6a..0000000000000 --- a/code/game/objects/structures/crates_lockers/closets/coffin.dm +++ /dev/null @@ -1,49 +0,0 @@ -/obj/structure/closet/coffin - name = "coffin" - desc = "It's a burial receptacle for the dearly departed." - icon = 'icons/obj/closets/coffin.dmi' - setup = 0 - closet_appearance = null - - var/screwdriver_time_needed = 7.5 SECONDS - -/obj/structure/closet/coffin/examine(mob/user, distance) - . = ..() - if(distance <= 1 && !opened) - to_chat(user, "The lid is [locked ? "tightly secured with screws." : "unsecured and can be opened."]") - -/obj/structure/closet/coffin/can_open() - . = ..() - if(locked) - return FALSE - -/obj/structure/closet/coffin/attackby(obj/item/W, mob/user) - if(!opened && isScrewdriver(W)) - to_chat(user, SPAN_NOTICE("You begin screwing [src]'s lid [locked ? "open" : "shut"].")) - playsound(src, 'sound/items/Screwdriver.ogg', 100, 1) - if(do_after(user, screwdriver_time_needed, src, DO_PUBLIC_UNIQUE)) - locked = !locked - to_chat(user, SPAN_NOTICE("You [locked ? "screw down" : "unscrew"] [src]'s lid.")) - else - ..() - -/obj/structure/closet/coffin/toggle(mob/user as mob) - if(!(opened ? close() : open())) - to_chat(user, SPAN_NOTICE("It won't budge!")) - -/obj/structure/closet/coffin/req_breakout() - . = ..() - if(locked) - return TRUE - - -/obj/structure/closet/coffin/break_open() - locked = FALSE - ..() - -/obj/structure/closet/coffin/wooden - name = "coffin" - desc = "It's a burial receptacle for the dearly departed." - icon = 'icons/obj/closets/coffin_wood.dmi' - setup = 0 - closet_appearance = null diff --git a/code/game/objects/structures/crates_lockers/closets/crittercrate.dm b/code/game/objects/structures/crates_lockers/closets/crittercrate.dm deleted file mode 100644 index d649f86570641..0000000000000 --- a/code/game/objects/structures/crates_lockers/closets/crittercrate.dm +++ /dev/null @@ -1,4 +0,0 @@ -/obj/structure/closet/crate/critter - name = "critter crate" - desc = "A crate which can sustain life for a while." - closet_appearance = /decl/closet_appearance/large_crate/critter diff --git a/code/game/objects/structures/crates_lockers/closets/fitness.dm b/code/game/objects/structures/crates_lockers/closets/fitness.dm deleted file mode 100644 index 22542b9914476..0000000000000 --- a/code/game/objects/structures/crates_lockers/closets/fitness.dm +++ /dev/null @@ -1,61 +0,0 @@ -/obj/structure/closet/athletic_mixed - name = "athletic wardrobe" - desc = "It's a storage unit for athletic wear." - closet_appearance = /decl/closet_appearance/wardrobe/mixed - -/obj/structure/closet/athletic_mixed/WillContain() - return list( - /obj/item/clothing/under/shorts/grey, - /obj/item/clothing/under/shorts/black, - /obj/item/clothing/under/shorts/red, - /obj/item/clothing/under/shorts/blue, - /obj/item/clothing/under/shorts/green, - /obj/item/clothing/under/swimsuit/red, - /obj/item/clothing/under/swimsuit/black, - /obj/item/clothing/under/swimsuit/blue, - /obj/item/clothing/under/swimsuit/green, - /obj/item/clothing/under/swimsuit/purple, - /obj/item/clothing/mask/snorkel = 2, - /obj/item/clothing/shoes/swimmingfins = 2, - /obj/item/towel = 2) - -/obj/structure/closet/boxinggloves - name = "boxing gloves" - desc = "It's a storage unit for gloves for use in the boxing ring." - -/obj/structure/closet/boxinggloves/WillContain() - return list( - /obj/item/clothing/gloves/boxing/blue, - /obj/item/clothing/gloves/boxing/green, - /obj/item/clothing/gloves/boxing/yellow, - /obj/item/clothing/gloves/boxing) - -/obj/structure/closet/masks - name = "mask closet" - desc = "IT'S A STORAGE UNIT FOR FIGHTER MASKS OLE!" - -/obj/structure/closet/masks/WillContain() - return list( - /obj/item/clothing/mask/luchador, - /obj/item/clothing/mask/luchador/rudos, - /obj/item/clothing/mask/luchador/tecnicos) - -/obj/structure/closet/lasertag/red - name = "red laser tag equipment" - desc = "It's a storage unit for laser tag equipment." - closet_appearance = /decl/closet_appearance/wardrobe/red - -/obj/structure/closet/lasertag/red/WillContain() - return list( - /obj/item/gun/energy/lasertag/red = 3, - /obj/item/clothing/suit/redtag = 3) - -/obj/structure/closet/lasertag/blue - name = "blue laser tag equipment" - desc = "It's a storage unit for laser tag equipment." - closet_appearance = /decl/closet_appearance/wardrobe - -/obj/structure/closet/lasertag/blue/WillContain() - return list( - /obj/item/gun/energy/lasertag/blue = 3, - /obj/item/clothing/suit/bluetag = 3) diff --git a/code/game/objects/structures/crates_lockers/closets/gimmick.dm b/code/game/objects/structures/crates_lockers/closets/gimmick.dm deleted file mode 100644 index 881fb7d73af8f..0000000000000 --- a/code/game/objects/structures/crates_lockers/closets/gimmick.dm +++ /dev/null @@ -1,76 +0,0 @@ -/obj/structure/closet/cabinet - name = "cabinet" - desc = "Old will forever be in fashion." - closet_appearance = /decl/closet_appearance/cabinet - -/obj/structure/closet/acloset - name = "strange closet" - desc = "It looks alien!" - closet_appearance = /decl/closet_appearance/alien - -/obj/structure/closet/gimmick - name = "administrative supply closet" - desc = "It's a storage unit for things that have no right being here." - closet_appearance = /decl/closet_appearance/tactical - anchored = FALSE - -/obj/structure/closet/gimmick/russian - name = "russian surplus closet" - desc = "It's a storage unit for Russian standard-issue surplus." - closet_appearance = /decl/closet_appearance/tactical - -/obj/structure/closet/gimmick/russian/WillContain() - return list( - /obj/item/clothing/head/ushanka = 5, - /obj/item/clothing/under/soviet = 5) - -/obj/structure/closet/gimmick/tacticool - name = "tacticool gear closet" - desc = "It's a storage unit for Tacticool gear." - closet_appearance = /decl/closet_appearance/tactical - - -/obj/structure/closet/gimmick/tacticool/WillContain() - return list( - /obj/item/clothing/glasses/eyepatch, - /obj/item/clothing/glasses/sunglasses, - /obj/item/clothing/gloves/thick/swat = 2, - /obj/item/clothing/head/helmet/swat = 2, - /obj/item/clothing/mask/gas = 2, - /obj/item/clothing/shoes/swat = 2, - /obj/item/clothing/suit/space/void/swat = 2, - /obj/item/clothing/under/syndicate/tacticool = 2) - -/obj/structure/closet/thunderdome - name = "\improper Thunderdome closet" - desc = "Everything you need!" - closet_appearance = /decl/closet_appearance/tactical/alt - - anchored = TRUE - -/obj/structure/closet/thunderdome/tdred - name = "red-team Thunderdome closet" - -/obj/structure/closet/thunderdome/tdred/WillContain() - return list( - /obj/item/clothing/suit/armor/tdome/red = 3, - /obj/item/melee/energy/sword = 3, - /obj/item/gun/energy/laser = 3, - /obj/item/melee/baton = 3, - /obj/item/storage/box/flashbangs = 3, - /obj/item/clothing/head/helmet/thunderdome = 3 - ) - -/obj/structure/closet/thunderdome/tdgreen - name = "green-team Thunderdome closet" - closet_appearance = /decl/closet_appearance/tactical - -/obj/structure/closet/thunderdome/tdgreen/WillContain() - return list( - /obj/item/clothing/suit/armor/tdome/green = 3, - /obj/item/melee/energy/sword = 3, - /obj/item/gun/energy/laser = 3, - /obj/item/melee/baton = 3, - /obj/item/storage/box/flashbangs = 3, - /obj/item/clothing/head/helmet/thunderdome = 3 - ) diff --git a/code/game/objects/structures/crates_lockers/closets/job_closets.dm b/code/game/objects/structures/crates_lockers/closets/job_closets.dm deleted file mode 100644 index 43923979c05f0..0000000000000 --- a/code/game/objects/structures/crates_lockers/closets/job_closets.dm +++ /dev/null @@ -1,93 +0,0 @@ -/* Closets for specific jobs - * Contains: - * Bartender - * Janitor - * Lawyer - */ - -/* - * Bartender - */ -/obj/structure/closet/gmcloset - name = "formal closet" - desc = "It's a storage unit for formal clothing." - closet_appearance = /decl/closet_appearance/wardrobe/black - -/obj/structure/closet/gmcloset/WillContain() - return list( - /obj/item/clothing/head/that = 2, - /obj/item/device/radio/headset/headset_service = 2, - /obj/item/clothing/head/hairflower, - /obj/item/clothing/head/hairflower/pink, - /obj/item/clothing/head/hairflower/yellow, - /obj/item/clothing/head/hairflower/blue, - /obj/item/clothing/under/sl_suit = 2, - /obj/item/clothing/under/rank/bartender = 2, - /obj/item/clothing/under/dress/dress_saloon, - /obj/item/clothing/accessory/waistcoat/black = 2, - /obj/item/clothing/shoes/black = 2 - ) - -/* - * Chef - */ -/obj/structure/closet/chefcloset - name = "chef's closet" - desc = "It's a storage unit for foodservice garments." - closet_appearance = /decl/closet_appearance/wardrobe/black - -/obj/structure/closet/chefcloset/WillContain() - return list( - /obj/item/clothing/under/sundress, - /obj/item/clothing/under/waiter = 2, - /obj/item/device/radio/headset/headset_service = 2, - /obj/item/storage/box/mousetraps = 2, - /obj/item/clothing/under/rank/chef, - /obj/item/clothing/head/chefhat - ) - -/* - * Janitor - */ -/obj/structure/closet/jcloset - name = "custodial closet" - desc = "It's a storage unit for janitorial clothes and gear." - closet_appearance = /decl/closet_appearance/wardrobe/mixed - -/obj/structure/closet/jcloset/WillContain() - return list( - /obj/item/clothing/under/rank/janitor, - /obj/item/device/radio/headset/headset_service, - /obj/item/clothing/gloves/thick, - /obj/item/clothing/head/soft/purple, - /obj/item/clothing/head/beret/purple, - /obj/item/device/flashlight, - /obj/item/caution = 4, - /obj/item/device/lightreplacer, - /obj/item/storage/bag/trash, - /obj/item/clothing/shoes/galoshes, - /obj/item/soap, - /obj/item/storage/belt/janitor - ) - -/* - * Lawyer - */ -/obj/structure/closet/lawcloset - name = "legal closet" - desc = "It's a storage unit for courtroom apparel and items." - closet_appearance = /decl/closet_appearance/wardrobe - - -/obj/structure/closet/lawcloset/WillContain() - return list( - /obj/item/clothing/under/lawyer/female, - /obj/item/clothing/under/lawyer/black, - /obj/item/clothing/under/lawyer/red, - /obj/item/clothing/under/lawyer/bluesuit, - /obj/item/clothing/suit/storage/toggle/suit/blue, - /obj/item/clothing/under/lawyer/purpsuit, - /obj/item/clothing/suit/storage/toggle/suit/purple, - /obj/item/clothing/shoes/brown, - /obj/item/clothing/shoes/black - ) diff --git a/code/game/objects/structures/crates_lockers/closets/l3closet.dm b/code/game/objects/structures/crates_lockers/closets/l3closet.dm deleted file mode 100644 index bbfde4c114aef..0000000000000 --- a/code/game/objects/structures/crates_lockers/closets/l3closet.dm +++ /dev/null @@ -1,86 +0,0 @@ -/obj/structure/closet/l3closet - name = "level-3 biohazard suit closet" - desc = "It's a storage unit for level-3 biohazard gear." - closet_appearance = /decl/closet_appearance/bio - -/obj/structure/closet/l3closet/general/WillContain() - return list( - /obj/item/clothing/suit/bio_suit/general, - /obj/item/clothing/head/bio_hood/general, - /obj/item/clothing/mask/gas/half, - /obj/item/tank/oxygen_emergency_extended, - ) - -/obj/structure/closet/l3closet/general/multi/WillContain() - return MERGE_ASSOCS_WITH_NUM_VALUES(..(), list( - /obj/item/clothing/head/bio_hood/general = 5, - /obj/item/clothing/mask/gas/half = 5, - /obj/item/clothing/suit/bio_suit/general = 5, - /obj/item/tank/oxygen_emergency_extended = 5 - )) - - -/obj/structure/closet/l3closet/virology - closet_appearance = /decl/closet_appearance/bio/virology - -/obj/structure/closet/l3closet/virology/WillContain() - return list( - /obj/item/clothing/suit/bio_suit/virology, - /obj/item/clothing/head/bio_hood/virology, - /obj/item/clothing/mask/gas, - /obj/item/tank/oxygen - ) - -/obj/structure/closet/l3closet/security - closet_appearance = /decl/closet_appearance/bio/security - -/obj/structure/closet/l3closet/security/WillContain() - return list( - /obj/item/clothing/suit/bio_suit/security, - /obj/item/clothing/head/bio_hood/security, - /obj/item/clothing/mask/gas/half, - /obj/item/tank/oxygen_emergency_extended - ) - -/obj/structure/closet/l3closet/janitor - closet_appearance = /decl/closet_appearance/bio/janitor - -/obj/structure/closet/l3closet/janitor/WillContain() - return list( - /obj/item/clothing/suit/bio_suit/janitor, - /obj/item/clothing/head/bio_hood/janitor, - /obj/item/clothing/mask/gas/half, - /obj/item/tank/oxygen_emergency_extended - ) - -/obj/structure/closet/l3closet/scientist - closet_appearance = /decl/closet_appearance/bio/science - - -/obj/structure/closet/l3closet/scientist/WillContain() - return list( - /obj/item/clothing/suit/bio_suit/scientist, - /obj/item/clothing/head/bio_hood/scientist, - /obj/item/clothing/mask/gas, - /obj/item/tank/oxygen_emergency_double, - ) - -/obj/structure/closet/l3closet/scientist/multi/WillContain() - return MERGE_ASSOCS_WITH_NUM_VALUES(..(), list( - /obj/item/clothing/head/bio_hood/scientist = 5, - /obj/item/clothing/suit/bio_suit/scientist = 5, - /obj/item/clothing/mask/gas = 5, - /obj/item/tank/oxygen_emergency_double = 5, - )) - -/obj/structure/closet/l3closet/command - closet_appearance = /decl/closet_appearance/bio/command - - -/obj/structure/closet/l3closet/command/WillContain() - return list( - /obj/item/clothing/suit/bio_suit/cmo, - /obj/item/clothing/head/bio_hood/cmo, - /obj/item/clothing/mask/gas/half, - /obj/item/tank/oxygen_emergency_extended - ) diff --git a/code/game/objects/structures/crates_lockers/closets/malfunction.dm b/code/game/objects/structures/crates_lockers/closets/malfunction.dm deleted file mode 100644 index bc1c69377e1de..0000000000000 --- a/code/game/objects/structures/crates_lockers/closets/malfunction.dm +++ /dev/null @@ -1,13 +0,0 @@ -/obj/structure/closet/malf/suits - desc = "It's a storage unit for operational gear." - closet_appearance = /decl/closet_appearance/tactical - -/obj/structure/closet/malf/suits/WillContain() - return list( - /obj/item/tank/jetpack/void, - /obj/item/clothing/mask/breath, - /obj/item/clothing/head/helmet/space/void, - /obj/item/clothing/suit/space/void, - /obj/item/crowbar, - /obj/item/cell/standard, - /obj/item/device/multitool) diff --git a/code/game/objects/structures/crates_lockers/closets/secure/_secure_closets.dm b/code/game/objects/structures/crates_lockers/closets/secure/_secure_closets.dm deleted file mode 100644 index 6c58346ecec10..0000000000000 --- a/code/game/objects/structures/crates_lockers/closets/secure/_secure_closets.dm +++ /dev/null @@ -1,11 +0,0 @@ -/obj/structure/closet/secure_closet - name = "secure locker" - desc = "It's a card-locked storage unit." - - closet_appearance = /decl/closet_appearance/secure_closet - setup = CLOSET_HAS_LOCK | CLOSET_CAN_BE_WELDED - locked = TRUE - health_max = 200 - -/obj/structure/closet/secure_closet/slice_into_parts(obj/item/weldingtool/WT, mob/user) - to_chat(user, "\The [src] is too strong to be taken apart.") diff --git a/code/game/objects/structures/crates_lockers/closets/secure/bar.dm b/code/game/objects/structures/crates_lockers/closets/secure/bar.dm deleted file mode 100644 index b545df0568a77..0000000000000 --- a/code/game/objects/structures/crates_lockers/closets/secure/bar.dm +++ /dev/null @@ -1,7 +0,0 @@ -/obj/structure/closet/secure_closet/bar - name = "booze closet" - req_access = list(access_kitchen) - closet_appearance = /decl/closet_appearance/cabinet/secure - -/obj/structure/closet/secure_closet/bar/WillContain() - return list(/obj/item/reagent_containers/food/drinks/bottle/small/beer = 10) diff --git a/code/game/objects/structures/crates_lockers/closets/secure/cargo.dm b/code/game/objects/structures/crates_lockers/closets/secure/cargo.dm deleted file mode 100644 index ebe1e962e0284..0000000000000 --- a/code/game/objects/structures/crates_lockers/closets/secure/cargo.dm +++ /dev/null @@ -1,36 +0,0 @@ -/obj/structure/closet/secure_closet/cargotech - name = "cargo technician's locker" - req_access = list(access_cargo) - closet_appearance = /decl/closet_appearance/secure_closet/cargo - -/obj/structure/closet/secure_closet/cargotech/WillContain() - return list( - new/datum/atom_creator/weighted(list(/obj/item/storage/backpack = 75, /obj/item/storage/backpack/satchel/grey = 25)), - new/datum/atom_creator/simple(/obj/item/storage/backpack/dufflebag, 25), - /obj/item/clothing/under/rank/cargotech, - /obj/item/clothing/shoes/black, - /obj/item/device/radio/headset/headset_cargo, - /obj/item/clothing/gloves/thick, - /obj/item/storage/belt/general, - /obj/item/clothing/head/soft - ) - -/obj/structure/closet/secure_closet/quartermaster - name = "quartermaster's locker" - req_access = list(access_qm) - closet_appearance = /decl/closet_appearance/secure_closet/cargo/qm - -/obj/structure/closet/secure_closet/quartermaster/WillContain() - return list( - new/datum/atom_creator/weighted(list(/obj/item/storage/backpack = 75, /obj/item/storage/backpack/satchel/grey = 25)), - new/datum/atom_creator/simple(/obj/item/storage/backpack/dufflebag, 25), - /obj/item/clothing/under/rank/cargotech, - /obj/item/clothing/shoes/brown, - /obj/item/device/radio/headset/headset_cargo, - /obj/item/clothing/gloves/thick, - /obj/item/clothing/suit/fire/firefighter, - /obj/item/tank/oxygen_emergency, - /obj/item/clothing/mask/gas, - /obj/item/clothing/glasses/meson, - /obj/item/clothing/head/soft, - ) diff --git a/code/game/objects/structures/crates_lockers/closets/secure/engineering.dm b/code/game/objects/structures/crates_lockers/closets/secure/engineering.dm deleted file mode 100644 index af5557f6ddf3c..0000000000000 --- a/code/game/objects/structures/crates_lockers/closets/secure/engineering.dm +++ /dev/null @@ -1,90 +0,0 @@ -/obj/structure/closet/secure_closet/engineering_chief - name = "chief engineer's locker" - closet_appearance = /decl/closet_appearance/secure_closet/engineering/ce - req_access = list(access_ce) - -/obj/structure/closet/secure_closet/engineering_chief/WillContain() - return list( - new/datum/atom_creator/weighted(list(/obj/item/clothing/accessory/storage/brown_vest = 70, /obj/item/clothing/accessory/storage/webbing = 30)), - new/datum/atom_creator/weighted(list(/obj/item/storage/backpack/industrial, /obj/item/storage/backpack/satchel/eng)), - new/datum/atom_creator/simple(/obj/item/storage/backpack/dufflebag/eng, 50), - /obj/item/blueprints, - /obj/item/clothing/under/rank/chief_engineer, - /obj/item/clothing/head/hardhat/firefighter/Chief, - /obj/item/clothing/head/welding, - /obj/item/clothing/gloves/insulated, - /obj/item/clothing/shoes/brown, - /obj/item/device/radio/headset/heads/ce, - /obj/item/storage/toolbox/mechanical, - /obj/item/clothing/suit/storage/hazardvest, - /obj/item/clothing/mask/gas, - /obj/item/device/multitool, - /obj/item/device/flash, - /obj/item/taperoll/engineering, - /obj/item/crowbar/brace_jack - ) - -/obj/structure/closet/secure_closet/engineering_electrical - name = "electrical supplies" - req_access = list(access_engine_equip) - closet_appearance = /decl/closet_appearance/secure_closet/engineering/electrical - -/obj/structure/closet/secure_closet/engineering_electrical/WillContain() - return list( - /obj/item/clothing/gloves/nabber = 2, - /obj/item/clothing/gloves/insulated = 3, - /obj/item/storage/toolbox/electrical = 3, - /obj/item/module/power_control = 3, - /obj/item/device/multitool = 3 - ) - -/obj/structure/closet/secure_closet/engineering_welding - name = "welding supplies" - req_access = list(access_construction) - closet_appearance = /decl/closet_appearance/secure_closet/engineering/welding - -/obj/structure/closet/secure_closet/engineering_welding/WillContain() - return list( - /obj/item/clothing/head/welding = 3, - /obj/item/weldingtool/largetank = 3, - /obj/item/storage/backpack/weldpack = 3, - /obj/item/clothing/glasses/welding = 3, - /obj/item/welder_tank = 6 - ) - -/obj/structure/closet/secure_closet/engineering_personal - name = "engineer's locker" - req_access = list(access_engine_equip) - closet_appearance = /decl/closet_appearance/secure_closet/engineering - -/obj/structure/closet/secure_closet/engineering_personal/WillContain() - return list( - new/datum/atom_creator/weighted(list(/obj/item/clothing/accessory/storage/brown_vest = 70, /obj/item/clothing/accessory/storage/webbing = 30)), - new/datum/atom_creator/weighted(list(/obj/item/storage/backpack/industrial, /obj/item/storage/backpack/satchel/eng)), - new/datum/atom_creator/simple(/obj/item/storage/backpack/dufflebag/eng, 50), - /obj/item/storage/toolbox/mechanical, - /obj/item/device/radio/headset/headset_eng, - /obj/item/clothing/suit/storage/hazardvest, - /obj/item/clothing/mask/gas, - /obj/item/clothing/glasses/meson, - /obj/item/taperoll/engineering - ) - -/obj/structure/closet/secure_closet/atmos_personal - name = "technician's locker" - req_access = list(access_atmospherics) - closet_appearance = /decl/closet_appearance/secure_closet/engineering/atmos - -/obj/structure/closet/secure_closet/atmos_personal/WillContain() - return list( - new/datum/atom_creator/weighted(list(/obj/item/clothing/accessory/storage/brown_vest = 70, /obj/item/clothing/accessory/storage/webbing = 30)), - new/datum/atom_creator/weighted(list(/obj/item/storage/backpack/industrial, /obj/item/storage/backpack/satchel/eng)), - new/datum/atom_creator/simple(/obj/item/storage/backpack/dufflebag/eng, 50), - /obj/item/clothing/suit/fire/firefighter, - /obj/item/device/flashlight, - /obj/item/extinguisher, - /obj/item/device/radio/headset/headset_eng, - /obj/item/clothing/suit/storage/hazardvest, - /obj/item/clothing/mask/gas, - /obj/item/taperoll/atmos - ) diff --git a/code/game/objects/structures/crates_lockers/closets/secure/freezer.dm b/code/game/objects/structures/crates_lockers/closets/secure/freezer.dm deleted file mode 100644 index c6e7f9ec92501..0000000000000 --- a/code/game/objects/structures/crates_lockers/closets/secure/freezer.dm +++ /dev/null @@ -1,56 +0,0 @@ -/obj/structure/closet/secure_closet/freezer/kitchen - name = "kitchen cabinet" - req_access = list(access_kitchen) - -/obj/structure/closet/secure_closet/freezer/kitchen/WillContain() - return list( - /obj/item/reagent_containers/food/condiment/salt = 1, - /obj/item/reagent_containers/food/condiment/flour = 7, - /obj/item/reagent_containers/food/condiment/sugar = 2, - /obj/item/reagent_containers/glass/bottle/dye/polychromic = 2 - ) - -/obj/structure/closet/secure_closet/freezer/kitchen/mining - req_access = list() - -/obj/structure/closet/secure_closet/freezer/meat - name = "meat fridge" - icon = 'icons/obj/closets/fridge.dmi' - closet_appearance = null - -/obj/structure/closet/secure_closet/freezer/meat/WillContain() - return list( - /obj/item/reagent_containers/food/snacks/meat/beef = 8, - /obj/random/fish = 8 - ) - -/obj/structure/closet/secure_closet/freezer/fridge - name = "refrigerator" - icon = 'icons/obj/closets/fridge.dmi' - closet_appearance = null - -/obj/structure/closet/secure_closet/freezer/fridge/WillContain() - return list( - /obj/item/reagent_containers/food/drinks/milk = 6, - /obj/item/reagent_containers/food/drinks/soymilk = 4, - /obj/item/storage/fancy/egg_box = 4 - ) - -/obj/structure/closet/secure_closet/freezer/money - name = "secure locker" - icon = 'icons/obj/closets/fridge.dmi' - closet_appearance = null - req_access = list(access_heads_vault) - -/obj/structure/closet/secure_closet/freezer/money/Initialize() - . = ..() - //let's make hold a substantial amount. - var/created_size = 0 - for(var/i = 1 to 200) //sanity loop limit - var/obj/item/cash_type = pick(3; /obj/item/spacecash/bundle/c1000, 4; /obj/item/spacecash/bundle/c500, 5; /obj/item/spacecash/bundle/c200) - var/bundle_size = initial(cash_type.w_class) / 2 - if(created_size + bundle_size <= storage_capacity) - created_size += bundle_size - new cash_type(src) - else - break diff --git a/code/game/objects/structures/crates_lockers/closets/secure/guncabinet.dm b/code/game/objects/structures/crates_lockers/closets/secure/guncabinet.dm deleted file mode 100644 index fa48b6c086c0d..0000000000000 --- a/code/game/objects/structures/crates_lockers/closets/secure/guncabinet.dm +++ /dev/null @@ -1,57 +0,0 @@ -/obj/structure/closet/secure_closet/guncabinet - name = "gun cabinet" - req_access = list(access_armory) - icon = 'icons/obj/guncabinet.dmi' - closet_appearance = null - -/obj/structure/closet/secure_closet/guncabinet/Initialize() - . = ..() - update_icon() - -/obj/structure/closet/secure_closet/guncabinet/LateInitialize(mapload, ...) - . = ..() - update_icon() - -/obj/structure/closet/secure_closet/guncabinet/toggle() - ..() - update_icon() - -/obj/structure/closet/secure_closet/guncabinet/open() //There are plenty of things that can open it that don't use toggle - ..() - update_icon() - -/obj/structure/closet/secure_closet/guncabinet/on_update_icon() - overlays.Cut() - if(opened) - overlays += icon(icon,"door_open") - else - var/lazors = 0 - var/shottas = 0 - for (var/obj/item/gun/G in contents) - if (istype(G, /obj/item/gun/energy)) - lazors++ - if (istype(G, /obj/item/gun/projectile)) - shottas++ - for (var/i = 0 to 2) - if(lazors || shottas) // only make icons if we have one of the two types. - var/image/gun = image(icon(src.icon)) - if (lazors > shottas) - lazors-- - gun.icon_state = "laser" - else if (shottas) - shottas-- - gun.icon_state = "projectile" - gun.pixel_x = i*4 - overlays += gun - - overlays += icon(src.icon, "door") - - if(welded) - overlays += icon(src.icon,"welded") - - if(!broken) - if(locked) - overlays += icon(src.icon,"locked") - else - overlays += icon(src.icon,"open") - diff --git a/code/game/objects/structures/crates_lockers/closets/secure/hydroponics.dm b/code/game/objects/structures/crates_lockers/closets/secure/hydroponics.dm deleted file mode 100644 index 44493cd23802a..0000000000000 --- a/code/game/objects/structures/crates_lockers/closets/secure/hydroponics.dm +++ /dev/null @@ -1,19 +0,0 @@ -/obj/structure/closet/secure_closet/hydroponics - name = "botanist's locker" - req_access = list(access_hydroponics) - closet_appearance = /decl/closet_appearance/secure_closet/hydroponics - -/obj/structure/closet/secure_closet/hydroponics/WillContain() - return list( - new /datum/atom_creator/weighted(list(/obj/item/clothing/suit/apron, /obj/item/clothing/suit/apron/overalls)), - /obj/item/storage/plants, - /obj/item/clothing/under/rank/hydroponics, - /obj/item/device/scanner/plant, - /obj/item/device/radio/headset/headset_service, - /obj/item/clothing/mask/bandana/botany, - /obj/item/clothing/head/bandana/green, - /obj/item/material/minihoe, - /obj/item/material/hatchet, - /obj/item/wirecutters/clippers, - /obj/item/reagent_containers/spray/plantbgone, - ) diff --git a/code/game/objects/structures/crates_lockers/closets/secure/medical.dm b/code/game/objects/structures/crates_lockers/closets/secure/medical.dm deleted file mode 100644 index 7d18fa2e68aeb..0000000000000 --- a/code/game/objects/structures/crates_lockers/closets/secure/medical.dm +++ /dev/null @@ -1,208 +0,0 @@ -#define RANDOM_SCRUBS new/datum/atom_creator/weighted(list( \ - list(/obj/item/clothing/under/rank/medical/scrubs, /obj/item/clothing/head/surgery), \ - list(/obj/item/clothing/under/rank/medical/scrubs/blue, /obj/item/clothing/head/surgery/blue), \ - list(/obj/item/clothing/under/rank/medical/scrubs/green, /obj/item/clothing/head/surgery/green), \ - list(/obj/item/clothing/under/rank/medical/scrubs/purple, /obj/item/clothing/head/surgery/purple), \ - list(/obj/item/clothing/under/rank/medical/scrubs/black, /obj/item/clothing/head/surgery/black), \ - list(/obj/item/clothing/under/rank/medical/scrubs/lilac, /obj/item/clothing/head/surgery/lilac), \ - list(/obj/item/clothing/under/rank/medical/scrubs/teal, /obj/item/clothing/head/surgery/teal), \ - list(/obj/item/clothing/under/rank/medical/scrubs/heliodor, /obj/item/clothing/head/surgery/heliodor), \ - list(/obj/item/clothing/under/rank/medical/scrubs/navyblue, /obj/item/clothing/head/surgery/navyblue)\ - ) \ - ) - -/obj/structure/closet/secure_closet/medical1 - name = "medical equipment closet" - desc = "Filled with medical junk." - closet_appearance = /decl/closet_appearance/secure_closet/medical - req_access = list(access_medical_equip) - -/obj/structure/closet/secure_closet/medical1/WillContain() - return list( - /obj/item/storage/box/autoinjectors, - /obj/item/storage/box/syringes, - /obj/item/reagent_containers/dropper = 2, - /obj/item/reagent_containers/glass/beaker = 2, - /obj/item/reagent_containers/glass/bottle/inaprovaline = 2, - /obj/item/reagent_containers/glass/bottle/antitoxin = 2, - /obj/random/firstaid, - /obj/item/storage/box/masks, - /obj/item/storage/box/gloves - ) - -/obj/structure/closet/secure_closet/medical2 - name = "anesthetics closet" - desc = "Used to knock people out." - req_access = list(access_surgery) - -/obj/structure/closet/secure_closet/medical2/WillContain() - return list( - /obj/item/tank/anesthetic = 3, - /obj/item/clothing/mask/breath/medical = 3 - ) - -/obj/structure/closet/secure_closet/medical3 - name = "medical doctor's locker" - req_access = list(access_medical_equip) - closet_appearance = /decl/closet_appearance/secure_closet/medical/alt - -/obj/structure/closet/secure_closet/medical3/WillContain() - return list( - new/datum/atom_creator/weighted(list(/obj/item/storage/backpack/medic, /obj/item/storage/backpack/satchel/med)), - new/datum/atom_creator/simple(/obj/item/storage/backpack/dufflebag/med, 50), - /obj/item/clothing/under/rank/nursesuit, - /obj/item/clothing/head/nursehat, - /obj/item/clothing/under/rank/medical, - /obj/item/clothing/under/rank/nurse, - /obj/item/clothing/under/rank/orderly, - /obj/item/clothing/suit/storage/toggle/labcoat, - /obj/item/clothing/suit/storage/toggle/fr_jacket, - /obj/item/clothing/shoes/white, - /obj/item/device/radio/headset/headset_med, - /obj/item/taperoll/medical, - /obj/item/storage/belt/medical/emt, - RANDOM_SCRUBS, - RANDOM_SCRUBS - ) - -/obj/structure/closet/secure_closet/paramedic - name = "paramedic locker" - desc = "Supplies for a first responder." - closet_appearance = /decl/closet_appearance/secure_closet/medical - req_access = list(access_medical_equip) - -/obj/structure/closet/secure_closet/paramedic/WillContain() - return list( - /obj/item/storage/box/autoinjectors, - /obj/item/storage/box/syringes, - /obj/item/reagent_containers/glass/bottle/inaprovaline, - /obj/item/reagent_containers/glass/bottle/antitoxin, - /obj/item/storage/belt/medical/emt, - /obj/item/clothing/mask/gas, - /obj/item/clothing/suit/storage/toggle/fr_jacket, - /obj/item/clothing/suit/storage/toggle/labcoat, - /obj/item/device/radio/headset/headset_med, - /obj/item/device/flashlight, - /obj/item/tank/oxygen_emergency_extended, - /obj/item/clothing/glasses/hud/health, - /obj/item/device/scanner/health, - /obj/item/device/radio/off, - /obj/random/medical, - /obj/item/crowbar, - /obj/item/extinguisher/mini, - /obj/item/storage/box/freezer, - /obj/item/clothing/accessory/storage/white_vest, - ) - -/obj/structure/closet/secure_closet/CMO - name = "chief medical officer's locker" - req_access = list(access_cmo) - closet_appearance = /decl/closet_appearance/secure_closet/cmo - -/obj/structure/closet/secure_closet/CMO/WillContain() - return list( - new/datum/atom_creator/weighted(list(/obj/item/storage/backpack/medic, /obj/item/storage/backpack/satchel/med)), - new/datum/atom_creator/simple(/obj/item/storage/backpack/dufflebag/med, 50), - /obj/item/clothing/suit/bio_suit/cmo, - /obj/item/clothing/head/bio_hood/cmo, - /obj/item/clothing/shoes/white, - /obj/item/clothing/under/rank/chief_medical_officer, - /obj/item/clothing/suit/storage/toggle/labcoat/cmo, - /obj/item/clothing/suit/storage/toggle/labcoat/cmoalt, - /obj/item/clothing/gloves/latex, - /obj/item/clothing/shoes/brown, - /obj/item/device/radio/headset/heads/cmo, - /obj/item/device/flash, - /obj/item/reagent_containers/hypospray/vial, - RANDOM_SCRUBS - ) - -/obj/structure/closet/secure_closet/chemical - name = "chemical closet" - desc = "Store dangerous chemicals in here." - closet_appearance = /decl/closet_appearance/secure_closet/medical - req_access = list(access_chemistry) - -/obj/structure/closet/secure_closet/chemical/WillContain() - return list( - /obj/item/storage/box/pillbottles = 2, - /obj/item/reagent_containers/glass/beaker/cryoxadone, - /obj/random/medical = 12 - ) - -/obj/structure/closet/secure_closet/medical_wall - name = "first aid closet" - desc = "It's a secure wall-mounted storage unit for first aid supplies." - closet_appearance = /decl/closet_appearance/wall/medical - anchored = TRUE - density = FALSE - wall_mounted = TRUE - storage_types = CLOSET_STORAGE_ITEMS - req_access = list(access_medical_equip) - -/obj/structure/closet/secure_closet/counselor - name = "counselor's locker" - closet_appearance = /decl/closet_appearance/secure_closet/medical - req_access = list(access_psychiatrist) - -/obj/structure/closet/secure_closet/counselor/WillContain() - return list( - /obj/item/clothing/under/rank/psych, - /obj/item/clothing/under/rank/psych/turtleneck, - /obj/item/clothing/suit/storage/toggle/labcoat, - /obj/item/clothing/suit/storage/toggle/labcoat/foundation, - /obj/item/clothing/shoes/white, - /obj/item/storage/pill_bottle/citalopram, - /obj/item/storage/pill_bottle/methylphenidate, - /obj/item/material/clipboard, - /obj/item/folder/white, - /obj/item/device/taperecorder, - /obj/item/device/tape/random = 3, - /obj/item/device/camera, - /obj/item/toy/therapy_blue, - /obj/item/storage/belt/general - ) - -/obj/structure/closet/secure_closet/virology - name = "virologist's locker" - closet_appearance = /decl/closet_appearance/secure_closet/medical/virology - - req_access = list(access_virology) - -/obj/structure/closet/secure_closet/virology/WillContain() - return list( - /obj/item/storage/box/autoinjectors, - /obj/item/storage/box/syringes, - /obj/item/reagent_containers/dropper = 2, - /obj/item/reagent_containers/glass/beaker = 2, - /obj/item/reagent_containers/glass/bottle/inaprovaline, - /obj/item/storage/pill_bottle/spaceacillin, - /obj/item/reagent_containers/syringe/antiviral, - /obj/item/reagent_containers/glass/bottle/antitoxin, - /obj/item/storage/box/masks, - /obj/item/storage/box/gloves, - /obj/item/clothing/under/rank/virologist, - /obj/item/clothing/shoes/white, - /obj/item/clothing/suit/storage/toggle/labcoat/virologist, - /obj/item/clothing/mask/surgical, - /obj/item/device/scanner/health, - /obj/item/clothing/glasses/hud/health - ) - -/obj/structure/closet/secure_closet/psychiatry - name = "Psychiatrist's locker" - desc = "Everything you need to keep the lunatics at bay." - closet_appearance = /decl/closet_appearance/secure_closet/medical/alt - req_access = list(access_psychiatrist) - -/obj/structure/closet/secure_closet/psychiatry/WillContain() - return list( - /obj/item/clothing/suit/straight_jacket, - /obj/item/reagent_containers/glass/bottle/stoxin, - /obj/item/reagent_containers/syringe, - /obj/item/storage/pill_bottle/citalopram, - /obj/item/storage/pill_bottle/methylphenidate, - /obj/item/storage/pill_bottle/paroxetine, - /obj/item/clothing/under/rank/psych/turtleneck, - /obj/item/clothing/under/rank/psych - ) diff --git a/code/game/objects/structures/crates_lockers/closets/secure/personal.dm b/code/game/objects/structures/crates_lockers/closets/secure/personal.dm deleted file mode 100644 index d796e34b83b17..0000000000000 --- a/code/game/objects/structures/crates_lockers/closets/secure/personal.dm +++ /dev/null @@ -1,48 +0,0 @@ -/obj/structure/closet/secure_closet/personal - name = "personal closet" - desc = "It's a secure locker for personnel." - req_access = list(access_all_personal_lockers) - locked = FALSE - var/registered_name = null - -/obj/structure/closet/secure_closet/personal/WillContain() - return list( - new /datum/atom_creator/weighted(list(/obj/item/storage/backpack, /obj/item/storage/backpack/satchel/grey)), - /obj/item/device/radio/headset - ) - -/obj/structure/closet/secure_closet/personal/empty/WillContain() - return - -/obj/structure/closet/secure_closet/personal/patient - name = "patient's closet" -/obj/structure/closet/secure_closet/personal/patient/WillContain() - return list(/obj/item/clothing/suit/hospital/blue, /obj/item/clothing/suit/hospital/green, /obj/item/clothing/suit/hospital/pink) - -/obj/structure/closet/secure_closet/personal/cabinet - closet_appearance = /decl/closet_appearance/cabinet/secure - -/obj/structure/closet/secure_closet/personal/cabinet/WillContain() - return list(/obj/item/storage/backpack/satchel/grey/withwallet, /obj/item/device/radio/headset) - -/obj/structure/closet/secure_closet/personal/CanToggleLock(var/mob/user, var/obj/item/card/id/id_card) - return ..() || (istype(id_card) && id_card.registered_name && (!registered_name || (registered_name == id_card.registered_name))) - -/obj/structure/closet/secure_closet/personal/togglelock(var/mob/user, var/obj/item/card/id/id_card) - if (..()) - if(locked) - id_card = istype(id_card) ? id_card : user.GetIdCard() - if (id_card) - set_owner(id_card.registered_name) - else - set_owner(null) - -/obj/structure/closet/secure_closet/personal/proc/set_owner(var/registered_name) - if (registered_name) - src.registered_name = registered_name - src.SetName(name + " ([registered_name])") - src.desc = "Currently used by [registered_name]." - else - src.registered_name = null - src.SetName(initial(name)) - src.desc = initial(desc) \ No newline at end of file diff --git a/code/game/objects/structures/crates_lockers/closets/secure/scientist.dm b/code/game/objects/structures/crates_lockers/closets/secure/scientist.dm deleted file mode 100644 index 6e4de0e6ea432..0000000000000 --- a/code/game/objects/structures/crates_lockers/closets/secure/scientist.dm +++ /dev/null @@ -1,66 +0,0 @@ -/obj/structure/closet/secure_closet/scientist - name = "scientist's locker" - req_access = list(list(access_tox,access_tox_storage)) - closet_appearance = /decl/closet_appearance/secure_closet/expedition/science - -/obj/structure/closet/secure_closet/scientist/WillContain() - return list( - new /datum/atom_creator/weighted(list(/obj/item/storage/backpack/messenger/tox, /obj/item/storage/backpack/satchel/tox)), - /obj/item/clothing/under/rank/scientist, - /obj/item/clothing/suit/storage/toggle/labcoat, - /obj/item/clothing/shoes/white, - /obj/item/device/radio/headset/headset_sci, - /obj/item/clothing/mask/gas, - /obj/item/material/clipboard - ) - -/obj/structure/closet/secure_closet/xenobio - name = "xenobiologist's locker" - req_access = list(access_xenobiology) - closet_appearance = /decl/closet_appearance/secure_closet/expedition/science - -/obj/structure/closet/secure_closet/xenobio/WillContain() - return list( - new /datum/atom_creator/weighted(list(/obj/item/storage/backpack/messenger/tox, /obj/item/storage/backpack/satchel/tox)), - /obj/item/clothing/under/rank/scientist, - /obj/item/clothing/suit/storage/toggle/labcoat, - /obj/item/clothing/shoes/white, - /obj/item/device/radio/headset/headset_sci, - /obj/item/clothing/mask/gas, - /obj/item/clothing/gloves/latex, - /obj/item/material/clipboard, - /obj/item/storage/belt/general - ) - -/obj/structure/closet/secure_closet/RD - name = "chief science officer's locker" - req_access = list(access_rd) - closet_appearance = /decl/closet_appearance/secure_closet/rd - -/obj/structure/closet/secure_closet/RD/WillContain() - return list( - /obj/item/clothing/suit/bio_suit/scientist = 2, - /obj/item/clothing/head/bio_hood/scientist = 2, - /obj/item/clothing/suit/storage/toggle/labcoat, - /obj/item/clothing/shoes/white, - /obj/item/clothing/gloves/latex, - /obj/item/device/radio/headset/heads/rd, - /obj/item/clothing/mask/gas, - /obj/item/device/flash, - /obj/item/material/clipboard, - ) - -/obj/structure/closet/secure_closet/animal - name = "animal control closet" - req_access = list(access_research) - -/obj/structure/closet/secure_closet/animal/WillContain() - return list( - /obj/item/device/assembly/signaler, - /obj/item/device/radio/electropack = 3, - /obj/item/gun/launcher/syringe/rapid, - /obj/item/storage/box/syringegun, - /obj/item/storage/box/syringes, - /obj/item/reagent_containers/glass/bottle/chloralhydrate, - /obj/item/reagent_containers/glass/bottle/stoxin - ) diff --git a/code/game/objects/structures/crates_lockers/closets/secure/security.dm b/code/game/objects/structures/crates_lockers/closets/secure/security.dm deleted file mode 100644 index 5f68367dbba94..0000000000000 --- a/code/game/objects/structures/crates_lockers/closets/secure/security.dm +++ /dev/null @@ -1,255 +0,0 @@ -/obj/structure/closet/secure_closet/captains - name = "captain's locker" - req_access = list(access_captain) - closet_appearance = /decl/closet_appearance/secure_closet/command - -/obj/structure/closet/secure_closet/captains/WillContain() - return list( - new/datum/atom_creator/weighted(list(/obj/item/storage/backpack/command, /obj/item/storage/backpack/satchel/com)), - new/datum/atom_creator/simple(/obj/item/storage/backpack/dufflebag/com, 50), - /obj/item/clothing/suit/captunic, - /obj/item/clothing/suit/captunic/capjacket, - /obj/item/clothing/head/caphat/cap, - /obj/item/clothing/under/rank/captain, - /obj/item/clothing/suit/armor/vest/nt, - /obj/item/clothing/head/helmet, - /obj/item/clothing/shoes/brown, - /obj/item/device/radio/headset/heads/captain, - /obj/item/clothing/gloves/captain, - /obj/item/gun/energy/gun, - /obj/item/clothing/suit/armor/captain, - /obj/item/melee/telebaton, - /obj/item/clothing/under/dress/dress_cap, - /obj/item/clothing/head/caphat/formal, - /obj/item/clothing/under/captainformal, - ) - -/obj/structure/closet/secure_closet/hop - name = "head of personnel's locker" - closet_appearance = /decl/closet_appearance/secure_closet/command/hop - req_access = list(access_hop) - -/obj/structure/closet/secure_closet/hop/WillContain() - return list( - /obj/item/clothing/glasses/sunglasses, - /obj/item/clothing/suit/armor/vest/nt, - /obj/item/clothing/head/helmet, - /obj/item/device/radio/headset/heads/hop, - /obj/item/storage/box/ids = 2, - /obj/item/device/flash - ) - -/obj/structure/closet/secure_closet/hop2 - name = "head of personnel's attire" - req_access = list(access_hop) - closet_appearance = /decl/closet_appearance/secure_closet/command/hop - -/obj/structure/closet/secure_closet/hop2/WillContain() - return list( - /obj/item/clothing/under/rank/head_of_personnel, - /obj/item/clothing/under/dress/dress_hop, - /obj/item/clothing/under/dress/dress_hr, - /obj/item/clothing/under/lawyer/female, - /obj/item/clothing/under/lawyer/black, - /obj/item/clothing/under/lawyer/red, - /obj/item/clothing/under/lawyer/oldman, - /obj/item/clothing/shoes/brown, - /obj/item/clothing/shoes/black, - /obj/item/clothing/shoes/leather, - /obj/item/clothing/shoes/white, - /obj/item/clothing/under/rank/head_of_personnel_whimsy, - /obj/item/clothing/head/caphat/hop - ) - -/obj/structure/closet/secure_closet/hos - name = "head of security's locker" - req_access = list(access_hos) - closet_appearance = /decl/closet_appearance/secure_closet/security/hos - -/obj/structure/closet/secure_closet/hos/WillContain() - return list( - new/datum/atom_creator/weighted(list(/obj/item/storage/backpack/security, /obj/item/storage/backpack/satchel/sec)), - /obj/item/clothing/head/HoS, - /obj/item/clothing/head/helmet/nt, - /obj/item/clothing/suit/armor/vest/nt, - /obj/item/clothing/suit/storage/vest/nt/hos, - /obj/item/clothing/under/rank/head_of_security/jensen, - /obj/item/clothing/under/rank/head_of_security/corp, - /obj/item/clothing/suit/armor/hos/jensen, - /obj/item/clothing/suit/armor/hos, - /obj/item/clothing/head/HoS/dermal, - /obj/item/device/radio/headset/heads/hos, - /obj/item/clothing/glasses/hud/security/prot/sunglasses, - /obj/item/taperoll/police, - /obj/item/shield/riot, - /obj/item/storage/box/flashbangs, - /obj/item/storage/belt/holster/security, - /obj/item/device/flash, - /obj/item/melee/baton/loaded, - /obj/item/gun/energy/gun, - /obj/item/clothing/accessory/storage/holster/waist, - /obj/item/melee/telebaton, - /obj/item/clothing/head/beret/sec/corporate/hos, - /obj/item/device/holowarrant - ) - -/obj/structure/closet/secure_closet/warden - name = "warden's locker" - req_access = list(access_armory) - closet_appearance = /decl/closet_appearance/secure_closet/security/warden - -/obj/structure/closet/secure_closet/warden/WillContain() - return list( - new/datum/atom_creator/weighted(list(/obj/item/storage/backpack/security, /obj/item/storage/backpack/satchel/sec)), - new/datum/atom_creator/simple(/obj/item/storage/backpack/dufflebag/sec, 50), - /obj/item/clothing/head/helmet/nt, - /obj/item/clothing/suit/armor/vest/nt, - /obj/item/clothing/suit/storage/vest/nt/warden, - /obj/item/clothing/under/rank/warden, - /obj/item/clothing/under/rank/warden/corp, - /obj/item/clothing/suit/armor/vest/warden, - /obj/item/clothing/head/warden, - /obj/item/device/radio/headset/headset_sec, - /obj/item/clothing/glasses/hud/security/prot/sunglasses, - /obj/item/taperoll/police, - /obj/item/storage/box/flashbangs, - /obj/item/storage/box/teargas, - /obj/item/storage/belt/holster/security, - /obj/item/reagent_containers/spray/pepper, - /obj/item/melee/baton/loaded, - /obj/item/gun/energy/gun, - /obj/item/storage/box/holobadge, - /obj/item/clothing/head/beret/sec/corporate/warden, - /obj/item/device/holowarrant - ) - -/obj/structure/closet/secure_closet/security - name = "security officer's locker" - req_access = list(access_brig) - closet_appearance = /decl/closet_appearance/secure_closet/security - -/obj/structure/closet/secure_closet/security/WillContain() - return list( - new/datum/atom_creator/weighted(list(/obj/item/storage/backpack/security, /obj/item/storage/backpack/satchel/sec)), - new/datum/atom_creator/simple(/obj/item/storage/backpack/dufflebag/sec, 50), - /obj/item/clothing/suit/armor/vest/nt, - /obj/item/clothing/head/helmet, - /obj/item/device/radio/headset/headset_sec, - /obj/item/storage/belt/holster/security, - /obj/item/device/flash, - /obj/item/reagent_containers/spray/pepper, - /obj/item/grenade/chem_grenade/teargas, - /obj/item/melee/baton/loaded, - /obj/item/clothing/glasses/hud/security/prot/sunglasses, - /obj/item/taperoll/police, - /obj/item/device/hailer, - /obj/item/clothing/accessory/storage/black_vest, - /obj/item/clothing/head/soft/sec/corp, - /obj/item/clothing/under/rank/security/corp, - /obj/item/gun/energy/taser, - /obj/item/device/holowarrant, - ) - -/obj/structure/closet/secure_closet/security/cargo/WillContain() - return MERGE_ASSOCS_WITH_NUM_VALUES(..(), list( - /obj/item/clothing/accessory/armband/cargo, - /obj/item/device/encryptionkey/headset_cargo - )) - -/obj/structure/closet/secure_closet/security/engine/WillContain() - return MERGE_ASSOCS_WITH_NUM_VALUES(..(), list( - /obj/item/clothing/accessory/armband/engine, - /obj/item/device/encryptionkey/headset_eng - )) - -/obj/structure/closet/secure_closet/security/science/WillContain() - return MERGE_ASSOCS_WITH_NUM_VALUES(..(), list(/obj/item/device/encryptionkey/headset_sci)) - -/obj/structure/closet/secure_closet/security/med/WillContain() - return MERGE_ASSOCS_WITH_NUM_VALUES(..(), list( - /obj/item/clothing/accessory/armband/medgreen, - /obj/item/device/encryptionkey/headset_med - )) - -/obj/structure/closet/secure_closet/detective - name = "detective's cabinet" - req_access = list(access_forensics_lockers) - closet_appearance = /decl/closet_appearance/cabinet/secure - -/obj/structure/closet/secure_closet/detective/WillContain() - return list( - /obj/item/clothing/under/det, - /obj/item/clothing/under/det/grey, - /obj/item/clothing/under/det/black, - /obj/item/clothing/suit/storage/det_trench, - /obj/item/clothing/suit/storage/det_trench/grey, - /obj/item/clothing/suit/storage/forensics/blue, - /obj/item/clothing/suit/storage/forensics/red, - /obj/item/clothing/gloves/thick, - /obj/item/clothing/head/det, - /obj/item/clothing/head/det/grey, - /obj/item/clothing/shoes/laceup, - /obj/item/storage/box/evidence, - /obj/item/device/radio/headset/headset_sec, - /obj/item/clothing/suit/armor/vest/detective, - /obj/item/taperoll/police, - /obj/item/gun/projectile/pistol/sec/detective, - /obj/item/clothing/accessory/storage/holster/armpit, - /obj/item/reagent_containers/food/drinks/flask/detflask, - /obj/item/storage/briefcase/crimekit, - /obj/item/device/holowarrant - ) - -/obj/structure/closet/secure_closet/injection - name = "lethal injections locker" - req_access = list(access_captain) - -/obj/structure/closet/secure_closet/injection/WillContain() - return list(/obj/item/reagent_containers/syringe/ld50_syringe/choral = 2) - -/obj/structure/closet/secure_closet/brig - name = "brig locker" - req_access = list(access_brig) - anchored = TRUE - var/id = null - -/obj/structure/closet/secure_closet/brig/WillContain() - return list( - /obj/item/clothing/under/color/orange, - /obj/item/clothing/shoes/orange - ) - -/obj/structure/closet/secure_closet/courtroom - name = "courtroom locker" - req_access = list(access_lawyer) - -/obj/structure/closet/secure_closet/courtroom/WillContain() - return list( - /obj/item/clothing/shoes/brown, - /obj/item/paper/Court = 3, - /obj/item/pen , - /obj/item/clothing/suit/judgerobe, - /obj/item/clothing/head/powdered_wig , - /obj/item/storage/briefcase, - ) - -/obj/structure/closet/secure_closet/wall - name = "wall locker" - req_access = list(access_security) - closet_appearance = /decl/closet_appearance/wall - - //too small to put a man in - large = 0 - -/obj/structure/closet/secure_closet/lawyer - name = "internal affairs secure closet" - req_access = list(access_lawyer) - -/obj/structure/closet/secure_closet/lawyer/WillContain() - return list( - /obj/item/device/flash = 2, - /obj/item/device/camera = 2, - /obj/item/device/camera_film = 2, - /obj/item/device/taperecorder = 2, - /obj/item/storage/secure/briefcase = 2, - ) diff --git a/code/game/objects/structures/crates_lockers/closets/secure/service.dm b/code/game/objects/structures/crates_lockers/closets/secure/service.dm deleted file mode 100644 index 710b8cda7f60f..0000000000000 --- a/code/game/objects/structures/crates_lockers/closets/secure/service.dm +++ /dev/null @@ -1,19 +0,0 @@ -/obj/structure/closet/secure_closet/chaplain - name = "chaplain's locker" - closet_appearance = /decl/closet_appearance/secure_closet/chaplain - req_access = list(access_chapel_office) - -/obj/structure/closet/secure_closet/chaplain/WillContain() - return list( - /obj/item/clothing/under/rank/chaplain, - /obj/item/clothing/shoes/black, - /obj/item/clothing/suit/chaplain_hoodie, - /obj/item/storage/candle_box = 2, - /obj/item/storage/candle_box/incense, - /obj/item/deck/tarot, - /obj/item/reagent_containers/food/drinks/bottle/holywater, - /obj/item/nullrod, - /obj/item/storage/bible, - /obj/item/storage/belt/general, - /obj/item/material/urn - ) \ No newline at end of file diff --git a/code/game/objects/structures/crates_lockers/closets/statue.dm b/code/game/objects/structures/crates_lockers/closets/statue.dm deleted file mode 100644 index ebe306a19849c..0000000000000 --- a/code/game/objects/structures/crates_lockers/closets/statue.dm +++ /dev/null @@ -1,111 +0,0 @@ -/obj/structure/closet/statue //what - name = "statue" - desc = "An incredibly lifelike marble carving." - icon = 'icons/obj/statue.dmi' - icon_state = "human_male" - density = TRUE - anchored = TRUE - setup = 0 - health_max = 0 - var/intialTox = 0 //these are here to keep the mob from taking damage from things that logically wouldn't affect a rock - var/intialFire = 0 //it's a little sloppy I know but it was this or the GODMODE flag. Lesser of two evils. - var/intialBrute = 0 - var/intialOxy = 0 - var/timer = 240 //eventually the person will be freed - -/obj/structure/closet/statue/New(loc, var/mob/living/L) - if(L && (ishuman(L) || L.is_species(SPECIES_MONKEY) || iscorgi(L))) - if(L.buckled) - L.buckled = 0 - L.anchored = FALSE - if(L.client) - L.client.perspective = EYE_PERSPECTIVE - L.client.eye = src - L.forceMove(src) - L.set_sdisability(MUTED) - set_max_health(L.health + 100) - intialTox = L.getToxLoss() - intialFire = L.getFireLoss() - intialBrute = L.getBruteLoss() - intialOxy = L.getOxyLoss() - if(ishuman(L)) - name = "statue of [L.name]" - if(L.gender == "female") - icon_state = "human_female" - else if(L.is_species(SPECIES_MONKEY)) - name = "statue of a monkey" - icon_state = "monkey" - else if(iscorgi(L)) - name = "statue of a corgi" - icon_state = "corgi" - desc = "If it takes forever, I will wait for you..." - - if(health_max == 0) //meaning if the statue didn't find a valid target - qdel(src) - return - - START_PROCESSING(SSobj, src) - ..() - -/obj/structure/closet/statue/Process() - timer-- - for(var/mob/living/M in src) //Go-go gadget stasis field - M.setToxLoss(intialTox) - M.adjustFireLoss(intialFire - M.getFireLoss()) - M.adjustBruteLoss(intialBrute - M.getBruteLoss()) - M.setOxyLoss(intialOxy) - if (timer <= 0) - dump_contents() - STOP_PROCESSING(SSobj, src) - qdel(src) - -/obj/structure/closet/statue/dump_contents() - for(var/obj/O in src) - O.dropInto(loc) - - for(var/mob/living/M in src) - M.dropInto(loc) - M.unset_sdisability(MUTED) - M.take_overall_damage(M.health - get_damage_value(), 0) //any new damage the statue incurred is transfered to the mob - if(M.client) - M.client.eye = M.client.mob - M.client.perspective = MOB_PERSPECTIVE - -/obj/structure/closet/statue/open() - return - -/obj/structure/closet/statue/close() - return - -/obj/structure/closet/statue/toggle() - return - -/obj/structure/closet/statue/on_death() - for (var/mob/M in src) - shatter(M) - -/obj/structure/closet/statue/attack_generic(var/mob/user, damage, attacktext, environment_smash) - if(damage && environment_smash) - kill_health() - -/obj/structure/closet/statue/MouseDrop_T() - return - -/obj/structure/closet/statue/relaymove() - return - -/obj/structure/closet/statue/attack_hand() - return - -/obj/structure/closet/statue/verb_toggleopen() - return - -/obj/structure/closet/statue/on_update_icon() - return - -/obj/structure/closet/statue/proc/shatter(mob/user as mob) - if (user) - user.dust() - dump_contents() - visible_message("[src] shatters!.") - qdel(src) diff --git a/code/game/objects/structures/crates_lockers/closets/utility_closets.dm b/code/game/objects/structures/crates_lockers/closets/utility_closets.dm deleted file mode 100644 index d2d6bbb86a531..0000000000000 --- a/code/game/objects/structures/crates_lockers/closets/utility_closets.dm +++ /dev/null @@ -1,227 +0,0 @@ -/* Utility Closets - * Contains: - * Emergency Closet - * Fire Closet - * Tool Closet - * Radiation Closet - * Bombsuit Closet - * Hydrant - * First Aid - * Excavation Closet Away Site - * Shipping Supplies Closet - */ - -/* - * Emergency Closet - */ -/obj/structure/closet/emcloset - name = "emergency closet" - desc = "It's a storage unit for emergency breathmasks and o2 tanks." - closet_appearance = /decl/closet_appearance/oxygen - -/obj/structure/closet/emcloset/WillContain() - return list(/obj/item/tank/oxygen_emergency = 2, - /obj/item/clothing/mask/breath = 2, - /obj/item/storage/toolbox/emergency, - /obj/item/inflatable/wall = 2, - /obj/item/device/oxycandle, - /obj/item/storage/med_pouch/oxyloss = 2, - /obj/item/clothing/suit/space/emergency, - /obj/item/clothing/head/helmet/space/emergency - ) - -/* - * Fire Closet - */ -/obj/structure/closet/firecloset - name = "fire-safety closet" - desc = "It's a storage unit for fire-fighting supplies." - closet_appearance = /decl/closet_appearance/oxygen/fire - - -/obj/structure/closet/firecloset/WillContain() - return list( - /obj/item/storage/med_pouch/burn, - /obj/item/storage/backpack/dufflebag/firefighter, - /obj/item/clothing/mask/gas, - /obj/item/device/flashlight - ) - -/obj/structure/closet/firecloset/chief - -/obj/structure/closet/firecloset/chief/WillContain() - return list( - /obj/item/storage/med_pouch/burn, - /obj/item/clothing/suit/fire/firefighter, - /obj/item/clothing/mask/gas, - /obj/item/device/flashlight, - /obj/item/tank/oxygen_scba, - /obj/item/extinguisher, - /obj/item/clothing/head/hardhat/firefighter/Chief) - -/* - * Tool Closet - */ -/obj/structure/closet/toolcloset - name = "tool closet" - desc = "It's a storage unit for tools." - closet_appearance = /decl/closet_appearance/secure_closet/engineering/tools - -/obj/structure/closet/toolcloset/New() - ..() - if(prob(40)) - new /obj/item/clothing/suit/storage/hazardvest(src) - if(prob(70)) - new /obj/item/device/flashlight(src) - if(prob(70)) - new /obj/item/screwdriver(src) - if(prob(70)) - new /obj/item/wrench(src) - if(prob(70)) - new /obj/item/weldingtool(src) - if(prob(70)) - new /obj/item/crowbar(src) - if(prob(70)) - new /obj/item/wirecutters(src) - if(prob(70)) - new /obj/item/device/t_scanner(src) - if(prob(20)) - new /obj/item/storage/belt/utility(src) - if(prob(30)) - new /obj/item/stack/cable_coil/random(src) - if(prob(30)) - new /obj/item/stack/cable_coil/random(src) - if(prob(30)) - new /obj/item/stack/cable_coil/random(src) - if(prob(20)) - new /obj/item/device/multitool(src) - if(prob(5)) - new /obj/item/clothing/gloves/insulated(src) - if(prob(40)) - new /obj/item/clothing/head/hardhat(src) - - -/* - * Radiation Closet - */ -/obj/structure/closet/radiation - name = "radiation suit closet" - desc = "It's a storage unit for rad-protective suits." - closet_appearance = /decl/closet_appearance/secure_closet/engineering/tools/radiation - -/obj/structure/closet/radiation/WillContain() - return list( - /obj/item/storage/med_pouch/radiation = 2, - /obj/item/clothing/suit/radiation, - /obj/item/clothing/head/radiation, - /obj/item/clothing/suit/radiation, - /obj/item/clothing/head/radiation, - /obj/item/device/geiger = 2) - -/* - * Bombsuit closet - */ -/obj/structure/closet/bombcloset - name = "\improper EOD closet" - desc = "It's a storage unit for explosion-protective suits." - closet_appearance = /decl/closet_appearance/bomb - -/obj/structure/closet/bombcloset/WillContain() - return list( - /obj/item/clothing/suit/bomb_suit, - /obj/item/clothing/under/color/black, - /obj/item/clothing/shoes/black, - /obj/item/clothing/head/bomb_hood) - - -/obj/structure/closet/bombclosetsecurity - name = "\improper EOD closet" - desc = "It's a storage unit for explosion-protective suits." - closet_appearance = /decl/closet_appearance/bomb/security - -/obj/structure/closet/bombclosetsecurity/WillContain() - return list( - /obj/item/clothing/suit/bomb_suit/security, - /obj/item/clothing/under/rank/security, - /obj/item/clothing/shoes/brown, - /obj/item/clothing/head/bomb_hood/security) - -/* - * Hydrant - */ -/obj/structure/closet/hydrant //wall mounted fire closet - name = "fire-safety closet" - desc = "It's a storage unit for fire-fighting supplies." - closet_appearance = /decl/closet_appearance/wall/hydrant - anchored = TRUE - density = FALSE - wall_mounted = TRUE - storage_types = CLOSET_STORAGE_ITEMS - setup = 0 - -/obj/structure/closet/hydrant/WillContain() - return list( - /obj/item/inflatable/door = 2, - /obj/item/storage/med_pouch/burn = 2, - /obj/item/clothing/mask/gas/half, - /obj/item/storage/backpack/dufflebag/firefighter - ) - -/* - * First Aid - */ -/obj/structure/closet/medical_wall //wall mounted medical closet - name = "first-aid closet" - desc = "It's a wall-mounted storage unit for first aid supplies." - closet_appearance = /decl/closet_appearance/wall/medical - anchored = TRUE - density = FALSE - wall_mounted = TRUE - storage_types = CLOSET_STORAGE_ITEMS - setup = 0 - -/obj/structure/closet/medical_wall/filled/WillContain() - return list( - /obj/random/firstaid, - /obj/random/medical/lite = 12) - -/obj/structure/closet/toolcloset/excavation/awaysite //no teleport beacons - name = "excavation equipment closet" - desc = "It's a storage unit for excavation equipment." - closet_appearance = /decl/closet_appearance/secure_closet/engineering/tools - -/obj/structure/closet/toolcloset/excavation/awaysite/WillContain() - return list( - /obj/item/storage/belt/archaeology, - /obj/item/storage/excavation, - /obj/item/device/flashlight/lantern, - /obj/item/device/ano_scanner, - /obj/item/device/depth_scanner, - /obj/item/device/core_sampler, - /obj/item/device/gps, - /obj/item/pinpointer/radio, - /obj/item/clothing/glasses/meson, - /obj/item/clothing/glasses/science, - /obj/item/pickaxe, - /obj/item/device/measuring_tape, - /obj/item/pickaxe/xeno/hand, - /obj/item/storage/bag/fossils, - /obj/item/hand_labeler, - /obj/item/device/spaceflare - ) - -/obj/structure/closet/shipping_wall - name = "shipping supplies closet" - desc = "It's a wall-mounted storage unit containing supplies for preparing shipments." - closet_appearance = /decl/closet_appearance/wall/shipping - anchored = TRUE - density = FALSE - wall_mounted = TRUE - storage_types = CLOSET_STORAGE_ITEMS - setup = 0 - -/obj/structure/closet/shipping_wall/filled/WillContain() - return list( - /obj/item/stack/material/cardboard/ten, - /obj/item/device/destTagger, - /obj/item/stack/package_wrap/twenty_five) diff --git a/code/game/objects/structures/crates_lockers/closets/walllocker.dm b/code/game/objects/structures/crates_lockers/closets/walllocker.dm deleted file mode 100644 index d511861c94ce1..0000000000000 --- a/code/game/objects/structures/crates_lockers/closets/walllocker.dm +++ /dev/null @@ -1,57 +0,0 @@ -//added by cael from old bs12 -//not sure if there's an immediate place for secure wall lockers, but i'm sure the players will think of something - -/obj/structure/closet/walllocker - desc = "A wall mounted storage locker." - name = "Wall Locker" - closet_appearance = /decl/closet_appearance/wall - density = FALSE - anchored = TRUE - wall_mounted = TRUE - storage_types = CLOSET_STORAGE_ITEMS - setup = 0 - -//spawns endless (3 sets) amounts of breathmask, emergency oxy tank and crowbar - -/obj/structure/closet/walllocker/emerglocker - name = "emergency locker" - desc = "A wall mounted locker with emergency supplies." - var/list/spawnitems = list(/obj/item/tank/oxygen_emergency,/obj/item/clothing/mask/breath) - var/amount = 2 // spawns each items X times. - closet_appearance = /decl/closet_appearance/wall/emergency - -/obj/structure/closet/walllocker/emerglocker/toggle(mob/user as mob) - src.attack_hand(user) - return - -/obj/structure/closet/walllocker/emerglocker/attackby(obj/item/W as obj, mob/user as mob) - return - -/obj/structure/closet/walllocker/emerglocker/attack_hand(mob/user as mob) - if (istype(user, /mob/living/silicon/ai)) //Added by Strumpetplaya - AI shouldn't be able to - return //activate emergency lockers. This fixes that. (Does this make sense, the AI can't call attack_hand, can it? --Mloc) - if(!amount) - to_chat(usr, "It's empty..") - return - if(amount) - to_chat(usr, "You take out some items from \the [src].") - for(var/path in spawnitems) - new path(src.loc) - amount-- - return - -/obj/structure/closet/walllocker/emerglocker/north - pixel_y = 32 - dir = SOUTH - -/obj/structure/closet/walllocker/emerglocker/south - pixel_y = -32 - dir = NORTH - -/obj/structure/closet/walllocker/emerglocker/west - pixel_x = -32 - dir = WEST - -/obj/structure/closet/walllocker/emerglocker/east - pixel_x = 32 - dir = EAST diff --git a/code/game/objects/structures/crates_lockers/closets/wardrobe.dm b/code/game/objects/structures/crates_lockers/closets/wardrobe.dm deleted file mode 100644 index e66c0814db77f..0000000000000 --- a/code/game/objects/structures/crates_lockers/closets/wardrobe.dm +++ /dev/null @@ -1,401 +0,0 @@ -/obj/structure/closet/wardrobe - name = "wardrobe" - desc = "It's a storage unit for standard-issue attire." - closet_appearance = /decl/closet_appearance/wardrobe - -/obj/structure/closet/wardrobe/red - name = "security wardrobe" - closet_appearance = /decl/closet_appearance/wardrobe/red - -/obj/structure/closet/wardrobe/red/New() - ..() - new /obj/item/clothing/under/rank/security(src) - new /obj/item/clothing/under/rank/security(src) - new /obj/item/clothing/under/rank/security(src) - new /obj/item/clothing/under/rank/security2(src) - new /obj/item/clothing/under/rank/security2(src) - new /obj/item/clothing/under/rank/security2(src) - new /obj/item/clothing/shoes/jackboots(src) - new /obj/item/clothing/shoes/jackboots(src) - new /obj/item/clothing/shoes/jackboots(src) - new /obj/item/clothing/head/soft/sec(src) - new /obj/item/clothing/head/soft/sec(src) - new /obj/item/clothing/head/soft/sec(src) - new /obj/item/clothing/head/beret/sec(src) - new /obj/item/clothing/head/beret/sec(src) - new /obj/item/clothing/head/beret/sec(src) - new /obj/item/clothing/head/beret/sec/corporate/officer(src) - new /obj/item/clothing/head/beret/sec/corporate/officer(src) - new /obj/item/clothing/head/beret/sec/corporate/officer(src) - -/obj/structure/closet/wardrobe/pink - name = "pink wardrobe" - closet_appearance = /decl/closet_appearance/wardrobe/pink - - -/obj/structure/closet/wardrobe/pink/New() - ..() - new /obj/item/clothing/under/color/pink(src) - new /obj/item/clothing/under/color/pink(src) - new /obj/item/clothing/under/color/pink(src) - new /obj/item/clothing/shoes/brown(src) - new /obj/item/clothing/shoes/brown(src) - new /obj/item/clothing/shoes/brown(src) - -/obj/structure/closet/wardrobe/black - name = "black wardrobe" - closet_appearance = /decl/closet_appearance/wardrobe/black - -/obj/structure/closet/wardrobe/black/New() - ..() - new /obj/item/clothing/under/color/black(src) - new /obj/item/clothing/under/color/black(src) - new /obj/item/clothing/under/color/black(src) - new /obj/item/clothing/shoes/black(src) - new /obj/item/clothing/shoes/black(src) - new /obj/item/clothing/shoes/black(src) - new /obj/item/clothing/head/that(src) - new /obj/item/clothing/head/that(src) - new /obj/item/clothing/head/that(src) - new /obj/item/clothing/head/soft/black(src) - new /obj/item/clothing/head/soft/black(src) - new /obj/item/clothing/head/soft/black(src) - -/obj/structure/closet/wardrobe/chaplain_black - name = "chapel wardrobe" - desc = "It's a storage unit for approved religious attire." - closet_appearance = /decl/closet_appearance/wardrobe/black - -/obj/structure/closet/wardrobe/chaplain_black/New() - ..() - new /obj/item/clothing/under/rank/chaplain(src) - new /obj/item/clothing/shoes/black(src) - new /obj/item/clothing/suit/nun(src) - new /obj/item/clothing/head/nun_hood(src) - new /obj/item/clothing/suit/chaplain_hoodie(src) - new /obj/item/clothing/head/chaplain_hood(src) - new /obj/item/clothing/suit/holidaypriest(src) - new /obj/item/clothing/under/wedding/bride_white(src) - new /obj/item/storage/backpack/cultpack (src) - new /obj/item/storage/candle_box(src) - new /obj/item/storage/candle_box(src) - new /obj/item/deck/tarot(src) - -/obj/structure/closet/wardrobe/green - name = "green wardrobe" - closet_appearance = /decl/closet_appearance/wardrobe/green - -/obj/structure/closet/wardrobe/green/New() - ..() - new /obj/item/clothing/under/color/green(src) - new /obj/item/clothing/under/color/green(src) - new /obj/item/clothing/under/color/green(src) - new /obj/item/clothing/shoes/black(src) - new /obj/item/clothing/shoes/black(src) - new /obj/item/clothing/shoes/black(src) - -/obj/structure/closet/wardrobe/xenos - name = "xenos wardrobe" - closet_appearance = /decl/closet_appearance/wardrobe/green - -/obj/structure/closet/wardrobe/xenos/New() - ..() - new /obj/item/clothing/suit/unathi/mantle(src) - new /obj/item/clothing/suit/unathi/robe(src) - new /obj/item/clothing/shoes/sandal(src) - new /obj/item/clothing/shoes/sandal(src) - new /obj/item/clothing/shoes/sandal(src) - -/obj/structure/closet/wardrobe/orange - name = "prison wardrobe" - desc = "It's a storage unit for regulation prisoner attire." - closet_appearance = /decl/closet_appearance/wardrobe/orange - -/obj/structure/closet/wardrobe/orange/New() - ..() - new /obj/item/clothing/under/color/orange(src) - new /obj/item/clothing/under/color/orange(src) - new /obj/item/clothing/under/color/orange(src) - new /obj/item/clothing/shoes/orange(src) - new /obj/item/clothing/shoes/orange(src) - new /obj/item/clothing/shoes/orange(src) - new /obj/item/device/radio/headset(src) - new /obj/item/device/radio/headset(src) - new /obj/item/device/radio/headset(src) - -/obj/structure/closet/wardrobe/yellow - name = "yellow wardrobe" - closet_appearance = /decl/closet_appearance/wardrobe/yellow - -/obj/structure/closet/wardrobe/yellow/New() - ..() - new /obj/item/clothing/under/color/yellow(src) - new /obj/item/clothing/under/color/yellow(src) - new /obj/item/clothing/under/color/yellow(src) - new /obj/item/clothing/shoes/orange(src) - new /obj/item/clothing/shoes/orange(src) - new /obj/item/clothing/shoes/orange(src) - -/obj/structure/closet/wardrobe/atmospherics_yellow - name = "atmospherics wardrobe" - closet_appearance = /decl/closet_appearance/wardrobe/yellow - -/obj/structure/closet/wardrobe/atmospherics_yellow/New() - ..() - new /obj/item/clothing/under/rank/atmospheric_technician(src) - new /obj/item/clothing/under/rank/atmospheric_technician(src) - new /obj/item/clothing/under/rank/atmospheric_technician(src) - new /obj/item/clothing/shoes/workboots(src) - new /obj/item/clothing/shoes/workboots(src) - new /obj/item/clothing/shoes/workboots(src) - new /obj/item/clothing/head/hardhat/red(src) - new /obj/item/clothing/head/hardhat/red(src) - new /obj/item/clothing/head/hardhat/red(src) - new /obj/item/clothing/head/beret/engineering(src) - new /obj/item/clothing/head/beret/engineering(src) - new /obj/item/clothing/head/beret/engineering(src) - -/obj/structure/closet/wardrobe/engineering_yellow - name = "engineering wardrobe" - closet_appearance = /decl/closet_appearance/wardrobe/yellow - -/obj/structure/closet/wardrobe/engineering_yellow/New() - ..() - new /obj/item/clothing/under/rank/engineer(src) - new /obj/item/clothing/under/rank/engineer(src) - new /obj/item/clothing/under/rank/engineer(src) - new /obj/item/clothing/shoes/workboots(src) - new /obj/item/clothing/shoes/workboots(src) - new /obj/item/clothing/shoes/workboots(src) - new /obj/item/clothing/head/hardhat(src) - new /obj/item/clothing/head/hardhat(src) - new /obj/item/clothing/head/hardhat(src) - new /obj/item/clothing/head/beret/engineering(src) - new /obj/item/clothing/head/beret/engineering(src) - new /obj/item/clothing/head/beret/engineering(src) - -/obj/structure/closet/wardrobe/white - name = "white wardrobe" - closet_appearance = /decl/closet_appearance/wardrobe/white - -/obj/structure/closet/wardrobe/white/New() - ..() - new /obj/item/clothing/under/color/white(src) - new /obj/item/clothing/under/color/white(src) - new /obj/item/clothing/under/color/white(src) - new /obj/item/clothing/shoes/white(src) - new /obj/item/clothing/shoes/white(src) - new /obj/item/clothing/shoes/white(src) - -/obj/structure/closet/wardrobe/pjs - name = "pajama wardrobe" - closet_appearance = /decl/closet_appearance/wardrobe/white - -/obj/structure/closet/wardrobe/pjs/New() - ..() - new /obj/item/clothing/under/pj/red(src) - new /obj/item/clothing/under/pj/red(src) - new /obj/item/clothing/under/pj/blue(src) - new /obj/item/clothing/under/pj/blue(src) - new /obj/item/clothing/shoes/white(src) - new /obj/item/clothing/shoes/white(src) - new /obj/item/clothing/shoes/slippers(src) - new /obj/item/clothing/shoes/slippers(src) - -/obj/structure/closet/wardrobe/science_white - name = "science wardrobe" - closet_appearance = /decl/closet_appearance/wardrobe/white - -/obj/structure/closet/wardrobe/science_white/New() - ..() - new /obj/item/clothing/under/rank/scientist(src) - new /obj/item/clothing/under/rank/scientist(src) - new /obj/item/clothing/under/rank/scientist(src) - new /obj/item/clothing/suit/storage/toggle/labcoat(src) - new /obj/item/clothing/suit/storage/toggle/labcoat(src) - new /obj/item/clothing/suit/storage/toggle/labcoat(src) - new /obj/item/clothing/shoes/white(src) - new /obj/item/clothing/shoes/white(src) - new /obj/item/clothing/shoes/white(src) - -/obj/structure/closet/wardrobe/robotics_black - name = "robotics wardrobe" - closet_appearance = /decl/closet_appearance/wardrobe/black - -/obj/structure/closet/wardrobe/robotics_black/New() - ..() - new /obj/item/clothing/under/rank/roboticist(src) - new /obj/item/clothing/under/rank/roboticist(src) - new /obj/item/clothing/suit/storage/toggle/labcoat(src) - new /obj/item/clothing/suit/storage/toggle/labcoat(src) - new /obj/item/clothing/shoes/black(src) - new /obj/item/clothing/shoes/black(src) - new /obj/item/clothing/gloves/thick(src) - new /obj/item/clothing/gloves/thick(src) - -/obj/structure/closet/wardrobe/chemistry_white - name = "chemistry wardrobe" - closet_appearance = /decl/closet_appearance/wardrobe/white - -/obj/structure/closet/wardrobe/chemistry_white/New() - ..() - new /obj/item/clothing/under/rank/chemist(src) - new /obj/item/clothing/under/rank/chemist(src) - new /obj/item/clothing/shoes/white(src) - new /obj/item/clothing/shoes/white(src) - new /obj/item/clothing/suit/storage/toggle/labcoat/chemist(src) - new /obj/item/clothing/suit/storage/toggle/labcoat/chemist(src) - -/obj/structure/closet/wardrobe/genetics_white - name = "genetics wardrobe" - closet_appearance = /decl/closet_appearance/wardrobe/white - -/obj/structure/closet/wardrobe/genetics_white/New() - ..() - new /obj/item/clothing/under/rank/geneticist(src) - new /obj/item/clothing/under/rank/geneticist(src) - new /obj/item/clothing/shoes/white(src) - new /obj/item/clothing/shoes/white(src) - new /obj/item/clothing/suit/storage/toggle/labcoat/genetics(src) - new /obj/item/clothing/suit/storage/toggle/labcoat/genetics(src) - -/obj/structure/closet/wardrobe/virology_white - name = "virology wardrobe" - closet_appearance = /decl/closet_appearance/wardrobe/white - -/obj/structure/closet/wardrobe/virology_white/New() - ..() - new /obj/item/clothing/under/rank/virologist(src) - new /obj/item/clothing/under/rank/virologist(src) - new /obj/item/clothing/shoes/white(src) - new /obj/item/clothing/shoes/white(src) - new /obj/item/clothing/suit/storage/toggle/labcoat/virologist(src) - new /obj/item/clothing/suit/storage/toggle/labcoat/virologist(src) - new /obj/item/clothing/mask/surgical(src) - new /obj/item/clothing/mask/surgical(src) - -/obj/structure/closet/wardrobe/medic_white - name = "medical wardrobe" - closet_appearance = /decl/closet_appearance/wardrobe/white - -/obj/structure/closet/wardrobe/medic_white/New() - ..() - new /obj/item/clothing/under/rank/medical(src) - new /obj/item/clothing/under/rank/medical(src) - new /obj/item/clothing/under/rank/medical/scrubs/blue(src) - new /obj/item/clothing/under/rank/medical/scrubs/green(src) - new /obj/item/clothing/under/rank/medical/scrubs/purple(src) - new /obj/item/clothing/under/rank/medical/scrubs/black(src) - new /obj/item/clothing/under/rank/medical/scrubs/navyblue(src) - new /obj/item/clothing/head/surgery/navyblue(src) - new /obj/item/clothing/head/surgery/purple(src) - new /obj/item/clothing/head/surgery/blue(src) - new /obj/item/clothing/head/surgery/green(src) - new /obj/item/clothing/head/surgery/black(src) - new /obj/item/clothing/shoes/white(src) - new /obj/item/clothing/shoes/white(src) - new /obj/item/clothing/suit/storage/toggle/labcoat(src) - new /obj/item/clothing/suit/storage/toggle/labcoat(src) - new /obj/item/clothing/mask/surgical(src) - new /obj/item/clothing/mask/surgical(src) - -/obj/structure/closet/wardrobe/grey - name = "grey wardrobe" - closet_appearance = /decl/closet_appearance/wardrobe/grey - -/obj/structure/closet/wardrobe/grey/New() - ..() - new /obj/item/clothing/under/color/grey(src) - new /obj/item/clothing/under/color/grey(src) - new /obj/item/clothing/under/color/grey(src) - new /obj/item/clothing/shoes/black(src) - new /obj/item/clothing/shoes/black(src) - new /obj/item/clothing/shoes/black(src) - new /obj/item/clothing/head/soft/grey(src) - new /obj/item/clothing/head/soft/grey(src) - new /obj/item/clothing/head/soft/grey(src) - -/obj/structure/closet/wardrobe/mixed - name = "mixed wardrobe" - closet_appearance = /decl/closet_appearance/wardrobe/mixed - -/obj/structure/closet/wardrobe/mixed/New() - ..() - new /obj/item/clothing/under/color/blue(src) - new /obj/item/clothing/under/color/yellow(src) - new /obj/item/clothing/under/color/green(src) - new /obj/item/clothing/under/color/orange(src) - new /obj/item/clothing/under/color/pink(src) - new /obj/item/clothing/under/dress/plaid_blue(src) - new /obj/item/clothing/under/dress/plaid_red(src) - new /obj/item/clothing/under/dress/plaid_purple(src) - new /obj/item/clothing/shoes/blue(src) - new /obj/item/clothing/shoes/yellow(src) - new /obj/item/clothing/shoes/green(src) - new /obj/item/clothing/shoes/orange(src) - new /obj/item/clothing/shoes/purple(src) - new /obj/item/clothing/shoes/red(src) - new /obj/item/clothing/shoes/leather(src) - new /obj/item/clothing/accessory/toggleable/hawaii/random(src) - -/obj/structure/closet/wardrobe/tactical - name = "tactical equipment" - closet_appearance = /decl/closet_appearance/tactical - -/obj/structure/closet/wardrobe/tactical/New() - ..() - new /obj/item/clothing/under/tactical(src) - new /obj/item/clothing/suit/storage/vest/tactical(src) - new /obj/item/clothing/head/helmet/tactical(src) - new /obj/item/clothing/mask/balaclava/tactical(src) - new /obj/item/clothing/glasses/tacgoggles(src) - new /obj/item/storage/belt/holster/security/tactical(src) - new /obj/item/clothing/shoes/tactical(src) - new /obj/item/clothing/gloves/tactical(src) - -/obj/structure/closet/wardrobe/suit - name = "formal clothing locker" - closet_appearance = /decl/closet_appearance/wardrobe/mixed - -/obj/structure/closet/wardrobe/suit/New() - ..() - new /obj/item/clothing/under/suit_jacket/charcoal(src) - new /obj/item/clothing/under/suit_jacket/navy(src) - new /obj/item/clothing/under/suit_jacket/burgundy(src) - new /obj/item/clothing/under/suit_jacket/checkered(src) - new /obj/item/clothing/under/suit_jacket/tan(src) - new /obj/item/clothing/under/sl_suit(src) - new /obj/item/clothing/under/suit_jacket(src) - new /obj/item/clothing/under/suit_jacket/female(src) - new /obj/item/clothing/under/suit_jacket/really_black(src) - new /obj/item/clothing/under/suit_jacket/red(src) - new /obj/item/clothing/under/scratch(src) - new /obj/item/clothing/under/rank/internalaffairs/plain(src) - new /obj/item/clothing/suit/storage/toggle/suit/black(src) - new /obj/item/clothing/under/assistantformal(src) - new /obj/item/clothing/under/lawyer/female(src) - new /obj/item/clothing/under/lawyer/black(src) - new /obj/item/clothing/under/lawyer/red(src) - new /obj/item/clothing/under/lawyer/bluesuit(src) - new /obj/item/clothing/suit/storage/toggle/suit/blue(src) - new /obj/item/clothing/under/lawyer/purpsuit(src) - new /obj/item/clothing/suit/storage/toggle/suit/purple(src) - new /obj/item/clothing/shoes/brown(src) - new /obj/item/clothing/shoes/laceup(src) - -/obj/structure/closet/wardrobe/lawyer_black - name = "internal affairs wardrobe" - closet_appearance = /decl/closet_appearance/wardrobe/black - -/obj/structure/closet/wardrobe/lawyer_black/New() - ..() - new /obj/item/clothing/under/rank/internalaffairs(src) - new /obj/item/clothing/under/rank/internalaffairs(src) - new /obj/item/clothing/suit/storage/toggle/suit/black(src) - new /obj/item/clothing/suit/storage/toggle/suit/black(src) - new /obj/item/clothing/shoes/brown(src) - new /obj/item/clothing/shoes/brown(src) - new /obj/item/clothing/glasses/sunglasses/big(src) - new /obj/item/clothing/glasses/sunglasses/big(src) - new /obj/item/storage/briefcase(src) - new /obj/item/storage/briefcase(src) diff --git a/code/game/objects/structures/crates_lockers/crates.dm b/code/game/objects/structures/crates_lockers/crates.dm deleted file mode 100644 index 09bfc128af84d..0000000000000 --- a/code/game/objects/structures/crates_lockers/crates.dm +++ /dev/null @@ -1,293 +0,0 @@ -/obj/structure/closet/crate - name = "crate" - desc = "A rectangular steel crate." - closet_appearance = /decl/closet_appearance/crate - atom_flags = ATOM_FLAG_NO_TEMP_CHANGE | ATOM_FLAG_CLIMBABLE - setup = 0 - storage_types = CLOSET_STORAGE_ITEMS - var/points_per_crate = 5 - var/rigged = 0 - -/obj/structure/closet/crate/open() - if((atom_flags & ATOM_FLAG_OPEN_CONTAINER) && !opened && can_open()) - object_shaken() - . = ..() - if(.) - if(rigged) - visible_message("There are wires attached to the lid of [src]...") - for(var/obj/item/device/assembly_holder/H in src) - H.process_activation(usr) - for(var/obj/item/device/assembly/A in src) - A.activate() - -/obj/structure/closet/crate/examine(mob/user) - . = ..() - if(rigged && opened) - var/list/devices = list() - for(var/obj/item/device/assembly_holder/H in src) - devices += H - for(var/obj/item/device/assembly/A in src) - devices += A - to_chat(user,"There are some wires attached to the lid, connected to [english_list(devices)].") - -/obj/structure/closet/crate/attackby(obj/item/W as obj, mob/user as mob) - if(opened) - return ..() - else if(istype(W, /obj/item/stack/package_wrap)) - return - else if(istype(W, /obj/item/stack/cable_coil)) - var/obj/item/stack/cable_coil/C = W - if(rigged) - to_chat(user, "[src] is already rigged!") - return - if (C.use(1)) - to_chat(user, "You rig [src].") - rigged = 1 - return - else if(istype(W, /obj/item/device/assembly_holder) || istype(W, /obj/item/device/assembly)) - if(rigged) - if(!user.unEquip(W, src)) - return - to_chat(user, "You attach [W] to [src].") - return - else if(isWirecutter(W)) - if(rigged) - to_chat(user, "You cut away the wiring.") - playsound(loc, 'sound/items/Wirecutter.ogg', 100, 1) - rigged = 0 - return - else - return ..() - -/obj/structure/closet/crate/secure - desc = "A secure crate." - name = "Secure crate" - closet_appearance = /decl/closet_appearance/crate/secure - setup = CLOSET_HAS_LOCK - locked = TRUE - -/obj/structure/closet/crate/secure/Initialize() - . = ..() - update_icon() - -/obj/structure/closet/crate/plastic - name = "plastic crate" - desc = "A rectangular plastic crate." - points_per_crate = 1 - closet_appearance = /decl/closet_appearance/crate/plastic - material = MATERIAL_PLASTIC - -/obj/structure/closet/crate/internals - name = "internals crate" - desc = "A internals crate." - -/obj/structure/closet/crate/internals/fuel - name = "\improper Fuel tank crate" - desc = "A fuel tank crate." - -/obj/structure/closet/crate/internals/fuel/WillContain() - return list(/obj/item/tank/hydrogen = 4) - -/obj/structure/closet/crate/trashcart - name = "trash cart" - desc = "A heavy, metal trashcart with wheels." - closet_appearance = /decl/closet_appearance/cart/trash - -/obj/structure/closet/crate/medical - name = "medical crate" - desc = "A medical crate." - closet_appearance = /decl/closet_appearance/crate/medical - -/obj/structure/closet/crate/rcd - name = "\improper RCD crate" - desc = "A crate with rapid construction device." - -/obj/structure/closet/crate/rcd/WillContain() - return list( - /obj/item/rcd_ammo = 3, - /obj/item/rcd - ) - -/obj/structure/closet/crate/solar - name = "solar pack crate" - -/obj/structure/closet/crate/solar/WillContain() - return list( - /obj/item/solar_assembly = 14, - /obj/item/stock_parts/circuitboard/solar_control, - /obj/item/tracker_electronics, - /obj/item/paper/solar - ) - -/obj/structure/closet/crate/solar_assembly - name = "solar assembly crate" - -/obj/structure/closet/crate/solar_assembly/WillContain() - return list(/obj/item/solar_assembly = 16) - -/obj/structure/closet/crate/freezer - name = "freezer" - desc = "A freezer." - temperature = -16 CELSIUS - closet_appearance = /decl/closet_appearance/crate/freezer - - var/target_temp = T0C - 40 - var/cooling_power = 40 - -/obj/structure/closet/crate/freezer/return_air() - var/datum/gas_mixture/gas = (..()) - if(!gas) return null - var/datum/gas_mixture/newgas = new/datum/gas_mixture() - newgas.copy_from(gas) - if(newgas.temperature <= target_temp) return - - if((newgas.temperature - cooling_power) > target_temp) - newgas.temperature -= cooling_power - else - newgas.temperature = target_temp - return newgas - -/obj/structure/closet/crate/freezer/ProcessAtomTemperature() - return PROCESS_KILL - -/obj/structure/closet/crate/freezer/rations //For use in the escape shuttle - name = "emergency rations" - desc = "A crate of emergency rations." - -/obj/structure/closet/crate/freezer/rations/WillContain() - return list(/obj/random/mre = 6, /obj/item/reagent_containers/food/drinks/cans/waterbottle = 12) - -/obj/structure/closet/crate/freezer/meat - name = "meat crate" - desc = "A crate of meat." - -/obj/structure/closet/crate/freezer/meat/WillContain() - return list( - /obj/item/reagent_containers/food/snacks/meat/beef = 4, - /obj/item/reagent_containers/food/snacks/meat/syntiflesh = 4, - /obj/random/fish = 8 - ) - -/obj/structure/closet/crate/bin - name = "large bin" - desc = "A large bin." - -/obj/structure/closet/crate/radiation - name = "radioactive crate" - desc = "A leadlined crate with a radiation sign on it." - closet_appearance = /decl/closet_appearance/crate/radiation - -/obj/structure/closet/crate/radiation_gear - name = "radioactive gear crate" - desc = "A crate with a radiation sign on it." - closet_appearance = /decl/closet_appearance/crate/radiation - -/obj/structure/closet/crate/radiation_gear/WillContain() - return list(/obj/item/clothing/suit/radiation = 8) - -/obj/structure/closet/crate/secure/weapon - name = "weapons crate" - desc = "A secure weapons crate." - closet_appearance = /decl/closet_appearance/crate/secure/weapon - -/obj/structure/closet/crate/secure/phoron - name = "phoron crate" - desc = "A secure phoron crate." - closet_appearance = /decl/closet_appearance/crate/secure/hazard - -/obj/structure/closet/crate/secure/shuttle - name = "storage compartment" - desc = "A secure storage compartment bolted to the floor, to secure loose objects on Zero-G flights." - anchored = TRUE - closet_appearance = /decl/closet_appearance/crate/secure/shuttle - -/obj/structure/closet/crate/secure/gear - name = "gear crate" - desc = "A secure gear crate." - closet_appearance = /decl/closet_appearance/crate/secure/weapon - -/obj/structure/closet/crate/secure/hydrosec - name = "secure hydroponics crate" - desc = "A crate with a lock on it, painted in the scheme of botany and botanists." - closet_appearance = /decl/closet_appearance/crate/secure/hydroponics - -/obj/structure/closet/crate/large - name = "large crate" - desc = "A hefty metal crate." - storage_capacity = 2 * MOB_LARGE - storage_types = CLOSET_STORAGE_ITEMS|CLOSET_STORAGE_STRUCTURES - closet_appearance = /decl/closet_appearance/large_crate - -/obj/structure/closet/crate/large/hydroponics - closet_appearance = /decl/closet_appearance/large_crate/hydroponics - -/obj/structure/closet/crate/secure/large - name = "large crate" - desc = "A hefty metal crate with an electronic locking system." - closet_appearance = /decl/closet_appearance/large_crate/secure - - storage_capacity = 2 * MOB_LARGE - storage_types = CLOSET_STORAGE_ITEMS|CLOSET_STORAGE_STRUCTURES - -/obj/structure/closet/crate/secure/large/phoron - closet_appearance = /decl/closet_appearance/large_crate/secure/hazard - -//fluff variant -/obj/structure/closet/crate/secure/large/reinforced - desc = "A hefty, reinforced metal crate with an electronic locking system." - -/obj/structure/closet/crate/hydroponics - name = "hydroponics crate" - desc = "All you need to destroy those pesky weeds and pests." - closet_appearance = /decl/closet_appearance/crate/hydroponics - -/obj/structure/closet/crate/hydroponics/prespawned/WillContain() - return list( - /obj/item/reagent_containers/spray/plantbgone = 2, - /obj/item/material/minihoe = 2, - /obj/item/storage/plants = 2, - /obj/item/material/hatchet = 2, - /obj/item/wirecutters/clippers = 2, - /obj/item/device/scanner/plant = 2 - ) - -/obj/structure/closet/crate/secure/biohazard - name = "biohazard cart" - desc = "A heavy cart with extensive sealing. You shouldn't eat things you find in it." - open_sound = 'sound/items/Deconstruct.ogg' - close_sound = 'sound/items/Deconstruct.ogg' - req_access = list(access_xenobiology) - closet_appearance = /decl/closet_appearance/cart/biohazard - storage_capacity = 2 * MOB_LARGE - storage_types = CLOSET_STORAGE_ITEMS|CLOSET_STORAGE_MOBS|CLOSET_STORAGE_STRUCTURES - -/obj/structure/closet/crate/secure/biohazard/blanks/WillContain() - return list(/obj/structure/closet/body_bag/cryobag/blank) - -/obj/structure/closet/crate/secure/biohazard/blanks/can_close() - for(var/obj/structure/closet/closet in get_turf(src)) - if(closet != src && !(istype(closet, /obj/structure/closet/body_bag/cryobag))) - return 0 - return 1 - -/obj/structure/closet/crate/secure/biohazard/alt - name = "biowaste disposal cart" - desc = "A heavy cart used for organ disposal with markings indicating the things inside are probably gross." - req_access = list(access_surgery) - closet_appearance = /decl/closet_appearance/cart/biohazard/alt - -/obj/structure/closet/crate/paper_refill - name = "paper refill crate" - desc = "A rectangular plastic crate, filled up with blank papers for refilling bins and printers. A bureaucrat's favorite." - material = MATERIAL_PLASTIC - -/obj/structure/closet/crate/paper_refill/WillContain() - return list(/obj/item/paper = 30) - -/obj/structure/closet/crate/uranium - name = "fissibles crate" - desc = "A crate with a radiation sign on it." - closet_appearance = /decl/closet_appearance/crate/radiation - -/obj/structure/closet/crate/uranium/WillContain() - return list(/obj/item/stack/material/uranium/ten = 5) diff --git a/code/game/objects/structures/crates_lockers/largecrate.dm b/code/game/objects/structures/crates_lockers/largecrate.dm deleted file mode 100644 index 8dfd463f4b76c..0000000000000 --- a/code/game/objects/structures/crates_lockers/largecrate.dm +++ /dev/null @@ -1,77 +0,0 @@ -/obj/structure/largecrate - name = "large crate" - desc = "A hefty wooden crate." - icon = 'icons/obj/shipping_crates.dmi' - icon_state = "densecrate" - density = TRUE - atom_flags = ATOM_FLAG_NO_TEMP_CHANGE | ATOM_FLAG_CLIMBABLE - -/obj/structure/largecrate/Initialize() - . = ..() - for(var/obj/I in src.loc) - if(I.density || I.anchored || I == src || !I.simulated) - continue - I.forceMove(src) - -/obj/structure/largecrate/attack_hand(mob/user as mob) - to_chat(user, "You need a crowbar to pry this open!") - return - -/obj/structure/largecrate/attackby(obj/item/W as obj, mob/user as mob) - if(isCrowbar(W)) - new /obj/item/stack/material/wood(src) - var/turf/T = get_turf(src) - for(var/atom/movable/AM in contents) - if(AM.simulated) AM.forceMove(T) - user.visible_message("[user] pries \the [src] open.", \ - "You pry open \the [src].", \ - "You hear splitting wood.") - qdel(src) - else - return attack_hand(user) - -/obj/structure/largecrate/mule - name = "MULE crate" - -/obj/structure/largecrate/animal - icon_state = "mulecrate" - var/held_count = 1 - var/held_type - -/obj/structure/largecrate/animal/New() - ..() - if(held_type) - for(var/i = 1;i<=held_count;i++) - new held_type(src) - -/obj/structure/largecrate/animal/mulebot - name = "Mulebot crate" - held_type = /mob/living/bot/mulebot - -/obj/structure/largecrate/animal/corgi - name = "corgi carrier" - held_type = /mob/living/simple_animal/passive/corgi - -/obj/structure/largecrate/animal/cow - name = "cow crate" - held_type = /mob/living/simple_animal/passive/cow - -/obj/structure/largecrate/animal/goat - name = "goat crate" - held_type = /mob/living/simple_animal/hostile/retaliate/goat - -/obj/structure/largecrate/animal/goose - name = "goose containment unit" - held_type = /mob/living/simple_animal/hostile/retaliate/goose - -/obj/structure/largecrate/animal/cat - name = "cat carrier" - held_type = /mob/living/simple_animal/passive/cat - -/obj/structure/largecrate/animal/cat/bones - held_type = /mob/living/simple_animal/passive/cat/fluff/bones - -/obj/structure/largecrate/animal/chick - name = "chicken crate" - held_count = 5 - held_type = /mob/living/simple_animal/passive/chick diff --git a/code/game/objects/structures/crates_lockers/med_crate.dm b/code/game/objects/structures/crates_lockers/med_crate.dm deleted file mode 100644 index 7a246a8d875e1..0000000000000 --- a/code/game/objects/structures/crates_lockers/med_crate.dm +++ /dev/null @@ -1,50 +0,0 @@ -/obj/structure/closet/crate/med_crate/trauma - name = "\improper Trauma crate" - desc = "A crate with trauma equipment." - closet_appearance = /decl/closet_appearance/crate/medical/trauma - -/obj/structure/closet/crate/med_crate/trauma/WillContain() - return list( - /obj/item/stack/medical/splint = 2, - /obj/item/stack/medical/advanced/bruise_pack = 10, - /obj/item/reagent_containers/pill/sugariron = 6, - /obj/item/storage/pill_bottle/paracetamol = 2, - /obj/item/storage/pill_bottle/inaprovaline - ) - -/obj/structure/closet/crate/med_crate/burn - name = "\improper Burn crate" - desc = "A crate with burn equipment." - closet_appearance = /decl/closet_appearance/crate/medical - -/obj/structure/closet/crate/med_crate/burn/WillContain() - return list( - /obj/item/defibrillator/loaded, - /obj/item/stack/medical/advanced/ointment = 10, - /obj/item/storage/pill_bottle/kelotane, - /obj/item/storage/pill_bottle/tramadol = 2, - /obj/item/storage/pill_bottle/spaceacillin - ) - -/obj/structure/closet/crate/med_crate/oxyloss - name = "\improper Low oxygen crate" - desc = "A crate with low oxygen equipment." - closet_appearance = /decl/closet_appearance/crate/medical/oxygen - -/obj/structure/closet/crate/med_crate/oxyloss/WillContain() - return list( - /obj/item/device/scanner/health = 2, - /obj/item/storage/pill_bottle/dexalin = 2, - /obj/item/storage/pill_bottle/inaprovaline - ) -/obj/structure/closet/crate/med_crate/toxin - name = "\improper Toxin crate" - desc = "A crate with toxin equipment." - closet_appearance = /decl/closet_appearance/crate/medical/toxins - -/obj/structure/closet/crate/med_crate/toxin/WillContain() - return list( - /obj/item/storage/firstaid/surgery, - /obj/item/storage/pill_bottle/dylovene = 2, - /obj/item/reagent_containers/pill/hyronalin = 12 - ) diff --git a/code/game/objects/structures/curtains.dm b/code/game/objects/structures/curtains.dm deleted file mode 100644 index b1961948d9965..0000000000000 --- a/code/game/objects/structures/curtains.dm +++ /dev/null @@ -1,65 +0,0 @@ -/obj/structure/curtain - name = "curtain" - icon = 'icons/obj/curtain.dmi' - icon_state = "closed" - layer = ABOVE_WINDOW_LAYER - opacity = 1 - density = FALSE - -/obj/structure/curtain/Initialize() - .=..() - set_extension(src, /datum/extension/turf_hand) - -/obj/structure/curtain/open - icon_state = "open" - layer = ABOVE_HUMAN_LAYER - opacity = 0 - -/obj/structure/curtain/bullet_act(obj/item/projectile/P, def_zone) - if(!P.nodamage) - visible_message("[P] tears [src] down!") - qdel(src) - else - ..(P, def_zone) - -/obj/structure/curtain/attack_hand(mob/user) - playsound(get_turf(loc), "rustle", 15, 1, -5) - toggle() - ..() - -/obj/structure/curtain/proc/toggle() - set_opacity(!opacity) - if(opacity) - icon_state = "closed" - layer = ABOVE_HUMAN_LAYER - else - icon_state = "open" - layer = ABOVE_WINDOW_LAYER - -/obj/structure/curtain/black - name = "black curtain" - color = "#222222" - -/obj/structure/curtain/medical - name = "plastic curtain" - color = "#b8f5e3" - alpha = 200 - -/obj/structure/curtain/open/bed - name = "bed curtain" - color = "#854636" - -/obj/structure/curtain/open/privacy - name = "privacy curtain" - color = "#b8f5e3" - -/obj/structure/curtain/open/shower - name = "shower curtain" - color = "#acd1e9" - alpha = 200 - -/obj/structure/curtain/open/shower/engineering - color = "#ffa500" - -/obj/structure/curtain/open/shower/security - color = "#aa0000" diff --git a/code/game/objects/structures/displaycase.dm b/code/game/objects/structures/displaycase.dm deleted file mode 100644 index 50228421876da..0000000000000 --- a/code/game/objects/structures/displaycase.dm +++ /dev/null @@ -1,72 +0,0 @@ -/obj/structure/displaycase - name = "display case" - icon = 'icons/obj/stationobjs.dmi' - icon_state = "glassbox" - desc = "A display case for prized possessions. It taunts you to kick it." - density = TRUE - anchored = TRUE - unacidable = TRUE - alpha = 150 - health_max = 14 - -/obj/structure/displaycase/Initialize() - . = ..() - var/turf/T = get_turf(src) - for(var/atom/movable/AM in T) - if(AM.simulated && !AM.anchored) - AM.forceMove(src) - update_icon() - -/obj/structure/displaycase/examine(mob/user) - . = ..() - if(contents.len) - to_chat(user, "Inside you see [english_list(contents)].") - -/obj/structure/displaycase/ex_act(severity) - if (severity < EX_ACT_LIGHT) - var/shuffled_contents = shuffle(contents) - for (var/atom/A as anything in shuffled_contents) - A.ex_act(severity + 1) - ..() - -/obj/structure/displaycase/bullet_act(obj/item/projectile/Proj) - if (Proj.penetrating) - var/distance = get_dist(Proj.starting, get_turf(loc)) - var/list/items = contents.Copy() - while (items.len) - var/atom/A = pick_n_take(items) - if (isliving(A)) - Proj.attack_mob(A, distance) - else - A.bullet_act(Proj) - Proj.penetrating -= 1 - if(!Proj.penetrating) - break - . = ..() - -/obj/structure/displaycase/on_death() - set_density(FALSE) - new /obj/item/material/shard(loc) - for(var/atom/movable/AM in src) - AM.dropInto(loc) - playsound(src, "shatter", 70, 1) - update_icon() - -/obj/structure/displaycase/on_revive() - update_icon() - -/obj/structure/displaycase/on_update_icon() - if(health_dead) - icon_state = "glassboxb" - else - icon_state = "glassbox" - underlays.Cut() - for(var/atom/movable/AM in contents) - underlays += AM.appearance - -/obj/structure/displaycase/attack_hand(mob/user as mob) - add_fingerprint(user) - if(!health_dead) - to_chat(usr, text("You kick the display case.")) - visible_message("[usr] kicks the display case.") - damage_health(2, DAMAGE_BRUTE) diff --git a/code/game/objects/structures/dogbed.dm b/code/game/objects/structures/dogbed.dm deleted file mode 100644 index 803746b9f9f81..0000000000000 --- a/code/game/objects/structures/dogbed.dm +++ /dev/null @@ -1,8 +0,0 @@ -/obj/structure/dogbed - name = "dogbed" - desc = "A bed made especially for dogs, or other similarly sized pets." - icon = 'icons/obj/furniture.dmi' - icon_state = "dogbed" - can_buckle = 1 - buckle_dir = SOUTH - buckle_lying = 1 \ No newline at end of file diff --git a/code/game/objects/structures/door_assembly.dm b/code/game/objects/structures/door_assembly.dm deleted file mode 100644 index 7dd9d0ba0080d..0000000000000 --- a/code/game/objects/structures/door_assembly.dm +++ /dev/null @@ -1,257 +0,0 @@ -/obj/structure/door_assembly - name = "airlock assembly" - icon = 'icons/obj/doors/station/door.dmi' - icon_state = "construction" - anchored = FALSE - density = TRUE - w_class = ITEM_SIZE_NO_CONTAINER - var/state = 0 - var/base_icon_state = "" - var/base_name = "Airlock" - var/obj/item/airlock_electronics/electronics = null - var/airlock_type = /obj/machinery/door/airlock //the type path of the airlock once completed - var/glass_type = /obj/machinery/door/airlock/glass - var/glass = 0 // 0 = glass can be installed. -1 = glass can't be installed. 1 = glass is already installed. Text = mineral plating is installed instead. - var/created_name = null - var/panel_icon = 'icons/obj/doors/station/panel.dmi' - var/fill_icon = 'icons/obj/doors/station/fill_steel.dmi' - var/glass_icon = 'icons/obj/doors/station/fill_glass.dmi' - var/paintable = AIRLOCK_PAINTABLE|AIRLOCK_STRIPABLE - var/door_color = "none" - var/stripe_color = "none" - var/symbol_color = "none" - - -/obj/structure/door_assembly/Initialize() - . = ..() - update_state() - - -/obj/structure/door_assembly/door_assembly_hatch - icon = 'icons/obj/doors/hatch/door.dmi' - panel_icon = 'icons/obj/doors/hatch/panel.dmi' - fill_icon = 'icons/obj/doors/hatch/fill_steel.dmi' - base_name = "Airtight Hatch" - airlock_type = /obj/machinery/door/airlock/hatch - glass = -1 - -/obj/structure/door_assembly/door_assembly_highsecurity // Borrowing this until WJohnston makes sprites for the assembly - icon = 'icons/obj/doors/secure/door.dmi' - fill_icon = 'icons/obj/doors/secure/fill_steel.dmi' - base_name = "High Security Airlock" - airlock_type = /obj/machinery/door/airlock/highsecurity - glass = -1 - paintable = 0 - -/obj/structure/door_assembly/door_assembly_ext - icon = 'icons/obj/doors/external/door.dmi' - fill_icon = 'icons/obj/doors/external/fill_steel.dmi' - glass_icon = 'icons/obj/doors/external/fill_glass.dmi' - base_name = "External Airlock" - airlock_type = /obj/machinery/door/airlock/external - glass_type = /obj/machinery/door/airlock/external/glass - paintable = 0 - -/obj/structure/door_assembly/multi_tile - icon = 'icons/obj/doors/double/door.dmi' - fill_icon = 'icons/obj/doors/double/fill_steel.dmi' - glass_icon = 'icons/obj/doors/double/fill_glass.dmi' - panel_icon = 'icons/obj/doors/double/panel.dmi' - dir = EAST - var/width = 1 - airlock_type = /obj/machinery/door/airlock/multi_tile - glass_type = /obj/machinery/door/airlock/multi_tile/glass - - -/obj/structure/door_assembly/multi_tile/Initialize() - . = ..() - if(dir in list(EAST, WEST)) - bound_width = width * world.icon_size - bound_height = world.icon_size - else - bound_width = world.icon_size - bound_height = width * world.icon_size - update_state() - - -/obj/structure/door_assembly/multi_tile/Move() - . = ..() - if(dir in list(EAST, WEST)) - bound_width = width * world.icon_size - bound_height = world.icon_size - else - bound_width = world.icon_size - bound_height = width * world.icon_size - - - -/obj/structure/door_assembly/attackby(obj/item/W as obj, mob/user as mob) - if(istype(W, /obj/item/pen)) - var/t = sanitizeSafe(input(user, "Enter the name for the door.", src.name, src.created_name), MAX_NAME_LEN) - if(!t) return - if(!in_range(src, usr) && src.loc != usr) return - created_name = t - return - - if(isWelder(W) && ( (istext(glass)) || (glass == 1) || (!anchored) )) - var/obj/item/weldingtool/WT = W - if (WT.remove_fuel(0, user)) - playsound(src.loc, 'sound/items/Welder2.ogg', 50, 1) - if(istext(glass)) - user.visible_message("[user] welds the [glass] plating off the airlock assembly.", "You start to weld the [glass] plating off the airlock assembly.") - if(do_after(user, 4 SECONDS, src, DO_PUBLIC_UNIQUE)) - if(!src || !WT.isOn()) return - to_chat(user, "You welded the [glass] plating off!") - var/M = text2path("/obj/item/stack/material/[glass]") - new M(src.loc, 2) - glass = 0 - else if(glass == 1) - user.visible_message("[user] welds the glass panel out of the airlock assembly.", "You start to weld the glass panel out of the airlock assembly.") - if(do_after(user, 4 SECONDS, src, DO_PUBLIC_UNIQUE)) - if(!src || !WT.isOn()) return - to_chat(user, "You welded the glass panel out!") - new /obj/item/stack/material/glass/reinforced(src.loc) - glass = 0 - else if(!anchored) - user.visible_message("[user] dissassembles the airlock assembly.", "You start to dissassemble the airlock assembly.") - if(do_after(user, 4 SECONDS, src, DO_PUBLIC_UNIQUE)) - if(!src || !WT.isOn()) return - to_chat(user, "You dissasembled the airlock assembly!") - new /obj/item/stack/material/steel(src.loc, 4) - qdel (src) - else - to_chat(user, "You need more welding fuel.") - return - - else if(isWrench(W) && state == 0) - playsound(src.loc, 'sound/items/Ratchet.ogg', 100, 1) - if(anchored) - user.visible_message("[user] begins unsecuring the airlock assembly from the floor.", "You begin unsecuring the airlock assembly from the floor.") - else - user.visible_message("[user] begins securing the airlock assembly to the floor.", "You begin securing the airlock assembly to the floor.") - - if(do_after(user, 4 SECONDS, src, DO_PUBLIC_UNIQUE)) - if(!src) return - to_chat(user, "You [anchored? "un" : ""]secured the airlock assembly!") - anchored = !anchored - - else if(isCoil(W) && state == 0 && anchored) - var/obj/item/stack/cable_coil/C = W - if (C.get_amount() < 1) - to_chat(user, "You need one length of coil to wire the airlock assembly.") - return - user.visible_message("[user] wires the airlock assembly.", "You start to wire the airlock assembly.") - if(do_after(user, 4 SECONDS, src, DO_PUBLIC_UNIQUE) && state == 0 && anchored) - if (C.use(1)) - src.state = 1 - to_chat(user, "You wire the airlock.") - - else if(isWirecutter(W) && state == 1 ) - playsound(src.loc, 'sound/items/Wirecutter.ogg', 100, 1) - user.visible_message("[user] cuts the wires from the airlock assembly.", "You start to cut the wires from airlock assembly.") - - if(do_after(user, 4 SECONDS, src, DO_PUBLIC_UNIQUE)) - if(!src) return - to_chat(user, "You cut the airlock wires.!") - new/obj/item/stack/cable_coil(src.loc, 1) - src.state = 0 - - else if(istype(W, /obj/item/airlock_electronics) && state == 1) - playsound(src.loc, 'sound/items/Screwdriver.ogg', 100, 1) - user.visible_message("[user] installs the electronics into the airlock assembly.", "You start to install electronics into the airlock assembly.") - - if(do_after(user, 4 SECONDS, src, DO_PUBLIC_UNIQUE)) - if(!src) return - if(!user.unEquip(W, src)) - return - to_chat(user, "You installed the airlock electronics!") - src.state = 2 - src.SetName("Near finished Airlock Assembly") - src.electronics = W - - else if(isCrowbar(W) && state == 2 ) - //This should never happen, but just in case I guess - if (!electronics) - to_chat(user, "There was nothing to remove.") - src.state = 1 - return - - playsound(src.loc, 'sound/items/Crowbar.ogg', 100, 1) - user.visible_message("\The [user] starts removing the electronics from the airlock assembly.", "You start removing the electronics from the airlock assembly.") - - if(do_after(user, 4 SECONDS, src, DO_PUBLIC_UNIQUE)) - if(!src) return - to_chat(user, "You removed the airlock electronics!") - src.state = 1 - src.SetName("Wired Airlock Assembly") - electronics.dropInto(loc) - electronics = null - - else if(istype(W, /obj/item/stack/material) && !glass) - var/obj/item/stack/material/S = W - var/material_name = S.get_material_name() - if (S) - if (S.get_amount() >= 1) - if(material_name == MATERIAL_GLASS && S.reinf_material) - playsound(src.loc, 'sound/items/Crowbar.ogg', 100, 1) - user.visible_message("[user] adds [S.name] to the airlock assembly.", "You start to install [S.name] into the airlock assembly.") - if(do_after(user, 4 SECONDS, src, DO_PUBLIC_UNIQUE) && !glass) - if (S.use(1)) - to_chat(user, "You installed reinforced glass windows into the airlock assembly.") - glass = 1 - else if(!(material_name in list(MATERIAL_GOLD, MATERIAL_SILVER, MATERIAL_DIAMOND, MATERIAL_URANIUM, MATERIAL_PHORON, MATERIAL_SANDSTONE))) - to_chat(user, "You cannot make an airlock out of that material.") - return - else - if(S.get_amount() >= 2) - playsound(src.loc, 'sound/items/Crowbar.ogg', 100, 1) - user.visible_message("[user] adds [S.name] to the airlock assembly.", "You start to install [S.name] into the airlock assembly.") - if(do_after(user, 4 SECONDS, src, DO_PUBLIC_UNIQUE) && !glass) - if (S.use(2)) - to_chat(user, "You installed [S.get_material_name()] plating into the airlock assembly.") - glass = S.get_material_name() - - else if(isScrewdriver(W) && state == 2 ) - playsound(src.loc, 'sound/items/Screwdriver.ogg', 100, 1) - to_chat(user, "Now finishing the airlock.") - - if(do_after(user, 4 SECONDS, src, DO_PUBLIC_UNIQUE)) - if(!src) return - to_chat(user, "You finish the airlock!") - var/path - if(istext(glass)) - path = text2path("/obj/machinery/door/airlock/[glass]") - else if (glass == 1) - path = glass_type - else - path = airlock_type - - new path(src.loc, src) - qdel(src) - else - ..() - update_state() - -/obj/structure/door_assembly/proc/update_state() - overlays.Cut() - var/image/filling_overlay - var/image/panel_overlay - var/final_name = "" - if(glass == 1) - filling_overlay = image(glass_icon, "construction") - else - filling_overlay = image(fill_icon, "construction") - switch (state) - if(0) - if (anchored) - final_name = "Secured " - if(1) - final_name = "Wired " - panel_overlay = image(panel_icon, "construction0") - if(2) - final_name = "Near Finished " - panel_overlay = image(panel_icon, "construction1") - final_name += "[glass == 1 ? "Window " : ""][istext(glass) ? "[glass] Airlock" : base_name] Assembly" - SetName(final_name) - overlays += filling_overlay - overlays += panel_overlay diff --git a/code/game/objects/structures/drain.dm b/code/game/objects/structures/drain.dm deleted file mode 100644 index ac00430ed8027..0000000000000 --- a/code/game/objects/structures/drain.dm +++ /dev/null @@ -1,94 +0,0 @@ -// Cheap, shitty, hacky means of draining water without a proper pipe system. -// TODO: water pipes. -/obj/structure/hygiene/drain - name = "gutter" - desc = "You probably can't get sucked down the plughole." - icon = 'icons/obj/drain.dmi' - icon_state = "drain" - anchored = TRUE - density = FALSE - layer = TURF_LAYER+0.1 - can_drain = 1 - var/welded - -/obj/structure/hygiene/drain/attackby(var/obj/item/thing, var/mob/user) - ..() - if(isWelder(thing)) - var/obj/item/weldingtool/WT = thing - if(WT.isOn()) - welded = !welded - to_chat(user, "You weld \the [src] [welded ? "closed" : "open"].") - else - to_chat(user, "Turn \the [thing] on, first.") - update_icon() - return - if(isWrench(thing)) - new /obj/item/drain(src.loc) - playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1) - to_chat(user, "[user] unwrenches the [src].") - qdel(src) - return - return ..() - -/obj/structure/hygiene/drain/on_update_icon() - icon_state = "[initial(icon_state)][welded ? "-welded" : ""]" - -/obj/structure/hygiene/drain/Process() - if(welded) - return - ..() - -/obj/structure/hygiene/drain/examine(mob/user) - . = ..() - if(welded) - to_chat(user, "It is welded shut.") - -//for construction. -/obj/item/drain - name = "gutter" - desc = "You probably can't get sucked down the plughole." - icon = 'icons/obj/drain.dmi' - icon_state = "drain" - var/constructed_type = /obj/structure/hygiene/drain - -/obj/item/drain/attackby(var/obj/item/thing, var/mob/user) - if(isWrench(thing)) - new constructed_type(src.loc) - playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1) - to_chat(user, "[user] wrenches the [src] down.") - qdel(src) - return - return ..() - -/obj/structure/hygiene/drain/bath - name = "sealable drain" - desc = "You probably can't get sucked down the plughole. Specially not when it's closed!" - icon_state = "drain_bath" - var/closed = FALSE - -/obj/structure/hygiene/drain/bath/attack_hand(mob/user) - . = ..() - if(!welded) - closed = !closed - user.visible_message(SPAN_NOTICE("\The [user] has [closed ? "closed" : "opened"] the drain.")) - update_icon() - -/obj/structure/hygiene/drain/bath/on_update_icon() - if(welded) - icon_state = "[initial(icon_state)]-welded" - else - icon_state = "[initial(icon_state)][closed ? "-closed" : ""]" - -/obj/structure/hygiene/drain/bath/examine(mob/user) - . = ..() - to_chat(user, "It is [closed ? "closed" : "open"]") - -/obj/structure/hygiene/drain/bath/Process() - if(closed) - return - ..() -/obj/item/drain/bath - name = "sealable drain" - desc = "You probably can't get sucked down the plughole. Specially not when it's closed!" - icon_state = "drain_bath" - constructed_type = /obj/structure/hygiene/drain/bath diff --git a/code/game/objects/structures/electricchair.dm b/code/game/objects/structures/electricchair.dm deleted file mode 100644 index 7a6e5bd4efed2..0000000000000 --- a/code/game/objects/structures/electricchair.dm +++ /dev/null @@ -1,76 +0,0 @@ -/obj/structure/bed/chair/e_chair - name = "electric chair" - desc = "Looks absolutely SHOCKING!" - icon_state = "echair0" - var/on = 0 - var/obj/item/assembly/shock_kit/part = null - var/last_time = 1.0 - buckle_movable = FALSE - -/obj/structure/bed/chair/e_chair/New() - ..() - overlays += image('icons/obj/objects.dmi', src, "echair_over", MOB_LAYER + 1, dir) - return - -/obj/structure/bed/chair/e_chair/attackby(obj/item/W as obj, mob/user as mob) - if(isWrench(W)) - var/obj/structure/bed/chair/C = new /obj/structure/bed/chair(loc) - playsound(loc, 'sound/items/Ratchet.ogg', 50, 1) - C.set_dir(dir) - part.dropInto(loc) - part.master = null - part = null - qdel(src) - -/obj/structure/bed/chair/e_chair/verb/toggle() - set name = "Toggle Electric Chair" - set category = "Object" - set src in oview(1) - - if(on) - on = 0 - icon_state = "echair0" - else - on = 1 - icon_state = "echair1" - to_chat(usr, "You switch [on ? "on" : "off"] [src].") - return - -/obj/structure/bed/chair/e_chair/rotate() - ..() - overlays.Cut() - overlays += image('icons/obj/objects.dmi', src, "echair_over", MOB_LAYER + 1, dir) //there's probably a better way of handling this, but eh. -Pete - return - -/obj/structure/bed/chair/e_chair/proc/shock() - if(!on) - return - if(last_time + 50 > world.time) - return - last_time = world.time - - // special power handling - var/area/A = get_area(src) - if(!isarea(A)) - return - if(!A.powered(EQUIP)) - return - A.use_power_oneoff(5000, EQUIP) - var/light = A.power_light - A.update_icon() - - flick("echair1", src) - var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread - s.set_up(12, 1, src) - s.start() - if(buckled_mob) - buckled_mob.burn_skin(85) - to_chat(buckled_mob, "You feel a deep shock course through your body!") - sleep(1) - buckled_mob.burn_skin(85) - buckled_mob.Stun(600) - visible_message("The electric chair went off!", "You hear a deep sharp shock!") - - A.power_light = light - A.update_icon() - return diff --git a/code/game/objects/structures/extinguisher.dm b/code/game/objects/structures/extinguisher.dm deleted file mode 100644 index 2ab6459324a89..0000000000000 --- a/code/game/objects/structures/extinguisher.dm +++ /dev/null @@ -1,76 +0,0 @@ -/obj/structure/extinguisher_cabinet - name = "extinguisher cabinet" - desc = "A small wall mounted cabinet designed to hold a fire extinguisher." - icon = 'icons/obj/extinguisher.dmi' - icon_state = "extinguisher_closed" - anchored = TRUE - density = FALSE - var/obj/item/extinguisher/has_extinguisher - var/opened = 0 - -/obj/structure/extinguisher_cabinet/New() - ..() - has_extinguisher = new/obj/item/extinguisher(src) - -/obj/structure/extinguisher_cabinet/attackby(obj/item/O, mob/user) - if(isrobot(user)) - return - if(istype(O, /obj/item/extinguisher)) - if(!has_extinguisher && opened && user.unEquip(O, src)) - has_extinguisher = O - to_chat(user, "You place [O] in [src].") - playsound(src.loc, 'sound/effects/extin.ogg', 50, 0) - else - opened = !opened - else - opened = !opened - update_icon() - - -/obj/structure/extinguisher_cabinet/attack_hand(mob/user) - if(isrobot(user)) - return - if (ishuman(user)) - var/mob/living/carbon/human/H = user - var/obj/item/organ/external/temp = H.organs_by_name[BP_R_HAND] - if (user.hand) - temp = H.organs_by_name[BP_L_HAND] - if(temp && !temp.is_usable()) - to_chat(user, "You try to move your [temp.name], but cannot!") - return - if(has_extinguisher) - user.put_in_hands(has_extinguisher) - to_chat(user, "You take [has_extinguisher] from [src].") - playsound(src.loc, 'sound/effects/extout.ogg', 50, 0) - has_extinguisher = null - opened = 1 - else - opened = !opened - update_icon() - -/obj/structure/extinguisher_cabinet/on_update_icon() - if(!opened) - icon_state = "extinguisher_closed" - return - if(has_extinguisher) - if(istype(has_extinguisher, /obj/item/extinguisher/mini)) - icon_state = "extinguisher_mini" - else - icon_state = "extinguisher_full" - else - icon_state = "extinguisher_empty" - -/obj/structure/extinguisher_cabinet/AltClick(var/mob/user) - if(CanPhysicallyInteract(user)) - opened = !opened - update_icon() - -/obj/structure/extinguisher_cabinet/do_simple_ranged_interaction(var/mob/user) - if(has_extinguisher) - has_extinguisher.dropInto(loc) - has_extinguisher = null - opened = 1 - else - opened = !opened - update_icon() - return TRUE diff --git a/code/game/objects/structures/fireaxe_cabinet.dm b/code/game/objects/structures/fireaxe_cabinet.dm deleted file mode 100644 index 516b4bd54680f..0000000000000 --- a/code/game/objects/structures/fireaxe_cabinet.dm +++ /dev/null @@ -1,134 +0,0 @@ -/obj/structure/fireaxecabinet - name = "fire axe cabinet" - desc = "There is small label that reads \"For Emergency use only\" along with details for safe use of the axe. As if." - icon_state = "fireaxe" - anchored = TRUE - density = FALSE - - var/damage_threshold = 15 - var/open - var/unlocked - var/shattered - var/obj/item/material/twohanded/fireaxe/fireaxe - -/obj/structure/fireaxecabinet/attack_generic(var/mob/user, var/damage, var/attack_verb, var/wallbreaker) - attack_animation(user) - playsound(user, 'sound/effects/Glasshit.ogg', 50, 1) - visible_message("[user] [attack_verb] \the [src]!") - if(damage_threshold > damage) - to_chat(user, "Your strike is deflected by the reinforced glass!") - return - if(shattered) - return - shattered = 1 - unlocked = 1 - open = 1 - playsound(user, 'sound/effects/Glassbr3.ogg', 100, 1) - update_icon() - -/obj/structure/fireaxecabinet/on_update_icon() - overlays.Cut() - if(fireaxe) - overlays += image(icon, "fireaxe_item") - if(shattered) - overlays += image(icon, "fireaxe_window_broken") - else if(!open) - overlays += image(icon, "fireaxe_window") - -/obj/structure/fireaxecabinet/New() - ..() - fireaxe = new(src) - update_icon() - -/obj/structure/fireaxecabinet/attack_ai(var/mob/user) - toggle_lock(user) - -/obj/structure/fireaxecabinet/attack_hand(var/mob/user) - if(!unlocked) - to_chat(user, "\The [src] is locked.") - return - toggle_open(user) - -/obj/structure/fireaxecabinet/MouseDrop(over_object, src_location, over_location) - if(over_object == usr) - var/mob/user = over_object - if(!istype(user)) - return - - if(!open) - to_chat(user, "\The [src] is closed.") - return - - if(!fireaxe) - to_chat(user, "\The [src] is empty.") - return - - user.put_in_hands(fireaxe) - fireaxe = null - update_icon() - - return - -/obj/structure/fireaxecabinet/Destroy() - if(fireaxe) - fireaxe.dropInto(loc) - fireaxe = null - return ..() - -/obj/structure/fireaxecabinet/attackby(var/obj/item/O, var/mob/user) - - if(isMultitool(O)) - toggle_lock(user) - return - - if(istype(O, /obj/item/material/twohanded/fireaxe)) - if(open) - if(fireaxe) - to_chat(user, "There is already \a [fireaxe] inside \the [src].") - else if(user.unEquip(O)) - O.forceMove(src) - fireaxe = O - to_chat(user, "You place \the [fireaxe] into \the [src].") - update_icon() - return - - if(O.force) - user.setClickCooldown(10) - attack_generic(user, O.force, "bashes") - return - - return ..() - -/obj/structure/fireaxecabinet/proc/toggle_open(var/mob/user) - if(shattered) - open = 1 - unlocked = 1 - else - user.setClickCooldown(10) - open = !open - to_chat(user, "You [open ? "open" : "close"] \the [src].") - update_icon() - -/obj/structure/fireaxecabinet/proc/toggle_lock(var/mob/user) - - - if(open) - return - - if(shattered) - open = 1 - unlocked = 1 - else - user.setClickCooldown(10) - to_chat(user, "You begin [unlocked ? "enabling" : "disabling"] \the [src]'s maglock.") - - if(!do_after(user, 2 SECONDS, src, DO_PUBLIC_UNIQUE)) - return - - if(shattered) return - - unlocked = !unlocked - playsound(user, 'sound/machines/lockreset.ogg', 50, 1) - to_chat(user, "You [unlocked ? "disable" : "enable"] the maglock.") - - update_icon() diff --git a/code/game/objects/structures/fitness.dm b/code/game/objects/structures/fitness.dm deleted file mode 100644 index d018a3e7eae06..0000000000000 --- a/code/game/objects/structures/fitness.dm +++ /dev/null @@ -1,87 +0,0 @@ -/obj/structure/fitness - icon = 'icons/obj/stationobjs.dmi' - anchored = TRUE - var/being_used = 0 - -/obj/structure/fitness/punchingbag - name = "punching bag" - desc = "A punching bag." - icon_state = "punchingbag" - density = TRUE - var/list/hit_message = list("hit", "punch", "kick", "robust") - -/obj/structure/fitness/punchingbag/attack_hand(var/mob/living/carbon/human/user) - if(!istype(user)) - ..() - return - var/synth = user.isSynthetic() - if(!synth && user.nutrition < 20) - to_chat(user, "You need more energy to use the punching bag. Go eat something.") - else - if(user.a_intent == I_HURT) - user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN) - flick("[icon_state]_hit", src) - playsound(src.loc, 'sound/effects/woodhit.ogg', 25, 1, -1) - user.do_attack_animation(src) - user.update_personal_goal(/datum/goal/punchingbag, 1) - if(!synth) - user.adjust_nutrition(-(5 * DEFAULT_HUNGER_FACTOR)) - user.adjust_hydration(-(5 * DEFAULT_THIRST_FACTOR)) - to_chat(user, "You [pick(hit_message)] \the [src].") - -/obj/structure/fitness/weightlifter - name = "weightlifting machine" - desc = "A machine used to lift weights." - icon_state = "weightlifter" - var/weight = 1 - var/max_weight = 5 - var/list/success_message = list("with great effort", "straining hard", "without any trouble", "with ease") - var/list/fail_message = list(", lifting them part of the way and then letting them drop", ", unable to even budge them") - -/obj/structure/fitness/weightlifter/attackby(obj/item/W as obj, mob/user as mob) - if(isWrench(W)) - playsound(src.loc, 'sound/items/Deconstruct.ogg', 75, 1) - weight = (weight % max_weight) + 1 - to_chat(user, "You set the machine's weight level to [weight].") - -/obj/structure/fitness/weightlifter/attack_hand(var/mob/living/carbon/human/user) - if(!istype(user)) - return - var/synth = user.isSynthetic() - if(user.loc != src.loc) - to_chat(user, "You must be on the weight machine to use it.") - return - if(!synth && user.nutrition < 50) - to_chat(user, "You need more energy to lift weights. Go eat something.") - return - if(being_used) - to_chat(user, "The weight machine is already in use by somebody else.") - return - else - being_used = 1 - playsound(src.loc, 'sound/effects/weightlifter.ogg', 50, 1) - user.set_dir(SOUTH) - flick("[icon_state]_[weight]", src) - if(do_after(user, (2 + weight) SECONDS, src, DO_DEFAULT | DO_BOTH_UNIQUE_ACT)) - playsound(src.loc, 'sound/effects/weightdrop.ogg', 25, 1) - var/skill = max_weight * user.get_skill_value(SKILL_HAULING)/SKILL_MAX - var/message - if(skill < weight) - if(weight - skill > max_weight/2) - if(prob(50)) - message = ", getting hurt in the process" - user.apply_damage(5) - else - message = "; this does not look safe" - else - message = fail_message[min(1 + round(weight - skill), fail_message.len)] - user.visible_message("\The [user] fails to lift the weights[message].", "You fail to lift the weights[message].") - else - if(!synth) - var/adj_weight = weight * 5 - user.adjust_nutrition(-(adj_weight * DEFAULT_HUNGER_FACTOR)) - user.adjust_hydration(-(adj_weight * DEFAULT_THIRST_FACTOR)) - message = success_message[min(1 + round(skill - weight), fail_message.len)] - user.visible_message("\The [user] lift\s the weights [message].", "You lift the weights [message].") - user.update_personal_goal(/datum/goal/weights, 1) - being_used = FALSE diff --git a/code/game/objects/structures/flora.dm b/code/game/objects/structures/flora.dm deleted file mode 100644 index d7ec60aab3c00..0000000000000 --- a/code/game/objects/structures/flora.dm +++ /dev/null @@ -1,366 +0,0 @@ -//trees -/obj/structure/flora/tree - name = "tree" - anchored = TRUE - density = TRUE - pixel_x = -16 - layer = ABOVE_HUMAN_LAYER - -/obj/structure/flora/tree/pine - name = "pine tree" - icon = 'icons/obj/flora/pinetrees.dmi' - icon_state = "pine_1" - -/obj/structure/flora/tree/pine/New() - ..() - icon_state = "pine_[rand(1, 3)]" - -/obj/structure/flora/tree/pine/xmas - name = "\improper Christmas tree" - desc = "O Christmas tree, O Christmas tree..." - icon = 'icons/obj/flora/pinetrees.dmi' - icon_state = "pine_c" - -/obj/structure/flora/tree/pine/xmas/New() - ..() - icon_state = "pine_c" - -/obj/structure/flora/tree/dead - icon = 'icons/obj/flora/deadtrees.dmi' - icon_state = "tree_1" - -/obj/structure/flora/tree/dead/New() - ..() - icon_state = "tree_[rand(1, 6)]" - - -//grass -/obj/structure/flora/grass - name = "grass" - icon = 'icons/obj/flora/snowflora.dmi' - anchored = TRUE - -/obj/structure/flora/grass/brown - icon_state = "snowgrass1bb" - -/obj/structure/flora/grass/brown/New() - ..() - icon_state = "snowgrass[rand(1, 3)]bb" - - -/obj/structure/flora/grass/green - icon_state = "snowgrass1gb" - -/obj/structure/flora/grass/green/New() - ..() - icon_state = "snowgrass[rand(1, 3)]gb" - -/obj/structure/flora/grass/both - icon_state = "snowgrassall1" - -/obj/structure/flora/grass/both/New() - ..() - icon_state = "snowgrassall[rand(1, 3)]" - - -//bushes -/obj/structure/flora/bush - name = "bush" - icon = 'icons/obj/flora/snowflora.dmi' - icon_state = "snowbush1" - anchored = TRUE - -/obj/structure/flora/bush/New() - ..() - icon_state = "snowbush[rand(1, 6)]" - -/obj/structure/flora/pottedplant - name = "potted plant" - icon = 'icons/obj/plants.dmi' - icon_state = "plant-26" - layer = ABOVE_HUMAN_LAYER - -//newbushes - -/obj/structure/flora/ausbushes - name = "bush" - icon = 'icons/obj/flora/ausflora.dmi' - icon_state = "firstbush_1" - anchored = TRUE - -/obj/structure/flora/ausbushes/New() - ..() - icon_state = "firstbush_[rand(1, 4)]" - -/obj/structure/flora/ausbushes/reedbush - icon_state = "reedbush_1" - -/obj/structure/flora/ausbushes/reedbush/New() - ..() - icon_state = "reedbush_[rand(1, 4)]" - -/obj/structure/flora/ausbushes/leafybush - icon_state = "leafybush_1" - -/obj/structure/flora/ausbushes/leafybush/New() - ..() - icon_state = "leafybush_[rand(1, 3)]" - -/obj/structure/flora/ausbushes/palebush - icon_state = "palebush_1" - -/obj/structure/flora/ausbushes/palebush/New() - ..() - icon_state = "palebush_[rand(1, 4)]" - -/obj/structure/flora/ausbushes/stalkybush - icon_state = "stalkybush_1" - -/obj/structure/flora/ausbushes/stalkybush/New() - ..() - icon_state = "stalkybush_[rand(1, 3)]" - -/obj/structure/flora/ausbushes/grassybush - icon_state = "grassybush_1" - -/obj/structure/flora/ausbushes/grassybush/New() - ..() - icon_state = "grassybush_[rand(1, 4)]" - -/obj/structure/flora/ausbushes/fernybush - icon_state = "fernybush_1" - -/obj/structure/flora/ausbushes/fernybush/New() - ..() - icon_state = "fernybush_[rand(1, 3)]" - -/obj/structure/flora/ausbushes/sunnybush - icon_state = "sunnybush_1" - -/obj/structure/flora/ausbushes/sunnybush/New() - ..() - icon_state = "sunnybush_[rand(1, 3)]" - -/obj/structure/flora/ausbushes/genericbush - icon_state = "genericbush_1" - -/obj/structure/flora/ausbushes/genericbush/New() - ..() - icon_state = "genericbush_[rand(1, 4)]" - -/obj/structure/flora/ausbushes/pointybush - icon_state = "pointybush_1" - -/obj/structure/flora/ausbushes/pointybush/New() - ..() - icon_state = "pointybush_[rand(1, 4)]" - -/obj/structure/flora/ausbushes/lavendergrass - icon_state = "lavendergrass_1" - -/obj/structure/flora/ausbushes/lavendergrass/New() - ..() - icon_state = "lavendergrass_[rand(1, 4)]" - -/obj/structure/flora/ausbushes/ywflowers - icon_state = "ywflowers_1" - -/obj/structure/flora/ausbushes/ywflowers/New() - ..() - icon_state = "ywflowers_[rand(1, 3)]" - -/obj/structure/flora/ausbushes/brflowers - icon_state = "brflowers_1" - -/obj/structure/flora/ausbushes/brflowers/New() - ..() - icon_state = "brflowers_[rand(1, 3)]" - -/obj/structure/flora/ausbushes/ppflowers - icon_state = "ppflowers_1" - -/obj/structure/flora/ausbushes/ppflowers/New() - ..() - icon_state = "ppflowers_[rand(1, 4)]" - -/obj/structure/flora/ausbushes/sparsegrass - icon_state = "sparsegrass_1" - -/obj/structure/flora/ausbushes/sparsegrass/New() - ..() - icon_state = "sparsegrass_[rand(1, 3)]" - -/obj/structure/flora/ausbushes/fullgrass - icon_state = "fullgrass_1" - -/obj/structure/flora/ausbushes/fullgrass/New() - ..() - icon_state = "fullgrass_[rand(1, 3)]" - - -//potted plants credit: Flashkirby -//potted plants 27-30: Cajoes -/obj/structure/flora/pottedplant - name = "potted plant" - desc = "Really brings the room together." - icon = 'icons/obj/plants.dmi' - icon_state = "plant-01" - layer = ABOVE_HUMAN_LAYER - -/obj/structure/flora/pottedplant/fern - name = "potted fern" - desc = "This is an ordinary looking fern. It looks like it could do with some water." - icon_state = "plant-02" - -/obj/structure/flora/pottedplant/overgrown - name = "overgrown potted plants" - desc = "This is an assortment of colourful plants. Some parts are overgrown." - icon_state = "plant-03" - -/obj/structure/flora/pottedplant/bamboo - name = "potted bamboo" - desc = "These are bamboo shoots. The tops looks like they've been cut short." - icon_state = "plant-04" - -/obj/structure/flora/pottedplant/largebush - name = "large potted bush" - desc = "This is a large bush. The leaves stick upwards in an odd fashion." - icon_state = "plant-05" - -/obj/structure/flora/pottedplant/thinbush - name = "thin potted bush" - desc = "This is a thin bush. It appears to be flowering." - icon_state = "plant-06" - -/obj/structure/flora/pottedplant/mysterious - name = "mysterious potted bulbs" - desc = "This is a mysterious looking plant. Touching the bulbs cause them to shrink." - icon_state = "plant-07" - -/obj/structure/flora/pottedplant/smalltree - name = "small potted tree" - desc = "This is a small tree. It is rather pleasant." - icon_state = "plant-08" - -/obj/structure/flora/pottedplant/unusual - name = "unusual potted plant" - desc = "This is an unusual plant. It's bulbous ends emit a soft blue light." - icon_state = "plant-09" - -/obj/structure/flora/pottedplant/unusual/Initialize() - . = ..() - set_light(0.4, 0.1, 2, 2, "#007fff") - -/obj/structure/flora/pottedplant/orientaltree - name = "potted oriental tree" - desc = "This is a rather oriental style tree. It's flowers are bright pink." - icon_state = "plant-10" - -/obj/structure/flora/pottedplant/smallcactus - name = "small potted cactus" - desc = "This is a small cactus. Its needles are sharp." - icon_state = "plant-11" - -/obj/structure/flora/pottedplant/tall - name = "tall potted plant" - desc = "This is a tall plant. Tiny pores line its surface." - icon_state = "plant-12" - -/obj/structure/flora/pottedplant/sticky - name = "sticky potted plant" - desc = "This is an odd plant. Its sticky leaves trap insects." - icon_state = "plant-13" - -/obj/structure/flora/pottedplant/smelly - name = "smelly potted plant" - desc = "This is some kind of tropical plant. It reeks of rotten eggs." - icon_state = "plant-14" - -/obj/structure/flora/pottedplant/small - name = "small potted plant" - desc = "This is a pot of assorted small flora. Some look familiar." - icon_state = "plant-15" - -/obj/structure/flora/pottedplant/aquatic - name = "aquatic potted plant" - desc = "This is apparently an aquatic plant. It's probably fake." - icon_state = "plant-16" - -/obj/structure/flora/pottedplant/shoot - name = "small potted shoot" - desc = "This is a small shoot. It still needs time to grow." - icon_state = "plant-17" - -/obj/structure/flora/pottedplant/flower - name = "potted flower" - desc = "This is a slim plant. Sweet smelling flowers are supported by spindly stems." - icon_state = "plant-18" - -/obj/structure/flora/pottedplant/crystal - name = "crystalline potted plant" - desc = "These are rather cubic plants. Odd crystal formations grow on the end." - icon_state = "plant-19" - -/obj/structure/flora/pottedplant/subterranean - name = "subterranean potted plant" - desc = "This is a subterranean plant. It's bulbous ends glow faintly." - icon_state = "plant-20" - -/obj/structure/flora/pottedplant/subterranean/Initialize() - . = ..() - set_light(0.4, 0.1, 2, 2, "#ff6633") - -/obj/structure/flora/pottedplant/minitree - name = "potted tree" - desc = "This is a miniature tree. Apparently it was grown to 1/5 scale." - icon_state = "plant-21" - -/obj/structure/flora/pottedplant/stoutbush - name = "stout potted bush" - desc = "This is a stout bush. Its leaves point up and outwards." - icon_state = "plant-22" - -/obj/structure/flora/pottedplant/drooping - name = "drooping potted plant" - desc = "This is a small plant. The drooping leaves make it look like its wilted." - icon_state = "plant-23" - -/obj/structure/flora/pottedplant/tropical - name = "tropical potted plant" - desc = "This is some kind of tropical plant. It hasn't begun to flower yet." - icon_state = "plant-24" - -/obj/structure/flora/pottedplant/dead - name = "dead potted plant" - desc = "This is the dried up remains of a dead plant. Someone should replace it." - icon_state = "plant-25" - -/obj/structure/flora/pottedplant/large - name = "large potted plant" - desc = "This is a large plant. Three branches support pairs of waxy leaves." - icon_state = "plant-26" - -/obj/structure/flora/pottedplant/decorative - name = "decorative potted plant" - desc = "This is a decorative shrub. It's been trimmed into the shape of an apple." - icon_state = "applebush" - -/obj/structure/flora/pottedplant/deskfern - name = "fancy ferny potted plant" - desc = "This leafy desk fern could do with a trim." - icon_state = "plant-27" - -/obj/structure/flora/pottedplant/floorleaf - name = "fancy leafy floor plant" - desc = "This plant has remarkably waxy leaves." - icon_state = "plant-28" - -/obj/structure/flora/pottedplant/deskleaf - name = "fancy leafy potted desk plant" - desc = "A tiny waxy leafed plant specimen." - icon_state = "plant-29" - -/obj/structure/flora/pottedplant/deskferntrim - name = "fancy trimmed ferny potted plant" - desc = "This leafy desk fern seems to have been trimmed too much." - icon_state = "plant-30" \ No newline at end of file diff --git a/code/game/objects/structures/fountain.dm b/code/game/objects/structures/fountain.dm deleted file mode 100644 index 2401cef50be11..0000000000000 --- a/code/game/objects/structures/fountain.dm +++ /dev/null @@ -1,60 +0,0 @@ -//the fountain of youth/unyouth - -/obj/structure/fountain - name = "strange fountain" - desc = "The water from the spout is still as if frozen in time, yet the water in the base ripples perpetually." - icon = 'icons/obj/fountain.dmi' - icon_state = "fountain" - density = TRUE - anchored = TRUE - unacidable = TRUE - pixel_x = -16 - var/used = FALSE - -/obj/structure/fountain/Initialize() - . = ..() - light_color = get_random_colour(lower = 190) - set_light(0.6, 3, 5, 2, light_color) - -/obj/structure/fountain/attack_hand(var/mob/living/user as mob) - if(user.incapacitated()) - return - if(!CanPhysicallyInteract(user)) - return - if(used) - to_chat(user, "\The [src] is still and lifeless...") - return - if(!ishuman(user) || user.isSynthetic()) - to_chat(user, "Try as you might to touch the fountain, some force prevents you from doing so.") - return - - if(alert("As you reach out to touch the fountain, a feeling of doubt overcomes you. Steel yourself and proceed?",,"Yes", "No") == "Yes") - visible_message("\The [user] touches \the [src].") - time_dilation(user) - else - visible_message("\The [user] retracts their hand suddenly.") - -/obj/structure/fountain/proc/time_dilation(var/mob/living/carbon/human/user as mob) - for(var/mob/living/L in oviewers(7, src)) - L.flash_eyes(3) - L.eye_blurry += 9 - visible_message("\The [src] erupts in a bright flash of light!") - playsound(src,'sound/items/time.ogg',100) - if(rand(1, 6) == 1 || user.age < 18) - to_chat(user, "You touch the fountain. All the memories of your life seem to fade into the distant past as seconds drag like years. You feel the inexplicable sensation of your skin tightening and thinning across your entire body as your muscles degrade and your joints weaken. Time returns to its 'normal' pace. You can only just barely remember touching the fountain.") - user.change_hair_color(80, 80, 80) - user.changed_age = rand(15, 20) - else - to_chat(user, "You touch the fountain. Everything stops - then reverses. You relive in an instant the events of your life. The fountain, yesterday's lunch, your first love, your first kiss. It all feels as though it just happened moments ago. Then it feels like it never happened at all. Time reverses back into normality and continues its advance. You feel great, but why are you here?") - user.changed_age = rand(15, 17) - user.age - used = TRUE - desc = "The water flows beautifully from the spout, but the water in the pool does not ripple." - -/obj/structure/fountain/mundane - name = "fountain" - desc = "A beautifully constructed fountain." - icon_state = "fountain_g" - used = TRUE - -/obj/structure/fountain/mundane/attack_hand() - return \ No newline at end of file diff --git a/code/game/objects/structures/girders.dm b/code/game/objects/structures/girders.dm deleted file mode 100644 index f3d6c295a307d..0000000000000 --- a/code/game/objects/structures/girders.dm +++ /dev/null @@ -1,258 +0,0 @@ -/obj/structure/girder - icon_state = "girder" - anchored = TRUE - density = TRUE - layer = BELOW_OBJ_LAYER - w_class = ITEM_SIZE_NO_CONTAINER - health_max = 100 - var/state = 0 - var/cover = 50 //how much cover the girder provides against projectiles. - var/material/reinf_material - var/reinforcing = 0 - -/obj/structure/girder/Initialize() - set_extension(src, /datum/extension/penetration/simple, 100) - . = ..() - -/obj/structure/girder/displaced - icon_state = "displaced" - anchored = FALSE - health_max = 50 - cover = 25 - -/obj/structure/girder/attack_generic(var/mob/user, var/damage, var/attack_message = "smashes apart", var/wallbreaker) - if(!damage) - return 0 - attack_animation(user) - playsound(loc, 'sound/weapons/tablehit1.ogg', 40, 1) - visible_message(SPAN_DANGER("[user] [attack_message] [src]!")) - if(wallbreaker) - kill_health() - else - damage_health(damage, DAMAGE_BRUTE) - return 1 - -/obj/structure/girder/bullet_act(var/obj/item/projectile/Proj) - //Girders only provide partial cover. There's a chance that the projectiles will just pass through. (unless you are trying to shoot the girder) - if(Proj.original != src && !prob(cover)) - return PROJECTILE_CONTINUE //pass through - . = ..() - -/obj/structure/girder/on_death() - dismantle() - -/obj/structure/girder/CanFluidPass(var/coming_from) - return TRUE - -/obj/structure/girder/proc/reset_girder() - anchored = TRUE - cover = initial(cover) - revive_health() - state = 0 - icon_state = initial(icon_state) - reinforcing = 0 - if(reinf_material) - reinforce_girder() - -/obj/structure/girder/attackby(obj/item/W, mob/user) - if (user.a_intent == I_HURT) - ..() - return - - if(isWrench(W) && state == 0) - if(anchored && !reinf_material) - playsound(src.loc, 'sound/items/Ratchet.ogg', 100, 1) - to_chat(user, "Now disassembling the girder...") - if(do_after(user, 4 SECONDS, src, DO_PUBLIC_UNIQUE)) - to_chat(user, "You dissasembled the girder!") - dismantle() - else if(!anchored) - playsound(src.loc, 'sound/items/Ratchet.ogg', 100, 1) - to_chat(user, "Now securing the girder...") - if(do_after(user, 4 SECONDS, src, DO_PUBLIC_UNIQUE)) - to_chat(user, "You secured the girder!") - reset_girder() - return - - if(istype(W, /obj/item/gun/energy/plasmacutter) || istype(W, /obj/item/psychic_power/psiblade/master/grand/paramount)) - if(istype(W, /obj/item/gun/energy/plasmacutter)) - var/obj/item/gun/energy/plasmacutter/cutter = W - if(!cutter.slice(user)) - return - playsound(src.loc, 'sound/items/Welder.ogg', 100, 1) - to_chat(user, "Now slicing apart the girder...") - if(do_after(user, (reinf_material ? 4 : 2) SECONDS, src, DO_PUBLIC_UNIQUE)) - to_chat(user, "You slice apart the girder!") - if(reinf_material) - reinf_material.place_dismantled_product(get_turf(src)) - dismantle() - return - - if(istype(W, /obj/item/pickaxe/diamonddrill)) - playsound(src.loc, 'sound/weapons/Genhit.ogg', 100, 1) - if(do_after(user, (reinf_material ? 6 : 4) SECONDS, src, DO_PUBLIC_UNIQUE)) - to_chat(user, "You drill through the girder!") - if(reinf_material) - reinf_material.place_dismantled_product(get_turf(src)) - dismantle() - return - - if(isScrewdriver(W)) - if(state == 2) - playsound(src.loc, 'sound/items/Screwdriver.ogg', 100, 1) - to_chat(user, "Now unsecuring support struts...") - if(do_after(user, 4 SECONDS, src, DO_PUBLIC_UNIQUE)) - to_chat(user, "You unsecured the support struts!") - state = 1 - else if(anchored && !reinf_material) - playsound(src.loc, 'sound/items/Screwdriver.ogg', 100, 1) - reinforcing = !reinforcing - to_chat(user, "\The [src] can now be [reinforcing? "reinforced" : "constructed"]!") - return - - if(isWirecutter(W) && state == 1) - playsound(src.loc, 'sound/items/Wirecutter.ogg', 100, 1) - to_chat(user, "Now removing support struts...") - if(do_after(user, 4 SECONDS, src, DO_PUBLIC_UNIQUE)) - to_chat(user, "You removed the support struts!") - - if(reinf_material) - reinf_material.place_dismantled_product(get_turf(src)) - reinf_material = null - - reset_girder() - return - - if(isCrowbar(W) && state == 0 && anchored) - playsound(src.loc, 'sound/items/Crowbar.ogg', 100, 1) - to_chat(user, "Now dislodging the girder...") - if(do_after(user, 4 SECONDS, src, DO_PUBLIC_UNIQUE)) - to_chat(user, "You dislodged the girder!") - icon_state = "displaced" - anchored = FALSE - health_max = 50 - cover = 25 - return - - if(istype(W, /obj/item/stack/material)) - if(reinforcing && !reinf_material) - if(!reinforce_with_material(W, user)) - return ..() - else - if(!construct_wall(W, user)) - return ..() - return - - ..() - -/obj/structure/girder/proc/construct_wall(obj/item/stack/material/S, mob/user) - if(S.get_amount() < 2) - to_chat(user, "There isn't enough material here to construct a wall.") - return 0 - - var/material/M = SSmaterials.get_material_by_name(S.default_type) - if(!istype(M)) - return 0 - - var/wall_fake - add_hiddenprint(usr) - - if(M.integrity < 50) - to_chat(user, "This material is too soft for use in wall construction.") - return 0 - - to_chat(user, "You begin adding the plating...") - - if(!do_after(user,4 SECONDS, src, DO_PUBLIC_UNIQUE) || !S.use(2)) - return 1 //once we've gotten this far don't call parent attackby() - - if(anchored) - to_chat(user, "You added the plating!") - else - to_chat(user, "You create a false wall! Push on it to open or close the passage.") - wall_fake = 1 - - var/turf/Tsrc = get_turf(src) - Tsrc.ChangeTurf(/turf/simulated/wall) - var/turf/simulated/wall/T = get_turf(src) - T.set_material(M, reinf_material) - if(wall_fake) - T.can_open = 1 - T.add_hiddenprint(usr) - qdel(src) - return 1 - -/obj/structure/girder/proc/reinforce_with_material(obj/item/stack/material/S, mob/user) //if the verb is removed this can be renamed. - if(reinf_material) - to_chat(user, "\The [src] is already reinforced.") - return 0 - - if(S.get_amount() < 2) - to_chat(user, "There isn't enough material here to reinforce the girder.") - return 0 - - var/material/M = S.material - if(!istype(M) || M.integrity < 50) - to_chat(user, "You cannot reinforce \the [src] with that; it is too soft.") - return 0 - - to_chat(user, "Now reinforcing...") - if (!do_after(user, 4 SECONDS, src, DO_PUBLIC_UNIQUE) || !S.use(2)) - return 1 //don't call parent attackby() past this point - to_chat(user, "You added reinforcement!") - - reinf_material = M - reinforce_girder() - return 1 - -/obj/structure/girder/proc/reinforce_girder() - cover = 75 - health_max = 500 - state = 2 - icon_state = "reinforced" - reinforcing = 0 - -/obj/structure/girder/proc/dismantle() - new /obj/item/stack/material/steel(get_turf(src)) - qdel(src) - -/obj/structure/girder/attack_hand(mob/user as mob) - if (MUTATION_HULK in user.mutations) - visible_message("[user] smashes [src] apart!") - dismantle() - return - return ..() - -/obj/structure/girder/cult - icon= 'icons/obj/cult.dmi' - icon_state= "cultgirder" - health_max = 250 - cover = 70 - -/obj/structure/girder/cult/dismantle() - qdel(src) - -/obj/structure/girder/cult/attackby(obj/item/W as obj, mob/user as mob) - if(isWrench(W)) - playsound(src.loc, 'sound/items/Ratchet.ogg', 100, 1) - to_chat(user, "Now disassembling the girder...") - if(do_after(user, 4 SECONDS, src, DO_PUBLIC_UNIQUE)) - to_chat(user, "You dissasembled the girder!") - dismantle() - - else if(istype(W, /obj/item/gun/energy/plasmacutter) || istype(W, /obj/item/psychic_power/psiblade/master/grand/paramount)) - if(istype(W, /obj/item/gun/energy/plasmacutter)) - var/obj/item/gun/energy/plasmacutter/cutter = W - if(!cutter.slice(user)) - return - playsound(src.loc, 'sound/items/Welder.ogg', 100, 1) - to_chat(user, "Now slicing apart the girder...") - if(do_after(user, 3 SECONDS, src, DO_PUBLIC_UNIQUE)) - to_chat(user, "You slice apart the girder!") - dismantle() - - else if(istype(W, /obj/item/pickaxe/diamonddrill)) - playsound(src.loc, 'sound/weapons/Genhit.ogg', 100, 1) - if(do_after(user, 4 SECONDS, src, DO_PUBLIC_UNIQUE)) - to_chat(user, "You drill through the girder!") - dismantle() diff --git a/code/game/objects/structures/grille.dm b/code/game/objects/structures/grille.dm deleted file mode 100644 index 58d69ab941fa9..0000000000000 --- a/code/game/objects/structures/grille.dm +++ /dev/null @@ -1,271 +0,0 @@ -/obj/structure/grille - name = "grille" - desc = "A flimsy lattice of metal rods, with screws to secure it to the floor." - icon = 'icons/obj/grille.dmi' - icon_state = "grille" - color = COLOR_STEEL - density = TRUE - anchored = TRUE - obj_flags = OBJ_FLAG_CONDUCTIBLE - layer = BELOW_OBJ_LAYER - explosion_resistance = 1 - rad_resistance_modifier = 0.1 - health_max = 10 - damage_hitsound = 'sound/effects/grillehit.ogg' - var/init_material = MATERIAL_STEEL - - blend_objects = list(/obj/machinery/door, /turf/simulated/wall) // Objects which to blend with - noblend_objects = list(/obj/machinery/door/window) - -/obj/structure/grille/broken - name = "broken grille" - desc = "The remains of a flimsy lattice of metal rods, with screws to secure it to the floor." - icon_state = "broken" - density = FALSE - health_max = 6 - -/obj/structure/grille/get_material() - return material - -/obj/structure/grille/proc/is_broken() - return istype(src, /obj/structure/grille/broken) - -/obj/structure/grille/Initialize(mapload, var/new_material) - . = ..() - if(!new_material) - new_material = init_material - material = SSmaterials.get_material_by_name(new_material) - if(!istype(material)) - ..() - return INITIALIZE_HINT_QDEL - - var/broken = is_broken() - name = "[broken ? "broken " : null][material.display_name] grille" - desc = "[broken ? "The remains of a" : "A"] lattice of [material.display_name] rods, with screws to secure it to the floor." - color = material.icon_colour - set_max_health(max(1, round(material.integrity / 15))) - update_connections(1) - update_icon() - -/obj/structure/grille/Destroy() - var/turf/location = loc - . = ..() - for(var/obj/structure/grille/G in orange(1, location)) - G.update_connections() - G.queue_icon_update() - -/obj/structure/grille/on_update_icon() - var/on_frame = is_on_frame() - - overlays.Cut() - if (is_broken()) - if(on_frame) - icon_state = "broken_onframe" - else - icon_state = "broken" - else - var/image/I - icon_state = "" - if(on_frame) - for(var/i = 1 to 4) - if(other_connections[i] != "0") - I = image(icon, "grille_other_onframe[connections[i]]", dir = SHIFTL(1, i - 1)) - else - I = image(icon, "grille_onframe[connections[i]]", dir = SHIFTL(1, i - 1)) - overlays += I - else - for(var/i = 1 to 4) - if(other_connections[i] != "0") - I = image(icon, "grille_other[connections[i]]", dir = SHIFTL(1, i - 1)) - else - I = image(icon, "grille[connections[i]]", dir = SHIFTL(1, i - 1)) - overlays += I - -/obj/structure/grille/Bumped(atom/user) - if(ismob(user)) shock(user, 70) - -/obj/structure/grille/attack_hand(mob/user as mob) - - user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN) - playsound(loc, 'sound/effects/grillehit.ogg', 80, 1) - user.do_attack_animation(src) - - var/damage_dealt = 1 - var/attack_message = "kicks" - if(istype(user,/mob/living/carbon/human)) - var/mob/living/carbon/human/H = user - if(H.species.can_shred(H)) - attack_message = "mangles" - damage_dealt = 5 - - if(shock(user, 70)) - return - - if(MUTATION_HULK in user.mutations) - damage_dealt += 5 - else - damage_dealt += 1 - - attack_generic(user,damage_dealt,attack_message) - -/obj/structure/grille/CanPass(atom/movable/mover, turf/target, height=0, air_group=0) - if(air_group || (height==0)) return 1 - if(istype(mover) && mover.checkpass(PASS_FLAG_GRILLE)) - return 1 - else - if(istype(mover, /obj/item/projectile)) - return prob(30) - else - return !density - -/obj/structure/grille/bullet_act(var/obj/item/projectile/Proj) - if(!Proj) return - - //Flimsy grilles aren't so great at stopping projectiles. However they can absorb some of the impact - var/damage = Proj.get_structure_damage() - var/passthrough = 0 - - if(!damage) return - - //20% chance that the grille provides a bit more cover than usual. Support structure for example might take up 20% of the grille's area. - //If they click on the grille itself then we assume they are aiming at the grille itself and the extra cover behaviour is always used. - switch(Proj.damage_type) - if (DAMAGE_BRUTE) - //bullets - if(Proj.original == src || prob(20)) - Proj.damage *= clamp(Proj.damage / 60, 0, 0.5) - if(prob(max((damage-10)/25, 0))*100) - passthrough = 1 - else - Proj.damage *= clamp(Proj.damage / 60, 0, 1) - passthrough = 1 - if (DAMAGE_BURN) - //beams and other projectiles are either blocked completely by grilles or stop half the damage. - if(!(Proj.original == src || prob(20))) - Proj.damage *= 0.5 - passthrough = 1 - - if(passthrough) - . = PROJECTILE_CONTINUE - damage = clamp((damage - Proj.damage) * (Proj.damage_type == DAMAGE_BRUTE ? 0.4 : 1), 0, 10) //if the bullet passes through then the grille avoids most of the damage - - damage_health(damage, Proj.damage_type) - -/obj/structure/grille/attackby(obj/item/W as obj, mob/user as mob) - if (user.a_intent == I_HURT) - if (!(W.obj_flags & OBJ_FLAG_CONDUCTIBLE) || !shock(user, 70)) - ..() - return - - if(isWirecutter(W)) - if(!shock(user, 100)) - playsound(loc, 'sound/items/Wirecutter.ogg', 100, 1) - new /obj/item/stack/material/rods(get_turf(src), is_broken() ? 1 : 2, material.name) - qdel(src) - return - - if((isScrewdriver(W)) && (istype(loc, /turf/simulated) || anchored)) - if(!shock(user, 90)) - playsound(loc, 'sound/items/Screwdriver.ogg', 100, 1) - anchored = !anchored - user.visible_message("[user] [anchored ? "fastens" : "unfastens"] the grille.", \ - "You have [anchored ? "fastened the grille to" : "unfastened the grill from"] the floor.") - update_connections(1) - update_icon() - return - -//window placing - if(istype(W,/obj/item/stack/material)) - var/obj/item/stack/material/ST = W - if(ST.material.opacity > 0.7) - return 0 - - var/dir_to_set = 5 - if(!is_on_frame()) - if(loc == user.loc) - dir_to_set = user.dir - else - dir_to_set = get_dir(loc, user) - if(dir_to_set & (dir_to_set - 1)) //Only works for cardinal direcitons, diagonals aren't supposed to work like this. - to_chat(user, "You can't reach.") - return - place_window(user, loc, dir_to_set, ST) - return - - if (!(W.obj_flags & OBJ_FLAG_CONDUCTIBLE) || !shock(user, 70)) - ..() - -/obj/structure/grille/on_death(new_death_state) - visible_message(SPAN_WARNING("\The [src] falls to pieces!")) - new /obj/item/stack/material/rods(get_turf(src), 1, material.name) - new /obj/structure/grille/broken(get_turf(src), material.name) - qdel(src) - -/obj/structure/grille/broken/on_death(new_death_state) - visible_message(SPAN_WARNING("The remains of \the [src] break apart!")) - new /obj/item/stack/material/rods(get_turf(src), 1, material.name) - qdel(src) - -// shock user with probability prb (if all connections & power are working) -// returns 1 if shocked, 0 otherwise - -/obj/structure/grille/proc/shock(mob/user as mob, prb) - if(!anchored || is_broken()) // anchored/destroyed grilles are never connected - return 0 - if(material && !material.conductive) - return 0 - if(!prob(prb)) - return 0 - if(!in_range(src, user))//To prevent TK and exosuit users from getting shocked - return 0 - var/turf/T = get_turf(src) - var/obj/structure/cable/C = T.get_cable_node() - if(C) - if(electrocute_mob(user, C, src)) - if(C.powernet) - C.powernet.trigger_warning() - var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread - s.set_up(3, 1, src) - s.start() - if(user.stunned) - return 1 - else - return 0 - return 0 - -/obj/structure/grille/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume) - if (!is_broken() && exposed_temperature > material.melting_point) - damage_health(1, DAMAGE_BURN) - ..() - -/obj/structure/grille/cult - name = "cult grille" - desc = "A matrice built out of an unknown material, with some sort of force field blocking air around it." - init_material = MATERIAL_CULT - -/obj/structure/grille/cult/CanPass(atom/movable/mover, turf/target, height = 1.5, air_group = 0) - if(air_group) - return 0 //Make sure air doesn't drain - ..() - -/obj/structure/grille/proc/is_on_frame() - if(locate(/obj/structure/wall_frame) in loc) - return TRUE - -/proc/place_grille(mob/user, loc, obj/item/stack/material/rods/ST) - if(ST.in_use) - return - if(ST.get_amount() < 2) - to_chat(user, "You need at least two rods to do this.") - return - to_chat(user, "Assembling grille...") - ST.in_use = 1 - if (!do_after(user, 1 SECOND, do_flags = DO_DEFAULT | DO_USER_UNIQUE_ACT | DO_PUBLIC_PROGRESS)) - ST.in_use = 0 - return - if(!ST.use(2)) - return - var/obj/structure/grille/F = new /obj/structure/grille(loc, ST.material.name) - to_chat(user, "You assemble a grille") - ST.in_use = 0 - F.add_fingerprint(user) diff --git a/code/game/objects/structures/handrail.dm b/code/game/objects/structures/handrail.dm deleted file mode 100644 index 2f1aa28603894..0000000000000 --- a/code/game/objects/structures/handrail.dm +++ /dev/null @@ -1,13 +0,0 @@ -/obj/structure/handrail - name = "handrail" - icon = 'icons/obj/stationobjs.dmi' - icon_state = "handrail" - desc = "A safety railing with buckles to secure yourself to when floor isn't stable enough." - density = FALSE - anchored = TRUE - can_buckle = 1 - -/obj/structure/handrail/buckle_mob(mob/living/M) - . = ..() - if(.) - playsound(src, 'sound/effects/buckle.ogg', 20) diff --git a/code/game/objects/structures/holosigns.dm b/code/game/objects/structures/holosigns.dm deleted file mode 100644 index 23df2d72999a2..0000000000000 --- a/code/game/objects/structures/holosigns.dm +++ /dev/null @@ -1,35 +0,0 @@ -/obj/structure/holosign - name = "wet floor sign" - desc = "The words flicker as if they mean nothing." - anchored = TRUE - icon = 'icons/obj/janitor.dmi' // move these into their own dmi if we ever add more than 1 of these - var/obj/item/holosign_creator/projector - icon_state = "holosign" - -/obj/structure/holosign/Initialize(var/maploading, var/source_projector) - if(source_projector) - projector = source_projector - projector.signs += src - . =..() - -/obj/structure/holosign/Destroy() - if(projector) - projector.signs -= src - projector = null - return ..() - -/obj/structure/holosign/attack_hand(mob/living/user) - . = ..() - if(.) - return - visible_message(SPAN_NOTICE("\The [user] waves through \the [src], causing it to dissipate.")) - deactivate(user) - -/obj/structure/holosign/attackby(obj/W, mob/living/user) - visible_message(SPAN_NOTICE("\The [user] waves \a [W] through \the [src], causing it to dissipate.")) - deactivate(user) - -/obj/structure/holosign/proc/deactivate(mob/living/user) - user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN) - user.do_attack_animation(src) - qdel(src) \ No newline at end of file diff --git a/code/game/objects/structures/inflatable.dm b/code/game/objects/structures/inflatable.dm deleted file mode 100644 index 0ea0ea8eca196..0000000000000 --- a/code/game/objects/structures/inflatable.dm +++ /dev/null @@ -1,333 +0,0 @@ -/obj/item/inflatable - name = "inflatable" - w_class = ITEM_SIZE_NORMAL - icon = 'icons/obj/inflatable.dmi' - health_max = 10 - var/deploy_path = null - -/obj/item/inflatable/afterattack(atom/target, mob/user, proximity_flag, click_parameters) - if(!deploy_path) - return - if (loc != user) - return - var/turf/T = get_turf(target) - if (!user.TurfAdjacent(T)) - return - if (isspaceturf(T) || isopenspace(T)) - to_chat(user, SPAN_WARNING("You cannot use \the [src] in open space.")) - return - var/obstruction = T.get_obstruction() - if (obstruction) - to_chat(user, SPAN_WARNING("\The [english_list(obstruction)] is blocking that spot.")) - return - user.visible_message( - SPAN_ITALIC("\The [user] starts inflating \an [src]."), - SPAN_ITALIC("You start inflating \the [src]."), - SPAN_ITALIC("You can hear rushing air."), - range = 5 - ) - if (!do_after(user, 1 SECOND, target, DO_PUBLIC_PROGRESS)) - return - obstruction = T.get_obstruction() - if (obstruction) - to_chat(user, SPAN_WARNING("\The [english_list(obstruction)] is blocking that spot.")) - return - user.visible_message( - SPAN_ITALIC("\The [user] finishes inflating \an [src]."), - SPAN_NOTICE("You inflate \the [src]."), - range = 5 - ) - playsound(loc, 'sound/items/zip.ogg', 75, 1) - var/obj/structure/inflatable/R = new deploy_path(T) - transfer_fingerprints_to(R) - R.add_fingerprint(user) - copy_health(src, R) - qdel(src) - -/obj/item/inflatable/wall - name = "inflatable wall" - desc = "A folded membrane which rapidly expands into a large cubical shape on activation." - icon_state = "folded_wall" - deploy_path = /obj/structure/inflatable/wall - -/obj/item/inflatable/door - name = "inflatable door" - desc = "A folded membrane which rapidly expands into a simple door on activation." - icon_state = "folded_door" - item_state = "folded_door" - deploy_path = /obj/structure/inflatable/door - -/obj/structure/inflatable - name = "inflatable" - desc = "An inflated membrane. Do not puncture." - density = TRUE - anchored = TRUE - opacity = 0 - icon = 'icons/obj/inflatable.dmi' - icon_state = "wall" - atmos_canpass = CANPASS_DENSITY - health_max = 10 - damage_hitsound = 'sound/effects/Glasshit.ogg' - - var/undeploy_path = null - var/taped - - var/max_pressure_diff = RIG_MAX_PRESSURE - var/max_temp = SPACE_SUIT_MAX_HEAT_PROTECTION_TEMPERATURE - -/obj/structure/inflatable/wall - name = "inflatable wall" - undeploy_path = /obj/item/inflatable/wall - atmos_canpass = CANPASS_NEVER - -/obj/structure/inflatable/New(location) - ..() - update_nearby_tiles(need_rebuild=1) - -/obj/structure/inflatable/Initialize() - . = ..() - START_PROCESSING(SSobj,src) - -/obj/structure/inflatable/Destroy() - update_nearby_tiles() - STOP_PROCESSING(SSobj,src) - return ..() - -/obj/structure/inflatable/Process() - check_environment() - -/obj/structure/inflatable/proc/check_environment() - var/min_pressure = INFINITY - var/max_pressure = 0 - var/max_local_temp = 0 - - for(var/check_dir in GLOB.cardinal) - var/turf/T = get_step(get_turf(src), check_dir) - var/datum/gas_mixture/env = T.return_air() - var/pressure = env.return_pressure() - min_pressure = min(min_pressure, pressure) - max_pressure = max(max_pressure, pressure) - max_local_temp = max(max_local_temp, env.temperature) - - if(prob(50) && (max_pressure - min_pressure > max_pressure_diff || max_local_temp > max_temp)) - var/initial_damage_percentage = get_damage_percentage() - damage_health(1) - var/damage_percentage = get_damage_percentage() - if (damage_percentage >= 70 && initial_damage_percentage < 70) - visible_message(SPAN_WARNING("\The [src] is barely holding up!")) - else if (damage_percentage >= 30 && initial_damage_percentage < 30) - visible_message(SPAN_WARNING("\The [src] is taking damage!")) - -/obj/structure/inflatable/examine(mob/user) - . = ..() - if (taped) - to_chat(user, SPAN_NOTICE("It's been duct taped in few places.")) - -/obj/structure/inflatable/CanPass(atom/movable/mover, turf/target, height=0, air_group=0) - return 0 - -/obj/structure/inflatable/bullet_act(obj/item/projectile/Proj) - . = ..() - if (health_dead) - return PROJECTILE_CONTINUE - -/obj/structure/inflatable/ex_act(severity) - if (severity == EX_ACT_DEVASTATING) - qdel(src) - return - ..() - -/obj/structure/inflatable/attack_hand(mob/user as mob) - add_fingerprint(user) - return - -/obj/structure/inflatable/attackby(obj/item/W, mob/user) - if(!istype(W) || istype(W, /obj/item/inflatable_dispenser)) return - - if (user.a_intent == I_HURT) - if (W.can_puncture() || W.force > 10) - ..() - return - - if(istype(W, /obj/item/tape_roll) && get_damage_value() >= 3) - if(taped) - to_chat(user, SPAN_NOTICE("\The [src] can't be patched any more with \the [W]!")) - return TRUE - else - taped = TRUE - to_chat(user, SPAN_NOTICE("You patch some damage in \the [src] with \the [W]!")) - restore_health(3) - return TRUE - - ..() - -/obj/structure/inflatable/on_death() - deflate(TRUE) - -/obj/structure/inflatable/CtrlClick() - return hand_deflate() - -/obj/structure/inflatable/proc/deflate(var/violent=0) - playsound(loc, 'sound/machines/hiss.ogg', 75, 1) - if(violent) - visible_message("[src] rapidly deflates!") - var/obj/item/inflatable/torn/R = new /obj/item/inflatable/torn(loc) - src.transfer_fingerprints_to(R) - qdel(src) - else - if(!undeploy_path) - return - visible_message("\The [src] slowly deflates.") - spawn(50) - var/obj/item/inflatable/R = new undeploy_path(src.loc) - src.transfer_fingerprints_to(R) - copy_health(src, R) - qdel(src) - -/obj/structure/inflatable/verb/hand_deflate() - set name = "Deflate" - set category = "Object" - set src in oview(1) - - if(isobserver(usr) || usr.restrained() || !usr.Adjacent(src)) - return FALSE - - verbs -= /obj/structure/inflatable/verb/hand_deflate - deflate() - return TRUE - -/obj/structure/inflatable/attack_generic(var/mob/user, var/damage, var/attack_verb) - attack_animation(user) - if (damage_health(damage)) - user.visible_message("[user] [attack_verb] open the [src]!") - else - user.visible_message("[user] [attack_verb] at [src]!") - return 1 - -/obj/structure/inflatable/CanFluidPass(var/coming_from) - return !density - -/obj/structure/inflatable/door //Based on mineral door code - name = "inflatable door" - density = TRUE - anchored = TRUE - opacity = 0 - - icon_state = "door_closed" - undeploy_path = /obj/item/inflatable/door - - var/state = 0 //closed, 1 == open - var/isSwitchingStates = 0 - -/obj/structure/inflatable/door/attack_ai(mob/user as mob) //those aren't machinery, they're just big fucking slabs of a mineral - if(isAI(user)) //so the AI can't open it - return - else if(isrobot(user)) //but cyborgs can - if(get_dist(user,src) <= 1) //not remotely though - return TryToSwitchState(user) - -/obj/structure/inflatable/door/attack_hand(mob/user as mob) - return TryToSwitchState(user) - -/obj/structure/inflatable/door/CanPass(atom/movable/mover, turf/target, height=0, air_group=0) - if(air_group) - return state - if(istype(mover, /obj/effect/beam)) - return !opacity - return !density - -/obj/structure/inflatable/door/proc/TryToSwitchState(atom/user) - if(isSwitchingStates) return - if(ismob(user)) - var/mob/M = user - if(M.client) - if(iscarbon(M)) - var/mob/living/carbon/C = M - if(!C.handcuffed) - SwitchState() - else - SwitchState() - -/obj/structure/inflatable/door/proc/SwitchState() - if(state) - Close() - else - Open() - update_nearby_tiles() - -/obj/structure/inflatable/door/proc/Open() - isSwitchingStates = 1 - flick("door_opening",src) - sleep(10) - set_density(0) - set_opacity(0) - state = 1 - update_icon() - isSwitchingStates = 0 - -/obj/structure/inflatable/door/proc/Close() - // If the inflatable is blocked, don't close - for(var/turf/A in locs) - var/turf/T = A - var/obstruction = T.get_obstruction() - if (obstruction) - return - - isSwitchingStates = 1 - flick("door_closing",src) - sleep(10) - set_density(1) - set_opacity(0) - state = 0 - update_icon() - isSwitchingStates = 0 - -/obj/structure/inflatable/door/on_update_icon() - if(state) - icon_state = "door_open" - else - icon_state = "door_closed" - -/obj/structure/inflatable/door/deflate(var/violent=0) - playsound(loc, 'sound/machines/hiss.ogg', 75, 1) - if(violent) - visible_message("[src] rapidly deflates!") - var/obj/item/inflatable/door/torn/R = new /obj/item/inflatable/door/torn(loc) - src.transfer_fingerprints_to(R) - qdel(src) - else - visible_message("[src] slowly deflates.") - spawn(50) - var/obj/item/inflatable/door/R = new /obj/item/inflatable/door(loc) - src.transfer_fingerprints_to(R) - qdel(src) - -/obj/item/inflatable/torn - name = "torn inflatable wall" - desc = "A folded membrane which rapidly expands into a large cubical shape on activation. It is too torn to be usable." - icon = 'icons/obj/inflatable.dmi' - icon_state = "folded_wall_torn" - -/obj/item/inflatable/torn/attack_self(mob/user) - to_chat(user, "The inflatable wall is too torn to be inflated!") - add_fingerprint(user) - -/obj/item/inflatable/door/torn - name = "torn inflatable door" - desc = "A folded membrane which rapidly expands into a simple door on activation. It is too torn to be usable." - icon = 'icons/obj/inflatable.dmi' - icon_state = "folded_door_torn" - -/obj/item/inflatable/door/torn/attack_self(mob/user) - to_chat(user, "The inflatable door is too torn to be inflated!") - add_fingerprint(user) - -/obj/item/storage/briefcase/inflatable - name = "inflatable barrier box" - desc = "Contains inflatable walls and doors." - icon_state = "inf_box" - item_state = "painted_secure" - w_class = ITEM_SIZE_LARGE - max_storage_space = DEFAULT_LARGEBOX_STORAGE - can_hold = list(/obj/item/inflatable) - startswith = list(/obj/item/inflatable/door = 2, /obj/item/inflatable/wall = 3) diff --git a/code/game/objects/structures/ironing_board.dm b/code/game/objects/structures/ironing_board.dm deleted file mode 100644 index 592d3f2211056..0000000000000 --- a/code/game/objects/structures/ironing_board.dm +++ /dev/null @@ -1,151 +0,0 @@ -/obj/structure/bed/roller/ironingboard - name = "ironing board" - desc = "An ironing board to unwrinkle your wrinkled clothing." - icon = 'icons/obj/ironing.dmi' - item_form_type = /obj/item/roller/ironingboard - iv_stand = FALSE - - var/obj/item/clothing/cloth // the clothing on the ironing board - var/obj/item/ironingiron/holding // ironing iron on the board - var/list/move_sounds = list( // some nasty sounds to make when moving the board - 'sound/effects/metalscrape1.ogg', - 'sound/effects/metalscrape2.ogg', - 'sound/effects/metalscrape3.ogg' - ) - -/obj/structure/bed/roller/ironingboard/Destroy() - var/turf/T = get_turf(src) - if(cloth) - cloth.forceMove(T) - remove_item(cloth) - if(holding) - holding.forceMove(T) - remove_item(holding) - - . = ..() - -/obj/structure/bed/roller/ironingboard/proc/remove_item(var/obj/item/I) - if(I == cloth) - cloth = null - else if(I == holding) - holding = null - - update_icon() - GLOB.destroyed_event.unregister(I, src, /obj/structure/bed/roller/ironingboard/proc/remove_item) - -// make a screeching noise to drive people mad -/obj/structure/bed/roller/ironingboard/Move() - var/turf/T = get_turf(src) - if(isspace(T) || istype(T, /turf/simulated/floor/carpet)) - return - playsound(T, pick(move_sounds), 75, 1) - - . = ..() - -/obj/structure/bed/roller/ironingboard/examine(mob/user) - . = ..() - if(cloth) - to_chat(user, "\The [icon2html(cloth, user)] [cloth] lies on it.") - -/obj/structure/bed/roller/ironingboard/on_update_icon() - if(density) - icon_state = "up" - else - icon_state = "down" - if(holding) - icon_state = "holding" - - overlays.Cut() - if(cloth) - overlays += new /icon(cloth.icon, cloth.icon_state) - -/obj/structure/bed/roller/ironingboard/attackby(var/obj/item/I, var/mob/user) - if(!density) - if(istype(I,/obj/item/clothing) || istype(I,/obj/item/ironingiron)) - to_chat(user, "[src] isn't deployed!") - return - return ..() - - if(istype(I,/obj/item/clothing)) - if(cloth) - to_chat(user, "[cloth] is already on the ironing table!") - return - if(buckled_mob) - to_chat(user, "[buckled_mob] is already on the ironing table!") - return - - if(user.unEquip(I, src)) - cloth = I - GLOB.destroyed_event.register(I, src, /obj/structure/bed/roller/ironingboard/proc/remove_item) - update_icon() - return - else if(istype(I,/obj/item/ironingiron)) - var/obj/item/ironingiron/R = I - - // anti-wrinkle "massage" - if(buckled_mob && ishuman(buckled_mob)) - var/mob/living/carbon/human/H = buckled_mob - var/zone = user.zone_sel.selecting - var/parsed = parse_zone(zone) - - visible_message("[user] begins ironing [src.buckled_mob]'s [parsed]!", "You begin ironing [buckled_mob]'s [parsed]!") - if(!do_after(user, 4 SECONDS, src, DO_PUBLIC_UNIQUE)) - return - visible_message("[user] irons [src.buckled_mob]'s [parsed]!", "You iron [buckled_mob]'s [parsed]!") - - var/obj/item/organ/external/affecting = H.get_organ(zone) - affecting.take_external_damage(0, 15, used_weapon = "Hot metal") - - return - - if(!cloth) - if(!holding && !R.enabled && user.unEquip(I, src)) - holding = R - GLOB.destroyed_event.register(I, src, /obj/structure/bed/roller/ironingboard/proc/remove_item) - update_icon() - return - to_chat(user, "There isn't anything on the ironing board.") - return - - visible_message("[user] begins ironing [cloth].") - if(!do_after(user, 4 SECONDS, src, DO_PUBLIC_UNIQUE)) - return - - visible_message("[user] finishes ironing [cloth].") - cloth.ironed_state = WRINKLES_NONE - return - - ..() - -/obj/structure/bed/roller/ironingboard/attack_hand(var/mob/user) - if(density) // check if it's deployed - if(holding && user.put_in_hands(holding)) - remove_item(holding) - return - if(cloth && user.put_in_hands(cloth)) - remove_item(cloth) - return - if(!buckled_mob) - to_chat(user, "You fold the ironing table down.") - set_density(0) - else - to_chat(user, "You deploy the ironing table.") - set_density(1) - update_icon() - . = ..() //Takes care of unbuckling. - -/obj/structure/bed/roller/ironingboard/collapse() - var/turf/T = get_turf(src) - if(cloth) - cloth.forceMove(T) - remove_item(cloth) - if(holding) - holding.forceMove(T) - remove_item(holding) - ..() - -/obj/item/roller/ironingboard - name = "ironing board" - desc = "A collapsed ironing board that can be carried around." - icon = 'icons/obj/ironing.dmi' - structure_form_type = /obj/structure/bed/roller/ironingboard diff --git a/code/game/objects/structures/iv_drip.dm b/code/game/objects/structures/iv_drip.dm deleted file mode 100644 index 32d4930503fb7..0000000000000 --- a/code/game/objects/structures/iv_drip.dm +++ /dev/null @@ -1,216 +0,0 @@ -/obj/structure/iv_drip - name = "\improper IV drip" - icon = 'icons/obj/iv_drip.dmi' - anchored = FALSE - density = FALSE - var/mob/living/carbon/human/attached - var/mode = 1 // 1 is injecting, 0 is taking blood. - var/obj/item/reagent_containers/beaker - var/list/transfer_amounts = list(REM, 1, 2) - var/transfer_amount = 1 - -/obj/structure/iv_drip/verb/set_amount_per_transfer_from_this() - set name = "Set IV transfer amount" - set category = "Object" - set src in range(1) - if(!CanPhysicallyInteract(usr)) - to_chat(usr, "You're in no condition to do that!'") - return - var/N = input("Amount per transfer from this:","[src]") as null|anything in transfer_amounts - if(!CanPhysicallyInteract(usr)) // because input takes time and the situation can change - to_chat(usr, "You're in no condition to do that!'") - return - if(N) - transfer_amount = N - -/obj/structure/iv_drip/on_update_icon() - if(attached) - icon_state = "hooked" - else - icon_state = "" - - overlays.Cut() - - if(beaker) - var/datum/reagents/reagents = beaker.reagents - var/percent = round((reagents.total_volume / beaker.volume) * 100) - if(reagents.total_volume) - var/image/filling = image('icons/obj/iv_drip.dmi', src, "reagent") - - switch(percent) - if(0 to 9) filling.icon_state = "reagent0" - if(10 to 24) filling.icon_state = "reagent10" - if(25 to 49) filling.icon_state = "reagent25" - if(50 to 74) filling.icon_state = "reagent50" - if(75 to 79) filling.icon_state = "reagent75" - if(80 to 90) filling.icon_state = "reagent80" - if(91 to INFINITY) filling.icon_state = "reagent100" - filling.icon += reagents.get_color() - overlays += filling - - if(attached) - var/image/light = image('icons/obj/iv_drip.dmi', "light_full") - if(percent < 15) - light.icon_state = "light_low" - else if(percent < 60) - light.icon_state = "light_mid" - overlays += light - -/obj/structure/iv_drip/MouseDrop(over_object, src_location, over_location) - if(!CanMouseDrop(over_object)) - return - if(attached) - drip_detach(usr) - else if(ishuman(over_object)) - hook_up(over_object, usr) - -/obj/structure/iv_drip/attackby(obj/item/W as obj, mob/user as mob) - if (istype(W, /obj/item/reagent_containers/ivbag)) - if(!isnull(src.beaker)) - to_chat(user, "There is already a reagent container loaded!") - return - if(!user.unEquip(W, src)) - return - beaker = W - to_chat(user, "You attach \the [W] to \the [src].") - queue_icon_update() - else - return ..() - -/obj/structure/iv_drip/Destroy() - STOP_PROCESSING(SSobj,src) - attached = null - qdel(beaker) - beaker = null - . = ..() - -/obj/structure/iv_drip/Process() - if(attached) - if(!Adjacent(attached)) - rip_out() - return PROCESS_KILL - else - return PROCESS_KILL - - if(!beaker) - return - - //SSObj fires twice as fast as SSMobs, so gotta slow down to not OD our victims. - if(SSobj.times_fired % 2) - return - - if(mode) // Give blood - if(beaker.volume > 0) - beaker.reagents.trans_to_mob(attached, transfer_amount, CHEM_BLOOD) - queue_icon_update() - else // Take blood - var/amount = beaker.reagents.maximum_volume - beaker.reagents.total_volume - amount = min(amount, 4) - - if(amount == 0) // If the beaker is full, ping - if(prob(5)) visible_message("\The [src] pings.") - return - - if(!attached.should_have_organ(BP_HEART)) - return - - // If the human is losing too much blood, beep. - if(attached.get_blood_volume() < BLOOD_VOLUME_SAFE * 1.05) - visible_message("\The [src] beeps loudly.") - - if(attached.take_blood(beaker,amount)) - queue_icon_update() - -/obj/structure/iv_drip/attack_hand(mob/user as mob) - if(attached) - drip_detach(user) - else if(beaker) - beaker.dropInto(loc) - beaker = null - queue_icon_update() - else - return ..() - -/obj/structure/iv_drip/attack_robot(var/mob/user) - if(Adjacent(user)) - attack_hand(user) - -/obj/structure/iv_drip/verb/drip_detach_verb() - set category = "Object" - set name = "Detach IV Drip" - set src in range(1) - - drip_detach(usr) - -/obj/structure/iv_drip/proc/drip_detach(mob/user) - if (!attached) - to_chat(user, SPAN_WARNING("\The [src] is not attached to anything.")) - return - - if (!CanPhysicallyInteractWith(user, src)) - to_chat(user, SPAN_WARNING("You're in no condition to do that!")) - return - - if (!user.skill_check(SKILL_MEDICAL, SKILL_BASIC)) - rip_out() - else - user.visible_message( - SPAN_WARNING("\The [user] detaches \the [attached] from \the [src]."), - SPAN_NOTICE("You detach \the [attached] from \the [src]."), - ) - attached = null - - queue_icon_update() - STOP_PROCESSING(SSobj, src) - -/obj/structure/iv_drip/verb/toggle_mode() - set category = "Object" - set name = "Toggle IV Mode" - set src in view(1) - if(!CanPhysicallyInteract(usr)) - to_chat(usr, "You're in no condition to do that!'") - return - mode = !mode - to_chat(usr, "The IV drip is now [mode ? "injecting" : "taking blood"].") - -/obj/structure/iv_drip/examine(mob/user, distance) - . = ..() - - if (distance >= 2) - return - - to_chat(user, "The IV drip is [mode ? "injecting" : "taking blood"].") - to_chat(user, "It is set to transfer [transfer_amount]u of chemicals per cycle.") - - if(beaker) - if(beaker.reagents && beaker.reagents.total_volume) - to_chat(usr, "Attached is \a [beaker] with [beaker.reagents.total_volume] units of liquid.") - else - to_chat(usr, "Attached is an empty [beaker].") - else - to_chat(usr, "No chemicals are attached.") - - to_chat(usr, "[attached ? attached : "No one"] is hooked up to it.") - -/obj/structure/iv_drip/proc/rip_out() - visible_message("The needle is ripped out of [src.attached], doesn't that hurt?") - attached.apply_damage(1, DAMAGE_BRUTE, pick(BP_R_ARM, BP_L_ARM), damage_flags=DAMAGE_FLAG_SHARP) - attached = null - -/obj/structure/iv_drip/proc/hook_up(mob/living/carbon/human/target, mob/user) - if(do_IV_hookup(target, user, src)) - attached = target - START_PROCESSING(SSobj,src) - -/proc/do_IV_hookup(mob/living/carbon/human/target, mob/user, obj/IV) - to_chat(user, "You start to hook up \the [target] to \the [IV].") - if(!user.do_skilled(2 SECONDS, SKILL_MEDICAL, target)) - return FALSE - - if(prob(user.skill_fail_chance(SKILL_MEDICAL, 80, SKILL_BASIC))) - user.visible_message("\The [user] fails to find the vein while trying to hook \the [target] up to \the [IV], stabbing them instead!") - target.apply_damage(2, DAMAGE_BRUTE, pick(BP_R_ARM, BP_L_ARM), damage_flags=DAMAGE_FLAG_SHARP) - return FALSE - - user.visible_message("\The [user] hooks \the [target] up to \the [IV].") - return TRUE diff --git a/code/game/objects/structures/janicart.dm b/code/game/objects/structures/janicart.dm deleted file mode 100644 index d5bdaa22c1f12..0000000000000 --- a/code/game/objects/structures/janicart.dm +++ /dev/null @@ -1,289 +0,0 @@ -/obj/structure/janitorialcart - name = "janitorial cart" - desc = "The ultimate in janitorial carts! Has space for water, mops, signs, trash bags, and more!" - icon = 'icons/obj/janitor.dmi' - icon_state = "cart" - anchored = FALSE - density = TRUE - atom_flags = ATOM_FLAG_NO_TEMP_CHANGE | ATOM_FLAG_OPEN_CONTAINER | ATOM_FLAG_CLIMBABLE - //copypaste sorry - var/amount_per_transfer_from_this = 5 //shit I dunno, adding this so syringes stop runtime erroring. --NeoFite - var/obj/item/storage/bag/trash/mybag = null - var/obj/item/mop/mymop = null - var/obj/item/reagent_containers/spray/myspray = null - var/obj/item/device/lightreplacer/myreplacer = null - var/signs = 0 //maximum capacity hardcoded below - - -/obj/structure/janitorialcart/Initialize() - . = ..() - create_reagents(180) - - -/obj/structure/janitorialcart/examine(mob/user, distance) - . = ..() - if(distance <= 1) - to_chat(user, "[src] [icon2html(src, viewers(get_turf(src)))] contains [reagents.total_volume] unit\s of liquid!") - - -/obj/structure/janitorialcart/attackby(obj/item/I, mob/user) - if(istype(I, /obj/item/storage/bag/trash) && !mybag) - if(!user.unEquip(I, src)) - return - mybag = I - update_icon() - updateUsrDialog() - to_chat(user, "You put [I] into [src].") - - else if(istype(I, /obj/item/mop)) - if(I.reagents.total_volume < I.reagents.maximum_volume) //if it's not completely soaked we assume they want to wet it, otherwise store it - if(reagents.total_volume < 1) - to_chat(user, "[src] is out of water!") - else - reagents.trans_to_obj(I, I.reagents.maximum_volume) - to_chat(user, "You wet [I] in [src].") - playsound(loc, 'sound/effects/slosh.ogg', 25, 1) - return - if(!mymop) - if(!user.unEquip(I, src)) - return - mymop = I - update_icon() - updateUsrDialog() - to_chat(user, "You put [I] into [src].") - - else if(istype(I, /obj/item/reagent_containers/spray) && !myspray) - if(!user.unEquip(I, src)) - return - myspray = I - update_icon() - updateUsrDialog() - to_chat(user, "You put [I] into [src].") - - else if(istype(I, /obj/item/device/lightreplacer) && !myreplacer) - if(!user.unEquip(I, src)) - return - myreplacer = I - update_icon() - updateUsrDialog() - to_chat(user, "You put [I] into [src].") - - else if(istype(I, /obj/item/caution)) - if(signs < 4) - if(!user.unEquip(I, src)) - return - signs++ - update_icon() - updateUsrDialog() - to_chat(user, "You put [I] into [src].") - else - to_chat(user, "[src] can't hold any more signs.") - - else if(istype(I, /obj/item/reagent_containers/glass)) - return // So we do not put them in the trash bag as we mean to fill the mop bucket - - else if(mybag) - mybag.attackby(I, user) - - -/obj/structure/janitorialcart/attack_hand(mob/user) - ui_interact(user) - return - -/obj/structure/janitorialcart/ui_interact(var/mob/user, var/ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1) - var/data[0] - data["name"] = capitalize(name) - data["bag"] = mybag ? capitalize(mybag.name) : null - data["mop"] = mymop ? capitalize(mymop.name) : null - data["spray"] = myspray ? capitalize(myspray.name) : null - data["replacer"] = myreplacer ? capitalize(myreplacer.name) : null - data["signs"] = signs ? "[signs] sign\s" : null - - ui = SSnano.try_update_ui(user, src, ui_key, ui, data, force_open) - if(!ui) - ui = new(user, src, ui_key, "janitorcart.tmpl", "Janitorial cart", 240, 160) - ui.set_initial_data(data) - ui.open() - -/obj/structure/janitorialcart/Topic(href, href_list) - if(!in_range(src, usr)) - return - if(!isliving(usr)) - return - var/mob/living/user = usr - - if(href_list["take"]) - switch(href_list["take"]) - if("garbage") - if(mybag) - user.put_in_hands(mybag) - to_chat(user, "You take [mybag] from [src].") - mybag = null - if("mop") - if(mymop) - user.put_in_hands(mymop) - to_chat(user, "You take [mymop] from [src].") - mymop = null - if("spray") - if(myspray) - user.put_in_hands(myspray) - to_chat(user, "You take [myspray] from [src].") - myspray = null - if("replacer") - if(myreplacer) - user.put_in_hands(myreplacer) - to_chat(user, "You take [myreplacer] from [src].") - myreplacer = null - if("sign") - if(signs) - var/obj/item/caution/Sign = locate() in src - if(Sign) - user.put_in_hands(Sign) - to_chat(user, "You take \a [Sign] from [src].") - signs-- - else - warning("[src] signs ([signs]) didn't match contents") - signs = 0 - - update_icon() - updateUsrDialog() - - -/obj/structure/janitorialcart/on_update_icon() - overlays.Cut() - if(mybag) - overlays += "cart_garbage" - if(mymop) - overlays += "cart_mop" - if(myspray) - overlays += "cart_spray" - if(myreplacer) - overlays += "cart_replacer" - if(signs) - overlays += "cart_sign[signs]" - - -//old style retardo-cart -/obj/structure/bed/chair/janicart - name = "janicart" - icon = 'icons/obj/vehicles.dmi' - icon_state = "pussywagon" - anchored = TRUE - density = TRUE - atom_flags = ATOM_FLAG_NO_TEMP_CHANGE | ATOM_FLAG_OPEN_CONTAINER - //copypaste sorry - var/amount_per_transfer_from_this = 5 //shit I dunno, adding this so syringes stop runtime erroring. --NeoFite - var/obj/item/storage/bag/trash/mybag = null - var/callme = "pimpin' ride" //how do people refer to it? - buckle_movable = FALSE - - -/obj/structure/bed/chair/janicart/Initialize() - . = ..() - create_reagents(100) - -/obj/structure/bed/chair/janicart/examine(mob/user, distance) - . = ..() - if(distance > 1) - return - - to_chat(user, "[icon2html(src, user)] This [callme] contains [reagents.total_volume] unit\s of water!") - if(mybag) - to_chat(user, "\A [mybag] is hanging on the [callme].") - - -/obj/structure/bed/chair/janicart/attackby(obj/item/I, mob/user) - if(istype(I, /obj/item/mop)) - if(reagents.total_volume > 1) - reagents.trans_to_obj(I, 2) - to_chat(user, "You wet [I] in the [callme].") - playsound(loc, 'sound/effects/slosh.ogg', 25, 1) - else - to_chat(user, "This [callme] is out of water!") - else if(istype(I, /obj/item/key)) - to_chat(user, "Hold [I] in one of your hands while you drive this [callme].") - else if(istype(I, /obj/item/storage/bag/trash)) - if(!user.unEquip(I, src)) - return - to_chat(user, "You hook the trashbag onto the [callme].") - mybag = I - - -/obj/structure/bed/chair/janicart/attack_hand(mob/user) - if(mybag) - user.put_in_hands(mybag) - mybag = null - else - ..() - - -/obj/structure/bed/chair/janicart/relaymove(mob/user, direction) - if(user.stat || user.stunned || user.weakened || user.paralysis) - unbuckle_mob() - if(istype(user.l_hand, /obj/item/key) || istype(user.r_hand, /obj/item/key)) - step(src, direction) - update_mob() - else - to_chat(user, "You'll need the keys in one of your hands to drive this [callme].") - - -/obj/structure/bed/chair/janicart/Move() - ..() - if(buckled_mob && (buckled_mob.buckled == src)) - buckled_mob.dropInto(loc) - - -/obj/structure/bed/chair/janicart/post_buckle_mob(mob/living/M) - update_mob() - return ..() - - -/obj/structure/bed/chair/janicart/unbuckle_mob() - var/mob/living/M = ..() - if(M) - M.pixel_x = 0 - M.pixel_y = 0 - return M - - -/obj/structure/bed/chair/janicart/set_dir() - ..() - if(buckled_mob) - if(buckled_mob.loc != loc) - buckled_mob.buckled = null //Temporary, so Move() succeeds. - buckled_mob.buckled = src //Restoring - - update_mob() - - -/obj/structure/bed/chair/janicart/proc/update_mob() - if(buckled_mob) - buckled_mob.set_dir(dir) - switch(dir) - if(SOUTH) - buckled_mob.pixel_x = 0 - buckled_mob.pixel_y = 7 - if(WEST) - buckled_mob.pixel_x = 13 - buckled_mob.pixel_y = 7 - if(NORTH) - buckled_mob.pixel_x = 0 - buckled_mob.pixel_y = 4 - if(EAST) - buckled_mob.pixel_x = -13 - buckled_mob.pixel_y = 7 - - -/obj/structure/bed/chair/janicart/bullet_act(var/obj/item/projectile/Proj) - if(buckled_mob) - if(prob(85)) - return buckled_mob.bullet_act(Proj) - visible_message("[Proj] ricochets off the [callme]!") - - -/obj/item/key - name = "key" - desc = "A keyring with a small steel key, and a pink fob reading \"Pussy Wagon\"." - icon = 'icons/obj/vehicles.dmi' - icon_state = "keys" - w_class = ITEM_SIZE_TINY diff --git a/code/game/objects/structures/lattice.dm b/code/game/objects/structures/lattice.dm deleted file mode 100644 index 4b1233b77cd86..0000000000000 --- a/code/game/objects/structures/lattice.dm +++ /dev/null @@ -1,109 +0,0 @@ -/obj/structure/lattice - name = "lattice" - desc = "A lightweight support lattice." - icon = 'icons/obj/smoothlattice.dmi' - icon_state = "lattice0" - density = FALSE - anchored = TRUE - w_class = ITEM_SIZE_NORMAL - layer = LATTICE_LAYER - color = COLOR_STEEL - var/init_material = MATERIAL_STEEL - obj_flags = OBJ_FLAG_NOFALL - -/obj/structure/lattice/get_material() - return material - -/obj/structure/lattice/Initialize(mapload, var/new_material) - . = ..() - DELETE_IF_DUPLICATE_OF(/obj/structure/lattice) - if(!(istype(src.loc, /turf/space) || istype(src.loc, /turf/simulated/open))) - return INITIALIZE_HINT_QDEL - if(!new_material) - new_material = init_material - material = SSmaterials.get_material_by_name(new_material) - if(!istype(material)) - return INITIALIZE_HINT_QDEL - - SetName("[material.display_name] lattice") - desc = "A lightweight support [material.display_name] lattice." - color = material.icon_colour - - update_icon() - if(!mapload) - update_neighbors() - -/obj/structure/lattice/Destroy() - var/turf/old_loc = get_turf(src) - . = ..() - if(old_loc) - update_neighbors(old_loc) - -/obj/structure/lattice/proc/update_neighbors(var/location = loc) - for (var/dir in GLOB.cardinal) - var/obj/structure/lattice/L = locate(/obj/structure/lattice, get_step(location, dir)) - if(L) - L.update_icon() - -/obj/structure/lattice/ex_act(severity) - if(severity <= EX_ACT_HEAVY) - qdel(src) - -/obj/structure/lattice/proc/deconstruct(var/mob/user) - to_chat(user, SPAN_NOTICE("Slicing lattice joints ...")) - new /obj/item/stack/material/rods(loc, 1, material.name) - var/turf/source = get_turf(src) - if(locate(/obj/structure/cable, source)) - for(var/obj/structure/cable/C in source) - C.visible_message(SPAN_WARNING("\The [C] snaps!")) - new/obj/item/stack/cable_coil(source, (C.d1 ? 2 : 1), C.color) - qdel(C) - qdel(src) - -/obj/structure/lattice/attackby(obj/item/C as obj, mob/user as mob) - - if (istype(C, /obj/item/stack/tile/floor)) - var/turf/T = get_turf(src) - T.attackby(C, user) //BubbleWrap - hand this off to the underlying turf instead - return - - if (isCoil(C)) - var/turf/T = get_turf(src) - T.attackby(C, user) //Also handing this off to turf, the checks should confirm the lattice exists - return - - if(isWelder(C)) - var/obj/item/weldingtool/WT = C - if(WT.remove_fuel(0, user)) - deconstruct(user) - return - - if(istype(C, /obj/item/gun/energy/plasmacutter)) - var/obj/item/gun/energy/plasmacutter/cutter = C - if(!cutter.slice(user)) - return - deconstruct(user) - return - - if (istype(C, /obj/item/stack/material/rods)) - var/obj/item/stack/material/rods/R = C - if(R.use(2)) - src.alpha = 0 - playsound(src, 'sound/weapons/Genhit.ogg', 50, 1) - new /obj/structure/catwalk(src.loc) - qdel(src) - return - else - to_chat(user, SPAN_NOTICE("You require at least two rods to complete the catwalk.")) - -/obj/structure/lattice/on_update_icon() - var/dir_sum = 0 - for (var/direction in GLOB.cardinal) - var/turf/T = get_step(src, direction) - if(locate(/obj/structure/lattice, T) || locate(/obj/structure/catwalk, T)) - dir_sum += direction - else - if(!(istype(get_step(src, direction), /turf/space)) && !(istype(get_step(src, direction), /turf/simulated/open))) - dir_sum += direction - - icon_state = "lattice[dir_sum]" diff --git a/code/game/objects/structures/mineral_bath.dm b/code/game/objects/structures/mineral_bath.dm deleted file mode 100644 index 475486aebe989..0000000000000 --- a/code/game/objects/structures/mineral_bath.dm +++ /dev/null @@ -1,159 +0,0 @@ -/obj/structure/adherent_bath - name = "mineral bath" - desc = "A deep, narrow basin filled with a swirling, semi-opaque liquid." - icon = 'icons/obj/machines/adherent.dmi' - icon_state = "bath" - anchored = TRUE - density = TRUE - opacity = FALSE - var/mob/living/occupant - -/obj/structure/adherent_bath/Destroy() - eject_occupant() - . = ..() - -/obj/structure/adherent_bath/return_air() - var/datum/gas_mixture/venus = new(CELL_VOLUME, SYNTH_HEAT_LEVEL_1 - 10) - venus.adjust_multi(GAS_CHLORINE, MOLES_N2STANDARD, GAS_PHORON, MOLES_O2STANDARD) - return venus - -/obj/structure/adherent_bath/attackby(var/obj/item/thing, var/mob/user) - if(istype(thing, /obj/item/grab)) - var/obj/item/grab/G = thing - if(enter_bath(G.affecting)) - qdel(G) - return - . = ..() - -/obj/structure/adherent_bath/proc/enter_bath(var/mob/living/patient, var/mob/user) - - if(!istype(patient)) - return FALSE - - var/self_drop = (user == patient) - - if(!user.Adjacent(src) || !(self_drop || user.Adjacent(patient))) - return FALSE - - if(occupant) - to_chat(user, "\The [src] is occupied.") - return FALSE - - if(self_drop) - user.visible_message("\The [user] begins climbing into \the [src].") - else - user.visible_message("\The [user] begins pushing \the [patient] into \the [src].") - - if(!do_after(user, 3 SECONDS, src, DO_PUBLIC_UNIQUE)) - return FALSE - - if(!user.Adjacent(src) || !(self_drop || user.Adjacent(patient))) - return FALSE - - if(occupant) - to_chat(user, "\The [src] is occupied.") - return FALSE - - if(self_drop) - user.visible_message("\The [user] climbs into \the [src].") - else - user.visible_message("\The [user] pushes \the [patient] into \the [src].") - - playsound(loc, 'sound/effects/slosh.ogg', 50, 1) - patient.forceMove(src) - occupant = patient - START_PROCESSING(SSobj, src) - return TRUE - -/obj/structure/adherent_bath/slam_into(mob/living/L) - L.forceMove(src) - occupant = L - L.Weaken(2) - L.visible_message(SPAN_WARNING("\The [L] falls into \the [src]!")) - playsound(L, "punch", 25, 1, FALSE) - START_PROCESSING(SSobj, src) - -/obj/structure/adherent_bath/attack_hand(var/mob/user) - eject_occupant() - -/obj/structure/adherent_bath/proc/eject_occupant() - if(occupant) - occupant.dropInto(loc) - playsound(loc, 'sound/effects/slosh.ogg', 50, 1) - if(occupant.loc != src) - if(occupant.client) - occupant.client.eye = occupant.client.mob - occupant.client.perspective = MOB_PERSPECTIVE - occupant.regenerate_icons() - occupant = null - STOP_PROCESSING(SSobj, src) - -/obj/structure/adherent_bath/MouseDrop_T(var/atom/movable/O, var/mob/user) - enter_bath(O, user) - -/obj/structure/adherent_bath/relaymove(var/mob/user) - if (!user.incapacitated() && (user == occupant)) - eject_occupant() - -/obj/structure/adherent_bath/Process() - - if(!occupant) - STOP_PROCESSING(SSobj, src) - return - - if(occupant.loc != src) - occupant = null - STOP_PROCESSING(SSobj, src) - return - - if(ishuman(occupant)) - - var/mob/living/carbon/human/H = occupant - var/repaired_organ - - // Replace limbs for crystalline species. - if((H.species.name == SPECIES_ADHERENT || H.species.name == SPECIES_GOLEM) && prob(10)) - for(var/limb_type in H.species.has_limbs) - var/obj/item/organ/external/E = H.organs_by_name[limb_type] - if(E && !E.is_usable() && !(E.limb_flags & ORGAN_FLAG_HEALS_OVERKILL)) - E.removed() - qdel(E) - E = null - if(!E) - var/list/organ_data = H.species.has_limbs[limb_type] - var/limb_path = organ_data["path"] - var/obj/item/organ/O = new limb_path(H) - organ_data["descriptor"] = O.name - H.species.post_organ_rejuvenate(O, H) - to_chat(occupant, "You feel your [O.name] reform in the crystal bath.") - H.update_body() - repaired_organ = TRUE - break - - // Repair crystalline internal organs. - if(prob(10)) - for(var/thing in H.internal_organs) - var/obj/item/organ/internal/I = thing - if(BP_IS_CRYSTAL(I) && I.damage) - I.heal_damage(rand(3,5)) - if(prob(25)) - to_chat(H, "The mineral-rich bath mends your [I.name].") - - // Repair robotic external organs. - if(!repaired_organ && prob(25)) - for(var/thing in H.organs) - var/obj/item/organ/external/E = thing - if(BP_IS_ROBOTIC(E)) - for(var/obj/implanted_object in E.implants) - if(!istype(implanted_object,/obj/item/implant) && !istype(implanted_object,/obj/item/organ/internal/augment) && prob(25)) // We don't want to remove REAL implants. Just shrapnel etc. - E.implants -= implanted_object - to_chat(H, "The mineral-rich bath dissolves the [implanted_object.name].") - qdel(implanted_object) - if(E.brute_dam || E.burn_dam) - E.heal_damage(rand(3,5), rand(3,5), robo_repair = 1) - if(prob(25)) - to_chat(H, "The mineral-rich bath mends your [E.name].") - if(!BP_IS_CRYSTAL(E) && !BP_IS_BRITTLE(E)) - E.status |= ORGAN_BRITTLE - to_chat(H, "It feels a bit brittle, though...") - break diff --git a/code/game/objects/structures/mop_bucket.dm b/code/game/objects/structures/mop_bucket.dm deleted file mode 100644 index 8eb67b711071f..0000000000000 --- a/code/game/objects/structures/mop_bucket.dm +++ /dev/null @@ -1,28 +0,0 @@ -/obj/structure/mopbucket - name = "mop bucket" - desc = "Fill it with water, but don't forget a mop!" - icon = 'icons/obj/janitor.dmi' - icon_state = "mopbucket" - density = TRUE - w_class = ITEM_SIZE_NORMAL - atom_flags = ATOM_FLAG_CLIMBABLE | ATOM_FLAG_OPEN_CONTAINER - var/amount_per_transfer_from_this = 5 //shit I dunno, adding this so syringes stop runtime erroring. --NeoFite - - -/obj/structure/mopbucket/New() - create_reagents(180) - ..() - -/obj/structure/mopbucket/examine(mob/user, distance) - . = ..() - if(distance <= 1) - to_chat(user, "[src] [icon2html(src, user)] contains [reagents.total_volume] unit\s of water!") - -/obj/structure/mopbucket/attackby(obj/item/I, mob/user) - if(istype(I, /obj/item/mop)) - if(reagents.total_volume < 1) - to_chat(user, "\The [src] is out of water!") - else - reagents.trans_to_obj(I, 5) - to_chat(user, "You wet \the [I] in \the [src].") - playsound(loc, 'sound/effects/slosh.ogg', 25, 1) diff --git a/code/game/objects/structures/morgue.dm b/code/game/objects/structures/morgue.dm deleted file mode 100644 index 3bca26c480a37..0000000000000 --- a/code/game/objects/structures/morgue.dm +++ /dev/null @@ -1,441 +0,0 @@ -/* Morgue stuff - * Contains: - * Morgue - * Morgue trays - * Creamatorium - * Creamatorium trays - */ - -/* - * Morgue - */ - -/obj/structure/morgue - name = "morgue" - desc = "Used to keep bodies in until someone fetches them." - icon = 'icons/obj/stationobjs.dmi' - icon_state = "morgue1" - dir = EAST - density = TRUE - var/obj/structure/m_tray/connected = null - anchored = TRUE - -/obj/structure/morgue/Destroy() - if(connected) - qdel(connected) - connected = null - return ..() - -/obj/structure/morgue/proc/update() - if (src.connected) - src.icon_state = "morgue0" - else - if (src.contents.len) - src.icon_state = "morgue2" - else - src.icon_state = "morgue1" - return - -/obj/structure/morgue/ex_act(severity) - switch(severity) - if(EX_ACT_DEVASTATING) - for(var/atom/movable/A as mob|obj in src) - A.forceMove(src.loc) - ex_act(severity) - qdel(src) - return - if(EX_ACT_HEAVY) - if (prob(50)) - for(var/atom/movable/A as mob|obj in src) - A.forceMove(src.loc) - ex_act(severity) - qdel(src) - return - if(EX_ACT_LIGHT) - if (prob(5)) - for(var/atom/movable/A as mob|obj in src) - A.forceMove(src.loc) - ex_act(severity) - qdel(src) - return - return - -/obj/structure/morgue/attack_hand(mob/user as mob) - if (src.connected) - for(var/atom/movable/A as mob|obj in src.connected.loc) - if (!( A.anchored )) - A.forceMove(src) - playsound(src.loc, 'sound/items/Deconstruct.ogg', 50, 1) - qdel(src.connected) - src.connected = null - else - playsound(src.loc, 'sound/items/Deconstruct.ogg', 50, 1) - src.connected = new /obj/structure/m_tray( src.loc ) - step(src.connected, src.dir) - var/turf/T = get_step(src, src.dir) - if (T.contents.Find(src.connected)) - src.connected.connected = src - src.icon_state = "morgue0" - for(var/atom/movable/A as mob|obj in src) - A.forceMove(src.connected.loc) - src.connected.icon_state = "morguet" - src.connected.set_dir(src.dir) - else - qdel(src.connected) - src.connected = null - src.add_fingerprint(user) - update() - return - -/obj/structure/morgue/attack_robot(var/mob/user) - if(Adjacent(user)) - return attack_hand(user) - else return ..() - -/obj/structure/morgue/attackby(P as obj, mob/user as mob) - if (istype(P, /obj/item/pen)) - var/t = input(user, "What would you like the label to be?", text("[]", src.name), null) as text - if (user.get_active_hand() != P) - return - if ((!in_range(src, usr) && src.loc != user)) - return - t = sanitizeSafe(t, MAX_NAME_LEN) - if (t) - src.SetName(text("Morgue- '[]'", t)) - else - src.SetName("Morgue") - src.add_fingerprint(user) - return - -/obj/structure/morgue/relaymove(mob/user as mob) - if (user.stat) - return - src.connected = new /obj/structure/m_tray( src.loc ) - step(src.connected, EAST) - var/turf/T = get_step(src, EAST) - if (T.contents.Find(src.connected)) - src.connected.connected = src - src.icon_state = "morgue0" - for(var/atom/movable/A as mob|obj in src) - A.forceMove(src.connected.loc) - src.connected.icon_state = "morguet" - else - qdel(src.connected) - src.connected = null - return - - -/* - * Morgue tray - */ -/obj/structure/m_tray - name = "morgue tray" - desc = "Apply corpse before closing." - icon = 'icons/obj/stationobjs.dmi' - icon_state = "morguet" - density = TRUE - layer = BELOW_OBJ_LAYER - var/obj/structure/morgue/connected = null - anchored = TRUE - throwpass = 1 - -/obj/structure/m_tray/Destroy() - if(connected && connected.connected == src) - connected.connected = null - connected = null - return ..() - -/obj/structure/m_tray/attack_hand(mob/user as mob) - if (src.connected) - for(var/atom/movable/A as mob|obj in src.loc) - if (!( A.anchored )) - A.forceMove(src.connected) - src.connected.connected = null - src.connected.update() - add_fingerprint(user) - //SN src = null - qdel(src) - return - return - -/obj/structure/m_tray/MouseDrop_T(atom/movable/O as mob|obj, mob/user as mob) - if ((!( istype(O, /atom/movable) ) || O.anchored || get_dist(user, src) > 1 || get_dist(user, O) > 1 || user.contents.Find(src) || user.contents.Find(O))) - return - if (!ismob(O) && !istype(O, /obj/structure/closet/body_bag)) - return - if (!ismob(user) || user.stat || user.lying || user.stunned) - return - O.forceMove(src.loc) - if (user != O) - for(var/mob/B in viewers(user, 3)) - if ((B.client && !( B.blinded ))) - to_chat(B, "\The [user] stuffs [O] into [src]!") - return - - -/* - * Crematorium - */ - -/obj/structure/crematorium - name = "crematorium" - desc = "A human incinerator. Works well on barbeque nights." - icon = 'icons/obj/stationobjs.dmi' - icon_state = "crema1" - density = TRUE - var/obj/structure/c_tray/connected = null - anchored = TRUE - var/cremating = FALSE - var/id = 1 - var/locked = FALSE - -/obj/structure/crematorium/Destroy() - if(connected) - qdel(connected) - connected = null - return ..() - -/obj/structure/crematorium/proc/update() - if(cremating) - icon_state = "crema_active" - else if (src.connected) - src.icon_state = "crema0" - else if (src.contents.len) - src.icon_state = "crema2" - else - src.icon_state = "crema1" - - -/obj/structure/crematorium/ex_act(severity) - switch(severity) - if(EX_ACT_DEVASTATING) - for(var/atom/movable/A as mob|obj in src) - A.forceMove(src.loc) - ex_act(severity) - qdel(src) - return - if(EX_ACT_HEAVY) - if (prob(50)) - for(var/atom/movable/A as mob|obj in src) - A.forceMove(src.loc) - ex_act(severity) - qdel(src) - return - if(EX_ACT_LIGHT) - if (prob(5)) - for(var/atom/movable/A as mob|obj in src) - A.forceMove(src.loc) - ex_act(severity) - qdel(src) - return - return - -/obj/structure/crematorium/attack_hand(mob/user) - if(cremating) - to_chat(usr, "It's locked.") - return - if(src.connected && (src.locked == FALSE)) - for(var/atom/movable/A as mob|obj in src.connected.loc) - if (!( A.anchored )) - A.forceMove(src) - playsound(src.loc, 'sound/items/Deconstruct.ogg', 50, 1) - qdel(src.connected) - src.connected = null - else if(src.locked == 0) - playsound(src.loc, 'sound/items/Deconstruct.ogg', 50, 1) - src.connected = new /obj/structure/c_tray(src.loc) - step(src.connected, dir) - var/turf/T = get_step(src, dir) - if (T.contents.Find(src.connected)) - src.connected.connected = src - src.icon_state = "crema0" - for(var/atom/movable/A as mob|obj in src) - A.forceMove(src.connected.loc) - src.connected.icon_state = "cremat" - else - qdel(src.connected) - src.connected = null - src.add_fingerprint(user) - update() - -/obj/structure/crematorium/attackby(P as obj, mob/user as mob) - if(istype(P, /obj/item/pen)) - var/t = input(user, "What would you like the label to be?", text("[]", src.name), null) as text - if(user.get_active_hand() != P) - return - if((!in_range(src, usr) > 1 && src.loc != user)) - return - t = sanitizeSafe(t, MAX_NAME_LEN) - if(t) - src.SetName(text("Crematorium- '[]'", t)) - else - src.SetName("Crematorium") - src.add_fingerprint(user) - return - -/obj/structure/crematorium/relaymove(mob/user as mob) - if (user.stat || locked) - return - src.connected = new /obj/structure/c_tray( src.loc ) - step(src.connected, SOUTH) - var/turf/T = get_step(src, SOUTH) - if (T.contents.Find(src.connected)) - src.connected.connected = src - src.icon_state = "crema0" - for(var/atom/movable/A as mob|obj in src) - A.forceMove(src.connected.loc) - else - qdel(src.connected) - src.connected = null - return - -/obj/structure/crematorium/proc/cremate(atom/A, mob/user as mob) - if(cremating) - return //don't let you cremate something twice or w/e - - if(contents.len <= 0) - src.audible_message("You hear a hollow crackle.", 1) - return - - else - if(length(search_contents_for(/obj/item/disk/nuclear))) - to_chat(loc, "The button's status indicator flashes yellow, indicating that something important is inside the crematorium, and must be removed.") - return - src.audible_message("You hear a roar as the [src] activates.", 1) - - cremating = 1 - locked = 1 - update() - - for(var/mob/living/M in contents) - admin_attack_log(A, M, "Began cremating their victim.", "Has begun being cremated.", "began cremating") - if(iscarbon(M)) - var/mob/living/carbon/C = M - for(var/I, I < 60, I++) - C.bodytemperature += 50 - C.adjustFireLoss(20) - C.adjustBrainLoss(5) - - if(C.stat == DEAD || !(C in contents)) //In case we die or are removed at any point. - cremating = 0 - update() - break - - sleep(0.5 SECONDS) - if(prob(40)) - var/desperation = rand(1,5) - switch(desperation) //This is messy. A better solution would probably be to make more sounds, but... - if(1) - playsound(src.loc, 'sound/weapons/genhit.ogg', 45, 1) - shake_animation(2) - playsound(src.loc, 'sound/weapons/genhit.ogg', 45, 1) - if(2) - playsound(src.loc, 'sound/effects/grillehit.ogg', 45, 1) - shake_animation(3) - playsound(src.loc, 'sound/effects/grillehit.ogg', 45, 1) - if(3) - playsound(src, 'sound/effects/bang.ogg', 45, 1) - if(prob(50)) - playsound(src, 'sound/effects/bang.ogg', 45, 1) - shake_animation() - else - shake_animation(5) - if(4) - playsound(src, 'sound/effects/clang.ogg', 45, 1) - shake_animation(5) - if(5) - playsound(src, 'sound/weapons/smash.ogg', 50, 1) - if(prob(50)) - playsound(src, 'sound/weapons/smash.ogg', 50, 1) - shake_animation(9) - else - shake_animation() - - - if(M.stat == DEAD) - if(round_is_spooky()) - if(prob(50)) - playsound(src, 'sound/effects/ghost.ogg', 10, 5) - else - playsound(src, 'sound/effects/ghost2.ogg', 10, 5) - - admin_attack_log(M, A, "Cremated their victim.", "Was cremated.", "cremated alive") - M.audible_message("[M]'s screams cease, as does any movement within the [src]. All that remains is a dull, empty silence.") - M.dust() - - for(var/obj/O in contents) //obj instead of obj/item so that bodybags and ashes get destroyed. We dont want tons and tons of ash piling up - qdel(O) - - new /obj/effect/decal/cleanable/ash(src) - sleep(30) - cremating = initial(cremating) - locked = initial(locked) - update() - playsound(src.loc, 'sound/effects/spray.ogg', 50, 1) - return - -/* - * Crematorium tray - */ -/obj/structure/c_tray - name = "crematorium tray" - desc = "Apply body before burning." - icon = 'icons/obj/stationobjs.dmi' - icon_state = "cremat" - density = TRUE - layer = BELOW_OBJ_LAYER - var/obj/structure/crematorium/connected = null - anchored = TRUE - throwpass = 1 - -/obj/structure/c_tray/Destroy() - if(connected && connected.connected == src) - connected.connected = null - connected = null - return ..() - -/obj/structure/c_tray/attack_hand(mob/user as mob) - if (src.connected) - for(var/atom/movable/A as mob|obj in src.loc) - if (!( A.anchored )) - A.forceMove(src.connected) - src.connected.connected = null - src.connected.update() - add_fingerprint(user) - //SN src = null - qdel(src) - return - return - -/obj/structure/c_tray/MouseDrop_T(atom/movable/O as mob|obj, mob/user as mob) - if ((!( istype(O, /atom/movable) ) || O.anchored || get_dist(user, src) > 1 || get_dist(user, O) > 1 || user.contents.Find(src) || user.contents.Find(O))) - return - if (!ismob(O) && !istype(O, /obj/structure/closet/body_bag)) - return - if (!ismob(user) || user.stat || user.lying || user.stunned) - return - O.forceMove(src.loc) - if (user != O) - for(var/mob/B in viewers(user, 3)) - if ((B.client && !( B.blinded ))) - to_chat(B, text("[] stuffs [] into []!", user, O, src)) - -/obj/machinery/button/crematorium - name = "crematorium igniter" - desc = "Burn baby burn!" - icon = 'icons/obj/power.dmi' - icon_state = "crema_switch" - req_access = list(access_crematorium) - id_tag = 1 - -/obj/machinery/button/crematorium/on_update_icon() - return - -/obj/machinery/button/crematorium/activate(mob/user) - if(operating) - return - for(var/obj/structure/crematorium/C in range()) - if (C.id == id_tag) - if (!C.cremating) - C.cremate(user) - ..() // sets operating for click cooldown. diff --git a/code/game/objects/structures/pit.dm b/code/game/objects/structures/pit.dm deleted file mode 100644 index 3d761010e0f2c..0000000000000 --- a/code/game/objects/structures/pit.dm +++ /dev/null @@ -1,170 +0,0 @@ -/obj/structure/pit - name = "pit" - desc = "Watch your step, partner." - icon = 'icons/obj/pit.dmi' - icon_state = "pit1" - blend_mode = BLEND_MULTIPLY - density = FALSE - anchored = TRUE - var/open = 1 - -/obj/structure/pit/attackby(obj/item/W, mob/user) - if( istype(W,/obj/item/shovel) ) - visible_message("\The [user] starts [open ? "filling" : "digging open"] \the [src]") - if( do_after(user, 5 SECONDS, src, DO_PUBLIC_UNIQUE) ) - visible_message("\The [user] [open ? "fills" : "digs open"] \the [src]!") - if(open) - close(user) - else - open() - else - to_chat(user, "You stop shoveling.") - return - if (!open && istype(W,/obj/item/stack/material/wood)) - if(locate(/obj/structure/gravemarker) in src.loc) - to_chat(user, "There's already a grave marker here.") - else - visible_message("\The [user] starts making a grave marker on top of \the [src]") - if( do_after(user, 5 SECONDS, src, DO_PUBLIC_UNIQUE) ) - visible_message("\The [user] finishes the grave marker") - var/obj/item/stack/material/wood/plank = W - plank.use(1) - new/obj/structure/gravemarker(src.loc) - else - to_chat(user, "You stop making a grave marker.") - return - ..() - -/obj/structure/pit/on_update_icon() - icon_state = "pit[open]" - if(istype(loc,/turf/simulated/floor/exoplanet)) - var/turf/simulated/floor/exoplanet/E = loc - if(E.dirt_color) - color = E.dirt_color - -/obj/structure/pit/proc/open() - name = "pit" - desc = "Watch your step, partner." - open = 1 - for(var/atom/movable/A in src) - A.forceMove(src.loc) - update_icon() - -/obj/structure/pit/proc/close(var/user) - name = "mound" - desc = "Some things are better left buried." - open = 0 - for(var/atom/movable/A in src.loc) - if(!A.anchored && A != user) - A.forceMove(src) - update_icon() - -/obj/structure/pit/return_air() - if(open && loc) - return loc.return_air() - else - return null - -/obj/structure/pit/proc/digout(mob/escapee) - var/breakout_time = 1 //2 minutes by default - - if(open) - return - - if(escapee.stat || escapee.restrained()) - return - - escapee.setClickCooldown(100) - to_chat(escapee, "You start digging your way out of \the [src] (this will take about [breakout_time] minute\s)") - visible_message("Something is scratching its way out of \the [src]!") - - for(var/i in 1 to (6*breakout_time * 2)) //minutes * 6 * 5seconds * 2 - playsound(src.loc, 'sound/weapons/bite.ogg', 100, 1) - - if(!do_after(escapee, 5 SECONDS, src, DO_DEFAULT | DO_USER_UNIQUE_ACT | DO_PUBLIC_PROGRESS)) - to_chat(escapee, "You have stopped digging.") - return - if(open) - return - - if(i == 6*breakout_time) - to_chat(escapee, "Halfway there...") - - to_chat(escapee, "You successfuly dig yourself out!") - visible_message("\the [escapee] emerges from \the [src]!") - playsound(src.loc, 'sound/effects/squelch1.ogg', 100, 1) - open() - -/obj/structure/pit/closed - name = "mound" - desc = "Some things are better left buried." - open = 0 - -/obj/structure/pit/closed/Initialize() - . = ..() - close() - -//invisible until unearthed first -/obj/structure/pit/closed/hidden - invisibility = INVISIBILITY_OBSERVER - -/obj/structure/pit/closed/hidden/open() - ..() - set_invisibility(INVISIBILITY_LEVEL_ONE) - -//spoooky -/obj/structure/pit/closed/grave - name = "grave" - icon_state = "pit0" - -/obj/structure/pit/closed/grave/Initialize() - var/obj/structure/closet/coffin/C = new(src.loc) - var/obj/item/remains/human/bones = new(C) - bones.layer = LYING_MOB_LAYER - var/obj/structure/gravemarker/random/R = new(src.loc) - R.generate() - . = ..() - -/obj/structure/gravemarker - name = "grave marker" - desc = "You're not the first." - icon = 'icons/obj/gravestone.dmi' - icon_state = "wood" - pixel_x = 15 - pixel_y = 8 - anchored = TRUE - var/message = "Unknown." - -/obj/structure/gravemarker/cross - icon_state = "cross" - -/obj/structure/gravemarker/examine(mob/user) - . = ..() - to_chat(user, "It says: '[message]'") - -/obj/structure/gravemarker/random/Initialize() - generate() - . = ..() - -/obj/structure/gravemarker/random/proc/generate() - icon_state = pick("wood","cross") - - var/decl/cultural_info/S = SSculture.get_culture(CULTURE_HUMAN) - var/nam = S.get_random_name(pick(MALE,FEMALE)) - var/cur_year = GLOB.using_map.game_year - var/born = cur_year - rand(5,150) - var/died = max(cur_year - rand(0,70),born) - - message = "Here lies [nam], [born] - [died]." - -/obj/structure/gravemarker/attackby(obj/item/W, mob/user) - if(istype(W,/obj/item/material/hatchet)) - visible_message("\The [user] starts hacking away at \the [src] with \the [W].") - if(!do_after(user, 3 SECONDS, src, DO_PUBLIC_UNIQUE)) - visible_message("\The [user] hacks \the [src] apart.") - new /obj/item/stack/material/wood(src) - qdel(src) - if(istype(W,/obj/item/pen)) - var/msg = sanitize(input(user, "What should it say?", "Grave marker", message) as text|null) - if(msg) - message = msg diff --git a/code/game/objects/structures/plasticflaps.dm b/code/game/objects/structures/plasticflaps.dm deleted file mode 100644 index 7cf96c2300864..0000000000000 --- a/code/game/objects/structures/plasticflaps.dm +++ /dev/null @@ -1,113 +0,0 @@ -/obj/structure/plasticflaps //HOW DO YOU CALL THOSE THINGS ANYWAY - name = "\improper plastic flaps" - desc = "Completely impassable - or are they?" - icon = 'icons/obj/stationobjs.dmi' //Change this. - icon_state = "plasticflaps" - density = FALSE - anchored = TRUE - layer = ABOVE_HUMAN_LAYER - explosion_resistance = 5 - - atmos_canpass = CANPASS_PROC - - var/list/mobs_can_pass = list( - /mob/living/bot, - /mob/living/carbon/slime, - /mob/living/simple_animal/passive/mouse, - /mob/living/silicon/robot/drone - ) - var/airtight = FALSE - -/obj/structure/plasticflaps/CanPass(atom/A, turf/T) - if(istype(A) && A.checkpass(PASS_FLAG_GLASS)) - return prob(60) - - var/obj/structure/bed/B = A - if (istype(A, /obj/structure/bed) && B.buckled_mob)//if it's a bed/chair and someone is buckled, it will not pass - return 0 - - var/mob/living/M = A - if(istype(M)) - if(M.lying) - return ..() - for(var/mob_type in mobs_can_pass) - if(istype(A, mob_type)) - return ..() - return issmall(M) - - return ..() - -/obj/structure/plasticflaps/attackby(obj/item/W, mob/user) - if (isCrowbar(W)) - if (anchored) - to_chat(user, "You have to unwrench \the [src] before before deconstruction.") - return - user.visible_message( - SPAN_NOTICE("\The [user] begins deconstructing \the [src]."), - SPAN_NOTICE("You start deconstructing \the [src].") - ) - if(user.do_skilled(3 SECONDS, SKILL_CONSTRUCTION, src)) - user.visible_message( - SPAN_WARNING("\The [user] deconstructs \the [src]."), - SPAN_WARNING("You deconstruct \the [src].") - ) - new /obj/item/stack/material/plastic(loc, 30) - qdel(src) - return - if (isScrewdriver(W)) - if (!anchored) - to_chat(user, "You have to secure \the [src] before before adjusting the airflow.") - return - user.visible_message( - SPAN_WARNING("\The [user] adjusts \the [src], [airtight ? "allowing" : "preventing"] air flow.") - ) - if (airtight) - clear_airtight() - return - become_airtight() - return - if (isWrench(W)) - if (airtight) - to_chat(user,"You have to readjust the airflow before unwrenching \the [src].") - return - wrench_floor_bolts(user) - -/obj/structure/plasticflaps/ex_act(severity) - switch(severity) - if (EX_ACT_DEVASTATING) - qdel(src) - if (EX_ACT_HEAVY) - if (prob(50)) - qdel(src) - if (EX_ACT_LIGHT) - if (prob(5)) - qdel(src) - -/obj/structure/plasticflaps/Destroy() - if (airtight) - clear_airtight() - . = ..() - -/obj/structure/plasticflaps/c_airblock() - if (airtight == TRUE) - return AIR_BLOCKED - return FALSE - -/obj/structure/plasticflaps/proc/become_airtight() - airtight = TRUE - var/turf/simulated/floor/T = get_turf(loc) - if (istype(T)) - update_nearby_tiles() - -/obj/structure/plasticflaps/proc/clear_airtight() - airtight = FALSE - var/turf/simulated/floor/T = get_turf(loc) - if (istype(T)) - update_nearby_tiles() - -/obj/structure/plasticflaps/airtight // airtight defaults to on - airtight = TRUE - -/obj/structure/plasticflaps/airtight/Initialize() - . = ..() - update_nearby_tiles() diff --git a/code/game/objects/structures/railing.dm b/code/game/objects/structures/railing.dm deleted file mode 100644 index 82c42863b46f6..0000000000000 --- a/code/game/objects/structures/railing.dm +++ /dev/null @@ -1,315 +0,0 @@ -/obj/structure/railing - name = "railing" - desc = "A simple bar railing designed to protect against careless trespass." - icon = 'icons/obj/railing.dmi' - icon_state = "railing_preview" - density = TRUE - throwpass = 1 - layer = OBJ_LAYER - climb_speed_mult = 0.25 - anchored = FALSE - atom_flags = ATOM_FLAG_NO_TEMP_CHANGE | ATOM_FLAG_CHECKS_BORDER | ATOM_FLAG_CLIMBABLE | ATOM_FLAG_CAN_BE_PAINTED - obj_flags = OBJ_FLAG_ROTATABLE - health_max = 70 - - var/broken = FALSE - var/neighbor_status = 0 - /// Color code. If set, the railing will be painted this color on init. Primarily used for mapping variants. - var/init_color - -/obj/structure/railing/mapped - material = MATERIAL_ALUMINIUM - anchored = TRUE - init_color = COLOR_GUNMETAL - -/obj/structure/railing/mapped/no_density - density = FALSE - -/obj/structure/railing/mapped/no_density/Initialize() - . = ..() - update_icon() - -/obj/structure/railing/Process() - if(!material || !material.radioactivity) - return - for(var/mob/living/L in range(1,src)) - L.apply_damage(round(material.radioactivity/20), DAMAGE_RADIATION, damage_flags = DAMAGE_FLAG_DISPERSED) - -/obj/structure/railing/Initialize(mapload, material_key) - . = ..() - - if (material_key) - material = material_key - if (!material) - material = DEFAULT_FURNITURE_MATERIAL - if(!isnull(material) && !istype(material)) - material = SSmaterials.get_material_by_name(material) - if(!istype(material)) - return INITIALIZE_HINT_QDEL - - name = "[material.display_name] [initial(name)]" - desc = "A simple [material.display_name] railing designed to protect against careless trespass." - set_max_health(material.integrity / 5) - color = material.icon_colour - - if(material.products_need_process()) - START_PROCESSING(SSobj, src) - if(material.conductive) - obj_flags |= OBJ_FLAG_CONDUCTIBLE - else - obj_flags &= (~OBJ_FLAG_CONDUCTIBLE) - - if (init_color) - set_color(init_color) - - update_icon(FALSE) - -/obj/structure/railing/Destroy() - anchored = FALSE - broken = TRUE - for(var/thing in trange(1, src)) - var/turf/T = thing - for(var/obj/structure/railing/R in T.contents) - R.update_icon() - . = ..() - -/obj/structure/railing/CanPass(atom/movable/mover, turf/target, height=0, air_group=0) - if(!istype(mover) || mover.checkpass(PASS_FLAG_TABLE)) - return TRUE - if(get_dir(loc, target) == dir) - return !density - return TRUE - -/obj/structure/railing/on_death() - visible_message("\The [src] [material.destruction_desc]!") - playsound(loc, 'sound/effects/grillehit.ogg', 50, 1) - material.place_shard(get_turf(usr)) - qdel(src) - -/obj/structure/railing/proc/NeighborsCheck(var/UpdateNeighbors = 1) - neighbor_status = 0 - var/Rturn = turn(src.dir, -90) - var/Lturn = turn(src.dir, 90) - - for(var/obj/structure/railing/R in src.loc) - if (QDELETED(R)) - continue - if ((R.dir == Lturn) && R.anchored) - neighbor_status |= 32 - if (UpdateNeighbors) - R.update_icon(0) - if ((R.dir == Rturn) && R.anchored) - neighbor_status |= 2 - if (UpdateNeighbors) - R.update_icon(0) - for (var/obj/structure/railing/R in get_step(src, Lturn)) - if (QDELETED(R)) - continue - if ((R.dir == src.dir) && R.anchored) - neighbor_status |= 16 - if (UpdateNeighbors) - R.update_icon(0) - for (var/obj/structure/railing/R in get_step(src, Rturn)) - if (QDELETED(R)) - continue - if ((R.dir == src.dir) && R.anchored) - neighbor_status |= 1 - if (UpdateNeighbors) - R.update_icon(0) - for (var/obj/structure/railing/R in get_step(src, (Lturn + src.dir))) - if (QDELETED(R)) - continue - if ((R.dir == Rturn) && R.anchored) - neighbor_status |= 64 - if (UpdateNeighbors) - R.update_icon(0) - for (var/obj/structure/railing/R in get_step(src, (Rturn + src.dir))) - if (QDELETED(R)) - continue - if ((R.dir == Lturn) && R.anchored) - neighbor_status |= 4 - if (UpdateNeighbors) - R.update_icon(0) - -/obj/structure/railing/on_update_icon(var/update_neighbors = TRUE) - NeighborsCheck(update_neighbors) - overlays.Cut() - if (!neighbor_status || !anchored) - icon_state = "railing0-[density]" - if (density)//walking over a railing which is above you is really weird, do not do this if density is 0 - overlays += image(icon, "_railing0-1", layer = ABOVE_HUMAN_LAYER) - else - icon_state = "railing1-[density]" - if (density) - overlays += image(icon, "_railing1-1", layer = ABOVE_HUMAN_LAYER) - if (neighbor_status & 32) - overlays += image(icon, "corneroverlay[density]") - if ((neighbor_status & 16) || !(neighbor_status & 32) || (neighbor_status & 64)) - overlays += image(icon, "frontoverlay_l[density]") - if (density) - overlays += image(icon, "_frontoverlay_l1", layer = ABOVE_HUMAN_LAYER) - if (!(neighbor_status & 2) || (neighbor_status & 1) || (neighbor_status & 4)) - overlays += image(icon, "frontoverlay_r[density]") - if (density) - overlays += image(icon, "_frontoverlay_r1", layer = ABOVE_HUMAN_LAYER) - if(neighbor_status & 4) - var/pix_offset_x = 0 - var/pix_offset_y = 0 - switch(dir) - if(NORTH) - pix_offset_x = 32 - if(SOUTH) - pix_offset_x = -32 - if(EAST) - pix_offset_y = -32 - if(WEST) - pix_offset_y = 32 - overlays += image(icon, "mcorneroverlay[density]", pixel_x = pix_offset_x, pixel_y = pix_offset_y) - if (density) - overlays += image(icon, "_mcorneroverlay1", pixel_x = pix_offset_x, pixel_y = pix_offset_y, layer = ABOVE_HUMAN_LAYER) - -/obj/structure/railing/verb/flip() // This will help push railing to remote places, such as open space turfs - set name = "Flip Railing" - set category = "Object" - set src in oview(1) - - if(usr.incapacitated()) - return 0 - - if(anchored) - to_chat(usr, "It is fastened to the floor and cannot be flipped.") - return 0 - - if(!turf_is_crowded()) - to_chat(usr, "You can't flip \the [src] - something is in the way.") - return 0 - - forceMove(get_step(src, src.dir)) - set_dir(turn(dir, 180)) - update_icon() - -/obj/structure/railing/CheckExit(var/atom/movable/O, var/turf/target) - if(istype(O) && O.checkpass(PASS_FLAG_TABLE)) - return 1 - if(get_dir(O.loc, target) == dir) - if(!density) - return 1 - return 0 - return 1 - -/obj/structure/railing/attackby(var/obj/item/W, var/mob/user) - if (user.a_intent == I_HURT) - ..() - return - - // Handle harm intent grabbing/tabling. - if(istype(W, /obj/item/grab) && get_dist(src,user)<2) - var/obj/item/grab/G = W - if(istype(G.affecting, /mob/living/carbon/human)) - var/obj/occupied = turf_is_crowded() - if(occupied) - to_chat(user, "There's \a [occupied] in the way.") - return - - if(G.force_danger()) - if(user.a_intent == I_HURT) - visible_message("[G.assailant] slams [G.affecting]'s face against \the [src]!") - playsound(loc, 'sound/effects/grillehit.ogg', 50, 1) - var/blocked = G.affecting.get_blocked_ratio(BP_HEAD, DAMAGE_BRUTE, damage = 8) - if (prob(30 * (1 - blocked))) - G.affecting.Weaken(5) - G.affecting.apply_damage(8, DAMAGE_BRUTE, BP_HEAD) - else - if (get_turf(G.affecting) == get_turf(src)) - G.affecting.forceMove(get_step(src, src.dir)) - else - G.affecting.dropInto(loc) - G.affecting.Weaken(5) - visible_message("[G.assailant] throws \the [G.affecting] over \the [src].") - else - to_chat(user, "You need a better grip to do that!") - return - - // Dismantle - if(isWrench(W)) - if(!anchored) - playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1) - if(do_after(user, 2 SECONDS, src, DO_PUBLIC_UNIQUE)) - if(anchored) - return - user.visible_message("\The [user] dismantles \the [src].", "You dismantle \the [src].") - material.place_sheet(loc, 2) - qdel(src) - // Wrench Open - else - playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1) - if(density) - user.visible_message("\The [user] wrenches \the [src] open.", "You wrench \the [src] open.") - set_density(FALSE) - else - user.visible_message("\The [user] wrenches \the [src] closed.", "You wrench \the [src] closed.") - set_density(TRUE) - update_icon() - return - - // Repair - if(isWelder(W)) - var/obj/item/weldingtool/F = W - if(F.isOn()) - if(!health_damaged()) - to_chat(user, "\The [src] does not need repairs.") - return - playsound(src.loc, 'sound/items/Welder.ogg', 50, 1) - if(do_after(user, 2 SECONDS, src, DO_PUBLIC_UNIQUE)) - if(!health_damaged()) - return - user.visible_message("\The [user] repairs some damage to \the [src].", "You repair some damage to \the [src].") - restore_health(get_max_health() / 5) - return - - // Install - if(isScrewdriver(W)) - if(!density) - to_chat(user, "You need to wrench \the [src] from back into place first.") - return - user.visible_message(anchored ? "\The [user] begins unscrew \the [src]." : "\The [user] begins fasten \the [src]." ) - playsound(loc, 'sound/items/Screwdriver.ogg', 75, 1) - if(do_after(user, 1 SECOND, src, DO_PUBLIC_UNIQUE) && density) - to_chat(user, (anchored ? "You have unfastened \the [src] from the floor." : "You have fastened \the [src] to the floor.")) - anchored = !anchored - update_icon() - return - - ..() - -/obj/structure/railing/can_climb(var/mob/living/user, post_climb_check=FALSE, check_silicon=TRUE) - . = ..() - if (. && get_turf(user) == get_turf(src)) - var/turf/T = get_step(src, src.dir) - if (T.density || T.turf_is_crowded(user)) - to_chat(user, "You can't climb there, the way is blocked.") - return 0 - -/obj/structure/railing/do_climb(var/mob/living/user) - . = ..() - if(.) - if(!anchored || material.is_brittle()) - kill_health() // Fatboy - - user.jump_layer_shift() - addtimer(CALLBACK(user, /mob/living/proc/jump_layer_shift_end), 2) - -/obj/structure/railing/slam_into(mob/living/L) - var/turf/target_turf = get_turf(src) - if (target_turf == get_turf(L)) - target_turf = get_step(src, dir) - if (!target_turf.density && !target_turf.turf_is_crowded(L)) - L.forceMove(target_turf) - L.visible_message(SPAN_WARNING("\The [L] [pick("falls", "flies")] over \the [src]!")) - L.Weaken(2) - playsound(L, 'sound/effects/grillehit.ogg', 25, 1, FALSE) - else - ..() - -/obj/structure/railing/set_color(color) - src.color = color ? color : material.icon_colour diff --git a/code/game/objects/structures/rubble.dm b/code/game/objects/structures/rubble.dm deleted file mode 100644 index 6d2f5f9a51eae..0000000000000 --- a/code/game/objects/structures/rubble.dm +++ /dev/null @@ -1,121 +0,0 @@ -/obj/structure/rubble - name = "pile of rubble" - desc = "One man's garbage is another man's treasure." - icon = 'icons/obj/rubble.dmi' - icon_state = "base" - appearance_flags = DEFAULT_APPEARANCE_FLAGS | PIXEL_SCALE - opacity = 1 - density = TRUE - anchored = TRUE - health_max = 40 - - var/list/loot = list(/obj/item/cell,/obj/item/stack/material/iron,/obj/item/stack/material/rods) - var/lootleft = 1 - var/emptyprob = 95 - var/is_rummaging = 0 - -/obj/structure/rubble/New() - if(prob(emptyprob)) - lootleft = 0 - ..() - -/obj/structure/rubble/Initialize() - . = ..() - update_icon() - -/obj/structure/rubble/on_update_icon() - overlays.Cut() - var/list/parts = list() - for(var/i = 1 to 7) - var/image/I = image(icon,"rubble[rand(1,15)]") - if(prob(10)) - var/atom/A = pick(loot) - if(initial(A.icon) && initial(A.icon_state)) - I.icon = initial(A.icon) - I.icon_state = initial(A.icon_state) - I.color = initial(A.color) - if(!lootleft) - I.color = "#54362e" - I.appearance_flags = DEFAULT_APPEARANCE_FLAGS | PIXEL_SCALE - I.pixel_x = rand(-16,16) - I.pixel_y = rand(-16,16) - I.SetTransform(rotation = rand(0,360)) - parts += I - overlays = parts - if(lootleft) - overlays += image(icon,"twinkle[rand(1,3)]") - -/obj/structure/rubble/attack_hand(mob/user) - if(!is_rummaging) - if(!lootleft) - to_chat(user, "There's nothing left in this one but unusable garbage...") - return - visible_message("[user] starts rummaging through \the [src].") - is_rummaging = 1 - if(do_after(user, 3 SECONDS, src, DO_PUBLIC_UNIQUE)) - var/obj/item/booty = pickweight(loot) - booty = new booty(loc) - lootleft-- - update_icon() - to_chat(user, "You find \a [booty] and pull it carefully out of \the [src].") - is_rummaging = 0 - else - to_chat(user, "Someone is already rummaging here!") - -/obj/structure/rubble/attackby(var/obj/item/I, var/mob/user) - if (user.a_intent == I_HURT) - ..() - return - - if (istype(I, /obj/item/pickaxe)) - var/obj/item/pickaxe/P = I - visible_message("[user] starts clearing away \the [src].") - if(do_after(user, P.digspeed, src, DO_PUBLIC_UNIQUE)) - visible_message("[user] clears away \the [src].") - if(lootleft && prob(1)) - var/obj/item/booty = pickweight(loot) - booty = new booty(loc) - qdel(src) - return - - ..() - -/obj/structure/rubble/on_death() - visible_message(SPAN_WARNING("\The [src] breaks apart!")) - qdel(src) - -/obj/structure/rubble/house - loot = list(/obj/item/archaeological_find/bowl, - /obj/item/archaeological_find/remains, - /obj/item/archaeological_find/bowl/urn, - /obj/item/archaeological_find/cutlery, - /obj/item/archaeological_find/statuette, - /obj/item/archaeological_find/instrument, - /obj/item/archaeological_find/container, - /obj/item/archaeological_find/mask, - /obj/item/archaeological_find/coin, - /obj/item/archaeological_find, - /obj/item/archaeological_find/material = 5, - /obj/item/archaeological_find/material/exotic = 2, - /obj/item/archaeological_find/parts = 3 - ) - -/obj/structure/rubble/lab - emptyprob = 30 - loot = list( - /obj/item/archaeological_find/statuette, - /obj/item/archaeological_find/instrument, - /obj/item/archaeological_find/mask, - /obj/item/archaeological_find, - /obj/item/archaeological_find/material = 10, - /obj/item/archaeological_find/material/exotic = 10, - /obj/item/archaeological_find/parts = 10 - ) - -/obj/structure/rubble/war - emptyprob = 95 //can't have piles upon piles of guns - loot = list(/obj/item/archaeological_find/knife, - /obj/item/archaeological_find/gun, - /obj/item/archaeological_find/laser, - /obj/item/archaeological_find/sword, - /obj/item/archaeological_find/katana) diff --git a/code/game/objects/structures/safe.dm b/code/game/objects/structures/safe.dm deleted file mode 100644 index f596b2824c112..0000000000000 --- a/code/game/objects/structures/safe.dm +++ /dev/null @@ -1,181 +0,0 @@ -/* -CONTAINS: -SAFES -FLOOR SAFES -*/ - -//SAFES -/obj/structure/safe - name = "safe" - desc = "A huge chunk of metal with a dial embedded in it. Fine print on the dial reads \"Scarborough Arms - 2 tumbler safe, guaranteed thermite resistant, explosion resistant, and assistant resistant.\"." - icon = 'icons/obj/structures.dmi' - icon_state = "safe" - anchored = TRUE - density = TRUE - var/open = 0 //is the safe open? - var/tumbler_1_pos //the tumbler position- from 0 to 72 - var/tumbler_1_open //the tumbler position to open at- 0 to 72 - var/tumbler_2_pos - var/tumbler_2_open - var/dial = 0 //where is the dial pointing? - var/space = 0 //the combined w_class of everything in the safe - var/maxspace = 24 //the maximum combined w_class of stuff in the safe - -/obj/structure/safe/Initialize() - for(var/obj/item/I in loc) - if(space >= maxspace) - return - if(I.w_class + space <= maxspace) //todo replace with internal storage or something - space += I.w_class - I.forceMove(src) - . = ..() - tumbler_1_pos = rand(0, 72) - tumbler_1_open = rand(0, 72) - - tumbler_2_pos = rand(0, 72) - tumbler_2_open = rand(0, 72) - -/obj/structure/safe/proc/check_unlocked(mob/user as mob, canhear) - if(user && canhear) - if(tumbler_1_pos == tumbler_1_open) - to_chat(user, "You hear a [pick("tonk", "krunk", "plunk")] from [src].") - if(tumbler_2_pos == tumbler_2_open) - to_chat(user, "You hear a [pick("tink", "krink", "plink")] from [src].") - if(tumbler_1_pos == tumbler_1_open && tumbler_2_pos == tumbler_2_open) - if(user) visible_message("[pick("Spring", "Sprang", "Sproing", "Clunk", "Krunk")]!") - return 1 - return 0 - - -/obj/structure/safe/proc/decrement(num) - num -= 1 - if(num < 0) - num = 71 - return num - - -/obj/structure/safe/proc/increment(num) - num += 1 - if(num > 71) - num = 0 - return num - - -/obj/structure/safe/on_update_icon() - if(open) - icon_state = "[initial(icon_state)]-open" - else - icon_state = initial(icon_state) - - -/obj/structure/safe/attack_hand(mob/user as mob) - user.set_machine(src) - var/dat = "
              " - dat += "[open ? "Close" : "Open"] [src] | - [dial * 5] +" - if(open) - dat += "" - for(var/i = contents.len, i>=1, i--) - var/obj/item/P = contents[i] - dat += "" - dat += "
              [P.name]
              " - show_browser(user, "[name][dat]", "window=safe;size=350x300") - - -/obj/structure/safe/Topic(href, href_list) - if(!ishuman(usr)) return - var/mob/living/carbon/human/user = usr - - var/canhear = 0 - if(istype(user.l_hand, /obj/item/clothing/accessory/stethoscope) || istype(user.r_hand, /obj/item/clothing/accessory/stethoscope)) - canhear = 1 - - if(href_list["open"]) - if(check_unlocked()) - to_chat(user, "You [open ? "close" : "open"] [src].") - open = !open - update_icon() - updateUsrDialog() - return - else - to_chat(user, "You can't [open ? "close" : "open"] [src], the lock is engaged!") - return - - if(href_list["decrement"]) - dial = decrement(dial) - if(dial == tumbler_1_pos + 1 || dial == tumbler_1_pos - 71) - tumbler_1_pos = decrement(tumbler_1_pos) - if(canhear) - to_chat(user, "You hear a [pick("clack", "scrape", "clank")] from [src].") - if(tumbler_1_pos == tumbler_2_pos + 37 || tumbler_1_pos == tumbler_2_pos - 35) - tumbler_2_pos = decrement(tumbler_2_pos) - if(canhear) - to_chat(user, "You hear a [pick("click", "chink", "clink")] from [src].") - check_unlocked(user, canhear) - updateUsrDialog() - return - - if(href_list["increment"]) - dial = increment(dial) - if(dial == tumbler_1_pos - 1 || dial == tumbler_1_pos + 71) - tumbler_1_pos = increment(tumbler_1_pos) - if(canhear) - to_chat(user, "You hear a [pick("clack", "scrape", "clank")] from [src].") - if(tumbler_1_pos == tumbler_2_pos - 37 || tumbler_1_pos == tumbler_2_pos + 35) - tumbler_2_pos = increment(tumbler_2_pos) - if(canhear) - to_chat(user, "You hear a [pick("click", "chink", "clink")] from [src].") - check_unlocked(user, canhear) - updateUsrDialog() - return - - if(href_list["retrieve"]) - show_browser(user, "", "window=safe") // Close the menu - - var/obj/item/P = locate(href_list["retrieve"]) in src - if(open) - if(P && in_range(src, user)) - user.put_in_hands(P) - updateUsrDialog() - - -/obj/structure/safe/attackby(obj/item/I as obj, mob/user as mob) - if(open) - if(I.w_class + space <= maxspace) - if(!user.unEquip(I, src)) - return - space += I.w_class - to_chat(user, "You put [I] in [src].") - updateUsrDialog() - return - else - to_chat(user, "[I] won't fit in [src].") - return - else - if(istype(I, /obj/item/clothing/accessory/stethoscope)) - to_chat(user, "Hold [I] in one of your hands while you manipulate the dial.") - return - - -/obj/structure/safe/ex_act(severity) - return - -//FLOOR SAFES -/obj/structure/safe/floor - name = "floor safe" - icon_state = "floorsafe" - density = FALSE - level = 1 //underfloor - layer = BELOW_OBJ_LAYER - -/obj/structure/safe/floor/Initialize() - . = ..() - var/turf/T = loc - if(istype(T) && !T.is_plating()) - hide(1) - update_icon() - -/obj/structure/safe/floor/hide(var/intact) - set_invisibility(intact ? 101 : 0) - -/obj/structure/safe/floor/hides_under_flooring() - return 1 diff --git a/code/game/objects/structures/seaweed.dm b/code/game/objects/structures/seaweed.dm deleted file mode 100644 index d3bc8722ffc64..0000000000000 --- a/code/game/objects/structures/seaweed.dm +++ /dev/null @@ -1,30 +0,0 @@ -/obj/structure/flora/seaweed - name = "seaweed" - desc = "Waving fronds of ocean greenery." - icon = 'icons/obj/structures/plants.dmi' - icon_state = "seaweed" - anchored = TRUE - density = FALSE - opacity = FALSE - -/obj/structure/flora/seaweed/mid - icon_state = "seaweed1" - -/obj/structure/flora/seaweed/large - icon_state = "seaweed2" - -/obj/structure/flora/seaweed/glow - name = "glowing seaweed" - desc = "It shines with an eerie bioluminescent light." - icon_state = "glowweed1" - -/obj/structure/flora/seaweed/glow/Initialize() - . = ..() - set_light(0.6, 0.1, 4, 3, "#00fff4") - icon_state = "glowweed[rand(1,3)]" - -/obj/effect/decal/cleanable/lichen - name = "lichen" - desc = "Damp and mossy plant life." - icon_state = "lichen" - icon = 'icons/obj/structures/plants.dmi' \ No newline at end of file diff --git a/code/game/objects/structures/showcase.dm b/code/game/objects/structures/showcase.dm deleted file mode 100644 index 555f437c78e67..0000000000000 --- a/code/game/objects/structures/showcase.dm +++ /dev/null @@ -1,8 +0,0 @@ -/obj/structure/showcase - name = "showcase" - icon = 'icons/obj/stationobjs.dmi' - icon_state = "showcase_1" - desc = "A stand with the empty body of a cyborg bolted to it." - density = TRUE - anchored = TRUE - unacidable = TRUE diff --git a/code/game/objects/structures/signs.dm b/code/game/objects/structures/signs.dm deleted file mode 100644 index 2f0ec352695d0..0000000000000 --- a/code/game/objects/structures/signs.dm +++ /dev/null @@ -1,460 +0,0 @@ -/obj/structure/sign - icon = 'icons/obj/decals.dmi' - anchored = TRUE - opacity = 0 - density = FALSE - layer = ABOVE_WINDOW_LAYER - w_class = ITEM_SIZE_NORMAL - -/obj/structure/sign/ex_act(severity) - switch(severity) - if(EX_ACT_DEVASTATING) - qdel(src) - return - if(EX_ACT_HEAVY) - qdel(src) - return - if(EX_ACT_LIGHT) - qdel(src) - return - else - return - -/obj/structure/sign/attackby(obj/item/tool as obj, mob/user as mob) //deconstruction - if(isScrewdriver(tool) && !istype(src, /obj/structure/sign/double)) - to_chat(user, "You unfasten the sign with your [tool.name].") - var/obj/item/sign/S = new(src.loc) - S.SetName(name) - S.desc = desc - S.icon_state = icon_state - S.sign_state = icon_state - qdel(src) - else ..() - -/obj/item/sign - name = "sign" - desc = "" - icon = 'icons/obj/decals.dmi' - w_class = ITEM_SIZE_NORMAL //big - var/sign_state = "" - -/obj/item/sign/attackby(obj/item/tool as obj, mob/user as mob) //construction - if(istype(tool, /obj/item/screwdriver) && isturf(user.loc)) - var/direction = input("In which direction?", "Select direction.") in list("North", "East", "South", "West", "Cancel") - if(direction == "Cancel") return - var/obj/structure/sign/S = new(user.loc) - switch(direction) - if("North") - S.pixel_y = 32 - if("East") - S.pixel_x = 32 - if("South") - S.pixel_y = -32 - if("West") - S.pixel_x = -32 - else return - S.SetName(name) - S.desc = desc - S.icon_state = sign_state - to_chat(user, "You fasten \the [S] with your [tool].") - qdel(src) - else ..() - -/obj/structure/sign/double/map - name = "map" - desc = "A framed map." - -/obj/structure/sign/double/map/New() - ..() - desc = "A framed map of the [station_name()]." - -/obj/structure/sign/double/map/left - icon_state = "map-left" - -/obj/structure/sign/double/map/right - icon_state = "map-right" - -/obj/structure/sign/monkey_painting - name = "\improper Mr. Deempisi portrait" - 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" - -/obj/structure/sign/warning - name = "\improper WARNING" - icon_state = "securearea" - -/obj/structure/sign/warning/detailed - icon_state = "securearea2" - -/obj/structure/sign/warning/New() - ..() - desc = "A warning sign which reads '[sanitize(name)]'." - -/obj/structure/sign/thera - icon_state = "thera" - name = "\improper THERA SAFE ROOM" - desc = "A detailed sign that reads 'Temporary Housing for Emergency, Radioactive, Atmospheric. This location is unsuitable for extended Habitation. Do not shelter here beyond immediate need.'" - -/obj/structure/sign/warning/airlock - name = "\improper EXTERNAL AIRLOCK" - icon_state = "doors" - -/obj/structure/sign/warning/biohazard - name = "\improper BIOHAZARD" - icon_state = "bio" - -/obj/structure/sign/warning/bomb_range - name = "\improper BOMB RANGE" - icon_state = "blast" - -/obj/structure/sign/warning/caution - name = "\improper CAUTION" - -/obj/structure/sign/warning/compressed_gas - name = "\improper COMPRESSED GAS" - icon_state = "hikpa" - -/obj/structure/sign/warning/deathsposal - name = "\improper DISPOSAL LEADS TO SPACE" - icon_state = "deathsposal" - -/obj/structure/sign/warning/docking_area - name = "\improper KEEP CLEAR: DOCKING AREA" - -/obj/structure/sign/warning/engineering_access - name = "\improper ENGINEERING ACCESS" - -/obj/structure/sign/warning/fall - name = "\improper FALL HAZARD" - icon_state = "falling" - -/obj/structure/sign/warning/fire - name = "\improper DANGER: FIRE" - icon_state = "fire" - -/obj/structure/sign/warning/high_voltage - name = "\improper HIGH VOLTAGE" - icon_state = "shock" - -/obj/structure/sign/warning/hot_exhaust - name = "\improper HOT EXHAUST" - icon_state = "fire" - -/obj/structure/sign/warning/internals_required - name = "\improper INTERNALS REQUIRED" - -/obj/structure/sign/warning/lethal_turrets - name = "\improper LETHAL TURRETS" - icon_state = "turrets" - -/obj/structure/sign/warning/lethal_turrets/New() - ..() - desc += " Enter at own risk!" - -/obj/structure/sign/warning/mail_delivery - name = "\improper MAIL DELIVERY" - icon_state = "mail" - -/obj/structure/sign/warning/moving_parts - name = "\improper MOVING PARTS" - icon_state = "movingparts" - -/obj/structure/sign/warning/nosmoking_1 - name = "\improper NO SMOKING" - icon_state = "nosmoking" - -/obj/structure/sign/warning/nosmoking_2 - name = "\improper NO SMOKING" - icon_state = "nosmoking2" - -/obj/structure/sign/warning/nosmoking_burned - name = "\improper NO SMOKING" - icon_state = "nosmoking2_b" - -/obj/structure/sign/warning/nosmoking_burned/Initialize() - . = ..() - desc += " It looks charred." - -/obj/structure/sign/warning/smoking - name = "\improper SMOKING" - icon_state = "smoking" - -/obj/structure/sign/warning/smoking/Initialize() - . = ..() - desc += " Hell yeah." - -/obj/structure/sign/warning/pods - name = "\improper ESCAPE PODS" - icon_state = "podsnorth" - -/obj/structure/sign/warning/pods/south - name = "\improper ESCAPE PODS" - icon_state = "podssouth" - -/obj/structure/sign/warning/pods/east - name = "\improper ESCAPE PODS" - icon_state = "podseast" - -/obj/structure/sign/warning/pods/west - name = "\improper ESCAPE PODS" - icon_state = "podswest" - -/obj/structure/sign/warning/radioactive - name = "\improper RADIOACTIVE AREA" - icon_state = "radiation" - -/obj/structure/sign/warning/secure_area - name = "\improper SECURE AREA" - -/obj/structure/sign/warning/secure_area/armory - name = "\improper ARMORY" - icon_state = "armory" - -/obj/structure/sign/warning/server_room - name = "\improper SERVER ROOM" - icon_state = "server" - -/obj/structure/sign/warning/siphon_valve - name = "\improper SIPHON VALVE" - -/obj/structure/sign/warning/vacuum - name = "\improper HARD VACUUM AHEAD" - icon_state = "space" - -/obj/structure/sign/warning/vent_port - name = "\improper EJECTION/VENTING PORT" - -/obj/structure/sign/redcross - name = "medbay" - desc = "The Intergalactic symbol of Medical institutions. You'll probably get help here." - icon_state = "redcross" - -/obj/structure/sign/greencross - name = "medbay" - desc = "The Intergalactic symbol of Medical institutions. You'll probably get help here." - icon_state = "greencross" - -/obj/structure/sign/bluecross_1 - name = "infirmary" - desc = "The Intergalactic symbol of Medical institutions. You'll probably get help here." - icon_state = "bluecross" - -/obj/structure/sign/bluecross_2 - name = "infirmary" - desc = "The Intergalactic symbol of Medical institutions. You'll probably get help here." - icon_state = "bluecross2" - -/obj/structure/sign/goldenplaque - name = "The Most Robust Men Award for Robustness" - desc = "To be Robust is not an action or a way of life, but a mental state. Only those with the force of Will strong enough to act during a crisis, saving friend from foe, are truly Robust. Stay Robust my friends." - icon_state = "goldenplaque" - -/obj/structure/sign/goldenplaque/security - name = "motivational plaque" - desc = "A plaque engraved with a generic motivational quote and picture. ' Greater love hath no man than this, that a man lay down his life for his friends. John 15:13 " - -/obj/structure/sign/goldenplaque/medical - name = "medical certificate" - desc = "A picture next to a long winded description of medical certifications and degrees." - -/obj/structure/sign/kiddieplaque - name = "\improper AI developers plaque" - desc = "An extremely long list of names and job titles and a picture of the design team responsible for building this AI Core." - icon_state = "kiddieplaque" - -/obj/structure/sign/atmosplaque - name = "\improper engineering memorial plaque" - desc = "This plaque memorializes those engineers and technicians who made the ultimate sacrifice to save their vessel and its crew." - icon_state = "atmosplaque" - -/obj/structure/sign/emergonly - name = "\improper EMERGENCY ONLY" - desc = "A warning sign which reads 'EMERGENCY ONLY!'." - icon_state = "emerg" - -/obj/structure/sign/noidle - name = "\improper NO IDLING" - desc = "A warning sign which reads 'NO IDLING!'." - icon_state = "noidle" - -/obj/structure/sign/double/maltesefalcon //The sign is 64x32, so it needs two tiles. ;3 - name = "The Maltese Falcon" - desc = "The Maltese Falcon, Space Bar and Grill." - -/obj/structure/sign/double/maltesefalcon/left - icon_state = "maltesefalcon-left" - -/obj/structure/sign/double/maltesefalcon/right - icon_state = "maltesefalcon-right" - -/obj/structure/sign/warning/science - name = "\improper SCIENCE!" - icon_state = "science" - -/obj/structure/sign/warning/science/anomalous_materials - name = "\improper ANOMALOUS MATERIALS" - -/obj/structure/sign/warning/science/mass_spectrometry - name = "\improper MASS SPECTROMETRY" - -/obj/structure/sign/science_1 - name = "\improper RESEARCH WING" - desc = "A sign labelling the research wing." - icon_state = "science" - -/obj/structure/sign/science_2 - name = "\improper RESEARCH" - desc = "A sign labelling an area where research is performed." - icon_state = "science2" - -/obj/structure/sign/xenobio_1 - name = "\improper XENOBIOLOGY" - desc = "A sign labelling an area as a place where xenobiological entites are researched." - icon_state = "xenobio" - -/obj/structure/sign/xenobio_2 - name = "\improper XENOBIOLOGY" - desc = "A sign labelling an area as a place where xenobiological entites are researched." - icon_state = "xenobio2" - -/obj/structure/sign/xenobio_3 - name = "\improper XENOBIOLOGY" - desc = "A sign labelling an area as a place where xenobiological entites are researched." - icon_state = "xenobio3" - -/obj/structure/sign/xenobio_4 - name = "\improper XENOBIOLOGY" - desc = "A sign labelling an area as a place where xenobiological entites are researched." - icon_state = "xenobio4" - -/obj/structure/sign/xenoarch - name = "\improper XENOARCHAEOLOGY" - desc = "A sign labelling an area as a place where xenoarchaeological finds are researched." - icon_state = "xenobio4" - -/obj/structure/sign/chemistry - name = "\improper CHEMISTRY" - desc = "A sign labelling an area containing chemical equipment." - icon_state = "chemistry" - -/obj/structure/sign/xenoflora - name = "\improper XENOFLORA" - desc = "A sign labelling an area as a place where xenobiological plants are researched." - icon_state = "hydro4" - -/obj/structure/sign/botany - name = "\improper BOTANY" - desc = "A warning sign which reads 'BOTANY!'." - icon_state = "hydro3" - -/obj/structure/sign/hydro - name = "\improper HYDROPONICS" - desc = "A sign labelling an area as a place where plants are grown." - icon_state = "hydro" - -/obj/structure/sign/hydrostorage - name = "\improper HYDROPONICS STORAGE" - desc = "A sign labelling an area as a place where plant growing supplies are kept." - icon_state = "hydro3" - -/obj/structure/sign/directions - name = "direction sign" - desc = "A direction sign, claiming to know the way." - icon_state = "direction" - -/obj/structure/sign/directions/New() - ..() - desc = "A direction sign, pointing out which way \the [src] is." - -/obj/structure/sign/directions/science - name = "\improper Research Division" - icon_state = "direction_sci" - -/obj/structure/sign/directions/janitor - name = "\improper Custodial Closet" - icon_state = "direction_jan" - -/obj/structure/sign/directions/engineering - name = "\improper Engineering Bay" - icon_state = "direction_eng" - -/obj/structure/sign/directions/security - name = "\improper Security Wing" - icon_state = "direction_sec" - -/obj/structure/sign/directions/medical - name = "\improper Medical Bay" - icon_state = "direction_med" - -/obj/structure/sign/directions/evac - name = "\improper Evacuation Wing" - icon_state = "direction_evac" - -/obj/structure/sign/directions/bridge - name = "\improper Bridge" - icon_state = "direction_bridge" - -/obj/structure/sign/directions/supply - name = "\improper Supply Office" - icon_state = "direction_supply" - -/obj/structure/sign/directions/infirmary - name = "\improper Infirmary" - icon_state = "direction_infirm" - -/obj/structure/sign/directions/examroom - name = "\improper Exam Room" - icon_state = "examroom" - -/obj/structure/sign/directions/infm - name = "\improper Infirmary" - icon_state = "infm" - -/obj/structure/sign/directions/med - name = "\improper Medbay" - icon_state = "med" - -/obj/structure/sign/deck/bridge - name = "\improper Bridge Deck" - icon_state = "deck-b" - -/obj/structure/sign/deck/first - name = "\improper First Deck" - icon_state = "deck-1" - -/obj/structure/sign/deck/second - name = "\improper Second Deck" - icon_state = "deck-2" - -/obj/structure/sign/deck/third - name = "\improper Third Deck" - icon_state = "deck-3" - -/obj/structure/sign/deck/fourth - name = "\improper Fourth Deck" - icon_state = "deck-4" - -/obj/structure/sign/deck/fifth - name = "\improper Fifth Deck" - icon_state = "deck-5" - -/obj/item/sign/medipolma - name = "medical diploma" - desc = "A fancy print laminated paper that certifies that its bearer is indeed a Doctor of Medicine, graduated from a medical school in one of fringe systems. You don't recognize the name though, and half of latin words they used do not actually exist." - icon = 'icons/obj/decals.dmi' - icon_state = "goldenplaque" - sign_state = "goldenplaque" - var/claimant - -/obj/item/sign/medipolma/attack_self(mob/user) - if(!claimant) - to_chat(user, "You fill in your name in the blanks with a permanent marker.") - claimant = user.real_name - ..() - -/obj/item/sign/medipolma/examine(mob/user) - . = ..() - if(claimant) - to_chat(user,"This one belongs to Dr.[claimant], MD.") - else - to_chat(user,"The name is left blank for some reason.") diff --git a/code/game/objects/structures/skele_stand.dm b/code/game/objects/structures/skele_stand.dm deleted file mode 100644 index cb1e592cff41e..0000000000000 --- a/code/game/objects/structures/skele_stand.dm +++ /dev/null @@ -1,92 +0,0 @@ -/obj/structure/skele_stand - name = "hanging skeleton model" - density = TRUE - anchored = FALSE - icon = 'icons/obj/surgery.dmi' - icon_state = "hangskele" - desc = "It's an anatomical model of a human skeletal system made of plaster." - var/list/swag = list() - var/cooldown - -/obj/structure/skele_stand/New() - ..() - gender = pick(MALE, FEMALE) - -/obj/structure/skele_stand/proc/rattle_bones(mob/user, atom/thingy) - if((world.time - cooldown) <= 1 SECOND) - return //reduces spam. - if(user) - visible_message("\The [user] pushes on [src][thingy?" with \the [thingy]":""], giving the bones a good rattle.") - else - visible_message("\The [src] rattles on \his stand upon hitting [thingy?"\the [thingy]":"something"].") - cooldown = world.time - playsound(loc, 'sound/effects/bonerattle.ogg', 40) - -/obj/structure/skele_stand/attack_hand(mob/user) - if(swag.len) - var/obj/item/clothing/C = input("What piece of clothing do you want to remove?", "Skeleton undressing") as null|anything in list_values(swag) - if(C) - swag -= get_key_by_value(swag, C) - user.put_in_hands(C) - to_chat(user,"You take \the [C] off \the [src]") - update_icon() - else - rattle_bones(user, null) - -/obj/structure/skele_stand/Bumped(atom/thing) - rattle_bones(null, thing) - -/obj/structure/skele_stand/examine(mob/user) - . = ..() - if(swag.len) - var/list/swagnames = list() - for(var/slot in swag) - var/obj/item/clothing/C = swag[slot] - if (C) - swagnames += C.get_examine_line() - to_chat(user,"[gender == MALE ? "He" : "She"] is wearing [english_list(swagnames)].") - -/obj/structure/skele_stand/attackby(obj/item/W, mob/user) - if(istype(W,/obj/item/pen)) - var/nuname = sanitize(input(user,"What do you want to name this skeleton as?","Skeleton Christening",name) as text|null) - if(nuname && CanPhysicallyInteract(user)) - SetName(nuname) - return 1 - if(istype(W,/obj/item/clothing)) - var/slot - if(istype(W, /obj/item/clothing/under)) - slot = slot_w_uniform_str - else if(istype(W, /obj/item/clothing/suit)) - slot = slot_wear_suit_str - else if(istype(W, /obj/item/clothing/head)) - slot = slot_head_str - else if(istype(W, /obj/item/clothing/shoes)) - slot = slot_shoes_str - else if(istype(W, /obj/item/clothing/mask)) - slot = slot_wear_mask_str - if(slot) - if(swag[slot]) - to_chat(user,"There is already that kind of clothing on \the [src].") - else if(user.unEquip(W, src)) - swag[slot] = W - update_icon() - return 1 - else - rattle_bones(user, W) - -/obj/structure/skele_stand/Destroy() - for(var/slot in swag) - var/obj/item/I = swag[slot] - I.forceMove(loc) - . = ..() - -/obj/structure/skele_stand/on_update_icon() - overlays.Cut() - for(var/slot in swag) - var/obj/item/I = swag[slot] - overlays += I.get_mob_overlay(null, slot) - -/obj/structure/skele_stand/maint - name = "decayed skeleton model" - icon_state = "hangskelemaint" - desc = "It's an anatomical model of a human skeletal system made of plaster. The plaster on this one is a bit decayed, due to repeated clothing swapping." \ No newline at end of file diff --git a/code/game/objects/structures/stasis_cage.dm b/code/game/objects/structures/stasis_cage.dm deleted file mode 100644 index b84d3fb5215aa..0000000000000 --- a/code/game/objects/structures/stasis_cage.dm +++ /dev/null @@ -1,80 +0,0 @@ -/obj/structure/stasis_cage - name = "stasis cage" - desc = "A high-tech animal cage, designed to keep contained fauna docile and safe." - icon = 'icons/obj/storage.dmi' - icon_state = "stasis_cage" - density = TRUE - layer = ABOVE_OBJ_LAYER - - var/mob/living/simple_animal/contained - -/obj/structure/stasis_cage/Initialize() - . = ..() - - var/mob/living/simple_animal/A = locate() in loc - if(A) - contain(A) - -/obj/structure/stasis_cage/attack_hand(var/mob/user) - try_release(user) - -/obj/structure/stasis_cage/attack_robot(var/mob/user) - if(Adjacent(user)) - try_release(user) - -/obj/structure/stasis_cage/proc/try_release(mob/user) - if(!contained) - to_chat(user, SPAN_NOTICE("There's no animals inside \the [src]")) - return - user.visible_message("[user] begins undoing the locks and latches on \the [src].") - if(do_after(user, 2 SECONDS, src, DO_PUBLIC_UNIQUE)) - user.visible_message("[user] releases \the [contained] from \the [src]!") - release() - -/obj/structure/stasis_cage/on_update_icon() - if(contained) - icon_state = "[initial(icon_state)]_on" - else - icon_state = initial(icon_state) - -/obj/structure/stasis_cage/examine(mob/user) - . = ..() - if(contained) - to_chat(user, "\The [contained] is kept inside.") - -/obj/structure/stasis_cage/proc/contain(var/mob/living/simple_animal/animal) - if(contained || !istype(animal)) - return - - contained = animal - animal.forceMove(src) - animal.in_stasis = 1 - update_icon() - -/obj/structure/stasis_cage/proc/release() - if(!contained) - return - - contained.dropInto(src) - contained.in_stasis = 0 - contained = null - update_icon() - -/obj/structure/stasis_cage/Destroy() - release() - return ..() - -/mob/living/simple_animal/MouseDrop(var/obj/structure/stasis_cage/over_object) - if(istype(over_object) && Adjacent(over_object) && CanMouseDrop(over_object, usr)) - - if(!stat && !istype(src.buckled, /obj/effect/energy_net)) - to_chat(usr, "It's going to be difficult to convince \the [src] to move into \the [over_object] without capturing it in a net.") - return - - usr.visible_message("[usr] begins stuffing \the [src] into \the [over_object].", "You begin stuffing \the [src] into \the [over_object].") - Bumped(usr) - if(do_after(usr, 2 SECONDS, over_object, DO_PUBLIC_UNIQUE)) - usr.visible_message("[usr] has stuffed \the [src] into \the [over_object].", "You have stuffed \the [src] into \the [over_object].") - over_object.contain(src) - else - return ..() diff --git a/code/game/objects/structures/stool_bed_chair_nest/bed.dm b/code/game/objects/structures/stool_bed_chair_nest/bed.dm deleted file mode 100644 index 347d7e6994e9f..0000000000000 --- a/code/game/objects/structures/stool_bed_chair_nest/bed.dm +++ /dev/null @@ -1,337 +0,0 @@ -/* Beds... get your mind out of the gutter, they're for sleeping! - * Contains: - * Beds - * Roller beds - * Mattresses - */ - -/* - * Beds - */ -/obj/structure/bed - name = "bed" - desc = "This is used to lie in, sleep in or strap on." - icon = 'icons/obj/furniture.dmi' - icon_state = "bed" - anchored = TRUE - can_buckle = 1 - buckle_dir = SOUTH - buckle_lying = 1 - var/material/padding_material - var/base_icon = "bed" - var/material_alteration = MATERIAL_ALTERATION_ALL - var/buckling_sound = 'sound/effects/buckle.ogg' - -/obj/structure/bed/New(newloc, new_material = DEFAULT_FURNITURE_MATERIAL, new_padding_material) - ..(newloc) - color = null - material = SSmaterials.get_material_by_name(new_material) - if(!istype(material)) - qdel(src) - return - if(new_padding_material) - padding_material = SSmaterials.get_material_by_name(new_padding_material) - update_icon() - -/obj/structure/bed/get_material() - return material - -// Reuse the cache/code from stools, todo maybe unify. -/obj/structure/bed/on_update_icon() - // Prep icon. - icon_state = "" - overlays.Cut() - // Base icon. - var/cache_key = "[base_icon]-[material.name]" - if(isnull(stool_cache[cache_key])) - var/image/I = image('icons/obj/furniture.dmi', base_icon) - if(material_alteration & MATERIAL_ALTERATION_COLOR) - I.color = material.icon_colour - stool_cache[cache_key] = I - overlays |= stool_cache[cache_key] - // Padding overlay. - if(padding_material) - var/padding_cache_key = "[base_icon]-padding-[padding_material.name]" - if(isnull(stool_cache[padding_cache_key])) - var/image/I = image(icon, "[base_icon]_padding") - if(material_alteration & MATERIAL_ALTERATION_COLOR) - I.color = padding_material.icon_colour - stool_cache[padding_cache_key] = I - overlays |= stool_cache[padding_cache_key] - - // Strings. - if(material_alteration & MATERIAL_ALTERATION_NAME) - SetName(padding_material ? "[padding_material.adjective_name] [initial(name)]" : "[material.adjective_name] [initial(name)]") //this is not perfect but it will do for now. - - if(material_alteration & MATERIAL_ALTERATION_DESC) - desc = initial(desc) - desc += padding_material ? " It's made of [material.use_name] and covered with [padding_material.use_name]." : " It's made of [material.use_name]." - -/obj/structure/bed/CanPass(atom/movable/mover, turf/target, height=0, air_group=0) - if(istype(mover) && mover.checkpass(PASS_FLAG_TABLE)) - return 1 - else - return ..() - -/obj/structure/bed/ex_act(severity) - switch(severity) - if(EX_ACT_DEVASTATING) - qdel(src) - return - if(EX_ACT_HEAVY) - if (prob(50)) - qdel(src) - return - if(EX_ACT_LIGHT) - if (prob(5)) - qdel(src) - return - -/obj/structure/bed/attackby(obj/item/W as obj, mob/user as mob) - if(isWrench(W)) - playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1) - dismantle() - qdel(src) - else if(istype(W,/obj/item/stack)) - if(padding_material) - to_chat(user, "\The [src] is already padded.") - return - var/obj/item/stack/C = W - if(C.get_amount() < 1) // How?? - qdel(C) - return - var/padding_type //This is awful but it needs to be like this until tiles are given a material var. - if(istype(W,/obj/item/stack/tile/carpet)) - padding_type = MATERIAL_CARPET - else if(istype(W,/obj/item/stack/material)) - var/obj/item/stack/material/M = W - if(M.material && (M.material.flags & MATERIAL_PADDING)) - padding_type = "[M.material.name]" - if(!padding_type) - to_chat(user, "You cannot pad \the [src] with that.") - return - C.use(1) - if(!istype(src.loc, /turf)) - src.forceMove(get_turf(src)) - to_chat(user, "You add padding to \the [src].") - add_padding(padding_type) - return - - else if(isWirecutter(W)) - if(!padding_material) - to_chat(user, "\The [src] has no padding to remove.") - return - to_chat(user, "You remove the padding from \the [src].") - playsound(src, 'sound/items/Wirecutter.ogg', 100, 1) - remove_padding() - - else if(istype(W, /obj/item/grab)) - var/obj/item/grab/G = W - var/mob/living/affecting = G.affecting - user.visible_message("[user] attempts to buckle [affecting] into \the [src]!") - if(do_after(user, 2 SECONDS, src, DO_PUBLIC_UNIQUE)) - if(user_buckle_mob(affecting, user)) - qdel(W) - else - ..() - -/obj/structure/bed/buckle_mob(mob/living/M) - . = ..() - if(. && buckling_sound) - playsound(src, buckling_sound, 20) - -/obj/structure/bed/Move() - . = ..() - if(buckled_mob) - buckled_mob.forceMove(src.loc) - -/obj/structure/bed/forceMove() - . = ..() - if(buckled_mob) - if(isturf(src.loc)) - buckled_mob.forceMove(src.loc) - else - unbuckle_mob() - -/obj/structure/bed/proc/remove_padding() - if(padding_material) - padding_material.place_sheet(get_turf(src)) - padding_material = null - update_icon() - -/obj/structure/bed/proc/add_padding(var/padding_type) - padding_material = SSmaterials.get_material_by_name(padding_type) - update_icon() - -/obj/structure/bed/proc/dismantle() - material.place_sheet(get_turf(src)) - if(padding_material) - padding_material.place_sheet(get_turf(src)) - -/obj/structure/bed/psych - name = "psychiatrist's couch" - desc = "For prime comfort during psychiatric evaluations." - icon_state = "psychbed" - base_icon = "psychbed" - -/obj/structure/bed/psych/New(var/newloc) - ..(newloc,MATERIAL_WALNUT, MATERIAL_LEATHER_GENERIC) - -/obj/structure/bed/padded/New(var/newloc) - ..(newloc,MATERIAL_ALUMINIUM,MATERIAL_CLOTH) - -/* - * Roller beds - */ -/obj/structure/bed/roller - name = "roller bed" - icon = 'icons/obj/rollerbed.dmi' - icon_state = "down" - anchored = FALSE - buckle_pixel_shift = "x=0;y=0;z=6" - var/item_form_type = /obj/item/roller //The folded-up object path. - var/obj/item/reagent_containers/beaker - var/iv_attached = 0 - var/iv_stand = TRUE - -/obj/structure/bed/roller/on_update_icon() - overlays.Cut() - if(density) - icon_state = "up" - else - icon_state = "down" - if(beaker) - var/image/iv = image(icon, "iv[iv_attached]") - var/percentage = round((beaker.reagents.total_volume / beaker.volume) * 100, 25) - var/image/filling = image(icon, "iv_filling[percentage]") - filling.color = beaker.reagents.get_color() - iv.overlays += filling - if(percentage < 25) - iv.overlays += image(icon, "light_low") - if(density) - iv.pixel_y = 6 - overlays += iv - -/obj/structure/bed/roller/attackby(obj/item/I, mob/user) - if(isWrench(I) || istype(I, /obj/item/stack) || isWirecutter(I)) - return 1 - if(iv_stand && !beaker && istype(I, /obj/item/reagent_containers/ivbag)) - if(!user.unEquip(I, src)) - return - to_chat(user, "You attach \the [I] to \the [src].") - beaker = I - queue_icon_update() - return 1 - ..() - -/obj/structure/bed/roller/attack_hand(mob/living/user) - if(beaker && !buckled_mob) - remove_beaker(user) - else - ..() - -/obj/structure/bed/roller/proc/collapse() - visible_message("[usr] collapses [src].") - new item_form_type(get_turf(src)) - qdel(src) - -/obj/structure/bed/roller/post_buckle_mob(mob/living/M) - . = ..() - if(M == buckled_mob) - set_density(1) - queue_icon_update() - else - set_density(0) - if(iv_attached) - detach_iv(M, usr) - queue_icon_update() - -/obj/structure/bed/roller/Process() - if(!iv_attached || !buckled_mob || !beaker) - return PROCESS_KILL - - //SSObj fires twice as fast as SSMobs, so gotta slow down to not OD our victims. - if(SSobj.times_fired % 2) - return - - if(beaker.volume > 0) - beaker.reagents.trans_to_mob(buckled_mob, beaker.amount_per_transfer_from_this, CHEM_BLOOD) - queue_icon_update() - -/obj/structure/bed/roller/proc/remove_beaker(mob/user) - to_chat(user, "You detach \the [beaker] to \the [src].") - iv_attached = FALSE - beaker.dropInto(loc) - beaker = null - queue_icon_update() - -/obj/structure/bed/roller/proc/attach_iv(mob/living/carbon/human/target, mob/user) - if(!beaker) - return - if(do_IV_hookup(target, user, beaker)) - iv_attached = TRUE - queue_icon_update() - START_PROCESSING(SSobj,src) - -/obj/structure/bed/roller/proc/detach_iv(mob/living/carbon/human/target, mob/user) - visible_message("\The [target] is taken off the IV on \the [src].") - iv_attached = FALSE - queue_icon_update() - STOP_PROCESSING(SSobj,src) - -/obj/structure/bed/roller/MouseDrop(over_object, src_location, over_location) - ..() - if(!CanMouseDrop(over_object)) return - if(!(ishuman(usr) || isrobot(usr))) return - if(over_object == buckled_mob && beaker) - if(iv_attached) - detach_iv(buckled_mob, usr) - else - attach_iv(buckled_mob, usr) - return - if(over_object != usr && ishuman(over_object)) - if(user_buckle_mob(over_object, usr)) - attach_iv(buckled_mob, usr) - return - if(beaker) - remove_beaker(usr) - return - if(buckled_mob) return - collapse() - -/obj/item/roller - name = "roller bed" - desc = "A collapsed roller bed that can be carried around." - icon = 'icons/obj/rollerbed.dmi' - icon_state = "folded" - item_state = "rbed" - slot_flags = SLOT_BACK - w_class = ITEM_SIZE_LARGE - var/structure_form_type = /obj/structure/bed/roller //The deployed form path. - -/obj/item/roller/attack_self(mob/user) - var/obj/structure/bed/roller/R = new structure_form_type(user.loc) - R.add_fingerprint(user) - qdel(src) - -/obj/item/robot_rack/roller - name = "roller bed rack" - desc = "A rack for carrying collapsed roller beds. Can also be used for carrying ironing boards." - icon = 'icons/obj/rollerbed.dmi' - icon_state = "folded" - object_type = /obj/item/roller - interact_type = /obj/structure/bed/roller -/* - * Mattresses - */ -/obj/structure/mattress - name = "mattress" - icon = 'icons/obj/furniture.dmi' - icon_state = "mattress" - desc = "A bare mattress. It doesn't look very comfortable." - anchored = FALSE - -/obj/structure/mattress/dirty - name = "dirty mattress" - icon_state = "dirty_mattress" - desc = "A dirty, smelly mattress covered in body fluids. You wouldn't want to touch this." diff --git a/code/game/objects/structures/stool_bed_chair_nest/chairs.dm b/code/game/objects/structures/stool_bed_chair_nest/chairs.dm deleted file mode 100644 index bb0e30145faae..0000000000000 --- a/code/game/objects/structures/stool_bed_chair_nest/chairs.dm +++ /dev/null @@ -1,408 +0,0 @@ -/obj/structure/bed/chair //YES, chairs are a type of bed, which are a type of stool. This works, believe me. -Pete - name = "chair" - desc = "You sit in this, either by will or force." - icon_state = "chair_preview" - color = "#666666" - base_icon = "chair" - buckle_dir = 0 - buckle_lying = 0 //force people to sit up in chairs when buckled - obj_flags = OBJ_FLAG_ROTATABLE - var/propelled = 0 // Check for fire-extinguisher-driven chairs - buckle_movable = TRUE - -/obj/structure/bed/chair/do_simple_ranged_interaction(var/mob/user) - if(!buckled_mob && user) - rotate(user) - return TRUE - -/obj/structure/bed/chair/attackby(obj/item/W as obj, mob/user as mob) - ..() - if(!padding_material && istype(W, /obj/item/assembly/shock_kit)) - var/obj/item/assembly/shock_kit/SK = W - if(!SK.status) - to_chat(user, "\The [SK] is not ready to be attached!") - return - if(!user.unEquip(SK)) - return - var/obj/structure/bed/chair/e_chair/E = new (src.loc, material.name) - playsound(src.loc, 'sound/items/Deconstruct.ogg', 50, 1) - E.set_dir(dir) - E.part = SK - SK.forceMove(E) - SK.master = E - qdel(src) - -/obj/structure/bed/chair/post_buckle_mob() - update_icon() - return ..() - -/obj/structure/bed/chair/on_update_icon() - ..() - - var/cache_key = "[base_icon]-[material.name]-over" - if(isnull(stool_cache[cache_key])) - var/image/I = image('icons/obj/furniture.dmi', "[base_icon]_over") - if(material_alteration & MATERIAL_ALTERATION_COLOR) - I.color = material.icon_colour - I.layer = ABOVE_HUMAN_LAYER - stool_cache[cache_key] = I - overlays |= stool_cache[cache_key] - // Padding overlay. - if(padding_material) - var/padding_cache_key = "[base_icon]-padding-[padding_material.name]-over" - if(isnull(stool_cache[padding_cache_key])) - var/image/I = image(icon, "[base_icon]_padding_over") - if(material_alteration & MATERIAL_ALTERATION_COLOR) - I.color = padding_material.icon_colour - I.layer = ABOVE_HUMAN_LAYER - stool_cache[padding_cache_key] = I - overlays |= stool_cache[padding_cache_key] - - if(buckled_mob) - if(padding_material) - cache_key = "[base_icon]-armrest-[padding_material.name]" - if(isnull(stool_cache[cache_key])) - var/image/I = image(icon, "[base_icon]_armrest") - I.layer = ABOVE_HUMAN_LAYER - if(material_alteration & MATERIAL_ALTERATION_COLOR) - I.color = material.icon_colour - stool_cache[cache_key] = I - overlays |= stool_cache[cache_key] - if(padding_material) - cache_key = "[base_icon]-padding-armrest-[padding_material.name]" - if(isnull(stool_cache[cache_key])) - var/image/I = image(icon, "[base_icon]_padding_armrest") - I.layer = ABOVE_HUMAN_LAYER - if(material_alteration & MATERIAL_ALTERATION_COLOR) - I.color = padding_material.icon_colour - stool_cache[cache_key] = I - overlays |= stool_cache[cache_key] - -/obj/structure/bed/chair/rotate(mob/user) - if(!CanPhysicallyInteract(user)) - to_chat(user, SPAN_NOTICE("You can't interact with \the [src] right now!")) - return - - set_dir(turn(dir, 90)) - update_icon() - -/obj/structure/bed/chair/set_dir() - ..() - if(buckled_mob) - buckled_mob.set_dir(dir) - -/obj/structure/bed/chair/padded/red/New(newloc, newmaterial = DEFAULT_FURNITURE_MATERIAL) - ..(newloc, newmaterial, MATERIAL_CARPET) - -/obj/structure/bed/chair/padded/brown/New(newloc, newmaterial = DEFAULT_FURNITURE_MATERIAL) - ..(newloc, newmaterial, MATERIAL_LEATHER_GENERIC) - -/obj/structure/bed/chair/padded/teal/New(newloc, newmaterial = DEFAULT_FURNITURE_MATERIAL) - ..(newloc, newmaterial, "teal") - -/obj/structure/bed/chair/padded/black/New(newloc, newmaterial = DEFAULT_FURNITURE_MATERIAL) - ..(newloc, newmaterial, "black") - -/obj/structure/bed/chair/padded/green/New(newloc, newmaterial = DEFAULT_FURNITURE_MATERIAL) - ..(newloc, newmaterial, "green") - -/obj/structure/bed/chair/padded/purple/New(newloc, newmaterial = DEFAULT_FURNITURE_MATERIAL) - ..(newloc, newmaterial, "purple") - -/obj/structure/bed/chair/padded/blue/New(newloc, newmaterial = DEFAULT_FURNITURE_MATERIAL) - ..(newloc, newmaterial, "blue") - -/obj/structure/bed/chair/padded/beige/New(newloc, newmaterial = DEFAULT_FURNITURE_MATERIAL) - ..(newloc, newmaterial, "beige") - -/obj/structure/bed/chair/padded/lime/New(newloc, newmaterial = DEFAULT_FURNITURE_MATERIAL) - ..(newloc, newmaterial, "lime") - -/obj/structure/bed/chair/padded/yellow/New(newloc, newmaterial = DEFAULT_FURNITURE_MATERIAL) - ..(newloc, newmaterial, "yellow") - -// Leaving this in for the sake of compilation. -/obj/structure/bed/chair/comfy - name = "comfy chair" - desc = "It's a chair. It looks comfy." - icon_state = "comfychair_preview" - base_icon = "comfychair" - -/obj/structure/bed/chair/comfy/brown/New(newloc, newmaterial = DEFAULT_FURNITURE_MATERIAL) - ..(newloc, newmaterial, MATERIAL_LEATHER_GENERIC) - -/obj/structure/bed/chair/comfy/red/New(newloc, newmaterial = DEFAULT_FURNITURE_MATERIAL) - ..(newloc, newmaterial, MATERIAL_CARPET) - -/obj/structure/bed/chair/comfy/teal/New(newloc, newmaterial = DEFAULT_FURNITURE_MATERIAL) - ..(newloc, newmaterial, "teal") - -/obj/structure/bed/chair/comfy/black/New(newloc, newmaterial = DEFAULT_FURNITURE_MATERIAL) - ..(newloc, newmaterial, "black") - -/obj/structure/bed/chair/comfy/green/New(newloc, newmaterial = DEFAULT_FURNITURE_MATERIAL) - ..(newloc, newmaterial, "green") - -/obj/structure/bed/chair/comfy/purple/New(newloc, newmaterial = DEFAULT_FURNITURE_MATERIAL) - ..(newloc, newmaterial, "purple") - -/obj/structure/bed/chair/comfy/blue/New(newloc, newmaterial = DEFAULT_FURNITURE_MATERIAL) - ..(newloc, newmaterial, "blue") - -/obj/structure/bed/chair/comfy/beige/New(newloc, newmaterial = DEFAULT_FURNITURE_MATERIAL) - ..(newloc, newmaterial, "beige") - -/obj/structure/bed/chair/comfy/lime/New(newloc, newmaterial = DEFAULT_FURNITURE_MATERIAL) - ..(newloc, newmaterial, "lime") - -/obj/structure/bed/chair/comfy/yellow/New(newloc, newmaterial = DEFAULT_FURNITURE_MATERIAL) - ..(newloc, newmaterial, "yellow") - -/obj/structure/bed/chair/comfy/captain - name = "captain chair" - desc = "It's a chair. Only for the highest ranked asses." - icon_state = "capchair_preview" - base_icon = "capchair" - -/obj/structure/bed/chair/comfy/captain/on_update_icon() - ..() - var/image/I = image(icon, "[base_icon]_special") - I.layer = ABOVE_HUMAN_LAYER - overlays |= I - -/obj/structure/bed/chair/comfy/captain/New(newloc, newmaterial = DEFAULT_FURNITURE_MATERIAL) - ..(newloc,MATERIAL_STEEL,"blue") - -/obj/structure/bed/chair/armchair - name = "armchair" - desc = "It's an armchair. It looks comfy." - icon_state = "armchair_preview" - base_icon = "armchair" - buckle_movable = FALSE - -/obj/structure/bed/chair/armchair/brown/New(newloc, newmaterial = DEFAULT_FURNITURE_MATERIAL) - ..(newloc, newmaterial, MATERIAL_LEATHER_GENERIC) - -/obj/structure/bed/chair/armchair/red/New(newloc, newmaterial = DEFAULT_FURNITURE_MATERIAL) - ..(newloc, newmaterial, MATERIAL_CARPET) - -/obj/structure/bed/chair/armchair/teal/New(newloc, newmaterial = DEFAULT_FURNITURE_MATERIAL) - ..(newloc, newmaterial, "teal") - -/obj/structure/bed/chair/armchair/black/New(newloc, newmaterial = DEFAULT_FURNITURE_MATERIAL) - ..(newloc, newmaterial, "black") - -/obj/structure/bed/chair/armchair/green/New(newloc, newmaterial = DEFAULT_FURNITURE_MATERIAL) - ..(newloc, newmaterial, "green") - -/obj/structure/bed/chair/armchair/purple/New(newloc, newmaterial = DEFAULT_FURNITURE_MATERIAL) - ..(newloc, newmaterial, "purple") - -/obj/structure/bed/chair/armchair/blue/New(newloc, newmaterial = DEFAULT_FURNITURE_MATERIAL) - ..(newloc, newmaterial, "blue") - -/obj/structure/bed/chair/armchair/beige/New(newloc, newmaterial = DEFAULT_FURNITURE_MATERIAL) - ..(newloc, newmaterial, "beige") - -/obj/structure/bed/chair/armchair/lime/New(newloc, newmaterial = DEFAULT_FURNITURE_MATERIAL) - ..(newloc, newmaterial, "lime") - -/obj/structure/bed/chair/armchair/yellow/New(newloc, newmaterial = DEFAULT_FURNITURE_MATERIAL) - ..(newloc, newmaterial, "yellow") - -/obj/structure/bed/chair/office - name = "office chair" - icon_state = "officechair_preview" - base_icon = "officechair" - anchored = FALSE - -/obj/structure/bed/chair/office/Move() - . = ..() - if(buckled_mob) - var/mob/living/occupant = buckled_mob - if (occupant && (src.loc != occupant.loc)) - if (propelled) - for (var/mob/O in src.loc) - if (O != occupant) - Bump(O) - else - unbuckle_mob() - -/obj/structure/bed/chair/office/Bump(atom/A) - ..() - if(!buckled_mob) return - - if(propelled) - var/mob/living/occupant = unbuckle_mob() - - var/def_zone = ran_zone() - var/blocked = 100 * occupant.get_blocked_ratio(def_zone, DAMAGE_BRUTE, damage = 10) - occupant.throw_at(A, 3, propelled) - occupant.apply_effect(6, EFFECT_STUN, blocked) - occupant.apply_effect(6, EFFECT_WEAKEN, blocked) - occupant.apply_effect(6, EFFECT_STUTTER, blocked) - occupant.apply_damage(10, DAMAGE_BRUTE, def_zone) - playsound(src.loc, 'sound/weapons/punch1.ogg', 50, 1, -1) - if(istype(A, /mob/living)) - var/mob/living/victim = A - def_zone = ran_zone() - blocked = 100 * victim.get_blocked_ratio(def_zone, DAMAGE_BRUTE, damage = 10) - victim.apply_effect(6, EFFECT_STUN, blocked) - victim.apply_effect(6, EFFECT_WEAKEN, blocked) - victim.apply_effect(6, EFFECT_STUTTER, blocked) - victim.apply_damage(10, DAMAGE_BRUTE, def_zone) - occupant.visible_message("[occupant] crashed into \the [A]!") - -/obj/structure/bed/chair/office/light/New(newloc, newmaterial = DEFAULT_FURNITURE_MATERIAL) - ..(newloc, newmaterial, MATERIAL_CLOTH) - -/obj/structure/bed/chair/office/dark/New(newloc, newmaterial = DEFAULT_FURNITURE_MATERIAL) - ..(newloc, newmaterial, "black") - -/obj/structure/bed/chair/office/comfy - name = "comfy office chair" - desc = "It's an office chair. It looks comfy." - icon_state = "comfyofficechair_preview" - base_icon = "comfyofficechair" - -/obj/structure/bed/chair/office/comfy/brown/New(newloc, newmaterial = DEFAULT_FURNITURE_MATERIAL) - ..(newloc, newmaterial, MATERIAL_LEATHER_GENERIC) - -/obj/structure/bed/chair/office/comfy/red/New(newloc, newmaterial = DEFAULT_FURNITURE_MATERIAL) - ..(newloc, newmaterial, MATERIAL_CARPET) - -/obj/structure/bed/chair/office/comfy/teal/New(newloc, newmaterial = DEFAULT_FURNITURE_MATERIAL) - ..(newloc, newmaterial, "teal") - -/obj/structure/bed/chair/office/comfy/black/New(newloc, newmaterial = DEFAULT_FURNITURE_MATERIAL) - ..(newloc, newmaterial, "black") - -/obj/structure/bed/chair/office/comfy/green/New(newloc, newmaterial = DEFAULT_FURNITURE_MATERIAL) - ..(newloc, newmaterial, "green") - -/obj/structure/bed/chair/office/comfy/purple/New(newloc, newmaterial = DEFAULT_FURNITURE_MATERIAL) - ..(newloc, newmaterial, "purple") - -/obj/structure/bed/chair/office/comfy/blue/New(newloc, newmaterial = DEFAULT_FURNITURE_MATERIAL) - ..(newloc, newmaterial, "blue") - -/obj/structure/bed/chair/office/comfy/beige/New(newloc, newmaterial = DEFAULT_FURNITURE_MATERIAL) - ..(newloc, newmaterial, "beige") - -/obj/structure/bed/chair/office/comfy/lime/New(newloc, newmaterial = DEFAULT_FURNITURE_MATERIAL) - ..(newloc, newmaterial, "lime") - -/obj/structure/bed/chair/office/comfy/yellow/New(newloc, newmaterial = DEFAULT_FURNITURE_MATERIAL) - ..(newloc, newmaterial, "yellow") - -/obj/structure/bed/chair/shuttle - name = "shuttle seat" - desc = "A comfortable, secure seat. It has a sturdy-looking buckling system for smoother flights." - base_icon = "shuttle_chair" - icon_state = "shuttle_chair_preview" - buckling_sound = 'sound/effects/metal_close.ogg' - buckle_movable = FALSE - -/obj/structure/bed/chair/shuttle/post_buckle_mob() - if(buckled_mob) - base_icon = "shuttle_chair-b" - else - base_icon = "shuttle_chair" - ..() - -/obj/structure/bed/chair/shuttle/on_update_icon() - ..() - if(!buckled_mob) - var/image/I = image(icon, "[base_icon]_special") - I.layer = ABOVE_HUMAN_LAYER - if(material_alteration & MATERIAL_ALTERATION_COLOR) - I.color = material.icon_colour - overlays |= I - -/obj/structure/bed/chair/shuttle/blue/New(newloc, newmaterial = DEFAULT_FURNITURE_MATERIAL) - ..(newloc,MATERIAL_STEEL,"blue") - -/obj/structure/bed/chair/shuttle/black/New(newloc, newmaterial = DEFAULT_FURNITURE_MATERIAL) - ..(newloc,MATERIAL_STEEL,"black") - -/obj/structure/bed/chair/shuttle/white/New(newloc, newmaterial = DEFAULT_FURNITURE_MATERIAL) - ..(newloc,MATERIAL_STEEL,MATERIAL_CLOTH) - -/obj/structure/bed/chair/wood - name = "classic chair" - desc = "Old is never too old to not be in fashion." - base_icon = "wooden_chair" - icon_state = "wooden_chair_preview" - color = WOOD_COLOR_GENERIC - var/chair_material = MATERIAL_WOOD - buckle_movable = FALSE - -/obj/structure/bed/chair/wood/attackby(obj/item/W as obj, mob/user as mob) - if(istype(W,/obj/item/stack) || istype(W, /obj/item/wirecutters)) - return - ..() - -/obj/structure/bed/chair/wood/New(var/newloc) - ..(newloc, chair_material) - -/obj/structure/bed/chair/wood/mahogany - color = WOOD_COLOR_RICH - chair_material = MATERIAL_MAHOGANY - -/obj/structure/bed/chair/wood/maple - color = WOOD_COLOR_PALE - chair_material = MATERIAL_MAPLE - -/obj/structure/bed/chair/wood/ebony - color = WOOD_COLOR_BLACK - chair_material = MATERIAL_EBONY - -/obj/structure/bed/chair/wood/walnut - color = WOOD_COLOR_CHOCOLATE - chair_material = MATERIAL_WALNUT - -/obj/structure/bed/chair/wood/wings - name = "winged chair" - base_icon = "wooden_chair_wings" - icon_state = "wooden_chair_wings_preview" - -/obj/structure/bed/chair/wood/wings/mahogany - color = WOOD_COLOR_RICH - chair_material = MATERIAL_MAHOGANY - -/obj/structure/bed/chair/wood/wings/maple - color = WOOD_COLOR_PALE - chair_material = MATERIAL_MAPLE - -/obj/structure/bed/chair/wood/wings/ebony - color = WOOD_COLOR_BLACK - chair_material = MATERIAL_EBONY - -/obj/structure/bed/chair/wood/wings/walnut - color = WOOD_COLOR_CHOCOLATE - chair_material = MATERIAL_WALNUT - -/obj/structure/bed/chair/pew - name = "pew" - desc = "A long, simple bench with a backboard, commonly found in places of worship, courtrooms and so on. Not known for being particularly comfortable." - icon_state = "pew" - base_icon = "pew" - color = WOOD_COLOR_GENERIC - var/material/pew_material = MATERIAL_WOOD - obj_flags = 0 - buckle_movable = FALSE - -/obj/structure/bed/chair/pew/left - icon_state = "pew_left" - base_icon = "pew_left" - -/obj/structure/bed/chair/pew/New(var/newloc) - ..(newloc, pew_material) - -/obj/structure/bed/chair/pew/mahogany - color = WOOD_COLOR_RICH - pew_material = MATERIAL_MAHOGANY - -/obj/structure/bed/chair/pew/left/mahogany - color = WOOD_COLOR_RICH - pew_material = MATERIAL_MAHOGANY diff --git a/code/game/objects/structures/stool_bed_chair_nest/stools.dm b/code/game/objects/structures/stool_bed_chair_nest/stools.dm deleted file mode 100644 index 049b0b05129c2..0000000000000 --- a/code/game/objects/structures/stool_bed_chair_nest/stools.dm +++ /dev/null @@ -1,163 +0,0 @@ -//Todo: add leather and cloth for arbitrary coloured stools. -var/global/list/stool_cache = list() //haha stool - -/obj/item/stool - name = "stool" - desc = "Apply butt." - icon = 'icons/obj/furniture.dmi' - icon_state = "stool_preview" //set for the map - item_state = "stool" - randpixel = 0 - force = 10 - throwforce = 10 - w_class = ITEM_SIZE_HUGE - var/base_icon = "stool" - var/material/material - var/material/padding_material - -/obj/item/stool/padded - icon_state = "stool_padded_preview" //set for the map - -/obj/item/stool/New(newloc, new_material = DEFAULT_FURNITURE_MATERIAL, new_padding_material) - ..(newloc) - material = SSmaterials.get_material_by_name(new_material) - if(new_padding_material) - padding_material = SSmaterials.get_material_by_name(new_padding_material) - if(!istype(material)) - qdel(src) - return - force = round(material.get_blunt_damage()*0.4) - update_icon() - -/obj/item/stool/padded/New(newloc, new_material = DEFAULT_FURNITURE_MATERIAL) - ..(newloc, new_material, MATERIAL_CARPET) - -/obj/item/stool/bar - name = "bar stool" - icon_state = "bar_stool_preview" //set for the map - item_state = "bar_stool" - base_icon = "bar_stool" - -/obj/item/stool/bar/padded - icon_state = "bar_stool_padded_preview" - -/obj/item/stool/bar/padded/New(newloc, new_material = DEFAULT_FURNITURE_MATERIAL) - ..(newloc, new_material, MATERIAL_CARPET) - -/obj/item/stool/on_update_icon() - // Prep icon. - icon_state = "" - // Base icon. - var/list/noverlays = list() - var/cache_key = "[base_icon]-[material.name]" - if(isnull(stool_cache[cache_key])) - var/image/I = image(icon, "[base_icon]_base") - I.color = material.icon_colour - stool_cache[cache_key] = I - noverlays |= stool_cache[cache_key] - // Padding overlay. - if(padding_material) - var/padding_cache_key = "[base_icon]-padding-[padding_material.name]" - if(isnull(stool_cache[padding_cache_key])) - var/image/I = image(icon, "[base_icon]_padding") - I.color = padding_material.icon_colour - stool_cache[padding_cache_key] = I - noverlays |= stool_cache[padding_cache_key] - overlays = noverlays - // Strings. - if(padding_material) - SetName("[padding_material.display_name] [initial(name)]") //this is not perfect but it will do for now. - desc = "A padded stool. Apply butt. It's made of [material.use_name] and covered with [padding_material.use_name]." - else - SetName("[material.display_name] [initial(name)]") - desc = "A stool. Apply butt with care. It's made of [material.use_name]." - -/obj/item/stool/proc/add_padding(var/padding_type) - padding_material = SSmaterials.get_material_by_name(padding_type) - update_icon() - -/obj/item/stool/proc/remove_padding() - if(padding_material) - padding_material.place_sheet(get_turf(src)) - padding_material = null - update_icon() - -/obj/item/stool/apply_hit_effect(mob/living/target, mob/living/user, var/hit_zone) - if (prob(5)) - user.visible_message("[user] breaks [src] over [target]'s back!") - user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN) - user.do_attack_animation(target) - dismantle() //This deletes self. - - var/blocked = target.get_blocked_ratio(hit_zone, DAMAGE_BRUTE, damage = 20) - target.Weaken(10 * (1 - blocked)) - target.apply_damage(20, DAMAGE_BRUTE, hit_zone, src) - return 1 - - return ..() - -/obj/item/stool/ex_act(severity) - switch(severity) - if(EX_ACT_DEVASTATING) - qdel(src) - return - if(EX_ACT_HEAVY) - if (prob(50)) - qdel(src) - return - if(EX_ACT_LIGHT) - if (prob(5)) - qdel(src) - return - -/obj/item/stool/proc/dismantle() - if(material) - material.place_sheet(get_turf(src)) - if(padding_material) - padding_material.place_sheet(get_turf(src)) - qdel(src) - -/obj/item/stool/attackby(obj/item/W as obj, mob/user as mob) - if(isWrench(W)) - playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1) - dismantle() - qdel(src) - else if(istype(W,/obj/item/stack)) - if(padding_material) - to_chat(user, "\The [src] is already padded.") - return - var/obj/item/stack/C = W - if(C.get_amount() < 1) // How?? - qdel(C) - return - var/padding_type //This is awful but it needs to be like this until tiles are given a material var. - if(istype(W,/obj/item/stack/tile/carpet)) - padding_type = MATERIAL_CARPET - else if(istype(W,/obj/item/stack/material)) - var/obj/item/stack/material/M = W - if(M.material && (M.material.flags & MATERIAL_PADDING)) - padding_type = "[M.material.name]" - if(!padding_type) - to_chat(user, "You cannot pad \the [src] with that.") - return - C.use(1) - if(!istype(src.loc, /turf)) - user.drop_from_inventory(src) - src.dropInto(loc) - to_chat(user, "You add padding to \the [src].") - add_padding(padding_type) - return - else if(isWirecutter(W)) - if(!padding_material) - to_chat(user, "\The [src] has no padding to remove.") - return - to_chat(user, "You remove the padding from \the [src].") - playsound(src, 'sound/items/Wirecutter.ogg', 100, 1) - remove_padding() - else - ..() - -//Generated subtypes for mapping porpoises - -/obj/item/stool/wood/New(var/newloc) - ..(newloc,MATERIAL_WOOD) diff --git a/code/game/objects/structures/stool_bed_chair_nest/wheelchair.dm b/code/game/objects/structures/stool_bed_chair_nest/wheelchair.dm deleted file mode 100644 index fcc69caa2404e..0000000000000 --- a/code/game/objects/structures/stool_bed_chair_nest/wheelchair.dm +++ /dev/null @@ -1,193 +0,0 @@ -/obj/structure/bed/chair/wheelchair - name = "wheelchair" - desc = "Now we're getting somewhere." - icon_state = "wheelchair" - anchored = FALSE - movement_handlers = list(/datum/movement_handler/deny_multiz, /datum/movement_handler/delay = list(2), /datum/movement_handler/move_relay_self) - var/driving = 0 - var/mob/living/pulling = null - var/bloodiness - -/obj/structure/bed/chair/wheelchair/on_update_icon() - return - -/obj/structure/bed/chair/wheelchair/set_dir() - ..() - overlays.Cut() - var/image/O = image(icon = 'icons/obj/furniture.dmi', icon_state = "w_overlay", dir = src.dir) - O.layer = ABOVE_HUMAN_LAYER - overlays += O - if(buckled_mob) - buckled_mob.set_dir(dir) - -/obj/structure/bed/chair/wheelchair/attackby(obj/item/W as obj, mob/user as mob) - if(isWrench(W) || istype(W,/obj/item/stack) || isWirecutter(W)) - return - ..() - -/obj/structure/bed/chair/wheelchair/relaymove(mob/user, direction) - // Redundant check? - if(user.stat || user.stunned || user.weakened || user.paralysis || user.lying || user.restrained()) - if(user==pulling) - pulling = null - user.pulledby = null - to_chat(user, "You lost your grip!") - return - if(buckled_mob && pulling && user == buckled_mob) - if(pulling.stat || pulling.stunned || pulling.weakened || pulling.paralysis || pulling.lying || pulling.restrained()) - pulling.pulledby = null - pulling = null - if(user.pulling && (user == pulling)) - pulling = null - user.pulledby = null - return - if(propelled) - return - if(pulling && (get_dist(src, pulling) > 1)) - pulling = null - user.pulledby = null - if(user==pulling) - return - if(pulling && (get_dir(src.loc, pulling.loc) == direction)) - to_chat(user, "You cannot go there.") - return - if(pulling && buckled_mob && (buckled_mob == user)) - to_chat(user, "You cannot drive while being pushed.") - return - - // Let's roll - driving = 1 - var/turf/T = null - //--1---Move occupant---1--// - if(buckled_mob) - buckled_mob.buckled = null - step(buckled_mob, direction) - buckled_mob.buckled = src - //--2----Move driver----2--// - if(pulling) - T = pulling.loc - if(get_dist(src, pulling) >= 1) - step(pulling, get_dir(pulling.loc, src.loc)) - //--3--Move wheelchair--3--// - step(src, direction) - if(buckled_mob) // Make sure it stays beneath the occupant - Move(buckled_mob.loc) - set_dir(direction) - if(pulling) // Driver - if(pulling.loc == src.loc) // We moved onto the wheelchair? Revert! - pulling.forceMove(T) - else - spawn(0) - if(get_dist(src, pulling) > 1) // We are too far away? Losing control. - pulling = null - user.pulledby = null - pulling.set_dir(get_dir(pulling, src)) // When everything is right, face the wheelchair - if(bloodiness) - create_track() - driving = 0 - -/obj/structure/bed/chair/wheelchair/Move() - . = ..() - if(buckled_mob) - var/mob/living/occupant = buckled_mob - if(!driving) - if (occupant && (src.loc != occupant.loc)) - if (propelled) - for (var/mob/O in src.loc) - if (O != occupant) - Bump(O) - else - unbuckle_mob() - if (pulling && (get_dist(src, pulling) > 1)) - pulling.pulledby = null - to_chat(pulling, "You lost your grip!") - pulling = null - else - if (occupant && (src.loc != occupant.loc)) - src.forceMove(occupant.loc) // Failsafe to make sure the wheelchair stays beneath the occupant after driving - -/obj/structure/bed/chair/wheelchair/attack_hand(mob/living/user as mob) - if (pulling) - MouseDrop(usr) - else - user_unbuckle_mob(user) - return - -/obj/structure/bed/chair/wheelchair/CtrlClick(var/mob/user) - if(in_range(src, user)) - if(!ishuman(user)) return - if(user == buckled_mob) - to_chat(user, "You realize you are unable to push the wheelchair you sit in.") - return - if(!pulling) - pulling = user - user.pulledby = src - if(user.pulling) - user.stop_pulling() - user.set_dir(get_dir(user, src)) - to_chat(user, "You grip \the [name]'s handles.") - else - to_chat(usr, "You let go of \the [name]'s handles.") - pulling.pulledby = null - pulling = null - return TRUE - return FALSE - -/obj/structure/bed/chair/wheelchair/Bump(atom/A) - ..() - if(!buckled_mob) return - - if(propelled || (pulling && (pulling.a_intent == I_HURT))) - var/mob/living/occupant = unbuckle_mob() - - if (pulling && (pulling.a_intent == I_HURT)) - occupant.throw_at(A, 3, 3, pulling) - else if (propelled) - occupant.throw_at(A, 3, 3) - - var/def_zone = ran_zone() - var/blocked = 100 * occupant.get_blocked_ratio(def_zone, DAMAGE_BRUTE, damage = 10) - occupant.throw_at(A, 3, 3) - occupant.apply_effect(6, EFFECT_STUN, blocked) - occupant.apply_effect(6, EFFECT_WEAKEN, blocked) - occupant.apply_effect(6, EFFECT_STUTTER, blocked) - occupant.apply_damage(10, DAMAGE_BRUTE, def_zone) - playsound(src.loc, 'sound/weapons/punch1.ogg', 50, 1, -1) - if(istype(A, /mob/living)) - var/mob/living/victim = A - def_zone = ran_zone() - blocked = 100 * victim.get_blocked_ratio(def_zone, DAMAGE_BRUTE, damage = 10) - victim.apply_effect(6, EFFECT_STUN, blocked) - victim.apply_effect(6, EFFECT_WEAKEN, blocked) - victim.apply_effect(6, EFFECT_STUTTER, blocked) - victim.apply_damage(10, DAMAGE_BRUTE, def_zone) - if(pulling) - occupant.visible_message("[pulling] has thrusted \the [name] into \the [A], throwing \the [occupant] out of it!") - admin_attack_log(pulling, occupant, "Crashed their victim into \an [A].", "Was crashed into \an [A].", "smashed into \the [A] using") - else - occupant.visible_message("[occupant] crashed into \the [A]!") - -/obj/structure/bed/chair/wheelchair/proc/create_track() - var/obj/effect/decal/cleanable/blood/tracks/B = new(loc) - var/newdir = get_dir(get_step(loc, dir), loc) - if(newdir == dir) - B.set_dir(newdir) - else - newdir = newdir | dir - if(newdir == 3) - newdir = 1 - else if(newdir == 12) - newdir = 4 - B.set_dir(newdir) - bloodiness-- - -/obj/structure/bed/chair/wheelchair/buckle_mob(mob/M as mob, mob/user as mob) - if(M == pulling) - pulling = null - usr.pulledby = null - ..() - -/proc/equip_wheelchair(mob/living/carbon/human/H) //Proc for spawning in a wheelchair if a new character has no legs. Used in new_player.dm - var/obj/structure/bed/chair/wheelchair/W = new(get_turf(H)) - if(isturf(H.loc)) - W.buckle_mob(H) diff --git a/code/game/objects/structures/tank_dispenser.dm b/code/game/objects/structures/tank_dispenser.dm deleted file mode 100644 index 3f6d6d31987b8..0000000000000 --- a/code/game/objects/structures/tank_dispenser.dm +++ /dev/null @@ -1,119 +0,0 @@ -/obj/structure/dispenser - name = "tank storage unit" - desc = "A simple yet bulky storage device for gas tanks. Has room for up to ten oxygen tanks, and ten phoron tanks." - icon = 'icons/obj/objects.dmi' - icon_state = "dispenser" - density = TRUE - anchored = TRUE - w_class = ITEM_SIZE_NO_CONTAINER - var/oxygentanks = 10 - var/phorontanks = 10 - var/list/oxytanks = list() //sorry for the similar var names - var/list/platanks = list() - - -/obj/structure/dispenser/oxygen - phorontanks = 0 - -/obj/structure/dispenser/phoron - oxygentanks = 0 - -/obj/structure/dispenser/Initialize() - . = ..() - update_icon() - -/obj/structure/dispenser/on_update_icon() - overlays.Cut() - switch(oxygentanks) - if(1 to 3) overlays += "oxygen-[oxygentanks]" - if(4 to INFINITY) overlays += "oxygen-4" - switch(phorontanks) - if(1 to 4) overlays += "phoron-[phorontanks]" - if(5 to INFINITY) overlays += "phoron-5" - -/obj/structure/dispenser/attack_ai(mob/user as mob) - if(user.Adjacent(src)) - return attack_hand(user) - ..() - -/obj/structure/dispenser/attack_hand(mob/user as mob) - user.set_machine(src) - var/dat = "[src]

              " - dat += "Oxygen tanks: [oxygentanks] - [oxygentanks ? "Dispense" : "empty"]
              " - dat += "Phoron tanks: [phorontanks] - [phorontanks ? "Dispense" : "empty"]" - show_browser(user, dat, "window=dispenser") - onclose(user, "dispenser") - return - - -/obj/structure/dispenser/attackby(obj/item/I as obj, mob/user as mob) - if(istype(I, /obj/item/tank/oxygen) || istype(I, /obj/item/tank/air) || istype(I, /obj/item/tank/anesthetic)) - if(oxygentanks < 10) - if(!user.unEquip(I, src)) - return - oxytanks.Add(I) - oxygentanks++ - to_chat(user, "You put [I] in [src].") - if(oxygentanks < 5) - update_icon() - else - to_chat(user, "[src] is full.") - updateUsrDialog() - return - if(istype(I, /obj/item/tank/phoron)) - if(phorontanks < 10) - if(!user.unEquip(I, src)) - return - platanks.Add(I) - phorontanks++ - to_chat(user, "You put [I] in [src].") - if(oxygentanks < 6) - update_icon() - else - to_chat(user, "[src] is full.") - updateUsrDialog() - return - if(isWrench(I)) - if(anchored) - to_chat(user, "You lean down and unwrench [src].") - anchored = FALSE - else - to_chat(user, "You wrench [src] into place.") - anchored = TRUE - return - -/obj/structure/dispenser/Topic(href, href_list) - if(usr.stat || usr.restrained()) - return - if(Adjacent(usr)) - usr.set_machine(src) - if(href_list["oxygen"]) - if(oxygentanks > 0) - var/obj/item/tank/oxygen/O - if(oxytanks.len == oxygentanks) - O = oxytanks[1] - oxytanks.Remove(O) - else - O = new /obj/item/tank/oxygen(loc) - O.dropInto(loc) - to_chat(usr, "You take [O] out of [src].") - oxygentanks-- - update_icon() - if(href_list["phoron"]) - if(phorontanks > 0) - var/obj/item/tank/phoron/P - if(platanks.len == phorontanks) - P = platanks[1] - platanks.Remove(P) - else - P = new /obj/item/tank/phoron(loc) - P.dropInto(loc) - to_chat(usr, "You take [P] out of [src].") - phorontanks-- - update_icon() - add_fingerprint(usr) - updateUsrDialog() - else - close_browser(usr, "window=dispenser") - return - return diff --git a/code/game/objects/structures/transit_tubes.dm b/code/game/objects/structures/transit_tubes.dm deleted file mode 100644 index c1bc10baeae97..0000000000000 --- a/code/game/objects/structures/transit_tubes.dm +++ /dev/null @@ -1,607 +0,0 @@ - -// Basic transit tubes. Straight pieces, curved sections, -// and basic splits/joins (no routing logic). -// Mappers: you can use "Generate Instances from Icon-states" -// to get the different pieces. -/obj/structure/transit_tube - icon = 'icons/obj/pipes/transit_tube.dmi' - icon_state = "E-W" - density = TRUE - layer = ABOVE_HUMAN_LAYER - anchored = TRUE - var/list/tube_dirs = null - var/exit_delay = 2 - var/enter_delay = 1 - - // alldirs in global.dm is the same list of directions, but since - // the specific order matters to get a usable icon_state, it is - // copied here so that, in the unlikely case that alldirs is changed, - // this continues to work. - var/static/list/tube_dir_list = list(NORTH, SOUTH, EAST, WEST, NORTHEAST, NORTHWEST, SOUTHEAST, SOUTHWEST) - - -// A place where tube pods stop, and people can get in or out. -// Mappers: use "Generate Instances from Directions" for this -// one. -/obj/structure/transit_tube/station - icon = 'icons/obj/pipes/transit_tube_station.dmi' - icon_state = "closed" - exit_delay = 2 - enter_delay = 3 - var/pod_moving = 0 - var/automatic_launch_time = 100 - - var/const/OPEN_DURATION = 6 - var/const/CLOSE_DURATION = 6 - - - -/obj/structure/transit_tube_pod - icon = 'icons/obj/pipes/transit_tube_pod.dmi' - icon_state = "pod" - animate_movement = FORWARD_STEPS - anchored = TRUE - density = TRUE - var/moving = 0 - var/datum/gas_mixture/air_contents = new() - - - -/obj/structure/transit_tube_pod/Destroy() - for(var/atom/movable/AM in contents) - AM.dropInto(loc) - - ..() - - - -// When destroyed by explosions, properly handle contents. -/obj/structure/transit_tube_pod/ex_act(severity) - switch(severity) - if(EX_ACT_DEVASTATING) - for(var/atom/movable/AM in contents) - AM.dropInto(loc) - AM.ex_act(severity++) - - qdel(src) - return - if(EX_ACT_HEAVY) - if(prob(50)) - for(var/atom/movable/AM in contents) - AM.dropInto(loc) - AM.ex_act(severity++) - - qdel(src) - return - if(EX_ACT_LIGHT) - return - - - -/obj/structure/transit_tube_pod/New(loc) - ..(loc) - - air_contents.adjust_multi(GAS_OXYGEN, MOLES_O2STANDARD * 2, GAS_NITROGEN, MOLES_N2STANDARD) - air_contents.temperature = T20C - - // Give auto tubes time to align before trying to start moving - spawn(5) - follow_tube() - - - -/obj/structure/transit_tube/New(loc) - ..(loc) - - if(tube_dirs == null) - init_dirs() - - - -/obj/structure/transit_tube/Bumped(mob/AM as mob|obj) - var/obj/structure/transit_tube/T = locate() in AM.loc - if(T) - to_chat(AM, "The tube's support pylons block your way.") - return ..() - else - AM.dropInto(loc) - to_chat(AM, "You slip under the tube.") - -/obj/structure/transit_tube/station/New(loc) - ..(loc) - -/obj/structure/transit_tube/station/Bumped(mob/AM as mob|obj) - if(!pod_moving && icon_state == "open" && istype(AM, /mob)) - for(var/obj/structure/transit_tube_pod/pod in loc) - if(pod.contents.len) - to_chat(AM, "The pod is already occupied.") - return - else if(!pod.moving && (pod.dir in directions())) - AM.forceMove(pod) - -/obj/structure/transit_tube/station/attack_hand(mob/user as mob) - if(!pod_moving) - for(var/obj/structure/transit_tube_pod/pod in loc) - if(!pod.moving && (pod.dir in directions())) - if(icon_state == "closed") - open_animation() - - else if(icon_state == "open") - close_animation() - - - -/obj/structure/transit_tube/station/proc/open_animation() - if(icon_state == "closed") - icon_state = "opening" - spawn(OPEN_DURATION) - if(icon_state == "opening") - icon_state = "open" - - - -/obj/structure/transit_tube/station/proc/close_animation() - if(icon_state == "open") - icon_state = "closing" - spawn(CLOSE_DURATION) - if(icon_state == "closing") - icon_state = "closed" - - - -/obj/structure/transit_tube/station/proc/launch_pod() - for(var/obj/structure/transit_tube_pod/pod in loc) - if(!pod.moving && (pod.dir in directions())) - spawn(5) - pod_moving = 1 - close_animation() - sleep(CLOSE_DURATION + 2) - - //reverse directions for automated cycling - var/turf/next_loc = get_step(loc, pod.dir) - var/obj/structure/transit_tube/nexttube - for(var/obj/structure/transit_tube/tube in next_loc) - if(tube.has_entrance(pod.dir)) - nexttube = tube - break - if(!nexttube) - pod.set_dir(turn(pod.dir, 180)) - - if(icon_state == "closed" && pod) - pod.follow_tube() - - pod_moving = 0 - - return - - - -// Called to check if a pod should stop upon entering this tube. -/obj/structure/transit_tube/proc/should_stop_pod(pod, from_dir) - return 0 - - - -/obj/structure/transit_tube/station/should_stop_pod(pod, from_dir) - return 1 - - - -// Called when a pod stops in this tube section. -/obj/structure/transit_tube/proc/pod_stopped(pod, from_dir) - return - - - -/obj/structure/transit_tube/station/pod_stopped(obj/structure/transit_tube_pod/pod, from_dir) - pod_moving = 1 - spawn(5) - open_animation() - sleep(OPEN_DURATION + 2) - pod_moving = 0 - pod.mix_air() - - if(automatic_launch_time) - var/const/wait_step = 5 - var/i = 0 - while(i < automatic_launch_time) - sleep(wait_step) - i += wait_step - - if(pod_moving || icon_state != "open") - return - - launch_pod() - - - -// Returns a /list of directions this tube section can connect to. -// Tubes that have some sort of logic or changing direction might -// override it with additional logic. -/obj/structure/transit_tube/proc/directions() - return tube_dirs - - - -/obj/structure/transit_tube/proc/has_entrance(from_dir) - from_dir = turn(from_dir, 180) - - for(var/direction in directions()) - if(direction == from_dir) - return 1 - - return 0 - - - -/obj/structure/transit_tube/proc/has_exit(in_dir) - for(var/direction in directions()) - if(direction == in_dir) - return 1 - - return 0 - - - -// Searches for an exit direction within 45 degrees of the -// specified dir. Returns that direction, or 0 if none match. -/obj/structure/transit_tube/proc/get_exit(in_dir) - var/near_dir = 0 - var/in_dir_cw = turn(in_dir, -45) - var/in_dir_ccw = turn(in_dir, 45) - - for(var/direction in directions()) - if(direction == in_dir) - return direction - - else if(direction == in_dir_cw) - near_dir = direction - - else if(direction == in_dir_ccw) - near_dir = direction - - return near_dir - - - -// Return how many BYOND ticks to wait before entering/exiting -// the tube section. Default action is to return the value of -// a var, which wouldn't need a proc, but it makes it possible -// for later tube types to interact in more interesting ways -// such as being very fast in one direction, but slow in others -/obj/structure/transit_tube/proc/exit_delay(pod, to_dir) - return exit_delay - -/obj/structure/transit_tube/proc/enter_delay(pod, to_dir) - return enter_delay - - - -/obj/structure/transit_tube_pod/proc/follow_tube() - if(moving) - return - - moving = 1 - - spawn() - var/obj/structure/transit_tube/current_tube = null - var/next_dir - var/next_loc - var/last_delay = 0 - var/exit_delay - - for(var/obj/structure/transit_tube/tube in loc) - if(tube.has_exit(dir)) - current_tube = tube - break - - while(current_tube) - next_dir = current_tube.get_exit(dir) - - if(!next_dir) - break - - exit_delay = current_tube.exit_delay(src, dir) - last_delay += exit_delay - - sleep(exit_delay) - - next_loc = get_step(loc, next_dir) - - current_tube = null - for(var/obj/structure/transit_tube/tube in next_loc) - if(tube.has_entrance(next_dir)) - current_tube = tube - break - - if(current_tube == null) - set_dir(next_dir) - Move(get_step(loc, dir)) // Allow collisions when leaving the tubes. - break - - last_delay = current_tube.enter_delay(src, next_dir) - sleep(last_delay) - set_dir(next_dir) - forceMove(next_loc) // When moving from one tube to another, skip collision and such. - set_density(current_tube.density) - - if(current_tube && current_tube.should_stop_pod(src, next_dir)) - current_tube.pod_stopped(src, dir) - break - - set_density(1) - - // If the pod is no longer in a tube, move in a line until stopped or slowed to a halt. - // /turf/inertial_drift appears to only work on mobs, and re-implementing some of the - // logic allows a gradual slowdown and eventual stop when passing over non-space turfs. - if(!current_tube && last_delay <= 10) - do - sleep(last_delay) - - if(!istype(loc, /turf/space)) - last_delay++ - - if(last_delay > 10) - break - - while(isturf(loc) && Move(get_step(loc, dir))) - - moving = 0 - -/obj/structure/transit_tube_pod/return_air() - return air_contents - -/obj/structure/transit_tube_pod/assume_air(datum/gas_mixture/giver) - return air_contents.merge(giver) - -/obj/structure/transit_tube_pod/remove_air(amount) - return air_contents.remove(amount) - -// Called when a pod arrives at, and before a pod departs from a station, -// giving it a chance to mix its internal air supply with the turf it is -// currently on. -/obj/structure/transit_tube_pod/proc/mix_air() - var/datum/gas_mixture/environment = loc.return_air() - - //note that share_ratio assumes both gas mixes have the same volume, - //so if the volume is changed this may need to be changed as well. - air_contents.share_ratio(environment, 1) - -// When the player moves, check if the pos is currently stopped at a station. -// if it is, check the direction. If the direction matches the direction of -// the station, try to exit. If the direction matches one of the station's -// tube directions, launch the pod in that direction. -/obj/structure/transit_tube_pod/relaymove(mob/mob, direction) - if(istype(mob, /mob) && mob.client) - // If the pod is not in a tube at all, you can get out at any time. - if(!(locate(/obj/structure/transit_tube) in loc)) - var/turf/T = get_turf(src) - mob.forceMove(T) - mob.client.Move(get_step(T, direction), direction) - - //if(moving && istype(loc, /turf/space)) - // Todo: If you get out of a moving pod in space, you should move as well. - // Same direction as pod? Direcion you moved? Halfway between? - - if(!moving) - for(var/obj/structure/transit_tube/station/station in loc) - if(dir in station.directions()) - if(!station.pod_moving) - if(direction == station.dir) - if(station.icon_state == "open") - var/turf/T = get_turf(src) - mob.forceMove(T) - mob.client.Move(get_step(T, direction), direction) - - else - station.open_animation() - - else if(direction in station.directions()) - set_dir(direction) - station.launch_pod() - return - - for(var/obj/structure/transit_tube/tube in loc) - if(dir in tube.directions()) - if(tube.has_exit(direction)) - set_dir(direction) - return - - - -// Parse the icon_state into a list of directions. -// This means that mappers can use Dream Maker's built in -// "Generate Instances from Icon-states" option to get all -// variations. Additionally, as a separate proc, sub-types -// can handle it more intelligently. -/obj/structure/transit_tube/proc/init_dirs() - if(icon_state == "auto") - // Additional delay, for map loading. - spawn(1) - init_dirs_automatic() - - else - tube_dirs = parse_dirs(icon_state) - - if(copytext_char(icon_state, 1, 3) == "D-" || findtextEx(icon_state, "Pass")) - set_density(0) - - - -// Tube station directions are simply 90 to either side of -// the exit. -/obj/structure/transit_tube/station/init_dirs() - tube_dirs = list(turn(dir, 90), turn(dir, -90)) - - - -// Initialize dirs by searching for tubes that do/might connect -// on nearby turfs. Create corner pieces if nessecary. -// Pick two directions, preferring tubes that already connect -// to loc, or other auto tubes if there aren't enough connections. -/obj/structure/transit_tube/proc/init_dirs_automatic() - var/list/connected = list() - var/list/connected_auto = list() - - for(var/direction in tube_dir_list) - var/location = get_step(loc, direction) - for(var/obj/structure/transit_tube/tube in location) - if(tube.directions() == null && tube.icon_state == "auto") - connected_auto += direction - break - - else if(turn(direction, 180) in tube.directions()) - connected += direction - break - - connected += connected_auto - - tube_dirs = select_automatic_dirs(connected) - - if(length(tube_dirs) == 2 && tube_dir_list.Find(tube_dirs[1]) > tube_dir_list.Find(tube_dirs[2])) - tube_dirs.Swap(1, 2) - - generate_automatic_corners(tube_dirs) - select_automatic_icon_state(tube_dirs) - - - -// Given a list of directions, look a pair that forms a 180 or -// 135 degree angle, and return a list containing the pair. -// If none exist, return list(connected[1], turn(connected[1], 180) -/obj/structure/transit_tube/proc/select_automatic_dirs(connected) - if(length(connected) < 1) - return list() - - for(var/i = 1, i <= length(connected), i++) - for(var/j = i + 1, j <= length(connected), j++) - var/d1 = connected[i] - var/d2 = connected[j] - - if(d1 == turn(d2, 135) || d1 == turn(d2, 180) || d1 == turn(d2, 225)) - return list(d1, d2) - - return list(connected[1], turn(connected[1], 180)) - - - -/obj/structure/transit_tube/proc/select_automatic_icon_state(directions) - if(length(directions) == 2) - icon_state = "[dir2text_short(directions[1])]-[dir2text_short(directions[2])]" - - - -// Look for diagonal directions, generate the decorative corners in each. -/obj/structure/transit_tube/proc/generate_automatic_corners(directions) - for(var/direction in directions) - if(direction == 5 || direction == 6 || direction == 9 || direction == 10) - if(direction & NORTH) - create_automatic_decorative_corner(get_step(loc, NORTH), direction ^ 3) - - else - create_automatic_decorative_corner(get_step(loc, SOUTH), direction ^ 3) - - if(direction & EAST) - create_automatic_decorative_corner(get_step(loc, EAST), direction ^ 12) - - else - create_automatic_decorative_corner(get_step(loc, WEST), direction ^ 12) - - - -// Generate a corner, if one doesn't exist for the direction on the turf. -/obj/structure/transit_tube/proc/create_automatic_decorative_corner(location, direction) - var/state = "D-[dir2text_short(direction)]" - - for(var/obj/structure/transit_tube/tube in location) - if(tube.icon_state == state) - return - - var/obj/structure/transit_tube/tube = new(location) - tube.icon_state = state - tube.init_dirs() - - - -// Uses a list() to cache return values. Since they should -// never be edited directly, all tubes with a certain -// icon_state can just reference the same list. In theory, -// reduces memory usage, and improves CPU cache usage. -// In reality, I don't know if that is quite how BYOND works, -// but it is probably safer to assume the existence of, and -// rely on, a sufficiently smart compiler/optimizer. -/obj/structure/transit_tube/proc/parse_dirs(text) - var/static/list/direction_table = list() - - if(text in direction_table) - return direction_table[text] - - var/list/split_text = splittext(text, "-") - - // If the first token is D, the icon_state represents - // a purely decorative tube, and doesn't actually - // connect to anything. - if(split_text[1] == "D") - direction_table[text] = list() - return null - - var/list/directions = list() - - for(var/text_part in split_text) - var/direction = text2dir_extended(text_part) - - if(direction > 0) - directions += direction - - direction_table[text] = directions - return directions - - - -// A copy of text2dir, extended to accept one and two letter -// directions, and to clearly return 0 otherwise. -/obj/structure/transit_tube/proc/text2dir_extended(direction) - switch(uppertext(direction)) - if("NORTH", "N") - return 1 - if("SOUTH", "S") - return 2 - if("EAST", "E") - return 4 - if("WEST", "W") - return 8 - if("NORTHEAST", "NE") - return 5 - if("NORTHWEST", "NW") - return 9 - if("SOUTHEAST", "SE") - return 6 - if("SOUTHWEST", "SW") - return 10 - else - return 0 - - - -// A copy of dir2text, which returns the short one or two letter -// directions used in tube icon states. -/obj/structure/transit_tube/proc/dir2text_short(direction) - switch(direction) - if(1) - return "N" - if(2) - return "S" - if(4) - return "E" - if(8) - return "W" - if(5) - return "NE" - if(6) - return "SE" - if(9) - return "NW" - if(10) - return "SW" - else - return diff --git a/code/game/objects/structures/under_wardrobe.dm b/code/game/objects/structures/under_wardrobe.dm deleted file mode 100644 index 756ccfea9262a..0000000000000 --- a/code/game/objects/structures/under_wardrobe.dm +++ /dev/null @@ -1,121 +0,0 @@ -#define WARDROBE_BLIND_MESSAGE(fool) "\The [src] flashes a light at \the [fool] as it states a message." - -/obj/structure/undies_wardrobe - name = "underwear wardrobe" - desc = "Holds item of clothing you shouldn't be showing off in the hallways." - icon = 'icons/obj/undies_wardrobe.dmi' - icon_state = "closed" - density = TRUE - var/static/list/amount_of_underwear_by_id_card - -/obj/structure/undies_wardrobe/attackby(var/obj/item/underwear/underwear, var/mob/user) - if(istype(underwear)) - if(!user.unEquip(underwear)) - return - qdel(underwear) - user.visible_message("\The [user] inserts \their [underwear.name] into \the [src].", "You insert your [underwear.name] into \the [src].") - - var/id = user.GetIdCard() - var/message - if(id) - message = "ID card detected. Your underwear quota for this shift has been increased, if applicable." - else - message = "No ID card detected. Thank you for your contribution." - - audible_message(message, WARDROBE_BLIND_MESSAGE(user)) - - var/number_of_underwear = LAZYACCESS(amount_of_underwear_by_id_card, id) - 1 - if(number_of_underwear) - LAZYSET(amount_of_underwear_by_id_card, id, number_of_underwear) - GLOB.destroyed_event.register(id, src, /obj/structure/undies_wardrobe/proc/remove_id_card) - else - remove_id_card(id) - - else - ..() - -/obj/structure/undies_wardrobe/proc/remove_id_card(var/id_card) - LAZYREMOVE(amount_of_underwear_by_id_card, id_card) - GLOB.destroyed_event.unregister(id_card, src, /obj/structure/undies_wardrobe/proc/remove_id_card) - -/obj/structure/undies_wardrobe/attack_hand(var/mob/user) - if(!human_who_can_use_underwear(user)) - to_chat(user, "Sadly there's nothing in here for you to wear.") - return - interact(user) - -/obj/structure/undies_wardrobe/interact(var/mob/living/carbon/human/H) - var/id = H.GetIdCard() - - var/dat = list() - dat += "Underwear

              " - dat += "You may claim [id ? length(GLOB.underwear.categories) - LAZYACCESS(amount_of_underwear_by_id_card, id) : 0] more article\s this shift.

              " - dat += "Available Categories

              " - for(var/datum/category_group/underwear/UWC in GLOB.underwear.categories) - dat += "[UWC.name] (Select)
              " - dat = jointext(dat,null) - show_browser(H, dat, "window=wardrobe;size=400x250") - -/obj/structure/undies_wardrobe/proc/human_who_can_use_underwear(var/mob/living/carbon/human/H) - if(!istype(H) || !H.species || !(H.species.appearance_flags & HAS_UNDERWEAR)) - return FALSE - return TRUE - -/obj/structure/undies_wardrobe/CanUseTopic(var/user) - if(!human_who_can_use_underwear(user)) - return STATUS_CLOSE - - return ..() - -/obj/structure/undies_wardrobe/Topic(href, href_list, state) - if(..()) - return TRUE - - var/mob/living/carbon/human/H = usr - if(href_list["select_underwear"]) - var/datum/category_group/underwear/UWC = GLOB.underwear.categories_by_name[href_list["select_underwear"]] - if(!UWC) - return - var/datum/category_item/underwear/UWI = input("Select your desired underwear:", "Choose underwear") as null|anything in exlude_none(UWC.items) - if(!UWI) - return - - var/list/metadata_list = list() - for(var/tweak in UWI.tweaks) - var/datum/gear_tweak/gt = tweak - var/metadata = gt.get_metadata(H, title = "Adjust underwear") - if(!metadata) - return - metadata_list["[gt]"] = metadata - - if(!CanInteract(H, state)) - return - - var/id = H.GetIdCard() - if(!id) - audible_message("No ID card detected. Unable to acquire your underwear quota for this shift.", WARDROBE_BLIND_MESSAGE(H)) - return - - var/current_quota = LAZYACCESS(amount_of_underwear_by_id_card, id) - if(current_quota >= length(GLOB.underwear.categories)) - audible_message("You have already used up your underwear quota for this shift. Please return previously acquired items to increase it.", WARDROBE_BLIND_MESSAGE(H)) - return - LAZYSET(amount_of_underwear_by_id_card, id, ++current_quota) - - var/obj/UW = UWI.create_underwear(H, metadata_list) - UW.forceMove(loc) - H.put_in_hands(UW) - - . = TRUE - - if(.) - interact(H) - -/obj/structure/undies_wardrobe/proc/exlude_none(var/list/L) - . = L.Copy() - for(var/e in .) - var/datum/category_item/underwear/UWI = e - if(!UWI.underwear_type) - . -= UWI - -#undef WARDROBE_BLIND_MESSAGE diff --git a/code/game/objects/structures/virologyprops.dm b/code/game/objects/structures/virologyprops.dm deleted file mode 100644 index b8fe508bd0873..0000000000000 --- a/code/game/objects/structures/virologyprops.dm +++ /dev/null @@ -1,139 +0,0 @@ -/obj/structure/virology - name = "Isolator" - desc = "A isolator, it appears to be off." - icon = 'icons/obj/virology.dmi' - icon_state = "isolator_off" - anchored = TRUE - -/obj/structure/virology/iso - name = "Isolator" - desc = "An isolator, the screen has a series of data streams that you can't quite understand." - icon = 'icons/obj/virology.dmi' - icon_state = "isolator" - anchored = TRUE - -/obj/structure/virology/iso_on - name = "Isolator" - desc = "An isolator, there is a sample inserted and the screen has a series of data streams that you can't quite understand." - icon = 'icons/obj/virology.dmi' - icon_state = "isolator_processing" - anchored = TRUE - -/obj/structure/virology/iso_sample - name = "Isolator" - desc = "An isolator, there is a sample inserted and the screen has a series of data streams that you can't quite understand." - icon = 'icons/obj/virology.dmi' - icon_state = "isolator_in" - anchored = TRUE - -/obj/structure/virology/analyser - name = "Analyser" - desc = "An analyser, there is a sample inserted and the screen has a series of data streams that you can't quite understand." - icon = 'icons/obj/virology.dmi' - icon_state = "analyser_processing" - anchored = TRUE - -/obj/structure/virology/analyser_off - name = "Analyser" - desc = "An analyser, it is currently sitting idle." - icon = 'icons/obj/virology.dmi' - icon_state = "analyser" - anchored = TRUE - -/obj/structure/virology/incubator_off - name = "Incubator" - desc = "An incubator, it is currently idle." - icon = 'icons/obj/virology.dmi' - icon_state = "incubator" - anchored = TRUE - -/obj/structure/virology/incubator_on - name = "Incubator" - desc = "An incubator, you can see a set of samples inside." - icon = 'icons/obj/virology.dmi' - icon_state = "incubator_on" - anchored = TRUE - -/obj/structure/virology/centrifuge - name = "Centrifuge" - desc = "A centrifuge, it is currently idle." - icon = 'icons/obj/virology.dmi' - icon_state = "centrifuge" - anchored = TRUE - -/obj/structure/virology/centrifuge_on - name = "Centrifuge" - desc = "A centrifuge, it is currently processing a sample." - icon = 'icons/obj/virology.dmi' - icon_state = "centrifuge_moving" - anchored = TRUE - -/obj/structure/virology/centrifuge_broken - name = "Centrifuge" - desc = "A centrifuge, the glass is smashed open." - icon = 'icons/obj/virology.dmi' - icon_state = "centrifugeb" - anchored = TRUE - -/obj/structure/virology/cryogenics - name = "Cryotube" - desc = "A cryotube, it is not on." - icon = 'icons/obj/cryogenics.dmi' - icon_state = "cell-off" - anchored = TRUE - -/obj/structure/virology/cryogenics_occupied - name = "Occupied Cryotube" - desc = "A cryotube, a figure floats inside, they do not appear to be conscious." - icon = 'icons/obj/cryogenics.dmi' - icon_state = "cell-occupied" - anchored = TRUE - -/obj/structure/virology/cryogenics_on - name = "Cryotube" - desc = "A cryotube, a strange liquid bubbles inside the glass." - icon = 'icons/obj/cryogenics.dmi' - icon_state = "cell-on" - anchored = TRUE - -/obj/structure/virology/dnaconsole - name = "Console" - desc = "A console, you're not sure what the information displayed means." - icon = 'icons/obj/cryogenic2.dmi' - icon_state = "dna_computer" - anchored = TRUE - -/obj/structure/virology/console - name = "Console" - desc = "A console, the information displayed is far beyond what you can understand." - icon = 'icons/obj/cryogenic2.dmi' - icon_state = "scannerconsole" - anchored = TRUE - -/obj/structure/virology/console_off - name = "Console" - desc = "A console, it's not functioning." - icon = 'icons/obj/cryogenic2.dmi' - icon_state = "c_unpowered" - anchored = TRUE - -/obj/structure/virology/console_broken - name = "Console" - desc = "A console, the glass is smashed." - icon = 'icons/obj/cryogenic2.dmi' - icon_state = "broken" - anchored = TRUE - -/obj/structure/virology/scanner - name = "Scanner" - desc = "Some sort of scanner, you're not sure what it does." - icon = 'icons/obj/cryogenic2.dmi' - icon_state = "scanner_0" - anchored = TRUE - -/obj/structure/virology/scanner_on - name = "Scanner" - desc = "Some sort of scanner, it appears there is someone inside as data streams off the console." - icon = 'icons/obj/cryogenic2.dmi' - icon_state = "scanner_1" - anchored = TRUE diff --git a/code/game/objects/structures/wall_frame.dm b/code/game/objects/structures/wall_frame.dm deleted file mode 100644 index 31d5ea031caf2..0000000000000 --- a/code/game/objects/structures/wall_frame.dm +++ /dev/null @@ -1,194 +0,0 @@ -// Basically see-through walls. Used for windows -// If nothing has been built on the low wall, you can climb on it - -/obj/structure/wall_frame - name = "low wall" - desc = "A low wall section which serves as the base of windows, amongst other things." - icon = 'icons/obj/wall_frame.dmi' - icon_state = "frame" - - atom_flags = ATOM_FLAG_NO_TEMP_CHANGE | ATOM_FLAG_CLIMBABLE | ATOM_FLAG_CAN_BE_PAINTED | ATOM_FLAG_ADJACENT_EXCEPTION - anchored = TRUE - density = TRUE - throwpass = 1 - layer = TABLE_LAYER - health_max = 100 - - var/paint_color - var/stripe_color - rad_resistance_modifier = 0.5 - - blend_objects = list(/obj/machinery/door, /turf/simulated/wall) // Objects which to blend with - noblend_objects = list(/obj/machinery/door/window) - material = DEFAULT_WALL_MATERIAL - -/obj/structure/wall_frame/New(var/new_loc, var/materialtype) - ..(new_loc) - - if (!materialtype) - if (istext(material)) - materialtype = material - else - materialtype = DEFAULT_WALL_MATERIAL - - material = SSmaterials.get_material_by_name(materialtype) - set_max_health(material.integrity) - - update_connections(1) - update_icon() - -/obj/structure/wall_frame/Destroy() - var/turf/location = loc - . = ..() - for(var/obj/structure/wall_frame/W in orange(1, location)) - W.update_connections() - W.queue_icon_update() - - -/obj/structure/wall_frame/examine(mob/user) - . = ..() - - if(paint_color) - to_chat(user, "It has a smooth coat of paint applied.") - -/obj/structure/wall_frame/attackby(var/obj/item/W, var/mob/user) - src.add_fingerprint(user) - - if (user.a_intent == I_HURT) - ..() - return - - //grille placing - if(istype(W, /obj/item/stack/material/rods)) - for(var/obj/structure/window/WINDOW in loc) - if(WINDOW.dir == get_dir(src, user)) - to_chat(user, "There is a window in the way.") - return - place_grille(user, loc, W) - return - - //window placing - if(istype(W,/obj/item/stack/material)) - var/obj/item/stack/material/ST = W - if(ST.material.opacity > 0.7) - return 0 - place_window(user, loc, SOUTHWEST, ST) - return - - if(isWrench(W)) - for(var/obj/structure/S in loc) - if(istype(S, /obj/structure/window)) - to_chat(user, "There is still a window on the low wall!") - return - else if(istype(S, /obj/structure/grille)) - to_chat(user, "There is still a grille on the low wall!") - return - playsound(src.loc, 'sound/items/Ratchet.ogg', 100, 1) - to_chat(user, "Now disassembling the low wall...") - if(do_after(user, 4 SECONDS, src, DO_PUBLIC_UNIQUE)) - to_chat(user, "You dissasembled the low wall!") - dismantle() - return - - if(istype(W, /obj/item/gun/energy/plasmacutter)) - var/obj/item/gun/energy/plasmacutter/cutter = W - if(!cutter.slice(user)) - return - playsound(src.loc, 'sound/items/Welder.ogg', 100, 1) - to_chat(user, "Now slicing through the low wall...") - if(do_after(user, 2 SECONDS, src, DO_PUBLIC_UNIQUE)) - to_chat(user, "You have sliced through the low wall!") - dismantle() - return - - ..() - -/obj/structure/wall_frame/CanPass(atom/movable/mover, turf/target, height=0, air_group=0) - if(air_group || (height==0)) return 1 - if(istype(mover,/obj/item/projectile)) - return 1 - if(istype(mover) && mover.checkpass(PASS_FLAG_TABLE)) - return 1 - -// icon related - -/obj/structure/wall_frame/on_update_icon() - overlays.Cut() - var/image/I - - var/new_color = (paint_color ? paint_color : material.icon_colour) - color = new_color - - for(var/i = 1 to 4) - if(other_connections[i] != "0") - I = image('icons/obj/wall_frame.dmi', "frame_other[connections[i]]", dir = SHIFTL(1, i - 1)) - else - I = image('icons/obj/wall_frame.dmi', "frame[connections[i]]", dir = SHIFTL(1, i - 1)) - overlays += I - - if(stripe_color) - for(var/i = 1 to 4) - if(other_connections[i] != "0") - I = image('icons/obj/wall_frame.dmi', "stripe_other[connections[i]]", dir = SHIFTL(1, i - 1)) - else - I = image('icons/obj/wall_frame.dmi', "stripe[connections[i]]", dir = SHIFTL(1, i - 1)) - I.color = stripe_color - overlays += I - -/obj/structure/wall_frame/hull/Initialize() - . = ..() - if(prob(40)) - var/spacefacing = FALSE - for(var/direction in GLOB.cardinal) - var/turf/T = get_step(src, direction) - var/area/A = get_area(T) - if(A && (A.area_flags & AREA_FLAG_EXTERNAL)) - spacefacing = TRUE - break - if(spacefacing) - var/bleach_factor = rand(10,50) - paint_color = adjust_brightness(paint_color, bleach_factor) - update_icon() - -/obj/structure/wall_frame/hitby(AM as mob|obj, var/datum/thrownthing/TT) - ..() - var/tforce = 0 - if(ismob(AM)) // All mobs have a multiplier and a size according to mob_defines.dm - var/mob/I = AM - tforce = I.mob_size * (TT.speed/THROWFORCE_SPEED_DIVISOR) - else - var/obj/O = AM - tforce = O.throwforce * (TT.speed/THROWFORCE_SPEED_DIVISOR) - if (tforce < 15) - return - damage_health(tforce, DAMAGE_BRUTE) - -/obj/structure/wall_frame/on_death() - dismantle() - -/obj/structure/wall_frame/proc/dismantle() - new /obj/item/stack/material/steel(get_turf(src), 3) - qdel(src) - -/obj/structure/wall_frame/get_color() - return paint_color - -/obj/structure/wall_frame/set_color(var/color) - paint_color = color - update_icon() - -//Subtypes -/obj/structure/wall_frame/standard - paint_color = COLOR_WALL_GUNMETAL - -/obj/structure/wall_frame/titanium - material = MATERIAL_TITANIUM - -/obj/structure/wall_frame/hull - paint_color = COLOR_SOL - -/obj/structure/wall_frame/hull/vox - paint_color = COLOR_GREEN_GRAY - -/obj/structure/wall_frame/hull/verne - paint_color = COLOR_GUNMETAL diff --git a/code/game/objects/structures/wallframe_spawner.dm b/code/game/objects/structures/wallframe_spawner.dm deleted file mode 100644 index 847c1212e3058..0000000000000 --- a/code/game/objects/structures/wallframe_spawner.dm +++ /dev/null @@ -1,167 +0,0 @@ -/obj/effect/wallframe_spawn - name = "wall frame window grille spawner" - icon = 'icons/obj/structures.dmi' - icon_state = "wingrille" - density = TRUE - anchored = TRUE - var/win_path = /obj/structure/window/basic/full - var/frame_path = /obj/structure/wall_frame/standard - var/grille_path = /obj/structure/grille - var/activated = FALSE - var/fulltile = TRUE - -/obj/effect/wallframe_spawn/CanPass() - return 0 - -/obj/effect/wallframe_spawn/attack_hand() - attack_generic() - -/obj/effect/wallframe_spawn/attack_ghost() - attack_generic() - -/obj/effect/wallframe_spawn/attack_generic() - activate() - -/obj/effect/wallframe_spawn/Initialize(mapload) - . = ..() - if(!win_path) - return - var/auto_activate = mapload || (GAME_STATE < RUNLEVEL_GAME) - if(auto_activate) - activate() - return INITIALIZE_HINT_QDEL - -/obj/effect/wallframe_spawn/proc/activate() - if(activated) return - - if(locate(frame_path) in loc) - warning("Frame Spawner: A frame structure already exists at [loc.x]-[loc.y]-[loc.z]") - else - var/obj/structure/wall_frame/F = new frame_path(loc) - handle_frame_spawn(F) - - if(locate(win_path) in loc) - warning("Frame Spawner: A window structure already exists at [loc.x]-[loc.y]-[loc.z]") - - var/list/neighbours = list() - if(fulltile) - var/obj/structure/window/new_win = new win_path(loc) - handle_window_spawn(new_win) - else - for (var/dir in GLOB.cardinal) - var/turf/T = get_step(src, dir) - var/obj/effect/wallframe_spawn/other = locate(type) in T - if(!other) - var/found_connection - if(locate(/obj/structure/grille) in T) - for(var/obj/structure/window/W in T) - if(W.type == win_path && W.dir == get_dir(T,src)) - found_connection = 1 - qdel(W) - if(!found_connection) - var/obj/structure/window/new_win = new win_path(loc) - new_win.set_dir(dir) - handle_window_spawn(new_win) - else - neighbours |= other - - if(grille_path) - if(locate(grille_path) in loc) - warning("Frame Spawner: A grille already exists at [loc.x]-[loc.y]-[loc.z]") - else - var/obj/structure/grille/G = new grille_path (loc) - handle_grille_spawn(G) - - activated = 1 - for(var/obj/effect/wallframe_spawn/other in neighbours) - if(!other.activated) other.activate() - -/obj/effect/wallframe_spawn/proc/handle_frame_spawn(var/obj/structure/wall_frame/F) - for(var/direction in GLOB.cardinal) - var/turf/T = get_step(src, direction) - for(var/obj/O in T) - if( istype(O, /obj/machinery/door)) - var/obj/machinery/door/D = O - D.update_connections() - D.update_icon() - -/obj/effect/wallframe_spawn/proc/handle_window_spawn(var/obj/structure/window/W) - return - -/obj/effect/wallframe_spawn/proc/handle_grille_spawn(var/obj/structure/grille/G) - return - -/obj/effect/wallframe_spawn/no_grille - name = "wall frame window spawner (no grille)" - grille_path = null - -/obj/effect/wallframe_spawn/reinforced - name = "reinforced wall frame window spawner" - icon_state = "r-wingrille" - win_path = /obj/structure/window/reinforced/full - -/obj/effect/wallframe_spawn/reinforced/no_grille - name = "reinforced wall frame window spawner (no grille)" - grille_path = null - -/obj/effect/wallframe_spawn/reinforced/titanium - name = "reinforced titanium wall frame window spawner" - frame_path = /obj/structure/wall_frame/titanium - -/obj/effect/wallframe_spawn/reinforced/hull - name = "reinforced hull wall frame window spawner" - frame_path = /obj/structure/wall_frame/hull - -/obj/effect/wallframe_spawn/reinforced/hull/vox - name = "reinforced vox hull wall frame window spawner" - frame_path = /obj/structure/wall_frame/hull/vox - -/obj/effect/wallframe_spawn/reinforced/hull/verne - name = "reinforced verne hull wall frame window spawner" - frame_path = /obj/structure/wall_frame/hull/verne - -/obj/effect/wallframe_spawn/reinforced/bare //standard type is used most often so its in the master type, this one is for away sites etc with unpainted walls - name = "bare metal reinforced wall frame window spawner" - icon_state = "r-wingrille" - frame_path = /obj/structure/wall_frame - - -/obj/effect/wallframe_spawn/phoron - name = "phoron wall frame window spawner" - icon_state = "p-wingrille" - win_path = /obj/structure/window/phoronbasic/full - - -/obj/effect/wallframe_spawn/reinforced_phoron - name = "reinforced phoron wall frame window spawner" - icon_state = "pr-wingrille" - win_path = /obj/structure/window/phoronreinforced/full - -/obj/effect/wallframe_spawn/reinforced_phoron/titanium - frame_path = /obj/structure/wall_frame/titanium - -/obj/effect/wallframe_spawn/reinforced_phoron/hull - frame_path = /obj/structure/wall_frame/hull - - -/obj/effect/wallframe_spawn/reinforced/polarized - name = "polarized reinforced wall frame window spawner" - color = "#444444" - win_path = /obj/structure/window/reinforced/polarized/full - var/id - -/obj/effect/wallframe_spawn/reinforced/polarized/no_grille - name = "polarized reinforced wall frame window spawner (no grille)" - grille_path = null - -/obj/effect/wallframe_spawn/reinforced/polarized/full//wtf it's the same as the other one, not gonna touch this cause I don't wanna remap a million things - name = "polarized reinforced wall frame window spawner - full tile" - win_path = /obj/structure/window/reinforced/polarized/full - -/obj/effect/wallframe_spawn/reinforced/polarized/no_grille/regular - name = "polarized wall frame window spawner (no grille) (non reinforced)" - win_path = /obj/structure/window/basic/full/polarized - -/obj/effect/wallframe_spawn/reinforced/polarized/handle_window_spawn(var/obj/structure/window/reinforced/polarized/P) - if(id) - P.id = id diff --git a/code/game/objects/structures/watercloset.dm b/code/game/objects/structures/watercloset.dm deleted file mode 100644 index 78f4406a5ac8b..0000000000000 --- a/code/game/objects/structures/watercloset.dm +++ /dev/null @@ -1,626 +0,0 @@ -//todo: toothbrushes, and some sort of "toilet-filthinator" for the hos -/obj/structure/hygiene - var/next_gurgle = 0 - var/clogged = 0 // -1 = never clog - var/can_drain = 0 - var/drainage = 0.5 - var/last_gurgle = 0 - -/obj/structure/hygiene/New() - ..() - SSfluids.hygiene_props += src - START_PROCESSING(SSobj, src) - -/obj/structure/hygiene/Destroy() - SSfluids.hygiene_props -= src - STOP_PROCESSING(SSobj, src) - . = ..() - -/obj/structure/hygiene/proc/clog(var/severity) - if(clogged) //We can only clog if our state is zero, aka completely unclogged and cloggable - return FALSE - clogged = severity - return TRUE - -/obj/structure/hygiene/proc/unclog() - clogged = 0 - -/obj/structure/hygiene/attackby(var/obj/item/thing, var/mob/user) - if(clogged > 0 && isplunger(thing)) - user.visible_message("\The [user] strives valiantly to unclog \the [src] with \the [thing]!") - spawn - playsound(loc, 'sound/effects/plunger.ogg', 75, 1) - sleep(5) - playsound(loc, 'sound/effects/plunger.ogg', 75, 1) - sleep(5) - playsound(loc, 'sound/effects/plunger.ogg', 75, 1) - sleep(5) - playsound(loc, 'sound/effects/plunger.ogg', 75, 1) - sleep(5) - playsound(loc, 'sound/effects/plunger.ogg', 75, 1) - if(do_after(user, 4.5 SECONDS, src, DO_PUBLIC_UNIQUE) && clogged > 0) - visible_message("With a loud gurgle, \the [src] begins flowing more freely.") - playsound(loc, pick(SSfluids.gurgles), 100, 1) - clogged-- - if(clogged <= 0) - unclog() - return - . = ..() - -/obj/structure/hygiene/examine(mob/user) - . = ..() - if(clogged > 0) - to_chat(user, "It seems to be badly clogged.") - -/obj/structure/hygiene/Process() - if(clogged <= 0) - drain() - var/flood_amt - switch(clogged) - if(1) - flood_amt = FLUID_SHALLOW - if(2) - flood_amt = FLUID_OVER_MOB_HEAD - if(3) - flood_amt = FLUID_DEEP - if(flood_amt) - var/turf/T = loc - if(istype(T)) - var/obj/effect/fluid/F = locate() in T - if(!F) F = new(loc) - T.show_bubbles() - if(world.time > next_gurgle) - visible_message("\The [src] gurgles and overflows!") - next_gurgle = world.time + 80 - playsound(T, pick(SSfluids.gurgles), 50, 1) - SET_FLUID_DEPTH(F, min(F.fluid_amount + (rand(30,50)*clogged), flood_amt)) - -/obj/structure/hygiene/proc/drain() - if(!can_drain) return - var/turf/T = get_turf(src) - if(!istype(T)) return - var/fluid_here = T.get_fluid_depth() - if(fluid_here <= 0) - return - - T.remove_fluid(Ceil(fluid_here*drainage)) - T.show_bubbles() - if(world.time > last_gurgle + 80) - last_gurgle = world.time - playsound(T, pick(SSfluids.gurgles), 50, 1) - -/obj/structure/hygiene/toilet - name = "toilet" - desc = "The HT-451, a torque rotation-based, waste disposal unit for small matter. This one seems remarkably clean." - icon = 'icons/obj/watercloset.dmi' - icon_state = "toilet00" - density = FALSE - anchored = TRUE - var/open = 0 //if the lid is up - var/cistern = 0 //if the cistern bit is open - var/w_items = 0 //the combined w_class of all the items in the cistern - var/mob/living/swirlie = null //the mob being given a swirlie - -/obj/structure/hygiene/toilet/Initialize() - . = ..() - open = round(rand(0, 1)) - update_icon() - -/obj/structure/hygiene/toilet/attack_hand(var/mob/living/user) - if(swirlie) - usr.visible_message("[user] slams the toilet seat onto [swirlie.name]'s head!", "You slam the toilet seat onto [swirlie.name]'s head!", "You hear reverberating porcelain.") - swirlie.adjustBruteLoss(8) - return - - if(cistern && !open) - if(!contents.len) - to_chat(user, "The cistern is empty.") - return - else - var/obj/item/I = pick(contents) - if(ishuman(user)) - user.put_in_hands(I) - else - I.dropInto(loc) - to_chat(user, "You find \an [I] in the cistern.") - w_items -= I.w_class - return - - open = !open - update_icon() - -/obj/structure/hygiene/toilet/on_update_icon() - icon_state = "toilet[open][cistern]" - -/obj/structure/hygiene/toilet/attackby(obj/item/I as obj, var/mob/living/user) - if(isCrowbar(I)) - to_chat(user, "You start to [cistern ? "replace the lid on the cistern" : "lift the lid off the cistern"].") - playsound(loc, 'sound/effects/stonedoor_openclose.ogg', 50, 1) - if(do_after(user, 3 SECONDS, src, DO_PUBLIC_UNIQUE)) - user.visible_message("[user] [cistern ? "replaces the lid on the cistern" : "lifts the lid off the cistern"]!", "You [cistern ? "replace the lid on the cistern" : "lift the lid off the cistern"]!", "You hear grinding porcelain.") - cistern = !cistern - update_icon() - return - - if(istype(I, /obj/item/grab)) - var/obj/item/grab/G = I - - if(isliving(G.affecting)) - var/mob/living/GM = G.affecting - if(!GM.loc == get_turf(src)) - to_chat(user, "\The [GM] needs to be on the toilet.") - return - if(open && !swirlie) - user.visible_message("\The [user] starts jamming \the [GM]'s face into \the [src]!") - swirlie = GM - if(do_after(user, 3 SECONDS, src, DO_PUBLIC_UNIQUE)) - user.visible_message("\The [user] gives [GM.name] a swirlie!") - GM.adjustOxyLoss(5) - swirlie = null - else - user.visible_message("\The [user] slams [GM.name] into the [src]!", "You slam [GM.name] into the [src]!") - GM.adjustBruteLoss(8) - - if(cistern && !istype(user,/mob/living/silicon/robot)) //STOP PUTTING YOUR MODULES IN THE TOILET. - if(I.w_class > ITEM_SIZE_NORMAL) - to_chat(user, "\The [I] does not fit.") - return - if(w_items + I.w_class > 5) - to_chat(user, "The cistern is full.") - return - if(!user.unEquip(I, src)) - return - w_items += I.w_class - to_chat(user, "You carefully place \the [I] into the cistern.") - return - - . = ..() - -/obj/structure/hygiene/urinal - name = "urinal" - desc = "The HU-452, an experimental urinal." - icon = 'icons/obj/watercloset.dmi' - icon_state = "urinal" - density = FALSE - anchored = TRUE - -/obj/structure/hygiene/urinal/attackby(var/obj/item/I, var/mob/user) - if(istype(I, /obj/item/grab)) - var/obj/item/grab/G = I - if(isliving(G.affecting)) - var/mob/living/GM = G.affecting - if(!GM.loc == get_turf(src)) - to_chat(user, "[GM.name] needs to be on the urinal.") - return - user.visible_message("[user] slams [GM.name] into the [src]!") - GM.adjustBruteLoss(8) - . = ..() - -/obj/structure/hygiene/shower - name = "shower" - desc = "The HS-451. Installed in the 2200s by the Hygiene Division." - icon = 'icons/obj/watercloset.dmi' - icon_state = "shower" - density = FALSE - anchored = TRUE - clogged = -1 - can_drain = 1 - drainage = 0.2 //showers are tiny, drain a little slower - - var/on = 0 - var/obj/effect/mist/mymist = null - var/ismist = 0 //needs a var so we can make it linger~ - var/watertemp = "normal" //freezing, normal, or boiling - var/is_washing = 0 - var/list/temperature_settings = list("normal" = 310, "boiling" = T0C+100, "freezing" = T0C) - -/obj/structure/hygiene/shower/New() - ..() - create_reagents(50) - -//add heat controls? when emagged, you can freeze to death in it? - -/obj/effect/mist - name = "mist" - icon = 'icons/obj/watercloset.dmi' - icon_state = "mist" - layer = MOB_LAYER + 1 - anchored = TRUE - mouse_opacity = 0 - -/obj/structure/hygiene/shower/attack_hand(var/mob/M) - on = !on - update_icon() - if(on) - if (M.loc == loc) - wash(M) - process_heat(M) - for (var/atom/movable/G in src.loc) - G.clean_blood() - -/obj/structure/hygiene/shower/attackby(obj/item/I as obj, var/mob/user) - if(istype(I, /obj/item/device/scanner/gas)) - to_chat(user, "The water temperature seems to be [watertemp].") - return - - if(isWrench(I)) - var/newtemp = input(user, "What setting would you like to set the temperature valve to?", "Water Temperature Valve") in temperature_settings - to_chat(user,"You begin to adjust the temperature valve with \the [I].") - playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1) - if(do_after(user, 5 SECONDS, src, DO_PUBLIC_UNIQUE)) - watertemp = newtemp - user.visible_message("\The [user] adjusts \the [src] with \the [I].", "You adjust the shower with \the [I].") - add_fingerprint(user) - return - . = ..() - -/obj/structure/hygiene/shower/on_update_icon() //this is terribly unreadable, but basically it makes the shower mist up - overlays.Cut() //once it's been on for a while, in addition to handling the water overlay. - if(mymist) - qdel(mymist) - mymist = null - - if(on) - overlays += image('icons/obj/watercloset.dmi', src, "water", MOB_LAYER + 1, dir) - if(temperature_settings[watertemp] < T20C) - return //no mist for cold water - if(!ismist) - spawn(50) - if(src && on) - ismist = 1 - mymist = new /obj/effect/mist(loc) - else - ismist = 1 - mymist = new /obj/effect/mist(loc) - else if(ismist) - ismist = 1 - mymist = new /obj/effect/mist(loc) - spawn(250) - if(src && !on) - qdel(mymist) - mymist = null - ismist = 0 - -//Yes, showers are super powerful as far as washing goes. -/obj/structure/hygiene/shower/proc/wash(var/atom/movable/washing) - if(on) - wash_mob(washing) - if(isturf(loc)) - var/turf/tile = loc - for(var/obj/effect/E in tile) - if(istype(E,/obj/effect/decal/cleanable) || istype(E,/obj/effect/overlay)) - qdel(E) - reagents.splash(washing, 10) - -/obj/structure/hygiene/shower/Process() - ..() - if(!on) return - - for(var/thing in loc) - var/atom/movable/AM = thing - var/mob/living/L = thing - if(istype(AM) && AM.simulated) - wash(AM) - if(istype(L)) - process_heat(L) - wash_floor() - reagents.add_reagent(/datum/reagent/water, reagents.get_free_space()) - -/obj/structure/hygiene/shower/proc/wash_floor() - if(!ismist && is_washing) - return - is_washing = 1 - var/turf/T = get_turf(src) - reagents.splash(T, reagents.total_volume) - T.clean(src) - spawn(100) - is_washing = 0 - -/obj/structure/hygiene/shower/proc/process_heat(mob/living/M) - if(!on || !istype(M)) return - - var/water_temperature = temperature_settings[watertemp] - var/temp_adj = clamp(water_temperature - M.bodytemperature, BODYTEMP_COOLING_MAX, BODYTEMP_HEATING_MAX) - M.bodytemperature += temp_adj - - if(ishuman(M)) - var/mob/living/carbon/human/H = M - if(water_temperature >= H.species.heat_level_1) - to_chat(H, "The water is searing hot!") - else if(water_temperature <= H.species.cold_level_1) - to_chat(H, "The water is freezing cold!") - -/obj/item/bikehorn/rubberducky - name = "rubber ducky" - desc = "Rubber ducky you're so fine, you make bathtime lots of fuuun. Rubber ducky I'm awfully fooooond of yooooouuuu~" //thanks doohl - icon = 'icons/obj/watercloset.dmi' - icon_state = "rubberducky" - item_state = "rubberducky" - -/obj/structure/hygiene/sink - name = "sink" - icon = 'icons/obj/watercloset.dmi' - icon_state = "sink" - desc = "A sink used for washing one's hands and face." - anchored = TRUE - var/busy = 0 //Something's being washed at the moment - -/obj/structure/hygiene/sink/MouseDrop_T(var/obj/item/thing, var/mob/user) - ..() - if(!istype(thing) || !thing.is_open_container()) - return ..() - if(!usr.Adjacent(src)) - return ..() - if(!thing.reagents || thing.reagents.total_volume == 0) - to_chat(usr, "\The [thing] is empty.") - return - // Clear the vessel. - visible_message("\The [usr] tips the contents of \the [thing] into \the [src].") - thing.reagents.clear_reagents() - thing.update_icon() - -/obj/structure/hygiene/sink/attack_hand(var/mob/user) - if (ishuman(user)) - var/mob/living/carbon/human/H = user - var/obj/item/organ/external/temp = H.organs_by_name[BP_R_HAND] - if (user.hand) - temp = H.organs_by_name[BP_L_HAND] - if(temp && !temp.is_usable()) - to_chat(user,"You try to move your [temp.name], but cannot!") - return - - if(isrobot(user) || isAI(user)) - return - - if(!Adjacent(user)) - return - - if(busy) - to_chat(user, "Someone's already washing here.") - return - - to_chat(usr, "You start washing your hands.") - playsound(loc, 'sound/effects/sink_long.ogg', 75, 1) - - busy = 1 - if(!do_after(user, 4 SECONDS, src, DO_PUBLIC_UNIQUE)) - busy = 0 - return TRUE - busy = 0 - - user.clean_blood() - user.visible_message( \ - "[user] washes their hands using \the [src].", \ - "You wash your hands using \the [src].") - - -/obj/structure/hygiene/sink/attackby(obj/item/O as obj, var/mob/living/user) - - if(isplunger(O) && clogged > 0) - return ..() - - if(busy) - to_chat(user, "Someone's already washing here.") - return - - var/obj/item/reagent_containers/RG = O - if (istype(RG) && RG.is_open_container() && RG.reagents) - RG.reagents.add_reagent(/datum/reagent/water, min(RG.volume - RG.reagents.total_volume, RG.amount_per_transfer_from_this)) - user.visible_message("[user] fills \the [RG] using \the [src].","You fill \the [RG] using \the [src].") - playsound(loc, 'sound/effects/sink.ogg', 75, 1) - return 1 - - else if (istype(O, /obj/item/melee/baton)) - var/obj/item/melee/baton/B = O - if(B.bcell) - if(B.bcell.charge > 0 && B.status == 1) - flick("baton_active", src) - user.Stun(10) - user.stuttering = 10 - user.Weaken(10) - if(isrobot(user)) - var/mob/living/silicon/robot/R = user - R.cell.charge -= 20 - else - B.deductcharge(B.hitcost) - user.visible_message( \ - "[user] was stunned by \his wet [O]!", \ - "[user] was stunned by \his wet [O]!") - return 1 - else if(istype(O, /obj/item/mop)) - O.reagents.add_reagent(/datum/reagent/water, 5) - to_chat(user, "You wet \the [O] in \the [src].") - playsound(loc, 'sound/effects/slosh.ogg', 25, 1) - return - - var/turf/location = user.loc - if(!isturf(location)) return - - var/obj/item/I = O - if(!I || !istype(I,/obj/item)) return - - to_chat(usr, "You start washing \the [I].") - playsound(loc, 'sound/effects/sink_long.ogg', 75, 1) - - busy = 1 - if(!do_after(user, 4 SECONDS, src, DO_PUBLIC_UNIQUE)) - busy = 0 - return TRUE - busy = 0 - - if(istype(O, /obj/item/extinguisher)) return TRUE // We're washing, not filling. - - O.clean_blood() - user.visible_message( \ - "[user] washes \a [I] using \the [src].", \ - "You wash \a [I] using \the [src].") - - -/obj/structure/hygiene/sink/kitchen - name = "kitchen sink" - icon_state = "sink_alt" - -/obj/structure/hygiene/sink/puddle //splishy splashy ^_^ - name = "puddle" - icon_state = "puddle" - clogged = -1 // how do you clog a puddle - -/obj/structure/hygiene/sink/puddle/attack_hand(var/mob/M) - icon_state = "puddle-splash" - ..() - icon_state = "puddle" - -/obj/structure/hygiene/sink/puddle/attackby(obj/item/O as obj, var/mob/user) - icon_state = "puddle-splash" - ..() - icon_state = "puddle" - -//toilet paper interaction for clogging toilets and other facilities - -/obj/structure/hygiene/attackby(obj/item/I, mob/user) - if (!istype(I, /obj/item/taperoll/bog)) - ..() - return - if (clogged == -1) - to_chat(user, SPAN_WARNING("Try as you might, you can not clog \the [src] with \the [I].")) - return - if (clogged) - to_chat(user, SPAN_WARNING("\The [src] is already clogged.")) - return - if (!do_after(user, 3 SECONDS, src, DO_PUBLIC_UNIQUE)) - return - if (clogged || QDELETED(I) || !user.unEquip(I)) - return - to_chat(user, SPAN_NOTICE("You unceremoniously jam \the [src] with \the [I]. What a rebel.")) - clog(1) - qdel(I) - -/obj/item/taperoll/bog - name = "toilet paper roll" - icon = 'icons/obj/watercloset.dmi' - desc = "A unbranded roll of standard issue two ply toilet paper. Refined from carefully rendered down sea shells due to SolGov's 'Abuse Of The Trees Act'." - tape_type = /obj/item/tape/bog - icon_state = "bogroll" - item_state = "mummy_poor" - slot_flags = SLOT_HEAD | SLOT_OCLOTHING - var/sheets = 30 - -/obj/item/tape/bog - name = "toilet paper" - desc = "A length of toilet paper. Seems like custodia is marking their territory again." - icon_base = "stripetape" - color = COLOR_WHITE - detail_overlay = "stripes" - detail_color = COLOR_WHITE - -/obj/item/taperoll/bog/verb/tear_sheet() - set category = "Object" - set name = "Tear Sheet" - set desc = "Tear a sheet of toilet paper." - if (usr.incapacitated()) - return - if(sheets > 0) - visible_message("\The [usr] tears a sheet from \the [src].", "You tear a sheet from \the [src].") - var/obj/item/paper/crumpled/bog/C = new(loc) - usr.put_in_hands(C) - sheets-- - if (sheets < 1) - to_chat(usr, "\The [src] is depleted.") - qdel(src) - -/obj/item/paper/crumpled/bog - name = "sheet of toilet paper" - desc = "A single sheet of toilet paper. Two ply." - icon = 'icons/obj/watercloset.dmi' - icon_state = "bogroll_sheet" - -/obj/structure/hygiene/faucet - name = "faucet" - icon = 'icons/obj/watercloset.dmi' - icon_state = "faucet" - desc = "An outlet for liquids. Water you waiting for?" - anchored = TRUE - drainage = 0 - clogged = -1 - var/fill_level = 500 - var/open = FALSE - -/obj/structure/hygiene/faucet/attackby(obj/item/thing, mob/user) - if (isWrench(thing)) - new /obj/item/faucet (loc) - playsound(loc, 'sound/items/Ratchet.ogg', 50, 1) - user.visible_message( - SPAN_WARNING("\The [user] unwrenches \the [src]."), - SPAN_WARNING("You unwrench \the [src].") - ) - qdel(src) - return TRUE - return ..() - -/obj/structure/hygiene/faucet/attack_hand(mob/user) - . = ..() - open = !open - if(open) - playsound(loc, 'sound/effects/closet_open.ogg', 20, 1) - else - playsound(loc, 'sound/effects/closet_close.ogg', 20, 1) - - user.visible_message( - SPAN_NOTICE("\The [user] has [open ? "opened" : "closed"] \the [src]."), - SPAN_NOTICE("You [open ? "open" : "close"] \the [src].") - ) - update_icon() - -/obj/structure/hygiene/faucet/on_update_icon() - . = ..() - icon_state = icon_state = "[initial(icon_state)][open ? "-on" : ""]" - -/obj/item/faucet - name = "faucet" - desc = "An outlet for liquids. Water you waiting for?" - icon = 'icons/obj/watercloset.dmi' - icon_state = "faucet-item" - obj_flags = OBJ_FLAG_ROTATABLE - var/constructed_type = /obj/structure/hygiene/faucet - -/obj/item/faucet/attackby(obj/item/thing, mob/user) - if(isWrench(thing)) - var/turf/simulated/floor/F = loc - if (istype(F) && istype(F.flooring, /decl/flooring/pool)) - var/obj/O = new constructed_type (loc) - O.dir = dir - playsound(loc, 'sound/items/Ratchet.ogg', 50, 1) - user.visible_message( - SPAN_WARNING("\The [user] wrenches \the [src] down."), - SPAN_WARNING("You wrench \the [src] down.") - ) - qdel(src) - else - to_chat(user, SPAN_WARNING("\The [src] can only be secured to pool tiles!")) - return TRUE - return ..() - -/obj/structure/hygiene/faucet/proc/water_flow() - if(!isturf(src.loc)) - return - - // Check for depth first, and pass if the water's too high. I know players will find a way to just submerge entire ship if I do not. - var/turf/T = get_turf(src) - - if(!T || T.get_fluid_depth() > fill_level) - return - - if(world.time > next_gurgle) - next_gurgle = world.time + 80 - playsound(T, pick(SSfluids.gurgles), 50, 1) - - T.add_fluid(min(75, fill_level - T.get_fluid_depth()), /datum/reagent/water) - -/obj/structure/hygiene/faucet/Process() - ..() - if(open) - water_flow() - -/obj/structure/hygiene/faucet/examine(mob/user) - . = ..() - to_chat(user, "It is turned [open ? "on" : "off"]") diff --git a/code/game/objects/structures/windoor_assembly.dm b/code/game/objects/structures/windoor_assembly.dm deleted file mode 100644 index 4fbcd7b1b2db2..0000000000000 --- a/code/game/objects/structures/windoor_assembly.dm +++ /dev/null @@ -1,271 +0,0 @@ -/* Windoor (window door) assembly -Nodrak - * Step 1: Create a windoor out of rglass - * Step 2: Add r-glass to the assembly to make a secure windoor (Optional) - * Step 3: Rotate or Flip the assembly to face and open the way you want - * Step 4: Wrench the assembly in place - * Step 5: Add cables to the assembly - * Step 6: Set access for the door. - * Step 7: Crowbar the door to complete - */ - - -/obj/structure/windoor_assembly - name = "windoor assembly" - icon = 'icons/obj/doors/windoor.dmi' - icon_state = "l_windoor_assembly01" - anchored = FALSE - density = FALSE - dir = NORTH - w_class = ITEM_SIZE_NORMAL - - var/obj/item/airlock_electronics/electronics = null - - //Vars to help with the icon's name - var/facing = "l" //Does the windoor open to the left or right? - var/secure = "" //Whether or not this creates a secure windoor - var/state = "01" //How far the door assembly has progressed in terms of sprites - -/obj/structure/windoor_assembly/New(Loc, start_dir=NORTH, constructed=0) - ..() - if(constructed) - state = "01" - anchored = FALSE - switch(start_dir) - if(NORTH, SOUTH, EAST, WEST) - set_dir(start_dir) - else //If the user is facing northeast. northwest, southeast, southwest or north, default to north - set_dir(NORTH) - - update_nearby_tiles(need_rebuild=1) - -/obj/structure/windoor_assembly/Destroy() - set_density(0) - update_nearby_tiles() - ..() - -/obj/structure/windoor_assembly/on_update_icon() - icon_state = "[facing]_[secure]windoor_assembly[state]" - -/obj/structure/windoor_assembly/CanPass(atom/movable/mover, turf/target, height=0, air_group=0) - if(istype(mover) && mover.checkpass(PASS_FLAG_GLASS)) - return 1 - if(get_dir(loc, target) == dir) //Make sure looking at appropriate border - if(air_group) return 0 - return !density - else - return 1 - -/obj/structure/windoor_assembly/CheckExit(atom/movable/mover as mob|obj, turf/target as turf) - if(istype(mover) && mover.checkpass(PASS_FLAG_GLASS)) - return 1 - if(get_dir(loc, target) == dir) - return !density - else - return 1 - - -/obj/structure/windoor_assembly/attackby(obj/item/W as obj, mob/user as mob) - //I really should have spread this out across more states but thin little windoors are hard to sprite. - switch(state) - if("01") - if(isWelder(W) && !anchored ) - var/obj/item/weldingtool/WT = W - if (WT.remove_fuel(0,user)) - user.visible_message("[user] dissassembles the windoor assembly.", "You start to dissassemble the windoor assembly.") - playsound(src.loc, 'sound/items/Welder2.ogg', 50, 1) - - if(do_after(user, 4 SECONDS, src, DO_PUBLIC_UNIQUE)) - if(!src || !WT.isOn()) return - to_chat(user, "You dissasembled the windoor assembly!") - new /obj/item/stack/material/glass/reinforced(get_turf(src), 5) - if(secure) - new /obj/item/stack/material/rods(get_turf(src), 4) - qdel(src) - else - to_chat(user, "You need more welding fuel to dissassemble the windoor assembly.") - return - - //Wrenching an unsecure assembly anchors it in place. Step 4 complete - if(isWrench(W) && !anchored) - playsound(src.loc, 'sound/items/Ratchet.ogg', 100, 1) - user.visible_message("[user] secures the windoor assembly to the floor.", "You start to secure the windoor assembly to the floor.") - - if(do_after(user, 4 SECONDS, src, DO_PUBLIC_UNIQUE)) - if(!src) return - to_chat(user, "You've secured the windoor assembly!") - src.anchored = TRUE - if(src.secure) - src.SetName("Secure Anchored Windoor Assembly") - else - src.SetName("Anchored Windoor Assembly") - - //Unwrenching an unsecure assembly un-anchors it. Step 4 undone - else if(isWrench(W) && anchored) - playsound(src.loc, 'sound/items/Ratchet.ogg', 100, 1) - user.visible_message("[user] unsecures the windoor assembly to the floor.", "You start to unsecure the windoor assembly to the floor.") - - if(do_after(user, 4 SECONDS, src, DO_PUBLIC_UNIQUE)) - if(!src) return - to_chat(user, "You've unsecured the windoor assembly!") - src.anchored = FALSE - if(src.secure) - src.SetName("Secure Windoor Assembly") - else - src.SetName("Windoor Assembly") - - //Adding plasteel makes the assembly a secure windoor assembly. Step 2 (optional) complete. - else if(istype(W, /obj/item/stack/material/rods) && !secure) - var/obj/item/stack/material/rods/R = W - if(R.get_amount() < 4) - to_chat(user, "You need more rods to do this.") - return - to_chat(user, "You start to reinforce the windoor with rods.") - - if(do_after(user, 4 SECONDS, src, DO_PUBLIC_UNIQUE) && !secure) - if (R.use(4)) - to_chat(user, "You reinforce the windoor.") - src.secure = "secure_" - if(src.anchored) - src.SetName("Secure Anchored Windoor Assembly") - else - src.SetName("Secure Windoor Assembly") - - //Adding cable to the assembly. Step 5 complete. - else if(istype(W, /obj/item/stack/cable_coil) && anchored) - user.visible_message("[user] wires the windoor assembly.", "You start to wire the windoor assembly.") - - var/obj/item/stack/cable_coil/CC = W - if(do_after(user, 4 SECONDS, src, DO_PUBLIC_UNIQUE)) - if (CC.use(1)) - to_chat(user, "You wire the windoor!") - src.state = "02" - if(src.secure) - src.SetName("Secure Wired Windoor Assembly") - else - src.SetName("Wired Windoor Assembly") - else - ..() - - if("02") - - //Removing wire from the assembly. Step 5 undone. - if(isWirecutter(W) && !src.electronics) - playsound(src.loc, 'sound/items/Wirecutter.ogg', 100, 1) - user.visible_message("[user] cuts the wires from the airlock assembly.", "You start to cut the wires from airlock assembly.") - - if(do_after(user, 4 SECONDS, src, DO_PUBLIC_UNIQUE)) - if(!src) return - - to_chat(user, "You cut the windoor wires.!") - new/obj/item/stack/cable_coil(get_turf(user), 1) - src.state = "01" - if(src.secure) - src.SetName("Secure Anchored Windoor Assembly") - else - src.SetName("Anchored Windoor Assembly") - - //Adding airlock electronics for access. Step 6 complete. - else if(istype(W, /obj/item/airlock_electronics) && W:icon_state != "door_electronics_smoked") - playsound(src.loc, 'sound/items/Screwdriver.ogg', 100, 1) - user.visible_message("[user] installs the electronics into the airlock assembly.", "You start to install electronics into the airlock assembly.") - - if(do_after(user, 4 SECONDS, src, DO_PUBLIC_UNIQUE)) - if(!src) return - if(!user.unEquip(W, src)) - return - to_chat(user, "You've installed the airlock electronics!") - src.SetName("Near finished Windoor Assembly") - src.electronics = W - else - W.dropInto(loc) - - //Screwdriver to remove airlock electronics. Step 6 undone. - else if(isScrewdriver(W) && src.electronics) - playsound(src.loc, 'sound/items/Screwdriver.ogg', 100, 1) - user.visible_message("[user] removes the electronics from the airlock assembly.", "You start to uninstall electronics from the airlock assembly.") - - if(do_after(user, 4 SECONDS, src, DO_PUBLIC_UNIQUE)) - if(!src || !src.electronics) return - to_chat(user, "You've removed the airlock electronics!") - if(src.secure) - src.SetName("Secure Wired Windoor Assembly") - else - src.SetName("Wired Windoor Assembly") - var/obj/item/airlock_electronics/ae = electronics - electronics = null - ae.dropInto(loc) - - //Crowbar to complete the assembly, Step 7 complete. - else if(isCrowbar(W)) - if(!src.electronics) - to_chat(usr, "The assembly is missing electronics.") - return - close_browser(usr, "window=windoor_access") - playsound(src.loc, 'sound/items/Crowbar.ogg', 100, 1) - user.visible_message("[user] pries the windoor into the frame.", "You start prying the windoor into the frame.") - - if(do_after(user, 4 SECONDS, src, DO_PUBLIC_UNIQUE)) - set_density(1) //Shouldn't matter but just incase - to_chat(user, "You finish the windoor!") - - var/obj/machinery/door/window/windoor - if(secure) - windoor = new /obj/machinery/door/window/brigdoor(loc, src) - if(facing == "l") - windoor.icon_state = "leftsecureopen" - windoor.base_state = "leftsecure" - else - windoor.icon_state = "rightsecureopen" - windoor.base_state = "rightsecure" - else - windoor = new (loc, src) - if(src.facing == "l") - windoor.icon_state = "leftopen" - windoor.base_state = "left" - else - windoor.icon_state = "rightopen" - windoor.base_state = "right" - qdel(src) - - else - ..() - - //Update to reflect changes(if applicable) - update_icon() - - -//Rotates the windoor assembly clockwise -/obj/structure/windoor_assembly/verb/revrotate() - set name = "Rotate Windoor Assembly" - set category = "Object" - set src in oview(1) - - if (src.anchored) - to_chat(usr, "It is fastened to the floor; therefore, you can't rotate it!") - return 0 - if(src.state != "01") - update_nearby_tiles(need_rebuild=1) //Compel updates before - - src.set_dir(turn(src.dir, 270)) - - if(src.state != "01") - update_nearby_tiles(need_rebuild=1) - - update_icon() - return - -//Flips the windoor assembly, determines whather the door opens to the left or the right -/obj/structure/windoor_assembly/verb/flip() - set name = "Flip Windoor Assembly" - set category = "Object" - set src in oview(1) - - if(src.facing == "l") - to_chat(usr, "The windoor will now slide to the right.") - src.facing = "r" - else - src.facing = "l" - to_chat(usr, "The windoor will now slide to the left.") - - update_icon() - return diff --git a/code/game/objects/structures/window.dm b/code/game/objects/structures/window.dm deleted file mode 100644 index 30e815c8a060b..0000000000000 --- a/code/game/objects/structures/window.dm +++ /dev/null @@ -1,801 +0,0 @@ -/obj/structure/window - name = "window" - desc = "A window." - icon = 'icons/obj/window.dmi' - density = TRUE - w_class = ITEM_SIZE_NORMAL - - damage_hitsound = 'sound/effects/Glasshit.ogg' - - layer = SIDE_WINDOW_LAYER - anchored = TRUE - atom_flags = ATOM_FLAG_NO_TEMP_CHANGE | ATOM_FLAG_CAN_BE_PAINTED | ATOM_FLAG_CHECKS_BORDER - obj_flags = OBJ_FLAG_ROTATABLE - alpha = 180 - var/material/reinf_material - var/damaged_reinf = FALSE - var/init_material = MATERIAL_GLASS - var/init_reinf_material = null - var/damage_per_fire_tick = 2 // Amount of damage per fire tick. Regular windows are not fireproof so they might as well break quickly. - var/construction_state = 2 - var/id - var/polarized = 0 - var/basestate = "window" - var/reinf_basestate = "rwindow" - var/paint_color - var/base_color // The windows initial color. Used for resetting purposes. - var/repair_pending = 0 // Amount of health pending repair once the window is welded - rad_resistance_modifier = 0.5 - blend_objects = list(/obj/machinery/door, /turf/simulated/wall) // Objects which to blend with - noblend_objects = list(/obj/machinery/door/window) - - atmos_canpass = CANPASS_PROC - -/obj/structure/window/get_mechanics_info() - . = "

              If damaged, it can be repaired by applying some [get_material_display_name()] then welding it. This particular window can require up to [get_glass_cost()] sheets to fully repair depending on damage.

              " - -/obj/structure/window/get_material() - return material - -/obj/structure/window/get_material_display_name() - . = ..() - . = "[.] sheets" - if (reinf_material) - . = "[reinf_material.display_name]-reinforced [.]" - -/obj/structure/window/Initialize(mapload, start_dir=null, constructed=0, var/new_material, var/new_reinf_material) - . = ..() - if(!new_material) - new_material = init_material - if(!new_material) - new_material = MATERIAL_GLASS - if(!new_reinf_material) - new_reinf_material = init_reinf_material - material = SSmaterials.get_material_by_name(new_material) - if(!istype(material)) - return INITIALIZE_HINT_QDEL - - if(new_reinf_material) - reinf_material = SSmaterials.get_material_by_name(new_reinf_material) - - name = "[reinf_material ? "[reinf_material.display_name]-reinforced " : ""][material.display_name] window" - desc = "A window pane made from [material.display_name][reinf_material ? " and reinforced with [reinf_material.display_name]" : ""]." - - if (start_dir) - set_dir(start_dir) - - var/new_max_health = material.integrity - if(reinf_material) - new_max_health += 0.5 * reinf_material.integrity - set_max_health(new_max_health) - - if(is_fulltile()) - layer = FULL_WINDOW_LAYER - - health_min_damage = material.hardness * 1.25 - if (reinf_material) - health_min_damage += round(reinf_material.hardness * 0.625) - health_min_damage = round(health_min_damage / 10) - - if (constructed) - set_anchored(FALSE) - construction_state = 0 - - base_color = get_color() - - update_connections(1) - update_icon() - update_nearby_tiles(need_rebuild=1) - -/obj/structure/window/Destroy() - set_density(0) - update_nearby_tiles() - var/turf/location = loc - . = ..() - for(var/obj/structure/window/W in orange(1, location)) - W.update_connections() - W.queue_icon_update() - -/obj/structure/window/examine(mob/user) - . = ..(user) - to_chat(user, SPAN_NOTICE("It is fitted with \a [material.display_name] pane.")) - if(reinf_material) - to_chat(user, SPAN_NOTICE("It is reinforced with \a [reinf_material.display_name] lattice.")) - - if (reinf_material) - switch (construction_state) - if (0) - to_chat(user, SPAN_WARNING("The window is not in the frame.")) - if (1) - to_chat(user, SPAN_WARNING("The window is pried into the frame but not yet fastened.")) - if (2) - to_chat(user, SPAN_NOTICE("The window is fastened to the frame.")) - - if (anchored) - to_chat(user, SPAN_NOTICE("It is fastened to \the [get_turf(src)].")) - else - to_chat(user, SPAN_WARNING("It is not fastened to anything.")) - - if (paint_color) - to_chat(user, SPAN_NOTICE("\The [material] pane is stained with paint.")) - - if (polarized) - to_chat(user, SPAN_NOTICE("It appears to be wired.")) - -/obj/structure/window/examine_damage_state(mob/user) - var/damage_percentage = get_damage_percentage() - switch (damage_percentage) - if (0) - to_chat(user, SPAN_NOTICE("It looks fully intact.")) - if (1 to 24) - to_chat(user, SPAN_WARNING("\The [material] pane has a few cracks.")) - if (25 to 49) - to_chat(user, SPAN_WARNING("\The [material] pane looks slightly damaged.")) - if (50 to 74) - to_chat(user, SPAN_WARNING("\The [material] pane looks moderately damaged.")) - else - to_chat(user, SPAN_WARNING("\The [material] pane looks severely damaged.")) - -/obj/structure/window/get_color() - if (paint_color) - return paint_color - else if (material?.icon_colour) - return material.icon_colour - else if (base_color) - return base_color - else - return ..() - -/obj/structure/window/set_color(color) - paint_color = color - update_icon() - -/obj/structure/window/CanFluidPass(var/coming_from) - return (!is_fulltile() && coming_from != dir) - -/obj/structure/window/post_health_change(health_mod, damage_type) - ..() - update_icon() - if (health_mod < 0) - var/initial_damage_percentage = round(((get_current_health() - health_mod) / get_max_health()) * 100) - var/damage_percentage = get_damage_percentage() - if (damage_percentage >= 75 && initial_damage_percentage < 75) - visible_message(SPAN_DANGER("\The [src] looks like it's about to shatter!")) - playsound(loc, "glasscrack", 100, 1) - else if (damage_percentage >= 50 && initial_damage_percentage < 50) - visible_message(SPAN_WARNING("\The [src] looks seriously damaged!")) - playsound(loc, "glasscrack", 100, 1) - else if (damage_percentage >= 25 && initial_damage_percentage < 25) - visible_message(SPAN_WARNING("Cracks begin to appear in \the [src]!")) - playsound(loc, "glasscrack", 100, 1) - -/obj/structure/window/proc/get_glass_cost() - return is_fulltile() ? 4 : 1 - -/obj/structure/window/proc/get_repaired_per_unit() - return round(get_max_health() / get_glass_cost()) - -/obj/structure/window/on_death() - shatter() - -/obj/structure/window/proc/shatter(var/display_message = 1) - playsound(src, "shatter", 70, 1) - if(display_message) - visible_message("\The [src] shatters!") - - var/debris_count = round(get_glass_cost() / rand(1, 4)) - for(var/i = 1 to debris_count) - material.place_shard(loc) - if(reinf_material) - debris_count = rand(0, 1) - new /obj/item/stack/material/rods(loc, debris_count, reinf_material.name) - qdel(src) - -/obj/structure/window/ex_act(severity) - if (severity == EX_ACT_DEVASTATING) - qdel(src) - return - ..() - -/obj/structure/window/CanPass(atom/movable/mover, turf/target, height=0, air_group=0) - if(istype(mover) && mover.checkpass(PASS_FLAG_GLASS)) - return 1 - if(is_fulltile()) - return 0 //full tile window, you can't move into it! - if(get_dir(loc, target) & dir) - return !density - else - return 1 - -/obj/structure/window/CheckExit(atom/movable/O as mob|obj, target as turf) - if(istype(O) && O.checkpass(PASS_FLAG_GLASS)) - return 1 - if(get_dir(O.loc, target) == dir) - return 0 - return 1 - -/obj/structure/window/hitby(atom/movable/AM, var/datum/thrownthing/TT) - ..() - visible_message("[src] was hit by [AM].") - var/tforce = 0 - if(ismob(AM)) // All mobs have a multiplier and a size according to mob_defines.dm - var/mob/I = AM - tforce = I.mob_size * (TT.speed/THROWFORCE_SPEED_DIVISOR) - else if(isobj(AM)) - var/obj/item/I = AM - tforce = I.throwforce * (TT.speed/THROWFORCE_SPEED_DIVISOR) - if(reinf_material) tforce *= 0.25 - playsound(loc, 'sound/effects/Glasshit.ogg', 100, 1) - damage_health(tforce, DAMAGE_BRUTE) - deanchor(AM) - -/obj/structure/window/attack_hand(mob/user as mob) - user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN) - if(MUTATION_HULK in user.mutations) - user.say(pick(";RAAAAAAAARGH!", ";HNNNNNNNNNGGGGGGH!", ";GWAAAAAAAARRRHHH!", "NNNNNNNNGGGGGGGGHH!", ";AAAAAAARRRGH!")) - user.visible_message("[user] smashes through [src]!") - user.do_attack_animation(src) - shatter() - else if(MUTATION_FERAL in user.mutations) - user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN*2) //Additional cooldown - attack_generic(user, 10, "smashes") - - else if (user.a_intent && user.a_intent == I_HURT) - - if (istype(user,/mob/living/carbon/human)) - var/mob/living/carbon/human/H = user - if(H.species.can_shred(H)) - attack_generic(H,25) - return - - playsound(src.loc, 'sound/effects/glassknock.ogg', 80, 1) - user.do_attack_animation(src) - user.visible_message("\The [user] bangs against \the [src]!", - "You bang against \the [src]!", - "You hear a banging sound.") - else - playsound(src.loc, 'sound/effects/glassknock.ogg', 80, 1) - user.visible_message("[user.name] knocks on the [src.name].", - "You knock on the [src.name].", - "You hear a knocking sound.") - return - -/obj/structure/window/attack_generic(var/mob/user, var/damage, var/attack_verb, var/environment_smash) - if(environment_smash >= 1) - damage = max(damage, 10) - - if(istype(user)) - user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN) - user.do_attack_animation(src) - if(!damage) - return - if(can_damage_health(damage, DAMAGE_BRUTE)) - visible_message("[user] [attack_verb] into [src]!") - playsound(loc, 'sound/effects/Glasshit.ogg', 100, 1) - damage_health(damage, DAMAGE_BRUTE) - else - visible_message("\The [user] bonks \the [src] harmlessly.") - return 1 - -/obj/structure/window/do_simple_ranged_interaction(var/mob/user) - visible_message(SPAN_NOTICE("Something knocks on \the [src].")) - playsound(loc, 'sound/effects/Glasshit.ogg', 50, 1) - return TRUE - -/obj/structure/window/attackby(obj/item/W as obj, mob/user as mob) - if(!istype(W)) return//I really wish I did not need this - - if(W.item_flags & ITEM_FLAG_NO_BLUDGEON) return - - var/area/A = get_area(src) - if (!A?.can_modify_area()) - to_chat(user, SPAN_NOTICE("There appears to be no way to dismantle \the [src]!")) - return - - if (user.a_intent == I_HURT) - ..() - return - - if (isScrewdriver(W)) - if(reinf_material && construction_state >= 1) - construction_state = 3 - construction_state - update_nearby_icons() - playsound(loc, 'sound/items/Screwdriver.ogg', 75, 1) - to_chat(user, (construction_state == 1 ? "You have unfastened the window from the frame." : "You have fastened the window to the frame.")) - else if(reinf_material && construction_state == 0) - if(!can_install_here(user)) - return - set_anchored(!anchored) - playsound(loc, 'sound/items/Screwdriver.ogg', 75, 1) - to_chat(user, (anchored ? "You have fastened the frame to the floor." : "You have unfastened the frame from the floor.")) - else - if(!can_install_here(user)) - return - set_anchored(!anchored) - playsound(loc, 'sound/items/Screwdriver.ogg', 75, 1) - to_chat(user, (anchored ? "You have fastened the window to the floor." : "You have unfastened the window.")) - return - - if (isCrowbar(W) && reinf_material && construction_state <= 1 && anchored) - construction_state = 1 - construction_state - playsound(loc, 'sound/items/Crowbar.ogg', 75, 1) - to_chat(user, (construction_state ? "You have pried the window into the frame." : "You have pried the window out of the frame.")) - return - - if (isWrench(W) && !anchored && (!construction_state || !reinf_material)) - if(!material.stack_type) - to_chat(user, "You're not sure how to dismantle \the [src] properly.") - else - playsound(src.loc, 'sound/items/Ratchet.ogg', 75, 1) - visible_message("[user] dismantles \the [src].") - var/obj/item/stack/material/S = material.place_sheet(loc, is_fulltile() ? 4 : 1) - if(S && reinf_material) - S.reinf_material = reinf_material - S.update_strings() - S.update_icon() - qdel(src) - return - - if (isCoil(W) && is_fulltile()) - if (polarized) - to_chat(user, SPAN_WARNING("\The [src] is already polarized.")) - return - var/obj/item/stack/cable_coil/C = W - if (C.use(1)) - playsound(src.loc, 'sound/effects/sparks1.ogg', 75, 1) - polarized = TRUE - to_chat(user, SPAN_NOTICE("You wire and polarize \the [src].")) - return - - if (isWirecutter(W)) - if (!polarized) - to_chat(user, SPAN_WARNING("\The [src] is not polarized.")) - return - new /obj/item/stack/cable_coil(get_turf(user), 1) - if (opacity) - toggle() - polarized = FALSE - id = null - playsound(loc, 'sound/items/Wirecutter.ogg', 75, 1) - to_chat(user, SPAN_NOTICE("You cut the wiring and remove the polarization from \the [src].")) - return - - if (isMultitool(W)) - if (!polarized) - to_chat(user, SPAN_WARNING("\The [src] is not polarized.")) - return - if (anchored) - playsound(loc, 'sound/effects/pop.ogg', 75, 1) - to_chat(user, SPAN_NOTICE("You toggle \the [src]'s tinting.")) - toggle() - else - var/response = input(user, "New Window ID:", name, id) as null | text - if (isnull(response) || user.incapacitated() || !user.Adjacent(src) || user.get_active_hand() != W) - return - id = sanitizeSafe(response, MAX_NAME_LEN) - to_chat(user, SPAN_NOTICE("The new ID of \the [src] is [id].")) - return - - if (istype(W, /obj/item/gun/energy/plasmacutter) && anchored) - var/obj/item/gun/energy/plasmacutter/cutter = W - if(!cutter.slice(user)) - return - playsound(src, 'sound/items/Welder.ogg', 80, 1) - visible_message("[user] has started slicing through the window's frame!") - if(do_after(user, 2 SECONDS, src, DO_PUBLIC_UNIQUE)) - visible_message("[user] has sliced through the window's frame!") - playsound(src, 'sound/items/Welder.ogg', 80, 1) - construction_state = 0 - set_anchored(0) - return - - if (istype(W, /obj/item/stack/material)) - if (!health_damaged()) - to_chat(user, SPAN_NOTICE("\The [src] does not need repair.")) - return - - if ((repair_pending + get_current_health()) >= get_max_health()) - to_chat(user, SPAN_NOTICE("\The [src] already has enough new [material] applied.")) - return - - var/obj/item/stack/material/G = W - if (material != G.material || reinf_material != G.reinf_material) - to_chat(user, SPAN_WARNING("\The [src] must be repaired with the same type of [get_material_display_name()] it was made of.")) - return - - if (!G.use(1)) - to_chat(user, SPAN_WARNING("You need more [G] to repair \the [src].")) - return - - repair_pending += get_repaired_per_unit() - user.visible_message( - SPAN_NOTICE("\The [user] replaces some of \the [src]'s damaged [material]."), - SPAN_NOTICE("You replace some of \the [src]'s damaged [material].") - ) - if (repair_pending < get_damage_value()) - to_chat(user, SPAN_WARNING("It looks like it could use more sheets.")) - return - - if (istype(W, /obj/item/weldingtool)) - if (!health_damaged()) - to_chat(user, SPAN_NOTICE("\The [src] does not need repair.")) - return - - if (!repair_pending) - to_chat(user, SPAN_WARNING("\The [src] needs some [get_material_display_name()] applied before you can weld it.")) - return - - var/obj/item/weldingtool/T = W - if (!T.welding) - to_chat(user, SPAN_WARNING("\The [T] needs to be turned on first.")) - return - - if (!T.remove_fuel(1, user)) - return - - restore_health(repair_pending) - repair_pending = 0 - user.visible_message( - SPAN_NOTICE("\The [user] welds \the [src]'s [material] into place."), - SPAN_NOTICE("You weld \the [src]'s [material] into place.") - ) - return - - if (istype(W, /obj/item/rcd) || istype(W, /obj/item/device/paint_sprayer)) - return - - ..() - -/obj/structure/window/grab_attack(var/obj/item/grab/G) - if (G.assailant.a_intent != I_HURT) - return TRUE - if (!G.force_danger()) - to_chat(G.assailant, "You need a better grip to do that!") - return TRUE - var/def_zone = ran_zone(BP_HEAD, 20) - if(G.damage_stage() < 2) - G.affecting.visible_message("[G.assailant] bashes [G.affecting] against \the [src]!") - if (prob(50)) - G.affecting.Weaken(1) - G.affecting.apply_damage(10, DAMAGE_BRUTE, def_zone, used_weapon = src) - hit(25, G.assailant, G.affecting) - else - G.affecting.visible_message("[G.assailant] crushes [G.affecting] against \the [src]!") - G.affecting.Weaken(5) - G.affecting.apply_damage(20, DAMAGE_BRUTE, def_zone, used_weapon = src) - hit(50, G.assailant, G.affecting) - return TRUE - -/obj/structure/window/proc/hit(damage, mob/user, atom/weapon = null, damage_type = DAMAGE_BRUTE) - if (can_damage_health(damage, damage_type)) - var/weapon_text = weapon ? " with \the [weapon]" : null - user.visible_message( - SPAN_DANGER("\The [user] attacks \the [src][weapon_text]!"), - SPAN_WARNING("You attack \the [src][weapon_text]!"), - SPAN_WARNING("You hear the sound of something hitting a window.") - ) - playsound(loc, 'sound/effects/Glasshit.ogg', 100, 1) - damage_health(damage, damage_type) - deanchor(user) - else - var/weapon_text = weapon ? " with \the [weapon]" : null - playsound(loc, 'sound/effects/Glasshit.ogg', 50, 1) - user.visible_message( - SPAN_WARNING("\The [user] attacks \the [src][weapon_text], but it bounces off!"), - SPAN_WARNING("You attack \the [src][weapon_text], but it bounces off! You need something stronger."), - SPAN_WARNING("You hear the sound of something hitting a window.") - ) - -/obj/structure/window/proc/deanchor(atom/impact_origin) - if (!health_dead && get_damage_percentage() >= 85) - set_anchored(FALSE) - step(src, get_dir(impact_origin, src)) - -/obj/structure/window/rotate(mob/user) - if(!CanPhysicallyInteract(user)) - to_chat(user, SPAN_NOTICE("You can't interact with \the [src] right now!")) - return - - if (anchored) - to_chat(user, SPAN_NOTICE("\The [src] is secured to the floor!")) - return - - var/newdir=turn(dir, 90) - if(!is_fulltile()) - for(var/obj/structure/window/W in loc) - if(W.dir == newdir) - to_chat(user, SPAN_NOTICE("There's already a window facing that direction here!")) - return - - update_nearby_tiles(need_rebuild=1) //Compel updates before - set_dir(newdir) - update_nearby_tiles(need_rebuild=1) - -/obj/structure/window/Move() - var/ini_dir = dir - update_nearby_tiles(need_rebuild=1) - ..() - set_dir(ini_dir) - update_nearby_tiles(need_rebuild=1) - -//checks if this window is full-tile one -/obj/structure/window/proc/is_fulltile() - if(dir & (dir - 1)) - return 1 - return 0 - -/obj/structure/window/proc/set_anchored(var/new_anchored) - if(anchored == new_anchored) - return - anchored = new_anchored - update_connections(1) - update_nearby_icons() - -//This proc is used to update the icons of nearby windows. It should not be confused with update_nearby_tiles(), which is an atmos proc! -/obj/structure/window/proc/update_nearby_icons() - update_icon() - for(var/obj/structure/window/W in orange(src, 1)) - W.update_icon() - -// Visually connect with every type of window as long as it's full-tile. -/obj/structure/window/can_visually_connect() - return ..() && is_fulltile() - -/obj/structure/window/can_visually_connect_to(var/obj/structure/S) - return istype(S, /obj/structure/window) - -//merges adjacent full-tile windows into one (blatant ripoff from game/smoothwall.dm) -/obj/structure/window/on_update_icon() - //A little cludge here, since I don't know how it will work with slim windows. Most likely VERY wrong. - //this way it will only update full-tile ones - if(reinf_material) - basestate = reinf_basestate - else - basestate = initial(basestate) - overlays.Cut() - layer = FULL_WINDOW_LAYER - if (paint_color) - color = paint_color - else if (material?.icon_colour) - color = material.icon_colour - else - color = GLASS_COLOR - if(!is_fulltile()) - layer = SIDE_WINDOW_LAYER - icon_state = basestate - return - - icon_state = "" - - var/damage_alpha = 0 // Used for alpha blending of damage layer - if (health_damaged()) - damage_alpha = 256 * round(get_damage_percentage() / 100, 0.25) - 1 - - var/img_dir - if(is_on_frame()) - for(var/i = 1 to 4) - img_dir = SHIFTL(1, i - 1) - if(other_connections[i] != "0") - process_icon(basestate, "_other_onframe", "_onframe", connections[i], img_dir, damage_alpha) - else - process_icon(basestate, "_onframe", "_onframe", connections[i], img_dir, damage_alpha) - else - for(var/i = 1 to 4) - img_dir = SHIFTL(1, i - 1) - if(other_connections[i] != "0") - process_icon(basestate, "_other", "", connections[i], img_dir, damage_alpha) - else - process_icon(basestate, "", "", connections[i], img_dir, damage_alpha) - -/obj/structure/window/proc/process_icon(basestate, icon_group, damage_group, connections, img_dir, damage_alpha) - var/image/I = image(icon, "[basestate][icon_group][connections]", dir = img_dir) - I.color = get_color() - overlays += I - - if (damage_group == "_onframe") - process_overlay_damage("window0_damage", damage_alpha, img_dir) - else - process_overlay_damage("window[damage_group][connections]_damage", damage_alpha, img_dir) - -/obj/structure/window/proc/process_overlay_damage(damage_state, damage_alpha, img_dir) - var/image/D - D = image(icon, damage_state, dir = img_dir) - D.blend_mode = BLEND_MULTIPLY - D.alpha = damage_alpha - overlays += D - -/obj/structure/window/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume) - var/melting_point = material.melting_point - if(reinf_material) - melting_point += 0.25*reinf_material.melting_point - if (exposed_temperature > melting_point) - damage_health(damage_per_fire_tick, DAMAGE_FIRE) - -/obj/structure/window/basic - icon_state = "window" - color = GLASS_COLOR - -/obj/structure/window/basic/full - dir = 5 - icon_state = "window_full" - -/obj/structure/window/basic/full/polarized - polarized = 1 - -/obj/structure/window/phoronbasic - name = "phoron window" - color = GLASS_COLOR_PHORON - init_material = MATERIAL_PHORON_GLASS - -/obj/structure/window/phoronbasic/full - dir = 5 - icon_state = "window_full" - -/obj/structure/window/phoronreinforced - name = "reinforced borosilicate window" - icon_state = "rwindow" - color = GLASS_COLOR_PHORON - init_material = MATERIAL_PHORON_GLASS - init_reinf_material = MATERIAL_STEEL - -/obj/structure/window/phoronreinforced/full - dir = 5 - icon_state = "window_full" - -/obj/structure/window/reinforced - name = "reinforced window" - icon_state = "rwindow" - init_material = MATERIAL_GLASS - init_reinf_material = MATERIAL_STEEL - -/obj/structure/window/reinforced/full - dir = 5 - icon_state = "rwindow_full" - -/obj/structure/window/reinforced/tinted - name = "tinted window" - opacity = 1 - color = GLASS_COLOR_TINTED - -/obj/structure/window/reinforced/tinted/frosted - name = "frosted window" - color = GLASS_COLOR_FROSTED - -/obj/structure/window/shuttle - name = "shuttle window" - desc = "It looks rather strong. Might take a few good hits to shatter it." - icon = 'icons/obj/podwindows.dmi' - basestate = "w" - reinf_basestate = "w" - dir = 5 - -/obj/structure/window/reinforced/polarized - name = "electrochromic window" - desc = "Adjusts its tint with voltage. Might take a few good hits to shatter it." - basestate = "rwindow" - polarized = 1 - -/obj/structure/window/reinforced/polarized/full - dir = 5 - icon_state = "rwindow_full" - -/obj/structure/window/proc/toggle() - if(!polarized) - return - if(opacity) - animate(src, color=get_color(), time=5) - set_opacity(FALSE) - else - animate(src, color=GLASS_COLOR_TINTED, time=5) - set_opacity(TRUE) - -/obj/structure/window/proc/is_on_frame() - if(locate(/obj/structure/wall_frame) in loc) - return TRUE - -/obj/structure/window/proc/can_install_here(var/mob/user) - //only care about full tile. Border can be installed anywhere - if(!anchored && is_fulltile()) - for(var/obj/O in loc) - if((O != src) && O.density && !(O.atom_flags & ATOM_FLAG_CHECKS_BORDER) \ - && !(istype(O, /obj/structure/wall_frame) || istype(O, /obj/structure/grille))) - to_chat(user, SPAN_NOTICE("There isn't enough space to install \the [src].")) - return FALSE - return TRUE - -/obj/machinery/button/windowtint - name = "window tint control" - icon = 'icons/obj/power.dmi' - icon_state = "light0" - desc = "A remote control switch for electrochromic windows." - var/id - var/range = 7 - stock_part_presets = null // This isn't a radio-enabled button; it communicates with nearby structures in view. - uncreated_component_parts = list( - /obj/item/stock_parts/power/apc - ) - -/obj/machinery/button/windowtint/attackby(obj/item/device/W as obj, mob/user as mob) - if(isMultitool(W)) - var/t = sanitizeSafe(input(user, "Enter the ID for the button.", src.name, id), MAX_NAME_LEN) - if(user.incapacitated() && !user.Adjacent(src)) - return - if (user.get_active_hand() != W) - return - if (!in_range(src, user) && src.loc != user) - return - t = sanitizeSafe(t, MAX_NAME_LEN) - if (t) - src.id = t - to_chat(user, "The new ID of the button is [id]") - return - if(istype(W, /obj/item/screwdriver)) - new /obj/item/frame/light_switch/windowtint(user.loc, 1) - qdel(src) - -/obj/machinery/button/windowtint/activate() - if(operating) - return - for(var/obj/structure/window/W in range(src,range)) - if(W.polarized && (W.id == src.id || !W.id)) - W.toggle() - ..() - -/obj/machinery/button/windowtint/power_change() - . = ..() - if(active && (stat & NOPOWER)) - activate() - -/obj/machinery/button/windowtint/on_update_icon() - icon_state = "light[active]" - -//Centcomm windows -/obj/structure/window/reinforced/crescent/attack_hand() - return - -/obj/structure/window/reinforced/crescent/attackby() - return - -/obj/structure/window/reinforced/crescent/ex_act() - return - -/obj/structure/window/reinforced/crescent/hitby() - return - -/obj/structure/window/reinforced/crescent/can_damage_health() - SHOULD_CALL_PARENT(FALSE) - return FALSE - -/obj/structure/window/reinforced/crescent/shatter() - return - -/proc/place_window(mob/user, loc, dir_to_set, obj/item/stack/material/ST) - var/required_amount = (dir_to_set & (dir_to_set - 1)) ? 4 : 1 - if (!ST.can_use(required_amount)) - to_chat(user, "You do not have enough sheets.") - return - for(var/obj/structure/window/WINDOW in loc) - if(WINDOW.dir == dir_to_set) - to_chat(user, "There is already a window facing this way there.") - return - if(WINDOW.is_fulltile() && (dir_to_set & (dir_to_set - 1))) //two fulltile windows - to_chat(user, "There is already a window there.") - return - to_chat(user, "You start placing the window.") - if(do_after(user, 2 SECONDS, do_flags = DO_DEFAULT | DO_USER_UNIQUE_ACT | DO_PUBLIC_PROGRESS)) - for(var/obj/structure/window/WINDOW in loc) - if(WINDOW.dir == dir_to_set)//checking this for a 2nd time to check if a window was made while we were waiting. - to_chat(user, "There is already a window facing this way there.") - return - if(WINDOW.is_fulltile() && (dir_to_set & (dir_to_set - 1))) - to_chat(user, "There is already a window there.") - return - - if (ST.use(required_amount)) - var/obj/structure/window/WD = new(loc, dir_to_set, FALSE, ST.material.name, ST.reinf_material && ST.reinf_material.name) - to_chat(user, "You place [WD].") - WD.construction_state = 0 - WD.set_anchored(FALSE) - else - to_chat(user, "You do not have enough sheets.") - return diff --git a/code/game/objects/structures/window_spawner.dm b/code/game/objects/structures/window_spawner.dm deleted file mode 100644 index 4d39d8c310b9c..0000000000000 --- a/code/game/objects/structures/window_spawner.dm +++ /dev/null @@ -1,132 +0,0 @@ -// Ported from Haine and WrongEnd with much gratitude! -/* ._.-'~'-._.-'~'-._.-'~'-._.-'~'-._.-'~'-._.-'~'-._.-'~'-._. */ -/*-=-=-=-=-=-=-=-=-=-=-=-=-=WHAT-EVER=-=-=-=-=-=-=-=-=-=-=-=-=-*/ -/* '~'-._.-'~'-._.-'~'-._.-'~'-._.-'~'-._.-'~'-._.-'~'-._.-'~' */ - -/obj/effect/wingrille_spawn - name = "window grille spawner" - icon = 'icons/obj/structures.dmi' - icon_state = "wingrille" - density = TRUE - anchored = TRUE - var/win_path = /obj/structure/window/basic - var/activated = FALSE - var/fulltile = FALSE - -// stops ZAS expanding zones past us, the windows will block the zone anyway -/obj/effect/wingrille_spawn/CanPass() - return 0 - -/obj/effect/wingrille_spawn/attack_hand() - attack_generic() - -/obj/effect/wingrille_spawn/attack_ghost() - attack_generic() - -/obj/effect/wingrille_spawn/attack_generic() - activate() - -/obj/effect/wingrille_spawn/Initialize(mapload) - . = ..() - if(!win_path) - return - - // sometimes it's useful to plonk these down and activate them all manually, - // once all your ducks are in a row. So if we're already playing, only - // auto-activate if this has been put down by a maploader, not a creative admin - // see https://github.com/Baystation12/Baystation12/pull/9907#issuecomment-114896669 - var/auto_activate = mapload || (GAME_STATE < RUNLEVEL_GAME) - - if(auto_activate) - activate() - return INITIALIZE_HINT_QDEL - -/obj/effect/wingrille_spawn/proc/activate() - if(activated) return - - if(locate(/obj/structure/window) in loc) - warning("Window Spawner: A window structure already exists at [loc.x]-[loc.y]-[loc.z]") - - var/list/neighbours = list() - if(fulltile) - var/obj/structure/window/new_win = new win_path(loc) - handle_window_spawn(new_win) - else - for (var/dir in GLOB.cardinal) - var/turf/T = get_step(src, dir) - var/obj/effect/wingrille_spawn/other = locate(type) in T - if(!other) - var/found_connection - if(locate(/obj/structure/grille) in T) - for(var/obj/structure/window/W in T) - if(W.type == win_path && W.dir == get_dir(T,src)) - found_connection = 1 - qdel(W) - if(!found_connection) - var/obj/structure/window/new_win = new win_path(loc) - new_win.set_dir(dir) - handle_window_spawn(new_win) - else - neighbours |= other - - if(locate(/obj/structure/grille) in loc) - warning("Window Spawner: A grille already exists at [loc.x]-[loc.y]-[loc.z]") - else - var/obj/structure/grille/G = new /obj/structure/grille(loc) - handle_grille_spawn(G) - - activated = 1 - for(var/obj/effect/wingrille_spawn/other in neighbours) - if(!other.activated) other.activate() - -/obj/effect/wingrille_spawn/proc/handle_window_spawn(var/obj/structure/window/W) - return - -// Currently unused, could be useful for pre-wired electrified windows. -/obj/effect/wingrille_spawn/proc/handle_grille_spawn(var/obj/structure/grille/G) - return - -/obj/effect/wingrille_spawn/reinforced - name = "reinforced window grille spawner" - icon_state = "r-wingrille" - win_path = /obj/structure/window/reinforced - -/obj/effect/wingrille_spawn/reinforced/full - name = "reinforced window grille spawner - full tile" - icon_state = "rf-wingrille" - fulltile = TRUE - win_path = /obj/structure/window/reinforced/full - -/obj/effect/wingrille_spawn/reinforced/crescent - name = "Crescent window grille spawner" - win_path = /obj/structure/window/reinforced/crescent - -/obj/effect/wingrille_spawn/phoron - name = "phoron window grille spawner" - icon_state = "p-wingrille" - win_path = /obj/structure/window/phoronbasic - -/obj/effect/wingrille_spawn/reinforced_phoron - name = "reinforced phoron window grille spawner" - icon_state = "pr-wingrille" - win_path = /obj/structure/window/phoronreinforced - -/obj/effect/wingrille_spawn/reinforced_phoron/full - name = "reinforced phoron window grille spawner - full tile" - fulltile = TRUE - win_path = /obj/structure/window/phoronreinforced/full - -/obj/effect/wingrille_spawn/reinforced/polarized - name = "polarized window grille spawner" - color = "#444444" - win_path = /obj/structure/window/reinforced/polarized - var/id - -/obj/effect/wingrille_spawn/reinforced/polarized/full - name = "polarized window grille spawner - full tile" - fulltile = TRUE - win_path = /obj/structure/window/reinforced/polarized/full - -/obj/effect/wingrille_spawn/reinforced/polarized/handle_window_spawn(var/obj/structure/window/reinforced/polarized/P) - if(id) - P.id = id diff --git a/code/game/objects/topic.dm b/code/game/objects/topic.dm deleted file mode 100644 index ca36fa2c94da7..0000000000000 --- a/code/game/objects/topic.dm +++ /dev/null @@ -1,53 +0,0 @@ -/atom/proc/DefaultTopicState() - return GLOB.default_state - -/atom/Topic(var/href, var/href_list = list(), var/datum/topic_state/state) - if((. = ..())) - return - state = state || DefaultTopicState() || GLOB.default_state - if(CanUseTopic(usr, state, href_list) == STATUS_INTERACTIVE) - CouldUseTopic(usr) - return OnTopic(usr, href_list, state) - CouldNotUseTopic(usr) - return TRUE - -/atom/proc/OnTopic(var/mob/user, var/href_list, var/datum/topic_state/state) - return TOPIC_NOACTION - -// Override prescribes default state argument. -/atom/CanUseTopic(var/mob/user, var/datum/topic_state/state = DefaultTopicState() || GLOB.default_state, var/href_list) - return ..() - -/obj/CanUseTopic(var/mob/user, var/datum/topic_state/state = DefaultTopicState() || GLOB.default_state, var/href_list) - return min(..(), user.CanUseObjTopic(src, state)) - -/mob/living/CanUseObjTopic(var/obj/O, var/datum/topic_state/state) - . = ..() - if(state.check_access && !O.check_access(src)) - . = min(., STATUS_UPDATE) - -/mob/proc/CanUseObjTopic() - return STATUS_INTERACTIVE - -/atom/proc/CouldUseTopic(var/mob/user) - user.AddTopicPrint(src) - -/mob/proc/AddTopicPrint(var/atom/target) - if(!istype(target)) - return - target.add_hiddenprint(src) - -/mob/living/AddTopicPrint(var/atom/target) - if(!istype(target)) - return - if(Adjacent(target)) - target.add_fingerprint(src) - else - target.add_hiddenprint(src) - -/mob/living/silicon/ai/AddTopicPrint(var/atom/target) - if(!istype(target)) - return - target.add_hiddenprint(src) - -/atom/proc/CouldNotUseTopic(var/mob/user) \ No newline at end of file diff --git a/code/game/response_team.dm b/code/game/response_team.dm deleted file mode 100644 index baa8702073b58..0000000000000 --- a/code/game/response_team.dm +++ /dev/null @@ -1,150 +0,0 @@ -//STRIKE TEAMS -//Thanks to Kilakk for the admin-button portion of this code. - -var/global/send_emergency_team = 0 // Used for automagic response teams - // 'admin_emergency_team' for admin-spawned response teams -var/global/ert_base_chance = 10 // Default base chance. Will be incremented by increment ERT chance. -var/global/can_call_ert - -/client/proc/response_team() - set name = "Dispatch Emergency Response Team" - set category = "Special Verbs" - set desc = "Send an emergency response team" - - if(!holder) - to_chat(usr, "Only administrators may use this command.") - return - if(GAME_STATE < RUNLEVEL_GAME) - to_chat(usr, "The game hasn't started yet!") - return - if(send_emergency_team) - to_chat(usr, "[GLOB.using_map.boss_name] has already dispatched an emergency response team!") - return - if(alert("Do you want to dispatch an Emergency Response Team?",,"Yes","No") != "Yes") - return - - var/decl/security_state/security_state = decls_repository.get_decl(GLOB.using_map.security_state) - if(security_state.current_security_level_is_lower_than(security_state.high_security_level)) // Allow admins to reconsider if the alert level is below High - switch(alert("Current security level lower than [security_state.high_security_level.name]. Do you still want to dispatch a response team?",,"Yes","No")) - if("No") - return - - var/reason = input("What is the reason for dispatching this Emergency Response Team?", "Dispatching Emergency Response Team") - - if(!reason && alert("You did not input a reason. Continue anyway?",,"Yes", "No") != "Yes") - return - - if(send_emergency_team) - to_chat(usr, SPAN_DANGER("Looks like someone beat you to it!")) - return - - if(reason) - message_admins("[key_name_admin(usr)] is dispatching an Emergency Response Team for the reason: [reason]", 1) - else - message_admins("[key_name_admin(usr)] is dispatching an Emergency Response Team.", 1) - - log_admin("[key_name(usr)] used Dispatch Response Team.") - trigger_armed_response_team(1, reason) - -/client/verb/JoinResponseTeam() - - set name = "Join Response Team" - set category = "IC" - - if(!MayRespawn(1)) - to_chat(usr, "You cannot join the response team at this time.") - return - - if(isghost(usr) || isnewplayer(usr)) - if(!send_emergency_team) - to_chat(usr, "No emergency response team is currently being sent.") - return - if(jobban_isbanned(usr, MODE_ERT) || jobban_isbanned(usr, "Security Officer")) - to_chat(usr, "You are jobbanned from the emergency reponse team!") - return - if(GLOB.ert.current_antagonists.len >= GLOB.ert.hard_cap) - to_chat(usr, "The emergency response team is already full!") - return - GLOB.ert.create_default(usr) - else - to_chat(usr, "You need to be an observer or new player to use this.") - -// returns a number of dead players in % -/proc/percentage_dead() - var/total = 0 - var/deadcount = 0 - for(var/mob/living/carbon/human/H in SSmobs.mob_list) - if(H.client) // Monkeys and mice don't have a client, amirite? - if(H.stat == 2) deadcount++ - total++ - - if(total == 0) return 0 - else return round(100 * deadcount / total) - -// counts the number of antagonists in % -/proc/percentage_antagonists() - var/total = 0 - var/antagonists = 0 - for(var/mob/living/carbon/human/H in SSmobs.mob_list) - if(is_special_character(H) >= 1) - antagonists++ - total++ - - if(total == 0) return 0 - else return round(100 * antagonists / total) - -// Increments the ERT chance automatically, so that the later it is in the round, -// the more likely an ERT is to be able to be called. -/proc/increment_ert_chance() - while(send_emergency_team == 0) // There is no ERT at the time. - var/decl/security_state/security_state = decls_repository.get_decl(GLOB.using_map.security_state) - var/index = security_state.all_security_levels.Find(security_state.current_security_level) - ert_base_chance += 2**index - sleep(600 * 3) // Minute * Number of Minutes - - -/proc/trigger_armed_response_team(var/force = 0, var/reason = "") - if(!can_call_ert && !force) - return - if(send_emergency_team) - return - - var/send_team_chance = ert_base_chance // Is incremented by increment_ert_chance. - send_team_chance += 2*percentage_dead() // the more people are dead, the higher the chance - send_team_chance += percentage_antagonists() // the more antagonists, the higher the chance - send_team_chance = min(send_team_chance, 100) - - if(force) send_team_chance = 100 - - // there's only a certain chance a team will be sent - if(!prob(send_team_chance)) - command_announcement.Announce("It would appear that an emergency response team was requested for [station_name()]. Unfortunately, we were unable to send one at this time.", "[GLOB.using_map.boss_name]") - can_call_ert = 0 // Only one call per round, ladies. - return - - command_announcement.Announce("It would appear that an emergency response team was requested for [station_name()]. We will prepare and send one as soon as possible.", "[GLOB.using_map.boss_name]") - evacuation_controller.add_can_call_predicate(new/datum/evacuation_predicate/ert()) - - GLOB.ert.reason = reason //Set it even if it's blank to clear a reason from a previous ERT - - can_call_ert = 0 // Only one call per round, gentleman. - send_emergency_team = 1 - - sleep(600 * 5) - send_emergency_team = 0 // Can no longer join the ERT. - -/datum/evacuation_predicate/ert - var/prevent_until - -/datum/evacuation_predicate/ert/New() - ..() - prevent_until = world.time + 30 MINUTES - -/datum/evacuation_predicate/ert/is_valid() - return world.time < prevent_until - -/datum/evacuation_predicate/ert/can_call(var/user) - if(world.time >= prevent_until) - return TRUE - to_chat(user, "An emergency response team has been dispatched. Evacuation requests will be denied until [duration2stationtime(prevent_until - world.time)].") - return FALSE diff --git a/code/game/sound.dm b/code/game/sound.dm deleted file mode 100644 index 8471964f3e244..0000000000000 --- a/code/game/sound.dm +++ /dev/null @@ -1,215 +0,0 @@ -//Sound environment defines. Reverb preset for sounds played in an area, see sound datum reference for more. -#define GENERIC 0 -#define PADDED_CELL 1 -#define ROOM 2 -#define BATHROOM 3 -#define LIVINGROOM 4 -#define STONEROOM 5 -#define AUDITORIUM 6 -#define CONCERT_HALL 7 -#define CAVE 8 -#define ARENA 9 -#define HANGAR 10 -#define CARPETED_HALLWAY 11 -#define HALLWAY 12 -#define STONE_CORRIDOR 13 -#define ALLEY 14 -#define FOREST 15 -#define CITY 16 -#define MOUNTAINS 17 -#define QUARRY 18 -#define PLAIN 19 -#define PARKING_LOT 20 -#define SEWER_PIPE 21 -#define UNDERWATER 22 -#define DRUGGED 23 -#define DIZZY 24 -#define PSYCHOTIC 25 - -#define STANDARD_STATION STONEROOM -#define LARGE_ENCLOSED HANGAR -#define SMALL_ENCLOSED BATHROOM -#define TUNNEL_ENCLOSED CAVE -#define LARGE_SOFTFLOOR CARPETED_HALLWAY -#define MEDIUM_SOFTFLOOR LIVINGROOM -#define SMALL_SOFTFLOOR ROOM -#define ASTEROID CAVE -#define SPACE UNDERWATER - -GLOBAL_LIST_INIT(shatter_sound,list('sound/effects/Glassbr1.ogg','sound/effects/Glassbr2.ogg','sound/effects/Glassbr3.ogg')) -GLOBAL_LIST_INIT(explosion_sound,list('sound/effects/Explosion1.ogg','sound/effects/Explosion2.ogg')) -GLOBAL_LIST_INIT(spark_sound,list('sound/effects/sparks1.ogg','sound/effects/sparks2.ogg','sound/effects/sparks3.ogg','sound/effects/sparks4.ogg')) -GLOBAL_LIST_INIT(rustle_sound,list('sound/effects/rustle1.ogg','sound/effects/rustle2.ogg','sound/effects/rustle3.ogg','sound/effects/rustle4.ogg','sound/effects/rustle5.ogg')) -GLOBAL_LIST_INIT(punch_sound,list('sound/weapons/punch1.ogg','sound/weapons/punch2.ogg','sound/weapons/punch3.ogg','sound/weapons/punch4.ogg')) -GLOBAL_LIST_INIT(clown_sound,list('sound/effects/clownstep1.ogg','sound/effects/clownstep2.ogg')) -GLOBAL_LIST_INIT(swing_hit_sound,list('sound/weapons/genhit1.ogg', 'sound/weapons/genhit2.ogg', 'sound/weapons/genhit3.ogg')) -GLOBAL_LIST_INIT(hiss_sound,list('sound/voice/hiss1.ogg','sound/voice/hiss2.ogg','sound/voice/hiss3.ogg','sound/voice/hiss4.ogg')) -GLOBAL_LIST_INIT(page_sound,list('sound/effects/pageturn1.ogg', 'sound/effects/pageturn2.ogg','sound/effects/pageturn3.ogg')) -GLOBAL_LIST_INIT(fracture_sound,list('sound/effects/bonebreak1.ogg','sound/effects/bonebreak2.ogg','sound/effects/bonebreak3.ogg','sound/effects/bonebreak4.ogg')) -GLOBAL_LIST_INIT(lighter_sound,list('sound/items/lighter1.ogg','sound/items/lighter2.ogg','sound/items/lighter3.ogg')) -GLOBAL_LIST_INIT(keyboard_sound,list('sound/machines/keyboard/keypress1.ogg','sound/machines/keyboard/keypress2.ogg','sound/machines/keyboard/keypress3.ogg','sound/machines/keyboard/keypress4.ogg')) -GLOBAL_LIST_INIT(keystroke_sound,list('sound/machines/keyboard/keystroke1.ogg','sound/machines/keyboard/keystroke2.ogg','sound/machines/keyboard/keystroke3.ogg','sound/machines/keyboard/keystroke4.ogg')) -GLOBAL_LIST_INIT(switch_sound,list('sound/machines/switch1.ogg','sound/machines/switch2.ogg','sound/machines/switch3.ogg','sound/machines/switch4.ogg')) -GLOBAL_LIST_INIT(button_sound,list('sound/machines/button1.ogg','sound/machines/button2.ogg','sound/machines/button3.ogg','sound/machines/button4.ogg')) -GLOBAL_LIST_INIT(chop_sound,list('sound/weapons/chop1.ogg','sound/weapons/chop2.ogg','sound/weapons/chop3.ogg')) -GLOBAL_LIST_INIT(glasscrack_sound,list('sound/effects/glass_crack1.ogg','sound/effects/glass_crack2.ogg','sound/effects/glass_crack3.ogg','sound/effects/glass_crack4.ogg')) -GLOBAL_LIST_INIT(tray_hit_sound,list('sound/items/trayhit1.ogg', 'sound/items/trayhit2.ogg')) -GLOBAL_LIST_INIT(smash_sound,list('sound/effects/gore/smash1.ogg','sound/effects/gore/smash2.ogg','sound/effects/gore/smash3.ogg','sound/effects/gore/trauma1.ogg')) //begin sounds from proxima -GLOBAL_LIST_INIT(light_strike_sound,list('sound/effects/hit_kick.ogg','sound/effects/hit_punch.ogg')) -GLOBAL_LIST_INIT(gun_sound, list('sound/weapons/gunshot.ogg','sound/weapons/gunshot2.ogg','sound/weapons/gunshot3.ogg','sound/weapons/gunshot4.ogg')) -GLOBAL_LIST_INIT(human_clearing_throat, list(FEMALE = 'sound/voice/emotes/clearing-throat-f.ogg', MALE = 'sound/voice/emotes/clearing-throat-m.ogg')) -GLOBAL_LIST_INIT(machinery_exposed_sound, list('sound/machines/Custom_screwdriveropen.ogg','sound/machines/Custom_screwdriverclose.ogg')) -GLOBAL_LIST_INIT(console_interact_sound, list('proxima/sound/machines/console/console_interact1.ogg','proxima/sound/machines/console/console_interact2.ogg','proxima/sound/machines/console/console_interact3.ogg','proxima/sound/machines/console/console_interact4.ogg','proxima/sound/machines/console/console_interact5.ogg','proxima/sound/machines/console/console_interact6.ogg','proxima/sound/machines/console/console_interact7.ogg')) -GLOBAL_LIST_INIT(switch_small_sound, list('proxima/sound/effects/using/switch/small1.ogg','proxima/sound/effects/using/switch/small2.ogg')) -GLOBAL_LIST_INIT(trauma_sound, list('sound/effects/gore/trauma1.ogg','sound/effects/gore/trauma2.ogg','sound/effects/gore/trauma3.ogg')) // end sounds from proxima - - -/proc/playsound(var/atom/source, soundin, vol as num, vary, extrarange as num, falloff, var/is_global, var/frequency, var/is_ambiance = 0) - - soundin = get_sfx(soundin) // same sound for everyone - - if(isarea(source)) - error("[source] is an area and is trying to make the sound: [soundin]") - return - frequency = vary && isnull(frequency) ? get_rand_frequency() : frequency // Same frequency for everybody - var/turf/turf_source = get_turf(source) - - // Looping through the player list has the added bonus of working for mobs inside containers - 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) * 2) - var/turf/T = get_turf(M) - if(T && T.z == turf_source.z && (!is_ambiance || M.get_preference_value(/datum/client_preference/play_ambiance) == GLOB.PREF_YES)) - M.playsound_local(turf_source, soundin, vol, vary, frequency, falloff, is_global, extrarange) - -var/global/const/FALLOFF_SOUNDS = 0.5 - -/mob/proc/playsound_local(var/turf/turf_source, soundin, vol as num, vary, frequency, falloff, is_global, extrarange) - if(!src.client || ear_deaf > 0) return - var/sound/S = soundin - if(!istype(S)) - soundin = get_sfx(soundin) - S = sound(soundin) - S.wait = 0 //No queue - S.channel = 0 //Any channel - S.volume = vol - S.environment = -1 - if(frequency) - S.frequency = frequency - else if (vary) - S.frequency = get_rand_frequency() - - //sound volume falloff with pressure - var/pressure_factor = 1.0 - - S.volume *= get_sound_volume_multiplier() - - var/turf/T = get_turf(src) - // 3D sounds, the technology is here! - if(isturf(turf_source)) - //sound volume falloff with distance - var/distance = get_dist(T, turf_source) - - S.volume -= max(distance - (world.view + extrarange), 0) * 2 //multiplicative falloff to add on top of natural audio falloff. - - 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 //in space - pressure_factor = 0 - - if (distance <= 1) - pressure_factor = max(pressure_factor, 0.15) //hearing through contact - - S.volume *= pressure_factor - - if (S.volume <= 0) - return //no volume means no sound - - var/dx = turf_source.x - T.x // Hearing from the right/left - S.x = dx - var/dz = turf_source.y - T.y // Hearing from infront/behind - S.z = dz - // The y value is for above your head, but there is no ceiling in 2d spessmens. - S.y = 1 - S.falloff = (falloff ? falloff : FALLOFF_SOUNDS) - - if(!is_global) - - if(istype(src,/mob/living)) - var/mob/living/carbon/M = src - if (istype(M) && M.hallucination_power > 50 && M.chem_effects[CE_MIND] < 1) - S.environment = PSYCHOTIC - else if (M.druggy) - S.environment = DRUGGED - else if (M.drowsyness) - S.environment = DIZZY - else if (M.confused) - S.environment = DIZZY - else if (M.stat == UNCONSCIOUS) - S.environment = UNDERWATER - else if (T?.is_flooded(M.lying)) - S.environment = UNDERWATER - else if (pressure_factor < 0.5) - S.environment = SPACE - else - var/area/A = get_area(src) - S.environment = A.sound_env - - else if (pressure_factor < 0.5) - S.environment = SPACE - else - var/area/A = get_area(src) - S.environment = A.sound_env - - sound_to(src, S) - -/client/proc/playtitlemusic() - if (get_preference_value(/datum/client_preference/play_lobby_music) == GLOB.PREF_YES) - sound_to(src, GLOB.using_map.lobby_track.get_sound()) - to_chat(src, GLOB.using_map.lobby_track.get_info()) - -/proc/get_rand_frequency() - return rand(32000, 55000) //Frequency stuff only works with 45kbps oggs. - -/proc/get_sfx(soundin) - if(istext(soundin)) - switch(soundin) - if ("shatter") soundin = pick(GLOB.shatter_sound) - if ("explosion") soundin = pick(GLOB.explosion_sound) - if ("sparks") soundin = pick(GLOB.spark_sound) - if ("rustle") soundin = pick(GLOB.rustle_sound) - if ("punch") soundin = pick(GLOB.punch_sound) - if ("clownstep") soundin = pick(GLOB.clown_sound) - if ("swing_hit") soundin = pick(GLOB.swing_hit_sound) - if ("hiss") soundin = pick(GLOB.hiss_sound) - if ("pageturn") soundin = pick(GLOB.page_sound) - if ("fracture") soundin = pick(GLOB.fracture_sound) - if ("light_bic") soundin = pick(GLOB.lighter_sound) - if ("keyboard") soundin = pick(GLOB.keyboard_sound) - if ("keystroke") soundin = pick(GLOB.keystroke_sound) - if ("switch") soundin = pick(GLOB.switch_sound) - if ("button") soundin = pick(GLOB.button_sound) - if ("chop") soundin = pick(GLOB.chop_sound) - if ("glasscrack") soundin = pick(GLOB.glasscrack_sound) -//[INF] - if ("smash") soundin = pick(GLOB.smash_sound) - if ("light_strike") soundin = pick(GLOB.light_strike_sound) - if ("gunshot") soundin = pick(GLOB.gun_sound) -//[/INF] - if ("tray_hit") soundin = pick(GLOB.tray_hit_sound) - return soundin - -/client/verb/stop_sounds() - set name = "Stop All Sounds" - set desc = "Stop all sounds that are currently playing on your client." - set category = "OOC" - - sound_to(usr, sound(null)) diff --git a/code/game/turfs/flooring/flooring.dm b/code/game/turfs/flooring/flooring.dm deleted file mode 100644 index 2e0afcd1fd25b..0000000000000 --- a/code/game/turfs/flooring/flooring.dm +++ /dev/null @@ -1,405 +0,0 @@ -// State values: -// [icon_base]: initial base icon_state without edges or corners. -// if has_base_range is set, append 0-has_base_range ie. -// [icon_base][has_base_range] -// [icon_base]_broken: damaged overlay. -// if has_damage_range is set, append 0-damage_range for state ie. -// [icon_base]_broken[has_damage_range] -// [icon_base]_edges: directional overlays for edges. -// [icon_base]_corners: directional overlays for non-edge corners. - -/decl/flooring - var/name - var/desc - var/icon - var/icon_base - var/color - var/footstep_type = /decl/footsteps/blank - - var/has_base_range - var/has_damage_range - var/has_burn_range - var/damage_temperature - var/apply_thermal_conductivity - var/apply_heat_capacity - - var/build_type // Unbuildable if not set. Must be /obj/item/stack. - var/build_cost = 1 // Stack units. - var/build_time = 0 // BYOND ticks. - - var/descriptor = "tiles" - var/flags - var/remove_timer - var/can_paint - var/can_engrave = TRUE - - //How we smooth with other flooring - var/decal_layer = DECAL_LAYER - var/floor_smooth = SMOOTH_ALL - var/list/flooring_whitelist = list() //Smooth with nothing except the contents of this list - var/list/flooring_blacklist = list() //Smooth with everything except the contents of this list - - //How we smooth with walls - var/wall_smooth = SMOOTH_ALL - //There are no lists for walls at this time - - //How we smooth with space and openspace tiles - var/space_smooth = SMOOTH_ALL - //There are no lists for spaces - - var/height = 0 - -/decl/flooring/proc/on_remove() - return - -/decl/flooring/grass - name = "grass" - desc = "Do they smoke grass out in space, Bowie? Or do they smoke AstroTurf?" - icon = 'icons/turf/flooring/grass.dmi' - icon_base = "grass" - has_base_range = 3 - damage_temperature = T0C+80 - flags = TURF_HAS_EDGES | TURF_HAS_CORNERS | TURF_REMOVE_SHOVEL - build_type = /obj/item/stack/tile/grass - can_engrave = FALSE - floor_smooth = SMOOTH_NONE - wall_smooth = SMOOTH_ALL - space_smooth = SMOOTH_NONE - decal_layer = ABOVE_WIRE_LAYER - -/decl/flooring/dirt - name = "dirt" - desc = "Extra dirty." - icon = 'icons/turf/flooring/grass.dmi' - icon_base = "dirt" - has_base_range = 3 - damage_temperature = T0C+80 - can_engrave = FALSE - -/decl/flooring/asteroid - name = "coarse sand" - desc = "Gritty and unpleasant." - icon = 'icons/turf/flooring/asteroid.dmi' - icon_base = "asteroid" - flags = TURF_HAS_EDGES | TURF_REMOVE_SHOVEL - build_type = null - can_engrave = FALSE - -/decl/flooring/carpet - name = "brown carpet" - desc = "Comfy and fancy carpeting." - icon = 'icons/turf/flooring/carpet.dmi' - icon_base = "brown" - build_type = /obj/item/stack/tile/carpet - damage_temperature = T0C+200 - flags = TURF_HAS_CORNERS | TURF_HAS_INNER_CORNERS | TURF_REMOVE_CROWBAR | TURF_CAN_BURN - can_engrave = FALSE - footstep_type = /decl/footsteps/carpet - floor_smooth = SMOOTH_NONE - wall_smooth = SMOOTH_NONE - space_smooth = SMOOTH_NONE - -/decl/flooring/carpet/blue - name = "blue carpet" - icon_base = "blue1" - build_type = /obj/item/stack/tile/carpetblue - -/decl/flooring/carpet/blue2 - name = "pale blue carpet" - icon_base = "blue2" - build_type = /obj/item/stack/tile/carpetblue2 - -/decl/flooring/carpet/blue3 - name = "sea blue carpet" - icon_base = "blue3" - build_type = /obj/item/stack/tile/carpetblue3 - -/decl/flooring/carpet/magenta - name = "magenta carpet" - icon_base = "purple" - build_type = /obj/item/stack/tile/carpetmagenta - -/decl/flooring/carpet/purple - name = "purple carpet" - icon_base = "purple" - build_type = /obj/item/stack/tile/carpetpurple - -/decl/flooring/carpet/orange - name = "orange carpet" - icon_base = "orange" - build_type = /obj/item/stack/tile/carpetorange - -/decl/flooring/carpet/green - name = "green carpet" - icon_base = "green" - build_type = /obj/item/stack/tile/carpetgreen - -/decl/flooring/carpet/red - name = "red carpet" - icon_base = "red" - build_type = /obj/item/stack/tile/carpetred - -/decl/flooring/linoleum - name = "linoleum" - desc = "It's like the 2090's all over again." - icon = 'icons/turf/flooring/linoleum.dmi' - icon_base = "lino" - can_paint = 1 - build_type = /obj/item/stack/tile/linoleum - flags = TURF_REMOVE_SCREWDRIVER - footstep_type = /decl/footsteps/tiles - -/decl/flooring/tiling - name = "floor" - desc = "A solid, heavy set of flooring plates." - icon = 'icons/turf/flooring/tiles.dmi' - icon_base = "tiled" - color = COLOR_DARK_GUNMETAL - has_damage_range = 4 - damage_temperature = T0C+1400 - flags = TURF_REMOVE_CROWBAR | TURF_CAN_BREAK | TURF_CAN_BURN - build_type = /obj/item/stack/tile/floor - can_paint = 1 - footstep_type = /decl/footsteps/tiles - -/decl/flooring/tiling/mono - icon_base = "monotile" - build_type = /obj/item/stack/tile/mono - -/decl/flooring/tiling/mono/dark - color = COLOR_DARK_GRAY - build_type = /obj/item/stack/tile/mono/dark - -/decl/flooring/tiling/mono/white - icon_base = "monotile_light" - color = COLOR_OFF_WHITE - build_type = /obj/item/stack/tile/mono/white - -/decl/flooring/tiling/white - icon_base = "tiled_light" - desc = "How sterile." - color = COLOR_OFF_WHITE - build_type = /obj/item/stack/tile/floor_white - -/decl/flooring/tiling/dark - desc = "How ominous." - color = COLOR_DARK_GRAY - build_type = /obj/item/stack/tile/floor_dark - -/decl/flooring/tiling/dark/mono - icon_base = "monotile" - build_type = null - -/decl/flooring/tiling/freezer - desc = "Don't slip." - icon_base = "freezer" - color = null - has_damage_range = null - flags = TURF_REMOVE_CROWBAR - build_type = /obj/item/stack/tile/floor_freezer - -/decl/flooring/tiling/tech - icon = 'icons/turf/flooring/techfloor.dmi' - icon_base = "techfloor_gray" - build_type = /obj/item/stack/tile/techgrey - color = null - -/decl/flooring/tiling/tech/grid - icon_base = "techfloor_grid" - build_type = /obj/item/stack/tile/techgrid - -/decl/flooring/tiling/new_tile - icon_base = "tile_full" - color = null - build_type = null - -/decl/flooring/tiling/new_tile/cargo_one - icon_base = "cargo_one_full" - build_type = null - -/decl/flooring/tiling/new_tile/kafel - icon_base = "kafel_full" - build_type = null - -/decl/flooring/tiling/stone - icon_base = "stone" - build_type = /obj/item/stack/tile/stone - -/decl/flooring/tiling/new_tile/techmaint - icon_base = "techmaint" - build_type = /obj/item/stack/tile/techmaint - -/decl/flooring/tiling/new_tile/monofloor - icon_base = "monofloor" - color = COLOR_GUNMETAL - -/decl/flooring/tiling/new_tile/steel_grid - icon_base = "grid" - color = COLOR_GUNMETAL - build_type = /obj/item/stack/tile/grid - -/decl/flooring/tiling/new_tile/steel_ridged - icon_base = "ridged" - color = COLOR_GUNMETAL - build_type = /obj/item/stack/tile/ridge - -/decl/flooring/wood - name = "wooden floor" - desc = "Polished wood planks." - icon = 'icons/turf/flooring/wood.dmi' - icon_base = "wood" - has_damage_range = 6 - damage_temperature = T0C+200 - descriptor = "planks" - build_type = /obj/item/stack/tile/wood - flags = TURF_CAN_BREAK | TURF_IS_FRAGILE | TURF_REMOVE_SCREWDRIVER - footstep_type = /decl/footsteps/wood - color = WOOD_COLOR_GENERIC - -/decl/flooring/wood/mahogany - color = WOOD_COLOR_RICH - build_type = /obj/item/stack/tile/mahogany - -/decl/flooring/wood/maple - color = WOOD_COLOR_PALE - build_type = /obj/item/stack/tile/maple - -/decl/flooring/wood/ebony - color = WOOD_COLOR_BLACK - build_type = /obj/item/stack/tile/ebony - -/decl/flooring/wood/walnut - color = WOOD_COLOR_CHOCOLATE - build_type = /obj/item/stack/tile/walnut - -/decl/flooring/wood/bamboo - color = WOOD_COLOR_PALE2 - build_type = /obj/item/stack/tile/bamboo - -/decl/flooring/wood/yew - color = WOOD_COLOR_YELLOW - build_type = /obj/item/stack/tile/yew - -/decl/flooring/reinforced - name = "reinforced floor" - desc = "Heavily reinforced with steel plating." - icon = 'icons/turf/flooring/tiles.dmi' - icon_base = "reinforced" - flags = TURF_REMOVE_WRENCH | TURF_ACID_IMMUNE - build_type = /obj/item/stack/material/steel - build_cost = 1 - build_time = 30 - apply_thermal_conductivity = 0.025 - apply_heat_capacity = 325000 - can_paint = 1 - footstep_type = /decl/footsteps/plating - -/decl/flooring/reinforced/circuit - name = "processing strata" - icon = 'icons/turf/flooring/circuit.dmi' - icon_base = "bcircuit" - build_type = null - flags = TURF_ACID_IMMUNE | TURF_CAN_BREAK | TURF_REMOVE_WRENCH - can_paint = 1 - can_engrave = FALSE - -/decl/flooring/reinforced/circuit/green - icon_base = "gcircuit" - -/decl/flooring/reinforced/circuit/red - icon_base = "rcircuit" - flags = TURF_ACID_IMMUNE - can_paint = 0 - -/decl/flooring/reinforced/cult - name = "engraved floor" - desc = "Unsettling whispers waver from the surface..." - icon = 'icons/turf/flooring/cult.dmi' - icon_base = "cult" - build_type = null - has_damage_range = 6 - flags = TURF_ACID_IMMUNE | TURF_CAN_BREAK | TURF_REMOVE_WRENCH - can_paint = null - -/decl/flooring/reinforced/cult/on_remove() - GLOB.cult.remove_cultiness(CULTINESS_PER_TURF) - -/decl/flooring/reinforced/shuttle - name = "floor" - icon = 'icons/turf/shuttle.dmi' - build_type = null - flags = TURF_ACID_IMMUNE | TURF_CAN_BREAK | TURF_REMOVE_CROWBAR - can_paint = 1 - can_engrave = FALSE - -/decl/flooring/reinforced/shuttle/blue - icon_base = "floor" - -/decl/flooring/reinforced/shuttle/yellow - icon_base = "floor2" - -/decl/flooring/reinforced/shuttle/white - icon_base = "floor3" - -/decl/flooring/reinforced/shuttle/red - icon_base = "floor4" - -/decl/flooring/reinforced/shuttle/purple - icon_base = "floor5" - -/decl/flooring/reinforced/shuttle/darkred - icon_base = "floor6" - -/decl/flooring/reinforced/shuttle/black - icon_base = "floor7" - -/decl/flooring/reinforced/shuttle/skrell - icon = 'icons/turf/skrellturf.dmi' - icon_base = "skrellblack" - -/decl/flooring/reinforced/shuttle/skrell/white - icon_base = "skrellwhite" - -/decl/flooring/reinforced/shuttle/skrell/red - icon_base = "skrellred" - -/decl/flooring/reinforced/shuttle/skrell/blue - icon_base = "skrellblue" - -/decl/flooring/reinforced/shuttle/skrell/orange - icon_base = "skrellorange" - -/decl/flooring/reinforced/shuttle/skrell/green - icon_base = "skrellgreen" - -/decl/flooring/crystal - name = "crystal floor" - icon = 'icons/turf/flooring/crystal.dmi' - build_type = null - flags = TURF_ACID_IMMUNE | TURF_CAN_BREAK | TURF_REMOVE_CROWBAR - color = "#00ffe1" - -/decl/flooring/flesh - name = "flesh" - icon = 'icons/turf/flooring/flesh.dmi' - icon_base = "flesh" - descriptor = "flesh" - has_base_range = 3 - damage_temperature = T0C + 100 - build_type = null - flags = TURF_ACID_IMMUNE | TURF_REMOVE_CROWBAR - remove_timer = 60 - can_engrave = FALSE - -/decl/flooring/pool - name = "pool floor" - desc = "Sunken flooring designed to hold liquids." - icon = 'icons/turf/flooring/pool.dmi' - icon_base = "pool" - build_type = /obj/item/stack/tile/pool - flags = TURF_HAS_CORNERS | TURF_HAS_INNER_CORNERS | TURF_REMOVE_CROWBAR - footstep_type = /decl/footsteps/tiles - floor_smooth = SMOOTH_NONE - wall_smooth = SMOOTH_NONE - space_smooth = SMOOTH_NONE - height = -FLUID_OVER_MOB_HEAD * 2 diff --git a/code/game/turfs/flooring/flooring_decals.dm b/code/game/turfs/flooring/flooring_decals.dm deleted file mode 100644 index 77a0e6b331eda..0000000000000 --- a/code/game/turfs/flooring/flooring_decals.dm +++ /dev/null @@ -1,1348 +0,0 @@ -// These are objects that destroy themselves and add themselves to the -// decal list of the floor under them. Use them rather than distinct icon_states -// when mapping in interesting floor designs. -var/global/list/floor_decals = list() - -/obj/effect/floor_decal - name = "floor decal" - icon = 'icons/turf/flooring/decals.dmi' - layer = DECAL_LAYER - appearance_flags = DEFAULT_APPEARANCE_FLAGS | RESET_COLOR - var/supplied_dir - var/detail_overlay - var/detail_color - -/obj/effect/floor_decal/New(var/newloc, var/newdir, var/newcolour, var/newappearance) - supplied_dir = newdir - if(newappearance) appearance = newappearance - if(newcolour) color = newcolour - ..(newloc) - -/obj/effect/floor_decal/Initialize() - SHOULD_CALL_PARENT(FALSE) - if(supplied_dir) set_dir(supplied_dir) - var/turf/T = get_turf(src) - if(istype(T, /turf/simulated/floor) || istype(T, /turf/unsimulated/floor)) - layer = T.is_plating() ? DECAL_PLATING_LAYER : DECAL_LAYER - var/cache_key = "[alpha]-[color]-[dir]-[icon_state]-[plane]-[layer]-[detail_overlay]-[detail_color]" - if(!floor_decals[cache_key]) - var/image/I = image(icon = src.icon, icon_state = src.icon_state, dir = src.dir) - I.layer = layer - I.appearance_flags = DEFAULT_APPEARANCE_FLAGS | appearance_flags - I.color = src.color - I.alpha = src.alpha - if(detail_overlay) - var/image/B = overlay_image(icon, "[detail_overlay]", flags=RESET_COLOR) - B.color = detail_color - I.overlays |= B - floor_decals[cache_key] = I - if(!T.decals) T.decals = list() - T.decals |= floor_decals[cache_key] - T.overlays |= floor_decals[cache_key] - atom_flags |= ATOM_FLAG_INITIALIZED - return INITIALIZE_HINT_QDEL - -/obj/effect/floor_decal/reset - name = "reset marker" - -/obj/effect/floor_decal/reset/Initialize() - SHOULD_CALL_PARENT(FALSE) - var/turf/T = get_turf(src) - T.remove_decals() - T.update_icon() - atom_flags |= ATOM_FLAG_INITIALIZED - return INITIALIZE_HINT_QDEL - -/obj/effect/floor_decal/carpet - name = "brown carpet" - icon = 'icons/turf/flooring/carpet.dmi' - icon_state = "brown_edges" - -/obj/effect/floor_decal/carpet/blue - name = "blue carpet" - icon_state = "blue1_edges" - -/obj/effect/floor_decal/carpet/blue2 - name = "pale blue carpet" - icon_state = "blue2_edges" - -/obj/effect/floor_decal/carpet/purple - name = "purple carpet" - icon_state = "purple_edges" - -/obj/effect/floor_decal/carpet/orange - name = "orange carpet" - icon_state = "orange_edges" - -/obj/effect/floor_decal/carpet/green - name = "green carpet" - icon_state = "green_edges" - -/obj/effect/floor_decal/carpet/red - name = "red carpet" - icon_state = "red_edges" - -/obj/effect/floor_decal/carpet/corners - name = "brown carpet" - icon_state = "brown_corners" - -/obj/effect/floor_decal/carpet/blue/corners - name = "blue carpet" - icon_state = "blue1_corners" - -/obj/effect/floor_decal/carpet/blue2/corners - name = "pale blue carpet" - icon_state = "blue2_corners" - -/obj/effect/floor_decal/carpet/purple/corners - name = "purple carpet" - icon_state = "purple_corners" - -/obj/effect/floor_decal/carpet/orange/corners - name = "orange carpet" - icon_state = "orange_corners" - -/obj/effect/floor_decal/carpet/green/corners - name = "green carpet" - icon_state = "green_corners" - -/obj/effect/floor_decal/carpet/red/corners - name = "red carpet" - icon_state = "red_corners" - -/obj/effect/floor_decal/corner - icon_state = "corner_white" - alpha = 229 - -/obj/effect/floor_decal/corner/black - name = "black corner" - color = "#333333" - -/obj/effect/floor_decal/corner/black/diagonal - icon_state = "corner_white_diagonal" - -/obj/effect/floor_decal/corner/black/three_quarters - icon_state = "corner_white_three_quarters" - -/obj/effect/floor_decal/corner/black/full - icon_state = "corner_white_full" - -/obj/effect/floor_decal/corner/black/border - icon_state = "bordercolor" - -/obj/effect/floor_decal/corner/black/half - icon_state = "bordercolorhalf" - -/obj/effect/floor_decal/corner/black/mono - icon_state = "bordercolormonofull" - -/obj/effect/floor_decal/corner/black/bordercorner - icon_state = "bordercolorcorner" - -/obj/effect/floor_decal/corner/black/bordercorner2 - icon_state = "bordercolorcorner2" - -/obj/effect/floor_decal/corner/black/borderfull - icon_state = "bordercolorfull" - -/obj/effect/floor_decal/corner/black/bordercee - icon_state = "bordercolorcee" - -/obj/effect/floor_decal/corner/blue - name = "blue corner" - color = COLOR_BLUE_GRAY - -/obj/effect/floor_decal/corner/blue/diagonal - icon_state = "corner_white_diagonal" - -/obj/effect/floor_decal/corner/blue/three_quarters - icon_state = "corner_white_three_quarters" - -/obj/effect/floor_decal/corner/blue/full - icon_state = "corner_white_full" - -/obj/effect/floor_decal/corner/blue/border - icon_state = "bordercolor" - -/obj/effect/floor_decal/corner/blue/half - icon_state = "bordercolorhalf" - -/obj/effect/floor_decal/corner/blue/mono - icon_state = "bordercolormonofull" - -/obj/effect/floor_decal/corner/blue/bordercorner - icon_state = "bordercolorcorner" - -/obj/effect/floor_decal/corner/blue/bordercorner2 - icon_state = "bordercolorcorner2" - -/obj/effect/floor_decal/corner/blue/borderfull - icon_state = "bordercolorfull" - -/obj/effect/floor_decal/corner/blue/bordercee - icon_state = "bordercolorcee" - -/obj/effect/floor_decal/corner/paleblue - name = "pale blue corner" - color = COLOR_PALE_BLUE_GRAY - -/obj/effect/floor_decal/corner/paleblue/diagonal - icon_state = "corner_white_diagonal" - -/obj/effect/floor_decal/corner/paleblue/three_quarters - icon_state = "corner_white_three_quarters" - -/obj/effect/floor_decal/corner/paleblue/full - icon_state = "corner_white_full" - -/obj/effect/floor_decal/corner/paleblue/border - icon_state = "bordercolor" - -/obj/effect/floor_decal/corner/paleblue/half - icon_state = "bordercolorhalf" - -/obj/effect/floor_decal/corner/paleblue/mono - icon_state = "bordercolormonofull" - -/obj/effect/floor_decal/corner/paleblue/bordercorner - icon_state = "bordercolorcorner" - -/obj/effect/floor_decal/corner/paleblue/bordercorner2 - icon_state = "bordercolorcorner2" - -/obj/effect/floor_decal/corner/paleblue/borderfull - icon_state = "bordercolorfull" - -/obj/effect/floor_decal/corner/paleblue/bordercee - icon_state = "bordercolorcee" - -/obj/effect/floor_decal/corner/green - name = "green corner" - color = COLOR_GREEN_GRAY - -/obj/effect/floor_decal/corner/green/diagonal - icon_state = "corner_white_diagonal" - -/obj/effect/floor_decal/corner/green/three_quarters - icon_state = "corner_white_three_quarters" - -/obj/effect/floor_decal/corner/green/full - icon_state = "corner_white_full" - -/obj/effect/floor_decal/corner/green/border - icon_state = "bordercolor" - -/obj/effect/floor_decal/corner/green/half - icon_state = "bordercolorhalf" - -/obj/effect/floor_decal/corner/green/mono - icon_state = "bordercolormonofull" - -/obj/effect/floor_decal/corner/green/bordercorner - icon_state = "bordercolorcorner" - -/obj/effect/floor_decal/corner/green/bordercorner2 - icon_state = "bordercolorcorner2" - -/obj/effect/floor_decal/corner/green/borderfull - icon_state = "bordercolorfull" - -/obj/effect/floor_decal/corner/green/bordercee - icon_state = "bordercolorcee" - -/obj/effect/floor_decal/corner/lime - name = "lime corner" - color = COLOR_PALE_GREEN_GRAY - -/obj/effect/floor_decal/corner/lime/diagonal - icon_state = "corner_white_diagonal" - -/obj/effect/floor_decal/corner/lime/three_quarters - icon_state = "corner_white_three_quarters" - -/obj/effect/floor_decal/corner/lime/full - icon_state = "corner_white_full" - -/obj/effect/floor_decal/corner/lime/border - icon_state = "bordercolor" - -/obj/effect/floor_decal/corner/lime/half - icon_state = "bordercolorhalf" - -/obj/effect/floor_decal/corner/lime/mono - icon_state = "bordercolormonofull" - -/obj/effect/floor_decal/corner/lime/bordercorner - icon_state = "bordercolorcorner" - -/obj/effect/floor_decal/corner/lime/bordercorner2 - icon_state = "bordercolorcorner2" - -/obj/effect/floor_decal/corner/lime/borderfull - icon_state = "bordercolorfull" - -/obj/effect/floor_decal/corner/lime/bordercee - icon_state = "bordercolorcee" - -/obj/effect/floor_decal/corner/yellow - name = "yellow corner" - color = COLOR_BROWN - -/obj/effect/floor_decal/corner/yellow/diagonal - icon_state = "corner_white_diagonal" - -/obj/effect/floor_decal/corner/yellow/three_quarters - icon_state = "corner_white_three_quarters" - -/obj/effect/floor_decal/corner/yellow/full - icon_state = "corner_white_full" - -/obj/effect/floor_decal/corner/yellow/border - icon_state = "bordercolor" - -/obj/effect/floor_decal/corner/yellow/half - icon_state = "bordercolorhalf" - -/obj/effect/floor_decal/corner/yellow/mono - icon_state = "bordercolormonofull" - -/obj/effect/floor_decal/corner/yellow/bordercorner - icon_state = "bordercolorcorner" - -/obj/effect/floor_decal/corner/yellow/bordercorner2 - icon_state = "bordercolorcorner2" - -/obj/effect/floor_decal/corner/yellow/borderfull - icon_state = "bordercolorfull" - -/obj/effect/floor_decal/corner/yellow/bordercee - icon_state = "bordercolorcee" - -/obj/effect/floor_decal/corner/beige - name = "beige corner" - color = COLOR_BEIGE - -/obj/effect/floor_decal/corner/beige/diagonal - icon_state = "corner_white_diagonal" - -/obj/effect/floor_decal/corner/beige/three_quarters - icon_state = "corner_white_three_quarters" - -/obj/effect/floor_decal/corner/beige/full - icon_state = "corner_white_full" - -/obj/effect/floor_decal/corner/beige/half - icon_state = "bordercolorhalf" - -/obj/effect/floor_decal/corner/beige/mono - icon_state = "bordercolormonofull" - -/obj/effect/floor_decal/corner/beige/border - icon_state = "bordercolor" - -/obj/effect/floor_decal/corner/beige/bordercorner - icon_state = "bordercolorcorner" - -/obj/effect/floor_decal/corner/beige/bordercorner2 - icon_state = "bordercolorcorner2" - -/obj/effect/floor_decal/corner/beige/borderfull - icon_state = "bordercolorfull" - -/obj/effect/floor_decal/corner/beige/bordercee - icon_state = "bordercolorcee" - -/obj/effect/floor_decal/corner/red - name = "red corner" - color = COLOR_RED_GRAY - -/obj/effect/floor_decal/corner/red/diagonal - icon_state = "corner_white_diagonal" - -/obj/effect/floor_decal/corner/red/three_quarters - icon_state = "corner_white_three_quarters" - -/obj/effect/floor_decal/corner/red/full - icon_state = "corner_white_full" - -/obj/effect/floor_decal/corner/red/border - icon_state = "bordercolor" - -/obj/effect/floor_decal/corner/red/half - icon_state = "bordercolorhalf" - -/obj/effect/floor_decal/corner/red/mono - icon_state = "bordercolormonofull" - -/obj/effect/floor_decal/corner/red/bordercorner - icon_state = "bordercolorcorner" - -/obj/effect/floor_decal/corner/red/bordercorner2 - icon_state = "bordercolorcorner2" - -/obj/effect/floor_decal/corner/red/borderfull - icon_state = "bordercolorfull" - -/obj/effect/floor_decal/corner/red/bordercee - icon_state = "bordercolorcee" - -/obj/effect/floor_decal/corner/pink - name = "pink corner" - color = COLOR_PALE_RED_GRAY - -/obj/effect/floor_decal/corner/pink/diagonal - icon_state = "corner_white_diagonal" - -/obj/effect/floor_decal/corner/pink/three_quarters - icon_state = "corner_white_three_quarters" - -/obj/effect/floor_decal/corner/pink/full - icon_state = "corner_white_full" - -/obj/effect/floor_decal/corner/pink/border - icon_state = "bordercolor" - -/obj/effect/floor_decal/corner/pink/half - icon_state = "bordercolorhalf" - -/obj/effect/floor_decal/corner/pink/mono - icon_state = "bordercolormonofull" - -/obj/effect/floor_decal/corner/pink/bordercorner - icon_state = "bordercolorcorner" - -/obj/effect/floor_decal/corner/pink/bordercorner2 - icon_state = "bordercolorcorner2" - -/obj/effect/floor_decal/corner/pink/borderfull - icon_state = "bordercolorfull" - -/obj/effect/floor_decal/corner/pink/bordercee - icon_state = "bordercolorcee" - -/obj/effect/floor_decal/corner/purple - name = "purple corner" - color = COLOR_PURPLE_GRAY - -/obj/effect/floor_decal/corner/purple/diagonal - icon_state = "corner_white_diagonal" - -/obj/effect/floor_decal/corner/purple/three_quarters - icon_state = "corner_white_three_quarters" - -/obj/effect/floor_decal/corner/purple/full - icon_state = "corner_white_full" - -/obj/effect/floor_decal/corner/purple/border - icon_state = "bordercolor" - -/obj/effect/floor_decal/corner/purple/half - icon_state = "bordercolorhalf" - -/obj/effect/floor_decal/corner/purple/mono - icon_state = "bordercolormonofull" - -/obj/effect/floor_decal/corner/purple/bordercorner - icon_state = "bordercolorcorner" - -/obj/effect/floor_decal/corner/purple/bordercorner2 - icon_state = "bordercolorcorner2" - -/obj/effect/floor_decal/corner/purple/borderfull - icon_state = "bordercolorfull" - -/obj/effect/floor_decal/corner/purple/bordercee - icon_state = "bordercolorcee" - -/obj/effect/floor_decal/corner/mauve - name = "mauve corner" - color = COLOR_PALE_PURPLE_GRAY - -/obj/effect/floor_decal/corner/mauve/diagonal - icon_state = "corner_white_diagonal" - -/obj/effect/floor_decal/corner/mauve/three_quarters - icon_state = "corner_white_three_quarters" - -/obj/effect/floor_decal/corner/mauve/full - icon_state = "corner_white_full" - -/obj/effect/floor_decal/corner/mauve/border - icon_state = "bordercolor" - -/obj/effect/floor_decal/corner/mauve/half - icon_state = "bordercolorhalf" - -/obj/effect/floor_decal/corner/mauve/mono - icon_state = "bordercolormonofull" - -/obj/effect/floor_decal/corner/mauve/bordercorner - icon_state = "bordercolorcorner" - -/obj/effect/floor_decal/corner/mauve/bordercorner2 - icon_state = "bordercolorcorner2" - -/obj/effect/floor_decal/corner/mauve/borderfull - icon_state = "bordercolorfull" - -/obj/effect/floor_decal/corner/mauve/bordercee - icon_state = "bordercolorcee" - -/obj/effect/floor_decal/corner/orange - name = "orange corner" - color = COLOR_DARK_ORANGE - -/obj/effect/floor_decal/corner/orange/diagonal - icon_state = "corner_white_diagonal" - -/obj/effect/floor_decal/corner/orange/three_quarters - icon_state = "corner_white_three_quarters" - -/obj/effect/floor_decal/corner/orange/full - icon_state = "corner_white_full" - -/obj/effect/floor_decal/corner/orange/border - icon_state = "bordercolor" - -/obj/effect/floor_decal/corner/orange/half - icon_state = "bordercolorhalf" - -/obj/effect/floor_decal/corner/orange/mono - icon_state = "bordercolormonofull" - -/obj/effect/floor_decal/corner/orange/bordercorner - icon_state = "bordercolorcorner" - -/obj/effect/floor_decal/corner/orange/bordercorner2 - icon_state = "bordercolorcorner2" - -/obj/effect/floor_decal/corner/orange/borderfull - icon_state = "bordercolorfull" - -/obj/effect/floor_decal/corner/orange/bordercee - icon_state = "bordercolorcee" - -/obj/effect/floor_decal/corner/brown - name = "brown corner" - color = COLOR_DARK_BROWN - -/obj/effect/floor_decal/corner/brown/diagonal - icon_state = "corner_white_diagonal" - -/obj/effect/floor_decal/corner/brown/three_quarters - icon_state = "corner_white_three_quarters" - -/obj/effect/floor_decal/corner/brown/full - icon_state = "corner_white_full" - -/obj/effect/floor_decal/corner/brown/border - icon_state = "bordercolor" - -/obj/effect/floor_decal/corner/brown/half - icon_state = "bordercolorhalf" - -/obj/effect/floor_decal/corner/brown/mono - icon_state = "bordercolormonofull" - -/obj/effect/floor_decal/corner/brown/bordercorner - icon_state = "bordercolorcorner" - -/obj/effect/floor_decal/corner/brown/bordercorner2 - icon_state = "bordercolorcorner2" - -/obj/effect/floor_decal/corner/brown/borderfull - icon_state = "bordercolorfull" - -/obj/effect/floor_decal/corner/brown/bordercee - icon_state = "bordercolorcee" - -/obj/effect/floor_decal/corner/white - name = "white corner" - icon_state = "corner_white" - -/obj/effect/floor_decal/corner/white/diagonal - icon_state = "corner_white_diagonal" - -/obj/effect/floor_decal/corner/white/three_quarters - icon_state = "corner_white_three_quarters" - -/obj/effect/floor_decal/corner/white/full - icon_state = "corner_white_full" - -/obj/effect/floor_decal/corner/white/half - icon_state = "bordercolorhalf" - -/obj/effect/floor_decal/corner/white/mono - icon_state = "bordercolormonofull" - -/obj/effect/floor_decal/corner/grey - name = "grey corner" - color = "#8d8c8c" - -/obj/effect/floor_decal/corner/grey/diagonal - icon_state = "corner_white_diagonal" - -/obj/effect/floor_decal/corner/grey/three_quarters - icon_state = "corner_white_three_quarters" - -/obj/effect/floor_decal/corner/grey/full - icon_state = "corner_white_full" - -/obj/effect/floor_decal/corner/white/border - icon_state = "bordercolor" - -/obj/effect/floor_decal/corner/grey/half - icon_state = "bordercolorhalf" - -/obj/effect/floor_decal/corner/grey/mono - icon_state = "bordercolormonofull" - -/obj/effect/floor_decal/corner/white/bordercorner - icon_state = "bordercolorcorner" - -/obj/effect/floor_decal/corner/white/bordercorner2 - icon_state = "bordercolorcorner2" - -/obj/effect/floor_decal/corner/white/borderfull - icon_state = "bordercolorfull" - -/obj/effect/floor_decal/corner/white/bordercee - icon_state = "bordercolorcee" - -/obj/effect/floor_decal/corner/grey/diagonal - icon_state = "corner_white_diagonal" - -/obj/effect/floor_decal/corner/grey/three_quarters - icon_state = "corner_white_three_quarters" - -/obj/effect/floor_decal/corner/grey/border - icon_state = "bordercolor" - -/obj/effect/floor_decal/corner/grey/bordercorner - icon_state = "bordercolorcorner" - -/obj/effect/floor_decal/corner/grey/bordercorner - icon_state = "bordercolorcorner" - -/obj/effect/floor_decal/corner/grey/borderfull - icon_state = "bordercolorfull" - -/obj/effect/floor_decal/corner/grey/bordercee - icon_state = "bordercolorcee" - -/obj/effect/floor_decal/corner/lightgrey - name = "lightgrey corner" - color = "#a8b2b6" - -/obj/effect/floor_decal/corner/lightgrey/diagonal - icon_state = "corner_white_diagonal" - -/obj/effect/floor_decal/corner/lightgrey/three_quarters - icon_state = "corner_white_three_quarters" - -/obj/effect/floor_decal/corner/lightgrey/full - icon_state = "corner_white_full" - -/obj/effect/floor_decal/corner/lightgrey/border - icon_state = "bordercolor" - -/obj/effect/floor_decal/corner/lightgrey/half - icon_state = "bordercolorhalf" - -/obj/effect/floor_decal/corner/lightgrey/mono - icon_state = "bordercolormonofull" - -/obj/effect/floor_decal/corner/lightgrey/bordercorner - icon_state = "bordercolorcorner" - -/obj/effect/floor_decal/corner/lightgrey/bordercorner2 - icon_state = "bordercolorcorner2" - -/obj/effect/floor_decal/corner/lightgrey/borderfull - icon_state = "bordercolorfull" - -/obj/effect/floor_decal/corner/lightgrey/bordercee - icon_state = "bordercolorcee" - -/obj/effect/floor_decal/corner/b_green - name = "bottle green corner" - color = COLOR_PALE_BTL_GREEN - -/obj/effect/floor_decal/corner/b_green/diagonal - icon_state = "corner_white_diagonal" - -/obj/effect/floor_decal/corner/b_green/three_quarters - icon_state = "corner_white_three_quarters" - -/obj/effect/floor_decal/corner/b_green/full - icon_state = "corner_white_full" - -/obj/effect/floor_decal/corner/b_green/border - icon_state = "bordercolor" - -/obj/effect/floor_decal/corner/b_green/half - icon_state = "bordercolorhalf" - -/obj/effect/floor_decal/corner/b_green/mono - icon_state = "bordercolormonofull" - -/obj/effect/floor_decal/corner/b_green/bordercorner - icon_state = "bordercolorcorner" - -/obj/effect/floor_decal/corner/b_green/bordercorner2 - icon_state = "bordercolorcorner2" - -/obj/effect/floor_decal/corner/b_green/borderfull - icon_state = "bordercolorfull" - -/obj/effect/floor_decal/corner/b_green/bordercee - icon_state = "bordercolorcee" - -/obj/effect/floor_decal/corner/research - name = "research corner" - color = COLOR_RESEARCH - -/obj/effect/floor_decal/corner/research/diagonal - icon_state = "corner_white_diagonal" - -/obj/effect/floor_decal/corner/research/three_quarters - icon_state = "corner_white_three_quarters" - -/obj/effect/floor_decal/corner/research/full - icon_state = "corner_white_full" - -/obj/effect/floor_decal/corner/research/border - icon_state = "bordercolor" - -/obj/effect/floor_decal/corner/research/half - icon_state = "bordercolorhalf" - -/obj/effect/floor_decal/corner/research/mono - icon_state = "bordercolormonofull" - -/obj/effect/floor_decal/corner/research/bordercorner - icon_state = "bordercolorcorner" - -/obj/effect/floor_decal/corner/research/bordercorner2 - icon_state = "bordercolorcorner2" - -/obj/effect/floor_decal/corner/research/borderfull - icon_state = "bordercolorfull" - -/obj/effect/floor_decal/corner/research/bordercee - icon_state = "bordercolorcee" - -/obj/effect/floor_decal/spline/plain - name = "spline - plain" - icon_state = "spline_plain" - alpha = 229 - -/obj/effect/floor_decal/spline/plain/black - color = "#333333" - -/obj/effect/floor_decal/spline/plain/blue - color = COLOR_BLUE_GRAY - -/obj/effect/floor_decal/spline/plain/paleblue - color = COLOR_PALE_BLUE_GRAY - -/obj/effect/floor_decal/spline/plain/green - color = COLOR_GREEN_GRAY - -/obj/effect/floor_decal/spline/plain/lime - color = COLOR_PALE_GREEN_GRAY - -/obj/effect/floor_decal/spline/plain/yellow - color = COLOR_BROWN - -/obj/effect/floor_decal/spline/plain/beige - color = COLOR_BEIGE - -/obj/effect/floor_decal/spline/plain/red - color = COLOR_RED_GRAY - -/obj/effect/floor_decal/spline/plain/pink - color = COLOR_PALE_RED_GRAY - -/obj/effect/floor_decal/spline/plain/purple - color = COLOR_PURPLE_GRAY - -/obj/effect/floor_decal/spline/plain/mauve - color = COLOR_PALE_PURPLE_GRAY - -/obj/effect/floor_decal/spline/plain/orange - color = COLOR_DARK_ORANGE - -/obj/effect/floor_decal/spline/plain/brown - color = COLOR_DARK_BROWN - -/obj/effect/floor_decal/spline/plain/white - color = COLOR_WHITE - -/obj/effect/floor_decal/spline/plain/grey - color = "#8d8c8c" - -/obj/effect/floor_decal/spline/fancy - name = "spline - fancy" - icon_state = "spline_fancy" - -/obj/effect/floor_decal/spline/fancy/black - color = COLOR_GRAY - -/obj/effect/floor_decal/spline/fancy/black/corner - icon_state = "spline_fancy_corner" - -/obj/effect/floor_decal/spline/fancy/wood - name = "spline - wood" - color = "#cb9e04" - -/obj/effect/floor_decal/spline/fancy/wood/corner - icon_state = "spline_fancy_corner" - -/obj/effect/floor_decal/spline/fancy/wood/cee - icon_state = "spline_fancy_cee" - -/obj/effect/floor_decal/spline/fancy/wood/three_quarters - icon_state = "spline_fancy_full" - -/obj/effect/floor_decal/industrial/warning - name = "hazard stripes" - color = "#d2d53d" - icon_state = "stripe" - -/obj/effect/floor_decal/industrial/warning/corner - icon_state = "stripecorner" - -/obj/effect/floor_decal/industrial/warning/full - icon_state = "stripefull" - - -/obj/effect/floor_decal/industrial/warning/cee - icon_state = "stripecee" - -/obj/effect/floor_decal/industrial/warning/fulltile - icon_state = "stripefulltile" - -/obj/effect/floor_decal/industrial/custodial - name = "custodial stripes" - icon_state = "stripe" - -/obj/effect/floor_decal/industrial/custodial/corner - icon_state = "stripecorner" - -/obj/effect/floor_decal/industrial/custodial/full - icon_state = "stripefull" - -/obj/effect/floor_decal/industrial/custodial/cee - icon_state = "stripecee" - -/obj/effect/floor_decal/industrial/custodial/fulltile - icon_state = "stripefulltile" - -/obj/effect/floor_decal/industrial/fire - name = "fire safety stripes" - icon_state = "stripe" - detail_overlay = "overstripe" - detail_color = "#c90000" - -/obj/effect/floor_decal/industrial/fire/corner - icon_state = "stripecorner" - detail_overlay = "overstripecorner" - -/obj/effect/floor_decal/industrial/fire/full - icon_state = "stripefull" - detail_overlay = "overstripefull" - -/obj/effect/floor_decal/industrial/fire/cee - icon_state = "stripecee" - detail_overlay = "overstripecee" - -/obj/effect/floor_decal/industrial/fire/fulltile - icon_state = "stripefulltile" - -/obj/effect/floor_decal/industrial/radiation - name = "radiation hazard stripes" - icon_state = "stripe" - color = "#d2d53d" - detail_overlay = "overstripe" - detail_color = "#c900fb" - -/obj/effect/floor_decal/industrial/radiation/corner - icon_state = "stripecorner" - detail_overlay = "overstripecorner" - -/obj/effect/floor_decal/industrial/radiation/full - icon_state = "stripefull" - detail_overlay = "overstripefull" - -/obj/effect/floor_decal/industrial/radiation/cee - icon_state = "stripecee" - detail_overlay = "overstripecee" - -/obj/effect/floor_decal/industrial/radiation/fulltile - icon_state = "stripefulltile" - -/obj/effect/floor_decal/industrial/firstaid - name = "first aid stripes" - icon_state = "stripe" - detail_overlay = "overstripe" - detail_color = "#00cd00" - -/obj/effect/floor_decal/industrial/firstaid/corner - icon_state = "stripecorner" - detail_overlay = "overstripecorner" - -/obj/effect/floor_decal/industrial/firstaid/full - icon_state = "stripefull" - detail_overlay = "overstripefull" - -/obj/effect/floor_decal/industrial/firstaid/cee - icon_state = "stripecee" - detail_overlay = "overstripecee" - -/obj/effect/floor_decal/industrial/firstaid/fulltile - icon_state = "stripefulltile" - -/obj/effect/floor_decal/industrial/defective - name = "defective machinery stripes" - icon_state = "stripe" - detail_overlay = "overstripe" - detail_color = "#0000fb" - -/obj/effect/floor_decal/industrial/defective/corner - icon_state = "stripecorner" - detail_overlay = "overstripecorner" - -/obj/effect/floor_decal/industrial/defective/full - icon_state = "stripefull" - detail_overlay = "overstripefull" - -/obj/effect/floor_decal/industrial/defective/cee - icon_state = "stripecee" - detail_overlay = "overstripecee" - -/obj/effect/floor_decal/industrial/defective/fulltile - icon_state = "stripefulltile" - -/obj/effect/floor_decal/industrial/traffic - name = "traffic hazard stripes" - icon_state = "stripe" - detail_overlay = "overstripe" - detail_color = "#fb9700" - -/obj/effect/floor_decal/industrial/traffic/corner - icon_state = "stripecorner" - detail_overlay = "overstripecorner" - -/obj/effect/floor_decal/industrial/traffic/full - icon_state = "stripefull" - detail_overlay = "overstripefull" - -/obj/effect/floor_decal/industrial/traffic/cee - icon_state = "stripecee" - detail_overlay = "overstripecee" - -/obj/effect/floor_decal/industrial/traffic/fulltile - icon_state = "stripefulltile" - -/obj/effect/floor_decal/industrial/warning/dust - name = "hazard stripes" - icon_state = "warning_dust" - -/obj/effect/floor_decal/industrial/warning/dust/corner - name = "hazard stripes" - icon_state = "warningcorner_dust" - -/obj/effect/floor_decal/industrial/hatch - name = "hatched marking" - icon_state = "delivery" - alpha = 229 - -/obj/effect/floor_decal/industrial/hatch/yellow - color = "#cfcf55" - -/obj/effect/floor_decal/industrial/hatch/red - color = COLOR_RED_GRAY - -/obj/effect/floor_decal/industrial/hatch/orange - color = COLOR_DARK_ORANGE - -/obj/effect/floor_decal/industrial/hatch/blue - color = COLOR_BLUE_GRAY - -/obj/effect/floor_decal/industrial/shutoff - name = "shutoff valve marker" - icon_state = "shutoff" - -/obj/effect/floor_decal/industrial/outline - name = "white outline" - icon_state = "outline" - alpha = 229 - -/obj/effect/floor_decal/industrial/outline/blue - name = "blue outline" - color = "#00b8b2" - -/obj/effect/floor_decal/industrial/outline/yellow - name = "yellow outline" - color = "#cfcf55" - -/obj/effect/floor_decal/industrial/outline/grey - name = "grey outline" - color = "#808080" - -/obj/effect/floor_decal/industrial/outline/red - name = "red outline" - color = COLOR_RED_GRAY - -/obj/effect/floor_decal/industrial/outline/orange - name = "orange outline" - color = COLOR_DARK_ORANGE - -/obj/effect/floor_decal/industrial/loading - name = "loading area" - icon_state = "loadingarea" - alpha = 229 - -/obj/effect/floor_decal/plaque - name = "plaque" - icon_state = "plaque" - -/obj/effect/floor_decal/asteroid - name = "random asteroid rubble" - icon_state = "asteroid0" - -/obj/effect/floor_decal/beach - name = "sandy border" - icon = 'icons/misc/beach.dmi' - icon_state = "beachborder" - -/obj/effect/floor_decal/beach/corner - icon_state = "beachbordercorner" - -/obj/effect/floor_decal/asteroid/New() - icon_state = "asteroid[rand(0,9)]" - ..() - -/obj/effect/floor_decal/chapel - name = "chapel" - icon_state = "chapel" - -/obj/effect/floor_decal/ss13/l1 - name = "L1" - icon_state = "L1" - -/obj/effect/floor_decal/ss13/l2 - name = "L2" - icon_state = "L2" - -/obj/effect/floor_decal/ss13/l3 - name = "L3" - icon_state = "L3" - -/obj/effect/floor_decal/ss13/l4 - name = "L4" - icon_state = "L4" - -/obj/effect/floor_decal/ss13/l5 - name = "L5" - icon_state = "L5" - -/obj/effect/floor_decal/ss13/l6 - name = "L6" - icon_state = "L6" - -/obj/effect/floor_decal/ss13/l7 - name = "L7" - icon_state = "L7" - -/obj/effect/floor_decal/ss13/l8 - name = "L8" - icon_state = "L8" - -/obj/effect/floor_decal/ss13/l9 - name = "L9" - icon_state = "L9" - -/obj/effect/floor_decal/ss13/l10 - name = "L10" - icon_state = "L10" - -/obj/effect/floor_decal/ss13/l11 - name = "L11" - icon_state = "L11" - -/obj/effect/floor_decal/ss13/l12 - name = "L12" - icon_state = "L12" - -/obj/effect/floor_decal/ss13/l13 - name = "L13" - icon_state = "L13" - -/obj/effect/floor_decal/ss13/l14 - name = "L14" - icon_state = "L14" - -/obj/effect/floor_decal/ss13/l15 - name = "L15" - icon_state = "L15" - -/obj/effect/floor_decal/ss13/l16 - name = "L16" - icon_state = "L16" - -/obj/effect/floor_decal/sign - name = "floor sign" - icon_state = "white_1" - -/obj/effect/floor_decal/sign/two - icon_state = "white_2" - -/obj/effect/floor_decal/sign/a - icon_state = "white_a" - -/obj/effect/floor_decal/sign/b - icon_state = "white_b" - -/obj/effect/floor_decal/sign/c - icon_state = "white_c" - -/obj/effect/floor_decal/sign/d - icon_state = "white_d" - -/obj/effect/floor_decal/sign/ex - icon_state = "white_ex" - -/obj/effect/floor_decal/sign/m - icon_state = "white_m" - -/obj/effect/floor_decal/sign/cmo - icon_state = "white_cmo" - -/obj/effect/floor_decal/sign/v - icon_state = "white_v" - -/obj/effect/floor_decal/sign/p - icon_state = "white_p" - -/obj/effect/floor_decal/sign/or1 - icon_state = "white_or1" - -/obj/effect/floor_decal/sign/or2 - icon_state = "white_or2" - -/obj/effect/floor_decal/sign/tr - icon_state = "white_tr" - -/obj/effect/floor_decal/sign/pop - icon_state = "white_pop" - -/obj/effect/floor_decal/solarpanel - icon_state = "solarpanel" - -/obj/effect/floor_decal/snow - icon = 'icons/turf/overlays.dmi' - icon_state = "snowfloor" - -/obj/effect/floor_decal/floordetail - layer = TURF_DETAIL_LAYER - color = COLOR_GUNMETAL - icon_state = "manydot" - appearance_flags = DEFAULT_APPEARANCE_FLAGS - -/obj/effect/floor_decal/floordetail/New(var/newloc, var/newdir, var/newcolour) - color = null //color is here just for map preview, if left it applies both our and tile colors. - ..() - -/obj/effect/floor_decal/floordetail/tiled - icon_state = "manydot_tiled" - -/obj/effect/floor_decal/floordetail/pryhole - icon_state = "pryhole" - -/obj/effect/floor_decal/floordetail/edgedrain - icon_state = "edge" - -/obj/effect/floor_decal/floordetail/traction - icon_state = "traction" - -/obj/effect/floor_decal/ntlogo - icon_state = "ntlogo" - -/obj/effect/floor_decal/torchltdlogo - alpha = 230 - icon = 'icons/turf/flooring/corp_floor.dmi' - icon_state = "bottomleft" - -//Techfloor - -/obj/effect/floor_decal/corner_techfloor_gray - name = "corner techfloorgray" - icon_state = "corner_techfloor_gray" - -/obj/effect/floor_decal/corner_techfloor_gray/diagonal - name = "corner techfloorgray diagonal" - icon_state = "corner_techfloor_gray_diagonal" - -/obj/effect/floor_decal/corner_techfloor_gray/full - name = "corner techfloorgray full" - icon_state = "corner_techfloor_gray_full" - -/obj/effect/floor_decal/corner_techfloor_grid - name = "corner techfloorgrid" - icon_state = "corner_techfloor_grid" - -/obj/effect/floor_decal/corner_techfloor_grid/diagonal - name = "corner techfloorgrid diagonal" - icon_state = "corner_techfloor_grid_diagonal" - -/obj/effect/floor_decal/corner_techfloor_grid/full - name = "corner techfloorgrid full" - icon_state = "corner_techfloor_grid_full" - -/obj/effect/floor_decal/corner_steel_grid - name = "corner steel_grid" - icon_state = "steel_grid" - -/obj/effect/floor_decal/corner_steel_grid/diagonal - name = "corner tsteel_grid diagonal" - icon_state = "steel_grid_diagonal" - -/obj/effect/floor_decal/corner_steel_grid/full - name = "corner steel_grid full" - icon_state = "steel_grid_full" - -/obj/effect/floor_decal/borderfloor - name = "border floor" - icon_state = "borderfloor_white" - color = COLOR_GUNMETAL - -/obj/effect/floor_decal/borderfloor/corner - icon_state = "borderfloorcorner_white" - -/obj/effect/floor_decal/borderfloor/corner2 - icon_state = "borderfloorcorner2_white" - -/obj/effect/floor_decal/borderfloor/full - icon_state = "borderfloorfull_white" - -/obj/effect/floor_decal/borderfloor/cee - icon_state = "borderfloorcee_white" - -/obj/effect/floor_decal/borderfloorblack - name = "border floor" - icon_state = "borderfloor_white" - color = COLOR_DARK_GRAY - -/obj/effect/floor_decal/borderfloorblack/corner - icon_state = "borderfloorcorner_white" - -/obj/effect/floor_decal/borderfloorblack/corner2 - icon_state = "borderfloorcorner2_white" - -/obj/effect/floor_decal/borderfloorblack/full - icon_state = "borderfloorfull_white" - -/obj/effect/floor_decal/borderfloorblack/cee - icon_state = "borderfloorcee_white" - -/obj/effect/floor_decal/borderfloorwhite - name = "border floor" - icon_state = "borderfloor_white" - -/obj/effect/floor_decal/borderfloorwhite/corner - icon_state = "borderfloorcorner_white" - -/obj/effect/floor_decal/borderfloorwhite/corner2 - icon_state = "borderfloorcorner2_white" - -/obj/effect/floor_decal/borderfloorwhite/full - icon_state = "borderfloorfull_white" - -/obj/effect/floor_decal/borderfloorwhite/cee - icon_state = "borderfloorcee_white" - -/obj/effect/floor_decal/steeldecal - name = "steel decal" - icon_state = "steel_decals1" - color = COLOR_GUNMETAL - -/obj/effect/floor_decal/steeldecal/steel_decals1 - icon_state = "steel_decals1" - -/obj/effect/floor_decal/steeldecal/steel_decals2 - icon_state = "steel_decals2" - -/obj/effect/floor_decal/steeldecal/steel_decals3 - icon_state = "steel_decals3" - -/obj/effect/floor_decal/steeldecal/steel_decals4 - icon_state = "steel_decals4" - -/obj/effect/floor_decal/steeldecal/steel_decals6 - icon_state = "steel_decals6" - -/obj/effect/floor_decal/steeldecal/steel_decals7 - icon_state = "steel_decals7" - -/obj/effect/floor_decal/steeldecal/steel_decals8 - icon_state = "steel_decals8" - -/obj/effect/floor_decal/steeldecal/steel_decals9 - icon_state = "steel_decals9" - -/obj/effect/floor_decal/steeldecal/steel_decals10 - icon_state = "steel_decals10" - -/obj/effect/floor_decal/steeldecal/steel_decals_central1 - icon_state = "steel_decals_central1" - -/obj/effect/floor_decal/steeldecal/steel_decals_central2 - icon_state = "steel_decals_central2" - -/obj/effect/floor_decal/steeldecal/steel_decals_central3 - icon_state = "steel_decals_central3" - -/obj/effect/floor_decal/steeldecal/steel_decals_central4 - icon_state = "steel_decals_central4" - -/obj/effect/floor_decal/steeldecal/steel_decals_central5 - icon_state = "steel_decals_central5" - -/obj/effect/floor_decal/steeldecal/steel_decals_central6 - icon_state = "steel_decals_central6" - -/obj/effect/floor_decal/steeldecal/steel_decals_central7 - icon_state = "steel_decals_central7" - -/obj/effect/floor_decal/techfloor - name = "techfloor edges" - icon_state = "techfloor_edges" - -/obj/effect/floor_decal/techfloor/corner - name = "techfloor corner" - icon_state = "techfloor_corners" - -/obj/effect/floor_decal/techfloor/orange - name = "techfloor edges" - icon_state = "techfloororange_edges" - -/obj/effect/floor_decal/techfloor/orange/corner - name = "techfloor corner" - icon_state = "techfloororange_corners" - -/obj/effect/floor_decal/techfloor/hole - name = "hole left" - icon_state = "techfloor_hole_left" - -/obj/effect/floor_decal/techfloor/hole/right - name = "hole right" - icon_state = "techfloor_hole_right" - -/obj/effect/floor_decal/stoneborder - name = "stone border" - icon_state = "stoneborder" - -/obj/effect/floor_decal/stoneborder/corner - icon_state = "stoneborder_c" diff --git a/code/game/turfs/flooring/flooring_premade.dm b/code/game/turfs/flooring/flooring_premade.dm deleted file mode 100644 index 66551a02438b7..0000000000000 --- a/code/game/turfs/flooring/flooring_premade.dm +++ /dev/null @@ -1,417 +0,0 @@ -// simulated/floor is currently plating by default, but there really should be an explicit plating type. -/turf/simulated/floor/plating - name = "plating" - icon = 'icons/turf/flooring/plating.dmi' - icon_state = "plating" - layer = PLATING_LAYER - -/turf/simulated/floor/bluegrid - name = "mainframe floor" - icon = 'icons/turf/flooring/circuit.dmi' - icon_state = "bcircuit" - initial_flooring = /decl/flooring/reinforced/circuit - light_outer_range = 2 - light_max_bright = 1 - light_color = COLOR_BLUE - -/turf/simulated/floor/bluegrid/airless - initial_gas = null - -/turf/simulated/floor/greengrid - name = "mainframe floor" - icon = 'icons/turf/flooring/circuit.dmi' - icon_state = "gcircuit" - initial_flooring = /decl/flooring/reinforced/circuit/green - light_outer_range = 2 - light_max_bright = 3 - light_color = COLOR_GREEN - -/turf/simulated/floor/blackgrid - name = "mainframe floor" - icon = 'icons/turf/flooring/circuit.dmi' - icon_state = "rcircuit" - initial_flooring = /decl/flooring/reinforced/circuit/red - light_outer_range = 2 - light_max_bright = 2 - light_color = COLOR_RED - -/turf/simulated/floor/greengrid/airless - initial_gas = null - -/turf/simulated/floor/wood - name = "wooden floor" - icon = 'icons/turf/flooring/wood.dmi' - icon_state = "wood" - color = WOOD_COLOR_GENERIC - initial_flooring = /decl/flooring/wood - -/turf/simulated/floor/wood/mahogany - color = WOOD_COLOR_RICH - initial_flooring = /decl/flooring/wood/mahogany - -/turf/simulated/floor/wood/maple - color = WOOD_COLOR_PALE - initial_flooring = /decl/flooring/wood/maple - -/turf/simulated/floor/wood/ebony - color = WOOD_COLOR_BLACK - initial_flooring = /decl/flooring/wood/ebony - -/turf/simulated/floor/wood/walnut - color = WOOD_COLOR_CHOCOLATE - initial_flooring = /decl/flooring/wood/walnut - -/turf/simulated/floor/wood/bamboo - color = WOOD_COLOR_PALE2 - initial_flooring = /decl/flooring/wood/bamboo - -/turf/simulated/floor/wood/yew - color = WOOD_COLOR_YELLOW - initial_flooring = /decl/flooring/wood/yew - -/turf/simulated/floor/grass - name = "grass patch" - icon = 'icons/turf/flooring/grass.dmi' - icon_state = "grass0" - initial_flooring = /decl/flooring/grass - -/turf/simulated/floor/carpet - name = "brown carpet" - icon = 'icons/turf/flooring/carpet.dmi' - icon_state = "brown" - initial_flooring = /decl/flooring/carpet - -/turf/simulated/floor/carpet/blue - name = "blue carpet" - icon_state = "blue1" - initial_flooring = /decl/flooring/carpet/blue - -/turf/simulated/floor/carpet/blue2 - name = "pale blue carpet" - icon_state = "blue2" - initial_flooring = /decl/flooring/carpet/blue2 - -/turf/simulated/floor/carpet/blue3 - name = "sea blue carpet" - icon_state = "blue3" - initial_flooring = /decl/flooring/carpet/blue3 - -/turf/simulated/floor/carpet/magenta - name = "magenta carpet" - icon_state = "magenta" - initial_flooring = /decl/flooring/carpet/magenta - -/turf/simulated/floor/carpet/purple - name = "purple carpet" - icon_state = "purple" - initial_flooring = /decl/flooring/carpet/purple - -/turf/simulated/floor/carpet/orange - name = "orange carpet" - icon_state = "orange" - initial_flooring = /decl/flooring/carpet/orange - -/turf/simulated/floor/carpet/green - name = "green carpet" - icon_state = "green" - initial_flooring = /decl/flooring/carpet/green - -/turf/simulated/floor/carpet/red - name = "red carpet" - icon_state = "red" - initial_flooring = /decl/flooring/carpet/red - -/turf/simulated/floor/reinforced - name = "reinforced floor" - icon = 'icons/turf/flooring/tiles.dmi' - icon_state = "reinforced" - initial_flooring = /decl/flooring/reinforced - -/turf/simulated/floor/reinforced/airless - initial_gas = null - -/turf/simulated/floor/reinforced/airmix - initial_gas = list(GAS_OXYGEN = MOLES_O2ATMOS, GAS_NITROGEN = MOLES_N2ATMOS) - -/turf/simulated/floor/reinforced/nitrogen - initial_gas = list(GAS_NITROGEN = ATMOSTANK_NITROGEN) - -/turf/simulated/floor/reinforced/hydrogen - initial_gas = list(GAS_HYDROGEN = ATMOSTANK_HYDROGEN) - -/turf/simulated/floor/reinforced/oxygen - initial_gas = list(GAS_OXYGEN = ATMOSTANK_OXYGEN) - -/turf/simulated/floor/reinforced/phoron - initial_gas = list(GAS_PHORON = ATMOSTANK_PHORON) - -/turf/simulated/floor/reinforced/nitrogen/engine - name = "engine floor" - initial_gas = list(GAS_NITROGEN = MOLES_N2STANDARD) - -/turf/simulated/floor/reinforced/phoron/fuel - initial_gas = list(GAS_PHORON = ATMOSTANK_PHORON_FUEL) - -/turf/simulated/floor/reinforced/hydrogen/fuel - initial_gas = list(GAS_HYDROGEN = ATMOSTANK_HYDROGEN_FUEL) - -/turf/simulated/floor/reinforced/carbon_dioxide - initial_gas = list(GAS_CO2 = ATMOSTANK_CO2) - -/turf/simulated/floor/reinforced/n20 - initial_gas = list(GAS_N2O = ATMOSTANK_NITROUSOXIDE) - - -/turf/simulated/floor/cult - name = "engraved floor" - icon = 'icons/turf/flooring/cult.dmi' - icon_state = "cult" - initial_flooring = /decl/flooring/reinforced/cult - -/turf/simulated/floor/cult/cultify() - return - -//Tiled floor + sub-types - -/turf/simulated/floor/tiled - name = "steel floor" - icon = 'icons/turf/flooring/tiles.dmi' - icon_state = "steel" - initial_flooring = /decl/flooring/tiling - -/turf/simulated/floor/tiled/dark - name = "dark floor" - icon_state = "dark" - initial_flooring = /decl/flooring/tiling/dark - -/turf/simulated/floor/tiled/dark/monotile - name = "floor" - icon_state = "monotiledark" - initial_flooring = /decl/flooring/tiling/mono/dark - -/turf/simulated/floor/tiled/dark/airless - initial_gas = null - -/turf/simulated/floor/tiled/white - name = "white floor" - icon_state = "white" - initial_flooring = /decl/flooring/tiling/white - -/turf/simulated/floor/tiled/white/monotile - name = "floor" - icon_state = "monotile_light" - initial_flooring = /decl/flooring/tiling/mono/white - -/turf/simulated/floor/tiled/monofloor - name = "floor" - icon_state = "steel_monofloor" - initial_flooring = /decl/flooring/tiling/mono - -/turf/simulated/floor/tiled/white/airless - name = "airless floor" - initial_gas = null - temperature = TCMB - -/turf/simulated/floor/tiled/freezer - name = "tiles" - icon_state = "freezer" - initial_flooring = /decl/flooring/tiling/freezer - -/turf/simulated/floor/tiled/techmaint - name = "floor" - icon = 'icons/turf/flooring/tiles.dmi' - icon_state = "techmaint" - initial_flooring = /decl/flooring/tiling/new_tile/techmaint - -/turf/simulated/floor/tiled/monofloor - name = "floor" - icon_state = "monofloor" - initial_flooring = /decl/flooring/tiling/new_tile/monofloor - -/turf/simulated/floor/tiled/techfloor - name = "floor" - icon = 'icons/turf/flooring/techfloor.dmi' - icon_state = "techfloor_gray" - initial_flooring = /decl/flooring/tiling/tech - -/turf/simulated/floor/tiled/monotile - name = "floor" - icon_state = "steel_monotile" - initial_flooring = /decl/flooring/tiling/mono - -/turf/simulated/floor/tiled/steel_grid - name = "floor" - icon_state = "steel_grid" - initial_flooring = /decl/flooring/tiling/new_tile/steel_grid - -/turf/simulated/floor/tiled/steel_ridged - name = "floor" - icon_state = "steel_ridged" - initial_flooring = /decl/flooring/tiling/new_tile/steel_ridged - -/turf/simulated/floor/tiled/old_tile - name = "floor" - icon_state = "tile_full" - initial_flooring = /decl/flooring/tiling/new_tile - -/turf/simulated/floor/tiled/old_cargo - name = "floor" - icon_state = "cargo_one_full" - initial_flooring = /decl/flooring/tiling/new_tile/cargo_one - -/turf/simulated/floor/tiled/kafel_full - name = "floor" - icon_state = "kafel_full" - initial_flooring = /decl/flooring/tiling/new_tile/kafel - -/turf/simulated/floor/tiled/stone - name = "stone slab floor" - icon_state = "stone_full" - initial_flooring = /decl/flooring/tiling/stone - -/turf/simulated/floor/tiled/techfloor/grid - name = "floor" - icon_state = "techfloor_grid" - initial_flooring = /decl/flooring/tiling/tech/grid - -/turf/simulated/floor/tiled/skrell - icon = 'icons/turf/skrellturf.dmi' - icon_state = "skrellblack" - initial_flooring = /decl/flooring/reinforced/shuttle/skrell - -/turf/simulated/floor/tiled/skrell/white - icon_state = "skrellwhite" - initial_flooring = /decl/flooring/reinforced/shuttle/skrell/white - -/turf/simulated/floor/tiled/skrell/red - icon_state = "skrellred" - initial_flooring = /decl/flooring/reinforced/shuttle/skrell/red - -/turf/simulated/floor/tiled/skrell/blue - icon_state = "skrellblue" - initial_flooring = /decl/flooring/reinforced/shuttle/skrell/blue - -/turf/simulated/floor/tiled/skrell/orange - icon_state = "skrellorange" - initial_flooring = /decl/flooring/reinforced/shuttle/skrell/orange - -/turf/simulated/floor/tiled/skrell/green - icon_state = "skrellgreen" - initial_flooring = /decl/flooring/reinforced/shuttle/skrell/green - -/turf/simulated/floor/lino - name = "lino" - icon = 'icons/turf/flooring/linoleum.dmi' - icon_state = "lino" - initial_flooring = /decl/flooring/linoleum - -//ATMOS PREMADES -/turf/simulated/floor/reinforced/airless - name = "vacuum floor" - initial_gas = null - temperature = TCMB - -/turf/simulated/floor/airless - name = "airless plating" - initial_gas = null - temperature = TCMB - -/turf/simulated/floor/tiled/airless - name = "airless floor" - initial_gas = null - temperature = TCMB - -/turf/simulated/floor/bluegrid/airless - name = "airless floor" - initial_gas = null - temperature = TCMB - -/turf/simulated/floor/greengrid/airless - name = "airless floor" - initial_gas = null - temperature = TCMB - -/turf/simulated/floor/greengrid/nitrogen - initial_gas = list(GAS_NITROGEN = MOLES_N2STANDARD) - -// Placeholders -/turf/simulated/floor/airless/lava - name = "lava" - icon = 'icons/turf/flooring/lava.dmi' - icon_state = "lava" - -/turf/simulated/floor/ice - name = "ice" - icon = 'icons/turf/snow.dmi' - icon_state = "ice" - -/turf/simulated/floor/snow - name = "snow" - icon = 'icons/turf/snow.dmi' - icon_state = "snow" - -/turf/simulated/floor/snow/New() - icon_state = pick("snow[rand(1,12)]","snow0") - ..() - -/turf/simulated/floor/light -/turf/simulated/floor/airless/ceiling - -/turf/simulated/floor/beach - name = "beach" - icon = 'icons/misc/beach.dmi' - -/turf/simulated/floor/beach/sand - name = "sand" - icon_state = "sand" - -/turf/simulated/floor/beach/sand/desert - icon_state = "desert" - has_resources = 1 - -/turf/simulated/floor/beach/sand/desert/New() - icon_state = "desert[rand(0,5)]" - ..() - -/turf/simulated/floor/beach/coastline - name = "coastline" - icon = 'icons/misc/beach2.dmi' - icon_state = "sandwater" - turf_flags = TURF_IS_WET - -/turf/simulated/floor/beach/water - name = "water" - icon_state = "water" - turf_flags = TURF_IS_WET - -/turf/simulated/floor/beach/water/is_flooded(lying_mob, absolute) - . = absolute ? ..() : lying_mob - -/turf/simulated/floor/beach/water/update_dirt() - return // Water doesn't become dirty - -/turf/simulated/floor/beach/water/ocean - icon_state = "seadeep" - -/turf/simulated/floor/beach/water/New() - ..() - overlays += image("icon"='icons/misc/beach.dmi',"icon_state"="water5","layer"=MOB_LAYER+0.1) - -/turf/simulated/floor/crystal - name = "crystal floor" - icon = 'icons/turf/flooring/crystal.dmi' - icon_state = "" - initial_flooring = /decl/flooring/crystal - -/turf/simulated/floor/scales - name = "scale floor" - icon = 'icons/turf/flooring/flesh.dmi' - icon_state = "scales0" - initial_flooring = /decl/flooring/flesh - -//Water go splish -/turf/simulated/floor/pool - name = "pool floor" - icon = 'icons/turf/flooring/pool.dmi' - icon_state = "pool" - initial_flooring = /decl/flooring/pool diff --git a/code/game/turfs/flooring/flooring_shuttle.dm b/code/game/turfs/flooring/flooring_shuttle.dm deleted file mode 100644 index f61c6d879e62a..0000000000000 --- a/code/game/turfs/flooring/flooring_shuttle.dm +++ /dev/null @@ -1,31 +0,0 @@ -/turf/simulated/floor/shuttle - name = "floor" - icon = 'icons/turf/shuttle.dmi' - -/turf/simulated/floor/shuttle/blue - icon_state = "floor" - initial_flooring = /decl/flooring/reinforced/shuttle/blue - -/turf/simulated/floor/shuttle/yellow - icon_state = "floor2" - initial_flooring = /decl/flooring/reinforced/shuttle/yellow - -/turf/simulated/floor/shuttle/white - icon_state = "floor3" - initial_flooring = /decl/flooring/reinforced/shuttle/white - -/turf/simulated/floor/shuttle/red - icon_state = "floor4" - initial_flooring = /decl/flooring/reinforced/shuttle/red - -/turf/simulated/floor/shuttle/purple - icon_state = "floor5" - initial_flooring = /decl/flooring/reinforced/shuttle/purple - -/turf/simulated/floor/shuttle/darkred - icon_state = "floor6" - initial_flooring = /decl/flooring/reinforced/shuttle/darkred - -/turf/simulated/floor/shuttle/black - icon_state = "floor7" - initial_flooring = /decl/flooring/reinforced/shuttle/black diff --git a/code/game/turfs/initialization/init.dm b/code/game/turfs/initialization/init.dm deleted file mode 100644 index 7697342e273ef..0000000000000 --- a/code/game/turfs/initialization/init.dm +++ /dev/null @@ -1,12 +0,0 @@ -/decl/turf_initializer/proc/InitializeTurf(var/turf/T) - return - -/// Type path (Types of `/decl/turf_initializer`). If set, uses the provided decl to modify all turfs in the area during `Initialize()`. -/area/var/turf_initializer = null - -/area/Initialize() - . = ..() - for(var/turf/T in src) - if(turf_initializer) - var/decl/turf_initializer/ti = decls_repository.get_decl(turf_initializer) - ti.InitializeTurf(T) diff --git a/code/game/turfs/initialization/maintenance.dm b/code/game/turfs/initialization/maintenance.dm deleted file mode 100644 index aed3ab9ed8b8b..0000000000000 --- a/code/game/turfs/initialization/maintenance.dm +++ /dev/null @@ -1,78 +0,0 @@ -/decl/turf_initializer/maintenance - var/clutter_probability = 2 - var/oil_probability = 2 - var/vermin_probability = 0 - var/web_probability = 25 - -/decl/turf_initializer/maintenance/heavy - clutter_probability = 5 - web_probability = 50 - vermin_probability = 0.5 - -/decl/turf_initializer/maintenance/space - clutter_probability = 0 - vermin_probability = 0 - web_probability = 0 - -/decl/turf_initializer/maintenance/InitializeTurf(var/turf/simulated/T) - if(T.density) - return - // Quick and dirty check to avoid placing things inside windows - if(locate(/obj/structure/grille, T)) - return - - var/cardinal_turfs = T.CardinalTurfs() - - T.dirt = get_dirt_amount() - // If a neighbor is dirty, then we get dirtier. - var/how_dirty = dirty_neighbors(cardinal_turfs) - for(var/i = 0; i < how_dirty; i++) - T.dirt += rand(0,5) - T.update_dirt() - - if(prob(oil_probability)) - new /obj/effect/decal/cleanable/blood/oil(T) - - if(prob(clutter_probability)) - var/new_junk = get_random_junk_type() - new new_junk(T) - - if(prob(vermin_probability)) - if(prob(80)) - new /mob/living/simple_animal/passive/mouse(T) - else - new /mob/living/simple_animal/passive/lizard(T) - - if(prob(web_probability)) // Keep in mind that only "corners" get any sort of web - attempt_web(T, cardinal_turfs) - -/decl/turf_initializer/maintenance/proc/dirty_neighbors(var/list/cardinal_turfs) - var/how_dirty = 0 - for(var/turf/simulated/T in cardinal_turfs) - // Considered dirty if more than halfway to visible dirt - if(T.dirt > 25) - how_dirty++ - return how_dirty - -/decl/turf_initializer/maintenance/proc/attempt_web(var/turf/simulated/T) - var/turf/north_turf = get_step(T, NORTH) - if(!north_turf || !north_turf.density) - return - - for(var/dir in list(WEST, EAST)) // For the sake of efficiency, west wins over east in the case of 1-tile valid spots, rather than doing pick() - var/turf/neighbour = get_step(T, dir) - if(neighbour && neighbour.density) - if(dir == WEST) - new /obj/effect/decal/cleanable/cobweb(T) - if(dir == EAST) - new /obj/effect/decal/cleanable/cobweb2(T) - if(prob(web_probability)) - var/obj/effect/spider/spiderling/spiderling = new /obj/effect/spider/spiderling/mundane/dormant(T) - spiderling.pixel_y = spiderling.shift_range - spiderling.pixel_x = dir == WEST ? -spiderling.shift_range : spiderling.shift_range - -/decl/turf_initializer/maintenance/proc/get_dirt_amount() - return rand(10, 50) + rand(0, 50) - -/decl/turf_initializer/maintenance/heavy/get_dirt_amount() - return ..() + 10 diff --git a/code/game/turfs/simulated.dm b/code/game/turfs/simulated.dm deleted file mode 100644 index f814fdc8b333c..0000000000000 --- a/code/game/turfs/simulated.dm +++ /dev/null @@ -1,181 +0,0 @@ -/turf/simulated - name = "station" - var/wet = 0 - var/image/wet_overlay = null - - //Mining resources (for the large drills). - var/has_resources - var/list/resources - - - var/thermite = 0 - initial_gas = list(GAS_OXYGEN = MOLES_O2STANDARD, GAS_NITROGEN = MOLES_N2STANDARD) - var/to_be_destroyed = 0 //Used for fire, if a melting temperature was reached, it will be destroyed - var/max_fire_temperature_sustained = 0 //The max temperature of the fire which it was subjected to - var/dirt = 0 - - var/timer_id - -// This is not great. -/turf/simulated/proc/wet_floor(var/wet_val = 1, var/overwrite = FALSE) - if(wet_val < wet && !overwrite) - return - - if(!wet) - wet = wet_val - wet_overlay = image('icons/effects/water.dmi',src,"wet_floor") - overlays += wet_overlay - - timer_id = addtimer(CALLBACK(src,/turf/simulated/proc/unwet_floor),8 SECONDS, TIMER_STOPPABLE|TIMER_UNIQUE|TIMER_NO_HASH_WAIT|TIMER_OVERRIDE) - -/turf/simulated/proc/unwet_floor(var/check_very_wet = TRUE) - if(check_very_wet && wet >= 2) - wet-- - timer_id = addtimer(CALLBACK(src,/turf/simulated/proc/unwet_floor), 8 SECONDS, TIMER_STOPPABLE|TIMER_UNIQUE|TIMER_NO_HASH_WAIT|TIMER_OVERRIDE) - return - - wet = 0 - if(wet_overlay) - overlays -= wet_overlay - wet_overlay = null - -/turf/simulated/clean_blood() - for(var/obj/effect/decal/cleanable/blood/B in contents) - B.clean_blood() - ..() - -/turf/simulated/New() - ..() - if(istype(loc, /area/chapel)) - holy = 1 - levelupdate() - -/turf/simulated/proc/AddTracks(var/typepath,var/bloodDNA,var/comingdir,var/goingdir,var/bloodcolor=COLOR_BLOOD_HUMAN) - var/obj/effect/decal/cleanable/blood/tracks/tracks = locate(typepath) in src - if(!tracks) - tracks = new typepath(src) - tracks.AddTracks(bloodDNA,comingdir,goingdir,bloodcolor) - -/turf/simulated/proc/update_dirt() - dirt = min(dirt+0.5, 101) - var/obj/effect/decal/cleanable/dirt/dirtoverlay = locate(/obj/effect/decal/cleanable/dirt, src) - if (dirt > 50) - if (!dirtoverlay) - dirtoverlay = new/obj/effect/decal/cleanable/dirt(src) - dirtoverlay.alpha = min((dirt - 50) * 5, 255) - -/turf/simulated/remove_cleanables() - dirt = 0 - . = ..() - -/turf/simulated/Entered(atom/A, atom/OL) - . = ..() - if (istype(A,/mob/living)) - var/mob/living/M = A - - // Dirt overlays. - update_dirt() - - if(istype(M, /mob/living/carbon/human)) - var/mob/living/carbon/human/H = M - // Tracking blood - var/list/bloodDNA = null - var/bloodcolor="" - if(H.shoes) - var/obj/item/clothing/shoes/S = H.shoes - if(istype(S)) - S.handle_movement(src, MOVING_QUICKLY(H)) - if(S.track_blood && S.blood_DNA) - bloodDNA = S.blood_DNA - bloodcolor = S.blood_color - S.track_blood-- - else - if(H.track_blood && H.feet_blood_DNA) - bloodDNA = H.feet_blood_DNA - bloodcolor = H.feet_blood_color - H.track_blood-- - - if (bloodDNA && H.species.get_move_trail(H)) - src.AddTracks(H.species.get_move_trail(H),bloodDNA,H.dir,0,bloodcolor) // Coming - var/turf/simulated/from = get_step(H,reverse_direction(H.dir)) - if(istype(from) && from) - from.AddTracks(H.species.get_move_trail(H),bloodDNA,0,H.dir,bloodcolor) // Going - - bloodDNA = null - - if(M.lying) - return - - if(src.wet) - - if(M.buckled || (!MOVING_QUICKLY(M) && prob(min(100, 100/(wet/10))) ) ) - return - - // skillcheck for slipping - if(!prob(min(100, M.skill_fail_chance(SKILL_HAULING, 100, SKILL_MAX+1)/(3/wet)))) - return - - var/slip_dist = 1 - var/slip_stun = 6 - var/floor_type = "wet" - - if(2 <= src.wet) // Lube - floor_type = "slippery" - slip_dist = 4 - slip_stun = 10 - - if(M.slip("the [floor_type] floor", slip_stun)) - addtimer(CALLBACK(M, /mob/proc/slip_handler, M.dir, slip_dist - 1, 1), 1) - else - M.inertia_dir = 0 - else - M.inertia_dir = 0 - -/mob/proc/slip_handler(dir, dist, delay) - if (dist > 0) - addtimer(CALLBACK(src, .proc/slip_handler, dir, dist - 1, delay), delay) - step(src, dir) - -//returns 1 if made bloody, returns 0 otherwise -/turf/simulated/add_blood(mob/living/carbon/human/M as mob) - if (!..()) - return 0 - - if(istype(M)) - for(var/obj/effect/decal/cleanable/blood/B in contents) - if(!B.blood_DNA) - B.blood_DNA = list() - if(!B.blood_DNA[M.dna.unique_enzymes]) - B.blood_DNA[M.dna.unique_enzymes] = M.dna.b_type - return 1 //we bloodied the floor - blood_splatter(src,M.get_blood(M.vessel),1) - return 1 //we bloodied the floor - return 0 - -// Only adds blood on the floor -- Skie -/turf/simulated/proc/add_blood_floor(mob/living/carbon/M as mob) - if( istype(M, /mob/living/carbon/alien )) - var/obj/effect/decal/cleanable/blood/xeno/this = new /obj/effect/decal/cleanable/blood/xeno(src) - this.blood_DNA["UNKNOWN BLOOD"] = "X*" - else if( istype(M, /mob/living/silicon/robot )) - new /obj/effect/decal/cleanable/blood/oil(src) - -/turf/simulated/proc/can_build_cable(var/mob/user) - return 0 - -/turf/simulated/attackby(var/obj/item/thing, var/mob/user) - if(isCoil(thing) && can_build_cable(user)) - var/obj/item/stack/cable_coil/coil = thing - coil.turf_place(src, user) - return - return ..() - -/turf/simulated/Initialize() - if(GAME_STATE >= RUNLEVEL_GAME) - fluid_update() - . = ..() - -/turf/simulated/damage_health(damage, damage_type, damage_flags, severity) - if (HAS_FLAGS(damage_flags, DAMAGE_FLAG_TURF_BREAKER)) - damage *= 4 - . = ..() diff --git a/code/game/turfs/simulated/floor.dm b/code/game/turfs/simulated/floor.dm deleted file mode 100644 index 69e425e8ddcad..0000000000000 --- a/code/game/turfs/simulated/floor.dm +++ /dev/null @@ -1,110 +0,0 @@ -/turf/simulated/floor - name = "plating" - icon = 'icons/turf/flooring/plating.dmi' - icon_state = "plating" - permit_ao = TRUE - - // Damage to flooring. - var/broken - var/burnt - - // Plating data. - var/base_name = "plating" - var/base_desc = "The naked hull." - var/base_icon = 'icons/turf/flooring/plating.dmi' - var/base_icon_state = "plating" - var/base_color = COLOR_WHITE - - // Flooring data. - var/flooring_override - var/initial_flooring - var/decl/flooring/flooring - var/mineral = DEFAULT_WALL_MATERIAL - - thermal_conductivity = 0.040 - heat_capacity = 10000 - var/lava = 0 - - height = -FLUID_SHALLOW / 2 - -/turf/simulated/floor/is_plating() - return !flooring - -/turf/simulated/floor/protects_atom(var/atom/A) - return (A.level <= 1 && !is_plating()) || ..() - -/turf/simulated/floor/New(var/newloc, var/floortype) - ..(newloc) - if(!floortype && initial_flooring) - floortype = initial_flooring - if(floortype) - set_flooring(decls_repository.get_decl(floortype)) - -/turf/simulated/floor/proc/set_flooring(var/decl/flooring/newflooring) - make_plating(defer_icon_update = 1) - flooring = newflooring - update_icon(1) - levelupdate() - -//This proc will set floor_type to null and the update_icon() proc will then change the icon_state of the turf -//This proc auto corrects the grass tiles' siding. -/turf/simulated/floor/proc/make_plating(var/place_product, var/defer_icon_update) - - overlays.Cut() - - for(var/obj/effect/decal/writing/W in src) - qdel(W) - - SetName(base_name) - desc = base_desc - icon = base_icon - icon_state = base_icon_state - color = base_color - layer = PLATING_LAYER - - if(flooring) - flooring.on_remove() - if(flooring.build_type && place_product) - new flooring.build_type(src) - flooring = null - - set_light(0) - broken = null - burnt = null - flooring_override = null - levelupdate() - - if(!defer_icon_update) - update_icon(1) - -/turf/simulated/floor/levelupdate() - for(var/obj/O in src) - O.hide(O.hides_under_flooring() && src.flooring) - - if(flooring) - layer = TURF_LAYER - height = flooring.height - else - layer = PLATING_LAYER - height = -FLUID_SHALLOW / 2 - -/turf/simulated/floor/can_engrave() - return (!flooring || flooring.can_engrave) - -/turf/simulated/floor/shuttle_ceiling - name = "hull plating" - icon = 'icons/turf/flooring/tiles.dmi' - icon_state = "reinforced_light" - initial_gas = null - -/turf/simulated/floor/shuttle_ceiling/air - initial_gas = list(GAS_OXYGEN = MOLES_O2STANDARD, GAS_NITROGEN = MOLES_N2STANDARD) - -/turf/simulated/floor/is_floor() - return TRUE - -/turf/simulated/IgniteTurf(power, fire_colour) - if(turf_fire) - turf_fire.AddPower(power) - return - new /obj/effect/turf_fire(src, power, fire_colour) diff --git a/code/game/turfs/simulated/floor_acts.dm b/code/game/turfs/simulated/floor_acts.dm deleted file mode 100644 index 5e11be42ce52a..0000000000000 --- a/code/game/turfs/simulated/floor_acts.dm +++ /dev/null @@ -1,45 +0,0 @@ -/turf/simulated/floor/ex_act(severity) - //set src in oview(1) - switch(severity) - if(EX_ACT_DEVASTATING) - src.ChangeTurf(get_base_turf_by_area(src)) - if(EX_ACT_HEAVY) - switch(pick(40;1,40;2,3)) - if (1) - if(prob(33)) new /obj/item/stack/material/steel(src) - src.ReplaceWithLattice() - if(2) - src.ChangeTurf(get_base_turf_by_area(src)) - if(3) - if(prob(33)) new /obj/item/stack/material/steel(src) - if(prob(80)) - src.break_tile_to_plating() - else - src.break_tile() - src.hotspot_expose(1000,CELL_VOLUME) - if(EX_ACT_LIGHT) - if (prob(50)) - src.break_tile() - src.hotspot_expose(1000,CELL_VOLUME) - return - -/turf/simulated/floor/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume) - - var/temp_destroy = get_damage_temperature() - if(!burnt && prob(5)) - burn_tile(exposed_temperature) - else if(temp_destroy && exposed_temperature >= (temp_destroy + 100) && prob(1) && !is_plating()) - make_plating() //destroy the tile, exposing plating - burn_tile(exposed_temperature) - return - -//should be a little bit lower than the temperature required to destroy the material -/turf/simulated/floor/proc/get_damage_temperature() - return flooring ? flooring.damage_temperature : null - -/turf/simulated/floor/adjacent_fire_act(turf/simulated/floor/adj_turf, datum/gas_mixture/adj_air, adj_temp, adj_volume) - var/dir_to = get_dir(src, adj_turf) - - for(var/obj/structure/window/W in src) - if(W.dir == dir_to || W.is_fulltile()) //Same direction or diagonal (full tile) - W.fire_act(adj_air, adj_temp, adj_volume) diff --git a/code/game/turfs/simulated/floor_attackby.dm b/code/game/turfs/simulated/floor_attackby.dm deleted file mode 100644 index efb9786864c72..0000000000000 --- a/code/game/turfs/simulated/floor_attackby.dm +++ /dev/null @@ -1,207 +0,0 @@ -/turf/simulated/floor/attackby(var/obj/item/C, var/mob/user) - - var/area/A = get_area(src) - if (!A.can_modify_area()) - visible_message("\The [src] cannot be dismantled or modified in any way!") - return - - if(!C || !user) - return 0 - - if(isCoil(C) || (flooring && istype(C, /obj/item/stack/material/rods))) - return ..(C, user) - - if(!(isScrewdriver(C) && flooring && (flooring.flags & TURF_REMOVE_SCREWDRIVER)) && try_graffiti(user, C)) - return - - if(flooring) - if(isCrowbar(C)) - if(user.a_intent != I_HELP) - return - if(broken || burnt) - to_chat(user, "You remove the broken [flooring.descriptor].") - make_plating() - else if(flooring.flags & TURF_IS_FRAGILE) - to_chat(user, "You forcefully pry off the [flooring.descriptor], destroying them in the process.") - make_plating() - else if(flooring.flags & TURF_REMOVE_CROWBAR) - if (flooring.remove_timer) - user.visible_message( - SPAN_NOTICE("\The [user] begins prying up \the [flooring.descriptor] with \the [C]!"), - SPAN_NOTICE("You begin prying up \the [flooring.descriptor] with \the [C].") - ) - playsound(src, 'sound/items/Crowbar.ogg', 80, 1) - if (do_after(user, flooring.remove_timer, src, DO_PUBLIC_UNIQUE)) - user.visible_message( - SPAN_NOTICE("\The [user] pries up \the [flooring.descriptor] with \the [C]!"), - SPAN_NOTICE("You pry up \the [flooring.descriptor] with \the [C].") - ) - make_plating(TRUE) - playsound(src, 'sound/items/Crowbar.ogg', 80, 1) - return - else - to_chat(user, "You lever off the [flooring.descriptor].") - make_plating(TRUE) - else - return - playsound(src, 'sound/items/Crowbar.ogg', 80, 1) - return - else if(isScrewdriver(C) && (flooring.flags & TURF_REMOVE_SCREWDRIVER)) - if(broken || burnt) - return - if (flooring.remove_timer) - user.visible_message( - SPAN_NOTICE("\The [user] begins unscrewing \the [flooring.descriptor] with \the [C]!"), - SPAN_NOTICE("You begin unscrewing \the [flooring.descriptor] with \the [C].") - ) - playsound(src, 'sound/items/Screwdriver.ogg', 80, 1) - if (do_after(user, flooring.remove_timer, src, DO_PUBLIC_UNIQUE)) - user.visible_message( - SPAN_NOTICE("\The [user] unscrews \the [flooring.descriptor] with \the [C]!"), - SPAN_NOTICE("You unscrew \the [flooring.descriptor] with \the [C].") - ) - make_plating(TRUE) - playsound(src, 'sound/items/Screwdriver.ogg', 80, 1) - return - else - to_chat(user, "You unscrew and remove the [flooring.descriptor].") - make_plating(TRUE) - playsound(src, 'sound/items/Screwdriver.ogg', 80, 1) - return - else if(isWrench(C) && (flooring.flags & TURF_REMOVE_WRENCH)) - if (flooring.remove_timer) - user.visible_message( - SPAN_NOTICE("\The [user] begins unwrenching \the [flooring.descriptor] with \the [C]!"), - SPAN_NOTICE("You begin unwrenching \the [flooring.descriptor] with \the [C].") - ) - playsound(src, 'sound/items/Ratchet.ogg', 80, 1) - if (do_after(user, flooring.remove_timer, src, DO_PUBLIC_UNIQUE)) - user.visible_message( - SPAN_NOTICE("\The [user] unwrench \the [flooring.descriptor] with \the [C]!"), - SPAN_NOTICE("You unwrench \the [flooring.descriptor] with \the [C].") - ) - make_plating(TRUE) - playsound(src, 'sound/items/Ratchet.ogg', 80, 1) - return - else - to_chat(user, "You unwrench and remove the [flooring.descriptor].") - make_plating(TRUE) - playsound(src, 'sound/items/Ratchet.ogg', 80, 1) - return - else if(istype(C, /obj/item/shovel) && (flooring.flags & TURF_REMOVE_SHOVEL)) - to_chat(user, "You shovel off the [flooring.descriptor].") - make_plating(1) - playsound(src, 'sound/items/Deconstruct.ogg', 80, 1) - return - else if(isCoil(C)) - to_chat(user, "You must remove the [flooring.descriptor] first.") - return - else - - if(istype(C, /obj/item/stack)) - if(broken || burnt) - to_chat(user, "This section is too damaged to support anything. Use a welder to fix the damage.") - return - //first check, catwalk? Else let flooring do its thing - if(locate(/obj/structure/catwalk, src)) - return - if (istype(C, /obj/item/stack/material/rods)) - var/obj/item/stack/material/rods/R = C - if (R.use(2)) - playsound(src, 'sound/weapons/Genhit.ogg', 50, 1) - new /obj/structure/catwalk(src) - return - var/obj/item/stack/S = C - var/decl/flooring/use_flooring - var/list/decls = decls_repository.get_decls_of_subtype(/decl/flooring) - for(var/flooring_type in decls) - var/decl/flooring/F = decls[flooring_type] - if(!F.build_type) - continue - if(S.type == F.build_type || S.build_type == F.build_type) - use_flooring = F - break - if(!use_flooring) - return - // Do we have enough? - if(use_flooring.build_cost && S.get_amount() < use_flooring.build_cost) - to_chat(user, "You require at least [use_flooring.build_cost] [S.name] to complete the [use_flooring.descriptor].") - return - // Stay still and focus... - if(use_flooring.build_time && !do_after(user, use_flooring.build_time, src, DO_PUBLIC_UNIQUE)) - return - if(flooring || !S || !user || !use_flooring) - return - if(S.use(use_flooring.build_cost)) - set_flooring(use_flooring) - playsound(src, 'sound/items/Deconstruct.ogg', 80, 1) - return - // Repairs and Deconstruction. - else if(isCrowbar(C)) - if(broken || burnt) - playsound(src, 'sound/items/Crowbar.ogg', 80, 1) - visible_message("[user] has begun prying off the damaged plating.") - var/turf/T = GetBelow(src) - if(T) - T.visible_message("The ceiling above looks as if it's being pried off.") - if(do_after(user, 10 SECONDS, src, DO_PUBLIC_UNIQUE)) - if(!istype(src, /turf/simulated/floor)) - return - if(!broken && !burnt || !(is_plating())) - return - visible_message("[user] has pried off the damaged plating.") - new /obj/item/stack/tile/floor(src) - src.ReplaceWithLattice() - playsound(src, 'sound/items/Deconstruct.ogg', 80, 1) - if(T) - T.visible_message("The ceiling above has been pried off!") - else - return - return - else if(isWelder(C)) - var/obj/item/weldingtool/welder = C - if(welder.isOn() && (is_plating())) - if(broken || burnt) - if(welder.remove_fuel(0, user)) - to_chat(user, "You fix some dents on the broken plating.") - playsound(src, 'sound/items/Welder.ogg', 80, 1) - icon_state = "plating" - burnt = null - broken = null - return - else - if(welder.remove_fuel(0, user)) - playsound(src, 'sound/items/Welder.ogg', 80, 1) - visible_message("[user] has started melting the plating's reinforcements!") - if(do_after(user, 5 SECONDS, src, DO_PUBLIC_UNIQUE) && welder.isOn() && welder_melt()) - visible_message("[user] has melted the plating's reinforcements! It should be possible to pry it off.") - playsound(src, 'sound/items/Welder.ogg', 80, 1) - return - else if(istype(C, /obj/item/gun/energy/plasmacutter) && (is_plating()) && !broken && !burnt) - var/obj/item/gun/energy/plasmacutter/cutter = C - if(!cutter.slice(user)) - return ..() - playsound(src, 'sound/items/Welder.ogg', 80, 1) - visible_message("[user] has started slicing through the plating's reinforcements!") - if(do_after(user, 3 SECONDS, src, DO_PUBLIC_UNIQUE) && welder_melt()) - visible_message("[user] has sliced through the plating's reinforcements! It should be possible to pry it off.") - playsound(src, 'sound/items/Welder.ogg', 80, 1) - - return ..() - -/turf/simulated/floor/proc/welder_melt() - if(!(is_plating()) || broken || burnt) - return 0 - burnt = 1 - remove_decals() - update_icon() - return 1 - -/turf/simulated/floor/can_build_cable(var/mob/user) - if(!is_plating() || flooring) - to_chat(user, "Remove the tiling first.") - return 0 - if(broken || burnt) - to_chat(user, "This section is too damaged to support anything. Use a welder to fix the damage.") - return 0 - return 1 diff --git a/code/game/turfs/simulated/floor_damage.dm b/code/game/turfs/simulated/floor_damage.dm deleted file mode 100644 index c706a7f995bc8..0000000000000 --- a/code/game/turfs/simulated/floor_damage.dm +++ /dev/null @@ -1,27 +0,0 @@ -/turf/simulated/floor/proc/gets_drilled() - return - -/turf/simulated/floor/proc/break_tile_to_plating() - if(!is_plating()) - make_plating() - break_tile() - -/turf/simulated/floor/proc/break_tile() - if(!flooring || !(flooring.flags & TURF_CAN_BREAK) || !isnull(broken)) - return - if(flooring.has_damage_range) - broken = rand(0,flooring.has_damage_range) - else - broken = 0 - remove_decals() - update_icon() - -/turf/simulated/floor/proc/burn_tile(var/exposed_temperature) - if(!flooring || !(flooring.flags & TURF_CAN_BURN) || !isnull(burnt)) - return - if(flooring.has_burn_range) - burnt = rand(0,flooring.has_burn_range) - else - burnt = 0 - remove_decals() - update_icon() \ No newline at end of file diff --git a/code/game/turfs/simulated/floor_icon.dm b/code/game/turfs/simulated/floor_icon.dm deleted file mode 100644 index ec913bc67cb06..0000000000000 --- a/code/game/turfs/simulated/floor_icon.dm +++ /dev/null @@ -1,172 +0,0 @@ -var/global/list/flooring_cache = list() - -/turf/simulated/floor/on_update_icon(var/update_neighbors) - - update_flood_overlay() - - if(lava) - if(permit_ao) - queue_ao(FALSE) - return - - var/has_smooth = 0 //This is just the has_border bitfield inverted for easier logic - - if(flooring) - // Set initial icon and strings. - SetName(flooring.name) - desc = flooring.desc - icon = flooring.icon - color = flooring.color - - if(flooring_override) - icon_state = flooring_override - else - icon_state = flooring.icon_base - if(flooring.has_base_range) - icon_state = "[icon_state][rand(0,flooring.has_base_range)]" - flooring_override = icon_state - - // Apply edges, corners, and inner corners. - overlays.Cut() - var/has_border = 0 - //Check the cardinal turfs - for(var/step_dir in GLOB.cardinal) - var/turf/simulated/floor/T = get_step(src, step_dir) - var/is_linked = flooring.symmetric_test_link(src, T) - - //Alright we've figured out whether or not we smooth with this turf - if (!is_linked) - has_border |= step_dir - - //Now, if we don't, then lets add a border - overlays |= get_flooring_overlay("[flooring.icon]_[flooring.icon_base]-edge-[step_dir]", "[flooring.icon_base]_edges", step_dir, (flooring.flags & TURF_HAS_EDGES)) - - has_smooth = ~(has_border & (NORTH | SOUTH | EAST | WEST)) - - if(flooring.can_paint && decals && decals.len) - overlays |= decals - - //We can only have inner corners if we're smoothed with something - if (has_smooth && flooring.flags & TURF_HAS_INNER_CORNERS) - for(var/direction in GLOB.cornerdirs) - if((has_smooth & direction) == direction) - if(!flooring.symmetric_test_link(src, get_step(src, direction))) - overlays |= get_flooring_overlay("[flooring.icon]_[flooring.icon_base]-corner-[direction]", "[flooring.icon_base]_corners", direction) - - //Next up, outer corners - if (has_border && flooring.flags & TURF_HAS_CORNERS) - for(var/direction in GLOB.cornerdirs) - if((has_border & direction) == direction) - if(!flooring.symmetric_test_link(src, get_step(src, direction))) - overlays |= get_flooring_overlay("[flooring.icon]_[flooring.icon_base]-edge-[direction]", "[flooring.icon_base]_edges", direction,(flooring.flags & TURF_HAS_EDGES)) - - /* - //Now lets handle those fancy floors which have many centre icons - if(flooring.has_base_range) - if (!has_border || (flooring.flags & TURF_HAS_RANDOM_BORDER)) - //Some floors can have random tiles on the borders, some don't. It all depends on the sprite - icon_state = "[flooring.icon_base][rand(0,flooring.has_base_range)]" - flooring_override = icon_state - else - icon_state = flooring.icon_base+"0" - */ - - if(decals && decals.len) - for(var/image/I in decals) - if(I.layer != DECAL_PLATING_LAYER) - continue - overlays |= I - - if(is_plating() && !(isnull(broken) && isnull(burnt))) //temp, todo - icon = 'icons/turf/flooring/plating.dmi' - icon_state = "dmg[rand(1,4)]" - else if(flooring) - if(!isnull(broken) && (flooring.flags & TURF_CAN_BREAK)) - overlays |= get_damage_overlay("broken[broken]", BLEND_MULTIPLY) - if(!isnull(burnt) && (flooring.flags & TURF_CAN_BURN)) - overlays |= get_damage_overlay("burned[burnt]") - - queue_ao(FALSE) - if(update_neighbors) - for(var/turf/simulated/floor/F in orange(src, 1)) - F.queue_ao(FALSE) - F.update_icon() - -/turf/simulated/floor/proc/get_flooring_overlay(var/cache_key, var/icon_base, var/icon_dir = 0, var/external = FALSE) - if(!flooring_cache[cache_key]) - var/image/I = image(icon = flooring.icon, icon_state = icon_base, dir = icon_dir) - I.turf_decal_layerise() - - //External overlays will be offset out of this tile - if (external) - if (icon_dir & NORTH) - I.pixel_y = world.icon_size - else if (icon_dir & SOUTH) - I.pixel_y = -world.icon_size - - if (icon_dir & WEST) - I.pixel_x = -world.icon_size - else if (icon_dir & EAST) - I.pixel_x = world.icon_size - I.layer = flooring.decal_layer - - flooring_cache[cache_key] = I - return flooring_cache[cache_key] - -/turf/simulated/floor/proc/get_damage_overlay(var/cache_key, var/blend) - if(!flooring_cache[cache_key]) - var/image/I = image(icon = 'icons/turf/flooring/damage.dmi', icon_state = cache_key) - if(blend) - I.blend_mode = blend - I.turf_decal_layerise() - flooring_cache[cache_key] = I - return flooring_cache[cache_key] - -/decl/flooring/proc/test_link(var/turf/origin, var/turf/T) - var/is_linked = FALSE - //is_wall is true for wall turfs and for floors containing a low wall - if(T.is_wall()) - if(wall_smooth == SMOOTH_ALL) - is_linked = TRUE - - //If is_hole is true, then it's space or openspace - else if(T.is_open()) - if(space_smooth == SMOOTH_ALL) - is_linked = TRUE - - - //If we get here then its a normal floor - else if (T.is_floor()) - var/turf/simulated/floor/t = T - - //Check for window frames. - if(wall_smooth == SMOOTH_ALL) - for(var/obj/structure/wall_frame/WF in T.contents) - is_linked = TRUE - - //If the floor is the same as us,then we're linked, - if (istype(src, t.flooring)) - is_linked = TRUE - else if (floor_smooth == SMOOTH_ALL) - is_linked = TRUE - - else if (floor_smooth != SMOOTH_NONE) - - //If we get here it must be using a whitelist or blacklist - if (floor_smooth == SMOOTH_WHITELIST) - for (var/v in flooring_whitelist) - if (istype(t.flooring, v)) - //Found a match on the list - is_linked = TRUE - break - else if(floor_smooth == SMOOTH_BLACKLIST) - is_linked = TRUE //Default to true for the blacklist, then make it false if a match comes up - for (var/v in flooring_whitelist) - if (istype(t.flooring, v)) - //Found a match on the list - is_linked = FALSE - break - return is_linked - -/decl/flooring/proc/symmetric_test_link(var/turf/A, var/turf/B) - return test_link(A, B) && test_link(B,A) diff --git a/code/game/turfs/simulated/floor_static.dm b/code/game/turfs/simulated/floor_static.dm deleted file mode 100644 index af4808692dba7..0000000000000 --- a/code/game/turfs/simulated/floor_static.dm +++ /dev/null @@ -1,55 +0,0 @@ -// This type of flooring cannot be altered short of being destroyed and rebuilt. -// Use this to bypass the flooring system entirely ie. event areas, holodeck, etc. - -/turf/simulated/floor/fixed - name = "floor" - icon = 'icons/turf/flooring/tiles.dmi' - icon_state = "steel" - initial_flooring = null - footstep_type = /decl/footsteps/plating - -/turf/simulated/floor/fixed/attackby(var/obj/item/C, var/mob/user) - if(istype(C, /obj/item/stack) && !isCoil(C)) - return - return ..() - -/turf/simulated/floor/fixed/on_update_icon() - update_flood_overlay() - -/turf/simulated/floor/fixed/is_plating() - return 0 - -/turf/simulated/floor/fixed/set_flooring() - return - -/turf/simulated/floor/fixed/alium - name = "alien plating" - desc = "This obviously wasn't made for your feet." - icon = 'icons/turf/flooring/alium.dmi' - icon_state = "jaggy" - -/turf/simulated/floor/fixed/alium/attackby(var/obj/item/C, var/mob/user) - if(isCrowbar(C)) - to_chat(user, "There aren't any openings big enough to pry it away...") - return - return ..() - -/turf/simulated/floor/fixed/alium/New() - ..() - var/material/A = SSmaterials.get_material_by_name(MATERIAL_ALIENALLOY) - if(!A) - return - color = A.icon_colour - var/style = A.hardness % 2 ? "curvy" : "jaggy" - icon_state = "[style][(x*y) % 7]" - -/turf/simulated/floor/fixed/alium/airless - initial_gas = null - temperature = TCMB - -/turf/simulated/floor/fixed/alium/ex_act(severity) - var/material/A = SSmaterials.get_material_by_name(MATERIAL_ALIENALLOY) - if(prob(A.explosion_resistance)) - return - if(severity == EX_ACT_DEVASTATING) - ChangeTurf(get_base_turf_by_area(src)) diff --git a/code/game/turfs/simulated/footsteps.dm b/code/game/turfs/simulated/footsteps.dm deleted file mode 100644 index 34d38fca484c4..0000000000000 --- a/code/game/turfs/simulated/footsteps.dm +++ /dev/null @@ -1,74 +0,0 @@ -/proc/get_footstep(var/footstep_type, var/mob/caller) - . = caller && caller.get_footstep(footstep_type) - if(!.) - var/decl/footsteps/FS = decls_repository.get_decl(footstep_type) - . = pick(FS.footstep_sounds) - -/turf/simulated/proc/get_footstep_sound(var/mob/caller) - for(var/obj/structure/S in contents) - if(S.footstep_type) - return get_footstep(S.footstep_type, caller) - - if(check_fluid_depth(10) && !is_flooded(TRUE)) - return get_footstep(/decl/footsteps/water, caller) - - if(footstep_type) - return get_footstep(footstep_type, caller) - - if(is_plating()) - return get_footstep(/decl/footsteps/plating, caller) - -/turf/simulated/floor/get_footstep_sound(var/mob/caller) - . = ..() - if(!.) - if(!flooring || !flooring.footstep_type) - return get_footstep(/decl/footsteps/blank, caller) - else - return get_footstep(flooring.footstep_type, caller) - -/turf/simulated/Entered(var/mob/living/carbon/human/H) - ..() - if(istype(H)) - H.handle_footsteps() - H.step_count++ - -/mob/living/carbon/human/proc/has_footsteps() - if(species.silent_steps || buckled || lying || throwing) - return //people flying, lying down or sitting do not step - - if(shoes && (shoes.item_flags & ITEM_FLAG_SILENT)) - return // quiet shoes - - if(!has_organ(BP_L_FOOT) && !has_organ(BP_R_FOOT)) - return //no feet no footsteps - - return TRUE - -/mob/living/carbon/human/proc/handle_footsteps() - if(!has_footsteps()) - return - - //every other turf makes a sound - if((step_count % 2) && MOVING_QUICKLY(src)) - return - - // don't need to step as often when you hop around - if((step_count % 3) && !has_gravity(src)) - return - - if(istype(move_intent, /decl/move_intent/creep)) //We don't make sounds if we're tiptoeing - return - - var/turf/simulated/T = get_turf(src) - if(istype(T)) - var/footsound = T.get_footstep_sound(src) - if(footsound) - var/range = -(world.view - 2) - var/volume = 70 - if(MOVING_DELIBERATELY(src)) - volume -= 45 - range -= 0.333 - if(!shoes) - volume -= 60 - range -= 0.333 - playsound(T, footsound, volume, 1, range) diff --git a/code/game/turfs/simulated/turf_ocean.dm b/code/game/turfs/simulated/turf_ocean.dm deleted file mode 100644 index d841c301a3022..0000000000000 --- a/code/game/turfs/simulated/turf_ocean.dm +++ /dev/null @@ -1,38 +0,0 @@ -/turf/simulated/ocean - name = "sea floor" - desc = "Silty." - icon = 'icons/turf/seafloor.dmi' - icon_state = "seafloor" - density = FALSE - opacity = FALSE - flooded = TRUE - var/detail_decal - -/turf/simulated/ocean/abyss - name = "abyssal silt" - desc = "Unfathomably silty." - icon_state = "mud_light" - -/turf/simulated/ocean/open - name = "open ocean" - icon_state = "still" - -/turf/simulated/ocean/open/add_decal() - return 0 - -/turf/simulated/ocean/is_plating() - return 1 - -/turf/simulated/ocean/proc/add_decal() - return prob(20) - -/turf/simulated/ocean/Initialize() - . = ..() - if(isnull(detail_decal) && add_decal()) - detail_decal = "asteroid[rand(0,9)]" - update_icon() - -/turf/simulated/ocean/on_update_icon(update_neighbors) - ..(update_neighbors) - if(detail_decal) - overlays += image(icon = 'icons/turf/mining_decals.dmi', icon_state = detail_decal) diff --git a/code/game/turfs/simulated/wall_attacks.dm b/code/game/turfs/simulated/wall_attacks.dm deleted file mode 100644 index f1dacc943ff02..0000000000000 --- a/code/game/turfs/simulated/wall_attacks.dm +++ /dev/null @@ -1,415 +0,0 @@ -//Interactions -/turf/simulated/wall/proc/toggle_open(var/mob/user) - - if(can_open == WALL_OPENING) - return - - SSradiation.resistance_cache.Remove(src) - - if(density) - can_open = WALL_OPENING - //flick("[material.icon_base]fwall_opening", src) - sleep(15) - set_density(0) - set_opacity(0) - blocks_air = ZONE_BLOCKED - update_icon() - update_air() - set_light(0) - src.blocks_air = 0 - set_opacity(0) - for(var/turf/simulated/turf in loc) - SSair.mark_for_update(turf) - else - can_open = WALL_OPENING - //flick("[material.icon_base]fwall_closing", src) - set_density(1) - set_opacity(1) - blocks_air = AIR_BLOCKED - update_icon() - update_air() - sleep(15) - set_light(0.4, 0.1, 1) - src.blocks_air = 1 - set_opacity(1) - for(var/turf/simulated/turf in loc) - SSair.mark_for_update(turf) - - can_open = WALL_CAN_OPEN - update_icon() - -/turf/simulated/wall/proc/update_air() - if(!SSair) - return - - for(var/turf/simulated/turf in loc) - update_thermal(turf) - SSair.mark_for_update(turf) - - -/turf/simulated/wall/proc/update_thermal(var/turf/simulated/source) - if(istype(source)) - if(density && opacity) - source.thermal_conductivity = WALL_HEAT_TRANSFER_COEFFICIENT - else - source.thermal_conductivity = initial(source.thermal_conductivity) - - - -/turf/simulated/wall/proc/fail_smash(var/mob/user) - to_chat(user, "You smash against \the [src]!") - damage_health(rand(25, 75), DAMAGE_BRUTE) - -/turf/simulated/wall/proc/success_smash(var/mob/user) - to_chat(user, "You smash through \the [src]!") - user.do_attack_animation(src) - kill_health() - -/turf/simulated/wall/proc/try_touch(var/mob/user, var/rotting) - - if(rotting) - if(reinf_material) - to_chat(user, "\The [reinf_material.display_name] feels porous and crumbly.") - else - to_chat(user, "\The [material.display_name] crumbles under your touch!") - kill_health() - return 1 - - if(!can_open) - to_chat(user, "You push \the [src], but nothing happens.") - playsound(src, hitsound, 25, 1) - else - toggle_open(user) - return 0 - - -/turf/simulated/wall/attack_hand(var/mob/user) - - radiate() - add_fingerprint(user) - user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN) - var/rotting = (locate(/obj/effect/overlay/wallrot) in src) - if (MUTATION_HULK in user.mutations) - if (rotting || !prob(material.hardness)) - success_smash(user) - else - fail_smash(user) - return 1 - - if(iscarbon(user)) - var/mob/living/carbon/M = user - switch(M.a_intent) - if(I_HELP) - return - if(I_DISARM, I_GRAB) - try_touch(M, rotting) - if(I_HURT) - var/obj/item/organ/external/organ_hand = M.organs_by_name[M.hand ? BP_L_HAND : BP_R_HAND] - if (!(organ_hand?.is_usable())) - to_chat(user, SPAN_WARNING("You can't use that hand.")) - return - if(rotting && !reinf_material) - M.visible_message(SPAN_DANGER("[M.name] punches \the [src] and it crumbles!"), SPAN_DANGER("You punch \the [src] and it crumbles!")) - kill_health() - playsound(src, pick(GLOB.punch_sound), 20) - if (MUTATION_FERAL in user.mutations) - M.visible_message(SPAN_DANGER("[M.name] slams into \the [src]!"), SPAN_DANGER("You slam into \the [src]!")) - playsound(src, pick(GLOB.punch_sound), 45) - damage_health(5, DAMAGE_BRUTE) - user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN*2) //Additional cooldown - attack_animation(user) - else - M.visible_message(SPAN_DANGER("[M.name] punches \the [src]!"), SPAN_DANGER("You punch \the [src]!")) - M.apply_damage(3, DAMAGE_BRUTE, M.hand ? BP_L_HAND : BP_R_HAND) - playsound(src, pick(GLOB.punch_sound), 40) - - else - try_touch(user, rotting) - -/turf/simulated/wall/attack_generic(var/mob/user, var/damage, var/attack_message, var/wallbreaker) - - radiate() - if(!istype(user)) - return - - user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN) - var/rotting = (locate(/obj/effect/overlay/wallrot) in src) - if(!damage || !wallbreaker) - try_touch(user, rotting) - return - - if(rotting) - return success_smash(user) - - if(reinf_material) - if(damage >= max(material.hardness,reinf_material.hardness)) - return success_smash(user) - else if(wallbreaker == 2 || damage >= material.hardness) - return success_smash(user) - return fail_smash(user) - -/turf/simulated/wall/attackby(var/obj/item/W, var/mob/user) - - var/area/A = get_area(src) - if (!A.can_modify_area()) - to_chat(user, SPAN_NOTICE("\The [src] deflects all attempts to interact with it!")) - return - - user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN) - - if(!construction_stage && try_graffiti(user, W)) - return - - if (!user.IsAdvancedToolUser()) - to_chat(user, "You don't have the dexterity to do this!") - return - - //get the user's location - if(!istype(user.loc, /turf)) return //can't do this stuff whilst inside objects and such - - if(W) - radiate() - if(is_hot(W)) - burn(is_hot(W)) - - if(locate(/obj/effect/overlay/wallrot) in src) - if(isWelder(W)) - var/obj/item/weldingtool/WT = W - if( WT.remove_fuel(0,user) ) - to_chat(user, "You burn away the fungi with \the [WT].") - playsound(src, 'sound/items/Welder.ogg', 10, 1) - for(var/obj/effect/overlay/wallrot/WR in src) - qdel(WR) - return - else if(!is_sharp(W) && W.force >= 10 || W.force >= 20) - to_chat(user, "\The [src] crumbles away under the force of your [W.name].") - kill_health() - return - - //THERMITE related stuff. Calls src.thermitemelt() which handles melting simulated walls and the relevant effects - if(thermite) - if(isWelder(W)) - var/obj/item/weldingtool/WT = W - if( WT.remove_fuel(0,user) ) - thermitemelt(user) - return - - else if(istype(W, /obj/item/gun/energy/plasmacutter)) - thermitemelt(user) - return - - else if( istype(W, /obj/item/melee/energy/blade) ) - var/obj/item/melee/energy/blade/EB = W - - EB.spark_system.start() - to_chat(user, "You slash \the [src] with \the [EB]; the thermite ignites!") - playsound(src, "sparks", 50, 1) - playsound(src, 'sound/weapons/blade1.ogg', 50, 1) - - thermitemelt(user) - return - - var/turf/T = user.loc //get user's location for delay checks - - var/damage = get_damage_value() - if(damage && istype(W, /obj/item/weldingtool)) - - var/obj/item/weldingtool/WT = W - - if(WT.remove_fuel(0,user)) - to_chat(user, "You start repairing the damage to [src].") - playsound(src, 'sound/items/Welder.ogg', 100, 1) - if(do_after(user, max(5, damage / 5), src, DO_PUBLIC_UNIQUE) && WT && WT.isOn()) - to_chat(user, "You finish repairing the damage to [src].") - restore_health(damage) - return - - // Basic dismantling. - if(isnull(construction_stage) || !reinf_material) - - var/cut_delay = 60 - material.cut_delay - var/dismantle_verb - var/dismantle_sound - - if(istype(W,/obj/item/weldingtool)) - var/obj/item/weldingtool/WT = W - if(!WT.remove_fuel(0,user)) - return - dismantle_verb = "cutting" - dismantle_sound = 'sound/items/Welder.ogg' - cut_delay *= 0.7 - else if(istype(W,/obj/item/melee/energy/blade) || istype(W,/obj/item/psychic_power/psiblade/master) || istype(W, /obj/item/gun/energy/plasmacutter)) - if(istype(W, /obj/item/gun/energy/plasmacutter)) - var/obj/item/gun/energy/plasmacutter/cutter = W - if(!cutter.slice(user)) - return - dismantle_sound = "sparks" - dismantle_verb = "slicing" - cut_delay *= 0.5 - else if(istype(W,/obj/item/pickaxe)) - var/obj/item/pickaxe/P = W - dismantle_verb = P.drill_verb - dismantle_sound = P.drill_sound - cut_delay -= P.digspeed - - if(dismantle_verb) - - to_chat(user, SPAN_NOTICE("You begin [dismantle_verb] through the outer plating.")) - if(dismantle_sound) - playsound(src, dismantle_sound, 100, 1) - - if(cut_delay < 0) - cut_delay = 0 - - if (do_after(user, cut_delay, src, DO_PUBLIC_UNIQUE)) - dismantle_wall() - user.visible_message(SPAN_WARNING("\The [src] was torn open by [user]!"), SPAN_NOTICE("You remove the outer plating.")) - return - else - return - - //Reinforced dismantling. - else - switch(construction_stage) - if(6) - - if(istype(W, /obj/item/psychic_power/psiblade/master/grand/paramount)) - - to_chat(user, "You sink \the [W] into the wall and begin trying to rip out the support frame...") - playsound(src, 'sound/items/Welder.ogg', 100, 1) - - if(!do_after(user, 6 SECONDS, src, DO_PUBLIC_UNIQUE)) - return - - to_chat(user, "You tear through the wall's support system and plating!") - kill_health() - user.visible_message("The wall was torn open by [user]!") - playsound(src, 'sound/items/Welder.ogg', 100, 1) - - else if(isWirecutter(W)) - - playsound(src, 'sound/items/Wirecutter.ogg', 100, 1) - construction_stage = 5 - new /obj/item/stack/material/rods( src ) - to_chat(user, "You cut the outer grille.") - update_icon() - return - if(5) - if(isScrewdriver(W)) - to_chat(user, "You begin removing the support lines.") - playsound(src, 'sound/items/Screwdriver.ogg', 100, 1) - if(!do_after(user, 4 SECONDS, src, DO_PUBLIC_UNIQUE) || construction_stage != 5) - return - construction_stage = 4 - update_icon() - to_chat(user, "You remove the support lines.") - return - else if( istype(W, /obj/item/stack/material/rods) ) - var/obj/item/stack/O = W - if(O.use(1)) - construction_stage = 6 - update_icon() - to_chat(user, "You replace the outer grille.") - return - if(4) - var/cut_cover - if(istype(W,/obj/item/weldingtool)) - var/obj/item/weldingtool/WT = W - if(WT.remove_fuel(0,user)) - cut_cover=1 - else - return - else if (istype(W, /obj/item/gun/energy/plasmacutter) || istype(W, /obj/item/psychic_power/psiblade/master)) - if(istype(W, /obj/item/gun/energy/plasmacutter)) - var/obj/item/gun/energy/plasmacutter/cutter = W - if(!cutter.slice(user)) - return - cut_cover = 1 - if(cut_cover) - to_chat(user, "You begin slicing through the metal cover.") - playsound(src, 'sound/items/Welder.ogg', 100, 1) - if(!do_after(user, 6 SECONDS, src, DO_PUBLIC_UNIQUE) || construction_stage != 4) - return - construction_stage = 3 - update_icon() - to_chat(user, "You press firmly on the cover, dislodging it.") - return - if(3) - if(isCrowbar(W)) - to_chat(user, "You struggle to pry off the cover.") - playsound(src, 'sound/items/Crowbar.ogg', 100, 1) - if(!do_after(user, 10 SECONDS, src, DO_PUBLIC_UNIQUE) || construction_stage != 3) - return - construction_stage = 2 - update_icon() - to_chat(user, "You pry off the cover.") - return - if(2) - if(isWrench(W)) - to_chat(user, "You start loosening the anchoring bolts which secure the support rods to their frame.") - playsound(src, 'sound/items/Ratchet.ogg', 100, 1) - if(!do_after(user, 4 SECONDS, src, DO_PUBLIC_UNIQUE) || construction_stage != 2) - return - construction_stage = 1 - update_icon() - to_chat(user, "You remove the bolts anchoring the support rods.") - return - if(1) - var/cut_cover - if(istype(W, /obj/item/weldingtool)) - var/obj/item/weldingtool/WT = W - if( WT.remove_fuel(0,user) ) - cut_cover=1 - else - return - else if(istype(W, /obj/item/gun/energy/plasmacutter) || istype(W,/obj/item/psychic_power/psiblade/master)) - if(istype(W, /obj/item/gun/energy/plasmacutter)) - var/obj/item/gun/energy/plasmacutter/cutter = W - if(!cutter.slice(user)) - return - cut_cover = 1 - if(cut_cover) - to_chat(user, "You begin slicing through the support rods.") - playsound(src, 'sound/items/Welder.ogg', 100, 1) - if(!do_after(user, 7 SECONDS, src, DO_PUBLIC_UNIQUE) || construction_stage != 1) - return - construction_stage = 0 - update_icon() - new /obj/item/stack/material/rods(src) - to_chat(user, "The support rods drop out as you cut them loose from the frame.") - return - if(0) - if(isCrowbar(W)) - to_chat(user, "You struggle to pry off the outer sheath.") - playsound(src, 'sound/items/Crowbar.ogg', 100, 1) - if(!do_after(user, 10 SECONDS, src, DO_PUBLIC_UNIQUE) || !W || !T ) return - if(user.loc == T && user.get_active_hand() == W ) - to_chat(user, "You pry off the outer sheath.") - dismantle_wall() - return - - if(istype(W,/obj/item/frame)) - var/obj/item/frame/F = W - F.try_build(src) - return - - else if(!istype(W,/obj/item/rcd) && !istype(W, /obj/item/reagent_containers)) - if(!W.force) - return attack_hand(user) - - if (!can_damage_health(W.force, W.damtype)) - playsound(src, hitsound, 25, 1) - user.visible_message( - SPAN_WARNING("\The [user] attacks \the [src] with \the [W], but it bounces off!"), - SPAN_WARNING("You attack \the [src] with \the [W], but it bounces off! You need something stronger."), - SPAN_WARNING("You hear the sound of something hitting a wall.") - ) - return - playsound(src, hitsound, 50, 1) - user.visible_message( - SPAN_DANGER("\The [user] attacks \the [src] with \the [W]!"), - SPAN_WARNING("You attack \the [src] with \the [W]!"), - SPAN_WARNING("You hear the sound of something hitting a wall.") - ) - damage_health(W.force, W.damtype) - return diff --git a/code/game/turfs/simulated/wall_icon.dm b/code/game/turfs/simulated/wall_icon.dm deleted file mode 100644 index 111b5378c27e9..0000000000000 --- a/code/game/turfs/simulated/wall_icon.dm +++ /dev/null @@ -1,164 +0,0 @@ -/turf/simulated/wall/proc/update_material() - - if(!material) - return - - if(reinf_material) - construction_stage = 6 - else - construction_stage = null - if(!material) - material = SSmaterials.get_material_by_name(DEFAULT_WALL_MATERIAL) - if(material) - explosion_resistance = material.explosion_resistance - if(reinf_material && reinf_material.explosion_resistance > explosion_resistance) - explosion_resistance = reinf_material.explosion_resistance - // Base material `explosion_resistance` is `5`, so a value of `5 `should result in a wall resist value of `1`. - set_damage_resistance(DAMAGE_EXPLODE, explosion_resistance ? 5 / explosion_resistance : 1) - - if(reinf_material) - SetName("reinforced [material.display_name] [material.wall_name]") - desc = "It seems to be a section of hull reinforced with [reinf_material.display_name] and plated with [material.display_name]." - else - SetName("[material.display_name] [material.wall_name]") - desc = "It seems to be a section of hull plated with [material.display_name]." - - set_opacity(material.opacity >= 0.5) - - SSradiation.resistance_cache.Remove(src) - update_connections(1) - update_icon() - calculate_damage_data() - - -/turf/simulated/wall/proc/set_material(var/material/newmaterial, var/material/newrmaterial) - material = newmaterial - reinf_material = newrmaterial - update_material() - -/turf/simulated/wall/on_update_icon() - - ..() - - if(!material) - return - - if(!damage_overlays[1]) //list hasn't been populated; note that it is always of fixed length, so we must check for membership. - generate_overlays() - - overlays.Cut() - - var/image/I - var/base_color = paint_color ? paint_color : material.icon_colour - if(!density) - I = image('icons/turf/wall_masks.dmi', "[material.icon_base]fwall_open") - I.color = base_color - overlays += I - return - - for(var/i = 1 to 4) - I = image('icons/turf/wall_masks.dmi', "[material.icon_base][wall_connections[i]]", dir = SHIFTL(1, i - 1)) - I.color = base_color - overlays += I - if(other_connections[i] != "0") - I = image('icons/turf/wall_masks.dmi', "[material.icon_base]_other[wall_connections[i]]", dir = SHIFTL(1, i - 1)) - I.color = base_color - overlays += I - - if(reinf_material) - var/reinf_color = paint_color ? paint_color : reinf_material.icon_colour - if(construction_stage != null && construction_stage < 6) - I = image('icons/turf/wall_masks.dmi', "reinf_construct-[construction_stage]") - I.color = reinf_color - overlays += I - else - if("[reinf_material.icon_reinf]0" in icon_states('icons/turf/wall_masks.dmi')) - // Directional icon - for(var/i = 1 to 4) - I = image('icons/turf/wall_masks.dmi', "[reinf_material.icon_reinf][wall_connections[i]]", dir = SHIFTL(1, i - 1)) - I.color = reinf_color - overlays += I - else - I = image('icons/turf/wall_masks.dmi', reinf_material.icon_reinf) - I.color = reinf_color - overlays += I - var/image/texture = material.get_wall_texture() - if(texture) - overlays += texture - if(stripe_color) - for(var/i = 1 to 4) - if(other_connections[i] != "0") - I = image('icons/turf/wall_masks.dmi', "stripe_other[wall_connections[i]]", dir = SHIFTL(1, i - 1)) - else - I = image('icons/turf/wall_masks.dmi', "stripe[wall_connections[i]]", dir = SHIFTL(1, i - 1)) - I.color = stripe_color - overlays += I - - if(get_damage_value() != 0) - var/overlay = round((get_damage_percentage() / 100) * damage_overlays.len) + 1 - if(overlay > damage_overlays.len) - overlay = damage_overlays.len - - overlays += damage_overlays[overlay] - return - -/turf/simulated/wall/proc/generate_overlays() - var/alpha_inc = 256 / damage_overlays.len - - for(var/i = 1; i <= damage_overlays.len; i++) - var/image/img = image(icon = 'icons/turf/walls.dmi', icon_state = "overlay_damage") - img.blend_mode = BLEND_MULTIPLY - img.alpha = (i * alpha_inc) - 1 - damage_overlays[i] = img - - -/turf/simulated/wall/proc/update_connections(propagate = 0) - if(!material) - return - var/list/wall_dirs = list() - var/list/other_dirs = list() - - for(var/turf/simulated/wall/W in orange(src, 1)) - switch(can_join_with(W)) - if(0) - continue - if(1) - wall_dirs += get_dir(src, W) - if(2) - wall_dirs += get_dir(src, W) - other_dirs += get_dir(src, W) - if(propagate) - W.update_connections() - W.update_icon() - - for(var/turf/T in orange(src, 1)) - var/success = 0 - for(var/obj/O in T) - for(var/b_type in blend_objects) - if(istype(O, b_type)) - success = 1 - for(var/nb_type in noblend_objects) - if(istype(O, nb_type)) - success = 0 - if(success) - break - if(success) - break - - if(success) - wall_dirs += get_dir(src, T) - if(get_dir(src, T) in GLOB.cardinal) - other_dirs += get_dir(src, T) - - wall_connections = dirs_to_corner_states(wall_dirs) - other_connections = dirs_to_corner_states(other_dirs) - -/turf/simulated/wall/proc/can_join_with(var/turf/simulated/wall/W) - if(material && W.material && material.icon_base == W.material.icon_base) - if((reinf_material && W.reinf_material) || (!reinf_material && !W.reinf_material)) - return 1 - return 2 - for(var/wb_type in blend_turfs) - if(istype(W, wb_type)) - return 2 - return 0 diff --git a/code/game/turfs/simulated/wall_shuttle.dm b/code/game/turfs/simulated/wall_shuttle.dm deleted file mode 100644 index f52876b1246bf..0000000000000 --- a/code/game/turfs/simulated/wall_shuttle.dm +++ /dev/null @@ -1,75 +0,0 @@ -/turf/simulated/shuttle - name = "shuttle" - icon = 'icons/turf/shuttle.dmi' - thermal_conductivity = 0.05 - heat_capacity = 0 - -/turf/simulated/shuttle/wall - name = "wall" - icon_state = "wall1" - opacity = 1 - density = TRUE - blocks_air = 1 - -/turf/simulated/shuttle/wall/corner - var/corner_overlay_state = "diagonalWall" - var/image/corner_overlay - -/turf/simulated/shuttle/wall/corner/New() - ..() - reset_base_appearance() - reset_overlay() - -//Grabs the base turf type from our area and copies its appearance -/turf/simulated/shuttle/wall/corner/proc/reset_base_appearance() - var/turf/base_type = get_base_turf_by_area(src) - if(!base_type) return - - icon = initial(base_type.icon) - icon_state = initial(base_type.icon_state) - -/turf/simulated/shuttle/wall/corner/proc/reset_overlay() - if(corner_overlay) - overlays -= corner_overlay - else - corner_overlay = image(icon = 'icons/turf/shuttle.dmi', icon_state = corner_overlay_state, dir = src.dir) - corner_overlay.plane = plane - corner_overlay.layer = layer - overlays += corner_overlay - -//Predefined Shuttle Corners -/turf/simulated/shuttle/wall/corner/smoothwhite - icon_state = "corner_white" //for mapping preview - corner_overlay_state = "corner_white" -/turf/simulated/shuttle/wall/corner/smoothwhite/ne - dir = NORTH|EAST -/turf/simulated/shuttle/wall/corner/smoothwhite/nw - dir = NORTH|WEST -/turf/simulated/shuttle/wall/corner/smoothwhite/se - dir = SOUTH|EAST -/turf/simulated/shuttle/wall/corner/smoothwhite/sw - dir = SOUTH|WEST - -/turf/simulated/shuttle/wall/corner/blockwhite - icon_state = "corner_white_block" - corner_overlay_state = "corner_white_block" -/turf/simulated/shuttle/wall/corner/blockwhite/ne - dir = NORTH|EAST -/turf/simulated/shuttle/wall/corner/blockwhite/nw - dir = NORTH|WEST -/turf/simulated/shuttle/wall/corner/blockwhite/se - dir = SOUTH|EAST -/turf/simulated/shuttle/wall/corner/blockwhite/sw - dir = SOUTH|WEST - -/turf/simulated/shuttle/wall/corner/dark - icon_state = "corner_dark" - corner_overlay_state = "corner_dark" -/turf/simulated/shuttle/wall/corner/dark/ne - dir = NORTH|EAST -/turf/simulated/shuttle/wall/corner/dark/nw - dir = NORTH|WEST -/turf/simulated/shuttle/wall/corner/dark/se - dir = SOUTH|EAST -/turf/simulated/shuttle/wall/corner/dark/sw - dir = SOUTH|WEST diff --git a/code/game/turfs/simulated/wall_types.dm b/code/game/turfs/simulated/wall_types.dm deleted file mode 100644 index 08d93e143f887..0000000000000 --- a/code/game/turfs/simulated/wall_types.dm +++ /dev/null @@ -1,183 +0,0 @@ -//Commonly used -/turf/simulated/wall/prepainted - paint_color = COLOR_GUNMETAL - -/turf/simulated/wall/r_wall/prepainted - paint_color = COLOR_GUNMETAL - -/turf/simulated/wall/r_wall - icon_state = "r_generic" - -/turf/simulated/wall/r_wall/New(var/newloc) - ..(newloc, MATERIAL_STEEL,MATERIAL_PLASTEEL) //3strong - -/turf/simulated/wall/r_wall/hull - name = "hull" - color = COLOR_SOL - -/turf/simulated/wall/r_wall/hull/vox - initial_gas = list("nitrogen" = 101.38) - color = COLOR_GREEN_GRAY - -/turf/simulated/wall/prepainted - paint_color = COLOR_WALL_GUNMETAL -/turf/simulated/wall/r_wall/prepainted - paint_color = COLOR_WALL_GUNMETAL - -/turf/simulated/wall/r_wall/hull/Initialize() - . = ..() - paint_color = color - color = null //color is just for mapping - if(prob(40)) - var/spacefacing = FALSE - for(var/direction in GLOB.cardinal) - var/turf/T = get_step(src, direction) - var/area/A = get_area(T) - if(A && (A.area_flags & AREA_FLAG_EXTERNAL)) - spacefacing = TRUE - break - if(spacefacing) - var/bleach_factor = rand(10,50) - paint_color = adjust_brightness(paint_color, bleach_factor) - update_icon() - -/turf/simulated/wall/titanium - icon_state = "titanium" - -/turf/simulated/wall/titanium/New(var/newloc) - ..(newloc,MATERIAL_TITANIUM) - -/turf/simulated/wall/r_titanium - icon_state = "r_titanium" - -/turf/simulated/wall/r_titanium/New(var/newloc) - ..(newloc, MATERIAL_TITANIUM,MATERIAL_TITANIUM) - -/turf/simulated/wall/ocp_wall - icon_state = "r_ocp" - -/turf/simulated/wall/ocp_wall/New(var/newloc) - ..(newloc, MATERIAL_OSMIUM_CARBIDE_PLASTEEL, MATERIAL_OSMIUM_CARBIDE_PLASTEEL) - -//Material walls - -/turf/simulated/wall/r_wall/rglass_wall/New(var/newloc) - ..(newloc, MATERIAL_GLASS, MATERIAL_STEEL) - icon_state = "r_generic" - -/turf/simulated/wall/iron/New(var/newloc) - ..(newloc,MATERIAL_IRON) - -/turf/simulated/wall/uranium/New(var/newloc) - ..(newloc,MATERIAL_URANIUM) - -/turf/simulated/wall/diamond/New(var/newloc) - ..(newloc,MATERIAL_DIAMOND) - -/turf/simulated/wall/gold/New(var/newloc) - ..(newloc,MATERIAL_GOLD) - -/turf/simulated/wall/silver/New(var/newloc) - ..(newloc,MATERIAL_SILVER) - -/turf/simulated/wall/phoron/New(var/newloc) - ..(newloc,MATERIAL_PHORON) - -/turf/simulated/wall/sandstone/New(var/newloc) - ..(newloc,MATERIAL_SANDSTONE) - -/turf/simulated/wall/rutile/New(var/newloc) - ..(newloc,MATERIAL_RUTILE) - -/turf/simulated/wall/wood - blend_turfs = list(/turf/simulated/wall/cult, /turf/simulated/wall) - icon_state = "woodneric" - -/turf/simulated/wall/wood/New(var/newloc) - ..(newloc,MATERIAL_WOOD) - -/turf/simulated/wall/mahogany - blend_turfs = list(/turf/simulated/wall/cult, /turf/simulated/wall) - icon_state = "woodneric" - -/turf/simulated/wall/mahogany/New(var/newloc) - ..(newloc,MATERIAL_MAHOGANY) - -/turf/simulated/wall/maple - blend_turfs = list(/turf/simulated/wall/cult, /turf/simulated/wall) - icon_state = "woodneric" - -/turf/simulated/wall/maple/New(var/newloc) - ..(newloc,MATERIAL_MAPLE) - -/turf/simulated/wall/ebony - blend_turfs = list(/turf/simulated/wall/cult, /turf/simulated/wall) - icon_state = "woodneric" - -/turf/simulated/wall/ebony/New(var/newloc) - ..(newloc,MATERIAL_EBONY) - -/turf/simulated/wall/walnut - blend_turfs = list(/turf/simulated/wall/cult, /turf/simulated/wall) - icon_state = "woodneric" - -/turf/simulated/wall/walnut/New(var/newloc) - ..(newloc,MATERIAL_WALNUT) - -/turf/simulated/wall/ironphoron/New(var/newloc) - ..(newloc,MATERIAL_IRON,MATERIAL_PHORON) - -/turf/simulated/wall/golddiamond/New(var/newloc) - ..(newloc,MATERIAL_GOLD,MATERIAL_DIAMOND) - -/turf/simulated/wall/silvergold/New(var/newloc) - ..(newloc,MATERIAL_SILVER,MATERIAL_GOLD) - -/turf/simulated/wall/sandstonediamond/New(var/newloc) - ..(newloc,MATERIAL_SANDSTONE,MATERIAL_DIAMOND) - -/turf/simulated/wall/crystal/New(var/newloc) - ..(newloc,MATERIAL_CRYSTAL) - -/turf/simulated/wall/voxshuttle/New(var/newloc) - ..(newloc, MATERIAL_VOX) - -/turf/simulated/wall/voxshuttle/attackby() - return - -/turf/simulated/wall/growth/New(var/newloc) - ..(newloc, MATERIAL_GROWTH) - -/turf/simulated/wall/concrete/New(var/newloc) - ..(newloc,MATERIAL_CONCRETE) - -//Alien metal walls -/turf/simulated/wall/alium - icon_state = "jaggy" - floor_type = /turf/simulated/floor/fixed/alium - blend_objects = newlist() - -/turf/simulated/wall/alium/New(var/newloc) - ..(newloc,MATERIAL_ALIENALLOY) - -//Cult wall -/turf/simulated/wall/cult - icon_state = "cult" - blend_turfs = list(/turf/simulated/wall) - -/turf/simulated/wall/cult/New(var/newloc, var/reinforce = 0) - ..(newloc, MATERIAL_CULT, reinforce ? MATERIAL_REINFORCED_CULT : null) - -/turf/simulated/wall/cult/reinf/New(var/newloc) - ..(newloc, 1) - -/turf/simulated/wall/cult/dismantle_wall() - GLOB.cult.remove_cultiness(CULTINESS_PER_TURF) - ..() - -/turf/simulated/wall/cult/can_join_with(var/turf/simulated/wall/W) - if(material && W.material && material.icon_base == W.material.icon_base) - return 1 - else if(istype(W, /turf/simulated/wall)) - return 1 - return 0 diff --git a/code/game/turfs/simulated/walls.dm b/code/game/turfs/simulated/walls.dm deleted file mode 100644 index 8df5ac8210c1b..0000000000000 --- a/code/game/turfs/simulated/walls.dm +++ /dev/null @@ -1,287 +0,0 @@ -/turf/simulated/wall - name = "wall" - desc = "A huge chunk of metal used to separate rooms." - icon = 'icons/turf/wall_masks.dmi' - icon_state = "generic" - opacity = 1 - density = TRUE - blocks_air = 1 - thermal_conductivity = WALL_HEAT_TRANSFER_COEFFICIENT - heat_capacity = 312500 //a little over 5 cm thick , 312500 for 1 m by 2.5 m by 0.25 m plasteel wall - atom_flags = ATOM_FLAG_CAN_BE_PAINTED - - var/damage_overlay = 0 - var/static/damage_overlays[16] - var/active - var/can_open = 0 - var/material/material - var/material/reinf_material - var/last_state - var/construction_stage - var/hitsound = 'sound/weapons/Genhit.ogg' - var/list/wall_connections = list("0", "0", "0", "0") - var/list/other_connections = list("0", "0", "0", "0") - var/floor_type = /turf/simulated/floor/plating //turf it leaves after destruction - var/paint_color - var/stripe_color - var/static/list/wall_stripe_cache = list() - var/list/blend_turfs = list(/turf/simulated/wall/cult, /turf/simulated/wall/wood, /turf/simulated/wall/walnut, /turf/simulated/wall/maple, /turf/simulated/wall/mahogany, /turf/simulated/wall/ebony) - var/list/blend_objects = list(/obj/machinery/door, /obj/structure/wall_frame, /obj/structure/grille, /obj/structure/window/reinforced/full, /obj/structure/window/reinforced/polarized/full, /obj/structure/window/shuttle, ,/obj/structure/window/phoronbasic/full, /obj/structure/window/phoronreinforced/full) // Objects which to blend with - var/list/noblend_objects = list(/obj/machinery/door/window) //Objects to avoid blending with (such as children of listed blend objects.) - -/turf/simulated/wall/New(var/newloc, var/materialtype, var/rmaterialtype) - ..(newloc) - icon_state = "blank" - if(!materialtype) - materialtype = DEFAULT_WALL_MATERIAL - material = SSmaterials.get_material_by_name(materialtype) - if(!isnull(rmaterialtype)) - reinf_material = SSmaterials.get_material_by_name(rmaterialtype) - update_material() - hitsound = material.hitsound - -/turf/simulated/wall/Initialize() - set_extension(src, /datum/extension/penetration/proc_call, .proc/CheckPenetration) - START_PROCESSING(SSturf, src) //Used for radiation. - . = ..() - -/turf/simulated/wall/Destroy() - STOP_PROCESSING(SSturf, src) - . = ..() - -// Walls always hide the stuff below them. -/turf/simulated/wall/levelupdate() - for(var/obj/O in src) - O.hide(1) - -/turf/simulated/wall/protects_atom(var/atom/A) - var/obj/O = A - return (istype(O) && O.hides_under_flooring()) || ..() - -/turf/simulated/wall/Process(wait, times_fired) - var/how_often = max(round(2 SECONDS/wait), 1) - if(times_fired % how_often) - return //We only work about every 2 seconds - if(!radiate()) - return PROCESS_KILL - -/turf/simulated/wall/proc/get_material() - return material - -/turf/simulated/wall/proc/calculate_damage_data() - // Health - var/max_health = material.integrity - if (reinf_material) - max_health += round(reinf_material.integrity / 2) - set_max_health(max_health) - - // Minimum force required to damage the wall - health_min_damage = material.hardness * 1.5 - if (reinf_material) - health_min_damage += round(reinf_material.hardness * 1.5) - health_min_damage = round(health_min_damage / 10) - - // Brute and burn armor - var/brute_armor = material.brute_armor * 0.2 - var/burn_armor = material.burn_armor * 0.2 - if (reinf_material) - brute_armor += reinf_material.brute_armor * 0.2 - burn_armor += reinf_material.burn_armor * 0.2 - // Materials enter armor as divisors, health system uses multipliers - if (brute_armor) - brute_armor = round(1 / brute_armor, 0.01) - if (burn_armor) - burn_armor = round(1 / burn_armor, 0.01) - set_damage_resistance(DAMAGE_BRUTE, brute_armor) - set_damage_resistance(DAMAGE_BURN, burn_armor) - -/turf/simulated/wall/bullet_act(var/obj/item/projectile/Proj) - if(istype(Proj,/obj/item/projectile/beam)) - burn(2500) - else if(istype(Proj,/obj/item/projectile/ion)) - burn(500) - - if(Proj.ricochet_sounds && prob(15)) - playsound(src, pick(Proj.ricochet_sounds), 100, 1) - - ..() - -/turf/simulated/wall/hitby(AM as mob|obj, var/datum/thrownthing/TT) - if(!ismob(AM)) - var/obj/O = AM - var/tforce = O.throwforce * (TT.speed/THROWFORCE_SPEED_DIVISOR) - playsound(src, hitsound, tforce >= 15? 60 : 25, TRUE) - if (can_damage_health(tforce, O.damtype)) - damage_health(tforce, O.damtype) - ..() - -/turf/simulated/wall/proc/clear_plants() - for(var/obj/effect/overlay/wallrot/WR in src) - qdel(WR) - for(var/obj/effect/vine/plant in range(src, 1)) - if(!plant.floor) //shrooms drop to the floor - plant.floor = 1 - plant.update_icon() - plant.pixel_x = 0 - plant.pixel_y = 0 - -/turf/simulated/wall/ChangeTurf(var/newtype, tell_universe = TRUE, force_lighting_update = FALSE, keep_air = FALSE) - clear_plants() - . = ..(newtype, tell_universe, force_lighting_update, keep_air) - var/turf/new_turf = . - for (var/turf/simulated/wall/W in RANGE_TURFS(new_turf, 1)) - if (W == src) - continue - W.update_connections() - W.queue_icon_update() - -//Appearance -/turf/simulated/wall/examine(mob/user) - . = ..() - - if(paint_color) - to_chat(user, "It has a coat of paint applied.") - if(locate(/obj/effect/overlay/wallrot) in src) - to_chat(user, "There is fungus growing on [src].") - -//Damage - -/turf/simulated/wall/melt() - - if(!can_melt()) - return - - src.ChangeTurf(/turf/simulated/floor/plating) - - var/turf/simulated/floor/F = src - if(!F) - return - F.burn_tile() - F.icon_state = "wall_thermite" - visible_message("\The [src] spontaneously combusts!.") //!!OH SHIT!! - return - -/turf/simulated/wall/can_damage_health(damage, damage_type) - var/area/A = get_area(src) - if (!A.can_modify_area()) - return FALSE - return ..() - -/turf/simulated/wall/get_max_health() - . = ..() - if (locate(/obj/effect/overlay/wallrot) in src) - . = round(. / 10) - -/turf/simulated/wall/post_health_change(damage, damage_type) - ..() - update_icon() - -/turf/simulated/wall/on_death() - dismantle_wall(TRUE) - -/turf/simulated/wall/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume)//Doesn't fucking work because walls don't interact with air - burn(exposed_temperature) - -/turf/simulated/wall/adjacent_fire_act(turf/simulated/floor/adj_turf, datum/gas_mixture/adj_air, adj_temp, adj_volume) - burn(adj_temp) - if(adj_temp > material.melting_point) - damage_health(log(Frand(0.9, 1.1) * (adj_temp - material.melting_point)), DAMAGE_BURN) - - return ..() - -/turf/simulated/wall/proc/dismantle_wall(devastated, no_product) - - playsound(src, 'sound/items/Welder.ogg', 100, 1) - if(!no_product) - if(reinf_material) - reinf_material.place_dismantled_girder(src, reinf_material) - else - material.place_dismantled_girder(src) - material.place_dismantled_product(src,devastated) - - for(var/obj/O in src.contents) //Eject contents! - if(istype(O,/obj/structure/sign/poster)) - var/obj/structure/sign/poster/P = O - P.roll_and_drop(src) - else - O.forceMove(src) - - clear_plants() - material = SSmaterials.get_material_by_name("placeholder") - reinf_material = null - update_connections(1) - - ChangeTurf(floor_type) - -// Wall-rot effect, a nasty fungus that destroys walls. -/turf/simulated/wall/proc/rot() - if(locate(/obj/effect/overlay/wallrot) in src) - return - var/number_rots = rand(2,3) - for(var/i=0, iThe thermite starts melting through the wall.") - - spawn(100) - if(O) - qdel(O) -// F.sd_LumReset() //TODO: ~Carn - return - -/turf/simulated/wall/proc/radiate() - var/total_radiation = material.radioactivity + (reinf_material ? reinf_material.radioactivity / 2 : 0) - if(!total_radiation) - return - - SSradiation.radiate(src, total_radiation) - return total_radiation - -/turf/simulated/wall/proc/burn(temperature) - if(material.combustion_effect(src, temperature, 0.7)) - spawn(2) - new /obj/structure/girder(src) - src.ChangeTurf(/turf/simulated/floor) - for(var/turf/simulated/wall/W in range(3,src)) - W.burn((temperature/4)) - for(var/obj/machinery/door/airlock/phoron/D in range(3,src)) - D.ignite(temperature/4) - -/turf/simulated/wall/get_color() - return paint_color - -/turf/simulated/wall/set_color(var/color) - paint_color = color - update_icon() - -/turf/simulated/wall/proc/CheckPenetration(var/base_chance, var/damage) - return round(damage / get_max_health() * 180) - -/turf/simulated/wall/can_engrave() - return (material && material.hardness >= 10 && material.hardness <= 100) - -/turf/simulated/wall/is_wall() - return TRUE diff --git a/code/game/turfs/space/space.dm b/code/game/turfs/space/space.dm deleted file mode 100644 index a2c35c5474610..0000000000000 --- a/code/game/turfs/space/space.dm +++ /dev/null @@ -1,118 +0,0 @@ -/turf/space - plane = SPACE_PLANE - icon = 'icons/turf/space.dmi' - - name = "\proper space" - icon_state = "default" - dynamic_lighting = 0 - temperature = T20C - thermal_conductivity = OPEN_HEAT_TRANSFER_COEFFICIENT - permit_ao = FALSE - turf_flags = TURF_DISALLOW_BLOB - - z_eventually_space = TRUE - -/turf/space/Initialize() - . = ..() - update_starlight() - - appearance = SSskybox.space_appearance_cache[(((x + y) ^ ~(x * y) + z) % 25) + 1] - - if(!HasBelow(z)) - return - var/turf/below = GetBelow(src) - - if(istype(below, /turf/space)) - return - var/area/A = below.loc - - if(!below.density && (A.area_flags & AREA_FLAG_EXTERNAL)) - return - - return INITIALIZE_HINT_LATELOAD // oh no! we need to switch to being a different kind of turf! - -/turf/space/Destroy() - // Cleanup cached z_eventually_space values above us. - if (above) - var/turf/T = src - while ((T = GetAbove(T))) - T.z_eventually_space = FALSE - return ..() - -/turf/space/LateInitialize() - if(GLOB.using_map.base_floor_area) - var/area/new_area = locate(GLOB.using_map.base_floor_area) || new GLOB.using_map.base_floor_area - ChangeArea(src, new_area) - ChangeTurf(GLOB.using_map.base_floor_type) - -// override for space turfs, since they should never hide anything -/turf/space/levelupdate() - for(var/obj/O in src) - O.hide(0) - -/turf/space/is_solid_structure() - return locate(/obj/structure/lattice, src) || locate(/obj/structure/catwalk, src) //counts as solid structure if it has a lattice or catwalk - -/turf/space/proc/update_starlight() - if(!config.starlight) - return - if(locate(/turf/simulated) in orange(src,1)) //Let's make sure not to break everything if people use a crazy setting. - set_light(min(0.1*config.starlight, 1), 1, 3, l_color = SSskybox.background_color) - else - set_light(0) - -/turf/space/attackby(obj/item/C as obj, mob/user as mob) - - if (istype(C, /obj/item/stack/material/rods)) - var/obj/structure/lattice/L = locate(/obj/structure/lattice, src) - if(L) - return L.attackby(C, user) - var/obj/item/stack/material/rods/R = C - if (R.use(1)) - to_chat(user, SPAN_NOTICE("You lay down the support lattice.")) - playsound(src, 'sound/weapons/Genhit.ogg', 50, 1) - ReplaceWithLattice(R.material.name) - return - - if (istype(C, /obj/item/stack/tile)) - var/obj/structure/lattice/L = locate(/obj/structure/lattice, src) - if(L) - var/obj/item/stack/tile/floor/S = C - if (!S.use(1)) - return - qdel(L) - playsound(src, 'sound/weapons/Genhit.ogg', 50, 1) - ChangeTurf(/turf/simulated/floor/plating, keep_air = TRUE) - return - else - to_chat(user, SPAN_WARNING("The plating is going to need some support.")) - - //Checking if the user attacked with a cable coil - if(isCoil(C)) - var/obj/item/stack/cable_coil/coil = C - var/obj/structure/lattice/L = locate(/obj/structure/lattice, src) - if(L) - coil.turf_place(src, user) - return - else - to_chat(user, SPAN_WARNING("The cable needs something to be secured to.")) - return - - return - - -// Ported from unstable r355 - -/turf/space/Entered(atom/movable/A as mob|obj) - ..() - if(A && A.loc == src) - if (A.x <= TRANSITIONEDGE || A.x >= (world.maxx - TRANSITIONEDGE + 1) || A.y <= TRANSITIONEDGE || A.y >= (world.maxy - TRANSITIONEDGE + 1)) - A.touch_map_edge() - -/turf/space/is_open() - return TRUE - -//Bluespace turfs for shuttles and possible future transit use -/turf/space/bluespace - name = "bluespace" - icon_state = "bluespace" diff --git a/code/game/turfs/space/transit.dm b/code/game/turfs/space/transit.dm deleted file mode 100644 index 73c3327eb1fba..0000000000000 --- a/code/game/turfs/space/transit.dm +++ /dev/null @@ -1,48 +0,0 @@ -/turf/space/transit - var/pushdirection // push things that get caught in the transit tile this direction - -//Overwrite because we dont want people building rods in space. -/turf/space/transit/attackby(obj/O as obj, mob/user as mob) - return - -//generates a list used to randomize transit animations so they aren't in lockstep -/turf/space/transit/proc/get_cross_shift_list(var/size) - var/list/result = list() - - result += rand(0, 14) - for(var/i in 2 to size) - var/shifts = list(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14) - shifts -= result[i - 1] //consecutive shifts should not be equal - if(i == size) - shifts -= result[1] //because shift list is a ring buffer - result += pick(shifts) - - return result - -/turf/space/transit/north // moving to the north - pushdirection = SOUTH // south because the space tile is scrolling south - var/static/list/phase_shift_by_x - -/turf/space/transit/north/Initialize() - . = ..() - if(!phase_shift_by_x) - phase_shift_by_x = get_cross_shift_list(15) - - var/x_shift = phase_shift_by_x[src.x % (phase_shift_by_x.len - 1) + 1] - var/transit_state = (world.maxy - src.y + x_shift)%15 + 1 - - icon_state = "speedspace_ns_[transit_state]" - -/turf/space/transit/east // moving to the east - pushdirection = WEST - var/static/list/phase_shift_by_y - -/turf/space/transit/east/New() - ..() - if(!phase_shift_by_y) - phase_shift_by_y = get_cross_shift_list(15) - - var/y_shift = phase_shift_by_y[src.y % (phase_shift_by_y.len - 1) + 1] - var/transit_state = (world.maxx - src.x + y_shift)%15 + 1 - - icon_state = "speedspace_ew_[transit_state]" diff --git a/code/game/turfs/turf.dm b/code/game/turfs/turf.dm deleted file mode 100644 index 5568472fd156b..0000000000000 --- a/code/game/turfs/turf.dm +++ /dev/null @@ -1,449 +0,0 @@ -/turf - icon = 'icons/turf/floors.dmi' - level = 1 - - layer = TURF_LAYER - - var/turf_flags - - var/holy = 0 - - // Initial air contents (in moles) - var/list/initial_gas - - //Properties for airtight tiles (/wall) - var/thermal_conductivity = 0.05 - var/heat_capacity = 1 - - //Properties for both - var/blocks_air = 0 // Does this turf contain air/let air through? - - // General properties. - var/icon_old = null - var/pathweight = 1 // How much does it cost to pathfind over this turf? - var/blessed = 0 // Has the turf been blessed? - - var/list/decals - - var/movement_delay - - var/fluid_can_pass - var/obj/effect/flood/flood_object - var/fluid_blocked_dirs = 0 - var/flooded // Whether or not this turf is absolutely flooded ie. a water source. - var/height = 0 // Determines if fluids can overflow onto next turf - var/footstep_type - - var/tmp/changing_turf - - /// List of 'dangerous' objs that the turf holds that can cause something bad to happen when stepped on, used for AI mobs. - var/list/dangerous_objects - - var/has_dense_atom - var/has_opaque_atom - - /// Reference to the turf fire on the turf - var/obj/effect/turf_fire/turf_fire - -/turf/Initialize(mapload, ...) - . = ..() - if(dynamic_lighting) - luminosity = 0 - else - luminosity = 1 - - RecalculateOpacity() - - if (mapload && permit_ao) - queue_ao() - - if (z_flags & ZM_MIMIC_BELOW) - setup_zmimic(mapload) - -/turf/on_update_icon() - update_flood_overlay() - queue_ao(FALSE) - -/turf/proc/update_flood_overlay() - if(is_flooded(absolute = TRUE)) - if(!flood_object) - flood_object = new(src) - else if(flood_object) - QDEL_NULL(flood_object) - -/turf/Destroy() - if (!changing_turf) - crash_with("Improper turf qdel. Do not qdel turfs directly.") - - changing_turf = FALSE - - remove_cleanables() - fluid_update() - REMOVE_ACTIVE_FLUID_SOURCE(src) - - if (ao_queued) - SSao.queue -= src - ao_queued = 0 - - if (z_flags & ZM_MIMIC_BELOW) - cleanup_zmimic() - - if (mimic_proxy) - QDEL_NULL(mimic_proxy) - - ..() - return QDEL_HINT_IWILLGC - -/turf/proc/is_solid_structure() - return 1 - -/turf/attack_hand(mob/user) - user.setClickCooldown(DEFAULT_QUICK_COOLDOWN) - - if(user.restrained()) - return 0 - if (user.pulling) - if(user.pulling.anchored || !isturf(user.pulling.loc)) - return 0 - if(user.pulling.loc != user.loc && get_dist(user, user.pulling) > 1) - return 0 - do_pull_click(user, src) - - .=handle_hand_interception(user) - if (!.) - return 1 - -/turf/proc/handle_hand_interception(var/mob/user) - var/datum/extension/turf_hand/THE - for (var/A in src) - var/datum/extension/turf_hand/TH = get_extension(A, /datum/extension/turf_hand) - if (istype(TH) && TH.priority > THE?.priority) //Only overwrite if the new one is higher. For matching values, its first come first served - THE = TH - - if (THE) - return THE.OnHandInterception(user) - -/turf/attack_robot(var/mob/user) - if(Adjacent(user)) - attack_hand(user) - -/turf/attackby(obj/item/W as obj, mob/user as mob) - if(istype(W, /obj/item/storage)) - var/obj/item/storage/S = W - if(S.use_to_pickup && S.collection_mode) - S.gather_all(src, user) - return ..() - -/turf/Enter(atom/movable/mover as mob|obj, atom/forget as mob|obj|turf|area) - - ..() - - if (!mover || !isturf(mover.loc) || isobserver(mover)) - return 1 - - //First, check objects to block exit that are not on the border - for(var/obj/obstacle in mover.loc) - if(!(obstacle.atom_flags & ATOM_FLAG_CHECKS_BORDER) && (mover != obstacle) && (forget != obstacle)) - if(!obstacle.CheckExit(mover, src)) - mover.Bump(obstacle, 1) - return 0 - - //Now, check objects to block exit that are on the border - for(var/obj/border_obstacle in mover.loc) - if((border_obstacle.atom_flags & ATOM_FLAG_CHECKS_BORDER) && (mover != border_obstacle) && (forget != border_obstacle)) - if(!border_obstacle.CheckExit(mover, src)) - mover.Bump(border_obstacle, 1) - return 0 - - //Next, check objects to block entry that are on the border - for(var/obj/border_obstacle in src) - if(border_obstacle.atom_flags & ATOM_FLAG_CHECKS_BORDER) - if(!border_obstacle.CanPass(mover, mover.loc, 1, 0) && (forget != border_obstacle)) - mover.Bump(border_obstacle, 1) - return 0 - - //Then, check the turf itself - if (!src.CanPass(mover, src)) - mover.Bump(src, 1) - return 0 - - //Finally, check objects/mobs to block entry that are not on the border - for(var/atom/movable/obstacle in src) - if(!(obstacle.atom_flags & ATOM_FLAG_CHECKS_BORDER)) - if(!obstacle.CanPass(mover, mover.loc, 1, 0) && (forget != obstacle)) - mover.Bump(obstacle, 1) - return 0 - return 1 //Nothing found to block so return success! - -var/global/const/enterloopsanity = 100 -/turf/Entered(var/atom/atom, var/atom/old_loc) - - ..() - - QUEUE_TEMPERATURE_ATOMS(atom) - - if(!istype(atom, /atom/movable)) - return - - var/atom/movable/A = atom - - if(ismob(A)) - var/mob/M = A - if(!M.check_solid_ground()) - inertial_drift(M) - //we'll end up checking solid ground again but we still need to check the other things. - //Ususally most people aren't in space anyways so hopefully this is acceptable. - M.update_floating() - else - M.inertia_dir = 0 - M.make_floating(0) //we know we're not on solid ground so skip the checks to save a bit of processing - - var/objects = 0 - if(A && (A.movable_flags & MOVABLE_FLAG_PROXMOVE)) - for(var/atom/movable/thing in range(1)) - if(objects > enterloopsanity) break - objects++ - spawn(0) - if(A) - A.HasProximity(thing, 1) - if ((thing && A) && (thing.movable_flags & MOVABLE_FLAG_PROXMOVE)) - thing.HasProximity(A, 1) - return - -/turf/proc/adjacent_fire_act(turf/simulated/floor/source, exposed_temperature, exposed_volume) - return - -/turf/proc/is_plating() - return 0 - -/turf/proc/protects_atom(var/atom/A) - return FALSE - -/turf/proc/inertial_drift(atom/movable/A) - if(!(A.last_move)) return - if((ismob(A) && src.x > 2 && src.x < (world.maxx - 1) && src.y > 2 && src.y < (world.maxy-1))) - var/mob/M = A - if(M.Allow_Spacemove(1)) //if this mob can control their own movement in space then they shouldn't be drifting - M.inertia_dir = 0 - return - spawn(5) - if(M && !(M.anchored) && !(M.pulledby) && (M.loc == src)) - if(!M.inertia_dir) - M.inertia_dir = M.last_move - step(M, M.inertia_dir) - return - -/turf/proc/levelupdate() - for(var/obj/O in src) - O.hide(O.hides_under_flooring() && !is_plating()) - -/turf/proc/AdjacentTurfs(var/check_blockage = TRUE) - . = list() - for(var/turf/t in (trange(1,src) - src)) - if(check_blockage) - if(!t.density) - if(!LinkBlocked(src, t) && !TurfBlockedNonWindow(t)) - . += t - else - . += t - -/turf/proc/CardinalTurfs(var/check_blockage = TRUE) - . = list() - for(var/ad in AdjacentTurfs(check_blockage)) - var/turf/T = ad - if(T.x == src.x || T.y == src.y) - . += T - -/turf/proc/Distance(turf/t) - if(get_dist(src,t) == 1) - var/cost = (src.x - t.x) * (src.x - t.x) + (src.y - t.y) * (src.y - t.y) - cost *= (pathweight+t.pathweight)/2 - return cost - else - return get_dist(src,t) - -/turf/proc/AdjacentTurfsSpace() - var/L[] = new() - for(var/turf/t in oview(src,1)) - if(!t.density) - if(!LinkBlocked(src, t) && !TurfBlockedNonWindow(t)) - L.Add(t) - return L - -/turf/proc/contains_dense_objects() - if(density) - return 1 - for(var/atom/A in src) - if(A.density && !(A.atom_flags & ATOM_FLAG_CHECKS_BORDER)) - return 1 - return 0 - -//expects an atom containing the reagents used to clean the turf -/turf/proc/clean(atom/source, mob/user = null, var/time = null, var/message = null) - if(source.reagents.has_reagent(/datum/reagent/water, 1) || source.reagents.has_reagent(/datum/reagent/space_cleaner, 1)) - if(user && time && !do_after(user, time, src, DO_DEFAULT | DO_USER_UNIQUE_ACT | DO_PUBLIC_PROGRESS)) - return - clean_blood() - remove_cleanables() - if(message) - to_chat(user, message) - else - to_chat(user, "\The [source] is too dry to wash that.") - source.reagents.trans_to_turf(src, 1, 10) //10 is the multiplier for the reaction effect. probably needed to wet the floor properly. - -/turf/proc/remove_cleanables() - for(var/obj/effect/O in src) - if(istype(O,/obj/effect/rune) || istype(O,/obj/effect/decal/cleanable)) - qdel(O) - -/turf/proc/update_blood_overlays() - return - -/turf/proc/remove_decals() - if(decals && decals.len) - decals.Cut() - decals = null - -// Called when turf is hit by a thrown object -/turf/hitby(atom/movable/AM as mob|obj, var/datum/thrownthing/TT) - if(src.density) - if(isliving(AM)) - var/mob/living/M = AM - M.turf_collision(src, TT.speed) - if(M.pinned.len) - return - - var/intial_dir = TT.init_dir - spawn(2) - step(AM, turn(intial_dir, 180)) - -/turf/proc/can_engrave() - return FALSE - -/turf/proc/try_graffiti(var/mob/vandal, var/obj/item/tool) - - if(!tool.sharp || !can_engrave() || vandal.a_intent != I_HELP) - return FALSE - - if(jobban_isbanned(vandal, "Graffiti")) - to_chat(vandal, SPAN_WARNING("You are banned from leaving persistent information across rounds.")) - return - - var/too_much_graffiti = 0 - for(var/obj/effect/decal/writing/W in src) - too_much_graffiti++ - if(too_much_graffiti >= 5) - to_chat(vandal, "There's too much graffiti here to add more.") - return FALSE - - var/message = sanitize(input("Enter a message to engrave.", "Graffiti") as null|text, trim = TRUE) - if(!message) - return FALSE - - if(!vandal || vandal.incapacitated() || !Adjacent(vandal) || !tool.loc == vandal) - return FALSE - - vandal.visible_message("\The [vandal] begins carving something into \the [src].") - - if(!do_after(vandal, max(20, length(message)), src, DO_PUBLIC_UNIQUE)) - return FALSE - - vandal.visible_message("\The [vandal] carves some graffiti into \the [src].") - var/obj/effect/decal/writing/graffiti = new(src) - graffiti.message = message - graffiti.author = vandal.ckey - vandal.update_personal_goal(/datum/goal/achievement/graffiti, TRUE) - - if(lowertext(message) == "elbereth") - to_chat(vandal, "You feel much safer.") - - return TRUE - -/turf/proc/is_wall() - return FALSE - -/turf/proc/is_open() - return FALSE - -/turf/proc/is_floor() - return FALSE - -/turf/proc/get_obstruction() - if (density) - LAZYADD(., src) - if (contents.len > 100 || contents.len <= !!lighting_overlay) - return // fuck it, too/not-enough much shit here - for (var/thing in src) - var/atom/movable/AM = thing - if (AM.simulated && AM.blocks_airlock()) - LAZYADD(., AM) - -/** - * Returns false if stepping into a tile would cause harm (e.g. open space while unable to fly, water tile while a slime, lava, etc). - */ -/turf/proc/is_safe_to_enter(mob/living/L) - if(LAZYLEN(dangerous_objects)) - for(var/obj/O in dangerous_objects) - if(!O.is_safe_to_step(L)) - return FALSE - return TRUE - -/** - * Tells the turf that it currently contains something that automated movement should consider if planning to enter the tile. - * This uses lazy list macros to reduce memory footprint since for 99% of turfs the list would've been empty anyway. - */ -/turf/proc/register_dangerous_object(obj/O) - if(!istype(O)) - return FALSE - LAZYADD(dangerous_objects, O) - -/** - * Similar to `register_dangerous_object()`, for when the dangerous object stops being dangerous/gets deleted/moved/etc. - */ -/turf/proc/unregister_dangerous_object(obj/O) - if(!istype(O)) - return FALSE - LAZYREMOVE(dangerous_objects, O) - UNSETEMPTY(dangerous_objects) // This nulls the list var if it's empty. - -/turf/proc/is_dense() - if (density) - return TRUE - if (isnull(has_dense_atom)) - has_dense_atom = FALSE - if (contains_dense_objects()) - has_dense_atom = TRUE - return has_dense_atom - -/turf/proc/is_opaque() - if (opacity) - return TRUE - if (isnull(has_opaque_atom)) - has_opaque_atom = FALSE - for (var/atom/A in contents) - if (A.opacity) - has_opaque_atom = TRUE - break - return has_opaque_atom - -/turf/Entered(atom/movable/AM) - . = ..() - if (istype(AM)) - if (AM.density) - has_dense_atom = TRUE - if (AM.opacity) - has_opaque_atom = TRUE - -/turf/Exited(atom/movable/AM, atom/newloc) - . = ..() - if (istype(AM)) - if(AM.density) - has_dense_atom = null - if (AM.opacity) - has_opaque_atom = null - else - has_dense_atom = null - has_opaque_atom = null - -/turf/proc/IgniteTurf(power, fire_colour) - return diff --git a/code/game/turfs/turf_ao.dm b/code/game/turfs/turf_ao.dm deleted file mode 100644 index dfe67d3b456ec..0000000000000 --- a/code/game/turfs/turf_ao.dm +++ /dev/null @@ -1,109 +0,0 @@ -#define AO_TURF_CHECK(T) (!T.density || !T.opacity || !T.permit_ao) -#define AO_SELF_CHECK(T) (!T.density && !T.opacity) - -/turf/var/permit_ao = TRUE -/// Current ambient occlusion overlays. Tracked so we can reverse them without dropping all priority overlays. -/turf/var/tmp/list/ao_overlays -/turf/var/tmp/ao_neighbors -/turf/var/tmp/list/ao_overlays_mimic -/turf/var/tmp/ao_neighbors_mimic -/turf/var/ao_queued = AO_UPDATE_NONE - -/turf/proc/regenerate_ao() - for (var/thing in RANGE_TURFS(src, 1)) - var/turf/T = thing - if (T.permit_ao) - T.queue_ao(TRUE) - -/turf/proc/calculate_ao_neighbors() - ao_neighbors = 0 - ao_neighbors_mimic = 0 - if (!permit_ao) - return - - var/turf/T - if (z_flags & ZM_MIMIC_BELOW) - CALCULATE_NEIGHBORS(src, ao_neighbors_mimic, T, (T.z_flags & ZM_MIMIC_BELOW)) - if (AO_SELF_CHECK(src) && !(z_flags & ZM_MIMIC_NO_AO)) - CALCULATE_NEIGHBORS(src, ao_neighbors, T, AO_TURF_CHECK(T)) - -/proc/make_ao_image(corner, i, px = 0, py = 0, pz = 0, pw = 0) - var/list/cache = SSao.cache - var/cstr = "[corner]" - var/key = "[cstr]-[i]-[px]/[py]/[pz]/[pw]" - - var/image/I = image('icons/turf/flooring/shadows.dmi', cstr, dir = SHIFTL(1, i - 1)) - I.alpha = WALL_AO_ALPHA - I.blend_mode = BLEND_OVERLAY - I.appearance_flags = DEFAULT_APPEARANCE_FLAGS | RESET_ALPHA|RESET_COLOR|TILE_BOUND - I.layer = AO_LAYER - // If there's an offset, counteract it. - if (px || py || pz || pw) - I.pixel_x = -px - I.pixel_y = -py - I.pixel_z = -pz - I.pixel_w = -pw - - . = cache[key] = I - -/turf/proc/queue_ao(rebuild = TRUE) - if (!ao_queued) - SSao.queue += src - - var/new_level = rebuild ? AO_UPDATE_REBUILD : AO_UPDATE_OVERLAY - if (ao_queued < new_level) - ao_queued = new_level - -#define PROCESS_AO_CORNER(AO_LIST, NEIGHBORS, CORNER_INDEX, CDIR) \ - corner = 0; \ - if (NEIGHBORS & SHIFTL(1, CDIR)) { \ - corner |= 2; \ - } \ - if (NEIGHBORS & SHIFTL(1, turn(CDIR, 45))) { \ - corner |= 1; \ - } \ - if (NEIGHBORS & SHIFTL(1, turn(CDIR, -45))) { \ - corner |= 4; \ - } \ - if (corner != 7) { /* 7 is the 'no shadows' state, no reason to add overlays for it. */ \ - var/image/I = cache["[corner]-[CORNER_INDEX]-[pixel_x]/[pixel_y]/[pixel_z]/[pixel_w]"]; \ - if (!I) { \ - I = make_ao_image(corner, CORNER_INDEX, pixel_x, pixel_y, pixel_z, pixel_w) /* this will also add the image to the cache. */ \ - } \ - LAZYADD(AO_LIST, I); \ - } - -#define CUT_AO(TARGET, AO_LIST) \ - if (TARGET && AO_LIST) { \ - TARGET.overlays -= AO_LIST; \ - AO_LIST.Cut(); \ - } - -#define REGEN_AO(TARGET, AO_LIST, NEIGHBORS) \ - if (permit_ao && TARGET && NEIGHBORS != AO_ALL_NEIGHBORS) { \ - var/corner;\ - PROCESS_AO_CORNER(AO_LIST, NEIGHBORS, 1, NORTHWEST); \ - PROCESS_AO_CORNER(AO_LIST, NEIGHBORS, 2, SOUTHEAST); \ - PROCESS_AO_CORNER(AO_LIST, NEIGHBORS, 3, NORTHEAST); \ - PROCESS_AO_CORNER(AO_LIST, NEIGHBORS, 4, SOUTHWEST); \ - } \ - UNSETEMPTY(AO_LIST); \ - if (AO_LIST) { \ - TARGET.overlays |= AO_LIST; \ - } - -/turf/proc/update_ao() - var/list/cache = SSao.cache - CUT_AO(shadower, ao_overlays_mimic) - CUT_AO(src, ao_overlays) - if (z_flags & ZM_MIMIC_BELOW) - REGEN_AO(shadower, ao_overlays_mimic, ao_neighbors_mimic) - if (AO_TURF_CHECK(src) && !(z_flags & ZM_MIMIC_NO_AO)) - REGEN_AO(src, ao_overlays, ao_neighbors) - - update_above() - -#undef REGEN_AO -#undef PROCESS_AO_CORNER -#undef AO_TURF_CHECK -#undef AO_SELF_CHECK diff --git a/code/game/turfs/turf_changing.dm b/code/game/turfs/turf_changing.dm deleted file mode 100644 index 12bfa9ad25f71..0000000000000 --- a/code/game/turfs/turf_changing.dm +++ /dev/null @@ -1,167 +0,0 @@ -/turf/proc/ReplaceWithLattice(var/material) - var base_turf = get_base_turf_by_area(src, TRUE) - if(type != base_turf) - src.ChangeTurf(get_base_turf_by_area(src, TRUE)) - if(!locate(/obj/structure/lattice) in src) - new /obj/structure/lattice(src, material) - -// Removes all signs of lattice on the pos of the turf -Donkieyo -/turf/proc/RemoveLattice() - var/obj/structure/lattice/L = locate(/obj/structure/lattice, src) - if(L) - qdel(L) -// Called after turf replaces old one -/turf/proc/post_change() - levelupdate() - if (above) - above.update_mimic() - -//Creates a new turf -/turf/proc/ChangeTurf(var/turf/N, var/tell_universe = TRUE, var/force_lighting_update = FALSE, var/keep_air = FALSE) - if (!N) - return - - if(isturf(N) && !N.flooded && N.flood_object) - QDEL_NULL(flood_object) - - // This makes sure that turfs are not changed to space when one side is part of a zone - if(N == /turf/space) - var/turf/below = GetBelow(src) - if(istype(below) && !istype(below,/turf/space)) - N = /turf/simulated/open - - var/old_density = density - var/old_air = air - var/old_hotspot = hotspot - var/old_turf_fire = null - var/old_opacity = opacity - var/old_dynamic_lighting = dynamic_lighting - var/old_affecting_lights = affecting_lights - var/old_lighting_overlay = lighting_overlay - var/old_corners = corners - var/old_ao_neighbors = ao_neighbors - var/old_above = above - var/old_permit_ao = permit_ao - - if(isspaceturf(N) || isopenspace(N)) - QDEL_NULL(turf_fire) - else - old_turf_fire = turf_fire - - //log_debug("Replacing [src.type] with [N]") - - changing_turf = TRUE - - if(connections) connections.erase_all() - - overlays.Cut() - underlays.Cut() - if(istype(src,/turf/simulated)) - //Yeah, we're just going to rebuild the whole thing. - //Despite this being called a bunch during explosions, - //the zone will only really do heavy lifting once. - var/turf/simulated/S = src - if(S.zone) S.zone.rebuild() - - // Run the Destroy() chain. - qdel(src) - - var/old_opaque_counter = opaque_counter - var/turf/simulated/W = new N(src) - - if (permit_ao) - regenerate_ao() - - W.opaque_counter = old_opaque_counter - W.RecalculateOpacity() - - if (keep_air) - W.air = old_air - - if(ispath(N, /turf/simulated)) - if(old_hotspot) - hotspot = old_hotspot - if (istype(W,/turf/simulated/floor)) - W.RemoveLattice() - else if(hotspot) - qdel(hotspot) - - - if(tell_universe) - GLOB.universe.OnTurfChange(W) - - SSair.mark_for_update(src) //handle the addition of the new turf. - - for(var/turf/space/S in range(W,1)) - S.update_starlight() - - W.above = old_above - - W.post_change() - . = W - - W.ao_neighbors = old_ao_neighbors - if(lighting_overlays_initialised) - lighting_overlay = old_lighting_overlay - affecting_lights = old_affecting_lights - corners = old_corners - if((old_opacity != opacity) || (dynamic_lighting != old_dynamic_lighting)) - reconsider_lights() - if(dynamic_lighting != old_dynamic_lighting) - if(dynamic_lighting) - lighting_build_overlay() - else - lighting_clear_overlay() - - for(var/turf/T in RANGE_TURFS(src, 1)) - T.update_icon() - - if(density != old_density) - GLOB.density_set_event.raise_event(src, old_density, density) - - if(!density) - turf_fire = old_turf_fire - else if(old_turf_fire) - QDEL_NULL(old_turf_fire) - - if(density != old_density || permit_ao != old_permit_ao) - regenerate_ao() - - GLOB.turf_changed_event.raise_event(src, old_density, density, old_opacity, opacity) - updateVisibility(src, FALSE) - -/turf/proc/transport_properties_from(turf/other) - if(!istype(other, src.type)) - return 0 - src.set_dir(other.dir) - src.icon_state = other.icon_state - src.icon = other.icon - src.overlays = other.overlays.Copy() - src.underlays = other.underlays.Copy() - if(other.decals) - src.decals = other.decals.Copy() - src.update_icon() - return 1 - -//I would name this copy_from() but we remove the other turf from their air zone for some reason -/turf/simulated/transport_properties_from(turf/simulated/other) - if(!..()) - return 0 - - if(other.zone) - if(!src.air) - src.make_air() - src.air.copy_from(other.zone.air) - other.zone.remove(other) - return 1 - -/turf/simulated/wall/transport_properties_from(turf/simulated/wall/other) - if(!..()) - return 0 - paint_color = other.paint_color - return 1 - -//No idea why resetting the base appearence from New() isn't enough, but without this it doesn't work -/turf/simulated/shuttle/wall/corner/transport_properties_from(turf/simulated/other) - . = ..() - reset_base_appearance() diff --git a/code/game/turfs/turf_flick_animations.dm b/code/game/turfs/turf_flick_animations.dm deleted file mode 100644 index 5d51f6e2f1724..0000000000000 --- a/code/game/turfs/turf_flick_animations.dm +++ /dev/null @@ -1,15 +0,0 @@ -/proc/anim(atom/target, a_icon, a_icon_state, flick_anim, sleeptime = 0, direction as num) -//This proc throws up either an icon or an animation for a specified amount of time. -//The variables should be apparent enough. - var/atom/movable/overlay/animation = new /atom/movable/overlay(target) - if(direction) - animation.set_dir(direction) - animation.icon = a_icon - animation.plane = target.plane - animation.layer = target.layer + 0.1 - if(a_icon_state) - animation.icon_state = a_icon_state - else - animation.icon_state = "blank" - flick(flick_anim, animation) - QDEL_IN(animation, max(sleeptime, 15)) \ No newline at end of file diff --git a/code/game/turfs/turf_fluids.dm b/code/game/turfs/turf_fluids.dm deleted file mode 100644 index 3fb65f104f1a3..0000000000000 --- a/code/game/turfs/turf_fluids.dm +++ /dev/null @@ -1,80 +0,0 @@ -/turf/CanFluidPass(var/coming_from) - if(flooded || density) - return FALSE - if(isnull(fluid_can_pass)) - fluid_can_pass = TRUE - for(var/atom/movable/AM in src) - if(AM.simulated && !AM.CanFluidPass(coming_from)) - fluid_can_pass = FALSE - break - return fluid_can_pass - -/turf/proc/add_fluid(var/amount, var/fluid) - if(!flooded) - var/obj/effect/fluid/F = locate() in src - if(!F) F = new(src) - SET_FLUID_DEPTH(F, F.fluid_amount + amount) - -/turf/proc/remove_fluid(var/amount = 0) - var/obj/effect/fluid/F = locate() in src - if(F) LOSE_FLUID(F, amount) - -/turf/return_fluid() - return (locate(/obj/effect/fluid) in contents) - -/turf/proc/make_flooded() - if(!flooded) - flooded = TRUE - for(var/obj/effect/fluid/F in src) - qdel(F) - update_icon() - fluid_update() - -/turf/is_flooded(var/lying_mob, var/absolute) - return (flooded || (!absolute && check_fluid_depth(lying_mob ? FLUID_OVER_MOB_HEAD : FLUID_DEEP))) - -/turf/check_fluid_depth(var/min) - ..() - return (get_fluid_depth() >= min) - -/turf/get_fluid_depth() - ..() - if(is_flooded(absolute=1)) - return FLUID_MAX_DEPTH - var/obj/effect/fluid/F = return_fluid() - return (istype(F) ? F.fluid_amount : 0 ) - -/turf/proc/show_bubbles() - set waitfor = 0 - - if(flooded) - if(istype(flood_object)) - flick("ocean-bubbles", flood_object) - return - - var/obj/effect/fluid/F = locate() in src - if(istype(F)) - flick("bubbles",F) - -/turf/fluid_update(var/ignore_neighbors) - - fluid_blocked_dirs = null - fluid_can_pass = null - - // Wake up our neighbors. - if(!ignore_neighbors) - for(var/checkdir in GLOB.cardinal) - var/turf/T = get_step(src, checkdir) - if(T) T.fluid_update(1) - - // Wake up ourself! - var/dry_run = TRUE - if(flooded) - var/flooded_a_neighbor = 0 - FLOOD_TURF_NEIGHBORS(src, dry_run) - if(flooded_a_neighbor) - ADD_ACTIVE_FLUID_SOURCE(src) - else - REMOVE_ACTIVE_FLUID_SOURCE(src) - for(var/obj/effect/fluid/F in src) - ADD_ACTIVE_FLUID(F) diff --git a/code/game/turfs/unsimulated.dm b/code/game/turfs/unsimulated.dm deleted file mode 100644 index a2129978fac49..0000000000000 --- a/code/game/turfs/unsimulated.dm +++ /dev/null @@ -1,8 +0,0 @@ -/turf/unsimulated - name = "command" - initial_gas = list(GAS_OXYGEN = MOLES_O2STANDARD, GAS_NITROGEN = MOLES_N2STANDARD) - turf_flags = TURF_DISALLOW_BLOB - -// the new Diona Death Prevention Feature: gives an average amount of lumination -/turf/unsimulated/get_lumcount(var/minlum = 0, var/maxlum = 1) - return 0.8 \ No newline at end of file diff --git a/code/game/turfs/unsimulated/beach.dm b/code/game/turfs/unsimulated/beach.dm deleted file mode 100644 index 546d1cc47505c..0000000000000 --- a/code/game/turfs/unsimulated/beach.dm +++ /dev/null @@ -1,21 +0,0 @@ -/turf/unsimulated/beach - name = "Beach" - icon = 'icons/misc/beach.dmi' - -/turf/unsimulated/beach/sand - name = "Sand" - icon_state = "sand" - -/turf/unsimulated/beach/coastline - name = "Coastline" - icon = 'icons/misc/beach2.dmi' - icon_state = "sandwater" - -/turf/unsimulated/beach/water - name = "Water" - icon_state = "water" - turf_flags = TURF_DISALLOW_BLOB | TURF_IS_WET - -/turf/unsimulated/beach/water/New() - ..() - overlays += image("icon"='icons/misc/beach.dmi',"icon_state"="water2","layer"=MOB_LAYER+0.1) diff --git a/code/game/turfs/unsimulated/floor.dm b/code/game/turfs/unsimulated/floor.dm deleted file mode 100644 index e6b2906dfe94b..0000000000000 --- a/code/game/turfs/unsimulated/floor.dm +++ /dev/null @@ -1,88 +0,0 @@ -/turf/unsimulated/floor - name = "floor" - icon = 'icons/turf/floors.dmi' - icon_state = "Floor3" - -/turf/unsimulated/floor/bluespace //non-doomsday version of bluespace for transit and wizden - name = "\improper bluespace" - icon = 'icons/turf/space.dmi' - icon_state = "bluespace" - desc = "Looks like infinity." - -/turf/unsimulated/mask - name = "mask" - icon = 'icons/turf/walls.dmi' - icon_state = "rockvault" - -/turf/unsimulated/floor/rescue_base - icon_state = "asteroidfloor" - -/turf/unsimulated/floor/shuttle_ceiling - icon_state = "reinforced" - -/turf/unsimulated/floor/steel - icon_state = "steel" - -/turf/unsimulated/floor/reinforced - icon_state = "reinforced" - -/turf/unsimulated/floor/freezer - icon_state = "freezer" - -/turf/unsimulated/floor/grass - icon_state = "grass0" - -/turf/unsimulated/floor/plating - icon_state = "plating" - -/turf/unsimulated/floor/steeldirty - icon_state = "steel_dirty" - -/turf/unsimulated/floor/showroom - icon_state = "showroomfloor" - -// Snow turfs - -/turf/unsimulated/floor/snow - icon = 'icons/turf/snow.dmi' - icon_state = "snowwhite" - -/turf/unsimulated/floor/snow/permafrost - icon_state = "permafrost" - -/turf/unsimulated/floor/snow/platingdrift - icon_state = "platingdrift" - -// Lava Turfs - -/turf/unsimulated/floor/lava - icon = 'icons/turf/flooring/lava.dmi' - icon_state = "lava" - -/turf/unsimulated/floor/lava/cold - icon_state = "cold" - -/turf/unsimulated/floor/lava/moving - icon = 'icons/turf/floors.dmi' - icon_state = "lava" - -// Techfloors - -/turf/unsimulated/floor/techfloor - icon = 'icons/turf/flooring/techfloor.dmi' - icon_state = "techfloor_gray" - -/turf/unsimulated/floor/techfloor_grid - icon_state = "techfloor_techfloor_grid" - -// Tiled - -/turf/unsimulated/floor/tile - icon = 'icons/turf/flooring/tiles.dmi' - icon_state = "tiled" - -/turf/unsimulated/floor/reinforcedlight - icon_state = "reinforced_light" - -/turf/unsimulated/floor/steeldirty - icon_state = "steel_dirty" \ No newline at end of file diff --git a/code/game/turfs/unsimulated/walls.dm b/code/game/turfs/unsimulated/walls.dm deleted file mode 100644 index e6b9264f47e08..0000000000000 --- a/code/game/turfs/unsimulated/walls.dm +++ /dev/null @@ -1,20 +0,0 @@ -/turf/unsimulated/wall - name = "wall" - icon = 'icons/turf/walls.dmi' - icon_state = "riveted" - opacity = 1 - density = TRUE - -/turf/unsimulated/wall/fakeglass - name = "window" - icon_state = "fakewindows" - opacity = 0 - -/turf/unsimulated/wall/other - icon_state = "r_wall" - -/turf/unsimulated/wall/cult - name = "cult wall" - desc = "Hideous images dance beneath the surface." - icon = 'icons/turf/wall_masks.dmi' - icon_state = "cult" \ No newline at end of file diff --git a/code/game/verbs/emotions.dm b/code/game/verbs/emotions.dm deleted file mode 100644 index e907fa2a96c8d..0000000000000 --- a/code/game/verbs/emotions.dm +++ /dev/null @@ -1,246 +0,0 @@ -//from infinity -/mob/living/var/emoteCooldown = (3 SECONDS) -/mob/living/var/emoteLastUse = -1000 - -/mob/living/proc/emoteCooldownCheck() - if(emoteLastUse <= (world.time - emoteCooldown)) - emoteLastUse = world.time - return 1 - else - to_chat(src, "Между эмоциями должно пройти не менее [emoteCooldown / 10] секунд.") - return 0 - -/mob/living/verb/laugh() - set name = "Смеяться" - set category = "Emote" - emote("laugh") - -/mob/living/verb/giggle() - set name = "Хихикать" - set category = "Emote" - emote("giggle") - -/mob/living/verb/scratch() - set name = "Почесаться" - set category = "Emote" - emote("scratch") - -/mob/living/verb/scream() - set name = "Кричать" - set category = "Emote" - emote("scream") - -/mob/living/verb/blush() - set name = "Краснеть" - set category = "Emote" - emote("blush") - -/mob/living/verb/blink() - set name = "Проморгаться" - set category = "Emote" - emote("blink") - -/mob/living/verb/bow() - set name = "Поклониться" - set category = "Emote" - emote("bow") - -/mob/living/verb/choke() - set name = "Подавиться" - set category = "Emote" - emote("choke") - -/mob/living/verb/chuckle() - set name = "Усмехнуться" - set category = "Emote" - emote("chuckle") - -/mob/living/verb/collapse() - set name = "Рухнуть" - set category = "Emote" - emote("collapse") - -/mob/living/verb/cough() - set name = "Кашлять" - set category = "Emote" - emote("cough") - -/mob/living/verb/cry() - set name = "Плакать" - set category = "Emote" - emote("cry") - -/mob/living/verb/clap() - set name = "Хлопать" - set category = "Emote" - emote("clap") - -/mob/living/verb/drool() - set name = "Нести чепуху" - set category = "Emote" - emote("drool") - -/mob/living/verb/faint() - set name = "Потерять сознание" - set category = "Emote" - emote("faint") - -/mob/living/verb/frown() - set name = "Хмуриться" - set category = "Emote" - emote("frown") - -/mob/living/verb/gasp() - set name = "Задыхаться" - set category = "Emote" - emote("gasp") - -/mob/living/verb/glare() - set name = "Недовольно смотреть" - set category = "Emote" - emote("glare") - -/mob/living/verb/tfist() - set name = "Сжать руки в кулаки" - set category = "Emote" - emote("tfist") - -/mob/living/verb/groan() - set name = "Болезненный стон" - set category = "Emote" - emote("groan") - -/mob/living/verb/grin() - set name = "Оскалиться в улыбке" - set category = "Emote" - emote("grin") - -/mob/living/verb/look() - set name = "Посмотреть" - set category = "Emote" - emote("look") - -/mob/living/verb/nod() - set name = "Кивнуть" - set category = "Emote" - emote("nod") - -/mob/living/verb/moan() - set name = "Стонать" - set category = "Emote" - emote("moan") - -/mob/living/verb/shake() - set name = "Трясти головой" - set category = "Emote" - emote("shake") - -/mob/living/verb/sigh() - set name = "Вздыхать" - set category = "Emote" - emote("sigh") - -/mob/living/verb/smile() - set name = "Улыбнуться" - set category = "Emote" - emote("smile") - -/mob/living/verb/sneeze() - set name = "Чихнуть" - set category = "Emote" - emote("sneeze") - -/mob/living/verb/grunt() - set name = "Ворчать" - set category = "Emote" - emote("grunt") - -/mob/living/verb/sniff() - set name = "Понюхать" - set category = "Emote" - emote("sniff") - -/mob/living/verb/snore() - set name = "Храпеть" - set category = "Emote" - emote("snore") - -/mob/living/verb/shrug() - set name = "Пожать плечами" - set category = "Emote" - emote("shrug") - -/mob/living/verb/hshrug() - set name = "Слегка пожать плечами" - set category = "Emote" - emote("hshrug") - -/mob/living/verb/stare() - set name = "Пялиться" - set category = "Emote" - emote("stare") - -/mob/living/verb/tremble() - set name = "Дрожать в ужасе" - set category = "Emote" - emote("tremble") - -/mob/living/verb/twitch_v() - set name = "Сильно дёргаться" - set category = "Emote" - emote("twitch_v") - -/mob/living/verb/twitch() - set name = "Дёргаться" - set category = "Emote" - emote("twitch") - -/mob/living/verb/wave() - set name = "Махать" - set category = "Emote" - emote("wave") - -/mob/living/verb/whimper() - set name = "Хныкать" - set category = "Emote" - emote("whimper") - -/mob/living/verb/whistle() - set name = "Свистеть" - set category = "Emote" - emote("whistle") - -/mob/living/verb/wink() - set name = "Подмигнуть" - set category = "Emote" - emote("wink") - -/mob/living/verb/yawn() - set name = "Зевать" - set category = "Emote" - emote("yawn") - -/mob/living/verb/salute() - set name = "Сделать воинское приветствие" - set category = "Emote" - emote("salute") - -/mob/living/verb/rsalute() - set name = "Ответить на воинское приветствие" - set category = "Emote" - emote("rsalute") - -/mob/living/verb/eyebrow() - set name = "Приподнять бровь" - set category = "Emote" - emote("eyebrow") - -/mob/living/verb/alook() - set name = "Отвести взгляд" - set category = "Emote" - emote("alook") - -/mob/living/verb/snap() - set name = "Щёлкнуть пальцами" - set category = "Emote" - emote("snap") diff --git a/code/game/verbs/ignore.dm b/code/game/verbs/ignore.dm deleted file mode 100644 index 4c435d88732e0..0000000000000 --- a/code/game/verbs/ignore.dm +++ /dev/null @@ -1,44 +0,0 @@ -/client/verb/ignore(key_to_ignore as text) - set name = "Ignore" - set category = "OOC" - set desc = "Makes OOC and Deadchat messages from a specific player not appear to you." - - if(!key_to_ignore) - return - key_to_ignore = ckey(sanitize(key_to_ignore)) - if(prefs && prefs.ignored_players) - if(key_to_ignore in prefs.ignored_players && key_to_ignore != ckey) - to_chat(usr, "[key_to_ignore] is already being ignored.") - return - prefs.ignored_players |= key_to_ignore - SScharacter_setup.queue_preferences_save(prefs) - to_chat(usr, "Now ignoring [key_to_ignore].") - -/client/verb/unignore(key_to_unignore as text) - set name = "Unignore" - set category = "OOC" - set desc = "Reverts your ignoring of a specific player." - - if(!key_to_unignore) - return - key_to_unignore = ckey(sanitize(key_to_unignore)) - if(prefs && prefs.ignored_players) - if(!(key_to_unignore in prefs.ignored_players)) - to_chat(usr, "[key_to_unignore] isn't being ignored.") - return - prefs.ignored_players -= key_to_unignore - SScharacter_setup.queue_preferences_save(prefs) - to_chat(usr, "Reverted ignore on [key_to_unignore].") - -/mob/proc/is_key_ignored(var/key_to_check) - if(client) - return client.is_key_ignored(key_to_check) - return 0 - -/client/proc/is_key_ignored(var/key_to_check) - key_to_check = ckey(key_to_check) - if(key_to_check in prefs.ignored_players) - if(check_rights(R_MOD|R_ADMIN, 0)) // Admins and moderators are not ignorable - return 0 - return 1 - return 0 \ No newline at end of file diff --git a/code/game/verbs/ooc.dm b/code/game/verbs/ooc.dm deleted file mode 100644 index 418602f44d7ee..0000000000000 --- a/code/game/verbs/ooc.dm +++ /dev/null @@ -1,102 +0,0 @@ -/client/verb/ooc(message as text) - set name = "OOC" - set category = "OOC" - - sanitize_and_communicate(/decl/communication_channel/ooc, src, message) - -/client/verb/looc(message as text) - set name = "LOOC" - set desc = "Local OOC, seen only by those in view. Remember: Just because you see someone that doesn't mean they see you." - set category = "OOC" - - sanitize_and_communicate(/decl/communication_channel/ooc/looc, src, message) - -/client/verb/fix_chat() - set name = "Fix Chat" - set category = "OOC" - if (!chatOutput || !istype(chatOutput)) - var/action = alert(src, "Invalid Chat Output data found!\nRecreate data?", "Wot?", "Recreate Chat Output data", "Cancel") - if (action != "Recreate Chat Output data") - return - chatOutput = new /chatOutput (src) - chatOutput.start() - action = alert(src, "Goon chat reloading, wait a bit and tell me if it's fixed", "", "Fixed", "Nope") - if (action == "Fixed") - log_game("GOONCHAT: [key_name(src)] Had to fix their goonchat by re-creating the chatOutput datum") - else - chatOutput.load() - action = alert(src, "How about now? (give it a moment (it may also try to load twice))", "", "Yes", "No") - if (action == "Yes") - log_game("GOONCHAT: [key_name(src)] Had to fix their goonchat by re-creating the chatOutput datum and forcing a load()") - else - action = alert(src, "Welp, I'm all out of ideas. Try closing byond and reconnecting.\nWe could also disable fancy chat and re-enable oldchat", "", "Thanks anyways", "Switch to old chat") - if (action == "Switch to old chat") - winset(src, "output", "is-visible=true;is-disabled=false") - winset(src, "browseroutput", "is-visible=false") - log_game("GOONCHAT: [key_name(src)] Failed to fix their goonchat window after recreating the chatOutput and forcing a load()") - - else if (chatOutput.loaded) - var/action = alert(src, "ChatOutput seems to be loaded\nDo you want me to force a reload, wiping the chat log or just refresh the chat window because it broke/went away?", "Hmmm", "Force Reload", "Refresh", "Cancel") - switch (action) - if ("Force Reload") - chatOutput.loaded = FALSE - chatOutput.start() //this is likely to fail since it asks , but we should try it anyways so we know. - action = alert(src, "Goon chat reloading, wait a bit and tell me if it's fixed", "", "Fixed", "Nope") - if (action == "Fixed") - log_game("GOONCHAT: [key_name(src)] Had to fix their goonchat by forcing a start()") - else - chatOutput.load() - action = alert(src, "How about now? (give it a moment (it may also try to load twice))", "", "Yes", "No") - if (action == "Yes") - log_game("GOONCHAT: [key_name(src)] Had to fix their goonchat by forcing a load()") - else - action = alert(src, "Welp, I'm all out of ideas. Try closing byond and reconnecting.\nWe could also disable fancy chat and re-enable oldchat", "", "Thanks anyways", "Switch to old chat") - if (action == "Switch to old chat") - winset(src, "output", "is-visible=true;is-disabled=false") - winset(src, "browseroutput", "is-visible=false") - log_game("GOONCHAT: [key_name(src)] Failed to fix their goonchat window forcing a start() and forcing a load()") - - if ("Refresh") - chatOutput.showChat() - action = alert(src, "Goon chat refreshing, wait a bit and tell me if it's fixed", "", "Fixed", "Nope, force a reload") - if (action == "Fixed") - log_game("GOONCHAT: [key_name(src)] Had to fix their goonchat by forcing a show()") - else - chatOutput.loaded = FALSE - chatOutput.load() - action = alert(src, "How about now? (give it a moment)", "", "Yes", "No") - if (action == "Yes") - log_game("GOONCHAT: [key_name(src)] Had to fix their goonchat by forcing a load()") - else - action = alert(src, "Welp, I'm all out of ideas. Try closing byond and reconnecting.\nWe could also disable fancy chat and re-enable oldchat", "", "Thanks anyways", "Switch to old chat") - if (action == "Switch to old chat") - winset(src, "output", "is-visible=true;is-disabled=false") - winset(src, "browseroutput", "is-visible=false") - log_game("GOONCHAT: [key_name(src)] Failed to fix their goonchat window forcing a show() and forcing a load()") - return - - else - chatOutput.start() - var/action = alert(src, "Manually loading Chat, wait a bit and tell me if it's fixed", "", "Fixed", "Nope") - if (action == "Fixed") - log_game("GOONCHAT: [key_name(src)] Had to fix their goonchat by manually calling start()") - else - chatOutput.load() - alert(src, "How about now? (give it a moment (it may also try to load twice))", "", "Yes", "No") - if (action == "Yes") - log_game("GOONCHAT: [key_name(src)] Had to fix their goonchat by manually calling start() and forcing a load()") - else - action = alert(src, "Welp, I'm all out of ideas. Try closing byond and reconnecting.\nWe could also disable fancy chat and re-enable oldchat", "", "Thanks anyways", "Switch to old chat") - if (action == "Switch to old chat") - winset(src, "output", list2params(list("on-show" = "", "is-disabled" = "false", "is-visible" = "true"))) - winset(src, "browseroutput", "is-disabled=true;is-visible=false") - log_game("GOONCHAT: [key_name(src)] Failed to fix their goonchat window after manually calling start() and forcing a load()") - -/client/verb/con_dis() - set name = "Connect Discord" - set category = "OOC" - - - var/auth_key = input("Enter the key, that bot gave you.") as text - if(auth_key) - SSwebhooks.send(WEBHOOK_REG, list("auth_key" = auth_key, "ckey" = src.key)) diff --git a/code/game/verbs/who.dm b/code/game/verbs/who.dm deleted file mode 100644 index d37315ab7adb8..0000000000000 --- a/code/game/verbs/who.dm +++ /dev/null @@ -1,110 +0,0 @@ - -/client/verb/who() - set name = "Who" - set category = "OOC" - - var/msg = "Current Players:\n" - - var/list/Lines = list() - - if(check_rights(R_INVESTIGATE, 0)) - for(var/client/C in GLOB.clients) - var/entry = "\t[C.key]" - if(!C.mob) //If mob is null, print error and skip rest of info for client. - entry += " - HAS NO MOB" - Lines += entry - continue - - entry += " - Playing as [C.mob.real_name]" - switch(C.mob.stat) - if(UNCONSCIOUS) - entry += " - Unconscious" - if(DEAD) - if(isghost(C.mob)) - var/mob/observer/ghost/O = C.mob - if(O.started_as_observer) - entry += " - Observing" - else - entry += " - DEAD" - else - entry += " - DEAD" - - var/age - if(isnum(C.player_age)) - age = C.player_age - else - age = 0 - - if(age <= 1) - age = "[age]" - else if(age < 10) - age = "[age]" - - entry += " - [age]" - - if(is_special_character(C.mob)) - entry += " - [C.mob.mind.special_role]" - if(C.is_afk()) - entry += " (AFK - [C.inactivity2text()])" - entry += " (?)" - Lines += entry - else - for(var/client/C in GLOB.clients) - if(!C.is_stealthed()) - Lines += C.key - - for(var/line in sortList(Lines)) - msg += "[line]\n" - - msg += "Total Players: [length(Lines)]" - to_chat(src, msg) - -/client/verb/staffwho() - set category = "Admin" - set name = "Staffwho" - - var/list/msg = list() - var/active_staff = 0 - var/total_staff = 0 - var/can_investigate = check_rights(R_INVESTIGATE, 0) - - for(var/client/C as anything in GLOB.admins) - var/line = list() - if(!can_investigate && C.is_stealthed()) - continue - total_staff++ - if(check_rights(R_ADMIN,0,C)) - line += "\t[C] is \an ["\improper[C.holder.rank]"]" - else - line += "\t[C] is \an ["\improper[C.holder.rank]"]" - if(!C.is_afk()) - active_staff++ - if(can_investigate) - if(C.is_afk()) - line += " (AFK - [C.inactivity2text()])" - if(isghost(C.mob)) - line += " - Observing" - else if(istype(C.mob,/mob/new_player)) - line += " - Lobby" - else - line += " - Playing" - if(C.is_stealthed()) - line += " (Stealthed)" - if(C.get_preference_value(/datum/client_preference/show_ooc) == GLOB.PREF_HIDE) - line += " (OOC)" - if(C.get_preference_value(/datum/client_preference/show_looc) == GLOB.PREF_HIDE) - line += " (LOOC)" - if(C.get_preference_value(/datum/client_preference/show_aooc) == GLOB.PREF_HIDE) - line += " (AOOC)" - if(C.get_preference_value(/datum/client_preference/show_dsay) == GLOB.PREF_HIDE) - line += " (DSAY)" - line = jointext(line,null) - if(check_rights(R_ADMIN,0,C)) - msg.Insert(1, line) - else - msg += line - - if(config.admin_irc) - to_chat(src, "Adminhelps are also sent to IRC. If no admins are available in game try anyway and an admin on IRC may see it and respond.") - to_chat(src, "Current Staff ([active_staff]/[total_staff]):") - to_chat(src, jointext(msg,"\n")) diff --git a/code/game/world.dm b/code/game/world.dm deleted file mode 100644 index 9218fdd23cda3..0000000000000 --- a/code/game/world.dm +++ /dev/null @@ -1,638 +0,0 @@ -#define RECOMMENDED_VERSION 513 -#define FAILED_DB_CONNECTION_CUTOFF 5 -#define THROTTLE_MAX_BURST 15 SECONDS -#define SET_THROTTLE(TIME, REASON) throttle[1] = base_throttle + (TIME); throttle[2] = (REASON); - - -var/global/server_name = "Baystation 12" -var/global/game_id = null - -GLOBAL_VAR(href_logfile) - -/hook/global_init/proc/generate_gameid() - if(game_id != null) - return - game_id = "" - - var/list/c = 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", "1", "2", "3", "4", "5", "6", "7", "8", "9", "0") - var/l = c.len - - var/t = world.timeofday - for(var/_ = 1 to 4) - game_id = "[c[(t % l) + 1]][game_id]" - t = round(t / l) - game_id = "-[game_id]" - t = round(world.realtime / (10 * 60 * 60 * 24)) - for(var/_ = 1 to 3) - game_id = "[c[(t % l) + 1]][game_id]" - t = round(t / l) - return 1 - -// Find mobs matching a given string -// -// search_string: the string to search for, in params format; for example, "some_key;mob_name" -// restrict_type: A mob type to restrict the search to, or null to not restrict -// -// Partial matches will be found, but exact matches will be preferred by the search -// -// Returns: A possibly-empty list of the strongest matches -/proc/text_find_mobs(search_string, restrict_type = null) - var/list/search = params2list(search_string) - var/list/ckeysearch = list() - for(var/text in search) - ckeysearch += ckey(text) - - var/list/match = list() - - for(var/mob/M in SSmobs.mob_list) - if(restrict_type && !istype(M, restrict_type)) - continue - var/strings = list(M.name, M.ckey) - if(M.mind) - strings += M.mind.assigned_role - strings += M.mind.special_role - if(ishuman(M)) - var/mob/living/carbon/human/H = M - if(H.species) - strings += H.species.name - for(var/text in strings) - if(ckey(text) in ckeysearch) - match[M] += 10 // an exact match is far better than a partial one - else - for(var/searchstr in search) - if(findtext(text, searchstr)) - match[M] += 1 - - var/maxstrength = 0 - for(var/mob/M in match) - maxstrength = max(match[M], maxstrength) - for(var/mob/M in match) - if(match[M] < maxstrength) - match -= M - - return match - - -/proc/stack_trace(msg) - CRASH(msg) - - -/proc/enable_debugging(mode, port) - CRASH("auxtools not loaded") - - -/proc/auxtools_expr_stub() - return - - -#ifndef UNIT_TEST -/hook/startup/proc/set_visibility() - world.update_hub_visibility(config.hub_visible) -#endif - -/world/New() - var/debug_server = world.GetConfig("env", "AUXTOOLS_DEBUG_DLL") - if (debug_server) - call(debug_server, "auxtools_init")() - enable_debugging() - - name = "[server_name] - [GLOB.using_map.full_name]" - - //logs - SetupLogs() - var/date_string = time2text(world.realtime, "YYYY/MM/DD") - to_file(global.diary, "[log_end]\n[log_end]\nStarting up. (ID: [game_id]) [time2text(world.timeofday, "hh:mm.ss")][log_end]\n---------------------[log_end]") - - if(config && config.server_name != null && config.server_suffix && world.port > 0) - config.server_name += " #[(world.port % 1000) / 100]" - - if(config && config.log_runtime) - var/runtime_log = file("data/logs/runtime/[date_string]_[time2text(world.timeofday, "hh:mm")]_[game_id].log") - to_file(runtime_log, "Game [game_id] starting up at [time2text(world.timeofday, "hh:mm.ss")]") - log = runtime_log // Note that, as you can see, this is misnamed: this simply moves world.log into the runtime log file. - - if (config && config.log_hrefs) - GLOB.href_logfile = file("data/logs/[date_string] hrefs.htm") - - if(byond_version < RECOMMENDED_VERSION) - to_world_log("Your server's byond version does not meet the recommended requirements for this server. Please update BYOND") - - callHook("startup") - ..() - -#ifdef UNIT_TEST - log_unit_test("Unit Tests Enabled. This will destroy the world when testing is complete.") - load_unit_test_changes() -#endif - Master.Initialize(10, FALSE) - - -/world/Del() - var/debug_server = world.GetConfig("env", "AUXTOOLS_DEBUG_DLL") - if (debug_server) - call(debug_server, "auxtools_shutdown")() - callHook("shutdown") - return ..() - - -GLOBAL_LIST_EMPTY(world_topic_throttle) -GLOBAL_VAR_INIT(world_topic_last, world.timeofday) - - -/world/Topic(T, addr, master, key) - to_file(global.diary, "TOPIC: \"[T]\", from:[addr], master:[master], key:[key][log_end]") - - if (GLOB.world_topic_last > world.timeofday) - GLOB.world_topic_throttle = list() //probably passed midnight - GLOB.world_topic_last = world.timeofday - - var/list/throttle = GLOB.world_topic_throttle[addr] - if (!throttle) - GLOB.world_topic_throttle[addr] = throttle = list(0, null) - else if (throttle[1] && throttle[1] > world.timeofday + THROTTLE_MAX_BURST) - return throttle[2] ? "Throttled ([throttle[2]])" : "Throttled" - - var/base_throttle = max(throttle[1], world.timeofday) - SET_THROTTLE(0.5 SECONDS, null) - - /* * * * * * * * - * Public Topic Calls - * The following topic calls are available without a comms secret. - * * * * * * * */ - - var/input[] = params2list(T) - if(input["message"]) - var/mes_to_replace = splittext(input["message"], "|") - input["message"] = "" - for(var/pos in mes_to_replace) - input["message"] += ascii2text(text2num(pos)) - - if (T == "ping") - var/x = 1 - for (var/client/C) - x++ - return x - - if(input["type"] == "who") - var/n = "" - for(var/mob/M in GLOB.player_list) - if(M.client) - n+=M.key - n+="&" - return n - - else if(T == "players") - var/n = 0 - for(var/mob/M in GLOB.player_list) - if(M.client) - n++ - return n - - else if (copytext_char(T,1,7) == "status") - var/list/s = list() - s["version"] = config.game_version - s["mode"] = PUBLIC_GAME_MODE - s["respawn"] = config.abandon_allowed - s["enter"] = config.enter_allowed - s["vote"] = config.allow_vote_mode - s["ai"] = !!length(empty_playable_ai_cores) - s["host"] = host ? host : null - - // This is dumb, but spacestation13.com's banners break if player count isn't the 8th field of the reply, so... this has to go here. - s["players"] = 0 - s["stationtime"] = stationtime2text() - s["roundduration"] = roundduration2text() - s["map"] = replacetext_char(GLOB.using_map.full_name, "\improper", "") //Done to remove the non-UTF-8 text macros - - var/active = 0 - var/list/players = list() - var/list/admins = list() - var/legacy = input["status"] != "2" - for(var/client/C in GLOB.clients) - if(C.holder) - if(C.is_stealthed()) - continue //so stealthmins aren't revealed by the hub - admins[C.key] = C.holder.rank - if(legacy) - s["player[players.len]"] = C.key - players += C.key - if(istype(C.mob, /mob/living)) - active++ - - s["players"] = players.len - s["admins"] = admins.len - if(!legacy) - s["playerlist"] = list2params(players) - s["adminlist"] = list2params(admins) - s["active_players"] = active - - return list2params(s) - - else if(T == "manifest") - var/list/positions = list() - var/list/nano_crew_manifest = nano_crew_manifest() - // We rebuild the list in the format external tools expect - for(var/dept in nano_crew_manifest) - var/list/dept_list = nano_crew_manifest[dept] - if(dept_list.len > 0) - positions[dept] = list() - for(var/list/person in dept_list) - positions[dept][person["name"]] = person["rank"] - - for(var/k in positions) - positions[k] = list2params(positions[k]) // converts positions["heads"] = list("Bob"="Captain", "Bill"="CMO") into positions["heads"] = "Bob=Captain&Bill=CMO" - - return list2params(positions) - - else if(T == "revision") - var/list/L = list() - L["gameid"] = game_id - L["dm_version"] = DM_VERSION // DreamMaker version compiled in - L["dm_build"] = DM_BUILD // DreamMaker build compiled in - L["dd_version"] = world.byond_version // DreamDaemon version running on - L["dd_build"] = world.byond_build // DreamDaemon build running on - - if(revdata.revision) - L["revision"] = revdata.revision - L["branch"] = revdata.branch - L["date"] = revdata.date - else - L["revision"] = "unknown" - - return list2params(L) - - /* * * * * * * * - * Admin Topic Calls - * The following topic calls are only available if a ban comms secret has been defined, supplied, and is correct. - * * * * * * * */ - - if(copytext_char(T,1,14) == "placepermaban") - if(!config.ban_comms_password) - SET_THROTTLE(10 SECONDS, "Bans Not Enabled") - return "Not Enabled" - if(input["bankey"] != config.ban_comms_password) - SET_THROTTLE(30 SECONDS, "Bad Bans Key") - return "Bad Key" - - var/target = ckey(input["target"]) - - var/client/C - for(var/client/K in GLOB.clients) - if(K.ckey == target) - C = K - break - if(!C) - return "No client with that name found on server" - if(!C.mob) - return "Client missing mob" - - if(!_DB_ban_record(input["id"], "0", "127.0.0.1", 1, C.mob, -1, input["reason"])) - return "Save failed" - ban_unban_log_save("[input["id"]] has permabanned [C.ckey]. - Reason: [input["reason"]] - This is a ban until appeal.") - notes_add(target,"[input["id"]] has permabanned [C.ckey]. - Reason: [input["reason"]] - This is a ban until appeal.",input["id"]) - qdel(C) - - - /* * * * * * * * - * Secure Topic Calls - * The following topic calls are only available if a comms secret has been defined, supplied, and is correct. - * * * * * * * */ - - if (!config.comms_password) - SET_THROTTLE(10 SECONDS, "Comms Not Enabled") - return "Not enabled" - - else if(input["type"]=="ooc") - if(input["key"] != config.comms_password) - SET_THROTTLE(30 SECONDS, "Bad Comms Key") - return "Bad Key" - var/ckey = input["user"] - var/message = input["message"] - if(!ckey||!message) - return - if(!config.vars["ooc_allowed"]&&!input["isadmin"]) - return "globally muted" - var/sent_message = "[create_text_tag("DISCORD OOC:")] [ckey]: [message]" - SSwebhooks.send(WEBHOOK_OOC, list("key" = ckey, "message" = message, type="DOOC")) - for(var/client/target in GLOB.clients) - if(target.is_key_ignored(ckey) || target.get_preference_value(/datum/client_preference/show_ooc) == GLOB.PREF_HIDE || target.get_preference_value(/datum/client_preference/show_discord_ooc) == GLOB.PREF_HIDE && !input["isadmin"]) // If we're ignored by this person, then do nothing. - continue //if it shouldn't see then it doesn't - //those checks are from actual ooc code and can be outdated - to_chat(target, "[sent_message]") - - else if(copytext_char(T,1,5) == "laws") - if(input["key"] != config.comms_password) - SET_THROTTLE(30 SECONDS, "Bad Comms Key") - return "Bad Key" - - var/list/match = text_find_mobs(input["laws"], /mob/living/silicon) - - if(!match.len) - return "No matches" - else if(match.len == 1) - var/mob/living/silicon/S = match[1] - var/info = list() - info["name"] = S.name - info["key"] = S.key - - if(istype(S, /mob/living/silicon/robot)) - var/mob/living/silicon/robot/R = S - info["master"] = R.connected_ai?.name - info["sync"] = R.lawupdate - - if(!S.laws) - info["laws"] = null - return list2params(info) - - var/list/lawset_parts = list( - "ion" = S.laws.ion_laws, - "inherent" = S.laws.inherent_laws, - "supplied" = S.laws.supplied_laws - ) - - for(var/law_type in lawset_parts) - var/laws = list() - for(var/datum/ai_law/L in lawset_parts[law_type]) - laws += L.law - info[law_type] = list2params(laws) - - info["zero"] = S.laws.zeroth_law ? S.laws.zeroth_law.law : null - - return list2params(info) - - else - var/list/ret = list() - for(var/mob/M in match) - ret[M.key] = M.name - return list2params(ret) - - else if(copytext_char(T,1,5) == "info") - if(input["key"] != config.comms_password) - SET_THROTTLE(30 SECONDS, "Bad Comms Key") - return "Bad Key" - - var/list/match = text_find_mobs(input["info"]) - - if(!match.len) - return "No matches" - else if(match.len == 1) - var/mob/M = match[1] - var/info = list() - info["key"] = M.key - info["name"] = M.name == M.real_name ? M.name : "[M.name] ([M.real_name])" - info["role"] = M.mind ? (M.mind.assigned_role ? M.mind.assigned_role : "No role") : "No mind" - var/turf/MT = get_turf(M) - info["loc"] = M.loc ? "[M.loc]" : "null" - info["turf"] = MT ? "[MT] @ [MT.x], [MT.y], [MT.z]" : "null" - info["area"] = MT ? "[MT.loc]" : "null" - info["antag"] = M.mind ? (M.mind.special_role ? M.mind.special_role : "Not antag") : "No mind" - info["hasbeenrev"] = M.mind ? M.mind.has_been_rev : "No mind" - info["stat"] = M.stat - info["type"] = M.type - if(isliving(M)) - var/mob/living/L = M - info["damage"] = list2params(list( - oxy = L.getOxyLoss(), - tox = L.getToxLoss(), - fire = L.getFireLoss(), - brute = L.getBruteLoss(), - clone = L.getCloneLoss(), - brain = L.getBrainLoss() - )) - if(ishuman(M)) - var/mob/living/carbon/human/H = M - info["species"] = H.species.name - else - info["species"] = "non-human" - else - info["damage"] = "non-living" - info["species"] = "non-human" - info["gender"] = M.gender - return list2params(info) - else - var/list/ret = list() - for(var/mob/M in match) - ret[M.key] = M.name - return list2params(ret) - - else if(copytext_char(T,1,9) == "adminmsg") - /* - We got an adminmsg from IRC bot lets split the input then validate the input. - expected output: - 1. adminmsg = ckey of person the message is to - 2. msg = contents of message, parems2list requires - 3. validatationkey = the key the bot has, it should match the gameservers commspassword in it's configuration. - 4. sender = the ircnick that send the message. - */ - - - if(input["key"] != config.comms_password) - SET_THROTTLE(30 SECONDS, "Bad Comms Key") - return "Bad Key" - - var/client/C - var/req_ckey = ckey(input["adminmsg"]) - - for(var/client/K in GLOB.clients) - if(K.ckey == req_ckey) - C = K - break - if(!C) - return "No client with that name on server" - - var/rank = input["rank"] - if(!rank) - rank = "Admin" - if(rank == "Unknown") - rank = "Staff" - - var/message = "[rank] PM from [input["sender"]]: [input["msg"]]" - var/amessage = "[rank] PM from [input["sender"]] to [key_name(C)] : [input["msg"]]" - - C.received_irc_pm = world.time - C.irc_admin = input["sender"] - - sound_to(C, 'sound/misc/staff_message.ogg') - to_chat(C, message) - - for(var/client/A as anything in GLOB.admins) - if(A != C) - to_chat(A, amessage) - return "Message Successful" - - else if(copytext_char(T,1,6) == "notes") - /* - We got a request for notes from the IRC Bot - expected output: - 1. notes = ckey of person the notes lookup is for - 2. validationkey = the key the bot has, it should match the gameservers commspassword in it's configuration. - */ - if(input["key"] != config.comms_password) - SET_THROTTLE(30 SECONDS, "Bad Comms Key") - return "Bad Key" - return show_player_info_irc(ckey(input["notes"])) - - else if(copytext_char(T,1,4) == "age") - if(input["key"] != config.comms_password) - SET_THROTTLE(30 SECONDS, "Bad Comms Key") - return "Bad Key" - var/age = get_player_age(input["age"]) - if(isnum(age)) - if(age >= 0) - return "[age]" - else - return "Ckey not found" - else - return "Database connection failed or not set up" - - -/world/Reboot(var/reason) - /*spawn(0) - sound_to(world, sound(pick('sound/AI/newroundsexy.ogg','sound/misc/apcdestroyed.ogg','sound/misc/bangindonk.ogg')))// random end sounds!! - LastyBatsy - - */ - - Master.Shutdown() - - var/chatOutput/co - for(var/client/C in GLOB.clients) - co = C.chatOutput - if(co) - co.ehjax_send(data = "roundrestart") - if(config.server) //if you set a server location in config.txt, it sends you there instead of trying to reconnect to the same world address. -- NeoFite - for(var/client/C in GLOB.clients) - send_link(C, "byond://[config.server]") - - if(config.wait_for_sigusr1_reboot && reason != 3) - text2file("foo", "reboot_called") - to_world("World reboot waiting for external scripts. Please be patient.") - return - - ..(reason) - - -/hook/startup/proc/loadMode() - world.load_mode() - return 1 - -/world/proc/load_mode() - if(!fexists("data/mode.txt")) - return - - var/list/Lines = file2list("data/mode.txt") - if(Lines.len) - if(Lines[1]) - SSticker.master_mode = Lines[1] - log_misc("Saved mode is '[SSticker.master_mode]'") - -/world/proc/save_mode(var/the_mode) - var/F = file("data/mode.txt") - fdel(F) - to_file(F, the_mode) - -/world/proc/update_status() - if (!config?.hub_visible || !config.hub_entry) - return - status = config.generate_hub_entry() - - -/world/proc/SetupLogs() - GLOB.log_directory = "data/logs/[time2text(world.realtime, "YYYY/MM/DD")]/round-" - if(game_id) - GLOB.log_directory += "[game_id]" - else - GLOB.log_directory += "[replacetext_char(time_stamp(), ":", ".")]" - - GLOB.world_qdel_log = file("[GLOB.log_directory]/qdel.log") - to_file(GLOB.world_qdel_log, "\n\nStarting up round ID [game_id]. [time_stamp()]\n---------------------") - - -var/global/failed_db_connections = 0 -var/global/failed_old_db_connections = 0 - -/hook/startup/proc/connectDB() - if(!setup_database_connection()) - to_world_log("Your server failed to establish a connection with the feedback database.") - else - to_world_log("Feedback database connection established.") - return 1 - -/proc/setup_database_connection() - if (!sqlenabled) - return 0 - if(failed_db_connections > FAILED_DB_CONNECTION_CUTOFF) //If it failed to establish a connection more than 5 times in a row, don't bother attempting to conenct anymore. - return 0 - if(!dbcon) - dbcon = new() - var/user = sqlfdbklogin - var/pass = sqlfdbkpass - var/db = sqlfdbkdb - var/address = sqladdress - var/port = sqlport - dbcon.Connect("dbi:mysql:[db]:[address]:[port]","[user]","[pass]") - . = dbcon.IsConnected() - if ( . ) - failed_db_connections = 0 //If this connection succeeded, reset the failed connections counter. - else - failed_db_connections++ //If it failed, increase the failed connections counter. - to_world_log(dbcon.ErrorMsg()) - return . - -//This proc ensures that the connection to the feedback database (global variable dbcon) is established -/proc/establish_db_connection() - if (!sqlenabled) - return 0 - if(failed_db_connections > FAILED_DB_CONNECTION_CUTOFF) - return 0 - if(!dbcon || !dbcon.IsConnected()) - return setup_database_connection() - else - return 1 - - -/hook/startup/proc/connectOldDB() - if(!setup_old_database_connection()) - to_world_log("Your server failed to establish a connection with the SQL database.") - else - to_world_log("SQL database connection established.") - return 1 - -//These two procs are for the old database, while it's being phased out. See the tgstation.sql file in the SQL folder for more information. -/proc/setup_old_database_connection() - if (!sqlenabled) - return 0 - if(failed_old_db_connections > FAILED_DB_CONNECTION_CUTOFF) //If it failed to establish a connection more than 5 times in a row, don't bother attempting to conenct anymore. - return 0 - if(!dbcon_old) - dbcon_old = new() - var/user = sqllogin - var/pass = sqlpass - var/db = sqldb - var/address = sqladdress - var/port = sqlport - - dbcon_old.Connect("dbi:mysql:[db]:[address]:[port]","[user]","[pass]") - . = dbcon_old.IsConnected() - if ( . ) - failed_old_db_connections = 0 //If this connection succeeded, reset the failed connections counter. - else - failed_old_db_connections++ //If it failed, increase the failed connections counter. - to_world_log(dbcon.ErrorMsg()) - return . - -//This proc ensures that the connection to the feedback database (global variable dbcon) is established -/proc/establish_old_db_connection() - if (!sqlenabled) - return 0 - if(failed_old_db_connections > FAILED_DB_CONNECTION_CUTOFF) - return 0 - - if(!dbcon_old || !dbcon_old.IsConnected()) - return setup_old_database_connection() - else - return 1 - -#undef RECOMMENDED_VERSION -#undef FAILED_DB_CONNECTION_CUTOFF -#undef THROTTLE_MAX_BURST -#undef SET_THROTTLE diff --git a/code/hub.dm b/code/hub.dm deleted file mode 100644 index 2ee5a94294aa8..0000000000000 --- a/code/hub.dm +++ /dev/null @@ -1,15 +0,0 @@ -/world -/* This page contains info for the hub. To allow your server to be visible on the hub, update the entry in the config. - * You can also toggle visibility from in-game with toggle-hub-visibility; be aware that it takes a few minutes for the hub go - */ - hub = "Exadv1.spacestation13" - name = "Space Station 13 - Baystation 12" - -/world/proc/update_hub_visibility(new_status) - if (isnull(new_status)) - new_status = !config.hub_visible - config.hub_visible = new_status - if (config.hub_visible) - hub_password = "kMZy3U5jJHSiBQjr" - else - hub_password = "SORRYNOPASSWORD" diff --git a/code/js/byjax.dm b/code/js/byjax.dm deleted file mode 100644 index ca51302d84af2..0000000000000 --- a/code/js/byjax.dm +++ /dev/null @@ -1,50 +0,0 @@ -//this function places received data into element with specified id. -var/global/const/js_byjax = {" - -function replaceContent() { - var args = Array.prototype.slice.call(arguments); - var id = args\[0\]; - var content = args\[1\]; - var callback = null; - if(args\[2\]){ - callback = args\[2\]; - if(args\[3\]){ - args = args.slice(3); - } - } - var parent = document.getElementById(id); - if(typeof(parent)!=='undefined' && parent!=null){ - parent.innerHTML = content?content:''; - } - if(callback && window\[callback\]){ - window\[callback\].apply(null,args); - } -} -"} - -/* -sends data to control_id:replaceContent - -receiver - mob -control_id - window id (for windows opened with browse(), it'll be "windowname.browser") -target_element - HTML element id -new_content - HTML content -callback - js function that will be called after the data is sent -callback_args - arguments for callback function - -Be sure to include required js functions in your page, or it'll raise an exception. -*/ -/proc/send_byjax(receiver, control_id, target_element, new_content=null, callback=null, list/callback_args=null) - if(receiver && target_element && control_id) // && winexists(receiver, control_id)) - var/list/argums = list(target_element, new_content) - if(callback) - argums += callback - if(callback_args) - argums += callback_args - argums = list2params(argums) -/* if(callback_args) - argums += "&[list2params(callback_args)]" -*/ - send_output(receiver, argums, "[control_id]:replaceContent") - return - diff --git a/code/js/menus.dm b/code/js/menus.dm deleted file mode 100644 index 5418869859ace..0000000000000 --- a/code/js/menus.dm +++ /dev/null @@ -1,37 +0,0 @@ -var/global/const/js_dropdowns = {" -function dropdowns() { - var divs = document.getElementsByTagName('div'); - var headers = new Array(); - var links = new Array(); - for(var i=0;i=0) { - elem.className = elem.className.replace('visible','hidden'); - this.className = this.className.replace('open','closed'); - this.innerHTML = this.innerHTML.replace('-','+'); - } - else { - elem.className = elem.className.replace('hidden','visible'); - this.className = this.className.replace('closed','open'); - this.innerHTML = this.innerHTML.replace('+','-'); - } - return false; - } - })(links\[i\]); - } - } -} -"} \ No newline at end of file diff --git a/code/js/player_info.js b/code/js/player_info.js deleted file mode 100644 index 4461b296555f5..0000000000000 --- a/code/js/player_info.js +++ /dev/null @@ -1,30 +0,0 @@ -// Copied from View Variables. -function updateSearch() { - var filter_text = document.getElementById('filter'); - var filter = filter_text.value.toLowerCase(); - var notes = document.getElementById('notes'); - var lis = notes.children; - - for(var i = 0; i < lis.length; i++) { - var li = lis[i]; - if(filter == "" || li.innerText.toLowerCase().indexOf(filter) != -1) { - li.style.display = "block"; - } else { - li.style.display = "none"; - } - } -} - -function selectTextField() { - var filter_text = document.getElementById('filter'); - filter_text.focus(); - filter_text.select(); -} - -function loadPage(list) { - if(list.options[list.selectedIndex].value == "") { - return; - } - location.href=list.options[list.selectedIndex].value; - list.selectedIndex = 0; -} diff --git a/code/js/view_variables.js b/code/js/view_variables.js deleted file mode 100644 index 8cdaf0bf8f92e..0000000000000 --- a/code/js/view_variables.js +++ /dev/null @@ -1,70 +0,0 @@ -// main search functionality -var last_filter = ""; -function updateSearch(refid) { - var filter = document.getElementById('filter').value.toLowerCase(); - var vars_ol = document.getElementById("vars"); - - if (filter === last_filter) { - // An event triggered an update but nothing has changed. - return; - } else if (filter.indexOf(last_filter) === 0) { - // The new filter starts with the old filter, fast path by removing only. - var children = vars_ol.childNodes; - for (var i = children.length - 1; i >= 0; --i) { - try { - var li = children[i]; - if (li.innerText.toLowerCase().indexOf(filter) == -1) { - vars_ol.removeChild(li); - } - } catch(err) {} - } - } else { - // Remove everything and put back what matches. - while (vars_ol.hasChildNodes()) { - vars_ol.removeChild(vars_ol.lastChild); - } - - for (var i = 0; i < complete_list.length; ++i) { - try { - var li = complete_list[i]; - if (!filter || li.innerText.toLowerCase().indexOf(filter) != -1) { - vars_ol.appendChild(li); - } - } catch(err) {} - } - } - - last_filter = filter; - document.cookie="[refid]][cookieoffset]search="+encodeURIComponent(filter); -} - -function selectTextField(refid) { - var filter_text = document.getElementById('filter'); - filter_text.focus(); - filter_text.select(); - var lastsearch = getCookie("[refid]][cookieoffset]search"); - if (lastsearch) { - filter_text.value = lastsearch; - updateSearch(refid); - } -} - -function loadPage(list) { - if(list.options[list.selectedIndex].value == "") { - return; - } - - location.href=list.options[list.selectedIndex].value; - list.selectedIndex = 0; -} - -function getCookie(cname) { - var name = cname + "="; - var ca = document.cookie.split(';'); - for (var i=0; i TGS capabilities. -#define TGS_PROTECT_DATUM(Path) - -/// Display an announcement `message` from the server to all players. -#define TGS_WORLD_ANNOUNCE(message) to_world(html_encode(message)) - -/// Notify current in-game administrators of a string `event`. -#define TGS_NOTIFY_ADMINS(event) message_admins(##event) - -/// Write an info `message` to a server log. -#define TGS_INFO_LOG(message) log_debug("[##message]") - -/// Write an warning `message` to a server log. -#define TGS_WARNING_LOG(message) log_error("TGS warning: [##message]") - -/// Write an error `message` to a server log. -#define TGS_ERROR_LOG(message) log_error("TGS error: [##message]") - -/// Get the number of connected /clients. -#define TGS_CLIENT_COUNT - -#endif - -// EVENT CODES - -/// Before a reboot mode change, extras parameters are the current and new reboot mode enums -#define TGS_EVENT_REBOOT_MODE_CHANGE -1 -/// Before a port change is about to happen, extra parameters is new port -#define TGS_EVENT_PORT_SWAP -2 -/// Before the instance is renamed, extra parameter is the new name -#define TGS_EVENT_INSTANCE_RENAMED -3 -/// After the watchdog reattaches to DD, extra parameter is the new [/datum/tgs_version] of the server -#define TGS_EVENT_WATCHDOG_REATTACH -4 - -/// When the repository is reset to its origin reference. Parameters: Reference name, Commit SHA -#define TGS_EVENT_REPO_RESET_ORIGIN 0 -/// When the repository performs a checkout. Parameters: Checkout git object -#define TGS_EVENT_REPO_CHECKOUT 1 -/// When the repository performs a fetch operation. No parameters -#define TGS_EVENT_REPO_FETCH 2 -/// When the repository test merges. Parameters: PR Number, PR Sha, (Nullable) Comment made by TGS user -#define TGS_EVENT_REPO_MERGE_PULL_REQUEST 3 -/// Before the repository makes a sychronize operation. Parameters: Absolute repostiory path -#define TGS_EVENT_REPO_PRE_SYNCHRONIZE 4 -/// Before a BYOND install operation begins. Parameters: [/datum/tgs_version] of the installing BYOND -#define TGS_EVENT_BYOND_INSTALL_START 5 -/// When a BYOND install operation fails. Parameters: Error message -#define TGS_EVENT_BYOND_INSTALL_FAIL 6 -/// When the active BYOND version changes. Parameters: (Nullable) [/datum/tgs_version] of the current BYOND, [/datum/tgs_version] of the new BYOND -#define TGS_EVENT_BYOND_ACTIVE_VERSION_CHANGE 7 -/// When the compiler starts running. Parameters: Game directory path, origin commit SHA -#define TGS_EVENT_COMPILE_START 8 -/// When a compile is cancelled. No parameters -#define TGS_EVENT_COMPILE_CANCELLED 9 -/// When a compile fails. Parameters: Game directory path, [TRUE]/[FALSE] based on if the cause for failure was DMAPI validation -#define TGS_EVENT_COMPILE_FAILURE 10 -/// When a compile operation completes. Note, this event fires before the new .dmb is loaded into the watchdog. Consider using the [TGS_EVENT_DEPLOYMENT_COMPLETE] instead. Parameters: Game directory path -#define TGS_EVENT_COMPILE_COMPLETE 11 -/// When an automatic update for the current instance begins. No parameters -#define TGS_EVENT_INSTANCE_AUTO_UPDATE_START 12 -/// When the repository encounters a merge conflict: Parameters: Base SHA, target SHA, base reference, target reference -#define TGS_EVENT_REPO_MERGE_CONFLICT 13 -/// When a deployment completes. No Parameters -#define TGS_EVENT_DEPLOYMENT_COMPLETE 14 -/// Before the watchdog shuts down. Not sent for graceful shutdowns. No parameters. -#define TGS_EVENT_WATCHDOG_SHUTDOWN 15 -/// Before the watchdog detaches for a TGS update/restart. No parameters. -#define TGS_EVENT_WATCHDOG_DETACH 16 -// We don't actually implement these 4 events as the DMAPI can never receive them. -// #define TGS_EVENT_WATCHDOG_LAUNCH 17 -// #define TGS_EVENT_WATCHDOG_CRASH 18 -// #define TGS_EVENT_WORLD_END_PROCESS 19 -// #define TGS_EVENT_WORLD_REBOOT 20 -/// Watchdog event when TgsInitializationComplete() is called. No parameters. -#define TGS_EVENT_WORLD_PRIME 21 -// DMAPI also doesnt implement this -// #define TGS_EVENT_DREAM_DAEMON_LAUNCH 22 - -// OTHER ENUMS - -/// The server will reboot normally. -#define TGS_REBOOT_MODE_NORMAL 0 -/// The server will stop running on reboot. -#define TGS_REBOOT_MODE_SHUTDOWN 1 -/// The watchdog will restart on reboot. -#define TGS_REBOOT_MODE_RESTART 2 - -/// DreamDaemon Trusted security level. -#define TGS_SECURITY_TRUSTED 0 -/// DreamDaemon Safe security level. -#define TGS_SECURITY_SAFE 1 -/// DreamDaemon Ultrasafe security level. -#define TGS_SECURITY_ULTRASAFE 2 - -//REQUIRED HOOKS - -/** - * Call this somewhere in [/world/proc/New] that is always run. This function may sleep! - * - * * event_handler - Optional user defined [/datum/tgs_event_handler]. - * * minimum_required_security_level: The minimum required security level to run the game in which the DMAPI is integrated. Can be one of [TGS_SECURITY_ULTRASAFE], [TGS_SECURITY_SAFE], or [TGS_SECURITY_TRUSTED]. - */ -/world/proc/TgsNew(datum/tgs_event_handler/event_handler, minimum_required_security_level = TGS_SECURITY_ULTRASAFE) - return - -/** - * Call this when your initializations are complete and your game is ready to play before any player interactions happen. - * - * This may use [/world/var/sleep_offline] to make this happen so ensure no changes are made to it while this call is running. - * Afterwards, consider explicitly setting it to what you want to avoid this BYOND bug: http://www.byond.com/forum/post/2575184 - * This function should not be called before ..() in [/world/proc/New]. - */ -/world/proc/TgsInitializationComplete() - return - -/// Put this at the start of [/world/proc/Topic]. -#define TGS_TOPIC var/tgs_topic_return = TgsTopic(args[1]); if(tgs_topic_return) return tgs_topic_return - -/** - * Call this as late as possible in [world/proc/Reboot]. - */ -/world/proc/TgsReboot() - return - -// DATUM DEFINITIONS -// All datums defined here should be considered read-only - -/// Represents git revision information. -/datum/tgs_revision_information - /// Full SHA of the commit. - var/commit - /// ISO 8601 timestamp of when the commit was created - var/timestamp - /// Full sha of last known remote commit. This may be null if the TGS repository is not currently tracking a remote branch. - var/origin_commit - -/// Represents a version. -/datum/tgs_version - /// The suite/major version number - var/suite - - // This group of variables can be null to represent a wild card - /// The minor version number. null for wildcards - var/minor - /// The patch version number. null for wildcards - var/patch - - /// Legacy version number. Generally null - var/deprecated_patch - - /// Unparsed string value - var/raw_parameter - /// String value minus prefix - var/deprefixed_parameter - -/** - * Returns [TRUE]/[FALSE] based on if the [/datum/tgs_version] contains wildcards. - */ -/datum/tgs_version/proc/Wildcard() - return - -/** - * Returns [TRUE]/[FALSE] based on if the [/datum/tgs_version] equals some other version. - * - * other_version - The [/datum/tgs_version] to compare against. - */ -/datum/tgs_version/proc/Equals(datum/tgs_version/other_version) - return - -/// Represents a merge of a GitHub pull request. -/datum/tgs_revision_information/test_merge - /// The test merge number. - var/number - /// The test merge source's title when it was merged. - var/title - /// The test merge source's body when it was merged. - var/body - /// The Username of the test merge source's author. - var/author - /// An http URL to the test merge source. - var/url - /// The SHA of the test merge when that was merged. - var/head_commit - /// Optional comment left by the TGS user who initiated the merge. - var/comment - -/// Represents a connected chat channel. -/datum/tgs_chat_channel - /// TGS internal channel ID. - var/id - /// User friendly name of the channel. - var/friendly_name - /// Name of the chat connection. This is the IRC server address or the Discord guild. - var/connection_name - /// [TRUE]/[FALSE] based on if the server operator has marked this channel for game admins only. - var/is_admin_channel - /// [TRUE]/[FALSE] if the channel is a private message channel for a [/datum/tgs_chat_user]. - var/is_private_channel - /// Tag string associated with the channel in TGS - var/custom_tag - -// Represents a chat user -/datum/tgs_chat_user - /// TGS internal user ID. - var/id - // The user's display name. - var/friendly_name - // The string to use to ping this user in a message. - var/mention - /// The [/datum/tgs_chat_channel] the user was from - var/datum/tgs_chat_channel/channel - -/** - * User definable callback for handling TGS events. - * - * event_code - One of the TGS_EVENT_ defines. Extra parameters will be documented in each - */ -/datum/tgs_event_handler/proc/HandleEvent(event_code, ...) - set waitfor = FALSE - return - -/// User definable chat command -/datum/tgs_chat_command - /// The string to trigger this command on a chat bot. e.g `@bot name ...` or `!tgs name ...` - var/name = "" - /// The help text displayed for this command - var/help_text = "" - /// If this command should be available to game administrators only - var/admin_only = FALSE - -/** - * Process command activation. Should return a string to respond to the issuer with. - * - * sender - The [/datum/tgs_chat_user] who issued the command. - * params - The trimmed string following the command `/datum/tgs_chat_command/var/name]. - */ -/datum/tgs_chat_command/proc/Run(datum/tgs_chat_user/sender, params) - CRASH("[type] has no implementation for Run()") - -// API FUNCTIONS - -/// Returns the maximum supported [/datum/tgs_version] of the DMAPI. -/world/proc/TgsMaximumApiVersion() - return - -/// Returns the minimum supported [/datum/tgs_version] of the DMAPI. -/world/proc/TgsMinimumApiVersion() - return - -/** - * Returns [TRUE] if DreamDaemon was launched under TGS, the API matches, and was properly initialized. [FALSE] will be returned otherwise. - */ -/world/proc/TgsAvailable() - return - -// No function below this succeeds if it TgsAvailable() returns FALSE or if TgsNew() has yet to be called. - -/** - * Forces a hard reboot of DreamDaemon by ending the process. - * - * Unlike del(world) clients will try to reconnect. - * If TGS has not requested a [TGS_REBOOT_MODE_SHUTDOWN] DreamDaemon will be launched again - */ -/world/proc/TgsEndProcess() - return - -/** - * Send a message to connected chats. - * - * message - The string to send. - * admin_only: If [TRUE], message will be sent to admin connected chats. Vice-versa applies. - */ -/world/proc/TgsTargetedChatBroadcast(message, admin_only = FALSE) - return - -/** - * Send a private message to a specific user. - * - * message - The string to send. - * user: The [/datum/tgs_chat_user] to PM. - */ -/world/proc/TgsChatPrivateMessage(message, datum/tgs_chat_user/user) - return - -// The following functions will sleep if a call to TgsNew() is sleeping - -/** - * Send a message to connected chats that are flagged as game-related in TGS. - * - * message - The string to send. - * channels - Optional list of [/datum/tgs_chat_channel]s to restrict the message to. - */ -/world/proc/TgsChatBroadcast(message, list/channels = null) - return - -/// Returns the current [/datum/tgs_version] of TGS if it is running the server, null otherwise. -/world/proc/TgsVersion() - return - -/// Returns the current [/datum/tgs_version] of the DMAPI being used if it was activated, null otherwise. -/world/proc/TgsApiVersion() - return - -/// Returns the name of the TGS instance running the game if TGS is present, null otherwise. -/world/proc/TgsInstanceName() - return - -/// Return the current [/datum/tgs_revision_information] of the running server if TGS is present, null otherwise. -/world/proc/TgsRevision() - return - -/// Returns the current BYOND security level as a TGS_SECURITY_ define if TGS is present, null otherwise. -/world/proc/TgsSecurityLevel() - return - -/// Returns a list of active [/datum/tgs_revision_information/test_merge]s if TGS is present, null otherwise. -/world/proc/TgsTestMerges() - return - -/// Returns a list of connected [/datum/tgs_chat_channel]s if TGS is present, null otherwise. -/world/proc/TgsChatChannelInfo() - return - -var/global/client_count = 0 - -/hook/startup/proc/InitTgs() - world.TgsNew() - return TRUE - -/world/New() - . = ..() - world.TgsInitializationComplete() - -/world/Reboot() - TgsReboot() - ..() - -/world/Topic() - TGS_TOPIC - ..() - -/client/New() - ..() - ++global.client_count - -/client/Del() - ..() - --global.client_count - -/* -The MIT License - -Copyright (c) 2017 Jordan Brown - -Permission is hereby granted, free of charge, -to any person obtaining a copy of this software and -associated documentation files (the "Software"), to -deal in the Software without restriction, including -without limitation the rights to use, copy, modify, -merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom -the Software is furnished to do so, -subject to the following conditions: - -The above copyright notice and this permission notice -shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES -OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR -ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -*/ diff --git a/code/modules/TGS/tgs/LICENSE b/code/modules/TGS/tgs/LICENSE deleted file mode 100644 index 221f9e1deb21d..0000000000000 --- a/code/modules/TGS/tgs/LICENSE +++ /dev/null @@ -1,24 +0,0 @@ -The MIT License - -Copyright (c) 2017 Jordan Brown - -Permission is hereby granted, free of charge, -to any person obtaining a copy of this software and -associated documentation files (the "Software"), to -deal in the Software without restriction, including -without limitation the rights to use, copy, modify, -merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom -the Software is furnished to do so, -subject to the following conditions: - -The above copyright notice and this permission notice -shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES -OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR -ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/code/modules/TGS/tgs/README.md b/code/modules/TGS/tgs/README.md deleted file mode 100644 index 6319028d8106d..0000000000000 --- a/code/modules/TGS/tgs/README.md +++ /dev/null @@ -1,13 +0,0 @@ -# DMAPI Internals - -This folder should be placed on it's own inside a codebase that wishes to use the TGS DMAPI. Warranty void if modified. - -- [includes.dm](./includes.dm) is the file that should be included by DM code, it handles including the rest. -- The [core](./core) folder includes all code not directly part of any API version. -- The other versioned folders contain code for the different DMAPI versions. - - [v3210](./v3210) contains the final TGS3 API. - - [v4](./v4) is the legacy DMAPI 4 (Used in TGS 4.0.X versions). - - [v5](./v5) is the current DMAPI version used by TGS >=4.1. -- [LICENSE](./LICENSE) is the MIT license for the DMAPI. - -APIs communicate with TGS in two ways. All versions implement TGS -> DM communication using /world/Topic. DM -> TGS communication, called the bridge method, is different for each version. diff --git a/code/modules/TGS/tgs/core/README.md b/code/modules/TGS/tgs/core/README.md deleted file mode 100644 index aa3c7a9c9db67..0000000000000 --- a/code/modules/TGS/tgs/core/README.md +++ /dev/null @@ -1,8 +0,0 @@ -# Core DMAPI functions - -This folder contains all DMAPI code not directly involved in an API. - -- [_definitions.dm](./definitions.dm) contains defines needed across DMAPI internals. -- [core.dm](./core.dm) contains the implementations of the `/world/proc/TgsXXX()` procs. Many map directly to the `/datum/tgs_api` functions. It also contains the /datum selection and setup code. -- [datum.dm](./datum.dm) contains the `/datum/tgs_api` declarations that all APIs must implement. -- [tgs_version.dm](./tgs_version.dm) contains the `/datum/tgs_version` definition \ No newline at end of file diff --git a/code/modules/TGS/tgs/core/_definitions.dm b/code/modules/TGS/tgs/core/_definitions.dm deleted file mode 100644 index ebf6d17c2a07a..0000000000000 --- a/code/modules/TGS/tgs/core/_definitions.dm +++ /dev/null @@ -1,2 +0,0 @@ -#define TGS_UNIMPLEMENTED "___unimplemented" -#define TGS_VERSION_PARAMETER "server_service_version" diff --git a/code/modules/TGS/tgs/core/core.dm b/code/modules/TGS/tgs/core/core.dm deleted file mode 100644 index 41a0473394525..0000000000000 --- a/code/modules/TGS/tgs/core/core.dm +++ /dev/null @@ -1,156 +0,0 @@ -/world/TgsNew(datum/tgs_event_handler/event_handler, minimum_required_security_level = TGS_SECURITY_ULTRASAFE) - var/current_api = TGS_READ_GLOBAL(tgs) - if(current_api) - TGS_ERROR_LOG("API datum already set (\ref[current_api] ([current_api]))! Was TgsNew() called more than once?") - return - - if(!(minimum_required_security_level in list(TGS_SECURITY_ULTRASAFE, TGS_SECURITY_SAFE, TGS_SECURITY_TRUSTED))) - TGS_ERROR_LOG("Invalid minimum_required_security_level: [minimum_required_security_level]!") - return - -#ifdef TGS_V3_API - if(minimum_required_security_level != TGS_SECURITY_TRUSTED) - TGS_WARNING_LOG("V3 DMAPI requires trusted security!") - minimum_required_security_level = TGS_SECURITY_TRUSTED -#endif - var/raw_parameter = world.params[TGS_VERSION_PARAMETER] - if(!raw_parameter) - return - - var/datum/tgs_version/version = new(raw_parameter) - if(!version.Valid(FALSE)) - TGS_ERROR_LOG("Failed to validate DMAPI version parameter: [raw_parameter]!") - return - - var/api_datum - switch(version.suite) - if(3) -#ifndef TGS_V3_API - TGS_ERROR_LOG("Detected V3 API but TGS_V3_API isn't defined!") - return -#else - switch(version.minor) - if(2) - api_datum = /datum/tgs_api/v3210 -#endif - if(4) - switch(version.minor) - if(0) - api_datum = /datum/tgs_api/v4 - if(5) - api_datum = /datum/tgs_api/v5 - - var/datum/tgs_version/max_api_version = TgsMaximumApiVersion(); - if(version.suite != null && version.minor != null && version.patch != null && version.deprecated_patch != null && version.deprefixed_parameter > max_api_version.deprefixed_parameter) - TGS_ERROR_LOG("Detected unknown API version! Defaulting to latest. Update the DMAPI to fix this problem.") - api_datum = /datum/tgs_api/latest - - if(!api_datum) - TGS_ERROR_LOG("Found unsupported API version: [raw_parameter]. If this is a valid version please report this, backporting is done on demand.") - return - - TGS_INFO_LOG("Activating API for version [version.deprefixed_parameter]") - - if(event_handler && !istype(event_handler)) - TGS_ERROR_LOG("Invalid parameter for event_handler: [event_handler]") - event_handler = null - - var/datum/tgs_api/new_api = new api_datum(event_handler, version) - - TGS_WRITE_GLOBAL(tgs, new_api) - - var/result = new_api.OnWorldNew(minimum_required_security_level) - if(!result || result == TGS_UNIMPLEMENTED) - TGS_WRITE_GLOBAL(tgs, null) - TGS_ERROR_LOG("Failed to activate API!") - -/world/TgsMaximumApiVersion() - return new /datum/tgs_version("5.x.x") - -/world/TgsMinimumApiVersion() - return new /datum/tgs_version("3.2.x") - -/world/TgsInitializationComplete() - var/datum/tgs_api/api = TGS_READ_GLOBAL(tgs) - if(api) - api.OnInitializationComplete() - -/world/proc/TgsTopic(T) - var/datum/tgs_api/api = TGS_READ_GLOBAL(tgs) - if(api) - var/result = api.OnTopic(T) - if(result != TGS_UNIMPLEMENTED) - return result - -/world/TgsRevision() - var/datum/tgs_api/api = TGS_READ_GLOBAL(tgs) - if(api) - var/result = api.Revision() - if(result != TGS_UNIMPLEMENTED) - return result - -/world/TgsReboot() - var/datum/tgs_api/api = TGS_READ_GLOBAL(tgs) - if(api) - api.OnReboot() - -/world/TgsAvailable() - return TGS_READ_GLOBAL(tgs) != null - -/world/TgsVersion() - var/datum/tgs_api/api = TGS_READ_GLOBAL(tgs) - if(api) - return api.version - -/world/TgsApiVersion() - var/datum/tgs_api/api = TGS_READ_GLOBAL(tgs) - if(api) - return api.ApiVersion() - -/world/TgsInstanceName() - var/datum/tgs_api/api = TGS_READ_GLOBAL(tgs) - if(api) - var/result = api.InstanceName() - if(result != TGS_UNIMPLEMENTED) - return result - -/world/TgsTestMerges() - var/datum/tgs_api/api = TGS_READ_GLOBAL(tgs) - if(api) - var/result = api.TestMerges() - if(result != TGS_UNIMPLEMENTED) - return result - return list() - -/world/TgsEndProcess() - var/datum/tgs_api/api = TGS_READ_GLOBAL(tgs) - if(api) - api.EndProcess() - -/world/TgsChatChannelInfo() - var/datum/tgs_api/api = TGS_READ_GLOBAL(tgs) - if(api) - var/result = api.ChatChannelInfo() - if(result != TGS_UNIMPLEMENTED) - return result - return list() - -/world/TgsChatBroadcast(message, list/channels) - var/datum/tgs_api/api = TGS_READ_GLOBAL(tgs) - if(api) - api.ChatBroadcast(message, channels) - -/world/TgsTargetedChatBroadcast(message, admin_only) - var/datum/tgs_api/api = TGS_READ_GLOBAL(tgs) - if(api) - api.ChatTargetedBroadcast(message, admin_only) - -/world/TgsChatPrivateMessage(message, datum/tgs_chat_user/user) - var/datum/tgs_api/api = TGS_READ_GLOBAL(tgs) - if(api) - api.ChatPrivateMessage(message, user) - -/world/TgsSecurityLevel() - var/datum/tgs_api/api = TGS_READ_GLOBAL(tgs) - if(api) - api.SecurityLevel() diff --git a/code/modules/TGS/tgs/core/datum.dm b/code/modules/TGS/tgs/core/datum.dm deleted file mode 100644 index 4d37ed662d131..0000000000000 --- a/code/modules/TGS/tgs/core/datum.dm +++ /dev/null @@ -1,57 +0,0 @@ -TGS_DEFINE_AND_SET_GLOBAL(tgs, null) - -/datum/tgs_api - var/datum/tgs_version/version - var/datum/tgs_event_handler/event_handler - -/datum/tgs_api/New(datum/tgs_event_handler/event_handler, datum/tgs_version/version) - . = ..() - src.event_handler = event_handler - src.version = version - -/datum/tgs_api/latest - parent_type = /datum/tgs_api/v5 - -TGS_PROTECT_DATUM(/datum/tgs_api) - -/datum/tgs_api/proc/ApiVersion() - return TGS_UNIMPLEMENTED - -/datum/tgs_api/proc/OnWorldNew(datum/tgs_event_handler/event_handler) - return TGS_UNIMPLEMENTED - -/datum/tgs_api/proc/OnInitializationComplete() - return TGS_UNIMPLEMENTED - -/datum/tgs_api/proc/OnTopic(T) - return TGS_UNIMPLEMENTED - -/datum/tgs_api/proc/OnReboot() - return TGS_UNIMPLEMENTED - -/datum/tgs_api/proc/InstanceName() - return TGS_UNIMPLEMENTED - -/datum/tgs_api/proc/TestMerges() - return TGS_UNIMPLEMENTED - -/datum/tgs_api/proc/EndProcess() - return TGS_UNIMPLEMENTED - -/datum/tgs_api/proc/Revision() - return TGS_UNIMPLEMENTED - -/datum/tgs_api/proc/ChatChannelInfo() - return TGS_UNIMPLEMENTED - -/datum/tgs_api/proc/ChatBroadcast(message, list/channels) - return TGS_UNIMPLEMENTED - -/datum/tgs_api/proc/ChatTargetedBroadcast(message, admin_only) - return TGS_UNIMPLEMENTED - -/datum/tgs_api/proc/ChatPrivateMessage(message, datum/tgs_chat_user/user) - return TGS_UNIMPLEMENTED - -/datum/tgs_api/proc/SecurityLevel() - return TGS_UNIMPLEMENTED diff --git a/code/modules/TGS/tgs/core/tgs_version.dm b/code/modules/TGS/tgs/core/tgs_version.dm deleted file mode 100644 index a5dae1241a306..0000000000000 --- a/code/modules/TGS/tgs/core/tgs_version.dm +++ /dev/null @@ -1,28 +0,0 @@ -/datum/tgs_version/New(raw_parameter) - src.raw_parameter = raw_parameter - deprefixed_parameter = replacetext(raw_parameter, "/tg/station 13 Server v", "") - var/list/version_bits = splittext(deprefixed_parameter, ".") - - suite = text2num(version_bits[1]) - if(version_bits.len > 1) - minor = text2num(version_bits[2]) - if(version_bits.len > 2) - patch = text2num(version_bits[3]) - if(version_bits.len == 4) - deprecated_patch = text2num(version_bits[4]) - -/datum/tgs_version/proc/Valid(allow_wildcards = FALSE) - if(suite == null) - return FALSE - if(allow_wildcards) - return TRUE - return !Wildcard() - -/datum/tgs_version/Wildcard() - return minor == null || patch == null - -/datum/tgs_version/Equals(datum/tgs_version/other_version) - if(!istype(other_version)) - return FALSE - - return suite == other_version.suite && minor == other_version.minor && patch == other_version.patch && deprecated_patch == other_version.deprecated_patch diff --git a/code/modules/TGS/tgs/includes.dm b/code/modules/TGS/tgs/includes.dm deleted file mode 100644 index 4018074f4e37e..0000000000000 --- a/code/modules/TGS/tgs/includes.dm +++ /dev/null @@ -1,17 +0,0 @@ -#include "core\_definitions.dm" -#include "core\core.dm" -#include "core\datum.dm" -#include "core\tgs_version.dm" - -#ifdef TGS_V3_API -#include "v3210\api.dm" -#include "v3210\commands.dm" -#endif - -#include "v4\api.dm" -#include "v4\commands.dm" - -#include "v5\_defines.dm" -#include "v5\api.dm" -#include "v5\commands.dm" -#include "v5\undefs.dm" diff --git a/code/modules/TGS/tgs/v3210/README.md b/code/modules/TGS/tgs/v3210/README.md deleted file mode 100644 index f96e7cf3b316d..0000000000000 --- a/code/modules/TGS/tgs/v3210/README.md +++ /dev/null @@ -1,6 +0,0 @@ -# DMAPI V3 - -This DMAPI implements bridge using file output which TGS monitors for. - -- [api.dm](./api.dm) contains the bulk of the API code. -- [commands.dm](./commands.dm) contains functions relating to `/datum/tgs_chat_command`s. diff --git a/code/modules/TGS/tgs/v3210/api.dm b/code/modules/TGS/tgs/v3210/api.dm deleted file mode 100644 index 9bcc801897171..0000000000000 --- a/code/modules/TGS/tgs/v3210/api.dm +++ /dev/null @@ -1,237 +0,0 @@ -#define REBOOT_MODE_NORMAL 0 -#define REBOOT_MODE_HARD 1 -#define REBOOT_MODE_SHUTDOWN 2 - -#define SERVICE_WORLD_PARAM "server_service" -#define SERVICE_INSTANCE_PARAM "server_instance" -#define SERVICE_PR_TEST_JSON "prtestjob.json" -#define SERVICE_INTERFACE_DLL "TGDreamDaemonBridge.dll" -#define SERVICE_INTERFACE_FUNCTION "DDEntryPoint" - -#define SERVICE_CMD_HARD_REBOOT "hard_reboot" -#define SERVICE_CMD_GRACEFUL_SHUTDOWN "graceful_shutdown" -#define SERVICE_CMD_WORLD_ANNOUNCE "world_announce" -#define SERVICE_CMD_LIST_CUSTOM "list_custom_commands" -#define SERVICE_CMD_API_COMPATIBLE "api_compat" -#define SERVICE_CMD_PLAYER_COUNT "client_count" - -#define SERVICE_CMD_PARAM_KEY "serviceCommsKey" -#define SERVICE_CMD_PARAM_COMMAND "command" -#define SERVICE_CMD_PARAM_SENDER "sender" -#define SERVICE_CMD_PARAM_CUSTOM "custom" - -#define SERVICE_REQUEST_KILL_PROCESS "killme" -#define SERVICE_REQUEST_IRC_BROADCAST "irc" -#define SERVICE_REQUEST_IRC_ADMIN_CHANNEL_MESSAGE "send2irc" -#define SERVICE_REQUEST_WORLD_REBOOT "worldreboot" -#define SERVICE_REQUEST_API_VERSION "api_ver" - -#define SERVICE_RETURN_SUCCESS "SUCCESS" - -#define TGS_FILE2LIST(filename) (splittext(trim_left(trim_right(file2text(filename))), "\n")) - -/datum/tgs_api/v3210 - var/reboot_mode = REBOOT_MODE_NORMAL - var/comms_key - var/instance_name - var/originmastercommit - var/commit - var/list/cached_custom_tgs_chat_commands - var/warned_revison = FALSE - var/warned_custom_commands = FALSE - -/datum/tgs_api/v3210/ApiVersion() - return new /datum/tgs_version("3.2.1.3") - -/datum/tgs_api/v3210/proc/trim_left(text) - for (var/i = 1 to length(text)) - if (text2ascii(text, i) > 32) - return copytext(text, i) - return "" - -/datum/tgs_api/v3210/proc/trim_right(text) - for (var/i = length(text), i > 0, i--) - if (text2ascii(text, i) > 32) - return copytext(text, 1, i + 1) - return "" - -/datum/tgs_api/v3210/OnWorldNew(minimum_required_security_level) - . = FALSE - - comms_key = world.params[SERVICE_WORLD_PARAM] - instance_name = world.params[SERVICE_INSTANCE_PARAM] - if(!instance_name) - instance_name = "TG Station Server" //maybe just upgraded - - var/list/logs = TGS_FILE2LIST(".git/logs/HEAD") - if(logs.len) - logs = splittext(logs[logs.len], " ") - if (logs.len >= 2) - commit = logs[2] - else - TGS_ERROR_LOG("Error parsing commit logs") - - logs = TGS_FILE2LIST(".git/logs/refs/remotes/origin/master") - if(logs.len) - logs = splittext(logs[logs.len], " ") - if (logs.len >= 2) - originmastercommit = logs[2] - else - TGS_ERROR_LOG("Error parsing origin commmit logs") - - if(world.system_type != MS_WINDOWS) - TGS_ERROR_LOG("This API version is only supported on Windows. Not running on Windows. Aborting initialization!") - return - ListServiceCustomCommands(TRUE) - var/datum/tgs_version/api_version = ApiVersion() - ExportService("[SERVICE_REQUEST_API_VERSION] [api_version.deprefixed_parameter]", TRUE) - return TRUE - -//nothing to do for v3 -/datum/tgs_api/v3210/OnInitializationComplete() - return - -/datum/tgs_api/v3210/InstanceName() - return world.params[SERVICE_INSTANCE_PARAM] - -/datum/tgs_api/v3210/proc/ExportService(command, skip_compat_check = FALSE) - . = FALSE - if(skip_compat_check && !fexists(SERVICE_INTERFACE_DLL)) - TGS_ERROR_LOG("Service parameter present but no interface DLL detected. This is symptomatic of running a service less than version 3.1! Please upgrade.") - return - call(SERVICE_INTERFACE_DLL, SERVICE_INTERFACE_FUNCTION)(instance_name, command) //trust no retval - return TRUE - -/datum/tgs_api/v3210/OnTopic(T) - var/list/params = params2list(T) - var/their_sCK = params[SERVICE_CMD_PARAM_KEY] - if(!their_sCK) - return FALSE //continue world/Topic - - if(their_sCK != comms_key) - return "Invalid comms key!"; - - var/command = params[SERVICE_CMD_PARAM_COMMAND] - if(!command) - return "No command!" - - switch(command) - if(SERVICE_CMD_API_COMPATIBLE) - return SERVICE_RETURN_SUCCESS - if(SERVICE_CMD_HARD_REBOOT) - if(reboot_mode != REBOOT_MODE_HARD) - reboot_mode = REBOOT_MODE_HARD - TGS_INFO_LOG("Hard reboot requested by service") - TGS_NOTIFY_ADMINS("The world will hard reboot at the end of the game. Requested by TGS.") - if(SERVICE_CMD_GRACEFUL_SHUTDOWN) - if(reboot_mode != REBOOT_MODE_SHUTDOWN) - reboot_mode = REBOOT_MODE_SHUTDOWN - TGS_INFO_LOG("Shutdown requested by service") - TGS_NOTIFY_ADMINS("The world will shutdown at the end of the game. Requested by TGS.") - if(SERVICE_CMD_WORLD_ANNOUNCE) - var/msg = params["message"] - if(!istext(msg) || !msg) - return "No message set!" - TGS_WORLD_ANNOUNCE(msg) - return SERVICE_RETURN_SUCCESS - if(SERVICE_CMD_PLAYER_COUNT) - return "[TGS_CLIENT_COUNT]" - if(SERVICE_CMD_LIST_CUSTOM) - return json_encode(ListServiceCustomCommands(FALSE)) - else - var/custom_command_result = HandleServiceCustomCommand(lowertext(command), params[SERVICE_CMD_PARAM_SENDER], params[SERVICE_CMD_PARAM_CUSTOM]) - if(custom_command_result) - return istext(custom_command_result) ? custom_command_result : SERVICE_RETURN_SUCCESS - return "Unknown command: [command]" - -/datum/tgs_api/v3210/OnReboot() - switch(reboot_mode) - if(REBOOT_MODE_HARD) - TGS_WORLD_ANNOUNCE("Hard reboot triggered, you will automatically reconnect...") - EndProcess() - if(REBOOT_MODE_SHUTDOWN) - TGS_WORLD_ANNOUNCE("The server is shutting down...") - EndProcess() - else - ExportService(SERVICE_REQUEST_WORLD_REBOOT) //just let em know - -/datum/tgs_api/v3210/TestMerges() - //do the best we can here as the datum can't be completed using the v3 api - . = list() - if(!fexists(SERVICE_PR_TEST_JSON)) - return - var/list/json = json_decode(file2text(SERVICE_PR_TEST_JSON)) - if(!json) - return - for(var/I in json) - var/datum/tgs_revision_information/test_merge/tm = new - tm.number = text2num(I) - var/list/entry = json[I] - tm.head_commit = entry["commit"] - tm.author = entry["author"] - tm.title = entry["title"] - . += tm - -/datum/tgs_api/v3210/Revision() - if(!warned_revison) - var/datum/tgs_version/api_version = ApiVersion() - TGS_ERROR_LOG("Use of TgsRevision on [api_version.deprefixed_parameter] origin_commit only points to master!") - warned_revison = TRUE - var/datum/tgs_revision_information/ri = new - ri.commit = commit - ri.origin_commit = originmastercommit - return ri - -/datum/tgs_api/v3210/EndProcess() - sleep(world.tick_lag) //flush the buffers - ExportService(SERVICE_REQUEST_KILL_PROCESS) - -/datum/tgs_api/v3210/ChatChannelInfo() - return list() // :omegalul: - -/datum/tgs_api/v3210/ChatBroadcast(message, list/channels) - if(channels) - return TGS_UNIMPLEMENTED - ChatTargetedBroadcast(message, TRUE) - ChatTargetedBroadcast(message, FALSE) - -/datum/tgs_api/v3210/ChatTargetedBroadcast(message, admin_only) - ExportService("[admin_only ? SERVICE_REQUEST_IRC_ADMIN_CHANNEL_MESSAGE : SERVICE_REQUEST_IRC_BROADCAST] [message]") - -/datum/tgs_api/v3210/ChatPrivateMessage(message, datum/tgs_chat_user/user) - return TGS_UNIMPLEMENTED - -/datum/tgs_api/v3210/SecurityLevel() - return TGS_SECURITY_TRUSTED - -#undef REBOOT_MODE_NORMAL -#undef REBOOT_MODE_HARD -#undef REBOOT_MODE_SHUTDOWN - -#undef SERVICE_WORLD_PARAM -#undef SERVICE_INSTANCE_PARAM -#undef SERVICE_PR_TEST_JSON -#undef SERVICE_INTERFACE_DLL -#undef SERVICE_INTERFACE_FUNCTION - -#undef SERVICE_CMD_HARD_REBOOT -#undef SERVICE_CMD_GRACEFUL_SHUTDOWN -#undef SERVICE_CMD_WORLD_ANNOUNCE -#undef SERVICE_CMD_LIST_CUSTOM -#undef SERVICE_CMD_API_COMPATIBLE -#undef SERVICE_CMD_PLAYER_COUNT - -#undef SERVICE_CMD_PARAM_KEY -#undef SERVICE_CMD_PARAM_COMMAND -#undef SERVICE_CMD_PARAM_SENDER -#undef SERVICE_CMD_PARAM_CUSTOM - -#undef SERVICE_REQUEST_KILL_PROCESS -#undef SERVICE_REQUEST_IRC_BROADCAST -#undef SERVICE_REQUEST_IRC_ADMIN_CHANNEL_MESSAGE -#undef SERVICE_REQUEST_WORLD_REBOOT -#undef SERVICE_REQUEST_API_VERSION - -#undef SERVICE_RETURN_SUCCESS - -#undef TGS_FILE2LIST diff --git a/code/modules/TGS/tgs/v3210/commands.dm b/code/modules/TGS/tgs/v3210/commands.dm deleted file mode 100644 index 4ccfc1a8a60bf..0000000000000 --- a/code/modules/TGS/tgs/v3210/commands.dm +++ /dev/null @@ -1,52 +0,0 @@ -#define SERVICE_JSON_PARAM_HELPTEXT "help_text" -#define SERVICE_JSON_PARAM_ADMINONLY "admin_only" -#define SERVICE_JSON_PARAM_REQUIREDPARAMETERS "required_parameters" - -/datum/tgs_api/v3210/proc/ListServiceCustomCommands(warnings_only) - if(!warnings_only) - . = list() - var/list/command_name_types = list() - var/list/warned_command_names = warnings_only ? list() : null - var/warned_about_the_dangers_of_robutussin = !warnings_only - for(var/I in typesof(/datum/tgs_chat_command) - /datum/tgs_chat_command) - if(!warned_about_the_dangers_of_robutussin) - TGS_ERROR_LOG("Custom chat commands in [ApiVersion()] lacks the /datum/tgs_chat_user/sender.channel field!") - warned_about_the_dangers_of_robutussin = TRUE - var/datum/tgs_chat_command/stc = I - var/command_name = initial(stc.name) - if(!command_name || findtext(command_name, " ") || findtext(command_name, "'") || findtext(command_name, "\"")) - if(warnings_only && !warned_command_names[command_name]) - TGS_ERROR_LOG("Custom command [command_name] can't be used as it is empty or contains illegal characters!") - warned_command_names[command_name] = TRUE - continue - - if(command_name_types[command_name]) - if(warnings_only) - TGS_ERROR_LOG("Custom commands [command_name_types[command_name]] and [stc] have the same name, only [command_name_types[command_name]] will be available!") - continue - command_name_types[stc] = command_name - - if(!warnings_only) - .[command_name] = list(SERVICE_JSON_PARAM_HELPTEXT = initial(stc.help_text), SERVICE_JSON_PARAM_ADMINONLY = initial(stc.admin_only), SERVICE_JSON_PARAM_REQUIREDPARAMETERS = 0) - -/datum/tgs_api/v3210/proc/HandleServiceCustomCommand(command, sender, params) - if(!cached_custom_tgs_chat_commands) - cached_custom_tgs_chat_commands = list() - for(var/I in typesof(/datum/tgs_chat_command) - /datum/tgs_chat_command) - var/datum/tgs_chat_command/stc = I - cached_custom_tgs_chat_commands[lowertext(initial(stc.name))] = stc - - var/command_type = cached_custom_tgs_chat_commands[command] - if(!command_type) - return FALSE - var/datum/tgs_chat_command/stc = new command_type - var/datum/tgs_chat_user/user = new - user.friendly_name = sender - - // Discord hack, fix the mention if it's only numbers (fuck you IRC trolls) - var/regex/discord_id_regex = regex(@"^[0-9]+$") - if(findtext(sender, discord_id_regex)) - sender = "<@[sender]>" - - user.mention = sender - return stc.Run(user, params) || TRUE diff --git a/code/modules/TGS/tgs/v4/README.md b/code/modules/TGS/tgs/v4/README.md deleted file mode 100644 index 78191447b276f..0000000000000 --- a/code/modules/TGS/tgs/v4/README.md +++ /dev/null @@ -1,6 +0,0 @@ -# DMAPI V4 - -This DMAPI implements bridge requests using file output which TGS monitors for. It has a safe mode restriction. - -- [api.dm](./api.dm) contains the bulk of the API code. -- [commands.dm](./commands.dm) contains functions relating to `/datum/tgs_chat_command`s. diff --git a/code/modules/TGS/tgs/v4/api.dm b/code/modules/TGS/tgs/v4/api.dm deleted file mode 100644 index 0e37a7aa24c0d..0000000000000 --- a/code/modules/TGS/tgs/v4/api.dm +++ /dev/null @@ -1,309 +0,0 @@ -#define TGS4_PARAM_INFO_JSON "tgs_json" - -#define TGS4_INTEROP_ACCESS_IDENTIFIER "tgs_tok" - -#define TGS4_RESPONSE_SUCCESS "tgs_succ" - -#define TGS4_TOPIC_CHANGE_PORT "tgs_port" -#define TGS4_TOPIC_CHANGE_REBOOT_MODE "tgs_rmode" -#define TGS4_TOPIC_CHAT_COMMAND "tgs_chat_comm" -#define TGS4_TOPIC_EVENT "tgs_event" -#define TGS4_TOPIC_INTEROP_RESPONSE "tgs_interop" - -#define TGS4_COMM_NEW_PORT "tgs_new_port" -#define TGS4_COMM_VALIDATE "tgs_validate" -#define TGS4_COMM_SERVER_PRIMED "tgs_prime" -#define TGS4_COMM_WORLD_REBOOT "tgs_reboot" -#define TGS4_COMM_END_PROCESS "tgs_kill" -#define TGS4_COMM_CHAT "tgs_chat_send" - -#define TGS4_PARAMETER_COMMAND "tgs_com" -#define TGS4_PARAMETER_DATA "tgs_data" - -#define TGS4_PORT_CRITFAIL_MESSAGE " Must exit to let watchdog reboot..." - -#define EXPORT_TIMEOUT_DS 200 - -/datum/tgs_api/v4 - var/access_identifier - var/instance_name - var/json_path - var/chat_channels_json_path - var/chat_commands_json_path - var/server_commands_json_path - var/reboot_mode = TGS_REBOOT_MODE_NORMAL - var/security_level - - var/requesting_new_port = FALSE - - var/list/intercepted_message_queue - - var/list/custom_commands - - var/list/cached_test_merges - var/datum/tgs_revision_information/cached_revision - - var/export_lock = FALSE - var/list/last_interop_response - -/datum/tgs_api/v4/ApiVersion() - return new /datum/tgs_version("4.0.0.0") - -/datum/tgs_api/v4/OnWorldNew(minimum_required_security_level) - if(minimum_required_security_level == TGS_SECURITY_ULTRASAFE) - TGS_WARNING_LOG("V4 DMAPI requires safe security!") - minimum_required_security_level = TGS_SECURITY_SAFE - - json_path = world.params[TGS4_PARAM_INFO_JSON] - if(!json_path) - TGS_ERROR_LOG("Missing [TGS4_PARAM_INFO_JSON] world parameter!") - return - var/json_file = file2text(json_path) - if(!json_file) - TGS_ERROR_LOG("Missing specified json file: [json_path]") - return - var/cached_json = json_decode(json_file) - if(!cached_json) - TGS_ERROR_LOG("Failed to decode info json: [json_file]") - return - - access_identifier = cached_json["accessIdentifier"] - server_commands_json_path = cached_json["serverCommandsJson"] - - if(cached_json["apiValidateOnly"]) - TGS_INFO_LOG("Validating API and exiting...") - Export(TGS4_COMM_VALIDATE, list(TGS4_PARAMETER_DATA = "[minimum_required_security_level]")) - del(world) - - security_level = cached_json["securityLevel"] - chat_channels_json_path = cached_json["chatChannelsJson"] - chat_commands_json_path = cached_json["chatCommandsJson"] - instance_name = cached_json["instanceName"] - - ListCustomCommands() - - var/list/revisionData = cached_json["revision"] - if(revisionData) - cached_revision = new - cached_revision.commit = revisionData["commitSha"] - cached_revision.origin_commit = revisionData["originCommitSha"] - - cached_test_merges = list() - var/list/json = cached_json["testMerges"] - for(var/entry in json) - var/datum/tgs_revision_information/test_merge/tm = new - tm.timestamp = text2num(entry["timeMerged"]) - - var/list/revInfo = entry["revision"] - if(revInfo) - tm.commit = revInfo["commitSha"] - tm.origin_commit = revInfo["originCommitSha"] - - tm.title = entry["titleAtMerge"] - tm.body = entry["bodyAtMerge"] - tm.url = entry["url"] - tm.author = entry["author"] - tm.number = entry["number"] - tm.head_commit = entry["pullRequestRevision"] - tm.comment = entry["comment"] - - cached_test_merges += tm - - return TRUE - -/datum/tgs_api/v4/OnInitializationComplete() - Export(TGS4_COMM_SERVER_PRIMED) - -/datum/tgs_api/v4/OnTopic(T) - var/list/params = params2list(T) - var/their_sCK = params[TGS4_INTEROP_ACCESS_IDENTIFIER] - if(!their_sCK) - return FALSE //continue world/Topic - - if(their_sCK != access_identifier) - return "Invalid comms key!"; - - var/command = params[TGS4_PARAMETER_COMMAND] - if(!command) - return "No command!" - - . = TGS4_RESPONSE_SUCCESS - - switch(command) - if(TGS4_TOPIC_CHAT_COMMAND) - var/result = HandleCustomCommand(params[TGS4_PARAMETER_DATA]) - if(result == null) - result = "Error running chat command!" - return result - if(TGS4_TOPIC_EVENT) - intercepted_message_queue = list() - var/list/event_notification = json_decode(params[TGS4_PARAMETER_DATA]) - var/list/event_parameters = event_notification["Parameters"] - - var/list/event_call = list(event_notification["Type"]) - if(event_parameters) - event_call += event_parameters - - if(event_handler != null) - event_handler.HandleEvent(arglist(event_call)) - - . = json_encode(intercepted_message_queue) - intercepted_message_queue = null - return - if(TGS4_TOPIC_INTEROP_RESPONSE) - last_interop_response = json_decode(params[TGS4_PARAMETER_DATA]) - return - if(TGS4_TOPIC_CHANGE_PORT) - var/new_port = text2num(params[TGS4_PARAMETER_DATA]) - if (!(new_port > 0)) - return "Invalid port: [new_port]" - - //the topic still completes, miraculously - //I honestly didn't believe byond could do it - if(event_handler != null) - event_handler.HandleEvent(TGS_EVENT_PORT_SWAP, new_port) - if(!world.OpenPort(new_port)) - return "Port change failed!" - return - if(TGS4_TOPIC_CHANGE_REBOOT_MODE) - var/new_reboot_mode = text2num(params[TGS4_PARAMETER_DATA]) - if(event_handler != null) - event_handler.HandleEvent(TGS_EVENT_REBOOT_MODE_CHANGE, reboot_mode, new_reboot_mode) - reboot_mode = new_reboot_mode - return - - return "Unknown command: [command]" - -/datum/tgs_api/v4/proc/Export(command, list/data, override_requesting_new_port = FALSE) - if(!data) - data = list() - data[TGS4_PARAMETER_COMMAND] = command - var/json = json_encode(data) - - while(requesting_new_port && !override_requesting_new_port) - sleep(1) - - //we need some port open at this point to facilitate return communication - if(!world.port) - requesting_new_port = TRUE - if(!world.OpenPort(0)) //open any port - TGS_ERROR_LOG("Unable to open random port to retrieve new port![TGS4_PORT_CRITFAIL_MESSAGE]") - del(world) - - //request a new port - export_lock = FALSE - var/list/new_port_json = Export(TGS4_COMM_NEW_PORT, list(TGS4_PARAMETER_DATA = "[world.port]"), TRUE) //stringify this on purpose - - if(!new_port_json) - TGS_ERROR_LOG("No new port response from server![TGS4_PORT_CRITFAIL_MESSAGE]") - del(world) - - var/new_port = new_port_json[TGS4_PARAMETER_DATA] - if(!isnum(new_port) || new_port <= 0) - TGS_ERROR_LOG("Malformed new port json ([json_encode(new_port_json)])![TGS4_PORT_CRITFAIL_MESSAGE]") - del(world) - - if(new_port != world.port && !world.OpenPort(new_port)) - TGS_ERROR_LOG("Unable to open port [new_port]![TGS4_PORT_CRITFAIL_MESSAGE]") - del(world) - requesting_new_port = FALSE - - while(export_lock) - sleep(1) - export_lock = TRUE - - last_interop_response = null - fdel(server_commands_json_path) - text2file(json, server_commands_json_path) - - for(var/I = 0; I < EXPORT_TIMEOUT_DS && !last_interop_response; ++I) - sleep(1) - - if(!last_interop_response) - TGS_ERROR_LOG("Failed to get export result for: [json]") - else - . = last_interop_response - - export_lock = FALSE - -/datum/tgs_api/v4/OnReboot() - var/list/result = Export(TGS4_COMM_WORLD_REBOOT) - if(!result) - return - - //okay so the standard TGS4 proceedure is: right before rebooting change the port to whatever was sent to us in the above json's data parameter - - var/port = result[TGS4_PARAMETER_DATA] - if(!isnum(port)) - return //this is valid, server may just want use to reboot - - if(port == 0) - //to byond 0 means any port and "none" means close vOv - port = "none" - - if(!world.OpenPort(port)) - TGS_ERROR_LOG("Unable to set port to [port]!") - -/datum/tgs_api/v4/InstanceName() - return instance_name - -/datum/tgs_api/v4/TestMerges() - return cached_test_merges.Copy() - -/datum/tgs_api/v4/EndProcess() - Export(TGS4_COMM_END_PROCESS) - -/datum/tgs_api/v4/Revision() - return cached_revision - -/datum/tgs_api/v4/ChatBroadcast(message, list/channels) - var/list/ids - if(length(channels)) - ids = list() - for(var/I in channels) - var/datum/tgs_chat_channel/channel = I - ids += channel.id - message = list("message" = message, "channelIds" = ids) - if(intercepted_message_queue) - intercepted_message_queue += list(message) - else - Export(TGS4_COMM_CHAT, message) - -/datum/tgs_api/v4/ChatTargetedBroadcast(message, admin_only) - var/list/channels = list() - for(var/I in ChatChannelInfo()) - var/datum/tgs_chat_channel/channel = I - if (!channel.is_private_channel && ((channel.is_admin_channel && admin_only) || (!channel.is_admin_channel && !admin_only))) - channels += channel.id - message = list("message" = message, "channelIds" = channels) - if(intercepted_message_queue) - intercepted_message_queue += list(message) - else - Export(TGS4_COMM_CHAT, message) - -/datum/tgs_api/v4/ChatPrivateMessage(message, datum/tgs_chat_user/user) - message = list("message" = message, "channelIds" = list(user.channel.id)) - if(intercepted_message_queue) - intercepted_message_queue += list(message) - else - Export(TGS4_COMM_CHAT, message) - -/datum/tgs_api/v4/ChatChannelInfo() - . = list() - //no caching cause tgs may change this - var/list/json = json_decode(file2text(chat_channels_json_path)) - for(var/I in json) - . += DecodeChannel(I) - -/datum/tgs_api/v4/proc/DecodeChannel(channel_json) - var/datum/tgs_chat_channel/channel = new - channel.id = channel_json["id"] - channel.friendly_name = channel_json["friendlyName"] - channel.connection_name = channel_json["connectionName"] - channel.is_admin_channel = channel_json["isAdminChannel"] - channel.is_private_channel = channel_json["isPrivateChannel"] - channel.custom_tag = channel_json["tag"] - return channel - -/datum/tgs_api/v4/SecurityLevel() - return security_level diff --git a/code/modules/TGS/tgs/v4/commands.dm b/code/modules/TGS/tgs/v4/commands.dm deleted file mode 100644 index 4ca1500167b19..0000000000000 --- a/code/modules/TGS/tgs/v4/commands.dm +++ /dev/null @@ -1,41 +0,0 @@ -/datum/tgs_api/v4/proc/ListCustomCommands() - var/results = list() - custom_commands = list() - for(var/I in typesof(/datum/tgs_chat_command) - /datum/tgs_chat_command) - var/datum/tgs_chat_command/stc = new I - var/command_name = stc.name - if(!command_name || findtext(command_name, " ") || findtext(command_name, "'") || findtext(command_name, "\"")) - TGS_ERROR_LOG("Custom command [command_name] ([I]) can't be used as it is empty or contains illegal characters!") - continue - - if(results[command_name]) - var/datum/other = custom_commands[command_name] - TGS_ERROR_LOG("Custom commands [other.type] and [I] have the same name (\"[command_name]\"), only [other.type] will be available!") - continue - results += list(list("name" = command_name, "help_text" = stc.help_text, "admin_only" = stc.admin_only)) - custom_commands[command_name] = stc - - var/commands_file = chat_commands_json_path - if(!commands_file) - return - text2file(json_encode(results), commands_file) - -/datum/tgs_api/v4/proc/HandleCustomCommand(command_json) - var/list/data = json_decode(command_json) - var/command = data["command"] - var/user = data["user"] - var/params = data["params"] - - var/datum/tgs_chat_user/u = new - u.id = user["id"] - u.friendly_name = user["friendlyName"] - u.mention = user["mention"] - u.channel = DecodeChannel(user["channel"]) - - var/datum/tgs_chat_command/sc = custom_commands[command] - if(sc) - var/result = sc.Run(u, params) - if(result == null) - result = "" - return result - return "Unknown command: [command]!" diff --git a/code/modules/TGS/tgs/v5/README.md b/code/modules/TGS/tgs/v5/README.md deleted file mode 100644 index 5b48d57a1f07f..0000000000000 --- a/code/modules/TGS/tgs/v5/README.md +++ /dev/null @@ -1,8 +0,0 @@ -# DMAPI V5 - -This DMAPI implements bridge requests using HTTP GET requests to TGS. It has no security restrictions. - -- [_defines.dm](./_defines.dm) contains constant definitions. -- [api.dm](./api.dm) contains the bulk of the API code. -- [commands.dm](./commands.dm) contains functions relating to `/datum/tgs_chat_command`s. -- [undefs.dm](./undefs.dm) Undoes the work of `_defines.dm`. diff --git a/code/modules/TGS/tgs/v5/_defines.dm b/code/modules/TGS/tgs/v5/_defines.dm deleted file mode 100644 index 10bc4cbe40606..0000000000000 --- a/code/modules/TGS/tgs/v5/_defines.dm +++ /dev/null @@ -1,99 +0,0 @@ -#define DMAPI5_PARAM_SERVER_PORT "tgs_port" -#define DMAPI5_PARAM_ACCESS_IDENTIFIER "tgs_key" - -#define DMAPI5_BRIDGE_DATA "data" -#define DMAPI5_TOPIC_DATA "tgs_data" - -#define DMAPI5_BRIDGE_COMMAND_PORT_UPDATE 0 -#define DMAPI5_BRIDGE_COMMAND_STARTUP 1 -#define DMAPI5_BRIDGE_COMMAND_PRIME 2 -#define DMAPI5_BRIDGE_COMMAND_REBOOT 3 -#define DMAPI5_BRIDGE_COMMAND_KILL 4 -#define DMAPI5_BRIDGE_COMMAND_CHAT_SEND 5 - -#define DMAPI5_PARAMETER_ACCESS_IDENTIFIER "accessIdentifier" -#define DMAPI5_PARAMETER_CUSTOM_COMMANDS "customCommands" - -#define DMAPI5_RESPONSE_ERROR_MESSAGE "errorMessage" - -#define DMAPI5_BRIDGE_PARAMETER_COMMAND_TYPE "commandType" -#define DMAPI5_BRIDGE_PARAMETER_CURRENT_PORT "currentPort" -#define DMAPI5_BRIDGE_PARAMETER_VERSION "version" -#define DMAPI5_BRIDGE_PARAMETER_CHAT_MESSAGE "chatMessage" -#define DMAPI5_BRIDGE_PARAMETER_MINIMUM_SECURITY_LEVEL "minimumSecurityLevel" - -#define DMAPI5_BRIDGE_RESPONSE_NEW_PORT "newPort" -#define DMAPI5_BRIDGE_RESPONSE_RUNTIME_INFORMATION "runtimeInformation" - -#define DMAPI5_CHAT_MESSAGE_TEXT "text" -#define DMAPI5_CHAT_MESSAGE_CHANNEL_IDS "channelIds" - -#define DMAPI5_RUNTIME_INFORMATION_ACCESS_IDENTIFIER "accessIdentifier" -#define DMAPI5_RUNTIME_INFORMATION_SERVER_VERSION "serverVersion" -#define DMAPI5_RUNTIME_INFORMATION_SERVER_PORT "serverPort" -#define DMAPI5_RUNTIME_INFORMATION_API_VALIDATE_ONLY "apiValidateOnly" -#define DMAPI5_RUNTIME_INFORMATION_INSTANCE_NAME "instanceName" -#define DMAPI5_RUNTIME_INFORMATION_REVISION "revision" -#define DMAPI5_RUNTIME_INFORMATION_TEST_MERGES "testMerges" -#define DMAPI5_RUNTIME_INFORMATION_SECURITY_LEVEL "securityLevel" - -#define DMAPI5_CHAT_UPDATE_CHANNELS "channels" - -#define DMAPI5_TEST_MERGE_TIME_MERGED "timeMerged" -#define DMAPI5_TEST_MERGE_REVISION "revision" -#define DMAPI5_TEST_MERGE_TITLE_AT_MERGE "titleAtMerge" -#define DMAPI5_TEST_MERGE_BODY_AT_MERGE "bodyAtMerge" -#define DMAPI5_TEST_MERGE_URL "url" -#define DMAPI5_TEST_MERGE_AUTHOR "author" -#define DMAPI5_TEST_MERGE_NUMBER "number" -#define DMAPI5_TEST_MERGE_PULL_REQUEST_REVISION "pullRequestRevision" -#define DMAPI5_TEST_MERGE_COMMENT "comment" - -#define DMAPI5_CHAT_COMMAND_NAME "name" -#define DMAPI5_CHAT_COMMAND_PARAMS "params" -#define DMAPI5_CHAT_COMMAND_USER "user" - -#define DMAPI5_EVENT_NOTIFICATION_TYPE "type" -#define DMAPI5_EVENT_NOTIFICATION_PARAMETERS "parameters" - -#define DMAPI5_TOPIC_COMMAND_CHAT_COMMAND 0 -#define DMAPI5_TOPIC_COMMAND_EVENT_NOTIFICATION 1 -#define DMAPI5_TOPIC_COMMAND_CHANGE_PORT 2 -#define DMAPI5_TOPIC_COMMAND_CHANGE_REBOOT_STATE 3 -#define DMAPI5_TOPIC_COMMAND_INSTANCE_RENAMED 4 -#define DMAPI5_TOPIC_COMMAND_CHAT_CHANNELS_UPDATE 5 -#define DMAPI5_TOPIC_COMMAND_SERVER_PORT_UPDATE 6 -#define DMAPI5_TOPIC_COMMAND_HEARTBEAT 7 -#define DMAPI5_TOPIC_COMMAND_WATCHDOG_REATTACH 8 - -#define DMAPI5_TOPIC_PARAMETER_COMMAND_TYPE "commandType" -#define DMAPI5_TOPIC_PARAMETER_CHAT_COMMAND "chatCommand" -#define DMAPI5_TOPIC_PARAMETER_EVENT_NOTIFICATION "eventNotification" -#define DMAPI5_TOPIC_PARAMETER_NEW_PORT "newPort" -#define DMAPI5_TOPIC_PARAMETER_NEW_REBOOT_STATE "newRebootState" -#define DMAPI5_TOPIC_PARAMETER_NEW_INSTANCE_NAME "newInstanceName" -#define DMAPI5_TOPIC_PARAMETER_CHAT_UPDATE "chatUpdate" -#define DMAPI5_TOPIC_PARAMETER_NEW_SERVER_VERSION "newServerVersion" - -#define DMAPI5_TOPIC_RESPONSE_COMMAND_RESPONSE_MESSAGE "commandResponseMessage" -#define DMAPI5_TOPIC_RESPONSE_CHAT_RESPONSES "chatResponses" - -#define DMAPI5_REVISION_INFORMATION_COMMIT_SHA "commitSha" -#define DMAPI5_REVISION_INFORMATION_TIMESTAMP "timestamp" -#define DMAPI5_REVISION_INFORMATION_ORIGIN_COMMIT_SHA "originCommitSha" - -#define DMAPI5_CHAT_USER_ID "id" -#define DMAPI5_CHAT_USER_FRIENDLY_NAME "friendlyName" -#define DMAPI5_CHAT_USER_MENTION "mention" -#define DMAPI5_CHAT_USER_CHANNEL "channel" - -#define DMAPI5_CHAT_CHANNEL_ID "id" -#define DMAPI5_CHAT_CHANNEL_FRIENDLY_NAME "friendlyName" -#define DMAPI5_CHAT_CHANNEL_CONNECTION_NAME "connectionName" -#define DMAPI5_CHAT_CHANNEL_IS_ADMIN_CHANNEL "isAdminChannel" -#define DMAPI5_CHAT_CHANNEL_IS_PRIVATE_CHANNEL "isPrivateChannel" -#define DMAPI5_CHAT_CHANNEL_TAG "tag" - -#define DMAPI5_CUSTOM_CHAT_COMMAND_NAME "name" -#define DMAPI5_CUSTOM_CHAT_COMMAND_HELP_TEXT "helpText" -#define DMAPI5_CUSTOM_CHAT_COMMAND_ADMIN_ONLY "adminOnly" diff --git a/code/modules/TGS/tgs/v5/api.dm b/code/modules/TGS/tgs/v5/api.dm deleted file mode 100644 index 572944ed401e9..0000000000000 --- a/code/modules/TGS/tgs/v5/api.dm +++ /dev/null @@ -1,361 +0,0 @@ -/datum/tgs_api/v5 - var/server_port - var/access_identifier - - var/instance_name - var/security_level - - var/reboot_mode = TGS_REBOOT_MODE_NORMAL - - var/list/intercepted_message_queue - - var/list/custom_commands - - var/list/test_merges - var/datum/tgs_revision_information/revision - var/list/chat_channels - - var/initialized = FALSE - -/datum/tgs_api/v5/ApiVersion() - return new /datum/tgs_version( - #include "interop_version.dm" - ) - -/datum/tgs_api/v5/OnWorldNew(minimum_required_security_level) - server_port = world.params[DMAPI5_PARAM_SERVER_PORT] - access_identifier = world.params[DMAPI5_PARAM_ACCESS_IDENTIFIER] - - var/datum/tgs_version/api_version = ApiVersion() - version = null - var/list/bridge_response = Bridge(DMAPI5_BRIDGE_COMMAND_STARTUP, list(DMAPI5_BRIDGE_PARAMETER_MINIMUM_SECURITY_LEVEL = minimum_required_security_level, DMAPI5_BRIDGE_PARAMETER_VERSION = api_version.raw_parameter, DMAPI5_PARAMETER_CUSTOM_COMMANDS = ListCustomCommands())) - if(!istype(bridge_response)) - TGS_ERROR_LOG("Failed initial bridge request!") - return FALSE - - var/list/runtime_information = bridge_response[DMAPI5_BRIDGE_RESPONSE_RUNTIME_INFORMATION] - if(!istype(runtime_information)) - TGS_ERROR_LOG("Failed to decode runtime information from bridge response: [json_encode(bridge_response)]!") - return FALSE - - if(runtime_information[DMAPI5_RUNTIME_INFORMATION_API_VALIDATE_ONLY]) - TGS_INFO_LOG("DMAPI validation, exiting...") - del(world) - - version = new /datum/tgs_version(runtime_information[DMAPI5_RUNTIME_INFORMATION_SERVER_VERSION]) - security_level = runtime_information[DMAPI5_RUNTIME_INFORMATION_SECURITY_LEVEL] - instance_name = runtime_information[DMAPI5_RUNTIME_INFORMATION_INSTANCE_NAME] - - var/list/revisionData = runtime_information[DMAPI5_RUNTIME_INFORMATION_REVISION] - if(istype(revisionData)) - revision = new - revision.commit = revisionData[DMAPI5_REVISION_INFORMATION_COMMIT_SHA] - revision.timestamp = revisionData[DMAPI5_REVISION_INFORMATION_TIMESTAMP] - revision.origin_commit = revisionData[DMAPI5_REVISION_INFORMATION_ORIGIN_COMMIT_SHA] - else - TGS_ERROR_LOG("Failed to decode [DMAPI5_RUNTIME_INFORMATION_REVISION] from runtime information!") - - test_merges = list() - var/list/test_merge_json = runtime_information[DMAPI5_RUNTIME_INFORMATION_TEST_MERGES] - if(istype(test_merge_json)) - for(var/entry in test_merge_json) - var/datum/tgs_revision_information/test_merge/tm = new - tm.number = entry[DMAPI5_TEST_MERGE_NUMBER] - - var/list/revInfo = entry[DMAPI5_TEST_MERGE_REVISION] - if(revInfo) - tm.commit = revisionData[DMAPI5_REVISION_INFORMATION_COMMIT_SHA] - tm.origin_commit = revisionData[DMAPI5_REVISION_INFORMATION_ORIGIN_COMMIT_SHA] - tm.timestamp = entry[DMAPI5_REVISION_INFORMATION_TIMESTAMP] - else - TGS_WARNING_LOG("Failed to decode [DMAPI5_TEST_MERGE_REVISION] from test merge #[tm.number]!") - - if(!tm.timestamp) - tm.timestamp = entry[DMAPI5_TEST_MERGE_TIME_MERGED] - - tm.title = entry[DMAPI5_TEST_MERGE_TITLE_AT_MERGE] - tm.body = entry[DMAPI5_TEST_MERGE_BODY_AT_MERGE] - tm.url = entry[DMAPI5_TEST_MERGE_URL] - tm.author = entry[DMAPI5_TEST_MERGE_AUTHOR] - tm.head_commit = entry[DMAPI5_TEST_MERGE_PULL_REQUEST_REVISION] - tm.comment = entry[DMAPI5_TEST_MERGE_COMMENT] - - test_merges += tm - else - TGS_WARNING_LOG("Failed to decode [DMAPI5_RUNTIME_INFORMATION_TEST_MERGES] from runtime information!") - - chat_channels = list() - DecodeChannels(runtime_information) - - initialized = TRUE - return TRUE - -/datum/tgs_api/v5/proc/RequireInitialBridgeResponse() - while(!version) - sleep(1) - -/datum/tgs_api/v5/OnInitializationComplete() - Bridge(DMAPI5_BRIDGE_COMMAND_PRIME) - -/datum/tgs_api/v5/proc/TopicResponse(error_message = null) - var/list/response = list() - response[DMAPI5_RESPONSE_ERROR_MESSAGE] = error_message - - return json_encode(response) - -/datum/tgs_api/v5/OnTopic(T) - var/list/params = params2list(T) - var/json = params[DMAPI5_TOPIC_DATA] - if(!json) - return FALSE // continue to /world/Topic - - var/list/topic_parameters = json_decode(json) - if(!topic_parameters) - return TopicResponse("Invalid topic parameters json!"); - - if(!initialized) - TGS_WARNING_LOG("Missed topic due to not being initialized: [T]") - return TRUE // too early to handle, but it's still our responsibility - - var/their_sCK = topic_parameters[DMAPI5_PARAMETER_ACCESS_IDENTIFIER] - if(their_sCK != access_identifier) - return TopicResponse("Failed to decode [DMAPI5_PARAMETER_ACCESS_IDENTIFIER] from: [json]!"); - - var/command = topic_parameters[DMAPI5_TOPIC_PARAMETER_COMMAND_TYPE] - if(!isnum(command)) - return TopicResponse("Failed to decode [DMAPI5_TOPIC_PARAMETER_COMMAND_TYPE] from: [json]!") - - switch(command) - if(DMAPI5_TOPIC_COMMAND_CHAT_COMMAND) - var/result = HandleCustomCommand(topic_parameters[DMAPI5_TOPIC_PARAMETER_CHAT_COMMAND]) - if(!result) - result = TopicResponse("Error running chat command!") - return result - if(DMAPI5_TOPIC_COMMAND_EVENT_NOTIFICATION) - intercepted_message_queue = list() - var/list/event_notification = topic_parameters[DMAPI5_TOPIC_PARAMETER_EVENT_NOTIFICATION] - if(!istype(event_notification)) - return TopicResponse("Invalid [DMAPI5_TOPIC_PARAMETER_EVENT_NOTIFICATION]!") - - var/event_type = event_notification[DMAPI5_EVENT_NOTIFICATION_TYPE] - if(!isnum(event_type)) - return TopicResponse("Invalid or missing [DMAPI5_EVENT_NOTIFICATION_TYPE]!") - - var/list/event_parameters = event_notification[DMAPI5_EVENT_NOTIFICATION_PARAMETERS] - if(event_parameters && !istype(event_parameters)) - return TopicResponse("Invalid or missing [DMAPI5_EVENT_NOTIFICATION_PARAMETERS]!") - - var/list/event_call = list(event_type) - if(event_parameters) - event_call += event_parameters - - if(event_handler != null) - event_handler.HandleEvent(arglist(event_call)) - - var/list/response = list() - response[DMAPI5_TOPIC_RESPONSE_CHAT_RESPONSES] = intercepted_message_queue - intercepted_message_queue = null - return json_encode(response) - if(DMAPI5_TOPIC_COMMAND_CHANGE_PORT) - var/new_port = topic_parameters[DMAPI5_TOPIC_PARAMETER_NEW_PORT] - if (!isnum(new_port) || !(new_port > 0)) - return TopicResponse("Invalid or missing [DMAPI5_TOPIC_PARAMETER_NEW_PORT]]") - - if(event_handler != null) - event_handler.HandleEvent(TGS_EVENT_PORT_SWAP, new_port) - - //the topic still completes, miraculously - //I honestly didn't believe byond could do it without exploding - if(!world.OpenPort(new_port)) - return TopicResponse("Port change failed!") - - return TopicResponse() - if(DMAPI5_TOPIC_COMMAND_CHANGE_REBOOT_STATE) - var/new_reboot_mode = topic_parameters[DMAPI5_TOPIC_PARAMETER_NEW_REBOOT_STATE] - if(!isnum(new_reboot_mode)) - return TopicResponse("Invalid or missing [DMAPI5_TOPIC_PARAMETER_NEW_REBOOT_STATE]!") - - if(event_handler != null) - event_handler.HandleEvent(TGS_EVENT_REBOOT_MODE_CHANGE, reboot_mode, new_reboot_mode) - - reboot_mode = new_reboot_mode - return TopicResponse() - if(DMAPI5_TOPIC_COMMAND_INSTANCE_RENAMED) - var/new_instance_name = topic_parameters[DMAPI5_TOPIC_PARAMETER_NEW_INSTANCE_NAME] - if(!istext(new_instance_name)) - return TopicResponse("Invalid or missing [DMAPI5_TOPIC_PARAMETER_NEW_INSTANCE_NAME]!") - - if(event_handler != null) - event_handler.HandleEvent(TGS_EVENT_INSTANCE_RENAMED, new_instance_name) - - instance_name = new_instance_name - return TopicResponse() - if(DMAPI5_TOPIC_COMMAND_CHAT_CHANNELS_UPDATE) - var/list/chat_update_json = topic_parameters[DMAPI5_TOPIC_PARAMETER_CHAT_UPDATE] - if(!istype(chat_update_json)) - return TopicResponse("Invalid or missing [DMAPI5_TOPIC_PARAMETER_CHAT_UPDATE]!") - - DecodeChannels(chat_update_json) - return TopicResponse() - if(DMAPI5_TOPIC_COMMAND_SERVER_PORT_UPDATE) - var/new_port = topic_parameters[DMAPI5_TOPIC_PARAMETER_NEW_PORT] - if (!isnum(new_port) || !(new_port > 0)) - return TopicResponse("Invalid or missing [DMAPI5_TOPIC_PARAMETER_NEW_PORT]]") - - server_port = new_port - return TopicResponse() - if(DMAPI5_TOPIC_COMMAND_HEARTBEAT) - return TopicResponse() - if(DMAPI5_TOPIC_COMMAND_WATCHDOG_REATTACH) - var/new_port = topic_parameters[DMAPI5_TOPIC_PARAMETER_NEW_PORT] - var/error_message = null - if (new_port != null) - if (!isnum(new_port) || !(new_port > 0)) - error_message = "Invalid [DMAPI5_TOPIC_PARAMETER_NEW_PORT]]" - else - server_port = new_port - - var/new_version_string = topic_parameters[DMAPI5_TOPIC_PARAMETER_NEW_SERVER_VERSION] - if (!istext(new_version_string)) - if(error_message != null) - error_message += ", " - error_message += "Invalid or missing [DMAPI5_TOPIC_PARAMETER_NEW_SERVER_VERSION]]" - else - var/datum/tgs_version/new_version = new(new_version_string) - if (event_handler) - event_handler.HandleEvent(TGS_EVENT_WATCHDOG_REATTACH, new_version) - - version = new_version - - return json_encode(list(DMAPI5_RESPONSE_ERROR_MESSAGE = error_message, DMAPI5_PARAMETER_CUSTOM_COMMANDS = ListCustomCommands())) - - return TopicResponse("Unknown command: [command]") - -/datum/tgs_api/v5/proc/Bridge(command, list/data) - if(!data) - data = list() - - data[DMAPI5_BRIDGE_PARAMETER_COMMAND_TYPE] = command - data[DMAPI5_PARAMETER_ACCESS_IDENTIFIER] = access_identifier - - var/json = json_encode(data) - var/encoded_json = url_encode(json) - - // This is an infinite sleep until we get a response - var/export_response = world.Export("http://127.0.0.1:[server_port]/Bridge?[DMAPI5_BRIDGE_DATA]=[encoded_json]") - if(!export_response) - TGS_ERROR_LOG("Failed export request: [json]") - return - - var/response_json = file2text(export_response["CONTENT"]) - if(!response_json) - TGS_ERROR_LOG("Failed export request, missing content!") - return - - var/list/bridge_response = json_decode(response_json) - if(!bridge_response) - TGS_ERROR_LOG("Failed export request, bad json: [response_json]") - return - - var/error = bridge_response[DMAPI5_RESPONSE_ERROR_MESSAGE] - if(error) - TGS_ERROR_LOG("Failed export request, bad request: [error]") - return - - return bridge_response - -/datum/tgs_api/v5/OnReboot() - var/list/result = Bridge(DMAPI5_BRIDGE_COMMAND_REBOOT) - if(!result) - return - - //okay so the standard TGS proceedure is: right before rebooting change the port to whatever was sent to us in the above json's data parameter - - var/port = result[DMAPI5_BRIDGE_RESPONSE_NEW_PORT] - if(!isnum(port)) - return //this is valid, server may just want use to reboot - - if(port == 0) - //to byond 0 means any port and "none" means close vOv - port = "none" - - if(!world.OpenPort(port)) - TGS_ERROR_LOG("Unable to set port to [port]!") - -/datum/tgs_api/v5/InstanceName() - RequireInitialBridgeResponse() - return instance_name - -/datum/tgs_api/v5/TestMerges() - RequireInitialBridgeResponse() - return test_merges.Copy() - -/datum/tgs_api/v5/EndProcess() - Bridge(DMAPI5_BRIDGE_COMMAND_KILL) - -/datum/tgs_api/v5/Revision() - RequireInitialBridgeResponse() - return revision - -/datum/tgs_api/v5/ChatBroadcast(message, list/channels) - if(!length(channels)) - channels = ChatChannelInfo() - - var/list/ids = list() - for(var/I in channels) - var/datum/tgs_chat_channel/channel = I - ids += channel.id - - message = list(DMAPI5_CHAT_MESSAGE_TEXT = message, DMAPI5_CHAT_MESSAGE_CHANNEL_IDS = ids) - if(intercepted_message_queue) - intercepted_message_queue += list(message) - else - Bridge(DMAPI5_BRIDGE_COMMAND_CHAT_SEND, list(DMAPI5_BRIDGE_PARAMETER_CHAT_MESSAGE = message)) - -/datum/tgs_api/v5/ChatTargetedBroadcast(message, admin_only) - var/list/channels = list() - for(var/I in ChatChannelInfo()) - var/datum/tgs_chat_channel/channel = I - if (!channel.is_private_channel && ((channel.is_admin_channel && admin_only) || (!channel.is_admin_channel && !admin_only))) - channels += channel.id - message = list(DMAPI5_CHAT_MESSAGE_TEXT = message, DMAPI5_CHAT_MESSAGE_CHANNEL_IDS = channels) - if(intercepted_message_queue) - intercepted_message_queue += list(message) - else - Bridge(DMAPI5_BRIDGE_COMMAND_CHAT_SEND, list(DMAPI5_BRIDGE_PARAMETER_CHAT_MESSAGE = message)) - -/datum/tgs_api/v5/ChatPrivateMessage(message, datum/tgs_chat_user/user) - message = list(DMAPI5_CHAT_MESSAGE_TEXT = message, DMAPI5_CHAT_MESSAGE_CHANNEL_IDS = list(user.channel.id)) - if(intercepted_message_queue) - intercepted_message_queue += list(message) - else - Bridge(DMAPI5_BRIDGE_COMMAND_CHAT_SEND, list(DMAPI5_BRIDGE_PARAMETER_CHAT_MESSAGE = message)) - -/datum/tgs_api/v5/ChatChannelInfo() - RequireInitialBridgeResponse() - return chat_channels.Copy() - -/datum/tgs_api/v5/proc/DecodeChannels(chat_update_json) - var/list/chat_channels_json = chat_update_json[DMAPI5_CHAT_UPDATE_CHANNELS] - if(istype(chat_channels_json)) - chat_channels.Cut() - for(var/channel_json in chat_channels_json) - var/datum/tgs_chat_channel/channel = DecodeChannel(channel_json) - if(channel) - chat_channels += channel - else - TGS_WARNING_LOG("Failed to decode [DMAPI5_CHAT_UPDATE_CHANNELS] from channel update!") - -/datum/tgs_api/v5/proc/DecodeChannel(channel_json) - var/datum/tgs_chat_channel/channel = new - channel.id = channel_json[DMAPI5_CHAT_CHANNEL_ID] - channel.friendly_name = channel_json[DMAPI5_CHAT_CHANNEL_FRIENDLY_NAME] - channel.connection_name = channel_json[DMAPI5_CHAT_CHANNEL_CONNECTION_NAME] - channel.is_admin_channel = channel_json[DMAPI5_CHAT_CHANNEL_IS_ADMIN_CHANNEL] - channel.is_private_channel = channel_json[DMAPI5_CHAT_CHANNEL_IS_PRIVATE_CHANNEL] - channel.custom_tag = channel_json[DMAPI5_CHAT_CHANNEL_TAG] - return channel - -/datum/tgs_api/v5/SecurityLevel() - RequireInitialBridgeResponse() - return security_level diff --git a/code/modules/TGS/tgs/v5/commands.dm b/code/modules/TGS/tgs/v5/commands.dm deleted file mode 100644 index 6d31dd3422dc9..0000000000000 --- a/code/modules/TGS/tgs/v5/commands.dm +++ /dev/null @@ -1,40 +0,0 @@ -/datum/tgs_api/v5/proc/ListCustomCommands() - var/results = list() - custom_commands = list() - for(var/I in typesof(/datum/tgs_chat_command) - /datum/tgs_chat_command) - var/datum/tgs_chat_command/stc = new I - var/command_name = stc.name - if(!command_name || findtext(command_name, " ") || findtext(command_name, "'") || findtext(command_name, "\"")) - TGS_WARNING_LOG("Custom command [command_name] ([I]) can't be used as it is empty or contains illegal characters!") - continue - - if(results[command_name]) - var/datum/other = custom_commands[command_name] - TGS_WARNING_LOG("Custom commands [other.type] and [I] have the same name (\"[command_name]\"), only [other.type] will be available!") - continue - results += list(list(DMAPI5_CUSTOM_CHAT_COMMAND_NAME = command_name, DMAPI5_CUSTOM_CHAT_COMMAND_HELP_TEXT = stc.help_text, DMAPI5_CUSTOM_CHAT_COMMAND_ADMIN_ONLY = stc.admin_only)) - custom_commands[command_name] = stc - - return results - -/datum/tgs_api/v5/proc/HandleCustomCommand(list/command_json) - var/command = command_json[DMAPI5_CHAT_COMMAND_NAME] - var/user = command_json[DMAPI5_CHAT_COMMAND_USER] - var/params = command_json[DMAPI5_CHAT_COMMAND_PARAMS] - - var/datum/tgs_chat_user/u = new - u.id = user[DMAPI5_CHAT_USER_ID] - u.friendly_name = user[DMAPI5_CHAT_USER_FRIENDLY_NAME] - u.mention = user[DMAPI5_CHAT_USER_MENTION] - u.channel = DecodeChannel(user[DMAPI5_CHAT_USER_CHANNEL]) - - var/datum/tgs_chat_command/sc = custom_commands[command] - if(sc) - var/text_response = sc.Run(u, params) - var/list/topic_response = list() - if(!istext(text_response)) - TGS_ERROR_LOG("Custom command [command] should return a string! Got: \"[text_response]\"") - text_response = null - topic_response[DMAPI5_TOPIC_RESPONSE_COMMAND_RESPONSE_MESSAGE] = text_response - return json_encode(topic_response) - return TopicResponse("Unknown custom chat command: [command]!") diff --git a/code/modules/TGS/tgs/v5/interop_version.dm b/code/modules/TGS/tgs/v5/interop_version.dm deleted file mode 100644 index c7bf62ecae353..0000000000000 --- a/code/modules/TGS/tgs/v5/interop_version.dm +++ /dev/null @@ -1 +0,0 @@ -"5.3.0" diff --git a/code/modules/TGS/tgs/v5/undefs.dm b/code/modules/TGS/tgs/v5/undefs.dm deleted file mode 100644 index 5885a60e75cea..0000000000000 --- a/code/modules/TGS/tgs/v5/undefs.dm +++ /dev/null @@ -1,99 +0,0 @@ -#undef DMAPI5_PARAM_SERVER_PORT -#undef DMAPI5_PARAM_ACCESS_IDENTIFIER - -#undef DMAPI5_BRIDGE_DATA -#undef DMAPI5_TOPIC_DATA - -#undef DMAPI5_BRIDGE_COMMAND_PORT_UPDATE -#undef DMAPI5_BRIDGE_COMMAND_STARTUP -#undef DMAPI5_BRIDGE_COMMAND_PRIME -#undef DMAPI5_BRIDGE_COMMAND_REBOOT -#undef DMAPI5_BRIDGE_COMMAND_KILL -#undef DMAPI5_BRIDGE_COMMAND_CHAT_SEND - -#undef DMAPI5_PARAMETER_ACCESS_IDENTIFIER -#undef DMAPI5_PARAMETER_CUSTOM_COMMANDS - -#undef DMAPI5_RESPONSE_ERROR_MESSAGE - -#undef DMAPI5_BRIDGE_PARAMETER_COMMAND_TYPE -#undef DMAPI5_BRIDGE_PARAMETER_CURRENT_PORT -#undef DMAPI5_BRIDGE_PARAMETER_VERSION -#undef DMAPI5_BRIDGE_PARAMETER_CHAT_MESSAGE -#undef DMAPI5_BRIDGE_PARAMETER_MINIMUM_SECURITY_LEVEL - -#undef DMAPI5_BRIDGE_RESPONSE_NEW_PORT -#undef DMAPI5_BRIDGE_RESPONSE_RUNTIME_INFORMATION - -#undef DMAPI5_CHAT_MESSAGE_TEXT -#undef DMAPI5_CHAT_MESSAGE_CHANNEL_IDS - -#undef DMAPI5_RUNTIME_INFORMATION_ACCESS_IDENTIFIER -#undef DMAPI5_RUNTIME_INFORMATION_SERVER_VERSION -#undef DMAPI5_RUNTIME_INFORMATION_SERVER_PORT -#undef DMAPI5_RUNTIME_INFORMATION_API_VALIDATE_ONLY -#undef DMAPI5_RUNTIME_INFORMATION_INSTANCE_NAME -#undef DMAPI5_RUNTIME_INFORMATION_REVISION -#undef DMAPI5_RUNTIME_INFORMATION_TEST_MERGES -#undef DMAPI5_RUNTIME_INFORMATION_SECURITY_LEVEL - -#undef DMAPI5_CHAT_UPDATE_CHANNELS - -#undef DMAPI5_TEST_MERGE_TIME_MERGED -#undef DMAPI5_TEST_MERGE_REVISION -#undef DMAPI5_TEST_MERGE_TITLE_AT_MERGE -#undef DMAPI5_TEST_MERGE_BODY_AT_MERGE -#undef DMAPI5_TEST_MERGE_URL -#undef DMAPI5_TEST_MERGE_AUTHOR -#undef DMAPI5_TEST_MERGE_NUMBER -#undef DMAPI5_TEST_MERGE_PULL_REQUEST_REVISION -#undef DMAPI5_TEST_MERGE_COMMENT - -#undef DMAPI5_CHAT_COMMAND_NAME -#undef DMAPI5_CHAT_COMMAND_PARAMS -#undef DMAPI5_CHAT_COMMAND_USER - -#undef DMAPI5_EVENT_NOTIFICATION_TYPE -#undef DMAPI5_EVENT_NOTIFICATION_PARAMETERS - -#undef DMAPI5_TOPIC_COMMAND_CHAT_COMMAND -#undef DMAPI5_TOPIC_COMMAND_EVENT_NOTIFICATION -#undef DMAPI5_TOPIC_COMMAND_CHANGE_PORT -#undef DMAPI5_TOPIC_COMMAND_CHANGE_REBOOT_STATE -#undef DMAPI5_TOPIC_COMMAND_INSTANCE_RENAMED -#undef DMAPI5_TOPIC_COMMAND_CHAT_CHANNELS_UPDATE -#undef DMAPI5_TOPIC_COMMAND_SERVER_PORT_UPDATE -#undef DMAPI5_TOPIC_COMMAND_HEARTBEAT -#undef DMAPI5_TOPIC_COMMAND_WATCHDOG_REATTACH - -#undef DMAPI5_TOPIC_PARAMETER_COMMAND_TYPE -#undef DMAPI5_TOPIC_PARAMETER_CHAT_COMMAND -#undef DMAPI5_TOPIC_PARAMETER_EVENT_NOTIFICATION -#undef DMAPI5_TOPIC_PARAMETER_NEW_PORT -#undef DMAPI5_TOPIC_PARAMETER_NEW_REBOOT_STATE -#undef DMAPI5_TOPIC_PARAMETER_NEW_INSTANCE_NAME -#undef DMAPI5_TOPIC_PARAMETER_CHAT_UPDATE -#undef DMAPI5_TOPIC_PARAMETER_NEW_SERVER_VERSION - -#undef DMAPI5_TOPIC_RESPONSE_COMMAND_RESPONSE_MESSAGE -#undef DMAPI5_TOPIC_RESPONSE_CHAT_RESPONSES - -#undef DMAPI5_REVISION_INFORMATION_COMMIT_SHA -#undef DMAPI5_REVISION_INFORMATION_TIMESTAMP -#undef DMAPI5_REVISION_INFORMATION_ORIGIN_COMMIT_SHA - -#undef DMAPI5_CHAT_USER_ID -#undef DMAPI5_CHAT_USER_FRIENDLY_NAME -#undef DMAPI5_CHAT_USER_MENTION -#undef DMAPI5_CHAT_USER_CHANNEL - -#undef DMAPI5_CHAT_CHANNEL_ID -#undef DMAPI5_CHAT_CHANNEL_FRIENDLY_NAME -#undef DMAPI5_CHAT_CHANNEL_CONNECTION_NAME -#undef DMAPI5_CHAT_CHANNEL_IS_ADMIN_CHANNEL -#undef DMAPI5_CHAT_CHANNEL_IS_PRIVATE_CHANNEL -#undef DMAPI5_CHAT_CHANNEL_TAG - -#undef DMAPI5_CUSTOM_CHAT_COMMAND_NAME -#undef DMAPI5_CUSTOM_CHAT_COMMAND_HELP_TEXT -#undef DMAPI5_CUSTOM_CHAT_COMMAND_ADMIN_ONLY diff --git a/code/modules/ZAS/Airflow.dm b/code/modules/ZAS/Airflow.dm deleted file mode 100644 index ae3d7ddd5a890..0000000000000 --- a/code/modules/ZAS/Airflow.dm +++ /dev/null @@ -1,152 +0,0 @@ -/* -Contains helper procs for airflow, handled in /connection_group. -*/ - -/mob/var/tmp/last_airflow_stun = 0 -/mob/proc/airflow_stun() - if(stat == 2) - return 0 - if(last_airflow_stun > world.time - vsc.airflow_stun_cooldown) return 0 - - if(!(status_flags & CANSTUN) && !(status_flags & CANWEAKEN)) - to_chat(src, "You stay upright as the air rushes past you.") - return 0 - if(buckled) - to_chat(src, "Air suddenly rushes past you!") - return 0 - if(!lying) - to_chat(src, "The sudden rush of air knocks you over!") - Weaken(5) - last_airflow_stun = world.time - -/mob/living/silicon/airflow_stun() - return - -/mob/living/carbon/slime/airflow_stun() - return - -/mob/living/carbon/human/airflow_stun() - if(!slip_chance()) - to_chat(src, "Air suddenly rushes past you!") - return 0 - ..() - -/atom/movable/proc/check_airflow_movable(n) - - if(anchored && !ismob(src)) return 0 - - if(!isobj(src) && n < vsc.airflow_dense_pressure) return 0 - - return 1 - -/mob/check_airflow_movable(n) - if(n < vsc.airflow_heavy_pressure) - return 0 - return 1 - -/mob/living/silicon/check_airflow_movable() - return 0 - - -/obj/check_airflow_movable(n) - if(isnull(w_class)) - if(n < vsc.airflow_dense_pressure) return 0 //most non-item objs don't have a w_class yet - else - switch(w_class) - if(1,2) - if(n < vsc.airflow_lightest_pressure) return 0 - if(3) - if(n < vsc.airflow_light_pressure) return 0 - if(4,5) - if(n < vsc.airflow_medium_pressure) return 0 - if(6) - if(n < vsc.airflow_heavy_pressure) return 0 - if(7 to INFINITY) - if(n < vsc.airflow_dense_pressure) return 0 - return ..() - - -/atom/movable/var/tmp/turf/airflow_dest -/atom/movable/var/tmp/airflow_speed = 0 -/atom/movable/var/tmp/airflow_time = 0 -/atom/movable/var/tmp/last_airflow = 0 -/atom/movable/var/tmp/airborne_acceleration = 0 - -/atom/movable/proc/AirflowCanMove(n) - return 1 - -/mob/AirflowCanMove(n) - if(status_flags & GODMODE) - return 0 - if(buckled) - return 0 - var/obj/item/shoes = get_equipped_item(slot_shoes) - if(istype(shoes) && (shoes.item_flags & ITEM_FLAG_NOSLIP)) - return 0 - return 1 - -/atom/movable/Bump(atom/A) - if(airflow_speed > 0 && airflow_dest) - if(airborne_acceleration > 1) - airflow_hit(A) - else if(istype(src, /mob/living/carbon/human)) - to_chat(src, "You are pinned against [A] by airflow!") - airborne_acceleration = 0 - else - airflow_speed = 0 - airflow_time = 0 - airborne_acceleration = 0 - . = ..() - -/atom/movable/proc/airflow_hit(atom/A) - airflow_speed = 0 - airflow_dest = null - airborne_acceleration = 0 - -/mob/airflow_hit(atom/A) - for(var/mob/M in hearers(src)) - M.show_message("\The [src] slams into \a [A]!",1,"You hear a loud slam!",2) - playsound(src.loc, "smash.ogg", 25, 1, -1) - var/weak_amt = istype(A,/obj/item) ? A:w_class : rand(1,5) //Heheheh - Weaken(weak_amt) - . = ..() - -/obj/airflow_hit(atom/A) - for(var/mob/M in hearers(src)) - M.show_message("\The [src] slams into \a [A]!",1,"You hear a loud slam!",2) - playsound(src.loc, "smash.ogg", 25, 1, -1) - . = ..() - -/obj/item/airflow_hit(atom/A) - airflow_speed = 0 - airflow_dest = null - -/mob/living/carbon/human/airflow_hit(atom/A) -// for(var/mob/M in hearers(src)) -// M.show_message("[src] slams into [A]!",1,"You hear a loud slam!",2) - playsound(src.loc, "punch", 25, 1, -1) - if (prob(33)) - loc:add_blood(src) - bloody_body(src) - var/b_loss = min(airflow_speed, (airborne_acceleration*2)) * vsc.airflow_damage - - apply_damage(b_loss/3, DAMAGE_BRUTE, BP_HEAD, used_weapon = "Airflow") - - apply_damage(b_loss/3, DAMAGE_BRUTE, BP_CHEST, used_weapon = "Airflow") - - apply_damage(b_loss/3, DAMAGE_BRUTE, BP_GROIN, used_weapon = "Airflow") - - if(airflow_speed > 10) - Paralyse(round(airflow_speed * vsc.airflow_stun)) - Stun(paralysis + 3) - else - Stun(round(airflow_speed * vsc.airflow_stun/2)) - . = ..() - -/zone/proc/movables() - . = list() - for(var/turf/T in contents) - for(var/atom/movable/A in T) - if(!A.simulated || A.anchored || istype(A, /obj/effect) || isobserver(A)) - continue - . += A diff --git a/code/modules/ZAS/Atom.dm b/code/modules/ZAS/Atom.dm deleted file mode 100644 index 497adc6405cd5..0000000000000 --- a/code/modules/ZAS/Atom.dm +++ /dev/null @@ -1,59 +0,0 @@ - -/atom/proc/CanPass(atom/movable/mover, turf/target, height=1.5, air_group = 0) - //Purpose: Determines if the object (or airflow) can pass this atom. - //Called by: Movement, airflow. - //Inputs: The moving atom (optional), target turf, "height" and air group - //Outputs: Boolean if can pass. - - return (!density || !height || air_group) - -/turf/CanPass(atom/movable/mover, turf/target, height=1.5,air_group=0) - if(!target) return 0 - - if(istype(mover)) // turf/Enter(...) will perform more advanced checks - return !density - - else // Now, doing more detailed checks for air movement and air group formation - if(target.blocks_air||blocks_air) - return 0 - - for(var/obj/obstacle in src) - if(!obstacle.CanPass(mover, target, height, air_group)) - return 0 - if(target != src) - for(var/obj/obstacle in target) - if(!obstacle.CanPass(mover, src, height, air_group)) - return 0 - - return 1 - -//Convenience function for atoms to update turfs they occupy -/atom/movable/proc/update_nearby_tiles(need_rebuild) - for(var/turf/simulated/turf in locs) - SSair.mark_for_update(turf) - - return 1 - -//Basically another way of calling CanPass(null, other, 0, 0) and CanPass(null, other, 1.5, 1). -//Returns: -// 0 - Not blocked -// AIR_BLOCKED - Blocked -// ZONE_BLOCKED - Not blocked, but zone boundaries will not cross. -// BLOCKED - Blocked, zone boundaries will not cross even if opened. -/atom/proc/c_airblock(turf/other) - #ifdef ZASDBG - ASSERT(isturf(other)) - #endif - return (AIR_BLOCKED*!CanPass(null, other, 0, 0))|(ZONE_BLOCKED*!CanPass(null, other, 1.5, 1)) - -// This is a legacy proc only here for compatibility - you probably should just use ATMOS_CANPASS_TURF directly. -/turf/c_airblock(turf/other) - #ifdef ZASDBG - ASSERT(isturf(other)) - #endif - - . = 0 - ATMOS_CANPASS_TURF(., src, other) - -/atom/movable - var/atmos_canpass = CANPASS_ALWAYS diff --git a/code/modules/ZAS/Connection.dm b/code/modules/ZAS/Connection.dm deleted file mode 100644 index 17c8ea162816f..0000000000000 --- a/code/modules/ZAS/Connection.dm +++ /dev/null @@ -1,168 +0,0 @@ -#define CONNECTION_DIRECT 2 -#define CONNECTION_SPACE 4 -#define CONNECTION_INVALID 8 - -/* - -Overview: - Connections are made between turfs by SSair.connect(). They represent a single point where two zones converge. - -Class Vars: - A - Always a simulated turf. - B - A simulated or unsimulated turf. - - zoneA - The archived zone of A. Used to check that the zone hasn't changed. - zoneB - The archived zone of B. May be null in case of unsimulated connections. - - edge - Stores the edge this connection is in. Can reference an edge that is no longer processed - after this connection is removed, so make sure to check edge.coefficient > 0 before re-adding it. - -Class Procs: - - mark_direct() - Marks this connection as direct. Does not update the edge. - Called when the connection is made and there are no doors between A and B. - Also called by update() as a correction. - - mark_indirect() - Unmarks this connection as direct. Does not update the edge. - Called by update() as a correction. - - mark_space() - Marks this connection as unsimulated. Updating the connection will check the validity of this. - Called when the connection is made. - This will not be called as a correction, any connections failing a check against this mark are erased and rebuilt. - - direct() - Returns 1 if no doors are in between A and B. - - valid() - Returns 1 if the connection has not been erased. - - erase() - Called by update() and connection_manager/erase_all(). - Marks the connection as erased and removes it from its edge. - - update() - Called by connection_manager/update_all(). - Makes numerous checks to decide whether the connection is still valid. Erases it automatically if not. - -*/ - -/connection/var/turf/simulated/A -/connection/var/turf/simulated/B -/connection/var/zone/zoneA -/connection/var/zone/zoneB - -/connection/var/connection_edge/edge - -/connection/var/state = 0 - -/connection/New(turf/simulated/A, turf/simulated/B) - #ifdef ZASDBG - ASSERT(SSair.has_valid_zone(A)) - //ASSERT(SSair.has_valid_zone(B)) - #endif - src.A = A - src.B = B - zoneA = A.zone - if(!istype(B)) - mark_space() - edge = SSair.get_edge(A.zone,B) - edge.add_connection(src) - else - zoneB = B.zone - edge = SSair.get_edge(A.zone,B.zone) - edge.add_connection(src) - -/connection/proc/mark_direct() - if(!direct()) - state |= CONNECTION_DIRECT - edge.direct++ -// log_debug("Marked direct.") - -/connection/proc/mark_indirect() - if(direct()) - state &= ~CONNECTION_DIRECT - edge.direct-- -// log_debug("Marked indirect.") - -/connection/proc/mark_space() - state |= CONNECTION_SPACE - -/connection/proc/direct() - return (state & CONNECTION_DIRECT) - -/connection/proc/valid() - return !(state & CONNECTION_INVALID) - -/connection/proc/erase() - edge.remove_connection(src) - state |= CONNECTION_INVALID -// log_debug("Connection Erased: [state]") - -/connection/proc/update() -// log_debug("Updated, \...") - if(!istype(A,/turf/simulated)) -// log_debug("Invalid A.") - erase() - return - - var/block_status = SSair.air_blocked(A,B) - if(block_status & AIR_BLOCKED) -// log_debug("Blocked connection.") - erase() - return - else if(block_status & ZONE_BLOCKED) - mark_indirect() - else - mark_direct() - - var/b_is_space = !istype(B,/turf/simulated) - - if(state & CONNECTION_SPACE) - if(!b_is_space) -// log_debug("Invalid B.") - erase() - return - if(A.zone != zoneA) -// log_debug("Zone changed, \...") - if(!A.zone) - erase() -// log_debug("erased.") - return - else - edge.remove_connection(src) - edge = SSair.get_edge(A.zone, B) - edge.add_connection(src) - zoneA = A.zone - -// log_debug("valid.") - return - - else if(b_is_space) -// log_debug("Invalid B.") - erase() - return - - if(A.zone == B.zone) -// log_debug("A == B") - erase() - return - - if(A.zone != zoneA || (zoneB && (B.zone != zoneB))) - -// log_debug("Zones changed, \...") - if(A.zone && B.zone) - edge.remove_connection(src) - edge = SSair.get_edge(A.zone, B.zone) - edge.add_connection(src) - zoneA = A.zone - zoneB = B.zone - else -// log_debug("erased.") - erase() - return - - -// log_debug("valid.") \ No newline at end of file diff --git a/code/modules/ZAS/ConnectionGroup.dm b/code/modules/ZAS/ConnectionGroup.dm deleted file mode 100644 index b664fce4efdad..0000000000000 --- a/code/modules/ZAS/ConnectionGroup.dm +++ /dev/null @@ -1,260 +0,0 @@ -/* - -Overview: - These are what handle gas transfers between zones and into space. - They are found in a zone's edges list and in SSair.edges. - Each edge updates every air tick due to their role in gas transfer. - They come in two flavors, /connection_edge/zone and /connection_edge/unsimulated. - As the type names might suggest, they handle inter-zone and spacelike connections respectively. - -Class Vars: - - A - This always holds a zone. In unsimulated edges, it holds the only zone. - - connecting_turfs - This holds a list of connected turfs, mainly for the sake of airflow. - - coefficent - This is a marker for how many connections are on this edge. Used to determine the ratio of flow. - - connection_edge/zone - - B - This holds the second zone with which the first zone equalizes. - - direct - This counts the number of direct (i.e. with no doors) connections on this edge. - Any value of this is sufficient to make the zones mergeable. - - connection_edge/unsimulated - - B - This holds an unsimulated turf which has the gas values this edge is mimicing. - - air - Retrieved from B on creation and used as an argument for the legacy ShareSpace() proc. - -Class Procs: - - add_connection(connection/c) - Adds a connection to this edge. Usually increments the coefficient and adds a turf to connecting_turfs. - - remove_connection(connection/c) - Removes a connection from this edge. This works even if c is not in the edge, so be careful. - If the coefficient reaches zero as a result, the edge is erased. - - contains_zone(zone/Z) - Returns true if either A or B is equal to Z. Unsimulated connections return true only on A. - - erase() - Removes this connection from processing and zone edge lists. - - tick() - Called every air tick on edges in the processing list. Equalizes gas. - - flow(list/movable, differential, repelled) - Airflow proc causing all objects in movable to be checked against a pressure differential. - If repelled is true, the objects move away from any turf in connecting_turfs, otherwise they approach. - A check against vsc.lightest_airflow_pressure should generally be performed before calling this. - - get_connected_zone(zone/from) - Helper proc that allows getting the other zone of an edge given one of them. - Only on /connection_edge/zone, otherwise use A. - -*/ - - -/connection_edge/var/zone/A - -/connection_edge/var/list/connecting_turfs = list() -/connection_edge/var/direct = 0 -/connection_edge/var/sleeping = 1 - -/connection_edge/var/coefficient = 0 - -/connection_edge/New() - CRASH("Cannot make connection edge without specifications.") - -/connection_edge/proc/add_connection(connection/c) - coefficient++ - if(c.direct()) direct++ -// log_debug("Connection added: [type] Coefficient: [coefficient]") - - -/connection_edge/proc/remove_connection(connection/c) -// log_debug("Connection removed: [type] Coefficient: [coefficient-1]") - - coefficient-- - if(coefficient <= 0) - erase() - if(c.direct()) direct-- - -/connection_edge/proc/contains_zone(zone/Z) - -/connection_edge/proc/erase() - SSair.remove_edge(src) -// log_debug("[type] Erased.") - - -/connection_edge/proc/tick() - -/connection_edge/proc/recheck() - -/connection_edge/proc/flow(list/movable, differential, repelled) - for(var/i = 1; i <= movable.len; i++) - var/atom/movable/M = movable[i] - - //If they're already being tossed, don't do it again. - if(M.last_airflow > world.time - vsc.airflow_delay) continue - if(M.airflow_speed) continue - - //Check for knocking people over - if(ismob(M) && differential > vsc.airflow_stun_pressure) - if(M:status_flags & GODMODE) continue - M:airflow_stun() - - if(M.check_airflow_movable(differential)) - //Check for things that are in range of the midpoint turfs. - var/list/close_turfs = list() - for(var/turf/U in connecting_turfs) - if(get_dist(M,U) < world.view) close_turfs += U - if(!close_turfs.len) continue - - M.airflow_dest = pick(close_turfs) //Pick a random midpoint to fly towards. - - if(repelled) spawn if(M) M.RepelAirflowDest(differential/5) - else spawn if(M) M.GotoAirflowDest(differential/10) - - - - -/connection_edge/zone/var/zone/B - -/connection_edge/zone/New(zone/A, zone/B) - - src.A = A - src.B = B - A.edges.Add(src) - B.edges.Add(src) - //id = edge_id(A,B) -// log_debug("New edge between [A] and [B]") - - -/connection_edge/zone/add_connection(connection/c) - . = ..() - connecting_turfs.Add(c.A) - -/connection_edge/zone/remove_connection(connection/c) - connecting_turfs.Remove(c.A) - . = ..() - -/connection_edge/zone/contains_zone(zone/Z) - return A == Z || B == Z - -/connection_edge/zone/erase() - A.edges.Remove(src) - B.edges.Remove(src) - . = ..() - -/connection_edge/zone/tick() - if(A.invalid || B.invalid) - erase() - return - - var/equiv = A.air.share_ratio(B.air, coefficient) - - var/differential = A.air.return_pressure() - B.air.return_pressure() - if(abs(differential) >= vsc.airflow_lightest_pressure) - var/list/attracted - var/list/repelled - if(differential > 0) - attracted = A.movables() - repelled = B.movables() - else - attracted = B.movables() - repelled = A.movables() - - flow(attracted, abs(differential), 0) - flow(repelled, abs(differential), 1) - - if(equiv) - if(direct) - erase() - SSair.merge(A, B) - return - else - A.air.equalize(B.air) - SSair.mark_edge_sleeping(src) - - SSair.mark_zone_update(A) - SSair.mark_zone_update(B) - -/connection_edge/zone/recheck() - if(!A.air.compare(B.air, vacuum_exception = 1)) - // Edges with only one side being vacuum need processing no matter how close. - SSair.mark_edge_active(src) - -//Helper proc to get connections for a zone. -/connection_edge/zone/proc/get_connected_zone(zone/from) - if(A == from) return B - else return A - -/connection_edge/unsimulated/var/turf/B -/connection_edge/unsimulated/var/datum/gas_mixture/air - -/connection_edge/unsimulated/New(zone/A, turf/B) - src.A = A - src.B = B - A.edges.Add(src) - air = B.return_air() - //id = 52*A.id -// log_debug("New edge from [A] to [B].") - - -/connection_edge/unsimulated/add_connection(connection/c) - . = ..() - connecting_turfs.Add(c.B) - air.group_multiplier = coefficient - -/connection_edge/unsimulated/remove_connection(connection/c) - connecting_turfs.Remove(c.B) - air.group_multiplier = coefficient - . = ..() - -/connection_edge/unsimulated/erase() - A.edges.Remove(src) - . = ..() - -/connection_edge/unsimulated/contains_zone(zone/Z) - return A == Z - -/connection_edge/unsimulated/tick() - if(A.invalid) - erase() - return - - var/equiv = A.air.share_space(air) - - var/differential = A.air.return_pressure() - air.return_pressure() - if(abs(differential) >= vsc.airflow_lightest_pressure) - var/list/attracted = A.movables() - flow(attracted, abs(differential), differential < 0) - - if(equiv) - A.air.copy_from(air) - SSair.mark_edge_sleeping(src) - - SSair.mark_zone_update(A) - -/connection_edge/unsimulated/recheck() - // Edges with only one side being vacuum need processing no matter how close. - // Note: This handles the glaring flaw of a room holding pressure while exposed to space, but - // does not specially handle the less common case of a simulated room exposed to an unsimulated pressurized turf. - if(!A.air.compare(air, vacuum_exception = 1)) - SSair.mark_edge_active(src) - -/proc/ShareHeat(datum/gas_mixture/A, datum/gas_mixture/B, connecting_tiles) - //This implements a simplistic version of the Stefan-Boltzmann law. - var/energy_delta = ((A.temperature - B.temperature) ** 4) * STEFAN_BOLTZMANN_CONSTANT * connecting_tiles * 2.5 - var/maximum_energy_delta = max(0, min(A.temperature * A.heat_capacity() * A.group_multiplier, B.temperature * B.heat_capacity() * B.group_multiplier)) - if(maximum_energy_delta > abs(energy_delta)) - if(energy_delta < 0) - maximum_energy_delta *= -1 - energy_delta = maximum_energy_delta - - A.temperature -= energy_delta / (A.heat_capacity() * A.group_multiplier) - B.temperature += energy_delta / (B.heat_capacity() * B.group_multiplier) diff --git a/code/modules/ZAS/ConnectionManager.dm b/code/modules/ZAS/ConnectionManager.dm deleted file mode 100644 index 3890cd85f5cdc..0000000000000 --- a/code/modules/ZAS/ConnectionManager.dm +++ /dev/null @@ -1,105 +0,0 @@ -/* - -Overview: - The connection_manager class stores connections in each cardinal direction on a turf. - It isn't always present if a turf has no connections, check if(connections) before using. - Contains procs for mass manipulation of connection data. - -Class Vars: - - NSEWUD - Connections to this turf in each cardinal direction. - -Class Procs: - - get(d) - Returns the connection (if any) in this direction. - Preferable to accessing the connection directly because it checks validity. - - place(connection/c, d) - Called by air_master.connect(). Sets the connection in the specified direction to c. - - update_all() - Called after turf/update_air_properties(). Updates the validity of all connections on this turf. - - erase_all() - Called when the turf is changed with ChangeTurf(). Erases all existing connections. - -Macros: - check(connection/c) - Checks for connection validity. It's possible to have a reference to a connection that has been erased. - - -*/ - -// macro-ized to cut down on proc calls -#define check(c) (c && c.valid()) - -/turf/var/tmp/connection_manager/connections - -/connection_manager/var/connection/N -/connection_manager/var/connection/S -/connection_manager/var/connection/E -/connection_manager/var/connection/W - -#ifdef MULTIZAS -/connection_manager/var/connection/U -/connection_manager/var/connection/D -#endif - -/connection_manager/proc/get(d) - switch(d) - if(NORTH) - if(check(N)) return N - else return null - if(SOUTH) - if(check(S)) return S - else return null - if(EAST) - if(check(E)) return E - else return null - if(WEST) - if(check(W)) return W - else return null - - #ifdef MULTIZAS - if(UP) - if(check(U)) return U - else return null - if(DOWN) - if(check(D)) return D - else return null - #endif - -/connection_manager/proc/place(connection/c, d) - switch(d) - if(NORTH) N = c - if(SOUTH) S = c - if(EAST) E = c - if(WEST) W = c - - #ifdef MULTIZAS - if(UP) U = c - if(DOWN) D = c - #endif - -/connection_manager/proc/update_all() - if(check(N)) N.update() - if(check(S)) S.update() - if(check(E)) E.update() - if(check(W)) W.update() - #ifdef MULTIZAS - if(check(U)) U.update() - if(check(D)) D.update() - #endif - -/connection_manager/proc/erase_all() - if(check(N)) N.erase() - if(check(S)) S.erase() - if(check(E)) E.erase() - if(check(W)) W.erase() - #ifdef MULTIZAS - if(check(U)) U.erase() - if(check(D)) D.erase() - #endif - -#undef check diff --git a/code/modules/ZAS/Debug.dm b/code/modules/ZAS/Debug.dm deleted file mode 100644 index 1ec5e13686244..0000000000000 --- a/code/modules/ZAS/Debug.dm +++ /dev/null @@ -1,20 +0,0 @@ -var/global/image/assigned = image('icons/Testing/Zone.dmi', icon_state = "assigned") -var/global/image/created = image('icons/Testing/Zone.dmi', icon_state = "created") -var/global/image/merged = image('icons/Testing/Zone.dmi', icon_state = "merged") -var/global/image/invalid_zone = image('icons/Testing/Zone.dmi', icon_state = "invalid") -var/global/image/air_blocked = image('icons/Testing/Zone.dmi', icon_state = "block") -var/global/image/zone_blocked = image('icons/Testing/Zone.dmi', icon_state = "zoneblock") -var/global/image/blocked = image('icons/Testing/Zone.dmi', icon_state = "fullblock") -var/global/image/mark = image('icons/Testing/Zone.dmi', icon_state = "mark") - -/connection_edge/var/dbg_out = 0 - -/turf/var/tmp/dbg_img -/turf/proc/dbg(image/img, d = 0) - if(d > 0) img.dir = d - overlays -= dbg_img - overlays += img - dbg_img = img - -/proc/soft_assert(thing,fail) - if(!thing) message_admins(fail) diff --git a/code/modules/ZAS/Diagnostic.dm b/code/modules/ZAS/Diagnostic.dm deleted file mode 100644 index 8cef64a621f45..0000000000000 --- a/code/modules/ZAS/Diagnostic.dm +++ /dev/null @@ -1,82 +0,0 @@ -/client/proc/Zone_Info(turf/T as null|turf) - set category = "Debug" - if(T) - if(istype(T,/turf/simulated) && T:zone) - T:zone:dbg_data(src) - else - to_chat(mob, "No zone here.") - var/datum/gas_mixture/mix = T.return_air() - to_chat(mob, "[mix.return_pressure()] kPa [mix.temperature]C") - for(var/g in mix.gas) - to_chat(mob, "[g]: [mix.gas[g]]\n") - else - if(zone_debug_images) - for(var/zone in zone_debug_images) - images -= zone_debug_images[zone] - zone_debug_images = null - -/client/var/list/zone_debug_images - -/client/proc/Test_ZAS_Connection(var/turf/simulated/T as turf) - set category = "Debug" - if(!istype(T)) - return - - var/direction_list = list(\ - "North" = NORTH,\ - "South" = SOUTH,\ - "East" = EAST,\ - "West" = WEST,\ - #ifdef MULTIZAS - "Up" = UP,\ - "Down" = DOWN,\ - #endif - "N/A" = null) - var/direction = input("What direction do you wish to test?","Set direction") as null|anything in direction_list - if(!direction) - return - - if(direction == "N/A") - if(!(T.c_airblock(T) & AIR_BLOCKED)) - to_chat(mob, "The turf can pass air! :D") - else - to_chat(mob, "No air passage :x") - return - - var/turf/simulated/other_turf = get_step(T, direction_list[direction]) - if(!istype(other_turf)) - return - - var/t_block = T.c_airblock(other_turf) - var/o_block = other_turf.c_airblock(T) - - if(o_block & AIR_BLOCKED) - if(t_block & AIR_BLOCKED) - to_chat(mob, "Neither turf can connect. :(") - - else - to_chat(mob, "The initial turf only can connect. :\\") - else - if(t_block & AIR_BLOCKED) - to_chat(mob, "The other turf can connect, but not the initial turf. :/") - - else - to_chat(mob, "Both turfs can connect! :)") - - to_chat(mob, "Additionally, \...") - - if(o_block & ZONE_BLOCKED) - if(t_block & ZONE_BLOCKED) - to_chat(mob, "neither turf can merge.") - else - to_chat(mob, "the other turf cannot merge.") - else - if(t_block & ZONE_BLOCKED) - to_chat(mob, "the initial turf cannot merge.") - else - to_chat(mob, "both turfs can merge.") - -/client/proc/ZASSettings() - set category = "Debug" - - vsc.SetDefault(mob) diff --git a/code/modules/ZAS/Fire.dm b/code/modules/ZAS/Fire.dm deleted file mode 100644 index 6d017743e65ad..0000000000000 --- a/code/modules/ZAS/Fire.dm +++ /dev/null @@ -1,385 +0,0 @@ -/* - -Making Bombs with ZAS: -Get gas to react in an air tank so that it gains pressure. If it gains enough pressure, it goes boom. -The more pressure, the more boom. -If it gains pressure too slowly, it may leak or just rupture instead of exploding. -*/ - -//#define FIREDBG - -/turf/var/obj/hotspot/hotspot = null - -//Some legacy definitions so fires can be started. -/atom/proc/temperature_expose(datum/gas_mixture/air, exposed_temperature, exposed_volume) - return null - -/atom/movable/proc/is_burnable() - return FALSE - -/mob/is_burnable() - return simulated - -/turf/proc/hotspot_expose(exposed_temperature, exposed_volume, soh = 0) - - -/turf/simulated/hotspot_expose(exposed_temperature, exposed_volume, soh) - if(fire_protection > world.time-300) - return 0 - if(locate(/obj/hotspot) in src) - return 1 - var/datum/gas_mixture/air_contents = return_air() - if(!air_contents || exposed_temperature < PHORON_MINIMUM_BURN_TEMPERATURE) - return 0 - - var/igniting = 0 - var/obj/effect/decal/cleanable/liquid_fuel/liquid = locate() in src - if(liquid && air_contents.check_combustability(liquid)) - IgniteTurf(liquid.amount * 10) - QDEL_NULL(liquid) - if(air_contents.check_combustability()) - igniting = 1 - create_fire(exposed_temperature) - return igniting - -/zone/proc/calculate_fire_level() - var/datum/gas_mixture/burn_gas = air.remove_ratio(vsc.fire_consuption_rate, fire_tiles.len) - firelevel = burn_gas.react(src, fire_tiles, force_burn = 1, no_check = 1) - air.merge(burn_gas) - -/zone/proc/process_fire() - if(firelevel) - for(var/turf/T in fire_tiles) - if(T.hotspot) - T.hotspot.firelevel = firelevel - else - fire_tiles -= T - else - for(var/turf/simulated/T in fire_tiles) - if(istype(T.hotspot)) - qdel(T.hotspot) - fire_tiles.Cut() - - if(!fire_tiles.len) - SSair.active_fire_zones.Remove(src) - -/turf/proc/create_fire(fl) - return 0 - -/turf/simulated/create_fire(fl) - - if(submerged()) - return 1 - - if(hotspot) - hotspot.firelevel = max(fl, hotspot.firelevel) - return 1 - - if(!zone) - return 1 - - hotspot = new(src, fl) - SSair.active_fire_zones |= zone - - zone.fire_tiles |= src - - return 0 - -/obj/hotspot - //Icon for gas fire on turfs. - //Different from turf fires - - anchored = TRUE - mouse_opacity = 0 - - blend_mode = BLEND_ADD - - icon = 'icons/effects/fire.dmi' - icon_state = "1" - light_color = "#ed9200" - layer = FIRE_LAYER - - var/firelevel = 1 //Calculated by gas_mixture.calculate_firelevel() - -/obj/hotspot/Process() - . = 1 - - var/turf/simulated/my_tile = loc - if(!istype(my_tile) || !my_tile.zone || my_tile.submerged()) - if(my_tile && my_tile.hotspot == src) - my_tile.hotspot = null - qdel(src) - return PROCESS_KILL - - var/datum/gas_mixture/air_contents = my_tile.return_air() - - for(var/mob/living/L in loc) - L.FireBurn(firelevel, air_contents.temperature, air_contents.return_pressure()) //Burn the mobs! - - for(var/atom/A in (loc.contents + loc)) - A.fire_act(air_contents, air_contents.temperature, air_contents.volume) - - //spread - for(var/direction in GLOB.cardinal) - var/turf/simulated/enemy_tile = get_step(my_tile, direction) - - if(istype(enemy_tile)) - if(my_tile.open_directions & direction) //Grab all valid bordering tiles - if(!enemy_tile.zone || enemy_tile.hotspot) - continue - //if(!enemy_tile.zone.fire_tiles.len) TODO - optimize - var/datum/gas_mixture/acs = enemy_tile.return_air() - if(!acs || !acs.check_combustability()) - continue - - //Spread the fire. - if(prob( 50 + 50 * (firelevel/vsc.fire_firelevel_multiplier) ) && my_tile.CanPass(null, enemy_tile, 0,0) && enemy_tile.CanPass(null, my_tile, 0,0)) - enemy_tile.create_fire(firelevel) - - else - enemy_tile.adjacent_fire_act(loc, air_contents, air_contents.temperature, air_contents.volume) - - animate(src, color = fire_color(air_contents.temperature), 5) - -/obj/hotspot/New(newLoc,fl) - ..() - - if(!istype(loc, /turf)) - qdel(src) - return - - set_dir(pick(GLOB.cardinal)) - - var/datum/gas_mixture/air_contents = loc.return_air() - color = fire_color(air_contents.temperature) - - firelevel = fl - SSair.active_hotspots.Add(src) - - //If this is a turf and it can burn maybe it should be ignited too - Lingering fire effect of sorts - var/turf/simulated/floor/F = loc - if(istype(F) && F.flooring && F.flooring.flags & TURF_CAN_BURN) - if(prob(30)) - F.IgniteTurf(rand(8,22)) - -/obj/hotspot/proc/fire_color(var/env_temperature) - var/temperature = max(4000*sqrt(firelevel/vsc.fire_firelevel_multiplier), env_temperature) - return heat2color(temperature) - -/obj/hotspot/Destroy() - var/turf/T = loc - if (istype(T)) - set_light(0) - T.hotspot = null - SSair.active_hotspots.Remove(src) - . = ..() - -/turf/simulated/var/fire_protection = 0 //Protects newly extinguished tiles from being overrun again. -/turf/proc/apply_fire_protection() -/turf/simulated/apply_fire_protection() - fire_protection = world.time - -//Returns the firelevel -/datum/gas_mixture/proc/react(zone/zone, force_burn, no_check = 0) - . = 0 - if((temperature > PHORON_MINIMUM_BURN_TEMPERATURE || force_burn) && (no_check || check_combustability())) - - #ifdef FIREDBG - log_debug("***************** FIREDBG *****************") - log_debug("Burning [zone? zone.name : "zoneless gas_mixture"]!") - #endif - - var/gas_fuel = 0 - var/total_fuel = 0 - var/total_oxidizers = 0 - - //*** Get the fuel and oxidizer amounts - for(var/g in gas) - if(gas_data.flags[g] & XGM_GAS_FUEL) - gas_fuel += gas[g] - if(gas_data.flags[g] & XGM_GAS_OXIDIZER) - total_oxidizers += gas[g] - gas_fuel *= group_multiplier - total_oxidizers *= group_multiplier - - total_fuel = gas_fuel - if(total_fuel <= 0.005) - return 0 - - //*** Determine how fast the fire burns - - //get the current thermal energy of the gas mix - //this must be taken here to prevent the addition or deletion of energy by a changing heat capacity - var/starting_energy = temperature * heat_capacity() - - //determine how far the reaction can progress - var/reaction_limit = min(total_oxidizers*(FIRE_REACTION_FUEL_AMOUNT/FIRE_REACTION_OXIDIZER_AMOUNT), total_fuel) //stoichiometric limit - - //vapour fuels are extremely volatile! The reaction progress is a percentage of the total fuel (similar to old zburn).) - var/gas_firelevel = calculate_firelevel(gas_fuel, total_oxidizers, reaction_limit, volume*group_multiplier) / vsc.fire_firelevel_multiplier - var/min_burn = 0.30*volume*group_multiplier/CELL_VOLUME //in moles - so that fires with very small gas concentrations burn out fast - var/gas_reaction_progress = min(max(min_burn, gas_firelevel*gas_fuel)*FIRE_GAS_BURNRATE_MULT, gas_fuel) - - var/firelevel = (gas_fuel*gas_firelevel)/total_fuel - - var/total_reaction_progress = gas_reaction_progress - var/used_fuel = min(total_reaction_progress, reaction_limit) - var/used_oxidizers = used_fuel*(FIRE_REACTION_OXIDIZER_AMOUNT/FIRE_REACTION_FUEL_AMOUNT) - - #ifdef FIREDBG - log_debug("gas_fuel = [gas_fuel], total_oxidizers = [total_oxidizers]") - log_debug("fuel_area = [fuel_area], total_fuel = [total_fuel], reaction_limit = [reaction_limit]") - log_debug("firelevel -> [firelevel] (gas: [gas_firelevel]") - log_debug("gas_reaction_progress = [gas_reaction_progress]") - log_debug("total_reaction_progress = [total_reaction_progress]") - log_debug("used_fuel = [used_fuel], used_oxidizers = [used_oxidizers]; ") - #endif - - //if the reaction is progressing too slow then it isn't self-sustaining anymore and burns out - if(zone) //be less restrictive with canister and tank reactions - if((!gas_fuel || used_fuel <= FIRE_GAS_MIN_BURNRATE*zone.contents.len)) - return 0 - - - //*** Remove fuel and oxidizer, add carbon dioxide and heat - - //remove and add gasses as calculated - var/used_gas_fuel = min(max(0.25, used_fuel*(gas_reaction_progress/total_reaction_progress)), gas_fuel) //remove in proportion to the relative reaction progress - - - //remove_by_flag() and adjust_gas() handle the group_multiplier for us. - remove_by_flag(XGM_GAS_OXIDIZER, used_oxidizers) - var/datum/gas_mixture/burned_fuel = remove_by_flag(XGM_GAS_FUEL, used_gas_fuel) - for(var/g in burned_fuel.gas) - adjust_gas(gas_data.burn_product[g], burned_fuel.gas[g]) - - //calculate the energy produced by the reaction and then set the new temperature of the mix - temperature = (starting_energy + vsc.fire_fuel_energy_release * (used_gas_fuel)) / heat_capacity() - update_values() - - #ifdef FIREDBG - log_debug("used_gas_fuel = [used_gas_fuel];") - log_debug("new temperature = [temperature]; new pressure = [return_pressure()]") - #endif - - if (temperature<220) - firelevel = 0 - - return firelevel - -/datum/gas_mixture/proc/check_recombustability(list/fuel_objs) - . = 0 - for(var/g in gas) - if(gas_data.flags[g] & XGM_GAS_OXIDIZER && gas[g] >= 0.1) - . = 1 - break - - if(!.) - return 0 - - if(fuel_objs && fuel_objs.len) - return 1 - - . = 0 - for(var/g in gas) - if(gas_data.flags[g] & XGM_GAS_FUEL && gas[g] >= 0.1) - . = 1 - break - -/datum/gas_mixture/proc/check_combustability(obj/effect/decal/cleanable/liquid_fuel/liquid=null) - . = 0 - for(var/g in gas) - if(gas_data.flags[g] & XGM_GAS_OXIDIZER && QUANTIZE(gas[g] * vsc.fire_consuption_rate) >= 0.1) - . = 1 - break - - if(!.) - return 0 - - if(liquid) - return 1 - - . = 0 - for(var/g in gas) - if(gas_data.flags[g] & XGM_GAS_FUEL && QUANTIZE(gas[g] * vsc.fire_consuption_rate) >= 0.1) - . = 1 - break - -//returns a value between 0 and vsc.fire_firelevel_multiplier -/datum/gas_mixture/proc/calculate_firelevel(total_fuel, total_oxidizers, reaction_limit, gas_volume) - //Calculates the firelevel based on one equation instead of having to do this multiple times in different areas. - var/firelevel = 0 - - var/total_combustables = (total_fuel + total_oxidizers) - var/active_combustables = (FIRE_REACTION_OXIDIZER_AMOUNT/FIRE_REACTION_FUEL_AMOUNT + 1)*reaction_limit - - if(total_moles && total_combustables > 0) - //slows down the burning when the concentration of the reactants is low - var/damping_multiplier = min(1, active_combustables / (total_moles/group_multiplier)) - - //weight the damping mult so that it only really brings down the firelevel when the ratio is closer to 0 - damping_multiplier = 2*damping_multiplier - (damping_multiplier*damping_multiplier) - - //calculates how close the mixture of the reactants is to the optimum - //fires burn better when there is more oxidizer -- too much fuel will choke the fire out a bit, reducing firelevel. - var/mix_multiplier = 1 / (1 + (5 * ((total_fuel / total_combustables) ** 2))) - - #ifdef FIREDBG - ASSERT(damping_multiplier <= 1) - ASSERT(mix_multiplier <= 1) - #endif - - //toss everything together -- should produce a value between 0 and fire_firelevel_multiplier - firelevel = vsc.fire_firelevel_multiplier * mix_multiplier * damping_multiplier - - return max( 0, firelevel) - - -/mob/living/proc/FireBurn(var/firelevel, var/last_temperature, var/pressure) - var/mx = 5 * firelevel/vsc.fire_firelevel_multiplier * min(pressure / ONE_ATMOSPHERE, 1) - apply_damage(2.5 * mx, DAMAGE_BURN) - return mx - - -/mob/living/carbon/human/FireBurn(var/firelevel, var/last_temperature, var/pressure) - //Burns mobs due to fire. Respects heat transfer coefficients on various body parts. - //Due to TG reworking how fireprotection works, this is kinda less meaningful. - - var/head_exposure = 1 - var/chest_exposure = 1 - var/groin_exposure = 1 - var/legs_exposure = 1 - var/arms_exposure = 1 - - //Get heat transfer coefficients for clothing. - - for(var/obj/item/clothing/C in src) - if(l_hand == C || r_hand == C) - continue - - if( C.max_heat_protection_temperature >= last_temperature ) - if(C.body_parts_covered & HEAD) - head_exposure = 0 - if(C.body_parts_covered & UPPER_TORSO) - chest_exposure = 0 - if(C.body_parts_covered & LOWER_TORSO) - groin_exposure = 0 - if(C.body_parts_covered & LEGS) - legs_exposure = 0 - if(C.body_parts_covered & ARMS) - arms_exposure = 0 - //minimize this for low-pressure environments - var/mx = 5 * firelevel/vsc.fire_firelevel_multiplier * min(pressure / ONE_ATMOSPHERE, 1) - - //Always check these damage procs first if fire damage isn't working. They're probably what's wrong. - - apply_damage(0.9*mx*head_exposure, DAMAGE_BURN, BP_HEAD, used_weapon = "Fire") - apply_damage(2.5*mx*chest_exposure, DAMAGE_BURN, BP_CHEST, used_weapon = "Fire") - apply_damage(2.0*mx*groin_exposure, DAMAGE_BURN, BP_GROIN, used_weapon = "Fire") - apply_damage(0.6*mx*legs_exposure, DAMAGE_BURN, BP_L_LEG, used_weapon = "Fire") - apply_damage(0.6*mx*legs_exposure, DAMAGE_BURN, BP_R_LEG, used_weapon = "Fire") - apply_damage(0.4*mx*arms_exposure, DAMAGE_BURN, BP_L_ARM, used_weapon = "Fire") - apply_damage(0.4*mx*arms_exposure, DAMAGE_BURN, BP_R_ARM, used_weapon = "Fire") - - //return a truthy value of whether burning actually happened - return mx * (head_exposure + chest_exposure + groin_exposure + legs_exposure + arms_exposure) diff --git a/code/modules/ZAS/Phoron.dm b/code/modules/ZAS/Phoron.dm deleted file mode 100644 index 9a4bc028b7094..0000000000000 --- a/code/modules/ZAS/Phoron.dm +++ /dev/null @@ -1,170 +0,0 @@ -var/global/image/contamination_overlay = image('icons/effects/contamination.dmi') - -/pl_control - var/PHORON_DMG = 3 - var/PHORON_DMG_NAME = "Phoron Damage Amount" - var/PHORON_DMG_DESC = "Self Descriptive" - - var/CLOTH_CONTAMINATION = 1 - var/CLOTH_CONTAMINATION_NAME = "Cloth Contamination" - var/CLOTH_CONTAMINATION_DESC = "If this is on, phoron does damage by getting into cloth." - - var/PHORONGUARD_ONLY = 0 - var/PHORONGUARD_ONLY_NAME = "\"PhoronGuard Only\"" - var/PHORONGUARD_ONLY_DESC = "If this is on, only biosuits and spacesuits protect against contamination and ill effects." - - var/GENETIC_CORRUPTION = 0 - var/GENETIC_CORRUPTION_NAME = "Genetic Corruption Chance" - var/GENETIC_CORRUPTION_DESC = "Chance of genetic corruption as well as toxic damage, X in 10,000." - - var/SKIN_BURNS = 0 - var/SKIN_BURNS_DESC = "Phoron has an effect similar to mustard gas on the un-suited." - var/SKIN_BURNS_NAME = "Skin Burns" - - var/EYE_BURNS = 1 - var/EYE_BURNS_NAME = "Eye Burns" - var/EYE_BURNS_DESC = "Phoron burns the eyes of anyone not wearing eye protection." - - var/CONTAMINATION_LOSS = 0.02 - var/CONTAMINATION_LOSS_NAME = "Contamination Loss" - var/CONTAMINATION_LOSS_DESC = "How much toxin damage is dealt from contaminated clothing" //Per tick? ASK ARYN - - var/PHORON_HALLUCINATION = 0 - var/PHORON_HALLUCINATION_NAME = "Phoron Hallucination" - var/PHORON_HALLUCINATION_DESC = "Does being in phoron cause you to hallucinate?" - - var/N2O_HALLUCINATION = 1 - var/N2O_HALLUCINATION_NAME = "N2O Hallucination" - var/N2O_HALLUCINATION_DESC = "Does being in sleeping gas cause you to hallucinate?" - - -/obj/var/contaminated = 0 - - -/obj/item/proc/can_contaminate() - //Clothing can be contaminated, with exceptions for certain items which cannot be washed in washing_machine.dm - if (obj_flags & ITEM_FLAG_PHORONGUARD) return 0 - - else if (item_flags & ITEM_FLAG_WASHER_ALLOWED) return 1 - -/obj/item/proc/contaminate() - //Do a contamination overlay? Temporary measure to keep contamination less deadly than it was. - if(!contaminated) - contaminated = 1 - overlays += contamination_overlay - -/obj/item/proc/decontaminate() - contaminated = 0 - overlays -= contamination_overlay - -/mob/proc/contaminate() - -/mob/living/carbon/human/contaminate() - //See if anything can be contaminated. - - if(!pl_suit_protected()) - suit_contamination() - - if(!pl_head_protected()) - if(prob(1)) suit_contamination() //Phoron can sometimes get through such an open suit. - -//Cannot wash backpacks currently. -// if(istype(back,/obj/item/storage/backpack)) -// back.contaminate() - -/mob/proc/pl_effects() - -/mob/living/carbon/human/pl_effects() - //Handles all the bad things phoron can do. - - //Contamination - if(vsc.plc.CLOTH_CONTAMINATION) contaminate() - - //Anything else requires them to not be dead. - if(stat >= 2) - return - - //Burn skin if exposed. - if(vsc.plc.SKIN_BURNS) - if(!pl_head_protected() || !pl_suit_protected()) - burn_skin(0.75) - if(prob(20)) to_chat(src, "Your skin burns!") - updatehealth() - - //Burn eyes if exposed. - if(vsc.plc.EYE_BURNS) - if(!head) - if(!wear_mask) - burn_eyes() - else - if(!(wear_mask.body_parts_covered & EYES)) - burn_eyes() - else - if(!(head.body_parts_covered & EYES)) - if(!wear_mask) - burn_eyes() - else - if(!(wear_mask.body_parts_covered & EYES)) - burn_eyes() - - //Genetic Corruption - if(vsc.plc.GENETIC_CORRUPTION) - if(rand(1,10000) < vsc.plc.GENETIC_CORRUPTION) - randmutb(src) - to_chat(src, "High levels of toxins cause you to spontaneously mutate!") - domutcheck(src,null) - - -/mob/living/carbon/human/proc/burn_eyes() - var/obj/item/organ/internal/eyes/E = internal_organs_by_name[BP_EYES] - if(E && !E.phoron_guard) - if(prob(20)) to_chat(src, "Your eyes burn!") - E.damage += 2.5 - eye_blurry = min(eye_blurry+1.5,50) - if (prob(max(0,E.damage - 15) + 1) &&!eye_blind) - to_chat(src, "You are blinded!") - eye_blind += 20 - -/mob/living/carbon/human/proc/pl_head_protected() - //Checks if the head is adequately sealed. - if(head) - if(vsc.plc.PHORONGUARD_ONLY) - if(head.item_flags & ITEM_FLAG_PHORONGUARD) - return 1 - else if(head.body_parts_covered & EYES) - return 1 - return 0 - -/mob/living/carbon/human/proc/pl_suit_protected() - //Checks if the suit is adequately sealed. - var/coverage = 0 - for(var/obj/item/protection in list(wear_suit, gloves, shoes)) - if(!protection) - continue - if(vsc.plc.PHORONGUARD_ONLY && !(protection.item_flags & ITEM_FLAG_PHORONGUARD)) - return 0 - coverage |= protection.body_parts_covered - - if(vsc.plc.PHORONGUARD_ONLY) - return 1 - - return BIT_TEST_ALL(coverage, UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS) - -/mob/living/carbon/human/proc/suit_contamination() - //Runs over the things that can be contaminated and does so. - if (w_uniform && w_uniform.can_contaminate()) w_uniform.contaminate() - if (shoes && shoes.can_contaminate()) shoes.contaminate() - if (gloves && gloves.can_contaminate()) gloves.contaminate() - - -/turf/Entered(obj/item/I) - . = ..() - //Items that are in phoron, but not on a mob, can still be contaminated. - if(istype(I) && vsc && vsc.plc.CLOTH_CONTAMINATION && I.can_contaminate()) - var/datum/gas_mixture/env = return_air(1) - if(!env) - return - for(var/g in env.gas) - if(gas_data.flags[g] & XGM_GAS_CONTAMINANT && env.gas[g] > gas_data.overlay_limit[g] + 1) - I.contaminate() - break diff --git a/code/modules/ZAS/Turf.dm b/code/modules/ZAS/Turf.dm deleted file mode 100644 index 61b65934181a1..0000000000000 --- a/code/modules/ZAS/Turf.dm +++ /dev/null @@ -1,295 +0,0 @@ -/turf/simulated/var/zone/zone -/turf/simulated/var/open_directions - -/turf/var/needs_air_update = 0 -/turf/var/datum/gas_mixture/air - -/turf/simulated/proc/update_graphic(list/graphic_add = null, list/graphic_remove = null) - if(graphic_add && graphic_add.len) - vis_contents += graphic_add - if(graphic_remove && graphic_remove.len) - vis_contents -= graphic_remove - -/turf/proc/update_air_properties() - var/block - ATMOS_CANPASS_TURF(block, src, src) - if(block & AIR_BLOCKED) - //dbg(blocked) - return 1 - - #ifdef MULTIZAS - for(var/d = 1, d < 64, d *= 2) - #else - for(var/d = 1, d < 16, d *= 2) - #endif - - var/turf/unsim = get_step(src, d) - - if(!unsim) - continue - - block = unsim.c_airblock(src) - - if(block & AIR_BLOCKED) - //unsim.dbg(air_blocked, turn(180,d)) - continue - - var/r_block = c_airblock(unsim) - - if(r_block & AIR_BLOCKED) - continue - - if(istype(unsim, /turf/simulated)) - - var/turf/simulated/sim = unsim - if(TURF_HAS_VALID_ZONE(sim)) - SSair.connect(sim, src) - -// Helper for can_safely_remove_from_zone(). -#define GET_ZONE_NEIGHBOURS(T, ret) \ - ret = 0; \ - if (T.zone) { \ - for (var/_gzn_dir in GLOB.gzn_check) { \ - var/turf/simulated/other = get_step(T, _gzn_dir); \ - if (istype(other) && other.zone == T.zone) { \ - var/block; \ - ATMOS_CANPASS_TURF(block, other, T); \ - if (!(block & AIR_BLOCKED)) { \ - ret |= _gzn_dir; \ - } \ - } \ - } \ - } - -/* - Simple heuristic for determining if removing the turf from it's zone will not partition the zone (A very bad thing). - Instead of analyzing the entire zone, we only check the nearest 3x3 turfs surrounding the src turf. - This implementation may produce false negatives but it (hopefully) will not produce any false postiives. -*/ - -/turf/simulated/proc/can_safely_remove_from_zone() - if(!zone) - return 1 - - var/check_dirs - GET_ZONE_NEIGHBOURS(src, check_dirs) - . = check_dirs - for(var/dir in GLOB.csrfz_check) - //for each pair of "adjacent" cardinals (e.g. NORTH and WEST, but not NORTH and SOUTH) - if((dir & check_dirs) == dir) - //check that they are connected by the corner turf - var/turf/simulated/T = get_step(src, dir) - if (!istype(T)) - . &= ~dir - continue - - var/connected_dirs - GET_ZONE_NEIGHBOURS(T, connected_dirs) - if(connected_dirs && (dir & GLOB.reverse_dir[connected_dirs]) == dir) - . &= ~dir //they are, so unflag the cardinals in question - - //it is safe to remove src from the zone if all cardinals are connected by corner turfs - . = !. - -/turf/simulated/update_air_properties() - - if(zone && zone.invalid) //this turf's zone is in the process of being rebuilt - c_copy_air() //not very efficient :( - zone = null //Easier than iterating through the list at the zone. - - var/s_block - ATMOS_CANPASS_TURF(s_block, src, src) - if(s_block & AIR_BLOCKED) - #ifdef ZASDBG - if(verbose) log_debug("Self-blocked.") - //dbg(blocked) - #endif - if(zone) - var/zone/z = zone - - if(can_safely_remove_from_zone()) //Helps normal airlocks avoid rebuilding zones all the time - c_copy_air() //we aren't rebuilding, but hold onto the old air so it can be readded - z.remove(src) - else - z.rebuild() - - return 1 - - var/previously_open = open_directions - open_directions = 0 - - var/list/postponed - #ifdef MULTIZAS - for(var/d = 1, d < 64, d *= 2) - #else - for(var/d = 1, d < 16, d *= 2) - #endif - - var/turf/unsim = get_step(src, d) - - if(!unsim) //edge of map - continue - - var/block = unsim.c_airblock(src) - if(block & AIR_BLOCKED) - - #ifdef ZASDBG - if(verbose) log_debug("[d] is blocked.") - //unsim.dbg(air_blocked, turn(180,d)) - #endif - - continue - - var/r_block = c_airblock(unsim) - if(r_block & AIR_BLOCKED) - - #ifdef ZASDBG - if(verbose) log_debug("[d] is blocked.") - //dbg(air_blocked, d) - #endif - - //Check that our zone hasn't been cut off recently. - //This happens when windows move or are constructed. We need to rebuild. - if((previously_open & d) && istype(unsim, /turf/simulated)) - var/turf/simulated/sim = unsim - if(zone && sim.zone == zone) - zone.rebuild() - return - - continue - - open_directions |= d - - if(istype(unsim, /turf/simulated)) - - var/turf/simulated/sim = unsim - sim.open_directions |= GLOB.reverse_dir[d] - - if(TURF_HAS_VALID_ZONE(sim)) - - //Might have assigned a zone, since this happens for each direction. - if(!zone) - - //We do not merge if - // they are blocking us and we are not blocking them, or if - // we are blocking them and not blocking ourselves - this prevents tiny zones from forming on doorways. - if(((block & ZONE_BLOCKED) && !(r_block & ZONE_BLOCKED)) || ((r_block & ZONE_BLOCKED) && !(s_block & ZONE_BLOCKED))) - #ifdef ZASDBG - if(verbose) log_debug("[d] is zone blocked.") - - //dbg(zone_blocked, d) - #endif - - //Postpone this tile rather than exit, since a connection can still be made. - if(!postponed) postponed = list() - postponed.Add(sim) - - else - - sim.zone.add(src) - - #ifdef ZASDBG - dbg(assigned) - if(verbose) log_debug("Added to [zone]") - #endif - - else if(sim.zone != zone) - - #ifdef ZASDBG - if(verbose) log_debug("Connecting to [sim.zone]") - #endif - - SSair.connect(src, sim) - - - #ifdef ZASDBG - else if(verbose) log_debug("[d] has same zone.") - - else if(verbose) log_debug("[d] has invalid zone.") - #endif - - else - - //Postponing connections to tiles until a zone is assured. - if(!postponed) postponed = list() - postponed.Add(unsim) - - if(!TURF_HAS_VALID_ZONE(src)) //Still no zone, make a new one. - var/zone/newzone = new/zone() - newzone.add(src) - - #ifdef ZASDBG - dbg(created) - - ASSERT(zone) - #endif - - //At this point, a zone should have happened. If it hasn't, don't add more checks, fix the bug. - - for(var/turf/T in postponed) - SSair.connect(src, T) - -/turf/proc/post_update_air_properties() - if(connections) connections.update_all() - -/turf/assume_air(datum/gas_mixture/giver) //use this for machines to adjust air - return 0 - -/turf/proc/assume_gas(gasid, moles, temp = 0) - return 0 - -/turf/return_air() - //Create gas mixture to hold data for passing - var/datum/gas_mixture/GM = new - - if(initial_gas) - GM.gas = initial_gas.Copy() - GM.temperature = temperature - GM.update_values() - - return GM - -/turf/remove_air(amount as num) - var/datum/gas_mixture/GM = return_air() - return GM.remove(amount) - -/turf/simulated/assume_air(datum/gas_mixture/giver) - var/datum/gas_mixture/my_air = return_air() - my_air.merge(giver) - -/turf/simulated/assume_gas(gasid, moles, temp = null) - var/datum/gas_mixture/my_air = return_air() - - if(isnull(temp)) - my_air.adjust_gas(gasid, moles) - else - my_air.adjust_gas_temp(gasid, moles, temp) - - return 1 - -/turf/simulated/return_air() - if(zone) - if(!zone.invalid) - SSair.mark_zone_update(zone) - return zone.air - else - if(!air) - make_air() - c_copy_air() - return air - else - if(!air) - make_air() - return air - -/turf/proc/make_air() - air = new/datum/gas_mixture - air.temperature = temperature - if(initial_gas) - air.gas = initial_gas.Copy() - air.update_values() - -/turf/simulated/proc/c_copy_air() - if(!air) air = new/datum/gas_mixture - air.copy_from(zone.air) - air.group_multiplier = 1 diff --git a/code/modules/ZAS/Variable Settings.dm b/code/modules/ZAS/Variable Settings.dm deleted file mode 100644 index 5b527aaf88f5f..0000000000000 --- a/code/modules/ZAS/Variable Settings.dm +++ /dev/null @@ -1,367 +0,0 @@ -var/global/vs_control/vsc = new - -/vs_control - var/fire_consuption_rate = 0.25 - var/fire_consuption_rate_NAME = "Fire - Air Consumption Ratio" - var/fire_consuption_rate_DESC = "Ratio of air removed and combusted per tick." - - var/fire_firelevel_multiplier = 25 - var/fire_firelevel_multiplier_NAME = "Fire - Firelevel Constant" - var/fire_firelevel_multiplier_DESC = "Multiplied by the equation for firelevel, affects mainly the extingiushing of fires." - - //Note that this parameter and the phoron heat capacity have a significant impact on TTV yield. - var/fire_fuel_energy_release = 866000 //J/mol. Adjusted to compensate for fire energy release being fixed, was 397000 - var/fire_fuel_energy_release_NAME = "Fire - Fuel energy release" - var/fire_fuel_energy_release_DESC = "The energy in joule released when burning one mol of a burnable substance" - - - var/IgnitionLevel = 0.5 - var/IgnitionLevel_DESC = "Determines point at which fire can ignite" - - var/airflow_lightest_pressure = 20 - var/airflow_lightest_pressure_NAME = "Airflow - Small Movement Threshold %" - var/airflow_lightest_pressure_DESC = "Percent of 1 Atm. at which items with the small weight classes will move." - - var/airflow_light_pressure = 35 - var/airflow_light_pressure_NAME = "Airflow - Medium Movement Threshold %" - var/airflow_light_pressure_DESC = "Percent of 1 Atm. at which items with the medium weight classes will move." - - var/airflow_medium_pressure = 50 - var/airflow_medium_pressure_NAME = "Airflow - Heavy Movement Threshold %" - var/airflow_medium_pressure_DESC = "Percent of 1 Atm. at which items with the largest weight classes will move." - - var/airflow_heavy_pressure = 65 - var/airflow_heavy_pressure_NAME = "Airflow - Mob Movement Threshold %" - var/airflow_heavy_pressure_DESC = "Percent of 1 Atm. at which mobs will move." - - var/airflow_dense_pressure = 85 - var/airflow_dense_pressure_NAME = "Airflow - Dense Movement Threshold %" - var/airflow_dense_pressure_DESC = "Percent of 1 Atm. at which items with canisters and closets will move." - - var/airflow_stun_pressure = 60 - var/airflow_stun_pressure_NAME = "Airflow - Mob Stunning Threshold %" - var/airflow_stun_pressure_DESC = "Percent of 1 Atm. at which mobs will be stunned by airflow." - - var/airflow_stun_cooldown = 60 - var/airflow_stun_cooldown_NAME = "Aiflow Stunning - Cooldown" - var/airflow_stun_cooldown_DESC = "How long, in tenths of a second, to wait before stunning them again." - - var/airflow_stun = 1 - var/airflow_stun_NAME = "Airflow Impact - Stunning" - var/airflow_stun_DESC = "How much a mob is stunned when hit by an object." - - var/airflow_damage = 3 - var/airflow_damage_NAME = "Airflow Impact - Damage" - var/airflow_damage_DESC = "Damage from airflow impacts." - - var/airflow_speed_decay = 1.5 - var/airflow_speed_decay_NAME = "Airflow Speed Decay" - var/airflow_speed_decay_DESC = "How rapidly the speed gained from airflow decays." - - var/airflow_delay = 30 - var/airflow_delay_NAME = "Airflow Retrigger Delay" - var/airflow_delay_DESC = "Time in deciseconds before things can be moved by airflow again." - - var/airflow_mob_slowdown = 1 - var/airflow_mob_slowdown_NAME = "Airflow Slowdown" - var/airflow_mob_slowdown_DESC = "Time in tenths of a second to add as a delay to each movement by a mob if they are fighting the pull of the airflow." - - var/connection_insulation = 1 - var/connection_insulation_NAME = "Connections - Insulation" - var/connection_insulation_DESC = "Boolean, should doors forbid heat transfer?" - - var/connection_temperature_delta = 10 - var/connection_temperature_delta_NAME = "Connections - Temperature Difference" - var/connection_temperature_delta_DESC = "The smallest temperature difference which will cause heat to travel through doors." - - -/vs_control/var/list/settings = list() -/vs_control/var/list/bitflags = list("1","2","4","8","16","32","64","128","256","512","1024") -/vs_control/var/pl_control/plc = new() - -/vs_control/New() - . = ..() - settings = vars.Copy() - - var/datum/D = new() //Ensure only unique vars are put through by making a datum and removing all common vars. - for(var/V in D.vars) - settings -= V - - for(var/V in settings) - if(findtextEx(V,"_RANDOM") || findtextEx(V,"_DESC") || findtextEx(V,"_METHOD")) - settings -= V - - settings -= "settings" - settings -= "bitflags" - settings -= "plc" - -/vs_control/proc/ChangeSettingsDialog(mob/user,list/L) - //var/which = input(user,"Choose a setting:") in L - var/dat = "" - for(var/ch in L) - if(findtextEx(ch,"_RANDOM") || findtextEx(ch,"_DESC") || findtextEx(ch,"_METHOD") || findtextEx(ch,"_NAME")) continue - var/vw - var/vw_desc = "No Description." - var/vw_name = ch - if(ch in plc.settings) - vw = plc.vars[ch] - if("[ch]_DESC" in plc.vars) vw_desc = plc.vars["[ch]_DESC"] - if("[ch]_NAME" in plc.vars) vw_name = plc.vars["[ch]_NAME"] - else - vw = vars[ch] - if("[ch]_DESC" in vars) vw_desc = vars["[ch]_DESC"] - if("[ch]_NAME" in vars) vw_name = vars["[ch]_NAME"] - dat += "[vw_name] = [vw] \[Change\]
              " - dat += "[vw_desc]

              " - show_browser(user, dat,"window=settings") - -/vs_control/Topic(href,href_list) - if("changevar" in href_list) - ChangeSetting(usr,href_list["changevar"]) - -/vs_control/proc/ChangeSetting(mob/user,ch) - var/vw - var/how = "Text" - var/display_description = ch - if(ch in plc.settings) - vw = plc.vars[ch] - if("[ch]_NAME" in plc.vars) - display_description = plc.vars["[ch]_NAME"] - if("[ch]_METHOD" in plc.vars) - how = plc.vars["[ch]_METHOD"] - else - if(isnum(vw)) - how = "Numeric" - else - how = "Text" - else - vw = vars[ch] - if("[ch]_NAME" in vars) - display_description = vars["[ch]_NAME"] - if("[ch]_METHOD" in vars) - how = vars["[ch]_METHOD"] - else - if(isnum(vw)) - how = "Numeric" - else - how = "Text" - var/newvar = vw - switch(how) - if("Numeric") - newvar = input(user,"Enter a number:","Settings",newvar) as num - if("Bit Flag") - var/flag = input(user,"Toggle which bit?","Settings") in bitflags - flag = text2num(flag) - if(newvar & flag) - newvar &= ~flag - else - newvar |= flag - if("Toggle") - newvar = !newvar - if("Text") - newvar = input(user,"Enter a string:","Settings",newvar) as text - if("Long Text") - newvar = input(user,"Enter text:","Settings",newvar) as message - vw = newvar - if(ch in plc.settings) - plc.vars[ch] = vw - else - vars[ch] = vw - if(how == "Toggle") - newvar = (newvar?"ON":"OFF") - to_world("[key_name(user)] changed the setting [display_description] to [newvar].") - if(ch in plc.settings) - ChangeSettingsDialog(user,plc.settings) - else - ChangeSettingsDialog(user,settings) - -/vs_control/proc/RandomizeWithProbability() - for(var/V in settings) - var/newvalue - if("[V]_RANDOM" in vars) - if(isnum(vars["[V]_RANDOM"])) - newvalue = prob(vars["[V]_RANDOM"]) - else if(istext(vars["[V]_RANDOM"])) - newvalue = roll(vars["[V]_RANDOM"]) - else - newvalue = vars[V] - V = newvalue - -/vs_control/proc/ChangePhoron() - for(var/V in plc.settings) - plc.Randomize(V) - -/vs_control/proc/SetDefault(var/mob/user) - var/list/setting_choices = list("Phoron - Standard", "Phoron - Low Hazard", "Phoron - High Hazard", "Phoron - Oh Shit!",\ - "ZAS - Normal", "ZAS - Forgiving", "ZAS - Dangerous", "ZAS - Hellish", "ZAS/Phoron - Initial") - var/def = input(user, "Which of these presets should be used?") as null|anything in setting_choices - if(!def) - return - switch(def) - if("Phoron - Standard") - plc.CLOTH_CONTAMINATION = 1 //If this is on, phoron does damage by getting into cloth. - plc.PHORONGUARD_ONLY = 0 - plc.GENETIC_CORRUPTION = 0 //Chance of genetic corruption as well as toxic damage, X in 1000. - plc.SKIN_BURNS = 0 //Phoron has an effect similar to mustard gas on the un-suited. - plc.EYE_BURNS = 1 //Phoron burns the eyes of anyone not wearing eye protection. - plc.PHORON_HALLUCINATION = 0 - plc.CONTAMINATION_LOSS = 0.02 - - if("Phoron - Low Hazard") - plc.CLOTH_CONTAMINATION = 0 //If this is on, phoron does damage by getting into cloth. - plc.PHORONGUARD_ONLY = 0 - plc.GENETIC_CORRUPTION = 0 //Chance of genetic corruption as well as toxic damage, X in 1000 - plc.SKIN_BURNS = 0 //Phoron has an effect similar to mustard gas on the un-suited. - plc.EYE_BURNS = 1 //Phoron burns the eyes of anyone not wearing eye protection. - plc.PHORON_HALLUCINATION = 0 - plc.CONTAMINATION_LOSS = 0.01 - - if("Phoron - High Hazard") - plc.CLOTH_CONTAMINATION = 1 //If this is on, phoron does damage by getting into cloth. - plc.PHORONGUARD_ONLY = 0 - plc.GENETIC_CORRUPTION = 0 //Chance of genetic corruption as well as toxic damage, X in 1000. - plc.SKIN_BURNS = 1 //Phoron has an effect similar to mustard gas on the un-suited. - plc.EYE_BURNS = 1 //Phoron burns the eyes of anyone not wearing eye protection. - plc.PHORON_HALLUCINATION = 1 - plc.CONTAMINATION_LOSS = 0.05 - - if("Phoron - Oh Shit!") - plc.CLOTH_CONTAMINATION = 1 //If this is on, phoron does damage by getting into cloth. - plc.PHORONGUARD_ONLY = 1 - plc.GENETIC_CORRUPTION = 5 //Chance of genetic corruption as well as toxic damage, X in 1000. - plc.SKIN_BURNS = 1 //Phoron has an effect similar to mustard gas on the un-suited. - plc.EYE_BURNS = 1 //Phoron burns the eyes of anyone not wearing eye protection. - plc.PHORON_HALLUCINATION = 1 - plc.CONTAMINATION_LOSS = 0.075 - - if("ZAS - Normal") - airflow_lightest_pressure = 20 - airflow_light_pressure = 35 - airflow_medium_pressure = 50 - airflow_heavy_pressure = 65 - airflow_dense_pressure = 85 - airflow_stun_pressure = 60 - airflow_stun_cooldown = 60 - airflow_stun = 1 - airflow_damage = 3 - airflow_speed_decay = 1.5 - airflow_delay = 30 - airflow_mob_slowdown = 1 - - if("ZAS - Forgiving") - airflow_lightest_pressure = 45 - airflow_light_pressure = 60 - airflow_medium_pressure = 120 - airflow_heavy_pressure = 110 - airflow_dense_pressure = 200 - airflow_stun_pressure = 150 - airflow_stun_cooldown = 90 - airflow_stun = 0.15 - airflow_damage = 0.5 - airflow_speed_decay = 1.5 - airflow_delay = 50 - airflow_mob_slowdown = 0 - - if("ZAS - Dangerous") - airflow_lightest_pressure = 15 - airflow_light_pressure = 30 - airflow_medium_pressure = 45 - airflow_heavy_pressure = 55 - airflow_dense_pressure = 70 - airflow_stun_pressure = 50 - airflow_stun_cooldown = 50 - airflow_stun = 2 - airflow_damage = 4 - airflow_speed_decay = 1.2 - airflow_delay = 25 - airflow_mob_slowdown = 2 - - if("ZAS - Hellish") - airflow_lightest_pressure = 20 - airflow_light_pressure = 30 - airflow_medium_pressure = 40 - airflow_heavy_pressure = 50 - airflow_dense_pressure = 60 - airflow_stun_pressure = 40 - airflow_stun_cooldown = 40 - airflow_stun = 3 - airflow_damage = 5 - airflow_speed_decay = 1 - airflow_delay = 20 - airflow_mob_slowdown = 3 - connection_insulation = 0 - - if("ZAS/Phoron - Initial") - fire_consuption_rate = initial(fire_consuption_rate) - fire_firelevel_multiplier = initial(fire_firelevel_multiplier) - fire_fuel_energy_release = initial(fire_fuel_energy_release) - IgnitionLevel = initial(IgnitionLevel) - airflow_lightest_pressure = initial(airflow_lightest_pressure) - airflow_light_pressure = initial(airflow_light_pressure) - airflow_medium_pressure = initial(airflow_medium_pressure) - airflow_heavy_pressure = initial(airflow_heavy_pressure) - airflow_dense_pressure = initial(airflow_dense_pressure) - airflow_stun_pressure = initial(airflow_stun_pressure) - airflow_stun_cooldown = initial(airflow_stun_cooldown) - airflow_stun = initial(airflow_stun) - airflow_damage = initial(airflow_damage) - airflow_speed_decay = initial(airflow_speed_decay) - airflow_delay = initial(airflow_delay) - airflow_mob_slowdown = initial(airflow_mob_slowdown) - connection_insulation = initial(connection_insulation) - connection_temperature_delta = initial(connection_temperature_delta) - - plc.PHORON_DMG = initial(plc.PHORON_DMG) - plc.CLOTH_CONTAMINATION = initial(plc.CLOTH_CONTAMINATION) - plc.PHORONGUARD_ONLY = initial(plc.PHORONGUARD_ONLY) - plc.GENETIC_CORRUPTION = initial(plc.GENETIC_CORRUPTION) - plc.SKIN_BURNS = initial(plc.SKIN_BURNS) - plc.EYE_BURNS = initial(plc.EYE_BURNS) - plc.CONTAMINATION_LOSS = initial(plc.CONTAMINATION_LOSS) - plc.PHORON_HALLUCINATION = initial(plc.PHORON_HALLUCINATION) - plc.N2O_HALLUCINATION = initial(plc.N2O_HALLUCINATION) - - - to_world("[key_name(user)] changed the global phoron/ZAS settings to \"[def]\"") - -/pl_control/var/list/settings = list() - -/pl_control/New() - . = ..() - settings = vars.Copy() - - var/datum/D = new() //Ensure only unique vars are put through by making a datum and removing all common vars. - for(var/V in D.vars) - settings -= V - - for(var/V in settings) - if(findtextEx(V,"_RANDOM") || findtextEx(V,"_DESC")) - settings -= V - - settings -= "settings" - -/pl_control/proc/Randomize(V) - var/newvalue - if("[V]_RANDOM" in vars) - if(isnum(vars["[V]_RANDOM"])) - newvalue = prob(vars["[V]_RANDOM"]) - else if(istext(vars["[V]_RANDOM"])) - var/txt = vars["[V]_RANDOM"] - if(findtextEx(txt,"PROB")) - txt = splittext(txt,"/") - txt[1] = replacetext_char(txt[1],"PROB","") - var/p = text2num(txt[1]) - var/r = txt[2] - if(prob(p)) - newvalue = roll(r) - else - newvalue = vars[V] - else if(findtextEx(txt,"PICK")) - txt = replacetext_char(txt,"PICK","") - txt = splittext(txt,",") - newvalue = pick(txt) - else - newvalue = roll(txt) - else - newvalue = vars[V] - vars[V] = newvalue diff --git a/code/modules/ZAS/Zone.dm b/code/modules/ZAS/Zone.dm deleted file mode 100644 index fda674b1d4891..0000000000000 --- a/code/modules/ZAS/Zone.dm +++ /dev/null @@ -1,209 +0,0 @@ -/* - -Overview: - Each zone is a self-contained area where gas values would be the same if tile-based equalization were run indefinitely. - If you're unfamiliar with ZAS, FEA's air groups would have similar functionality if they didn't break in a stiff breeze. - -Class Vars: - name - A name of the format "Zone [#]", used for debugging. - invalid - True if the zone has been erased and is no longer eligible for processing. - needs_update - True if the zone has been added to the update list. - edges - A list of edges that connect to this zone. - air - The gas mixture that any turfs in this zone will return. Values are per-tile with a group multiplier. - -Class Procs: - add(turf/simulated/T) - Adds a turf to the contents, sets its zone and merges its air. - - remove(turf/simulated/T) - Removes a turf, sets its zone to null and erases any gas graphics. - Invalidates the zone if it has no more tiles. - - c_merge(zone/into) - Invalidates this zone and adds all its former contents to into. - - c_invalidate() - Marks this zone as invalid and removes it from processing. - - rebuild() - Invalidates the zone and marks all its former tiles for updates. - - add_tile_air(turf/simulated/T) - Adds the air contained in T.air to the zone's air supply. Called when adding a turf. - - tick() - Called only when the gas content is changed. Archives values and changes gas graphics. - - dbg_data(mob/M) - Sends M a printout of important figures for the zone. - -*/ - - -/zone - var/name - var/invalid = 0 - var/list/contents = list() - var/list/fire_tiles = list() - var/needs_update = 0 - var/list/edges = list() - var/datum/gas_mixture/air = new - var/list/graphic_add = list() - var/list/graphic_remove = list() - var/last_air_temperature = TCMB - var/firelevel = 0 - -/zone/New() - SSair.add_zone(src) - air.temperature = TCMB - air.group_multiplier = 1 - air.volume = CELL_VOLUME - -/zone/proc/add(turf/simulated/T) -#ifdef ZASDBG - ASSERT(!invalid) - ASSERT(istype(T)) - ASSERT(!SSair.has_valid_zone(T)) -#endif - - var/datum/gas_mixture/turf_air = T.return_air() - add_tile_air(turf_air) - T.zone = src - contents.Add(T) - if(T.hotspot) - fire_tiles.Add(T) - SSair.active_fire_zones |= src - T.update_graphic(air.graphic) - -/zone/proc/remove(turf/simulated/T) -#ifdef ZASDBG - ASSERT(!invalid) - ASSERT(istype(T)) - ASSERT(T.zone == src) - soft_assert(T in contents, "Lists are weird broseph") -#endif - contents.Remove(T) - fire_tiles.Remove(T) - T.zone = null - T.update_graphic(graphic_remove = air.graphic) - if(contents.len) - air.group_multiplier = contents.len - else - c_invalidate() - -/zone/proc/c_merge(zone/into) -#ifdef ZASDBG - ASSERT(!invalid) - ASSERT(istype(into)) - ASSERT(into != src) - ASSERT(!into.invalid) -#endif - c_invalidate() - for(var/turf/simulated/T in contents) - into.add(T) - T.update_graphic(graphic_remove = air.graphic) - #ifdef ZASDBG - T.dbg(merged) - #endif - - //rebuild the old zone's edges so that they will be possessed by the new zone - for(var/connection_edge/E in edges) - if(E.contains_zone(into)) - continue //don't need to rebuild this edge - for(var/turf/T in E.connecting_turfs) - SSair.mark_for_update(T) - -/zone/proc/c_invalidate() - invalid = 1 - SSair.remove_zone(src) - #ifdef ZASDBG - for(var/turf/simulated/T in contents) - T.dbg(invalid_zone) - #endif - -/zone/proc/rebuild() - if(invalid) return //Short circuit for explosions where rebuild is called many times over. - c_invalidate() - for(var/turf/simulated/T in contents) - T.update_graphic(graphic_remove = air.graphic) //we need to remove the overlays so they're not doubled when the zone is rebuilt - //T.dbg(invalid_zone) - T.needs_air_update = 0 //Reset the marker so that it will be added to the list. - SSair.mark_for_update(T) - -/zone/proc/add_tile_air(datum/gas_mixture/tile_air) - //air.volume += CELL_VOLUME - air.group_multiplier = 1 - air.multiply(contents.len) - air.merge(tile_air) - air.divide(contents.len+1) - air.group_multiplier = contents.len+1 - -/zone/proc/tick() - - // Update fires. - if(air.temperature >= PHORON_FLASHPOINT && !(src in SSair.active_fire_zones) && length(contents) && air.check_combustability()) - var/turf/T = pick(contents) - if(istype(T)) - T.create_fire(vsc.fire_firelevel_multiplier) - - // Update gas overlays. - if(air.check_tile_graphic(graphic_add, graphic_remove)) - for(var/turf/simulated/T in contents) - T.update_graphic(graphic_add, graphic_remove) - graphic_add.len = 0 - graphic_remove.len = 0 - - // Update connected edges. - for(var/connection_edge/E in edges) - if(E.sleeping) - E.recheck() - - // Handle condensation from the air. - for(var/g in air.gas) - var/product = gas_data.condensation_products[g] - if(product && air.temperature <= gas_data.condensation_points[g]) - var/condensation_area = air.group_multiplier - while(condensation_area > 0) - condensation_area-- - var/turf/flooding = pick(contents) - var/condense_amt = min(air.gas[g], rand(3,5)) - if(condense_amt < 1) - break - air.adjust_gas(g, -condense_amt) - flooding.add_fluid(condense_amt, product) - - // Update atom temperature. - if(abs(air.temperature - last_air_temperature) >= ATOM_TEMPERATURE_EQUILIBRIUM_THRESHOLD) - last_air_temperature = air.temperature - for(var/turf/simulated/T in contents) - for(var/check_atom in T.contents) - var/atom/checking = check_atom - if(checking.simulated) - QUEUE_TEMPERATURE_ATOMS(checking) - CHECK_TICK - -/zone/proc/dbg_data(mob/M) - to_chat(M, name) - for(var/g in air.gas) - to_chat(M, "[gas_data.name[g]]: [air.gas[g]]") - to_chat(M, "P: [air.return_pressure()] kPa V: [air.volume]L T: [air.temperature]°K ([air.temperature - T0C]°C)") - to_chat(M, "O2 per N2: [(air.gas[GAS_NITROGEN] ? air.gas[GAS_OXYGEN]/air.gas[GAS_NITROGEN] : "N/A")] Moles: [air.total_moles]") - to_chat(M, "Simulated: [contents.len] ([air.group_multiplier])") -// to_chat(M, "Unsimulated: [unsimulated_contents.len]") -// to_chat(M, "Edges: [edges.len]") - if(invalid) to_chat(M, "Invalid!") - var/zone_edges = 0 - var/space_edges = 0 - var/space_coefficient = 0 - for(var/connection_edge/E in edges) - if(E.type == /connection_edge/zone) zone_edges++ - else - space_edges++ - space_coefficient += E.coefficient - to_chat(M, "[E:air:return_pressure()]kPa") - - to_chat(M, "Zone Edges: [zone_edges]") - to_chat(M, "Space Edges: [space_edges] ([space_coefficient] connections)") - - //for(var/turf/T in unsimulated_contents) -// to_chat(M, "[T] at ([T.x],[T.y])") diff --git a/code/modules/ZAS/_docs.dm b/code/modules/ZAS/_docs.dm deleted file mode 100644 index 41372ea2a063d..0000000000000 --- a/code/modules/ZAS/_docs.dm +++ /dev/null @@ -1,28 +0,0 @@ -/* - -Zone Air System: - -This air system divides the station into impermeable areas called zones. -When something happens, i.e. a door opening or a wall being taken down, -zones equalize and eventually merge. Making an airtight area closes the connection again. - -Control Flow: -Every air tick: - Marked turfs are updated with update_air_properties(), followed by post_update_air_properties(). - Edges, including those generated by connections in the previous step, are processed. This is where gas is exchanged. - Fire is processed. - Marked zones have their air archived. - -Important Functions: - -SSair.mark_for_update(turf) - When stuff happens, call this. It works on everything. You basically don't need to worry about any other - functions besides CanPass(). - -Notes for people who used ZAS before: - There is no connected_zones anymore. - To get the zones that are connected to a zone, use this loop: - for(var/connection_edge/zone/edge in zone.edges) - var/zone/connected_zone = edge.get_connected_zone(zone) - -*/ \ No newline at end of file diff --git a/code/modules/acting/acting_items.dm b/code/modules/acting/acting_items.dm deleted file mode 100644 index d7afc314b77d1..0000000000000 --- a/code/modules/acting/acting_items.dm +++ /dev/null @@ -1,45 +0,0 @@ -/obj/machinery/acting/wardrobe - name = "wardrobe dispenser" - desc = "A machine that dispenses holo-clothing for those in need." - icon = 'icons/obj/vending.dmi' - icon_state = "cart" - anchored = TRUE - density = TRUE - var/active = 1 - -/obj/machinery/acting/wardrobe/attack_hand(var/mob/user as mob) - user.show_message("You push a button and watch patiently as the machine begins to hum.") - if(active) - active = 0 - spawn(30) - new /obj/item/storage/backpack/chameleon/sydie_kit(src.loc) - src.visible_message("\The [src] beeps, dispensing a small box onto the floor.", "You hear a beeping sound followed by a thumping noise of some kind.") - active = 1 - -/obj/machinery/acting/changer - name = "Quickee's Plastic Surgeon" - desc = "For when you need to be someone else right now." - icon = 'icons/obj/surgery.dmi' - icon_state = "bioprinter" - anchored = TRUE - density = TRUE - -/obj/machinery/acting/changer/attack_hand(var/mob/user as mob) - if(ishuman(user)) - var/mob/living/carbon/human/H = user - H.change_appearance(APPEARANCE_COMMON, TRUE, state = GLOB.z_state) - var/getName = sanitize(input(H, "Would you like to change your name to something else?", "Name change") as null|text, MAX_NAME_LEN) - if(getName) - H.real_name = getName - H.SetName(getName) - H.dna.real_name = getName - if(H.mind) - H.mind.name = H.name - -/obj/machinery/acting/changer/mirror - name = "Mirror of Many Faces" - desc = "For when you need to be someone else right now." - icon = 'icons/obj/watercloset.dmi' - icon_state = "mirror_broke" - anchored = TRUE - density = FALSE diff --git a/code/modules/admin/DB ban/functions.dm b/code/modules/admin/DB ban/functions.dm deleted file mode 100644 index b5ae8be65bb4e..0000000000000 --- a/code/modules/admin/DB ban/functions.dm +++ /dev/null @@ -1,526 +0,0 @@ -/datum/admins/proc/DB_staffwarn_record(var/ckey, var/reason) - if(!check_rights((R_ADMIN|R_MOD), 0)) return - if(!istext(reason)) return - _DB_staffwarn_record(ckey, reason) - -/proc/_DB_staffwarn_record(var/ckey, var/reason) - if(usr && !check_rights((R_ADMIN|R_MOD), 0)) - return - var/dbreason = sql_sanitize_text(reason) - var/dbckey = sql_sanitize_text(ckey) - - establish_db_connection() - if(!dbcon.IsConnected()) - to_chat(usr,"Failed adding StaffWarn: db error") - return - - var/DBQuery/query = dbcon.NewQuery("SELECT id FROM erro_player WHERE ckey = '[dbckey]'") - query.Execute() - var/playerid = -1 - if(query.NextRow()) - playerid = query.item[1] - if(playerid == -1) - to_chat(usr,"You've attempted to set staffwarn on [ckey], but they haven't been seen yet. Staffwarn can only be set on existing players.") - return - query = dbcon.NewQuery("UPDATE erro_player SET staffwarn='[dbreason]' WHERE id=[playerid]") - query.Execute() - to_chat(usr,"StaffWarn saved to DB") - -/datum/admins/proc/DB_staffwarn_remove(var/ckey) - if(!check_rights((R_ADMIN|R_MOD), 0)) return - var/dbckey = sql_sanitize_text(ckey) - - establish_db_connection() - if(!dbcon.IsConnected()) - to_chat(usr,"Failed removing StaffWarn: db error") - return 0 - - var/DBQuery/query = dbcon.NewQuery("UPDATE erro_player SET staffwarn=NULL WHERE ckey='[dbckey]'") - query.Execute() - if(query.RowsAffected() != 1) - to_chat(usr,"StaffWarn unable to be removed from DB") - return 0 - to_chat(usr,"StaffWarn removed from DB") - return 1 - -/datum/admins/proc/DB_ban_record(var/bantype, var/mob/banned_mob, var/duration = -1, var/reason, var/job = "", var/rounds = 0, var/banckey = null, var/banip = null, var/bancid = null) - if(!src || !src.owner) - return - _DB_ban_record(src.owner.ckey, src.owner.computer_id, src.owner.address, bantype, banned_mob, duration, reason, job, rounds, banckey, banip, bancid) - -//Either pass the mob you wish to ban in the 'banned_mob' attribute, or the banckey, banip and bancid variables. If both are passed, the mob takes priority! If a mob is not passed, banckey is the minimum that needs to be passed! banip and bancid are optional. -/proc/_DB_ban_record(var/a_ckey, var/a_computerid, var/a_ip, var/bantype, var/mob/banned_mob, var/duration = -1, var/reason, var/job = "", var/rounds = 0, var/banckey = null, var/banip = null, var/bancid = null) - - if(usr) - if(!check_rights(R_MOD,0) && !check_rights(R_BAN)) return - - establish_db_connection() - if(!dbcon.IsConnected()) - return 0 - - var/serverip = "[world.internet_address]:[world.port]" - var/bantype_pass = 0 - var/bantype_str - switch(bantype) - if(BANTYPE_PERMA) - bantype_str = "PERMABAN" - duration = -1 - bantype_pass = 1 - if(BANTYPE_TEMP) - bantype_str = "TEMPBAN" - bantype_pass = 1 - if(BANTYPE_JOB_PERMA) - bantype_str = "JOB_PERMABAN" - duration = -1 - bantype_pass = 1 - if(BANTYPE_JOB_TEMP) - bantype_str = "JOB_TEMPBAN" - bantype_pass = 1 - if( !bantype_pass ) return 0 - if( !istext(reason) ) return 0 - if( !isnum(duration) ) return 0 - - var/ckey - var/computerid - var/ip - - if(ismob(banned_mob)) - ckey = LAST_CKEY(banned_mob) - computerid = banned_mob.computer_id - ip = banned_mob.lastKnownIP - if(banned_mob.client) - computerid = banned_mob.client.computer_id - ip = banned_mob.client.address - if (bantype == BANTYPE_PERMA || bantype == BANTYPE_TEMP) - banned_mob.ckey = null - else if(banckey) - ckey = ckey(banckey) - computerid = bancid - ip = banip - for (var/mob/M in SSmobs.mob_list) - if (M.ckey == ckey) - M.ckey = null - break - - var/who - for(var/client/C in GLOB.clients) - if(!who) - who = "[C]" - else - who += ", [C]" - - var/adminwho - for(var/client/C as anything in GLOB.admins) - if(!adminwho) - adminwho = "[C]" - else - adminwho += ", [C]" - - reason = sql_sanitize_text(reason) - - var/sql = "INSERT INTO erro_ban (`id`,`bantime`,`serverip`,`bantype`,`reason`,`job`,`duration`,`rounds`,`expiration_time`,`ckey`,`computerid`,`ip`,`a_ckey`,`a_computerid`,`a_ip`,`who`,`adminwho`,`edits`,`unbanned`,`unbanned_datetime`,`unbanned_ckey`,`unbanned_computerid`,`unbanned_ip`) VALUES (null, Now(), '[serverip]', '[bantype_str]', '[reason]', '[job]', [(duration)?"[duration]":"0"], [(rounds)?"[rounds]":"0"], Now() + INTERVAL [(duration>0) ? duration : 0] MINUTE, '[ckey]', '[computerid]', '[ip]', '[a_ckey]', '[a_computerid]', '[a_ip]', '[who]', '[adminwho]', '', null, null, null, null, null)" - var/DBQuery/query_insert = dbcon.NewQuery(sql) - query_insert.Execute() - var/setter = a_ckey - if(usr) - to_chat(usr, "Ban saved to database.") - setter = key_name_admin(usr) - message_admins("[setter] has added a [bantype_str] for [ckey] [(job)?"([job])":""] [(duration > 0)?"([minutes_to_readable(duration)])":""] with the reason: \"[reason]\" to the ban database.",1) - return 1 - - - -/datum/admins/proc/DB_ban_unban(var/ckey, var/bantype, var/job = "") - - if(!check_rights(R_BAN)) return - - var/bantype_str - if(bantype) - var/bantype_pass = 0 - switch(bantype) - if(BANTYPE_PERMA) - bantype_str = "PERMABAN" - bantype_pass = 1 - if(BANTYPE_TEMP) - bantype_str = "TEMPBAN" - bantype_pass = 1 - if(BANTYPE_JOB_PERMA) - bantype_str = "JOB_PERMABAN" - bantype_pass = 1 - if(BANTYPE_JOB_TEMP) - bantype_str = "JOB_TEMPBAN" - bantype_pass = 1 - if(BANTYPE_ANY_FULLBAN) - bantype_str = "ANY" - bantype_pass = 1 - if( !bantype_pass ) return - - var/bantype_sql - if(bantype_str == "ANY") - bantype_sql = "(bantype = 'PERMABAN' OR (bantype = 'TEMPBAN' AND expiration_time > Now() ) )" - else - bantype_sql = "bantype = '[bantype_str]'" - - var/sql = "SELECT id FROM erro_ban WHERE ckey = '[ckey]' AND [bantype_sql] AND (unbanned is null OR unbanned = false)" - if(job) - sql += " AND job = '[job]'" - - establish_db_connection() - if(!dbcon.IsConnected()) - return - - var/ban_id - var/ban_number = 0 //failsafe - - var/DBQuery/query = dbcon.NewQuery(sql) - query.Execute() - while(query.NextRow()) - ban_id = query.item[1] - ban_number++; - - if(ban_number == 0) - to_chat(usr, "Database update failed due to no bans fitting the search criteria. If this is not a legacy ban you should contact the database admin.") - return - - if(ban_number > 1) - to_chat(usr, "Database update failed due to multiple bans fitting the search criteria. Note down the ckey, job and current time and contact the database admin.") - return - - if(istext(ban_id)) - ban_id = text2num(ban_id) - if(!isnum(ban_id)) - to_chat(usr, "Database update failed due to a ban ID mismatch. Contact the database admin.") - return - - DB_ban_unban_by_id(ban_id) - -/datum/admins/proc/DB_ban_edit(var/banid = null, var/param = null) - - if(!check_rights(R_BAN)) return - - if(!isnum(banid) || !istext(param)) - to_chat(usr, "Cancelled") - return - - var/DBQuery/query = dbcon.NewQuery("SELECT ckey, duration, reason FROM erro_ban WHERE id = [banid]") - query.Execute() - - var/eckey = usr.ckey //Editing admin ckey - var/pckey //(banned) Player ckey - var/duration //Old duration - var/reason //Old reason - - if(query.NextRow()) - pckey = query.item[1] - duration = query.item[2] - reason = query.item[3] - else - to_chat(usr, "Invalid ban id. Contact the database admin") - return - - reason = sql_sanitize_text(reason) - var/value - - switch(param) - if("reason") - if(!value) - value = sanitize(input("Insert the new reason for [pckey]'s ban", "New Reason", "[reason]", null) as null|text) - value = sql_sanitize_text(value) - if(!value) - to_chat(usr, "Cancelled") - return - - var/DBQuery/update_query = dbcon.NewQuery("UPDATE erro_ban SET reason = '[value]', edits = CONCAT(edits,'- [eckey] changed ban reason from \\\"[reason]\\\" to \\\"[value]\\\"
              ') WHERE id = [banid]") - update_query.Execute() - message_admins("[key_name_admin(usr)] has edited a ban for [pckey]'s reason from [reason] to [value]",1) - if("duration") - if(!value) - value = input("Insert the new duration (in minutes) for [pckey]'s ban", "New Duration", "[duration]", null) as null|num - if(!isnum(value) || !value) - to_chat(usr, "Cancelled") - return - - var/DBQuery/update_query = dbcon.NewQuery("UPDATE erro_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]") - message_admins("[key_name_admin(usr)] has edited a ban for [pckey]'s duration from [duration] to [value]",1) - update_query.Execute() - if("unban") - if(alert("Unban [pckey]?", "Unban?", "Yes", "No") == "Yes") - DB_ban_unban_by_id(banid) - return - else - to_chat(usr, "Cancelled") - return - else - to_chat(usr, "Cancelled") - return - -/datum/admins/proc/DB_ban_unban_by_id(var/id) - - if(!check_rights(R_BAN)) return - - var/sql = "SELECT ckey FROM erro_ban WHERE id = [id]" - - establish_db_connection() - if(!dbcon.IsConnected()) - return - - var/ban_number = 0 //failsafe - - var/pckey - var/DBQuery/query = dbcon.NewQuery(sql) - query.Execute() - while(query.NextRow()) - pckey = query.item[1] - ban_number++; - - if(ban_number == 0) - to_chat(usr, "Database update failed due to a ban id not being present in the database.") - return - - if(ban_number > 1) - to_chat(usr, "Database update failed due to multiple bans having the same ID. Contact the database admin.") - return - - if(!src.owner || !istype(src.owner, /client)) - return - - var/unban_ckey = src.owner:ckey - var/unban_computerid = src.owner:computer_id - var/unban_ip = src.owner:address - - var/sql_update = "UPDATE erro_ban SET unbanned = 1, unbanned_datetime = Now(), unbanned_ckey = '[unban_ckey]', unbanned_computerid = '[unban_computerid]', unbanned_ip = '[unban_ip]' WHERE id = [id]" - message_admins("[key_name_admin(usr)] has lifted [pckey]'s ban.",1) - - var/DBQuery/query_update = dbcon.NewQuery(sql_update) - query_update.Execute() - - -/client/proc/DB_ban_panel() - set category = "Admin" - set name = "Banning Panel" - set desc = "Edit admin permissions" - - if(!holder) - return - - holder.DB_ban_panel() - - -/datum/admins/proc/DB_ban_panel(var/playerckey = null, var/adminckey = null, var/playerip = null, var/playercid = null, var/dbbantype = null, var/match = null) - if(!usr.client) - return - - if(!check_rights(R_BAN)) return - - establish_db_connection() - if(!dbcon.IsConnected()) - to_chat(usr, "Failed to establish database connection") - return - - var/output = "
              " - - output += "" - - output += "" - output += "" - output += "
              " - output += "

              Banning panel

              " - output += "
              " - - output += "
              Add custom ban: (ONLY use this if you can't ban through any other method)" - output += "" - output += "" - output += "" - output += "" - output += "" - output += "" - output += "" - output += "
              Ban type:Ckey:
              IP: CID:
              Duration: Job:
              " - output += "Reason:

              " - output += "" - output += "
              " - - output += "
              " - - output += "
              " - output += "" - output += "" - output += "" - output += "" - output += "
              Search:" - output += "
              Ckey: Admin ckey:
              IP: CID:
              Ban type:
              " - output += "

              " - output += " Match(min. 3 characters to search by key or ip, and 7 to search by cid)
              " - output += "
              " - output += "Please note that all jobban bans or unbans are in-effect the following round.
              " - output += "This search shows only last 100 bans." - - if(adminckey || playerckey || playerip || playercid || dbbantype) - - adminckey = ckey(adminckey) - playerckey = ckey(playerckey) - playerip = sql_sanitize_text(playerip) - playercid = sql_sanitize_text(playercid) - - if(adminckey || playerckey || playerip || playercid || dbbantype) - - var/blcolor = "#ffeeee" //banned light - var/bdcolor = "#ffdddd" //banned dark - var/ulcolor = "#eeffee" //unbanned light - var/udcolor = "#ddffdd" //unbanned dark - var/alcolor = "#eeeeff" // auto-unbanned light - var/adcolor = "#ddddff" // auto-unbanned dark - - output += "" - output += "" - output += "" - output += "" - output += "" - output += "" - output += "" - output += "" - - var/adminsearch = "" - var/playersearch = "" - var/ipsearch = "" - var/cidsearch = "" - var/bantypesearch = "" - - if(!match) - if(adminckey) - adminsearch = "AND a_ckey = '[adminckey]' " - if(playerckey) - playersearch = "AND ckey = '[playerckey]' " - if(playerip) - ipsearch = "AND ip = '[playerip]' " - if(playercid) - cidsearch = "AND computerid = '[playercid]' " - else - if(adminckey && length(adminckey) >= 3) - adminsearch = "AND a_ckey LIKE '[adminckey]%' " - if(playerckey && length(playerckey) >= 3) - playersearch = "AND ckey LIKE '[playerckey]%' " - if(playerip && length(playerip) >= 3) - ipsearch = "AND ip LIKE '[playerip]%' " - if(playercid && length(playercid) >= 7) - cidsearch = "AND computerid LIKE '[playercid]%' " - - if(dbbantype) - bantypesearch = "AND bantype = " - - switch(dbbantype) - if(BANTYPE_TEMP) - bantypesearch += "'TEMPBAN' " - if(BANTYPE_JOB_PERMA) - bantypesearch += "'JOB_PERMABAN' " - if(BANTYPE_JOB_TEMP) - bantypesearch += "'JOB_TEMPBAN' " - else - bantypesearch += "'PERMABAN' " - - var/DBQuery/select_query = dbcon.NewQuery("SELECT id, bantime, bantype, reason, job, duration, expiration_time, ckey, a_ckey, unbanned, unbanned_ckey, unbanned_datetime, edits, ip, computerid FROM erro_ban WHERE 1 [playersearch] [adminsearch] [ipsearch] [cidsearch] [bantypesearch] ORDER BY bantime DESC LIMIT 100") - select_query.Execute() - - var/now = time2text(world.realtime, "YYYY-MM-DD hh:mm:ss") // MUST BE the same format as SQL gives us the dates in, and MUST be least to most specific (i.e. year, month, day not day, month, year) - - while(select_query.NextRow()) - var/banid = select_query.item[1] - var/bantime = select_query.item[2] - var/bantype = select_query.item[3] - var/reason = select_query.item[4] - var/job = select_query.item[5] - var/duration = select_query.item[6] - var/expiration = select_query.item[7] - var/ckey = select_query.item[8] - var/ackey = select_query.item[9] - var/unbanned = select_query.item[10] - var/unbanckey = select_query.item[11] - var/unbantime = select_query.item[12] - var/edits = select_query.item[13] - var/ip = select_query.item[14] - var/cid = select_query.item[15] - - // true if this ban has expired - var/auto = (bantype in list("TEMPBAN", "JOB_TEMPBAN")) && now > expiration // oh how I love ISO 8601 (ish) date strings - - var/lcolor = blcolor - var/dcolor = bdcolor - if(unbanned) - lcolor = ulcolor - dcolor = udcolor - else if(auto) - lcolor = alcolor - dcolor = adcolor - - var/typedesc ="" - switch(bantype) - if("PERMABAN") - typedesc = "PERMABAN" - if("TEMPBAN") - typedesc = "TEMPBAN
              ([minutes_to_readable(duration)]) [(unbanned || auto) ? "" : "(Edit)"]
              Expires [expiration]
              " - if("JOB_PERMABAN") - typedesc = "JOBBAN
              ([job])" - if("JOB_TEMPBAN") - typedesc = "TEMP JOBBAN
              ([job])
              ([minutes_to_readable(duration)]
              Expires [expiration]
              " - - output += "" - output += "" - output += "" - output += "" - output += "" - output += "" - output += "" - output += "" - output += "" - output += "" - output += "" - output += "" - output += "" - output += "" - if(edits) - output += "" - output += "" - output += "" - output += "" - output += "" - output += "" - if(unbanned) - output += "" - output += "" - output += "" - else if(auto) - output += "" - output += "" - output += "" - output += "" - output += "" - output += "" - - output += "
              TYPECKEYTIME APPLIEDADMINOPTIONS
              [typedesc][ckey][bantime][ackey][(unbanned || auto) ? "" : "Unban"]
              IP: [ip]CIP: [cid]
              Reason: [(unbanned || auto) ? "" : "(Edit)"] \"[reason]\"
              EDITS
              [edits]
              UNBANNED by admin [unbanckey] on [unbantime]
              EXPIRED at [expiration]
               
              " - - show_browser(usr, output,"window=lookupbans;size=900x700") diff --git a/code/modules/admin/IsBanned.dm b/code/modules/admin/IsBanned.dm deleted file mode 100644 index ba84bb1a46cfe..0000000000000 --- a/code/modules/admin/IsBanned.dm +++ /dev/null @@ -1,76 +0,0 @@ -//Blocks an attempt to connect before even creating our client datum thing. -/world/IsBanned(key,address,computer_id) - if(ckey(key) in admin_datums) - return ..() - - //Guest Checking - if(!config.guests_allowed && IsGuestKey(key)) - log_access("Failed Login: [key] - Guests not allowed") - message_admins("Failed Login: [key] - Guests not allowed") - return list("reason"="guest", "desc"="\nReason: Guests not allowed. Please sign in with a byond account.") - - if(config.ban_legacy_system) - - //Ban Checking - . = CheckBan( ckey(key), computer_id, address ) - if(.) - log_access("Failed Login: [key] [computer_id] [address] - Banned [.["reason"]]") - message_admins("Failed Login: [key] id:[computer_id] ip:[address] - Banned [.["reason"]]") - return . - - return ..() //default pager ban stuff - - else - - var/ckeytext = ckey(key) - - if(!establish_db_connection()) - error("Ban database connection failure. Key [ckeytext] not checked") - log_misc("Ban database connection failure. Key [ckeytext] not checked") - return - - var/failedcid = 1 - var/failedip = 1 - - if (config.minimum_player_age && get_player_age(key) < config.minimum_player_age) - message_admins("[key] tried to join but did not meet the configured minimum player age.") - return list("reason"="player age", "desc"="This server is not currently allowing accounts with a low number of days since first connection to join.") - - var/ipquery = "" - var/cidquery = "" - if(address) - failedip = 0 - ipquery = " OR ip = '[address]' " - - if(computer_id) - failedcid = 0 - cidquery = " OR computerid = '[computer_id]' " - - var/DBQuery/query = dbcon.NewQuery("SELECT ckey, ip, computerid, a_ckey, reason, expiration_time, duration, bantime, bantype FROM erro_ban WHERE (ckey = '[ckeytext]' [ipquery] [cidquery]) AND (bantype = 'PERMABAN' OR (bantype = 'TEMPBAN' AND expiration_time > Now())) AND isnull(unbanned)") - - query.Execute() - - while(query.NextRow()) - var/pckey = query.item[1] - //var/pip = query.item[2] - //var/pcid = query.item[3] - var/ackey = query.item[4] - var/reason = query.item[5] - var/expiration = query.item[6] - var/duration = query.item[7] - var/bantime = query.item[8] - var/bantype = query.item[9] - - var/expires = "" - if(text2num(duration) > 0) - expires = " The ban is for [minutes_to_readable(duration)] and expires on [expiration] (server time)." - - var/desc = "\nReason: You, or another user of this computer or connection ([pckey]) is banned from playing here. The ban reason is:\n[reason]\nThis ban was applied by [ackey] on [bantime], [expires]" - - return list("reason"="[bantype]", "desc"="[desc]") - - if (failedcid) - message_admins("[key] has logged in with a blank computer id in the ban check.") - if (failedip) - message_admins("[key] has logged in with a blank ip in the ban check.") - return ..() //default pager ban stuff diff --git a/code/modules/admin/NewBan.dm b/code/modules/admin/NewBan.dm deleted file mode 100644 index fa707658d288a..0000000000000 --- a/code/modules/admin/NewBan.dm +++ /dev/null @@ -1,230 +0,0 @@ -var/global/CMinutes = null -var/global/savefile/Banlist - - -/proc/CheckBan(var/ckey, var/id, var/address) - if(!Banlist) // if Banlist cannot be located for some reason - LoadBans() // try to load the bans - if(!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"])) - ClearTempbans() - return 0 - else - .["desc"] = "\nReason: [Banlist["reason"]]\nExpires: [GetExp(Banlist["minutes"])]\nBy: [Banlist["bannedby"]][appeal]" - else - Banlist.cd = "/base/[ckey][id]" - .["desc"] = "\nReason: [Banlist["reason"]]\nExpires: PERMENANT\nBy: [Banlist["bannedby"]][appeal]" - .["reason"] = "ckey/id" - return . - else - for (var/A in Banlist.dir) - Banlist.cd = "/base/[A]" - var/matches - if( ckey == Banlist["key"] ) - matches += "ckey" - if( id == Banlist["id"] ) - if(matches) - matches += "/" - matches += "id" - if( address == Banlist["ip"] ) - if(matches) - matches += "/" - matches += "ip" - - if(matches) - if(Banlist["temp"]) - if (!GetExp(Banlist["minutes"])) - ClearTempbans() - return 0 - else - .["desc"] = "\nReason: [Banlist["reason"]]\nExpires: [GetExp(Banlist["minutes"])]\nBy: [Banlist["bannedby"]][appeal]" - else - .["desc"] = "\nReason: [Banlist["reason"]]\nExpires: PERMENANT\nBy: [Banlist["bannedby"]][appeal]" - .["reason"] = matches - return . - return 0 - -/proc/UpdateTime() //No idea why i made this a proc. - CMinutes = (world.realtime / 10) / 60 - return 1 - -/hook/startup/proc/loadBans() - return LoadBans() - -/proc/LoadBans() - - Banlist = new("data/banlist.bdb") - log_admin("Loading Banlist") - - if (!length(Banlist.dir)) log_admin("Banlist is empty.") - - if (!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" - - ClearTempbans() - return 1 - -/proc/ClearTempbans() - UpdateTime() - - Banlist.cd = "/base" - for (var/A in Banlist.dir) - Banlist.cd = "/base/[A]" - if (!Banlist["key"] || !Banlist["id"]) - RemoveBan(A) - log_admin("Invalid Ban.") - message_admins("Invalid Ban.") - continue - - if (!Banlist["temp"]) continue - if (CMinutes >= Banlist["minutes"]) RemoveBan(A) - - return 1 - - -/proc/AddBan(ckey, computerid, reason, bannedby, temp, minutes, address) - - var/bantimestamp - - if (temp) - UpdateTime() - bantimestamp = CMinutes + minutes - - Banlist.cd = "/base" - if (Banlist.dir.Find("[ckey][computerid]")) - to_chat(usr, "Ban already exists.") - return 0 - else if (!ckey) - to_chat(usr, "Ckey does not exist.") - return 0 - else - Banlist.dir.Add("[ckey][computerid]") - Banlist.cd = "/base/[ckey][computerid]" - to_save(Banlist["key"], ckey) - to_save(Banlist["id"], computerid) - to_save(Banlist["ip"], address) - to_save(Banlist["reason"], reason) - to_save(Banlist["bannedby"], bannedby) - to_save(Banlist["temp"], temp) - if (temp) - to_save(Banlist["minutes"], bantimestamp) - return 1 - -/proc/RemoveBan(foldername) - var/key - var/id - - Banlist.cd = "/base/[foldername]" - from_save(Banlist["key"], key) - from_save(Banlist["id"], id) - Banlist.cd = "/base" - - if (!Banlist.dir.Remove(foldername)) return 0 - - if(!usr) - log_admin("Ban Expired: [key]") - message_admins("Ban Expired: [key]") - else - ban_unban_log_save("[key_name_admin(usr)] unbanned [key]") - log_admin("[key_name_admin(usr)] unbanned [key]") - message_admins("[key_name_admin(usr)] unbanned: [key]") - 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) - continue - - return 1 - -/proc/GetExp(minutes as num) - UpdateTime() - var/exp = minutes - CMinutes - if (exp <= 0) - return 0 - else - var/timeleftstring - if (exp >= 1440) //1440 = 1 day in minutes - timeleftstring = "[round(exp / 1440, 0.1)] Days" - else if (exp >= 60) //60 = 1 hour in minutes - timeleftstring = "[round(exp / 60, 0.1)] Hours" - else - timeleftstring = "[exp] Minutes" - return timeleftstring - -/datum/admins/proc/unbanpanel() - var/count = 0 - var/dat - //var/dat = "
              Unban Player: (U) = Unban , (E) = Edit Ban (Total
              " - Banlist.cd = "/base" - for (var/A in Banlist.dir) - count++ - 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/expiry - if(Banlist["temp"]) - expiry = GetExp(Banlist["minutes"]) - if(!expiry) expiry = "Removal Pending" - else expiry = "Permaban" - - dat += text("") - - dat += "
              (U)(E) Key: [key]ComputerID: [id]IP: [ip] [expiry](By: [by])(Reason: [reason])
              " - dat = "
              Bans: (U) = Unban , (E) = Edit Ban - ([count] Bans)
              [dat]" - show_browser(usr, dat, "window=unbanp;size=875x400") - -//////////////////////////////////// DEBUG //////////////////////////////////// - -/proc/CreateBans() - - UpdateTime() - - var/i - var/last - - for(i=0, i<1001, i++) - 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]" - to_save(Banlist["key"], "trash[i]") - else - Banlist.cd = "/base" - Banlist.dir.Add("[last]trashid[i]") - Banlist.cd = "/base/[last]trashid[i]" - to_save(Banlist["key"], last) - to_save(Banlist["id"], "trashid[i]") - to_save(Banlist["reason"], "Trashban[i].") - to_save(Banlist["temp"], a) - to_save(Banlist["minutes"], CMinutes + rand(1,2000)) - to_save(Banlist["bannedby"], "trashmin") - last = "trash[i]" - - Banlist.cd = "/base" - -/proc/ClearAllBans() - Banlist.cd = "/base" - for (var/A in Banlist.dir) - RemoveBan(A) diff --git a/code/modules/admin/admin.dm b/code/modules/admin/admin.dm deleted file mode 100644 index c9222fd9b3389..0000000000000 --- a/code/modules/admin/admin.dm +++ /dev/null @@ -1,1628 +0,0 @@ - -var/global/BSACooldown = 0 -var/global/floorIsLava = 0 - - -//////////////////////////////// -/proc/message_admins(var/msg) - msg = "ADMIN LOG: [msg]" - log_adminwarn(msg) - for(var/client/C as anything in GLOB.admins) - if(R_ADMIN & C.holder.rights) - to_chat(C, msg) -/proc/message_staff(var/msg) - msg = "STAFF LOG: [msg]" - log_adminwarn(msg) - for(var/client/C as anything in GLOB.admins) - if(C && C.holder && (R_INVESTIGATE & C.holder.rights)) - to_chat(C, msg) -/proc/msg_admin_attack(var/text) //Toggleable Attack Messages - log_attack(text) - var/rendered = "ATTACK: [text]" - for(var/client/C as anything in GLOB.admins) - if(check_rights(R_INVESTIGATE, 0, C)) - if(C.get_preference_value(/datum/client_preference/staff/show_attack_logs) == GLOB.PREF_SHOW) - var/msg = rendered - to_chat(C, msg) -/proc/admin_notice(var/message, var/rights) - for(var/mob/M in SSmobs.mob_list) - if(check_rights(rights, 0, M)) - to_chat(M, message) -///////////////////////////////////////////////////////////////////////////////////////////////Panels - -/datum/admins/proc/show_player_panel(var/mob/M in SSmobs.mob_list) - set category = null - set name = "Show Player Panel" - set desc="Edit player (respawn, ban, heal, etc)" - - if(!M) - to_chat(usr, "You seem to be selecting a mob that doesn't exist anymore.") - return - if (!istype(src,/datum/admins)) - src = usr.client.holder - if (!istype(src,/datum/admins)) - to_chat(usr, "Error: you are not an admin!") - return - - var/body = "Options for [M.key]" - body += "Options panel for [M]" - var/last_ckey = LAST_CKEY(M) - if(M.client) - body += " played by [M.client] " - body += "\[[M.client.holder ? M.client.holder.rank : "Player"]\]" - else if(last_ckey) - body += " (last occupied by ckey [last_ckey])" - - if(istype(M, /mob/new_player)) - body += " Hasn't Entered Game " - else - body += " \[Heal\] " - - var/mob/living/exosuit/E = M - if(istype(E) && E.pilots) - body += "
              Exosuit pilots:
              " - for(var/mob/living/pilot in E.pilots) - body += "[pilot] " - body += " \[link\]
              " - - body += {" -

              \[ - VV - - TP - - PM - - DN - - [admin_jump_link(M, src)]\]
              - Mob type: [M.type]
              - Inactivity time: [M.client ? "[M.client.inactivity/600] minutes" : "Logged out"]

              - PARALYZE | - Kick | - Warn | - Ban | - Jobban | - Notes | - "} - - if (!istype(M, /mob/new_player) && !istype(M, /mob/observer)) - body += "Cryo Character | " - - if(M.client) - body += "Prison | " - body += "Reload Save | " - body += "Reload Character | " - var/muted = M.client.prefs.muted - body += {"
              Mute: - \[IC | - OOC | - AOOC | - PRAY | - ADMINHELP | - DEADCHAT\] - (toggle all) - "} - body += "

              Staff Warning: [M.client.staffwarn ? M.client.staffwarn : "No"]
              " - if (!M.client.staffwarn) - body += "Set StaffWarn" - else - body += "Remove StaffWarn" - - body += {"

              - Jump to | - Get | - Send To -

              - [check_rights(R_ADMIN|R_MOD,0) ? "Traitor panel | " : "" ] - [check_rights(R_INVESTIGATE,0) ? "Skill panel" : "" ] - "} - - if(M.mind) - body += "

              " - body += "Goals:" - body += "
              " - body += "[jointext(M.mind.summarize_goals(FALSE, TRUE, src), "
              ")]" - body += "
              " - body += "Add Random Goal" - - body += "

              " - body += "Psionics:
              " - if(isliving(M)) - var/mob/living/psyker = M - if(psyker.psi) - body += "Remove psionics.

              " - body += "Trigger latencies.
              " - body += "
              " - for(var/faculty in list(PSI_COERCION, PSI_PSYCHOKINESIS, PSI_REDACTION, PSI_ENERGISTICS)) - var/decl/psionic_faculty/faculty_decl = SSpsi.get_faculty(faculty) - var/faculty_rank = psyker.psi ? psyker.psi.get_rank(faculty) : 0 - body += "" - for(var/i = 1 to LAZYLEN(GLOB.psychic_ranks_to_strings)) - var/psi_title = GLOB.psychic_ranks_to_strings[i] - if(i == faculty_rank) - psi_title = "[psi_title]" - body += "" - body += "" - body += "
              [faculty_decl.name][psi_title]
              " - - if (M.client) - if(!istype(M, /mob/new_player)) - body += "

              " - body += "Transformation:" - body += "
              " - - //Monkey - if(issmall(M)) - body += "Monkeyized | " - else - body += "Monkeyize | " - - //Corgi - if(iscorgi(M)) - body += "Corgized | " - else - body += "Corgize | " - - //AI / Cyborg - if(isAI(M)) - body += "Is an AI " - else if(ishuman(M)) - body += {"Make AI | - Make Robot | - Make Alien | - Make Slime | - Make Zombie | - "} - - //Simple Animals - if(isanimal(M)) - body += "Re-Animalize | " - else - body += "Animalize | " - - // DNA2 - Admin Hax - if(M.dna && iscarbon(M)) - body += "

              " - body += "DNA Blocks:
              " - var/bname - for(var/block=1;block<=DNA_SE_LENGTH;block++) - if(((block-1)%5)==0) - body += "" - bname = assigned_blocks[block] - body += "" - body += "
               12345
              [block-1]" - if(bname) - var/bstate=M.dna.GetSEState(block) - var/bcolor="[(bstate)?"#006600":"#ff0000"]" - body += "[bname][block]" - else - body += "[block]" - body+="
              " - - body += {"

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

              - Observer | - \[ Xenos: Larva - \[ Crew: Human - Unathi - Skrell - Vox \] | \[ - Nymph - Diona \] | - \[ slime: Baby, - Adult \] - Monkey | - Cyborg | - Cat | - Runtime | - Corgi | - Ian | - Crab | - Coffee | - \[ Construct: Armoured , - Builder , - Wraith \] - Shade -
              - "} - body += {"

              - Other actions: -
              - Forcesay | - Clone Other - "} - if (M.client) - body += {" | - Thunderdome 1 | - Thunderdome 2 | - Thunderdome Admin | - Thunderdome Observer | - "} - // language toggles - body += "

              Languages:
              " - var/f = 1 - for(var/k in all_languages) - var/datum/language/L = all_languages[k] - if(!(L.flags & INNATE)) - if(!f) body += " | " - else f = 0 - if(L in M.languages) - body += "[k]" - else - body += "[k]" - - body += {"
              - - "} - - show_browser(usr, body, "window=adminplayeropts;size=550x515") - - -/datum/player_info/var/author // admin who authored the information -/datum/player_info/var/rank //rank of admin who made the notes -/datum/player_info/var/content // text content of the information -/datum/player_info/var/timestamp // Because this is bloody annoying - -#define PLAYER_NOTES_ENTRIES_PER_PAGE 50 -/datum/admins/proc/PlayerNotes() - set category = "Admin" - set name = "Player Notes" - if (!istype(src,/datum/admins)) - src = usr.client.holder - if (!istype(src,/datum/admins)) - to_chat(usr, "Error: you are not an admin!") - return - PlayerNotesPage() - -/datum/admins/proc/PlayerNotesPage(var/filter_term) - var/list/dat = list() - dat += "Player notes
              " - var/savefile/S=new("data/player_notes.sav") - var/list/note_keys - from_save(S, note_keys) - - if(filter_term) - for(var/t in note_keys) - if(findtext(lowertext(t), lowertext(filter_term))) - continue - note_keys -= t - - dat += "
              Search term: [filter_term ? filter_term : "-----"]

              " - - if(!note_keys) - dat += "No notes found." - else - dat += "" - note_keys = sortList(note_keys) - for(var/t in note_keys) - dat += "" - dat += "
              [t]

              " - - var/datum/browser/popup = new(usr, "player_notes", "Player Notes", 400, 400) - popup.set_content(jointext(dat, null)) - popup.open() - - -/datum/admins/proc/player_has_info(key) - var/target = ckey(key) - var/savefile/info = new("data/player_saves/[copytext_char(target, 1, 2)]/[target]/info.sav") - var/list/infos - from_save(info, infos) - if (!length(infos)) - return FALSE - return TRUE - - -/// Page matter from #30904, to be replaced by that behavior later -/proc/html_page(title, list/body, head = "") - if (islist(body)) - body = body.Join() - return {"\ - \n\ - \ - \ - \ - \ - \ - \ - \ - [title]\ - [head]\ - \ - \ - [body]\ - \ - \ - "} - - -/datum/admins/proc/show_player_info(target as text) - set category = "Admin" - set name = "Show Player Info" - if (!target) - return - if (!istext(target)) - return - target = ckey(target) - var/client/user = resolve_client(usr) - if (!check_rights(R_INVESTIGATE, TRUE, user)) - return - var/datum/admins/handler = user.holder - var/client/subject - for (var/client/client as anything in GLOB.clients) - if (client.ckey == target) - subject = client - break - var/list/body = list() - body += {"\ -
              \ - Player Age: [subject ? subject.player_age : "Not Connected"]\ -
              \ - Add Comment\ -
              \ -
              \ - "} - var/list/infos - var/savefile = new /savefile ("data/player_saves/[copytext_char(target, 1, 2)]/[target]/info.sav") - from_save(savefile, infos) - if (!infos) - body += {"
              No comments saved.
              "} - for (var/i = length(infos) to 1 step -1) - var/datum/player_info/comment = infos[i] - var/remove_button = "" - if (comment.author == user.key || check_rights(R_HOST, FALSE, user)) - remove_button = {"Remove"} - body += {"\ -
              \ -
              [comment.content]
              \ -
              \ - [comment.author || "(not recorded)"], \ - [comment.rank || "(not recorded)"], \ - on [comment.timestamp || "(not recorded)"]\ -
              \ - [remove_button]\ -
              \ - "} - send_rsc(user, 'html/browser/common.css', "common.css") - show_browser(user, html_page("Player Info: [target]", body), "window=showplayernotes;size=480x480;") - - -/datum/admins/proc/access_news_network() //MARKER - set category = "Fun" - set name = "Access Newscaster Network" - set desc = "Allows you to view, add and edit news feeds." - - if (!istype(src,/datum/admins)) - src = usr.client.holder - if (!istype(src,/datum/admins)) - to_chat(usr, "Error: you are not an admin!") - return - - var/datum/feed_network/torch_network = news_network[1] //temp change until the UI can be updated to support switching networks. - - var/dat - dat = text("Admin Newscaster

              Admin Newscaster Unit

              ") - - switch(admincaster_screen) - if(0) - dat += {"Welcome to the admin newscaster.
              Here you can add, edit and censor every newspiece on the network. -
              Feed channels and stories entered through here will be uneditable and handled as official news by the rest of the units. -
              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(torch_network.wanted_issue) - dat+= "
              Read Wanted Issue" - - dat+= {"

              Create Feed Channel -
              View Feed Channels -
              Submit new Feed story -

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

              The newscaster recognises you as:
              [src.admincaster_signature]
              - "} - if(1) - dat+= "Feed Channels
              " - if( !length(torch_network.network_channels) ) - dat+="No active channels found..." - else - for(var/datum/feed_channel/CHANNEL in torch_network.network_channels) - if(CHANNEL.is_admin_channel) - dat+="[CHANNEL.channel_name]
              " - else - dat+="[CHANNEL.channel_name] [(CHANNEL.censored) ? ("***") : null ]
              " - dat+={"

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

              -
              Submit

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

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

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

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

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

              " - if(src.admincaster_feed_channel.channel_name =="" || src.admincaster_feed_channel.channel_name == "\[REDACTED\]") - dat+="Invalid channel name.
              " - var/check = 0 - for(var/datum/feed_channel/FC in torch_network.network_channels) - if(FC.channel_name == src.admincaster_feed_channel.channel_name) - check = 1 - break - if(check) - dat+="Channel name already in use.
              " - dat+="
              Return
              " - if(9) - dat+="[src.admincaster_feed_channel.channel_name]: \[created by: [src.admincaster_feed_channel.author]\]
              " - if(src.admincaster_feed_channel.censored) - dat+={" - ATTENTION: This channel has been deemed as threatening to the welfare of the [station_name()], and marked with a [GLOB.using_map.company_name] D-Notice.
              - No further feed story additions are allowed while the D-Notice is in effect.

              - "} - else - if( !length(admincaster_feed_channel.messages) ) - dat+="No feed messages found in channel...
              " - else - var/i = 0 - for(var/datum/feed_message/MESSAGE in src.admincaster_feed_channel.messages) - i++ - dat+="-[MESSAGE.body]
              " - if(MESSAGE.img) - send_rsc(usr, MESSAGE.img, "tmp_photo[i].png") - dat+="

              " - dat+="\[Story by [MESSAGE.author]\]
              " - dat+={" -

              Refresh -
              Back - "} - if(10) - dat+={" - [GLOB.using_map.company_name] Feed Censorship Tool
              - NOTE: Due to the nature of news Feeds, total deletion of a Feed Story is not possible.
              - Keep in mind that users attempting to view a censored feed will instead see the \[REDACTED\] tag above it.
              -
              Select Feed channel to get Stories from:
              - "} - if(!length(torch_network.network_channels)) - dat+="No feed channels found active...
              " - else - for(var/datum/feed_channel/CHANNEL in torch_network.network_channels) - dat+="[CHANNEL.channel_name] [(CHANNEL.censored) ? ("***") : null ]
              " - dat+="
              Cancel" - if(11) - dat+={" - [GLOB.using_map.company_name] D-Notice Handler
              - A D-Notice is to be bestowed upon the channel if the handling Authority deems it as harmful for the [station_name()]'s - morale, integrity or disciplinary behaviour. A D-Notice will render a channel unable to be updated by anyone, without deleting any feed - stories it might contain at the time. You can lift a D-Notice if you have the required access at any time.
              - "} - if(!length(torch_network.network_channels)) - dat+="No feed channels found active...
              " - else - for(var/datum/feed_channel/CHANNEL in torch_network.network_channels) - dat+="[CHANNEL.channel_name] [(CHANNEL.censored) ? ("***") : null ]
              " - - dat+="
              Back" - if(12) - dat+={" - [src.admincaster_feed_channel.channel_name]: \[ created by: [src.admincaster_feed_channel.author] \]
              - [(src.admincaster_feed_channel.author=="\[REDACTED\]") ? ("Undo Author censorship") : ("Censor channel Author")]
              - "} - if( !length(admincaster_feed_channel.messages) ) - dat+="No feed messages found in channel...
              " - else - for(var/datum/feed_message/MESSAGE in src.admincaster_feed_channel.messages) - dat+={" - -[MESSAGE.body]
              \[Story by [MESSAGE.author]\]
              - [(MESSAGE.body == "\[REDACTED\]") ? ("Undo story censorship") : ("Censor story")] - [(MESSAGE.author == "\[REDACTED\]") ? ("Undo Author Censorship") : ("Censor message Author")]
              - "} - dat+="
              Back" - if(13) - dat+={" - [src.admincaster_feed_channel.channel_name]: \[ created by: [src.admincaster_feed_channel.author] \]
              - Channel messages listed below. If you deem them dangerous to the [station_name()], you can Bestow a D-Notice upon the channel.
              - "} - if(src.admincaster_feed_channel.censored) - dat+={" - ATTENTION: This channel has been deemed as threatening to the welfare of the [station_name()], and marked with a [GLOB.using_map.company_name] D-Notice.
              - No further feed story additions are allowed while the D-Notice is in effect.

              - "} - else - if( !length(admincaster_feed_channel.messages) ) - dat+="No feed messages found in channel...
              " - else - for(var/datum/feed_message/MESSAGE in src.admincaster_feed_channel.messages) - dat+="-[MESSAGE.body]
              \[Story by [MESSAGE.author]\]
              " - - dat+="
              Back" - if(14) - dat+="Wanted Issue Handler:" - var/wanted_already = 0 - var/end_param = 1 - if(torch_network.wanted_issue) - wanted_already = 1 - end_param = 2 - if(wanted_already) - dat+="
              A wanted issue is already in Feed Circulation. You can edit or cancel it below.
              " - dat+={" -
              - Criminal Name: [src.admincaster_feed_message.author]
              - Description: [src.admincaster_feed_message.body]
              - "} - if(wanted_already) - dat+="Wanted Issue created by: [torch_network.wanted_issue.backup_author]
              " - else - dat+="Wanted Issue will be created under prosecutor: [src.admincaster_signature]
              " - dat+="
              [(wanted_already) ? ("Edit Issue") : ("Submit")]" - if(wanted_already) - dat+="
              Take down Issue" - dat+="
              Cancel" - if(15) - dat+={" - Wanted issue for [src.admincaster_feed_message.author] is now in Network Circulation.

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

              " - if(src.admincaster_feed_message.author =="" || src.admincaster_feed_message.author == "\[REDACTED\]") - dat+="Invalid name for person wanted.
              " - if(src.admincaster_feed_message.body == "" || src.admincaster_feed_message.body == "\[REDACTED\]") - dat+="Invalid description.
              " - dat+="
              Return
              " - if(17) - dat+={" - Wanted Issue successfully deleted from Circulation
              -
              Return
              - "} - if(18) - dat+={" - -- STATIONWIDE WANTED ISSUE --
              \[Submitted by: [torch_network.wanted_issue.backup_author]\]
              - Criminal: [torch_network.wanted_issue.author]
              - Description: [torch_network.wanted_issue.body]
              - Photo:: - "} - if(torch_network.wanted_issue.img) - send_rsc(usr, torch_network.wanted_issue.img, "tmp_photow.png") - dat+="
              " - else - dat+="None" - dat+="
              Back
              " - if(19) - dat+={" - Wanted issue for [src.admincaster_feed_message.author] successfully edited.

              -
              Return
              - "} - else - dat+="I'm sorry to break your immersion. This shit's bugged. Report this bug to Agouri, polyxenitopalidou@gmail.com" - -// log_debug("Channelname: [src.admincaster_feed_channel.channel_name] [src.admincaster_feed_channel.author]") -// log_debug("Msg: [src.admincaster_feed_message.author] [src.admincaster_feed_message.body]") - - show_browser(usr, dat, "window=admincaster_main;size=400x600") - onclose(usr, "admincaster_main") - - - -/datum/admins/proc/Jobbans() - if(!check_rights(R_BAN)) return - - var/dat = "Job Bans!
              " - for(var/t in jobban_keylist) - var/r = t - if( findtext(r,"##") ) - r = copytext_char( r, 1, findtext(r,"##") )//removes the description - dat += text("") - dat += "
              [t] (unban)
              " - show_browser(usr, dat, "window=ban;size=400x400") - -/datum/admins/proc/Game() - if(!check_rights(0)) return - - var/dat = {" -
              Game Panel

              \n - Change Game Mode
              - "} - if(SSticker.master_mode == "secret") - dat += "(Force Secret Mode)
              " - - dat += {" -
              - Create Object
              - Create Turf
              - Create Mob
              -
              Edit Airflow Settings
              - Edit Phoron Settings
              - Choose a default ZAS setting
              - "} - - show_browser(usr, dat, "window=admin2;size=210x280") - return - -/datum/admins/proc/Secrets(var/datum/admin_secret_category/active_category = null) - if(!check_rights(0)) return - - // Print the header with category selection buttons. - var/dat = "The first rule of adminbuse is: you don't talk about the adminbuse.
              " - for(var/datum/admin_secret_category/category in admin_secrets.categories) - if(!category.can_view(usr)) - continue - if(active_category == category) - dat += "[category.name]" - else - dat += "[category.name] " - dat += "
              " - - // If a category is selected, print its description and then options - if(istype(active_category) && active_category.can_view(usr)) - if(active_category.desc) - dat += "[active_category.desc]
              " - for(var/datum/admin_secret_item/item in active_category.items) - if(!item.can_view(usr)) - continue - dat += "[item.name()]
              " - dat += "
              " - - var/datum/browser/popup = new(usr, "secrets", "Secrets", 550, 500) - popup.set_content(dat) - popup.open() - return - -/////////////////////////////////////////////////////////////////////////////////////////////////admins2.dm merge -//i.e. buttons/verbs - - -/datum/admins/proc/restart() - set category = "Server" - set name = "Restart" - set desc="Restarts the world" - if (!usr.client.holder) - return - var/confirm = alert("Restart the game world?", "Restart", "Yes", "Cancel") - if(confirm == "Cancel") - return - if(confirm == "Yes") - to_world("Restarting world! Initiated by [usr.key]!") - log_admin("[key_name(usr)] initiated a reboot.") - - sleep(50) - world.Reboot() - - -/datum/admins/proc/announce() - set category = "Special Verbs" - set name = "Announce" - set desc="Announce your desires to the world" - if(!check_rights(0)) return - - var/message = input("Global message to send:", "Admin Announce", null, null) as message - message = sanitize(message, 500, extra = 0) - if(message) - message = replacetext_char(message, "\n", "
              ") // required since we're putting it in a

              tag - to_world("[usr.key] Announces:

              [message]

              ") - log_admin("Announce: [key_name(usr)] : [message]") - - -GLOBAL_VAR_INIT(skip_allow_lists, FALSE) - -/datum/admins/proc/toggle_allowlists() - set category = "Server" - set name = "Toggle Allow Lists" - if(!check_rights(R_ADMIN)) - return - GLOB.skip_allow_lists = !GLOB.skip_allow_lists - var/outcome = GLOB.skip_allow_lists ? "disabled" : "enabled" - log_and_message_admins("[key_name(usr)] [outcome] allow lists.") - - -/datum/admins/proc/toggleooc() - set category = "Server" - set desc="Globally Toggles OOC" - set name="Toggle OOC" - - if(!check_rights(R_ADMIN)) - return - - config.ooc_allowed = !(config.ooc_allowed) - if (config.ooc_allowed) - to_world("The OOC channel has been globally enabled!") - else - to_world("The OOC channel has been globally disabled!") - log_and_message_admins("toggled OOC.") - -/datum/admins/proc/toggleaooc() - set category = "Server" - set desc="Globally Toggles AOOC" - set name="Toggle AOOC" - - if(!check_rights(R_ADMIN)) - return - - config.aooc_allowed = !(config.aooc_allowed) - if (config.aooc_allowed) - communicate_broadcast(/decl/communication_channel/aooc, "The AOOC channel has been globally enabled!", TRUE) - else - communicate_broadcast(/decl/communication_channel/aooc, "The AOOC channel has been globally disabled!", TRUE) - log_and_message_admins("toggled AOOC.") - -/datum/admins/proc/togglelooc() - set category = "Server" - set desc="Globally Toggles LOOC" - set name="Toggle LOOC" - - if(!check_rights(R_ADMIN)) - return - - config.looc_allowed = !(config.looc_allowed) - if (config.looc_allowed) - to_world("The LOOC channel has been globally enabled!") - else - to_world("The LOOC channel has been globally disabled!") - log_and_message_admins("toggled LOOC.") - - -/datum/admins/proc/toggledsay() - set category = "Server" - set desc="Globally Toggles DSAY" - set name="Toggle DSAY" - - if(!check_rights(R_ADMIN)) - return - - config.dsay_allowed = !(config.dsay_allowed) - if (config.dsay_allowed) - to_world("Deadchat has been globally enabled!") - else - to_world("Deadchat has been globally disabled!") - log_and_message_admins("toggled deadchat.") - -/datum/admins/proc/toggleoocdead() - set category = "Server" - set desc="Toggle Dead OOC." - set name="Toggle Dead OOC" - - if(!check_rights(R_ADMIN)) - return - - config.dooc_allowed = !( config.dooc_allowed ) - log_admin("[key_name(usr)] toggled Dead OOC.") - message_admins("[key_name_admin(usr)] toggled Dead OOC.", 1) - -/datum/admins/proc/togglehubvisibility() - set category = "Server" - set desc="Globally Toggles Hub Visibility" - set name="Toggle Hub Visibility" - - if(!check_rights(R_ADMIN)) - return - - world.update_hub_visibility(TRUE) - var/long_message = "Updated hub visibility. The server is now [config.hub_visible ? "visible" : "invisible"]." - if (config.hub_visible && !world.reachable) - message_admins("WARNING: The server will not show up on the hub because byond is detecting that a firewall is blocking incoming connections.") - - send2adminirc("[key_name(src)]" + long_message) - log_and_message_admins(long_message) - -/datum/admins/proc/toggletraitorscaling() - set category = "Server" - set desc="Toggle traitor scaling" - set name="Toggle Traitor Scaling" - config.traitor_scaling = !config.traitor_scaling - log_admin("[key_name(usr)] toggled Traitor Scaling to [config.traitor_scaling].") - message_admins("[key_name_admin(usr)] toggled Traitor Scaling [config.traitor_scaling ? "on" : "off"].", 1) - -/datum/admins/proc/startnow() - set category = "Server" - set desc="Start the round RIGHT NOW" - set name="Start Now" - if(GAME_STATE < RUNLEVEL_LOBBY) - to_chat(usr, FONT_LARGE(SPAN_DANGER("Unable to start the game as it is not yet set up."))) - SSticker.start_ASAP = !SSticker.start_ASAP - if(SSticker.start_ASAP) - to_chat(usr, FONT_LARGE(SPAN_WARNING("The game will begin as soon as possible."))) - log_and_message_admins("will begin the game as soon as possible.") - else - to_chat(usr, FONT_LARGE(SPAN_WARNING("The game will begin as normal."))) - log_and_message_admins("will begin the game as normal.") - return 0 - SSticker.start_ASAP = TRUE - if(SSticker.start_now()) - log_and_message_admins("has started the game.") - return 1 - else - to_chat(usr, "Error: Start Now: Game has already started.") - return 0 - -/datum/admins/proc/endnow() - set category = "Server" - set desc = "End the round immediately." - set name = "End Round" - - var/check = alert("This will immediately end the current round. Are you sure?", "End Game", "Yes", "No") == "Yes" - - if (!check) - return - - if (GAME_STATE > RUNLEVEL_LOBBY) - SSticker.forced_end = TRUE - log_and_message_admins("has ended the round.") - else - to_chat(usr, FONT_LARGE(SPAN_WARNING("You cannot end the round before it's begun!"))) - -/datum/admins/proc/toggleenter() - set category = "Server" - set desc="People can't enter" - set name="Toggle Entering" - config.enter_allowed = !(config.enter_allowed) - if (!(config.enter_allowed)) - to_world("New players may no longer enter the game.") - else - to_world("New players may now enter the game.") - log_and_message_admins("[key_name_admin(usr)] toggled new player game entering.") - world.update_status() - -/datum/admins/proc/toggleaban() - set category = "Server" - set desc="Respawn basically" - set name="Toggle Respawn" - config.abandon_allowed = !(config.abandon_allowed) - if(config.abandon_allowed) - to_world("You may now respawn.") - else - to_world("You may no longer respawn :(") - log_and_message_admins("toggled respawn to [config.abandon_allowed ? "On" : "Off"].") - world.update_status() - -/datum/admins/proc/delay() - set category = "Server" - set desc="Delay the game start/end" - set name="Delay" - - if(!check_rights(R_SERVER)) return - if (GAME_STATE > RUNLEVEL_LOBBY) - SSticker.delay_end = !SSticker.delay_end - log_and_message_admins("[SSticker.delay_end ? "delayed the round end" : "has made the round end normally"].") - return //alert("Round end delayed", null, null, null, null, null) - SSticker.round_progressing = !SSticker.round_progressing - if (!SSticker.round_progressing) - to_world("The game start has been delayed.") - log_admin("[key_name(usr)] delayed the game.") - else - to_world("The game will start soon.") - log_admin("[key_name(usr)] removed the delay.") - -/datum/admins/proc/adjump() - set category = "Server" - set desc="Toggle admin jumping" - set name="Toggle Jump" - config.allow_admin_jump = !(config.allow_admin_jump) - log_and_message_admins("Toggled admin jumping to [config.allow_admin_jump].") - -/datum/admins/proc/adspawn() - set category = "Server" - set desc="Toggle admin spawning" - set name="Toggle Spawn" - config.allow_admin_spawning = !(config.allow_admin_spawning) - log_and_message_admins("toggled admin item spawning to [config.allow_admin_spawning].") - -/datum/admins/proc/adrev() - set category = "Server" - set desc="Toggle admin revives" - set name="Toggle Revive" - config.allow_admin_rev = !(config.allow_admin_rev) - log_and_message_admins("toggled reviving to [config.allow_admin_rev].") - -/datum/admins/proc/immreboot() - set category = "Server" - set desc="Reboots the server post haste" - set name="Immediate Reboot" - if(!usr.client.holder) return - if( alert("Reboot server?",,"Yes","No") == "No") - return - to_world("Rebooting world! Initiated by [usr.key]!") - log_admin("[key_name(usr)] initiated an immediate reboot.") - - world.Reboot() - -/datum/admins/proc/unprison(var/mob/M in SSmobs.mob_list) - set category = "Admin" - set name = "Unprison" - if (isAdminLevel(M.z)) - if (config.allow_admin_jump) - M.forceMove(pick(GLOB.latejoin)) - message_admins("[key_name_admin(usr)] has unprisoned [key_name_admin(M)]", 1) - log_admin("[key_name(usr)] has unprisoned [key_name(M)]") - else - alert("Admin jumping disabled") - else - alert("[M.name] is not prisoned.") - -////////////////////////////////////////////////////////////////////////////////////////////////ADMIN HELPER PROCS - -/proc/is_special_character(var/character) // returns 1 for special characters and 2 for heroes of gamemode - if(!SSticker.mode) - return 0 - var/datum/mind/M - if (ismob(character)) - var/mob/C = character - M = C.mind - else if(istype(character, /datum/mind)) - M = character - - if(M) - if(SSticker.mode.antag_templates && SSticker.mode.antag_templates.len) - for(var/datum/antagonist/antag in SSticker.mode.antag_templates) - if(antag.is_antagonist(M)) - return 2 - if(M.special_role) - return 1 - - if(isrobot(character)) - var/mob/living/silicon/robot/R = character - if(R.emagged) - return 1 - - return 0 - -/datum/admins/proc/mass_debug_closet_icons() - - set name = "Mass Debug Closet Icons" - set desc = "Spawn every possible custom closet. Do not do this on live." - set category = "Debug" - - if(!check_rights(R_SPAWN)) - return - - if((input(usr, "Are you sure you want to spawn all these closets?", "So Many Closets") as null|anything in list("No", "Yes")) == "Yes") - log_admin("[key_name(usr)] mass-spawned closets (icon debug), if this is a live server you should yell at them.") - var/x = 0 - var/y = 0 - for(var/check_appearance in typesof(/decl/closet_appearance)) - x++ - if(x > 10) - x = 0 - y++ - var/turf/T = locate(usr.x+x, usr.y+y, usr.z) - if(T) - new /obj/structure/closet/debug(T, check_appearance) - -/datum/admins/proc/spawn_fruit(seedtype in SSplants.seeds) - set category = "Debug" - set desc = "Spawn the product of a seed." - set name = "Spawn Fruit" - - if(!check_rights(R_SPAWN)) return - - if(!seedtype || !SSplants.seeds[seedtype]) - return - var/datum/seed/S = SSplants.seeds[seedtype] - S.harvest(usr,0,0,1) - log_admin("[key_name(usr)] spawned [seedtype] fruit at ([usr.x],[usr.y],[usr.z])") - -/datum/admins/proc/spawn_custom_item() - set category = "Debug" - set desc = "Spawn a custom item." - set name = "Spawn Custom Item" - - if(!check_rights(R_SPAWN)) return - - var/owner = input("Select a ckey.", "Spawn Custom Item") as null|anything in SScustomitems.custom_items_by_ckey - if(!owner|| !SScustomitems.custom_items_by_ckey[owner]) - return - - var/list/possible_items = list() - for(var/datum/custom_item/item in SScustomitems.custom_items_by_ckey[owner]) - possible_items[item.item_name] = item - var/item_to_spawn = input("Select an item to spawn.", "Spawn Custom Item") as null|anything in possible_items - if(item_to_spawn && possible_items[item_to_spawn]) - var/datum/custom_item/item_datum = possible_items[item_to_spawn] - item_datum.spawn_item(get_turf(usr)) - -/datum/admins/proc/check_custom_items() - - set category = "Debug" - set desc = "Check the custom item list." - set name = "Check Custom Items" - - if(!check_rights(R_SPAWN)) return - - if(!SScustomitems.custom_items_by_ckey) - to_chat(usr, "Custom item list is null.") - return - - if(!SScustomitems.custom_items_by_ckey.len) - to_chat(usr, "Custom item list not populated.") - return - - for(var/assoc_key in SScustomitems.custom_items_by_ckey) - to_chat(usr, "[assoc_key] has:") - var/list/current_items = SScustomitems.custom_items_by_ckey[assoc_key] - for(var/datum/custom_item/item in current_items) - to_chat(usr, "- name: [item.item_name] icon: [item.item_icon_state] path: [item.item_path] desc: [item.item_desc]") - -/datum/admins/proc/spawn_plant(seedtype in SSplants.seeds) - set category = "Debug" - set desc = "Spawn a spreading plant effect." - set name = "Spawn Plant" - - if(!check_rights(R_SPAWN)) return - - if(!seedtype || !SSplants.seeds[seedtype]) - return - new /obj/effect/vine(get_turf(usr), SSplants.seeds[seedtype]) - log_admin("[key_name(usr)] spawned [seedtype] vines at ([usr.x],[usr.y],[usr.z])") - -/datum/admins/proc/spawn_atom(var/object as text) - set category = "Debug" - set desc = "(atom path) Spawn an atom" - set name = "Spawn" - - if(!check_rights(R_SPAWN)) return - - var/list/types = typesof(/atom) - var/list/matches = new() - - for(var/path in types) - if(findtext("[path]", object)) - matches += path - - if(matches.len==0) - return - - var/chosen - if(matches.len==1) - chosen = matches[1] - else - chosen = input("Select an atom type", "Spawn Atom", matches[1]) as null|anything in matches - if(!chosen) - return - - if(ispath(chosen,/turf)) - var/turf/T = get_turf(usr.loc) - T.ChangeTurf(chosen) - else - new chosen(usr.loc) - - log_and_message_admins("spawned [chosen] at ([usr.x],[usr.y],[usr.z])") - -/datum/admins/proc/spawn_artifact(effect in subtypesof(/datum/artifact_effect)) - set category = "Debug" - set desc = "(atom path) Spawn an artifact with a specified effect." - set name = "Spawn Artifact" - - if (!check_rights(R_SPAWN)) - return - - var/obj/machinery/artifact/A - var/datum/artifact_trigger/primary_trigger - - var/datum/artifact_effect/secondary_effect - var/datum/artifact_trigger/secondary_trigger - - var/damage_type - - if (ispath(effect)) - primary_trigger = input(usr, "Choose a trigger", "Choose a trigger") as null | anything in subtypesof(/datum/artifact_trigger) - - if (!ispath(primary_trigger)) - return - - var/choice = alert(usr, "Secondary effect?", "Secondary effect", "Yes", "No") == "Yes" - - if (choice) - secondary_effect = input(usr, "Choose an effect", "Choose effect") as null | anything in subtypesof(/datum/artifact_effect) - - if (!ispath(secondary_effect)) - return - - secondary_trigger = input(usr, "Choose a trigger", "Choose a trigger") as null | anything in subtypesof(/datum/artifact_trigger) - - if (!ispath(secondary_trigger)) - return - - var/damage_types = list("Sharp" = DAMAGE_FLAG_SHARP, "Bullet" = DAMAGE_FLAG_BULLET, "Edge" = DAMAGE_FLAG_EDGE, "Laser" = DAMAGE_FLAG_LASER) - choice = input(usr, "Choose a damage effect", "Choose Damage Effect") as null | anything in damage_types | "Invincible" - - if (!choice) - return - - if (choice != "Invincible") - damage_type = damage_types[choice] - - - A = new(usr.loc) - A.my_effect = new effect(A) - A.my_effect.trigger = new primary_trigger(A.my_effect) - A.damage_type = damage_type - A.set_damage_description(damage_type) - - if (secondary_effect) - A.secondary_effect = new secondary_effect - A.secondary_effect.trigger = new secondary_trigger - else - QDEL_NULL(A.secondary_effect) - - log_and_message_admins("spawned an artifact with effects [A.my_effect][A.secondary_effect ? ", [A.secondary_effect]" : ""].") - -/datum/admins/proc/show_traitor_panel(var/mob/M in SSmobs.mob_list) - set category = "Admin" - set desc = "Edit mobs's memory and role" - set name = "Show Traitor Panel" - - if(!istype(M)) - to_chat(usr, "This can only be used on instances of type /mob") - return - if(!M.mind) - to_chat(usr, "This mob has no mind!") - return - - M.mind.edit_memory() - -/datum/admins/proc/show_game_mode() - set category = "Admin" - set desc = "Show the current round configuration." - set name = "Show Game Mode" - - if(!SSticker.mode) - alert("Not before roundstart!", "Alert") - return - - var/out = "Current mode: [SSticker.mode.name] ([SSticker.mode.config_tag])
              " - out += "
              " - - if(SSticker.mode.ert_disabled) - out += "Emergency Response Teams: disabled" - else - out += "Emergency Response Teams: enabled" - out += "
              " - - if(SSticker.mode.deny_respawn) - out += "Respawning: disallowed" - else - out += "Respawning: allowed" - out += "
              " - - out += "Shuttle delay multiplier: [SSticker.mode.shuttle_delay]
              " - - if(SSticker.mode.auto_recall_shuttle) - out += "Shuttle auto-recall: enabled" - else - out += "Shuttle auto-recall: disabled" - out += "

              " - - if(SSticker.mode.event_delay_mod_moderate) - out += "Moderate event time modifier: [SSticker.mode.event_delay_mod_moderate]
              " - else - out += "Moderate event time modifier: unset
              " - - if(SSticker.mode.event_delay_mod_major) - out += "Major event time modifier: [SSticker.mode.event_delay_mod_major]
              " - else - out += "Major event time modifier: unset
              " - - out += "
              " - - if(SSticker.mode.antag_tags && SSticker.mode.antag_tags.len) - out += "Core antag templates:
              " - for(var/antag_tag in SSticker.mode.antag_tags) - out += "[antag_tag].
              " - - if(SSticker.mode.round_autoantag) - out += "Autotraitor enabled." - if(SSticker.mode.antag_scaling_coeff > 0) - out += " (scaling with [SSticker.mode.antag_scaling_coeff])" - else - out += " (not currently scaling, set a coefficient)" - out += "
              " - else - out += "Autotraitor disabled.
              " - - out += "All antag ids:" - if(SSticker.mode.antag_templates && SSticker.mode.antag_templates.len) - for(var/datum/antagonist/antag in SSticker.mode.antag_templates) - antag.update_current_antag_max(SSticker.mode) - out += " [antag.id]" - out += " ([antag.get_antag_count()]/[antag.cur_max]) " - out += " \[-\]
              " - else - out += " None." - out += " \[+\]
              " - - show_browser(usr, out, "window=edit_mode[src]") - - -/datum/admins/proc/toggletintedweldhelmets() - set category = "Debug" - set desc="Reduces view range when wearing welding helmets" - set name="Toggle tinted welding helmets." - config.welder_vision = !( config.welder_vision ) - if (config.welder_vision) - to_world("Reduced welder vision has been enabled!") - else - to_world("Reduced welder vision has been disabled!") - log_and_message_admins("toggled welder vision.") - -/datum/admins/proc/toggleguests() - set category = "Server" - set desc="Guests can't enter" - set name="Toggle guests" - config.guests_allowed = !(config.guests_allowed) - if (!(config.guests_allowed)) - to_world("Guests may no longer enter the game.") - else - to_world("Guests may now enter the game.") - log_admin("[key_name(usr)] toggled guests game entering [config.guests_allowed?"":"dis"]allowed.") - log_and_message_admins("toggled guests game entering [config.guests_allowed?"":"dis"]allowed.") - -/datum/admins/proc/output_ai_laws() - var/ai_number = 0 - for(var/mob/living/silicon/S in SSmobs.mob_list) - ai_number++ - if(isAI(S)) - to_chat(usr, "AI [key_name(S, usr)]'s laws:") - else if(isrobot(S)) - var/mob/living/silicon/robot/R = S - to_chat(usr, "CYBORG [key_name(S, usr)] [R.connected_ai?"(Slaved to: [R.connected_ai])":"(Independant)"]: laws:") - else if (ispAI(S)) - to_chat(usr, "pAI [key_name(S, usr)]'s laws:") - else - to_chat(usr, "SOMETHING SILICON [key_name(S, usr)]'s laws:") - - if (S.laws == null) - to_chat(usr, "[key_name(S, usr)]'s laws are null?? Contact a coder.") - else - S.laws.show_laws(usr) - if(!ai_number) - to_chat(usr, "No AIs located")//Just so you know the thing is actually working and not just ignoring you. - -/datum/admins/proc/show_skills(mob/M) - set category = null - set name = "Skill Panel" - - if (!istype(src,/datum/admins)) - src = usr.client.holder - if (!istype(src,/datum/admins)) - to_chat(usr, "Error: you are not an admin!") - return - - if(!M) - M = input("Select mob.", "Select mob.") as null|anything in GLOB.player_list - if(!istype(M)) - return - var/datum/nano_module/skill_ui/NM = /datum/nano_module/skill_ui - if(isadmin(usr)) - NM = /datum/nano_module/skill_ui/admin //They get the fancy version that lets you change skills and debug stuff. - NM = new NM(usr, override = M.skillset) - NM.ui_interact(usr) - -/client/proc/update_mob_sprite(mob/living/carbon/human/H as mob) - set category = "Admin" - set name = "Update Mob Sprite" - set desc = "Should fix any mob sprite update errors." - - if (!holder) - to_chat(src, "Only administrators may use this command.") - return - - if(istype(H)) - H.regenerate_icons() - -/proc/get_options_bar(whom, detail = 2, name = 0, link = 1, highlight_special = 1, var/datum/ticket/ticket = null) - if(!whom) - return "(*null*)" - var/mob/M - var/client/C - if(istype(whom, /client)) - C = whom - M = C.mob - else if(istype(whom, /mob)) - M = whom - C = M.client - else - return "(*not a mob*)" - switch(detail) - if(0) - return "[key_name(C, link, name, highlight_special, ticket)]" - - if(1) //Private Messages - return "[key_name(C, link, name, highlight_special, ticket)](?)" - - if(2) //Admins - var/ref_mob = "\ref[M]" - return "[key_name(C, link, name, highlight_special, ticket)](?) (PP) (VV) (DN) ([admin_jump_link(M)]) (CA)" - - if(3) //Devs - var/ref_mob = "\ref[M]" - return "[key_name(C, link, name, highlight_special, ticket)](VV)([admin_jump_link(M)])" - -/proc/ishost(var/client/C) - return check_rights(R_HOST, 0, C) - -//Prevents SDQL2 commands from changing admin permissions -/datum/admins/SDQL_update(var/const/var_name, var/new_value) - return 0 - -// -// -//ALL DONE -//********************************************************************************************************* -// - -//Returns 1 to let the dragdrop code know we are trapping this event -//Returns 0 if we don't plan to trap the event -/datum/admins/proc/cmd_ghost_drag(var/mob/observer/ghost/frommob, var/mob/living/tomob) - if(!istype(frommob)) - return //Extra sanity check to make sure only observers are shoved into things - - //Same as assume-direct-control perm requirements. - if (!check_rights(R_VAREDIT,0) || !check_rights(R_ADMIN|R_DEBUG,0)) - return 0 - if (!frommob.ckey) - return 0 - var/question = "" - if (tomob.ckey) - question = "This mob already has a user ([tomob.key]) in control of it! " - question += "Are you sure you want to place [frommob.name]([frommob.key]) in control of [tomob.name]?" - var/ask = alert(question, "Place ghost in control of mob?", "Yes", "No") - if (ask != "Yes") - return 1 - if (!frommob || !tomob) //make sure the mobs don't go away while we waited for a response - return 1 - if(tomob.client) //No need to ghostize if there is no client - tomob.ghostize(0) - message_admins("[key_name_admin(usr)] has put [frommob.ckey] in control of [tomob.name].") - log_admin("[key_name(usr)] stuffed [frommob.ckey] into [tomob.name].") - tomob.ckey = frommob.ckey - qdel(frommob) - return 1 - -/datum/admins/proc/force_antag_latespawn() - set category = "Admin" - set name = "Force Template Spawn" - set desc = "Force an antagonist template to spawn." - - if (!istype(src,/datum/admins)) - src = usr.client.holder - if (!istype(src,/datum/admins)) - to_chat(usr, "Error: you are not an admin!") - return - - if(GAME_STATE < RUNLEVEL_GAME) - to_chat(usr, "Mode has not started.") - return - - var/list/all_antag_types = GLOB.all_antag_types_ - var/antag_type = input("Choose a template.","Force Latespawn") as null|anything in all_antag_types - if(!antag_type || !all_antag_types[antag_type]) - to_chat(usr, "Aborting.") - return - - var/datum/antagonist/antag = all_antag_types[antag_type] - message_admins("[key_name(usr)] attempting to force latespawn with template [antag.id].") - antag.attempt_auto_spawn() - -/datum/admins/proc/force_mode_latespawn() - set category = "Admin" - set name = "Force Mode Spawn" - set desc = "Force autotraitor to proc." - - if (!istype(src,/datum/admins)) - src = usr.client.holder - if (!istype(src,/datum/admins) || !check_rights(R_ADMIN)) - to_chat(usr, "Error: you are not an admin!") - return - - if(GAME_STATE < RUNLEVEL_GAME) - to_chat(usr, "Mode has not started.") - return - - log_and_message_admins("attempting to force mode autospawn.") - SSticker.mode.process_autoantag() - -/datum/admins/proc/paralyze_mob(mob/living/H as mob in GLOB.player_list) - set category = null - set name = "Toggle Paralyze" - set desc = "Toggles paralyze state, which stuns, blinds and mutes the victim." - - var/msg - - if(!isliving(H)) - return - - if(check_rights(R_INVESTIGATE)) - if (!H.admin_paralyzed) - H.paralysis = 8000 - H.admin_paralyzed = TRUE - msg = "has paralyzed [key_name(H)]." - H.visible_message(SPAN_DEBUG("OOC: \The [H] has been paralyzed by a staff member. Please hold all interactions with them until staff have finished with them.")) - to_chat(H, SPAN_DEBUG("OOC: You have been paralyzed by a staff member. Please refer to your currently open admin help ticket or, if you don't have one, admin help for assistance.")) - else - H.paralysis = 0 - H.admin_paralyzed = FALSE - msg = "has unparalyzed [key_name(H)]." - H.visible_message(SPAN_DEBUG("OOC: \The [H] has been released from paralysis by staff. You may resume interactions with them.")) - to_chat(H, SPAN_DEBUG("OOC: You have been released from paralysis by staff and can return to your game.")) - log_and_message_staff(msg) - - -/datum/admins/proc/sendFax() - set category = "Special Verbs" - set name = "Send Fax" - set desc = "Sends a fax to this machine" - - // Admin status checks - if (!istype(src,/datum/admins)) - src = usr.client.holder - if (!istype(src,/datum/admins)) - to_chat(usr, "Error: you are not an admin!") - return - - // Origin - var/list/option_list = GLOB.admin_departments.Copy() + GLOB.alldepartments.Copy() + "(Custom)" + "(Cancel)" - var/replyorigin = input(owner, "Please specify who the fax is coming from. Choose '(Custom)' to enter a custom department or '(Cancel) to cancel.", "Fax Origin") as null|anything in option_list - if (!replyorigin || replyorigin == "(Cancel)") - return - if (replyorigin == "(Custom)") - replyorigin = input(owner, "Please specify who the fax is coming from.", "Fax Machine Department Tag") as text|null - if (!replyorigin) - return - if (replyorigin == "Unknown" || replyorigin == "(Custom)" || replyorigin == "(Cancel)") - to_chat(owner, SPAN_WARNING("Invalid origin selected.")) - return - - // Destination - var/department = input("Choose a destination fax", "Fax Target") as null|anything in GLOB.alldepartments - - // Generate the fax - var/obj/item/paper/admin/P = new /obj/item/paper/admin( null ) //hopefully the null loc won't cause trouble for us - faxreply = P - P.admindatum = src - P.origin = replyorigin - P.department = department - P.destinations = get_fax_machines_by_department(department) - P.adminbrowse() - - -/client/proc/check_fax_history() - set category = "Special Verbs" - set name = "Check Fax History" - set desc = "Look up the faxes sent this round." - - var/data = "
              Fax History:

              " - - if(GLOB.adminfaxes) - for(var/obj/item/item in GLOB.adminfaxes) - data += "[item.name] - view message
              " - else - data += "
              No faxes yet.
              " - show_browser(usr, "Fax History[data]", "window=FaxHistory;size=450x400") - -/datum/admins/var/obj/item/paper/admin/faxreply // var to hold fax replies in - -/datum/admins/proc/faxCallback(obj/item/paper/admin/P) - var/customname = input(src.owner, "Pick a title for the report", "Title") as text|null - - P.SetName("[customname]") - - var/shouldStamp = 1 - if(!P.sender) // admin initiated - switch(alert("Would you like the fax stamped?",, "Yes", "No")) - if("No") - shouldStamp = 0 - - if(shouldStamp) - P.stamps += "
              This paper has been stamped by the [P.origin] Quantum Relay." - - var/image/stampoverlay = image('icons/obj/bureaucracy.dmi') - var/x - var/y - x = rand(-2, 0) - y = rand(-1, 2) - P.offset_x += x - P.offset_y += y - stampoverlay.pixel_x = x - stampoverlay.pixel_y = y - - if(!P.ico) - P.ico = new - P.ico += "paper_stamp-boss" - stampoverlay.icon_state = "paper_stamp-boss" - - if(!P.stamped) - P.stamped = new - P.stamped += /obj/item/stamp/boss - P.overlays += stampoverlay - - var/obj/item/rcvdcopy - var/obj/machinery/photocopier/faxmachine/destination = P.destinations[1] - rcvdcopy = destination.copy(P, FALSE) - rcvdcopy.forceMove(null) //hopefully this shouldn't cause trouble - fax2TGS(rcvdcopy, P.origin, destination.department, key_name(src.owner)) // Proxima - GLOB.adminfaxes += rcvdcopy - var/success = send_fax_loop(P, P.department, P.origin) - - if (success) - to_chat(src.owner, "Message reply to transmitted successfully.") - if(P.sender) // sent as a reply - log_admin("[key_name(src.owner)] replied to a fax message from [key_name(P.sender)]") - for(var/client/C as anything in GLOB.admins) - if((R_INVESTIGATE) & C.holder.rights) - to_chat(C, "FAX LOG:[key_name_admin(src.owner)] replied to a fax message from [key_name_admin(P.sender)] (VIEW)") - else - log_admin("[key_name(src.owner)] has sent a fax message to [P.department]") - for(var/client/C as anything in GLOB.admins) - if((R_INVESTIGATE) & C.holder.rights) - to_chat(C, "FAX LOG:[key_name_admin(src.owner)] has sent a fax message to [P.department] (VIEW)") - else - to_chat(src.owner, "Message reply failed.") - - spawn(100) - qdel(P) - faxreply = null - return - -/datum/admins/proc/setroundlength() - set category = "Server" - set desc = "Set the time the round-end vote will start in minutes." - set name = "Set Round Length" - - if (GAME_STATE > RUNLEVEL_LOBBY) - to_chat(usr, SPAN_WARNING("You cannot change the round length after the game has started!")) - return - - var/time = input("Set the time until the round-end vote occurs (IN MINUTES). Default is [config.vote_autotransfer_initial / 600]", "Set Round Length", 0) as null | num - - if (!time || !isnum(time) || time < 0) - return - - transfer_controller.timerbuffer = time MINUTES - log_and_message_admins("set the initial round-end vote time to [time] minutes after round-start.") - -/datum/admins/proc/toggleroundendvote() - set category = "Server" - set desc = "Toggle the continue vote on/off. Toggling off will cause round-end to occur when the next continue vote time would be." - set name = "Toggle Continue Vote" - - if (GAME_STATE > RUNLEVEL_GAME) - to_chat(usr, SPAN_WARNING("The game is already ending!")) - return - - transfer_controller.do_continue_vote = !transfer_controller.do_continue_vote - log_and_message_admins("toggled the continue vote [transfer_controller.do_continue_vote ? "ON" : "OFF"]") diff --git a/code/modules/admin/admin_attack_log.dm b/code/modules/admin/admin_attack_log.dm deleted file mode 100644 index d56a350e96cb7..0000000000000 --- a/code/modules/admin/admin_attack_log.dm +++ /dev/null @@ -1,127 +0,0 @@ -/mob - var/datum/mob_lite/last_attacker_ = null - var/datum/mob_lite/last_attacked_ = null - var/mob/attack_logs_ = list() - -/proc/log_and_message_admins(var/message as text, var/mob/user = usr, var/turf/location) - var/turf/T = location ? get_turf(location) : (user ? get_turf(user) : null) - message = append_admin_tools(message, user, T) - - log_admin(user ? "[key_name(user)] [message]" : "EVENT [message]") - message_admins(user ? "[key_name_admin(user)] [message]" : "EVENT [message]") - -/proc/log_and_message_staff(var/message as text, var/mob/user = usr, var/turf/location) - var/turf/T = location ? location : (user ? get_turf(user) : null) - message = append_admin_tools(message, user, T) - - log_admin(user ? "[key_name(user)] [message]" : "EVENT [message]") - message_staff(user ? "[key_name_admin(user)] [message]" : "EVENT [message]") - -/proc/log_and_message_admins_many(var/list/mob/users, var/message) - if(!users || !users.len) - return - - var/list/user_keys = list() - for(var/mob/user in users) - user_keys += key_name(user) - - log_admin("[english_list(user_keys)] [message]") - message_admins("[english_list(user_keys)] [message]") - -/proc/admin_attacker_log(var/mob/attacker, var/attacker_message) - if(!attacker) - EXCEPTION("No attacker was supplied.") - admin_attack_log(attacker, null, attacker_message, null, attacker_message) - -/proc/admin_victim_log(var/mob/victim, var/victim_message) - if(!victim) - EXCEPTION("No victim was supplied.") - admin_attack_log(null, victim, null, victim_message, victim_message) - -/proc/admin_attack_log(var/mob/attacker, var/mob/victim, var/attacker_message, var/victim_message, var/admin_message) - if(!(attacker || victim)) - EXCEPTION("Neither attacker or victim was supplied.") - if ((attacker && !istype(attacker)) || (victim && !istype(victim))) - return - if(!store_admin_attack_log(attacker, victim)) - return - - var/turf/attack_location - var/intent = "(INTENT: N/A)" - var/zone_sel = "(ZONE_SEL: N/A)" - if(attacker) - intent = "(INTENT: [uppertext(attacker.a_intent)])" - if (attacker.zone_sel?.selecting) - zone_sel = "(ZONE_SEL: [uppertext(attacker.zone_sel.selecting)])" - if(victim) - attacker.attack_logs_ += text("\[[time_stamp()]\] [key_name(victim)] - [attacker_message] [intent] [zone_sel]") - else - attacker.attack_logs_ += text("\[[time_stamp()]\] [attacker_message] [intent] [zone_sel]") - attacker.last_attacked_ = mob_repository.get_lite_mob(victim) - attack_location = get_turf(attacker) - if(victim) - if(attacker) - victim.attack_logs_ += text("\[[time_stamp()]\] [key_name(attacker)] - [victim_message] [intent] [zone_sel]") - else - victim.attack_logs_ += text("\[[time_stamp()]\] [victim_message]") - victim.last_attacker_ = mob_repository.get_lite_mob(attacker) - if(!attack_location) - attack_location = get_turf(victim) - - attack_log_repository.store_attack_log(attacker, victim, admin_message) - - if(!notify_about_admin_attack_log(attacker, victim)) - return - - var/full_admin_message - if(attacker && victim) - full_admin_message = "[key_name(attacker)] [admin_message] [key_name(victim)] [intent] [zone_sel]" - else if(attacker) - full_admin_message = "[key_name(attacker)] [admin_message] [intent] [zone_sel]" - else - full_admin_message = "[key_name(victim)] [admin_message]" - full_admin_message = append_admin_tools(full_admin_message, attacker||victim, attack_location) - msg_admin_attack(full_admin_message) - -// Only store attack logs if any of the involved subjects have (had) a client -/proc/store_admin_attack_log(var/mob/attacker, var/mob/victim) - if(attacker && attacker.ckey) - return TRUE - if(victim && victim.ckey) - return TRUE - return FALSE - -// Only notify admins if all involved subjects have (had) a client -/proc/notify_about_admin_attack_log(var/mob/attacker, var/mob/victim) - if(attacker && victim) - return attacker.ckey && victim.ckey - if(attacker) - return attacker.ckey - if(victim) - return victim.ckey - return FALSE - -/proc/admin_attacker_log_many_victims(var/mob/attacker, var/list/mob/victims, var/attacker_message, var/victim_message, var/admin_message) - if(!victims || !victims.len) - return - - for(var/mob/victim in victims) - admin_attack_log(attacker, victim, attacker_message, victim_message, admin_message) - -/proc/admin_inject_log(mob/attacker, mob/victim, obj/item/weapon, reagents, amount_transferred, violent=0) - if(violent) - violent = "violently " - else - violent = "" - admin_attack_log(attacker, - victim, - "used \the [weapon] - [reagents] - to [violent]inject [amount_transferred]u transferred", - "was [violent]injected with \the [weapon] - [reagents] - [amount_transferred]u transferred", - "used \the [weapon] - [reagents] - to [violent]inject [amount_transferred]u into") - -/proc/append_admin_tools(var/message, var/mob, var/turf/location) - if(location) - message = message + " (LOC)" - if(mob) - message = message + " (MOB)" - return message diff --git a/code/modules/admin/admin_investigate.dm b/code/modules/admin/admin_investigate.dm deleted file mode 100644 index d003d3bd31203..0000000000000 --- a/code/modules/admin/admin_investigate.dm +++ /dev/null @@ -1,45 +0,0 @@ -//By Carnwennan - -//This system was made as an alternative to all the in-game lists and variables used to log stuff in-game. -//lists and variables are great. However, they have several major flaws: -//Firstly, they use memory. TGstation has one of the highest memory usage of all the ss13 branches. -//Secondly, they are usually stored in an object. This means that they aren't centralised. It also means that -//the data is lost when the object is deleted! This is especially annoying for things like the singulo engine! -#define INVESTIGATE_DIR "data/investigate/" - -//SYSTEM -/proc/investigate_subject2file(var/subject) - return file("[INVESTIGATE_DIR][subject].html") - -/hook/startup/proc/resetInvestigate() - investigate_reset() - return 1 - -/proc/investigate_reset() - if(fdel(INVESTIGATE_DIR)) return 1 - return 0 - -/atom/proc/investigate_log(var/message, var/subject) - if(!message) return - var/F = investigate_subject2file(subject) - if(!F) return - to_chat(F, "[time_stamp()] \ref[src] ([x],[y],[z]) || [src] [message]
              ") - -//ADMINVERBS -/client/proc/investigate_show( subject in list("hrefs","notes","singulo","telesci") ) - set name = "Investigate" - set category = "Admin" - if(!holder) return - switch(subject) - if("singulo", "telesci") //general one-round-only stuff - var/F = investigate_subject2file(subject) - if(!F) - to_chat(src, "Error: admin_investigate: [INVESTIGATE_DIR][subject] is an invalid path or cannot be accessed.") - return - show_browser(src, F,"window=investigate[subject];size=800x300") - - if("hrefs") //persistant logs and stuff - if (GLOB.href_logfile) - show_browser(src, GLOB.href_logfile, "window=investigate[subject];size=800x300") - else - to_chat(src, "Error: admin_investigate: Href Logging [config.log_hrefs ? "failed to start" : "is disabled"].") diff --git a/code/modules/admin/admin_memo.dm b/code/modules/admin/admin_memo.dm deleted file mode 100644 index 4711a58b52794..0000000000000 --- a/code/modules/admin/admin_memo.dm +++ /dev/null @@ -1,56 +0,0 @@ -#define MEMOFILE "data/memo.sav" //where the memos are saved -#define ENABLE_MEMOS 1 //using a define because screw making a config variable for it. This is more efficient and purty. - -//switch verb so we don't spam up the verb lists with like, 3 verbs for this feature. -/client/proc/admin_memo(task in list("write","show","delete")) - set name = "Memo" - set category = "Server" -#if ENABLE_MEMOS == 1 - if(!check_rights(0)) return - switch(task) - if("write") admin_memo_write() - if("show") admin_memo_show() - if("delete") admin_memo_delete() -#endif - -//write a message -/client/proc/admin_memo_write() - var/savefile/F = new(MEMOFILE) - if(F) - var/memo = sanitize(input(src,"Type your memo\n(Leaving it blank will delete your current memo):","Write Memo",null) as null|message, extra = 0) - switch(memo) - if(null) - return - if("") - F.dir.Remove(ckey) - to_chat(src, "Memo removed") - return - if( findtext(memo,"[memo]") - message_admins("[key] set an admin memo:
              [memo]") - -//show all memos -/client/proc/admin_memo_show() -#if ENABLE_MEMOS == 1 - var/savefile/F = new(MEMOFILE) - if(F) - for(var/ckey in F.dir) - to_chat(src, "
              Admin Memo by [F[ckey]]
              ") -#endif - -//delete your own or somebody else's memo -/client/proc/admin_memo_delete() - var/savefile/F = new(MEMOFILE) - if(F) - var/ckey - if(check_rights(R_SERVER,0)) //high ranking admins can delete other admin's memos - ckey = input(src,"Whose memo shall we remove?","Remove Memo",null) as null|anything in F.dir - else - ckey = src.ckey - if(ckey) - F.dir.Remove(ckey) - to_chat(src, "Removed Memo created by [ckey].") - -#undef MEMOFILE -#undef ENABLE_MEMOS \ No newline at end of file diff --git a/code/modules/admin/admin_ranks.dm b/code/modules/admin/admin_ranks.dm deleted file mode 100644 index bb59845b979db..0000000000000 --- a/code/modules/admin/admin_ranks.dm +++ /dev/null @@ -1,165 +0,0 @@ -var/global/list/admin_ranks = list() //list of all ranks with associated rights - -//load our rank - > rights associations -/proc/load_admin_ranks() - admin_ranks.Cut() - - var/previous_rights = 0 - - //load text from file - var/list/Lines = file2list("config/admin_ranks.txt") - - //process each line seperately - for(var/line in Lines) - if(!length(line)) continue - if(copytext_char(line,1,2) == "#") continue - - var/list/List = splittext(line,"+") - if(!List.len) continue - - var/rank = ckeyEx(List[1]) - switch(rank) - if(null,"") continue - if("Removed") continue //Reserved - - var/rights = 0 - for(var/i=2, i<=List.len, i++) - switch(ckey(List[i])) - if("@","prev") rights |= previous_rights - if("buildmode","build") rights |= R_BUILDMODE - if("admin") rights |= R_ADMIN - if("ban") rights |= R_BAN - if("fun") rights |= R_FUN - if("server") rights |= R_SERVER - if("debug") rights |= R_DEBUG - if("permissions","rights") rights |= R_PERMISSIONS - if("possess") rights |= R_POSSESS - if("stealth") rights |= R_STEALTH - if("rejuv","rejuvinate") rights |= R_REJUVINATE - if("varedit") rights |= R_VAREDIT - if("everything","host","all") rights |= (R_HOST | R_BUILDMODE | R_ADMIN | R_BAN | R_FUN | R_SERVER | R_DEBUG | R_PERMISSIONS | R_STEALTH | R_REJUVINATE | R_VAREDIT | R_SOUNDS | R_SPAWN | R_MOD| R_XENO) //INF WAS if("everything","host","all") rights |= (R_HOST | R_BUILDMODE | R_ADMIN | R_BAN | R_FUN | R_SERVER | R_DEBUG | R_PERMISSIONS | R_POSSESS | R_STEALTH | R_REJUVINATE | R_VAREDIT | R_SOUNDS | R_SPAWN | R_MOD) - if("sound","sounds") rights |= R_SOUNDS - if("spawn","create") rights |= R_SPAWN - if("mod") rights |= R_MOD - if("xeno") rights |= R_XENO //INF - - admin_ranks[rank] = rights - previous_rights = rights - - #ifdef TESTING - var/msg = "Permission Sets Built:\n" - for(var/rank in admin_ranks) - msg += "\t[rank] - [admin_ranks[rank]]\n" - testing(msg) - #endif - -/hook/startup/proc/loadAdmins() - load_admins() - return 1 - -/proc/load_admins() - //clear the datums references - admin_datums.Cut() - for(var/client/C as anything in GLOB.admins) - C.remove_admin_verbs() - C.holder = null - GLOB.admins.Cut() - - // Flush profiler access. - for (var/admin in world.GetConfig("admin")) - world.SetConfig("APP/admin", admin, null) - - if(config.admin_legacy_system) - load_admin_ranks() - - //load text from file - var/list/Lines = file2list("config/admins.txt") - - //process each line seperately - for(var/line in Lines) - if(!length(line)) continue - if(copytext_char(line,1,2) == "#") continue - - //Split the line at every "-" - var/list/List = splittext(line, "-") - if(!List.len) continue - - //ckey is before the first "-" - var/ckey = ckey(List[1]) - if(!ckey) continue - - //rank follows the first "-" - var/rank = "" - if(List.len >= 2) - rank = ckeyEx(List[2]) - - //load permissions associated with this rank - var/rights = admin_ranks[rank] - - //create the admin datum and store it for later use - var/datum/admins/D = new /datum/admins(rank, rights, ckey) - - //find the client for a ckey if they are connected and associate them with the new admin datum - D.associate(GLOB.ckey_directory[ckey]) - - else - //The current admin system uses SQL - - establish_db_connection() - if(!dbcon.IsConnected()) - error("Failed to connect to database in load_admins(). Reverting to legacy system.") - log_misc("Failed to connect to database in load_admins(). Reverting to legacy system.") - config.admin_legacy_system = 1 - load_admins() - return - - var/DBQuery/query = dbcon.NewQuery("SELECT ckey, rank, level, flags FROM erro_admin") - query.Execute() - while(query.NextRow()) - var/ckey = query.item[1] - var/rank = query.item[2] - if(rank == "Removed") continue //This person was de-adminned. They are only in the admin list for archive purposes. - - var/rights = query.item[4] - if(istext(rights)) rights = text2num(rights) - var/datum/admins/D = new /datum/admins(rank, rights, ckey) - - //find the client for a ckey if they are connected and associate them with the new admin datum - D.associate(GLOB.ckey_directory[ckey]) - if(!admin_datums) - error("The database query in load_admins() resulted in no admins being added to the list. Reverting to legacy system.") - log_misc("The database query in load_admins() resulted in no admins being added to the list. Reverting to legacy system.") - config.admin_legacy_system = 1 - load_admins() - return - - #ifdef TESTING - var/msg = "Admins Built:\n" - for(var/ckey in admin_datums) - var/rank - var/datum/admins/D = admin_datums[ckey] - if(D) rank = D.rank - msg += "\t[ckey] - [rank]\n" - testing(msg) - #endif - - -#ifdef TESTING -/client/verb/changerank(newrank in admin_ranks) - if(holder) - holder.rank = newrank - holder.rights = admin_ranks[newrank] - else - holder = new /datum/admins(newrank,admin_ranks[newrank],ckey) - remove_admin_verbs() - holder.associate(src) - -/client/verb/changerights(newrights as num) - if(holder) - holder.rights = newrights - else - holder = new /datum/admins("testing",newrights,ckey) - remove_admin_verbs() - holder.associate(src) - -#endif diff --git a/code/modules/admin/admin_secrets.dm b/code/modules/admin/admin_secrets.dm deleted file mode 100644 index 9000e6bd1f45a..0000000000000 --- a/code/modules/admin/admin_secrets.dm +++ /dev/null @@ -1,121 +0,0 @@ -var/global/datum/admin_secrets/admin_secrets = new() - -/datum/admin_secrets - var/list/datum/admin_secret_category/categories - var/list/datum/admin_secret_item/items - -/datum/admin_secrets/New() - ..() - categories = init_subtypes(/datum/admin_secret_category) - items = list() - var/list/category_assoc = list() - for(var/datum/admin_secret_category/category in categories) - category_assoc[category.type] = category - - for(var/item_type in (typesof(/datum/admin_secret_item) - /datum/admin_secret_item)) - var/datum/admin_secret_item/secret_item = item_type - if(!initial(secret_item.name)) - continue - - var/datum/admin_secret_item/item = new item_type() - var/datum/admin_secret_category/category = category_assoc[item.category] - dd_insertObjectList(category.items, item) - items += item - -// -// Secret Item Category - Each subtype is a category for organizing secret commands. -// -/datum/admin_secret_category - var/name = "" - var/desc = "" - var/list/datum/admin_secret_item/items - -/datum/admin_secret_category - items = list() - -/datum/admin_secret_category/proc/can_view(var/mob/user) - for(var/datum/admin_secret_item/item in items) - if(item.can_view(user)) - return 1 - return 0 - -// -// Secret Item Datum - Each subtype is a command on the secrets panel. -// Override execute() with the implementation of the command. -// -/datum/admin_secret_item - var/name = "" - var/category = null - var/log = 1 - var/feedback = 1 - var/permissions = R_HOST - var/warn_before_use = 0 - -/datum/admin_secret_item/dd_SortValue() - return "[name]" - -/datum/admin_secret_item/proc/name() - return name - -/datum/admin_secret_item/proc/can_view(var/mob/user) - return check_rights(permissions, 0, user) - -/datum/admin_secret_item/proc/can_execute(var/mob/user) - if(can_view(user)) - if(!warn_before_use || alert("Execute the command '[name]'?[istext(warn_before_use) ? " [warn_before_use]" : ""]", name, "No","Yes") == "Yes") - return can_view(user) - return FALSE - -/datum/admin_secret_item/proc/execute(var/mob/user) - if(!can_execute(user)) - return FALSE - - if(log) - log_and_message_admins("used secret '[name]'", user) - . = TRUE - do_execute(user) - -/datum/admin_secret_item/proc/do_execute(var/mob/user) - return - -/datum/admin_secret_item/Topic() - . = ..() - return !. && !can_execute(usr) - -/************************* -* Pre-defined categories * -*************************/ -/datum/admin_secret_category/admin_secrets - name = "Admin Secrets" - -/datum/admin_secret_category/debug - name = "Debug Tools" - -/datum/admin_secret_category/investigation - name = "Investigation" - -/datum/admin_secret_category/fun_secrets - name = "Fun Secrets" - -/************************* -* Pre-defined base items * -*************************/ -/datum/admin_secret_item/admin_secret - category = /datum/admin_secret_category/admin_secrets - log = 0 - permissions = R_ADMIN - -/datum/admin_secret_item/debug - category = /datum/admin_secret_category/debug - log = 1 - permissions = R_DEBUG - -/datum/admin_secret_item/investigation - category = /datum/admin_secret_category/investigation - log = 0 - permissions = R_INVESTIGATE - -/datum/admin_secret_item/fun_secret - category = /datum/admin_secret_category/fun_secrets - permissions = R_FUN - warn_before_use = 1 diff --git a/code/modules/admin/admin_verbs.dm b/code/modules/admin/admin_verbs.dm deleted file mode 100644 index 68dae40aae780..0000000000000 --- a/code/modules/admin/admin_verbs.dm +++ /dev/null @@ -1,930 +0,0 @@ -//admin verb groups - They can overlap if you so wish. Only one of each verb will exist in the verbs list regardless -var/global/list/admin_verbs_default = list( - /datum/admins/proc/show_player_panel, //shows an interface for individual players, with various links (links require additional flags), right-click player panel, - /client/proc/player_panel, - /client/proc/secrets, - /client/proc/deadmin_self, //destroys our own admin datum so we can play as a regular player, - /client/proc/hide_verbs, //hides all our adminverbs, - /client/proc/hide_most_verbs, //hides all our hideable adminverbs, - /client/proc/debug_variables, //allows us to -see- the variables of any instance in the game. +VAREDIT needed to modify, - /client/proc/watched_variables, -// /client/proc/check_antagonists, //shows all antags, - /client/proc/cmd_check_new_players -// /client/proc/deadchat //toggles deadchat on/off, - ) -var/global/list/admin_verbs_admin = list( - /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, - /datum/admins/proc/show_game_mode, //Configuration window for the current game mode., - /datum/admins/proc/force_mode_latespawn, //Force the mode to try a latespawn proc, - /datum/admins/proc/force_antag_latespawn, //Force a specific template to try a latespawn proc, - /datum/admins/proc/toggleenter, //toggles whether people can join the current game, - /datum/admins/proc/toggleguests, //toggles whether guests can join the current game, - /datum/admins/proc/announce, //priority announce something to all clients., - /client/proc/colorooc, //allows us to set a custom colour for everythign we say in ooc, - /client/proc/admin_ghost, //allows us to ghost/reenter body at will, - /client/proc/toggle_view_range, //changes how far we can see, - /client/proc/cmd_admin_pm_context, //right-click adminPM interface, - /client/proc/cmd_admin_pm_panel, //admin-pm list, - /client/proc/cmd_admin_delete, //delete an instance/object/mob/etc, - /client/proc/cmd_admin_check_contents, //displays the contents of an instance, - /datum/admins/proc/access_news_network, //allows access of newscasters, - /client/proc/jumptocoord, //we ghost and jump to a coordinate, - /client/proc/Getmob, //teleports a mob to our location, - /client/proc/Getkey, //teleports a mob with a certain ckey to our location, -// /client/proc/sendmob, //sends a mob somewhere, -Removed due to it needing two sorting procs to work, which were executed every time an admin right-clicked. ~Errorage, - /client/proc/Jump, - /client/proc/jumptokey, //allows us to jump to the location of a mob with a certain ckey, - /client/proc/jumptomob, //allows us to jump to a specific mob, - /client/proc/jumptoturf, //allows us to jump to a specific turf, - /client/proc/admin_call_shuttle, //allows us to call the emergency shuttle, - /client/proc/admin_cancel_shuttle, //allows us to cancel the emergency shuttle, sending it back to centcomm, - /client/proc/cmd_admin_narrate, - /client/proc/cmd_admin_direct_narrate, //send text directly to a player with no padding. Useful for narratives and fluff-text, - /client/proc/cmd_admin_visible_narrate, - /client/proc/cmd_admin_audible_narrate, - /client/proc/cmd_admin_local_narrate, - /client/proc/cmd_admin_world_narrate, //sends text to all players with no padding, - /client/proc/cmd_admin_create_centcom_report, - /client/proc/check_ai_laws, //shows AI and borg laws, - /client/proc/rename_silicon, //properly renames silicons, - /client/proc/manage_silicon_laws, // Allows viewing and editing silicon laws. , - /client/proc/check_antagonists, - /client/proc/admin_memo, //admin memo system. show/delete/write. +SERVER needed to delete admin memos of others, - /client/proc/dsay, //talk in deadchat using our ckey -// /client/proc/toggle_hear_deadcast, //toggles whether we hear deadchat, - /client/proc/investigate_show, //various admintools for investigation. Such as a singulo grief-log, - /datum/admins/proc/toggle_allowlists, - /datum/admins/proc/toggleooc, //toggles ooc on/off for everyone, - /datum/admins/proc/toggleaooc, //toggles aooc on/off for everyone, - /datum/admins/proc/togglelooc, //toggles looc on/off for everyone, - /datum/admins/proc/toggleoocdead, //toggles ooc on/off for everyone who is dead, - /datum/admins/proc/toggledsay, //toggles dsay on/off for everyone, - /client/proc/game_panel, //game panel, allows to change game-mode etc, - /client/proc/cmd_admin_say, //admin-only ooc chat, - /datum/admins/proc/togglehubvisibility, //toggles visibility on the BYOND Hub, - /datum/admins/proc/PlayerNotes, - /client/proc/cmd_mod_say, - /datum/admins/proc/show_player_info, - /client/proc/free_slot_submap, - /client/proc/close_slot_submap, - /client/proc/free_slot_crew, - /client/proc/close_slot_crew, //frees slot for chosen job, - /client/proc/cmd_admin_change_custom_event, - /client/proc/cmd_admin_rejuvenate, - /client/proc/toggleghostwriters, - /client/proc/toggledrones, - /datum/admins/proc/show_skills, //Right click skill menu, - /client/proc/man_up, - /client/proc/global_man_up, - /client/proc/response_team, // Response Teams admin verb, - /client/proc/toggle_antagHUD_use, - /client/proc/toggle_antagHUD_restrictions, - /client/proc/allow_character_respawn, // Allows a ghost to respawn , - /client/proc/event_manager_panel, - /client/proc/empty_ai_core_toggle_latejoin, - /client/proc/empty_ai_core_toggle_latejoin, - /client/proc/aooc, - /client/proc/change_human_appearance_admin, // Allows an admin to change the basic appearance of human-based mobs , - /client/proc/change_human_appearance_self, // Allows the human-based mob itself change its basic appearance , - /client/proc/change_security_level, - /client/proc/view_chemical_reaction_logs, - /client/proc/makePAI, - /client/proc/fixatmos, - /client/proc/list_traders, - /client/proc/add_trader, - /client/proc/remove_trader, - /datum/admins/proc/sendFax, - /client/proc/check_fax_history, - /client/proc/cmd_admin_notarget, - /datum/admins/proc/setroundlength, - /datum/admins/proc/toggleroundendvote -) -var/global/list/admin_verbs_ban = list( - /client/proc/unban_panel, - /client/proc/jobbans - ) -var/global/list/admin_verbs_sounds = list( - /client/proc/play_local_sound, - /client/proc/play_sound, - /client/proc/play_server_sound - ) - -var/global/list/admin_verbs_fun = list( - /client/proc/object_talk, - /datum/admins/proc/cmd_admin_dress, - /client/proc/cmd_admin_gib_self, - /client/proc/drop_bomb, - /client/proc/cinematic, - /client/proc/cmd_admin_add_freeform_ai_law, - /client/proc/cmd_admin_add_random_ai_law, - /client/proc/toggle_random_events, - /client/proc/editappear, - /client/proc/roll_dices, - /datum/admins/proc/call_supply_drop, - /datum/admins/proc/call_drop_pod, - /client/proc/create_dungeon, - /datum/admins/proc/ai_hologram_set, - /client/proc/toggle_film_grain, - /client/proc/cmd_admin_simulate_distant_explosion, - /datum/admins/proc/ai_hologram_set - ) - -var/global/list/admin_verbs_spawn = list( - /datum/admins/proc/spawn_fruit, - /datum/admins/proc/spawn_fluid_verb, - /datum/admins/proc/spawn_custom_item, - /datum/admins/proc/check_custom_items, - /datum/admins/proc/spawn_plant, - /datum/admins/proc/spawn_atom, // allows us to spawn instances, - /datum/admins/proc/spawn_artifact, - /client/proc/spawn_chemdisp_cartridge, - /datum/admins/proc/mass_debug_closet_icons - ) -var/global/list/admin_verbs_server = list( - /datum/admins/proc/capture_map_part, - /datum/admins/proc/startnow, - /datum/admins/proc/restart, - /datum/admins/proc/endnow, - /datum/admins/proc/delay, - /datum/admins/proc/toggleaban, - /client/proc/toggle_log_hrefs, - /datum/admins/proc/immreboot, - /client/proc/cmd_admin_delete, // delete an instance/object/mob/etc, - /client/proc/cmd_debug_del_all, - /datum/admins/proc/adrev, - /datum/admins/proc/adspawn, - /datum/admins/proc/adjump, - /client/proc/toggle_random_events, - /client/proc/nanomapgen_DumpImage - ) -var/global/list/admin_verbs_debug = list( - /datum/admins/proc/jump_to_fluid_source, - /datum/admins/proc/jump_to_fluid_active, - /client/proc/cmd_admin_list_open_jobs, - /client/proc/ZASSettings, - /client/proc/cmd_debug_make_powernets, - /client/proc/debug_controller, - /client/proc/debug_antagonist_template, - /client/proc/debug_global_variables, - /client/proc/cmd_debug_mob_lists, - /client/proc/cmd_admin_delete, - /client/proc/cmd_debug_del_all, - /client/proc/air_report, - /client/proc/reload_admins, - /client/proc/restart_controller, - /client/proc/print_random_map, - /client/proc/create_random_map, - /client/proc/apply_random_map, - /client/proc/overlay_random_map, - /client/proc/delete_random_map, - /datum/admins/proc/submerge_map, - /datum/admins/proc/map_template_load, - /datum/admins/proc/map_template_load_new_z, - /datum/admins/proc/map_template_upload, - /client/proc/enable_debug_verbs, - /client/proc/callproc, - /client/proc/callproc_target, - /client/proc/SDQL_query, - /client/proc/SDQL2_query, - /client/proc/Jump, - /client/proc/jumptomob, - /client/proc/jumptocoord, - /client/proc/dsay, - /datum/admins/proc/run_unit_test, - /turf/proc/view_chunk, - /turf/proc/update_chunk, - /datum/admins/proc/capture_map, - /datum/admins/proc/view_runtimes, - /client/proc/cmd_analyse_health_context, - /client/proc/cmd_analyse_health_panel, - /client/proc/visualpower, - /client/proc/visualpower_remove, - /client/proc/ping_webhook, - /client/proc/reload_webhooks, - /client/proc/toggle_planet_repopulating, - /client/proc/spawn_exoplanet - ) - -var/global/list/admin_verbs_paranoid_debug = list( - /client/proc/callproc, - /client/proc/callproc_target, - /client/proc/debug_controller - ) - -var/global/list/admin_verbs_possess = list( - /proc/possess, - /proc/release - ) -var/global/list/admin_verbs_permissions = list( - /client/proc/edit_admin_permissions - ) -var/global/list/admin_verbs_rejuv = list( - ) - -//verbs which can be hidden - needs work -var/global/list/admin_verbs_hideable = list( - /client/proc/deadmin_self, -// /client/proc/deadchat, - /datum/admins/proc/show_traitor_panel, - /datum/admins/proc/toggleenter, - /datum/admins/proc/toggleguests, - /datum/admins/proc/announce, - /client/proc/colorooc, - /client/proc/admin_ghost, - /client/proc/toggle_view_range, - /client/proc/cmd_admin_check_contents, - /datum/admins/proc/access_news_network, - /client/proc/admin_call_shuttle, - /client/proc/admin_cancel_shuttle, - /client/proc/cmd_admin_narrate, - /client/proc/cmd_admin_direct_narrate, - /client/proc/cmd_admin_visible_narrate, - /client/proc/cmd_admin_audible_narrate, - /client/proc/cmd_admin_local_narrate, - /client/proc/cmd_admin_world_narrate, - /client/proc/play_local_sound, - /client/proc/play_sound, - /client/proc/play_server_sound, - /client/proc/object_talk, - /datum/admins/proc/cmd_admin_dress, - /client/proc/cmd_admin_gib_self, - /client/proc/drop_bomb, - /client/proc/cinematic, - /client/proc/cmd_admin_add_freeform_ai_law, - /client/proc/cmd_admin_add_random_ai_law, - /client/proc/cmd_admin_create_centcom_report, - /client/proc/toggle_random_events, - /client/proc/cmd_admin_simulate_distant_explosion, - /client/proc/cmd_admin_add_random_ai_law, - /datum/admins/proc/startnow, - /datum/admins/proc/restart, - /datum/admins/proc/endnow, - /datum/admins/proc/delay, - /datum/admins/proc/toggleaban, - /client/proc/toggle_log_hrefs, - /datum/admins/proc/immreboot, - /datum/admins/proc/adrev, - /datum/admins/proc/adspawn, - /datum/admins/proc/adjump, - /client/proc/restart_controller, - /client/proc/cmd_admin_list_open_jobs, - /client/proc/callproc, - /client/proc/callproc_target, - /client/proc/reload_admins, - /client/proc/cmd_debug_make_powernets, - /client/proc/debug_controller, - /client/proc/startSinglo, - /client/proc/cmd_debug_mob_lists, - /client/proc/cmd_debug_del_all, - /client/proc/air_report, - /client/proc/enable_debug_verbs, - /client/proc/roll_dices, - /proc/possess, - /proc/release, - /client/proc/cmd_admin_notarget - ) -var/global/list/admin_verbs_mod = list( - /client/proc/cmd_admin_pm_context, // right-click adminPM interface, - /client/proc/cmd_admin_pm_panel, // admin-pm list, - /client/proc/debug_variables, // allows us to -see- the variables of any instance in the game., - /client/proc/watched_variables, - /datum/admins/proc/PlayerNotes, - /client/proc/admin_ghost, // allows us to ghost/reenter body at will, - /client/proc/cmd_mod_say, - /datum/admins/proc/show_player_info, - /client/proc/dsay, - /datum/admins/proc/show_skills, // Right-click skill menu, - /datum/admins/proc/show_player_panel,// right-click player panel, - /client/proc/check_antagonists, - /client/proc/cmd_admin_narrate, - /client/proc/cmd_admin_direct_narrate, - /client/proc/cmd_admin_visible_narrate, - /client/proc/cmd_admin_audible_narrate, - /client/proc/cmd_admin_local_narrate, //sends text to all players with no padding, - /client/proc/aooc, - /datum/admins/proc/sendFax, - /client/proc/check_fax_history, - /datum/admins/proc/paralyze_mob // right-click paralyze , -) - -//[INF] -var/list/admin_verbs_xeno = list( -// /client/proc/cmd_admin_pm_context, -// /client/proc/cmd_admin_pm_panel, -// /client/proc/admin_ghost, -// /datum/admins/proc/show_player_info, - /datum/admins/proc/PlayerNotes, - /datum/admins/proc/xeno_whitelist_panel -) -//[/INF] - -/client/proc/add_admin_verbs() - if(holder) - verbs += admin_verbs_default - if(holder.rights & R_BUILDMODE) verbs += /client/proc/togglebuildmodeself - if(holder.rights & R_ADMIN) verbs += admin_verbs_admin - if(holder.rights & R_BAN) verbs += admin_verbs_ban - if(holder.rights & R_FUN) verbs += admin_verbs_fun - if(holder.rights & R_SERVER) verbs += admin_verbs_server - if(holder.rights & R_DEBUG) - verbs += admin_verbs_debug - if(config.debugparanoid && !(holder.rights & R_ADMIN)) - verbs.Remove(admin_verbs_paranoid_debug) //Right now it's just callproc but we can easily add others later on. - if(holder.rights & R_POSSESS) verbs += admin_verbs_possess - if(holder.rights & R_PERMISSIONS) verbs += admin_verbs_permissions - if(holder.rights & R_STEALTH) verbs += /client/proc/stealth - if(holder.rights & R_REJUVINATE) verbs += admin_verbs_rejuv - if(holder.rights & R_SOUNDS) verbs += admin_verbs_sounds - if(holder.rights & R_SPAWN) verbs += admin_verbs_spawn - if(holder.rights & R_MOD) verbs += admin_verbs_mod - if(holder.rights & R_XENO) verbs += admin_verbs_xeno //INF - -/client/proc/remove_admin_verbs() - verbs.Remove( - 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, - /client/proc/stealth, - admin_verbs_rejuv, - admin_verbs_sounds, - admin_verbs_spawn, - debug_verbs - ) - -/client/proc/hide_most_verbs()//Allows you to keep some functionality while hiding some verbs - set name = "Adminverbs - Hide Most" - set category = "Admin" - - verbs.Remove(/client/proc/hide_most_verbs, admin_verbs_hideable) - verbs += /client/proc/show_verbs - - to_chat(src, "Most of your adminverbs have been hidden.") - return - -/client/proc/hide_verbs() - set name = "Adminverbs - Hide All" - set category = "Admin" - - remove_admin_verbs() - verbs += /client/proc/show_verbs - - to_chat(src, "Almost all of your adminverbs have been hidden.") - return - -/client/proc/show_verbs() - set name = "Adminverbs - Show" - set category = "Admin" - - verbs -= /client/proc/show_verbs - add_admin_verbs() - - to_chat(src, "All of your adminverbs are now visible.") - - - - - -/client/proc/admin_ghost() - set category = "Admin" - set name = "Aghost" - if(!holder) return - if(isghost(mob)) - var/mob/observer/ghost/ghost = mob - sound_to(usr, sound(null)) - ghost.reenter_corpse() - - else if(istype(mob,/mob/new_player)) - to_chat(src, "Error: Aghost: Can't admin-ghost whilst in the lobby. Join or Observe first.") - else - //ghostize - var/mob/body = mob - var/mob/observer/ghost/ghost = body.ghostize(1) - sound_to(usr, sound(null)) - - if (!ghost) - to_chat(src, FONT_COLORED("red", "You are already admin-ghosted.")) - return - ghost.admin_ghosted = 1 - if(body) - body.teleop = ghost - if(!body.key) - body.key = "@[key]" //Haaaaaaaack. But the people have spoken. If it breaks; blame adminbus - - -/client/proc/invisimin() - set name = "Invisimin" - set category = "Admin" - set desc = "Toggles ghost-like invisibility (Don't abuse this)" - if(holder && mob) - if(mob.invisibility == INVISIBILITY_OBSERVER) - mob.set_invisibility(initial(mob.invisibility)) - to_chat(mob, "Invisimin off. Invisibility reset.") - mob.alpha = max(mob.alpha + 100, 255) - else - mob.set_invisibility(INVISIBILITY_OBSERVER) - to_chat(mob, "Invisimin on. You are now as invisible as a ghost.") - mob.alpha = max(mob.alpha - 100, 0) - - -/client/proc/player_panel() - set name = "Player Panel" - set category = "Admin" - if(holder) - holder.player_panel() - return - -/client/proc/check_antagonists() - set name = "Check Antagonists" - set category = "Admin" - if(holder) - holder.check_antagonists() - log_admin("[key_name(usr)] checked antagonists.") //for tsar~ - return - -/client/proc/jobbans() - set name = "Display Job bans" - set category = "Admin" - if(holder) - if(config.ban_legacy_system) - holder.Jobbans() - else - holder.DB_ban_panel() - return - -/client/proc/unban_panel() - set name = "Unban Panel" - set category = "Admin" - if(holder) - if(config.ban_legacy_system) - holder.unbanpanel() - else - holder.DB_ban_panel() - return - -/client/proc/game_panel() - set name = "Game Panel" - set category = "Admin" - if(holder) - holder.Game() - return - -/client/proc/secrets() - set name = "Secrets" - set category = "Admin" - if (holder) - holder.Secrets() - return - -/client/proc/colorooc() - set category = "Fun" - set name = "OOC Text Color" - if(!can_select_ooc_color(src)) // INF, was if(!check_rights(R_FUN)) - return - - var/client/C - if(alert(src, "Change for yourself or someone else?", "User pick", "For myself", "For another player") == "For another player") - C = input(src, "Please select a player.", "Player select") as null|anything in (GLOB.clients - src) - else - C = src - if(!C) - return - - var/response = alert(src, "Please choose a distinct color that is easy to read and doesn't mix with all the other chat and radio frequency colors.", "Change [C] OOC color", "Pick new color", "Reset to default", "Cancel") - if(response == "Pick new color") - C.prefs.ooccolor = input(src, "Please select your OOC colour.", "OOC colour") as color - else if(response == "Reset to default") - C.prefs.ooccolor = initial(C.prefs.ooccolor) - else - return - if(C && C != src) - to_chat(C, SPAN_NOTICE("[src] changed your OOC color to [C.prefs.ooccolor == initial(C.prefs.ooccolor) ? "default" : C.prefs.ooccolor].")) - log_and_message_admins("changed [C == src ? "his own" : "[C]"] OOC color to [C.prefs.ooccolor == initial(C.prefs.ooccolor) ? "default" : C.prefs.ooccolor].") - SScharacter_setup.queue_preferences_save(C.prefs) - return - - -/client/proc/warn(warned_ckey) - if(!check_rights(R_ADMIN)) - return - if(!warned_ckey || !istext(warned_ckey)) - return - if(warned_ckey in admin_datums) - to_chat(usr, "Error: warn(): You can't warn admins.") - return - var/datum/preferences/D - var/client/C = GLOB.ckey_directory[warned_ckey] - if(C) - D = C.prefs - else - D = SScharacter_setup.preferences_datums[warned_ckey] - if(!D) - to_chat(src, "Error: warn(): No such ckey found.") - return - ++D.warns - if (config.warn_autoban_threshold && D.warns >= config.warn_autoban_threshold) - var/mins_readable = minutes_to_readable(config.warn_autoban_duration) - ban_unban_log_save("[ckey] warned [warned_ckey], resulting in a [mins_readable] autoban.") - if(C) - message_admins("[key_name_admin(src)] has warned [key_name_admin(C)] resulting in a [mins_readable] ban.") - to_chat(C, "You have been autobanned due to a warning by [ckey].
              This is a temporary ban, it will be removed in [mins_readable].
              ") - qdel(C) - else - message_admins("[key_name_admin(src)] has warned [warned_ckey] resulting in a [mins_readable] ban.") - AddBan(warned_ckey, D.last_id, "Autobanning due to too many formal warnings", ckey, 1, config.warn_autoban_duration) - else - if(C) - to_chat(C, "You have been formally warned by an administrator.
              Further warnings will result in an autoban.
              ") - message_admins("[key_name_admin(src)] has warned [key_name_admin(C)]. They have [config.warn_autoban_threshold - D.warns] strikes remaining.") - else - message_admins("[key_name_admin(src)] has warned [warned_ckey] (DC). They have [config.warn_autoban_threshold - D.warns] strikes remaining.") - - -/client/proc/drop_bomb() // Some admin dickery that can probably be done better -- TLE - set category = "Special Verbs" - set name = "Drop Bomb" - set desc = "Cause an explosion of varying strength at your location." - - var/turf/epicenter = mob.loc - var/list/choices = list("Small Bomb", "Medium Bomb", "Big Bomb", "Custom Bomb") - var/choice = input("What size explosion would you like to produce?") as null | anything in choices - switch(choice) - if (null) - return - if("Small Bomb") - explosion(epicenter, 1, 2, 3, 3) - if("Medium Bomb") - explosion(epicenter, 2, 3, 4, 4) - if("Big Bomb") - explosion(epicenter, 3, 5, 7, 5) - if("Custom Bomb") - var/devastation_range = input("Devastation range (in tiles):") as num|null - if (isnull(devastation_range)) - return - var/heavy_impact_range = input("Heavy impact range (in tiles):") as num|null - if (isnull(heavy_impact_range)) - return - var/light_impact_range = input("Light impact range (in tiles):") as num|null - if (isnull(light_impact_range)) - return - var/flash_range = input("Flash range (in tiles):") as num|null - if (isnull(flash_range)) - return - explosion(epicenter, devastation_range, heavy_impact_range, light_impact_range, flash_range) - log_and_message_admins("created an admin explosion at [epicenter.loc].") - -/client/proc/togglebuildmodeself() - set name = "Toggle Build Mode Self" - set category = "Special Verbs" - - if(!check_rights(R_ADMIN)) - return - - if(istype(CH, /datum/click_handler/build_mode)) - CH.Exit() - QDEL_NULL(CH) - else - CH = new /datum/click_handler/build_mode(src) - CH.Enter() - -/client/proc/object_talk(var/msg as text) // -- TLE - set category = "Special Verbs" - set name = "oSay" - set desc = "Display a message to everyone who can hear the target" - if(mob.control_object) - if(!msg) - return - for (var/mob/V in hearers(mob.control_object)) - V.show_message("[mob.control_object.name] says: \"" + msg + "\"", 2) - -/client/proc/readmin_self() - set name = "Re-Admin self" - set category = "Admin" - - if(deadmin_holder) - deadmin_holder.reassociate() - log_admin("[src] re-admined themself.") - message_admins("[src] re-admined themself.", 1) - to_chat(src, "You now have the keys to control the planet, or at least [GLOB.using_map.full_name].") - verbs -= /client/proc/readmin_self - -/client/proc/deadmin_self() - set name = "De-admin self" - set category = "Admin" - - if(holder) - if(alert("Confirm self-deadmin for the round? You can re-admin yourself at any time.",,"Yes","No") == "Yes") - log_admin("[src] deadmined themself.") - message_admins("[src] deadmined themself.", 1) - deadmin() - to_chat(src, "You are now a normal player.") - verbs |= /client/proc/readmin_self - -/client/proc/toggle_log_hrefs() - set name = "Toggle href logging" - set category = "Server" - if(!holder) return - if(config) - if(config.log_hrefs) - config.log_hrefs = 0 - to_chat(src, "Stopped logging hrefs") - else - config.log_hrefs = 1 - to_chat(src, "Started logging hrefs") - -/client/proc/check_ai_laws() - set name = "Check AI Laws" - set category = "Admin" - if(holder) - src.holder.output_ai_laws() - -/client/proc/rename_silicon() - set name = "Rename Silicon" - set category = "Admin" - - if(!check_rights(R_ADMIN)) return - - var/mob/living/silicon/S = input("Select silicon.", "Rename Silicon.") as null|anything in GLOB.silicon_mob_list - if(!S) return - - var/new_name = sanitizeSafe(input(src, "Enter new name. Leave blank or as is to cancel.", "[S.real_name] - Enter new silicon name", S.real_name)) - if(new_name && new_name != S.real_name) - log_and_message_admins("has renamed the silicon '[S.real_name]' to '[new_name]'") - S.fully_replace_character_name(new_name) - -/client/proc/manage_silicon_laws() - set name = "Manage Silicon Laws" - set category = "Admin" - - if(!check_rights(R_ADMIN)) return - - var/mob/living/silicon/S = input("Select silicon.", "Manage Silicon Laws") as null|anything in GLOB.silicon_mob_list - if(!S) return - - var/datum/nano_module/law_manager/L = new(S) - L.ui_interact(usr, state = GLOB.admin_state) - log_and_message_admins("has opened [S]'s law manager.") - -/client/proc/change_human_appearance_admin() - set name = "Change Mob Appearance - Admin" - set desc = "Allows you to change the mob appearance" - set category = "Admin" - - if(!check_rights(R_FUN)) return - - var/mob/living/carbon/human/H = input("Select mob.", "Change Mob Appearance - Admin") as null|anything in GLOB.human_mob_list - if(!H) return - - log_and_message_admins("is altering the appearance of [H].") - H.change_appearance(APPEARANCE_ALL, FALSE, usr, state = GLOB.admin_state) - -/client/proc/change_human_appearance_self() - set name = "Change Mob Appearance - Self" - set desc = "Allows the mob to change its appearance" - set category = "Admin" - - if(!check_rights(R_FUN)) return - - var/mob/living/carbon/human/H = input("Select mob.", "Change Mob Appearance - Self") as null|anything in GLOB.human_mob_list - if(!H) return - - if(!H.client) - to_chat(usr, "Only mobs with clients can alter their own appearance.") - return - - switch(alert("Do you wish for [H] to be allowed to select non-whitelisted races?","Alter Mob Appearance","Yes","No","Cancel")) - if("Yes") - log_and_message_admins("has allowed [H] to change \his appearance, including races that requires whitelisting") - H.change_appearance(APPEARANCE_COMMON, FALSE) - if("No") - log_and_message_admins("has allowed [H] to change \his appearance, excluding races that requires whitelisting.") - H.change_appearance(APPEARANCE_COMMON, TRUE) - -/client/proc/change_security_level() - set name = "Set security level" - set desc = "Sets the security level" - set category = "Admin" - - if(!check_rights(R_ADMIN)) return - - var/decl/security_state/security_state = decls_repository.get_decl(GLOB.using_map.security_state) - - var/decl/security_level/new_security_level = input(usr, "It's currently [security_state.current_security_level.name].", "Select Security Level") as null|anything in (security_state.all_security_levels - security_state.current_security_level) - if(!new_security_level) - return - - if(alert("Switch from [security_state.current_security_level.name] to [new_security_level.name]?","Change security level?","Yes","No") == "Yes") - security_state.set_security_level(new_security_level, TRUE) - - -//---- bs12 verbs ---- - - -/client/proc/editappear() - set name = "Edit Appearance" - set category = "Fun" - - if(!check_rights(R_FUN)) return - - var/mob/living/carbon/human/M = input("Select mob.", "Edit Appearance") as null|anything in GLOB.human_mob_list - - if(!istype(M, /mob/living/carbon/human)) - to_chat(usr, "You can only do this to humans!") - return - switch(alert("Are you sure you wish to edit this mob's appearance? Skrell, Unathi and Vox can result in unintended consequences.",,"Yes","No")) - if("No") - return - var/new_facial = input("Please select facial hair color.", "Character Generation") as color - if(new_facial) - M.facial_hair_color = new_facial - - var/new_hair = input("Please select hair color.", "Character Generation") as color - if(new_hair) - M.head_hair_color = new_hair - - var/new_eyes = input("Please select eye color.", "Character Generation") as color - if(new_eyes) - M.eye_color = new_eyes - M.update_eyes() - - var/new_skin = input("Please select body color. This is for Unathi, and Skrell only!", "Character Generation") as color - if(new_skin) - M.skin_color = new_skin - - var/new_tone = input("Please select skin tone level: 1-220 (1=albino, 35=caucasian, 150=black, 220='very' black)", "Character Generation") as text - - if (new_tone) - M.skin_tone = max(min(round(text2num(new_tone)), 220), 1) - M.skin_tone = -M.skin_tone + 35 - - // hair - var/new_hstyle = input(usr, "Select a hair style", "Grooming") as null|anything in GLOB.hair_styles_list - if(new_hstyle) - M.head_hair_style = new_hstyle - - // facial hair - var/new_fstyle = input(usr, "Select a facial hair style", "Grooming") as null|anything in GLOB.facial_hair_styles_list - if(new_fstyle) - M.facial_hair_style = new_fstyle - - var/new_gender = alert(usr, "Please select gender.", "Character Generation", "Male", "Female", "Neuter") - if (new_gender) - if(new_gender == "Male") - M.gender = MALE - else if (new_gender == "Female") - M.gender = FEMALE - else - M.gender = NEUTER - - M.update_hair() - M.update_body() - M.check_dna(M) - -/client/proc/playernotes() - set name = "Show Player Info" - set category = "Admin" - if(holder) - holder.PlayerNotes() - return - -/client/proc/free_slot_submap() - set name = "Free Job Slot (Submap)" - set category = "Admin" - if(!holder) return - - var/list/jobs = list() - for(var/thing in SSmapping.submaps) - var/datum/submap/submap = thing - for(var/otherthing in submap.jobs) - var/datum/job/submap/job = submap.jobs[otherthing] - if(!job.is_position_available()) - jobs["[job.title] - [submap.name]"] = job - - if(!LAZYLEN(jobs)) - to_chat(usr, "There are no fully staffed offsite jobs.") - return - - var/job_name = input("Please select job slot to free", "Free job slot") as null|anything in jobs - if(job_name) - var/datum/job/submap/job = jobs[job_name] - if(istype(job) && !job.is_position_available()) - job.make_position_available() - message_admins("An offsite job slot for [job_name] has been opened by [key_name_admin(usr)]") - -/client/proc/close_slot_submap() - set name = "Close Job Slot (Submap)" - set category = "Admin" - if(!holder) return - - var/list/jobs = list() - for(var/thing in SSmapping.submaps) - var/datum/submap/submap = thing - for(var/otherthing in submap.jobs) - var/datum/job/submap/job = submap.jobs[otherthing] - if(job.is_position_available()) - jobs["[job.title] - [submap.name]"] = job - - var/job_name = input("Please select job slot to close", "Close job slot") as null|anything in jobs - if(job_name) - var/datum/job/submap/job = jobs[job_name] - if(istype(job) && job.is_position_available()) - job.make_position_unavailable() - log_and_message_admins("has closed an offsite job slot for [job_name]") - -/client/proc/free_slot_crew() - set name = "Free Job Slot (Crew)" - set category = "Admin" - if(holder) - var/list/jobs = list() - for (var/datum/job/J in SSjobs.primary_job_datums) - if(!J.is_position_available()) - jobs[J.title] = J - if (!jobs.len) - to_chat(usr, "There are no fully staffed jobs.") - return - var/job_title = input("Please select job slot to free", "Free job slot") as null|anything in jobs - var/datum/job/job = jobs[job_title] - if(job && !job.is_position_available()) - job.make_position_available() - message_admins("A job slot for [job_title] has been opened by [key_name_admin(usr)]") - return - -/client/proc/close_slot_crew() - set name = "Close Job Slot (Crew)" - set category = "Admin" - if(holder) - var/list/jobs = list() - for (var/datum/job/J in SSjobs.primary_job_datums) - if(J.is_position_available()) - jobs[J.title] = J - var/job_title = input("Please select job slot to close", "Close job slot") as null|anything in jobs - var/datum/job/job = jobs[job_title] - if(job && job.is_position_available()) - job.make_position_unavailable() - log_and_message_admins("has closed a job slot for [job_title]") - return - -/client/proc/toggleghostwriters() - set name = "Toggle ghost writers" - set category = "Server" - if(!holder) return - if(config) - if(config.cult_ghostwriter) - config.cult_ghostwriter = 0 - to_chat(src, "Disallowed ghost writers.") - message_admins("Admin [key_name_admin(usr)] has disabled ghost writers.", 1) - else - config.cult_ghostwriter = 1 - to_chat(src, "Enabled ghost writers.") - message_admins("Admin [key_name_admin(usr)] has enabled ghost writers.", 1) - -/client/proc/toggledrones() - set name = "Toggle maintenance drones" - set category = "Server" - if(!holder) return - if(config) - if(config.allow_drone_spawn) - config.allow_drone_spawn = 0 - to_chat(src, "Disallowed maint drones.") - message_admins("Admin [key_name_admin(usr)] has disabled maint drones.", 1) - else - config.allow_drone_spawn = 1 - to_chat(src, "Enabled maint drones.") - message_admins("Admin [key_name_admin(usr)] has enabled maint drones.", 1) - -/client/proc/man_up(mob/T as mob in SSmobs.mob_list) - set popup_menu = FALSE - set category = "Fun" - set name = "Man Up" - set desc = "Tells mob to man up and deal with it." - - to_chat(T, "Man up and deal with it.") - to_chat(T, "Move on.") - - log_and_message_admins("told [key_name(T)] to man up and deal with it.") - -/client/proc/global_man_up() - set category = "Fun" - set name = "Man Up Global" - set desc = "Tells everyone to man up and deal with it." - - for (var/mob/T as mob in SSmobs.mob_list) - to_chat(T, "
              Man up.
              Deal with it.

              Move on.

              ") - sound_to(T, 'sound/voice/ManUp1.ogg') - - log_and_message_admins("told everyone to man up and deal with it.") - -/client/proc/give_spell(mob/T as mob in SSmobs.mob_list) // -- Urist - set category = "Fun" - set name = "Give Spell" - set desc = "Gives a spell to a mob." - var/spell/S = input("Choose the spell to give to that guy", "ABRAKADABRA") as null|anything in spells - if(!S) return - T.add_spell(new S) - log_and_message_admins("gave [key_name(T)] the spell [S].") diff --git a/code/modules/admin/banjob.dm b/code/modules/admin/banjob.dm deleted file mode 100644 index 99d351291adae..0000000000000 --- a/code/modules/admin/banjob.dm +++ /dev/null @@ -1,103 +0,0 @@ -//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:32 - -var/global/jobban_runonce // Updates legacy bans with new info -var/global/jobban_keylist[0] //to store the keys & ranks - -/proc/jobban_fullban(mob/M, rank, reason) - if(!M) - return - var/last_ckey = LAST_CKEY(M) - if(!last_ckey) - return - jobban_keylist.Add(text("[last_ckey] - [rank] ## [reason]")) - jobban_savebanfile() - -/proc/jobban_client_fullban(ckey, rank) - if (!ckey || !rank) return - jobban_keylist.Add(text("[ckey] - [rank]")) - jobban_savebanfile() - -//returns a reason if M is banned from rank, returns 0 otherwise -/proc/jobban_isbanned(mob/M, rank) - if(M && rank) - if (SSjobs.guest_jobbans(rank)) - if(config.guest_jobban && IsGuestKey(M.key)) - return "Guest Job-ban" - if(!GLOB.skip_allow_lists && config.usewhitelist && !check_whitelist(M)) - return "Whitelisted Job" - return ckey_is_jobbanned(M.ckey, rank) - return 0 - -/proc/ckey_is_jobbanned(var/check_key, var/rank) - for(var/s in jobban_keylist) - if(findtext(s,"[check_key] - [rank]") == 1 ) - var/startpos = findtext(s, "## ")+3 - if(startpos && startpos Now()") - query1.Execute() - - while(query1.NextRow()) - var/ckey = query1.item[1] - var/job = query1.item[2] - - jobban_keylist.Add("[ckey] - [job]") - -/proc/jobban_savebanfile() - var/savefile/S=new("data/job_full.ban") - to_save(S["keys[0]"], jobban_keylist) - -/proc/jobban_unban(mob/M, rank) - jobban_remove("[M.ckey] - [rank]") - jobban_savebanfile() - - -/proc/ban_unban_log_save(var/formatted_log) - text2file(formatted_log,"data/ban_unban_log.txt") - - -/proc/jobban_remove(X) - for (var/i = 1; i <= length(jobban_keylist); i++) - if( findtext(jobban_keylist[i], "[X]") ) - jobban_keylist.Remove(jobban_keylist[i]) - jobban_savebanfile() - return 1 - return 0 diff --git a/code/modules/admin/buildmode/_build_mode.dm b/code/modules/admin/buildmode/_build_mode.dm deleted file mode 100644 index 3e28c484529f1..0000000000000 --- a/code/modules/admin/buildmode/_build_mode.dm +++ /dev/null @@ -1,82 +0,0 @@ -/datum/build_mode - var/the_default = FALSE - var/name - var/icon_state - var/datum/click_handler/build_mode/host - var/datum/buildmode_overlay/overlay - var/mob/user - -/datum/build_mode/New(var/host) - ..() - src.host = host - user = src.host.owner?.mob - -/datum/build_mode/Destroy() - QDEL_NULL(overlay) - host = null - . = ..() - -/datum/build_mode/proc/OnClick(var/atom/A, var/list/parameters) - return - -/datum/build_mode/proc/Configurate() - return - -/datum/build_mode/proc/Help() - return - -/datum/build_mode/proc/Selected() - return - -/datum/build_mode/proc/Unselected() - return - -/datum/build_mode/proc/TimerEvent() - return - -/datum/build_mode/proc/UpdateOverlay(atom/movable/M, turf/T) - return - -/datum/build_mode/proc/CreateOverlay(icon_state) - overlay = new(user, src, icon_state) - -/datum/build_mode/proc/Log(message) - log_admin("BUILD MODE - [name] - [key_name(usr)] - [message]") - -/datum/build_mode/proc/Warn(message) - to_chat(user, "BUILD MODE - [name] - [message])") - -/datum/build_mode/CanUseTopic(mob/user) - if (check_rights(R_BUILDMODE, TRUE, user)) - return STATUS_INTERACTIVE - return ..() - -/datum/build_mode/proc/make_rectangle(turf/A, turf/B) - if(!A || !B) // No coords - return - if(A.z != B.z) // Not same z-level - return - - var/height = A.y - B.y - var/width = A.x - B.x - var/z_level = A.z - - var/turf/lower_left_corner = null - // First, try to find the lowest part - var/desired_y = 0 - desired_y = min(A.y, B.y) - - //Now for the left-most part. - var/desired_x = 0 - desired_x = min(A.x, B.x) - - lower_left_corner = locate(desired_x, desired_y, z_level) - - // Now we can begin building the actual room. This defines the boundries for the room. - var/low_bound_x = lower_left_corner.x - var/low_bound_y = lower_left_corner.y - - var/high_bound_x = lower_left_corner.x + abs(width) - var/high_bound_y = lower_left_corner.y + abs(height) - - return list(low_bound_x, low_bound_y, high_bound_x, high_bound_y, z_level) diff --git a/code/modules/admin/buildmode/_buttons.dm b/code/modules/admin/buildmode/_buttons.dm deleted file mode 100644 index 2cb67b65f0da9..0000000000000 --- a/code/modules/admin/buildmode/_buttons.dm +++ /dev/null @@ -1,75 +0,0 @@ -/obj/effect/bmode - density = TRUE - anchored = TRUE - plane = HUD_PLANE - layer = HUD_BASE_LAYER - icon = 'icons/misc/buildmode.dmi' - var/datum/click_handler/build_mode/host - -/obj/effect/bmode/New(var/host) - ..() - src.host = host - -/obj/effect/bmode/Destroy() - host = null - . = ..() - -/obj/effect/bmode/proc/OnClick(var/list/params) - return - -/obj/effect/bmode/dir - icon_state = "build" - screen_loc = "NORTH,WEST" - -/obj/effect/bmode/dir/New() - ..() - set_dir(host.dir) - -/obj/effect/bmode/dir/OnClick(var/list/parameters) - switch(dir) - if(SOUTH) - set_dir(WEST) - if(WEST) - set_dir(NORTH) - if(NORTH) - set_dir(EAST) - if(EAST) - set_dir(NORTHWEST) - else - set_dir(SOUTH) - host.dir = dir - -/obj/effect/bmode/help - icon_state = "buildhelp" - screen_loc = "NORTH,WEST+1" - -/obj/effect/bmode/help/OnClick() - host.current_build_mode.Help() - -/obj/effect/bmode/mode - screen_loc = "NORTH,WEST+2" - -/obj/effect/bmode/mode/New() - ..() - icon_state = host.current_build_mode.icon_state - -/obj/effect/bmode/mode/OnClick(var/list/parameters) - if(parameters["left"]) - var/datum/build_mode/build_mode = input("Select build mode", "Select build mode", host.current_build_mode) as null|anything in host.build_modes - if(build_mode && host && (build_mode in host.build_modes)) - host.current_build_mode.Unselected() - build_mode.Selected() - host.current_build_mode = build_mode - icon_state = build_mode.icon_state - to_chat(usr, "Build mode '[host.current_build_mode]' selected.") - else if(parameters["right"]) - host.current_build_mode.Configurate() - -/obj/effect/bmode/quit - icon_state = "buildquit" - screen_loc = "NORTH,WEST+3" - -/obj/effect/bmode/quit/OnClick() - host.Exit() - if(usr.client) - QDEL_NULL(usr.client.CH) diff --git a/code/modules/admin/buildmode/_click_handler.dm b/code/modules/admin/buildmode/_click_handler.dm deleted file mode 100644 index b2e3174ef590e..0000000000000 --- a/code/modules/admin/buildmode/_click_handler.dm +++ /dev/null @@ -1,68 +0,0 @@ -/datum/click_handler/build_mode - var/dir - - var/list/build_modes - var/list/build_buttons - var/timer_handle - - var/datum/build_mode/current_build_mode - -/datum/click_handler/build_mode/New(owner_) - ..() - - build_modes = list() - for(var/mode_type in subtypesof(/datum/build_mode)) - var/datum/build_mode/build_mode = new mode_type(src) - build_modes += build_mode - if(build_mode.the_default) - current_build_mode = build_mode - - build_buttons = list() - for(var/button_type in subtypesof(/obj/effect/bmode)) - var/obj/effect/bmode/build_button = new button_type(src) - build_buttons += build_button - StartTimer() - current_build_mode.Selected() - to_chat(owner.mob, "Build Mode Enabled") - -/datum/click_handler/build_mode/Destroy() - current_build_mode.Unselected() - StopTimer() - QDEL_NULL(current_build_mode) - QDEL_NULL_LIST(build_modes) - QDEL_NULL_LIST(build_buttons) - to_chat(owner.mob, "Build Mode Disabled") - . = ..() - -/datum/click_handler/build_mode/proc/StartTimer() - timer_handle = addtimer(CALLBACK(src, .proc/TimerEvent), 1 SECOND, TIMER_UNIQUE | TIMER_STOPPABLE | TIMER_LOOP) - -/datum/click_handler/build_mode/proc/StopTimer() - deltimer(timer_handle) - -/datum/click_handler/build_mode/proc/TimerEvent() - if (!QDELETED(current_build_mode)) - current_build_mode.TimerEvent() - if (current_build_mode.overlay) - current_build_mode.overlay.TimerEvent() - -/datum/click_handler/build_mode/Enter() - owner.show_popup_menus = FALSE - for(var/build_button in build_buttons) - owner.screen += build_button - -/datum/click_handler/build_mode/Exit() - owner.show_popup_menus = TRUE - for(var/build_button in build_buttons) - owner.screen -= build_button - -// /datum/click_handler/build_mode/OnDblClick(var/atom/A, var/params) -// Click(A, params) // We treat double-clicks as normal clicks - -/datum/click_handler/build_mode/Click(atom/target, location, control, params) - params = params2list(params) - if(target in build_buttons) - var/obj/effect/bmode/build_button = target - build_button.OnClick(params) - else - current_build_mode.OnClick(target, params) diff --git a/code/modules/admin/buildmode/_color_pool.dm b/code/modules/admin/buildmode/_color_pool.dm deleted file mode 100644 index a8f9cacacdba2..0000000000000 --- a/code/modules/admin/buildmode/_color_pool.dm +++ /dev/null @@ -1,31 +0,0 @@ -/** -Temporary color pool using text/number/path/instance keys. -Once fixed distinct colors are expended, md5(key) is used. -Null key is always #000000. -*/ - -/color_pool - var/list/available = list( //source: https://sashamaps.net/docs/resources/20-colors - "#ffffff", "#a9a9a9", "#e6194b", "#3cb44b", "#ffe119", "#4363d8", - "#f58231", "#42d4f4", "#f032e6", "#fabebe", "#469990", "#e6beff", - "#9a6324", "#fffac8", "#800000", "#aaffc3", "#000075" - ) - var/list/assigned = list() - -/color_pool/proc/get(key) - if (isnull(key)) - return "#000000" - if (isnum(key) || ispath(key)) - key = "[key]" - else if (!istext(key)) - key = "\ref[key]" - var/result = assigned[key] - if (!result) - var/count = length(available) - if (!count) - result = "#[copytext_char(md5(key), 1, 7)]" - else - result = available[count] - available.Cut(count) - assigned[key] = result - return result diff --git a/code/modules/admin/buildmode/_datums/mob_spawner.dm b/code/modules/admin/buildmode/_datums/mob_spawner.dm deleted file mode 100644 index d61f329d45611..0000000000000 --- a/code/modules/admin/buildmode/_datums/mob_spawner.dm +++ /dev/null @@ -1,115 +0,0 @@ -/datum/mob_spawner - var/interval = 0 //interval to spawn mobs on (in seconds) - var/next_spawn_time = 0 //internal - var/variation = 0 //random variation added to the interval (in seconds) - var/spawn_count = 0 //how many mobs to spawn (0 is infinite) - var/radius = 0 //radius from around the selected origin to spawn mobs (0 is no radius) - var/turf/center //center turf, used when selecting a turf and radius > 0 - var/area/area //area where mobs will spawn - var/list/mob/living/mobs = list() - var/list/messages = list() //messages spawner will pick from to display alongside spawning mobs - var/message_class = "none" //the span class applied to the chosen message - var/paused = TRUE - var/atmos_immune = FALSE //if the mobs are immune to all atmospheric conditions - var/faction = null //faction of the mob, null = default faction - - -/datum/mob_spawner/proc/copy() - var/list/contents = list() - - contents["mobs"] = mobs.Copy() - contents["interval"] = interval - contents["variation"] = variation - contents["message"] = messages - contents["message_class"] = message_class - contents["radius"] = radius - contents["atmos_immune"] = atmos_immune - contents["faction"] = faction - contents["spawn_count"] = spawn_count - contents["paused"] = paused - contents["next_spawn_time"] = next_spawn_time - - return contents - -/datum/mob_spawner/proc/paste(list/contents) - if(contents.len == 0) - return - - var/list/mob_list = contents["mobs"] - mobs = mob_list.Copy() - interval = contents["interval"] - variation = contents["variation"] - messages = contents["message"] - message_class = contents["message_class"] - radius = contents["radius"] - spawn_count = contents["spawn_count"] - atmos_immune = contents["atmos_immune"] - faction = contents["faction"] - paused = contents["paused"] - next_spawn_time = contents["next_spawn_time"] - - if (!paused) - START_PROCESSING(SSprocessing, src) - -/datum/mob_spawner/Process() - if (interval == 0 && spawn_count >= 0) - interval = 10 - - if (mobs.len > 0 && next_spawn_time < world.time) - var/turf/T - var/mob/living/simple_animal/M - for (var/i = 1; i <= 10; i++) - if (radius == -1) - T = pick_area_turf(area, list(/proc/not_turf_contains_dense_objects)) - - if (!T) //no open spaces to spawn on - T = pick_area_turf(area) - else - var/list/turfs = trange(radius, center) - T = pick(turfs) - - M = pick(mobs) - - if (!T.is_wall() && !T.density) - break - - if (T.is_wall() || T.density) - return - - M = new M(T) - - if (faction) - M.faction = faction - - if(atmos_immune) - M.min_gas = null - M.max_gas = null - M.minbodytemp = 0 - M.maxbodytemp = 5000 - - if (messages.len > 0) - if (message_class != "none") - M.visible_message("[pick(messages)]") - else - M.visible_message(pick(messages)) - - if (spawn_count > 0) - spawn_count-- - - if (spawn_count <= 0) - log_debug(append_admin_tools("Mob spawner at ([center.x], [center.y], [center.z]) finished spawning.", null, center)) - qdel(src) //delete spawner once we're done spawning mobs - - next_spawn_time = world.time + interval + rand(0, variation) - -/datum/mob_spawner/Destroy() - STOP_PROCESSING(SSprocessing, src) - - GLOB.mob_spawners.Remove(center) - - area = null - center = null - - mobs.Cut() - - . = ..() diff --git a/code/modules/admin/buildmode/_overlay.dm b/code/modules/admin/buildmode/_overlay.dm deleted file mode 100644 index 68dc6ab2d7675..0000000000000 --- a/code/modules/admin/buildmode/_overlay.dm +++ /dev/null @@ -1,56 +0,0 @@ -/datum/buildmode_overlay - var/list/display_atoms = list() - var/mob/user - var/datum/build_mode/buildmode - var/shown - var/size - -/datum/buildmode_overlay/New(mob/user, buildmode, icon_state) - src.user = user - src.buildmode = buildmode - size = user.client.view - if (!icon_state) - icon_state = "" - for (var/x = -size to size step 1) - for (var/y = -size to size step 1) - var/atom/movable/M = new - M.mouse_opacity = 0 - M.icon = 'icons/turf/overlays.dmi' - M.icon_state = icon_state - M.screen_loc = "CENTER[x < 0 ? "-" : "+"][abs(x)],CENTER[y < 0 ? "-" : "+"][abs(y)]" - M.appearance_flags = DEFAULT_APPEARANCE_FLAGS | KEEP_APART|RESET_COLOR|RESET_ALPHA|RESET_TRANSFORM|NO_CLIENT_COLOR|TILE_BOUND - display_atoms += M - . = ..() - -/datum/buildmode_overlay/Destroy() - Hide() - display_atoms = null - buildmode = null - user = null - . = ..() - -/datum/buildmode_overlay/proc/Show() - if (shown || QDELETED(user?.client)) - return - user.client.screen += display_atoms - shown = TRUE - -/datum/buildmode_overlay/proc/Hide() - if (!shown || QDELETED(user?.client)) - return - user.client.screen -= display_atoms - shown = FALSE - -/datum/buildmode_overlay/proc/TimerEvent() - if (!shown || QDELETED(buildmode) || QDELETED(user?.client)) - return - var/i = 1 - for (var/x = -size to size step 1) - for (var/y = -size to size step 1) - var/atom/movable/M = display_atoms[i++] - var/turf/T = locate(user.x + x, user.y + y, user.z) - if (T) - M.alpha = 255 - ImmediateInvokeAsync(buildmode, /datum/build_mode/.proc/UpdateOverlay, M, T) - else - M.alpha = 0 diff --git a/code/modules/admin/buildmode/ai.dm b/code/modules/admin/buildmode/ai.dm deleted file mode 100644 index 0073c1f03d338..0000000000000 --- a/code/modules/admin/buildmode/ai.dm +++ /dev/null @@ -1,284 +0,0 @@ -/datum/build_mode/ai - name = "AI Editor" - icon_state = "buildmode14" - var/list/selected_mobs = list() - var/list/overlayed_mobs = list() - var/copied_faction = null - var/datum/ai_holder/ai_type - var/icon/buildmode_hud = icon('icons/misc/buildmode.dmi') - var/help_text = {"\ - ***********************************************************
              \ - Left Mouse Button drag box + ctrl = Select only mobs in box
              \ - Left Mouse Button drag box + ctrl + shift = Select additional mobs in area
              \ - Left Mouse Button on non-mob = Deselect all mobs
              \ - Left Mouse Button on AI mob = Select/Deselect mob
              \ - Left Mouse Button + alt on AI mob = Toggle hostility on mob
              \ - Left Mouse Button + shift on AI mob = Toggle AI (also resets)
              \ - Left Mouse Button + ctrl on AI mob = Select units without deselecting existing ones
              \ - Right Mouse Button on build icon = Set AI type to give to mobs with alt + shift
              \ - Right Mouse Button + shift on any mob = Copy mob faction
              \ - Right Mouse Button + ctrl on any mob = Paste mob faction copied with Left Mouse Button + shift
              \ - Right Mouse Button on enemy mob = Command selected mobs to attack mob
              \ - Right Mouse Button on allied mob = Command selected mobs to follow mob
              \ - Right Mouse Buttons + alt + shift on any mob = Set a new AI type
              \ - Note: The following also reset the mob's home position:
              \ - Right Mouse Button on tile = Command selected mobs to move to tile (will cancel if enemies are seen)
              \ - Right Mouse Button + shift on tile = Command selected mobs to reposition to tile (will not be inturrupted by enemies)
              \ - Right Mouse Button + alt on obj/turfs = Command selected mobs to attack obj/turf
              \ - Middle Mouse Button = Command selected mobs to follow mob regardless of faction
              \ - ***********************************************************
              -"} - -/datum/build_mode/ai/Help() - to_chat(user, SPAN_NOTICE(help_text)) - -/datum/build_mode/ai/Configurate() - . = ..() - ai_type = select_subpath(ai_type || /datum/ai_holder, /datum/ai_holder) - to_chat(user, SPAN_NOTICE("AI Type selected: [ai_type]" )) - -/datum/build_mode/ai/Unselected() - . = ..() - - for (var/mob/M in selected_mobs) - deselect_AI_mob(M) - - for (var/mob/living/M in GLOB.living_mob_list_) - user.remove_client_image(M.ai_status_image) - -/datum/build_mode/ai/TimerEvent() - . = ..() - - if (!user) - return - - for (var/mob/living/M in GLOB.living_mob_list_) - if (M.ai_status_image) - user.add_client_image(M.ai_status_image) - -/datum/build_mode/ai/OnClick(atom/A, list/pa) - if (pa["left"]) - if (isliving(A)) - var/mob/living/L = A - var/datum/ai_holder/AI = L.ai_holder - - if (!AI) - return - - // Select multiple units - if (pa["ctrl"]) - if (!isnull(L.get_AI_stance())) - select_AI_mob(A) - return - - - // Pause/unpause AI - if (pa["shift"]) - var/stance = L.get_AI_stance() - if (!isnull(stance)) // Null means there's no AI datum or it has one but is player controlled w/o autopilot on. - if (stance == STANCE_SLEEP) - AI.go_wake() - to_chat(user, SPAN_NOTICE("\The [L]'s AI has been enabled.")) - else - AI.go_sleep() - to_chat(user, SPAN_NOTICE("\The [L]'s AI has been disabled.")) - - toggle_ai_status(L) - return - else - to_chat(user, SPAN_WARNING("\The [L] is not AI controlled.")) - return - - // Toggle hostility - if (pa["alt"]) - if (!isnull(L.get_AI_stance())) - AI.hostile = !AI.hostile - AI.lose_target() - to_chat(user, SPAN_NOTICE("\The [L] is now [AI.hostile ? "hostile" : "passive"].")) - else - to_chat(user, SPAN_WARNING("\The [L] is not AI controlled.")) - return - - - // Select/Deselect - if (!isnull(L.get_AI_stance())) - deselect_all() - select_AI_mob(L) - to_chat(user, SPAN_NOTICE("Selected \the [L].")) - return - else - to_chat(user, SPAN_WARNING("\The [L] is not AI controlled.")) - return - else //Not living - deselect_all() - - - if (pa["right"]) - - if (isliving(A)) - var/mob/living/L = A - - // Change/Set AI Holder - if (pa["alt"] && pa["shift"]) - if (!ai_type) - to_chat(user, SPAN_WARNING("No AI type selected.")) - return - if (!isnull(L.ai_holder)) - GLOB.stat_set_event.unregister(L, L.ai_holder, /datum/ai_holder/proc/holder_stat_change) - qdel(L.ai_holder) - L.ai_holder = new ai_type (L) - to_chat(user, SPAN_NOTICE("\The [L]'s AI type has been changed to [ai_type]")) - return - - // Copy faction - if (pa["shift"]) - copied_faction = L.faction - to_chat(user, SPAN_NOTICE("Copied faction '[copied_faction]'.")) - return - - // Paste faction - if (pa["ctrl"]) - if (!copied_faction) - to_chat(user, SPAN_WARNING("LMB+Shift a mob to copy their faction before pasting.")) - return - else - L.faction = copied_faction - to_chat(user, SPAN_NOTICE("Pasted faction '[copied_faction]'.")) - return - - - if (istype(A, /atom)) // Force attack. - if (pa["alt"]) - var/i = 0 - for(var/mob/living/unit in selected_mobs) - var/datum/ai_holder/AI = unit.ai_holder - AI.give_target(A) - i++ - to_chat(user, SPAN_NOTICE("Commanded [i] mob\s to attack \the [A].")) - var/image/orderimage = image(buildmode_hud,A,"ai_targetorder") - // orderimage.plane = PLANE_BUILDMODE - flick_overlay(orderimage, list(user.client), 8, TRUE) - return - - - var/turf/T = get_turf(A) - if (isturf(T)) // Move or reposition. - var/forced = 0 - var/told = 0 - for(var/mob/living/unit in selected_mobs) - var/datum/ai_holder/AI = unit.ai_holder - AI.lose_follow() - AI.home_turf = T - if (unit.get_AI_stance() == STANCE_SLEEP) - unit.forceMove(T) - forced++ - else - AI.give_destination(T, 0, pa["shift"]) // If shift is held, the mobs will not stop moving to attack a visible enemy. - told++ - to_chat(user, SPAN_NOTICE("Commanded [told] mob\s to move to \the [T], and manually placed [forced] of them.")) - var/image/orderimage = image(buildmode_hud,T,"ai_turforder") - flick_overlay(orderimage, list(user.client), 8, TRUE) - return - - if (pa["middle"]) - if(isliving(A)) // Follow or attack. - var/mob/living/L = A - var/i = 0 // Attacking mobs. - var/j = 0 // Following mobs. - for(var/mob/living/unit in selected_mobs) - var/datum/ai_holder/AI = unit.ai_holder - if (!AI) - return - if(L.IIsAlly(unit) || !AI.hostile || pa["shift"]) - AI.set_follow(L) - j++ - else - AI.give_target(L) - i++ - var/message = "Commanded " - if(i) - message += "[i] mob\s to attack \the [L]" - if(j) - message += ", and " - else - message += "." - if(j) - message += "[j] mob\s to follow \the [L]." - to_chat(user, SPAN_NOTICE(message)) - var/image/orderimage = image(buildmode_hud,L,"ai_targetorder") - flick_overlay(orderimage, list(user.client), 8, TRUE) - return - -/datum/build_mode/ai/proc/select_AI_mob(mob/living/unit) - selected_mobs += unit - user.client.images += unit.selected_image - GLOB.destroyed_event.register(unit, src, .proc/deselect_AI_mob) - -/datum/build_mode/ai/proc/deselect_AI_mob(mob/living/unit) - selected_mobs -= unit - - if (!user) - return - - user.client.images -= unit.selected_image - GLOB.destroyed_event.unregister(unit, src) - -/datum/build_mode/ai/proc/deselect_all() - for (var/mob/living/M in selected_mobs) - deselect_AI_mob(M) - -/datum/build_mode/ai/proc/is_selected(mob/living/unit) - if (unit in selected_mobs) - return TRUE - - return FALSE - -/datum/build_mode/ai/proc/toggle_ai_status(mob/living/unit) - - if (unit.ai_status_image) - user.remove_client_image(unit.ai_status_image) - QDEL_NULL(unit.ai_status_image) - - if (unit.has_AI()) - unit.ai_status_image = image('icons/misc/buildmode.dmi', unit, "ai_0") - user.add_client_image(unit.ai_status_image) - else - unit.ai_status_image = image('icons/misc/buildmode.dmi', unit, "ai_1") - user.add_client_image(unit.ai_status_image) - -/proc/build_drag(var/client/user, buildmode, var/atom/fromatom, var/atom/toatom, var/atom/fromloc, var/atom/toloc, var/fromcontrol, var/tocontrol, params) - if (!istype(buildmode, /datum/build_mode/ai)) - return - - var/datum/build_mode/ai/holder = buildmode - for(var/datum/build_mode/ai/H) - if(H.user == user) - holder = H - break - if(!holder) return - var/list/pa = params2list(params) - if (pa["ctrl"]) - //Holding shift prevents the deselection of existing - if(!pa["shift"]) - for(var/mob/living/unit in holder.selected_mobs) - holder.deselect_AI_mob(unit) - - var/turf/c1 = get_turf(fromatom) - var/turf/c2 = get_turf(toatom) - if(!c1 || !c2) - return //Dragged outside window or something - - var/low_x = min(c1.x,c2.x) - var/low_y = min(c1.y,c2.y) - var/hi_x = max(c1.x,c2.x) - var/hi_y = max(c1.y,c2.y) - var/z = c1.z - - for(var/mob/living/L in GLOB.living_mob_list_) - if(L.z != z || L.client) - continue - if(L.x >= low_x && L.x <= hi_x && L.y >= low_y && L.y <= hi_y) - if (L.ai_holder) - holder.select_AI_mob(L) - - return diff --git a/code/modules/admin/buildmode/areas.dm b/code/modules/admin/buildmode/areas.dm deleted file mode 100644 index 2f76880d2f071..0000000000000 --- a/code/modules/admin/buildmode/areas.dm +++ /dev/null @@ -1,130 +0,0 @@ -/datum/build_mode/areas - name = "Area Editor" - icon_state = "buildmode10" - var/help_text = {"\ -********* Build Mode: Areas ******** -Left Click - Set Turf Area -Left Click + Ctrl - Copy Turf Area -Middle Click - Copy Turf Area -Right Click - List/Create Area - -Create an area in a rectangle defined by two points: -Shift + Left Click - Select point A -Shift + Right Click - Select point B -************************************\ -"} - - var/area/selected_area - var/color_pool/colors - var/turf/coordinate_A - var/turf/coordinate_B - -/datum/build_mode/areas/Destroy() - UnselectArea() - Unselected() - . = ..() - -/datum/build_mode/areas/Help() - to_chat(user, SPAN_NOTICE(help_text)) - -/datum/build_mode/areas/Selected() - if (!overlay) - CreateOverlay("whiteOverlay") - colors = new - overlay.Show() - -/datum/build_mode/areas/Unselected() - if (overlay) - overlay.Hide() - QDEL_NULL(colors) - -/datum/build_mode/areas/UpdateOverlay(atom/movable/M, turf/T) - if (!overlay?.shown) - return - M.color = colors.get(T.loc) - -/datum/build_mode/areas/OnClick(var/atom/A, var/list/parameters) - if (parameters["right"] && !parameters["shift"]) - Configurate() - return - var/turf/T = get_turf(A) - var/area/R = T?.loc - if ((!T) || (!R)) - return - if (parameters["ctrl"] || parameters["middle"]) - selected_area = R - to_chat(user, "Picked area [selected_area.name]") - else if (selected_area) - - if (parameters["left"] && parameters["shift"]) - coordinate_A = get_turf(A) - to_chat(user, SPAN_NOTICE("Defined [coordinate_A] ([coordinate_A.type]) as point A.")) - - if (parameters["right"] && parameters["shift"]) - coordinate_B = get_turf(A) - to_chat(user, SPAN_NOTICE("Defined [coordinate_B] ([coordinate_B.type]) as point B.")) - - if (coordinate_A && coordinate_B) - to_chat(user, SPAN_NOTICE("Area coordinates set. Defining area.")) - Log("Created an area with name [selected_area] from [log_info_line(coordinate_A)] to [log_info_line(coordinate_B)]") - var/list/coords = make_rectangle(coordinate_A, coordinate_B) - make_area(coords[1], coords[2], coords[3], coords[4], coords[5], selected_area) - coordinate_A = null - coordinate_B = null - - - - ChangeArea(T, selected_area) - to_chat(user, "Set area of turf [T.name] to [selected_area.name]") - else - to_chat(user, "Pick or create an area first") - -/datum/build_mode/areas/Configurate() - var/mode = alert("Pick or Create an area.", "Build Mode: Areas", "Pick", "Create", "Cancel") - if (mode == "Pick") - var/area/path = select_subpath((selected_area?.type || /area/space), /area) - if (path) - for (var/area/R in world) - if (R.type == path) - SelectArea(R) - to_chat(user, "Picked area [selected_area.name]") - break - else if (mode == "Create") - var/new_name = input("New area name:", "Build Mode: Areas") as text|null - if (!new_name) - return - var/area/new_area = new - new_area.SetName(new_name) - new_area.power_equip = 0 - new_area.power_light = 0 - new_area.power_environ = 0 - new_area.always_unpowered = 0 - SelectArea(new_area) - user.client.debug_variables(selected_area) - to_chat(user, "Created area [new_area.name]") - -/datum/build_mode/areas/proc/SelectArea(var/area/A) - if(!A || A == selected_area) - return - UnselectArea() - selected_area = A - GLOB.destroyed_event.register(selected_area, src, .proc/UnselectArea) - -/datum/build_mode/areas/proc/UnselectArea() - if(!selected_area) - return - GLOB.destroyed_event.unregister(selected_area, src, .proc/UnselectArea) - - var/has_turf = FALSE - for(var/turf/T in selected_area) - has_turf = TRUE - break - if(!has_turf) - qdel(selected_area) - selected_area = null - -/datum/build_mode/areas/proc/make_area(low_bound_x, low_bound_y, high_bound_x, high_bound_y, z_level) - for(var/i = low_bound_x, i <= high_bound_x, i++) - for(var/j = low_bound_y, j <= high_bound_y, j++) - var/turf/T = locate(i, j, z_level) - ChangeArea(T, selected_area) diff --git a/code/modules/admin/buildmode/atmosphere.dm b/code/modules/admin/buildmode/atmosphere.dm deleted file mode 100644 index 74b0396c45a3b..0000000000000 --- a/code/modules/admin/buildmode/atmosphere.dm +++ /dev/null @@ -1,273 +0,0 @@ -#define MODE_AREA "AREA" -#define MODE_SINGLE "SINGLE" - -/datum/build_mode/atmosphere - name = "Atmosphere Editor" - icon_state = "buildmode13" - var/area/env_area - var/datum/gas_mixture/enviroment - var/atom/selected_object - var/list/valid_gases = list() - var/mode = MODE_AREA - var/simmed = TRUE - var/help_text = {"\ - ***** Build Mode: Atmosphere ****** - Left Click - Open atmosphere editor - - Modes: - AREA - Edits the atmosphere of all turfs in a selected a area. - SINGLE - Edits the atmosphere of a single object or turf. Works with containers (tanks, canisters, etc...) - - ************************************\ - "} - -/datum/build_mode/atmosphere/New() - . = ..() - valid_gases = gas_data.gases.Copy() - -/datum/build_mode/atmosphere/Help() - to_chat(user, SPAN_NOTICE(help_text)) - -/datum/build_mode/atmosphere/ui_interact(mob/user, ui_key = "atmosphere_editor", datum/nanoui/ui = null, force_open = 1, var/master_ui = null, var/datum/topic_state/state = GLOB.default_state) - . = ..() - - var/data[0] - data["total_moles"] = enviroment.total_moles - data["temperature"] = enviroment.temperature - data["volume_total"] = enviroment.volume - data["gases"] = enviroment.gas - data["mode"] = mode - - var/title = "" - switch (mode) - if (MODE_AREA) - title = "[env_area]" - if (MODE_SINGLE) - title = "[selected_object]" - - if (is_atmos_container(selected_object)) - title += "(CONTAINER)" - - data["title"] = title - - ui = SSnano.try_update_ui(user, src, ui_key, ui, data, force_open) - if (!ui) - ui = new(user, src, ui_key, "atmosphere_editor.tmpl", src.name, 425, 600, master_ui = master_ui, state = state) - ui.set_initial_data(data) - ui.open() - ui.set_auto_update(1) - -/datum/build_mode/atmosphere/CanUseTopic(mob/user) - if (!isadmin(user)) - return STATUS_CLOSE - return ..() - -/datum/build_mode/atmosphere/Topic(user, href_list) - var/list/atmospheres = list() - - switch (mode) - if (MODE_AREA) - if (ispath(env_area.base_turf, /turf/unsimulated)) - simmed = FALSE - atmospheres = get_area_turfs(env_area) - if (MODE_SINGLE) - if (istype(selected_object.loc, /turf/unsimulated)) - simmed = FALSE - atmospheres += selected_object - - if (href_list["change_mode"]) - var/new_mode = input("Change editor mode", "Change Mode") as null | anything in list(MODE_AREA, MODE_SINGLE) - - if (new_mode) - mode = new_mode - - return TOPIC_HANDLED - - if (href_list["temperature"]) - var/temp = input("Set Temperature (Kelvin)", "Temperature") as num | null - - if (!simmed) - for (var/turf/unsimulated/T in atmospheres) - T.temperature = temp - update_unsimmed_connections(T) - return - - if (!isnull(temp)) - for (var/turf/T in atmospheres) - var/datum/gas_mixture/G = T.return_air() - G.temperature = temp - G.update_values() - - - . = TOPIC_HANDLED - - if (href_list["moles_total"]) - var/moles = input("Add/Subtract Moles", "Moles") as num | null - - if (!simmed) - for (var/turf/unsimulated/T in atmospheres) - var/new_moles = T.initial_gas.len / moles - - for (var/gas in T.initial_gas) - T.initial_gas[gas] = new_moles - - update_unsimmed_connections(T) - return - - if (!isnull(moles)) - for (var/turf/T in atmospheres) - var/datum/gas_mixture/G = T.return_air() - for (var/g in G.gas) - G.adjust_gas(g, moles) - - . = TOPIC_HANDLED - - if (href_list["modify_gas"]) - var/gas_id = href_list["modify_gas"] - var/moles = input("Set [gas_id]'s Mole Count]", "Moles") as num | null - - if (!simmed) - for (var/turf/unsimulated/T in atmospheres) - T.initial_gas[gas_id] = moles - update_unsimmed_connections(T) - return - - if (!isnull(moles)) - for (var/turf/T in atmospheres) - var/datum/gas_mixture/G = T.return_air() - var/list/gases = G.gas - - gases[gas_id] = moles - G.update_values() - - . = TOPIC_HANDLED - - if (href_list["add_gas"]) - var/gas = input("Add a gas", "Gas") as null | anything in valid_gases - - if (gas) - var/moles = input("How many moles?", "Moles") as num | null - - if (!simmed) - for (var/turf/unsimulated/T in atmospheres) - T.initial_gas[gas] = moles - update_unsimmed_connections(T) - return - - if (moles) - for (var/turf/T in atmospheres) - var/datum/gas_mixture/G = T.return_air() - G.gas[gas] = moles - G.update_values() - - . = TOPIC_HANDLED - - if (href_list["remove_gas"]) - var/gas = input("Remove a gas from the mix", "Remove Gas") as null | anything in enviroment.gas - - if (gas) - if (!simmed) - for (var/turf/unsimulated/T in atmospheres) - T.initial_gas[gas] = 0 - update_unsimmed_connections(T) - return - - for (var/turf/T in atmospheres) - var/datum/gas_mixture/G = T.return_air() - G.gas[gas] = 0 - G.update_values() - - . = TOPIC_HANDLED - - if (href_list["set_predefined_atmos"]) - var/option = href_list["set_predefined_atmos"] - var/list/gasses = list() - var/temperature - - if (option == "o2n2_standard") - gasses = list(GAS_OXYGEN = MOLES_O2STANDARD, GAS_NITROGEN = MOLES_N2STANDARD) - temperature = 294 - - if (!simmed) - for (var/turf/unsimulated/T in atmospheres) - T.initial_gas = gasses - T.temperature = temperature - update_unsimmed_connections(T) - return - - if (length(gasses)) - for (var/turf/T in atmospheres) - var/datum/gas_mixture/G = T.return_air() - for (var/gas in G.gas) - G.gas[gas] = 0 - - for (var/turf/T in atmospheres) - var/datum/gas_mixture/G = T.return_air() - for (var/new_gas in gasses) - G.gas = gasses.Copy() - G.adjust_gas_temp(new_gas, gasses[new_gas], temperature) - - . = TOPIC_HANDLED - - if (mode == MODE_AREA && env_area.planetary_surface) - //exoplanets will slowly reset their atmosphere to default if we don't update it - var/obj/effect/overmap/visitable/sector/exoplanet/E = map_sectors["[env_area.z]"] - if (istype(E)) - E.atmosphere.gas = enviroment.gas.Copy() - E.atmosphere.temperature = enviroment.temperature - -/datum/build_mode/atmosphere/OnClick(atom/object, list/pa) - selected_object = object - env_area = get_area(object) - - switch (mode) - if (MODE_AREA) - var/turf/T = get_turf(object) - enviroment = T.return_air() - if (MODE_SINGLE) - enviroment = object.return_air() - - ui_interact(user) - -/datum/build_mode/atmosphere/proc/is_atmos_container(atom/object) - var/list/container_types = list( - /obj/item/tank, - /obj/item/latexballon, - /obj/machinery/portable_atmospherics, - /obj/machinery/atmospherics/unary - ) - - for (var/type in container_types) - if (istype(object, type)) - return TRUE - - return FALSE - -/datum/build_mode/atmosphere/proc/update_unsimmed_connections(turf/unsimulated/T) - if (T.connections) - var/connection_manager/manager = T.connections - - if (manager.N) - set_zone_update(manager.N) - - if (manager.S) - set_zone_update(manager.S) - - if (manager.E) - set_zone_update(manager.E) - - if (manager.W) - set_zone_update(manager.W) - - if (manager.U) - set_zone_update(manager.U) - - if (manager.D) - set_zone_update(manager.D) - - manager.update_all() - - -/datum/build_mode/atmosphere/proc/set_zone_update(connection/C) - C.zoneA = null - C.zoneB = null diff --git a/code/modules/admin/buildmode/build.dm b/code/modules/admin/buildmode/build.dm deleted file mode 100644 index b8854e6e9e41a..0000000000000 --- a/code/modules/admin/buildmode/build.dm +++ /dev/null @@ -1,81 +0,0 @@ -/datum/build_mode/build - the_default = TRUE - name = "Build Mode" - icon_state = "mode_build" - var/static/help_text = {"\ - ***********Build Mode*********** - Left Click = Create Atom - Right Click = Delete Atom - Middle Click = Copy Atom Path - Left Click + Ctrl = Copy Atom Path - Right Click on Mode Button = Choose Path Dialog - Directional Arrow Button = Direction On Creation - ******************************** - "} - var/build_type - -/datum/build_mode/build/Help() - to_chat(user, help_text) - -/datum/build_mode/build/Configurate() - build_type = select_subpath(build_type || /obj/item/latexballon) - to_chat(user, "Selected Type [build_type]") - -/datum/build_mode/build/OnClick(atom/target, list/parameters) - if (!target) - return - if (parameters["middle"] || parameters["ctrl"] && parameters["left"]) - if (ispath(target.type, /atom)) - to_chat(user, "Selected Type [target.type]") - build_type = target.type - return - var/turf/location = get_turf(target) - if (parameters["right"]) - if (isturf(target)) - return - if (isobserver(target)) // don't delete ghosts because it causes very weird things to happen - return - if (ismob(target)) - var/mob/M = target - if (M.ckey && !QDELETED(M)) - var/alert_result = alert(user, "[M] is a player-controlled mob. Confirm?", "Build Mode", "Yes, Delete", "Cancel") - if (alert_result != "Yes, Delete" || QDELETED(M)) - return - to_chat(M, SPAN_DEBUG(FONT_LARGE("OOC: You have been deleted by an admin using build mode. If this seems to be in error, please adminhelp and let them know."))) - M.ghostize() - qdel(target) - else if (parameters["left"]) - if (!build_type) - to_chat(user, SPAN_WARNING("Select a type to construct.")) - return - if (!location) - return - else if (ispath(build_type, /turf)) - location.ChangeTurf(build_type) - else if (ispath(build_type, /area)) - to_chat(user, SPAN_WARNING("Do not use this to create or modify areas. Use the Area build mode category instead.")) - return - else - var/atom/instance = new build_type (location) - instance.set_dir(host.dir) - -/datum/build_mode/build/CanUseTopic(mob/user) - if (!isadmin(user)) - return STATUS_CLOSE - return ..() - -/datum/build_mode/build/Topic(href, list/href_list) - if (!length(href_list)) - return - if (href_list["jump"]) - var/turf/location = locate(href_list["jump"]) - if (!location) - return - if (!isghost(user)) - var/client/user_client = user.client - if (!user_client) - return - user_client.admin_ghost() - user_client.mob.jumpTo(location) - else - user.jumpTo(location) diff --git a/code/modules/admin/buildmode/edit.dm b/code/modules/admin/buildmode/edit.dm deleted file mode 100644 index 32c61441953af..0000000000000 --- a/code/modules/admin/buildmode/edit.dm +++ /dev/null @@ -1,78 +0,0 @@ -/datum/build_mode/edit - name = "Edit" - icon_state = "buildmode3" - var/static/help_text = {"\ - ***********Edit Mode*********** - Right Click on Mode Button = Select var & value - Left Click on Atom = Set the var on the atom - Right Click on Atom = Reset (initial) the var on the atom - ******************************* - "} - var/var_to_edit = "name" - var/value_to_set = "derp" - - -/datum/build_mode/edit/Destroy() - ClearValue() - . = ..() - - -/datum/build_mode/edit/Help() - to_chat(user, help_text) - - -/datum/build_mode/edit/Configurate() - var/var_name = input("Enter variable name:", "Name", var_to_edit) as null | text - if (!var_name) - return - var/var_type = input("Select variable type:", "Type") as null | anything in list("text", "number", "mob-reference", "obj-reference", "turf-reference") - if (isnull(var_type)) - return - var/new_value - switch (var_type) - if ("text") - new_value = input(usr, "Enter variable value:", "Value", value_to_set) as null | text - if ("number") - new_value = input(usr, "Enter variable value:", "Value", value_to_set) as null | num - if ("mob-reference") - new_value = input(usr, "Enter variable value:", "Value", value_to_set) as null | mob in SSmobs.mob_list - if ("obj-reference") - new_value = input(usr, "Enter variable value:", "Value", value_to_set) as null | obj in world - if ("turf-reference") - new_value = input(usr, "Enter variable value:", "Value", value_to_set) as null | turf in world - if (var_name && new_value) - var_to_edit = var_name - SetValue(new_value) - - -/datum/build_mode/edit/OnClick(atom/A, list/parameters) - if (!A.may_edit_var(usr, var_to_edit)) - return - var/old_value = A.vars[var_to_edit] - var/new_value - if (parameters["left"]) - new_value = value_to_set - if (parameters["right"]) - new_value = initial(A.vars[var_to_edit]) - if (old_value == new_value) - return - A.vars[var_to_edit] = new_value - to_chat(user, "Changed the value of [var_to_edit] from '[old_value]' to '[new_value]'.") - Log("[log_info_line(A)] - [var_to_edit] - [old_value] -> [new_value]") - - -/datum/build_mode/edit/proc/SetValue(new_value) - if (value_to_set == new_value) - return - ClearValue() - value_to_set = new_value - GLOB.destroyed_event.register(value_to_set, src, /datum/build_mode/edit/proc/ClearValue) - - -/datum/build_mode/edit/proc/ClearValue(feedback) - if (!istype(value_to_set, /datum)) - return - GLOB.destroyed_event.unregister(value_to_set, src, /datum/build_mode/edit/proc/ClearValue) - value_to_set = initial(value_to_set) - if (feedback) - Warn("The selected reference value was deleted. Default value restored.") diff --git a/code/modules/admin/buildmode/ladders.dm b/code/modules/admin/buildmode/ladders.dm deleted file mode 100644 index 76cc13645cbca..0000000000000 --- a/code/modules/admin/buildmode/ladders.dm +++ /dev/null @@ -1,29 +0,0 @@ -/datum/build_mode/ladders - name = "Ladders" - icon_state = "buildmode6" - var/turf/ladder_upper - var/turf/ladder_lower - -/datum/build_mode/ladders/Help() - to_chat(user, "***********************************************************") - to_chat(user, "Left Click on Turf = Set as upper ladder loc") - to_chat(user, "Right Click on Turf = Set as lower ladder loc") - to_chat(user, "As soon as both points have been selected, the ladder is created.") - to_chat(user, "***********************************************************") - -/datum/build_mode/ladders/OnClick(var/atom/A, var/list/parameters) - if(parameters["left"]) - ladder_upper = get_turf(A) - to_chat(user, "Defined [ladder_upper] ([ladder_upper.type]) as the upper ladder location.") - if(parameters["right"]) - ladder_lower = get_turf(A) - to_chat(user, "Defined [ladder_lower] ([ladder_lower.type]) as the lower ladder location.") - if(ladder_upper && ladder_lower) - to_chat(user, "Ladder locations set, building ladders.") - Log("Created a ladder between '[log_info_line(ladder_upper)]' and '[log_info_line(ladder_lower)]'.") - var/obj/structure/ladder/upper = new /obj/structure/ladder(ladder_upper) - var/obj/structure/ladder/lower = new /obj/structure/ladder/up(ladder_lower) - upper.target_down = lower - lower.target_up = upper - ladder_upper = null - ladder_lower = null diff --git a/code/modules/admin/buildmode/light_maker.dm b/code/modules/admin/buildmode/light_maker.dm deleted file mode 100644 index 17aa6ec6a034a..0000000000000 --- a/code/modules/admin/buildmode/light_maker.dm +++ /dev/null @@ -1,39 +0,0 @@ -/datum/build_mode/light_maker - name = "Light Maker" - icon_state = "buildmode8" - - var/light_outer_range = 3 - var/light_max_bright = 3 - var/light_color = COLOR_WHITE - -/datum/build_mode/light_maker/Help() - to_chat(usr, "***********************************************************") - to_chat(usr, "Left Click = Make it glow") - to_chat(usr, "Right Click = Reset glow") - to_chat(usr, "Right Click on Build Mode Button = Change glow properties") - to_chat(usr, "***********************************************************") - -/datum/build_mode/light_maker/Configurate() - var/choice = alert("Change the new light range, power, or color?", "Light Maker", "Range", "Power", "Color", "Cancel") - switch(choice) - if("Range") - var/input = input("New light range.", name, light_outer_range) as null|num - if(input) - light_outer_range = input - if("Power") - var/input = input("New light power, from 0.1 to 1 in decimal increments.", name, light_max_bright) as null|num - if(input) - input = clamp(input, 0.1, 1) - light_max_bright = input - if("Color") - var/input = input("New light color.", name, light_color) as null|color - if(input) - light_color = input - -/datum/build_mode/light_maker/OnClick(var/atom/A, var/list/parameters) - if(parameters["left"]) - if(A) - A.set_light(light_max_bright, 0.1, light_outer_range, l_color = light_color) - if(parameters["right"]) - if(A) - A.set_light(0, 0, 0, l_color = COLOR_WHITE) diff --git a/code/modules/admin/buildmode/meteor.dm b/code/modules/admin/buildmode/meteor.dm deleted file mode 100644 index 3f493f7b65f7f..0000000000000 --- a/code/modules/admin/buildmode/meteor.dm +++ /dev/null @@ -1,74 +0,0 @@ -/datum/build_mode/meteor - name = "Meteors" - icon_state = "buildmode16" - var/turf/entrance = null - var/turf/exit = null - var/list/meteors = list() - var/turf/spawn_point = null - var/help_text = {"\ -********* Build Mode: Areas ******** -Left Click - Set spawn point for a meteor -Left Click Again - Set direction of meteor AND spawn it -Right Click Icon - Change meteor types - -When a meteor is spawned, its type is randomly chosen from the list. The list must contain at least one meteor type. -************************************\ -"} - -/datum/build_mode/meteor/Help() - to_chat(user, SPAN_NOTICE(help_text)) - -/datum/build_mode/meteor/Configurate() - var/choice = alert("Add or remove a meteor type from the list?", "Add/Remove", "Add", "Remove", "Cancel") - - if (choice == "Add") - var/obj/effect/meteor/M = select_subpath(/obj/effect/meteor) - - if (M) - meteors += M - to_chat(user, "Added [M] to the list of meteor types.") - - if (choice == "Remove") - var/obj/effect/meteor/M = input("Choose a meteor type to remove", "Meteor List") as null | anything in meteors - if (M) - meteors -= M - to_chat(user, "Removed [M] from the list of meteor types.") - -/datum/build_mode/meteor/OnClick(atom/A, list/parameters) - if (parameters["left"]) - if (!length(meteors)) - to_chat(user, SPAN_NOTICE("You must specify at least one meteor type to spawn first!")) - return - var/turf/T = get_turf(A) - - if (!T) - to_chat(user, SPAN_NOTICE("Could not get turf at this location!")) - return - - if (!spawn_point) - spawn_point = T - - - to_chat(user, SPAN_NOTICE("Spawn point set. Click again to set direction.")) - return - - var/dir = get_dir(spawn_point, get_turf(A)) - - if (dir) - spawn_meteor(dir) - spawn_point = null - return - - else if (parameters["right"]) - entrance = null - exit = null - to_chat(user, SPAN_NOTICE("Selection cancelled.")) - - -/datum/build_mode/meteor/proc/spawn_meteor(direction) - set waitfor = FALSE - - var/Me = pickweight(meteors) - var/obj/effect/meteor/M = new Me(spawn_point) - var/turf/edge = get_edge_target_turf(spawn_point, direction) - walk_towards(M, edge, 3) diff --git a/code/modules/admin/buildmode/mob_spawning.dm b/code/modules/admin/buildmode/mob_spawning.dm deleted file mode 100644 index e48c93172bf35..0000000000000 --- a/code/modules/admin/buildmode/mob_spawning.dm +++ /dev/null @@ -1,278 +0,0 @@ -GLOBAL_LIST_INIT(mob_spawners, list()) - -/datum/build_mode/mob_mode - name = "Mob Spawning" - icon_state = "buildmode11" - var/area/current_area - var/turf/current_turf - var/turf/center - var/list/copied_spawner = list() - var/color_pool/colors - var/help_text = {"\ - ***** Build Mode: Mob Spawner ****** - Left Click - Create/Edit Spawner - Left Click + Ctrl - Copy Spawner - Right Click - Delete Spawner - Right Click + Ctrl - Paste Spawner - - Definitions: - Interval: The interval mobs will spawn on (in seconds) - Variation: Adds a random number of seconds to the interval for each mob spawn, in the range of 0 - Variation. - Left to spawn: How many mobs will be spawned by the spawner. (set to 0 to spawn mobs indefinitely). - Radius: The radius in which mobs can spawn from around the designated center, (set to -1 to spawn anywhere in area). - Faction: The faction the mob will have. 'X' will reset the faction to default. - Mobs: List of mobs the spawner will randomly choose from when spawning a mob. - Messages: List of visible messages that will be displayed to players who see a mob spawned. - ************************************\ - "} - -/datum/build_mode/mob_mode/Destroy() - Unselected() - . = ..() - -/datum/build_mode/mob_mode/Selected() - if (!overlay) - CreateOverlay("whiteOverlay") - colors = new - overlay.Show() - -/datum/build_mode/mob_mode/Unselected() - if (overlay) - overlay.Hide() - QDEL_NULL(colors) - -/datum/build_mode/mob_mode/UpdateOverlay(atom/movable/M, turf/T) - if (!overlay?.shown) - return - var/spawner = GLOB.mob_spawners[T] - if (spawner) - M.color = colors.get(spawner) - M.alpha = spawner ? 255 : 0 - -/datum/build_mode/mob_mode/Help() - to_chat(user, SPAN_NOTICE(help_text)) - -/datum/build_mode/mob_mode/ui_interact(mob/user, ui_key = "mob_spawner", datum/nanoui/ui = null, force_open = 1, var/master_ui = null, var/datum/topic_state/state = GLOB.default_state) - . = ..() - - if (!current_turf || !current_area) - to_chat(user, SPAN_WARNING("Could not get an area and/or turf from the selected atom!")) - return - - var/datum/mob_spawner/spawner = GLOB.mob_spawners[current_turf] - - if (!spawner) - if (ui) - ui.close() - return - - var/data[0] - data["area"] = current_area - data["area_name"] = current_area.name - data["mobs"] = spawner.mobs - data["messages"] = spawner.messages - data["message_class"] = spawner.message_class - data["interval"] = spawner.interval - data["variation"] = spawner.variation - data["radius"] = spawner.radius - data["atmos_immune"] = spawner.atmos_immune - data["faction"] = spawner.faction - data["spawn_count"] = spawner.spawn_count - data["paused"] = spawner.paused - - - ui = SSnano.try_update_ui(user, src, ui_key, ui, data, force_open) - if(!ui) - ui = new(user, src, ui_key, "mob_mode.tmpl", src.name, 425, 600, master_ui = master_ui, state = state) - ui.set_initial_data(data) - ui.open() - ui.set_auto_update(1) - -/datum/build_mode/mob_mode/CanUseTopic(mob/user) - if (!isadmin(user)) - return STATUS_CLOSE - return ..() - -/datum/build_mode/mob_mode/Topic(user, href_list) - ..() - var/datum/mob_spawner/spawner = GLOB.mob_spawners[current_turf] - - if (!spawner) - return TOPIC_HANDLED - - if (href_list["pick"]) - var/type = input("Search for a mob", "Mob") as text - var/list/types = typesof(/mob/living/simple_animal) - var/list/matches = new() - - for (var/M in types) - if (findtext("[M]", type)) - matches += M - - if (matches.len) - var/mob/living/simple_animal/chosen - chosen = input("Choose a mob", "Mob") as null | anything in matches - - if (chosen && !(chosen in spawner.mobs)) - spawner.mobs |= chosen - - return TOPIC_HANDLED - - if (href_list["remove"]) - var/chosen = input("Choose mob to remove", "Mob") as null | anything in spawner.mobs - - if (chosen) - spawner.mobs -= chosen - - return TOPIC_HANDLED - - if (href_list["set_spawn_count"]) - var/count = input("Set how many mobs will spawn:", "Mob Spawner") as num | null - - if (!isnull(count)) - spawner.spawn_count = count - - return TOPIC_HANDLED - - if (href_list["set_spawn_interval"]) - var/count = input("Set the interval mobs spawn on (in seconds):", "Mob Spawner") as num | null - - if (!isnull(count)) - spawner.interval = count SECONDS - spawner.next_spawn_time = 0 - - return TOPIC_HANDLED - - if (href_list["set_spawn_time_variation"]) - var/count = input("Set the random max variation of the spawn interval:", "Mob Spawner") as num | null - - if (count) - spawner.variation = count SECONDS - - return TOPIC_HANDLED - - if (href_list["set_radius"]) - var/radius = input("Set the radius mobs can spawn in:", "Mob Spawner") as num | null - - if (!isnull(radius)) - spawner.radius = radius - - return TOPIC_HANDLED - - if (href_list["atmos_immune"]) - spawner.atmos_immune = !spawner.atmos_immune - - return TOPIC_HANDLED - - if (href_list["set_faction"]) - - if (href_list["set_faction"] == "reset") - spawner.faction = null - - return TOPIC_HANDLED - - var/faction = input("Enter a faction name, leave blank to set it to default", "Mob Spawner") as text | null - - if (faction) - spawner.faction = faction - - return TOPIC_HANDLED - - if (href_list["add_message"]) - var/message = input("Enter a VISIBLE message to display alongside spawning mobs:", "Mob Spawner") as text | null - - if (message) - spawner.messages += message - - return TOPIC_HANDLED - - if (href_list["remove_message"]) - var/message = input("Choose a message to remove:", "Mob Spawner") as null | anything in spawner.messages - - if (message) - spawner.messages -= message - - return TOPIC_HANDLED - - if (href_list["set_span_class"]) - var/list/classes = list( - "italic", - "bold", - "notice", - "warn", - "danger", - "occult", - "mfauna", - "subtle", - "info", - "none" - ) - - var/class = input("Pick a span-class to be applied to the spawn message:", "Mob Spawner") as null | anything in classes - - if (class) - spawner.message_class = class - - return TOPIC_HANDLED - - if (href_list["pause"]) - spawner.paused = !spawner.paused - - if (spawner.paused) - STOP_PROCESSING(SSprocessing, spawner) - else - START_PROCESSING(SSprocessing, spawner) - - return TOPIC_HANDLED - - if (href_list["delete"]) - var/datum/nanoui/ui = SSnano.try_update_ui(user, src, "mob_spawner", null) - if (ui) - ui.close() - - qdel(GLOB.mob_spawners[current_turf]) - - return TOPIC_HANDLED - -/datum/build_mode/mob_mode/OnClick(atom/object, list/pa) - current_area = get_area(object) - current_turf = get_turf(object) - - if(!current_area) - to_chat(user, SPAN_WARNING("Selected atom is not in an area, a spawner cannot be put here!")) - return - - if(!current_turf) - to_chat(user, SPAN_WARNING("That atom does not have a turf!")) - return - - var/datum/mob_spawner/spawner = GLOB.mob_spawners[current_turf] - - if (!spawner) - spawner = new /datum/mob_spawner - spawner.area = current_area - GLOB.mob_spawners[current_turf] = spawner - - spawner.center = current_turf - to_chat(user, "Spawner created in [current_area].") - - if (pa["ctrl"]) - if (pa["left"]) - copied_spawner = spawner.copy() - to_chat(user, "Spawner from area [current_area] copied.") - - else if (pa["right"]) - if (copied_spawner.len == 0) - to_chat(user, SPAN_WARNING("No spawner copied, cannot paste settings!")) - return - - spawner.paste(copied_spawner) - to_chat(user, "Spawner pasted in area [current_area].") - - else if (pa["left"]) - ui_interact(user) - - else if (pa["right"]) - if (spawner) - QDEL_NULL(spawner) - to_chat(user, "Deleted spawner in [current_area].") diff --git a/code/modules/admin/buildmode/move_into.dm b/code/modules/admin/buildmode/move_into.dm deleted file mode 100644 index 00d6eb647839f..0000000000000 --- a/code/modules/admin/buildmode/move_into.dm +++ /dev/null @@ -1,46 +0,0 @@ -/datum/build_mode/move_into - name = "Move Into" - icon_state = "buildmode7" - - var/atom/destination - -/datum/build_mode/move_into/Destroy() - ClearDestination() - . = ..() - -/datum/build_mode/move_into/Help() - to_chat(user, "***********************************************************") - to_chat(user, "Left Click = Select destination") - to_chat(user, "Right Click on Movable Atom = Move target into destination") - to_chat(user, "***********************************************************") - -/datum/build_mode/move_into/OnClick(var/atom/movable/A, var/list/parameters) - if(parameters["left"]) - SetDestination(A) - if(parameters["right"]) - if(!destination) - to_chat(user, "No target destination.") - else if(!ismovable(A)) - to_chat(user, "\The [A] must be of type /atom/movable.") - else - to_chat(user, "Moved \the [A] into \the [destination].") - Log("Moved '[log_info_line(A)]' into '[log_info_line(destination)]'.") - A.forceMove(destination) - -/datum/build_mode/move_into/proc/SetDestination(var/atom/A) - if(A == destination) - return - ClearDestination() - - destination = A - GLOB.destroyed_event.register(destination, src, /datum/build_mode/move_into/proc/ClearDestination) - to_chat(user, "Will now move targets into \the [destination].") - -/datum/build_mode/move_into/proc/ClearDestination(var/feedback) - if(!destination) - return - - GLOB.destroyed_event.unregister(destination, src, /datum/build_mode/move_into/proc/ClearDestination) - destination = null - if(feedback) - Warn("The selected destination was deleted.") diff --git a/code/modules/admin/buildmode/paint.dm b/code/modules/admin/buildmode/paint.dm deleted file mode 100644 index a40bc1d9af5e3..0000000000000 --- a/code/modules/admin/buildmode/paint.dm +++ /dev/null @@ -1,69 +0,0 @@ -/datum/build_mode/paint - name = "Painter" - icon_state = "mode_paint" - /// Hex code. The selected color to paint with. - var/selected_color - - -/datum/build_mode/paint/Help() - to_chat(user, SPAN_NOTICE({"\ - Paint mode allows you to easily set colors of atoms and turfs.
              \ - - Left Mouse Button On Atom = Paint selected atom with saved color
              \ - - Left Click + Shift OR Right Click = Set selected atom to default color
              \ - - Left Mouse Button On Atom + Ctrl = Copy selected atom's current color
              \ - To manually set a color, right click on the 'PAINT' build mode icon. - "})) - - -/datum/build_mode/paint/Configurate() - var/new_color = input(user, "Please select the color to use.", "Paint Mode Color") as color|null - if (!new_color) - return - selected_color = new_color - to_chat(user, SPAN_NOTICE("Color set to [selected_color].")) - - -/datum/build_mode/paint/OnClick(atom/A, list/parameters) - var/result - if (parameters["left"]) - if (parameters["shift"]) - result = clear_color(A) - - else if (parameters["ctrl"]) - result = clone_color(A) - if (!result) - to_chat(user, SPAN_NOTICE("Selected paint mode color is now [selected_color].")) - return - - else - result = set_color(A) - - else if (parameters["right"]) - result = clear_color(A) - - if (result) - to_chat(user, SPAN_WARNING("Paint mode operation failed: [result]")) - - - -/datum/build_mode/paint/proc/clear_color(atom/A) - if (!A) - return "Invalid atom." - A.set_color() - - -/datum/build_mode/paint/proc/clone_color(atom/A) - if (!A) - return "Invalid atom." - var/new_color = A.get_color() - if (!new_color) - return "\The [A] has no color to clone." - selected_color = new_color - - -/datum/build_mode/paint/proc/set_color(atom/A) - if (!A) - return "Invalid atom." - if (!selected_color) - return "No selected color to paint with. If you wish to remove the color, use RIGHTCLICK or SHIFT+LEFTCLICK." - A.set_color(selected_color) diff --git a/code/modules/admin/buildmode/portals.dm b/code/modules/admin/buildmode/portals.dm deleted file mode 100644 index 69ff9b97e0250..0000000000000 --- a/code/modules/admin/buildmode/portals.dm +++ /dev/null @@ -1,62 +0,0 @@ -/datum/build_mode/portals - name = "Portals" - icon_state = "buildmode12" - var/turf/entrance = null - var/turf/exit = null - var/list/portals = list() - var/help_text = {"\ -********* Build Mode: Areas ******** -Left Click - Set portal entry/exit points -Left Click + Ctrl - Delete portal -Right Click - Remove selected entry/exit points -Right Click + Ctrl - Delete all portals -************************************\ -"} - -/datum/build_mode/portals/OnClick(atom/A, list/parameters) - if (parameters["ctrl"]) - if (parameters["left"]) - if (istype(A, /obj/effect/portal) && (A in portals)) - qdel(A) - to_chat(user, SPAN_NOTICE("Portal deleted.")) - else if (parameters["right"]) - var/choice = alert("Delete all active portals?", "Delete All", "Yes", "No") - - if (choice == "Yes") - for (var/obj/effect/portal/P in portals) - qdel(P) - portals.Cut() - else if (parameters["left"]) - if (!entrance) - entrance = get_turf(A) - to_chat(user, SPAN_NOTICE("Entrance turf selected: [entrance]")) - - else if (!exit) - exit = get_turf(A) - to_chat(user, SPAN_NOTICE("Exit turf selected: [exit]")) - var/choice = alert("Portal turfs selected. Create the portal now?", "Create Portal?", "Yes", "No") - if (choice == "No") - entrance = null - exit = null - return - - var/name = input("Give the portal object a name (optional):", "Name") as text | null - if(!name) - name = "wormhole" - - var/ttl = input("How long should the portal exist for?" , "Time To Live", 0) as num | null - - if (isnull(ttl) || ttl < 0) - ttl = rand(30, 60) - ttl = ttl SECONDS - - var/obj/effect/portal/P = new /obj/effect/portal(entrance, exit, ttl) - P.SetName(name) - portals += P - - entrance = null - exit = null - else if (parameters["right"]) - entrance = null - exit = null - to_chat(user, SPAN_NOTICE("Selection cancelled.")) diff --git a/code/modules/admin/buildmode/radiation.dm b/code/modules/admin/buildmode/radiation.dm deleted file mode 100644 index 418c9da7339cd..0000000000000 --- a/code/modules/admin/buildmode/radiation.dm +++ /dev/null @@ -1,42 +0,0 @@ -/datum/build_mode/radiation - name = "Radiation" - icon_state = "mode_radiation" - var/help_text = {" -Build Mode: Radiation - Visualizer for radiation sources & affected turfs. -"} - - -/datum/build_mode/radiation/Destroy() - Unselected() - . = ..() - - -/datum/build_mode/radiation/Help() - to_chat(user, SPAN_NOTICE(help_text)) - - -/datum/build_mode/radiation/Selected() - if (!overlay) - CreateOverlay() - overlay.Show() - - -/datum/build_mode/radiation/Unselected() - if (overlay) - overlay.Hide() - - -/datum/build_mode/radiation/UpdateOverlay(atom/movable/M, turf/T) - if (!overlay?.shown) - return - var/datum/radiation_source/R = SSradiation.sources_assoc[T] - var/rads = SSradiation.get_rads_at_turf(T) - if (rads) - rads = min(round(log(2, max(rads*0.4, 2))), 8) - if (R) - M.icon_state = "bm_rads_source" - else if (rads) - M.icon_state = "bm_rads_str_[rads]" - else - M.icon_state = "" - diff --git a/code/modules/admin/buildmode/relocate_to.dm b/code/modules/admin/buildmode/relocate_to.dm deleted file mode 100644 index dd275d7cc1f03..0000000000000 --- a/code/modules/admin/buildmode/relocate_to.dm +++ /dev/null @@ -1,47 +0,0 @@ -/datum/build_mode/relocate_to - name = "Relocate To" - icon_state = "buildmode9" - var/atom/movable/to_relocate - -/datum/build_mode/relocate_to/Destroy() - ClearRelocator() - . = ..() - -/datum/build_mode/relocate_to/Help() - to_chat(user, "***********************************************************") - to_chat(user, "Left Click on Movable Atom = Select object to be relocated") - to_chat(user, "Right Click on Turf = Destination to be relocated to") - to_chat(user, "***********************************************************") - -/datum/build_mode/relocate_to/OnClick(var/atom/A, var/list/parameters) - if(parameters["left"]) - if(istype(A, /atom/movable)) - SetRelocator(A) - else if(parameters["right"]) - if(to_relocate) - var/destination_turf = get_turf(A) - if(destination_turf) - to_relocate.forceMove(destination_turf) - Log("Relocated '[log_info_line(to_relocate)]' to '[log_info_line(destination_turf)]'") - else - to_chat(user, "Unable to locate destination turf.") - else - to_chat(user, "You have nothing selected to relocate.") - -/datum/build_mode/relocate_to/proc/SetRelocator(var/new_relocator) - if(to_relocate == new_relocator) - return - ClearRelocator() - - to_relocate = new_relocator - GLOB.destroyed_event.register(to_relocate, src, /datum/build_mode/relocate_to/proc/ClearRelocator) - to_chat(user, "Will now be relocating \the [to_relocate].") - -/datum/build_mode/relocate_to/proc/ClearRelocator(var/feedback) - if(!to_relocate) - return - - GLOB.destroyed_event.unregister(to_relocate, src, /datum/build_mode/relocate_to/proc/ClearRelocator) - to_relocate = null - if(feedback) - Warn("The selected relocation object was deleted.") diff --git a/code/modules/admin/buildmode/room_builder.dm b/code/modules/admin/buildmode/room_builder.dm deleted file mode 100644 index e39ec108d89cd..0000000000000 --- a/code/modules/admin/buildmode/room_builder.dm +++ /dev/null @@ -1,61 +0,0 @@ -/datum/build_mode/room_builder - name = "Room Builder" - icon_state = "buildmode5" - - var/turf/coordinate_A - var/turf/coordinate_B - - var/floor_type = /turf/simulated/floor/plating - var/wall_type = /turf/simulated/wall - -/datum/build_mode/room_builder/Help() - to_chat(user, SPAN_NOTICE("***********************************************************")) - to_chat(user, SPAN_NOTICE("Left Click on Turf = Select as point A")) - to_chat(user, SPAN_NOTICE("Right Click on Turf = Select as point B")) - to_chat(user, SPAN_NOTICE("While Holding Shift = Place ONLY floor")) - to_chat(user, SPAN_NOTICE("While Holding Ctrl = Place ONLY walls")) - to_chat(user, SPAN_NOTICE("As soon as both points have been selected, the room is created.")) - to_chat(user, "") - to_chat(user, SPAN_NOTICE("Right Click on Build Mode Button = Change floor/wall type")) - to_chat(user, SPAN_NOTICE("***********************************************************")) - -/datum/build_mode/room_builder/Configurate() - var/choice = alert("Would you like to set the floor or wall type?", name, "Floor", "Wall", "Cancel") - switch(choice) - if("Floor") - floor_type = select_subpath(floor_type) || floor_type - to_chat(user, SPAN_NOTICE("Floor type set to [floor_type].")) - if("Wall") - wall_type = select_subpath(wall_type) || wall_type - to_chat(user, SPAN_NOTICE("Wall type set to [wall_type].")) - -/datum/build_mode/room_builder/OnClick(var/atom/A, var/list/parameters) - if(parameters["left"]) - coordinate_A = get_turf(A) - to_chat(user, SPAN_NOTICE("Defined [coordinate_A] ([coordinate_A.type]) as point A.")) - if(parameters["right"]) - coordinate_B = get_turf(A) - to_chat(user, SPAN_NOTICE("Defined [coordinate_B] ([coordinate_B.type]) as point B.")) - - if(coordinate_A && coordinate_B) - to_chat(user, SPAN_NOTICE("Room coordinates set. Building room.")) - Log("Created a room with wall type [wall_type] and floor type [floor_type] from [log_info_line(coordinate_A)] to [log_info_line(coordinate_B)]") - var/list/coords = make_rectangle(coordinate_A, coordinate_B) - make_room(coords[1], coords[2], coords[3], coords[4], coords[5], wall_type, floor_type, parameters["shift"], parameters["ctrl"]) - coordinate_A = null - coordinate_B = null - -/datum/build_mode/room_builder/proc/make_room(low_bound_x, low_bound_y, high_bound_x, high_bound_y, z_level, turf/wall_type, turf/floor_type, only_walls, only_floors) - for(var/i = low_bound_x, i <= high_bound_x, i++) - for(var/j = low_bound_y, j <= high_bound_y, j++) - var/turf/T = locate(i, j, z_level) - if(!only_floors && (i == low_bound_x || i == high_bound_x || j == low_bound_y || j == high_bound_y)) - if(ispath(wall_type, /turf)) - T.ChangeTurf(wall_type) - else - new wall_type(T) - else if (!only_walls) - if(ispath(floor_type, /turf)) - T.ChangeTurf(floor_type) - else - new floor_type(T) diff --git a/code/modules/admin/buildmode/throw_at.dm b/code/modules/admin/buildmode/throw_at.dm deleted file mode 100644 index 9768e8fe287e0..0000000000000 --- a/code/modules/admin/buildmode/throw_at.dm +++ /dev/null @@ -1,46 +0,0 @@ -/datum/build_mode/throw_at - name = "Throw At" - icon_state = "buildmode4" - var/atom/movable/to_throw - -/datum/build_mode/throw_at/Destroy() - ClearThrowable() - . = ..() - -/datum/build_mode/throw_at/Help() - to_chat(user, "***********************************************************") - to_chat(user, "Left Click on Movable Atom = Select object to be thrown") - to_chat(user, "Right Click on Atom = Throw at the target") - to_chat(user, "***********************************************************") - -/datum/build_mode/throw_at/OnClick(var/atom/A, var/list/parameters) - if(parameters["left"]) - if(istype(A, /atom/movable)) - SetThrowable(A) - else if(parameters["right"]) - if(to_throw) - if(!isturf(to_throw.loc)) - to_chat(user, "\The [to_throw] is currently not on a turf and cannot be thrown.") - else - to_throw.throw_at(A, 10, 1) - Log("Threw '[log_info_line(to_throw)]' at '[log_info_line(A)]'") - else - to_chat(user, "You have nothing selected to throw.") - -/datum/build_mode/throw_at/proc/SetThrowable(var/new_throwable) - if(to_throw == new_throwable) - return - ClearThrowable() - - to_throw = new_throwable - GLOB.destroyed_event.register(to_throw, src, /datum/build_mode/throw_at/proc/ClearThrowable) - to_chat(user, "Will now be throwing \the [to_throw].") - -/datum/build_mode/throw_at/proc/ClearThrowable(var/feedback) - if(!to_throw) - return - - GLOB.destroyed_event.unregister(to_throw, src, /datum/build_mode/throw_at/proc/ClearThrowable) - to_throw = null - if(feedback) - Warn("The selected throwing object was deleted.") diff --git a/code/modules/admin/buildmode/turret.dm b/code/modules/admin/buildmode/turret.dm deleted file mode 100644 index 40b6fe11c002b..0000000000000 --- a/code/modules/admin/buildmode/turret.dm +++ /dev/null @@ -1,163 +0,0 @@ -/datum/build_mode/turret - name = "Turret Editor" - icon_state = "buildmode15" - var/list/settings = list() - var/help_text = {"\ - ***** Build Mode: Turret ****** - Left Click - Spawn a turret or update an existing turret. - Right Click - Delete a turret - Right Click build icon - Configure turret settings. - ************************************\ - "} - -/datum/build_mode/turret/New(host) - . = ..() - settings["health"] = 100 - settings["repair"] = 0 - settings["weapon"] = /obj/item/gun/energy/gun - settings["check_weapons"] = 0 - settings["check_access"] = 0 - settings["check_synth"] = 0 - settings["lethal"] = 0 - settings["access_list"] = list() - -/datum/build_mode/turret/Help() - to_chat(user, SPAN_NOTICE(help_text)) - -/datum/build_mode/turret/Configurate() - ui_interact(user) - -/datum/build_mode/turret/ui_interact(mob/user, ui_key = "turret_editor", datum/nanoui/ui = null, force_open = 1, var/master_ui = null, var/datum/topic_state/state = GLOB.default_state) - . = ..() - - var/data[0] - data["health"] = settings["health"] - data["repair"] = settings["repair"] - data["weapon"] = settings["weapon"] - data["check_weapons"] = settings["check_weapons"] - data["check_access"] = settings["check_access"] - data["check_synth"] = settings["check_synth"] - data["lethal"] = settings["lethal"] - data["access_list"] = settings["access_list"] - - ui = SSnano.try_update_ui(user, src, ui_key, ui, data, force_open) - if (!ui) - ui = new(user, src, ui_key, "turret_editor.tmpl", src.name, 425, 600, master_ui = master_ui, state = state) - ui.set_initial_data(data) - ui.open() - ui.set_auto_update(1) - -/datum/build_mode/turret/CanUseTopic(mob/user) - if (!isadmin(user)) - return STATUS_CLOSE - return ..() - -/datum/build_mode/turret/Topic(user, href_list) - if (href_list["health"]) - var/health = input("Set Starting Health", "Set Starting Health") as null | num - - if (health) - settings["health"] = health - - . = TOPIC_HANDLED - - if (href_list["repair"]) - var/repair = alert("Should the turret repair itself over time?", "Auto Repair", "Yes", "No") == "Yes" - - if (repair) - settings["repair"] = TRUE - - . = TOPIC_HANDLED - - if (href_list["weapon"]) - var/weapon = input("What weapon should the turret use?", "Weapon type") as anything in subtypesof(/obj/item/gun/energy) | null - - if (weapon) - settings["weapon"] = weapon - - . = TOPIC_HANDLED - - if (href_list["check_weapons"]) - var/check_weapons = alert("Shoot at people with weapons out?", "Shoot Baddies", "Yes", "No") == "Yes" - - settings["check_weapons"] = check_weapons - - . = TOPIC_HANDLED - - if (href_list["check_access"]) - var/check_access = alert("Shoot at those without access? ", "Shoot No Access", "Yes", "No") == "Yes" - - settings["check_access"] = check_access - - . = TOPIC_HANDLED - - if (href_list["check_synth"]) - var/check_synth = alert("Shoot at only non-synths?", "Shoot Organics", "Yes", "No") == "Yes" - - settings["check_synth"] = check_synth - - . = TOPIC_HANDLED - - if (href_list["lethal"]) - var/lethal = alert("Lethal or stun?", "Lethality", "Lethal", "Stun") == "Lethal" - - settings["lethal"] = lethal - - . = TOPIC_HANDLED - - if (href_list["add_access"]) - var/access_list = input("Add Access type", "Access List") as anything in get_all_access_datums()|null - - if (!access_list) - return - - settings["access_list"] += list(access_list) - - . = TOPIC_HANDLED - - if (href_list["remove_access"]) - var/access_list = input("Remove Access type", "Access List") as anything in settings["access_list"]|null - - if (!access_list) - return - - settings["access_list"] -= access_list - - . = TOPIC_HANDLED - -/datum/build_mode/turret/OnClick(atom/object, list/pa) - if (pa["right"]) - if (istype(object, /obj/machinery/porta_turret)) - qdel(object) - - if (pa["left"]) - if (!object) - return - - - var/turf/T = get_turf(object) - - if (!T) - return - - var/obj/machinery/porta_turret/P - if (istype(object, /obj/machinery/porta_turret)) - P = object - to_chat(usr, SPAN_NOTICE("Updated turret settings.")) - else - P = new /obj/machinery/porta_turret(T) - - P.health = settings["health"] - P.maxhealth = settings["health"] - P.auto_repair = settings["repair"] - P.installation = settings["weapon"] - P.check_weapons = settings["check_weapons"] - P.check_access = settings["check_access"] - P.check_synth = settings["check_synth"] - - var/access_types = list() - for (var/datum/access/A in settings["access_list"]) - access_types += A.id - - P.req_access = access_types - P.setup() diff --git a/code/modules/admin/callproc/callproc.dm b/code/modules/admin/callproc/callproc.dm deleted file mode 100644 index 44878b884bf21..0000000000000 --- a/code/modules/admin/callproc/callproc.dm +++ /dev/null @@ -1,244 +0,0 @@ -//// VERBS - -// standard callproc, select target -/client/proc/callproc() - set category = "Debug" - set name = "Advanced ProcCall" - - if(!check_rights(R_DEBUG)) return - if(config.debugparanoid && !check_rights(R_ADMIN)) return - - var/target = null - var/targetselected = 0 - - switch(alert("Proc owned by something?",, "Yes", "No", "Cancel")) - if("Yes") - targetselected=1 - switch(input("Proc owned by...", "Owner", null) as null|anything in list("Obj", "Mob", "Area or Turf", "Client")) - if("Obj") - target = input("Select target:", "Target") as null|obj in world - if("Mob") - target = input("Select target:", "Target", usr) as null|mob in world - if("Area or Turf") - target = input("Select target:", "Target", get_turf(usr)) as null|area|turf in world - if("Client") - target = input("Select target:", "Target", usr.client) as null|anything in GLOB.clients - else - return - if(!target) - to_chat(usr, "Proc call cancelled.") - return - if("Cancel") - return - if("No") - ; // do nothing - - callproc_targetpicked(targetselected, target) - -// right click verb -/client/proc/callproc_target(atom/A in range(world.view)) - set category = "Debug" - set name = "Advanced ProcCall Target" - - if(!check_rights(R_DEBUG)) return - if(config.debugparanoid && !check_rights(R_ADMIN)) return - - callproc_targetpicked(1, A) - -/datum/admins - var/datum/callproc/callproc = null // if the user has a callproc datum, it goes here - -/client/proc/callproc_targetpicked(hastarget, datum/target) - // this needs checking again here because VV's 'Call Proc' option directly calls this proc with the target datum - if(!check_rights(R_DEBUG)) return - if(config.debugparanoid && !check_rights(R_ADMIN)) return - - if(!holder.callproc) - holder.callproc = new(src) - holder.callproc.callproc(hastarget, target) - -#define CANCEL -1 -#define WAITING 0 -#define DONE 1 - -/datum/callproc - var/client/C - var/datum/target - var/hastarget - var/procname - var/list/arguments - var/waiting_for_click = 0 - -/datum/callproc/New(client/C) - ..() - src.C = C - -/datum/callproc/proc/clear() - target = null - hastarget = null - procname = null - arguments = null - waiting_for_click = 0 - -/datum/callproc/proc/callproc(hastarget, datum/target) - src.target = target - src.hastarget = hastarget - - procname = input("Proc name", "Proc") as null|text - if(!procname) - clear() - return - - if(hastarget) - if(!target) - to_chat(usr, "Your callproc target no longer exists.") - clear() - return - if(!hascall(target, procname)) - to_chat(usr, "\The [target] has no call [procname]()") - clear() - return - - arguments = list() - do_args() - -/datum/callproc/proc/do_args() - switch(get_args()) - if(WAITING) - return - if(DONE) - finalise() - clear() - -/datum/callproc/proc/get_args() - var/done = 0 - var/current = null - - while(!done) - if(hastarget && !target) - to_chat(usr, "Your callproc target no longer exists.") - return CANCEL - switch(input("Type of [arguments.len+1]\th variable", "argument [arguments.len+1]") as null|anything in list( - "finished", "null", "text", "num", "type", "obj reference", "mob reference", - "area/turf reference", "icon", "file", "client", "mob's area", "path", "marked datum", "click on atom")) - if(null) - return CANCEL - - if("finished") - done = 1 - - if("null") - current = null - - if("text") - current = input("Enter text for [arguments.len+1]\th argument") as null|text - if(isnull(current)) return CANCEL - - if("num") - current = input("Enter number for [arguments.len+1]\th argument") as null|num - if(isnull(current)) return CANCEL - - if("type") - current = input("Select type for [arguments.len+1]\th argument") as null|anything in typesof(/obj, /mob, /area, /turf) - if(isnull(current)) return CANCEL - - if("obj reference") - current = input("Select object for [arguments.len+1]\th argument") as null|obj in world - if(isnull(current)) return CANCEL - - if("mob reference") - current = input("Select mob for [arguments.len+1]\th argument") as null|mob in world - if(isnull(current)) return CANCEL - - if("area/turf reference") - current = input("Select area/turf for [arguments.len+1]\th argument") as null|area|turf in world - if(isnull(current)) return CANCEL - - if("icon") - current = input("Provide icon for [arguments.len+1]\th argument") as null|icon - if(isnull(current)) return CANCEL - - if("client") - current = input("Select client for [arguments.len+1]\th argument") as null|anything in GLOB.clients - if(isnull(current)) return CANCEL - - if("mob's area") - var/mob/M = input("Select mob to take area for [arguments.len+1]\th argument") as null|mob in world - if(!M) return - current = get_area(M) - if(!current) - switch(alert("\The [M] appears to not have an area; do you want to pass null instead?",, "Yes", "Cancel")) - if("Yes") - ; // do nothing - if("Cancel") - return CANCEL - if ("path") - current = text2path(input("Enter path for [arguments.len+1]\th argument") as null|text) - if (isnull(current)) - return CANCEL - - if("marked datum") - current = C.holder.marked_datum() - if(!current) - switch(alert("You do not currently have a marked datum; do you want to pass null instead?",, "Yes", "Cancel")) - if("Yes") - ; // do nothing - if("Cancel") - return CANCEL - - if("click on atom") - waiting_for_click = 1 - C.verbs += /client/proc/cancel_callproc_select - to_chat(C, "Click an atom to select it. Click an atom then click 'cancel', or use the Cancel-Callproc-Select verb to cancel selecting a target by click.") - return WAITING - - if(!done) - arguments += current - - return DONE - -/client/proc/cancel_callproc_select() - set name = "Cancel Callproc Select" - set category = "Admin" - - verbs -= /client/proc/cancel_callproc_select - if(holder && holder.callproc && holder.callproc.waiting_for_click) - holder.callproc.waiting_for_click = 0 - holder.callproc.do_args() - -/client/Click(atom/A) - if(!user_acted(src)) - return - if(holder && holder.callproc && holder.callproc.waiting_for_click) - if(alert("Do you want to select \the [A] as the [holder.callproc.arguments.len+1]\th argument?",, "Yes", "No") == "Yes") - holder.callproc.arguments += A - - holder.callproc.waiting_for_click = 0 - verbs -= /client/proc/cancel_callproc_select - holder.callproc.do_args() - else - return ..() - -/datum/callproc/proc/finalise() - var/returnval - - if(hastarget) - if(!target) - to_chat(usr, "Your callproc target no longer exists.") - return - log_and_message_admins("[key_name(C)] called \the [target]'s [procname]() with [LAZYLEN(arguments) ? "the arguments [list2params(arguments)]" : "no arguments"].", location = get_turf(target)) - if(LAZYLEN(arguments)) - returnval = call(target, procname)(arglist(arguments)) - else - returnval = call(target, procname)() - else - log_and_message_admins("[key_name(C)] called [procname]() with [LAZYLEN(arguments)? "the arguments [list2params(arguments)]" : "no arguments"].", location = get_turf(target)) - - var/P = text2path("/proc/[procname]") - returnval = call(P)(arglist(arguments)) - - to_chat(usr, "[procname]() returned: [json_encode(returnval)]") - -#undef CANCEL -#undef WAITING -#undef DONE diff --git a/code/modules/admin/create_mob.dm b/code/modules/admin/create_mob.dm deleted file mode 100644 index e705d226c42e6..0000000000000 --- a/code/modules/admin/create_mob.dm +++ /dev/null @@ -1,9 +0,0 @@ -var/global/create_mob_html = null -/datum/admins/proc/create_mob(var/mob/user) - if (!create_mob_html) - var/mobjs = null - mobjs = jointext(typesof(/mob), ";") - create_mob_html = file2text('html/create_object.html') - create_mob_html = replacetext_char(create_mob_html, "null /* object types */", "\"[mobjs]\"") - - show_browser(user, replacetext_char(create_mob_html, "/* ref src */", "\ref[src]"), "window=create_mob;size=575x575") diff --git a/code/modules/admin/create_object.dm b/code/modules/admin/create_object.dm deleted file mode 100644 index 8f2975ef777b4..0000000000000 --- a/code/modules/admin/create_object.dm +++ /dev/null @@ -1,10 +0,0 @@ -var/global/create_object_html = null - -/datum/admins/proc/create_object(var/mob/user) - if (!create_object_html) - var/objectjs = null - objectjs = jointext(typesof(/obj), ";") - create_object_html = file2text('html/create_object.html') - create_object_html = replacetext_char(create_object_html, "null /* object types */", "\"[objectjs]\"") - - show_browser(user, replacetext_char(create_object_html, "/* ref src */", "\ref[src]"), "window=create_object;size=575x575") diff --git a/code/modules/admin/create_turf.dm b/code/modules/admin/create_turf.dm deleted file mode 100644 index b64c4d9cca92c..0000000000000 --- a/code/modules/admin/create_turf.dm +++ /dev/null @@ -1,9 +0,0 @@ -var/global/create_turf_html = null -/datum/admins/proc/create_turf(var/mob/user) - if (!create_turf_html) - var/turfjs = null - turfjs = jointext(typesof(/turf), ";") - create_turf_html = file2text('html/create_object.html') - create_turf_html = replacetext_char(create_turf_html, "null /* object types */", "\"[turfjs]\"") - - show_browser(user, replacetext_char(create_turf_html, "/* ref src */", "\ref[src]"), "window=create_turf;size=575x575") diff --git a/code/modules/admin/holder2.dm b/code/modules/admin/holder2.dm deleted file mode 100644 index 96e0512c67b65..0000000000000 --- a/code/modules/admin/holder2.dm +++ /dev/null @@ -1,149 +0,0 @@ -#define STEALTH_OFF 0 -#define STEALTH_MANUAL 1 -#define STEALTH_AUTO 2 - -var/global/list/admin_datums = list() - -/datum/admins - var/rank = "Temporary Admin" - var/client/owner = null - var/rights = 0 - var/stealthy_ = STEALTH_OFF - - var/weakref/marked_datum_weak - - var/admincaster_screen = 0 //See newscaster.dm under machinery for a full description - var/datum/feed_message/admincaster_feed_message = new /datum/feed_message //These two will act as holders. - var/datum/feed_channel/admincaster_feed_channel = new /datum/feed_channel - var/admincaster_signature //What you'll sign the newsfeeds as - -/datum/admins/proc/marked_datum() - if(marked_datum_weak) - return marked_datum_weak.resolve() - -/datum/admins/New(initial_rank = "Temporary Admin", initial_rights = 0, ckey) - if(!ckey) - error("Admin datum created without a ckey argument. Datum has been deleted") - qdel(src) - return - admincaster_signature = "[GLOB.using_map.company_name] Officer #[rand(0,9)][rand(0,9)][rand(0,9)]" - rank = initial_rank - rights = initial_rights - admin_datums[ckey] = src - if (rights & R_DEBUG) - world.SetConfig("APP/admin", ckey, "role=admin") - -/datum/admins/proc/associate(client/C) - if(istype(C)) - if(admin_datums[C.ckey] != src) - return - owner = C - owner.holder = src - owner.add_admin_verbs() //TODO - GLOB.admins |= C - -/datum/admins/proc/disassociate() - if(owner) - GLOB.admins -= owner - owner.remove_admin_verbs() - owner.deadmin_holder = owner.holder - owner.holder = null - -/datum/admins/proc/reassociate() - if(owner) - GLOB.admins += owner - owner.holder = src - owner.deadmin_holder = null - owner.add_admin_verbs() - - -/* -checks if usr is an admin with at least ONE of the flags in rights_required. (Note, they don't need all the flags) -if rights_required == 0, then it simply checks if they are an admin. -if it doesn't return 1 and show_msg=1 it will prints a message explaining why the check has failed -generally it would be used like so: - -/proc/admin_proc() - if(!check_rights(R_ADMIN)) return - to_chat(usr, "you have enough rights!") - -NOTE: It checks usr by default. Supply the "user" argument if you wish to check for a specific mob. -*/ -/proc/check_rights(rights_required, show_msg = TRUE, client/C = usr) - C = resolve_client(C) - if (!C) - return FALSE - if (!C.holder) - if (show_msg) - to_chat(C, SPAN_WARNING("You are not a staff member.")) - return FALSE - if (rights_required) - if (rights_required & C.holder.rights) - return TRUE - if (show_msg) - to_chat(C, SPAN_WARNING("You lack the rights to do that. You need one of: [rights2text(rights_required," ")]")) - return FALSE - return TRUE - -//probably a bit iffy - will hopefully figure out a better solution -/proc/check_if_greater_rights_than(client/other) - if(usr && usr.client) - if(usr.client.holder) - if(!other || !other.holder) - return 1 - if(usr.client.holder.rights != other.holder.rights) - if( (usr.client.holder.rights & other.holder.rights) == other.holder.rights ) - return 1 //we have all the rights they have and more - to_chat(usr, "Error: Cannot proceed. They have more or equal rights to us.") - return 0 - -/client/proc/deadmin() - if(holder) - holder.disassociate() - //qdel(holder) - return 1 - -/mob/Stat() - . = ..() - if(!client) - return - - var/stealth_status = client.is_stealthed() - if(stealth_status && statpanel("Status")) - stat("Stealth", "Engaged [client.holder.stealthy_ == STEALTH_AUTO ? "(Auto)" : "(Manual)"]") - -/client/proc/is_stealthed() - if(!holder) - return FALSE - - var/auto_stealth = (inactivity >= world.time) || (config.autostealth && (inactivity >= MinutesToTicks(config.autostealth))) - // If someone has been AFK since round-start or longer, stealth them - // BYOND keeps track of inactivity between rounds as long as it's not a full stop/start. - if(holder.stealthy_ == STEALTH_OFF && auto_stealth) - holder.stealthy_ = STEALTH_AUTO - else if(holder.stealthy_ == STEALTH_AUTO && !auto_stealth) - // And if someone has been set to auto-stealth and returns, unstealth them - holder.stealthy_ = STEALTH_OFF - return holder.stealthy_ - -/mob/proc/is_stealthed() - return client && client.is_stealthed() - -/client/proc/stealth() - set category = "Admin" - set name = "Stealth Mode" - - if(!holder) - to_chat(src, "Error: You are not an admin.") - return - - holder.stealthy_ = holder.stealthy_ == STEALTH_OFF ? STEALTH_MANUAL : STEALTH_OFF - if(holder.stealthy_) - to_chat(src, "You are now stealthed.") - else - to_chat(src, "You are no longer stealthed.") - log_and_message_admins("has turned stealth mode [holder.stealthy_ ? "ON" : "OFF"]") - -#undef STEALTH_OFF -#undef STEALTH_MANUAL -#undef STEALTH_AUTO diff --git a/code/modules/admin/holoverbs.dm b/code/modules/admin/holoverbs.dm deleted file mode 100644 index 4206c8397edb1..0000000000000 --- a/code/modules/admin/holoverbs.dm +++ /dev/null @@ -1,46 +0,0 @@ - -/datum/admins/proc/ai_hologram_set(mob/appear as mob in world) - set popup_menu = FALSE - set name = "Set AI Hologram" - set desc = "Set an AI's hologram to a mob. Use this verb on the mob you want the hologram to look like." - set category = "Fun" - - if(!check_rights(R_FUN)) return - - var/list/AIs = list() - for(var/mob/living/silicon/ai/AI in SSmobs.mob_list) - AIs += AI - - var/mob/living/silicon/ai/AI = input("Which AI do you want to apply [appear] to as a hologram?") as null|anything in AIs - if(!AI) return - - var/image/I = image(appear.icon, appear.icon_state) - I.overlays = appear.overlays - I.underlays = appear.underlays - I.color = list( - 0.30, 0.30, 0.30, 0.0, // Greyscale and reduce the alpha of the icon - 0.59, 0.59, 0.59, 0.0, - 0.11, 0.11, 0.11, 0.0, - 0.00, 0.00, 0.00, 0.5, - 0.00, 0.00, 0.00, 0.0 - ) - var/image/scan = image('icons/effects/effects.dmi', "scanline") - scan.color = list( - 0.30,0.30,0.30,0.00, // Greyscale the scanline icon too - 0.59,0.59,0.59,0.00, - 0.11,0.11,0.11,0.00, - 0.00,0.00,0.00,1.00, - 0.00,0.00,0.00,0.00 - ) - scan.blend_mode = BLEND_MULTIPLY - - // Combine the mob image and the scanlines into a single KEEP_TOGETHER'd image - var/image/I2 = image(null) - I2.underlays += I - I2.overlays += scan - I2.appearance_flags = DEFAULT_APPEARANCE_FLAGS | KEEP_TOGETHER - I2.color = rgb(125, 180, 225) // make it blue! - AI.holo_icon = I2 - - to_chat(AI, "Your hologram icon has been set to [appear].") - log_and_message_admins("set [key_name(AI)]'s hologram icon to [key_name(appear)]") diff --git a/code/modules/admin/map_capture.dm b/code/modules/admin/map_capture.dm deleted file mode 100644 index 9c84f2ec2a314..0000000000000 --- a/code/modules/admin/map_capture.dm +++ /dev/null @@ -1,77 +0,0 @@ -/datum/admins/proc/capture_map_part(tx as null|num, ty as null|num, tz as null|num, range as null|num) - set category = "Server" - set name = "Capture Map Part" - set desc = "Usage: Capture-Map-Part target_x_cord target_y_cord target_z_cord range (captures part of a map originating from bottom left corner)" - - if(!check_rights(R_ADMIN|R_DEBUG|R_SERVER)) - to_chat(usr, "You are not allowed to use this command") - return - - if(isnull(tx) || isnull(ty) || isnull(tz) || isnull(range)) - to_chat(usr, "Capture Map Part, captures part of a map using camara like rendering.") - to_chat(usr, "Usage: Capture-Map-Part target_x_cord target_y_cord target_z_cord range") - to_chat(usr, "Target coordinates specify bottom left corner of the capture, range defines render distance to opposite corner.") - return - - if(range > 32 || range <= 0) - to_chat(usr, "Capturing range is incorrect, it must be within 1-32.") - return - - if(locate(tx,ty,tz)) - var/ligths = 0 - if(alert("Do you want lighting to be included in capture?", "Map Capture", "No", "Yes") == "Yes") - ligths = 1 - var/cap = generate_image(tx ,ty ,tz ,range, CAPTURE_MODE_PARTIAL, null, ligths, 1) - var/file_name = "map_capture_x[tx]_y[ty]_z[tz]_r[range].png" - to_chat(usr, "Saved capture in cache as [file_name].") - send_rsc(usr, cap, file_name) - else - to_chat(usr, "Target coordinates are incorrect.") - -/datum/admins/proc/capture_map_capture_next(currentz, currentx, currenty, ligths) - if(locate(currentx, currenty, currentz)) - var/cap = generate_image(currentx ,currenty ,currentz ,32, CAPTURE_MODE_PARTIAL, null, ligths, 1) - var/file_name = "map_capture_x[currentx]_y[currenty]_z[currentz]_r32.png" - to_chat(usr, "Saved capture in cache as [file_name].") - send_rsc(usr, cap, file_name) - currentx = currentx + 32 - addtimer(CALLBACK(src, .proc/capture_map_capture_next, currentz, currentx, currenty, ligths), 0) - else - currenty = currenty + 32 - currentx = 1 - if(locate(currentx, currenty, currentz)) - var/cap = generate_image(currentx ,currenty ,currentz ,32, CAPTURE_MODE_PARTIAL, null, ligths, 1) - var/file_name = "map_capture_x[currentx]_y[currenty]_z[currentz]_r32.png" - to_chat(usr, "Saved capture in cache as [file_name].") - send_rsc(usr, cap, file_name) - currentx = currentx + 32 - addtimer(CALLBACK(src, .proc/capture_map_capture_next, currentz, currentx, currenty, ligths), 0) - else - to_chat(usr, "End of map, capture is done.") - -/datum/admins/proc/capture_map(tz as null|num) - set category = "Server" - set name = "Capture Map" - set desc = "Usage: Capture-Map target_z_cord (captures map)" - - if(!check_rights(R_ADMIN|R_DEBUG|R_SERVER)) - to_chat(usr, "You are not allowed to use this command") - return - - if(isnull(tz)) - to_chat(usr, "Map Part, map using camara like rendering.") - to_chat(usr, "Usage: Capture-Map target_z_cord") - to_chat(usr, "Target Z coordinates define z level to capture.") - return - - if(!locate(1, 1, tz)) - to_chat(usr, "Target z-level is incorrect.") - return - - var/ligths = 0 - if(alert("Do you want lighting to be included in capture?", "Map Capture", "No", "Yes") == "Yes") - ligths = 1 - - switch(alert("Are you sure? (This will cause masive lag!!!)", "Map Capture", "No", "Yes")) - if("Yes") - usr.client.holder.capture_map_capture_next(tz, 1, 1, ligths) diff --git a/code/modules/admin/permissionverbs/permissionedit.dm b/code/modules/admin/permissionverbs/permissionedit.dm deleted file mode 100644 index 9d821de9dffb0..0000000000000 --- a/code/modules/admin/permissionverbs/permissionedit.dm +++ /dev/null @@ -1,149 +0,0 @@ -/client/proc/edit_admin_permissions() - set category = "Admin" - set name = "Permissions Panel" - set desc = "Edit admin permissions" - if(!check_rights(R_PERMISSIONS)) return - usr.client.holder.edit_admin_permissions() - -/datum/admins/proc/edit_admin_permissions() - if(!check_rights(R_PERMISSIONS)) return - - var/output = {" - - -Permissions Panel - - - - -
              - - - - -"} - - for(var/adm_ckey in admin_datums) - var/datum/admins/D = admin_datums[adm_ckey] - if(!D) continue - var/rank = D.rank ? D.rank : "*none*" - var/rights = rights2text(D.rights," ") - if(!rights) rights = "*none*" - - output += "" - output += "" - output += "" - output += "" - output += "" - - output += {" -
              CKEY \[+\]RANKPERMISSIONS
              [adm_ckey] \[-\][rank][rights]
              -
              Search:
              - -"} - - show_browser(usr, output,"window=editrights;size=600x500") - -/datum/admins/proc/log_admin_rank_modification(var/adm_ckey, var/new_rank) - if(config.admin_legacy_system) return - - if(!usr.client) - return - - if(!usr.client.holder || !(usr.client.holder.rights & R_PERMISSIONS)) - to_chat(usr, "You do not have permission to do this!") - return - - establish_db_connection() - - if(!dbcon.IsConnected()) - to_chat(usr, "Failed to establish database connection") - return - - if(!adm_ckey || !new_rank) - return - - adm_ckey = ckey(adm_ckey) - - if(!adm_ckey) - return - - if(!istext(adm_ckey) || !istext(new_rank)) - return - - var/DBQuery/select_query = dbcon.NewQuery("SELECT id FROM erro_admin WHERE ckey = '[adm_ckey]'") - select_query.Execute() - - var/new_admin = 1 - var/admin_id - while(select_query.NextRow()) - new_admin = 0 - admin_id = text2num(select_query.item[1]) - - if(new_admin) - var/DBQuery/insert_query = dbcon.NewQuery("INSERT INTO `erro_admin` (`id`, `ckey`, `rank`, `level`, `flags`) VALUES (null, '[adm_ckey]', '[new_rank]', -1, 0)") - insert_query.Execute() - var/DBQuery/log_query = dbcon.NewQuery("INSERT INTO `test`.`erro_admin_log` (`id` ,`datetime` ,`adminckey` ,`adminip` ,`log` ) VALUES (NULL , NOW( ) , '[usr.ckey]', '[usr.client.address]', 'Added new admin [adm_ckey] to rank [new_rank]');") - log_query.Execute() - to_chat(usr, "New admin added.") - else - if(!isnull(admin_id) && isnum(admin_id)) - var/DBQuery/insert_query = dbcon.NewQuery("UPDATE `erro_admin` SET rank = '[new_rank]' WHERE id = [admin_id]") - insert_query.Execute() - var/DBQuery/log_query = dbcon.NewQuery("INSERT INTO `test`.`erro_admin_log` (`id` ,`datetime` ,`adminckey` ,`adminip` ,`log` ) VALUES (NULL , NOW( ) , '[usr.ckey]', '[usr.client.address]', 'Edited the rank of [adm_ckey] to [new_rank]');") - log_query.Execute() - to_chat(usr, "Admin rank changed.") - -/datum/admins/proc/log_admin_permission_modification(var/adm_ckey, var/new_permission) - if(config.admin_legacy_system) return - - if(!usr.client) - return - - if(!usr.client.holder || !(usr.client.holder.rights & R_PERMISSIONS)) - to_chat(usr, "You do not have permission to do this!") - return - - establish_db_connection() - if(!dbcon.IsConnected()) - to_chat(usr, "Failed to establish database connection") - return - - if(!adm_ckey || !new_permission) - return - - adm_ckey = ckey(adm_ckey) - - if(!adm_ckey) - return - - if(istext(new_permission)) - new_permission = text2num(new_permission) - - if(!istext(adm_ckey) || !isnum(new_permission)) - return - - var/DBQuery/select_query = dbcon.NewQuery("SELECT id, flags FROM erro_admin WHERE ckey = '[adm_ckey]'") - select_query.Execute() - - var/admin_id - var/admin_rights - while(select_query.NextRow()) - admin_id = text2num(select_query.item[1]) - admin_rights = text2num(select_query.item[2]) - - if(!admin_id) - return - - if(admin_rights & new_permission) //This admin already has this permission, so we are removing it. - var/DBQuery/insert_query = dbcon.NewQuery("UPDATE `erro_admin` SET flags = [admin_rights & ~new_permission] WHERE id = [admin_id]") - insert_query.Execute() - var/DBQuery/log_query = dbcon.NewQuery("INSERT INTO `test`.`erro_admin_log` (`id` ,`datetime` ,`adminckey` ,`adminip` ,`log` ) VALUES (NULL , NOW( ) , '[usr.ckey]', '[usr.client.address]', 'Removed permission [rights2text(new_permission)] (flag = [new_permission]) to admin [adm_ckey]');") - log_query.Execute() - to_chat(usr, "Permission removed.") - else //This admin doesn't have this permission, so we are adding it. - var/DBQuery/insert_query = dbcon.NewQuery("UPDATE `erro_admin` SET flags = '[admin_rights | new_permission]' WHERE id = [admin_id]") - insert_query.Execute() - var/DBQuery/log_query = dbcon.NewQuery("INSERT INTO `test`.`erro_admin_log` (`id` ,`datetime` ,`adminckey` ,`adminip` ,`log` ) VALUES (NULL , NOW( ) , '[usr.ckey]', '[usr.client.address]', 'Added permission [rights2text(new_permission)] (flag = [new_permission]) to admin [adm_ckey]')") - log_query.Execute() - to_chat(usr, "Permission added.") diff --git a/code/modules/admin/persistence.dm b/code/modules/admin/persistence.dm deleted file mode 100644 index ef2d91f9c9e4a..0000000000000 --- a/code/modules/admin/persistence.dm +++ /dev/null @@ -1,6 +0,0 @@ -/datum/admins/proc/view_persistent_data() - set category = "Admin" - set name = "View Persistent Data" - set desc = "Shows a list of persistent data for this round. Allows modification by admins." - - SSpersistence.show_info(usr) diff --git a/code/modules/admin/player_notes.dm b/code/modules/admin/player_notes.dm deleted file mode 100644 index 6c20fda189357..0000000000000 --- a/code/modules/admin/player_notes.dm +++ /dev/null @@ -1,90 +0,0 @@ - -//Hijacking this file for BS12 playernotes functions. ~ Chinsky. - -/proc/notes_add(var/key, var/note, var/mob/user) - if (!key || !note) - return - - //Loading list of notes for this key - var/target = ckey(key) - var/savefile/info = new("data/player_saves/[copytext_char(target, 1, 2)]/[target]/info.sav") - var/list/infos - from_save(info, infos) - if(!infos) infos = list() - - //Overly complex timestamp creation - var/modifyer = "th" - switch(time2text(world.timeofday, "DD")) - if("01","21","31") - modifyer = "st" - if("02","22",) - modifyer = "nd" - if("03","23") - modifyer = "rd" - var/day_string = "[time2text(world.timeofday, "DD")][modifyer]" - if(copytext_char(day_string,1,2) == "0") - day_string = copytext_char(day_string,2) - var/full_date = time2text(world.timeofday, "DDD, Month DD of YYYY") - var/day_loc = findtext(full_date, time2text(world.timeofday, "DD")) - - var/datum/player_info/P = new - if (ismob(user)) - P.author = user.key - P.rank = user.client.holder.rank - else if (istext(user)) - P.author = user - P.rank = "Bot" - else - P.author = "Adminbot" - P.rank = "Friendly Robot" - P.content = note - P.timestamp = "[copytext_char(full_date,1,day_loc)][day_string][copytext_char(full_date,day_loc+2)]" - - infos += P - to_save(info, infos) - - message_staff("[P.author] has edited [key]'s notes.") - log_admin("[P.author] has edited [key]'s notes.") - SSwebhooks.send(WEBHOOK_NOTES, list("admin" = P.author, "player" = key, "info" = note)) - - del(info) // savefile, so NOT qdel - - //Updating list of keys with notes on them - var/savefile/note_list = new("data/player_notes.sav") - var/list/note_keys - from_save(note_list, note_keys) - if(!note_keys) note_keys = list() - if(!note_keys.Find(target)) note_keys += target - to_save(note_list, note_keys) - del(note_list) // savefile, so NOT qdel - - -/proc/notes_del(var/key, var/index) - var/target = ckey(key) - var/savefile/info = new("data/player_saves/[copytext_char(target, 1, 2)]/[target]/info.sav") - var/list/infos - from_save(info, infos) - if(!infos || infos.len < index) return - - var/datum/player_info/item = infos[index] - infos.Remove(item) - to_save(info, infos) - - message_staff("[key_name_admin(usr)] deleted one of [target]'s notes.") - log_admin("[key_name(usr)] deleted one of [target]'s notes.") - - del(info) // savefile, so NOT qdel - -/proc/show_player_info_irc(var/key as text) - var/dat = " Info on [key]\n" - var/target = ckey(key) - var/savefile/info = new("data/player_saves/[copytext_char(target, 1, 2)]/[target]/info.sav") - var/list/infos - from_save(info, infos) - if(!infos) - dat = "No information found on the given key." - else - for(var/datum/player_info/I in infos) - dat += "[I.content]\nby [I.author] ([I.rank]) on [I.timestamp]\n\n" - - return list2params(list(dat)) diff --git a/code/modules/admin/player_panel.dm b/code/modules/admin/player_panel.dm deleted file mode 100644 index 89ca46e8c2fdb..0000000000000 --- a/code/modules/admin/player_panel.dm +++ /dev/null @@ -1,349 +0,0 @@ - -/datum/admins/proc/player_panel()//The new one - if (!usr.client.holder) - return - var/dat = "Admin Player Panel" - - //javascript, the part that does most of the work~ - dat += {" - - - - - - - "} - - //body tag start + onload and onkeypress (onkeyup) javascript event calls - dat += "" - - //title + search bar - dat += {" - - - - - - - - -
              - Player panel
              - Hover over a line to see more information - Check antagonists -

              -

              - Search: -
              - - "} - - //player table header - dat += {" - - "} - - var/list/mobs = sortmobs() - var/i = 1 - for(var/entry in mobs) - var/mob/M = entry - if(!istype(M)) - continue - if(M.ckey) - - var/color = "#e6e6e6" - if(i%2 == 0) - color = "#f2f2f2" - var/is_antagonist = is_special_character(M) - - var/M_job = "" - - if(isliving(M)) - - if(iscarbon(M)) //Carbon stuff - if(ishuman(M)) - var/mob/living/carbon/human/H = M - M_job = H.job - else if(isslime(M)) - M_job = "slime" - else if(issmall(M)) - M_job = "Monkey" - else if(isalien(M)) - M_job = "Alien" - else - M_job = "Carbon-based" - - else if(issilicon(M)) //silicon - if(isAI(M)) - M_job = "AI" - else if(ispAI(M)) - M_job = "pAI" - else if(isrobot(M)) - M_job = "Robot" - else - M_job = "Silicon-based" - - else if(isanimal(M)) //simple animals - if(iscorgi(M)) - M_job = "Corgi" - else - M_job = "Animal" - - else - M_job = "Living" - - else if(istype(M,/mob/new_player)) - M_job = "New player" - - else if(isghost(M)) - M_job = "Ghost" - else - M_job = "Unknown ([M.type])" - - M_job = replacetext_char(M_job, "'", "") - M_job = replacetext_char(M_job, "\"", "") - M_job = replacetext_char(M_job, "\\", "") - - var/M_name = M.name - M_name = replacetext_char(M_name, "'", "") - M_name = replacetext_char(M_name, "\"", "") - M_name = replacetext_char(M_name, "\\", "") - var/M_rname = M.real_name - M_rname = replacetext_char(M_rname, "'", "") - M_rname = replacetext_char(M_rname, "\"", "") - M_rname = replacetext_char(M_rname, "\\", "") - - var/M_key = M.key - M_key = replacetext_char(M_key, "'", "") - M_key = replacetext_char(M_key, "\"", "") - M_key = replacetext_char(M_key, "\\", "") - - //output for each mob - dat += {" - - - - - - "} - - i++ - - - //player table ending - dat += {" -
              - - - [M_name] - [M_rname] - [M_key] ([M_job]) - -
              -
              -
              - - - - "} - - show_browser(usr, dat, "window=players;size=600x480") - - -/datum/admins/proc/check_antagonists() - if (GAME_STATE >= RUNLEVEL_GAME) - var/dat = list() - dat += "Round Status

              Round Status

              " - dat += "Current Game Mode: [SSticker.mode.name]
              " - dat += "Round Duration: [roundduration2text()]
              " - dat += "Evacuation
              " - if (evacuation_controller.is_idle()) - dat += "Call Evacuation
              " - else - var/timeleft = evacuation_controller.get_eta() - if (evacuation_controller.waiting_to_leave()) - dat += "ETA: [(timeleft / 60) % 60]:[pad_left(num2text(timeleft % 60), 2, "0")]
              " - dat += "Send Back
              " - - dat += "[SSticker.delay_end ? "End Round Normally" : "Delay Round End"]
              " - dat += "
              " - var/list/all_antag_types = GLOB.all_antag_types_ - for(var/antag_type in all_antag_types) - var/datum/antagonist/A = all_antag_types[antag_type] - dat += A.get_check_antag_output(src) - dat += "" - show_browser(usr, jointext(dat,null), "window=roundstatus;size=400x500") - else - alert("The game hasn't started yet!") diff --git a/code/modules/admin/secrets/admin_secrets/admin_logs.dm b/code/modules/admin/secrets/admin_secrets/admin_logs.dm deleted file mode 100644 index c9fa202574286..0000000000000 --- a/code/modules/admin/secrets/admin_secrets/admin_logs.dm +++ /dev/null @@ -1,13 +0,0 @@ -/datum/admin_secret_item/admin_secret/admin_logs - name = "Admin Logs" - -/datum/admin_secret_item/admin_secret/admin_logs/execute(var/mob/user) - . = ..() - if(!.) - return - var/dat = "Admin Log
              " - for(var/l in GLOB.admin_log) - dat += "
            • [l]
            • " - if(!GLOB.admin_log.len) - dat += "No-one has done anything this round!" - show_browser(user, dat, "window=admin_log") diff --git a/code/modules/admin/secrets/admin_secrets/bombing_list.dm b/code/modules/admin/secrets/admin_secrets/bombing_list.dm deleted file mode 100644 index 89f49b47c9483..0000000000000 --- a/code/modules/admin/secrets/admin_secrets/bombing_list.dm +++ /dev/null @@ -1,12 +0,0 @@ -/datum/admin_secret_item/admin_secret/bombing_list - name = "Bombing List" - -/datum/admin_secret_item/admin_secret/bombing_list/execute(var/mob/user) - . = ..() - if(!.) - return - - var/dat = "Bombing List" - for(var/l in GLOB.bombers) - dat += text("[l]
              ") - show_browser(user, dat, "window=bombers") diff --git a/code/modules/admin/secrets/admin_secrets/jump_shuttle.dm b/code/modules/admin/secrets/admin_secrets/jump_shuttle.dm deleted file mode 100644 index 44ed696e40301..0000000000000 --- a/code/modules/admin/secrets/admin_secrets/jump_shuttle.dm +++ /dev/null @@ -1,35 +0,0 @@ -/datum/admin_secret_item/admin_secret/jump_shuttle - name = "Jump a Shuttle" - -/datum/admin_secret_item/admin_secret/jump_shuttle/can_execute(var/mob/user) - if(!SSshuttle) return 0 - return ..() - -/datum/admin_secret_item/admin_secret/jump_shuttle/execute(var/mob/user) - . = ..() - if(!.) - return - var/shuttle_tag = input(user, "Which shuttle do you want to jump?") as null|anything in SSshuttle.shuttles - if (!shuttle_tag) return - - var/datum/shuttle/S = SSshuttle.shuttles[shuttle_tag] - - var/list/destinations = list() - for(var/obj/effect/shuttle_landmark/WP in world) - destinations += WP - - var/obj/effect/shuttle_landmark/destination = input(user, "Select the destination for this jump.") as null|anything in destinations - if (!destination) return - - var/long_jump = alert(user, "Is there a transition location for this jump?","", "Yes", "No") - if (long_jump == "Yes") - var/obj/effect/shuttle_landmark/transition = input(user, "Select transition location for this jump.") as null|anything in destinations - if (!transition) return - - var/move_duration = input(user, "How many seconds will this jump take?") as num - - S.long_jump(destination, transition, move_duration) - log_and_message_admins("has initiated a jump to [destination] (JMP) lasting [move_duration] seconds in transit at [transition] (JMP) for the [shuttle_tag] shuttle") - else - S.short_jump(destination) - log_and_message_admins("has initiated a jump to [destination] (JMP) for the [shuttle_tag] shuttle") diff --git a/code/modules/admin/secrets/admin_secrets/launch_shuttle.dm b/code/modules/admin/secrets/admin_secrets/launch_shuttle.dm deleted file mode 100644 index 6715d794659a6..0000000000000 --- a/code/modules/admin/secrets/admin_secrets/launch_shuttle.dm +++ /dev/null @@ -1,26 +0,0 @@ -/datum/admin_secret_item/admin_secret/launch_shuttle - name = "Launch a Shuttle" - -/datum/admin_secret_item/admin_secret/launch_shuttle/can_execute(var/mob/user) - if(!SSshuttle) return 0 - return ..() - -/datum/admin_secret_item/admin_secret/launch_shuttle/execute(var/mob/user) - . = ..() - if(!.) - return - var/list/valid_shuttles = list() - for (var/shuttle_tag in SSshuttle.shuttles) - if (istype(SSshuttle.shuttles[shuttle_tag], /datum/shuttle/autodock/ferry)) - valid_shuttles += shuttle_tag - - var/shuttle_tag = input(user, "Which shuttle do you want to launch?") as null|anything in valid_shuttles - if (!shuttle_tag) - return - - var/datum/shuttle/autodock/ferry/S = SSshuttle.shuttles[shuttle_tag] - if (S.can_launch()) - S.launch(user) - log_and_message_admins("launched the [shuttle_tag] shuttle", user) - else - alert(user, "The [shuttle_tag] shuttle cannot be launched at this time. It's probably busy.") diff --git a/code/modules/admin/secrets/admin_secrets/launch_shuttle_forced.dm b/code/modules/admin/secrets/admin_secrets/launch_shuttle_forced.dm deleted file mode 100644 index 3c1f5a783c919..0000000000000 --- a/code/modules/admin/secrets/admin_secrets/launch_shuttle_forced.dm +++ /dev/null @@ -1,26 +0,0 @@ -/datum/admin_secret_item/admin_secret/launch_shuttle_forced - name = "Launch a Shuttle (Forced)" - -/datum/admin_secret_item/admin_secret/launch_shuttle_forced/can_execute(var/mob/user) - if(!SSshuttle) return 0 - return ..() - -/datum/admin_secret_item/admin_secret/launch_shuttle_forced/execute(var/mob/user) - . = ..() - if(!.) - return - var/list/valid_shuttles = list() - for (var/shuttle_tag in SSshuttle.shuttles) - if (istype(SSshuttle.shuttles[shuttle_tag], /datum/shuttle/autodock/ferry)) - valid_shuttles += shuttle_tag - - var/shuttle_tag = input(user, "Which shuttle's launch do you want to force?") as null|anything in valid_shuttles - if (!shuttle_tag) - return - - var/datum/shuttle/autodock/ferry/S = SSshuttle.shuttles[shuttle_tag] - if (S.can_force()) - S.force_launch(user) - log_and_message_admins("forced the [shuttle_tag] shuttle", user) - else - alert(user, "The [shuttle_tag] shuttle launch cannot be forced at this time. It's busy, or hasn't been launched yet.") diff --git a/code/modules/admin/secrets/admin_secrets/list_dna.dm b/code/modules/admin/secrets/admin_secrets/list_dna.dm deleted file mode 100644 index 82c0af0e5f348..0000000000000 --- a/code/modules/admin/secrets/admin_secrets/list_dna.dm +++ /dev/null @@ -1,14 +0,0 @@ -/datum/admin_secret_item/admin_secret/list_dna - name = "List DNA (Blood)" - -/datum/admin_secret_item/admin_secret/list_dna/execute(var/mob/user) - . = ..() - if(!.) - return - var/dat = "Showing DNA from blood.
              " - dat += "" - for(var/mob/living/carbon/human/H in SSmobs.mob_list) - if(H.dna && H.ckey) - dat += "" - dat += "
              NameDNABlood Type
              [H][H.dna.unique_enzymes][H.b_type]
              " - show_browser(user, dat, "window=DNA;size=440x410") diff --git a/code/modules/admin/secrets/admin_secrets/list_fingerprints.dm b/code/modules/admin/secrets/admin_secrets/list_fingerprints.dm deleted file mode 100644 index 6b06f434aa796..0000000000000 --- a/code/modules/admin/secrets/admin_secrets/list_fingerprints.dm +++ /dev/null @@ -1,19 +0,0 @@ -/datum/admin_secret_item/admin_secret/list_fingerprints - name = "List Fingerprints" - -/datum/admin_secret_item/admin_secret/list_fingerprints/execute(var/mob/user) - . = ..() - if(!.) - return - var/dat = "Showing Fingerprints.
              " - dat += "" - for(var/mob/living/carbon/human/H in SSmobs.mob_list) - if(H.ckey) - if(H.dna && H.dna.uni_identity) - dat += "" - else if(H.dna && !H.dna.uni_identity) - dat += "" - else if(!H.dna) - dat += "" - dat += "
              NameFingerprints
              [H][md5(H.dna.uni_identity)]
              [H]H.dna.uni_identity = null
              [H]H.dna = null
              " - show_browser(user, dat, "window=fingerprints;size=440x410") diff --git a/code/modules/admin/secrets/admin_secrets/move_shuttle.dm b/code/modules/admin/secrets/admin_secrets/move_shuttle.dm deleted file mode 100644 index 7f7dc343223e4..0000000000000 --- a/code/modules/admin/secrets/admin_secrets/move_shuttle.dm +++ /dev/null @@ -1,29 +0,0 @@ -/datum/admin_secret_item/admin_secret/move_shuttle - name = "Move a Shuttle" - -/datum/admin_secret_item/admin_secret/move_shuttle/can_execute(var/mob/user) - if(!SSshuttle) return 0 - return ..() - -/datum/admin_secret_item/admin_secret/move_shuttle/execute(var/mob/user) - . = ..() - if(!.) - return - var/confirm = alert(user, "This command directly moves a shuttle from one area to another. DO NOT USE THIS UNLESS YOU ARE DEBUGGING A SHUTTLE AND YOU KNOW WHAT YOU ARE DOING.", "Are you sure?", "Ok", "Cancel") - if (confirm == "Cancel") - return - - var/shuttle_tag = input(user, "Which shuttle do you want to move?") as null|anything in SSshuttle.shuttles - if (!shuttle_tag) return - - var/datum/shuttle/S = SSshuttle.shuttles[shuttle_tag] - - var/list/destinations = list() - for(var/obj/effect/shuttle_landmark/WP in world) - destinations += WP - - var/obj/effect/shuttle_landmark/destination = input(user, "Select the destination.") as null|anything in destinations - if (!destination) return - - S.attempt_move(destination) - log_and_message_admins("moved the [shuttle_tag] shuttle to [destination] (JMP)", user) diff --git a/code/modules/admin/secrets/admin_secrets/prison_warp.dm b/code/modules/admin/secrets/admin_secrets/prison_warp.dm deleted file mode 100644 index d87f7d7ce1082..0000000000000 --- a/code/modules/admin/secrets/admin_secrets/prison_warp.dm +++ /dev/null @@ -1,40 +0,0 @@ -/datum/admin_secret_item/admin_secret/prison_warp - name = "Prison Warp" - warn_before_use = TRUE - -/datum/admin_secret_item/admin_secret/prison_warp/can_execute(var/mob/user) - if(GAME_STATE < RUNLEVEL_GAME) - return 0 - return ..() - -/datum/admin_secret_item/admin_secret/prison_warp/execute(var/mob/user) - . = ..() - if(!.) - return - for(var/mob/living/carbon/human/H in SSmobs.mob_list) - var/turf/T = get_turf(H) - var/security = 0 - if((T && (T in GLOB.using_map.admin_levels)) || GLOB.prisonwarped.Find(H)) - //don't warp them if they aren't ready or are already there - continue - H.Paralyse(5) - if(H.wear_id) - var/obj/item/card/id/id = H.GetIdCard() - for(var/A in id.access) - if(A == access_security) - security++ - if(!security) - //strip their stuff before they teleport into a cell :downs: - for(var/obj/item/W in H) - if(istype(W, /obj/item/organ/external)) - continue - //don't strip organs - H.drop_from_inventory(W) - //teleport person to cell - H.forceMove(pick(GLOB.prisonwarp)) - H.equip_to_slot_or_del(new /obj/item/clothing/under/color/orange(H), slot_w_uniform) - H.equip_to_slot_or_del(new /obj/item/clothing/shoes/orange(H), slot_shoes) - else - //teleport security person - H.forceMove(pick(GLOB.prisonsecuritywarp)) - GLOB.prisonwarped |= H diff --git a/code/modules/admin/secrets/admin_secrets/show_ai_laws.dm b/code/modules/admin/secrets/admin_secrets/show_ai_laws.dm deleted file mode 100644 index c9e7cec5df382..0000000000000 --- a/code/modules/admin/secrets/admin_secrets/show_ai_laws.dm +++ /dev/null @@ -1,7 +0,0 @@ -/datum/admin_secret_item/admin_secret/show_ai_laws - name = "Show AI laws" - -/datum/admin_secret_item/admin_secret/show_ai_laws/execute(var/mob/user) - . = ..() - if(.) - user.client.holder.output_ai_laws() diff --git a/code/modules/admin/secrets/admin_secrets/show_crew_manifest.dm b/code/modules/admin/secrets/admin_secrets/show_crew_manifest.dm deleted file mode 100644 index 39f345cc47743..0000000000000 --- a/code/modules/admin/secrets/admin_secrets/show_crew_manifest.dm +++ /dev/null @@ -1,12 +0,0 @@ -/datum/admin_secret_item/admin_secret/show_crew_manifest - name = "Show Crew Manifest" - -/datum/admin_secret_item/admin_secret/show_crew_manifest/execute(var/mob/user) - . = ..() - if(!.) - return - var/dat - dat += "

              Crew Manifest

              " - dat += html_crew_manifest() - - show_browser(user, dat, "window=manifest;size=370x420;can_close=1") diff --git a/code/modules/admin/secrets/admin_secrets/show_game_mode.dm b/code/modules/admin/secrets/admin_secrets/show_game_mode.dm deleted file mode 100644 index 8fa9704169e3d..0000000000000 --- a/code/modules/admin/secrets/admin_secrets/show_game_mode.dm +++ /dev/null @@ -1,13 +0,0 @@ -/datum/admin_secret_item/admin_secret/show_game_mode - name = "Show Game Mode" - -/datum/admin_secret_item/admin_secret/show_game_mode/can_execute(var/mob/user) - if(!SSticker.mode) - return 0 - return ..() - -/datum/admin_secret_item/admin_secret/show_game_mode/execute(var/mob/user) - . = ..() - if(!.) - return - alert("The game mode is [SSticker.mode.name]") \ No newline at end of file diff --git a/code/modules/admin/secrets/admin_secrets/show_law_changes.dm b/code/modules/admin/secrets/admin_secrets/show_law_changes.dm deleted file mode 100644 index bac5a3e8b4989..0000000000000 --- a/code/modules/admin/secrets/admin_secrets/show_law_changes.dm +++ /dev/null @@ -1,15 +0,0 @@ -/datum/admin_secret_item/admin_secret/show_law_changes - name = "Show law changes" - -/datum/admin_secret_item/admin_secret/show_law_changes/name() - return "Show Last [length(GLOB.lawchanges)] Law change\s" - -/datum/admin_secret_item/admin_secret/show_law_changes/execute(var/mob/user) - . = ..() - if(!.) - return - - var/dat = "Showing last [length(GLOB.lawchanges)] law changes.
              " - for(var/sig in GLOB.lawchanges) - dat += "[sig]
              " - show_browser(user, dat, "window=lawchanges;size=800x500") diff --git a/code/modules/admin/secrets/admin_secrets/show_signalers.dm b/code/modules/admin/secrets/admin_secrets/show_signalers.dm deleted file mode 100644 index b60b73df6244b..0000000000000 --- a/code/modules/admin/secrets/admin_secrets/show_signalers.dm +++ /dev/null @@ -1,15 +0,0 @@ -/datum/admin_secret_item/admin_secret/show_signalers - name = "Show Last Signalers" - -/datum/admin_secret_item/admin_secret/show_signalers/name() - return "Show Last [length(GLOB.lastsignalers)] Signaler\s" - -/datum/admin_secret_item/admin_secret/show_signalers/execute(var/mob/user) - . = ..() - if(!.) - return - - var/dat = "Showing last [length(GLOB.lastsignalers)] signalers.
              " - for(var/sig in GLOB.lastsignalers) - dat += "[sig]
              " - show_browser(user, dat, "window=lastsignalers;size=800x500") diff --git a/code/modules/admin/secrets/admin_secrets/toggle_circuits.dm b/code/modules/admin/secrets/admin_secrets/toggle_circuits.dm deleted file mode 100644 index 40de8a00a0986..0000000000000 --- a/code/modules/admin/secrets/admin_secrets/toggle_circuits.dm +++ /dev/null @@ -1,11 +0,0 @@ -/datum/admin_secret_item/admin_secret/toggle_circuits - name = "Toggle Circuits" - -/datum/admin_secret_item/admin_secret/toggle_circuits/execute() - if(!(. = ..())) - return - var/choice = alert("Circuits are currently [SScircuit_components.can_fire ? "enabled" : "disabled"].","Toggle Circuits", SScircuit_components.can_fire ? "Disable" : "Enable","Cancel") - if(choice == "Disable") - SScircuit_components.disable() - else if(choice == "Enable") - SScircuit_components.enable() \ No newline at end of file diff --git a/code/modules/admin/secrets/admin_secrets/toggle_overmap_movement.dm b/code/modules/admin/secrets/admin_secrets/toggle_overmap_movement.dm deleted file mode 100644 index 1b13462aa68f4..0000000000000 --- a/code/modules/admin/secrets/admin_secrets/toggle_overmap_movement.dm +++ /dev/null @@ -1,11 +0,0 @@ -/datum/admin_secret_item/admin_secret/toggle_overmap_movement - name = "Toggle Overmap Halt" - -/datum/admin_secret_item/admin_secret/toggle_overmap_movement/execute() - if(!(. = ..())) - return - var/choice = alert("Overmap movement is currently [SSshuttle.overmap_halted ? "halted" : "allowed"].","Toggle Overmap Movement",SSshuttle.overmap_halted ? "UNHALT" : "HALT","Cancel") - if(choice == "UNHALT") - SSshuttle.toggle_overmap(FALSE) - else if(choice == "HALT") - SSshuttle.toggle_overmap(TRUE) \ No newline at end of file diff --git a/code/modules/admin/secrets/admin_secrets/traitors_and_objectives.dm b/code/modules/admin/secrets/admin_secrets/traitors_and_objectives.dm deleted file mode 100644 index bcfd9cd7b9cd4..0000000000000 --- a/code/modules/admin/secrets/admin_secrets/traitors_and_objectives.dm +++ /dev/null @@ -1,7 +0,0 @@ -/datum/admin_secret_item/admin_secret/traitors_and_objectives - name = "Show current traitors and objectives" - -/datum/admin_secret_item/admin_secret/traitors_and_objectives/execute(var/mob/user) - . = ..() - if(.) - user.client.holder.check_antagonists() diff --git a/code/modules/admin/secrets/debug/toggle_harddel.dm b/code/modules/admin/secrets/debug/toggle_harddel.dm deleted file mode 100644 index 436386c7668d0..0000000000000 --- a/code/modules/admin/secrets/debug/toggle_harddel.dm +++ /dev/null @@ -1,11 +0,0 @@ -/datum/admin_secret_item/debug/toggle_harddel - name = "Toggle Harddelete Queue" - -/datum/admin_secret_item/debug/toggle_harddel/do_execute(mob/user) - var/choice = alert(user, "Harddeletes are currently [SSgarbage.harddel_halt ? "inactive" : "active"].","Toggle Harddelete Queue", SSgarbage.harddel_halt ? "Enable" : "Disable","Cancel") - if(choice == "Disable") - SSgarbage.toggle_harddel_halt(TRUE) - log_and_message_admins("disabled harddels in SSgarbage.", user) - else if(choice == "Enable") - SSgarbage.toggle_harddel_halt(FALSE) - log_and_message_admins("re-enabled harddels in SSgarbage.", user) \ No newline at end of file diff --git a/code/modules/admin/secrets/debug/world_types.dm b/code/modules/admin/secrets/debug/world_types.dm deleted file mode 100644 index 0f340ee689cb4..0000000000000 --- a/code/modules/admin/secrets/debug/world_types.dm +++ /dev/null @@ -1,19 +0,0 @@ -/datum/admin_secret_item/debug/instance_type_count - name = "Instance Type Count" - warn_before_use = "This is a potentially long-running operation." - -/datum/admin_secret_item/debug/instance_type_count/do_execute(var/mob/user) - var/instance_count_by_type = list() - - for(var/datum/thing in world) // Atoms (don't believe its lies) - instance_count_by_type[thing.type]++ - - for (var/datum/thing) // Datums - instance_count_by_type[thing.type]++ - - for (var/client/thing) // Clients - instance_count_by_type[thing.type]++ - - for(var/instance_type in instance_count_by_type) - var/instance_count = instance_count_by_type[instance_type] - to_chat(user, "[instance_type] - [instance_count]") diff --git a/code/modules/admin/secrets/fun_secrets/break_all_lights.dm b/code/modules/admin/secrets/fun_secrets/break_all_lights.dm deleted file mode 100644 index 2256d4f716809..0000000000000 --- a/code/modules/admin/secrets/fun_secrets/break_all_lights.dm +++ /dev/null @@ -1,7 +0,0 @@ -/datum/admin_secret_item/fun_secret/break_all_lights - name = "Break All Lights" - -/datum/admin_secret_item/fun_secret/break_all_lights/execute(var/mob/user) - . = ..() - if(.) - lightsout(0,0) diff --git a/code/modules/admin/secrets/fun_secrets/break_some_lights.dm b/code/modules/admin/secrets/fun_secrets/break_some_lights.dm deleted file mode 100644 index 70b9eaf8061fa..0000000000000 --- a/code/modules/admin/secrets/fun_secrets/break_some_lights.dm +++ /dev/null @@ -1,7 +0,0 @@ -/datum/admin_secret_item/fun_secret/break_some_lights - name = "Break Some Lights" - -/datum/admin_secret_item/fun_secret/break_some_lights/execute(var/mob/user) - . = ..() - if(.) - lightsout(1,2) diff --git a/code/modules/admin/secrets/fun_secrets/change_credits.dm b/code/modules/admin/secrets/fun_secrets/change_credits.dm deleted file mode 100644 index cd39327a20d94..0000000000000 --- a/code/modules/admin/secrets/fun_secrets/change_credits.dm +++ /dev/null @@ -1,37 +0,0 @@ -GLOBAL_VAR_INIT(end_credits_song, null) -GLOBAL_VAR_INIT(end_credits_title, null) - -/datum/admin_secret_item/fun_secret/change_credits_song - name = "Change End Credits Song" - - -/datum/admin_secret_item/fun_secret/change_credits_song/do_execute() - set waitfor = FALSE - var/list/available = decls_repository.get_decls_of_subtype(/decl/audio/track) - var/list/tracks = list() - for (var/key in available) - var/decl/audio/track/track = available[key] - tracks[track.title] = track - available = null - var/data = input(usr, "Select Credits Track", "Credits Track") as null | anything in tracks - if (isnull(data)) - return - var/decl/audio/track/track = tracks[tracks] - if (!track) - return - GLOB.end_credits_song = track.source - - - -/datum/admin_secret_item/fun_secret/change_credits_title - name = "Change End Credits Title" - - -/datum/admin_secret_item/fun_secret/change_credits_title/do_execute() - set waitfor = FALSE - var/data = input(usr, "Enter Credits Title", "Credits Title") as null | text - if (isnull(data)) - return - if (data == "") - data = null - GLOB.end_credits_title = data diff --git a/code/modules/admin/secrets/fun_secrets/fix_all_lights.dm b/code/modules/admin/secrets/fun_secrets/fix_all_lights.dm deleted file mode 100644 index 40ffa73cb153c..0000000000000 --- a/code/modules/admin/secrets/fun_secrets/fix_all_lights.dm +++ /dev/null @@ -1,10 +0,0 @@ -/datum/admin_secret_item/fun_secret/fix_all_lights - name = "Fix All Lights" - -/datum/admin_secret_item/fun_secret/fix_all_lights/execute(var/mob/user) - . = ..() - if(!.) - return - - for(var/obj/machinery/light/L in world) - L.fix() diff --git a/code/modules/admin/secrets/fun_secrets/make_all_areas_powered.dm b/code/modules/admin/secrets/fun_secrets/make_all_areas_powered.dm deleted file mode 100644 index 1c5f1cfdda7d2..0000000000000 --- a/code/modules/admin/secrets/fun_secrets/make_all_areas_powered.dm +++ /dev/null @@ -1,7 +0,0 @@ -/datum/admin_secret_item/fun_secret/make_all_areas_powered - name = "Make All Areas Powered" - -/datum/admin_secret_item/fun_secret/make_all_areas_powered/execute(var/mob/user) - . = ..() - if(.) - power_restore() diff --git a/code/modules/admin/secrets/fun_secrets/make_all_areas_unpowered.dm b/code/modules/admin/secrets/fun_secrets/make_all_areas_unpowered.dm deleted file mode 100644 index 9e4df53ef2cd5..0000000000000 --- a/code/modules/admin/secrets/fun_secrets/make_all_areas_unpowered.dm +++ /dev/null @@ -1,7 +0,0 @@ -/datum/admin_secret_item/fun_secret/make_all_areas_unpowered - name = "Make All Areas Unpowered" - -/datum/admin_secret_item/fun_secret/make_all_areas_unpowered/execute(var/mob/user) - . = ..() - if(.) - power_failure() diff --git a/code/modules/admin/secrets/fun_secrets/power_all_smes.dm b/code/modules/admin/secrets/fun_secrets/power_all_smes.dm deleted file mode 100644 index 2320bcf2cb105..0000000000000 --- a/code/modules/admin/secrets/fun_secrets/power_all_smes.dm +++ /dev/null @@ -1,7 +0,0 @@ -/datum/admin_secret_item/fun_secret/power_all_smes - name = "Power All SMES" - -/datum/admin_secret_item/fun_secret/power_all_smes/execute(var/mob/user) - . = ..() - if(.) - power_restore_quick() diff --git a/code/modules/admin/secrets/fun_secrets/waddle.dm b/code/modules/admin/secrets/fun_secrets/waddle.dm deleted file mode 100644 index 131d53219926a..0000000000000 --- a/code/modules/admin/secrets/fun_secrets/waddle.dm +++ /dev/null @@ -1,22 +0,0 @@ -/datum/admin_secret_item/fun_secret/waddle - name = "Toggle Waddling" - var/waddling = FALSE - -/datum/admin_secret_item/fun_secret/waddle/do_execute(var/mob/user) - waddling = !waddling - if(waddling) - GLOB.moved_event.register_global(src, .proc/waddle) - else - GLOB.moved_event.unregister_global(src, .proc/waddle) - -/datum/admin_secret_item/fun_secret/waddle/proc/waddle(atom/movable/AM) - var/mob/living/L = AM - if(!istype(L) || L.incapacitated() || L.lying) - return - animate(L, pixel_z = 4, time = 0) - animate( - pixel_z = 0, - transform = matrix().Update(rotation = pick(-12, 0, 12)), - time = 2 - ) - animate(pixel_z = 0, transform = matrix(), time = 0) diff --git a/code/modules/admin/secrets/investigation/attack_logs.dm b/code/modules/admin/secrets/investigation/attack_logs.dm deleted file mode 100644 index ebdc808c6a570..0000000000000 --- a/code/modules/admin/secrets/investigation/attack_logs.dm +++ /dev/null @@ -1,224 +0,0 @@ -/datum/admin_secret_item/investigation/attack_logs - name = "Attack Logs" - var/list/filters_per_client - -/datum/admin_secret_item/investigation/attack_logs/New() - ..() - filters_per_client = list() - -/datum/admin_secret_item/investigation/attack_logs/execute(var/mob/user) - . = ..() - if(!.) - return - var/dat = list() - dat += "Refresh | " - dat += get_filter_html(user) - dat += " | Reset" - dat += "
              " - dat += "" - dat += "" - - for(var/log in attack_log_repository.attack_logs_) - var/datum/attack_log/al = log - if(filter_log(user, al)) - continue - - dat += "" - - if(al.attacker) - dat += "" - else - dat += "" - - dat += "" - - dat += "" - - if(al.victim) - dat += "" - else - dat += "" - - dat += "" - dat += "" - dat += "
              TimeAttackerIntentZone SelVictim
              [al.station_time][al.attacker.key_name(check_if_offline = FALSE)] PP[al.intent][al.zone_sel][al.victim.key_name(check_if_offline = FALSE)] PP
              [al.message]" - if(al.location) - dat += " JMP" - dat += "
              " - - var/datum/browser/popup = new(user, "admin_attack_logs", "Attack Logs", 800, 400) - popup.set_content(jointext(dat, null)) - popup.open() - -/datum/admin_secret_item/investigation/attack_logs/Topic(href, href_list) - . = ..() - if(.) - return - if(href_list["refresh"]) - . = 1 - if(href_list["reset"]) - reset_user_filters(usr) - . = 1 - if(.) - execute(usr) - -/datum/admin_secret_item/investigation/attack_logs/proc/get_user_filters(var/mob/user) - if(!user.client) - return list() - - . = filters_per_client[user.client] - if(!.) - . = list() - for(var/af_type in subtypesof(/attack_filter)) - var/attack_filter/af = af_type - if(initial(af.category) == af_type) - continue - . += new af_type(src) - filters_per_client[user.client] = . - -/datum/admin_secret_item/investigation/attack_logs/proc/get_filter_html(user) - . = list() - for(var/filter in get_user_filters(user)) - var/attack_filter/af = filter - . += af.get_html() - . = jointext(.," | ") - -/datum/admin_secret_item/investigation/attack_logs/proc/filter_log(user, var/datum/attack_log/al) - for(var/filter in get_user_filters(user)) - var/attack_filter/af = filter - if(af.filter_attack(al)) - return TRUE - return FALSE - -/datum/admin_secret_item/investigation/attack_logs/proc/reset_user_filters(user) - for(var/filter in get_user_filters(user)) - var/attack_filter/af = filter - af.reset() - -/attack_filter - var/category = /attack_filter - var/datum/admin_secret_item/investigation/attack_logs/holder - -/attack_filter/New(var/holder) - ..() - src.holder = holder - -/attack_filter/Topic(href, href_list) - if(..()) - return TRUE - if(OnTopic(href_list)) - holder.execute(usr) - return TRUE - -/attack_filter/proc/get_html() - return - -/attack_filter/proc/reset() - return - -/attack_filter/proc/filter_attack(var/datum/attack_log/al) - return FALSE - -/attack_filter/proc/OnTopic(href_list) - return FALSE - -/* -* Filter logs with one or more missing clients -*/ -/attack_filter/no_client - var/filter_missing_clients = TRUE - -/attack_filter/no_client/get_html() - . = list() - . += "Must have clients: " - if(filter_missing_clients) - . += "YesNo" - else - . += "YesNo" - . = jointext(.,null) - -/attack_filter/no_client/OnTopic(href_list) - if(href_list["yes"] && !filter_missing_clients) - filter_missing_clients = TRUE - return TRUE - if(href_list["no"] && filter_missing_clients) - filter_missing_clients = FALSE - return TRUE - -/attack_filter/no_client/reset() - filter_missing_clients = initial(filter_missing_clients) - -/attack_filter/no_client/filter_attack(var/datum/attack_log/al) - if(!filter_missing_clients) - return FALSE - if(al.attacker && al.attacker.client.ckey == NO_CLIENT_CKEY) - return TRUE - if(al.victim && al.victim.client.ckey == NO_CLIENT_CKEY) - return TRUE - return FALSE - -/* - Either subject must be the selected client -*/ -/attack_filter/must_be_given_ckey - var/ckey_filter - var/check_attacker = TRUE - var/check_victim = TRUE - var/description = "Either ckey is" - -/attack_filter/must_be_given_ckey/reset() - ckey_filter = null - -/attack_filter/must_be_given_ckey/get_html() - return "[description]: [ckey_filter ? ckey_filter : "*ANY*"]" - -/attack_filter/must_be_given_ckey/OnTopic(href_list) - if(!href_list["select_ckey"]) - return - var/ckey = input("Select ckey to filter on","Select ckey", ckey_filter) as null|anything in get_ckeys() - if(ckey) - if(ckey == "*ANY*") - ckey_filter = null - else - ckey_filter = ckey - return TRUE - -/attack_filter/must_be_given_ckey/proc/get_ckeys() - . = list() - for(var/log in attack_log_repository.attack_logs_) - var/datum/attack_log/al = log - if(check_attacker && al.attacker && al.attacker.client.ckey != NO_CLIENT_CKEY) - . |= al.attacker.client.ckey - if(check_victim && al.victim && al.victim.client.ckey != NO_CLIENT_CKEY) - . |= al.victim.client.ckey - . = sortList(.) - . += "*ANY*" - -/attack_filter/must_be_given_ckey/filter_attack(var/datum/attack_log/al) - if(!ckey_filter) - return FALSE - if(check_attacker && al.attacker && al.attacker.client.ckey == ckey_filter) - return FALSE - if(check_victim && al.victim && al.victim.client.ckey == ckey_filter) - return FALSE - return TRUE - -/* - Attacker must be the selected client -*/ -/attack_filter/must_be_given_ckey/attacker - description = "Attacker ckey is" - check_victim = FALSE - -/attack_filter/must_be_given_ckey/attacker/filter_attack(al) - return ..(al, TRUE, FALSE) - -/* - Victim must be the selected client -*/ -/attack_filter/must_be_given_ckey/victim - description = "Victim ckey is" - check_attacker = FALSE - -/attack_filter/must_be_given_ckey/victim/filter_attack(al) - return ..(al, FALSE, TRUE) diff --git a/code/modules/admin/secrets/investigation/view_persistant.dm b/code/modules/admin/secrets/investigation/view_persistant.dm deleted file mode 100644 index 53a1965c31fee..0000000000000 --- a/code/modules/admin/secrets/investigation/view_persistant.dm +++ /dev/null @@ -1,7 +0,0 @@ -/datum/admin_secret_item/investigation/view_persistant - name = "View Persistant Data" - -/datum/admin_secret_item/investigation/view_persistant/execute(var/mob/user) - . = ..() - if(.) - SSpersistence.show_info(user) \ No newline at end of file diff --git a/code/modules/admin/spam_prevention.dm b/code/modules/admin/spam_prevention.dm deleted file mode 100644 index 7a30abd775594..0000000000000 --- a/code/modules/admin/spam_prevention.dm +++ /dev/null @@ -1,44 +0,0 @@ -GLOBAL_LIST_EMPTY(ckey_to_actions) -GLOBAL_LIST_EMPTY(ckey_to_act_time) -GLOBAL_LIST_EMPTY(ckey_punished_for_spam) // this round; to avoid redundant record-keeping. - -// Should be checked on all instant client verbs. -/proc/user_acted(client/C) - var/ckey = C && C.ckey - if(!ckey) - return FALSE - if (config.do_not_prevent_spam) - return TRUE - var/time = world.time - if(GLOB.ckey_to_act_time[ckey] + config.act_interval < time) - GLOB.ckey_to_act_time[ckey] = time - GLOB.ckey_to_actions[ckey] = 1 - return TRUE - if(GLOB.ckey_to_actions[ckey] <= config.max_acts_per_interval) - GLOB.ckey_to_actions[ckey]++ - return TRUE - - // Punitive action - . = FALSE - log_and_message_admins("Kicking due to possible spam abuse", C) - to_chat(C, SPAN_DANGER("Possible spam abuse detected; you are being kicked from the server.")) - if(GLOB.ckey_punished_for_spam[ckey]) - qdel(C) - return - GLOB.ckey_punished_for_spam[ckey] = TRUE - qdel(C) - -/client/Center() - if(!user_acted(src)) - return - return ..() - -/client/DblClick() - if(!user_acted(src)) - return - return ..() - -/client/MouseDrop() - if(!user_acted(src)) - return - return ..() diff --git a/code/modules/admin/ticket.dm b/code/modules/admin/ticket.dm deleted file mode 100644 index f96c93caa795b..0000000000000 --- a/code/modules/admin/ticket.dm +++ /dev/null @@ -1,257 +0,0 @@ -var/global/list/tickets = list() -var/global/list/ticket_panels = list() - -/datum/ticket - var/datum/client_lite/owner - var/list/assigned_admins = list() - var/status = TICKET_OPEN - var/list/msgs = list() - var/datum/client_lite/closed_by - var/id - var/opened_time - var/timeout = FALSE - -/datum/ticket/New(var/datum/client_lite/owner) - src.owner = owner - tickets |= src - id = tickets.len - opened_time = world.time - addtimer(CALLBACK(src, .proc/timeoutcheck), 5 MINUTES) - -/datum/ticket/proc/timeoutcheck() - if(status == TICKET_OPEN) - timeout = TRUE - close() - -/datum/ticket/proc/close(var/datum/client_lite/closed_by) - if(status == TICKET_CLOSED) - return - - if(status == TICKET_ASSIGNED && !((closed_by.ckey in assigned_admin_ckeys()) || owner.ckey == closed_by.ckey) && alert(client_by_ckey(closed_by.ckey), "You are not assigned to this ticket. Are you sure you want to close it?", "Close ticket?" , "Yes" , "No") != "Yes") - return - - if(timeout == FALSE) - var/client/real_client = client_by_ckey(closed_by.ckey) - if(status == TICKET_ASSIGNED && (!real_client || !real_client.holder)) // non-admins can only close a ticket if no admin has taken it - return - - src.status = TICKET_CLOSED - - if(timeout == TRUE) - to_chat(client_by_ckey(src.owner.ckey), "Your ticket has timed out. Please adminhelp again if your issue is not resolved.") - else - src.closed_by = closed_by - to_chat(client_by_ckey(src.owner.ckey), "Your ticket has been closed by [closed_by.key].") - message_staff("[src.owner.key_name(0)]'s ticket has been closed by [closed_by.key].") - send2adminirc("[src.owner.key_name(0)]'s ticket has been closed by [closed_by.key].") - - update_ticket_panels() - - return 1 - -/datum/ticket/proc/take(var/datum/client_lite/assigned_admin) - if(status == TICKET_CLOSED) - return - - if(assigned_admin.ckey == owner.ckey) - return - - if(status == TICKET_ASSIGNED && ((assigned_admin.ckey in assigned_admin_ckeys()) || alert(client_by_ckey(assigned_admin.ckey), "This ticket is already assigned. Do you want to add yourself to the ticket?", "Join ticket?" , "Yes" , "No") != "Yes")) - return - - assigned_admins |= assigned_admin - src.status = TICKET_ASSIGNED - - message_staff("[assigned_admin.key] has assigned themself to [src.owner.key_name(0)]'s ticket.") - send2adminirc("[assigned_admin.key] has assigned themself to [src.owner.key_name(0)]'s ticket.") - to_chat(client_by_ckey(src.owner.ckey), "[assigned_admin.key] has added themself to your ticket and should respond shortly. Thanks for your patience!") - - update_ticket_panels() - - return 1 - -/datum/ticket/proc/assigned_admin_ckeys() - . = list() - - for(var/datum/client_lite/assigned_admin in assigned_admins) - . |= assigned_admin.ckey - -/datum/ticket/proc/assigned_admin_keys() - . = list() - - for(var/datum/client_lite/assigned_admin in assigned_admins) - . |= assigned_admin.key - -/proc/get_open_ticket_by_client(var/datum/client_lite/owner) - for(var/datum/ticket/ticket in tickets) - if(ticket.owner.ckey == owner.ckey && (ticket.status == TICKET_OPEN || ticket.status == TICKET_ASSIGNED)) - return ticket // there should only be one open ticket by a client at a time, so no need to keep looking - -/datum/ticket/proc/is_active() - if(status != TICKET_ASSIGNED) - return 0 - - for(var/datum/client_lite/admin in assigned_admins) - var/client/admin_client = client_by_ckey(admin.ckey) - if(admin_client && !admin_client.is_afk()) - return 1 - - return 0 - -/datum/ticket_msg - var/msg_from - var/msg_to - var/msg - var/time_stamp - -/datum/ticket_msg/New(var/msg_from, var/msg_to, var/msg) - src.msg_from = msg_from - src.msg_to = msg_to - src.msg = msg - src.time_stamp = time_stamp() - -/datum/ticket_panel - var/datum/ticket/open_ticket = null - var/datum/browser/ticket_panel_window - -/datum/ticket_panel/proc/get_dat() - var/client/C = ticket_panel_window.user.client - if(!C) - return - - var/list/dat = list() - - var/list/ticket_dat = list() - for(var/id = tickets.len, id >= 1, id--) - var/datum/ticket/ticket = tickets[id] - if(C.holder || ticket.owner.ckey == C.ckey) - var/client/owner_client = client_by_ckey(ticket.owner.ckey) - var/open = 0 - var/status = "Unknown status" - var/color = "#6aa84f" - switch(ticket.status) - if(TICKET_OPEN) - open = 1 - status = "Opened [round((world.time - ticket.opened_time) / (1 MINUTE))] minute\s ago, unassigned" - if(TICKET_ASSIGNED) - open = 2 - status = "Assigned to [english_list(ticket.assigned_admin_keys(), "no one")]" - color = "#ffffff" - if(TICKET_CLOSED) - if(ticket.timeout == FALSE) - status = "Closed by [ticket.closed_by.key]" - else - status = "Closed by timeout" - color = "#cc2222" - ticket_dat += "
            • " - if(open_ticket && open_ticket == ticket) - ticket_dat += "" - ticket_dat += "Ticket #[id] - [ticket.owner.key_name(0)] [owner_client ? "" : "(DC)"]
              [status]
              VIEW" - if(open) - ticket_dat += " - PM" - if(C.holder) - ticket_dat += " - [(open == 1) ? "TAKE" : "JOIN"]" - if(ticket.status != TICKET_CLOSED && (C.holder || ticket.status == TICKET_OPEN)) - ticket_dat += " - CLOSE" - if(C.holder) - var/ref_mob = "" - if(owner_client) - ref_mob = "\ref[owner_client.mob]" - ticket_dat += " - ? - PP - VV - DN[owner_client ? "- [admin_jump_link(owner_client, src)]" : ""]" - if(open_ticket && open_ticket == ticket) - ticket_dat += "
              " - ticket_dat += "
            • " - - if(ticket_dat.len) - dat += "

              Available tickets:

                [jointext(ticket_dat, null)]
              " - - if(open_ticket) - dat += "

              \[X\] Messages for ticket #[open_ticket.id]:

              " - - var/list/msg_dat = list() - for(var/datum/ticket_msg/msg in open_ticket.msgs) - var/msg_to = msg.msg_to ? msg.msg_to : "Adminhelp" - msg_dat += "
            • \[[msg.time_stamp]\] [msg.msg_from] -> [msg_to]: [C.holder ? generate_ahelp_key_words(C.mob, msg.msg) : msg.msg]
            • " - - if(msg_dat.len) - dat += "
                [jointext(msg_dat, null)]
              " - else - dat += "

              No messages to display.

              " - else - dat += "

              No tickets to display.

              " - dat += "" - - return jointext(dat, null) - -/datum/ticket_panel/Topic(href, href_list) - if(usr && usr.client && usr != ticket_panel_window.user) - if(href_list["close"]) // catch the case where a user switches mobs, then closes the window that was linked to the old mob - ticket_panels -= usr.client - else - usr.client.view_tickets() - var/datum/ticket_panel/new_panel = ticket_panels[usr.client] - new_panel.open_ticket = open_ticket - new_panel.Topic(href, href_list) - return - - ..() - - if(href_list["close"]) - ticket_panels -= usr.client - - switch(href_list["action"]) - if("unview") - open_ticket = null - ticket_panel_window.set_content(get_dat()) - ticket_panel_window.update() - - var/datum/ticket/ticket = locate(href_list["ticket"]) - if(!ticket) - return - - switch(href_list["action"]) - if("view") - open_ticket = ticket - ticket_panel_window.set_content(get_dat()) - ticket_panel_window.update() - if("take") - ticket.take(client_repository.get_lite_client(usr.client)) - if("close") - ticket.close(client_repository.get_lite_client(usr.client)) - if("pm") - ticket.take(client_repository.get_lite_client(usr.client)) - if(usr.client.holder && ticket.owner.ckey != usr.ckey) - usr.client.cmd_admin_pm(client_by_ckey(ticket.owner.ckey), ticket = ticket) - else if(ticket.status == TICKET_ASSIGNED) - // manually check that the target client exists here as to not spam the usr for each logged out admin on the ticket - var/admin_found = 0 - for(var/datum/client_lite/admin in ticket.assigned_admins) - var/client/admin_client = client_by_ckey(admin.ckey) - if(admin_client) - admin_found = 1 - usr.client.cmd_admin_pm(admin_client, ticket = ticket) - break - if(!admin_found) - to_chat(usr, "Error: Private-Message: Client not found. They may have lost connection, so please be patient!") - else - usr.client.adminhelp(input(usr,"", "adminhelp \"text\"") as text) - -/client/verb/view_tickets() - set name = "View Tickets" - set category = "Admin" - - var/datum/ticket_panel/ticket_panel = new() - ticket_panels[src] = ticket_panel - ticket_panel.ticket_panel_window = new(src.mob, "ticketpanel", "Ticket Manager", 1024, 768, ticket_panel) - - ticket_panel.ticket_panel_window.set_content(ticket_panel.get_dat()) - ticket_panel.ticket_panel_window.open() - -/proc/update_ticket_panels() - for(var/client/C in ticket_panels) - var/datum/ticket_panel/ticket_panel = ticket_panels[C] - if(C.mob != ticket_panel.ticket_panel_window.user) - C.view_tickets() - else - ticket_panel.ticket_panel_window.set_content(ticket_panel.get_dat()) - ticket_panel.ticket_panel_window.update() \ No newline at end of file diff --git a/code/modules/admin/topic.dm b/code/modules/admin/topic.dm deleted file mode 100644 index 7d06bf3466752..0000000000000 --- a/code/modules/admin/topic.dm +++ /dev/null @@ -1,2185 +0,0 @@ -/datum/admins/Topic(href, href_list) - ..() - - if(usr.client != src.owner || !check_rights(0)) - log_admin("[key_name(usr)] tried to use the admin panel without authorization.") - message_admins("[usr.key] has attempted to override the admin panel!") - return - - if(SSticker.mode && SSticker.mode.check_antagonists_topic(href, href_list)) - check_antagonists() - return - - if(href_list["dbsearchckey"] || href_list["dbsearchadmin"]) - - var/adminckey = href_list["dbsearchadmin"] - var/playerckey = href_list["dbsearchckey"] - var/playerip = href_list["dbsearchip"] - var/playercid = href_list["dbsearchcid"] - var/dbbantype = text2num(href_list["dbsearchbantype"]) - var/match = 0 - - if("dbmatch" in href_list) - match = 1 - - DB_ban_panel(playerckey, adminckey, playerip, playercid, dbbantype, match) - return - - else if(href_list["dbbanedit"]) - var/banedit = href_list["dbbanedit"] - var/banid = text2num(href_list["dbbanid"]) - if(!banedit || !banid) - return - - DB_ban_edit(banid, banedit) - return - - else if(href_list["dbbanaddtype"]) - - var/bantype = text2num(href_list["dbbanaddtype"]) - var/banckey = href_list["dbbanaddckey"] - var/banip = href_list["dbbanaddip"] - var/bancid = href_list["dbbanaddcid"] - var/banduration = text2num(href_list["dbbaddduration"]) - var/banjob = href_list["dbbanaddjob"] - var/banreason = href_list["dbbanreason"] - - banckey = ckey(banckey) - - switch(bantype) - if(BANTYPE_PERMA) - if(!banckey || !banreason) - to_chat(usr, "Not enough parameters (Requires ckey and reason)") - return - banduration = null - banjob = null - if(BANTYPE_TEMP) - if(!banckey || !banreason || !banduration) - to_chat(usr, "Not enough parameters (Requires ckey, reason and duration)") - return - banjob = null - if(BANTYPE_JOB_PERMA) - if(!banckey || !banreason || !banjob) - to_chat(usr, "Not enough parameters (Requires ckey, reason and job)") - return - banduration = null - if(BANTYPE_JOB_TEMP) - if(!banckey || !banreason || !banjob || !banduration) - to_chat(usr, "Not enough parameters (Requires ckey, reason and job)") - return - - var/mob/playermob - - for(var/mob/M in GLOB.player_list) - if(M.ckey == banckey) - playermob = M - break - - - banreason = "(MANUAL BAN) "+banreason - - if(!playermob) - if(banip) - banreason = "[banreason] (CUSTOM IP)" - if(bancid) - banreason = "[banreason] (CUSTOM CID)" - else - message_admins("Ban process: A mob matching [playermob.ckey] was found at location [playermob.x], [playermob.y], [playermob.z]. Custom ip and computer id fields replaced with the ip and computer id from the located mob") - notes_add(banckey,banreason,usr) - - DB_ban_record(bantype, playermob, banduration, banreason, banjob, null, banckey, banip, bancid ) - - else if(href_list["editrights"]) - if(!check_rights(R_PERMISSIONS)) - message_admins("[key_name_admin(usr)] attempted to edit the admin permissions without sufficient rights.") - log_admin("[key_name(usr)] attempted to edit the admin permissions without sufficient rights.") - return - - var/adm_ckey - - var/task = href_list["editrights"] - if(task == "add") - 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) - to_chat(usr, "Error: Topic 'editrights': [new_ckey] is already an admin") - return - adm_ckey = new_ckey - task = "rank" - else if(task != "show") - adm_ckey = ckey(href_list["ckey"]) - if(!adm_ckey) - to_chat(usr, "Error: Topic 'editrights': No valid ckey") - return - - var/datum/admins/D = admin_datums[adm_ckey] - - if(task == "remove") - if(alert("Are you sure you want to remove [adm_ckey]?","Message","Yes","Cancel") == "Yes") - if(!D) return - admin_datums -= adm_ckey - D.disassociate() - - message_admins("[key_name_admin(usr)] removed [adm_ckey] from the admins list") - log_admin("[key_name(usr)] removed [adm_ckey] from the admins list") - log_admin_rank_modification(adm_ckey, "Removed") - - else if(task == "rank") - var/new_rank - if(admin_ranks.len) - new_rank = input("Please select a rank", "New rank", null, null) as null|anything in (admin_ranks|"*New Rank*") - else - new_rank = input("Please select a rank", "New rank", null, null) as null|anything in list("Game Master","Game Admin", "Trial Admin", "Admin Observer","*New Rank*") - - var/rights = 0 - if(D) - rights = D.rights - switch(new_rank) - if(null,"") return - if("*New Rank*") - new_rank = input("Please input a new rank", "New custom rank", null, null) as null|text - if(config.admin_legacy_system) - new_rank = ckeyEx(new_rank) - if(!new_rank) - to_chat(usr, "Error: Topic 'editrights': Invalid rank") - return - if(config.admin_legacy_system) - if(admin_ranks.len) - if(new_rank in admin_ranks) - rights = admin_ranks[new_rank] //we typed a rank which already exists, use its rights - else - admin_ranks[new_rank] = 0 //add the new rank to admin_ranks - else - if(config.admin_legacy_system) - new_rank = ckeyEx(new_rank) - rights = admin_ranks[new_rank] //we input an existing rank, use its rights - - if(D) - D.disassociate() //remove adminverbs and unlink from client - D.rank = new_rank //update the rank - D.rights = rights //update the rights based on admin_ranks (default: 0) - else - D = new /datum/admins(new_rank, rights, adm_ckey) - - var/client/C = GLOB.ckey_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 - - to_chat(C, "[key_name_admin(usr)] has set your admin rank to: [new_rank].") - message_admins("[key_name_admin(usr)] edited the admin rank of [adm_ckey] to [new_rank]") - log_admin("[key_name(usr)] edited the admin rank of [adm_ckey] to [new_rank]") - log_admin_rank_modification(adm_ckey, new_rank) - - else if(task == "permissions") - if(!D) return - var/list/permissionlist = list() - for(var/i=1, i<=R_MAXPERMISSION, i = SHIFTL(i, 1)) - permissionlist[rights2text(i)] = i - var/new_permission = input("Select a permission to turn on/off", "Permission toggle", null, null) as null|anything in permissionlist - if(!new_permission) return - D.rights ^= permissionlist[new_permission] - - var/client/C = GLOB.ckey_directory[adm_ckey] - to_chat(C, "[key_name_admin(usr)] has toggled your permission: [new_permission].") - message_admins("[key_name_admin(usr)] toggled the [new_permission] permission of [adm_ckey]") - log_admin("[key_name(usr)] toggled the [new_permission] permission of [adm_ckey]") - log_admin_permission_modification(adm_ckey, permissionlist[new_permission]) - - edit_admin_permissions() - - else if(href_list["call_shuttle"]) - - if(!check_rights(R_ADMIN)) return - - if(!SSticker.mode || !evacuation_controller) - return - - if(SSticker.mode.name == "blob") - alert("You can't call the shuttle during blob!") - return - - switch(href_list["call_shuttle"]) - if("1") - if (evacuation_controller.call_evacuation(usr, TRUE)) - log_and_message_admins("called an evacuation.") - if("2") - if (evacuation_controller.cancel_evacuation()) - log_and_message_admins("cancelled an evacuation.") - - href_list["secretsadmin"] = "check_antagonist" - - else if(href_list["delay_round_end"]) - if(!check_rights(R_SERVER)) return - - SSticker.delay_end = !SSticker.delay_end - log_and_message_admins("[SSticker.delay_end ? "delayed the round end" : "has made the round end normally"].") - href_list["secretsadmin"] = "check_antagonist" - - else if(href_list["simplemake"]) - - if(!check_rights(R_SPAWN)) return - - var/mob/M = locate(href_list["mob"]) - if(!ismob(M)) - to_chat(usr, "This can only be used on instances of type /mob") - return - - var/delmob = 0 - switch(alert("Delete old mob?","Message","Yes","No","Cancel")) - if("Cancel") return - if("Yes") delmob = 1 - - log_and_message_admins("has used rudimentary transformation on [key_name_admin(M)]. Transforming to [href_list["simplemake"]]; deletemob=[delmob]") - - switch(href_list["simplemake"]) - if("observer") M.change_mob_type( /mob/observer/ghost , null, null, delmob ) - if("nymph") M.change_mob_type( /mob/living/carbon/alien/diona , null, null, delmob ) - if("human") M.change_mob_type( /mob/living/carbon/human , null, null, delmob, href_list["species"]) - if("slime") M.change_mob_type( /mob/living/carbon/slime , null, null, delmob ) - if("monkey") M.change_mob_type( /mob/living/carbon/human/monkey , null, null, delmob ) - if("robot") M.change_mob_type( /mob/living/silicon/robot , null, null, delmob ) - if("cat") M.change_mob_type( /mob/living/simple_animal/passive/cat , null, null, delmob ) - if("runtime") M.change_mob_type( /mob/living/simple_animal/passive/cat/fluff/Runtime , null, null, delmob ) - if("corgi") M.change_mob_type( /mob/living/simple_animal/passive/corgi , null, null, delmob ) - if("ian") M.change_mob_type( /mob/living/simple_animal/passive/corgi/Ian , null, null, delmob ) - if("crab") M.change_mob_type( /mob/living/simple_animal/crab , null, null, delmob ) - if("coffee") M.change_mob_type( /mob/living/simple_animal/crab/Coffee , null, null, delmob ) - if("parrot") M.change_mob_type( /mob/living/simple_animal/hostile/retaliate/parrot , null, null, delmob ) - if("polyparrot") M.change_mob_type( /mob/living/simple_animal/hostile/retaliate/parrot/Poly , null, null, delmob ) - if("constructarmoured") M.change_mob_type( /mob/living/simple_animal/construct/armoured , null, null, delmob ) - if("constructbuilder") M.change_mob_type( /mob/living/simple_animal/construct/builder , null, null, delmob ) - if("constructwraith") M.change_mob_type( /mob/living/simple_animal/construct/wraith , null, null, delmob ) - if("shade") M.change_mob_type( /mob/living/simple_animal/shade , null, null, delmob ) - - - /////////////////////////////////////new ban stuff - else if(href_list["unbanf"]) - if(!check_rights(R_BAN)) return - - var/banfolder = href_list["unbanf"] - Banlist.cd = "/base/[banfolder]" - var/key = Banlist["key"] - if(alert(usr, "Are you sure you want to unban [key]?", "Confirmation", "Yes", "No") == "Yes") - if(RemoveBan(banfolder)) - unbanpanel() - else - alert(usr, "This ban has already been lifted / does not exist.", "Error", "Ok") - unbanpanel() - - else if(href_list["warn"]) - usr.client.warn(href_list["warn"]) - - else if(href_list["unbane"]) - if(!check_rights(R_BAN)) return - - UpdateTime() - var/reason - - var/banfolder = href_list["unbane"] - Banlist.cd = "/base/[banfolder]" - var/reason2 = Banlist["reason"] - var/temp = Banlist["temp"] - - var/minutes = Banlist["minutes"] - - var/banned_key = Banlist["key"] - Banlist.cd = "/base" - - var/duration - - switch(alert("Temporary Ban?",,"Yes","No")) - if("Yes") - temp = 1 - var/mins = 0 - if(minutes > CMinutes) - mins = minutes - CMinutes - mins = input(usr,"How long (in minutes)? (Default: 1440)","Ban time",mins ? mins : 1440) as num|null - if(!mins) return - mins = min(525599,mins) - minutes = CMinutes + mins - duration = GetExp(minutes) - reason = sanitize(input(usr,"Reason?","reason",reason2) as text|null) - if(!reason) return - if("No") - temp = 0 - duration = "Perma" - reason = sanitize(input(usr,"Reason?","reason",reason2) as text|null) - if(!reason) return - - ban_unban_log_save("[key_name(usr)] edited [banned_key]'s ban. Reason: [reason] Duration: [duration]") - log_and_message_admins("edited [banned_key]'s ban. Reason: [reason] Duration: [duration]") - Banlist.cd = "/base/[banfolder]" - to_save(Banlist["reason"], reason) - to_save(Banlist["temp"], temp) - to_save(Banlist["minutes"], minutes) - to_save(Banlist["bannedby"], usr.ckey) - Banlist.cd = "/base" - unbanpanel() - - /////////////////////////////////////new ban stuff - - else if(href_list["jobban2"]) -// if(!check_rights(R_BAN)) return - - var/mob/M = locate(href_list["jobban2"]) - if(!ismob(M)) - to_chat(usr, "This can only be used on instances of type /mob") - return - - if(!(LAST_CKEY(M))) //sanity - to_chat(usr, "This mob has no ckey") - return - - var/dat = "" - var/header = "Job-Ban Panel: [M.name]" - var/body - var/jobs = "" - - /***********************************WARNING!************************************ - The jobban stuff looks mangled and disgusting - But it looks beautiful in-game - -Nodrak - ************************************WARNING!***********************************/ - var/counter = 0 -//Regular jobs - //Command (Blue) - jobs += "" - jobs += "" - for(var/jobPos in SSjobs.titles_by_department(COM)) - if(!jobPos) continue - var/datum/job/job = SSjobs.get_by_title(jobPos) - if(!job) continue - - if(jobban_isbanned(M, job.title)) - jobs += "" - counter++ - else - jobs += "" - counter++ - - if(counter >= 6) //So things dont get squiiiiished! - jobs += "" - counter = 0 - jobs += "
              Command Positions
              [replacetext_char(job.title, " ", " ")][replacetext_char(job.title, " ", " ")]
              " - - //Command Support (Sky Blue) - jobs += "" - jobs += "" - for(var/jobPos in SSjobs.titles_by_department(SPT)) - if(!jobPos) continue - var/datum/job/job = SSjobs.get_by_title(jobPos) - if(!job) continue - - if(jobban_isbanned(M, job.title)) - jobs += "" - counter++ - else - jobs += "" - counter++ - - if(counter >= 6) //So things dont get squiiiiished! - jobs += "" - counter = 0 - jobs += "
              Command Support Positions
              [replacetext_char(job.title, " ", " ")][replacetext_char(job.title, " ", " ")]
              " - - //Security (Red) - counter = 0 - jobs += "" - jobs += "" - for(var/jobPos in SSjobs.titles_by_department(SEC)) - if(!jobPos) continue - var/datum/job/job = SSjobs.get_by_title(jobPos) - if(!job) continue - - if(jobban_isbanned(M, job.title)) - jobs += "" - counter++ - else - jobs += "" - counter++ - - if(counter >= 5) //So things dont get squiiiiished! - jobs += "" - counter = 0 - jobs += "
              Security Positions
              [replacetext_char(job.title, " ", " ")][replacetext_char(job.title, " ", " ")]
              " - - //Engineering (Yellow) - counter = 0 - jobs += "" - jobs += "" - for(var/jobPos in SSjobs.titles_by_department(ENG)) - if(!jobPos) continue - var/datum/job/job = SSjobs.get_by_title(jobPos) - if(!job) continue - - if(jobban_isbanned(M, job.title)) - jobs += "" - counter++ - else - jobs += "" - counter++ - - if(counter >= 5) //So things dont get squiiiiished! - jobs += "" - counter = 0 - jobs += "
              Engineering Positions
              [replacetext_char(job.title, " ", " ")][replacetext_char(job.title, " ", " ")]
              " - - //Medical (White) - counter = 0 - jobs += "" - jobs += "" - for(var/jobPos in SSjobs.titles_by_department(MED)) - if(!jobPos) continue - var/datum/job/job = SSjobs.get_by_title(jobPos) - if(!job) continue - - if(jobban_isbanned(M, job.title)) - jobs += "" - counter++ - else - jobs += "" - counter++ - - if(counter >= 5) //So things dont get squiiiiished! - jobs += "" - counter = 0 - jobs += "
              Medical Positions
              [replacetext_char(job.title, " ", " ")][replacetext_char(job.title, " ", " ")]
              " - - //Science (Purple) - counter = 0 - jobs += "" - jobs += "" - for(var/jobPos in SSjobs.titles_by_department(SCI)) - if(!jobPos) continue - var/datum/job/job = SSjobs.get_by_title(jobPos) - if(!job) continue - - if(jobban_isbanned(M, job.title)) - jobs += "" - counter++ - else - jobs += "" - counter++ - - if(counter >= 5) //So things dont get squiiiiished! - jobs += "" - counter = 0 - jobs += "
              Science Positions
              [replacetext_char(job.title, " ", " ")][replacetext_char(job.title, " ", " ")]
              " - - //Exploration (Pale Purple) - jobs += "" - jobs += "" - for(var/jobPos in SSjobs.titles_by_department(EXP)) - if(!jobPos) continue - var/datum/job/job = SSjobs.get_by_title(jobPos) - if(!job) continue - - if(jobban_isbanned(M, job.title)) - jobs += "" - counter++ - else - jobs += "" - counter++ - - if(counter >= 6) //So things dont get squiiiiished! - jobs += "" - counter = 0 - jobs += "
              Exploration Positions
              [replacetext_char(job.title, " ", " ")][replacetext_char(job.title, " ", " ")]
              " - - //Service (Tea Green) - jobs += "" - jobs += "" - for(var/jobPos in SSjobs.titles_by_department(SRV)) - if(!jobPos) continue - var/datum/job/job = SSjobs.get_by_title(jobPos) - if(!job) continue - - if(jobban_isbanned(M, job.title)) - jobs += "" - counter++ - else - jobs += "" - counter++ - - if(counter >= 6) //So things dont get squiiiiished! - jobs += "" - counter = 0 - jobs += "
              Service Positions
              [replacetext_char(job.title, " ", " ")][replacetext_char(job.title, " ", " ")]
              " - - - //Supply (Khaki) - jobs += "" - jobs += "" - for(var/jobPos in SSjobs.titles_by_department(SUP)) - if(!jobPos) continue - var/datum/job/job = SSjobs.get_by_title(jobPos) - if(!job) continue - - if(jobban_isbanned(M, job.title)) - jobs += "" - counter++ - else - jobs += "" - counter++ - - if(counter >= 6) //So things dont get squiiiiished! - jobs += "" - counter = 0 - jobs += "
              Supply Positions
              [replacetext_char(job.title, " ", " ")][replacetext_char(job.title, " ", " ")]
              " - - //Civilian (Grey) - counter = 0 - jobs += "" - jobs += "" - for(var/jobPos in SSjobs.titles_by_department(CIV)) - if(!jobPos) continue - var/datum/job/job = SSjobs.get_by_title(jobPos) - if(!job) continue - - if(jobban_isbanned(M, job.title)) - jobs += "" - counter++ - else - jobs += "" - counter++ - - if(counter >= 5) //So things dont get squiiiiished! - jobs += "" - counter = 0 - - if(jobban_isbanned(M, "Internal Affairs Agent")) - jobs += "" - else - jobs += "" - - jobs += "
              Civilian Positions
              [replacetext_char(job.title, " ", " ")][replacetext_char(job.title, " ", " ")]
              Internal Affairs AgentInternal Affairs Agent
              " - - //Non-Human (Green) - counter = 0 - jobs += "" - jobs += "" - for(var/jobPos in SSjobs.titles_by_department(MSC)) - if(!jobPos) continue - var/datum/job/job = SSjobs.get_by_title(jobPos) - if(!job) continue - - if(jobban_isbanned(M, job.title)) - jobs += "" - counter++ - else - jobs += "" - counter++ - - if(counter >= 5) //So things dont get squiiiiished! - jobs += "" - counter = 0 - - //pAI isn't technically a job, but it goes in here. - - if(jobban_isbanned(M, "pAI")) - jobs += "" - else - jobs += "" - if(jobban_isbanned(M, "AntagHUD")) - jobs += "" - else - jobs += "" - jobs += "
              Non-human Positions
              [replacetext_char(job.title, " ", " ")][replacetext_char(job.title, " ", " ")]
              pAIpAIAntagHUDAntagHUD
              " - - //Antagonist (Orange) - jobs += "" - jobs += "" - - // Antagonists. - #define ANTAG_COLUMNS 5 - var/list/all_antag_types = GLOB.all_antag_types_ - var/i = 1 - for(var/antag_type in all_antag_types) - var/datum/antagonist/antag = all_antag_types[antag_type] - if(!antag || !antag.id) - continue - if(jobban_isbanned(M, "[antag.id]")) - jobs += "" - else - jobs += "" - if(i % ANTAG_COLUMNS == 0 && i < length(all_antag_types)) - jobs += "" - i++ - jobs += "
              Antagonist Positions
              [replacetext_char("[antag.role_text]", " ", " ")][replacetext_char("[antag.role_text]", " ", " ")]
              " - #undef ANTAG_COLUMNS - - var/list/misc_roles = list("Dionaea", "Graffiti") - //Other roles (BLUE, because I have no idea what other color to make this) - jobs += "" - jobs += "" - for(var/entry in misc_roles) - if(jobban_isbanned(M, entry)) - jobs += "" - else - jobs += "" - jobs += "
              Other Roles
              [entry][entry]
              " - - // Channels - jobs += "" - var/list/channels = decls_repository.get_decls_of_subtype(/decl/communication_channel) - jobs += "" - for(var/channel_type in channels) - var/decl/communication_channel/channel = channels[channel_type] - if(jobban_isbanned(M, channel.name)) - jobs += "" - else - jobs += "" - jobs += "
              Channel Bans
              [channel.name][channel.name]
              " - - // Finalize and display. - body = "[jobs]" - dat = "[header][body]" - show_browser(usr, dat, "window=jobban2;size=800x490") - return - - //JOBBAN'S INNARDS - else if(href_list["jobban3"]) - if(!check_rights(R_ADMIN,0)) - to_chat(usr, "You do not have the appropriate permissions to add job bans!") - return - - var/mob/M = locate(href_list["jobban4"]) - if(!ismob(M)) - to_chat(usr, "This can only be used on instances of type /mob") - return - - if(M != usr) //we can jobban ourselves - if(M.client && M.client.holder && (M.client.holder.rights & R_BAN)) //they can ban too. So we can't ban them - alert("You cannot perform this action. You must be of a higher administrative rank!") - return - - //get jobs for department if specified, otherwise just returnt he one job in a list. - var/list/job_list = list() - switch(href_list["jobban3"]) - if("commanddept") - for(var/jobPos in SSjobs.titles_by_department(COM)) - if(!jobPos) continue - var/datum/job/temp = SSjobs.get_by_title(jobPos) - if(!temp) continue - job_list += temp.title - if("supportdept") - for(var/jobPos in SSjobs.titles_by_department(SPT)) - if(!jobPos) continue - var/datum/job/temp = SSjobs.get_by_title(jobPos) - if(!temp) continue - job_list += temp.title - if("securitydept") - for(var/jobPos in SSjobs.titles_by_department(SEC)) - if(!jobPos) continue - var/datum/job/temp = SSjobs.get_by_title(jobPos) - if(!temp) continue - job_list += temp.title - if("engineeringdept") - for(var/jobPos in SSjobs.titles_by_department(ENG)) - if(!jobPos) continue - var/datum/job/temp = SSjobs.get_by_title(jobPos) - if(!temp) continue - job_list += temp.title - if("medicaldept") - for(var/jobPos in SSjobs.titles_by_department(MED)) - if(!jobPos) continue - var/datum/job/temp = SSjobs.get_by_title(jobPos) - if(!temp) continue - job_list += temp.title - if("sciencedept") - for(var/jobPos in SSjobs.titles_by_department(SCI)) - if(!jobPos) continue - var/datum/job/temp = SSjobs.get_by_title(jobPos) - if(!temp) continue - job_list += temp.title - if("explorationdept") - for(var/jobPos in SSjobs.titles_by_department(EXP)) - if(!jobPos) continue - var/datum/job/temp = SSjobs.get_by_title(jobPos) - if(!temp) continue - job_list += temp.title - if("servicedept") - for(var/jobPos in SSjobs.titles_by_department(SRV)) - if(!jobPos) continue - var/datum/job/temp = SSjobs.get_by_title(jobPos) - if(!temp) continue - job_list += temp.title - if("supplydept") - for(var/jobPos in SSjobs.titles_by_department(SUP)) - if(!jobPos) continue - var/datum/job/temp = SSjobs.get_by_title(jobPos) - if(!temp) continue - job_list += temp.title - if("civiliandept") - for(var/jobPos in SSjobs.titles_by_department(CIV)) - if(!jobPos) continue - var/datum/job/temp = SSjobs.get_by_title(jobPos) - if(!temp) continue - job_list += temp.title - if("nonhumandept") - job_list += "pAI" - for(var/jobPos in SSjobs.titles_by_department(MSC)) - if(!jobPos) continue - var/datum/job/temp = SSjobs.get_by_title(jobPos) - if(!temp) continue - job_list += temp.title - if("Syndicate") - var/list/all_antag_types = GLOB.all_antag_types_ - for(var/antagPos in all_antag_types) - if(!antagPos) continue - var/datum/antagonist/temp = all_antag_types[antagPos] - if(!temp) continue - job_list += temp.id - else - job_list += href_list["jobban3"] - - //Create a list of unbanned jobs within job_list - var/list/notbannedlist = list() - for(var/job in job_list) - if(!jobban_isbanned(M, job)) - notbannedlist += job - - //Banning comes first - if(notbannedlist.len) //at least 1 unbanned job exists in job_list so we have stuff to ban. - switch(alert("Temporary Ban?",,"Yes","No", "Cancel")) - if("Yes") - if(!check_rights(R_BAN, 0)) - to_chat(usr, " You cannot issue temporary job-bans!") - return - if(config.ban_legacy_system) - to_chat(usr, "Your server is using the legacy banning system, which does not support temporary job bans. Consider upgrading. Aborting ban.") - return - var/mins = input(usr,"How long (in minutes)?","Ban time",1440) as num|null - if(!mins) - return - var/reason = sanitize(input(usr,"Reason?","Please State Reason","") as text|null) - if(!reason) - return - - var/msg - var/mins_readable = minutes_to_readable(mins) - for(var/job in notbannedlist) - ban_unban_log_save("[key_name(usr)] temp-jobbanned [key_name(M)] from [job] for [mins_readable]. reason: [reason]") - log_admin("[key_name(usr)] temp-jobbanned [key_name(M)] from [job] for [mins_readable]") - DB_ban_record(BANTYPE_JOB_TEMP, M, mins, reason, job) - jobban_fullban(M, job, "[reason]; By [usr.ckey] on [time2text(world.realtime)]") //Legacy banning does not support temporary jobbans. - if(!msg) - msg = job - else - msg += ", [job]" - notes_add(LAST_CKEY(M), "Banned from [msg] - [reason]", usr) - message_admins("[key_name_admin(usr)] banned [key_name_admin(M)] from [msg] for [mins_readable]", 1) - to_chat(M, "You have been jobbanned by [usr.client.ckey] from: [msg].") - to_chat(M, "The reason is: [reason]") - to_chat(M, "This jobban will be lifted in [mins_readable].") - href_list["jobban2"] = 1 // lets it fall through and refresh - return 1 - if("No") - if(!check_rights(R_BAN)) return - var/reason = sanitize(input(usr,"Reason?","Please State Reason","") as text|null) - if(reason) - var/msg - for(var/job in notbannedlist) - ban_unban_log_save("[key_name(usr)] perma-jobbanned [key_name(M)] from [job]. reason: [reason]") - log_admin("[key_name(usr)] perma-banned [key_name(M)] from [job]") - DB_ban_record(BANTYPE_JOB_PERMA, M, -1, reason, job) - jobban_fullban(M, job, "[reason]; By [usr.ckey] on [time2text(world.realtime)]") - if(!msg) msg = job - else msg += ", [job]" - notes_add(LAST_CKEY(M), "Banned from [msg] - [reason]", usr) - message_admins("[key_name_admin(usr)] banned [key_name_admin(M)] from [msg]", 1) - to_chat(M, "You have been jobbanned by [usr.client.ckey] from: [msg].") - to_chat(M, "The reason is: [reason]") - to_chat(M, "Jobban can be lifted only upon request.") - href_list["jobban2"] = 1 // lets it fall through and refresh - return 1 - if("Cancel") - return - - //Unbanning job list - //all jobs in job list are banned already OR we didn't give a reason (implying they shouldn't be banned) - if(LAZYLEN(SSjobs.titles_to_datums)) //at least 1 banned job exists in job list so we have stuff to unban. - if(!config.ban_legacy_system) - to_chat(usr, "Unfortunately, database based unbanning cannot be done through this panel") - DB_ban_panel(M.ckey) - return - var/msg - for(var/job in SSjobs.titles_to_datums) - var/reason = jobban_isbanned(M, job) - if(!reason) continue //skip if it isn't jobbanned anyway - switch(alert("Job: '[job]' Reason: '[reason]' Un-jobban?","Please Confirm","Yes","No")) - if("Yes") - ban_unban_log_save("[key_name(usr)] unjobbanned [key_name(M)] from [job]") - log_admin("[key_name(usr)] unbanned [key_name(M)] from [job]") - DB_ban_unban(M.ckey, BANTYPE_JOB_PERMA, job) - jobban_unban(M, job) - if(!msg) msg = job - else msg += ", [job]" - else - continue - if(msg) - message_admins("[key_name_admin(usr)] unbanned [key_name_admin(M)] from [msg]", 1) - to_chat(M, "You have been un-jobbanned by [usr.client.ckey] from [msg].") - href_list["jobban2"] = 1 // lets it fall through and refresh - return 1 - return 0 //we didn't do anything! - - else if(href_list["boot2"]) - var/mob/M = locate(href_list["boot2"]) - if (ismob(M)) - if(!check_if_greater_rights_than(M.client)) - return - var/reason = sanitize(input("Please enter reason")) - if(!reason) - to_chat(M, "You have been kicked from the server") - else - to_chat(M, "You have been kicked from the server: [reason]") - log_and_message_admins("booted [key_name_admin(M)].") - //M.client = null - qdel(M.client) - - else if(href_list["removejobban"]) - if(!check_rights(R_BAN)) return - - var/t = href_list["removejobban"] - if(t) - if((alert("Do you want to unjobban [t]?","Unjobban confirmation", "Yes", "No") == "Yes") && t) //No more misclicks! Unless you do it twice. - log_and_message_admins("[key_name_admin(usr)] removed [t]") - jobban_remove(t) - href_list["ban"] = 1 // lets it fall through and refresh - var/t_split = splittext(t, " - ") - var/key = t_split[1] - var/job = t_split[2] - DB_ban_unban(ckey(key), BANTYPE_JOB_PERMA, job) - - else if(href_list["newban"]) - if(!check_rights(R_BAN, 0)) - to_chat(usr, "You do not have the appropriate permissions to add bans!") - return - - var/mob/M = locate(href_list["newban"]) - if(!ismob(M)) return - - if(M.client && M.client.holder) return //admins cannot be banned. Even if they could, the ban doesn't affect them anyway - - var/given_key = href_list["last_key"] - if(!given_key) - to_chat(usr, SPAN_DANGER("This mob has no known last occupant and cannot be banned.")) - return - - switch(alert("Temporary Ban?",,"Yes","No", "Cancel")) - if("Yes") - var/mins = input(usr,"How long (in minutes)?","Ban time",1440) as num|null - if(!mins) - return - if(mins >= 525600) mins = 525599 - var/reason = sanitize(input(usr,"Reason?","reason","Griefer") as text|null) - if(!reason) - return - if (QDELETED(M)) - to_chat(usr, SPAN_DANGER("The mob you are banning no longer exists.")) - return - var/mob_key = LAST_CKEY(M) - if(mob_key != given_key) - to_chat(usr, SPAN_DANGER("This mob's occupant has changed from [given_key] to [mob_key]. Please try again.")) - show_player_panel(M) - return - AddBan(mob_key, M.computer_id, reason, usr.ckey, 1, mins) - var/mins_readable = minutes_to_readable(mins) - ban_unban_log_save("[usr.client.ckey] has banned [mob_key]. - Reason: [reason] - This will be removed in [mins_readable].") - notes_add(mob_key,"[usr.client.ckey] has banned [mob_key]. - Reason: [reason] - This will be removed in [mins_readable].",usr) - to_chat(M, "You have been banned by [usr.client.ckey].\nReason: [reason].") - to_chat(M, "This is a temporary ban, it will be removed in [mins_readable].") - DB_ban_record(BANTYPE_TEMP, M, mins, reason) - if(config.banappeals) - to_chat(M, "To try to resolve this matter head to [config.banappeals]") - else - to_chat(M, "No ban appeals URL has been set.") - log_and_message_admins("has banned [mob_key].\nReason: [reason]\nThis will be removed in [mins_readable].") - SSwebhooks.send(WEBHOOK_BAN, list("admin" = usr.client.ckey, "player" = mob_key, "time" = mins_readable, "reason" = reason)) - qdel(M.client) - //qdel(M) // See no reason why to delete mob. Important stuff can be lost. And ban can be lifted before round ends. - if("No") - if(!check_rights(R_BAN)) return - var/reason = sanitize(input(usr,"Reason?","reason","Griefer") as text|null) - if(!reason) - return - if (QDELETED(M)) - to_chat(usr, SPAN_DANGER("The mob you are banning no longer exists.")) - return - var/mob_key = LAST_CKEY(M) - if(mob_key != given_key) - to_chat(usr, SPAN_DANGER("This mob's occupant has changed from [given_key] to [mob_key]. Please try again.")) - show_player_panel(M) - return - switch(alert(usr,"IP ban?",,"Yes","No","Cancel")) - if("Cancel") return - if("Yes") - AddBan(mob_key, M.computer_id, reason, usr.ckey, 0, 0, M.lastKnownIP) - if("No") - AddBan(mob_key, M.computer_id, reason, usr.ckey, 0, 0) - to_chat(M, "You have been banned by [usr.client.ckey].\nReason: [reason].") - to_chat(M, "This is a ban until appeal.") - if(config.banappeals) - to_chat(M, "To try to resolve this matter head to [config.banappeals]") - else - to_chat(M, "No ban appeals URL has been set.") - ban_unban_log_save("[usr.client.ckey] has permabanned [mob_key]. - Reason: [reason] - This is a ban until appeal.") - notes_add(mob_key,"[usr.client.ckey] has permabanned [mob_key]. - Reason: [reason] - This is a ban until appeal.",usr) - log_and_message_admins("has banned [mob_key].\nReason: [reason]\nThis is a ban until appeal.") - DB_ban_record(BANTYPE_PERMA, M, -1, reason) - SSwebhooks.send(WEBHOOK_BAN, list("admin" = usr.client.ckey, "player" = mob_key, "time" = "perma", "reason" = reason)) - qdel(M.client) - //qdel(M) - if("Cancel") - return - - else if(href_list["mute"]) - if(!check_rights(R_MOD,0) && !check_rights(R_ADMIN)) return - - var/mob/M = locate(href_list["mute"]) - if(!ismob(M)) return - if(!M.client) return - - var/mute_type = href_list["mute_type"] - if(istext(mute_type)) mute_type = text2num(mute_type) - if(!isnum(mute_type)) return - - cmd_admin_mute(M, mute_type) - - else if(href_list["c_mode"]) - if(!check_rights(R_ADMIN)) return - - if(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 SSticker.mode_tags) - dat += {"[SSticker.mode_names[mode]]
              "} - dat += {"Secret
              "} - dat += {"Random
              "} - dat += {"Now: [SSticker.master_mode]"} - show_browser(usr, dat, "window=c_mode") - - else if(href_list["f_secret"]) - if(!check_rights(R_ADMIN)) return - - if(SSticker.mode) - return alert(usr, "The game has already started.", null, null, null, null) - if(SSticker.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 SSticker.mode_tags) - dat += {"[SSticker.mode_names[mode]]
              "} - dat += {"Random (default)
              "} - dat += {"Now: [SSticker.secret_force_mode]"} - show_browser(usr, dat, "window=f_secret") - - else if(href_list["c_mode2"]) - if(!check_rights(R_ADMIN|R_SERVER)) return - - if (SSticker.mode) - return alert(usr, "The game has already started.", null, null, null, null) - SSticker.master_mode = href_list["c_mode2"] - SSticker.bypass_gamemode_vote = 1 - log_and_message_admins("set the mode as [SSticker.master_mode].") - to_world("The mode is now: [SSticker.master_mode]") - Game() // updates the main game menu - world.save_mode(SSticker.master_mode) - .(href, list("c_mode"=1)) - - else if(href_list["f_secret2"]) - if(!check_rights(R_ADMIN|R_SERVER)) return - - if(SSticker.mode) - return alert(usr, "The game has already started.", null, null, null, null) - if(SSticker.master_mode != "secret") - return alert(usr, "The game mode has to be secret!", null, null, null, null) - SSticker.secret_force_mode = href_list["f_secret2"] - log_and_message_admins("set the forced secret mode as [SSticker.secret_force_mode].") - Game() // updates the main game menu - .(href, list("f_secret"=1)) - - else if(href_list["monkeyone"]) - if(!check_rights(R_SPAWN)) return - - var/mob/living/carbon/human/H = locate(href_list["monkeyone"]) - if(!istype(H)) - to_chat(usr, "This can only be used on instances of type /mob/living/carbon/human") - return - - log_and_message_admins("attempting to monkeyize [key_name_admin(H)]") - H.monkeyize() - - else if(href_list["corgione"]) - if(!check_rights(R_SPAWN)) return - - var/mob/living/carbon/human/H = locate(href_list["corgione"]) - if(!istype(H)) - to_chat(usr, "This can only be used on instances of type /mob/living/carbon/human") - return - - log_and_message_admins("attempting to corgize [key_name_admin(H)]") - H.corgize() - - else if(href_list["forcespeech"]) - if(!check_rights(R_FUN)) return - - var/mob/M = locate(href_list["forcespeech"]) - if(!ismob(M)) - to_chat(usr, "this can only be used on instances of type /mob") - - var/speech = input("What will [key_name(M)] say?.", "Force speech", "")// Don't need to sanitize, since it does that in say(), we also trust our admins. - if(!speech) return - M.say(speech) - speech = sanitize(speech) // Nah, we don't trust them - log_and_message_admins("forced [key_name_admin(M)] to say: [speech]") - - else if (href_list["reloadsave"]) - if(!check_rights(R_DEBUG)) return - var/mob/M = locate(href_list["reloadsave"]) - if (!ismob(M)) - return - if (!M.client) - return - var/client/C = M.client - to_chat(usr, SPAN_NOTICE("Attempting to reload save for [C.key] View Prefs Datum")) - C.prefs.setup() - - else if (href_list["reloadsaveshow"]) - if(!check_rights(R_DEBUG)) return - var/datum/preferences/prefs = locate(href_list["reloadsaveshow"]) - if (prefs) - usr.client.debug_variables(prefs) - - else if (href_list["reloadchar"]) - if (!check_rights(R_DEBUG)) - return - var/mob/living/carbon/human/H = locate(href_list["reloadchar"]) - if (!istype(H)) - to_chat(usr, SPAN_WARNING("\The [H] is not a valid type to apply preferences to.")) - return - var/datum/preferences/P = H.client?.prefs - if (!istype(P)) - to_chat(usr, SPAN_WARNING("\The [H] has no client to apply preferences from.")) - return - var/confirm = alert(usr, "This will erase the state of \the [H]!", "Reload Character", "Okay", "Cancel") - if (confirm != "Okay") - return - if (QDELETED(P) || QDELETED(H)) - to_chat(usr, SPAN_WARNING("\The [H] or its preferences are no longer valid.")) - return - P.copy_to(H) - - else if (href_list["cloneother"]) - if (!check_rights(R_DEBUG)) - return - var/mob/living/carbon/human/H = locate(href_list["cloneother"]) - if (!istype(H)) - to_chat(usr, SPAN_WARNING("\The [H] is not a valid type to apply preferences to.")) - return - var/client/C = select_client() - var/datum/preferences/P = C?.prefs - if (!P) - return - var/confirm = alert(usr, "This will replace \the [H] with the design of \"[P.real_name]\"!", "Clone Other", "Okay", "Cancel") - if (confirm != "Okay") - return - if (QDELETED(P) || QDELETED(H)) - to_chat(usr, SPAN_WARNING("\The [H] or the preferences of [C] are no longer valid.")) - return - P.copy_to(H) - - else if(href_list["sendtoprison"]) - if(!check_rights(R_ADMIN)) return - - if(alert(usr, "Send to admin prison for the round?", "Message", "Yes", "No") != "Yes") - return - - var/mob/M = locate(href_list["sendtoprison"]) - if(!ismob(M)) - to_chat(usr, "This can only be used on instances of type /mob") - return - if(istype(M, /mob/living/silicon/ai)) - to_chat(usr, "This cannot be used on instances of type /mob/living/silicon/ai") - return - - var/turf/prison_cell = pick(GLOB.prisonwarp) - if(!prison_cell) return - - var/obj/structure/closet/secure_closet/brig/locker = new /obj/structure/closet/secure_closet/brig(prison_cell) - locker.opened = 0 - locker.locked = 1 - - //strip their stuff and stick it in the crate - for(var/obj/item/I in M) - M.drop_from_inventory(I, locker) - M.update_icons() - - //so they black out before warping - M.Paralyse(5) - sleep(5) - if(!M) return - - M.forceMove(prison_cell) - if(istype(M, /mob/living/carbon/human)) - var/mob/living/carbon/human/prisoner = M - prisoner.equip_to_slot_or_del(new /obj/item/clothing/under/color/orange(prisoner), slot_w_uniform) - prisoner.equip_to_slot_or_del(new /obj/item/clothing/shoes/orange(prisoner), slot_shoes) - - to_chat(M, "You have been sent to the prison station!") - log_and_message_admins("sent [key_name_admin(M)] to the prison station.") - - else if(href_list["tdome1"]) - if(!check_rights(R_FUN)) return - - if(alert(usr, "Confirm?", "Message", "Yes", "No") != "Yes") - return - - var/mob/M = locate(href_list["tdome1"]) - if(!ismob(M)) - to_chat(usr, "This can only be used on instances of type /mob") - return - if(istype(M, /mob/living/silicon/ai)) - to_chat(usr, "This cannot be used on instances of type /mob/living/silicon/ai") - return - - for(var/obj/item/I in M) - M.drop_from_inventory(I) - - M.Paralyse(5) - sleep(5) - M.forceMove(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)") - message_admins("[key_name_admin(usr)] has sent [key_name_admin(M)] to the thunderdome. (Team 1)", 1) - - else if(href_list["tdome2"]) - if(!check_rights(R_FUN)) return - - if(alert(usr, "Confirm?", "Message", "Yes", "No") != "Yes") - return - - var/mob/M = locate(href_list["tdome2"]) - if(!ismob(M)) - to_chat(usr, "This can only be used on instances of type /mob") - return - if(istype(M, /mob/living/silicon/ai)) - to_chat(usr, "This cannot be used on instances of type /mob/living/silicon/ai") - return - - for(var/obj/item/I in M) - M.drop_from_inventory(I) - - M.Paralyse(5) - sleep(5) - M.forceMove(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)") - message_admins("[key_name_admin(usr)] has sent [key_name_admin(M)] to the thunderdome. (Team 2)", 1) - - else if(href_list["tdomeadmin"]) - if(!check_rights(R_FUN)) return - - if(alert(usr, "Confirm?", "Message", "Yes", "No") != "Yes") - return - - var/mob/M = locate(href_list["tdomeadmin"]) - if(!ismob(M)) - to_chat(usr, "This can only be used on instances of type /mob") - return - if(istype(M, /mob/living/silicon/ai)) - to_chat(usr, "This cannot be used on instances of type /mob/living/silicon/ai") - return - - M.Paralyse(5) - sleep(5) - M.forceMove(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.)") - message_admins("[key_name_admin(usr)] has sent [key_name_admin(M)] to the thunderdome. (Admin.)", 1) - - else if(href_list["tdomeobserve"]) - if(!check_rights(R_FUN)) return - - if(alert(usr, "Confirm?", "Message", "Yes", "No") != "Yes") - return - - var/mob/M = locate(href_list["tdomeobserve"]) - if(!ismob(M)) - to_chat(usr, "This can only be used on instances of type /mob") - return - if(istype(M, /mob/living/silicon/ai)) - to_chat(usr, "This cannot be used on instances of type /mob/living/silicon/ai") - return - - for(var/obj/item/I in M) - M.drop_from_inventory(I) - - if(istype(M, /mob/living/carbon/human)) - var/mob/living/carbon/human/observer = M - observer.equip_to_slot_or_del(new /obj/item/clothing/under/suit_jacket(observer), slot_w_uniform) - observer.equip_to_slot_or_del(new /obj/item/clothing/shoes/black(observer), slot_shoes) - M.Paralyse(5) - sleep(5) - M.forceMove(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.)") - message_admins("[key_name_admin(usr)] has sent [key_name_admin(M)] to the thunderdome. (Observer.)", 1) - - else if(href_list["revive"]) - if(!check_rights(R_REJUVINATE)) return - - var/mob/living/L = locate(href_list["revive"]) - if(!istype(L)) - to_chat(usr, "This can only be used on instances of type /mob/living") - return - - if(config.allow_admin_rev) - L.revive() - log_and_message_admins("healed / Revived [key_name(L)]") - else - to_chat(usr, "Admin Rejuvinates have been disabled") - - else if(href_list["makeai"]) - if(!check_rights(R_SPAWN)) return - - var/mob/living/carbon/human/H = locate(href_list["makeai"]) - if(!istype(H)) - to_chat(usr, "This can only be used on instances of type /mob/living/carbon/human") - return - - log_and_message_admins("AIized [key_name_admin(H)]!") - H.AIize() - - else if(href_list["makeslime"]) - if(!check_rights(R_SPAWN)) return - - var/mob/living/carbon/human/H = locate(href_list["makeslime"]) - if(!istype(H)) - to_chat(usr, "This can only be used on instances of type /mob/living/carbon/human") - return - - usr.client.cmd_admin_slimeize(H) - - else if(href_list["makerobot"]) - if(!check_rights(R_SPAWN)) return - - var/mob/living/carbon/human/H = locate(href_list["makerobot"]) - if(!istype(H)) - to_chat(usr, "This can only be used on instances of type /mob/living/carbon/human") - return - - usr.client.cmd_admin_robotize(H) - - else if(href_list["makeanimal"]) - if(!check_rights(R_SPAWN)) return - - var/mob/M = locate(href_list["makeanimal"]) - if(istype(M, /mob/new_player)) - to_chat(usr, "This cannot be used on instances of type /mob/new_player") - return - - usr.client.cmd_admin_animalize(M) - - else if(href_list["makezombie"]) - if(!check_rights(R_ADMIN)) return - - var/mob/living/carbon/human/H = locate(href_list["makezombie"]) - if(!istype(H)) - to_chat(usr, "This can only be used on instances of type /mob/living/carbon/human") - - log_and_message_admins("attempting to zombify [key_name_admin(H)]") - H.zombify() - - else if(href_list["togmutate"]) - if(!check_rights(R_SPAWN)) return - - var/mob/living/carbon/human/H = locate(href_list["togmutate"]) - if(!istype(H)) - to_chat(usr, "This can only be used on instances of type /mob/living/carbon/human") - return - var/block=text2num(href_list["block"]) - //testing("togmutate([href_list["block"]] -> [block])") - usr.client.cmd_admin_toggle_block(H,block) - show_player_panel(H) - //H.regenerate_icons() - - else if(href_list["adminplayeropts"]) - var/mob/M = locate(href_list["adminplayeropts"]) - show_player_panel(M) - - else if(href_list["adminplayerobservejump"]) - if(!check_rights(R_MOD|R_ADMIN)) return - - var/mob/M = locate(href_list["adminplayerobservejump"]) - var/client/C = usr.client - if(!M) - to_chat(C, "Unable to locate mob.") - return - - if(!isghost(usr)) C.admin_ghost() - sleep(2) - C.jumptomob(M) - - else if(href_list["adminplayerobservefollow"]) - if(!check_rights(R_MOD|R_ADMIN)) - return - - var/mob/M = locate(href_list["adminplayerobservefollow"]) - var/client/C = usr.client - if(!M) - to_chat(C, "Unable to locate mob.") - return - - if(!isobserver(usr)) C.admin_ghost() - var/mob/observer/ghost/G = C.mob - if(istype(G)) - sleep(2) - G.start_following(M) - - else if(href_list["check_antagonist"]) - check_antagonists() - - // call dibs on IC messages (prays, emergency comms, faxes) - else if(href_list["take_ic"]) - - var/mob/M = locate(href_list["take_question"]) - if(ismob(M)) - var/take_msg = "[key_name(usr.client)] is attending to [key_name(M)]'s message." - for(var/client/X as anything in GLOB.admins) - if((R_ADMIN|R_MOD) & X.holder.rights) - to_chat(X, take_msg) - to_chat(M, "Your message is being attended to by [usr.client]. Thanks for your patience!") - else - to_chat(usr, "Unable to locate mob.") - - else if(href_list["take_ticket"]) - var/datum/ticket/ticket = locate(href_list["take_ticket"]) - - if(isnull(ticket)) - return - - ticket.take(client_repository.get_lite_client(usr.client)) - - else if(href_list["adminplayerobservecoodjump"]) - if(!check_rights(R_ADMIN)) return - - var/x = text2num(href_list["X"]) - var/y = text2num(href_list["Y"]) - var/z = text2num(href_list["Z"]) - - var/client/C = usr.client - if(!isghost(usr)) C.admin_ghost() - sleep(2) - C.jumptocoord(x,y,z) - - else if(href_list["adminchecklaws"]) - output_ai_laws() - - else if(href_list["adminmoreinfo"]) - var/mob/M = locate(href_list["adminmoreinfo"]) - if(!ismob(M)) - to_chat(usr, "This can only be used on instances of type /mob") - return - - var/location_description = "" - var/special_role_description = "" - var/health_description = "" - var/gender_description = "" - var/turf/T = get_turf(M) - - //Location - if(isturf(T)) - if(isarea(T.loc)) - location_description = "([M.loc == T ? "at coordinates " : "in [M.loc] at coordinates "] [T.x], [T.y], [T.z] in area [T.loc])" - else - location_description = "([M.loc == T ? "at coordinates " : "in [M.loc] at coordinates "] [T.x], [T.y], [T.z])" - - //Job + antagonist - if(M.mind) - special_role_description = "Role: [M.mind.assigned_role]; Antagonist: [M.mind.special_role]; Has been rev: [(M.mind.has_been_rev)?"Yes":"No"]" - else - special_role_description = "Role: Mind datum missing Antagonist: Mind datum missing; Has been rev: Mind datum missing;" - - //Health - if(isliving(M)) - var/mob/living/L = M - var/status - switch (M.stat) - if (0) status = "Alive" - if (1) status = "Unconscious" - if (2) status = "Dead" - health_description = "Status = [status]" - health_description += "
              Oxy: [L.getOxyLoss()] - Tox: [L.getToxLoss()] - Fire: [L.getFireLoss()] - Brute: [L.getBruteLoss()] - Clone: [L.getCloneLoss()] - Brain: [L.getBrainLoss()]" - else - health_description = "This mob type has no health to speak of." - - //Gener - switch(M.gender) - if(MALE,FEMALE) gender_description = "[M.gender]" - else gender_description = "[M.gender]" - - to_chat(src.owner, "Info about [M.name]: ") - to_chat(src.owner, "Mob type = [M.type]; Gender = [gender_description] Damage = [health_description]") - 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) ([admin_jump_link(M, src)]) (CA)") - - else if(href_list["adminspawncookie"]) - if(!check_rights(R_ADMIN|R_FUN)) return - - var/mob/living/carbon/human/H = locate(href_list["adminspawncookie"]) - if(!ishuman(H)) - to_chat(usr, "This can only be used on instances of type /mob/living/carbon/human") - return - - H.equip_to_slot_or_del( new /obj/item/reagent_containers/food/snacks/cookie(H), slot_l_hand ) - if(!(istype(H.l_hand,/obj/item/reagent_containers/food/snacks/cookie))) - H.equip_to_slot_or_del( new /obj/item/reagent_containers/food/snacks/cookie(H), slot_r_hand ) - if(!(istype(H.r_hand,/obj/item/reagent_containers/food/snacks/cookie))) - log_admin("[key_name(H)] has their hands full, so they did not receive their cookie, spawned by [key_name(src.owner)].") - message_admins("[key_name(H)] has their hands full, so they did not receive their cookie, spawned by [key_name(src.owner)].") - return - else - H.update_inv_r_hand()//To ensure the icon appears in the HUD - else - H.update_inv_l_hand() - log_admin("[key_name(H)] got their cookie, spawned by [key_name(src.owner)]") - message_admins("[key_name(H)] got their cookie, spawned by [key_name(src.owner)]") - to_chat(H, "Your prayers have been answered!! You received the best cookie!") - - else if(href_list["BlueSpaceArtillery"]) - if(!check_rights(R_ADMIN|R_FUN)) return - - var/mob/living/M = locate(href_list["BlueSpaceArtillery"]) - if(!isliving(M)) - to_chat(usr, "This can only be used on instances of type /mob/living") - return - - if(alert(src.owner, "Are you sure you wish to hit [key_name(M)] with Blue Space Artillery?", "Confirm Firing?" , "Yes" , "No") != "Yes") - return - - if(BSACooldown) - to_chat(src.owner, "Standby! Reload cycle in progress! Gunnary crews ready in five seconds!") - return - - BSACooldown = 1 - spawn(50) - BSACooldown = 0 - - to_chat(M, "You've been hit by bluespace artillery!") - log_admin("[key_name(M)] has been hit by Bluespace Artillery fired by [src.owner]") - message_admins("[key_name(M)] has been hit by Bluespace Artillery fired by [src.owner]") - - var/obj/effect/stop/S - S = new /obj/effect/stop(M.loc) - S.victim = M - spawn(20) - qdel(S) - - var/turf/simulated/floor/T = get_turf(M) - if(istype(T)) - if(prob(80)) T.break_tile_to_plating() - else T.break_tile() - - if(M.health == 1) - M.gib() - else - M.adjustBruteLoss( min( 99 , (M.health - 1) ) ) - M.Stun(20) - M.Weaken(20) - M.stuttering = 20 - - else if(href_list["CentcommReply"]) - var/mob/living/L = locate(href_list["CentcommReply"]) - if(!istype(L)) - to_chat(usr, "This can only be used on instances of type /mob/living/") - return - - if(L.can_centcom_reply()) - var/input = sanitize(input(src.owner, "Please enter a message to reply to [key_name(L)] via their headset.","Outgoing message from Centcomm", "")) - if(!input) return - - to_chat(src.owner, "You sent [input] to [L] via a secure channel.") - log_admin("[src.owner] replied to [key_name(L)]'s Centcomm message with the message [input].") - message_admins("[src.owner] replied to [key_name(L)]'s Centcom message with: \"[input]\"") - if(!isAI(L)) - to_chat(L, "You hear something crackle in your headset for a moment before a voice speaks.") - to_chat(L, "Please stand by for a message from Central Command.") - to_chat(L, "Message as follows.") - to_chat(L, "[input]") - to_chat(L, "Message ends.") - else - to_chat(src.owner, "The person you are trying to contact does not have functional radio equipment.") - - - else if(href_list["SyndicateReply"]) - var/mob/living/carbon/human/H = locate(href_list["SyndicateReply"]) - if(!istype(H)) - to_chat(usr, "This can only be used on instances of type /mob/living/carbon/human") - return - if(!istype(H.l_ear, /obj/item/device/radio/headset) && !istype(H.r_ear, /obj/item/device/radio/headset)) - to_chat(usr, "The person you are trying to contact is not wearing a headset") - return - - var/input = sanitize(input(src.owner, "Please enter a message to reply to [key_name(H)] via their headset.","Outgoing message from a shadowy figure...", "")) - if(!input) return - - to_chat(src.owner, "You sent [input] to [H] via a secure channel.") - log_admin("[src.owner] replied to [key_name(H)]'s illegal message with the message [input].") - to_chat(H, "You hear something crackle in your headset for a moment before a voice speaks. \"Please stand by for a message from your benefactor. Message as follows, agent. \"[input]\" Message ends.\"") - - else if(href_list["AdminFaxView"]) - var/obj/item/fax = locate(href_list["AdminFaxView"]) - if (istype(fax, /obj/item/paper)) - var/obj/item/paper/P = fax - P.show_content(usr, TRUE) - else if (istype(fax, /obj/item/photo)) - var/obj/item/photo/H = fax - H.show(usr) - else if (istype(fax, /obj/item/paper_bundle)) - //having multiple people turning pages on a paper_bundle can cause issues - //open a browse window listing the contents instead - var/data = "" - var/obj/item/paper_bundle/B = fax - - for (var/page = 1, page <= B.pages.len, page++) - var/obj/pageobj = B.pages[page] - data += "Page [page] - [pageobj.name]
              " - - show_browser(usr, data, "window=[B.name]") - else - to_chat(usr, "The faxed item is not viewable. This is probably a bug, and should be reported on the tracker. Fax type: [fax ? fax.type : "null"]") - else if (href_list["AdminFaxViewPage"]) - var/page = text2num(href_list["AdminFaxViewPage"]) - var/obj/item/paper_bundle/bundle = locate(href_list["paper_bundle"]) - - if (!bundle) return - - if (istype(bundle.pages[page], /obj/item/paper)) - var/obj/item/paper/P = bundle.pages[page] - P.show_content(src.owner, TRUE) - else if (istype(bundle.pages[page], /obj/item/photo)) - var/obj/item/photo/H = bundle.pages[page] - H.show(src.owner) - return - - else if(href_list["FaxReply"]) - var/mob/sender = locate(href_list["FaxReply"]) - var/obj/machinery/photocopier/faxmachine/fax = locate(href_list["originfax"]) - var/replyorigin = href_list["replyorigin"] - - - var/obj/item/paper/admin/P = new /obj/item/paper/admin( null ) //hopefully the null loc won't cause trouble for us - faxreply = P - - P.admindatum = src - P.origin = replyorigin - - P.destinations = get_fax_machines_by_department(fax.department) - P.sender = sender - - P.adminbrowse() - - else if(href_list["jumpto"]) - if(!check_rights(R_ADMIN)) return - - var/mob/M = locate(href_list["jumpto"]) - usr.client.jumptomob(M) - - else if(href_list["getmob"]) - if(!check_rights(R_ADMIN)) return - - if(alert(usr, "Confirm?", "Message", "Yes", "No") != "Yes") return - var/mob/M = locate(href_list["getmob"]) - usr.client.Getmob(M) - - else if(href_list["sendmob"]) - if(!check_rights(R_ADMIN)) return - - var/mob/M = locate(href_list["sendmob"]) - usr.client.sendmob(M) - - else if(href_list["narrateto"]) - if(!check_rights(R_INVESTIGATE)) return - - var/mob/M = locate(href_list["narrateto"]) - usr.client.cmd_admin_direct_narrate(M) - - else if(href_list["traitor"]) - if(!check_rights(R_ADMIN|R_MOD)) return - - if(GAME_STATE < RUNLEVEL_GAME) - alert("The game hasn't started yet!") - return - - var/mob/M = locate(href_list["traitor"]) - if(!ismob(M)) - to_chat(usr, "This can only be used on instances of type /mob.") - return - show_traitor_panel(M) - - else if(href_list["skillpanel"]) - if(!check_rights(R_INVESTIGATE)) - return - - if(GAME_STATE < RUNLEVEL_GAME) - alert("The game hasn't started yet!") - return - - var/mob/M = locate(href_list["skillpanel"]) - show_skills(M) - - else if(href_list["create_object"]) - if(!check_rights(R_SPAWN)) return - return create_object(usr) - - else if(href_list["create_turf"]) - if(!check_rights(R_SPAWN)) return - return create_turf(usr) - - else if(href_list["create_mob"]) - if(!check_rights(R_SPAWN)) return - return create_mob(usr) - - else if(href_list["object_list"]) //this is the laggiest thing ever - if(!check_rights(R_SPAWN)) return - - if(!config.allow_admin_spawning) - to_chat(usr, "Spawning of items is not allowed.") - return - - var/atom/loc = usr.loc - - var/dirty_paths - if (istext(href_list["object_list"])) - dirty_paths = list(href_list["object_list"]) - else if (istype(href_list["object_list"], /list)) - dirty_paths = href_list["object_list"] - - var/paths = list() - var/removed_paths = list() - - for(var/dirty_path in dirty_paths) - var/path = text2path(dirty_path) - if(!path) - removed_paths += dirty_path - continue - else if(!ispath(path, /obj) && !ispath(path, /turf) && !ispath(path, /mob)) - removed_paths += dirty_path - continue - else if(ispath(path, /obj/item/gun/energy/pulse_rifle)) - if(!check_rights(R_FUN,0)) - removed_paths += dirty_path - continue - else if(ispath(path, /obj/item/melee/energy/blade))//Not an item one should be able to spawn./N - if(!check_rights(R_FUN,0)) - removed_paths += dirty_path - continue - else if(ispath(path, /obj/effect/bhole)) - if(!check_rights(R_FUN,0)) - removed_paths += dirty_path - continue - paths += path - - if(!paths) - alert("The path list you sent is empty") - return - if(length(paths) > 5) - alert("Select fewer object types, (max 5)") - return - else if(length(removed_paths)) - alert("Removed:\n" + jointext(removed_paths, "\n")) - - var/list/offset = splittext(href_list["offset"],",") - var/number = dd_range(1, 100, text2num(href_list["object_count"])) - var/X = offset.len > 0 ? text2num(offset[1]) : 0 - var/Y = offset.len > 1 ? text2num(offset[2]) : 0 - var/Z = offset.len > 2 ? text2num(offset[3]) : 0 - var/tmp_dir = href_list["object_dir"] - var/obj_dir = tmp_dir ? text2num(tmp_dir) : 2 - if(!obj_dir || !(obj_dir in list(1,2,4,8,5,6,9,10))) - obj_dir = 2 - var/obj_name = sanitize(href_list["object_name"]) - var/where = href_list["object_where"] - if (!( where in list("onfloor","inhand","inmarked") )) - where = "onfloor" - - if( where == "inhand" ) - to_chat(usr, "Support for inhand not available yet. Will spawn on floor.") - where = "onfloor" - - if ( where == "inhand" ) //Can only give when human or monkey - if ( !( ishuman(usr) || issmall(usr) ) ) - to_chat(usr, "Can only spawn in hand when you're a human or a monkey.") - where = "onfloor" - else if ( usr.get_active_hand() ) - to_chat(usr, "Your active hand is full. Spawning on floor.") - where = "onfloor" - - if ( where == "inmarked" ) - var/marked_datum = marked_datum() - if ( !marked_datum ) - to_chat(usr, "You don't have any object marked. Abandoning spawn.") - return - else - if ( !istype(marked_datum,/atom) ) - to_chat(usr, "The object you have marked cannot be used as a target. Target must be of type /atom. Abandoning spawn.") - return - - var/atom/target //Where the object will be spawned - switch ( where ) - if ( "onfloor" ) - switch (href_list["offset_type"]) - if ("absolute") - target = locate(0 + X,0 + Y,0 + Z) - if ("relative") - target = locate(loc.x + X,loc.y + Y,loc.z + Z) - if ( "inmarked" ) - target = marked_datum() - - if(target) - for (var/path in paths) - for (var/i = 0; i < number; i++) - if(path in typesof(/turf)) - var/turf/O = target - var/turf/N = O.ChangeTurf(path) - if(N) - if(obj_name) - N.SetName(obj_name) - else - var/atom/O = new path(target) - if(O) - O.set_dir(obj_dir) - if(obj_name) - O.SetName(obj_name) - if(istype(O,/mob)) - var/mob/M = O - M.real_name = obj_name - - log_and_message_admins("created [number] [english_list(paths)]") - return - - else if(href_list["admin_secrets_panel"]) - var/datum/admin_secret_category/AC = locate(href_list["admin_secrets_panel"]) in admin_secrets.categories - src.Secrets(AC) - - else if(href_list["admin_secrets"]) - var/datum/admin_secret_item/item = locate(href_list["admin_secrets"]) in admin_secrets.items - item.execute(usr) - - else if(href_list["ac_view_wanted"]) //Admin newscaster Topic() stuff be here - src.admincaster_screen = 18 //The ac_ prefix before the hrefs stands for AdminCaster. - src.access_news_network() - - else if(href_list["ac_set_channel_name"]) - src.admincaster_feed_channel.channel_name = sanitizeSafe(input(usr, "Provide a Feed Channel Name", "Network Channel Handler", "")) - src.access_news_network() - - else if(href_list["ac_set_channel_lock"]) - src.admincaster_feed_channel.locked = !src.admincaster_feed_channel.locked - src.access_news_network() - - else if(href_list["ac_submit_new_channel"]) - var/datum/feed_network/torch_network = news_network[1] - var/check = 0 - for(var/datum/feed_channel/FC in torch_network.network_channels) - if(FC.channel_name == src.admincaster_feed_channel.channel_name) - check = 1 - break - if(src.admincaster_feed_channel.channel_name == "" || src.admincaster_feed_channel.channel_name == "\[REDACTED\]" || check ) - src.admincaster_screen=7 - else - var/choice = alert("Please confirm Feed channel creation","Network Channel Handler","Confirm","Cancel") - if(choice=="Confirm") - torch_network.CreateFeedChannel(admincaster_feed_channel.channel_name, admincaster_signature, admincaster_feed_channel.locked, 1) - log_admin("[key_name_admin(usr)] created command feed channel: [src.admincaster_feed_channel.channel_name]!") - src.admincaster_screen=5 - src.access_news_network() - - else if(href_list["ac_set_channel_receiving"]) - var/datum/feed_network/torch_network = news_network[1] - var/list/available_channels = list() - for(var/datum/feed_channel/F in torch_network.network_channels) - available_channels += F.channel_name - src.admincaster_feed_channel.channel_name = sanitizeSafe(input(usr, "Choose receiving Feed Channel", "Network Channel Handler") in available_channels ) - src.access_news_network() - - else if(href_list["ac_set_new_message"]) - src.admincaster_feed_message.body = sanitize(input(usr, "Write your Feed story", "Network Channel Handler", "")) - src.access_news_network() - - else if(href_list["ac_submit_new_message"]) - var/datum/feed_network/torch_network = news_network[1] - if(src.admincaster_feed_message.body =="" || src.admincaster_feed_message.body =="\[REDACTED\]" || src.admincaster_feed_channel.channel_name == "" ) - src.admincaster_screen = 6 - else - torch_network.SubmitArticle(src.admincaster_feed_message.body, src.admincaster_signature, src.admincaster_feed_channel.channel_name, null, 1) - src.admincaster_screen=4 - - log_admin("[key_name_admin(usr)] submitted a feed story to channel: [src.admincaster_feed_channel.channel_name]!") - src.access_news_network() - - else if(href_list["ac_create_channel"]) - src.admincaster_screen=2 - src.access_news_network() - - else if(href_list["ac_create_feed_story"]) - src.admincaster_screen=3 - src.access_news_network() - - else if(href_list["ac_menu_censor_story"]) - src.admincaster_screen=10 - src.access_news_network() - - else if(href_list["ac_menu_censor_channel"]) - src.admincaster_screen=11 - src.access_news_network() - - else if(href_list["ac_menu_wanted"]) - var/datum/feed_network/torch_network = news_network[1] - var/already_wanted = 0 - if(torch_network.wanted_issue) - already_wanted = 1 - - if(already_wanted) - src.admincaster_feed_message.author = torch_network.wanted_issue.author - src.admincaster_feed_message.body = torch_network.wanted_issue.body - src.admincaster_screen = 14 - src.access_news_network() - - else if(href_list["ac_set_wanted_name"]) - src.admincaster_feed_message.author = sanitize(input(usr, "Provide the name of the Wanted person", "Network Security Handler", "")) - src.access_news_network() - - else if(href_list["ac_set_wanted_desc"]) - src.admincaster_feed_message.body = sanitize(input(usr, "Provide the a description of the Wanted person and any other details you deem important", "Network Security Handler", "")) - src.access_news_network() - - else if(href_list["ac_submit_wanted"]) - var/datum/feed_network/torch_network = news_network[1] - var/input_param = text2num(href_list["ac_submit_wanted"]) - if(src.admincaster_feed_message.author == "" || src.admincaster_feed_message.body == "") - src.admincaster_screen = 16 - else - var/choice = alert("Please confirm Wanted Issue [(input_param==1) ? ("creation.") : ("edit.")]","Network Security Handler","Confirm","Cancel") - if(choice=="Confirm") - - if(input_param==1) //If input_param == 1 we're submitting a new wanted issue. At 2 we're just editing an existing one. See the else below - var/datum/feed_message/WANTED = new /datum/feed_message - WANTED.author = src.admincaster_feed_message.author //Wanted name - WANTED.body = src.admincaster_feed_message.body //Wanted desc - WANTED.backup_author = src.admincaster_signature //Submitted by - WANTED.is_admin_message = 1 - torch_network.wanted_issue = WANTED - for(var/obj/machinery/newscaster/NEWSCASTER in allCasters) - NEWSCASTER.newsAlert() - NEWSCASTER.update_icon() - src.admincaster_screen = 15 - else - torch_network.wanted_issue.author = src.admincaster_feed_message.author - torch_network.wanted_issue.body = src.admincaster_feed_message.body - torch_network.wanted_issue.backup_author = src.admincaster_feed_message.backup_author - src.admincaster_screen = 19 - log_admin("[key_name_admin(usr)] issued a Wanted Notification for [src.admincaster_feed_message.author]!") - src.access_news_network() - - else if(href_list["ac_cancel_wanted"]) - var/datum/feed_network/torch_network = news_network[1] - var/choice = alert("Please confirm Wanted Issue removal","Network Security Handler","Confirm","Cancel") - if(choice=="Confirm") - torch_network.wanted_issue = null - for(var/obj/machinery/newscaster/NEWSCASTER in allCasters) - NEWSCASTER.update_icon() - src.admincaster_screen=17 - src.access_news_network() - - else if(href_list["ac_censor_channel_author"]) - var/datum/feed_channel/FC = locate(href_list["ac_censor_channel_author"]) - if(FC.author != "\[REDACTED\]") - FC.backup_author = FC.author - FC.author = "\[REDACTED\]" - else - FC.author = FC.backup_author - src.access_news_network() - - else if(href_list["ac_censor_channel_story_author"]) - var/datum/feed_message/MSG = locate(href_list["ac_censor_channel_story_author"]) - if(MSG.author != "\[REDACTED\]") - MSG.backup_author = MSG.author - MSG.author = "\[REDACTED\]" - else - MSG.author = MSG.backup_author - src.access_news_network() - - else if(href_list["ac_censor_channel_story_body"]) - var/datum/feed_message/MSG = locate(href_list["ac_censor_channel_story_body"]) - if(MSG.body != "\[REDACTED\]") - MSG.backup_body = MSG.body - MSG.body = "\[REDACTED\]" - else - MSG.body = MSG.backup_body - src.access_news_network() - - else if(href_list["ac_pick_d_notice"]) - var/datum/feed_channel/FC = locate(href_list["ac_pick_d_notice"]) - src.admincaster_feed_channel = FC - src.admincaster_screen=13 - src.access_news_network() - - else if(href_list["ac_toggle_d_notice"]) - var/datum/feed_channel/FC = locate(href_list["ac_toggle_d_notice"]) - FC.censored = !FC.censored - src.access_news_network() - - else if(href_list["ac_view"]) - src.admincaster_screen=1 - src.access_news_network() - - else if(href_list["ac_setScreen"]) //Brings us to the main menu and resets all fields~ - src.admincaster_screen = text2num(href_list["ac_setScreen"]) - if (src.admincaster_screen == 0) - if(src.admincaster_feed_channel) - src.admincaster_feed_channel = new /datum/feed_channel - if(src.admincaster_feed_message) - src.admincaster_feed_message = new /datum/feed_message - src.access_news_network() - - else if(href_list["ac_show_channel"]) - var/datum/feed_channel/FC = locate(href_list["ac_show_channel"]) - src.admincaster_feed_channel = FC - src.admincaster_screen = 9 - src.access_news_network() - - else if(href_list["ac_pick_censor_channel"]) - var/datum/feed_channel/FC = locate(href_list["ac_pick_censor_channel"]) - src.admincaster_feed_channel = FC - src.admincaster_screen = 12 - src.access_news_network() - - else if(href_list["ac_refresh"]) - src.access_news_network() - - else if(href_list["ac_set_signature"]) - src.admincaster_signature = sanitize(input(usr, "Provide your desired signature", "Network Identity Handler", "")) - src.access_news_network() - - else if(href_list["vsc"]) - if(check_rights(R_ADMIN|R_SERVER)) - if(href_list["vsc"] == "airflow") - vsc.ChangeSettingsDialog(usr,vsc.settings) - if(href_list["vsc"] == "phoron") - vsc.ChangeSettingsDialog(usr,vsc.plc.settings) - if(href_list["vsc"] == "default") - vsc.SetDefault(usr) - - else if(href_list["toglang"]) - if(check_rights(R_SPAWN)) - var/mob/M = locate(href_list["toglang"]) - if(!istype(M)) - to_chat(usr, "[M] is illegal type, must be /mob!") - return - var/lang2toggle = href_list["lang"] - var/datum/language/L = all_languages[lang2toggle] - - if(L in M.languages) - if(!M.remove_language(lang2toggle)) - to_chat(usr, "Failed to remove language '[lang2toggle]' from \the [M]!") - else - if(!M.add_language(lang2toggle)) - to_chat(usr, "Failed to add language '[lang2toggle]' from \the [M]!") - - show_player_panel(M) - - else if(href_list["paralyze"]) - var/mob/M = locate(href_list["paralyze"]) - paralyze_mob(M) - -//tape and players stuff //by infinity - if(href_list["listen_tape_sound"]) - var/sound/S = sound(locate(href_list["listen_tape_sound"])) - if(!S) return - - S.channel = 703 - sound_to(usr, S) - to_chat(usr, "Stop listening") - - if(href_list["stop_tape_sound"]) - var/sound/S = sound(null) - S.channel = 703 - sound_to(usr, S) - - // player info stuff - - if(href_list["add_player_info"]) - var/key = href_list["add_player_info"] - var/add = sanitize(input("Add Player Info") as null|text) - if(!add) return - - notes_add(key,add,usr) - show_player_info(key) - - if(href_list["remove_player_info"]) - var/key = href_list["remove_player_info"] - var/index = text2num(href_list["remove_index"]) - - notes_del(key, index) - show_player_info(key) - - if(href_list["notes"]) - if(href_list["notes"] == "set_filter") - var/choice = input(usr,"Please specify a text filter to use or cancel to clear.","Player Notes",null) as text|null - PlayerNotesPage(choice) - else - var/ckey = href_list["ckey"] - if(!ckey) - var/mob/M = locate(href_list["mob"]) - if(ismob(M)) - ckey = LAST_CKEY(M) - show_player_info(ckey) - return - if(href_list["setstaffwarn"]) - var/mob/M = locate(href_list["setstaffwarn"]) - if(!ismob(M)) return - - if(M.client && M.client.holder) return // admins don't get staffnotify'd about - - switch(alert("Really set staff warn?",,"Yes","No")) - if("Yes") - var/last_ckey = LAST_CKEY(M) - var/reason = sanitize(input(usr,"Staff warn message","Staff Warn","Problem Player") as text|null) - if (!reason || reason == "") - return - notes_add(last_ckey,"\[AUTO\] Staff warn enabled: [reason]",usr) - reason += "\n-- Set by [usr.client.ckey]([usr.client.holder.rank])" - DB_staffwarn_record(last_ckey, reason) - if(M.client) - M.client.staffwarn = reason - log_and_message_admins("has enabled staffwarn on [last_ckey].\nMessage: [reason]\n") - show_player_panel(M) - if("No") - return - if(href_list["removestaffwarn"]) - var/mob/M = locate(href_list["removestaffwarn"]) - if(!ismob(M)) return - - switch(alert("Really remove staff warn?",,"Yes","No")) - if("Yes") - var/last_ckey = LAST_CKEY(M) - if(!DB_staffwarn_remove(last_ckey)) - return - notes_add(last_ckey,"\[AUTO\] Staff warn disabled",usr) - if(M.client) - M.client.staffwarn = null - log_and_message_admins("has removed the staffwarn on [last_ckey].\n") - show_player_panel(M) - if("No") - return - - if(href_list["pilot"]) - var/mob/M = locate(href_list["pilot"]) - if(!ismob(M)) return - - show_player_panel(M) - - if (href_list["cryo"]) - var/mob/M = locate(href_list["cryo"]) - if (!isliving(M)) - return - - var/response = alert("This will put [M] into a cryopod and despawn them. Are you sure?",,"Yes","No") == "Yes" - if (response) - if (M.client) - var/sanity_check = alert("This player is currently online. Do you really want to cryo them?",,"Yes","No") == "Yes" - - if (!sanity_check) - return - - if (M.buckled) - M.buckled.unbuckle_mob() - - var/last_ckey = LAST_CKEY(M) - - if (isAI(M)) - var/mob/living/silicon/ai/AI = M - AI.despawn() - log_and_message_admins("has forced [last_ckey]/([M]) to ghost and deactivate.") - return - - var/obj/machinery/cryopod/C - if (isrobot(M)) - for (var/obj/machinery/cryopod/robot/CP in SSmachines.machinery) - if (CP.occupant || !(CP.z in GLOB.using_map.station_levels)) - continue - C = CP - else - for (var/obj/machinery/cryopod/CP in SSmachines.machinery) - if (CP.occupant || !(CP.z in GLOB.using_map.station_levels)) - continue - C = CP - - if (!C || C.occupant) - to_chat(usr, SPAN_WARNING("Could not find an empty cryopod!")) - return - - log_and_message_admins("has put [last_ckey]/([M]) into a cryopod and ghosted them.") - - C.set_occupant(M) - var/ghost = M.ghostize(FALSE) - if (ghost) - show_player_panel(M) - return - - -/mob/living/proc/can_centcom_reply() - return 0 - -/mob/living/carbon/human/can_centcom_reply() - return istype(l_ear, /obj/item/device/radio/headset) || istype(r_ear, /obj/item/device/radio/headset) - -/mob/living/silicon/ai/can_centcom_reply() - return silicon_radio != null && !check_unable(2) - -/datum/proc/extra_admin_link(var/prefix, var/sufix, var/short_links) - return list() - -/atom/movable/extra_admin_link(var/source, var/prefix, var/sufix, var/short_links) - return list("[prefix][short_links ? "J" : "JMP"][sufix]") - -/client/extra_admin_link(source, var/prefix, var/sufix, var/short_links) - return mob ? mob.extra_admin_link(source, prefix, sufix, short_links) : list() - -/mob/extra_admin_link(var/source, var/prefix, var/sufix, var/short_links) - . = ..() - if(client && eyeobj) - . += "[prefix][short_links ? "E" : "EYE"][sufix]" - -/mob/observer/ghost/extra_admin_link(var/source, var/prefix, var/sufix, var/short_links) - . = ..() - if(mind && (mind.current && !isghost(mind.current))) - . += "[prefix][short_links ? "B" : "BDY"][sufix]" - -/proc/admin_jump_link(var/datum/target, var/source, var/delimiter = "|", var/prefix, var/sufix, var/short_links) - if(!istype(target)) - CRASH("Invalid admin jump link target: [log_info_line(target)]") - // The way admin jump links handle their src is weirdly inconsistent... - if(istype(source, /datum/admins)) - source = "src=\ref[source]" - else - source = "_src_=holder" - return jointext(target.extra_admin_link(source, prefix, sufix, short_links), delimiter) - -/datum/proc/get_admin_jump_link(var/atom/target) - return - -/mob/get_admin_jump_link(var/atom/target, var/delimiter, var/prefix, var/sufix) - return client && client.get_admin_jump_link(target, delimiter, prefix, sufix) - -/client/get_admin_jump_link(var/atom/target, var/delimiter, var/prefix, var/sufix) - if(holder) - var/short_links = get_preference_value(/datum/client_preference/ghost_follow_link_length) == GLOB.PREF_SHORT - return admin_jump_link(target, src, delimiter, prefix, sufix, short_links) diff --git a/code/modules/admin/verbs/SDQL.dm b/code/modules/admin/verbs/SDQL.dm deleted file mode 100644 index a7ec9b5d2739a..0000000000000 --- a/code/modules/admin/verbs/SDQL.dm +++ /dev/null @@ -1,478 +0,0 @@ - -//Structured Datum Query Language. Basically SQL meets BYOND objects. - -/client/proc/SDQL_query(query_text as message) - set category = "Admin" - if(!check_rights(R_DEBUG)) //Shouldn't happen... but just to be safe. - log_and_message_admins(" - Non-admin attempted to execute a SDQL query!") - - var/list/query_list = SDQL_tokenize(query_text) - - if(query_list.len < 2) - if(query_list.len > 0) - to_chat(usr, "SDQL: Too few discrete tokens in query \"[query_text]\". Please check your syntax and try again.") - return - - if(!(lowertext(query_list[1]) in list("select", "delete", "update"))) - to_chat(usr, "SDQL: Unknown query type: \"[query_list[1]]\" in query \"[query_text]\". Please check your syntax and try again.") - return - - var/list/types = list() - - var/i - for(i = 2; i <= query_list.len; i += 2) - types += query_list[i] - - if(i + 1 >= query_list.len || query_list[i + 1] != ",") - break - - i++ - - var/list/from = list() - - if(i <= query_list.len) - if(lowertext(query_list[i]) in list("from", "in")) - for(i++; i <= query_list.len; i += 2) - from += query_list[i] - - if(i + 1 >= query_list.len || query_list[i + 1] != ",") - break - - i++ - - if(from.len < 1) - from += "world" - - var/list/set_vars = list() - - if(lowertext(query_list[1]) == "update") - if(i <= query_list.len && lowertext(query_list[i]) == "set") - for(i++; i <= query_list.len; i++) - if(i + 2 <= query_list.len && query_list[i + 1] == "=") - set_vars += query_list[i] - set_vars[query_list[i]] = query_list[i + 2] - - else - to_chat(usr, "SDQL: Invalid set parameter in query \"[query_text]\". Please check your syntax and try again.") - return - - i += 3 - - if(i >= query_list.len || query_list[i] != ",") - break - - if(set_vars.len < 1) - to_chat(usr, "SDQL: Invalid or missing set in query \"[query_text]\". Please check your syntax and try again.") - return - - var/list/where = list() - - if(i <= query_list.len && lowertext(query_list[i]) == "where") - where = query_list.Copy(i + 1) - - var/list/from_objs = list() - if("world" in from) - from_objs += world - else - for(var/f in from) - if(copytext_char(f, 1, 2) == "'" || copytext_char(f, 1, 2) == "\"") - from_objs += locate(copytext_char(f, 2, length(f))) - else if(copytext_char(f, 1, 2) != "/") - from_objs += locate(f) - else - var/f2 = text2path(f) - if(text_starts_with(f, "/mob")) - for(var/mob/m in world) - if(istype(m, f2)) - from_objs += m - - else if(text_starts_with(f, "/turf/space")) - for(var/turf/space/m in world) - if(istype(m, f2)) - from_objs += m - - else if(text_starts_with(f, "/turf/simulated")) - for(var/turf/simulated/m in world) - if(istype(m, f2)) - from_objs += m - - else if(text_starts_with(f, "/turf/unsimulated")) - for(var/turf/unsimulated/m in world) - if(istype(m, f2)) - from_objs += m - - else if(text_starts_with(f, "/turf")) - for(var/turf/m in world) - if(istype(m, f2)) - from_objs += m - - else if(text_starts_with(f, "/area")) - for(var/area/m in world) - if(istype(m, f2)) - from_objs += m - - else if(text_starts_with(f, "/obj/item")) - for(var/obj/item/m in world) - if(istype(m, f2)) - from_objs += m - - else if(text_starts_with(f, "/obj/machinery")) - for(var/obj/machinery/m in world) - if(istype(m, f2)) - from_objs += m - - else if(text_starts_with(f, "/obj")) - for(var/obj/m in world) - if(istype(m, f2)) - from_objs += m - - else if(text_starts_with(f, "/atom")) - for(var/atom/m in world) - if(istype(m, f2)) - from_objs += m -/* - else - for(var/datum/m in world) - if(istype(m, f2)) - from_objs += m -*/ - - var/list/objs = list() - - for(var/from_obj in from_objs) - if("*" in types) - objs += from_obj:contents - else - for(var/f in types) - if(copytext_char(f, 1, 2) == "'" || copytext_char(f, 1, 2) == "\"") - objs += locate(copytext_char(f, 2, length(f))) in from_obj - else if(copytext_char(f, 1, 2) != "/") - objs += locate(f) in from_obj - else - var/f2 = text2path(f) - if(text_starts_with(f, "/mob")) - for(var/mob/m in from_obj) - if(istype(m, f2)) - objs += m - - else if(text_starts_with(f, "/turf/space")) - for(var/turf/space/m in from_obj) - if(istype(m, f2)) - objs += m - - else if(text_starts_with(f, "/turf/simulated")) - for(var/turf/simulated/m in from_obj) - if(istype(m, f2)) - objs += m - - else if(text_starts_with(f, "/turf/unsimulated")) - for(var/turf/unsimulated/m in from_obj) - if(istype(m, f2)) - objs += m - - else if(text_starts_with(f, "/turf")) - for(var/turf/m in from_obj) - if(istype(m, f2)) - objs += m - - else if(text_starts_with(f, "/area")) - for(var/area/m in from_obj) - if(istype(m, f2)) - objs += m - - else if(text_starts_with(f, "/obj/item")) - for(var/obj/item/m in from_obj) - if(istype(m, f2)) - objs += m - - else if(text_starts_with(f, "/obj/machinery")) - for(var/obj/machinery/m in from_obj) - if(istype(m, f2)) - objs += m - - else if(text_starts_with(f, "/obj")) - for(var/obj/m in from_obj) - if(istype(m, f2)) - objs += m - - else if(text_starts_with(f, "/atom")) - for(var/atom/m in from_obj) - if(istype(m, f2)) - objs += m - - else - for(var/datum/m in from_obj) - if(istype(m, f2)) - objs += m - - - for(var/datum/t in objs) - var/currently_false = 0 - for(i = 1, i - 1 < where.len, i++) - var/v = where[i++] - var/compare_op = where[i++] - if(!(compare_op in list("==", "=", "<>", "<", ">", "<=", ">=", "!="))) - to_chat(usr, "SDQL: Unknown comparison operator [compare_op] in where clause following [v] in query \"[query_text]\". Please check your syntax and try again.") - return - - var/j - for(j = i, j <= where.len, j++) - if(lowertext(where[j]) in list("and", "or", ";")) - break - - if(!currently_false) - var/value = SDQL_text2value(t, v) - var/result = SDQL_evaluate(t, where.Copy(i, j)) - - switch(compare_op) - if("=", "==") - currently_false = !(value == result) - - if("!=", "<>") - currently_false = !(value != result) - - if("<") - currently_false = !(value < result) - - if(">") - currently_false = !(value > result) - - if("<=") - currently_false = !(value <= result) - - if(">=") - currently_false = !(value >= result) - - - if(j > where.len || lowertext(where[j]) == ";") - break - else if(lowertext(where[j]) == "or") - if(currently_false) - currently_false = 0 - else - break - - i = j - - if(currently_false) - objs -= t - - - - to_chat(usr, "SQDL Query: [query_text]") - message_admins("[usr] executed SDQL query: \"[query_text]\".") -/* - for(var/t in types) - to_chat(usr, "Type: [t]") - for(var/t in from) - to_chat(usr, "From: [t]") - for(var/t in set_vars) - to_chat(usr, "Set: [t] = [set_vars[t]]") - if(where.len) - var/where_str = "" - for(var/t in where) - where_str += "[t] " - - to_chat(usr, "Where: [where_str]") - - to_chat(usr, "From objects:") - for(var/datum/t in from_objs) - to_chat(usr, t) - - to_chat(usr, "Objects:") - for(var/datum/t in objs) - to_chat(usr, t) -*/ - switch(lowertext(query_list[1])) - if("delete") - for(var/datum/t in objs) - // turfs are special snowflakes that explode if qdeleted - if (isturf(t)) - var/turf/T = t - T.ChangeTurf(world.turf) - else - qdel(t) - - if("update") - for(var/datum/t in objs) - objs[t] = list() - for(var/v in set_vars) - if(v in t.vars) - objs[t][v] = SDQL_text2value(t, set_vars[v]) - - for(var/datum/t in objs) - for(var/v in objs[t]) - t.vars[v] = objs[t][v] - - if("select") - var/text = "" - for(var/datum/t in objs) - if(istype(t, /atom)) - var/atom/a = t - - if(a.x) - text += "\ref[t]: [t] at ([a.x], [a.y], [a.z])
              " - - else if(a.loc && a.loc.x) - text += "\ref[t]: [t] in [a.loc] at ([a.loc.x], [a.loc.y], [a.loc.z])
              " - - else - text += "\ref[t]: [t]
              " - - else - text += "\ref[t]: [t]
              " - - //text += "[t]
              " - show_browser(usr, text, "window=sdql_result") - -/proc/SDQL_evaluate(datum/object, list/equation) - if(equation.len == 0) - return null - - else if(equation.len == 1) - return SDQL_text2value(object, equation[1]) - - else if(equation[1] == "!") - return !SDQL_evaluate(object, equation.Copy(2)) - - else if(equation[1] == "-") - return -SDQL_evaluate(object, equation.Copy(2)) - - - else - to_chat(usr, "SDQL: Sorry, equations not yet supported :(") - return null - - -/proc/SDQL_text2value(datum/object, text) - if(text2num(text) != null) - return text2num(text) - else if(text == "null") - return null - else if(copytext_char(text, 1, 2) == "'" || copytext_char(text, 1, 2) == "\"" ) - return copytext_char(text, 2, length(text)) - else if(copytext_char(text, 1, 2) == "/") - return text2path(text) - else - if(findtext(text, ".")) - var/split = findtext(text, ".") - var/v = copytext_char(text, 1, split) - - if((v in object.vars) && istype(object.vars[v], /datum)) - return SDQL_text2value(object.vars[v], copytext_char(text, split + 1)) - else - return null - - else - if(text in object.vars) - return object.vars[text] - else - return null - - -/proc/SDQL_tokenize(query_text) - - var/list/whitespace = list(" ", "\n", "\t") - var/list/single = list("(", ")", ",", "+", "-") - var/list/multi = list( - "=" = list("", "="), - "<" = list("", "=", ">"), - ">" = list("", "="), - "!" = list("", "=")) - - var/word = "" - var/list/query_list = list() - var/len = length(query_text) - - for(var/i = 1, i <= len, i++) - var/char = copytext_char(query_text, i, i + 1) - - if(char in whitespace) - if(word != "") - query_list += word - word = "" - - else if(char in single) - if(word != "") - query_list += word - word = "" - - query_list += char - - else if(char in multi) - if(word != "") - query_list += word - word = "" - - var/char2 = copytext_char(query_text, i + 1, i + 2) - - if(char2 in multi[char]) - query_list += "[char][char2]" - i++ - - else - query_list += char - - else if(char == "'") - if(word != "") - to_chat(usr, "SDQL: You have an error in your SDQL syntax, unexpected ' in query: \"[query_text]\" following \"[word]\". Please check your syntax, and try again.") - return null - - word = "'" - - for(i++, i <= len, i++) - char = copytext_char(query_text, i, i + 1) - - if(char == "'") - if(copytext_char(query_text, i + 1, i + 2) == "'") - word += "'" - i++ - - else - break - - else - word += char - - if(i > len) - to_chat(usr, "SDQL: You have an error in your SDQL syntax, unmatched ' in query: \"[query_text]\". Please check your syntax, and try again.") - return null - - query_list += "[word]'" - word = "" - - else if(char == "\"") - if(word != "") - to_chat(usr, "SDQL: You have an error in your SDQL syntax, unexpected \" in query: \"[query_text]\" following \"[word]\". Please check your syntax, and try again.") - return null - - word = "\"" - - for(i++, i <= len, i++) - char = copytext_char(query_text, i, i + 1) - - if(char == "\"") - if(copytext_char(query_text, i + 1, i + 2) == "'") - word += "\"" - i++ - - else - break - - else - word += char - - if(i > len) - to_chat(usr, "SDQL: You have an error in your SDQL syntax, unmatched \" in query: \"[query_text]\". Please check your syntax, and try again.") - return null - - query_list += "[word]\"" - word = "" - - else - word += char - - if(word != "") - query_list += word - - return query_list diff --git a/code/modules/admin/verbs/SDQL_2/SDQL_2.dm b/code/modules/admin/verbs/SDQL_2/SDQL_2.dm deleted file mode 100644 index 6a305b574a4f2..0000000000000 --- a/code/modules/admin/verbs/SDQL_2/SDQL_2.dm +++ /dev/null @@ -1,560 +0,0 @@ -// Code taken from /vg/station. - -// Examples -/* - -- Will call the proc for all computers in the world, thats dir is 2. - CALL ex_act(EX_ACT_DEVASTATING) ON /obj/machinery/computer IN world WHERE dir == 2 - -- Will open a window with a list of all the closets in the world, with a link to VV them. - SELECT /obj/structure/closet/secure_closet/security/cargo IN world WHERE icon_off == "secoff" - -- Will change all the tube lights to green, and flicker them. The semicolon is important to separate the consecutive querys, but is not required for standard one-query use. - UPDATE /obj/machinery/light SET color = "#0F0" WHERE icon_state == "tube1"; CALL flicker(1) ON /obj/machinery/light - -- Will delete all pickaxes. "IN world" is not required. - DELETE /obj/item/pickaxe - - --You can use operators other than ==, such as >, <=, != and etc.. - - --Lists can be done through [], so say UPDATE /mob SET client.color = [1, 0.75, ...]. -*/ - -// Used by update statements, this is to handle shit like preventing editing the /datum/admins though SDQL but WITHOUT +PERMISSIONS. -// Assumes the variable actually exists. -/datum/proc/SDQL_update(var/const/var_name, var/new_value) - vars[var_name] = new_value - return 1 - -/client/proc/SDQL2_query(var/query_text as message) - set category = "Debug" - - if(!check_rights(R_DEBUG)) // Shouldn't happen... but just to be safe. - message_admins("ERROR: Non-admin [usr.key] attempted to execute the following SDQL query: [query_text]") - log_admin("Non-admin [usr.key] attempted to execute the following SDQL query: [query_text]!") - return - - if(!query_text || length(query_text) < 1) - return - - var/query_log = "[key_name(src)] executed SDQL query: \"[query_text]\"." - to_world_log(query_log) - log_and_message_admins(query_log) - sleep(-1) // Incase the server crashes due to a huge query, we allow the server to log the above things (it might just delay it). - - var/list/query_list = SDQL2_tokenize(query_text) - - if(!query_list || query_list.len < 1) - return - - 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() - - switch(query_tree[1]) - if("explain") - SDQL_testout(query_tree["explain"]) - 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]] - - - from_objs = SDQL_from_objs(query_tree["from"]) - CHECK_TICK - - var/list/objs = list() - - for(var/type in select_types) - objs += SDQL_get_all(type, from_objs) - CHECK_TICK - - if("where" in query_tree) - var/objs_temp = objs - objs = list() - for(var/datum/d in objs_temp) - if(SDQL_expression(d, query_tree["where"])) - objs += d - 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 (isturf(d)) - // turfs are special snowflakes that explode if qdeleted - var/turf/T = d - T.ChangeTurf(world.turf) - else - qdel(d) - CHECK_TICK - - if("select") - var/text = "" - for(var/datum/t in objs) - 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 - if(!text) - text = "No results found." - show_browser(usr, text, "window=SDQL-result") - - if("update") - if("set" in query_tree) - var/list/set_list = query_tree["set"] - for(var/datum/d in objs) - for(var/list/sets in set_list) - var/datum/temp = d - var/i = 0 - for(var/v in sets) - if(++i == sets.len) - if(istype(temp, /turf) && (v == "x" || v == "y" || v == "z")) - break - - temp.SDQL_update(v, SDQL_expression(d, set_list[sets])) - break - - if(temp.vars.Find(v) && (istype(temp.vars[v], /datum) || istype(temp.vars[v], /client))) - temp = temp.vars[v] - - else - break - - CHECK_TICK - - to_chat(usr, "Query executed on [objs.len] object\s.") - catch(var/exception/e) - to_chat(usr, "An exception has occured during the execution of your query and your query has been aborted.") - to_chat(usr, "exception name: [e.name]") - to_chat(usr, "file/line: [e.file]/[e.line]") - return - -/proc/SDQL_parse(list/query_list) - var/datum/SDQL_parser/parser = new() - var/list/querys = list() - var/list/query_tree = list() - var/pos = 1 - var/querys_pos = 1 - var/do_parse = 0 - for(var/val in query_list) - if(val == ";") - do_parse = 1 - else if(pos >= query_list.len) - query_tree += val - do_parse = 1 - if(do_parse) - parser.query = query_tree - var/list/parsed_tree - parsed_tree = parser.parse() - if(parsed_tree.len > 0) - querys.len = querys_pos - querys[querys_pos] = parsed_tree - querys_pos++ - else //There was an error so don't run anything, and tell the user which query has errored. - to_chat(usr, "Parsing error on [querys_pos]\th query. Nothing was executed.") - return list() - query_tree = list() - do_parse = 0 - else - query_tree += val - pos++ - - qdel(parser) - - return querys - - - -/proc/SDQL_testout(list/query_tree, indent = 0) - var/spaces = "" - for(var/s = 0, s < indent, s++) - spaces += "    " - - for(var/item in query_tree) - if(istype(item, /list)) - to_chat(usr, "[spaces](") - SDQL_testout(item, indent + 1) - to_chat(usr, "[spaces])") - - else - to_chat(usr, "[spaces][item]") - - if(!isnum(item) && query_tree[item]) - - if(istype(query_tree[item], /list)) - to_chat(usr, "[spaces]    (") - SDQL_testout(query_tree[item], indent + 2) - to_chat(usr, "[spaces]    )") - - else - to_chat(usr, "[spaces]    [query_tree[item]]") - -/proc/SDQL_from_objs(list/tree) - if("world" in tree) - return world - - return SDQL_expression(world, tree) - - -/proc/SDQL_get_all(type, location) - var/list/out = list() - - // If only a single object got returned, wrap it into a list so the for loops run on it. - if (!islist(location) && location != world) - location = list(location) - - type = text2path(type) - - if(ispath(type, /mob)) - for(var/mob/d in location) - if(istype(d, type)) - out += d - - else if(ispath(type, /turf)) - for(var/turf/d in location) - if(istype(d, type)) - out += d - - else if(ispath(type, /obj)) - for(var/obj/d in location) - if(istype(d, type)) - out += d - - else if(ispath(type, /area)) - for(var/area/d in location) - if(istype(d, type)) - out += d - - else if(ispath(type, /atom)) - for(var/atom/d in location) - if(istype(d, type)) - out += d - - else - for(var/datum/d in location) - if(istype(d, type)) - out += d - - return out - - -/proc/SDQL_expression(datum/object, list/expression, start = 1) - var/result = 0 - var/val - - for(var/i = start, i <= expression.len, i++) - var/op = "" - - if(i > start) - op = expression[i] - i++ - - var/list/ret = SDQL_value(object, expression, i) - val = ret["val"] - i = ret["i"] - - if(op != "") - switch(op) - if("+") - result += val - if("-") - result -= val - if("*") - result *= val - if("/") - result /= val - if("&") - result &= val - if("|") - result |= val - if("^") - result ^= val - if("=", "==") - result = (result == val) - if("!=", "<>") - result = (result != val) - if("<") - result = (result < val) - if("<=") - result = (result <= val) - if(">") - result = (result > val) - if(">=") - result = (result >= val) - if("and", "&&") - result = (result && val) - if("or", "||") - result = (result || val) - else - to_chat(usr, "SDQL2: Unknown op [op]") - result = null - else - result = val - - return result - -/proc/SDQL_value(datum/object, list/expression, start = 1) - var/i = start - var/val = null - - if(i > expression.len) - return list("val" = null, "i" = i) - - if(istype(expression[i], /list)) - val = SDQL_expression(object, expression[i]) - - else if(expression[i] == "!") - var/list/ret = SDQL_value(object, expression, i + 1) - val = !ret["val"] - i = ret["i"] - - else if(expression[i] == "~") - var/list/ret = SDQL_value(object, expression, i + 1) - val = ~ret["val"] - i = ret["i"] - - else if(expression[i] == "-") - var/list/ret = SDQL_value(object, expression, i + 1) - val = -ret["val"] - i = ret["i"] - - else if(expression[i] == "null") - val = null - - else if(isnum(expression[i])) - val = expression[i] - - else if(copytext_char(expression[i], 1, 2) in list("'", "\"")) - val = copytext_char(expression[i], 2, length(expression[i])) - - else if(expression[i] == "\[") - var/list/expressions_list = expression[++i] - val = list() - for(var/list/expression_list in expressions_list) - var/result = SDQL_expression(object, expression_list) - var/assoc - if (expressions_list[expression_list] != null) - assoc = SDQL_expression(object, expressions_list[expression_list]) - - if (assoc != null) - // Need to insert the key like this to prevent duplicate keys fucking up. - var/list/dummy = list() - dummy[result] = assoc - result = dummy - - val += result - - else - val = SDQL_var(object, expression, i, object) - i = expression.len - - return list("val" = val, "i" = i) - -/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] == ".") && !(expression[start] in exclude)) - var/name = expression[start] - v = global.vars[name] - - else if (expression [start] == "{" && long) - if (lowertext(copytext_char(expression[start + 1], 1, 3)) != "0x") - to_chat(usr, "Invalid pointer syntax: [expression[start + 1]]") - return null - v = locate("\[[expression[start + 1]]]") - if (!v) - to_chat(usr, "Invalid pointer: [expression[start + 1]]") - return null - start++ - - else if ((!long || expression[start + 1] == ".") && (expression[start] in object.vars)) - v = object.vars[expression[start]] - - else if (long && expression[start + 1] == ":" && hascall(object, expression[start])) - v = expression[start] - - else if (!long || expression[start + 1] == ".") - switch(expression[start]) - if("usr") - v = usr - if("src") - v = source - if("marked") - if(usr.client && usr.client.holder && usr.client.holder.marked_datum()) - v = usr.client.holder.marked_datum() - else - return null - if("global") - v = world // World is mostly a token, really. - else - return null - - else if (object == world) // Shitty ass hack kill me. - v = expression[start] - - if(long) - if (expression[start + 1] == ".") - return SDQL_var(v, expression[start + 2], source = source) - - else if (expression[start + 1] == ":") - return SDQL_function(object, v, expression[start + 2], source) - - else if (expression[start + 1] == "\[" && islist(v)) - var/list/L = v - var/index = SDQL_expression(source, expression[start + 2]) - if (isnum(index) && (!IsInteger(index) || L.len < index)) - to_chat(usr, "Invalid list index: [index]") - return null - - return L[index] - - return v - - -/proc/SDQL_function(var/datum/object, var/procname, var/list/arguments, source) - set waitfor = FALSE - - var/list/new_args = list() - for(var/arg in arguments) - new_args[++new_args.len] = SDQL_expression(source, arg) - - if (object == world) // Global proc. - procname = "/proc/[procname]" - return call(procname)(arglist(new_args)) - - return call(object, procname)(arglist(new_args)) // Spawn in case the function sleeps. - - -/proc/SDQL2_tokenize(query_text) - - - var/list/whitespace = list(" ", "\n", "\t") - var/list/single = list("(", ")", ",", "+", "-", ".", "\[", "]", "{", "}", ";", ":") - var/list/multi = list( - "=" = list("", "="), - "<" = list("", "=", ">"), - ">" = list("", "="), - "!" = list("", "=")) - - var/word = "" - var/list/query_list = list() - var/len = length(query_text) - - for(var/i = 1, i <= len, i++) - var/char = copytext_char(query_text, i, i + 1) - - if(char in whitespace) - if(word != "") - query_list += word - word = "" - - else if(char in single) - if(word != "") - query_list += word - word = "" - - query_list += char - - else if(char in multi) - if(word != "") - query_list += word - word = "" - - var/char2 = copytext_char(query_text, i + 1, i + 2) - - if(char2 in multi[char]) - query_list += "[char][char2]" - i++ - - else - query_list += char - - else if(char == "'") - if(word != "") - to_chat(usr, "SDQL2: You have an error in your SDQL syntax, unexpected ' in query: \"[query_text]\" following \"[word]\". Please check your syntax, and try again.") - return null - - word = "'" - - for(i++, i <= len, i++) - char = copytext_char(query_text, i, i + 1) - - if(char == "'") - if(copytext_char(query_text, i + 1, i + 2) == "'") - word += "'" - i++ - - else - break - - else - word += char - - if(i > len) - to_chat(usr, "SDQL2: You have an error in your SDQL syntax, unmatched ' in query: \"[query_text]\". Please check your syntax, and try again.") - return null - - query_list += "[word]'" - word = "" - - else if(char == "\"") - if(word != "") - to_chat(usr, "SDQL2: You have an error in your SDQL syntax, unexpected \" in query: \"[query_text]\" following \"[word]\". Please check your syntax, and try again.") - return null - - word = "\"" - - for(i++, i <= len, i++) - char = copytext_char(query_text, i, i + 1) - - if(char == "\"") - if(copytext_char(query_text, i + 1, i + 2) == "'") - word += "\"" - i++ - - else - break - - else - word += char - - if(i > len) - to_chat(usr, "SDQL2: You have an error in your SDQL syntax, unmatched \" in query: \"[query_text]\". Please check your syntax, and try again.") - return null - - query_list += "[word]\"" - word = "" - - else - word += char - - if(word != "") - query_list += word - return query_list diff --git a/code/modules/admin/verbs/SDQL_2/SDQL_2_parser.dm b/code/modules/admin/verbs/SDQL_2/SDQL_2_parser.dm deleted file mode 100644 index 1e2d902b62eca..0000000000000 --- a/code/modules/admin/verbs/SDQL_2/SDQL_2_parser.dm +++ /dev/null @@ -1,586 +0,0 @@ -//I'm pretty sure that this is a recursive [s]descent[/s] ascent parser. - - -//Spec - -////////// -// -// query : select_query | delete_query | update_query | call_query | explain -// explain : 'EXPLAIN' query -// -// select_query : 'SELECT' select_list [('FROM' | 'IN') from_list] ['WHERE' bool_expression] -// delete_query : 'DELETE' select_list [('FROM' | 'IN') from_list] ['WHERE' bool_expression] -// update_query : 'UPDATE' select_list [('FROM' | 'IN') from_list] 'SET' assignments ['WHERE' bool_expression] -// call_query : 'CALL' call_function ['ON' select_list [('FROM' | 'IN') from_list] ['WHERE' bool_expression]] -// -// select_list : select_item [',' select_list] -// select_item : '*' | select_function | object_type -// select_function : count_function -// count_function : 'COUNT' '(' '*' ')' | 'COUNT' '(' object_types ')' -// -// from_list : from_item [',' from_list] -// from_item : 'world' | object_type -// -// call_function : ['(' [arguments] ')'] -// arguments : expression [',' arguments] -// -// object_type : | string -// -// assignments : assignment, [',' assignments] -// assignment : '=' expression -// variable : | '.' variable | '[' ']' | '[' ']' '.' variable -// -// bool_expression : expression comparitor expression [bool_operator bool_expression] -// expression : ( unary_expression | '(' expression ')' | value ) [binary_operator expression] -// unary_expression : unary_operator ( unary_expression | value | '(' expression ')' ) -// comparitor : '=' | '==' | '!=' | '<>' | '<' | '<=' | '>' | '>=' -// value : variable | string | number | 'null' -// unary_operator : '!' | '-' | '~' -// binary_operator : comparitor | '+' | '-' | '/' | '*' | '&' | '|' | '^' -// bool_operator : 'AND' | '&&' | 'OR' | '||' -// -// string : ''' ''' | '"' '"' -// number : -// -////////// - -/datum/SDQL_parser - var/query_type - var/error = 0 - - var/list/query - var/list/tree - - var/list/select_functions = list("count") - var/list/boolean_operators = list("and", "or", "&&", "||") - var/list/unary_operators = list("!", "-", "~") - var/list/binary_operators = list("+", "-", "/", "*", "&", "|", "^") - var/list/comparitors = list("=", "==", "!=", "<>", "<", "<=", ">", ">=") - - - -/datum/SDQL_parser/New(query_list) - query = query_list - - - -/datum/SDQL_parser/proc/parse_error(error_message) - error = 1 - to_chat(usr, "SQDL2 Parsing Error: [error_message]") - return query.len + 1 - -/datum/SDQL_parser/proc/parse() - tree = list() - query(1, tree) - - if(error) - return list() - else - return tree - -/datum/SDQL_parser/proc/token(i) - if(i <= query.len) - return query[i] - - else - return null - -/datum/SDQL_parser/proc/tokens(i, num) - if(i + num <= query.len) - return query.Copy(i, i + num) - - else - return null - -/datum/SDQL_parser/proc/tokenl(i) - return lowertext(token(i)) - -//query: select_query | delete_query | update_query -/datum/SDQL_parser/proc/query(i, list/node) - query_type = tokenl(i) - - switch(query_type) - if("select") - select_query(i, node) - - if("delete") - delete_query(i, node) - - if("update") - update_query(i, node) - - if("call") - call_query(i, node) - - if("explain") - node += "explain" - node["explain"] = list() - query(i + 1, node["explain"]) - - -// select_query: 'SELECT' select_list [('FROM' | 'IN') from_list] ['WHERE' bool_expression] -/datum/SDQL_parser/proc/select_query(i, list/node) - var/list/select = list() - i = select_list(i + 1, select) - - node += "select" - node["select"] = select - - selectors(i, node) - - return i - - -//delete_query: 'DELETE' select_list [('FROM' | 'IN') from_list] ['WHERE' bool_expression] -/datum/SDQL_parser/proc/delete_query(i, list/node) - var/list/select = list() - i = select_list(i + 1, select) - - node += "delete" - node["delete"] = select - - selectors(i, node) - - return i - - -//update_query: 'UPDATE' select_list [('FROM' | 'IN') from_list] 'SET' assignments ['WHERE' bool_expression] -/datum/SDQL_parser/proc/update_query(i, list/node) - var/list/select = list() - i = select_list(i + 1, select) - - node += "update" - node["update"] = select - - if(tokenl(i) != "set") - i = parse_error("UPDATE has misplaced SET") - - var/list/set_assignments = list() - i = assignments(i + 1, set_assignments) - - node += "set" - node["set"] = set_assignments - - selectors(i, node) - - return i - - -//call_query: 'CALL' call_function ['ON' select_list [('FROM' | 'IN') from_list] ['WHERE' bool_expression]] -/datum/SDQL_parser/proc/call_query(i, list/node) - var/list/func = list() - i = variable(i + 1, func) // Yes technically does anything variable() matches but I don't care, if admins fuck up this badly then they shouldn't be allowed near SDQL. - - node += "call" - node["call"] = func - - if(tokenl(i) != "on") - return i - - var/list/select = list() - i = select_list(i + 1, select) - - node += "on" - node["on"] = select - - selectors(i, node) - - return i - -//select_list: select_item [',' select_list] -/datum/SDQL_parser/proc/select_list(i, list/node) - i = select_item(i, node) - - if(token(i) == ",") - i = select_list(i + 1, node) - - return i - -//assignments: assignment, [',' assignments] -/datum/SDQL_parser/proc/assignments(i, list/node) - i = assignment(i, node) - - if(token(i) == ",") - i = assignments(i + 1, node) - - return i - - -//select_item: '*' | select_function | object_type -/datum/SDQL_parser/proc/select_item(i, list/node) - - if(token(i) == "*") - node += "*" - i++ - - else if(tokenl(i) in select_functions) - i = select_function(i, node) - - else - i = object_type(i, node) - - return i - -// Standardized method for handling the IN/FROM and WHERE options. -/datum/SDQL_parser/proc/selectors(i, list/node) - while (token(i)) - var/tok = tokenl(i) - if (tok in list("from", "in")) - var/list/from = list() - i = from_item(i + 1, from) - - node["from"] = from - continue - - if (tok == "where") - var/list/where = list() - i = bool_expression(i + 1, where) - - node["where"] = where - continue - - parse_error("Expected either FROM, IN or WHERE token, found [token(i)] instead.") - return i + 1 - - if (!node.Find("from")) - node["from"] = list("world") - - return i - -//from_item: 'world' | object_type -/datum/SDQL_parser/proc/from_item(i, list/node) - if(token(i) == "world") - node += "world" - i++ - - else - i = expression(i, node) - - return i - - -//bool_expression: expression [bool_operator bool_expression] -/datum/SDQL_parser/proc/bool_expression(i, list/node) - - var/list/bool = list() - i = expression(i, bool) - - node[++node.len] = bool - - if(tokenl(i) in boolean_operators) - i = bool_operator(i, node) - i = bool_expression(i, node) - - return i - - -//assignment: '=' expression -/datum/SDQL_parser/proc/assignment(var/i, var/list/node, var/list/assignment_list = list()) - assignment_list += token(i) - - if(token(i + 1) == ".") - i = assignment(i + 2, node, assignment_list) - - else if(token(i + 1) == "=") - var/exp_list = list() - node[assignment_list] = exp_list - - i = expression(i + 2, exp_list) - - else - parse_error("Assignment expected, but no = found") - - return i - - -//variable: | '.' variable | '[' ']' | '[' ']' '.' variable -/datum/SDQL_parser/proc/variable(i, list/node) - var/list/L = list(token(i)) - node[++node.len] = L - - if(token(i) == "{") - L += token(i + 1) - i += 2 - - if(token(i) != "}") - parse_error("Missing } at end of pointer.") - - if(token(i + 1) == ".") - L += "." - i = variable(i + 2, L) - - else if (token(i + 1) == "(") // OH BOY PROC - var/list/arguments = list() - i = call_function(i, null, arguments) - L += ":" - L[++L.len] = arguments - - else if (token(i + 1) == "\[") - var/list/expression = list() - i = expression(i + 2, expression) - if (token(i) != "]") - parse_error("Missing ] at the end of list access.") - - L += "\[" - L[++L.len] = expression - i++ - - else - i++ - - return i - - -//object_type: | string -/datum/SDQL_parser/proc/object_type(i, list/node) - - if(copytext_char(token(i), 1, 2) == "/") - node += token(i) - - else - i = string(i, node) - - return i + 1 - - -//comparitor: '=' | '==' | '!=' | '<>' | '<' | '<=' | '>' | '>=' -/datum/SDQL_parser/proc/comparitor(i, list/node) - - if(token(i) in list("=", "==", "!=", "<>", "<", "<=", ">", ">=")) - node += token(i) - - else - parse_error("Unknown comparitor [token(i)]") - - return i + 1 - - -//bool_operator: 'AND' | '&&' | 'OR' | '||' -/datum/SDQL_parser/proc/bool_operator(i, list/node) - - if(tokenl(i) in list("and", "or", "&&", "||")) - node += token(i) - - else - parse_error("Unknown comparitor [token(i)]") - - return i + 1 - - -//string: ''' ''' | '"' '"' -/datum/SDQL_parser/proc/string(i, list/node) - - if(copytext_char(token(i), 1, 2) in list("'", "\"")) - node += token(i) - - else - parse_error("Expected string but found '[token(i)]'") - - return i + 1 - -//array: '[' expression, expression, ... ']' -/datum/SDQL_parser/proc/array(var/i, var/list/node) - // Arrays get turned into this: list("[", list(exp_1a = exp_1b, ...), ...), "[" is to mark the next node as an array. - if(copytext_char(token(i), 1, 2) != "\[") - parse_error("Expected an array but found '[token(i)]'") - return i + 1 - - node += token(i) // Add the "[" - - var/list/expression_list = list() - - i++ - if(token(i) != "]") - var/list/temp_expression_list = list() - var/tok - do - tok = token(i) - if (tok == "," || tok == ":") - if (temp_expression_list == null) - parse_error("Found ',' or ':' without expression in an array.") - return i + 1 - - expression_list[++expression_list.len] = temp_expression_list - temp_expression_list = null - if (tok == ":") - temp_expression_list = list() - i = expression(i + 1, temp_expression_list) - expression_list[expression_list[expression_list.len]] = temp_expression_list - temp_expression_list = null - tok = token(i) - if (tok != ",") - if (tok == "]") - break - - parse_error("Expected ',' or ']' after array assoc value, but found '[token(i)]'") - return i - - - i++ - continue - - temp_expression_list = list() - i = expression(i, temp_expression_list) - - while(token(i) && token(i) != "]") - - if (temp_expression_list) - expression_list[++expression_list.len] = temp_expression_list - - node[++node.len] = expression_list - - return i + 1 - -//call_function: ['(' [arguments] ')'] -/datum/SDQL_parser/proc/call_function(i, list/node, list/arguments) - if(length(tokenl(i))) - var/procname = "" - if(tokenl(i) == "global" && token(i + 1) == ".") // Global proc. - i += 2 - procname = "global." - node += procname + token(i++) - if(token(i) != "(") - parse_error("Expected ( but found '[token(i)]'") - - else if(token(i + 1) != ")") - var/list/temp_expression_list = list() - do - i = expression(i + 1, temp_expression_list) - if(token(i) == ",") - arguments[++arguments.len] = temp_expression_list - temp_expression_list = list() - continue - - while(token(i) && token(i) != ")") - - arguments[++arguments.len] = temp_expression_list // The code this is copy pasted from won't be executed when it's the last param, this fixes that. - else - i++ - else - parse_error("Expected a function but found nothing") - return i + 1 - - -//select_function: count_function -/datum/SDQL_parser/proc/select_function(i, list/node) - - parse_error("Sorry, function calls aren't available yet") - - return i - - -//expression: ( unary_expression | '(' expression ')' | value ) [binary_operator expression] -/datum/SDQL_parser/proc/expression(i, list/node) - - if(token(i) in unary_operators) - i = unary_expression(i, node) - - else if(token(i) == "(") - var/list/expr = list() - - i = expression(i + 1, expr) - - if(token(i) != ")") - parse_error("Missing ) at end of expression.") - - else - i++ - - node[++node.len] = expr - - else - i = value(i, node) - - if(token(i) in binary_operators) - i = binary_operator(i, node) - i = expression(i, node) - - else if(token(i) in comparitors) - i = binary_operator(i, node) - - var/list/rhs = list() - i = expression(i, rhs) - - node[++node.len] = rhs - - - return i - - -//unary_expression: unary_operator ( unary_expression | value | '(' expression ')' ) -/datum/SDQL_parser/proc/unary_expression(i, list/node) - - if(token(i) in unary_operators) - var/list/unary_exp = list() - - unary_exp += token(i) - i++ - - if(token(i) in unary_operators) - i = unary_expression(i, unary_exp) - - else if(token(i) == "(") - var/list/expr = list() - - i = expression(i + 1, expr) - - if(token(i) != ")") - parse_error("Missing ) at end of expression.") - - else - i++ - - unary_exp[++unary_exp.len] = expr - - else - i = value(i, unary_exp) - - node[++node.len] = unary_exp - - - else - parse_error("Expected unary operator but found '[token(i)]'") - - return i - - -//binary_operator: comparitor | '+' | '-' | '/' | '*' | '&' | '|' | '^' -/datum/SDQL_parser/proc/binary_operator(i, list/node) - - if(token(i) in (binary_operators + comparitors)) - node += token(i) - - else - parse_error("Unknown binary operator [token(i)]") - - return i + 1 - - -//value: variable | string | number | 'null' -/datum/SDQL_parser/proc/value(i, list/node) - if(token(i) == "null") - node += "null" - i++ - - else if(lowertext(copytext_char(token(i), 1, 3)) == "0x" && isnum(hex2num(copytext_char(token(i), 3)))) - node += hex2num(copytext_char(token(i), 3)) - i++ - - else if(isnum(text2num(token(i)))) - node += text2num(token(i)) - i++ - - else if(copytext_char(token(i), 1, 2) in list("'", "\"")) - i = string(i, node) - - else if(copytext_char(token(i), 1, 2) == "\[") // Start a list. - i = array(i, node) - else - i = variable(i, node) - - return i - - - - -/*EXPLAIN SELECT * WHERE 42 = 6 * 9 OR val = - 5 == 7*/ diff --git a/code/modules/admin/verbs/SDQL_2/SDQL_2_std.dm b/code/modules/admin/verbs/SDQL_2/SDQL_2_std.dm deleted file mode 100644 index 5f5c09c0518f1..0000000000000 --- a/code/modules/admin/verbs/SDQL_2/SDQL_2_std.dm +++ /dev/null @@ -1,184 +0,0 @@ -// Wrappers for BYOND default procs which can't directly be called by call(). - -/proc/_abs(A) - return abs(A) - -/proc/_animate(var/atom/A, var/variables, var/time = 10, var/loop = 1, var/easing = LINEAR_EASING) - var/atom/movable/I = new - I.appearance = A.appearance - - // The appearance churn is real. - // WILL perform like shit until we get 511 and we get mutable appearances. - for (var/variable in variables) - I.vars[variable] = variables[variable] - - animate(A, appearance = I.appearance, time, loop, easing) - -/proc/_acrccos(A) - return arccos(A) - -/proc/_arcsin(A) - return arcsin(A) - -/proc/_ascii2text(A) - return ascii2text(A) - -/proc/_block(Start, End) - return block(Start, End) - -/proc/_ckey(Key) - return ckey(Key) - -/proc/_ckeyEx(Key) - return ckeyEx(Key) - -/proc/_copytext(T, Start = 1, End = 0) - return copytext_char(T, Start, End) - -/proc/_cos(X) - return cos(X) - -/proc/_get_dir(Loc1, Loc2) - return get_dir(Loc1, Loc2) - -/proc/_get_dist(Loc1, Loc2) - return get_dist(Loc1, Loc2) - -/proc/_get_step(Ref, Dir) - return get_step(Ref, Dir) - -/proc/_hearers(Depth = world.view, Center = usr) - return hearers(Depth, Center) - -/proc/_image(icon, loc, icon_state, layer, dir) - return image(icon, loc, icon_state, layer, dir) - -/proc/_length(E) - return length(E) - -/proc/_link(thing, url) - send_link(thing, url) - -/proc/_locate(X, Y, Z) - if (isnull(Y)) // Assuming that it's only a single-argument call. - return locate(X) - - return locate(X, Y, Z) - -/proc/_log(X, Y) - return log(X, Y) - -/proc/_lowertext(T) - return lowertext(T) - -/proc/_matrix(a, b, c, d, e, f) - return matrix(a, b, c, d, e, f) - -/proc/_max(...) - return max(arglist(args)) - -/proc/_md5(T) - return md5(T) - -/proc/_min(...) - return min(arglist(args)) - -/proc/_new(type, arguments) - return new type (arglist(arguments)) - -/proc/_num2text(N, SigFig = 6) - return num2text(N, SigFig) - -/proc/_ohearers(Dist, Center = usr) - return ohearers(Dist, Center) - -/proc/_orange(Dist, Center = usr) - return orange(Dist, Center) - -/proc/_output(thing, msg, control) - send_output(thing, msg, control) - -/proc/_oview(Dist, Center = usr) - return oview(Dist, Center) - -/proc/_oviewers(Dist, Center = usr) - return oviewers(Dist, Center) - -/proc/_params2list(Params) - return params2list(Params) - -/proc/_pick(...) - return pick(arglist(args)) - -/proc/_prob(P) - return prob(P) - -/proc/_rand(L = 0, H = 1) - return rand(L, H) - -/proc/_range(Dist, Center = usr) - return range(Dist, Center) - -/proc/_regex(pattern, flags) - return regex(pattern, flags) - -/proc/_REGEX_QUOTE(text) - return REGEX_QUOTE(text) - -/proc/_REGEX_QUOTE_REPLACEMENT(text) - return REGEX_QUOTE_REPLACEMENT(text) - -/proc/_replacetext(Haystack, Needle, Replacement, Start = 1,End = 0) - return replacetext_char(Haystack, Needle, Replacement, Start, End) - -/proc/_replacetextEx_char(Haystack, Needle, Replacement, Start = 1,End = 0) - return replacetextEx_char(Haystack, Needle, Replacement, Start, End) - -/proc/_rgb(R, G, B) - return rgb(R, G, B) - -/proc/_rgba(R, G, B, A) - return rgb(R, G, B, A) - -/proc/_roll(dice) - return roll(dice) - -/proc/_round(A, B = 1) - return round(A, B) - -/proc/_sin(X) - return sin(X) - -/proc/_step(Ref, Dir, Speed = 0) - return step(Ref, Dir, Speed) - - -/proc/_list_add(var/list/L, ...) - if (args.len < 2) - return - - L += args.Copy(2) - -/proc/_list_copy(var/list/L, var/Start = 1, var/End = 0) - return L.Copy(Start, End) - -/proc/_list_cut(var/list/L, var/Start = 1, var/End = 0) - L.Cut(Start, End) - -/proc/_list_find(var/list/L, var/Elem, var/Start = 1, var/End = 0) - return L.Find(Elem, Start, End) - -/proc/_list_insert(var/list/L, var/Index, var/Item) - return L.Insert(Index, Item) - -/proc/_list_join(var/list/L, var/Glue, var/Start = 0, var/End = 1) - return L.Join(Glue, Start, End) - -/proc/_list_remove(var/list/L, ...) - if (args.len < 2) - return - - L -= args.Copy(2) - -/proc/_list_swap(var/list/L, var/Index1, var/Index2) - L.Swap(Index1, Index2) diff --git a/code/modules/admin/verbs/adminhelp.dm b/code/modules/admin/verbs/adminhelp.dm deleted file mode 100644 index ee76c1633320e..0000000000000 --- a/code/modules/admin/verbs/adminhelp.dm +++ /dev/null @@ -1,140 +0,0 @@ - -//This is a list of words which are ignored by the parser when comparing message contents for names. MUST BE IN LOWER CASE! -var/global/list/adminhelp_ignored_words = list("unknown","the","a","an","of","monkey","alien","as") - -/proc/generate_ahelp_key_words(var/mob/mob, var/msg) - var/list/surnames = list() - var/list/forenames = list() - var/list/ckeys = list() - - //explode the input msg into a list - var/list/msglist = splittext(msg, " ") - - for(var/mob/M in SSmobs.mob_list) - var/list/indexing = list(M.real_name, M.name) - if(M.mind) indexing += M.mind.name - - for(var/string in indexing) - var/list/L = splittext(string, " ") - var/surname_found = 0 - //surnames - for(var/i=L.len, i>=1, i--) - var/word = ckey(L[i]) - if(word) - surnames[word] = M - surname_found = i - break - //forenames - for(var/i=1, iError: Admin-PM: You cannot send adminhelps (Muted).") - return - - adminhelped = 1 //Determines if they get the message to reply by clicking the name. - - - //clean the input msg - if(!msg) - return - msg = sanitize(msg) - if(!msg) - return - var/original_msg = msg - - - if(!mob) //this doesn't happen - return - - //generate keywords lookup - msg = generate_ahelp_key_words(mob, msg) - - // handle ticket - var/datum/client_lite/client_lite = client_repository.get_lite_client(src) - var/datum/ticket/ticket = get_open_ticket_by_client(client_lite) - if(!ticket) - ticket = new /datum/ticket(client_lite) - else if(ticket.status == TICKET_ASSIGNED) - // manually check that the target client exists here as to not spam the usr for each logged out admin on the ticket - var/admin_found = 0 - for(var/datum/client_lite/admin in ticket.assigned_admins) - var/client/admin_client = client_by_ckey(admin.ckey) - if(admin_client) - admin_found = 1 - src.cmd_admin_pm(admin_client, original_msg, ticket) - break - if(!admin_found) - to_chat(src, "Error: Private-Message: Client not found. They may have lost connection, so please be patient!") - return - - ticket.msgs += new /datum/ticket_msg(src.ckey, null, original_msg) - update_ticket_panels() - - - //Options bar: mob, details ( admin = 2, dev = 3, character name (0 = just ckey, 1 = ckey and character name), link? (0 no don't make it a link, 1 do so), - // highlight special roles (0 = everyone has same looking name, 1 = antags / special roles get a golden name) - - msg = "HELP: [get_options_bar(mob, 2, 1, 1, 1, ticket)] ([(ticket.status == TICKET_OPEN) ? "TAKE" : "JOIN"]) (CLOSE): [msg]" - - var/admin_number_afk = 0 - var/T - for(var/client/X in GLOB.admins) - if((R_ADMIN|R_MOD) & X.holder.rights) - if(X.is_afk()) - admin_number_afk++ - if(X.get_preference_value(/datum/client_preference/staff/play_adminhelp_ping) == GLOB.PREF_HEAR) - sound_to(X, 'sound/effects/adminhelp.ogg') - - T = emoji_parse(msg, X) - - to_chat(X, T) - original_msg = emoji_parse(original_msg, src) - //show it to the person adminhelping too - to_chat(src, "PM to-Staff (CLOSE): [original_msg]") - var/admin_number_present = GLOB.admins.len - admin_number_afk - log_admin("HELP: [key_name(src)]: [original_msg] - heard by [admin_number_present] non-AFK admins.") - if(admin_number_present <= 0) - adminmsg2adminirc(src, null, "[html_decode(original_msg)] - !![admin_number_afk ? "All admins AFK ([admin_number_afk])" : "No admins online"]!!") - else - adminmsg2adminirc(src, null, "[html_decode(original_msg)]") - return diff --git a/code/modules/admin/verbs/adminjump.dm b/code/modules/admin/verbs/adminjump.dm deleted file mode 100644 index 6cdca8a1ce03e..0000000000000 --- a/code/modules/admin/verbs/adminjump.dm +++ /dev/null @@ -1,144 +0,0 @@ -/mob/proc/jumpTo(var/location) - forceMove(location) - -/mob/observer/ghost/jumpTo() - stop_following() - ..() - -/client/proc/Jump(var/selected_area in area_repository.get_areas_by_z_level()) - set name = "Jump to Area" - set desc = "Area to jump to" - set category = "Admin" - if(!check_rights(R_ADMIN|R_MOD|R_DEBUG)) - return - if(!config.allow_admin_jump) - return alert("Admin jumping disabled") - - var/list/areas = area_repository.get_areas_by_z_level() - var/area/A = areas[selected_area] - mob.jumpTo(pick(get_area_turfs(A))) - log_and_message_admins("jumped to [A]") - -/client/proc/jumptoturf(var/turf/T) - set name = "Jump to Turf" - set category = "Admin" - if(!check_rights(R_ADMIN|R_MOD|R_DEBUG)) - return - if(!config.allow_admin_jump) - return alert("Admin jumping disabled") - - log_and_message_admins("jumped to [T.x],[T.y],[T.z] in [T.loc]") - mob.jumpTo(T) - -/client/proc/jumptomob(var/mob/M in SSmobs.mob_list) - set popup_menu = FALSE - set category = "Admin" - set name = "Jump to Mob" - - if(!check_rights(R_ADMIN|R_MOD|R_DEBUG)) - return - - if(config.allow_admin_jump) - log_and_message_admins("jumped to [key_name(M)]") - if(mob) - var/turf/T = get_turf(M) - if(T && isturf(T)) - mob.jumpTo(T) - else - to_chat(mob, "This mob is not located in the game world.") - else - alert("Admin jumping disabled") - -/client/proc/jumptocoord(tx as num, ty as num, tz as num) - set category = "Admin" - set name = "Jump to Coordinate" - - if(!check_rights(R_ADMIN|R_MOD|R_DEBUG)) - return - - if(!config.allow_admin_jump) - alert("Admin jumping disabled") - return - if(!mob) - return - - var/turf/T = locate(tx, ty, tz) - if(!T) - return - mob.jumpTo(T) - log_and_message_admins("jumped to coordinates [tx], [ty], [tz]") - -/proc/sorted_client_keys() - return sortKey(GLOB.clients.Copy()) - -/client/proc/jumptokey(client/C in sorted_client_keys()) - set category = "Admin" - set name = "Jump to Key" - - if(!check_rights(R_ADMIN|R_MOD|R_DEBUG)) - return - - if(config.allow_admin_jump) - if(!istype(C)) - to_chat(usr, "[C] is not a client, somehow.") - return - - var/mob/M = C.mob - log_and_message_admins("jumped to [key_name(M)]") - mob.jumpTo(get_turf(M)) - else - alert("Admin jumping disabled") - -/client/proc/Getmob(var/mob/M in SSmobs.mob_list) - set popup_menu = FALSE - set category = "Admin" - set name = "Get Mob" - set desc = "Mob to teleport" - if(!check_rights(R_ADMIN|R_MOD|R_DEBUG)) - return - if(config.allow_admin_jump) - log_and_message_admins("teleported [key_name(M)] to self.") - M.jumpTo(get_turf(mob)) - else - alert("Admin jumping disabled") - -/client/proc/Getkey() - set category = "Admin" - set name = "Get Key" - set desc = "Key to teleport" - - if(!check_rights(R_ADMIN|R_MOD|R_DEBUG)) - return - - if(config.allow_admin_jump) - var/list/keys = 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) - return - var/mob/M = selection:mob - - if(!M) - return - log_and_message_admins("teleported [key_name(M)] to self.") - if(M) - M.jumpTo(get_turf(mob)) - else - alert("Admin jumping disabled") - -/client/proc/sendmob(var/mob/M in sortmobs()) - set category = "Admin" - set name = "Send Mob" - if(!check_rights(R_ADMIN|R_MOD|R_DEBUG)) - return - if(!config.allow_admin_jump) - alert("Admin jumping disabled") - return - - var/list/areas = area_repository.get_areas_by_name() - var/area/A = input(usr, "Pick an area.", "Pick an area") as null|anything in areas - A = A ? areas[A] : A - if(A) - M.jumpTo(pick(get_area_turfs(A))) - log_and_message_admins("teleported [key_name(M)] to [A].") diff --git a/code/modules/admin/verbs/adminpm.dm b/code/modules/admin/verbs/adminpm.dm deleted file mode 100644 index d7b8f51a8854b..0000000000000 --- a/code/modules/admin/verbs/adminpm.dm +++ /dev/null @@ -1,175 +0,0 @@ -//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 as mob in SSmobs.mob_list) - set category = null - set name = "Admin PM Mob" - if(!holder) - to_chat(src, "Error: Admin-PM-Context: Only administrators may use this command.") - return - if( !ismob(M) || !M.client ) return - cmd_admin_pm(M.client,null) - -//shows a list of clients we could send PMs to, then forwards our choice to cmd_admin_pm -/client/proc/cmd_admin_pm_panel() - set category = "Admin" - set name = "Admin PM" - if(!holder) - to_chat(src, "Error: Admin-PM-Panel: Only administrators may use this command.") - return - var/list/client/targets[0] - for(var/client/T) - if(T.mob) - if(isnewplayer(T.mob)) - targets["(New Player) - [T]"] = T - else if(isghost(T.mob)) - targets["[T.mob.name](Ghost) - [T]"] = T - else - targets["[T.mob.real_name](as [T.mob.name]) - [T]"] = T - else - targets["(No Mob) - [T]"] = T - var/list/sorted = sortList(targets) - var/target = input(src,"To whom shall we send a message?","Admin PM",null) in sorted|null - cmd_admin_pm(targets[target],null) - - -//takes input from cmd_admin_pm_context, cmd_admin_pm_panel or /client/Topic and sends them a PM. -//Fetching a message if needed. src is the sender and C is the target client - -/client/proc/cmd_admin_pm(var/client/C, var/msg = null, var/datum/ticket/ticket = null) - if(prefs.muted & MUTE_ADMINHELP) - to_chat(src, "Error: Private-Message: You are unable to use PM-s (muted).") - return - - if(!istype(C,/client)) - if(holder) to_chat(src, "Error: Private-Message: Client not found.") - else to_chat(src, "Error: Private-Message: Client not found. They may have lost connection, so please be patient!") - return - - var/recieve_pm_type = "Player" - if(holder) - //mod PMs are maroon - //PMs sent from admins and mods display their rank - if(holder) - recieve_pm_type = holder.rank - - else if(C && !C.holder) - to_chat(src, "Error: Admin-PM: Non-admin to non-admin PM communication is forbidden.") - return - - msg = sanitize(msg) - - //get message text, limit it's length.and clean/escape html - if(!msg) - msg = input(src,"Message:", "Private message to [key_name(C, 0, holder ? 1 : 0)]") as text|null - - if(!msg) return - if(!C) - if(holder) to_chat(src, "Error: Private-Message: Client not found.") - else to_chat(src, "Error: Private-Message: Client not found. They may have lost connection, so try using an adminhelp!") - return - - msg = sanitize(msg) - - var/datum/client_lite/receiver_lite = client_repository.get_lite_client(C) - var/datum/client_lite/sender_lite = client_repository.get_lite_client(src) - - // searches for an open ticket, in case an outdated link was clicked - // I'm paranoid about the problems that could be caused by accidentally finding the wrong ticket, which is why this is strict - if(isnull(ticket)) - if(holder) - ticket = get_open_ticket_by_client(receiver_lite) // it's more likely an admin clicked a different PM link, so check admin -> player with ticket first - if(isnull(ticket) && C.holder) - ticket = get_open_ticket_by_client(sender_lite) // if still no dice, try an admin with ticket -> admin - else - ticket = get_open_ticket_by_client(sender_lite) // lastly, check player with ticket -> admin - - - if(isnull(ticket)) // finally, accept that no ticket exists - if(holder && sender_lite.ckey != receiver_lite.ckey) - ticket = new /datum/ticket(receiver_lite) - ticket.take(sender_lite) - else - to_chat(src, "You do not have an open ticket. Please use the adminhelp verb to open a ticket.") - return - else if(ticket.status != TICKET_ASSIGNED && sender_lite.ckey == ticket.owner.ckey) - to_chat(src, "Your ticket is not open for conversation. Please wait for an administrator to receive your adminhelp.") - return - - // if the sender is an admin and they're not assigned to the ticket, ask them if they want to take/join it, unless the admin is responding to their own ticket - if(holder && !(sender_lite.ckey in ticket.assigned_admin_ckeys())) - if(sender_lite.ckey != ticket.owner.ckey && !ticket.take(sender_lite)) - return - - var/recieve_message - - if(holder && !C.holder) - recieve_message = "-- Click the [recieve_pm_type]'s name to reply --\n" - if(C.adminhelped) - to_chat(C, recieve_message) - C.adminhelped = 0 - - var/sender_message = "" + create_text_tag("pm_out_alt", "PM", src) + " to [get_options_bar(C, holder ? 1 : 0, holder ? 1 : 0, 1)]" - var/msg_s = emoji_parse(msg, src) - if(holder) - sender_message += " ([(ticket.status == TICKET_OPEN) ? "TAKE" : "JOIN"]) (CLOSE)" - sender_message += ": [generate_ahelp_key_words(mob, msg_s)]" - else - sender_message += ": [msg_s]" - sender_message += "" - to_chat(src, sender_message) - - var/msg_r = emoji_parse(msg, C) - var/receiver_message = "" + create_text_tag("pm_in", "", C) + " \[[recieve_pm_type] PM\] [get_options_bar(src, C.holder ? 1 : 0, C.holder ? 1 : 0, 1)]" - if(C.holder) - receiver_message += " ([(ticket.status == TICKET_OPEN) ? "TAKE" : "JOIN"]) (CLOSE)" - receiver_message += ": [generate_ahelp_key_words(C.mob, msg_r)]" - else - receiver_message += ": [msg_r]" - receiver_message += "" - to_chat(C, receiver_message) - - //play the receiving admin the adminhelp sound (if they have them enabled) - //non-admins shouldn't be able to disable this - if(C.get_preference_value(/datum/client_preference/staff/play_adminhelp_ping) == GLOB.PREF_HEAR) - sound_to(C, 'sound/misc/staff_message.ogg') - - log_admin("PM: [key_name(src)]->[key_name(C)]: [msg]") - adminmsg2adminirc(src, C, html_decode(msg)) - - ticket.msgs += new /datum/ticket_msg(src.ckey, C.ckey, msg) - update_ticket_panels() - - //we don't use message_admins here because the sender/receiver might get it too - for(var/client/X as anything in GLOB.admins) - //check client/X is an admin and isn't the sender or recipient - if(X == C || X == src) - continue - if(X.key != key && X.key != C.key && (X.holder.rights & R_ADMIN|R_MOD)) - to_chat(X, "" + create_text_tag("pm_other", "PM:", X) + " [key_name(src, X, 0, ticket)] to [key_name(C, X, 0, ticket)] ([(ticket.status == TICKET_OPEN) ? "TAKE" : "JOIN"]) (CLOSE): [msg]") - -/client/proc/cmd_admin_irc_pm(sender) - if(prefs.muted & MUTE_ADMINHELP) - to_chat(src, "Error: Private-Message: You are unable to use PM-s (muted).") - return - - var/msg = input(src,"Message:", "Reply private message to [sender] on IRC / 400 character limit") as text|null - - if(!msg) - return - - // Handled on Bot32's end, unsure about other bots -// if(length(msg) > 400) // TODO: if message length is over 400, divide it up into separate messages, the message length restriction is based on IRC limitations. Probably easier to do this on the bots ends. -// to_chat(src, "Your message was not sent because it was more then 400 characters find your message below for ease of copy/pasting") -// to_chat(src, "[msg]") -// return - - adminmsg2adminirc(src, sender, html_decode(msg)) - msg = sanitize(msg) - log_admin("PM: [key_name(src)]->IRC-[sender]: [msg]") - admin_pm_repository.store_pm(src, "IRC-[sender]", msg) - - to_chat(src, "" + create_text_tag("pm_out_alt", "PM", src) + " to [sender]: [msg]") - for(var/client/X as anything in GLOB.admins) - if(X == src) - continue - if(X.holder.rights & R_ADMIN|R_MOD) - to_chat(X, "" + create_text_tag("pm_other", "PM:", X) + " [key_name(src, X, 0)] to [sender]: [msg]") diff --git a/code/modules/admin/verbs/adminsay.dm b/code/modules/admin/verbs/adminsay.dm deleted file mode 100644 index 03602fad39335..0000000000000 --- a/code/modules/admin/verbs/adminsay.dm +++ /dev/null @@ -1,37 +0,0 @@ -/client/proc/cmd_admin_say(msg as text) - set category = "Special Verbs" - set name = "Asay" //Gave this shit a shorter name so you only have to time out "asay" rather than "admin say" to use it --NeoFite - set hidden = 1 - if(!check_rights(R_ADMIN)) return - - msg = sanitize(msg) - msg = emoji_parse(msg, src) - if(!msg) return - - log_admin("ADMIN: [key_name(src)] : [msg]") - - if(check_rights(R_ADMIN,0)) - for(var/client/C as anything in GLOB.admins) - if(R_ADMIN & C.holder.rights) - to_chat(C, "" + create_text_tag("admin", "ADMIN:", C) + " [key_name(usr, 1)]([admin_jump_link(mob, src)]): [msg]") - -/client/proc/cmd_mod_say(msg as text) - set category = "Special Verbs" - set name = "Msay" - set hidden = 1 - - if(!check_rights(R_ADMIN|R_MOD)) - return - - msg = sanitize(msg) - msg = emoji_parse(msg, src) - log_admin("MOD: [key_name(src)] : [msg]") - - if (!msg) - return - - var/sender_name = key_name(usr, 1) - if(check_rights(R_ADMIN, 0)) - sender_name = "[sender_name]" - for(var/client/C as anything in GLOB.admins) - to_chat(C, "" + create_text_tag("mod", "MOD:", C) + " [sender_name]([admin_jump_link(mob, C.holder)]): [msg]") diff --git a/code/modules/admin/verbs/antag-ooc.dm b/code/modules/admin/verbs/antag-ooc.dm deleted file mode 100644 index fc6b1533e2786..0000000000000 --- a/code/modules/admin/verbs/antag-ooc.dm +++ /dev/null @@ -1,6 +0,0 @@ -/client/proc/aooc(msg as text) - set category = "OOC" - set name = "AOOC" - set desc = "Antagonist OOC" - - sanitize_and_communicate(/decl/communication_channel/aooc, src, msg) \ No newline at end of file diff --git a/code/modules/admin/verbs/atmosdebug.dm b/code/modules/admin/verbs/atmosdebug.dm deleted file mode 100644 index 1c4b937ffc5b1..0000000000000 --- a/code/modules/admin/verbs/atmosdebug.dm +++ /dev/null @@ -1,58 +0,0 @@ -/client/proc/atmosscan() - set category = "Mapping" - set name = "Check Piping" - set background = 1 - if(!src.holder) - to_chat(src, "Only administrators may use this command.") - return - - if(alert("WARNING: This command should not be run on a live server. Do you want to continue?", "Check Piping", "No", "Yes") == "No") - return - - to_chat(usr, "Checking for disconnected pipes...") - //all plumbing - yes, some things might get stated twice, doesn't matter. - for (var/obj/machinery/atmospherics/plumbing in world) - 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 world) - 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 world) - if (!pipe.node1 || !pipe.node2) - to_chat(usr, "Unconnected [pipe.name] located at [pipe.x],[pipe.y],[pipe.z] ([get_area(pipe.loc)])") - - to_chat(usr, "Checking for overlapping pipes...") - next_turf: - for(var/turf/T) - for(var/dir in GLOB.cardinal) - var/list/connect_types = list(1 = 0, 2 = 0, 3 = 0) - for(var/obj/machinery/atmospherics/pipe in T) - if(dir & pipe.initialize_directions) - for(var/connect_type in pipe.connect_types) - connect_types[connect_type] += 1 - if(connect_types[1] > 1 || connect_types[2] > 1 || connect_types[3] > 1) - to_chat(usr, "Overlapping pipe ([pipe.name]) located at [T.x],[T.y],[T.z] ([get_area(T)])") - continue next_turf - to_chat(usr, "Done") - -/client/proc/powerdebug() - set category = "Mapping" - set name = "Check Power" - if(!src.holder) - to_chat(src, "Only administrators may use this command.") - return - - for (var/datum/powernet/PN in SSmachines.powernets) - if (!PN.nodes || !PN.nodes.len) - if(PN.cables && (PN.cables.len > 1)) - var/obj/structure/cable/C = PN.cables[1] - to_chat(usr, "Powernet with no nodes! (number [PN.number]) - example cable at [C.x], [C.y], [C.z] in area [get_area(C.loc)]") - - if (!PN.cables || (PN.cables.len < 10)) - if(PN.cables && (PN.cables.len > 1)) - var/obj/structure/cable/C = PN.cables[1] - to_chat(usr, "Powernet with fewer than 10 cables! (number [PN.number]) - example cable at [C.x], [C.y], [C.z] in area [get_area(C.loc)]") diff --git a/code/modules/admin/verbs/cinematic.dm b/code/modules/admin/verbs/cinematic.dm deleted file mode 100644 index d1213143938f6..0000000000000 --- a/code/modules/admin/verbs/cinematic.dm +++ /dev/null @@ -1,23 +0,0 @@ -/client/proc/cinematic(var/cinematic as anything in list("explosion",null)) - set name = "Cinematic" - 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. - - if(!check_rights(R_FUN)) - return - - if(alert("Are you sure you want to run [cinematic]?","Confirmation","Yes","No")=="No") - return - switch(cinematic) - if("explosion") - if(alert("The game will be over. Are you really sure?", "Confirmation" ,"Continue", "Cancel") == "Cancel") - return - var/parameter = input(src,"station_missed = ? (0 for hit, 1 for near miss, 2 for not close)","Enter Parameter",0) as num - var/datum/game_mode/override - var/name = input(src,"Override mode = ?","Enter Parameter",null) as null|anything in SSticker.mode_cache - override = SSticker.mode_cache[name] - if(!istype(override)) - override = null - GLOB.cinematic.station_explosion_cinematic(parameter,override) - - log_and_message_admins("launched cinematic \"[cinematic]\"", src) \ No newline at end of file diff --git a/code/modules/admin/verbs/custom_event.dm b/code/modules/admin/verbs/custom_event.dm deleted file mode 100644 index 40b264eacf27b..0000000000000 --- a/code/modules/admin/verbs/custom_event.dm +++ /dev/null @@ -1,42 +0,0 @@ -// verb for admins to set custom event -/client/proc/cmd_admin_change_custom_event() - set category = "Fun" - set name = "Change Event" - - if(!holder) - to_chat(src, "Only administrators may use this command.") - return - - var/input = sanitize(input(usr, "Enter the description of the event. Be descriptive. To cancel the event, make this blank or hit cancel.", "Event", config.event) as message|null, MAX_BOOK_MESSAGE_LEN, extra = 0) - if(isnull(input)) - config.event = "" - log_admin("[usr.key] has cleared the event text.") - message_admins("[key_name_admin(usr)] has cleared the event text.") - return - - log_admin("[usr.key] has changed the event text.") - message_admins("[key_name_admin(usr)] has changed the event text.") - - config.event = input - - to_world("

              Event

              ") - to_world("

              An event is starting. OOC Info:

              ") - to_world("[config.event]") - to_world("
              ") - - SSwebhooks.send(WEBHOOK_CUSTOM_EVENT, list("text" = config.event)) - -// normal verb for players to view info -/client/verb/cmd_view_custom_event() - set category = "OOC" - set name = "Event Info" - - if(!config.event) - to_chat(src, "There currently is no known event taking place.") - to_chat(src, "Keep in mind: it is possible that an admin has not properly set this.") - return - - to_chat(src, "

              Event

              ") - to_chat(src, "

              An event is taking place. OOC Info:

              ") - to_chat(src, "[config.event]") - to_chat(src, "
              ") diff --git a/code/modules/admin/verbs/deadsay.dm b/code/modules/admin/verbs/deadsay.dm deleted file mode 100644 index 618ae5b2cc13a..0000000000000 --- a/code/modules/admin/verbs/deadsay.dm +++ /dev/null @@ -1,10 +0,0 @@ -/client/proc/dsay(msg as text) - set category = "Special Verbs" - set name = "Dsay" //Gave this shit a shorter name so you only have to time out "dsay" rather than "dead say" to use it --NeoFite - set hidden = 1 - - if(!src.holder) - to_chat(src, "Only administrators may use this command.") - return - - sanitize_and_communicate(/decl/communication_channel/dsay, src, msg, /decl/dsay_communication/admin) diff --git a/code/modules/admin/verbs/debug.dm b/code/modules/admin/verbs/debug.dm deleted file mode 100644 index aa1071df61208..0000000000000 --- a/code/modules/admin/verbs/debug.dm +++ /dev/null @@ -1,487 +0,0 @@ -/client/proc/Cell() - set category = "Debug" - set name = "Cell" - if(!mob) - return - var/turf/T = mob.loc - - if (!( istype(T, /turf) )) - return - - var/datum/gas_mixture/env = T.return_air() - - var/t = "Coordinates: [T.x],[T.y],[T.z]\n" - t += "Temperature: [env.temperature]\n" - t += "Pressure: [env.return_pressure()]kPa\n" - for(var/g in env.gas) - t += "[g]: [env.gas[g]] / [env.gas[g] * R_IDEAL_GAS_EQUATION * env.temperature / env.volume]kPa\n" - - usr.show_message(t, 1) - -/client/proc/cmd_admin_robotize(var/mob/M in SSmobs.mob_list) - set category = "Fun" - set name = "Make Robot" - - if(GAME_STATE < RUNLEVEL_GAME) - alert("Wait until the game starts") - return - if(istype(M, /mob/living/carbon/human)) - log_admin("[key_name(src)] has robotized [M.key].") - spawn(10) - M:Robotize() - - else - alert("Invalid mob") - -/client/proc/cmd_admin_animalize(var/mob/M in SSmobs.mob_list) - set category = "Fun" - set name = "Make Simple Animal" - - if(GAME_STATE < RUNLEVEL_GAME) - alert("Wait until the game starts") - return - - if(!M) - alert("That mob doesn't seem to exist, close the panel and try again.") - return - - if(istype(M, /mob/new_player)) - alert("The mob must not be a new_player.") - return - - log_admin("[key_name(src)] has animalized [M.key].") - spawn(10) - M.Animalize() - - -/client/proc/makepAI(var/turf/T in SSmobs.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 SSmobs.mob_list) - if(C.key) - available.Add(C) - var/mob/choice = input("Choose a player to play the pAI", "Spawn pAI") in available - if(!choice) - return 0 - if(!isghost(choice)) - var/confirm = input("[choice.key] isn't ghosting right now. Are you sure you want to yank them out of them out of their body and place them in this pAI?", "Spawn pAI Confirmation", "No") in list("Yes", "No") - if(confirm != "Yes") - return 0 - var/obj/item/device/paicard/card = new(T) - var/mob/living/silicon/pai/pai = new(card) - pai.SetName(sanitizeSafe(input(choice, "Enter your pAI name:", "pAI Name", "Personal AI") as text)) - pai.real_name = pai.name - pai.key = choice.key - card.setPersonality(pai) - for(var/datum/paiCandidate/candidate in paiController.pai_candidates) - if(candidate.key == choice.key) - paiController.pai_candidates.Remove(candidate) - -/client/proc/cmd_admin_slimeize(var/mob/M in SSmobs.mob_list) - set category = "Fun" - set name = "Make slime" - - if(GAME_STATE < RUNLEVEL_GAME) - alert("Wait until the game starts") - return - if(ishuman(M)) - log_admin("[key_name(src)] has slimeized [M.key].") - spawn(10) - M:slimeize() - log_and_message_admins("made [key_name(M)] into a slime.") - else - alert("Invalid mob") - -//TODO: merge the vievars version into this or something maybe mayhaps -/client/proc/cmd_debug_del_all() - set category = "Debug" - set name = "Del-All" - - // to prevent REALLY stupid deletions - var/blocked = list(/obj, /mob, /mob/living, /mob/living/carbon, /mob/living/carbon/human, /mob/observer, /mob/living/silicon, /mob/living/silicon/robot, /mob/living/silicon/ai) - var/hsbitem = input(usr, "Choose an object to delete.", "Delete:") as null|anything in typesof(/obj) + typesof(/mob) - blocked - if(hsbitem) - for(var/atom/O in world) - if(istype(O, hsbitem)) - qdel(O) - log_admin("[key_name(src)] has deleted all instances of [hsbitem].") - message_admins("[key_name_admin(src)] has deleted all instances of [hsbitem].", 0) - -/client/proc/cmd_debug_make_powernets() - set category = "Debug" - set name = "Make Powernets" - 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) - -/client/proc/cmd_admin_grantfullaccess(var/mob/M in SSmobs.mob_list) - set category = "Admin" - set name = "Grant Full Access" - - if (GAME_STATE < RUNLEVEL_GAME) - alert("Wait until the game starts") - return - if (istype(M, /mob/living/carbon/human)) - var/mob/living/carbon/human/H = M - var/obj/item/card/id/id = H.GetIdCard() - if(id) - id.icon_state = "gold" - id.access = get_all_accesses() - else - id = new/obj/item/card/id(M); - id.icon_state = "gold" - id.access = get_all_accesses() - id.registered_name = H.real_name - id.assignment = "Captain" - id.SetName("[id.registered_name]'s ID Card ([id.assignment])") - H.equip_to_slot_or_del(id, slot_wear_id) - H.update_inv_wear_id() - else - alert("Invalid mob") - log_and_message_admins("has granted [M.key] full access.") - -/client/proc/cmd_assume_direct_control(var/mob/M in SSmobs.mob_list) - set category = "Admin" - set name = "Assume direct control" - set desc = "Direct intervention" - - if(!check_rights(R_DEBUG|R_ADMIN)) return - if(M.ckey) - if(alert("This mob is being controlled by [M.ckey]. Are you sure you wish to assume control of it? [M.ckey] will be made a ghost.",,"Yes","No") != "Yes") - return - else - var/mob/observer/ghost/ghost = new/mob/observer/ghost(M,1) - ghost.ckey = M.ckey - log_and_message_admins("assumed direct control of [M].") - var/mob/adminmob = src.mob - M.ckey = src.ckey - if(isghost(adminmob)) - qdel(adminmob) - - - - - - -/client/proc/cmd_admin_areatest() - set category = "Mapping" - set name = "Test areas" - - var/list/areas_all = list() - var/list/areas_with_APC = list() - var/list/areas_with_air_alarm = list() - var/list/areas_with_RC = list() - var/list/areas_with_light = list() - var/list/areas_with_LS = list() - var/list/areas_with_intercom = list() - var/list/areas_with_camera = list() - - for(var/area/A in world) - if(!(A.type in areas_all)) - areas_all.Add(A.type) - - for(var/obj/machinery/power/apc/APC in world) - var/area/A = get_area(APC) - if(!(A.type in areas_with_APC)) - areas_with_APC.Add(A.type) - - for(var/obj/machinery/alarm/alarm in world) - var/area/A = get_area(alarm) - if(!(A.type in areas_with_air_alarm)) - areas_with_air_alarm.Add(A.type) - - for(var/obj/machinery/requests_console/RC in world) - 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 world) - 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 world) - 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 world) - 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 world) - var/area/A = get_area(C) - if(!(A.type in areas_with_camera)) - areas_with_camera.Add(A.type) - - var/list/areas_without_APC = areas_all - areas_with_APC - var/list/areas_without_air_alarm = areas_all - areas_with_air_alarm - var/list/areas_without_RC = areas_all - areas_with_RC - var/list/areas_without_light = areas_all - areas_with_light - var/list/areas_without_LS = areas_all - areas_with_LS - var/list/areas_without_intercom = areas_all - areas_with_intercom - var/list/areas_without_camera = areas_all - areas_with_camera - - log_debug("AREAS WITHOUT AN APC:") - for(var/areatype in areas_without_APC) - log_debug("* [areatype]") - - log_debug("AREAS WITHOUT AN AIR ALARM:") - for(var/areatype in areas_without_air_alarm) - log_debug("* [areatype]") - - log_debug("AREAS WITHOUT A REQUEST CONSOLE:") - for(var/areatype in areas_without_RC) - log_debug("* [areatype]") - - log_debug("AREAS WITHOUT ANY LIGHTS:") - for(var/areatype in areas_without_light) - log_debug("* [areatype]") - - log_debug("AREAS WITHOUT A LIGHT SWITCH:") - for(var/areatype in areas_without_LS) - log_debug("* [areatype]") - - log_debug("AREAS WITHOUT ANY INTERCOMS:") - for(var/areatype in areas_without_intercom) - log_debug("* [areatype]") - - log_debug("AREAS WITHOUT ANY CAMERAS:") - for(var/areatype in areas_without_camera) - log_debug("* [areatype]") - -/datum/admins/proc/cmd_admin_dress() - set category = "Fun" - set name = "Select equipment" - - if(!check_rights(R_FUN)) - return - - var/mob/living/carbon/human/H = input("Select mob.", "Select equipment.") as null|anything in GLOB.human_mob_list - if(!H) - return - - var/decl/hierarchy/outfit/outfit = input("Select outfit.", "Select equipment.") as null|anything in outfits() - if(!outfit) - return - - var/reset_equipment = (outfit.flags&OUTFIT_RESET_EQUIPMENT) - if(!reset_equipment) - reset_equipment = alert("Do you wish to delete all current equipment first?", "Delete Equipment?","Yes", "No") == "Yes" - dressup_human(H, outfit, reset_equipment) - -/proc/dressup_human(var/mob/living/carbon/human/H, var/decl/hierarchy/outfit/outfit, var/undress = TRUE) - if(!H || !outfit) - return - if(undress) - H.delete_inventory(TRUE) - outfit.equip(H) - log_and_message_admins("changed the equipment of [key_name(H)] to [outfit.name].") - -/client/proc/startSinglo() - set category = "Debug" - set name = "Start Singularity" - set desc = "Sets up the singularity and all machines to get power flowing" - - 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 world) - if(E.anchored) - E.active = 1 - - for(var/obj/machinery/field_generator/F in world) - if(F.anchored) - F.Varedit_start = 1 - spawn(30) - for(var/obj/machinery/the_singularitygen/G in world) - if(G.anchored) - var/obj/singularity/S = new /obj/singularity(get_turf(G), 50) - spawn(0) - qdel(G) - S.energy = 1750 - S.current_size = 7 - S.icon = 'icons/effects/224x224.dmi' - S.icon_state = "singularity_s7" - S.pixel_x = -96 - S.pixel_y = -96 - S.grav_pull = 0 - //S.consume_range = 3 - S.dissipate = 0 - //S.dissipate_delay = 10 - //S.dissipate_track = 0 - //S.dissipate_strength = 10 - - for(var/obj/machinery/power/rad_collector/Rad in world) - if(Rad.anchored) - if(!Rad.P) - var/obj/item/tank/phoron/Phoron = new/obj/item/tank/phoron(Rad) - Phoron.air_contents.gas[GAS_PHORON] = 70 - Rad.drainratio = 0 - Rad.P = Phoron - Phoron.forceMove(Rad) - - if(!Rad.active) - Rad.toggle_power() - - for(var/obj/machinery/power/smes/SMES in world) - if(SMES.anchored) - SMES.input_attempt = 1 - -/client/proc/cmd_debug_mob_lists() - set category = "Debug" - set name = "Debug Mob Lists" - set desc = "For when you just gotta know" - - switch(input("Which list?") in list("Players","Admins","Mobs","Living Mobs","Dead Mobs", "Ghost Mobs", "Clients")) - if("Players") - to_chat(usr, jointext(GLOB.player_list,",")) - if("Admins") - to_chat(usr, jointext(GLOB.admins,",")) - if("Mobs") - to_chat(usr, jointext(SSmobs.mob_list,",")) - if("Living Mobs") - to_chat(usr, jointext(GLOB.living_mob_list_,",")) - if("Dead Mobs") - to_chat(usr, jointext(GLOB.dead_mob_list_,",")) - if("Ghost Mobs") - to_chat(usr, jointext(GLOB.ghost_mob_list,",")) - if("Clients") - to_chat(usr, jointext(GLOB.clients,",")) - -// DNA2 - Admin Hax -/client/proc/cmd_admin_toggle_block(var/mob/M,var/block) - if(GAME_STATE < RUNLEVEL_GAME) - alert("Wait until the game starts") - return - if(istype(M, /mob/living/carbon)) - M.dna.SetSEState(block,!M.dna.GetSEState(block)) - domutcheck(M,null,MUTCHK_FORCED) - M.update_mutations() - var/state="[M.dna.GetSEState(block)?"on":"off"]" - var/blockname=assigned_blocks[block] - message_admins("[key_name_admin(src)] has toggled [M.key]'s [blockname] block [state]!") - log_admin("[key_name(src)] has toggled [M.key]'s [blockname] block [state]!") - else - alert("Invalid mob") - -/datum/admins/proc/view_runtimes() - set category = "Debug" - set name = "View Runtimes" - set desc = "Open the Runtime Viewer" - - if(!check_rights(R_DEBUG)) - return - - GLOB.error_cache.show_to(usr.client) - -/client/proc/cmd_analyse_health_panel() - set category = "Debug" - set name = "Analyse Health" - set desc = "Get an advanced health reading on a human mob." - - var/mob/living/carbon/human/H = input("Select mob.", "Analyse Health") as null|anything in GLOB.human_mob_list - if(!H) return - - cmd_analyse_health(H) - -/client/proc/cmd_analyse_health(var/mob/living/carbon/human/H) - - if(!check_rights(R_DEBUG)) - return - - if(!H) return - - var/dat = display_medical_data(H.get_raw_medical_data(), SKILL_MAX) - - dat += text("
              Close", usr) - show_browser(usr, dat, "window=scanconsole;size=430x600") - -/client/proc/cmd_analyse_health_context(mob/living/carbon/human/H as mob in GLOB.human_mob_list) - set category = null - set name = "Analyse Human Health" - - if(!check_rights(R_DEBUG)) - return - if(!ishuman(H)) return - cmd_analyse_health(H) - -/obj/effect/debugmarker - icon = 'icons/effects/lighting_overlay.dmi' - icon_state = "transparent" - layer = HOLOMAP_LAYER - alpha = 127 - -/client/var/list/image/powernet_markers = list() -/client/proc/visualpower() - set category = "Debug" - set name = "Visualize Powernets" - - if(!check_rights(R_DEBUG)) return - visualpower_remove() - powernet_markers = list() - - for(var/datum/powernet/PN in SSmachines.powernets) - var/netcolor = rgb(rand(100,255),rand(100,255),rand(100,255)) - for(var/obj/structure/cable/C in PN.cables) - var/image/I = image('icons/effects/lighting_overlay.dmi', get_turf(C), "transparent") - I.plane = DEFAULT_PLANE - I.layer = EXPOSED_WIRE_LAYER - I.alpha = 127 - I.color = netcolor - I.maptext = "\ref[PN]" - powernet_markers += I - images += powernet_markers - -/client/proc/visualpower_remove() - set category = "Debug" - set name = "Remove Powernets Visuals" - - images -= powernet_markers - QDEL_NULL_LIST(powernet_markers) - -/client/proc/toggle_planet_repopulating() - set category = "Debug" - set name = "Toggle Planet Mob Repopulating" - - GLOB.planet_repopulation_disabled = !GLOB.planet_repopulation_disabled - log_and_message_admins("toggled planet mob repopulating [GLOB.planet_repopulation_disabled ? "OFF" : "ON"].") - -/client/proc/spawn_exoplanet(exoplanet_type as anything in subtypesof(/obj/effect/overmap/visitable/sector/exoplanet)) - set category = "Debug" - set name = "Create Exoplanet" - - var/budget = input("Ruins budget. Default is 5, a budget of 0 will not spawn any ruins, 5 will spawn around 3-5 ruins:", "Ruins Budget", 5) as num | null - - if (isnull(budget) || budget < 0) - budget = 5 - - var/theme = input("Choose a theme:", "Theme") as anything in typesof(/datum/exoplanet_theme) | null - - if (!theme) - theme = /datum/exoplanet_theme - - var/daycycle = alert("Should the planet have a day-night cycle?","Day Night Cycle", "Yes", "No") - - if (daycycle == "Yes") - daycycle = TRUE - else - daycycle = FALSE - - var/last_chance = alert("Spawn exoplanet?", "Final Confirmation", "Yes", "Cancel") - - if (last_chance == "Cancel") - return - - var/obj/effect/overmap/visitable/sector/exoplanet/new_planet = new exoplanet_type(null, world.maxx, world.maxy) - new_planet.features_budget = budget - new_planet.themes = list(new theme) - new_planet.lightlevel = rand(5, 10)/10 - - log_and_message_admins("is spawning [new_planet] at [new_planet.start_x],[new_planet.start_y], containing Z [english_list(new_planet.map_z)]") - new_planet.build_level() - message_admins("[new_planet] has completed generation.") diff --git a/code/modules/admin/verbs/diagnostics.dm b/code/modules/admin/verbs/diagnostics.dm deleted file mode 100644 index 58c4364ae275d..0000000000000 --- a/code/modules/admin/verbs/diagnostics.dm +++ /dev/null @@ -1,129 +0,0 @@ -/client/proc/air_report() - set category = "Debug" - set name = "Show Air Report" - - if(!SSair) - alert(usr,"SSair not found.","Air Report") - return - - var/active_groups = SSair.active_zones - var/inactive_groups = SSair.zones.len - active_groups - - var/hotspots = 0 - for(var/obj/hotspot/hotspot in world) - hotspots++ - - var/active_on_main_station = 0 - var/inactive_on_main_station = 0 - for(var/zone/zone in SSair.zones) - var/turf/simulated/turf = locate() in zone.contents - if(turf && (turf.z in GLOB.using_map.station_levels)) - if(zone.needs_update) - active_on_main_station++ - else - inactive_on_main_station++ - - var/output = {"AIR SYSTEMS REPORT
              -General Processing Data
              - Cycle: [SSair.times_fired]
              - Groups: [SSair.zones.len]
              ----- Active: [active_groups]
              ----- Inactive: [inactive_groups]

              ----- Active on station: [active_on_main_station]
              ----- Inactive on station: [inactive_on_main_station]
              -
              -Special Processing Data
              - Hotspot Processing: [hotspots]
              -
              -Geometry Processing Data
              - Tile Update: [SSair.tiles_to_update.len]
              -"} - - show_browser(usr, output,"window=airreport") - -/client/proc/fix_next_move() - set category = "Debug" - set name = "Unfreeze Everyone" - var/largest_move_time = 0 - var/largest_click_time = 0 - var/mob/largest_move_mob = null - var/mob/largest_click_mob = null - for(var/mob/M in world) - if(!M.client) - continue - if(M.next_move >= largest_move_time) - largest_move_mob = M - if(M.next_move > world.time) - largest_move_time = M.next_move - world.time - else - largest_move_time = 1 - if(M.next_click >= largest_click_time) - largest_click_mob = M - if(M.next_click > world.time) - largest_click_time = M.next_click - world.time - else - largest_click_time = 0 - log_admin("DEBUG: [key_name(M)] next_move = [M.next_move] next_click = [M.next_click] world.time = [world.time]") - M.next_move = 1 - M.next_click = 0 - message_admins("[key_name_admin(largest_move_mob)] had the largest move delay with [largest_move_time] frames / [largest_move_time/10] seconds!", 1) - message_admins("[key_name_admin(largest_click_mob)] had the largest click delay with [largest_click_time] frames / [largest_click_time/10] seconds!", 1) - message_admins("world.time = [world.time]", 1) - return - -/client/proc/radio_report() - set category = "Debug" - set name = "Radio report" - - var/output = "Radio Report
              " - for (var/fq in radio_controller.frequencies) - output += "Freq: [fq]
              " - var/datum/radio_frequency/fqs = radio_controller.frequencies[fq] - if (!fqs) - output += "  ERROR
              " - continue - for (var/filter in fqs.devices) - var/list/f = fqs.devices[filter] - if (!f) - output += "  [filter]: ERROR
              " - continue - output += "  [filter]: [f.len]
              " - for (var/device in f) - if (isobj(device)) - output += "    [device] ([device:x],[device:y],[device:z] in area [get_area(device)])
              " - else - output += "    [device]
              " - - show_browser(usr, output,"window=radioreport") - -/client/proc/reload_admins() - set name = "Reload Admins" - set category = "Debug" - - if(!check_rights(R_SERVER)) return - - message_admins("[usr] manually reloaded admins") - load_admins() - -/client/proc/print_jobban_old() - set name = "Print Jobban Log" - set desc = "This spams all the active jobban entries for the current round to standard output." - set category = "Debug" - - to_chat(usr, "Jobbans active in this round.") - for(var/t in jobban_keylist) - to_chat(usr, "[t]") - -/client/proc/print_jobban_old_filter() - set name = "Search Jobban Log" - set desc = "This searches all the active jobban entries for the current round and outputs the results to standard output." - set category = "Debug" - - var/job_filter = input("Contains what?","Filter") as text|null - if(!job_filter) - return - - to_chat(usr, "Jobbans active in this round.") - for(var/t in jobban_keylist) - if(findtext(t, job_filter)) - to_chat(usr, "[t]") diff --git a/code/modules/admin/verbs/dice.dm b/code/modules/admin/verbs/dice.dm deleted file mode 100644 index 7f091e880da2c..0000000000000 --- a/code/modules/admin/verbs/dice.dm +++ /dev/null @@ -1,22 +0,0 @@ -/client/proc/roll_dices() - set category = "Fun" - set name = "Roll Dice" - if(!check_rights(R_FUN)) - return - - var/sum = input("How many times should we throw?") as num - var/side = input("Select the number of sides.") as num - sum = sanitize_integer(sum, 1, INFINITY, 2) - side = sanitize_integer(side, 1, INFINITY, 6) - - var/dice = num2text(sum) + "d" + num2text(side) - - if(alert("Do you want to inform the world about your game?",,"Yes", "No") == "Yes") - to_world("

              The dice have been rolled by Gods!

              ") - - var/result = roll(dice) - - if(alert("Do you want to inform the world about the result?",,"Yes", "No") == "Yes") - to_world("

              Gods rolled [dice], result is [result]

              ") - - message_admins("[key_name_admin(src)] rolled dice [dice], result is [result]", 1) \ No newline at end of file diff --git a/code/modules/admin/verbs/fluids.dm b/code/modules/admin/verbs/fluids.dm deleted file mode 100644 index ca824bd24da37..0000000000000 --- a/code/modules/admin/verbs/fluids.dm +++ /dev/null @@ -1,125 +0,0 @@ -/datum/admins/proc/spawn_fluid_verb() - set name = "Spawn Water" - set desc = "Flood the turf you are standing on." - set category = "Debug" - - if(!check_rights(R_SPAWN)) return - var/mob/user = usr - if(istype(user) && user.client) - for(var/thing in trange(1, get_turf(user))) - var/turf/T = thing - T.add_fluid(2000, /datum/reagent/water) - -/datum/admins/proc/jump_to_fluid_source() - - set name = "Jump To Fluid Source" - set desc = "Jump to an active fluid source." - set category = "Debug" - - if(!check_rights(R_SPAWN)) return - var/mob/user = usr - if(istype(user) && user.client) - if(SSfluids.water_sources.len) - user.forceMove(get_turf(pick(SSfluids.water_sources))) - else - to_chat(usr, "No active fluid sources.") - -/datum/admins/proc/jump_to_fluid_active() - - set name = "Jump To Fluid Activity" - set desc = "Jump to an active fluid overlay." - set category = "Debug" - - if(!check_rights(R_SPAWN)) return - var/mob/user = usr - if(istype(user) && user.client) - if(SSfluids.active_fluids.len) - user.forceMove(get_turf(pick(SSfluids.active_fluids))) - else - to_chat(usr, "No active fluids.") - -/turf/simulated/open/flooded - name = "open water" - flooded = TRUE - -/turf/simulated/ocean/non_flooded - flooded = FALSE - -GLOBAL_LIST_INIT(submerged_levels, new) -/datum/admins/proc/submerge_map() - set category = "Admin" - set desc = "Submerge the map in an ocean." - set name = "Submerge Map" - - if(!check_rights(R_ADMIN)) - return - - if(!usr.z) - to_chat(usr, SPAN_WARNING("You must be on a valid z-level.")) - return - - var/list/flooding_levels = list(usr.z) - if(alert("Do you wish to flood this z-level, or this entire z-sector?", null, "This level", "Connected levels") == "Connected levels") - flooding_levels = GetConnectedZlevels(usr.z) - for(var/submerge_z in flooding_levels) - if(GLOB.submerged_levels["[submerge_z]"]) - flooding_levels -= "[submerge_z]" - if(!length(flooding_levels)) - to_chat(usr, SPAN_WARNING("This part of the map has already been dropped into an ocean.")) - return - - if(alert("Are you sure you want to drop this section of the map into the ocean?", null, "No", "Yes") == "No") - return - - to_world(SPAN_NOTICE("[usr.key] fumbled and dropped the server into an ocean, please wait for the game to catch up.")) - - sleep(10) // To ensure the message prints. - - SSfluids.suspend() - SSao.suspend() - SSicon_update.suspend() - - // Pre-flood turfs we aren't going to replace. - for(var/submerge_z in flooding_levels) - for(var/thing in block(locate(1, 1, submerge_z), locate(world.maxx, world.maxy, submerge_z))) - var/turf/T = thing - var/area/A = get_area(T) - if(A && (A.area_flags & AREA_FLAG_EXTERNAL)) - if(A.base_turf) - A.base_turf = /turf/simulated/ocean/non_flooded - if(!istype(T, /turf/space)) - T.make_flooded() - - // Generate the sea floor on the highest z-level in the set. - var/first_level = flooding_levels[1] - for(var/check_level in flooding_levels) - if(check_level < first_level) - first_level = check_level - flooding_levels -= first_level - GLOB.submerged_levels["[first_level]"] = TRUE - GLOB.using_map.base_turf_by_z["[first_level]"] = /turf/simulated/ocean - new /datum/random_map/noise/seafloor/replace_space(null, 1, 1, first_level, world.maxx, world.maxy) - - // Generate open space for the remaining z-levels. - for(var/submerge_z in flooding_levels) - GLOB.submerged_levels["[submerge_z]"] = TRUE - GLOB.using_map.base_turf_by_z["[submerge_z]"] = /turf/simulated/open - for(var/thing in block(locate(1, 1, submerge_z), locate(world.maxx, world.maxy, submerge_z))) - var/turf/T = thing - var/area/A = get_area(T) - if(A && (A.area_flags & AREA_FLAG_EXTERNAL)) - if(A.base_turf) - A.base_turf = /turf/simulated/open - if(istype(T, /turf/space)) - T.ChangeTurf(/turf/simulated/open/flooded) - else if(istype(T, /turf/simulated/open)) - T.make_flooded() - CHECK_TICK - - sleep(10) - - SSicon_update.wake() - SSao.wake() - SSfluids.wake() - - to_world(SPAN_NOTICE("[usr.key] has finished dunking the server into the ocean.")) \ No newline at end of file diff --git a/code/modules/admin/verbs/grief_fixers.dm b/code/modules/admin/verbs/grief_fixers.dm deleted file mode 100644 index 411467d010390..0000000000000 --- a/code/modules/admin/verbs/grief_fixers.dm +++ /dev/null @@ -1,49 +0,0 @@ -/client/proc/fixatmos() - set category = "Admin" - set name = "Fix Atmospherics Grief" - - if(!check_rights(R_ADMIN|R_DEBUG)) return - - if(alert("WARNING: Executing this command will perform a full reset of atmosphere. All pipelines will lose any gas that may be in them, and all zones will be reset to contain air mix as on roundstart. The supermatter engine will also be stopped (to prevent overheat due to removal of coolant). Do not use unless the map is suffering serious atmospheric issues due to grief or bug.", "Full Atmosphere Reboot", "No", "Yes") == "No") - return - - log_and_message_admins("Full atmosphere reset initiated by [usr].") - to_world("Initiating restart of atmosphere. The server may lag a bit.") - sleep(10) - var/current_time = world.timeofday - - // Depower the supermatter, as it would quickly blow up once we remove all gases from the pipes. - for(var/obj/machinery/power/supermatter/S in SSmachines.machinery) - S.power = 0 - to_chat(usr, "\[1/5\] - Supermatter depowered") - - // Remove all gases from all pipenets - for(var/net in SSmachines.pipenets) - var/datum/pipe_network/PN = net - for(var/datum/gas_mixture/G in PN.gases) - G.gas = list() - G.update_values() - - to_chat(usr, "\[2/5\] - All pipenets purged of gas.") - - // Delete all zones. - for(var/zone/Z in world) - Z.c_invalidate() - - to_chat(usr, "\[3/5\] - All ZAS Zones removed.") - - var/list/unsorted_overlays = list() - for(var/id in gas_data.tile_overlay) - unsorted_overlays |= gas_data.tile_overlay[id] - - for(var/turf/simulated/T in world) - T.air = null - T.overlays.Remove(unsorted_overlays) - T.zone = null - - to_chat(usr, "\[4/5\] - All turfs reset to roundstart values.") - - SSair.reboot() - - to_chat(usr, "\[5/5\] - ZAS Rebooted") - to_world("Atmosphere restart completed in [(world.timeofday - current_time)/10] seconds.") diff --git a/code/modules/admin/verbs/map_template_loadverb.dm b/code/modules/admin/verbs/map_template_loadverb.dm deleted file mode 100644 index 7f8952c195c7a..0000000000000 --- a/code/modules/admin/verbs/map_template_loadverb.dm +++ /dev/null @@ -1,92 +0,0 @@ -/datum/admins/proc/map_template_load() - set category = "Fun" - set desc = "Pick a map template to load at your current location. You will be able to confirm bounds before committing." - set name = "Map Template - Place" - - if (!check_rights(R_FUN)) return - - var/map = input(usr, "Choose a Map Template to place at your CURRENT LOCATION","Place Map Template") as null|anything in SSmapping.map_templates - if(!map) - return - - var/datum/map_template/template = SSmapping.map_templates[map] - - var/turf/T = get_turf(usr) - if(!T) - return - var/log_name = "([template.name]) in [get_area(T)]" - - var/list/preview = list() - for(var/S in template.get_affected_turfs(T,centered = TRUE)) - preview += image('icons/turf/overlays.dmi',S,"greenOverlay") - usr.client.images += preview - if(alert(usr,"Confirm location.","Template Confirm","Yes","No") == "Yes") - log_and_message_admins("is attempting to place a map template [log_name].") - to_chat(usr, "Attempting to place map template [log_name].") - if(template.load(T, centered = TRUE)) - log_and_message_admins("has placed a map template [log_name].") - to_chat(usr, "Successfully placed map template [log_name].") - else - log_and_message_admins("has failed to place a map template [log_name].") - to_chat(usr, "Failed to place map template [log_name].") - usr.client.images -= preview - -/datum/admins/proc/map_template_load_new_z() - set category = "Fun" - set desc = "Pick a map template to load as a new zlevel, or a set of new zlevels if multi-z." - set name = "Map Template - Place In New Z" - - if(!check_rights(R_FUN)) - return - if(GAME_STATE < RUNLEVEL_LOBBY) - to_chat(usr, "Please wait for the master controller to initialize before loading maps!") - return - - var/map = input(usr, "Choose a Map Template to place on a new zlevel","Place Map Template") as null|anything in SSmapping.map_templates - if(!map) - return - - var/datum/map_template/template = SSmapping.map_templates[map] - var/log_name = "([template.name]) on a new zlevel" - - if (template.loaded && !(template.template_flags & TEMPLATE_FLAG_ALLOW_DUPLICATES)) - var/jesus_take_the_wheel = alert(usr, "That template has already been loaded and doesn't want to be loaded again. \ - Proceeding may unpredictably break things and cause runtimes.", "Confirm load", "Cancel load", "Do you see any cops around?") == "Do you see any cops around?" - if (!jesus_take_the_wheel) - return - - log_and_message_admins("is attempting to place a map template [log_name].") - to_chat(usr, "Attempting to place map template [log_name].") - var/new_z_centre = template.load_new_z(FALSE) // Don't skip changeturf - if (new_z_centre) - log_and_message_admins("has placed a map template [log_name].") - to_chat(usr, "Successfully place map template [log_name].") - else - log_and_message_admins("has failed to place a map template [log_name].") - to_chat(usr, "Failed to place map template [log_name].") - -/datum/admins/proc/map_template_upload() - set category = "Fun" - set desc = "Upload a .dmm file to use as a map template. Any unknown types will be skipped!" - set name = "Map Template - Upload" - - if (!check_rights(R_FUN)) return - - var/map = input(usr, "Choose a Map Template to upload to template storage","Upload Map Template") as null|file - if(!map) - return - if(copytext_char("[map]",-4) != ".dmm") - to_chat(usr, "Bad map file: [map]") - return - - var/datum/map_template/M = new(list(map), "[map]") - - log_and_message_admins("is attempting to upload a map template '[map]''.") - to_chat(usr, "Attempting to upload map template '[map]''.") - if(M.preload_size()) - to_chat(usr, "Map template '[map]' ready to place ([M.width]x[M.height]).") - SSmapping.map_templates[M.name] = M - log_and_message_admins("has uploaded map template '[map]''.") - else - log_and_message_admins("failed to upload map template '[map]''.") - to_chat(usr, "Map template '[map]' failed to load properly") diff --git a/code/modules/admin/verbs/mapping.dm b/code/modules/admin/verbs/mapping.dm deleted file mode 100644 index febb5e38f00d1..0000000000000 --- a/code/modules/admin/verbs/mapping.dm +++ /dev/null @@ -1,334 +0,0 @@ -//- Are all the floors with or without air, as they should be? (regular or airless) -//- Does the area have an APC? -//- Does the area have an Air Alarm? -//- Does the area have a Request Console? -//- Does the area have lights? -//- Does the area have a light switch? -//- Does the area have enough intercoms? -//- Does the area have enough security cameras? (Use the 'Camera Range Display' verb under Debug) -//- Is the area connected to the scrubbers air loop? -//- Is the area connected to the vent air loop? (vent pumps) -//- Is everything wired properly? -//- Does the area have a fire alarm and firedoors? -//- Do all pod doors work properly? -//- Are accesses set properly on doors, pod buttons, etc. -//- Are all items placed properly? (not below vents, scrubbers, tables) -//- Does the disposal system work properly from all the disposal units in this room and all the units, the pipes of which pass through this room? -//- Check for any misplaced or stacked piece of pipe (air and disposal) -//- Check for any misplaced or stacked piece of wire -//- Identify how hard it is to break into the area and where the weak points are -//- Check if the area has too much empty space. If so, make it smaller and replace the rest with maintenance tunnels. - -var/global/camera_range_display_status = 0 -var/global/intercom_range_display_status = 0 - -/obj/effect/debugging/camera_range - icon = 'icons/480x480.dmi' - icon_state = "25percent" - -/obj/effect/debugging/camera_range/New() - pixel_x = -224 - pixel_y = -224 - -/obj/effect/debugging/marker - icon = 'icons/turf/areas.dmi' - icon_state = "yellow" - -/obj/effect/debugging/marker/Move() - return 0 - -/client/proc/do_not_use_these() - set category = "Mapping" - set name = "-None of these are for ingame use!!" - -/client/proc/camera_view() - set category = "Mapping" - set name = "Camera Range Display" - - if(camera_range_display_status) - camera_range_display_status = 0 - else - camera_range_display_status = 1 - - - - for(var/obj/effect/debugging/camera_range/C in world) - qdel(C) - - if(camera_range_display_status) - for(var/obj/machinery/camera/C in cameranet.cameras) - new/obj/effect/debugging/camera_range(C.loc) - - - -/client/proc/sec_camera_report() - set category = "Mapping" - set name = "Camera Report" - - var/list/obj/machinery/camera/CL = list() - - for(var/obj/machinery/camera/C in cameranet.cameras) - CL += C - - var/output = {"CAMERA ANNOMALITIES REPORT
              -The following annomalities have been detected. The ones in red need immediate attention: Some of those in black may be intentional.
                "} - - for(var/obj/machinery/camera/C1 in CL) - for(var/obj/machinery/camera/C2 in CL) - if(C1 != C2) - if(C1.c_tag == C2.c_tag) - output += "
              • c_tag match for sec. cameras at \[[C1.x], [C1.y], [C1.z]\] ([C1.loc.loc]) and \[[C2.x], [C2.y], [C2.z]\] ([C2.loc.loc]) - c_tag is [C1.c_tag]
              • " - if(C1.loc == C2.loc && C1.dir == C2.dir && C1.pixel_x == C2.pixel_x && C1.pixel_y == C2.pixel_y) - output += "
              • FULLY overlapping sec. cameras at \[[C1.x], [C1.y], [C1.z]\] ([C1.loc.loc]) Networks: [C1.network] and [C2.network]
              • " - if(C1.loc == C2.loc) - output += "
              • overlapping sec. cameras at \[[C1.x], [C1.y], [C1.z]\] ([C1.loc.loc]) Networks: [C1.network] and [C2.network]
              • " - var/turf/T = get_step(C1,turn(C1.dir,180)) - if(!T || !isturf(T) || !T.density ) - if(!(locate(/obj/structure/grille,T))) - var/window_check = 0 - for(var/obj/structure/window/W in T) - if (W.dir == turn(C1.dir,180) || (W.dir in list(NORTHEAST,SOUTHEAST,SOUTHWEST,NORTHWEST)) ) - window_check = 1 - break - if(!window_check) - output += "
              • Camera not connected to wall at \[[C1.x], [C1.y], [C1.z]\] ([C1.loc.loc]) Network: [C1.network]
              • " - - output += "
              " - show_browser(usr, output,"window=airreport;size=1000x500") - -/client/proc/intercom_view() - set category = "Mapping" - set name = "Intercom Range Display" - - if(intercom_range_display_status) - intercom_range_display_status = 0 - else - intercom_range_display_status = 1 - - for(var/obj/effect/debugging/marker/M in world) - qdel(M) - - if(intercom_range_display_status) - for(var/obj/item/device/radio/intercom/I in world) - for(var/turf/T in orange(7,I)) - var/obj/effect/debugging/marker/F = new/obj/effect/debugging/marker(T) - if (!(F in view(7,I.loc))) - qdel(F) - -var/global/list/debug_verbs = list ( - /client/proc/do_not_use_these - ,/client/proc/camera_view - ,/client/proc/sec_camera_report - ,/client/proc/intercom_view - ,/client/proc/Cell - ,/client/proc/atmosscan - ,/client/proc/powerdebug - ,/client/proc/count_objects_on_z_level - ,/client/proc/count_objects_all - ,/client/proc/cmd_assume_direct_control - ,/client/proc/startSinglo - ,/client/proc/cmd_admin_grantfullaccess - ,/client/proc/cmd_admin_areatest - ,/client/proc/cmd_admin_rejuvenate - ,/datum/admins/proc/show_traitor_panel - ,/client/proc/print_jobban_old - ,/client/proc/print_jobban_old_filter - ,/client/proc/forceEvent - ,/client/proc/Zone_Info - ,/client/proc/Test_ZAS_Connection - ,/client/proc/rebootAirMaster - ,/client/proc/hide_debug_verbs - ,/client/proc/testZAScolors - ,/client/proc/testZAScolors_remove - ,/datum/admins/proc/setup_supermatter - ,/client/proc/atmos_toggle_debug - ,/client/proc/spawn_tanktransferbomb - ,/client/proc/find_leaky_pipes - ,/client/proc/analyze_openturf - ,/datum/admins/proc/xeno_whitelist_panel//inf - ) - - -/client/proc/enable_debug_verbs() - set category = "Debug" - set name = "Debug verbs" - - if(!check_rights(R_DEBUG)) return - - verbs += debug_verbs - -/client/proc/hide_debug_verbs() - set category = "Debug" - set name = "Hide Debug verbs" - - if(!check_rights(R_DEBUG)) return - - verbs -= debug_verbs - - -/client/var/list/testZAScolors_turfs = list() -/client/var/list/testZAScolors_zones = list() -/client/var/usedZAScolors = 0 -/client/var/list/image/ZAScolors = list() - -/client/proc/recurse_zone(var/zone/Z, var/recurse_level =1) - testZAScolors_zones += Z - if(recurse_level > 10) - return - - for(var/turf/T in Z.contents) - images += get_zas_image(T, "yellow") - testZAScolors_turfs += T - for(var/connection_edge/zone/edge in Z.edges) - var/zone/connected = edge.get_connected_zone(Z) - if(connected in testZAScolors_zones) - continue - recurse_zone(connected,recurse_level+1) - - -/client/proc/testZAScolors() - set category = "ZAS" - set name = "Check ZAS connections" - - if(!check_rights(R_DEBUG)) return - testZAScolors_remove() - - var/turf/simulated/location = get_turf(usr) - - if(!istype(location, /turf/simulated)) - to_chat(src, "This debug tool can only be used while on a simulated turf.") - return - - if(!usedZAScolors) - to_chat(src, "ZAS Test Colors") - to_chat(src, "Green = Zone you are standing in") - to_chat(src, "Blue = Connected zone to the zone you are standing in") - to_chat(src, "Yellow = A zone that is connected but not one adjacent to your connected zone") - to_chat(src, "Red = Not connected") - usedZAScolors = 1 - - testZAScolors_zones += location.zone - for(var/turf/T in location.zone.contents) - images += get_zas_image(T, "green") - testZAScolors_turfs += T - for(var/connection_edge/zone/edge in location.zone.edges) - var/zone/Z = edge.get_connected_zone(location.zone) - testZAScolors_zones += Z - for(var/turf/T in Z.contents) - images += get_zas_image(T, "blue") - testZAScolors_turfs += T - for(var/connection_edge/zone/z_edge in Z.edges) - var/zone/connected = z_edge.get_connected_zone(Z) - if(connected in testZAScolors_zones) - continue - recurse_zone(connected,1) - - for(var/turf/T in range(25,location)) - if(!istype(T)) - continue - if(T in testZAScolors_turfs) - continue - images += get_zas_image(T, "red") - testZAScolors_turfs += T - -/client/proc/testZAScolors_remove() - set category = "ZAS" - set name = "Remove ZAS connection colors" - - testZAScolors_turfs.Cut() - testZAScolors_zones.Cut() - - for(var/image/i in images) - if(i.icon == 'icons/misc/debug_group.dmi') - images.Remove(i) - -/client/proc/rebootAirMaster() - set category = "ZAS" - set name = "Reboot ZAS" - - if(alert("This will destroy and remake all zone geometry on the whole map.","Reboot ZAS","Reboot ZAS","Nevermind") == "Reboot ZAS") - SSair.reboot() - - -/client/proc/count_objects_on_z_level() - set category = "Mapping" - set name = "Count Objects On Level" - var/level = input("Which z-level?","Level?") as text - if(!level) return - var/num_level = text2num(level) - if(!num_level) return - if(!isnum(num_level)) return - - var/type_text = input("Which type path?","Path?") as text - if(!type_text) return - var/type_path = text2path(type_text) - if(!type_path) return - - var/count = 1 - - var/list/atom/atom_list = list() - - for(var/atom/A in world) - if(istype(A,type_path)) - var/atom/B = A - while(!(isturf(B.loc))) - if(B && B.loc) - B = B.loc - else - break - if(B) - if(B.z == num_level) - count++ - atom_list += A - /* - var/atom/temp_atom - for(var/i = 0; i <= (atom_list.len/10); i++) - var/line = "" - for(var/j = 1; j <= 10; j++) - if(i*10+j <= atom_list.len) - temp_atom = atom_list[i*10+j] - line += " no.[i+10+j]@\[[temp_atom.x], [temp_atom.y], [temp_atom.z]\]; " - log_debug(line) */ - - log_debug("There are [count] objects of type [type_path] on z-level [num_level]") - -/client/proc/count_objects_all() - set category = "Mapping" - set name = "Count Objects All" - - var/type_text = input("Which type path?","") as text - if(!type_text) return - var/type_path = text2path(type_text) - if(!type_path) return - - var/count = 0 - - for(var/atom/A in world) - if(istype(A,type_path)) - count++ - /* - var/atom/temp_atom - for(var/i = 0; i <= (atom_list.len/10); i++) - var/line = "" - for(var/j = 1; j <= 10; j++) - if(i*10+j <= atom_list.len) - temp_atom = atom_list[i*10+j] - line += " no.[i+10+j]@\[[temp_atom.x], [temp_atom.y], [temp_atom.z]\]; " - log_debug(line) */ - - log_debug("There are [count] objects of type [type_path] in the game world") - -/proc/get_zas_image(var/turf/T, var/icon_state) - return image_repository.atom_image(T, 'icons/misc/debug_group.dmi', icon_state, plane = DEFAULT_PLANE, layer = ABOVE_TILE_LAYER) - -//Special for Cakey -/client/proc/find_leaky_pipes() - set category = "Mapping" - set name = "Find Leaky Pipes" - - var/list/baddies = list("LEAKY PIPES") - for(var/obj/machinery/atmospherics/pipe/P in SSmachines.machinery) - if(P.leaking) - baddies += "[P] ([P.x],[P.y],[P.z] - JMP)" - - to_chat(usr,jointext(baddies, "
              ")) diff --git a/code/modules/admin/verbs/massmodvar.dm b/code/modules/admin/verbs/massmodvar.dm deleted file mode 100644 index 76484181a0c9f..0000000000000 --- a/code/modules/admin/verbs/massmodvar.dm +++ /dev/null @@ -1,352 +0,0 @@ -/client/proc/cmd_mass_modify_object_variables(atom/A, var/var_name) - set category = "Debug" - set name = "Mass Edit Variables" - set desc="(target) Edit all instances of a target item's variables" - - var/method = 0 //0 means strict type detection while 1 means this type and all subtypes (IE: /obj/item with this set to 1 will set it to ALL itms) - - if(!check_rights(R_VAREDIT)) return - - if(A && A.type) - if(typesof(A.type)) - switch(input("Strict object type detection?") as null|anything in list("Strictly this type","This type and subtypes", "Cancel")) - if("Strictly this type") - method = 0 - if("This type and subtypes") - method = 1 - if("Cancel") - return - if(null) - return - - src.massmodify_variables(A, var_name, method) - - -/client/proc/massmodify_variables(var/atom/O, var/var_name = "", var/method = 0) - if(!check_rights(R_VAREDIT)) return - - var/list/locked = list("vars", "key", "ckey", "client") - - for(var/p in forbidden_varedit_object_types()) - if( istype(O,p) ) - to_chat(usr, "It is forbidden to edit this object's variables.") - return - - var/list/names = list() - for (var/V in O.vars) - names += V - - names = sortList(names) - - var/variable = "" - - if(!var_name) - variable = input("Which var?","Var") as null|anything in names - else - variable = var_name - - if(!variable) return - var/default - var/var_value = O.vars[variable] - var/dir - - if(variable == "holder" || (variable in locked)) - if(!check_rights(R_DEBUG)) return - - if(isnull(var_value)) - to_chat(usr, "Unable to determine variable type.") - - else if(isnum(var_value)) - to_chat(usr, "Variable appears to be NUM.") - default = "num" - dir = 1 - - else if(istext(var_value)) - to_chat(usr, "Variable appears to be TEXT.") - default = "text" - - else if(isloc(var_value)) - to_chat(usr, "Variable appears to be REFERENCE.") - default = "reference" - - else if(isicon(var_value)) - to_chat(usr, "Variable appears to be ICON.") - var_value = "\icon[var_value]" - default = "icon" - - else if(istype(var_value,/atom) || istype(var_value,/datum)) - to_chat(usr, "Variable appears to be TYPE.") - default = "type" - - else if(istype(var_value,/list)) - to_chat(usr, "Variable appears to be LIST.") - default = "list" - - else if(istype(var_value,/client)) - to_chat(usr, "Variable appears to be CLIENT.") - default = "cancel" - - else - to_chat(usr, "Variable appears to be FILE.") - default = "file" - - to_chat(usr, "Variable contains: [var_value]") - if(dir) - switch(var_value) - if(1) - dir = "NORTH" - if(2) - dir = "SOUTH" - if(4) - dir = "EAST" - if(8) - dir = "WEST" - if(5) - dir = "NORTHEAST" - if(6) - dir = "SOUTHEAST" - if(9) - dir = "NORTHWEST" - if(10) - dir = "SOUTHWEST" - else - dir = null - if(dir) - to_chat(usr, "If a direction, direction is: [dir]") - - var/class = input("What kind of variable?","Variable Type",default) as null|anything in list("text", - "num","type","icon","file","edit referenced object","restore to default") - - if(!class) - return - - var/original_name - - if (!istype(O, /atom)) - original_name = "\ref[O] ([O])" - else - original_name = O:name - - switch(class) - - if("restore to default") - O.vars[variable] = initial(O.vars[variable]) - if(method) - if(istype(O, /mob)) - for(var/mob/M in SSmobs.mob_list) - if ( istype(M , O.type) ) - M.vars[variable] = O.vars[variable] - - else if(istype(O, /obj)) - for(var/obj/A in world) - if ( istype(A , O.type) ) - A.vars[variable] = O.vars[variable] - - else if(istype(O, /turf)) - for(var/turf/A in world) - if ( istype(A , O.type) ) - A.vars[variable] = O.vars[variable] - - else - if(istype(O, /mob)) - for(var/mob/M in SSmobs.mob_list) - if (M.type == O.type) - M.vars[variable] = O.vars[variable] - - else if(istype(O, /obj)) - for(var/obj/A in world) - if (A.type == O.type) - A.vars[variable] = O.vars[variable] - - else if(istype(O, /turf)) - for(var/turf/A in world) - if (A.type == O.type) - A.vars[variable] = O.vars[variable] - - if("edit referenced object") - return .(O.vars[variable]) - - if("text") - var/new_value = input("Enter new text:","Text",O.vars[variable]) as text|null//todo: sanitize ??? - if(new_value == null) return - O.vars[variable] = new_value - - if(method) - if(istype(O, /mob)) - for(var/mob/M in SSmobs.mob_list) - if ( istype(M , O.type) ) - M.vars[variable] = O.vars[variable] - - else if(istype(O, /obj)) - for(var/obj/A in world) - if ( istype(A , O.type) ) - A.vars[variable] = O.vars[variable] - - else if(istype(O, /turf)) - for(var/turf/A in world) - if ( istype(A , O.type) ) - A.vars[variable] = O.vars[variable] - else - if(istype(O, /mob)) - for(var/mob/M in SSmobs.mob_list) - if (M.type == O.type) - M.vars[variable] = O.vars[variable] - - else if(istype(O, /obj)) - for(var/obj/A in world) - if (A.type == O.type) - A.vars[variable] = O.vars[variable] - - else if(istype(O, /turf)) - for(var/turf/A in world) - if (A.type == O.type) - A.vars[variable] = O.vars[variable] - - if("num") - var/new_value = input("Enter new number:","Num",\ - O.vars[variable]) as num|null - if(new_value == null) return - O.vars[variable] = new_value - - if(method) - if(istype(O, /mob)) - for(var/mob/M in SSmobs.mob_list) - if ( istype(M , O.type) ) - M.vars[variable] = O.vars[variable] - - else if(istype(O, /obj)) - for(var/obj/A in world) - if ( istype(A , O.type) ) - A.vars[variable] = O.vars[variable] - - else if(istype(O, /turf)) - for(var/turf/A in world) - if ( istype(A , O.type) ) - A.vars[variable] = O.vars[variable] - - else - if(istype(O, /mob)) - for(var/mob/M in SSmobs.mob_list) - if (M.type == O.type) - M.vars[variable] = O.vars[variable] - - else if(istype(O, /obj)) - for(var/obj/A in world) - if (A.type == O.type) - A.vars[variable] = O.vars[variable] - - else if(istype(O, /turf)) - for(var/turf/A in world) - if (A.type == O.type) - A.vars[variable] = O.vars[variable] - - if("type") - var/new_value - new_value = input("Enter type:","Type",O.vars[variable]) as null|anything in typesof(/obj,/mob,/area,/turf) - if(new_value == null) return - O.vars[variable] = new_value - if(method) - if(istype(O, /mob)) - for(var/mob/M in SSmobs.mob_list) - if ( istype(M , O.type) ) - M.vars[variable] = O.vars[variable] - - else if(istype(O, /obj)) - for(var/obj/A in world) - if ( istype(A , O.type) ) - A.vars[variable] = O.vars[variable] - - else if(istype(O, /turf)) - for(var/turf/A in world) - if ( istype(A , O.type) ) - A.vars[variable] = O.vars[variable] - else - if(istype(O, /mob)) - for(var/mob/M in SSmobs.mob_list) - if (M.type == O.type) - M.vars[variable] = O.vars[variable] - - else if(istype(O, /obj)) - for(var/obj/A in world) - if (A.type == O.type) - A.vars[variable] = O.vars[variable] - - else if(istype(O, /turf)) - for(var/turf/A in world) - if (A.type == O.type) - A.vars[variable] = O.vars[variable] - - if("file") - var/new_value = input("Pick file:","File",O.vars[variable]) as null|file - if(new_value == null) return - O.vars[variable] = new_value - - if(method) - if(istype(O, /mob)) - for(var/mob/M in SSmobs.mob_list) - if ( istype(M , O.type) ) - M.vars[variable] = O.vars[variable] - - else if(istype(O.type, /obj)) - for(var/obj/A in world) - if ( istype(A , O.type) ) - A.vars[variable] = O.vars[variable] - - else if(istype(O.type, /turf)) - for(var/turf/A in world) - if ( istype(A , O.type) ) - A.vars[variable] = O.vars[variable] - else - if(istype(O, /mob)) - for(var/mob/M in SSmobs.mob_list) - if (M.type == O.type) - M.vars[variable] = O.vars[variable] - - else if(istype(O.type, /obj)) - for(var/obj/A in world) - if (A.type == O.type) - A.vars[variable] = O.vars[variable] - - else if(istype(O.type, /turf)) - for(var/turf/A in world) - if (A.type == O.type) - A.vars[variable] = O.vars[variable] - - if("icon") - var/new_value = input("Pick icon:","Icon",O.vars[variable]) as null|icon - if(new_value == null) return - O.vars[variable] = new_value - if(method) - if(istype(O, /mob)) - for(var/mob/M in SSmobs.mob_list) - if ( istype(M , O.type) ) - M.vars[variable] = O.vars[variable] - - else if(istype(O, /obj)) - for(var/obj/A in world) - if ( istype(A , O.type) ) - A.vars[variable] = O.vars[variable] - - else if(istype(O, /turf)) - for(var/turf/A in world) - if ( istype(A , O.type) ) - A.vars[variable] = O.vars[variable] - - else - if(istype(O, /mob)) - for(var/mob/M in SSmobs.mob_list) - if (M.type == O.type) - M.vars[variable] = O.vars[variable] - - else if(istype(O, /obj)) - for(var/obj/A in world) - if (A.type == O.type) - A.vars[variable] = O.vars[variable] - - else if(istype(O, /turf)) - for(var/turf/A in world) - if (A.type == O.type) - A.vars[variable] = O.vars[variable] - - log_admin("[key_name(src)] mass modified [original_name]'s [variable] to [O.vars[variable]]") - message_admins("[key_name_admin(src)] mass modified [original_name]'s [variable] to [O.vars[variable]]", 1) diff --git a/code/modules/admin/verbs/modifyvariables.dm b/code/modules/admin/verbs/modifyvariables.dm deleted file mode 100644 index 6d0a5c92f8c99..0000000000000 --- a/code/modules/admin/verbs/modifyvariables.dm +++ /dev/null @@ -1,582 +0,0 @@ -/client/proc/mod_list_add_ass() - var/class = "text" - var/list/class_input = list("text","num","type","reference","mob reference", "icon","file","color","list","edit referenced object","restore to default") - if(src.holder) - var/datum/marked_datum = holder.marked_datum() - if(marked_datum) - class_input += "marked datum ([marked_datum.type])" - - class = input("What kind of variable?","Variable Type") as null|anything in class_input - if(!class) - return - - var/datum/marked_datum = holder.marked_datum() - if(marked_datum && class == "marked datum ([marked_datum.type])") - class = "marked datum" - - var/var_value = null - - switch(class) - - if("text") - var_value = input("Enter new text:","Text") as null|text - - if("num") - var_value = input("Enter new number:","Num") as null|num - - if("type") - var_value = select_subpath(/obj/item/latexballon, /datum) - - if("reference") - var_value = input("Select reference:","Reference") as null|mob|obj|turf|area in world - - if("mob reference") - var_value = input("Select reference:","Reference") as null|mob in world - - if("file") - var_value = input("Pick file:","File") as null|file - - if("icon") - var_value = input("Pick icon:","Icon") as null|icon - - if("marked datum") - var_value = holder.marked_datum() - - if("color") - var_value = input("Select new color:","Color") as null|color - - if(!var_value) return - - return var_value - - -/client/proc/mod_list_add(var/list/L, atom/O, original_name, objectvar) - - var/class = "text" - var/list/class_input = list("text","num","type","reference","mob reference", "icon","file","list","color","edit referenced object","restore to default") - if(src.holder) - var/datum/marked_datum = holder.marked_datum() - if(marked_datum) - class_input += "marked datum ([marked_datum.type])" - - class = input("What kind of variable?","Variable Type") as null|anything in class_input - if(!class) - return - - var/datum/marked_datum = holder.marked_datum() - if(marked_datum && class == "marked datum ([marked_datum.type])") - class = "marked datum" - - var/var_value = null - - switch(class) - - if("text") - var_value = input("Enter new text:","Text") as text - - if("num") - var_value = input("Enter new number:","Num") as num - - if("type") - var_value = select_subpath(/obj/item/latexballon, /datum) - - if("reference") - var_value = input("Select reference:","Reference") as mob|obj|turf|area in world - - if("mob reference") - var_value = input("Select reference:","Reference") as mob in world - - if("file") - var_value = input("Pick file:","File") as file - - if("icon") - var_value = input("Pick icon:","Icon") as icon - - if("marked datum") - var_value = holder.marked_datum() - - if(!var_value) return - - switch(alert("Would you like to associate a var with the list entry?",,"Yes","No")) - if("Yes") - L += var_value - L[var_value] = mod_list_add_ass() //haha - if("No") - L += var_value - to_world_log("### ListVarEdit by [src]: [O.type] [objectvar]: ADDED=[var_value]") - log_admin("[key_name(src)] modified [original_name]'s [objectvar]: ADDED=[var_value]") - message_admins("[key_name_admin(src)] modified [original_name]'s [objectvar]: ADDED=[var_value]") - -/client/proc/mod_list(var/list/L, atom/O, original_name, objectvar) - if(!check_rights(R_VAREDIT)) return - if(!istype(L,/list)) to_chat(src, "Not a List.") - if(L.len > 1000) - var/confirm = alert(src, "The list you're trying to edit is very long, continuing may crash the server.", "Warning", "Continue", "Abort") - if(confirm != "Continue") - return - - var/assoc = 0 - if(L.len > 0) - var/a = L[1] - try - if(!isnum(a) && L[a] != null) - assoc = 1 //This is pretty weak test but I can't think of anything else - to_chat(usr, "List appears to be associative.") - catch {} // Builtin non-assoc lists (contents, etc.) will runtime if you try to get an assoc value of them - - var/list/names = null - if(!assoc) - names = sortList(L) - - var/variable - var/assoc_key - if(assoc) - variable = input("Which var?","Var") as null|anything in L + "(ADD VAR)" - else - variable = input("Which var?","Var") as null|anything in names + "(ADD VAR)" - - if(variable == "(ADD VAR)") - mod_list_add(L, O, original_name, objectvar) - return - - if(assoc) - assoc_key = variable - variable = L[assoc_key] - - if(!assoc && !variable || assoc && !assoc_key) - return - - var/default - - var/dir - - if(!O.may_edit_var(usr, objectvar)) - return - - if(isnull(variable)) - to_chat(usr, "Unable to determine variable type.") - else if(isnum(variable)) - to_chat(usr, "Variable appears to be NUM.") - default = "num" - dir = 1 - - else if(istext(variable)) - to_chat(usr, "Variable appears to be TEXT.") - default = "text" - - else if(isloc(variable)) - to_chat(usr, "Variable appears to be REFERENCE.") - default = "reference" - - else if(isicon(variable)) - to_chat(usr, "Variable appears to be ICON.") - variable = "\icon[variable]" - default = "icon" - - else if(istype(variable,/atom) || istype(variable,/datum)) - to_chat(usr, "Variable appears to be TYPE.") - default = "type" - - else if(istype(variable,/list)) - to_chat(usr, "Variable appears to be LIST.") - default = "list" - - else if(istype(variable,/client)) - to_chat(usr, "Variable appears to be CLIENT.") - default = "cancel" - - else - to_chat(usr, "Variable appears to be FILE.") - default = "file" - - to_chat(usr, "Variable contains: [variable]") - if(dir) - switch(variable) - if(1) - dir = "NORTH" - if(2) - dir = "SOUTH" - if(4) - dir = "EAST" - if(8) - dir = "WEST" - if(5) - dir = "NORTHEAST" - if(6) - dir = "SOUTHEAST" - if(9) - dir = "NORTHWEST" - if(10) - dir = "SOUTHWEST" - else - dir = null - - if(dir) - to_chat(usr, "If a direction, direction is: [dir]") - var/class = "text" - var/list/class_input = list("text","num","type","reference","mob reference", "icon","file","list","edit referenced object","restore to default") - - if(src.holder) - var/datum/marked_datum = holder.marked_datum() - if(marked_datum) - class_input += "marked datum ([marked_datum.type])" - - class_input += "DELETE FROM LIST" - class = input("What kind of variable?","Variable Type",default) as null|anything in class_input - - if(!class) - return - - var/datum/marked_datum = holder.marked_datum() - if(marked_datum && class == "marked datum ([marked_datum.type])") - class = "marked datum" - - var/original_var - if(assoc) - original_var = L[assoc_key] - else - original_var = L[L.Find(variable)] - - var/new_var - switch(class) //Spits a runtime error if you try to modify an entry in the contents list. Dunno how to fix it, yet. - - if("list") - mod_list(variable, O, original_name, objectvar) - - if("restore to default") - new_var = initial(variable) - if(assoc) - L[assoc_key] = new_var - else - L[L.Find(variable)] = new_var - - if("edit referenced object") - modify_variables(variable) - - if("DELETE FROM LIST") - to_world_log("### ListVarEdit by [src]: [O.type] [objectvar]: REMOVED=[html_encode("[variable]")]") - log_admin("[key_name(src)] modified [original_name]'s [objectvar]: REMOVED=[variable]") - message_admins("[key_name_admin(src)] modified [original_name]'s [objectvar]: REMOVED=[variable]") - L -= variable - return - - if("text") - new_var = input("Enter new text:","Text") as text - if(assoc) - L[assoc_key] = new_var - else - L[L.Find(variable)] = new_var - - if("num") - new_var = input("Enter new number:","Num") as num - if(assoc) - L[assoc_key] = new_var - else - L[L.Find(variable)] = new_var - - if("type") - new_var = select_subpath(/obj/item/latexballon, /datum) - - if(assoc) - L[assoc_key] = new_var - else - L[L.Find(variable)] = new_var - - if("reference") - new_var = input("Select reference:","Reference") as mob|obj|turf|area in world - if(assoc) - L[assoc_key] = new_var - else - L[L.Find(variable)] = new_var - - if("mob reference") - new_var = input("Select reference:","Reference") as mob in world - if(assoc) - L[assoc_key] = new_var - else - L[L.Find(variable)] = new_var - - if("file") - new_var = input("Pick file:","File") as file - if(assoc) - L[assoc_key] = new_var - else - L[L.Find(variable)] = new_var - - if("icon") - new_var = input("Pick icon:","Icon") as icon - if(assoc) - L[assoc_key] = new_var - else - L[L.Find(variable)] = new_var - - if("marked datum") - new_var = holder.marked_datum() - if(!new_var) - return - if(assoc) - L[assoc_key] = new_var - else - L[L.Find(variable)] = new_var - - to_world_log("### ListVarEdit by [src]: [O.type] [objectvar]: [original_var]=[new_var]") - log_admin("[key_name(src)] modified [original_name]'s [objectvar]: [original_var]=[new_var]") - message_admins("[key_name_admin(src)] modified [original_name]'s varlist [objectvar]: [original_var]=[new_var]") - -/client/proc/modify_variables(var/atom/O, var/param_var_name = null, var/autodetect_class = 0) - if(!check_rights(R_VAREDIT)) return - - for(var/p in forbidden_varedit_object_types()) - if( istype(O,p) ) - to_chat(usr, "It is forbidden to edit this object's variables.") - return - - var/class - var/variable - var/var_value - - if(param_var_name) - if(!(param_var_name in O.get_variables())) - to_chat(src, "A variable with this name ([param_var_name]) doesn't exist in this atom ([O])") - return - - if(!O.may_edit_var(usr, param_var_name)) - return - - variable = param_var_name - - var_value = O.get_variable_value(variable) - - if(autodetect_class) - if(isnull(var_value)) - to_chat(usr, "Unable to determine variable type.") - class = null - autodetect_class = null - else if(isnum(var_value)) - to_chat(usr, "Variable appears to be NUM.") - class = "num" - dir = 1 - - else if(istext(var_value)) - to_chat(usr, "Variable appears to be TEXT.") - class = "text" - - else if(isloc(var_value)) - to_chat(usr, "Variable appears to be REFERENCE.") - class = "reference" - - else if(isicon(var_value)) - to_chat(usr, "Variable appears to be ICON.") - var_value = "\icon[var_value]" - class = "icon" - - else if(istype(var_value,/atom) || istype(var_value,/datum)) - to_chat(usr, "Variable appears to be TYPE.") - class = "type" - - else if(istype(var_value,/list)) - to_chat(usr, "Variable appears to be LIST.") - class = "list" - - else if(istype(var_value,/client)) - to_chat(usr, "Variable appears to be CLIENT.") - class = "cancel" - - else - to_chat(usr, "Variable appears to be FILE.") - class = "file" - - else - - var/list/names = list() - for (var/V in O.vars) - names += V - - names = sortList(names) - - variable = input("Which var?","Var") as null|anything in names - if(!variable) return - var_value = O.get_variable_value(variable) - - if(!O.may_edit_var(usr, variable)) - return - - if(!autodetect_class) - - var/dir - var/default - if(isnull(var_value)) - to_chat(usr, "Unable to determine variable type.") - else if(isnum(var_value)) - to_chat(usr, "Variable appears to be NUM.") - default = "num" - dir = 1 - - else if(istext(var_value)) - to_chat(usr, "Variable appears to be TEXT.") - default = "text" - - else if(isloc(var_value)) - to_chat(usr, "Variable appears to be REFERENCE.") - default = "reference" - - else if(isicon(var_value)) - to_chat(usr, "Variable appears to be ICON.") - var_value = "\icon[var_value]" - default = "icon" - - else if(istype(var_value,/atom) || istype(var_value,/datum)) - to_chat(usr, "Variable appears to be TYPE.") - default = "type" - - else if(istype(var_value,/list)) - to_chat(usr, "Variable appears to be LIST.") - default = "list" - - else if(istype(var_value,/client)) - to_chat(usr, "Variable appears to be CLIENT.") - default = "cancel" - - else - to_chat(usr, "Variable appears to be FILE.") - default = "file" - - to_chat(usr, "Variable contains: [var_value]") - if(dir) - switch(var_value) - if(1) - dir = "NORTH" - if(2) - dir = "SOUTH" - if(4) - dir = "EAST" - if(8) - dir = "WEST" - if(5) - dir = "NORTHEAST" - if(6) - dir = "SOUTHEAST" - if(9) - dir = "NORTHWEST" - if(10) - dir = "SOUTHWEST" - else - dir = null - if(dir) - to_chat(usr, "If a direction, direction is: [dir]") - var/list/class_input = list("text","num","type","reference","mob reference", "icon","file","list","json","color","edit referenced object","restore to default") - if(src.holder) - var/datum/marked_datum = holder.marked_datum() - if(marked_datum) - class_input += "marked datum ([marked_datum.type])" - class = input("What kind of variable?","Variable Type",default) as null|anything in class_input - - if(!class) - return - - var/original_name - - if (!istype(O, /atom)) - original_name = "\ref[O] ([O])" - else - original_name = O:name - - var/datum/marked_datum = holder.marked_datum() - if(marked_datum && class == "marked datum ([marked_datum.type])") - class = "marked datum" - - switch(class) - - if("list") - mod_list(O.get_variable_value(variable), O, original_name, variable) - return - - if("restore to default") - var_value = O.get_initial_variable_value(variable) - - if("edit referenced object") - return .(O.get_variable_value(variable)) - - if("text") - var/var_new = input("Enter new text:","Text",O.get_variable_value(variable)) as null|text - if(var_new==null) return - var_value = var_new - - if("num") - if(variable=="stat") - var/var_new = input("Enter new number:","Num",O.get_variable_value(variable)) as null|num - if(var_new == null) return - if((O.get_variable_value(variable) == 2) && (var_new < 2))//Bringing the dead back to life - var/mob/M = O - M.switch_from_dead_to_living_mob_list() - if((O.get_variable_value(variable) < 2) && (var_new == 2))//Kill he - var/mob/M = O - M.switch_from_living_to_dead_mob_list() - var_value = var_new - else - var/var_new = input("Enter new number:","Num",O.get_variable_value(variable)) as null|num - if(var_new==null) return - var_value = var_new - - if("type") - var/var_new = select_subpath(/obj/item/latexballon, /datum) - if (!var_new) - return - var_value = var_new - - if("reference") - var/var_new = input("Select reference:","Reference",O.get_variable_value(variable)) as null|mob|obj|turf|area in world - if(var_new==null) return - var_value = var_new - - if("mob reference") - var/var_new = input("Select reference:","Reference",O.get_variable_value(variable)) as null|mob in world - if(var_new==null) return - var_value = var_new - - if("file") - var/var_new = input("Pick file:","File",O.get_variable_value(variable)) as null|file - if(var_new==null) return - var_value = var_new - - if("icon") - var/var_new = input("Pick icon:","Icon",O.get_variable_value(variable)) as null|icon - if(var_new==null) return - var_value = var_new - - if("color") - var_value = input("Select new color:","Color") as null|color - - if("json") - var/json_str = input("JSON string", "JSON", json_encode(O.get_variable_value(variable))) as null | message - try - var_value = json_decode(json_str) - catch - return - - if("marked datum") - var_value = holder.marked_datum() - - var/old_value = O.get_variable_value(variable) - if(!special_set_vv_var(O, variable, var_value, src)) - O.set_variable_value(variable, var_value) - - var/new_value = O.get_variable_value(variable) - if(old_value == new_value) - return - - to_world_log("### VarEdit by [src]: [O.type] [variable]=[html_encode("[new_value]")]") - log_and_message_admins("modified [original_name]'s [variable] from '[old_value]' to '[new_value]'") - -/client - var/static/vv_set_handlers - -/client/proc/special_set_vv_var(var/datum/O, variable, var_value, client) - if(!vv_set_handlers) - vv_set_handlers = init_subtypes(/decl/vv_set_handler) - for(var/vv_handler in vv_set_handlers) - var/decl/vv_set_handler/sh = vv_handler - if(sh.can_handle_set_var(O, variable, var_value, client)) - sh.handle_set_var(O, variable, var_value, client) - return TRUE - return FALSE diff --git a/code/modules/admin/verbs/playsound.dm b/code/modules/admin/verbs/playsound.dm deleted file mode 100644 index d436345861667..0000000000000 --- a/code/modules/admin/verbs/playsound.dm +++ /dev/null @@ -1,63 +0,0 @@ -var/global/list/sounds_cache = list() - -/client/proc/play_sound(S as sound) - set category = "Fun" - set name = "Play Global Sound" - if(!check_rights(R_SOUNDS)) return - - var/sound/uploaded_sound = sound(S, repeat = 0, wait = 1, channel = GLOB.admin_sound_channel) - uploaded_sound.priority = 250 - - sounds_cache += S - var/volume = 100 - - while (TRUE) - volume = input(src, "Sound volume (0 - 100)", "Volume", volume) as null|num - if (isnull(volume)) - return - - volume = round(clamp(volume, 0, 100)) - to_chat(src, "Sound volume set to [volume]%") - uploaded_sound.volume =volume - var/choice = alert("Song: [S]", "Play Sound" , "Play", "Preview", "Cancel") - - if (choice == "Cancel") - return - - if (choice == "Preview") - sound_to(src, uploaded_sound) - - if (choice == "Play") - break - - - log_admin("[key_name(src)] played sound [S]") - message_admins("[key_name_admin(src)] played sound [S]", 1) - for(var/mob/M in GLOB.player_list) - if(M.get_preference_value(/datum/client_preference/play_admin_midis) == GLOB.PREF_YES) - sound_to(M, uploaded_sound) - -/client/proc/play_local_sound(S as sound) - set category = "Fun" - set name = "Play Local Sound" - if(!check_rights(R_SOUNDS)) return - - log_admin("[key_name(src)] played a local sound [S]") - message_admins("[key_name_admin(src)] played a local sound [S]", 1) - playsound(get_turf(src.mob), S, 50, 0, 0) - - -/client/proc/play_server_sound() - set category = "Fun" - set name = "Play Server Sound" - if(!check_rights(R_SOUNDS)) return - - var/list/sounds = list("sound/items/bikehorn.ogg","sound/effects/siren.ogg") - sounds += sounds_cache - - var/melody = input("Select a sound from the server to play", "Server sound list") as null|anything in sounds - - if(!melody) - return - - play_sound(melody) diff --git a/code/modules/admin/verbs/possess.dm b/code/modules/admin/verbs/possess.dm deleted file mode 100644 index 6f3af372f713a..0000000000000 --- a/code/modules/admin/verbs/possess.dm +++ /dev/null @@ -1,40 +0,0 @@ -/proc/possess(obj/O as obj) - set name = "Possess Obj" - set category = "Object" - - log_and_message_admins("has possessed [O]") - - if(!usr.control_object) //If you're not already possessing something... - usr.name_archive = usr.real_name - - usr.forceMove(O) - usr.real_name = O.name - usr.SetName(O.name) - usr.client.eye = O - usr.control_object = O - usr.ReplaceMovementHandler(/datum/movement_handler/mob/admin_possess) - -/proc/release(obj/O) - set name = "Release Obj" - set category = "Object" - //usr.loc = get_turf(usr) - - if(usr.control_object && usr.name_archive) //if you have a name archived and if you are actually relassing an object - usr.RemoveMovementHandler(/datum/movement_handler/mob/admin_possess) - usr.real_name = usr.name_archive - usr.SetName(usr.real_name) - if(ishuman(usr)) - var/mob/living/carbon/human/H = usr - H.SetName(H.get_visible_name()) -// usr.regenerate_icons() //So the name is updated properly - - usr.forceMove(O.loc) // Appear where the object you were controlling is -- TLE - usr.client.eye = usr - usr.control_object = null - -/proc/givetestverbs(mob/M as mob in SSmobs.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 diff --git a/code/modules/admin/verbs/pray.dm b/code/modules/admin/verbs/pray.dm deleted file mode 100644 index f343b88e2800a..0000000000000 --- a/code/modules/admin/verbs/pray.dm +++ /dev/null @@ -1,21 +0,0 @@ -/mob/verb/pray(msg as text) - set category = "IC" - set name = "Pray" - - sanitize_and_communicate(/decl/communication_channel/pray, src, msg) - -/proc/Centcomm_announce(var/msg, var/mob/Sender, var/iamessage) - var/mob/intercepted = check_for_interception() - msg = "[uppertext(GLOB.using_map.boss_short)]M[iamessage ? " IA" : ""][intercepted ? "(Intercepted by [intercepted])" : null]:[key_name(Sender, 1)] (PP) (VV) ([admin_jump_link(Sender)]) (CA) (BSA) (RPLY): [msg]" - for(var/client/C as anything in GLOB.admins) - if(R_ADMIN & C.holder.rights) - to_chat(C, msg) - sound_to(C, 'sound/machines/signal.ogg') - -/proc/Syndicate_announce(var/msg, var/mob/Sender) - var/mob/intercepted = check_for_interception() - msg = "ILLEGAL[intercepted ? "(Intercepted by [intercepted])" : null]:[key_name(Sender, 1)] (PP) (VV) (DN) ([admin_jump_link(Sender)]) (CA) (BSA) (TAKE) (RPLY): [msg]" - for(var/client/C as anything in GLOB.admins) - if(R_ADMIN & C.holder.rights) - to_chat(C, msg) - sound_to(C, 'sound/machines/signal.ogg') diff --git a/code/modules/admin/verbs/randomverbs.dm b/code/modules/admin/verbs/randomverbs.dm deleted file mode 100644 index e7de61cd90c44..0000000000000 --- a/code/modules/admin/verbs/randomverbs.dm +++ /dev/null @@ -1,875 +0,0 @@ -/client/proc/cmd_admin_drop_everything(mob/M as mob in SSmobs.mob_list) - set category = null - set name = "Drop Everything" - if(!holder) - to_chat(src, "Only administrators may use this command.") - return - - var/confirm = alert(src, "Make [M] drop everything?", "Message", "Yes", "No") - if(confirm != "Yes") - return - - for(var/obj/item/W in M) - M.drop_from_inventory(W) - - log_admin("[key_name(usr)] made [key_name(M)] drop everything!") - message_admins("[key_name_admin(usr)] made [key_name_admin(M)] drop everything!", 1) - -/client/proc/cmd_admin_prison(mob/M as mob in SSmobs.mob_list) - set category = "Admin" - set name = "Prison" - if(!holder) - to_chat(src, "Only administrators may use this command.") - return - if (ismob(M)) - if(istype(M, /mob/living/silicon/ai)) - alert("The AI can't be sent to prison you jerk!", null, null, null, null, null) - return - //strip their stuff before they teleport into a cell :downs: - for(var/obj/item/W in M) - M.drop_from_inventory(W) - //teleport person to cell - M.Paralyse(5) - sleep(5) //so they black out before warping - M.forceMove(pick(GLOB.prisonwarp)) - if(istype(M, /mob/living/carbon/human)) - var/mob/living/carbon/human/prisoner = M - prisoner.equip_to_slot_or_del(new /obj/item/clothing/under/color/orange(prisoner), slot_w_uniform) - prisoner.equip_to_slot_or_del(new /obj/item/clothing/shoes/orange(prisoner), slot_shoes) - spawn(50) - to_chat(M, "You have been sent to the prison station!") - log_and_message_admins("sent [key_name_admin(M)] to the prison station.") - -/client/proc/cmd_check_new_players() //Allows admins to determine who the newer players are. - set category = "Admin" - set name = "Check new Players" - if(!holder) - to_chat(src, "Only staff members may use this command.") - - var/age = alert(src, "Age check", "Show accounts yonger then _____ days","7", "30" , "All") - - if(age == "All") - age = 9999999 - else - age = text2num(age) - - var/missing_ages = 0 - var/msg = "" - - for(var/client/C in GLOB.clients) - if(C.player_age == "Requires database") - missing_ages = 1 - continue - if(C.player_age < age) - msg += "[key_name(C, 1, 1, 1)]: account is [C.player_age] days old
              " - - if(missing_ages) - to_chat(src, "Some accounts did not have proper ages set in their clients. This function requires database to be present") - - if(msg != "") - show_browser(src, msg, "window=Player_age_check") - else - to_chat(src, "No matches for that age range found.") - - -/client/proc/cmd_admin_world_narrate() // Allows administrators to fluff events a little easier -- TLE - set category = "Special Verbs" - set name = "Global Narrate" - set desc = "Narrate to everyone, or players on specific z-levels." - - if(!check_rights(R_ADMIN)) - return - - var/region = input("Narrate Globally, single Z level, or connected Z levels?", "Region") as null | anything in list( - "Global", - "Single Z", - "Connected Zs" - ) - - if (!region) - return - - if (region != "Global") - var/chosen_z = input("Choose Z level: [region]", "Choose Z", "[get_z(usr) ? get_z(usr) : 0]") as null | num - if (!chosen_z) - return - - var/list/z_levels = list(chosen_z) - if (region == "Connected Zs") - z_levels = GetConnectedZlevels(chosen_z) - - var/result = cmd_admin_narrate_helper(src) - if (!result) - return - - for (var/mob/L in GLOB.player_list) - if (get_z(L) in z_levels) - to_chat(L, result[1]) - - log_and_message_staff(" - GlobalNarrate to z-level(s): ([english_list(z_levels)]), [result[2]]/[result[3]]: [result[4]]") - else - var/result = cmd_admin_narrate_helper(src) - if (!result) - return - - to_world(result[1]) - log_and_message_staff(" - GlobalNarrate [region] [result[2]]/[result[3]]: [result[4]]") - - -/proc/cmd_admin_narrate_helper(var/user, var/style, var/size, var/message) - if (!style) - style = input("Pick a text style:", "Text Style") as null|anything in list( - "default", - "italic", - "bold", - "subtle", - "notice", - "warning", - "danger", - "occult", - "unsafe" - ) - if (!style) - return - - if (style == "unsafe") - if (!config.allow_unsafe_narrates) - to_chat(user, SPAN_WARNING("Unsafe narrates are not permitted by the server configuration.")) - return - - if (style != "unsafe") - if (!size) - size = input("Pick a text size:", "Text Size") as null|anything in list( - "normal", - "small", - "large", - "huge", - "giant" - ) - if (!size) - return - - if (!message) - message = input("Message:", text("Enter the text you wish to appear to your target:")) as null|text - if (style != "unsafe") - message = sanitize(message) - if (!message) - return - - var/result = message - if (style != "unsafe") - switch (style) - if ("italic") result = "[result]" - if ("bold") result = "[result]" - if ("subtle") result = "You hear a voice in your head... [result]" - if ("notice") result = SPAN_NOTICE(result) - if ("warning") result = SPAN_WARNING(result) - if ("danger") result = SPAN_DANGER(result) - if ("occult") result = SPAN_OCCULT(result) - switch (size) - if ("small") result = FONT_SMALL(result) - if ("large") result = FONT_LARGE(result) - if ("huge") result = FONT_HUGE(result) - if ("giant") result = FONT_GIANT(result) - - return list(result, style, size, message) - -//Condenced version of the mob targeting narrates -/client/proc/cmd_admin_narrate(atom/A) - set category = "Special Verbs" - set name = "Narrate" - set desc = "Selection of narrates targeting a mob." - - if(!check_rights(R_INVESTIGATE)) - return - - var/options = list() - - if(ismob(A)) - options += list("Direct Narrate") - - if(check_rights(R_MOD, FALSE)) - options += list("Visual Narrate", "Audible Narrate") - - var/result = input("What type of narrate?") as null | anything in options - switch(result) - if (null) - return - if ("Direct Narrate") - cmd_admin_direct_narrate(A) - if ("Visual Narrate") - cmd_admin_visible_narrate(A) - if ("Audible Narrate") - cmd_admin_audible_narrate(A) - - -// Targetted narrate: will narrate to one specific mob -/client/proc/cmd_admin_direct_narrate(var/mob/M) - set popup_menu = FALSE - set category = null - set name = "Direct Narrate" - set desc = "Narrate to a specific mob." - - if (!check_rights(R_INVESTIGATE)) - return - - if (!M) - M = input("Direct narrate to who?", "Active Players") as null|anything in get_mob_with_client_list() - if (!M) - return - - var/style - var/size - - var/result = cmd_admin_narrate_helper(src, style, size) - if (!result) - return - - to_chat(M, result[1]) - log_and_message_staff(" - DirectNarrate [result[2]]/[result[3]] to ([M.name]/[M.key]): [result[4]]") - -// Local narrate, narrates to everyone who can see where you are regardless of whether they are blind or deaf. -/client/proc/cmd_admin_local_narrate() - set category = "Special Verbs" - set name = "Local Narrate" - set desc = "Narrate to everyone who can see the turf your mob is on." - - if(!check_rights(R_MOD)) - return - - var/result = cmd_admin_narrate_helper(src) - if (!result) - return - - var/list/listening_hosts = hosts_in_view_range(usr) - - for(var/listener in listening_hosts) - to_chat(listener, result[1]) - log_and_message_staff(" - LocalNarrate [result[2]]/[result[3]]: [result[4]]") - -// Visible narrate, it's as if it's a visible message -/client/proc/cmd_admin_visible_narrate(var/atom/A) - set popup_menu = FALSE - set category = null - set name = "Visible Narrate" - set desc = "Narrate to those who can see the given atom." - - if(!check_rights(R_MOD)) - return - - var/mob/M = mob - - if(!M) - to_chat(src, "You must be in control of a mob to use this.") - return - - var/result = cmd_admin_narrate_helper(src) - if (!result) - return - - M.visible_message(result[1], result[1], narrate = TRUE) - log_and_message_staff(" - VisibleNarrate [result[2]]/[result[3]] on [A]: [result[4]]") - -// Visible narrate, it's as if it's a audible message -/client/proc/cmd_admin_audible_narrate(var/atom/A) - set popup_menu = FALSE - set category = null - set name = "Audible Narrate" - set desc = "Narrate to those who can hear the given atom." - - if(!holder) - to_chat(src, "Only administrators may use this command.") - return - - var/mob/M = mob - - if(!M) - to_chat(src, "You must be in control of a mob to use this.") - return - - var/result = cmd_admin_narrate_helper(src) - if (!result) - return - - M.audible_message(result[1], result[1], narrate = TRUE) - log_and_message_staff(" - AudibleNarrate [result[2]]/[result[3]] on [A]: [result[4]]") - -/client/proc/cmd_admin_godmode(mob/M as mob in SSmobs.mob_list) - set category = "Special Verbs" - set name = "Godmode" - if(!holder) - to_chat(src, "Only administrators may use this command.") - return - M.status_flags ^= GODMODE - to_chat(usr, "Toggled [(M.status_flags & GODMODE) ? "ON" : "OFF"]") - 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"]", 1) - -/client/proc/cmd_admin_notarget(mob/living/M as mob in SSmobs.mob_list) - set category = "Special Verbs" - set name = "Notarget" - set desc = "Makes the target mob become invisible to all simple mobs." - - if (!check_rights(R_ADMIN)) - return - - M.status_flags ^= NOTARGET - log_and_message_admins("has toggled [key_name(M)]'s notarget to [(M.status_flags & NOTARGET) ? "On" : "Off"]") - -/proc/cmd_admin_mute(mob/M as mob, mute_type) - if(!usr || !usr.client) - return - if(!usr.client.holder) - to_chat(usr, "Error: cmd_admin_mute: You don't have permission to do this.") - return - if(!M.client) - to_chat(usr, "Error: cmd_admin_mute: This mob doesn't have a client tied to it.") - if(M.client.holder) - to_chat(usr, "Error: cmd_admin_mute: You cannot mute an admin/mod.") - if(!M.client) return - if(M.client.holder) return - - var/muteunmute - var/mute_string - - switch(mute_type) - if(MUTE_IC) mute_string = "IC (say and emote)" - if(MUTE_OOC) mute_string = "OOC" - if(MUTE_PRAY) mute_string = "pray" - if(MUTE_ADMINHELP) mute_string = "adminhelp, admin PM and ASAY" - if(MUTE_DEADCHAT) mute_string = "deadchat and DSAY" - if(MUTE_ALL) mute_string = "everything" - else return - - - if(M.client.prefs.muted & mute_type) - muteunmute = "unmuted" - M.client.prefs.muted &= ~mute_type - else - muteunmute = "muted" - M.client.prefs.muted |= mute_type - - log_admin("[key_name(usr)] has [muteunmute] [key_name(M)] from [mute_string]") - message_staff("[key_name_admin(usr)] has [muteunmute] [key_name_admin(M)] from [mute_string].", 1) - to_chat(M, "You have been [muteunmute] from [mute_string].") - -/client/proc/cmd_admin_add_random_ai_law() - set category = "Fun" - set name = "Add Random AI Law" - if(!holder) - to_chat(src, "Only administrators may use this command.") - return - var/confirm = alert(src, "You sure?", "Confirm", "Yes", "No") - if(confirm != "Yes") return - log_admin("[key_name(src)] has added a random AI law.") - message_admins("[key_name_admin(src)] has added a random AI law.", 1) - - var/show_log = alert(src, "Show ion message?", "Message", "Yes", "No") - if(show_log == "Yes") - command_announcement.Announce("Ion storm detected near the [station_name()]. Please check all AI-controlled equipment for errors.", "Anomaly Alert", new_sound = 'sound/AI/ionstorm.ogg') - - IonStorm(0) - -/* -Allow admins to set players to be able to respawn/bypass 30 min wait, without the admin having to edit variables directly -Ccomp's first proc. -*/ - -/client/proc/get_ghosts(var/notify = 0,var/what = 2) - // what = 1, return ghosts ass list. - // what = 2, return mob list - - var/list/mobs = list() - var/list/ghosts = list() - var/list/sortmob = sortAtom(SSmobs.mob_list) // get the mob list. - var/any=0 - for(var/mob/observer/ghost/M in sortmob) - mobs.Add(M) //filter it where it's only ghosts - any = 1 //if no ghosts show up, any will just be 0 - if(!any) - if(notify) - to_chat(src, "There doesn't appear to be any ghosts for you to select.") - return - - for(var/mob/M in mobs) - var/name = M.name - ghosts[name] = M //get the name of the mob for the popup list - if(what==1) - return ghosts - else - return mobs - -/client/proc/get_ghosts_by_key() - . = list() - for(var/mob/observer/ghost/M in SSmobs.mob_list) - .[M.ckey] = M - . = sortAssoc(.) - -/client/proc/allow_character_respawn(var/selection in get_ghosts_by_key()) - set category = "Special Verbs" - set name = "Allow player to respawn" - set desc = "Allows the player bypass the wait to respawn or allow them to re-enter their corpse." - - if(!check_rights(R_ADMIN)) - return - - var/list/ghosts = get_ghosts_by_key() - var/mob/observer/ghost/G = ghosts[selection] - if(!istype(G)) - to_chat(src, "[selection] no longer has an associated ghost.") - return - - if(G.has_enabled_antagHUD == 1 && config.antag_hud_restricted) - var/response = alert(src, "[selection] has enabled antagHUD. Are you sure you wish to allow them to respawn?","Ghost has used AntagHUD","No","Yes") - if(response == "No") return - else - var/response = alert(src, "Are you sure you wish to allow [selection] to respawn?","Allow respawn","No","Yes") - if(response == "No") return - - G.timeofdeath=-19999 /* time of death is checked in /mob/verb/abandon_mob() which is the Respawn verb. - timeofdeath is used for bodies on autopsy but since we're messing with a ghost I'm pretty sure - there won't be an autopsy. - */ - G.has_enabled_antagHUD = 2 - G.can_reenter_corpse = CORPSE_CAN_REENTER_AND_RESPAWN - - G.show_message("You may now respawn. You should roleplay as if you learned nothing about the round during your time with the dead.", 1) - log_and_message_admins("has allowed [key_name(G)] to bypass the [config.respawn_delay] minute respawn limit.") - -/client/proc/toggle_antagHUD_use() - set category = "Server" - set name = "Toggle antagHUD usage" - set desc = "Toggles antagHUD usage for observers" - - if(!holder) - to_chat(src, "Only administrators may use this command.") - var/action="" - if(config.antag_hud_allowed) - for(var/mob/observer/ghost/g in get_ghosts()) - if(!g.client.holder) //Remove the verb from non-admin ghosts - g.verbs -= /mob/observer/ghost/verb/toggle_antagHUD - if(g.antagHUD) - g.antagHUD = 0 // Disable it on those that have it enabled - g.has_enabled_antagHUD = 2 // We'll allow them to respawn - to_chat(g, "The Administrator has disabled AntagHUD") - config.antag_hud_allowed = 0 - to_chat(src, "AntagHUD usage has been disabled") - action = "disabled" - else - for(var/mob/observer/ghost/g in get_ghosts()) - if(!g.client.holder) // Add the verb back for all non-admin ghosts - g.verbs += /mob/observer/ghost/verb/toggle_antagHUD - to_chat(g, "The Administrator has enabled AntagHUD ")// Notify all observers they can now use AntagHUD - - config.antag_hud_allowed = 1 - action = "enabled" - to_chat(src, "AntagHUD usage has been enabled") - - - log_admin("[key_name(usr)] has [action] antagHUD usage for observers") - message_admins("Admin [key_name_admin(usr)] has [action] antagHUD usage for observers", 1) - - - -/client/proc/toggle_antagHUD_restrictions() - set category = "Server" - set name = "Toggle antagHUD Restrictions" - set desc = "Restricts players that have used antagHUD from being able to join this round." - if(!holder) - to_chat(src, "Only administrators may use this command.") - var/action="" - if(config.antag_hud_restricted) - for(var/mob/observer/ghost/g in get_ghosts()) - to_chat(g, "The administrator has lifted restrictions on joining the round if you use AntagHUD") - action = "lifted restrictions" - config.antag_hud_restricted = 0 - to_chat(src, "AntagHUD restrictions have been lifted") - else - for(var/mob/observer/ghost/g in get_ghosts()) - to_chat(g, "The administrator has placed restrictions on joining the round if you use AntagHUD") - to_chat(g, "Your AntagHUD has been disabled, you may choose to re-enabled it but will be under restrictions") - g.antagHUD = 0 - g.has_enabled_antagHUD = 0 - action = "placed restrictions" - config.antag_hud_restricted = 1 - to_chat(src, "AntagHUD restrictions have been enabled") - - log_admin("[key_name(usr)] has [action] on joining the round if they use AntagHUD") - message_admins("Admin [key_name_admin(usr)] has [action] on joining the round if they use AntagHUD", 1) - -/client/proc/cmd_admin_add_freeform_ai_law() - set category = "Fun" - set name = "Add Custom AI law" - if(!holder) - to_chat(src, "Only administrators may use this command.") - return - var/input = sanitize(input(usr, "Please enter anything you want the AI to do. Anything. Serious.", "What?", "") as text|null) - if(!input) - return - for(var/mob/living/silicon/ai/M in SSmobs.mob_list) - if (M.stat == 2) - to_chat(usr, "Upload failed. No signal is being detected from the AI.") - else if (M.see_in_dark == 0) - to_chat(usr, "Upload failed. Only a faint signal is being detected from the AI, and it is not responding to our requests. It may be low on power.") - else - M.add_ion_law(input) - for(var/mob/living/silicon/ai/O in SSmobs.mob_list) - to_chat(O, "" + input + "...LAWS UPDATED") - O.show_laws() - - log_admin("Admin [key_name(usr)] has added a new AI law - [input]") - message_admins("Admin [key_name_admin(usr)] has added a new AI law - [input]", 1) - - var/show_log = alert(src, "Show ion message?", "Message", "Yes", "No") - if(show_log == "Yes") - command_announcement.Announce("Ion storm detected near the [station_name()]. Please check all AI-controlled equipment for errors.", "Anomaly Alert", new_sound = 'sound/AI/ionstorm.ogg') - -/client/proc/cmd_admin_rejuvenate(mob/living/M as mob in SSmobs.mob_list) - set category = "Special Verbs" - set name = "Rejuvenate" - if(!holder) - to_chat(src, "Only administrators may use this command.") - return - if(!mob) - return - if(!istype(M)) - alert("Cannot revive a ghost") - return - if(config.allow_admin_rev) - M.revive() - - log_and_message_admins("healed / revived [key_name_admin(M)]!") - else - alert("Admin revive disabled") - -/client/proc/cmd_admin_create_centcom_report() - set category = "Special Verbs" - set name = "Create Command Report" - if(!holder) - to_chat(src, "Only administrators may use this command.") - return - var/input = sanitize(input(usr, "Please enter anything you want. Anything. Serious.", "What?", "") as message|null, extra = 0) - var/customname = sanitizeSafe(input(usr, "Pick a title for the report.", "Title") as text|null) - if(!input) - return - if(!customname) - customname = "[GLOB.using_map.boss_name] Update" - - //New message handling - post_comm_message(customname, replacetext_char(input, "\n", "
              ")) - - switch(alert("Should this be announced to the general population?",,"Yes","No")) - if("Yes") - command_announcement.Announce(input, customname, new_sound = GLOB.using_map.command_report_sound, msg_sanitized = 1); - if("No") - minor_announcement.Announce(message = "New [GLOB.using_map.company_name] Update available at all communication consoles.") - - log_admin("[key_name(src)] has created a command report: [input]") - message_admins("[key_name_admin(src)] has created a command report", 1) - -/client/proc/cmd_admin_delete(atom/O as obj|mob|turf in range(world.view)) - set category = "Admin" - set name = "Delete" - - if (!holder) - to_chat(src, "Only administrators may use this command.") - return - - 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])", 1) - - // turfs are special snowflakes that'll explode if qdel'd - if (isturf(O)) - var/turf/T = O - T.ChangeTurf(world.turf) - else - qdel(O) - -/client/proc/cmd_admin_list_open_jobs() - set category = "Admin" - set name = "List free slots" - - if (!holder) - to_chat(src, "Only administrators may use this command.") - return - for(var/datum/job/job in SSjobs.primary_job_datums) - to_chat(src, "[job.title]: [job.total_positions]") - -/client/proc/cmd_admin_explosion(atom/O as obj|mob|turf in range(world.view)) - set category = "Special Verbs" - set name = "Explosion" - - if(!check_rights(R_DEBUG|R_FUN)) return - - var/devastation = input("Range of total devastation. -1 to none", text("Input")) as num|null - if(devastation == null) return - var/heavy = input("Range of heavy impact. -1 to none", text("Input")) as num|null - if(heavy == null) return - var/light = input("Range of light impact. -1 to none", text("Input")) as num|null - if(light == null) return - var/flash = input("Range of flash. -1 to none", text("Input")) as num|null - if(flash == null) return - var/shaped = 0 - if(config.use_recursive_explosions) - if(alert(src, "Shaped explosion?", "Shape", "Yes", "No") == "Yes") - shaped = input("Shaped where to?", "Input") as anything in list("NORTH","SOUTH","EAST","WEST") - shaped = text2dir(shaped) - if ((devastation != -1) || (heavy != -1) || (light != -1) || (flash != -1)) - if ((devastation > 20) || (heavy > 20) || (light > 20)) - if (alert(src, "Are you sure you want to do this? It will laaag.", "Confirmation", "Yes", "No") == "No") - return - - explosion(O, devastation, heavy, light, flash, shaped=shaped) - log_admin("[key_name(usr)] created an explosion ([devastation],[heavy],[light],[flash]) at ([O.x],[O.y],[O.z])") - message_admins("[key_name_admin(usr)] created an explosion ([devastation],[heavy],[light],[flash]) at ([O.x],[O.y],[O.z])", 1) - return - else - return - -/client/proc/cmd_admin_emp(atom/O as obj|mob|turf in range(world.view)) - set category = "Special Verbs" - set name = "EM Pulse" - - if(!check_rights(R_DEBUG|R_FUN)) return - - var/heavy = input("Range of heavy pulse.", text("Input")) as num|null - if(heavy == null) return - var/light = input("Range of light pulse.", text("Input")) as num|null - if(light == null) return - - if (heavy || light) - - 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])", 1) - - return - else - return - -/client/proc/cmd_admin_gib(mob/M as mob in SSmobs.mob_list) - set category = "Special Verbs" - set name = "Gib" - - if(!check_rights(R_ADMIN|R_FUN)) return - - var/confirm = alert(src, "You sure?", "Confirm", "Yes", "No") - if(confirm != "Yes") return - //Due to the delay here its easy for something to have happened to the mob - if(!M) return - - log_admin("[key_name(usr)] has gibbed [key_name(M)]") - message_admins("[key_name_admin(usr)] has gibbed [key_name_admin(M)]", 1) - - if(isobserver(M)) - gibs(M.loc) - return - - M.gib() - -/client/proc/cmd_admin_gib_self() - set name = "Gibself" - set category = "Fun" - - var/confirm = alert(src, "You sure?", "Confirm", "Yes", "No") - if(confirm == "Yes") - if (isobserver(mob)) // so they don't spam gibs everywhere - return - else - mob.gib() - - log_and_message_admins("used gibself.") - -/client/proc/update_world() - // If I see anyone granting powers to specific keys like the code that was here, - // I will both remove their SVN access and permanently ban them from my servers. - return - -/client/proc/cmd_admin_check_contents(mob/living/M as mob in SSmobs.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]") - -/* This proc is DEFERRED. Does not do anything. -/client/proc/cmd_admin_remove_phoron() - set category = "Debug" - set name = "Stabilize Atmos." - if(!holder) - to_chat(src, "Only administrators may use this command.") - return -// DEFERRED - spawn(0) - for(var/turf/T in view()) - T.poison = 0 - T.oldpoison = 0 - T.tmppoison = 0 - T.oxygen = 755985 - T.oldoxy = 755985 - T.tmpoxy = 755985 - T.co2 = 14.8176 - T.oldco2 = 14.8176 - T.tmpco2 = 14.8176 - T.n2 = 2.844e+006 - T.on2 = 2.844e+006 - T.tn2 = 2.844e+006 - T.tsl_gas = 0 - T.osl_gas = 0 - T.sl_gas = 0 - T.temp = 293.15 - T.otemp = 293.15 - T.ttemp = 293.15 -*/ - -/client/proc/toggle_view_range() - set category = "Special Verbs" - set name = "Change View Range" - set desc = "switches between 1x and custom views" - - if(view == world.view) - view = input("Select view range:", "FUCK YE", 7) in list(1,2,3,4,5,6,7,8,9,10,11,12,13,14,128) - else - view = world.view - - log_and_message_admins("changed their view range to [view].") - -/client/proc/admin_call_shuttle() - - set category = "Admin" - set name = "Call Evacuation" - - if(!SSticker.mode || !evacuation_controller) - return - - if(!check_rights(R_ADMIN)) return - - if(alert(src, "Are you sure?", "Confirm", "Yes", "No") != "Yes") return - - if(SSticker.mode.auto_recall_shuttle) - if(input("The evacuation will just be cancelled if you call it. Call anyway?") in list("Confirm", "Cancel") != "Confirm") - return - - var/choice = input("Is this an emergency evacuation or a crew transfer?") in list("Emergency", "Crew Transfer") - evacuation_controller.call_evacuation(usr, (choice == "Emergency")) - log_and_message_admins("admin-called an evacuation.") - return - -/client/proc/admin_cancel_shuttle() - set category = "Admin" - set name = "Cancel Evacuation" - - if(!check_rights(R_ADMIN)) return - - if(alert(src, "You sure?", "Confirm", "Yes", "No") != "Yes") return - - if(!evacuation_controller) - return - - evacuation_controller.cancel_evacuation() - log_and_message_admins("admin-cancelled the evacuation.") - -/client/proc/admin_deny_shuttle() - set category = "Admin" - set name = "Toggle Deny Evac" - - if (!evacuation_controller) - return - - if(!check_rights(R_ADMIN)) return - - evacuation_controller.deny = !evacuation_controller.deny - - log_admin("[key_name(src)] has [evacuation_controller.deny ? "denied" : "allowed"] evacuation to be called.") - message_admins("[key_name_admin(usr)] has [evacuation_controller.deny ? "denied" : "allowed"] evacuation to be called.") - -/client/proc/cmd_admin_attack_log(mob/M as mob in SSmobs.mob_list) - set category = "Special Verbs" - set name = "Attack Log" - - to_chat(usr, text("Attack Log for []", mob)) - for(var/t in M.attack_logs_) - to_chat(usr, t) - - -/client/proc/toggle_random_events() - set category = "Server" - set name = "Toggle random events on/off" - - set desc = "Toggles random events such as meteors, black holes, blob (but not space dust) on/off" - if(!check_rights(R_SERVER)) return - - if(!config.allow_random_events) - config.allow_random_events = 1 - to_chat(usr, "Random events enabled") - message_admins("Admin [key_name_admin(usr)] has enabled random events.", 1) - else - config.allow_random_events = 0 - to_chat(usr, "Random events disabled") - message_admins("Admin [key_name_admin(usr)] has disabled random events.", 1) - - -/client/proc/cmd_admin_simulate_distant_explosion() - set category = "Fun" - set name = "Simulate Distant Explosion" - set desc = "Plays distant explosion audio and optionally causes players to fall over" - var/client/user = resolve_client() - if (!check_rights(R_ADMIN, TRUE, user)) - return - var/mob/mob = user.mob - if (!mob || !isliving(mob) && !isobserver(mob)) - to_chat(user, SPAN_WARNING("You must be in the game world to use this command.")) - return - var/turf/turf = get_turf(mob) - if (!turf) - to_chat(user, SPAN_WARNING("You must be in the game world to use this command.")) - return - var/list/levels = GetConnectedZlevels(turf.z) - if (!length(levels)) - to_chat(user, SPAN_WARNING("No levels connected to this z-group.")) - return - levels = sortList(levels) - var/mode - var/response = alert(user, "Players on levels [levels.Join(", ")] will be affected.\nShould they be knocked over?", "Simulate Distant Explosion", "Yes", "No", "Cancel") - if (!response || response == "Cancel") - return - if (response == "Yes") - response = alert(user, "Should all players be knocked down, or only unstable ones?", "Simulate Distant Explosion", "Unstable", "All", "Cancel") - if (!response || response == "Cancel") - return - if (response == "All") - mode = 2 - else - mode = 1 - var/affected = 0 - var/floored = 0 - for (mob as anything in GLOB.player_list) - var/living = isliving(mob) - if (!living && !isobserver(mob)) - continue - turf = get_turf(mob) - if (!(turf?.z in levels)) - continue - ++affected - mob.playsound_local(mob, 'sound/effects/explosionfar.ogg', 15) - if (!mode) - continue - if (!living || !mob.can_be_floored()) - continue - var/fall = mode - if (fall == 1) - var/since_move = world.time - mob.l_move_time - if (since_move > 5 SECONDS) - fall = prob(20) - else if (since_move > 3 SECONDS) - fall = MOVING_QUICKLY(mob) ? prob(75) : prob(20) - else - fall = MOVING_QUICKLY(mob) ? prob(75) : prob(50) - if (fall) - to_chat(mob, SPAN_DANGER("You stumble onto the floor from the shaking!")) - mob.AdjustWeakened(2) - mob.AdjustStunned(2) - ++floored - log_and_message_admins("[key_name_admin(user)] simulated a distant explosion, affecting [affected] players and flooring [floored] on levels [levels.Join(", ")].") diff --git a/code/modules/admin/verbs/striketeam.dm b/code/modules/admin/verbs/striketeam.dm deleted file mode 100644 index b908f9bf0fc35..0000000000000 --- a/code/modules/admin/verbs/striketeam.dm +++ /dev/null @@ -1,54 +0,0 @@ -//STRIKE TEAMS -var/global/const/commandos_possible = 6 //if more Commandos are needed in the future - -/client/proc/strike_team() - set category = "Fun" - set name = "Spawn Strike Team" - set desc = "Spawns a strike team if you want to run an admin event." - - if(!src.holder) - to_chat(src, "Only administrators may use this command.") - return - - if(GAME_STATE < RUNLEVEL_GAME) - to_chat(usr, "The game hasn't started yet!") - return - - if(world.time < 6000) - to_chat(usr, "There are [(6000-world.time)/10] seconds remaining before it may be called.") - return - - var/choice = input(usr, "Select type of strike team:") as null|anything in list("Heavy Asset Protection", "Mercenaries") - if(!choice) - return - - var/datum/antagonist/deathsquad/team - switch(choice) - if("Heavy Asset Protection") - team = GLOB.deathsquad - if("Mercenaries") - team = GLOB.commandos - else - return - - if(team.deployed) - to_chat(usr, "Someone is already sending a team.") - return - - if(alert("Do you want to send in a strike team? Once enabled, this is irreversible.",,"Yes","No")!="Yes") - return - - alert("This 'mode' will go on until everyone is dead or the installation is destroyed. You may also admin-call the evac shuttle when appropriate. Spawned commandos have internals cameras which are viewable through a monitor inside the Spec. Ops. Office. Assigning the team's detailed task is recommended from there. While you will be able to manually pick the candidates from active ghosts, their assignment in the squad will be random.") - - choice = null - while(!choice) - choice = sanitize(input(src, "Please specify which mission the strike team shall undertake.", "Specify Mission", "")) - if(!choice) - if(alert("Error, no mission set. Do you want to exit the setup process?",,"Yes","No")=="Yes") - return - - if(team.deployed) - to_chat(usr, "Looks like someone beat you to it.") - return - - team.attempt_random_spawn() diff --git a/code/modules/admin/verbs/trading_verbs.dm b/code/modules/admin/verbs/trading_verbs.dm deleted file mode 100644 index 3b2ae79a5fe68..0000000000000 --- a/code/modules/admin/verbs/trading_verbs.dm +++ /dev/null @@ -1,29 +0,0 @@ -/client/proc/list_traders() - set category = "Debug" - set name = "Traders - List" - for (var/trader_type in GLOB.trader_types) - var/datum/trader/trader = GLOB.traders[trader_type] - to_chat(src, "[trader.name] \ref[trader]") - - -/client/proc/add_trader() - set category = "Debug" - set name = "Traders - Add" - var/list/possible = subtypesof(/datum/trader) - /datum/trader/ship - /datum/trader/ship/unique - GLOB.trader_types - var/trader_type = input(src, "Choose a trader to add:") as null | anything in possible - if (!trader_type) - return - GLOB.traders[trader_type] = new trader_type - GLOB.trader_types += trader_type - - -/client/proc/remove_trader() - set category = "Debug" - set name = "Traders - Remove" - var/trader_type = input(src, "Choose something to remove.") as null | anything in GLOB.trader_types - if (!trader_type) - return - var/trader = GLOB.traders[trader_type] - GLOB.trader_types -= trader_type - GLOB.traders[trader_type] = null - qdel(trader) diff --git a/code/modules/admin/view_variables/helpers.dm b/code/modules/admin/view_variables/helpers.dm deleted file mode 100644 index 08711d9c866a2..0000000000000 --- a/code/modules/admin/view_variables/helpers.dm +++ /dev/null @@ -1,211 +0,0 @@ - -// Keep these two together, they *must* be defined on both -// If /client ever becomes /datum/client or similar, they can be merged -/datum/proc/get_view_variables_header() - return "[src]" - -/atom/get_view_variables_header() - return {" - [src] -
              - <= - [dir2text(dir)] - => - - "} - -/atom/movable/get_view_variables_options() - return ..() + {" - - - "} - -/mob/living/get_view_variables_header() - return {" - [src] -
              <= [dir2text(dir)] => -
              [ckey ? ckey : "No ckey"] / [real_name ? real_name : "No real name"] -
              - BRUTE:[getBruteLoss()] - FIRE:[getFireLoss()] - TOXIN:[getToxLoss()] - OXY:[getOxyLoss()] - CLONE:[getCloneLoss()] - BRAIN:[getBrainLoss()] -
              - "} - -// Same for these as for get_view_variables_header() above -/datum/proc/get_view_variables_options() - return "" - -/mob/get_view_variables_options() - return ..() + {" - - - - - - - - - - - - - - - - - - - - - - - - - - - "} - -/mob/living/get_view_variables_options() - return ..() + {" - - - - "} - -/mob/living/carbon/human/get_view_variables_options() - return ..() + {" - - - - - - - - "} - -/obj/get_view_variables_options() - return ..() + {" - - - - - "} - -/turf/get_view_variables_options() - return ..() + {" - - - "} - -/datum/proc/get_variables() - var/list/hidden = VV_hidden() - if (!hidden) - return list() - . = vars - hidden - if(!usr || !check_rights(R_ADMIN|R_DEBUG, FALSE)) - . -= VV_secluded() - -/datum/proc/get_variable_value(varname) - return vars[varname] - -/datum/proc/set_variable_value(varname, value) - vars[varname] = value - -/datum/proc/get_initial_variable_value(varname) - return initial(vars[varname]) - -/datum/proc/make_view_variables_variable_entry(var/varname, var/value, var/hide_watch = 0) - return {" - (E) - (C) - (M) - [hide_watch ? "" : "(W)"] - "} - -// No mass editing of clients -/client/make_view_variables_variable_entry(var/varname, var/value, var/hide_watch = 0) - return {" - (E) - (C) - [hide_watch ? "" : "(W)"] - "} - -// These methods are all procs and don't use stored lists to avoid VV exploits - -// The following vars cannot be viewed by anyone or, if null, no variables can be viewed. -/datum/proc/VV_hidden() - return list() - -// The following vars can only be viewed by R_ADMIN|R_DEBUG -/datum/proc/VV_secluded() - return list() - -/datum/configuration/VV_secluded() - return vars - -// The following vars cannot be edited by anyone -/datum/proc/VV_static() - return list("parent_type") - -/atom/VV_static() - return ..() + list("bound_x", "bound_y", "bound_height", "bound_width", "bounds", "step_x", "step_y", "step_size") - -/client/VV_static() - return ..() + list("holder", "prefs") - -/datum/admins/VV_static() - return vars - -// The following vars require R_DEBUG to edit -/datum/proc/VV_locked() - return list("vars", "cuffed") - -/client/VV_locked() - return list("vars", "mob") - -/mob/VV_locked() - return ..() + list("client") - -// The following vars require R_FUN|R_DEBUG to edit -/datum/proc/VV_icon_edit_lock() - return list() - -/atom/VV_icon_edit_lock() - return ..() + list("icon", "icon_state", "overlays", "underlays") - -// The following vars require R_SPAWN|R_DEBUG to edit -/datum/proc/VV_ckey_edit() - return list() - -/mob/VV_ckey_edit() - return list("key", "ckey") - -/client/VV_ckey_edit() - return list("key", "ckey") - -/datum/proc/may_edit_var(var/user, var/var_to_edit) - if(!user) - return FALSE - if(!(var_to_edit in vars)) - to_chat(user, "\The [src] does not have a var '[var_to_edit]'") - return FALSE - if(var_to_edit in VV_static()) - return FALSE - if((var_to_edit in VV_secluded()) && !check_rights(R_ADMIN|R_DEBUG, FALSE, C = user)) - return FALSE - if((var_to_edit in VV_locked()) && !check_rights(R_DEBUG, C = user)) - return FALSE - if((var_to_edit in VV_ckey_edit()) && !check_rights(R_SPAWN|R_DEBUG, C = user)) - return FALSE - if((var_to_edit in VV_icon_edit_lock()) && !check_rights(R_FUN|R_DEBUG, C = user)) - return FALSE - return TRUE - -/proc/forbidden_varedit_object_types() - return list( - /datum/admins //Admins editing their own admin-power object? Yup, sounds like a good idea. - ) diff --git a/code/modules/admin/view_variables/topic.dm b/code/modules/admin/view_variables/topic.dm deleted file mode 100644 index ad9ff3c563a32..0000000000000 --- a/code/modules/admin/view_variables/topic.dm +++ /dev/null @@ -1,596 +0,0 @@ - -/client/proc/view_var_Topic(href, href_list, hsrc) - //This should all be moved over to datum/admins/Topic() or something ~Carn - if( (usr.client != src) || !src.holder ) - return - if(href_list["Vars"]) - debug_variables(locate(href_list["Vars"])) - - //~CARN: for renaming mobs (updates their name, real_name, mind.name, their ID/PDA and datacore records). - else if(href_list["rename"]) - if(!check_rights(R_VAREDIT)) return - - var/mob/M = locate(href_list["rename"]) - if(!istype(M)) - to_chat(usr, "This can only be used on instances of type /mob") - return - - var/new_name = sanitize(input(usr,"What would you like to name this mob?","Input a name",M.real_name) as text|null, MAX_NAME_LEN) - if(!new_name || !M) return - - message_admins("Admin [key_name_admin(usr)] renamed [key_name_admin(M)] to [new_name].") - M.fully_replace_character_name(new_name) - href_list["datumrefresh"] = href_list["rename"] - - else if(href_list["dressup"]) - if(!check_rights(R_VAREDIT)) return - - var/mob/living/carbon/human/H = locate(href_list["dressup"]) - if(!istype(H)) - to_chat(usr, "This can only be used on instances of type /mob/living/carbon/human") - return - var/decl/hierarchy/outfit/outfit = input("Select outfit.", "Select equipment.") as null|anything in outfits() - if(!outfit) - return - - dressup_human(H, outfit, TRUE) - - else if(href_list["varnameedit"] && href_list["datumedit"]) - if(!check_rights(R_VAREDIT)) return - - var/D = locate(href_list["datumedit"]) - if(!istype(D,/datum) && !istype(D,/client)) - to_chat(usr, "This can only be used on instances of types /client or /datum") - return - - modify_variables(D, href_list["varnameedit"], 1) - - else if(href_list["varnamechange"] && href_list["datumchange"]) - if(!check_rights(R_VAREDIT)) return - - var/D = locate(href_list["datumchange"]) - if(!istype(D,/datum) && !istype(D,/client)) - to_chat(usr, "This can only be used on instances of types /client or /datum") - return - - modify_variables(D, href_list["varnamechange"], 0) - - else if(href_list["varnamemass"] && href_list["datummass"]) - if(!check_rights(R_VAREDIT)) return - - var/atom/A = locate(href_list["datummass"]) - if(!istype(A)) - to_chat(usr, "This can only be used on instances of type /atom") - return - - cmd_mass_modify_object_variables(A, href_list["varnamemass"]) - - else if(href_list["datumwatch"] && href_list["varnamewatch"]) - var/datum/D = locate(href_list["datumwatch"]) - if(D) - if(!watched_variables[D]) - watched_variables[D] = list() - watched_variables[D] |= href_list["varnamewatch"] - watched_variables() - - if(!watched_variables_window.is_processing) - START_PROCESSING(SSprocessing, watched_variables_window) - - else if(href_list["datumunwatch"] && href_list["varnameunwatch"]) - var/datum/D = locate(href_list["datumunwatch"]) - if(D && watched_variables[D]) - watched_variables[D] -= href_list["varnameunwatch"] - var/list/datums_watched_vars = watched_variables[D] - if(!datums_watched_vars.len) - watched_variables -= D - if(!watched_variables.len && watched_variables_window.is_processing) - STOP_PROCESSING(SSprocessing, watched_variables_window) - - else if(href_list["mob_player_panel"]) - if(!check_rights(0)) return - - var/mob/M = locate(href_list["mob_player_panel"]) - if(!istype(M)) - to_chat(usr, "This can only be used on instances of type /mob") - return - - src.holder.show_player_panel(M) - href_list["datumrefresh"] = href_list["mob_player_panel"] - - else if(href_list["give_spell"]) - if(!check_rights(R_ADMIN|R_FUN)) return - - var/mob/M = locate(href_list["give_spell"]) - if(!istype(M)) - to_chat(usr, "This can only be used on instances of type /mob") - return - - src.give_spell(M) - href_list["datumrefresh"] = href_list["give_spell"] - - else if(href_list["godmode"]) - if(!check_rights(R_REJUVINATE)) return - - var/mob/M = locate(href_list["godmode"]) - if(!istype(M)) - to_chat(usr, "This can only be used on instances of type /mob") - return - - src.cmd_admin_godmode(M) - href_list["datumrefresh"] = href_list["godmode"] - - else if(href_list["gib"]) - if(!check_rights(0)) return - - var/mob/M = locate(href_list["gib"]) - if(!istype(M)) - to_chat(usr, "This can only be used on instances of type /mob") - return - - src.cmd_admin_gib(M) - - else if(href_list["drop_everything"]) - if(!check_rights(R_DEBUG|R_ADMIN)) return - - var/mob/M = locate(href_list["drop_everything"]) - if(!istype(M)) - to_chat(usr, "This can only be used on instances of type /mob") - return - - if(usr.client) - usr.client.cmd_admin_drop_everything(M) - - else if(href_list["direct_control"]) - if(!check_rights(0)) return - - var/mob/M = locate(href_list["direct_control"]) - if(!istype(M)) - to_chat(usr, "This can only be used on instances of type /mob") - return - - if(usr.client) - usr.client.cmd_assume_direct_control(M) - - else if(href_list["make_skeleton"]) - if(!check_rights(R_FUN)) return - - var/mob/living/carbon/human/H = locate(href_list["make_skeleton"]) - if(!istype(H)) - to_chat(usr, "This can only be used on instances of type /mob/living/carbon/human") - return - - H.ChangeToSkeleton() - href_list["datumrefresh"] = href_list["make_skeleton"] - - else if(href_list["delthis"]) - if(!check_rights(R_DEBUG|R_SERVER)) return - - var/obj/O = locate(href_list["delthis"]) - if(!isobj(O)) - to_chat(usr, "This can only be used on instances of type /obj") - return - cmd_admin_delete(O) - - else if(href_list["delall"]) - if(!check_rights(R_DEBUG|R_SERVER)) return - - var/obj/O = locate(href_list["delall"]) - if(!isobj(O)) - to_chat(usr, "This can only be used on instances of type /obj") - return - - var/action_type = alert("Strict type ([O.type]) or type and all subtypes?",,"Strict type","Type and subtypes","Cancel") - if(action_type == "Cancel" || !action_type) - return - - if(alert("Are you really sure you want to delete all objects of type [O.type]?",,"Yes","No") != "Yes") - return - - if(alert("Second confirmation required. Delete?",,"Yes","No") != "Yes") - return - - var/O_type = O.type - switch(action_type) - if("Strict type") - var/i = 0 - for(var/obj/Obj in world) - if(Obj.type == O_type) - i++ - qdel(Obj) - if(!i) - to_chat(usr, "No objects of this type exist") - return - log_admin("[key_name(usr)] deleted all objects of type [O_type] ([i] objects deleted)") - message_admins("[key_name(usr)] deleted all objects of type [O_type] ([i] objects deleted)") - if("Type and subtypes") - var/i = 0 - for(var/obj/Obj in world) - if(istype(Obj,O_type)) - i++ - qdel(Obj) - if(!i) - to_chat(usr, "No objects of this type exist") - return - log_admin("[key_name(usr)] deleted all objects of type or subtype of [O_type] ([i] objects deleted)") - message_admins("[key_name(usr)] deleted all objects of type or subtype of [O_type] ([i] objects deleted)") - - else if(href_list["explode"]) - if(!check_rights(R_DEBUG|R_FUN)) return - - var/atom/A = locate(href_list["explode"]) - if(!isobj(A) && !ismob(A) && !isturf(A)) - to_chat(usr, "This can only be done to instances of type /obj, /mob and /turf") - return - - src.cmd_admin_explosion(A) - href_list["datumrefresh"] = href_list["explode"] - - else if(href_list["emp"]) - if(!check_rights(R_DEBUG|R_FUN)) return - - var/atom/A = locate(href_list["emp"]) - if(!isobj(A) && !ismob(A) && !isturf(A)) - to_chat(usr, "This can only be done to instances of type /obj, /mob and /turf") - return - - src.cmd_admin_emp(A) - href_list["datumrefresh"] = href_list["emp"] - - else if(href_list["mark_object"]) - if(!check_rights(0)) return - - var/datum/D = locate(href_list["mark_object"]) - if(!istype(D)) - to_chat(usr, "This can only be done to instances of type /datum") - return - - src.holder.marked_datum_weak = weakref(D) - href_list["datumrefresh"] = href_list["mark_object"] - - else if(href_list["rotatedatum"]) - if(!check_rights(0)) return - - var/atom/A = locate(href_list["rotatedatum"]) - if(!istype(A)) - to_chat(usr, "This can only be done to instances of type /atom") - return - - switch(href_list["rotatedir"]) - if("right") A.set_dir(turn(A.dir, -45)) - if("left") A.set_dir(turn(A.dir, 45)) - href_list["datumrefresh"] = href_list["rotatedatum"] - - else if(href_list["makemonkey"]) - if(!check_rights(R_SPAWN)) return - - var/mob/living/carbon/human/H = locate(href_list["makemonkey"]) - if(!istype(H)) - to_chat(usr, "This can only be done to instances of type /mob/living/carbon/human") - return - - if(alert("Confirm mob type change?",,"Transform","Cancel") != "Transform") return - if(!H) - to_chat(usr, "Mob doesn't exist anymore") - return - holder.Topic(href, list("monkeyone"=href_list["makemonkey"])) - - else if(href_list["makerobot"]) - if(!check_rights(R_SPAWN)) return - - var/mob/living/carbon/human/H = locate(href_list["makerobot"]) - if(!istype(H)) - to_chat(usr, "This can only be done to instances of type /mob/living/carbon/human") - return - - if(alert("Confirm mob type change?",,"Transform","Cancel") != "Transform") return - if(!H) - to_chat(usr, "Mob doesn't exist anymore") - return - holder.Topic(href, list("makerobot"=href_list["makerobot"])) - - else if(href_list["makeslime"]) - if(!check_rights(R_SPAWN)) return - - var/mob/living/carbon/human/H = locate(href_list["makeslime"]) - if(!istype(H)) - to_chat(usr, "This can only be done to instances of type /mob/living/carbon/human") - return - - if(alert("Confirm mob type change?",,"Transform","Cancel") != "Transform") return - if(!H) - to_chat(usr, "Mob doesn't exist anymore") - return - holder.Topic(href, list("makeslime"=href_list["makeslime"])) - - else if(href_list["makeai"]) - if(!check_rights(R_SPAWN)) return - - var/mob/living/carbon/human/H = locate(href_list["makeai"]) - if(!istype(H)) - to_chat(usr, "This can only be done to instances of type /mob/living/carbon/human") - return - - if(alert("Confirm mob type change?",,"Transform","Cancel") != "Transform") return - if(!H) - to_chat(usr, "Mob doesn't exist anymore") - return - holder.Topic(href, list("makeai"=href_list["makeai"])) - - else if(href_list["setspecies"]) - if(!check_rights(R_SPAWN)) return - - var/mob/living/carbon/human/H = locate(href_list["setspecies"]) - if(!istype(H)) - to_chat(usr, "This can only be done to instances of type /mob/living/carbon/human") - return - - var/new_species = input("Please choose a new species.","Species",null) as null|anything in all_species - - if(!H) - to_chat(usr, "Mob doesn't exist anymore") - return - - if(H.set_species(new_species)) - to_chat(usr, "Set species of [H] to [H.species].") - else - to_chat(usr, "Failed! Something went wrong.") - - else if(href_list["addlanguage"]) - if(!check_rights(R_SPAWN)) return - - var/mob/H = locate(href_list["addlanguage"]) - if(!istype(H)) - to_chat(usr, "This can only be done to instances of type /mob") - return - - var/new_language = input("Please choose a language to add.","Language",null) as null|anything in all_languages - - if(!new_language) - return - - if(!H) - to_chat(usr, "Mob doesn't exist anymore") - return - - if(H.add_language(new_language)) - to_chat(usr, "Added [new_language] to [H].") - else - to_chat(usr, "Mob already knows that language.") - - else if(href_list["remlanguage"]) - if(!check_rights(R_SPAWN)) return - - var/mob/H = locate(href_list["remlanguage"]) - if(!istype(H)) - to_chat(usr, "This can only be done to instances of type /mob") - return - - if(!H.languages.len) - to_chat(usr, "This mob knows no languages.") - return - - var/datum/language/rem_language = input("Please choose a language to remove.","Language",null) as null|anything in H.languages - - if(!rem_language) - return - - if(!H) - to_chat(usr, "Mob doesn't exist anymore") - return - - if(H.remove_language(rem_language.name)) - to_chat(usr, "Removed [rem_language] from [H].") - else - to_chat(usr, "Mob doesn't know that language.") - - else if(href_list["addverb"]) - if(!check_rights(R_DEBUG)) return - - var/mob/living/H = locate(href_list["addverb"]) - - if(!istype(H)) - to_chat(usr, "This can only be done to instances of type /mob/living") - return - var/list/possibleverbs = list() - possibleverbs += "Cancel" // One for the top... - possibleverbs += typesof(/mob/proc,/mob/verb,/mob/living/proc,/mob/living/verb) - switch(H.type) - if(/mob/living/carbon/human) - possibleverbs += typesof(/mob/living/carbon/proc,/mob/living/carbon/verb,/mob/living/carbon/human/verb,/mob/living/carbon/human/proc) - if(/mob/living/silicon/robot) - possibleverbs += typesof(/mob/living/silicon/proc,/mob/living/silicon/robot/proc,/mob/living/silicon/robot/verb) - if(/mob/living/silicon/ai) - possibleverbs += typesof(/mob/living/silicon/proc,/mob/living/silicon/ai/proc,/mob/living/silicon/ai/verb) - possibleverbs -= H.verbs - possibleverbs += "Cancel" // ...And one for the bottom - - var/verb = input("Select a verb!", "Verbs",null) as anything in possibleverbs - if(!H) - to_chat(usr, "Mob doesn't exist anymore") - return - if(!verb || verb == "Cancel") - return - else - H.verbs += verb - - else if(href_list["remverb"]) - if(!check_rights(R_DEBUG)) return - - var/mob/H = locate(href_list["remverb"]) - - if(!istype(H)) - to_chat(usr, "This can only be done to instances of type /mob") - return - var/verb = input("Please choose a verb to remove.","Verbs",null) as null|anything in H.verbs - if(!H) - to_chat(usr, "Mob doesn't exist anymore") - return - if(!verb) - return - else - H.verbs -= verb - - else if(href_list["addorgan"]) - if(!check_rights(R_SPAWN)) return - - var/mob/living/carbon/M = locate(href_list["addorgan"]) - if(!istype(M)) - to_chat(usr, "This can only be done to instances of type /mob/living/carbon") - return - - var/new_organ = input("Please choose an organ to add.","Organ",null) as null|anything in typesof(/obj/item/organ)-/obj/item/organ - if(!new_organ) return - - if(!M) - to_chat(usr, "Mob doesn't exist anymore") - return - - if(locate(new_organ) in M.internal_organs) - to_chat(usr, "Mob already has that organ.") - return - - new new_organ(M) - - - else if(href_list["remorgan"]) - if(!check_rights(R_SPAWN)) return - - var/mob/living/carbon/M = locate(href_list["remorgan"]) - if(!istype(M)) - to_chat(usr, "This can only be done to instances of type /mob/living/carbon") - return - - var/obj/item/organ/rem_organ = input("Please choose an organ to remove.","Organ",null) as null|anything in M.internal_organs - - if(!M) - to_chat(usr, "Mob doesn't exist anymore") - return - - if(!(locate(rem_organ) in M.internal_organs)) - to_chat(usr, "Mob does not have that organ.") - return - - to_chat(usr, "Removed [rem_organ] from [M].") - rem_organ.removed() - if(!QDELETED(rem_organ)) - qdel(rem_organ) - - else if(href_list["fix_nano"]) - if(!check_rights(R_DEBUG)) return - - var/mob/H = locate(href_list["fix_nano"]) - - if(!istype(H) || !H.client) - to_chat(usr, "This can only be done on mobs with clients") - return - - SSnano.close_uis(H) - H.client.cache.Cut() - var/datum/asset/assets = get_asset_datum(/datum/asset/nanoui) - assets.send(H) - - to_chat(usr, "Resource files sent") - to_chat(H, "Your NanoUI Resource files have been refreshed") - - log_admin("[key_name(usr)] resent the NanoUI resource files to [key_name(H)] ") - - else if(href_list["regenerateicons"]) - if(!check_rights(0)) return - - var/mob/M = locate(href_list["regenerateicons"]) - if(!ismob(M)) - to_chat(usr, "This can only be done to instances of type /mob") - return - M.regenerate_icons() - - else if(href_list["adjustDamage"] && href_list["mobToDamage"]) - if(!check_rights(R_DEBUG|R_ADMIN|R_FUN)) return - - var/mob/living/L = locate(href_list["mobToDamage"]) - if(!istype(L)) return - - var/Text = href_list["adjustDamage"] - - var/amount = input("Deal how much damage to mob? (Negative values here heal)","Adjust [Text]loss",0) as num - - if(!L) - to_chat(usr, "Mob doesn't exist anymore") - return - - switch(Text) - if("brute") L.adjustBruteLoss(amount) - if("fire") L.adjustFireLoss(amount) - if("toxin") L.adjustToxLoss(amount) - if("oxygen")L.adjustOxyLoss(amount) - if("brain") L.adjustBrainLoss(amount) - if("clone") L.adjustCloneLoss(amount) - else - to_chat(usr, "You caused an error. DEBUG: Text:[Text] Mob:[L]") - return - - if(amount != 0) - log_admin("[key_name(usr)] dealt [amount] amount of [Text] damage to [L]") - message_admins("[key_name(usr)] dealt [amount] amount of [Text] damage to [L]") - href_list["datumrefresh"] = href_list["mobToDamage"] - - else if(href_list["call_proc"]) - var/datum/D = locate(href_list["call_proc"]) - if(istype(D) || istype(D, /client)) // can call on clients too, not just datums - callproc_targetpicked(1, D) - else if(href_list["addaura"]) - if(!check_rights(R_DEBUG|R_ADMIN|R_FUN)) return - var/mob/living/L = locate(href_list["addaura"]) - if(!istype(L)) - return - var/choice = input("Please choose an aura to add", "Auras", null) as null|anything in typesof(/obj/aura) - if(!choice || !L) - return - var/obj/o = new choice(L) - log_and_message_admins("added \the [o] to \the [L]") - else if(href_list["removeaura"]) - if(!check_rights(R_DEBUG|R_ADMIN|R_FUN)) return - var/mob/living/L = locate(href_list["removeaura"]) - if(!istype(L)) - return - var/choice = input("Please choose an aura to remove", "Auras", null) as null|anything in L.auras - if(!choice || !L) - return - log_and_message_admins("removed \the [choice] to \the [L]") - qdel(choice) - - else if (href_list["debug_mob_ai"]) - if (!check_rights(R_DEBUG)) - return - var/mob/living/L = locate(href_list["debug_mob_ai"]) - log_debug("AI Debugging toggled [L.ai_holder.debug() ? "ON" : "OFF"] for \the [L]") - - else if (href_list["addmovementhandler"]) - if (!check_rights(R_DEBUG)) - return - var/datum/movement_handler/M = input("Add a movement handler to the mob.", "Movement Handler", null) as null|anything in typesof(/datum/movement_handler) - if (!M) - return - var/atom/movable/A = locate(href_list["addmovementhandler"]) - if (!istype(A)) - return - A.AddMovementHandler(M) - log_and_message_admins("Added the [M] movement handler to \the [A]") - - else if (href_list["removemovementhandler"]) - if (!check_rights(R_DEBUG)) - return - var/atom/movable/A = locate(href_list["removemovementhandler"]) - if (!istype(A)) - return - var/choice = input("Remove which movement handler?", "Movement Handler", null) as null|anything in A.movement_handlers - if (!choice) - return - A.RemoveMovementHandler(choice) - log_and_message_admins("Removed the [choice] movement handler from \the [A]") - - if(href_list["datumrefresh"]) - var/datum/DAT = locate(href_list["datumrefresh"]) - if(istype(DAT, /datum) || istype(DAT, /client)) - debug_variables(DAT) - - return diff --git a/code/modules/admin/view_variables/view_variables.dm b/code/modules/admin/view_variables/view_variables.dm deleted file mode 100644 index 3bb0b68aeccb0..0000000000000 --- a/code/modules/admin/view_variables/view_variables.dm +++ /dev/null @@ -1,206 +0,0 @@ -// Variables not to expand the lists of. Vars is pointless to expand, and overlays/underlays cannot be expanded. -var/global/list/view_variables_dont_expand = list("overlays", "underlays", "vars") -// Variables that runtime if you try to test associativity of the lists they contain by indexing -var/global/list/view_variables_no_assoc = list("verbs", "contents","screen","images") - -// Acceptable 'in world', as VV would be incredibly hampered otherwise -/client/proc/debug_variables(datum/D in world) - set category = "Debug" - set name = "View Variables" - - if(!check_rights(0)) - return - - if(!D) - return - - var/static/cookieoffset = rand(1, 9999) //to force cookies to reset after the round. - - var/icon/sprite - var/atom/A - if(istype(D, /atom)) - A = D - if(A.icon && A.icon_state) - sprite = icon(A.icon, A.icon_state) - send_rsc(usr, sprite, "view_vars_sprite.png") - - send_rsc(usr,'code/js/view_variables.js', "view_variables.js") - - var/html = {" - - - - - [D] (\ref[D] - [D.type]) - - - -
              - - - -
              - - [sprite ? "" : ""] - -
              [D.get_view_variables_header()]
              -
              - [replacetext_char("[D.type]", "/", "/")] - [holder.marked_datum() == D ? "
              Marked Object" : ""] -
              -
              -
              - Refresh - [A ? "Jump To":""] -
              - -
              -
              -
              -
              -
              - - E - Edit, tries to determine the variable type by itself.
              - C - Change, asks you for the var type first.
              - M - Mass modify: changes this variable for all objects of this type.
              -
              -
              - - - -
              -
              - Search: -
              -
              - -
              -
              -
                - [make_view_variables_var_list(D)] -
              - - - - "} - - show_browser(usr, html, "window=variables\ref[D];size=475x650") - -/client - var/list/watched_variables = list() - var/datum/browser/watched_variables/watched_variables_window - -/client/proc/watched_variables() - set category = "Debug" - set name = "View Watched Variables" - - watched_variables_window = new(usr, "watchedvariables", "Watched Variables", 640, 640, src) - - watched_variables_window.set_content() - watched_variables_window.open() - -/datum/browser/watched_variables/set_content() - var/list/dat = list() - - if(!user || !user.client) - return - - dat += "" - for(var/datum/D in user.client.watched_variables) - dat += "

              [make_view_variables_value(D)]

              " - for(var/v in user.client.watched_variables[D]) - dat += "
              " - dat += "(X) " - dat += "[D.make_view_variables_variable_entry(v, D.get_variable_value(v), 1)] [v] = [make_view_variables_value(D.get_variable_value(v), v)]" - dat += "
              " - - ..(jointext(dat, null)) - -/datum/browser/watched_variables/update() - set_content() - ..() - -/datum/browser/watched_variables/Process() - update() - -/datum/browser/watched_variables/Destroy() - STOP_PROCESSING(SSprocessing, src) - - . = ..() - -/proc/make_view_variables_var_list(datum/D) - . = list() - var/list/variables = D.get_variables() - variables = sortList(variables) - for(var/x in variables) - . += make_view_variables_var_entry(D, x, D.get_variable_value(x)) - return jointext(., null) - -/proc/make_view_variables_value(value, varname = "*") - var/vtext = "" - var/extra = list() - if(isnull(value)) - vtext = "null" - else if(istext(value)) - vtext = "\"[value]\"" - else if(isicon(value)) - vtext = "[value]" - else if(isfile(value)) - vtext = "'[value]'" - else if(istype(value, /datum)) - var/datum/DA = value - if("[DA]" == "[DA.type]" || !"[DA]") - vtext = "\ref[DA] - [DA.type]" - else - vtext = "\ref[DA] - [DA] ([DA.type])" - else if(istype(value, /client)) - var/client/C = value - vtext = "\ref[C] - [C] ([C.type])" - else if(islist(value)) - var/list/L = value - vtext = "/list ([L.len])" - if(!(varname in view_variables_dont_expand) && L.len > 0 && L.len < 100) - extra += "
                " - for (var/index = 1 to L.len) - var/entry = L[index] - if(!isnum(entry) && !isnull(entry) && !(varname in view_variables_no_assoc) && L[entry] != null) - extra += "
              • [index]: [make_view_variables_value(entry)] -> [make_view_variables_value(L[entry])]
              • " - else - extra += "
              • [index]: [make_view_variables_value(entry)]
              • " - extra += "
              " - else - vtext = "[value]" - - return "[vtext][jointext(extra, null)]" - -/proc/make_view_variables_var_entry(datum/D, varname, value, level=0) - var/ecm = null - - if(D) - ecm = D.make_view_variables_variable_entry(varname, value) - - var/valuestr = make_view_variables_value(value, varname) - - return "
            • [ecm][varname] = [valuestr]
            • " diff --git a/code/modules/admin/view_variables/view_variables_global.dm b/code/modules/admin/view_variables/view_variables_global.dm deleted file mode 100644 index c7b8dc7d4619e..0000000000000 --- a/code/modules/admin/view_variables/view_variables_global.dm +++ /dev/null @@ -1,83 +0,0 @@ -GLOBAL_DATUM(debug_real_globals, /debug_real_globals) - - -/debug_real_globals/get_variables() - var/static/list/cache - if (!cache) - cache = list() - var/list/hidden = VV_hidden() - if (!hidden) - return list() - for (var/name in global.vars) - if (name in hidden) - continue - cache |= name - cache = sortList(cache) - if (!usr || !check_rights(R_ADMIN|R_DEBUG, FALSE)) - var/static/list/locked - if (!locked) - locked = VV_locked() - return (cache - locked) - return cache.Copy() - - -/debug_real_globals/make_view_variables_variable_entry(name, value) - return {"(E) "} - - -/debug_real_globals/set_variable_value(name, value) - global.vars[name] = value - - -/debug_real_globals/get_variable_value(name) - return global.vars[name] - - -/debug_real_globals/get_view_variables_options() - return "" - - -/debug_real_globals/VV_locked() - return vars - - -/debug_real_globals/VV_hidden() - return list( - "sqladdress", - "sqldb", - "sqlfdbkdb", - "sqlfdbklogin", - "sqlfdbkpass", - "sqllogin", - "sqlpass", - "sqlport", - "comms_password", - "ban_comms_password", - "login_export_addr", - "admin_verbs_default", - "admin_verbs_admin", - "admin_verbs_ban", - "admin_verbs_sounds", - "admin_verbs_fun", - "admin_verbs_spawn", - "admin_verbs_server", - "admin_verbs_debug", - "admin_verbs_paranoid_debug", - "admin_verbs_possess", - "admin_verbs_permissions", - "admin_verbs_rejuv", - "admin_verbs_hideable", - "admin_verbs_mod", - "admin_datums", - "admin_ranks", - "alien_whitelist", - "adminfaxes" - ) - - -/client/proc/debug_global_variables() - set category = "Debug" - set name = "View Real Globals" - if (!GLOB.debug_real_globals) - GLOB.debug_real_globals = new - debug_variables(GLOB.debug_real_globals) diff --git a/code/modules/admin/view_variables/vv_set_handlers.dm b/code/modules/admin/view_variables/vv_set_handlers.dm deleted file mode 100644 index 74ccfbb03f37a..0000000000000 --- a/code/modules/admin/view_variables/vv_set_handlers.dm +++ /dev/null @@ -1,156 +0,0 @@ -/decl/vv_set_handler - var/handled_type - var/predicates - var/list/handled_vars - -/decl/vv_set_handler/proc/can_handle_set_var(var/datum/O, variable, var_value, client) - if(!istype(O, handled_type)) - return FALSE - if(!(variable in handled_vars)) - return FALSE - if(istype(O) && !(variable in O.vars)) - log_error("Did not find the variable '[variable]' for the instance [log_info_line(O)].") - return FALSE - if(predicates) - for(var/predicate in predicates) - if(!call(predicate)(var_value, client)) - return FALSE - return TRUE - -/decl/vv_set_handler/proc/handle_set_var(var/datum/O, variable, var_value, client) - var/proc_to_call = handled_vars[variable] - if(proc_to_call) - call(O, proc_to_call)(var_value) - else - O.vars[variable] = var_value - -/decl/vv_set_handler/location_handler - handled_type = /atom/movable - handled_vars = list("loc","x","y","z") - -/decl/vv_set_handler/location_handler/handle_set_var(var/atom/movable/AM, variable, var_value, client) - if(variable == "loc") - if(istype(var_value, /atom) || isnull(var_value) || var_value == "") // Proper null or empty string is fine, 0 is not - AM.forceMove(var_value) - else - to_chat(client, "May only assign null or /atom types to loc.") - else if(variable == "x" || variable == "y" || variable == "z") - if(istext(var_value)) - var_value = text2num(var_value) - if(!is_num_predicate(var_value, client)) - return - - // We set the default to 1,1,1 when at 0,0,0 (i.e. any non-turf location) to mimic the standard BYOND behaviour when adjusting x,y,z directly - var/x = AM.x || 1 - var/y = AM.y || 1 - var/z = AM.z || 1 - switch(variable) - if("x") - x = var_value - if("y") - y = var_value - if("z") - z = var_value - - var/turf/T = locate(x,y,z) - if(T) - AM.forceMove(T) - else - to_chat(client, "Unable to locate a turf at [x]-[y]-[z].") - -/decl/vv_set_handler/opacity_hander - handled_type = /atom - handled_vars = list("opacity" = /atom/proc/set_opacity) - predicates = list(/proc/is_num_predicate) - -/decl/vv_set_handler/dir_hander - handled_type = /atom - handled_vars = list("dir" = /atom/proc/set_dir) - predicates = list(/proc/is_dir_predicate) - -/decl/vv_set_handler/ghost_appearance_handler - handled_type = /mob/observer/ghost - handled_vars = list("appearance" = /mob/observer/ghost/proc/set_appearance) - predicates = list(/proc/is_atom_predicate) - -/decl/vv_set_handler/virtual_ability_handler - handled_type = /mob/observer/virtual - handled_vars = list("abilities") - predicates = list(/proc/is_num_predicate) - -/decl/vv_set_handler/virtual_ability_handler/handle_set_var(var/mob/observer/virtual/virtual, variable, var_value, client) - ..() - virtual.update_icon() - -/decl/vv_set_handler/mob_see_invisible_handler - handled_type = /mob - handled_vars = list("see_invisible" = /mob/proc/set_see_invisible) - predicates = list(/proc/is_num_predicate) - -/decl/vv_set_handler/mob_sight_handler - handled_type = /mob - handled_vars = list("sight" = /mob/proc/set_sight) - predicates = list(/proc/is_num_predicate) - -/decl/vv_set_handler/mob_see_in_dark_handler - handled_type = /mob - handled_vars = list("see_in_dark" = /mob/proc/set_see_in_dark) - predicates = list(/proc/is_num_predicate) - -/decl/vv_set_handler/mob_stat_handler - handled_type = /mob - handled_vars = list("set_stat" = /mob/proc/set_stat) - predicates = list(/proc/is_num_predicate) - -/decl/vv_set_handler/icon_state_handler - handled_type = /atom - handled_vars = list("icon_state" = /atom/proc/set_icon_state) - -/decl/vv_set_handler/invisibility_handler - handled_type = /atom - handled_vars = list("invisibility" = /atom/proc/set_invisibility) - predicates = list(/proc/is_num_predicate) - -/decl/vv_set_handler/name_handler - handled_type = /atom - handled_vars = list("name" = /atom/proc/SetName) - predicates = list(/proc/is_text_predicate) - -/decl/vv_set_handler/light_handler - handled_type = /atom - handled_vars = list("light_max_bright","light_inner_range","light_outer_range","light_falloff_curve") - -/decl/vv_set_handler/light_handler/handle_set_var(var/atom/A, variable, var_value, client) - var_value = text2num(var_value) - if(!is_num_predicate(var_value, client)) - return - // More sanity checks - - var/new_max = variable == "light_max_bright" ? var_value : A.light_max_bright - var/new_inner = variable == "light_inner_range" ? var_value : A.light_inner_range - var/new_outer = variable == "light_outer_range" ? var_value : A.light_outer_range - var/new_falloff = variable == "light_falloff_curve" ? var_value : A.light_falloff_curve - - A.set_light(new_max, new_inner, new_outer, new_falloff) - -/decl/vv_set_handler/health_value_handler - handled_type = /atom - handled_vars = list( - "health_max" = /atom/proc/set_max_health, - "health_current" = /atom/proc/set_health - ) - predicates = list(/proc/is_num_predicate) - -/decl/vv_set_handler/health_dead_handler - handled_type = /atom - handled_vars = list("health_dead") - predicates = list(/proc/is_strict_bool_predicate) - -/decl/vv_set_handler/health_dead_handler/handle_set_var(atom/target, variable, var_value, client) - if (var_value == target.health_dead) - return - switch (var_value) - if (TRUE) - target.kill_health() - if (FALSE) - target.revive_health() diff --git a/code/modules/ai/__readme.dm b/code/modules/ai/__readme.dm deleted file mode 100644 index cc2d4fa0251ad..0000000000000 --- a/code/modules/ai/__readme.dm +++ /dev/null @@ -1,201 +0,0 @@ -/* -[Summary] - -This module contains an AI implementation designed to be (at the base level) mobtype-agnostic, -by being held inside a datum instead of being written into the mob directly. More specialized -subtypes of the base AI may be designed with a specific mob type in mind, but the base system -should be compatible with most types of mobs which have the needed Interfaces in place to -support them. - -When designing a new mob, all that is needed to give a mob an AI is to set -its 'ai_holder' variable to the path of the AI that is desired. - - -[Seperation] - -In previous iterations of AI systems, the AI is generally written into the mob's code directly, -which has some advantages, but often makes the code rigid, and also tied the speed of the AI -to the mob's own ticker, meaning it could only decide every two seconds. - -Instead, this version has the code for the AI held inside an /datum/ai_holder object, -which is carried by the mob it controls. This gives some advantages; - All /mob/living mobs can potentially have an AI applied to them, and utilize the - same base code while adding specialized code on top. - - Interfaces allow the base AI code to not need to know what particular mode it's controlling. - - The processing of the AI is independant of the mob's Life() cycle, which allows for a - different clock rate. - - Seperating the AI from the mob simplies the mob's code greatly. - - It is more logical to think that a mob is the 'body', where as its ai_holder is - the 'mind'. - - AIs can be applied or disabled on the fly by instantiating or deleting the - ai_holder, if needed. - - -The current implementation also has some disadvantages, but they can perhaps be resolved -in the future. - AI-driven mob movement and attack speed is tied to half-second delays due to the - AI subsystem ticking at that rate. Porting the timer subsystem and integrating - callbacks into basic AI actions (moving, attacking) can potentially resolve that. - - It can be difficult to modify AI variables at mob instantiation without an ugly - delay, as the ai_holder might not exist yet. - - -[Flow of Processing] - -Terrible visual representation here; -AI Subsystem -> Every 0.5s -> /datum/ai_holder/handle_tactics() -> switch(stance)... - -> Every 2.0s -> /datum/ai_holder/handle_strategicals() -> switch(stance)... - -The AI datum is not processed by the mob itself, but instead it is directly processed -by a new AI subsystem. The AI subsystem contains a list of all active ai_holder -objects, which is iterated every tick to process each individual ai_holder -object attached to a mob. - -Each ai_holder actually has two 'tracks' for processing, a 'fast' track -and a 'slow' track. - -The fast track is named handle_tactics(), and is called every 0.5 seconds. - -The slow track is named handle_strategicals(), and is called every 2 seconds. - -When an ai_holder is iterated on inside the AI subsystem's list, it first -calls that ai_holder's handle_tactics(). It will then call that ai_holder's -handle_strategicals() every fourth tick, effectively doing so every two seconds. - -Both functions do different things depending on which 'stance' the -ai_holder is in. See the Stances section for more information. - -The fast track is for 'cheap' processing that needs to happen fast, such as -walking along a path, initiating an attack, or firing a gun. The rate that -it is called allows for the ai_holder to interact with the world through -its mob very often, giving a more convincing appearance of intelligence, -allowing for faster reaction times to certain events, and allowing for -variable attack speeds that would not be possible when bound to a -two second Life() cycle. - -The slow track, on the other hand, is for 'expensive' processing that might -be too demanding on the CPU to do every half a second, such as -re/calculating an A* path (if the mob uses A*), or running a complicated -tension assessment to determine how brave the mob is feeling. This is the -same delay used for certain tasks in the old implementation, but it is less -noticable due to the mob appearing to do things inbetween those two seconds. - -The purpose of having two tracks is to allow for 'fast' and 'slow' actions -to be more easily encapsulated, and ensures that all ai_holders are syncronized -with each other, as opposed to having individual tick counters inside all of -the ai_holder instances. It should be noted that handle_tactics() is always -called first, before handle_strategicals() every two seconds. - -[Process Skipping] - -An ai_holder object can choose to enter a 'busy' state, or a 'sleep' state, -in order to avoid processing. - -When busy, the AI subsystem will skip over the ai_holder until it is no -longer busy. The busy state is intended to be short-term, and is usually -toggled by the mob when doing something with a delay, so that the ai_holder -does not accidentally do something to inturrupt something important, like -a special attack. - -The longer term alternative to the busy state is the sleep state. Unlike -being busy, an ai_holder set to sleep will remove itself from the -AI subsystem's list, meaning it will no longer process until something -else 'wakes' it. This is usually done when the mob dies or a client -logs into an AI-controlled mob (and the AI is not set to ignore that, -with the autopilot variable). If the mob is revived, the AI will be -awakened automatically. - -The ai_holder functions, and mob functions that are called by the -ai_holder, should not be sleep()ed, as it will block the AI Subsystem -from processing the other ai_holders until the sleep() finishes. -Delays on the mob typically have set waitfor = FALSE, or spawn() is used. - - -[Stances] - -The AI has a large number of states that it can be in, called stances. -The AI will act in a specific way depending on which stance it is in, -and only one stance can be active at a time. This effectively creates -a state pattern. - -To change the stance, set_stance() is used, with the new stance as -the first argument. It should be noted that the change is not immediate, -and it will react to the change next tick instead of immediately switching -to the new stance and acting on that in the same tick. This is done to help -avoid infinite loops (I.E. Stance A switches to Stance B, which then -switches to Stance A, and so on...), and the delay is very short so -it should not be an issue. - -See code/__defines/mob.dm for a list of stance defines, and descriptions -about their purpose. Generally, each stance has its own file in the AI -module folder and are mostly self contained, however some files instead -deal with general things that other stances may require, such as targeting -or movement. - -[Interfaces] - -Interfaces are a concept that is used to help bridge the gap between -the ai_holder, and its mob. Because the (base) ai_holder is explicitly -designed to not be specific to any type of mob, all that it knows is -that it is controlling a /mob/living mob. Some mobs work very differently, -between mob types such as /mob/living/simple_animal, /mob/living/silicon/robot, -/mob/living/carbon/human, and more. - -The solution to the vast differences between mob types is to have the -mob itself deal with how to handle a specific task, such as attacking -something, talking, moving, etc. Interfaces exist to do this. - -Interfaces are applied on the mob-side, and are generally specific to -that mob type. This lets the ai_holder not have to worry about specific -implementations and instead just tell the Interface that it wants to attack -something, or move into a tile. The AI does not need to know if the mob its -controlling has hands, instead that is the mob's responsibility. - -Interface functions have an uppercase I at the start of the function name, -and then the function they are bridging between the AI and the mob -(if it exists), e.g. IMove(), IAttack(), ISay(). - -Interfaces are also used for the AI to ask its mob if it can do certain -things, without having to actually know what type of mob it is attached to. -For example, ICheckRangedAttack() tells the AI if it is possible to do a -ranged attack. For simple_mobs, they can if a ranged projectile type was set, -where as for a human mob, it could check if a gun is in a hand. For a borg, -it could check if a gun is inside their current module. - -[Say List] - -A /datum/say_list is a very light datum that holds a list of strings for the -AI to have their mob say based on certain conditions, such as when threatening -to kill another mob. Despite the name, a say_list also can contain emotes -and some sounds. - -The reason that it is in a seperate datum is to allow for multiple mob types -to have the same text, even when inheritence cannot do that, such as -mercenaries and fake piloted mecha mobs. - -The say_list datum is applied to the mob itself and not held inside the AI datum. - -[Subtypes] - -Some subtypes of ai_holder are more specialized, but remain compatible with -most mob types. There are many different subtypes that make the AI act different -by overriding a function, such as kiting their target, moving up close while -using ranged attacks, or running away if not cloaked. - -Other subtypes are very specific about what kind of mob it controls, and trying -to apply them to a different type of mob will likely result in a lot of bugs -or ASSERT() failures. The xenobio slime AI is an example of the latter. - -To use a specific subtype on a mob, all that is needed is setting the mob's -ai_holder to the subtype desired, and it will create that subtype when -the mob is initialize()d. Switching to a subtype 'live' will require additional -effort on the coder. - - -*/ diff --git a/code/modules/ai/_defines.dm b/code/modules/ai/_defines.dm deleted file mode 100644 index 7b49f18ddb2a8..0000000000000 --- a/code/modules/ai/_defines.dm +++ /dev/null @@ -1,34 +0,0 @@ -// Defines for the ai_intelligence var. -// Controls if the mob will do 'advanced tactics' like running from grenades. -#define AI_DUMB 1 // Be dumber than usual. -#define AI_NORMAL 2 // Default level. -#define AI_SMART 3 // Will do more processing to be a little smarter, like not walking while confused if it could risk stepping randomly onto a bad tile. - -#define ai_log(M,V) if(debug_ai) ai_log_output(M,V) - -// Logging level defines. -#define AI_LOG_OFF 0 // Don't show anything. -#define AI_LOG_ERROR 1 // Show logs of things likely causing the mob to not be functioning correctly. -#define AI_LOG_WARNING 2 // Show less serious but still helpful to know issues that might be causing things to work incorrectly. -#define AI_LOG_INFO 3 // Important regular events, like selecting a target or switching stances. -#define AI_LOG_DEBUG 4 // More detailed information about the flow of execution. -#define AI_LOG_TRACE 5 // Even more detailed than the last. Will absolutely flood your chatlog. - -// Results of pre-movement checks. -// Todo: Move outside AI code? -#define MOVEMENT_ON_COOLDOWN -1 // Recently moved and needs to try again soon. -#define MOVEMENT_FAILED 0 // Move() returned false for whatever reason and the mob didn't move. -#define MOVEMENT_SUCCESSFUL 1 // Move() returned true and the mob hopefully moved. - -// Results of pre-attack checks -#define ATTACK_ON_COOLDOWN -1 // Recently attacked and needs to try again soon. -#define ATTACK_FAILED 0 // Something else went wrong! Maybe they moved away! -#define ATTACK_SUCCESSFUL 1 // We attacked (or tried to, misses count too) - -// Reasons for targets to not be valid. Based on why, the AI responds differently. -#define AI_TARGET_VALID 0 // We can fight them. -#define AI_TARGET_INVIS 1 // They were in field of view but became invisible. Switch to STANCE_BLINDFIGHT if no other viable targets exist. -#define AI_TARGET_NOSIGHT 2 // No longer in field of view. Go STANCE_REPOSITION to their last known location if no other targets are seen. -#define AI_TARGET_ALLY 3 // They are an ally. Find a new target. -#define AI_TARGET_DEAD 4 // They're dead. Find a new target. -#define AI_TARGET_INVINCIBLE 5 // Target is currently unable to receive damage for whatever reason. Find a new target or wait. diff --git a/code/modules/ai/aI_holder_subtypes/simple_mob_ai.dm b/code/modules/ai/aI_holder_subtypes/simple_mob_ai.dm deleted file mode 100644 index a4340e28949cf..0000000000000 --- a/code/modules/ai/aI_holder_subtypes/simple_mob_ai.dm +++ /dev/null @@ -1,189 +0,0 @@ -// Base AIs for simple mobs. -// Mob-specific AIs are in their mob's file. - -/datum/ai_holder/simple_animal - hostile = TRUE // The majority of simplemobs are hostile. - retaliate = TRUE // The majority of simplemobs will fight back. - cooperative = TRUE - returns_home = FALSE - can_flee = FALSE - speak_chance = 1 // If the mob's saylist is empty, nothing will happen. - wander = TRUE - base_wander_delay = 4 - -// For non-hostile animals, and pets like Ian and Runtime. -/datum/ai_holder/simple_animal/passive - hostile = FALSE - retaliate = FALSE - can_flee = TRUE - violent_breakthrough = FALSE - -// Won't wander away as quickly, ideal for event-spawned mobs like carp or drones. -/datum/ai_holder/simple_animal/event - base_wander_delay = 8 - -// Will keep the mob within a limited radius of its home, useful for guarding an area -/datum/ai_holder/simple_animal/guard - returns_home = TRUE - -// Won't return home while it's busy doing something else, like chasing a player -/datum/ai_holder/simple_animal/guard/give_chase - home_low_priority = TRUE - -// Doesn't really act until told to by something on the outside. -/datum/ai_holder/simple_animal/inert - hostile = FALSE - retaliate = FALSE - can_flee = FALSE - wander = FALSE - speak_chance = 0 - cooperative = FALSE - violent_breakthrough = FALSE // So it can open doors but not attack windows and shatter the literal illusion. - -/datum/ai_holder/simple_animal/stationary - wander = FALSE -// Ranged mobs. - -/datum/ai_holder/simple_animal/ranged - -// Tries to not waste ammo. -/datum/ai_holder/simple_animal/ranged/careful - conserve_ammo = TRUE - -/datum/ai_holder/simple_animal/ranged/pointblank - pointblank = TRUE - -// Runs away from its target if within a certain distance. -/datum/ai_holder/simple_animal/ranged/kiting - pointblank = TRUE // So we don't need to copypaste post_melee_attack(). - /// If anything gets within this range, it'll try to move away. - var/run_if_this_close = 4 - /// If true, mob turns to face the target while kiting, otherwise they turn in the direction they moved towards. - var/moonwalk = TRUE - -/datum/ai_holder/simple_animal/ranged/kiting/threatening - threaten = TRUE - threaten_delay = 1 SECOND // Less of a threat and more of pre-attack notice. - threaten_timeout = 30 SECONDS - conserve_ammo = TRUE - -// For event-spawned malf drones. -/datum/ai_holder/simple_animal/ranged/kiting/threatening/event - base_wander_delay = 8 - -/datum/ai_holder/simple_animal/ranged/kiting/no_moonwalk - moonwalk = FALSE - -/datum/ai_holder/simple_animal/ranged/kiting/on_engagement(atom/A) - if(get_dist(holder, A) < run_if_this_close) - holder.IMove(get_step_away(holder, A, run_if_this_close)) - if(moonwalk) - holder.face_atom(A) - -// Closes distance from the target even while in range. -/datum/ai_holder/simple_animal/ranged/aggressive - pointblank = TRUE - /// How close to get to the target. By default they will get into melee range (and then pointblank them). - var/closest_distance = 1 - -/datum/ai_holder/simple_animal/ranged/aggressive/on_engagement(atom/A) - if(get_dist(holder, A) > closest_distance) - holder.IMove(get_step_towards(holder, A)) - holder.face_atom(A) - -// Yakkity saxes while firing at you. -/datum/ai_holder/hostile/ranged/robust/on_engagement(atom/movable/AM) - step_rand(holder) - holder.face_atom(AM) - -// Switches intents based on specific criteria. -// Used for special mobs who do different things based on intents (and aren't slimes). -// Intent switching is generally done in pre_[ranged/special]_attack(), so that the mob can use the right attack for the right time. -/datum/ai_holder/simple_animal/intentional - - -// These try to avoid collateral damage. -/datum/ai_holder/simple_animal/restrained - violent_breakthrough = FALSE - conserve_ammo = TRUE - destructive = FALSE - -// This does the opposite of the above subtype. -/datum/ai_holder/simple_animal/destructive - destructive = TRUE - -// Melee mobs. - -/datum/ai_holder/simple_animal/melee - -// Dances around the enemy its fighting, making it harder to fight back. -/datum/ai_holder/simple_animal/melee/evasive - -/datum/ai_holder/simple_animal/melee/evasive/post_melee_attack(atom/A) - if(holder.Adjacent(A)) - holder.IMove(get_step(holder, pick(GLOB.alldirs))) - holder.face_atom(A) - - - -// This AI hits something, then runs away for awhile. -// It will (almost) always flee if they are uncloaked, AND their target is not stunned. -/datum/ai_holder/simple_animal/melee/hit_and_run - can_flee = TRUE - -// Used for the 'running' part of hit and run. -/datum/ai_holder/simple_animal/melee/hit_and_run/special_flee_check() - if(!holder.is_cloaked()) - if(isliving(target)) - var/mob/living/L = target - return !L.incapacitated(INCAPACITATION_DISABLED) // Don't flee if our target is stunned in some form, even if uncloaked. This is so the mob keeps attacking a stunned opponent. - return TRUE // We're out in the open, uncloaked, and our target isn't stunned, so lets flee. - return FALSE - - -// Simple mobs that aren't hostile, but will fight back. -/datum/ai_holder/simple_animal/retaliate - hostile = FALSE - retaliate = TRUE - -// Simple mobs that retaliate and support others in their faction who get attacked. -/datum/ai_holder/simple_animal/retaliate/cooperative - cooperative = TRUE - -// With all the bells and whistles -/datum/ai_holder/simple_animal/humanoid - intelligence_level = AI_SMART //Purportedly - retaliate = TRUE //If attacked, attack back - threaten = TRUE //Verbal threats - firing_lanes = TRUE //Avoid shooting allies - conserve_ammo = TRUE //Don't shoot when it can't hit target - can_breakthrough = TRUE //Can break through doors - violent_breakthrough = FALSE //Won't try to break through walls (humans can, but usually don't) - speak_chance = 2 //Babble chance - cooperative = TRUE //Assist each other - wander = TRUE //Wander around - returns_home = TRUE //But not too far - use_astar = TRUE //Path smartly - home_low_priority = TRUE //Following/helping is more important - -// The hostile subtype is implied to be trained combatants who use ""tactics"" -/datum/ai_holder/simple_animal/humanoid/hostile - /// If anything gets within this range, it'll try to move away. - var/run_if_this_close = 4 - hostile = TRUE //Attack! - -// Juke -/datum/ai_holder/simple_animal/humanoid/hostile/post_melee_attack(atom/A) - holder.IMove(get_step(holder, pick(GLOB.alldirs))) - holder.face_atom(A) - -/datum/ai_holder/simple_animal/humanoid/hostile/post_ranged_attack(atom/A) - //Pick a random turf to step into - var/turf/T = get_step(holder, pick(GLOB.alldirs)) - if(check_trajectory(A, T)) // Can we even hit them from there? - holder.IMove(T) - holder.face_atom(A) - - if(get_dist(holder, A) < run_if_this_close) - holder.IMove(get_step_away(holder, A)) - holder.face_atom(A) diff --git a/code/modules/ai/ai_holder.dm b/code/modules/ai/ai_holder.dm deleted file mode 100644 index ecbfdd16feda6..0000000000000 --- a/code/modules/ai/ai_holder.dm +++ /dev/null @@ -1,392 +0,0 @@ -#define AI_NO_PROCESS 0 -#define AI_PROCESSING FLAG(0) -#define AI_FASTPROCESSING FLAG(1) - - -#define START_AIPROCESSING(datum) \ -if (!(datum.process_flags & AI_PROCESSING)) { \ - datum.process_flags |= AI_PROCESSING; \ - SSai.active += datum \ -} - - -#define STOP_AIPROCESSING(datum) \ - datum.process_flags &= ~AI_PROCESSING; \ - SSai.active -= datum - - -#define START_AIFASTPROCESSING(datum) \ -if (!(datum.process_flags & AI_FASTPROCESSING)) { \ - datum.process_flags |= AI_FASTPROCESSING; \ - SSaifast.active += datum \ -} - - -#define STOP_AIFASTPROCESSING(datum) \ - datum.process_flags &= ~AI_FASTPROCESSING; \ - SSaifast.active -= datum - - -/mob/living - var/datum/ai_holder/ai_holder - var/image/ai_status_image - var/recoil = 0 //What our current recoil level is - var/recoil_reduction_timer - - - -/mob/living/Initialize() - . = ..() - if (ispath(ai_holder)) - ai_holder = new ai_holder (src) - if (ishuman(src)) - InitializeHud() - ai_status_image = image('icons/misc/buildmode.dmi', src, "ai_0") //:anguish: - - -/mob/living/Destroy() - if (ai_holder) - GLOB.stat_set_event.unregister(src, ai_holder, /datum/ai_holder/proc/holder_stat_change) - QDEL_NULL(ai_holder) - return ..() - - -/mob/living/Login() - if (!stat && ai_holder) - ai_holder.manage_processing(AI_NO_PROCESS) - return ..() - -/mob/living/Logout() - if (!stat && !key && ai_holder) - ai_holder.manage_processing(AI_PROCESSING) - return ..() - -/datum/ai_holder - /// The mob this datum is going to control. - var/mob/living/simple_animal/holder = null - /// Determines if the mob should be doing a specific thing, e.g. attacking, following, standing around, etc. - var/stance = STANCE_IDLE - /// Adjust to make the AI be intentionally dumber, or make it more robust (e.g. dodging grenades). - var/intelligence_level = AI_NORMAL - /// If true, the AI won't be deactivated if a client gets attached to the AI's mob. - var/autopilot = FALSE - /** - * If true, the ticker will skip processing this mob until this is false. Good for if you need the - * mob to stay still (e.g. delayed attacking). If you need the mob to be inactive for an extended period of time, - * consider sleeping the AI instead. - */ - var/busy = FALSE - /// Where we're processing, see flag defines. - var/process_flags = 0 - /// A list used in mass-editing of AI datums, holding a snapshot of the 'before' state - var/list/snapshot = null - var/static/list/fastprocess_stances = list( - STANCE_ALERT, - STANCE_APPROACH, - STANCE_FIGHT, - STANCE_BLINDFIGHT, - STANCE_REPOSITION, - STANCE_MOVE, - STANCE_FOLLOW, - STANCE_FLEE, - STANCE_DISABLED - ) - var/static/list/noprocess_stances = list( - STANCE_SLEEP - ) - - -/datum/ai_holder/hostile - hostile = TRUE - -/datum/ai_holder/retaliate - hostile = TRUE - retaliate = TRUE - -/datum/ai_holder/New(new_holder) - ASSERT(new_holder) - holder = new_holder - home_turf = get_turf(holder) - manage_processing(AI_PROCESSING) - GLOB.stat_set_event.register(holder, src, .proc/holder_stat_change) - ..() - -/datum/ai_holder/Destroy() - holder = null - manage_processing(AI_NO_PROCESS) - home_turf = null - return ..() - -/datum/ai_holder/proc/manage_processing(desired) - if (desired & AI_PROCESSING) - START_AIPROCESSING(src) - else - STOP_AIPROCESSING(src) - - if (desired & AI_FASTPROCESSING) - START_AIFASTPROCESSING(src) - else - STOP_AIFASTPROCESSING(src) - -/datum/ai_holder/proc/holder_stat_change(mob, old_stat, new_stat) - if (old_stat >= DEAD && new_stat <= DEAD) //Revived - manage_processing(AI_PROCESSING) - else if (old_stat <= DEAD && new_stat >= DEAD) //Killed - manage_processing(AI_NO_PROCESS) - -// Now for the actual AI stuff. -/datum/ai_holder/proc/set_busy(value = FALSE) - busy = value - -/// Set the AI as 'busy' for a specific length of time. -/datum/ai_holder/proc/set_busy_delay(time) - set_busy(TRUE) - addtimer(CALLBACK(src, .proc/set_busy, FALSE), time) - -/** - * Makes this ai holder not get processed. - * Called automatically when the host mob is killed. - * Potential future optimization would be to sleep AIs which mobs that are far away from in-round players. - */ -/datum/ai_holder/proc/go_sleep() - if (stance == STANCE_SLEEP) - return - forget_everything() // If we ever wake up, its really unlikely that our current memory will be of use. - set_stance(STANCE_SLEEP) - -/** - * Reverses the `go_sleep()` proc. - * Revived mobs will wake their AI if they have one. - */ -/datum/ai_holder/proc/go_wake() - if (stance != STANCE_SLEEP) - return - if (!should_wake()) - return - set_stance(STANCE_IDLE) - -/datum/ai_holder/proc/should_wake() - if (holder.client && !autopilot) - return FALSE - if (holder.stat >= DEAD) - return FALSE - return TRUE - -/// Resets a lot of 'memory' vars. -/datum/ai_holder/proc/forget_everything() - // Some of these might be redundant, but hopefully this prevents future bugs if that changes. - lose_follow() - remove_target() - -/// 'Tactical' processes such as moving a step, meleeing an enemy, firing a projectile, and other fairly cheap actions that need to happen quickly. -/datum/ai_holder/proc/handle_tactics() - if (holder.key && !autopilot) - return - handle_special_tactic() - handle_stance_tactical() - -/// 'Strategical' processes that are more expensive on the CPU and so don't get run as often as the above proc, such as A* pathfinding or robust targeting. -/datum/ai_holder/proc/handle_strategicals() - if (holder.key && !autopilot) - return - handle_special_strategical() - handle_stance_strategical() - -/// Override this for special things without polluting the main `handle_tactics()` loop. -/datum/ai_holder/proc/handle_special_tactic() - -/// Override this for special things without polluting the main `handle_strategicals()` loop. -/datum/ai_holder/proc/handle_special_strategical() - -/// For setting the stance WITHOUT processing it -/datum/ai_holder/proc/set_stance(new_stance) - if (holder.key && !autopilot) - return - if (stance == new_stance) - ai_log("set_stance() : Ignoring change stance to same stance request.", AI_LOG_INFO) - return - - ai_log("set_stance() : Setting stance from [stance] to [new_stance].", AI_LOG_INFO) - stance = new_stance - if (stance_coloring) // For debugging or really weird mobs. - stance_color() - // update_stance_hud() - - if (new_stance in fastprocess_stances) //Becoming fast - manage_processing(AI_PROCESSING|AI_FASTPROCESSING) - else if (new_stance in noprocess_stances) - manage_processing(AI_NO_PROCESS) //Becoming off - else - manage_processing(AI_PROCESSING) //Becoming slow - -/// This is called every half a second. -/datum/ai_holder/proc/handle_stance_tactical() - ai_log("========= Fast Process Beginning ==========", AI_LOG_TRACE) // This is to make it easier visually to disinguish between 'blocks' of what a tick did. - ai_log("handle_stance_tactical() : Called.", AI_LOG_TRACE) - - if (stance == STANCE_SLEEP) - ai_log("handle_stance_tactical() : Going to sleep.", AI_LOG_TRACE) - go_sleep() - return - - if (target && can_see_target(target)) - track_target_position() - - if (stance != STANCE_DISABLED && is_disabled()) // Stunned/confused/etc - ai_log("handle_stance_tactical() : Disabled.", AI_LOG_TRACE) - set_stance(STANCE_DISABLED) - return - - if (stance in STANCES_COMBAT) - // Should resist? We check this before fleeing so that we can actually flee and not be trapped in a chair. - if (holder.incapacitated(INCAPACITATION_BUCKLED_PARTIALLY)) - ai_log("handle_stance_tactical() : Going to handle_resist().", AI_LOG_TRACE) - handle_resist() - - else if (istype(holder.loc, /obj/structure/closet)) - var/obj/structure/closet/C = holder.loc - ai_log("handle_stance_tactical() : Inside a closet. Going to attempt escape.", AI_LOG_TRACE) - if (C.welded) - holder.resist() - else - C.open() - - // Should we flee? - if (should_flee()) - ai_log("handle_stance_tactical() : Going to flee.", AI_LOG_TRACE) - set_stance(STANCE_FLEE) - return - - switch(stance) - if (STANCE_ALERT) - ai_log("handle_stance_tactical() : STANCE_ALERT, going to threaten_target().", AI_LOG_TRACE) - threaten_target() - - if (STANCE_APPROACH) - ai_log("handle_stance_tactical() : STANCE_APPROACH, going to walk_to_target().", AI_LOG_TRACE) - walk_to_target() - - if (STANCE_FIGHT) - ai_log("handle_stance_tactical() : STANCE_FIGHT, going to engage_target().", AI_LOG_TRACE) - engage_target() - - if (STANCE_MOVE) - ai_log("handle_stance_tactical() : STANCE_MOVE, going to walk_to_destination().", AI_LOG_TRACE) - walk_to_destination() - - if (STANCE_REPOSITION) // This is the same as above but doesn't stop if an enemy is visible since its an 'in-combat' move order. - ai_log("handle_stance_tactical() : STANCE_REPOSITION, going to walk_to_destination().", AI_LOG_TRACE) - if (!target && !find_target()) - walk_to_destination() - - if (STANCE_FOLLOW) - ai_log("handle_stance_tactical() : STANCE_FOLLOW, going to walk_to_leader().", AI_LOG_TRACE) - walk_to_leader() - - if (STANCE_FLEE) - ai_log("handle_stance_tactical() : STANCE_FLEE, going to flee_from_target().", AI_LOG_TRACE) - flee_from_target() - - if (STANCE_DISABLED) - ai_log("handle_stance_tactical() : STANCE_DISABLED.", AI_LOG_TRACE) - if (!is_disabled()) - ai_log("handle_stance_tactical() : No longer disabled.", AI_LOG_TRACE) - set_stance(STANCE_IDLE) - else - handle_disabled() - - ai_log("handle_stance_tactical() : Exiting.", AI_LOG_TRACE) - ai_log("========= Fast Process Ending ==========", AI_LOG_TRACE) - -/// This is called every two seconds. -/datum/ai_holder/proc/handle_stance_strategical() - ai_log("++++++++++ Slow Process Beginning ++++++++++", AI_LOG_TRACE) - ai_log("handle_stance_strategical() : Called.", AI_LOG_TRACE) - - //We got left around for some reason. Goodbye cruel world. - if (!holder) - qdel(src) - - ai_log("handle_stance_strategical() : LTT=[lose_target_time]", AI_LOG_TRACE) - if (lose_target_time && (lose_target_time + lose_target_timeout < world.time)) // We were tracking an enemy but they are gone. - ai_log("handle_stance_strategical() : Giving up a chase.", AI_LOG_DEBUG) - remove_target() - - if (stance in STANCES_COMBAT) - request_help() // Call our allies. - - switch(stance) - if (STANCE_IDLE) - if (speak_chance) // In the long loop since otherwise it wont shut up. - handle_idle_speaking() - - if (hostile) - ai_log("handle_stance_strategical() : STANCE_IDLE, going to find_target().", AI_LOG_TRACE) - find_target() - - if (should_go_home()) - ai_log("handle_stance_tactical() : STANCE_IDLE, going to go home.", AI_LOG_TRACE) - go_home() - - else if (should_follow_leader()) - ai_log("handle_stance_tactical() : STANCE_IDLE, going to follow leader.", AI_LOG_TRACE) - set_stance(STANCE_FOLLOW) - - else if (should_wander()) - ai_log("handle_stance_tactical() : STANCE_IDLE, going to wander randomly.", AI_LOG_TRACE) - handle_wander_movement() - - if (STANCE_APPROACH) - if (target) - ai_log("handle_stance_strategical() : STANCE_APPROACH, going to calculate_path([target]).", AI_LOG_TRACE) - calculate_path(target) - walk_to_target() - if (STANCE_MOVE) - if (hostile && find_target()) // This will switch its stance. - ai_log("handle_stance_strategical() : STANCE_MOVE, found target and was inturrupted.", AI_LOG_TRACE) - if (STANCE_FOLLOW) - if (hostile && find_target()) // This will switch its stance. - ai_log("handle_stance_strategical() : STANCE_FOLLOW, found target and was inturrupted.", AI_LOG_TRACE) - else if (leader) - ai_log("handle_stance_strategical() : STANCE_FOLLOW, going to calculate_path([leader]).", AI_LOG_TRACE) - calculate_path(leader) - walk_to_leader() - - ai_log("handle_stance_strategical() : Exiting.", AI_LOG_TRACE) - ai_log("++++++++++ Slow Process Ending ++++++++++", AI_LOG_TRACE) - - -/// Helper proc to turn AI 'busy' mode on or off without having to check if there is an AI, to simplify writing code. -/mob/living/proc/set_AI_busy(value) - if (ai_holder) - ai_holder.set_busy(value) - -///Set an AI's busy status. Stops the mob from performing any actions while true. -/mob/living/proc/is_AI_busy() - if (!ai_holder) - return FALSE - return ai_holder.busy - -/** - * Helper proc to check for the AI's stance. - * Returns null if there's no AI holder, or the mob has a player and autopilot is not on. - * Otherwise returns the stance. - */ -/mob/living/proc/get_AI_stance() - if (!ai_holder) - return null - if (client && !ai_holder.autopilot) - return null - return ai_holder.stance - -/// Similar to `get_ai_stance()` but only returns 1 or 0. -/mob/living/proc/has_AI() - return get_AI_stance() ? TRUE : FALSE - -/// 'Taunts' the AI into attacking the taunter. -/mob/living/proc/taunt(atom/movable/taunter, force_target_switch = FALSE) - if (ai_holder) - ai_holder.receive_taunt(taunter, force_target_switch) - -#undef AI_PROCESSING -#undef AI_FASTPROCESSING diff --git a/code/modules/ai/ai_holder_combat.dm b/code/modules/ai/ai_holder_combat.dm deleted file mode 100644 index 35ab2340bdbac..0000000000000 --- a/code/modules/ai/ai_holder_combat.dm +++ /dev/null @@ -1,323 +0,0 @@ -// This file is for actual fighting. Targeting is in a seperate file. - -/datum/ai_holder - var/firing_lanes = TRUE // If true, tries to refrain from shooting allies or the wall. - var/conserve_ammo = FALSE // If true, the mob will avoid shooting anything that does not have a chance to hit a mob. Requires firing_lanes to be true. - var/pointblank = FALSE // If ranged is true, and this is true, people adjacent to the mob will suffer the ranged instead of using a melee attack. - - var/can_breakthrough = TRUE // If false, the AI will not try to open a path to its goal, like opening doors. - var/violent_breakthrough = TRUE // If false, the AI is not allowed to destroy things like windows or other structures in the way. Requires above var to be true. - - var/stand_ground = FALSE // If true, the AI won't try to get closer to an enemy if out of range. - - var/prying = FALSE // True when the mob is trying to force open a door. - - var/list/valid_obstacles_by_priority = list(/obj/structure/window, - /obj/structure/closet, - /obj/machinery/door/window, - /obj/structure/table, - /obj/structure/grille, - /obj/structure/barricade, - /obj/structure/wall_frame, - /obj/structure/railing) - -// This does the actual attacking. -/datum/ai_holder/proc/engage_target() - ai_log("engage_target() : Entering.", AI_LOG_DEBUG) - - // Can we still see them? - if (!target || !can_attack(target)) - ai_log("engage_target() : Lost sight of target.", AI_LOG_TRACE) - if (lose_target()) // We lost them (returns TRUE if we found something else to do) - ai_log("engage_target() : Pursuing other options (last seen, or a new target).", AI_LOG_TRACE) - return - - var/distance = get_dist(holder, target) - ai_log("engage_target() : Distance to target ([target]) is [distance].", AI_LOG_TRACE) - holder.face_atom(target) - last_conflict_time = world.time - - // Do a 'special' attack, if one is allowed. - if (holder.ICheckSpecialAttack(target)) - ai_log("engage_target() : Attempting a special attack.", AI_LOG_TRACE) - on_engagement(target) - if (special_attack(target)) // If this fails, then we try a regular melee/ranged attack. - ai_log("engage_target() : Successful special attack. Exiting.", AI_LOG_DEBUG) - return - - // Stab them. - else if (distance <= 1 && !pointblank) - ai_log("engage_target() : Attempting a melee attack.", AI_LOG_TRACE) - on_engagement(target) - melee_attack(target) - - else if (distance <= 1 && !holder.ICheckRangedAttack(target)) // Doesn't have projectile, but is pointblank - ai_log("engage_target() : Attempting a melee attack.", AI_LOG_TRACE) - on_engagement(target) - melee_attack(target) - - // Shoot them. - else if (holder.ICheckRangedAttack(target) && (distance <= max_range(target)) ) - on_engagement(target) - if (firing_lanes && !test_projectile_safety(target)) - // Nudge them a bit, maybe they can shoot next time. - var/turf/T = get_step(holder, pick(GLOB.cardinal)) - if (T) - holder.IMove(get_step_towards(holder, T)) // IMove() will respect movement cooldown. - holder.face_atom(target) - ai_log("engage_target() : Could not safely fire at target. Exiting.", AI_LOG_DEBUG) - return - - ai_log("engage_target() : Attempting a ranged attack.", AI_LOG_TRACE) - ranged_attack(target) - - // Run after them. - else if (!stand_ground) - ai_log("engage_target() : Target ([target]) too far away. Exiting.", AI_LOG_DEBUG) - set_stance(STANCE_APPROACH) - -// We're not entirely sure how holder will do melee attacks since any /mob/living could be holder, but we don't have to care because Interfaces. -/datum/ai_holder/proc/melee_attack(atom/A) - pre_melee_attack(A) - . = holder.IAttack(A) - if (. == ATTACK_SUCCESSFUL) - post_melee_attack(A) - -// Ditto. -/datum/ai_holder/proc/ranged_attack(atom/A) - pre_ranged_attack(A) - . = holder.IRangedAttack(A) - if (. == ATTACK_SUCCESSFUL) - post_ranged_attack(A) - -// Most mobs probably won't have this defined but we don't care. -/datum/ai_holder/proc/special_attack(atom/movable/AM) - pre_special_attack(AM) - . = holder.ISpecialAttack(AM) - if (. == ATTACK_SUCCESSFUL) - post_special_attack(AM) - -// Called when within striking/shooting distance, however cooldown is not considered. -// Override to do things like move in a random step for evasiveness. -// Note that this is called BEFORE the attack. -/datum/ai_holder/proc/on_engagement(atom/A) - -// Called before a ranged attack is attempted. -/datum/ai_holder/proc/pre_ranged_attack(atom/A) - -// Called before a melee attack is attempted. -/datum/ai_holder/proc/pre_melee_attack(atom/A) - -// Called before a 'special' attack is attempted. -/datum/ai_holder/proc/pre_special_attack(atom/A) - -// Called after a successful (IE not on cooldown) ranged attack. -// Note that this is not whether the projectile actually hit, just that one was launched. -/datum/ai_holder/proc/post_ranged_attack(atom/A) - -// Ditto but for melee. -/datum/ai_holder/proc/post_melee_attack(atom/A) - -// And one more for special snowflake attacks. -/datum/ai_holder/proc/post_special_attack(atom/A) - -// Used to make sure projectiles will probably hit the target and not the wall or a friend. -/datum/ai_holder/proc/test_projectile_safety(atom/movable/AM) - ai_log("test_projectile_safety([AM]) : Entering.", AI_LOG_TRACE) - - // If they're right next to us then lets just say yes. check_trajectory() tends to spaz out otherwise. - if (holder.Adjacent(AM)) - ai_log("test_projectile_safety() : Adjacent to target. Exiting with TRUE.", AI_LOG_TRACE) - return TRUE - - // This will hold a list of all mobs in a line, even those behind the target, and possibly the wall. - // By default the test projectile goes through things like glass and grilles, which is desirable as otherwise the AI won't try to shoot through windows. - var/hit_thing = check_trajectory(AM, holder) // This isn't always reliable but its better than the previous method. - - // Test to see if the primary target actually has a chance to get hit. - // We'll fire anyways if not, if we have conserve_ammo turned off. - var/would_hit_primary_target = FALSE - if (hit_thing == AM) - would_hit_primary_target = TRUE - ai_log("test_projectile_safety() : Test projectile did[!would_hit_primary_target ? " NOT " : " "]hit \the [AM]", AI_LOG_DEBUG) - - // Make sure we don't have a chance to shoot our friends. - var/atom/A = hit_thing - ai_log("test_projectile_safety() : Evaluating \the [A] ([A.type]).", AI_LOG_TRACE) - if (isliving(A)) // Don't shoot at our friends, even if they're behind the target, as RNG can make them get hit. - var/mob/living/L = A - if (holder.IIsAlly(L)) - ai_log("test_projectile_safety() : Would threaten ally, exiting with FALSE.", AI_LOG_DEBUG) - return FALSE - - // Don't fire if we cannot hit the primary target, and we wish to be conservative with our projectiles. - // We make an exception for turf targets because manual commanded AIs targeting the floor are generally intending to fire blindly. - if (!would_hit_primary_target && !isturf(AM) && conserve_ammo) - ai_log("test_projectile_safety() : conserve_ammo is set, and test projectile failed to hit primary target. Exiting with FALSE.", AI_LOG_DEBUG) - return FALSE - - ai_log("test_projectile_safety() : Passed other tests, exiting with TRUE.", AI_LOG_TRACE) - return TRUE - -// Test if we are within range to attempt an attack, melee or ranged. -/datum/ai_holder/proc/within_range(atom/movable/AM) - var/distance = get_dist(holder, AM) - if (distance <= 1) - return TRUE // Can melee. - else if (holder.ICheckRangedAttack(AM) && distance <= max_range(AM)) - return TRUE // Can shoot. - return FALSE - -// Determines how close the AI will move to its target. -/datum/ai_holder/proc/closest_distance(atom/movable/AM) - return max(max_range(AM) - 1, 1) // Max range -1 just because we don't want to constantly get kited - -// Can be used to conditionally do a ranged or melee attack. -/datum/ai_holder/proc/max_range(atom/movable/AM) - return holder.ICheckRangedAttack(AM) ? 7 : 1 - -// Goes to the target, to attack them. -// Called when in STANCE_APPROACH. -/datum/ai_holder/proc/walk_to_target() - ai_log("walk_to_target() : Entering.", AI_LOG_DEBUG) - // Make sure we can still chase/attack them. - if (!target || !can_attack(target)) - ai_log("walk_to_target() : Lost target.", AI_LOG_INFO) - lose_target() - return - - // Find out where we're going. - var/get_to = closest_distance(target) - var/distance = get_dist(holder, target) - ai_log("walk_to_target() : get_to is [get_to].", AI_LOG_TRACE) - - // We're here! - // Special case: Our holder has a special attack that is ranged, but normally the holder uses melee. - // If that happens, we'll switch to STANCE_FIGHT so they can use it. If the special attack is limited, they'll likely switch back next tick. - if (distance <= get_to || holder.ICheckSpecialAttack(target)) - ai_log("walk_to_target() : Within range.", AI_LOG_INFO) - forget_path() - set_stance(STANCE_FIGHT) - ai_log("walk_to_target() : Exiting.", AI_LOG_DEBUG) - return - - // Otherwise keep walking. - if (!stand_ground) - walk_path(target, get_to) - - ai_log("walk_to_target() : Exiting.", AI_LOG_DEBUG) - -// Resists out of things. -// Sometimes there are times you want your mob to be buckled to something, so override this for when that is needed. -/datum/ai_holder/proc/handle_resist() - holder.resist() - -// Used to break through windows and barriers to a target on the other side. -// This does two passes, so that if its just a public access door, the windows nearby don't need to be smashed. -/datum/ai_holder/proc/breakthrough(atom/target_atom) - ai_log("breakthrough() : Entering", AI_LOG_TRACE) - - if (!can_breakthrough) - ai_log("breakthrough() : Not allowed to breakthrough. Exiting.", AI_LOG_TRACE) - return FALSE - - if (!isturf(holder.loc)) - ai_log("breakthrough() : Trapped inside \the [holder.loc]. Exiting.", AI_LOG_TRACE) - return FALSE - - var/dir_to_target = get_dir(holder, target_atom) - holder.face_atom(target_atom) - - // Sometimes the mob will try to hit something diagonally, and generally this fails. - // So instead we will try two more times with some adjustments if the attack fails. - var/list/directions_to_try = list( - dir_to_target, - turn(dir_to_target, 45), - turn(dir_to_target, -45) - ) - - ai_log("breakthrough() : Starting peaceful pass.", AI_LOG_DEBUG) - - var/result = FALSE - - // First, we will try to peacefully make a path, I.E opening a door we have access to. - for(var/direction in directions_to_try) - result = destroy_surroundings(direction, violent = FALSE) - if (result) - break - - // Alright, lets smash some shit instead, if it didn't work and we're allowed to be violent. - if (!result && can_violently_breakthrough()) - ai_log("breakthrough() : Starting violent pass.", AI_LOG_DEBUG) - for(var/direction in directions_to_try) - result = destroy_surroundings(direction, violent = TRUE) - if (result) - break - - ai_log("breakthrough() : Exiting with [result].", AI_LOG_TRACE) - return result - -// Despite the name, this can also be used to help clear a path without any destruction. -/datum/ai_holder/proc/destroy_surroundings(direction, violent = TRUE) - ai_log("destroy_surroundings() : Entering.", AI_LOG_TRACE) - if (!direction) - direction = pick(GLOB.cardinal) // FLAIL WILDLY - ai_log("destroy_surroundings() : No direction given, picked [direction] randomly.", AI_LOG_DEBUG) - - var/turf/problem_turf = get_step(holder, direction) - - // First, give peace a chance. - if (!violent) - ai_log("destroy_surroundings() : Going to try to peacefully clear [problem_turf].", AI_LOG_DEBUG) - for(var/obj/machinery/door/D in problem_turf) - if (D.density && holder.Adjacent(D)) - - //Try to open the door if we're allowed too. - if (D.allowed(holder) && D.operable()) - // First, try to open the door if possible without smashing it. We might have access. - ai_log("destroy_surroundings() : Opening closed door.", AI_LOG_INFO) - return D.Bumped(holder) - - //Try to force the door if its broken/has no power - if (!prying && holder.can_pry && !D.operable()) - prying = TRUE - var/pry_time_holder = (D.pry_mod * holder.pry_time) - holder.pry_door(holder, pry_time_holder, D) - - // Peace has failed us, can we just smash the things in the way? - else - ai_log("destroy_surroundings() : Going to try to violently clear [problem_turf].", AI_LOG_DEBUG) - // First, kill windows in the way. - for(var/obj/structure/window/W in problem_turf) - if (W.dir == GLOB.reverse_dir[holder.dir]) // So that windows get smashed in the right order - ai_log("destroy_surroundings() : Attacking side window.", AI_LOG_INFO) - return melee_attack(W) - - else if (W.is_fulltile()) - ai_log("destroy_surroundings() : Attacking full tile window.", AI_LOG_INFO) - return melee_attack(W) - - // Kill hull shields in the way. - for(var/obj/effect/energy_field/shield in problem_turf) - if (shield.density) // Don't attack shields that are already down. - ai_log("destroy_surroundings() : Attacking hull shield.", AI_LOG_INFO) - return melee_attack(shield) - - // Kill common obstacle in the way like tables. - for(var/obstacle in valid_obstacles_by_priority) - obstacle = locate(obstacle) in problem_turf - if (obstacle) - ai_log("destroy_surroundings() : Attacking generic structure.", AI_LOG_INFO) - return melee_attack(obstacle) - - for(var/obj/machinery/door/D in problem_turf) // Required since firelocks take up the same turf. - if (D.density) - ai_log("destroy_surroundings() : Attacking closed door.", AI_LOG_INFO) - return melee_attack(D) - - ai_log("destroy_surroundings() : Exiting due to nothing to attack.", AI_LOG_INFO) - return ATTACK_FAILED // Nothing to attack. - -// Override for special behaviour. -/datum/ai_holder/proc/can_violently_breakthrough() - return violent_breakthrough diff --git a/code/modules/ai/ai_holder_combat_unseen.dm b/code/modules/ai/ai_holder_combat_unseen.dm deleted file mode 100644 index 4455b26c988b5..0000000000000 --- a/code/modules/ai/ai_holder_combat_unseen.dm +++ /dev/null @@ -1,43 +0,0 @@ -// Used for fighting invisible things. - -// Used when a target is out of sight or invisible. -/datum/ai_holder/proc/engage_unseen_enemy() - ai_log("engage_unseen_enemy() : Entering.", AI_LOG_TRACE) - // Lets do some last things before giving up. - if (conserve_ammo || !holder.ICheckRangedAttack(target_last_seen_turf)) - if (get_dist(holder, target_last_seen_turf) > 1) // We last saw them over there. - // Go to where you last saw the enemy. - give_destination(target_last_seen_turf, 1, TRUE) // Sets stance as well - else if (lose_target_time == world.time) // We last saw them next to us, so do a blind attack on that tile. - melee_on_tile(target_last_seen_turf) - else - find_target() - else - shoot_near_turf(target_last_seen_turf) - -// This shoots semi-randomly near a specific turf. -/datum/ai_holder/proc/shoot_near_turf(turf/targeted_turf) - if (get_dist(holder, targeted_turf) > max_range(targeted_turf)) - return // Too far to shoot. - - var/turf/T = pick(RANGE_TURFS(targeted_turf, 2)) // The turf we're actually gonna shoot at. - on_engagement(T) - if (firing_lanes && !test_projectile_safety(T)) - step_rand(holder) - holder.face_atom(T) - return - - ranged_attack(T) - -// Attempts to attack something on a specific tile. -/datum/ai_holder/proc/melee_on_tile(turf/T) - ai_log("melee_on_tile() : Entering.", AI_LOG_TRACE) - var/mob/living/L = locate() in T - if (!L) - T.visible_message("\The [holder] attacks nothing around \the [T].") - return - - if (holder.IIsAlly(L)) // Don't hurt our ally. - return - - melee_attack(L) \ No newline at end of file diff --git a/code/modules/ai/ai_holder_communication.dm b/code/modules/ai/ai_holder_communication.dm deleted file mode 100644 index 688231e5568e7..0000000000000 --- a/code/modules/ai/ai_holder_communication.dm +++ /dev/null @@ -1,136 +0,0 @@ -// Contains code for speaking and emoting. - -/datum/ai_holder - var/threaten = FALSE // If hostile and sees a valid target, gives a 'warning' to the target before beginning the attack. - var/threatening = FALSE // If the mob actually gave the warning, checked so it doesn't constantly yell every tick. - var/threaten_delay = 3 SECONDS // How long a 'threat' lasts, until actual fighting starts. If null, the mob never starts the fight but still does the threat. - var/threaten_timeout = 1 MINUTE // If the mob threatens someone, they leave, and then come back before this timeout period, the mob escalates to fighting immediately. - var/last_conflict_time = null // Last occurance of fighting being used, in world.time. - var/last_threaten_time = null // Ditto but only for threats. - var/last_target_time = null // Ditto for when we last switched targets, used to stop retaliate from gimping mobs - - var/speak_chance = 0 // Probability that the mob talks (this is 'X in 200' chance since even 1/100 is pretty noisy) - - -/datum/ai_holder/proc/should_threaten() - if (!threaten) - return FALSE // We don't negotiate. - if (check_attacker(target)) - return FALSE // They (or someone like them) attacked us before, escalate immediately. - if (!will_threaten(target)) - return FALSE // Pointless to threaten an animal, a mindless drone, or an object. - if (stance in STANCES_COMBAT) - return FALSE // We're probably already fighting or recently fought if not in these stances. - if (last_threaten_time && threaten_delay && last_conflict_time + threaten_timeout > world.time) - return FALSE // We threatened someone recently, so lets show them we mean business. - return TRUE // Lets give them a chance to choose wisely and walk away. - -/datum/ai_holder/proc/threaten_target() - holder.face_atom(target) // Constantly face the target. - - if (!threatening) // First tick. - threatening = TRUE - last_threaten_time = world.time - - if (holder.say_list?.say_threaten) - holder.ISay(pick(holder.say_list.say_threaten)) - playsound(holder, holder.say_list.threaten_sound, 50, 1) // We do this twice to make the sound -very- noticable to the target. - playsound(target, holder.say_list.threaten_sound, 50, 1) // Actual aim-mode also does that so at least it's consistant. - else // Otherwise we are waiting for them to go away or to wait long enough for escalate. - if (target in list_targets()) // Are they still visible? - var/should_escalate = FALSE - - if (threaten_delay && last_threaten_time + threaten_delay < world.time) // Waited too long. - should_escalate = TRUE - - if (should_escalate) - threatening = FALSE - set_stance(STANCE_APPROACH) - if (holder.say_list?.say_escalate) - holder.ISay(pick(holder.say_list.say_escalate)) - else - return // Wait a bit. - - else // They left, or so we think. - if (last_threaten_time + threaten_timeout < world.time) // They've been gone long enough, probably safe to stand down - threatening = FALSE - set_stance(STANCE_IDLE) - if (holder.say_list?.say_stand_down) - holder.ISay(pick(holder.say_list.say_stand_down)) - playsound(holder, holder.say_list.stand_down_sound, 50, 1) // We do this twice to make the sound -very- noticable to the target. - playsound(target, holder.say_list.stand_down_sound, 50, 1) // Actual aim-mode also does that so at least it's consistant. - -// Determines what is deserving of a warning when STANCE_ALERT is active. -/datum/ai_holder/proc/will_threaten(mob/living/the_target) - if (!isliving(the_target)) - return FALSE // Turrets don't give a fuck so neither will we. - /* - // Find a nice way of doing this later. - if (istype(the_target, /mob/living/simple_animal) && istype(holder, /mob/living/simple_animal)) - var/mob/living/simple_animal/us = holder - var/mob/living/simple_animal/them = target - - if (them.intelligence_level < us.intelligence_level) // Todo: Bitflag these. - return FALSE // Humanoids don't care about drones/animals/etc. Drones don't care about animals, and so on. - */ - return TRUE - -// Temp defines to make the below code a bit more readable. -#define COMM_SAY "say" -#define COMM_AUDIBLE_EMOTE "audible emote" -#define COMM_VISUAL_EMOTE "visual emote" - -/datum/ai_holder/proc/handle_idle_speaking() - if (rand(0,200) < speak_chance) - // Check if anyone is around to 'appreciate' what we say. - var/alone = TRUE - for(var/m in viewers(holder)) - var/mob/M = m - if (M.client) - alone = FALSE - break - if (alone) // Forever alone. No point doing anything else. - return - - var/list/comm_types = list() // What kinds of things can we do? - if (!holder.say_list) - return - - if (holder.say_list.speak.len) - comm_types += COMM_SAY - if (holder.say_list.emote_hear.len) - comm_types += COMM_AUDIBLE_EMOTE - if (holder.say_list.emote_see.len) - comm_types += COMM_VISUAL_EMOTE - - if (!comm_types.len) - return // All the relevant lists are empty, so do nothing. - - switch(pick(comm_types)) - if (COMM_SAY) - holder.ISay(pick(holder.say_list.speak)) - if (COMM_AUDIBLE_EMOTE) - holder.audible_emote(pick(holder.say_list.emote_hear)) - if (COMM_VISUAL_EMOTE) - holder.visible_emote(pick(holder.say_list.emote_see)) - -#undef COMM_SAY -#undef COMM_AUDIBLE_EMOTE -#undef COMM_VISUAL_EMOTE - -// Handles the holder hearing a mob's say() -// Does nothing by default, override this proc for special behavior. -/datum/ai_holder/proc/on_hear_say(mob/living/speaker, message) - return - -// This is to make responses feel a bit more natural and not instant. -/datum/ai_holder/proc/delayed_say(message, mob/speak_to) - addtimer(CALLBACK(src, .proc/do_delayed_say, message, speak_to), rand(1 SECOND, 2 SECONDS)) - -/datum/ai_holder/proc/do_delayed_say(message, mob/speak_to) - if (!src || !holder || !can_act()) // We might've died/got deleted/etc in the meantime. - return - - if (speak_to) - holder.face_atom(speak_to) - holder.ISay(message) diff --git a/code/modules/ai/ai_holder_cooperation.dm b/code/modules/ai/ai_holder_cooperation.dm deleted file mode 100644 index 434052a51e28a..0000000000000 --- a/code/modules/ai/ai_holder_cooperation.dm +++ /dev/null @@ -1,112 +0,0 @@ -// Involves cooperating with other ai_holders. -/datum/ai_holder - /// If true, asks allies to help when fighting something. - var/cooperative = FALSE - - /// How far away calls for help will go for. - var/call_distance = 10 - - /// time when this mob is allowed to call for help - var/next_sent_help_request = 0 - - /// time when the mob can receive a help request from another mob - var/next_received_help_request = 0 - - /// List of all mobs inside the faction with ai_holders that have cooperate on, to call for help without using range(). Note that this is only used for sending calls out. Receiving calls doesn't care about this list, only if the mob is in the faction. - var/list/faction_friends = list() - - -/datum/ai_holder/Destroy() - if (faction_friends.len) //This list is shared amongst the faction - faction_friends -= src - return ..() - -/* Handles everything about that list. -* Call on initialization or if something weird happened like the mob switched factions. -*/ -/datum/ai_holder/proc/build_faction_friends() - if (faction_friends.len) // Already have a list. - // Assume we're moving to a new faction. - faction_friends -= src // Get us out of the current list shared by everyone else. - faction_friends = list() // Then make our list empty and unshared in case we become a loner. - - // Find another AI-controlled mob in the same faction if possible. - var/mob/living/first_friend - for (var/mob/living/L in GLOB.living_mob_list_) - if (L.faction == holder.faction && L.ai_holder) - first_friend = L - break - - if (first_friend) // Joining an already established faction. - faction_friends = first_friend.ai_holder.faction_friends - faction_friends |= holder - else // We're the 'founder' (first and/or only member) of this faction. - faction_friends |= holder - -/// Requests help in combat from other mobs possessing ai_holders. -/datum/ai_holder/proc/request_help() - ai_log("request_help() : Entering.", AI_LOG_DEBUG) - if (!cooperative || world.time < next_sent_help_request || world.time < next_received_help_request) - return - - - - ai_log("request_help() : Asking for help.", AI_LOG_INFO) - next_sent_help_request = world.time + 10 SECONDS - if (!faction_friends) - build_faction_friends() - for (var/mob/living/L in faction_friends) - if (L == holder) // Lets not call ourselves. - continue - if (holder.z != L.z) // On seperate z-level. - continue - if (get_dist(L, holder) > call_distance) // Too far to 'hear' the call for help. - continue - - if (holder.IIsAlly(L) && L.ai_holder) - ai_log("request_help() : Asking [L] (AI) for help.", AI_LOG_INFO) - L.ai_holder.help_requested(holder) - - ai_log("request_help() : Exiting.", AI_LOG_DEBUG) - -/// What allies receive when someone else is calling for help. -/datum/ai_holder/proc/help_requested(mob/living/friend) - ai_log("help_requested() : Entering.", AI_LOG_DEBUG) - if (stance == STANCE_SLEEP) - ai_log("help_requested() : Help requested by [friend] but we are asleep.", AI_LOG_INFO) - return - if (!cooperative) - ai_log("help_requested() : Help requested by [friend] but we're not cooperative.", AI_LOG_INFO) - return - if (stance in STANCES_COMBAT) - ai_log("help_requested() : Help requested by [friend] but we are busy fighting something else.", AI_LOG_INFO) - return - if (!can_act()) - ai_log("help_requested() : Help requested by [friend] but cannot act (stunned or dead).", AI_LOG_INFO) - return - if (!holder.IIsAlly(friend)) // Extra sanity. - ai_log("help_requested() : Help requested by [friend] but we hate them.", AI_LOG_INFO) - return - var/their_target = friend?.ai_holder?.target - if (their_target) // They have a target and aren't just shouting for no reason - if (!can_attack(their_target, vision_required = FALSE)) - ai_log("help_requested() : Help requested by [friend] but we don't want to fight their target.", AI_LOG_INFO) - return - if (get_dist(holder, friend) <= follow_distance) - ai_log("help_requested() : Help requested by [friend] but we're already here.", AI_LOG_INFO) - return - if (get_dist(holder, friend) <= vision_range) // Within our sight. - ai_log("help_requested() : Help requested by [friend], and within target sharing range.", AI_LOG_INFO) - last_conflict_time = world.time // So we attack immediately and not threaten. - next_received_help_request = world.time + 15 SECONDS - give_target(their_target, urgent = TRUE) // This will set us to the appropiate stance. - ai_log("help_requested() : Given target [target] by [friend]. Exiting", AI_LOG_DEBUG) - return - - // Otherwise they're outside our sight, lack a target, or aren't AI controlled, but within call range. - // So assuming we're AI controlled, we'll go to them and see whats wrong. - ai_log("help_requested() : Help requested by [friend], going to go to friend.", AI_LOG_INFO) - if (their_target) - add_attacker(their_target) // We won't wait and 'warn' them while they're stabbing our ally - set_follow(friend, 10 SECONDS) - ai_log("help_requested() : Exiting.", AI_LOG_DEBUG) diff --git a/code/modules/ai/ai_holder_debug.dm b/code/modules/ai/ai_holder_debug.dm deleted file mode 100644 index c701a11519149..0000000000000 --- a/code/modules/ai/ai_holder_debug.dm +++ /dev/null @@ -1,97 +0,0 @@ -// Contains settings to make it easier to debug things. - -/datum/ai_holder - var/path_display = FALSE // Displays a visual path when A* is being used. - var/path_icon = 'icons/misc/debug_group.dmi' // What icon to use for the overlay - var/path_icon_state = "red" // What state to use for the overlay - var/image/path_overlay // A reference to the overlay - - var/last_turf_display = FALSE // Similar to above, but shows the target's last known turf visually. - var/last_turf_icon_state = "green" // A seperate icon_state from the previous. - var/image/last_turf_overlay // Another reference for an overlay. - - var/stance_coloring = FALSE // Colors the mob depending on its stance. - - var/debug_ai = AI_LOG_OFF // The level of debugging information to display to people who can see log_debug(). - -/datum/ai_holder/New() - ..() - path_overlay = new(path_icon,path_icon_state) - last_turf_overlay = new(path_icon, last_turf_icon_state) - -/datum/ai_holder/Destroy() - path_overlay = null - last_turf_overlay = null - return ..() - -//For debug purposes! -/datum/ai_holder/proc/ai_log_output(msg = "missing message", ver = AI_LOG_INFO) - var/span_type - switch(ver) - if (AI_LOG_OFF) - return - if (AI_LOG_ERROR) - span_type = "debug_error" - if (AI_LOG_WARNING) - span_type = "debug_warning" - if (AI_LOG_INFO) - span_type = "debug_info" - if (AI_LOG_DEBUG) - span_type = "debug_debug" // RAS syndrome at work. - if (AI_LOG_TRACE) - span_type = "debug_trace" - if (ver <= debug_ai) - log_debug("AI: ([holder]:\ref[holder] | [holder.x],[holder.y],[holder.z])(@[world.time]): [msg] ") - -// Colors the mob based on stance, to visually tell what stance it is for debugging. -// Probably not something you want for regular use. -/datum/ai_holder/proc/stance_color() - var/new_color = null - switch(stance) - if (STANCE_SLEEP) - new_color = "#ffffff" // White - if (STANCE_IDLE) - new_color = "#00ff00" // Green - if (STANCE_ALERT) - new_color = "#ffff00" // Yellow - if (STANCE_APPROACH) - new_color = "#ff9933" // Orange - if (STANCE_FIGHT) - new_color = "#ff0000" // Red - if (STANCE_MOVE) - new_color = "#0000ff" // Blue - if (STANCE_REPOSITION) - new_color = "#ff00ff" // Purple - if (STANCE_FOLLOW) - new_color = "#00ffff" // Cyan - if (STANCE_FLEE) - new_color = "#666666" // Grey - if (STANCE_DISABLED) - new_color = "#000000" // Black - holder.color = new_color - -// Turns on all the debugging stuff. -/datum/ai_holder/proc/debug() - if (debug_ai == AI_LOG_OFF) - stance_coloring = TRUE - path_display = TRUE - last_turf_display = TRUE - debug_ai = AI_LOG_INFO - return TRUE - - stance_coloring = FALSE - path_display = FALSE - last_turf_display = FALSE - debug_ai = AI_LOG_OFF - return FALSE - -/datum/ai_holder/hostile/debug - wander = FALSE - conserve_ammo = FALSE - intelligence_level = AI_SMART - - stance_coloring = TRUE - path_display = TRUE - last_turf_display = TRUE - debug_ai = AI_LOG_INFO - diff --git a/code/modules/ai/ai_holder_disabled.dm b/code/modules/ai/ai_holder_disabled.dm deleted file mode 100644 index 294f903734168..0000000000000 --- a/code/modules/ai/ai_holder_disabled.dm +++ /dev/null @@ -1,82 +0,0 @@ -// Handles AI while stunned or otherwise disabled. - -/datum/ai_holder - var/respect_confusion = TRUE // If false, the mob won't wander around recklessly. - -// If our holder is able to do anything. -/datum/ai_holder/proc/can_act() - if (!holder) // Holder missing. - manage_processing(AI_NO_PROCESS) - return FALSE - if (holder.stat) // Dead or unconscious. - ai_log("can_act() : Stat was non-zero ([holder.stat]).", AI_LOG_TRACE) - return FALSE - if (holder.incapacitated(INCAPACITATION_DISABLED)) // Stunned in some form. - ai_log("can_act() : Incapacited.", AI_LOG_TRACE) - return FALSE - if (holder.instasis()) // In a stasis field. - ai_log("can_act() : In a stasis field.", AI_LOG_TRACE) - return FALSE - return TRUE - -// Test if we should switch to STANCE_DISABLE. -// Currently tests for death, stuns, and confusion. -/datum/ai_holder/proc/is_disabled() - if (!can_act()) - return TRUE - if (is_confused()) - return TRUE - return FALSE - -/datum/ai_holder/proc/is_confused() - return holder.confused > 0 && respect_confusion - -// Called by the main loop. -/datum/ai_holder/proc/handle_disabled() - if (!can_act()) - return // Just sit there and take it. - else if (is_confused()) - dangerous_wander() // Let's bump into allies and hit them. - -// Similar to normal wander, but will walk into tiles that are harmful, and attack anything they bump into, including allies. -// Occurs when confused. -/datum/ai_holder/proc/dangerous_wander() - ai_log("dangerous_wander() : Entered.", AI_LOG_DEBUG) - if (isturf(holder.loc) && can_act()) - // Test if we should refrain from falling/attacking allies, if we're smart enough to realize that. - if (intelligence_level > AI_NORMAL) - var/unsafe = FALSE - - tile_test: - for(var/dir_tested in GLOB.cardinal) - var/turf/turf_tested = get_step(holder, dir_tested) - // Look for unsafe tiles. - if (!turf_tested.is_safe_to_enter(holder)) - unsafe = TRUE - break - - // Look for allies. - for(var/mob/living/L in turf_tested) - if (holder.IIsAlly(L)) - unsafe = TRUE - break tile_test - - - if (unsafe) - ai_log("dangerous_wander() : Staying still due to risk of harm to self or allies.", AI_LOG_TRACE) - return // Just stay still. - - var/moving_to = 0 - moving_to = pick(GLOB.cardinal) - var/turf/T = get_step(holder, moving_to) - - var/mob/living/L = locate() in T - if (L) - // Attack whoever's on the tile. Even if it's an ally. - ai_log("dangerous_wander() : Going to confuse-attack [L].", AI_LOG_TRACE) - melee_attack(L) - else - // Move to the tile. Even if it's unsafe. - ai_log("dangerous_wander() : Going to confuse-walk to [T] ([T.x],[T.y],[T.z]).", AI_LOG_TRACE) - holder.IMove(T, safety = FALSE) - ai_log("dangerous_wander() : Exited.", AI_LOG_DEBUG) diff --git a/code/modules/ai/ai_holder_fleeing.dm b/code/modules/ai/ai_holder_fleeing.dm deleted file mode 100644 index c1e186b18a527..0000000000000 --- a/code/modules/ai/ai_holder_fleeing.dm +++ /dev/null @@ -1,43 +0,0 @@ -// This code handles what to do inside STANCE_FLEE. - -/datum/ai_holder - var/can_flee = TRUE // If they're even allowed to flee. - var/flee_when_dying = TRUE // If they should flee when low on health. - var/dying_threshold = 0.3 // How low on health the holder needs to be before fleeing. Defaults to 30% or lower health. - var/flee_when_outmatched = FALSE // If they should flee upon reaching a specific tension threshold. - var/outmatched_threshold = 200 // The tension threshold needed for a mob to decide it should run away. - - - -/datum/ai_holder/proc/should_flee(force = FALSE) - if (force) - return TRUE - - if (can_flee) - if (special_flee_check()) - return TRUE - if (!hostile && !retaliate) - return TRUE // We're not hostile and someone attacked us first. - if (flee_when_dying && (holder.health / holder.getMaxHealth()) <= dying_threshold) - return TRUE // We're gonna die! - else if (flee_when_outmatched && holder.get_tension() >= outmatched_threshold) - return TRUE // We're fighting something way way stronger then us. - return FALSE - -// Override for special fleeing conditionally. -/datum/ai_holder/proc/special_flee_check() - return FALSE - -/datum/ai_holder/proc/flee_from_target() - ai_log("flee_from_target() : Entering.", AI_LOG_DEBUG) - - if (!target || !should_flee() || !can_attack(target)) // can_attack() is used since it checks the same things we would need to anyways. - ai_log("flee_from_target() : Lost target to flee from.", AI_LOG_INFO) - lose_target() - set_stance(STANCE_IDLE) - ai_log("flee_from_target() : Exiting.", AI_LOG_DEBUG) - return - - ai_log("flee_from_target() : Stepping away.", AI_LOG_TRACE) - step_away(holder, target, vision_range) - ai_log("flee_from_target() : Exiting.", AI_LOG_DEBUG) \ No newline at end of file diff --git a/code/modules/ai/ai_holder_follow.dm b/code/modules/ai/ai_holder_follow.dm deleted file mode 100644 index a7953498e7b6c..0000000000000 --- a/code/modules/ai/ai_holder_follow.dm +++ /dev/null @@ -1,68 +0,0 @@ -// This handles following a specific atom/movable, without violently murdering it. - -/datum/ai_holder - // Following. - var/atom/movable/leader = null // The movable atom that the mob wants to follow. - var/follow_distance = 2 // How far leader must be to start moving towards them. - var/follow_until_time = 0 // world.time when the mob will stop following leader. 0 means it won't time out. - -/datum/ai_holder/proc/walk_to_leader() - ai_log("walk_to_leader() : Entering.",AI_LOG_TRACE) - if (!leader) - ai_log("walk_to_leader() : No leader.", AI_LOG_WARNING) - forget_path() - set_stance(STANCE_IDLE) - ai_log("walk_to_leader() : Exiting.", AI_LOG_TRACE) - return - - // Did we time out? - if (follow_until_time && world.time > follow_until_time) - ai_log("walk_to_leader() : Follow timed out, losing leader.", AI_LOG_INFO) - lose_follow() - set_stance(STANCE_IDLE) - ai_log("walk_to_leader() : Exiting.", AI_LOG_TRACE) - return - - var/get_to = follow_distance - var/distance = get_dist(holder, leader) - ai_log("walk_to_leader() : get_to is [get_to].", AI_LOG_TRACE) - - // We're here! - if (distance <= get_to) - give_up_movement() - set_stance(STANCE_IDLE) - ai_log("walk_to_leader() : Within range, exiting.", AI_LOG_INFO) - return - - ai_log("walk_to_leader() : Walking.", AI_LOG_TRACE) - walk_path(leader, get_to) - ai_log("walk_to_leader() : Exiting.",AI_LOG_DEBUG) - -/datum/ai_holder/proc/set_follow(mob/living/L, follow_for = 0) - ai_log("set_follow() : Entered.", AI_LOG_DEBUG) - if (!L) - ai_log("set_follow() : Was told to follow a nonexistant mob.", AI_LOG_ERROR) - return FALSE - - leader = L - follow_until_time = !follow_for ? 0 : world.time + follow_for - ai_log("set_follow() : Exited.", AI_LOG_DEBUG) - return TRUE - -/datum/ai_holder/proc/lose_follow() - ai_log("lose_follow() : Entered.", AI_LOG_DEBUG) - ai_log("lose_follow() : Going to lose leader [leader].", AI_LOG_INFO) - leader = null - give_up_movement() - ai_log("lose_follow() : Exited.", AI_LOG_DEBUG) - -/datum/ai_holder/proc/should_follow_leader() - if (!leader || target) - return FALSE - if (follow_until_time && world.time > follow_until_time) - lose_follow() - set_stance(STANCE_IDLE) - return FALSE - if (get_dist(holder, leader) > follow_distance) - return TRUE - return FALSE \ No newline at end of file diff --git a/code/modules/ai/ai_holder_movement.dm b/code/modules/ai/ai_holder_movement.dm deleted file mode 100644 index c5023376fc9a7..0000000000000 --- a/code/modules/ai/ai_holder_movement.dm +++ /dev/null @@ -1,165 +0,0 @@ -/datum/ai_holder - // General. - var/turf/destination = null // The targeted tile the mob wants to walk to. - var/min_distance_to_destination = 1 // Holds how close the mob should go to destination until they're done. - - // Home. - var/turf/home_turf = null // The mob's 'home' turf. It will try to stay near it if told to do so. This is the turf the AI was initialized on by default. - var/returns_home = FALSE // If true, makes the mob go to its 'home' if it strays too far. - var/home_low_priority = FALSE // If true, the mob will not go home unless it has nothing better to do, e.g. its following someone. - var/max_home_distance = 3 // How far the mob can go away from its home before being told to go_home(). - // Note that there is a 'BYOND cap' of 14 due to limitations of get_/step_to(). - // Wandering. - var/wander = FALSE // If true, the mob will randomly move in the four cardinal directions when idle. - var/wander_delay = 0 // How many ticks until the mob can move a tile in handle_wander_movement(). - var/base_wander_delay = 2 // What the above var gets set to when it wanders. Note that a tick happens every half a second. - var/wander_when_pulled = FALSE // If the mob will refrain from wandering if someone is pulling it. - - // Breakthrough - var/failed_breakthroughs = 0 // How many times we've failed to breakthrough something lately - -/datum/ai_holder/proc/walk_to_destination() - ai_log("walk_to_destination() : Entering.",AI_LOG_TRACE) - if (!destination) - ai_log("walk_to_destination() : No destination.", AI_LOG_WARNING) - forget_path() - set_stance(stance == STANCE_REPOSITION ? STANCE_APPROACH : STANCE_IDLE) - ai_log("walk_to_destination() : Exiting.", AI_LOG_TRACE) - return - - var/get_to = min_distance_to_destination - var/distance = get_dist(holder, destination) - ai_log("walk_to_destination() : get_to is [get_to].", AI_LOG_TRACE) - - // We're here! - if (distance <= get_to) - give_up_movement() - set_stance(stance == STANCE_REPOSITION ? STANCE_APPROACH : STANCE_IDLE) - ai_log("walk_to_destination() : Destination reached. Exiting.", AI_LOG_INFO) - return - - ai_log("walk_to_destination() : Walking.", AI_LOG_TRACE) - walk_path(destination, get_to) - ai_log("walk_to_destination() : Exiting.",AI_LOG_TRACE) - -/datum/ai_holder/proc/should_go_home() - if (stance != STANCE_IDLE) - return FALSE - if (!returns_home || !home_turf) - return FALSE - if (get_dist(holder, home_turf) > max_home_distance) - if (!home_low_priority) - return TRUE - else if (!leader && !target) - return TRUE - return FALSE - -/datum/ai_holder/proc/go_home() - if (home_turf) - ai_log("go_home() : Telling holder to go home.", AI_LOG_INFO) - lose_follow() // So they don't try to path back and forth. - give_destination(home_turf, max_home_distance) - else - ai_log("go_home() : Told to go home without home_turf.", AI_LOG_ERROR) - -/datum/ai_holder/proc/give_destination(turf/new_destination, min_distance = 1, combat = FALSE) - ai_log("give_destination() : Entering.", AI_LOG_DEBUG) - - destination = new_destination - min_distance_to_destination = min_distance - - if (new_destination != null) - ai_log("give_destination() : Going to new destination.", AI_LOG_INFO) - set_stance(combat ? STANCE_REPOSITION : STANCE_MOVE) - return TRUE - else - ai_log("give_destination() : Given null destination.", AI_LOG_ERROR) - - ai_log("give_destination() : Exiting.", AI_LOG_DEBUG) - - -/// Walk towards whatever. -/datum/ai_holder/proc/walk_path(atom/A, get_to = 1) - ai_log("walk_path() : Entered.", AI_LOG_TRACE) - - if (use_astar) - if (!path.len) // If we're missing a path, make a new one. - ai_log("walk_path() : No path. Attempting to calculate path.", AI_LOG_DEBUG) - calculate_path(A, get_to) - - if (!path.len) // If we still don't have one, then the target's probably somewhere inaccessible to us. Get as close as we can. - ai_log("walk_path() : Failed to obtain path to target. Using get_step_to() instead.", AI_LOG_INFO) - if (holder.IMove(get_step_to(holder, A)) == MOVEMENT_FAILED) - ai_log("walk_path() : Failed to move, attempting breakthrough.", AI_LOG_INFO) - if (!breakthrough(A) && failed_breakthroughs++ >= 5) // We failed to move, time to smash things. - give_up_movement() - failed_breakthroughs = 0 - return - - if (move_once() == FALSE) // Start walking the path. - ai_log("walk_path() : Failed to step.", AI_LOG_TRACE) - ++failed_steps - if (failed_steps > 3) // We're probably stuck. - ai_log("walk_path() : Too many failed_steps.", AI_LOG_DEBUG) - forget_path() // So lets try again with a new path. - failed_steps = 0 - - else - ai_log("walk_path() : Going to IMove().", AI_LOG_TRACE) - if (holder.IMove(get_step_to(holder, A)) == MOVEMENT_FAILED ) - ai_log("walk_path() : Failed to move, attempting breakthrough.", AI_LOG_INFO) - if (!breakthrough(A) && failed_breakthroughs++ >= 5) // We failed to move, time to smash things. - give_up_movement() - failed_breakthroughs = 0 - - ai_log("walk_path() : Exited.", AI_LOG_TRACE) - - -///Take one step along a path -/datum/ai_holder/proc/move_once() - ai_log("move_once() : Entered.", AI_LOG_TRACE) - if (!path.len) - return - - if (path_display) - var/turf/T = src.path[1] - T.overlays -= path_overlay - - if (holder.IMove(get_step_towards(holder, src.path[1])) != MOVEMENT_ON_COOLDOWN) - if (holder.loc != src.path[1]) - ai_log("move_once() : Failed step. Exiting.", AI_LOG_TRACE) - return MOVEMENT_FAILED - else - path -= src.path[1] - ai_log("move_once() : Successful step. Exiting.", AI_LOG_TRACE) - return MOVEMENT_SUCCESSFUL - ai_log("move_once() : Mob movement on cooldown. Exiting.", AI_LOG_TRACE) - return MOVEMENT_ON_COOLDOWN - -/datum/ai_holder/proc/should_wander() - return (stance == STANCE_IDLE) && wander && !leader - -/// Wanders randomly in cardinal directions. -/datum/ai_holder/proc/handle_wander_movement() - ai_log("handle_wander_movement() : Entered.", AI_LOG_TRACE) - if (isturf(holder.loc) && can_act()) - wander_delay-- - if (wander_delay <= 0) - if (!wander_when_pulled && (holder.pulledby || holder.grabbed_by.len)) - ai_log("handle_wander_movement() : Being pulled and cannot wander. Exiting.", AI_LOG_DEBUG) - return - - var/moving_to = 0 // Apparently this is required or it always picks 4, according to the previous developer for simplemob AI. - moving_to = pick(GLOB.cardinal) - holder.set_dir(moving_to) - holder.IMove(get_step(holder, moving_to)) - wander_delay = base_wander_delay - ai_log("handle_wander_movement() : Exited.", AI_LOG_TRACE) - -/mob/living/proc/set_wander_when_pulled(value) - if (ai_holder) - ai_holder.wander_when_pulled = value - -/mob/living/proc/set_wander(value) - if(ai_holder) - ai_holder.wander = value diff --git a/code/modules/ai/ai_holder_pathfinding.dm b/code/modules/ai/ai_holder_pathfinding.dm deleted file mode 100644 index 2ad17082b8d21..0000000000000 --- a/code/modules/ai/ai_holder_pathfinding.dm +++ /dev/null @@ -1,58 +0,0 @@ -// This handles obtaining a (usually A*) path towards something, such as a target, destination, or leader. -// This interacts heavily with code inside ai_holder_movement.dm - -/datum/ai_holder - // Pathfinding. - var/use_astar = FALSE // Do we use the more expensive A* implementation or stick with BYOND's default step_to()? - var/list/path = list() // A list of tiles that A* gave us as a solution to reach the target. - var/list/obstacles = list() // Things A* will try to avoid. - var/astar_adjacent_proc = /turf/proc/CardinalTurfsWithAccess // Proc to use when A* pathfinding. Default makes them bound to cardinals. - var/failed_steps = 0 // If move_once() fails to move the mob onto the correct tile, this increases. When it reaches 3, the path is recalc'd since they're probably stuck. - -// This clears the stored A* path. -/datum/ai_holder/proc/forget_path() - ai_log("forget_path() : Entering.", AI_LOG_DEBUG) - if (path_display) - for (var/turf/T in path) - T.overlays -= path_overlay - path.Cut() - ai_log("forget_path() : Exiting.", AI_LOG_DEBUG) - -/datum/ai_holder/proc/give_up_movement() - ai_log("give_up_movement() : Entering.", AI_LOG_DEBUG) - forget_path() - destination = null - ai_log("give_up_movement() : Exiting.", AI_LOG_DEBUG) - -/datum/ai_holder/proc/calculate_path(atom/A, get_to = 1) - ai_log("calculate_path([A],[get_to]) : Entering.", AI_LOG_DEBUG) - if (!A) - ai_log("calculate_path() : Called without an atom. Exiting.",AI_LOG_WARNING) - return - - if (!use_astar) // If we don't use A* then this is pointless. - ai_log("calculate_path() : Not using A*, Exiting.", AI_LOG_DEBUG) - return - - get_path(get_turf(A), get_to) - - ai_log("calculate_path() : Exiting.", AI_LOG_DEBUG) - -///A* now, try to a path to a target -/datum/ai_holder/proc/get_path(turf/target,var/get_to = 1, max_distance = world.view*6) - ai_log("get_path() : Entering.",AI_LOG_DEBUG) - forget_path() - var/list/new_path = AStar(get_turf(holder.loc), target, astar_adjacent_proc, /turf/proc/Distance, min_target_dist = get_to, max_node_depth = max_distance, id = holder.IGetID(), exclude = obstacles) - - if (new_path && new_path.len) - path = new_path - ai_log("get_path() : Made new path.", AI_LOG_DEBUG) - if (path_display) - for(var/turf/T in path) - T.overlays |= path_overlay - else - ai_log("get_path() : Failed to make new path. Exiting.", AI_LOG_DEBUG) - return 0 - - ai_log("get_path() : Exiting.", AI_LOG_DEBUG) - return path.len \ No newline at end of file diff --git a/code/modules/ai/ai_holder_targeting.dm b/code/modules/ai/ai_holder_targeting.dm deleted file mode 100644 index 5ac387dad6d9e..0000000000000 --- a/code/modules/ai/ai_holder_targeting.dm +++ /dev/null @@ -1,290 +0,0 @@ -// Used for assigning a target for attacking. - -/datum/ai_holder - var/hostile = FALSE // Do we try to hurt others? - var/retaliate = FALSE // Attacks whatever struck it first. Mobs will still attack back if this is false but hostile is true. - var/mauling = FALSE // Attacks unconscious mobs - var/handle_corpse = FALSE // Allows AI to acknowledge corpses (e.g. nurse spiders) - - var/atom/movable/target = null // The thing (mob or object) we're trying to kill. - var/atom/movable/preferred_target = null// If set, and if given the chance, we will always prefer to target this over other options. - var/turf/target_last_seen_turf = null // Where the mob last observed the target being, used if the target disappears but the mob wants to keep fighting. - - var/vision_range = 7 // How far the targeting system will look for things to kill. Note that values higher than 7 are 'offscreen' and might be unsporting. - var/respect_alpha = TRUE // If true, mobs with a sufficently low alpha will be treated as invisible. - var/alpha_vision_threshold = FAKE_INVIS_ALPHA_THRESHOLD // Targets with an alpha less or equal to this will be considered invisible. Requires above var to be true. - - var/lose_target_time = 0 // world.time when a target was lost. - var/lose_target_timeout = 5 SECONDS // How long until a mob 'times out' and stops trying to find the mob that disappeared. - - var/list/attackers = list() // List of strings of names of people who attacked us before in our life. - // This uses strings and not refs to allow for disguises, and to avoid needing to use weakrefs. - var/destructive = FALSE // Will target 'neutral' structures/objects and not just 'hostile' ones. - -// A lot of this is based off of /TG/'s AI code. - -/// Step 1, find out what we can see. -/datum/ai_holder/proc/list_targets() - . = ohearers(vision_range, holder) - . -= GLOB.dview_mob // Not the dview mob! - - var/static/hostile_machines = typecacheof(list(/obj/machinery/porta_turret, /mob/living/exosuit, /obj/effect/blob)) - - for (var/HM in typecache_filter_list(range(vision_range, holder), hostile_machines)) - if (can_see(holder, HM, vision_range)) - . += HM - -/// Step 2, filter down possible targets to things we actually care about. -/datum/ai_holder/proc/find_target(list/possible_targets, has_targets_list = FALSE) - ai_log("find_target() : Entered.", AI_LOG_TRACE) - if (!hostile) // So retaliating mobs only attack the thing that hit it. - return null - . = list() - if (!has_targets_list) - possible_targets = list_targets() - for (var/possible_target in possible_targets) - if (can_attack(possible_target)) // Can we attack it? - . += possible_target - - var/new_target = pick_target(.) - give_target(new_target) - return new_target - -/// Step 3, pick among the possible, attackable targets. -/datum/ai_holder/proc/pick_target(list/targets) - if (target) // If we already have a target, but are told to pick again, calculate the lowest distance between all possible, and pick from the lowest distance targets. - targets = target_filter_distance(targets) - else - targets = target_filter_closest(targets) - if (!targets.len) // We found nothing. - return - - var/chosen_target - if (preferred_target && (preferred_target in targets)) - chosen_target = preferred_target - else - chosen_target = pick(targets) - return chosen_target - -/// Step 4, give us our selected target. -/datum/ai_holder/proc/give_target(new_target, urgent = FALSE) - ai_log("give_target() : Given '[new_target]', urgent=[urgent].", AI_LOG_TRACE) - target = new_target - - if (target != null) - lose_target_time = 0 - track_target_position() - if (should_threaten() && !urgent) - set_stance(STANCE_ALERT) - else - set_stance(STANCE_FIGHT) - last_target_time = world.time - return TRUE - -// Filters return one or more 'preferred' targets. - -/// Targets closer to us than the current one. -/datum/ai_holder/proc/target_filter_distance(list/targets) - var/target_dist = get_dist(holder, target) - var/list/better_targets = list() - for (var/possible_target in targets) - var/atom/A = possible_target - var/possible_target_distance = get_dist(holder, A) - if (possible_target_distance < target_dist) - better_targets += A - return better_targets - -/// Returns the closest target and anything tied with it for distance -/datum/ai_holder/proc/target_filter_closest(list/targets) - var/lowest_distance = 1e6 //fakely far - var/list/closest_targets = list() - for (var/possible_target in targets) - var/atom/A = possible_target - var/current_distance = get_dist(holder, A) - if (current_distance < lowest_distance) - closest_targets.Cut() - lowest_distance = current_distance - closest_targets += A - else if (current_distance == lowest_distance) - closest_targets += A - return closest_targets - -/datum/ai_holder/proc/can_attack(atom/movable/the_target, vision_required = TRUE) - if (!can_see_target(the_target) && vision_required) - return FALSE - - if (isliving(the_target)) - var/mob/living/L = the_target - if (ishuman(L) || issilicon(L)) - if (L.key && !L.client) // SSD players get a pass - return FALSE - - if (L.status_flags & NOTARGET) - return FALSE - if (L.stat) - if (L.stat == DEAD && !handle_corpse) // Leave dead things alone - return FALSE - if (L.stat == UNCONSCIOUS) // Do we have mauling? Yes? Then maul people who are sleeping but not SSD - if (mauling) - return TRUE - else - return FALSE - if (holder.IIsAlly(L)) - return FALSE - return TRUE - - if (istype(the_target, /mob/living/exosuit)) - var/mob/living/exosuit/M = the_target - for (var/mob/pilot in M.pilots) - return can_attack(pilot) - return destructive // Empty mechs are 'neutral'. - - if (istype(the_target, /obj/machinery/porta_turret)) - var/obj/machinery/porta_turret/P = the_target - if (P.stat & BROKEN) - return FALSE // Already dead. - if (!(P.assess_living(holder))) - return FALSE // Don't shoot allied turrets. - if (!P.raised && !P.raising) - return FALSE // Turrets won't get hurt if they're still in their cover. - return TRUE - - return TRUE - -/// 'Soft' loss of target. They may still exist, we still have some info about them maybe. -/datum/ai_holder/proc/lose_target() - ai_log("lose_target() : Entering.", AI_LOG_TRACE) - if (target) - ai_log("lose_target() : Had a target, setting to null and LTT.", AI_LOG_DEBUG) - target = null - lose_target_time = world.time - - give_up_movement() - - if (target_last_seen_turf && intelligence_level >= AI_SMART) - ai_log("lose_target() : Going into 'engage unseen enemy' mode.", AI_LOG_INFO) - engage_unseen_enemy() - return TRUE //We're still working on it - else - ai_log("lose_target() : Can't chase target, so giving up.", AI_LOG_INFO) - remove_target() - return find_target() //Returns if we found anything else to do - -/// 'Hard' loss of target. Clean things up and return to idle. -/datum/ai_holder/proc/remove_target() - ai_log("remove_target() : Entering.", AI_LOG_TRACE) - if (target) - target = null - - lose_target_time = 0 - give_up_movement() - lose_target_position() - set_stance(STANCE_IDLE) - -/// Check if target is visible to us. -/datum/ai_holder/proc/can_see_target(atom/movable/the_target, view_range = vision_range) - ai_log("can_see_target() : Entering.", AI_LOG_TRACE) - - if (!the_target) // Nothing to target. - ai_log("can_see_target() : There is no target. Exiting.", AI_LOG_WARNING) - return FALSE - - if (holder.see_invisible < the_target.invisibility) // Real invis. - ai_log("can_see_target() : Target ([the_target]) was invisible to holder. Exiting.", AI_LOG_TRACE) - return FALSE - - if (respect_alpha && the_target.alpha <= alpha_vision_threshold) // Fake invis. - ai_log("can_see_target() : Target ([the_target]) was sufficently transparent to holder and is hidden. Exiting.", AI_LOG_TRACE) - return FALSE - - if (get_dist(holder, the_target) > view_range) // Too far away. - ai_log("can_see_target() : Target ([the_target]) was too far from holder. Exiting.", AI_LOG_TRACE) - return FALSE - - if (!can_see(holder, the_target, view_range)) - ai_log("can_see_target() : Target ([the_target]) failed can_see(). Exiting.", AI_LOG_TRACE) - return FALSE - - ai_log("can_see_target() : Target ([the_target]) can be seen. Exiting.", AI_LOG_TRACE) - return TRUE - -/// Updates the last known position of the target. -/datum/ai_holder/proc/track_target_position() - if (!target) - lose_target_position() - - if (last_turf_display && target_last_seen_turf) - target_last_seen_turf.overlays -= last_turf_overlay - - target_last_seen_turf = get_turf(target) - - if (last_turf_display) - target_last_seen_turf.overlays += last_turf_overlay - -/// Resets the last known position to null. -/datum/ai_holder/proc/lose_target_position() - if (last_turf_display && target_last_seen_turf) - target_last_seen_turf.overlays -= last_turf_overlay - ai_log("lose_target_position() : Last position is being reset.", AI_LOG_INFO) - target_last_seen_turf = null - -/// Responds to a hostile action against its mob. -/datum/ai_holder/proc/react_to_attack(atom/movable/attacker) - if (holder.stat) // We're dead. - ai_log("react_to_attack() : Was attacked by [attacker], but we are dead/unconscious.", AI_LOG_TRACE) - return FALSE - if (!hostile && !retaliate) // Not allowed to defend ourselves. - ai_log("react_to_attack() : Was attacked by [attacker], but we are not allowed to attack back.", AI_LOG_TRACE) - return FALSE - if (holder.IIsAlly(attacker)) // I'll overlook it THIS time... - ai_log("react_to_attack() : Was attacked by [attacker], but they were an ally.", AI_LOG_TRACE) - return FALSE - if (target) // Already fighting someone. Switching every time we get hit would impact our combat performance. - if (!retaliate) // If we don't get to fight back, we don't fight back... - ai_log("react_to_attack() : Was attacked by [attacker], but we already have a target.", AI_LOG_TRACE) - on_attacked(attacker) // So we attack immediately and not threaten. - return FALSE - else if (check_attacker(attacker) && world.time > last_target_time + 3 SECONDS) // Otherwise, let 'er rip - ai_log("react_to_attack() : Was attacked by [attacker]. Can retaliate, waited 3 seconds.", AI_LOG_INFO) - on_attacked(attacker) // So we attack immediately and not threaten. - return give_target(attacker) // Also handles setting the appropiate stance. - - if (stance == STANCE_SLEEP) // If we're asleep, try waking up if someone's wailing on us. - ai_log("react_to_attack() : AI is asleep. Waking up.", AI_LOG_TRACE) - go_wake() - - ai_log("react_to_attack() : Was attacked by [attacker].", AI_LOG_INFO) - on_attacked(attacker) // So we attack immediately and not threaten. - return give_target(attacker, urgent = TRUE) // Also handles setting the appropiate stance. - -/// Sets a few vars so mobs that threaten will react faster to an attacker or someone who attacked them before. -/datum/ai_holder/proc/on_attacked(atom/movable/AM) - last_conflict_time = world.time - add_attacker(AM) - -/// Checks to see if an atom attacked us lately -/datum/ai_holder/proc/check_attacker(atom/movable/A) - return (A in attackers) - -/// We were attacked by this thing recently -/datum/ai_holder/proc/add_attacker(atom/movable/A) - attackers |= A.name - -/// Forgive this attacker -/datum/ai_holder/proc/remove_attacker(atom/movable/A) - attackers -= A.name - -/** -* Causes targeting to prefer targeting the taunter if possible. -* This generally occurs if more than one option is within striking distance, including the taunter. -* Otherwise the default filter will prefer the closest target. -*/ -/datum/ai_holder/proc/receive_taunt(atom/movable/taunter, force_target_switch = FALSE) - ai_log("receive_taunt() : Was taunted by [taunter].", AI_LOG_INFO) - preferred_target = taunter - if (force_target_switch) - give_target(taunter) - -/datum/ai_holder/proc/lose_taunt() - ai_log("lose_taunt() : Resetting preferred_target.", AI_LOG_INFO) - preferred_target = null diff --git a/code/modules/ai/interfaces.dm b/code/modules/ai/interfaces.dm deleted file mode 100644 index b802b1f435862..0000000000000 --- a/code/modules/ai/interfaces.dm +++ /dev/null @@ -1,102 +0,0 @@ -// 'Interfaces' are procs that the ai_holder datum uses to communicate its will to the mob its attached. -// The reason for using this proc in the middle is to ensure the AI has some form of compatibility with most mob types, -// since some actions work very differently between mob types (e.g. executing an attack as a simple animal compared to a human). -// The AI can just call holder.IAttack(target) and the mob is responsible for determining how to actually attack the target. - -/mob/living/proc/IAttack(atom/A) - return FALSE - -/mob/living/simple_animal/IAttack(atom/A) - if (!canClick()) // Still on cooldown from a "click". - return ATTACK_ON_COOLDOWN - return attack_target(A) // This will set click cooldown. - -/mob/living/carbon/human/IAttack(atom/A) - if (!canClick()) // Still on cooldown from a "click". - return FALSE - return ClickOn(A) // Except this is an actual fake "click". - -/mob/living/proc/IRangedAttack(atom/A) - return FALSE - -/mob/living/simple_animal/IRangedAttack(atom/A) - if (!canClick()) // Still on cooldown from a "click". - return ATTACK_ON_COOLDOWN - return shoot_target(A) - -// Test if the AI is allowed to attempt a ranged attack. -/mob/living/proc/ICheckRangedAttack(atom/A) - return FALSE - -/mob/living/simple_animal/ICheckRangedAttack(atom/A) - if (needs_reload) - if (reload_count >= reload_max) - try_reload() - return FALSE - return projectiletype ? TRUE : FALSE - -/mob/living/proc/ISpecialAttack(atom/A) - return FALSE - -/mob/living/simple_animal/ISpecialAttack(atom/A) - return special_attack_target(A) - -// Is the AI allowed to attempt to do it? -/mob/living/proc/ICheckSpecialAttack(atom/A) - return FALSE - -/mob/living/simple_animal/ICheckSpecialAttack(atom/A) - return can_special_attack(A) && should_special_attack(A) // Just because we can doesn't mean we should. - -/mob/living/proc/ISay(message) - return say(message) - -/mob/living/proc/IIsAlly(mob/living/L) - return istype(L) && src.faction == L.faction - -/mob/living/simple_animal/IIsAlly(mob/living/L) - . = ..() - if (!.) // Outside the faction, try to see if they're friends. - return L in friends - -/mob/living/proc/IGetID() - -/mob/living/simple_animal/IGetID() - return myid - -/mob/living/proc/instasis() - -/mob/living/simple_animal/instasis() - if (in_stasis) - return TRUE - -// Respects move cooldowns as if it had a client. -// Also tries to avoid being superdumb with moving into certain tiles (unless that's desired). -/mob/living/proc/IMove(turf/newloc, safety = TRUE) - - if (!newloc) - return MOVEMENT_FAILED - - var/dir = get_dir(src, newloc) - - // Check to make sure moving to newloc won't actually kill us. e.g. we're a slime and trying to walk onto water. - if (istype(newloc)) - if (safety && !newloc.is_safe_to_enter(src)) - return MOVEMENT_FAILED - - if (!check_solid_ground() && !Allow_Spacemove()) - return MOVEMENT_FAILED - - // Move()ing to another tile successfully returns 32 because BYOND. Would rather deal with TRUE/FALSE-esque terms. - // Note that moving to the same tile will be 'successful'. - var/turf/old_T = get_turf(src) - - // An adjacency check to avoid mobs phasing diagonally past windows. - // This might be better in general movement code but I'm too scared to add it, and most things don't move diagonally anyways. - if (!old_T.Adjacent(newloc)) - return MOVEMENT_FAILED - - . = SelfMove(dir) ? MOVEMENT_SUCCESSFUL : MOVEMENT_FAILED - if (. == MOVEMENT_SUCCESSFUL) - set_dir(get_dir(old_T, newloc)) - return diff --git a/code/modules/ai/say_list.dm b/code/modules/ai/say_list.dm deleted file mode 100644 index 77d513dfb220b..0000000000000 --- a/code/modules/ai/say_list.dm +++ /dev/null @@ -1,114 +0,0 @@ -// A simple datum that just holds many lists of lines for mobs to pick from. -// This is its own datum in order to be able to have different types of mobs be able to use the same lines if desired, -// even when inheritence wouldn't be able to do so. - -// Also note this also contains emotes, despite its name. -// and now sounds because its probably better that way. - -/mob/living - var/datum/say_list/say_list = null - var/say_list_type = /datum/say_list // Type to give us on initialization. Default has empty lists, so the mob will be silent. - -/mob/living/Initialize() - if (say_list_type) - say_list = new say_list_type(src) - return ..() - -/mob/living/Destroy() - QDEL_NULL(say_list) - return ..() - - -/datum/say_list - var/list/speak = list() // Things the mob might say if it talks while idle. - var/list/emote_hear = list() // Hearable emotes it might perform - var/list/emote_see = list() // Unlike speak_emote, the list of things in this variable only show by themselves with no spoken text. IE: Ian barks, Ian yaps - - var/list/say_understood = list() // When accepting an order. - var/list/say_cannot = list() // When they cannot comply. - var/list/say_maybe_target = list() // When they briefly see something. - var/list/say_got_target = list() // When a target is first assigned. - var/list/say_threaten = list() // When threatening someone. - var/list/say_stand_down = list() // When the threatened thing goes away. - var/list/say_escalate = list() // When the threatened thing doesn't go away. - - var/threaten_sound = null // Sound file played when the mob's AI calls threaten_target() for the first time. - var/stand_down_sound = null // Sound file played when the mob's AI loses sight of the threatened target. - - - - - - - -// Subtypes. - -// This one's pretty dumb, but pirates are dumb anyways and it makes for a good test. -/datum/say_list/pirate - speak = list("Yarr!") - - say_understood = list("Alright, matey.") - say_cannot = list("No, matey.") - say_maybe_target = list("Eh?") - say_got_target = list("Yarrrr!") - say_threaten = list("You best leave, this booty is mine.", "No plank to walk on, just walk away.") - say_stand_down = list("Good.") - say_escalate = list("Yarr! The booty is mine!") - -// Mercs! -/datum/say_list/merc - speak = list("When are we gonna get out of this chicken-shit outfit?", - "Wish I had better equipment...", - "I knew I should have been a line chef...", - "Fuckin' helmet keeps fogging up.", - "Anyone else smell that?") - emote_see = list("sniffs", "coughs", "taps his foot", "looks around", "checks his equipment") - - say_understood = list("Understood!", "Affirmative!") - say_cannot = list("Negative!") - say_maybe_target = list("Who's there?") - say_got_target = list("Engaging!") - say_threaten = list("Get out of here!", "Hey! Private Property!") - say_stand_down = list("Good.") - say_escalate = list("Your funeral!", "Bring it!") - - threaten_sound = 'sound/weapons/TargetOn.ogg' - stand_down_sound = 'sound/weapons/TargetOff.ogg' - -/datum/say_list/crab - emote_hear = list("clicks") - emote_see = list("clacks") - -/datum/say_list/spider - emote_hear = list("chitters") - -/datum/say_list/hivebot - speak = list( - "Resuming task: Protect area.", - "No threats found.", - "Error: No targets found." - ) - emote_hear = list("hums ominously", "whirrs softly", "grinds a gear") - emote_see = list("looks around the area", "turns from side to side") - say_understood = list("Affirmative.", "Positive.") - say_cannot = list("Denied.", "Negative.") - say_maybe_target = list("Possible threat detected. Investigating.", "Motion detected.", "Investigating.") - say_got_target = list("Threat detected.", "New task: Remove threat.", "Threat removal engaged.", "Engaging target.") - -/datum/say_list/lizard - emote_hear = list("hisses") - -/datum/say_list/crab - emote_hear = list("clicks") - emote_see = list("clacks") - -/datum/say_list/parrot - - - speak = list("Hi","Hello!","Cracker?") - emote_hear = list("squawks","bawks") - emote_see = list("flutters its wings") - -/* For Meatbag */ -/datum/say_list/parrot/heist - speak = list("Yaaar!","Squaaak!","Fight me Matey!","BAWWWWK Vox trying to eat me!") diff --git a/code/modules/alarm/alarm.dm b/code/modules/alarm/alarm.dm deleted file mode 100644 index 0bd82cfc5e701..0000000000000 --- a/code/modules/alarm/alarm.dm +++ /dev/null @@ -1,154 +0,0 @@ -#define ALARM_RESET_DELAY 100 // How long will the alarm/trigger remain active once origin/source has been found to be gone? - -/datum/alarm_source - var/source = null // The source trigger - var/source_name = "" // The name of the source should it be lost (for example a destroyed camera) - var/duration = 0 // How long this source will be alarming, 0 for indefinetely. - var/severity = 1 // How severe the alarm from this source is. - var/start_time = 0 // When this source began alarming. - var/end_time = 0 // Use to set when this trigger should clear, in case the source is lost. - -/datum/alarm_source/New(var/atom/source) - src.source = source - start_time = world.time - source_name = source.get_source_name() - -/datum/alarm - var/atom/origin //Used to identify the alarm area. - var/list/sources = new() //List of sources triggering the alarm. Used to determine when the alarm should be cleared. - var/list/sources_assoc = new() //Associative list of source triggers. Used to efficiently acquire the alarm source. - var/list/cameras //List of cameras that can be switched to, if the player has that capability. - var/cache_id //ID for camera cache, changed by invalidateCameraCache(). - var/area/last_area //The last acquired area, used should origin be lost (for example a destroyed borg containing an alarming camera). - var/area/last_name //The last acquired name, used should origin be lost - var/area/last_camera_area //The last area in which cameras where fetched, used to see if the camera list should be updated. - var/last_z_level //The last acquired z-level, used should origin be lost - var/end_time //Used to set when this alarm should clear, in case the origin is lost. - -/datum/alarm/New(var/atom/origin, var/atom/source, var/duration, var/severity) - src.origin = origin - - cameras() // Sets up both cameras and last alarm area. - set_source_data(source, duration, severity) - -/datum/alarm/proc/process() - // Has origin gone missing? - if(!origin && !end_time) - end_time = world.time + ALARM_RESET_DELAY - for(var/datum/alarm_source/AS in sources) - // Has the alarm passed its best before date? - if((AS.end_time && world.time > AS.end_time) || (AS.duration && world.time > (AS.start_time + AS.duration))) - sources -= AS - // Has the source gone missing? Then reset the normal duration and set end_time - if(!AS.source && !AS.end_time) // end_time is used instead of duration to ensure the reset doesn't remain in the future indefinetely. - AS.duration = 0 - AS.end_time = world.time + ALARM_RESET_DELAY - -/datum/alarm/proc/set_source_data(var/atom/source, var/duration, var/severity) - var/datum/alarm_source/AS = sources_assoc[source] - if(!AS) - AS = new/datum/alarm_source(source) - sources += AS - sources_assoc[source] = AS - // Currently only non-0 durations can be altered (normal alarms VS EMP blasts) - if(AS.duration) - duration = SecondsToTicks(duration) - AS.duration = duration - AS.severity = severity - -/datum/alarm/proc/clear(var/source) - var/datum/alarm_source/AS = sources_assoc[source] - sources -= AS - sources_assoc -= source - -/datum/alarm/proc/alarm_z() - if(origin) - last_z_level = origin.get_alarm_z(origin) - return last_z_level - -/datum/alarm/proc/alarm_area() - if(!origin) - return last_area - - last_area = origin.get_alarm_area() - return last_area - -/datum/alarm/proc/alarm_name() - if(!origin) - return last_name - - last_name = origin.get_alarm_name() - return last_name - -/datum/alarm/proc/cameras() - // reset camera cache - if(camera_repository.camera_cache_id != cache_id) - cameras = null - cache_id = camera_repository.camera_cache_id - // If the alarm origin has changed area, for example a borg containing an alarming camera, reset the list of cameras - else if(cameras && (last_camera_area != alarm_area())) - cameras = null - - // The list of cameras is also reset by /proc/invalidateCameraCache() - if(!cameras) - cameras = origin ? origin.get_alarm_cameras() : last_area.get_alarm_cameras() - - last_camera_area = last_area - return cameras - -/datum/alarm/proc/max_severity() - var/max_severity = 0 - for(var/datum/alarm_source/AS in sources) - max_severity = max(AS.severity, max_severity) - - return max_severity - -/****************** -* Assisting procs * -******************/ -/atom/proc/get_alarm_z() - return get_z(src) - -/area/get_alarm_z() - return contents.len ? get_z(contents[1]) : 0 - -/atom/proc/get_alarm_area() - return get_area(src) - -/area/get_alarm_area() - return src - -/atom/proc/get_alarm_name() - var/area/A = get_area(src) - return A.name - -/area/get_alarm_name() - return name - -/mob/get_alarm_name() - return name - -/atom/proc/get_source_name() - return name - -/obj/machinery/camera/get_source_name() - return c_tag - -/atom/proc/get_alarm_cameras() - var/area/A = get_area(src) - return A.get_cameras() - -/area/get_alarm_cameras() - return get_cameras() - -/mob/living/silicon/robot/get_alarm_cameras() - var/list/cameras = ..() - if(camera) - cameras += camera - - return cameras - -/mob/living/silicon/robot/syndicate/get_alarm_cameras() - return list() - -#undef ALARM_RESET_DELAY diff --git a/code/modules/alarm/alarm_handler.dm b/code/modules/alarm/alarm_handler.dm deleted file mode 100644 index 96e2ed06a1fad..0000000000000 --- a/code/modules/alarm/alarm_handler.dm +++ /dev/null @@ -1,117 +0,0 @@ -#define ALARM_RAISED 1 -#define ALARM_CLEARED 0 - -/datum/alarm_handler - var/category = "" - var/list/datum/alarm/alarms = new // All alarms, to handle cases when an origin has been deleted with one or more active alarms - var/list/datum/alarm/alarms_assoc = new // Associative list of alarms, to efficiently acquire them based on origin. - var/list/datum/alarm/alarms_by_z = new // Associative list of alarms based on origin z level - var/list/listeners = new // A list of all objects interested in alarm changes. - -/datum/alarm_handler/proc/process() - for(var/datum/alarm/A in alarms) - A.process() - check_alarm_cleared(A) - -/datum/alarm_handler/proc/triggerAlarm(var/atom/origin, var/atom/source, var/duration = 0, var/severity = 1) - var/new_alarm - //Proper origin and source mandatory - if(!(origin && source)) - return - origin = origin.get_alarm_origin() - - new_alarm = 0 - //see if there is already an alarm of this origin - var/datum/alarm/existing = alarms_assoc[origin] - if(existing) - existing.set_source_data(source, duration, severity) - else - existing = new/datum/alarm(origin, source, duration, severity) - new_alarm = 1 - - alarms |= existing - alarms_assoc[origin] = existing - LAZYDISTINCTADD(alarms_by_z["[existing.alarm_z()]"], existing) - if(new_alarm) - alarms = dd_sortedObjectList(alarms) - on_alarm_change(existing, ALARM_RAISED) - - return new_alarm - -/datum/alarm_handler/proc/clearAlarm(var/atom/origin, var/source) - //Proper origin and source mandatory - if(!(origin && source)) - return - origin = origin.get_alarm_origin() - - var/datum/alarm/existing = alarms_assoc[origin] - if(existing) - existing.clear(source) - return check_alarm_cleared(existing) - -// Returns alarms in connected z levels to z_level. If none is given, returns all. -/datum/alarm_handler/proc/alarms(var/z_level) - if(z_level) - . = list() - for(var/z in GetConnectedZlevels(z_level)) - . += alarms_by_z["[z]"] || list() - else - return alarms - -// Returns major alarms in connected z levels to z_level. If none is given, returns all. -/datum/alarm_handler/proc/major_alarms(var/z_level) - return alarms(z_level) - -/datum/alarm_handler/proc/has_major_alarms(var/z_level) - return !!length(major_alarms(z_level)) - -// Returns minor alarms in connected z levels to z_level. If none is given, returns all. -/datum/alarm_handler/proc/minor_alarms(var/z_level) - return alarms(z_level) - -/datum/alarm_handler/proc/has_minor_alarms(var/z_level) - return !!length(minor_alarms(z_level)) - -/datum/alarm_handler/proc/check_alarm_cleared(var/datum/alarm/alarm) - if ((alarm.end_time && world.time > alarm.end_time) || !alarm.sources.len) - alarms -= alarm - alarms_assoc -= alarm.origin - alarms_by_z["[alarm.alarm_z()]"] -= alarm - on_alarm_change(alarm, ALARM_CLEARED) - return 1 - return 0 - -/datum/alarm_handler/proc/on_alarm_change(var/datum/alarm/alarm, var/was_raised) - for(var/obj/machinery/camera/C in alarm.cameras()) - if(was_raised) - C.add_network(category) - else - C.remove_network(category) - notify_listeners(alarm, was_raised) - -/datum/alarm_handler/proc/get_alarm_severity_for_origin(var/atom/origin) - if(!origin) - return - - origin = origin.get_alarm_origin() - var/datum/alarm/existing = alarms_assoc[origin] - if(!existing) - return - - return existing.max_severity() - -/atom/proc/get_alarm_origin() - return src - -/turf/get_alarm_origin() - return get_area(src) - -/datum/alarm_handler/proc/register_alarm(var/object, var/procName) - listeners[object] = procName - -/datum/alarm_handler/proc/unregister_alarm(var/object) - listeners -= object - -/datum/alarm_handler/proc/notify_listeners(var/alarm, var/was_raised) - for(var/listener in listeners) - call(listener, listeners[listener])(src, alarm, was_raised) diff --git a/code/modules/alarm/atmosphere_alarm.dm b/code/modules/alarm/atmosphere_alarm.dm deleted file mode 100644 index 8786d19fd737a..0000000000000 --- a/code/modules/alarm/atmosphere_alarm.dm +++ /dev/null @@ -1,17 +0,0 @@ -/datum/alarm_handler/atmosphere - category = NETWORK_ALARM_ATMOS - -/datum/alarm_handler/atmosphere/triggerAlarm(var/atom/origin, var/atom/source, var/duration = 0, var/severity = 1) - ..() - -/datum/alarm_handler/atmosphere/major_alarms(var/z_level) - . = list() - for(var/datum/alarm/A in ..()) - if(A.max_severity() > 1) - . += A - -/datum/alarm_handler/atmosphere/minor_alarms(var/z_level) - . = list() - for(var/datum/alarm/A in ..()) - if(A.max_severity() == 1) - . += A diff --git a/code/modules/alarm/camera_alarm.dm b/code/modules/alarm/camera_alarm.dm deleted file mode 100644 index 5cf0cff6cdbe0..0000000000000 --- a/code/modules/alarm/camera_alarm.dm +++ /dev/null @@ -1,2 +0,0 @@ -/datum/alarm_handler/camera - category = NETWORK_ALARM_CAMERA diff --git a/code/modules/alarm/fire_alarm.dm b/code/modules/alarm/fire_alarm.dm deleted file mode 100644 index 553252aada69a..0000000000000 --- a/code/modules/alarm/fire_alarm.dm +++ /dev/null @@ -1,11 +0,0 @@ -/datum/alarm_handler/fire - category = NETWORK_ALARM_FIRE - -/datum/alarm_handler/fire/on_alarm_change(var/datum/alarm/alarm, var/was_raised) - var/area/A = alarm.origin - if(istype(A)) - if(was_raised) - A.fire_alert() - else - A.fire_reset() - ..() diff --git a/code/modules/alarm/motion_alarm.dm b/code/modules/alarm/motion_alarm.dm deleted file mode 100644 index 292d57040ac16..0000000000000 --- a/code/modules/alarm/motion_alarm.dm +++ /dev/null @@ -1,2 +0,0 @@ -/datum/alarm_handler/motion - category = NETWORK_ALARM_MOTION diff --git a/code/modules/alarm/power_alarm.dm b/code/modules/alarm/power_alarm.dm deleted file mode 100644 index 64e3cd38d6079..0000000000000 --- a/code/modules/alarm/power_alarm.dm +++ /dev/null @@ -1,2 +0,0 @@ -/datum/alarm_handler/power - category = NETWORK_ALARM_POWER diff --git a/code/modules/assembly/assembly.dm b/code/modules/assembly/assembly.dm deleted file mode 100644 index bac28e992427b..0000000000000 --- a/code/modules/assembly/assembly.dm +++ /dev/null @@ -1,178 +0,0 @@ -/obj/item/device/assembly - name = "assembly" - desc = "A small electronic device that should never exist." - icon = 'icons/obj/assemblies/new_assemblies.dmi' - icon_state = "" - obj_flags = OBJ_FLAG_CONDUCTIBLE - w_class = ITEM_SIZE_SMALL - matter = list(MATERIAL_STEEL = 100) - throwforce = 2 - throw_speed = 3 - throw_range = 10 - origin_tech = list(TECH_MAGNET = 1) - - var/secured = 1 - var/list/attached_overlays = null - var/obj/item/device/assembly_holder/holder = null - var/cooldown = 0//To prevent spam - var/wires = WIRE_RECEIVE | WIRE_PULSE - - var/const/WIRE_RECEIVE = 1 //Allows Pulsed(0) to call Activate() - var/const/WIRE_PULSE = 2 //Allows Pulse(0) to act on the holder - var/const/WIRE_PULSE_SPECIAL = 4 //Allows Pulse(0) to act on the holders special assembly - var/const/WIRE_RADIO_RECEIVE = 8 //Allows Pulsed(1) to call Activate() - var/const/WIRE_RADIO_PULSE = 16 //Allows Pulse(1) to send a radio message - -/obj/item/device/assembly/proc/activate() //What the device does when turned on - return - -/obj/item/device/assembly/proc/pulsed(var/radio = 0) //Called when another assembly acts on this one, var/radio will determine where it came from for wire calcs - return - -/obj/item/device/assembly/proc/pulse(var/radio = 0) //Called when this device attempts to act on another device, var/radio determines if it was sent via radio or direct - return - -/obj/item/device/assembly/proc/toggle_secure() //Code that has to happen when the assembly is un\secured goes here - return - -/obj/item/device/assembly/proc/attach_assembly(var/obj/A, var/mob/user) //Called when an assembly is attacked by another - return - -/obj/item/device/assembly/proc/process_cooldown() //Called via spawn(10) to have it count down the cooldown var - return - -/obj/item/device/assembly/proc/holder_movement() //Called when the holder is moved - return - -/obj/item/device/assembly/interact(mob/user as mob) //Called when attack_self is called - return - - -/obj/item/device/assembly/process_cooldown() - cooldown-- - if(cooldown <= 0) return 0 - spawn(10) - process_cooldown() - return 1 - - -/obj/item/device/assembly/pulsed(var/radio = 0) - if(holder && (wires & WIRE_RECEIVE)) - activate() - if(radio && (wires & WIRE_RADIO_RECEIVE)) - activate() - return 1 - - -/obj/item/device/assembly/pulse(var/radio = 0) - if(holder && (wires & WIRE_PULSE)) - holder.process_activation(src, 1, 0) - if(holder && (wires & WIRE_PULSE_SPECIAL)) - holder.process_activation(src, 0, 1) -// if(radio && (wires & WIRE_RADIO_PULSE)) - //Not sure what goes here quite yet send signal? - return 1 - - -/obj/item/device/assembly/activate() - if(!secured || (cooldown > 0)) return 0 - cooldown = 2 - spawn(10) - process_cooldown() - return 1 - - -/obj/item/device/assembly/toggle_secure() - secured = !secured - update_icon() - return secured - - -/obj/item/device/assembly/attach_assembly(var/obj/item/device/assembly/A, var/mob/user) - holder = new/obj/item/device/assembly_holder(get_turf(src)) - if(holder.attach(A,src,user)) - to_chat(user, "You attach \the [A] to \the [src]!") - return 1 - return 0 - - -/obj/item/device/assembly/attackby(obj/item/W as obj, mob/user as mob) - if(isassembly(W)) - var/obj/item/device/assembly/A = W - if((!A.secured) && (!secured)) - attach_assembly(A,user) - return - if(isScrewdriver(W)) - if(toggle_secure()) - to_chat(user, "\The [src] is ready!") - else - to_chat(user, "\The [src] can now be attached!") - return - ..() - return - - -/obj/item/device/assembly/Process() - return PROCESS_KILL - - -/obj/item/device/assembly/examine(mob/user, distance) - . = ..() - if(distance <= 1 || loc == user) - if(secured) - to_chat(user, "\The [src] is ready!") - else - to_chat(user, "\The [src] can be attached!") - - -/obj/item/device/assembly/attack_self(mob/user as mob) - if(!user) return 0 - user.set_machine(src) - interact(user) - return 1 - -/obj/item/device/assembly/interact(mob/user as mob) - return //HTML MENU FOR WIRES GOES HERE - -/obj/item/device/assembly/nano_host() - if(istype(loc, /obj/item/device/assembly_holder)) - return loc.nano_host() - return ..() - -/* - var/small_icon_state = null//If this obj will go inside the assembly use this for icons - var/list/small_icon_state_overlays = null//Same here - var/obj/holder = null - var/cooldown = 0//To prevent spam - - proc - Activate()//Called when this assembly is pulsed by another one - Process_cooldown()//Call this via spawn(10) to have it count down the cooldown var - Attach_Holder(var/obj/H, var/mob/user)//Called when an assembly holder attempts to attach, sets src's loc in here - - - Activate() - if(cooldown > 0) - return 0 - cooldown = 2 - spawn(10) - Process_cooldown() - //Rest of code here - return 0 - - - Process_cooldown() - cooldown-- - if(cooldown <= 0) return 0 - spawn(10) - Process_cooldown() - return 1 - - - Attach_Holder(var/obj/H, var/mob/user) - if(!H) return 0 - if(!H.IsAssemblyHolder()) return 0 - //Remember to have it set its loc somewhere in here - - -*/ diff --git a/code/modules/assembly/helpers.dm b/code/modules/assembly/helpers.dm deleted file mode 100644 index 95b6fdb296f81..0000000000000 --- a/code/modules/assembly/helpers.dm +++ /dev/null @@ -1,32 +0,0 @@ -/proc/isassembly(O) - if(istype(O, /obj/item/device/assembly)) - return 1 - return 0 - -/proc/isigniter(O) - if(istype(O, /obj/item/device/assembly/igniter)) - return 1 - return 0 - -/proc/isprox(O) - if(istype(O, /obj/item/device/assembly/prox_sensor)) - return 1 - return 0 - -/proc/issignaler(O) - if(istype(O, /obj/item/device/assembly/signaler)) - return 1 - return 0 - -/proc/istimer(O) - if(istype(O, /obj/item/device/assembly/timer)) - return 1 - return 0 - - -/* -Name: IsAssemblyHolder -Desc: If true is an object that can hold an assemblyholder object -*/ -/obj/proc/IsAssemblyHolder() - return 0 diff --git a/code/modules/assembly/holder.dm b/code/modules/assembly/holder.dm deleted file mode 100644 index 753c95d1a2480..0000000000000 --- a/code/modules/assembly/holder.dm +++ /dev/null @@ -1,253 +0,0 @@ -/obj/item/device/assembly_holder - name = "Assembly" - icon = 'icons/obj/assemblies/new_assemblies.dmi' - icon_state = "holder" - item_state = "assembly" - movable_flags = MOVABLE_FLAG_PROXMOVE - obj_flags = OBJ_FLAG_CONDUCTIBLE - throwforce = 5 - w_class = ITEM_SIZE_SMALL - throw_speed = 3 - throw_range = 10 - var/secured = 0 - var/obj/item/device/assembly/a_left = null - var/obj/item/device/assembly/a_right = null - var/obj/special_assembly = null - - -/obj/item/device/assembly_holder/proc/attach(var/obj/item/device/D, var/obj/item/device/D2, var/mob/user) - return - - -/obj/item/device/assembly_holder/proc/process_activation(var/obj/item/device/D) - return - - -/obj/item/device/assembly_holder/proc/detached() - return - - -/obj/item/device/assembly_holder/IsAssemblyHolder() - return 1 - - -/obj/item/device/assembly_holder/attach(var/obj/item/device/assembly/D, var/obj/item/device/assembly/D2, var/mob/user) - if((!D)||(!D2)) - return 0 - if((!istype(D))||(!istype(D2))) - return 0 - if((D.secured)||(D2.secured)) - return 0 - if(user) - user.drop_from_inventory(D) - user.drop_from_inventory(D2) - D.holder = src - D2.holder = src - D.forceMove(src) - D2.forceMove(src) - a_left = D - a_right = D2 - SetName("[D.name]-[D2.name] assembly") - update_icon() - usr.put_in_hands(src) - return 1 - - -/obj/item/device/assembly_holder/on_update_icon() - overlays.Cut() - if(a_left) - overlays += "[a_left.icon_state]_left" - for(var/O in a_left.attached_overlays) - overlays += "[O]_l" - if(a_right) - overlays += "[a_right.icon_state]_right" - for(var/O in a_right.attached_overlays) - overlays += "[O]_r" - if(master) - master.update_icon() - - -/obj/item/device/assembly_holder/HasProximity(atom/movable/AM as mob|obj) - if(a_left) - a_left.HasProximity(AM) - if(a_right) - a_right.HasProximity(AM) - if(special_assembly) - special_assembly.HasProximity(AM) - - -/obj/item/device/assembly_holder/Crossed(atom/movable/AM as mob|obj) - if(a_left) - a_left.Crossed(AM) - if(a_right) - a_right.Crossed(AM) - if(special_assembly) - special_assembly.Crossed(AM) - - -/obj/item/device/assembly_holder/on_found(mob/finder as mob) - if(a_left) - a_left.on_found(finder) - if(a_right) - a_right.on_found(finder) - if(special_assembly) - if(istype(special_assembly, /obj/item)) - var/obj/item/S = special_assembly - S.on_found(finder) - - -/obj/item/device/assembly_holder/Move() - ..() - if(a_left && a_right) - a_left.holder_movement() - a_right.holder_movement() - return - - -/obj/item/device/assembly_holder/attack_hand() - if(a_left && a_right) - a_left.holder_movement() - a_right.holder_movement() - ..() - return - - -/obj/item/device/assembly_holder/attackby(obj/item/W as obj, mob/user as mob) - if(isScrewdriver(W)) - if(!a_left || !a_right) - to_chat(user, "BUG:Assembly part missing, please report this!") - return - a_left.toggle_secure() - a_right.toggle_secure() - secured = !secured - if(secured) - to_chat(user, "\The [src] is ready!") - else - to_chat(user, "\The [src] can now be taken apart!") - update_icon() - return - ..() - - -/obj/item/device/assembly_holder/attack_self(mob/user as mob) - add_fingerprint(user) - if(secured) - if(!a_left || !a_right) - to_chat(user, "Assembly part missing!") - return - if(istype(a_left,a_right.type))//If they are the same type it causes issues due to window code - switch(alert("Which side would you like to use?",,"Left","Right")) - if("Left") a_left.attack_self(user) - if("Right") a_right.attack_self(user) - return - else - if(!istype(a_left,/obj/item/device/assembly/igniter)) - a_left.attack_self(user) - if(!istype(a_right,/obj/item/device/assembly/igniter)) - a_right.attack_self(user) - else - var/turf/T = get_turf(src) - if(!T) return 0 - if(a_left) - a_left.holder = null - a_left.forceMove(T) - if(a_right) - a_right.holder = null - a_right.forceMove(T) - spawn(0) - qdel(src) - - -/obj/item/device/assembly_holder/process_activation(var/obj/D, var/normal = 1, var/special = 1) - if(!D) - return 0 - if(!secured) - visible_message("[icon2html(src, viewers(get_turf(src)))] *beep* *beep*", "*beep* *beep*") - if((normal) && (a_right) && (a_left)) - if(a_right != D) - a_right.pulsed(0) - if(a_left != D) - a_left.pulsed(0) - if(master) - master.receive_signal() - return 1 - - -/obj/item/device/assembly_holder/Initialize() - . = ..() - GLOB.listening_objects += src - - -/obj/item/device/assembly_holder/Destroy() - GLOB.listening_objects -= src - return ..() - - -/obj/item/device/assembly_holder/hear_talk(mob/living/M as mob, msg, verb, datum/language/speaking) - if(a_right) - a_right.hear_talk(M,msg,verb,speaking) - if(a_left) - a_left.hear_talk(M,msg,verb,speaking) - - -/obj/item/device/assembly_holder/examine(mob/user, distance) - . = ..() - if (distance > 1) - return - to_chat(user, "\The [src] is [secured ? "ready": "not secured"]!") - - -/obj/item/device/assembly_holder/timer_igniter - name = "timer-igniter assembly" - - -/obj/item/device/assembly_holder/timer_igniter/New() - ..() - var/obj/item/device/assembly/igniter/ign = new(src) - ign.secured = 1 - ign.holder = src - var/obj/item/device/assembly/timer/tmr = new(src) - tmr.time=5 - tmr.secured = 1 - tmr.holder = src - START_PROCESSING(SSobj, tmr) - a_left = tmr - a_right = ign - secured = 1 - update_icon() - SetName(initial(name) + " ([tmr.time] secs)") - loc.verbs += /obj/item/device/assembly_holder/timer_igniter/verb/configure - - -/obj/item/device/assembly_holder/timer_igniter/detached() - loc.verbs -= /obj/item/device/assembly_holder/timer_igniter/verb/configure - ..() - - -/obj/item/device/assembly_holder/timer_igniter/verb/configure() - set name = "Set Timer" - set category = "Object" - set src in usr - if ( !(usr.stat || usr.restrained()) ) - var/obj/item/device/assembly_holder/holder - if(istype(src,/obj/item/grenade/chem_grenade)) - var/obj/item/grenade/chem_grenade/gren = src - holder=gren.detonator - var/obj/item/device/assembly/timer/tmr = holder.a_left - if(!istype(tmr,/obj/item/device/assembly/timer)) - tmr = holder.a_right - if(!istype(tmr,/obj/item/device/assembly/timer)) - to_chat(usr, "This detonator has no timer.") - return - if(tmr.timing) - to_chat(usr, "Clock is ticking already.") - else - var/ntime = input("Enter desired time in seconds", "Time", "5") as num - if (ntime>0 && ntime<1000) - tmr.time = ntime - SetName(initial(name) + "([tmr.time] secs)") - to_chat(usr, "Timer set to [tmr.time] seconds.") - else - to_chat(usr, "Timer can't be [ntime<=0?"negative":"more than 1000 seconds"].") - else - to_chat(usr, "You cannot do this while [usr.stat?"unconscious/dead":"restrained"].") diff --git a/code/modules/assembly/igniter.dm b/code/modules/assembly/igniter.dm deleted file mode 100644 index f0dc0457eba6f..0000000000000 --- a/code/modules/assembly/igniter.dm +++ /dev/null @@ -1,37 +0,0 @@ -/obj/item/device/assembly/igniter - name = "igniter" - desc = "A small electronic device able to ignite combustable substances." - icon_state = "igniter" - origin_tech = list(TECH_MAGNET = 1) - matter = list(MATERIAL_STEEL = 500, MATERIAL_GLASS = 50, MATERIAL_WASTE = 10) - - secured = 1 - wires = WIRE_RECEIVE - -/obj/item/device/assembly/igniter/activate() - if(!..()) return 0//Cooldown check - - if(holder && istype(holder.loc,/obj/item/grenade/chem_grenade)) - var/obj/item/grenade/chem_grenade/grenade = holder.loc - grenade.detonate() - else - var/turf/location = get_turf(loc) - if(location) - location.hotspot_expose(1000,1000) - if (istype(src.loc,/obj/item/device/assembly_holder)) - if (istype(src.loc.loc, /obj/structure/reagent_dispensers/fueltank)) - var/obj/structure/reagent_dispensers/fueltank/tank = src.loc.loc - if (tank && tank.modded) - tank.explode() - - var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread - s.set_up(3, 1, src) - s.start() - - return 1 - - -/obj/item/device/assembly/igniter/attack_self(mob/user as mob) - activate() - add_fingerprint(user) - return diff --git a/code/modules/assembly/infrared.dm b/code/modules/assembly/infrared.dm deleted file mode 100644 index 16fac79eec734..0000000000000 --- a/code/modules/assembly/infrared.dm +++ /dev/null @@ -1,149 +0,0 @@ -//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:32 - -/obj/item/device/assembly/infra - name = "infrared emitter" - desc = "Emits a visible or invisible beam and is triggered when the beam is interrupted." - icon_state = "infrared" - origin_tech = list(TECH_MAGNET = 2) - matter = list(MATERIAL_STEEL = 1000, MATERIAL_GLASS = 500, MATERIAL_WASTE = 100) - wires = WIRE_PULSE - secured = 0 - obj_flags = OBJ_FLAG_CONDUCTIBLE | OBJ_FLAG_ROTATABLE - - var/on = 0 - var/visible = 0 - var/list/beams - var/list/seen_turfs - var/datum/proximity_trigger/line/proximity_trigger - -/obj/item/device/assembly/infra/New() - ..() - beams = list() - seen_turfs = list() - proximity_trigger = new(src, /obj/item/device/assembly/infra/proc/on_beam_entered, /obj/item/device/assembly/infra/proc/on_visibility_change, world.view, PROXIMITY_EXCLUDE_HOLDER_TURF) - -/obj/item/device/assembly/infra/Destroy() - qdel(proximity_trigger) - proximity_trigger = null - - . = ..() - -/obj/item/device/assembly/infra/activate() - if(!..()) - return 0//Cooldown check - set_active(!on) - return 1 - -/obj/item/device/assembly/infra/proc/set_active(new_on) - if(new_on == on) - return - on = new_on - if(on) - proximity_trigger.register_turfs() - else - proximity_trigger.unregister_turfs() - update_icon() - -/obj/item/device/assembly/infra/toggle_secure() - secured = !secured - set_active(secured ? FALSE : on) - return secured - -/obj/item/device/assembly/infra/on_update_icon() - overlays.Cut() - if(on) - overlays += "infrared_on" - if(holder) - holder.update_icon() - update_beams() - -/obj/item/device/assembly/infra/interact(mob/user as mob)//TODO: change this this to the wire control panel - if(!secured) - return - if(!CanInteract(user, GLOB.physical_state)) - return - - user.set_machine(src) - var/dat = list() - dat += text("Infrared Laser\nStatus: []
              \nVisibility: []
              \n
              ", (on ? text("On", src) : text("Off", src)), (src.visible ? text("Visible", src) : text("Invisible", src))) - dat += "

              Refresh" - dat += "

              Close" - show_browser(user, jointext(dat,null), "window=infra") - onclose(user, "infra") - -/obj/item/device/assembly/infra/Topic(href, href_list, state = GLOB.physical_state) - if(..()) - close_browser(usr, "window=infra") - onclose(usr, "infra") - return 1 - - if(href_list["state"]) - set_active(!on) - - if(href_list["visible"]) - visible = !(visible) - update_icon() - - if(href_list["close"]) - close_browser(usr, "window=infra") - return - - if(usr) - attack_self(usr) - -/obj/item/device/assembly/infra/proc/on_beam_entered(var/atom/enterer) - if(enterer == src) - return - if(enterer.invisibility > INVISIBILITY_LEVEL_TWO) - return - if(!secured || !on || cooldown > 0) - return 0 - if((ismob(enterer) && !isliving(enterer))) // Observers and their ilk don't count even if visible - return - - pulse(0) - if(!holder) - visible_message("[icon2html(src, viewers(get_turf(src)))] *beep* *beep*") - cooldown = 2 - spawn(10) - process_cooldown() - -/obj/item/device/assembly/infra/proc/on_visibility_change(var/list/old_turfs, var/list/new_turfs) - seen_turfs = new_turfs - update_beams() - -/obj/item/device/assembly/infra/proc/update_beams() - create_update_and_delete_beams(on, visible, dir, seen_turfs, beams) - -/proc/create_update_and_delete_beams(var/active, var/visible, var/dir, var/list/seen_turfs, var/list/existing_beams) - if(!active) - for(var/b in existing_beams) - qdel(b) - existing_beams.Cut() - return - - var/list/turfs_that_need_beams = seen_turfs.Copy() - - for(var/b in existing_beams) - var/obj/effect/beam/ir_beam/beam = b - if(beam.loc in turfs_that_need_beams) - turfs_that_need_beams -= beam.loc - beam.set_invisibility(visible ? 0 : INVISIBILITY_MAXIMUM) - else - existing_beams -= beam - qdel(beam) - - if(!visible) - return - - for(var/t in turfs_that_need_beams) - var/obj/effect/beam/ir_beam/beam = new(t) - existing_beams += beam - beam.set_dir(dir) - -/obj/effect/beam/ir_beam - name = "ir beam" - icon = 'icons/obj/projectiles.dmi' - icon_state = "ibeam" - anchored = TRUE - simulated = FALSE diff --git a/code/modules/assembly/mousetrap.dm b/code/modules/assembly/mousetrap.dm deleted file mode 100644 index 37ace52e091ae..0000000000000 --- a/code/modules/assembly/mousetrap.dm +++ /dev/null @@ -1,125 +0,0 @@ -/obj/item/device/assembly/mousetrap - name = "mousetrap" - desc = "A handy little spring-loaded trap for catching pesty rodents." - icon_state = "mousetrap" - origin_tech = list(TECH_COMBAT = 1) - matter = list(MATERIAL_STEEL = 100, MATERIAL_WASTE = 10) - var/armed = 0 - -/obj/item/device/assembly/mousetrap/examine(mob/user) - . = ..() - if(armed) - to_chat(user, "It looks like it's armed.") - -/obj/item/device/assembly/mousetrap/on_update_icon() - if(armed) - icon_state = "mousetraparmed" - else - icon_state = "mousetrap" - if(holder) - holder.update_icon() - -/obj/item/device/assembly/mousetrap/proc/triggered(mob/target, var/type = "feet") - if(!armed) - return - var/obj/item/organ/external/affecting = null - if(ishuman(target)) - var/mob/living/carbon/human/H = target - switch(type) - if("feet") - if(!H.shoes) - affecting = H.get_organ(pick(BP_L_LEG, BP_R_LEG)) - H.Weaken(3) - if(BP_L_HAND, BP_R_HAND) - if(!H.gloves) - affecting = H.get_organ(type) - H.Stun(3) - if(affecting) - affecting.take_external_damage(1, 0) - H.updatehealth() - else if(ismouse(target)) - var/mob/living/simple_animal/passive/mouse/M = target - visible_message("SPLAT!") - M.splat() - playsound(target.loc, 'sound/effects/snap.ogg', 50, 1) - reset_plane_and_layer() - armed = 0 - update_icon() - pulse(0) - - -/obj/item/device/assembly/mousetrap/attack_self(mob/living/user) - if(!armed) - to_chat(user, "You arm [src].") - else - if((MUTATION_CLUMSY in user.mutations) && prob(50)) - var/which_hand = BP_L_HAND - if(!user.hand) - which_hand = BP_R_HAND - triggered(user, which_hand) - user.visible_message("[user] accidentally sets off [src], breaking their fingers.", \ - "You accidentally trigger [src]!") - return - to_chat(user, "You disarm [src].") - armed = !armed - update_icon() - playsound(user.loc, 'sound/weapons/handcuffs.ogg', 30, 1, -3) - - -/obj/item/device/assembly/mousetrap/attack_hand(mob/living/user) - if(armed) - if((MUTATION_CLUMSY in user.mutations) && prob(50)) - var/which_hand = BP_L_HAND - if(!user.hand) - which_hand = BP_R_HAND - triggered(user, which_hand) - user.visible_message("[user] accidentally sets off [src], breaking their fingers.", \ - "You accidentally trigger [src]!") - return - ..() - - -/obj/item/device/assembly/mousetrap/Crossed(atom/movable/AM) - if(armed) - if(ishuman(AM)) - var/mob/living/carbon/H = AM - if(!MOVING_DELIBERATELY(H)) - triggered(H) - H.visible_message("[H] accidentally steps on [src].", \ - "You accidentally step on [src]") - if(ismouse(AM)) - triggered(AM) - ..() - - -/obj/item/device/assembly/mousetrap/on_found(mob/finder) - if(armed) - finder.visible_message("[finder] accidentally sets off [src], breaking their fingers.", \ - "You accidentally trigger [src]!") - triggered(finder, finder.hand ? BP_L_HAND : BP_R_HAND) - return 1 //end the search! - return 0 - - -/obj/item/device/assembly/mousetrap/hitby(atom/A) - if(!armed) - return ..() - visible_message("[src] is triggered by [A].") - triggered(A) - - -/obj/item/device/assembly/mousetrap/armed - icon_state = "mousetraparmed" - armed = 1 - - -/obj/item/device/assembly/mousetrap/verb/hide_under() - set src in oview(1) - set name = "Hide" - set category = "Object" - - if(usr.incapacitated()) - return - - layer = MOUSETRAP_LAYER - to_chat(usr, "You hide [src].") diff --git a/code/modules/assembly/proximity.dm b/code/modules/assembly/proximity.dm deleted file mode 100644 index 668e33440e5c2..0000000000000 --- a/code/modules/assembly/proximity.dm +++ /dev/null @@ -1,163 +0,0 @@ -/obj/item/device/assembly/prox_sensor - name = "proximity sensor" - desc = "Used for scanning and alerting when someone enters a certain proximity." - icon_state = "prox" - origin_tech = list(TECH_MAGNET = 1) - matter = list(MATERIAL_STEEL = 800, MATERIAL_GLASS = 200, MATERIAL_WASTE = 50) - movable_flags = MOVABLE_FLAG_PROXMOVE - wires = WIRE_PULSE - - secured = 0 - - var/scanning = 0 - var/timing = 0 - var/time = 10 - - var/range = 2 - -/obj/item/device/assembly/prox_sensor/proc/toggle_scan() -/obj/item/device/assembly/prox_sensor/proc/sense() - - -/obj/item/device/assembly/prox_sensor/activate() - if(!..()) return 0//Cooldown check - timing = !timing - update_icon() - return 0 - - -/obj/item/device/assembly/prox_sensor/toggle_secure() - secured = !secured - if(secured) - START_PROCESSING(SSobj, src) - else - scanning = 0 - timing = 0 - STOP_PROCESSING(SSobj, src) - update_icon() - return secured - - -/obj/item/device/assembly/prox_sensor/HasProximity(atom/movable/movable) - if (ismob(movable) && !isliving(movable)) - return - if (istype(movable, /obj/effect/beam)) - return - if (movable.move_speed < 12) - sense() - - -/obj/item/device/assembly/prox_sensor/sense() - var/turf/mainloc = get_turf(src) -// if(scanning && cooldown <= 0) -// mainloc.visible_message("\icon[src] *boop* *boop*", "*boop* *boop*") - if((!holder && !secured)||(!scanning)||(cooldown > 0)) return 0 - pulse(0) - if(!holder) - mainloc.visible_message("\icon[src] *beep* *beep*", "*beep* *beep*") - cooldown = 2 - spawn(10) - process_cooldown() - return - - -/obj/item/device/assembly/prox_sensor/Process() - if(scanning) - var/turf/mainloc = get_turf(src) - for(var/mob/living/A in range(range,mainloc)) - if (A.move_speed < 12) - sense() - - if(timing && (time >= 0)) - time-- - if(timing && time <= 0) - timing = 0 - toggle_scan() - time = 10 - return - - -/obj/item/device/assembly/prox_sensor/dropped() - spawn(0) - sense() - return - return - - -/obj/item/device/assembly/prox_sensor/toggle_scan() - if(!secured) return 0 - scanning = !scanning - update_icon() - return - - -/obj/item/device/assembly/prox_sensor/on_update_icon() - overlays.Cut() - attached_overlays = list() - if(timing) - overlays += "prox_timing" - attached_overlays += "prox_timing" - if(scanning) - overlays += "prox_scanning" - attached_overlays += "prox_scanning" - if(holder) - holder.update_icon() - if(holder && istype(holder.loc,/obj/item/grenade/chem_grenade)) - var/obj/item/grenade/chem_grenade/grenade = holder.loc - grenade.primed(scanning) - return - - -/obj/item/device/assembly/prox_sensor/Move() - ..() - sense() - return - - -/obj/item/device/assembly/prox_sensor/interact(mob/user as mob)//TODO: Change this to the wires thingy - if(!secured) - user.show_message("The [name] is unsecured!") - return 0 - var/second = time % 60 - var/minute = (time - second) / 60 - var/dat = text("Proximity Sensor\n[] []:[]\n- - + +\n", (timing ? text("Arming", src) : text("Not Arming", src)), minute, second, src, src, src, src) - dat += text("
              Range: - [] +", src, range, src) - dat += "
              [scanning?"Armed":"Unarmed"] (Movement sensor active when armed!)" - dat += "

              Refresh" - dat += "

              Close" - show_browser(user, dat, "window=prox") - onclose(user, "prox") - return - - -/obj/item/device/assembly/prox_sensor/Topic(href, href_list, state = GLOB.physical_state) - if((. = ..())) - close_browser(usr, "window=prox") - onclose(usr, "prox") - return - - if(href_list["scanning"]) - toggle_scan() - - if(href_list["time"]) - timing = text2num(href_list["time"]) - update_icon() - - if(href_list["tp"]) - var/tp = text2num(href_list["tp"]) - time += tp - time = min(max(round(time), 0), 600) - - if(href_list["range"]) - var/r = text2num(href_list["range"]) - range += r - range = min(max(range, 1), 5) - - if(href_list["close"]) - close_browser(usr, "window=prox") - return - - if(usr) - attack_self(usr) - - return \ No newline at end of file diff --git a/code/modules/assembly/shock_kit.dm b/code/modules/assembly/shock_kit.dm deleted file mode 100644 index a7a3bb8e8195d..0000000000000 --- a/code/modules/assembly/shock_kit.dm +++ /dev/null @@ -1,43 +0,0 @@ -/obj/item/assembly/shock_kit - name = "electrohelmet assembly" - desc = "This appears to be made from both an electropack and a helmet." - icon_state = "shock_kit" - var/obj/item/clothing/head/helmet/part1 = null - var/obj/item/device/radio/electropack/part2 = null - var/status = 0 - w_class = ITEM_SIZE_HUGE - obj_flags = OBJ_FLAG_CONDUCTIBLE - -/obj/item/assembly/shock_kit/Destroy() - qdel(part1) - qdel(part2) - ..() - return - -/obj/item/assembly/shock_kit/attackby(obj/item/W as obj, mob/user as mob) - if(isWrench(W) && !status) - part1.dropInto(loc) - part2.dropInto(loc) - part1.master = null - part2.master = null - part1 = null - part2 = null - qdel(src) - return - if(isScrewdriver(W)) - status = !status - to_chat(user, "[src] is now [status ? "secured" : "unsecured"]!") - add_fingerprint(user) - return - -/obj/item/assembly/shock_kit/attack_self(mob/user as mob) - part1.attack_self(user, status) - part2.attack_self(user, status) - add_fingerprint(user) - return - -/obj/item/assembly/shock_kit/receive_signal() - if(istype(loc, /obj/structure/bed/chair/e_chair)) - var/obj/structure/bed/chair/e_chair/C = loc - C.shock() - return diff --git a/code/modules/assembly/signaler.dm b/code/modules/assembly/signaler.dm deleted file mode 100644 index eb8ef0ad42a18..0000000000000 --- a/code/modules/assembly/signaler.dm +++ /dev/null @@ -1,187 +0,0 @@ -/obj/item/device/assembly/signaler - name = "remote signaling device" - desc = "Used to remotely activate devices." - icon_state = "signaller" - item_state = "signaler" - origin_tech = list(TECH_MAGNET = 1) - matter = list(MATERIAL_STEEL = 1000, MATERIAL_GLASS = 200, MATERIAL_WASTE = 100) - wires = WIRE_RECEIVE | WIRE_PULSE | WIRE_RADIO_PULSE | WIRE_RADIO_RECEIVE - - secured = 1 - - var/code = 30 - var/frequency = 1457 - var/delay = 0 - var/airlock_wire = null - var/datum/wires/connected = null - var/datum/radio_frequency/radio_connection - var/deadman = 0 - var/obj/machinery/atmospherics/pipe/cap/sparker/mholder - -/obj/item/device/assembly/signaler/New() - ..() - spawn(40) - set_frequency(frequency) - return - - -/obj/item/device/assembly/signaler/activate() - if(cooldown > 0) return 0 - cooldown = 2 - spawn(10) - process_cooldown() - - signal() - return 1 - -/obj/item/device/assembly/signaler/on_update_icon() - if(holder) - holder.update_icon() - return - -/obj/item/device/assembly/signaler/interact(mob/user as mob, flag1) - var/t1 = "-------" - var/dat = {" - - - Send Signal
              - Frequency/Code for signaler:
              - Frequency: - - - - - [format_frequency(src.frequency)] - + - +
              - - Code: - - - - - [src.code] - + - +
              - [t1] -
              "} - show_browser(user, dat, "window=radio") - onclose(user, "radio") - return - - -/obj/item/device/assembly/signaler/Topic(href, href_list, state = GLOB.physical_state) - if((. = ..())) - close_browser(usr, "window=radio") - onclose(usr, "radio") - return - - if (href_list["freq"]) - var/new_frequency = (frequency + text2num(href_list["freq"])) - if(new_frequency < RADIO_LOW_FREQ || new_frequency > RADIO_HIGH_FREQ) - new_frequency = sanitize_frequency(new_frequency, RADIO_LOW_FREQ, RADIO_HIGH_FREQ) - set_frequency(new_frequency) - - if(href_list["code"]) - src.code += text2num(href_list["code"]) - src.code = round(src.code) - src.code = min(100, src.code) - src.code = max(1, src.code) - - if(href_list["send"]) - spawn( 0 ) - signal() - - if(usr) - attack_self(usr) - - return - - -/obj/item/device/assembly/signaler/proc/signal() - if(!radio_connection) return - - var/datum/signal/signal = new - signal.source = src - signal.encryption = code - signal.data["message"] = "ACTIVATE" - radio_connection.post_signal(src, signal) - return -/* - for(var/obj/item/device/assembly/signaler/S in world) - if(!S) continue - if(S == src) continue - if((S.frequency == src.frequency) && (S.code == src.code)) - spawn(0) - if(S) S.pulse(0) - return 0*/ - - -/obj/item/device/assembly/signaler/pulse(var/radio = 0) - if(src.connected && src.wires) - connected.Pulse(src) - else if(holder) - holder.process_activation(src, 1, 0) - else if(mholder) - mholder.process_activation() - else - ..(radio) - return 1 - - -/obj/item/device/assembly/signaler/receive_signal(datum/signal/signal) - if(!signal) return 0 - if(signal.encryption != code) return 0 - if(!(src.wires & WIRE_RADIO_RECEIVE)) return 0 - pulse(1) - - if(!holder) - for(var/mob/O in hearers(1, src.loc)) - O.show_message(text("[icon2html(src, O)] *beep* *beep*"), 3, "*beep* *beep*", 2) - return - - -/obj/item/device/assembly/signaler/proc/set_frequency(new_frequency) - set waitfor = 0 - if(!frequency) - return - if(!radio_controller) - sleep(20) - if(!radio_controller) - return - radio_controller.remove_object(src, frequency) - frequency = new_frequency - radio_connection = radio_controller.add_object(src, frequency, RADIO_CHAT) - return - -/obj/item/device/assembly/signaler/Process() - if(!deadman) - STOP_PROCESSING(SSobj, src) - var/mob/M = src.loc - if(!M || !ismob(M)) - if(prob(5)) - signal() - deadman = 0 - STOP_PROCESSING(SSobj, src) - else if(prob(5)) - M.visible_message("[M]'s finger twitches a bit over [src]'s signal button!") - return - -/obj/item/device/assembly/signaler/verb/deadman_it() - set src in usr - set name = "Threaten to push the button!" - set desc = "BOOOOM!" - - if(!deadman) - deadman = 1 - START_PROCESSING(SSobj, src) - log_and_message_admins("is threatening to trigger a signaler deadman's switch") - usr.visible_message("[usr] moves their finger over [src]'s signal button...") - else - deadman = 0 - STOP_PROCESSING(SSobj, src) - log_and_message_admins("stops threatening to trigger a signaler deadman's switch") - usr.visible_message("[usr] moves their finger away from [src]'s signal button.") - - -/obj/item/device/assembly/signaler/Destroy() - if(radio_controller) - radio_controller.remove_object(src,frequency) - frequency = 0 - . = ..() \ No newline at end of file diff --git a/code/modules/assembly/timer.dm b/code/modules/assembly/timer.dm deleted file mode 100644 index 278ba8961267d..0000000000000 --- a/code/modules/assembly/timer.dm +++ /dev/null @@ -1,107 +0,0 @@ -/obj/item/device/assembly/timer - name = "timer" - desc = "Used to time things. Works well with contraptions which have to count down. Tick tock." - icon_state = "timer" - origin_tech = list(TECH_MAGNET = 1) - matter = list(MATERIAL_STEEL = 500, MATERIAL_GLASS = 50, MATERIAL_WASTE = 10) - - wires = WIRE_PULSE - - secured = 0 - - var/timing = 0 - var/time = 10 - -/obj/item/device/assembly/timer/proc/timer_end() - - -/obj/item/device/assembly/timer/activate() - if(!..()) return 0//Cooldown check - - timing = !timing - - update_icon() - return 0 - - -/obj/item/device/assembly/timer/toggle_secure() - secured = !secured - if(secured) - START_PROCESSING(SSobj, src) - else - timing = 0 - STOP_PROCESSING(SSobj, src) - update_icon() - return secured - - -/obj/item/device/assembly/timer/timer_end() - if(!secured) return 0 - pulse(0) - if(!holder) - visible_message("[icon2html(src, viewers(get_turf(src)))] *beep* *beep*", "*beep* *beep*") - cooldown = 2 - spawn(10) - process_cooldown() - return - - -/obj/item/device/assembly/timer/Process() - if(timing && (time > 0)) - time-- - playsound(loc, 'sound/items/timer.ogg', 50) - if(timing && time <= 0) - timing = 0 - timer_end() - time = 10 - return - - -/obj/item/device/assembly/timer/on_update_icon() - overlays.Cut() - attached_overlays = list() - if(timing) - overlays += "timer_timing" - attached_overlays += "timer_timing" - if(holder) - holder.update_icon() - return - - -/obj/item/device/assembly/timer/interact(mob/user as mob)//TODO: Have this use the wires - if(!secured) - user.show_message("\The [name] is unsecured!") - return 0 - var/second = time % 60 - var/minute = (time - second) / 60 - var/dat = text("Timing Unit\n[] []:[]\n- - + +\n", (timing ? text("Timing", src) : text("Not Timing", src)), minute, second, src, src, src, src) - dat += "

              Refresh" - dat += "

              Close" - show_browser(user, dat, "window=timer") - onclose(user, "timer") - return - - -/obj/item/device/assembly/timer/Topic(href, href_list, state = GLOB.physical_state) - if((. = ..())) - close_browser(usr, "window=timer") - onclose(usr, "timer") - return - - if(href_list["time"]) - timing = text2num(href_list["time"]) - update_icon() - - if(href_list["tp"]) - var/tp = text2num(href_list["tp"]) - time += tp - time = min(max(round(time), 0), 600) - - if(href_list["close"]) - close_browser(usr, "window=timer") - return - - if(usr) - attack_self(usr) - - return diff --git a/code/modules/assembly/voice.dm b/code/modules/assembly/voice.dm deleted file mode 100644 index 9ba8a21ce439e..0000000000000 --- a/code/modules/assembly/voice.dm +++ /dev/null @@ -1,44 +0,0 @@ -/obj/item/device/assembly/voice - name = "voice analyzer" - desc = "A small electronic device able to record a voice sample, and send a signal when that sample is repeated." - icon_state = "voice" - origin_tech = list(TECH_MAGNET = 1) - matter = list(MATERIAL_STEEL = 500, MATERIAL_GLASS = 50, MATERIAL_WASTE = 10) - var/listening = 0 - var/recorded //the activation message - -/obj/item/device/assembly/voice/New() - ..() - GLOB.listening_objects += src - -/obj/item/device/assembly/voice/Destroy() - GLOB.listening_objects -= src - return ..() - -/obj/item/device/assembly/voice/hear_talk(mob/living/M as mob, msg) - if(listening) - recorded = msg - listening = 0 - var/turf/T = get_turf(src) //otherwise it won't work in hand - T.visible_message("[icon2html(src, viewers(get_turf(src)))] beeps, \"Activation message is '[recorded]'.\"") - else - if(findtext(msg, recorded)) - pulse(0) - -/obj/item/device/assembly/voice/activate() - if(secured) - if(!holder) - listening = !listening - var/turf/T = get_turf(src) - T.visible_message("[icon2html(src, viewers(get_turf(src)))] beeps, \"[listening ? "Now" : "No longer"] recording input.\"") - - -/obj/item/device/assembly/voice/attack_self(mob/user) - if(!user) return 0 - activate() - return 1 - - -/obj/item/device/assembly/voice/toggle_secure() - . = ..() - listening = 0 diff --git a/code/modules/atmospherics/_atmos_setup.dm b/code/modules/atmospherics/_atmos_setup.dm deleted file mode 100644 index aea631a64168e..0000000000000 --- a/code/modules/atmospherics/_atmos_setup.dm +++ /dev/null @@ -1,321 +0,0 @@ -//-------------------------------------------- -// Pipe colors -// -// Add them here and to the pipe_colors list -// to automatically add them to all relevant -// atmospherics devices. -//-------------------------------------------- -var/global/list/pipe_colors = list( - "grey" = PIPE_COLOR_GREY, - "red" = PIPE_COLOR_RED, - "blue" = PIPE_COLOR_BLUE, - "cyan" = PIPE_COLOR_CYAN, - "green" = PIPE_COLOR_GREEN, - "yellow" = PIPE_COLOR_YELLOW, - "black" = PIPE_COLOR_BLACK, - "orange" = PIPE_COLOR_ORANGE, - "white" = PIPE_COLOR_WHITE) - -/proc/pipe_color_lookup(var/color) - for(var/C in pipe_colors) - if(color == pipe_colors[C]) - return "[C]" - -/proc/pipe_color_check(var/color) - if(!color) - return 1 - for(var/C in pipe_colors) - if(color == pipe_colors[C]) - return 1 - return 0 - -//-------------------------------------------- -// Icon cache generation -//-------------------------------------------- - -/datum/pipe_icon_manager - var/list/pipe_icons[] - var/list/manifold_icons[] - var/list/device_icons[] - var/list/underlays[] - //var/list/underlays_down[] - //var/list/underlays_exposed[] - //var/list/underlays_intact[] - //var/list/pipe_underlays_exposed[] - //var/list/pipe_underlays_intact[] - var/list/omni_icons[] - -/datum/pipe_icon_manager/New() - check_icons() - -/datum/pipe_icon_manager/proc/get_atmos_icon(var/device, var/dir, var/color, var/state) - check_icons(device, dir, color, state) - - device = "[device]" - state = "[state]" - color = "[color]" - dir = "[dir]" - - switch(device) - if("pipe") - return pipe_icons[state + color] - if("manifold") - return manifold_icons[state + color] - if("device") - return device_icons[state] - if("omni") - return omni_icons[state] - if("underlay") - return underlays[state + dir + color] - // if("underlay_intact") - // return underlays_intact[state + dir + color] - // if("underlay_exposed") - // return underlays_exposed[state + dir + color] - // if("underlay_down") - // return underlays_down[state + dir + color] - // if("pipe_underlay_exposed") - // return pipe_underlays_exposed[state + dir + color] - // if("pipe_underlay_intact") - // return pipe_underlays_intact[state + dir + color] - -/datum/pipe_icon_manager/proc/check_icons(var/device, var/dir, var/color, var/state) - if(!pipe_icons) - gen_pipe_icons() - if(!manifold_icons) - gen_manifold_icons() - if(!device_icons) - gen_device_icons() - if(!omni_icons) - gen_omni_icons() - //if(!underlays_intact || !underlays_down || !underlays_exposed || !pipe_underlays_exposed || !pipe_underlays_intact) - if(!underlays) - gen_underlay_icons() - - // In case of a non-default color, generate the missing icon and add it to the cache. - if(pipe_color_check(color)) - return - switch("[device]") - if("pipe") - if(!pipe_icons[color + state]) - gen_single_pipe_icon(color, state) - if("manifold") - if(!manifold_icons[color + state]) - gen_single_manifold_icon(color, state) - if("underlay") - if(!underlays[state + "[dir]" + color]) - gen_single_underlay_icon(dir, color, state) - -/datum/pipe_icon_manager/proc/gen_pipe_icons() - if(!pipe_icons) - pipe_icons = new() - - var/icon/pipe = new('icons/atmos/pipes.dmi') - - for(var/state in pipe.IconStates()) - if(!state || findtext(state, "map")) - continue - - var/cache_name = state - var/image/I = image('icons/atmos/pipes.dmi', icon_state = state) - pipe_icons[cache_name] = I - - for(var/pipe_color in pipe_colors) - I = image('icons/atmos/pipes.dmi', icon_state = state) - I.color = pipe_colors[pipe_color] - pipe_icons[state + "[pipe_colors[pipe_color]]"] = I - - pipe = new ('icons/atmos/heat.dmi') - for(var/state in pipe.IconStates()) - if(!state || findtext(state, "map")) - continue - pipe_icons["hepipe" + state] = image('icons/atmos/heat.dmi', icon_state = state) - - pipe = new ('icons/atmos/junction.dmi') - for(var/state in pipe.IconStates()) - if(!state || findtext(state, "map")) - continue - pipe_icons["hejunction" + state] = image('icons/atmos/junction.dmi', icon_state = state) - -/datum/pipe_icon_manager/proc/gen_single_pipe_icon(var/color, var/state) - var/image/I = image('icons/atmos/pipes.dmi', icon_state = state) - I.color = color - pipe_icons[state + color] = I - -/datum/pipe_icon_manager/proc/gen_manifold_icons() - if(!manifold_icons) - manifold_icons = new() - - var/icon/pipe = new('icons/atmos/manifold.dmi') - - for(var/state in pipe.IconStates()) - if(findtext(state, "clamps")) - var/image/I = image('icons/atmos/manifold.dmi', icon_state = state) - manifold_icons[state] = I - continue - - if(findtext(state, "core") || findtext(state, "4way")) - var/image/I = image('icons/atmos/manifold.dmi', icon_state = state) - manifold_icons[state] = I - for(var/pipe_color in pipe_colors) - I = image('icons/atmos/manifold.dmi', icon_state = state) - I.color = pipe_colors[pipe_color] - manifold_icons[state + pipe_colors[pipe_color]] = I - -/datum/pipe_icon_manager/proc/gen_single_manifold_icon(var/color, var/state) - var/image/I = image('icons/atmos/manifold.dmi', icon_state = state) - manifold_icons[state] = I - if(findtext(state, "clamps")) - manifold_icons[state] = I - else - I.color = color - manifold_icons[state + color] = I - -/datum/pipe_icon_manager/proc/gen_device_icons() - if(!device_icons) - device_icons = new() - - var/icon/device - - device = new('icons/atmos/vent_pump.dmi') - for(var/state in device.IconStates()) - if(!state || findtext(state, "map")) - continue - device_icons["vent" + state] = image('icons/atmos/vent_pump.dmi', icon_state = state) - - device = new('icons/atmos/vent_scrubber.dmi') - for(var/state in device.IconStates()) - if(!state || findtext(state, "map")) - continue - device_icons["scrubber" + state] = image('icons/atmos/vent_scrubber.dmi', icon_state = state) - -/datum/pipe_icon_manager/proc/gen_omni_icons() - if(!omni_icons) - omni_icons = new() - - var/icon/omni = new('icons/atmos/omni_devices.dmi') - - for(var/state in omni.IconStates()) - if(!state || findtext(state, "map")) - continue - omni_icons[state] = image('icons/atmos/omni_devices.dmi', icon_state = state) - - -/datum/pipe_icon_manager/proc/gen_underlay_icons() - - if(!underlays) - underlays = new() - - var/icon/pipe = new('icons/atmos/pipe_underlays.dmi') - - for(var/state in pipe.IconStates()) - if(state == "") - continue - - var/cache_name = state - - for(var/D in GLOB.cardinal) - var/image/I = image('icons/atmos/pipe_underlays.dmi', icon_state = state, dir = D) - underlays[cache_name + "[D]"] = I - for(var/pipe_color in pipe_colors) - I = image('icons/atmos/pipe_underlays.dmi', icon_state = state, dir = D) - I.color = pipe_colors[pipe_color] - underlays[state + "[D]" + "[pipe_colors[pipe_color]]"] = I - -/datum/pipe_icon_manager/proc/gen_single_underlay_icon(var/dir, var/color, var/state) - var/image/I = image('icons/atmos/pipe_underlays.dmi', icon_state = state, dir = dir) - I.color = color - underlays[state + "[dir]" + color] = I - -/* - Leaving the old icon manager code commented out for now, as we may want to rewrite the new code to cleanly - separate the newpipe icon caching (speshul supply and scrubber lines) from the rest of the pipe code. -*/ - -/* -/datum/pipe_icon_manager/proc/gen_underlay_icons() - if(!underlays_intact) - underlays_intact = new() - if(!underlays_exposed) - underlays_exposed = new() - if(!underlays_down) - underlays_down = new() - if(!pipe_underlays_exposed) - pipe_underlays_exposed = new() - if(!pipe_underlays_intact) - pipe_underlays_intact = new() - - var/icon/pipe = new('icons/atmos/pipe_underlays.dmi') - - for(var/state in pipe.IconStates()) - if(state == "") - continue - - for(var/D in cardinal) - var/image/I = image('icons/atmos/pipe_underlays.dmi', icon_state = state, dir = D) - switch(state) - if("intact") - underlays_intact["[D]"] = I - if("exposed") - underlays_exposed["[D]"] = I - if("down") - underlays_down["[D]"] = I - if("pipe_exposed") - pipe_underlays_exposed["[D]"] = I - if("pipe_intact") - pipe_underlays_intact["[D]"] = I - if("intact-supply") - underlays_intact["[D]"] = I - if("exposed-supply") - underlays_exposed["[D]"] = I - if("down-supply") - underlays_down["[D]"] = I - if("pipe_exposed-supply") - pipe_underlays_exposed["[D]"] = I - if("pipe_intact-supply") - pipe_underlays_intact["[D]"] = I - if("intact-scrubbers") - underlays_intact["[D]"] = I - if("exposed-scrubbers") - underlays_exposed["[D]"] = I - if("down-scrubbers") - underlays_down["[D]"] = I - if("pipe_exposed-scrubbers") - pipe_underlays_exposed["[D]"] = I - if("pipe_intact-scrubbers") - pipe_underlays_intact["[D]"] = I - for(var/pipe_color in pipe_colors) - I = image('icons/atmos/pipe_underlays.dmi', icon_state = state, dir = D) - I.color = pipe_colors[pipe_color] - switch(state) - if("intact") - underlays_intact["[D]" + pipe_colors[pipe_color]] = I - if("exposed") - underlays_exposed["[D]" + pipe_colors[pipe_color]] = I - if("down") - underlays_down["[D]" + pipe_colors[pipe_color]] = I - if("pipe_exposed") - pipe_underlays_exposed["[D]" + pipe_colors[pipe_color]] = I - if("pipe_intact") - pipe_underlays_intact["[D]" + pipe_colors[pipe_color]] = I - if("intact-supply") - underlays_intact["[D]" + pipe_colors[pipe_color]] = I - if("exposed-supply") - underlays_exposed["[D]" + pipe_colors[pipe_color]] = I - if("down-supply") - underlays_down["[D]" + pipe_colors[pipe_color]] = I - if("pipe_exposed-supply") - pipe_underlays_exposed["[D]" + pipe_colors[pipe_color]] = I - if("pipe_intact-supply") - pipe_underlays_intact["[D]" + pipe_colors[pipe_color]] = I - if("intact-scrubbers") - underlays_intact["[D]" + pipe_colors[pipe_color]] = I - if("exposed-scrubbers") - underlays_exposed["[D]" + pipe_colors[pipe_color]] = I - if("down-scrubbers") - underlays_down["[D]" + pipe_colors[pipe_color]] = I - if("pipe_exposed-scrubbers") - pipe_underlays_exposed["[D]" + pipe_colors[pipe_color]] = I - if("pipe_intact-scrubbers") - pipe_underlays_intact["[D]" + pipe_colors[pipe_color]] = I - -*/ diff --git a/code/modules/atmospherics/atmos_primitives.dm b/code/modules/atmospherics/atmos_primitives.dm deleted file mode 100644 index 049a5101cf441..0000000000000 --- a/code/modules/atmospherics/atmos_primitives.dm +++ /dev/null @@ -1,533 +0,0 @@ -/* - Atmos processes - - These procs generalize various processes used by atmos machinery, such as pumping, filtering, or scrubbing gas, allowing them to be reused elsewhere. - If no gas was moved/pumped/filtered/whatever, they return a negative number. - Otherwise they return the amount of energy needed to do whatever it is they do (equivalently power if done over 1 second). - In the case of free-flowing gas you can do things with gas and still use 0 power, hence the distinction between negative and non-negative return values. -*/ - - -/obj/machinery/atmospherics/var/last_flow_rate = 0 -/obj/machinery/atmospherics/var/last_power_draw = 0 -/obj/machinery/portable_atmospherics/var/last_flow_rate = 0 - - -/obj/machinery/atmospherics/var/debug = 0 - -/client/proc/atmos_toggle_debug(var/obj/machinery/atmospherics/M in world) - set name = "Toggle Debug Messages" - set category = "Debug" - M.debug = !M.debug - to_chat(usr, "[M]: Debug messages toggled [M.debug? "on" : "off"].") - -//Generalized gas pumping proc. -//Moves gas from one gas_mixture to another and returns the amount of power needed (assuming 1 second), or -1 if no gas was pumped. -//transfer_moles - Limits the amount of moles to transfer. The actual amount of gas moved may also be limited by available_power, if given. -//available_power - the maximum amount of power that may be used when moving gas. If null then the transfer is not limited by power. -/proc/pump_gas(var/obj/machinery/M, var/datum/gas_mixture/source, var/datum/gas_mixture/sink, var/transfer_moles = null, var/available_power = null) - if (source.total_moles < MINIMUM_MOLES_TO_PUMP) //if we can't transfer enough gas just stop to avoid further processing - return -1 - - if (isnull(transfer_moles)) - transfer_moles = source.total_moles - else - transfer_moles = min(source.total_moles, transfer_moles) - - //Calculate the amount of energy required and limit transfer_moles based on available power - var/specific_power = calculate_specific_power(source, sink)/ATMOS_PUMP_EFFICIENCY //this has to be calculated before we modify any gas mixtures - if (!isnull(available_power) && specific_power > 0) - transfer_moles = min(transfer_moles, available_power / specific_power) - - if (transfer_moles < MINIMUM_MOLES_TO_PUMP) //if we can't transfer enough gas just stop to avoid further processing - return -1 - - //Update flow rate meter - if (istype(M, /obj/machinery/atmospherics)) - var/obj/machinery/atmospherics/A = M - A.last_flow_rate = (transfer_moles/source.total_moles)*source.volume //group_multiplier gets divided out here - - if (A.debug) - A.visible_message("[A]: source entropy: [round(source.specific_entropy(), 0.01)] J/Kmol --> sink entropy: [round(sink.specific_entropy(), 0.01)] J/Kmol") - A.visible_message("[A]: specific entropy change = [round(sink.specific_entropy() - source.specific_entropy(), 0.01)] J/Kmol") - A.visible_message("[A]: specific power = [round(specific_power, 0.1)] W/mol") - A.visible_message("[A]: moles transferred = [transfer_moles] mol") - - if (istype(M, /obj/machinery/portable_atmospherics)) - var/obj/machinery/portable_atmospherics/P = M - P.last_flow_rate = (transfer_moles/source.total_moles)*source.volume //group_multiplier gets divided out here - - var/datum/gas_mixture/removed = source.remove(transfer_moles) - if (!removed) //Just in case - return -1 - - var/power_draw = specific_power*transfer_moles - - sink.merge(removed) - - return power_draw - -//Gas 'pumping' proc for the case where the gas flow is passive and driven entirely by pressure differences (but still one-way). -/proc/pump_gas_passive(var/obj/machinery/M, var/datum/gas_mixture/source, var/datum/gas_mixture/sink, var/transfer_moles = null) - if (source.total_moles < MINIMUM_MOLES_TO_PUMP) //if we can't transfer enough gas just stop to avoid further processing - return -1 - - if (isnull(transfer_moles)) - transfer_moles = source.total_moles - else - transfer_moles = min(source.total_moles, transfer_moles) - - var/equalize_moles = calculate_equalize_moles(source, sink) - transfer_moles = min(transfer_moles, equalize_moles) - - if (transfer_moles < MINIMUM_MOLES_TO_PUMP) //if we cant transfer enough gas just stop to avoid further processing - return -1 - - //Update flow rate meter - if (istype(M, /obj/machinery/atmospherics)) - var/obj/machinery/atmospherics/A = M - A.last_flow_rate = (transfer_moles/source.total_moles)*source.volume //group_multiplier gets divided out here - if (A.debug) - A.visible_message("[A]: moles transferred = [transfer_moles] mol") - - if (istype(M, /obj/machinery/portable_atmospherics)) - var/obj/machinery/portable_atmospherics/P = M - P.last_flow_rate = (transfer_moles/source.total_moles)*source.volume //group_multiplier gets divided out here - - var/datum/gas_mixture/removed = source.remove(transfer_moles) - if(!removed) //Just in case - return -1 - sink.merge(removed) - - return 0 - -//Generalized gas scrubbing proc. -//Selectively moves specified gasses one gas_mixture to another and returns the amount of power needed (assuming 1 second), or -1 if no gas was filtered. -//filtering - A list of gasids to be scrubbed from source -//total_transfer_moles - Limits the amount of moles to scrub. The actual amount of gas scrubbed may also be limited by available_power, if given. -//available_power - the maximum amount of power that may be used when scrubbing gas. If null then the scrubbing is not limited by power. -/proc/scrub_gas(var/obj/machinery/M, var/list/filtering, var/datum/gas_mixture/source, var/datum/gas_mixture/sink, var/total_transfer_moles = null, var/available_power = null) - if (source.total_moles < MINIMUM_MOLES_TO_FILTER) //if we cant transfer enough gas just stop to avoid further processing - return -1 - - filtering = filtering & source.gas //only filter gasses that are actually there. DO NOT USE &= - - //Determine the specific power of each filterable gas type, and the total amount of filterable gas (gasses selected to be scrubbed) - var/total_filterable_moles = 0 //the total amount of filterable gas - var/list/specific_power_gas = list() //the power required to remove one mole of pure gas, for each gas type - for (var/g in filtering) - if (source.gas[g] < MINIMUM_MOLES_TO_FILTER) - continue - - var/specific_power = calculate_specific_power_gas(g, source, sink)/ATMOS_FILTER_EFFICIENCY - specific_power_gas[g] = specific_power - total_filterable_moles += source.gas[g] - - if (total_filterable_moles < MINIMUM_MOLES_TO_FILTER) //if we cant transfer enough gas just stop to avoid further processing - return -1 - - //now that we know the total amount of filterable gas, we can calculate the amount of power needed to scrub one mole of gas - var/total_specific_power = 0 //the power required to remove one mole of filterable gas - for (var/g in filtering) - var/ratio = source.gas[g]/total_filterable_moles //this converts the specific power per mole of pure gas to specific power per mole of scrubbed gas - total_specific_power += specific_power_gas[g]*ratio - - //Figure out how much of each gas to filter - if (isnull(total_transfer_moles)) - total_transfer_moles = total_filterable_moles - else - total_transfer_moles = min(total_transfer_moles, total_filterable_moles) - - //limit transfer_moles based on available power - if (!isnull(available_power) && total_specific_power > 0) - total_transfer_moles = min(total_transfer_moles, available_power/total_specific_power) - - if (total_transfer_moles < MINIMUM_MOLES_TO_FILTER) //if we cant transfer enough gas just stop to avoid further processing - return -1 - - //Update flow rate var - if (istype(M, /obj/machinery/atmospherics)) - var/obj/machinery/atmospherics/A = M - A.last_flow_rate = (total_transfer_moles/source.total_moles)*source.volume //group_multiplier gets divided out here - if (istype(M, /obj/machinery/portable_atmospherics)) - var/obj/machinery/portable_atmospherics/P = M - P.last_flow_rate = (total_transfer_moles/source.total_moles)*source.volume //group_multiplier gets divided out here - - var/power_draw = 0 - for (var/g in filtering) - var/transfer_moles = source.gas[g] - //filter gas in proportion to the mole ratio - transfer_moles = min(transfer_moles, total_transfer_moles*(source.gas[g]/total_filterable_moles)) - - //use update=0. All the filtered gasses are supposed to be added simultaneously, so we update after the for loop. - source.adjust_gas(g, -transfer_moles, update=0) - sink.adjust_gas_temp(g, transfer_moles, source.temperature, update=0) - - power_draw += specific_power_gas[g]*transfer_moles - - //Remix the resulting gases - sink.update_values() - source.update_values() - - return power_draw - -//Generalized gas filtering proc. -//Filtering is a bit different from scrubbing. Instead of selectively moving the targeted gas types from one gas mix to another, filtering splits -//the input gas into two outputs: one that contains /only/ the targeted gas types, and another that completely clean of the targeted gas types. -//filtering - A list of gasids to be filtered. These gasses get moved to sink_filtered, while the other gasses get moved to sink_clean. -//total_transfer_moles - Limits the amount of moles to input. The actual amount of gas filtered may also be limited by available_power, if given. -//available_power - the maximum amount of power that may be used when filtering gas. If null then the filtering is not limited by power. -/proc/filter_gas(var/obj/machinery/M, var/list/filtering, var/datum/gas_mixture/source, var/datum/gas_mixture/sink_filtered, var/datum/gas_mixture/sink_clean, var/total_transfer_moles = null, var/available_power = null) - if (source.total_moles < MINIMUM_MOLES_TO_FILTER) //if we cant transfer enough gas just stop to avoid further processing - return -1 - - filtering = filtering & source.gas //only filter gasses that are actually there. DO NOT USE &= - - var/total_specific_power = 0 //the power required to remove one mole of input gas - var/total_filterable_moles = 0 //the total amount of filterable gas - var/total_unfilterable_moles = 0 //the total amount of non-filterable gas - var/list/specific_power_gas = list() //the power required to remove one mole of pure gas, for each gas type - for (var/g in source.gas) - if (source.gas[g] < MINIMUM_MOLES_TO_FILTER) - continue - - if (g in filtering) - specific_power_gas[g] = calculate_specific_power_gas(g, source, sink_filtered)/ATMOS_FILTER_EFFICIENCY - total_filterable_moles += source.gas[g] - else - specific_power_gas[g] = calculate_specific_power_gas(g, source, sink_clean)/ATMOS_FILTER_EFFICIENCY - total_unfilterable_moles += source.gas[g] - - var/ratio = source.gas[g]/source.total_moles //converts the specific power per mole of pure gas to specific power per mole of input gas mix - total_specific_power += specific_power_gas[g]*ratio - - //Figure out how much of each gas to filter - if (isnull(total_transfer_moles)) - total_transfer_moles = source.total_moles - else - total_transfer_moles = min(total_transfer_moles, source.total_moles) - - //limit transfer_moles based on available power - if (!isnull(available_power) && total_specific_power > 0) - total_transfer_moles = min(total_transfer_moles, available_power/total_specific_power) - - if (total_transfer_moles < MINIMUM_MOLES_TO_FILTER) //if we cant transfer enough gas just stop to avoid further processing - return -1 - - //Update flow rate var - if (istype(M, /obj/machinery/atmospherics)) - var/obj/machinery/atmospherics/A = M - A.last_flow_rate = (total_transfer_moles/source.total_moles)*source.volume //group_multiplier gets divided out here - if (istype(M, /obj/machinery/portable_atmospherics)) - var/obj/machinery/portable_atmospherics/P = M - P.last_flow_rate = (total_transfer_moles/source.total_moles)*source.volume //group_multiplier gets divided out here - - var/datum/gas_mixture/removed = source.remove(total_transfer_moles) - if (!removed) //Just in case - return -1 - - var/filtered_power_used = 0 //power used to move filterable gas to sink_filtered - var/unfiltered_power_used = 0 //power used to move unfilterable gas to sink_clean - for (var/g in removed.gas) - var/power_used = specific_power_gas[g]*removed.gas[g] - - if (g in filtering) - //use update=0. All the filtered gasses are supposed to be added simultaneously, so we update after the for loop. - sink_filtered.adjust_gas_temp(g, removed.gas[g], removed.temperature, update=0) - removed.adjust_gas(g, -removed.gas[g], update=0) - filtered_power_used += power_used - else - unfiltered_power_used += power_used - - sink_filtered.update_values() - removed.update_values() - - sink_clean.merge(removed) - - return filtered_power_used + unfiltered_power_used - -//For omni devices. Instead filtering is an associative list mapping gasids to gas mixtures. -//I don't like the copypasta, but I decided to keep both versions of gas filtering as filter_gas is slightly faster (doesn't create as many temporary lists, doesn't call update_values() as much) -//filter_gas can be removed and replaced with this proc if need be. -/proc/filter_gas_multi(var/obj/machinery/M, var/list/filtering, var/datum/gas_mixture/source, var/datum/gas_mixture/sink_clean, var/total_transfer_moles = null, var/available_power = null) - if (source.total_moles < MINIMUM_MOLES_TO_FILTER) //if we cant transfer enough gas just stop to avoid further processing - return -1 - - filtering = filtering & source.gas //only filter gasses that are actually there. DO NOT USE &= - - var/total_specific_power = 0 //the power required to remove one mole of input gas - var/total_filterable_moles = 0 //the total amount of filterable gas - var/total_unfilterable_moles = 0 //the total amount of non-filterable gas - var/list/specific_power_gas = list() //the power required to remove one mole of pure gas, for each gas type - for (var/g in source.gas) - if (source.gas[g] < MINIMUM_MOLES_TO_FILTER) - continue - - if (g in filtering) - var/datum/gas_mixture/sink_filtered = filtering[g] - specific_power_gas[g] = calculate_specific_power_gas(g, source, sink_filtered)/ATMOS_FILTER_EFFICIENCY - total_filterable_moles += source.gas[g] - else - specific_power_gas[g] = calculate_specific_power_gas(g, source, sink_clean)/ATMOS_FILTER_EFFICIENCY - total_unfilterable_moles += source.gas[g] - - var/ratio = source.gas[g]/source.total_moles //converts the specific power per mole of pure gas to specific power per mole of input gas mix - total_specific_power += specific_power_gas[g]*ratio - - //Figure out how much of each gas to filter - if (isnull(total_transfer_moles)) - total_transfer_moles = source.total_moles - else - total_transfer_moles = min(total_transfer_moles, source.total_moles) - - //limit transfer_moles based on available power - if (!isnull(available_power) && total_specific_power > 0) - total_transfer_moles = min(total_transfer_moles, available_power/total_specific_power) - - if (total_transfer_moles < MINIMUM_MOLES_TO_FILTER) //if we cant transfer enough gas just stop to avoid further processing - return -1 - - //Update Flow Rate var - if (istype(M, /obj/machinery/atmospherics)) - var/obj/machinery/atmospherics/A = M - A.last_flow_rate = (total_transfer_moles/source.total_moles)*source.volume //group_multiplier gets divided out here - if (istype(M, /obj/machinery/portable_atmospherics)) - var/obj/machinery/portable_atmospherics/P = M - P.last_flow_rate = (total_transfer_moles/source.total_moles)*source.volume //group_multiplier gets divided out here - - var/datum/gas_mixture/removed = source.remove(total_transfer_moles) - if (!removed) //Just in case - return -1 - - var/list/filtered_power_used = list() //power used to move filterable gas to the filtered gas mixes - var/unfiltered_power_used = 0 //power used to move unfilterable gas to sink_clean - for (var/g in removed.gas) - var/power_used = specific_power_gas[g]*removed.gas[g] - - if (g in filtering) - var/datum/gas_mixture/sink_filtered = filtering[g] - //use update=0. All the filtered gasses are supposed to be added simultaneously, so we update after the for loop. - sink_filtered.adjust_gas_temp(g, removed.gas[g], removed.temperature, update=1) - removed.adjust_gas(g, -removed.gas[g], update=0) - if (power_used) - filtered_power_used[sink_filtered] = power_used - else - unfiltered_power_used += power_used - - removed.update_values() - - var/power_draw = unfiltered_power_used - for (var/datum/gas_mixture/sink_filtered in filtered_power_used) - power_draw += filtered_power_used[sink_filtered] - - sink_clean.merge(removed) - - return power_draw - -//Similar deal as the other atmos process procs. -//mix_sources maps input gas mixtures to mix ratios. The mix ratios MUST add up to 1. -/proc/mix_gas(var/obj/machinery/M, var/list/mix_sources, var/datum/gas_mixture/sink, var/total_transfer_moles = null, var/available_power = null) - if (!mix_sources.len) - return -1 - - var/total_specific_power = 0 //the power needed to mix one mole of gas - var/total_mixing_moles = null //the total amount of gas that can be mixed, given our mix ratios - var/total_input_volume = 0 //for flow rate calculation - var/total_input_moles = 0 //for flow rate calculation - var/list/source_specific_power = list() - for (var/datum/gas_mixture/source in mix_sources) - if (source.total_moles < MINIMUM_MOLES_TO_FILTER) - return -1 //either mix at the set ratios or mix no gas at all - - var/mix_ratio = mix_sources[source] - if (!mix_ratio) - continue //this gas is not being mixed in - - //mixing rate is limited by the source with the least amount of available gas - var/this_mixing_moles = source.total_moles/mix_ratio - if (isnull(total_mixing_moles) || total_mixing_moles > this_mixing_moles) - total_mixing_moles = this_mixing_moles - - source_specific_power[source] = calculate_specific_power(source, sink)*mix_ratio/ATMOS_FILTER_EFFICIENCY - total_specific_power += source_specific_power[source] - total_input_volume += source.volume - total_input_moles += source.total_moles - - if (total_mixing_moles < MINIMUM_MOLES_TO_FILTER) //if we cant transfer enough gas just stop to avoid further processing - return -1 - - if (isnull(total_transfer_moles)) - total_transfer_moles = total_mixing_moles - else - total_transfer_moles = min(total_mixing_moles, total_transfer_moles) - - //limit transfer_moles based on available power - if (!isnull(available_power) && total_specific_power > 0) - total_transfer_moles = min(total_transfer_moles, available_power / total_specific_power) - - if (total_transfer_moles < MINIMUM_MOLES_TO_FILTER) //if we cant transfer enough gas just stop to avoid further processing - return -1 - - //Update flow rate var - if (istype(M, /obj/machinery/atmospherics)) - var/obj/machinery/atmospherics/A = M - A.last_flow_rate = (total_transfer_moles/total_input_moles)*total_input_volume //group_multiplier gets divided out here - if (istype(M, /obj/machinery/portable_atmospherics)) - var/obj/machinery/portable_atmospherics/P = M - P.last_flow_rate = (total_transfer_moles/total_input_moles)*total_input_volume //group_multiplier gets divided out here - - var/total_power_draw = 0 - for (var/datum/gas_mixture/source in mix_sources) - var/mix_ratio = mix_sources[source] - if (!mix_ratio) - continue - - var/transfer_moles = total_transfer_moles * mix_ratio - - var/datum/gas_mixture/removed = source.remove(transfer_moles) - - var/power_draw = transfer_moles * source_specific_power[source] - total_power_draw += power_draw - - sink.merge(removed) - - return total_power_draw - -/* - Helper procs for various things. -*/ - -//Calculates the amount of power needed to move one mole from source to sink. -/proc/calculate_specific_power(datum/gas_mixture/source, datum/gas_mixture/sink) - //Calculate the amount of energy required - var/air_temperature = (sink.temperature > 0)? sink.temperature : source.temperature - var/specific_entropy = sink.specific_entropy() - source.specific_entropy() //sink is gaining moles, source is loosing - var/specific_power = 0 // W/mol - - //If specific_entropy is < 0 then power is required to move gas - if (specific_entropy < 0) - specific_power = -specific_entropy*air_temperature //how much power we need per mole - - return specific_power - -//Calculates the amount of power needed to move one mole of a certain gas from source to sink. -/proc/calculate_specific_power_gas(var/gasid, datum/gas_mixture/source, datum/gas_mixture/sink) - //Calculate the amount of energy required - var/air_temperature = (sink.temperature > 0)? sink.temperature : source.temperature - var/specific_entropy = sink.specific_entropy_gas(gasid) - source.specific_entropy_gas(gasid) //sink is gaining moles, source is loosing - var/specific_power = 0 // W/mol - - //If specific_entropy is < 0 then power is required to move gas - if (specific_entropy < 0) - specific_power = -specific_entropy*air_temperature //how much power we need per mole - - return specific_power - -//Calculates the APPROXIMATE amount of moles that would need to be transferred to change the pressure of sink by pressure_delta -//If set, sink_volume_mod adjusts the effective output volume used in the calculation. This is useful when the output gas_mixture is -//part of a pipenetwork, and so it's volume isn't representative of the actual volume since the gas will be shared across the pipenetwork when it processes. -/proc/calculate_transfer_moles(datum/gas_mixture/source, datum/gas_mixture/sink, var/pressure_delta, var/sink_volume_mod=0) - if(source.temperature == 0 || source.total_moles == 0) return 0 - - var/output_volume = (sink.volume * sink.group_multiplier) + sink_volume_mod - var/source_total_moles = source.total_moles * source.group_multiplier - - var/air_temperature = source.temperature - if(sink.total_moles > 0 && sink.temperature > 0) - //estimate the final temperature of the sink after transfer - var/estimate_moles = pressure_delta*output_volume/(sink.temperature * R_IDEAL_GAS_EQUATION) - var/sink_heat_capacity = sink.heat_capacity() - var/transfer_heat_capacity = source.heat_capacity()*estimate_moles/source_total_moles - air_temperature = (sink.temperature*sink_heat_capacity + source.temperature*transfer_heat_capacity) / (sink_heat_capacity + transfer_heat_capacity) - - //get the number of moles that would have to be transfered to bring sink to the target pressure - return pressure_delta*output_volume/(air_temperature * R_IDEAL_GAS_EQUATION) - -//Calculates the APPROXIMATE amount of moles that would need to be transferred to bring source and sink to the same pressure -/proc/calculate_equalize_moles(datum/gas_mixture/source, datum/gas_mixture/sink) - if(source.temperature == 0) return 0 - - //Make the approximation that the sink temperature is unchanged after transferring gas - var/source_volume = source.volume * source.group_multiplier - var/sink_volume = sink.volume * sink.group_multiplier - - var/source_pressure = source.return_pressure() - var/sink_pressure = sink.return_pressure() - - return (source_pressure - sink_pressure)/(R_IDEAL_GAS_EQUATION * (source.temperature/source_volume + sink.temperature/sink_volume)) - -//Determines if the atmosphere is safe (for humans). Safe atmosphere: -// - Is between 80 and 120kPa -// - Has between 17% and 30% oxygen -// - Has temperature between -10C and 50C -// - Has no or only minimal phoron or N2O -/proc/get_atmosphere_issues(datum/gas_mixture/atmosphere, var/returntext = 0) - var/list/status = list() - if(!atmosphere) - status.Add("No atmosphere present.") - - // Temperature check - if((atmosphere.temperature > (T0C + 50)) || (atmosphere.temperature < (T0C - 10))) - status.Add("Temperature too [atmosphere.temperature > (T0C + 50) ? "high" : "low"].") - - // Pressure check - var/pressure = atmosphere.return_pressure() - if((pressure > 120) || (pressure < 80)) - status.Add("Pressure too [pressure > 120 ? "high" : "low"].") - - // Gas concentration checks - var/oxygen = 0 - var/phoron = 0 - var/carbondioxide = 0 - var/nitrousoxide = 0 - var/hydrogen = 0 - if(atmosphere.total_moles) // Division by zero prevention - oxygen = (atmosphere.gas[GAS_OXYGEN] / atmosphere.total_moles) * 100 // Percentage of the gas - phoron = (atmosphere.gas[GAS_PHORON] / atmosphere.total_moles) * 100 - carbondioxide = (atmosphere.gas[GAS_CO2] / atmosphere.total_moles) * 100 - nitrousoxide = (atmosphere.gas[GAS_N2O] / atmosphere.total_moles) * 100 - hydrogen = (atmosphere.gas[GAS_HYDROGEN] / atmosphere.total_moles) * 100 - - if(!oxygen) - status.Add("No oxygen.") - else if((oxygen > 30) || (oxygen < 17)) - status.Add("Oxygen too [oxygen > 30 ? "high" : "low"].") - - - - if(phoron > 0.1) // Toxic even in small amounts. - status.Add("Phoron contamination.") - if(nitrousoxide > 0.1) // Probably slightly less dangerous but still. - status.Add("N2O contamination.") - if(hydrogen > 2.5) // Not too dangerous, but flammable. - status.Add("Hydrogen contamination.") - if(carbondioxide > 5) // Not as dangerous until very large amount is present. - status.Add("CO2 concentration high.") - - - if(returntext) - return jointext(status, " ") - else - return status.len - -/decl/public_access/public_variable/power_draw - expected_type = /obj/machinery/atmospherics - name = "last power draw" - desc = "The most recent data on the amount of power the machine used." - can_write = FALSE - has_updates = FALSE - var_type = IC_FORMAT_NUMBER - -/decl/public_access/public_variable/power_draw/access_var(obj/machinery/atmospherics/machine) - return machine.last_power_draw - -/decl/public_access/public_variable/flow_rate - expected_type = /obj/machinery/atmospherics - name = "last flow_rate" - desc = "The most recent data on the volume of air the machine moved." - can_write = FALSE - has_updates = FALSE - var_type = IC_FORMAT_NUMBER - -/decl/public_access/public_variable/flow_rate/access_var(obj/machinery/atmospherics/machine) - return machine.last_flow_rate \ No newline at end of file diff --git a/code/modules/atmospherics/atmospherics.dm b/code/modules/atmospherics/atmospherics.dm deleted file mode 100644 index 3a0fd9dfe28d1..0000000000000 --- a/code/modules/atmospherics/atmospherics.dm +++ /dev/null @@ -1,172 +0,0 @@ -/* -Quick overview: - -Pipes combine to form pipelines -Pipelines and other atmospheric objects combine to form pipe_networks - Note: A single pipe_network represents a completely open space - -Pipes -> Pipelines -Pipelines + Other Objects -> Pipe network - -*/ -/obj/machinery/atmospherics - anchored = TRUE - idle_power_usage = 0 - active_power_usage = 0 - power_channel = ENVIRON - - var/nodealert = 0 - var/power_rating //the maximum amount of power the machine can use to do work, affects how powerful the machine is, in Watts - - layer = EXPOSED_PIPE_LAYER - - var/connect_types = CONNECT_TYPE_REGULAR - var/connect_dir_type = SOUTH // Assume your dir is SOUTH. What dirs should you connect to? - var/icon_connect_type = "" //"-supply" or "-scrubbers" - - var/initialize_directions = 0 - var/pipe_color - - var/static/datum/pipe_icon_manager/icon_manager - var/obj/machinery/atmospherics/node1 - var/obj/machinery/atmospherics/node2 - - var/atmos_initalized = FALSE - var/build_icon = 'icons/obj/pipe-item.dmi' - var/build_icon_state = "buildpipe" - var/colorable = FALSE - - var/pipe_class = PIPE_CLASS_OTHER //If somehow something isn't set properly, handle it as something with zero connections. This will prevent runtimes. - var/rotate_class = PIPE_ROTATE_STANDARD - -/obj/machinery/atmospherics/Initialize() - if(!icon_manager) - icon_manager = new() - - if(!pipe_color) - pipe_color = color - color = null - - if(!pipe_color_check(pipe_color)) - pipe_color = null - - set_dir(dir) // Does full dir init. - . = ..() - -/obj/machinery/atmospherics/proc/atmos_init() - atmos_initalized = TRUE - -/obj/machinery/atmospherics/hide(var/do_hide) - if(do_hide && level == 1) - layer = PIPE_LAYER - else - reset_plane_and_layer() - -/obj/machinery/atmospherics/attackby(atom/A, mob/user as mob) - if(istype(A, /obj/item/device/scanner/gas)) - return - ..() - -/obj/machinery/atmospherics/proc/add_underlay(var/turf/T, var/obj/machinery/atmospherics/node, var/direction, var/icon_connect_type) - if(node) - if(!T.is_plating() && node.level == 1 && istype(node, /obj/machinery/atmospherics/pipe)) - underlays += icon_manager.get_atmos_icon("underlay", direction, color_cache_name(node), "down" + icon_connect_type) - else - underlays += icon_manager.get_atmos_icon("underlay", direction, color_cache_name(node), "intact" + icon_connect_type) - else - underlays += icon_manager.get_atmos_icon("underlay", direction, color_cache_name(node), "exposed" + icon_connect_type) - -/obj/machinery/atmospherics/proc/update_underlays() - if(check_icon_cache()) - return 1 - else - return 0 - -/obj/machinery/atmospherics/proc/check_connect_types(obj/machinery/atmospherics/atmos1, obj/machinery/atmospherics/atmos2) - return (atmos1.connect_types & atmos2.connect_types) - -/obj/machinery/atmospherics/proc/check_connect_types_construction(obj/machinery/atmospherics/atmos1, obj/item/pipe/pipe2) - return (atmos1.connect_types & pipe2.connect_types) - -/obj/machinery/atmospherics/proc/check_icon_cache(var/safety = 0) - if(!istype(icon_manager)) - if(!safety) //to prevent infinite loops - icon_manager = new() - check_icon_cache(1) - return 0 - - return 1 - -/obj/machinery/atmospherics/proc/color_cache_name(var/obj/machinery/atmospherics/node) - //Don't use this for standard pipes - if(!istype(node)) - return null - - return node.pipe_color - -/obj/machinery/atmospherics/Process() - last_flow_rate = 0 - last_power_draw = 0 - - build_network() - -/obj/machinery/atmospherics/proc/network_expand(datum/pipe_network/new_network, obj/machinery/atmospherics/pipe/reference) - // Check to see if should be added to network. Add self if so and adjust variables appropriately. - // Note don't forget to have neighbors look as well! - - return null - -/obj/machinery/atmospherics/proc/build_network() - // Called to build a network from this node - - return null - -/obj/machinery/atmospherics/proc/return_network(obj/machinery/atmospherics/reference) - // Returns pipe_network associated with connection to reference - // Notes: should create network if necessary - // Should never return null - - return null - -/obj/machinery/atmospherics/proc/reassign_network(datum/pipe_network/old_network, datum/pipe_network/new_network) - // Used when two pipe_networks are combining - -/obj/machinery/atmospherics/proc/return_network_air(datum/pipe_network/reference) - // Return a list of gas_mixture(s) in the object - // associated with reference pipe_network for use in rebuilding the networks gases list - // Is permitted to return null - -/obj/machinery/atmospherics/proc/disconnect(obj/machinery/atmospherics/reference) - -/obj/machinery/atmospherics/on_update_icon() - return null - -// returns all pipe's endpoints. You can override, but you may then need to use a custom /item/pipe constructor. -/obj/machinery/atmospherics/proc/get_initialze_directions() - return base_pipe_initialize_directions(dir, connect_dir_type) - -/proc/base_pipe_initialize_directions(dir, connect_dir_type) - if(!dir) - return 0 - if(!(dir in GLOB.cardinal)) - return dir // You're on your own. Used for bent pipes. - . = 0 - - if(connect_dir_type & SOUTH) - . |= dir - if(connect_dir_type & NORTH) - . |= turn(dir, 180) - if(connect_dir_type & WEST) - . |= turn(dir, -90) - if(connect_dir_type & EAST) - . |= turn(dir, 90) - -/obj/machinery/atmospherics/set_dir(new_dir) - . = ..() - initialize_directions = get_initialze_directions() - -/// Used by constructors. Shouldn't generally be called from elsewhere. -/obj/machinery/proc/set_initial_level() - var/turf/T = get_turf(src) - if(T) - level = (!T.is_plating() ? 2 : 1) diff --git a/code/modules/atmospherics/components/binary_devices/binary_atmos_base.dm b/code/modules/atmospherics/components/binary_devices/binary_atmos_base.dm deleted file mode 100644 index 6cfa1b747136b..0000000000000 --- a/code/modules/atmospherics/components/binary_devices/binary_atmos_base.dm +++ /dev/null @@ -1,126 +0,0 @@ -/obj/machinery/atmospherics/binary - dir = SOUTH - initialize_directions = SOUTH|NORTH - layer = ABOVE_CATWALK_LAYER - - var/datum/gas_mixture/air1 - var/datum/gas_mixture/air2 - - var/datum/pipe_network/network1 - var/datum/pipe_network/network2 - - pipe_class = PIPE_CLASS_BINARY - connect_dir_type = SOUTH | NORTH - -/obj/machinery/atmospherics/binary/Initialize() - air1 = new - air2 = new - - air1.volume = 200 - air2.volume = 200 - . = ..() - -// Housekeeping and pipe network stuff below -/obj/machinery/atmospherics/binary/network_expand(datum/pipe_network/new_network, obj/machinery/atmospherics/pipe/reference) - if(reference == node1) - network1 = new_network - - else if(reference == node2) - network2 = new_network - - if(new_network.normal_members.Find(src)) - return 0 - - new_network.normal_members += src - - return null - -/obj/machinery/atmospherics/binary/atmos_init() - ..() - if(node1 && node2) return - - var/node2_connect = dir - var/node1_connect = turn(dir, 180) - - for(var/obj/machinery/atmospherics/target in get_step(src,node1_connect)) - if(target.initialize_directions & get_dir(target,src)) - if (check_connect_types(target,src)) - node1 = target - break - - for(var/obj/machinery/atmospherics/target in get_step(src,node2_connect)) - if(target.initialize_directions & get_dir(target,src)) - if (check_connect_types(target,src)) - node2 = target - break - - update_icon() - update_underlays() - -/obj/machinery/atmospherics/binary/build_network() - if(!network1 && node1) - network1 = new /datum/pipe_network() - network1.normal_members += src - network1.build_network(node1, src) - - if(!network2 && node2) - network2 = new /datum/pipe_network() - network2.normal_members += src - network2.build_network(node2, src) - - -/obj/machinery/atmospherics/binary/return_network(obj/machinery/atmospherics/reference) - build_network() - - if(reference==node1) - return network1 - - if(reference==node2) - return network2 - - return null - -/obj/machinery/atmospherics/binary/reassign_network(datum/pipe_network/old_network, datum/pipe_network/new_network) - if(network1 == old_network) - network1 = new_network - if(network2 == old_network) - network2 = new_network - - return 1 - -/obj/machinery/atmospherics/binary/return_network_air(datum/pipe_network/reference) - var/list/results = list() - - if(network1 == reference) - results += air1 - if(network2 == reference) - results += air2 - - return results - -/obj/machinery/atmospherics/binary/disconnect(obj/machinery/atmospherics/reference) - if(reference==node1) - qdel(network1) - node1 = null - - else if(reference==node2) - qdel(network2) - node2 = null - - update_icon() - update_underlays() - - return null - -/obj/machinery/atmospherics/binary/Destroy() - if(node1) - node1.disconnect(src) - qdel(network1) - if(node2) - node2.disconnect(src) - qdel(network2) - - node1 = null - node2 = null - - . = ..() diff --git a/code/modules/atmospherics/components/binary_devices/circulator.dm b/code/modules/atmospherics/components/binary_devices/circulator.dm deleted file mode 100644 index d2aaa9b2e1274..0000000000000 --- a/code/modules/atmospherics/components/binary_devices/circulator.dm +++ /dev/null @@ -1,152 +0,0 @@ -//node1, air1, network1 correspond to input -//node2, air2, network2 correspond to output - -/obj/machinery/atmospherics/binary/circulator - name = "circulator" - desc = "A gas circulator turbine and heat exchanger." - icon = 'icons/obj/power.dmi' - icon_state = "circ-unassembled" - anchored = FALSE - - var/kinetic_efficiency = 0.04 //combined kinetic and kinetic-to-electric efficiency - var/volume_ratio = 0.2 - - var/recent_moles_transferred = 0 - var/last_heat_capacity = 0 - var/last_temperature = 0 - var/last_pressure_delta = 0 - var/last_worldtime_transfer = 0 - var/last_stored_energy_transferred = 0 - var/volume_capacity_used = 0 - var/stored_energy = 0 - var/temperature_overlay - - density = TRUE - -/obj/machinery/atmospherics/binary/circulator/Initialize() - . = ..() - desc = initial(desc) + " Its outlet port is to the [dir2text(dir)]." - air1.volume = 400 - -/obj/machinery/atmospherics/binary/circulator/proc/return_transfer_air() - var/datum/gas_mixture/removed - if(anchored && !(stat&BROKEN) && network1) - var/input_starting_pressure = air1.return_pressure() - var/output_starting_pressure = air2.return_pressure() - last_pressure_delta = max(input_starting_pressure - output_starting_pressure - 5, 0) - - //only circulate air if there is a pressure difference (plus 5kPa kinetic, 10kPa static friction) - if(air1.temperature > 0 && last_pressure_delta > 5) - - //Calculate necessary moles to transfer using PV = nRT - recent_moles_transferred = (last_pressure_delta*network1.volume/(air1.temperature * R_IDEAL_GAS_EQUATION))/3 //uses the volume of the whole network, not just itself - volume_capacity_used = min( (last_pressure_delta*network1.volume/3)/(input_starting_pressure*air1.volume) , 1) //how much of the gas in the input air volume is consumed - - //Calculate energy generated from kinetic turbine - stored_energy += 1/ADIABATIC_EXPONENT * min(last_pressure_delta * network1.volume , input_starting_pressure*air1.volume) * (1 - volume_ratio**ADIABATIC_EXPONENT) * kinetic_efficiency - - //Actually transfer the gas - removed = air1.remove(recent_moles_transferred) - if(removed) - last_heat_capacity = removed.heat_capacity() - last_temperature = removed.temperature - - //Update the gas networks. - network1.update = 1 - - last_worldtime_transfer = world.time - else - recent_moles_transferred = 0 - - update_icon() - return removed - -/obj/machinery/atmospherics/binary/circulator/proc/return_stored_energy() - last_stored_energy_transferred = stored_energy - stored_energy = 0 - return last_stored_energy_transferred - -/obj/machinery/atmospherics/binary/circulator/Process() - ..() - - if(last_worldtime_transfer < world.time - 50) - recent_moles_transferred = 0 - update_icon() - -/obj/machinery/atmospherics/binary/circulator/on_update_icon() - icon_state = anchored ? "circ-assembled" : "circ-unassembled" - overlays.Cut() - if (stat & (BROKEN|NOPOWER) || !anchored) - return 1 - if (last_pressure_delta > 0 && recent_moles_transferred > 0) - if (temperature_overlay) - overlays += image('icons/obj/power.dmi', temperature_overlay) - if (last_pressure_delta > 5*ONE_ATMOSPHERE) - overlays += image('icons/obj/power.dmi', "circ-run") - else - overlays += image('icons/obj/power.dmi', "circ-slow") - else - overlays += image('icons/obj/power.dmi', "circ-off") - - return 1 - -/obj/machinery/atmospherics/binary/circulator/attackby(obj/item/W as obj, mob/user as mob) - if(isWrench(W)) - playsound(src.loc, 'sound/items/Ratchet.ogg', 75, 1) - anchored = !anchored - user.visible_message("[user.name] [anchored ? "secures" : "unsecures"] the bolts holding [src.name] to the floor.", \ - "You [anchored ? "secure" : "unsecure"] the bolts holding [src] to the floor.", \ - "You hear a ratchet") - - if(anchored) - temperature_overlay = null - if(dir & (NORTH|SOUTH)) - initialize_directions = NORTH|SOUTH - else if(dir & (EAST|WEST)) - initialize_directions = EAST|WEST - - atmos_init() - build_network() - if (node1) - node1.atmos_init() - node1.build_network() - if (node2) - node2.atmos_init() - node2.build_network() - else - if(node1) - node1.disconnect(src) - qdel(network1) - if(node2) - node2.disconnect(src) - qdel(network2) - - node1 = null - node2 = null - update_icon() - - else - ..() - -/obj/machinery/atmospherics/binary/circulator/verb/rotate_clockwise() - set category = "Object" - set name = "Rotate Circulator (Clockwise)" - set src in view(1) - - if (usr.stat || usr.restrained() || anchored) - return - - src.set_dir(turn(src.dir, 90)) - desc = initial(desc) + " Its outlet port is to the [dir2text(dir)]." - - -/obj/machinery/atmospherics/binary/circulator/verb/rotate_anticlockwise() - set category = "Object" - set name = "Rotate Circulator (Counterclockwise)" - set src in view(1) - - if (usr.stat || usr.restrained() || anchored) - return - - src.set_dir(turn(src.dir, -90)) - desc = initial(desc) + " Its outlet port is to the [dir2text(dir)]." \ No newline at end of file diff --git a/code/modules/atmospherics/components/binary_devices/oxyregenerator.dm b/code/modules/atmospherics/components/binary_devices/oxyregenerator.dm deleted file mode 100644 index 052d916703562..0000000000000 --- a/code/modules/atmospherics/components/binary_devices/oxyregenerator.dm +++ /dev/null @@ -1,207 +0,0 @@ -/obj/machinery/atmospherics/binary/oxyregenerator - name ="oxygen regenerator" - desc = "A machine for breaking bonds in carbon dioxide and releasing pure oxygen." - icon = 'icons/atmos/oxyregenerator.dmi' - icon_state = "off" - level = 1 - density = TRUE - use_power = POWER_USE_OFF - idle_power_usage = 200 //internal circuitry, friction losses and stuff - power_rating = 10000 - base_type = /obj/machinery/atmospherics/binary/oxyregenerator - construct_state = /decl/machine_construction/default/panel_closed - uncreated_component_parts = null - stat_immune = 0 - - machine_name = "oxygen regenerator" - machine_desc = "Catalyzes gaseous CO2 to convert it into gaseous oxygen. The excess carbon is condensed and ejected as graphite sheets." - - var/target_pressure = 10*ONE_ATMOSPHERE - var/id = null - var/power_setting = 1 //power consumption setting, 1 through five - var/carbon_stored = 0 - var/carbon_efficiency = 0.5 - var/intake_power_efficiency = 1 - var/const/carbon_moles_per_piece = 50 //One 12g per mole * 50 = 600 g chunk of coal - var/phase = "filling"//"filling", "processing", "releasing" - var/datum/gas_mixture/inner_tank = new - var/tank_volume = 400//Litres - -/obj/machinery/atmospherics/binary/oxyregenerator/RefreshParts() - carbon_efficiency = initial(carbon_efficiency) - carbon_efficiency += 0.25 * total_component_rating_of_type(/obj/item/stock_parts/matter_bin) - carbon_efficiency -= 0.25 * number_of_components(/obj/item/stock_parts/matter_bin) - carbon_efficiency = clamp(carbon_efficiency, initial(carbon_efficiency), 5) - - intake_power_efficiency = initial(intake_power_efficiency) - intake_power_efficiency -= 0.1 * total_component_rating_of_type(/obj/item/stock_parts/manipulator) - intake_power_efficiency += 0.1 * number_of_components(/obj/item/stock_parts/manipulator) - intake_power_efficiency = clamp(intake_power_efficiency, 0.1, initial(intake_power_efficiency)) - - power_rating = 1 - power_rating -= 0.05 * total_component_rating_of_type(/obj/item/stock_parts/micro_laser) - power_rating += 0.05 * number_of_components(/obj/item/stock_parts/micro_laser) - power_rating = clamp(power_rating, 0.1, 1) - power_rating *= initial(power_rating) - ..() - -/obj/machinery/atmospherics/binary/oxyregenerator/examine(user) - . = ..() - to_chat(user,"Its outlet port is to the [dir2text(dir)]") - -/obj/machinery/atmospherics/binary/oxyregenerator/attackby(var/obj/item/O as obj, var/mob/user as mob) - if(component_attackby(O, user)) - return TRUE - if(isWrench(O)) - playsound(src.loc, 'sound/items/Ratchet.ogg', 75, 1) - anchored = !anchored - user.visible_message("[user.name] [anchored ? "secures" : "unsecures"] the bolts holding [src.name] to the floor.", \ - "You [anchored ? "secure" : "unsecure"] the bolts holding [src] to the floor.", \ - "You hear a ratchet") - - if(anchored) - if(dir & (NORTH|SOUTH)) - initialize_directions = NORTH|SOUTH - else if(dir & (EAST|WEST)) - initialize_directions = EAST|WEST - - atmos_init() - build_network() - if (node1) - node1.atmos_init() - node1.build_network() - if (node2) - node2.atmos_init() - node2.build_network() - else - if(node1) - node1.disconnect(src) - qdel(network1) - if(node2) - node2.disconnect(src) - qdel(network2) - - node1 = null - node2 = null - -/obj/machinery/atmospherics/binary/oxyregenerator/verb/rotate_clockwise() - set category = "Object" - set name = "Rotate (Clockwise)" - set src in view(1) - - if (usr.incapacitated() || anchored) - return - - src.set_dir(turn(src.dir, -90)) - -/obj/machinery/atmospherics/binary/oxyregenerator/verb/rotate_anticlockwise() - set category = "Object" - set name = "Rotate (Counterclockwise)" - set src in view(1) - - if (usr.incapacitated() || anchored) - return - - src.set_dir(turn(src.dir, 90)) - -/obj/machinery/atmospherics/binary/oxyregenerator/Process(var/delay) - ..() - if((stat & (NOPOWER|BROKEN)) || !use_power) - return - - var/power_draw = -1 - last_power_draw = 0 - //TODO Add overlay with F-P-R letter to display current state - if (phase == "filling")//filling tank - var/pressure_delta = target_pressure - inner_tank.return_pressure() - if (pressure_delta > 0.01 && air1.temperature > 0) - var/transfer_moles = calculate_transfer_moles(air1, inner_tank, pressure_delta) - power_draw = pump_gas(src, air1, inner_tank, transfer_moles, power_rating*power_setting) * intake_power_efficiency - if (power_draw >= 0) - last_power_draw = power_draw - use_power_oneoff(power_draw) - if(network1) - network1.update = 1 - if (air1.return_pressure() < 0.1 * ONE_ATMOSPHERE || inner_tank.return_pressure() >= target_pressure * 0.95)//if pipe is good as empty or tank is full - phase = "processing" - - if (phase == "processing")//processing CO2 in tank - if (inner_tank.gas[GAS_CO2]) - var/co2_intake = clamp(inner_tank.gas[GAS_CO2], 0, power_setting * delay * 0.1) - last_flow_rate = co2_intake - inner_tank.adjust_gas(GAS_CO2, -co2_intake, 1) - var/datum/gas_mixture/new_oxygen = new - new_oxygen.adjust_gas(GAS_OXYGEN, co2_intake) - new_oxygen.temperature = T20C+30 //it's sort of hot after molecular bond breaking - inner_tank.merge(new_oxygen) - carbon_stored += co2_intake * carbon_efficiency - while (carbon_stored >= carbon_moles_per_piece) - carbon_stored -= carbon_moles_per_piece - var/material/M = SSmaterials.get_material_by_name(MATERIAL_GRAPHITE) - M.place_sheet(get_turf(src), 1, M.name) - power_draw = power_rating * co2_intake - last_power_draw = power_draw - use_power_oneoff(power_draw) - else - phase = "releasing" - - if (phase == "releasing")//releasing processed gas mix - power_draw = -1 - var/pressure_delta = target_pressure - air2.return_pressure() - if (pressure_delta > 0.01 && inner_tank.temperature > 0) - var/transfer_moles = calculate_transfer_moles(inner_tank, air2, pressure_delta, (network2)? network2.volume : 0) - power_draw = pump_gas(src, inner_tank, air2, transfer_moles, power_rating*power_setting) - if (power_draw >= 0) - last_power_draw = power_draw - use_power_oneoff(power_draw) - if(network2) - network2.update = 1 - else//can't push outside harder than target pressure. Device is not intended to be used as a pump after all - phase = "filling" - if (inner_tank.return_pressure() <= 0.1) - phase = "filling" - -/obj/machinery/atmospherics/binary/oxyregenerator/on_update_icon() - if(stat & NOPOWER) - icon_state = "off" - else - icon_state = "[use_power ? "on" : "off"]" - -/obj/machinery/atmospherics/binary/oxyregenerator/interface_interact(user) - ui_interact(user) - return TRUE - -/obj/machinery/atmospherics/binary/oxyregenerator/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1) - var/data[0] - data["on"] = use_power ? 1 : 0 - data["powerSetting"] = power_setting - data["gasProcessed"] = last_flow_rate - data["air1Pressure"] = round(air1.return_pressure()) - data["air2Pressure"] = round(air2.return_pressure()) - data["tankPressure"] = round(inner_tank.return_pressure()) - data["targetPressure"] = round(target_pressure) - data["phase"] = phase - if (inner_tank.total_moles > 0) - data["co2"] = round(100 * inner_tank.gas[GAS_CO2]/inner_tank.total_moles) - data["o2"] = round(100 * inner_tank.gas[GAS_OXYGEN]/inner_tank.total_moles) - else - data["co2"] = 0 - data["o2"] = 0 - // update the ui if it exists, returns null if no ui is passed/found - ui = SSnano.try_update_ui(user, src, ui_key, ui, data, force_open) - if(!ui) - ui = new(user, src, ui_key, "oxyregenerator.tmpl", "Oxygen Regeneration System", 440, 300) - ui.set_initial_data(data) - ui.open() - ui.set_auto_update(1) - -/obj/machinery/atmospherics/binary/oxyregenerator/Topic(href, href_list) - if(..()) - return 1 - if(href_list["toggleStatus"]) - update_use_power(!use_power) - update_icon() - return 1 - if(href_list["setPower"]) //setting power to 0 is redundant anyways - power_setting = clamp(text2num(href_list["setPower"]), 1, 5) - return 1 diff --git a/code/modules/atmospherics/components/binary_devices/passive_gate.dm b/code/modules/atmospherics/components/binary_devices/passive_gate.dm deleted file mode 100644 index 9458beedfda28..0000000000000 --- a/code/modules/atmospherics/components/binary_devices/passive_gate.dm +++ /dev/null @@ -1,262 +0,0 @@ -#define REGULATE_NONE 0 -#define REGULATE_INPUT 1 //shuts off when input side is below the target pressure -#define REGULATE_OUTPUT 2 //shuts off when output side is above the target pressure - -/obj/machinery/atmospherics/binary/passive_gate - icon = 'icons/atmos/passive_gate.dmi' - icon_state = "map_off" - level = 1 - - name = "pressure regulator" - desc = "A one-way air valve that can be used to regulate input or output pressure, and flow rate. Does not require power." - - use_power = POWER_USE_OFF - uncreated_component_parts = null - interact_offline = 1 - var/unlocked = 0 //If 0, then the valve is locked closed, otherwise it is open(-able, it's a one-way valve so it closes if gas would flow backwards). - var/target_pressure = ONE_ATMOSPHERE - var/max_pressure_setting = MAX_PUMP_PRESSURE - var/set_flow_rate = ATMOS_DEFAULT_VOLUME_PUMP * 2.5 - var/regulate_mode = REGULATE_OUTPUT - - var/flowing = 0 //for icons - becomes zero if the valve closes itself due to regulation mode - - var/frequency = 0 - var/id = null - var/datum/radio_frequency/radio_connection - - connect_types = CONNECT_TYPE_REGULAR|CONNECT_TYPE_FUEL - build_icon_state = "passivegate" - -/obj/machinery/atmospherics/binary/passive_gate/on - unlocked = 1 - icon_state = "map_on" - -/obj/machinery/atmospherics/binary/passive_gate/Initialize() - . = ..() - air1.volume = ATMOS_DEFAULT_VOLUME_PUMP * 2.5 - air2.volume = ATMOS_DEFAULT_VOLUME_PUMP * 2.5 - -/obj/machinery/atmospherics/binary/passive_gate/on_update_icon() - icon_state = (unlocked && flowing)? "on" : "off" - -/obj/machinery/atmospherics/binary/passive_gate/update_underlays() - if(..()) - underlays.Cut() - var/turf/T = get_turf(src) - if(!istype(T)) - return - add_underlay(T, node1, turn(dir, 180)) - add_underlay(T, node2, dir) - -/obj/machinery/atmospherics/binary/passive_gate/hide(var/i) - update_underlays() - -/obj/machinery/atmospherics/binary/passive_gate/Process() - ..() - - last_flow_rate = 0 - - if(!unlocked) - return 0 - - var/output_starting_pressure = air2.return_pressure() - var/input_starting_pressure = air1.return_pressure() - - var/pressure_delta - switch (regulate_mode) - if (REGULATE_INPUT) - pressure_delta = input_starting_pressure - target_pressure - if (REGULATE_OUTPUT) - pressure_delta = target_pressure - output_starting_pressure - - //-1 if pump_gas() did not move any gas, >= 0 otherwise - var/returnval = -1 - if((regulate_mode == REGULATE_NONE || pressure_delta > 0.01) && (air1.temperature > 0 || air2.temperature > 0)) //since it's basically a valve, it makes sense to check both temperatures - flowing = 1 - - //flow rate limit - var/transfer_moles = (set_flow_rate/air1.volume)*air1.total_moles - - //Figure out how much gas to transfer to meet the target pressure. - switch (regulate_mode) - if (REGULATE_INPUT) - transfer_moles = min(transfer_moles, calculate_transfer_moles(air2, air1, pressure_delta, (network1)? network1.volume : 0)) - if (REGULATE_OUTPUT) - transfer_moles = min(transfer_moles, calculate_transfer_moles(air1, air2, pressure_delta, (network2)? network2.volume : 0)) - - //pump_gas() will return a negative number if no flow occurred - returnval = pump_gas_passive(src, air1, air2, transfer_moles) - - if (returnval >= 0) - if(network1) - network1.update = 1 - - if(network2) - network2.update = 1 - - if (last_flow_rate) - flowing = 1 - - update_icon() - - -//Radio remote control - -/obj/machinery/atmospherics/binary/passive_gate/proc/set_frequency(new_frequency) - radio_controller.remove_object(src, frequency) - frequency = new_frequency - if(frequency) - radio_connection = radio_controller.add_object(src, frequency, object_filter = RADIO_ATMOSIA) - -/obj/machinery/atmospherics/binary/passive_gate/proc/broadcast_status() - if(!radio_connection) - return 0 - - var/datum/signal/signal = new - signal.transmission_method = 1 //radio signal - signal.source = src - - signal.data = list( - "tag" = id, - "device" = "AGP", - "power" = unlocked, - "target_output" = target_pressure, - "regulate_mode" = regulate_mode, - "set_flow_rate" = set_flow_rate, - "sigtype" = "status" - ) - - radio_connection.post_signal(src, signal, radio_filter = RADIO_ATMOSIA) - - return 1 - -/obj/machinery/atmospherics/binary/passive_gate/Initialize() - . = ..() - if(frequency) - set_frequency(frequency) - -/obj/machinery/atmospherics/binary/passive_gate/Destroy() - unregister_radio(src, frequency) - . = ..() - -/obj/machinery/atmospherics/binary/passive_gate/receive_signal(datum/signal/signal) - if(!signal.data["tag"] || (signal.data["tag"] != id) || (signal.data["sigtype"]!="command")) - return 0 - - if("set_power" in signal.data) - unlocked = text2num(signal.data["set_power"]) - - if("power_toggle" in signal.data) - unlocked = !unlocked - - if("set_target_pressure" in signal.data) - target_pressure = text2num(signal.data["set_target_pressure"]) - target_pressure = clamp(target_pressure, 0, max_pressure_setting) - - if("set_regulate_mode" in signal.data) - regulate_mode = text2num(signal.data["set_regulate_mode"]) - - if("set_flow_rate" in signal.data) - regulate_mode = text2num(signal.data["set_flow_rate"]) - - if("status" in signal.data) - spawn(2) - broadcast_status() - return //do not update_icon - - spawn(2) - broadcast_status() - update_icon() - return - -/obj/machinery/atmospherics/binary/passive_gate/interface_interact(mob/user) - ui_interact(user) - return - -/obj/machinery/atmospherics/binary/passive_gate/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1) - // this is the data which will be sent to the ui - var/data[0] - - data = list( - "on" = unlocked, - "pressure_set" = round(target_pressure*100), //Nano UI can't handle rounded non-integers, apparently. - "max_pressure" = max_pressure_setting, - "input_pressure" = round(air1.return_pressure()*100), - "output_pressure" = round(air2.return_pressure()*100), - "regulate_mode" = regulate_mode, - "set_flow_rate" = round(set_flow_rate*10), - "last_flow_rate" = round(last_flow_rate*10), - ) - - // update the ui if it exists, returns null if no ui is passed/found - ui = SSnano.try_update_ui(user, src, ui_key, ui, data, force_open) - if (!ui) - // the ui does not exist, so we'll create a new() one - // for a list of parameters and their descriptions see the code docs in \code\modules\nano\nanoui.dm - ui = new(user, src, ui_key, "pressure_regulator.tmpl", name, 470, 370) - ui.set_initial_data(data) // when the ui is first opened this is the data it will use - ui.open() // open the new ui window - ui.set_auto_update(1) // auto update every Master Controller tick - - -/obj/machinery/atmospherics/binary/passive_gate/Topic(href,href_list) - if(..()) return 1 - - if(href_list["toggle_valve"]) - unlocked = !unlocked - - if(href_list["regulate_mode"]) - switch(href_list["regulate_mode"]) - if ("off") regulate_mode = REGULATE_NONE - if ("input") regulate_mode = REGULATE_INPUT - if ("output") regulate_mode = REGULATE_OUTPUT - - switch(href_list["set_press"]) - if ("min") - target_pressure = 0 - if ("max") - target_pressure = max_pressure_setting - if ("set") - var/new_pressure = input(usr,"Enter new output pressure (0-[max_pressure_setting]kPa)","Pressure Control",src.target_pressure) as num - src.target_pressure = clamp(new_pressure, 0, max_pressure_setting) - - switch(href_list["set_flow_rate"]) - if ("min") - set_flow_rate = 0 - if ("max") - set_flow_rate = air1.volume - if ("set") - var/new_flow_rate = input(usr,"Enter new flow rate limit (0-[air1.volume]kPa)","Flow Rate Control",src.set_flow_rate) as num - src.set_flow_rate = clamp(new_flow_rate, 0, air1.volume) - - usr.set_machine(src) //Is this even needed with NanoUI? - src.update_icon() - src.add_fingerprint(usr) - return - -/obj/machinery/atmospherics/binary/passive_gate/attackby(var/obj/item/W as obj, var/mob/user as mob) - if(!isWrench(W)) - return ..() - if (unlocked) - to_chat(user, "You cannot unwrench \the [src], turn it off first.") - return 1 - var/datum/gas_mixture/int_air = return_air() - var/datum/gas_mixture/env_air = loc.return_air() - if ((int_air.return_pressure()-env_air.return_pressure()) > 2*ONE_ATMOSPHERE) - to_chat(user, "You cannot unwrench \the [src], it too exerted due to internal pressure.") - add_fingerprint(user) - return 1 - playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1) - to_chat(user, "You begin to unfasten \the [src]...") - if (do_after(user, 4 SECONDS, src, DO_PUBLIC_UNIQUE)) - user.visible_message( \ - "\The [user] unfastens \the [src].", \ - "You have unfastened \the [src].", \ - "You hear ratchet.") - new /obj/item/pipe(loc, src) - qdel(src) - -#undef REGULATE_NONE -#undef REGULATE_INPUT -#undef REGULATE_OUTPUT diff --git a/code/modules/atmospherics/components/binary_devices/pump.dm b/code/modules/atmospherics/components/binary_devices/pump.dm deleted file mode 100644 index e341d9f477665..0000000000000 --- a/code/modules/atmospherics/components/binary_devices/pump.dm +++ /dev/null @@ -1,222 +0,0 @@ -/* -Every cycle, the pump uses the air in air_in to try and make air_out the perfect pressure. - -node1, air1, network1 correspond to input -node2, air2, network2 correspond to output - -Thus, the two variables affect pump operation are set in New(): - air1.volume - This is the volume of gas available to the pump that may be transfered to the output - air2.volume - Higher quantities of this cause more air to be perfected later - but overall network volume is also increased as this increases... -*/ - -/obj/machinery/atmospherics/binary/pump - icon = 'icons/atmos/pump.dmi' - icon_state = "map_off" - level = 1 - - name = "gas pump" - desc = "A pump." - - var/target_pressure = ONE_ATMOSPHERE - - //var/max_volume_transfer = 10000 - - use_power = POWER_USE_OFF - idle_power_usage = 150 //internal circuitry, friction losses and stuff - power_rating = 30000 // 30000 W ~ 40 HP - identifier = "AGP" - - var/max_pressure_setting = MAX_PUMP_PRESSURE - - connect_types = CONNECT_TYPE_REGULAR|CONNECT_TYPE_FUEL - build_icon_state = "pump" - - uncreated_component_parts = list( - /obj/item/stock_parts/power/apc - ) - public_variables = list( - /decl/public_access/public_variable/input_toggle, - /decl/public_access/public_variable/identifier, - /decl/public_access/public_variable/use_power, - /decl/public_access/public_variable/pump_target_output - ) - public_methods = list( - /decl/public_access/public_method/toggle_power, - /decl/public_access/public_method/refresh - ) - stock_part_presets = list( - /decl/stock_part_preset/radio/receiver/pump = 1, - /decl/stock_part_preset/radio/event_transmitter/pump = 1 - ) - - frame_type = /obj/item/pipe - construct_state = /decl/machine_construction/default/item_chassis - base_type = /obj/machinery/atmospherics/binary/pump - -/obj/machinery/atmospherics/binary/pump/Initialize() - . = ..() - air1.volume = ATMOS_DEFAULT_VOLUME_PUMP - air2.volume = ATMOS_DEFAULT_VOLUME_PUMP - -/obj/machinery/atmospherics/binary/pump/AltClick() - Topic(src, list("power" = "1")) - -/obj/machinery/atmospherics/binary/pump/on - icon_state = "map_on" - use_power = POWER_USE_IDLE - - -/obj/machinery/atmospherics/binary/pump/on_update_icon() - if(!powered()) - icon_state = "off" - else - icon_state = "[use_power ? "on" : "off"]" - -/obj/machinery/atmospherics/binary/pump/update_underlays() - if(..()) - underlays.Cut() - var/turf/T = get_turf(src) - if(!istype(T)) - return - add_underlay(T, node1, turn(dir, -180)) - add_underlay(T, node2, dir) - -/obj/machinery/atmospherics/binary/pump/hide(var/i) - update_underlays() - -/obj/machinery/atmospherics/binary/pump/Process() - last_power_draw = 0 - last_flow_rate = 0 - - if((stat & (NOPOWER|BROKEN)) || !use_power) - return - - var/power_draw = -1 - var/pressure_delta = target_pressure - air2.return_pressure() - - if(pressure_delta > 0.01 && air1.temperature > 0) - //Figure out how much gas to transfer to meet the target pressure. - var/transfer_moles = calculate_transfer_moles(air1, air2, pressure_delta, (network2)? network2.volume : 0) - power_draw = pump_gas(src, air1, air2, transfer_moles, power_rating) - - if (power_draw >= 0) - last_power_draw = power_draw - use_power_oneoff(power_draw) - - if(network1) - network1.update = 1 - - if(network2) - network2.update = 1 - - return 1 - -/obj/machinery/atmospherics/binary/pump/return_air() - if(air1.return_pressure() > air2.return_pressure()) - return air1 - else - return air2 - -/obj/machinery/atmospherics/binary/pump/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1) - if(stat & (BROKEN|NOPOWER)) - return - - // this is the data which will be sent to the ui - var/data[0] - - data = list( - "on" = use_power, - "pressure_set" = round(target_pressure*100), //Nano UI can't handle rounded non-integers, apparently. - "max_pressure" = max_pressure_setting, - "last_flow_rate" = round(last_flow_rate*10), - "last_power_draw" = round(last_power_draw), - "max_power_draw" = power_rating, - ) - - // update the ui if it exists, returns null if no ui is passed/found - ui = SSnano.try_update_ui(user, src, ui_key, ui, data, force_open) - if (!ui) - // the ui does not exist, so we'll create a new() one - // for a list of parameters and their descriptions see the code docs in \code\modules\nano\nanoui.dm - ui = new(user, src, ui_key, "gas_pump.tmpl", name, 470, 290) - ui.set_initial_data(data) // when the ui is first opened this is the data it will use - ui.open() // open the new ui window - ui.set_auto_update(1) // auto update every Master Controller tick - -/obj/machinery/atmospherics/binary/pump/interface_interact(mob/user) - ui_interact(user) - return TRUE - -/obj/machinery/atmospherics/binary/pump/Topic(href,href_list) - if((. = ..())) return - - if(href_list["power"]) - update_use_power(!use_power) - . = 1 - - switch(href_list["set_press"]) - if ("min") - target_pressure = 0 - . = 1 - if ("max") - target_pressure = max_pressure_setting - . = 1 - if ("set") - var/new_pressure = input(usr,"Enter new output pressure (0-[max_pressure_setting]kPa)","Pressure control",src.target_pressure) as num - src.target_pressure = clamp(new_pressure, 0, max_pressure_setting) - . = 1 - - if(.) - src.update_icon() - -/obj/machinery/atmospherics/binary/pump/cannot_transition_to(state_path, mob/user) - if(state_path == /decl/machine_construction/default/deconstructed) - if (!(stat & NOPOWER) && use_power) - return SPAN_WARNING("You cannot take this [src] apart, turn it off first.") - var/datum/gas_mixture/int_air = return_air() - var/datum/gas_mixture/env_air = loc.return_air() - if ((int_air.return_pressure()-env_air.return_pressure()) > 2*ONE_ATMOSPHERE) - return SPAN_WARNING("You cannot take this [src] apart, it too exerted due to internal pressure.") - return ..() - -/decl/public_access/public_variable/pump_target_output - expected_type = /obj/machinery/atmospherics/binary/pump - name = "output pressure" - desc = "The output pressure of the pump." - can_write = TRUE - has_updates = FALSE - var_type = IC_FORMAT_NUMBER - -/decl/public_access/public_variable/pump_target_output/access_var(obj/machinery/atmospherics/binary/pump/machine) - return machine.target_pressure - -/decl/public_access/public_variable/pump_target_output/write_var(obj/machinery/atmospherics/binary/pump/machine, new_value) - new_value = clamp(new_value, 0, machine.max_pressure_setting) - . = ..() - if(.) - machine.target_pressure = new_value - -/decl/stock_part_preset/radio/event_transmitter/pump - frequency = PUMP_FREQ - filter = RADIO_ATMOSIA - event = /decl/public_access/public_variable/input_toggle - transmit_on_event = list( - "device" = /decl/public_access/public_variable/identifier, - "power" = /decl/public_access/public_variable/use_power, - "target_output" = /decl/public_access/public_variable/pump_target_output - ) - -/decl/stock_part_preset/radio/receiver/pump - frequency = PUMP_FREQ - filter = RADIO_ATMOSIA - receive_and_call = list( - "power_toggle" = /decl/public_access/public_method/toggle_power, - "status" = /decl/public_access/public_method/refresh - ) - receive_and_write = list( - "set_power" = /decl/public_access/public_variable/use_power, - "set_output_pressure" = /decl/public_access/public_variable/pump_target_output - ) \ No newline at end of file diff --git a/code/modules/atmospherics/components/binary_devices/volume_pump.dm b/code/modules/atmospherics/components/binary_devices/volume_pump.dm deleted file mode 100644 index 3ae7966bc1b54..0000000000000 --- a/code/modules/atmospherics/components/binary_devices/volume_pump.dm +++ /dev/null @@ -1,25 +0,0 @@ -/obj/machinery/atmospherics/binary/pump/high_power - icon = 'icons/atmos/volume_pump.dmi' - icon_state = "map_off" - level = 1 - - name = "high power gas pump" - desc = "A pump. Has double the power rating of the standard gas pump." - - idle_power_usage = 450 // oversized pumps means oversized idle use - power_rating = 45000 // 45000 W ~ 60 HP - build_icon_state = "volumepump" - base_type = /obj/machinery/atmospherics/binary/pump/high_power/buildable - -/obj/machinery/atmospherics/binary/pump/high_power/buildable - uncreated_component_parts = null - -/obj/machinery/atmospherics/binary/pump/high_power/on - use_power = POWER_USE_IDLE - icon_state = "map_on" - -/obj/machinery/atmospherics/binary/pump/high_power/on_update_icon() - if(!powered()) - icon_state = "off" - else - icon_state = "[use_power ? "on" : "off"]" diff --git a/code/modules/atmospherics/components/omni_devices/_omni_extras.dm b/code/modules/atmospherics/components/omni_devices/_omni_extras.dm deleted file mode 100644 index 895acb0a9a2c0..0000000000000 --- a/code/modules/atmospherics/components/omni_devices/_omni_extras.dm +++ /dev/null @@ -1,97 +0,0 @@ -//-------------------------------------------- -// Omni device port types -//-------------------------------------------- -#define ATM_NONE 0 -#define ATM_INPUT 1 -#define ATM_OUTPUT 2 - -#define ATM_GAS_MIN 3 // Lower bound for gas mode iteration. -#define ATM_O2 3 // Oxygen. -#define ATM_N2 4 // Nitrogen. -#define ATM_CO2 5 // Carbon dioxide. -#define ATM_P 6 // Phoron. -#define ATM_N2O 7 // Nitrous oxide. -#define ATM_H2 8 // Hydrogen. -#define ATM_CH3BR 9 // Methyl bromide. -#define ATM_GAS_MAX 9 // Upper bound for gas mode iteration. - -//-------------------------------------------- -// Omni port datum -// -// Used by omni devices to manage connections -// to other atmospheric objects. -//-------------------------------------------- -/datum/omni_port - var/obj/machinery/atmospherics/omni/master - var/dir - var/update = 1 - var/mode = 0 - var/concentration = 0 - var/con_lock = 0 - var/transfer_moles = 0 - var/datum/gas_mixture/air - var/obj/machinery/atmospherics/node - var/datum/pipe_network/network - -/datum/omni_port/New(var/obj/machinery/atmospherics/omni/M, var/direction = NORTH) - ..() - dir = direction - if(istype(M)) - master = M - air = new - air.volume = 200 - -/datum/omni_port/proc/connect() - if(node) - return - master.atmos_init() - master.build_network() - if(node) - node.atmos_init() - node.build_network() - -/datum/omni_port/proc/disconnect() - if(node) - node.disconnect(master) - master.disconnect(node) - - -//-------------------------------------------- -// Need to find somewhere else for these -//-------------------------------------------- - -//returns a text string based on the direction flag input -// if capitalize is true, it will return the string capitalized -// otherwise it will return the direction string in lower case -/proc/dir_name(var/dir, var/capitalize = 0) - var/string = null - switch(dir) - if(NORTH) - string = "North" - if(SOUTH) - string = "South" - if(EAST) - string = "East" - if(WEST) - string = "West" - - if(!capitalize && string) - string = lowertext(string) - - return string - -//returns a direction flag based on the string passed to it -// case insensitive -/proc/dir_flag(var/dir) - dir = lowertext(dir) - switch(dir) - if("north") - return NORTH - if("south") - return SOUTH - if("east") - return EAST - if("west") - return WEST - else - return 0 diff --git a/code/modules/atmospherics/components/omni_devices/filter.dm b/code/modules/atmospherics/components/omni_devices/filter.dm deleted file mode 100644 index cee597ec165f6..0000000000000 --- a/code/modules/atmospherics/components/omni_devices/filter.dm +++ /dev/null @@ -1,287 +0,0 @@ -// In theory these lists could be generated at runtime from values -// on the XGM gas datums - would need to have a consistent/constant -// id for the gasses but otherwise should allow for true omni filters. - -GLOBAL_LIST_INIT(filter_gas_to_mode, list( \ - "None" = ATM_NONE, \ - "Oxygen" = ATM_O2, \ - "Nitrogen" = ATM_N2, \ - "Carbon Dioxide" = ATM_CO2, \ - "Phoron" = ATM_P, \ - "Nitrous Oxide" = ATM_N2O, \ - "Hydrogen" = ATM_H2, \ - "Methyl Bromide" = ATM_CH3BR \ -)) - -GLOBAL_LIST_INIT(filter_mode_to_gas, list( \ - "[ATM_O2]" = "Oxygen", \ - "[ATM_N2]" = "Nitrogen", \ - "[ATM_CO2]" = "Carbon Dioxide", \ - "[ATM_P]" = "Phoron", \ - "[ATM_N2O]" = "Nitrous Oxide", \ - "[ATM_H2]" = "Hydrogen", \ - "[ATM_CH3BR]" = "Methyl Bromide" \ -)) - -GLOBAL_LIST_INIT(filter_mode_to_gas_id, list( \ - "[ATM_O2]" = "[GAS_OXYGEN]", \ - "[ATM_N2]" = "[GAS_NITROGEN]", \ - "[ATM_CO2]" = "[GAS_CO2]", \ - "[ATM_P]" = "[GAS_PHORON]", \ - "[ATM_N2O]" = "[GAS_N2O]", \ - "[ATM_H2]" = "[GAS_HYDROGEN]", \ - "[ATM_CH3BR]" = "[GAS_METHYL_BROMIDE]" \ -)) - -//-------------------------------------------- -// Gas filter - omni variant -//-------------------------------------------- -/obj/machinery/atmospherics/omni/filter - name = "omni gas filter" - icon_state = "map_filter" - - var/list/gas_filters = new() - var/datum/omni_port/input - var/datum/omni_port/output - var/max_output_pressure = MAX_OMNI_PRESSURE - - idle_power_usage = 150 //internal circuitry, friction losses and stuff - power_rating = 15000 // 15000 W ~ 20 HP - - var/max_flow_rate = ATMOS_DEFAULT_VOLUME_FILTER - var/set_flow_rate = ATMOS_DEFAULT_VOLUME_FILTER - - var/list/filtering_outputs = list() //maps gasids to gas_mixtures - build_icon_state = "omni_filter" - -/obj/machinery/atmospherics/omni/filter/Initialize() - . = ..() - rebuild_filtering_list() - for(var/datum/omni_port/P in ports) - P.air.volume = ATMOS_DEFAULT_VOLUME_FILTER - -/obj/machinery/atmospherics/omni/filter/Destroy() - input = null - output = null - gas_filters.Cut() - . = ..() - -/obj/machinery/atmospherics/omni/filter/sort_ports() - for(var/datum/omni_port/P in ports) - if(P.update) - if(output == P) - output = null - if(input == P) - input = null - if(P in gas_filters) - gas_filters -= P - - P.air.volume = ATMOS_DEFAULT_VOLUME_FILTER - switch(P.mode) - if(ATM_INPUT) - input = P - if(ATM_OUTPUT) - output = P - if(ATM_GAS_MIN to ATM_GAS_MAX) - gas_filters += P - -/obj/machinery/atmospherics/omni/filter/error_check() - if(!input || !output || !gas_filters) - return 1 - if(gas_filters.len < 1) //requires at least 1 filter ~otherwise why are you using a filter? - return 1 - - return 0 - -/obj/machinery/atmospherics/omni/filter/Process() - if(!..()) - return 0 - - var/datum/gas_mixture/output_air = output.air //BYOND doesn't like referencing "output.air.return_pressure()" so we need to make a direct reference - var/datum/gas_mixture/input_air = input.air // it's completely happy with them if they're in a loop though i.e. "P.air.return_pressure()"... *shrug* - - var/delta = clamp((output_air ? (max_output_pressure - output_air.return_pressure()) : 0), 0, max_output_pressure) - var/transfer_moles_max = calculate_transfer_moles(input_air, output_air, delta, (output && output.network && output.network.volume) ? output.network.volume : 0) - for(var/datum/omni_port/filter_output in gas_filters) - delta = clamp((filter_output.air ? (max_output_pressure - filter_output.air.return_pressure()) : 0), 0, max_output_pressure) - transfer_moles_max = min(transfer_moles_max, (calculate_transfer_moles(input_air, filter_output.air, delta, (filter_output && filter_output.network && filter_output.network.volume) ? filter_output.network.volume : 0))) - - //Figure out the amount of moles to transfer - var/transfer_moles = clamp(((set_flow_rate/input_air.volume)*input_air.total_moles), 0, transfer_moles_max) - - var/power_draw = -1 - if (transfer_moles > MINIMUM_MOLES_TO_FILTER) - power_draw = filter_gas_multi(src, filtering_outputs, input_air, output_air, transfer_moles, power_rating) - - if (power_draw >= 0) - last_power_draw = power_draw - use_power_oneoff(power_draw) - - if(input.network) - input.network.update = 1 - if(output.network) - output.network.update = 1 - for(var/datum/omni_port/P in gas_filters) - if(P.network) - P.network.update = 1 - - return 1 - -/obj/machinery/atmospherics/omni/filter/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1) - if(!user) - if (ui) - ui.close() - return - - user.set_machine(src) - - var/list/data = new() - - data = build_uidata() - - ui = SSnano.try_update_ui(user, src, ui_key, ui, data, force_open) - - if (!ui) - ui = new(user, src, ui_key, "omni_filter.tmpl", "Omni Filter Control", 330, 330) - ui.set_initial_data(data) - - ui.open() - -/obj/machinery/atmospherics/omni/filter/proc/build_uidata() - var/list/data = new() - - data["power"] = use_power - data["config"] = configuring - - var/portData[0] - for(var/datum/omni_port/P in ports) - if(!configuring && P.mode == 0) - continue - - var/input = 0 - var/output = 0 - var/is_filter = 1 - var/f_type = null - switch(P.mode) - if(ATM_INPUT) - input = 1 - is_filter = 0 - if(ATM_OUTPUT) - output = 1 - is_filter = 0 - if(ATM_GAS_MIN to ATM_GAS_MAX) - f_type = mode_send_switch(P.mode) - - portData[++portData.len] = list("dir" = dir_name(P.dir, capitalize = 1), \ - "input" = input, \ - "output" = output, \ - "filter" = is_filter, \ - "f_type" = f_type) - - if(portData.len) - data["ports"] = portData - if(output) - data["set_flow_rate"] = round(set_flow_rate*10) //because nanoui can't handle rounded decimals. - data["last_flow_rate"] = round(last_flow_rate*10) - - return data - -/obj/machinery/atmospherics/omni/filter/proc/mode_send_switch(var/mode = ATM_NONE) - return GLOB.filter_mode_to_gas["[mode]"] - -/obj/machinery/atmospherics/omni/filter/Topic(href, href_list) - if(..()) return 1 - switch(href_list["command"]) - if("power") - if(!configuring) - update_use_power(!use_power) - else - update_use_power(POWER_USE_OFF) - if("configure") - configuring = !configuring - if(configuring) - update_use_power(POWER_USE_OFF) - - //only allows config changes when in configuring mode ~otherwise you'll get weird pressure stuff going on - if(configuring && !use_power) - switch(href_list["command"]) - if("set_flow_rate") - var/new_flow_rate = input(usr,"Enter new flow rate limit (0-[max_flow_rate]L/s)","Flow Rate Control",set_flow_rate) as num - set_flow_rate = clamp(new_flow_rate, 0, max_flow_rate) - if("switch_mode") - switch_mode(dir_flag(href_list["dir"]), mode_return_switch(href_list["mode"])) - if("switch_filter") - var/new_filter = input(usr,"Select filter mode:","Change filter",href_list["mode"]) in GLOB.filter_gas_to_mode - switch_filter(dir_flag(href_list["dir"]), mode_return_switch(new_filter)) - - update_icon() - SSnano.update_uis(src) - return - -/obj/machinery/atmospherics/omni/filter/proc/mode_return_switch(var/mode) - . = GLOB.filter_gas_to_mode[mode] - if(!.) - switch(mode) - if("in") - return ATM_INPUT - if("out") - return ATM_OUTPUT - -/obj/machinery/atmospherics/omni/filter/proc/switch_filter(var/dir, var/mode) - //check they aren't trying to disable the input or output ~this can only happen if they hack the cached tmpl file - for(var/datum/omni_port/P in ports) - if(P.dir == dir) - if(P.mode == ATM_INPUT || P.mode == ATM_OUTPUT) - return - - switch_mode(dir, mode) - -/obj/machinery/atmospherics/omni/filter/proc/switch_mode(var/port, var/mode) - if(mode == null || !port) - return - var/datum/omni_port/target_port = null - var/list/other_ports = new() - - for(var/datum/omni_port/P in ports) - if(P.dir == port) - target_port = P - else - other_ports += P - - var/previous_mode = null - if(target_port) - previous_mode = target_port.mode - target_port.mode = mode - if(target_port.mode != previous_mode) - handle_port_change(target_port) - rebuild_filtering_list() - else - return - else - return - - for(var/datum/omni_port/P in other_ports) - if(P.mode == mode) - var/old_mode = P.mode - P.mode = previous_mode - if(P.mode != old_mode) - handle_port_change(P) - - update_ports() - -/obj/machinery/atmospherics/omni/filter/proc/rebuild_filtering_list() - filtering_outputs.Cut() - for(var/datum/omni_port/P in ports) - var/gasid = GLOB.filter_mode_to_gas_id["[P.mode]"] - if(gasid) - filtering_outputs[gasid] = P.air - -/obj/machinery/atmospherics/omni/filter/proc/handle_port_change(var/datum/omni_port/P) - switch(P.mode) - if(ATM_NONE) - initialize_directions &= ~P.dir - P.disconnect() - else - initialize_directions |= P.dir - P.connect() - P.update = 1 \ No newline at end of file diff --git a/code/modules/atmospherics/components/omni_devices/mixer.dm b/code/modules/atmospherics/components/omni_devices/mixer.dm deleted file mode 100644 index 508c7eaf7206a..0000000000000 --- a/code/modules/atmospherics/components/omni_devices/mixer.dm +++ /dev/null @@ -1,303 +0,0 @@ -//-------------------------------------------- -// Gas mixer - omni variant -//-------------------------------------------- -/obj/machinery/atmospherics/omni/mixer - name = "omni gas mixer" - icon_state = "map_mixer" - - idle_power_usage = 150 //internal circuitry, friction losses and stuff - power_rating = 15000 // 15000 W ~ 20 HP - - var/list/inputs = new() - var/datum/omni_port/output - var/max_output_pressure = MAX_OMNI_PRESSURE - - //setup tags for initial concentration values (must be decimal) - var/tag_north_con - var/tag_south_con - var/tag_east_con - var/tag_west_con - - var/max_flow_rate = ATMOS_DEFAULT_VOLUME_MIXER - var/set_flow_rate = ATMOS_DEFAULT_VOLUME_MIXER - - var/list/mixing_inputs = list() - build_icon_state = "omni_mixer" - -/obj/machinery/atmospherics/omni/mixer/Initialize() - . = ..() - if(mapper_set()) - var/con = 0 - for(var/datum/omni_port/P in ports) - switch(P.dir) - if(NORTH) - if(tag_north_con && tag_north == 1) - P.concentration = tag_north_con - con += max(0, tag_north_con) - if(SOUTH) - if(tag_south_con && tag_south == 1) - P.concentration = tag_south_con - con += max(0, tag_south_con) - if(EAST) - if(tag_east_con && tag_east == 1) - P.concentration = tag_east_con - con += max(0, tag_east_con) - if(WEST) - if(tag_west_con && tag_west == 1) - P.concentration = tag_west_con - con += max(0, tag_west_con) - - for(var/datum/omni_port/P in ports) - P.air.volume = ATMOS_DEFAULT_VOLUME_MIXER - -/obj/machinery/atmospherics/omni/mixer/Destroy() - inputs.Cut() - output = null - . = ..() - -/obj/machinery/atmospherics/omni/mixer/sort_ports() - for(var/datum/omni_port/P in ports) - if(P.update) - if(output == P) - output = null - if(inputs.Find(P)) - inputs -= P - - switch(P.mode) - if(ATM_INPUT) - inputs += P - if(ATM_OUTPUT) - output = P - - if(!mapper_set()) - for(var/datum/omni_port/P in inputs) - P.concentration = 1 / max(1, inputs.len) - - if(output) - output.air.volume = ATMOS_DEFAULT_VOLUME_MIXER * 0.75 * inputs.len - output.concentration = 1 - - rebuild_mixing_inputs() - -/obj/machinery/atmospherics/omni/mixer/proc/mapper_set() - return (tag_north_con || tag_south_con || tag_east_con || tag_west_con) - -/obj/machinery/atmospherics/omni/mixer/error_check() - if(!output || !inputs) - return 1 - if(inputs.len < 2) //requires at least 2 inputs ~otherwise why are you using a mixer? - return 1 - - //concentration must add to 1 - var/total = 0 - for (var/datum/omni_port/P in inputs) - total += P.concentration - - if (total != 1) - return 1 - - return 0 - -/obj/machinery/atmospherics/omni/mixer/Process() - if(!..()) - return 0 - - //Figure out the amount of moles to transfer - var/transfer_moles = 0 - var/datum/gas_mixture/output_gas = output.air - var/delta = clamp((output_gas ? (max_output_pressure - output_gas.return_pressure()) : 0), 0, max_output_pressure) - var/transfer_moles_max = INFINITY - - for (var/datum/omni_port/P in inputs) - transfer_moles += (set_flow_rate*P.concentration/P.air.volume)*P.air.total_moles - transfer_moles_max = min(transfer_moles_max, calculate_transfer_moles(P.air, output.air, delta, (output && output.network && output.network.volume) ? output.network.volume : 0)) - transfer_moles = clamp(transfer_moles, 0, transfer_moles_max) - - var/power_draw = -1 - if (transfer_moles > MINIMUM_MOLES_TO_FILTER) - power_draw = mix_gas(src, mixing_inputs, output.air, transfer_moles, power_rating) - - if (power_draw >= 0) - last_power_draw = power_draw - use_power_oneoff(power_draw) - - for(var/datum/omni_port/P in inputs) - if(P.concentration && P.network) - P.network.update = 1 - - if(output.network) - output.network.update = 1 - - return 1 - -/obj/machinery/atmospherics/omni/mixer/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1) - usr.set_machine(src) - - var/list/data = new() - - data = build_uidata() - - ui = SSnano.try_update_ui(user, src, ui_key, ui, data, force_open) - - if (!ui) - ui = new(user, src, ui_key, "omni_mixer.tmpl", "Omni Mixer Control", 360, 330) - ui.set_initial_data(data) - - ui.open() - -/obj/machinery/atmospherics/omni/mixer/proc/build_uidata() - var/list/data = new() - - data["power"] = use_power - data["config"] = configuring - - var/portData[0] - for(var/datum/omni_port/P in ports) - if(!configuring && P.mode == 0) - continue - - var/input = 0 - var/output = 0 - switch(P.mode) - if(ATM_INPUT) - input = 1 - if(ATM_OUTPUT) - output = 1 - - portData[++portData.len] = list("dir" = dir_name(P.dir, capitalize = 1), \ - "concentration" = P.concentration, \ - "input" = input, \ - "output" = output, \ - "con_lock" = P.con_lock) - - if(portData.len) - data["ports"] = portData - if(output) - data["set_flow_rate"] = round(set_flow_rate*10) //because nanoui can't handle rounded decimals. - data["last_flow_rate"] = round(last_flow_rate*10) - - return data - -/obj/machinery/atmospherics/omni/mixer/Topic(href, href_list) - if(..()) return 1 - - switch(href_list["command"]) - if("power") - if(!configuring) - update_use_power(!use_power) - else - update_use_power(POWER_USE_OFF) - if("configure") - configuring = !configuring - if(configuring) - update_use_power(POWER_USE_OFF) - - //only allows config changes when in configuring mode ~otherwise you'll get weird pressure stuff going on - if(configuring && !use_power) - switch(href_list["command"]) - if("set_flow_rate") - var/new_flow_rate = input(usr,"Enter new flow rate limit (0-[max_flow_rate]L/s)","Flow Rate Control",set_flow_rate) as num - set_flow_rate = clamp(new_flow_rate, 0, max_flow_rate) - if("switch_mode") - switch_mode(dir_flag(href_list["dir"]), href_list["mode"]) - if("switch_con") - change_concentration(dir_flag(href_list["dir"])) - if("switch_conlock") - con_lock(dir_flag(href_list["dir"])) - - update_icon() - SSnano.update_uis(src) - return - -/obj/machinery/atmospherics/omni/mixer/proc/switch_mode(var/port = NORTH, var/mode = ATM_NONE) - if(mode != ATM_INPUT && mode != ATM_OUTPUT) - switch(mode) - if("in") - mode = ATM_INPUT - if("out") - mode = ATM_OUTPUT - else - mode = ATM_NONE - - for(var/datum/omni_port/P in ports) - var/old_mode = P.mode - if(P.dir == port) - switch(mode) - if(ATM_INPUT) - if(P.mode == ATM_OUTPUT) - return - P.mode = mode - if(ATM_OUTPUT) - P.mode = mode - if(ATM_NONE) - if(P.mode == ATM_OUTPUT) - return - if(P.mode == ATM_INPUT && inputs.len > 2) - P.mode = mode - else if(P.mode == ATM_OUTPUT && mode == ATM_OUTPUT) - P.mode = ATM_INPUT - if(P.mode != old_mode) - switch(P.mode) - if(ATM_NONE) - initialize_directions &= ~P.dir - P.disconnect() - else - initialize_directions |= P.dir - P.connect() - P.update = 1 - - update_ports() - rebuild_mixing_inputs() - -/obj/machinery/atmospherics/omni/mixer/proc/change_concentration(var/port = NORTH) - tag_north_con = null - tag_south_con = null - tag_east_con = null - tag_west_con = null - - var/old_con = 0 - var/non_locked = 0 - var/remain_con = 1 - - for(var/datum/omni_port/P in inputs) - if(P.dir == port) - old_con = P.concentration - else if(!P.con_lock) - non_locked++ - else - remain_con -= P.concentration - - //return if no adjustable ports - if(non_locked < 1) - return - - var/new_con = (input(usr,"Enter a new concentration (0-[round(remain_con * 100, 0.5)])%","Concentration control", min(remain_con, old_con)*100) as num) / 100 - - //cap it between 0 and the max remaining concentration - new_con = clamp(new_con, 0, remain_con) - - //new_con = min(remain_con, new_con) - - //clamp remaining concentration so we don't go into negatives - remain_con = max(0, remain_con - new_con) - - //distribute remaining concentration between unlocked ports evenly - remain_con /= max(1, non_locked) - - for(var/datum/omni_port/P in inputs) - if(P.dir == port) - P.concentration = new_con - else if(!P.con_lock) - P.concentration = remain_con - - rebuild_mixing_inputs() - -/obj/machinery/atmospherics/omni/mixer/proc/rebuild_mixing_inputs() - mixing_inputs.Cut() - for(var/datum/omni_port/P in inputs) - mixing_inputs[P.air] = P.concentration - -/obj/machinery/atmospherics/omni/mixer/proc/con_lock(var/port = NORTH) - for(var/datum/omni_port/P in inputs) - if(P.dir == port) - P.con_lock = !P.con_lock \ No newline at end of file diff --git a/code/modules/atmospherics/components/omni_devices/omni_base.dm b/code/modules/atmospherics/components/omni_devices/omni_base.dm deleted file mode 100644 index 701fb5da777ea..0000000000000 --- a/code/modules/atmospherics/components/omni_devices/omni_base.dm +++ /dev/null @@ -1,295 +0,0 @@ -//-------------------------------------------- -// Base omni device -//-------------------------------------------- -/obj/machinery/atmospherics/omni - name = "omni device" - icon = 'icons/atmos/omni_devices.dmi' - icon_state = "base" - initialize_directions = 0 - level = 1 - layer = ABOVE_CATWALK_LAYER - - var/configuring = 0 - - var/tag_north = ATM_NONE - var/tag_south = ATM_NONE - var/tag_east = ATM_NONE - var/tag_west = ATM_NONE - - var/overlays_on[5] - var/overlays_off[5] - var/overlays_error[2] - var/underlays_current[4] - - var/list/ports = new() - - connect_types = CONNECT_TYPE_REGULAR|CONNECT_TYPE_FUEL - - pipe_class = PIPE_CLASS_OMNI - connect_dir_type = SOUTH | NORTH | EAST | WEST - -/obj/machinery/atmospherics/omni/Initialize() - . = ..() - icon_state = "base" - - ports = new() - for(var/d in GLOB.cardinal) - var/datum/omni_port/new_port = new(src, d) - switch(d) - if(NORTH) - new_port.mode = tag_north - if(SOUTH) - new_port.mode = tag_south - if(EAST) - new_port.mode = tag_east - if(WEST) - new_port.mode = tag_west - if(new_port.mode > 0) - initialize_directions |= d - ports += new_port - - build_icons() - -/obj/machinery/atmospherics/omni/on_update_icon() - if(stat & NOPOWER) - overlays = overlays_off - else if(error_check()) - overlays = overlays_error - else - overlays = use_power ? (overlays_on) : (overlays_off) - - underlays = underlays_current - - return - -/obj/machinery/atmospherics/omni/proc/error_check() - return - -/obj/machinery/atmospherics/omni/Process() - last_power_draw = 0 - last_flow_rate = 0 - - if(error_check()) - update_use_power(POWER_USE_OFF) - - if((stat & (NOPOWER|BROKEN)) || !use_power) - return 0 - return 1 - -/obj/machinery/atmospherics/omni/attackby(var/obj/item/W as obj, var/mob/user as mob) - if(!isWrench(W)) - return ..() - - var/int_pressure = 0 - for(var/datum/omni_port/P in ports) - int_pressure += P.air.return_pressure() - var/datum/gas_mixture/env_air = loc.return_air() - if ((int_pressure - env_air.return_pressure()) > 2*ONE_ATMOSPHERE) - to_chat(user, "You cannot unwrench \the [src], it is too exerted due to internal pressure.") - add_fingerprint(user) - return 1 - to_chat(user, "You begin to unfasten \the [src]...") - playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1) - if(do_after(user, 4 SECONDS, src, DO_PUBLIC_UNIQUE)) - user.visible_message( \ - "\The [user] unfastens \the [src].", \ - "You have unfastened \the [src].", \ - "You hear a ratchet.") - new /obj/item/pipe(loc, src) - qdel(src) - -/obj/machinery/atmospherics/omni/interface_interact(mob/user) - ui_interact(user) - return TRUE - -/obj/machinery/atmospherics/omni/proc/build_icons() - if(!check_icon_cache()) - return - - var/core_icon = null - if(istype(src, /obj/machinery/atmospherics/omni/mixer)) - core_icon = "mixer" - else if(istype(src, /obj/machinery/atmospherics/omni/filter)) - core_icon = "filter" - else - return - - //directional icons are layers 1-4, with the core icon on layer 5 - if(core_icon) - overlays_off[5] = icon_manager.get_atmos_icon("omni", , , core_icon) - overlays_on[5] = icon_manager.get_atmos_icon("omni", , , core_icon + "_glow") - - overlays_error[1] = icon_manager.get_atmos_icon("omni", , , core_icon) - overlays_error[2] = icon_manager.get_atmos_icon("omni", , , "error") - -/obj/machinery/atmospherics/omni/proc/update_port_icons() - if(!check_icon_cache()) - return - - for(var/datum/omni_port/P in ports) - if(P.update) - var/ref_layer = 0 - switch(P.dir) - if(NORTH) - ref_layer = 1 - if(SOUTH) - ref_layer = 2 - if(EAST) - ref_layer = 3 - if(WEST) - ref_layer = 4 - - if(!ref_layer) - continue - - var/list/port_icons = select_port_icons(P) - if(port_icons) - if(P.node) - underlays_current[ref_layer] = port_icons["pipe_icon"] - else - underlays_current[ref_layer] = null - overlays_off[ref_layer] = port_icons["off_icon"] - overlays_on[ref_layer] = port_icons["on_icon"] - else - underlays_current[ref_layer] = null - overlays_off[ref_layer] = null - overlays_on[ref_layer] = null - - update_icon() - -/obj/machinery/atmospherics/omni/proc/select_port_icons(var/datum/omni_port/P) - if(!istype(P)) - return - - if(P.mode > 0) - var/ic_dir = dir_name(P.dir) - var/ic_on = ic_dir - var/ic_off = ic_dir - switch(P.mode) - if(ATM_INPUT) - ic_on += "_in_glow" - ic_off += "_in" - if(ATM_OUTPUT) - ic_on += "_out_glow" - ic_off += "_out" - if(ATM_GAS_MIN to ATM_GAS_MAX) - ic_on += "_filter" - ic_off += "_out" - - ic_on = icon_manager.get_atmos_icon("omni", , , ic_on) - ic_off = icon_manager.get_atmos_icon("omni", , , ic_off) - - var/pipe_state - var/turf/T = get_turf(src) - if(!istype(T)) - return - if(!T.is_plating() && istype(P.node, /obj/machinery/atmospherics/pipe) && P.node.level == 1 ) - //pipe_state = icon_manager.get_atmos_icon("underlay_down", P.dir, color_cache_name(P.node)) - pipe_state = icon_manager.get_atmos_icon("underlay", P.dir, color_cache_name(P.node), "down") - else - //pipe_state = icon_manager.get_atmos_icon("underlay_intact", P.dir, color_cache_name(P.node)) - pipe_state = icon_manager.get_atmos_icon("underlay", P.dir, color_cache_name(P.node), "intact") - - return list("on_icon" = ic_on, "off_icon" = ic_off, "pipe_icon" = pipe_state) - -/obj/machinery/atmospherics/omni/update_underlays() - for(var/datum/omni_port/P in ports) - P.update = 1 - update_ports() - -/obj/machinery/atmospherics/omni/hide(var/i) - update_underlays() - -/obj/machinery/atmospherics/omni/proc/update_ports() - sort_ports() - update_port_icons() - for(var/datum/omni_port/P in ports) - P.update = 0 - -/obj/machinery/atmospherics/omni/proc/sort_ports() - return - - -// Housekeeping and pipe network stuff below - -/obj/machinery/atmospherics/omni/network_expand(datum/pipe_network/new_network, obj/machinery/atmospherics/pipe/reference) - for(var/datum/omni_port/P in ports) - if(reference == P.node) - P.network = new_network - break - - if(new_network.normal_members.Find(src)) - return 0 - - new_network.normal_members += src - - return null - -/obj/machinery/atmospherics/omni/Destroy() - for(var/datum/omni_port/P in ports) - if(P.node) - P.node.disconnect(src) - qdel(P.network) - P.node = null - - return ..() - -/obj/machinery/atmospherics/omni/atmos_init() - ..() - for(var/datum/omni_port/P in ports) - if(P.node || P.mode == 0) - continue - for(var/obj/machinery/atmospherics/target in get_step(src, P.dir)) - if(target.initialize_directions & get_dir(target,src)) - if (check_connect_types(target,src)) - P.node = target - break - - for(var/datum/omni_port/P in ports) - P.update = 1 - - update_ports() - -/obj/machinery/atmospherics/omni/build_network() - for(var/datum/omni_port/P in ports) - if(!P.network && P.node) - P.network = new /datum/pipe_network() - P.network.normal_members += src - P.network.build_network(P.node, src) - -/obj/machinery/atmospherics/omni/return_network(obj/machinery/atmospherics/reference) - build_network() - - for(var/datum/omni_port/P in ports) - if(reference == P.node) - return P.network - - return null - -/obj/machinery/atmospherics/omni/reassign_network(datum/pipe_network/old_network, datum/pipe_network/new_network) - for(var/datum/omni_port/P in ports) - if(P.network == old_network) - P.network = new_network - - return 1 - -/obj/machinery/atmospherics/omni/return_network_air(datum/pipe_network/reference) - var/list/results = list() - - for(var/datum/omni_port/P in ports) - if(P.network == reference) - results += P.air - - return results - -/obj/machinery/atmospherics/omni/disconnect(obj/machinery/atmospherics/reference) - for(var/datum/omni_port/P in ports) - if(reference == P.node) - qdel(P.network) - P.node = null - P.update = 1 - break - - update_ports() - - return null diff --git a/code/modules/atmospherics/components/pipesparker.dm b/code/modules/atmospherics/components/pipesparker.dm deleted file mode 100644 index 566e4267646e4..0000000000000 --- a/code/modules/atmospherics/components/pipesparker.dm +++ /dev/null @@ -1,156 +0,0 @@ -/obj/machinery/atmospherics/pipe/cap/sparker - name = "pipe sparker" - desc = "A pipe sparker. Useful for starting pipe fires." - level = 2 - icon = 'icons/atmos/pipe-sparker.dmi' - icon_state = "pipe-sparker" - volume = ATMOS_DEFAULT_VOLUME_PIPE / 2 - connect_types = CONNECT_TYPE_REGULAR|CONNECT_TYPE_FUEL - build_icon = 'icons/atmos/pipe-sparker.dmi' - build_icon_state = "pipe-igniter" - idle_power_usage = 20 - - maximum_pressure = 420*ONE_ATMOSPHERE - fatigue_pressure = 350*ONE_ATMOSPHERE - alert_pressure = 350*ONE_ATMOSPHERE - - var/last_spark = 0 - var/disabled = FALSE - var/obj/item/device/assembly/signaler/signaler = null - - uncreated_component_parts = list( - /obj/item/stock_parts/radio/receiver, - /obj/item/stock_parts/power/apc - ) - public_methods = list( - /decl/public_access/public_method/pipe_sparker_spark - ) - stock_part_presets = list(/decl/stock_part_preset/radio/receiver/sparker/pipe = 1) - -/decl/public_access/public_method/pipe_sparker_spark - name = "pipespark" - desc = "Ignites gas in a pipeline." - call_proc = /obj/machinery/atmospherics/pipe/cap/sparker/proc/ignite - -/decl/stock_part_preset/radio/receiver/sparker/pipe - frequency = BUTTON_FREQ - receive_and_call = list("button_active" = /decl/public_access/public_method/pipe_sparker_spark) - -/obj/machinery/atmospherics/pipe/cap/sparker/visible - level = 2 - icon_state = "pipe-sparker" - -/obj/machinery/atmospherics/pipe/cap/sparker/hidden - level = 1 - icon_state = "pipe-sparker" - alpha = 128 - -/obj/machinery/atmospherics/pipe/cap/sparker/proc/cant_ignite() - if ((world.time < last_spark + 50) || !powered() || disabled) - return TRUE - return FALSE - -/obj/machinery/atmospherics/pipe/cap/sparker/proc/ignite() - playsound(loc, 'sound/machines/click.ogg', 10, 1) - if (cant_ignite()) - return - - playsound(loc, "sparks", 100, 1) - use_power_oneoff(2000) - flick("pipe-sparker-spark", src) - parent.air.react(null, TRUE, TRUE)//full bypass - last_spark = world.time - -/obj/machinery/atmospherics/pipe/cap/sparker/physical_attack_hand(mob/user) - playsound(loc, "button", 30, 1) - if (cant_ignite()) - user.visible_message( - SPAN_NOTICE("\The [user] tries to activate \the [src], but nothing happens."), - SPAN_NOTICE("You try to activate \the [src], but nothing happens.") - ) - return - user.visible_message( - SPAN_NOTICE("\The [user] activates \the [src]."), - SPAN_NOTICE("You activate \the [src].") - ) - ignite() - -/obj/machinery/atmospherics/pipe/cap/sparker/attackby(obj/item/W as obj, mob/user as mob) - if (isScrewdriver(W) && !signaler) - add_fingerprint(user) - disabled = !disabled - if (disabled) - user.visible_message( - SPAN_WARNING("\The [user] has disabled \the [src]!"), - SPAN_WARNING("You disable the connection to \the [src].") - ) - else if (!disabled) - user.visible_message( - SPAN_NOTICE("\The [user] has reconnected wiring on \the [src]!"), - SPAN_NOTICE("You fix the wire connection on \the [src].") - ) - update_icon() - return - - if (istype(W, /obj/item/device/assembly/signaler) && signaler == null) - if (disabled) - to_chat(user, SPAN_WARNING("\The [src] is disabled!")) - return - signaler = W - if (signaler.secured) - to_chat(user, SPAN_WARNING("\The [signaler] is secured!")) - signaler = null - return - signaler.mholder = src - user.unEquip(signaler) - signaler.forceMove(src) - user.visible_message( - SPAN_NOTICE("\The [user] connects \the [signaler] to \the [src]."), - SPAN_NOTICE("You connect \the [signaler] to \the [src].") - ) - update_icon() - return - - if (isScrewdriver(W) && signaler) - signaler.mholder = null - signaler.dropInto(loc) - user.visible_message( - SPAN_WARNING("\The [user] disconnects \the [signaler] from \the [src]."), - SPAN_WARNING("You disconnect \the [signaler] from \the [src].") - ) - signaler = null - update_icon() - return - - if (isWrench(W) && (signaler || disabled)) - to_chat(user, SPAN_NOTICE("Remove signalers and check the wiring before unwrenching \the [src].")) - return - ..() - -/obj/machinery/atmospherics/pipe/cap/sparker/proc/process_activation()//the signaler calls this - ignite() - -/obj/machinery/atmospherics/pipe/cap/sparker/on_update_icon() - ..() - if (signaler) - overlays += image('icons/atmos/pipe-sparker.dmi', "pipe-sparker-s") - if (disabled) - overlays += image('icons/atmos/pipe-sparker.dmi', "pipe-sparker-d") - update_underlays() - -/obj/machinery/atmospherics/pipe/cap/sparker/update_underlays() - if (..()) - underlays.Cut() - var/turf/T = get_turf(src) - if (!istype(T)) - return - add_underlay(T, node, dir) - -/obj/machinery/atmospherics/pipe/cap/sparker/set_color(new_color) - return - -/obj/machinery/atmospherics/pipe/cap/sparker/color_cache_name(obj/machinery/atmospherics/node)//returns to the original - if (!istype(node)) - return null - - return node.pipe_color diff --git a/code/modules/atmospherics/components/portables_connector.dm b/code/modules/atmospherics/components/portables_connector.dm deleted file mode 100644 index e81ff25e9e506..0000000000000 --- a/code/modules/atmospherics/components/portables_connector.dm +++ /dev/null @@ -1,155 +0,0 @@ -/obj/machinery/atmospherics/portables_connector - icon = 'icons/atmos/connector.dmi' - icon_state = "map_connector" - - name = "Connector Port" - desc = "For connecting portable devices related to atmospherics control." - - dir = SOUTH - initialize_directions = SOUTH - - var/obj/machinery/portable_atmospherics/connected_device - - var/obj/machinery/atmospherics/node - - var/datum/pipe_network/network - - var/on = 0 - use_power = POWER_USE_OFF - uncreated_component_parts = null - level = 1 - - connect_types = CONNECT_TYPE_REGULAR|CONNECT_TYPE_FUEL - build_icon_state = "connector" - - pipe_class = PIPE_CLASS_UNARY - -/obj/machinery/atmospherics/portables_connector/on_update_icon() - icon_state = "connector" - -/obj/machinery/atmospherics/portables_connector/update_underlays() - if(..()) - underlays.Cut() - var/turf/T = get_turf(src) - if(!istype(T)) - return - add_underlay(T, node, dir) - -/obj/machinery/atmospherics/portables_connector/hide(var/i) - update_underlays() - -/obj/machinery/atmospherics/portables_connector/Process() - ..() - if(!on) - return - if(!connected_device) - on = 0 - return - if(network) - network.update = 1 - return 1 - -// Housekeeping and pipe network stuff below -/obj/machinery/atmospherics/portables_connector/network_expand(datum/pipe_network/new_network, obj/machinery/atmospherics/pipe/reference) - if(reference == node) - network = new_network - - if(new_network.normal_members.Find(src)) - return 0 - - new_network.normal_members += src - - return null - -/obj/machinery/atmospherics/portables_connector/Destroy() - if(connected_device) - connected_device.disconnect() - - if(node) - node.disconnect(src) - qdel(network) - - node = null - - . = ..() - -/obj/machinery/atmospherics/portables_connector/atmos_init() - ..() - if(node) return - - var/node_connect = dir - - for(var/obj/machinery/atmospherics/target in get_step(src,node_connect)) - if(target.initialize_directions & get_dir(target,src)) - if (check_connect_types(target,src)) - node = target - break - - update_icon() - update_underlays() - -/obj/machinery/atmospherics/portables_connector/build_network() - if(!network && node) - network = new /datum/pipe_network() - network.normal_members += src - network.build_network(node, src) - - -/obj/machinery/atmospherics/portables_connector/return_network(obj/machinery/atmospherics/reference) - build_network() - - if(reference==node) - return network - - if(reference==connected_device) - return network - - return null - -/obj/machinery/atmospherics/portables_connector/reassign_network(datum/pipe_network/old_network, datum/pipe_network/new_network) - if(network == old_network) - network = new_network - - return 1 - -/obj/machinery/atmospherics/portables_connector/return_network_air(datum/pipe_network/reference) - var/list/results = list() - - if(connected_device) - results += connected_device.air_contents - - return results - -/obj/machinery/atmospherics/portables_connector/disconnect(obj/machinery/atmospherics/reference) - if(reference==node) - qdel(network) - node = null - - update_underlays() - - return null - - -/obj/machinery/atmospherics/portables_connector/attackby(var/obj/item/W as obj, var/mob/user as mob) - if(!isWrench(W)) - return ..() - if (connected_device) - to_chat(user, "You cannot unwrench \the [src], dettach \the [connected_device] first.") - return 1 - if (locate(/obj/machinery/portable_atmospherics, src.loc)) - return 1 - var/datum/gas_mixture/int_air = return_air() - var/datum/gas_mixture/env_air = loc.return_air() - if ((int_air.return_pressure()-env_air.return_pressure()) > 2*ONE_ATMOSPHERE) - to_chat(user, "You cannot unwrench \the [src], it too exerted due to internal pressure.") - add_fingerprint(user) - return 1 - playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1) - to_chat(user, "You begin to unfasten \the [src]...") - if (do_after(user, 4 SECONDS, src, DO_PUBLIC_UNIQUE)) - user.visible_message( \ - "\The [user] unfastens \the [src].", \ - "You have unfastened \the [src].", \ - "You hear a ratchet.") - new /obj/item/pipe(loc, src) - qdel(src) diff --git a/code/modules/atmospherics/components/shutoff.dm b/code/modules/atmospherics/components/shutoff.dm deleted file mode 100644 index 637efb2e671b4..0000000000000 --- a/code/modules/atmospherics/components/shutoff.dm +++ /dev/null @@ -1,98 +0,0 @@ -#define NODE1_CLOSED 1 -#define NODE2_CLOSED 2 - -/obj/machinery/atmospherics/valve/shutoff - icon = 'icons/atmos/clamp.dmi' - icon_state = "map_vclamp0" - - name = "automatic shutoff valve" - desc = "An automatic valve with control circuitry and pipe integrity sensor, capable of automatically isolating damaged segments of the pipe network." - clicksound = 'sound/machines/buttonbeep.ogg' - clickvol = 20 - var/close_on_leaks = TRUE // If false it will be always open - var/shutoff_state = 0 - level = 1 - connect_types = CONNECT_TYPE_REGULAR - build_icon_state = "svalve" - -/obj/machinery/atmospherics/valve/shutoff/on_update_icon() - icon_state = "vclamp[icon_connect_type]" - overlays.Cut() - if (!close_on_leaks) - overlays += image('icons/atmos/clamp.dmi', "override[icon_connect_type]") - return - if (shutoff_state & NODE1_CLOSED) - overlays += image('icons/atmos/clamp.dmi', "closed1[icon_connect_type]") - if (shutoff_state & NODE2_CLOSED) - overlays += image('icons/atmos/clamp.dmi', "closed2[icon_connect_type]") - -/obj/machinery/atmospherics/valve/shutoff/examine(mob/user) - . = ..() - to_chat(user, "The automatic shutoff circuit is [close_on_leaks ? "enabled" : "disabled"].") - -/obj/machinery/atmospherics/valve/shutoff/Initialize() - . = ..() - open() - -/obj/machinery/atmospherics/valve/atmos_init() - . = ..() - var/turf/T = loc - hide(hides_under_flooring() && !T.is_plating()) - -/obj/machinery/atmospherics/valve/shutoff/interface_interact(mob/user) - if(CanInteract(user, DefaultTopicState())) - close_on_leaks = !close_on_leaks - update_icon() - to_chat(user, SPAN_NOTICE("You [close_on_leaks ? "enable" : "disable"] the automatic shutoff circuit.")) - CouldUseTopic(user) - return TRUE - -/obj/machinery/atmospherics/valve/shutoff/physical_attack_hand(mob/user) - return FALSE - -/obj/machinery/atmospherics/valve/shutoff/hide(var/do_hide) - if(istype(loc, /turf/simulated)) - set_invisibility(do_hide ? 101 : 0) - update_underlays() - -/obj/machinery/atmospherics/valve/shutoff/Process() - ..() - - var/new_shutoff_state = 0 - if (close_on_leaks) - if (!network_node1 || network_node1.leaks.len) - new_shutoff_state |= NODE1_CLOSED - if (!network_node2 || network_node2.leaks.len) - new_shutoff_state |= NODE2_CLOSED - - if (shutoff_state == new_shutoff_state) - return - - shutoff_state = new_shutoff_state - - if (shutoff_state > 0) - if (open) - close() - else if (!open) - open() - - update_icon() - -/obj/machinery/atmospherics/valve/shutoff/scrubbers - name = "scrubber shutoff valve" - icon_state = "map_vclamp0-scrubbers" - connect_types = CONNECT_TYPE_SCRUBBER - icon_connect_type = "-scrubbers" - -/obj/machinery/atmospherics/valve/shutoff/supply - name = "supply shutoff valve" - icon_state = "map_vclamp0-supply" - connect_types = CONNECT_TYPE_SUPPLY - icon_connect_type = "-supply" - -/obj/machinery/atmospherics/valve/shutoff/fuel - name = "fuel shutoff valve" - connect_types = CONNECT_TYPE_FUEL - -#undef NODE1_CLOSED -#undef NODE2_CLOSED \ No newline at end of file diff --git a/code/modules/atmospherics/components/trinary_devices/trinary_base.dm b/code/modules/atmospherics/components/trinary_devices/trinary_base.dm deleted file mode 100644 index 44d65674428a3..0000000000000 --- a/code/modules/atmospherics/components/trinary_devices/trinary_base.dm +++ /dev/null @@ -1,159 +0,0 @@ -/obj/machinery/atmospherics/trinary - dir = SOUTH - initialize_directions = SOUTH|NORTH|WEST - use_power = POWER_USE_OFF - - var/datum/gas_mixture/air1 - var/datum/gas_mixture/air2 - var/datum/gas_mixture/air3 - - var/obj/machinery/atmospherics/node3 - - var/datum/pipe_network/network1 - var/datum/pipe_network/network2 - var/datum/pipe_network/network3 - - pipe_class = PIPE_CLASS_TRINARY - connect_dir_type = SOUTH | NORTH | WEST - -/obj/machinery/atmospherics/trinary/Initialize() - air1 = new - air2 = new - air3 = new - - air1.volume = 200 - air2.volume = 200 - air3.volume = 200 - . = ..() - -// Housekeeping and pipe network stuff below -/obj/machinery/atmospherics/trinary/network_expand(datum/pipe_network/new_network, obj/machinery/atmospherics/pipe/reference) - if(reference == node1) - network1 = new_network - - else if(reference == node2) - network2 = new_network - - else if (reference == node3) - network3 = new_network - - if(new_network.normal_members.Find(src)) - return 0 - - new_network.normal_members += src - - return null - -/obj/machinery/atmospherics/trinary/Destroy() - if(node1) - node1.disconnect(src) - qdel(network1) - if(node2) - node2.disconnect(src) - qdel(network2) - if(node3) - node3.disconnect(src) - qdel(network3) - - node1 = null - node2 = null - node3 = null - - return ..() - -/obj/machinery/atmospherics/trinary/atmos_init() - ..() - if(node1 && node2 && node3) return - - var/node1_connect = turn(dir, -180) - var/node2_connect = turn(dir, -90) - var/node3_connect = dir - - for(var/obj/machinery/atmospherics/target in get_step(src,node1_connect)) - if(target.initialize_directions & get_dir(target,src)) - if (check_connect_types(target,src)) - node1 = target - break - - for(var/obj/machinery/atmospherics/target in get_step(src,node2_connect)) - if(target.initialize_directions & get_dir(target,src)) - if (check_connect_types(target,src)) - node2 = target - break - for(var/obj/machinery/atmospherics/target in get_step(src,node3_connect)) - if(target.initialize_directions & get_dir(target,src)) - if (check_connect_types(target,src)) - node3 = target - break - - update_icon() - update_underlays() - -/obj/machinery/atmospherics/trinary/build_network() - if(!network1 && node1) - network1 = new /datum/pipe_network() - network1.normal_members += src - network1.build_network(node1, src) - - if(!network2 && node2) - network2 = new /datum/pipe_network() - network2.normal_members += src - network2.build_network(node2, src) - - if(!network3 && node3) - network3 = new /datum/pipe_network() - network3.normal_members += src - network3.build_network(node3, src) - -/obj/machinery/atmospherics/trinary/return_network(obj/machinery/atmospherics/reference) - build_network() - - if(reference==node1) - return network1 - - if(reference==node2) - return network2 - - if(reference==node3) - return network3 - - return null - -/obj/machinery/atmospherics/trinary/reassign_network(datum/pipe_network/old_network, datum/pipe_network/new_network) - if(network1 == old_network) - network1 = new_network - if(network2 == old_network) - network2 = new_network - if(network3 == old_network) - network3 = new_network - - return 1 - -/obj/machinery/atmospherics/trinary/return_network_air(datum/pipe_network/reference) - var/list/results = list() - - if(network1 == reference) - results += air1 - if(network2 == reference) - results += air2 - if(network3 == reference) - results += air3 - - return results - -/obj/machinery/atmospherics/trinary/disconnect(obj/machinery/atmospherics/reference) - if(reference==node1) - qdel(network1) - node1 = null - - else if(reference==node2) - qdel(network2) - node2 = null - - else if(reference==node3) - qdel(network3) - node3 = null - - update_underlays() - - return null \ No newline at end of file diff --git a/code/modules/atmospherics/components/tvalve.dm b/code/modules/atmospherics/components/tvalve.dm deleted file mode 100644 index deb9f333d369a..0000000000000 --- a/code/modules/atmospherics/components/tvalve.dm +++ /dev/null @@ -1,432 +0,0 @@ -/obj/machinery/atmospherics/tvalve - icon = 'icons/atmos/tvalve.dmi' - icon_state = "map_tvalve0" - - name = "manual switching valve" - desc = "A pipe valve." - - level = 1 - dir = SOUTH - initialize_directions = SOUTH|NORTH|WEST - - var/state = 0 // 0 = go straight, 1 = go to side - var/frequency - - // like a trinary component, node1 is input, node2 is side output, node3 is straight output - var/obj/machinery/atmospherics/node3 - - var/datum/pipe_network/network_node1 - var/datum/pipe_network/network_node2 - var/datum/pipe_network/network_node3 - - connect_types = CONNECT_TYPE_REGULAR|CONNECT_TYPE_SUPPLY|CONNECT_TYPE_SCRUBBER|CONNECT_TYPE_FUEL - connect_dir_type = SOUTH | WEST | NORTH - pipe_class = PIPE_CLASS_TRINARY - - build_icon = 'icons/atmos/tvalve.dmi' - build_icon_state = "map_tvalve0" - -/obj/machinery/atmospherics/tvalve/on_update_icon(animation) - if(animation) - flick("tvalve[src.state][!src.state]",src) - else - icon_state = "tvalve[state]" - -/obj/machinery/atmospherics/tvalve/update_underlays() - if(..()) - underlays.Cut() - var/turf/T = get_turf(src) - if(!istype(T)) - return - add_underlay(T, node1, turn(dir, -180)) - - if(istype(src, /obj/machinery/atmospherics/tvalve/mirrored)) - add_underlay(T, node2, turn(dir, 90)) - else - add_underlay(T, node2, turn(dir, -90)) - - add_underlay(T, node3, dir) - -/obj/machinery/atmospherics/tvalve/hide(var/i) - update_underlays() - -/obj/machinery/atmospherics/tvalve/network_expand(datum/pipe_network/new_network, obj/machinery/atmospherics/pipe/reference) - if(reference == node1) - network_node1 = new_network - if(state) - network_node2 = new_network - else - network_node3 = new_network - else if(reference == node2) - network_node2 = new_network - if(state) - network_node1 = new_network - else if(reference == node3) - network_node3 = new_network - if(!state) - network_node1 = new_network - - if(new_network.normal_members.Find(src)) - return 0 - - new_network.normal_members += src - - if(state) - if(reference == node1) - if(node2) - return node2.network_expand(new_network, src) - else if(reference == node2) - if(node1) - return node1.network_expand(new_network, src) - else - if(reference == node1) - if(node3) - return node3.network_expand(new_network, src) - else if(reference == node3) - if(node1) - return node1.network_expand(new_network, src) - - return null - -/obj/machinery/atmospherics/tvalve/Destroy() - if(node1) - node1.disconnect(src) - qdel(network_node1) - if(node2) - node2.disconnect(src) - qdel(network_node2) - if(node3) - node3.disconnect(src) - qdel(network_node3) - - node1 = null - node2 = null - node3 = null - unregister_radio(src, frequency) - return ..() - -/obj/machinery/atmospherics/tvalve/proc/go_to_side() - - if(state) return 0 - - state = 1 - update_icon() - - if(network_node1) - qdel(network_node1) - if(network_node3) - qdel(network_node3) - build_network() - - if(network_node1&&network_node2) - network_node1.merge(network_node2) - network_node2 = network_node1 - - if(network_node1) - network_node1.update = 1 - else if(network_node2) - network_node2.update = 1 - - return 1 - -/obj/machinery/atmospherics/tvalve/proc/go_straight() - - if(!state) - return 0 - - state = 0 - update_icon() - - if(network_node1) - qdel(network_node1) - if(network_node2) - qdel(network_node2) - build_network() - - if(network_node1&&network_node3) - network_node1.merge(network_node3) - network_node3 = network_node1 - - if(network_node1) - network_node1.update = 1 - else if(network_node3) - network_node3.update = 1 - - return 1 - -/obj/machinery/atmospherics/tvalve/proc/toggle() - return state ? go_straight() : go_to_side() - -/obj/machinery/atmospherics/tvalve/physical_attack_hand(mob/user) - user_toggle() - return TRUE - -/obj/machinery/atmospherics/tvalve/proc/user_toggle() - update_icon(1) - sleep(10) - toggle() - -/obj/machinery/atmospherics/tvalve/Process() - ..() - return PROCESS_KILL - -/obj/machinery/atmospherics/tvalve/atmos_init() - ..() - - var/node1_dir - var/node2_dir - var/node3_dir - - node1_dir = turn(dir, 180) - node2_dir = turn(dir, -90) - node3_dir = dir - - init_nodes(node1_dir, node2_dir, node3_dir) - -/obj/machinery/atmospherics/tvalve/proc/init_nodes(var/node1_dir, var/node2_dir, var/node3_dir) - for(var/obj/machinery/atmospherics/target in get_step(src,node1_dir)) - if(target.initialize_directions & get_dir(target,src)) - if (check_connect_types(target,src)) - node1 = target - break - for(var/obj/machinery/atmospherics/target in get_step(src,node2_dir)) - if(target.initialize_directions & get_dir(target,src)) - if (check_connect_types(target,src)) - node2 = target - break - for(var/obj/machinery/atmospherics/target in get_step(src,node3_dir)) - if(target.initialize_directions & get_dir(target,src)) - if (check_connect_types(target,src)) - node3 = target - break - - update_icon() - update_underlays() - -/obj/machinery/atmospherics/tvalve/build_network() - if(!network_node1 && node1) - network_node1 = new /datum/pipe_network() - network_node1.normal_members += src - network_node1.build_network(node1, src) - - if(!network_node2 && node2) - network_node2 = new /datum/pipe_network() - network_node2.normal_members += src - network_node2.build_network(node2, src) - - if(!network_node3 && node3) - network_node3 = new /datum/pipe_network() - network_node3.normal_members += src - network_node3.build_network(node3, src) - - -/obj/machinery/atmospherics/tvalve/return_network(obj/machinery/atmospherics/reference) - build_network() - - if(reference==node1) - return network_node1 - - if(reference==node2) - return network_node2 - - if(reference==node3) - return network_node3 - - return null - -/obj/machinery/atmospherics/tvalve/reassign_network(datum/pipe_network/old_network, datum/pipe_network/new_network) - if(network_node1 == old_network) - network_node1 = new_network - if(network_node2 == old_network) - network_node2 = new_network - if(network_node3 == old_network) - network_node3 = new_network - - return 1 - -/obj/machinery/atmospherics/tvalve/return_network_air(datum/pipe_network/reference) - return null - -/obj/machinery/atmospherics/tvalve/disconnect(obj/machinery/atmospherics/reference) - if(reference==node1) - qdel(network_node1) - node1 = null - - else if(reference==node2) - qdel(network_node2) - node2 = null - - else if(reference==node3) - qdel(network_node3) - node2 = null - - update_underlays() - - return null - -/obj/machinery/atmospherics/tvalve/attackby(var/obj/item/W as obj, var/mob/user as mob) - if(!isWrench(W)) - return ..() - var/datum/gas_mixture/int_air = return_air() - var/datum/gas_mixture/env_air = loc.return_air() - if ((int_air.return_pressure()-env_air.return_pressure()) > 2*ONE_ATMOSPHERE) - to_chat(user, "You cannot unwrench \the [src], it too exerted due to internal pressure.") - add_fingerprint(user) - return 1 - playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1) - to_chat(user, "You begin to unfasten \the [src]...") - if (do_after(user, 4 SECONDS, src, DO_PUBLIC_UNIQUE)) - user.visible_message( \ - "\The [user] unfastens \the [src].", \ - "You have unfastened \the [src].", \ - "You hear a ratchet.") - new /obj/item/pipe(loc, src) - qdel(src) - -/decl/public_access/public_variable/tvalve_state - expected_type = /obj/machinery/atmospherics/tvalve - name = "valve state" - desc = "If true, the output is diverted to the side; if false, the output goes straight." - can_write = FALSE - has_updates = FALSE - -/decl/public_access/public_variable/tvalve_state/access_var(obj/machinery/atmospherics/tvalve/tvalve) - return tvalve.state - -/decl/public_access/public_method/tvalve_go_straight - name = "valve go straight" - desc = "Sets the valve to send output straight." - call_proc = /obj/machinery/atmospherics/tvalve/proc/go_straight - -/decl/public_access/public_method/tvalve_go_side - name = "valve go side" - desc = "Redirects output to the side." - call_proc = /obj/machinery/atmospherics/tvalve/proc/go_to_side - -/decl/public_access/public_method/tvalve_toggle - name = "valve toggle" - desc = "Toggles the output direction." - call_proc = /obj/machinery/atmospherics/tvalve/proc/toggle - -/decl/stock_part_preset/radio/receiver/tvalve - frequency = FUEL_FREQ - filter = RADIO_ATMOSIA - receive_and_call = list( - "valve_open" = /decl/public_access/public_method/tvalve_go_side, - "valve_close" = /decl/public_access/public_method/tvalve_go_straight, - "valve_toggle" = /decl/public_access/public_method/tvalve_toggle - ) - -//Mirrored editions -/obj/machinery/atmospherics/tvalve/mirrored - icon_state = "map_tvalvem0" - - connect_dir_type = SOUTH | EAST | NORTH - build_icon_state = "map_tvalvem0" - -/obj/machinery/atmospherics/tvalve/mirrored/atmos_init() - ..() - - var/node1_dir - var/node2_dir - var/node3_dir - - node1_dir = turn(dir, 180) - node2_dir = turn(dir, 90) - node3_dir = dir - - init_nodes(node1_dir, node2_dir, node3_dir) - - -/obj/machinery/atmospherics/tvalve/mirrored/on_update_icon(animation) - if(animation) - flick("tvalvem[src.state][!src.state]",src) - else - icon_state = "tvalvem[state]" - -/obj/machinery/atmospherics/tvalve/digital // can be controlled by AI - name = "digital switching valve" - desc = "A digitally controlled valve." - icon = 'icons/atmos/digital_tvalve.dmi' - icon_state = "map_tvalve0" - - build_icon = 'icons/atmos/digital_tvalve.dmi' - build_icon_state = "map_tvalve0" - - uncreated_component_parts = list( - /obj/item/stock_parts/radio/receiver, - /obj/item/stock_parts/power/apc - ) - public_variables = list(/decl/public_access/public_variable/tvalve_state) - public_methods = list( - /decl/public_access/public_method/tvalve_go_side, - /decl/public_access/public_method/tvalve_go_straight, - /decl/public_access/public_method/tvalve_toggle - ) - stock_part_presets = list(/decl/stock_part_preset/radio/receiver/tvalve = 1) - -/obj/machinery/atmospherics/tvalve/digital/on_update_icon() - ..() - if(!powered()) - icon_state = "tvalvenopower" - -/obj/machinery/atmospherics/tvalve/digital/interface_interact(mob/user) - if(!CanInteract(user, DefaultTopicState())) - return FALSE - user_toggle() - return TRUE - -/obj/machinery/atmospherics/tvalve/digital/physical_attack_hand(mob/user) - return FALSE - -/obj/machinery/atmospherics/tvalve/mirrored/digital // can be controlled by AI - name = "digital switching valve" - desc = "A digitally controlled valve." - icon = 'icons/atmos/digital_tvalve.dmi' - icon_state = "map_tvalvem0" - - build_icon = 'icons/atmos/digital_tvalve.dmi' - build_icon_state = "map_tvalvem0" - - uncreated_component_parts = list( - /obj/item/stock_parts/radio/receiver, - /obj/item/stock_parts/power/apc - ) - public_variables = list(/decl/public_access/public_variable/tvalve_state) - public_methods = list( - /decl/public_access/public_method/tvalve_go_side, - /decl/public_access/public_method/tvalve_go_straight, - /decl/public_access/public_method/tvalve_toggle - ) - stock_part_presets = list(/decl/stock_part_preset/radio/receiver/tvalve = 1) - -/obj/machinery/atmospherics/tvalve/mirrored/digital/on_update_icon() - ..() - if(!powered()) - icon_state = "tvalvemnopower" - -/obj/machinery/atmospherics/tvalve/mirrored/digital/interface_interact(mob/user) - if(!CanInteract(user, DefaultTopicState())) - return FALSE - user_toggle() - return TRUE - -/obj/machinery/atmospherics/tvalve/mirrored/digital/physical_attack_hand(mob/user) - return FALSE - -//Bypass editions -/obj/machinery/atmospherics/tvalve/digital/bypass - icon_state = "map_tvalve1" - state = 1 - -/obj/machinery/atmospherics/tvalve/bypass - icon_state = "map_tvalve1" - state = 1 - -/obj/machinery/atmospherics/tvalve/mirrored/bypass - icon_state = "map_tvalvem1" - state = 1 - -/obj/machinery/atmospherics/tvalve/mirrored/digital/bypass - icon_state = "map_tvalvem1" - state = 1 diff --git a/code/modules/atmospherics/components/unary/cold_sink.dm b/code/modules/atmospherics/components/unary/cold_sink.dm deleted file mode 100644 index 754b628e1cdb1..0000000000000 --- a/code/modules/atmospherics/components/unary/cold_sink.dm +++ /dev/null @@ -1,163 +0,0 @@ -//TODO: Put this under a common parent type with heaters to cut down on the copypasta -#define FREEZER_PERF_MULT 2.5 - -/obj/machinery/atmospherics/unary/freezer - name = "gas cooling system" - desc = "Cools gas when connected to a pipe network." - icon = 'icons/obj/Cryogenic2.dmi' - icon_state = "freezer_0" - density = TRUE - anchored = TRUE - use_power = POWER_USE_OFF - idle_power_usage = 5 // 5 Watts for thermostat related circuitry - base_type = /obj/machinery/atmospherics/unary/freezer - construct_state = /decl/machine_construction/default/panel_closed - uncreated_component_parts = null - stat_immune = 0 - - machine_name = "gas cooling system" - machine_desc = "While active, this machine cools the gas in a connected pipeline to lower temperatures. Gas pressure decreases with chilling, allowing it to be compressed more easily." - - var/heatsink_temperature = T20C // The constant temperature reservoir into which the freezer pumps heat. Probably the hull of the station or something. - var/internal_volume = 600 // L - - var/max_power_rating = 20000 // Power rating when the usage is turned up to 100 - var/power_setting = 100 - - var/set_temperature = T20C // Thermostat - var/cooling = 0 - -/obj/machinery/atmospherics/unary/freezer/atmos_init() - ..() - if(node) - return - - var/node_connect = dir - - for(var/obj/machinery/atmospherics/target in get_step(src, node_connect)) - if(target.initialize_directions & get_dir(target, src)) - node = target - break - - //copied from pipe construction code since heaters/freezers don't use fittings and weren't doing this check - this all really really needs to be refactored someday. - //check that there are no incompatible pipes/machinery in our own location - for(var/obj/machinery/atmospherics/M in src.loc) - if(M != src && (M.initialize_directions & node_connect) && M.check_connect_types(M,src)) // matches at least one direction on either type of pipe & same connection type - node = null - break - - update_icon() - -/obj/machinery/atmospherics/unary/freezer/on_update_icon() - if(node) - if(use_power && cooling) - icon_state = "freezer_1" - else - icon_state = "freezer" - else - icon_state = "freezer_0" - return - -/obj/machinery/atmospherics/unary/freezer/interface_interact(mob/user) - ui_interact(user) - return TRUE - -/obj/machinery/atmospherics/unary/freezer/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1) - // this is the data which will be sent to the ui - var/data[0] - data["on"] = use_power ? 1 : 0 - data["gasPressure"] = round(air_contents.return_pressure()) - data["gasTemperature"] = round(air_contents.temperature) - data["minGasTemperature"] = 0 - data["maxGasTemperature"] = round(T20C+500) - data["targetGasTemperature"] = round(set_temperature) - data["powerSetting"] = power_setting - - var/temp_class = "good" - if(air_contents.temperature > (T0C - 20)) - temp_class = "bad" - else if(air_contents.temperature < (T0C - 20) && air_contents.temperature > (T0C - 100)) - temp_class = "average" - data["gasTemperatureClass"] = temp_class - - // update the ui if it exists, returns null if no ui is passed/found - ui = SSnano.try_update_ui(user, src, ui_key, ui, data, force_open) - if(!ui) - // the ui does not exist, so we'll create a new() one - // for a list of parameters and their descriptions see the code docs in \code\modules\nano\nanoui.dm - ui = new(user, src, ui_key, "freezer.tmpl", "Gas Cooling System", 440, 300) - // when the ui is first opened this is the data it will use - ui.set_initial_data(data) - // open the new ui window - ui.open() - // auto update every Master Controller tick - ui.set_auto_update(1) - -/obj/machinery/atmospherics/unary/freezer/Topic(href, href_list) - if(..()) - return 1 - if(href_list["toggleStatus"]) - update_use_power(!use_power) - update_icon() - if(href_list["temp"]) - var/amount = text2num(href_list["temp"]) - if(amount > 0) - set_temperature = min(set_temperature + amount, 1000) - else - set_temperature = max(set_temperature + amount, 0) - if(href_list["setPower"]) //setting power to 0 is redundant anyways - var/new_setting = clamp(text2num(href_list["setPower"]), 0, 100) - set_power_level(new_setting) - - add_fingerprint(usr) - -/obj/machinery/atmospherics/unary/freezer/Process() - ..() - - if(stat & (NOPOWER|BROKEN) || !use_power) - cooling = 0 - update_icon() - return - - if(network && air_contents.temperature > set_temperature) - cooling = 1 - - var/heat_transfer = max( -air_contents.get_thermal_energy_change(set_temperature - 5), 0 ) - - //Assume the heat is being pumped into the hull which is fixed at heatsink_temperature - //not /really/ proper thermodynamics but whatever - var/cop = FREEZER_PERF_MULT * air_contents.temperature/heatsink_temperature //heatpump coefficient of performance from thermodynamics -> power used = heat_transfer/cop - heat_transfer = min(heat_transfer, cop * power_rating) //limit heat transfer by available power - - var/removed = -air_contents.add_thermal_energy(-heat_transfer) //remove the heat - if(debug) - visible_message("[src]: Removing [removed] W.") - - use_power_oneoff(power_rating) - - network.update = 1 - else - cooling = 0 - - update_icon() - -//upgrading parts -/obj/machinery/atmospherics/unary/freezer/RefreshParts() - ..() - var/cap_rating = clamp(total_component_rating_of_type(/obj/item/stock_parts/capacitor), 0, 20) - var/manip_rating = clamp(total_component_rating_of_type(/obj/item/stock_parts/manipulator), 1, 10) - var/bin_rating = clamp(total_component_rating_of_type(/obj/item/stock_parts/matter_bin), 0, 10) - - power_rating = initial(power_rating) * cap_rating / 2 //more powerful - heatsink_temperature = initial(heatsink_temperature) / ((manip_rating + bin_rating) / 2) //more efficient - air_contents.volume = max(initial(internal_volume) - 200, 0) + 200 * bin_rating - set_power_level(power_setting) - -/obj/machinery/atmospherics/unary/freezer/proc/set_power_level(var/new_power_setting) - power_setting = new_power_setting - power_rating = max_power_rating * (power_setting/100) - -/obj/machinery/atmospherics/unary/freezer/examine(mob/user) - . = ..() - if(panel_open) - to_chat(user, "The maintenance hatch is open.") diff --git a/code/modules/atmospherics/components/unary/generator_input.dm b/code/modules/atmospherics/components/unary/generator_input.dm deleted file mode 100644 index 6353d0cf1be92..0000000000000 --- a/code/modules/atmospherics/components/unary/generator_input.dm +++ /dev/null @@ -1,18 +0,0 @@ -/obj/machinery/atmospherics/unary/generator_input - icon = 'icons/obj/atmospherics/heat_exchanger.dmi' - icon_state = "intact" - density = TRUE - - name = "Generator Input" - desc = "Placeholder." - - var/update_cycle - -/obj/machinery/atmospherics/unary/generator_input/on_update_icon() - if(node) - icon_state = "intact" - else - icon_state = "exposed" - -/obj/machinery/atmospherics/unary/generator_input/proc/return_exchange_air() - return air_contents diff --git a/code/modules/atmospherics/components/unary/heat_exchanger.dm b/code/modules/atmospherics/components/unary/heat_exchanger.dm deleted file mode 100644 index ce4ad199adc8a..0000000000000 --- a/code/modules/atmospherics/components/unary/heat_exchanger.dm +++ /dev/null @@ -1,92 +0,0 @@ -/obj/machinery/atmospherics/unary/heat_exchanger - - icon = 'icons/obj/atmospherics/heat_exchanger.dmi' - icon_state = "intact" - density = TRUE - - name = "Heat Exchanger" - desc = "Exchanges heat between two input gases. Setup for fast heat transfer." - - var/obj/machinery/atmospherics/unary/heat_exchanger/partner = null - var/update_cycle - - connect_types = CONNECT_TYPE_REGULAR - build_icon_state = "heunary" - - -/obj/machinery/atmospherics/unary/heat_exchanger/on_update_icon() - if(node) - icon_state = "intact" - else - icon_state = "exposed" - - -/obj/machinery/atmospherics/unary/heat_exchanger/atmos_init() - ..() - if(!partner) - var/partner_connect = turn(dir,180) - for(var/obj/machinery/atmospherics/unary/heat_exchanger/target in get_step(src,partner_connect)) - if(target.dir & get_dir(src,target)) - partner = target - partner.partner = src - break - ..() - - -/obj/machinery/atmospherics/unary/heat_exchanger/Process() - ..() - if(!partner) - return 0 - - if(SSair.times_fired <= update_cycle) - return 0 - - update_cycle = SSair.times_fired - partner.update_cycle = SSair.times_fired - - var/air_heat_capacity = air_contents.heat_capacity() - var/other_air_heat_capacity = partner.air_contents.heat_capacity() - var/combined_heat_capacity = other_air_heat_capacity + air_heat_capacity - - var/old_temperature = air_contents.temperature - var/other_old_temperature = partner.air_contents.temperature - - if(combined_heat_capacity > 0) - var/combined_energy = partner.air_contents.temperature*other_air_heat_capacity + air_heat_capacity*air_contents.temperature - - var/new_temperature = combined_energy/combined_heat_capacity - air_contents.temperature = new_temperature - partner.air_contents.temperature = new_temperature - - if(network) - if(abs(old_temperature-air_contents.temperature) > 1) - network.update = 1 - - if(partner.network) - if(abs(other_old_temperature-partner.air_contents.temperature) > 1) - partner.network.update = 1 - return 1 - - -/obj/machinery/atmospherics/unary/heat_exchanger/attackby(var/obj/item/W as obj, var/mob/user as mob) - if(!isWrench(W)) - return ..() - var/turf/T = src.loc - if (level==1 && isturf(T) && !T.is_plating()) - to_chat(user, "You must remove the plating first.") - return 1 - var/datum/gas_mixture/int_air = return_air() - var/datum/gas_mixture/env_air = loc.return_air() - if ((int_air.return_pressure()-env_air.return_pressure()) > 2*ONE_ATMOSPHERE) - to_chat(user, "You cannot unwrench \the [src], it is too exerted due to internal pressure.") - add_fingerprint(user) - return 1 - playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1) - to_chat(user, "You begin to unfasten \the [src]...") - if (do_after(user, 4 SECONDS, src, DO_PUBLIC_UNIQUE)) - user.visible_message( \ - "\The [user] unfastens \the [src].", \ - "You have unfastened \the [src].", \ - "You hear a ratchet.") - new /obj/item/pipe(loc, src) - qdel(src) diff --git a/code/modules/atmospherics/components/unary/heat_source.dm b/code/modules/atmospherics/components/unary/heat_source.dm deleted file mode 100644 index ecbf80b0edc55..0000000000000 --- a/code/modules/atmospherics/components/unary/heat_source.dm +++ /dev/null @@ -1,152 +0,0 @@ -//TODO: Put this under a common parent type with freezers to cut down on the copypasta -#define HEATER_PERF_MULT 2.5 - -/obj/machinery/atmospherics/unary/heater - name = "gas heating system" - desc = "Heats gas when connected to a pipe network." - icon = 'icons/obj/Cryogenic2.dmi' - icon_state = "heater_0" - density = TRUE - anchored = TRUE - use_power = POWER_USE_OFF - idle_power_usage = 5 //5 Watts for thermostat related circuitry - base_type = /obj/machinery/atmospherics/unary/heater - construct_state = /decl/machine_construction/default/panel_closed - uncreated_component_parts = null - stat_immune = 0 - - machine_name = "gas heating system" - machine_desc = "While active, this machine increases the temperature of a connected gas line to the configured amount. Gas pressure increases with heat." - - var/max_temperature = T20C + 680 - var/internal_volume = 600 //L - - var/max_power_rating = 20000 //power rating when the usage is turned up to 100 - var/power_setting = 100 - - var/set_temperature = T20C //thermostat - var/heating = 0 //mainly for icon updates - -/obj/machinery/atmospherics/unary/heater/atmos_init() - ..() - if(node) - return - - var/node_connect = dir - - //check that there is something to connect to - for(var/obj/machinery/atmospherics/target in get_step(src, node_connect)) - if(target.initialize_directions & get_dir(target, src)) - node = target - break - - //copied from pipe construction code since heaters/freezers don't use fittings and weren't doing this check - this all really really needs to be refactored someday. - //check that there are no incompatible pipes/machinery in our own location - for(var/obj/machinery/atmospherics/M in src.loc) - if(M != src && (M.initialize_directions & node_connect) && M.check_connect_types(M,src)) // matches at least one direction on either type of pipe & same connection type - node = null - break - - update_icon() - - -/obj/machinery/atmospherics/unary/heater/on_update_icon() - if(node) - if(use_power && heating) - icon_state = "heater_1" - else - icon_state = "heater" - else - icon_state = "heater_0" - return - - -/obj/machinery/atmospherics/unary/heater/Process() - ..() - - if(stat & (NOPOWER|BROKEN) || !use_power) - heating = 0 - update_icon() - return - - if(network && air_contents.total_moles && air_contents.temperature < set_temperature) - air_contents.add_thermal_energy(power_rating * HEATER_PERF_MULT) - use_power_oneoff(power_rating) - - heating = 1 - network.update = 1 - else - heating = 0 - - update_icon() - -/obj/machinery/atmospherics/unary/heater/interface_interact(mob/user) - ui_interact(user) - return TRUE - -/obj/machinery/atmospherics/unary/heater/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1) - // this is the data which will be sent to the ui - var/data[0] - data["on"] = use_power ? 1 : 0 - data["gasPressure"] = round(air_contents.return_pressure()) - data["gasTemperature"] = round(air_contents.temperature) - data["minGasTemperature"] = 0 - data["maxGasTemperature"] = round(max_temperature) - data["targetGasTemperature"] = round(set_temperature) - data["powerSetting"] = power_setting - - var/temp_class = "normal" - if(air_contents.temperature > (T20C+40)) - temp_class = "bad" - data["gasTemperatureClass"] = temp_class - - // update the ui if it exists, returns null if no ui is passed/found - ui = SSnano.try_update_ui(user, src, ui_key, ui, data, force_open) - if(!ui) - // the ui does not exist, so we'll create a new() one - // for a list of parameters and their descriptions see the code docs in \code\modules\nano\nanoui.dm - ui = new(user, src, ui_key, "freezer.tmpl", "Gas Heating System", 440, 300) - // when the ui is first opened this is the data it will use - ui.set_initial_data(data) - // open the new ui window - ui.open() - // auto update every Master Controller tick - ui.set_auto_update(1) - -/obj/machinery/atmospherics/unary/heater/Topic(href, href_list) - if(..()) - return 1 - if(href_list["toggleStatus"]) - update_use_power(!use_power) - update_icon() - if(href_list["temp"]) - var/amount = text2num(href_list["temp"]) - if(amount > 0) - set_temperature = min(set_temperature + amount, max_temperature) - else - set_temperature = max(set_temperature + amount, 0) - if(href_list["setPower"]) //setting power to 0 is redundant anyways - var/new_setting = clamp(text2num(href_list["setPower"]), 0, 100) - set_power_level(new_setting) - - add_fingerprint(usr) - -//upgrading parts -/obj/machinery/atmospherics/unary/heater/RefreshParts() - ..() - var/cap_rating = clamp(total_component_rating_of_type(/obj/item/stock_parts/capacitor), 1, 20) - var/bin_rating = clamp(total_component_rating_of_type(/obj/item/stock_parts/matter_bin), 0, 10) - - max_power_rating = initial(max_power_rating) * cap_rating / 2 - max_temperature = max(initial(max_temperature) - T20C, 0) * ((bin_rating * 4 + cap_rating) / 5) + T20C - air_contents.volume = max(initial(internal_volume) - 200, 0) + 200 * bin_rating - set_power_level(power_setting) - -/obj/machinery/atmospherics/unary/heater/proc/set_power_level(var/new_power_setting) - power_setting = new_power_setting - power_rating = max_power_rating * (power_setting/100) - -/obj/machinery/atmospherics/unary/heater/examine(mob/user) - . = ..() - if(panel_open) - to_chat(user, "The maintenance hatch is open.") diff --git a/code/modules/atmospherics/components/unary/outlet_injector.dm b/code/modules/atmospherics/components/unary/outlet_injector.dm deleted file mode 100644 index 100f99da2fd61..0000000000000 --- a/code/modules/atmospherics/components/unary/outlet_injector.dm +++ /dev/null @@ -1,217 +0,0 @@ -//Basically a one way passive valve. If the pressure inside is greater than the environment then gas will flow passively, -//but it does not permit gas to flow back from the environment into the injector. Can be turned off to prevent any gas flow. -//When it receives the "inject" signal, it will try to pump it's entire contents into the environment regardless of pressure, using power. - -/obj/machinery/atmospherics/unary/outlet_injector - icon = 'icons/atmos/injector.dmi' - icon_state = "off" - - name = "injector" - desc = "Passively injects air into its surroundings. Has a valve attached to it that can control flow rate." - - use_power = POWER_USE_OFF - idle_power_usage = 150 //internal circuitry, friction losses and stuff - power_rating = 45000 //45000 W ~ 60 HP - - var/injecting = 0 - - var/volume_rate = 50 //flow rate limit - - var/frequency = 1439 - var/id = null - var/datum/radio_frequency/radio_connection - - - level = 1 - - connect_types = CONNECT_TYPE_REGULAR|CONNECT_TYPE_FUEL - - build_icon = 'icons/atmos/injector.dmi' - build_icon_state = "map_injector" - -/obj/machinery/atmospherics/unary/outlet_injector/Initialize() - . = ..() - //Give it a small reservoir for injecting. Also allows it to have a higher flow rate limit than vent pumps, to differentiate injectors a bit more. - air_contents.volume = ATMOS_DEFAULT_VOLUME_PUMP + 500 - -/obj/machinery/atmospherics/unary/outlet_injector/Initialize() - . = ..() - set_frequency(frequency) - broadcast_status() - -/obj/machinery/atmospherics/unary/outlet_injector/Destroy() - unregister_radio(src, frequency) - . = ..() - -/obj/machinery/atmospherics/unary/outlet_injector/on_update_icon() - if (!node) - update_use_power(POWER_USE_OFF) - - if(stat & NOPOWER) - icon_state = "off" - else - icon_state = "[use_power ? "on" : "off"]" - -/obj/machinery/atmospherics/unary/outlet_injector/update_underlays() - if(..()) - underlays.Cut() - var/turf/T = get_turf(src) - if(!istype(T)) - return - if(!T.is_plating() && node && node.level == 1 && istype(node, /obj/machinery/atmospherics/pipe)) - return - else - if(node) - add_underlay(T, node, dir, node.icon_connect_type) - else - add_underlay(T,, dir) - -/obj/machinery/atmospherics/unary/outlet_injector/proc/get_console_data() - . = list() - . += "" - . += "" - . += "" - . += "" - if(frequency%10) - . += "" - else - . += "" - .+= "
              Name:[name]
              Power:[use_power?("Injecting"):("Offline")]Toggle
              ID Tag:[id]Set ID Tag
              Frequency:[frequency/10]Set Frequency
              Frequency:[frequency/10].0Set Frequency
              " - . = JOINTEXT(.) - -/obj/machinery/atmospherics/unary/outlet_injector/OnTopic(mob/user, href_list, datum/topic_state/state) - if((. = ..())) - return - if(href_list["toggle_power"]) - update_use_power(!use_power) - queue_icon_update() - to_chat(user, "The multitool emits a short beep confirming the change.") - return TOPIC_REFRESH - if(href_list["settag"]) - var/t = sanitizeSafe(input(user, "Enter the ID tag for [src.name]", src.name, id), MAX_NAME_LEN) - if(t && CanInteract(user, state)) - id = t - to_chat(user, "The multitool emits a short beep confirming the change.") - return TOPIC_REFRESH - return TOPIC_HANDLED - if(href_list["setfreq"]) - var/freq = input(user, "Enter the Frequency for [src.name]. Decimal will automatically be inserted", src.name, frequency) as num|null - if(CanInteract(user, state)) - set_frequency(freq) - to_chat(user, "The multitool emits a short beep confirming the change.") - return TOPIC_REFRESH - return TOPIC_HANDLED - -/obj/machinery/atmospherics/unary/outlet_injector/Process() - ..() - - last_power_draw = 0 - last_flow_rate = 0 - - if((stat & (NOPOWER|BROKEN)) || !use_power) - return - - var/power_draw = -1 - var/datum/gas_mixture/environment = loc.return_air() - - if(environment && air_contents.temperature > 0) - var/transfer_moles = (volume_rate/air_contents.volume)*air_contents.total_moles //apply flow rate limit - power_draw = pump_gas(src, air_contents, environment, transfer_moles, power_rating) - - if (power_draw >= 0) - last_power_draw = power_draw - use_power_oneoff(power_draw) - - if(network) - network.update = 1 - - return 1 - -/obj/machinery/atmospherics/unary/outlet_injector/proc/inject() - set waitfor = 0 - - if(injecting || (stat & NOPOWER)) - return 0 - - var/datum/gas_mixture/environment = loc.return_air() - if (!environment) - return 0 - - injecting = 1 - - if(air_contents.temperature > 0) - var/power_used = pump_gas(src, air_contents, environment, air_contents.total_moles, power_rating) - use_power_oneoff(power_used) - - if(network) - network.update = 1 - - flick("inject", src) - -/obj/machinery/atmospherics/unary/outlet_injector/proc/set_frequency(new_frequency) - radio_controller.remove_object(src, frequency) - frequency = new_frequency - if(frequency) - radio_connection = radio_controller.add_object(src, frequency, RADIO_ATMOSIA) - -/obj/machinery/atmospherics/unary/outlet_injector/proc/broadcast_status() - if(!radio_connection) - return 0 - - var/datum/signal/signal = new - signal.transmission_method = 1 //radio signal - signal.source = src - - signal.data = list( - "tag" = id, - "device" = "AO", - "power" = use_power, - "volume_rate" = volume_rate, - "sigtype" = "status" - ) - - radio_connection.post_signal(src, signal) - - return 1 - -/obj/machinery/atmospherics/unary/outlet_injector/receive_signal(datum/signal/signal) - if(!signal.data["tag"] || signal.data["tag"] != id || signal.data["sigtype"]!="command") - return 0 - - if(signal.data["power"]) - update_use_power(sanitize_integer(text2num(signal.data["power"]), POWER_USE_OFF, POWER_USE_ACTIVE, use_power)) - queue_icon_update() - - if(signal.data["power_toggle"] || signal.data["command"] == "valve_toggle") // some atmos buttons use "valve_toggle" as a command - update_use_power(!use_power) - queue_icon_update() - - if(signal.data["inject"]) - inject() - return - - if(signal.data["set_volume_rate"]) - var/number = text2num(signal.data["set_volume_rate"]) - volume_rate = clamp(number, 0, air_contents.volume) - - if(signal.data["status"]) - addtimer(CALLBACK(src, .proc/broadcast_status), 2, TIMER_UNIQUE) - return - - addtimer(CALLBACK(src, .proc/broadcast_status), 2, TIMER_UNIQUE) - -/obj/machinery/atmospherics/unary/outlet_injector/hide(var/i) - update_underlays() - -/obj/machinery/atmospherics/unary/outlet_injector/attackby(var/obj/item/O as obj, var/mob/user as mob) - if(isMultitool(O)) - var/datum/browser/popup = new (user, "Vent Configuration Utility", "[src] Configuration Panel", 600, 200) - popup.set_content(jointext(get_console_data(),"
              ")) - popup.open() - return - - if(isWrench(O)) - new /obj/item/pipe(loc, src) - qdel(src) - return - return ..() \ No newline at end of file diff --git a/code/modules/atmospherics/components/unary/tank.dm b/code/modules/atmospherics/components/unary/tank.dm deleted file mode 100644 index 48e13d12fe53b..0000000000000 --- a/code/modules/atmospherics/components/unary/tank.dm +++ /dev/null @@ -1,122 +0,0 @@ -/obj/machinery/atmospherics/unary/tank - icon = 'icons/atmos/tank.dmi' - icon_state = "air" - - name = "Pressure Tank" - desc = "A large vessel containing pressurized gas." - - var/volume = 10000 //in liters, 1 meters by 1 meters by 2 meters ~tweaked it a little to simulate a pressure tank without needing to recode them yet - var/start_pressure = 25*ONE_ATMOSPHERE - var/filling // list of gas ratios to use. - - level = 1 - dir = 2 - initialize_directions = 2 - density = TRUE - connect_types = CONNECT_TYPE_REGULAR|CONNECT_TYPE_SUPPLY|CONNECT_TYPE_SCRUBBER|CONNECT_TYPE_FUEL - pipe_class = PIPE_CLASS_UNARY - - build_icon = 'icons/atmos/tank.dmi' - build_icon_state = "air" - colorable = TRUE - atom_flags = ATOM_FLAG_CAN_BE_PAINTED - -/obj/machinery/atmospherics/unary/tank/Initialize() - . = ..() - - air_contents.volume = volume - - if(filling) - air_contents.temperature = T20C - - var/list/gases = list() - for(var/gas in filling) - gases += gas - gases += start_pressure * filling[gas] * (air_contents.volume)/(R_IDEAL_GAS_EQUATION*air_contents.temperature) - air_contents.adjust_multi(arglist(gases)) - update_icon() - -/obj/machinery/atmospherics/unary/tank/set_initial_level() - level = 1 // Always on top, apparently. - -// required for paint sprayers to work due to an override in pipes.dm -/obj/machinery/atmospherics/unary/tank/set_color(new_color) - color = new_color - icon_state = "air" - -/obj/machinery/atmospherics/unary/tank/update_underlays() - if(..()) - underlays.Cut() - var/turf/T = get_turf(src) - if(!istype(T)) - return - add_underlay(T, node, dir) - -/obj/machinery/atmospherics/unary/tank/hide() - update_underlays() - -/obj/machinery/atmospherics/unary/tank/return_air() - return air_contents - -/obj/machinery/atmospherics/unary/tank/attackby(var/obj/item/W as obj, var/mob/user as mob) - if(isWrench(W)) - if (air_contents.return_pressure() > 2*ONE_ATMOSPHERE) - to_chat(user, "You cannot unwrench \the [src], it is too exerted due to internal pressure.") - add_fingerprint(user) - return 1 - - playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1) - to_chat(user, "You begin to unfasten \the [src]...") - - if (do_after(user, 4 SECONDS, src, DO_PUBLIC_UNIQUE)) - user.visible_message("\The [user] unfastens \the [src].", "You have unfastened \the [src].", "You hear a ratchet.") - new /obj/item/pipe/tank(loc, src) - qdel(src) - -/obj/machinery/atmospherics/unary/tank/air - name = "Pressure Tank (Air)" - icon_state = "air" - filling = list(GAS_OXYGEN = O2STANDARD, GAS_NITROGEN = N2STANDARD) - -/obj/machinery/atmospherics/unary/tank/oxygen - name = "Pressure Tank (Oxygen)" - icon_state = "o2" - filling = list(GAS_OXYGEN = 1) - -/obj/machinery/atmospherics/unary/tank/nitrogen - name = "Pressure Tank (Nitrogen)" - icon_state = "n2" - filling = list(GAS_NITROGEN = 1) - -/obj/machinery/atmospherics/unary/tank/carbon_dioxide - name = "Pressure Tank (Carbon Dioxide)" - icon_state = "co2" - filling = list(GAS_CO2 = 1) - -/obj/machinery/atmospherics/unary/tank/phoron - name = "Pressure Tank (Phoron)" - icon_state = "phoron" - filling = list(GAS_PHORON = 1) - -/obj/machinery/atmospherics/unary/tank/nitrous_oxide - name = "Pressure Tank (Nitrous Oxide)" - icon_state = "n2o" - filling = list(GAS_N2O = 1) - -/obj/machinery/atmospherics/unary/tank/hydrogen - name = "Pressure Tank (Hydrogen)" - icon_state = "h2" - filling = list(GAS_HYDROGEN = 1) - -/obj/item/pipe/tank - icon = 'icons/atmos/tank.dmi' - icon_state = "air" - name = "Pressure Tank" - desc = "A large vessel containing pressurized gas." - color = PIPE_COLOR_WHITE - connect_types = CONNECT_TYPE_REGULAR|CONNECT_TYPE_REGULAR|CONNECT_TYPE_SCRUBBER|CONNECT_TYPE_FUEL - w_class = ITEM_SIZE_HUGE - level = 1 - dir = SOUTH - constructed_path = /obj/machinery/atmospherics/unary/tank - pipe_class = PIPE_CLASS_UNARY diff --git a/code/modules/atmospherics/components/unary/unary_base.dm b/code/modules/atmospherics/components/unary/unary_base.dm deleted file mode 100644 index 7a814dea8da82..0000000000000 --- a/code/modules/atmospherics/components/unary/unary_base.dm +++ /dev/null @@ -1,92 +0,0 @@ -/obj/machinery/atmospherics/unary - dir = SOUTH - initialize_directions = SOUTH - - layer = ABOVE_TILE_LAYER - - var/datum/gas_mixture/air_contents - - var/obj/machinery/atmospherics/node - - var/datum/pipe_network/network - - pipe_class = PIPE_CLASS_UNARY - -/obj/machinery/atmospherics/unary/Initialize() - air_contents = new - air_contents.volume = 200 - . = ..() - -// Housekeeping and pipe network stuff below -/obj/machinery/atmospherics/unary/network_expand(datum/pipe_network/new_network, obj/machinery/atmospherics/pipe/reference) - if(reference == node) - network = new_network - - if(new_network.normal_members.Find(src)) - return 0 - - new_network.normal_members += src - - return null - -/obj/machinery/atmospherics/unary/Destroy() - if(node) - node.disconnect(src) - qdel(network) - - node = null - - . = ..() - -/obj/machinery/atmospherics/unary/atmos_init() - ..() - if(node) return - - var/node_connect = dir - - for(var/obj/machinery/atmospherics/target in get_step(src,node_connect)) - if(target.initialize_directions & get_dir(target,src)) - if (check_connect_types(target,src)) - node = target - break - - update_icon() - update_underlays() - -/obj/machinery/atmospherics/unary/build_network() - if(!network && node) - network = new /datum/pipe_network() - network.normal_members += src - network.build_network(node, src) - -/obj/machinery/atmospherics/unary/return_network(obj/machinery/atmospherics/reference) - build_network() - - if(reference==node) - return network - - return null - -/obj/machinery/atmospherics/unary/reassign_network(datum/pipe_network/old_network, datum/pipe_network/new_network) - if(network == old_network) - network = new_network - - return 1 - -/obj/machinery/atmospherics/unary/return_network_air(datum/pipe_network/reference) - var/list/results = list() - - if(network == reference) - results += air_contents - - return results - -/obj/machinery/atmospherics/unary/disconnect(obj/machinery/atmospherics/reference) - if(reference==node) - qdel(network) - node = null - - update_icon() - update_underlays() - - return null \ No newline at end of file diff --git a/code/modules/atmospherics/components/unary/vent_pump.dm b/code/modules/atmospherics/components/unary/vent_pump.dm deleted file mode 100644 index d8be1598e963e..0000000000000 --- a/code/modules/atmospherics/components/unary/vent_pump.dm +++ /dev/null @@ -1,575 +0,0 @@ -#define DEFAULT_PRESSURE_DELTA 10000 - -#define EXTERNAL_PRESSURE_BOUND ONE_ATMOSPHERE -#define INTERNAL_PRESSURE_BOUND 0 -#define PRESSURE_CHECKS 1 - -#define PRESSURE_CHECK_EXTERNAL 1 -#define PRESSURE_CHECK_INTERNAL 2 - -/obj/machinery/atmospherics/unary/vent_pump - icon = 'icons/atmos/vent_pump.dmi' - icon_state = "map_vent" - - name = "Air Vent" - desc = "Has a valve and pump attached to it." - use_power = POWER_USE_OFF - idle_power_usage = 150 //internal circuitry, friction losses and stuff - power_rating = 30000 // 30000 W ~ 40 HP - - connect_types = CONNECT_TYPE_REGULAR|CONNECT_TYPE_SUPPLY|CONNECT_TYPE_FUEL //connects to regular, supply pipes, and fuel pipes - level = 1 - identifier = "AVP" - - var/hibernate = 0 //Do we even process? - var/pump_direction = 1 //0 = siphoning, 1 = releasing - - var/external_pressure_bound = EXTERNAL_PRESSURE_BOUND - var/internal_pressure_bound = INTERNAL_PRESSURE_BOUND - - var/pressure_checks = PRESSURE_CHECKS - //1: Do not pass external_pressure_bound - //2: Do not pass internal_pressure_bound - //3: Do not pass either - - // Used when handling incoming radio signals requesting default settings - var/external_pressure_bound_default = EXTERNAL_PRESSURE_BOUND - var/internal_pressure_bound_default = INTERNAL_PRESSURE_BOUND - var/pressure_checks_default = PRESSURE_CHECKS - - var/welded = 0 // Added for aliens -- TLE - - var/controlled = TRUE //if we should register with an air alarm on spawn - build_icon_state = "uvent" - - uncreated_component_parts = list( - /obj/item/stock_parts/power/apc, - /obj/item/stock_parts/radio/receiver, - /obj/item/stock_parts/radio/transmitter/on_event, - ) - public_variables = list( - /decl/public_access/public_variable/input_toggle, - /decl/public_access/public_variable/area_uid, - /decl/public_access/public_variable/identifier, - /decl/public_access/public_variable/use_power, - /decl/public_access/public_variable/pump_dir, - /decl/public_access/public_variable/pump_checks, - /decl/public_access/public_variable/pressure_bound, - /decl/public_access/public_variable/pressure_bound/external, - /decl/public_access/public_variable/power_draw, - /decl/public_access/public_variable/flow_rate, - /decl/public_access/public_variable/name - ) - public_methods = list( - /decl/public_access/public_method/toggle_power, - /decl/public_access/public_method/purge_pump, - /decl/public_access/public_method/refresh - ) - stock_part_presets = list( - /decl/stock_part_preset/radio/receiver/vent_pump = 1, - /decl/stock_part_preset/radio/event_transmitter/vent_pump = 1 - ) - - frame_type = /obj/item/pipe - construct_state = /decl/machine_construction/default/item_chassis - base_type = /obj/machinery/atmospherics/unary/vent_pump - -/obj/machinery/atmospherics/unary/vent_pump/on - use_power = POWER_USE_IDLE - icon_state = "map_vent_out" - -/obj/machinery/atmospherics/unary/vent_pump/siphon - pump_direction = 0 - -/obj/machinery/atmospherics/unary/vent_pump/siphon/on - use_power = POWER_USE_IDLE - icon_state = "map_vent_in" - -/obj/machinery/atmospherics/unary/vent_pump/siphon/on/atmos - use_power = POWER_USE_IDLE - icon_state = "map_vent_in" - external_pressure_bound = 0 - external_pressure_bound_default = 0 - internal_pressure_bound = MAX_PUMP_PRESSURE - internal_pressure_bound_default = MAX_PUMP_PRESSURE - pressure_checks = 2 - pressure_checks_default = 2 - -/obj/machinery/atmospherics/unary/vent_pump/Initialize() - . = ..() - var/area/area = get_area(src) - if (area) - LAZYADD(area.vent_pumps, src) - air_contents.volume = ATMOS_DEFAULT_VOLUME_PUMP - icon = null - -/obj/machinery/atmospherics/unary/vent_pump/Destroy() - var/area/area = get_area(src) - if(area) - area.air_vent_info -= id_tag - area.air_vent_names -= id_tag - LAZYREMOVE(area.vent_pumps, src) - return ..() - -/obj/machinery/atmospherics/unary/vent_pump/high_volume - name = "Large Air Vent" - power_channel = EQUIP - power_rating = 45000 - -/obj/machinery/atmospherics/unary/vent_pump/high_volume/Initialize() - . = ..() - air_contents.volume = ATMOS_DEFAULT_VOLUME_PUMP + 800 - - -/obj/machinery/atmospherics/unary/vent_pump/on_update_icon(var/safety = 0) - if(!check_icon_cache()) - return - if (!node) - return - - overlays.Cut() - - var/vent_icon = "vent" - - var/turf/T = get_turf(src) - if(!istype(T)) - return - - if(!T.is_plating() && node && node.level == 1 && istype(node, /obj/machinery/atmospherics/pipe)) - vent_icon += "h" - - if(welded) - vent_icon += "weld" - else if(!powered()) - vent_icon += "off" - else - vent_icon += "[use_power ? "[pump_direction ? "out" : "in"]" : "off"]" - - overlays += icon_manager.get_atmos_icon("device", , , vent_icon) - -/obj/machinery/atmospherics/unary/vent_pump/update_underlays() - if(..()) - underlays.Cut() - var/turf/T = get_turf(src) - if(!istype(T)) - return - if(!T.is_plating() && node && node.level == 1 && istype(node, /obj/machinery/atmospherics/pipe)) - return - else - if(node) - add_underlay(T, node, dir, node.icon_connect_type) - else - add_underlay(T,, dir) - -/obj/machinery/atmospherics/unary/vent_pump/hide() - update_icon() - update_underlays() - -/obj/machinery/atmospherics/unary/vent_pump/proc/can_pump() - if(stat & (NOPOWER|BROKEN)) - return 0 - if(!use_power) - return 0 - if(welded) - return 0 - return 1 - -/obj/machinery/atmospherics/unary/vent_pump/Process() - ..() - - if (hibernate > world.time) - return 1 - - if (!node) - update_use_power(POWER_USE_OFF) - if(!can_pump()) - return 0 - - var/datum/gas_mixture/environment = loc.return_air() - - var/power_draw = -1 - - //Figure out the target pressure difference - var/pressure_delta = get_pressure_delta(environment) - - if((environment.temperature || air_contents.temperature) && pressure_delta > 0.5) - if(pump_direction) //internal -> external - var/transfer_moles = calculate_transfer_moles(air_contents, environment, pressure_delta) - power_draw = pump_gas(src, air_contents, environment, transfer_moles, power_rating) - else //external -> internal - var/transfer_moles = calculate_transfer_moles(environment, air_contents, pressure_delta, (network)? network.volume : 0) - - //limit flow rate from turfs - transfer_moles = min(transfer_moles, environment.total_moles*air_contents.volume/environment.volume) //group_multiplier gets divided out here - power_draw = pump_gas(src, environment, air_contents, transfer_moles, power_rating) - - else - //If we're in an area that is fucking ideal, and we don't have to do anything, chances are we won't next tick either so why redo these calculations? - //JESUS FUCK. THERE ARE LITERALLY 250 OF YOU MOTHERFUCKERS ON ZLEVEL ONE AND YOU DO THIS SHIT EVERY TICK WHEN VERY OFTEN THERE IS NO REASON TO - if(pump_direction && pressure_checks == PRESSURE_CHECK_EXTERNAL) //99% of all vents - hibernate = world.time + (rand(100,200)) - - - if (power_draw >= 0) - last_power_draw = power_draw - use_power_oneoff(power_draw) - if(network) - network.update = 1 - - return 1 - -/obj/machinery/atmospherics/unary/vent_pump/proc/get_pressure_delta(datum/gas_mixture/environment) - var/pressure_delta = DEFAULT_PRESSURE_DELTA - var/environment_pressure = environment.return_pressure() - - if(pump_direction) //internal -> external - if(pressure_checks & PRESSURE_CHECK_EXTERNAL) - pressure_delta = min(pressure_delta, external_pressure_bound - environment_pressure) //increasing the pressure here - if(pressure_checks & PRESSURE_CHECK_INTERNAL) - pressure_delta = min(pressure_delta, air_contents.return_pressure() - internal_pressure_bound) //decreasing the pressure here - else //external -> internal - if(pressure_checks & PRESSURE_CHECK_EXTERNAL) - pressure_delta = min(pressure_delta, environment_pressure - external_pressure_bound) //decreasing the pressure here - if(pressure_checks & PRESSURE_CHECK_INTERNAL) - pressure_delta = min(pressure_delta, internal_pressure_bound - air_contents.return_pressure()) //increasing the pressure here - - return pressure_delta - -/obj/machinery/atmospherics/unary/vent_pump/area_uid() - return controlled ? ..() : "NONE" - -/obj/machinery/atmospherics/unary/vent_pump/Initialize() - if (!id_tag) - id_tag = num2text(sequential_id("obj/machinery")) - if(controlled) - var/area/A = get_area(src) - if(A && !A.air_vent_names[id_tag]) - var/new_name = "[A.name] Vent Pump #[A.air_vent_names.len+1]" - A.air_vent_names[id_tag] = new_name - SetName(new_name) - . = ..() - -/obj/machinery/atmospherics/unary/vent_pump/proc/purge() - pressure_checks &= ~PRESSURE_CHECK_EXTERNAL - pump_direction = 0 - -/obj/machinery/atmospherics/unary/vent_pump/refresh() - ..() - hibernate = FALSE - toggle_input_toggle() - -/obj/machinery/atmospherics/unary/vent_pump/RefreshParts() - . = ..() - toggle_input_toggle() - -/obj/machinery/atmospherics/unary/vent_pump/attackby(obj/item/W, mob/user) - if(isWelder(W)) - - var/obj/item/weldingtool/WT = W - - if(!WT.isOn()) - to_chat(user, "The welding tool needs to be on to start this task.") - return 1 - - if(!WT.remove_fuel(0,user)) - to_chat(user, "You need more welding fuel to complete this task.") - return 1 - - to_chat(user, "Now welding \the [src].") - playsound(src, 'sound/items/Welder.ogg', 50, 1) - - if(!do_after(user, 2 SECONDS, src, DO_PUBLIC_UNIQUE)) - to_chat(user, "You must remain close to finish this task.") - return 1 - - if(!src) - return 1 - - if(!WT.isOn()) - to_chat(user, "The welding tool needs to be on to finish this task.") - return 1 - - welded = !welded - update_icon() - playsound(src, 'sound/items/Welder2.ogg', 50, 1) - user.visible_message("\The [user] [welded ? "welds \the [src] shut" : "unwelds \the [src]"].", \ - "You [welded ? "weld \the [src] shut" : "unweld \the [src]"].", \ - "You hear welding.") - return 1 - - else - ..() - -/obj/machinery/atmospherics/unary/vent_pump/examine(mob/user, distance) - . = ..() - if(distance <= 1) - to_chat(user, "A small gauge in the corner reads [round(last_flow_rate, 0.1)] L/s; [round(last_power_draw)] W") - else - to_chat(user, "You are too far away to read the gauge.") - if(welded) - to_chat(user, "It seems welded shut.") - -/obj/machinery/atmospherics/unary/vent_pump/attackby(var/obj/item/W as obj, var/mob/user as mob) - if(isWrench(W)) - if (!(stat & NOPOWER) && use_power) - to_chat(user, "You cannot unwrench \the [src], turn it off first.") - return 1 - var/turf/T = src.loc - if (node && node.level==1 && isturf(T) && !T.is_plating()) - to_chat(user, "You must remove the plating first.") - return 1 - var/datum/gas_mixture/int_air = return_air() - var/datum/gas_mixture/env_air = loc.return_air() - if ((int_air.return_pressure()-env_air.return_pressure()) > 2*ONE_ATMOSPHERE) - to_chat(user, "You cannot unwrench \the [src], it is too exerted due to internal pressure.") - add_fingerprint(user) - return 1 - playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1) - to_chat(user, "You begin to unfasten \the [src]...") - if (do_after(user, 4 SECONDS, src, DO_PUBLIC_UNIQUE)) - user.visible_message( \ - "\The [user] unfastens \the [src].", \ - "You have unfastened \the [src].", \ - "You hear a ratchet.") - new /obj/item/pipe(loc, src) - qdel(src) - if(isMultitool(W)) - var/datum/browser/popup = new(user, "Vent Configuration Utility", "[src] Configuration Panel", 600, 200) - popup.set_content(jointext(get_console_data(),"
              ")) - popup.open() - return - else - return ..() - -/obj/machinery/atmospherics/unary/vent_pump/proc/get_console_data() - . = list() - . += "" - . += "" - . += "" - . = JOINTEXT(.) - -/obj/machinery/atmospherics/unary/vent_pump/OnTopic(mob/user, href_list, datum/topic_state/state) - if((. = ..())) - return - if(href_list["switchMode"]) - pump_direction = !pump_direction - to_chat(user, "The multitool emits a short beep confirming the change.") - queue_icon_update() //force the icon to refresh after changing directional mode. - return TOPIC_REFRESH - -/decl/public_access/public_variable/pump_dir - expected_type = /obj/machinery/atmospherics/unary/vent_pump - name = "pump direction" - desc = "The pump mode of the vent. Expected values are \"siphon\" or \"release\"." - can_write = TRUE - has_updates = TRUE - var_type = IC_FORMAT_STRING - -/decl/public_access/public_variable/pump_dir/access_var(obj/machinery/atmospherics/unary/vent_pump/machine) - return machine.pump_direction ? "release" : "siphon" - -/decl/public_access/public_variable/pump_dir/write_var(obj/machinery/atmospherics/unary/vent_pump/machine, new_value) - if(!(new_value in list("release", "siphon"))) - return FALSE - . = ..() - if(.) - machine.pump_direction = (new_value == "release") - -/decl/public_access/public_variable/pump_checks - expected_type = /obj/machinery/atmospherics/unary/vent_pump - name = "pump checks" - desc = "Numerical codes for whether the pump checks internal or internal pressure (or both) prior to operating. Can also be supplied the string keyword \"default\"." - can_write = TRUE - has_updates = FALSE - var_type = IC_FORMAT_ANY - -/decl/public_access/public_variable/pump_checks/access_var(obj/machinery/atmospherics/unary/vent_pump/machine) - return machine.pressure_checks - -/decl/public_access/public_variable/pump_checks/write_var(obj/machinery/atmospherics/unary/vent_pump/machine, new_value) - if(new_value == "default") - new_value = machine.pressure_checks_default - var/sanitized = sanitize_integer(new_value, 0, 3) - if(new_value != sanitized) - return FALSE - . = ..() - if(.) - machine.pressure_checks = new_value - -/decl/public_access/public_variable/pressure_bound - expected_type = /obj/machinery/atmospherics/unary/vent_pump - name = "internal pressure bound" - desc = "The bound on internal pressure used in checks (a number). When writing, can be supplied the string keyword \"default\" instead." - can_write = TRUE - has_updates = FALSE - var_type = IC_FORMAT_ANY - -/decl/public_access/public_variable/pressure_bound/access_var(obj/machinery/atmospherics/unary/vent_pump/machine) - return machine.internal_pressure_bound - -/decl/public_access/public_variable/pressure_bound/write_var(obj/machinery/atmospherics/unary/vent_pump/machine, new_value) - if(new_value == "default") - new_value = machine.internal_pressure_bound_default - new_value = clamp(text2num(new_value), 0, MAX_PUMP_PRESSURE) - . = ..() - if(.) - machine.internal_pressure_bound = new_value - -/decl/public_access/public_variable/pressure_bound/external - expected_type = /obj/machinery/atmospherics/unary/vent_pump - name = "external pressure bound" - desc = "The bound on external pressure used in checks (a number). When writing, can be supplied the string keyword \"default\" instead." - -/decl/public_access/public_variable/pressure_bound/external/access_var(obj/machinery/atmospherics/unary/vent_pump/machine) - return machine.external_pressure_bound - -/decl/public_access/public_variable/pressure_bound/external/write_var(obj/machinery/atmospherics/unary/vent_pump/machine, new_value) - if(new_value == "default") - new_value = machine.external_pressure_bound_default - new_value = clamp(text2num(new_value), 0, MAX_PUMP_PRESSURE) - . = ..() - if(.) - machine.external_pressure_bound = new_value - -/decl/public_access/public_method/purge_pump - name = "activate purge mode" - desc = "Activates purge mode, overriding pressure checks and removing air." - call_proc = /obj/machinery/atmospherics/unary/vent_pump/proc/purge - -/decl/stock_part_preset/radio/event_transmitter/vent_pump - frequency = PUMP_FREQ - filter = RADIO_TO_AIRALARM - event = /decl/public_access/public_variable/input_toggle - transmit_on_event = list( - "area" = /decl/public_access/public_variable/area_uid, - "device" = /decl/public_access/public_variable/identifier, - "power" = /decl/public_access/public_variable/use_power, - "direction" = /decl/public_access/public_variable/pump_dir, - "checks" = /decl/public_access/public_variable/pump_checks, - "internal" = /decl/public_access/public_variable/pressure_bound, - "external" = /decl/public_access/public_variable/pressure_bound/external, - "power_draw" = /decl/public_access/public_variable/power_draw, - "flow_rate" = /decl/public_access/public_variable/flow_rate - ) - -/decl/stock_part_preset/radio/receiver/vent_pump - frequency = PUMP_FREQ - filter = RADIO_FROM_AIRALARM - receive_and_call = list( - "power_toggle" = /decl/public_access/public_method/toggle_power, - "purge" = /decl/public_access/public_method/purge_pump, - "status" = /decl/public_access/public_method/refresh - ) - receive_and_write = list( - "set_power" = /decl/public_access/public_variable/use_power, - "set_direction" = /decl/public_access/public_variable/pump_dir, - "set_checks" = /decl/public_access/public_variable/pump_checks, - "set_internal_pressure" = /decl/public_access/public_variable/pressure_bound, - "set_external_pressure" = /decl/public_access/public_variable/pressure_bound/external, - "init" = /decl/public_access/public_variable/name - ) - -/decl/stock_part_preset/radio/receiver/vent_pump/tank - frequency = ATMOS_TANK_FREQ - filter = RADIO_ATMOSIA - -/decl/stock_part_preset/radio/event_transmitter/vent_pump/tank - frequency = ATMOS_TANK_FREQ - filter = RADIO_ATMOSIA - -/obj/machinery/atmospherics/unary/vent_pump/tank - controlled = FALSE - stock_part_presets = list( - /decl/stock_part_preset/radio/receiver/vent_pump/tank = 1, - /decl/stock_part_preset/radio/event_transmitter/vent_pump/tank = 1 - ) - -/obj/machinery/atmospherics/unary/vent_pump/siphon/on/atmos/tank - controlled = FALSE - stock_part_presets = list( - /decl/stock_part_preset/radio/receiver/vent_pump/tank = 1, - /decl/stock_part_preset/radio/event_transmitter/vent_pump/tank = 1 - ) - -/decl/stock_part_preset/radio/receiver/vent_pump/external_air - frequency = EXTERNAL_AIR_FREQ - -/decl/stock_part_preset/radio/event_transmitter/vent_pump/external_air - frequency = EXTERNAL_AIR_FREQ - filter = RADIO_AIRLOCK - -/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air - controlled = FALSE - stock_part_presets = list( - /decl/stock_part_preset/radio/receiver/vent_pump/external_air = 1, - /decl/stock_part_preset/radio/event_transmitter/vent_pump/external_air = 1 - ) - -/decl/stock_part_preset/radio/receiver/vent_pump/shuttle - frequency = SHUTTLE_AIR_FREQ - -/decl/stock_part_preset/radio/event_transmitter/vent_pump/shuttle - frequency = SHUTTLE_AIR_FREQ - filter = RADIO_AIRLOCK - -/obj/machinery/atmospherics/unary/vent_pump/high_volume/shuttle - controlled = FALSE - stock_part_presets = list( - /decl/stock_part_preset/radio/receiver/vent_pump/shuttle = 1, - /decl/stock_part_preset/radio/event_transmitter/vent_pump/shuttle = 1 - ) - -/decl/stock_part_preset/radio/event_transmitter/vent_pump/shuttle/aux - filter = RADIO_TO_AIRALARM - -// This is intended for hybrid airlock-room setups, where unlike the above, this one is controlled by the air alarm and attached to the internal atmos system. -/obj/machinery/atmospherics/unary/vent_pump/shuttle_auxiliary - stock_part_presets = list( - /decl/stock_part_preset/radio/receiver/vent_pump/shuttle = 1, - /decl/stock_part_preset/radio/event_transmitter/vent_pump/shuttle/aux = 1 - ) - -/decl/stock_part_preset/radio/receiver/vent_pump/airlock - frequency = AIRLOCK_AIR_FREQ - -/decl/stock_part_preset/radio/event_transmitter/vent_pump/airlock - frequency = AIRLOCK_AIR_FREQ - filter = RADIO_AIRLOCK - -/obj/machinery/atmospherics/unary/vent_pump/high_volume/airlock - controlled = FALSE - stock_part_presets = list( - /decl/stock_part_preset/radio/receiver/vent_pump/airlock = 1, - /decl/stock_part_preset/radio/event_transmitter/vent_pump/airlock = 1 - ) - -/decl/stock_part_preset/radio/receiver/vent_pump/engine - frequency = ATMOS_ENGINE_FREQ - filter = RADIO_ATMOSIA - -/decl/stock_part_preset/radio/event_transmitter/vent_pump/engine - frequency = ATMOS_ENGINE_FREQ - filter = RADIO_ATMOSIA - -/obj/machinery/atmospherics/unary/vent_pump/engine - name = "Engine Core Vent" - power_channel = ENVIRON - power_rating = 30000 - controlled = FALSE - stock_part_presets = list( - /decl/stock_part_preset/radio/receiver/vent_pump/engine = 1, - /decl/stock_part_preset/radio/event_transmitter/vent_pump/engine = 1 - ) - -/obj/machinery/atmospherics/unary/vent_pump/engine/Initialize() - . = ..() - air_contents.volume = ATMOS_DEFAULT_VOLUME_PUMP + 500 //meant to match air injector - -#undef DEFAULT_PRESSURE_DELTA - -#undef EXTERNAL_PRESSURE_BOUND -#undef INTERNAL_PRESSURE_BOUND -#undef PRESSURE_CHECKS - -#undef PRESSURE_CHECK_EXTERNAL -#undef PRESSURE_CHECK_INTERNAL diff --git a/code/modules/atmospherics/components/unary/vent_scrubber.dm b/code/modules/atmospherics/components/unary/vent_scrubber.dm deleted file mode 100644 index 47df072993665..0000000000000 --- a/code/modules/atmospherics/components/unary/vent_scrubber.dm +++ /dev/null @@ -1,366 +0,0 @@ -/obj/machinery/atmospherics/unary/vent_scrubber - icon = 'icons/atmos/vent_scrubber.dmi' - icon_state = "map_scrubber_off" - - name = "Air Scrubber" - desc = "Has a valve and pump attached to it." - use_power = POWER_USE_OFF - idle_power_usage = 150 //internal circuitry, friction losses and stuff - power_rating = 30000 // 30000 W ~ 40 HP - - connect_types = CONNECT_TYPE_REGULAR|CONNECT_TYPE_SCRUBBER //connects to regular and scrubber pipes - identifier = "AScr" - - level = 1 - - var/hibernate = 0 //Do we even process? - var/scrubbing = SCRUBBER_EXCHANGE - var/list/scrubbing_gas - - var/panic = 0 //is this scrubber panicked? - - var/welded = 0 - connect_types = CONNECT_TYPE_REGULAR|CONNECT_TYPE_SCRUBBER - build_icon_state = "scrubber" - - uncreated_component_parts = list( - /obj/item/stock_parts/power/apc, - /obj/item/stock_parts/radio/receiver, - /obj/item/stock_parts/radio/transmitter/on_event, - ) - public_variables = list( - /decl/public_access/public_variable/input_toggle, - /decl/public_access/public_variable/area_uid, - /decl/public_access/public_variable/identifier, - /decl/public_access/public_variable/use_power, - /decl/public_access/public_variable/name, - /decl/public_access/public_variable/scrubbing, - /decl/public_access/public_variable/panic, - /decl/public_access/public_variable/scrubbing_gas - ) - public_methods = list( - /decl/public_access/public_method/toggle_power, - /decl/public_access/public_method/refresh, - /decl/public_access/public_method/toggle_panic_siphon, - /decl/public_access/public_method/set_scrub_gas - ) - stock_part_presets = list( - /decl/stock_part_preset/radio/receiver/vent_scrubber = 1, - /decl/stock_part_preset/radio/event_transmitter/vent_scrubber = 1 - ) - - frame_type = /obj/item/pipe - construct_state = /decl/machine_construction/default/item_chassis - base_type = /obj/machinery/atmospherics/unary/vent_scrubber - -/obj/machinery/atmospherics/unary/vent_scrubber/on - use_power = POWER_USE_IDLE - icon_state = "map_scrubber_on" - -/obj/machinery/atmospherics/unary/vent_scrubber/Initialize() - . = ..() - air_contents.volume = ATMOS_DEFAULT_VOLUME_FILTER - icon = null - -/obj/machinery/atmospherics/unary/vent_scrubber/on_update_icon(var/safety = 0) - if(!check_icon_cache()) - return - - overlays.Cut() - - - var/turf/T = get_turf(src) - if(!istype(T)) - return - - var/scrubber_icon = "scrubber" - if(welded) - scrubber_icon += "weld" - else if (!powered() || !use_power) - scrubber_icon += "off" - else if(scrubbing == SCRUBBER_SIPHON) - scrubber_icon += "in" - else - scrubber_icon += "on" - - overlays += icon_manager.get_atmos_icon("device", , , scrubber_icon) - -/obj/machinery/atmospherics/unary/vent_scrubber/update_underlays() - if(..()) - underlays.Cut() - var/turf/T = get_turf(src) - if(!istype(T)) - return - if(!T.is_plating() && node && node.level == 1 && istype(node, /obj/machinery/atmospherics/pipe)) - return - else - if(node) - add_underlay(T, node, dir, node.icon_connect_type) - else - add_underlay(T,, dir) - -/obj/machinery/atmospherics/unary/vent_scrubber/Initialize() - if (!id_tag) - id_tag = num2text(sequential_id("obj/machinery")) - if(!scrubbing_gas) - reset_scrubbing() - var/area/A = get_area(src) - if(A && !A.air_scrub_names[id_tag]) - var/new_name = "[A.name] Vent Scrubber #[A.air_scrub_names.len+1]" - A.air_scrub_names[id_tag] = new_name - SetName(new_name) - . = ..() - - -/obj/machinery/atmospherics/unary/vent_scrubber/proc/reset_scrubbing() - if (initial(scrubbing_gas)) - scrubbing_gas = initial(scrubbing_gas) - else - scrubbing_gas = list() - for(var/g in gas_data.gases) - if(g != GAS_OXYGEN && g != GAS_NITROGEN) - add_to_scrubbing(g) - - -/obj/machinery/atmospherics/unary/vent_scrubber/proc/add_to_scrubbing(new_gas) - scrubbing_gas |= new_gas - - -/obj/machinery/atmospherics/unary/vent_scrubber/proc/remove_from_scrubbing(old_gas) - if (old_gas in scrubbing_gas) - scrubbing_gas -= old_gas - - -/obj/machinery/atmospherics/unary/vent_scrubber/RefreshParts() - . = ..() - toggle_input_toggle() - -/obj/machinery/atmospherics/unary/vent_scrubber/Process() - ..() - - if (hibernate > world.time) - return 1 - - if (!node) - update_use_power(POWER_USE_OFF) - //broadcast_status() - if(!use_power || (stat & (NOPOWER|BROKEN))) - return 0 - if(welded) - return 0 - - var/datum/gas_mixture/environment = loc.return_air() - - var/power_draw = -1 - var/transfer_moles = 0 - if(scrubbing == SCRUBBER_SIPHON) //Just siphon all air - //limit flow rate from turfs - transfer_moles = min(environment.total_moles, environment.total_moles*MAX_SIPHON_FLOWRATE/environment.volume) //group_multiplier gets divided out here - power_draw = pump_gas(src, environment, air_contents, transfer_moles, power_rating) - else //limit flow rate from turfs - transfer_moles = min(environment.total_moles, environment.total_moles*MAX_SCRUBBER_FLOWRATE/environment.volume) //group_multiplier gets divided out here - power_draw = scrub_gas(src, scrubbing_gas, environment, air_contents, transfer_moles, power_rating) - - if(scrubbing != SCRUBBER_SIPHON && power_draw <= 0) //99% of all scrubbers - //Fucking hibernate because you ain't doing shit. - hibernate = world.time + (rand(100,200)) - else if(scrubbing == SCRUBBER_EXCHANGE) // after sleep check so it only does an exchange if there are bad gasses that have been scrubbed - transfer_moles = min(environment.total_moles, environment.total_moles*MAX_SCRUBBER_FLOWRATE/environment.volume) - power_draw += pump_gas(src, environment, air_contents, transfer_moles / 4, power_rating) - - if (power_draw >= 0) - last_power_draw = power_draw - use_power_oneoff(power_draw) - - if(network) - network.update = 1 - - return 1 - -/obj/machinery/atmospherics/unary/vent_scrubber/hide(var/i) //to make the little pipe section invisible, the icon changes. - update_icon() - update_underlays() - -/obj/machinery/atmospherics/unary/vent_scrubber/proc/toggle_panic() - var/decl/public_access/public_variable/panic/panic = decls_repository.get_decl(/decl/public_access/public_variable/panic) - panic.write_var(src, !panic) - -/obj/machinery/atmospherics/unary/vent_scrubber/proc/set_scrub_gas(var/list/gases) - for(var/gas_id in gases) - if((gas_id in scrubbing_gas) ^ gases[gas_id]) - scrubbing_gas ^= gas_id - -/obj/machinery/atmospherics/unary/vent_scrubber/cannot_transition_to(state_path, mob/user) - if(state_path == /decl/machine_construction/default/deconstructed) - if (!(stat & NOPOWER) && use_power) - return SPAN_WARNING("You cannot take this [src] apart, turn it off first.") - var/turf/T = get_turf(src) - if (node && node.level==1 && isturf(T) && !T.is_plating()) - return SPAN_WARNING("You must remove the plating first.") - var/datum/gas_mixture/int_air = return_air() - var/datum/gas_mixture/env_air = loc.return_air() - if ((int_air.return_pressure()-env_air.return_pressure()) > 2*ONE_ATMOSPHERE) - return SPAN_WARNING("You cannot take this [src] apart, it too exerted due to internal pressure.") - return ..() - -/obj/machinery/atmospherics/unary/vent_scrubber/attackby(var/obj/item/W as obj, var/mob/user as mob) - if(istype(W, /obj/item/weldingtool)) - - var/obj/item/weldingtool/WT = W - - if(!WT.isOn()) - to_chat(user, "The welding tool needs to be on to start this task.") - return 1 - - if(!WT.remove_fuel(0,user)) - to_chat(user, "You need more welding fuel to complete this task.") - return 1 - - to_chat(user, "Now welding \the [src].") - playsound(src, 'sound/items/Welder.ogg', 50, 1) - - if(!do_after(user, 2 SECONDS, src, DO_PUBLIC_UNIQUE)) - to_chat(user, "You must remain close to finish this task.") - return 1 - - if(!src) - return 1 - - if(!WT.isOn()) - to_chat(user, "The welding tool needs to be on to finish this task.") - return 1 - - welded = !welded - update_icon() - playsound(src, 'sound/items/Welder2.ogg', 50, 1) - user.visible_message("\The [user] [welded ? "welds \the [src] shut" : "unwelds \the [src]"].", \ - "You [welded ? "weld \the [src] shut" : "unweld \the [src]"].", \ - "You hear welding.") - return 1 - - return ..() - -/obj/machinery/atmospherics/unary/vent_scrubber/examine(mob/user, distance) - . = ..() - if(distance <= 1) - to_chat(user, "A small gauge in the corner reads [round(last_flow_rate, 0.1)] L/s; [round(last_power_draw)] W") - else - to_chat(user, "You are too far away to read the gauge.") - if(welded) - to_chat(user, "It seems welded shut.") - -/obj/machinery/atmospherics/unary/vent_scrubber/refresh() - ..() - hibernate = FALSE - toggle_input_toggle() - -/obj/machinery/atmospherics/unary/vent_scrubber/on/sauna/reset_scrubbing() - ..() - remove_from_scrubbing(GAS_STEAM) - -/decl/public_access/public_variable/scrubbing - expected_type = /obj/machinery/atmospherics/unary/vent_scrubber - name = "scrubbing mode" - desc = "The scrubbing mode code, which identifies what the scrubber is doing." - can_write = TRUE - has_updates = FALSE - var_type = IC_FORMAT_STRING - -/decl/public_access/public_variable/scrubbing/access_var(obj/machinery/atmospherics/unary/vent_scrubber/machine) - return machine.scrubbing - -/decl/public_access/public_variable/scrubbing/write_var(obj/machinery/atmospherics/unary/vent_scrubber/machine, new_value) - if(!(new_value in list(SCRUBBER_EXCHANGE, SCRUBBER_SCRUB, SCRUBBER_SIPHON))) - return FALSE - . = ..() - if(.) - machine.scrubbing = new_value - if(new_value != SCRUBBER_SIPHON) - machine.panic = FALSE - -/decl/public_access/public_variable/panic - expected_type = /obj/machinery/atmospherics/unary/vent_scrubber - name = "panic state" - desc = "Whether or not the scrubber is in panic mode." - can_write = TRUE - has_updates = FALSE - var_type = IC_FORMAT_BOOLEAN - -/decl/public_access/public_variable/panic/access_var(obj/machinery/atmospherics/unary/vent_scrubber/machine) - return machine.panic - -/decl/public_access/public_variable/panic/write_var(obj/machinery/atmospherics/unary/vent_scrubber/machine, new_value) - if(!(new_value in list(TRUE, FALSE))) - return FALSE - . = ..() - if(.) - machine.panic = new_value - if(machine.panic) - machine.update_use_power(POWER_USE_IDLE) - machine.scrubbing = SCRUBBER_SIPHON - else - machine.scrubbing = SCRUBBER_EXCHANGE - -/decl/public_access/public_variable/scrubbing_gas - expected_type = /obj/machinery/atmospherics/unary/vent_scrubber - name = "gasses scrubbing" - desc = "A list of gases that this scrubber is scrubbing." - can_write = FALSE - has_updates = FALSE - var_type = IC_FORMAT_LIST - -/decl/public_access/public_variable/scrubbing_gas/access_var(obj/machinery/atmospherics/unary/vent_scrubber/machine) - return machine.scrubbing_gas.Copy() - -/decl/public_access/public_method/toggle_panic_siphon - name = "toggle panic siphon" - desc = "Toggles the panic siphon function." - call_proc = /obj/machinery/atmospherics/unary/vent_scrubber/proc/toggle_panic - -/decl/public_access/public_method/set_scrub_gas - name = "set filter gases" - desc = "Given a list of gases, sets whether the gas is being scrubbed to the value of the gas in the list." - forward_args = TRUE - call_proc = /obj/machinery/atmospherics/unary/vent_scrubber/proc/set_scrub_gas - -/decl/stock_part_preset/radio/event_transmitter/vent_scrubber - frequency = PUMP_FREQ - filter = RADIO_TO_AIRALARM - event = /decl/public_access/public_variable/input_toggle - transmit_on_event = list( - "area" = /decl/public_access/public_variable/area_uid, - "device" = /decl/public_access/public_variable/identifier, - "power" = /decl/public_access/public_variable/use_power, - "panic" = /decl/public_access/public_variable/panic, - "scrubbing" = /decl/public_access/public_variable/scrubbing, - "scrubbing_gas" = /decl/public_access/public_variable/scrubbing_gas - ) - -/decl/stock_part_preset/radio/receiver/vent_scrubber - frequency = PUMP_FREQ - filter = RADIO_FROM_AIRALARM - receive_and_call = list( - "power_toggle" = /decl/public_access/public_method/toggle_power, - "toggle_panic_siphon" = /decl/public_access/public_method/toggle_panic_siphon, - "set_scrub_gas" = /decl/public_access/public_method/set_scrub_gas, - "status" = /decl/public_access/public_method/refresh - ) - receive_and_write = list( - "set_power" = /decl/public_access/public_variable/use_power, - "panic_siphon" = /decl/public_access/public_variable/panic, - "set_scrubbing" = /decl/public_access/public_variable/scrubbing, - "init" = /decl/public_access/public_variable/name - ) - -/decl/stock_part_preset/radio/receiver/vent_scrubber/shuttle - frequency = SHUTTLE_AIR_FREQ - -/decl/stock_part_preset/radio/event_transmitter/vent_scrubber/shuttle - frequency = SHUTTLE_AIR_FREQ - -// Similar to the vent of the same name, for hybrid airlock-rooms -/obj/machinery/atmospherics/unary/vent_scrubber/on/shuttle_auxiliary - stock_part_presets = list( - /decl/stock_part_preset/radio/receiver/vent_scrubber/shuttle = 1, - /decl/stock_part_preset/radio/event_transmitter/vent_scrubber/shuttle = 1 - ) diff --git a/code/modules/atmospherics/components/valve.dm b/code/modules/atmospherics/components/valve.dm deleted file mode 100644 index 0f9d7aee622fd..0000000000000 --- a/code/modules/atmospherics/components/valve.dm +++ /dev/null @@ -1,309 +0,0 @@ -/obj/machinery/atmospherics/valve - icon = 'icons/atmos/valve.dmi' - icon_state = "map_valve0" - - name = "manual valve" - desc = "A pipe valve." - - level = 1 - dir = SOUTH - initialize_directions = SOUTH|NORTH - layer = ABOVE_CATWALK_LAYER - - var/open = 0 - var/openDuringInit = 0 - - - var/datum/pipe_network/network_node1 - var/datum/pipe_network/network_node2 - - connect_types = CONNECT_TYPE_REGULAR|CONNECT_TYPE_SUPPLY|CONNECT_TYPE_SCRUBBER|CONNECT_TYPE_FUEL - connect_dir_type = SOUTH | NORTH - pipe_class = PIPE_CLASS_BINARY - rotate_class = PIPE_ROTATE_TWODIR - build_icon_state = "mvalve" - -/obj/machinery/atmospherics/valve/open - open = 1 - icon_state = "map_valve1" - -/obj/machinery/atmospherics/valve/on_update_icon(animation) - if(animation) - flick("valve[src.open][!src.open]",src) - else - icon_state = "valve[open]" - -/obj/machinery/atmospherics/valve/update_underlays() - if(..()) - underlays.Cut() - var/turf/T = get_turf(src) - if(!istype(T)) - return - add_underlay(T, node1, get_dir(src, node1), node1 ? node1.icon_connect_type : "") - add_underlay(T, node2, get_dir(src, node2), node2 ? node2.icon_connect_type : "") - -/obj/machinery/atmospherics/valve/hide(var/i) - update_underlays() - -/obj/machinery/atmospherics/valve/network_expand(datum/pipe_network/new_network, obj/machinery/atmospherics/pipe/reference) - if(reference == node1) - network_node1 = new_network - if(open) - network_node2 = new_network - else if(reference == node2) - network_node2 = new_network - if(open) - network_node1 = new_network - - if(new_network.normal_members.Find(src)) - return 0 - - new_network.normal_members += src - - if(open) - if(reference == node1) - if(node2) - return node2.network_expand(new_network, src) - else if(reference == node2) - if(node1) - return node1.network_expand(new_network, src) - - return null - -/obj/machinery/atmospherics/valve/Destroy() - if(node1) - node1.disconnect(src) - qdel(network_node1) - if(node2) - node2.disconnect(src) - qdel(network_node2) - - node1 = null - node2 = null - - . = ..() - -/obj/machinery/atmospherics/valve/proc/open() - if(open) return 0 - - open = 1 - update_icon() - - if(network_node1&&network_node2) - network_node1.merge(network_node2) - network_node2 = network_node1 - - if(network_node1) - network_node1.update = 1 - else if(network_node2) - network_node2.update = 1 - - if (usr) - visible_message(SPAN_WARNING("\The [usr] opens \the [src]."), range = 5) - - return 1 - -/obj/machinery/atmospherics/valve/proc/close() - if(!open) - return 0 - - open = 0 - update_icon() - - if(network_node1) - qdel(network_node1) - if(network_node2) - qdel(network_node2) - - build_network() - - if (usr) - visible_message(SPAN_WARNING("\The [usr] closes \the [src]."), range = 5) - - return 1 - -/obj/machinery/atmospherics/valve/proc/toggle() - return open ? close() : open() - -/obj/machinery/atmospherics/valve/physical_attack_hand(mob/user) - user_toggle() - return TRUE - -/obj/machinery/atmospherics/valve/proc/user_toggle() - update_icon(1) - sleep(10) - toggle() - -/obj/machinery/atmospherics/valve/Process() - ..() - return PROCESS_KILL - -/obj/machinery/atmospherics/valve/atmos_init() - ..() - var/node1_dir - var/node2_dir - - for(var/direction in GLOB.cardinal) - if(direction&initialize_directions) - if (!node1_dir) - node1_dir = direction - else if (!node2_dir) - node2_dir = direction - - for(var/obj/machinery/atmospherics/target in get_step(src,node1_dir)) - if(target.initialize_directions & get_dir(target,src)) - if (check_connect_types(target,src)) - node1 = target - break - for(var/obj/machinery/atmospherics/target in get_step(src,node2_dir)) - if(target.initialize_directions & get_dir(target,src)) - if (check_connect_types(target,src)) - node2 = target - break - - update_icon() - update_underlays() - - if(openDuringInit) - close() - open() - openDuringInit = 0 - -/obj/machinery/atmospherics/valve/build_network() - if(!network_node1 && node1) - network_node1 = new /datum/pipe_network() - network_node1.normal_members += src - network_node1.build_network(node1, src) - - if(!network_node2 && node2) - network_node2 = new /datum/pipe_network() - network_node2.normal_members += src - network_node2.build_network(node2, src) - -/obj/machinery/atmospherics/valve/return_network(obj/machinery/atmospherics/reference) - build_network() - - if(reference==node1) - return network_node1 - - if(reference==node2) - return network_node2 - - return null - -/obj/machinery/atmospherics/valve/reassign_network(datum/pipe_network/old_network, datum/pipe_network/new_network) - if(network_node1 == old_network) - network_node1 = new_network - if(network_node2 == old_network) - network_node2 = new_network - - return 1 - -/obj/machinery/atmospherics/valve/return_network_air(datum/pipe_network/reference) - return null - -/obj/machinery/atmospherics/valve/disconnect(obj/machinery/atmospherics/reference) - if(reference==node1) - qdel(network_node1) - node1 = null - - else if(reference==node2) - qdel(network_node2) - node2 = null - - update_underlays() - - return null - -/obj/machinery/atmospherics/valve/attackby(var/obj/item/W as obj, var/mob/user as mob) - if (!istype(W, /obj/item/wrench)) - return ..() - var/datum/gas_mixture/int_air = return_air() - var/datum/gas_mixture/env_air = loc.return_air() - if ((int_air.return_pressure()-env_air.return_pressure()) > 2*ONE_ATMOSPHERE) - to_chat(user, "You cannot unwrench \the [src], it is too exerted due to internal pressure.") - add_fingerprint(user) - return 1 - playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1) - to_chat(user, "You begin to unfasten \the [src]...") - if (do_after(user, 4 SECONDS, src, DO_PUBLIC_UNIQUE)) - user.visible_message( \ - "\The [user] unfastens \the [src].", \ - "You have unfastened \the [src].", \ - "You hear a ratchet.") - new /obj/item/pipe(loc, src) - qdel(src) - -/obj/machinery/atmospherics/valve/examine(mob/user) - . = ..() - to_chat(user, "It is [open ? "open" : "closed"].") - -/decl/public_access/public_variable/valve_open - expected_type = /obj/machinery/atmospherics/valve - name = "valve open" - desc = "Whether or not the valve is open." - can_write = FALSE - has_updates = FALSE - -/decl/public_access/public_variable/valve_open/access_var(obj/machinery/atmospherics/valve/valve) - return valve.open - -/decl/public_access/public_method/open_valve - name = "open valve" - desc = "Sets the valve to open." - call_proc = /obj/machinery/atmospherics/valve/proc/open - -/decl/public_access/public_method/close_valve - name = "open valve" - desc = "Sets the valve to open." - call_proc = /obj/machinery/atmospherics/valve/proc/close - -/decl/public_access/public_method/toggle_valve - name = "toggle valve" - desc = "Toggles whether the valve is open or closed." - call_proc = /obj/machinery/atmospherics/valve/proc/toggle - -/obj/machinery/atmospherics/valve/digital // can be controlled by AI - name = "digital valve" - desc = "A digitally controlled valve." - icon = 'icons/atmos/digital_valve.dmi' - uncreated_component_parts = list( - /obj/item/stock_parts/radio/receiver, - /obj/item/stock_parts/power/apc - ) - public_variables = list(/decl/public_access/public_variable/valve_open) - public_methods = list( - /decl/public_access/public_method/open_valve, - /decl/public_access/public_method/close_valve, - /decl/public_access/public_method/toggle_valve - ) - stock_part_presets = list(/decl/stock_part_preset/radio/receiver/valve = 1) - - build_icon_state = "dvalve" - -/obj/machinery/atmospherics/valve/digital/interface_interact(mob/user) - if(!CanInteract(user, DefaultTopicState())) - return FALSE - user_toggle() - return TRUE - -/obj/machinery/atmospherics/valve/digital/physical_attack_hand(mob/user) - return FALSE - -/obj/machinery/atmospherics/valve/digital/open - open = 1 - icon_state = "map_valve1" - -/obj/machinery/atmospherics/valve/digital/on_update_icon() - ..() - if(!powered()) - icon_state = "valve[open]nopower" - -/decl/stock_part_preset/radio/receiver/valve - frequency = FUEL_FREQ - filter = RADIO_ATMOSIA - receive_and_call = list( - "valve_open" = /decl/public_access/public_method/open_valve, - "valve_close" = /decl/public_access/public_method/close_valve, - "valve_toggle" = /decl/public_access/public_method/toggle_valve - ) diff --git a/code/modules/atmospherics/datum_pipe_network.dm b/code/modules/atmospherics/datum_pipe_network.dm deleted file mode 100644 index 0b5505ed72028..0000000000000 --- a/code/modules/atmospherics/datum_pipe_network.dm +++ /dev/null @@ -1,84 +0,0 @@ -/datum/pipe_network - var/list/datum/gas_mixture/gases = list() //All of the gas_mixtures continuously connected in this network - var/volume = 0 //caches the total volume for atmos machines to use in gas calculations - - var/list/obj/machinery/atmospherics/normal_members = list() - var/list/datum/pipeline/line_members = list() - //membership roster to go through for updates and what not - var/list/leaks = list() - var/update = 1 - -/datum/pipe_network/Destroy() - STOP_PROCESSING_PIPENET(src) - for(var/datum/pipeline/line_member in line_members) - line_member.network = null - for(var/obj/machinery/atmospherics/normal_member in normal_members) - normal_member.reassign_network(src, null) - gases.Cut() // Do not qdel the gases, we don't own them - leaks.Cut() - normal_members.Cut() - line_members.Cut() - return ..() - -/datum/pipe_network/Process() - //Equalize gases amongst pipe if called for - if(update) - update = 0 - reconcile_air() //equalize_gases(gases) - - //Give pipelines their process call for pressure checking and what not. Have to remove pressure checks for the time being as pipes don't radiate heat - Mport - //for(var/datum/pipeline/line_member in line_members) - // line_member.process() - -/datum/pipe_network/proc/build_network(obj/machinery/atmospherics/start_normal, obj/machinery/atmospherics/reference) - //Purpose: Generate membership roster - //Notes: Assuming that members will add themselves to appropriate roster in network_expand() - - if(!start_normal) - qdel(src) - return - start_normal.network_expand(src, reference) - - update_network_gases() - - if((normal_members.len>0)||(line_members.len>0)) - START_PROCESSING_PIPENET(src) - return 1 - qdel(src) - -/datum/pipe_network/proc/merge(datum/pipe_network/giver) - if(giver==src) return 0 - - normal_members |= giver.normal_members - - line_members |= giver.line_members - - leaks |= giver.leaks - - for(var/obj/machinery/atmospherics/normal_member in giver.normal_members) - normal_member.reassign_network(giver, src) - - for(var/datum/pipeline/line_member in giver.line_members) - line_member.network = src - - update_network_gases() - return 1 - -/datum/pipe_network/proc/update_network_gases() - //Go through membership roster and make sure gases is up to date - - gases = list() - volume = 0 - - for(var/obj/machinery/atmospherics/normal_member in normal_members) - var/result = normal_member.return_network_air(src) - if(result) gases += result - - for(var/datum/pipeline/line_member in line_members) - gases += line_member.air - - for(var/datum/gas_mixture/air in gases) - volume += air.volume - -/datum/pipe_network/proc/reconcile_air() - equalize_gases(gases) diff --git a/code/modules/atmospherics/datum_pipeline.dm b/code/modules/atmospherics/datum_pipeline.dm deleted file mode 100644 index d9112e8448d13..0000000000000 --- a/code/modules/atmospherics/datum_pipeline.dm +++ /dev/null @@ -1,243 +0,0 @@ -/datum/pipeline - var/datum/gas_mixture/air - - var/list/obj/machinery/atmospherics/pipe/members - var/list/obj/machinery/atmospherics/pipe/edges //Used for building networks - - var/datum/pipe_network/network - // Leaking nodes - var/list/leaks = list() - - var/maximum_pressure = 0 - -/datum/pipeline/New() - START_PROCESSING(SSprocessing, src) - -/datum/pipeline/Destroy() - STOP_PROCESSING(SSprocessing, src) - QDEL_NULL(network) - - if(air && air.volume) - temporarily_store_air() - QDEL_NULL(air) - for(var/obj/machinery/atmospherics/pipe/P in members) - P.parent = null - leaks.Cut() - members.Cut() - edges.Cut() - . = ..() - -/datum/pipeline/Process()//This use to be called called from the pipe networks - //Check to see if pressure is within acceptable limits - var/pressure = air.return_pressure() - if(pressure > maximum_pressure) - for(var/obj/machinery/atmospherics/pipe/member in members) - if(!member.check_pressure(pressure)) - members.Remove(member) - break //Only delete 1 pipe per process - -/datum/pipeline/proc/temporarily_store_air() - //Update individual gas_mixtures by volume ratio - - for(var/obj/machinery/atmospherics/pipe/member in members) - member.air_temporary = new - member.air_temporary.copy_from(air) - member.air_temporary.volume = member.volume - member.air_temporary.multiply(member.volume / air.volume) - -/datum/pipeline/proc/build_pipeline(obj/machinery/atmospherics/pipe/base) - air = new - - var/list/possible_expansions = list(base) - members = list(base) - edges = list() - - var/volume = base.volume - base.parent = src - maximum_pressure = base.maximum_pressure - - if(base.air_temporary) - air = base.air_temporary - base.air_temporary = null - else - air = new - - if(base.leaking) - leaks |= base - - while(possible_expansions.len>0) - for(var/obj/machinery/atmospherics/pipe/borderline in possible_expansions) - - var/list/result = borderline.pipeline_expansion() - var/edge_check = result.len - - if(result.len>0) - for(var/obj/machinery/atmospherics/pipe/item in result) - if(item.in_stasis) - continue - if(!members.Find(item)) - members += item - possible_expansions += item - - volume += item.volume - item.parent = src - - maximum_pressure = min(maximum_pressure, item.maximum_pressure) - - if(item.air_temporary) - air.merge(item.air_temporary) - - if(item.leaking) - leaks |= item - - edge_check-- - - if(edge_check>0) - edges += borderline - - possible_expansions -= borderline - - air.volume = volume - -/datum/pipeline/proc/network_expand(datum/pipe_network/new_network, obj/machinery/atmospherics/pipe/reference) - - if(new_network.line_members.Find(src)) - return 0 - - new_network.line_members += src - - network = new_network - network.leaks |= leaks - - for(var/obj/machinery/atmospherics/pipe/edge in edges) - for(var/obj/machinery/atmospherics/result in edge.pipeline_expansion()) - if(!istype(result,/obj/machinery/atmospherics/pipe) && (result!=reference)) - result.network_expand(new_network, edge) - - - return 1 - -/datum/pipeline/proc/return_network(obj/machinery/atmospherics/reference) - if(!network) - network = new /datum/pipe_network() - network.build_network(src, null) - //technically passing these parameters should not be allowed - //however pipe_network.build_network(..) and pipeline.network_extend(...) - // were setup to properly handle this case - - return network - -/datum/pipeline/proc/mingle_with_turf(turf/simulated/target, mingle_volume) - var/datum/gas_mixture/air_sample = air.remove_ratio(mingle_volume/air.volume) - air_sample.volume = mingle_volume - - if(istype(target) && target.zone) - //Have to consider preservation of group statuses - var/datum/gas_mixture/turf_copy = new - - turf_copy.copy_from(target.zone.air) - turf_copy.volume = target.zone.air.volume //Copy a good representation of the turf from parent group - - equalize_gases(list(air_sample, turf_copy)) - air.merge(air_sample) - - turf_copy.subtract(target.zone.air) - - target.zone.air.merge(turf_copy) - - else - var/datum/gas_mixture/turf_air = target.return_air() - - equalize_gases(list(air_sample, turf_air)) - air.merge(air_sample) - //turf_air already modified by equalize_gases() - - if(network) - network.update = 1 - -/datum/pipeline/proc/temperature_interact(turf/target, share_volume, thermal_conductivity) - var/total_heat_capacity = air.heat_capacity() - var/partial_heat_capacity = total_heat_capacity*(share_volume/air.volume) - - if(istype(target, /turf/simulated)) - var/turf/simulated/modeled_location = target - - if(modeled_location.blocks_air) - - if((modeled_location.heat_capacity>0) && (partial_heat_capacity>0)) - var/delta_temperature = air.temperature - modeled_location.temperature - - var/heat = thermal_conductivity*delta_temperature* \ - (partial_heat_capacity*modeled_location.heat_capacity/(partial_heat_capacity+modeled_location.heat_capacity)) - - air.temperature -= heat/total_heat_capacity - modeled_location.temperature += heat/modeled_location.heat_capacity - - else - var/delta_temperature = 0 - var/sharer_heat_capacity = 0 - - if(modeled_location.zone) - delta_temperature = (air.temperature - modeled_location.zone.air.temperature) - sharer_heat_capacity = modeled_location.zone.air.heat_capacity() - else - delta_temperature = (air.temperature - modeled_location.air.temperature) - sharer_heat_capacity = modeled_location.air.heat_capacity() - - var/self_temperature_delta = 0 - var/sharer_temperature_delta = 0 - - if((sharer_heat_capacity>0) && (partial_heat_capacity>0)) - var/heat = thermal_conductivity*delta_temperature* \ - (partial_heat_capacity*sharer_heat_capacity/(partial_heat_capacity+sharer_heat_capacity)) - - self_temperature_delta = -heat/total_heat_capacity - sharer_temperature_delta = heat/sharer_heat_capacity - else - return 1 - - air.temperature += self_temperature_delta - - if(modeled_location.zone) - modeled_location.zone.air.temperature += sharer_temperature_delta/modeled_location.zone.air.group_multiplier - else - modeled_location.air.temperature += sharer_temperature_delta - - - else - if((target.heat_capacity>0) && (partial_heat_capacity>0)) - var/delta_temperature = air.temperature - target.temperature - - var/heat = thermal_conductivity*delta_temperature* \ - (partial_heat_capacity*target.heat_capacity/(partial_heat_capacity+target.heat_capacity)) - - air.temperature -= heat/total_heat_capacity - if(network) - network.update = 1 - -//surface must be the surface area in m^2 -/datum/pipeline/proc/radiate_heat_to_space(surface, thermal_conductivity) - var/gas_density = air.total_moles/air.volume - thermal_conductivity *= min(gas_density / ( RADIATOR_OPTIMUM_PRESSURE/(R_IDEAL_GAS_EQUATION*GAS_CRITICAL_TEMPERATURE) ), 1) //mult by density ratio - - var/heat_gain = get_thermal_radiation(air.temperature, surface, RADIATOR_EXPOSED_SURFACE_AREA_RATIO, thermal_conductivity) - - air.add_thermal_energy(heat_gain) - if(network) - network.update = 1 - -//Returns the amount of heat gained while in space due to thermal radiation (usually a negative value) -//surface - the surface area in m^2 -//exposed_surface_ratio - the proportion of the surface that is exposed to sunlight -//thermal_conductivity - a multipler on the heat transfer rate. See OPEN_HEAT_TRANSFER_COEFFICIENT and friends -/proc/get_thermal_radiation(var/surface_temperature, var/surface, var/exposed_surface_ratio, var/thermal_conductivity) - //*** Gain heat from sunlight, then lose heat from radiation. - - // We only get heat from the star on the exposed surface area. - // If the HE pipes gain more energy from AVERAGE_SOLAR_RADIATION than they can radiate, then they have a net heat increase. - . = AVERAGE_SOLAR_RADIATION * (exposed_surface_ratio * surface) * thermal_conductivity - - // Previously, the temperature would enter equilibrium at 26C or 294K. - // Only would happen if both sides (all 2 square meters of surface area) were exposed to sunlight. We now assume it aligned edge on. - // It currently should stabilise at 129.6K or -143.6C - . -= surface * STEFAN_BOLTZMANN_CONSTANT * thermal_conductivity * (surface_temperature - COSMIC_RADIATION_TEMPERATURE) ** 4 \ No newline at end of file diff --git a/code/modules/atmospherics/he_pipes.dm b/code/modules/atmospherics/he_pipes.dm deleted file mode 100644 index 66b8b0a9a6e8e..0000000000000 --- a/code/modules/atmospherics/he_pipes.dm +++ /dev/null @@ -1,142 +0,0 @@ - -/obj/machinery/atmospherics/pipe/simple/heat_exchanging - icon = 'icons/atmos/heat.dmi' - icon_state = "intact" - pipe_icon = "hepipe" - color = "#404040" - level = 2 - connect_types = CONNECT_TYPE_HE - var/initialize_directions_he - var/surface = 2 //surface area in m^2 - var/icon_temperature = T20C //stop small changes in temperature causing an icon refresh - build_icon_state = "he" - - minimum_temperature_difference = 20 - thermal_conductivity = OPEN_HEAT_TRANSFER_COEFFICIENT - - maximum_pressure = 360*ONE_ATMOSPHERE - fatigue_pressure = 300*ONE_ATMOSPHERE - alert_pressure = 360*ONE_ATMOSPHERE - - can_buckle = 1 - buckle_lying = 1 - -/obj/machinery/atmospherics/pipe/simple/heat_exchanging/Initialize() - . = ..() - color = "#404040" //we don't make use of the fancy overlay system for colours, use this to set the default. - -/obj/machinery/atmospherics/pipe/simple/heat_exchanging/set_dir(new_dir) - ..() - initialize_directions_he = initialize_directions // The auto-detection from /pipe is good enough for a simple HE pipe - -/obj/machinery/atmospherics/pipe/simple/heat_exchanging/atmos_init() - ..() - var/node1_dir - var/node2_dir - - for(var/direction in GLOB.cardinal) - if(direction&initialize_directions_he) - if (!node1_dir) - node1_dir = direction - else if (!node2_dir) - node2_dir = direction - - for(var/obj/machinery/atmospherics/pipe/simple/heat_exchanging/target in get_step(src,node1_dir)) - if(target.initialize_directions_he & get_dir(target,src)) - node1 = target - break - for(var/obj/machinery/atmospherics/pipe/simple/heat_exchanging/target in get_step(src,node2_dir)) - if(target.initialize_directions_he & get_dir(target,src)) - node2 = target - break - if(!node1 && !node2) - qdel(src) - return - - update_icon() - -/obj/machinery/atmospherics/pipe/simple/heat_exchanging/Process() - if(!parent) - ..() - else - var/datum/gas_mixture/pipe_air = return_air() - if(istype(loc, /turf/simulated)) - var/environment_temperature = 0 - if(loc:blocks_air) - environment_temperature = loc:temperature - else - var/datum/gas_mixture/environment = loc.return_air() - environment_temperature = environment.temperature - if(abs(environment_temperature-pipe_air.temperature) > minimum_temperature_difference) - parent.temperature_interact(loc, volume, thermal_conductivity) - else if(istype(loc, /turf/space)) - parent.radiate_heat_to_space(surface, 1) - - if(buckled_mob) - var/hc = pipe_air.heat_capacity() - var/avg_temp = (pipe_air.temperature * hc + buckled_mob.bodytemperature * 3500) / (hc + 3500) - pipe_air.temperature = avg_temp - buckled_mob.bodytemperature = avg_temp - - var/heat_limit = 1000 - - var/mob/living/carbon/human/H = buckled_mob - if(istype(H) && H.species) - heat_limit = H.species.heat_level_3 - - if(pipe_air.temperature > heat_limit + 1) - buckled_mob.apply_damage(4 * log(pipe_air.temperature - heat_limit), DAMAGE_BURN, BP_CHEST, used_weapon = "Excessive Heat") - - //fancy radiation glowing - if(pipe_air.temperature && (icon_temperature > 500 || pipe_air.temperature > 500)) //start glowing at 500K - if(abs(pipe_air.temperature - icon_temperature) > 10) - icon_temperature = pipe_air.temperature - - var/h_r = heat2color_r(icon_temperature) - var/h_g = heat2color_g(icon_temperature) - var/h_b = heat2color_b(icon_temperature) - - if(icon_temperature < 2000) //scale up overlay until 2000K - var/scale = (icon_temperature - 500) / 1500 - h_r = 64 + (h_r - 64)*scale - h_g = 64 + (h_g - 64)*scale - h_b = 64 + (h_b - 64)*scale - - animate(src, color = rgb(h_r, h_g, h_b), time = 20, easing = SINE_EASING) - - - - -/obj/machinery/atmospherics/pipe/simple/heat_exchanging/junction - icon = 'icons/atmos/junction.dmi' - icon_state = "intact" - pipe_icon = "hejunction" - level = 2 - connect_types = CONNECT_TYPE_REGULAR|CONNECT_TYPE_HE|CONNECT_TYPE_FUEL - build_icon_state = "junction" - -// Doubling up on initialize_directions is necessary to allow HE pipes to connect -/obj/machinery/atmospherics/pipe/simple/heat_exchanging/junction/set_dir(new_dir) - ..() - initialize_directions_he = dir - -/obj/machinery/atmospherics/pipe/simple/heat_exchanging/junction/atmos_init() - ..() - // Only check back side for normal pipes - for(var/obj/machinery/atmospherics/target in get_step(src,GLOB.flip_dir[src.dir])) - if(target.initialize_directions & get_dir(target,src)) - // Snowflake check; keeps back from connecting to HE pipes - if(!istype(target,/obj/machinery/atmospherics/pipe/simple/heat_exchanging)) - node1 = target - break - // Only check front side for HE pipes - for(var/obj/machinery/atmospherics/pipe/simple/heat_exchanging/target in get_step(src,initialize_directions_he)) - if(target.initialize_directions_he & get_dir(target,src)) - node2 = target - break - - if(!node1 && !node2) - qdel(src) - return - - update_icon() diff --git a/code/modules/atmospherics/pipes.dm b/code/modules/atmospherics/pipes.dm deleted file mode 100644 index dfccf1e94f9d7..0000000000000 --- a/code/modules/atmospherics/pipes.dm +++ /dev/null @@ -1,1260 +0,0 @@ -#define SOUND_ID "pipe_leakage" - -/obj/machinery/atmospherics/pipe - - var/datum/gas_mixture/air_temporary // used when reconstructing a pipeline that broke - var/datum/pipeline/parent - var/volume = 0 - var/leaking = 0 // Do not set directly, use set_leaking(TRUE/FALSE) - use_power = POWER_USE_OFF - uncreated_component_parts = null // No apc connection - - var/maximum_pressure = 210 * ONE_ATMOSPHERE - var/fatigue_pressure = 170 * ONE_ATMOSPHERE - var/alert_pressure = 170 * ONE_ATMOSPHERE - var/in_stasis = 0 - //minimum pressure before check_pressure(...) should be called - var/obj/machinery/clamp/clamp // Linked stasis clamp - - can_buckle = 1 - buckle_require_restraints = 1 - buckle_lying = -1 - var/datum/sound_token/sound_token - build_icon_state = "simple" - build_icon = 'icons/obj/pipe-item.dmi' - pipe_class = PIPE_CLASS_BINARY - atom_flags = ATOM_FLAG_CAN_BE_PAINTED - -/obj/machinery/atmospherics/pipe/drain_power() - return -1 - -/obj/machinery/atmospherics/pipe/Initialize() - . = ..() - if(istype(get_turf(src), /turf/simulated/wall) || istype(get_turf(src), /turf/simulated/shuttle/wall) || istype(get_turf(src), /turf/unsimulated/wall)) - level = 1 - -/obj/machinery/atmospherics/pipe/hides_under_flooring() - return level != 2 - -/obj/machinery/atmospherics/pipe/proc/set_leaking(var/new_leaking) - if(new_leaking && !leaking) - START_PROCESSING_MACHINE(src, MACHINERY_PROCESS_SELF) - leaking = TRUE - if(parent) - parent.leaks |= src - if(parent.network) - parent.network.leaks |= src - else if (!new_leaking && leaking) - update_sound(0) - STOP_PROCESSING_MACHINE(src, MACHINERY_PROCESS_SELF) - leaking = FALSE - if(parent) - parent.leaks -= src - if(parent.network) - parent.network.leaks -= src - -/obj/machinery/atmospherics/pipe/proc/update_sound(var/playing) - if(playing && !sound_token) - sound_token = GLOB.sound_player.PlayLoopingSound(src, SOUND_ID, "sound/machines/pipeleak.ogg", volume = 8, range = 3, falloff = 1, prefer_mute = TRUE) - else if(!playing && sound_token) - QDEL_NULL(sound_token) - -/obj/machinery/atmospherics/pipe/proc/pipeline_expansion() - return null - -/obj/machinery/atmospherics/pipe/proc/check_pressure(pressure) - //Return 1 if parent should continue checking other pipes - //Return null if parent should stop checking other pipes. Recall: qdel(src) will by default return null - - return 1 - -/obj/machinery/atmospherics/pipe/return_air() - if(!parent) - parent = new /datum/pipeline() - parent.build_pipeline(src) - - return parent.air - -/obj/machinery/atmospherics/pipe/build_network() - if(!parent) - parent = new /datum/pipeline() - parent.build_pipeline(src) - - return parent.return_network() - -/obj/machinery/atmospherics/pipe/network_expand(datum/pipe_network/new_network, obj/machinery/atmospherics/pipe/reference) - if(!parent) - parent = new /datum/pipeline() - parent.build_pipeline(src) - - return parent.network_expand(new_network, reference) - -/obj/machinery/atmospherics/pipe/return_network(obj/machinery/atmospherics/reference) - if(!parent) - parent = new /datum/pipeline() - parent.build_pipeline(src) - - return parent.return_network(reference) - -/obj/machinery/atmospherics/pipe/Destroy() - QDEL_NULL(parent) - QDEL_NULL(sound_token) - if (clamp) - clamp.detach() - if(air_temporary) - loc.assume_air(air_temporary) - - . = ..() - -/obj/machinery/atmospherics/pipe/attackby(var/obj/item/W as obj, var/mob/user as mob) - if (istype(src, /obj/machinery/atmospherics/unary/tank)) - return ..() - if (istype(src, /obj/machinery/atmospherics/pipe/vent)) - return ..() - - if(isWrench(W)) - var/turf/T = src.loc - if (level==1 && isturf(T) && !T.is_plating()) - to_chat(user, "You must remove the plating first.") - return 1 - - if (clamp) - to_chat(user, SPAN_WARNING("You must remove \the [clamp] first.")) - return TRUE - - var/datum/gas_mixture/int_air = return_air() - var/datum/gas_mixture/env_air = loc.return_air() - - if ((int_air.return_pressure()-env_air.return_pressure()) > 2*ONE_ATMOSPHERE) - to_chat(user, "You cannot unwrench \the [src], it is too exerted due to internal pressure.") - add_fingerprint(user) - return 1 - - playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1) - to_chat(user, "You begin to unfasten \the [src]...") - - if (do_after(user, 4 SECONDS, src, DO_PUBLIC_UNIQUE)) - if (clamp) - to_chat(user, SPAN_WARNING("You must remove \the [clamp] first.")) - return TRUE - - user.visible_message("\The [user] unfastens \the [src].", "You have unfastened \the [src].", "You hear a ratchet.") - - new /obj/item/pipe(loc, src) - - for (var/obj/machinery/meter/meter in T) - if (meter.target == src) - meter.dismantle() - qdel(src) - -/obj/machinery/atmospherics/get_color() - return pipe_color - -/obj/machinery/atmospherics/set_color(var/new_color) - pipe_color = new_color - update_icon() - -/obj/machinery/atmospherics/pipe/color_cache_name(var/obj/machinery/atmospherics/node) - if(istype(src, /obj/machinery/atmospherics/unary/tank)) - return ..() - - if(istype(node, /obj/machinery/atmospherics/pipe/manifold) || istype(node, /obj/machinery/atmospherics/pipe/manifold4w)) - if(pipe_color == node.pipe_color) - return node.pipe_color - else - return null - else if(istype(node, /obj/machinery/atmospherics/pipe/simple)) - return node.pipe_color - else - return pipe_color - -/obj/machinery/atmospherics/pipe/simple - icon = 'icons/atmos/pipes.dmi' - icon_state = "" - var/pipe_icon = "" //what kind of pipe it is and from which dmi is the icon manager getting its icons, "" for simple pipes, "hepipe" for HE pipes, "hejunction" for HE junctions - name = "pipe" - desc = "A one meter section of regular pipe." - - volume = ATMOS_DEFAULT_VOLUME_PIPE - - dir = SOUTH - initialize_directions = SOUTH|NORTH - - var/minimum_temperature_difference = 300 - var/thermal_conductivity = 0 //WALL_HEAT_TRANSFER_COEFFICIENT No - - level = 1 - - rotate_class = PIPE_ROTATE_TWODIR - connect_dir_type = SOUTH | NORTH // Overridden if dir is not a cardinal for bent pipes. For straight pipes this is correct. - -/obj/machinery/atmospherics/pipe/simple/Initialize() - . = ..() - // Pipe colors and icon states are handled by an image cache - so color and icon should - // be null. For mapping purposes color is defined in the object definitions. - icon = null - alpha = 255 - -/obj/machinery/atmospherics/pipe/simple/hide(var/i) - if(istype(loc, /turf/simulated)) - set_invisibility(i ? 101 : 0) - update_icon() - -/obj/machinery/atmospherics/pipe/simple/Process() - if(!parent) //This should cut back on the overhead calling build_network thousands of times per cycle - ..() - else if(leaking) - parent.mingle_with_turf(loc, volume) - var/air = parent.air && parent.air.return_pressure() - if(!sound_token && air) - update_sound(1) - else if(sound_token && !air) - update_sound(0) - else - . = PROCESS_KILL - -/obj/machinery/atmospherics/pipe/simple/check_pressure(pressure) - // Don't ask me, it happened somehow. - if (!istype(loc, /turf)) - return 1 - - var/datum/gas_mixture/environment = loc.return_air() - - var/pressure_difference = pressure - environment.return_pressure() - - if(pressure_difference > maximum_pressure) - burst() - - else if(pressure_difference > fatigue_pressure) - //TODO: leak to turf, doing pfshhhhh - if(prob(5)) - burst() - - else return 1 - -/obj/machinery/atmospherics/pipe/simple/proc/burst() - ASSERT(parent) - parent.temporarily_store_air() - src.visible_message("\The [src] bursts!"); - playsound(src.loc, 'sound/effects/bang.ogg', 25, 1) - var/datum/effect/effect/system/smoke_spread/smoke = new - smoke.set_up(1,0, src.loc, 0) - smoke.start() - qdel(src) - -/obj/machinery/atmospherics/pipe/simple/Destroy() - if(node1) - node1.disconnect(src) - node1 = null - if(node2) - node2.disconnect(src) - node2 = null - . = ..() - -/obj/machinery/atmospherics/pipe/simple/pipeline_expansion() - return list(node1, node2) - -/obj/machinery/atmospherics/pipe/simple/set_color(var/new_color) - ..() - //for updating connected atmos device pipes (i.e. vents, manifolds, etc) - if(node1) - node1.update_underlays() - if(node2) - node2.update_underlays() - -/obj/machinery/atmospherics/pipe/simple/on_update_icon(var/safety = 0) - if(!atmos_initalized) - return - if(!check_icon_cache()) - return - - alpha = 255 - - overlays.Cut() - - if(!node1 && !node2) - var/turf/T = get_turf(src) - new /obj/item/pipe(loc, src) - for (var/obj/machinery/meter/meter in T) - if (meter.target == src) - meter.dismantle() - qdel(src) - else if(node1 && node2) - overlays += icon_manager.get_atmos_icon("pipe", , pipe_color, "[pipe_icon]intact[icon_connect_type]") - set_leaking(FALSE) - else - overlays += icon_manager.get_atmos_icon("pipe", , pipe_color, "[pipe_icon]exposed[node1?1:0][node2?1:0][icon_connect_type]") - set_leaking(TRUE) - -/obj/machinery/atmospherics/pipe/simple/update_underlays() - return - -/obj/machinery/atmospherics/pipe/simple/atmos_init() - ..() - var/node1_dir - var/node2_dir - - for(var/direction in GLOB.cardinal) - if(direction&initialize_directions) - if (!node1_dir) - node1_dir = direction - else if (!node2_dir) - node2_dir = direction - - for(var/obj/machinery/atmospherics/target in get_step(src,node1_dir)) - if(target.initialize_directions & get_dir(target,src)) - if (check_connect_types(target,src)) - node1 = target - break - for(var/obj/machinery/atmospherics/target in get_step(src,node2_dir)) - if(target.initialize_directions & get_dir(target,src)) - if (check_connect_types(target,src)) - node2 = target - break - - if(!node1 && !node2) - qdel(src) - return - - var/turf/T = loc - if(level == 1 && !T.is_plating()) hide(1) - update_icon() - -/obj/machinery/atmospherics/pipe/simple/disconnect(obj/machinery/atmospherics/reference) - if(reference == node1) - if(istype(node1, /obj/machinery/atmospherics/pipe)) - qdel(parent) - node1 = null - - if(reference == node2) - if(istype(node2, /obj/machinery/atmospherics/pipe)) - qdel(parent) - node2 = null - - update_icon() - - return null - -/obj/machinery/atmospherics/pipe/simple/visible - icon_state = "intact" - level = 2 - -/obj/machinery/atmospherics/pipe/simple/visible/scrubbers - name = "Scrubbers pipe" - desc = "A one meter section of scrubbers pipe." - icon_state = "intact-scrubbers" - connect_types = CONNECT_TYPE_SCRUBBER - icon_connect_type = "-scrubbers" - color = PIPE_COLOR_RED - -/obj/machinery/atmospherics/pipe/simple/visible/supply - name = "Air supply pipe" - desc = "A one meter section of supply pipe." - icon_state = "intact-supply" - connect_types = CONNECT_TYPE_SUPPLY - icon_connect_type = "-supply" - color = PIPE_COLOR_BLUE - -/obj/machinery/atmospherics/pipe/simple/visible/yellow - color = PIPE_COLOR_YELLOW - -/obj/machinery/atmospherics/pipe/simple/visible/cyan - color = PIPE_COLOR_CYAN - -/obj/machinery/atmospherics/pipe/simple/visible/green - color = PIPE_COLOR_GREEN - -/obj/machinery/atmospherics/pipe/simple/visible/black - color = PIPE_COLOR_BLACK - -/obj/machinery/atmospherics/pipe/simple/visible/red - color = PIPE_COLOR_RED - -/obj/machinery/atmospherics/pipe/simple/visible/blue - color = PIPE_COLOR_BLUE - -/obj/machinery/atmospherics/pipe/simple/visible/fuel - name = "Fuel pipe" - color = PIPE_COLOR_ORANGE - maximum_pressure = 420*ONE_ATMOSPHERE - fatigue_pressure = 350*ONE_ATMOSPHERE - alert_pressure = 350*ONE_ATMOSPHERE - connect_types = CONNECT_TYPE_FUEL - -/obj/machinery/atmospherics/pipe/simple/hidden - icon_state = "intact" - level = 1 - alpha = 128 //set for the benefit of mapping - this is reset to opaque when the pipe is spawned in game - -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers - name = "Scrubbers pipe" - desc = "A one meter section of scrubbers pipe." - icon_state = "intact-scrubbers" - connect_types = CONNECT_TYPE_SCRUBBER - icon_connect_type = "-scrubbers" - color = PIPE_COLOR_RED - -/obj/machinery/atmospherics/pipe/simple/hidden/supply - name = "Air supply pipe" - desc = "A one meter section of supply pipe." - icon_state = "intact-supply" - connect_types = CONNECT_TYPE_SUPPLY - icon_connect_type = "-supply" - color = PIPE_COLOR_BLUE - -/obj/machinery/atmospherics/pipe/simple/hidden/yellow - color = PIPE_COLOR_YELLOW - -/obj/machinery/atmospherics/pipe/simple/hidden/cyan - color = PIPE_COLOR_CYAN - -/obj/machinery/atmospherics/pipe/simple/hidden/green - color = PIPE_COLOR_GREEN - -/obj/machinery/atmospherics/pipe/simple/hidden/black - color = PIPE_COLOR_BLACK - -/obj/machinery/atmospherics/pipe/simple/hidden/red - color = PIPE_COLOR_RED - -/obj/machinery/atmospherics/pipe/simple/hidden/blue - color = PIPE_COLOR_BLUE - -/obj/machinery/atmospherics/pipe/simple/hidden/fuel - name = "Fuel pipe" - color = PIPE_COLOR_ORANGE - maximum_pressure = 420*ONE_ATMOSPHERE - fatigue_pressure = 350*ONE_ATMOSPHERE - alert_pressure = 350*ONE_ATMOSPHERE - connect_types = CONNECT_TYPE_FUEL - -/obj/machinery/atmospherics/pipe/manifold - icon = 'icons/atmos/manifold.dmi' - icon_state = "" - name = "pipe manifold" - desc = "A manifold composed of regular pipes." - volume = ATMOS_DEFAULT_VOLUME_PIPE * 1.5 - - dir = SOUTH - initialize_directions = EAST|NORTH|WEST - - var/obj/machinery/atmospherics/node3 - build_icon_state = "manifold" - level = 1 - - pipe_class = PIPE_CLASS_TRINARY - connect_dir_type = NORTH | EAST | WEST - -/obj/machinery/atmospherics/pipe/manifold/Initialize() - . = ..() - alpha = 255 - icon = null - -/obj/machinery/atmospherics/pipe/manifold/hide(var/i) - if(istype(loc, /turf/simulated)) - set_invisibility(i ? 101 : 0) - update_icon() - -/obj/machinery/atmospherics/pipe/manifold/pipeline_expansion() - return list(node1, node2, node3) - -/obj/machinery/atmospherics/pipe/manifold/Process() - if(!parent) - ..() - else - . = PROCESS_KILL - -/obj/machinery/atmospherics/pipe/manifold/Destroy() - if(node1) - node1.disconnect(src) - node1 = null - if(node2) - node2.disconnect(src) - node2 = null - if(node3) - node3.disconnect(src) - node3 = null - - . = ..() - -/obj/machinery/atmospherics/pipe/manifold/disconnect(obj/machinery/atmospherics/reference) - if(reference == node1) - if(istype(node1, /obj/machinery/atmospherics/pipe)) - qdel(parent) - node1 = null - - if(reference == node2) - if(istype(node2, /obj/machinery/atmospherics/pipe)) - qdel(parent) - node2 = null - - if(reference == node3) - if(istype(node3, /obj/machinery/atmospherics/pipe)) - qdel(parent) - node3 = null - - update_icon() - - ..() - -/obj/machinery/atmospherics/pipe/manifold/set_color(var/new_color) - ..() - //for updating connected atmos device pipes (i.e. vents, manifolds, etc) - if(node1) - node1.update_underlays() - if(node2) - node2.update_underlays() - if(node3) - node3.update_underlays() - -/obj/machinery/atmospherics/pipe/manifold/on_update_icon(var/safety = 0) - if(!atmos_initalized) - return - if(!check_icon_cache()) - return - - set_leaking(!(node1 && node2 && node3)) - alpha = 255 - - if(!node1 && !node2 && !node3) - var/turf/T = get_turf(src) - new /obj/item/pipe(loc, src) - for (var/obj/machinery/meter/meter in T) - if (meter.target == src) - meter.dismantle() - qdel(src) - else - overlays.Cut() - overlays += icon_manager.get_atmos_icon("manifold", , pipe_color, "core" + icon_connect_type) - overlays += icon_manager.get_atmos_icon("manifold", , , "clamps" + icon_connect_type) - underlays.Cut() - - var/turf/T = get_turf(src) - var/list/directions = list(NORTH, SOUTH, EAST, WEST) - var/node1_direction = get_dir(src, node1) - var/node2_direction = get_dir(src, node2) - var/node3_direction = get_dir(src, node3) - - directions -= dir - - directions -= add_underlay(T,node1,node1_direction,icon_connect_type) - directions -= add_underlay(T,node2,node2_direction,icon_connect_type) - directions -= add_underlay(T,node3,node3_direction,icon_connect_type) - - for(var/D in directions) - add_underlay(T,,D,icon_connect_type) - - -/obj/machinery/atmospherics/pipe/manifold/update_underlays() - ..() - update_icon() - -/obj/machinery/atmospherics/pipe/manifold/atmos_init() - ..() - var/connect_directions = (NORTH|SOUTH|EAST|WEST)&(~dir) - - for(var/direction in GLOB.cardinal) - if(direction&connect_directions) - for(var/obj/machinery/atmospherics/target in get_step(src,direction)) - if(target.initialize_directions & get_dir(target,src)) - if (check_connect_types(target,src)) - node1 = target - connect_directions &= ~direction - break - if (node1) - break - - - for(var/direction in GLOB.cardinal) - if(direction&connect_directions) - for(var/obj/machinery/atmospherics/target in get_step(src,direction)) - if(target.initialize_directions & get_dir(target,src)) - if (check_connect_types(target,src)) - node2 = target - connect_directions &= ~direction - break - if (node2) - break - - - for(var/direction in GLOB.cardinal) - if(direction&connect_directions) - for(var/obj/machinery/atmospherics/target in get_step(src,direction)) - if(target.initialize_directions & get_dir(target,src)) - if (check_connect_types(target,src)) - node3 = target - connect_directions &= ~direction - break - if (node3) - break - - if(!node1 && !node2 && !node3) - qdel(src) - return - - var/turf/T = get_turf(src) - if(level == 1 && !T.is_plating()) hide(1) - update_icon() - -/obj/machinery/atmospherics/pipe/manifold/visible - icon_state = "map" - level = 2 - -/obj/machinery/atmospherics/pipe/manifold/visible/scrubbers - name="Scrubbers pipe manifold" - desc = "A manifold composed of scrubbers pipes." - icon_state = "map-scrubbers" - connect_types = CONNECT_TYPE_SCRUBBER - icon_connect_type = "-scrubbers" - color = PIPE_COLOR_RED - -/obj/machinery/atmospherics/pipe/manifold/visible/supply - name="Air supply pipe manifold" - desc = "A manifold composed of supply pipes." - icon_state = "map-supply" - connect_types = CONNECT_TYPE_SUPPLY - icon_connect_type = "-supply" - color = PIPE_COLOR_BLUE - -/obj/machinery/atmospherics/pipe/manifold/visible/yellow - color = PIPE_COLOR_YELLOW - -/obj/machinery/atmospherics/pipe/manifold/visible/cyan - color = PIPE_COLOR_CYAN - -/obj/machinery/atmospherics/pipe/manifold/visible/green - color = PIPE_COLOR_GREEN - -/obj/machinery/atmospherics/pipe/manifold/visible/black - color = PIPE_COLOR_BLACK - -/obj/machinery/atmospherics/pipe/manifold/visible/red - color = PIPE_COLOR_RED - -/obj/machinery/atmospherics/pipe/manifold/visible/blue - color = PIPE_COLOR_BLUE - -/obj/machinery/atmospherics/pipe/manifold/visible/fuel - name = "Fuel pipe manifold" - color = PIPE_COLOR_ORANGE - connect_types = CONNECT_TYPE_FUEL - -/obj/machinery/atmospherics/pipe/manifold/hidden - icon_state = "map" - level = 1 - alpha = 128 //set for the benefit of mapping - this is reset to opaque when the pipe is spawned in game - -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers - name="Scrubbers pipe manifold" - desc = "A manifold composed of scrubbers pipes." - icon_state = "map-scrubbers" - connect_types = CONNECT_TYPE_SCRUBBER - icon_connect_type = "-scrubbers" - color = PIPE_COLOR_RED - -/obj/machinery/atmospherics/pipe/manifold/hidden/supply - name="Air supply pipe manifold" - desc = "A manifold composed of supply pipes." - icon_state = "map-supply" - connect_types = CONNECT_TYPE_SUPPLY - icon_connect_type = "-supply" - color = PIPE_COLOR_BLUE - -/obj/machinery/atmospherics/pipe/manifold/hidden/yellow - color = PIPE_COLOR_YELLOW - -/obj/machinery/atmospherics/pipe/manifold/hidden/cyan - color = PIPE_COLOR_CYAN - -/obj/machinery/atmospherics/pipe/manifold/hidden/green - color = PIPE_COLOR_GREEN - -/obj/machinery/atmospherics/pipe/manifold/hidden/black - color = PIPE_COLOR_BLACK - -/obj/machinery/atmospherics/pipe/manifold/hidden/red - color = PIPE_COLOR_RED - -/obj/machinery/atmospherics/pipe/manifold/hidden/blue - color = PIPE_COLOR_BLUE - -/obj/machinery/atmospherics/pipe/manifold/hidden/fuel - name = "Fuel pipe manifold" - color = PIPE_COLOR_ORANGE - connect_types = CONNECT_TYPE_FUEL - -/obj/machinery/atmospherics/pipe/manifold4w - icon = 'icons/atmos/manifold.dmi' - icon_state = "" - name = "4-way pipe manifold" - desc = "A manifold composed of regular pipes." - volume = ATMOS_DEFAULT_VOLUME_PIPE * 2 - - dir = SOUTH - initialize_directions = NORTH|SOUTH|EAST|WEST - - var/obj/machinery/atmospherics/node3 - var/obj/machinery/atmospherics/node4 - build_icon_state = "manifold4w" - level = 1 - - pipe_class = PIPE_CLASS_QUATERNARY - rotate_class = PIPE_ROTATE_ONEDIR - connect_dir_type = NORTH | SOUTH | EAST | WEST - -/obj/machinery/atmospherics/pipe/manifold4w/Initialize() - . = ..() - alpha = 255 - icon = null - -/obj/machinery/atmospherics/pipe/manifold4w/pipeline_expansion() - return list(node1, node2, node3, node4) - -/obj/machinery/atmospherics/pipe/manifold4w/Process() - if(!parent) - ..() - else - . = PROCESS_KILL - -/obj/machinery/atmospherics/pipe/manifold4w/Destroy() - if(node1) - node1.disconnect(src) - node1 = null - if(node2) - node2.disconnect(src) - node2 = null - if(node3) - node3.disconnect(src) - node3 = null - if(node4) - node4.disconnect(src) - node4 = null - - . = ..() - -/obj/machinery/atmospherics/pipe/manifold4w/disconnect(obj/machinery/atmospherics/reference) - if(reference == node1) - if(istype(node1, /obj/machinery/atmospherics/pipe)) - qdel(parent) - node1 = null - - if(reference == node2) - if(istype(node2, /obj/machinery/atmospherics/pipe)) - qdel(parent) - node2 = null - - if(reference == node3) - if(istype(node3, /obj/machinery/atmospherics/pipe)) - qdel(parent) - node3 = null - - if(reference == node4) - if(istype(node4, /obj/machinery/atmospherics/pipe)) - qdel(parent) - node4 = null - - update_icon() - - ..() - -/obj/machinery/atmospherics/pipe/manifold4w/set_color(var/new_color) - ..() - //for updating connected atmos device pipes (i.e. vents, manifolds, etc) - if(node1) - node1.update_underlays() - if(node2) - node2.update_underlays() - if(node3) - node3.update_underlays() - if(node4) - node4.update_underlays() - -/obj/machinery/atmospherics/pipe/manifold4w/on_update_icon(var/safety = 0) - if(!atmos_initalized) - return - if(!check_icon_cache()) - return - - set_leaking(!(node1 && node2 && node3 && node4)) - alpha = 255 - - if(!node1 && !node2 && !node3 && !node4) - var/turf/T = get_turf(src) - new /obj/item/pipe(loc, src) - for (var/obj/machinery/meter/meter in T) - if (meter.target == src) - meter.dismantle() - qdel(src) - else - overlays.Cut() - overlays += icon_manager.get_atmos_icon("manifold", , pipe_color, "4way" + icon_connect_type) - overlays += icon_manager.get_atmos_icon("manifold", , , "clamps_4way" + icon_connect_type) - underlays.Cut() - - /* - var/list/directions = list(NORTH, SOUTH, EAST, WEST) - - - directions -= add_underlay(node1) - directions -= add_underlay(node2) - directions -= add_underlay(node3) - directions -= add_underlay(node4) - - for(var/D in directions) - add_underlay(,D) - */ - - var/turf/T = get_turf(src) - var/list/directions = list(NORTH, SOUTH, EAST, WEST) - var/node1_direction = get_dir(src, node1) - var/node2_direction = get_dir(src, node2) - var/node3_direction = get_dir(src, node3) - var/node4_direction = get_dir(src, node4) - - directions -= dir - - directions -= add_underlay(T,node1,node1_direction,icon_connect_type) - directions -= add_underlay(T,node2,node2_direction,icon_connect_type) - directions -= add_underlay(T,node3,node3_direction,icon_connect_type) - directions -= add_underlay(T,node4,node4_direction,icon_connect_type) - - for(var/D in directions) - add_underlay(T,,D,icon_connect_type) - - -/obj/machinery/atmospherics/pipe/manifold4w/update_underlays() - ..() - update_icon() - -/obj/machinery/atmospherics/pipe/manifold4w/hide(var/i) - if(istype(loc, /turf/simulated)) - set_invisibility(i ? 101 : 0) - update_icon() - -/obj/machinery/atmospherics/pipe/manifold4w/atmos_init() - ..() - for(var/obj/machinery/atmospherics/target in get_step(src,1)) - if(target.initialize_directions & 2) - if (check_connect_types(target,src)) - node1 = target - break - - for(var/obj/machinery/atmospherics/target in get_step(src,2)) - if(target.initialize_directions & 1) - if (check_connect_types(target,src)) - node2 = target - break - - for(var/obj/machinery/atmospherics/target in get_step(src,4)) - if(target.initialize_directions & 8) - if (check_connect_types(target,src)) - node3 = target - break - - for(var/obj/machinery/atmospherics/target in get_step(src,8)) - if(target.initialize_directions & 4) - if (check_connect_types(target,src)) - node4 = target - break - - if(!node1 && !node2 && !node3 && !node4) - qdel(src) - return - - var/turf/T = get_turf(src) - if(level == 1 && !T.is_plating()) hide(1) - update_icon() - -/obj/machinery/atmospherics/pipe/manifold4w/visible - icon_state = "map_4way" - level = 2 - -/obj/machinery/atmospherics/pipe/manifold4w/visible/scrubbers - name="4-way scrubbers pipe manifold" - desc = "A manifold composed of scrubbers pipes." - icon_state = "map_4way-scrubbers" - connect_types = CONNECT_TYPE_SCRUBBER - icon_connect_type = "-scrubbers" - color = PIPE_COLOR_RED - -/obj/machinery/atmospherics/pipe/manifold4w/visible/supply - name="4-way air supply pipe manifold" - desc = "A manifold composed of supply pipes." - icon_state = "map_4way-supply" - connect_types = CONNECT_TYPE_SUPPLY - icon_connect_type = "-supply" - color = PIPE_COLOR_BLUE - -/obj/machinery/atmospherics/pipe/manifold4w/visible/yellow - color = PIPE_COLOR_YELLOW - -/obj/machinery/atmospherics/pipe/manifold4w/visible/cyan - color = PIPE_COLOR_CYAN - -/obj/machinery/atmospherics/pipe/manifold4w/visible/green - color = PIPE_COLOR_GREEN - -/obj/machinery/atmospherics/pipe/manifold4w/visible/black - color = PIPE_COLOR_BLACK - -/obj/machinery/atmospherics/pipe/manifold4w/visible/red - color = PIPE_COLOR_RED - -/obj/machinery/atmospherics/pipe/manifold4w/visible/blue - color = PIPE_COLOR_BLUE - -/obj/machinery/atmospherics/pipe/manifold4w/visible/fuel - name = "4-way fuel pipe manifold" - color = PIPE_COLOR_ORANGE - connect_types = CONNECT_TYPE_FUEL - -/obj/machinery/atmospherics/pipe/manifold4w/hidden - icon_state = "map_4way" - level = 1 - alpha = 128 //set for the benefit of mapping - this is reset to opaque when the pipe is spawned in game - -/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers - name="4-way scrubbers pipe manifold" - desc = "A manifold composed of scrubbers pipes." - icon_state = "map_4way-scrubbers" - connect_types = CONNECT_TYPE_SCRUBBER - icon_connect_type = "-scrubbers" - color = PIPE_COLOR_RED - -/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply - name="4-way air supply pipe manifold" - desc = "A manifold composed of supply pipes." - icon_state = "map_4way-supply" - connect_types = CONNECT_TYPE_SUPPLY - icon_connect_type = "-supply" - color = PIPE_COLOR_BLUE - -/obj/machinery/atmospherics/pipe/manifold4w/hidden/yellow - color = PIPE_COLOR_YELLOW - -/obj/machinery/atmospherics/pipe/manifold4w/hidden/cyan - color = PIPE_COLOR_CYAN - -/obj/machinery/atmospherics/pipe/manifold4w/hidden/green - color = PIPE_COLOR_GREEN - -/obj/machinery/atmospherics/pipe/manifold4w/hidden/black - color = PIPE_COLOR_BLACK - -/obj/machinery/atmospherics/pipe/manifold4w/hidden/red - color = PIPE_COLOR_RED - -/obj/machinery/atmospherics/pipe/manifold4w/hidden/blue - color = PIPE_COLOR_BLUE - -/obj/machinery/atmospherics/pipe/manifold4w/hidden/fuel - name = "4-way fuel pipe manifold" - color = PIPE_COLOR_ORANGE - connect_types = CONNECT_TYPE_FUEL - -/obj/machinery/atmospherics/pipe/cap - name = "pipe endcap" - desc = "An endcap for pipes." - icon = 'icons/atmos/pipes.dmi' - icon_state = "" - level = 2 - volume = 35 - - pipe_class = PIPE_CLASS_UNARY - dir = SOUTH - initialize_directions = SOUTH - build_icon_state = "cap" - - var/obj/machinery/atmospherics/node - -/obj/machinery/atmospherics/pipe/cap/hide(var/i) - if(istype(loc, /turf/simulated)) - set_invisibility(i ? 101 : 0) - update_icon() - -/obj/machinery/atmospherics/pipe/cap/pipeline_expansion() - return list(node) - -/obj/machinery/atmospherics/pipe/cap/Process() - if(!parent) - ..() - else - . = PROCESS_KILL -/obj/machinery/atmospherics/pipe/cap/Destroy() - if(node) - node.disconnect(src) - - . = ..() - -/obj/machinery/atmospherics/pipe/cap/disconnect(obj/machinery/atmospherics/reference) - if(reference == node) - if(istype(node, /obj/machinery/atmospherics/pipe)) - qdel(parent) - node = null - - update_icon() - - ..() - -/obj/machinery/atmospherics/pipe/cap/set_color(var/new_color) - ..() - //for updating connected atmos device pipes (i.e. vents, manifolds, etc) - if(node) - node.update_underlays() - -/obj/machinery/atmospherics/pipe/cap/on_update_icon(var/safety = 0) - if(!check_icon_cache()) - return - - alpha = 255 - - overlays.Cut() - overlays += icon_manager.get_atmos_icon("pipe", , pipe_color, icon_state) - -/obj/machinery/atmospherics/pipe/cap/atmos_init() - ..() - for(var/obj/machinery/atmospherics/target in get_step(src, dir)) - if(target.initialize_directions & get_dir(target,src)) - if (check_connect_types(target,src)) - node = target - break - - var/turf/T = src.loc // hide if turf is not intact - if(level == 1 && !T.is_plating()) hide(1) - update_icon() - -/obj/machinery/atmospherics/pipe/cap/visible - level = 2 - icon_state = "cap" - -/obj/machinery/atmospherics/pipe/cap/visible/scrubbers - name = "scrubbers pipe endcap" - desc = "An endcap for scrubbers pipes." - icon_state = "cap-scrubbers" - connect_types = CONNECT_TYPE_SCRUBBER - icon_connect_type = "-scrubbers" - color = PIPE_COLOR_RED - -/obj/machinery/atmospherics/pipe/cap/visible/supply - name = "supply pipe endcap" - desc = "An endcap for supply pipes." - icon_state = "cap-supply" - connect_types = CONNECT_TYPE_SUPPLY - icon_connect_type = "-supply" - color = PIPE_COLOR_BLUE - -/obj/machinery/atmospherics/pipe/cap/visible/fuel - name = "fuel pipe endcap" - desc = "An endcap for fuel pipes." - color = PIPE_COLOR_ORANGE - connect_types = CONNECT_TYPE_FUEL - -/obj/machinery/atmospherics/pipe/cap/hidden - level = 1 - icon_state = "cap" - alpha = 128 - -/obj/machinery/atmospherics/pipe/cap/hidden/scrubbers - name = "scrubbers pipe endcap" - desc = "An endcap for scrubbers pipes." - icon_state = "cap-scrubbers" - connect_types = CONNECT_TYPE_SCRUBBER - icon_connect_type = "-scrubbers" - color = PIPE_COLOR_RED - -/obj/machinery/atmospherics/pipe/cap/hidden/supply - name = "supply pipe endcap" - desc = "An endcap for supply pipes." - icon_state = "cap-supply" - connect_types = CONNECT_TYPE_SUPPLY - icon_connect_type = "-supply" - color = PIPE_COLOR_BLUE - -/obj/machinery/atmospherics/pipe/cap/hidden/fuel - name = "fuel pipe endcap" - desc = "An endcap for fuel pipes." - color = PIPE_COLOR_ORANGE - connect_types = CONNECT_TYPE_FUEL - -/obj/machinery/atmospherics/pipe/vent - icon = 'icons/obj/atmospherics/pipe_vent.dmi' - icon_state = "intact" - - name = "Vent" - desc = "A large air vent." - - level = 1 - - volume = 250 - - dir = SOUTH - initialize_directions = SOUTH - - var/build_killswitch = 1 - build_icon_state = "uvent" - -/obj/machinery/atmospherics/pipe/vent/high_volume - name = "Larger vent" - volume = 1000 - -/obj/machinery/atmospherics/pipe/vent/Process() - if(!parent) - if(build_killswitch <= 0) - . = PROCESS_KILL - else - build_killswitch-- - ..() - return - else - parent.mingle_with_turf(loc, volume) - -/obj/machinery/atmospherics/pipe/vent/Destroy() - if(node1) - node1.disconnect(src) - - . = ..() - -/obj/machinery/atmospherics/pipe/vent/pipeline_expansion() - return list(node1) - -/obj/machinery/atmospherics/pipe/vent/on_update_icon() - if(node1) - icon_state = "intact" - - set_dir(get_dir(src, node1)) - - else - icon_state = "exposed" - -/obj/machinery/atmospherics/pipe/vent/atmos_init() - ..() - var/connect_direction = dir - - for(var/obj/machinery/atmospherics/target in get_step(src,connect_direction)) - if(target.initialize_directions & get_dir(target,src)) - if (check_connect_types(target,src)) - node1 = target - break - - update_icon() - -/obj/machinery/atmospherics/pipe/vent/disconnect(obj/machinery/atmospherics/reference) - if(reference == node1) - if(istype(node1, /obj/machinery/atmospherics/pipe)) - qdel(parent) - node1 = null - - update_icon() - - return null - -/obj/machinery/atmospherics/pipe/vent/hide(var/i) //to make the little pipe section invisible, the icon changes. - if(node1) - icon_state = "[i == 1 && istype(loc, /turf/simulated) ? "h" : "" ]intact" - set_dir(get_dir(src, node1)) - else - icon_state = "exposed" - - -/obj/machinery/atmospherics/pipe/simple/visible/universal - name="Universal pipe adapter" - desc = "An adapter for regular, supply, scrubbers, and fuel pipes." - connect_types = CONNECT_TYPE_REGULAR|CONNECT_TYPE_SUPPLY|CONNECT_TYPE_SCRUBBER|CONNECT_TYPE_FUEL|CONNECT_TYPE_HE - icon_state = "map_universal" - build_icon_state = "universal" - -/obj/machinery/atmospherics/pipe/simple/visible/universal/on_update_icon(var/safety = 0) - if(!check_icon_cache()) - return - - alpha = 255 - - overlays.Cut() - overlays += icon_manager.get_atmos_icon("pipe", , pipe_color, "universal") - underlays.Cut() - - if (node1) - universal_underlays(node1) - if(node2) - universal_underlays(node2) - else - var/node1_dir = get_dir(node1,src) - universal_underlays(,node1_dir) - else if (node2) - universal_underlays(node2) - else - universal_underlays(,dir) - universal_underlays(null, turn(dir, 180)) - -/obj/machinery/atmospherics/pipe/simple/visible/universal/update_underlays() - ..() - update_icon() - - - -/obj/machinery/atmospherics/pipe/simple/hidden/universal - name="Universal pipe adapter" - desc = "An adapter for regular, supply and scrubbers pipes." - connect_types = CONNECT_TYPE_REGULAR|CONNECT_TYPE_SUPPLY|CONNECT_TYPE_SCRUBBER|CONNECT_TYPE_FUEL|CONNECT_TYPE_HE - icon_state = "map_universal" - -/obj/machinery/atmospherics/pipe/simple/hidden/universal/on_update_icon(var/safety = 0) - if(!check_icon_cache()) - return - - alpha = 255 - - overlays.Cut() - overlays += icon_manager.get_atmos_icon("pipe", , pipe_color, "universal") - underlays.Cut() - - if (node1) - universal_underlays(node1) - if(node2) - universal_underlays(node2) - else - var/node2_dir = turn(get_dir(src,node1),-180) - universal_underlays(,node2_dir) - else if (node2) - universal_underlays(node2) - var/node1_dir = turn(get_dir(src,node2),-180) - universal_underlays(,node1_dir) - else - universal_underlays(,dir) - universal_underlays(,turn(dir, -180)) - -/obj/machinery/atmospherics/pipe/simple/hidden/universal/update_underlays() - ..() - update_icon() - -/obj/machinery/atmospherics/proc/universal_underlays(var/obj/machinery/atmospherics/node, var/direction) - var/turf/T = loc - if(node) - var/node_dir = get_dir(src,node) - if(node.icon_connect_type == "-supply") - add_underlay_adapter(T, , node_dir, "") - add_underlay_adapter(T, node, node_dir, "-supply") - add_underlay_adapter(T, , node_dir, "-scrubbers") - else if (node.icon_connect_type == "-scrubbers") - add_underlay_adapter(T, , node_dir, "") - add_underlay_adapter(T, , node_dir, "-supply") - add_underlay_adapter(T, node, node_dir, "-scrubbers") - else - add_underlay_adapter(T, node, node_dir, "") - add_underlay_adapter(T, , node_dir, "-supply") - add_underlay_adapter(T, , node_dir, "-scrubbers") - else - add_underlay_adapter(T, , direction, "-supply") - add_underlay_adapter(T, , direction, "-scrubbers") - add_underlay_adapter(T, , direction, "") - -/obj/machinery/atmospherics/proc/add_underlay_adapter(var/turf/T, var/obj/machinery/atmospherics/node, var/direction, var/icon_connect_type) //modified from add_underlay, does not make exposed underlays - if(node) - if(!T.is_plating() && node.level == 1 && istype(node, /obj/machinery/atmospherics/pipe)) - underlays += icon_manager.get_atmos_icon("underlay", direction, color_cache_name(node), "down" + icon_connect_type) - else - underlays += icon_manager.get_atmos_icon("underlay", direction, color_cache_name(node), "intact" + icon_connect_type) - else - underlays += icon_manager.get_atmos_icon("underlay", direction, color_cache_name(node), "retracted" + icon_connect_type) - -#undef SOUND_ID diff --git a/code/modules/augment/active.dm b/code/modules/augment/active.dm deleted file mode 100644 index 9dac9ed03138d..0000000000000 --- a/code/modules/augment/active.dm +++ /dev/null @@ -1,44 +0,0 @@ -/* -* Active Augments -* Can be toggled on or off via a UI button -*/ -/obj/item/organ/internal/augment/active - action_button_name = "Activate" - var/obj/item/organ/external/limb - - -/obj/item/organ/internal/augment/active/proc/activate() - - -/obj/item/organ/internal/augment/active/onInstall() - limb = owner.get_organ(parent_organ) - - -/obj/item/organ/internal/augment/active/onRemove() - limb = null - - -/obj/item/organ/internal/augment/active/proc/can_activate() - if (!owner || owner.incapacitated() || !is_usable()) - to_chat(owner, SPAN_WARNING("You can't do that now!")) - return FALSE - return TRUE - - -/obj/item/organ/internal/augment/active/attack_self() - . = ..() - if (.) - activate() - - -/obj/item/organ/internal/augment/active/refresh_action_button() - . = ..() - if (.) - action.button_icon_state = icon_state - if (action.button) - action.button.UpdateIcon() - - -/obj/item/organ/internal/augment/active/Destroy() - limb = null - . = ..() diff --git a/code/modules/augment/active/adaptive_binoculars.dm b/code/modules/augment/active/adaptive_binoculars.dm deleted file mode 100644 index fc93f00bc70e1..0000000000000 --- a/code/modules/augment/active/adaptive_binoculars.dm +++ /dev/null @@ -1,21 +0,0 @@ -/obj/item/organ/internal/augment/active/item/adaptive_binoculars - name = "adaptive binoculars" - augment_slots = AUGMENT_HEAD - icon_state = "adaptive_binoculars" - desc = "Digital glass 'screens' can be deployed over the eyes. At the user's control, their image can be greatly enhanced, providing a view of distant areas." - action_button_name = "Deploy lenses" - origin_tech = list(TECH_DATA = 3, TECH_BIO = 2) - item = /obj/item/clothing/glasses/augment_binoculars - - -/obj/item/organ/internal/augment/active/item/adaptive_binoculars/hidden - augment_flags = AUGMENT_MECHANICAL | AUGMENT_BIOLOGICAL - - -/obj/item/organ/internal/augment/active/item/adaptive_binoculars/emp_act(severity) - . = ..() - if (item?.zoom) - to_chat(owner, SPAN_WARNING("Your eyes fill with static as \the [item.name] malfunction\s!")) - owner.eye_blind += 10 - owner.eye_blurry += 20 - item.unzoom() diff --git a/code/modules/augment/active/armblades.dm b/code/modules/augment/active/armblades.dm deleted file mode 100644 index 5ed7bdad2a3a7..0000000000000 --- a/code/modules/augment/active/armblades.dm +++ /dev/null @@ -1,74 +0,0 @@ -/obj/item/material/armblade - icon_state = "armblade" - item_state = null - name = "armblade" - icon = 'icons/obj/augment.dmi' - applies_material_colour = FALSE - desc = "A handy utility blade for the discerning augmentee. Warranty void if used for cutting." - base_parry_chance = 30 - unbreakable = TRUE - unacidable = TRUE - force_multiplier = 0.2 - sharp = TRUE - edge = TRUE - attack_verb = list("stabbed", "sliced", "cut") - - -/obj/item/organ/internal/augment/active/item/armblade - name = "embedded blade" - desc = "A sturdy housing for a steel utility blade." - action_button_name = "Deploy blade" - icon_state = "armblade" - augment_slots = AUGMENT_ARM - item = /obj/item/material/armblade - augment_flags = AUGMENT_MECHANICAL | AUGMENT_SCANNABLE - - -/obj/item/material/armblade/claws - icon_state = "wolverine" - name = "combat claws" - desc = "These do not grow back." - base_parry_chance = 40 - force_multiplier = 0.3 - - -/obj/item/organ/internal/augment/active/item/wolverine - name = "cyberclaws" - desc = "An unusual type of cybernetic weaponry, these sharp blades are bound to turn heads." - action_button_name = "Deploy claws" - icon_state = "wolverine" - augment_slots = AUGMENT_HAND - item = /obj/item/material/armblade/claws - augment_flags = AUGMENT_MECHANICAL | AUGMENT_SCANNABLE - - -/// Traitor version - no parry chance but good damage, and compatible with organic limbs -/obj/item/organ/internal/augment/active/item/wrist_blade - name = "concealed wrist blade" - desc = "A concealed sheath made from bio-compatible cloth, shaped for a thin blade." - action_button_name = "Deploy blade" - icon_state = "armblade" - augment_slots = AUGMENT_ARM - item = /obj/item/material/armblade/wrist - origin_tech = list(TECH_COMBAT = 3, TECH_ESOTERIC = 4) - deploy_sound = 'sound/effects/holster/sheathout.ogg' - retract_sound = 'sound/effects/holster/sheathin.ogg' - augment_flags = AUGMENT_MECHANICAL | AUGMENT_BIOLOGICAL - - -/obj/item/material/armblade/wrist - name = "wrist blade" - desc = "A thin and very sharp folding blade specially made for combat, made from a specialized alloy that prevents all that nasty blood and viscera from sticking to it. Its light weight allows for rapid slashing attacks." - icon_state = "wristblade" - item_state = "wristblade" - base_parry_chance = 0 - force_multiplier = 0.2 - attack_cooldown_modifier = -1 - default_material = MATERIAL_PLASTEEL - - /// SMALL prevents dismembering limbs - only hands & feet - w_class = ITEM_SIZE_SMALL - - -/obj/item/material/armblade/wrist/add_blood(mob/living/carbon/human/M) - return FALSE diff --git a/code/modules/augment/active/circuit.dm b/code/modules/augment/active/circuit.dm deleted file mode 100644 index d805174ee95d9..0000000000000 --- a/code/modules/augment/active/circuit.dm +++ /dev/null @@ -1,29 +0,0 @@ -/obj/item/organ/internal/augment/active/item/circuit - name = "integrated circuit frame" - action_button_name = "Activate Circuit" - icon_state = "circuit" - augment_slots = AUGMENT_ARM - augment_flags = AUGMENT_MECHANICAL | AUGMENT_SCANNABLE - desc = "A DIY modular assembly, courtesy of Xion Industrial. Circuitry not included." - - -/obj/item/organ/internal/augment/active/item/circuit/attackby(obj/item/I, mob/user) - if (isCrowbar(I)) - if (item) - item.canremove = TRUE - item.dropInto(loc) - to_chat(user, SPAN_NOTICE("You take out \the [item].")) - item = null - playsound(loc, 'sound/items/Crowbar.ogg', 50, 1) - else - to_chat(user, SPAN_WARNING("The augment is empty!")) - return - if (istype(I, /obj/item/device/electronic_assembly/augment)) - if (item) - to_chat(user, SPAN_WARNING("There's already an assembly in there.")) - else if (user.unEquip(I, src)) - item = I - item.canremove = FALSE - playsound(loc, 'sound/items/Crowbar.ogg', 50, 1) - return - ..() diff --git a/code/modules/augment/active/corrective_lenses.dm b/code/modules/augment/active/corrective_lenses.dm deleted file mode 100644 index 0af777c1bc81a..0000000000000 --- a/code/modules/augment/active/corrective_lenses.dm +++ /dev/null @@ -1,21 +0,0 @@ -/obj/item/organ/internal/augment/active/item/corrective_lenses - name = "corrective lenses" - augment_slots = AUGMENT_HEAD - icon_state = "corrective_lenses" - desc = "A pair of retractable, ultrathin corrective lenses are installed into the eye sockets. They can be deployed or retracted at will and serve as prescription glasses." - action_button_name = "Deploy lenses" - augment_flags = AUGMENT_BIOLOGICAL | AUGMENT_SCANNABLE | AUGMENT_INSPECTABLE - origin_tech = list(TECH_DATA = 2, TECH_BIO = 2) - item = /obj/item/clothing/glasses/augment - - -/obj/item/organ/internal/augment/active/item/corrective_lenses/onRoundstart() - deploy() - - -/obj/item/clothing/glasses/augment - name = "corrective lenses" - desc = "The most expensive prescription on this side of Sol." - body_parts_covered = EMPTY_BITFIELD - prescription = 7 - unacidable = TRUE diff --git a/code/modules/augment/active/glare_dampeners.dm b/code/modules/augment/active/glare_dampeners.dm deleted file mode 100644 index b05646e135074..0000000000000 --- a/code/modules/augment/active/glare_dampeners.dm +++ /dev/null @@ -1,9 +0,0 @@ -/obj/item/organ/internal/augment/active/item/glare_dampeners - name = "glare dampeners" - augment_slots = AUGMENT_HEAD - icon_state = "glare_dampeners" - desc = "Thick, tinted lenses installed in your head can deploy over your eyes, reducing visibility but providing protection from welding glare and bright lights." - action_button_name = "Deploy dampeners" - augment_flags = AUGMENT_BIOLOGICAL - origin_tech = list(TECH_DATA = 2, TECH_BIO = 2) - item = /obj/item/clothing/glasses/glare_dampeners diff --git a/code/modules/augment/active/hudimplants.dm b/code/modules/augment/active/hudimplants.dm deleted file mode 100644 index 8f1453f86438d..0000000000000 --- a/code/modules/augment/active/hudimplants.dm +++ /dev/null @@ -1,72 +0,0 @@ -/obj/item/organ/internal/augment/active/hud - name = "integrated HUD" - desc = "A small implantable heads-up display." - icon_state = "eye" - action_button_name = "Toggle HUD" - augment_slots = AUGMENT_HEAD - var/list/hud_type = list(HUD_MEDICAL, HUD_SECURITY) - var/active = FALSE - - -/obj/item/organ/internal/augment/active/hud/Process() - ..() - if (!owner) - return - - if (active) - switch(hud_type) - if (HUD_MEDICAL) - req_access = list(access_medical) - if (allowed(owner)) - process_med_hud(owner, 1) - if (HUD_SECURITY) - req_access = list(access_security) - if (allowed(owner)) - process_sec_hud(owner, 1) - if (HUD_JANITOR) - process_jani_hud(owner) - - -/obj/item/organ/internal/augment/active/hud/emp_act(severity) - if (istype(src.loc, /mob/living/carbon/human)) - var/mob/living/carbon/human/M = src.loc - to_chat(M, SPAN_DANGER("Your [name] malfunctions, blinding you!")) - M.eye_blind = 4 - M.eye_blurry = 8 - if (active) - active = FALSE - ..() - - -/obj/item/organ/internal/augment/active/hud/activate() - if (!can_activate()) - return - active = !active - to_chat(owner, SPAN_NOTICE("You [active ? "enable" : "disable"] \the [src].")) - - -/obj/item/organ/internal/augment/active/hud/health - name = "integrated health HUD" - desc = "The Vey-Med H-27 is an implantable HUD, designed to interface with the user's optic nerve and display information about patient vitals." - icon_state = "eye_medical" - hud_type = HUD_MEDICAL - - -/obj/item/organ/internal/augment/active/hud/security - name = "integrated security HUD" - desc = "The Hephaestus Industries C-VSR is an implantable HUD, designed to interface with the user's optic nerve and local databases to display security information." - hud_type = HUD_SECURITY - - -/obj/item/organ/internal/augment/active/hud/janitor - name = "integrated filth HUD" - desc = "An implantable HUD based on the wearable janitorial version, designed to interface with the user's optic nerve and display information about nearby messes." - icon_state = "eye_janitor" - hud_type = HUD_JANITOR - - -/obj/item/organ/internal/augment/active/hud/science - name = "integrated sciHUD" - desc = "An implantable HUD fitted with a portable analyzer capable of determining the research potential of a visible item or the components of a machine." - icon_state = "eye_science" - hud_type = HUD_SCIENCE diff --git a/code/modules/augment/active/iatric_monitor.dm b/code/modules/augment/active/iatric_monitor.dm deleted file mode 100644 index d6461781d773f..0000000000000 --- a/code/modules/augment/active/iatric_monitor.dm +++ /dev/null @@ -1,26 +0,0 @@ -/obj/item/organ/internal/augment/active/iatric_monitor - name = "iatric monitor" - augment_slots = AUGMENT_HEAD - icon_state = "iatric_monitor" - desc = "A small computer system constantly tracks your physiological state and vital signs. A muscle gesture can be used to receive a simple diagnostic report, not unlike that from a handheld scanner." - augment_flags = AUGMENT_BIOLOGICAL | AUGMENT_SCANNABLE - origin_tech = list(TECH_DATA = 3, TECH_BIO = 2) - - -/obj/item/organ/internal/augment/active/iatric_monitor/emp_act(severity) - . = ..() - if (prob(100 / severity)) - var/scan_results = medical_scan_results(owner, TRUE, SKILL_NONE) - owner.playsound_local(null, 'sound/effects/fastbeep.ogg', 20, is_global = TRUE) - to_chat(owner, "
              [scan_results]
              ") - to_chat(owner, SPAN_WARNING("Your [name] cheerily outputs a bogus report as it malfunctions.")) - - -/obj/item/organ/internal/augment/active/iatric_monitor/activate() - var/scan_results = medical_scan_results(owner, TRUE, SKILL_PROF) - owner.playsound_local(null, 'sound/effects/fastbeep.ogg', 20, is_global = TRUE) - to_chat(owner, "
              [scan_results]
              ") - - -/obj/item/organ/internal/augment/active/iatric_monitor/hidden - augment_flags = AUGMENT_BIOLOGICAL diff --git a/code/modules/augment/active/internal_air_system.dm b/code/modules/augment/active/internal_air_system.dm deleted file mode 100644 index 95fa413e7fcc5..0000000000000 --- a/code/modules/augment/active/internal_air_system.dm +++ /dev/null @@ -1,63 +0,0 @@ -/obj/item/organ/internal/augment/active/internal_air_system - name = "internal air system" - augment_slots = AUGMENT_CHEST - icon_state = "internal_air_system" - desc = "A flexible air sac, made from a complex, bio-compatible polymer, is installed into the respiratory system. It gradually replenishes itself with breathable gas from the surrounding environment as you breathe, and you can later use it as a source of internals." - augment_flags = AUGMENT_BIOLOGICAL | AUGMENT_SCANNABLE - origin_tech = list(TECH_MATERIAL = 3, TECH_BIO = 4) - var/obj/item/tank/air_sac/sac - - -/obj/item/organ/internal/augment/active/internal_air_system/hidden - augment_flags = AUGMENT_BIOLOGICAL - - -/obj/item/organ/internal/augment/active/internal_air_system/onInstall() - sac = new (owner) - sac.air_contents.adjust_gas(owner.species.breath_type, (STD_BREATH_VOLUME * 3) * sac.air_contents.volume / (R_IDEAL_GAS_EQUATION * T20C), 0) // Give us a few free breaths - to_chat(owner, SPAN_NOTICE("You feel a curious sensation as your [sac.name] starts puffing up inside your body.\n\ - Remember that you'll still need an airtight mask or helmet to use it!")) - - -/obj/item/organ/internal/augment/active/internal_air_system/onRemove() - QDEL_NULL(sac) - - -/obj/item/organ/internal/augment/active/internal_air_system/Process() - if (!owner || !owner.species || !sac) - return - var/safe_gas = owner.species.breath_type - if (!sac.air_contents.gas[safe_gas] && sac.air_contents.return_pressure()) // Fallback in case of species switch or etc - purge all air if the gas type is no longer safe - sac.air_contents.remove_volume(sac.air_contents.volume) - to_chat(owner, SPAN_WARNING("You feel your [sac.name] rapidly deflate as it purges unsafe air.")) - return - sac.distribute_pressure = owner.species.breath_pressure ? owner.species.breath_pressure : ONE_ATMOSPHERE - if (owner.internal || sac.air_contents.return_pressure() >= 1013) // Don't refill unless we're breathing normally - return - var/turf/T = get_turf(owner) - var/datum/gas_mixture/E = T.return_air_for_internal_lifeform() - if (E.get_gas(safe_gas)) - var/datum/gas_mixture/breath = E.remove_volume(owner.species.breath_pressure * 0.25) - sac.air_contents.adjust_gas(safe_gas, breath.get_gas(safe_gas)) // "Inhale" a breath of gas for the sac - if (sac.air_contents.return_pressure() >= 1013) - to_chat(owner, SPAN_NOTICE("Your [sac.name] stops filling as it reaches maximum pressure.")) - - -/obj/item/organ/internal/augment/active/internal_air_system/activate() - if (!owner || !owner.species || (owner.internal && owner.internal != sac)) - return - if (!sac) - to_chat(owner, SPAN_WARNING("Your [name]'s sac is missing or punctured!")) - return - if (sac.air_contents.return_pressure() < owner.species.breath_pressure) - to_chat(owner, SPAN_WARNING("Your [name]'s [sac.name] is empty!")) - return - if (!(owner.wear_mask && owner.wear_mask.item_flags & ITEM_FLAG_AIRTIGHT)) - if (!(owner.head && owner.head.item_flags & ITEM_FLAG_AIRTIGHT)) - to_chat(owner, SPAN_WARNING("You need a valid mask or helmet equipped. You still need to exhale!")) - return - if (!owner.internal) - owner.set_internals(sac, "\the [sac] in your [name]") - else - owner.set_internals(null) - return TRUE diff --git a/code/modules/augment/active/leukocyte_breeder.dm b/code/modules/augment/active/leukocyte_breeder.dm deleted file mode 100644 index a0086199910de..0000000000000 --- a/code/modules/augment/active/leukocyte_breeder.dm +++ /dev/null @@ -1,69 +0,0 @@ -/obj/item/organ/internal/augment/active/leukocyte_breeder - name = "leukocyte breeder" - augment_slots = AUGMENT_CHEST - icon_state = "leukosuite" - desc = "These stimulators augment the immune system and promote the growth of hunter-killer cells in the presence of a foreign invader, effectively boosting the body's immunity to parasites and disease." - action_button_name = "Toggle leukocyte breeder" - augment_flags = AUGMENT_BIOLOGICAL - origin_tech = list(TECH_DATA = 2, TECH_BIO = 4) - var/active = FALSE - - /// How many processing ticks the augment has been enabled for - var/ticks_active = 0 - - /// After this many ticks, the owner has "broken in" the augment, and will benefit more but suffer drawbacks if it's disabled - var/ticks_to_acclimate = 120 - - -/obj/item/organ/internal/augment/active/leukocyte_breeder/emp_act(severity) - . = ..() - if (owner && active) - if (prob(100 - (20 * severity))) // 60% chance for EMP_ACT_LIGHT and 80% chance for EMP_ACT_HEAVY severity, respectively - to_chat(owner, SPAN_WARNING("You feel a wave of nausea as your [name] deactivates.")) - active = FALSE - - -/obj/item/organ/internal/augment/active/leukocyte_breeder/onRoundstart() - active = TRUE // We can safely assume that someone starting off with the breeder will have it active - ticks_active = ticks_to_acclimate - to_chat(owner, SPAN_INFO("Your [name] has started the shift active, granting you its full benefits without needing to break it in.")) - - -/obj/item/organ/internal/augment/active/leukocyte_breeder/onInstall() - if (prob(10)) - ticks_active = ticks_to_acclimate // Some folks are just lucky and don't get any side effects - - -/obj/item/organ/internal/augment/active/leukocyte_breeder/activate() - if (!can_activate()) - return - if (active && ticks_active >= ticks_to_acclimate) - // Give an alert if trying to deactivate while acclimated, so roundstart takers don't accidentally turn it off by learning the buttons - if (alert(owner, "Deactivate \the [src]?", name, "Yes", "No") != "Yes" || !can_activate()) - return - active = !active - owner.playsound_local(null, 'sound/effects/fastbeep.ogg', 20, is_global = TRUE) - if (active) - to_chat(owner, SPAN_NOTICE("Leukocyte breeder engaged and improving immune response.")) - else - to_chat(owner, SPAN_WARNING("Leukocyte breeder disengaged. Short-term health may suffer.")) - if (owner.immunity >= (owner.immunity_norm * 0.9)) // Reduce short-term immunity, but only if it's at around normal levels - owner.immunity -= 10 - ticks_active = 0 - - -/obj/item/organ/internal/augment/active/leukocyte_breeder/Process() - if (!owner) - return - if (active) - ticks_active++ - if (owner.immunity < owner.immunity_norm * 1.1) - owner.immunity += 0.05 - ticks_active++ - if (ticks_active < ticks_to_acclimate) - if (ticks_active < ticks_to_acclimate) - if (prob(5)) - owner.emote(pick("cough", "sneeze")) - if (prob(3)) - to_chat(owner, SPAN_WARNING(pick("You feel uncomfortably hot.", "Your head aches.", "You feel lightheaded."))) - owner.dizziness += rand(3, 5) diff --git a/code/modules/augment/active/nerve_dampeners.dm b/code/modules/augment/active/nerve_dampeners.dm deleted file mode 100644 index 9ee2fb1613a2e..0000000000000 --- a/code/modules/augment/active/nerve_dampeners.dm +++ /dev/null @@ -1,45 +0,0 @@ -/obj/item/organ/internal/augment/active/nerve_dampeners - name = "nerve dampeners" - augment_slots = AUGMENT_CHEST - icon_state = "muscule" - desc = "Each activation of this augment provides a strong painkilling effect for around thirty seconds, but will be followed by a powerful comedown. Excessive short-term use may cause brain damage." - augment_flags = AUGMENT_BIOLOGICAL - origin_tech = list(TECH_DATA = 4, TECH_BIO = 4) - var/ticks_remaining = 0 - - -/obj/item/organ/internal/augment/active/nerve_dampeners/can_activate() - if (ticks_remaining) - to_chat(owner, SPAN_WARNING("Your [name] is already active.")) - return - . = ..() - - -/obj/item/organ/internal/augment/active/nerve_dampeners/activate() - if (!can_activate()) - return - to_chat(owner, SPAN_NOTICE("You activate your [name], and feel a wave of numbness wash over you!")) - ticks_remaining = 15 - if (owner.drowsyness) - to_chat(owner, SPAN_DANGER("Your body slackens as you lose sensation.")) - if (prob(owner.getBrainLoss())) - to_chat(owner, SPAN_DANGER("You slump to the ground and black out.")) - owner.Paralyse(10) - owner.adjustBrainLoss(owner.drowsyness) - - -/obj/item/organ/internal/augment/active/nerve_dampeners/Process() - if (!owner) - return - if (ticks_remaining) - ticks_remaining-- - owner.add_chemical_effect(CE_PAINKILLER, 160) // About twice as strong as tramadol at full strength - if (!ticks_remaining) // ...but comes at a price. Brief short term benefit for a long-term comedown - to_chat(owner, SPAN_WARNING("You abruptly feel intensely exhausted as sensation returns.")) - owner.drowsyness = max(owner.drowsyness, 15) - owner.confused = max(owner.confused, 15) - owner.slurring = max(owner.slurring, 30) - owner.chem_effects[CE_PAINKILLER] = 0 - owner.stamina = 0 - if(MOVING_QUICKLY(owner)) - owner.set_moving_slowly() diff --git a/code/modules/augment/active/polytool.dm b/code/modules/augment/active/polytool.dm deleted file mode 100644 index ddd8d81876e13..0000000000000 --- a/code/modules/augment/active/polytool.dm +++ /dev/null @@ -1,62 +0,0 @@ -/obj/item/organ/internal/augment/active/polytool - name = "Polytool embedded module" - action_button_name = "Deploy Tool" - icon_state = "multitool" - augment_slots = AUGMENT_HAND - var/list/items = list() - var/list/paths = list() //We may lose them - augment_flags = AUGMENT_MECHANICAL - - -/obj/item/organ/internal/augment/active/polytool/Initialize() - . = ..() - for (var/path in paths) - var/obj/item/I = new path (src) - I.canremove = FALSE - items += I - - -/obj/item/organ/internal/augment/active/polytool/Destroy() - QDEL_NULL_LIST(items) - . = ..() - - -/obj/item/organ/internal/augment/active/polytool/proc/holding_dropped(obj/item/I) - GLOB.item_unequipped_event.unregister(I, src) - if (I.loc != src) - I.canremove = TRUE - - -/obj/item/organ/internal/augment/active/polytool/activate() - if (!can_activate()) - return - var/slot = null - if (limb.organ_tag in list(BP_L_ARM, BP_L_HAND)) - slot = slot_l_hand - else if (limb.organ_tag in list(BP_R_ARM, BP_R_HAND)) - slot = slot_r_hand - var/obj/I = slot == slot_l_hand ? owner.l_hand : owner.r_hand - if (I) - if (is_type_in_list(I,paths) && !(I.type in items)) //We don't want several of same but you can replace parts whenever - if (!owner.drop_from_inventory(I, src)) - to_chat(owner, "\the [I] fails to retract.") - return - items += I - owner.visible_message( - SPAN_WARNING("[owner] retracts \his [I] into [limb]."), - SPAN_NOTICE("You retract your [I] into [limb].") - ) - else - to_chat(owner, SPAN_WARNING("You must drop [I] before tool can be extend.")) - else - var/obj/item = input(owner, "Select item for deploy") as null|anything in src - if (!item || !(src in owner.internal_organs)) - return - if (owner.equip_to_slot_if_possible(item, slot)) - items -= item - //Keep track of it, make sure it returns - GLOB.item_unequipped_event.register(item, src, /obj/item/organ/internal/augment/active/polytool/proc/holding_dropped) - owner.visible_message( - SPAN_WARNING("[owner] extends \his [item.name] from [limb]."), - SPAN_NOTICE("You extend your [item.name] from [limb].") - ) diff --git a/code/modules/augment/active/popout_shotgun.dm b/code/modules/augment/active/popout_shotgun.dm deleted file mode 100644 index d9fa255a6ae7a..0000000000000 --- a/code/modules/augment/active/popout_shotgun.dm +++ /dev/null @@ -1,35 +0,0 @@ -/obj/item/organ/internal/augment/active/item/popout_shotgun - name = "pop-out shotgun" - desc = "A galvanized steel mechanism that replaces most of the flesh below the elbow. Using the arm's natural range of motion as a hinge, it can be flicked open to reveal a 12-gauge shotgun with room for a single shell." - action_button_name = "Deploy shotgun" - icon_state = "popout_shotgun" - augment_slots = AUGMENT_ARM - item = /obj/item/gun/projectile/shotgun/popout - origin_tech = list(TECH_MATERIAL = 3, TECH_COMBAT = 3, TECH_ESOTERIC = 4) - deploy_sound = 'sound/weapons/guns/interaction/rifle_boltback.ogg' - retract_sound = 'sound/weapons/guns/interaction/rifle_boltforward.ogg' - augment_flags = AUGMENT_MECHANICAL | AUGMENT_BIOLOGICAL | AUGMENT_SCANNABLE | AUGMENT_INSPECTABLE - - -/obj/item/gun/projectile/shotgun/popout - name = "pop-out shotgun" - desc = "A specialized 12-gauge shotgun concealed in the forearm. A deadly surprise." - icon = 'icons/obj/augment.dmi' - icon_state = "popout_shotgun" - item_state = "coilgun" - max_shells = 1 - w_class = ITEM_SIZE_HUGE - force = 5 - obj_flags = OBJ_FLAG_CONDUCTIBLE - caliber = CALIBER_SHOTGUN - load_method = SINGLE_CASING - recoil_buildup = 20 - ammo_type = /obj/item/ammo_casing/shotgun/pellet - handle_casings = EJECT_CASINGS - load_sound = 'sound/weapons/guns/interaction/shotgun_instert.ogg' - has_safety = FALSE // No brakes on this train baby - unacidable = TRUE - - -/obj/item/gun/projectile/shotgun/popout/check_accidents(mob/living/user, message, skill_path, fail_chance, no_more_fail, factor) - return FALSE // Ignore the effects of weapons training for this, since it's special diff --git a/code/modules/augment/active/powerfist.dm b/code/modules/augment/active/powerfist.dm deleted file mode 100644 index a7a9d7ffa6b83..0000000000000 --- a/code/modules/augment/active/powerfist.dm +++ /dev/null @@ -1,211 +0,0 @@ -/obj/item/powerfist - icon_state = "powerfist" - item_state = "powerfist" - name = "pneumatic powerfist" - icon = 'icons/obj/augment.dmi' - desc = "A strong, pneumatic powerfist. Packs quite the punch with other utility uses." - base_parry_chance = 12 - force = 5 - attack_cooldown = 1.5 * DEFAULT_WEAPON_COOLDOWN - hitsound = 'sound/effects/bamf.ogg' - attack_verb = list("smashed", "bludgeoned", "hammered", "battered") - - var/obj/item/tank/tank - var/pressure_setting - var/list/possible_pressure_amounts = list(10, 20, 30, 50) - - -/obj/item/powerfist/Initialize() - . = ..() - if (ispath(tank)) - tank = new tank (src) - if (!pressure_setting) - pressure_setting = possible_pressure_amounts[1] - update_force() - - -/obj/item/organ/internal/augment/active/item/powerfist - name = "pneumatic power gauntlet" - desc = "An armoured powered gauntlet for the arm. Your very own pneumatic doom machine." - action_button_name = "Deploy powerfist" - icon_state = "powerfist" - deploy_sound = 'sound/machines/suitstorage_cycledoor.ogg' - retract_sound = 'sound/machines/suitstorage_cycledoor.ogg' - augment_slots = AUGMENT_ARM - item = /obj/item/powerfist - augment_flags = AUGMENT_MECHANICAL | AUGMENT_SCANNABLE - - -/obj/item/powerfist/attackby(obj/item/item, mob/user) - if (!istype(item, /obj/item/tank)) - return - var/obj/item/tank/other = item - if (other.tank_size > TANK_SIZE_SMALL) - to_chat(user, SPAN_WARNING("\The [other] is too big. Find a smaller tank.")) - return - if (tank) - to_chat(user, SPAN_WARNING("\The [src] already has \a [tank] installed.")) - return - user.visible_message( - SPAN_ITALIC("\The [user] starts connecting \a [item] to \his [src]."), - SPAN_ITALIC("You start connecting \the [item] to \the [src]."), - range = 5 - ) - if (!do_after(user, 3 SECONDS, item, DO_PUBLIC_UNIQUE)) - return - if (!user.unEquip(item, src)) - return - user.visible_message( - SPAN_ITALIC("\The [user] finishes connecting \a [item] to \his [src]."), - SPAN_NOTICE("You finish connecting \the [item] to \the [src]."), - range = 5 - ) - playsound(user, 'sound/effects/refill.ogg', 50, 1, -6) - tank = item - update_force() - update_icon() - - -/obj/item/powerfist/proc/update_force() - var/pressure = tank?.air_contents?.return_pressure() - if (pressure > 210) - force = (pressure * pressure_setting * 0.01) * (tank.volume / 425) - else - force = 5 - - -/obj/item/powerfist/verb/set_pressure_verb() - set name = "Set Powerfist Pressure" - set desc = "Set the powerfist's tank output pressure." - set category = "Object" - set src in range(0) - set_pressure() - - -/obj/item/powerfist/proc/set_pressure() - var/N = input("Percentage of tank used per hit:", "[src]") as null | anything in possible_pressure_amounts - if (isnull(N)) - return - pressure_setting = N - to_chat(usr, SPAN_NOTICE("You dial \the [src]'s pressure valve to [pressure_setting]%.")) - update_force() - - -/obj/item/powerfist/attack_self(mob/living/carbon/human/user) - set_pressure() - - -/obj/item/powerfist/attack_hand(mob/living/user) - if (!tank) - to_chat(user, SPAN_WARNING("There's no tank in \the [src].")) - return - user.visible_message( - SPAN_ITALIC("\The [user] starts disconnecting \a [tank] from \his [src]."), - SPAN_ITALIC("You start disconnecting \the [tank] from \the [src]."), - range = 5 - ) - if (!do_after(user, 3 SECONDS, src, DO_PUBLIC_UNIQUE)) - return - user.visible_message( - SPAN_ITALIC("\The [user] finishes disconnecting \a [tank] from \his [src]."), - SPAN_NOTICE("You finish disconnecting \the [tank] from \the [src]."), - range = 5 - ) - user.put_in_hands(tank) - playsound(loc, 'sound/effects/spray3.ogg', 50) - tank = null - update_icon() - update_force() - - -/obj/item/powerfist/on_update_icon() - ..() - if (tank) - overlays += image(icon, "powerfist_tank") - else - overlays -= image(icon,"powerfist_tank") - - -/obj/item/powerfist/examine(mob/living/user, distance) - . = ..() - if (distance > 2) - return - to_chat(user, "The valve is dialed to [pressure_setting]%.") - if (tank) - to_chat(user, "\A [tank] is fitted in \the [src]'s tank valve.") - to_chat(user, "The tank dial reads [tank.air_contents.return_pressure()] kPa.") - else - to_chat(user, "Nothing is attached to the tank valve!") - - -/obj/item/powerfist/proc/gas_loss() - if (tank?.air_contents) - var/lost_gas = tank.air_contents.total_moles * pressure_setting * 0.01 - tank.remove_air(lost_gas) - - -/obj/item/powerfist/proc/no_pressure() - if (tank && tank.air_contents?.return_pressure() < 210) - playsound(usr, 'sound/machines/ekg_alert.ogg', 50) - to_chat(usr, SPAN_WARNING("\The pressure dial on \the [src] flashes a warning: it's out of gas!")) - update_force() - - -/obj/item/powerfist/afterattack(atom/target, mob/living/user, inrange, params) - if (!inrange || user.a_intent == I_HELP) - return - if (tank && tank.air_contents.return_pressure() > 210 && pressure_setting > 20 && inrange) - playsound(user, 'sound/effects/bamf.ogg', pressure_setting*2, 1) //louder the more pressure is used - gas_loss() - no_pressure() - if (istype(target, /obj/machinery/door/airlock) && pressure_setting > 30) //tearing open airlocks - var/obj/machinery/door/airlock/A = target - if (!A.operating && !A.locked) - if (A.welded) - A.visible_message(SPAN_DANGER("\The [user] forces the fingers of \the [src] in through the welded metal, beginning to pry \the [A] open!")) - if (do_after(user, 13 SECONDS, A, DO_DEFAULT | DO_USER_UNIQUE_ACT | DO_PUBLIC_PROGRESS) && !A.locked) - A.welded = FALSE - A.update_icon() - playsound(A, 'sound/effects/meteorimpact.ogg', 100, 1) - playsound(A, 'sound/machines/airlock_creaking.ogg', 100, 1) - A.visible_message(SPAN_DANGER("\The [user] tears \the [A] open with \a [src]!")) - addtimer(CALLBACK(A, /obj/machinery/door/airlock/.proc/open, TRUE), 0) - A.set_broken(TRUE) - return - else - A.visible_message(SPAN_DANGER("\The [user] pries the fingers of \a [src] in, beginning to force \the [A]!")) - if ((A.is_broken(NOPOWER) || do_after(user, 10 SECONDS, A, DO_DEFAULT | DO_USER_UNIQUE_ACT | DO_PUBLIC_PROGRESS)) && !(A.operating || A.welded || A.locked)) - playsound(A, 'sound/machines/airlock_creaking.ogg', 100, 1) - if (A.density) - addtimer(CALLBACK(A, /obj/machinery/door/airlock/.proc/open, TRUE), 0) - if(!A.is_broken(NOPOWER)) - A.set_broken(TRUE) - A.visible_message(SPAN_DANGER("\The [user] forces \the [A] open with \a [src]!")) - else - addtimer(CALLBACK(A, /obj/machinery/door/airlock/.proc/close, TRUE), 0) - if (!A.is_broken(NOPOWER)) - A.set_broken(TRUE) - A.visible_message(SPAN_DANGER("\The [user] forces \the [A] closed with \a [src]!")) - if (A.locked) - to_chat(user, SPAN_WARNING("The airlock's bolts prevent it from being forced.")) - - -/obj/item/powerfist/apply_hit_effect(atom/target, mob/living/user) - if (tank) - gas_loss() - no_pressure() - if (istype(target, /mob/living)) - if (pressure_setting == 50 && tank.air_contents.return_pressure() > 210) - var/mob/living/A = target - A.throw_at(get_edge_target_turf(user, user.dir), pressure_setting/10, pressure_setting/10) //penultimate/ultimate settings yeets people - user.visible_message( - SPAN_DANGER("\The [user] batters \the [A] with \a [src], sending them flying!"), - SPAN_WARNING("You batter \the [A] with \the [src], sending them flying!") - ) - return ..() - -/obj/item/powerfist/prepared - tank = /obj/item/tank/oxygen_emergency_extended - -/obj/item/organ/internal/augment/active/item/powerfist/prepared - item = /obj/item/powerfist/prepared diff --git a/code/modules/augment/active/tool/engineering.dm b/code/modules/augment/active/tool/engineering.dm deleted file mode 100644 index 668bba60c8f54..0000000000000 --- a/code/modules/augment/active/tool/engineering.dm +++ /dev/null @@ -1,84 +0,0 @@ -/obj/item/organ/internal/augment/active/polytool/engineer - name = "\improper Engineering toolset" - action_button_name = "Deploy Engineering Tool" - desc = "A lightweight augmentation for the engineer on-the-go. This one comes with a series of common tools." - paths = list( - /obj/item/screwdriver/finger, - /obj/item/wrench/finger, - /obj/item/weldingtool/finger, - /obj/item/crowbar/finger, - /obj/item/wirecutters/finger, - /obj/item/device/multitool/finger - ) - - -/obj/item/weldingtool/finger - name = "digital welder" - desc = "A precise, high quality welding tool." - icon_state = "welder_finger" - icon = 'icons/obj/augment_tools.dmi' - - -/obj/item/weldingtool/finger/on_update_icon() - icon_state = welding ? "welder_finger_on" : "welder_finger" - - -/obj/item/wirecutters/finger - name = "digital splicer" - desc = "A small embedded cutter in your finger." - icon_state = "wirecutter_finger" - icon = 'icons/obj/augment_tools.dmi' - build_from_parts = FALSE - - -/obj/item/wirecutters/finger/Initialize() - . = ..() - icon_state = initial(icon_state) - item_state = initial(item_state) - - -/obj/item/screwdriver/finger - name = "digital screwdriver" - desc = "A nifty powertool at your literal fingertips." - icon_state = "screwdriver_finger" - icon = 'icons/obj/augment_tools.dmi' - build_from_parts = FALSE - - -/obj/item/screwdriver/finger/Initialize() - . = ..() - icon_state = initial(icon_state) - item_state = initial(item_state) - - -/obj/item/crowbar/finger - name = "digital prybar" - desc = "A somewhat awkward to use prybar. It doubles as bottle opener." - icon_state = "prybar_finger" - icon = 'icons/obj/augment_tools.dmi' - - -/obj/item/crowbar/finger/Initialize() - . = ..() - icon_state = initial(icon_state) - item_state = initial(item_state) - - -/obj/item/wrench/finger - name = "digital wrench" - desc = "A rotating wrench. Don't get your hair caught in it." - icon_state = "wrench_finger" - icon = 'icons/obj/augment_tools.dmi' - - -/obj/item/wrench/finger/Initialize() - . = ..() - icon_state = initial(icon_state) - item_state = initial(item_state) - - -/obj/item/device/multitool/finger - name = "digital multitool" - desc = "A multitool inside of a multitool. Doubletool?" - icon_state = "multitool_finger" - icon = 'icons/obj/augment_tools.dmi' diff --git a/code/modules/augment/active/tool/surgical.dm b/code/modules/augment/active/tool/surgical.dm deleted file mode 100644 index c54fd30c76b02..0000000000000 --- a/code/modules/augment/active/tool/surgical.dm +++ /dev/null @@ -1,14 +0,0 @@ -/obj/item/organ/internal/augment/active/polytool/surgical - name = "surgical toolset" - action_button_name = "Deploy Surgical Tool" - desc = "Part of Zeng-Hu Pharmaceutical's line of biomedical augmentations, this device contains the full set of tools any surgeon would ever need." - icon_state = "multitool_medical" - paths = list( - /obj/item/bonesetter, - /obj/item/cautery, - /obj/item/circular_saw, - /obj/item/hemostat, - /obj/item/retractor, - /obj/item/scalpel, - /obj/item/surgicaldrill - ) diff --git a/code/modules/augment/augment.dm b/code/modules/augment/augment.dm deleted file mode 100644 index 096976c371299..0000000000000 --- a/code/modules/augment/augment.dm +++ /dev/null @@ -1,223 +0,0 @@ -/** -* Augments -* Extra organs that can be embedded to provide behaviors and flavor -*/ -/obj/item/organ/internal/augment - name = "embedded augment" - icon = 'icons/obj/augment.dmi' - status = ORGAN_ROBOTIC | ORGAN_CONFIGURE - default_action_type = /datum/action/item_action/organ/augment - var/augment_flags = AUGMENT_MECHANICAL | AUGMENT_BIOLOGICAL | AUGMENT_SCANNABLE - var/augment_slots = EMPTY_BITFIELD - - -#define ORGAN_STYLE ( \ - (organ.status & ORGAN_ROBOTIC) ? 1 \ -: (organ.status & ORGAN_CRYSTAL) ? 2 \ -: 0 \ -) - -#define ORGAN_STYLE_OK ( \ - style == 0 && (augment_flags & AUGMENT_BIOLOGICAL) \ -|| style == 1 && (augment_flags & AUGMENT_MECHANICAL) \ -|| style == 2 && (augment_flags & AUGMENT_CRYSTALINE) \ -) - -/obj/item/organ/internal/augment/proc/get_valid_parent_organ(mob/living/carbon/subject) - if (!istype(subject)) - return - var/style - var/obj/item/organ/external/organ - var/list/organs = subject.organs_by_name - if ((augment_slots & AUGMENT_CHEST) && !organs["[BP_CHEST]_aug"] && (organ = organs[BP_CHEST])) - style = ORGAN_STYLE - if (ORGAN_STYLE_OK) - return organ - if ((augment_slots & AUGMENT_ARMOR) && !organs["[BP_CHEST]_aug_armor"] && (organ = organs[BP_CHEST])) - style = ORGAN_STYLE - if (ORGAN_STYLE_OK) - return organ - if ((augment_slots & AUGMENT_GROIN) && !organs["[BP_GROIN]_aug"] && (organ = organs[BP_GROIN])) - style = ORGAN_STYLE - if (ORGAN_STYLE_OK) - return organ - if ((augment_slots & AUGMENT_HEAD) && !organs["[BP_HEAD]_aug"] && (organ = organs[BP_HEAD])) - style = ORGAN_STYLE - if (ORGAN_STYLE_OK) - return organ - if ((augment_slots & AUGMENT_FLUFF) && !organs["[BP_HEAD]_aug_fluff"] && (organ = organs[BP_HEAD])) - style = ORGAN_STYLE - if (ORGAN_STYLE_OK) - return organ - if (augment_slots & AUGMENT_ARM) - if (!organs["[BP_L_ARM]_aug"] && (organ = organs[BP_L_ARM])) - style = ORGAN_STYLE - if (ORGAN_STYLE_OK) - return organ - if (!organs["[BP_R_ARM]_aug"] && (organ = organs[BP_R_ARM])) - style = ORGAN_STYLE - if (ORGAN_STYLE_OK) - return organ - if (augment_slots & AUGMENT_HAND) - if (!organs["[BP_L_HAND]_aug"] && (organ = organs[BP_L_HAND])) - style = ORGAN_STYLE - if (ORGAN_STYLE_OK) - return organ - if (!organs["[BP_R_HAND]_aug"] && (organ = organs[BP_R_HAND])) - style = ORGAN_STYLE - if (ORGAN_STYLE_OK) - return organ - if (augment_slots & AUGMENT_LEG) - if (!organs["[BP_L_LEG]_aug"] && (organ = organs[BP_L_LEG])) - style = ORGAN_STYLE - if (ORGAN_STYLE_OK) - return organ - if (!organs["[BP_R_LEG]_aug"] && (organ = organs[BP_R_LEG])) - style = ORGAN_STYLE - if (ORGAN_STYLE_OK) - return organ - if (augment_slots & AUGMENT_FOOT) - if (!organs["[BP_L_FOOT]_aug"] && (organ = organs[BP_L_FOOT])) - style = ORGAN_STYLE - if (ORGAN_STYLE_OK) - return organ - if (!organs["[BP_R_FOOT]_aug"] && (organ = organs[BP_R_FOOT])) - style = ORGAN_STYLE - if (ORGAN_STYLE_OK) - return organ - -#undef ORGAN_STYLE_OK -#undef ORGAN_STYLE - - -/obj/item/organ/internal/augment/surgery_configure(mob/living/user, mob/living/carbon/human/target, obj/item/organ/parent, obj/item/tool, decl/surgery_step/action) - var/found - switch (parent?.organ_tag) - if (null) - found = FALSE - if (BP_L_ARM, BP_R_ARM) - found = augment_slots & AUGMENT_ARM - if (BP_L_HAND, BP_R_HAND) - found = augment_slots & AUGMENT_HAND - if (BP_L_LEG, BP_R_LEG) - found = augment_slots & AUGMENT_LEG - if (BP_L_FOOT, BP_R_FOOT) - found = augment_slots & AUGMENT_FOOT - if (BP_CHEST) - found = augment_slots & (AUGMENT_CHEST | AUGMENT_ARMOR) - if (BP_GROIN) - found = augment_slots & AUGMENT_GROIN - if (BP_HEAD) - found = augment_slots & (AUGMENT_HEAD | AUGMENT_FLUFF) - if (!found) - to_chat(user, SPAN_WARNING("\The [src] can't be installed in \the [parent].")) - parent_organ = null - organ_tag = null - return 1 - parent_organ = parent.organ_tag - if (found == AUGMENT_ARMOR) - organ_tag = "[parent_organ]_aug_armor" - if (found == AUGMENT_FLUFF) - organ_tag = "[parent_organ]_aug_fluff" - else - organ_tag = "[parent_organ]_aug" - - -/obj/item/organ/internal/augment/replaced(mob/living/carbon/human/target) - if (..() && istype(owner)) - onInstall() - - -/obj/item/organ/internal/augment/removed(mob/living/user, drop_organ = TRUE) - onRemove() - ..() - - -/// Virtual for removing augment effects from owner -/obj/item/organ/internal/augment/proc/onRemove() - return - - -/// Virtual for adding augment effects to owner when surgically added -/obj/item/organ/internal/augment/proc/onInstall() - return - - -/// Virtual for adding additional behavior when augment is already present at owner instantiation -/obj/item/organ/internal/augment/proc/onRoundstart() - return - - -/obj/item/organ/internal/augment/examine(mob/user, distance) - . = ..() - var/level - if (isobserver(user)) - level = 2 - else if (distance > 1) - return - else if (user.mind?.special_role) - level = 2 - else if (user.skill_check(SKILL_DEVICES, SKILL_PROF)) - level = 2 - else if (user.skill_check(SKILL_DEVICES, SKILL_ADEPT)) - level = 1 - if (!level) - return - var/list/attach_types = list() - if (augment_flags & AUGMENT_MECHANICAL) - attach_types += "mechanical" - if (augment_flags & AUGMENT_BIOLOGICAL) - attach_types += "biological" - if (augment_flags & AUGMENT_CRYSTALINE) - attach_types += "crystaline" - var/list/attach_parts = list() - if (augment_slots & (AUGMENT_CHEST|AUGMENT_ARMOR)) - attach_parts += "chests" - if (augment_slots & AUGMENT_GROIN) - attach_parts += "lower bodies" - if (augment_slots & (AUGMENT_HEAD|AUGMENT_FLUFF)) - attach_parts += "heads" - if (augment_slots & AUGMENT_ARM) - attach_parts += "arms" - if (augment_slots & AUGMENT_HAND) - attach_parts += "hands" - if (augment_slots & AUGMENT_LEG) - attach_parts += "legs" - if (augment_slots & AUGMENT_FOOT) - attach_parts += "feet" - var/message = "It can be installed in [english_list(attach_parts)] that are [english_list(attach_types)]." - if (level > 1) - var/list/discovery = list() - if (augment_flags & AUGMENT_SCANNABLE) - discovery += "scanners" - if (augment_flags & AUGMENT_INSPECTABLE) - discovery += "manual inspection" - if (discovery.len) - message += " It can be discovered by [english_list(discovery)]." - else - message += " It is undetectable." - to_chat(user, message) - - -/datum/codex_entry/augment - display_name = "Implantable Augmentation" - associated_paths = list(/obj/item/organ/internal/augment) - lore_text = {"\ -

              Augmentations are a broad category of devices that are added to the bodies of biological and \ - mechanical individuals in order to provide some function or benefit to the user. The most common \ - augmentations in humans are medical or otherwise corrective, but everything from weapons to reward \ - stimulators can be wired into the body one way or another, making many modern humans classic cyborgs.

              \ -

              In non-biological entities "augmentations" are often simply normal body components that are not \ - already installed - but many of the same non-medical tools, utilities, and entertainment devices \ - are available.

              \ - "} - mechanics_text = {"\ -

              Augmentations provide various (or no) functionality and are either passive or active. \ - A passive augmentation, so long as it is not too damaged, Just Works. An active augmentation can be \ - toggled on or off via its associated UI button, which appears on its owners screen once it has been \ - implanted.

              \ -

              Some active augmentations, like tools and weapons, will try to place an item into (or take it from) \ - a hand or other inventory slot. You will need to keep those slots free in order to turn those \ - active augmentations on.

              \ -

              - "} diff --git a/code/modules/augment/implanter.dm b/code/modules/augment/implanter.dm deleted file mode 100644 index e75c59370b268..0000000000000 --- a/code/modules/augment/implanter.dm +++ /dev/null @@ -1,176 +0,0 @@ -/obj/item/device/augment_implanter - name = "augment autodoc" - desc = "An oblong box with an irregular shape and a seam running down the center." - icon = 'icons/obj/surgery.dmi' - icon_state = "compact_bionic_module" - w_class = ITEM_SIZE_NORMAL - origin_tech = list(TECH_DATA = 3, TECH_ESOTERIC = 3) - var/obj/item/organ/internal/augment/augment - - /// If not falsy, skip the messy installation and just install the augment - var/instant - - /// Transient value to block multiple activations at the same time - var/working - - -/obj/item/device/augment_implanter/Initialize() - . = ..() - if (ispath(augment)) - augment = new augment (src) - - -/obj/item/device/augment_implanter/examine(mob/user) - . = ..() - if (isobserver(user) || (user.mind && user.mind.special_role != null) || user.skill_check(SKILL_DEVICES, SKILL_PROF)) - to_chat(user, "A single-use augment installer with no medical knowledge necessary! " + SPAN_DANGER("Painkillers not included!")) - if (isnull(augment)) - to_chat(user, "It seems to be empty.") - return - to_chat(user, SPAN_BOLD("It contains:")) - augment.examine(user) - - -/obj/item/device/augment_implanter/attackby(obj/item/I, mob/living/user) - if (isCrowbar(I) && augment) - user.visible_message( - SPAN_ITALIC("\The [user] starts to remove \the [augment] from \the [src]."), - SPAN_WARNING("You start to remove \the [augment] from \the [src]."), - SPAN_ITALIC("You hear metal creaking.") - ) - playsound(user, 'sound/items/Crowbar.ogg', 50, TRUE) - if (!do_after(user, 10 SECONDS, src, DO_PUBLIC_UNIQUE) || !augment) - return - user.visible_message( - SPAN_ITALIC("\The [user] removes \the [augment] from \the [src]."), - SPAN_WARNING("You remove \the [augment] from \the [src]."), - SPAN_ITALIC("You hear a clunk.") - ) - playsound(user, 'sound/items/Deconstruct.ogg', 50, TRUE) - user.put_in_hands(augment) - augment = null - return - ..() - - -/obj/item/device/augment_implanter/attack_self(mob/living/carbon/human/user) - if (working) - return - if (!istype(user)) - return - if (!augment) - to_chat(user, SPAN_WARNING("\The [src] is empty.")) - return - if (!ishuman(user)) - to_chat(user, SPAN_WARNING("\The [src] is incompatible with you.")) - return - var/target_zone = user.zone_sel.selecting - if (!target_zone) - return - var/obj/item/organ/external/parent = user.get_organ(target_zone) - if (!parent) - to_chat(user, SPAN_WARNING("You don't have \a [target_zone]!")) - return - var/flavor = (parent.status & ORGAN_ROBOTIC) ? 1 : (parent.status & ORGAN_CRYSTAL) ? 2 : 0 - if (flavor == 0 && !(augment.augment_flags & AUGMENT_BIOLOGICAL)) - to_chat(user, SPAN_WARNING("\The [augment] cannot be installed in biological organs.")) - return - if (flavor == 1 && !(augment.augment_flags & AUGMENT_MECHANICAL)) - to_chat(user, SPAN_WARNING("\The [augment] cannot be installed in mechanical organs.")) - return - if (flavor == 2 && !(augment.augment_flags & AUGMENT_CRYSTALINE)) - to_chat(user, SPAN_WARNING("\The [augment] cannot be installed in crystaline organs.")) - return - var/surgery_step = decls_repository.get_decl(/decl/surgery_step/internal/replace_organ) - if (augment.surgery_configure(user, user, parent, src, surgery_step)) - return - var/occupied = user.internal_organs_by_name[augment.organ_tag] - if (occupied) - to_chat(user, SPAN_WARNING("You already have \an [occupied] installed there.")) - return - if (flavor != -1) - var/old_loc = loc - var/proceed = alert(user, "This is going to hurt. Are you prepared?", "Woah there!", "I am!", "Wait...") - if (proceed != "I am!") - return - if (loc != old_loc) - return - var/success = instant - if (!instant) - working = TRUE - to_chat(user, SPAN_WARNING("\icon[src] Commencing procedure. " + SPAN_DANGER("Please remain calm."))) - user.visible_message(SPAN_WARNING("\The [user] places \his [parent.name] against \the [src].")) - if (!do_after(user, 2 SECONDS, src, DO_PUBLIC_UNIQUE)) - goto FailedAugmentImplant - user.visible_message(SPAN_DANGER("\The [src] purrs maliciously and unfurls its armatures with frightening speed!")) - if (flavor != 1) - user.custom_pain("Your [parent.name] feels like it's being shredded apart!", 160) - else - to_chat(user, SPAN_ITALIC("The access panel on your [parent.name] is torn open.")) - playsound(user, 'sound/items/electronic_assembly_emptying.ogg', 50, TRUE) - parent.createwound(INJURY_TYPE_CUT, parent.min_broken_damage / 2, 1) - parent.clamp_organ() - parent.open_incision() - parent.fracture() - if (!do_after(user, 8 SECONDS, src, DO_PUBLIC_UNIQUE)) - goto FailedAugmentImplant - user.visible_message(SPAN_DANGER("\The [src] begins to insert its payload into \the [user]'s [parent.name]!")) - if (flavor != 1) - user.custom_pain("You feel something rooting around violently inside your [parent.name]!", 160) - else - to_chat(user, SPAN_ITALIC("Your [parent.name] shifts and twitches as \the [src] works.")) - if (!flavor) - playsound(user, 'sound/effects/squelch1.ogg', 25, TRUE) - else - playsound(user, 'sound/items/jaws_pry.ogg', 50, TRUE) - if (!do_after(user, 8 SECONDS, src, DO_PUBLIC_UNIQUE)) - goto FailedAugmentImplant - user.visible_message(SPAN_WARNING("\The [src] withdraws from \the [user]'s [parent.name] and seals the [flavor != 1 ? "wound" : "hatch"].")) - if (!do_after(user, 2 SECONDS, src, DO_PUBLIC_UNIQUE)) - goto FailedAugmentImplant - parent.status &= ~ORGAN_BROKEN - parent.stage = 0 - parent.update_wounds() - var/datum/wound/wound = parent.get_incision() - if (istype(wound)) - wound.close() - if (parent.clamped()) - parent.remove_clamps() - parent.update_wounds() - success = TRUE - FailedAugmentImplant: - working = FALSE - if (!success) - user.visible_message(SPAN_DANGER("\The [src] falls away from \the [user], leaving \his [parent.name] a mangled mess!")) - parent.take_general_damage(15) - return - to_chat(user, SPAN_WARNING("\icon[src] Procedure complete. ") + SPAN_NOTICE("Have a nice day.")) - playsound(user, 'sound/machines/ping.ogg', 50, FALSE) - augment.forceMove(user) - augment.replaced(user, parent) - augment = null - - -/obj/item/device/augment_implanter/iatric_monitor - augment = /obj/item/organ/internal/augment/active/iatric_monitor/hidden - -/obj/item/device/augment_implanter/wrist_blade - augment = /obj/item/organ/internal/augment/active/item/wrist_blade - -/obj/item/device/augment_implanter/popout_shotgun - augment = /obj/item/organ/internal/augment/active/item/popout_shotgun - -/obj/item/device/augment_implanter/nerve_dampeners - augment = /obj/item/organ/internal/augment/active/nerve_dampeners - -/obj/item/device/augment_implanter/internal_air_system - augment = /obj/item/organ/internal/augment/active/internal_air_system/hidden - -/obj/item/device/augment_implanter/adaptive_binoculars - augment = /obj/item/organ/internal/augment/active/item/adaptive_binoculars/hidden - -/obj/item/device/augment_implanter/engineering_toolset - augment = /obj/item/organ/internal/augment/active/polytool/engineer - -/obj/item/device/augment_implanter/powerfist - augment = /obj/item/organ/internal/augment/active/item/powerfist/prepared diff --git a/code/modules/augment/item.dm b/code/modules/augment/item.dm deleted file mode 100644 index 34009e345de14..0000000000000 --- a/code/modules/augment/item.dm +++ /dev/null @@ -1,119 +0,0 @@ -/** -* Toggleable physical equipment augment -* Specify a path on item to create on Initialize -* Specify a slot or leave null to discover on install -*/ -/obj/item/organ/internal/augment/active/item - var/deploy_sound = 'sound/items/helmet_close.ogg' - var/retract_sound = 'sound/items/helmet_open.ogg' - var/obj/item/item - var/slot - - -/obj/item/organ/internal/augment/active/item/Initialize() - . = ..() - if (ispath(item)) - item = new item (src) - item.canremove = FALSE - - -/obj/item/organ/internal/augment/active/item/onInstall() - . = ..() - if (!slot) - switch (parent_organ) - if (BP_L_ARM, BP_L_HAND) - slot = slot_l_hand - if (BP_R_ARM, BP_R_HAND) - slot = slot_r_hand - if (BP_HEAD) - slot = slot_glasses - if (BP_CHEST) - slot = slot_wear_suit - if (BP_GROIN) - slot = slot_belt - - -/obj/item/organ/internal/augment/active/item/onRemove() - retract(FALSE) - slot = initial(slot) - ..() - - -/obj/item/organ/internal/augment/active/item/Destroy() - if (item) - GLOB.item_unequipped_event.unregister(item, src) - if (item.loc == src) - qdel(item) - else - item.canremove = TRUE - item = null - return ..() - - -/obj/item/organ/internal/augment/active/item/proc/item_dropped() - GLOB.item_unequipped_event.unregister(item, src) - if (item.loc != src) // It fell off! - item.canremove = TRUE - item = null - - -/obj/item/organ/internal/augment/active/item/proc/deploy(as_owner = TRUE) - if (!slot) - return - if (!item) - return - if (!owner.equip_to_slot_if_possible(item, slot)) - return - GLOB.item_unequipped_event.register(item, src, /obj/item/organ/internal/augment/active/item/proc/item_dropped) - if (deploy_sound) - playsound(owner, deploy_sound, 30) - if (as_owner) - owner.visible_message( - SPAN_WARNING("\The [owner] extends \his [item.name] from \his [limb.name]."), - SPAN_NOTICE("You extend your [item.name] from your [limb.name].") - ) - else - visible_message(SPAN_WARNING("\The [item.name] extend\s.")) - return TRUE - - -/obj/item/organ/internal/augment/active/item/proc/retract(as_owner = TRUE) - if (!item) - return - if (item.loc == src) - return - if (item.loc != owner) - return - var/mob/M = item.loc - if (!M.drop_from_inventory(item, src)) - to_chat(owner, "\The [item.name] fails to retract.") - return - if (retract_sound) - playsound(owner, retract_sound, 30) - if (as_owner) - M.visible_message( - SPAN_WARNING("\The [M] retracts \his [item.name] into \his [limb.name]."), - SPAN_NOTICE("You retract your [item.name] into your [limb.name].") - ) - else - visible_message(SPAN_WARNING("\The [item.name] retract\s.")) - return TRUE - - -/obj/item/organ/internal/augment/active/item/activate() - if (!can_activate()) - return - if (item.loc == src) - deploy() - else - retract() - owner.update_action_buttons() - - -/obj/item/organ/internal/augment/active/item/can_activate() - if (!..()) - return FALSE - if (!item) - to_chat(owner, SPAN_WARNING("The device is damaged and fails to deploy.")) - return FALSE - return TRUE diff --git a/code/modules/augment/passive/armor.dm b/code/modules/augment/passive/armor.dm deleted file mode 100644 index d8695936dd7cb..0000000000000 --- a/code/modules/augment/passive/armor.dm +++ /dev/null @@ -1,8 +0,0 @@ -/obj/item/organ/internal/augment/armor - name = "subdermal armor" - augment_slots = AUGMENT_ARMOR - icon_state = "armor-chest" - desc = "A flexible composite mesh designed to prevent tearing and puncturing of underlying tissue." - augment_flags = AUGMENT_MECHANICAL | AUGMENT_BIOLOGICAL | AUGMENT_SCANNABLE | AUGMENT_INSPECTABLE - var/brute_mult = 0.8 - var/burn_mult = 1 diff --git a/code/modules/augment/passive/boost.dm b/code/modules/augment/passive/boost.dm deleted file mode 100644 index dcb06131e8a93..0000000000000 --- a/code/modules/augment/passive/boost.dm +++ /dev/null @@ -1,85 +0,0 @@ -/obj/item/organ/internal/augment/boost - icon_state = "booster" - augment_slots = AUGMENT_HEAD - - /// Unique ID for collecting the right effect in skill handling - var/id - - /// Which abilities does this impact? - var/list/buffs = list() - - /// If organ is damaged, should we reduce anything? - var/list/injury_debuffs = list() - - /// Only subtypes of /datum/skill_buff/augment - var/buffpath = /datum/skill_buff/augment - - /// Mostly to control if we should remove buffs when we go - var/active = FALSE - - /// If we applied a debuff - var/debuffing = FALSE - - -/obj/item/organ/internal/augment/boost/Initialize() - . = ..() - id = "[/obj/item/organ/internal/augment/boost]_[sequential_id(/obj/item/organ/internal/augment/boost)]" - - -/obj/item/organ/internal/augment/boost/onInstall() - if (buffs.len) - var/datum/skill_buff/augment/A - A = owner.buff_skill(buffs, 0, buffpath) - if (A && istype(A)) - active = TRUE - A.id = id - - -/obj/item/organ/internal/augment/boost/onRemove() - debuffing = FALSE - if (!active) - return - for (var/datum/skill_buff/augment/D as anything in owner.fetch_buffs_of_type(buffpath, 0)) - if (D.id != id) - continue - D.remove() - return - - -/obj/item/organ/internal/augment/boost/proc/debuff() - if (!length(injury_debuffs)) - return FALSE - for (var/datum/skill_buff/augment/D as anything in owner.fetch_buffs_of_type(buffpath, 0)) - if (D.id != id) - continue - D.recalculate(injury_debuffs) - debuffing = TRUE - return TRUE - return FALSE - - -/obj/item/organ/internal/augment/boost/proc/buff() - if (!length(buffs)) - return FALSE - for (var/datum/skill_buff/augment/D as anything in owner.fetch_buffs_of_type(buffpath, 0)) - if (D.id != id) - continue - D.recalculate(buffs) - debuffing = FALSE - return TRUE - return FALSE - - -/obj/item/organ/internal/augment/boost/Process() - ..() - if (!owner) - return - if (!debuffing) - if (is_broken()) - debuff() - else if (!is_broken()) - buff() - - -/datum/skill_buff/augment - var/id diff --git a/code/modules/augment/passive/boost/muscle.dm b/code/modules/augment/passive/boost/muscle.dm deleted file mode 100644 index 2dc2583bec7fe..0000000000000 --- a/code/modules/augment/passive/boost/muscle.dm +++ /dev/null @@ -1,57 +0,0 @@ -/obj/item/organ/internal/augment/boost/muscle - buffs = list(SKILL_HAULING = 1) - buffpath = /datum/skill_buff/augment/muscle - name = "mechanical muscles" - augment_slots = AUGMENT_LEG - icon_state = "muscule" - desc = "Nanofiber tendons powered by an array of actuators increase the speed and agility of the user. You may want to install these in pairs to see a result." - augment_flags = AUGMENT_MECHANICAL | AUGMENT_BIOLOGICAL | AUGMENT_SCANNABLE | AUGMENT_INSPECTABLE - var/obj/item/organ/internal/augment/boost/muscle/other //we need two for these - - -/obj/item/organ/internal/augment/boost/muscle/proc/get_acrobatics_modifier() - if (!other?.is_broken() && !is_broken()) - return 1 - - -/obj/item/organ/internal/augment/boost/muscle/onInstall() - if (parent_organ == BP_L_LEG) - other = owner.internal_organs_by_name["[BP_R_LEG]_aug"] - else if (parent_organ == BP_R_LEG) - other = owner.internal_organs_by_name["[BP_L_LEG]_aug"] - if (other && istype(other)) //we must be second to activate buff - var/succesful = TRUE - if (owner.get_skill_value(SKILL_HAULING) < SKILL_PROF) - succesful = FALSE - var/datum/skill_buff/augment/muscle/A - A = owner.buff_skill(buffs, 0, buffpath) - if (A && istype(A)) - succesful = TRUE - A.id = id - if (succesful) - other.other = src - other.active = TRUE - active = TRUE - - -/obj/item/organ/internal/augment/boost/muscle/onRemove() - if (!active) - return - for (var/datum/skill_buff/augment/muscle/D as anything in owner.fetch_buffs_of_type(buffpath, 0)) - if (D.id != id) - continue - D.remove() - break - if (other) - other.active = FALSE - other.other = null - other = null - active = FALSE - - -/obj/item/organ/internal/augment/boost/muscle/Destroy() - . = ..() - other = null - - -/datum/skill_buff/augment/muscle diff --git a/code/modules/augment/passive/boost/reflex.dm b/code/modules/augment/passive/boost/reflex.dm deleted file mode 100644 index c14fd84cec56a..0000000000000 --- a/code/modules/augment/passive/boost/reflex.dm +++ /dev/null @@ -1,17 +0,0 @@ -/obj/item/organ/internal/augment/boost/reflex - name = "synapse interceptor" - desc = "A miniature computer with a primitive AI, this piece of engineering uses predictive algorithms and machine learning to provide near-instant response to any close combat situation." - buffs = list(SKILL_COMBAT = 1) - injury_debuffs = list(SKILL_COMBAT = -1) - - -/obj/item/organ/internal/augment/boost/reflex/buff() - . = ..() - if (.) - to_chat(owner, SPAN_NOTICE("Notice: Close combat heuristics recalibrated.")) - - -/obj/item/organ/internal/augment/boost/reflex/debuff() - . = ..() - if (.) - to_chat(owner, SPAN_WARNING("E%r00r: dAmage detect-ted to synapse connections.")) diff --git a/code/modules/augment/passive/boost/shooting.dm b/code/modules/augment/passive/boost/shooting.dm deleted file mode 100644 index 522faec960da2..0000000000000 --- a/code/modules/augment/passive/boost/shooting.dm +++ /dev/null @@ -1,17 +0,0 @@ -/obj/item/organ/internal/augment/boost/shooting - name = "gunnery booster" - desc = "Hephaestus Industries' AIM-4 model improves gun accuracy by filtering unnecessary nerve signals." - buffs = list(SKILL_WEAPONS = 1) - injury_debuffs = list(SKILL_WEAPONS = -1) - - -/obj/item/organ/internal/augment/boost/reflex/buff() - . = ..() - if (.) - to_chat(owner, SPAN_NOTICE("Notice: AIM-4 finished reboot.")) - - -/obj/item/organ/internal/augment/boost/reflex/debuff() - . = ..() - if (.) - to_chat(owner, SPAN_WARNING("Catastrophic damage detected: AIM-4 shutting down.")) diff --git a/code/modules/augment/passive/fluff.dm b/code/modules/augment/passive/fluff.dm deleted file mode 100644 index 0adf57087ea4a..0000000000000 --- a/code/modules/augment/passive/fluff.dm +++ /dev/null @@ -1,87 +0,0 @@ -/obj/item/organ/internal/augment/circadian_conditioner - name = "circadian conditioner" - augment_slots = AUGMENT_FLUFF - icon_state = "cranial_aug" - desc = "A small brain implant that carefully regulates the output of certain hormones to assist in controlling the sleep-wake cycle of its owner. May be an effective counter to insomnia, jet lag, and late-night work shifts." - augment_flags = AUGMENT_BIOLOGICAL | AUGMENT_SCANNABLE - origin_tech = list(TECH_DATA = 2, TECH_BIO = 2) - - -/obj/item/organ/internal/augment/codex_access - name = "codex access chip" - augment_slots = AUGMENT_FLUFF - icon_state = "cranial_aug" - desc = "A neuro-memetic implant or retinal chip used to grant realtime access to the Codex - a distributed encyclopedia of sorts, with editorial offices based in Venusian orbit - either via a server connection or local backups of relevant information." - origin_tech = list(TECH_DATA = 2, TECH_DATA = 2) - - -/obj/item/organ/internal/augment/neurostimulator_implant - name = "neurostimulator implant" - augment_slots = AUGMENT_FLUFF - icon_state = "cranial_aug" - desc = "An expensive implant attached to the brain's cortex, this network of signal relays sees mixed success as a treatment to lessen the impact of neurological problems such as Parkinson's disease, epilepsy, and paralysis. It can't prevent or heal brain damage on its own, and simply serves to make the life of its owner easier." - augment_flags = AUGMENT_BIOLOGICAL | AUGMENT_SCANNABLE - origin_tech = list(TECH_DATA = 2, TECH_BIO = 2) - - -/obj/item/organ/internal/augment/pain_assistant - name = "pain assistant" - augment_slots = AUGMENT_FLUFF - icon_state = "cranial_aug" - desc = "This brain implant blocks the impulses of certain nerves - usually tailored between individuals - and is used to lessen chronic pain from worn joints, headaches, and so on. It does nothing for pain that it isn't specifically tuned to handle, and is ineffective against anything stronger than a tummyache." - augment_flags = AUGMENT_BIOLOGICAL | AUGMENT_SCANNABLE - origin_tech = list(TECH_DATA = 2, TECH_BIO = 2) - - -/obj/item/organ/internal/augment/genetic_backup - name = "genetic backup" - augment_slots = AUGMENT_FLUFF - icon_state = "cranial_aug" - desc = "This implant is a compact and resilient solid-state drive. It does nothing on its own, but contains the complete DNA sequence of its owner - whether it be to aid in medical treatment, serve for research purposes, or even be used as a template for vat-grown humans in the future." - origin_tech = list(TECH_DATA = 2, TECH_BIO = 2) - - -/obj/item/organ/internal/augment/data_chip - name = "data chip" - augment_slots = AUGMENT_FLUFF - icon_state = "cranial_aug" - desc = "These durable chips can contain nonspecific data for a variety of potential uses, such as record lookups, work portfolios, authentication codes, contact information, and more. They're useful for carrying information without needing extraneous hardware, and some even see use as high-tech dog tags for private security firms or mercenary coalitions." - origin_tech = list(TECH_DATA = 2, TECH_MAGNET = 2) - - -/obj/item/organ/internal/augment/emergency_battery - name = "emergency battery" - augment_slots = AUGMENT_CHEST - icon_state = "bbattery" - desc = "A small emergency power supply. It provides no protection from power loss on its own, but might help keep your brain ticking through an otherwise critical failure." - augment_flags = AUGMENT_MECHANICAL | AUGMENT_SCANNABLE - origin_tech = list(TECH_DATA = 2, TECH_POWER = 2) - - -/obj/item/organ/internal/augment/skeletal_bracing - name = "skeletal bracing" - augment_slots = AUGMENT_ARMOR - icon_state = "skeletal_bracing" - desc = "Mechanical hinges and springs made from titanium or some other bio-compatible metal reinforce your joints, generally making strenuous activity less painful for you and allowing you to carry weight that would normally be unbearable. It provides no increase on strength on its own, unless you have weak bones to begin with." - origin_tech = list(TECH_DATA = 2, TECH_MATERIAL = 2) - augment_flags = AUGMENT_MECHANICAL | AUGMENT_BIOLOGICAL | AUGMENT_SCANNABLE | AUGMENT_INSPECTABLE - - -/obj/item/organ/internal/augment/ultraviolet_shielding - name = "ultraviolet shielding" - augment_slots = AUGMENT_ARMOR - icon_state = "skeletal_bracing" - desc = "Some parts of your epidermis have been replaced with a bio-engineered substitute that's resistant to harmful solar radiation - a common factor in the lives of spacers or inhabitants of planets with a weak magnetosphere." - origin_tech = list(TECH_DATA = 2, TECH_BIO = 2) - augment_flags = AUGMENT_BIOLOGICAL - augment_flags = AUGMENT_BIOLOGICAL | AUGMENT_SCANNABLE | AUGMENT_INSPECTABLE - - -/obj/item/organ/internal/augment/recycler_suite - name = "recycler suite" - augment_slots = AUGMENT_GROIN - icon_state = "leukosuite" - desc = "In extreme environments where natural resources are limited or even nonexistent, it may be prudent to recycle nutrients and fluids the body would usually discard. This system reclaims any usable material in the digestive tract that would otherwise be lost to waste." - augment_flags = AUGMENT_BIOLOGICAL - origin_tech = list(TECH_DATA = 2, TECH_BIO = 2) - augment_flags = AUGMENT_BIOLOGICAL | AUGMENT_SCANNABLE | AUGMENT_INSPECTABLE diff --git a/code/modules/augment/passive/nanoaura.dm b/code/modules/augment/passive/nanoaura.dm deleted file mode 100644 index 49cdf38a6a6ce..0000000000000 --- a/code/modules/augment/passive/nanoaura.dm +++ /dev/null @@ -1,76 +0,0 @@ -/obj/item/organ/internal/augment/active/nanounit - name = "Nanite MCU" - augment_slots = AUGMENT_CHEST - icon_state = "armor-chest" - desc = "Nanomachines, son." - action_button_name = "Toggle Nanomachines" - var/obj/aura/nanoaura/aura - var/charges = 4 - - -/obj/item/organ/internal/augment/active/nanounit/onInstall() - aura = new /obj/aura/nanoaura (owner, src) - - -/obj/item/organ/internal/augment/active/nanounit/onRemove() - QDEL_NULL(aura) - ..() - - -/obj/item/organ/internal/augment/active/nanounit/proc/catastrophic_failure() - playsound(owner,'sound/mecha/internaldmgalarm.ogg',25,1) - owner.visible_message(SPAN_WARNING("The nanites attempt to harden. But they seem... brittle.")) - for(var/obj/item/organ/external/E in owner.organs) - if (prob(25)) - E.status |= ORGAN_BRITTLE - to_chat(owner, SPAN_DANGER("Your [E.name] feels cold and rigid")) - QDEL_NULL(aura) - - -/obj/item/organ/internal/augment/active/nanounit/activate() - if(!aura || !can_activate()) - return - if(aura.active) - aura.active = FALSE - to_chat(owner, SPAN_NOTICE("Nanites entering sleep mode.")) - else - aura.active = TRUE - to_chat(owner, SPAN_NOTICE("Activation sequence in progress.")) - playsound(owner, 'sound/weapons/flash.ogg', 35, 1) - - -/obj/item/organ/internal/augment/active/nanounit/Destroy() - . = ..() - QDEL_NULL(aura) - - -/obj/aura/nanoaura - name = "Nanoaura" - var/obj/item/organ/internal/augment/active/nanounit/unit - var/active - - -/obj/aura/nanoaura/Initialize(maploading, obj/item/organ/internal/augment/active/nanounit/holder) - . = ..() - unit = holder - playsound(loc, 'sound/weapons/flash.ogg',35,1) - to_chat(loc, SPAN_NOTICE("Your skin tingles as the nanites spread over your body.")) - - -/obj/aura/nanoaura/bullet_act(obj/item/projectile/P, def_zone) - if (!active) - return - if (unit.charges > 0) - user.visible_message(SPAN_WARNING("The nanomachines harden as a response to physical trauma!")) - playsound(user, 'sound/effects/basscannon.ogg',35,1) - unit.charges -= 1 - if (unit.charges <= 0) - to_chat(user, SPAN_DANGER("Warning: Critical damage treshold passed. Shut down unit to avoid further damage")) - return AURA_FALSE | AURA_CANCEL - unit.catastrophic_failure() - - -/obj/aura/nanoaura/Destroy() - to_chat(user, SPAN_WARNING("\The nanites dissolve!")) - unit = null - return ..() diff --git a/code/modules/blob/blob.dm b/code/modules/blob/blob.dm deleted file mode 100644 index 081f786712205..0000000000000 --- a/code/modules/blob/blob.dm +++ /dev/null @@ -1,441 +0,0 @@ -// Types that blobs should not be allowed to attack. Primarily for gameplay reasons - No explosions or hellgas leaks for example. -#define BLOB_BANNED_TARGET_TYPES list(\ - /obj/machinery/portable_atmospherics,\ - /obj/structure/reagent_dispensers/fueltank\ -) - - -/obj/effect/blob - name = "pulsating mass" - desc = "A pulsating mass of interwoven tendrils." - icon = 'icons/mob/blob.dmi' - icon_state = "blob" - light_outer_range = 2 - light_color = BLOB_COLOR_PULS - density = TRUE - opacity = 1 - anchored = TRUE - mouse_opacity = 2 - - layer = BLOB_SHIELD_LAYER - - health_max = 30 - health_resistances = list( - DAMAGE_BRUTE = 0.23, - DAMAGE_BURN = 1.24, - DAMAGE_FIRE = 1.24, - DAMAGE_EXPLODE = 0.23, - DAMAGE_STUN = 0, - DAMAGE_EMP = 0, - DAMAGE_RADIATION = 0, - DAMAGE_BIO = 0, - DAMAGE_PAIN = 0, - DAMAGE_TOXIN = 0, - DAMAGE_GENETIC = 0, - DAMAGE_OXY = 0, - DAMAGE_BRAIN = 0 - ) - damage_hitsound = 'sound/effects/attackblob.ogg' - - var/regen_rate = 5 - var/laser_resist = 2 // Special resist for laser based weapons - Emitters or handheld energy weaponry. Damage is divided by this and THEN by fire_resist. - var/expandType = /obj/effect/blob - var/secondary_core_growth_chance = 5 //% chance to grow a secondary blob core instead of whatever was suposed to grown. Secondary cores are considerably weaker, but still nasty. - var/damage_min = 15 - var/damage_max = 30 - var/pruned = FALSE - var/product = /obj/item/blob_tendril - var/attack_freq = 5 //see proc/attempt_attack; lower is more often, min 1 - -/obj/effect/blob/Initialize() - . = ..() - START_PROCESSING(SSobj, src) - -/obj/effect/blob/Destroy() - STOP_PROCESSING(SSobj, src) - . = ..() - -/obj/effect/blob/CanPass(var/atom/movable/mover, var/turf/target, var/height = 0, var/air_group = 0) - if(air_group || height == 0) - return 1 - return 0 - -/obj/effect/blob/on_update_icon() - switch (get_damage_percentage()) - if (0 to 49) - icon_state = "blob" - else - icon_state = "blob_damaged" - -/obj/effect/blob/Process(wait, times_fired) - regen() - if(times_fired % attack_freq) - return - attempt_attack(GLOB.alldirs) - -/obj/effect/blob/on_death() - playsound(loc, 'sound/effects/splat.ogg', 50, 1) - qdel(src) - -/obj/effect/blob/post_health_change(health_mod, damage_type) - update_icon() - -/obj/effect/blob/proc/regen() - restore_health(regen_rate) - - -/obj/effect/blob/proc/expand(turf/T) - if (!istype(T) || T.turf_flags & TURF_DISALLOW_BLOB) - return - - var/damage = rand(damage_min, damage_max) - var/damage_type = pick(DAMAGE_BRUTE, DAMAGE_BURN) - - if (T.density && !T.health_dead) - visible_message(SPAN_DANGER("A tendril flies out from \the [src] and smashes into \the [T]!")) - playsound(loc, 'sound/effects/attackblob.ogg', 50, 1) - T.damage_health(damage) - return - - for (var/obj/machinery/door/D in T) - if (D.density) - if (D.is_broken()) - D.open(TRUE) - return - playsound(loc, 'sound/effects/attackblob.ogg', 50, 1) - D.take_damage(damage) - return - - var/obj/structure/foamedmetal/F = locate() in T - if (F) - qdel(F) - return - - var/obj/machinery/camera/CA = locate() in T - if (CA && !CA.is_broken()) - playsound(loc, 'sound/effects/attackblob.ogg', 50, 1) - CA.take_damage(30) - return - - var/sound_played - - for(var/mob/living/L in T) - if (L.stat == DEAD) - continue - if (!sound_played) - playsound(loc, 'sound/effects/attackblob.ogg', 50, 1) - sound_played = TRUE - attack_living(L) - - // If any atoms on the turf are dense, we should stop after the loop. This allows the blob to hit everything while stopping it from expanding onto the tile. - var/density_check = FALSE - for (var/atom/A in T) - if (A.can_damage_health(damage, damage_type) && !(A.type in BLOB_BANNED_TARGET_TYPES)) - visible_message(SPAN_DANGER("A tendril flies out from \the [src] and smashes into \the [A]!")) - if (!sound_played) - playsound(loc, 'sound/effects/attackblob.ogg', 50, 1) - A.damage_health(damage, damage_type) - if (A.density) - density_check = TRUE - - if (density_check) - return - - if (!(locate(/obj/effect/blob/core) in range(T, 2)) && prob(secondary_core_growth_chance)) - new /obj/effect/blob/core/secondary (T) - else - new expandType(T, min(get_current_health(), 30)) - - -/obj/effect/blob/proc/pulse(var/forceLeft, var/list/dirs) - sleep(4) - var/pushDir = pick(dirs) - var/turf/T = get_step(src, pushDir) - var/obj/effect/blob/B = (locate() in T) - if(!B) - if(prob(get_current_health())) - expand(T) - return - if(forceLeft) - B.pulse(forceLeft - 1, dirs) - -/obj/effect/blob/proc/attack_living(var/mob/living/L) - if(!L) - return - var/blob_damage = pick(DAMAGE_BRUTE, DAMAGE_BURN) - L.visible_message(SPAN_DANGER("A tendril flies out from \the [src] and smashes into \the [L]!"), SPAN_DANGER("A tendril flies out from \the [src] and smashes into you!")) - playsound(loc, 'sound/effects/attackblob.ogg', 50, 1) - L.apply_damage(rand(damage_min, damage_max), blob_damage, used_weapon = "blob tendril") - -/obj/effect/blob/proc/attempt_attack(var/list/dirs) - var/attackDir = pick(dirs) - var/turf/T = get_step(src, attackDir) - for(var/mob/living/victim in T) - if(victim.stat == DEAD) - continue - attack_living(victim) - -/obj/effect/blob/bullet_act(obj/item/projectile/Proj) - if(!Proj) - return - var/damage = Proj.damage - if (Proj.damage_type == DAMAGE_BURN) - damage = round(damage / laser_resist) - playsound(damage_hitsound, src, 75) - damage_health(damage, Proj.damage_type) - return 0 - -/obj/effect/blob/attackby(obj/item/W, mob/user) - if (user.a_intent == I_HURT) - if(isWelder(W)) - playsound(loc, 'sound/items/Welder.ogg', 100, 1) - ..() - return - - if (isWirecutter(W)) - if(prob(user.skill_fail_chance(SKILL_SCIENCE, 90, SKILL_EXPERT))) - to_chat(user, SPAN_WARNING("You fail to collect a sample from \the [src].")) - else - if(!pruned) - to_chat(user, SPAN_NOTICE("You collect a sample from \the [src].")) - new product(user.loc) - pruned = TRUE - else - to_chat(user, SPAN_WARNING("\The [src] has already been pruned.")) - return - - ..() - -/obj/effect/blob/core - name = "master nucleus" - desc = "A massive, fragile nucleus guarded by a shield of thick tendrils." - icon_state = "blob_core" - damage_min = 30 - damage_max = 40 - expandType = /obj/effect/blob/shield - product = /obj/item/blob_tendril/core - health_max = 450 - - light_color = BLOB_COLOR_CORE - layer = BLOB_CORE_LAYER - - var/growth_range = 8 // Maximal distance for new blob pieces from this core. - var/blob_may_process = 1 - var/reported_low_damage = FALSE - var/times_to_pulse = 0 - - /// Health state tracker to prevent redundant var updates in `process_core_health() - var/core_health_state = null - -/* -the master core becomes more vulnereable to damage as it weakens, -but it also becomes more aggressive, and channels more of its energy into regenerating rather than spreading -regen() will cover update_icon() for this proc -*/ -/obj/effect/blob/core/proc/process_core_health() - switch (get_damage_percentage()) - if (0 to 24) - if (core_health_state == 4) - return - core_health_state = 4 - set_damage_resistance(DAMAGE_BRUTE, 0.29) - set_damage_resistance(DAMAGE_EXPLODE, 0.29) - set_damage_resistance(DAMAGE_BURN, 0.5) - set_damage_resistance(DAMAGE_FIRE, 0.5) - attack_freq = 5 - regen_rate = 2 - times_to_pulse = 4 - if(reported_low_damage) - report_shield_status("high") - if (25 to 49) - if (core_health_state == 3) - return - core_health_state = 3 - set_damage_resistance(DAMAGE_BRUTE, 0.4) - set_damage_resistance(DAMAGE_EXPLODE, 0.4) - set_damage_resistance(DAMAGE_BURN, 0.67) - set_damage_resistance(DAMAGE_FIRE, 0.67) - attack_freq = 4 - regen_rate = 3 - times_to_pulse = 3 - if (35 to 74) - if (core_health_state == 2) - return - core_health_state = 2 - remove_damage_resistance(DAMAGE_BRUTE) - remove_damage_resistance(DAMAGE_EXPLODE) - set_damage_resistance(DAMAGE_BURN, 1.25) - set_damage_resistance(DAMAGE_FIRE, 1.25) - attack_freq = 3 - regen_rate = 4 - times_to_pulse = 2 - else - if (core_health_state == 1) - return - core_health_state = 1 - set_damage_resistance(DAMAGE_BRUTE, 2) - set_damage_resistance(DAMAGE_EXPLODE, 2) - set_damage_resistance(DAMAGE_BURN, 6.67) - set_damage_resistance(DAMAGE_FIRE, 6.67) - regen_rate = 5 - times_to_pulse = 1 - if(!reported_low_damage) - report_shield_status("low") - -/obj/effect/blob/core/proc/report_shield_status(var/status) - if(status == "low") - visible_message(SPAN_DANGER("The [src]'s tendril shield fails, leaving the nucleus vulnerable!"), 3) - reported_low_damage = TRUE - if(status == "high") - visible_message(SPAN_NOTICE("The [src]'s tendril shield seems to have fully reformed."), 3) - reported_low_damage = FALSE - -// Rough icon state changes that reflect the core's health -/obj/effect/blob/core/on_update_icon() - switch (get_damage_percentage()) - if(0 to 32) - icon_state = "blob_core" - if(33 to 65) - icon_state = "blob_node" - else - icon_state = "blob_factory" - -/obj/effect/blob/core/Process() - set waitfor = 0 - if(!blob_may_process) - return - blob_may_process = 0 - sleep(0) - process_core_health() - regen() - for(var/I in 1 to times_to_pulse) - pulse(20, GLOB.alldirs) - attempt_attack(GLOB.alldirs) - attempt_attack(GLOB.alldirs) - blob_may_process = 1 - -// Blob has a very small probability of growing these when spreading. These will spread the blob further. -/obj/effect/blob/core/secondary - name = "auxiliary nucleus" - desc = "An interwoven mass of tendrils. A glowing nucleus pulses at its center." - icon_state = "blob_node" - regen_rate = 1 - growth_range = 4 - damage_min = 15 - damage_max = 20 - layer = BLOB_NODE_LAYER - product = /obj/item/blob_tendril/core/aux - times_to_pulse = 4 - health_max = 125 - -/obj/effect/blob/core/secondary/process_core_health() - return - -/obj/effect/blob/core/secondary/on_update_icon() - switch (get_damage_percentage()) - if (0 to 49) - icon_state = "blob_node" - else - icon_state = "blob_factory" - -/obj/effect/blob/shield - name = "shielding mass" - desc = "A pulsating mass of interwoven tendrils. These seem particularly robust, but not quite as active." - icon_state = "blob_idle" - damage_min = 13 - damage_max = 25 - attack_freq = 7 - regen_rate = 4 - expandType = /obj/effect/blob/ravaging - light_color = BLOB_COLOR_SHIELD - health_max = 120 - -/obj/effect/blob/shield/New() - ..() - update_nearby_tiles() - -/obj/effect/blob/shield/Destroy() - set_density(0) - update_nearby_tiles() - ..() - -/obj/effect/blob/shield/on_update_icon() - switch (get_damage_percentage()) - if (0 to 32) - icon_state = "blob_idle" - if (33 to 65) - icon_state = "blob" - else - icon_state = "blob_damaged" - -/obj/effect/blob/shield/CanPass(var/atom/movable/mover, var/turf/target, var/height = 0, var/air_group = 0) - return !density - -/obj/effect/blob/ravaging - name = "ravaging mass" - desc = "A mass of interwoven tendrils. They thrash around haphazardly at anything in reach." - damage_min = 27 - damage_max = 36 - attack_freq = 3 - light_color = BLOB_COLOR_RAV - color = "#ffd400" //Temporary, for until they get a new sprite. - health_max = 20 - -//produce -/obj/item/blob_tendril - name = "asteroclast tendril" - desc = "A tendril removed from an asteroclast. It's entirely lifeless." - icon = 'icons/mob/blob.dmi' - icon_state = "tendril" - item_state = "blob_tendril" - w_class = ITEM_SIZE_LARGE - attack_verb = list("smacked", "smashed", "whipped") - var/is_tendril = TRUE - var/types_of_tendril = list("solid", "fire") - -/obj/item/blob_tendril/Initialize() - . = ..() - if(is_tendril) - var/tendril_type - tendril_type = pick(types_of_tendril) - switch(tendril_type) - if("solid") - desc = "An incredibly dense, yet flexible, tendril, removed from an asteroclast." - force = 10 - color = COLOR_BRONZE - origin_tech = list(TECH_MATERIAL = 2) - if("fire") - desc = "A tendril removed from an asteroclast. It's hot to the touch." - damtype = DAMAGE_BURN - force = 15 - color = COLOR_AMBER - origin_tech = list(TECH_POWER = 2) - -/obj/item/blob_tendril/afterattack(obj/O, mob/user, proximity) - if(!proximity) - return - if(is_tendril && prob(50)) - force-- - if(force <= 0) - visible_message(SPAN_NOTICE("\The [src] crumbles apart!")) - user.drop_from_inventory(src) - new /obj/effect/decal/cleanable/ash(src.loc) - qdel(src) - -/obj/item/blob_tendril/core - name = "asteroclast nucleus sample" - desc = "A sample taken from an asteroclast's nucleus. It pulses with energy." - icon_state = "core_sample" - item_state = "blob_core" - w_class = ITEM_SIZE_NORMAL - origin_tech = list(TECH_MATERIAL = 4, TECH_BLUESPACE = 5, TECH_BIO = 7) - is_tendril = FALSE - -/obj/item/blob_tendril/core/aux - name = "asteroclast auxiliary nucleus sample" - desc = "A sample taken from an asteroclast's auxiliary nucleus." - icon_state = "core_sample_2" - origin_tech = list(TECH_MATERIAL = 2, TECH_BLUESPACE = 3, TECH_BIO = 4) - - -#undef BLOB_BANNED_TARGET_TYPES diff --git a/code/modules/butchery/butchery.dm b/code/modules/butchery/butchery.dm deleted file mode 100644 index 7ad64eb416d23..0000000000000 --- a/code/modules/butchery/butchery.dm +++ /dev/null @@ -1,218 +0,0 @@ -#define CARCASS_EMPTY "empty" -#define CARCASS_FRESH "fresh" -#define CARCASS_SKINNED "skinned" -#define CARCASS_JOINTED "jointed" - -/mob/living/var/meat_type = /obj/item/reagent_containers/food/snacks/meat -/mob/living/var/meat_amount = 3 -/mob/living/var/skin_material = MATERIAL_SKIN_GENERIC -/mob/living/var/skin_amount = 3 -/mob/living/var/bone_material = MATERIAL_BONE_GENERIC -/mob/living/var/bone_amount = 3 -/mob/living/var/skull_type -/mob/living/var/butchery_rotation = 90 - -/mob/living/carbon/human/butchery_rotation = 180 - -// Harvest an animal's delicious byproducts -/mob/living/proc/harvest_meat() - . = list() - var/effective_meat_type = isSynthetic() ? /obj/item/stack/material/steel : meat_type - if(!effective_meat_type || !meat_amount) - return - blood_splatter(get_turf(src), src, large = TRUE) - var/meat_count = 0 - for(var/i=0;i 0) - var/reagent_split = round(reagents.total_volume/meat_count,1) - for(var/obj/item/reagent_containers/food/snacks/meat/slab in .) - reagents.trans_to_obj(slab, reagent_split) - -/mob/living/carbon/human/harvest_meat() - . = ..() - for(var/obj/item/organ/internal/I in internal_organs) - I.removed() - . += I - -/mob/living/proc/harvest_skin() - . = list() - if(skin_material && skin_amount) - var/material/M = SSmaterials.get_material_by_name(skin_material) - . += new M.stack_type(get_turf(src), skin_amount, skin_material) - blood_splatter(get_turf(src), src, large = TRUE) - -/mob/living/proc/harvest_bones() - . = list() - var/turf/T = get_turf(src) - if(bone_material && bone_amount) - var/material/M = SSmaterials.get_material_by_name(bone_material) - . += new M.stack_type(T, bone_amount, bone_material) - blood_splatter(T, src, large = TRUE) - if(skull_type) - . += new skull_type(T) - -// Structure for conducting butchery on. -/obj/structure/kitchenspike - name = "meat hook" - desc = "It looks pretty sharp." - anchored = TRUE - density = TRUE - icon = 'icons/obj/butchery.dmi' - icon_state = "spike" - - var/mob/living/occupant - var/occupant_state = CARCASS_EMPTY - var/secures_occupant = TRUE - var/busy = FALSE - -/obj/structure/kitchenspike/return_air() - var/turf/T = get_turf(src) - if(istype(T)) - return T.return_air() - -/obj/structure/kitchenspike/improvised - name = "truss" - icon_state = "improvised" - secures_occupant = FALSE - -/obj/structure/kitchenspike/attack_hand(var/mob/user) - - if(!occupant) - return ..() - - if(occupant_state == CARCASS_FRESH) - visible_message(SPAN_NOTICE("\The [user] removes \the [occupant] from \the [src].")) - occupant.forceMove(get_turf(src)) - occupant = null - occupant_state = CARCASS_EMPTY - busy = FALSE - update_icon() - else - to_chat(user, SPAN_WARNING("\The [occupant] is so badly mangled that removing them from \the [src] would be pointless.")) - return - -/obj/structure/kitchenspike/MouseDrop_T(var/mob/target, var/mob/user) - try_spike(target, user) - -/obj/structure/kitchenspike/proc/try_spike(var/mob/living/target, var/mob/living/user) - if(!istype(target) || !Adjacent(user) || user.incapacitated()) - return - - if(!target.stat) - to_chat(user, SPAN_WARNING("\The [target] won't stop moving around!")) - return - - if(occupant) - to_chat(user, SPAN_WARNING("\The [src] already has a carcass on it.")) - return - - if(suitable_for_butchery(target)) - - user.visible_message(SPAN_WARNING("\The [user] begins wrestling \the [target] onto \the [src].")) - if(!do_after(user, 3 SECONDS, target, DO_PUBLIC_UNIQUE) || occupant || !target || QDELETED(target) || target.stat == CONSCIOUS || !target.Adjacent(user)) - return - - if(secures_occupant) - user.visible_message(SPAN_DANGER("\The [user] impales \the [target] on \the [src]!")) - target.adjustBruteLoss(rand(30, 45)) - else - user.visible_message(SPAN_DANGER("\The [user] hangs \the [target] from \the [src]!")) - - target.forceMove(src) - occupant = target - occupant_state = CARCASS_FRESH - update_icon() - else - to_chat(user, SPAN_WARNING("You cannot butcher \the [target].")) - -/obj/structure/kitchenspike/proc/suitable_for_butchery(var/mob/living/victim) - return istype(victim) && ((victim.meat_type && victim.meat_amount) || (victim.skin_material && victim.skin_amount) || (victim.bone_material && victim.bone_amount)) - -/obj/structure/kitchenspike/on_update_icon() - overlays.Cut() - if(occupant) - occupant.set_dir(SOUTH) - var/image/I = image(null) - I.appearance = occupant - I.SetTransform(rotation = occupant.butchery_rotation) - overlays += I - -/obj/structure/kitchenspike/mob_breakout(mob/living/escapee) - . = ..() - if(secures_occupant) - escapee.visible_message(SPAN_WARNING("\The [escapee] begins writhing free of \the [src]!")) - if(!do_after(escapee, 5 SECONDS, src, DO_DEFAULT | DO_USER_UNIQUE_ACT | DO_PUBLIC_PROGRESS)) - return FALSE - escapee.visible_message(SPAN_DANGER("\The [escapee] escapes from \the [src]!")) - escapee.dropInto(loc) - if(escapee == occupant) - occupant = null - occupant_state = CARCASS_EMPTY - update_icon() - return TRUE - -/obj/structure/kitchenspike/proc/set_carcass_state(var/_state) - occupant_state = _state - if(occupant) - occupant.adjustBruteLoss(rand(50,60)) - if(occupant.stat != DEAD) - occupant.death() - if(QDELETED(occupant)) - occupant = null - occupant_state = CARCASS_EMPTY - else if(occupant_state == CARCASS_EMPTY) - for(var/obj/item/W in occupant) - occupant.drop_from_inventory(W) - QDEL_NULL(occupant) - update_icon() - -/obj/structure/kitchenspike/proc/do_butchery_step(var/mob/user, var/next_state, var/butchery_string) - - if(QDELETED(occupant)) - return FALSE - - var/last_state = occupant_state - var/mob/living/last_occupant = occupant - - user.visible_message(SPAN_NOTICE("\The [user] begins [butchery_string] \the [occupant].")) - occupant.adjustBruteLoss(rand(50,60)) - update_icon() - - if(do_after(user, 3 SECONDS, src, DO_PUBLIC_UNIQUE) && !QDELETED(user) && !QDELETED(last_occupant) && occupant == last_occupant && occupant_state == last_state) - user.visible_message(SPAN_NOTICE("\The [user] finishes [butchery_string] \the [occupant].")) - switch(next_state) - if(CARCASS_SKINNED) - occupant.harvest_skin() - if(CARCASS_JOINTED) - occupant.harvest_bones() - if(CARCASS_EMPTY) - occupant.harvest_meat() - set_carcass_state(next_state) - return TRUE - return FALSE - -/obj/structure/kitchenspike/attackby(var/obj/item/thing, var/mob/user) - if(!thing.sharp) - return ..() - if(!occupant) - to_chat(user, SPAN_WARNING("There is nothing on \the [src] to butcher.")) - return - if(!busy) - busy = TRUE - switch(occupant_state) - if(CARCASS_FRESH) - do_butchery_step(user, CARCASS_SKINNED, "skinning") - if(CARCASS_SKINNED) - do_butchery_step(user, CARCASS_JOINTED, "deboning") - if(CARCASS_JOINTED) - do_butchery_step(user, CARCASS_EMPTY, "butchering") - busy = FALSE - -#undef CARCASS_EMPTY -#undef CARCASS_FRESH -#undef CARCASS_SKINNED -#undef CARCASS_JOINTED diff --git a/code/modules/butchery/remains.dm b/code/modules/butchery/remains.dm deleted file mode 100644 index f917c1a055fea..0000000000000 --- a/code/modules/butchery/remains.dm +++ /dev/null @@ -1,12 +0,0 @@ -/obj/item/bone - icon = 'icons/obj/butchery.dmi' - var/bone_amt = 1 - -/obj/item/bone/skull - name = "skull" - desc = "Looks like someone lost their head." - bone_amt = 3 - -/obj/item/bone/skull/deer - name = "deer skull" - icon_state = "deer_skull" diff --git a/code/modules/client/asset_cache.dm b/code/modules/client/asset_cache.dm deleted file mode 100644 index 07077e0aa82c5..0000000000000 --- a/code/modules/client/asset_cache.dm +++ /dev/null @@ -1,285 +0,0 @@ -/* -Asset cache quick users guide: - -Make a datum at the bottom of this file with your assets for your thing. -The simple subsystem will most like be of use for most cases. -Then call get_asset_datum() with the type of the datum you created and store the return -Then call .send(client) on that stored return value. - -You can set verify to TRUE if you want send() to sleep until the client has the assets. -*/ - - -// Amount of time(ds) MAX to send per asset, if this get exceeded we cancel the sleeping. -// This is doubled for the first asset, then added per asset after -#define ASSET_CACHE_SEND_TIMEOUT 7 - -//When sending mutiple assets, how many before we give the client a quaint little sending resources message -#define ASSET_CACHE_TELL_CLIENT_AMOUNT 8 - -/client - var/list/cache = list() // List of all assets sent to this client by the asset cache. - var/list/completed_asset_jobs = list() // List of all completed jobs, awaiting acknowledgement. - var/list/sending = list() - var/last_asset_job = 0 // Last job done. - -//This proc sends the asset to the client, but only if it needs it. -//This proc blocks(sleeps) unless verify is set to false -/proc/send_asset(var/client/client, var/asset_name, var/verify = TRUE, var/check_cache = TRUE) - if(!istype(client)) - if(ismob(client)) - var/mob/M = client - if(M.client) - client = M.client - - else - return 0 - - else - return 0 - - if(check_cache && (client.cache.Find(asset_name) || client.sending.Find(asset_name))) - return 0 - - var/decl/asset_cache/asset_cache = decls_repository.get_decl(/decl/asset_cache) - send_rsc(client, asset_cache.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 - return 1 - if (!client) - return 0 - - client.sending |= asset_name - var/job = ++client.last_asset_job - - show_browser(client, "", "window=asset_cache_browser") - - var/t = 0 - var/timeout_time = (ASSET_CACHE_SEND_TIMEOUT * client.sending.len) + ASSET_CACHE_SEND_TIMEOUT - while(client && !client.completed_asset_jobs.Find(job) && t < timeout_time) // Reception is handled in Topic() - sleep(1) // Lock up the caller until this is received. - t++ - - if(client) - client.sending -= asset_name - client.cache |= asset_name - client.completed_asset_jobs -= job - - return 1 - -//This proc blocks(sleeps) unless verify is set to false -/proc/send_asset_list(var/client/client, var/list/asset_list, var/verify = TRUE) - if(!istype(client)) - if(ismob(client)) - var/mob/M = client - if(M.client) - client = M.client - - else - return 0 - - else - return 0 - - var/list/unreceived = asset_list - (client.cache + client.sending) - if(!unreceived || !unreceived.len) - return 0 - if (unreceived.len >= ASSET_CACHE_TELL_CLIENT_AMOUNT) - to_chat(client, "Sending Resources...") - var/decl/asset_cache/asset_cache = decls_repository.get_decl(/decl/asset_cache) - for(var/asset in unreceived) - if (asset in asset_cache.cache) - send_rsc(client, asset_cache.cache[asset], asset) - - if(!verify || !winexists(client, "asset_cache_browser")) // Can't access the asset cache browser, rip. - if (client) - client.cache += unreceived - return 1 - if (!client) - return 0 - client.sending |= unreceived - var/job = ++client.last_asset_job - - show_browser(client, "", "window=asset_cache_browser") - - var/t = 0 - var/timeout_time = ASSET_CACHE_SEND_TIMEOUT * client.sending.len - while(client && !client.completed_asset_jobs.Find(job) && t < timeout_time) // Reception is handled in Topic() - sleep(1) // Lock up the caller until this is received. - t++ - - if(client) - client.sending -= unreceived - client.cache |= unreceived - client.completed_asset_jobs -= job - - return 1 - -//This proc will download the files without clogging up the browse() queue, used for passively sending files on connection start. -//The proc calls procs that sleep for long times. -/proc/getFilesSlow(var/client/client, var/list/files, var/register_asset = TRUE) - for(var/file in files) - if (!client) - break - if (register_asset) - register_asset(file,files[file]) - send_asset(client,file) - sleep(0) //queuing calls like this too quickly can cause issues in some client versions - -//This proc "registers" an asset, it adds it to the cache for further use, you cannot touch it from this point on or you'll fuck things up. -//if it's an icon or something be careful, you'll have to copy it before further use. -/proc/register_asset(var/asset_name, var/asset) - var/decl/asset_cache/asset_cache = decls_repository.get_decl(/decl/asset_cache) - asset_cache.cache[asset_name] = asset - -//Generated names do not include file extention. -//Used mainly for code that deals with assets in a generic way -//The same asset will always lead to the same asset name -/proc/generate_asset_name(file) - return "asset.[md5(fcopy_rsc(file))]" - -//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() - -//get a assetdatum or make a new one -/proc/get_asset_datum(var/type) - if (!(type in asset_datums)) - return new type() - return asset_datums[type] - -/datum/asset/New() - asset_datums[type] = src - register() - -/datum/asset/proc/register() - return - -/datum/asset/proc/send(client) - return - -//If you don't need anything complicated. -/datum/asset/simple - var/assets = list() - var/verify = FALSE - -/datum/asset/simple/register() - for(var/asset_name in assets) - register_asset(asset_name, assets[asset_name]) - -/datum/asset/simple/send(client) - send_asset_list(client,assets,verify) - -// For registering or sending multiple others at once -/datum/asset/group - var/list/children - -/datum/asset/group/register() - for(var/type in children) - get_asset_datum(type) - -/datum/asset/group/send(client/C) - for(var/type in children) - var/datum/asset/A = get_asset_datum(type) - A.send(C) - -//DEFINITIONS FOR ASSET DATUMS START HERE. -/datum/asset/nanoui - var/list/common = list() - - var/list/common_dirs = list( - "nano/css/", - "nano/images/", - "nano/images/status_icons/", - "nano/images/modular_computers/", - "nano/js/" - ) - var/list/uncommon_dirs = list( - "nano/templates/" - ) - -/datum/asset/nanoui/register() - // Crawl the directories to find files. - for (var/path in common_dirs) - var/list/filenames = flist(path) - for(var/filename in filenames) - if(copytext_char(filename, -1) != "/") // Ignore directories. - if(fexists(path + filename)) - common[filename] = fcopy_rsc(path + filename) - register_asset(filename, common[filename]) - for (var/path in uncommon_dirs) - var/list/filenames = flist(path) - for(var/filename in filenames) - if(copytext_char(filename, -1) != "/") // Ignore directories. - if(fexists(path + filename)) - register_asset(filename, fcopy_rsc(path + filename)) - - var/list/mapnames = list() - for(var/z in GLOB.using_map.map_levels) - mapnames += map_image_file_name(z) - - var/list/filenames = flist(MAP_IMAGE_PATH) - for(var/filename in filenames) - if(copytext_char(filename, -1) != "/") // Ignore directories. - var/file_path = MAP_IMAGE_PATH + filename - if((filename in mapnames) && fexists(file_path)) - common[filename] = fcopy_rsc(file_path) - register_asset(filename, common[filename]) - -/datum/asset/nanoui/send(client, uncommon) - if(!islist(uncommon)) - uncommon = list(uncommon) - - send_asset_list(client, uncommon, FALSE) - send_asset_list(client, common, TRUE) - -/datum/asset/group/goonchat - children = list( - /datum/asset/simple/jquery, - /datum/asset/simple/goonchat, - /datum/asset/simple/fontawesome - ) - -/datum/asset/simple/jquery - verify = FALSE - assets = list( - "jquery.min.js" = 'code/modules/goonchat/browserassets/js/jquery.min.js', - ) - -/datum/asset/simple/goonchat - verify = TRUE - assets = list( - "json2.min.js" = 'code/modules/goonchat/browserassets/js/json2.min.js', - "browserOutput.js" = 'code/modules/goonchat/browserassets/js/browserOutput.js', - "browserOutput.css" = 'code/modules/goonchat/browserassets/css/browserOutput.css', - "browserOutput_white.css" = 'code/modules/goonchat/browserassets/css/browserOutput_white.css' - ) - -/datum/asset/simple/fontawesome - verify = FALSE - assets = list( - "fa-regular-400.eot" = 'html/font-awesome/webfonts/fa-regular-400.eot', - "fa-regular-400.woff" = 'html/font-awesome/webfonts/fa-regular-400.woff', - "fa-solid-900.eot" = 'html/font-awesome/webfonts/fa-solid-900.eot', - "fa-solid-900.woff" = 'html/font-awesome/webfonts/fa-solid-900.woff', - "font-awesome.css" = 'html/font-awesome/css/all.min.css', - "v4shim.css" = 'html/font-awesome/css/v4-shims.min.css' - ) - -/* - Asset cache -*/ -/decl/asset_cache - var/list/cache = list() - -/decl/asset_cache/proc/load() - 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 GLOB.clients) // This is also called in client/New, but as we haven't initialized the cache until now, and it's possible the client is already connected, we risk doing it twice. - // Doing this to a client too soon after they've connected can cause issues, also the proc we call sleeps. - spawn(10) - getFilesSlow(C, cache, FALSE) diff --git a/code/modules/client/client_color.dm b/code/modules/client/client_color.dm deleted file mode 100644 index 26b2bc42e41f6..0000000000000 --- a/code/modules/client/client_color.dm +++ /dev/null @@ -1,112 +0,0 @@ -/datum/client_color - var/client_color = "" //Any client.color-valid value - var/priority = 1 //Since only one client.color can be rendered on screen, we take the one with the highest priority value: - //eg: "Bloody screen" > "goggles color" as the former is much more important - var/override = FALSE //If set to override we will stop multiplying the moment we get here. NOTE: Priority remains, if your override is on position 4, the other 3 will still have a say. - - -/mob - var/list/client_colors = list() - - - -/* - Adds an instance of color_type to the mob's client_colors list - color_type - a typepath (subtyped from /datum/client_color) -*/ -/mob/proc/has_client_color(color_type) - if(!ispath(/datum/client_color) || !LAZYLEN(client_colors)) - return FALSE - for(var/thing in client_colors) - var/datum/client_color/col = thing - if(col.type == color_type) - return TRUE - return FALSE - -/mob/proc/add_client_color(color_type) - if(!has_client_color(color_type)) - var/datum/client_color/CC = new color_type() - client_colors |= CC - sortTim(client_colors, /proc/cmp_clientcolor_priority) - update_client_color() - - -/* - Removes an instance of color_type from the mob's client_colors list - color_type - a typepath (subtyped from /datum/client_color) - returns true if instance was found, false otherwise -*/ -/mob/proc/remove_client_color(color_type) - if(!ispath(/datum/client_color)) - return FALSE - - var/result = FALSE - for(var/cc in client_colors) - var/datum/client_color/CC = cc - if(CC.type == color_type) - result = TRUE - client_colors -= CC - qdel(CC) - break - update_client_color() - return result - - -/* - Resets the mob's client.color to null, and then sets it to the highest priority - client_color datum, if one exists -*/ -/mob/proc/update_client_color() - if(!client) - return - client.color = null - if(!client_colors.len) - return - var/list/c = list(1,0,0, 0,1,0, 0,0,1) //Star at normal - for(var/datum/client_color/CC in client_colors) - //Matrix multiplication newcolor * current - var/list/current = c.Copy() - - for(var/m = 1; m <= 3; m += 1) //For each row - for(var/i = 1; i <= 3; i += 1) //go over each column of the second matrix - var/sum = 0 - for(var/j = 1; j <= 3; j += 1) //multiply each pair - sum += CC.client_color[(m-1)*3 + j] * current[(j-1)*3 + i] - - c[(m-1)*3 + i] = sum - - if(CC.override) - break - - animate(client, color = c) - -/datum/client_color/monochrome - client_color = list(0.33,0.33,0.33, 0.33,0.33,0.33, 0.33,0.33,0.33) - priority = 100 - -//Similar to monochrome but shouldn't look as flat, same priority -/datum/client_color/noir - client_color = list(0.299,0.299,0.299, 0.587,0.587,0.587, 0.114,0.114,0.114) - priority = 200 - -/datum/client_color/thirdeye - client_color = list(0.1, 0.1, 0.1, 0.2, 0.2, 0.2, 0.05, 0.05, 0.05) - priority = 300 - -//Disabilities, could be hooked to brain damage or chargen if so desired. -/datum/client_color/deuteranopia - client_color = list(0.47,0.38,0.15, 0.54,0.31,0.15, 0,0.3,0.7) - priority = 100 - -/datum/client_color/protanopia - client_color = list(0.51,0.4,0.12, 0.49,0.41,0.12, 0,0.2,0.76) - priority = 100 - -/datum/client_color/tritanopia - client_color = list(0.95,0.07,0, 0,0.44,0.52, 0.05,0.49,0.48) - priority = 100 - -/datum/client_color/berserk - client_color = "#af111c" - priority = INFINITY //This effect sort of exists on its own you /have/ to be seeing RED - override = TRUE //Because multiplying this will inevitably fail \ No newline at end of file diff --git a/code/modules/client/client_defines.dm b/code/modules/client/client_defines.dm deleted file mode 100644 index df62aa64f3558..0000000000000 --- a/code/modules/client/client_defines.dm +++ /dev/null @@ -1,61 +0,0 @@ -/client - ////////////////////// - //BLACK MAGIC THINGS// - ////////////////////// - parent_type = /datum - //////////////// - //ADMIN THINGS// - //////////////// - var/datum/admins/holder = null - var/datum/admins/deadmin_holder = null - - ///////// - //OTHER// - ///////// - var/datum/preferences/prefs = null - var/adminobs = null - - var/adminhelped = 0 - - var/staffwarn = null - - /////////////// - //SOUND STUFF// - /////////////// - - /// Whether or not the client is currently playing the "ship hum" ambience sound. - var/playing_vent_ambience = FALSE - - /// The next threshold time for the client to be able to play basic ambience sounds. - var/next_ambience_time = 0 - - - //////////// - //SECURITY// - //////////// - // comment out the line below when debugging locally to enable the options & messages menu - //control_freak = 1 - - var/received_irc_pm = -99999 - var/irc_admin //IRC admin that spoke with them last. - var/mute_irc = 0 - var/warned_about_multikeying = 0 // Prevents people from being spammed about multikeying every time their mob changes. - - //////////////////////////////////// - //things that require the database// - //////////////////////////////////// - var/player_age = "Requires database" //So admins know why it isn't working - Used to determine how old the account is - in days. - var/related_accounts_ip = "Requires database" //So admins know why it isn't working - Used to determine what other accounts previously logged in from this ip - var/related_accounts_cid = "Requires database" //So admins know why it isn't working - Used to determine what other accounts previously logged in from this computer id - - /* - As of byond 512, due to how broken preloading is, preload_rsc MUST be set to 1 at compile time if resource URLs are *not* in use, - BUT you still want resource preloading enabled (from the server itself). If using resource URLs, it should be set to 0 and - changed to a URL at runtime (see client_procs.dm for procs that do this automatically). More information about how goofy this broken setting works at - http://www.byond.com/forum/post/1906517?page=2#comment23727144 - */ - preload_rsc = 0 - - var/fullscreen = FALSE - - var/datum/click_handler/CH diff --git a/code/modules/client/client_helpers.dm b/code/modules/client/client_helpers.dm deleted file mode 100644 index 9d2d882d1a65c..0000000000000 --- a/code/modules/client/client_helpers.dm +++ /dev/null @@ -1,14 +0,0 @@ -/datum/proc/get_client() - return null - -/client/get_client() - return src - -/mob/get_client() - return client - -/mob/observer/eye/get_client() - . = client || (owner && owner.get_client()) - -/mob/observer/virtual/get_client() - return host.get_client() diff --git a/code/modules/client/client_procs.dm b/code/modules/client/client_procs.dm deleted file mode 100644 index d45cfed438984..0000000000000 --- a/code/modules/client/client_procs.dm +++ /dev/null @@ -1,485 +0,0 @@ - //////////// - //SECURITY// - //////////// -#define UPLOAD_LIMIT 10485760 //Restricts client uploads to the server to 10MB //Boosted this thing. What's the worst that can happen? - -//#define TOPIC_DEBUGGING 1 - - /* - When somebody clicks a link in game, this Topic is called first. - It does the stuff in this proc and then is redirected to the Topic() proc for the src=[0xWhatever] - (if specified in the link). ie locate(hsrc).Topic() - - Such links can be spoofed. - - Because of this certain things MUST be considered whenever adding a Topic() for something: - - Can it be fed harmful values which could cause runtimes? - - Is the Topic call an admin-only thing? - - If so, does it have checks to see if the person who called it (usr.client) is an admin? - - Are the processes being called by Topic() particularly laggy? - - If so, is there any protection against somebody spam-clicking a link? - If you have any questions about this stuff feel free to ask. ~Carn - */ -/client/Topic(href, href_list, hsrc) - if(!usr || usr != mob) //stops us calling Topic for somebody else's client. Also helps prevent usr=null - return - if(!user_acted(src)) - return - - #if defined(TOPIC_DEBUGGING) - log_debug("[src]'s Topic: [href] destined for [hsrc].") - - if(href_list["nano_err"]) //nano throwing errors - log_debug("## NanoUI, Subject [src]: " + html_decode(href_list["nano_err"]))//NANO DEBUG HOOK - - - #endif - - // asset_cache - if(href_list["asset_cache_confirm_arrival"]) -// to_chat(src, "ASSET JOB [href_list["asset_cache_confirm_arrival"]] ARRIVED.") - var/job = text2num(href_list["asset_cache_confirm_arrival"]) - completed_asset_jobs += job - return - - //search the href for script injection - if( findtext(href,"You are no longer able to use this, it's been more then 10 minutes since an admin on IRC has responded to you") - return - if(mute_irc) - to_chat(usr, "") - return - cmd_admin_irc_pm(href_list["irc_msg"]) - return - - if(href_list["close_ticket"]) - var/datum/ticket/ticket = locate(href_list["close_ticket"]) - - if(isnull(ticket)) - return - - ticket.close(client_repository.get_lite_client(usr.client)) - - if (GLOB.href_logfile) - to_chat(GLOB.href_logfile, "[time2text(world.timeofday,"hh:mm")] [src] (usr:[usr]) || [hsrc ? "[hsrc] " : ""][href]
              ") - - switch(href_list["_src_"]) - if("holder") hsrc = holder - if("usr") hsrc = mob - if("prefs") return prefs.process_link(usr,href_list) - if("vars") return view_var_Topic(href,href_list,hsrc) - if("chat") return chatOutput.Topic(href, href_list) - - switch(href_list["action"]) - if("openLink") - send_link(src, href_list["link"]) - - if(codex_topic(href, href_list)) - return - - if(href_list["SDQL_select"]) - debug_variables(locate(href_list["SDQL_select"])) - return - - ..() //redirect to hsrc.Topic() - -//This stops files larger than UPLOAD_LIMIT being sent from client to server via input(), client.Import() etc. -/client/AllowUpload(filename, filelength) - if(!user_acted(src)) - return 0 - if(filelength > UPLOAD_LIMIT) - to_chat(src, "Error: AllowUpload(): File Upload too large. Upload Limit: [UPLOAD_LIMIT/1024]KiB.") - return 0 - return 1 - - - /////////// - //CONNECT// - /////////// -/client/New(TopicData) - TopicData = null //Prevent calls to client.Topic from connect - - switch (connection) - if ("seeker", "web") // check for invalid connection type. do nothing if valid - else return null - var/bad_version = config.minimum_byond_version && byond_version < config.minimum_byond_version - var/bad_build = config.minimum_byond_build && byond_build < config.minimum_byond_build - if (bad_build || bad_version) - to_chat(src, "You are attempting to connect with a out of date version of BYOND. Please update to the latest version at http://www.byond.com/ before trying again.") - qdel(src) - return - - if("[byond_version].[byond_build]" in config.forbidden_versions) - _DB_staffwarn_record(ckey, "Tried to connect with broken and possibly exploitable BYOND build.") - to_chat(src, "You are attempting to connect with a broken and possibly exploitable BYOND build. Please update to the latest version at http://www.byond.com/ before trying again.") - qdel(src) - return - - if(!config.guests_allowed && IsGuestKey(key)) - alert(src,"This server doesn't allow guest accounts to play. Please go to http://www.byond.com/ and register for a key.","Guest","OK") - qdel(src) - return - - if(config.player_limit != 0) - if((GLOB.clients.len >= config.player_limit) && !(ckey in admin_datums)) - alert(src,"This server is currently full and not accepting new connections.","Server Full","OK") - log_admin("[ckey] tried to join and was turned away due to the server being full (player_limit=[config.player_limit])") - qdel(src) - return - - for (var/datum/ticket/T in tickets) - if (T.status == TICKET_OPEN && T.owner.ckey == ckey) - message_staff("[key_name_admin(src)] has joined the game with an open ticket. Status: [length(T.assigned_admins) ? "Assigned to: [english_list(T.assigned_admin_ckeys())]" : SPAN_DANGER("Unassigned.")]") - break - - // Change the way they should download resources. - if(config.resource_urls && config.resource_urls.len) - src.preload_rsc = pick(config.resource_urls) - else src.preload_rsc = 1 // If config.resource_urls is not set, preload like normal. - - if(byond_version < DM_VERSION) - to_chat(src, "You are running an older version of BYOND than the server and may experience issues.") - to_chat(src, "It is recommended that you update to at least [DM_VERSION] at http://www.byond.com/download/.") - to_chat(src, "If the title screen is black, resources are still downloading. Please be patient until the title screen appears.") - GLOB.clients += src - GLOB.ckey_directory[ckey] = src - - //Admin Authorisation - holder = admin_datums[ckey] - if(holder) - GLOB.admins += src - holder.owner = src - - //preferences datum - also holds some persistant data for the client (because we may as well keep these datums to a minimum) - prefs = SScharacter_setup.preferences_datums[ckey] - if(!prefs) - prefs = new /datum/preferences(src) - prefs.last_ip = address //these are gonna be used for banning - prefs.last_id = computer_id //these are gonna be used for banning - apply_fps(prefs.clientfps) - - . = ..() //calls mob.Login() - - GLOB.using_map.map_info(src) - - if (config.event) - to_chat(src, "

              Event

              ") - to_chat(src, "

              An event is taking place. OOC Info:

              ") - to_chat(src, "[config.event]") - to_chat(src, "
              ") - - if(holder) - add_admin_verbs() - admin_memo_show() - - // Forcibly enable hardware-accelerated graphics, as we need them for the lighting overlays. - // (but turn them off first, since sometimes BYOND doesn't turn them on properly otherwise) - spawn(5) // And wait a half-second, since it sounds like you can do this too fast. - if(src) - winset(src, null, "command=\".configure graphics-hwmode off\"") - sleep(2) // wait a bit more, possibly fixes hardware mode not re-activating right - winset(src, null, "command=\".configure graphics-hwmode on\"") - - log_client_to_db() - - send_resources() - - if (GLOB.changelog_hash && 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.") - winset(src, "rpane.changelog", "background-color=#eaeaea;font-style=bold") - if(config.aggressive_changelog) - src.changes() - - if(!winexists(src, "asset_cache_browser")) // The client is using a custom skin, tell them. - to_chat(src, "Unable to access asset cache browser, if you are using a custom skin file, please allow DS to download the updated version, if you are not, then make a bug report. This is not a critical issue but can cause issues with resource downloading, as it is impossible to know when extra resources arrived to you.") - - if(holder) - src.control_freak = 0 //Devs need 0 for profiler access - - ////////////// - //DISCONNECT// - ////////////// -/client/Del() - if (!QDELETED(src)) - Destroy() - return ..() - - -/client/Destroy() - for (var/datum/ticket/T in tickets) - if (T.status == TICKET_OPEN && T.owner.ckey == ckey) - message_staff("[key_name_admin(src)] has left the game with an open ticket. Status: [length(T.assigned_admins) ? "Assigned to: [english_list(T.assigned_admin_ckeys())]" : SPAN_DANGER("Unassigned.")]") - break - if (holder) - holder.owner = null - GLOB.admins -= src - if (watched_variables_window) - STOP_PROCESSING(SSprocessing, watched_variables_window) - QDEL_NULL(chatOutput) - GLOB.ckey_directory -= ckey - ticket_panels -= src - GLOB.clients -= src - ..() - return QDEL_HINT_HARDDEL_NOW - - -// Returns null if no DB connection can be established, or -1 if the requested key was not found in the database - -/proc/get_player_age(key) - establish_db_connection() - if(!dbcon.IsConnected()) - return null - - var/sql_ckey = sql_sanitize_text(ckey(key)) - - var/DBQuery/query = dbcon.NewQuery("SELECT datediff(Now(),firstseen) as age FROM erro_player WHERE ckey = '[sql_ckey]'") - query.Execute() - - if(query.NextRow()) - return text2num(query.item[1]) - else - return -1 - - -/client/proc/log_client_to_db() - - if ( IsGuestKey(src.key) ) - return - - establish_db_connection() - if(!dbcon.IsConnected()) - return - - var/sql_ckey = sql_sanitize_text(src.ckey) - - var/DBQuery/query = dbcon.NewQuery("SELECT id, datediff(Now(),firstseen) as age FROM erro_player WHERE ckey = '[sql_ckey]'") - query.Execute() - var/sql_id = 0 - player_age = 0 // New players won't have an entry so knowing we have a connection we set this to zero to be updated if their is a record. - while(query.NextRow()) - sql_id = query.item[1] - player_age = text2num(query.item[2]) - break - - var/DBQuery/query_ip = dbcon.NewQuery("SELECT ckey FROM erro_player WHERE ip = '[address]'") - query_ip.Execute() - related_accounts_ip = "" - while(query_ip.NextRow()) - related_accounts_ip += "[query_ip.item[1]], " - break - - var/DBQuery/query_cid = dbcon.NewQuery("SELECT ckey FROM erro_player WHERE computerid = '[computer_id]'") - query_cid.Execute() - related_accounts_cid = "" - while(query_cid.NextRow()) - related_accounts_cid += "[query_cid.item[1]], " - break - - var/DBQuery/query_staffwarn = dbcon.NewQuery("SELECT staffwarn FROM erro_player WHERE ckey = '[sql_ckey]' AND !ISNULL(staffwarn)") - query_staffwarn.Execute() - if(query_staffwarn.NextRow()) - src.staffwarn = query_staffwarn.item[1] - - //Just the standard check to see if it's actually a number - if(sql_id) - if(istext(sql_id)) - sql_id = text2num(sql_id) - if(!isnum(sql_id)) - return - - var/admin_rank = "Player" - if(src.holder) - admin_rank = src.holder.rank - for(var/client/C in GLOB.clients) - if(C.staffwarn) - C.mob.send_staffwarn(src, "is connected", 0) - - var/sql_ip = sql_sanitize_text(src.address) - var/sql_computerid = sql_sanitize_text(src.computer_id) - var/sql_admin_rank = sql_sanitize_text(admin_rank) - - - if(sql_id) - //Player already identified previously, we need to just update the 'lastseen', 'ip' and 'computer_id' variables - var/DBQuery/query_update = dbcon.NewQuery("UPDATE erro_player SET lastseen = Now(), ip = '[sql_ip]', computerid = '[sql_computerid]', lastadminrank = '[sql_admin_rank]' WHERE id = [sql_id]") - query_update.Execute() - else - //New player!! Need to insert all the stuff - var/DBQuery/query_insert = dbcon.NewQuery("INSERT INTO erro_player (id, ckey, firstseen, lastseen, ip, computerid, lastadminrank) VALUES (null, '[sql_ckey]', Now(), Now(), '[sql_ip]', '[sql_computerid]', '[sql_admin_rank]')") - query_insert.Execute() - - //Logging player access - var/serverip = "[world.internet_address]:[world.port]" - var/DBQuery/query_accesslog = dbcon.NewQuery("INSERT INTO `erro_connection_log`(`id`,`datetime`,`serverip`,`ckey`,`ip`,`computerid`) VALUES(null,Now(),'[serverip]','[sql_ckey]','[sql_ip]','[sql_computerid]');") - query_accesslog.Execute() - - -#undef UPLOAD_LIMIT - -//checks if a client is afk -//3000 frames = 5 minutes -/client/proc/is_afk(duration=3000) - if(inactivity > duration) return inactivity - return 0 - -/client/proc/inactivity2text() - var/seconds = inactivity/10 - return "[round(seconds / 60)] minute\s, [seconds % 60] second\s" - - -/client/Stat() - if (!usr) - return - // Add always-visible stat panel calls here, to define a consistent display order. - statpanel("Status") - ..() - if (config.stat_delay > 0) - sleep(config.stat_delay) - - -//Sends resource files to client cache -/client/proc/getFiles() - for(var/file in args) - send_rsc(src, file, null) - -//send resources to the client. It's here in its own proc so we can move it around easiliy if need be -/client/proc/send_resources() - getFiles( - 'html/search.js', - 'html/panels.css', - 'html/spacemag.css', - 'html/images/loading.gif', - 'html/images/ntlogo.png', - 'html/images/bluentlogo.png', - 'html/images/sollogo.png', - 'html/images/terralogo.png', - 'html/images/talisman.png', - 'html/images/exologo.png', - 'html/images/xynlogo.png', - 'html/images/daislogo.png', - 'html/images/eclogo.png', - 'html/images/fleetlogo.png', - 'html/images/armylogo.png', - 'html/images/torchlogo.png', - 'html/images/sfplogo.png' - ) - addtimer(CALLBACK(src, .proc/after_send_resources), 1 SECOND) - - -/client/proc/after_send_resources() - var/decl/asset_cache/asset_cache = decls_repository.get_decl(/decl/asset_cache) - getFilesSlow(src, asset_cache.cache, register_asset = FALSE) - - -/mob/proc/MayRespawn() - return 0 - -/client/proc/MayRespawn() - if(mob) - return mob.MayRespawn() - - // Something went wrong, client is usually kicked or transfered to a new mob at this point - return 0 - -/client/verb/character_setup() - set name = "Character Setup" - set category = "OOC" - if(prefs) - prefs.open_setup_window(usr) - -/client/proc/apply_fps(var/client_fps) - if(world.byond_version >= 511 && byond_version >= 511 && client_fps >= CLIENT_MIN_FPS && client_fps <= CLIENT_MAX_FPS) - vars["fps"] = prefs.clientfps - -/client/MouseDrag(src_object, over_object, src_location, over_location, src_control, over_control, params) - . = ..() - var/mob/living/M = mob - if(istype(M)) - M.OnMouseDrag(src_object, over_object, src_location, over_location, src_control, over_control, params) - -/client/verb/toggle_fullscreen() - set name = "Toggle Fullscreen" - set category = "OOC" - - fullscreen = !fullscreen - - if (fullscreen) - winset(usr, "mainwindow", "titlebar=false") - winset(usr, "mainwindow", "can-resize=false") - winset(usr, "mainwindow", "is-maximized=false") - winset(usr, "mainwindow", "is-maximized=true") - winset(usr, "mainwindow", "statusbar=false") - winset(usr, "mainwindow", "menu=") -// winset(usr, "mainwindow.mainvsplit", "size=0x0") - else - winset(usr, "mainwindow", "is-maximized=false") - winset(usr, "mainwindow", "titlebar=true") - winset(usr, "mainwindow", "can-resize=true") - winset(usr, "mainwindow", "statusbar=true") - winset(usr, "mainwindow", "menu=menu") - - fit_viewport() - -/client/verb/fit_viewport() - set name = "Fit Viewport" - set category = "OOC" - set desc = "Fit the width of the map window to match the viewport" - - // Fetch aspect ratio - var/view_size = getviewsize(view) - var/aspect_ratio = view_size[1] / view_size[2] - - // Calculate desired pixel width using window size and aspect ratio - var/sizes = params2list(winget(src, "mainwindow.mainvsplit;mapwindow", "size")) - var/map_size = splittext(sizes["mapwindow.size"], "x") - var/height = text2num(map_size[2]) - var/desired_width = round(height * aspect_ratio) - if (text2num(map_size[1]) == desired_width) - // Nothing to do - return - - var/split_size = splittext(sizes["mainwindow.mainvsplit.size"], "x") - var/split_width = text2num(split_size[1]) - - // Calculate and apply a best estimate - // +4 pixels are for the width of the splitter's handle - var/pct = 100 * (desired_width + 4) / split_width - winset(src, "mainwindow.mainvsplit", "splitter=[pct]") - - // Apply an ever-lowering offset until we finish or fail - var/delta - for(var/safety in 1 to 10) - var/after_size = winget(src, "mapwindow", "size") - map_size = splittext(after_size, "x") - var/got_width = text2num(map_size[1]) - - if (got_width == desired_width) - // success - return - else if (isnull(delta)) - // calculate a probable delta value based on the difference - delta = 100 * (desired_width - got_width) / split_width - else if ((delta > 0 && got_width > desired_width) || (delta < 0 && got_width < desired_width)) - // if we overshot, halve the delta and reverse direction - delta = -delta/2 - - pct += delta - winset(src, "mainwindow.mainvsplit", "splitter=[pct]") diff --git a/code/modules/client/darkmode.dm b/code/modules/client/darkmode.dm deleted file mode 100644 index eb8917527fb75..0000000000000 --- a/code/modules/client/darkmode.dm +++ /dev/null @@ -1,132 +0,0 @@ -//Darkmode preference by Kmc2000// - -/* -This lets you switch chat themes by using winset and CSS loading, you must relog to see this change (or rebuild your browseroutput datum) -Things to note: -If you change ANYTHING in interface/skin.dmf you need to change it here: -Format: -winset(src, "window as appears in skin.dmf after elem", "var to change = currentvalue;var to change = desired value") -How this works: -I've added a function to browseroutput.js which registers a cookie for darkmode and swaps the chat accordingly. You can find the button to do this under the "cog" icon next to the ping button (top right of chat) -This then swaps the window theme automatically -Thanks to spacemaniac and mcdonald for help with the JS side of this. -*/ - -/client/proc/force_white_theme() //There's no way round it. We're essentially changing the skin by hand. It's painful but it works, and is the way Lummox suggested. - //Main windows - winset(src, "infowindow", "background-color = [COLOR_DARKMODE_DARKBACKGROUND];background-color = none") - winset(src, "infowindow", "text-color = [COLOR_DARKMODE_TEXT];text-color = #000000") - winset(src, "rpane", "background-color = [COLOR_DARKMODE_DARKBACKGROUND];background-color = none") - winset(src, "rpane", "text-color = [COLOR_DARKMODE_TEXT];text-color = #000000") - winset(src, "info", "background-color = [COLOR_DARKMODE_BACKGROUND];background-color = none") - winset(src, "info", "text-color = [COLOR_DARKMODE_TEXT];text-color = #000000") - winset(src, "browseroutput", "background-color = [COLOR_DARKMODE_BACKGROUND];background-color = none") - winset(src, "browseroutput", "text-color = [COLOR_DARKMODE_TEXT];text-color = #000000") - winset(src, "outputwindow", "background-color = [COLOR_DARKMODE_BACKGROUND];background-color = none") - winset(src, "outputwindow", "text-color = [COLOR_DARKMODE_TEXT];text-color = #000000") - winset(src, "rpanewindow", "background-color = [COLOR_DARKMODE_BACKGROUND];background-color = none") - winset(src, "rpanewindow", "text-color = [COLOR_DARKMODE_TEXT];text-color = #000000") - winset(src, "mainwindow", "background-color = [COLOR_DARKMODE_DARKBACKGROUND];background-color = none") - winset(src, "split", "background-color = [COLOR_DARKMODE_BACKGROUND];background-color = none") - winset(src, "mainvsplit", "background-color = [COLOR_DARKMODE_BACKGROUND];background-color = none") - //Buttons - winset(src, "textb", "background-color = #494949;background-color = none") - winset(src, "textb", "text-color = [COLOR_DARKMODE_TEXT];text-color = #000000") - winset(src, "infob", "background-color = #494949;background-color = none") - winset(src, "infob", "text-color = [COLOR_DARKMODE_TEXT];text-color = #000000") - winset(src, "linkrules", "background-color = #494949;background-color = none") - winset(src, "linkrules", "text-color = [COLOR_DARKMODE_TEXT];text-color = #000000") - winset(src, "linklore", "background-color = #494949;background-color = none") - winset(src, "linklore", "text-color = [COLOR_DARKMODE_TEXT];text-color = #000000") - winset(src, "linkwiki", "background-color = #494949;background-color = none") - winset(src, "linkwiki", "text-color = [COLOR_DARKMODE_TEXT];text-color = #000000") - winset(src, "linkforum", "background-color = #494949;background-color = none") - winset(src, "linkforum", "text-color = [COLOR_DARKMODE_TEXT];text-color = #000000") - winset(src, "changelog", "background-color = #494949;background-color = none") - winset(src, "changelog", "text-color = [COLOR_DARKMODE_TEXT];text-color = #000000") - winset(src, "linksource", "background-color = #494949;background-color = none") - winset(src, "linksource", "text-color = [COLOR_DARKMODE_TEXT];text-color = #000000") - winset(src, "linkissue", "background-color = #494949;background-color = none") - winset(src, "linkissue", "text-color = [COLOR_DARKMODE_TEXT];text-color = #000000") - winset(src, "hotkey_toggle", "background-color = #494949;background-color = none") - winset(src, "hotkey_toggle", "text-color = [COLOR_DARKMODE_TEXT];text-color = #000000") - //Status and verb tabs - winset(src, "output", "background-color = [COLOR_DARKMODE_BACKGROUND];background-color = none") - winset(src, "output", "text-color = [COLOR_DARKMODE_TEXT];text-color = #000000") - winset(src, "outputwindow", "background-color = [COLOR_DARKMODE_BACKGROUND];background-color = none") - winset(src, "outputwindow", "text-color = [COLOR_DARKMODE_TEXT];text-color = #000000") - winset(src, "statwindow", "background-color = [COLOR_DARKMODE_BACKGROUND];background-color = none") - winset(src, "statwindow", "text-color = #eaeaea;text-color = #000000") - winset(src, "info", "background-color = [COLOR_DARKMODE_DARKBACKGROUND];background-color = #FFFFFF") - winset(src, "info", "tab-background-color = [COLOR_DARKMODE_BACKGROUND];tab-background-color = none") - winset(src, "info", "text-color = [COLOR_DARKMODE_TEXT];text-color = #000000") - winset(src, "info", "tab-text-color = [COLOR_DARKMODE_TEXT];tab-text-color = #000000") - winset(src, "info", "prefix-color = [COLOR_DARKMODE_TEXT];prefix-color = #000000") - winset(src, "info", "suffix-color = [COLOR_DARKMODE_TEXT];suffix-color = #000000") - //Say, OOC, me Buttons etc. - winset(src, "saybutton", "background-color = [COLOR_DARKMODE_BACKGROUND];background-color = none") - winset(src, "saybutton", "text-color = [COLOR_DARKMODE_TEXT];text-color = #000000") - winset(src, "asset_cache_browser", "background-color = [COLOR_DARKMODE_BACKGROUND];background-color = none") - winset(src, "asset_cache_browser", "background-color = [COLOR_DARKMODE_BACKGROUND];background-color = none") - //winset(src, "input", "background-color = [COLOR_DARKMODE_BACKGROUND];background-color = none") - //winset(src, "input", "text-color = [COLOR_DARKMODE_TEXT];text-color = #000000") - -/client/proc/force_dark_theme() //Inversely, if theyre using white theme and want to swap to the superior dark theme, let's get WINSET() ing - //Main windows - winset(src, "infowindow", "background-color = none;background-color = [COLOR_DARKMODE_BACKGROUND]") - winset(src, "infowindow", "text-color = #000000;text-color = [COLOR_DARKMODE_TEXT]") - winset(src, "rpane", "background-color = none;background-color = [COLOR_DARKMODE_BACKGROUND]") - winset(src, "rpane", "text-color = #000000;text-color = [COLOR_DARKMODE_TEXT]") - winset(src, "info", "background-color = none;background-color = [COLOR_DARKMODE_BACKGROUND]") - winset(src, "info", "text-color = #000000;text-color = [COLOR_DARKMODE_TEXT]") - winset(src, "browseroutput", "background-color = none;background-color = [COLOR_DARKMODE_BACKGROUND]") - winset(src, "browseroutput", "text-color = #000000;text-color = [COLOR_DARKMODE_TEXT]") - winset(src, "outputwindow", "background-color = none;background-color = [COLOR_DARKMODE_BACKGROUND]") - winset(src, "outputwindow", "text-color = #000000;text-color = [COLOR_DARKMODE_TEXT]") - winset(src, "rpanewindow", "background-color = none;background-color = [COLOR_DARKMODE_BACKGROUND]") - winset(src, "rpanewindow", "text-color = #000000;text-color = [COLOR_DARKMODE_TEXT]") - winset(src, "mainwindow", "background-color = none;background-color = [COLOR_DARKMODE_BACKGROUND]") - winset(src, "split", "background-color = none;background-color = [COLOR_DARKMODE_BACKGROUND]") - winset(src, "mainvsplit", "background-color = none;background-color = [COLOR_DARKMODE_BACKGROUND]") - //Buttons - winset(src, "textb", "background-color = none;background-color = #494949") - winset(src, "textb", "text-color = #000000;text-color = [COLOR_DARKMODE_TEXT]") - winset(src, "infob", "background-color = none;background-color = #494949") - winset(src, "infob", "text-color = #000000;text-color = [COLOR_DARKMODE_TEXT]") - winset(src, "linkrules", "background-color = none;background-color = #494949") - winset(src, "linkrules", "text-color = #000000;text-color = [COLOR_DARKMODE_TEXT]") - winset(src, "linklore", "background-color = none;background-color = #494949") - winset(src, "linklore", "text-color = #000000;text-color = [COLOR_DARKMODE_TEXT]") - winset(src, "linkwiki", "background-color = none;background-color = #494949") - winset(src, "linkwiki", "text-color = #000000;text-color = [COLOR_DARKMODE_TEXT]") - winset(src, "linkforum", "background-color = none;background-color = #494949") - winset(src, "linkforum", "text-color = #000000;text-color = [COLOR_DARKMODE_TEXT]") - winset(src, "changelog", "background-color = none;background-color = #494949") - winset(src, "changelog", "text-color = #000000;text-color = [COLOR_DARKMODE_TEXT]") - winset(src, "linksource", "background-color = none;background-color = #494949") - winset(src, "linksource", "text-color = #000000;text-color = [COLOR_DARKMODE_TEXT]") - winset(src, "linkissue", "background-color = none;background-color = #494949") - winset(src, "linkissue", "text-color = #000000;text-color = [COLOR_DARKMODE_TEXT]") - winset(src, "hotkey_toggle", "background-color = none;background-color = #494949") - winset(src, "hotkey_toggle", "text-color = #000000;text-color = [COLOR_DARKMODE_TEXT]") - //Status and verb tabs - winset(src, "output", "background-color = none;background-color = [COLOR_DARKMODE_DARKBACKGROUND]") - winset(src, "output", "text-color = #000000;text-color = [COLOR_DARKMODE_TEXT]") - winset(src, "outputwindow", "background-color = none;background-color = [COLOR_DARKMODE_DARKBACKGROUND]") - winset(src, "outputwindow", "text-color = #000000;text-color = [COLOR_DARKMODE_TEXT]") - winset(src, "statwindow", "background-color = none;background-color = [COLOR_DARKMODE_DARKBACKGROUND]") - winset(src, "statwindow", "text-color = #000000;text-color = [COLOR_DARKMODE_TEXT]") - winset(src, "info", "background-color = #FFFFFF;background-color = [COLOR_DARKMODE_DARKBACKGROUND]") - winset(src, "info", "tab-background-color = none;tab-background-color = [COLOR_DARKMODE_BACKGROUND]") - winset(src, "info", "text-color = #000000;text-color = [COLOR_DARKMODE_TEXT]") - winset(src, "info", "tab-text-color = #000000;tab-text-color = [COLOR_DARKMODE_TEXT]") - winset(src, "info", "prefix-color = #000000;prefix-color = [COLOR_DARKMODE_TEXT]") - winset(src, "info", "suffix-color = #000000;suffix-color = [COLOR_DARKMODE_TEXT]") - //Say, OOC, me Buttons etc. - winset(src, "saybutton", "background-color = none;background-color = #494949") - winset(src, "saybutton", "text-color = #000000;text-color = [COLOR_DARKMODE_TEXT]") - winset(src, "asset_cache_browser", "background-color = none;background-color = [COLOR_DARKMODE_BACKGROUND]") - winset(src, "asset_cache_browser", "text-color = #000000;text-color = [COLOR_DARKMODE_TEXT]") - - //winset(src, "input", "background-color = none;background-color = [COLOR_DARKMODE_BACKGROUND]") - //winset(src, "input", "text-color = #000000;text-color = [COLOR_DARKMODE_TEXT]") diff --git a/code/modules/client/movement.dm b/code/modules/client/movement.dm deleted file mode 100644 index efcf51c02ee2b..0000000000000 --- a/code/modules/client/movement.dm +++ /dev/null @@ -1,15 +0,0 @@ - -/client/New() - ..() - dir = NORTH - -/client/verb/spinleft() - set name = "Spin View CCW" - set category = "OOC" - dir = turn(dir, 90) - -/client/verb/spinright() - set name = "Spin View CW" - set category = "OOC" - dir = turn(dir, -90) - diff --git a/code/modules/client/preference_setup/_defines.dm b/code/modules/client/preference_setup/_defines.dm deleted file mode 100644 index 09bcf01a3610e..0000000000000 --- a/code/modules/client/preference_setup/_defines.dm +++ /dev/null @@ -1,43 +0,0 @@ -#define SETUP_SUBTYPE_DECLS_BY_NAME(decl_prototype, decls_by_name) \ -if(!decls_by_name) \ -{\ - decls_by_name = list();\ - var/decls_by_type = decls_repository.get_decls_of_subtype(decl_prototype);\ - for(var/decl_type in decls_by_type) \ - {\ - var##decl_prototype/decl_instance = decls_by_type[decl_type];\ - ADD_SORTED(decls_by_name, decl_instance.name, /proc/cmp_text_asc);\ - decls_by_name[decl_instance.name] = decl_instance;\ - }\ -} - -/// Full Options Button. -#define FBTN(key, value, label, title, style) \ -"[title ? "[title]: " : ""][label]" - -/// Value-passing Styled Button. -#define VSBTN(key, value, label, style) FBTN(key, value, label, "", style) - -/// Styled Titled Button. -#define STBTN(key, label, title, style) FBTN(key, 1, label, title, style) - -/// Value-passing Titled Button. -#define VTBTN(key, value, label, title) FBTN(key, value, label, title, "") - -/// Styled Button. -#define SBTN(key, label, style) FBTN(key, 1, label, "", style) - -/// Value-passing Button. -#define VBTN(key, value, label) FBTN(key, value, label, "", "") - -/// Titled Button. -#define TBTN(key, label, title) FBTN(key, 1, label, title, "") - -/// Simple Button. -#define BTN(key, label) FBTN(key, 1, label, "", "") - -#define COLOR_PREVIEW(color) \ -"
              Name:[name]
              Pump Status:[pump_direction?("Releasing"):("Siphoning")]Toggle
              __
              " - -#define UI_FONT_GOOD(X) "[X]" -#define UI_FONT_BAD(X) "[X]" diff --git a/code/modules/client/preference_setup/antagonism/01_candidacy.dm b/code/modules/client/preference_setup/antagonism/01_candidacy.dm deleted file mode 100644 index ad92a6da9d68d..0000000000000 --- a/code/modules/client/preference_setup/antagonism/01_candidacy.dm +++ /dev/null @@ -1,124 +0,0 @@ -/datum/preferences - var/list/may_be_special_role - var/list/be_special_role - -/datum/category_item/player_setup_item/antagonism/candidacy - name = "Candidacy" - sort_order = 1 - -/datum/category_item/player_setup_item/antagonism/candidacy/load_character(datum/pref_record_reader/R) - pref.be_special_role = R.read("be_special") - pref.may_be_special_role = R.read("may_be_special") - -/datum/category_item/player_setup_item/antagonism/candidacy/save_character(datum/pref_record_writer/W) - W.write("be_special", pref.be_special_role) - W.write("may_be_special", pref.may_be_special_role) - -/datum/category_item/player_setup_item/antagonism/candidacy/sanitize_character() - if(!istype(pref.be_special_role)) - pref.be_special_role = list() - if(!istype(pref.may_be_special_role)) - pref.may_be_special_role = list() - - var/special_roles = valid_special_roles() - var/old_be_special_role = pref.be_special_role.Copy() - var/old_may_be_special_role = pref.may_be_special_role.Copy() - for(var/role in old_be_special_role) - if(!(role in special_roles)) - pref.be_special_role -= role - for(var/role in old_may_be_special_role) - if(!(role in special_roles)) - pref.may_be_special_role -= role - -/datum/category_item/player_setup_item/antagonism/candidacy/content(var/mob/user) - . = list() - . += "Special Role Availability:
              " - . += "" - var/list/all_antag_types = GLOB.all_antag_types_ - for(var/antag_type in all_antag_types) - var/datum/antagonist/antag = all_antag_types[antag_type] - . += "" - - // Special handling for pAI role - . += "" - if (BE_PAI in pref.be_special_role) - . += "" - else - . += "" - . += "
              [antag.role_text]: " - if(jobban_isbanned(preference_mob(), antag.id) || (antag.id == MODE_MALFUNCTION && jobban_isbanned(preference_mob(), "AI"))) - . += "\[BANNED\]
              " - else if(antag.id in pref.be_special_role) - . += "High Low Never
              " - else if(antag.id in pref.may_be_special_role) - . += "High Low Never
              " - else - . += "High Low Never
              " - - . += "
              pAI:Yes No
              Yes No
              " - . = jointext(.,null) - -/datum/category_item/player_setup_item/antagonism/candidacy/OnTopic(var/href,var/list/href_list, var/mob/user) - if(href_list["add_special"]) - if(!(href_list["add_special"] in valid_special_roles(FALSE))) - return TOPIC_HANDLED - pref.be_special_role |= href_list["add_special"] - pref.may_be_special_role -= href_list["add_special"] - return TOPIC_REFRESH - - if(href_list["del_special"]) - if(!(href_list["del_special"] in valid_special_roles(FALSE))) - return TOPIC_HANDLED - pref.be_special_role -= href_list["del_special"] - pref.may_be_special_role -= href_list["del_special"] - return TOPIC_REFRESH - - if(href_list["add_maybe"]) - pref.be_special_role -= href_list["add_maybe"] - pref.may_be_special_role |= href_list["add_maybe"] - return TOPIC_REFRESH - - if(href_list["select_all"]) - var/selection = text2num(href_list["select_all"]) - var/list/roles = valid_special_roles(FALSE) - - for(var/id in roles) - switch(selection) - if(0) - pref.be_special_role -= id - pref.may_be_special_role -= id - if(1) - pref.be_special_role -= id - pref.may_be_special_role |= id - if(2) - pref.be_special_role |= id - pref.may_be_special_role -= id - return TOPIC_REFRESH - - return ..() - -/datum/category_item/player_setup_item/antagonism/candidacy/proc/valid_special_roles(var/include_bans = TRUE) - var/list/private_valid_special_roles = list() - - for(var/antag_type in GLOB.all_antag_types_) - if(!include_bans) - if(jobban_isbanned(preference_mob(), antag_type)) - continue - if(((antag_type == MODE_MALFUNCTION) && jobban_isbanned(preference_mob(), "AI"))) - continue - private_valid_special_roles += antag_type - - // Special handling to allow pAI selection as it is not an antagonist but does have a role pref - private_valid_special_roles += BE_PAI - - - return private_valid_special_roles - -/client/proc/wishes_to_be_role(var/role) - if(!prefs) - return FALSE - if(role in prefs.be_special_role) - return 2 - if(role in prefs.may_be_special_role) - return 1 - return FALSE //Default to "never" if they don't opt-in. diff --git a/code/modules/client/preference_setup/antagonism/02_setup.dm b/code/modules/client/preference_setup/antagonism/02_setup.dm deleted file mode 100644 index c4215512a8825..0000000000000 --- a/code/modules/client/preference_setup/antagonism/02_setup.dm +++ /dev/null @@ -1,98 +0,0 @@ -/datum/preferences - var/list/uplink_sources - var/exploit_record = "" - -/datum/category_item/player_setup_item/antagonism/basic - name = "Setup" - sort_order = 2 - - var/static/list/uplink_sources_by_name - -/datum/category_item/player_setup_item/antagonism/basic/New() - ..() - SETUP_SUBTYPE_DECLS_BY_NAME(/decl/uplink_source, uplink_sources_by_name) - -/datum/category_item/player_setup_item/antagonism/basic/load_character(datum/pref_record_reader/R) - var/list/uplink_order - uplink_order = R.read("uplink_sources") - pref.exploit_record = R.read("exploit_record") - - if(istype(uplink_order)) - pref.uplink_sources = list() - for(var/entry in uplink_order) - var/uplink_source = uplink_sources_by_name[entry] - if(uplink_source) - pref.uplink_sources += uplink_source - -/datum/category_item/player_setup_item/antagonism/basic/save_character(datum/pref_record_writer/W) - var/uplink_order = list() - for(var/entry in pref.uplink_sources) - var/decl/uplink_source/UL = entry - uplink_order += UL.name - - W.write("uplink_sources", uplink_order) - W.write("exploit_record", pref.exploit_record) - -/datum/category_item/player_setup_item/antagonism/basic/sanitize_character() - if(!istype(pref.uplink_sources)) - pref.uplink_sources = list() - for(var/entry in GLOB.default_uplink_source_priority) - pref.uplink_sources += decls_repository.get_decl(entry) - -/datum/category_item/player_setup_item/antagonism/basic/content(var/mob/user) - . +="Antag Setup:
              " - . +="Uplink Source Priority: Add
              " - for(var/entry in pref.uplink_sources) - var/decl/uplink_source/US = entry - . +="[US.name] Move Up Move Down Remove
              " - if(US.desc) - . += "[US.desc]
              " - if(!pref.uplink_sources.len) - . += "You will not receive an uplink unless you add an uplink source!" - . +="
              " - . +="Exploitable information:
              " - if(jobban_isbanned(user, "Records")) - . += "You are banned from using character records.
              " - else - . +="[TextPreview(pref.exploit_record,40)]
              " - -/datum/category_item/player_setup_item/antagonism/basic/OnTopic(var/href,var/list/href_list, var/mob/user) - if(href_list["add_source"]) - var/source_selection = input(user, "Select Uplink Source to Add", CHARACTER_PREFERENCE_INPUT_TITLE) as null|anything in (list_values(uplink_sources_by_name) - pref.uplink_sources) - if(source_selection && CanUseTopic(user)) - pref.uplink_sources |= source_selection - return TOPIC_REFRESH - - if(href_list["remove_source"]) - var/decl/uplink_source/US = locate(href_list["remove_source"]) in pref.uplink_sources - if(US && pref.uplink_sources.Remove(US)) - return TOPIC_REFRESH - - if(href_list["move_source_up"]) - var/decl/uplink_source/US = locate(href_list["move_source_up"]) in pref.uplink_sources - if(!US) - return TOPIC_NOACTION - var/index = pref.uplink_sources.Find(US) - if(index <= 1) - return TOPIC_NOACTION - pref.uplink_sources.Swap(index, index - 1) - return TOPIC_REFRESH - - if(href_list["move_source_down"]) - var/decl/uplink_source/US = locate(href_list["move_source_down"]) in pref.uplink_sources - if(!US) - return TOPIC_NOACTION - var/index = pref.uplink_sources.Find(US) - if(index >= pref.uplink_sources.len) - return TOPIC_NOACTION - pref.uplink_sources.Swap(index, index + 1) - return TOPIC_REFRESH - - - if(href_list["exploitable_record"]) - var/exploitmsg = sanitize(input(user,"Set exploitable information about you here.","Exploitable Information", html_decode(pref.exploit_record)) as message|null, MAX_PAPER_MESSAGE_LEN, extra = 0) - if(!isnull(exploitmsg) && !jobban_isbanned(user, "Records") && CanUseTopic(user)) - pref.exploit_record = exploitmsg - return TOPIC_REFRESH - - return ..() diff --git a/code/modules/client/preference_setup/background/01_culture.dm b/code/modules/client/preference_setup/background/01_culture.dm deleted file mode 100644 index 28170c133461b..0000000000000 --- a/code/modules/client/preference_setup/background/01_culture.dm +++ /dev/null @@ -1,101 +0,0 @@ -#define GET_ALLOWED_VALUES(write_to, check_key) \ - var/datum/species/S = all_species[pref.species]; \ - if(!S) { \ - write_to = list(); \ - } else if(S.force_cultural_info[check_key]) { \ - write_to = list(S.force_cultural_info[check_key] = TRUE); \ - } else { \ - write_to = list(); \ - for(var/cul in S.available_cultural_info[check_key]) { \ - write_to[cul] = TRUE; \ - } \ - } - -/datum/preferences - var/list/cultural_info = list() - -/datum/category_item/player_setup_item/background/culture - name = "Culture" - sort_order = 1 - var/list/hidden - var/list/expanded - var/list/tokens = ALL_CULTURAL_TAGS - -/datum/category_item/player_setup_item/background/culture/New() - hidden = list() - expanded = list() - for(var/token in tokens) - hidden[token] = TRUE - expanded[token] = FALSE - ..() - -/datum/category_item/player_setup_item/background/culture/sanitize_character() - if(!islist(pref.cultural_info)) - pref.cultural_info = list() - for(var/token in tokens) - var/list/_cultures - GET_ALLOWED_VALUES(_cultures, token) - if(!LAZYLEN(_cultures)) - pref.cultural_info[token] = GLOB.using_map.default_cultural_info[token] - else - var/current_value = pref.cultural_info[token] - if(!current_value|| !_cultures[current_value]) - pref.cultural_info[token] = _cultures[1] - -/datum/category_item/player_setup_item/background/culture/load_character(datum/pref_record_reader/R) - for(var/token in tokens) - var/load_val - load_val = R.read(token) - pref.cultural_info[token] = load_val - -/datum/category_item/player_setup_item/background/culture/save_character(datum/pref_record_writer/W) - for(var/token in tokens) - W.write(token, pref.cultural_info[token]) - -/datum/category_item/player_setup_item/background/culture/content() - . = list() - for(var/token in tokens) - var/decl/cultural_info/culture = SSculture.get_culture(pref.cultural_info[token]) - var/title = "[tokens[token]]- [pref.cultural_info[token]]" - var/append_text = "[hidden[token] ? "Expand" : "Collapse"]" - . += culture.get_description(title, append_text, verbose = !hidden[token]) - if (expanded[token]) - var/list/valid_values - GET_ALLOWED_VALUES(valid_values, token) - if (!hidden[token]) - . += "
              " - . += "
              " - for (var/V in valid_values) - // this is yucky but we need to do it because, right now, the culture subsystem references decls by their string names - // html_encode() doesn't properly sanitize + symbols, otherwise we could just use that - // instead, we manually rip out the plus symbol and then replace it on OnTopic - var/sanitized_value = html_encode(replacetext_char(V, "+", "PLUS")) - - if (pref.cultural_info[token] == V) - . += "[V] " - else - . += "[V] " - . += "
              " - . += "
              " - . = jointext(.,null) - -/datum/category_item/player_setup_item/background/culture/OnTopic(var/href,var/list/href_list, var/mob/user) - - for(var/token in tokens) - - if(href_list["toggle_verbose_[token]"]) - hidden[token] = !hidden[token] - return TOPIC_REFRESH - - if(href_list["expand_options_[token]"]) - expanded[token] = !expanded[token] - return TOPIC_REFRESH - - var/new_token = href_list["set_token_entry_[token]"] - if (!isnull(new_token)) - pref.cultural_info[token] = html_decode(replacetext_char(new_token, "PLUS", "+")) - return TOPIC_REFRESH - - . = ..() - -#undef GET_ALLOWED_VALUES diff --git a/code/modules/client/preference_setup/background/02_language.dm b/code/modules/client/preference_setup/background/02_language.dm deleted file mode 100644 index 2eeb793e82fec..0000000000000 --- a/code/modules/client/preference_setup/background/02_language.dm +++ /dev/null @@ -1,117 +0,0 @@ -/datum/preferences - var/list/alternate_languages - -/datum/category_item/player_setup_item/background/languages - name = "Languages" - sort_order = 2 - var/list/allowed_languages - var/list/free_languages - -/datum/category_item/player_setup_item/background/languages/load_character(datum/pref_record_reader/R) - pref.alternate_languages = R.read("language") - -/datum/category_item/player_setup_item/background/languages/save_character(datum/pref_record_writer/W) - W.write("language", pref.alternate_languages) - -/datum/category_item/player_setup_item/background/languages/sanitize_character() - if(!islist(pref.alternate_languages)) - pref.alternate_languages = list() - sanitize_alt_languages() - -/datum/category_item/player_setup_item/background/languages/content() - . = list() - . += "Languages
              " - var/list/show_langs = get_language_text() - if(LAZYLEN(show_langs)) - for(var/lang in show_langs) - . += lang - else - . += "Your current species, faction or home system selection does not allow you to choose additional languages.
              " - . = jointext(.,null) - -/datum/category_item/player_setup_item/background/languages/OnTopic(var/href,var/list/href_list, var/mob/user) - - if(href_list["remove_language"]) - var/index = text2num(href_list["remove_language"]) - pref.alternate_languages.Cut(index, index+1) - return TOPIC_REFRESH - - else if(href_list["add_language"]) - - if(pref.alternate_languages.len >= MAX_LANGUAGES) - alert(user, "You have already selected the maximum number of languages!") - return - - sanitize_alt_languages() - var/list/available_languages = allowed_languages - free_languages - if(!LAZYLEN(available_languages)) - alert(user, "There are no additional languages available to select.") - else - var/new_lang = input(user, "Select an additional language", "Character Generation", null) as null|anything in available_languages - if(new_lang) - pref.alternate_languages |= new_lang - return TOPIC_REFRESH - . = ..() - -/datum/category_item/player_setup_item/background/languages/proc/rebuild_language_cache(var/mob/user) - - allowed_languages = list() - free_languages = list() - - if(!user) - return - - for(var/thing in pref.cultural_info) - var/decl/cultural_info/culture = SSculture.get_culture(pref.cultural_info[thing]) - if(istype(culture)) - var/list/langs = culture.get_spoken_languages() - if(LAZYLEN(langs)) - for(var/checklang in langs) - free_languages[checklang] = TRUE - allowed_languages[checklang] = TRUE - if(LAZYLEN(culture.secondary_langs)) - for(var/checklang in culture.secondary_langs) - allowed_languages[checklang] = TRUE - - for(var/thing in all_languages) - var/datum/language/lang = all_languages[thing] - if(user.has_admin_rights() || (!(lang.flags & RESTRICTED) && (lang.flags & WHITELISTED) && is_alien_whitelisted(user, lang))) - allowed_languages[thing] = TRUE - -/datum/category_item/player_setup_item/background/languages/proc/is_allowed_language(var/mob/user, var/datum/language/lang) - if(isnull(allowed_languages) || isnull(free_languages)) - rebuild_language_cache(user) - if(!user || ((lang.flags & RESTRICTED) && is_alien_whitelisted(user, lang))) - return TRUE - return allowed_languages[lang.name] - -/datum/category_item/player_setup_item/background/languages/proc/sanitize_alt_languages() - if(!istype(pref.alternate_languages)) - pref.alternate_languages = list() - var/preference_mob = preference_mob() - rebuild_language_cache(preference_mob) - for(var/L in pref.alternate_languages) - var/datum/language/lang = all_languages[L] - if(!lang || !is_allowed_language(preference_mob, lang)) - pref.alternate_languages -= L - if(LAZYLEN(free_languages)) - for(var/lang in free_languages) - pref.alternate_languages -= lang - pref.alternate_languages.Insert(1, lang) - - pref.alternate_languages = uniquelist(pref.alternate_languages) - if(pref.alternate_languages.len > MAX_LANGUAGES) - pref.alternate_languages.Cut(MAX_LANGUAGES + 1) - -/datum/category_item/player_setup_item/background/languages/proc/get_language_text() - sanitize_alt_languages() - if(LAZYLEN(pref.alternate_languages)) - for(var/i = 1 to pref.alternate_languages.len) - var/lang = pref.alternate_languages[i] - if(free_languages[lang]) - LAZYADD(., "- [lang] (required).
              ") - else - LAZYADD(., "- [lang] Remove. [all_languages[lang].warning]
              ") - if(pref.alternate_languages.len < MAX_LANGUAGES) - var/remaining_langs = MAX_LANGUAGES - pref.alternate_languages.len - LAZYADD(., "- add ([remaining_langs] remaining)
              ") diff --git a/code/modules/client/preference_setup/background/03_records.dm b/code/modules/client/preference_setup/background/03_records.dm deleted file mode 100644 index 4200b5a342364..0000000000000 --- a/code/modules/client/preference_setup/background/03_records.dm +++ /dev/null @@ -1,117 +0,0 @@ -/datum/preferences - var/public_record = "" - var/med_record = "" - var/sec_record = "" - var/gen_record = "" - var/memory = "" - var/email_addr = "" - var/email_pass = "" - -/datum/category_item/player_setup_item/background/records - name = "Records" - sort_order = 3 - -/datum/category_item/player_setup_item/background/records/load_character(datum/pref_record_reader/R) - pref.public_record = R.read("public_record") - pref.med_record = R.read("med_record") - pref.sec_record = R.read("sec_record") - pref.gen_record = R.read("gen_record") - pref.memory = R.read("memory") - pref.email_addr = R.read("email_addr") - pref.email_pass = R.read("email_pass") - -/datum/category_item/player_setup_item/background/records/save_character(datum/pref_record_writer/W) - W.write("public_record", pref.public_record) - W.write("med_record", pref.med_record) - W.write("sec_record", pref.sec_record) - W.write("gen_record", pref.gen_record) - W.write("memory", pref.memory) - W.write("email_addr", pref.email_addr) - W.write("email_pass", pref.email_pass) - -/datum/category_item/player_setup_item/background/records/proc/allow_email_branch_check(datum/mil_branch/B) - return B.allow_custom_email - -/datum/category_item/player_setup_item/background/records/content(mob/user) - . = list() - - . += "
              Records:" - if (jobban_isbanned(user, "Records")) - . += "[SPAN_WARNING("You are banned from using character records.")]" - else - .+= TBTN("set_public_record", TextPreview(pref.public_record, 40), "Public") - .+= TBTN("set_medical_records", TextPreview(pref.med_record, 40), "Medical") - .+= TBTN("set_general_records", TextPreview(pref.gen_record, 40), "Employment") - .+= TBTN("set_security_records", TextPreview(pref.sec_record, 40), "Security") - .+= TBTN("set_memory", TextPreview(pref.memory, 40), "Memory") - - . += "
              Other:" - var/set_addr_button = TBTN("set_email_addr", pref.email_addr ? pref.email_addr : "(default)", "Email Address") - var/list/branches = pref.for_each_selected_branch(CALLBACK(src, .proc/allow_email_branch_check)) - for (var/name in branches) - set_addr_button += " " + (branches[name] ? UI_FONT_GOOD(name) : UI_FONT_BAD(name)) - . += set_addr_button - - . += TBTN("set_email_pass", pref.email_pass ? pref.email_pass : "(random)", "Email Password") - . = jointext(., "
              ") - -/datum/category_item/player_setup_item/background/records/OnTopic(var/href,var/list/href_list, var/mob/user) - if (href_list["set_public_record"]) - var/new_public = sanitize(input(user,"Enter general public record information here.",CHARACTER_PREFERENCE_INPUT_TITLE, html_decode(pref.public_record)) as message|null, MAX_PAPER_MESSAGE_LEN, extra = 0) - if (!isnull(new_public) && !jobban_isbanned(user, "Records") && CanUseTopic(user)) - pref.public_record = new_public - return TOPIC_REFRESH - - else if(href_list["set_medical_records"]) - var/new_medical = sanitize(input(user,"Enter medical information here.",CHARACTER_PREFERENCE_INPUT_TITLE, html_decode(pref.med_record)) as message|null, MAX_PAPER_MESSAGE_LEN, extra = 0) - if(!isnull(new_medical) && !jobban_isbanned(user, "Records") && CanUseTopic(user)) - pref.med_record = new_medical - return TOPIC_REFRESH - - else if(href_list["set_general_records"]) - var/new_general = sanitize(input(user,"Enter employment information here.",CHARACTER_PREFERENCE_INPUT_TITLE, html_decode(pref.gen_record)) as message|null, MAX_PAPER_MESSAGE_LEN, extra = 0) - if(!isnull(new_general) && !jobban_isbanned(user, "Records") && CanUseTopic(user)) - pref.gen_record = new_general - return TOPIC_REFRESH - - else if(href_list["set_security_records"]) - var/sec_medical = sanitize(input(user,"Enter security information here.",CHARACTER_PREFERENCE_INPUT_TITLE, html_decode(pref.sec_record)) as message|null, MAX_PAPER_MESSAGE_LEN, extra = 0) - if(!isnull(sec_medical) && !jobban_isbanned(user, "Records") && CanUseTopic(user)) - pref.sec_record = sec_medical - return TOPIC_REFRESH - - else if(href_list["set_memory"]) - var/memes = sanitize(input(user,"Enter memorized information here.",CHARACTER_PREFERENCE_INPUT_TITLE, html_decode(pref.memory)) as message|null, MAX_PAPER_MESSAGE_LEN, extra = 0) - if(!isnull(memes) && CanUseTopic(user)) - pref.memory = memes - return TOPIC_REFRESH - - else if (href_list["set_email_pass"]) - var/value = input(user, "Enter email password:", "Email Password", pref.email_pass) as text - if (isnull(value) || !CanUseTopic(user)) - return TOPIC_NOACTION - if (value != "") - var/clean = sanitize(value) - var/chars = length(clean) - if (chars < 4 || chars > 16) - to_chat(user, SPAN_WARNING("Invalid Email Password '[clean]': must be 4..16 safe glyphs.")) - return TOPIC_NOACTION - value = clean - pref.email_pass = value - return TOPIC_REFRESH - - else if (href_list["set_email_addr"]) - var/value = input(user, "Enter email username:", "Email Address", pref.email_addr) as text - if (isnull(value) || !CanUseTopic(user)) - return TOPIC_NOACTION - if (value != "") - var/clean = sanitize_for_email(value) - var/chars = length(clean) - if (chars < 4 || chars > 24) - to_chat(user, SPAN_WARNING("Invalid Email Username '[clean]': must be 4..24 glyphs from /a-z0-9./")) - return TOPIC_NOACTION - value = clean - pref.email_addr = value - return TOPIC_REFRESH - - . = ..() diff --git a/code/modules/client/preference_setup/general/01_basic.dm b/code/modules/client/preference_setup/general/01_basic.dm deleted file mode 100644 index 692ed1ddc0403..0000000000000 --- a/code/modules/client/preference_setup/general/01_basic.dm +++ /dev/null @@ -1,67 +0,0 @@ -/datum/preferences - var/age = 30 //age of character - var/spawnpoint = "Default" //where this character will spawn (0-2). - var/metadata = "" - var/real_name //our character's name - -/datum/category_item/player_setup_item/physical/basic - name = "Basic" - sort_order = 1 - -/datum/category_item/player_setup_item/physical/basic/load_character(datum/pref_record_reader/R) - pref.spawnpoint = R.read("spawnpoint") - pref.metadata = R.read("OOC_Notes") - pref.real_name = R.read("real_name") - -/datum/category_item/player_setup_item/physical/basic/save_character(datum/pref_record_writer/W) - W.write("spawnpoint", pref.spawnpoint) - W.write("OOC_Notes", pref.metadata) - W.write("real_name", pref.real_name) - -/datum/category_item/player_setup_item/physical/basic/sanitize_character() - pref.spawnpoint = sanitize_inlist(pref.spawnpoint, spawntypes(), initial(pref.spawnpoint)) - // This is a bit noodly. If pref.cultural_info[TAG_CULTURE] is null, then we haven't finished loading/sanitizing, which means we might purge - // numbers or w/e from someone's name by comparing them to the map default. So we just don't bother sanitizing at this point otherwise. - if(pref.cultural_info[TAG_CULTURE]) - var/decl/cultural_info/check = SSculture.get_culture(pref.cultural_info[TAG_CULTURE]) - if(check) - pref.real_name = check.sanitize_name(pref.real_name, pref.species) - if(!pref.real_name) - pref.real_name = random_name(pref.gender, pref.species) - - -/datum/category_item/player_setup_item/physical/basic/content() - . = list() - //. += "[TBTN("spawnpoint", pref.spawnpoint, "Spawn Point")]
              " - . += "[TBTN("rename", pref.real_name, "Name")] [BTN("random_name", "Randomize")]" - . = jointext(., null) - - -/datum/category_item/player_setup_item/physical/basic/OnTopic(var/href,var/list/href_list, var/mob/user) - if(href_list["rename"]) - var/raw_name = input(user, "Choose your character's name:", "Character Name") as text|null - if (!isnull(raw_name) && CanUseTopic(user)) - - var/decl/cultural_info/check = SSculture.get_culture(pref.cultural_info[TAG_CULTURE]) - var/new_name = check.sanitize_name(raw_name, pref.species) - if(new_name) - pref.real_name = new_name - return TOPIC_REFRESH - else - 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 .") - return TOPIC_NOACTION - - else if(href_list["random_name"]) - pref.real_name = random_name(pref.gender, pref.species) - return TOPIC_REFRESH - - else if(href_list["spawnpoint"]) - var/list/spawnkeys = list() - for(var/spawntype in spawntypes()) - spawnkeys += spawntype - var/choice = input(user, "Where would you like to spawn when late-joining?") as null|anything in spawnkeys - if(!choice || !spawntypes()[choice] || !CanUseTopic(user)) return TOPIC_NOACTION - pref.spawnpoint = choice - return TOPIC_REFRESH - - return ..() diff --git a/code/modules/client/preference_setup/general/02_body.dm b/code/modules/client/preference_setup/general/02_body.dm deleted file mode 100644 index 4394f206bcd8c..0000000000000 --- a/code/modules/client/preference_setup/general/02_body.dm +++ /dev/null @@ -1,655 +0,0 @@ -var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O+", "O-") - -/datum/preferences - var/species = SPECIES_HUMAN - var/gender = MALE //gender of character (well duh) - var/b_type = "A+" //blood type (not-chooseable) - var/head_hair_style = "Bald" //Hair type - var/head_hair_color = "#000000" - var/facial_hair_style = "Shaved" //Face hair type - var/facial_hair_color = "#000000" - var/eye_color = "#000000" - var/skin_tone = 0 - var/skin_color = "#000000" - var/base_skin = "" - var/list/body_markings = list() - var/list/body_descriptors = list() - - // maps each organ to either null(intact), "cyborg" or "amputated" - // will probably not be able to do this for head and torso ;) - var/list/organ_data - var/list/rlimb_data - var/disabilities = 0 - - -/datum/category_item/player_setup_item/physical/body - name = "Body" - sort_order = 2 - var/hide_species = TRUE - -/datum/category_item/player_setup_item/physical/body/load_character(datum/pref_record_reader/R) - pref.species = R.read("species") - if(R.get_version() < 2 && pref.species == "booster") - pref.species = "human" - pref.age = R.read("age") - pref.gender = R.read("gender") - pref.head_hair_color = R.read("head_hair_color") - if (!pref.head_hair_color) - pref.head_hair_color = rgb(R.read("hair_red"), R.read("hair_green"), R.read("hair_blue")) - pref.facial_hair_color = R.read("facial_hair_color") - if (!pref.facial_hair_color) - pref.facial_hair_color = rgb(R.read("facial_red"), R.read("facial_green"), R.read("facial_blue")) - pref.eye_color = R.read("eye_color") - if (!pref.eye_color) - pref.eye_color = rgb(R.read("eyes_red"), R.read("eyes_green"), R.read("eyes_blue")) - pref.skin_tone = R.read("skin_tone") - pref.skin_color = R.read("skin_color") - if (!pref.skin_color) - pref.skin_color = rgb(R.read("skin_red"), R.read("skin_green"), R.read("skin_blue")) - pref.base_skin = R.read("skin_base") - pref.head_hair_style = R.read("hair_style_name") - pref.facial_hair_style = R.read("facial_style_name") - pref.b_type = R.read("b_type") - pref.disabilities = R.read("disabilities") - pref.organ_data = R.read("organ_data") - pref.rlimb_data = R.read("rlimb_data") - pref.body_markings = R.read("body_markings") - pref.body_descriptors = R.read("body_descriptors") - - -/datum/category_item/player_setup_item/physical/body/save_character(datum/pref_record_writer/W) - W.write("species", pref.species) - W.write("gender", pref.gender) - W.write("age", pref.age) - W.write("head_hair_color", pref.head_hair_color) - W.write("facial_hair_color", pref.facial_hair_color) - W.write("skin_tone", pref.skin_tone) - W.write("skin_color", pref.skin_color) - W.write("skin_base", pref.base_skin) - W.write("hair_style_name", pref.head_hair_style) - W.write("facial_style_name", pref.facial_hair_style) - W.write("eye_color", pref.eye_color) - W.write("b_type", pref.b_type) - W.write("disabilities", pref.disabilities) - W.write("organ_data", pref.organ_data) - W.write("rlimb_data", pref.rlimb_data) - W.write("body_markings", pref.body_markings) - W.write("body_descriptors", pref.body_descriptors) - - -/datum/category_item/player_setup_item/physical/body/sanitize_character() - pref.head_hair_color = sanitize_hexcolor(pref.head_hair_color) - pref.facial_hair_color = sanitize_hexcolor(pref.facial_hair_color) - pref.eye_color = sanitize_hexcolor(pref.eye_color) - pref.skin_color = sanitize_hexcolor(pref.skin_color) - pref.head_hair_style = sanitize_inlist(pref.head_hair_style, GLOB.hair_styles_list, initial(pref.head_hair_style)) - pref.facial_hair_style = sanitize_inlist(pref.facial_hair_style, GLOB.facial_hair_styles_list, initial(pref.facial_hair_style)) - pref.b_type = sanitize_text(pref.b_type, initial(pref.b_type)) - - if(!pref.species || !(pref.species in playable_species)) - pref.species = SPECIES_HUMAN - var/datum/species/mob_species = all_species[pref.species] - - pref.gender = sanitize_inlist(pref.gender, mob_species.genders, pick(mob_species.genders)) - pref.age = sanitize_integer(pref.age, mob_species.min_age, mob_species.max_age, initial(pref.age)) - - var/low_skin_tone = mob_species ? (35 - mob_species.max_skin_tone()) : -185 - sanitize_integer(pref.skin_tone, low_skin_tone, 34, initial(pref.skin_tone)) - - if(!mob_species.base_skin_colours || isnull(mob_species.base_skin_colours[pref.base_skin])) - pref.base_skin = "" - - pref.disabilities = sanitize_integer(pref.disabilities, 0, 65535, initial(pref.disabilities)) - if(!istype(pref.organ_data)) pref.organ_data = list() - if(!istype(pref.rlimb_data)) pref.rlimb_data = list() - if(!istype(pref.body_markings)) - pref.body_markings = list() - else - pref.body_markings &= GLOB.body_marking_styles_list - - sanitize_organs() - - var/list/last_descriptors = list() - if(islist(pref.body_descriptors)) - last_descriptors = pref.body_descriptors.Copy() - pref.body_descriptors = list() - - if(LAZYLEN(mob_species.descriptors)) - for(var/entry in mob_species.descriptors) - var/datum/mob_descriptor/descriptor = mob_species.descriptors[entry] - if(istype(descriptor)) - if(isnull(last_descriptors[entry])) - pref.body_descriptors[entry] = descriptor.default_value // Species datums have initial default value. - else - pref.body_descriptors[entry] = clamp(last_descriptors[entry], 1, LAZYLEN(descriptor.standalone_value_descriptors)) - - -/datum/category_item/player_setup_item/physical/body/content(mob/user) - . = list() - var/datum/species/mob_species = all_species[pref.species] - . += "Species [BTN("show_species", "Info")]" - . += "
              [TBTN("set_species", mob_species.name, "Selected")]" - . += "

              Body [BTN("random", "Randomize")]" - . += "
              [TBTN("gender", gender2text(pref.gender), "Gender")]" - . += "
              [TBTN("age", pref.age, "Age")]" - . += "
              [TBTN("blood_type", pref.b_type, "Blood Type")]" - . += "
              [VTBTN("disabilities", NEARSIGHTED, pref.disabilities & NEARSIGHTED ? "Yes" : "No", "Glasses")]" - - if (length(pref.body_descriptors)) - for (var/entry in pref.body_descriptors) - var/datum/mob_descriptor/descriptor = mob_species.descriptors[entry] - if (!descriptor) //this hides a nabber problem - continue - var/description = descriptor.get_standalone_value_descriptor(pref.body_descriptors[entry]) - . += "
              [VBTN("change_descriptor", entry, capitalize(descriptor.chargen_label))] - [description]" - - if (has_flag(mob_species, HAS_EYE_COLOR)) - var/color = pref.eye_color - . += "[TBTN("eye_color", "Color", "
              Eyes")] [COLOR_PREVIEW(color)]" - - var/has_head_hair = length(mob_species.get_hair_styles()) - if (has_head_hair > 1) - . += "
              Hair " - if (has_flag(mob_species, HAS_HAIR_COLOR)) - var/color = pref.head_hair_color - . += "[BTN("hair_color", "Color")] [COLOR_PREVIEW(color)] " - . += "[BTN("hair_style=1;dec", "<")][BTN("hair_style=1;inc", ">")][BTN("hair_style", pref.head_hair_style)]" - - var/has_facial_hair = length(mob_species.get_facial_hair_styles(pref.gender)) - if (has_facial_hair > 1) - . += "
              Facial Hair " - if (has_flag(mob_species, HAS_HAIR_COLOR)) - var/color = pref.facial_hair_color - . += "[BTN("facial_color", "Color")] [COLOR_PREVIEW(color)] " - . += "[BTN("facial_style=1;dec", "<")][BTN("facial_style=1;inc", ">")][BTN("facial_style", pref.facial_hair_style)]" - - if (has_flag(mob_species, HAS_BASE_SKIN_COLOURS)) - . += TBTN("base_skin", pref.base_skin, "
              Base Skin") - if (has_flag(mob_species, HAS_SKIN_COLOR)) - var/color = pref.skin_color - . += "[TBTN("skin_color", "Color", "
              Skin Color")] [COLOR_PREVIEW(color)]" - else if (has_flag(mob_species, HAS_A_SKIN_TONE)) - . += "[TBTN("skin_tone", "[-pref.skin_tone + 35]/[mob_species.max_skin_tone()]", "
              Skin Tone")]" - - . += "
              [BTN("marking_style", "+ Body Marking")]" - for (var/marking in pref.body_markings) - . += "
              [VTBTN("marking_remove", marking, "-", marking)] " - var/datum/sprite_accessory/marking/instance = GLOB.body_marking_styles_list[marking] - if (instance.do_coloration == DO_COLORATION_USER) - var/color = pref.body_markings[marking] - . += "[VBTN("marking_color", marking, "Color")] [COLOR_PREVIEW(color)]" - if (length(pref.body_markings)) - . += "
              " - - . += "
              [TBTN("reset_limbs", "Reset", "Body Parts")] [BTN("limbs", "Adjust Limbs")] [BTN("organs", "Adjust Organs")]" - var/list/alt_organs = list() - for (var/name in pref.organ_data) - var/status = pref.organ_data[name] - var/organ_name - switch (name) - if (BP_L_ARM) organ_name = "left arm" - if (BP_R_ARM) organ_name = "right arm" - if (BP_L_LEG) organ_name = "left leg" - if (BP_R_LEG) organ_name = "right leg" - if (BP_L_FOOT) organ_name = "left foot" - if (BP_R_FOOT) organ_name = "right foot" - if (BP_L_HAND) organ_name = "left hand" - if (BP_R_HAND) organ_name = "right hand" - if (BP_HEART) organ_name = BP_HEART - if (BP_EYES) organ_name = BP_EYES - if (BP_BRAIN) organ_name = BP_BRAIN - if (BP_LUNGS) organ_name = BP_LUNGS - if (BP_LIVER) organ_name = BP_LIVER - if (BP_KIDNEYS) organ_name = BP_KIDNEYS - if (BP_STOMACH) organ_name = BP_STOMACH - if (BP_CHEST) organ_name = "upper body" - if (BP_GROIN) organ_name = "lower body" - if (BP_HEAD) organ_name = "head" - switch (status) - if ("amputated") alt_organs += "Amputated [organ_name]" - if ("mechanical") - alt_organs += "[organ_name == BP_BRAIN ? "Positronic" : "Synthetic"] [organ_name]" - if ("cyborg") - var/datum/robolimb/limb = basic_robolimb - if (pref.rlimb_data[name] && all_robolimbs[pref.rlimb_data[name]]) - limb = all_robolimbs[pref.rlimb_data[name]] - alt_organs += "[limb.company] [organ_name] prosthesis" - if ("assisted") - switch (organ_name) - if (BP_HEART) alt_organs += "Pacemaker-assisted [organ_name]" - if ("voicebox") alt_organs += "Surgically altered [organ_name]" - if (BP_EYES) alt_organs += "Retinal overlayed [organ_name]" - if (BP_BRAIN) alt_organs += "Machine-interface [organ_name]" - else alt_organs += "Mechanically assisted [organ_name]" - if (!length(alt_organs)) - alt_organs += "(No differences from baseline)" - . += "
              [alt_organs.Join(", ")]" - . = jointext(., null) - - -/datum/category_item/player_setup_item/physical/body/proc/has_flag(var/datum/species/mob_species, var/flag) - return mob_species && (mob_species.appearance_flags & flag) - -/datum/category_item/player_setup_item/physical/body/OnTopic(var/href,var/list/href_list, var/mob/user) - var/datum/species/mob_species = all_species[pref.species] - - if(href_list["toggle_species_verbose"]) - hide_species = !hide_species - return TOPIC_REFRESH - - else if(href_list["gender"]) - var/new_gender = input(user, "Choose your character's gender:", CHARACTER_PREFERENCE_INPUT_TITLE, pref.gender) as null|anything in mob_species.genders - mob_species = all_species[pref.species] - if(new_gender && CanUseTopic(user) && (new_gender in mob_species.genders)) - pref.gender = new_gender - if(!(pref.facial_hair_style in mob_species.get_facial_hair_styles(pref.gender))) - ResetFacialHair() - return TOPIC_REFRESH_UPDATE_PREVIEW - - else if(href_list["age"]) - var/new_age = input(user, "Choose your character's age:\n([mob_species.min_age]-[mob_species.max_age])", CHARACTER_PREFERENCE_INPUT_TITLE, pref.age) as num|null - if(new_age && CanUseTopic(user)) - pref.age = max(min(round(text2num(new_age)), mob_species.max_age), mob_species.min_age) - pref.skills_allocated = pref.sanitize_skills(pref.skills_allocated) // The age may invalidate skill loadouts - return TOPIC_REFRESH - - else if(href_list["random"]) - pref.randomize_appearance_and_body_for() - return TOPIC_REFRESH_UPDATE_PREVIEW - - else if(href_list["change_descriptor"]) - if(mob_species.descriptors) - var/desc_id = href_list["change_descriptor"] - if(pref.body_descriptors[desc_id]) - var/datum/mob_descriptor/descriptor = mob_species.descriptors[desc_id] - var/choice = input("Please select a descriptor.", "Descriptor") as null|anything in descriptor.chargen_value_descriptors - if(choice && mob_species.descriptors[desc_id]) // Check in case they sneakily changed species. - pref.body_descriptors[desc_id] = descriptor.chargen_value_descriptors[choice] - return TOPIC_REFRESH_UPDATE_PREVIEW - - else if(href_list["blood_type"]) - var/new_b_type = input(user, "Choose your character's blood-type:", CHARACTER_PREFERENCE_INPUT_TITLE) as null|anything in valid_bloodtypes - if(new_b_type && CanUseTopic(user)) - pref.b_type = new_b_type - return TOPIC_REFRESH - - else if(href_list["show_species"]) - var/choice = input("Which species would you like to look at?") as null|anything in playable_species - if(choice) - var/datum/species/current_species = all_species[choice] - show_browser(user, current_species.get_description(), "window=species;size=700x400") - return TOPIC_HANDLED - - else if(href_list["set_species"]) - - var/list/species_to_pick = list() - for(var/species in playable_species) - if(!GLOB.skip_allow_lists && !check_rights(R_ADMIN, 0) && config.usealienwhitelist) - var/datum/species/current_species = all_species[species] - if(!(current_species.spawn_flags & SPECIES_CAN_JOIN)) - continue - else if((current_species.spawn_flags & SPECIES_IS_WHITELISTED) && !is_alien_whitelisted(preference_mob(),current_species)) - continue - species_to_pick += species - - var/choice = input("Select a species to play as.") as null|anything in species_to_pick - if(!choice || !(choice in all_species)) - return - - var/prev_species = pref.species - pref.species = choice - if(prev_species != pref.species) - mob_species = all_species[pref.species] - if(!(pref.gender in mob_species.genders)) - pref.gender = mob_species.genders[1] - - ResetAllHair() - - //reset hair colour and skin colour - pref.head_hair_color = "#000000" - pref.skin_tone = 0 - pref.age = max(min(pref.age, mob_species.max_age), mob_species.min_age) - - reset_limbs() // Safety for species with incompatible manufacturers; easier than trying to do it case by case. - pref.body_markings.Cut() // Basically same as above. - - prune_occupation_prefs() - pref.skills_allocated = pref.sanitize_skills(pref.skills_allocated) - - pref.cultural_info = mob_species.default_cultural_info.Copy() - - sanitize_organs() - - if(!has_flag(all_species[pref.species], HAS_UNDERWEAR)) - pref.all_underwear.Cut() - - return TOPIC_REFRESH_UPDATE_PREVIEW - - else if(href_list["hair_color"]) - if(!has_flag(mob_species, HAS_HAIR_COLOR)) - return TOPIC_NOACTION - var/new_hair = input(user, "Choose your character's hair colour:", CHARACTER_PREFERENCE_INPUT_TITLE, pref.head_hair_color) as color|null - if(new_hair && has_flag(all_species[pref.species], HAS_HAIR_COLOR) && CanUseTopic(user)) - pref.head_hair_color = new_hair - return TOPIC_REFRESH_UPDATE_PREVIEW - - else if(href_list["hair_style"]) - var/list/valid_hairstyles = mob_species.get_hair_styles() - var/new_h_style - var/hair_index = valid_hairstyles.Find(pref.head_hair_style) - - if (href_list["inc"]) - if (hair_index < valid_hairstyles.len && valid_hairstyles[hair_index + 1]) - new_h_style = valid_hairstyles[hair_index + 1] - else if (href_list["dec"]) - if (hair_index > 1 && valid_hairstyles[hair_index - 1]) - new_h_style = valid_hairstyles[hair_index - 1] - else - new_h_style = input(user, "Choose your character's hair style:", CHARACTER_PREFERENCE_INPUT_TITLE, pref.head_hair_style) as null|anything in valid_hairstyles - - mob_species = all_species[pref.species] - if(new_h_style && CanUseTopic(user) && (new_h_style in mob_species.get_hair_styles())) - pref.head_hair_style = new_h_style - return TOPIC_REFRESH_UPDATE_PREVIEW - - else if(href_list["facial_color"]) - if(!has_flag(mob_species, HAS_HAIR_COLOR)) - return TOPIC_NOACTION - var/new_facial = input(user, "Choose your character's facial-hair colour:", CHARACTER_PREFERENCE_INPUT_TITLE, pref.facial_hair_color) as color|null - if(new_facial && has_flag(all_species[pref.species], HAS_HAIR_COLOR) && CanUseTopic(user)) - pref.facial_hair_color = new_facial - return TOPIC_REFRESH_UPDATE_PREVIEW - - else if(href_list["eye_color"]) - if(!has_flag(mob_species, HAS_EYE_COLOR)) - return TOPIC_NOACTION - var/new_eyes = input(user, "Choose your character's eye colour:", CHARACTER_PREFERENCE_INPUT_TITLE, pref.eye_color) as color|null - if(new_eyes && has_flag(all_species[pref.species], HAS_EYE_COLOR) && CanUseTopic(user)) - pref.eye_color = new_eyes - return TOPIC_REFRESH_UPDATE_PREVIEW - - else if(href_list["base_skin"]) - if(!has_flag(mob_species, HAS_BASE_SKIN_COLOURS)) - return TOPIC_NOACTION - var/new_s_base = input(user, "Choose your character's base colour:", CHARACTER_PREFERENCE_INPUT_TITLE) as null|anything in mob_species.base_skin_colours - if(new_s_base && CanUseTopic(user)) - pref.base_skin = new_s_base - return TOPIC_REFRESH_UPDATE_PREVIEW - - else if(href_list["skin_tone"]) - if(!has_flag(mob_species, HAS_A_SKIN_TONE)) - return TOPIC_NOACTION - var/new_s_tone = input(user, "Choose your character's skin-tone. Lower numbers are lighter, higher are darker. Range: 1 to [mob_species.max_skin_tone()]", CHARACTER_PREFERENCE_INPUT_TITLE, (-pref.skin_tone) + 35) as num|null - mob_species = all_species[pref.species] - if(new_s_tone && has_flag(mob_species, HAS_A_SKIN_TONE) && CanUseTopic(user)) - pref.skin_tone = 35 - max(min(round(new_s_tone), mob_species.max_skin_tone()), 1) - return TOPIC_REFRESH_UPDATE_PREVIEW - - else if(href_list["skin_color"]) - if(!has_flag(mob_species, HAS_SKIN_COLOR)) - return TOPIC_NOACTION - var/new_skin = input(user, "Choose your character's skin colour: ", CHARACTER_PREFERENCE_INPUT_TITLE, pref.skin_color) as color|null - if(new_skin && has_flag(all_species[pref.species], HAS_SKIN_COLOR) && CanUseTopic(user)) - pref.skin_color = new_skin - return TOPIC_REFRESH_UPDATE_PREVIEW - - else if(href_list["facial_style"]) - var/list/valid_facialhairstyles = mob_species.get_facial_hair_styles(pref.gender) - var/new_f_style - var/hair_index = valid_facialhairstyles.Find(pref.facial_hair_style) - - if (href_list["inc"]) - if (hair_index < valid_facialhairstyles.len && valid_facialhairstyles[hair_index + 1]) - new_f_style = valid_facialhairstyles[hair_index + 1] - else if (href_list["dec"]) - if (hair_index > 1 && valid_facialhairstyles[hair_index - 1]) - new_f_style = valid_facialhairstyles[hair_index - 1] - else - new_f_style = input(user, "Choose your character's facial-hair style:", CHARACTER_PREFERENCE_INPUT_TITLE, pref.facial_hair_style) as null|anything in valid_facialhairstyles - - mob_species = all_species[pref.species] - if(new_f_style && CanUseTopic(user) && (new_f_style in mob_species.get_facial_hair_styles(pref.gender))) - pref.facial_hair_style = new_f_style - return TOPIC_REFRESH_UPDATE_PREVIEW - - else if(href_list["marking_style"]) - var/list/disallowed_markings = list() - for (var/M in pref.body_markings) - var/datum/sprite_accessory/marking/mark_style = GLOB.body_marking_styles_list[M] - disallowed_markings |= mark_style.disallows - var/list/usable_markings = pref.body_markings.Copy() ^ GLOB.body_marking_styles_list.Copy() - for(var/M in usable_markings) - var/datum/sprite_accessory/S = usable_markings[M] - if(is_type_in_list(S, disallowed_markings) || (S.species_allowed && !(mob_species.get_bodytype() in S.species_allowed)) || (S.subspecies_allowed && !(mob_species.name in S.subspecies_allowed))) - usable_markings -= M - - var/new_marking = input(user, "Choose a body marking:", CHARACTER_PREFERENCE_INPUT_TITLE) as null|anything in usable_markings - if(new_marking && CanUseTopic(user)) - pref.body_markings[new_marking] = "#000000" //New markings start black - return TOPIC_REFRESH_UPDATE_PREVIEW - - else if(href_list["marking_remove"]) - var/M = href_list["marking_remove"] - pref.body_markings -= M - return TOPIC_REFRESH_UPDATE_PREVIEW - - else if(href_list["marking_color"]) - var/M = href_list["marking_color"] - var/mark_color = input(user, "Choose the [M] color: ", CHARACTER_PREFERENCE_INPUT_TITLE, pref.body_markings[M]) as color|null - if(mark_color && CanUseTopic(user)) - pref.body_markings[M] = "[mark_color]" - return TOPIC_REFRESH_UPDATE_PREVIEW - - else if(href_list["reset_limbs"]) - reset_limbs() - return TOPIC_REFRESH_UPDATE_PREVIEW - - else if(href_list["limbs"]) - - var/list/limb_selection_list = list("Left Leg","Right Leg","Left Arm","Right Arm","Left Foot","Right Foot","Left Hand","Right Hand","Full Body") - - // Full prosthetic bodies without a brain are borderline unkillable so make sure they have a brain to remove/destroy. - var/datum/species/current_species = all_species[pref.species] - if(current_species.spawn_flags & SPECIES_NO_FBP_CHARGEN) - limb_selection_list -= "Full Body" - else if(pref.organ_data[BP_CHEST] == "cyborg") - limb_selection_list |= "Head" - - var/organ_tag = input(user, "Which limb do you want to change?") as null|anything in limb_selection_list - - if(!organ_tag || !CanUseTopic(user)) return TOPIC_NOACTION - - var/limb = null - var/second_limb = null // if you try to change the arm, the hand should also change - var/third_limb = null // if you try to unchange the hand, the arm should also change - - // Do not let them amputate their entire body, ty. - var/list/choice_options = list("Normal","Amputated","Prosthesis") - - //Dare ye who decides to one day make fbps be able to have fleshy bits. Heed my warning, recursion is a bitch. - Snapshot - if(pref.organ_data[BP_CHEST] == "cyborg") - choice_options = list("Amputated", "Prosthesis") - - switch(organ_tag) - if("Left Leg") - limb = BP_L_LEG - second_limb = BP_L_FOOT - if("Right Leg") - limb = BP_R_LEG - second_limb = BP_R_FOOT - if("Left Arm") - limb = BP_L_ARM - second_limb = BP_L_HAND - if("Right Arm") - limb = BP_R_ARM - second_limb = BP_R_HAND - if("Left Foot") - limb = BP_L_FOOT - third_limb = BP_L_LEG - if("Right Foot") - limb = BP_R_FOOT - third_limb = BP_R_LEG - if("Left Hand") - limb = BP_L_HAND - third_limb = BP_L_ARM - if("Right Hand") - limb = BP_R_HAND - third_limb = BP_R_ARM - if("Head") - limb = BP_HEAD - choice_options = list("Prosthesis") - if("Full Body") - limb = BP_CHEST - third_limb = BP_GROIN - choice_options = list("Normal","Prosthesis") - - var/new_state = input(user, "What state do you wish the limb to be in?") as null|anything in choice_options - if(!new_state || !CanUseTopic(user)) return TOPIC_NOACTION - - switch(new_state) - if("Normal") - if(limb == BP_CHEST) - for(var/other_limb in (BP_ALL_LIMBS - BP_CHEST)) - pref.organ_data[other_limb] = null - pref.rlimb_data[other_limb] = null - for(var/internal_organ in list(BP_HEART,BP_EYES,BP_LUNGS,BP_LIVER,BP_KIDNEYS,BP_STOMACH,BP_BRAIN)) - pref.organ_data[internal_organ] = null - pref.organ_data[limb] = null - pref.rlimb_data[limb] = null - if(third_limb) - pref.organ_data[third_limb] = null - pref.rlimb_data[third_limb] = null - if("Amputated") - if(limb == BP_CHEST) - return - pref.organ_data[limb] = "amputated" - pref.rlimb_data[limb] = null - if(second_limb) - pref.organ_data[second_limb] = "amputated" - pref.rlimb_data[second_limb] = null - - if("Prosthesis") - var/datum/species/temp_species = pref.species ? all_species[pref.species] : all_species[SPECIES_HUMAN] - var/tmp_species = temp_species.get_bodytype(user) - var/list/usable_manufacturers = list() - for(var/company in chargen_robolimbs) - var/datum/robolimb/M = chargen_robolimbs[company] - if(tmp_species in M.species_cannot_use) - continue - if(M.restricted_to.len && !(tmp_species in M.restricted_to)) - continue - if(M.applies_to_part.len && !(limb in M.applies_to_part)) - continue - if(M.allowed_bodytypes && !(tmp_species in M.allowed_bodytypes)) - continue - usable_manufacturers[company] = M - if(!usable_manufacturers.len) - return - var/choice = input(user, "Which manufacturer do you wish to use for this limb?") as null|anything in usable_manufacturers - if(!choice) - return - pref.rlimb_data[limb] = choice - pref.organ_data[limb] = "cyborg" - if(second_limb) - pref.rlimb_data[second_limb] = choice - pref.organ_data[second_limb] = "cyborg" - if(third_limb && pref.organ_data[third_limb] == "amputated") - pref.organ_data[third_limb] = null - - if(limb == BP_CHEST) - for(var/other_limb in BP_ALL_LIMBS - BP_CHEST) - pref.organ_data[other_limb] = "cyborg" - pref.rlimb_data[other_limb] = choice - if(!pref.organ_data[BP_BRAIN]) - pref.organ_data[BP_BRAIN] = "assisted" - for(var/internal_organ in list(BP_HEART,BP_EYES,BP_LUNGS,BP_LIVER,BP_KIDNEYS)) - pref.organ_data[internal_organ] = "mechanical" - - return TOPIC_REFRESH_UPDATE_PREVIEW - - else if(href_list["organs"]) - var/organ_name = input(user, "Which internal function do you want to change?") as null|anything in list("Heart", "Eyes", "Lungs", "Liver", "Kidneys", "Stomach") - if(!organ_name) return - - var/organ = null - switch(organ_name) - if("Heart") - organ = BP_HEART - if("Eyes") - organ = BP_EYES - if("Lungs") - organ = BP_LUNGS - if("Liver") - organ = BP_LIVER - if("Kidneys") - organ = BP_KIDNEYS - if("Stomach") - organ = BP_STOMACH - - var/list/organ_choices = list("Normal","Assisted","Synthetic") - - if(mob_species && mob_species.spawn_flags & SPECIES_NO_ROBOTIC_INTERNAL_ORGANS) - organ_choices -= "Assisted" - organ_choices -= "Synthetic" - - if(pref.organ_data[BP_CHEST] == "cyborg") - organ_choices -= "Normal" - organ_choices += "Synthetic" - - var/new_state = input(user, "What state do you wish the organ to be in?") as null|anything in organ_choices - if(!new_state) return - - switch(new_state) - if("Normal") - pref.organ_data[organ] = null - if("Assisted") - pref.organ_data[organ] = "assisted" - if("Synthetic") - pref.organ_data[organ] = "mechanical" - - sanitize_organs() - return TOPIC_REFRESH - - else if(href_list["disabilities"]) - var/disability_flag = text2num(href_list["disabilities"]) - pref.disabilities ^= disability_flag - return TOPIC_REFRESH_UPDATE_PREVIEW - - return ..() - - -/datum/category_item/player_setup_item/physical/body/proc/reset_limbs() - pref.organ_data.Cut() - pref.rlimb_data.Cut() - -/datum/category_item/player_setup_item/proc/ResetAllHair() - ResetHair() - ResetFacialHair() - -/datum/category_item/player_setup_item/proc/ResetHair() - var/datum/species/mob_species = all_species[pref.species] - var/list/valid_hairstyles = mob_species.get_hair_styles() - - if(valid_hairstyles.len) - pref.head_hair_style = pick(valid_hairstyles) - else - //this shouldn't happen - pref.head_hair_style = GLOB.hair_styles_list["Bald"] - -/datum/category_item/player_setup_item/proc/ResetFacialHair() - var/datum/species/mob_species = all_species[pref.species] - var/list/valid_facialhairstyles = mob_species.get_facial_hair_styles(pref.gender) - - if(valid_facialhairstyles.len) - pref.facial_hair_style = pick(valid_facialhairstyles) - else - //this shouldn't happen - pref.facial_hair_style = GLOB.facial_hair_styles_list["Shaved"] - -/datum/category_item/player_setup_item/physical/body/proc/sanitize_organs() - var/datum/species/mob_species = all_species[pref.species] - if(mob_species && mob_species.spawn_flags & SPECIES_NO_ROBOTIC_INTERNAL_ORGANS) - for(var/name in pref.organ_data) - var/status = pref.organ_data[name] - if(status in list("assisted","mechanical")) - pref.organ_data[name] = null diff --git a/code/modules/client/preference_setup/general/03_equipment.dm b/code/modules/client/preference_setup/general/03_equipment.dm deleted file mode 100644 index 1d765fb77345d..0000000000000 --- a/code/modules/client/preference_setup/general/03_equipment.dm +++ /dev/null @@ -1,198 +0,0 @@ -/datum/preferences - var/list/all_underwear - var/list/all_underwear_metadata - - var/decl/backpack_outfit/backpack - var/list/backpack_metadata - - var/sensor_setting - var/sensors_locked - -/datum/category_item/player_setup_item/physical/equipment - name = "Clothing" - sort_order = 3 - - var/static/list/backpacks_by_name - -/datum/category_item/player_setup_item/physical/equipment/New() - ..() - if(!backpacks_by_name) - backpacks_by_name = list() - var/bos = decls_repository.get_decls_of_subtype(/decl/backpack_outfit) - for(var/bo in bos) - var/decl/backpack_outfit/backpack_outfit = bos[bo] - backpacks_by_name[backpack_outfit.name] = backpack_outfit - -/datum/category_item/player_setup_item/physical/equipment/load_character(datum/pref_record_reader/R) - var/load_backbag - - pref.all_underwear = R.read("all_underwear") - pref.all_underwear_metadata = R.read("all_underwear_metadata") - load_backbag = R.read("backpack") - pref.backpack_metadata = R.read("backpack_metadata") - pref.sensor_setting = R.read("sensor_setting") - pref.sensors_locked = R.read("sensors_locked") - - pref.backpack = backpacks_by_name[load_backbag] || get_default_outfit_backpack() - -/datum/category_item/player_setup_item/physical/equipment/save_character(datum/pref_record_writer/W) - W.write("all_underwear", pref.all_underwear) - W.write("all_underwear_metadata", pref.all_underwear_metadata) - W.write("backpack", pref.backpack.name) - W.write("backpack_metadata", pref.backpack_metadata) - W.write("sensor_setting", pref.sensor_setting) - W.write("sensors_locked", pref.sensors_locked) - -/datum/category_item/player_setup_item/physical/equipment/sanitize_character() - if(!istype(pref.all_underwear)) - pref.all_underwear = list() - - for(var/datum/category_group/underwear/WRC in GLOB.underwear.categories) - for(var/datum/category_item/underwear/WRI in WRC.items) - if(WRI.is_default(pref.gender ? pref.gender : MALE)) - pref.all_underwear[WRC.name] = WRI.name - break - - var/datum/species/mob_species = all_species[pref.species] - if(!(mob_species && mob_species.appearance_flags & HAS_UNDERWEAR)) - pref.all_underwear.Cut() - - if(!istype(pref.all_underwear_metadata)) - pref.all_underwear_metadata = list() - - for(var/underwear_category in pref.all_underwear) - var/datum/category_group/underwear/UWC = GLOB.underwear.categories_by_name[underwear_category] - if(!UWC) - pref.all_underwear -= underwear_category - else - var/datum/category_item/underwear/UWI = UWC.items_by_name[pref.all_underwear[underwear_category]] - if(!UWI) - pref.all_underwear -= underwear_category - - for(var/underwear_metadata in pref.all_underwear_metadata) - if(!(underwear_metadata in pref.all_underwear)) - pref.all_underwear_metadata -= underwear_metadata - - if(!pref.backpack || !(pref.backpack.name in backpacks_by_name)) - pref.backpack = get_default_outfit_backpack() - - if(!istype(pref.backpack_metadata)) - pref.backpack_metadata = list() - - for(var/backpack_metadata_name in pref.backpack_metadata) - if(!(backpack_metadata_name in backpacks_by_name)) - pref.backpack_metadata -= backpack_metadata_name - - for(var/backpack_name in backpacks_by_name) - var/decl/backpack_outfit/backpack = backpacks_by_name[backpack_name] - var/list/tweak_metadata = pref.backpack_metadata["[backpack]"] - if(tweak_metadata) - for(var/tw in backpack.tweaks) - var/datum/backpack_tweak/tweak = tw - var/list/metadata = tweak_metadata["[tweak]"] - tweak_metadata["[tweak]"] = tweak.validate_metadata(metadata) - - pref.sensor_setting = sanitize_inlist(pref.sensor_setting, SUIT_SENSOR_MODES, get_key_by_index(SUIT_SENSOR_MODES, 0)) - pref.sensors_locked = sanitize_bool(pref.sensors_locked, FALSE) - -/datum/category_item/player_setup_item/physical/equipment/content() - . = list() - . += "Equipment:
              " - for(var/datum/category_group/underwear/UWC in GLOB.underwear.categories) - var/item_name = (pref.all_underwear && pref.all_underwear[UWC.name]) ? pref.all_underwear[UWC.name] : "None" - . += "[UWC.name]: [item_name]" - - var/datum/category_item/underwear/UWI = UWC.items_by_name[item_name] - if(UWI) - for(var/datum/gear_tweak/gt in UWI.tweaks) - . += " [gt.get_contents(get_underwear_metadata(UWC.name, gt))]" - - . += "
              " - . += "Backpack Type: [pref.backpack.name]" - for(var/datum/backpack_tweak/bt in pref.backpack.tweaks) - . += " [bt.get_ui_content(get_backpack_metadata(pref.backpack, bt))]" - . += "
              " - . += "Default Suit Sensor Setting: [pref.sensor_setting]
              " - . += "Suit Sensors Locked: [pref.sensors_locked ? "Locked" : "Unlocked"]
              " - return jointext(.,null) - -/datum/category_item/player_setup_item/physical/equipment/proc/get_underwear_metadata(var/underwear_category, var/datum/gear_tweak/gt) - var/metadata = pref.all_underwear_metadata[underwear_category] - if(!metadata) - metadata = list() - pref.all_underwear_metadata[underwear_category] = metadata - - var/tweak_data = metadata["[gt]"] - if(!tweak_data) - tweak_data = gt.get_default() - metadata["[gt]"] = tweak_data - return tweak_data - -/datum/category_item/player_setup_item/physical/equipment/proc/get_backpack_metadata(var/decl/backpack_outfit/backpack_outfit, var/datum/backpack_tweak/bt) - var/metadata = pref.backpack_metadata[backpack_outfit.name] - if(!metadata) - metadata = list() - pref.backpack_metadata[backpack_outfit.name] = metadata - - var/tweak_data = metadata["[bt]"] - if(!tweak_data) - tweak_data = bt.get_default_metadata() - metadata["[bt]"] = tweak_data - return tweak_data - -/datum/category_item/player_setup_item/physical/equipment/proc/set_underwear_metadata(var/underwear_category, var/datum/gear_tweak/gt, var/new_metadata) - var/list/metadata = pref.all_underwear_metadata[underwear_category] - metadata["[gt]"] = new_metadata - -/datum/category_item/player_setup_item/physical/equipment/proc/set_backpack_metadata(var/decl/backpack_outfit/backpack_outfit, var/datum/backpack_tweak/bt, var/new_metadata) - var/metadata = pref.backpack_metadata[backpack_outfit.name] - metadata["[bt]"] = new_metadata - -/datum/category_item/player_setup_item/physical/equipment/OnTopic(var/href,var/list/href_list, var/mob/user) - if(href_list["change_underwear"]) - var/datum/category_group/underwear/UWC = GLOB.underwear.categories_by_name[href_list["change_underwear"]] - if(!UWC) - return TOPIC_NOACTION - var/datum/category_item/underwear/selected_underwear = input(user, "Choose underwear:", CHARACTER_PREFERENCE_INPUT_TITLE, pref.all_underwear[UWC.name]) as null|anything in UWC.items - if(selected_underwear && CanUseTopic(user)) - pref.all_underwear[UWC.name] = selected_underwear.name - return TOPIC_REFRESH_UPDATE_PREVIEW - else if(href_list["underwear"] && href_list["tweak"]) - var/underwear = href_list["underwear"] - if(!(underwear in pref.all_underwear)) - return TOPIC_NOACTION - var/datum/gear_tweak/gt = locate(href_list["tweak"]) - if(!gt) - return TOPIC_NOACTION - var/new_metadata = gt.get_metadata(user, get_underwear_metadata(underwear, gt)) - if(new_metadata) - set_underwear_metadata(underwear, gt, new_metadata) - return TOPIC_REFRESH_UPDATE_PREVIEW - else if(href_list["change_backpack"]) - var/new_backpack = input(user, "Choose backpack style:", CHARACTER_PREFERENCE_INPUT_TITLE, pref.backpack) as null|anything in backpacks_by_name - if(!isnull(new_backpack) && CanUseTopic(user)) - pref.backpack = backpacks_by_name[new_backpack] - return TOPIC_REFRESH_UPDATE_PREVIEW - else if(href_list["backpack"] && href_list["tweak"]) - var/backpack_name = href_list["backpack"] - if(!(backpack_name in backpacks_by_name)) - return TOPIC_NOACTION - var/decl/backpack_outfit/bo = backpacks_by_name[backpack_name] - var/datum/backpack_tweak/bt = locate(href_list["tweak"]) in bo.tweaks - if(!bt) - return TOPIC_NOACTION - var/new_metadata = bt.get_metadata(user, get_backpack_metadata(bo, bt)) - if(new_metadata) - set_backpack_metadata(bo, bt, new_metadata) - return TOPIC_REFRESH_UPDATE_PREVIEW - else if(href_list["change_sensor_setting"]) - var/switchMode = input("Select a sensor mode:", "Suit Sensor Mode", pref.sensor_setting) as null | anything in SUIT_SENSOR_MODES - if(!switchMode || !CanUseTopic(user)) - return TOPIC_NOACTION - pref.sensor_setting = switchMode - return TOPIC_REFRESH - else if(href_list["toggle_sensors_locked"]) - pref.sensors_locked = !pref.sensors_locked - return TOPIC_REFRESH - - return ..() diff --git a/code/modules/client/preference_setup/general/04_flavor.dm b/code/modules/client/preference_setup/general/04_flavor.dm deleted file mode 100644 index 0d2caee02c23a..0000000000000 --- a/code/modules/client/preference_setup/general/04_flavor.dm +++ /dev/null @@ -1,132 +0,0 @@ -/datum/preferences - var/list/flavor_texts = list() - var/list/flavour_texts_robot = list() - -/datum/category_item/player_setup_item/physical/flavor - name = "Flavor" - sort_order = 4 - -/datum/category_item/player_setup_item/physical/flavor/load_character(datum/pref_record_reader/R) - pref.flavor_texts["general"] = R.read("flavor_texts_general") - pref.flavor_texts["head"] = R.read("flavor_texts_head") - pref.flavor_texts["face"] = R.read("flavor_texts_face") - pref.flavor_texts["eyes"] = R.read("flavor_texts_eyes") - pref.flavor_texts["torso"] = R.read("flavor_texts_torso") - pref.flavor_texts["arms"] = R.read("flavor_texts_arms") - pref.flavor_texts["hands"] = R.read("flavor_texts_hands") - pref.flavor_texts["legs"] = R.read("flavor_texts_legs") - pref.flavor_texts["feet"] = R.read("flavor_texts_feet") - - //Flavour text for robots. - pref.flavour_texts_robot["Default"] = R.read("flavour_texts_robot_Default") - for(var/module in SSrobots.all_module_names) - pref.flavour_texts_robot[module] = R.read("flavour_texts_robot_[module]") - -/datum/category_item/player_setup_item/physical/flavor/save_character(datum/pref_record_writer/W) - W.write("flavor_texts_general", pref.flavor_texts["general"]) - W.write("flavor_texts_head", pref.flavor_texts["head"]) - W.write("flavor_texts_face", pref.flavor_texts["face"]) - W.write("flavor_texts_eyes", pref.flavor_texts["eyes"]) - W.write("flavor_texts_torso", pref.flavor_texts["torso"]) - W.write("flavor_texts_arms", pref.flavor_texts["arms"]) - W.write("flavor_texts_hands", pref.flavor_texts["hands"]) - W.write("flavor_texts_legs", pref.flavor_texts["legs"]) - W.write("flavor_texts_feet", pref.flavor_texts["feet"]) - - W.write("flavour_texts_robot_Default", pref.flavour_texts_robot["Default"]) - for(var/module in SSrobots.all_module_names) - W.write("flavour_texts_robot_[module]", pref.flavour_texts_robot[module]) - -/datum/category_item/player_setup_item/physical/flavor/sanitize_character() - if(!istype(pref.flavor_texts)) pref.flavor_texts = list() - if(!istype(pref.flavour_texts_robot)) pref.flavour_texts_robot = list() - -/datum/category_item/player_setup_item/physical/flavor/content(var/mob/user) - . += "Flavor:
              " - . += "Set Flavor Text
              " - . += "Set Robot Flavor Text
              " - -/datum/category_item/player_setup_item/physical/flavor/OnTopic(var/href,var/list/href_list, var/mob/user) - if(href_list["flavor_text"]) - switch(href_list["flavor_text"]) - if("open") - if("general") - var/msg = sanitize(input(usr,"Give a general description of your character. This will be shown regardless of clothing. Do not include OOC information here.","Flavor Text",html_decode(pref.flavor_texts[href_list["flavor_text"]])) as message, extra = 0) - if(CanUseTopic(user)) - pref.flavor_texts[href_list["flavor_text"]] = msg - else - var/msg = sanitize(input(usr,"Set the flavor text for your [href_list["flavor_text"]].","Flavor Text",html_decode(pref.flavor_texts[href_list["flavor_text"]])) as message, extra = 0) - if(CanUseTopic(user)) - pref.flavor_texts[href_list["flavor_text"]] = msg - SetFlavorText(user) - return TOPIC_HANDLED - - else if(href_list["flavour_text_robot"]) - switch(href_list["flavour_text_robot"]) - if("open") - if("Default") - var/msg = sanitize(input(usr,"Set the default flavour text for your robot. It will be used for any module without individual setting.","Flavour Text",html_decode(pref.flavour_texts_robot["Default"])) as message, extra = 0) - if(CanUseTopic(user)) - pref.flavour_texts_robot[href_list["flavour_text_robot"]] = msg - else - var/msg = sanitize(input(usr,"Set the flavour text for your robot with [href_list["flavour_text_robot"]] module. If you leave this empty, default flavour text will be used for this module.","Flavour Text",html_decode(pref.flavour_texts_robot[href_list["flavour_text_robot"]])) as message, extra = 0) - if(CanUseTopic(user)) - pref.flavour_texts_robot[href_list["flavour_text_robot"]] = msg - SetFlavourTextRobot(user) - return TOPIC_HANDLED - - return ..() - -/datum/category_item/player_setup_item/physical/flavor/proc/SetFlavorText(mob/user) - var/HTML = "" - HTML += "
              " - HTML += "Set Flavour Text
              " - HTML += "
              " - HTML += "General: " - HTML += TextPreview(pref.flavor_texts["general"]) - HTML += "
              " - HTML += "Head: " - HTML += TextPreview(pref.flavor_texts["head"]) - HTML += "
              " - HTML += "Face: " - HTML += TextPreview(pref.flavor_texts["face"]) - HTML += "
              " - HTML += "Eyes: " - HTML += TextPreview(pref.flavor_texts["eyes"]) - HTML += "
              " - HTML += "Body: " - HTML += TextPreview(pref.flavor_texts["torso"]) - HTML += "
              " - HTML += "Arms: " - HTML += TextPreview(pref.flavor_texts["arms"]) - HTML += "
              " - HTML += "Hands: " - HTML += TextPreview(pref.flavor_texts["hands"]) - HTML += "
              " - HTML += "Legs: " - HTML += TextPreview(pref.flavor_texts["legs"]) - HTML += "
              " - HTML += "Feet: " - HTML += TextPreview(pref.flavor_texts["feet"]) - HTML += "
              " - HTML += "
              " - HTML += "" - show_browser(user, HTML, "window=flavor_text;size=430x300") - return - -/datum/category_item/player_setup_item/physical/flavor/proc/SetFlavourTextRobot(mob/user) - var/HTML = "" - HTML += "
              " - HTML += "Set Robot Flavour Text
              " - HTML += "
              " - HTML += "Default: " - HTML += TextPreview(pref.flavour_texts_robot["Default"]) - HTML += "
              " - for(var/module in SSrobots.all_module_names) - HTML += "[module]: " - HTML += TextPreview(pref.flavour_texts_robot[module]) - HTML += "
              " - HTML += "
              " - HTML += "" - show_browser(user, HTML, "window=flavour_text_robot;size=430x300") - return diff --git a/code/modules/client/preference_setup/general/05_preview.dm b/code/modules/client/preference_setup/general/05_preview.dm deleted file mode 100644 index be71e1ba72a2b..0000000000000 --- a/code/modules/client/preference_setup/general/05_preview.dm +++ /dev/null @@ -1,144 +0,0 @@ -/datum/preferences/var/list/background_states = list("000", "FFF", MATERIAL_STEEL, "white") - -/datum/preferences/var/icon/bgstate = "000" - -/datum/preferences/var/preview_job = TRUE - -/datum/preferences/var/preview_gear = TRUE - -/datum/preferences/var/icon/preview_icon - - -/datum/preferences/VV_static() - return ..() + list( - "background_states" - ) - - -/datum/preferences/proc/dress_preview_mob(mob/living/carbon/human/mannequin) - var/update_icon = FALSE - copy_to(mannequin, TRUE) - var/datum/job/previewJob - if (preview_job || preview_gear) - // Determine what job is marked as 'High' priority, and dress them up as such. - if(GLOB.using_map.default_assistant_title in job_low) - previewJob = SSjobs.get_by_title(GLOB.using_map.default_assistant_title) - else - previewJob = SSjobs.get_by_title(job_high) - else - return - if(preview_job && previewJob) - mannequin.job = previewJob.title - var/datum/mil_branch/branch = GLOB.mil_branches.get_branch(branches[previewJob.title]) - var/datum/mil_rank/rank = GLOB.mil_branches.get_rank(branches[previewJob.title], ranks[previewJob.title]) - previewJob.equip_preview(mannequin, player_alt_titles[previewJob.title], branch, rank) - update_icon = TRUE - if(!(mannequin.species.appearance_flags && mannequin.species.appearance_flags & HAS_UNDERWEAR)) - if(all_underwear) - all_underwear.Cut() - if(preview_gear && !(previewJob && preview_job && (previewJob.type == /datum/job/ai || previewJob.type == /datum/job/cyborg))) - // Equip custom gear loadout, replacing any job items - var/list/loadout_taken_slots = list() - for(var/thing in Gear()) - var/datum/gear/G = gear_datums[thing] - if(G) - var/permitted = 0 - if(G.allowed_roles && G.allowed_roles.len) - if(previewJob) - for(var/job_type in G.allowed_roles) - if(previewJob.type == job_type) - permitted = 1 - else - permitted = 1 - if(G.whitelisted && !(mannequin.species.name in G.whitelisted)) - permitted = 0 - if(!permitted) - continue - if(G.slot && G.slot != slot_tie && !(G.slot in loadout_taken_slots) && G.spawn_on_mob(mannequin, gear_list[gear_slot][G.display_name])) - loadout_taken_slots.Add(G.slot) - update_icon = TRUE - if(update_icon) - mannequin.update_icons() - - -/datum/preferences/proc/update_preview_icon(resize_only) - var/static/icon/last_built_icon - if (!resize_only || !last_built_icon) - var/mob/living/carbon/human/dummy/mannequin/mannequin = get_mannequin(client_ckey) - mannequin.delete_inventory(TRUE) - dress_preview_mob(mannequin) - last_built_icon = icon('icons/effects/128x48.dmi', bgstate) - last_built_icon.Scale(48+32, 16+32) - mannequin.dir = WEST - last_built_icon.Blend(getFlatIcon(mannequin, WEST, always_use_defdir = TRUE), ICON_OVERLAY, 1, 9) - mannequin.dir = NORTH - last_built_icon.Blend(getFlatIcon(mannequin, NORTH, always_use_defdir = TRUE), ICON_OVERLAY, 25, 17) - mannequin.dir = SOUTH - last_built_icon.Blend(getFlatIcon(mannequin, SOUTH, always_use_defdir = TRUE), ICON_OVERLAY, 49, 1) - preview_icon = new (last_built_icon) - var/scale = client.get_preference_value(/datum/client_preference/preview_scale) - switch (scale) - if (GLOB.PREF_LARGE) - scale = 4 - if (GLOB.PREF_MEDIUM) - scale = 3 - else - scale = 2 - preview_icon.Scale(preview_icon.Width() * scale, preview_icon.Height() * scale) - - -/datum/category_item/player_setup_item/physical/preview - name = "Preview" - sort_order = 5 - - -/datum/category_item/player_setup_item/physical/preview/load_character(datum/pref_record_reader/R) - pref.bgstate = R.read("bgstate") - pref.preview_icon = null - - -/datum/category_item/player_setup_item/physical/preview/save_character(datum/pref_record_writer/W) - W.write("bgstate", pref.bgstate) - - -/datum/category_item/player_setup_item/physical/preview/sanitize_character() - if(!pref.bgstate || !(pref.bgstate in pref.background_states)) - pref.bgstate = pref.background_states[1] - - -/datum/category_item/player_setup_item/physical/preview/OnTopic(query_text, list/query, mob/user) - if (!query) - return - else if (query["cyclebg"]) - var/index = pref.background_states.Find(pref.bgstate) - if (!index || index == length(pref.background_states)) - pref.bgstate = pref.background_states[1] - else - pref.bgstate = pref.background_states[index + 1] - return TOPIC_REFRESH_UPDATE_PREVIEW - else if (query["resize"]) - pref.client?.cycle_preference(/datum/client_preference/preview_scale) - return TOPIC_REFRESH_UPDATE_PREVIEW - else if (query["previewjob"]) - pref.preview_job = !pref.preview_job - pref.preview_icon = null - return TOPIC_REFRESH_UPDATE_PREVIEW - else if (query["previewgear"]) - pref.preview_gear = !pref.preview_gear - pref.preview_icon = null - return TOPIC_REFRESH_UPDATE_PREVIEW - return ..() - - -/datum/category_item/player_setup_item/physical/preview/content(mob/user) - if(!pref.preview_icon) - pref.update_preview_icon() - send_rsc(user, pref.preview_icon, "previewicon.png") - var/width = pref.preview_icon.Width() - var/height = pref.preview_icon.Height() - . = "Preview:" - . += "
              [BTN("cyclebg", "Cycle Background")]" - . += " - [BTN("previewgear", "[pref.preview_gear ? "Hide" : "Show"] Loadout")]" - . += " - [BTN("previewjob", "[pref.preview_job ? "Hide" : "Show"] Uniform")]" - . += " - [BTN("resize", "Resize")]" - . += {"
              "} diff --git a/code/modules/client/preference_setup/global/01_ui.dm b/code/modules/client/preference_setup/global/01_ui.dm deleted file mode 100644 index d57a71d4ed08a..0000000000000 --- a/code/modules/client/preference_setup/global/01_ui.dm +++ /dev/null @@ -1,101 +0,0 @@ -/datum/preferences - var/clientfps = 40 - var/ooccolor = "#010000" //Whatever this is set to acts as 'reset' color and is thus unusable as an actual custom color - - var/UI_style = "Midnight" - var/UI_style_color = "#ffffff" - var/UI_style_alpha = 255 - -/datum/category_item/player_setup_item/player_global/ui - name = "UI" - sort_order = 1 - -/datum/category_item/player_setup_item/player_global/ui/load_preferences(datum/pref_record_reader/R) - pref.UI_style = R.read("UI_style") - pref.UI_style_color = R.read("UI_style_color") - pref.UI_style_alpha = R.read("UI_style_alpha") - pref.ooccolor = R.read("ooccolor") - pref.clientfps = R.read("clientfps") - -/datum/category_item/player_setup_item/player_global/ui/save_preferences(datum/pref_record_writer/W) - W.write("UI_style", pref.UI_style) - W.write("UI_style_color", pref.UI_style_color) - W.write("UI_style_alpha", pref.UI_style_alpha) - W.write("ooccolor", pref.ooccolor) - W.write("clientfps", pref.clientfps) - -/datum/category_item/player_setup_item/player_global/ui/sanitize_preferences() - pref.UI_style = sanitize_inlist(pref.UI_style, all_ui_styles, initial(pref.UI_style)) - pref.UI_style_color = sanitize_hexcolor(pref.UI_style_color, initial(pref.UI_style_color)) - pref.UI_style_alpha = sanitize_integer(pref.UI_style_alpha, 0, 255, initial(pref.UI_style_alpha)) - pref.ooccolor = sanitize_hexcolor(pref.ooccolor, initial(pref.ooccolor)) - pref.clientfps = sanitize_integer(pref.clientfps, CLIENT_MIN_FPS, CLIENT_MAX_FPS, initial(pref.clientfps)) - -/datum/category_item/player_setup_item/player_global/ui/content(var/mob/user) - . += "UI Settings
              " - . += "UI Style: [pref.UI_style]
              " - . += "Custom UI (recommended for White UI):
              " - . += "-Color: [pref.UI_style_color]
              __
              reset
              " - . += "-Alpha(transparency): [pref.UI_style_alpha] reset
              " - if(can_select_ooc_color(user)) - . += "OOC Color: " - if(pref.ooccolor == initial(pref.ooccolor)) - . += "Using Default
              " - else - . += "[pref.ooccolor]
              __
              reset
              " - . += "Client FPS: [pref.clientfps]
              " - -/datum/category_item/player_setup_item/player_global/ui/OnTopic(var/href,var/list/href_list, var/mob/user) - if(href_list["select_style"]) - var/UI_style_new = input(user, "Choose UI style.", CHARACTER_PREFERENCE_INPUT_TITLE, pref.UI_style) as null|anything in all_ui_styles - if(!UI_style_new || !CanUseTopic(user)) return TOPIC_NOACTION - pref.UI_style = UI_style_new - return TOPIC_REFRESH - - else if(href_list["select_color"]) - var/UI_style_color_new = input(user, "Choose UI color, dark colors are not recommended!", "Global Preference", pref.UI_style_color) as color|null - if(isnull(UI_style_color_new) || !CanUseTopic(user)) return TOPIC_NOACTION - pref.UI_style_color = UI_style_color_new - return TOPIC_REFRESH - - else if(href_list["select_alpha"]) - var/UI_style_alpha_new = input(user, "Select UI alpha (transparency) level, between 50 and 255.", "Global Preference", pref.UI_style_alpha) as num|null - if(isnull(UI_style_alpha_new) || (UI_style_alpha_new < 50 || UI_style_alpha_new > 255) || !CanUseTopic(user)) return TOPIC_NOACTION - pref.UI_style_alpha = UI_style_alpha_new - return TOPIC_REFRESH - - else if(href_list["select_ooc_color"]) - var/new_ooccolor = input(user, "Choose OOC color:", "Global Preference") as color|null - if(new_ooccolor && can_select_ooc_color(user) && CanUseTopic(user)) - pref.ooccolor = new_ooccolor - return TOPIC_REFRESH - - else if(href_list["select_fps"]) - var/version_message - if (user.client && user.client.byond_version < 511) - version_message = "\nYou need to be using byond version 511 or later to take advantage of this feature, your version of [user.client.byond_version] is too low" - if (world.byond_version < 511) - version_message += "\nThis server does not currently support client side fps. You can set now for when it does." - var/new_fps = input(user, "Choose your desired fps.[version_message]\n(0 = synced with server tick rate (currently:[world.fps]))", "Global Preference") as num|null - if (isnum(new_fps) && CanUseTopic(user)) - pref.clientfps = clamp(new_fps, CLIENT_MIN_FPS, CLIENT_MAX_FPS) - - var/mob/target_mob = preference_mob() - if(target_mob && target_mob.client) - target_mob.client.apply_fps(pref.clientfps) - return TOPIC_REFRESH - - else if(href_list["reset"]) - switch(href_list["reset"]) - if("ui") - pref.UI_style_color = initial(pref.UI_style_color) - if("alpha") - pref.UI_style_alpha = initial(pref.UI_style_alpha) - if("ooc") - pref.ooccolor = initial(pref.ooccolor) - return TOPIC_REFRESH - - return ..() - -/proc/can_select_ooc_color(var/mob/user) - return config.allow_admin_ooccolor && check_rights(R_ADMIN, 0, user) diff --git a/code/modules/client/preference_setup/global/02_prefixes.dm b/code/modules/client/preference_setup/global/02_prefixes.dm deleted file mode 100644 index eb2f8b4f18707..0000000000000 --- a/code/modules/client/preference_setup/global/02_prefixes.dm +++ /dev/null @@ -1,143 +0,0 @@ -/datum/preferences - var/list/prefix_keys_by_type - -/datum/category_item/player_setup_item/player_global/prefixes - name = "Prefixes" - sort_order = 2 - - var/static/list/prefix_by_name - -/datum/category_item/player_setup_item/player_global/prefixes/New() - ..() - SETUP_SUBTYPE_DECLS_BY_NAME(/decl/prefix, prefix_by_name) - -/datum/category_item/player_setup_item/player_global/prefixes/load_preferences(datum/pref_record_reader/R) - var/list/prefix_keys_by_name - prefix_keys_by_name = R.read("prefix_keys") - - if(istype(prefix_keys_by_name)) - pref.prefix_keys_by_type = list() - for(var/prefix_name in prefix_keys_by_name) - var/decl/prefix/prefix_instance = prefix_by_name[prefix_name] - if(prefix_instance) - pref.prefix_keys_by_type[prefix_instance.type] = prefix_keys_by_name[prefix_name] - -/datum/category_item/player_setup_item/player_global/prefixes/save_preferences(datum/pref_record_writer/W) - var/list/prefix_keys_by_name = list() - for(var/prefix_type in pref.prefix_keys_by_type) - var/decl/prefix/prefix_instance = decls_repository.get_decl(prefix_type) - prefix_keys_by_name[prefix_instance.name] = pref.prefix_keys_by_type[prefix_type] - - W.write("prefix_keys", prefix_keys_by_name) - -/datum/category_item/player_setup_item/player_global/prefixes/sanitize_preferences() - if(!istype(pref.prefix_keys_by_type)) - pref.prefix_keys_by_type = list() - - // Setup the default keys for any prefix without one - for(var/prefix_name in prefix_by_name) - var/decl/prefix/prefix_instance = prefix_by_name[prefix_name] - if(!(prefix_instance.type in pref.prefix_keys_by_type)) - pref.prefix_keys_by_type[prefix_instance.type] = prefix_instance.default_key - - // Then check for duplicate keys. - // In case of overlap, all affected prefixes are given their default key - reset_duplicate_keys() - -/datum/category_item/player_setup_item/player_global/prefixes/content(var/mob/user) - . += "Prefix Keys:
              " - . += "" - for(var/prefix_name in prefix_by_name) - var/decl/prefix/prefix_instance = prefix_by_name[prefix_name] - var/current_prefix = pref.prefix_keys_by_type[prefix_instance.type] - - . += "" - . += "
              [prefix_instance.name][pref.prefix_keys_by_type[prefix_instance.type]]" - - if(prefix_instance.is_locked) - . += "Change" - else - - . += "Change" - - . += "" - - if(prefix_instance.is_locked || current_prefix == prefix_instance.default_key) - . += "Reset" - else - . += "Reset" - . += "
              " - -/datum/category_item/player_setup_item/player_global/prefixes/OnTopic(var/href, var/list/href_list, var/mob/user) - if(href_list["change_prefix"]) - var/decl/prefix/prefix_instance = locate(href_list["change_prefix"]) - if(!istype(prefix_instance) || prefix_instance.is_locked) - return TOPIC_NOACTION - - do - var/keys_in_use = list() - for(var/prefix_type in pref.prefix_keys_by_type) - if(prefix_type == prefix_instance.type) - continue - keys_in_use += pref.prefix_keys_by_type[prefix_type] - - var/new_key = input(user, "Enter a single special character. The following characters are already in use as prefixes: [jointext(keys_in_use, " ")]", CHARACTER_PREFERENCE_INPUT_TITLE, pref.prefix_keys_by_type[prefix_instance.type]) as null|text - if(!new_key || new_key == pref.prefix_keys_by_type[prefix_instance.type] || !CanUseTopic(user)) - return TOPIC_NOACTION - - if(length(new_key) != 1) - alert(user, "Only single characters are allowed.", "Error", "Ok") - else if(contains_az09(new_key)) - alert(user, "Only special character are allowed.", "Error", "Ok") - else if(new_key == " ") - alert(user, "The space character is not allowed.", "Error", "Ok") - else - pref.prefix_keys_by_type[prefix_instance.type] = new_key - - // Here we attempt to replace any matching prefix keys with their default value, to allow quick replacements - for(var/prefix_type in pref.prefix_keys_by_type) - if(prefix_type == prefix_instance.type) - continue - var/prefix_key = pref.prefix_keys_by_type[prefix_type] - if(prefix_key == new_key) - var/decl/prefix/pi = decls_repository.get_decl(prefix_type) - pref.prefix_keys_by_type[pi.type] = pi.default_key - // Then we reset any and all duplicates - reset_duplicate_keys() - // Then, if the new key was reset it means it matched a default key. - // If so the user has to select another key, otherwise the selection was successful - if(pref.prefix_keys_by_type[prefix_instance.type] != new_key) - alert(user, "The selected key is already the default key for another prefix.", "Error", "Ok") - else - return TOPIC_REFRESH - while(TRUE) - - else if(href_list["reset_prefix"]) - var/decl/prefix/prefix_instance = locate(href_list["reset_prefix"]) - if(!istype(prefix_instance)) - return TOPIC_NOACTION - pref.prefix_keys_by_type[prefix_instance.type] = prefix_instance.default_key - reset_duplicate_keys() - return TOPIC_REFRESH - - else - return ..() - -/datum/category_item/player_setup_item/player_global/prefixes/proc/reset_duplicate_keys() - var/list/prefixes_by_key = list() - for(var/prefix_type in pref.prefix_keys_by_type) - var/prefix_key = pref.prefix_keys_by_type[prefix_type] - group_by(prefixes_by_key, prefix_key, prefix_type) - - for(var/prefix_key in prefixes_by_key) - var/list/prefix_types = prefixes_by_key[prefix_key] - if(prefix_types.len > 1) - for(var/prefix_type in prefix_types) - var/decl/prefix/prefix_instance = decls_repository.get_decl(prefix_type) - pref.prefix_keys_by_type[prefix_instance.type] = prefix_instance.default_key - -/mob/proc/get_prefix_key(var/prefix_type) - if(client && client.prefs) - return client.prefs.prefix_keys_by_type[prefix_type] - var/decl/prefix/prefix_instance = decls_repository.get_decl(prefix_type) - return prefix_instance.default_key diff --git a/code/modules/client/preference_setup/global/03_pai.dm b/code/modules/client/preference_setup/global/03_pai.dm deleted file mode 100644 index 26743e01123b2..0000000000000 --- a/code/modules/client/preference_setup/global/03_pai.dm +++ /dev/null @@ -1,96 +0,0 @@ -/datum/category_item/player_setup_item/player_global/pai - name = "pAI" - sort_order = 3 - - var/icon/pai_preview - var/datum/paiCandidate/candidate - var/icon/bgstate = MATERIAL_STEEL - var/list/bgstate_options = list("FFF", MATERIAL_STEEL, "white") - -/datum/category_item/player_setup_item/player_global/pai/load_preferences(datum/pref_record_reader/R) - if(!candidate) - candidate = new() - - if(!preference_mob()) - return - - candidate.savefile_load(preference_mob()) - -/datum/category_item/player_setup_item/player_global/pai/save_preferences(datum/pref_record_writer/W) - if(!candidate) - return - - if(!preference_mob()) - return - - candidate.savefile_save(preference_mob()) - -/datum/category_item/player_setup_item/player_global/pai/content(var/mob/user) - if(!candidate) - candidate = new() - if (!pai_preview) - update_pai_preview(user) - - . += "pAI:
              " - if(!candidate) - log_debug("[user] pAI prefs have a null candidate var.") - return . - . += "Name: [candidate.name ? candidate.name : "None Set"]
              " - . += "Description: [candidate.description ? TextPreview(candidate.description, 40) : "None Set"]
              " - . += "Role: [candidate.role ? TextPreview(candidate.role, 40) : "None Set"]
              " - . += "OOC Comments: [candidate.comments ? TextPreview(candidate.comments, 40) : "None Set"]
              " - . += "
              Chassis: [candidate.chassis]
              " - . += "
              Say Verb: [candidate.say_verb]
              " - . += "
              " - . += "
              " - -/datum/category_item/player_setup_item/player_global/pai/OnTopic(var/href,var/list/href_list, var/mob/user) - if(href_list["option"]) - var/t - . = TOPIC_REFRESH - switch(href_list["option"]) - if("name") - t = sanitizeName(input(user, "Enter a name for your pAI", "Global Preference", candidate.name) as text|null, MAX_NAME_LEN, 1) - if(t && CanUseTopic(user)) - candidate.name = t - if("desc") - t = input(user, "Enter a description for your pAI", "Global Preference", html_decode(candidate.description)) as message|null - if(!isnull(t) && CanUseTopic(user)) - candidate.description = sanitize(t) - if("role") - t = input(user, "Enter a role for your pAI", "Global Preference", html_decode(candidate.role)) as text|null - if(!isnull(t) && CanUseTopic(user)) - candidate.role = sanitize(t) - if("ooc") - t = input(user, "Enter any OOC comments", "Global Preference", html_decode(candidate.comments)) as message - if(!isnull(t) && CanUseTopic(user)) - candidate.comments = sanitize(t) - if("chassis") - candidate.chassis = input(user,"What would you like to use for your mobile chassis icon?") as null|anything in GLOB.possible_chassis - update_pai_preview(user) - . = TOPIC_HARD_REFRESH - if("say") - candidate.say_verb = input(user,"What theme would you like to use for your speech verbs?") as null|anything in GLOB.possible_say_verbs - if("cyclebg") - bgstate = next_in_list(bgstate, bgstate_options) - update_pai_preview(user) - . = TOPIC_HARD_REFRESH - - return - - return ..() - -/datum/category_item/player_setup_item/player_global/pai/proc/update_pai_preview(var/mob/user) - pai_preview = icon('icons/effects/128x48.dmi', bgstate) - var/icon/pai = icon('icons/mob/pai.dmi', GLOB.possible_chassis[candidate.chassis], NORTH) - pai_preview.Scale(48+32, 16+32) - - pai_preview.Blend(pai, ICON_OVERLAY, 25, 22) - pai = icon('icons/mob/pai.dmi', GLOB.possible_chassis[candidate.chassis], WEST) - pai_preview.Blend(pai, ICON_OVERLAY, 1, 9) - pai = icon('icons/mob/pai.dmi', GLOB.possible_chassis[candidate.chassis], SOUTH) - pai_preview.Blend(pai, ICON_OVERLAY, 49, 5) - - pai_preview.Scale(pai_preview.Width() * 2, pai_preview.Height() * 2) - - send_rsc(user, pai_preview, "pai_preview.png") diff --git a/code/modules/client/preference_setup/global/04_ooc.dm b/code/modules/client/preference_setup/global/04_ooc.dm deleted file mode 100644 index 301539fcb3814..0000000000000 --- a/code/modules/client/preference_setup/global/04_ooc.dm +++ /dev/null @@ -1,40 +0,0 @@ -/datum/preferences - // OOC Metadata: - var/list/ignored_players = list() - -/datum/category_item/player_setup_item/player_global/ooc - name = "OOC" - sort_order = 4 - -/datum/category_item/player_setup_item/player_global/ooc/load_preferences(datum/pref_record_reader/R) - pref.ignored_players = R.read("ignored_players") - - -/datum/category_item/player_setup_item/player_global/ooc/save_preferences(datum/pref_record_writer/W) - W.write("ignored_players", pref.ignored_players) - - -/datum/category_item/player_setup_item/player_global/ooc/sanitize_preferences() - if(!islist(pref.ignored_players)) - pref.ignored_players = list() - -/datum/category_item/player_setup_item/player_global/ooc/content(var/mob/user) - . += "OOC:
              " - . += "Ignored Players
              " - for(var/ignored_player in pref.ignored_players) - . += "[ignored_player] (Unignore)
              " - . += "(Ignore Player)" - -/datum/category_item/player_setup_item/player_global/ooc/OnTopic(var/href,var/list/href_list, var/mob/user) - if(href_list["unignore_player"]) - pref.ignored_players -= href_list["unignore_player"] - return TOPIC_REFRESH - - if(href_list["ignore_player"]) - var/player_to_ignore = sanitize(ckey(input(user, "Who do you want to ignore?","Ignore") as null|text)) - //input() sleeps while waiting for the user to respond, so we need to check CanUseTopic() again here - if(player_to_ignore && CanUseTopic(user)) - pref.ignored_players |= player_to_ignore - return TOPIC_REFRESH - - return ..() diff --git a/code/modules/client/preference_setup/global/05_settings.dm b/code/modules/client/preference_setup/global/05_settings.dm deleted file mode 100644 index 9ed36fe6df242..0000000000000 --- a/code/modules/client/preference_setup/global/05_settings.dm +++ /dev/null @@ -1,141 +0,0 @@ -/datum/preferences - var/list/preference_values - -/datum/category_item/player_setup_item/player_global/settings - name = "Settings" - sort_order = 5 - -/datum/category_item/player_setup_item/player_global/settings/load_preferences(datum/pref_record_reader/R) - pref.lastchangelog = R.read("lastchangelog") - pref.default_slot = R.read("default_slot") - pref.slot_names = R.read("slot_names") - pref.preference_values = R.read("preference_values") - -/datum/category_item/player_setup_item/player_global/settings/save_preferences(datum/pref_record_writer/W) - W.write("lastchangelog", pref.lastchangelog) - W.write("default_slot", pref.default_slot) - W.write("slot_names", pref.slot_names) - W.write("preference_values", pref.preference_values) - -/datum/category_item/player_setup_item/player_global/settings/sanitize_preferences() - // Ensure our preferences are lists. - if(!istype(pref.preference_values)) - pref.preference_values = list() - if(!istype(pref.slot_names)) - pref.slot_names = list() - - var/list/client_preference_keys = list() - for(var/cp in get_client_preferences()) - var/datum/client_preference/client_pref = cp - - client_preference_keys |= client_pref.key - - // if the preference has never been set, or if the player is no longer allowed to set the it, set it to default - preference_mob() // we don't care about the mob it returns, but it finds the correct client. - if(!client_pref.may_set(pref.client) || !(client_pref.key in pref.preference_values)) - pref.preference_values[client_pref.key] = client_pref.default_value - - - // Clean out preferences that no longer exist. - for(var/key in pref.preference_values) - if(!(key in client_preference_keys)) - pref.preference_values -= key - - pref.lastchangelog = sanitize_text(pref.lastchangelog, initial(pref.lastchangelog)) - pref.default_slot = sanitize_integer(pref.default_slot, 1, config.character_slots, initial(pref.default_slot)) - -/datum/category_item/player_setup_item/player_global/settings/content(var/mob/user) - . = list() - . += "Preferences
              " - . += "" - - var/mob/pref_mob = preference_mob() - for(var/cp in get_client_preferences()) - var/datum/client_preference/client_pref = cp - - if(!client_pref.may_set(pref_mob)) - continue - - . += "" - - var/selected_option = pref_mob.get_preference_value(client_pref.key) - for(var/option in client_pref.options) - var/is_selected = selected_option == option - . += "" - - . += "
              [client_pref.description]: [option]" - - . += "
              " - - return jointext(., "") - -/datum/category_item/player_setup_item/player_global/settings/OnTopic(var/href,var/list/href_list, var/mob/user) - var/mob/pref_mob = preference_mob() - - if(href_list["pref"] && href_list["value"]) - . = pref_mob.set_preference(href_list["pref"], href_list["value"]) - - if(.) - return TOPIC_REFRESH - - return ..() - -/client/proc/get_preference_value(var/preference) - if(prefs) - var/datum/client_preference/cp = get_client_preference(preference) - if(cp && prefs.preference_values) - return prefs.preference_values[cp.key] - else - return null - else - log_error("Client is lacking preferences: [log_info_line(src)]") - -/client/proc/set_preference(var/preference, var/set_preference) - var/datum/client_preference/cp = get_client_preference(preference) - - if(!cp) - return FALSE - - if((prefs.preference_values[cp.key] != set_preference) && (set_preference in cp.options)) - prefs.preference_values[cp.key] = set_preference - cp.changed(mob, set_preference) - return TRUE - - return FALSE - -/client/proc/cycle_preference(var/preference) - var/datum/client_preference/cp = get_client_preference(preference) - - if(!cp) - return FALSE - - var/next_option = next_in_list(prefs.preference_values[cp.key], cp.options) - return set_preference(preference, next_option) - -/mob/proc/get_preference_value(var/preference) - if(!client) - var/datum/client_preference/cp = get_client_preference(preference) - if(cp) - return cp.default_value - else - return null - - return client.get_preference_value(preference) - -/mob/proc/set_preference(var/preference, var/set_preference) - if(!client) - return FALSE - if(!client.prefs) - log_debug("Client prefs found to be null for mob [src] and client [ckey], this should be investigated.") - return FALSE - - return client.set_preference(preference, set_preference) - -/mob/proc/cycle_preference(var/preference) - if(!client) - return FALSE - if(!client.prefs) - log_debug("Client prefs found to be null for mob [src] and client [ckey], this should be investigated.") - return FALSE - - return client.cycle_preference(preference) diff --git a/code/modules/client/preference_setup/global/preferences.dm b/code/modules/client/preference_setup/global/preferences.dm deleted file mode 100644 index f93a8fba0b38b..0000000000000 --- a/code/modules/client/preference_setup/global/preferences.dm +++ /dev/null @@ -1,374 +0,0 @@ -GLOBAL_VAR_CONST(PREF_YES, "Yes") -GLOBAL_VAR_CONST(PREF_NO, "No") -GLOBAL_VAR_CONST(PREF_ALL_SPEECH, "All Speech") -GLOBAL_VAR_CONST(PREF_NEARBY, "Nearby") -GLOBAL_VAR_CONST(PREF_ALL_EMOTES, "All Emotes") -GLOBAL_VAR_CONST(PREF_ALL_CHATTER, "All Chatter") -GLOBAL_VAR_CONST(PREF_SHORT, "Short") -GLOBAL_VAR_CONST(PREF_LONG, "Long") -GLOBAL_VAR_CONST(PREF_SHOW, "Show") -GLOBAL_VAR_CONST(PREF_HIDE, "Hide") -GLOBAL_VAR_CONST(PREF_FANCY, "Fancy") -GLOBAL_VAR_CONST(PREF_PLAIN, "Plain") -GLOBAL_VAR_CONST(PREF_PRIMARY, "Primary") -GLOBAL_VAR_CONST(PREF_ALL, "All") -GLOBAL_VAR_CONST(PREF_OFF, "Off") -GLOBAL_VAR_CONST(PREF_BASIC, "Basic") -GLOBAL_VAR_CONST(PREF_FULL, "Full") -GLOBAL_VAR_CONST(PREF_MIDDLE_CLICK, "middle click") -GLOBAL_VAR_CONST(PREF_ALT_CLICK, "alt click") -GLOBAL_VAR_CONST(PREF_CTRL_CLICK, "ctrl click") -GLOBAL_VAR_CONST(PREF_CTRL_SHIFT_CLICK, "ctrl shift click") -GLOBAL_VAR_CONST(PREF_HEAR, "Hear") -GLOBAL_VAR_CONST(PREF_SILENT, "Silent") -GLOBAL_VAR_CONST(PREF_SHORTHAND, "Shorthand") -GLOBAL_VAR_CONST(PREF_NEVER, "Never") -GLOBAL_VAR_CONST(PREF_NON_ANTAG, "Non-Antag Only") -GLOBAL_VAR_CONST(PREF_ALWAYS, "Always") -GLOBAL_VAR_CONST(PREF_SMALL, "Small") -GLOBAL_VAR_CONST(PREF_MEDIUM, "Medium") -GLOBAL_VAR_CONST(PREF_LARGE, "Large") -GLOBAL_VAR_CONST(PREF_LOW, "Low") -GLOBAL_VAR_CONST(PREF_MED, "Medium") -GLOBAL_VAR_CONST(PREF_HIGH, "High") - -var/global/list/_client_preferences -var/global/list/_client_preferences_by_key -var/global/list/_client_preferences_by_type - -/proc/get_client_preferences() - if(!_client_preferences) - _client_preferences = list() - for(var/ct in subtypesof(/datum/client_preference)) - var/datum/client_preference/client_type = ct - if(initial(client_type.description)) - _client_preferences += new client_type() - return _client_preferences - -/proc/get_client_preference(var/datum/client_preference/preference) - if(istype(preference)) - return preference - if(ispath(preference)) - return get_client_preference_by_type(preference) - return get_client_preference_by_key(preference) - -/proc/get_client_preference_by_key(var/preference) - if(!_client_preferences_by_key) - _client_preferences_by_key = list() - for(var/ct in get_client_preferences()) - var/datum/client_preference/client_pref = ct - _client_preferences_by_key[client_pref.key] = client_pref - return _client_preferences_by_key[preference] - -/proc/get_client_preference_by_type(var/preference) - if(!_client_preferences_by_type) - _client_preferences_by_type = list() - for(var/ct in get_client_preferences()) - var/datum/client_preference/client_pref = ct - _client_preferences_by_type[client_pref.type] = client_pref - return _client_preferences_by_type[preference] - -/datum/client_preference - var/description - var/key - var/list/options = list(GLOB.PREF_YES, GLOB.PREF_NO) - var/default_value - -/datum/client_preference/New() - . = ..() - - if(!default_value) - default_value = options[1] - -/datum/client_preference/proc/may_set(client/given_client) - return TRUE - -/datum/client_preference/proc/changed(var/mob/preference_mob, var/new_value) - return - -/********************* -* Player Preferences * -*********************/ - -/datum/client_preference/play_admin_midis - description = "Play admin midis" - key = "SOUND_MIDI" - -/datum/client_preference/play_lobby_music - description = "Play lobby music" - key = "SOUND_LOBBY" - -/datum/client_preference/play_lobby_music/changed(var/mob/preference_mob, var/new_value) - if(new_value == GLOB.PREF_YES) - if(isnewplayer(preference_mob)) - sound_to(preference_mob, GLOB.using_map.lobby_track.get_sound()) - to_chat(preference_mob, GLOB.using_map.lobby_track.get_info()) - else - sound_to(preference_mob, sound(null, repeat = 0, wait = 0, volume = 85, channel = GLOB.lobby_sound_channel)) - -/datum/client_preference/play_ambiance - description = "Play ambience" - key = "SOUND_AMBIENCE" - -/datum/client_preference/play_ambiance/changed(var/mob/preference_mob, var/new_value) - if(new_value == GLOB.PREF_NO) - sound_to(preference_mob, sound(null, channel = GLOB.ambience_channel_vents)) - sound_to(preference_mob, sound(null, channel = GLOB.ambience_channel_forced)) - sound_to(preference_mob, sound(null, channel = GLOB.ambience_channel_common)) - -/datum/client_preference/play_jukeboxes - description ="Play jukeboxes and boomboxes" - key = "SOUND_JUKEBOXES" - -//start from infinity -/datum/client_preference/play_pmps - description ="Play pmps" - key = "SOUND_PMPS" -//end from infinity - -/datum/client_preference/play_announcement_sfx - description = "Play announcement sound effects" - key = "SOUND_ANNOUNCEMENT" - options = list(GLOB.PREF_YES, GLOB.PREF_NO) -/datum/client_preference/ghost_ears - description = "Ghost ears" - key = "CHAT_GHOSTEARS" - options = list(GLOB.PREF_ALL_SPEECH, GLOB.PREF_NEARBY) - -/datum/client_preference/ghost_sight - description = "Ghost sight" - key = "CHAT_GHOSTSIGHT" - options = list(GLOB.PREF_ALL_EMOTES, GLOB.PREF_NEARBY) - -/datum/client_preference/ghost_radio - description = "Ghost radio" - key = "CHAT_GHOSTRADIO" - options = list(GLOB.PREF_ALL_CHATTER, GLOB.PREF_NEARBY) - -/datum/client_preference/preview_scale - description = "Options Preview Scale" - key = "PREVIEW_SCALE" - options = list(GLOB.PREF_MEDIUM, GLOB.PREF_LARGE, GLOB.PREF_SMALL) - -/datum/client_preference/preview_scale/changed(mob/mob, val) - var/datum/preferences/prefs = mob.client?.prefs - if (!prefs) - return - prefs.update_preview_icon(TRUE) - if (!prefs.popup) - return - prefs.update_setup_window(usr) - -/datum/client_preference/language_display - description = "Show Language Names" - key = "LANGUAGE_DISPLAY" - options = list(GLOB.PREF_SHORTHAND, GLOB.PREF_FULL, GLOB.PREF_OFF) - -/datum/client_preference/ghost_language_hide - description = "Hide Language Names As Ghost" - key = "LANGUAGE_DISPLAY_GHOST" - -/datum/client_preference/ghost_follow_link_length - description = "Ghost Follow Links" - key = "CHAT_GHOSTFOLLOWLINKLENGTH" - options = list(GLOB.PREF_SHORT, GLOB.PREF_LONG, GLOB.PREF_OFF) - -/datum/client_preference/chat_tags - description = "Chat tags" - key = "CHAT_SHOWICONS" - options = list(GLOB.PREF_SHOW, GLOB.PREF_HIDE) - -/datum/client_preference/show_typing_indicator - description = "Typing indicator" - key = "SHOW_TYPING" - options = list(GLOB.PREF_SHOW, GLOB.PREF_HIDE) - -/datum/client_preference/show_typing_indicator/changed(var/mob/preference_mob, var/new_value) - if(new_value == GLOB.PREF_HIDE) - preference_mob.remove_typing_indicator() - -/datum/client_preference/floating_messages - description = "Floating chat messages" - key = "FLOATING_CHAT" - options = list(GLOB.PREF_SHOW, GLOB.PREF_HIDE) - -/datum/client_preference/show_ooc - description = "OOC chat" - key = "CHAT_OOC" - options = list(GLOB.PREF_SHOW, GLOB.PREF_HIDE) - -/datum/client_preference/show_discord_ooc - description ="Discord OOC chat" - key = "CHAT_DISCORD_OOC" - options = list(GLOB.PREF_SHOW, GLOB.PREF_HIDE) - -/datum/client_preference/show_aooc - description = "AOOC chat" - key = "CHAT_AOOC" - options = list(GLOB.PREF_SHOW, GLOB.PREF_HIDE) - -/datum/client_preference/show_looc - description ="LOOC chat" - key = "CHAT_LOOC" - options = list(GLOB.PREF_SHOW, GLOB.PREF_HIDE) - -/datum/client_preference/show_dsay - description ="Dead chat" - key = "CHAT_DEAD" - options = list(GLOB.PREF_SHOW, GLOB.PREF_HIDE) - -/datum/client_preference/show_progress_bar - description ="Progress Bar" - key = "SHOW_PROGRESS" - options = list(GLOB.PREF_SHOW, GLOB.PREF_HIDE) - -/datum/client_preference/browser_style - description = "Fake NanoUI Browser Style" - key = "BROWSER_STYLED" - options = list(GLOB.PREF_FANCY, GLOB.PREF_PLAIN) - -/datum/client_preference/autohiss - description = "Autohiss" - key = "AUTOHISS" - options = list(GLOB.PREF_OFF, GLOB.PREF_BASIC, GLOB.PREF_FULL) - -/datum/client_preference/hardsuit_activation - description = "Hardsuit Module Activation Key" - key = "HARDSUIT_ACTIVATION" - options = list(GLOB.PREF_MIDDLE_CLICK, GLOB.PREF_CTRL_CLICK, GLOB.PREF_ALT_CLICK, GLOB.PREF_CTRL_SHIFT_CLICK) - -/datum/client_preference/holster_on_intent - description = "Draw gun based on intent" - key = "HOLSTER_ON_INTENT" - -/datum/client_preference/show_credits - description = "Show End Titles" - key = "SHOW_CREDITS" - -/datum/client_preference/show_ckey_credits - description = "Show Ckey in End Credits/Special Role List" - key = "SHOW_CKEY_CREDITS" - options = list(GLOB.PREF_HIDE, GLOB.PREF_SHOW) - -/datum/client_preference/show_ckey_deadchat - description = "Show Ckey in Deadchat" - key = "SHOW_CKEY_DEADCHAT" - options = list(GLOB.PREF_SHOW, GLOB.PREF_HIDE) - -/datum/client_preference/show_ready - description = "Show Ready Status in Lobby" - key = "SHOW_READY" - options = list(GLOB.PREF_SHOW, GLOB.PREF_HIDE) - -/datum/client_preference/announce_ghost_join - description = "Announce When Joining as Observer" - key = "ANNOUNCE_GHOST" - options = list(GLOB.PREF_YES, GLOB.PREF_NO) - -/datum/client_preference/play_instruments - description = "Play instruments" - key = "SOUND_INSTRUMENTS" - -/datum/client_preference/give_personal_goals - description = "Give Personal Goals" - key = "PERSONAL_GOALS" - options = list(GLOB.PREF_NEVER, GLOB.PREF_NON_ANTAG, GLOB.PREF_ALWAYS) - -/datum/client_preference/show_department_goals - description = "Show Departmental Goals" - key = "DEPT_GOALS" - options = list(GLOB.PREF_SHOW, GLOB.PREF_HIDE) - -/datum/client_preference/examine_messages - description = "Examining messages" - key = "EXAMINE_MESSAGES" - options = list(GLOB.PREF_SHOW, GLOB.PREF_HIDE) - -/datum/client_preference/graphics_quality - description = "Graphics quality (where relevant it will reduce effects)" - key = "GRAPHICS_QUALITY" - options = list(GLOB.PREF_LOW, GLOB.PREF_MED, GLOB.PREF_HIGH) - default_value = GLOB.PREF_HIGH - -/datum/client_preference/graphics_quality/changed(mob/preference_mob, new_value) - if(preference_mob?.client) - for(var/atom/movable/renderer/R as anything in preference_mob.renderers) - R.GraphicsUpdate() - -/datum/client_preference/goonchat - description = "Use Goon Chat" - key = "USE_GOONCHAT" - -/datum/client_preference/goonchat/changed(var/mob/preference_mob, var/new_value) - if(preference_mob && preference_mob.client) - var/client/C = preference_mob.client - if(new_value == GLOB.PREF_YES) - C.chatOutput.loaded = FALSE - C.chatOutput.start() - else - C.force_white_theme() - winset(C, "output", "is-visible=true;is-disabled=false") - winset(C, "browseroutput", "is-visible=false") - -/******************** -* General Staff Preferences * -********************/ - -/datum/client_preference/staff - var/flags - -/datum/client_preference/staff/may_set(client/given_client) - if(ismob(given_client)) - var/mob/M = given_client - given_client = M.client - if(!given_client) - return FALSE - if(flags) - return check_rights(flags, 0, given_client) - else - return given_client && given_client.holder - -/datum/client_preference/staff/show_chat_prayers - description = "Chat Prayers" - key = "CHAT_PRAYER" - options = list(GLOB.PREF_SHOW, GLOB.PREF_HIDE) - -/datum/client_preference/staff/play_adminhelp_ping - description = "Adminhelps" - key = "SOUND_ADMINHELP" - options = list(GLOB.PREF_HEAR, GLOB.PREF_SILENT) - -/datum/client_preference/staff/show_rlooc - description = "Remote LOOC chat" - key = "CHAT_RLOOC" - options = list(GLOB.PREF_SHOW, GLOB.PREF_HIDE) - -/******************** -* Admin Preferences * -********************/ - -/datum/client_preference/staff/show_attack_logs - description = "Attack Log Messages" - key = "CHAT_ATTACKLOGS" - options = list(GLOB.PREF_SHOW, GLOB.PREF_HIDE) - flags = R_ADMIN - default_value = GLOB.PREF_HIDE - -/******************** -* Debug Preferences * -********************/ - -/datum/client_preference/staff/show_debug_logs - description = "Debug Log Messages" - key = "CHAT_DEBUGLOGS" - options = list(GLOB.PREF_SHOW, GLOB.PREF_HIDE) - default_value = GLOB.PREF_HIDE - flags = R_ADMIN|R_DEBUG - - -/datum/client_preference/staff/show_runtime_logs - description = "Runtime Log Messages" - key = "CHAT_RUNTIMELOGS" - options = list(GLOB.PREF_SHOW, GLOB.PREF_HIDE) - default_value = GLOB.PREF_HIDE - flags = R_ADMIN | R_DEBUG diff --git a/code/modules/client/preference_setup/global/prefixes.dm b/code/modules/client/preference_setup/global/prefixes.dm deleted file mode 100644 index d9b165f2d4c3c..0000000000000 --- a/code/modules/client/preference_setup/global/prefixes.dm +++ /dev/null @@ -1,29 +0,0 @@ -/decl/prefix - var/name - var/default_key - var/is_locked = FALSE - -/decl/prefix/language - name = "Language" - default_key = "," - -/decl/prefix/radio_channel_selection - name = "Radio, channel selection" - default_key = ":" - is_locked = TRUE - -/decl/prefix/radio_main_channel - name = "Radio, main channel" - default_key = ";" - -/decl/prefix/audible_emote - name = "Emote, audible" - default_key = "!" - -/decl/prefix/visible_emote - name = "Emote, visible" - default_key = "^" - -/decl/prefix/custom_emote - name = "Emote, custom" - default_key = "*" diff --git a/code/modules/client/preference_setup/laws/laws_pref.dm b/code/modules/client/preference_setup/laws/laws_pref.dm deleted file mode 100644 index ed8f72108aefe..0000000000000 --- a/code/modules/client/preference_setup/laws/laws_pref.dm +++ /dev/null @@ -1,91 +0,0 @@ -/datum/preferences - var/list/laws = list() - var/is_shackled = FALSE - -/datum/preferences/proc/get_lawset() - if(!laws || !laws.len) - return - var/datum/ai_laws/custom_lawset = new - for(var/law in laws) - custom_lawset.add_inherent_law(law) - return custom_lawset - -/datum/category_item/player_setup_item/law_pref - name = "Laws" - sort_order = 1 - -/datum/category_item/player_setup_item/law_pref/load_character(datum/pref_record_reader/R) - pref.laws = R.read("laws") - pref.is_shackled = R.read("is_shackled") - -/datum/category_item/player_setup_item/law_pref/save_character(datum/pref_record_writer/W) - W.write("laws", pref.laws) - W.write("is_shackled", pref.is_shackled) - -/datum/category_item/player_setup_item/law_pref/sanitize_character() - if(!istype(pref.laws)) pref.laws = list() - - var/datum/species/species = all_species[pref.species] - if(!(species && species.has_organ[BP_POSIBRAIN])) - pref.is_shackled = initial(pref.is_shackled) - else - pref.is_shackled = sanitize_bool(pref.is_shackled, initial(pref.is_shackled)) - -/datum/category_item/player_setup_item/law_pref/content() - . = list() - var/datum/species/species = all_species[pref.species] - - if(!(species && species.has_organ[BP_POSIBRAIN])) - . += "Your Species Has No Laws
              " - else - . += "Shackle: " - if(!pref.is_shackled) - . += "Off" - . += "On" - . += "
              Only shackled positronics have laws in an integrated positronic chassis." - . += "
              " - else - . += "Off" - . += "On" - . += "
              You are shackled and have laws that restrict your behaviour." - . += "
              " - - . += "Your Current Laws:
              " - - if(!pref.laws.len) - . += "You currently have no laws.
              " - else - for(var/i in 1 to pref.laws.len) - . += "[i]) [pref.laws[i]]
              " - - . += "Law sets: Load Set
              " - - . = jointext(.,null) - -/datum/category_item/player_setup_item/law_pref/OnTopic(href, href_list, user) - if(href_list["toggle_shackle"]) - pref.is_shackled = !pref.is_shackled - return TOPIC_REFRESH - - else if(href_list["lawsets"]) - var/list/valid_lawsets = list() - var/list/all_lawsets = subtypesof(/datum/ai_laws) - - for(var/law_set_type in all_lawsets) - var/datum/ai_laws/ai_laws = law_set_type - var/ai_law_name = initial(ai_laws.name) - if(initial(ai_laws.shackles)) // Now this is one terribly snowflaky var - ADD_SORTED(valid_lawsets, ai_law_name, /proc/cmp_text_asc) - valid_lawsets[ai_law_name] = law_set_type - - // Post selection - var/chosen_lawset = input(user, "Choose a law set:", CHARACTER_PREFERENCE_INPUT_TITLE, pref.laws) as null|anything in valid_lawsets - if(chosen_lawset) - var/path = valid_lawsets[chosen_lawset] - var/datum/ai_laws/lawset = new path() - var/list/datum/ai_law/laws = lawset.all_laws() - pref.laws.Cut() - for(var/datum/ai_law/law in laws) - pref.laws += sanitize_text("[law.law]", default="") - return TOPIC_REFRESH - return ..() diff --git a/code/modules/client/preference_setup/loadout/_defines.dm b/code/modules/client/preference_setup/loadout/_defines.dm deleted file mode 100644 index ced763ae24c26..0000000000000 --- a/code/modules/client/preference_setup/loadout/_defines.dm +++ /dev/null @@ -1,4 +0,0 @@ -#define GEAR_HAS_COLOR_SELECTION FLAG(0) -#define GEAR_HAS_TYPE_SELECTION FLAG(1) -#define GEAR_HAS_SUBTYPE_SELECTION FLAG(2) -#define GEAR_HAS_NO_CUSTOMIZATION FLAG(3) diff --git a/code/modules/client/preference_setup/loadout/gear_tweaks.dm b/code/modules/client/preference_setup/loadout/gear_tweaks.dm deleted file mode 100644 index 91663a6244682..0000000000000 --- a/code/modules/client/preference_setup/loadout/gear_tweaks.dm +++ /dev/null @@ -1,423 +0,0 @@ -/datum/gear_tweak/proc/get_contents(var/metadata) - return - -/datum/gear_tweak/proc/get_metadata(var/user, var/metadata, title) - return - -/datum/gear_tweak/proc/get_default() - return - -/datum/gear_tweak/proc/tweak_gear_data(var/metadata, var/datum/gear_data) - return - -/datum/gear_tweak/proc/tweak_item(var/user, var/obj/item/I, var/metadata) - return - -/datum/gear_tweak/proc/tweak_description(var/description, var/metadata) - return description - -/* -* Color adjustment -*/ - -/datum/gear_tweak/color - var/list/valid_colors - -/datum/gear_tweak/color/New(list/valid_colors) - src.valid_colors = valid_colors - ..() - -/datum/gear_tweak/color/get_contents(metadata) - return "Color: " - -/datum/gear_tweak/color/get_default() - return valid_colors ? valid_colors[1] : COLOR_WHITE - -/datum/gear_tweak/color/get_metadata(user, metadata, title = CHARACTER_PREFERENCE_INPUT_TITLE) - if(valid_colors) - return input(user, "Choose a color.", title, metadata) as null|anything in valid_colors - return input(user, "Choose a color.", title, metadata) as color|null - -/datum/gear_tweak/color/tweak_item(user, obj/item/I, metadata) - if(valid_colors && !(metadata in valid_colors)) - return - I.color = sanitize_hexcolor(metadata, I.color) - -/* -* Path adjustment -*/ - -/datum/gear_tweak/path - var/list/valid_paths - -/datum/gear_tweak/path/New(list/valid_paths) - if(!valid_paths.len) - CRASH("No type paths given") - var/list/duplicate_keys = duplicates(valid_paths) - if(duplicate_keys.len) - CRASH("Duplicate names found: [english_list(duplicate_keys)]") - var/list/duplicate_values = duplicates(list_values(valid_paths)) - if(duplicate_values.len) - CRASH("Duplicate types found: [english_list(duplicate_values)]") - // valid_paths, but with names sanitized to remove \improper - var/list/valid_paths_san = list() - for(var/path_name in valid_paths) - if(!istext(path_name)) - CRASH("Expected a text key, was [log_info_line(path_name)]") - var/selection_type = valid_paths[path_name] - if(!ispath(selection_type, /obj/item)) - CRASH("Expected an /obj/item path, was [log_info_line(selection_type)]") - var/path_name_san = replacetext_char(path_name, "\improper", "") - valid_paths_san[path_name_san] = selection_type - src.valid_paths = sortAssoc(valid_paths_san) - -/datum/gear_tweak/path/type/New(type_path) - ..(atomtype2nameassoclist(type_path)) - -/datum/gear_tweak/path/subtype/New(type_path) - ..(atomtypes2nameassoclist(subtypesof(type_path))) - -/datum/gear_tweak/path/specified_types_list/New(type_paths) - ..(atomtypes2nameassoclist(type_paths)) - -/datum/gear_tweak/path/specified_types_args/New() - ..(atomtypes2nameassoclist(args)) - -/datum/gear_tweak/path/get_contents(metadata) - return "Type: [metadata]" - -/datum/gear_tweak/path/get_default() - return valid_paths[1] - -/datum/gear_tweak/path/get_metadata(user, metadata, title) - return input(user, "Choose a type.", CHARACTER_PREFERENCE_INPUT_TITLE, metadata) as null|anything in valid_paths - -/datum/gear_tweak/path/tweak_gear_data(metadata, datum/gear_data/gear_data) - if(!(metadata in valid_paths)) - return - gear_data.path = valid_paths[metadata] - -/datum/gear_tweak/path/tweak_description(description, metadata) - if(!(metadata in valid_paths)) - return ..() - var/obj/O = valid_paths[metadata] - return initial(O.desc) || description - -/* -* Content adjustment -*/ - -/datum/gear_tweak/contents - var/list/valid_contents - -/datum/gear_tweak/contents/New() - valid_contents = args.Copy() - ..() - -/datum/gear_tweak/contents/get_contents(metadata) - return "Contents: [english_list(metadata, and_text = ", ", final_comma_text = "")]" - -/datum/gear_tweak/contents/get_default() - . = list() - for(var/i = 1 to valid_contents.len) - . += "Random" - -/datum/gear_tweak/contents/get_metadata(user, list/metadata, title) - . = list() - for(var/i = metadata.len to (valid_contents.len - 1)) - metadata += "Random" - for(var/i = 1 to valid_contents.len) - var/entry = input(user, "Choose an entry.", CHARACTER_PREFERENCE_INPUT_TITLE, metadata[i]) as null|anything in (valid_contents[i] + list("Random", "None")) - if(entry) - . += entry - else - return metadata - -/datum/gear_tweak/contents/tweak_item(owner, obj/item/I, list/metadata) - if(length(metadata) != length(valid_contents)) - return - for(var/i = 1 to valid_contents.len) - var/path - var/list/contents = valid_contents[i] - if(metadata[i] == "Random") - path = pick(contents) - path = contents[path] - else if(metadata[i] == "None") - continue - else - path = contents[metadata[i]] - if(path) - new path(I) - else - log_debug("Failed to tweak item: Index [i] in [json_encode(metadata)] did not result in a valid path.") - to_chat(owner, SPAN_WARNING("Your loadout selection for \the [I] that includes \the [metadata[i]] could not spawn properly. This likely means a saved configuration is no longer available or is invalid. Contact a dev for help. This is likely a bug.")) - -/* -* Ragent adjustment -*/ - -/datum/gear_tweak/reagents - var/list/valid_reagents - -/datum/gear_tweak/reagents/New(list/reagents) - valid_reagents = reagents.Copy() - ..() - -/datum/gear_tweak/reagents/get_contents(metadata) - return "Reagents: [metadata]" - -/datum/gear_tweak/reagents/get_default() - return "Random" - -/datum/gear_tweak/reagents/get_metadata(user, list/metadata, title) - . = input(user, "Choose an entry.", CHARACTER_PREFERENCE_INPUT_TITLE, metadata) as null|anything in (valid_reagents + list("Random", "None")) - if(!.) - return metadata - -/datum/gear_tweak/reagents/tweak_item(user, obj/item/I, list/metadata) - if(metadata == "None") - return - var/reagent - if(metadata == "Random") - reagent = valid_reagents[pick(valid_reagents)] - else - reagent = valid_reagents[metadata] - if(reagent) - return I.reagents.add_reagent(reagent, I.reagents.get_free_space()) - -/* -* Custom Setup -*/ -/datum/gear_tweak/custom_setup - var/custom_setup_proc - -/datum/gear_tweak/custom_setup/New(custom_setup_proc) - src.custom_setup_proc = custom_setup_proc - ..() - -/datum/gear_tweak/custom_setup/tweak_item(user, item) - call(item, custom_setup_proc)(user) - -/* -* Custom Name -*/ - -/datum/gear_tweak/custom_name - var/list/valid_custom_names - -/datum/gear_tweak/custom_name/New(list/valid_custom_names) - src.valid_custom_names = valid_custom_names - ..() - -/datum/gear_tweak/custom_name/get_contents(metadata) - return "Name: [metadata]" - -/datum/gear_tweak/custom_name/get_metadata(user, metadata, title) - if(valid_custom_names) - return input(user, "Choose an item name.", "Character Preference", metadata) as null|anything in valid_custom_names - return sanitize(input(user, "Choose the item's name. Leave it blank to use the default name.", "Item Name", metadata) as text|null, MAX_LNAME_LEN, extra = FALSE) - -/datum/gear_tweak/custom_name/tweak_item(user, obj/item/I, metadata) - if(!metadata) - return I.name - return I.name = metadata - -/* -Custom Description -*/ - -/datum/gear_tweak/custom_desc - var/list/valid_custom_desc - -/datum/gear_tweak/custom_desc/New(list/valid_custom_desc) - src.valid_custom_desc = valid_custom_desc - ..() - -/datum/gear_tweak/custom_desc/get_contents(metadata) - return "Description: [metadata]" - -/datum/gear_tweak/custom_desc/get_metadata(user, metadata, title) - if(valid_custom_desc) - return input(user, "Choose an item description.", "Character Preference", metadata) as null|anything in valid_custom_desc - return sanitize(input(user, "Choose the item's description. Leave it blank to use the default description.", "Item Description", metadata) as message|null, MAX_DESC_LEN, extra = FALSE) - -/datum/gear_tweak/custom_desc/tweak_item(user, obj/item/I, metadata) - if(!metadata) - return I.desc - return I.desc = metadata - - -/* -* Tablet Stuff -*/ - -/datum/gear_tweak/tablet - var/list/ValidProcessors = list(/obj/item/stock_parts/computer/processor_unit/small) - var/list/ValidBatteries = list(/obj/item/stock_parts/computer/battery_module/nano, /obj/item/stock_parts/computer/battery_module/micro, /obj/item/stock_parts/computer/battery_module) - var/list/ValidHardDrives = list(/obj/item/stock_parts/computer/hard_drive/micro, /obj/item/stock_parts/computer/hard_drive/small, /obj/item/stock_parts/computer/hard_drive) - var/list/ValidNetworkCards = list(/obj/item/stock_parts/computer/network_card, /obj/item/stock_parts/computer/network_card/advanced) - var/list/ValidNanoPrinters = list(null, /obj/item/stock_parts/computer/nano_printer) - var/list/ValidCardSlots = list(null, /obj/item/stock_parts/computer/card_slot) - var/list/ValidTeslaLinks = list(null, /obj/item/stock_parts/computer/tesla_link) - -/datum/gear_tweak/tablet/get_contents(list/metadata) - var/list/names = list() - var/obj/O = null - if (metadata.len != 7) - return - O = ValidProcessors[metadata[1]] - if(O) - names += initial(O.name) - O = ValidBatteries[metadata[2]] - if(O) - names += initial(O.name) - O = ValidHardDrives[metadata[3]] - if(O) - names += initial(O.name) - O = ValidNetworkCards[metadata[4]] - if(O) - names += initial(O.name) - O = ValidNanoPrinters[metadata[5]] - if(O) - names += initial(O.name) - O = ValidCardSlots[metadata[6]] - if(O) - names += initial(O.name) - O = ValidTeslaLinks[metadata[7]] - if(O) - names += initial(O.name) - return english_list(names, and_text = ", ") - -/datum/gear_tweak/tablet/get_metadata(mob/user, metadata, title) - . = list() - if(!istype(user)) - return - - var/list/names = list() - var/counter = 1 - for(var/i in ValidProcessors) - if(i) - var/obj/O = i - names[initial(O.name)] = counter++ - else - names["None"] = counter++ - - if (!user || !user.client) - return - var/entry = input(user, "Choose a processor.", CHARACTER_PREFERENCE_INPUT_TITLE) in names - . += names[entry] - - names = list() - counter = 1 - for(var/i in ValidBatteries) - if(i) - var/obj/O = i - names[initial(O.name)] = counter++ - else - names["None"] = counter++ - - if (!user || !user.client) - return - entry = input(user, "Choose a battery.", CHARACTER_PREFERENCE_INPUT_TITLE) in names - . += names[entry] - - names = list() - counter = 1 - for(var/i in ValidHardDrives) - if(i) - var/obj/O = i - names[initial(O.name)] = counter++ - else - names["None"] = counter++ - - if (!user || !user.client) - return - entry = input(user, "Choose a hard drive.", CHARACTER_PREFERENCE_INPUT_TITLE) in names - . += names[entry] - - names = list() - counter = 1 - for(var/i in ValidNetworkCards) - if(i) - var/obj/O = i - names[initial(O.name)] = counter++ - else - names["None"] = counter++ - - if (!user || !user.client) - return - entry = input(user, "Choose a network card.", CHARACTER_PREFERENCE_INPUT_TITLE) in names - . += names[entry] - - names = list() - counter = 1 - for(var/i in ValidNanoPrinters) - if(i) - var/obj/O = i - names[initial(O.name)] = counter++ - else - names["None"] = counter++ - - if (!user || !user.client) - return - entry = input(user, "Choose a nanoprinter.", CHARACTER_PREFERENCE_INPUT_TITLE) in names - . += names[entry] - - names = list() - counter = 1 - for(var/i in ValidCardSlots) - if(i) - var/obj/O = i - names[initial(O.name)] = counter++ - else - names["None"] = counter++ - - if (!user || !user.client) - return - entry = input(user, "Choose a card slot.", CHARACTER_PREFERENCE_INPUT_TITLE) in names - . += names[entry] - - names = list() - counter = 1 - for(var/i in ValidTeslaLinks) - if(i) - var/obj/O = i - names[initial(O.name)] = counter++ - else - names["None"] = counter++ - - if (!user || !user.client) - return - entry = input(user, "Choose a tesla link.", CHARACTER_PREFERENCE_INPUT_TITLE) in names - . += names[entry] - -/datum/gear_tweak/tablet/get_default() - . = list() - for(var/i in 1 to TWEAKABLE_COMPUTER_PART_SLOTS) - . += 1 - -/datum/gear_tweak/tablet/tweak_item(user, obj/item/modular_computer/tablet/I, list/metadata) - if(length(metadata) < TWEAKABLE_COMPUTER_PART_SLOTS) - return - if(ValidProcessors[metadata[1]]) - var/t = ValidProcessors[metadata[1]] - I.processor_unit = new t(I) - if(ValidBatteries[metadata[2]]) - var/t = ValidBatteries[metadata[2]] - I.battery_module = new t(I) - I.battery_module.charge_to_full() - if(ValidHardDrives[metadata[3]]) - var/t = ValidHardDrives[metadata[3]] - I.hard_drive = new t(I) - if(ValidNetworkCards[metadata[4]]) - var/t = ValidNetworkCards[metadata[4]] - I.network_card = new t(I) - if(ValidNanoPrinters[metadata[5]]) - var/t = ValidNanoPrinters[metadata[5]] - I.nano_printer = new t(I) - if(ValidCardSlots[metadata[6]]) - var/t = ValidCardSlots[metadata[6]] - I.card_slot = new t(I) - if(ValidTeslaLinks[metadata[7]]) - var/t = ValidTeslaLinks[metadata[7]] - I.tesla_link = new t(I) diff --git a/code/modules/client/preference_setup/loadout/lists/accessories.dm b/code/modules/client/preference_setup/loadout/lists/accessories.dm deleted file mode 100644 index 885de0067af79..0000000000000 --- a/code/modules/client/preference_setup/loadout/lists/accessories.dm +++ /dev/null @@ -1,241 +0,0 @@ -/datum/gear/accessory - sort_category = "Accessories" - category = /datum/gear/accessory - slot = slot_tie - - -/datum/gear/accessory/tie - display_name = "tie selection" - path = /obj/item/clothing/accessory - - -/datum/gear/accessory/tie/New() - ..() - var/ties = list() - ties["blue tie"] = /obj/item/clothing/accessory/blue - ties["red tie"] = /obj/item/clothing/accessory/red - ties["blue tie, clip"] = /obj/item/clothing/accessory/blue_clip - ties["red long tie"] = /obj/item/clothing/accessory/red_long - ties["black tie"] = /obj/item/clothing/accessory/black - ties["yellow tie"] = /obj/item/clothing/accessory/yellow - ties["navy tie"] = /obj/item/clothing/accessory/navy - ties["horrible tie"] = /obj/item/clothing/accessory/horrible - ties["brown tie"] = /obj/item/clothing/accessory/brown - gear_tweaks += new/datum/gear_tweak/path(ties) - - -/datum/gear/accessory/tie_color - display_name = "colored tie" - path = /obj/item/clothing/accessory - flags = GEAR_HAS_COLOR_SELECTION - - -/datum/gear/accessory/tie_color/New() - ..() - var/ties = list() - ties["tie"] = /obj/item/clothing/accessory - ties["striped tie"] = /obj/item/clothing/accessory/long - gear_tweaks += new/datum/gear_tweak/path(ties) - -//proxima code start -/datum/gear/accessory/ec_sweater - display_name = "expeditionary fleece jacket" - path = /obj/item/clothing/accessory/ec_sweater - allowed_branches = list(/datum/mil_branch/expeditionary_corps) - -/datum/gear/accessory/ec_sweater/officer - display_name = "expeditionary officer's fleece jacket" - path = /obj/item/clothing/accessory/ec_sweater/officer - allowed_branches = list(/datum/mil_branch/expeditionary_corps) - allowed_roles = list(/datum/job/captain, /datum/job/hop, /datum/job/rd, /datum/job/cmo, /datum/job/chief_engineer, /datum/job/hos, /datum/job/bridgeofficer) - -/datum/gear/accessory/ec_sweater/fleet - display_name = "fleet sweater" - path = /obj/item/clothing/accessory/ec_sweater/fleet - allowed_branches = list(/datum/mil_branch/fleet) - -//proxima code end - -/datum/gear/accessory/locket - display_name = "locket" - path = /obj/item/clothing/accessory/locket - - -/datum/gear/accessory/necklace - display_name = "necklace, colour select" - path = /obj/item/clothing/accessory/necklace - flags = GEAR_HAS_COLOR_SELECTION - - -/datum/gear/accessory/bowtie - display_name = "bowtie, horrible" - path = /obj/item/clothing/accessory/bowtie/ugly - - -/datum/gear/accessory/bowtie/color - display_name = "bowtie, colour select" - path = /obj/item/clothing/accessory/bowtie/color - flags = GEAR_HAS_COLOR_SELECTION - - -/datum/gear/accessory/ntaward - display_name = "corporate award selection" - description = "A medal or ribbon awarded to corporate personnel for significant accomplishments." - path = /obj/item/clothing/accessory/medal - cost = 8 - flags = GEAR_HAS_NO_CUSTOMIZATION - - - -/datum/gear/accessory/ntaward/New() - ..() - var/ntawards = list() - ntawards["sciences medal"] = /obj/item/clothing/accessory/medal/bronze/nanotrasen - ntawards["distinguished service"] = /obj/item/clothing/accessory/medal/silver/nanotrasen - ntawards["command medal"] = /obj/item/clothing/accessory/medal/gold/nanotrasen - gear_tweaks += new/datum/gear_tweak/path(ntawards) - - -/datum/gear/accessory/armband_security - display_name = "security armband" - path = /obj/item/clothing/accessory/armband - flags = GEAR_HAS_NO_CUSTOMIZATION - - - -/datum/gear/accessory/armband_cargo - display_name = "cargo armband" - path = /obj/item/clothing/accessory/armband/cargo - flags = GEAR_HAS_NO_CUSTOMIZATION - - - -/datum/gear/accessory/armband_medical - display_name = "medical armband" - path = /obj/item/clothing/accessory/armband/med - flags = GEAR_HAS_NO_CUSTOMIZATION - - - -/datum/gear/accessory/armband_emt - display_name = "EMT armband" - path = /obj/item/clothing/accessory/armband/medgreen - allowed_roles = list( - /datum/job/doctor - ) - flags = GEAR_HAS_NO_CUSTOMIZATION - - - -/datum/gear/accessory/armband_engineering - display_name = "engineering armband" - path = /obj/item/clothing/accessory/armband/engine - flags = GEAR_HAS_NO_CUSTOMIZATION - - - -/datum/gear/accessory/armband_hydro - display_name = "hydroponics armband" - path = /obj/item/clothing/accessory/armband/hydro - allowed_roles = list( - /datum/job/rd, - /datum/job/scientist, - /datum/job/assistant - ) - flags = GEAR_HAS_NO_CUSTOMIZATION - - - -/datum/gear/accessory/armband_nt - display_name = "corporate armband" - path = /obj/item/clothing/accessory/armband/whitered - - -/datum/gear/accessory/ftu_pin - display_name = "Free Trade Union pin" - path = /obj/item/clothing/accessory/ftu_pin - flags = GEAR_HAS_NO_CUSTOMIZATION - - -/datum/gear/accessory/chaplain - display_name = "chaplain insignia" - path = /obj/item/clothing/accessory/chaplain - allowed_roles = list( - /datum/job/chaplain - ) - flags = GEAR_HAS_NO_CUSTOMIZATION - - -/datum/gear/accessory/chaplain/New() - ..() - var/options = list() - options["Christianity"] = /obj/item/clothing/accessory/chaplain/christianity - options["Judaism"] = /obj/item/clothing/accessory/chaplain/judaism - options["Islam"] = /obj/item/clothing/accessory/chaplain/islam - options["Buddhism"] = /obj/item/clothing/accessory/chaplain/buddhism - options["Hinduism"] = /obj/item/clothing/accessory/chaplain/hinduism - options["Sikhism"] = /obj/item/clothing/accessory/chaplain/sikhism - options["Baha'i Faith"] = /obj/item/clothing/accessory/chaplain/bahaifaith - options["Jainism"] = /obj/item/clothing/accessory/chaplain/jainism - options["Taoism"] = /obj/item/clothing/accessory/chaplain/taoism - gear_tweaks += new/datum/gear_tweak/path (options) - - -/datum/gear/accessory/bracelet - display_name = "bracelet, color select" - path = /obj/item/clothing/accessory/bracelet - cost = 1 - flags = GEAR_HAS_COLOR_SELECTION - - -/datum/gear/accessory/wristwatch - display_name = "wrist watch selection" - path = /obj/item/clothing/accessory/wristwatches - cost = 1 - flags = GEAR_HAS_TYPE_SELECTION - - -/datum/gear/accessory/pronouns - display_name = "pronoun badge selection" - description = "A selection of badges used to indicate the preferred pronouns of the wearer." - path = /obj/item/clothing/accessory/pronouns - - -/datum/gear/accessory/pronouns/New() - ..() - var/list/options = list() - options["they/them badge"] = /obj/item/clothing/accessory/pronouns/they - options["he/him badge"] = /obj/item/clothing/accessory/pronouns/hehim - options["she/her badge"] = /obj/item/clothing/accessory/pronouns/sheher - options["he/they badge"] = /obj/item/clothing/accessory/pronouns/hethey - options["she/they badge"] = /obj/item/clothing/accessory/pronouns/shethey - options["he/she badge"] = /obj/item/clothing/accessory/pronouns/heshe - options["ask me badge"] = /obj/item/clothing/accessory/pronouns/ask - gear_tweaks += new /datum/gear_tweak/path (options) - - -/datum/gear/accessory/pride_pins - display_name = "pride pin selection" - description = "A selection of pins used to signal membership or support of an identity or sexuality." - path = /obj/item/clothing/accessory/pride_pin - - -/datum/gear/accessory/pride_pins/New() - ..() - var/list/options = list() - options["transgender pride pin"] = /obj/item/clothing/accessory/pride_pin/transgender - options["lesbian pride pin"] = /obj/item/clothing/accessory/pride_pin/lesbian - options["bisexual pride pin"] = /obj/item/clothing/accessory/pride_pin/bisexual - options["gay pride pin"] = /obj/item/clothing/accessory/pride_pin/gay - options["pansexual pride pin"] = /obj/item/clothing/accessory/pride_pin/pansexual - options["nonbinary pride pin"] = /obj/item/clothing/accessory/pride_pin/nonbinary - options["asexual pride pin"] = /obj/item/clothing/accessory/pride_pin/asexual - options["intersex pride pin"] = /obj/item/clothing/accessory/pride_pin/intersex - gear_tweaks += new /datum/gear_tweak/path (options) - - -/datum/gear/accessory/neckerchief - display_name = "neckerchief, colour select" - description = "A piece of cloth tied around the neck. A favorite of Sailors and Partisans everywhere." - path = /obj/item/clothing/accessory/neckerchief - flags = GEAR_HAS_COLOR_SELECTION diff --git a/code/modules/client/preference_setup/loadout/lists/augments.dm b/code/modules/client/preference_setup/loadout/lists/augments.dm deleted file mode 100644 index a58f3701a9bc3..0000000000000 --- a/code/modules/client/preference_setup/loadout/lists/augments.dm +++ /dev/null @@ -1,82 +0,0 @@ -/datum/gear/augment - sort_category = "Augments" - category = /datum/gear/augment - cost = 1 //proxima. was: cost = 2 - - -/datum/gear/augment/armor_minor - display_name = "Armor Augments (Minor)" - description = "Armor flavor augments with little or no in-game effects." - path = /obj/item/organ/internal/augment - - -/datum/gear/augment/armor_minor/New() - ..() - var/list/options = list() - options["skeletal bracing"] = /obj/item/organ/internal/augment/skeletal_bracing - options["ultraviolet shielding"] = /obj/item/organ/internal/augment/ultraviolet_shielding - gear_tweaks += new /datum/gear_tweak/path (options) - - -/datum/gear/augment/chest_minor - display_name = "Chest Augments (Minor)" - description = "Chest flavor augments with little or no in-game effects." - path = /obj/item/organ/internal/augment - - -/datum/gear/augment/chest_minor/New() - ..() - var/list/options = list() - options["emergency battery"] = /obj/item/organ/internal/augment/emergency_battery - options["leukocyte breeder"] = /obj/item/organ/internal/augment/active/leukocyte_breeder - gear_tweaks += new /datum/gear_tweak/path (options) - - -/datum/gear/augment/groin_minor - display_name = "Lower Body Augments (Minor)" - description = "Lower Body flavor augments with little or no in-game effects." - path = /obj/item/organ/internal/augment - - -/datum/gear/augment/groin_minor/New() - ..() - var/list/options = list() - options["recycler suite"] = /obj/item/organ/internal/augment/recycler_suite - gear_tweaks += new /datum/gear_tweak/path (options) - - -/datum/gear/augment/head_minor - display_name = "Head Augments (Minor)" - description = "Head flavor augments with little or no in-game effects." - path = /obj/item/organ/internal/augment - - -/datum/gear/augment/head_minor/New() - ..() - var/list/options = list() - options["circadian conditioner"] = /obj/item/organ/internal/augment/circadian_conditioner - options["codex access chip"] = /obj/item/organ/internal/augment/codex_access - options["data chip"] = /obj/item/organ/internal/augment/data_chip - options["genetic backup"] = /obj/item/organ/internal/augment/genetic_backup - options["neurostimulator implant"] = /obj/item/organ/internal/augment/neurostimulator_implant - options["pain assistant"] = /obj/item/organ/internal/augment/pain_assistant - gear_tweaks += new /datum/gear_tweak/path (options) - - -/datum/gear/augment/head_vision - display_name = "Head Augments (Vision)" - description = "Head augments with vision effects." - path = /obj/item/organ/internal/augment - flags = GEAR_HAS_NO_CUSTOMIZATION - - -/datum/gear/augment/head_vision/New() - ..() - var/list/options = list() - options["corrective lenses"] = /obj/item/organ/internal/augment/active/item/corrective_lenses - options["glare dampeners"] = /obj/item/organ/internal/augment/active/item/glare_dampeners - options["integrated health HUD"] = /obj/item/organ/internal/augment/active/hud/health - options["integrated security HUD"] = /obj/item/organ/internal/augment/active/hud/security - options["integrated filth HUD"] = /obj/item/organ/internal/augment/active/hud/janitor - options["integrated sciHUD"] = /obj/item/organ/internal/augment/active/hud/science - gear_tweaks += new /datum/gear_tweak/path (options) diff --git a/code/modules/client/preference_setup/loadout/lists/clothing.dm b/code/modules/client/preference_setup/loadout/lists/clothing.dm deleted file mode 100644 index a1f992de56f19..0000000000000 --- a/code/modules/client/preference_setup/loadout/lists/clothing.dm +++ /dev/null @@ -1,81 +0,0 @@ - -/datum/gear/clothing - sort_category = "Clothing Pieces" - category = /datum/gear/clothing - slot = slot_tie - -/datum/gear/clothing/flannel - display_name = "flannel (colorable)" - path = /obj/item/clothing/accessory/flannel - slot = slot_tie - flags = GEAR_HAS_COLOR_SELECTION - -/datum/gear/clothing/scarf - display_name = "scarf" - path = /obj/item/clothing/accessory/scarf - flags = GEAR_HAS_COLOR_SELECTION - -/datum/gear/clothing/hawaii - display_name = "hawaii shirt" - path = /obj/item/clothing/accessory/toggleable/hawaii - -/datum/gear/clothing/hawaii/New() - ..() - var/list/shirts = list() - shirts["blue hawaii shirt"] = /obj/item/clothing/accessory/toggleable/hawaii - shirts["red hawaii shirt"] = /obj/item/clothing/accessory/toggleable/hawaii/red - shirts["random colored hawaii shirt"] = /obj/item/clothing/accessory/toggleable/hawaii/random - gear_tweaks += new/datum/gear_tweak/path(shirts) - -/datum/gear/clothing/vest - display_name = "suit vest, colour select" - path = /obj/item/clothing/accessory/toggleable/suit_vest - flags = GEAR_HAS_COLOR_SELECTION - -/datum/gear/clothing/suspenders - display_name = "suspenders" - path = /obj/item/clothing/accessory/suspenders - -/datum/gear/clothing/suspenders/colorable - display_name = "suspenders, colour select" - path = /obj/item/clothing/accessory/suspenders/colorable - flags = GEAR_HAS_COLOR_SELECTION - -/datum/gear/clothing/wcoat - display_name = "waistcoat, colour select" - path = /obj/item/clothing/accessory/waistcoat - flags = GEAR_HAS_COLOR_SELECTION - -/datum/gear/clothing/zhongshan - display_name = "zhongshan jacket, colour select" - path = /obj/item/clothing/accessory/toggleable/zhongshan - flags = GEAR_HAS_COLOR_SELECTION - -/datum/gear/clothing/dashiki - display_name = "dashiki selection" - path = /obj/item/clothing/accessory/dashiki - flags = GEAR_HAS_TYPE_SELECTION - -/datum/gear/clothing/thawb - display_name = "thawb" - path = /obj/item/clothing/accessory/thawb - -/datum/gear/clothing/sherwani - display_name = "sherwani, colour select" - path = /obj/item/clothing/accessory/sherwani - flags = GEAR_HAS_COLOR_SELECTION - -/datum/gear/clothing/qipao - display_name = "qipao blouse, colour select" - path = /obj/item/clothing/accessory/qipao - flags = GEAR_HAS_COLOR_SELECTION - -/datum/gear/clothing/sweater - display_name = "turtleneck sweater, colour select" - path = /obj/item/clothing/accessory/sweater - flags = GEAR_HAS_COLOR_SELECTION - -/datum/gear/clothing/tangzhuang - display_name = "tangzhuang jacket, colour select" - path = /obj/item/clothing/accessory/tangzhuang - flags = GEAR_HAS_COLOR_SELECTION diff --git a/code/modules/client/preference_setup/loadout/lists/earwear.dm b/code/modules/client/preference_setup/loadout/lists/earwear.dm deleted file mode 100644 index 30a1471745de0..0000000000000 --- a/code/modules/client/preference_setup/loadout/lists/earwear.dm +++ /dev/null @@ -1,38 +0,0 @@ -// Stuff worn on the ears. Items here go in the "ears" sort_category but they must not use -// the slot_r_ear or slot_l_ear as the slot, or else players will spawn with no headset. -/datum/gear/ears - display_name = "earmuffs" - path = /obj/item/clothing/ears/earmuffs - sort_category = "Earwear" - -/datum/gear/headphones - display_name = "headphones" - path = /obj/item/clothing/ears/headphones - sort_category = "Earwear" - -/datum/gear/earrings - display_name = "earrings" - path = /obj/item/clothing/ears/earring - sort_category = "Earwear" - -/datum/gear/earrings/New() - ..() - var/earrings = list() - earrings["stud, pearl"] = /obj/item/clothing/ears/earring/stud - earrings["stud, glass"] = /obj/item/clothing/ears/earring/stud/glass - earrings["stud, wood"] = /obj/item/clothing/ears/earring/stud/wood - earrings["stud, iron"] = /obj/item/clothing/ears/earring/stud/iron - earrings["stud, steel"] = /obj/item/clothing/ears/earring/stud/steel - earrings["stud, silver"] = /obj/item/clothing/ears/earring/stud/silver - earrings["stud, gold"] = /obj/item/clothing/ears/earring/stud/gold - earrings["stud, platinum"] = /obj/item/clothing/ears/earring/stud/platinum - earrings["stud, diamond"] = /obj/item/clothing/ears/earring/stud/diamond - earrings["dangle, glass"] = /obj/item/clothing/ears/earring/dangle/glass - earrings["dangle, wood"] = /obj/item/clothing/ears/earring/dangle/wood - earrings["dangle, iron"] = /obj/item/clothing/ears/earring/dangle/iron - earrings["dangle, steel"] = /obj/item/clothing/ears/earring/dangle/steel - earrings["dangle, silver"] = /obj/item/clothing/ears/earring/dangle/silver - earrings["dangle, gold"] = /obj/item/clothing/ears/earring/dangle/gold - earrings["dangle, platinum"] = /obj/item/clothing/ears/earring/dangle/platinum - earrings["dangle, diamond"] = /obj/item/clothing/ears/earring/dangle/diamond - gear_tweaks += new/datum/gear_tweak/path(earrings) diff --git a/code/modules/client/preference_setup/loadout/lists/eyegear.dm b/code/modules/client/preference_setup/loadout/lists/eyegear.dm deleted file mode 100644 index 5c3b4e0dc55ed..0000000000000 --- a/code/modules/client/preference_setup/loadout/lists/eyegear.dm +++ /dev/null @@ -1,175 +0,0 @@ -/datum/gear/eyes - sort_category = "Glasses and Eyewear" - category = /datum/gear/eyes - slot = slot_glasses - cost = 2 - - -/datum/gear/eyes/glasses - display_name = "Corrective Eyewear" - description = "Simply corrects eyesight." - path = /obj/item/clothing/glasses - - -/datum/gear/eyes/glasses/New() - ..() - var/list/options = list() - options["Basic Glasses"] = /obj/item/clothing/glasses/prescription - options["Green Glasses"] = /obj/item/clothing/glasses/green - options["Hipster Glasses"] = /obj/item/clothing/glasses/hipster - options["Scanning Goggles"] = /obj/item/clothing/glasses/scanners - gear_tweaks += new /datum/gear_tweak/path (options) - - -/datum/gear/eyes/science - display_name = "Science Eyewear" - description = "Provides research and chemical assessments." - path = /obj/item/clothing/glasses - flags = GEAR_HAS_NO_CUSTOMIZATION - - -/datum/gear/eyes/science/New() - ..() - var/list/options = list() - options["Goggles"] = /obj/item/clothing/glasses/science - options["Goggles, corrective"] = /obj/item/clothing/glasses/science/prescription - options["HUD"] = /obj/item/clothing/glasses/hud/science - options["HUD, corrective"] = /obj/item/clothing/glasses/hud/science/prescription - gear_tweaks += new /datum/gear_tweak/path (options) - - -/datum/gear/eyes/security - display_name = "Security Eyewear" - description = "Provides security vision overlays." - path = /obj/item/clothing/glasses - flags = GEAR_HAS_NO_CUSTOMIZATION - - -/datum/gear/eyes/security/New() - ..() - var/list/options = list() - options["HUD"] = /obj/item/clothing/glasses/hud/security - options["HUD, corrective"] = /obj/item/clothing/glasses/hud/security/prescription - options["Sunglasses"] = /obj/item/clothing/glasses/hud/security/prot/sunglasses - options["Sunglasses, corrective"] = /obj/item/clothing/glasses/hud/security/prot/sunglasses/prescription - options["Aviators"] = /obj/item/clothing/glasses/hud/security/prot/aviators - options["Aviators, corrective"] = /obj/item/clothing/glasses/hud/security/prot/aviators/prescription - options["Goggles"] = /obj/item/clothing/glasses/hud/security/prot - options["Goggles, corrective"] = /obj/item/clothing/glasses/hud/security/prot/prescription - options["Eyepatch"] = /obj/item/clothing/glasses/eyepatch/hud/security - gear_tweaks += new /datum/gear_tweak/path (options) - - -/datum/gear/eyes/medical - display_name = "Medical Eyewear" - description = "Provides medical vision overlays." - path = /obj/item/clothing/glasses - flags = GEAR_HAS_NO_CUSTOMIZATION - - -/datum/gear/eyes/medical/New() - ..() - var/list/options = list() - options["HUD"] = /obj/item/clothing/glasses/hud/health - options["HUD, corrective"] = /obj/item/clothing/glasses/hud/health/prescription - options["Goggles"] = /obj/item/clothing/glasses/hud/health/goggle - options["Goggles, corrective"] = /obj/item/clothing/glasses/hud/health/goggle/prescription - options["Eyepatch"] = /obj/item/clothing/glasses/eyepatch/hud/medical - gear_tweaks += new /datum/gear_tweak/path (options) - - -/datum/gear/eyes/meson - display_name = "Meson Eyewear" - description = "Provides meson-vision." - path = /obj/item/clothing/glasses - flags = GEAR_HAS_NO_CUSTOMIZATION - - -/datum/gear/eyes/meson/New() - ..() - var/list/options = list() - options["Goggles"] = /obj/item/clothing/glasses/meson - options["Goggles, corrective"] = /obj/item/clothing/glasses/meson/prescription - options["Eyepatch"] = /obj/item/clothing/glasses/eyepatch/hud/meson - gear_tweaks += new /datum/gear_tweak/path (options) - - -/datum/gear/eyes/janitor - display_name = "Sanitation Eyewear" - description = "Provides filth-vision." - path = /obj/item/clothing/glasses - flags = GEAR_HAS_NO_CUSTOMIZATION - - -/datum/gear/eyes/janitor/New() - ..() - var/list/options = list() - options["HUD"] = /obj/item/clothing/glasses/hud/janitor - options["HUD, corrective"] = /obj/item/clothing/glasses/hud/janitor/prescription - gear_tweaks += new /datum/gear_tweak/path (options) - - -/datum/gear/eyes/sunglasses - display_name = "Anti-Glare Eyewear" - description = "Provides basic bright light and flash protection." - path = /obj/item/clothing/glasses - - -/datum/gear/eyes/sunglasses/New() - ..() - var/list/options = list() - options["Sunglasses"] = /obj/item/clothing/glasses/sunglasses - options["Sunglasses, corrective"] = /obj/item/clothing/glasses/sunglasses/prescription - options["Big Sunglasses"] = /obj/item/clothing/glasses/sunglasses/big - options["Big Sunglasses, corrective"] = /obj/item/clothing/glasses/sunglasses/big/prescription - options["Black Aviators"] = /obj/item/clothing/glasses/aviators_black - options["Black Aviators, corrective"] = /obj/item/clothing/glasses/aviators_black/prescription - options["Silver Aviators"] = /obj/item/clothing/glasses/aviators_silver - options["Silver Aviators, corrective"] = /obj/item/clothing/glasses/aviators_silver/prescription - options["Gold Aviators"] = /obj/item/clothing/glasses/aviators_gold - options["Gold Aviators, corrective"] = /obj/item/clothing/glasses/aviators_gold/prescription - options["Rose Aviators"] = /obj/item/clothing/glasses/aviators_rose - options["Rose Aviators, corrective"] = /obj/item/clothing/glasses/aviators_rose/prescription - gear_tweaks += new /datum/gear_tweak/path (options) - - -/datum/gear/eyes/eyepatch - display_name = "Eyepatch Selection" - description = "Conceals a single eye." - path = /obj/item/clothing/glasses - - -/datum/gear/eyes/eyepatch/New() - ..() - var/list/options = list() - options["Eyepatch"] = /obj/item/clothing/glasses/eyepatch - options["iPatch"] = /obj/item/clothing/glasses/eyepatch/hud - gear_tweaks += new /datum/gear_tweak/path (options) - - -/datum/gear/eyes/aviators_shutter - display_name = "Shutter Shades" - path = /obj/item/clothing/glasses/aviators_shutter - flags = GEAR_HAS_COLOR_SELECTION - - -/datum/gear/eyes/welding - display_name = "Welding Goggles" - path = /obj/item/clothing/glasses/welding - - -/datum/gear/eyes/material - display_name = "Material Goggles" - path = /obj/item/clothing/glasses/material - flags = GEAR_HAS_NO_CUSTOMIZATION - - -/datum/gear/eyes/monocle - display_name = "Monocle" - path = /obj/item/clothing/glasses/monocle - - -/datum/gear/eyes/blindfold - display_name = "Blindfold" - path = /obj/item/clothing/glasses/blindfold - flags = GEAR_HAS_COLOR_SELECTION diff --git a/code/modules/client/preference_setup/loadout/lists/footwear.dm b/code/modules/client/preference_setup/loadout/lists/footwear.dm deleted file mode 100644 index 61b3c2618b38b..0000000000000 --- a/code/modules/client/preference_setup/loadout/lists/footwear.dm +++ /dev/null @@ -1,75 +0,0 @@ - -/datum/gear/shoes - sort_category = "Shoes and Footwear" - slot = slot_shoes - category = /datum/gear/shoes - -/datum/gear/shoes/athletic - display_name = "athletic shoes, colour select" - path = /obj/item/clothing/shoes/athletic - flags = GEAR_HAS_COLOR_SELECTION - -/datum/gear/shoes/boots - display_name = "boot selection" - path = /obj/item/clothing/shoes - cost = 2 - -/datum/gear/shoes/boots/New() - ..() - var/boots = list() - boots += /obj/item/clothing/shoes/jackboots - boots += /obj/item/clothing/shoes/workboots - boots += /obj/item/clothing/shoes/dutyboots - boots += /obj/item/clothing/shoes/jungleboots - boots += /obj/item/clothing/shoes/desertboots - gear_tweaks += new/datum/gear_tweak/path/specified_types_list(boots) - -/datum/gear/shoes/color - display_name = "shoe selection" - path = /obj/item/clothing/shoes - -/datum/gear/shoes/color/New() - ..() - var/shoes = list() - shoes += /obj/item/clothing/shoes/black - shoes += /obj/item/clothing/shoes/blue - shoes += /obj/item/clothing/shoes/brown - shoes += /obj/item/clothing/shoes/laceup - shoes += /obj/item/clothing/shoes/dress/white - shoes += /obj/item/clothing/shoes/green - shoes += /obj/item/clothing/shoes/leather - shoes += /obj/item/clothing/shoes/orange - shoes += /obj/item/clothing/shoes/purple - shoes += /obj/item/clothing/shoes/rainbow - shoes += /obj/item/clothing/shoes/red - shoes += /obj/item/clothing/shoes/white - shoes += /obj/item/clothing/shoes/yellow - gear_tweaks += new/datum/gear_tweak/path/specified_types_list(shoes) - -/datum/gear/shoes/flats - display_name = "flats, colour select" - path = /obj/item/clothing/shoes/flats - flags = GEAR_HAS_COLOR_SELECTION - -/datum/gear/shoes/high - display_name = "high tops selection" - path = /obj/item/clothing/shoes/hightops - flags = GEAR_HAS_TYPE_SELECTION - -/datum/gear/shoes/sandal - display_name = "wooden sandals" - path = /obj/item/clothing/shoes/sandal - -/datum/gear/shoes/heels - display_name = "high heels, colour select" - path = /obj/item/clothing/shoes/heels - flags = GEAR_HAS_COLOR_SELECTION - -/datum/gear/shoes/foamclog - display_name = "foam clogs" - path = /obj/item/clothing/shoes/foamclog - flags = GEAR_HAS_COLOR_SELECTION - -/datum/gear/shoes/flipflobster - display_name = "flip flobsters" - path = /obj/item/clothing/shoes/flipflobster diff --git a/code/modules/client/preference_setup/loadout/lists/gloves.dm b/code/modules/client/preference_setup/loadout/lists/gloves.dm deleted file mode 100644 index 9f49362d26087..0000000000000 --- a/code/modules/client/preference_setup/loadout/lists/gloves.dm +++ /dev/null @@ -1,71 +0,0 @@ -/datum/gear/gloves - cost = 2 - slot = slot_gloves - sort_category = "Gloves and Handwear" - category = /datum/gear/gloves - -/datum/gear/gloves/colored - display_name = "gloves, colored" - flags = GEAR_HAS_COLOR_SELECTION - path = /obj/item/clothing/gloves/color - -/datum/gear/gloves/latex - display_name = "gloves, latex" - path = /obj/item/clothing/gloves/latex - cost = 3 - flags = GEAR_HAS_NO_CUSTOMIZATION - -/datum/gear/gloves/nitrile - display_name = "gloves, nitrile" - path = /obj/item/clothing/gloves/latex/nitrile - cost = 3 - flags = GEAR_HAS_NO_CUSTOMIZATION - -/datum/gear/gloves/rainbow - display_name = "gloves, rainbow" - path = /obj/item/clothing/gloves/rainbow - -/datum/gear/gloves/evening - display_name = "gloves, evening, colour select" - path = /obj/item/clothing/gloves/color/evening - flags = GEAR_HAS_COLOR_SELECTION - -/datum/gear/ring - display_name = "ring" - path = /obj/item/clothing/ring - cost = 2 - -/datum/gear/ring/New() - ..() - var/ringtype = list() - ringtype["CTI ring"] = /obj/item/clothing/ring/cti - ringtype["Mariner University ring"] = /obj/item/clothing/ring/mariner - ringtype["engagement ring"] = /obj/item/clothing/ring/engagement - ringtype["signet ring"] = /obj/item/clothing/ring/seal/signet - ringtype["masonic ring"] = /obj/item/clothing/ring/seal/mason - ringtype["ring, steel"] = /obj/item/clothing/ring/material/steel - ringtype["ring, plasteel"] = /obj/item/clothing/ring/material/plasteel - ringtype["ring, bronze"] = /obj/item/clothing/ring/material/bronze - ringtype["ring, silver"] = /obj/item/clothing/ring/material/silver - ringtype["ring, gold"] = /obj/item/clothing/ring/material/gold - ringtype["ring, platinum"] = /obj/item/clothing/ring/material/platinum - ringtype["ring, glass"] = /obj/item/clothing/ring/material/glass - ringtype["ring, wood"] = /obj/item/clothing/ring/material/wood - ringtype["ring, plastic"] = /obj/item/clothing/ring/material/plastic - gear_tweaks += new/datum/gear_tweak/path(ringtype) - -/datum/gear/gloves/botany - display_name = "gloves, botany" - path = /obj/item/clothing/gloves/thick/botany - cost = 3 - allowed_roles = list( - /datum/job/rd, - /datum/job/scientist, - /datum/job/chef, - /datum/job/assistant - ) - -/datum/gear/gloves/work - display_name = "gloves, work" - path = /obj/item/clothing/gloves/thick - cost = 3 diff --git a/code/modules/client/preference_setup/loadout/lists/headwear.dm b/code/modules/client/preference_setup/loadout/lists/headwear.dm deleted file mode 100644 index c3c57e1a8f52c..0000000000000 --- a/code/modules/client/preference_setup/loadout/lists/headwear.dm +++ /dev/null @@ -1,186 +0,0 @@ -/datum/gear/head - sort_category = "Hats and Headwear" - slot = slot_head - category = /datum/gear/head - -/datum/gear/head/beret - display_name = "beret, colour select" - path = /obj/item/clothing/head/beret/plaincolor - flags = GEAR_HAS_COLOR_SELECTION - description = "A simple, solid color beret. This one has no emblems or insignia on it." - -/datum/gear/head/bandana - display_name = "bandana selection" - path = /obj/item/clothing - -/datum/gear/head/bandana/New() - ..() - gear_tweaks += new/datum/gear_tweak/path/specified_types_list(typesof(/obj/item/clothing/mask/bandana) + typesof(/obj/item/clothing/head/bandana)) - -/datum/gear/head/beanie - display_name = "beanie, color select" - path = /obj/item/clothing/head/beanie - flags = GEAR_HAS_COLOR_SELECTION - -/datum/gear/head/bow - display_name = "hair bow, colour select" - path = /obj/item/clothing/head/hairflower/bow - flags = GEAR_HAS_COLOR_SELECTION - -/datum/gear/head/flat_cap - display_name = "flat cap, colour select" - path = /obj/item/clothing/head/flatcap - flags = GEAR_HAS_COLOR_SELECTION - -/datum/gear/head/mariner - display_name = "mariner's cap, colour select" - path = /obj/item/clothing/head/mariner - flags = GEAR_HAS_COLOR_SELECTION - -/datum/gear/head/cap - display_name = "cap selection" - path = /obj/item/clothing/head - -/datum/gear/head/cap/New() - ..() - var/caps = list() - caps["black cap"] = /obj/item/clothing/head/soft/black - caps["blue cap"] = /obj/item/clothing/head/soft/blue - caps["green cap"] = /obj/item/clothing/head/soft/green - caps["grey cap"] = /obj/item/clothing/head/soft/grey - caps["mailman cap"] = /obj/item/clothing/head/mailman - caps["orange cap"] = /obj/item/clothing/head/soft/orange - caps["purple cap"] = /obj/item/clothing/head/soft/purple - caps["rainbow cap"] = /obj/item/clothing/head/soft/rainbow - caps["red cap"] = /obj/item/clothing/head/soft/red - caps["white cap"] = /obj/item/clothing/head/soft/mime - caps["yellow cap"] = /obj/item/clothing/head/soft/yellow - caps["major bill's shipping cap"] = /obj/item/clothing/head/soft/mbill - gear_tweaks += new/datum/gear_tweak/path(caps) - -/datum/gear/head/hairflower - display_name = "hair flower pin" - path = /obj/item/clothing/head/hairflower - -/datum/gear/head/hairflower/New() - ..() - var/pins = list() - pins["blue pin"] = /obj/item/clothing/head/hairflower/blue - pins["pink pin"] = /obj/item/clothing/head/hairflower/pink - pins["red pin"] = /obj/item/clothing/head/hairflower - pins["yellow pin"] = /obj/item/clothing/head/hairflower/yellow - gear_tweaks += new/datum/gear_tweak/path(pins) - -/datum/gear/head/hardhat - display_name = "hardhat selection" - path = /obj/item/clothing/head/hardhat - cost = 2 - -/datum/gear/head/hardhat/New() - ..() - var/hardhats = list() - hardhats["blue hardhat"] = /obj/item/clothing/head/hardhat/dblue - hardhats["orange hardhat"] = /obj/item/clothing/head/hardhat/orange - hardhats["red hardhat"] = /obj/item/clothing/head/hardhat/red - hardhats["light damage control helmet"] = /obj/item/clothing/head/hardhat/EMS/DC_light - hardhats["Emergency Management Bureau helmet"] = /obj/item/clothing/head/hardhat/damage_control/EMB - hardhats["red ancient Emergency Management Bureau helmet"] = /obj/item/clothing/head/hardhat/damage_control/EMB_Ancient - hardhats["yellow ancient Emergency Management Bureau helmet"] = /obj/item/clothing/head/hardhat/damage_control/EMB_Ancient/yellow - hardhats["white ancient Emergency Management Bureau helmet"] = /obj/item/clothing/head/hardhat/damage_control/EMB_Ancient/white - gear_tweaks += new/datum/gear_tweak/path(hardhats) - -/datum/gear/head/formalhat - display_name = "formal hat selection" - path = /obj/item/clothing/head - -/datum/gear/head/formalhat/New() - ..() - var/formalhats = list() - formalhats["boatsman hat"] = /obj/item/clothing/head/boaterhat - formalhats["bowler hat"] = /obj/item/clothing/head/bowler - formalhats["fedora"] = /obj/item/clothing/head/fedora //m'lady - formalhats["feather trilby"] = /obj/item/clothing/head/feathertrilby - formalhats["fez"] = /obj/item/clothing/head/fez - formalhats["top hat"] = /obj/item/clothing/head/that - formalhats["fedora, brown"] = /obj/item/clothing/head/det - formalhats["fedora, grey"] = /obj/item/clothing/head/det/grey - formalhats["panama hat"] = /obj/item/clothing/head/panama - gear_tweaks += new/datum/gear_tweak/path(formalhats) - -/datum/gear/head/informalhat - display_name = "informal hat selection" - path = /obj/item/clothing/head - -/datum/gear/head/informalhat/New() - ..() - var/informalhats = list() - informalhats["cowboy hat"] = /obj/item/clothing/head/cowboy_hat - informalhats["ushanka"] = /obj/item/clothing/head/ushanka - gear_tweaks += new/datum/gear_tweak/path(informalhats) - -/datum/gear/head/hijab - display_name = "hijab, colour select" - path = /obj/item/clothing/head/hijab - flags = GEAR_HAS_COLOR_SELECTION - -/datum/gear/head/kippa - display_name = "kippa, colour select" - path = /obj/item/clothing/head/kippa - flags = GEAR_HAS_COLOR_SELECTION - -/datum/gear/head/turban - display_name = "turban, colour select" - path = /obj/item/clothing/head/turban - flags = GEAR_HAS_COLOR_SELECTION - -/datum/gear/head/taqiyah - display_name = "taqiyah, colour select" - path = /obj/item/clothing/head/taqiyah - flags = GEAR_HAS_COLOR_SELECTION - -/datum/gear/head/rastacap - display_name = "rastacap" - path = /obj/item/clothing/head/rastacap - -/datum/gear/head/surgical - display_name = "standard surgical caps" - path = /obj/item/clothing/head/surgery - flags = GEAR_HAS_TYPE_SELECTION | GEAR_HAS_NO_CUSTOMIZATION - -/datum/gear/head/surgical/custom - display_name = "surgical cap, colour select" - flags = GEAR_HAS_COLOR_SELECTION - -/datum/gear/head/welding - display_name = "welding mask selection" - path = /obj/item/clothing/head/welding - -/datum/gear/head/welding/New() - ..() - var/welding_masks = list() - welding_masks += /obj/item/clothing/head/welding/demon - welding_masks += /obj/item/clothing/head/welding/engie - welding_masks += /obj/item/clothing/head/welding/fancy - welding_masks += /obj/item/clothing/head/welding/knight - welding_masks += /obj/item/clothing/head/welding/carp - gear_tweaks += new/datum/gear_tweak/path/specified_types_list(welding_masks) - -/datum/gear/head/tankccap - display_name = "padded cap" - path = /obj/item/clothing/head/tank - -/datum/gear/tactical/balaclava - display_name = "balaclava" - path = /obj/item/clothing/mask/balaclava - -/datum/gear/head/corporateberet - display_name = "corporate beret selection" - path = /obj/item/clothing/head/beret - flags = GEAR_HAS_NO_CUSTOMIZATION - -/datum/gear/head/corporateberet/New() - ..() - var/list/options = list() - options += /obj/item/clothing/head/beret/pcrc - options += /obj/item/clothing/head/beret/saare - gear_tweaks += new/datum/gear_tweak/path/specified_types_list(options) diff --git a/code/modules/client/preference_setup/loadout/lists/misc.dm b/code/modules/client/preference_setup/loadout/lists/misc.dm deleted file mode 100644 index 923a3c4974ee2..0000000000000 --- a/code/modules/client/preference_setup/loadout/lists/misc.dm +++ /dev/null @@ -1,277 +0,0 @@ -/datum/gear/cane - display_name = "cane" - path = /obj/item/cane - -/datum/gear/union_card - display_name = "union membership" - path = /obj/item/card/union - -/datum/gear/union_card/spawn_on_mob(var/mob/living/carbon/human/H, var/metadata) - . = ..() - if(.) - var/obj/item/card/union/card = . - card.signed_by = H.real_name - -/datum/gear/dice - display_name = "dice pack" - path = /obj/item/storage/pill_bottle/dice - -/datum/gear/dice/nerd - display_name = "dice pack (gaming)" - path = /obj/item/storage/pill_bottle/dice_nerd - -/datum/gear/cards - display_name = "deck of cards" - path = /obj/item/deck/cards - -/datum/gear/tarot - display_name = "deck of tarot cards" - path = /obj/item/deck/tarot - -/datum/gear/holder - display_name = "card holder" - path = /obj/item/deck/holder - -/datum/gear/cardemon_pack - display_name = "Cardemon booster pack" - path = /obj/item/pack/cardemon - -/datum/gear/spaceball_pack - display_name = "Spaceball booster pack" - path = /obj/item/pack/spaceball - -/datum/gear/flask - display_name = "flask" - path = /obj/item/reagent_containers/food/drinks/flask/barflask - -/datum/gear/flask/New() - ..() - gear_tweaks += new/datum/gear_tweak/reagents(lunchables_ethanol_reagents()) - -/datum/gear/vacflask - display_name = "vacuum-flask" - path = /obj/item/reagent_containers/food/drinks/flask/vacuumflask - -/datum/gear/vacflask/New() - ..() - gear_tweaks += new/datum/gear_tweak/reagents(lunchables_drink_reagents()) - -/datum/gear/coffeecup - display_name = "coffee cup" - path = /obj/item/reagent_containers/food/drinks/glass2/coffeecup - flags = GEAR_HAS_TYPE_SELECTION - -/datum/gear/knives - display_name = "knives selection" - description = "A selection of knives." - path = /obj/item/material/knife - -/datum/gear/knives/New() - ..() - var/knives = list() - knives["Folding knife"] = /obj/item/material/knife/folding - knives["peasant folding knife"] = /obj/item/material/knife/folding/wood - knives["tactical folding knife"] = /obj/item/material/knife/folding/tacticool - knives["utility knife"] = /obj/item/material/knife/utility - knives["lightweight utility knife"] = /obj/item/material/knife/utility/lightweight - gear_tweaks += new/datum/gear_tweak/path(knives) - -/datum/gear/lunchbox - display_name = "lunchbox" - description = "A little lunchbox." - cost = 2 - path = /obj/item/storage/lunchbox - -/datum/gear/lunchbox/New() - ..() - var/list/lunchboxes = list() - for(var/lunchbox_type in typesof(/obj/item/storage/lunchbox)) - var/obj/item/storage/lunchbox/lunchbox = lunchbox_type - if(!initial(lunchbox.filled)) - lunchboxes[initial(lunchbox.name)] = lunchbox_type - gear_tweaks += new/datum/gear_tweak/path(lunchboxes) - gear_tweaks += new/datum/gear_tweak/contents(lunchables_lunches(), lunchables_snacks(), lunchables_drinks()) - -/datum/gear/towel - display_name = "towel" - path = /obj/item/towel - flags = GEAR_HAS_COLOR_SELECTION - -/datum/gear/plush_toy - display_name = "plush toy" - description = "A plush toy." - path = /obj/item/toy/plushie - -/datum/gear/plush_toy/New() - ..() - var/plushes = list() - plushes["diona nymph plush"] = /obj/item/toy/plushie/nymph - plushes["mouse plush"] = /obj/item/toy/plushie/mouse - plushes["kitten plush"] = /obj/item/toy/plushie/kitten - plushes["lizard plush"] = /obj/item/toy/plushie/lizard - plushes["spider plush"] = /obj/item/toy/plushie/spider - plushes["farwa plush"] = /obj/item/toy/plushie/farwa - gear_tweaks += new /datum/gear_tweak/path(plushes) - -/datum/gear/workvisa - display_name = "work visa" - description = "A work visa issued by the Sol Central Government for the purpose of work." - path = /obj/item/paper/workvisa - -/datum/gear/travelvisa - display_name = "travel visa" - description = "A travel visa issued by the Sol Central Government for the purpose of recreation." - path = /obj/item/paper/travelvisa - -/datum/gear/passport - display_name = "passports selection" - description = "A selection of passports." - cost = 0 - path = /obj/item/passport - flags = GEAR_HAS_SUBTYPE_SELECTION - custom_setup_proc = /obj/item/passport/proc/set_info - -/datum/gear/mirror - display_name = "handheld mirror" - sort_category = "Cosmetics" - path = /obj/item/mirror - -/datum/gear/lipstick - display_name = "lipstick selection" - path = /obj/item/lipstick - flags = GEAR_HAS_TYPE_SELECTION - -/datum/gear/comb - display_name = "plastic comb" - path = /obj/item/haircomb - flags = GEAR_HAS_COLOR_SELECTION - -/datum/gear/smokingpipe - display_name = "pipe, smoking" - path = /obj/item/clothing/mask/smokable/pipe - -/datum/gear/cornpipe - display_name = "pipe, corn" - path = /obj/item/clothing/mask/smokable/pipe/cobpipe - -/datum/gear/matchbook - display_name = "matchbook" - path = /obj/item/storage/box/matches - -/datum/gear/lighter - display_name = "cheap lighter" - path = /obj/item/flame/lighter - -/datum/gear/lighter/New() - ..() - var/colours = list() - colours["random"] = /obj/item/flame/lighter/random - colours["red"] = /obj/item/flame/lighter/red - colours["yellow"] = /obj/item/flame/lighter/yellow - colours["cyan"] = /obj/item/flame/lighter/cyan - colours["green"] = /obj/item/flame/lighter/green - colours["pink"] = /obj/item/flame/lighter/pink - gear_tweaks += new/datum/gear_tweak/path(colours) - -/datum/gear/zippo - display_name = "zippo" - path = /obj/item/flame/lighter/zippo - -/datum/gear/zippo/New() - ..() - var/colours = list() - colours["random"] = /obj/item/flame/lighter/zippo/random - colours["silver"] = /obj/item/flame/lighter/zippo - colours["blackened"] = /obj/item/flame/lighter/zippo/black - colours["gunmetal"] = /obj/item/flame/lighter/zippo/gunmetal - colours["bronze"] = /obj/item/flame/lighter/zippo/bronze - colours["pink"] = /obj/item/flame/lighter/zippo/pink - gear_tweaks += new/datum/gear_tweak/path(colours) - -/datum/gear/ashtray - display_name = "ashtray, plastic" - path = /obj/item/material/ashtray/plastic - -/datum/gear/cigscase - display_name = "fancy cigarette case" - path = /obj/item/storage/fancy/cigarettes/case - cost = 2 - -/datum/gear/cigars - display_name = "fancy cigar case" - path = /obj/item/storage/fancy/cigar - cost = 2 - -/datum/gear/cigar - display_name = "fancy cigar" - path = /obj/item/clothing/mask/smokable/cigarette/cigar - -/datum/gear/cigar/New() - ..() - var/cigar_type = list() - cigar_type["premium"] = /obj/item/clothing/mask/smokable/cigarette/cigar - cigar_type["Cohiba Robusto"] = /obj/item/clothing/mask/smokable/cigarette/cigar/cohiba - gear_tweaks += new/datum/gear_tweak/path(cigar_type) - -/datum/gear/ecig - display_name = "electronic cigarette" - path = /obj/item/clothing/mask/smokable/ecig/util - -/datum/gear/ecig/deluxe - display_name = "electronic cigarette, deluxe" - path = /obj/item/clothing/mask/smokable/ecig/deluxe - cost = 2 - -/datum/gear/bible - display_name = "holy book" - path = /obj/item/storage/bible - cost = 2 - -/datum/gear/bible/New() - ..() - var/books = list() - books["bible (adjustable)"] = /obj/item/storage/bible - books["Bible"] = /obj/item/storage/bible/bible - books["Tanakh"] = /obj/item/storage/bible/tanakh - books["Quran"] = /obj/item/storage/bible/quran - books["Kitab-i-Aqdas"] = /obj/item/storage/bible/aqdas - books["Kojiki"] = /obj/item/storage/bible/kojiki - books["Guru Granth Sahib"] = /obj/item/storage/bible/guru - gear_tweaks += new/datum/gear_tweak/path(books) - -/datum/gear/swiss - display_name = "multi-tool" - path = /obj/item/material/knife/folding/swiss - cost = 4 - flags = GEAR_HAS_COLOR_SELECTION - - -/datum/gear/cross - display_name = "cross" - path = /obj/item/material/cross - cost = 2 - -/datum/gear/cross/New() - ..() - var/crosstype = list() - crosstype["cross, wood"] = /obj/item/material/cross/wood - crosstype["cross, silver"] = /obj/item/material/cross/silver - crosstype["cross, gold"] = /obj/item/material/cross/gold - gear_tweaks += new/datum/gear_tweak/path(crosstype) - -/datum/gear/coin - display_name = "coin" - path = /obj/item/material/coin - cost = 2 - -/datum/gear/coin/New() - ..() - var/cointype = list() - cointype["coin, gold"] = /obj/item/material/coin/gold - cointype["coin, silver"] = /obj/item/material/coin/silver - cointype["coin, iron"] = /obj/item/material/coin/iron - cointype["coin, diamond"] = /obj/item/material/coin/diamond - cointype["coin, uranium"] = /obj/item/material/coin/uranium - cointype["coin, phoron"] = /obj/item/material/coin/phoron - cointype["coin, platinum"] = /obj/item/material/coin/platinum - gear_tweaks += new/datum/gear_tweak/path(cointype) diff --git a/code/modules/client/preference_setup/loadout/lists/storage.dm b/code/modules/client/preference_setup/loadout/lists/storage.dm deleted file mode 100644 index 960075a0b88d1..0000000000000 --- a/code/modules/client/preference_setup/loadout/lists/storage.dm +++ /dev/null @@ -1,80 +0,0 @@ -/datum/gear/storage - sort_category = "Storage Accessories" - category = /datum/gear/storage - slot = slot_tie - -/datum/gear/storage/vest - display_name = "webbing vest selection" - path = /obj/item/clothing/accessory/storage - cost = 3 - -/datum/gear/storage/vest/New() - ..() - var/vests = list() - vests += /obj/item/clothing/accessory/storage/black_vest - vests += /obj/item/clothing/accessory/storage/brown_vest - vests += /obj/item/clothing/accessory/storage/white_vest - gear_tweaks += new/datum/gear_tweak/path/specified_types_list(vests) - -/datum/gear/storage/pouches - display_name = "drop pouches selection" - path = /obj/item/clothing/accessory/storage - -/datum/gear/storage/pouches/New() - ..() - var/pouches = list() - pouches += /obj/item/clothing/accessory/storage/black_drop - pouches += /obj/item/clothing/accessory/storage/brown_drop - pouches += /obj/item/clothing/accessory/storage/white_drop - gear_tweaks += new/datum/gear_tweak/path/specified_types_list(pouches) - -/datum/gear/storage/belt - display_name = "storage belt selection" - path = /obj/item/storage/belt - slot = slot_belt - cost = 2 - -/datum/gear/storage/belt/New() - ..() - var/belts = list( - /obj/item/storage/belt/general, - /obj/item/storage/belt/utility - ) - gear_tweaks += new/datum/gear_tweak/path/specified_types_list(belts) - -/datum/gear/storage/webbing - display_name = "webbing, small" - path = /obj/item/clothing/accessory/storage/webbing - cost = 2 - -/datum/gear/storage/webbing_large - display_name = "webbing, large" - path = /obj/item/clothing/accessory/storage/webbing_large - cost = 3 - -/datum/gear/storage/bandolier - display_name = "bandolier" - path = /obj/item/clothing/accessory/storage/bandolier - cost = 3 - -/datum/gear/storage/waistpack - display_name = "waist pack" - path = /obj/item/storage/belt/waistpack - slot = slot_belt - cost = 2 - flags = GEAR_HAS_COLOR_SELECTION - -/datum/gear/storage/waistpack/big - display_name = "large waist pack" - path = /obj/item/storage/belt/waistpack/big - cost = 4 - -/datum/gear/accessory/wallet - display_name = "wallet, colour select" - path = /obj/item/storage/wallet - flags = GEAR_HAS_COLOR_SELECTION - -/datum/gear/accessory/wallet_poly - display_name = "wallet, polychromic" - path = /obj/item/storage/wallet/poly - cost = 2 diff --git a/code/modules/client/preference_setup/loadout/lists/suits.dm b/code/modules/client/preference_setup/loadout/lists/suits.dm deleted file mode 100644 index 10a4a617e8c5b..0000000000000 --- a/code/modules/client/preference_setup/loadout/lists/suits.dm +++ /dev/null @@ -1,173 +0,0 @@ -/datum/gear/suit - slot = slot_wear_suit - sort_category = "Suits and Overwear" - category = /datum/gear/suit - -/datum/gear/suit/poncho - display_name = "poncho selection" - path = /obj/item/clothing/suit/poncho/colored - cost = 1 - flags = GEAR_HAS_TYPE_SELECTION - -/datum/gear/suit/security_poncho - display_name = "poncho, security" - path = /obj/item/clothing/suit/poncho/roles/security - -/datum/gear/suit/medical_poncho - display_name = "poncho, medical" - path = /obj/item/clothing/suit/poncho/roles/medical - -/datum/gear/suit/engineering_poncho - display_name = "poncho, engineering" - path = /obj/item/clothing/suit/poncho/roles/engineering - -/datum/gear/suit/science_poncho - display_name = "poncho, science" - path = /obj/item/clothing/suit/poncho/roles/science - -/datum/gear/suit/nanotrasen_poncho - display_name = "poncho, NanoTrasen" - path = /obj/item/clothing/suit/poncho/roles/science/nanotrasen - -/datum/gear/suit/cargo_poncho - display_name = "poncho, supply" - path = /obj/item/clothing/suit/poncho/roles/cargo - -/datum/gear/suit/suit_jacket - display_name = "standard suit jackets" - path = /obj/item/clothing/suit/storage/toggle/suit - -/datum/gear/suit/suit_jacket/New() - ..() - var/suitjackets = list() - suitjackets += /obj/item/clothing/suit/storage/toggle/suit/black - suitjackets += /obj/item/clothing/suit/storage/toggle/suit/blue - suitjackets += /obj/item/clothing/suit/storage/toggle/suit/purple - gear_tweaks += new/datum/gear_tweak/path/specified_types_list(suitjackets) - -/datum/gear/suit/custom_suit_jacket - display_name = "suit jacket, colour select" - path = /obj/item/clothing/suit/storage/toggle/suit - flags = GEAR_HAS_COLOR_SELECTION - -/datum/gear/suit/custom_suit_jacket_double - display_name = "suit jacket (double-breasted), colour select" - path = /obj/item/clothing/suit/storage/toggle/suit_double - flags = GEAR_HAS_COLOR_SELECTION - -/datum/gear/suit/hazard - display_name = "hazard vests" - path = /obj/item/clothing/suit/storage/hazardvest - flags = GEAR_HAS_TYPE_SELECTION - -/datum/gear/suit/highvis - display_name = "high-visibility jacket" - path = /obj/item/clothing/suit/storage/toggle/highvis - -/datum/gear/suit/hoodie - display_name = "hoodie, colour select" - path = /obj/item/clothing/suit/storage/hooded/hoodie - flags = GEAR_HAS_COLOR_SELECTION - -/datum/gear/suit/hoodie_sel - display_name = "standard hoodies" - path = /obj/item/clothing/suit/storage/toggle/hoodie - -/datum/gear/suit/hoodie_sel/New() - ..() - var/hoodies = list() - hoodies += /obj/item/clothing/suit/storage/toggle/hoodie/cti - hoodies += /obj/item/clothing/suit/storage/toggle/hoodie/mu - hoodies += /obj/item/clothing/suit/storage/toggle/hoodie/nt - hoodies += /obj/item/clothing/suit/storage/toggle/hoodie/smw - gear_tweaks += new/datum/gear_tweak/path/specified_types_list(hoodies) - -/datum/gear/suit/labcoat - display_name = "labcoat, colour select" - path = /obj/item/clothing/suit/storage/toggle/labcoat - flags = GEAR_HAS_COLOR_SELECTION - -/datum/gear/suit/labcoat_blue - display_name = "blue trimmed labcoat" - path = /obj/item/clothing/suit/storage/toggle/labcoat/blue - -/datum/gear/suit/labcoat_corp - display_name = "labcoat, corporate colors" - path = /obj/item/clothing/suit/storage/toggle/labcoat/science - flags = GEAR_HAS_TYPE_SELECTION - -/datum/gear/suit/coat - display_name = "coat, colour select" - path = /obj/item/clothing/suit/storage/toggle/labcoat/coat - flags = GEAR_HAS_COLOR_SELECTION - -/datum/gear/suit/leather - display_name = "jacket selection" - path = /obj/item/clothing/suit - -/datum/gear/suit/leather/New() - ..() - var/jackets = list() - jackets += /obj/item/clothing/suit/storage/toggle/bomber - jackets += /obj/item/clothing/suit/storage/leather_jacket/nanotrasen - jackets += /obj/item/clothing/suit/storage/toggle/brown_jacket/nanotrasen - jackets += /obj/item/clothing/suit/storage/leather_jacket - jackets += /obj/item/clothing/suit/storage/toggle/brown_jacket - jackets += /obj/item/clothing/suit/storage/mbill - jackets += /obj/item/clothing/suit/storage/toggle/leather_hoodie - gear_tweaks += new/datum/gear_tweak/path/specified_types_list(jackets) - -/datum/gear/suit/wintercoat - display_name = "winter coat" - path = /obj/item/clothing/suit/storage/hooded/wintercoat - -/datum/gear/suit/wintercoat_dais - display_name = "winter coat, DAIS" - path = /obj/item/clothing/suit/storage/hooded/wintercoat/dais - -/datum/gear/suit/track - display_name = "track jacket selection" - path = /obj/item/clothing/suit/storage/toggle/track - flags = GEAR_HAS_TYPE_SELECTION - -/datum/gear/suit/blueapron - display_name = "apron, blue" - path = /obj/item/clothing/suit/apron - cost = 1 - -/datum/gear/suit/overalls - display_name = "apron, overalls" - path = /obj/item/clothing/suit/apron/overalls - cost = 1 - -/datum/gear/suit/medcoat - display_name = "medical suit selection" - path = /obj/item/clothing/suit - flags = GEAR_HAS_NO_CUSTOMIZATION - -/datum/gear/suit/medcoat/New() - ..() - gear_tweaks += new/datum/gear_tweak/path/specified_types_args(/obj/item/clothing/suit/storage/toggle/fr_jacket, /obj/item/clothing/suit/storage/toggle/fr_jacket/ems, /obj/item/clothing/suit/surgicalapron, /obj/item/clothing/suit/storage/toggle/fr_jacket/emrs) - -/datum/gear/suit/trenchcoat - display_name = "trenchcoat selection" - path = /obj/item/clothing/suit - cost = 3 - -/datum/gear/suit/trenchcoat/New() - ..() - var/trenchcoats = list() - trenchcoats += /obj/item/clothing/suit/storage/det_trench - trenchcoats += /obj/item/clothing/suit/storage/det_trench/grey - trenchcoats += /obj/item/clothing/suit/leathercoat - gear_tweaks += new/datum/gear_tweak/path/specified_types_list(trenchcoats) - - -/datum/gear/suit/pullover - display_name = "sweater, pullover" - path = /obj/item/clothing/suit/storage/pullover - - -/datum/gear/suit/zipper - display_name = "sweater, zip up" - path = /obj/item/clothing/suit/storage/toggle/zipper diff --git a/code/modules/client/preference_setup/loadout/lists/tactical.dm b/code/modules/client/preference_setup/loadout/lists/tactical.dm deleted file mode 100644 index 2872cf2d97380..0000000000000 --- a/code/modules/client/preference_setup/loadout/lists/tactical.dm +++ /dev/null @@ -1,77 +0,0 @@ -/datum/gear/tactical - sort_category = "Tactical Equipment" - category = /datum/gear/tactical - slot = slot_tie - -/datum/gear/tactical/helm_covers - display_name = "helmet covers" - path = /obj/item/clothing/accessory/helmet_cover - flags = GEAR_HAS_SUBTYPE_SELECTION - -/datum/gear/tactical/kneepads - display_name = "kneepads" - path = /obj/item/clothing/accessory/kneepads - -/datum/gear/tactical/holster - display_name = "holster selection" - path = /obj/item/clothing/accessory/storage/holster - cost = 3 - -/datum/gear/tactical/sheath - display_name = "machete sheath" - path = /obj/item/clothing/accessory/storage/holster/machete - -/datum/gear/tactical/knife_sheath - display_name = "knife sheath selection" - description = "A leg strapped knife sheath." - path = /obj/item/clothing/accessory/storage/holster/knife - flags = GEAR_HAS_TYPE_SELECTION - -/datum/gear/tactical/tacticool - display_name = "tacticool turtleneck" - path = /obj/item/clothing/under/syndicate/tacticool - slot = slot_w_uniform - -//proxima code start -/datum/gear/tactical/gorka - display_name = "gorka selection" - path = /obj/item/clothing/under/gorka - -/datum/gear/tactical/gorka/New() - ..() - var/gorka = list() - gorka["light gorka uniform"] = /obj/item/clothing/under/gorka - gorka["old gorka uniform"] = /obj/item/clothing/under/gorka/old - gorka["gorka camouflage uniform"] = /obj/item/clothing/under/gorka/ss - gorka["tan gorka uniform"] = /obj/item/clothing/under/gorka/tan - gear_tweaks += new/datum/gear_tweak/path(gorka) - -/datum/gear/tactical/gorka_jacket - display_name = "gorka jacket selection" - path = /obj/item/clothing/suit/storage/toggle/gorka_jacket - -/datum/gear/tactical/gorka_jacket/New() - ..() - var/gorka_jacket = list() - gorka_jacket["light gorka jacket"] = /obj/item/clothing/suit/storage/toggle/gorka_jacket - gorka_jacket["old gorka jacket"] = /obj/item/clothing/suit/storage/toggle/gorka_jacket/old - gorka_jacket["camouflage gorka jacket"] = /obj/item/clothing/suit/storage/toggle/gorka_jacket/ss - gorka_jacket["tan gorka jacket"] = /obj/item/clothing/suit/storage/toggle/gorka_jacket/tan - gear_tweaks += new/datum/gear_tweak/path(gorka_jacket) - -/datum/gear/tactical/bdu - display_name = "BDU selection" - path = /obj/item/clothing/under/bdu - -/datum/gear/tactical/bdu/New() - ..() - var/bdu = list() - bdu["bdu uniform"] = /obj/item/clothing/under/bdu - bdu["tan bdu uniform"] = /obj/item/clothing/under/bdu/tan - bdu["black bdu uniform"] = /obj/item/clothing/under/bdu/black - bdu["grey bdu uniform"] = /obj/item/clothing/under/bdu/grey - bdu["camo bdu uniform"] = /obj/item/clothing/under/bdu/camo - bdu["green-black bdu uniform"] = /obj/item/clothing/under/bdu/utt - gear_tweaks += new/datum/gear_tweak/path(bdu) - -//proxima code end diff --git a/code/modules/client/preference_setup/loadout/lists/uniforms.dm b/code/modules/client/preference_setup/loadout/lists/uniforms.dm deleted file mode 100644 index 5dd9577f910f1..0000000000000 --- a/code/modules/client/preference_setup/loadout/lists/uniforms.dm +++ /dev/null @@ -1,206 +0,0 @@ -/datum/gear/uniform - sort_category = "Uniforms and Casual Dress" - slot = slot_w_uniform - category = /datum/gear/uniform - -/datum/gear/uniform/jumpsuit - display_name = "jumpsuit, colour select" - path = /obj/item/clothing/under/color - flags = GEAR_HAS_COLOR_SELECTION - -/datum/gear/uniform/shortjumpskirt - display_name = "short jumpskirt, colour select" - path = /obj/item/clothing/under/shortjumpskirt - flags = GEAR_HAS_COLOR_SELECTION - -/datum/gear/uniform/blackjumpshorts - display_name = "black jumpsuit shorts" - path = /obj/item/clothing/under/color/blackjumpshorts - -/datum/gear/uniform/roboticist_skirt - display_name = "skirt, roboticist" - path = /obj/item/clothing/under/rank/roboticist/skirt - -/datum/gear/uniform/suit - display_name = "clothes selection" - path = /obj/item/clothing/under - -/datum/gear/uniform/suit/New() - ..() - var/suits = list() - suits += /obj/item/clothing/under/sl_suit - suits += /obj/item/clothing/under/suit_jacket - suits += /obj/item/clothing/under/lawyer/blue - suits += /obj/item/clothing/under/suit_jacket/burgundy - suits += /obj/item/clothing/under/suit_jacket/charcoal - suits += /obj/item/clothing/under/suit_jacket/checkered - suits += /obj/item/clothing/under/suit_jacket/really_black - suits += /obj/item/clothing/under/suit_jacket/female - suits += /obj/item/clothing/under/gentlesuit - suits += /obj/item/clothing/under/suit_jacket/navy - suits += /obj/item/clothing/under/lawyer/oldman - suits += /obj/item/clothing/under/lawyer/purpsuit - suits += /obj/item/clothing/under/suit_jacket/red - suits += /obj/item/clothing/under/lawyer/red - suits += /obj/item/clothing/under/lawyer/black - suits += /obj/item/clothing/under/suit_jacket/tan - suits += /obj/item/clothing/under/scratch - suits += /obj/item/clothing/under/lawyer/bluesuit - suits += /obj/item/clothing/under/rank/internalaffairs/plain - suits += /obj/item/clothing/under/blazer - suits += /obj/item/clothing/under/blackjumpskirt - suits += /obj/item/clothing/under/kilt - suits += /obj/item/clothing/under/dress/dress_hr - suits += /obj/item/clothing/under/det - suits += /obj/item/clothing/under/det/black - suits += /obj/item/clothing/under/det/grey - gear_tweaks += new/datum/gear_tweak/path/specified_types_list(suits) - -/datum/gear/uniform/scrubs - display_name = "standard medical scrubs" - path = /obj/item/clothing/under/rank/medical/scrubs - flags = GEAR_HAS_TYPE_SELECTION - -/datum/gear/uniform/scrubs/custom - display_name = "scrubs, colour select" - flags = GEAR_HAS_COLOR_SELECTION - -/datum/gear/uniform/dress - display_name = "dress selection" - path = /obj/item/clothing/under - -/datum/gear/uniform/dress/New() - ..() - var/dresses = list() - dresses += /obj/item/clothing/under/sundress_white - dresses += /obj/item/clothing/under/dress/dress_fire - dresses += /obj/item/clothing/under/dress/dress_green - dresses += /obj/item/clothing/under/dress/dress_orange - dresses += /obj/item/clothing/under/dress/dress_pink - dresses += /obj/item/clothing/under/dress/dress_purple - dresses += /obj/item/clothing/under/sundress - gear_tweaks += new/datum/gear_tweak/path/specified_types_list(dresses) - -/datum/gear/uniform/cheongsam - display_name = "cheongsam, colour select" - path = /obj/item/clothing/under/cheongsam - flags = GEAR_HAS_COLOR_SELECTION - -/datum/gear/uniform/abaya - display_name = "abaya, colour select" - path = /obj/item/clothing/under/abaya - flags = GEAR_HAS_COLOR_SELECTION - -/datum/gear/uniform/skirt - display_name = "skirt selection" - path = /obj/item/clothing/under/skirt - flags = GEAR_HAS_TYPE_SELECTION - -/datum/gear/uniform/skirt_c - display_name = "short skirt, colour select" - path = /obj/item/clothing/under/skirt_c - flags = GEAR_HAS_COLOR_SELECTION - -/datum/gear/uniform/skirt_c/dress - display_name = "simple dress, colour select" - path = /obj/item/clothing/under/skirt_c/dress - flags = GEAR_HAS_COLOR_SELECTION - -/datum/gear/uniform/casual_pants - display_name = "casual pants selection" - path = /obj/item/clothing/under/casual_pants - flags = GEAR_HAS_TYPE_SELECTION - -/datum/gear/uniform/formal_pants - display_name = "formal pants selection" - path = /obj/item/clothing/under/formal_pants - flags = GEAR_HAS_TYPE_SELECTION - -/datum/gear/uniform/formal_pants/custom - display_name = "suit pants, colour select" - path = /obj/item/clothing/under/formal_pants - flags = GEAR_HAS_COLOR_SELECTION - -/datum/gear/uniform/formal_pants/baggycustom - display_name = "baggy suit pants, colour select" - path = /obj/item/clothing/under/formal_pants/baggy - flags = GEAR_HAS_COLOR_SELECTION - -/datum/gear/uniform/shorts - display_name = "shorts selection" - path = /obj/item/clothing/under/shorts/jeans - flags = GEAR_HAS_TYPE_SELECTION - -/datum/gear/uniform/shorts/custom - display_name = "athletic shorts, colour select" - path = /obj/item/clothing/under/shorts - flags = GEAR_HAS_COLOR_SELECTION - -/datum/gear/uniform/turtleneck - display_name = "sweater, colour select" - path = /obj/item/clothing/under/rank/psych/turtleneck/sweater - flags = GEAR_HAS_COLOR_SELECTION - -/datum/gear/uniform/kimono - display_name = "kimono, colour select" - path = /obj/item/clothing/under/kimono - flags = GEAR_HAS_COLOR_SELECTION - -/datum/gear/uniform/corporate - display_name = "corporate uniform selection" - path = /obj/item/clothing/under - allowed_branches = list(/datum/mil_branch/civilian) - -/datum/gear/uniform/corporate/New() - ..() - var/corps = list() - corps += /obj/item/clothing/under/rank/scientist/nanotrasen - corps += /obj/item/clothing/under/rank/scientist/heph - corps += /obj/item/clothing/under/rank/scientist/zeng - corps += /obj/item/clothing/under/mbill - corps += /obj/item/clothing/under/saare - corps += /obj/item/clothing/under/aether - corps += /obj/item/clothing/under/hephaestus - corps += /obj/item/clothing/under/pcrc - corps += /obj/item/clothing/under/pcrcsuit - corps += /obj/item/clothing/under/wardt - corps += /obj/item/clothing/under/grayson - corps += /obj/item/clothing/under/focal - corps += /obj/item/clothing/under/rank/ntwork - corps += /obj/item/clothing/under/morpheus - corps += /obj/item/clothing/under/skinner - corps += /obj/item/clothing/under/dais - gear_tweaks += new/datum/gear_tweak/path/specified_types_list(corps) - -/datum/gear/uniform/corp_exec - display_name = "corporate colours, senior researcher" - path = /obj/item/clothing/under/rank/scientist/executive - flags = GEAR_HAS_TYPE_SELECTION - -/datum/gear/uniform/corp_overalls - display_name = "corporate colours, coveralls" - path = /obj/item/clothing/under/rank/ntwork - flags = GEAR_HAS_TYPE_SELECTION - -/datum/gear/uniform/corp_flight - display_name = "corporate colours, flight suit" - path = /obj/item/clothing/under/rank/ntpilot - flags = GEAR_HAS_TYPE_SELECTION - -/datum/gear/uniform/corp_exec_jacket - display_name = "corporate colours, liason suit" - path = /obj/item/clothing/under/suit_jacket/corp - flags = GEAR_HAS_TYPE_SELECTION - -/datum/gear/uniform/sterile - display_name = "sterile jumpsuit" - path = /obj/item/clothing/under/sterile - flags = GEAR_HAS_TYPE_SELECTION - -/datum/gear/uniform/hazard - display_name = "hazard jumpsuit" - path = /obj/item/clothing/under/hazard - -/datum/gear/uniform/frontier - display_name = "frontier clothes" - path = /obj/item/clothing/under/frontier diff --git a/code/modules/client/preference_setup/loadout/lists/utility.dm b/code/modules/client/preference_setup/loadout/lists/utility.dm deleted file mode 100644 index 14b975304bdcf..0000000000000 --- a/code/modules/client/preference_setup/loadout/lists/utility.dm +++ /dev/null @@ -1,152 +0,0 @@ -// "Useful" items - I'm guessing things that might be used at work? -/datum/gear/utility - sort_category = "Utility" - category = /datum/gear/utility - -/datum/gear/utility/briefcase - display_name = "briefcase" - path = /obj/item/storage/briefcase - -/datum/gear/utility/clipboard - display_name = "clipboard" - path = /obj/item/material/clipboard - -/datum/gear/utility/folder - display_name = "folders" - path = /obj/item/folder - -/datum/gear/utility/taperecorder - display_name = "tape recorder" - path = /obj/item/device/taperecorder - -/datum/gear/utility/folder/New() - ..() - var/folders = list() - folders["blue folder"] = /obj/item/folder/blue - folders["grey folder"] = /obj/item/folder - folders["red folder"] = /obj/item/folder/red - folders["white folder"] = /obj/item/folder/white - folders["yellow folder"] = /obj/item/folder/yellow - gear_tweaks += new/datum/gear_tweak/path(folders) - -/datum/gear/utility/paicard - display_name = "personal AI device" - path = /obj/item/device/paicard - -/datum/gear/utility/camera - display_name = "camera" - path = /obj/item/device/camera - -/datum/gear/utility/photo_album - display_name = "photo album" - path = /obj/item/storage/photo_album - -/datum/gear/utility/film_roll - display_name = "film roll" - path = /obj/item/device/camera_film - -/datum/gear/accessory/stethoscope - display_name = "stethoscope (medical)" - path = /obj/item/clothing/accessory/stethoscope - cost = 2 - -/datum/gear/utility/pen - display_name = "Multicolored Pen" - path = /obj/item/pen/multi - cost = 2 - -/datum/gear/utility/fancy - display_name = "Fancy Pen" - path = /obj/item/pen/fancy - cost = 2 - -/datum/gear/utility/hand_labeler - display_name = "hand labeler" - path = /obj/item/hand_labeler - cost = 3 - -/**************** -modular computers -****************/ - -/datum/gear/utility/cheaptablet - display_name = "tablet computer, cheap" - path = /obj/item/modular_computer/tablet/preset/custom_loadout/cheap - cost = 3 - -/datum/gear/utility/normaltablet - display_name = "tablet computer, advanced" - path = /obj/item/modular_computer/tablet/preset/custom_loadout/advanced - cost = 4 - -/datum/gear/utility/customtablet - display_name = "tablet computer, custom" - path = /obj/item/modular_computer/tablet - cost = 4 - -/datum/gear/utility/customtablet/New() - ..() - gear_tweaks += new /datum/gear_tweak/tablet() - -/datum/gear/utility/cheaplaptop - display_name = "laptop computer, cheap" - path = /obj/item/modular_computer/laptop/preset/custom_loadout/cheap - cost = 5 - -/datum/gear/utility/normallaptop - display_name = "laptop computer, advanced" - path = /obj/item/modular_computer/laptop/preset/custom_loadout/advanced - cost = 6 - -/datum/gear/utility/wrist_computer - display_name = "Wrist computer selection" - path = /obj/item/modular_computer/pda/wrist - cost = 2 - -/datum/gear/utility/wrist_computer/New() - ..() - var/wcomp = list() - wcomp["black"] = /obj/item/modular_computer/pda/wrist/ - wcomp["lightgrey"] = /obj/item/modular_computer/pda/wrist/grey - wcomp["black-red (sec)"] = /obj/item/modular_computer/pda/wrist/security - wcomp["brown (sup)"] = /obj/item/modular_computer/pda/wrist/cargo - wcomp["yellow (eng)"] = /obj/item/modular_computer/pda/wrist/engineering - wcomp["navy (heads)"] = /obj/item/modular_computer/pda/wrist/heads - wcomp["navy-red (hos)"] = /obj/item/modular_computer/pda/wrist/heads/hos - wcomp["navy-gold (capt)"] = /obj/item/modular_computer/pda/wrist/captain - wcomp["navy-blue (cmo)"] = /obj/item/modular_computer/pda/wrist/heads/cmo - wcomp["navy-white (hop)"] = /obj/item/modular_computer/pda/wrist/heads/hop - wcomp["navy-yellow (ce)"] = /obj/item/modular_computer/pda/wrist/heads/ce - wcomp["navy-darkgreen (rd)"] = /obj/item/modular_computer/pda/wrist/heads/rd - wcomp["blue (med)"] = /obj/item/modular_computer/pda/wrist/medical - wcomp["purple (exp)"] = /obj/item/modular_computer/pda/wrist/explorer - wcomp["lightgrey-darkgreen (sci)"] = /obj/item/modular_computer/pda/wrist/science - wcomp["lightgrey-yellowblue (robot)"]= /obj/item/modular_computer/pda/wrist/roboticist - wcomp["black (mercs)"] = /obj/item/modular_computer/pda/wrist/syndicate - wcomp["short (lightgrey)"] = /obj/item/modular_computer/pda/wrist/lila - wcomp["short (black)"] = /obj/item/modular_computer/pda/wrist/lila/black - gear_tweaks += new/datum/gear_tweak/path(wcomp) - -/datum/gear/utility/musical_instrument - display_name = "Musical instrument selection" - path = /obj/item/device/synthesized_instrument - cost = 1 - -/datum/gear/utility/musical_instrument/New() - ..() - var/inst = list() - inst["guitar"] = /obj/item/device/synthesized_instrument/guitar - inst["polyguitar"] = /obj/item/device/synthesized_instrument/guitar/multi - inst["syntesizer"] = /obj/item/device/synthesized_instrument/synthesizer - inst["trumpet"] = /obj/item/device/synthesized_instrument/trumpet - inst["violin"] = /obj/item/device/synthesized_instrument/violin - gear_tweaks += new/datum/gear_tweak/path(inst) - -/**************** -Pouches and kits -****************/ - -/datum/gear/utility/pencilcase - display_name = "Pencil case" - path = /obj/item/storage/fancy/pencilcase - cost = 2 diff --git a/code/modules/client/preference_setup/loadout/lists/xenowear.dm b/code/modules/client/preference_setup/loadout/lists/xenowear.dm deleted file mode 100644 index 1a53a3c4ce894..0000000000000 --- a/code/modules/client/preference_setup/loadout/lists/xenowear.dm +++ /dev/null @@ -1,169 +0,0 @@ -// Alien clothing. - -// Unathi clothing -/datum/gear/suit/unathi - sort_category = "Xenowear" - category = /datum/gear/suit/unathi - whitelisted = list(SPECIES_UNATHI, SPECIES_YEOSA) - -/datum/gear/suit/unathi/mantle - display_name = "hide mantle (Unathi)" - path = /obj/item/clothing/suit/unathi/mantle - cost = 1 - -/datum/gear/suit/unathi/robe - display_name = "roughspun robe (Unathi)" - path = /obj/item/clothing/suit/unathi/robe - cost = 1 - -/datum/gear/suit/unathi/knifeharness - display_name = "decorated harness" - path = /obj/item/clothing/accessory/storage/knifeharness - cost = 5 - -/datum/gear/suit/unathi/savage_hunter - display_name = "savage hunter hides (Male, Unathi)" - path = /obj/item/clothing/under/savage_hunter - slot = slot_w_uniform - cost = 2 - -/datum/gear/suit/unathi/savage_hunter/female - display_name = "savage hunter hides (Female, Unathi)" - path = /obj/item/clothing/under/savage_hunter/female - slot = slot_w_uniform - cost = 2 - -//Skrell Chains -/datum/gear/ears/skrell - sort_category = "Xenowear" - category = /datum/gear/ears/skrell - whitelisted = list(SPECIES_SKRELL) - -/datum/gear/ears/skrell/chains - display_name = "headtail chain selection (Skrell)" - path = /obj/item/clothing/ears/skrell/chain - flags = GEAR_HAS_SUBTYPE_SELECTION - -/datum/gear/ears/skrell/colored/chain - display_name = "colored headtail chain, colour select (Skrell)" - path = /obj/item/clothing/ears/skrell/colored/chain - flags = GEAR_HAS_COLOR_SELECTION - -//Skrell Bands -/datum/gear/ears/skrell/bands - display_name = "headtail band selection (Skrell)" - path = /obj/item/clothing/ears/skrell/band - flags = GEAR_HAS_SUBTYPE_SELECTION - -/datum/gear/ears/skrell/colored/band - display_name = "headtail bands, colour select (Skrell)" - path = /obj/item/clothing/ears/skrell/colored/band - flags = GEAR_HAS_COLOR_SELECTION - -//Skrell Cloth -/datum/gear/ears/skrell/cloth/male - display_name = "male headtail cloth (Skrell)" - path = /obj/item/clothing/ears/skrell/cloth_male - flags = GEAR_HAS_COLOR_SELECTION - - -/datum/gear/ears/skrell/cloth/female - display_name = "female headtail cloth (Skrell)" - path = /obj/item/clothing/ears/skrell/cloth_female - flags = GEAR_HAS_COLOR_SELECTION - -/datum/gear/head/skrell_helmet - display_name = "Skrellian helmet" - path = /obj/item/clothing/head/helmet/skrell - whitelisted = list(SPECIES_SKRELL) - sort_category = "Xenowear" - allowed_roles = list(/datum/job/hos, /datum/job/warden, /datum/job/officer, /datum/job/detective) - -/datum/gear/accessory/skrell_badge - display_name = "skrellian SDTF badge" - path = /obj/item/clothing/accessory/badge/tags/skrell - whitelisted = list(SPECIES_SKRELL) - sort_category = "Xenowear" - -// IPC clothing -/datum/gear/ipc_monitor - display_name = "display monitor (IPC)" - path = /obj/item/clothing/mask/monitor - sort_category = "Xenowear" - whitelisted = list(SPECIES_IPC) - cost = 0 - -/datum/gear/suit/lab_xyn_machine - display_name = "Xynergy labcoat" - path = /obj/item/clothing/suit/storage/toggle/labcoat/xyn_machine - slot = slot_wear_suit - sort_category = "Xenowear" - whitelisted = list(SPECIES_IPC, SPECIES_SHELL) - -// Misc clothing -/datum/gear/uniform/harness - display_name = "gear harness (Full Body Prosthetic, Diona, Giant Armoured Serpentid)" - path = /obj/item/clothing/under/harness - sort_category = "Xenowear" - whitelisted = list(SPECIES_IPC,SPECIES_DIONA, SPECIES_NABBER) - -/datum/gear/shoes/toeless - display_name = "toeless jackboots" - path = /obj/item/clothing/shoes/jackboots/unathi - sort_category = "Xenowear" - -/datum/gear/shoes/wrk_toeless - display_name = "toeless workboots" - path = /obj/item/clothing/shoes/workboots/toeless - sort_category = "Xenowear" - -// Pre-modified gloves - -/datum/gear/gloves/colored/modified - display_name = "modified gloves, colored" - path = /obj/item/clothing/gloves/color/modified - sort_category = "Xenowear" - whitelisted = list(SPECIES_UNATHI, SPECIES_YEOSA) - -/datum/gear/gloves/latex/modified - display_name = "modified gloves, latex" - path = /obj/item/clothing/gloves/latex/modified - sort_category = "Xenowear" - whitelisted = list(SPECIES_UNATHI, SPECIES_YEOSA) - -/datum/gear/gloves/nitrile/modified - display_name = "modified gloves, nitrile" - path = /obj/item/clothing/gloves/latex/nitrile/modified - sort_category = "Xenowear" - whitelisted = list(SPECIES_UNATHI, SPECIES_YEOSA) - -/datum/gear/gloves/rainbow/modified - display_name = "modified gloves, rainbow" - path = /obj/item/clothing/gloves/rainbow/modified - sort_category = "Xenowear" - whitelisted = list(SPECIES_UNATHI, SPECIES_YEOSA) - -/datum/gear/gloves/evening/modified - display_name = "modified gloves, evening" - path = /obj/item/clothing/gloves/color/evening/modified - sort_category = "Xenowear" - whitelisted = list(SPECIES_UNATHI, SPECIES_YEOSA) - -/datum/gear/gloves/botany/modified - display_name = "modified gloves, botany" - path = /obj/item/clothing/gloves/thick/botany/modified - sort_category = "Xenowear" - whitelisted = list(SPECIES_UNATHI, SPECIES_YEOSA) - -/datum/gear/gloves/work/modified - display_name = "modified gloves, work" - path = /obj/item/clothing/gloves/thick/modified - sort_category = "Xenowear" - whitelisted = list(SPECIES_UNATHI, SPECIES_YEOSA) - -// Vox clothing -/datum/gear/vox_mask - display_name = "vox breathing mask" - path = /obj/item/clothing/mask/gas/vox - sort_category = "Xenowear" - whitelisted = list(SPECIES_VOX, SPECIES_VOX_ARMALIS) diff --git a/code/modules/client/preference_setup/loadout/loadout.dm b/code/modules/client/preference_setup/loadout/loadout.dm deleted file mode 100644 index 5fe806af535c5..0000000000000 --- a/code/modules/client/preference_setup/loadout/loadout.dm +++ /dev/null @@ -1,408 +0,0 @@ -var/global/list/loadout_categories = list() -var/global/list/gear_datums = list() - -/datum/preferences - var/list/gear_list //Custom/fluff item loadouts. - var/gear_slot = 1 //The current gear save slot - -/datum/preferences/proc/Gear() - return gear_list[gear_slot] - -/datum/loadout_category - var/category = "" - var/list/gear = list() - -/datum/loadout_category/New(var/cat) - category = cat - ..() - -/hook/startup/proc/populate_gear_list() - - //create a list of gear datums to sort - for(var/geartype in typesof(/datum/gear)-/datum/gear) - var/datum/gear/G = geartype - if(initial(G.category) == geartype) - continue - if(GLOB.using_map.loadout_blacklist && (geartype in GLOB.using_map.loadout_blacklist)) - continue - - var/use_name = initial(G.display_name) - var/use_category = initial(G.sort_category) - - if(!loadout_categories[use_category]) - loadout_categories[use_category] = new /datum/loadout_category(use_category) - var/datum/loadout_category/LC = loadout_categories[use_category] - gear_datums[use_name] = new geartype - LC.gear[use_name] = gear_datums[use_name] - - loadout_categories = sortAssoc(loadout_categories) - for(var/loadout_category in loadout_categories) - var/datum/loadout_category/LC = loadout_categories[loadout_category] - LC.gear = sortAssoc(LC.gear) - return 1 - -/datum/category_item/player_setup_item/loadout - name = "Loadout" - sort_order = 1 - var/current_tab = "General" - var/hide_unavailable_gear = 0 - -/datum/category_item/player_setup_item/loadout/load_character(datum/pref_record_reader/R) - pref.gear_list = R.read("gear_list") - pref.gear_slot = R.read("gear_slot") - -/datum/category_item/player_setup_item/loadout/save_character(datum/pref_record_writer/W) - W.write("gear_list", pref.gear_list) - W.write("gear_slot", pref.gear_slot) - -/datum/category_item/player_setup_item/loadout/proc/valid_gear_choices(var/max_cost) - . = list() - var/mob/preference_mob = preference_mob() - for(var/gear_name in gear_datums) - var/datum/gear/G = gear_datums[gear_name] - var/okay = 1 - if(G.whitelisted && preference_mob) - okay = 0 - for(var/species in G.whitelisted) - if(is_species_whitelisted(preference_mob, species)) - okay = 1 - break - if(!okay) - continue - if(max_cost && G.cost > max_cost) - continue - . += gear_name - -/datum/category_item/player_setup_item/loadout/proc/skill_check(var/list/jobs, var/list/skills_required) - for(var/datum/job/J in jobs) - . = TRUE - for(var/R in skills_required) - if(pref.get_total_skill_value(J, R) < skills_required[R]) - . = FALSE - break - if(.) - return - -/datum/category_item/player_setup_item/loadout/sanitize_character() - pref.gear_slot = sanitize_integer(pref.gear_slot, 1, config.loadout_slots, initial(pref.gear_slot)) - if(!islist(pref.gear_list)) pref.gear_list = list() - - if(pref.gear_list.len < config.loadout_slots) - pref.gear_list.len = config.loadout_slots - - for(var/index = 1 to config.loadout_slots) - var/list/gears = pref.gear_list[index] - - if(istype(gears)) - for(var/gear_name in gears) - if(!(gear_name in gear_datums)) - gears -= gear_name - - var/total_cost = 0 - for(var/gear_name in gears) - if(!gear_datums[gear_name]) - gears -= gear_name - else if(!(gear_name in valid_gear_choices())) - gears -= gear_name - else - var/datum/gear/G = gear_datums[gear_name] - if(total_cost + G.cost > config.max_gear_cost) - gears -= gear_name - else - total_cost += G.cost - else - pref.gear_list[index] = list() - -/datum/category_item/player_setup_item/loadout/content() - . = list() - var/total_cost = 0 - var/list/gears = pref.gear_list[pref.gear_slot] - for(var/i = 1; i <= gears.len; i++) - var/datum/gear/G = gear_datums[gears[i]] - if(G) - total_cost += G.cost - - var/fcolor = "#3366cc" - if(total_cost < config.max_gear_cost) - fcolor = "#e67300" - . += "" - . += "" - - . += "" - - var/datum/loadout_category/LC = loadout_categories[current_tab] - . += "" - . += "" - . += "" - var/jobs = list() - for(var/job_title in (pref.job_medium|pref.job_low|pref.job_high)) - var/datum/job/J = SSjobs.get_by_title(job_title) - if(J) - dd_insertObjectList(jobs, J) - for(var/gear_name in LC.gear) - if(!(gear_name in valid_gear_choices())) - continue - var/list/entry = list() - var/datum/gear/G = LC.gear[gear_name] - var/ticked = (G.display_name in pref.gear_list[pref.gear_slot]) - entry += "" - entry += "" - entry += "" - if(ticked) - entry += "" - if(!hide_unavailable_gear || allowed || ticked) - . += entry - . += "
              " - . += "\<=\[[pref.gear_slot]\] =\>" - - if(config.max_gear_cost < INFINITY) - . += "[total_cost]/[config.max_gear_cost] loadout points spent." - - . += "Clear Loadout" - . += "[hide_unavailable_gear ? "Show all" : "Hide unavailable"]
              " - var/firstcat = 1 - for(var/category in loadout_categories) - - if(firstcat) - firstcat = 0 - else - . += " |" - - var/datum/loadout_category/LC = loadout_categories[category] - var/category_cost = 0 - for(var/gear in LC.gear) - if(gear in pref.gear_list[pref.gear_slot]) - var/datum/gear/G = LC.gear[gear] - category_cost += G.cost - - if(category == current_tab) - . += " [category] - [category_cost] " - else - if(category_cost) - . += " [category] - [category_cost] " - else - . += " [category] - 0 " - - . += "

              [LC.category]

              [G.display_name][G.cost][G.get_description(get_gear_metadata(G,1))]" - var/allowed = 1 - if(allowed && G.allowed_roles) - var/good_job = 0 - var/bad_job = 0 - entry += "
              " - var/list/jobchecks = list() - for(var/datum/job/J in jobs) - if(J.type in G.allowed_roles) - jobchecks += "[J.title]" - good_job = 1 - else - jobchecks += "[J.title]" - bad_job = 1 - allowed = good_job || !bad_job - entry += "[english_list(jobchecks)]" - - if(allowed && G.allowed_branches) - var/list/branches = list() - for(var/datum/job/J in jobs) - if(pref.branches[J.title]) - branches |= pref.branches[J.title] - if(length(branches)) - var/list/branch_checks = list() - var/good_branch = 0 - entry += "
              " - for(var/branch in branches) - var/datum/mil_branch/player_branch = GLOB.mil_branches.get_branch(branch) - if(player_branch.type in G.allowed_branches) - branch_checks += "[player_branch.name]" - good_branch = 1 - else - branch_checks += "[player_branch.name]" - allowed = good_branch - - entry += "[english_list(branch_checks)]" - - if(allowed && G.allowed_skills) - var/list/skills_required = list()//make it into instances? instead of path - for(var/skill in G.allowed_skills) - var/decl/hierarchy/skill/instance = decls_repository.get_decl(skill) - skills_required[instance] = G.allowed_skills[skill] - - allowed = skill_check(jobs, skills_required)//Checks if a single job has all the skills required - - entry += "
              " - var/list/skill_checks = list() - for(var/R in skills_required) - var/decl/hierarchy/skill/S = R - var/skill_entry - skill_entry += "[S.levels[skills_required[R]]]" - if(allowed) - skill_entry = "[skill_entry] [R]" - else - skill_entry = "[skill_entry] [R]" - skill_checks += skill_entry - - entry += "[english_list(skill_checks)]" - - entry += "
              " - for(var/datum/gear_tweak/tweak in G.gear_tweaks) - var/contents = tweak.get_contents(get_tweak_metadata(G, tweak)) - if(contents) - entry += " [contents]" - entry += "
              " - . = jointext(.,null) - -/datum/category_item/player_setup_item/loadout/proc/get_gear_metadata(var/datum/gear/G, var/readonly) - var/list/gear = pref.gear_list[pref.gear_slot] - . = gear[G.display_name] - if(!.) - . = list() - if(!readonly) - gear[G.display_name] = . - -/datum/category_item/player_setup_item/loadout/proc/get_tweak_metadata(var/datum/gear/G, var/datum/gear_tweak/tweak) - var/list/metadata = get_gear_metadata(G) - . = metadata["[tweak]"] - if(!.) - . = tweak.get_default() - metadata["[tweak]"] = . - -/datum/category_item/player_setup_item/loadout/proc/set_tweak_metadata(var/datum/gear/G, var/datum/gear_tweak/tweak, var/new_metadata) - var/list/metadata = get_gear_metadata(G) - metadata["[tweak]"] = new_metadata - -/datum/category_item/player_setup_item/loadout/OnTopic(href, href_list, user) - if(href_list["toggle_gear"]) - var/datum/gear/TG = locate(href_list["toggle_gear"]) - if(!istype(TG) || gear_datums[TG.display_name] != TG) - return TOPIC_REFRESH - if(TG.display_name in pref.gear_list[pref.gear_slot]) - pref.gear_list[pref.gear_slot] -= TG.display_name - else - var/total_cost = 0 - for(var/gear_name in pref.gear_list[pref.gear_slot]) - var/datum/gear/G = gear_datums[gear_name] - if(istype(G)) total_cost += G.cost - if((total_cost+TG.cost) <= config.max_gear_cost) - pref.gear_list[pref.gear_slot] += TG.display_name - return TOPIC_REFRESH_UPDATE_PREVIEW - if(href_list["gear"] && href_list["tweak"]) - var/datum/gear/gear = locate(href_list["gear"]) - var/datum/gear_tweak/tweak = locate(href_list["tweak"]) - if(!tweak || !istype(gear) || !(tweak in gear.gear_tweaks) || gear_datums[gear.display_name] != gear) - return TOPIC_NOACTION - var/metadata = tweak.get_metadata(user, get_tweak_metadata(gear, tweak)) - if(!metadata || !CanUseTopic(user)) - return TOPIC_NOACTION - set_tweak_metadata(gear, tweak, metadata) - return TOPIC_REFRESH_UPDATE_PREVIEW - if(href_list["next_slot"]) - pref.gear_slot = pref.gear_slot+1 - if(pref.gear_slot > config.loadout_slots) - pref.gear_slot = 1 - return TOPIC_REFRESH_UPDATE_PREVIEW - if(href_list["prev_slot"]) - pref.gear_slot = pref.gear_slot-1 - if(pref.gear_slot < 1) - pref.gear_slot = config.loadout_slots - return TOPIC_REFRESH_UPDATE_PREVIEW - if(href_list["select_category"]) - current_tab = href_list["select_category"] - return TOPIC_REFRESH - if(href_list["clear_loadout"]) - var/list/gear = pref.gear_list[pref.gear_slot] - gear.Cut() - return TOPIC_REFRESH_UPDATE_PREVIEW - if(href_list["toggle_hiding"]) - hide_unavailable_gear = !hide_unavailable_gear - return TOPIC_REFRESH - return ..() - -/datum/gear - var/display_name //Name/index. Must be unique. - var/description //Description of this gear. If left blank will default to the description of the pathed item. - var/path //Path to item. - var/cost = 1 //Number of points used. Items in general cost 1 point, storage/armor/gloves/special use costs 2 points. - var/slot //Slot to equip to. - var/list/allowed_roles //Roles that can spawn with this item. - var/list/allowed_branches //Service branches that can spawn with it. - var/list/allowed_skills //Skills required to spawn with this item. - var/whitelisted //Term to check the whitelist for.. - var/sort_category = "General" - var/flags //Special tweaks in New - var/custom_setup_proc //Special tweak in New - var/category - var/list/gear_tweaks = list() //List of datums which will alter the item after it has been spawned. - -/datum/gear/New() - if(HAS_FLAGS(flags, GEAR_HAS_TYPE_SELECTION|GEAR_HAS_SUBTYPE_SELECTION)) - CRASH("May not have both type and subtype selection tweaks") - if(!description) - var/obj/O = path - description = initial(O.desc) - if(flags & GEAR_HAS_COLOR_SELECTION) - gear_tweaks += gear_tweak_free_color_choice() - if(!(flags & GEAR_HAS_NO_CUSTOMIZATION)) - gear_tweaks += gear_tweak_free_name(display_name) - gear_tweaks += gear_tweak_free_desc(description) - if(flags & GEAR_HAS_TYPE_SELECTION) - gear_tweaks += new/datum/gear_tweak/path/type(path) - if(flags & GEAR_HAS_SUBTYPE_SELECTION) - gear_tweaks += new/datum/gear_tweak/path/subtype(path) - if(custom_setup_proc) - gear_tweaks += new/datum/gear_tweak/custom_setup(custom_setup_proc) - -/datum/gear/proc/get_description(var/metadata) - . = description - for(var/datum/gear_tweak/gt in gear_tweaks) - . = gt.tweak_description(., metadata["[gt]"]) - -/datum/gear_data - var/path - var/location - -/datum/gear_data/New(var/path, var/location) - src.path = path - src.location = location - -/datum/gear/proc/spawn_item(user, location, metadata) - var/datum/gear_data/gd = new(path, location) - for(var/datum/gear_tweak/gt in gear_tweaks) - gt.tweak_gear_data(metadata && metadata["[gt]"], gd) - var/item = new gd.path(gd.location) - for(var/datum/gear_tweak/gt in gear_tweaks) - gt.tweak_item(user, item, metadata && metadata["[gt]"]) - return item - -/datum/gear/proc/spawn_on_mob(var/mob/living/carbon/human/H, var/metadata) - var/obj/item/item = spawn_item(H, H, metadata) - if(H.equip_to_slot_if_possible(item, slot, TRYEQUIP_REDRAW | TRYEQUIP_DESTROY | TRYEQUIP_FORCE)) - . = item - - -/datum/gear/proc/spawn_in_storage_or_drop(mob/living/carbon/human/subject, metadata) - var/obj/item/item = spawn_item(subject, subject, metadata) - item.add_fingerprint(subject) - if (istype(item, /obj/item/organ/internal/augment)) - var/obj/item/organ/internal/augment/augment = item - var/obj/item/organ/external/parent = augment.get_valid_parent_organ(subject) - if (!parent) - to_chat(subject, SPAN_WARNING("Failed to find a valid organ to install \the [augment] into!")) - qdel(augment) - return - var/surgery_step = decls_repository.get_decl(/decl/surgery_step/internal/replace_organ) - if (augment.surgery_configure(subject, subject, parent, null, surgery_step)) - to_chat(subject, SPAN_WARNING("Failed to set up \the [augment] for installation in your [parent.name]!")) - qdel(augment) - return - augment.forceMove(subject) - augment.replaced(subject, parent) - augment.onRoundstart() - return - var/atom/container = subject.equip_to_storage(item) - if (container) - to_chat(subject, SPAN_NOTICE("Placing \the [item] in your [container.name]!")) - else if (subject.equip_to_appropriate_slot(item)) - to_chat(subject, SPAN_NOTICE("Placing \the [item] in your inventory!")) - else if (subject.put_in_hands(item)) - to_chat(subject, SPAN_NOTICE("Placing \the [item] in your hands!")) - else - to_chat(subject, SPAN_WARNING("Dropping \the [item] on the ground!")) diff --git a/code/modules/client/preference_setup/occupation/occupation.dm b/code/modules/client/preference_setup/occupation/occupation.dm deleted file mode 100644 index 7050f4e8e56c4..0000000000000 --- a/code/modules/client/preference_setup/occupation/occupation.dm +++ /dev/null @@ -1,564 +0,0 @@ -//used for pref.alternate_option -#define JOB_LEVEL_NEVER 4 -#define JOB_LEVEL_LOW 3 -#define JOB_LEVEL_MEDIUM 2 -#define JOB_LEVEL_HIGH 1 - -/datum/preferences - //Since there can only be 1 high job. - var/job_high = null - var/list/job_medium //List of all things selected for medium weight - var/list/job_low //List of all the things selected for low weight - var/list/player_alt_titles // the default name of a job like "Medical Doctor" - var/list/branches - var/list/ranks - var/list/hiding_maps = list() - - //Keeps track of preferrence for not getting any wanted jobs - var/alternate_option = 2 - -/datum/category_item/player_setup_item/occupation - name = "Occupation" - sort_order = 1 - var/datum/browser/panel - -/datum/category_item/player_setup_item/occupation/load_character(datum/pref_record_reader/R) - pref.alternate_option = R.read("alternate_option") - pref.job_high = R.read("job_high") - pref.job_medium = R.read("job_medium") - pref.job_low = R.read("job_low") - pref.player_alt_titles = R.read("player_alt_titles") - pref.skills_saved = R.read("skills_saved") - pref.branches = R.read("branches") - pref.ranks = R.read("ranks") - pref.hiding_maps = R.read("hiding_maps") - load_skills() - -/datum/category_item/player_setup_item/occupation/save_character(datum/pref_record_writer/W) - save_skills() - W.write("alternate_option", pref.alternate_option) - W.write("job_high", pref.job_high) - W.write("job_medium", pref.job_medium) - W.write("job_low", pref.job_low) - W.write("player_alt_titles", pref.player_alt_titles) - W.write("skills_saved", pref.skills_saved) - W.write("branches", pref.branches) - W.write("ranks", pref.ranks) - W.write("hiding_maps", pref.hiding_maps) - -/datum/category_item/player_setup_item/occupation/sanitize_character() - if(!istype(pref.job_medium)) pref.job_medium = list() - if(!istype(pref.job_low)) pref.job_low = list() - if(!istype(pref.skills_saved)) pref.skills_saved = list() - if(!islist(pref.branches)) pref.branches = list() - if(!islist(pref.ranks)) pref.ranks = list() - if(!islist(pref.hiding_maps)) pref.hiding_maps = list() - - pref.alternate_option = sanitize_integer(pref.alternate_option, 0, 2, initial(pref.alternate_option)) - pref.job_high = sanitize(pref.job_high, null) - if(pref.job_medium && pref.job_medium.len) - for(var/i in 1 to pref.job_medium.len) - pref.job_medium[i] = sanitize(pref.job_medium[i]) - if(pref.job_low && pref.job_low.len) - for(var/i in 1 to pref.job_low.len) - pref.job_low[i] = sanitize(pref.job_low[i]) - if(!pref.player_alt_titles) pref.player_alt_titles = new() - - // We could have something like Captain set to high while on a non-rank map, - // so we prune here to make sure we don't spawn as a PFC captain - prune_occupation_prefs() - - pref.skills_allocated = pref.sanitize_skills(pref.skills_allocated) //this proc also automatically computes and updates points_by_job - - for(var/job_type in SSjobs.types_to_datums) - var/datum/job/job = SSjobs.types_to_datums[job_type] - var/alt_title = pref.player_alt_titles[job.title] - if(alt_title && !(alt_title in job.alt_titles)) - pref.player_alt_titles -= job.title - -/datum/category_item/player_setup_item/occupation/content(mob/user, limit = 16, list/splitJobs, splitLimit = 1) - - if(!SSmapping || !SSjobs.job_lists_by_map_name) - return - - var/datum/species/S = preference_species() - . = list() - . += "" - . += "" - . += "
              " - . += "Select and configure your occupation preferences. Unavailable occupations are crossed out." - . += "
              " - - // Display everything. - for(var/job_map in SSjobs.job_lists_by_map_name) - - var/list/map_data = SSjobs.job_lists_by_map_name[job_map] - if(isnull(pref.hiding_maps[job_map])) - pref.hiding_maps[job_map] = map_data["default_to_hidden"] - - . += "
              " - . += "" - . += "" - . += "
              [capitalize(job_map)][pref.hiding_maps[job_map] ? "Show" : "Hide"]
              " - - if(!pref.hiding_maps[job_map]) - - . += "
              " - . += "
              " // Table within a table for alignment, also allows you to easily add more columns. - . += "" - - //The job before the current job. I only use this to get the previous jobs color when I'm filling in blank rows. - var/datum/job/lastJob - var/list/map_job_list = map_data["jobs"] - var/index = -1 - if(splitLimit) limit = round((LAZYLEN(map_job_list)+1)/2) - - for(var/datum/job/job in map_job_list) - - var/datum/mil_rank/player_rank - var/datum/mil_branch/player_branch - var/branch_string = "" - var/rank_branch_string = "" - var/branch_rank = job.allowed_branches ? job.get_branch_rank(S) : GLOB.mil_branches.spawn_branches(S) - if(GLOB.using_map && (GLOB.using_map.flags & MAP_HAS_BRANCH) && LAZYLEN(branch_rank)) - player_branch = GLOB.mil_branches.get_branch(pref.branches[job.title]) - if(player_branch) - if(LAZYLEN(branch_rank) > 1) - branch_string += "" - else - branch_string += "" - if(!branch_string) - branch_string = "" - if(player_branch) - var/ranks = branch_rank[player_branch.name] || GLOB.mil_branches.spawn_ranks(player_branch.name, S) - if(LAZYLEN(ranks)) - player_rank = GLOB.mil_branches.get_rank(player_branch.name, pref.ranks[job.title]) - if(player_rank) - if(LAZYLEN(ranks) > 1) - rank_branch_string += "" - else - rank_branch_string += "" - if(!rank_branch_string) - rank_branch_string = "" - rank_branch_string = "[branch_string][rank_branch_string]" - - var/title = job.title - var/title_link = length(job.alt_titles) ? "[pref.GetPlayerAltTitle(job)]" : job.title - if((title in SSjobs.titles_by_department(COM)) || (title == "AI"))//Bold head jobs - title_link = "[title_link]" - - var/help_link = "" - lastJob = job - - var/bodytype = S.get_bodytype() - var/bad_message = "" - if(job.total_positions == 0 && job.spawn_positions == 0) - bad_message = "\[UNAVAILABLE]" - else if(jobban_isbanned(user, title)) - bad_message = "\[BANNED]" - else if (!job.is_species_whitelist_allowed(user.client)) - bad_message = "\[WHITELIST RESTRICTED ([job.use_species_whitelist])]" - else if(!job.player_old_enough(user.client)) - var/available_in_days = job.available_in_days(user.client) - bad_message = "\[IN [(available_in_days)] DAYS]" - else if(LAZYACCESS(job.minimum_character_age, bodytype) && user.client && (user.client.prefs.age < job.minimum_character_age[bodytype])) - bad_message = "\[MIN CHAR AGE: [job.minimum_character_age[bodytype]]]" - else if(!job.is_species_allowed(S)) - bad_message = "\[SPECIES RESTRICTED]" - else if(!S.check_background(job, user.client.prefs)) - bad_message = "\[BACKGROUND RESTRICTED]" - - var/current_level = JOB_LEVEL_NEVER - if(pref.job_high == job.title) - current_level = JOB_LEVEL_HIGH - else if(job.title in pref.job_medium) - current_level = JOB_LEVEL_MEDIUM - else if(job.title in pref.job_low) - current_level = JOB_LEVEL_LOW - - var/skill_link - if(pref.points_by_job[job] && (!job.available_by_default || current_level != JOB_LEVEL_NEVER)) - skill_link = "Set Skills" - else - skill_link = "View Skills" - skill_link = "" - - // Begin assembling the actual HTML. - index += 1 - if((index >= limit) || (job.title in splitJobs)) - if((index < limit) && (lastJob != null)) - //If the cells were broken up by a job in the splitJob list then it will fill in the rest of the cells with - //the last job's selection color. Creating a rather nice effect. - for(var/i = 0, i < (limit - index), i += 1) - . += "" - . += "
              [player_branch.name_short || player_branch.name][player_branch.name_short || player_branch.name]-[player_rank.name_short || player_rank.name][player_rank.name_short || player_rank.name]-?[skill_link]
                
              " - index = 0 - - . += "" - if(rank_branch_string && rank_branch_string != "") - . += "[rank_branch_string]" - . += "" - continue - else if((GLOB.using_map.default_assistant_title in pref.job_low) && (title != GLOB.using_map.default_assistant_title)) - . += "[title_link][help_link][skill_link]" - continue - else - . += "[title_link][help_link][skill_link]" - - . += "" - . += "
              " - - if(bad_message) - . += "[title_link][help_link][skill_link][bad_message]
              " - if(title == GLOB.using_map.default_assistant_title)//Assistant is special - var/yes_link = "Yes" - var/no_link = "No" - if(title in pref.job_low) - yes_link = "[yes_link]" - no_link = "[no_link]" - else - yes_link = "[yes_link]" - no_link = "[no_link]" - . += "[yes_link][no_link]" - else if(!job.available_by_default) - . += "Not available at roundstart." - else - var/level_link - switch(current_level) - if(JOB_LEVEL_LOW) - level_link = "Low" - if(JOB_LEVEL_MEDIUM) - level_link = "Medium" - if(JOB_LEVEL_HIGH) - level_link = "High" - else - level_link = "Never" - . += "[level_link]" - . += "
              " - . += "
              " - . += "
              " - switch(pref.alternate_option) - if(GET_RANDOM_JOB) - . += "Get random job if preferences unavailable" - if(BE_ASSISTANT) - . += "Be assistant if preference unavailable" - if(RETURN_TO_LOBBY) - . += "Return to lobby if preference unavailable" - . += "\[Reset\]
              " - . += "
              " - . += "

              " - . = jointext(.,null) - -/datum/category_item/player_setup_item/proc/validate_branch_and_rank() - - if(LAZYLEN(pref.branches)) - for(var/job_name in pref.branches) - if(!(job_name in SSjobs.titles_to_datums)) - pref.branches -= job_name - - if(LAZYLEN(pref.ranks)) - var/list/removing_ranks - for(var/job_name in pref.ranks) - var/datum/job/job = SSjobs.get_by_title(job_name, TRUE) - if(!job) LAZYADD(removing_ranks, job_name) - if(LAZYLEN(removing_ranks)) - pref.ranks -= removing_ranks - - var/datum/species/S = preference_species() - for(var/job_name in SSjobs.titles_to_datums) - - var/datum/job/job = SSjobs.get_by_title(job_name) - - var/datum/mil_branch/player_branch = pref.branches[job.title] ? GLOB.mil_branches.get_branch(pref.branches[job.title]) : null - var/branch_rank = job.allowed_branches ? job.get_branch_rank(S) : GLOB.mil_branches.spawn_branches(S) - if(!player_branch || !(player_branch.name in branch_rank)) - player_branch = LAZYLEN(branch_rank) ? GLOB.mil_branches.get_branch(branch_rank[1]) : null - - if(player_branch) - var/datum/mil_rank/player_rank = pref.ranks[job.title] ? GLOB.mil_branches.get_rank(player_branch.name, pref.ranks[job.title]) : null - var/ranks = branch_rank[player_branch.name] || GLOB.mil_branches.spawn_ranks(player_branch.name, S) - if(!player_rank || !(player_rank.name in ranks)) - player_rank = LAZYLEN(ranks) ? GLOB.mil_branches.get_rank(player_branch.name, ranks[1]) : null - - // Now make the assignments - pref.branches[job.title] = player_branch.name - if(player_rank) - pref.ranks[job.title] = player_rank.name - else - pref.ranks -= job.title - else - pref.branches -= job.title - pref.ranks -= job.title - -/datum/category_item/player_setup_item/occupation/OnTopic(href, href_list, user) - if(href_list["reset_jobs"]) - ResetJobs() - return TOPIC_REFRESH - - else if(href_list["toggle_map"]) - var/mapname = href_list["toggle_map"] - pref.hiding_maps[mapname] = !pref.hiding_maps[mapname] - return TOPIC_REFRESH - - else if(href_list["job_alternative"]) - if(pref.alternate_option == GET_RANDOM_JOB || pref.alternate_option == BE_ASSISTANT) - pref.alternate_option += 1 - else if(pref.alternate_option == RETURN_TO_LOBBY) - pref.alternate_option = 0 - return TOPIC_REFRESH - - else if(href_list["select_alt_title"]) - var/datum/job/job = locate(href_list["select_alt_title"]) - if (job) - var/choices = list(job.title) + job.alt_titles - var/choice = input("Choose an title for [job.title].", "Choose Title", pref.GetPlayerAltTitle(job)) as anything in choices|null - if(choice && CanUseTopic(user)) - SetPlayerAltTitle(job, choice) - return ((pref.preview_job || pref.preview_gear) ? TOPIC_REFRESH_UPDATE_PREVIEW : TOPIC_REFRESH) - - else if(href_list["set_job"]) - var/set_job = href_list["set_job"] - var/set_to - if(href_list["set_level"]) - set_to = text2num(href_list["set_level"]) - if(href_list["inc_level"]) - set_to = GetCurrentJobLevel(set_job) + text2num(href_list["inc_level"]) - if(set_to < JOB_LEVEL_HIGH) - set_to = JOB_LEVEL_NEVER - else if(set_to > JOB_LEVEL_NEVER) - set_to = JOB_LEVEL_HIGH - if(SetJob(user, set_job, set_to)) - return ((pref.preview_job || pref.preview_gear) ? TOPIC_REFRESH_UPDATE_PREVIEW : TOPIC_REFRESH) - - else if(href_list["char_branch"]) - var/datum/job/job = locate(href_list["checking_job"]) - if(istype(job)) - var/datum/species/S = preference_species() - var/list/options = job.allowed_branches ? job.get_branch_rank(S) : GLOB.mil_branches.spawn_branches(S) - var/choice = input(user, "Choose your branch of service.", CHARACTER_PREFERENCE_INPUT_TITLE) as null|anything in options - if(choice && CanUseTopic(user) && GLOB.mil_branches.is_spawn_branch(choice, S)) - pref.branches[job.title] = choice - pref.ranks -= job.title - pref.skills_allocated = pref.sanitize_skills(pref.skills_allocated) // Check our skillset is still valid - validate_branch_and_rank() - return ((pref.preview_job || pref.preview_gear) ? TOPIC_REFRESH_UPDATE_PREVIEW : TOPIC_REFRESH) - return TOPIC_REFRESH - - else if(href_list["char_rank"]) - var/datum/job/job = locate(href_list["checking_job"]) - if(istype(job)) - var/datum/mil_branch/branch = GLOB.mil_branches.get_branch(pref.branches[job.title]) - var/datum/species/S = preference_species() - var/list/branch_rank = job.allowed_branches ? job.get_branch_rank(S) : GLOB.mil_branches.spawn_branches(S) - var/list/options = branch_rank[branch.name] || GLOB.mil_branches.spawn_ranks(branch.name, S) - var/choice = input(user, "Choose your rank.", CHARACTER_PREFERENCE_INPUT_TITLE) as null|anything in options - if(choice && CanUseTopic(user) && GLOB.mil_branches.is_spawn_rank(branch.name, choice, preference_species())) - pref.ranks[job.title] = choice - pref.skills_allocated = pref.sanitize_skills(pref.skills_allocated) // Check our skillset is still valid - validate_branch_and_rank() - return ((pref.preview_job || pref.preview_gear) ? TOPIC_REFRESH_UPDATE_PREVIEW : TOPIC_REFRESH) - return TOPIC_REFRESH - else if(href_list["set_skills"]) - var/rank = href_list["set_skills"] - var/datum/job/job = SSjobs.get_by_title(rank, TRUE) - if(job) - open_skill_setup(user, job) - - //From the skills popup - - else if(href_list["hit_skill_button"]) - var/decl/hierarchy/skill/S = locate(href_list["hit_skill_button"]) - var/datum/job/J = locate(href_list["at_job"]) - if(!istype(S) || !istype(J)) - return - var/value = text2num(href_list["newvalue"]) - update_skill_value(J, S, value) - panel.set_content(generate_skill_content(J)) - panel.open() - return TOPIC_REFRESH - - else if(href_list["skillinfo"]) - var/decl/hierarchy/skill/S = locate(href_list["skillinfo"]) - if(!istype(S)) - return - var/HTML = list() - HTML += "

              [S.name]

              " - HTML += "[S.desc]
              " - var/i - for(i=1, i <= length(S.levels), i++) - var/level_name = S.levels[i] - HTML += "
              [level_name]: [S.levels[level_name]]
              " - show_browser(user, jointext(HTML, null), "window=\ref[user]skillinfo") - - else if(href_list["job_info"]) - - var/rank = href_list["job_info"] - var/datum/job/job = SSjobs.get_by_title(rank) - - var/dat = list() - - dat += "



              " - if(job.alt_titles) - dat += "Alternative titles: [english_list(job.alt_titles)]." - send_rsc(user, job.get_job_icon(), "job[ckey(rank)].png") - dat += "" - if(job.department) - dat += "Department: [job.department]." - if(job.head_position) - dat += "You are in charge of this department." - - dat += "You answer to [job.supervisors] normally." - - if(job.allowed_branches) - dat += "You can be of following ranks:" - for(var/T in job.allowed_branches) - var/datum/mil_branch/B = GLOB.mil_branches.get_branch_by_type(T) - dat += "

            • [B.name]: [job.get_ranks(B.name)]" - dat += "
              " - if(config.wiki_url) - dat += "Open wiki page in browser" - - var/description = job.get_description_blurb() - if(description) - dat += html_encode(description) - var/datum/browser/popup = new(user, "Job Info", "[capitalize(rank)]", 430, 520, src) - popup.set_content(jointext(dat,"
              ")) - popup.open() - - else if(href_list["job_wiki"]) - if (!config.wiki_url) - return - var/rank = href_list["job_wiki"] - var/datum/job/job = SSjobs.get_by_title(rank) - if (!job) - return - send_link(user, join_url(config.wiki_url, "roles", ckey(rank))) - - return ..() - -/datum/category_item/player_setup_item/occupation/proc/SetPlayerAltTitle(datum/job/job, new_title) - // remove existing entry - pref.player_alt_titles -= job.title - // add one if it's not default - if(job.title != new_title) - pref.player_alt_titles[job.title] = new_title - -/datum/category_item/player_setup_item/occupation/proc/SetJob(mob/user, role, level) - - level = clamp(level, JOB_LEVEL_HIGH, JOB_LEVEL_NEVER) - var/datum/job/job = SSjobs.get_by_title(role, TRUE) - if(!job) - return 0 - - if(role == GLOB.using_map.default_assistant_title) - if(level == JOB_LEVEL_NEVER) - pref.job_low -= job.title - else - pref.job_low |= job.title - return 1 - - SetJobDepartment(job, level) - - return 1 - -/datum/category_item/player_setup_item/occupation/proc/GetCurrentJobLevel(var/job_title) - if(pref.job_high == job_title) - . = JOB_LEVEL_HIGH - else if(job_title in pref.job_medium) - . = JOB_LEVEL_MEDIUM - else if(job_title in pref.job_low) - . = JOB_LEVEL_LOW - else - . = JOB_LEVEL_NEVER - -/datum/category_item/player_setup_item/occupation/proc/SetJobDepartment(var/datum/job/job, var/level) - if(!job || !level) return 0 - - var/current_level = GetCurrentJobLevel(job.title) - - switch(current_level) - if(JOB_LEVEL_HIGH) - pref.job_high = null - if(JOB_LEVEL_MEDIUM) - pref.job_medium -= job.title - if(JOB_LEVEL_LOW) - pref.job_low -= job.title - - switch(level) - if(JOB_LEVEL_HIGH) - if(pref.job_high) - pref.job_medium |= pref.job_high - pref.job_high = job.title - if(JOB_LEVEL_MEDIUM) - pref.job_medium |= job.title - if(JOB_LEVEL_LOW) - pref.job_low |= job.title - - return 1 - -/datum/preferences/proc/CorrectLevel(var/datum/job/job, var/level) - if(!job || !level) return 0 - switch(level) - if(1) - return job_high == job.title - if(2) - return !!(job.title in job_medium) - if(3) - return !!(job.title in job_low) - return 0 - -/** - * Prune a player's job preferences based on current branch, rank and species - * - * This proc goes through all the preferred jobs, and removes the ones incompatible with current rank or branch. - */ -/datum/category_item/player_setup_item/proc/prune_job_prefs() - var/allowed_titles = list() - - for(var/job_type in SSjobs.types_to_datums) - var/datum/job/job = SSjobs.types_to_datums[job_type] - allowed_titles += job.title - - if(job.title == pref.job_high) - if(job.is_restricted(pref)) - pref.job_high = null - - else if(job.title in pref.job_medium) - if(job.is_restricted(pref)) - pref.job_medium.Remove(job.title) - - else if(job.title in pref.job_low) - if(job.is_restricted(pref)) - pref.job_low.Remove(job.title) - - if(pref.job_high && !(pref.job_high in allowed_titles)) - pref.job_high = null - - for(var/job_title in pref.job_medium) - if(!(job_title in allowed_titles)) - pref.job_medium -= job_title - - for(var/job_title in pref.job_low) - if(!(job_title in allowed_titles)) - pref.job_low -= job_title - -/datum/category_item/player_setup_item/proc/prune_occupation_prefs() - prune_job_prefs() - validate_branch_and_rank() - -/datum/category_item/player_setup_item/occupation/proc/ResetJobs() - pref.job_high = null - pref.job_medium = list() - pref.job_low = list() - pref.player_alt_titles.Cut() - pref.branches = list() - pref.ranks = list() - validate_branch_and_rank() - -/datum/preferences/proc/GetPlayerAltTitle(datum/job/job) - return (job.title in player_alt_titles) ? player_alt_titles[job.title] : job.title - -#undef JOB_LEVEL_NEVER -#undef JOB_LEVEL_LOW -#undef JOB_LEVEL_MEDIUM -#undef JOB_LEVEL_HIGH diff --git a/code/modules/client/preference_setup/occupation/skill_selection.dm b/code/modules/client/preference_setup/occupation/skill_selection.dm deleted file mode 100644 index 0d680f49a4e39..0000000000000 --- a/code/modules/client/preference_setup/occupation/skill_selection.dm +++ /dev/null @@ -1,240 +0,0 @@ -/datum/preferences - var/list/skills_saved = list() //List of /datum/job paths, with values (lists of "/decl/hierarchy/skill" , with values saved skill points spent). Should only include entries with nonzero spending. - var/list/skills_allocated = list() //Same as above, but using instances rather than path strings for both jobs and skills. - var/list/points_by_job = list() //List of jobs, with value the number of free skill points remaining - -/datum/preferences/proc/get_max_skill(datum/job/job, decl/hierarchy/skill/S) - var/min = get_min_skill(job, S) - if(job && job.max_skill) - . = job.max_skill[S.type] - if(!.) - . = S.default_max - if(!.) - . = SKILL_MAX - . = max(min, .) - -/datum/preferences/proc/get_total_skill_value(datum/job/job, decl/hierarchy/skill/req_skill) - if(!(job in skills_allocated)) - return get_min_skill(job, req_skill) - var/allocated = skills_allocated[job] - if(req_skill in allocated) - return allocated[req_skill] + get_min_skill(job, req_skill) - -/datum/preferences/proc/get_min_skill(datum/job/job, decl/hierarchy/skill/S) - if(job && job.min_skill) - . = job.min_skill[S.type] - if(!.) - var/datum/mil_branch/branch = GLOB.mil_branches.get_branch(branches[job.title]) - if(branch && branch.min_skill) - . = branch.min_skill[S.type] - if(!.) - . = SKILL_MIN - -/datum/preferences/proc/get_spent_points(datum/job/job, decl/hierarchy/skill/S) - if(!(job in skills_allocated)) - return 0 - var/allocated = skills_allocated[job] - if(!(S in allocated)) - return 0 - var/min = get_min_skill(job, S) - return get_level_cost(job, S, min + allocated[S]) - -/datum/preferences/proc/get_level_cost(datum/job/job, decl/hierarchy/skill/S, level) - var/min = get_min_skill(job, S) - . = 0 - for(var/i=min+1, i <= level, i++) - . += S.get_cost(i) - -/datum/preferences/proc/get_max_affordable(datum/job/job, decl/hierarchy/skill/S) - var/current_level = get_min_skill(job, S) - var/allocation = skills_allocated[job] - if(allocation && allocation[S]) - current_level += allocation[S] - var/max = get_max_skill(job, S) - var/budget = points_by_job[job] - . = max - for(var/i=current_level+1, i <= max, i++) - if(budget - S.get_cost(i) < 0) - return i-1 - budget -= S.get_cost(i) - -//These procs convert to/from static save-data formats. -/datum/category_item/player_setup_item/occupation/proc/load_skills() - if(!length(GLOB.skills)) - decls_repository.get_decl(/decl/hierarchy/skill) - - pref.skills_allocated = list() - for(var/job_type in SSjobs.types_to_datums) - var/datum/job/job = SSjobs.get_by_path(job_type) - if("[job.type]" in pref.skills_saved) - var/S = pref.skills_saved["[job.type]"] - var/L = list() - for(var/decl/hierarchy/skill/skill in GLOB.skills) - if("[skill.type]" in S) - L[skill] = S["[skill.type]"] - if(length(L)) - pref.skills_allocated[job] = L - -/datum/category_item/player_setup_item/occupation/proc/save_skills() - pref.skills_saved = list() - for(var/datum/job/job in pref.skills_allocated) - var/S = pref.skills_allocated[job] - var/L = list() - for(var/decl/hierarchy/skill/skill in S) - L["[skill.type]"] = S[skill] - if(length(L)) - pref.skills_saved["[job.type]"] = L - -//Sets up skills_allocated -/datum/preferences/proc/sanitize_skills(var/list/input) - . = list() - var/datum/species/S = all_species[species] - for(var/job_name in SSjobs.titles_to_datums) - var/datum/job/job = SSjobs.get_by_title(job_name) - var/input_skills = list() - if((job in input) && istype(input[job], /list)) - input_skills = input[job] - - var/L = list() - var/sum = 0 - - for(var/decl/hierarchy/skill/skill in GLOB.skills) - if(skill in input_skills) - var/min = get_min_skill(job, skill) - var/max = get_max_skill(job, skill) - var/level = sanitize_integer(input_skills[skill], 0, max - min, 0) - var/spent = get_level_cost(job, skill, min + level) - if(spent) //Only include entries with nonzero spent points - L[skill] = level - sum += spent - - points_by_job[job] = job.skill_points //We compute how many points we had. - if(!job.no_skill_buffs) - points_by_job[job] += S.skills_from_age(age) //Applies the species-appropriate age modifier. - points_by_job[job] += S.job_skill_buffs[job.type] //Applies the per-job species modifier, if any. - - if((points_by_job[job] >= sum) && sum) //we didn't overspend, so use sanitized imported data - .[job] = L - points_by_job[job] -= sum //if we overspent, or did no spending, default to not including the job at all - purge_skills_missing_prerequisites(job) - -/datum/preferences/proc/check_skill_prerequisites(datum/job/job, decl/hierarchy/skill/S) - if(!S.prerequisites) - return TRUE - for(var/skill_type in S.prerequisites) - var/decl/hierarchy/skill/prereq = decls_repository.get_decl(skill_type) - var/value = get_min_skill(job, prereq) + LAZYACCESS(skills_allocated[job], prereq) - if(value < S.prerequisites[skill_type]) - return FALSE - return TRUE - -/datum/preferences/proc/purge_skills_missing_prerequisites(datum/job/job) - var/allocation = skills_allocated[job] - if(!allocation) - return - for(var/decl/hierarchy/skill/S in allocation) - if(!check_skill_prerequisites(job, S)) - clear_skill(job, S) - .() // restart checking from the beginning, as after doing this we don't know whether what we've already checked is still fine. - return - -/datum/preferences/proc/clear_skill(datum/job/job, decl/hierarchy/skill/S) - if(job in skills_allocated) - var/min = get_min_skill(job,S) - var/T = skills_allocated[job] - var/freed_points = get_level_cost(job, S, min+T[S]) - points_by_job[job] += freed_points - T -= S //And we no longer need this entry - if(!length(T)) - skills_allocated -= job //Don't keep track of a job with no allocation - -/datum/category_item/player_setup_item/occupation/proc/update_skill_value(datum/job/job, decl/hierarchy/skill/S, new_level) - if(!isnum(new_level) || (round(new_level) != new_level)) - return //Checks to make sure we were fed an integer. - if(!pref.check_skill_prerequisites(job, S)) - return - var/min = pref.get_min_skill(job,S) - - if(new_level == min) - pref.clear_skill(job, S) - pref.purge_skills_missing_prerequisites(job) - return - - var/max = pref.get_max_skill(job,S) - if(!(job in pref.skills_allocated)) - pref.skills_allocated[job] = list() - var/list/T = pref.skills_allocated[job] - var/current_value = pref.get_level_cost(job, S, min+T[S]) - var/new_value = pref.get_level_cost(job, S, new_level) - - if((new_level < min) || (new_level > max) || (pref.points_by_job[job] + current_value - new_value < 0)) - return //Checks if the new value is actually allowed. - //None of this should happen normally, but this avoids client attacks. - pref.points_by_job[job] += (current_value - new_value) - T[S] = new_level - min //skills_allocated stores the difference from job minimum - pref.purge_skills_missing_prerequisites(job) - -/datum/category_item/player_setup_item/occupation/proc/generate_skill_content(datum/job/job) - var/dat = list() - dat += "" - dat += "" - dat += "" - dat += "" - dat += "" - dat += "
              " - dat += "Skill points remaining: [pref.points_by_job[job]].
              " - dat += "
              " - dat += "
              " - - dat += "" - var/decl/hierarchy/skill/skill = decls_repository.get_decl(/decl/hierarchy/skill) - for(var/decl/hierarchy/skill/cat in skill.children) - dat += "" - for(var/decl/hierarchy/skill/S in cat.children) - dat += get_skill_row(job, S) - for(var/decl/hierarchy/skill/perk in S.children) - dat += get_skill_row(job, perk) - dat += "
              [cat.name]" - dat += "
              " - return JOINTEXT(dat) - -/datum/category_item/player_setup_item/occupation/proc/get_skill_row(datum/job/job, decl/hierarchy/skill/S) - var/list/dat = list() - var/min = pref.get_min_skill(job,S) - var/level = min + (pref.skills_allocated[job] ? pref.skills_allocated[job][S] : 0) //the current skill level - var/cap = pref.get_max_affordable(job, S) //if selecting the skill would make you overspend, it won't be shown - dat += "" - dat += "[S.name] ([pref.get_spent_points(job, S)])" - for(var/i = SKILL_MIN, i <= SKILL_MAX, i++) - dat += skill_to_button(S, job, level, i, min, cap) - dat += "" - return JOINTEXT(dat) - -/datum/category_item/player_setup_item/occupation/proc/open_skill_setup(mob/user, datum/job/job) - panel = new(user, "skill-selection", "Skill Selection: [job.title]", 770, 850, src) - panel.set_content(generate_skill_content(job)) - panel.open() - -/datum/category_item/player_setup_item/occupation/proc/skill_to_button(decl/hierarchy/skill/skill, datum/job/job, current_level, selection_level, min, max) - var/offset = skill.prerequisites ? skill.prerequisites[skill.parent.type] - 1 : 0 - var/effective_level = selection_level - offset - if(effective_level <= 0 || effective_level > length(skill.levels)) - return "" - var/level_name = skill.levels[effective_level] - var/cost = skill.get_cost(effective_level) - var/button_label = "[level_name] ([cost])" - if(effective_level < min) - return "[button_label]" - else if(effective_level < current_level) - return "[add_link(skill, job, button_label, "'Current'", effective_level)]" - else if(effective_level == current_level) - return "[button_label]" - else if(effective_level <= max) - return "[add_link(skill, job, button_label, "'Selectable'", effective_level)]" - else - return "[button_label]" - -/datum/category_item/player_setup_item/occupation/proc/add_link(decl/hierarchy/skill/skill, datum/job/job, text, style, value) - if(pref.check_skill_prerequisites(job, skill)) - return "[text]" - return text \ No newline at end of file diff --git a/code/modules/client/preference_setup/preference_setup.dm b/code/modules/client/preference_setup/preference_setup.dm deleted file mode 100644 index 6399fff5fb8e9..0000000000000 --- a/code/modules/client/preference_setup/preference_setup.dm +++ /dev/null @@ -1,261 +0,0 @@ -#define TOPIC_UPDATE_PREVIEW 4 -#define TOPIC_HARD_REFRESH 8 // use to force a browse() call, unblocking some rsc operations -#define TOPIC_REFRESH_UPDATE_PREVIEW (TOPIC_HARD_REFRESH|TOPIC_UPDATE_PREVIEW) - -var/global/const/CHARACTER_PREFERENCE_INPUT_TITLE = "Character Preference" - -/datum/category_group/player_setup_category/physical_preferences - name = "Physical" - sort_order = 1 - item_wrap_index = 2 - category_item_type = /datum/category_item/player_setup_item/physical - -/datum/category_group/player_setup_category/background_preferences - name = "Background" - sort_order = 2 - category_item_type = /datum/category_item/player_setup_item/background - -/datum/category_group/player_setup_category/background_preferences/content(var/mob/user) - . = "" - for(var/datum/category_item/player_setup_item/player_setup_item in items) - . += "[player_setup_item.content(user)]
              " - -/datum/category_group/player_setup_category/occupation_preferences - name = "Occupation" - sort_order = 3 - category_item_type = /datum/category_item/player_setup_item/occupation - -/datum/category_group/player_setup_category/appearance_preferences - name = "Roles" - sort_order = 4 - category_item_type = /datum/category_item/player_setup_item/antagonism - -/datum/category_group/player_setup_category/loadout_preferences - name = "Loadout" - sort_order = 6 - category_item_type = /datum/category_item/player_setup_item/loadout - -/datum/category_group/player_setup_category/global_preferences - name = "Global" - sort_order = 7 - category_item_type = /datum/category_item/player_setup_item/player_global - -/datum/category_group/player_setup_category/law_pref - name = "Laws" - sort_order = 8 - category_item_type = /datum/category_item/player_setup_item/law_pref - - -/**************************** -* Category Collection Setup * -****************************/ -/datum/category_collection/player_setup_collection - category_group_type = /datum/category_group/player_setup_category - var/datum/preferences/preferences - var/datum/category_group/player_setup_category/selected_category = null - -/datum/category_collection/player_setup_collection/New(var/datum/preferences/preferences) - src.preferences = preferences - ..() - selected_category = categories[1] - -/datum/category_collection/player_setup_collection/Destroy() - preferences = null - selected_category = null - return ..() - -/datum/category_collection/player_setup_collection/proc/sanitize_setup() - for(var/datum/category_group/player_setup_category/PS in categories) - PS.sanitize_setup() - -/datum/category_collection/player_setup_collection/proc/load_character(datum/pref_record_reader/R) - for(var/datum/category_group/player_setup_category/PS in categories) - PS.load_character(R) - -/datum/category_collection/player_setup_collection/proc/save_character(datum/pref_record_writer/W) - for(var/datum/category_group/player_setup_category/PS in categories) - PS.save_character(W) - -/datum/category_collection/player_setup_collection/proc/load_preferences(datum/pref_record_reader/R) - for(var/datum/category_group/player_setup_category/PS in categories) - PS.load_preferences(R) - -/datum/category_collection/player_setup_collection/proc/save_preferences(datum/pref_record_writer/W) - for(var/datum/category_group/player_setup_category/PS in categories) - PS.save_preferences(W) - -/datum/category_collection/player_setup_collection/proc/header() - var/dat = "" - for(var/datum/category_group/player_setup_category/PS in categories) - if(PS == selected_category) - dat += "[PS.name] " // TODO: Check how to properly mark a href/button selected in a classic browser window - else - dat += "[PS.name] " - return dat - -/datum/category_collection/player_setup_collection/proc/content(var/mob/user) - if(selected_category) - return selected_category.content(user) - -/datum/category_collection/player_setup_collection/Topic(var/href,var/list/href_list) - if(..()) - return 1 - var/mob/user = usr - if(!user.client) - return 1 - - if(href_list["category"]) - var/category = locate(href_list["category"]) - if(category && (category in categories)) - selected_category = category - . = 1 - - if(.) - user.client.prefs.update_setup_window(user) - -/************************** -* Category Category Setup * -**************************/ -/datum/category_group/player_setup_category - var/sort_order = 0 - var/item_wrap_index - -/datum/category_group/player_setup_category/dd_SortValue() - return sort_order - -/datum/category_group/player_setup_category/proc/sanitize_setup() - for(var/datum/category_item/player_setup_item/player_setup_item in items) - player_setup_item.sanitize_preferences() - for(var/datum/category_item/player_setup_item/player_setup_item in items) - player_setup_item.sanitize_character() - -/datum/category_group/player_setup_category/proc/load_character(var/savefile/S) - for(var/datum/category_item/player_setup_item/player_setup_item in items) - player_setup_item.load_character(S) - -/datum/category_group/player_setup_category/proc/save_character(var/savefile/S) - // Sanitize all data, then save it - for(var/datum/category_item/player_setup_item/player_setup_item in items) - player_setup_item.sanitize_character() - for(var/datum/category_item/player_setup_item/player_setup_item in items) - player_setup_item.save_character(S) - -/datum/category_group/player_setup_category/proc/load_preferences(var/savefile/S) - for(var/datum/category_item/player_setup_item/player_setup_item in items) - player_setup_item.load_preferences(S) - -/datum/category_group/player_setup_category/proc/save_preferences(var/savefile/S) - for(var/datum/category_item/player_setup_item/player_setup_item in items) - player_setup_item.sanitize_preferences() - for(var/datum/category_item/player_setup_item/player_setup_item in items) - player_setup_item.save_preferences(S) - -/datum/category_group/player_setup_category/proc/content(var/mob/user) - . = "
              " - var/current = 0 - var/wrap_index = item_wrap_index || items.len / 2 - for(var/datum/category_item/player_setup_item/player_setup_item in items) - if(wrap_index && current++ >= wrap_index) - wrap_index = 0 - . += "" - . += "[player_setup_item.content(user)]
              " - . += "
              " - -/datum/category_group/player_setup_category/occupation_preferences/content(var/mob/user) - for(var/datum/category_item/player_setup_item/player_setup_item in items) - . += "[player_setup_item.content(user)]
              " - -/********************** -* Category Item Setup * -**********************/ -/datum/category_item/player_setup_item - var/sort_order = 0 - var/datum/preferences/pref - -/datum/category_item/player_setup_item/New() - ..() - var/datum/category_collection/player_setup_collection/psc = category.collection - pref = psc.preferences - -/datum/category_item/player_setup_item/Destroy() - pref = null - return ..() - -/datum/category_item/player_setup_item/dd_SortValue() - return sort_order - -/* -* Called when the item is asked to load per character settings -*/ -/datum/category_item/player_setup_item/proc/load_character(datum/pref_record_reader/R) - return - -/* -* Called when the item is asked to save per character settings -*/ -/datum/category_item/player_setup_item/proc/save_character(datum/pref_record_writer/W) - return - -/* -* Called when the item is asked to load user/global settings -*/ -/datum/category_item/player_setup_item/proc/load_preferences(datum/pref_record_reader/R) - return - -/* -* Called when the item is asked to save user/global settings -*/ -/datum/category_item/player_setup_item/proc/save_preferences(datum/pref_record_writer/W) - return - -/datum/category_item/player_setup_item/proc/content() - return - -/datum/category_item/player_setup_item/proc/sanitize_character() - return - -/datum/category_item/player_setup_item/proc/sanitize_preferences() - return - -/datum/category_item/player_setup_item/Topic(var/href,var/list/href_list) - if(..()) - return 1 - var/mob/pref_mob = preference_mob() - if(!pref_mob || !pref_mob.client) - return 1 - // If the usr isn't trying to alter their own mob then they must instead be an admin - if(usr != pref_mob && !check_rights(R_ADMIN, 0, usr)) - return 1 - - . = OnTopic(href, href_list, usr) - - // The user might have joined the game or otherwise had a change of mob while tweaking their preferences. - pref_mob = preference_mob() - if(!pref_mob || !pref_mob.client) - return 1 - - if (. & TOPIC_UPDATE_PREVIEW) - pref_mob.client.prefs.preview_icon = null - if (. & TOPIC_HARD_REFRESH) - pref_mob.client.prefs.open_setup_window(usr) - else if (. & TOPIC_REFRESH) - pref_mob.client.prefs.update_setup_window(usr) - -/datum/category_item/player_setup_item/CanUseTopic(var/mob/user) - return 1 - -/datum/category_item/player_setup_item/proc/OnTopic(var/href,var/list/href_list, var/mob/user) - return TOPIC_NOACTION - -/datum/category_item/player_setup_item/proc/preference_mob() - if(!pref.client) - for(var/client/C) - if(C.ckey == pref.client_ckey) - pref.client = C - break - - if(pref.client) - return pref.client.mob - -/datum/category_item/player_setup_item/proc/preference_species() - return all_species[pref.species] || all_species[SPECIES_HUMAN] diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm deleted file mode 100644 index e59c314c5701c..0000000000000 --- a/code/modules/client/preferences.dm +++ /dev/null @@ -1,462 +0,0 @@ -#define SAVE_RESET -1 - -#define JOB_PRIORITY_HIGH FLAG(0) -#define JOB_PRIORITY_MEDIUM FLAG(1) -#define JOB_PRIORITY_LOW FLAG(2) -#define JOB_PRIORITY_LIKELY (JOB_PRIORITY_HIGH | JOB_PRIORITY_MEDIUM) -#define JOB_PRIORITY_PICKED (JOB_PRIORITY_HIGH | JOB_PRIORITY_MEDIUM | JOB_PRIORITY_LOW) - -#define MAX_LOAD_TRIES 5 - -/datum/preferences - //doohickeys for savefiles - var/is_guest = FALSE - var/default_slot = 1 //Holder so it doesn't default to slot 1, rather the last one used - - // Cache, mapping slot record ids to character names - // Saves reading all the slot records when listing - var/list/slot_names = null - - //non-preference stuff - var/warns = 0 - var/muted = 0 - var/last_ip - var/last_id - - // Populated with an error message if loading fails. - var/load_failed = null - - //game-preferences - var/lastchangelog = "" //Saved changlog filesize to detect if there was a change - - var/client/client = null - var/client_ckey = null - - var/datum/browser/popup - - var/datum/category_collection/player_setup_collection/player_setup - var/datum/browser/panel - -/datum/preferences/New(client/C) - if(istype(C)) - client = C - client_ckey = C.ckey - SScharacter_setup.preferences_datums[C.ckey] = src - if(SScharacter_setup.initialized) - setup() - else - SScharacter_setup.prefs_awaiting_setup += src - ..() - -/datum/preferences/proc/setup() - if(!length(GLOB.skills)) - decls_repository.get_decl(/decl/hierarchy/skill) - player_setup = new(src) - gender = pick(MALE, FEMALE) - real_name = random_name(gender,species) - b_type = RANDOM_BLOOD_TYPE - - if(client) - if(IsGuestKey(client.key)) - is_guest = TRUE - else - load_data() - - sanitize_preferences() - if(client && istype(client.mob, /mob/new_player)) - var/mob/new_player/np = client.mob - np.new_player_panel(TRUE) - -/datum/preferences/proc/load_data() - load_failed = null - var/stage = "pre" - try - var/pref_path = get_path(client_ckey, "preferences") - if(!fexists(pref_path)) - stage = "migrate" - // Try to migrate legacy savefile-based preferences - if(!migrate_legacy_preferences()) - // If there's no old save, there'll be nothing to load. - return - - stage = "load" - load_preferences() - load_character() - catch(var/exception/E) - load_failed = "{[stage]} [E]" - throw E - -/datum/preferences/proc/migrate_legacy_preferences() - // We make some assumptions here: - // - all relevant savefiles were version 17, which covers anything saved from 2018+ - // - legacy saves were only made on the "torch" map - // - a maximum of 40 slots were used - - var/legacy_pref_path = get_path(client.ckey, "preferences", "sav") - if(!fexists(legacy_pref_path)) - return 0 - - var/savefile/S = new(legacy_pref_path) - if(S["version"] != 17) - return 0 - - // Legacy version 17 ~= new version 1 - var/datum/pref_record_reader/savefile/savefile_reader = new(S, 1) - - player_setup.load_preferences(savefile_reader) - var/orig_slot = default_slot - - S.cd = "/torch" - for(var/slot = 1 to 40) - if(!S.dir.Find("character[slot]")) - continue - S.cd = "/torch/character[slot]" - default_slot = slot - player_setup.load_character(savefile_reader) - save_character(override_key="character_torch_[slot]") - S.cd = "/torch" - S.cd = "/" - - default_slot = orig_slot - save_preferences() - - return 1 - -/datum/preferences/proc/get_content(mob/user) - if(!SScharacter_setup.initialized) - return - if(!user || !user.client) - return - - var/dat = "
              " - - if(is_guest) - dat += "Please create an account to save your preferences. If you have an account and are seeing this, please adminhelp for assistance." - else if(load_failed) - dat += "Loading your savefile failed. Please adminhelp for assistance." - else - dat += "Slot - " - dat += "Load slot - " - dat += "Save slot - " - dat += "Reset slot - " - dat += "Reload slot" - - dat += "
              " - dat += player_setup.header() - dat += "

              " - dat += player_setup.content(user) - return dat - -/datum/preferences/proc/open_setup_window(mob/user) - if (!SScharacter_setup.initialized) - return - popup = new (user, "preferences_browser", "Character Setup", 1200, 800, src) - var/content = {" - -
              [get_content(user)]
              - "} - popup.set_content(content) - popup.open() - -/datum/preferences/proc/update_setup_window(mob/user) - send_output(user, url_encode(get_content(user)), "preferences_browser.browser:update_content") - -/datum/preferences/proc/process_link(mob/user, list/href_list) - - if(!user) return - if(isliving(user)) return - - if(href_list["preference"] == "open_whitelist_forum") - if(config.forum_url) - send_link(user, config.forum_url) - else - to_chat(user, "The forum URL is not set in the server configuration.") - return - update_setup_window(usr) - return 1 - -/datum/preferences/Topic(href, list/href_list) - if(..()) - return 1 - - if (href_list["close"]) - popup = null - - if(href_list["save"]) - save_preferences() - save_character() - else if(href_list["reload"]) - load_preferences() - load_character() - sanitize_preferences() - else if(href_list["load"]) - if(!IsGuestKey(usr.key)) - open_load_dialog(usr, href_list["details"]) - return 1 - else if(href_list["changeslot"]) - load_character(text2num(href_list["changeslot"])) - sanitize_preferences() - close_load_dialog(usr) - - if (winget(usr, "preferences_browser", "is-visible") == "true") - open_setup_window(usr) - - if (istype(client.mob, /mob/new_player)) - var/mob/new_player/M = client.mob - M.new_player_panel() - - if (href_list["details"]) - return 1 - else if(href_list["resetslot"]) - if(real_name != input("This will reset the current slot. Enter the character's full name to confirm.")) - return 0 - load_character(SAVE_RESET) - sanitize_preferences() - else - return 0 - - update_setup_window(usr) - return 1 - -/datum/preferences/proc/copy_to(mob/living/carbon/human/character, is_preview_copy = FALSE) - // Sanitizing rather than saving as someone might still be editing when copy_to occurs. - player_setup.sanitize_setup() - character.set_species(species) - - character.fully_replace_character_name(real_name) - - character.gender = gender - character.age = age - character.b_type = b_type - - character.eye_color = eye_color - - character.head_hair_style = head_hair_style - character.head_hair_color = head_hair_color - - character.facial_hair_style = facial_hair_style - character.facial_hair_color = facial_hair_color - - character.skin_color = skin_color - - character.skin_tone = skin_tone - character.base_skin = base_skin - - // Replace any missing limbs. - for(var/name in BP_ALL_LIMBS) - var/obj/item/organ/external/O = character.organs_by_name[name] - if(!O && organ_data[name] != "amputated") - var/list/organ_data = character.species.has_limbs[name] - if(!islist(organ_data)) continue - var/limb_path = organ_data["path"] - O = new limb_path(character) - - // Destroy/cyborgize organs and limbs. The order is important for preserving low-level choices for robolimb sprites being overridden. - for(var/name in BP_BY_DEPTH) - var/status = organ_data[name] - var/obj/item/organ/external/O = character.organs_by_name[name] - if(!O) - continue - O.status = 0 - O.model = null - if(status == "amputated") - character.organs_by_name[O.organ_tag] = null - character.organs -= O - if(O.children) // This might need to become recursive. - for(var/obj/item/organ/external/child in O.children) - character.organs_by_name[child.organ_tag] = null - character.organs -= child - qdel(child) - qdel(O) - else if(status == "cyborg") - if(rlimb_data[name]) - O.robotize(rlimb_data[name]) - else - O.robotize() - else //normal organ - O.force_icon = initial(O.force_icon) - O.SetName(initial(O.name)) - O.desc = initial(O.desc) - - //For species that don't care about your silly prefs - character.species.handle_limbs_setup(character) - if(!is_preview_copy) - for(var/name in list(BP_HEART,BP_EYES,BP_BRAIN,BP_LUNGS,BP_LIVER,BP_KIDNEYS,BP_STOMACH)) - var/status = organ_data[name] - if(!status) - continue - var/obj/item/organ/I = character.internal_organs_by_name[name] - if(I) - if(status == "assisted") - I.mechassist() - else if(status == "mechanical") - I.robotize() - - QDEL_NULL_LIST(character.worn_underwear) - character.worn_underwear = list() - - for(var/underwear_category_name in all_underwear) - var/datum/category_group/underwear/underwear_category = GLOB.underwear.categories_by_name[underwear_category_name] - if(underwear_category) - var/underwear_item_name = all_underwear[underwear_category_name] - var/datum/category_item/underwear/UWD = underwear_category.items_by_name[underwear_item_name] - var/metadata = all_underwear_metadata[underwear_category_name] - var/obj/item/underwear/UW = UWD.create_underwear(character, metadata) - if(UW) - UW.ForceEquipUnderwear(character, FALSE) - else - all_underwear -= underwear_category_name - - character.backpack_setup = new(backpack, backpack_metadata["[backpack]"]) - - for(var/N in character.organs_by_name) - var/obj/item/organ/external/O = character.organs_by_name[N] - O.markings.Cut() - - for(var/M in body_markings) - var/datum/sprite_accessory/marking/mark_datum = GLOB.body_marking_styles_list[M] - var/mark_color = "[body_markings[M]]" - - for(var/BP in mark_datum.body_parts) - var/obj/item/organ/external/O = character.organs_by_name[BP] - if (O) - O.markings[mark_datum] = mark_color - - character.force_update_limbs() - character.update_mutations(0) - character.update_body(0) - character.update_underwear(0) - character.update_hair(0) - character.update_icons() - - if(is_preview_copy) - return - - for(var/token in cultural_info) - character.set_cultural_value(token, cultural_info[token], defer_language_update = TRUE) - character.update_languages() - for(var/lang in alternate_languages) - character.add_language(lang) - - character.flavor_texts["general"] = flavor_texts["general"] - character.flavor_texts["head"] = flavor_texts["head"] - character.flavor_texts["face"] = flavor_texts["face"] - character.flavor_texts["eyes"] = flavor_texts["eyes"] - character.flavor_texts["torso"] = flavor_texts["torso"] - character.flavor_texts["arms"] = flavor_texts["arms"] - character.flavor_texts["hands"] = flavor_texts["hands"] - character.flavor_texts["legs"] = flavor_texts["legs"] - character.flavor_texts["feet"] = flavor_texts["feet"] - - character.public_record = public_record - character.med_record = med_record - character.sec_record = sec_record - character.gen_record = gen_record - character.exploit_record = exploit_record - - if(LAZYLEN(character.descriptors)) - for(var/entry in body_descriptors) - character.descriptors[entry] = body_descriptors[entry] - - if(!character.isSynthetic()) - character.set_nutrition(rand(140,360)) - character.set_hydration(rand(140,360)) - -/datum/preferences/proc/open_load_dialog(mob/user, details) - var/dat = list() - dat += "" - dat += "
              " - - dat += "Select a character slot to load
              " - for(var/i=1, i<= config.character_slots, i++) - var/name = (slot_names && slot_names[get_slot_key(i)]) || "Character[i]" - if(i==default_slot) - name = "[name]" - dat += "[name]
              " - - dat += "
              " - dat += "
              " - panel = new(user, "Character Slots", "Character Slots", 300, 390, src) - panel.set_content(jointext(dat,null)) - panel.open() - -/datum/preferences/proc/close_load_dialog(mob/user) - if(panel) - panel.close() - panel = null - close_browser(user, "window=saves") - -/datum/preferences/proc/selected_jobs_titles(priority = JOB_PRIORITY_PICKED) - . = list() - if (priority & JOB_PRIORITY_HIGH) - . |= job_high - if (priority & JOB_PRIORITY_MEDIUM) - . |= job_medium - if (priority & JOB_PRIORITY_LOW) - . |= job_low - -/datum/preferences/proc/selected_jobs_list(priority = JOB_PRIORITY_PICKED) - . = list() - for (var/title in selected_jobs_titles(priority)) - var/datum/job/job = SSjobs.get_by_title(title) - if (!job) - continue - . += job - -/datum/preferences/proc/selected_jobs_assoc(priority = JOB_PRIORITY_PICKED) - . = list() - for (var/title in selected_jobs_titles(priority)) - var/datum/job/job = SSjobs.get_by_title(title) - if (!job) - continue - .[title] = job - -/datum/preferences/proc/selected_branches_list(priority = JOB_PRIORITY_PICKED) - . = list() - for (var/datum/job/job in selected_jobs_list(priority)) - var/name = branches[job.title] - if (!name) - continue - . |= GLOB.mil_branches.get_branch(name) - -/datum/preferences/proc/selected_branches_assoc(priority = JOB_PRIORITY_PICKED) - . = list() - for (var/datum/job/job in selected_jobs_list(priority)) - var/name = branches[job.title] - if (!name || .[name]) - continue - .[name] = GLOB.mil_branches.get_branch(name) - -/datum/preferences/proc/for_each_selected_job(datum/callback/callback, priority = JOB_PRIORITY_LIKELY) - . = list() - if (!islist(priority)) - priority = selected_jobs_assoc(priority) - for (var/title in priority) - var/datum/job/job = priority[title] - .[title] = callback.Invoke(job) - -/datum/preferences/proc/for_each_selected_job_multi(list/callbacks, priority = JOB_PRIORITY_LIKELY) - . = list() - if (!islist(priority)) - priority = selected_jobs_assoc(priority) - for (var/callback in callbacks) - . += for_each_selected_job(callback, priority) - -/datum/preferences/proc/for_each_selected_branch(datum/callback/callback, priority = JOB_PRIORITY_LIKELY) - . = list() - if (!islist(priority)) - priority = selected_branches_assoc(priority) - for (var/name in priority) - var/datum/mil_branch/branch = priority[name] - .[name] = callback.Invoke(branch) - -/datum/preferences/proc/for_each_selected_branch_multi(list/callbacks, priority = JOB_PRIORITY_LIKELY) - . = list() - if (!islist(priority)) - priority = selected_branches_assoc(priority) - for (var/callback in callbacks) - . += for_each_selected_branch(callback, priority) diff --git a/code/modules/client/preferences_persist.dm b/code/modules/client/preferences_persist.dm deleted file mode 100644 index a7e58d4ea2509..0000000000000 --- a/code/modules/client/preferences_persist.dm +++ /dev/null @@ -1,88 +0,0 @@ -#define PREF_SER_VERSION 2 - -/datum/preferences/proc/get_path(ckey, record_key, extension="json") - return "data/player_saves/[copytext_char(ckey,1,2)]/[ckey]/[record_key].[extension]" - -// Returns null if there's no record file. Crashes on other error conditions. -/datum/preferences/proc/load_pref_record(record_key) - var/path = get_path(client_ckey, record_key) - if(!fexists(path)) - return null - var/text = file2text(path) - if(text == null) - CRASH("failed to read [path]") - var/list/data = json_decode(text) - if(!istype(data)) - CRASH("failed to decode JSON from [path]") - return new /datum/pref_record_reader/json_list(data) - -/datum/preferences/proc/save_pref_record(record_key, list/data) - var/path = get_path(client_ckey, record_key) - var/text = json_encode(data) - if(text == null) - CRASH("failed to encode JSON for [path]") - - // Why this dance? If text2file fails, we want to leave the record as it was. - - var/tmp_path = "[path].tmp" - // If we crashed at the end previously, we'll have a junk tmpfile, which text2file would append to. - if(fexists(tmp_path)) - if(!fdel(tmp_path)) - CRASH("failed to remove junk existing tmpfile at [tmp_path]") - if(!text2file(text,tmp_path)) - CRASH("failed to write record to tmpfile at [tmp_path]") - if(!fcopy(tmp_path, path)) - CRASH("failed to copy tmpfile at [tmp_path] to [path]") - if(!fdel(tmp_path)) - CRASH("failed to remove tmpfile at [tmp_path]") - -/datum/preferences/proc/load_preferences() - var/datum/pref_record_reader/R = load_pref_record("preferences") - if(!R) - R = new /datum/pref_record_reader/null(PREF_SER_VERSION) - player_setup.load_preferences(R) - -/datum/preferences/proc/save_preferences() - var/datum/pref_record_writer/json_list/W = new(PREF_SER_VERSION) - player_setup.save_preferences(W) - save_pref_record("preferences", W.data) - -/datum/preferences/proc/get_slot_key(slot) - return "character_[GLOB.using_map.preferences_key()]_[slot]" - -/datum/preferences/proc/load_character(slot) - if(!slot) - slot = default_slot - - if(slot != SAVE_RESET) // SAVE_RESET will reset the slot as though it does not exist, but keep the current slot for saving purposes. - slot = sanitize_integer(slot, 1, config.character_slots, initial(default_slot)) - if(slot != default_slot) - default_slot = slot - SScharacter_setup.queue_preferences_save(src) - - if(slot == SAVE_RESET) - // If we're resetting, set everything to null. Sanitization will clean it up - var/datum/pref_record_reader/null/R = new(PREF_SER_VERSION) - player_setup.load_character(R) - else - var/datum/pref_record_reader/R = load_pref_record(get_slot_key(slot)) - if(!R) - R = new /datum/pref_record_reader/null(PREF_SER_VERSION) - player_setup.load_character(R) - -/datum/preferences/proc/save_character(override_key=null) - var/datum/pref_record_writer/json_list/W = new(PREF_SER_VERSION) - player_setup.save_character(W) - - var/record_key = override_key || get_slot_key(default_slot) - save_pref_record(record_key, W.data) - - // Cache the character's name for listing - LAZYSET(slot_names, record_key, W.data["real_name"]) - SScharacter_setup.queue_preferences_save(src) - -/datum/preferences/proc/sanitize_preferences() - player_setup.sanitize_setup() - return 1 - -#undef PREF_SER_VERSION diff --git a/code/modules/client/preferences_spawnpoints.dm b/code/modules/client/preferences_spawnpoints.dm deleted file mode 100644 index 19fc0df1069d6..0000000000000 --- a/code/modules/client/preferences_spawnpoints.dm +++ /dev/null @@ -1,81 +0,0 @@ -GLOBAL_VAR(spawntypes) - -/proc/spawntypes() - if(!GLOB.spawntypes) - GLOB.spawntypes = list() - for(var/type in typesof(/datum/spawnpoint)-/datum/spawnpoint) - var/datum/spawnpoint/S = type - var/display_name = initial(S.display_name) - if((display_name in GLOB.using_map.allowed_spawns) || initial(S.always_visible)) - GLOB.spawntypes[display_name] = new S - return GLOB.spawntypes - -/datum/spawnpoint - var/msg //Message to display on the arrivals computer. - var/list/turfs //List of turfs to spawn on. - var/display_name //Name used in preference setup. - var/always_visible = FALSE // Whether this spawn point is always visible in selection, ignoring map-specific settings. - var/list/restrict_job = null - var/list/disallow_job = null - -/datum/spawnpoint/proc/check_job_spawning(job) - if(restrict_job && !(job in restrict_job)) - return 0 - - if(disallow_job && (job in disallow_job)) - return 0 - - return 1 - -//Called after mob is created, moved to a turf and equipped. -/datum/spawnpoint/proc/after_join(mob/victim) - return - -#ifdef UNIT_TEST -/datum/spawnpoint/Del() - crash_with("Spawn deleted: [log_info_line(src)]") - ..() - -/datum/spawnpoint/Destroy() - crash_with("Spawn destroyed: [log_info_line(src)]") - . = ..() -#endif - -/datum/spawnpoint/arrivals - display_name = "Arrivals Shuttle" - msg = "has arrived on the station" - -/datum/spawnpoint/arrivals/New() - ..() - turfs = GLOB.latejoin - -/datum/spawnpoint/gateway - display_name = "Gateway" - msg = "has completed translation from offsite gateway" - -/datum/spawnpoint/gateway/New() - ..() - turfs = GLOB.latejoin_gateway - -/datum/spawnpoint/cryo - display_name = "Cryogenic Storage" - msg = "has completed cryogenic revival" - disallow_job = list("Robot") - -/datum/spawnpoint/cryo/New() - ..() - turfs = GLOB.latejoin_cryo - -/datum/spawnpoint/cyborg - display_name = "Cyborg Storage" - msg = "has been activated from storage" - restrict_job = list("Robot") - -/datum/spawnpoint/cyborg/New() - ..() - turfs = GLOB.latejoin_cyborg - -/datum/spawnpoint/default - display_name = DEFAULT_SPAWNPOINT_ID - msg = "has arrived on the station" - always_visible = TRUE \ No newline at end of file diff --git a/code/modules/client/preferences_storage.dm b/code/modules/client/preferences_storage.dm deleted file mode 100644 index 675754cc56573..0000000000000 --- a/code/modules/client/preferences_storage.dm +++ /dev/null @@ -1,84 +0,0 @@ -// Abstract type for preference record providers -// Implemented by ~things~ that can fill out preferences -/datum/pref_record_reader - -/datum/pref_record_reader/New() - CRASH("abstract - must be overridden") - -/datum/pref_record_reader/proc/get_version() - CRASH("abstract - must be overridden") - -/datum/pref_record_reader/proc/read(key) - CRASH("abstract - must be overridden") - - -// Abstract type for preference record writers -/datum/pref_record_writer - -/datum/pref_record_writer/New() - CRASH("abstract - must be overridden") - -/datum/pref_record_writer/proc/write(key, val) - CRASH("abstract - must be overridden") - - -// Preference reader for legacy savefiles -// Version must be manually passed, as it's only present at the root -/datum/pref_record_reader/savefile - var/savefile - var/version - -/datum/pref_record_reader/savefile/New(savefile, version) - src.savefile = savefile - src.version = version - -/datum/pref_record_reader/savefile/get_version() - return version - -/datum/pref_record_reader/savefile/read(key) - return savefile[key] - - -// Preference reader for assoc lists -// Version should be in the "__VERSION" key -/datum/pref_record_reader/json_list - var/list/data - -/datum/pref_record_reader/json_list/New(list/data) - src.data = data - ASSERT(istype(data)) - ASSERT(isnum(get_version())) - -/datum/pref_record_reader/json_list/get_version() - return read("__VERSION") - -/datum/pref_record_reader/json_list/read(key) - return data[key] - - -// Null preference reader -// Returns null for all keys; used when initializing records -/datum/pref_record_reader/null - var/version - -/datum/pref_record_reader/null/New(version) - src.version = version - -/datum/pref_record_reader/null/get_version() - return version - -/datum/pref_record_reader/null/read(key) - return null - - -// Preference writer for assoc lists -// Version should be passed in, will be placed in "__VERSION" -/datum/pref_record_writer/json_list - var/list/data - -/datum/pref_record_writer/json_list/New(version) - ASSERT(isnum(version)) - data = list("__VERSION"=version) - -/datum/pref_record_writer/json_list/write(key, val) - data[key] = val diff --git a/code/modules/client/preferences_toggle.dm b/code/modules/client/preferences_toggle.dm deleted file mode 100644 index dc51ecb13ab5e..0000000000000 --- a/code/modules/client/preferences_toggle.dm +++ /dev/null @@ -1,64 +0,0 @@ -var/global/list/client_preference_stats_ - -/proc/client_preference_stats_for_usr(var/mob/user = usr) - . = list() - if(!user) - return - if(!SScharacter_setup.initialized) - return - if(!client_preference_stats_) - client_preference_stats_ = list() - for(var/datum/client_preference/client_pref in get_client_preferences()) - client_preference_stats_[client_pref.description] = new /stat_client_preference(null, client_pref) - - for(var/client_pref_description in client_preference_stats_) - var/stat_client_preference/scp = client_preference_stats_[client_pref_description] - if(scp.client_preference.may_set(user)) - scp.update_name(user) - .[client_pref_description] = scp - -/client/verb/toggle_preference_verb(var/client_pref_name in client_preference_stats_for_usr()) - set name = "Toggle Preference" - set desc = "Toggles the selected preference." - set category = "OOC" - - var/list/client_stats = client_preference_stats_for_usr() - var/stat_client_preference/scp = client_stats[client_pref_name] - if(istype(scp)) - scp.Click() - -/mob/Stat() - . = ..() - if(!client || !statpanel("Preferences")) - return - var/list/preferences = client_preference_stats_for_usr(src) - for(var/client_preference_description in preferences) - var/stat_client_preference/scp = client_preference_stats_[client_preference_description] - stat(scp.client_preference.description, scp) - -/stat_client_preference - parent_type = /atom/movable - simulated = FALSE - var/datum/client_preference/client_preference - -/stat_client_preference/New(var/loc, var/preference) - client_preference = preference - update_name(usr) - ..() - -/stat_client_preference/Destroy() - client_preference = null - . = ..() - -/stat_client_preference/Click() - if(!usr.client) - return - - if(!usr.cycle_preference(client_preference)) - return - - SScharacter_setup.queue_preferences_save(usr.client.prefs) - to_chat(usr, "[client_preference.description]: [usr.get_preference_value(client_preference)]") - -/stat_client_preference/proc/update_name(var/mob/user) - name = user.get_preference_value(client_preference) diff --git a/code/modules/client/ui_style.dm b/code/modules/client/ui_style.dm deleted file mode 100644 index e5464b805444f..0000000000000 --- a/code/modules/client/ui_style.dm +++ /dev/null @@ -1,59 +0,0 @@ - - -var/global/all_ui_styles = list( - "Midnight" = 'icons/mob/screen/midnight.dmi', - "Orange" = 'icons/mob/screen/orange.dmi', - "old" = 'icons/mob/screen/old.dmi', - "White" = 'icons/mob/screen/white.dmi', - "old-noborder" = 'icons/mob/screen/old-noborder.dmi', - "minimalist" = 'icons/mob/screen/minimalist.dmi' - ) - -/proc/ui_style2icon(ui_style) - if(ui_style in all_ui_styles) - return all_ui_styles[ui_style] - return all_ui_styles["White"] - - -/client/verb/change_ui() - set name = "Change UI" - set category = "OOC" - set desc = "Configure your user interface" - - if(!ishuman(usr)) - to_chat(usr, "You must be human to use this verb.") - return - - var/UI_style_new = input(usr, "Select a style. White is recommended for customization") as null|anything in all_ui_styles - if(!UI_style_new) return - - var/UI_style_alpha_new = input(usr, "Select a new alpha (transparency) parameter for your UI, between 50 and 255") as null|num - if (!UI_style_alpha_new || !UI_style_alpha_new >= 255 || UI_style_alpha_new <= 50) - return - - var/UI_style_color_new = input(usr, "Choose your UI color. Dark colors are not recommended!") as color|null - if(!UI_style_color_new) return - - //update UI - var/list/icons = usr.hud_used.adding + usr.hud_used.other + usr.hud_used.hotkeybuttons - icons.Add(usr.zone_sel) - icons.Add(usr.gun_setting_icon) - icons.Add(usr.item_use_icon) - icons.Add(usr.gun_move_icon) - icons.Add(usr.radio_use_icon) - - var/icon/ic = all_ui_styles[UI_style_new] - - for(var/obj/screen/I in icons) - if(I.name in list(I_HELP, I_HURT, I_DISARM, I_GRAB)) continue - I.icon = ic - I.color = UI_style_color_new - I.alpha = UI_style_alpha_new - - - if(alert("Like it? Save changes?",,"Yes", "No") == "Yes") - prefs.UI_style = UI_style_new - prefs.UI_style_alpha = UI_style_alpha_new - prefs.UI_style_color = UI_style_color_new - SScharacter_setup.queue_preferences_save(prefs) - to_chat(usr, "UI was saved") diff --git a/code/modules/clothing/_clothing.dm b/code/modules/clothing/_clothing.dm deleted file mode 100644 index cd472599688dd..0000000000000 --- a/code/modules/clothing/_clothing.dm +++ /dev/null @@ -1,1077 +0,0 @@ -/obj/item/clothing - name = "clothing" - siemens_coefficient = 0.9 - var/flash_protection = FLASH_PROTECTION_NONE // Sets the item's level of flash protection. - var/tint = TINT_NONE // Sets the item's level of visual impairment tint. - var/list/species_restricted = list( - "exclude", - SPECIES_NABBER - ) //everyone except for these species can wear this kit. - var/list/accessories - var/list/valid_accessory_slots - var/list/restricted_accessory_slots - var/blood_overlay_type = "uniformblood" - var/visible_name = "Unknown" - var/ironed_state = WRINKLES_DEFAULT - var/smell_state = SMELL_DEFAULT - - var/move_trail = /obj/effect/decal/cleanable/blood/tracks/footprints // if this item covers the feet, the footprints it should leave - - -/obj/item/clothing/Initialize() - . = ..() - var/list/init_accessories = accessories - accessories = list() - for (var/path in init_accessories) - attach_accessory(null, new path (src)) - - -// Updates the icons of the mob wearing the clothing item, if any. -/obj/item/clothing/proc/update_clothing_icon() - return - - -// Updates the vision of the mob wearing the clothing item, if any -/obj/item/clothing/proc/update_vision() - if(isliving(src.loc)) - var/mob/living/L = src.loc - L.handle_vision() - - -// Checked when equipped, returns true when the wearing mob's vision should be updated -/obj/item/clothing/proc/needs_vision_update() - return flash_protection || tint - - -/obj/item/clothing/get_mob_overlay(mob/user_mob, slot) - var/image/ret = ..() - - if(slot == slot_l_hand_str || slot == slot_r_hand_str) - return ret - - if(ishuman(user_mob)) - var/mob/living/carbon/human/user_human = user_mob - if(blood_DNA && user_human.species.blood_mask) - var/image/bloodsies = overlay_image(user_human.species.blood_mask, blood_overlay_type, blood_color, RESET_COLOR) - bloodsies.appearance_flags |= NO_CLIENT_COLOR - ret.overlays += bloodsies - - if(accessories.len) - for(var/obj/item/clothing/accessory/A in accessories) - ret.overlays |= A.get_mob_overlay(user_mob, slot) - return ret - - -/obj/item/clothing/proc/change_smell(smell = SMELL_DEFAULT) - smell_state = smell - - - -//BS12: Species-restricted clothing check. -/obj/item/clothing/mob_can_equip(M as mob, slot, disable_warning = 0) - - //if we can't equip the item anyway, don't bother with species_restricted (cuts down on spam) - if (!..()) - return 0 - - if(species_restricted && istype(M,/mob/living/carbon/human)) - var/exclusive = null - var/wearable = null - var/mob/living/carbon/human/H = M - - if("exclude" in species_restricted) - exclusive = 1 - - if(H.species) - if(exclusive) - if(!(H.species.get_bodytype(H) in species_restricted)) - wearable = 1 - else - if(H.species.get_bodytype(H) in species_restricted) - wearable = 1 - - if(!wearable && !(slot in list(slot_l_store, slot_r_store, slot_s_store))) - if(!disable_warning) - to_chat(H, "Your species cannot wear [src].") - return 0 - return 1 - -/obj/item/clothing/equipped(var/mob/user) - if(needs_vision_update()) - update_vision() - return ..() - -/obj/item/clothing/proc/refit_for_species(var/target_species) - if(!species_restricted) - return //this item doesn't use the species_restricted system - - //Set species_restricted list - switch(target_species) - if(SPECIES_HUMAN, SPECIES_SKRELL) //humanoid bodytypes - species_restricted = list(SPECIES_HUMAN, SPECIES_SKRELL, SPECIES_IPC, SPECIES_SHELL) //skrell/humans/machines can wear each other's suits - else - species_restricted = list(target_species) - - if (sprite_sheets_obj && (target_species in sprite_sheets_obj)) - icon = sprite_sheets_obj[target_species] - else - icon = initial(icon) - -/obj/item/clothing/head/helmet/refit_for_species(var/target_species) - if(!species_restricted) - return //this item doesn't use the species_restricted system - - //Set species_restricted list - switch(target_species) - if(SPECIES_SKRELL) - species_restricted = list(SPECIES_HUMAN, SPECIES_SKRELL, SPECIES_IPC, SPECIES_SHELL) //skrell helmets fit humans too - if(SPECIES_HUMAN) - species_restricted = list(SPECIES_HUMAN, SPECIES_IPC, SPECIES_SHELL) //human helmets fit IPCs too - else - species_restricted = list(target_species) - - if (sprite_sheets_obj && (target_species in sprite_sheets_obj)) - icon = sprite_sheets_obj[target_species] - else - icon = initial(icon) - -/obj/item/clothing/get_examine_line() - . = ..() - var/list/visible = get_visible_accessories() - if (length(visible)) - var/list/display = list() - for (var/obj/item/clothing/accessory/A in visible) - if (!(A.accessory_flags & ACCESSORY_HIDDEN) && (A.accessory_flags & ACCESSORY_HIGH_VISIBILITY)) - display += "\icon[A] \a [A]" - if (length(display)) - . += " with [english_list(display)] attached" - if (length(visible) > length(display)) - . += ". \[See accessories\]" - -/obj/item/clothing/proc/get_visible_accessories() - var/list/result = list() - if (length(accessories)) - var/covered = 0 - if (ishuman(loc)) - var/mob/living/carbon/human/H = loc - if (src == H.w_uniform) - if (H.wear_suit) - covered |= H.wear_suit.body_parts_covered - for (var/obj/item/clothing/accessory/A in accessories) - if (!(covered & A.body_location)) - result += A - return result - -/obj/item/clothing/proc/get_bulky_coverage() - . = HAS_FLAGS(flags_inv, CLOTHING_BULKY) ? body_parts_covered : 0 - for (var/obj/item/clothing/accessory/A in accessories) - . |= HAS_FLAGS(A.flags_inv, CLOTHING_BULKY) ? A.body_parts_covered : 0 - -/obj/item/clothing/examine(mob/user) - . = ..() - var/datum/extension/armor/ablative/armor_datum = get_extension(src, /datum/extension/armor/ablative) - if(istype(armor_datum) && LAZYLEN(armor_datum.get_visible_damage())) - to_chat(user, SPAN_WARNING("It has some damage.")) - -/obj/item/clothing/CanUseTopic(var/user) - if(user in view(get_turf(src))) - return STATUS_INTERACTIVE - -/obj/item/clothing/OnTopic(var/user, var/list/href_list, var/datum/topic_state/state) - if(href_list["list_ungabunga"]) - var/list/visible = get_visible_accessories() - if (length(visible)) - var/list/display = list() - for (var/obj/item/clothing/accessory/A in visible) - if (!(A.accessory_flags & ACCESSORY_HIDDEN)) - display += "[icon2html(A, user)] \a [A]" - to_chat(user, "Attached to \the [src] are [english_list(display)].") - return TOPIC_HANDLED - if(href_list["list_armor_damage"]) - var/datum/extension/armor/ablative/armor_datum = get_extension(src, /datum/extension/armor/ablative) - var/list/damages = armor_datum.get_visible_damage() - to_chat(user, "\The [src] [icon2html(src, user)] has some damage:") - for(var/key in damages) - to_chat(user, "
            • [capitalize(damages[key])] damage to the [key] armor.") - return TOPIC_HANDLED - -/////////////////////////////////////////////////////////////////////// -// Ears: headsets, earmuffs and tiny objects -/obj/item/clothing/ears - name = "ears" - w_class = ITEM_SIZE_TINY - throwforce = 2 - slot_flags = SLOT_EARS - var/volume_multiplier = 1 - -/obj/item/clothing/ears/update_clothing_icon() - if (ismob(src.loc)) - var/mob/M = src.loc - M.update_inv_ears() - -/obj/item/clothing/ears/earmuffs - name = "earmuffs" - desc = "Protects your hearing from loud noises, and quiet ones as well." - icon_state = "earmuffs" - item_state = "earmuffs" - slot_flags = SLOT_EARS | SLOT_TWOEARS - volume_multiplier = 0.1 - - -/////////////////////////////////////////////////////////////////////// -//Glasses -/* -SEE_SELF // can see self, no matter what -SEE_MOBS // can see all mobs, no matter what -SEE_OBJS // can see all objs, no matter what -SEE_TURFS // can see all turfs (and areas), no matter what -SEE_PIXELS// if an object is located on an unlit area, but some of its pixels are - // in a lit area (via pixel_x, y or smooth movement), can see those pixels -BLIND // can't see anything -*/ -/obj/item/clothing/glasses - name = "glasses" - icon = 'icons/obj/clothing/obj_eyes.dmi' - icon_state = "glasses" - item_state = "glasses" - w_class = ITEM_SIZE_SMALL - body_parts_covered = EYES - slot_flags = SLOT_EYES - var/vision_flags = 0 - var/darkness_view = 0//Base human is 2 - var/see_invisible = -1 - var/light_protection = 0 - sprite_sheets = list( - SPECIES_VOX = 'icons/mob/species/vox/onmob_eyes_vox.dmi', - SPECIES_VOX_ARMALIS = 'icons/mob/species/vox/onmob_eyes_vox_armalis.dmi', - SPECIES_UNATHI = 'icons/mob/species/unathi/generated/onmob_eyes_unathi.dmi', - ) - -/obj/item/clothing/glasses/get_icon_state(mob/user_mob, slot) - if(item_state_slots && item_state_slots[slot]) - return item_state_slots[slot] - else - return icon_state - -/obj/item/clothing/glasses/update_clothing_icon() - if (ismob(src.loc)) - var/mob/M = src.loc - M.update_inv_glasses() - -/////////////////////////////////////////////////////////////////////// -//Gloves -/obj/item/clothing/gloves - name = "gloves" - gender = PLURAL //Carn: for grammarically correct text-parsing - w_class = ITEM_SIZE_SMALL - icon = 'icons/obj/clothing/obj_hands.dmi' - siemens_coefficient = 0.75 - var/wired = 0 - var/obj/item/cell/cell = 0 - var/clipped = 0 - var/obj/item/clothing/ring/ring = null //Covered ring - var/mob/living/carbon/human/wearer = null //Used for covered rings when dropping - body_parts_covered = HANDS - slot_flags = SLOT_GLOVES - item_flags = ITEM_FLAG_WASHER_ALLOWED - attack_verb = list("challenged") - species_restricted = list("exclude",SPECIES_NABBER, SPECIES_UNATHI, SPECIES_VOX, SPECIES_VOX_ARMALIS) - sprite_sheets = list( - SPECIES_VOX = 'icons/mob/species/vox/onmob_hands_vox.dmi', - SPECIES_VOX_ARMALIS = 'icons/mob/species/vox/onmob_hands_vox_armalis.dmi', - SPECIES_NABBER = 'icons/mob/species/nabber/onmob_hands_gas.dmi', - SPECIES_UNATHI = 'icons/mob/species/unathi/generated/onmob_hands_unathi.dmi' - ) - blood_overlay_type = "bloodyhands" - -/obj/item/clothing/gloves/Initialize() - if(item_flags & ITEM_FLAG_PREMODIFIED) - cut_fingertops() - - . = ..() - -/obj/item/clothing/gloves/update_clothing_icon() - if (ismob(src.loc)) - var/mob/M = src.loc - M.update_inv_gloves() - -/obj/item/clothing/gloves/emp_act(severity) - if(cell) - //why is this not part of the powercell code? - cell.charge -= 1000 / severity - if (cell.charge < 0) - cell.charge = 0 - ..() - - -// Called just before an attack_hand(), in mob/UnarmedAttack() -/obj/item/clothing/gloves/proc/Touch(var/atom/A, var/proximity) - return 0 // return 1 to cancel attack_hand() - -/obj/item/clothing/gloves/attackby(obj/item/W, mob/user) - if(istype(W, /obj/item/wirecutters) || istype(W, /obj/item/scalpel)) - if (clipped) - to_chat(user, "\The [src] have already been modified!") - update_icon() - return - - playsound(src.loc, 'sound/items/Wirecutter.ogg', 100, 1) - user.visible_message("\The [user] modifies \the [src] with \the [W].","You modify \the [src] with \the [W].") - - cut_fingertops() // apply change, so relevant xenos can wear these - return - -// Applies "clipped" and removes relevant restricted species from the list, -// making them wearable by the specified species, does nothing if already cut -/obj/item/clothing/gloves/proc/cut_fingertops() - if (clipped) - return - - clipped = 1 - name = "modified [name]" - desc = "[desc]
              They have been modified to accommodate a different shape." - if("exclude" in species_restricted) - species_restricted -= SPECIES_UNATHI - return - -/obj/item/clothing/gloves/mob_can_equip(mob/user) - var/mob/living/carbon/human/H = user - - if(istype(H.gloves, /obj/item/clothing/ring)) - ring = H.gloves - if(!ring.undergloves) - to_chat(user, "You are unable to wear \the [src] as \the [H.gloves] are in the way.") - ring = null - return 0 - if(!H.unEquip(ring, src))//Remove the ring (or other under-glove item in the hand slot?) so you can put on the gloves. - ring = null - return 0 - - if(!..()) - if(ring) //Put the ring back on if the check fails. - if(H.equip_to_slot_if_possible(ring, slot_gloves)) - src.ring = null - return 0 - - if (ring) - to_chat(user, "You slip \the [src] on over \the [ring].") - wearer = H //TODO clean this when magboots are cleaned - return 1 - -/obj/item/clothing/gloves/dropped() - ..() - if(!wearer) - return - - var/mob/living/carbon/human/H = wearer - if(ring && istype(H)) - if(!H.equip_to_slot_if_possible(ring, slot_gloves)) - ring.dropInto(loc) - src.ring = null - wearer = null - -/////////////////////////////////////////////////////////////////////// -//Head -/obj/item/clothing/head - name = "head" - icon = 'icons/obj/clothing/obj_head.dmi' - item_icons = list( - slot_l_hand_str = 'icons/mob/onmob/items/lefthand_hats.dmi', - slot_r_hand_str = 'icons/mob/onmob/items/righthand_hats.dmi', - ) - sprite_sheets = list( - SPECIES_VOX = 'icons/mob/species/vox/onmob_head_vox.dmi', - SPECIES_VOX_ARMALIS = 'icons/mob/species/vox/onmob_head_vox_armalis.dmi', - SPECIES_UNATHI = 'icons/mob/species/unathi/generated/onmob_head_unathi.dmi', - SPECIES_NABBER = 'icons/mob/species/nabber/onmob_head_gas.dmi' - ) - body_parts_covered = HEAD - slot_flags = SLOT_HEAD - item_flags = ITEM_FLAG_WASHER_ALLOWED - w_class = ITEM_SIZE_SMALL - blood_overlay_type = "helmetblood" - - var/image/light_overlay_image - var/light_overlay = "helmet_light" - var/light_applied - var/brightness_on - var/on = 0 - - -/obj/item/clothing/head/equipped(var/mob/user, var/slot) - light_overlay_image = null - ..(user, slot) - -/obj/item/clothing/head/get_mob_overlay(mob/user_mob, slot) - var/image/ret = ..() - if(light_overlay_image) - ret.overlays -= light_overlay_image - if(on && slot == slot_head_str) - if(!light_overlay_image) - if(ishuman(user_mob)) - var/mob/living/carbon/human/user_human = user_mob - var/use_icon - if(sprite_sheets) - use_icon = sprite_sheets[user_human.species.get_bodytype(user_human)] - if(use_icon) - light_overlay_image = user_human.species.get_offset_overlay_image(TRUE, use_icon, "[light_overlay]", color, slot) - else - light_overlay_image = user_human.species.get_offset_overlay_image(FALSE, 'icons/mob/light_overlays.dmi', "[light_overlay]", color, slot) - else - light_overlay_image = overlay_image('icons/mob/light_overlays.dmi', "[light_overlay]", null, RESET_COLOR) - ret.overlays |= light_overlay_image - return ret - -/obj/item/clothing/head/attack_self(mob/user) - if(brightness_on) - if(!isturf(user.loc)) - to_chat(user, "You cannot turn the light on while in this [user.loc]") - return - on = !on - to_chat(user, "You [on ? "enable" : "disable"] the helmet light.") - update_flashlight(user) - else - return ..(user) - -/obj/item/clothing/head/proc/update_flashlight(var/mob/user = null) - if(on && !light_applied) - set_light(brightness_on, 1, 3) - light_applied = 1 - else if(!on && light_applied) - set_light(0) - light_applied = 0 - update_icon(user) - user.update_action_buttons() - -/obj/item/clothing/head/attack_ai(var/mob/user) - if(!mob_wear_hat(user)) - return ..() - -/obj/item/clothing/head/attack_animal(var/mob/user) - if(!mob_wear_hat(user)) - return ..() - -/obj/item/clothing/head/proc/mob_wear_hat(var/mob/user) - if(!Adjacent(user)) - return 0 - var/success - if(isdrone(user)) - var/mob/living/silicon/robot/drone/D = user - if(D.hat) - success = 2 - else - D.wear_hat(src) - success = 1 - else if(istype(user, /mob/living/carbon/alien/diona)) - var/mob/living/carbon/alien/diona/D = user - if(D.hat) - success = 2 - else - D.wear_hat(src) - success = 1 - - if(!success) - return 0 - else if(success == 2) - to_chat(user, "You are already wearing a hat.") - else if(success == 1) - to_chat(user, "You crawl under \the [src].") - return 1 - -/obj/item/clothing/head/on_update_icon(var/mob/user) - - overlays.Cut() - if(on) - // Generate object icon. - if(!light_overlay_cache["[light_overlay]_icon"]) - light_overlay_cache["[light_overlay]_icon"] = image("icon" = 'icons/obj/light_overlays.dmi', "icon_state" = "[light_overlay]") - overlays |= light_overlay_cache["[light_overlay]_icon"] - - if(istype(user,/mob/living/carbon/human)) - var/mob/living/carbon/human/H = user - H.update_inv_head() - -/obj/item/clothing/head/update_clothing_icon() - if (ismob(src.loc)) - var/mob/M = src.loc - M.update_inv_head() - -/////////////////////////////////////////////////////////////////////// -//Mask -/obj/item/clothing/mask - name = "mask" - icon = 'icons/obj/clothing/obj_mask.dmi' - slot_flags = SLOT_MASK - item_flags = ITEM_FLAG_WASHER_ALLOWED - body_parts_covered = FACE|EYES - sprite_sheets = list( - SPECIES_VOX = 'icons/mob/species/vox/onmob_mask_vox.dmi', - SPECIES_VOX_ARMALIS = 'icons/mob/species/vox/onmob_mask_vox_armalis.dmi', - SPECIES_UNATHI = 'icons/mob/species/unathi/generated/onmob_mask_unathi.dmi', - ) - - var/voicechange = 0 - var/list/say_messages - var/list/say_verbs - var/down_gas_transfer_coefficient = 0 - var/down_body_parts_covered = 0 - var/down_icon_state = 0 - var/down_item_flags = 0 - var/down_flags_inv = 0 - var/pull_mask = 0 - var/hanging = 0 - var/list/filtered_gases - blood_overlay_type = "maskblood" - -/obj/item/clothing/mask/proc/filters_water() - return FALSE - -/obj/item/clothing/mask/New() - if(pull_mask) - action_button_name = "Adjust Mask" - verbs += /obj/item/clothing/mask/proc/adjust_mask - ..() - -/obj/item/clothing/mask/update_clothing_icon() - if (ismob(src.loc)) - var/mob/M = src.loc - M.update_inv_wear_mask() - -/obj/item/clothing/mask/proc/filter_air(datum/gas_mixture/air) - return - -/obj/item/clothing/mask/proc/adjust_mask(var/mob/user) - set category = "Object" - set name = "Adjust mask" - set src in usr - - if(!user.incapacitated()) - if(!pull_mask) - to_chat(usr, "You cannot pull down your [src.name].") - return - else - src.hanging = !src.hanging - if (src.hanging) - gas_transfer_coefficient = down_gas_transfer_coefficient - body_parts_covered = down_body_parts_covered - icon_state = down_icon_state - item_state = down_icon_state - item_flags = down_item_flags - flags_inv = down_flags_inv - to_chat(usr, "You pull [src] below your chin.") - else - gas_transfer_coefficient = initial(gas_transfer_coefficient) - body_parts_covered = initial(body_parts_covered) - icon_state = initial(icon_state) - item_state = initial(icon_state) - item_flags = initial(item_flags) - flags_inv = initial(flags_inv) - to_chat(usr, "You pull [src] up to cover your face.") - update_clothing_icon() - user.update_action_buttons() - -/obj/item/clothing/mask/attack_self(mob/user) - if(pull_mask) - adjust_mask(user) - -/////////////////////////////////////////////////////////////////////// -//Shoes -/obj/item/clothing/shoes - name = "shoes" - icon = 'icons/obj/clothing/obj_feet.dmi' - desc = "Comfortable-looking shoes." - gender = PLURAL - siemens_coefficient = 0.9 - body_parts_covered = FEET - slot_flags = SLOT_FEET - item_flags = ITEM_FLAG_WASHER_ALLOWED - permeability_coefficient = 0.50 - force = 2 - species_restricted = list("exclude", SPECIES_NABBER, SPECIES_UNATHI, SPECIES_VOX, SPECIES_VOX_ARMALIS) - sprite_sheets = list( - SPECIES_VOX = 'icons/mob/species/vox/onmob_feet_vox.dmi', - SPECIES_VOX_ARMALIS = 'icons/mob/species/vox/onmob_feet_vox_armalis.dmi', - SPECIES_UNATHI = 'icons/mob/species/unathi/generated/onmob_feet_unathi.dmi', - ) - blood_overlay_type = "shoeblood" - var/overshoes = 0 - var/can_add_cuffs = TRUE - var/obj/item/handcuffs/attached_cuffs = null - var/can_add_hidden_item = TRUE - var/hidden_item_max_w_class = ITEM_SIZE_SMALL - var/obj/item/hidden_item = null - -/obj/item/clothing/shoes/Destroy() - . = ..() - if (hidden_item) - QDEL_NULL(hidden_item) - if (attached_cuffs) - QDEL_NULL(attached_cuffs) - -/obj/item/clothing/shoes/examine(mob/user) - . = ..() - if (attached_cuffs) - to_chat(user, SPAN_WARNING("They are connected by \the [attached_cuffs].")) - if (hidden_item) - if (loc == user) - to_chat(user, SPAN_ITALIC("\An [hidden_item] is inside.")) - else if (get_dist(src, user) == 1) - to_chat(user, SPAN_ITALIC("Something is hidden inside.")) - -/obj/item/clothing/shoes/attack_hand(var/mob/living/user) - if (remove_hidden(user)) - return - ..() - -/obj/item/clothing/shoes/attack_self(var/mob/user) - remove_cuffs(user) - ..() - - -/obj/item/clothing/shoes/attackby(obj/item/item, mob/living/user) - if (istype(item, /obj/item/handcuffs)) - add_cuffs(item, user) - else if (istype(item, /obj/item/clothing/shoes/magboots)) - user.equip_to_slot_if_possible(item, slot_shoes) - else - add_hidden(item, user) - - -/obj/item/clothing/shoes/proc/add_cuffs(var/obj/item/handcuffs/cuffs, var/mob/user) - if (!can_add_cuffs) - to_chat(user, SPAN_WARNING("\The [cuffs] can't be attached to \the [src].")) - return - if (attached_cuffs) - to_chat(user, SPAN_WARNING("\The [src] already has [attached_cuffs] attached.")) - return - if (do_after(user, 5 SECONDS, src, DO_DEFAULT | DO_BOTH_UNIQUE_ACT)) - if(!user.unEquip(cuffs, src)) - return - user.visible_message(SPAN_ITALIC("\The [user] attaches \the [cuffs] to \the [src]."), range = 2) - verbs |= /obj/item/clothing/shoes/proc/remove_cuffs - slowdown_per_slot[slot_shoes] += cuffs.elastic ? 5 : 10 - attached_cuffs = cuffs - -/obj/item/clothing/shoes/proc/remove_cuffs(var/mob/user) - set name = "Remove Shoe Cuffs" - set desc = "Get rid of those limiters and lengthen your stride." - set category = "Object" - set src in usr - - user = user || usr - if (!user) - return - if (!attached_cuffs) - return - if (user.incapacitated()) - return - if (do_after(user, 5 SECONDS, src, DO_DEFAULT | DO_BOTH_UNIQUE_ACT)) - if (!user.put_in_hands(attached_cuffs)) - to_chat(usr, SPAN_WARNING("You need an empty, unbroken hand to remove the [attached_cuffs] from the [src].")) - return - user.visible_message(SPAN_ITALIC("\The [user] removes \the [attached_cuffs] from \the [src]."), range = 2) - attached_cuffs.add_fingerprint(user) - slowdown_per_slot[slot_shoes] -= attached_cuffs.elastic ? 5 : 10 - verbs -= /obj/item/clothing/shoes/proc/remove_cuffs - attached_cuffs = null - -/obj/item/clothing/shoes/proc/add_hidden(var/obj/item/I, var/mob/user) - if (!can_add_hidden_item) - to_chat(user, SPAN_WARNING("\The [src] can't hold anything.")) - return - if (hidden_item) - to_chat(user, SPAN_WARNING("\The [src] already holds \an [hidden_item].")) - return - if (!(I.item_flags & ITEM_FLAG_CAN_HIDE_IN_SHOES) || (I.slot_flags & SLOT_DENYPOCKET)) - to_chat(user, SPAN_WARNING("\The [src] can't hold the [I].")) - return - if (I.w_class > hidden_item_max_w_class) - to_chat(user, SPAN_WARNING("\The [I] is too large to fit in the [src].")) - return - if (do_after(user, 1 SECONDS, src, DO_DEFAULT | DO_BOTH_UNIQUE_ACT)) - if(!user.unEquip(I, src)) - return - user.visible_message(SPAN_ITALIC("\The [user] shoves \the [I] into \the [src]."), range = 1) - verbs |= /obj/item/clothing/shoes/proc/remove_hidden - hidden_item = I - -/obj/item/clothing/shoes/proc/remove_hidden(var/mob/user) - set name = "Remove Shoe Item" - set desc = "Pull out whatever's hidden in your foot gloves." - set category = "Object" - set src in usr - - user = user || usr - if (!user) - return - if (!hidden_item) - return FALSE - if (user.incapacitated()) - return FALSE - if (loc != user) - return FALSE - if (do_after(user, 2 SECONDS, src, DO_DEFAULT | DO_BOTH_UNIQUE_ACT)) - if (!user.put_in_hands(hidden_item)) - to_chat(usr, SPAN_WARNING("You need an empty, unbroken hand to pull the [hidden_item] from the [src].")) - return TRUE - user.visible_message(SPAN_ITALIC("\The [user] pulls \the [hidden_item] from \the [src]."), range = 1) - playsound(get_turf(src), 'sound/effects/holster/tactiholsterout.ogg', 25) - verbs -= /obj/item/clothing/shoes/proc/remove_hidden - hidden_item = null - return TRUE - -/obj/item/clothing/shoes/proc/handle_movement(var/turf/walking, var/running) - if (running && attached_cuffs?.damage_health(1)) - visible_message(SPAN_WARNING("\The [attached_cuffs] attached to \the [src] snap and fall away!"), range = 1) - verbs -= /obj/item/clothing/shoes/proc/remove_cuffs - slowdown_per_slot[slot_shoes] -= attached_cuffs.elastic ? 5 : 10 - QDEL_NULL(attached_cuffs) - return - -/obj/item/clothing/shoes/update_clothing_icon() - if (ismob(src.loc)) - var/mob/M = src.loc - M.update_inv_shoes() - -/////////////////////////////////////////////////////////////////////// -//Suit -/obj/item/clothing/suit - icon = 'icons/obj/clothing/obj_suit.dmi' - name = "suit" - var/fire_resist = T0C+100 - body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS|LEGS - allowed = list( - /obj/item/tank/oxygen_emergency, - /obj/item/tank/oxygen_emergency_extended, - /obj/item/tank/oxygen_emergency_double, - /obj/item/tank/oxygen_scba, - /obj/item/tank/nitrogen_emergency - ) - slot_flags = SLOT_OCLOTHING - item_flags = ITEM_FLAG_WASHER_ALLOWED - blood_overlay_type = "suit" - siemens_coefficient = 0.9 - w_class = ITEM_SIZE_NORMAL - - sprite_sheets = list( - SPECIES_VOX = 'icons/mob/species/vox/onmob_suit_vox.dmi', - SPECIES_VOX_ARMALIS = 'icons/mob/species/vox/onmob_suit_vox_armalis.dmi', - SPECIES_UNATHI = 'icons/mob/species/unathi/generated/onmob_suit_unathi.dmi', - SPECIES_NABBER = 'icons/mob/species/nabber/onmob_suit_gas.dmi' - ) - -/obj/item/clothing/suit/update_clothing_icon() - if (ismob(src.loc)) - var/mob/M = src.loc - M.update_inv_wear_suit() - -/obj/item/clothing/suit/get_mob_overlay(mob/user_mob, slot) - var/image/ret = ..() - if(item_state_slots && item_state_slots[slot]) - ret.icon_state = item_state_slots[slot] - else - ret.icon_state = item_state - if(!ret.icon_state) - ret.icon_state = icon_state - return ret - -/obj/item/clothing/suit/handle_shield() - return FALSE - -/obj/item/clothing/suit/proc/get_collar() - var/icon/C = new('icons/mob/collar.dmi') - if(icon_state in C.IconStates()) - var/image/I = image(C, icon_state) - I.color = color - return I -/////////////////////////////////////////////////////////////////////// -//Under clothing -/obj/item/clothing/under - icon = 'icons/obj/clothing/obj_under.dmi' - item_icons = list( - slot_l_hand_str = 'icons/mob/onmob/items/lefthand_uniforms.dmi', - slot_r_hand_str = 'icons/mob/onmob/items/righthand_uniforms.dmi', - ) - name = "under" - body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS - permeability_coefficient = 0.90 - slot_flags = SLOT_ICLOTHING - item_flags = ITEM_FLAG_WASHER_ALLOWED - w_class = ITEM_SIZE_NORMAL - force = 0 - var/has_sensor = SUIT_HAS_SENSORS //For the crew computer 2 = unable to change mode - var/sensor_mode = SUIT_SENSOR_OFF - /* - 1 = Report living/dead - 2 = Report detailed damages - 3 = Report location - */ - var/displays_id = 1 - var/rolled_down = -1 //0 = unrolled, 1 = rolled, -1 = cannot be toggled - var/rolled_sleeves = -1 //0 = unrolled, 1 = rolled, -1 = cannot be toggled - sprite_sheets = list( - SPECIES_VOX = 'icons/mob/species/vox/onmob_under_vox.dmi', - SPECIES_VOX_ARMALIS = 'icons/mob/species/vox/onmob_under_vox_armalis.dmi', - SPECIES_NABBER = 'icons/mob/species/nabber/onmob_under_gas.dmi', - SPECIES_UNATHI = 'icons/mob/species/unathi/generated/onmob_under_unathi.dmi' - ) - - //convenience var for defining the icon state for the overlay used when the clothing is worn. - //Also used by rolling/unrolling. - var/worn_state = null - //Whether the clothing item has gender-specific states when worn. - var/gender_icons = 0 - valid_accessory_slots = list(ACCESSORY_SLOT_UTILITY,ACCESSORY_SLOT_HOLSTER,ACCESSORY_SLOT_ARMBAND,ACCESSORY_SLOT_RANK,ACCESSORY_SLOT_DEPT,ACCESSORY_SLOT_DECOR,ACCESSORY_SLOT_MEDAL,ACCESSORY_SLOT_INSIGNIA) - restricted_accessory_slots = list(ACCESSORY_SLOT_UTILITY,ACCESSORY_SLOT_HOLSTER,ACCESSORY_SLOT_ARMBAND,ACCESSORY_SLOT_RANK,ACCESSORY_SLOT_DEPT) - -/obj/item/clothing/under/New() - ..() - update_rolldown_status() - update_rollsleeves_status() - if(rolled_down == -1) - verbs -= /obj/item/clothing/under/verb/rollsuit - if(rolled_sleeves == -1) - verbs -= /obj/item/clothing/under/verb/rollsleeves - -/obj/item/clothing/under/inherit_custom_item_data(var/datum/custom_item/citem) - . = ..() - worn_state = icon_state - update_rolldown_status() - -/obj/item/clothing/under/proc/get_gender_suffix(var/suffix = "_s") - . = suffix - var/mob/living/carbon/human/H - if(istype(src.loc, /mob/living/carbon/human)) - H = src.loc - var/bodytype - if(ishuman(H)) - bodytype = H.species.get_bodytype(H) - - if(gender_icons && bodytype == SPECIES_HUMAN && H.gender == FEMALE) - . = "_f" + suffix - -/obj/item/clothing/under/get_icon_state(mob/user_mob, slot) - if(item_state_slots && item_state_slots[slot]) - . = item_state_slots[slot] - else - . = icon_state - if(!findtext(.,"_s", -2)) // If we don't already have our suffix - if((icon_state + "_f_s") in icon_states(GLOB.default_onmob_icons[slot_w_uniform_str])) - . += get_gender_suffix() - else - . += "_s" - -/obj/item/clothing/under/attack_hand(var/mob/user) - if(accessories && accessories.len) - ..() - if ((ishuman(usr) || issmall(usr)) && src.loc == user) - return - ..() - -/obj/item/clothing/under/New() - ..() - if(worn_state) - if(!item_state_slots) - item_state_slots = list() - item_state_slots[slot_w_uniform_str] = worn_state - else - worn_state = icon_state - //autodetect rollability - if(rolled_down < 0) - if(("[worn_state]_d_s") in icon_states(GLOB.default_onmob_icons[slot_w_uniform_str])) - rolled_down = 0 - -/obj/item/clothing/under/proc/update_rolldown_status() - var/mob/living/carbon/human/H - if(istype(src.loc, /mob/living/carbon/human)) - H = src.loc - - var/icon/under_icon - if(icon_override) - under_icon = icon_override - else if(H && sprite_sheets && sprite_sheets[H.species.get_bodytype(H)]) - under_icon = sprite_sheets[H.species.get_bodytype(H)] - else if(item_icons && item_icons[slot_w_uniform_str]) - under_icon = item_icons[slot_w_uniform_str] - else - under_icon = GLOB.default_onmob_icons[slot_w_uniform_str] - - // The _s is because the icon update procs append it. - if(("[worn_state]_d_s") in icon_states(under_icon)) - if(rolled_down != 1) - rolled_down = 0 - else - rolled_down = -1 - if(H) update_clothing_icon() - -/obj/item/clothing/under/proc/update_rollsleeves_status() - var/mob/living/carbon/human/H - if(istype(src.loc, /mob/living/carbon/human)) - H = src.loc - - var/icon/under_icon - if(icon_override) - under_icon = icon_override - else if(H && sprite_sheets && sprite_sheets[H.species.get_bodytype(H)]) - under_icon = sprite_sheets[H.species.get_bodytype(H)] - else if(item_icons && item_icons[slot_w_uniform_str]) - under_icon = item_icons[slot_w_uniform_str] - else - under_icon = GLOB.default_onmob_icons[slot_w_uniform_str] - - // The _s is because the icon update procs append it. - if(("[worn_state]_r_s") in icon_states(under_icon)) - if(rolled_sleeves != 1) - rolled_sleeves = 0 - else - rolled_sleeves = -1 - if(H) update_clothing_icon() - -/obj/item/clothing/under/update_clothing_icon() - if (ismob(src.loc)) - var/mob/M = src.loc - M.update_inv_w_uniform(0) - M.update_inv_wear_id() - - -/obj/item/clothing/under/examine(mob/user) - . = ..() - switch(src.sensor_mode) - if(SUIT_SENSOR_OFF) - to_chat(user, "Its sensors appear to be disabled.") - if(SUIT_SENSOR_BINARY) - to_chat(user, "Its binary life sensors appear to be enabled.") - if(SUIT_SENSOR_VITAL) - to_chat(user, "Its vital tracker appears to be enabled.") - if(SUIT_SENSOR_TRACKING) - to_chat(user, "Its vital tracker and tracking beacon appear to be enabled.") - -/obj/item/clothing/under/proc/set_sensors(mob/user as mob) - var/mob/M = user - if (isobserver(M)) return - if (user.incapacitated()) return - if(has_sensor >= SUIT_LOCKED_SENSORS) - to_chat(user, "The controls are locked.") - return 0 - if(has_sensor <= SUIT_NO_SENSORS) - to_chat(user, "This suit does not have any sensors.") - return 0 - - var/switchMode = input("Select a sensor mode:", "Suit Sensor Mode", get_key_by_index(SUIT_SENSOR_MODES, sensor_mode + 1)) as null | anything in SUIT_SENSOR_MODES - if(!switchMode) - return - if(get_dist(user, src) > 1) - to_chat(user, "You have moved too far away.") - return - sensor_mode = SUIT_SENSOR_MODES[switchMode] - - if (src.loc == user) - switch(sensor_mode) - if(SUIT_SENSOR_OFF) - user.visible_message("[user] adjusts the tracking sensor on \his [src.name].", "You disable your suit's remote sensing equipment.") - if(SUIT_SENSOR_BINARY) - user.visible_message("[user] adjusts the tracking sensor on \his [src.name].", "Your suit will now report whether you are live or dead.") - if(SUIT_SENSOR_VITAL) - user.visible_message("[user] adjusts the tracking sensor on \his [src.name].", "Your suit will now report your vital lifesigns.") - if(SUIT_SENSOR_TRACKING) - user.visible_message("[user] adjusts the tracking sensor on \his [src.name].", "Your suit will now report your vital lifesigns as well as your coordinate position.") - - else if (ismob(src.loc)) - if(sensor_mode == SUIT_SENSOR_OFF) - user.visible_message("[user] disables [src.loc]'s remote sensing equipment.", "You disable [src.loc]'s remote sensing equipment.") - else - user.visible_message("[user] adjusts the tracking sensor on [src.loc]'s [src.name].", "You adjust [src.loc]'s sensors.") - else - user.visible_message("[user] adjusts the tracking sensor on [src]", "You adjust the sensor on [src].") - -/obj/item/clothing/under/emp_act(var/severity) - ..() - var/new_mode - switch(severity) - if (EMP_ACT_HEAVY) - new_mode = pick(75;SUIT_SENSOR_OFF, 15;SUIT_SENSOR_BINARY, 10;SUIT_SENSOR_VITAL) - if (EMP_ACT_LIGHT) - new_mode = pick(50;SUIT_SENSOR_OFF, 25;SUIT_SENSOR_BINARY, 20;SUIT_SENSOR_VITAL, 5;SUIT_SENSOR_TRACKING) - - sensor_mode = new_mode - -/obj/item/clothing/under/verb/toggle() - set name = "Toggle Suit Sensors" - set category = "Object" - set src in usr - set_sensors(usr) - -/obj/item/clothing/under/verb/rollsuit() - set name = "Roll Down Jumpsuit" - set category = "Object" - set src in usr - if(!istype(usr, /mob/living)) return - if(usr.stat) return - - update_rolldown_status() - if(rolled_down == -1) - to_chat(usr, "You cannot roll down [src]!") - if((rolled_sleeves == 1) && !(rolled_down)) - rolled_sleeves = 0 - return - - rolled_down = !rolled_down - if(rolled_down) - body_parts_covered &= LOWER_TORSO|LEGS|FEET - item_state_slots[slot_w_uniform_str] = worn_state + get_gender_suffix("_d_s") - else - body_parts_covered = initial(body_parts_covered) - item_state_slots[slot_w_uniform_str] = worn_state + get_gender_suffix() - update_clothing_icon() - -/obj/item/clothing/under/verb/rollsleeves() - set name = "Roll Up Sleeves" - set category = "Object" - set src in usr - if(!istype(usr, /mob/living)) return - if(usr.stat) return - - update_rollsleeves_status() - if(rolled_sleeves == -1) - to_chat(usr, "You cannot roll up your [src]'s sleeves!") - return - if(rolled_down == 1) - to_chat(usr, "You must roll up your [src] first!") - return - - rolled_sleeves = !rolled_sleeves - if(rolled_sleeves) - body_parts_covered &= ~(ARMS|HANDS) - item_state_slots[slot_w_uniform_str] = worn_state + get_gender_suffix("_r_s") - to_chat(usr, "You roll up your [src]'s sleeves.") - else - body_parts_covered = initial(body_parts_covered) - item_state_slots[slot_w_uniform_str] = worn_state + get_gender_suffix() - to_chat(usr, "You roll down your [src]'s sleeves.") - update_clothing_icon() - -/obj/item/clothing/under/rank/New() - sensor_mode = pick(list_values(SUIT_SENSOR_MODES)) - ..() - -/obj/item/clothing/under/AltClick(var/mob/user) - if(CanPhysicallyInteract(user)) - set_sensors(user) - -/////////////////////////////////////////////////////////////////////// -//Rings - -/obj/item/clothing/ring - name = "ring" - w_class = ITEM_SIZE_TINY - icon = 'icons/obj/clothing/obj_hands_ring.dmi' - slot_flags = SLOT_GLOVES - gender = NEUTER - species_restricted = list("exclude", SPECIES_NABBER, SPECIES_DIONA) - var/undergloves = 1 - - -/obj/item/clothing/get_pressure_weakness(pressure,zone) - . = ..() - for(var/obj/item/clothing/accessory/A in accessories) - . = min(., A.get_pressure_weakness(pressure,zone)) diff --git a/code/modules/clothing/_clothing_flags.dm b/code/modules/clothing/_clothing_flags.dm deleted file mode 100644 index a8ae4b7487a51..0000000000000 --- a/code/modules/clothing/_clothing_flags.dm +++ /dev/null @@ -1,18 +0,0 @@ -/** - clothing flags - A field for collecting single behavior toggles into -*/ - -/// Flag this clothing item as attachable; for collapsing accessories into clothing at some point -#define CLOTHING_IS_COMPONENT FLAG(0) - -/// Flag this clothing item as being forensically identifiable -#define CLOTHING_HAS_FIBERS FLAG(1) - -#define CLOTHING_FLAGS_DEFAULT (CLOTHING_HAS_FIBERS) -#define CLOTHING_FLAGS_DEFAULT_FIBERLESS (EMPTY_BITFIELD) -#define CLOTHING_FLAGS_ACCESSORY_DEFAULT (CLOTHING_IS_COMPONENT|CLOTHING_HAS_FIBERS) -#define CLOTHING_FLAGS_ACCESSORY_DEFAULT_FIBERLESS (CLOTHING_IS_COMPONENT) - -/obj/item/clothing/var/clothing_flags = CLOTHING_FLAGS_DEFAULT -/obj/item/clothing/accessory/clothing_flags = CLOTHING_FLAGS_ACCESSORY_DEFAULT diff --git a/code/modules/clothing/buttons.dm b/code/modules/clothing/buttons.dm deleted file mode 100644 index 5533ec498c670..0000000000000 --- a/code/modules/clothing/buttons.dm +++ /dev/null @@ -1,32 +0,0 @@ -/obj/item/clothing/var/buttons_state -/obj/item/clothing/var/buttons_suffix -/obj/item/clothing/var/custom_icon_state - - -/obj/item/clothing/proc/toggle_buttons() - set name = "Toggle Buttons" - set category = "Object" - set src in usr - if(usr.incapacitated()) - return - buttons_state = !buttons_state - icon_state = "[custom_icon_state ? custom_icon_state : initial(icon_state)][buttons_state ? buttons_suffix : ""]" - to_chat(usr, "You [buttons_state ? "unbutton": "button up"] \the [src].") - update_clothing_icon() - - -/obj/item/clothing/Initialize() - . = ..() - if (buttons_suffix) - verbs |= /obj/item/clothing/proc/toggle_buttons - - -/obj/item/clothing/suit/storage/toggle/buttons_suffix = "_open" -/obj/item/clothing/suit/storage/toggle/valid_accessory_slots = ACCESSORY_SLOT_INSIGNIA - - - -/obj/item/clothing/suit/storage/toggle/inherit_custom_item_data(datum/custom_item/citem) - . = ..() - if (citem.additional_data["custom_icon_state"]) - custom_icon_state = citem.additional_data["custom_icon_state"] diff --git a/code/modules/clothing/chameleon.dm b/code/modules/clothing/chameleon.dm deleted file mode 100644 index 484c7af5bafe5..0000000000000 --- a/code/modules/clothing/chameleon.dm +++ /dev/null @@ -1,140 +0,0 @@ -/obj/item/clothing/under/chameleon - name = "jumpsuit" - icon_state = "jumpsuit" - item_state = "jumpsuit" - worn_state = "jumpsuit" - desc = "It's a plain jumpsuit. It seems to have a small dial on the wrist." - origin_tech = list(TECH_ESOTERIC = 3) - item_flags = ITEM_FLAG_INVALID_FOR_CHAMELEON - -/obj/item/clothing/under/chameleon/Initialize() - . = ..() - set_extension(src,/datum/extension/chameleon/clothing) - -/obj/item/clothing/head/chameleon - name = "cap" - icon_state = "greysoft" - desc = "It looks like a plain hat, but upon closer inspection, there's an advanced holographic array installed inside. It seems to have a small dial inside." - origin_tech = list(TECH_ESOTERIC = 3) - body_parts_covered = 0 - item_flags = ITEM_FLAG_INVALID_FOR_CHAMELEON - -/obj/item/clothing/head/chameleon/Initialize() - . = ..() - set_extension(src,/datum/extension/chameleon/clothing) - -/obj/item/clothing/suit/chameleon - name = "armor" - icon_state = "armor" - item_state = "armor" - desc = "It appears to be a vest of standard armor, except this is embedded with a hidden holographic cloaker, allowing it to change it's appearance, but offering no protection.. It seems to have a small dial inside." - origin_tech = list(TECH_ESOTERIC = 3) - item_flags = ITEM_FLAG_INVALID_FOR_CHAMELEON - -/obj/item/clothing/suit/chameleon/Initialize() - . = ..() - set_extension(src,/datum/extension/chameleon/clothing) - -/obj/item/clothing/shoes/chameleon - name = "shoes" - icon_state = "black" - item_state = "black" - desc = "They're comfy black shoes, with clever cloaking technology built in. It seems to have a small dial on the back of each shoe." - origin_tech = list(TECH_ESOTERIC = 3) - item_flags = ITEM_FLAG_INVALID_FOR_CHAMELEON - -/obj/item/clothing/shoes/chameleon/Initialize() - . = ..() - set_extension(src,/datum/extension/chameleon/clothing) - -/obj/item/storage/backpack/chameleon - name = "backpack" - icon_state = "backpack" - item_state = "backpack" - desc = "A backpack outfitted with cloaking tech. It seems to have a small dial inside, kept away from the storage." - origin_tech = list(TECH_ESOTERIC = 3) - item_flags = ITEM_FLAG_INVALID_FOR_CHAMELEON - -/obj/item/storage/backpack/chameleon/Initialize() - . = ..() - set_extension(src,/datum/extension/chameleon/backpack,/obj/item/storage/backpack) - -/obj/item/clothing/gloves/chameleon - name = "gloves" - icon_state = "black" - item_state = "bgloves" - desc = "It looks like a pair of gloves, but it seems to have a small dial inside." - origin_tech = list(TECH_ESOTERIC = 3) - item_flags = ITEM_FLAG_INVALID_FOR_CHAMELEON - -/obj/item/clothing/gloves/chameleon/Initialize() - . = ..() - set_extension(src,/datum/extension/chameleon/clothing) - -/obj/item/clothing/mask/chameleon - name = "mask" - icon_state = "fullgas" - item_state = "gas_alt" - desc = "It looks like a plain gask mask, but on closer inspection, it seems to have a small dial inside." - origin_tech = list(TECH_ESOTERIC = 3) - item_flags = ITEM_FLAG_INVALID_FOR_CHAMELEON - -/obj/item/clothing/mask/chameleon/Initialize() - . = ..() - set_extension(src,/datum/extension/chameleon/clothing,/obj/item/clothing/mask) - -/obj/item/clothing/glasses/chameleon - name = "goggles" - icon_state = "meson" - item_state = "glasses" - desc = "It looks like a plain set of mesons, but on closer inspection, it seems to have a small dial inside." - origin_tech = list(TECH_ESOTERIC = 3) - item_flags = ITEM_FLAG_INVALID_FOR_CHAMELEON - -/obj/item/clothing/glasses/chameleon/Initialize() - . = ..() - set_extension(src,/datum/extension/chameleon/clothing) - -/obj/item/device/radio/headset/chameleon - name = "radio headset" - icon_state = "headset" - item_state = "headset" - desc = "An updated, modular intercom that fits over the head. This one seems to have a small dial on it." - origin_tech = list(TECH_ESOTERIC = 3) - item_flags = ITEM_FLAG_INVALID_FOR_CHAMELEON - -/obj/item/device/radio/headset/chameleon/Initialize() - . = ..() - set_extension(src,/datum/extension/chameleon/headset) - -/obj/item/clothing/accessory/chameleon - name = "tie" - icon_state = "tie" - item_state = "" - desc = "A neosilk clip-on tie. It seems to have a small dial on its back." - origin_tech = list(TECH_ESOTERIC = 3) - item_flags = ITEM_FLAG_INVALID_FOR_CHAMELEON - -/obj/item/clothing/accessory/chameleon/Initialize() - . = ..() - set_extension(src,/datum/extension/chameleon/clothing/accessory) - -/obj/item/gun/energy/chameleon - name = "chameleon gun" - desc = "A hologram projector in the shape of a gun. There is a dial on the side to change the gun's disguise." - icon = 'icons/obj/guns/revolvers.dmi' - icon_state = "revolver" - w_class = ITEM_SIZE_SMALL - origin_tech = list(TECH_COMBAT = 2, TECH_MATERIAL = 2, TECH_ESOTERIC = 8) - item_flags = ITEM_FLAG_INVALID_FOR_CHAMELEON - matter = list() - - fire_sound = 'sound/weapons/gunshot/gunshot_pistol.ogg' - projectile_type = /obj/item/projectile/chameleon - charge_meter = 0 - charge_cost = 20 //uses next to no power, since it's just holograms - max_shots = 50 - -/obj/item/gun/energy/chameleon/Initialize() - . = ..() - set_extension(src,/datum/extension/chameleon/gun) diff --git a/code/modules/clothing/clothing_accessories.dm b/code/modules/clothing/clothing_accessories.dm deleted file mode 100644 index 434456b931627..0000000000000 --- a/code/modules/clothing/clothing_accessories.dm +++ /dev/null @@ -1,187 +0,0 @@ -/obj/item/clothing/proc/can_attach_accessory(obj/item/clothing/accessory/A, mob/user) - if (!length(valid_accessory_slots)) - if (user) - to_chat(user, SPAN_WARNING("\The [src] can't take any attachments.")) - return FALSE - - if (!istype(A) || !(A.slot in valid_accessory_slots)) - if (user) - to_chat(user, SPAN_WARNING("\The [A] can't attach to \the [src].")) - return FALSE - - if (accessories.len && restricted_accessory_slots && (A.slot in restricted_accessory_slots)) - for (var/obj/item/clothing/accessory/AC in accessories) - if (AC.slot == A.slot) - if (user) - to_chat(user, SPAN_WARNING("\The [src] can't attach more accessories of that type.")) - return FALSE - - var/bulky = A.get_bulky_coverage() - if (bulky) - if (bulky & get_bulky_coverage()) - if (user) - to_chat(user, SPAN_WARNING("\The [src] is already too bulky to attach \the [A].")) - return FALSE - - if (ishuman(loc)) - var/mob/living/carbon/human/H = loc - if (src != H.l_hand && src != H.r_hand) - for (var/obj/item/clothing/C in H.get_equipped_items()) - if ((C != src) && (C.get_bulky_coverage() & bulky)) - if (user) - to_chat(user, SPAN_WARNING("\The [A] is too bulky to wear with \the [C].")) - return FALSE - return TRUE - - -/obj/item/clothing/attackby(obj/item/I, mob/user) - if (attempt_attach_accessory(I, user)) - return - if (attempt_store_item(I, user)) - return - ..() - -/obj/item/clothing/attack_hand(var/mob/user) - //only forward to the attached accessory if the clothing is equipped (not in a storage) - if(accessories.len && src.loc == user) - for(var/obj/item/clothing/accessory/A in accessories) - A.attack_hand(user) - return - return ..() - -/obj/item/clothing/MouseDrop(var/obj/over_object) - if (!over_object || !(ishuman(usr) || issmall(usr))) - return - - //makes sure that the clothing is equipped so that we can't drag it into our hand from miles away. - if (!(src.loc == usr)) - return - - if (usr.incapacitated()) - return - - switch(over_object.name) - if("r_hand") - if (usr.unEquip(src)) - usr.put_in_r_hand(src) - if("l_hand") - if (usr.unEquip(src)) - usr.put_in_l_hand(src) - src.add_fingerprint(usr) - -/obj/item/clothing/examine(mob/user) - . = ..() - for(var/obj/item/clothing/accessory/A in accessories) - if (!(A.accessory_flags & ACCESSORY_HIDDEN)) - to_chat(user, "[icon2html(A, user)] \A [A] is attached to it.") - switch(ironed_state) - if(WRINKLES_WRINKLY) - to_chat(user, "It's wrinkly.") - if(WRINKLES_NONE) - to_chat(user, "It's completely wrinkle-free!") - switch(smell_state) - if(SMELL_CLEAN) - to_chat(user, "It smells clean!") - if(SMELL_STINKY) - to_chat(user, "It's quite stinky!") - - -/obj/item/clothing/proc/update_accessory_slowdown() - slowdown_accessory = 0 - for(var/obj/item/clothing/accessory/A in accessories) - slowdown_accessory += A.slowdown - -/** - * Attach accessory A to src - * - * user is the user doing the attaching. Can be null, such as when attaching - * items on spawn - */ -/obj/item/clothing/proc/attach_accessory(mob/user, obj/item/clothing/accessory/A) - accessories += A - A.on_attached(src, user) - if (A.accessory_flags & ACCESSORY_REMOVABLE) - src.verbs |= /obj/item/clothing/proc/removetie_verb - update_accessory_slowdown() - update_clothing_icon() - -/obj/item/clothing/proc/remove_accessory(mob/user, obj/item/clothing/accessory/A) - if(!A || !(A in accessories)) - return - - A.on_removed(user) - accessories -= A - update_accessory_slowdown() - update_clothing_icon() - - -/obj/item/clothing/proc/attempt_attach_accessory(obj/item/I, mob/user) - if (!istype(I, /obj/item/clothing/accessory)) - return FALSE - if (can_attach_accessory(I, user) && user.unEquip(I)) - attach_accessory(user, I) - return TRUE - if (length(accessories)) - for (var/obj/item/clothing/accessory/A in accessories) - if (A.attempt_attach_accessory(I, user)) - return TRUE - return FALSE - - -/obj/item/clothing/accessory/storage/proc/can_be_inserted(obj/item/I, mob/user, silent) - return container?.can_be_inserted(I, user, silent) - - -/obj/item/clothing/accessory/storage/proc/handle_item_insertion(obj/item/I, silent, no_update) - return container?.handle_item_insertion(I, silent, no_update) - - -/obj/item/clothing/proc/attempt_store_item(obj/item/I, mob/user, silent) - for (var/obj/item/clothing/accessory/storage/S in accessories) - if (S.can_be_inserted(I, user, TRUE) && S.handle_item_insertion(I, silent)) - return TRUE - return FALSE - - -/obj/item/clothing/suit/storage/attempt_store_item(obj/item/I, mob/user, silent) - if (pockets?.can_be_inserted(I, user, TRUE) && pockets.handle_item_insertion(I, silent)) - return TRUE - return ..() - - -/obj/item/clothing/accessory/storage/holster/can_be_inserted(obj/item/I, mob/user, silent) - var/datum/extension/holster/H = get_extension(src, /datum/extension/holster) - return H?.can_holster(I) - - -/obj/item/clothing/accessory/storage/holster/handle_item_insertion(obj/item/I, silent, no_update) - var/datum/extension/holster/H = get_extension(src, /datum/extension/holster) - return H.holster(I, usr) - - -/obj/item/clothing/proc/removetie_verb() - set name = "Remove Accessory" - set category = "Object" - set src in usr - if(!istype(usr, /mob/living)) return - if(usr.stat) return - if(!accessories.len) return - var/obj/item/clothing/accessory/A - var/list/removables = list() - for(var/obj/item/clothing/accessory/ass in accessories) - if (ass.accessory_flags & ACCESSORY_REMOVABLE) - removables |= ass - if(accessories.len > 1) - A = input("Select an accessory to remove from [src]") as null|anything in removables - else - A = accessories[1] - src.remove_accessory(usr,A) - removables -= A - if(!removables.len) - src.verbs -= /obj/item/clothing/proc/removetie_verb - -/obj/item/clothing/emp_act(severity) - if(accessories.len) - for(var/obj/item/clothing/accessory/A in accessories) - A.emp_act(severity) - ..() diff --git a/code/modules/clothing/clothing_forensics.dm b/code/modules/clothing/clothing_forensics.dm deleted file mode 100644 index 535b78066e294..0000000000000 --- a/code/modules/clothing/clothing_forensics.dm +++ /dev/null @@ -1,110 +0,0 @@ -/** - clothing_forensics - Behaviors related to detecting crime based on clothing items -*/ - - -/// Alternative name for fibers to allow for more vagueness -/obj/item/clothing/var/fiber_name - - -/// Build a string for contact forensic evidence -/obj/item/clothing/proc/get_fibers() - if (~clothing_flags & CLOTHING_HAS_FIBERS) - return - var/list/others = list() - for (var/obj/item/clothing/accessory/A as anything in accessories) - if ((A.clothing_flags & CLOTHING_HAS_FIBERS) && prob(50)) - others += A.get_fibers() - return "material from \a [fiber_name || name][others.len ? " and [english_list(others)]" : ""]" - - -/obj/item/clothing/gloves/get_fibers() - return "material from a pair of [fiber_name || name]." - - -/obj/item/clothing/shoes/get_fibers() - return "material from a pair of [fiber_name || name]." - - -/// Clothing can have prints and be made wrinkly by grabs, etc -/obj/item/clothing/proc/leave_evidence(mob/source) - add_fingerprint(source) - if (prob(10)) - ironed_state = WRINKLES_WRINKLY - - -// Setting fiber_name for common uniform bits to make them less stand-outish. Probably not exhaustive. - -/obj/item/clothing/under/solgov/utility/expeditionary/fiber_name = "expeditionary uniform" -/obj/item/clothing/under/solgov/utility/expeditionary_skirt/fiber_name = "expeditionary uniform" -/obj/item/clothing/under/solgov/dress/expeditionary/fiber_name = "expeditionary dress uniform" -/obj/item/clothing/suit/storage/solgov/service/expeditionary/fiber_name = "expeditionary jacket" -/obj/item/clothing/suit/storage/solgov/dress/expedition/fiber_name = "expeditionary dress coat" - -/obj/item/clothing/under/solgov/utility/fleet/fiber_name = "fleet coveralls" -/obj/item/clothing/under/solgov/utility/fleet/polopants/fiber_name = "fleet polo and pants" -/obj/item/clothing/under/solgov/utility/fleet/combat/fiber_name = "fleet fatigues" -/obj/item/clothing/under/solgov/service/fleet/fiber_name = "fleet service uniform" -/obj/item/clothing/suit/storage/jacket/solgov/fleet/fiber_name = "fleet jacket" -/obj/item/clothing/suit/storage/solgov/service/fleet/fiber_name = "fleet service jacket" -/obj/item/clothing/suit/storage/solgov/dress/fleet/fiber_name = "fleet dress jacket" - -/obj/item/clothing/under/solgov/utility/army/fiber_name = "army fatigues" -/obj/item/clothing/under/solgov/service/army/fiber_name = "army service uniform" -/obj/item/clothing/under/solgov/mildress/army/fiber_name = "army dress uniform" -/obj/item/clothing/suit/storage/solgov/utility/army/fiber_name = "green army jacket" -/obj/item/clothing/suit/storage/solgov/utility/army/navy/fiber_name = "navy army jacket" -/obj/item/clothing/suit/dress/solgov/army/fiber_name = "army dress jacket" - - -// Removing the has_fibers flag from things that should not leave forensic traces. Probably not exhaustive. - -/obj/item/clothing/gloves/insulated/clothing_flags = CLOTHING_FLAGS_DEFAULT_FIBERLESS -/obj/item/clothing/gloves/latex/clothing_flags = CLOTHING_FLAGS_DEFAULT_FIBERLESS - -/obj/item/clothing/shoes/galoshes/clothing_flags = CLOTHING_FLAGS_DEFAULT_FIBERLESS - -/obj/item/clothing/suit/space/void/clothing_flags = CLOTHING_FLAGS_DEFAULT_FIBERLESS -/obj/item/clothing/suit/space/rig/clothing_flags = CLOTHING_FLAGS_DEFAULT_FIBERLESS -/obj/item/clothing/suit/radiation/clothing_flags = CLOTHING_FLAGS_DEFAULT_FIBERLESS -/obj/item/clothing/suit/bio_suit/clothing_flags = CLOTHING_FLAGS_DEFAULT_FIBERLESS -/obj/item/clothing/suit/rubber/clothing_flags = CLOTHING_FLAGS_DEFAULT_FIBERLESS -/obj/item/clothing/suit/chameleon/clothing_flags = CLOTHING_FLAGS_DEFAULT_FIBERLESS -/obj/item/clothing/suit/armor/clothing_flags = CLOTHING_FLAGS_DEFAULT_FIBERLESS -/obj/item/clothing/suit/armor/pcarrier/clothing_flags = CLOTHING_FLAGS_DEFAULT //re-adding fibers to plate carriers - -/obj/item/clothing/accessory/chameleon/clothing_flags = CLOTHING_FLAGS_ACCESSORY_DEFAULT_FIBERLESS -/obj/item/clothing/accessory/storage/holster/clothing_flags = CLOTHING_FLAGS_ACCESSORY_DEFAULT_FIBERLESS -/obj/item/clothing/accessory/storage/pouches/clothing_flags = CLOTHING_FLAGS_ACCESSORY_DEFAULT_FIBERLESS -/obj/item/clothing/accessory/storage/knifeharness/clothing_flags = CLOTHING_FLAGS_ACCESSORY_DEFAULT_FIBERLESS -/obj/item/clothing/accessory/storage/bandolier/clothing_flags = CLOTHING_FLAGS_ACCESSORY_DEFAULT_FIBERLESS -/obj/item/clothing/accessory/medal/clothing_flags = CLOTHING_FLAGS_ACCESSORY_DEFAULT_FIBERLESS -/obj/item/clothing/accessory/stethoscope/clothing_flags = CLOTHING_FLAGS_ACCESSORY_DEFAULT_FIBERLESS -/obj/item/clothing/accessory/pride_pin/clothing_flags = CLOTHING_FLAGS_ACCESSORY_DEFAULT_FIBERLESS -/obj/item/clothing/accessory/pronouns/clothing_flags = CLOTHING_FLAGS_ACCESSORY_DEFAULT_FIBERLESS -/obj/item/clothing/accessory/arm_guards/clothing_flags = CLOTHING_FLAGS_ACCESSORY_DEFAULT_FIBERLESS -/obj/item/clothing/accessory/leg_guards/clothing_flags = CLOTHING_FLAGS_ACCESSORY_DEFAULT_FIBERLESS -/obj/item/clothing/accessory/badge/clothing_flags = CLOTHING_FLAGS_ACCESSORY_DEFAULT_FIBERLESS -/obj/item/clothing/accessory/armor_plate/clothing_flags = CLOTHING_FLAGS_ACCESSORY_DEFAULT_FIBERLESS -/obj/item/clothing/accessory/locket/clothing_flags = CLOTHING_FLAGS_ACCESSORY_DEFAULT_FIBERLESS -/obj/item/clothing/accessory/armor_tag/clothing_flags = CLOTHING_FLAGS_ACCESSORY_DEFAULT_FIBERLESS -/obj/item/clothing/accessory/necklace/clothing_flags = CLOTHING_FLAGS_ACCESSORY_DEFAULT_FIBERLESS -/obj/item/clothing/accessory/kneepads/clothing_flags = CLOTHING_FLAGS_ACCESSORY_DEFAULT_FIBERLESS -/obj/item/clothing/accessory/bracelet/clothing_flags = CLOTHING_FLAGS_ACCESSORY_DEFAULT_FIBERLESS -/obj/item/clothing/accessory/buddy_tag/clothing_flags = CLOTHING_FLAGS_ACCESSORY_DEFAULT_FIBERLESS -/obj/item/clothing/accessory/chaplain/clothing_flags = CLOTHING_FLAGS_ACCESSORY_DEFAULT_FIBERLESS -/obj/item/clothing/accessory/ftu_pin/clothing_flags = CLOTHING_FLAGS_ACCESSORY_DEFAULT_FIBERLESS -/obj/item/clothing/accessory/wristwatches/clothing_flags = CLOTHING_FLAGS_ACCESSORY_DEFAULT_FIBERLESS -/obj/item/clothing/accessory/solgov/skillbadge/clothing_flags = CLOTHING_FLAGS_ACCESSORY_DEFAULT_FIBERLESS -/obj/item/clothing/accessory/solgov/skillstripe/clothing_flags = CLOTHING_FLAGS_ACCESSORY_DEFAULT_FIBERLESS -/obj/item/clothing/accessory/solgov/torch_patch/clothing_flags = CLOTHING_FLAGS_ACCESSORY_DEFAULT_FIBERLESS -/obj/item/clothing/accessory/solgov/ec_patch/clothing_flags = CLOTHING_FLAGS_ACCESSORY_DEFAULT_FIBERLESS -/obj/item/clothing/accessory/solgov/cultex_patch/clothing_flags = CLOTHING_FLAGS_ACCESSORY_DEFAULT_FIBERLESS -/obj/item/clothing/accessory/solgov/fleet_patch/clothing_flags = CLOTHING_FLAGS_ACCESSORY_DEFAULT_FIBERLESS -/obj/item/clothing/accessory/solgov/specialty/clothing_flags = CLOTHING_FLAGS_ACCESSORY_DEFAULT_FIBERLESS -/obj/item/clothing/accessory/solgov/department/clothing_flags = CLOTHING_FLAGS_ACCESSORY_DEFAULT_FIBERLESS -/obj/item/clothing/accessory/solgov/rank/clothing_flags = CLOTHING_FLAGS_ACCESSORY_DEFAULT_FIBERLESS -/obj/item/clothing/accessory/solgov/clothing_flags = CLOTHING_FLAGS_ACCESSORY_DEFAULT_FIBERLESS -/obj/item/clothing/accessory/ribbon/clothing_flags = CLOTHING_FLAGS_ACCESSORY_DEFAULT_FIBERLESS -/obj/item/clothing/accessory/terran/clothing_flags = CLOTHING_FLAGS_ACCESSORY_DEFAULT_FIBERLESS diff --git a/code/modules/clothing/ears/earrings.dm b/code/modules/clothing/ears/earrings.dm deleted file mode 100644 index 6660714e705b2..0000000000000 --- a/code/modules/clothing/ears/earrings.dm +++ /dev/null @@ -1,80 +0,0 @@ -//Material earrings -/obj/item/clothing/ears/earring - name = "earring" - desc = "An earring of some kind." - icon = 'icons/obj/clothing/obj_ears.dmi' - gender = PLURAL - species_restricted = list(SPECIES_HUMAN) - -/obj/item/clothing/ears/earring/stud - name = "pearl stud earrings" - desc = "A pair of small stud earrings." - icon_state = "ear_stud" - color = "#eae0c8" - -/obj/item/clothing/ears/earring/stud/glass - name = "glass stud earrings" - color = "#00e1ff" - -/obj/item/clothing/ears/earring/stud/wood - name = "wood stud earrings" - color = "#824b28" - -/obj/item/clothing/ears/earring/stud/iron - name = "iron stud earrings" - color = "#5c5454" - -/obj/item/clothing/ears/earring/stud/steel - name = "steel stud earrings" - color = "#666666" - -/obj/item/clothing/ears/earring/stud/silver - name = "silver stud earrings" - color = "#d1e6e3" - -/obj/item/clothing/ears/earring/stud/gold - name = "gold stud earrings" - color = "#edd12f" - -/obj/item/clothing/ears/earring/stud/platinum - name = "platinum stud earrings" - color = "#9999ff" - -/obj/item/clothing/ears/earring/stud/diamond - name = "diamond stud earrings" - color = "#00ffe1" - -/obj/item/clothing/ears/earring/dangle - icon_state = "ear_dangle" - -/obj/item/clothing/ears/earring/dangle/glass - name = "glass dangle earrings" - color = "#00e1ff" - -/obj/item/clothing/ears/earring/dangle/wood - name = "wood dangle earrings" - color = "#824b28" - -/obj/item/clothing/ears/earring/dangle/iron - name = "iron dangle earrings" - color = "#5c5454" - -/obj/item/clothing/ears/earring/dangle/steel - name = "steel dangle earrings" - color = "#666666" - -/obj/item/clothing/ears/earring/dangle/silver - name = "silver dangle earrings" - color = "#d1e6e3" - -/obj/item/clothing/ears/earring/dangle/gold - name = "gold dangle earrings" - color = "#edd12f" - -/obj/item/clothing/ears/earring/dangle/platinum - name = "platinum dangle earrings" - color = "#9999ff" - -/obj/item/clothing/ears/earring/dangle/diamond - name = "diamond dangle earrings" - color = "#00ffe1" diff --git a/code/modules/clothing/ears/headphones.dm b/code/modules/clothing/ears/headphones.dm deleted file mode 100644 index 3f6617f200b59..0000000000000 --- a/code/modules/clothing/ears/headphones.dm +++ /dev/null @@ -1,40 +0,0 @@ -/obj/item/clothing/ears/headphones - name = "headphones" - desc = "It's probably not in accordance with company policy to listen to music on the job... but fuck it." - icon_state = "headphones_off" - item_state = "headphones_off" - slot_flags = SLOT_EARS | SLOT_TWOEARS - volume_multiplier = 0.5 - var/jukebox/jukebox - - -/obj/item/clothing/ears/headphones/Initialize() - . = ..() - var/ui_name = pick("Sandhouse", "Booze", "Boom & Olaf", "Jumble", "Sonnie", "Sonic-Technical") - ui_name += " [pick("Headphones", "Monitors", "Skullshakers", "Brain Jigglers", "Sonic Dewaxers")]" - jukebox = new(src, "boombox.tmpl", ui_name, 400, 150) - jukebox.range = 0 - - -/obj/item/clothing/ears/headphones/Destroy() - QDEL_NULL(jukebox) - . = ..() - - -/obj/item/clothing/ears/headphones/attack_self(mob/user) - jukebox.ui_interact(user) - - -/obj/item/clothing/ears/headphones/MouseDrop(mob/user) - jukebox.ui_interact(user) - - -/obj/item/clothing/ears/headphones/on_update_icon() - if (jukebox.playing) - icon_state = "headphones_on" - item_state = "headphones_on" - else - icon_state = "headphones_off" - item_state = "headphones_off" - update_clothing_icon() - \ No newline at end of file diff --git a/code/modules/clothing/ears/skrell.dm b/code/modules/clothing/ears/skrell.dm deleted file mode 100644 index 71e3863584dc0..0000000000000 --- a/code/modules/clothing/ears/skrell.dm +++ /dev/null @@ -1,124 +0,0 @@ -/* - Skrell tentacle wear -*/ - -/obj/item/clothing/ears/skrell - name = "skrell headtail wear" - desc = "Some stuff worn by skrell to adorn their headtails." - icon = 'icons/obj/clothing/obj_ears.dmi' - gender = PLURAL - w_class = ITEM_SIZE_TINY - slot_flags = SLOT_EARS - species_restricted = list(SPECIES_SKRELL) - -/obj/item/clothing/ears/skrell/chain - name = "gold headtail chains" - desc = "A delicate golden chain worn by female skrell to decorate their head tails." - icon_state = "skrell_chain" - -/obj/item/clothing/ears/skrell/chain/silver - name = "silver headtail chains" - desc = "A delicate silver chain worn by female skrell to decorate their head tails." - icon_state = "skrell_chain_sil" - -/obj/item/clothing/ears/skrell/chain/bluejewels - name = "blue jeweled golden headtail chains" - desc = "A delicate golden chain adorned with blue jewels worn by female skrell to decorate their head tails." - icon_state = "skrell_chain_bjewel" - -/obj/item/clothing/ears/skrell/chain/redjewels - name = "red jeweled golden headtail chains" - desc = "A delicate golden chain adorned with red jewels worn by female skrell to decorate their head tails." - icon_state = "skrell_chain_rjewel" - -/obj/item/clothing/ears/skrell/chain/ebony - name = "ebony headtail chains" - desc = "A delicate ebony chain worn by female skrell to decorate their head tails." - icon_state = "skrell_chain_ebony" - -/obj/item/clothing/ears/skrell/band - name = "gold headtail bands" - desc = "Golden metallic bands worn by male skrell to adorn their head tails." - icon_state = "skrell_band" - -/obj/item/clothing/ears/skrell/band/silver - name = "silver headtail bands" - desc = "Silver metallic bands worn by male skrell to adorn their head tails." - icon_state = "skrell_band_sil" - -/obj/item/clothing/ears/skrell/band/bluejewels - name = "blue jeweled golden headtail bands" - desc = "Golden metallic bands adorned with blue jewels worn by male skrell to adorn their head tails." - icon_state = "skrell_band_bjewel" - -/obj/item/clothing/ears/skrell/band/redjewels - name = "red jeweled golden headtail bands" - desc = "Golden metallic bands adorned with red jewels worn by male skrell to adorn their head tails." - icon_state = "skrell_band_rjewel" - -/obj/item/clothing/ears/skrell/band/ebony - name = "ebony headtail bands" - desc = "Ebony bands worn by male skrell to adorn their head tails." - icon_state = "skrell_band_ebony" - -//Colourizable, for loadout -/obj/item/clothing/ears/skrell/colored/band - name = "colored headtail bands" - desc = "Metallic bands worn by male skrell to adorn their head tails." - icon_state = "skrell_band_sil" - -//Colourizable, for loadout -/obj/item/clothing/ears/skrell/colored/chain - name = "colored headtail chains" - desc = "A delicate chain worn by female skrell to decorate their head tails." - icon_state = "skrell_chain_sil" - -/obj/item/clothing/ears/skrell/cloth_female - name = "headtail cloth" - desc = "A cloth shawl worn by female skrell draped around their head tails." - icon_state = "skrell_cloth_female" - item_flags = ITEM_FLAG_WASHER_ALLOWED - -//spawnable presets -/obj/item/clothing/ears/skrell/cloth_female/red - color = "#c20c00" - -/obj/item/clothing/ears/skrell/cloth_female/blue - color = "#0227f7" - -/obj/item/clothing/ears/skrell/cloth_female/lblue - color = "#6262ff" - -/obj/item/clothing/ears/skrell/cloth_female/black - color = "#454545" - -/obj/item/clothing/ears/skrell/cloth_female/green - color = "#009900" - -/obj/item/clothing/ears/skrell/cloth_female/pink - color = "#e17291" - -/obj/item/clothing/ears/skrell/cloth_male - name = "headtail cloth" - desc = "A cloth band worn by male skrell around their head tails." - icon_state = "skrell_cloth_male" - item_flags = ITEM_FLAG_WASHER_ALLOWED - -//spawnable presets -/obj/item/clothing/ears/skrell/cloth_male/red - color = "#c20c00" - -/obj/item/clothing/ears/skrell/cloth_male/blue - color = "#0227f7" - -/obj/item/clothing/ears/skrell/cloth_male/lblue - color = "#6262ff" - -/obj/item/clothing/ears/skrell/cloth_male/black - color = "#454545" - -/obj/item/clothing/ears/skrell/cloth_male/green - color = "#009900" - -/obj/item/clothing/ears/skrell/cloth_male/pink - color = "#e17291" diff --git a/code/modules/clothing/glasses/blindfolds.dm b/code/modules/clothing/glasses/blindfolds.dm deleted file mode 100644 index 67722f63c2eda..0000000000000 --- a/code/modules/clothing/glasses/blindfolds.dm +++ /dev/null @@ -1,40 +0,0 @@ -/obj/item/clothing/glasses/blindfold - name = "blindfold" - desc = "Covers the eyes, preventing sight." - action_button_name = "Adjust Blindfold" - icon_state = "blindfold" - item_state = "blindfold" - off_state = "blindfoldup" - tint = TINT_BLIND - flash_protection = FLASH_PROTECTION_MAJOR - item_flags = ITEM_FLAG_WASHER_ALLOWED - darkness_view = -1 - toggleable = TRUE - activation_sound = null - -/obj/item/clothing/glasses/blindfold/Initialize() - . = ..() - toggle_off_message = "You flip \the [src] up." - toggle_on_message = "You slide \the [src] down, blinding yourself." - -/obj/item/clothing/glasses/blindfold/attack_self() - . =..() - if(!.) - return - if(active) - flags_inv &= ~HIDEEYES - body_parts_covered &= ~EYES - else - flags_inv |= HIDEEYES - body_parts_covered |= EYES - -/obj/item/clothing/glasses/blindfold/tape - name = "length of tape" - desc = "It's a robust DIY blindfold!" - icon = 'icons/obj/bureaucracy.dmi' - action_button_name = null - icon_state = "tape_cross" - item_state = null - item_flags = null - w_class = ITEM_SIZE_TINY - toggleable = FALSE diff --git a/code/modules/clothing/glasses/eyepatch.dm b/code/modules/clothing/glasses/eyepatch.dm deleted file mode 100644 index db7d7f55cbafb..0000000000000 --- a/code/modules/clothing/glasses/eyepatch.dm +++ /dev/null @@ -1,88 +0,0 @@ -/obj/item/clothing/glasses/eyepatch - name = "eyepatch" - desc = "Yarr." - icon_state = "eyepatch" - item_state = "eyepatch" - body_parts_covered = 0 - item_flags = ITEM_FLAG_WASHER_ALLOWED - var/flipped = FALSE // Indicates left or right eye; 0 = on the right - -/obj/item/clothing/glasses/eyepatch/verb/flip_patch() - set name = "Flip Patch" - set category = "Object" - set src in usr - - if (usr.stat || usr.restrained()) - return - - src.flipped = !src.flipped - if(src.flipped) - icon_state = "[icon_state]_r" - else - src.icon_state = initial(icon_state) - to_chat (usr, "You change \the [src] to cover the [src.flipped ? "left" : "right"] eye.") - update_clothing_icon() - - -/obj/item/clothing/glasses/eyepatch/hud - name = "iPatch" - desc = "For the technologically inclined pirate. It connects directly to the optical nerve of the user, replacing the need for that useless eyeball." - gender = NEUTER - icon_state = "hudpatch" - item_state = "hudpatch" - off_state = "hudpatch" - action_button_name = "Toggle iPatch" - item_flags = null - toggleable = TRUE - var/eye_color = COLOR_WHITE - electric = TRUE - -/obj/item/clothing/glasses/eyepatch/hud/Initialize() - . = ..() - update_icon() - -/obj/item/clothing/glasses/eyepatch/hud/attack_self() - ..() - update_icon() - -/obj/item/clothing/glasses/eyepatch/hud/on_update_icon() - overlays.Cut() - if(active) - var/image/eye = overlay_image(icon, "[icon_state]_eye", flags=RESET_COLOR) - eye.color = eye_color - overlays += eye - -/obj/item/clothing/glasses/eyepatch/hud/get_mob_overlay(mob/user_mob, slot) - var/image/res = ..() - if(active) - var/image/eye = overlay_image(res.icon, "[icon_state]_eye", flags=RESET_COLOR) - eye.color = eye_color - eye.layer = ABOVE_LIGHTING_LAYER - eye.plane = EFFECTS_ABOVE_LIGHTING_PLANE - res.overlays += eye - return res - -/obj/item/clothing/glasses/eyepatch/hud/security - name = "security iPatch" - desc = "A Security-type heads-up display that connects directly to the optical nerve of the user, replacing the need for that useless eyeball." - hud = /obj/item/clothing/glasses/hud/security - eye_color = COLOR_RED - req_access = list(access_security) - -/obj/item/clothing/glasses/eyepatch/hud/medical - name = "medical iPatch" - desc = "A Medical-type heads-up display that connects directly to the ocular nerve of the user, replacing the need for that useless eyeball." - hud = /obj/item/clothing/glasses/hud/health - eye_color = COLOR_CYAN - req_access = list(access_medical) - -/obj/item/clothing/glasses/eyepatch/hud/meson - name = "meson iPatch" - desc = "An optical meson scanner display that connects directly to the ocular nerve of the user, replacing the need for that useless eyeball." - vision_flags = SEE_TURFS - see_invisible = SEE_INVISIBLE_NOLIGHTING - eye_color = COLOR_LIME - -/obj/item/clothing/glasses/eyepatch/hud/meson/Initialize() - . = ..() - overlay = GLOB.global_hud.meson diff --git a/code/modules/clothing/glasses/glasses.dm b/code/modules/clothing/glasses/glasses.dm deleted file mode 100644 index 4d3fa6a9f2fb5..0000000000000 --- a/code/modules/clothing/glasses/glasses.dm +++ /dev/null @@ -1,282 +0,0 @@ -/obj/item/clothing/glasses - name = "glasses" - icon = 'icons/obj/clothing/obj_eyes.dmi' - sprite_sheets = list( - SPECIES_VOX = 'icons/mob/species/vox/onmob_eyes_vox.dmi', - SPECIES_VOX_ARMALIS = 'icons/mob/species/vox/onmob_eyes_vox_armalis.dmi', - SPECIES_UNATHI = 'icons/mob/species/unathi/generated/onmob_eyes_unathi.dmi' - ) - var/hud_type - var/prescription = FALSE - var/toggleable = FALSE - var/off_state = "degoggles" - var/active = TRUE - var/activation_sound = 'sound/items/goggles_charge.ogg' - var/deactivation_sound // set this if you want a sound on deactivation - var/obj/screen/overlay = null - var/obj/item/clothing/glasses/hud/hud = null // Hud glasses, if any - var/electric = FALSE //if the glasses should be disrupted by EMP - - var/toggle_on_message //set these in initialize if you want messages other than about the optical matrix - var/toggle_off_message - -/obj/item/clothing/glasses/Initialize() - . = ..() - if(toggleable) - set_extension(src, /datum/extension/base_icon_state, icon_state) - if(ispath(hud)) - hud = new hud(src) - -/obj/item/clothing/glasses/Destroy() - qdel(hud) - hud = null - . = ..() - -/obj/item/clothing/glasses/needs_vision_update() - return ..() || overlay || vision_flags || see_invisible || darkness_view - -/obj/item/clothing/glasses/proc/activate(mob/user) - if(toggleable && !active) - var/datum/extension/base_icon_state/BIS = get_extension(src, /datum/extension/base_icon_state) - active = TRUE - icon_state = BIS.base_icon_state - flash_protection = initial(flash_protection) - tint = initial(tint) - if(user) - user.update_inv_glasses() - user.update_action_buttons() - if(activation_sound) - sound_to(user, activation_sound) - if(toggle_on_message) - to_chat(user, toggle_on_message) - else - to_chat(user, "You activate the optical matrix on \the [src].") - - update_clothing_icon() - update_vision() - -/obj/item/clothing/glasses/proc/deactivate(mob/user, manual = TRUE) - if(toggleable && active) - active = FALSE - icon_state = off_state - if(user) - if(manual) - if(toggle_off_message) - to_chat(user, toggle_off_message) - else - to_chat(user, "You deactivate the optical matrix on \the [src].") - if(deactivation_sound) - sound_to(user, deactivation_sound) - user.update_inv_glasses() - user.update_action_buttons() - - flash_protection = FLASH_PROTECTION_NONE - tint = TINT_NONE - update_clothing_icon() - update_vision() - -/obj/item/clothing/glasses/emp_act(severity) - if(electric && active) - if(istype(src.loc, /mob/living/carbon/human)) - var/mob/living/carbon/human/M = src.loc - if(M.glasses != src) - to_chat(M, SPAN_DANGER("\The [name] malfunction[gender != PLURAL ? "s":""], releasing a small spark.")) - else - M.eye_blind = 2 - M.eye_blurry = 4 - to_chat(M, SPAN_DANGER("\The [name] malfunction[gender != PLURAL ? "s":""], blinding you!")) - // Don't cure being nearsighted - if(!(M.disabilities & NEARSIGHTED)) - M.disabilities |= NEARSIGHTED - spawn(100) - M.disabilities &= ~NEARSIGHTED - if(toggleable) - deactivate(M, FALSE) - ..() - -/obj/item/clothing/glasses/attack_self(mob/user) - if(toggleable && !user.incapacitated()) - if(active) - deactivate(user) - else - activate(user) - -/obj/item/clothing/glasses/inherit_custom_item_data(datum/custom_item/citem) - . = ..() - if(toggleable) - if(citem.additional_data["icon_on"]) - set_icon_state(citem.additional_data["icon_on"]) - if(citem.additional_data["icon_off"]) - off_state = citem.additional_data["icon_off"] - -/obj/item/clothing/glasses/meson - name = "meson goggles" - desc = "Used for seeing walls, floors, and stuff through anything." - gender = NEUTER - icon_state = "meson" - item_state = "glasses" - action_button_name = "Toggle Goggles" - origin_tech = list(TECH_MAGNET = 2, TECH_ENGINEERING = 2) - toggleable = TRUE - vision_flags = SEE_TURFS - see_invisible = SEE_INVISIBLE_NOLIGHTING - electric = TRUE - -/obj/item/clothing/glasses/meson/Initialize() - . = ..() - overlay = GLOB.global_hud.meson - -/obj/item/clothing/glasses/meson/prescription - name = "meson goggles" - desc = "Used for seeing walls, floors, and stuff through anything. This set has corrective lenses." - prescription = 5 - -/obj/item/clothing/glasses/science - name = "science goggles" - desc = "Goggles fitted with a portable analyzer capable of determining the fabricator training potential of an item or components of a machine. Sensitive to EMP." - icon_state = "purple" - item_state = "glasses" - hud_type = HUD_SCIENCE - toggleable = TRUE - action_button_name = "Toggle Goggles" - electric = TRUE - -/obj/item/clothing/glasses/science/prescription - name = "prescription science goggles" - desc = "Science goggles with prescription lenses." - prescription = 5 - -/obj/item/clothing/glasses/science/Initialize() - . = ..() - overlay = GLOB.global_hud.science - -/obj/item/clothing/glasses/night - name = "night vision goggles" - desc = "You can totally see in the dark now!" - icon_state = "night" - item_state = "glasses" - origin_tech = list(TECH_MAGNET = 2) - darkness_view = 7 - action_button_name = "Toggle Goggles" - toggleable = TRUE - see_invisible = SEE_INVISIBLE_NOLIGHTING - off_state = "denight" - electric = TRUE - -/obj/item/clothing/glasses/night/Initialize() - . = ..() - overlay = GLOB.global_hud.nvg - -/obj/item/clothing/glasses/tacgoggles - name = "tactical goggles" - desc = "Self-polarizing goggles with light amplification for dark environments. Made from durable synthetic." - icon_state = "swatgoggles" - origin_tech = list(TECH_MAGNET = 2, TECH_COMBAT = 4) - darkness_view = 5 - action_button_name = "Toggle Goggles" - toggleable = TRUE - see_invisible = SEE_INVISIBLE_NOLIGHTING - siemens_coefficient = 0.6 - electric = TRUE - -/obj/item/clothing/glasses/monocle - name = "monocle" - desc = "Such a dapper eyepiece!" - icon_state = "monocle" - item_state = "headset" // lol - body_parts_covered = 0 - prescription = 5 - -/obj/item/clothing/glasses/material - name = "optical material scanner" - desc = "Very confusing glasses." - gender = NEUTER - icon_state = "material" - item_state = "glasses" - origin_tech = list(TECH_MAGNET = 3, TECH_ENGINEERING = 3) - action_button_name = "Toggle Goggles" - toggleable = TRUE - vision_flags = SEE_OBJS - electric = TRUE - -/obj/item/clothing/glasses/threedglasses - name = "3D glasses" - desc = "A long time ago, people used these glasses to makes images from screens threedimensional." - icon_state = "3d" - item_state = "3d" - body_parts_covered = 0 - -/obj/item/clothing/glasses/welding - name = "welding goggles" - desc = "Protects the eyes from welders, approved by the mad scientist association." - icon_state = "welding-g" - item_state = "welding-g" - action_button_name = "Flip Welding Goggles" - matter = list(MATERIAL_STEEL = 1500, MATERIAL_GLASS = 1000) - use_alt_layer = TRUE - var/up = FALSE - flash_protection = FLASH_PROTECTION_MAJOR - tint = TINT_HEAVY - -/obj/item/clothing/glasses/welding/attack_self() - toggle() - - -/obj/item/clothing/glasses/welding/verb/toggle() - set category = "Object" - set name = "Adjust welding goggles" - set src in usr - - if(!usr.incapacitated()) - if(src.up) - src.up = !src.up - flags_inv |= HIDEEYES - body_parts_covered |= EYES - icon_state = initial(icon_state) - flash_protection = initial(flash_protection) - tint = initial(tint) - to_chat(usr, "You flip \the [src] down to protect your eyes.") - else - src.up = !src.up - flags_inv &= ~HIDEEYES - body_parts_covered &= ~EYES - icon_state = "[initial(icon_state)]up" - flash_protection = FLASH_PROTECTION_NONE - tint = TINT_NONE - to_chat(usr, "You push \the [src] up out of your face.") - update_clothing_icon() - update_vision() - usr.update_action_buttons() - -/obj/item/clothing/glasses/welding/superior - name = "superior welding goggles" - desc = "Welding goggles made from more expensive materials, strangely smells like potatoes." - icon_state = "rwelding-g" - item_state = "rwelding-g" - tint = TINT_MODERATE - -/obj/item/clothing/glasses/glare_dampeners - name = "glare dampeners" - desc = "Synthetic lenses over the eyes, protecting from bright lights." - icon_state = "welding-g" - item_state = "welding-g" - use_alt_layer = TRUE - flash_protection = FLASH_PROTECTION_MODERATE - darkness_view = -1 - -/obj/item/clothing/glasses/augment_binoculars - name = "adaptive binoculars" - desc = "Digital lenses covering the eyes, capable of zooming in on distant targets." - gender = PLURAL - icon_state = "thermal" - item_state = "glasses" - action_button_name = "Toggle zoom" - zoomdevicename = "lenses" - electric = TRUE - unacidable = TRUE - -/obj/item/clothing/glasses/augment_binoculars/attack_self(mob/user) - if(zoom) - unzoom(user) - else - zoom(user) diff --git a/code/modules/clothing/glasses/hud.dm b/code/modules/clothing/glasses/hud.dm deleted file mode 100644 index 53482d42bed2b..0000000000000 --- a/code/modules/clothing/glasses/hud.dm +++ /dev/null @@ -1,158 +0,0 @@ -/obj/item/clothing/glasses/hud - name = "HUD" - desc = "A heads-up display that provides important info in (almost) real time." - origin_tech = list(TECH_MAGNET = 3, TECH_BIO = 2) - var/list/icon/current = list() //the current hud icons - electric = TRUE - gender = NEUTER - toggleable = TRUE - action_button_name = "Toggle HUD" - activation_sound = sound('sound/machines/boop1.ogg', volume = 10) - deactivation_sound = sound('sound/effects/compbeep1.ogg', volume = 30) - - species_restricted = null - -/obj/item/clothing/glasses/hud/Initialize() - . = ..() - toggle_on_message = "\The [src] boots up to life, flashing with information." - toggle_off_message = "\The [src] powers down with a beep." - -/obj/item/clothing/glasses/proc/process_hud(var/mob/M) - if(hud) - hud.process_hud(M) - -/obj/item/clothing/glasses/hud/process_hud(var/mob/M) - return - -/obj/item/clothing/glasses/hud/health - name = "health scanner HUD" - desc = "A heads-up display that scans the humans in view and provides accurate data about their health status." - icon_state = "healthhud" - off_state = "healthhud_off" - hud_type = HUD_MEDICAL - body_parts_covered = 0 - req_access = list(access_medical) - -/obj/item/clothing/glasses/hud/health/process_hud(var/mob/M) - process_med_hud(M, 1) - -/obj/item/clothing/glasses/hud/health/prescription - name = "prescription health scanner HUD" - desc = "A medical HUD integrated with a set of prescription glasses." - prescription = 5 - icon_state = "healthhudpresc" - off_state = "healthhudpresc_off" - item_state = "healthhudpresc" - -/obj/item/clothing/glasses/hud/health/goggle - name = "medical HUD visor" - desc = "A medical HUD integrated with a wide visor." - icon_state = "medgoggles" - off_state = "degoggles" - item_state = "medgoggles" - body_parts_covered = EYES - -/obj/item/clothing/glasses/hud/health/goggle/prescription - prescription = 5 - desc = "A medical HUD integrated with a wide visor. This one has a corrective lense." - -/obj/item/clothing/glasses/hud/security - name = "security HUD" - desc = "A heads-up display that scans the humans in view and provides accurate data about their ID status and security records." - icon_state = "securityhud" - off_state = "securityhud_off" - hud_type = HUD_SECURITY - body_parts_covered = 0 - var/static/list/jobs[0] - req_access = list(access_security) - -/obj/item/clothing/glasses/hud/security/prescription - name = "prescription security HUD" - desc = "A security HUD integrated with a set of prescription glasses." - prescription = 5 - icon_state = "sechudpresc" - off_state = "sechudpresc_off" - item_state = "sechudpresc" - -/obj/item/clothing/glasses/hud/security/jensenshades - name = "augmented shades" - desc = "Polarized bioneural eyewear, designed to augment your vision." - gender = PLURAL - icon_state = "jensenshades" - item_state = "jensenshades" - toggleable = FALSE - vision_flags = SEE_MOBS - see_invisible = SEE_INVISIBLE_NOLIGHTING - - -/obj/item/clothing/glasses/hud/security/process_hud(var/mob/M) - process_sec_hud(M, 1) - -/obj/item/clothing/glasses/hud/security/prot - name = "HUD goggles" - desc = "A pair of goggles with a SECHUD and polarization toggle." - icon_state = "secgoggles" - off_state = "degoggles" - flash_protection = FLASH_PROTECTION_MODERATE - body_parts_covered = EYES - -/obj/item/clothing/glasses/hud/security/prot/prescription - prescription = 5 - desc = "A pair of goggles with a SECHUD and polarization toggle. These ones have eyesight-correcting lenses." - -/obj/item/clothing/glasses/hud/security/prot/sunglasses - name = "HUD sunglasses" - desc = "Glasses with a SECHUD and polarization toggle." - icon_state = "sunhud" - off_state = "sunhud_off" - body_parts_covered = null - -/obj/item/clothing/glasses/hud/security/prot/sunglasses/prescription - prescription = 5 - desc = "Glasses with a SECHUD and polarization toggle. These ones have eyesight-correcting lenses." - -/obj/item/clothing/glasses/hud/security/prot/aviators - name = "HUD aviators" - desc = "Aviators with a SECHUD and polarization toggle." - icon_state = "sec_avi_on" - off_state = "sec_avi_off" - body_parts_covered = null - -/obj/item/clothing/glasses/hud/security/prot/aviators/prescription - prescription = 5 - desc = "Aviators with a SECHUD and polarization toggle. These ones have eyesight-correcting lenses." - -/obj/item/clothing/glasses/hud/janitor - name = "janiHUD" - desc = "A heads-up display that scans for messes and alerts the user. Good for finding puddles hiding under catwalks." - icon_state = "janihud" - off_state = "janihud_off" - body_parts_covered = 0 - hud_type = HUD_JANITOR - -/obj/item/clothing/glasses/hud/janitor/prescription - name = "prescription janiHUD" - icon_state = "janihudpresc" - off_state = "janihudpresc_off" - item_state = "janihudpresc" - desc = "A janitor HUD integrated with a set of prescription glasses." - prescription = 5 - -/obj/item/clothing/glasses/hud/janitor/process_hud(var/mob/M) - process_jani_hud(M) - -/obj/item/clothing/glasses/hud/science - name = "science HUD" - desc = "A heads-up display that analyzes objects for research potential." - icon_state = "scihud" - off_state = "scihud_off" - hud_type = HUD_SCIENCE - body_parts_covered = 0 - -/obj/item/clothing/glasses/hud/science/prescription - name = "prescription scienceHUD" - icon_state = "scihudpresc" - off_state = "scihudpresc_off" - item_state = "scihudpresc" - desc = "A science HUD integrated with a set of prescription glasses." - prescription = 5 diff --git a/code/modules/clothing/glasses/prescription.dm b/code/modules/clothing/glasses/prescription.dm deleted file mode 100644 index f8bbe3443903c..0000000000000 --- a/code/modules/clothing/glasses/prescription.dm +++ /dev/null @@ -1,34 +0,0 @@ -/obj/item/clothing/glasses/prescription - name = "corrective glasses" - desc = "A set of corrective lenses in a cheap frame." - icon_state = "glasses" - item_state = "glasses" - body_parts_covered = EMPTY_BITFIELD - prescription = 7 - - -/obj/item/clothing/glasses/hipster - name = "corrective glasses" - desc = "A set of corrective lenses in a classic frame." - icon_state = "hipster_glasses" - item_state = "hipster_glasses" - body_parts_covered = EMPTY_BITFIELD - prescription = 7 - - -/obj/item/clothing/glasses/green - name = "corrective glasses" - desc = "A set of corrective lenses in a forest-green frame." - icon_state = "gglasses" - item_state = "gglasses" - body_parts_covered = EMPTY_BITFIELD - prescription = 7 - - -/obj/item/clothing/glasses/scanners - name = "scanning goggles" - desc = "Oddly shaped eyesight-correcting goggles with dangling wires." - icon_state = "uzenwa_sissra_1" - prescription = 5 - light_protection = 7 - electric = TRUE diff --git a/code/modules/clothing/glasses/sunglasses.dm b/code/modules/clothing/glasses/sunglasses.dm deleted file mode 100644 index f75e1eed12ad8..0000000000000 --- a/code/modules/clothing/glasses/sunglasses.dm +++ /dev/null @@ -1,98 +0,0 @@ -/obj/item/clothing/glasses/sunglasses - name = "sunglasses" - desc = "Glasses with treated lenses to prevent glare. They provide some rudamentary protection from dazzling attacks." - icon_state = "sun" - item_state = "sunglasses" - darkness_view = -1 - flash_protection = FLASH_PROTECTION_MINOR - - -/obj/item/clothing/glasses/sunglasses/prescription - prescription = 5 - desc = "Glasses with treated lenses to prevent glare. They provide some rudamentary protection from dazzling attacks. These ones have eyesight-correcting lenses." - - -/obj/item/clothing/glasses/sunglasses/big - name = "thick sunglasses" - desc = "Glasses with treated lenses to prevent glare. The thick, wide lenses protect against a variety of flash attacks." - icon_state = "bigsunglasses" - item_state = "bigsunglasses" - flash_protection = FLASH_PROTECTION_MODERATE - - -/obj/item/clothing/glasses/sunglasses/big/prescription - prescription = 5 - desc = "Glasses with treated lenses to prevent glare. The thick, wide lenses protect against a variety of flash attacks. These ones have eyesight-correcting lenses." - - -/obj/item/clothing/glasses/aviators_black - name = "aviator sunglasses" - desc = "An anachronistic style of glare protection popularized by military pilot mystique. These ones have black frames and lenses." - icon = 'icons/obj/clothing/aviators.dmi' - icon_state = "black" - item_icons = list(slot_glasses_str = 'icons/obj/clothing/aviators.dmi') - item_state_slots = list(slot_glasses_str = "black_onmob") - darkness_view = -1 - flash_protection = FLASH_PROTECTION_MODERATE - - -/obj/item/clothing/glasses/aviators_black/prescription - prescription = 5 - desc = "An anachronistic style of glare protection popularized by military pilot mystique. These ones have black frames and eyesight-correcting lenses." - - -/obj/item/clothing/glasses/aviators_silver - name = "aviator sunglasses" - desc = "An anachronistic style of glare protection popularized by military pilot mystique. These ones have silver frames and chrome lenses." - icon = 'icons/obj/clothing/aviators.dmi' - icon_state = "silver" - item_icons = list(slot_glasses_str = 'icons/obj/clothing/aviators.dmi') - item_state_slots = list(slot_glasses_str = "silver_onmob") - darkness_view = -1 - flash_protection = FLASH_PROTECTION_MODERATE - - -/obj/item/clothing/glasses/aviators_silver/prescription - prescription = 5 - desc = "An anachronistic style of glare protection popularized by military pilot mystique. These ones have silver frames and eyesight-correcting chrome lenses." - -/obj/item/clothing/glasses/aviators_gold - name = "aviator sunglasses" - desc = "An anachronistic style of glare protection popularized by military pilot mystique. These ones have gold frames and chrome lenses." - icon = 'icons/obj/clothing/aviators.dmi' - icon_state = "gold" - item_icons = list(slot_glasses_str = 'icons/obj/clothing/aviators.dmi') - item_state_slots = list(slot_glasses_str = "gold_onmob") - darkness_view = -1 - flash_protection = FLASH_PROTECTION_MODERATE - - -/obj/item/clothing/glasses/aviators_gold/prescription - prescription = 5 - desc = "An anachronistic style of glare protection popularized by military pilot mystique. These ones have gold frames and eyesight-correcting chrome lenses." - - -/obj/item/clothing/glasses/aviators_rose - name = "aviator sunglasses" - desc = "An anachronistic style of glare protection popularized by military pilot mystique. These ones have rose gold frames and goldochre chrome lenses." - icon = 'icons/obj/clothing/aviators.dmi' - icon_state = "rose" - item_icons = list(slot_glasses_str = 'icons/obj/clothing/aviators.dmi') - item_state_slots = list(slot_glasses_str = "rose_onmob") - darkness_view = -1 - flash_protection = FLASH_PROTECTION_MODERATE - - -/obj/item/clothing/glasses/aviators_rose/prescription - prescription = 5 - desc = "An anachronistic style of glare protection popularized by military pilot mystique. These ones have rose gold frames and eyesight-correcting goldochre chrome lenses." - - -/obj/item/clothing/glasses/aviators_shutter - name = "shutter shades" - desc = "An anachronistic style of glare pr- wait a minute. These don't protect against anything." - icon = 'icons/obj/clothing/aviators.dmi' - icon_state = "shutter" - item_icons = list(slot_glasses_str = 'icons/obj/clothing/aviators.dmi') - item_state_slots = list(slot_glasses_str = "shutter_onmob") - darkness_view = -1 diff --git a/code/modules/clothing/glasses/thermals.dm b/code/modules/clothing/glasses/thermals.dm deleted file mode 100644 index add22eb54c498..0000000000000 --- a/code/modules/clothing/glasses/thermals.dm +++ /dev/null @@ -1,47 +0,0 @@ -/obj/item/clothing/glasses/thermal - name = "optical thermal scanner" - desc = "Thermals in the shape of glasses." - gender = NEUTER - icon_state = "thermal" - item_state = "glasses" - action_button_name = "Toggle Goggles" - origin_tech = list(TECH_MAGNET = 3) - toggleable = TRUE - vision_flags = SEE_MOBS - see_invisible = SEE_INVISIBLE_NOLIGHTING - electric = TRUE - -/obj/item/clothing/glasses/thermal/Initialize() - . = ..() - overlay = GLOB.global_hud.thermal - -/obj/item/clothing/glasses/thermal/syndi //These are now a traitor item, concealed as mesons. -Pete - name = "optical meson scanner" - desc = "Used for seeing walls, floors, and stuff through anything." - icon_state = "meson" - origin_tech = list(TECH_MAGNET = 3, TECH_ESOTERIC = 4) - -/obj/item/clothing/glasses/thermal/plain - toggleable = FALSE - activation_sound = null - action_button_name = null - -/obj/item/clothing/glasses/thermal/plain/monocle - name = "thermonocle" - desc = "A monocle thermal." - icon_state = "thermoncle" - body_parts_covered = 0 //doesn't protect eyes because it's a monocle, duh - -/obj/item/clothing/glasses/thermal/plain/eyepatch - name = "optical thermal eyepatch" - desc = "An eyepatch with built-in thermal optics." - icon_state = "eyepatch" - item_state = "eyepatch" - body_parts_covered = 0 - -/obj/item/clothing/glasses/thermal/plain/jensen - name = "adhesive thermal lenses" - gender = PLURAL - desc = "A set of deployable thermal lenses that adhere to the eyebrows. Cool looking, probably." - icon_state = "thermalimplants" - item_state = "syringe_kit" \ No newline at end of file diff --git a/code/modules/clothing/gloves/boxing.dm b/code/modules/clothing/gloves/boxing.dm deleted file mode 100644 index 277d2f1bdb680..0000000000000 --- a/code/modules/clothing/gloves/boxing.dm +++ /dev/null @@ -1,29 +0,0 @@ -/obj/item/clothing/gloves/boxing - name = "boxing gloves" - desc = "Because you really needed another excuse to punch your crewmates." - icon_state = "boxing" - item_state = "boxing" - -/obj/item/clothing/gloves/boxing/attackby(obj/item/W, mob/user) - if(isWirecutter(W) || istype(W, /obj/item/scalpel)) - to_chat(user, "That won't work.")//Nope - else - ..() - -/obj/item/clothing/gloves/boxing/green - icon_state = "boxinggreen" - item_state = "boxinggreen" - -/obj/item/clothing/gloves/boxing/blue - icon_state = "boxingblue" - item_state = "boxingblue" - -/obj/item/clothing/gloves/boxing/yellow - icon_state = "boxingyellow" - item_state = "boxingyellow" - -/obj/item/clothing/gloves/white - name = "white gloves" - desc = "These look pretty fancy." - icon_state = "latex" - item_state = "lgloves" diff --git a/code/modules/clothing/gloves/color.dm b/code/modules/clothing/gloves/color.dm deleted file mode 100644 index 8aa1822b4ed6d..0000000000000 --- a/code/modules/clothing/gloves/color.dm +++ /dev/null @@ -1,36 +0,0 @@ -/obj/item/clothing/gloves/color - desc = "A pair of gloves, they don't look special in any way." - item_state = "lgloves" - icon_state = "white" - -/obj/item/clothing/gloves/color/modified - item_flags = ITEM_FLAG_PREMODIFIED | ITEM_FLAG_WASHER_ALLOWED - -/obj/item/clothing/gloves/color/white - color = COLOR_WHITE - -/obj/item/clothing/gloves/color/black - color = COLOR_BLACK - -/obj/item/clothing/gloves/color/white/modified - item_flags = ITEM_FLAG_PREMODIFIED | ITEM_FLAG_WASHER_ALLOWED - -/obj/item/clothing/gloves/color/evening - desc = "A pair of gloves that reach past the elbow. Fancy!" - name = "evening gloves" - icon_state = "evening_gloves" - item_state = "evening_gloves" - color = COLOR_WHITE //original colour was "#7f7f7f", but white is fancier of course - body_parts_covered = ARMS|HANDS //evening gloves don't quite cover the entire arm, but might as well differentiate the item a bit - -/obj/item/clothing/gloves/color/evening/modified - item_flags = ITEM_FLAG_PREMODIFIED | ITEM_FLAG_WASHER_ALLOWED - -/obj/item/clothing/gloves/rainbow - name = "rainbow gloves" - desc = "A pair of gloves, they don't look special in any way." - icon_state = "rainbow" - item_state = "rainbowgloves" - -/obj/item/clothing/gloves/rainbow/modified - item_flags = ITEM_FLAG_PREMODIFIED | ITEM_FLAG_WASHER_ALLOWED diff --git a/code/modules/clothing/gloves/miscellaneous.dm b/code/modules/clothing/gloves/miscellaneous.dm deleted file mode 100644 index c967b829e6399..0000000000000 --- a/code/modules/clothing/gloves/miscellaneous.dm +++ /dev/null @@ -1,208 +0,0 @@ -/obj/item/clothing/gloves/captain - desc = "Regal blue gloves, with a nice gold trim. Swanky." - name = "captain's gloves" - icon_state = "captain" - item_state = "egloves" - -/obj/item/clothing/gloves/cyborg - desc = "Beep boop borp!" - name = "cyborg gloves" - icon_state = "black" - item_state = "r_hands" - siemens_coefficient = 1.0 - -/obj/item/clothing/gloves/insulated - desc = "These gloves will protect the wearer from electric shocks." - name = "insulated gloves" - color = COLOR_YELLOW - icon_state = "white" - item_state = "lgloves" - siemens_coefficient = 0 - permeability_coefficient = 0.05 - -/obj/item/clothing/gloves/insulated/cheap //Cheap Chinese Crap - desc = "These gloves are cheap copies of the coveted gloves, no way this can end badly." - name = "budget insulated gloves" - siemens_coefficient = 1 //Set to a default of 1, gets overridden in New() - -/obj/item/clothing/gloves/insulated/cheap/New() - ..() - //average of 0.4, better than regular gloves' 0.75 - siemens_coefficient = pick(0, 0.1, 0.2, 0.3, 0.4, 0.6, 1.3) - -/obj/item/clothing/gloves/insulated/black - name = "black insulated gloves" - desc = "These gloves will protect the wearer from electric shocks. A great choice for stylish hackers." - color = null - icon_state = "black" - item_state = "bgloves" - -/obj/item/clothing/gloves/insulated/white - name = "white insulated gloves" - desc = "These gloves will protect the wearer from electric shocks. A great choice for ladies and gentlemen." - color = null - icon_state = "latex" - item_state = "lgloves" - -/obj/item/clothing/gloves/insulated/combat - name = "combat insulated gloves" - color = "#80868e" - icon_state = "black" - item_state = "bgloves" - armor = list(melee = 20, bullet = 20, laser = 30,energy = 25, bomb = 20, bio = 0, rad = 0) - -/obj/item/clothing/gloves/forensic - desc = "Specially made gloves for forensic technicians. The luminescent threads woven into the material stand out under scrutiny." - name = "forensic gloves" - icon_state = "forensic" - item_state = "bgloves" - siemens_coefficient = 0.50 - permeability_coefficient = 0.05 - - cold_protection = HANDS - min_cold_protection_temperature = GLOVES_MIN_COLD_PROTECTION_TEMPERATURE - heat_protection = HANDS - max_heat_protection_temperature = GLOVES_MAX_HEAT_PROTECTION_TEMPERATURE - -/obj/item/clothing/gloves/thick - desc = "These work gloves are thick and fire-resistant." - name = "work gloves" - icon_state = "black" - item_state = "bgloves" - siemens_coefficient = 0.50 - permeability_coefficient = 0.05 - item_flags = ITEM_FLAG_THICKMATERIAL | ITEM_FLAG_WASHER_ALLOWED - - cold_protection = HANDS - min_cold_protection_temperature = GLOVES_MIN_COLD_PROTECTION_TEMPERATURE - heat_protection = HANDS - max_heat_protection_temperature = GLOVES_MAX_HEAT_PROTECTION_TEMPERATURE - -/obj/item/clothing/gloves/thick/modified - item_flags = ITEM_FLAG_PREMODIFIED | ITEM_FLAG_WASHER_ALLOWED - -/obj/item/clothing/gloves/thick/swat - desc = "These tactical gloves are somewhat fire and impact-resistant." - name = "\improper SWAT Gloves" - item_state = "swat_gl" - force = 5 - armor = list( - melee = ARMOR_MELEE_RESISTANT, - bullet = ARMOR_BALLISTIC_PISTOL, - laser = ARMOR_LASER_HANDGUNS, - energy = ARMOR_ENERGY_SMALL, - bomb = ARMOR_BOMB_RESISTANT, - bio = ARMOR_BIO_MINOR) - -/obj/item/clothing/gloves/thick/combat //Combined effect of SWAT gloves and insulated gloves - desc = "These tactical gloves are somewhat fire and impact resistant." - name = "combat gloves" - icon_state = "work" - item_state = "wgloves" - siemens_coefficient = 0 - permeability_coefficient = 0.05 - force = 5 - armor = list( - melee = ARMOR_MELEE_RESISTANT, - bullet = ARMOR_BALLISTIC_PISTOL, - laser = ARMOR_LASER_HANDGUNS, - energy = ARMOR_ENERGY_SMALL, - bomb = ARMOR_BOMB_RESISTANT, - bio = ARMOR_BIO_MINOR) - cold_protection = HANDS - min_cold_protection_temperature = GLOVES_MIN_COLD_PROTECTION_TEMPERATURE - heat_protection = HANDS - max_heat_protection_temperature = GLOVES_MAX_HEAT_PROTECTION_TEMPERATURE - -/obj/item/clothing/gloves/thick/botany - desc = "These leather work gloves protect against thorns, barbs, prickles, spikes and other harmful objects of floral origin." - name = "thick leather gloves" - icon_state = "leather" - item_state = "ggloves" - -/obj/item/clothing/gloves/thick/botany/modified - item_flags = ITEM_FLAG_PREMODIFIED | ITEM_FLAG_WASHER_ALLOWED - -/obj/item/clothing/gloves/latex - name = "latex gloves" - desc = "Sterile latex gloves." - icon_state = "latex" - item_state = "lgloves" - w_class = ITEM_SIZE_TINY - siemens_coefficient = 1.1 //thin latex gloves, much more conductive than fabric gloves (basically a capacitor for AC) - permeability_coefficient = 0.01 - germ_level = 0 - -/obj/item/clothing/gloves/latex/modified - item_flags = ITEM_FLAG_PREMODIFIED | ITEM_FLAG_WASHER_ALLOWED - -/obj/item/clothing/gloves/latex/nitrile - name = "nitrile gloves" - desc = "Sterile nitrile gloves." - icon_state = "nitrile" - item_state = "ngloves" - -/obj/item/clothing/gloves/latex/nitrile/modified - item_flags = ITEM_FLAG_PREMODIFIED | ITEM_FLAG_WASHER_ALLOWED - -/obj/item/clothing/gloves/thick/duty - desc = "These brown duty gloves are made from a durable synthetic." - name = "work gloves" - icon_state = "work" - item_state = "wgloves" - armor = list( - melee = ARMOR_MELEE_MINOR, - bullet = ARMOR_BALLISTIC_MINOR, - laser = ARMOR_LASER_MINOR - ) - -/obj/item/clothing/gloves/thick/duty/modified - item_flags = ITEM_FLAG_PREMODIFIED | ITEM_FLAG_WASHER_ALLOWED - -/obj/item/clothing/gloves/tactical - desc = "These brown tactical gloves are made from a durable synthetic, and have hardened knuckles." - name = "tactical gloves" - icon_state = "work" - item_state = "wgloves" - force = 5 - siemens_coefficient = 0.50 - permeability_coefficient = 0.05 - armor = list( - melee = ARMOR_MELEE_KNIVES, - bullet = ARMOR_BALLISTIC_MINOR, - laser = ARMOR_LASER_MINOR - ) - -/obj/item/clothing/gloves/guards - desc = "A pair of synthetic gloves and arm pads reinforced with armor plating." - name = "arm guards" - icon_state = "guards" - item_state = "guards" - body_parts_covered = HANDS|ARMS - w_class = ITEM_SIZE_NORMAL - siemens_coefficient = 0.7 - permeability_coefficient = 0.03 - armor = list( - melee = ARMOR_MELEE_RESISTANT, - bullet = ARMOR_BALLISTIC_MINOR, - laser = ARMOR_LASER_SMALL, - energy = ARMOR_ENERGY_SMALL, - bomb = ARMOR_BOMB_PADDED - ) - -/obj/item/clothing/gloves/fire - desc = "A pair of Gloves specially design for firefight and damage control." - name = "fire gloves" - icon_state = "fire_gloves" - item_state = "fire_gloves" - siemens_coefficient = 0.50 - gas_transfer_coefficient = 0.90 - permeability_coefficient = 0.50 - item_flags = ITEM_FLAG_THICKMATERIAL | ITEM_FLAG_WASHER_ALLOWED - body_parts_covered = HANDS - cold_protection = HANDS - heat_protection = HANDS - min_cold_protection_temperature = GLOVES_MIN_COLD_PROTECTION_TEMPERATURE - heat_protection = HANDS - max_heat_protection_temperature = FIRESUIT_MAX_HEAT_PROTECTION_TEMPERATURE - max_pressure_protection = FIRESUIT_MAX_PRESSURE diff --git a/code/modules/clothing/head/collectable.dm b/code/modules/clothing/head/collectable.dm deleted file mode 100644 index aa340a68909ca..0000000000000 --- a/code/modules/clothing/head/collectable.dm +++ /dev/null @@ -1,135 +0,0 @@ - -//Hat Station 13 - -/obj/item/clothing/head/collectable - name = "collectable hat" - desc = "A rare collectable hat." - -/obj/item/clothing/head/collectable/petehat - name = "ultra rare hat" - desc = "an ultra rare hat. It commands a certain respect." - icon_state = "petehat" - sprite_sheets = list( - SPECIES_VOX = 'icons/mob/species/vox/onmob_head_vox.dmi', - SPECIES_VOX_ARMALIS = 'icons/mob/species/vox/onmob_head_vox_armalis.dmi' - ) - -/obj/item/clothing/head/collectable/xenom - name = "collectable alien monster helmet!" - desc = "Hiss hiss hiss!" - icon_state = "xenom" - item_state_slots = list( - slot_l_hand_str = "xenos_helm", - slot_r_hand_str = "xenos_helm", - ) - body_parts_covered = HEAD|FACE|EYES - -/obj/item/clothing/head/collectable/chef - name = "collectable chef's hat" - desc = "A rare Chef's Hat meant for hat collectors!" - icon_state = "chefhat" - item_state = "chefhat" - -/obj/item/clothing/head/collectable/paper - name = "collectable paper hat" - desc = "What looks like an ordinary paper hat, is actually a rare and valuable collector's edition paper hat. Keep away from water, fire and Librarians." - icon_state = "paper" - item_state = "paper" - body_parts_covered = 0 - -/obj/item/clothing/head/collectable/tophat - name = "collectable top hat" - desc = "A top hat worn by only the most prestigious hat collectors." - icon_state = "tophat" - item_state = "tophat" - body_parts_covered = 0 - -/obj/item/clothing/head/collectable/captain - name = "collectable captain's hat" - desc = "A Collectable Hat that'll make you look just like a real comdom!" - icon_state = "captain" - item_state_slots = list( - slot_l_hand_str = "caphat", - slot_r_hand_str = "caphat", - ) - body_parts_covered = 0 - -/obj/item/clothing/head/collectable/police - name = "collectable police officer's hat" - desc = "A Collectable Police Officer's Hat. This hat emphasizes that you are THE LAW." - icon_state = "policehelm" - body_parts_covered = 0 - -/obj/item/clothing/head/collectable/beret - name = "collectable beret" - desc = "A Collectable red Beret. It smells faintly of Garlic." - icon_state = "beret" - body_parts_covered = 0 - -/obj/item/clothing/head/collectable/welding - name = "collectable welding helmet" - desc = "A Collectable Welding Helmet. Now with 80% less lead! Not for actual welding. Any welding done while wearing this Helmet is done so at the owner's own risk!" - icon_state = "welding" - item_state = "welding" - w_class = ITEM_SIZE_NORMAL - body_parts_covered = HEAD|FACE|EYES - -/obj/item/clothing/head/collectable/slime - name = "collectable slime hat" - desc = "Just like a real Brain Slug!" - icon_state = "headslime" - -/obj/item/clothing/head/collectable/flatcap - name = "collectable flat cap" - desc = "A Collectible farmer's Flat Cap!" - icon_state = "flat_cap" - item_state_slots = list( - slot_l_hand_str = "detective", - slot_r_hand_str = "detective", - ) - -/obj/item/clothing/head/collectable/pirate - name = "collectable pirate hat" - desc = "You'd make a great Dread Syndie Roberts!" - icon_state = "pirate" - body_parts_covered = 0 - -/obj/item/clothing/head/collectable/kitty - name = "collectable kitty ears" - desc = "The fur feels.....a bit too realistic." - icon_state = "kitty" - body_parts_covered = 0 - -/obj/item/clothing/head/collectable/rabbitears - name = "collectable rabbit ears" - desc = "Not as lucky as the feet!" - icon_state = "bunny" - body_parts_covered = 0 - -/obj/item/clothing/head/collectable/wizard - name = "collectable wizard's hat" - desc = "NOTE:Any magical powers gained from wearing this hat are purely coincidental." - icon_state = "wizard" - -/obj/item/clothing/head/collectable/hardhat - name = "collectable hard hat" - desc = "WARNING! Offers no real protection, or luminosity, but it is damn fancy!" - icon_state = "hardhat0_yellow" - w_class = ITEM_SIZE_NORMAL - body_parts_covered = 0 - -/obj/item/clothing/head/collectable/HoS - name = "collectable HoS hat" - desc = "Now you can beat prisoners, set silly sentences and arrest for no reason too!" - icon_state = "hoscap" - body_parts_covered = 0 - -/obj/item/clothing/head/collectable/thunderdome - name = "collectable Thunderdome helmet" - desc = "Go Red! I mean Green! I mean Red! No Green!" - icon_state = "thunderdome" - -/obj/item/clothing/head/collectable/swat - name = "collectable SWAT helmet" - desc = "Now you can be in the Deathsquad too!" - icon_state = "swathelm" diff --git a/code/modules/clothing/head/hardhat.dm b/code/modules/clothing/head/hardhat.dm deleted file mode 100644 index c1e5bfde2b751..0000000000000 --- a/code/modules/clothing/head/hardhat.dm +++ /dev/null @@ -1,107 +0,0 @@ -/obj/item/clothing/head/hardhat - name = "hard hat" - desc = "A piece of headgear used in dangerous working conditions to protect the head. Comes with a built-in flashlight." - icon_state = "hardhat0_yellow" - action_button_name = "Toggle Headlamp" - brightness_on = 0.5 //luminosity when on - light_overlay = "hardhat_light" - w_class = ITEM_SIZE_NORMAL - item_flags = null - armor = list( - melee = ARMOR_MELEE_RESISTANT, - bullet = ARMOR_BALLISTIC_MINOR, - laser = ARMOR_LASER_SMALL, - energy = ARMOR_ENERGY_MINOR, - bomb = ARMOR_BOMB_PADDED, - bio = ARMOR_BIO_MINOR, - rad = ARMOR_RAD_MINOR - ) - flags_inv = 0 - siemens_coefficient = 0.9 - heat_protection = HEAD - max_heat_protection_temperature = FIRE_HELMET_MAX_HEAT_PROTECTION_TEMPERATURE - max_pressure_protection = FIRESUIT_MAX_PRESSURE - -/obj/item/clothing/head/hardhat/orange - icon_state = "hardhat0_orange" - -/obj/item/clothing/head/hardhat/red - icon_state = "hardhat0_red" - -/obj/item/clothing/head/hardhat/white - icon_state = "hardhat0_white" - -/obj/item/clothing/head/hardhat/dblue - icon_state = "hardhat0_dblue" - -/obj/item/clothing/head/hardhat/EMS - name = "\improper EMS helmet" - desc = "A polymer helmet worn by EMTs throughout human space to protect their head. This one comes with an attached flashlight and has 'Medic' written on its back in blue lettering." - icon_state = "EMS_helmet" - light_overlay = "EMS_light" - w_class = ITEM_SIZE_NORMAL - armor = list( - melee = ARMOR_MELEE_RESISTANT, - bullet = ARMOR_BALLISTIC_MINOR, - energy = ARMOR_ENERGY_MINOR, - bomb = ARMOR_BOMB_PADDED, - bio = ARMOR_BIO_MINOR - ) - -/obj/item/clothing/head/hardhat/firefighter - icon_state = "Firefighter-Helmet" - name = "firefighter helmet" - desc = "A complete, face covering helmet specially designed for firefighting. It is airtight and has a port for internals." - item_flags = ITEM_FLAG_THICKMATERIAL | ITEM_FLAG_AIRTIGHT - permeability_coefficient = 0 - flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE|BLOCKHAIR - body_parts_covered = HEAD|FACE|EYES - cold_protection = HEAD - min_cold_protection_temperature = SPACE_HELMET_MIN_COLD_PROTECTION_TEMPERATURE - siemens_coefficient = 0.9 - randpixel = 0 - species_restricted = list("exclude", SPECIES_NABBER, SPECIES_DIONA) - flash_protection = FLASH_PROTECTION_MAJOR - -/obj/item/clothing/head/hardhat/firefighter/Chief - icon_state = "Firefighter-Helmet-Chief" - -/obj/item/clothing/head/hardhat/damage_control - name = "damage control helmet" - desc = "A helmet commonly used by engineers and first responders throughout the human space. Comes with a built-in flashlight." - icon_state = "Damage-Control-Helmet" - light_overlay = "DC_light" - flags_inv = HIDEEARS|BLOCKHAIR - species_restricted = list("exclude", SPECIES_NABBER, SPECIES_DIONA) - -/obj/item/clothing/head/hardhat/damage_control/Yellow - name = "senior damage control helmet" - icon_state = "Damage-Control-Helmet-Yellow" - -/obj/item/clothing/head/hardhat/damage_control/White - name = "chief damage control helmet" - icon_state = "Damage-Control-Helmet-White" - -/obj/item/clothing/head/hardhat/damage_control/EMB - name = "\improper Emergency Management Bureau helmet" - desc = "The helmet currently issued by the emergency management bureau, commonly used by engineers and first responders throughout the human space. Comes with a built-in flashlight." - icon_state = "Damage-Control-Helmet-EMB" - -/obj/item/clothing/head/hardhat/damage_control/EMB_Ancient - name = "ancient red EMB helmet" - desc = "This helmet used to be issued by the emergency management bureau once upon a time, and is still being used in frontier systems. Comes with a built-in flashlight." - icon_state = "EMB-ancient-red" - light_overlay = "EMB-ancient_light" - -/obj/item/clothing/head/hardhat/damage_control/EMB_Ancient/yellow - name = "ancient yellow EMB helmet" - icon_state = "EMB-ancient-yellow" - -/obj/item/clothing/head/hardhat/damage_control/EMB_Ancient/white - name = "ancient white EMB helmet" - icon_state = "EMB-ancient-white" - -/obj/item/clothing/head/hardhat/EMS/DC_light - name = "light damage control helmet" - desc = "A lighter polymer helmet commonly used by engineers and first responders throughout the human space. It comes with a built-in flashlight and has 'Damage Control' written on its back in yellow lettering." - icon_state = "Damage-Control-Helmet-light" diff --git a/code/modules/clothing/head/helmet.dm b/code/modules/clothing/head/helmet.dm deleted file mode 100644 index 02cf916336f6c..0000000000000 --- a/code/modules/clothing/head/helmet.dm +++ /dev/null @@ -1,264 +0,0 @@ -/obj/item/clothing/head/helmet - name = "helmet" - desc = "Reinforced headgear. Protects the head from impacts." - icon_state = "helmet" - item_state_slots = list( - slot_l_hand_str = "helmet", - slot_r_hand_str = "helmet", - ) - valid_accessory_slots = list(ACCESSORY_SLOT_HELM_C, ACCESSORY_SLOT_HELM_D) - restricted_accessory_slots = list(ACCESSORY_SLOT_HELM_C, ACCESSORY_SLOT_HELM_D) - item_flags = ITEM_FLAG_THICKMATERIAL - body_parts_covered = HEAD - armor = list( - melee = ARMOR_MELEE_RESISTANT, - bullet = ARMOR_BALLISTIC_RESISTANT, - laser = ARMOR_LASER_HANDGUNS, - energy = ARMOR_ENERGY_SMALL, - bomb = ARMOR_BOMB_PADDED - ) - flags_inv = HIDEEARS|BLOCKHEADHAIR - cold_protection = HEAD - min_cold_protection_temperature = HELMET_MIN_COLD_PROTECTION_TEMPERATURE - heat_protection = HEAD - max_heat_protection_temperature = HELMET_MAX_HEAT_PROTECTION_TEMPERATURE - siemens_coefficient = 0.7 - w_class = ITEM_SIZE_NORMAL - species_restricted = list("exclude", SPECIES_NABBER, SPECIES_ADHERENT) - -/obj/item/clothing/head/helmet/nt - name = "\improper corporate security helmet" - desc = "A helmet with 'CORPORATE SECURITY' printed on the back in red lettering." - icon_state = "helmet_nt" - -/obj/item/clothing/head/helmet/pcrc - name = "\improper PCRC helmet" - desc = "A helmet with 'PRIVATE SECURITY' printed on the back in cyan lettering." - icon_state = "helmet_pcrc" - -/obj/item/clothing/head/helmet/nt/guard - accessories = list(/obj/item/clothing/accessory/helmet_cover/nt) - -/obj/item/clothing/head/helmet/tactical - name = "tactical helmet" - desc = "A tan helmet made from advanced ceramic. Comfortable and robust." - icon_state = "helmet_tac" - armor = list( - melee = ARMOR_MELEE_MAJOR, - bullet = ARMOR_BALLISTIC_RIFLE, - laser = ARMOR_LASER_HANDGUNS, - energy = ARMOR_ENERGY_RESISTANT, - bomb = ARMOR_BOMB_PADDED - ) - siemens_coefficient = 0.6 - -/obj/item/clothing/head/helmet/merc - name = "combat helmet" - desc = "A heavily reinforced helmet painted with red markings. Feels like it could take a lot of punishment." - icon_state = "helmet_merc" - armor = list( - melee = ARMOR_MELEE_VERY_HIGH, - bullet = ARMOR_BALLISTIC_RIFLE, - laser = ARMOR_LASER_HANDGUNS, - energy = ARMOR_ENERGY_RESISTANT, - bomb = ARMOR_BOMB_PADDED - ) - siemens_coefficient = 0.5 - -/obj/item/clothing/head/helmet/riot - name = "riot helmet" - desc = "It's a helmet specifically designed to protect against close range attacks." - icon_state = "helmet_riot" - valid_accessory_slots = null - body_parts_covered = HEAD|FACE|EYES //face shield - armor = list( - melee = ARMOR_MELEE_VERY_HIGH, - bullet = ARMOR_BALLISTIC_MINOR - ) - siemens_coefficient = 0.7 - action_button_name = "Toggle Visor" - -/obj/item/clothing/head/helmet/riot/attack_self(mob/user) - body_parts_covered ^= EYES|FACE - icon_state = initial(icon_state) - var/action = "lowers" - if (~body_parts_covered & EYES) - icon_state += "_up" - action = "raises" - visible_message(SPAN_ITALIC("\The [user] [action] the visor on \the [src]."), range = 3) - update_clothing_icon() - -/obj/item/clothing/head/helmet/ablative - name = "ablative helmet" - desc = "A helmet made from advanced materials which protects against concentrated energy weapons." - icon_state = "helmet_reflect" - valid_accessory_slots = null - armor = list( - melee = ARMOR_MELEE_SMALL, - bullet = ARMOR_BALLISTIC_MINOR, - laser = ARMOR_LASER_RIFLES, - energy = ARMOR_ENERGY_RESISTANT - ) - siemens_coefficient = 0 - -/obj/item/clothing/head/helmet/ballistic - name = "ballistic helmet" - desc = "A helmet with reinforced plating to protect against ballistic projectiles." - icon_state = "helmet_bulletproof" - valid_accessory_slots = null - armor = list( - melee = ARMOR_MELEE_MINOR, - bullet = ARMOR_BALLISTIC_AP, - laser = ARMOR_LASER_SMALL, - bomb = ARMOR_BOMB_PADDED - ) - siemens_coefficient = 0.7 - -/obj/item/clothing/head/helmet/swat - name = "\improper SWAT helmet" - desc = "They're often used by highly trained Swat Members." - icon_state = "helmet_merc" - armor = list( - melee = ARMOR_MELEE_VERY_HIGH, - bullet = ARMOR_BALLISTIC_RESISTANT, - laser = ARMOR_LASER_HANDGUNS, - energy = ARMOR_ENERGY_RESISTANT, - bomb = ARMOR_BOMB_PADDED - ) - valid_accessory_slots = null - cold_protection = HEAD - min_cold_protection_temperature = SPACE_HELMET_MIN_COLD_PROTECTION_TEMPERATURE - siemens_coefficient = 0.5 - -/obj/item/clothing/head/helmet/thunderdome - name = "\improper Thunderdome helmet" - desc = "'Let the battle commence!'" - icon_state = "thunderdome" - valid_accessory_slots = null - armor = list( - melee = ARMOR_MELEE_VERY_HIGH, - bullet = ARMOR_BALLISTIC_RESISTANT, - laser = ARMOR_LASER_HANDGUNS, - energy = ARMOR_ENERGY_RESISTANT, - bomb = ARMOR_BOMB_PADDED - ) - cold_protection = HEAD - min_cold_protection_temperature = SPACE_HELMET_MIN_COLD_PROTECTION_TEMPERATURE - siemens_coefficient = 1 - -/obj/item/clothing/head/helmet/gladiator - name = "gladiator helmet" - desc = "Ave, Imperator, morituri te salutant." - icon_state = "gladiator" - valid_accessory_slots = null - flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|BLOCKHAIR - body_parts_covered = HEAD|FACE - siemens_coefficient = 1 - -/obj/item/clothing/head/helmet/augment - name = "Augment Array" - desc = "A helmet with optical and cranial augments coupled to it." - icon_state = "v62" - valid_accessory_slots = null - armor = list( - melee = ARMOR_MELEE_VERY_HIGH, - bullet = ARMOR_BALLISTIC_RESISTANT, - laser = ARMOR_LASER_HANDGUNS, - energy = ARMOR_ENERGY_RESISTANT, - bomb = ARMOR_BOMB_PADDED - ) - flags_inv = HIDEEARS|HIDEEYES - body_parts_covered = HEAD|EYES|BLOCKHEADHAIR - cold_protection = HEAD - min_cold_protection_temperature = SPACE_HELMET_MIN_COLD_PROTECTION_TEMPERATURE - siemens_coefficient = 0.5 - -//Non-hardsuit ERT helmets. -//Commander -/obj/item/clothing/head/helmet/ert - name = "asset protection command helmet" - desc = "An in-atmosphere helmet worn by many corporate and private asset protection forces. Has blue highlights." - icon_state = "erthelmet_cmd" - valid_accessory_slots = null - item_state_slots = list( - slot_l_hand_str = "syndicate-helm-green", - slot_r_hand_str = "syndicate-helm-green", - ) - armor = list( - melee = ARMOR_MELEE_MAJOR, - bullet = ARMOR_BALLISTIC_RIFLE, - laser = ARMOR_LASER_HANDGUNS, - energy = ARMOR_ENERGY_RESISTANT, - bomb = ARMOR_BIO_MINOR - ) - -//Security -/obj/item/clothing/head/helmet/ert/security - name = "asset protection security helmet" - desc = "An in-atmosphere helmet worn by many corporate and private asset protection forces. Has red highlights." - icon_state = "erthelmet_sec" - -//Engineer -/obj/item/clothing/head/helmet/ert/engineer - name = "asset protection engineering helmet" - desc = "An in-atmosphere helmet worn by many corporate and private asset protection forces. Has orange highlights." - icon_state = "erthelmet_eng" - -//Medical -/obj/item/clothing/head/helmet/ert/medical - name = "asset protection medical helmet" - desc = "An in-atmosphere helmet worn by many corporate and private asset protection forces. Has red and white highlights." - icon_state = "erthelmet_med" - -/obj/item/clothing/head/helmet/nt/pilot - name = "corporate pilot's helmet" - desc = "A corporate pilot's helmet for operating the cockpit in style for a hefty paycheck." - icon_state = "pilotnt" - -/obj/item/clothing/head/helmet/skrell - name = "skrellian helmet" - desc = "A helmet built for use by a Skrell. This one appears to be fairly standard and reliable." - icon_state = "helmet_skrell" - valid_accessory_slots = null - - -/obj/item/clothing/head/helmet/pirate - name = "pirate hat" - desc = "Yarr." - icon_state = "pirate" - item_state = "pirate" - valid_accessory_slots = null - armor = list( - melee = ARMOR_MELEE_MAJOR, - bullet = ARMOR_BALLISTIC_PISTOL, - laser = ARMOR_LASER_SMALL, - energy = ARMOR_ENERGY_MINOR, - bomb = ARMOR_BOMB_PADDED, - bio = ARMOR_BIO_SMALL, - rad = ARMOR_RAD_MINOR - ) - flags_inv = BLOCKHAIR - body_parts_covered = 0 - siemens_coefficient = 0.9 - -/obj/item/clothing/head/helmet/divinghelmet - name = "diving helmet" - desc = "An old-timey diving helmet, built to withstand immense pressures and provide breathable air." - icon_state = "divinghelmet" - valid_accessory_slots = null - flash_protection = FLASH_PROTECTION_MINOR - item_flags = ITEM_FLAG_AIRTIGHT - min_pressure_protection = 0 - min_cold_protection_temperature = SPACE_HELMET_MIN_COLD_PROTECTION_TEMPERATURE - max_heat_protection_temperature = SPACE_SUIT_MAX_HEAT_PROTECTION_TEMPERATURE - max_pressure_protection = VOIDSUIT_MAX_PRESSURE - armor = list( - melee = ARMOR_MELEE_VERY_HIGH, - bullet = ARMOR_BALLISTIC_RIFLE, - laser = ARMOR_LASER_MAJOR, - energy = ARMOR_ENERGY_MINOR, - bomb = ARMOR_BOMB_RESISTANT, - bio = ARMOR_BIO_SHIELDED, - rad = ARMOR_RAD_SMALL - ) - species_restricted = list(SPECIES_HUMAN) \ No newline at end of file diff --git a/code/modules/clothing/head/jobs.dm b/code/modules/clothing/head/jobs.dm deleted file mode 100644 index 5fea3ab9fb115..0000000000000 --- a/code/modules/clothing/head/jobs.dm +++ /dev/null @@ -1,176 +0,0 @@ - -//Bartender -/obj/item/clothing/head/chefhat - name = "chef's hat" - desc = "It's a hat used by chefs to keep hair out of your food. Judging by the food in the mess, they don't work." - icon_state = "chefhat" - item_state = "chefhat" - -//Captain -/obj/item/clothing/head/caphat - name = "captain's hat" - icon_state = "captain" - desc = "It's good being the king." - item_state_slots = list( - slot_l_hand_str = "caphat", - slot_r_hand_str = "caphat", - ) - body_parts_covered = 0 - -/obj/item/clothing/head/caphat/cap - name = "captain's cap" - desc = "You fear to wear it for the negligence it brings." - icon_state = "capcap" - -/obj/item/clothing/head/caphat/formal - name = "parade hat" - desc = "No one in a commanding position should be without a perfect, white hat of ultimate authority." - icon_state = "officercap" - -//HOP -/obj/item/clothing/head/caphat/hop - name = "crew resource's hat" - desc = "A stylish hat that both protects you from enraged former-crewmembers and gives you a false sense of authority." - icon_state = "hopcap" - -//Chaplain -/obj/item/clothing/head/chaplain_hood - name = "chaplain's hood" - desc = "It's hood that covers the head. It keeps you warm during the space winters." - icon_state = "chaplain_hood" - flags_inv = BLOCKHAIR - body_parts_covered = HEAD - -//Chaplain -/obj/item/clothing/head/nun_hood - name = "nun hood" - desc = "Maximum piety in this star system." - icon_state = "nun_hood" - flags_inv = BLOCKHAIR - body_parts_covered = HEAD - -//Medical -/obj/item/clothing/head/surgery - name = "surgical cap" - desc = "A cap surgeons wear during operations. Keeps their hair from tickling your internal organs." - icon_state = "surgcap" - flags_inv = BLOCKHEADHAIR - -/obj/item/clothing/head/surgery/purple - name = "purple surgical cap" - color = "#7a1b3f" - -/obj/item/clothing/head/surgery/blue - name = "blue surgical cap" - color = "#4891e1" - -/obj/item/clothing/head/surgery/green - name = "green surgical cap" - color = "#255a3e" - -/obj/item/clothing/head/surgery/black - name = "black surgical cap" - color = "#242424" - -/obj/item/clothing/head/surgery/navyblue - name = "navy blue surgical cap" - color = "#1f3a69" - -/obj/item/clothing/head/surgery/lilac - name = "lilac surgical cap" - color = "#c8a2c8" - -/obj/item/clothing/head/surgery/teal - name = "teal surgical cap" - color = "#008080" - -/obj/item/clothing/head/surgery/heliodor - name = "heliodor surgical cap" - color = "#aad539" - -//Berets -/obj/item/clothing/head/beret - name = "beret" - desc = "A beret, an artists favorite headwear." - icon_state = "beret" - body_parts_covered = 0 - -/obj/item/clothing/head/beret/sec - name = "corporate security beret" - desc = "A beret with the security insignia emblazoned on it. For officers that are more inclined towards style than safety." - icon_state = "beret_corporate_red" - -/obj/item/clothing/head/beret/sec/navy/officer - name = "corporate security officer beret" - desc = "A navy blue beret with an officer's rank emblem. For officers that are more inclined towards style than safety." - icon_state = "beret_corporate_navy_officer" - -/obj/item/clothing/head/beret/sec/navy/hos - name = "corporate security commander beret" - desc = "A navy blue beret with a commander's rank emblem. For officers that are more inclined towards style than safety." - icon_state = "beret_corporate_navy_hos" - -/obj/item/clothing/head/beret/sec/navy/warden - name = "corporate security warden beret" - desc = "A navy blue beret with a warden's rank emblem. For officers that are more inclined towards style than safety." - icon_state = "beret_corporate_navy_warden" - -/obj/item/clothing/head/beret/sec/corporate/officer - name = "corporate security officer beret" - desc = "A corporate black beret with an officer's rank emblem. For officers that are more inclined towards style than safety." - icon_state = "beret_corporate_officer" - -/obj/item/clothing/head/beret/sec/corporate/hos - name = "corporate security commander beret" - desc = "A corporate black beret with a commander's rank emblem. For officers that are more inclined towards style than safety." - icon_state = "beret_corporate_hos" - -/obj/item/clothing/head/beret/sec/corporate/warden - name = "corporate security warden beret" - desc = "A corporate black beret with a warden's rank emblem. For officers that are more inclined towards style than safety." - icon_state = "beret_corporate_warden" - -/obj/item/clothing/head/beret/engineering - name = "corporate engineering beret" - desc = "A beret with the engineering insignia emblazoned on it. For engineers that are more inclined towards style than safety." - icon_state = "beret_orange" - -/obj/item/clothing/head/beret/purple - name = "purple beret" - desc = "A stylish, if purple, beret. For personnel that are more inclined towards style than safety." - icon_state = "beret_purple" - -/obj/item/clothing/head/beret/centcom/officer - name = "asset protection beret" - desc = "A navy blue beret adorned with the crest of corporate asset protection. For asset protection agents that are more inclined towards style than safety." - icon_state = "beret_corporate_navy" - -/obj/item/clothing/head/beret/centcom/captain - name = "asset protection command beret" - desc = "A white beret adorned with the crest of corporate asset protection. For asset protection leaders that are more inclined towards style than safety." - icon_state = "beret_corporate_white" - -/obj/item/clothing/head/beret/deathsquad - name = "heavy asset protection beret" - desc = "An armored red beret adorned with the crest of corporate asset protection. Doesn't sacrifice style or safety." - icon_state = "beret_red" - armor = list( - melee = ARMOR_MELEE_VERY_HIGH, - bullet = ARMOR_BALLISTIC_RIFLE, - laser = ARMOR_LASER_HANDGUNS, - energy = ARMOR_ENERGY_SMALL, - bomb = ARMOR_BOMB_PADDED, - bio = ARMOR_BIO_RESISTANT, - rad = ARMOR_RAD_MINOR - ) - siemens_coefficient = 0.9 - -/obj/item/clothing/head/beret/guard - name = "corporate security beret" - desc = "A white beret adorned with a corporate logo. For security guards that are more inclined towards style than safety." - icon_state = "corpsec_beret" - -/obj/item/clothing/head/beret/plaincolor - name = "beret" - desc = "A simple, solid color beret. This one has no emblems or insignia on it." - icon_state = "beret_white" \ No newline at end of file diff --git a/code/modules/clothing/head/misc.dm b/code/modules/clothing/head/misc.dm deleted file mode 100644 index e919f2355941f..0000000000000 --- a/code/modules/clothing/head/misc.dm +++ /dev/null @@ -1,390 +0,0 @@ - - -/obj/item/clothing/head/centhat - name = "\improper CentComm. hat" - icon_state = "centcom" - item_state_slots = list( - slot_l_hand_str = "centhat", - slot_r_hand_str = "centhat", - ) - desc = "It's good to be emperor." - siemens_coefficient = 0.9 - body_parts_covered = 0 - -/obj/item/clothing/head/hairflower - name = "hair flower pin" - icon_state = "hairflower" - desc = "Smells nice." - slot_flags = SLOT_HEAD | SLOT_EARS - body_parts_covered = 0 - -/obj/item/clothing/head/hairflower/blue - icon_state = "hairflower_blue" - -/obj/item/clothing/head/hairflower/pink - icon_state = "hairflower_pink" - -/obj/item/clothing/head/hairflower/yellow - icon_state = "hairflower_yellow" - -/obj/item/clothing/head/hairflower/bow - icon_state = "bow" - name = "hair bow" - desc = "A ribbon tied into a bow with a clip on the back to attach to hair." - -/obj/item/clothing/head/powdered_wig - name = "powdered wig" - desc = "A powdered wig." - icon_state = "pwig" - item_state = "pwig" - -/obj/item/clothing/head/that - name = "top-hat" - desc = "It's an amish looking hat." - icon_state = "tophat" - item_state = "tophat" - siemens_coefficient = 0.9 - body_parts_covered = 0 - -/obj/item/clothing/head/redcoat - name = "redcoat's hat" - icon_state = "redcoat" - desc = "'I guess it's a redhead.'" - body_parts_covered = 0 - -/obj/item/clothing/head/mailman - name = "mail cap" - icon_state = "mailman" - desc = "Choo-choo!" - body_parts_covered = 0 - -/obj/item/clothing/head/plaguedoctorhat - name = "plague doctor's hat" - desc = "These were once used by Plague doctors. They're pretty much useless." - icon_state = "plaguedoctor" - permeability_coefficient = 0.01 - siemens_coefficient = 0.9 - body_parts_covered = 0 - -/obj/item/clothing/head/hasturhood - name = "hastur's hood" - desc = "It's unspeakably stylish." - icon_state = "hasturhood" - flags_inv = BLOCKHAIR - body_parts_covered = HEAD|FACE|EYES - -/obj/item/clothing/head/nursehat - name = "nurse's hat" - desc = "It allows quick identification of trained medical personnel." - icon_state = "nursehat" - siemens_coefficient = 0.9 - body_parts_covered = 0 - -/obj/item/clothing/head/syndicatefake - name = "red space-helmet replica" - item_state_slots = list( - slot_l_hand_str = "syndicate-helm-black-red", - slot_r_hand_str = "syndicate-helm-black-red", - ) - icon_state = "syndicate" - desc = "A plastic replica of a bloodthirsty mercenary's space helmet, you'll look just like a real murderous criminal operative in this! This is a toy, it is not made for use in space!" - flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE|BLOCKHAIR - siemens_coefficient = 2.0 - body_parts_covered = HEAD|FACE|EYES - item_flags = null - -/obj/item/clothing/head/cueball - name = "cueball helmet" - desc = "A large, featureless white orb mean to be worn on your head. How do you even see out of this thing?" - icon_state = "cueball" - item_state = "cueball" - flags_inv = BLOCKHAIR - body_parts_covered = HEAD|FACE|EYES - item_flags = null - -/obj/item/clothing/head/cardborg - name = "cardborg helmet" - desc = "A helmet made out of a box." - icon_state = "cardborg_h" - item_state = "cardborg_h" - flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE - body_parts_covered = HEAD|FACE|EYES - item_flags = null - -/obj/item/clothing/head/cardborg/Initialize() - . = ..() - set_extension(src, /datum/extension/appearance/cardborg) - -/obj/item/clothing/head/justice - name = "justice hat" - desc = "fight for what's righteous!" - icon_state = "justicered" - flags_inv = BLOCKHAIR - body_parts_covered = HEAD|EYES - -/obj/item/clothing/head/justice/blue - icon_state = "justiceblue" - -/obj/item/clothing/head/justice/yellow - icon_state = "justiceyellow" - -/obj/item/clothing/head/justice/green - icon_state = "justicegreen" - -/obj/item/clothing/head/justice/pink - icon_state = "justicepink" - -/obj/item/clothing/head/rabbitears - name = "rabbit ears" - desc = "Wearing these makes you looks useless, and only good for your sex appeal." - icon_state = "bunny" - body_parts_covered = 0 - -/obj/item/clothing/head/flatcap - name = "flat cap" - desc = "A working man's cap." - icon_state = "flatcap_white" - item_state_slots = list( - slot_l_hand_str = "det_hat", - slot_r_hand_str = "det_hat", - ) - siemens_coefficient = 0.9 - - -/obj/item/clothing/head/mariner - name = "mariner's cap" - desc = "A cap loved by farmers, sailors and rabblerousers in the whole galaxy." - icon_state = "mariner_white" - siemens_coefficient = 0.9 - -/obj/item/clothing/head/pirate - name = "pirate hat" - desc = "Yarr." - icon_state = "pirate" - body_parts_covered = 0 - -/obj/item/clothing/head/hgpiratecap - name = "pirate hat" - desc = "Yarr." - icon_state = "hgpiratecap" - body_parts_covered = 0 - -/obj/item/clothing/head/bandana - name = "pirate bandana" - desc = "Yarr." - icon_state = "bandana" - body_parts_covered = 0 - -/obj/item/clothing/head/bandana/green - name = "green bandana" - desc = "It's a green bandana with some fine nanotech lining." - icon_state = "greenbandana" - item_state = "greenbandana" - -/obj/item/clothing/head/bandana/orange //themij: Taryn Kifer - name = "orange bandana" - desc = "An orange piece of cloth, worn on the head." - icon_state = "orange_bandana" - -/obj/item/clothing/head/bowler - name = "bowler-hat" - desc = "Gentleman, elite aboard!" - icon_state = "bowler" - body_parts_covered = 0 - -//stylish bs12 hats - -/obj/item/clothing/head/bowlerhat - name = "bowler hat" - icon_state = "bowler_hat" - desc = "For the gentleman of distinction." - body_parts_covered = 0 - -/obj/item/clothing/head/bowlerhat/razor - name = "bowler-hat" - desc = "The brim of this hat is covered in thin razors." - sharp = TRUE - edge = TRUE - force = 10 - throwforce = 60 - throw_range = 9 - throw_speed = 4 - does_spin = FALSE - attack_verb = list("sliced", "torn", "cut") - armor = list( - melee = ARMOR_MELEE_RESISTANT, - bullet = ARMOR_BALLISTIC_RESISTANT, - laser = ARMOR_LASER_HANDGUNS, - energy = ARMOR_ENERGY_SMALL, - bomb = ARMOR_BOMB_PADDED - ) - -/obj/item/clothing/head/beaverhat - name = "beaver hat" - icon_state = "beaver_hat" - desc = "Soft felt makes this hat both comfortable and elegant." - -/obj/item/clothing/head/boaterhat - name = "boater hat" - icon_state = "boater_hat" - desc = "The ultimate in summer fashion." - -/obj/item/clothing/head/fedora - name = "fedora" - icon_state = "fedora" - desc = "A sharp, stylish hat." - -/obj/item/clothing/head/panama - name = "panama hat" - icon_state = "panama" - desc = "A hat that makes you want to smuggle drugs." - - -/obj/item/clothing/head/feathertrilby - name = "feather trilby" - icon_state = "feather_trilby" - desc = "A sharp, stylish hat with a feather." - -/obj/item/clothing/head/fez - name = "fez" - icon_state = "fez" - desc = "You should wear a fez. Fezzes are cool." - -//end bs12 hats - -/obj/item/clothing/head/witchwig - name = "witch costume wig" - desc = "Eeeee~heheheheheheh!" - icon_state = "witch" - flags_inv = BLOCKHAIR - siemens_coefficient = 2.0 - -/obj/item/clothing/head/chicken - name = "chicken suit head" - desc = "Bkaw!" - icon_state = "chickenhead" - item_state_slots = list( - slot_l_hand_str = "chickensuit", - slot_r_hand_str = "chickensuit", - ) - flags_inv = BLOCKHAIR - siemens_coefficient = 0.7 - body_parts_covered = HEAD|FACE|EYES - -/obj/item/clothing/head/bearpelt - name = "bear pelt hat" - desc = "Fuzzy." - icon_state = "bearpelt" - flags_inv = BLOCKHAIR - siemens_coefficient = 0.7 - -/obj/item/clothing/head/xenos - name = "xenos helmet" - icon_state = "xenos" - item_state_slots = list( - slot_l_hand_str = "xenos_helm", - slot_r_hand_str = "xenos_helm", - ) - desc = "A helmet made out of chitinous alien hide." - w_class = ITEM_SIZE_NORMAL - flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE|BLOCKHAIR - siemens_coefficient = 2.0 - body_parts_covered = HEAD|FACE|EYES - item_flags = null - -/obj/item/clothing/head/philosopher_wig - name = "natural philosopher's wig" - desc = "A stylish monstrosity unearthed from Earth's Renaissance period. With this most distinguish'd wig, you'll be ready for your next soiree!" - icon_state = "philosopher_wig" - item_state_slots = list( - slot_l_hand_str = "pwig", - slot_r_hand_str = "pwig", - ) - flags_inv = BLOCKHAIR - body_parts_covered = 0 - -/obj/item/clothing/head/hijab - name = "hijab" - desc = "A veil which is wrapped to cover the head and chest." - icon_state = "hijab" - body_parts_covered = 0 - flags_inv = BLOCKHAIR - -/obj/item/clothing/head/kippa - name = "kippa" - desc = "A small, brimless cap." - icon_state = "kippa" - body_parts_covered = 0 - -/obj/item/clothing/head/turban - name = "turban" - desc = "A sturdy cloth, worn around the head." - icon_state = "turban" - body_parts_covered = 0 - flags_inv = BLOCKHEADHAIR //Shows beards! - -/obj/item/clothing/head/cowboy_hat - name = "cowboy hat" - desc = "A wide-brimmed hat, in the prevalent style of America's frontier period. By SolGov law, you are required to wear this hat while watching True Grit." - icon_state = "cowboyhat" - item_state = "cowboy_hat" - body_parts_covered = 0 - -/obj/item/clothing/head/taqiyah - name = "taqiyah" - desc = "A short, rounded skullcap usually worn for religious purposes." - icon_state = "taqiyah" - item_state = "taqiyah" - body_parts_covered = 0 - -/obj/item/clothing/head/rastacap - name = "rastacap" - desc = "A round, crocheted cap, often worn to tuck hair away or for religious purposes." - icon_state = "rastacap" - item_state = "rastacap" - body_parts_covered = 0 - flags_inv = BLOCKHEADHAIR - -/obj/item/clothing/head/tank - name = "padded cap" - desc = "A padded skullcup for those prone to bumping their heads against hard surfaces." - icon_state = "tank" - flags_inv = BLOCKHEADHAIR - color = "#5f5f5f" - armor = list( - melee = ARMOR_MELEE_KNIVES, - bomb = ARMOR_BOMB_PADDED - ) - -/obj/item/clothing/head/tank/olive - color = "#727c58" - -/obj/item/clothing/head/tank/tan - color = "#ae9f79" - -/obj/item/clothing/head/beanie - name = "beanie" - desc = "A head-hugging brimless winter cap. This one is tight." - icon_state = "beanie" - item_state = "beanie" - body_parts_covered = 0 - -/obj/item/clothing/head/helmet/facecover - name = "face cover" - desc = "A helmet made of plastic. It's completely opaque. This will stop the stare." - icon_state = "facecover" - valid_accessory_slots = null - tint = TINT_BLIND - flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE|BLOCKHAIR - body_parts_covered = HEAD|FACE|EYES - flash_protection = FLASH_PROTECTION_MAJOR - -/obj/item/clothing/head/beret/pcrc - name = "\improper PCRC beret" - desc = "A navy beret with the emblem of Proxima Centauri Risk Control, a private security firm. For agents that are more inclined towards style than safety." - icon_state = "beret_corporate_pcrc" - -/obj/item/clothing/head/beret/saare - name = "\improper SAARE beret" - desc = "A gray beret with the emblem of Strategic Assault and Asset Retention Enterprises, a private military corporation. For mercenaries that are more inclined towards style than safety." - icon_state = "beret_corporate_saare" diff --git a/code/modules/clothing/head/misc_special.dm b/code/modules/clothing/head/misc_special.dm deleted file mode 100644 index d737c00795899..0000000000000 --- a/code/modules/clothing/head/misc_special.dm +++ /dev/null @@ -1,218 +0,0 @@ -/* - * Contents: - * Welding mask - * Cakehat - * Ushanka - * Pumpkin head - * Kitty ears - * - */ - -/* - * Welding mask - */ -/obj/item/clothing/head/welding - name = "welding helmet" - desc = "A head-mounted face cover designed to protect the wearer completely from space-arc eye." - icon_state = "welding" - item_state_slots = list( - slot_l_hand_str = "welding", - slot_r_hand_str = "welding", - ) - matter = list(MATERIAL_STEEL = 3000, MATERIAL_GLASS = 1000) - var/up = 0 - armor = list( - melee = ARMOR_MELEE_SMALL - ) - flags_inv = (HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE) - item_flags = null - body_parts_covered = HEAD|FACE|EYES - action_button_name = "Flip Welding Mask" - siemens_coefficient = 0.9 - w_class = ITEM_SIZE_NORMAL - var/base_state - flash_protection = FLASH_PROTECTION_MAJOR - tint = TINT_HEAVY - -/obj/item/clothing/head/welding/attack_self() - if(!base_state) - base_state = icon_state - toggle() - - -/obj/item/clothing/head/welding/verb/toggle() - set category = "Object" - set name = "Adjust welding mask" - set src in usr - - if(CanPhysicallyInteract(usr)) - if(src.up) - src.up = !src.up - body_parts_covered |= (EYES|FACE) - flags_inv |= (HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE) - flash_protection = initial(flash_protection) - tint = initial(tint) - icon_state = base_state - item_state = base_state - to_chat(usr, "You flip the [src] down to protect your eyes.") - else - src.up = !src.up - body_parts_covered &= ~(EYES|FACE) - flash_protection = FLASH_PROTECTION_NONE - tint = TINT_NONE - flags_inv &= ~(HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE) - icon_state = "[base_state]up" - item_state = "[base_state]up" - to_chat(usr, "You push the [src] up out of your face.") - update_clothing_icon() //so our mob-overlays - update_vision() - usr.update_action_buttons() - -/obj/item/clothing/head/welding/demon - name = "demonic welding helmet" - desc = "A painted welding helmet, this one has a demonic face on it." - icon_state = "demonwelding" - item_state_slots = list( - slot_l_hand_str = "demonwelding", - slot_r_hand_str = "demonwelding", - ) - -/obj/item/clothing/head/welding/knight - name = "knightly welding helmet" - desc = "A painted welding helmet, this one looks like a knights helmet." - icon_state = "knightwelding" - -/obj/item/clothing/head/welding/fancy - name = "fancy welding helmet" - desc = "A painted welding helmet, the black and gold make this one look very fancy." - icon_state = "fancywelding" - item_state_slots = list( - slot_l_hand_str = "fancywelding", - slot_r_hand_str = "fancywelding", - ) - -/obj/item/clothing/head/welding/engie - name = "engineering welding helmet" - desc = "A painted welding helmet, this one has been painted the engineering colours." - icon_state = "engiewelding" - item_state_slots = list( - slot_l_hand_str = "engiewelding", - slot_r_hand_str = "engiewelding", - ) - -/obj/item/clothing/head/welding/carp - name = "carp welding helmet" - desc = "A painted welding helmet, this one has a carp face on it." - icon_state = "carpwelding" - item_state_slots = list( - slot_l_hand_str = "carpwelding", - slot_r_hand_str = "carpwelding", - ) - -/* - * Cakehat - */ -/obj/item/clothing/head/cakehat - name = "cake-hat" - desc = "It's tasty looking!" - icon_state = "cake0" - item_state = "cake0" - var/onfire = 0 - body_parts_covered = HEAD - item_flags = null - -/obj/item/clothing/head/cakehat/Process() - if(!onfire) - STOP_PROCESSING(SSobj, src) - return - - var/turf/location = src.loc - if(ismob(location)) - var/mob/living/carbon/human/M = location - if(M.l_hand == src || M.r_hand == src || M.head == src) - location = M.loc - - if (istype(location, /turf)) - location.hotspot_expose(700, 1) - -/obj/item/clothing/head/cakehat/attack_self(mob/user as mob) - src.onfire = !( src.onfire ) - if (src.onfire) - src.force = 3 - src.damtype = DAMAGE_BURN - src.icon_state = "cake1" - src.item_state = "cake1" - START_PROCESSING(SSobj, src) - else - src.force = null - src.damtype = DAMAGE_BRUTE - src.icon_state = "cake0" - src.item_state = "cake0" - return - - -/* - * Ushanka - */ -/obj/item/clothing/head/ushanka - name = "ushanka" - desc = "Perfect for winter in Siberia, da?" - icon_state = "ushankadown" - var/icon_state_up = "ushankaup" - flags_inv = HIDEEARS|BLOCKHEADHAIR - cold_protection = HEAD - min_cold_protection_temperature = HELMET_MIN_COLD_PROTECTION_TEMPERATURE - -/obj/item/clothing/head/ushanka/attack_self(mob/user as mob) - if(icon_state == initial(icon_state)) - icon_state = icon_state_up - to_chat(user, "You raise the ear flaps on the ushanka.") - else - icon_state = initial(icon_state) - to_chat(user, "You lower the ear flaps on the ushanka.") - -/obj/item/clothing/head/ushanka/gcc - name = "GCC ushanka" - desc = "Perfect for keeping ears warm during your court-martial." - icon_state = "tccushankadown" - icon_state_up = "tccushankaup" - -/* - * Pumpkin head - */ -/obj/item/clothing/head/pumpkinhead - name = "carved pumpkin" - desc = "A jack o' lantern! Believed to ward off evil spirits." - icon_state = "hardhat0_pumpkin"//Could stand to be renamed - flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE|BLOCKHAIR - item_flags = null - body_parts_covered = HEAD|FACE|EYES - brightness_on = 0.2 - light_overlay = "helmet_light" - w_class = ITEM_SIZE_NORMAL - -/* - * Kitty ears - */ -/obj/item/clothing/head/kitty - name = "kitty ears" - desc = "A pair of kitty ears. Meow!" - icon_state = "kitty" - body_parts_covered = 0 - siemens_coefficient = 1.5 - item_icons = list() - -/obj/item/clothing/head/kitty/on_update_icon(var/mob/living/carbon/human/user) - if(!istype(user)) return - var/icon/ears = new/icon("icon" = 'icons/mob/onmob/onmob_head.dmi', "icon_state" = "kitty") - ears.Blend(user.head_hair_color, ICON_ADD) - - var/icon/earbit = new/icon("icon" = 'icons/mob/onmob/onmob_head.dmi', "icon_state" = "kittyinner") - ears.Blend(earbit, ICON_OVERLAY) - -/obj/item/clothing/head/richard - name = "chicken mask" - desc = "You can hear the distant sounds of rhythmic electronica." - icon_state = "richard" - body_parts_covered = HEAD|FACE - flags_inv = BLOCKHAIR diff --git a/code/modules/clothing/head/soft_caps.dm b/code/modules/clothing/head/soft_caps.dm deleted file mode 100644 index f48551530c48b..0000000000000 --- a/code/modules/clothing/head/soft_caps.dm +++ /dev/null @@ -1,109 +0,0 @@ -/obj/item/clothing/head/soft - name = "cargo cap" - desc = "It's a peaked cap in a tasteless yellow color." - icon_state = "cargosoft" - item_state_slots = list( - slot_l_hand_str = "helmet", //probably a placeholder - slot_r_hand_str = "helmet", - ) - var/flipped = 0 - siemens_coefficient = 0.9 - body_parts_covered = 0 - species_restricted = list("exclude") - - -/obj/item/clothing/head/soft/New() - ..() - set_extension(src, /datum/extension/base_icon_state, icon_state) - update_icon() - -/obj/item/clothing/head/soft/on_update_icon() - var/datum/extension/base_icon_state/bis = get_extension(src, /datum/extension/base_icon_state) - if(flipped) - icon_state = "[bis.base_icon_state]_flipped" - else - icon_state = bis.base_icon_state - -/obj/item/clothing/head/soft/dropped() - src.flipped=0 - update_icon() - ..() - -/obj/item/clothing/head/soft/attack_self(mob/user) - src.flipped = !src.flipped - if(src.flipped) - to_chat(user, "You flip the hat backwards.") - else - to_chat(user, "You flip the hat back in normal position.") - update_icon() - update_clothing_icon() //so our mob-overlays update - -/obj/item/clothing/head/soft/red - name = "red cap" - desc = "It's a peaked hat in a tasteless red color." - icon_state = "redsoft" - -/obj/item/clothing/head/soft/blue - name = "blue cap" - desc = "It's a peaked cap in a tasteless blue color." - icon_state = "bluesoft" - -/obj/item/clothing/head/soft/green - name = "green cap" - desc = "It's a peaked cap in a tasteless green color." - icon_state = "greensoft" - -/obj/item/clothing/head/soft/yellow - name = "yellow cap" - desc = "It's a peaked cap in a tasteless yellow color." - icon_state = "yellowsoft" - -/obj/item/clothing/head/soft/grey - name = "grey cap" - desc = "It's a peaked cap in a tasteful grey color." - icon_state = "greysoft" - -/obj/item/clothing/head/soft/orange - name = "orange cap" - desc = "It's a peaked cap in a tasteless orange color." - icon_state = "orangesoft" - -/obj/item/clothing/head/soft/mime - name = "white cap" - desc = "It's a peaked cap in a tasteless white color." - icon_state = "mimesoft" - -/obj/item/clothing/head/soft/purple - name = "purple cap" - desc = "It's a peaked cap in a tasteless purple color." - icon_state = "purplesoft" - -/obj/item/clothing/head/soft/rainbow - name = "rainbow cap" - desc = "It's a peaked cap in a bright rainbow of colors." - icon_state = "rainbowsoft" - -/obj/item/clothing/head/soft/sec - name = "security cap" - desc = "It's a field cap in tasteful red color." - icon_state = "secsoft" - -/obj/item/clothing/head/soft/sec/corp - name = "corporate security cap" - desc = "It's field cap in corporate colors." - icon_state = "corpsoft" - -/obj/item/clothing/head/soft/mbill - name = "shipping cap" - desc = "It's a ballcap bearing the colors of Major Bill's Shipping." - icon_state = "mbillsoft" - -/obj/item/clothing/head/soft/black - name = "black cap" - desc = "It's a peaked cap in a tasteful black color." - icon_state = "blacksoft" - -/obj/item/clothing/head/soft/sec/corp/guard - name = "corporate security cap" - desc = "It's field cap in corporate colors." - icon_state = "corpsec_soft" diff --git a/code/modules/clothing/masks/boxing.dm b/code/modules/clothing/masks/boxing.dm deleted file mode 100644 index a1d0d98873991..0000000000000 --- a/code/modules/clothing/masks/boxing.dm +++ /dev/null @@ -1,42 +0,0 @@ -/obj/item/clothing/mask/balaclava - name = "balaclava" - desc = "Designed to both hide identities and keep your face comfy and warm." - icon_state = "balaclava" - item_state = "balaclava" - flags_inv = HIDEFACE|BLOCKHAIR|HIDEEARS - body_parts_covered = FACE|HEAD - down_body_parts_covered = HEAD - down_flags_inv = BLOCKHEADHAIR - down_icon_state = "balaclava_r" - pull_mask = 1 - w_class = ITEM_SIZE_SMALL - sprite_sheets = list( - SPECIES_UNATHI = 'icons/mob/species/unathi/onmob_mask_unathi.dmi', - ) - -/obj/item/clothing/mask/balaclava/tactical - name = "green balaclava" - icon_state = "swatclava" - down_icon_state = "swatclava_r" - -/obj/item/clothing/mask/luchador - name = "Luchador Mask" - desc = "Worn by robust fighters, flying high to defeat their foes!" - icon_state = "luchag" - item_state = "luchag" - flags_inv = HIDEFACE|BLOCKHAIR|HIDEEARS - body_parts_covered = HEAD|FACE - w_class = ITEM_SIZE_SMALL - siemens_coefficient = 3.0 - -/obj/item/clothing/mask/luchador/tecnicos - name = "Tecnicos Mask" - desc = "Worn by robust fighters who uphold justice and fight honorably." - icon_state = "luchador" - item_state = "luchador" - -/obj/item/clothing/mask/luchador/rudos - name = "Rudos Mask" - desc = "Worn by robust fighters who are willing to do anything to win." - icon_state = "luchar" - item_state = "luchar" diff --git a/code/modules/clothing/masks/breath.dm b/code/modules/clothing/masks/breath.dm deleted file mode 100644 index debd7743b7d6c..0000000000000 --- a/code/modules/clothing/masks/breath.dm +++ /dev/null @@ -1,53 +0,0 @@ -/obj/item/clothing/mask/breath - desc = "A close-fitting mask that can be connected to an air supply." - name = "breath mask" - icon_state = "breath" - item_state = "breath" - item_flags = ITEM_FLAG_AIRTIGHT|ITEM_FLAG_FLEXIBLEMATERIAL - body_parts_covered = FACE - w_class = ITEM_SIZE_SMALL - gas_transfer_coefficient = 0.10 - permeability_coefficient = 0.50 - down_gas_transfer_coefficient = 1 - down_body_parts_covered = null - down_item_flags = ITEM_FLAG_THICKMATERIAL - down_icon_state = "breathdown" - pull_mask = 1 - sprite_sheets = list( - SPECIES_VOX = 'icons/mob/species/vox/onmob_mask_vox.dmi', - SPECIES_VOX_ARMALIS = 'icons/mob/species/vox/onmob_mask_vox_armalis.dmi', - SPECIES_UNATHI = 'icons/mob/species/unathi/generated/onmob_mask_unathi.dmi', - ) - -/obj/item/clothing/mask/breath/medical - desc = "A close-fitting sterile mask that can be manually connected to an air supply for treatment." - name = "medical mask" - icon_state = "medical" - item_state = "medical" - permeability_coefficient = 0.01 - -/obj/item/clothing/mask/breath/anesthetic - desc = "A close-fitting sterile mask that is used by the anesthetic wallmounted pump." - name = "anesthetic mask" - icon_state = "medical" - item_state = "medical" - permeability_coefficient = 0.01 - -/obj/item/clothing/mask/breath/emergency - desc = "A close-fitting mask that is used by the wallmounted emergency oxygen pump." - name = "emergency mask" - icon_state = "breath" - item_state = "breath" - permeability_coefficient = 0.50 - -/obj/item/clothing/mask/breath/scba - desc = "A close-fitting self contained breathing apparatus mask. Can be connected to an air supply." - name = "\improper SCBA mask" - icon_state = "scba_mask" - item_state = "scba_mask" - down_icon_state = "scba_maskdown" - item_flags = ITEM_FLAG_AIRTIGHT|ITEM_FLAG_FLEXIBLEMATERIAL - flags_inv = HIDEEYES - body_parts_covered = FACE|EYES - gas_transfer_coefficient = 0.01 - diff --git a/code/modules/clothing/masks/chewable.dm b/code/modules/clothing/masks/chewable.dm deleted file mode 100644 index 52a0d7af6f1f3..0000000000000 --- a/code/modules/clothing/masks/chewable.dm +++ /dev/null @@ -1,204 +0,0 @@ -/obj/item/clothing/mask/chewable - name = "chewable item master" - desc = "You're not sure what this is. You should probably ahelp it." - icon = 'icons/obj/clothing/obj_mask.dmi' - body_parts_covered = 0 - - var/type_butt = null - var/chem_volume = 0 - var/chewtime = 0 - var/brand - var/list/filling = list() - item_flags = null - -/obj/item/clothing/mask/chewable/New() - ..() - atom_flags |= ATOM_FLAG_NO_REACT // so it doesn't react until you light it - create_reagents(chem_volume) // making the cigarrete a chemical holder with a maximum volume of 15 - for(var/R in filling) - reagents.add_reagent(R, filling[R]) - -/obj/item/clothing/mask/chewable/equipped(var/mob/living/user, var/slot) - ..() - if(slot == slot_wear_mask) - if(user.check_has_mouth()) - START_PROCESSING(SSobj, src) - else - to_chat(user, "You don't have a mouth, and can't make much use of \the [src].") - -/obj/item/clothing/mask/chewable/dropped() - STOP_PROCESSING(SSobj, src) - ..() - -/obj/item/clothing/mask/chewable/Destroy() - . = ..() - STOP_PROCESSING(SSobj, src) - -/obj/item/clothing/mask/chewable/proc/chew(amount) - chewtime -= amount - if(reagents && reagents.total_volume) - if(ishuman(loc)) - var/mob/living/carbon/human/C = loc - if (src == C.wear_mask && C.check_has_mouth()) - reagents.trans_to_mob(C, REM, CHEM_INGEST, 0.2) - add_trace_DNA(C) - else - STOP_PROCESSING(SSobj, src) - -/obj/item/clothing/mask/chewable/Process() - chew(1) - if(chewtime < 1) - extinguish() - -/obj/item/clothing/mask/chewable/tobacco - name = "wad" - desc = "A chewy wad of tobacco. Cut in long strands and treated with syrups so it doesn't taste like a ash-tray when you stuff it into your face." - throw_speed = 0.5 - icon_state = "chew" - type_butt = /obj/item/trash/cigbutt/spitwad - w_class = ITEM_SIZE_TINY - slot_flags = SLOT_EARS | SLOT_MASK - chem_volume = 50 - chewtime = 300 - brand = "tobacco" - -/obj/item/trash/cigbutt/spitwad - name = "spit wad" - desc = "A disgusting spitwad." - icon_state = "spit-chew" - -/obj/item/clothing/mask/chewable/proc/extinguish(var/mob/user, var/no_message) - STOP_PROCESSING(SSobj, src) - if (type_butt) - var/obj/item/butt = new type_butt(get_turf(src)) - transfer_fingerprints_to(butt) - butt.color = color - if(brand) - butt.desc += " This one is \a [brand]." - if(ismob(loc)) - var/mob/living/M = loc - if (!no_message) - to_chat(M, "You spit out the [name].") - qdel(src) - -/obj/item/clothing/mask/chewable/tobacco/lenni - name = "chewing tobacco" - desc = "A chewy wad of tobacco. Cut in long strands and treated with syrups so it tastes less like a ash-tray when you stuff it into your face." - filling = list(/datum/reagent/tobacco = 2) - -/obj/item/clothing/mask/chewable/tobacco/redlady - name = "chewing tobacco" - desc = "A chewy wad of fine tobacco. Cut in long strands and treated with syrups so it doesn't taste like a ash-tray when you stuff it into your face." - filling = list(/datum/reagent/tobacco/fine = 2) - -/obj/item/clothing/mask/chewable/tobacco/nico - name = "nicotine gum" - desc = "A chewy wad of synthetic rubber, laced with nicotine. Possibly the least disgusting method of nicotine delivery." - icon_state = "nic_gum" - type_butt = /obj/item/trash/cigbutt/spitgum -/obj/item/clothing/mask/chewable/tobacco/nico/New() - ..() - reagents.add_reagent(/datum/reagent/nicotine, 2) - color = reagents.get_color() - -/obj/item/clothing/mask/chewable/candy - name = "wad" - desc = "A chewy wad of wadding material." - throw_speed = 0.5 - icon_state = "chew" - type_butt = /obj/item/trash/cigbutt/spitgum - w_class = ITEM_SIZE_TINY - slot_flags = SLOT_EARS | SLOT_MASK - chem_volume = 50 - chewtime = 300 - filling = list(/datum/reagent/sugar = 2) - -/obj/item/trash/cigbutt/spitgum - name = "old gum" - desc = "A disgusting chewed up wad of gum." - icon_state = "spit-gum" - -/obj/item/trash/cigbutt/lollibutt - name = "popsicle stick" - desc = "A popsicle stick devoid of pop." - icon_state = "pop-stick" - -/obj/item/clothing/mask/chewable/candy/gum - name = "chewing gum" - desc = "A chewy wad of fine synthetic rubber and artificial flavoring." - icon_state = "gum" - item_state = "gum" - -/obj/item/clothing/mask/chewable/candy/gum/New() - ..() - reagents.add_reagent(pick(list( - /datum/reagent/drink/juice/grape, - /datum/reagent/drink/juice/orange, - /datum/reagent/drink/juice/lemon, - /datum/reagent/drink/juice/lime, - /datum/reagent/drink/juice/apple, - /datum/reagent/drink/juice/pear, - /datum/reagent/drink/juice/banana, - /datum/reagent/drink/juice/berry, - /datum/reagent/drink/juice/watermelon)), 3) - color = reagents.get_color() - -/obj/item/clothing/mask/chewable/candy/lolli - name = "lollipop" - desc = "A simple artificially flavored sphere of sugar on a handle. Colloquially known as a sucker. Allegedly one is born every minute." - type_butt = /obj/item/trash/cigbutt/lollibutt - icon_state = "lollipop" - item_state = "lollipop" - -/obj/item/clothing/mask/chewable/candy/lolli/New() - ..() - reagents.add_reagent(pick(list( - /datum/reagent/fuel, - /datum/reagent/drink/juice/grape, - /datum/reagent/drink/juice/orange, - /datum/reagent/drink/juice/lemon, - /datum/reagent/drink/juice/lime, - /datum/reagent/drink/juice/apple, - /datum/reagent/drink/juice/pear, - /datum/reagent/drink/juice/banana, - /datum/reagent/drink/juice/berry, - /datum/reagent/drink/juice/watermelon)), 3) - color = reagents.get_color() - -/obj/item/clothing/mask/chewable/candy/lolli/meds - name = "lollipop" - desc = "A sucrose sphere on a small handle, it has been infused with medication." - type_butt = /obj/item/trash/cigbutt/lollibutt - icon_state = "lollipop" - -/obj/item/clothing/mask/chewable/candy/lolli/meds/New() - ..() - reagents.add_reagent(pick(list( - /datum/reagent/dexalinp, - /datum/reagent/tricordrazine, - /datum/reagent/hyperzine, - /datum/reagent/hyronalin, - /datum/reagent/methylphenidate, - /datum/reagent/citalopram, - /datum/reagent/dylovene, - /datum/reagent/bicaridine, - /datum/reagent/kelotane, - /datum/reagent/inaprovaline)), 10) - color = reagents.get_color() - -/obj/item/clothing/mask/chewable/candy/lolli/weak_meds - name = "medicine lollipop" - desc = "A sucrose sphere on a small handle, it has been infused with medication." - filling = list(/datum/reagent/sugar = 6) - -/obj/item/clothing/mask/chewable/candy/lolli/weak_meds/New() - ..() - var/datum/reagent/payload = pick(list( - /datum/reagent/antidexafen, - /datum/reagent/paracetamol, - /datum/reagent/tricordrazine, - /datum/reagent/dylovene, - /datum/reagent/inaprovaline)) - reagents.add_reagent(payload, 15) - color = reagents.get_color() - desc = "[desc]. This one is labeled '[initial(payload.name)]'" diff --git a/code/modules/clothing/masks/cig_crafting.dm b/code/modules/clothing/masks/cig_crafting.dm deleted file mode 100644 index 90ae0333b32a0..0000000000000 --- a/code/modules/clothing/masks/cig_crafting.dm +++ /dev/null @@ -1,92 +0,0 @@ -/obj/item/clothing/mask/smokable/cigarette/rolled - name = "rolled cigarette" - desc = "A hand rolled cigarette using dried plant matter." - icon_state = "cigroll" - item_state = "cigoff" - type_butt = /obj/item/trash/cigbutt - chem_volume = 50 - brand = "handrolled" - filling = list() - var/filter = 0 - -/obj/item/clothing/mask/smokable/cigarette/rolled/examine(mob/user) - . = ..() - if(filter) - to_chat(user, "Capped off one end with a filter.") - -/obj/item/clothing/mask/smokable/cigarette/rolled/on_update_icon() - . = ..() - if(!lit) - icon_state = filter ? "cigoff" : "cigroll" -/////////// //Ported Straight from TG. I am not sorry. - BloodyMan //YOU SHOULD BE -//ROLLING// -/////////// -/obj/item/paper/cig - name = "rolling paper" - desc = "A thin piece of paper used to make smokeables." - icon = 'icons/obj/cigarettes.dmi' - icon_state = "cig_paper" - w_class = ITEM_SIZE_TINY - is_memo = TRUE - -/obj/item/paper/cig/fancy - name = "\improper Trident rolling paper" - desc = "A thin piece of trident branded paper used to make fine smokeables." - icon_state = "cig_paperf" - -/obj/item/paper/cig/filter - name = "cigarette filter" - desc = "A small nub like filter for cigarettes." - icon_state = "cig_filter" - w_class = ITEM_SIZE_TINY - -//tobacco sold seperately if you're too snobby to grow it yourself. -/obj/item/reagent_containers/food/snacks/grown/dried_tobacco - plantname = "tobacco" - w_class = ITEM_SIZE_TINY - -/obj/item/reagent_containers/food/snacks/grown/dried_tobacco/Initialize() - . = ..() - dry = TRUE - SetName("dried [name]") - color = "#a38463" -/obj/item/reagent_containers/food/snacks/grown/dried_tobacco/bad - plantname = "badtobacco" - -/obj/item/reagent_containers/food/snacks/grown/dried_tobacco/fine - plantname = "finetobacco" - -/obj/item/clothing/mask/smokable/cigarette/rolled/attackby(obj/item/I, mob/user) - if(istype(I, /obj/item/paper/cig/filter)) - if(filter) - to_chat(user, "[src] already has a filter!") - return - if(lit) - to_chat(user, "[src] is lit already!") - return - if(user.unEquip(I)) - to_chat(user, "You stick [I] into \the [src]") - filter = 1 - SetName("filtered [name]") - brand = "[brand] with a filter" - update_icon() - qdel(I) - return - ..() - -/obj/item/reagent_containers/food/snacks/grown/attackby(obj/item/I, mob/user) - if(is_type_in_list(I, list(/obj/item/paper/cig, /obj/item/paper, /obj/item/teleportation_scroll))) - if(!dry) - to_chat(user, "You need to dry [src] first!") - return - if(user.unEquip(I)) - var/obj/item/clothing/mask/smokable/cigarette/rolled/R = new(get_turf(src)) - R.chem_volume = reagents.total_volume - R.brand = "[src] handrolled in \the [I]." - reagents.trans_to_holder(R.reagents, R.chem_volume) - to_chat(user, "You roll \the [src] into \the [I]") - user.put_in_active_hand(R) - qdel(I) - qdel(src) - return - ..() diff --git a/code/modules/clothing/masks/gasmask.dm b/code/modules/clothing/masks/gasmask.dm deleted file mode 100644 index bed5e4356f1f0..0000000000000 --- a/code/modules/clothing/masks/gasmask.dm +++ /dev/null @@ -1,232 +0,0 @@ -/obj/item/clothing/mask/gas - name = "gas mask" - desc = "A face-covering mask that can be connected to an air supply. Filters harmful gases from the air." - icon_state = "fullgas" - item_state = "fullgas" - item_flags = ITEM_FLAG_BLOCK_GAS_SMOKE_EFFECT | ITEM_FLAG_AIRTIGHT - flags_inv = HIDEEARS|HIDEEYES|HIDEFACE - body_parts_covered = FACE|EYES - w_class = ITEM_SIZE_NORMAL - gas_transfer_coefficient = 0.01 - permeability_coefficient = 0.01 - siemens_coefficient = 0.9 - armor = list( - melee = ARMOR_MELEE_MINOR, - bio = ARMOR_BIO_STRONG - ) - filtered_gases = list( - GAS_PHORON, - GAS_N2O, - GAS_CHLORINE, - GAS_AMMONIA, - GAS_CO, - GAS_METHYL_BROMIDE, - GAS_METHANE - ) - var/clogged - var/filter_water - var/gas_filter_strength = 1 //For gas mask filters - - -/obj/item/clothing/mask/gas/examine(mob/user) - . = ..() - if(clogged) - to_chat(user, "The intakes are clogged with [clogged]!") - -/obj/item/clothing/mask/gas/filters_water() - return (filter_water && !clogged) - -/obj/item/clothing/mask/gas/attack_self(var/mob/user) - if(clogged) - user.visible_message("\The [user] begins unclogging the intakes of \the [src].") - if(do_after(user, 10 SECONDS, src, DO_PUBLIC_UNIQUE) && clogged) - user.visible_message("\The [user] has unclogged \the [src].") - clogged = FALSE - return - . = ..() - -/obj/item/clothing/mask/gas/filter_air(datum/gas_mixture/air) - var/datum/gas_mixture/filtered = new - - for(var/g in filtered_gases) - if(air.gas[g]) - filtered.gas[g] = air.gas[g] * gas_filter_strength - air.gas[g] -= filtered.gas[g] - - air.update_values() - filtered.update_values() - - return filtered - -/obj/item/clothing/mask/gas/half - name = "face mask" - desc = "A compact, durable gas mask that can be connected to an air supply." - icon_state = "halfgas" - item_state = "halfgas" - siemens_coefficient = 0.7 - body_parts_covered = FACE - w_class = ITEM_SIZE_SMALL - down_gas_transfer_coefficient = 1 - down_body_parts_covered = null - down_item_flags = null - down_icon_state = "halfgasdown" - pull_mask = TRUE - armor = list( - melee = ARMOR_MELEE_SMALL, - bullet = ARMOR_BALLISTIC_MINOR, - laser = ARMOR_LASER_MINOR, - bio = ARMOR_BIO_RESISTANT - ) - -//In scaling order of utility and seriousness - -/obj/item/clothing/mask/gas/radical - name = "gas mask" - desc = "A face-covering mask that can be connected to an air supply. Filters harmful gases from the air. This one has additional filters to remove radioactive particles." - icon_state = "gas_mask" - item_state = "gas_mask" - body_parts_covered = FACE|EYES - armor = list( - melee = ARMOR_MELEE_MINOR, - bio = ARMOR_BIO_STRONG, - rad = ARMOR_RAD_SMALL - ) - -/obj/item/clothing/mask/gas/budget - name = "gas mask" - desc = "A face-covering mask that can be connected to an air supply. Filters harmful gases from the air. This one looks pretty dodgy. Are you sure it works?" - icon_state = "gas_alt" - item_state = "gas_alt" - body_parts_covered = FACE|EYES - armor = list( - melee = ARMOR_MELEE_MINOR, - bio = ARMOR_BIO_SMALL - ) - -/obj/item/clothing/mask/gas/swat - name = "\improper SWAT mask" - desc = "A close-fitting tactical mask that can be connected to an air supply." - icon_state = "swat" - item_state = "swat" - siemens_coefficient = 0.7 - body_parts_covered = FACE|EYES - armor = list( - melee = ARMOR_MELEE_SMALL, - bullet = ARMOR_BALLISTIC_MINOR, - laser = ARMOR_LASER_MINOR, - bio = ARMOR_BIO_STRONG - ) - -/obj/item/clothing/mask/gas/syndicate - name = "tactical mask" - desc = "A close-fitting tactical mask that can be connected to an air supply." - icon_state = "swat" - item_state = "swat" - siemens_coefficient = 0.7 - armor = list( - melee = ARMOR_MELEE_SMALL, - bullet = ARMOR_BALLISTIC_SMALL, - laser = ARMOR_LASER_MINOR, - bio = ARMOR_BIO_STRONG - ) - -/obj/item/clothing/mask/gas/death_commando - name = "\improper Death Commando Mask" - desc = "A grim tactical mask worn by the fictional Death Commandos, elites of the also fictional Space Syndicate. Saturdays at 10!" - icon_state = "death" - item_state = "death" - siemens_coefficient = 0.2 - -/obj/item/clothing/mask/gas/cyborg - name = "cyborg visor" - desc = "Beep boop!" - icon_state = "death" - item_state = "death" - -//Plague Dr suit can be found in clothing/suits/bio.dm -/obj/item/clothing/mask/gas/plaguedoctor - name = "plague doctor mask" - desc = "A modernised version of the classic design, this mask will not only filter out phoron but it can also be connected to an air supply." - icon_state = "plaguedoctor" - item_state = "plaguedoctor" - armor = list( - bio = ARMOR_BIO_SHIELDED - ) - body_parts_covered = HEAD|FACE|EYES - -/obj/item/clothing/mask/gas/clown_hat - name = "clown wig and mask" - desc = "A true prankster's facial attire. A clown is incomplete without their wig and mask." - icon_state = "clown" - item_state = "clown" - -/obj/item/clothing/mask/gas/sexyclown - name = "sexy-clown wig and mask" - desc = "A feminine clown mask for the dabbling crossdressers or female entertainers." - icon_state = "sexyclown" - item_state = "sexyclown" - -/obj/item/clothing/mask/gas/mime - name = "mime mask" - desc = "The traditional mime's mask. It has an eerie facial posture." - icon_state = "mime" - item_state = "mime" - -/obj/item/clothing/mask/gas/monkeymask - name = "monkey mask" - desc = "A mask used when acting as a monkey." - icon_state = "monkeymask" - item_state = "monkeymask" - body_parts_covered = HEAD|FACE|EYES - -/obj/item/clothing/mask/gas/sexymime - name = "sexy mime mask" - desc = "A traditional female mime's mask." - icon_state = "sexymime" - item_state = "sexymime" - -/obj/item/clothing/mask/gas/owl_mask - name = "owl mask" - desc = "Twoooo!" - icon_state = "owl" - item_state = "owl" - body_parts_covered = HEAD|FACE|EYES - -//Vox Unique Masks - -/obj/item/clothing/mask/gas/vox - name = "vox breathing mask" - desc = "A small oxygen filter for use by Vox." - icon_state = "respirator" - item_state = "respirator" - flags_inv = 0 - body_parts_covered = 0 - species_restricted = list(SPECIES_VOX, SPECIES_VOX_ARMALIS) - filtered_gases = list(GAS_OXYGEN) - - -/obj/item/clothing/mask/gas/swat/vox - name = "alien mask" - desc = "Clearly not designed for a human face." - icon_state = "voxswat" - item_state = "voxswat" - body_parts_covered = EYES - species_restricted = list(SPECIES_VOX, SPECIES_VOX_ARMALIS) - filtered_gases = list( - GAS_OXYGEN, - GAS_PHORON, - GAS_N2O, - GAS_CHLORINE, - GAS_AMMONIA, - GAS_CO, - GAS_METHYL_BROMIDE, - GAS_METHANE - ) - -/obj/item/clothing/mask/gas/aquabreather - name = "aquabreather" - desc = "A compact CO2 scrubber and breathing apparatus that draws oxygen from water." - icon_state = "halfgas" - filter_water = TRUE - body_parts_covered = FACE - w_class = 2 diff --git a/code/modules/clothing/masks/miscellaneous.dm b/code/modules/clothing/masks/miscellaneous.dm deleted file mode 100644 index 0efef2d84588d..0000000000000 --- a/code/modules/clothing/masks/miscellaneous.dm +++ /dev/null @@ -1,337 +0,0 @@ -/obj/item/clothing/mask/muzzle - name = "muzzle" - desc = "To stop that awful noise." - icon_state = "muzzle" - item_state = "muzzle" - body_parts_covered = FACE - w_class = ITEM_SIZE_SMALL - gas_transfer_coefficient = 0.90 - voicechange = 1 - -/obj/item/clothing/mask/muzzle/tape - name = "length of tape" - desc = "It's a robust DIY muzzle!" - icon = 'icons/obj/bureaucracy.dmi' - icon_state = "tape_cross" - item_state = null - w_class = ITEM_SIZE_TINY - -/obj/item/clothing/mask/muzzle/Initialize() - . = ..() - say_messages = list("Mmfph!", "Mmmf mrrfff!", "Mmmf mnnf!") - say_verbs = list("mumbles", "says") - -// Clumsy folks can't take the mask off themselves. -/obj/item/clothing/mask/muzzle/attack_hand(mob/user as mob) - if(user.wear_mask == src && !user.IsAdvancedToolUser()) - return 0 - ..() - -/obj/item/clothing/mask/surgical - name = "sterile mask" - desc = "A sterile mask designed to help prevent the spread of diseases." - icon_state = "sterile" - item_state = "sterile" - w_class = ITEM_SIZE_TINY - body_parts_covered = FACE - item_flags = ITEM_FLAG_FLEXIBLEMATERIAL | ITEM_FLAG_WASHER_ALLOWED - gas_transfer_coefficient = 0.90 - permeability_coefficient = 0.01 - armor = list( - bio = ARMOR_BIO_RESISTANT - ) - down_gas_transfer_coefficient = 1 - down_body_parts_covered = null - down_icon_state = "steriledown" - pull_mask = 1 - -/obj/item/clothing/mask/fakemoustache - name = "fake moustache" - desc = "Warning: moustache is fake." - icon_state = "fake-moustache" - item_state = "fake-moustache" - flags_inv = HIDEFACE - body_parts_covered = 0 - visible_name = "Scoundrel" - -/obj/item/clothing/mask/snorkel - name = "Snorkel" - desc = "For the Swimming Savant." - icon_state = "snorkel" - item_state = "snorkel" - item_flags = null - flags_inv = HIDEFACE - body_parts_covered = 0 - -//scarves (fit in in mask slot) -//None of these actually have on-mob sprites... -/obj/item/clothing/mask/bluescarf - name = "blue neck scarf" - desc = "A blue neck scarf." - icon_state = "blueneckscarf" - item_state = "blueneckscarf" - body_parts_covered = FACE - item_flags = ITEM_FLAG_FLEXIBLEMATERIAL | ITEM_FLAG_WASHER_ALLOWED - w_class = ITEM_SIZE_SMALL - gas_transfer_coefficient = 0.90 - -/obj/item/clothing/mask/redscarf - name = "red scarf" - desc = "A red and white checkered neck scarf." - icon_state = "redwhite_scarf" - item_state = "redwhite_scarf" - body_parts_covered = FACE - item_flags = ITEM_FLAG_FLEXIBLEMATERIAL | ITEM_FLAG_WASHER_ALLOWED - w_class = ITEM_SIZE_SMALL - gas_transfer_coefficient = 0.90 - -/obj/item/clothing/mask/greenscarf - name = "green scarf" - desc = "A green neck scarf." - icon_state = "green_scarf" - item_state = "green_scarf" - body_parts_covered = FACE - item_flags = ITEM_FLAG_THICKMATERIAL | ITEM_FLAG_WASHER_ALLOWED - w_class = ITEM_SIZE_SMALL - gas_transfer_coefficient = 0.90 - -/obj/item/clothing/mask/ninjascarf - name = "ninja scarf" - desc = "A stealthy, dark scarf." - icon_state = "ninja_scarf" - item_state = "ninja_scarf" - body_parts_covered = FACE - item_flags = ITEM_FLAG_THICKMATERIAL | ITEM_FLAG_WASHER_ALLOWED - w_class = ITEM_SIZE_SMALL - gas_transfer_coefficient = 0.90 - siemens_coefficient = 0 - -/obj/item/clothing/mask/pig - name = "pig mask" - desc = "A rubber pig mask." - icon_state = "pig" - item_state = "pig" - flags_inv = HIDEFACE|BLOCKHAIR - w_class = ITEM_SIZE_SMALL - siemens_coefficient = 0.9 - body_parts_covered = HEAD|FACE|EYES - -/obj/item/clothing/mask/horsehead - name = "horse head mask" - desc = "A mask made of soft vinyl and latex, representing the head of a horse." - icon_state = "horsehead" - item_state = "horsehead" - flags_inv = HIDEFACE|BLOCKHAIR - body_parts_covered = HEAD|FACE|EYES - w_class = ITEM_SIZE_SMALL - siemens_coefficient = 0.9 - -/obj/item/clothing/mask/horsehead/New() - ..() - // The horse mask doesn't cause voice changes by default, the wizard spell changes the flag as necessary - say_messages = list("NEEIIGGGHHHH!", "NEEEIIIIGHH!", "NEIIIGGHH!", "HAAWWWWW!", "HAAAWWW!") - say_verbs = list("whinnies", "neighs", "says") - - -/obj/item/clothing/mask/ai - name = "camera MIU" - desc = "Allows for direct mental connection to accessible camera networks." - icon_state = "s-ninja" - item_state = "s-ninja" - flags_inv = HIDEFACE - item_flags = null - body_parts_covered = FACE|EYES - action_button_name = "Toggle MUI" - origin_tech = list(TECH_DATA = 5, TECH_ENGINEERING = 5) - var/active = FALSE - var/mob/observer/eye/cameranet/eye - -/obj/item/clothing/mask/ai/New() - eye = new(src) - eye.name_sufix = "camera MIU" - ..() - -/obj/item/clothing/mask/ai/Destroy() - if(eye) - if(active) - disengage_mask(eye.owner) - qdel(eye) - eye = null - ..() - -/obj/item/clothing/mask/ai/attack_self(var/mob/user) - if(user.incapacitated()) - return - active = !active - to_chat(user, "You [active ? "" : "dis"]engage \the [src].") - if(active) - engage_mask(user) - else - disengage_mask(user) - -/obj/item/clothing/mask/ai/equipped(var/mob/user, var/slot) - ..(user, slot) - engage_mask(user) - -/obj/item/clothing/mask/ai/dropped(var/mob/user) - ..() - disengage_mask(user) - -/obj/item/clothing/mask/ai/proc/engage_mask(var/mob/user) - if(!active) - return - if(user.get_equipped_item(slot_wear_mask) != src) - return - - eye.possess(user) - to_chat(eye.owner, "You feel disorented for a moment as your mind connects to the camera network.") - -/obj/item/clothing/mask/ai/proc/disengage_mask(var/mob/user) - if(user == eye.owner) - to_chat(eye.owner, "You feel disorented for a moment as your mind disconnects from the camera network.") - eye.release(eye.owner) - eye.forceMove(src) - -/obj/item/clothing/mask/rubber - name = "rubber mask" - desc = "A rubber mask." - icon_state = "balaclava" - flags_inv = HIDEFACE|BLOCKHAIR - siemens_coefficient = 0.9 - body_parts_covered = HEAD|FACE|EYES - -/obj/item/clothing/mask/rubber/trasen - name = "Jack Trasen mask" - desc = "CEO of NanoTrasen corporation. Perfect for scaring the unionizing children." - icon_state = "trasen" - visible_name = "Jack Trasen" - -/obj/item/clothing/mask/rubber/barros - name = "Amaya Barros mask" - desc = "Current Secretary-General of Sol Cental Government. Not that the real thing would visit this pigsty." - icon_state = "barros" - visible_name = "Amaya Barros" - -/obj/item/clothing/mask/rubber/admiral - name = "Admiral Diwali mask" - desc = "Admiral that led the infamous last stand at Helios against the Independent Navy in the Gaia conflict. For bridge officers who wish they'd achieve a fraction of that." - icon_state = "admiral" - visible_name = "Admiral Diwali" - -/obj/item/clothing/mask/rubber/turner - name = "Charles Turner mask" - desc = "Premier of the Gilgamesh Colonial Confederation. Probably shouldn't wear this in front of your veteran uncle." - icon_state = "turner" - visible_name = "Charles Turner" - -/obj/item/clothing/mask/rubber/species - name = "human mask" - desc = "A rubber human mask." - icon_state = "manmet" - var/species = SPECIES_HUMAN - -/obj/item/clothing/mask/rubber/species/New() - ..() - visible_name = species - var/datum/species/S = all_species[species] - if(istype(S)) - var/decl/cultural_info/C = SSculture.get_culture(S.default_cultural_info[TAG_CULTURE]) - if(istype(C)) - visible_name = C.get_random_name(pick(MALE,FEMALE)) - -/obj/item/clothing/mask/rubber/species/cat - name = "cat mask" - desc = "A rubber cat mask." - icon_state = "catmet" - -/obj/item/clothing/mask/rubber/species/unathi - name = "unathi mask" - desc = "A rubber unathi mask." - icon_state = "lizmet" - species = SPECIES_UNATHI - -/obj/item/clothing/mask/rubber/species/skrell - name = "skrell mask" - desc = "A rubber skrell mask." - icon_state = "skrellmet" - species = SPECIES_SKRELL - -/obj/item/clothing/mask/spirit - name = "spirit mask" - desc = "An eerie mask of ancient, pitted wood." - icon_state = "spirit_mask" - item_state = "spirit_mask" - flags_inv = HIDEFACE - body_parts_covered = FACE|EYES - -// Bandanas below -/obj/item/clothing/mask/bandana - name = "black bandana" - desc = "A fine bandana with nanotech lining. Can be worn on the head or face." - flags_inv = HIDEFACE - slot_flags = SLOT_MASK|SLOT_HEAD - body_parts_covered = FACE - icon_state = "bandblack" - item_state = "bandblack" - item_flags = ITEM_FLAG_FLEXIBLEMATERIAL | ITEM_FLAG_WASHER_ALLOWED - w_class = ITEM_SIZE_SMALL - -/obj/item/clothing/mask/bandana/equipped(var/mob/user, var/slot) - switch(slot) - if(slot_wear_mask) //Mask is the default for all the settings - flags_inv = initial(flags_inv) - body_parts_covered = initial(body_parts_covered) - icon_state = initial(icon_state) - if(slot_head) - flags_inv = 0 - body_parts_covered = HEAD - icon_state = "[initial(icon_state)]_up" - sprite_sheets = list() - - return ..() - -/obj/item/clothing/mask/bandana/red - name = "red bandana" - icon_state = "bandred" - item_state = "bandred" - -/obj/item/clothing/mask/bandana/blue - name = "blue bandana" - icon_state = "bandblue" - item_state = "bandblue" - -/obj/item/clothing/mask/bandana/green - name = "green bandana" - icon_state = "bandgreen" - item_state = "bandgreen" - -/obj/item/clothing/mask/bandana/gold - name = "gold bandana" - icon_state = "bandgold" - item_state = "bandgold" - -/obj/item/clothing/mask/bandana/orange - name = "orange bandana" - icon_state = "bandorange" - item_state = "bandorange" - -/obj/item/clothing/mask/bandana/purple - name = "purple bandana" - icon_state = "bandpurple" - item_state = "bandpurple" - -/obj/item/clothing/mask/bandana/botany - name = "botany bandana" - icon_state = "bandbotany" - item_state = "bandbotany" - -/obj/item/clothing/mask/bandana/camo - name = "camo bandana" - icon_state = "bandcamo" - item_state = "bandcamo" - -/obj/item/clothing/mask/bandana/skull - name = "skull bandana" - desc = "A fine black bandana with nanotech lining and a skull emblem. Can be worn on the head or face." - icon_state = "bandskull" - item_state = "bandskull" diff --git a/code/modules/clothing/masks/monitor.dm b/code/modules/clothing/masks/monitor.dm deleted file mode 100644 index d381b92386152..0000000000000 --- a/code/modules/clothing/masks/monitor.dm +++ /dev/null @@ -1,98 +0,0 @@ -//IPC-face object for FPB. -/obj/item/clothing/mask/monitor - - name = "display monitor" - desc = "A rather clunky old CRT-style display screen, fit for mounting on an optical output." - flags_inv = HIDEEYES - body_parts_covered = EYES - dir = SOUTH - - icon = 'icons/obj/clothing/obj_head_ipc.dmi' - icon_override = 'icons/mob/monitor_icons.dmi' - icon_state = "ipc_blank" - item_state = null - item_flags = null - - var/monitor_state_index = "blank" - var/static/list/monitor_states = list( - "blank" = "ipc_blank", - "pink" = "ipc_pink", - "red" = "ipc_red", - "green" = "ipc_green", - "blue" = "ipc_blue", - "breakout" = "ipc_breakout", - "eight" = "ipc_eight", - "goggles" = "ipc_goggles", - "heart" = "ipc_heart", - "monoeye" = "ipc_monoeye", - "nature" = "ipc_nature", - "orange" = "ipc_orange", - "purple" = "ipc_purple", - "shower" = "ipc_shower", - "static" = "ipc_static", - "yellow" = "ipc_yellow", - "smiley" = "ipc_smiley", - "list" = "ipc_database", - "yes" = "ipc_yes", - "no" = "ipc_no", - "frown" = "ipc_frowny", - "stars" = "ipc_stars", - "crt" = "ipc_crt", - "scroll" = "ipc_scroll", - "console" = "ipc_console", - "rgb" = "ipc_rgb", - "tetris" = "ipc_tetris", - "doom" = "ipc_doom" - ) - -/obj/item/clothing/mask/monitor/set_dir() - dir = SOUTH - return - -/obj/item/clothing/mask/monitor/equipped() - ..() - var/mob/living/carbon/human/H = loc - if(istype(H) && H.wear_mask == src) - canremove = 0 - to_chat(H, "\The [src] connects to your display output.") - -/obj/item/clothing/mask/monitor/dropped() - canremove = 1 - return ..() - -/obj/item/clothing/mask/monitor/mob_can_equip(var/mob/living/carbon/human/user, var/slot) - if (!..()) - return 0 - if(istype(user)) - var/obj/item/organ/external/E = user.organs_by_name[BP_HEAD] - if(istype(E) && BP_IS_ROBOTIC(E)) - return 1 - to_chat(user, "You must have a robotic head to install this upgrade.") - return 0 - -/obj/item/clothing/mask/monitor/verb/set_monitor_state() - set name = "Set Monitor State" - set desc = "Choose an icon for your monitor." - set category = "IC" - - set src in usr - var/mob/living/carbon/human/H = loc - if(!istype(H) || H != usr) - return - if(H.wear_mask != src) - to_chat(usr, "You have not installed \the [src] yet.") - return - var/choice = input("Select a screen icon.") as null|anything in monitor_states - if(choice) - monitor_state_index = choice - update_icon() - -/obj/item/clothing/mask/monitor/on_update_icon() - if(!(monitor_state_index in monitor_states)) - monitor_state_index = initial(monitor_state_index) - icon_state = monitor_states[monitor_state_index] - var/mob/living/carbon/human/H = loc - if(istype(H)) H.update_inv_wear_mask() - -/obj/item/clothing/mask/monitor/AltClick(var/mob/user) - set_monitor_state(user) diff --git a/code/modules/clothing/masks/smokable.dm b/code/modules/clothing/masks/smokable.dm deleted file mode 100644 index 0c4a3c0dbff7e..0000000000000 --- a/code/modules/clothing/masks/smokable.dm +++ /dev/null @@ -1,555 +0,0 @@ -/obj/item/clothing/mask/smokable - name = "smokable item" - desc = "You're not sure what this is. You should probably ahelp it." - body_parts_covered = 0 - waterproof = FALSE - item_flags = null - - var/lit = 0 - var/icon_on - var/type_butt = null - var/chem_volume = 0 - var/smoketime = 0 - var/genericmes = "USER lights their NAME with the FLAME." - var/matchmes = "USER lights NAME with FLAME" - var/lightermes = "USER lights NAME with FLAME" - var/zippomes = "USER lights NAME with FLAME" - var/weldermes = "USER lights NAME with FLAME" - var/ignitermes = "USER lights NAME with FLAME" - var/brand - var/gas_consumption = 0.04 - -/obj/item/clothing/mask/smokable/New() - ..() - atom_flags |= ATOM_FLAG_NO_REACT // so it doesn't react until you light it - create_reagents(chem_volume) // making the cigarrete a chemical holder with a maximum volume of 15 - -/obj/item/clothing/mask/smokable/Destroy() - . = ..() - if(lit) - STOP_PROCESSING(SSobj, src) - -/obj/item/clothing/mask/smokable/fire_act() - light(0) - -/obj/item/clothing/mask/smokable/proc/smoke(amount) - smoketime -= amount - if(reagents && reagents.total_volume) // check if it has any reagents at all - if(ishuman(loc)) - var/mob/living/carbon/human/C = loc - if (src == C.wear_mask && C.check_has_mouth()) // if it's in the human/monkey mouth, transfer reagents to the mob - reagents.trans_to_mob(C, REM, CHEM_INGEST, 0.2) // Most of it is not inhaled... balance reasons. - add_trace_DNA(C) - else // else just remove some of the reagents - reagents.remove_any(REM) - var/turf/T = get_turf(src) - if(T) - var/datum/gas_mixture/environment = T.return_air() - if(ishuman(loc)) - var/mob/living/carbon/human/C = loc - if (src == C.wear_mask && C.internal) - environment = C.internal.return_air() - if(environment.get_by_flag(XGM_GAS_OXIDIZER) < gas_consumption) - extinguish() - else - environment.remove_by_flag(XGM_GAS_OXIDIZER, gas_consumption) - environment.adjust_gas(GAS_CO2, 0.5*gas_consumption,0) - environment.adjust_gas(GAS_CO, 0.5*gas_consumption) - -/obj/item/clothing/mask/smokable/Process() - var/turf/location = get_turf(src) - if(submerged() || smoketime < 1) - extinguish() - return - smoke(1) - if(location) - location.hotspot_expose(700, 5) - -/obj/item/clothing/mask/smokable/on_update_icon() - if(lit && icon_on) - icon_state = icon_on - item_state = icon_on - else - icon_state = initial(icon_state) - item_state = initial(item_state) - if(ismob(loc)) - var/mob/living/M = loc - M.update_inv_wear_mask(0) - M.update_inv_l_hand(0) - M.update_inv_r_hand(1) - -/obj/item/clothing/mask/smokable/water_act(var/depth) - ..() - if(!waterproof && lit) - if(submerged(depth)) - extinguish(no_message = TRUE) - -/obj/item/clothing/mask/smokable/proc/is_wet() - if(ishuman(loc)) - var/mob/living/carbon/human/C = loc - return locate(/datum/reagent/water) in C.touching.reagent_list - -/obj/item/clothing/mask/smokable/proc/light(var/flavor_text = "[usr] lights the [name].") - if(QDELETED(src)) - return - if(!lit) - if(is_wet()) - to_chat(usr, "You are too wet to light \the [src].") - return - if(submerged()) - to_chat(usr, "You cannot light \the [src] underwater.") - return - lit = 1 - damtype = DAMAGE_BURN - if(reagents.get_reagent_amount(/datum/reagent/toxin/phoron)) // the phoron explodes when exposed to fire - var/datum/effect/effect/system/reagents_explosion/e = new() - e.set_up(round(reagents.get_reagent_amount(/datum/reagent/toxin/phoron) / 2.5, 1), get_turf(src), 0, 0) - e.start() - qdel(src) - return - if(reagents.get_reagent_amount(/datum/reagent/fuel)) // the fuel explodes, too, but much less violently - var/datum/effect/effect/system/reagents_explosion/e = new() - e.set_up(round(reagents.get_reagent_amount(/datum/reagent/fuel) / 5, 1), get_turf(src), 0, 0) - e.start() - qdel(src) - return - atom_flags &= ~ATOM_FLAG_NO_REACT // allowing reagents to react after being lit - HANDLE_REACTIONS(reagents) - update_icon() - if(flavor_text) - var/turf/T = get_turf(src) - T.visible_message(flavor_text) - START_PROCESSING(SSobj, src) - -/obj/item/clothing/mask/smokable/proc/extinguish(var/mob/user, var/no_message) - lit = 0 - damtype = DAMAGE_BRUTE - STOP_PROCESSING(SSobj, src) - set_light(0) - update_icon() - -/obj/item/clothing/mask/smokable/attackby(var/obj/item/W, var/mob/user) - ..() - if(isflamesource(W) || is_hot(W)) - var/text = matchmes - if(istype(W, /obj/item/flame/match)) - text = matchmes - else if(istype(W, /obj/item/flame/lighter/zippo)) - text = zippomes - else if(istype(W, /obj/item/flame/lighter)) - text = lightermes - else if(isWelder(W)) - text = weldermes - else if(istype(W, /obj/item/device/assembly/igniter)) - text = ignitermes - else - text = genericmes - text = replacetext_char(text, "USER", "[user]") - text = replacetext_char(text, "NAME", "[name]") - text = replacetext_char(text, "FLAME", "[W.name]") - light(text) - -/obj/item/clothing/mask/smokable/attack(var/mob/living/M, var/mob/living/user, def_zone) - if(istype(M) && M.on_fire) - user.do_attack_animation(M) - light("\The [user] coldly lights the \the [src] with the burning body of \the [M].") - return 1 - else - return ..() - -/obj/item/clothing/mask/smokable/cigarette - name = "cigarette" - desc = "A small paper cylinder filled with processed tobacco and various fillers." - icon_state = "cigoff" - throw_speed = 0.5 - item_state = "cigoff" - w_class = ITEM_SIZE_TINY - slot_flags = SLOT_EARS | SLOT_MASK - attack_verb = list("burnt", "singed") - type_butt = /obj/item/trash/cigbutt - chem_volume = 5 - smoketime = 300 - matchmes = "USER lights their NAME with their FLAME." - lightermes = "USER manages to light their NAME with FLAME." - zippomes = "With a flick of their wrist, USER lights their NAME with their FLAME." - weldermes = "USER casually lights the NAME with FLAME." - ignitermes = "USER fiddles with FLAME, and manages to light their NAME." - brand = "\improper Trans-Stellar Duty-free" - var/list/filling = list(/datum/reagent/tobacco = 1) - -/obj/item/clothing/mask/smokable/cigarette/New() - ..() - for(var/R in filling) - reagents.add_reagent(R, filling[R]) - -/obj/item/clothing/mask/smokable/cigarette/light(var/flavor_text = "[usr] lights the [name].") - ..() - if(is_processing) - set_scent_by_reagents(src) - -/obj/item/clothing/mask/smokable/cigarette/on_update_icon() - ..() - overlays.Cut() - if(lit) - overlays += overlay_image(icon, "cigon", flags=RESET_COLOR) - -/obj/item/clothing/mask/smokable/cigarette/trident/on_update_icon() - ..() - overlays.Cut() - if(lit) - overlays += overlay_image(icon, "cigarello-on", flags=RESET_COLOR) - -/obj/item/clothing/mask/smokable/extinguish(var/mob/user, var/no_message) - ..() - remove_extension(src, /datum/extension/scent) - if (type_butt) - var/obj/item/butt = new type_butt(get_turf(src)) - transfer_fingerprints_to(butt) - butt.color = color - if(brand) - butt.desc += " This one is a [brand]." - if(ismob(loc)) - var/mob/living/M = loc - if (!no_message) - to_chat(M, "Your [name] goes out.") - // if the mob has free hands, put the cig in them - M.put_in_any_hand_if_possible(butt) - qdel(src) - -/obj/item/clothing/mask/smokable/cigarette/menthol - name = "menthol cigarette" - desc = "A cigarette with a little minty kick. Well, minty in theory." - icon_state = "cigmentol" - brand = "\improper Temperamento Menthol" - color = "#ddffe8" - type_butt = /obj/item/trash/cigbutt/menthol - filling = list(/datum/reagent/tobacco = 1, /datum/reagent/menthol = 1) - -/obj/item/trash/cigbutt/menthol - icon_state = "cigbuttmentol" - -/obj/item/clothing/mask/smokable/cigarette/luckystars - brand = "\improper Lucky Star" - -/obj/item/clothing/mask/smokable/cigarette/jerichos - name = "rugged cigarette" - brand = "\improper Jericho" - icon_state = "cigjer" - color = "#dcdcdc" - type_butt = /obj/item/trash/cigbutt/jerichos - filling = list(/datum/reagent/tobacco/bad = 1.5) - -/obj/item/trash/cigbutt/jerichos - icon_state = "cigbuttjer" - -/obj/item/clothing/mask/smokable/cigarette/carcinomas - name = "dark cigarette" - brand = "\improper Carcinoma Angel" - color = "#869286" - -/obj/item/clothing/mask/smokable/cigarette/professionals - name = "thin cigarette" - brand = "\improper Professional" - icon_state = "cigpro" - type_butt = /obj/item/trash/cigbutt/professionals - filling = list(/datum/reagent/tobacco/bad = 1) - -/obj/item/trash/cigbutt/professionals - icon_state = "cigbuttpro" - -/obj/item/clothing/mask/smokable/cigarette/killthroat - brand = "\improper Acme Co. cigarette" - -/obj/item/clothing/mask/smokable/cigarette/dromedaryco - brand = "\improper Dromedary Co. cigarette" - -/obj/item/clothing/mask/smokable/cigarette/trident - name = "wood tip cigar" - brand = "\improper Trident cigar" - desc = "A narrow cigar with a wooden tip." - icon_state = "cigarello" - item_state = "cigaroff" - smoketime = 600 - chem_volume = 10 - type_butt = /obj/item/trash/cigbutt/woodbutt - filling = list(/datum/reagent/tobacco/fine = 2) - -/obj/item/clothing/mask/smokable/cigarette/trident/mint - icon_state = "cigarelloMi" - filling = list(/datum/reagent/tobacco/fine = 2, /datum/reagent/menthol = 2) - -/obj/item/clothing/mask/smokable/cigarette/trident/berry - icon_state = "cigarelloBe" - filling = list(/datum/reagent/tobacco/fine = 2, /datum/reagent/drink/juice/berry = 2) - -/obj/item/clothing/mask/smokable/cigarette/trident/cherry - icon_state = "cigarelloCh" - filling = list(/datum/reagent/tobacco/fine = 2, /datum/reagent/nutriment/cherryjelly = 2) - -/obj/item/clothing/mask/smokable/cigarette/trident/grape - icon_state = "cigarelloGr" - filling = list(/datum/reagent/tobacco/fine = 2, /datum/reagent/drink/juice/grape = 2) - -/obj/item/clothing/mask/smokable/cigarette/trident/watermelon - icon_state = "cigarelloWm" - filling = list(/datum/reagent/tobacco/fine = 2, /datum/reagent/drink/juice/watermelon = 2) - -/obj/item/clothing/mask/smokable/cigarette/trident/orange - icon_state = "cigarelloOr" - filling = list(/datum/reagent/tobacco/fine = 2, /datum/reagent/drink/juice/orange = 2) - -/obj/item/trash/cigbutt/woodbutt - name = "wooden tip" - desc = "A wooden mouthpiece from a cigar. Smells rather bad." - icon_state = "woodbutt" - matter = list(MATERIAL_WOOD = 1) - -/obj/item/clothing/mask/smokable/cigarette/attackby(var/obj/item/W, var/mob/user) - ..() - - if(istype(W, /obj/item/melee/energy/sword)) - var/obj/item/melee/energy/sword/S = W - if(S.active) - light("[user] swings their [W], barely missing their nose. They light their [name] in the process.") - - return - -/obj/item/clothing/mask/smokable/cigarette/attack(mob/living/carbon/human/H, mob/user, def_zone) - if(lit && H == user && istype(H)) - var/obj/item/blocked = H.check_mouth_coverage() - if(blocked) - to_chat(H, "\The [blocked] is in the way!") - return 1 - to_chat(H, "You take a drag on your [name].") - smoke(5) - add_trace_DNA(H) - return 1 - return ..() - -/obj/item/clothing/mask/smokable/cigarette/afterattack(obj/item/reagent_containers/glass/glass, var/mob/user, proximity) - ..() - if(!proximity) - return - if(istype(glass)) //you can dip cigarettes into beakers - if(!glass.is_open_container()) - to_chat(user, "You need to take the lid off first.") - return - var/transfered = glass.reagents.trans_to_obj(src, chem_volume) - if(transfered) //if reagents were transfered, show the message - to_chat(user, "You dip \the [src] into \the [glass].") - else //if not, either the beaker was empty, or the cigarette was full - if(!glass.reagents.total_volume) - to_chat(user, "[glass] is empty.") - else - to_chat(user, "[src] is full.") - -/obj/item/clothing/mask/smokable/cigarette/attack_self(var/mob/user) - if(lit == 1) - user.visible_message("[user] puts out the lit [src].") - extinguish(no_message = 1) - return ..() - -/obj/item/clothing/mask/smokable/cigarette/get_icon_state(mob/user_mob, slot) - return item_state - -/obj/item/clothing/mask/smokable/cigarette/get_mob_overlay(mob/user_mob, slot) - var/image/res = ..() - if(lit == 1) - var/image/ember = overlay_image(res.icon, "cigember", flags=RESET_COLOR) - ember.layer = ABOVE_LIGHTING_LAYER - ember.plane = EFFECTS_ABOVE_LIGHTING_PLANE - res.overlays += ember - return res - -//////////// -// CIGARS // -//////////// -/obj/item/clothing/mask/smokable/cigarette/cigar - name = "premium cigar" - desc = "A brown roll of tobacco and... well, you're not quite sure. This thing's huge!" - icon_state = "cigar2off" - icon_on = "cigar2on" - type_butt = /obj/item/trash/cigbutt/cigarbutt - throw_speed = 0.5 - item_state = "cigaroff" - smoketime = 1500 - chem_volume = 15 - matchmes = "USER lights their NAME with their FLAME." - lightermes = "USER manages to offend their NAME by lighting it with FLAME." - zippomes = "With a flick of their wrist, USER lights their NAME with their FLAME." - weldermes = "USER insults NAME by lighting it with FLAME." - ignitermes = "USER fiddles with FLAME, and manages to light their NAME with the power of science." - brand = null - filling = list(/datum/reagent/tobacco/fine = 5) - -/obj/item/clothing/mask/smokable/cigarette/cigar/cohiba - name = "\improper Cohiba Robusto cigar" - desc = "There's little more you could want from a cigar." - icon_state = "cigar2off" - icon_on = "cigar2on" - brand = "Cohiba Robusto" - -/obj/item/clothing/mask/smokable/cigarette/cigar/havana - name = "premium Havanian cigar" - desc = "A cigar fit for only the best of the best." - icon_state = "cigar2off" - icon_on = "cigar2on" - smoketime = 3000 - chem_volume = 20 - brand = "Havana" - filling = list(/datum/reagent/tobacco/fine = 10) - -/obj/item/trash/cigbutt - name = "cigarette butt" - desc = "A manky old cigarette butt." - icon = 'icons/obj/clothing/obj_mask.dmi' - icon_state = "cigbutt" - randpixel = 10 - w_class = ITEM_SIZE_TINY - slot_flags = SLOT_EARS - throwforce = 1 - -/obj/item/trash/cigbutt/New() - ..() - SetTransform(rotation = rand(0, 360)) - -/obj/item/trash/cigbutt/cigarbutt - name = "cigar butt" - desc = "A manky old cigar butt." - icon_state = "cigarbutt" - -/obj/item/clothing/mask/smokable/cigarette/cigar/attackby(var/obj/item/W, var/mob/user) - ..() - - user.update_inv_wear_mask(0) - user.update_inv_l_hand(0) - user.update_inv_r_hand(1) - -//Bizarre -/obj/item/clothing/mask/smokable/cigarette/rolled/sausage - name = "sausage" - desc = "A piece of mixed, long meat, with a smoky scent." - icon_state = "cigar3off" - - item_state = "cigaroff" - icon_on = "cigar3on" - type_butt = /obj/item/trash/cigbutt/sausagebutt - chem_volume = 6 - smoketime = 5000 - brand = "sausage... wait what." - filling = list(/datum/reagent/nutriment/protein = 6) - -/obj/item/trash/cigbutt/sausagebutt - name = "sausage butt" - desc = "A piece of burnt meat." - icon_state = "sausagebutt" - -///////////////// -//SMOKING PIPES// -///////////////// -/obj/item/clothing/mask/smokable/pipe - name = "smoking pipe" - desc = "A pipe, for smoking. Probably made of meershaum or something." - icon_state = "pipeoff" - item_state = "pipeoff" - w_class = ITEM_SIZE_TINY - icon_on = "pipeon" //Note - these are in masks.dmi - smoketime = 0 - chem_volume = 50 - matchmes = "USER lights their NAME with their FLAME." - lightermes = "USER manages to light their NAME with FLAME." - zippomes = "With much care, USER lights their NAME with their FLAME." - weldermes = "USER recklessly lights NAME with FLAME." - ignitermes = "USER fiddles with FLAME, and manages to light their NAME with the power of science." - -/obj/item/clothing/mask/smokable/pipe/New() - ..() - name = "empty [initial(name)]" - -/obj/item/clothing/mask/smokable/pipe/light(var/flavor_text = "[usr] lights the [name].") - if(!lit && smoketime) - if(submerged()) - to_chat(usr, "You cannot light \the [src] underwater.") - return - lit = 1 - damtype = DAMAGE_BURN - icon_state = icon_on - item_state = icon_on - var/turf/T = get_turf(src) - T.visible_message(flavor_text) - START_PROCESSING(SSobj, src) - if(ismob(loc)) - var/mob/living/M = loc - M.update_inv_wear_mask(0) - M.update_inv_l_hand(0) - M.update_inv_r_hand(1) - set_scent_by_reagents(src) - -/obj/item/clothing/mask/smokable/pipe/extinguish(var/mob/user, var/no_message) - ..() - new /obj/effect/decal/cleanable/ash(get_turf(src)) - if(ismob(loc)) - var/mob/living/M = loc - if (!no_message) - to_chat(M, "Your [name] goes out, and you empty the ash.") - remove_extension(src, /datum/extension/scent) - -/obj/item/clothing/mask/smokable/pipe/attack_self(var/mob/user) - if(lit == 1) - user.visible_message("[user] puts out [src].", "You put out [src].") - lit = 0 - update_icon() - STOP_PROCESSING(SSobj, src) - remove_extension(src, /datum/extension/scent) - else if (smoketime) - var/turf/location = get_turf(user) - user.visible_message("[user] empties out [src].", "You empty out [src].") - new /obj/effect/decal/cleanable/ash(location) - smoketime = 0 - reagents.clear_reagents() - SetName("empty [initial(name)]") - -/obj/item/clothing/mask/smokable/pipe/attackby(var/obj/item/W, var/mob/user) - if(istype(W, /obj/item/melee/energy/sword)) - return - - ..() - - if (istype(W, /obj/item/reagent_containers/food/snacks)) - var/obj/item/reagent_containers/food/snacks/grown/G = W - if (!G.dry) - to_chat(user, "[G] must be dried before you stuff it into [src].") - return - if (smoketime) - to_chat(user, "[src] is already packed.") - return - smoketime = 1000 - if(G.reagents) - G.reagents.trans_to_obj(src, G.reagents.total_volume) - SetName("[G.name]-packed [initial(name)]") - qdel(G) - - else if(istype(W, /obj/item/flame/lighter)) - var/obj/item/flame/lighter/L = W - if(L.lit) - light("[user] manages to light their [name] with [W].") - - else if(istype(W, /obj/item/flame/match)) - var/obj/item/flame/match/M = W - if(M.lit) - light("[user] lights their [name] with their [W].") - - else if(istype(W, /obj/item/device/assembly/igniter)) - light("[user] fiddles with [W], and manages to light their [name] with the power of science.") - - user.update_inv_wear_mask(0) - user.update_inv_l_hand(0) - user.update_inv_r_hand(1) - -/obj/item/clothing/mask/smokable/pipe/cobpipe - name = "corn cob pipe" - desc = "A nicotine delivery system popularized by folksy backwoodsmen, kept popular in the modern age and beyond by space hipsters." - icon_state = "cobpipeoff" - item_state = "cobpipeoff" - icon_on = "cobpipeon" //Note - these are in masks.dmi - chem_volume = 35 diff --git a/code/modules/clothing/masks/voice.dm b/code/modules/clothing/masks/voice.dm deleted file mode 100644 index 74bdebda5cdd8..0000000000000 --- a/code/modules/clothing/masks/voice.dm +++ /dev/null @@ -1,31 +0,0 @@ -/obj/item/voice_changer - name = "voice changer" - desc = "A voice scrambling module. If you can see this, report it as a bug on the tracker." - var/voice //If set and item is present in mask/suit, this name will be used for the wearer's speech. - var/active - -/obj/item/clothing/mask/chameleon/voice - name = "gas mask" - desc = "A face-covering mask that can be connected to an air supply. It seems to house some odd electronics." - var/obj/item/voice_changer/changer - origin_tech = list(TECH_ESOTERIC = 4) - -/obj/item/clothing/mask/chameleon/voice/verb/Toggle_Voice_Changer() - set category = "Object" - set src in usr - - changer.active = !changer.active - to_chat(usr, "You [changer.active ? "enable" : "disable"] the voice-changing module in \the [src].") - -/obj/item/clothing/mask/chameleon/voice/verb/Set_Voice(name as text) - set category = "Object" - set src in usr - - var/voice = sanitize(name, MAX_NAME_LEN) - if(!voice || !length(voice)) return - changer.voice = voice - to_chat(usr, "You are now mimicking [changer.voice].") - -/obj/item/clothing/mask/chameleon/voice/New() - ..() - changer = new(src) diff --git a/code/modules/clothing/rings/material.dm b/code/modules/clothing/rings/material.dm deleted file mode 100644 index 118bea69b2ff0..0000000000000 --- a/code/modules/clothing/rings/material.dm +++ /dev/null @@ -1,77 +0,0 @@ -///////////////////////////////////////// -//Material Rings -/obj/item/clothing/ring/material - icon = 'icons/obj/clothing/obj_hands_ring.dmi' - icon_state = "material" - var/material/material - -/obj/item/clothing/ring/material/disrupts_psionics() - return (material && material.is_psi_null()) ? src : FALSE - -/obj/item/clothing/ring/material/New(var/newloc, var/new_material) - ..(newloc) - if(!new_material) - new_material = MATERIAL_STEEL - material = SSmaterials.get_material_by_name(new_material) - if(!istype(material)) - qdel(src) - return - name = "[material.display_name] ring" - desc = "A ring made from [material.display_name]." - color = material.icon_colour - -/obj/item/clothing/ring/material/attackby(var/obj/item/S, var/mob/user) - if(S.sharp) - var/inscription = sanitize(input("Enter an inscription to engrave.", "Inscription") as null|text) - - if(!user.stat && !user.incapacitated() && user.Adjacent(src) && S.loc == user) - if(!inscription) - return - desc = "A ring made from [material.display_name]." - to_chat(user, "You carve \"[inscription]\" into \the [src].") - desc += "
              Written on \the [src] is the inscription \"[inscription]\"" - -/obj/item/clothing/ring/material/OnTopic(var/mob/user, var/list/href_list) - if(href_list["examine"]) - if(istype(user)) - var/mob/living/carbon/human/H = get_holder_of_type(src, /mob/living/carbon/human) - if(H.Adjacent(user)) - user.examinate(src) - return TOPIC_HANDLED - -/obj/item/clothing/ring/material/get_examine_line() - . = ..() - . += " \[View\]" - -/obj/item/clothing/ring/material/get_material() - return material - -/obj/item/clothing/ring/material/wood/New(var/newloc) - ..(newloc, MATERIAL_WALNUT) - -/obj/item/clothing/ring/material/plastic/New(var/newloc) - ..(newloc, MATERIAL_PLASTIC) - -/obj/item/clothing/ring/material/steel/New(var/newloc) - ..(newloc, MATERIAL_STEEL) - -/obj/item/clothing/ring/material/plasteel/New(var/newloc) - ..(newloc, MATERIAL_PLASTEEL) - -/obj/item/clothing/ring/material/silver/New(var/newloc) - ..(newloc, MATERIAL_SILVER) - -/obj/item/clothing/ring/material/gold/New(var/newloc) - ..(newloc, MATERIAL_GOLD) - -/obj/item/clothing/ring/material/platinum/New(var/newloc) - ..(newloc, MATERIAL_PLATINUM) - -/obj/item/clothing/ring/material/bronze/New(var/newloc) - ..(newloc, MATERIAL_BRONZE) - -/obj/item/clothing/ring/material/glass/New(var/newloc) - ..(newloc, MATERIAL_GLASS) - -/obj/item/clothing/ring/material/nullglass/New(var/newloc) - ..(newloc, MATERIAL_NULLGLASS) diff --git a/code/modules/clothing/rings/rings.dm b/code/modules/clothing/rings/rings.dm deleted file mode 100644 index 81e145c4232af..0000000000000 --- a/code/modules/clothing/rings/rings.dm +++ /dev/null @@ -1,117 +0,0 @@ -///////////////////////////////////////// -//Standard Rings -/obj/item/clothing/ring/engagement - name = "engagement ring" - desc = "An engagement ring. It certainly looks expensive." - icon_state = "diamond" - -/obj/item/clothing/ring/engagement/attack_self(mob/user) - user.visible_message("\The [user] gets down on one knee, presenting \the [src].","You get down on one knee, presenting \the [src].") - -/obj/item/clothing/ring/cti - name = "CTI ring" - desc = "A ring commemorating graduation from CTI." - icon_state = "cti-grad" - -/obj/item/clothing/ring/mariner - name = "Mariner University ring" - desc = "A ring commemorating graduation from Mariner University." - icon_state = "mariner-grad" - -/obj/item/clothing/ring/fleet - name = "Fleet ring" - desc = "A ring commemorating honorable service with the Sol Government's Fleet." - icon_state = "fleet" - -/obj/item/clothing/ring/ec - name = "Expeditionary Corps ring" - desc = "A ring commemorating honorable service with the Sol Government's Expeditionary Corps." - icon_state = "ec" - -///////////////////////////////////////// -//Magic Rings - -/obj/item/clothing/ring/magic - name = "magic ring" - desc = "A strange ring with symbols carved on it in some arcane language." - icon_state = "magic" - -/obj/item/clothing/ring/magic/equipped(var/mob/living/carbon/human/H, var/slot) - ..() - if(istype(H) && slot == SLOT_GLOVES) - H.add_cloaking_source(src) - -/obj/item/clothing/ring/magic/dropped(var/mob/living/carbon/human/H) - if(!..()) - return 0 - - if(istype(H)) - H.remove_cloaking_source(src) - -///////////////////////////////////////// -//Reagent Rings - -/obj/item/clothing/ring/reagent - atom_flags = ATOM_FLAG_OPEN_CONTAINER - origin_tech = list(TECH_MATERIAL = 2, TECH_ESOTERIC = 4) - -/obj/item/clothing/ring/reagent/New() - ..() - create_reagents(15) - -/obj/item/clothing/ring/reagent/equipped(var/mob/living/carbon/human/H) - ..() - if(istype(H) && H.gloves==src) - to_chat(H, "You feel a prick as you slip on the ring.") - - if(reagents.total_volume) - if(H.reagents) - var/should_admin_log = reagents.should_admin_log() - var/contained_reagents = reagents.get_reagents() - var/trans = reagents.trans_to_mob(H, 15, CHEM_BLOOD) - if (should_admin_log) - admin_inject_log(usr, H, src, contained_reagents, trans) - return - -//Sleepy Ring -/obj/item/clothing/ring/reagent/sleepy - name = "silver ring" - desc = "A ring made from what appears to be silver." - icon_state = "material" - origin_tech = list(TECH_MATERIAL = 2, TECH_ESOTERIC = 5) - -/obj/item/clothing/ring/reagent/sleepy/New() - ..() - reagents.add_reagent(/datum/reagent/chloralhydrate, 15) // Less than a sleepy-pen, but still enough to knock someone out - -///////////////////////////////////////// -//Seals and Signet Rings - -/obj/item/clothing/ring/seal - icon = 'icons/obj/clothing/obj_hands_ring.dmi' - -/obj/item/clothing/ring/seal/secgen - name = "Secretary-General's official seal" - desc = "The official seal of the Secretary-General of the Sol Central Government, featured prominently on a silver ring." - icon_state = "seal-secgen" - -/obj/item/clothing/ring/seal/mason - name = "masonic ring" - desc = "The Square and Compasses feature prominently on this Masonic ring." - icon_state = "seal-masonic" - -/obj/item/clothing/ring/seal/signet - name = "signet ring" - desc = "A signet ring, for when you're too sophisticated to sign letters." - icon_state = "seal-signet" - var/nameset = 0 - -/obj/item/clothing/ring/seal/signet/attack_self(mob/user) - if(nameset) - to_chat(user, "The [src] has already been claimed!") - return - - nameset = 1 - to_chat(user, "You claim the [src] as your own!") - name = "[user]'s signet ring" - desc = "A signet ring belonging to [user], for when you're too sophisticated to sign letters." diff --git a/code/modules/clothing/shoes/colour.dm b/code/modules/clothing/shoes/colour.dm deleted file mode 100644 index 296bf3038e9a2..0000000000000 --- a/code/modules/clothing/shoes/colour.dm +++ /dev/null @@ -1,104 +0,0 @@ -/obj/item/clothing/shoes/black - name = "black shoes" - icon_state = "black" - desc = "A pair of black shoes." - - cold_protection = FEET - min_cold_protection_temperature = SHOE_MIN_COLD_PROTECTION_TEMPERATURE - heat_protection = FEET - max_heat_protection_temperature = SHOE_MAX_HEAT_PROTECTION_TEMPERATURE - -/obj/item/clothing/shoes/brown - name = "brown shoes" - desc = "A pair of brown shoes." - icon_state = "brown" - -/obj/item/clothing/shoes/blue - name = "blue shoes" - icon_state = "blue" - -/obj/item/clothing/shoes/green - name = "green shoes" - icon_state = "green" - -/obj/item/clothing/shoes/yellow - name = "yellow shoes" - icon_state = "yellow" - -/obj/item/clothing/shoes/purple - name = "purple shoes" - icon_state = "purple" - -/obj/item/clothing/shoes/brown - name = "brown shoes" - icon_state = "brown" - -/obj/item/clothing/shoes/red - name = "red shoes" - desc = "Stylish red shoes." - icon_state = "red" - -/obj/item/clothing/shoes/white - name = "white shoes" - icon_state = "white" - permeability_coefficient = 0.01 - -/obj/item/clothing/shoes/leather - name = "leather shoes" - desc = "A sturdy pair of leather shoes." - icon_state = "leather" - -/obj/item/clothing/shoes/rainbow - name = "rainbow shoes" - desc = "Very gay shoes." - icon_state = "rain_bow" - -/obj/item/clothing/shoes/orange - name = "orange shoes" - icon_state = "orange" - -/obj/item/clothing/shoes/flats - name = "flats" - desc = "Sleek flats." - icon_state = "flatswhite" - -/obj/item/clothing/shoes/flats/black - name = "black flats" - color = COLOR_GRAY15 - -/obj/item/clothing/shoes/hightops - name = "white high tops" - desc = "A pair of shoes that extends past the ankle. Based on a centuries-old, timeless design." - icon_state = "whitehi" - -/obj/item/clothing/shoes/hightops/red - name = "red high tops" - icon_state = "redhi" - -/obj/item/clothing/shoes/hightops/brown - name = "brown high tops" - icon_state = "brownhi" - -/obj/item/clothing/shoes/hightops/black - name = "black high tops" - icon_state = "blackhi" - -/obj/item/clothing/shoes/hightops/orange - name = "orange high tops" - icon_state = "orangehi" - -/obj/item/clothing/shoes/hightops/blue - name = "blue high tops" - icon_state = "bluehi" - -/obj/item/clothing/shoes/hightops/green - name = "green high tops" - icon_state = "greenhi" - -/obj/item/clothing/shoes/hightops/purple - name = "purple high tops" - icon_state = "purplehi" - -/obj/item/clothing/shoes/hightops/yellow - name = "yellow high tops" - icon_state = "yellowhi" \ No newline at end of file diff --git a/code/modules/clothing/shoes/jobs.dm b/code/modules/clothing/shoes/jobs.dm deleted file mode 100644 index 7d3fdacc55fa2..0000000000000 --- a/code/modules/clothing/shoes/jobs.dm +++ /dev/null @@ -1,66 +0,0 @@ -/obj/item/clothing/shoes/galoshes - desc = "Rubber boots." - name = "galoshes" - icon_state = "galoshes" - permeability_coefficient = 0.05 - item_flags = ITEM_FLAG_NOSLIP - species_restricted = null - -/obj/item/clothing/shoes/galoshes/Initialize() - . = ..() - slowdown_per_slot[slot_shoes] = 0.5 - -/obj/item/clothing/shoes/jackboots - name = "jackboots" - desc = "Tall synthleather boots with an artificial shine." - icon_state = "jackboots" - item_state = "jackboots" - force = 3 - armor = list( - melee = ARMOR_MELEE_RESISTANT, - bullet = ARMOR_BALLISTIC_MINOR, - laser = ARMOR_LASER_MINOR, - energy = ARMOR_ENERGY_MINOR, - bomb = ARMOR_BOMB_PADDED - ) - siemens_coefficient = 0.7 - gas_transfer_coefficient = 0.90 - permeability_coefficient = 0.50 - cold_protection = FEET - body_parts_covered = FEET - heat_protection = FEET - min_cold_protection_temperature = HELMET_MIN_COLD_PROTECTION_TEMPERATURE - max_heat_protection_temperature = FIRESUIT_MAX_HEAT_PROTECTION_TEMPERATURE - max_pressure_protection = FIRESUIT_MAX_PRESSURE - -/obj/item/clothing/shoes/jackboots/unathi - name = "toe-less jackboots" - desc = "Modified pair of jackboots, particularly comfortable for those species whose toes hold claws." - item_state = "digiboots" - icon_state = "digiboots" - species_restricted = null - -/obj/item/clothing/shoes/workboots - name = "workboots" - desc = "A pair of steel-toed work boots designed for use in industrial settings. Safety first." - icon_state = "workboots" - item_state = "workboots" - armor = list( - melee = ARMOR_MELEE_RESISTANT, - laser = ARMOR_LASER_MINOR, - energy = ARMOR_ENERGY_SMALL, - bomb = ARMOR_BOMB_PADDED - ) - siemens_coefficient = 0.7 - gas_transfer_coefficient = 0.90 - permeability_coefficient = 0.50 - body_parts_covered = FEET - heat_protection = FEET - max_heat_protection_temperature = FIRESUIT_MAX_HEAT_PROTECTION_TEMPERATURE - max_pressure_protection = FIRESUIT_MAX_PRESSURE - -/obj/item/clothing/shoes/workboots/toeless - name = "toe-less workboots" - desc = "A pair of toeless work boots designed for use in industrial settings. Modified for species whose toes have claws." - icon_state = "workbootstoeless" - species_restricted = null \ No newline at end of file diff --git a/code/modules/clothing/shoes/magboots.dm b/code/modules/clothing/shoes/magboots.dm deleted file mode 100644 index 780d999908f86..0000000000000 --- a/code/modules/clothing/shoes/magboots.dm +++ /dev/null @@ -1,92 +0,0 @@ -//Note that despite the use of the NOSLIP flag, magboots are still hardcoded to prevent spaceslipping in Check_Shoegrip(). -/obj/item/clothing/shoes/magboots - desc = "Magnetic boots, often used during extravehicular activity to ensure the user remains safely attached to the vehicle. They're large enough to be worn over other footwear." - name = "magboots" - icon_state = "magboots0" - item_flags = null - species_restricted = null - force = 3 - overshoes = 1 - var/magpulse = 0 - var/icon_base = "magboots" - action_button_name = "Toggle Magboots" - var/obj/item/clothing/shoes/shoes = null //Undershoes - var/mob/living/carbon/human/wearer = null //For shoe procs - randpixel = 0 - var/online_slowdown = 3 - -/obj/item/clothing/shoes/magboots/proc/set_slowdown() - slowdown_per_slot[slot_shoes] = shoes? max(0, shoes.slowdown_per_slot[slot_shoes]): 0 //So you can't put on magboots to make you walk faster. - if (magpulse) - slowdown_per_slot[slot_shoes] += online_slowdown - -/obj/item/clothing/shoes/magboots/attack_self(mob/user) - if(magpulse) - item_flags &= ~ITEM_FLAG_NOSLIP - magpulse = 0 - set_slowdown() - force = 3 - if(icon_base) icon_state = "[icon_base]0" - to_chat(user, "You disable the mag-pulse traction system.") - else - item_flags |= ITEM_FLAG_NOSLIP - magpulse = 1 - set_slowdown() - force = 5 - if(icon_base) icon_state = "[icon_base]1" - playsound(get_turf(src), 'sound/effects/magnetclamp.ogg', 20) - to_chat(user, "You enable the mag-pulse traction system.") - user.update_inv_shoes() //so our mob-overlays update - user.update_action_buttons() - user.update_floating() - -/obj/item/clothing/shoes/magboots/mob_can_equip(mob/user) - var/mob/living/carbon/human/H = user - - if(H.shoes) - shoes = H.shoes - if(shoes.overshoes) - to_chat(user, "You are unable to wear \the [src] as \the [H.shoes] are in the way.") - shoes = null - return 0 - if(!H.unEquip(shoes, src))//Remove the old shoes so you can put on the magboots. - shoes = null - return 0 - - if(!..()) - if(shoes) //Put the old shoes back on if the check fails. - if(H.equip_to_slot_if_possible(shoes, slot_shoes)) - src.shoes = null - return 0 - - if (shoes) - to_chat(user, "You slip \the [src] on over \the [shoes].") - set_slowdown() - wearer = H //TODO clean this up - return 1 - -/obj/item/clothing/shoes/magboots/equipped() - ..() - var/mob/M = src.loc - if(istype(M)) - M.update_floating() - -/obj/item/clothing/shoes/magboots/dropped() - ..() - if(!wearer) - return - - var/mob/living/carbon/human/H = wearer - if(shoes && istype(H)) - if(!H.equip_to_slot_if_possible(shoes, slot_shoes)) - shoes.dropInto(loc) - src.shoes = null - wearer.update_floating() - wearer = null - -/obj/item/clothing/shoes/magboots/examine(mob/user) - . = ..() - var/state = "disabled" - if(item_flags & ITEM_FLAG_NOSLIP) - state = "enabled" - to_chat(user, "Its mag-pulse traction system appears to be [state].") diff --git a/code/modules/clothing/shoes/miscellaneous.dm b/code/modules/clothing/shoes/miscellaneous.dm deleted file mode 100644 index 617ecefb9d13f..0000000000000 --- a/code/modules/clothing/shoes/miscellaneous.dm +++ /dev/null @@ -1,268 +0,0 @@ -/obj/item/clothing/shoes/syndigaloshes - desc = "A pair of brown shoes. They seem to have extra grip." - name = "brown shoes" - icon_state = "brown" - item_state = "brown" - permeability_coefficient = 0.05 - item_flags = ITEM_FLAG_NOSLIP - origin_tech = list(TECH_ESOTERIC = 3) - var/list/clothing_choices = list() - siemens_coefficient = 0.8 - species_restricted = null - -/obj/item/clothing/shoes/mime - name = "mime shoes" - icon_state = "mime" - can_add_cuffs = FALSE - -/obj/item/clothing/shoes/swat - name = "\improper SWAT boots" - desc = "When you want to turn up the heat." - icon_state = "swat" - force = 3 - armor = list( - melee = ARMOR_MELEE_VERY_HIGH, - bullet = ARMOR_BALLISTIC_RIFLE, - laser = ARMOR_LASER_HANDGUNS, - energy = ARMOR_ENERGY_SMALL, - bomb = ARMOR_BOMB_RESISTANT, - bio = ARMOR_BIO_MINOR - ) - item_flags = ITEM_FLAG_NOSLIP | ITEM_FLAG_WASHER_ALLOWED - siemens_coefficient = 0.6 - -/obj/item/clothing/shoes/combat //Basically SWAT shoes combined with galoshes. - name = "combat boots" - desc = "When you REALLY want to turn up the heat." - icon_state = "jungle" - force = 5 - armor = list( - melee = ARMOR_MELEE_VERY_HIGH, - bullet = ARMOR_BALLISTIC_RIFLE, - laser = ARMOR_LASER_HANDGUNS, - energy = ARMOR_ENERGY_SMALL, - bomb = ARMOR_BOMB_RESISTANT, - bio = ARMOR_BIO_MINOR - ) - item_flags = ITEM_FLAG_NOSLIP | ITEM_FLAG_WASHER_ALLOWED - siemens_coefficient = 0.6 - - cold_protection = FEET - min_cold_protection_temperature = SHOE_MIN_COLD_PROTECTION_TEMPERATURE - heat_protection = FEET - max_heat_protection_temperature = SHOE_MAX_HEAT_PROTECTION_TEMPERATURE - -/obj/item/clothing/shoes/jungleboots - name = "jungle boots" - desc = "A pair of durable brown boots. Waterproofed for use planetside." - icon_state = "jungle" - force = 3 - armor = list( - melee = ARMOR_MELEE_RESISTANT, - bullet = ARMOR_BALLISTIC_MINOR, - laser = ARMOR_LASER_MINOR, - energy = ARMOR_ENERGY_MINOR, - bomb = ARMOR_BOMB_PADDED, - bio = ARMOR_BIO_MINOR - ) - siemens_coefficient = 0.7 - -/obj/item/clothing/shoes/desertboots - name = "desert boots" - desc = "A pair of durable tan boots. Designed for use in hot climates." - icon_state = "desert" - force = 3 - armor = list( - melee = ARMOR_MELEE_RESISTANT, - bullet = ARMOR_BALLISTIC_MINOR, - laser = ARMOR_LASER_MINOR, - energy = ARMOR_ENERGY_MINOR, - bomb = ARMOR_BOMB_PADDED, - bio = ARMOR_BIO_MINOR - ) - siemens_coefficient = 0.7 - -/obj/item/clothing/shoes/dutyboots - name = "duty boots" - desc = "A pair of steel-toed synthleather boots with a mirror shine." - icon_state = "duty" - armor = list( - melee = ARMOR_MELEE_RESISTANT, - energy = ARMOR_ENERGY_MINOR, - bomb = ARMOR_BOMB_PADDED, - rad = ARMOR_RAD_MINOR - ) - siemens_coefficient = 0.7 - gas_transfer_coefficient = 0.90 - permeability_coefficient = 0.50 - body_parts_covered = FEET - heat_protection = FEET - max_heat_protection_temperature = FIRESUIT_MAX_HEAT_PROTECTION_TEMPERATURE - max_pressure_protection = FIRESUIT_MAX_PRESSURE - -/obj/item/clothing/shoes/tactical - name = "tactical boots" - desc = "Tan boots with extra padding and armor." - icon_state = "desert" - force = 3 - armor = list( - melee = ARMOR_MELEE_RESISTANT, - bullet = ARMOR_BALLISTIC_PISTOL, - laser = ARMOR_LASER_HANDGUNS, - energy = ARMOR_ENERGY_SMALL, - bomb = ARMOR_BOMB_RESISTANT) - siemens_coefficient = 0.7 - -/obj/item/clothing/shoes/dress - name = "dress shoes" - desc = "The height of fashion, and they're pre-polished!" - icon_state = "laceups" - can_add_hidden_item = FALSE - can_add_cuffs = FALSE - -/obj/item/clothing/shoes/dress/white - name = "white dress shoes" - desc = "Brilliantly white shoes, not a spot on them." - icon_state = "whitedress" - -/obj/item/clothing/shoes/sandal - desc = "A pair of rather plain, wooden sandals." - name = "sandals" - icon_state = "wizard" - species_restricted = null - body_parts_covered = 0 - wizard_garb = TRUE - can_add_hidden_item = FALSE - can_add_cuffs = FALSE - -/obj/item/clothing/shoes/sandal/marisa - desc = "A pair of magic, black shoes." - name = "magic shoes" - icon_state = "black" - body_parts_covered = FEET - -/obj/item/clothing/shoes/clown_shoes - desc = "The prankster's standard-issue clowning shoes. Damn they're huge!" - name = "clown shoes" - icon_state = "clown" - item_state = "clown" - force = 0 - var/footstep = 1 //used for squeeks whilst walking - species_restricted = null - can_add_hidden_item = FALSE - -/obj/item/clothing/shoes/clown_shoes/Initialize() - . = ..() - slowdown_per_slot[slot_shoes] = 1 - -/obj/item/clothing/shoes/clown_shoes/handle_movement(var/turf/walking, var/running) - if(running) - if(footstep >= 2) - footstep = 0 - playsound(src, "clownstep", 50, 1) // this will get annoying very fast. - else - footstep++ - else - playsound(src, "clownstep", 20, 1) - -/obj/item/clothing/shoes/cult - name = "boots" - desc = "A pair of boots worn by the followers of Nar-Sie." - icon_state = "cult" - item_state = "cult" - force = 2 - siemens_coefficient = 0.7 - - cold_protection = FEET - min_cold_protection_temperature = SHOE_MIN_COLD_PROTECTION_TEMPERATURE - heat_protection = FEET - max_heat_protection_temperature = SHOE_MAX_HEAT_PROTECTION_TEMPERATURE - species_restricted = null - -/obj/item/clothing/shoes/cyborg - name = "cyborg boots" - desc = "Shoes for a cyborg costume." - icon_state = "boots" - item_flags = null - -/obj/item/clothing/shoes/slippers - name = "bunny slippers" - desc = "Fluffy!" - icon_state = "slippers" - item_state = "slippers" - force = 0 - species_restricted = null - w_class = ITEM_SIZE_SMALL - can_add_hidden_item = FALSE - can_add_cuffs = FALSE - -/obj/item/clothing/shoes/slippers/worn - name = "worn bunny slippers" - desc = "Fluffy..." - icon_state = "slippers_worn" - item_state = "slippers_worn" - -/obj/item/clothing/shoes/laceup - name = "laceup shoes" - desc = "The height of fashion, and they're pre-polished!" - icon_state = "laceups" - can_add_hidden_item = FALSE - can_add_cuffs = FALSE - -/obj/item/clothing/shoes/swimmingfins - desc = "Help you swim good." - name = "swimming fins" - icon_state = "flippers" - item_flags = ITEM_FLAG_NOSLIP - species_restricted = null - can_add_hidden_item = FALSE - can_add_cuffs = FALSE - -/obj/item/clothing/shoes/swimmingfins/Initialize() - . = ..() - slowdown_per_slot[slot_shoes] = 1 - -/obj/item/clothing/shoes/athletic - name = "athletic shoes" - desc = "A pair of sleek atheletic shoes. Made by and for the sporty types." - icon_state = "sportshoe" - -/obj/item/clothing/shoes/laceup/sneakies - desc = "The height of fashion, and they're pre-polished. Upon further inspection, the soles appear to be on backwards. They look uncomfortable." - species_restricted = list(SPECIES_HUMAN, SPECIES_IPC) - move_trail = /obj/effect/decal/cleanable/blood/tracks/footprints/reversed - item_flags = ITEM_FLAG_SILENT - -/obj/item/clothing/shoes/heels - name = "high heels" - icon_state = "heels" - desc = "A pair of colourable high heels." - can_add_cuffs = FALSE - -/obj/item/clothing/shoes/heels/black - name = "black high heels" - desc = "A pair of black high heels." - color = COLOR_GRAY15 - -/obj/item/clothing/shoes/heels/red - name = "red high heels" - desc = "A pair of red high heels." - color = COLOR_RED - -/obj/item/clothing/shoes/foamclog - name = "foam clog" - desc = "Made from durable foam resin that retains its spongy feel." - icon_state = "foamclog" - can_add_hidden_item = FALSE - can_add_cuffs = FALSE - -/obj/item/clothing/shoes/foamclog/random/New() - ..() - color = get_random_colour() - -/obj/item/clothing/shoes/flipflobster - name = "flip flobsters" - desc = "Made from durable foam resin that retains its spongy feel. These are shaped as lobsters." - icon_state = "flipflobster" - can_add_hidden_item = FALSE - can_add_cuffs = FALSE diff --git a/code/modules/clothing/spacesuits/alien.dm b/code/modules/clothing/spacesuits/alien.dm deleted file mode 100644 index a0d59b50d50e8..0000000000000 --- a/code/modules/clothing/spacesuits/alien.dm +++ /dev/null @@ -1,193 +0,0 @@ -// Vox space gear (vaccuum suit, low pressure armour) -// Can't be equipped by any other species due to bone structure and vox cybernetics. -/obj/item/clothing/suit/space/vox - icon = 'icons/obj/clothing/species/vox/obj_suit_vox.dmi' - w_class = ITEM_SIZE_NORMAL - allowed = list(/obj/item/gun,/obj/item/ammo_magazine,/obj/item/ammo_casing,/obj/item/melee/baton,/obj/item/melee/energy/sword,/obj/item/handcuffs,/obj/item/tank) - armor = list( - melee = ARMOR_MELEE_MAJOR, - bullet = ARMOR_BALLISTIC_PISTOL, - laser = ARMOR_LASER_HANDGUNS, - energy = ARMOR_ENERGY_MINOR, - bomb = ARMOR_BOMB_PADDED, - bio = ARMOR_BIO_SMALL, - rad = ARMOR_RAD_MINOR - ) - siemens_coefficient = 0.6 - heat_protection = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS - max_heat_protection_temperature = SPACE_SUIT_MAX_HEAT_PROTECTION_TEMPERATURE - species_restricted = list(SPECIES_VOX, SPECIES_VOX_ARMALIS) - flags_inv = HIDEJUMPSUIT - - -/obj/item/clothing/head/helmet/space/vox - icon = 'icons/obj/clothing/species/vox/obj_head_vox.dmi' - armor = list( - melee = ARMOR_MELEE_MAJOR, - bullet = ARMOR_BALLISTIC_PISTOL, - laser = ARMOR_LASER_HANDGUNS, - energy = ARMOR_ENERGY_MINOR, - bomb = ARMOR_BOMB_PADDED, - bio = ARMOR_BIO_SMALL, - rad = ARMOR_RAD_MINOR - ) - siemens_coefficient = 0.6 - item_flags = 0 - flags_inv = 0 - species_restricted = list(SPECIES_VOX, SPECIES_VOX_ARMALIS) - -/obj/item/clothing/head/helmet/space/vox/pressure - name = "alien helmet" - icon_state = "vox-pressure" - desc = "A huge, armoured, pressurized helmet. Looks like an ancient human diving suit." - light_overlay = "invis_light" - -/obj/item/clothing/suit/space/vox/pressure - name = "alien pressure suit" - icon_state = "vox-pressure" - desc = "A huge, armoured, pressurized suit, designed for distinctly nonhuman proportions." - -/obj/item/clothing/head/helmet/space/vox/carapace - name = "alien visor" - icon_state = "vox-carapace" - desc = "A glowing visor. The light slowly pulses, and seems to follow you." - light_overlay = "invis_light" - -/obj/item/clothing/suit/space/vox/carapace - name = "alien carapace armour" - icon_state = "vox-carapace" - desc = "An armoured, segmented carapace with glowing purple lights. It looks pretty run-down." - -/obj/item/clothing/head/helmet/space/vox/stealth - name = "alien stealth helmet" - icon_state = "vox-stealth" - desc = "A smoothly contoured, matte-black alien helmet." - light_overlay = "invis_light" - -/obj/item/clothing/suit/space/vox/stealth - name = "alien stealth suit" - icon_state = "vox-stealth" - desc = "A sleek black suit. It seems to have a tail, and is very heavy." - -/obj/item/clothing/head/helmet/space/vox/medic - name = "alien goggled helmet" - icon_state = "vox-medic" - desc = "An alien helmet with enormous goggled lenses." - light_overlay = "invis_light" - -/obj/item/clothing/suit/space/vox/medic - name = "alien armour" - icon_state = "vox-medic" - desc = "An almost organic looking nonhuman pressure suit." - -/obj/item/clothing/suit/space/vox/raider - name = "advanced alien armour" - icon_state = "vox-raider" - desc = "A sleek, greyish suit of armor over a tight bodysuit. Lighter than it looks." - allowed = list(/obj/item/gun,/obj/item/ammo_magazine,/obj/item/ammo_casing,/obj/item/melee/baton,/obj/item/melee/energy/sword,/obj/item/handcuffs,/obj/item/tank,/obj/item/storage/toolbox,/obj/item/storage/briefcase/inflatable,/obj/item/inflatable_dispenser,/obj/item/rcd) - armor = list( - melee = ARMOR_MELEE_RESISTANT, - bullet = ARMOR_BALLISTIC_RESISTANT, - laser = ARMOR_LASER_HANDGUNS, - energy = ARMOR_ENERGY_RESISTANT, - bomb = ARMOR_BOMB_PADDED, - bio = ARMOR_BIO_SMALL, - rad = ARMOR_RAD_MINOR - ) - flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT - -/obj/item/clothing/head/helmet/space/vox/raider - name = "advanced alien helmet" - icon_state = "vox-raider" - desc = "A tight-fitting, beaked mask with three menacing eyeslits." - armor = list( - melee = ARMOR_MELEE_RESISTANT, - bullet = ARMOR_BALLISTIC_RESISTANT, - laser = ARMOR_LASER_HANDGUNS, - energy = ARMOR_ENERGY_RESISTANT, - bomb = ARMOR_BOMB_PADDED, - bio = ARMOR_BIO_SMALL, - rad = ARMOR_RAD_MINOR - ) - -/obj/item/clothing/under/vox - has_sensor = 0 - species_restricted = list(SPECIES_VOX, SPECIES_VOX_ARMALIS) - -/obj/item/clothing/under/vox/vox_casual - name = "alien clothing" - desc = "This doesn't look very comfortable." - icon_state = "vox-casual-1" - item_state = "vox-casual-1" - body_parts_covered = LEGS - -/obj/item/clothing/under/vox/vox_robes - name = "alien robes" - desc = "Weird and flowing!" - icon_state = "vox-casual-2" - item_state = "vox-casual-2" - -/obj/item/clothing/gloves/vox - desc = "These bizarre gauntlets seem to be fitted for... bird claws?" - name = "insulated gauntlets" - icon_state = "gloves-vox" - item_state = "gloves-vox" - siemens_coefficient = 0 - permeability_coefficient = 0.05 - species_restricted = list(SPECIES_VOX, SPECIES_VOX_ARMALIS) - -/obj/item/clothing/shoes/magboots/vox - - desc = "A pair of heavy, jagged armoured foot pieces, seemingly suitable for a velociraptor." - name = "vox magclaws" - item_state = "boots-vox" - icon_state = "boots-vox" - species_restricted = list(SPECIES_VOX, SPECIES_VOX_ARMALIS) - - action_button_name = "Toggle the magclaws" - -/obj/item/clothing/shoes/magboots/vox/attack_self(mob/user) - if(src.magpulse) - item_flags &= ~ITEM_FLAG_NOSLIP - magpulse = 0 - canremove = 1 - to_chat(user, "You relax your deathgrip on the flooring.") - else - //make sure these can only be used when equipped. - if(!ishuman(user)) - return - var/mob/living/carbon/human/H = user - if (H.shoes != src) - to_chat(user, "You will have to put on the [src] before you can do that.") - return - - item_flags |= ITEM_FLAG_NOSLIP - magpulse = 1 - canremove = 0 //kinda hard to take off magclaws when you are gripping them tightly. - to_chat(user, "You dig your claws deeply into the flooring, bracing yourself.") - to_chat(user, "It would be hard to take off the [src] without relaxing your grip first.") - user.update_action_buttons() - -//In case they somehow come off while enabled. -/obj/item/clothing/shoes/magboots/vox/dropped(mob/user as mob) - ..() - if(src.magpulse) - user.visible_message("The [src] go limp as they are removed from [usr]'s feet.", "The [src] go limp as they are removed from your feet.") - item_flags &= ~ITEM_FLAG_NOSLIP - magpulse = 0 - canremove = 1 - -/obj/item/clothing/shoes/magboots/vox/examine(mob/user) - . = ..() - if (magpulse) - to_chat(user, "It would be hard to take these off without relaxing your grip first.")//theoretically this message should only be seen by the wearer when the claws are equipped. - - -/obj/item/clothing/gloves/nabber - desc = "These insulated gloves have only three fingers." - name = "three-fingered insulated gloves" - icon_state = "white-glove-nabber" - color = COLOR_YELLOW - siemens_coefficient = 0 - permeability_coefficient = 0.05 - species_restricted = list(SPECIES_NABBER) diff --git a/code/modules/clothing/spacesuits/breaches.dm b/code/modules/clothing/spacesuits/breaches.dm deleted file mode 100644 index bb26a5a5da562..0000000000000 --- a/code/modules/clothing/spacesuits/breaches.dm +++ /dev/null @@ -1,269 +0,0 @@ -//A 'wound' system for space suits. -//Breaches greatly increase the amount of lost gas and decrease the armour rating of the suit. -//They can be healed with plastic or metal sheeting. - -/datum/breach - var/class = 0 // Size. Lower is smaller. Uses floating point values! - var/descriptor // 'gaping hole' etc. - var/damtype = DAMAGE_BURN // Punctured or melted - var/patched = FALSE - var/obj/item/clothing/suit/space/holder // Suit containing the list of breaches holding this instance. - var/static/list/breach_brute_descriptors = list( - "tiny puncture", - "ragged tear", - "large split", - "huge tear", - "gaping wound" - ) - - var/static/list/breach_burn_descriptors = list( - "small burn", - "melted patch", - "sizable burn", - "large scorched area", - "huge scorched area" - ) - -/obj/item/clothing/suit/space - - var/can_breach = 1 // Set to 0 to disregard all breaching. - var/list/breaches = list() // Breach datum container. - var/resilience = 0.2 // Multiplier that turns damage into breach class. 1 is 100% of damage to breach, 0.1 is 10%. 0.2 -> 50 brute/burn damage to cause 10 breach damage - var/breach_threshold = 3 // Min damage before a breach is possible. Damage is subtracted by this amount, it determines the "hardness" of the suit. - var/damage = 0 // Current total damage. Does not count patched breaches. - var/brute_damage = 0 // Specifically brute damage. Includes patched punctures. - var/burn_damage = 0 // Specifically burn damage. Includes patched burns. - item_flags = null - -/datum/breach/proc/update_descriptor() - - //Sanity... - class = clamp(round(class), 1, 5) - //Apply the correct descriptor. - if (damtype == DAMAGE_BURN) - descriptor = breach_burn_descriptors[class] - else if (damtype == DAMAGE_BRUTE) - descriptor = breach_brute_descriptors[class] - if(patched) - descriptor = "patched [descriptor]" - -//Repair a certain amount of brute or burn damage to the suit. -/obj/item/clothing/suit/space/proc/repair_breaches(var/damtype, var/amount, var/mob/user) - - if(!can_breach || !breaches || !breaches.len) - to_chat(user, "There are no breaches to repair on \the [src].") - return - - var/list/valid_breaches = list() - - for(var/datum/breach/B in breaches) - if(B.damtype == damtype) - valid_breaches += B - - if(!valid_breaches.len) - to_chat(user, "There are no breaches to repair on \the [src].") - return - - var/amount_left = amount - for(var/datum/breach/B in valid_breaches) - if(!amount_left) break - - if(B.class <= amount_left) - amount_left -= B.class - valid_breaches -= B - breaches -= B - else - B.class -= amount_left - amount_left = 0 - B.update_descriptor() - - user.visible_message( - SPAN_NOTICE("\The [user] patches some of the damage on \the [src]."), - SPAN_NOTICE("You patch some of the damage on \the [src].") - ) - calc_breach_damage() - -/obj/item/clothing/suit/space/proc/create_breaches(var/damtype, var/amount) - - amount -= src.breach_threshold - amount *= src.resilience - - if(!can_breach || amount <= 0) - return - - if(!breaches) - breaches = list() - - if(damage > 25) return //We don't need to keep tracking it when it's at 250% pressure loss, really. - - //Increase existing breaches. - for(var/datum/breach/existing in breaches) - - if(existing.damtype != damtype) - continue - - //keep in mind that 10 breach damage == full pressure loss. - //a breach can have at most 5 breach damage - if (existing.class < 5) - var/needs = 5 - existing.class - if(amount < needs) - existing.class += amount - amount = 0 - else - existing.class = 5 - amount -= needs - - if (existing.damtype == DAMAGE_BRUTE) - var/message = "\The [existing.descriptor] on \the [src] gapes wider[existing.patched ? ", tearing the patch" : ""]!" - visible_message(SPAN_WARNING(message)) - else if (existing.damtype == DAMAGE_BURN) - var/message = "\The [existing.descriptor] on \the [src] widens[existing.patched ? ", ruining the patch" : ""]!" - visible_message(SPAN_WARNING(message)) - - existing.patched = FALSE - - if (amount) - //Spawn a new breach. - var/datum/breach/B = new() - breaches += B - - B.class = min(amount,5) - - B.damtype = damtype - B.update_descriptor() - B.holder = src - - if (B.damtype == DAMAGE_BRUTE) - visible_message(SPAN_WARNING("\A [B.descriptor] opens up on \the [src]!")) - else if (B.damtype == DAMAGE_BURN) - visible_message(SPAN_WARNING("\A [B.descriptor] marks the surface of \the [src]!")) - - calc_breach_damage() - -//Calculates the current extent of the damage to the suit. -/obj/item/clothing/suit/space/proc/calc_breach_damage() - - damage = 0 - brute_damage = 0 - burn_damage = 0 - var/all_patched = TRUE - - if(!can_breach || !breaches || !breaches.len) - SetName(initial(name)) - return 0 - - for(var/datum/breach/B in breaches) - if(!B.class) - src.breaches -= B - qdel(B) - else - if(!B.patched) - all_patched = FALSE - damage += B.class - - if (B.damtype == DAMAGE_BRUTE) - brute_damage += B.class - else if (B.damtype == DAMAGE_BURN) - burn_damage += B.class - - if(damage >= 3) - if(brute_damage >= 3 && brute_damage > burn_damage) - SetName("punctured [initial(name)]") - else if(burn_damage >= 3 && burn_damage > brute_damage) - SetName("scorched [initial(name)]") - else - SetName("damaged [initial(name)]") - else if(all_patched) - SetName("patched [initial(name)]") - else - SetName(initial(name)) - - return damage - -//Handles repairs (and also upgrades). - -/obj/item/clothing/suit/space/attackby(obj/item/W as obj, mob/user as mob) - if(istype(W,/obj/item/stack/material)) - var/repair_power = 0 - switch(W.get_material_name()) - if(MATERIAL_STEEL) - repair_power = 2 - if(MATERIAL_PLASTIC) - repair_power = 1 - - if(!repair_power) - return - - if(istype(loc,/mob/living/carbon/human)) - var/mob/living/carbon/human/H = loc - if(H.wear_suit == src) - to_chat(user, SPAN_WARNING("You cannot repair \the [src] while it is being worn.")) - return - - if(burn_damage <= 0) - to_chat(user, "There is no surface damage on \the [src] to repair.") //maybe change the descriptor to more obvious? idk what - return - - var/obj/item/stack/P = W - var/use_amt = min(P.get_amount(), 3) - if(use_amt && P.use(use_amt)) - repair_breaches(DAMAGE_BURN, use_amt * repair_power, user) - return - - else if(isWelder(W)) - - if(istype(loc,/mob/living/carbon/human)) - var/mob/living/carbon/human/H = loc - if(H.wear_suit == src) - to_chat(user, SPAN_WARNING("You cannot repair \the [src] while it is being worn.")) - return - - if (brute_damage <= 0) - to_chat(user, "There is no structural damage on \the [src] to repair.") - return - - var/obj/item/weldingtool/WT = W - if(!WT.remove_fuel(5)) - to_chat(user, SPAN_WARNING("You need more welding fuel to repair this suit.")) - return - - repair_breaches(DAMAGE_BRUTE, 3, user) - return - - else if(istype(W, /obj/item/tape_roll)) - var/datum/breach/target_breach //Target the largest unpatched breach. - for(var/datum/breach/B in breaches) - if(B.patched) - continue - if(!target_breach || (B.class > target_breach.class)) - target_breach = B - - if(!target_breach) - to_chat(user, "There are no open breaches to seal with \the [W].") - else - playsound(src, 'sound/effects/tape.ogg',25) - var/mob/living/carbon/human/H = user - if(!istype(H)) return - var/is_worn = istype(loc, /mob/living) - if(do_after(user, (H.wear_suit == src ? 6 : 3) SECONDS, is_worn ? loc : src, is_worn ? DO_DEFAULT | DO_USER_UNIQUE_ACT | DO_PUBLIC_PROGRESS : DO_PUBLIC_UNIQUE)) //Sealing a breach on your own suit is awkward and time consuming - user.visible_message( - SPAN_NOTICE("\The [user] uses \the [W] to seal \the [target_breach.descriptor] on \the [src]."), - SPAN_NOTICE("You use \the [W] to seal \the [target_breach.descriptor] on \the [src].") - ) - target_breach.patched = TRUE - target_breach.update_descriptor() - calc_breach_damage() - return - - ..() - -/obj/item/clothing/suit/space/examine(mob/user) - . = ..() - if(can_breach && breaches && breaches.len) - for(var/datum/breach/B in breaches) - to_chat(user, SPAN_DANGER("It has \a [B.descriptor].")) - -/obj/item/clothing/suit/space/get_pressure_weakness(pressure) - . = ..() - if(can_breach && damage) - . = min(1, . + damage*0.1) diff --git a/code/modules/clothing/spacesuits/captain.dm b/code/modules/clothing/spacesuits/captain.dm deleted file mode 100644 index a8916a3f21f2f..0000000000000 --- a/code/modules/clothing/spacesuits/captain.dm +++ /dev/null @@ -1,65 +0,0 @@ -//Captain's Spacesuit -/obj/item/clothing/head/helmet/space/capspace - name = "space helmet" - icon_state = "capspace" - item_state = "capspace" - desc = "A special helmet designed for work in a hazardous, low-pressure environment. Only for the most fashionable of military figureheads." - item_flags = 0 - max_pressure_protection = VOIDSUIT_MAX_PRESSURE - min_pressure_protection = 0 - flags_inv = HIDEFACE|BLOCKHAIR - permeability_coefficient = 0.01 - armor = list( - melee = ARMOR_MELEE_MAJOR, - bullet = ARMOR_BALLISTIC_RESISTANT, - laser = ARMOR_LASER_HANDGUNS, - energy = ARMOR_ENERGY_SMALL, - bomb = ARMOR_BOMB_RESISTANT, - bio = ARMOR_BIO_SHIELDED, - rad = ARMOR_RAD_SMALL - ) - -//Captain's space suit This is not the proper path but I don't currently know enough about how this all works to mess with it. -/obj/item/clothing/suit/armor/captain - name = "Captain's armor" - desc = "A bulky, heavy-duty piece of exclusive corporate armor. YOU are in charge!" - icon_state = "caparmor" - item_state_slots = list( - slot_l_hand_str = "capspacesuit", - slot_r_hand_str = "capspacesuit", - ) - w_class = ITEM_SIZE_HUGE - gas_transfer_coefficient = 0.01 - permeability_coefficient = 0.02 - max_pressure_protection = VOIDSUIT_MAX_PRESSURE - min_pressure_protection = 0 - body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS - allowed = list( - /obj/item/tank/oxygen_emergency, - /obj/item/tank/oxygen_emergency_extended, - /obj/item/tank/nitrogen_emergency, - /obj/item/device/flashlight, - /obj/item/gun/energy, - /obj/item/gun/projectile, - /obj/item/ammo_magazine, - /obj/item/ammo_casing, - /obj/item/melee/baton, - /obj/item/handcuffs - ) - armor = list( - melee = ARMOR_MELEE_MAJOR, - bullet = ARMOR_BALLISTIC_RESISTANT, - laser = ARMOR_LASER_HANDGUNS, - energy = ARMOR_ENERGY_SMALL, - bomb = ARMOR_BOMB_RESISTANT, - bio = ARMOR_BIO_SHIELDED, - rad = ARMOR_RAD_SMALL - ) - flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT|HIDETAIL - cold_protection = UPPER_TORSO | LOWER_TORSO | LEGS | FEET | ARMS | HANDS - min_cold_protection_temperature = SPACE_SUIT_MIN_COLD_PROTECTION_TEMPERATURE - siemens_coefficient = 0.7 - -/obj/item/clothing/suit/armor/captain/Initialize() - . = ..() - slowdown_per_slot[slot_wear_suit] = 1.5 diff --git a/code/modules/clothing/spacesuits/miscellaneous.dm b/code/modules/clothing/spacesuits/miscellaneous.dm deleted file mode 100644 index 1ba39970239f6..0000000000000 --- a/code/modules/clothing/spacesuits/miscellaneous.dm +++ /dev/null @@ -1,61 +0,0 @@ -//Deathsquad suit -/obj/item/clothing/head/helmet/space/deathsquad - name = "deathsquad helmet" - desc = "That's not red paint. That's real blood." - icon_state = "deathsquad" - item_state_slots = list( - slot_l_hand_str = "syndicate-helm-black-red", - slot_r_hand_str = "syndicate-helm-black-red", - ) - armor = list( - melee = ARMOR_MELEE_VERY_HIGH, - bullet = ARMOR_BALLISTIC_RESISTANT, - laser = ARMOR_LASER_HANDGUNS, - energy = ARMOR_ENERGY_SMALL, - bomb = ARMOR_BOMB_PADDED, - bio = ARMOR_BIO_SHIELDED, - rad = ARMOR_RAD_RESISTANT - ) - max_pressure_protection = FIRESUIT_MAX_PRESSURE - min_pressure_protection = 0 - flags_inv = BLOCKHAIR - siemens_coefficient = 0.6 - -//Space santa outfit suit -/obj/item/clothing/head/helmet/space/santahat - name = "Santa's hat" - desc = "Ho ho ho. Merrry X-mas!" - icon_state = "santahat" - item_state = "santahat" - flags_inv = BLOCKHAIR - body_parts_covered = HEAD - -/obj/item/clothing/suit/space/santa - name = "Santa's suit" - desc = "Festive!" - icon_state = "santa" - allowed = list(/obj/item) //for stuffing exta special presents - -//Orange emergency space suit -/obj/item/clothing/head/helmet/space/emergency - name = "emergency space helmet" - icon_state = "spacebowl" - light_overlay = "yellow_light" - desc = "A simple helmet with a built-in light. Smells like mothballs." - flash_protection = FLASH_PROTECTION_NONE - -/obj/item/clothing/suit/space/emergency - name = "emergency softsuit" - icon_state = "space_emergency" - desc = "A thin, ungainly softsuit colored in blaze orange for rescuers to easily locate. Looks pretty fragile." - -/obj/item/clothing/suit/space/emergency/Initialize() - . = ..() - slowdown_per_slot[slot_wear_suit] = 1 - -/obj/item/clothing/head/helmet/space/fishbowl - name = "spacesuit helmet" - desc = "A special helmet designed for work in a hazardous, low-pressure environment. The tinting can be toggled for flash protection at the cost of worse visibility." - icon_state = "spacebowl" - light_overlay = "yellow_light" - tinted = FALSE diff --git a/code/modules/clothing/spacesuits/rig/modules/combat.dm b/code/modules/clothing/spacesuits/rig/modules/combat.dm deleted file mode 100644 index 923099e221c06..0000000000000 --- a/code/modules/clothing/spacesuits/rig/modules/combat.dm +++ /dev/null @@ -1,407 +0,0 @@ -/* - * Contains - * /obj/item/rig_module/device/flash - * /obj/item/rig_module/device/flash/advanced - * /obj/item/rig_module/grenade_launcher (cleaner, smoke, mfoam) - * /obj/item/rig_module/mounted - * /obj/item/rig_module/mounted/lcannon - * /obj/item/rig_module/mounted/egun - * /obj/item/rig_module/mounted/taser - * /obj/item/rig_module/mounted/plasmacutter - * /obj/item/rig_module/mounted/energy_blade - * /obj/item/rig_module/fabricator - * /obj/item/rig_module/fabricator/wf_sign - */ - -/obj/item/rig_module/device/flash - name = "mounted flash" - desc = "You are the law." - icon_state = "flash" - - selectable = 0 - toggleable = 1 - activates_on_touch = 1 - module_cooldown = 0 - usable = 1 - active_power_cost = 100 - use_power_cost = 18000 //10 Whr - - engage_string = "Flash" - activate_string = "Activate Flash Module" - deactivate_string = "Deactivate Flash Module" - - interface_name = "mounted flash" - interface_desc = "Disorientates your target by blinding them with this intense palm-mounted light." - device = /obj/item/device/flash - origin_tech = list(TECH_COMBAT = 2, TECH_MAGNET = 3, TECH_ENGINEERING = 5) - -/obj/item/rig_module/device/flash/advanced - name = "advanced mounted flash" - device = /obj/item/device/flash/advanced - origin_tech = list(TECH_COMBAT = 3, TECH_MAGNET = 3, TECH_ENGINEERING = 5) - -/obj/item/rig_module/device/flash/installed() - . = ..() - if(!holder.glove_type)//gives select option for gloveless suits, why even use rig at this point - selectable = 1 - activates_on_touch = 0 - toggleable = 0 - else - selectable = 0 - activates_on_touch = 1 - toggleable = 1 - -/obj/item/rig_module/device/flash/engage(atom/target) - if(!check() || !device) - return 0 - - if(!holder.cell.check_charge(use_power_cost * CELLRATE)) - to_chat(holder.wearer,"Not enough stored power.") - return 0 - - if(!target) - if(device.attack_self(holder.wearer)) - holder.cell.use(use_power_cost * CELLRATE) - return 1 - - if(!target.Adjacent(holder.wearer) || !ismob(target)) - return 0 - - var/resolved = target.attackby(device,holder.wearer) - if(resolved) - holder.cell.use(use_power_cost * CELLRATE) - return resolved - -/obj/item/rig_module/device/flash/activate() - if(active || !check()) - return - - to_chat(holder.wearer, SPAN_NOTICE("Your hardsuit gauntlets heat up and lock into place, ready to be used.")) - playsound(src.loc, 'sound/items/goggles_charge.ogg', 20, 1) - active = 1 - -/obj/item/rig_module/grenade_launcher - name = "mounted grenade launcher" - desc = "A forearm-mounted micro-explosive dispenser." - selectable = 1 - icon_state = "grenadelauncher" - use_power_cost = 2 KILOWATTS // 2kJ per shot, a mass driver that propels the grenade? - - suit_overlay_active = "grenade" - - interface_name = "integrated grenade launcher" - interface_desc = "Discharges loaded grenades against the wearer's location." - - var/fire_force = 30 - var/fire_distance = 10 - - charges = list( - list("flashbang", "flashbang", /obj/item/grenade/flashbang, 3), - list("smoke bomb", "smoke bomb", /obj/item/grenade/smokebomb, 3), - list("EMP grenade", "EMP grenade", /obj/item/grenade/empgrenade, 3), - ) - -/obj/item/rig_module/grenade_launcher/accepts_item(var/obj/item/input_device, var/mob/living/user) - - if(!istype(input_device) || !istype(user)) - return 0 - - var/datum/rig_charge/accepted_item - for(var/charge in charges) - var/datum/rig_charge/charge_datum = charges[charge] - if(input_device.type == charge_datum.product_type) - accepted_item = charge_datum - break - - if(!accepted_item) - return 0 - - if(accepted_item.charges >= 5) - to_chat(user, "Another grenade of that type will not fit into the module.") - return 0 - - to_chat(user, "You slot \the [input_device] into the suit module.") - qdel(input_device) - accepted_item.charges++ - return 1 - -/obj/item/rig_module/grenade_launcher/engage(atom/target) - - if(!..()) - return 0 - - if(!target) - return 0 - - var/mob/living/carbon/human/H = holder.wearer - - if(!charge_selected) - to_chat(H, "You have not selected a grenade type.") - return 0 - - var/datum/rig_charge/charge = charges[charge_selected] - - if(!charge) - return 0 - - if(charge.charges <= 0) - to_chat(H, "Insufficient grenades!") - return 0 - - charge.charges-- - var/obj/item/grenade/new_grenade = new charge.product_type(get_turf(H)) - H.visible_message("[H] launches \a [new_grenade]!") - log_and_message_admins("fired a grenade ([new_grenade.name]) from a rigsuit grenade launcher.") - new_grenade.activate(H) - new_grenade.throw_at(target,fire_force,fire_distance) - -/obj/item/rig_module/grenade_launcher/cleaner - name = "mounted cleaning grenade launcher" - interface_name = "cleaning grenade launcher" - desc = "A shoulder-mounted micro-explosive dispenser designed only to accept standard cleaning foam grenades." - - charges = list( - list("cleaning grenade", "cleaning grenade", /obj/item/grenade/chem_grenade/cleaner, 9), - ) - -/obj/item/rig_module/grenade_launcher/smoke - name = "mounted smoke grenade launcher" - interface_name = "smoke grenade launcher" - desc = "A shoulder-mounted micro-explosive dispenser designed only to accept standard smoke grenades." - - charges = list( - list("smoke bomb", "smoke bomb", /obj/item/grenade/smokebomb, 6), - ) - -/obj/item/rig_module/grenade_launcher/mfoam - name = "mounted foam grenade launcher" - interface_name = "foam grenade launcher" - desc = "A shoulder-mounted micro-explosive dispenser designed only to accept standard metal foam grenades." - - charges = list( - list("metal foam grenade", "metal foam grenade", /obj/item/grenade/chem_grenade/metalfoam, 4), - ) - -/obj/item/rig_module/grenade_launcher/light - name = "mounted illumination grenade launcher" - interface_name = "illumination grenade launcher" - desc = "A shoulder-mounted micro-explosive dispenser designed only to accept standard illumination grenades." - - charges = list( - list("illumination grenade", "illumination grenade", /obj/item/grenade/light, 6), - ) - -/obj/item/rig_module/mounted - - name = "mounted gun" - desc = "Somesort of mounted gun." - selectable = 1 - usable = 1 - module_cooldown = 0 - icon_state = "lcannon" - - suit_overlay_active = "mounted-lascannon" - - engage_string = "Configure" - - interface_name = "mounted gun" - interface_desc = "A shoulder-mounted cell-powered laser gun." - - var/obj/item/gun/gun - -/obj/item/rig_module/mounted/Initialize() - . = ..() - if(ispath(gun)) - gun = new gun(src) - gun.canremove = 0 - -/obj/item/rig_module/mounted/engage(atom/target) - - if(!..() || !gun) - return 0 - - if(!target) - gun.attack_self(holder.wearer) - return - - gun.Fire(target,holder.wearer) - return 1 - -/obj/item/rig_module/mounted/lcannon - - name = "mounted laser cannon" - desc = "A shoulder-mounted battery-powered laser cannon mount." - usable = 0 - - interface_name = "mounted laser cannon" - interface_desc = "A shoulder-mounted cell-powered laser cannon." - - gun = /obj/item/gun/energy/lasercannon/mounted - -/obj/item/rig_module/mounted/egun - - name = "mounted energy gun" - desc = "A shoulder-mounted energy projector." - icon_state = "egun" - - suit_overlay_active = "mounted-taser" - - interface_name = "mounted energy gun" - interface_desc = "A shoulder-mounted suit-powered energy gun." - origin_tech = list(TECH_POWER = 6, TECH_COMBAT = 6, TECH_ENGINEERING = 6) - - gun = /obj/item/gun/energy/gun/mounted - -/obj/item/rig_module/mounted/taser - - name = "mounted electrolaser" - desc = "A shoulder-mounted nonlethal energy projector." - icon_state = "taser" - usable = 0 - - suit_overlay_active = "mounted-taser" - - interface_name = "mounted electrolaser" - interface_desc = "A shoulder-mounted, cell-powered electrolaser." - origin_tech = list(TECH_POWER = 5, TECH_COMBAT = 5, TECH_ENGINEERING = 6) - - gun = /obj/item/gun/energy/taser/mounted - -/obj/item/rig_module/mounted/plasmacutter - - name = "mounted plasma cutter" - desc = "A forearm-mounted plasma cutter." - icon_state = "plasmacutter" - usable = 0 - - suit_overlay_active = "plasmacutter" - - interface_name = "mounted plasma cutter" - interface_desc = "A forearm-mounted suit-powered plasma cutter." - origin_tech = list(TECH_MATERIAL = 5, TECH_PHORON = 4, TECH_ENGINEERING = 7, TECH_COMBAT = 5) - - gun = /obj/item/gun/energy/plasmacutter/mounted - -/obj/item/rig_module/mounted/plasmacutter/engage(atom/target) - - if(!check() || !gun) - return 0 - - if(holder.wearer.a_intent == I_HURT || !target.Adjacent(holder.wearer)) - gun.Fire(target,holder.wearer) - return 1 - else - var/resolved = target.attackby(gun,holder.wearer) - if(!resolved && gun && target) - gun.afterattack(target,holder.wearer,1) - return 1 - -/obj/item/rig_module/mounted/energy_blade - - name = "energy blade projector" - desc = "A powerful cutting beam projector." - icon_state = "eblade" - - suit_overlay_active = null - - activate_string = "Project Blade" - deactivate_string = "Cancel Blade" - - interface_name = "spider fang blade" - interface_desc = "A lethal energy projector that can shape a blade projected from the hand of the wearer or launch radioactive darts." - - usable = 0 - selectable = 1 - toggleable = 1 - use_power_cost = 10 KILOWATTS - active_power_cost = 0.5 KILOWATTS - passive_power_cost = 0 - - gun = /obj/item/gun/energy/crossbow/ninja/mounted - -/obj/item/rig_module/mounted/energy_blade/Process() - - if(holder && holder.wearer) - if(!(locate(/obj/item/melee/energy/blade) in holder.wearer)) - deactivate() - return 0 - - return ..() - -/obj/item/rig_module/mounted/energy_blade/activate() - var/mob/living/M = holder.wearer - - if(M.l_hand && M.r_hand) - to_chat(M, "Your hands are full.") - deactivate() - return - - var/obj/item/melee/energy/blade/blade = new(M) - blade.creator = M - M.put_in_hands(blade) - - if(!..() || !gun) - return 0 - -/obj/item/rig_module/mounted/energy_blade/deactivate() - - ..() - - var/mob/living/M = holder.wearer - - if(!M) - return - - for(var/obj/item/melee/energy/blade/blade in M.contents) - qdel(blade) - -/obj/item/rig_module/fabricator - - name = "matter fabricator" - desc = "A self-contained microfactory system for hardsuit integration." - selectable = 1 - usable = 1 - use_power_cost = 5 KILOWATTS - icon_state = "enet" - - engage_string = "Fabricate Star" - - interface_name = "death blossom launcher" - interface_desc = "An integrated microfactory that produces poisoned throwing stars from thin air and electricity." - - var/fabrication_type = /obj/item/material/star/ninja - var/fire_force = 30 - var/fire_distance = 10 - -/obj/item/rig_module/fabricator/engage(atom/target) - - if(!..()) - return 0 - - var/mob/living/H = holder.wearer - - if(target) - var/obj/item/firing = new fabrication_type() - firing.dropInto(loc) - H.visible_message("[H] launches \a [firing]!") - firing.throw_at(target,fire_force,fire_distance) - else - if(H.l_hand && H.r_hand) - to_chat(H, "Your hands are full.") - else - var/obj/item/new_weapon = new fabrication_type() - new_weapon.forceMove(H) - to_chat(H, "You quickly fabricate \a [new_weapon].") - H.put_in_hands(new_weapon) - - return 1 - -/obj/item/rig_module/fabricator/wf_sign - name = "wet floor sign fabricator" - use_power_cost = 50 KILOWATTS - engage_string = "Fabricate Sign" - - interface_name = "work saftey launcher" - interface_desc = "An integrated microfactory that produces wet floor signs from thin air and electricity." - - fabrication_type = /obj/item/caution diff --git a/code/modules/clothing/spacesuits/rig/modules/computer.dm b/code/modules/clothing/spacesuits/rig/modules/computer.dm deleted file mode 100644 index c6b735a4d1d19..0000000000000 --- a/code/modules/clothing/spacesuits/rig/modules/computer.dm +++ /dev/null @@ -1,500 +0,0 @@ -/* - * Contains - * /obj/item/rig_module/ai_container - * /obj/item/rig_module/datajack - * /obj/item/rig_module/power_sink - * /obj/item/rig_module/electrowarfare_suite - */ - -/obj/item/ai_verbs - name = "AI verb holder" - -/obj/item/ai_verbs/verb/hardsuit_interface() - set category = "Hardsuit" - set name = "Open Hardsuit Interface" - set src in usr - - if(!usr.loc || !usr.loc.loc || !istype(usr.loc.loc, /obj/item/rig_module)) - to_chat(usr, "You are not loaded into a hardsuit.") - return - - var/obj/item/rig_module/module = usr.loc.loc - if(!module.holder) - to_chat(usr, "Your module is not installed in a hardsuit.") - return - - module.holder.ui_interact(usr, nano_state = GLOB.contained_state) - -/obj/item/rig_module/ai_container - - name = "IIS module" - desc = "An integrated intelligence system module suitable for most hardsuits." - icon_state = "IIS" - toggleable = 1 - usable = 1 - disruptive = 0 - activates_on_touch = 1 - - engage_string = "Eject AI" - activate_string = "Enable Dataspike" - deactivate_string = "Disable Dataspike" - - interface_name = "integrated intelligence system" - interface_desc = "A socket that supports a range of artificial intelligence systems." - - var/mob/integrated_ai // Direct reference to the actual mob held in the suit. - var/obj/item/ai_card // Reference to the MMI, posibrain, inteliCard or pAI card previously holding the AI. - var/obj/item/ai_verbs/verb_holder - origin_tech = list(TECH_DATA = 6, TECH_MATERIAL = 5, TECH_ENGINEERING = 6) - -/mob - var/get_rig_stats = 0 - -/obj/item/rig_module/ai_container/Process() - if(integrated_ai) - var/obj/item/rig/rig = get_rig() - if(rig && rig.ai_override_enabled) - integrated_ai.get_rig_stats = 1 - else - integrated_ai.get_rig_stats = 0 - -/mob/living/Stat() - . = ..() - if(. && get_rig_stats) - var/obj/item/rig/rig = get_rig() - if(rig) - SetupStat(rig) - -/obj/item/rig_module/ai_container/proc/update_verb_holder() - if(!verb_holder) - verb_holder = new(src) - if(integrated_ai) - verb_holder.forceMove(integrated_ai) - else - verb_holder.forceMove(src) - -/obj/item/rig_module/ai_container/accepts_item(var/obj/item/input_device, var/mob/living/user) - - // Check if there's actually an AI to deal with. - var/mob/living/silicon/ai/target_ai - if(istype(input_device, /mob/living/silicon/ai)) - target_ai = input_device - else - target_ai = locate(/mob/living/silicon/ai) in input_device.contents - - var/obj/item/aicard/card = ai_card - - // Downloading from/loading to a terminal. - if(istype(input_device,/mob/living/silicon/ai) || istype(input_device,/obj/structure/AIcore/deactivated)) - - // If we're stealing an AI, make sure we have a card for it. - if(!card) - card = new /obj/item/aicard(src) - - // Terminal interaction only works with an inteliCarded AI. - if(!istype(card)) - return 0 - - // Since we've explicitly checked for three types, this should be safe. - input_device.attackby(card,user) - - // If the transfer failed we can delete the card. - if(locate(/mob/living/silicon/ai) in card) - ai_card = card - integrated_ai = locate(/mob/living/silicon/ai) in card - else - eject_ai() - update_verb_holder() - return 1 - - if(istype(input_device,/obj/item/aicard)) - // We are carding the AI in our suit. - if(integrated_ai) - integrated_ai.attackby(input_device,user) - // If the transfer was successful, we can clear out our vars. - if(integrated_ai.loc != src) - integrated_ai = null - eject_ai() - else - // You're using an empty card on an empty suit, idiot. - if(!target_ai) - return 0 - integrate_ai(input_device,user) - return 1 - - // Okay, it wasn't a terminal being touched, check for all the simple insertions. - if(input_device.type in list(/obj/item/device/paicard, /obj/item/device/mmi, /obj/item/organ/internal/posibrain)) - if(integrated_ai) - integrated_ai.attackby(input_device,user) - // If the transfer was successful, we can clear out our vars. - if(integrated_ai.loc != src) - integrated_ai = null - eject_ai() - else - integrate_ai(input_device,user) - return 1 - - return 0 - -/obj/item/rig_module/ai_container/engage(atom/target) - - if(!..()) - return 0 - - var/mob/living/carbon/human/H = holder.wearer - - if(!target) - if(ai_card) - if(istype(ai_card,/obj/item/aicard)) - ai_card.ui_interact(H, state = GLOB.deep_inventory_state) - else - eject_ai(H) - update_verb_holder() - return 1 - - if(accepts_item(target,H)) - return 1 - - return 0 - -/obj/item/rig_module/ai_container/removed() - eject_ai() - ..() - -/obj/item/rig_module/ai_container/proc/eject_ai(var/mob/user) - - if(ai_card) - if(istype(ai_card, /obj/item/aicard)) - if(integrated_ai && !integrated_ai.stat) - if(user) - to_chat(user, "You cannot eject your currently stored AI. Purge it manually.") - return 0 - to_chat(user, "You purge the remaining scraps of data from your previous AI, freeing it for use.") - if(integrated_ai) - integrated_ai.ghostize() - qdel(integrated_ai) - integrated_ai = null - if(ai_card) - qdel(ai_card) - ai_card = null - else if(user) - user.put_in_hands(ai_card) - else - ai_card.dropInto(loc) - ai_card = null - integrated_ai = null - update_verb_holder() - -/obj/item/rig_module/ai_container/proc/integrate_ai(var/obj/item/ai,var/mob/user) - if(!ai) return - - // The ONLY THING all the different AI systems have in common is that they all store the mob inside an item. - var/mob/living/ai_mob = locate(/mob/living) in ai.contents - if(ai_mob) - - if(ai_mob.key && ai_mob.client) - - if(istype(ai, /obj/item/aicard)) - - if(!ai_card) - ai_card = new /obj/item/aicard(src) - - var/obj/item/aicard/source_card = ai - var/obj/item/aicard/target_card = ai_card - if(istype(source_card) && istype(target_card)) - if(target_card.grab_ai(ai_mob, user)) - source_card.clear() - else - return 0 - else - return 0 - else if(user.unEquip(ai, src)) - ai_card = ai - to_chat(ai_mob, "You have been transferred to \the [holder]'s [src.name].") - to_chat(user, "You load \the [ai_mob] into \the [holder]'s [src.name].") - - integrated_ai = ai_mob - - if(!(locate(integrated_ai) in ai_card)) - integrated_ai = null - eject_ai() - else - to_chat(user, "There is no active AI within \the [ai].") - else - to_chat(user, "There is no active AI within \the [ai].") - update_verb_holder() - return - -/obj/item/rig_module/datajack - - name = "datajack module" - desc = "A simple induction datalink module." - icon_state = "datajack" - toggleable = 1 - activates_on_touch = 1 - usable = 0 - - activate_string = "Enable Datajack" - deactivate_string = "Disable Datajack" - - interface_name = "contact datajack" - interface_desc = "An induction-powered high-throughput datalink suitable for hacking encrypted networks." - var/list/stored_research - -/obj/item/rig_module/datajack/Initialize() - . =..() - stored_research = list() - -/obj/item/rig_module/datajack/engage(atom/target) - - if(!..()) - return 0 - - if(target) - var/mob/living/carbon/human/H = holder.wearer - if(!accepts_item(target,H)) - return 0 - return 1 - -/obj/item/rig_module/datajack/accepts_item(var/obj/item/input_device, var/mob/living/user) - - if(istype(input_device,/obj/item/disk/tech_disk)) - to_chat(user, "You slot the disk into [src].") - var/obj/item/disk/tech_disk/disk = input_device - if(disk.stored) - if(load_data(disk.stored)) - to_chat(user, "Download successful; disk erased.") - disk.stored = null - else - to_chat(user, "The disk is corrupt. It is useless to you.") - else - to_chat(user, "The disk is blank. It is useless to you.") - return 1 - - // I fucking hate R&D code. This typecheck spam would be totally unnecessary in a sane setup. - else if(istype(input_device,/obj/machinery)) - var/datum/research/incoming_files - if(istype(input_device,/obj/machinery/computer/rdconsole)) - var/obj/machinery/computer/rdconsole/input_machine = input_device - incoming_files = input_machine.files - else if(istype(input_device,/obj/machinery/r_n_d/server)) - var/obj/machinery/r_n_d/server/input_machine = input_device - incoming_files = input_machine.files - - if(!incoming_files || !incoming_files.known_tech || !incoming_files.known_tech.len) - to_chat(user, "Memory failure. There is nothing accessible stored on this terminal.") - else - // Maybe consider a way to drop all your data into a target repo in the future. - if(load_data(incoming_files.known_tech)) - to_chat(user, "Download successful; local and remote repositories synchronized.") - else - to_chat(user, "Scan complete. There is nothing useful stored on this terminal.") - return 1 - return 0 - -/obj/item/rig_module/datajack/proc/load_data(var/incoming_data) - - if(islist(incoming_data)) - for(var/entry in incoming_data) - load_data(entry) - return 1 - - if(istype(incoming_data, /datum/tech)) - var/data_found - var/datum/tech/new_data = incoming_data - for(var/datum/tech/current_data in stored_research) - if(current_data.id == new_data.id) - data_found = 1 - if(current_data.level < new_data.level) - current_data.level = new_data.level - break - if(!data_found) - stored_research += incoming_data - return 1 - return 0 - -/obj/item/rig_module/electrowarfare_suite - - name = "electrowarfare module" - desc = "A bewilderingly complex bundle of fiber optics and chips." - icon_state = "ewar" - toggleable = 1 - usable = 0 - active_power_cost = 100 - - activate_string = "Enable Countermeasures" - deactivate_string = "Disable Countermeasures" - - interface_name = "electrowarfare system" - interface_desc = "An active counter-electronic warfare suite that disrupts AI tracking." - -/obj/item/rig_module/electrowarfare_suite/activate() - - if(!..()) - return - - // This is not the best way to handle this, but I don't want it to mess with ling camo - var/mob/living/M = holder.wearer - M.digitalcamo++ - -/obj/item/rig_module/electrowarfare_suite/deactivate() - - if(!..()) - return - - var/mob/living/M = holder.wearer - M.digitalcamo = max(0,(M.digitalcamo-1)) - -/obj/item/rig_module/power_sink - - name = "hardsuit power sink" - desc = "An heavy-duty power sink." - icon_state = "powersink" - toggleable = 1 - activates_on_touch = 1 - disruptive = 0 - - activate_string = "Enable Power Sink" - deactivate_string = "Disable Power Sink" - - interface_name = "niling d-sink" - interface_desc = "Colloquially known as a power siphon, this module drains power through the suit hands into the suit battery." - - origin_tech = list(TECH_POWER = 6, TECH_ENGINEERING = 6) - var/atom/interfaced_with // Currently draining power from this device. - var/total_power_drained = 0 - var/drain_loc - var/max_draining_rate = 120 KILOWATTS // The same as unupgraded cyborg recharger. - -/obj/item/rig_module/power_sink/deactivate() - - if(interfaced_with) - if(holder && holder.wearer) - to_chat(holder.wearer, "Your power sink retracts as the module deactivates.") - drain_complete() - interfaced_with = null - total_power_drained = 0 - return ..() - -/obj/item/rig_module/power_sink/activate() - interfaced_with = null - total_power_drained = 0 - return ..() - -/obj/item/rig_module/power_sink/engage(atom/target) - - if(!..()) - return 0 - - //Target wasn't supplied or we're already draining. - if(interfaced_with) - return 0 - - if(!target) - return 1 - - // Are we close enough? - var/mob/living/carbon/human/H = holder.wearer - if(!target.Adjacent(H)) - return 0 - - // Is it a valid power source? - if(target.drain_power(1) <= 0) - return 0 - - to_chat(H, "You begin draining power from [target]!") - interfaced_with = target - drain_loc = interfaced_with.loc - - holder.spark_system.start() - playsound(H.loc, 'sound/effects/sparks2.ogg', 50, 1) - - return 1 - -/obj/item/rig_module/power_sink/accepts_item(var/obj/item/input_device, var/mob/living/user) - var/can_drain = input_device.drain_power(1) - if(can_drain > 0) - engage(input_device) - return 1 - return 0 - -/obj/item/rig_module/power_sink/Process() - - if(!interfaced_with) - return ..() - - var/mob/living/carbon/human/H - if(holder && holder.wearer) - H = holder.wearer - - if(!H || !istype(H)) - return 0 - - holder.spark_system.start() - playsound(H.loc, 'sound/effects/sparks2.ogg', 50, 1) - - if(!holder.cell) - to_chat(H, "Your power sink flashes an error; there is no cell in your rig.") - drain_complete(H) - return - - if(!interfaced_with || !interfaced_with.Adjacent(H) || !(interfaced_with.loc == drain_loc)) - to_chat(H, "Your power sink retracts into its casing.") - drain_complete(H) - return - - if(holder.cell.fully_charged()) - to_chat(H, "Your power sink flashes an amber light; your rig cell is full.") - drain_complete(H) - return - - var/target_drained = interfaced_with.drain_power(0,0,max_draining_rate) - if(target_drained <= 0) - to_chat(H, "Your power sink flashes a red light; there is no power left in [interfaced_with].") - drain_complete(H) - return - - holder.cell.give(target_drained * CELLRATE) - total_power_drained += target_drained - - return - -/obj/item/rig_module/power_sink/proc/drain_complete(var/mob/living/M) - - if(!interfaced_with) - if(M) to_chat(M, "Total power drained: [round(total_power_drained*CELLRATE)] Wh.") - else - if(M) to_chat(M, "Total power drained from [interfaced_with]: [round(total_power_drained*CELLRATE)] Wh.") - interfaced_with.drain_power(0,1,0) // Damage the victim. - - drain_loc = null - interfaced_with = null - total_power_drained = 0 - -/* -//Maybe make this use power when active or something -/obj/item/rig_module/emp_shielding - name = "\improper EMP dissipation module" - desc = "A bewilderingly complex bundle of fiber optics and chips." - toggleable = 1 - usable = 0 - - activate_string = "Enable active EMP shielding" - deactivate_string = "Disable active EMP shielding" - - interface_name = "active EMP shielding system" - interface_desc = "A highly experimental system that augments the hardsuit's existing EM shielding." - var/protection_amount = 20 - -/obj/item/rig_module/emp_shielding/activate() - if(!..()) - return - - holder.emp_protection += protection_amount - -/obj/item/rig_module/emp_shielding/deactivate() - if(!..()) - return - - holder.emp_protection = max(0,(holder.emp_protection - protection_amount)) -*/ \ No newline at end of file diff --git a/code/modules/clothing/spacesuits/rig/modules/modules.dm b/code/modules/clothing/spacesuits/rig/modules/modules.dm deleted file mode 100644 index 52edc45668703..0000000000000 --- a/code/modules/clothing/spacesuits/rig/modules/modules.dm +++ /dev/null @@ -1,376 +0,0 @@ -/* - * Rigsuit upgrades/abilities. - */ - -/datum/rig_charge - var/short_name = "undef" - var/display_name = "undefined" - var/product_type = "undefined" - var/charges = 0 - -/obj/item/rig_module - name = "hardsuit upgrade" - desc = "It looks pretty sciency." - icon = 'icons/obj/rig_modules.dmi' - icon_state = "module" - matter = list(MATERIAL_STEEL = 20000, MATERIAL_PLASTIC = 30000, MATERIAL_GLASS = 5000) - - var/damage = 0 - var/obj/item/rig/holder - var/list/banned_modules = list() - - var/module_cooldown = 10 - var/next_use = 0 - - var/toggleable // Set to 1 for the device to show up as an active effect. - var/usable // Set to 1 for the device to have an on-use effect. - var/selectable // Set to 1 to be able to assign the device as primary system. - var/redundant // Set to 1 to ignore duplicate module checking when installing. - var/permanent // If set, the module can't be removed. - var/disruptive = 1 // Can disrupt by other effects. - var/activates_on_touch // If set, unarmed attacks will call engage() on the target. - - var/active // Basic module status - var/disruptable // Will deactivate if some other powers are used. - - // Now in joules/watts! - var/use_power_cost = 0 // Power used when single-use ability called. - var/active_power_cost = 0 // Power used when turned on. - var/passive_power_cost = 0 // Power used when turned off. - - var/list/charges // Associative list of charge types and remaining numbers. - var/charge_selected // Currently selected option used for charge dispensing. - - // Icons. - var/suit_overlay - var/suit_overlay_active // If set, drawn over icon and mob when effect is active. - var/suit_overlay_inactive // As above, inactive. - var/suit_overlay_used // As above, when engaged. - - //Display fluff - var/interface_name = "hardsuit upgrade" - var/interface_desc = "A generic hardsuit upgrade." - var/engage_string = "Engage" - var/activate_string = "Activate" - var/deactivate_string = "Deactivate" - - var/list/stat_rig_module/stat_modules = new() - -/obj/item/rig_module/examine(mob/user) - . = ..() - switch(damage) - if(0) - to_chat(user, "It is undamaged.") - if(1) - to_chat(user, "It is badly damaged.") - if(2) - to_chat(user, "It is almost completely destroyed.") - -/obj/item/rig_module/attackby(obj/item/W as obj, mob/user as mob) - - if(istype(W,/obj/item/stack/nanopaste)) - - if(damage == 0) - to_chat(user, "There is no damage to mend.") - return - - to_chat(user, "You start mending the damaged portions of \the [src]...") - - if(!do_after(user, 3 SECONDS, src, DO_PUBLIC_UNIQUE) || !W || !src) - return - - var/obj/item/stack/nanopaste/paste = W - damage = 0 - to_chat(user, "You mend the damage to [src] with [W].") - paste.use(1) - return - - else if(isCoil(W)) - - switch(damage) - if(0) - to_chat(user, "There is no damage to mend.") - return - if(2) - to_chat(user, "There is no damage that you are capable of mending with such crude tools.") - return - - var/obj/item/stack/cable_coil/cable = W - if(!cable.can_use(5)) - to_chat(user, "You need five units of cable to repair \the [src].") - return - - to_chat(user, "You start mending the damaged portions of \the [src]...") - if(!do_after(user, 3 SECONDS, src, DO_PUBLIC_UNIQUE) || !W || !src) - return - - damage = 1 - to_chat(user, "You mend some of damage to [src] with [W], but you will need more advanced tools to fix it completely.") - cable.use(5) - return - ..() - -/obj/item/rig_module/Initialize() - . =..() - if(suit_overlay_inactive) - suit_overlay = suit_overlay_inactive - - if(charges && charges.len) - var/list/processed_charges = list() - for(var/list/charge in charges) - var/datum/rig_charge/charge_dat = new - - charge_dat.short_name = charge[1] - charge_dat.display_name = charge[2] - charge_dat.product_type = charge[3] - charge_dat.charges = charge[4] - - if(!charge_selected) charge_selected = charge_dat.short_name - processed_charges[charge_dat.short_name] = charge_dat - - charges = processed_charges - - stat_modules += new/stat_rig_module/activate(src) - stat_modules += new/stat_rig_module/deactivate(src) - stat_modules += new/stat_rig_module/engage(src) - stat_modules += new/stat_rig_module/select(src) - stat_modules += new/stat_rig_module/charge(src) - -/obj/item/rig_module/Destroy() - deactivate() - . = ..() - -// Called when the module is installed into a suit. -/obj/item/rig_module/proc/installed(var/obj/item/rig/new_holder) - holder = new_holder - return - -/obj/item/rig_module/proc/check(var/charge = 50) - - if(damage >= 2) - to_chat(usr, "The [interface_name] is damaged beyond use!") - return 0 - - if(world.time < next_use) - to_chat(usr, "You cannot use the [interface_name] again so soon.") - return 0 - - if(!holder || holder.canremove) - to_chat(usr, "The suit is not initialized.") - return 0 - - if(usr.lying || usr.stat || usr.stunned || usr.paralysis || usr.weakened) - to_chat(usr, "You cannot use the suit in this state.") - return 0 - - if(holder.wearer && holder.wearer.lying) - to_chat(usr, "The suit cannot function while the wearer is prone.") - return 0 - - if(holder.security_check_enabled && !holder.check_suit_access(usr)) - to_chat(usr, "Access denied.") - return 0 - - if(!holder.check_power_cost(usr, charge, 0, src, (istype(usr,/mob/living/silicon ? 1 : 0) ) ) ) - return 0 - - return 1 - -//Proc for one-use abilities like teleport. -/obj/item/rig_module/proc/engage() - - if(!check(use_power_cost)) - return 0 - - next_use = world.time + module_cooldown - return 1 - -// Proc for toggling on active abilities. -/obj/item/rig_module/proc/activate() - - if(active || !engage()) - return 0 - - active = 1 - - if(suit_overlay_active) - suit_overlay = suit_overlay_active - else - suit_overlay = null - holder.update_icon() - - return 1 - -// Proc for toggling off active abilities. -/obj/item/rig_module/proc/deactivate() - - if(!active) - return 0 - - active = 0 - - if(suit_overlay_inactive) - suit_overlay = suit_overlay_inactive - else - suit_overlay = null - if(holder) - holder.update_icon() - - return 1 - -//Proc for selecting module -/obj/item/rig_module/proc/select() - - if(!check()) - return 0 - - if(holder.selected_module) - if(holder.selected_module.suit_overlay_inactive) - holder.selected_module.suit_overlay = holder.selected_module.suit_overlay_inactive - else - holder.selected_module.suit_overlay = null - - holder.selected_module = src - if(suit_overlay_active) - suit_overlay = suit_overlay_active - else - suit_overlay = null - holder.update_icon() - return 1 - -// Called when the module is uninstalled from a suit. -/obj/item/rig_module/proc/removed() - deactivate() - holder = null - return - -/obj/item/rig_module/get_cell() - return holder && holder.get_cell() - -// Called by the hardsuit each rig process tick. -/obj/item/rig_module/Process() - if(active) - return active_power_cost - else - return passive_power_cost - -// Called by holder rigsuit attackby() -// Checks if an item is usable with this module and handles it if it is -/obj/item/rig_module/proc/accepts_item(var/obj/item/input_device) - return 0 - -/mob/living/carbon/human/Stat() - . = ..() - - if(. && istype(back,/obj/item/rig)) - var/obj/item/rig/R = back - SetupStat(R) - -/mob/proc/SetupStat(var/obj/item/rig/R) - if(R && !R.canremove && R.installed_modules.len && statpanel("Hardsuit Modules")) - var/cell_status = R.cell ? "[R.cell.charge]/[R.cell.maxcharge]" : "ERROR" - stat("Suit Charge:", cell_status) - var/air_tank - if(R.air_supply)//makes sure you have tank - if(R.air_supply.air_contents)//make sure your tank has air - air_tank = "[round(R.air_supply.air_contents.return_pressure())] kPa" - else - air_tank = "0 kPa" - else - air_tank = "NOT FOUND" - stat("Tank Pressure:", air_tank) - for(var/obj/item/rig_module/module in R.installed_modules) - for(var/stat_rig_module/SRM in module.stat_modules) - if(SRM.CanUse()) - stat(SRM.module.interface_name,SRM) - -/stat_rig_module - parent_type = /atom/movable - var/module_mode = "" - var/obj/item/rig_module/module - -/stat_rig_module/New(var/obj/item/rig_module/module) - ..() - src.module = module - -/stat_rig_module/proc/AddHref(var/list/href_list) - return - -/stat_rig_module/proc/CanUse() - return 0 - -/stat_rig_module/Click() - if(CanUse()) - var/list/href_list = list( - "interact_module" = module.holder.installed_modules.Find(module), - "module_mode" = module_mode - ) - AddHref(href_list) - module.holder.Topic(usr, href_list) - -/stat_rig_module/DblClick() - return Click() - -/stat_rig_module/activate/New(var/obj/item/rig_module/module) - ..() - name = module.activate_string - if(module.active_power_cost) - name += " ([module.active_power_cost*10]A)" - module_mode = "activate" - -/stat_rig_module/activate/CanUse() - return module.toggleable && !module.active - -/stat_rig_module/deactivate/New(var/obj/item/rig_module/module) - ..() - name = module.deactivate_string - // Show cost despite being 0, if it means changing from an active cost. - if(module.active_power_cost || module.passive_power_cost) - name += " ([module.passive_power_cost*10]P)" - - module_mode = "deactivate" - -/stat_rig_module/deactivate/CanUse() - return module.toggleable && module.active - -/stat_rig_module/engage/New(var/obj/item/rig_module/module) - ..() - name = module.engage_string - if(module.use_power_cost) - name += " ([module.use_power_cost*10]E)" - module_mode = "engage" - -/stat_rig_module/engage/CanUse() - return module.usable - -/stat_rig_module/select/New() - ..() - name = "Select" - module_mode = "select" - -/stat_rig_module/select/CanUse() - if(module.selectable) - name = module.holder.selected_module == module ? "Selected" : "Select" - return 1 - return 0 - -/stat_rig_module/charge/New() - ..() - name = "Change Charge" - module_mode = "select_charge_type" - -/stat_rig_module/charge/AddHref(var/list/href_list) - var/charge_index = module.charges.Find(module.charge_selected) - if(!charge_index) - charge_index = 0 - else - charge_index = charge_index == module.charges.len ? 1 : charge_index+1 - - href_list["charge_type"] = module.charges[charge_index] - -/stat_rig_module/charge/CanUse() - if(module.charges && module.charges.len) - var/datum/rig_charge/charge = module.charges[module.charge_selected] - name = "[charge.display_name] ([charge.charges]C) - Change" - return 1 - return 0 diff --git a/code/modules/clothing/spacesuits/rig/modules/ninja.dm b/code/modules/clothing/spacesuits/rig/modules/ninja.dm deleted file mode 100644 index 5f1076e9e0c0c..0000000000000 --- a/code/modules/clothing/spacesuits/rig/modules/ninja.dm +++ /dev/null @@ -1,258 +0,0 @@ -/* - * Contains - * /obj/item/rig_module/stealth_field - * /obj/item/rig_module/teleporter - * /obj/item/rig_module/fabricator/energy_net - * /obj/item/rig_module/self_destruct - */ - -/obj/item/rig_module/stealth_field - - name = "active camouflage module" - desc = "A robust hardsuit-integrated stealth module." - icon_state = "cloak" - - toggleable = 1 - disruptable = 1 - disruptive = 0 - - use_power_cost = 250 KILOWATTS - active_power_cost = 30 KILOWATTS - passive_power_cost = 0 - module_cooldown = 10 SECONDS - origin_tech = list(TECH_MATERIAL = 5, TECH_POWER = 6, TECH_MAGNET = 6, TECH_ESOTERIC = 6, TECH_ENGINEERING = 7) - activate_string = "Enable Cloak" - deactivate_string = "Disable Cloak" - - interface_name = "integrated stealth system" - interface_desc = "An integrated active camouflage system." - - suit_overlay_active = "stealth_active" - suit_overlay_inactive = "stealth_inactive" - -/obj/item/rig_module/stealth_field/activate() - - if(!..()) - return 0 - - var/mob/living/carbon/human/H = holder.wearer - - if(H.add_cloaking_source(src)) - anim(H, 'icons/effects/effects.dmi', "electricity",null,20,null) - -/obj/item/rig_module/stealth_field/deactivate() - - if(!..()) - return 0 - - var/mob/living/carbon/human/H = holder.wearer - - if(H.remove_cloaking_source(src)) - anim(H,'icons/mob/mob.dmi',,"uncloak",,H.dir) - anim(H, 'icons/effects/effects.dmi', "electricity",null,20,null) - - // We still play the sound, even if not visibly uncloaking. Ninjas are not that stealthy. - playsound(get_turf(H), 'sound/effects/stealthoff.ogg', 75, 1) - - -/obj/item/rig_module/teleporter - - name = "teleportation module" - desc = "A complex, sleek-looking, hardsuit-integrated teleportation module." - icon_state = "teleporter" - use_power_cost = 400 KILOWATTS - redundant = 1 - usable = 1 - selectable = 1 - module_cooldown = 60 - engage_string = "Emergency Leap" - - interface_name = "VOID-shift phase projector" - interface_desc = "An advanced teleportation system. It is capable of pinpoint precision or random leaps forward." - -/obj/item/rig_module/teleporter/proc/phase_in(var/mob/M,var/turf/T) - if(!M || !T) - return - holder.spark_system.start() - M.phase_in(T) - -/obj/item/rig_module/teleporter/proc/phase_out(var/mob/M,var/turf/T) - if(!M || !T) - return - M.phase_out(T) - -/obj/item/rig_module/teleporter/engage(var/atom/target, var/notify_ai) - - var/mob/living/carbon/human/H = holder.wearer - - if(!istype(H.loc, /turf)) - to_chat(H, "You cannot teleport out of your current location.") - return 0 - - var/turf/T - if(target) - T = get_turf(target) - else - T = get_teleport_loc(get_turf(H), H, 6, 1, 1, 1) - - if(!T) - to_chat(H, "No valid teleport target found.") - return 0 - - if(T.density) - to_chat(H, "You cannot teleport into solid walls.") - return 0 - - if(T.z in GLOB.using_map.admin_levels) - to_chat(H, "You cannot use your teleporter on this Z-level.") - return 0 - - if(T.contains_dense_objects()) - to_chat(H, "You cannot teleport to a location with solid objects.") - return 0 - - if(T.z != H.z || get_dist(T, get_turf(H)) > world.view) - to_chat(H, "You cannot teleport to such a distant object.") - return 0 - - if(!..()) return 0 - - phase_out(H,get_turf(H)) - H.forceMove(T) - phase_in(H,get_turf(H)) - - for(var/obj/item/grab/G in H.contents) - if(G.affecting) - phase_out(G.affecting,get_turf(G.affecting)) - G.affecting.forceMove(locate(T.x+rand(-1,1),T.y+rand(-1,1),T.z)) - phase_in(G.affecting,get_turf(G.affecting)) - - return 1 - - -/obj/item/rig_module/fabricator/energy_net - - name = "net projector" - desc = "Some kind of complex energy projector with a hardsuit mount." - icon_state = "enet" - module_cooldown = 100 - - interface_name = "energy net launcher" - interface_desc = "An advanced energy-patterning projector used to capture targets." - - engage_string = "Fabricate Net" - - fabrication_type = /obj/item/energy_net - use_power_cost = 50 KILOWATTS - origin_tech = list(TECH_MATERIAL = 5, TECH_POWER = 6, TECH_MAGNET = 5, TECH_ESOTERIC = 4, TECH_ENGINEERING = 6) - -/obj/item/rig_module/fabricator/energy_net/engage(atom/target) - - if(holder && holder.wearer) - if(..(target) && target) - holder.wearer.Beam(target,"n_beam",,10) - return 1 - return 0 - -/obj/item/rig_module/self_destruct - name = "self-destruct module" - desc = "Oh my God, Captain. A bomb." - icon_state = "deadman" - toggleable = 1 - usable = 1 - permanent = 1 - - activate_string = "Enable Auto Self-Destruct" - deactivate_string = "Disable Auto Self-Destruct" - - engage_string = "Detonate" - - interface_name = "dead man's switch" - interface_desc = "An integrated automatic self-destruct module. When the wearer dies, so does the surrounding area. Can be triggered manually." - var/list/explosion_values = list(1,2,4,5) - var/blinking = 0 - var/blink_mode = 0 - var/blink_delay = 10 - var/blink_time = 40 - var/blink_rapid_time = 40 - var/blink_solid_time = 20 - var/activation_check = 0 //used to detect whether proc was called via 'activate' or 'engage' - var/self_destructing = 0 //used to prevent toggling the switch, then dying and having it toggled again - -/obj/item/rig_module/self_destruct/small - explosion_values = list(0,0,3,4) - - -/obj/item/rig_module/self_destruct/activate() - activation_check = 1 - if(!..()) - return 0 - -/obj/item/rig_module/self_destruct/engage(var/skip_check = FALSE) - set waitfor = 0 - - if(self_destructing) //prevents repeat calls - return 0 - - if(activation_check) - activation_check = 0 - return 1 - - if(!skip_check) - if(!usr || alert(usr, "Are you sure you want to push that button?", "Self-destruct", "No", "Yes") == "No") - return - - if(usr == holder.wearer) - holder.wearer.visible_message(" \The [src.holder.wearer] flicks a small switch on the back of \the [src.holder].",1) - sleep(blink_delay) - - self_destructing = 1 - src.blink_mode = 1 - src.blink() - holder.visible_message("\The [src.holder] begins beeping."," You hear beeping.") - sleep(blink_time) - src.blink_mode = 2 - holder.visible_message("\The [src.holder] beeps rapidly!"," You hear rapid beeping!") - sleep(blink_rapid_time) - src.blink_mode = 3 - holder.visible_message("\The [src.holder] emits a shrill tone!"," You hear a shrill tone!") - sleep(blink_solid_time) - src.blink_mode = 0 - src.holder.set_light(0, 0, 0, 2, "#000000") - - explosion(get_turf(src), explosion_values[1], explosion_values[2], explosion_values[3], explosion_values[4]) - if(holder && holder.wearer) - holder.wearer.gib() - qdel(holder) - qdel(src) - -/obj/item/rig_module/self_destruct/Process() - // Not being worn, leave it alone. - if(!holder || !holder.wearer || !holder.wearer.wear_suit == holder) - return 0 - - //OH SHIT. - if(holder.wearer.stat == DEAD) - if(src.active) - engage(1) - -/obj/item/rig_module/self_destruct/proc/blink() - set waitfor = 0 - switch (blink_mode) - if(0) - return - if(1) - src.holder.set_light(1, 1, 8.5, 2, "#ff0a00") - sleep(6) - src.holder.set_light(0, 0, 0, 2, "#000000") - spawn(6) .() - if(2) - src.holder.set_light(1, 1, 8.5, 2, "#ff0a00") - sleep(2) - src.holder.set_light(0, 0, 0, 2, "#000000") - spawn(2) .() - if(3) - src.holder.set_light(1, 1, 8.5, 2, "#ff0a00") - -/obj/item/rig_module/grenade_launcher/ninja - suit_overlay = null diff --git a/code/modules/clothing/spacesuits/rig/modules/utility.dm b/code/modules/clothing/spacesuits/rig/modules/utility.dm deleted file mode 100644 index e4058208c0626..0000000000000 --- a/code/modules/clothing/spacesuits/rig/modules/utility.dm +++ /dev/null @@ -1,500 +0,0 @@ -/* Contains: - * /obj/item/rig_module/device - * /obj/item/rig_module/device/healthscanner - * /obj/item/rig_module/device/defib - * /obj/item/rig_module/device/drill - * /obj/item/rig_module/device/orescanner - * /obj/item/rig_module/device/rcd - * /obj/item/rig_module/device/anomaly_scanner - * /obj/item/rig_module/maneuvering_jets - * /obj/item/rig_module/chem_dispenser - * /obj/item/rig_module/chem_dispenser/injector - * /obj/item/rig_module/voice - * /obj/item/rig_module/device/paperdispenser - * /obj/item/rig_module/device/pen - * /obj/item/rig_module/device/stamp - */ - -/obj/item/rig_module/device - name = "mounted device" - desc = "Some kind of hardsuit mount." - usable = 0 - selectable = 1 - toggleable = 0 - disruptive = 0 - - var/obj/item/device - -/obj/item/rig_module/device/healthscanner - name = "health scanner module" - desc = "A hardsuit-mounted health scanner." - icon_state = "scanner" - interface_name = "health scanner" - interface_desc = "Shows an informative health readout when used on a subject." - engage_string = "Display Readout" - usable = 1 - use_power_cost = 200 - origin_tech = list(TECH_MAGNET = 3, TECH_BIO = 3, TECH_ENGINEERING = 5) - device = /obj/item/device/scanner/health - -/obj/item/rig_module/device/defib - name = "mounted defibrillator" - desc = "A complex Vey-Med circuit with two metal electrodes hanging from it." - icon_state = "defib" - - interface_name = "mounted defibrillator" - interface_desc = "A prototype defibrillator, palm-mounted for ease of use." - - use_power_cost = 0//Already handled by defib, but it's 150 Wh, normal defib takes 100 - device = /obj/item/shockpaddles/rig - -/obj/item/rig_module/device/drill - name = "hardsuit mounted drill" - desc = "A very heavy diamond-tipped drill." - icon_state = "drill" - interface_name = "mounted drill" - interface_desc = "A diamond-tipped industrial drill." - suit_overlay_active = "mounted-drill" - suit_overlay_inactive = null - use_power_cost = 3600 //2 Wh per use - module_cooldown = 0 - origin_tech = list(TECH_MATERIAL = 6, TECH_POWER = 4, TECH_ENGINEERING = 6) - device = /obj/item/pickaxe/diamonddrill - -/obj/item/rig_module/device/anomaly_scanner - name = "anomaly scanner module" - desc = "You think it's called an Elder Sarsparilla or something." - icon_state = "eldersasparilla" - interface_name = "Alden-Saraspova counter" - interface_desc = "An exotic particle detector commonly used by xenoarchaeologists." - engage_string = "Begin Scan" - use_power_cost = 200 - usable = 1 - selectable = 0 - device = /obj/item/device/ano_scanner - origin_tech = list(TECH_BLUESPACE = 4, TECH_MAGNET = 4, TECH_ENGINEERING = 6) - -/obj/item/rig_module/device/orescanner - name = "ore scanner module" - desc = "A clunky old ore scanner." - icon_state = "scanner" - interface_name = "ore detector" - interface_desc = "A sonar system for detecting large masses of ore." - activate_string = "Get Survey Data Disk" - engage_string = "Display Readout" - usable = 1 - toggleable = 1 - use_power_cost = 200 - device = /obj/item/device/scanner/mining - origin_tech = list(TECH_MATERIAL = 4, TECH_MAGNET = 4, TECH_ENGINEERING = 6) - -/obj/item/rig_module/device/orescanner/activate() - if(!check() || !device) - return 0 - - var/obj/item/device/scanner/mining/scanner = device - scanner.put_disk_in_hand(holder.wearer) - -/obj/item/rig_module/device/rcd - name = "RCD mount" - desc = "A cell-powered rapid construction device for a hardsuit." - icon_state = "rcd" - interface_name = "mounted RCD" - interface_desc = "A device for building or removing walls. Cell-powered." - usable = 1 - engage_string = "Configure RCD" - use_power_cost = 300 - origin_tech = list(TECH_MATERIAL = 6, TECH_MAGNET = 5, TECH_ENGINEERING = 7) - device = /obj/item/rcd/mounted - -/obj/item/rig_module/device/Initialize() - . = ..() - if(ispath(device)) - device = new device(src) - device.canremove = 0 - -/obj/item/rig_module/device/engage(atom/target) - if(!..() || !device) - return 0 - - if(!target) - device.attack_self(holder.wearer) - return 1 - - if(!target.Adjacent(holder.wearer)) - return 0 - - var/resolved = target.attackby(device,holder.wearer) - if(!resolved && device && target) - device.afterattack(target,holder.wearer,1) - return 1 - - -/obj/item/rig_module/chem_dispenser - name = "mounted chemical dispenser" - desc = "A complex web of tubing and needles suitable for hardsuit use." - icon_state = "injector" - usable = 1 - selectable = 0 - toggleable = 0 - disruptive = 0 - use_power_cost = 500 - - engage_string = "Inject" - - interface_name = "integrated chemical dispenser" - interface_desc = "Dispenses loaded chemicals directly into the wearer's bloodstream." - - charges = list( - list("dexalin plus", "dexalin plus", /datum/reagent/dexalinp, 80), - list("inaprovaline", "inaprovaline", /datum/reagent/inaprovaline, 80), - list("dylovene", "dylovene", /datum/reagent/dylovene, 80), - list("hyronalin", "hyronalin", /datum/reagent/hyronalin, 80), - list("spaceacillin", "spaceacillin", /datum/reagent/spaceacillin, 80), - list("tramadol", "tramadol", /datum/reagent/tramadol, 80) - ) - - var/max_reagent_volume = 80 //Used when refilling. - -/obj/item/rig_module/chem_dispenser/ninja - interface_desc = "Dispenses loaded chemicals directly into the wearer's bloodstream. This variant is made to be extremely light and flexible." - - //just over a syringe worth of each. Want more? Go refill. Gives the ninja another reason to have to show their face. - charges = list( - list("dexalin plus", "dexalin plus", /datum/reagent/dexalinp, 20), - list("inaprovaline", "inaprovaline", /datum/reagent/inaprovaline, 20), - list("dylovene", "dylovene", /datum/reagent/dylovene, 20), - list("glucose", "glucose", /datum/reagent/nutriment/glucose, 80), - list("hyronalin", "hyronalin", /datum/reagent/hyronalin, 20), - list("dermaline", "dermaline", /datum/reagent/dermaline, 20), - list("spaceacillin", "spaceacillin", /datum/reagent/spaceacillin, 20), - list("tramadol", "tramadol", /datum/reagent/tramadol, 20) - ) - -/obj/item/rig_module/chem_dispenser/accepts_item(var/obj/item/input_item, var/mob/living/user) - - if(!input_item.is_open_container()) - return 0 - - if(!input_item.reagents || !input_item.reagents.total_volume) - to_chat(user, "\The [input_item] is empty.") - return 0 - - // Magical chemical filtration system, do not question it. - var/total_transferred = 0 - for(var/datum/reagent/R in input_item.reagents.reagent_list) - for(var/chargetype in charges) - var/datum/rig_charge/charge = charges[chargetype] - if(charge.product_type == R.type) - - var/chems_to_transfer = R.volume - - if((charge.charges + chems_to_transfer) > max_reagent_volume) - chems_to_transfer = max_reagent_volume - charge.charges - - charge.charges += chems_to_transfer - input_item.reagents.remove_reagent(R.type, chems_to_transfer) - total_transferred += chems_to_transfer - - break - - if(total_transferred) - to_chat(user, "You transfer [total_transferred] units into the suit reservoir.") - else - to_chat(user, "None of the reagents seem suitable.") - return 1 - -/obj/item/rig_module/chem_dispenser/engage(atom/target) - - if(!..()) - return 0 - - var/mob/living/carbon/human/H = holder.wearer - - if(!charge_selected) - to_chat(H, "You have not selected a chemical type.") - return 0 - - var/datum/rig_charge/charge = charges[charge_selected] - - if(!charge) - return 0 - - var/chems_to_use = 10 - if(charge.charges <= 0) - to_chat(H, "Insufficient chems!") - return 0 - else if(charge.charges < chems_to_use) - chems_to_use = charge.charges - - var/mob/living/carbon/target_mob - if(target) - if(istype(target,/mob/living/carbon)) - target_mob = target - else - return 0 - else - target_mob = H - - if(target_mob != H) - to_chat(H, "You inject [target_mob] with [chems_to_use] unit\s of [charge.display_name].") - to_chat(target_mob, "You feel a rushing in your veins as [chems_to_use] unit\s of [charge.display_name] [chems_to_use == 1 ? "is" : "are"] injected.") - target_mob.reagents.add_reagent(charge.product_type, chems_to_use) - - charge.charges -= chems_to_use - if(charge.charges < 0) charge.charges = 0 - - return 1 - -/obj/item/rig_module/chem_dispenser/combat - - name = "combat chemical injector" - desc = "A complex web of tubing and needles suitable for hardsuit use." - - charges = list( - list("synaptizine", "synaptizine", /datum/reagent/synaptizine, 30), - list("hyperzine", "hyperzine", /datum/reagent/hyperzine, 30), - list("oxycodone", "oxycodone", /datum/reagent/tramadol/oxycodone, 30), - list("glucose", "glucose", /datum/reagent/nutriment/glucose, 80), - ) - - interface_name = "combat chem dispenser" - interface_desc = "Dispenses loaded chemicals directly into the bloodstream." - - -/obj/item/rig_module/chem_dispenser/injector - - name = "mounted chemical injector" - desc = "A complex web of tubing and a large needle suitable for hardsuit use." - usable = 0 - selectable = 1 - disruptive = 1 - - suit_overlay_active = "mounted-injector" - - interface_name = "mounted chem injector" - interface_desc = "Dispenses loaded chemicals via an arm-mounted injector." - -/obj/item/rig_module/voice - - name = "hardsuit voice synthesiser" - desc = "A speaker box and sound processor." - icon_state = "megaphone" - usable = 1 - selectable = 0 - toggleable = 0 - disruptive = 0 - active_power_cost = 100 - - engage_string = "Configure Synthesiser" - - interface_name = "voice synthesiser" - interface_desc = "A flexible and powerful voice modulator system." - - var/obj/item/voice_changer/voice_holder - -/obj/item/rig_module/voice/Initialize() - . = ..() - voice_holder = new(src) - voice_holder.active = 0 - -/obj/item/rig_module/voice/installed() - ..() - holder.speech = src - holder.verbs |= /obj/item/rig/proc/alter_voice - -/obj/item/rig_module/voice/removed() - ..() - holder.speech = null - holder.verbs -= /obj/item/rig/proc/alter_voice - -/obj/item/rig_module/voice/engage() - - if(!..()) - return 0 - - var/choice= input("Would you like to toggle the synthesiser or set the name?") as null|anything in list("Enable","Disable","Set Name") - - if(!choice) - return 0 - - switch(choice) - if("Enable") - active = 1 - voice_holder.active = 1 - to_chat(usr, "You enable the speech synthesiser.") - if("Disable") - active = 0 - voice_holder.active = 0 - to_chat(usr, "You disable the speech synthesiser.") - if("Set Name") - var/raw_choice = sanitize(input(usr, "Please enter a new name.") as text|null, MAX_NAME_LEN) - if(!raw_choice) - return 0 - voice_holder.voice = raw_choice - to_chat(usr, "You are now mimicking [voice_holder.voice].") - return 1 - -/obj/item/rig_module/maneuvering_jets - - name = "hardsuit maneuvering jets" - desc = "A compact gas thruster system for a hardsuit." - icon_state = "thrusters" - usable = 1 - toggleable = 1 - selectable = 0 - disruptive = 0 - active_power_cost = 200 - - suit_overlay_active = "maneuvering_active" - suit_overlay_inactive = null //"maneuvering_inactive" - - engage_string = "Toggle Stabilizers" - activate_string = "Activate Thrusters" - deactivate_string = "Deactivate Thrusters" - - interface_name = "maneuvering jets" - interface_desc = "An inbuilt EVA maneuvering system that runs off the rig air supply." - origin_tech = list(TECH_MATERIAL = 6, TECH_ENGINEERING = 7) - var/obj/item/tank/jetpack/rig/jets - -/obj/item/rig_module/maneuvering_jets/engage() - if(!..()) - return 0 - jets.toggle_rockets() - return 1 - -/obj/item/rig_module/maneuvering_jets/activate() - - if(active) - return 0 - - active = 1 - - spawn(1) - if(suit_overlay_active) - suit_overlay = suit_overlay_active - else - suit_overlay = null - holder.update_icon() - - if(!jets.on) - jets.toggle() - return 1 - -/obj/item/rig_module/maneuvering_jets/deactivate() - if(!..()) - return 0 - if(jets.on) - jets.toggle() - return 1 - -/obj/item/rig_module/maneuvering_jets/Initialize() - . = ..() - jets = new(src) - -/obj/item/rig_module/maneuvering_jets/installed() - ..() - jets.holder = holder - jets.ion_trail.set_up(holder) - -/obj/item/rig_module/maneuvering_jets/removed() - ..() - jets.holder = null - jets.ion_trail.set_up(jets) - -/obj/item/rig_module/device/paperdispenser - name = "hardsuit paper dispenser" - desc = "Crisp sheets." - icon_state = "paper" - interface_name = "paper dispenser" - interface_desc = "Dispenses warm, clean, and crisp sheets of paper." - engage_string = "Dispense" - use_power_cost = 200 - usable = 1 - selectable = 0 - device = /obj/item/paper_bin - -/obj/item/rig_module/device/paperdispenser/engage(atom/target) - - if(!..() || !device) - return 0 - - if(!target) - device.attack_hand(holder.wearer) - return 1 - -/obj/item/rig_module/device/pen - name = "mounted pen" - desc = "For exosuit John Hancocks." - icon_state = "pen" - interface_name = "mounted pen" - interface_desc = "Signatures with style(tm)." - engage_string = "Change color" - usable = 1 - device = /obj/item/pen/multi - -/obj/item/rig_module/device/stamp - name = "mounted stamp" - desc = "DENIED." - icon_state = "stamp" - interface_name = "mounted stamp" - interface_desc = "Leave your mark." - engage_string = "Toggle stamp type" - usable = 1 - var/stamp - var/deniedstamp - -/obj/item/rig_module/device/stamp/Initialize() - . = ..() - stamp = new /obj/item/stamp(src) - deniedstamp = new /obj/item/stamp/denied(src) - device = stamp - -/obj/item/rig_module/device/stamp/engage(atom/target) - if(!..() || !device) - return 0 - - if(!target) - if(device == stamp) - device = deniedstamp - to_chat(holder.wearer, "Switched to denied stamp.") - else if(device == deniedstamp) - device = stamp - to_chat(holder.wearer, "Switched to rubber stamp.") - return 1 - -/obj/item/rig_module/device/decompiler - name = "mounted matter decompiler" - desc = "A drone matter decompiler reconfigured for hardsuit use." - icon_state = "ewar" - interface_name = "mounted matter decompiler" - interface_desc = "Eats trash like no one's business." - origin_tech = list(TECH_MATERIAL = 5, TECH_ENGINEERING = 5) - device = /obj/item/matter_decompiler - -/obj/item/rig_module/cooling_unit - name = "mounted cooling unit" - toggleable = 1 - origin_tech = list(TECH_MAGNET = 2, TECH_MATERIAL = 2, TECH_ENGINEERING = 5) - interface_name = "mounted cooling unit" - interface_desc = "A heat sink with a liquid cooled radiator." - module_cooldown = 0 SECONDS //no cd because its critical for a life-support module - var/charge_consumption = 0.5 KILOWATTS - var/max_cooling = 12 - var/thermostat = T20C - -/obj/item/rig_module/cooling_unit/Process() - if(!active) - return passive_power_cost - - var/mob/living/carbon/human/H = holder.wearer - - var/temp_adj = min(H.bodytemperature - thermostat, max_cooling) //Actually copies the original CU code - - if (temp_adj < 0.5) - return passive_power_cost - - H.bodytemperature -= temp_adj - active_power_cost = round((temp_adj/max_cooling)*charge_consumption) - return active_power_cost diff --git a/code/modules/clothing/spacesuits/rig/modules/vision.dm b/code/modules/clothing/spacesuits/rig/modules/vision.dm deleted file mode 100644 index 156dd3ce2403e..0000000000000 --- a/code/modules/clothing/spacesuits/rig/modules/vision.dm +++ /dev/null @@ -1,192 +0,0 @@ -/* - * Contains - * /obj/item/rig_module/vision - * /obj/item/rig_module/vision/multi - * /obj/item/rig_module/vision/meson - * /obj/item/rig_module/vision/thermal - * /obj/item/rig_module/vision/nvg - * /obj/item/rig_module/vision/medhud - * /obj/item/rig_module/vision/sechud - */ - -/datum/rig_vision - var/mode - var/obj/item/clothing/glasses/glasses - -/datum/rig_vision/New() - if(ispath(glasses)) - glasses = new glasses - -/datum/rig_vision/nvg - mode = "night vision" - glasses = /obj/item/clothing/glasses/night - -/datum/rig_vision/thermal - mode = "thermal scanner" - glasses = /obj/item/clothing/glasses/thermal - -/datum/rig_vision/meson - mode = "meson scanner" - glasses = /obj/item/clothing/glasses/meson - -/datum/rig_vision/sechud - mode = "security HUD" - glasses = /obj/item/clothing/glasses/hud/security - -/datum/rig_vision/medhud - mode = "medical HUD" - glasses = /obj/item/clothing/glasses/hud/health - -/obj/item/rig_module/vision - - name = "hardsuit visor" - desc = "A layered, translucent visor system for a hardsuit." - icon_state = "optics" - - interface_name = "optical scanners" - interface_desc = "An integrated multi-mode vision system." - - usable = 1 - toggleable = 1 - disruptive = 0 - module_cooldown = 0 - active_power_cost = 100 - - engage_string = "Cycle Visor Mode" - activate_string = "Enable Visor" - deactivate_string = "Disable Visor" - - var/datum/rig_vision/vision - var/list/vision_modes = list( - /datum/rig_vision/nvg, - /datum/rig_vision/thermal, - /datum/rig_vision/meson - ) - - var/vision_index - -/obj/item/rig_module/vision/multi - - name = "hardsuit optical package" - desc = "A complete visor system of optical scanners and vision modes." - icon_state = "fulloptics" - - - interface_name = "multi optical visor" - interface_desc = "An integrated multi-mode vision system." - - vision_modes = list(/datum/rig_vision/meson, - /datum/rig_vision/nvg, - /datum/rig_vision/thermal, - /datum/rig_vision/sechud, - /datum/rig_vision/medhud) - -/obj/item/rig_module/vision/meson - - name = "hardsuit meson scanner" - desc = "A layered, translucent visor system for a hardsuit." - icon_state = "meson" - origin_tech = list(TECH_MAGNET = 2, TECH_ENGINEERING = 5) - usable = 0 - - interface_name = "meson scanner" - interface_desc = "An integrated meson scanner." - - vision_modes = list(/datum/rig_vision/meson) - -/obj/item/rig_module/vision/thermal - - name = "hardsuit thermal scanner" - desc = "A layered, translucent visor system for a hardsuit." - icon_state = "thermal" - - usable = 0 - - interface_name = "thermal scanner" - interface_desc = "An integrated thermal scanner." - - vision_modes = list(/datum/rig_vision/thermal) - -/obj/item/rig_module/vision/nvg - - name = "hardsuit night vision interface" - desc = "A multi input night vision system for a hardsuit." - icon_state = "night" - origin_tech = list(TECH_MAGNET = 6, TECH_ENGINEERING = 6) - usable = 0 - - interface_name = "night vision interface" - interface_desc = "An integrated night vision system." - - vision_modes = list(/datum/rig_vision/nvg) - -/obj/item/rig_module/vision/sechud - - name = "hardsuit security hud" - desc = "A simple tactical information system for a hardsuit." - icon_state = "securityhud" - origin_tech = list(TECH_MAGNET = 3, TECH_BIO = 2, TECH_ENGINEERING = 5) - usable = 0 - - interface_name = "security HUD" - interface_desc = "An integrated security heads up display." - - vision_modes = list(/datum/rig_vision/sechud) - -/obj/item/rig_module/vision/medhud - - name = "hardsuit medical hud" - desc = "A simple medical status indicator for a hardsuit." - icon_state = "healthhud" - origin_tech = list(TECH_MAGNET = 3, TECH_BIO = 2, TECH_ENGINEERING = 5) - usable = 0 - - interface_name = "medical HUD" - interface_desc = "An integrated medical heads up display." - - vision_modes = list(/datum/rig_vision/medhud) - - -// There should only ever be one vision module installed in a suit. -/obj/item/rig_module/vision/installed() - ..() - holder.visor = src - -/obj/item/rig_module/vision/engage() - - var/starting_up = !active - - if(!..() || !vision_modes) - return 0 - - // Don't cycle if this engage() is being called by activate(). - if(starting_up) - to_chat(holder.wearer, "You activate your visual sensors.") - return 1 - - if(vision_modes.len > 1) - vision_index++ - if(vision_index > vision_modes.len) - vision_index = 1 - vision = vision_modes[vision_index] - - to_chat(holder.wearer, "You cycle your sensors to [vision.mode] mode.") - else - to_chat(holder.wearer, "Your sensors only have one mode.") - return 1 - -/obj/item/rig_module/vision/Initialize() - . = ..() - - if(!vision_modes) - return - - vision_index = 1 - var/list/processed_vision = list() - - for(var/vision_mode in vision_modes) - var/datum/rig_vision/vision_datum = new vision_mode - if(!vision) vision = vision_datum - processed_vision += vision_datum - - vision_modes = processed_vision \ No newline at end of file diff --git a/code/modules/clothing/spacesuits/rig/rig.dm b/code/modules/clothing/spacesuits/rig/rig.dm deleted file mode 100644 index f43833fdb4155..0000000000000 --- a/code/modules/clothing/spacesuits/rig/rig.dm +++ /dev/null @@ -1,1010 +0,0 @@ -#define ONLY_DEPLOY 1 -#define ONLY_RETRACT 2 -#define SEAL_DELAY 30 - -/* - * Defines the behavior of hardsuits/rigs/power armour. - */ - -/obj/item/rig - - name = "hardsuit control module" - icon = 'icons/obj/rig_modules.dmi' - desc = "A back-mounted hardsuit deployment and control mechanism." - slot_flags = SLOT_BACK - w_class = ITEM_SIZE_HUGE - - // These values are passed on to all component pieces. - armor_type = /datum/extension/armor/rig - armor = list( - melee = ARMOR_MELEE_RESISTANT, - bullet = ARMOR_BALLISTIC_MINOR, - laser = ARMOR_LASER_SMALL, - energy = ARMOR_ENERGY_MINOR, - bomb = ARMOR_BOMB_PADDED, - bio = ARMOR_BIO_SHIELDED, - rad = ARMOR_RAD_MINOR - ) - min_cold_protection_temperature = SPACE_SUIT_MIN_COLD_PROTECTION_TEMPERATURE - max_heat_protection_temperature = SPACE_SUIT_MAX_HEAT_PROTECTION_TEMPERATURE - max_pressure_protection = RIG_MAX_PRESSURE - min_pressure_protection = 0 - - siemens_coefficient = 0.2 - permeability_coefficient = 0.1 - unacidable = TRUE - - var/equipment_overlay_icon = 'icons/mob/onmob/onmob_rig_modules.dmi' - var/hides_uniform = 1 //used to determinate if uniform should be visible whenever the suit is sealed or not - - var/interface_path = "hardsuit.tmpl" - var/ai_interface_path = "hardsuit.tmpl" - var/interface_title = "Hardsuit Controller" - var/wearer_move_delay //Used for AI moving. - var/ai_controlled_move_delay = 10 - - // Keeps track of what this rig should spawn with. - var/suit_type = "hardsuit" - var/list/initial_modules - var/chest_type = /obj/item/clothing/suit/space/rig - var/helm_type = /obj/item/clothing/head/helmet/space/rig - var/boot_type = /obj/item/clothing/shoes/magboots/rig - var/glove_type = /obj/item/clothing/gloves/rig - var/cell_type = /obj/item/cell/high - var/air_type = /obj/item/tank/oxygen - - //Component/device holders. - var/obj/item/tank/air_supply // Air tank, if any. - var/obj/item/clothing/shoes/boots = null // Deployable boots, if any. - var/obj/item/clothing/suit/space/rig/chest // Deployable chestpiece, if any. - var/obj/item/clothing/head/helmet/space/rig/helmet = null // Deployable helmet, if any. - var/obj/item/clothing/gloves/rig/gloves = null // Deployable gauntlets, if any. - var/obj/item/cell/cell // Power supply, if any. - var/obj/item/rig_module/selected_module = null // Primary system (used with middle-click) - var/obj/item/rig_module/vision/visor // Kinda shitty to have a var for a module, but saves time. - var/obj/item/rig_module/voice/speech // As above. - var/mob/living/carbon/human/wearer // The person currently wearing the rig. - var/image/mob_icon // Holder for on-mob icon. - var/list/installed_modules = list() // Power consumption/use bookkeeping. - - // Rig status vars. - var/open = 0 // Access panel status. - var/p_open = 0 // Wire panel status - var/locked = 1 // Lock status. - var/subverted = 0 - var/interface_locked = 0 - var/control_overridden = 0 - var/ai_override_enabled = 0 - var/security_check_enabled = 1 - var/malfunctioning = 0 - var/malfunction_delay = 0 - var/electrified = 0 - var/locked_down = 0 - var/aimove_power_usage = 200 // Power usage per tile traveled when suit is moved by AI in IIS. In joules. - - var/seal_delay = SEAL_DELAY - var/sealing // Keeps track of seal status independantly of canremove. - var/offline = 1 // Should we be applying suit maluses? - var/online_slowdown = 1 // If the suit is deployed and powered, it sets slowdown to this. - var/offline_slowdown = 3 // If the suit is deployed and unpowered, it sets slowdown to this. - var/vision_restriction = TINT_NONE - var/offline_vision_restriction = TINT_HEAVY // tint value given to helmet - var/airtight = 1 //If set, will adjust ITEM_FLAG_AIRTIGHT flags on components. Otherwise it should leave them untouched. - var/visible_name - var/update_visible_name = FALSE - - var/emp_protection = 0 - - // Wiring! How exciting. - var/datum/wires/rig/wires - var/datum/effect/effect/system/spark_spread/spark_system - - var/banned_modules = list() - -/obj/item/rig/get_mechanics_info() - . = ..() - . += {" -

              A Hardsuit Control Module, or HCM, is a large device that goes into your backpack slot and can be deployed into a full powered hardsuit.

              -

              HCM oxygen tanks must be refilled like a normal void suit's tank.

              -

              HCM power cells must be recharged.

              -

              HCMs and their components are susceptible to damage from EMPs.

              -

              HCMs rely on an internal power cell to function, and will de-activate themselves if the power cell fully drains. Using modules increases the speed at which the HCM's cell drains.

              - -

              ACTIVATION

              -

              To deploy and activate an HCM, follow these steps:

              -
                -
              1. Put the HCM onto your backpack slot. This is a timed action that will require you to remain still while you put it on.
              2. -
              3. Ensure you are not wearing anything on your head, suit, or glove slots, and ensure you are not wearing any magboots. These items will block the HCM from fully deploying.
              4. -
              5. Use the toggle-hardsuit verb in the chat bar, the Toggle Hardsuit option under the Hardsuit tab in the upper right, or the Toggle button next to the Suit status in the Hardsuit Interface. This is a timed action that will require you to remain still until all components of the suit are deployed and sealed.
              6. -
              7. Monitor your chat log - You'll know it's done when you see bold blue text stating the suit tightens around you.
              8. -
              - -

              DE-ACTIVATION

              -

              You can de-activate the HCM so you can take it off by following these steps:

              -
                -
              1. Use the toggle-hardsuit verb in the chat bar, the Toggle Hardsuit option under the Hardsuit tab in the upper right, or the Toggle button next to the Suit status in the Hardsuit Interface. This is a timed action that will require you to remain still until all components of the suit are retracted and unsealed.
              2. -
              3. Monitor your chat log - You'll know it's done when you see bold blue text stating the suit loosens around you.
              4. -
              5. Click on the HCM with an empty hand to remove it from your back.
              6. -
              - -

              TOOL INTERACTIONS

              -
                -
              • You can toggle the HCM's access panel lock by using an ID card with the required access on it.
              • -
              • You can open or close the HCM's maintenance panel by using a crowbar on it. The panel can only be opened if the HCM's access panel is unlocked.
              • -
              • You can remove modules or the oxygen tank by using a wrench on the HCM. You can only do this if the maintenance panel is open.
              • -
              • You can insert modules, power cells, oxygen tanks by using them on the HCM while its maintenance panel is open.
              • -
              • You can repair the HCM's internals by using nanopaste on it while the maintenance panel is open.
              • -
              • You can open or close the HCM's wire panel by using a screwdriver on it. This operates as a standard wire control panel, interactable with a multitool, wirecutters, signallers, etc. once open.
              • -
              • You can repair damage to the HCM's chest piece by using a stack of the relevant material or a welder on the HCM or the chest piece while the chest piece is deployed.
              • -
              - -

              HARDSUIT INTERFACE

              -

              The HCM's Hardsuit Interface can be accessed by using the Open Hardsuit Interface option under the Hardsuit tab in the top right, or using the open-hardsuit-interface`verb in the chat bar.

              -
                -
              • Power Supply tells you how much charge is remaining in the HCM's power cell.
              • -
              • AI Control displays and allows you to toggle an inserted pAI or AI intellicard's ability to control movement (CURRENTLY BROKEN, DO NOT USE).
              • -
              • Cover Status displays and allows you to toggle the HCM's access panel lock.
              • -
              • Suit Pieces displays the name and status of the major components of the hardsuit, and allows you to toggle the helmet on or off.
              • -
              • Additional HCM modules and their controls are displayed in the HCM's interface as well.
              • -
              - "} - -/obj/item/rig/get_cell() - return cell - -/obj/item/rig/examine(mob/user) - . = ..() - if(wearer) - for(var/obj/item/piece in list(helmet,gloves,chest,boots)) - if(!piece || piece.loc != wearer) - continue - to_chat(user, "[icon2html(piece, user)] \The [piece] [piece.gender == PLURAL ? "are" : "is"] deployed.") - - if(src.loc == user) - to_chat(user, "The access panel is [locked? "locked" : "unlocked"].") - to_chat(user, "The maintenance panel is [open ? "open" : "closed"].") - to_chat(user, "The wire panel is [p_open ? "open" : "closed"].") - to_chat(user, "Hardsuit systems are [offline ? "offline" : "online"].") - - if(open) - to_chat(user, "It's equipped with [english_list(installed_modules)].") - -/obj/item/rig/Initialize() - . = ..() - - item_state = icon_state - wires = new(src) - - if(!length(req_access)) - locked = 0 - - spark_system = new() - spark_system.set_up(5, 0, src) - spark_system.attach(src) - - START_PROCESSING(SSobj, src) - - if(initial_modules && initial_modules.len) - for(var/path in initial_modules) - var/obj/item/rig_module/module = new path(src) - installed_modules += module - module.installed(src) - - // Create and initialize our various segments. - if(cell_type) - cell = new cell_type(src) - if(air_type) - air_supply = new air_type(src) - if(glove_type) - gloves = new glove_type(src) - if(helm_type) - helmet = new helm_type(src) - verbs |= /obj/item/rig/proc/toggle_helmet - if(boot_type) - boots = new boot_type(src) - if(chest_type) - chest = new chest_type(src) - if(allowed) - chest.allowed = allowed - - for(var/obj/item/piece in list(gloves,helmet,boots,chest)) - if(!istype(piece)) - continue - piece.canremove = 0 - piece.SetName("[suit_type] [initial(piece.name)]") - piece.desc = "It seems to be part of a [src.name]." - piece.icon_state = "[initial(icon_state)]" - piece.min_cold_protection_temperature = min_cold_protection_temperature - piece.max_heat_protection_temperature = max_heat_protection_temperature - if(piece.siemens_coefficient > siemens_coefficient) //So that insulated gloves keep their insulation. - piece.siemens_coefficient = siemens_coefficient - piece.permeability_coefficient = permeability_coefficient - piece.unacidable = unacidable - if(islist(armor)) - piece.armor = armor.Copy() // codex reads the armor list, not extensions. this list does not have any effect on in game mechanics - remove_extension(piece, /datum/extension/armor) - set_extension(piece, armor_type, armor, armor_degradation_speed) - - set_slowdown_and_vision(!offline) - update_icon(1) - -/obj/item/rig/Destroy() - for(var/obj/item/piece in list(gloves,boots,helmet,chest)) - qdel(piece) - STOP_PROCESSING(SSobj, src) - qdel(wires) - wires = null - qdel(spark_system) - spark_system = null - return ..() - -/obj/item/rig/get_mob_overlay(mob/user_mob, slot) - var/image/ret = ..() - if(icon_override) - ret.icon = icon_override - else if(slot == slot_back_str) - ret.icon = mob_icon - return ret - -/obj/item/rig/proc/set_slowdown_and_vision(var/active) - if(chest) - chest.slowdown_per_slot[slot_wear_suit] = (active? online_slowdown : offline_slowdown) - if(helmet) - helmet.tint = (active? vision_restriction : offline_vision_restriction) - helmet.update_vision() - -/obj/item/rig/proc/suit_is_deployed() - if(!istype(wearer) || src.loc != wearer || wearer.back != src) - return 0 - if(helm_type && !(helmet && wearer.head == helmet)) - return 0 - if(glove_type && !(gloves && wearer.gloves == gloves)) - return 0 - if(boot_type && !(boots && wearer.shoes == boots)) - return 0 - if(chest_type && !(chest && wearer.wear_suit == chest)) - return 0 - return 1 - -/obj/item/rig/proc/reset() - canremove = 1 - if(istype(chest)) - chest.check_limb_support(wearer) - for(var/obj/item/piece in list(helmet,boots,gloves,chest)) - if(!piece) continue - piece.icon_state = "[initial(icon_state)]" - if(airtight) - piece.max_pressure_protection = initial(piece.max_pressure_protection) - piece.min_pressure_protection = initial(piece.min_pressure_protection) - piece.item_flags &= ~ITEM_FLAG_AIRTIGHT - update_icon(1) - -/obj/item/rig/proc/toggle_seals(var/mob/initiator,var/instant) - - if(sealing) return - - // Seal toggling can be initiated by the suit AI, too - if(!wearer) - to_chat(initiator, "Cannot toggle suit: The suit is currently not being worn by anyone.") - return 0 - - if(!check_power_cost(wearer, 1)) - return 0 - - deploy(wearer,instant) - - var/seal_target = !canremove - var/failed_to_seal - - canremove = 0 // No removing the suit while unsealing. - sealing = 1 - - if(!seal_target && !suit_is_deployed()) - wearer.visible_message(\ - "[wearer]'s suit flashes an error light.", \ - "Your suit flashes an error light. It can't function properly without being fully deployed.") - - failed_to_seal = 1 - - if(!failed_to_seal) - - if(!instant) - wearer.visible_message(\ - "[wearer]'s suit emits a quiet hum as it begins to adjust its seals.", \ - "With a quiet hum, the suit begins running checks and adjusting components.") - - if(seal_delay && !do_after(wearer,seal_delay, src)) - failed_to_seal = 1 - - if(!wearer) - failed_to_seal = 1 - else - for(var/list/piece_data in list(list(wearer.shoes,boots,"boots",boot_type),list(wearer.gloves,gloves,"gloves",glove_type),list(wearer.head,helmet,"helmet",helm_type),list(wearer.wear_suit,chest,"chest",chest_type))) - - var/obj/item/piece = piece_data[1] - var/obj/item/compare_piece = piece_data[2] - var/msg_type = piece_data[3] - var/piece_type = piece_data[4] - - if(!piece || !piece_type) - continue - - if(!istype(wearer) || !istype(piece) || !istype(compare_piece) || !msg_type) - if(wearer) to_chat(wearer, "You must remain still while the suit is adjusting the components.") - failed_to_seal = 1 - break - - if(!failed_to_seal && wearer.back == src && piece == compare_piece) - - if(seal_delay && !instant && !do_after(wearer, seal_delay, src, do_flags = DO_DEFAULT & ~DO_USER_SAME_HAND)) - failed_to_seal = 1 - - piece.icon_state = "[initial(icon_state)][!seal_target ? "_sealed" : ""]" - switch(msg_type) - if("boots") - to_chat(wearer, "\The [piece] [!seal_target ? "seal around your feet" : "relax their grip on your legs"].") - wearer.update_inv_shoes() - if("gloves") - to_chat(wearer, "\The [piece] [!seal_target ? "tighten around your fingers and wrists" : "become loose around your fingers"].") - wearer.update_inv_gloves() - if("chest") - to_chat(wearer, "\The [piece] [!seal_target ? "cinches tight again your chest" : "releases your chest"].") - wearer.update_inv_wear_suit() - if("helmet") - to_chat(wearer, "\The [piece] hisses [!seal_target ? "closed" : "open"].") - wearer.update_inv_head() - if(helmet) - helmet.update_light(wearer) - - //sealed pieces become airtight, protecting against diseases - var/datum/extension/armor/rig/armor_datum = get_extension(piece, /datum/extension/armor) - if(istype(armor_datum)) - armor_datum.sealed = !seal_target - playsound(src, 'sound/machines/suitstorage_lockdoor.ogg', 10, 0) - - else - failed_to_seal = 1 - - if((wearer && !(istype(wearer) && wearer.back == src)) || (!seal_target && !suit_is_deployed())) - failed_to_seal = 1 - - sealing = null - - if(failed_to_seal) - for(var/obj/item/piece in list(helmet,boots,gloves,chest)) - if(!piece) continue - piece.icon_state = "[initial(icon_state)][!seal_target ? "" : "_sealed"]" - canremove = !seal_target - if(airtight) - update_component_sealed() - update_icon(1) - return 0 - - // Success! - canremove = seal_target - to_chat(wearer, "Your entire suit [canremove ? "loosens as the components relax" : "tightens around you as the components lock into place"].") - if(!canremove && update_visible_name) - visible_name = wearer.real_name - - if(wearer != initiator) - to_chat(initiator, "Suit adjustment complete. Suit is now [canremove ? "unsealed" : "sealed"].") - - if(canremove) - for(var/obj/item/rig_module/module in installed_modules) - module.deactivate() - if(airtight) - update_component_sealed() - update_icon(1) - - -/obj/item/rig/proc/update_component_sealed() - for(var/obj/item/piece in list(helmet,boots,gloves,chest)) - if(canremove) - piece.max_pressure_protection = initial(piece.max_pressure_protection) - piece.min_pressure_protection = initial(piece.min_pressure_protection) - piece.item_flags &= ~ITEM_FLAG_AIRTIGHT - else - piece.max_pressure_protection = max_pressure_protection - piece.min_pressure_protection = min_pressure_protection - piece.item_flags |= ITEM_FLAG_AIRTIGHT - if (hides_uniform && chest) - if(canremove) - chest.flags_inv &= ~(HIDEJUMPSUIT) - else - chest.flags_inv |= HIDEJUMPSUIT - if (helmet) - if (canremove) - helmet.flags_inv &= ~(HIDEMASK) - else - helmet.flags_inv |= HIDEMASK - update_icon(1) - -/obj/item/rig/Process() - - // If we've lost any parts, grab them back. - var/mob/living/M - for(var/obj/item/piece in list(gloves,boots,helmet,chest)) - if(piece.loc != src && !(wearer && piece.loc == wearer)) - if(istype(piece.loc, /mob/living)) - M = piece.loc - M.drop_from_inventory(piece) - piece.forceMove(src) - - var/changed = update_offline() - if(changed) - if(offline) - //notify the wearer - if(!canremove) - if (offline_slowdown < 3) - to_chat(wearer, "Your suit beeps stridently, and suddenly goes dead.") - else - to_chat(wearer, "Your suit beeps stridently, and suddenly you're wearing a leaden mass of metal and plastic composites instead of a powered suit.") - if(offline_vision_restriction >= TINT_MODERATE) - to_chat(wearer, "The suit optics flicker and die, leaving you with restricted vision.") - else if(offline_vision_restriction >= TINT_BLIND) - to_chat(wearer, "The suit optics drop out completely, drowning you in darkness.") - - if(electrified > 0) - electrified = 0 - for(var/obj/item/rig_module/module in installed_modules) - module.deactivate() - else - if(istype(wearer) && !wearer.wearing_rig) - wearer.wearing_rig = src - - set_slowdown_and_vision(!offline) - if(istype(chest)) - chest.check_limb_support(wearer) - - if(!offline) - if(cell && cell.charge > 0 && electrified > 0) - electrified-- - - if(malfunction_delay > 0) - malfunction_delay-- - else if(malfunctioning) - malfunctioning-- - malfunction() - - for(var/obj/item/rig_module/module in installed_modules) - if(!cell.checked_use(module.Process() * CELLRATE)) - module.deactivate()//turns off modules when your cell is dry - -//offline should not change outside this proc -/obj/item/rig/proc/update_offline() - var/go_offline = (!istype(wearer) || loc != wearer || wearer.back != src || canremove || sealing || !cell || cell.charge <= 0) - if(offline != go_offline) - offline = go_offline - return 1 - return 0 - -/obj/item/rig/proc/check_power_cost(var/mob/living/user, var/cost, var/use_unconcious, var/obj/item/rig_module/mod, var/user_is_ai) - - if(!istype(user)) - return 0 - - var/fail_msg - - if(!user_is_ai) - var/mob/living/carbon/human/H = user - if(istype(H) && H.back != src) - fail_msg = "You must be wearing \the [src] to do this." - if(sealing) - fail_msg = "The hardsuit is in the process of adjusting seals and cannot be activated." - else if(!fail_msg && ((use_unconcious && user.stat > 1) || (!use_unconcious && user.stat))) - fail_msg = "You are in no fit state to do that." - else if(!cell) - fail_msg = "There is no cell installed in the suit." - else if(cost && !cell.check_charge(cost * CELLRATE)) - fail_msg = "Not enough stored power." - - if(fail_msg) - to_chat(user, "[fail_msg]") - return 0 - - // This is largely for cancelling stealth and whatever. - if(mod && mod.disruptive) - for(var/obj/item/rig_module/module in (installed_modules - mod)) - if(module.active && module.disruptable) - module.deactivate() - - cell.use(cost * CELLRATE) - return 1 - -/obj/item/rig/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1, var/nano_state = GLOB.inventory_state) - if(!user) - return - - var/list/data = list() - - if(selected_module) - data["primarysystem"] = "[selected_module.interface_name]" - - if(src.loc != user) - data["ai"] = 1 - - data["seals"] = "[src.canremove]" - data["sealing"] = "[src.sealing]" - data["helmet"] = (helmet ? "[helmet.name]" : "None.") - data["gauntlets"] = (gloves ? "[gloves.name]" : "None.") - data["boots"] = (boots ? "[boots.name]" : "None.") - data["chest"] = (chest ? "[chest.name]" : "None.") - - data["charge"] = cell ? round(cell.charge,1) : 0 - data["maxcharge"] = cell ? cell.maxcharge : 0 - data["chargestatus"] = cell ? Floor(cell.percent()/2) : 0 - - data["emagged"] = subverted - data["coverlock"] = locked - data["interfacelock"] = interface_locked - data["aicontrol"] = control_overridden - data["aioverride"] = ai_override_enabled - data["securitycheck"] = security_check_enabled - data["malf"] = malfunction_delay - - if(wearer) //Internals below!!! - data["valveOpen"] = (wearer.internal == air_supply) - - if(!wearer.internal || wearer.internal == air_supply) // if they have no active internals or if tank is current internal - if(wearer.wear_mask && (wearer.wear_mask.item_flags & ITEM_FLAG_AIRTIGHT))// mask - data["maskConnected"] = 1 - else if(wearer.head && (wearer.head.item_flags & ITEM_FLAG_AIRTIGHT)) // Make sure they have a helmet and its airtight - data["maskConnected"] = 1 - else - data["maskConnected"] = 0 - - data["tankPressure"] = round(air_supply && air_supply.air_contents && air_supply.air_contents.return_pressure() ? air_supply.air_contents.return_pressure() : 0) - data["releasePressure"] = round(air_supply && air_supply.distribute_pressure ? air_supply.distribute_pressure : 0) - data["defaultReleasePressure"] = air_supply ? round(initial(air_supply.distribute_pressure)) : 0 - data["maxReleasePressure"] = air_supply ? round(TANK_MAX_RELEASE_PRESSURE) : 0 - data["tank"] = air_supply ? 1 : 0 - - var/list/module_list = list() - var/i = 1 - for(var/obj/item/rig_module/module in installed_modules) - var/list/module_data = list( - "index" = i, - "name" = "[module.interface_name]", - "desc" = "[module.interface_desc]", - "can_use" = "[module.usable]", - "can_select" = "[module.selectable]", - "can_toggle" = "[module.toggleable]", - "is_active" = "[module.active]", - "engagecost" = module.use_power_cost*10, - "activecost" = module.active_power_cost*10, - "passivecost" = module.passive_power_cost*10, - "engagestring" = module.engage_string, - "activatestring" = module.activate_string, - "deactivatestring" = module.deactivate_string, - "damage" = module.damage - ) - - if(module.charges && module.charges.len) - - module_data["charges"] = list() - module_data["chargetype"] = module.charge_selected - - for(var/chargetype in module.charges) - var/datum/rig_charge/charge = module.charges[chargetype] - module_data["charges"] += list(list("caption" = "[chargetype] ([charge.charges])", "index" = "[chargetype]")) - - module_list += list(module_data) - i++ - - if(module_list.len) - data["modules"] = module_list - - ui = SSnano.try_update_ui(user, src, ui_key, ui, data, force_open) - if (!ui) - ui = new(user, src, ui_key, ((src.loc != user) ? ai_interface_path : interface_path), interface_title, 480, 550, state = nano_state) - ui.set_initial_data(data) - ui.open() - ui.set_auto_update(1) - -/obj/item/rig/on_update_icon(var/update_mob_icon) - - //TODO: Maybe consider a cache for this (use mob_icon as blank canvas, use suit icon overlay). - overlays.Cut() - if(!mob_icon || update_mob_icon) - var/species_icon = 'icons/mob/onmob/onmob_rig_back.dmi' - // Since setting mob_icon will override the species checks in - // update_inv_wear_suit(), handle species checks here. - if(wearer && sprite_sheets && sprite_sheets[wearer.species.get_bodytype(wearer)]) - species_icon = sprite_sheets[wearer.species.get_bodytype(wearer)] - mob_icon = image("icon" = species_icon, "icon_state" = "[icon_state]") - - if(equipment_overlay_icon && LAZYLEN(installed_modules)) - for(var/obj/item/rig_module/module in installed_modules) - if(module.suit_overlay) - chest.overlays += image("icon" = equipment_overlay_icon, "icon_state" = "[module.suit_overlay]", "dir" = SOUTH) - - if(wearer) - wearer.update_inv_shoes() - wearer.update_inv_gloves() - wearer.update_inv_head() - wearer.update_inv_wear_mask() - wearer.update_inv_wear_suit() - wearer.update_inv_w_uniform() - wearer.update_inv_back() - return - -/obj/item/rig/get_mob_overlay(mob/user_mob, slot) - var/image/ret = ..() - if(slot != slot_back_str || offline) - return ret - - if(equipment_overlay_icon && LAZYLEN(installed_modules)) - for(var/obj/item/rig_module/module in installed_modules) - if(module.suit_overlay) - ret.overlays += image("icon" = equipment_overlay_icon, "icon_state" = "[module.suit_overlay]") - return ret - -/obj/item/rig/get_req_access() - if(!security_check_enabled || !locked) - return list() - return ..() - -/obj/item/rig/proc/check_suit_access(var/mob/living/carbon/human/user) - - if(!security_check_enabled) - return 1 - - if(istype(user)) - if(!canremove) - return 1 - if(malfunction_check(user)) - return 0 - if(user.back != src) - return 0 - else if(!src.allowed(user)) - to_chat(user, "Unauthorized user. Access denied.") - return 0 - - else if(!ai_override_enabled) - to_chat(user, "Synthetic access disabled. Please consult hardware provider.") - return 0 - - return 1 - -//TODO: Fix Topic vulnerabilities for malfunction and AI override. -/obj/item/rig/Topic(href,href_list) - if(!check_suit_access(usr)) - return 0 - - if(href_list["toggle_piece"]) - toggle_piece(href_list["toggle_piece"], usr) - return 1 - if(href_list["toggle_seals"]) - toggle_seals(usr) - return 1 - if(href_list["interact_module"]) - - var/module_index = text2num(href_list["interact_module"]) - - if(module_index > 0 && module_index <= installed_modules.len) - var/obj/item/rig_module/module = installed_modules[module_index] - switch(href_list["module_mode"]) - if("activate") - module.activate() - if("deactivate") - module.deactivate() - if("engage") - module.engage() - if("select") - if(selected_module == module) - deselect_module() - else - module.select() - if("select_charge_type") - module.charge_selected = href_list["charge_type"] - return 1 - if(href_list["toggle_ai_control"]) - ai_override_enabled = !ai_override_enabled - notify_ai("Synthetic suit control has been [ai_override_enabled ? "enabled" : "disabled"].") - return 1 - if(href_list["toggle_suit_lock"]) - locked = !locked - return 1 - if(href_list["air_supply"]) - air_supply.OnTopic(wearer,href_list) - return 1 - -/obj/item/rig/proc/notify_ai(var/message) - for(var/obj/item/rig_module/ai_container/module in installed_modules) - if(module.integrated_ai && module.integrated_ai.client && !module.integrated_ai.stat) - to_chat(module.integrated_ai, "[message]") - . = 1 - -/obj/item/rig/equipped(mob/living/carbon/human/M) - ..() - - if(seal_delay > 0 && istype(M) && M.back == src) - M.visible_message(\ - "[M] starts putting on \the [src]...", \ - "You start putting on \the [src]...") - - if(!do_after(M, seal_delay, src, DO_PUBLIC_UNIQUE)) - if(M && M.back == src) - if(!M.unEquip(src)) - return - src.dropInto(loc) - return - - if(istype(M) && M.back == src) - M.visible_message(\ - "[M] struggles into \the [src].", \ - "You struggle into \the [src].") - - wearer = M - wearer.wearing_rig = src - update_icon() - -/obj/item/rig/proc/toggle_piece(var/piece, var/mob/initiator, var/deploy_mode) - - if(sealing || !cell || !cell.charge) - return - - if(!istype(wearer) || !wearer.back == src) - return - - if(initiator == wearer && wearer.incapacitated(INCAPACITATION_DISABLED)) // If the initiator isn't wearing the suit it's probably an AI. - return - - var/obj/item/check_slot - var/equip_to - var/obj/item/use_obj - - if(!wearer) - return - - switch(piece) - if("helmet") - equip_to = slot_head - use_obj = helmet - check_slot = wearer.head - if("gauntlets") - equip_to = slot_gloves - use_obj = gloves - check_slot = wearer.gloves - if("boots") - equip_to = slot_shoes - use_obj = boots - check_slot = wearer.shoes - if("chest") - equip_to = slot_wear_suit - use_obj = chest - check_slot = wearer.wear_suit - - if(use_obj) - if(check_slot == use_obj && deploy_mode != ONLY_DEPLOY) - - var/mob/living/carbon/human/holder - - if(use_obj) - holder = use_obj.loc - if(istype(holder)) - if(use_obj && check_slot == use_obj) - to_chat(wearer, "Your [use_obj.name] [use_obj.gender == PLURAL ? "retract" : "retracts"] swiftly.") - use_obj.canremove = 1 - holder.drop_from_inventory(use_obj, src) - use_obj.canremove = 0 - - else if (deploy_mode != ONLY_RETRACT) - if(check_slot && check_slot == use_obj) - return - use_obj.forceMove(wearer) - if(!wearer.equip_to_slot_if_possible(use_obj, equip_to, TRYEQUIP_REDRAW | TRYEQUIP_SILENT)) - use_obj.forceMove(src) - if(check_slot) - to_chat(initiator, "You are unable to deploy \the [piece] as \the [check_slot] [check_slot.gender == PLURAL ? "are" : "is"] in the way.") - return - else - to_chat(wearer, "Your [use_obj.name] [use_obj.gender == PLURAL ? "deploy" : "deploys"] swiftly.") - - if(piece == "helmet" && helmet) - helmet.update_light(wearer) - -/obj/item/rig/proc/deploy(mob/M,var/sealed) - - var/mob/living/carbon/human/H = M - - if(!H || !istype(H)) return - - if(H.back != src) - return - - if(sealed) - if(H.head) - var/obj/item/garbage = H.head - H.head = null - qdel(garbage) - - if(H.gloves) - var/obj/item/garbage = H.gloves - H.gloves = null - qdel(garbage) - - if(H.shoes) - var/obj/item/garbage = H.shoes - H.shoes = null - qdel(garbage) - - if(H.wear_suit) - var/obj/item/garbage = H.wear_suit - H.wear_suit = null - qdel(garbage) - - for(var/piece in list("helmet","gauntlets","chest","boots")) - toggle_piece(piece, H, ONLY_DEPLOY) - -/obj/item/rig/dropped(var/mob/user) - ..() - for(var/piece in list("helmet","gauntlets","chest","boots")) - toggle_piece(piece, user, ONLY_RETRACT) - if(wearer) - wearer.wearing_rig = null - wearer = null - -/obj/item/rig/proc/deselect_module() - if (selected_module) - if(selected_module.suit_overlay_inactive) - selected_module.suit_overlay = selected_module.suit_overlay_inactive - else - selected_module.suit_overlay = null - selected_module = null - update_icon() - -//Todo -/obj/item/rig/proc/malfunction() - return 0 - -/obj/item/rig/emp_act(severity_class) - //set malfunctioning - if(emp_protection < 30) //for ninjas, really. - malfunctioning += 10 - if(malfunction_delay <= 0) - malfunction_delay = max(malfunction_delay, round(30/severity_class)) - - //drain some charge - if(cell) cell.emp_act(severity_class + 1) - - //possibly damage some modules - take_hit((100/severity_class), "electrical pulse", 1) - ..() - -/obj/item/rig/proc/shock(mob/user) - if (electrocute_mob(user, cell, src)) //electrocute_mob() handles removing charge from the cell, no need to do that here. - spark_system.start() - if(user.stunned) - return 1 - return 0 - -/obj/item/rig/proc/take_hit(damage, source, is_emp=0) - - if(!installed_modules.len) - return - - var/chance - if(!is_emp) - var/damage_resistance = 0 - if(istype(chest, /obj/item/clothing/suit/space)) - damage_resistance = chest.breach_threshold - chance = 2*max(0, damage - damage_resistance) - else - //Want this to be roughly independant of the number of modules, meaning that X emp hits will disable Y% of the suit's modules on average. - //that way people designing hardsuits don't have to worry (as much) about how adding that extra module will affect emp resiliance by 'soaking' hits for other modules - chance = 2*max(0, damage - emp_protection)*min(installed_modules.len/15, 1) - - if(!prob(chance)) - return - - //deal addition damage to already damaged module first. - //This way the chances of a module being disabled aren't so remote. - var/list/valid_modules = list() - var/list/damaged_modules = list() - for(var/obj/item/rig_module/module in installed_modules) - if(module.damage < 2) - valid_modules |= module - if(module.damage > 0) - damaged_modules |= module - - var/obj/item/rig_module/dam_module = null - if(damaged_modules.len) - dam_module = pick(damaged_modules) - else if(valid_modules.len) - dam_module = pick(valid_modules) - - if(!dam_module) return - - dam_module.damage++ - - if(!source) - source = "hit" - - if(wearer) - if(dam_module.damage >= 2) - to_chat(wearer, "The [source] has disabled your [dam_module.interface_name]!") - else - to_chat(wearer, "The [source] has damaged your [dam_module.interface_name]!") - dam_module.deactivate() - -/obj/item/rig/proc/malfunction_check(var/mob/living/carbon/human/user) - if(malfunction_delay) - if(offline) - to_chat(user, "The suit is completely unresponsive.") - else - to_chat(user, "ERROR: Hardware fault. Rebooting interface...") - return 1 - return 0 - -/obj/item/rig/proc/ai_can_move_suit(var/mob/user, var/check_user_module = 0, var/check_for_ai = 0) - - if(check_for_ai) - if(!(locate(/obj/item/rig_module/ai_container) in contents)) - return 0 - var/found_ai - for(var/obj/item/rig_module/ai_container/module in contents) - if(module.damage >= 2) - continue - if(module.integrated_ai && module.integrated_ai.client && !module.integrated_ai.stat) - found_ai = 1 - break - if(!found_ai) - return 0 - - if(check_user_module) - if(!user || !user.loc || !user.loc.loc) - return 0 - var/obj/item/rig_module/ai_container/module = user.loc.loc - if(!istype(module) || module.damage >= 2) - to_chat(user, "Your host module is unable to interface with the suit.") - return 0 - - if(offline || !cell || !cell.charge || locked_down) - if(user) to_chat(user, "Your host rig is unpowered and unresponsive.") - return 0 - if(!wearer || wearer.back != src) - if(user) to_chat(user, "Your host rig is not being worn.") - return 0 - if(!wearer.stat && !control_overridden && !ai_override_enabled) - if(user) to_chat(user, "You are locked out of the suit servo controller.") - return 0 - return 1 - -/obj/item/rig/proc/force_rest(var/mob/user) - if(!ai_can_move_suit(user, check_user_module = 1)) - return - wearer.lay_down() - to_chat(user, "\The [wearer] is now [wearer.resting ? "resting" : "getting up"].") - -/obj/item/rig/proc/forced_move(var/direction, var/mob/user) - if(malfunctioning) - direction = pick(GLOB.cardinal) - - if(world.time < wearer_move_delay) - return - - if(!wearer || !wearer.loc || !ai_can_move_suit(user, check_user_module = 1)) - return - - // AIs are a bit slower than regular and ignore move intent. - wearer_move_delay = world.time + ai_controlled_move_delay - - cell.use(aimove_power_usage * CELLRATE) - wearer.DoMove(direction, user) - -// This returns the rig if you are contained inside one, but not if you are wearing it -/atom/proc/get_rig() - if(loc) - return loc.get_rig() - return null - -/obj/item/rig/get_rig() - return src - -/mob/living/carbon/human/get_rig() - return wearing_rig - -#undef ONLY_DEPLOY -#undef ONLY_RETRACT -#undef SEAL_DELAY diff --git a/code/modules/clothing/spacesuits/rig/rig_attackby.dm b/code/modules/clothing/spacesuits/rig/rig_attackby.dm deleted file mode 100644 index 29b7146381dbc..0000000000000 --- a/code/modules/clothing/spacesuits/rig/rig_attackby.dm +++ /dev/null @@ -1,221 +0,0 @@ -/obj/item/rig/attackby(obj/item/W as obj, mob/user as mob) - - if(!istype(user,/mob/living)) return 0 - - if(electrified != 0) - if(shock(user)) //Handles removing charge from the cell, as well. No need to do that here. - return - - // Pass repair items on to the chestpiece. - if(chest && (istype(W,/obj/item/stack/material) || isWelder(W))) - return chest.attackby(W,user) - - // Lock or unlock the access panel. - if(W.GetIdCard()) - if(subverted) - locked = 0 - to_chat(user, "It looks like the locking system has been shorted out.") - return - - if(!length(req_access)) - locked = 0 - to_chat(user, "\The [src] doesn't seem to have a locking mechanism.") - return - - if(security_check_enabled && !src.allowed(user)) - to_chat(user, "Access denied.") - return - - locked = !locked - to_chat(user, "You [locked ? "lock" : "unlock"] \the [src] access panel.") - return - - else if(isCrowbar(W)) - - if(!open && locked) - to_chat(user, "The access panel is locked shut.") - return - - open = !open - to_chat(user, "You [open ? "open" : "close"] the access panel.") - return - - else if(isScrewdriver(W)) - p_open = !p_open - to_chat(user, "You [p_open ? "open" : "close"] the wire cover.") - - // Hacking. - else if(isWirecutter(W) || isMultitool(W)) - if(p_open) - wires.Interact(user) - else - to_chat(user, "You can't reach the wiring.") - return - - if(open) - - - // Air tank. - if(istype(W,/obj/item/tank)) //Todo, some kind of check for suits without integrated air supplies. - - if(air_supply) - to_chat(user, "\The [src] already has a tank installed.") - return - if (istype(W, /obj/item/tank/scrubber)) - to_chat(user, SPAN_WARNING("\The [W] is far too large to attach to \the [src].")) - return - - if(!user.unEquip(W)) return - air_supply = W - W.forceMove(src) - to_chat(user, "You slot [W] into [src] and tighten the connecting valve.") - return - - // Check if this is a hardsuit upgrade or a modification. - else if(istype(W,/obj/item/rig_module)) - - if(istype(src.loc,/mob/living/carbon/human)) - var/mob/living/carbon/human/H = src.loc - if(H.back == src) - to_chat(user, "You can't install a hardsuit module while the suit is being worn.") - return 1 - - if(is_type_in_list(W,banned_modules)) - to_chat(user, SPAN_DANGER("\The [src] cannot mount this type of module.")) - return 1 - - var/obj/item/rig_module/mod = W - - if(!installed_modules) installed_modules = list() - if(installed_modules.len) - for(var/obj/item/rig_module/installed_mod in installed_modules) - if(is_type_in_list(installed_mod,mod.banned_modules)) - to_chat(user, SPAN_DANGER("\The [installed_mod] is incompatible with this module.")) - return 1 - if(installed_mod.banned_modules.len) - if(is_type_in_list(W,installed_mod.banned_modules)) - to_chat(user, SPAN_DANGER("\The [installed_mod] is incompatible with this module.")) - return 1 - if(!installed_mod.redundant && installed_mod.type == W.type) - to_chat(user, "The hardsuit already has a module of that class installed.") - return 1 - - to_chat(user, "You begin installing \the [mod] into \the [src].") - if(!do_after(user, 4 SECONDS, src, DO_PUBLIC_UNIQUE)) - return - if(!user || !W) - return - if(!user.unEquip(mod)) return - to_chat(user, "You install \the [mod] into \the [src].") - installed_modules |= mod - mod.forceMove(src) - mod.installed(src) - update_icon() - return 1 - - else if(!cell && istype(W,/obj/item/cell)) - - if(!user.unEquip(W)) return - to_chat(user, "You jack \the [W] into \the [src]'s battery mount.") - W.forceMove(src) - src.cell = W - return - - else if(isWrench(W)) - - var/list/current_mounts = list() - if(cell) current_mounts += "cell" - if(air_supply) current_mounts += "tank" - if(installed_modules && installed_modules.len) current_mounts += "system module" - - var/to_remove = input("Which would you like to modify?") as null|anything in current_mounts - if(!to_remove) - return - - if(istype(src.loc,/mob/living/carbon/human) && to_remove != "cell" && to_remove != "tank") - var/mob/living/carbon/human/H = src.loc - if(H.back == src) - to_chat(user, "You can't remove an installed device while the hardsuit is being worn.") - return - - switch(to_remove) - - if("cell") - - if(cell) - to_chat(user, "You detach \the [cell] from \the [src]'s battery mount.") - for(var/obj/item/rig_module/module in installed_modules) - module.deactivate() - user.put_in_hands(cell) - cell = null - else - to_chat(user, "There is nothing loaded in that mount.") - - if("tank") - if(!air_supply) - to_chat(user, "There is no tank to remove.") - return - - user.put_in_hands(air_supply) - to_chat(user, "You detach and remove \the [air_supply].") - air_supply = null - - if("system module") - - var/list/possible_removals = list() - for(var/obj/item/rig_module/module in installed_modules) - if(module.permanent) - continue - possible_removals[module.name] = module - - if(!possible_removals.len) - to_chat(user, "There are no installed modules to remove.") - return - - var/removal_choice = input("Which module would you like to remove?") as null|anything in possible_removals - if(!removal_choice) - return - - var/obj/item/rig_module/removed = possible_removals[removal_choice] - to_chat(user, "You detach \the [removed] from \the [src].") - removed.dropInto(loc) - removed.removed() - installed_modules -= removed - update_icon() - - else if(istype(W,/obj/item/stack/nanopaste)) //EMP repair - var/obj/item/stack/S = W - if(malfunctioning || malfunction_delay) - if(S.use(1)) - to_chat(user, "You pour some of \the [S] over \the [src]'s control circuitry and watch as the nanites do their work with impressive speed and precision.") - malfunctioning = 0 - malfunction_delay = 0 - else - to_chat(user, "\The [S] is empty!") - else - to_chat(user, "You don't see any use for \the [S].") - - return - - // If we've gotten this far, all we have left to do before we pass off to root procs - // is check if any of the loaded modules want to use the item we've been given. - for(var/obj/item/rig_module/module in installed_modules) - if(module.accepts_item(W,user)) //Item is handled in this proc - return - ..() - - -/obj/item/rig/attack_hand(var/mob/user) - - if(electrified != 0) - if(shock(user)) //Handles removing charge from the cell, as well. No need to do that here. - return - ..() - -/obj/item/rig/emag_act(var/remaining_charges, var/mob/user) - if(!subverted) - req_access.Cut() - locked = 0 - subverted = 1 - to_chat(user, "You short out the access protocol for the suit.") - return 1 diff --git a/code/modules/clothing/spacesuits/rig/rig_pieces.dm b/code/modules/clothing/spacesuits/rig/rig_pieces.dm deleted file mode 100644 index 13bd8348d15e0..0000000000000 --- a/code/modules/clothing/spacesuits/rig/rig_pieces.dm +++ /dev/null @@ -1,153 +0,0 @@ -/* - * Defines the helmets, gloves and shoes for rigs. - */ - -/obj/item/clothing/head/helmet/space/rig - name = "helmet" - item_flags = ITEM_FLAG_THICKMATERIAL - flags_inv = HIDEEARS|HIDEEYES|HIDEFACE|BLOCKHAIR - body_parts_covered = HEAD|FACE|EYES - heat_protection = HEAD|FACE|EYES - cold_protection = HEAD|FACE|EYES - brightness_on = 0.5 - sprite_sheets = list( - SPECIES_SKRELL = 'icons/mob/species/skrell/onmob_head_skrell.dmi', - SPECIES_UNATHI = 'icons/mob/species/unathi/onmob_head_helmet_unathi.dmi', - ) - species_restricted = null - -/obj/item/clothing/gloves/rig - name = "gauntlets" - item_flags = ITEM_FLAG_THICKMATERIAL | ITEM_FLAG_AIRTIGHT - body_parts_covered = HANDS - heat_protection = HANDS - cold_protection = HANDS - species_restricted = null - gender = PLURAL - -/obj/item/clothing/shoes/magboots/rig - name = "boots" - item_flags = ITEM_FLAG_THICKMATERIAL | ITEM_FLAG_AIRTIGHT - body_parts_covered = FEET - cold_protection = FEET - heat_protection = FEET - species_restricted = null - gender = PLURAL - icon_base = null - -/obj/item/clothing/suit/space/rig - name = "chestpiece" - allowed = list(/obj/item/device/flashlight,/obj/item/tank,/obj/item/device/suit_cooling_unit) - body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS - heat_protection = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS - cold_protection = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS - // HIDEJUMPSUIT no longer needed, see "hides_uniform" and "update_component_sealed()" in rig.dm - flags_inv = HIDETAIL | CLOTHING_BULKY - item_flags = ITEM_FLAG_THICKMATERIAL | ITEM_FLAG_AIRTIGHT - //will reach 10 breach damage after 25 laser carbine blasts, 3 revolver hits, or ~1 PTR hit. Completely immune to smg or sts hits. - breach_threshold = 38 - resilience = 0.2 - can_breach = 1 - sprite_sheets = list( - SPECIES_UNATHI = 'icons/mob/species/unathi/onmob_suit_unathi.dmi', - ) - var/list/supporting_limbs = list() //If not-null, automatically splints breaks. Checked when removing the suit. - equip_delay = null - - -/obj/item/clothing/suit/space/rig/equipped(mob/M) - check_limb_support(M) - ..() - -/obj/item/clothing/suit/space/rig/dropped(var/mob/user) - check_limb_support(user) - ..() - -// Some space suits are equipped with reactive membranes that support broken limbs -/obj/item/clothing/suit/space/rig/proc/can_support(var/mob/living/carbon/human/user) - if(user.wear_suit != src) - return 0 //not wearing the suit - var/obj/item/rig/rig = user.back - if(!istype(rig) || rig.offline || rig.canremove) - return 0 //not wearing a rig control unit or it's offline or unsealed - return 1 - -/obj/item/clothing/suit/space/rig/proc/check_limb_support(var/mob/living/carbon/human/user) - - // If this isn't set, then we don't need to care. - if(!istype(user) || isnull(supporting_limbs)) - return - - if(can_support(user)) - for(var/obj/item/organ/external/E in user.bad_external_organs) - if((E.body_part & body_parts_covered) && E.is_broken() && E.apply_splint(src)) - to_chat(user, "You feel [src] constrict about your [E.name], supporting it.") - supporting_limbs |= E - else - // Otherwise, remove the splints. - for(var/obj/item/organ/external/E in supporting_limbs) - if(E.splinted == src && E.remove_splint(src)) - to_chat(user, "\The [src] stops supporting your [E.name].") - supporting_limbs.Cut() - -/obj/item/clothing/suit/space/rig/proc/handle_fracture(var/mob/living/carbon/human/user, var/obj/item/organ/external/E) - if(!istype(user) || isnull(supporting_limbs) || !can_support(user)) - return - if((E.body_part & body_parts_covered) && E.is_broken() && E.apply_splint(src)) - to_chat(user, "You feel [src] constrict about your [E.name], supporting it.") - supporting_limbs |= E - - -/obj/item/clothing/gloves/rig/Touch(var/atom/A, var/proximity) - - if(!A || !proximity) - return 0 - - var/mob/living/carbon/human/H = loc - if(!istype(H) || !H.back) - return 0 - - var/obj/item/rig/suit = H.back - if(!suit || !istype(suit) || !suit.installed_modules.len) - return 0 - - for(var/obj/item/rig_module/module in suit.installed_modules) - if(module.active && module.activates_on_touch) - if(module.engage(A)) - return 1 - return 0 - -//Rig pieces for non-spacesuit based rigs - -/obj/item/clothing/head/lightrig - name = "mask" - body_parts_covered = HEAD|FACE|EYES - heat_protection = HEAD|FACE|EYES - cold_protection = HEAD|FACE|EYES - item_flags = ITEM_FLAG_THICKMATERIAL|ITEM_FLAG_AIRTIGHT - -/obj/item/clothing/suit/lightrig - name = "suit" - allowed = list(/obj/item/device/flashlight) - body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS - heat_protection = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS - cold_protection = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS - flags_inv = HIDEJUMPSUIT - item_flags = ITEM_FLAG_THICKMATERIAL - -/obj/item/clothing/shoes/lightrig - name = "boots" - body_parts_covered = FEET - cold_protection = FEET - heat_protection = FEET - species_restricted = null - gender = PLURAL - -/obj/item/clothing/gloves/lightrig - name = "gloves" - item_flags = ITEM_FLAG_THICKMATERIAL - body_parts_covered = HANDS - heat_protection = HANDS - cold_protection = HANDS - species_restricted = null - gender = PLURAL diff --git a/code/modules/clothing/spacesuits/rig/rig_verbs.dm b/code/modules/clothing/spacesuits/rig/rig_verbs.dm deleted file mode 100644 index c9d310889287b..0000000000000 --- a/code/modules/clothing/spacesuits/rig/rig_verbs.dm +++ /dev/null @@ -1,253 +0,0 @@ -// Interface for humans. -/obj/item/rig/verb/hardsuit_interface() - - set name = "Open Hardsuit Interface" - set desc = "Open the hardsuit system interface." - set category = "Hardsuit" - set src = usr.contents - - if(wearer && wearer.back == src) - ui_interact(usr) - -/obj/item/rig/verb/toggle_vision() - - set name = "Toggle Visor" - set desc = "Turns your rig visor off or on." - set category = "Hardsuit" - set src = usr.contents - - if(!istype(wearer) || !wearer.back == src) - to_chat(usr, "The hardsuit is not being worn.") - return - - if(!check_power_cost(usr)) - return - - if(canremove) - to_chat(usr, "The suit is not active.") - return - - if(!check_suit_access(usr)) - return - - if(!visor) - to_chat(usr, "The hardsuit does not have a configurable visor.") - return - - if(!visor.active) - visor.activate() - else - visor.deactivate() - -/obj/item/rig/proc/toggle_helmet() - - set name = "Toggle Helmet" - set desc = "Deploys or retracts your helmet." - set category = "Hardsuit" - set src = usr.contents - - if(!istype(wearer) || !wearer.back == src) - to_chat(usr, "The hardsuit is not being worn.") - return - - if(!check_suit_access(usr)) - return - - toggle_piece("helmet",wearer) - -/obj/item/rig/verb/deploy_suit() - - set name = "Deploy Hardsuit" - set desc = "Deploys helmet, gloves and boots." - set category = "Hardsuit" - set src = usr.contents - - if(!istype(wearer) || !wearer.back == src) - to_chat(usr, "The hardsuit is not being worn.") - return - - if(!check_suit_access(usr)) - return - - if(!check_power_cost(usr)) - return - - deploy(wearer) - -/obj/item/rig/verb/toggle_seals_verb() - - set name = "Toggle Hardsuit" - set desc = "Activates or deactivates your rig." - set category = "Hardsuit" - set src = usr.contents - - if(!istype(wearer) || !wearer.back == src) - to_chat(usr, "The hardsuit is not being worn.") - return - - if(!check_suit_access(usr)) - return - - toggle_seals(wearer) - -/obj/item/rig/verb/switch_vision_mode() - - set name = "Switch Vision Mode" - set desc = "Switches between available vision modes." - set category = "Hardsuit" - set src = usr.contents - - if(malfunction_check(usr)) - return - - if(!check_power_cost(usr, 0, 0, 0, 0)) - return - - if(canremove) - to_chat(usr, "The suit is not active.") - return - - if(!visor) - to_chat(usr, "The hardsuit does not have a configurable visor.") - return - - if(!visor.active) - visor.activate() - - if(!visor.active) - to_chat(usr, "The visor is suffering a hardware fault and cannot be configured.") - return - - visor.engage() - -/obj/item/rig/proc/alter_voice() - - set name = "Configure Voice Synthesiser" - set desc = "Toggles or configures your voice synthesizer." - set category = "Hardsuit" - set src = usr.contents - - if(malfunction_check(usr)) - return - - if(canremove) - to_chat(usr, "The suit is not active.") - return - - if(!istype(wearer) || !wearer.back == src) - to_chat(usr, "The hardsuit is not being worn.") - return - - if(!speech) - to_chat(usr, "The hardsuit does not have a speech synthesiser.") - return - - speech.engage() - -/obj/item/rig/verb/select_module() - - set name = "Select Module" - set desc = "Selects a module as your primary system." - set category = "Hardsuit" - set src = usr.contents - - if(malfunction_check(usr)) - return - - if(!check_power_cost(usr, 0, 0, 0, 0)) - return - - if(canremove) - to_chat(usr, "The suit is not active.") - return - - if(!istype(wearer) || !wearer.back == src) - to_chat(usr, "The hardsuit is not being worn.") - return - - var/list/selectable = list() - for(var/obj/item/rig_module/module in installed_modules) - if(module.selectable) - selectable |= module - - var/obj/item/rig_module/module = input("Which module do you wish to select?") as null|anything in selectable - - if(!istype(module)) - deselect_module() - to_chat(usr, "Primary system is now: deselected.") - return - - module.select() - to_chat(usr, "Primary system is now: [selected_module.interface_name].") - -/obj/item/rig/verb/toggle_module() - - set name = "Toggle Module" - set desc = "Toggle a system module." - set category = "Hardsuit" - set src = usr.contents - - if(malfunction_check(usr)) - return - - if(!check_power_cost(usr, 0, 0, 0, 0)) - return - - if(canremove) - to_chat(usr, "The suit is not active.") - return - - if(!istype(wearer) || !wearer.back == src) - to_chat(usr, "The hardsuit is not being worn.") - return - - var/list/selectable = list() - for(var/obj/item/rig_module/module in installed_modules) - if(module.toggleable) - selectable |= module - - var/obj/item/rig_module/module = input("Which module do you wish to toggle?") as null|anything in selectable - - if(!istype(module)) - return - - if(module.active) - to_chat(usr, "You attempt to deactivate \the [module.interface_name].") - module.deactivate() - else - to_chat(usr, "You attempt to activate \the [module.interface_name].") - module.activate() - -/obj/item/rig/verb/engage_module() - - set name = "Engage Module" - set desc = "Engages a system module." - set category = "Hardsuit" - set src = usr.contents - - if(malfunction_check(usr)) - return - - if(canremove) - to_chat(usr, "The suit is not active.") - return - - if(!istype(wearer) || !wearer.back == src) - to_chat(usr, "The hardsuit is not being worn.") - return - - if(!check_power_cost(usr, 0, 0, 0, 0)) - return - - var/list/selectable = list() - for(var/obj/item/rig_module/module in installed_modules) - if(module.usable) - selectable |= module - - var/obj/item/rig_module/module = input("Which module do you wish to engage?") as null|anything in selectable - - if(!istype(module)) - return - - to_chat(usr, "You attempt to engage the [module.interface_name].") - module.engage() \ No newline at end of file diff --git a/code/modules/clothing/spacesuits/rig/rig_wiring.dm b/code/modules/clothing/spacesuits/rig/rig_wiring.dm deleted file mode 100644 index 145f59407fee3..0000000000000 --- a/code/modules/clothing/spacesuits/rig/rig_wiring.dm +++ /dev/null @@ -1,66 +0,0 @@ -#define RIG_SECURITY 1 -#define RIG_AI_OVERRIDE 2 -#define RIG_SYSTEM_CONTROL 4 -#define RIG_INTERFACE_LOCK 8 -#define RIG_INTERFACE_SHOCK 16 - -/datum/wires/rig - random = 1 - holder_type = /obj/item/rig - wire_count = 5 - descriptions = list( - new /datum/wire_description(RIG_SECURITY, "This wire is connected to the ID scanning panel."), - new /datum/wire_description(RIG_AI_OVERRIDE, "This wire connects to automated control systems."), - new /datum/wire_description(RIG_SYSTEM_CONTROL, "This wire seems to be carrying a heavy current."), - new /datum/wire_description(RIG_INTERFACE_LOCK, "This wire connects to the interface panel.", SKILL_EXPERT), - new /datum/wire_description(RIG_INTERFACE_SHOCK, "This wire seems to be carrying a heavy current.") - ) - -/* - * Rig security can be snipped to disable ID access checks on rig. - * Rig AI override can be pulsed to toggle whether or not the AI can take control of the suit. - * System control can be pulsed to toggle some malfunctions. - * Interface lock can be pulsed to toggle whether or not the interface can be accessed. - */ - -/datum/wires/rig/UpdateCut(var/index, var/mended) - - var/obj/item/rig/rig = holder - switch(index) - if(RIG_SECURITY) - if(mended) - rig.req_access = initial(rig.req_access) - if(RIG_INTERFACE_SHOCK) - rig.electrified = mended ? 0 : -1 - rig.shock(usr,100) - -/datum/wires/rig/UpdatePulsed(var/index) - - var/obj/item/rig/rig = holder - switch(index) - if(RIG_SECURITY) - rig.security_check_enabled = !rig.security_check_enabled - rig.visible_message("\The [rig] twitches as several suit locks [rig.security_check_enabled?"close":"open"].") - if(RIG_AI_OVERRIDE) - rig.ai_override_enabled = !rig.ai_override_enabled - rig.visible_message("A small red light on [rig] [rig.ai_override_enabled?"goes dead":"flickers on"].") - if(RIG_SYSTEM_CONTROL) - if (rig.offline) - rig.visible_message("\The [rig] sparks, damaging its delicate control systems.") - rig.malfunctioning += 10 - if(rig.malfunction_delay <= 0) - rig.malfunction_delay = 20 - rig.shock(usr,100) - if(RIG_INTERFACE_LOCK) - rig.interface_locked = !rig.interface_locked - rig.visible_message("\The [rig] clicks audibly as the software interface [rig.interface_locked?"darkens":"brightens"].") - if(RIG_INTERFACE_SHOCK) - if(rig.electrified != -1) - rig.electrified = 30 - rig.shock(usr,100) - -/datum/wires/rig/CanUse(var/mob/living/L) - var/obj/item/rig/rig = holder - if(rig.p_open) - return 1 - return 0 \ No newline at end of file diff --git a/code/modules/clothing/spacesuits/rig/suits/alien.dm b/code/modules/clothing/spacesuits/rig/suits/alien.dm deleted file mode 100644 index c363c57c64bce..0000000000000 --- a/code/modules/clothing/spacesuits/rig/suits/alien.dm +++ /dev/null @@ -1,52 +0,0 @@ -/obj/item/rig/unathi - name = "\improper NT breacher chassis control module" - desc = "A NanoTrasen-made Unathi battle-rig. Looks like a fish, moves like a fish, steers like a cow." - suit_type = "\improper NT breacher rig" - icon_state = "breacher_rig_cheap" - armor = list( - melee = ARMOR_MELEE_MAJOR, - bullet = ARMOR_BALLISTIC_RIFLE, - laser = ARMOR_LASER_HANDGUNS, - energy = ARMOR_ENERGY_RESISTANT, - bomb = ARMOR_BOMB_RESISTANT, - bio = ARMOR_BIO_SHIELDED, - rad = ARMOR_RAD_MINOR - ) - emp_protection = -20 - online_slowdown = 3 - offline_slowdown = 4 - offline_vision_restriction = TINT_BLIND - - chest_type = /obj/item/clothing/suit/space/rig/unathi - helm_type = /obj/item/clothing/head/helmet/space/rig/unathi - boot_type = /obj/item/clothing/shoes/magboots/rig/unathi - glove_type = /obj/item/clothing/gloves/rig/unathi - -/obj/item/rig/unathi/fancy - name = "breacher chassis control module" - desc = "An (outwardly) authentic Unathi breacher chassis. Huge, bulky and absurdly heavy. It must be like wearing a tank." - suit_type = "breacher chassis" - icon_state = "breacher_rig" - armor = list( - melee = ARMOR_MELEE_VERY_HIGH, - bullet = ARMOR_BALLISTIC_AP, - laser = ARMOR_LASER_MAJOR, - energy = ARMOR_ENERGY_STRONG, - bomb = ARMOR_BOMB_RESISTANT, - bio = ARMOR_BIO_SHIELDED, - rad = ARMOR_RAD_SMALL) - online_slowdown = 2 - -/obj/item/clothing/head/helmet/space/rig/unathi - species_restricted = list(SPECIES_UNATHI) - force = 5 - sharp = TRUE - -/obj/item/clothing/suit/space/rig/unathi - species_restricted = list(SPECIES_UNATHI) - -/obj/item/clothing/shoes/magboots/rig/unathi - species_restricted = list(SPECIES_UNATHI) - -/obj/item/clothing/gloves/rig/unathi - species_restricted = list(SPECIES_UNATHI) diff --git a/code/modules/clothing/spacesuits/rig/suits/combat.dm b/code/modules/clothing/spacesuits/rig/suits/combat.dm deleted file mode 100644 index 413ca6820d108..0000000000000 --- a/code/modules/clothing/spacesuits/rig/suits/combat.dm +++ /dev/null @@ -1,168 +0,0 @@ -/obj/item/rig/combat - name = "combat hardsuit control module" - desc = "A sleek and dangerous hardsuit for active combat." - icon_state = "security_rig" - suit_type = "combat hardsuit" - armor = list( - melee = ARMOR_MELEE_VERY_HIGH, - bullet = ARMOR_BALLISTIC_RIFLE, - laser = ARMOR_LASER_MAJOR, - energy = ARMOR_ENERGY_MINOR, - bomb = ARMOR_BOMB_RESISTANT, - bio = ARMOR_BIO_SHIELDED, - rad = ARMOR_RAD_RESISTANT - ) - offline_vision_restriction = TINT_HEAVY - - chest_type = /obj/item/clothing/suit/space/rig/combat - helm_type = /obj/item/clothing/head/helmet/space/rig/combat - boot_type = /obj/item/clothing/shoes/magboots/rig/combat - glove_type = /obj/item/clothing/gloves/rig/combat - -/obj/item/clothing/head/helmet/space/rig/combat - light_overlay = "helmet_light_dual_green" - species_restricted = list(SPECIES_HUMAN, SPECIES_SKRELL, SPECIES_UNATHI, SPECIES_IPC, SPECIES_SHELL) - sprite_sheets = list( - SPECIES_UNATHI = 'icons/mob/species/unathi/generated/onmob_head_unathi.dmi' - ) - -/obj/item/clothing/suit/space/rig/combat - species_restricted = list(SPECIES_HUMAN,SPECIES_SKRELL, SPECIES_UNATHI, SPECIES_IPC, SPECIES_SHELL) - sprite_sheets = list( - SPECIES_UNATHI = 'icons/mob/species/unathi/generated/onmob_suit_unathi.dmi' - ) - allowed = list( - /obj/item/device/flashlight, - /obj/item/tank, - /obj/item/ammo_magazine, - /obj/item/ammo_casing, - /obj/item/handcuffs, - /obj/item/device/t_scanner, - /obj/item/rcd, - /obj/item/rpd, - /obj/item/crowbar, - /obj/item/screwdriver, - /obj/item/weldingtool, - /obj/item/wirecutters, - /obj/item/wrench, - /obj/item/device/multitool, - /obj/item/device/radio, - /obj/item/device/scanner/gas, - /obj/item/storage/briefcase/inflatable, - /obj/item/melee/baton, - /obj/item/gun, - /obj/item/storage/firstaid, - /obj/item/reagent_containers/hypospray, - /obj/item/roller, - /obj/item/device/suit_cooling_unit - ) - -/obj/item/clothing/shoes/magboots/rig/combat - species_restricted = list(SPECIES_HUMAN,SPECIES_SKRELL, SPECIES_UNATHI, SPECIES_IPC, SPECIES_SHELL) - sprite_sheets = list( - SPECIES_UNATHI = 'icons/mob/species/unathi/generated/onmob_feet_unathi.dmi' - ) - -/obj/item/clothing/gloves/rig/combat - item_flags = ITEM_FLAG_THICKMATERIAL | ITEM_FLAG_NOCUFFS - species_restricted = list(SPECIES_HUMAN,SPECIES_SKRELL, SPECIES_UNATHI, SPECIES_IPC, SPECIES_SHELL) - sprite_sheets = list( - SPECIES_UNATHI = 'icons/mob/species/unathi/generated/onmob_hands_unathi.dmi' - ) - -/obj/item/rig/combat/equipped - initial_modules = list( - /obj/item/rig_module/mounted/egun, - /obj/item/rig_module/vision/thermal, - /obj/item/rig_module/grenade_launcher, - /obj/item/rig_module/ai_container, - /obj/item/rig_module/power_sink, - /obj/item/rig_module/electrowarfare_suite, - /obj/item/rig_module/chem_dispenser/combat, - /obj/item/rig_module/cooling_unit - ) - -//Extremely OP, hardly standard issue equipment -//Now a little less OP -/obj/item/rig/military - name = "military hardsuit control module" - desc = "An austere hardsuit used by paramilitary groups and real soldiers alike." - icon_state = "military_rig" - suit_type = "military hardsuit" - armor = list( - melee = ARMOR_MELEE_VERY_HIGH, - bullet = ARMOR_BALLISTIC_AP, - laser = ARMOR_LASER_RIFLES, - energy = ARMOR_ENERGY_MINOR, - bomb = ARMOR_BOMB_RESISTANT, - bio = ARMOR_BIO_SHIELDED, - rad = ARMOR_RAD_MINOR - ) - offline_vision_restriction = TINT_HEAVY - - chest_type = /obj/item/clothing/suit/space/rig/military - helm_type = /obj/item/clothing/head/helmet/space/rig/military - boot_type = /obj/item/clothing/shoes/magboots/rig/military - glove_type = /obj/item/clothing/gloves/rig/military - -/obj/item/clothing/head/helmet/space/rig/military - light_overlay = "helmet_light_dual_green" - species_restricted = list(SPECIES_HUMAN, SPECIES_SHELL) - sprite_sheets = list( - SPECIES_UNATHI = 'icons/mob/species/unathi/onmob_head_helmet_unathi.dmi' - ) - -/obj/item/clothing/suit/space/rig/military - species_restricted = list(SPECIES_HUMAN,SPECIES_SKRELL, SPECIES_UNATHI, SPECIES_IPC, SPECIES_SHELL) - sprite_sheets = list( - SPECIES_UNATHI = 'icons/mob/species/unathi/generated/onmob_suit_unathi.dmi' - ) - allowed = list( - /obj/item/device/flashlight, - /obj/item/tank, - /obj/item/ammo_magazine, - /obj/item/ammo_casing, - /obj/item/handcuffs, - /obj/item/device/t_scanner, - /obj/item/rcd, - /obj/item/crowbar, - /obj/item/screwdriver, - /obj/item/weldingtool, - /obj/item/wirecutters, - /obj/item/wrench, - /obj/item/device/multitool, - /obj/item/device/radio, - /obj/item/device/scanner/gas, - /obj/item/storage/briefcase/inflatable, - /obj/item/melee/baton, - /obj/item/gun, - /obj/item/storage/firstaid, - /obj/item/reagent_containers/hypospray, - /obj/item/roller, - /obj/item/device/suit_cooling_unit - ) - -/obj/item/clothing/shoes/magboots/rig/military - species_restricted = list(SPECIES_HUMAN,SPECIES_SKRELL, SPECIES_UNATHI, SPECIES_IPC, SPECIES_SHELL) - sprite_sheets = list( - SPECIES_UNATHI = 'icons/mob/species/unathi/generated/onmob_feet_unathi.dmi' - ) - -/obj/item/clothing/gloves/rig/military - item_flags = ITEM_FLAG_THICKMATERIAL | ITEM_FLAG_NOCUFFS - species_restricted = list(SPECIES_HUMAN,SPECIES_SKRELL, SPECIES_UNATHI, SPECIES_IPC, SPECIES_SHELL) - sprite_sheets = list( - SPECIES_UNATHI = 'icons/mob/species/unathi/generated/onmob_hands_unathi.dmi' - ) - -/obj/item/rig/military/equipped - initial_modules = list( - /obj/item/rig_module/mounted/egun, - /obj/item/rig_module/vision/multi, - /obj/item/rig_module/grenade_launcher, - /obj/item/rig_module/ai_container, - /obj/item/rig_module/power_sink, - /obj/item/rig_module/electrowarfare_suite, - /obj/item/rig_module/chem_dispenser/combat, - /obj/item/rig_module/cooling_unit - ) diff --git a/code/modules/clothing/spacesuits/rig/suits/ert.dm b/code/modules/clothing/spacesuits/rig/suits/ert.dm deleted file mode 100644 index b22436abcf5f2..0000000000000 --- a/code/modules/clothing/spacesuits/rig/suits/ert.dm +++ /dev/null @@ -1,131 +0,0 @@ -/obj/item/rig/ert - name = "emergency response command hardsuit control module" - desc = "A hardsuit used by many corporate and governmental emergency response forces. Has blue highlights. Armoured and space ready." - suit_type = "emergency response command" - icon_state = "ert_commander_rig" - - chest_type = /obj/item/clothing/suit/space/rig/ert - helm_type = /obj/item/clothing/head/helmet/space/rig/ert - boot_type = /obj/item/clothing/shoes/magboots/rig/ert - glove_type = /obj/item/clothing/gloves/rig/ert - - req_access = list(access_cent_specops) - - armor = list( - melee = ARMOR_MELEE_MAJOR, - bullet = ARMOR_BALLISTIC_RESISTANT, - laser = ARMOR_LASER_MAJOR, - energy = ARMOR_ENERGY_MINOR, - bomb = ARMOR_BOMB_PADDED, - bio = ARMOR_BIO_SHIELDED, - rad = ARMOR_RAD_SHIELDED - ) - - initial_modules = list( - /obj/item/rig_module/ai_container, - /obj/item/rig_module/maneuvering_jets, - /obj/item/rig_module/datajack, - /obj/item/rig_module/cooling_unit - ) - -/obj/item/clothing/head/helmet/space/rig/ert - light_overlay = "helmet_light_dual" - camera = /obj/machinery/camera/network/ert - species_restricted = list(SPECIES_HUMAN,SPECIES_SKRELL,SPECIES_UNATHI,SPECIES_IPC, SPECIES_SHELL) - -/obj/item/clothing/suit/space/rig/ert - species_restricted = list(SPECIES_HUMAN,SPECIES_SKRELL,SPECIES_UNATHI,SPECIES_IPC, SPECIES_SHELL) - -/obj/item/clothing/shoes/magboots/rig/ert - species_restricted = list(SPECIES_HUMAN,SPECIES_SKRELL,SPECIES_UNATHI,SPECIES_IPC, SPECIES_SHELL) - -/obj/item/clothing/gloves/rig/ert - item_flags = ITEM_FLAG_THICKMATERIAL | ITEM_FLAG_NOCUFFS - species_restricted = list(SPECIES_HUMAN,SPECIES_SKRELL,SPECIES_UNATHI,SPECIES_IPC, SPECIES_SHELL) - - -/obj/item/rig/ert/engineer - name = "emergency response engineering hardsuit control module" - desc = "A hardsuit used by many corporate and governmental emergency response forces. Has orange highlights. Armoured and space ready." - suit_type = "emergency response engineer" - icon_state = "ert_engineer_rig" - - glove_type = /obj/item/clothing/gloves/rig/ert/engineer - - initial_modules = list( - /obj/item/rig_module/ai_container, - /obj/item/rig_module/maneuvering_jets, - /obj/item/rig_module/mounted/plasmacutter, - /obj/item/rig_module/device/rcd, - /obj/item/rig_module/cooling_unit - ) - -/obj/item/clothing/gloves/rig/ert/engineer - siemens_coefficient = 0 - -/obj/item/rig/ert/janitor - name = "emergency response sanitation hardsuit control module" - desc = "A hardsuit used by many corporate and governmental emergency response forces. Has purple highlights. Armoured and space ready." - suit_type = "emergency response sanitation" - icon_state = "ert_janitor_rig" - - initial_modules = list( - /obj/item/rig_module/ai_container, - /obj/item/rig_module/maneuvering_jets, - /obj/item/rig_module/fabricator/wf_sign, - /obj/item/rig_module/grenade_launcher/cleaner, - /obj/item/rig_module/device/decompiler, - /obj/item/rig_module/cooling_unit - ) - -/obj/item/rig/ert/medical - name = "emergency response medical hardsuit control module" - desc = "A hardsuit used by many corporate and governmental emergency response forces. Has white highlights. Armoured and space ready." - suit_type = "emergency response medic" - icon_state = "ert_medical_rig" - - initial_modules = list( - /obj/item/rig_module/ai_container, - /obj/item/rig_module/maneuvering_jets, - /obj/item/rig_module/device/healthscanner, - /obj/item/rig_module/chem_dispenser/injector, - /obj/item/rig_module/cooling_unit - ) - -/obj/item/rig/ert/security - name = "emergency response security hardsuit control module" - desc = "A hardsuit used by many corporate and governmental emergency response forces. Has red highlights. Armoured and space ready." - suit_type = "emergency response security" - icon_state = "ert_security_rig" - - initial_modules = list( - /obj/item/rig_module/ai_container, - /obj/item/rig_module/maneuvering_jets, - /obj/item/rig_module/grenade_launcher, - /obj/item/rig_module/mounted/egun, - /obj/item/rig_module/cooling_unit - ) - -/obj/item/rig/ert/fleet - name = "emergency response hardsuit control module" - desc = "A hardsuit utilised especially by Fleet combat teams. Has navy blue highlights and Sol-patterned crests on the shoulders." - suit_type = "emergency response fleet" - icon_state = "ert_fleet_rig" - armor = list( - melee = ARMOR_MELEE_VERY_HIGH, - bullet = ARMOR_BALLISTIC_RESISTANT, - laser = ARMOR_LASER_MAJOR, - energy = ARMOR_ENERGY_MINOR, - bomb = ARMOR_BOMB_PADDED, - bio = ARMOR_BIO_SHIELDED, - rad = ARMOR_RAD_SHIELDED - ) - - initial_modules = list( - /obj/item/rig_module/ai_container, - /obj/item/rig_module/maneuvering_jets, - /obj/item/rig_module/grenade_launcher, - /obj/item/rig_module/mounted/egun, - /obj/item/rig_module/cooling_unit, - /obj/item/rig_module/datajack - ) diff --git a/code/modules/clothing/spacesuits/rig/suits/light.dm b/code/modules/clothing/spacesuits/rig/suits/light.dm deleted file mode 100644 index 44add5f42adb5..0000000000000 --- a/code/modules/clothing/spacesuits/rig/suits/light.dm +++ /dev/null @@ -1,178 +0,0 @@ -// Light rigs are not space-capable, but don't suffer excessive slowdown or sight issues when depowered. -/obj/item/rig/light - name = "light suit control module" - desc = "A lighter, less armoured rig suit." - icon_state = "ninja_rig" - suit_type = "light suit" - armor = list( - melee = ARMOR_MELEE_KNIVES, - bullet = ARMOR_BALLISTIC_PISTOL, - laser = ARMOR_LASER_HANDGUNS, - energy = ARMOR_ENERGY_MINOR, - bomb = ARMOR_BOMB_PADDED - ) - siemens_coefficient = 0.4 - emp_protection = 10 - online_slowdown = 0.5 - offline_slowdown = 1 - item_flags = ITEM_FLAG_THICKMATERIAL - offline_vision_restriction = TINT_NONE - max_pressure_protection = LIGHT_RIG_MAX_PRESSURE - min_pressure_protection = 0 - - chest_type = /obj/item/clothing/suit/space/rig/light - helm_type = /obj/item/clothing/head/helmet/space/rig/light - boot_type = /obj/item/clothing/shoes/magboots/rig/light - glove_type = /obj/item/clothing/gloves/rig/light - -/obj/item/clothing/suit/space/rig/light - name = "suit" - breach_threshold = 18 //comparable to voidsuits - species_restricted = list(SPECIES_HUMAN,SPECIES_IPC, SPECIES_SHELL) - -/obj/item/clothing/gloves/rig/light - name = "gloves" - species_restricted = list(SPECIES_HUMAN,SPECIES_IPC, SPECIES_SHELL) - -/obj/item/clothing/shoes/magboots/rig/light - name = "shoes" - species_restricted = list(SPECIES_HUMAN,SPECIES_IPC, SPECIES_SHELL) - -/obj/item/clothing/head/helmet/space/rig/light - name = "hood" - species_restricted = list(SPECIES_HUMAN,SPECIES_IPC, SPECIES_SHELL) - -/obj/item/rig/light/hacker - name = "cybersuit control module" - suit_type = "cyber" - desc = "An advanced powered armour suit with many cyberwarfare enhancements. Comes with built-in insulated gloves for safely tampering with electronics." - icon_state = "hacker_rig" - - req_access = list(access_syndicate) - - airtight = 0 - seal_delay = 5 //not being vaccum-proof has an upside I guess - - helm_type = /obj/item/clothing/head/lightrig/hacker - chest_type = /obj/item/clothing/suit/lightrig/hacker - glove_type = /obj/item/clothing/gloves/lightrig/hacker - boot_type = /obj/item/clothing/shoes/lightrig/hacker - - initial_modules = list( - /obj/item/rig_module/ai_container, - /obj/item/rig_module/power_sink, - /obj/item/rig_module/datajack, - /obj/item/rig_module/electrowarfare_suite, - /obj/item/rig_module/voice, - /obj/item/rig_module/vision/nvg, - /obj/item/rig_module/cooling_unit - ) - -//The cybersuit is not space-proof. It does however, have good siemens_coefficient values -/obj/item/clothing/head/lightrig/hacker - name = "HUD" - item_flags = 0 - -/obj/item/clothing/suit/lightrig/hacker - siemens_coefficient = 0.2 - -/obj/item/clothing/shoes/lightrig/hacker - siemens_coefficient = 0.2 - item_flags = ITEM_FLAG_NOSLIP //All the other rigs have magboots anyways, hopefully gives the hacker suit something more going for it. - -/obj/item/clothing/gloves/lightrig/hacker - siemens_coefficient = 0 - item_flags = ITEM_FLAG_THICKMATERIAL | ITEM_FLAG_NOCUFFS - - -/obj/item/rig/light/ninja - name = "ominous suit control module" - desc = "A unique, vaccum-proof suit of nano-enhanced armor designed specifically for assassins." - suit_type = "ominous" - icon_state = "ninja_rig" - armor = list( - melee = ARMOR_MELEE_KNIVES, - bullet = ARMOR_BALLISTIC_PISTOL, - laser = ARMOR_LASER_HANDGUNS, - energy = ARMOR_ENERGY_RESISTANT, - bomb = ARMOR_BOMB_PADDED, - bio = ARMOR_BIO_SHIELDED - ) - siemens_coefficient = 0.2 //heavy hardsuit level shock protection - emp_protection = 30 - online_slowdown = 0 - aimove_power_usage = 50 - chest_type = /obj/item/clothing/suit/space/rig/light/ninja - glove_type = /obj/item/clothing/gloves/rig/light/ninja - cell_type = /obj/item/cell/hyper - - req_access = list(access_syndicate) - - initial_modules = list( - /obj/item/rig_module/teleporter, - /obj/item/rig_module/stealth_field, - /obj/item/rig_module/mounted/energy_blade, - /obj/item/rig_module/vision, - /obj/item/rig_module/voice, - /obj/item/rig_module/fabricator/energy_net, - /obj/item/rig_module/chem_dispenser/combat, - /obj/item/rig_module/grenade_launcher/ninja, - /obj/item/rig_module/ai_container, - /obj/item/rig_module/power_sink, - /obj/item/rig_module/datajack, - /obj/item/rig_module/self_destruct, - /obj/item/rig_module/cooling_unit - ) - -/obj/item/rig/light/ninja/verb/rename_suit() - set name = "Name Ninja Suit" - set desc = "Rename your black voidsuit." - set category = "Object" - var/mob/M = usr - if(!M.mind) return 0 - if(M.incapacitated()) return 0 - var/input = sanitizeSafe(input("What do you want to name your suit?", "Rename suit"), MAX_NAME_LEN) - if(src && input && !M.incapacitated() && in_range(M,src)) - if(!findtext(input, "the", 1, 4)) - input = "\improper [input]" - SetName(input) - to_chat(M, "Suit naming successful!") - verbs -= /obj/item/rig/light/ninja/verb/rename_suit - return 1 - - -/obj/item/rig/light/ninja/verb/rewrite_suit_desc() - set name = "Describe Ninja suit" - set desc = "Give your voidsuit a custom description." - set category = "Object" - var/mob/M = usr - if(!M.mind) return 0 - if(M.incapacitated()) return 0 - var/input = sanitizeSafe(input("Please describe your voidsuit in 128 letters or less.", "write description"), MAX_DESC_LEN) - if(src && input && !M.incapacitated() && in_range(M,src)) - desc = input - to_chat(M, "Suit description successful!") - verbs -= /obj/item/rig/light/ninja/verb/rename_suit - return 1 - -/obj/item/clothing/gloves/rig/light/ninja - name = "insulated gloves" - siemens_coefficient = 0 - species_restricted = list(SPECIES_HUMAN,SPECIES_IPC, SPECIES_SHELL) - -/obj/item/clothing/suit/space/rig/light/ninja - breach_threshold = 38 //comparable to regular hardsuits - species_restricted = list(SPECIES_HUMAN,SPECIES_IPC, SPECIES_SHELL) - -/obj/item/rig/light/stealth - name = "stealth suit control module" - suit_type = "stealth" - desc = "A highly advanced and expensive suit designed for covert operations." - icon_state = "stealth_rig" - - req_access = list(access_syndicate) - - initial_modules = list( - /obj/item/rig_module/stealth_field, - /obj/item/rig_module/vision - ) diff --git a/code/modules/clothing/spacesuits/rig/suits/merc.dm b/code/modules/clothing/spacesuits/rig/suits/merc.dm deleted file mode 100644 index 2ef6744b92df8..0000000000000 --- a/code/modules/clothing/spacesuits/rig/suits/merc.dm +++ /dev/null @@ -1,149 +0,0 @@ -/obj/item/rig/merc - name = "crimson hardsuit control module" - desc = "A blood-red hardsuit module with heavy armour plates." - icon_state = "merc_rig" - suit_type = "crimson hardsuit" - armor = list( - melee = ARMOR_MELEE_VERY_HIGH, - bullet = ARMOR_BALLISTIC_RIFLE, - laser = ARMOR_LASER_MAJOR, - energy = ARMOR_ENERGY_MINOR, - bomb = ARMOR_BOMB_RESISTANT, - bio = ARMOR_BIO_SHIELDED, - rad = ARMOR_RAD_SMALL - ) - offline_vision_restriction = TINT_HEAVY - - chest_type = /obj/item/clothing/suit/space/rig/merc - helm_type = /obj/item/clothing/head/helmet/space/rig/merc - glove_type = /obj/item/clothing/gloves/rig/merc - boot_type = /obj/item/clothing/shoes/magboots/rig/merc - - initial_modules = list( - /obj/item/rig_module/mounted/lcannon, - /obj/item/rig_module/vision/thermal, - /obj/item/rig_module/grenade_launcher, - /obj/item/rig_module/ai_container, - /obj/item/rig_module/power_sink, - /obj/item/rig_module/electrowarfare_suite, - /obj/item/rig_module/chem_dispenser/combat, - /obj/item/rig_module/fabricator/energy_net, - /obj/item/rig_module/cooling_unit - ) - -//Has most of the modules removed -/obj/item/rig/merc/empty - initial_modules = list( - /obj/item/rig_module/ai_container, - /obj/item/rig_module/electrowarfare_suite, - /obj/item/rig_module/cooling_unit - ) - -/obj/item/clothing/gloves/rig/merc - item_flags = ITEM_FLAG_THICKMATERIAL | ITEM_FLAG_NOCUFFS | ITEM_FLAG_AIRTIGHT - siemens_coefficient = 0 - species_restricted = list(SPECIES_HUMAN,SPECIES_SKRELL,SPECIES_UNATHI,SPECIES_IPC, SPECIES_VOX) - sprite_sheets = list( - SPECIES_UNATHI = 'icons/mob/species/unathi/generated/onmob_hands_unathi.dmi', - SPECIES_VOX = 'icons/mob/species/vox/onmob_hands_vox.dmi' - ) -/obj/item/clothing/head/helmet/space/rig/merc - light_overlay = "explorer_light" - camera = /obj/machinery/camera/network/mercenary - species_restricted = list(SPECIES_HUMAN,SPECIES_SKRELL,SPECIES_UNATHI,SPECIES_IPC, SPECIES_VOX, SPECIES_SHELL) - sprite_sheets = list( - SPECIES_SKRELL = 'icons/mob/species/skrell/onmob_head_skrell.dmi', - SPECIES_UNATHI = 'icons/mob/species/unathi/onmob_head_helmet_unathi.dmi', - SPECIES_VOX = 'icons/mob/species/vox/onmob_head_vox.dmi' - ) - -/obj/item/clothing/suit/space/rig/merc - species_restricted = list(SPECIES_HUMAN,SPECIES_SKRELL,SPECIES_UNATHI,SPECIES_IPC, SPECIES_VOX, SPECIES_SHELL) - sprite_sheets = list( - SPECIES_UNATHI = 'icons/mob/species/unathi/generated/onmob_suit_unathi.dmi', - SPECIES_VOX = 'icons/mob/species/vox/onmob_suit_vox.dmi' - ) - allowed = list( - /obj/item/device/flashlight, - /obj/item/tank, - /obj/item/device/suit_cooling_unit, - /obj/item/gun, - /obj/item/ammo_magazine, - /obj/item/ammo_casing, - /obj/item/melee/baton, - /obj/item/melee/energy/sword, - /obj/item/handcuffs - ) - -/obj/item/clothing/shoes/magboots/rig/merc - species_restricted = list(SPECIES_HUMAN,SPECIES_SKRELL,SPECIES_UNATHI,SPECIES_IPC, SPECIES_VOX, SPECIES_SHELL) - sprite_sheets = list( - SPECIES_UNATHI = 'icons/mob/species/unathi/generated/onmob_feet_unathi.dmi', - SPECIES_VOX = 'icons/mob/species/vox/onmob_feet_vox.dmi' - ) - -/obj/item/clothing/gloves/rig/merc - species_restricted = list(SPECIES_HUMAN,SPECIES_SKRELL,SPECIES_UNATHI,SPECIES_IPC, SPECIES_VOX, SPECIES_SHELL) - sprite_sheets = list( - SPECIES_UNATHI = 'icons/mob/species/unathi/generated/onmob_hands_unathi.dmi', - SPECIES_VOX = 'icons/mob/species/vox/onmob_hands_vox.dmi' - ) - -/obj/item/rig/merc/heavy - name = "crimson EOD hardsuit control module" - desc = "A blood-red hardsuit with heavy armoured plates. Judging by the abnormally thick plates, this one is for working with explosives." - icon_state = "merc_rig_heavy" - armor = list( - melee = ARMOR_MELEE_VERY_HIGH, - bullet = ARMOR_BALLISTIC_AP, - laser = ARMOR_LASER_MAJOR, - energy = ARMOR_ENERGY_MINOR, - bomb = ARMOR_BOMB_SHIELDED, - bio = ARMOR_BIO_SHIELDED, - rad = ARMOR_RAD_SMALL - ) - online_slowdown = 2 - offline_slowdown = 4 - max_pressure_protection = FIRESUIT_MAX_PRESSURE - - chest_type = /obj/item/clothing/suit/space/rig/merc/heavy - helm_type = /obj/item/clothing/head/helmet/space/rig/merc/heavy - glove_type = /obj/item/clothing/gloves/rig/merc/heavy - boot_type = /obj/item/clothing/shoes/magboots/rig/merc/heavy - -/obj/item/rig/merc/heavy/empty - initial_modules = list( - /obj/item/rig_module/ai_container, - /obj/item/rig_module/electrowarfare_suite, - ) - -/obj/item/clothing/head/helmet/space/rig/merc/heavy - light_overlay = "explorer_light" - camera = /obj/machinery/camera/network/mercenary - species_restricted = list(SPECIES_HUMAN,SPECIES_SKRELL,SPECIES_UNATHI,SPECIES_IPC, SPECIES_VOX, SPECIES_SHELL) - sprite_sheets = list( - SPECIES_SKRELL = 'icons/mob/species/skrell/onmob_head_skrell.dmi', - SPECIES_UNATHI = 'icons/mob/species/unathi/onmob_head_helmet_unathi.dmi', - SPECIES_VOX = 'icons/mob/species/vox/onmob_head_vox.dmi' - ) - -/obj/item/clothing/suit/space/rig/merc/heavy - species_restricted = list(SPECIES_HUMAN,SPECIES_SKRELL,SPECIES_UNATHI,SPECIES_IPC, SPECIES_VOX, SPECIES_SHELL) - sprite_sheets = list( - SPECIES_UNATHI = 'icons/mob/species/unathi/generated/onmob_suit_unathi.dmi', - SPECIES_VOX = 'icons/mob/species/vox/onmob_suit_vox.dmi' - ) - -/obj/item/clothing/shoes/magboots/rig/merc/heavy - species_restricted = list(SPECIES_HUMAN,SPECIES_SKRELL,SPECIES_UNATHI,SPECIES_IPC, SPECIES_VOX, SPECIES_SHELL) - sprite_sheets = list( - SPECIES_UNATHI = 'icons/mob/species/unathi/generated/onmob_feet_unathi.dmi', - SPECIES_VOX = 'icons/mob/species/vox/onmob_feet_vox.dmi' - ) - -/obj/item/clothing/gloves/rig/merc/heavy - species_restricted = list(SPECIES_HUMAN,SPECIES_SKRELL,SPECIES_UNATHI,SPECIES_IPC, SPECIES_VOX, SPECIES_SHELL) - sprite_sheets = list( - SPECIES_UNATHI = 'icons/mob/species/unathi/generated/onmob_hands_unathi.dmi', - SPECIES_VOX = 'icons/mob/species/vox/onmob_hands_vox.dmi' - ) diff --git a/code/modules/clothing/spacesuits/rig/suits/station.dm b/code/modules/clothing/spacesuits/rig/suits/station.dm deleted file mode 100644 index b6f9894ebbca4..0000000000000 --- a/code/modules/clothing/spacesuits/rig/suits/station.dm +++ /dev/null @@ -1,456 +0,0 @@ -/obj/item/rig/light/internalaffairs - name = "augmented tie" - suit_type = "augmented suit" - desc = "Prepare for paperwork." - icon_state = "internalaffairs_rig" - siemens_coefficient = 0.9 - online_slowdown = 0 - offline_slowdown = 0 - offline_vision_restriction = 0 - hides_uniform = 0 - - req_access = list(access_lawyer) - - glove_type = null - helm_type = null - boot_type = null - - chest_type = /obj/item/clothing/suit/space/rig/industrial - -/obj/item/clothing/suit/space/rig/industrial - species_restricted = list(SPECIES_HUMAN,SPECIES_IPC) - allowed = list( - /obj/item/device/flashlight, - /obj/item/tank, - /obj/item/device/suit_cooling_unit, - /obj/item/storage/briefcase, - /obj/item/storage/secure/briefcase - ) - -/obj/item/rig/light/internalaffairs/equipped - initial_modules = list( - /obj/item/rig_module/ai_container, - /obj/item/rig_module/device/flash, - /obj/item/rig_module/device/paperdispenser, - /obj/item/rig_module/device/pen, - /obj/item/rig_module/device/stamp, - /obj/item/rig_module/cooling_unit - ) - -/obj/item/rig/industrial - name = "industrial suit control module" - suit_type = "industrial hardsuit" - desc = "An industrial hardsuit used by construction crews and mining corporations." - icon_state = "engineering_rig" - armor = list( - melee = ARMOR_MELEE_RESISTANT, - bullet = ARMOR_BALLISTIC_SMALL, - laser = ARMOR_LASER_SMALL, - energy = ARMOR_ENERGY_MINOR, - bomb = ARMOR_BOMB_PADDED, - bio = ARMOR_BIO_SHIELDED, - rad = ARMOR_RAD_MINOR - ) - online_slowdown = 2 - offline_slowdown = 4 - vision_restriction = TINT_MODERATE - offline_vision_restriction = TINT_BLIND - max_pressure_protection = FIRESUIT_MAX_PRESSURE - min_pressure_protection = 0 - - chest_type = /obj/item/clothing/suit/space/rig/industrial - helm_type = /obj/item/clothing/head/helmet/space/rig/industrial - boot_type = /obj/item/clothing/shoes/magboots/rig/industrial - glove_type = /obj/item/clothing/gloves/rig/industrial - -/obj/item/clothing/head/helmet/space/rig/industrial - light_overlay = "helmet_light_wide" - camera = /obj/machinery/camera/network/mining - species_restricted = list(SPECIES_HUMAN,SPECIES_SKRELL,SPECIES_UNATHI,SPECIES_IPC, SPECIES_SHELL) - -/obj/item/clothing/suit/space/rig/industrial - species_restricted = list(SPECIES_HUMAN,SPECIES_SKRELL,SPECIES_UNATHI,SPECIES_IPC, SPECIES_SHELL) - -/obj/item/clothing/shoes/magboots/rig/industrial - species_restricted = list(SPECIES_HUMAN,SPECIES_SKRELL,SPECIES_UNATHI,SPECIES_IPC, SPECIES_SHELL) - -/obj/item/clothing/gloves/rig/industrial - species_restricted = list(SPECIES_HUMAN,SPECIES_SKRELL,SPECIES_UNATHI,SPECIES_IPC, SPECIES_SHELL) - siemens_coefficient = 0 - -/obj/item/rig/industrial/equipped - - initial_modules = list( - /obj/item/rig_module/mounted/plasmacutter, - /obj/item/rig_module/device/drill, - /obj/item/rig_module/device/orescanner, - /obj/item/rig_module/device/rcd, - /obj/item/rig_module/vision/meson, - /obj/item/rig_module/cooling_unit - ) - -/obj/item/rig/eva - name = "EVA hardsuit control module" - suit_type = "EVA hardsuit" - desc = "A light rig for repairs and maintenance to the outside of habitats and vessels." - icon_state = "eva_rig" - armor = list( - melee = ARMOR_MELEE_KNIVES, - bullet = ARMOR_BALLISTIC_MINOR, - laser = ARMOR_LASER_MINOR, - energy = ARMOR_ENERGY_SMALL, - bomb = ARMOR_BOMB_MINOR, - bio = ARMOR_BIO_SHIELDED, - rad = ARMOR_RAD_SHIELDED - ) - online_slowdown = 0.75 - offline_vision_restriction = TINT_HEAVY - - chest_type = /obj/item/clothing/suit/space/rig/eva - helm_type = /obj/item/clothing/head/helmet/space/rig/eva - boot_type = /obj/item/clothing/shoes/magboots/rig/eva - glove_type = /obj/item/clothing/gloves/rig/eva - - req_access = list(access_engine_equip) - - sprite_sheets = list( - SPECIES_UNATHI = 'icons/mob/species/unathi/generated/onmob_rig_back_unathi.dmi' - ) - -/obj/item/clothing/head/helmet/space/rig/eva - light_overlay = "helmet_light_alt" - camera = /obj/machinery/camera/network/engineering - species_restricted = list(SPECIES_HUMAN,SPECIES_SKRELL,SPECIES_UNATHI,SPECIES_IPC, SPECIES_SHELL) - sprite_sheets = list( - SPECIES_SKRELL = 'icons/mob/species/skrell/onmob_head_skrell.dmi', - SPECIES_UNATHI = 'icons/mob/species/unathi/onmob_head_helmet_unathi.dmi' - ) - -/obj/item/clothing/suit/space/rig/eva - species_restricted = list(SPECIES_HUMAN,SPECIES_SKRELL,SPECIES_UNATHI,SPECIES_IPC, SPECIES_SHELL) - sprite_sheets = list( - SPECIES_UNATHI = 'icons/mob/species/unathi/generated/onmob_suit_unathi.dmi' - ) - allowed = list( - /obj/item/device/flashlight, - /obj/item/tank, - /obj/item/device/suit_cooling_unit, - /obj/item/storage/toolbox, - /obj/item/storage/briefcase/inflatable, - /obj/item/inflatable_dispenser, - /obj/item/device/t_scanner, - /obj/item/rcd, - /obj/item/rpd - ) - -/obj/item/clothing/shoes/magboots/rig/eva - species_restricted = list(SPECIES_HUMAN,SPECIES_SKRELL,SPECIES_UNATHI,SPECIES_IPC, SPECIES_SHELL) - sprite_sheets = list( - SPECIES_UNATHI = 'icons/mob/species/unathi/generated/onmob_feet_unathi.dmi' - ) - -/obj/item/clothing/gloves/rig/eva - species_restricted = list(SPECIES_HUMAN,SPECIES_SKRELL,SPECIES_UNATHI,SPECIES_IPC, SPECIES_SHELL) - siemens_coefficient = 0 - sprite_sheets = list( - SPECIES_UNATHI = 'icons/mob/species/unathi/generated/onmob_hands_unathi.dmi' - ) - -/obj/item/rig/eva/equipped - - initial_modules = list( - /obj/item/rig_module/mounted/plasmacutter, - /obj/item/rig_module/maneuvering_jets, - /obj/item/rig_module/device/rcd, - /obj/item/rig_module/vision/meson, - /obj/item/rig_module/cooling_unit - ) - -/obj/item/rig/ce - name = "advanced engineering hardsuit control module" - suit_type = "engineering hardsuit" - desc = "An advanced hardsuit that protects against hazardous, low pressure environments. Shines with a high polish. Appears compatible with the physiology of most species." - icon_state = "ce_rig" - armor = list( - melee = ARMOR_MELEE_RESISTANT, - bullet = ARMOR_BALLISTIC_SMALL, - laser = ARMOR_LASER_SMALL, - energy = ARMOR_ENERGY_SMALL, - bomb = ARMOR_BOMB_PADDED, - bio = ARMOR_BIO_SHIELDED, - rad = ARMOR_RAD_SHIELDED - ) - online_slowdown = 0.75 - offline_vision_restriction = TINT_HEAVY - max_heat_protection_temperature = FIRESUIT_MAX_HEAT_PROTECTION_TEMPERATURE // this is passed to the rig suit components when deployed, including the helmet. - - chest_type = /obj/item/clothing/suit/space/rig/ce - helm_type = /obj/item/clothing/head/helmet/space/rig/ce - glove_type = /obj/item/clothing/gloves/rig/ce - - req_access = list(access_ce) - max_pressure_protection = FIRESUIT_MAX_PRESSURE - min_pressure_protection = 0 - -/obj/item/rig/ce/equipped - - initial_modules = list( - /obj/item/rig_module/ai_container, - /obj/item/rig_module/maneuvering_jets, - /obj/item/rig_module/mounted/plasmacutter, - /obj/item/rig_module/device/rcd, - /obj/item/rig_module/device/flash, - /obj/item/rig_module/vision/meson, - /obj/item/rig_module/grenade_launcher/mfoam, - /obj/item/rig_module/cooling_unit - ) - -/obj/item/clothing/head/helmet/space/rig/ce - light_overlay = "helmet_light_alt" - camera = /obj/machinery/camera/network/engineering - species_restricted = list(SPECIES_HUMAN,SPECIES_SKRELL,SPECIES_UNATHI,SPECIES_IPC) - sprite_sheets = list( - SPECIES_UNATHI = 'icons/mob/species/unathi/onmob_head_helmet_unathi.dmi', - SPECIES_SKRELL = 'icons/mob/species/skrell/onmob_head_skrell.dmi' - ) -/obj/item/clothing/suit/space/rig/ce - species_restricted = list(SPECIES_HUMAN,SPECIES_SKRELL,SPECIES_UNATHI,SPECIES_IPC) - sprite_sheets = list( - SPECIES_UNATHI = 'icons/mob/species/unathi/onmob_suit_unathi.dmi' - ) - allowed = list( - /obj/item/gun, - /obj/item/device/flashlight, - /obj/item/tank, - /obj/item/device/suit_cooling_unit, - /obj/item/storage/ore, - /obj/item/storage/toolbox, - /obj/item/storage/briefcase/inflatable, - /obj/item/inflatable_dispenser, - /obj/item/device/t_scanner, - /obj/item/pickaxe, - /obj/item/rcd, - /obj/item/rpd - ) -/obj/item/clothing/shoes/magboots/rig/ce - species_restricted = list(SPECIES_HUMAN,SPECIES_SKRELL,SPECIES_UNATHI,SPECIES_IPC) - sprite_sheets = list( - SPECIES_UNATHI = 'icons/mob/species/unathi/generated/onmob_feet_unathi.dmi' - ) -/obj/item/clothing/gloves/rig/ce - siemens_coefficient = 0 - -/obj/item/rig/hazmat - name = "\improper AMI control module" - suit_type = "hazmat hardsuit" - desc = "An Anomalous Material Interaction hardsuit, a cutting-edge NanoTrasen design, protects the wearer against the strangest energies the universe can throw at it." - icon_state = "science_rig" - armor = list( - melee = ARMOR_MELEE_RESISTANT, - bullet = ARMOR_BALLISTIC_MINOR, - laser = ARMOR_LASER_HANDGUNS, - energy = ARMOR_ENERGY_STRONG, - bomb = ARMOR_BOMB_RESISTANT, - bio = ARMOR_BIO_SHIELDED, - rad = ARMOR_RAD_SHIELDED - ) - offline_vision_restriction = TINT_HEAVY - - chest_type = /obj/item/clothing/suit/space/rig/hazmat - helm_type = /obj/item/clothing/head/helmet/space/rig/hazmat - boot_type = /obj/item/clothing/shoes/magboots/rig/hazmat - glove_type = /obj/item/clothing/gloves/rig/hazmat - - req_access = list(access_tox) - -/obj/item/clothing/head/helmet/space/rig/hazmat - light_overlay = "helmet_light_dual" - camera = /obj/machinery/camera/network/research - species_restricted = list(SPECIES_HUMAN,SPECIES_SKRELL,SPECIES_UNATHI,SPECIES_IPC, SPECIES_SHELL) - -/obj/item/clothing/suit/space/rig/hazmat - species_restricted = list(SPECIES_HUMAN,SPECIES_SKRELL,SPECIES_UNATHI,SPECIES_IPC, SPECIES_SHELL) - -/obj/item/clothing/shoes/magboots/rig/hazmat - species_restricted = list(SPECIES_HUMAN,SPECIES_SKRELL,SPECIES_UNATHI,SPECIES_IPC, SPECIES_SHELL) - -/obj/item/clothing/gloves/rig/hazmat - species_restricted = list(SPECIES_HUMAN,SPECIES_SKRELL,SPECIES_UNATHI,SPECIES_IPC, SPECIES_SHELL) - -/obj/item/rig/hazmat/equipped - - initial_modules = list( - /obj/item/rig_module/ai_container, - /obj/item/rig_module/maneuvering_jets, - /obj/item/rig_module/device/anomaly_scanner, - /obj/item/rig_module/cooling_unit, - ) - -/obj/item/rig/medical - name = "rescue suit control module" - suit_type = "rescue hardsuit" - desc = "A durable suit designed for medical rescue in high risk areas." - icon_state = "medical_rig" - armor = list( - melee = ARMOR_MELEE_RESISTANT, - bullet = ARMOR_BALLISTIC_MINOR, - laser = ARMOR_LASER_SMALL, - energy = ARMOR_ENERGY_RESISTANT, - bomb = ARMOR_BOMB_PADDED, - bio = ARMOR_BIO_SHIELDED, - rad = ARMOR_RAD_SHIELDED - ) - online_slowdown = 0.5 - offline_vision_restriction = TINT_HEAVY - - chest_type = /obj/item/clothing/suit/space/rig/medical - helm_type = /obj/item/clothing/head/helmet/space/rig/medical - boot_type = /obj/item/clothing/shoes/magboots/rig/medical - glove_type = /obj/item/clothing/gloves/rig/medical - - req_access = list(access_medical_equip) - -/obj/item/clothing/head/helmet/space/rig/medical - light_overlay = "helmet_light_wide" - camera = /obj/machinery/camera/network/medbay - species_restricted = list(SPECIES_HUMAN, SPECIES_UNATHI, SPECIES_SKRELL, SPECIES_IPC, SPECIES_SHELL) - sprite_sheets = list( - SPECIES_UNATHI = 'icons/mob/species/unathi/onmob_head_helmet_unathi.dmi', - SPECIES_SKRELL = 'icons/mob/species/skrell/onmob_head_skrell.dmi', - ) - -/obj/item/clothing/suit/space/rig/medical - species_restricted = list(SPECIES_HUMAN,SPECIES_SKRELL, SPECIES_UNATHI, SPECIES_IPC, SPECIES_SHELL) - sprite_sheets = list( - SPECIES_UNATHI = 'icons/mob/species/unathi/generated/onmob_suit_unathi.dmi' - ) - -/obj/item/clothing/shoes/magboots/rig/medical - species_restricted = list(SPECIES_HUMAN,SPECIES_SKRELL, SPECIES_UNATHI, SPECIES_IPC, SPECIES_SHELL) - sprite_sheets = list( - SPECIES_UNATHI = 'icons/mob/species/unathi/generated/onmob_feet_unathi.dmi' - ) - -/obj/item/clothing/gloves/rig/medical - species_restricted = list(SPECIES_HUMAN,SPECIES_SKRELL, SPECIES_UNATHI, SPECIES_IPC, SPECIES_SHELL) - sprite_sheets = list( - SPECIES_UNATHI = 'icons/mob/species/unathi/generated/onmob_hands_unathi.dmi' - ) - -/obj/item/rig/medical/equipped - - initial_modules = list( - /obj/item/rig_module/chem_dispenser/injector, - /obj/item/rig_module/maneuvering_jets, - /obj/item/rig_module/device/healthscanner, - /obj/item/rig_module/vision/medhud, - /obj/item/rig_module/device/defib, - /obj/item/rig_module/cooling_unit - ) - -/obj/item/rig/hazard - name = "hazard hardsuit control module" - suit_type = "hazard hardsuit" - desc = "A security hardsuit designed for prolonged EVA in dangerous environments." - icon_state = "hazard_rig" - armor = list( - melee = ARMOR_MELEE_MAJOR, - bullet = ARMOR_BALLISTIC_PISTOL, - laser = ARMOR_LASER_HANDGUNS, - energy = ARMOR_ENERGY_MINOR, - bomb = ARMOR_BOMB_RESISTANT, - bio = ARMOR_BIO_SHIELDED, - rad = ARMOR_RAD_MINOR - ) - offline_vision_restriction = TINT_BLIND - - chest_type = /obj/item/clothing/suit/space/rig/hazard - helm_type = /obj/item/clothing/head/helmet/space/rig/hazard - boot_type = /obj/item/clothing/shoes/magboots/rig/hazard - glove_type = /obj/item/clothing/gloves/rig/hazard - -/obj/item/clothing/head/helmet/space/rig/hazard - light_overlay = "helmet_light_dual" - camera = /obj/machinery/camera/network/security - species_restricted = list(SPECIES_HUMAN,SPECIES_SKRELL,SPECIES_UNATHI, SPECIES_IPC, SPECIES_SHELL) - -/obj/item/clothing/suit/space/rig/hazard - species_restricted = list(SPECIES_HUMAN,SPECIES_SKRELL,SPECIES_UNATHI, SPECIES_IPC, SPECIES_SHELL) - -/obj/item/clothing/shoes/magboots/rig/hazard - species_restricted = list(SPECIES_HUMAN,SPECIES_SKRELL,SPECIES_UNATHI, SPECIES_IPC, SPECIES_SHELL) - -/obj/item/clothing/gloves/rig/hazard - species_restricted = list(SPECIES_HUMAN,SPECIES_SKRELL,SPECIES_UNATHI, SPECIES_IPC, SPECIES_SHELL) - -/obj/item/rig/hazard/equipped - - initial_modules = list( - /obj/item/rig_module/vision/sechud, - /obj/item/rig_module/maneuvering_jets, - /obj/item/rig_module/grenade_launcher, - /obj/item/rig_module/mounted/taser, - /obj/item/rig_module/cooling_unit - ) - -/obj/item/rig/zero - name = "null suit control module" - suit_type = "null hardsuit" - desc = "A very lightweight suit designed to allow use inside mechs and starfighters. It feels like you're wearing nothing at all." - icon_state = "null_rig" - armor = list( - bio = ARMOR_BIO_SHIELDED, - rad = ARMOR_RAD_MINOR - ) - online_slowdown = 0 - offline_slowdown = 1 - offline_vision_restriction = TINT_HEAVY //You're wearing a flash protective space suit without light compensation, think it makes sense - - //Bans the most common combat items, idea is that this isn't a mass built shouldergun rig. - banned_modules = list( - /obj/item/rig_module/grenade_launcher, - /obj/item/rig_module/mounted, - /obj/item/rig_module/fabricator - ) - - chest_type = /obj/item/clothing/suit/space/rig/zero - helm_type = /obj/item/clothing/head/helmet/space/rig/zero - boot_type = null - glove_type = null - max_pressure_protection = null - min_pressure_protection = 0 - - req_access = list() - -/obj/item/clothing/head/helmet/space/rig/zero - camera = null - species_restricted = list(SPECIES_HUMAN, SPECIES_UNATHI, SPECIES_SKRELL, SPECIES_IPC, SPECIES_SHELL) - light_overlay = "null_light" - desc = "A bubble helmet that maximizes the field of view. A state of the art holographic display provides a stream of information." - -//All in one suit -/obj/item/clothing/suit/space/rig/zero - species_restricted = list(SPECIES_HUMAN,SPECIES_SKRELL, SPECIES_UNATHI, SPECIES_IPC, SPECIES_SHELL) - sprite_sheets = list( - SPECIES_UNATHI = 'icons/mob/species/unathi/generated/onmob_suit_unathi.dmi' - ) - breach_threshold = 18 - body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS - allowed = list( - /obj/item/device/flashlight, - /obj/item/tank, - /obj/item/device/suit_cooling_unit - ) - -/obj/item/rig/zero/on_update_icon(var/update_mob_icon) - ..() - //Append the f for female states - if(!ishuman(loc)) - return - var/mob/living/carbon/human/user = loc - if(!chest) return - //If there's a better way to do this with current rig setup tell me - //Do not further append if current state already indicates gender - if(user.gender == FEMALE && !findtext(chest.icon_state,"_f", -2)) - chest.icon_state = "[chest.icon_state]_f" - chest.update_icon(1) diff --git a/code/modules/clothing/spacesuits/rig/suits/vox.dm b/code/modules/clothing/spacesuits/rig/suits/vox.dm deleted file mode 100644 index a789486360aee..0000000000000 --- a/code/modules/clothing/spacesuits/rig/suits/vox.dm +++ /dev/null @@ -1,57 +0,0 @@ -/obj/item/rig/vox - name = "alien rig control module" - desc = "A strange rig. Parts of it writhe and squirm as if alive. The visor looks more like a thick membrane." - suit_type = "alien rig" - icon_state = "vox_rig" - armor = list( - melee = ARMOR_MELEE_MAJOR, - bullet = ARMOR_BALLISTIC_RESISTANT, - laser = ARMOR_LASER_HANDGUNS, - energy = ARMOR_ENERGY_RESISTANT, - bomb = ARMOR_BOMB_PADDED, - bio = ARMOR_BIO_SHIELDED, - rad = ARMOR_RAD_SHIELDED - ) - max_heat_protection_temperature = FIRESUIT_MAX_HEAT_PROTECTION_TEMPERATURE - max_pressure_protection = FIRESUIT_MAX_PRESSURE - - chest_type = /obj/item/clothing/suit/space/rig/vox_rig - helm_type = /obj/item/clothing/head/helmet/space/rig/vox_rig - boot_type = /obj/item/clothing/shoes/magboots/rig/vox_rig - glove_type = /obj/item/clothing/gloves/rig/vox_rig - air_type = /obj/item/tank/nitrogen - - online_slowdown = 0.75 - - initial_modules = list( - /obj/item/rig_module/vision/meson, - /obj/item/rig_module/mounted/plasmacutter, - /obj/item/rig_module/maneuvering_jets, - /obj/item/rig_module/power_sink, - /obj/item/rig_module/cooling_unit - ) - -/obj/item/clothing/head/helmet/space/rig/vox_rig - species_restricted = list(SPECIES_VOX) - -/obj/item/clothing/suit/space/rig/vox_rig - species_restricted = list(SPECIES_VOX) - allowed = list( - /obj/item/device/flashlight, - /obj/item/tank, - /obj/item/ammo_magazine, - /obj/item/ammo_casing, - /obj/item/ammo_magazine/shotholder, - /obj/item/handcuffs, - /obj/item/device/radio, - /obj/item/melee/baton, - /obj/item/gun, - /obj/item/pickaxe - ) - -/obj/item/clothing/shoes/magboots/rig/vox_rig - species_restricted = list(SPECIES_VOX) - -/obj/item/clothing/gloves/rig/vox_rig - species_restricted = list(SPECIES_VOX) - siemens_coefficient = 0 diff --git a/code/modules/clothing/spacesuits/spacesuits.dm b/code/modules/clothing/spacesuits/spacesuits.dm deleted file mode 100644 index f27ed8cf3b875..0000000000000 --- a/code/modules/clothing/spacesuits/spacesuits.dm +++ /dev/null @@ -1,166 +0,0 @@ -//Spacesuit -//Note: Everything in modules/clothing/spacesuits should have the entire suit grouped together. -// Meaning the the suit is defined directly after the corrisponding helmet. Just like below! - -/obj/item/clothing/head/helmet/space - name = "Space helmet" - icon_state = "space" - desc = "A special helmet designed for work in a hazardous, low-pressure environment." - item_flags = ITEM_FLAG_THICKMATERIAL | ITEM_FLAG_AIRTIGHT - flags_inv = BLOCKHAIR - item_state_slots = list( - slot_l_hand_str = "s_helmet", - slot_r_hand_str = "s_helmet", - ) - permeability_coefficient = 0 - armor = list( - bio = ARMOR_BIO_SHIELDED, - rad = ARMOR_RAD_SMALL - ) - valid_accessory_slots = null - flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE|BLOCKHAIR - body_parts_covered = HEAD|FACE|EYES - cold_protection = HEAD - min_cold_protection_temperature = SPACE_HELMET_MIN_COLD_PROTECTION_TEMPERATURE - min_pressure_protection = 0 - max_pressure_protection = SPACE_SUIT_MAX_PRESSURE - siemens_coefficient = 0.9 - randpixel = 0 - species_restricted = list("exclude", SPECIES_NABBER, SPECIES_DIONA) - flash_protection = FLASH_PROTECTION_MAJOR - - var/obj/machinery/camera/camera - - action_button_name = "Toggle Helmet Light" - light_overlay = "helmet_light" - brightness_on = 0.5 - on = 0 - - var/tinted = null //Set to non-null for toggleable tint helmets - -/obj/item/clothing/head/helmet/space/Destroy() - if(camera && !ispath(camera)) - QDEL_NULL(camera) - . = ..() - -/obj/item/clothing/head/helmet/space/Initialize() - . = ..() - if(camera) - verbs += /obj/item/clothing/head/helmet/space/proc/toggle_camera - if(!isnull(tinted)) - verbs += /obj/item/clothing/head/helmet/space/proc/toggle_tint - update_tint() - -/obj/item/clothing/head/helmet/space/proc/toggle_camera() - set name = "Toggle Helmet Camera" - set category = "Object" - set src in usr - - if(ispath(camera)) - camera = new camera(src) - camera.set_status(0) - camera.is_helmet_cam = TRUE - - if(camera) - camera.set_status(!camera.status) - if(camera.status) - camera.c_tag = FindNameFromID(usr) - to_chat(usr, "User scanned as [camera.c_tag]. Camera activated.") - else - to_chat(usr, "Camera deactivated.") - -/obj/item/clothing/head/helmet/space/examine(mob/user, distance) - . = ..() - if(distance <= 1 && camera) - to_chat(user, "This helmet has a built-in camera. Its [!ispath(camera) && camera.status ? "" : "in"]active.") - -/obj/item/clothing/head/helmet/space/proc/update_tint() - if(tinted) - icon_state = "[initial(icon_state)]_dark" - item_state = "[initial(item_state)]_dark" - flash_protection = FLASH_PROTECTION_MAJOR - flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE|BLOCKHAIR - tint = TINT_MODERATE - else - icon_state = initial(icon_state) - item_state = initial(item_state) - flash_protection = FLASH_PROTECTION_NONE - flags_inv = HIDEEARS|BLOCKHAIR - tint = TINT_NONE - update_icon() - update_clothing_icon() - -/obj/item/clothing/head/helmet/space/proc/toggle_tint() - set name = "Toggle Helmet Tint" - set category = "Object" - set src in usr - - var/mob/user = usr - if(istype(user) && user.incapacitated()) - return - - tinted = !tinted - to_chat(usr, "You toggle [src]'s visor tint.") - update_tint() - -/obj/item/clothing/suit/space - name = "Space suit" - desc = "A suit that protects against low pressure environments." - icon_state = "space" - item_icons = list( - slot_l_hand_str = 'icons/mob/onmob/items/lefthand_spacesuits.dmi', - slot_r_hand_str = 'icons/mob/onmob/items/righthand_spacesuits.dmi', - ) - item_state_slots = list( - slot_l_hand_str = "s_suit", - slot_r_hand_str = "s_suit", - ) - w_class = ITEM_SIZE_LARGE//large item - gas_transfer_coefficient = 0 - permeability_coefficient = 0 - item_flags = ITEM_FLAG_THICKMATERIAL - body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS - allowed = list( - /obj/item/device/flashlight, - /obj/item/tank/oxygen_emergency, - /obj/item/tank/oxygen_emergency_extended, - /obj/item/tank/nitrogen_emergency, - /obj/item/device/suit_cooling_unit - ) - armor = list( - bio = ARMOR_BIO_SHIELDED, - rad = ARMOR_RAD_SMALL - ) - flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT|HIDETAIL - cold_protection = UPPER_TORSO | LOWER_TORSO | LEGS | FEET | ARMS | HANDS - min_cold_protection_temperature = SPACE_SUIT_MIN_COLD_PROTECTION_TEMPERATURE - min_pressure_protection = 0 - max_pressure_protection = SPACE_SUIT_MAX_PRESSURE - siemens_coefficient = 0.9 - randpixel = 0 - species_restricted = list("exclude", SPECIES_NABBER, SPECIES_DIONA) - valid_accessory_slots = list(ACCESSORY_SLOT_INSIGNIA) - equip_delay = 5 SECONDS - - -/obj/item/clothing/suit/space/equip_delay_before(mob/user, slot, equip_flags) - user.setClickCooldown(1 SECOND) - user.visible_message( - SPAN_ITALIC("\The [user] begins to struggle into \the [src]."), - SPAN_ITALIC("You begin to struggle into \the [src]."), - SPAN_ITALIC("You can hear metal clicking and fabric rustling."), - range = 5 - ) - - -/obj/item/clothing/suit/space/equip_delay_after(mob/user, slot, equip_flags) - user.visible_message( - SPAN_ITALIC("\The [user] finishes putting on \the [src]."), - SPAN_NOTICE("You finish putting on \the [src]."), - range = 5 - ) - - -/obj/item/clothing/suit/space/Initialize() - . = ..() - slowdown_per_slot[slot_wear_suit] = 0.5 diff --git a/code/modules/clothing/spacesuits/syndi.dm b/code/modules/clothing/spacesuits/syndi.dm deleted file mode 100644 index 67ad50232aacd..0000000000000 --- a/code/modules/clothing/spacesuits/syndi.dm +++ /dev/null @@ -1,64 +0,0 @@ -//Regular syndicate space suit -/obj/item/clothing/head/helmet/space/syndicate - name = "red space helmet" - icon_state = "syndicate" - item_state = "syndicate" - desc = "A crimson helmet sporting clean lines and durable plating. Engineered to look menacing." - armor = list( - melee = ARMOR_MELEE_MAJOR, - bullet = ARMOR_BALLISTIC_RESISTANT, - laser = ARMOR_LASER_HANDGUNS, - energy = ARMOR_ENERGY_MINOR, - bomb = ARMOR_BOMB_PADDED, - bio = ARMOR_BIO_SMALL, - rad = ARMOR_RAD_MINOR - ) - siemens_coefficient = 0.3 - -/obj/item/clothing/suit/space/syndicate - name = "red space suit" - icon_state = "syndicate" - item_state_slots = list( - slot_l_hand_str = "space_suit_syndicate", - slot_r_hand_str = "space_suit_syndicate", - ) - desc = "A crimson spacesuit sporting clean lines and durable plating. Robust, reliable, and slightly suspicious." - w_class = ITEM_SIZE_NORMAL - allowed = list( - /obj/item/gun, - /obj/item/ammo_magazine, - /obj/item/ammo_casing, - /obj/item/melee/baton, - /obj/item/melee/energy/sword, - /obj/item/handcuffs, - /obj/item/tank/oxygen_emergency, - /obj/item/tank/oxygen_emergency_extended, - /obj/item/tank/nitrogen_emergency - ) - armor = list( - melee = ARMOR_MELEE_MAJOR, - bullet = ARMOR_BALLISTIC_RESISTANT, - laser = ARMOR_LASER_HANDGUNS, - energy = ARMOR_ENERGY_MINOR, - bomb = ARMOR_BOMB_PADDED, - bio = ARMOR_BIO_SMALL, - rad = ARMOR_RAD_MINOR - ) - siemens_coefficient = 0.3 - - -//Black syndicate space suit -/obj/item/clothing/head/helmet/space/syndicate/black - name = "black space helmet" - desc = "A black helmet sporting clean lines and durable plating." - icon_state = "syndicate-helm-black" - item_state = "syndicate-helm-black" - -/obj/item/clothing/suit/space/syndicate/black - name = "black space suit" - desc = "A black spacesuit sporting clean lines and durable plating." - icon_state = "syndicate-black" - item_state_slots = list( - slot_l_hand_str = "syndicate-black", - slot_r_hand_str = "syndicate-black", - ) diff --git a/code/modules/clothing/spacesuits/void/merc.dm b/code/modules/clothing/spacesuits/void/merc.dm deleted file mode 100644 index acaa9d284fcf4..0000000000000 --- a/code/modules/clothing/spacesuits/void/merc.dm +++ /dev/null @@ -1,66 +0,0 @@ -//Syndicate rig -/obj/item/clothing/head/helmet/space/void/merc - name = "blood-red voidsuit helmet" - desc = "An advanced helmet designed for work in special operations. Property of Gorlex Marauders." - icon_state = "rig0-syndie" - item_state = "syndie_helm" - armor = list( - melee = ARMOR_MELEE_RESISTANT, - bullet = ARMOR_BALLISTIC_RESISTANT, - laser = ARMOR_LASER_MAJOR, - energy = ARMOR_ENERGY_MINOR, - bomb = ARMOR_BOMB_PADDED, - bio = ARMOR_BIO_SHIELDED, - rad = ARMOR_RAD_SMALL - ) - siemens_coefficient = 0.3 - species_restricted = list(SPECIES_HUMAN,SPECIES_SKRELL,SPECIES_UNATHI,SPECIES_IPC, SPECIES_VOX, SPECIES_SHELL) - sprite_sheets = list( - SPECIES_SKRELL = 'icons/mob/species/skrell/onmob_head_skrell.dmi', - SPECIES_UNATHI = 'icons/mob/species/unathi/onmob_head_helmet_unathi.dmi', - SPECIES_VOX = 'icons/mob/species/vox/onmob_head_vox.dmi' - ) - sprite_sheets_obj = list( - SPECIES_UNATHI = 'icons/obj/clothing/species/unathi/obj_head_unathi.dmi', - SPECIES_SKRELL = 'icons/obj/clothing/species/skrell/obj_head_skrell.dmi', - SPECIES_VOX = 'icons/obj/clothing/species/vox/obj_head_vox.dmi' - ) - camera = /obj/machinery/camera/network/mercenary - light_overlay = "explorer_light" - -/obj/item/clothing/suit/space/void/merc - icon_state = "rig-syndie" - name = "blood-red voidsuit" - desc = "An advanced suit that protects against injuries during special operations. Property of Gorlex Marauders." - item_state_slots = list( - slot_l_hand_str = "syndie_voidsuit", - slot_r_hand_str = "syndie_voidsuit", - ) - w_class = ITEM_SIZE_LARGE //normally voidsuits are bulky but the merc voidsuit is 'advanced' or something - armor = list( - melee = ARMOR_MELEE_RESISTANT, - bullet = ARMOR_BALLISTIC_RESISTANT, - laser = ARMOR_LASER_MAJOR, - energy = ARMOR_ENERGY_MINOR, - bomb = ARMOR_BOMB_PADDED, - bio = ARMOR_BIO_SHIELDED, - rad = ARMOR_RAD_SMALL - ) - allowed = list(/obj/item/device/flashlight,/obj/item/tank,/obj/item/device/suit_cooling_unit,/obj/item/gun,/obj/item/ammo_magazine,/obj/item/ammo_casing,/obj/item/melee/baton,/obj/item/melee/energy/sword,/obj/item/handcuffs) - siemens_coefficient = 0.3 - species_restricted = list(SPECIES_HUMAN,SPECIES_SKRELL,SPECIES_UNATHI,SPECIES_IPC, SPECIES_VOX, SPECIES_SHELL) - sprite_sheets = list( - SPECIES_UNATHI = 'icons/mob/species/unathi/generated/onmob_suit_unathi.dmi', - SPECIES_VOX = 'icons/mob/species/vox/onmob_suit_vox.dmi' - ) - sprite_sheets_obj = list( - SPECIES_UNATHI = 'icons/obj/clothing/species/unathi/obj_suit_unathi.dmi', - SPECIES_SKRELL = 'icons/obj/clothing/species/skrell/obj_suit_skrell.dmi', - SPECIES_VOX = 'icons/obj/clothing/species/vox/obj_suit_vox.dmi' - ) - - -/obj/item/clothing/suit/space/void/merc/prepared - helmet = /obj/item/clothing/head/helmet/space/void/merc - boots = /obj/item/clothing/shoes/magboots - tank = /obj/item/tank/oxygen diff --git a/code/modules/clothing/spacesuits/void/misc.dm b/code/modules/clothing/spacesuits/void/misc.dm deleted file mode 100644 index 61a40eeea5933..0000000000000 --- a/code/modules/clothing/spacesuits/void/misc.dm +++ /dev/null @@ -1,63 +0,0 @@ - -/obj/item/clothing/suit/space/void/swat - name = "\improper SWAT suit" - desc = "A heavily armored suit that protects against moderate damage. Used in special operations." - icon_state = "deathsquad" - body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS - allowed = list(/obj/item/gun,/obj/item/ammo_magazine,/obj/item/ammo_casing,/obj/item/melee/baton,/obj/item/handcuffs,/obj/item/tank) - armor = list( - melee = ARMOR_MELEE_RESISTANT, - bullet = ARMOR_BALLISTIC_RESISTANT, - laser = ARMOR_LASER_MAJOR, - energy = ARMOR_ENERGY_MINOR, - bomb = ARMOR_BOMB_PADDED, - bio = ARMOR_BIO_SHIELDED, - rad = ARMOR_RAD_SMALL - ) - flags_inv = HIDESHOES|HIDEJUMPSUIT - siemens_coefficient = 0.6 - -//Skrell space gear. Sleek like a wetsuit. -/obj/item/clothing/head/helmet/space/void/skrell - name = "Skrellian helmet" - desc = "Smoothly contoured and polished to a shine. Still looks like a fishbowl." - armor = list( - melee = ARMOR_MELEE_KNIVES, - bullet = ARMOR_BALLISTIC_PISTOL, - laser = ARMOR_LASER_MAJOR, - energy = ARMOR_ENERGY_STRONG, - bomb = ARMOR_BOMB_RESISTANT, - bio = ARMOR_BIO_SHIELDED, - rad = ARMOR_RAD_SHIELDED - ) - max_heat_protection_temperature = SPACE_SUIT_MAX_HEAT_PROTECTION_TEMPERATURE - species_restricted = list(SPECIES_SKRELL,SPECIES_HUMAN, SPECIES_SHELL) - -/obj/item/clothing/head/helmet/space/void/skrell/white - icon_state = "skrell_helmet_white" - -/obj/item/clothing/head/helmet/space/void/skrell/black - icon_state = "skrell_helmet_black" - -/obj/item/clothing/suit/space/void/skrell - name = "Skrellian voidsuit" - desc = "Seems like a wetsuit with reinforced plating seamlessly attached to it. Very chic." - armor = list( - melee = ARMOR_MELEE_KNIVES, - bullet = ARMOR_BALLISTIC_PISTOL, - laser = ARMOR_LASER_MAJOR, - energy = ARMOR_ENERGY_STRONG, - bomb = ARMOR_BOMB_RESISTANT, - bio = ARMOR_BIO_SHIELDED, - rad = ARMOR_RAD_SHIELDED - ) - allowed = list(/obj/item/device/flashlight,/obj/item/tank,/obj/item/storage/ore,/obj/item/device/t_scanner,/obj/item/pickaxe,/obj/item/rcd,/obj/item/rpd) - heat_protection = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS - max_heat_protection_temperature = SPACE_SUIT_MAX_HEAT_PROTECTION_TEMPERATURE - species_restricted = list(SPECIES_SKRELL,SPECIES_HUMAN, SPECIES_SHELL) - -/obj/item/clothing/suit/space/void/skrell/white - icon_state = "skrell_suit_white" - -/obj/item/clothing/suit/space/void/skrell/black - icon_state = "skrell_suit_black" \ No newline at end of file diff --git a/code/modules/clothing/spacesuits/void/station.dm b/code/modules/clothing/spacesuits/void/station.dm deleted file mode 100644 index 20f84ea4d7e76..0000000000000 --- a/code/modules/clothing/spacesuits/void/station.dm +++ /dev/null @@ -1,486 +0,0 @@ -// Station voidsuits - -//Engineering -/obj/item/clothing/head/helmet/space/void/engineering - name = "engineering voidsuit helmet" - desc = "A sturdy looking voidsuit helmet rated to protect against radiation." - icon_state = "rig0-engineering" - item_state = "eng_helm" - item_state_slots = list( - slot_l_hand_str = "eng_helm", - slot_r_hand_str = "eng_helm", - ) - armor = list( - melee = ARMOR_MELEE_RESISTANT, - bullet = ARMOR_BALLISTIC_MINOR, - laser = ARMOR_LASER_MINOR, - bomb = ARMOR_BOMB_PADDED, - bio = ARMOR_BIO_SHIELDED, - rad = ARMOR_RAD_RESISTANT - ) - max_pressure_protection = ENG_VOIDSUIT_MAX_PRESSURE - siemens_coefficient = 0.3 - -/obj/item/clothing/suit/space/void/engineering - name = "engineering voidsuit" - desc = "A run-of-the-mill service voidsuit with all the plating and radiation protection required for industrial work in vacuum." - icon_state = "rig-engineering" - item_state_slots = list( - slot_l_hand_str = "eng_voidsuit", - slot_r_hand_str = "eng_voidsuit", - ) - max_pressure_protection = ENG_VOIDSUIT_MAX_PRESSURE - siemens_coefficient = 0.3 - armor = list( - melee = ARMOR_MELEE_RESISTANT, - bullet = ARMOR_BALLISTIC_MINOR, - laser = ARMOR_LASER_MINOR, - bomb = ARMOR_BOMB_PADDED, - bio = ARMOR_BIO_SHIELDED, - rad = ARMOR_RAD_RESISTANT - ) - allowed = list(/obj/item/device/flashlight,/obj/item/tank,/obj/item/device/suit_cooling_unit,/obj/item/storage/toolbox,/obj/item/storage/briefcase/inflatable,/obj/item/device/t_scanner,/obj/item/rcd,/obj/item/rpd) - -/obj/item/clothing/suit/space/void/engineering/prepared - helmet = /obj/item/clothing/head/helmet/space/void/engineering - boots = /obj/item/clothing/shoes/magboots - -//Mining -/obj/item/clothing/head/helmet/space/void/mining - name = "mining voidsuit helmet" - desc = "A scuffed voidsuit helmet with a boosted communication system and reinforced armor plating." - icon_state = "rig0-mining" - item_state = "mining_helm" - item_state_slots = list( - slot_l_hand_str = "mining_helm", - slot_r_hand_str = "mining_helm", - ) - armor = list( - melee = ARMOR_MELEE_KNIVES, - bullet = ARMOR_BALLISTIC_MINOR, - laser = ARMOR_LASER_MINOR, - bomb = ARMOR_BOMB_PADDED, - bio = ARMOR_BIO_SHIELDED, - rad = ARMOR_RAD_MINOR - ) - light_overlay = "helmet_light_dual_alt" - max_pressure_protection = ENG_VOIDSUIT_MAX_PRESSURE - -/obj/item/clothing/suit/space/void/mining - icon_state = "rig-mining" - name = "mining voidsuit" - desc = "A grimy, decently armored voidsuit with purple blazes and extra insulation." - item_state_slots = list( - slot_l_hand_str = "mining_voidsuit", - slot_r_hand_str = "mining_voidsuit", - ) - armor = list( - melee = ARMOR_MELEE_KNIVES, - bullet = ARMOR_BALLISTIC_MINOR, - laser = ARMOR_LASER_MINOR, - bomb = ARMOR_BOMB_PADDED, - bio = ARMOR_BIO_SHIELDED, - rad = ARMOR_RAD_MINOR - ) - max_pressure_protection = ENG_VOIDSUIT_MAX_PRESSURE - allowed = list(/obj/item/device/flashlight,/obj/item/tank,/obj/item/stack/flag,/obj/item/device/suit_cooling_unit,/obj/item/storage/ore,/obj/item/device/t_scanner,/obj/item/pickaxe, /obj/item/rcd,/obj/item/rpd) - -/obj/item/clothing/suit/space/void/mining/prepared - helmet = /obj/item/clothing/head/helmet/space/void/mining - -//Medical -/obj/item/clothing/head/helmet/space/void/medical - name = "medical voidsuit helmet" - desc = "A bulbous voidsuit helmet with minor radiation shielding and a massive visor." - icon_state = "rig0-medical" - item_state = "medical_helm" - item_state_slots = list( - slot_l_hand_str = "medical_helm", - slot_r_hand_str = "medical_helm", - ) - armor = list( - melee = ARMOR_MELEE_KNIVES, - laser = ARMOR_LASER_MINOR, - bomb = ARMOR_BOMB_PADDED, - bio = ARMOR_BIO_SHIELDED, - rad = ARMOR_RAD_SMALL - ) - -/obj/item/clothing/suit/space/void/medical - icon_state = "rig-medical" - name = "medical voidsuit" - desc = "A sterile voidsuit with minor radiation shielding and a suite of self-cleaning technology. Standard issue in most orbital medical facilities." - item_state_slots = list( - slot_l_hand_str = "medical_voidsuit", - slot_r_hand_str = "medical_voidsuit", - ) - allowed = list(/obj/item/device/flashlight,/obj/item/tank,/obj/item/device/suit_cooling_unit,/obj/item/storage/firstaid,/obj/item/device/scanner/health,/obj/item/stack/medical) - armor = list( - melee = ARMOR_MELEE_KNIVES, - laser = ARMOR_LASER_MINOR, - bomb = ARMOR_BOMB_PADDED, - bio = ARMOR_BIO_SHIELDED, - rad = ARMOR_RAD_SMALL - ) - -/obj/item/clothing/suit/space/void/medical/prepared - helmet = /obj/item/clothing/head/helmet/space/void/medical - boots = /obj/item/clothing/shoes/magboots - -//Security -/obj/item/clothing/head/helmet/space/void/security - name = "security voidsuit helmet" - desc = "A comfortable voidsuit helmet with cranial armor and eight-channel surround sound." - icon_state = "rig0-sec" - item_state = "sec_helm" - item_state_slots = list( - slot_l_hand_str = "sec_helm", - slot_r_hand_str = "sec_helm", - ) - armor = list( - melee = ARMOR_MELEE_MAJOR, - bullet = ARMOR_BALLISTIC_SMALL, - laser = ARMOR_LASER_SMALL, - bomb = ARMOR_BOMB_PADDED, - bio = ARMOR_BIO_SHIELDED, - rad = ARMOR_RAD_MINOR - ) - siemens_coefficient = 0.3 - light_overlay = "helmet_light_dual" - -/obj/item/clothing/suit/space/void/security - icon_state = "rig-sec" - name = "security voidsuit" - desc = "A somewhat clumsy voidsuit layered with impact and laser-resistant armor plating. Specially designed to dissipate minor electrical charges." - item_state_slots = list( - slot_l_hand_str = "sec_voidsuit", - slot_r_hand_str = "sec_voidsuit", - ) - armor = list( - melee = ARMOR_MELEE_MAJOR, - bullet = ARMOR_BALLISTIC_SMALL, - laser = ARMOR_LASER_SMALL, - bomb = ARMOR_BOMB_PADDED, - bio = ARMOR_BIO_SHIELDED, - rad = ARMOR_RAD_MINOR - ) - allowed = list(/obj/item/gun,/obj/item/device/flashlight,/obj/item/tank,/obj/item/device/suit_cooling_unit,/obj/item/melee/baton) - siemens_coefficient = 0.3 - -/obj/item/clothing/suit/space/void/security/prepared - helmet = /obj/item/clothing/head/helmet/space/void/security - boots = /obj/item/clothing/shoes/magboots - -//Atmospherics -/obj/item/clothing/head/helmet/space/void/atmos - desc = "A flame-retardant voidsuit helmet with a self-repairing visor and light anti-radiation shielding." - name = "atmospherics voidsuit helmet" - icon_state = "rig0-atmos" - item_state = "atmos_helm" - item_state_slots = list( - slot_l_hand_str = "atmos_helm", - slot_r_hand_str = "atmos_helm", - ) - armor = list( - melee = ARMOR_MELEE_RESISTANT, - bullet = ARMOR_BALLISTIC_MINOR, - laser = ARMOR_LASER_MINOR, - bomb = ARMOR_BOMB_PADDED, - bio = ARMOR_BIO_SHIELDED, - rad = ARMOR_RAD_SMALL - ) - max_heat_protection_temperature = FIRE_HELMET_MAX_HEAT_PROTECTION_TEMPERATURE - light_overlay = "helmet_light_dual" - max_pressure_protection = FIRESUIT_MAX_PRESSURE - -/obj/item/clothing/suit/space/void/atmos - desc = "A durable voidsuit with advanced temperature-regulation systems as well as minor radiation protection. Well worth the price." - icon_state = "rig-atmos" - name = "atmos voidsuit" - item_state_slots = list( - slot_l_hand_str = "atmos_voidsuit", - slot_r_hand_str = "atmos_voidsuit", - ) - armor = list( - melee = ARMOR_MELEE_RESISTANT, - bullet = ARMOR_BALLISTIC_MINOR, - laser = ARMOR_LASER_MINOR, - bomb = ARMOR_BOMB_PADDED, - bio = ARMOR_BIO_SHIELDED, - rad = ARMOR_RAD_SMALL - ) - max_heat_protection_temperature = FIRESUIT_MAX_HEAT_PROTECTION_TEMPERATURE - max_pressure_protection = FIRESUIT_MAX_PRESSURE - allowed = list(/obj/item/device/flashlight,/obj/item/tank,/obj/item/device/suit_cooling_unit,/obj/item/storage/toolbox,/obj/item/storage/briefcase/inflatable,/obj/item/device/t_scanner,/obj/item/rcd,/obj/item/rpd) - -/obj/item/clothing/suit/space/void/atmos/prepared - helmet = /obj/item/clothing/head/helmet/space/void/atmos - boots = /obj/item/clothing/shoes/magboots - -//Surplus Voidsuits - -//Engineering -/obj/item/clothing/head/helmet/space/void/engineering/alt - name = "reinforced engineering voidsuit helmet" - desc = "A heavy, radiation-shielded voidsuit helmet with a surprisingly comfortable interior." - icon_state = "rig0-engineeringalt" - item_state = "engalt_helm" - armor = list( - melee = ARMOR_MELEE_RESISTANT, - bullet = ARMOR_BALLISTIC_MINOR, - laser = ARMOR_LASER_MINOR, - bomb = ARMOR_BOMB_PADDED, - bio = ARMOR_BIO_SHIELDED, - rad = ARMOR_RAD_SHIELDED - ) - light_overlay = "helmet_light_dual" - -/obj/item/clothing/suit/space/void/engineering/alt - name = "reinforced engineering voidsuit" - desc = "A bulky industrial voidsuit. It's a few generations old, but a reliable design and radiation shielding make up for the lack of climate control." - icon_state = "rig-engineeringalt" - armor = list( - melee = ARMOR_MELEE_RESISTANT, - bullet = ARMOR_BALLISTIC_MINOR, - laser = ARMOR_LASER_MINOR, - bomb = ARMOR_BOMB_PADDED, - bio = ARMOR_BIO_SHIELDED, - rad = ARMOR_RAD_SHIELDED - ) - -/obj/item/clothing/suit/space/void/engineering/alt/Initialize() - . = ..() - slowdown_per_slot[slot_wear_suit] = 1.25 - -/obj/item/clothing/suit/space/void/engineering/alt/prepared - helmet = /obj/item/clothing/head/helmet/space/void/engineering/alt - boots = /obj/item/clothing/shoes/magboots - -//Mining -/obj/item/clothing/head/helmet/space/void/mining/alt - name = "frontier mining voidsuit helmet" - desc = "An armored voidsuit helmet. Someone must have through they were pretty cool when they painted a mohawk on it." - icon_state = "rig0-miningalt" - item_state = "miningalt_helm" - -/obj/item/clothing/suit/space/void/mining/alt - name = "frontier mining voidsuit" - icon_state = "rig-miningalt" - desc = "A cheap prospecting voidsuit. What it lacks in comfort it makes up for in armor plating and street cred." - -/obj/item/clothing/suit/space/void/mining/alt/prepared - helmet = /obj/item/clothing/head/helmet/space/void/mining/alt - -//Medical -/obj/item/clothing/head/helmet/space/void/medical/alt - name = "streamlined medical voidsuit helmet" - desc = "A trendy, lightly radiation-shielded voidsuit helmet trimmed in a fetching blue." - icon_state = "rig0-medicalalt" - item_state = "medicalalt_helm" - armor = list( - melee = ARMOR_MELEE_KNIVES, - laser = ARMOR_LASER_MINOR, - bomb = ARMOR_BOMB_PADDED, - bio = ARMOR_BIO_SHIELDED, - rad = ARMOR_RAD_RESISTANT - ) - light_overlay = "helmet_light_dual_green" - -/obj/item/clothing/suit/space/void/medical/alt - name = "streamlined medical voidsuit" - icon_state = "rig-medicalalt" - desc = "A more recent and stylish model of Vey-Med voidsuit, with a minor upgrade to radiation shielding." - allowed = list(/obj/item/device/flashlight,/obj/item/tank,/obj/item/device/suit_cooling_unit,/obj/item/storage/firstaid,/obj/item/device/scanner/health,/obj/item/stack/medical) - armor = list( - melee = ARMOR_MELEE_KNIVES, - laser = ARMOR_LASER_MINOR, - bomb = ARMOR_BOMB_PADDED, - bio = ARMOR_BIO_SHIELDED, - rad = ARMOR_RAD_RESISTANT - ) - -/obj/item/clothing/suit/space/void/medical/alt/Initialize() - . = ..() - slowdown_per_slot[slot_wear_suit] = 0.5 - -/obj/item/clothing/suit/space/void/medical/alt/prepared - helmet = /obj/item/clothing/head/helmet/space/void/medical/alt - boots = /obj/item/clothing/shoes/magboots - -//Security -/obj/item/clothing/head/helmet/space/void/security/alt - name = "riot security voidsuit helmet" - desc = "A somewhat tacky voidsuit helmet, a fact mitigated by heavy armor plating." - icon_state = "rig0-secalt" - item_state = "secalt_helm" - light_overlay = "helmet_light_alt" - armor = list( - melee = ARMOR_MELEE_VERY_HIGH, - bullet = ARMOR_BALLISTIC_SMALL, - laser = ARMOR_LASER_SMALL, - bomb = ARMOR_BOMB_PADDED, - bio = ARMOR_BIO_SHIELDED, - rad = ARMOR_RAD_MINOR) - -/obj/item/clothing/suit/space/void/security/alt - name = "riot security voidsuit" - icon_state = "rig-secalt" - desc = "A heavily armored voidsuit, designed to intimidate people who find black intimidating. Surprisingly slimming." - armor = list( - melee = ARMOR_MELEE_VERY_HIGH, - bullet = ARMOR_BALLISTIC_SMALL, - laser = ARMOR_LASER_SMALL, - bomb = ARMOR_BOMB_PADDED, - bio = ARMOR_BIO_SHIELDED, - rad = ARMOR_RAD_MINOR) - allowed = list(/obj/item/gun,/obj/item/device/flashlight,/obj/item/tank,/obj/item/device/suit_cooling_unit,/obj/item/melee/baton) - -/obj/item/clothing/suit/space/void/security/alt/prepared - helmet = /obj/item/clothing/head/helmet/space/void/security/alt - boots = /obj/item/clothing/shoes/magboots - -//Atmospherics -/obj/item/clothing/head/helmet/space/void/atmos/alt - name = "heavy duty atmospherics voidsuit helmet" - desc = "A voidsuit helmet plated with an expensive heat and radiation resistant ceramic." - icon_state = "rig0-atmosalt" - item_state = "atmosalt_helm" - light_overlay = "hardhat_light" - -/obj/item/clothing/suit/space/void/atmos/alt - name = "heavy duty atmos voidsuit" - desc = "An expensive voidsuit, rated to withstand extreme heat and even minor radiation without exceeding room temperature within." - icon_state = "rig-atmosalt" - -/obj/item/clothing/suit/space/void/atmos/alt/prepared - helmet = /obj/item/clothing/head/helmet/space/void/atmos/alt - boots = /obj/item/clothing/shoes/magboots - -//Misc -/obj/item/clothing/head/helmet/space/void/engineering/salvage - name = "salvage voidsuit helmet" - desc = "A heavily modified salvage voidsuit helmet. It has been fitted with radiation-resistant plating." - icon_state = "rig0-salvage" - item_state = "salvage_helm" - item_state_slots = list( - slot_l_hand_str = "eng_helm", - slot_r_hand_str = "eng_helm", - ) - armor = list( - melee = ARMOR_MELEE_RESISTANT, - bullet = ARMOR_BALLISTIC_MINOR, - laser = ARMOR_LASER_SMALL, - energy = ARMOR_ENERGY_SMALL, - bomb = ARMOR_BOMB_PADDED, - bio = ARMOR_BIO_SHIELDED, - rad = ARMOR_RAD_RESISTANT - ) - -/obj/item/clothing/head/helmet/space/void/engineering/salvage/engi - name = "engineering salvage voidsuit helmet" - desc = "A heavily modified salvage voidsuit helmet. It has been fitted with radiation-resistant plating, and an engineer paintjob." - icon_state = "rig0-salvage-engi" - item_state = "salvage_helm-engi" - -/obj/item/clothing/head/helmet/space/void/engineering/salvage/med - name = "medical salvage voidsuit helmet" - desc = "A heavily modified salvage voidsuit helmet. It has been fitted with radiation-resistant plating, and a medical paintjob." - icon_state = "rig0-salvage-med" - item_state = "salvage_helm-med" - -/obj/item/clothing/head/helmet/space/void/engineering/salvage/pilot - name = "pilot salvage voidsuit helmet" - desc = "A heavily modified salvage voidsuit helmet. It has been fitted with radiation-resistant plating, and a pilot paintjob." - icon_state = "rig0-salvage-pilot" - item_state = "salvage_helm-pilot" - -/obj/item/clothing/suit/space/void/engineering/salvage - name = "salvage voidsuit" - desc = "A hand-me-down salvage voidsuit. It has obviously had a lot of repair work done to its radiation shielding." - icon_state = "rig-salvage" - item_state_slots = list( - slot_l_hand_str = "eng_voidsuit", - slot_r_hand_str = "eng_voidsuit", - ) - armor = list( - melee = ARMOR_MELEE_RESISTANT, - bullet = ARMOR_BALLISTIC_MINOR, - laser = ARMOR_LASER_SMALL, - energy = ARMOR_ENERGY_SMALL, - bomb = ARMOR_BOMB_PADDED, - bio = ARMOR_BIO_SHIELDED, - rad = ARMOR_RAD_RESISTANT - ) - allowed = list(/obj/item/device/flashlight,/obj/item/tank,/obj/item/device/suit_cooling_unit,/obj/item/storage/toolbox,/obj/item/storage/briefcase/inflatable,/obj/item/device/t_scanner,/obj/item/rcd,/obj/item/rpd) - -/obj/item/clothing/suit/space/void/engineering/salvage/prepared - helmet = /obj/item/clothing/head/helmet/space/void/engineering/salvage - boots = /obj/item/clothing/shoes/magboots - -//Pilot -/obj/item/clothing/head/helmet/space/void/pilot - desc = "An atmos resistant helmet for space and planet exploration." - name = "pilot voidsuit helmet" - icon_state = "rig0_pilot" - item_state = "pilot_helm" - armor = list( - melee = ARMOR_MELEE_KNIVES, - bullet = ARMOR_BALLISTIC_MINOR, - laser = ARMOR_LASER_MINOR, - bio = ARMOR_BIO_SHIELDED, - rad = ARMOR_RAD_SMALL - ) - light_overlay = "helmet_light_dual" - -/obj/item/clothing/suit/space/void/pilot - desc = "An atmos resistant voidsuit for space and planet exploration." - icon_state = "rig-pilot" - name = "pilot voidsuit" - armor = list( - melee = ARMOR_MELEE_KNIVES, - bullet = ARMOR_BALLISTIC_MINOR, - laser = ARMOR_LASER_MINOR, - bio = ARMOR_BIO_SHIELDED, - rad = ARMOR_RAD_SMALL - ) - allowed = list(/obj/item/device/flashlight,/obj/item/tank,/obj/item/device/suit_cooling_unit,/obj/item/storage/toolbox,/obj/item/storage/briefcase/inflatable,/obj/item/device/t_scanner,/obj/item/rcd,/obj/item/rpd) - -/obj/item/clothing/suit/space/void/pilot/prepared - helmet = /obj/item/clothing/head/helmet/space/void/pilot - boots = /obj/item/clothing/shoes/magboots - -/obj/item/clothing/suit/space/void/pilot/Initialize() - . = ..() - slowdown_per_slot[slot_wear_suit] = 0.75 - -//Retro -/obj/item/clothing/suit/space/void/retro - name = "retro voidsuit" - desc = "A voidsuit designed to replicate older designs with newer technology." - icon_state = "rig-retro" - armor = list( - melee = ARMOR_MELEE_RESISTANT, - energy = ARMOR_ENERGY_RESISTANT, - bomb = ARMOR_BOMB_PADDED, - bio = ARMOR_BIO_SHIELDED, - rad = ARMOR_RAD_SHIELDED - ) - allowed = list(/obj/item/gun,/obj/item/device/flashlight,/obj/item/tank,/obj/item/device/suit_cooling_unit) - -/obj/item/clothing/head/helmet/space/void/retro - name = "retro voidsuit helmet" - desc = "A voidsuit helmet designed to replicate older designs with newer technology." - icon_state = "rig0-retro" - item_state = "helm-retro" - armor = list( - melee = ARMOR_MELEE_RESISTANT, - energy = ARMOR_ENERGY_RESISTANT, - bomb = ARMOR_BOMB_PADDED, - bio = ARMOR_BIO_SHIELDED, - rad = ARMOR_RAD_SHIELDED - ) - light_overlay = "helmet_light_alt" - -/obj/item/clothing/suit/space/void/retro/prepared - helmet = /obj/item/clothing/head/helmet/space/void/retro - boots = /obj/item/clothing/shoes/magboots diff --git a/code/modules/clothing/spacesuits/void/void.dm b/code/modules/clothing/spacesuits/void/void.dm deleted file mode 100644 index 275f1a0c8ed32..0000000000000 --- a/code/modules/clothing/spacesuits/void/void.dm +++ /dev/null @@ -1,323 +0,0 @@ -//NASA Voidsuit -/obj/item/clothing/head/helmet/space/void - name = "void helmet" - desc = "A high-tech dark red space suit helmet. Used for AI satellite maintenance." - icon_state = "void" - - heat_protection = HEAD - armor = list( - melee = ARMOR_MELEE_RESISTANT, - bullet = ARMOR_BALLISTIC_MINOR, - laser = ARMOR_LASER_SMALL, - energy = ARMOR_ENERGY_MINOR, - bomb = ARMOR_BOMB_PADDED, - bio = ARMOR_BIO_SHIELDED, - rad = ARMOR_RAD_MINOR - ) - max_heat_protection_temperature = SPACE_SUIT_MAX_HEAT_PROTECTION_TEMPERATURE - max_pressure_protection = VOIDSUIT_MAX_PRESSURE - min_pressure_protection = 0 - siemens_coefficient = 0.4 - - //Species-specific stuff. - species_restricted = list(SPECIES_HUMAN, SPECIES_IPC, SPECIES_SHELL) - sprite_sheets = list( - SPECIES_UNATHI = 'icons/mob/species/unathi/onmob_head_helmet_unathi.dmi', - SPECIES_SKRELL = 'icons/mob/species/skrell/onmob_head_skrell.dmi', - ) - sprite_sheets_obj = list( - SPECIES_UNATHI = 'icons/obj/clothing/species/unathi/obj_head_unathi.dmi', - SPECIES_SKRELL = 'icons/obj/clothing/species/skrell/obj_head_skrell.dmi', - ) - - light_overlay = "helmet_light" - -/obj/item/clothing/suit/space/void - name = "voidsuit" - icon_state = "void" - w_class = ITEM_SIZE_HUGE//bulky item - desc = "A high-tech dark red space suit. Used for AI satellite maintenance." - armor = list( - melee = ARMOR_MELEE_RESISTANT, - bullet = ARMOR_BALLISTIC_MINOR, - laser = ARMOR_LASER_SMALL, - energy = ARMOR_ENERGY_MINOR, - bomb = ARMOR_BOMB_PADDED, - bio = ARMOR_BIO_SHIELDED, - rad = ARMOR_RAD_MINOR - ) - allowed = list(/obj/item/device/flashlight,/obj/item/tank,/obj/item/device/suit_cooling_unit) - flags_inv = HIDEGLOVES | HIDESHOES | HIDEJUMPSUIT | HIDETAIL | CLOTHING_BULKY - heat_protection = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS - max_heat_protection_temperature = SPACE_SUIT_MAX_HEAT_PROTECTION_TEMPERATURE - max_pressure_protection = VOIDSUIT_MAX_PRESSURE - siemens_coefficient = 0.4 - - species_restricted = list(SPECIES_HUMAN, SPECIES_SKRELL, SPECIES_IPC, SPECIES_SHELL) - sprite_sheets = list( - SPECIES_UNATHI = 'icons/mob/species/unathi/onmob_suit_unathi.dmi', - SPECIES_SKRELL = 'icons/mob/species/skrell/onmob_suit_skrell.dmi', - ) - sprite_sheets_obj = list( - SPECIES_UNATHI = 'icons/obj/clothing/species/unathi/obj_suit_unathi.dmi', - SPECIES_SKRELL = 'icons/obj/clothing/species/skrell/obj_suit_skrell.dmi', - ) - - //Breach thresholds, should ideally be inherited by most (if not all) voidsuits. - //With 0.2 resiliance, will reach 10 breach damage after 3 laser carbine blasts or 8 smg hits. - breach_threshold = 15 - can_breach = 1 - - //Inbuilt devices. - var/obj/item/clothing/shoes/magboots/boots = null // Deployable boots, if any. - var/obj/item/clothing/head/helmet/helmet = null // Deployable helmet, if any. - var/obj/item/tank/tank = null // Deployable tank, if any. - - action_button_name = "Toggle Helmet" - var/helmet_deploy_sound = 'sound/items/helmet_close.ogg' - var/helmet_retract_sound = 'sound/items/helmet_open.ogg' - -#define VOIDSUIT_INIT_EQUIPMENT(equipment_var, expected_path) \ -if(ispath(##equipment_var, ##expected_path )){\ - ##equipment_var = new equipment_var (src);\ -}\ -else if(##equipment_var) {\ - CRASH("[log_info_line(src)] has an invalid [#equipment_var] type: [log_info_line(##equipment_var)]");\ -} - -/obj/item/clothing/suit/space/void/Initialize() - . = ..() - slowdown_per_slot[slot_wear_suit] = 1 - VOIDSUIT_INIT_EQUIPMENT(boots, /obj/item/clothing/shoes/magboots) - VOIDSUIT_INIT_EQUIPMENT(helmet, /obj/item/clothing/head/helmet) - VOIDSUIT_INIT_EQUIPMENT(tank, /obj/item/tank) - -#undef VOIDSUIT_INIT_EQUIPMENT - -/obj/item/clothing/suit/space/void/Destroy() - . = ..() - QDEL_NULL(boots) - QDEL_NULL(helmet) - QDEL_NULL(tank) - -/obj/item/clothing/suit/space/void/examine(user,distance) - . = ..() - var/list/part_list = new - for(var/obj/item/I in list(helmet,boots,tank)) - part_list += "\a [I]" - to_chat(user, "\The [src] has [english_list(part_list)] installed.") - if(tank && distance <= 1) - to_chat(user, "The wrist-mounted pressure gauge reads [max(round(tank.air_contents.return_pressure()),0)] kPa remaining in \the [tank].") - -/obj/item/clothing/suit/space/void/refit_for_species(var/target_species) - ..() - if(istype(helmet)) - helmet.refit_for_species(target_species) - if(istype(boots)) - boots.refit_for_species(target_species) - -/obj/item/clothing/suit/space/void/equipped(mob/M) - ..() - - var/mob/living/carbon/human/H = M - - if(!istype(H)) return - - if(H.wear_suit != src) - return - - if(boots) - if (H.equip_to_slot_if_possible(boots, slot_shoes)) - boots.canremove = 0 - - if(helmet) - if(H.head) - to_chat(M, "You are unable to deploy your suit's helmet as \the [H.head] is in the way.") - else if (H.equip_to_slot_if_possible(helmet, slot_head)) - to_chat(M, "Your suit's helmet deploys with a hiss.") - playsound(loc, helmet_deploy_sound, 30) - helmet.canremove = 0 - - if(tank) - if(H.s_store) //In case someone finds a way. - to_chat(M, "Alarmingly, the valve on your suit's installed tank fails to engage.") - else if (H.equip_to_slot_if_possible(tank, slot_s_store)) - to_chat(M, "The valve on your suit's installed tank safely engages.") - tank.canremove = 0 - - -/obj/item/clothing/suit/space/void/dropped() - ..() - - var/mob/living/carbon/human/H - - if(helmet) - helmet.canremove = 1 - H = helmet.loc - if(istype(H)) - if(helmet && H.head == helmet) - H.drop_from_inventory(helmet, src) - - if(boots) - boots.canremove = 1 - H = boots.loc - if(istype(H)) - if(boots && H.shoes == boots) - H.drop_from_inventory(boots, src) - - if(tank) - tank.canremove = 1 - tank.forceMove(src) - -/obj/item/clothing/suit/space/void/verb/toggle_helmet() - - set name = "Toggle Helmet" - set category = "Object" - set src in usr - - if(!istype(src.loc,/mob/living)) return - - if(!helmet) - to_chat(usr, "There is no helmet installed.") - return - - var/mob/living/carbon/human/H = usr - - if(!istype(H)) return - if(H.incapacitated()) return - if(H.wear_suit != src) return - - if(H.head == helmet) - to_chat(H, "You retract your suit helmet.") - helmet.canremove = 1 - playsound(loc, helmet_retract_sound, 30) - H.drop_from_inventory(helmet, src) - else - if(H.head) - to_chat(H, "You cannot deploy your helmet while wearing \the [H.head].") - return - if(H.equip_to_slot_if_possible(helmet, slot_head)) - helmet.pickup(H) - helmet.canremove = 0 - playsound(loc, helmet_deploy_sound, 30) - to_chat(H, "You deploy your suit helmet, sealing you off from the world.") - helmet.update_light(H) - -/obj/item/clothing/suit/space/void/verb/eject_tank() - - set name = "Eject Voidsuit Tank" - set category = "Object" - set src in usr - - if(!istype(src.loc,/mob/living)) return - - if(!tank) - to_chat(usr, "There is no tank inserted.") - return - - var/mob/living/carbon/human/H = usr - - if(!istype(H)) return - if(H.incapacitated()) return - var/slot = H.get_inventory_slot(src) - if(slot != slot_wear_suit && slot != slot_l_hand && slot != slot_r_hand) return// let them eject those tanks when they're in hand or stuff for ease of use - - - to_chat(H, "You press the emergency release, ejecting \the [tank] from your suit.") - tank.canremove = 1 - H.drop_from_inventory(tank, src) - H.put_in_hands(tank) - src.tank = null - playsound(loc, 'sound/effects/spray3.ogg', 50) - -/obj/item/clothing/suit/space/void/attackby(obj/item/W as obj, mob/user as mob) - - if(!istype(user,/mob/living)) return - - if(istype(W,/obj/item/clothing/accessory) || istype(W, /obj/item/hand_labeler)) - return ..() - - if(istype(W,/obj/item/screwdriver)) - if(user.get_inventory_slot(src) == slot_wear_suit)//maybe I should make this into a proc? - to_chat(user, "You cannot modify \the [src] while it is being worn.") - return - - if(helmet || boots || tank) - var/choice = input("What component would you like to remove?") as null|anything in list(helmet,boots,tank) - if(!choice) return - - playsound(loc, 'sound/items/Screwdriver.ogg', 50) - if(choice == tank) //No, a switch doesn't work here. Sorry. ~Techhead - to_chat(user, "You pop \the [tank] out of \the [src]'s storage compartment.") - user.put_in_hands(tank) - src.tank = null - else if(choice == helmet) - to_chat(user, "You detatch \the [helmet] from \the [src]'s helmet mount.") - user.put_in_hands(helmet) - src.helmet = null - else if(choice == boots) - to_chat(user, "You detatch \the [boots] from \the [src]'s boot mounts.") - user.put_in_hands(boots) - src.boots = null - else - to_chat(user, "\The [src] does not have anything installed.") - return - else if(istype(W,/obj/item/clothing/head/helmet/space)) - if(user.get_inventory_slot(src) == slot_wear_suit) - to_chat(user, "You cannot modify \the [src] while it is being worn.") - return - if(helmet) - to_chat(user, "\The [src] already has a helmet installed.") - else - if(!user.unEquip(W, src)) - return - to_chat(user, "You attach \the [W] to \the [src]'s helmet mount.") - src.helmet = W - playsound(loc, 'sound/items/Deconstruct.ogg', 50, 1) - return - else if(istype(W,/obj/item/clothing/shoes/magboots)) - if(user.get_inventory_slot(src) == slot_wear_suit) - to_chat(user, "You cannot modify \the [src] while it is being worn.") - return - if(boots) - to_chat(user, "\The [src] already has magboots installed.") - else - if(!user.unEquip(W, src)) - return - to_chat(user, "You attach \the [W] to \the [src]'s boot mounts.") - boots = W - playsound(loc, 'sound/items/Deconstruct.ogg', 50, 1) - return - else if(istype(W,/obj/item/tank)) - if(user.get_inventory_slot(src) == slot_wear_suit) - to_chat(user, "You cannot modify \the [src] while it is being worn.") - return - if(tank) - to_chat(user, "\The [src] already has an airtank installed.") - return - if (istype(W, /obj/item/tank/scrubber)) - to_chat(user, SPAN_WARNING("\The [W] is far too large to attach to \the [src].")) - return - else - if(!user.unEquip(W, src)) - return - to_chat(user, "You insert \the [W] into \the [src]'s storage compartment.") - tank = W - playsound(loc, 'sound/items/Deconstruct.ogg', 50, 1) - return - - ..() - -/obj/item/clothing/suit/space/void/attack_hand(mob/user as mob) - if (loc == user) - return - return ..() - -/obj/item/clothing/suit/space/void/attack_self() //sole purpose of existence is to toggle the helmet - toggle_helmet() - -/obj/item/clothing/suit/space/void/get_mob_overlay(mob/user_mob, slot) - var/image/ret = ..() - if(tank && slot == slot_back) - ret.overlays += tank.get_mob_overlay(user_mob, slot_back_str) - return ret diff --git a/code/modules/clothing/spacesuits/void/wizard.dm b/code/modules/clothing/spacesuits/void/wizard.dm deleted file mode 100644 index 61a39aa2c7d71..0000000000000 --- a/code/modules/clothing/spacesuits/void/wizard.dm +++ /dev/null @@ -1,69 +0,0 @@ -//Wizard Rig -/obj/item/clothing/head/helmet/space/void/wizard - name = "gem-encrusted voidsuit helmet" - desc = "A bizarre gem-encrusted helmet that radiates magical energies." - icon_state = "rig0-wiz" - item_state_slots = list( - slot_l_hand_str = "wiz_helm", - slot_r_hand_str = "wiz_helm", - ) - unacidable = TRUE - armor = list( - melee = ARMOR_MELEE_RESISTANT, - bullet = ARMOR_BALLISTIC_PISTOL, - laser = ARMOR_LASER_SMALL, - energy = ARMOR_ENERGY_SMALL, - bomb = ARMOR_BOMB_PADDED, - bio = ARMOR_BIO_SHIELDED, - rad = ARMOR_RAD_SMALL - ) - siemens_coefficient = 0.7 - sprite_sheets_obj = null - wizard_garb = TRUE - -/obj/item/clothing/suit/space/void/wizard - icon_state = "rig-wiz" - name = "gem-encrusted voidsuit" - desc = "A bizarre gem-encrusted suit that radiates magical energies." - w_class = ITEM_SIZE_LARGE //normally voidsuits are bulky but this one is magic I suppose - unacidable = TRUE - armor = list( - melee = ARMOR_MELEE_RESISTANT, - bullet = ARMOR_BALLISTIC_PISTOL, - laser = ARMOR_LASER_SMALL, - energy = ARMOR_ENERGY_SMALL, - bomb = ARMOR_BOMB_PADDED, - bio = ARMOR_BIO_SHIELDED, - rad = ARMOR_RAD_SMALL - ) - siemens_coefficient = 0.7 - sprite_sheets_obj = null - wizard_garb = TRUE - flags_inv = HIDESHOES|HIDEJUMPSUIT|HIDETAIL //For gloves. - body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS - cold_protection = UPPER_TORSO | LOWER_TORSO | LEGS | FEET | ARMS - -/obj/item/clothing/gloves/wizard - name = "mystical gloves" - desc = "Reinforced, gem-studded gloves that radiate energy. They look like they go along with a matching voidsuit." - icon_state = "mystical" - item_state = "purplegloves" - item_flags = ITEM_FLAG_THICKMATERIAL - body_parts_covered = HANDS - cold_protection = HANDS - min_cold_protection_temperature = SPACE_SUIT_MIN_COLD_PROTECTION_TEMPERATURE - species_restricted = null - gender = PLURAL - gas_transfer_coefficient = 0.01 - permeability_coefficient = 0.02 - unacidable = TRUE - armor = list( - melee = ARMOR_MELEE_RESISTANT, - bullet = ARMOR_BALLISTIC_PISTOL, - laser = ARMOR_LASER_SMALL, - energy = ARMOR_ENERGY_SMALL, - bomb = ARMOR_BOMB_PADDED, - bio = ARMOR_BIO_SHIELDED, - rad = ARMOR_RAD_SMALL - ) - siemens_coefficient = 0.7 diff --git a/code/modules/clothing/suits/alien.dm b/code/modules/clothing/suits/alien.dm deleted file mode 100644 index 8d8178e3734b0..0000000000000 --- a/code/modules/clothing/suits/alien.dm +++ /dev/null @@ -1,67 +0,0 @@ -//Unathi clothing. - -/obj/item/clothing/suit/unathi/robe - name = "roughspun robes" - desc = "A traditional Unathi garment." - icon_state = "robe-unathi" - body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS - -/obj/item/clothing/suit/unathi/mantle - name = "hide mantle" - desc = "A rather grisly selection of cured hides and skin, sewn together to form a ragged mantle." - icon_state = "mantle-unathi" - body_parts_covered = UPPER_TORSO - -//Misc Xeno clothing. - -/obj/item/clothing/suit/xeno/furs - name = "heavy furs" - desc = "A traditional Zhan-Khazan garment." - icon_state = "zhan_furs" - body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS - -/obj/item/clothing/head/xeno/scarf - name = "headscarf" - desc = "A scarf of coarse fabric. Seems to have ear-holes." - icon_state = "zhan_scarf" - body_parts_covered = HEAD|FACE - -/obj/item/clothing/shoes/sandal/xeno/caligae - name = "caligae" - desc = "A pair of sandals modelled after the ancient Roman caligae." - icon_state = "caligae" - item_state = "caligae" - body_parts_covered = FEET|LEGS - -/obj/item/clothing/shoes/sandal/xeno/caligae/white - desc = "A pair of sandals modelled after the ancient Roman caligae. This one has a white covering." - icon_state = "whitecaligae" - item_state = "whitecaligae" - -/obj/item/clothing/shoes/sandal/xeno/caligae/grey - desc = "A pair of sandals modelled after the ancient Roman caligae. This one has a grey covering." - icon_state = "greycaligae" - item_state = "greycaligae" - -/obj/item/clothing/shoes/sandal/xeno/caligae/black - desc = "A pair of sandals modelled after the ancient Roman caligae. This one has a black covering." - icon_state = "blackcaligae" - item_state = "blackcaligae" - - -//Voxclothing - -/obj/item/clothing/suit/armor/vox_scrap - name = "rusted metal armor" - desc = "A hodgepodge of various pieces of metal scrapped together into a rudimentary vox-shaped piece of armor." - allowed = list(/obj/item/gun, /obj/item/tank) - armor = list( - melee = ARMOR_MELEE_VERY_HIGH, - bullet = ARMOR_BALLISTIC_PISTOL, - laser = ARMOR_LASER_MINOR, - bomb = ARMOR_BOMB_PADDED) //Higher melee armor versus lower everything else. - icon = 'icons/obj/clothing/species/vox/obj_suit_vox.dmi' - icon_state = "vox-scrap" - body_parts_covered = UPPER_TORSO|ARMS|LOWER_TORSO|LEGS - species_restricted = list(SPECIES_VOX, SPECIES_VOX_ARMALIS) - siemens_coefficient = 1 //Its literally metal diff --git a/code/modules/clothing/suits/armor.dm b/code/modules/clothing/suits/armor.dm deleted file mode 100644 index af0e00baf6d1e..0000000000000 --- a/code/modules/clothing/suits/armor.dm +++ /dev/null @@ -1,468 +0,0 @@ - -/obj/item/clothing/suit/armor - allowed = list(/obj/item/gun/energy,/obj/item/device/radio,/obj/item/reagent_containers/spray/pepper,/obj/item/gun/projectile,/obj/item/ammo_magazine,/obj/item/ammo_casing,/obj/item/melee/baton,/obj/item/handcuffs,/obj/item/gun/magnetic,/obj/item/clothing/head/helmet,/obj/item/device/flashlight) - body_parts_covered = UPPER_TORSO|LOWER_TORSO - item_flags = ITEM_FLAG_THICKMATERIAL - flags_inv = CLOTHING_BULKY - cold_protection = UPPER_TORSO|LOWER_TORSO - min_cold_protection_temperature = ARMOR_MIN_COLD_PROTECTION_TEMPERATURE - heat_protection = UPPER_TORSO|LOWER_TORSO - max_heat_protection_temperature = ARMOR_MAX_HEAT_PROTECTION_TEMPERATURE - siemens_coefficient = 0.6 - equip_delay = 2 SECONDS - -/obj/item/clothing/suit/armor/equip_delay_before(mob/user, slot, equip_flags) - user.setClickCooldown(1 SECOND) - user.visible_message( - SPAN_ITALIC("\The [user] begins to don \the [src]."), - SPAN_ITALIC("You begin to don \the [src]."), - SPAN_ITALIC("You can hear metal clicking and fabric rustling."), - range = 5 - ) - - -/obj/item/clothing/suit/armor/equip_delay_after(mob/user, slot, equip_flags) - user.visible_message( - SPAN_ITALIC("\The [user] finishes putting on \the [src]."), - SPAN_NOTICE("You finish putting on \the [src]."), - range = 5 - ) - -/obj/item/clothing/suit/armor/vest/old //just realized these had never been removed - name = "armor" - desc = "An armored vest that protects against some damage." - icon_state = "armor" - blood_overlay_type = "armor" - body_parts_covered = UPPER_TORSO|LOWER_TORSO - cold_protection = UPPER_TORSO|LOWER_TORSO - heat_protection = UPPER_TORSO|LOWER_TORSO - armor = list( - melee = ARMOR_MELEE_RESISTANT, - bullet = ARMOR_BALLISTIC_SMALL, - laser = ARMOR_LASER_HANDGUNS, - energy = ARMOR_ENERGY_MINOR, - bomb = ARMOR_BOMB_MINOR - ) - -/obj/item/clothing/suit/armor/vest/old/security - name = "security armor" - desc = "An armored vest that protects against some damage. This one has a corporate badge." - icon_state = "armorsec" - -/obj/item/clothing/suit/armor/vest/warden - name = "warden's jacket" - desc = "An armoured jacket with silver rank pips and livery." - icon_state = "warden_jacket" - armor = list( - melee = ARMOR_MELEE_RESISTANT, - bullet = ARMOR_BALLISTIC_SMALL, - laser = ARMOR_LASER_HANDGUNS, - energy = ARMOR_ENERGY_MINOR, - bomb = ARMOR_BOMB_MINOR - ) - body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS - cold_protection = UPPER_TORSO|LOWER_TORSO|ARMS - heat_protection = UPPER_TORSO|LOWER_TORSO|ARMS - -/obj/item/clothing/suit/armor/swat/officer - name = "officer jacket" - desc = "An armored jacket used in special operations." - icon_state = "detective" - item_state = "detective" - blood_overlay_type = "coat" - body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS - cold_protection = UPPER_TORSO|LOWER_TORSO|ARMS - heat_protection = UPPER_TORSO|LOWER_TORSO|ARMS - valid_accessory_slots = list(ACCESSORY_SLOT_INSIGNIA) - - -/obj/item/clothing/suit/armor/det_suit - name = "armor" - desc = "An armored vest with a detective's badge on it." - icon_state = "detective-armor" - blood_overlay_type = "armor" - body_parts_covered = UPPER_TORSO|LOWER_TORSO - armor = list( - melee = ARMOR_MELEE_RESISTANT, - bullet = ARMOR_BALLISTIC_SMALL, - laser = ARMOR_LASER_HANDGUNS, - energy = ARMOR_ENERGY_MINOR, - bomb = ARMOR_BOMB_MINOR - ) - - -//Reactive armor -//When the wearer gets hit, this armor will teleport the user a short distance away (to safety or to more danger, no one knows. That's the fun of it!) -/obj/item/clothing/suit/armor/reactive - name = "reactive teleport armor" - desc = "Someone separated our Chief Science Officer from their own head!" - var/active = 0.0 - icon_state = "reactiveoff" - blood_overlay_type = "armor" - armor = null - - -/obj/item/clothing/suit/armor/reactive/handle_shield(mob/user, var/damage, atom/damage_source = null, mob/attacker = null, var/def_zone = null, var/attack_text = "the attack") - if(prob(50)) - user.visible_message("The reactive teleport system flings [user] clear of the attack!") - var/list/turfs = new/list() - for(var/turf/T in orange(6, user)) - if(istype(T,/turf/space)) continue - if(T.density) continue - if(T.x>world.maxx-6 || T.x<6) continue - if(T.y>world.maxy-6 || T.y<6) continue - turfs += T - if(!turfs.len) turfs += pick(/turf in orange(6)) - var/turf/picked = pick(turfs) - if(!isturf(picked)) return - - var/datum/effect/effect/system/spark_spread/spark_system = new /datum/effect/effect/system/spark_spread() - spark_system.set_up(5, 0, user.loc) - spark_system.start() - playsound(user.loc, "sparks", 50, 1) - - user.forceMove(picked) - return PROJECTILE_FORCE_MISS - return 0 - -/obj/item/clothing/suit/armor/reactive/attack_self(mob/user as mob) - src.active = !( src.active ) - if (src.active) - to_chat(user, "The reactive armor is now active.") - src.icon_state = "reactive" - src.item_state = "reactive" - else - to_chat(user, "The reactive armor is now inactive.") - src.icon_state = "reactiveoff" - src.item_state = "reactiveoff" - src.add_fingerprint(user) - return - -/obj/item/clothing/suit/armor/reactive/emp_act(severity) - active = 0 - src.icon_state = "reactiveoff" - src.item_state = "reactiveoff" - ..() - -//Non-hardsuit ERT armor. -//Commander -/obj/item/clothing/suit/armor/vest/ert - name = "asset protection command armor" - desc = "A set of armor worn by many corporate and private asset protection forces. Has blue highlights." - icon_state = "ertarmor_cmd" - body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS - armor = list( - melee = ARMOR_MELEE_KNIVES, - bullet = ARMOR_BALLISTIC_PISTOL, - laser = ARMOR_LASER_MAJOR, - energy = ARMOR_ENERGY_SMALL, - bomb = ARMOR_BOMB_PADDED - ) - -//Security -/obj/item/clothing/suit/armor/vest/ert/security - name = "asset protection security armor" - desc = "A set of armor worn by many corporate and private asset protection forces. Has red highlights." - icon_state = "ertarmor_sec" - -//Engineer -/obj/item/clothing/suit/armor/vest/ert/engineer - name = "asset protection engineering armor" - desc = "A set of armor worn by many corporate and private asset protection forces. Has orange highlights." - icon_state = "ertarmor_eng" - -//Medical -/obj/item/clothing/suit/armor/vest/ert/medical - name = "asset protection medical armor" - desc = "A set of armor worn by many corporate and private asset protection forces. Has red and white highlights." - icon_state = "ertarmor_med" - -//New Vests -/obj/item/clothing/suit/armor/vest - name = "armored vest" - desc = "An armor vest made of synthetic fibers." - icon_state = "kvest" - armor = list( - melee = ARMOR_MELEE_KNIVES, - bullet = ARMOR_BALLISTIC_PISTOL, - laser = ARMOR_LASER_SMALL, - energy = ARMOR_ENERGY_MINOR, - bomb = ARMOR_BOMB_PADDED - ) - valid_accessory_slots = list(ACCESSORY_SLOT_INSIGNIA) - -/obj/item/clothing/suit/armor/vest/nt - name = "corporate armored vest" - desc = "A synthetic armor vest. This one is marked with a corporate logo." - icon_state = "ntvest" - -/obj/item/clothing/suit/armor/vest/detective - name = "brown armored vest" - desc = "An synthetic armor vest colored in a vintage brown." - icon_state = "detvest" - -/obj/item/clothing/suit/armor/vest/pcrc - name = "contractor armored vest" - desc = "A synthetic armor vest. This one is marked with the crest of Proxima Centauri Risk Control, a private security firm." - icon_state = "pcrcvest" - -/obj/item/clothing/suit/armor/vest/press - name = "press armored vest" - desc = "A synthetic armor vest. This one is blue and has patches with the word 'PRESS' on the back and front." - icon_state = "pvest" - -/obj/item/clothing/suit/storage/vest - name = "webbed armor vest" - desc = "A synthetic armor vest. This one has added webbing and ballistic plates." - icon_state = "webvest" - armor = list( - melee = ARMOR_MELEE_KNIVES, - bullet = ARMOR_BALLISTIC_RESISTANT, - laser = ARMOR_LASER_HANDGUNS, - energy = ARMOR_ENERGY_SMALL, - bomb = ARMOR_BOMB_PADDED - ) - valid_accessory_slots = list(ACCESSORY_SLOT_INSIGNIA) - allowed = list(/obj/item/gun/energy,/obj/item/device/radio,/obj/item/reagent_containers/spray/pepper,/obj/item/gun/projectile,/obj/item/ammo_magazine,/obj/item/ammo_casing,/obj/item/melee/baton,/obj/item/handcuffs,/obj/item/gun/magnetic) - body_parts_covered = UPPER_TORSO|LOWER_TORSO - item_flags = ITEM_FLAG_THICKMATERIAL - cold_protection = UPPER_TORSO|LOWER_TORSO - min_cold_protection_temperature = ARMOR_MIN_COLD_PROTECTION_TEMPERATURE - heat_protection = UPPER_TORSO|LOWER_TORSO - max_heat_protection_temperature = ARMOR_MAX_HEAT_PROTECTION_TEMPERATURE - siemens_coefficient = 0.6 - -/obj/item/clothing/suit/storage/vest/nt - name = "corporate security heavy armored vest" - desc = "A synthetic armor vest with CORPORATE SECURITY printed in red lettering on the chest. This one has added webbing and ballistic plates." - icon_state = "ntwebvest" - -/obj/item/clothing/suit/storage/vest/nt/warden - name = "warden heavy armored vest" - desc = "A synthetic armor vest with WARDEN printed in silver lettering on the chest. This one has added webbing and ballistic plates." - icon_state = "secwebvest" - -/obj/item/clothing/suit/storage/vest/nt/hos - name = "commander heavy armored vest" - desc = "A synthetic armor vest with COMMANDER printed in gold lettering on the chest. This one has added webbing and ballistic plates." - icon_state = "comwebvest" - -/obj/item/clothing/suit/storage/vest/pcrc - name = "contractor heavy armored vest" - desc = "A synthetic armor vest with PRIVATE SECURITY printed in cyan lettering on the chest. This one has added webbing and ballistic plates." - icon_state = "pcrcwebvest" - -/obj/item/clothing/suit/storage/vest/tactical //crack at a more balanced mid-range armor, minor improvements over standard vests, with the idea "modern" combat armor would focus on energy weapon protection. - name = "tactical armored vest" - desc = "A heavy armored vest in a fetching tan. It is surprisingly flexible and light, even with the extra webbing and advanced ceramic plates." - icon_state = "tacwebvest" - armor = list( - melee = ARMOR_MELEE_KNIVES, - bullet = ARMOR_BALLISTIC_RESISTANT, - laser = ARMOR_LASER_MAJOR, - energy = ARMOR_ENERGY_SMALL, - bomb = ARMOR_BOMB_PADDED - ) - -/obj/item/clothing/suit/storage/vest/merc - name = "heavy combat armor" - desc = "A high-quality armored vest made from a hard synthetic material. It is surprisingly flexible and light, despite formidable armor plating." - icon_state = "mercwebvest" - armor = list( - melee = ARMOR_MELEE_RESISTANT, - bullet = ARMOR_BALLISTIC_RIFLE, - laser = ARMOR_LASER_MAJOR, - energy = ARMOR_ENERGY_SMALL, - bomb = ARMOR_BOMB_PADDED - ) - body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS //now covers legs with new sprite - cold_protection = UPPER_TORSO|LOWER_TORSO|LEGS - heat_protection = UPPER_TORSO|LOWER_TORSO|LEGS - -//Modular plate carriers -/obj/item/clothing/suit/armor/pcarrier - name = "plate carrier" - desc = "A lightweight black plate carrier vest. It can be equipped with armor plates, but provides no protection of its own." - icon = 'icons/obj/clothing/obj_suit_modular_armor.dmi' - item_icons = list(slot_wear_suit_str = 'icons/mob/onmob/onmob_modular_armor.dmi') - icon_state = "pcarrier" - valid_accessory_slots = list(ACCESSORY_SLOT_INSIGNIA, ACCESSORY_SLOT_ARMOR_C, ACCESSORY_SLOT_ARMOR_A, ACCESSORY_SLOT_ARMOR_L, ACCESSORY_SLOT_ARMOR_S, ACCESSORY_SLOT_ARMOR_M) - restricted_accessory_slots = list(ACCESSORY_SLOT_ARMOR_C, ACCESSORY_SLOT_ARMOR_A, ACCESSORY_SLOT_ARMOR_L, ACCESSORY_SLOT_ARMOR_S) - blood_overlay_type = "armor" - flags_inv = 0 - -/obj/item/clothing/suit/armor/pcarrier/light - accessories = list(/obj/item/clothing/accessory/armor_plate) - -/obj/item/clothing/suit/armor/pcarrier/light/nt - accessories = list(/obj/item/clothing/accessory/armor_plate, /obj/item/clothing/accessory/armor_tag/nt) - -/obj/item/clothing/suit/armor/pcarrier/light/press - accessories = list(/obj/item/clothing/accessory/armor_plate, /obj/item/clothing/accessory/armor_tag/press) - -/obj/item/clothing/suit/armor/pcarrier/medium - accessories = list(/obj/item/clothing/accessory/armor_plate/medium, /obj/item/clothing/accessory/storage/pouches) - -/obj/item/clothing/suit/armor/pcarrier/medium/nt - accessories = list(/obj/item/clothing/accessory/armor_plate/medium, /obj/item/clothing/accessory/storage/pouches, /obj/item/clothing/accessory/armor_tag/nt) - -/obj/item/clothing/suit/armor/pcarrier/blue - name = "blue plate carrier" - desc = "A lightweight blue plate carrier vest. It can be equipped with armor plates, but provides no protection of its own." - icon_state = "pcarrier_blue" - -/obj/item/clothing/suit/armor/pcarrier/green - name = "green plate carrier" - desc = "A lightweight green plate carrier vest. It can be equipped with armor plates, but provides no protection of its own." - icon_state = "pcarrier_green" - -/obj/item/clothing/suit/armor/pcarrier/navy - name = "navy plate carrier" - desc = "A lightweight navy blue plate carrier vest. It can be equipped with armor plates, but provides no protection of its own." - icon_state = "pcarrier_navy" - -/obj/item/clothing/suit/armor/pcarrier/tan - name = "tan plate carrier" - desc = "A lightweight tan plate carrier vest. It can be equipped with armor plates, but provides no protection of its own." - icon_state = "pcarrier_tan" - -/obj/item/clothing/suit/armor/pcarrier/tan/tactical - name = "tactical plate carrier" - accessories = list(/obj/item/clothing/accessory/armor_plate/tactical, /obj/item/clothing/accessory/storage/pouches/large/tan) - -/obj/item/clothing/suit/armor/pcarrier/merc - accessories = list(/obj/item/clothing/accessory/armor_plate/merc, /obj/item/clothing/accessory/arm_guards/merc, /obj/item/clothing/accessory/leg_guards/merc, /obj/item/clothing/accessory/storage/pouches/large) - -//Modular specialty armor -/obj/item/clothing/suit/armor/riot - name = "riot vest" - desc = "An armored vest with heavy padding to protect against melee attacks." - icon = 'icons/obj/clothing/obj_suit_modular_armor.dmi' - item_icons = list(slot_wear_suit_str = 'icons/mob/onmob/onmob_modular_armor.dmi') - icon_state = "riot" - valid_accessory_slots = list(ACCESSORY_SLOT_INSIGNIA, ACCESSORY_SLOT_ARMOR_A, ACCESSORY_SLOT_ARMOR_L) - restricted_accessory_slots = list(ACCESSORY_SLOT_INSIGNIA, ACCESSORY_SLOT_ARMOR_A, ACCESSORY_SLOT_ARMOR_L) - body_parts_covered = UPPER_TORSO|LOWER_TORSO - armor = list( - melee = ARMOR_MELEE_VERY_HIGH, - bullet = ARMOR_BALLISTIC_SMALL, - laser = ARMOR_LASER_SMALL, - energy = ARMOR_ENERGY_MINOR, - bomb = ARMOR_BOMB_PADDED - ) - flags_inv = CLOTHING_BULKY - slowdown_general = 1 - siemens_coefficient = 0.5 - accessories = list(/obj/item/clothing/accessory/arm_guards/riot, /obj/item/clothing/accessory/leg_guards/riot) - -/obj/item/clothing/suit/armor/bulletproof - name = "ballistic vest" - desc = "An armored vest with heavy plates to protect against ballistic projectiles." - icon = 'icons/obj/clothing/obj_suit_modular_armor.dmi' - item_icons = list(slot_wear_suit_str = 'icons/mob/onmob/onmob_modular_armor.dmi') - icon_state = "ballistic" - valid_accessory_slots = list(ACCESSORY_SLOT_INSIGNIA, ACCESSORY_SLOT_ARMOR_A, ACCESSORY_SLOT_ARMOR_L) - restricted_accessory_slots = list(ACCESSORY_SLOT_INSIGNIA, ACCESSORY_SLOT_ARMOR_A, ACCESSORY_SLOT_ARMOR_L) - body_parts_covered = UPPER_TORSO|LOWER_TORSO - armor = list( - melee = ARMOR_MELEE_RESISTANT, - bullet = ARMOR_BALLISTIC_AP, - laser = ARMOR_LASER_SMALL, - energy = ARMOR_ENERGY_MINOR, - bomb = ARMOR_BOMB_PADDED - ) - flags_inv = CLOTHING_BULKY - slowdown_general = 1 - siemens_coefficient = 0.7 - accessories = list(/obj/item/clothing/accessory/arm_guards/ballistic, /obj/item/clothing/accessory/leg_guards/ballistic) - -/obj/item/clothing/suit/armor/bulletproof/vest //because apparently some map uses this somewhere and I'm too lazy to go looking for and replacing it. - accessories = null - -/obj/item/clothing/suit/armor/laserproof - name = "ablative vest" - desc = "An armored vest with advanced shielding to protect against energy weapons." - icon = 'icons/obj/clothing/obj_suit_modular_armor.dmi' - item_icons = list(slot_wear_suit_str = 'icons/mob/onmob/onmob_modular_armor.dmi') - icon_state = "ablative" - valid_accessory_slots = list(ACCESSORY_SLOT_INSIGNIA, ACCESSORY_SLOT_ARMOR_A, ACCESSORY_SLOT_ARMOR_L) - restricted_accessory_slots = list(ACCESSORY_SLOT_INSIGNIA, ACCESSORY_SLOT_ARMOR_A, ACCESSORY_SLOT_ARMOR_L) - body_parts_covered = UPPER_TORSO|LOWER_TORSO - armor = list( - melee = ARMOR_MELEE_KNIVES, - bullet = ARMOR_BALLISTIC_PISTOL, - laser = ARMOR_LASER_RIFLES, - energy = ARMOR_ENERGY_RESISTANT - ) - flags_inv = CLOTHING_BULKY - slowdown_general = 1 - siemens_coefficient = 0 - accessories = list(/obj/item/clothing/accessory/arm_guards/ablative, /obj/item/clothing/accessory/leg_guards/ablative) - -/obj/item/clothing/suit/armor/laserproof/handle_shield(mob/user, var/damage, atom/damage_source = null, mob/attacker = null, var/def_zone = null, var/attack_text = "the attack") - if(istype(damage_source, /obj/item/projectile/energy) || istype(damage_source, /obj/item/projectile/beam)) - var/obj/item/projectile/P = damage_source - - var/reflectchance = 40 - round(damage/3) - if(!(def_zone in list(BP_CHEST, BP_GROIN))) //not changing this so arm and leg shots reflect, gives some incentive to not aim center-mass - reflectchance /= 2 - if(P.starting && prob(reflectchance)) - visible_message("\The [user]'s [src.name] reflects [attack_text]!") - - // Find a turf near or on the original location to bounce to - var/new_x = P.starting.x + pick(0, 0, 0, 0, 0, -1, 1, -2, 2) - var/new_y = P.starting.y + pick(0, 0, 0, 0, 0, -1, 1, -2, 2) - var/turf/curloc = get_turf(user) - - // redirect the projectile - P.redirect(new_x, new_y, curloc, user) - - return PROJECTILE_CONTINUE // complete projectile permutation - -//All of the armor below is mostly unused - - -/obj/item/clothing/suit/armor/centcomm - name = "\improper Cent. Com. armor" - desc = "A suit that protects against some damage." - icon_state = "centcom" - w_class = ITEM_SIZE_HUGE//bulky item - body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS - allowed = list( - /obj/item/gun/energy, - /obj/item/melee/baton, - /obj/item/handcuffs, - /obj/item/tank/oxygen_emergency, - /obj/item/tank/oxygen_emergency_extended, - /obj/item/tank/nitrogen_emergency, - ) - flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT - cold_protection = UPPER_TORSO | LOWER_TORSO | LEGS | FEET | ARMS | HANDS - min_cold_protection_temperature = SPACE_SUIT_MIN_COLD_PROTECTION_TEMPERATURE - siemens_coefficient = 0 - -/obj/item/clothing/suit/armor/heavy - name = "heavy armor" - desc = "A heavily armored suit that protects against moderate damage." - icon_state = "heavy" - w_class = ITEM_SIZE_HUGE//bulky item - gas_transfer_coefficient = 0.90 - body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS - flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT - siemens_coefficient = 0 - -/obj/item/clothing/suit/armor/tdome - body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS - flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT - -/obj/item/clothing/suit/armor/tdome/red - name = "thunderdome suit (red)" - desc = "Reddish armor." - icon_state = "tdred" - siemens_coefficient = 1 - -/obj/item/clothing/suit/armor/tdome/green - name = "thunderdome suit (green)" - desc = "Pukish armor." - icon_state = "tdgreen" - siemens_coefficient = 1 diff --git a/code/modules/clothing/suits/bio.dm b/code/modules/clothing/suits/bio.dm deleted file mode 100644 index 901aa0084a737..0000000000000 --- a/code/modules/clothing/suits/bio.dm +++ /dev/null @@ -1,117 +0,0 @@ -//Biosuit complete with shoes (in the item sprite) -/obj/item/clothing/head/bio_hood - name = "bio hood" - icon_state = "bio" - item_state_slots = list( - slot_l_hand_str = "bio_hood", - slot_r_hand_str = "bio_hood", - ) - desc = "A hood that protects the head and face from biological comtaminants." - permeability_coefficient = 0 - armor = list( - bio = ARMOR_BIO_SHIELDED, - rad = ARMOR_RAD_MINOR - ) - flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|BLOCKHAIR - item_flags = ITEM_FLAG_THICKMATERIAL - body_parts_covered = HEAD|FACE|EYES - siemens_coefficient = 0.9 - -/obj/item/clothing/suit/bio_suit - name = "bio suit" - desc = "A suit that protects against biological contamination." - icon_state = "bio" - item_state_slots = list( - slot_l_hand_str = "bio_suit", - slot_r_hand_str = "bio_suit", - ) - w_class = ITEM_SIZE_HUGE//bulky item - gas_transfer_coefficient = 0 - permeability_coefficient = 0 - body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS - allowed = list( - /obj/item/tank/oxygen_emergency, - /obj/item/tank/oxygen_emergency_extended, - /obj/item/tank/nitrogen_emergency, - /obj/item/pen, - /obj/item/device/flashlight/pen, - /obj/item/device/scanner/health, - /obj/item/device/ano_scanner, - /obj/item/clothing/head/bio_hood, - /obj/item/clothing/mask/gas - ) - armor = list( - bio = ARMOR_BIO_SHIELDED, - rad = ARMOR_RAD_MINOR - ) - flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT|HIDETAIL - item_flags = ITEM_FLAG_THICKMATERIAL - siemens_coefficient = 0.9 - -/obj/item/clothing/suit/bio_suit/Initialize() - . = ..() - slowdown_per_slot[slot_wear_suit] = 0.75 - -//Standard biosuit, orange stripe -/obj/item/clothing/head/bio_hood/general - icon_state = "bio_general" - body_parts_covered = HEAD|FACE|EYES - -/obj/item/clothing/suit/bio_suit/general - icon_state = "bio_general" - body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS|HANDS|FEET - flags_inv = HIDEJUMPSUIT|HIDETAIL|HIDEGLOVES|HIDESHOES - -//Virology biosuit, green stripe -/obj/item/clothing/head/bio_hood/virology - icon_state = "bio_virology" - -/obj/item/clothing/suit/bio_suit/virology - icon_state = "bio_virology" - body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS|HANDS|FEET - flags_inv = HIDEJUMPSUIT|HIDETAIL|HIDEGLOVES|HIDESHOES - -//Security biosuit, grey with red stripe across the chest -/obj/item/clothing/head/bio_hood/security - icon_state = "bio_security" - -/obj/item/clothing/suit/bio_suit/security - icon_state = "bio_security" - body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS|HANDS|FEET - flags_inv = HIDEJUMPSUIT|HIDETAIL|HIDEGLOVES|HIDESHOES - -//Janitor's biosuit, grey with purple arms -/obj/item/clothing/head/bio_hood/janitor - icon_state = "bio_janitor" - -/obj/item/clothing/suit/bio_suit/janitor - icon_state = "bio_janitor" - body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS|HANDS|FEET - flags_inv = HIDEJUMPSUIT|HIDETAIL|HIDEGLOVES|HIDESHOES - - -//Scientist's biosuit, white with a pink-ish hue -/obj/item/clothing/head/bio_hood/scientist - icon_state = "bio_scientist" - -/obj/item/clothing/suit/bio_suit/scientist - icon_state = "bio_scientist" - body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS|HANDS|FEET - flags_inv = HIDEJUMPSUIT|HIDETAIL|HIDEGLOVES|HIDESHOES - -//CMO's biosuit, blue stripe -/obj/item/clothing/suit/bio_suit/cmo - icon_state = "bio_cmo" - body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS|HANDS|FEET - flags_inv = HIDEJUMPSUIT|HIDETAIL|HIDEGLOVES|HIDESHOES - -/obj/item/clothing/head/bio_hood/cmo - icon_state = "bio_cmo" - - -//Plague Dr mask can be found in clothing/masks/gasmask.dm -/obj/item/clothing/suit/bio_suit/plaguedoctorsuit - name = "Plague doctor suit" - desc = "It protected doctors from the Black Death, back then. You bet your arse it's gonna help you against viruses." - icon_state = "plaguedoctor" - flags_inv = HIDEGLOVES|HIDEJUMPSUIT|HIDETAIL diff --git a/code/modules/clothing/suits/jobs.dm b/code/modules/clothing/suits/jobs.dm deleted file mode 100644 index bdfc230a9af84..0000000000000 --- a/code/modules/clothing/suits/jobs.dm +++ /dev/null @@ -1,314 +0,0 @@ -/* - * Job related - */ - -//Botanist -/obj/item/clothing/suit/apron - name = "apron" - desc = "A basic blue apron." - icon_state = "apron" - item_state = "apron" - blood_overlay_type = "armor" - body_parts_covered = 0 - species_restricted = null - allowed = list (/obj/item/reagent_containers/spray/plantbgone,/obj/item/device/scanner/plant,/obj/item/seeds,/obj/item/reagent_containers/glass/bottle,/obj/item/material/minihoe) - -//Captain -/obj/item/clothing/suit/captunic - name = "captain's parade tunic" - desc = "Worn by a Captain to show their class." - icon_state = "captunic" - body_parts_covered = UPPER_TORSO|ARMS - flags_inv = HIDEJUMPSUIT - -/obj/item/clothing/suit/captunic/capjacket - name = "captain's uniform jacket" - desc = "A less formal jacket for everyday captain use." - icon_state = "capjacket" - body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS - flags_inv = 0 - -//Chaplain -/obj/item/clothing/suit/chaplain_hoodie - name = "chaplain hoodie" - desc = "This suit says to you 'hush'!" - icon_state = "chaplain_hoodie" - body_parts_covered = UPPER_TORSO|ARMS - -//Chaplain -/obj/item/clothing/suit/nun - name = "nun robe" - desc = "Maximum piety in this star system." - icon_state = "nun" - body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS - flags_inv = HIDESHOES|HIDEJUMPSUIT - -//Chef -/obj/item/clothing/suit/chef - name = "chef's apron" - desc = "An apron used by a high class chef." - icon_state = "chef" - gas_transfer_coefficient = 0.90 - permeability_coefficient = 0.50 - body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS - allowed = list (/obj/item/material/knife) - -//Chef -/obj/item/clothing/suit/chef/classic - name = "classic chef's apron" - desc = "A basic, dull, white chef's apron." - icon_state = "apronchef" - species_restricted = null - blood_overlay_type = "armor" - body_parts_covered = 0 - -//Security -/obj/item/clothing/suit/security/navyofficer - name = "security officer's jacket" - desc = "This jacket is for those special occasions when a security officer actually feels safe." - icon_state = "officerbluejacket" - body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS - -/obj/item/clothing/suit/security/navywarden - name = "warden's jacket" - desc = "Perfectly suited for the warden that wants to leave an impression of style on those who visit the brig." - icon_state = "wardenbluejacket" - body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS - -/obj/item/clothing/suit/security/navyhos - name = "head of security's jacket" - desc = "This piece of clothing was specifically designed for asserting superior authority." - icon_state = "hosbluejacket" - body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS - -//Detective -/obj/item/clothing/suit/storage/det_trench - name = "brown trenchcoat" - desc = "A rugged canvas trenchcoat, designed and created by TX Fabrication Corp. The coat is externally impact resistant - perfect for your next act of autodefenestration!" - icon_state = "detective" - valid_accessory_slots = list(ACCESSORY_SLOT_INSIGNIA) - blood_overlay_type = "coat" - body_parts_covered = UPPER_TORSO|ARMS - allowed = list( - /obj/item/tank/oxygen_emergency, - /obj/item/tank/oxygen_emergency_extended, - /obj/item/tank/nitrogen_emergency, - /obj/item/device/flashlight, - /obj/item/gun/energy, - /obj/item/gun/projectile, - /obj/item/ammo_magazine, - /obj/item/ammo_casing, - /obj/item/melee/baton, - /obj/item/handcuffs, - /obj/item/storage/fancy/cigarettes, - /obj/item/flame/lighter, - /obj/item/device/taperecorder - ) - armor = list( - melee = ARMOR_MELEE_KNIVES, - bullet = ARMOR_BALLISTIC_SMALL, - laser = ARMOR_LASER_SMALL, - energy = ARMOR_ENERGY_MINOR - ) - -/obj/item/clothing/suit/storage/det_trench/ft - desc = "A rugged canvas trenchcoat, designed and created by TX Fabrication Corp. This one wouldn't block much of anything." - armor = null - -/obj/item/clothing/suit/storage/det_trench/grey - name = "grey trenchcoat" - icon_state = "detective2" - -//Forensics -/obj/item/clothing/suit/storage/forensics - name = "jacket" - desc = "A forensics technician jacket." - item_state = "det_suit" - body_parts_covered = UPPER_TORSO|ARMS - allowed = list( - /obj/item/tank/oxygen_emergency, - /obj/item/tank/oxygen_emergency_extended, - /obj/item/tank/nitrogen_emergency, - /obj/item/device/flashlight, - /obj/item/gun/energy, - /obj/item/gun/projectile, - /obj/item/ammo_magazine, - /obj/item/ammo_casing, - /obj/item/melee/baton, - /obj/item/handcuffs, - /obj/item/device/taperecorder - ) - armor = list( - melee = ARMOR_MELEE_SMALL, - bullet = ARMOR_BALLISTIC_MINOR, - laser = ARMOR_LASER_MINOR, - energy = ARMOR_ENERGY_MINOR - ) - -/obj/item/clothing/suit/storage/forensics/red - name = "red jacket" - desc = "A red forensics technician jacket." - icon_state = "forensics_red" - -/obj/item/clothing/suit/storage/forensics/blue - name = "blue jacket" - desc = "A blue forensics technician jacket." - icon_state = "forensics_blue" - -//Engineering -/obj/item/clothing/suit/storage/hazardvest - name = "hazard vest" - desc = "A high-visibility vest used in work zones." - icon_state = "hazard" - blood_overlay_type = "armor" - species_restricted = null - allowed = list ( - /obj/item/device/scanner/gas, - /obj/item/device/flashlight, - /obj/item/device/multitool, - /obj/item/device/radio, - /obj/item/device/t_scanner, - /obj/item/crowbar, - /obj/item/screwdriver, - /obj/item/weldingtool, - /obj/item/wirecutters, - /obj/item/wrench, - /obj/item/tank/oxygen_emergency, - /obj/item/tank/oxygen_emergency_extended, - /obj/item/tank/nitrogen_emergency, - /obj/item/clothing/mask/gas, - /obj/item/taperoll/engineering - ) - body_parts_covered = UPPER_TORSO - valid_accessory_slots = list(ACCESSORY_SLOT_INSIGNIA) - -/obj/item/clothing/suit/storage/hazardvest/blue - name = "blue hazard vest" - desc = "A high-visibility vest used in work zones. This one is blue!" - icon_state = "hazard_b" - -/obj/item/clothing/suit/storage/hazardvest/white - name = "white hazard vest" - desc = "A high-visibility vest used in work zones. This one has a blue cross!" - icon_state = "hazard_w" - -/obj/item/clothing/suit/storage/hazardvest/green - name = "green hazard vest" - desc = "A high-visibility vest used in work zones. This one is green!" - icon_state = "hazard_g" - - -/obj/item/clothing/suit/storage/toggle/highvis - name = "high visibility jacket" - desc = "A loose-fitting, high visibility jacket to help crew be recognizable in high traffic areas with large industrial equipment. Don't catch the Charon's landing gear with your teeth!" - icon_state = "highvis" - blood_overlay_type = "coat" - body_parts_covered = UPPER_TORSO|ARMS - valid_accessory_slots = list(ACCESSORY_SLOT_INSIGNIA) - -//Lawyer -/obj/item/clothing/suit/storage/toggle/suit - name = "suit jacket" - desc = "A snappy dress jacket." - icon_state = "suitjacket" - blood_overlay_type = "coat" - body_parts_covered = UPPER_TORSO|ARMS - valid_accessory_slots = list(ACCESSORY_SLOT_INSIGNIA) - -/obj/item/clothing/suit/storage/toggle/suit_double - name = "double-breasted suit jacket" - desc = "A snappy, double-breasted dress jacket." - icon_state = "suitjacket_double" - blood_overlay_type = "coat" - body_parts_covered = UPPER_TORSO|ARMS - valid_accessory_slots = list(ACCESSORY_SLOT_INSIGNIA) - -/obj/item/clothing/suit/storage/toggle/suit/blue - name = "blue suit jacket" - color = "#00326e" - -/obj/item/clothing/suit/storage/toggle/suit/purple - name = "purple suit jacket" - color = "#6c316c" - -/obj/item/clothing/suit/storage/toggle/suit/black - name = "black suit jacket" - color = "#1f1f1f" - -//Medical -/obj/item/clothing/suit/storage/toggle/fr_jacket - name = "first responder jacket" - desc = "A high-visibility jacket worn by medical first responders." - icon_state = "fr_jacket" - blood_overlay_type = "armor" - allowed = list( - /obj/item/stack/medical, - /obj/item/reagent_containers/dropper, - /obj/item/reagent_containers/hypospray, - /obj/item/reagent_containers/syringe, - /obj/item/device/scanner/health, - /obj/item/device/flashlight, - /obj/item/device/radio, - /obj/item/tank/oxygen_emergency, - /obj/item/tank/oxygen_emergency_extended, - /obj/item/tank/nitrogen_emergency, - /obj/item/reagent_containers/ivbag - ) - body_parts_covered = UPPER_TORSO|ARMS - valid_accessory_slots = list(ACCESSORY_SLOT_INSIGNIA) - -/obj/item/clothing/suit/storage/toggle/fr_jacket/ems - name = "\improper EMS jacket" - desc = "A dark blue, martian-pattern, EMS jacket. It sports high-visibility reflective stripes and a star of life on the back." - icon_state = "ems_jacket" - -/obj/item/clothing/suit/storage/toggle/fr_jacket/emrs - name = "medical jacket" - desc = "A white jacket often worn in emergency medical and reanimation services across human space." - icon_state = "medical_jacket" - -/obj/item/clothing/suit/storage/medical_chest_rig - name = "\improper MT chest-rig" - desc = "A black chest-rig with blue pouches worn by medical first responders, meant to carry their equipment. It has a blue 'Medic' tag on its chest." - icon_state = "Med-chest-rig" - blood_overlay_type = "armor" - allowed = list( - /obj/item/stack/medical, - /obj/item/reagent_containers/dropper, - /obj/item/reagent_containers/hypospray, - /obj/item/reagent_containers/syringe, - /obj/item/device/scanner/health, - /obj/item/device/flashlight, - /obj/item/device/radio, - /obj/item/tank/oxygen_emergency, - /obj/item/tank/oxygen_emergency_extended, - /obj/item/tank/nitrogen_emergency, - /obj/item/reagent_containers/ivbag, - /obj/item/clothing/head/hardhat/EMS - ) - body_parts_covered = UPPER_TORSO - -/obj/item/clothing/suit/surgicalapron - name = "surgical apron" - desc = "A sterile blue apron for performing surgery." - icon_state = "surgical" - blood_overlay_type = "armor" - body_parts_covered = UPPER_TORSO|LOWER_TORSO - allowed = list( - /obj/item/stack/medical, - /obj/item/reagent_containers/dropper, - /obj/item/reagent_containers/hypospray, - /obj/item/reagent_containers/syringe, - /obj/item/device/scanner/health, - /obj/item/device/flashlight, - /obj/item/device/radio, - /obj/item/tank/oxygen_emergency, - /obj/item/tank/oxygen_emergency_extended, - /obj/item/tank/nitrogen_emergency, - /obj/item/scalpel, - /obj/item/retractor, - /obj/item/hemostat, - /obj/item/cautery, - /obj/item/bonegel, - /obj/item/FixOVein - ) diff --git a/code/modules/clothing/suits/labcoat.dm b/code/modules/clothing/suits/labcoat.dm deleted file mode 100644 index cf07e713eeb4d..0000000000000 --- a/code/modules/clothing/suits/labcoat.dm +++ /dev/null @@ -1,139 +0,0 @@ -/obj/item/clothing/suit/storage/toggle/labcoat - name = "labcoat" - desc = "A suit that protects against minor chemical spills." - icon_state = "labcoat" - blood_overlay_type = "coat" - body_parts_covered = UPPER_TORSO|ARMS - allowed = list(/obj/item/device/scanner/gas,/obj/item/stack/medical,/obj/item/reagent_containers/dropper,/obj/item/reagent_containers/syringe,/obj/item/reagent_containers/hypospray,/obj/item/device/scanner/health,/obj/item/device/flashlight/pen,/obj/item/reagent_containers/glass/bottle,/obj/item/reagent_containers/glass/beaker,/obj/item/reagent_containers/pill,/obj/item/storage/pill_bottle,/obj/item/paper) - armor = list( - bio = ARMOR_BIO_RESISTANT - ) - valid_accessory_slots = list(ACCESSORY_SLOT_ARMBAND, ACCESSORY_SLOT_INSIGNIA, ACCESSORY_SLOT_RANK) - restricted_accessory_slots = list(ACCESSORY_SLOT_ARMBAND) - -/obj/item/clothing/suit/storage/toggle/labcoat/cmo - name = "chief medical officer's labcoat" - desc = "Bluer than the standard model." - icon_state = "labcoat_cmo" - -/obj/item/clothing/suit/storage/toggle/labcoat/cmoalt - name = "chief medical officer's labcoat" - desc = "A labcoat with command blue highlights." - icon_state = "labcoat_cmoalt" - -/obj/item/clothing/suit/storage/toggle/labcoat/mad - name = "The Mad's labcoat" - desc = "It makes you look capable of konking someone on the noggin and shooting them into space." - icon_state = "labgreen" - -/obj/item/clothing/suit/storage/toggle/labcoat/genetics - name = "geneticist labcoat" - desc = "A suit that protects against minor chemical spills. Has a blue stripe on the shoulder." - icon_state = "labcoat_gen" - -/obj/item/clothing/suit/storage/toggle/labcoat/chemist - name = "pharmacist labcoat" - desc = "A suit that protects against minor chemical spills. Has an orange stripe on the shoulder." - icon_state = "labcoat_chem" - -/obj/item/clothing/suit/storage/toggle/labcoat/virologist - name = "virologist labcoat" - desc = "A suit that protects against minor chemical spills. Offers slightly more protection against biohazards than the standard model. Has a green stripe on the shoulder." - icon_state = "labcoat_vir" - -/obj/item/clothing/suit/storage/toggle/labcoat/blue - name = "blue-edged labcoat" - desc = "A suit that protects against minor chemical spills. This one has blue trim." - icon_state = "blue_edge_labcoat" - -/obj/item/clothing/suit/storage/toggle/labcoat/coat - name = "coat" - desc = "A cozy overcoat." - color = "#292929" - -/obj/item/clothing/suit/storage/toggle/labcoat/xyn_machine - name = "\improper Xynergy labcoat" - desc = "A stiffened, stylised labcoat designed to fit IPCs. It has blue and purple trim, denoting it as a Xynergy labcoat." - icon_state = "labcoat_xy" - armor = list( - melee = ARMOR_MELEE_MINOR, - bio = ARMOR_BIO_MINOR - ) - species_restricted = list(SPECIES_IPC, SPECIES_SHELL) - -/obj/item/clothing/suit/storage/toggle/labcoat/foundation - name = "\improper Foundation labcoat" - desc = "A medical labcoat with a Cuchulain Foundation crest stencilled on the back." - icon_state = "labcoat_foundation" - -/obj/item/clothing/suit/storage/toggle/labcoat/science - name = "\improper EXO labcoat" - desc = "A coat that protects against minor chemical spills. It has a green stripe on the shoulder and green trim on the sleeves, denoting it as a Expeditionary Corps Organisation labcoat." - icon_state = "labcoat_TL" - -/obj/item/clothing/suit/storage/toggle/labcoat/science/ec - name = "\improper EC labcoat" - desc = "A coat that protects against minor chemical spills. It has purple stripes on the shoulders denoting it as an Expeditionary Corps labcoat." - icon_state = "labcoat_tox" - -/obj/item/clothing/suit/storage/toggle/labcoat/science/nanotrasen - name = "\improper NanoTrasen labcoat" - desc = "A suit that protects against minor chemical spills. it has a red stripe on the shoulder and red trim on the sleeves, denoting it as a NanoTrasen labcoat." - icon_state = "labcoat_nt" - -/obj/item/clothing/suit/storage/toggle/labcoat/science/heph - name = "\improper Hephaestus Industries labcoat" - desc = "A suit that protects against minor chemical spills. It has a cyan stripe on the shoulder and cyan trim on the sleeves, denoting it as a Hephaestus Industries labcoat." - icon_state = "labcoat_heph" - -/obj/item/clothing/suit/storage/toggle/labcoat/science/zeng - name = "\improper Zeng-Hu labcoat" - desc = "A suit that protects against minor chemical spills. It has a cyan stripe on the shoulder and cyan trim on the sleeves, denoting it as a Zeng-Hu Pharmaceuticals labcoat." - icon_state = "labcoat_zeng" - -/obj/item/clothing/suit/storage/toggle/labcoat/science/morpheus - name = "\improper Morpheus Cyberkinetics labcoat" - desc = "A suit that protects against minor chemical spills. It has a gray stripe on the shoulder and gray trim on the sleeves, denoting it as a Morpheus Cyberkinetics labcoat." - icon_state = "labcoat_morpheus" - -/obj/item/clothing/suit/storage/toggle/labcoat/science/xynergy - name = "\improper Xynergy labcoat" - desc = "A suit that protects against minor chemical spills. It is coloured magenta and cyan, as well as sporting the Xynergy logo, denoting it as a Xynergy labcoat." - icon_state = "labcoat_xynergy" - -/obj/item/clothing/suit/storage/toggle/labcoat/science/dais - name = "\improper DAIS labcoat" - desc = "A labcoat with a the logo of Deimos Advanced Information Systems emblazoned on the back. It has a stylish blue \ - trim and the pockets are reinforced to hold tools. It seems to have an insulated material woven in to prevent static shocks." - icon_state = "labcoat_dais" - armor = list( - melee = ARMOR_MELEE_MINOR - )//They don't need to protect against the environment very much. - siemens_coefficient = 0.5 //These guys work with electronics. DAIS's labcoats shouldn't conduct very well. - -/obj/item/clothing/suit/storage/toggle/labcoat/rd - name = "research director's labcoat" - desc = "A full-body labcoat covered in green and black designs, denoting it as an Expeditionary Corps Organisation management coat. Judging by the amount of designs on it, it is only to be worn by the most enthusiastic of employees." - icon_state = "labcoat_rd" - body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS - -/obj/item/clothing/suit/storage/toggle/labcoat/rd/nanotrasen - name = "\improper NT research director's labcoat" - desc = "A full-body labcoat covered in red and black designs, denoting it as a NanoTrasen management coat. Judging by the amount of designs on it, it is only to be worn by the most enthusiastic of employees." - icon_state = "labcoat_rd_nt" - -/obj/item/clothing/suit/storage/toggle/labcoat/rd/heph - name = "\improper HI research director's labcoat" - desc = "A full-body labcoat covered in cyan and black designs, denoting it as a Hephaestus Industries management coat. Judging by the amount of designs on it, it is only to be worn by the most enthusiastic of employees." - icon_state = "labcoat_rd_heph" - -/obj/item/clothing/suit/storage/toggle/labcoat/rd/zeng - name = "\improper Z-H research director's labcoat" - desc = "A full-body labcoat covered in cyan and black designs, denoting it as a Zeng-Hu Pharmaceuticals management coat. Judging by the amount of designs on it, it is only to be worn by the most enthusiastic of employees." - icon_state = "labcoat_rd_zeng" - -/obj/item/clothing/suit/storage/toggle/labcoat/rd/ec - name = "chief science officer's labcoat" - desc = "A coat that protects against minor chemical spills. It has purple stripes on the shoulders denoting it as an Expeditionary Corps labcoat, and purple trim to indicate a Chief Science Officer." - icon_state = "labcoat_cso" - body_parts_covered = UPPER_TORSO|ARMS diff --git a/code/modules/clothing/suits/miscellaneous.dm b/code/modules/clothing/suits/miscellaneous.dm deleted file mode 100644 index 3b85eab5f31ed..0000000000000 --- a/code/modules/clothing/suits/miscellaneous.dm +++ /dev/null @@ -1,541 +0,0 @@ -/* - * Contains: - * Lasertag - * Costume - * Misc - */ - -/* - * Lasertag - */ -/obj/item/clothing/suit/bluetag - name = "blue laser tag armour" - desc = "Blue Pride, Galaxy Wide." - icon_state = "bluetag" - blood_overlay_type = "armor" - item_flags = null - body_parts_covered = UPPER_TORSO - allowed = list (/obj/item/gun/energy/lasertag/blue) - siemens_coefficient = 3.0 - -/obj/item/clothing/suit/redtag - name = "red laser tag armour" - desc = "Reputed to go faster." - icon_state = "redtag" - blood_overlay_type = "armor" - item_flags = null - body_parts_covered = UPPER_TORSO - allowed = list (/obj/item/gun/energy/lasertag/red) - siemens_coefficient = 3.0 - -/* - * Costume - */ -/obj/item/clothing/suit/pirate - name = "pirate coat" - desc = "Yarr." - icon_state = "pirate" - w_class = ITEM_SIZE_NORMAL - allowed = list( - /obj/item/gun, - /obj/item/ammo_magazine, - /obj/item/ammo_casing, - /obj/item/melee/baton, - /obj/item/handcuffs, - /obj/item/tank/oxygen_emergency, - /obj/item/tank/oxygen_emergency_extended, - /obj/item/tank/nitrogen_emergency - ) - armor = list( - melee = ARMOR_MELEE_MAJOR, - bullet = ARMOR_BALLISTIC_PISTOL, - laser = ARMOR_LASER_SMALL, - energy = ARMOR_ENERGY_MINOR, - bomb = ARMOR_BOMB_PADDED, - bio = ARMOR_BIO_SMALL, - rad = ARMOR_RAD_MINOR - ) - siemens_coefficient = 0.9 - body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS - - -/obj/item/clothing/suit/hgpirate - name = "pirate captain coat" - desc = "Yarr." - icon_state = "hgpirate" - flags_inv = HIDEJUMPSUIT - body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS|LEGS - - -/obj/item/clothing/suit/cyborg_suit - name = "cyborg suit" - desc = "Suit for a cyborg costume." - icon_state = "death" - obj_flags = OBJ_FLAG_CONDUCTIBLE - fire_resist = T0C+5200 - flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT - - -/obj/item/clothing/suit/greatcoat - name = "great coat" - desc = "A heavy great coat." - icon_state = "leathercoat" - - -/obj/item/clothing/suit/justice - name = "justice suit" - desc = "This pretty much looks ridiculous." - icon_state = "justice" - flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT - body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS|HANDS|LEGS|FEET - - -/obj/item/clothing/suit/judgerobe - name = "judge's robe" - desc = "This robe commands authority." - icon_state = "judge" - body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS - allowed = list(/obj/item/storage/fancy/cigarettes,/obj/item/spacecash) - flags_inv = HIDEJUMPSUIT - - -/obj/item/clothing/suit/apron/overalls - name = "coveralls" - desc = "A set of denim overalls." - icon_state = "overalls" - item_state = "overalls" - body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS - - -/obj/item/clothing/suit/syndicatefake - name = "red space suit replica" - icon_state = "syndicate" - desc = "A plastic replica of the syndicate space suit, you'll look just like a real murderous syndicate agent in this! This is a toy, it is not made for use in space!" - w_class = ITEM_SIZE_NORMAL - item_flags = null - allowed = list( - /obj/item/device/flashlight, - /obj/item/tank/oxygen_emergency, - /obj/item/tank/oxygen_emergency_extended, - /obj/item/tank/nitrogen_emergency, - /obj/item/toy - ) - flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT - body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS|HANDS|LEGS|FEET - -/obj/item/clothing/suit/hastur - name = "Hastur's Robes" - desc = "Robes not meant to be worn by man." - icon_state = "hastur" - body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS - flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT - - -/obj/item/clothing/suit/imperium_monk - name = "Imperium monk" - desc = "Have YOU killed a xenos today?" - icon_state = "imperium_monk" - body_parts_covered = HEAD|UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS - flags_inv = HIDESHOES|HIDEJUMPSUIT - - -/obj/item/clothing/suit/chickensuit - name = "Chicken Suit" - desc = "A suit made long ago by the ancient empire KFC." - icon_state = "chickensuit" - body_parts_covered = UPPER_TORSO|ARMS|LOWER_TORSO|LEGS|FEET - flags_inv = HIDESHOES|HIDEJUMPSUIT - siemens_coefficient = 2.0 - - -/obj/item/clothing/suit/monkeysuit - name = "Monkey Suit" - desc = "A suit that looks like a primate." - icon_state = "monkeysuit" - body_parts_covered = UPPER_TORSO|ARMS|LOWER_TORSO|LEGS|FEET|HANDS - flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT - siemens_coefficient = 2.0 - - -/obj/item/clothing/suit/holidaypriest - name = "Holiday Priest" - desc = "This is a nice holiday my son." - icon_state = "holidaypriest" - body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS - flags_inv = HIDEJUMPSUIT - - -/obj/item/clothing/suit/cardborg - name = "cardborg suit" - desc = "An ordinary cardboard box with holes cut in the sides." - icon_state = "cardborg" - item_flags = null - body_parts_covered = UPPER_TORSO|LOWER_TORSO - flags_inv = HIDEJUMPSUIT - -/obj/item/clothing/suit/cardborg/Initialize() - . = ..() - set_extension(src, /datum/extension/appearance/cardborg) - -/* - * Misc - */ - -/obj/item/clothing/suit/straight_jacket - name = "straitjacket" - desc = "A suit that completely restrains the wearer." - icon_state = "straight_jacket" - body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS - flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT|HIDETAIL - -/obj/item/clothing/suit/straight_jacket/equipped(var/mob/user, var/slot) - if(slot == slot_wear_suit) - if(iscarbon(user)) - var/mob/living/carbon/C = user - C.drop_from_inventory(C.handcuffed) - user.drop_l_hand() - user.drop_r_hand() - -/obj/item/clothing/suit/ianshirt - name = "worn shirt" - desc = "A worn out, curiously comfortable t-shirt with a picture of Ian. You wouldn't go so far as to say it feels like being hugged when you wear it, but it's pretty close. Good for sleeping in." - icon_state = "ianshirt" - body_parts_covered = UPPER_TORSO|ARMS - -//pyjamas -//originally intended to be pinstripes >.> - -/obj/item/clothing/under/bluepyjamas - name = "blue pyjamas" - desc = "Slightly old-fashioned sleepwear." - icon_state = "blue_pyjamas" - item_state = "blue_pyjamas" - body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS|LEGS - -/obj/item/clothing/under/redpyjamas - name = "red pyjamas" - desc = "Slightly old-fashioned sleepwear." - icon_state = "red_pyjamas" - body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS|LEGS - -//coats - -/obj/item/clothing/suit/leathercoat - name = "leather coat" - desc = "A long, thick black leather coat." - icon_state = "leathercoat" - -/obj/item/clothing/suit/browncoat - name = "brown leather coat" - desc = "A long, brown leather coat." - icon_state = "browncoat" - -/obj/item/clothing/suit/neocoat - name = "black coat" - desc = "A flowing, black coat." - icon_state = "neocoat" - -//stripper -/obj/item/clothing/under/stripper - body_parts_covered = 0 - -/obj/item/clothing/under/stripper/stripper_pink - name = "pink swimsuit" - desc = "A rather skimpy pink swimsuit." - icon_state = "stripper_p_under" - siemens_coefficient = 1 - -/obj/item/clothing/under/stripper/stripper_green - name = "green swimsuit" - desc = "A rather skimpy green swimsuit." - icon_state = "stripper_g_under" - siemens_coefficient = 1 - -/obj/item/clothing/suit/stripper/stripper_pink - name = "pink skimpy dress" - desc = "A rather skimpy pink dress." - icon_state = "stripper_p_over" - siemens_coefficient = 1 - -/obj/item/clothing/suit/stripper/stripper_green - name = "green skimpy dress" - desc = "A rather skimpy green dress." - icon_state = "stripper_g_over" - siemens_coefficient = 1 - -/obj/item/clothing/under/stripper/mankini - name = "mankini" - desc = "No honest man would wear this abomination." - icon_state = "mankini" - siemens_coefficient = 1 - -/obj/item/clothing/suit/xenos - name = "xenos suit" - desc = "A suit made out of chitinous alien hide." - icon_state = "xenos" - item_flags = null - body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS - flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT - siemens_coefficient = 2.0 -//swimsuit -/obj/item/clothing/under/swimsuit - siemens_coefficient = 1 - body_parts_covered = 0 - -/obj/item/clothing/under/swimsuit/black - name = "black swimsuit" - desc = "An oldfashioned black swimsuit." - icon_state = "swim_black" - siemens_coefficient = 1 - -/obj/item/clothing/under/swimsuit/blue - name = "blue swimsuit" - desc = "An oldfashioned blue swimsuit." - icon_state = "swim_blue" - siemens_coefficient = 1 - -/obj/item/clothing/under/swimsuit/purple - name = "purple swimsuit" - desc = "An oldfashioned purple swimsuit." - icon_state = "swim_purp" - siemens_coefficient = 1 - -/obj/item/clothing/under/swimsuit/green - name = "green swimsuit" - desc = "An oldfashioned green swimsuit." - icon_state = "swim_green" - siemens_coefficient = 1 - -/obj/item/clothing/under/swimsuit/red - name = "red swimsuit" - desc = "An oldfashioned red swimsuit." - icon_state = "swim_red" - siemens_coefficient = 1 - -/obj/item/clothing/suit/poncho/colored - name = "poncho" - desc = "A simple, comfortable poncho." - species_restricted = null - icon_state = "classicponcho" - -/obj/item/clothing/suit/poncho/colored/green - name = "green poncho" - desc = "A simple, comfortable cloak without sleeves. This one is green." - species_restricted = null - icon_state = "greenponcho" - -/obj/item/clothing/suit/poncho/colored/red - name = "red poncho" - desc = "A simple, comfortable cloak without sleeves. This one is red." - species_restricted = null - icon_state = "redponcho" - -/obj/item/clothing/suit/poncho/colored/purple - name = "purple poncho" - desc = "A simple, comfortable cloak without sleeves. This one is purple." - species_restricted = null - icon_state = "purpleponcho" - -/obj/item/clothing/suit/poncho/colored/blue - name = "blue poncho" - desc = "A simple, comfortable cloak without sleeves. This one is blue." - species_restricted = null - icon_state = "blueponcho" - -/obj/item/clothing/suit/storage/toggle/bomber - name = "bomber jacket" - desc = "A thick, well-worn WW2 leather bomber jacket." - icon_state = "bomber" - body_parts_covered = UPPER_TORSO|ARMS - cold_protection = UPPER_TORSO|ARMS - min_cold_protection_temperature = T0C - 20 - siemens_coefficient = 0.7 - -/obj/item/clothing/suit/storage/leather_jacket - name = "black leather jacket" - desc = "A black leather coat." - icon_state = "leather_jacket" - body_parts_covered = UPPER_TORSO|ARMS - -/obj/item/clothing/suit/storage/leather_jacket/nanotrasen - name = "\improper NanoTrasen black leather jacket" - desc = "A black leather coat. The NanoTrasen logo is proudly displayed on the back." - icon_state = "leather_jacket_nt" - -//This one has buttons for some reason -/obj/item/clothing/suit/storage/toggle/brown_jacket - name = "leather jacket" - desc = "A brown leather coat." - icon_state = "brown_jacket" - body_parts_covered = UPPER_TORSO|ARMS - -/obj/item/clothing/suit/storage/toggle/leather_hoodie - name = "leather hoodie jacket" - desc = "A brown leather hoodie, coloured in a dark tone. It's fun to tug at the strings." - icon_state = "leather_hoodie" - body_parts_covered = UPPER_TORSO|ARMS - -/obj/item/clothing/suit/storage/toggle/brown_jacket/nanotrasen - name = "\improper NanoTrasen leather jacket" - desc = "A brown leather coat. The NanoTrasen logo is proudly displayed on the back." - icon_state = "brown_jacket_nt" - -/obj/item/clothing/suit/storage/toggle/agent_jacket - name = "agent jacket" - desc = "A black leather jacket belonging to an agent of the Sol Federal Police." - icon_state = "agent_jacket" - valid_accessory_slots = list(ACCESSORY_SLOT_INSIGNIA) - body_parts_covered = UPPER_TORSO|ARMS - -/obj/item/clothing/suit/storage/toggle/hoodie - name = "hoodie" - desc = "A warm sweatshirt." - icon_state = "hoodie" - min_cold_protection_temperature = T0C - 20 - cold_protection = UPPER_TORSO|LOWER_TORSO|ARMS - -/obj/item/clothing/suit/storage/toggle/hoodie/cti - name = "\improper CTI hoodie" - desc = "A warm, black sweatshirt. It bears the letters 'CTI' on the back, a lettering to the prestigious university in Tau Ceti, Ceti Technical Institute. There is a blue supernova embroidered on the front, the emblem of CTI." - icon_state = "cti_hoodie" - -/obj/item/clothing/suit/storage/toggle/hoodie/mu - name = "\improper Mariner University hoodie" - desc = "A warm, gray sweatshirt. It bears the letters 'MU' on the front, a lettering to the well-known public college, Mariner University." - icon_state = "mu_hoodie" - -/obj/item/clothing/suit/storage/toggle/hoodie/nt - name = "\improper NanoTrasen hoodie" - desc = "A warm, blue sweatshirt. It proudly bears the NanoTrasen logo on the back. The edges are trimmed with silver." - icon_state = "nt_hoodie" - -/obj/item/clothing/suit/storage/toggle/hoodie/smw - name = "\improper Space Mountain Wind hoodie" - desc = "A warm, black sweatshirt. It has the logo for the popular softdrink Space Mountain Wind on both the front and the back." - icon_state = "smw_hoodie" - -/obj/item/clothing/suit/storage/toggle/hoodie/black - name = "black hoodie" - desc = "A warm, black sweatshirt." - color = COLOR_DARK_GRAY - -/obj/item/clothing/suit/storage/mbill - name = "shipping jacket" - desc = "A green jacket bearing the logo of Major Bill's Shipping." - icon_state = "mbill" - -/obj/item/clothing/suit/poncho/roles/security - name = "security poncho" - desc = "A simple, comfortable cloak without sleeves. This one is black and red, which are standard Security colors." - species_restricted = null - icon_state = "secponcho" - -/obj/item/clothing/suit/poncho/roles/medical - name = "medical poncho" - desc = "A simple, comfortable cloak without sleeves. This one is white with a blue tint, which are standard Medical colors." - species_restricted = null - icon_state = "medponcho" - -/obj/item/clothing/suit/poncho/roles/engineering - name = "engineering poncho" - desc = "A simple, comfortable cloak without sleeves. This one is yellow and orange, which are standard Engineering colors." - species_restricted = null - icon_state = "engiponcho" - -/obj/item/clothing/suit/poncho/roles/science - name = "science poncho" - desc = "A simple, comfortable cloak without sleeves. This one is white with a few bottle green stripes, corporate colors." - species_restricted = null - icon_state = "sciponcho" - -/obj/item/clothing/suit/poncho/roles/science/nanotrasen - name = "\improper NanoTrasen poncho" - desc = "A simple, comfortable cloak without sleeves. This one is white with a few red stripes, colors of NanoTrasen. Go NanoTrasen!" - icon_state = "sciponcho_nt" - -/obj/item/clothing/suit/poncho/roles/cargo - name = "cargo poncho" - desc = "A simple, comfortable cloak without sleeves. This one is tan and grey, which are standard Cargo colors." - species_restricted = null - icon_state = "cargoponcho" - -/* - * Track Jackets - */ -/obj/item/clothing/suit/storage/toggle/track - name = "track jacket" - desc = "A track jacket, for the athletic." - icon_state = "trackjacket" - -/obj/item/clothing/suit/storage/toggle/track/blue - name = "blue track jacket" - desc = "A blue track jacket, for the athletic." - icon_state = "trackjacketblue" - -/obj/item/clothing/suit/storage/toggle/track/green - name = "green track jacket" - desc = "A green track jacket, for the athletic." - icon_state = "trackjacketgreen" - -/obj/item/clothing/suit/storage/toggle/track/red - name = "red track jacket" - desc = "A red track jacket, for the athletic." - icon_state = "trackjacketred" - -/obj/item/clothing/suit/storage/toggle/track/white - name = "white track jacket" - desc = "A white track jacket, for the athletic." - icon_state = "trackjacketwhite" - -/obj/item/clothing/suit/storage/toggle/track/gcc - name = "GCC track jacket" - desc = "An Independent track jacket, for the truly cheeki breeki." - icon_state = "trackjackettcc" - -/obj/item/clothing/suit/rubber - name = "human suit" - desc = "A Human suit made out of rubber." - icon_state = "mansuit" - -/obj/item/clothing/suit/rubber/cat - name = "cat suit" - desc = "A cat suit made out of rubber." - icon_state = "catsuit" - -/obj/item/clothing/suit/rubber/skrell - name = "skrell suit" - desc = "A Skrell suit made out of rubber." - icon_state = "skrellsuit" - -/obj/item/clothing/suit/rubber/unathi - name = "unathi suit" - desc = "A Unathi suit made out of rubber." - icon_state = "lizsuit" - -/obj/item/clothing/suit/hospital - name = "hospital gown" - desc = "A thin, long and loose robe-like garment worn by people undergoing active medical treatment." - icon_state = "hospitalgown" - body_parts_covered = UPPER_TORSO|LOWER_TORSO - allowed = null - -/obj/item/clothing/suit/hospital/blue - color = "#99ccff" - -/obj/item/clothing/suit/hospital/green - color = "#8dd7a3" - -/obj/item/clothing/suit/hospital/pink - color = "#ffb7db" - - -/obj/item/clothing/suit/storage/toggle/zipper - name = "zip up sweater" - desc = "A black sweater that zips up in the front." - icon_state = "zipperjacket" - - -/obj/item/clothing/suit/storage/pullover - name = "pullover sweater" - desc = "A sweater made of a soft material with a short zipper on the collar." - icon_state = "pullover" diff --git a/code/modules/clothing/suits/storage.dm b/code/modules/clothing/suits/storage.dm deleted file mode 100644 index ee1d6f576ad78..0000000000000 --- a/code/modules/clothing/suits/storage.dm +++ /dev/null @@ -1,30 +0,0 @@ -/obj/item/clothing/suit/storage - var/obj/item/storage/internal/pockets/pockets - var/slots = 2 - -/obj/item/clothing/suit/storage/Initialize() - . = ..() - pockets = new/obj/item/storage/internal/pockets(src, slots, ITEM_SIZE_SMALL) //fit only pocket sized items - -/obj/item/clothing/suit/storage/Destroy() - QDEL_NULL(pockets) - . = ..() - -/obj/item/clothing/suit/storage/attack_hand(mob/user as mob) - if (pockets.handle_attack_hand(user)) - ..(user) - -/obj/item/clothing/suit/storage/MouseDrop(obj/over_object as obj) - if (pockets.handle_mousedrop(usr, over_object)) - ..(over_object) - - -/obj/item/clothing/suit/storage/emp_act(severity) - pockets.emp_act(severity) - ..() - -/obj/item/clothing/suit/storage/vest/merc - slots = 4 - -/obj/item/clothing/suit/storage/vest/tactical - slots = 4 diff --git a/code/modules/clothing/suits/toggles.dm b/code/modules/clothing/suits/toggles.dm deleted file mode 100644 index cb4c083eb94ed..0000000000000 --- a/code/modules/clothing/suits/toggles.dm +++ /dev/null @@ -1,180 +0,0 @@ -///Hoods for winter coats and chaplain hoodie etc - -/obj/item/clothing/suit/storage/hooded - var/obj/item/clothing/head/winterhood/hood - var/hoodtype = null //so the chaplain hoodie or other hoodies can override this - var/suittoggled = 0 - -/obj/item/clothing/suit/storage/hooded/New() - MakeHood() - ..() - -/obj/item/clothing/suit/storage/hooded/Destroy() - QDEL_NULL(hood) - return ..() - -/obj/item/clothing/suit/storage/hooded/proc/MakeHood() - if(!hood) - hood = new hoodtype(src) - -/obj/item/clothing/suit/storage/hooded/ui_action_click() - ToggleHood() - -/obj/item/clothing/suit/storage/hooded/equipped(mob/user, slot) - if(slot != slot_wear_suit) - RemoveHood() - ..() - -/obj/item/clothing/suit/storage/hooded/proc/RemoveHood() - if(!hood) - return - suittoggled = 0 - update_icon() - if(ishuman(hood.loc)) - var/mob/living/carbon/H = hood.loc - H.drop_from_inventory(hood) - H.update_inv_wear_suit() - hood.forceMove(src) - -/obj/item/clothing/suit/storage/hooded/dropped() - RemoveHood() - -/obj/item/clothing/suit/storage/hooded/proc/ToggleHood() - if(!suittoggled) - if(ishuman(loc)) - var/mob/living/carbon/human/H = src.loc - if(H.wear_suit != src) - to_chat(H, "You must be wearing \the [src] to put up the hood!") - return - if(H.head) - to_chat(H, "You're already wearing something on your head!") - return - else - H.equip_to_slot_if_possible(hood, slot_head) - suittoggled = 1 - update_icon() - H.update_inv_wear_suit() - else - RemoveHood() - -/obj/item/clothing/suit/storage/hooded/on_update_icon() - if(suittoggled) - icon_state = "[initial(icon_state)]_t" - else - icon_state = "[initial(icon_state)]" - - -/obj/item/clothing/suit/storage/hooded/wintercoat - name = "winter coat" - desc = "A heavy jacket made from 'synthetic' animal furs." - icon_state = "coatwinter" - body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS - cold_protection = UPPER_TORSO|LOWER_TORSO|ARMS - min_cold_protection_temperature = ARMOR_MIN_COLD_PROTECTION_TEMPERATURE - valid_accessory_slots = list(ACCESSORY_SLOT_INSIGNIA) - armor = list( - bio = ARMOR_BIO_MINOR - ) - action_button_name = "Toggle Winter Hood" - hoodtype = /obj/item/clothing/head/winterhood - allowed = list (/obj/item/pen, /obj/item/paper, /obj/item/device/flashlight,/obj/item/storage/fancy/cigarettes, /obj/item/storage/box/matches, /obj/item/reagent_containers/food/drinks/flask) - siemens_coefficient = 0.6 - -/obj/item/clothing/head/winterhood - name = "winter hood" - desc = "A hood attached to a heavy winter jacket." - icon_state = "generic_hood" - body_parts_covered = HEAD - cold_protection = HEAD - flags_inv = HIDEEARS | BLOCKHAIR - min_cold_protection_temperature = ARMOR_MIN_COLD_PROTECTION_TEMPERATURE - -/obj/item/clothing/suit/storage/hooded/wintercoat/captain - name = "captain's winter coat" - icon_state = "coatcaptain" - armor = list( - melee = ARMOR_MELEE_KNIVES, - bullet = ARMOR_BALLISTIC_MINOR, - laser = ARMOR_LASER_SMALL, - energy = ARMOR_ENERGY_MINOR, - bomb = ARMOR_BOMB_MINOR - ) - -/obj/item/clothing/suit/storage/hooded/wintercoat/security - name = "security winter coat" - icon_state = "coatsecurity" - armor = list( - melee = ARMOR_MELEE_KNIVES, - bullet = ARMOR_BALLISTIC_SMALL, - laser = ARMOR_LASER_SMALL, - energy = ARMOR_ENERGY_MINOR, - bomb = ARMOR_BOMB_MINOR - ) - -/obj/item/clothing/suit/storage/hooded/wintercoat/medical - name = "medical winter coat" - icon_state = "coatmedical" - armor = list( - bio = ARMOR_BIO_RESISTANT - ) - -/obj/item/clothing/suit/storage/hooded/wintercoat/science - name = "science winter coat" - icon_state = "coatscience" - armor = list( - bomb = ARMOR_BOMB_MINOR - ) - -/obj/item/clothing/suit/storage/hooded/wintercoat/engineering - name = "engineering winter coat" - icon_state = "coatengineer" - armor = list( - rad = ARMOR_RAD_MINOR - ) - -/obj/item/clothing/suit/storage/hooded/wintercoat/engineering/atmos - name = "atmospherics winter coat" - icon_state = "coatatmos" - -/obj/item/clothing/suit/storage/hooded/wintercoat/dais - name = "\improper DAIS winter coat" - icon_state = "coat_dais" - siemens_coefficient = 0.5 - armor = list( - melee = ARMOR_MELEE_SMALL, - energy = ARMOR_ENERGY_MINOR - ) - desc = "A hooded winter coat colored blue and white and bearing the logo of Deimos Advanced Information Systems." - -/obj/item/clothing/suit/storage/hooded/wintercoat/hydro - name = "hydroponics winter coat" - icon_state = "coathydro" - -/obj/item/clothing/suit/storage/hooded/wintercoat/cargo - name = "cargo winter coat" - icon_state = "coatcargo" - -/obj/item/clothing/suit/storage/hooded/wintercoat/miner - name = "mining winter coat" - icon_state = "coatminer" - armor = list( - melee = ARMOR_MELEE_SMALL - ) - -/obj/item/clothing/suit/storage/hooded/hoodie - name = "hoodie" - desc = "A warm sweatshirt." - icon_state = "hoodie" - min_cold_protection_temperature = T0C - 20 - cold_protection = UPPER_TORSO|LOWER_TORSO|ARMS - action_button_name = "Toggle Hood" - hoodtype = /obj/item/clothing/head/hoodiehood - -/obj/item/clothing/head/hoodiehood - name = "hoodie hood" - desc = "A hood attached to a warm sweatshirt." - icon_state = "generic_hood" - body_parts_covered = HEAD - min_cold_protection_temperature = T0C - 20 - cold_protection = HEAD - flags_inv = HIDEEARS | BLOCKHAIR diff --git a/code/modules/clothing/suits/utility.dm b/code/modules/clothing/suits/utility.dm deleted file mode 100644 index da929d5d2870f..0000000000000 --- a/code/modules/clothing/suits/utility.dm +++ /dev/null @@ -1,160 +0,0 @@ -/* - * Contains: - * Fire protection - * Bomb protection - * Radiation protection - */ - -/* - * Fire protection - */ - -/obj/item/clothing/suit/fire - name = "firesuit" - desc = "A suit that protects against fire and heat." - icon_state = "firesuit" - item_state_slots = list( - slot_l_hand_str = "firefighter", - slot_r_hand_str = "firefighter", - ) - w_class = ITEM_SIZE_LARGE - - body_parts_covered = UPPER_TORSO | LOWER_TORSO| ARMS - armor = list(laser = ARMOR_LASER_MINOR, energy = ARMOR_ENERGY_MINOR, bomb = ARMOR_BOMB_MINOR) - allowed = list( - /obj/item/device/flashlight, - /obj/item/tank/oxygen_emergency, - /obj/item/tank/oxygen_emergency_extended, - /obj/item/tank/nitrogen_emergency, - /obj/item/extinguisher, - /obj/item/crowbar/emergency_forcing_tool, - /obj/item/clothing/head - ) - - gas_transfer_coefficient = 0.90 - permeability_coefficient = 0.50 - heat_protection = UPPER_TORSO | LOWER_TORSO | ARMS - cold_protection = UPPER_TORSO | LOWER_TORSO | ARMS - - max_pressure_protection = FIRESUIT_MAX_PRESSURE - max_heat_protection_temperature = FIRESUIT_MAX_HEAT_PROTECTION_TEMPERATURE - -/obj/item/clothing/suit/fire/Initialize() - . = ..() - slowdown_per_slot[slot_wear_suit] = 0.5 - -/obj/item/clothing/suit/fire/firefighter - icon_state = "firesuit" - item_state_slots = list( - slot_l_hand_str = "firefighter", - slot_r_hand_str = "firefighter", - ) - - -/obj/item/clothing/suit/fire/heavy - name = "firesuit" - desc = "A suit that protects against extreme fire and heat." - //icon_state = "thermal" - item_state_slots = list( - slot_l_hand_str = "ro_suit", - slot_r_hand_str = "ro_suit", - ) - w_class = ITEM_SIZE_HUGE//bulky item - - -/* - * Bomb protection - */ -/obj/item/clothing/head/bomb_hood - name = "bomb hood" - desc = "Use in case of bomb." - icon_state = "bombsuit" - armor = list( - melee = ARMOR_MELEE_VERY_HIGH, - bullet = ARMOR_BALLISTIC_MINOR, - laser = ARMOR_LASER_SMALL, - energy = ARMOR_ENERGY_RESISTANT, - bomb = ARMOR_BOMB_SHIELDED - ) - flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|BLOCKHAIR - body_parts_covered = HEAD|FACE|EYES - item_flags = null - siemens_coefficient = 0 - - -/obj/item/clothing/suit/bomb_suit - name = "bomb suit" - desc = "A suit designed for safety when handling explosives." - icon_state = "bombsuit" - w_class = ITEM_SIZE_HUGE//bulky item - gas_transfer_coefficient = 0.01 - permeability_coefficient = 0.01 - armor = list( - melee = ARMOR_MELEE_VERY_HIGH, - bullet = ARMOR_BALLISTIC_MINOR, - laser = ARMOR_LASER_SMALL, - energy = ARMOR_ENERGY_RESISTANT, - bomb = ARMOR_BOMB_SHIELDED - ) - flags_inv = HIDEJUMPSUIT|HIDETAIL - heat_protection = UPPER_TORSO|LOWER_TORSO - item_flags = null - max_heat_protection_temperature = ARMOR_MAX_HEAT_PROTECTION_TEMPERATURE - siemens_coefficient = 0 - -/obj/item/clothing/suit/bomb_suit/Initialize() - . = ..() - slowdown_per_slot[slot_wear_suit] = 1.25 - -/obj/item/clothing/head/bomb_hood/security - icon_state = "bombsuitsec" - body_parts_covered = HEAD - -/obj/item/clothing/suit/bomb_suit/security - icon_state = "bombsuitsec" - allowed = list(/obj/item/gun/energy,/obj/item/melee/baton,/obj/item/handcuffs) - body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS - -/* - * Radiation protection - */ -/obj/item/clothing/head/radiation - name = "radiation hood" - icon_state = "rad_hood" - item_state = "rad_hood" - desc = "A hood with radiation protective properties. Label: Made with lead, do not eat insulation." - flags_inv = BLOCKHAIR - body_parts_covered = HEAD|FACE|EYES - armor = list( - bio = ARMOR_BIO_RESISTANT, - rad = ARMOR_RAD_SHIELDED - ) - - -/obj/item/clothing/suit/radiation - name = "radiation suit" - desc = "A suit that protects against radiation. Label: Made with lead, do not eat insulation." - icon_state = "rad_suit" - item_state = "rad_suit" - w_class = ITEM_SIZE_HUGE //bulky item - gas_transfer_coefficient = 0.90 - permeability_coefficient = 0.50 - body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS|HANDS|FEET - allowed = list( - /obj/item/device/flashlight, - /obj/item/tank/oxygen_emergency, - /obj/item/tank/oxygen_emergency_extended, - /obj/item/tank/nitrogen_emergency, - /obj/item/clothing/head/radiation, - /obj/item/clothing/mask/gas, - /obj/item/device/geiger - ) - armor = list( - bio = ARMOR_BIO_RESISTANT, - rad = ARMOR_RAD_SHIELDED - ) - flags_inv = HIDEJUMPSUIT|HIDETAIL|HIDEGLOVES|HIDESHOES - -/obj/item/clothing/suit/radiation/Initialize() - . = ..() - slowdown_per_slot[slot_shoes] = 0.75 diff --git a/code/modules/clothing/suits/wiz_robe.dm b/code/modules/clothing/suits/wiz_robe.dm deleted file mode 100644 index 03e0451804575..0000000000000 --- a/code/modules/clothing/suits/wiz_robe.dm +++ /dev/null @@ -1,129 +0,0 @@ -/obj/item/clothing/head/wizard - name = "wizard hat" - desc = "Strange-looking hat-wear that most certainly belongs to a real magic user." - icon_state = "wizard" - item_state_slots = list( - slot_l_hand_str = "wizhat", - slot_r_hand_str = "wizhat", - ) - //Not given any special protective value since the magic robes are full-body protection --NEO - siemens_coefficient = 0.8 - body_parts_covered = 0 - wizard_garb = TRUE - -/obj/item/clothing/head/wizard/red - name = "red wizard hat" - desc = "Strange-looking, red, hat-wear that most certainly belongs to a real magic user." - icon_state = "redwizard" - siemens_coefficient = 0.8 - -/obj/item/clothing/head/wizard/fake - name = "wizard hat" - desc = "It has WIZZARD written across it in sequins. Comes with a cool beard." - icon_state = "wizard-fake" - body_parts_covered = HEAD|FACE - -/obj/item/clothing/head/wizard/marisa - name = "Witch Hat" - desc = "Strange-looking hat-wear, makes you want to cast fireballs." - icon_state = "marisa" - siemens_coefficient = 0.8 - -/obj/item/clothing/head/wizard/magus - name = "Magus Helm" - desc = "A mysterious helmet that hums with an unearthly power." - icon_state = "magus" - item_state = "magus" - item_state_slots = list( - slot_l_hand_str = "helmet", - slot_r_hand_str = "helmet", - ) - siemens_coefficient = 0.8 - body_parts_covered = HEAD|FACE|EYES - -/obj/item/clothing/head/wizard/cap - name = "Gentlemans Cap" - desc = "A checkered gray flat cap woven together with the rarest of threads." - icon_state = "gentcap" - item_state_slots = list( - slot_l_hand_str = "det_hat", - slot_r_hand_str = "det_hat", - ) - siemens_coefficient = 0.8 - -/obj/item/clothing/suit/wizrobe - name = "wizard robe" - desc = "A magnificant, gem-lined robe that seems to radiate power." - icon_state = "wizard" - gas_transfer_coefficient = 0.01 // IT'S MAGICAL OKAY JEEZ +1 TO NOT DIE - permeability_coefficient = 0.01 - armor = list( - melee = ARMOR_MELEE_RESISTANT, - bullet = ARMOR_BALLISTIC_SMALL, - laser = ARMOR_LASER_SMALL, - energy = ARMOR_ENERGY_SMALL, - bomb = ARMOR_BOMB_PADDED, - bio = ARMOR_BIO_MINOR, - rad = ARMOR_RAD_MINOR - ) - allowed = list(/obj/item/teleportation_scroll) - siemens_coefficient = 0.8 - wizard_garb = TRUE - -/obj/item/clothing/suit/wizrobe/red - name = "red wizard robe" - desc = "A magnificant, red, gem-lined robe that seems to radiate power." - icon_state = "redwizard" - - -/obj/item/clothing/suit/wizrobe/marisa - name = "Witch Robe" - desc = "Magic is all about the spell power, ZE!" - icon_state = "marisa" - -/obj/item/clothing/suit/wizrobe/magusblue - name = "Magus Robe" - desc = "A set of armoured robes that seem to radiate a dark power." - icon_state = "magusblue" - body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS|HANDS|LEGS|FEET - -/obj/item/clothing/suit/wizrobe/magusred - name = "Magus Robe" - desc = "A set of armoured robes that seem to radiate a dark power." - icon_state = "magusred" - body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS|HANDS|LEGS|FEET - -/obj/item/clothing/suit/wizrobe/psypurple - name = "purple robes" - desc = "Heavy, royal purple robes threaded with psychic amplifiers and weird, bulbous lenses. Do not machine wash." - icon_state = "psyamp" - gender = PLURAL - -/obj/item/clothing/suit/wizrobe/gentlecoat - name = "Gentlemans Coat" - desc = "A heavy threaded tweed gray jacket. For a different sort of Gentleman." - icon_state = "gentlecoat" - body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS - -/obj/item/clothing/suit/wizrobe/fake - name = "wizard robe" - desc = "A rather dull, blue robe meant to mimick real wizard robes." - icon_state = "wizard-fake" - armor = null - siemens_coefficient = 1.0 - -/obj/item/clothing/head/wizard/marisa/fake - name = "Witch Hat" - desc = "Strange-looking hat-wear, makes you want to cast fireballs." - icon_state = "marisa" - armor = null - siemens_coefficient = 1.0 - -/obj/item/clothing/suit/wizrobe/marisa/fake - name = "Witch Robe" - desc = "Magic is all about the spell power, ZE!" - icon_state = "marisa" - body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS|LEGS - armor = null - siemens_coefficient = 1.0 - diff --git a/code/modules/clothing/under/accessories/_accessory.dm b/code/modules/clothing/under/accessories/_accessory.dm deleted file mode 100644 index 6e206e4ee5547..0000000000000 --- a/code/modules/clothing/under/accessories/_accessory.dm +++ /dev/null @@ -1,164 +0,0 @@ -/obj/item/clothing/accessory - name = "tie" - desc = "A neosilk clip-on tie." - icon = 'icons/obj/clothing/obj_accessories.dmi' - icon_state = "tie" - item_state = "" //no inhands - slot_flags = SLOT_TIE - w_class = ITEM_SIZE_SMALL - var/accessory_flags = ACCESSORY_DEFAULT_FLAGS - var/slot = ACCESSORY_SLOT_DECOR - var/body_location = UPPER_TORSO //most accessories are here - var/obj/item/clothing/parent //the suit the tie may be attached to - var/image/inv_overlay = null //overlay used when attached to clothing. - var/list/mob_overlay = list() - var/overlay_state = null - var/list/accessory_icons = list(slot_w_uniform_str = 'icons/mob/onmob/onmob_accessories.dmi', slot_wear_suit_str = 'icons/mob/onmob/onmob_accessories.dmi') - sprite_sheets = list( - SPECIES_NABBER = 'icons/mob/species/nabber/onmob_accessories_gas.dmi', - SPECIES_UNATHI = 'icons/mob/species/unathi/generated/onmob_accessories_unathi.dmi' - ) - var/list/on_rolled = list() //used when jumpsuit sleevels are rolled ("rolled" entry) or it's rolled down ("down"). Set to "none" to hide in those states. - var/slowdown //used when an accessory is meant to slow the wearer down when attached to clothing - - -/obj/item/clothing/accessory/Destroy() - on_removed() - return ..() - - -/obj/item/clothing/accessory/update_clothing_icon() - ..() - if (parent) - parent.update_clothing_icon() - - -/obj/item/clothing/accessory/proc/get_inv_overlay() - if(!inv_overlay) - var/tmp_icon_state = overlay_state - if (!tmp_icon_state) - tmp_icon_state = icon_state - if(icon_override && ("[tmp_icon_state]_tie" in icon_states(icon_override))) - inv_overlay = image(icon = icon_override, icon_state = "[tmp_icon_state]_tie", dir = SOUTH) - else if("[tmp_icon_state]_tie" in icon_states(GLOB.default_onmob_icons[slot_tie_str])) - inv_overlay = image(icon = GLOB.default_onmob_icons[slot_tie_str], icon_state = "[tmp_icon_state]_tie", dir = SOUTH) - else - inv_overlay = image(icon = GLOB.default_onmob_icons[slot_tie_str], icon_state = tmp_icon_state, dir = SOUTH) - inv_overlay.color = color - return inv_overlay - - -/obj/item/clothing/accessory/get_mob_overlay(mob/user_mob, slot) - if(!istype(loc,/obj/item/clothing)) //don't need special handling if it's worn as normal item. - return ..() - var/bodytype = "Default" - if(ishuman(user_mob)) - var/mob/living/carbon/human/user_human = user_mob - if(user_human.species.get_bodytype(user_human) in sprite_sheets) - bodytype = user_human.species.get_bodytype(user_human) - - var/tmp_icon_state = overlay_state? overlay_state : icon_state - - if(istype(loc,/obj/item/clothing/under)) - var/obj/item/clothing/under/C = loc - if(on_rolled["down"] && C.rolled_down > 0) - tmp_icon_state = on_rolled["down"] - else if(on_rolled["rolled"] && C.rolled_sleeves > 0) - tmp_icon_state = on_rolled["rolled"] - - var/use_sprite_sheet = accessory_icons[slot] - if(sprite_sheets[bodytype]) - use_sprite_sheet = sprite_sheets[bodytype] - - if(icon_override && ("[tmp_icon_state]_mob" in icon_states(icon_override))) - return overlay_image(icon_override, "[tmp_icon_state]_mob", color, RESET_COLOR) - else - return overlay_image(use_sprite_sheet, tmp_icon_state, color, RESET_COLOR) - - -//when user attached an accessory to S -/obj/item/clothing/accessory/proc/on_attached(var/obj/item/clothing/S, var/mob/user) - if(!istype(S)) - return - parent = S - forceMove(parent) - parent.overlays += get_inv_overlay() - - if(user) - to_chat(user, "You attach \the [src] to \the [parent].") - src.add_fingerprint(user) - - -/obj/item/clothing/accessory/proc/on_removed(var/mob/user) - if(!parent) - return - parent.overlays -= get_inv_overlay() - parent = null - if(user) - usr.put_in_hands(src) - src.add_fingerprint(user) - else - dropInto(loc) - - -//default attackby behaviour -/obj/item/clothing/accessory/attackby(obj/item/I, mob/user) - ..() - - -//default attack_hand behaviour -/obj/item/clothing/accessory/attack_hand(mob/user as mob) - if(parent) - return //we aren't an object on the ground so don't call parent - ..() - - -/obj/item/clothing/accessory/get_pressure_weakness(pressure,zone) - if(body_parts_covered & zone) - return ..() - return 1 - - -/obj/item/clothing/accessory/toggleable/var/icon_closed - - -/obj/item/clothing/accessory/toggleable/New() - if (!icon_closed) - icon_closed = icon_state - ..() - - -/obj/item/clothing/accessory/toggleable/on_attached(obj/item/clothing/under/S, mob/user as mob) - ..() - parent.verbs += /obj/item/clothing/accessory/toggleable/verb/toggle - -/obj/item/clothing/accessory/toggleable/on_removed(mob/user as mob) - if(parent) - parent.verbs -= /obj/item/clothing/accessory/toggleable/verb/toggle - ..() - - -/obj/item/clothing/accessory/toggleable/verb/toggle() - set name = "Toggle Buttons" - set category = "Object" - set src in usr - if(usr.incapacitated()) - return 0 - var/obj/item/clothing/accessory/toggleable/H = null - if (istype(src, /obj/item/clothing/accessory/toggleable)) - H = src - else - H = locate() in src - if(H) - H.do_toggle(usr) - update_clothing_icon() - - -/obj/item/clothing/accessory/toggleable/proc/do_toggle(user) - if(icon_state == icon_closed) - icon_state = "[icon_closed]_open" - to_chat(user, "You unbutton [src].") - else - icon_state = icon_closed - to_chat(user, "You button up [src].") - update_clothing_icon() diff --git a/code/modules/clothing/under/accessories/arm_guards.dm b/code/modules/clothing/under/accessories/arm_guards.dm deleted file mode 100644 index 88e619911e260..0000000000000 --- a/code/modules/clothing/under/accessories/arm_guards.dm +++ /dev/null @@ -1,97 +0,0 @@ -/obj/item/clothing/accessory/arm_guards - name = "arm guards" - desc = "A pair of black arm pads reinforced with armor plating. Attaches to a plate carrier." - icon_override = 'icons/mob/onmob/onmob_modular_armor.dmi' - icon = 'icons/obj/clothing/obj_suit_modular_armor.dmi' - accessory_icons = list( - slot_tie_str = 'icons/mob/onmob/onmob_modular_armor.dmi', - slot_wear_suit_str = 'icons/mob/onmob/onmob_modular_armor.dmi' - ) - icon_state = "armguards" - gender = PLURAL - body_parts_covered = ARMS - armor = list( - melee = ARMOR_MELEE_KNIVES, - bullet = ARMOR_BALLISTIC_PISTOL, - laser = ARMOR_LASER_SMALL, - energy = ARMOR_ENERGY_SMALL, - bomb = ARMOR_BOMB_PADDED - ) - slot = ACCESSORY_SLOT_ARMOR_A - body_location = ARMS - flags_inv = CLOTHING_BULKY - - -/obj/item/clothing/accessory/arm_guards/blue - desc = "A pair of blue arm pads reinforced with armor plating. Attaches to a plate carrier." - icon_state = "armguards_blue" - - -/obj/item/clothing/accessory/arm_guards/navy - desc = "A pair of navy blue arm pads reinforced with armor plating. Attaches to a plate carrier." - icon_state = "armguards_navy" - - -/obj/item/clothing/accessory/arm_guards/green - desc = "A pair of green arm pads reinforced with armor plating. Attaches to a plate carrier." - icon_state = "armguards_green" - - -/obj/item/clothing/accessory/arm_guards/tan - desc = "A pair of tan arm pads reinforced with armor plating. Attaches to a plate carrier." - icon_state = "armguards_tan" - - -/obj/item/clothing/accessory/arm_guards/merc - name = "heavy arm guards" - desc = "A pair of red-trimmed black arm pads reinforced with heavy armor plating. Attaches to a plate carrier." - icon_state = "armguards_merc" - armor = list( - melee = ARMOR_MELEE_RESISTANT, - bullet = ARMOR_BALLISTIC_PISTOL, - laser = ARMOR_LASER_HANDGUNS, - energy = ARMOR_ENERGY_RESISTANT, - bomb = ARMOR_BOMB_PADDED - ) - - -/obj/item/clothing/accessory/arm_guards/riot - name = "riot arm guards" - desc = "A pair of armored arm pads with heavy padding to protect against melee attacks." - icon_state = "armguards_riot" - armor = list( - melee = ARMOR_MELEE_VERY_HIGH, - bullet = ARMOR_BALLISTIC_SMALL, - laser = ARMOR_LASER_SMALL, - energy = ARMOR_ENERGY_MINOR, - bomb = ARMOR_BOMB_PADDED - ) - siemens_coefficient = 0.5 - - -/obj/item/clothing/accessory/arm_guards/ballistic - name = "ballistic arm guards" - desc = "A pair of armored arm pads with heavy plates to protect against ballistic projectiles." - icon_state = "armguards_ballistic" - armor = list( - melee = ARMOR_MELEE_KNIVES, - bullet = ARMOR_BALLISTIC_RIFLE, - laser = ARMOR_LASER_SMALL, - energy = ARMOR_ENERGY_MINOR, - bomb = ARMOR_BOMB_PADDED - ) - siemens_coefficient = 0.7 - - -/obj/item/clothing/accessory/arm_guards/ablative - name = "ablative arm guards" - desc = "A pair of armored arm pads with advanced shielding to protect against energy weapons." - icon_state = "armguards_ablative" - armor = list( - melee = ARMOR_MELEE_KNIVES, - bullet = ARMOR_BALLISTIC_SMALL, - laser = ARMOR_LASER_RIFLES, - energy = ARMOR_ENERGY_RESISTANT, - bomb = ARMOR_BOMB_PADDED - ) - siemens_coefficient = 0 diff --git a/code/modules/clothing/under/accessories/armband.dm b/code/modules/clothing/under/accessories/armband.dm deleted file mode 100644 index 2d77770cb6af2..0000000000000 --- a/code/modules/clothing/under/accessories/armband.dm +++ /dev/null @@ -1,61 +0,0 @@ -/obj/item/clothing/accessory/armband - name = "red armband" - desc = "A fancy red armband!" - icon_state = "red" - slot = ACCESSORY_SLOT_ARMBAND - species_restricted = null - body_location = ARMS - sprite_sheets = list( - SPECIES_NABBER = 'icons/mob/species/nabber/onmob_accessories_gas.dmi' - ) - on_rolled = list( - "down" = "none" - ) - - -/obj/item/clothing/accessory/armband/cargo - name = "cargo armband" - desc = "An armband, worn by the crew to display which department they're assigned to. This one is brown." - icon_state = "cargo" - - -/obj/item/clothing/accessory/armband/engine - name = "engineering armband" - desc = "An armband, worn by the crew to display which department they're assigned to. This one is orange with a reflective strip!" - icon_state = "engie" - - -/obj/item/clothing/accessory/armband/hydro - name = "hydroponics armband" - desc = "An armband, worn by the crew to display which department they're assigned to. This one is green and blue." - icon_state = "hydro" - - -/obj/item/clothing/accessory/armband/med - name = "medical armband" - desc = "An armband, worn by the crew to display which department they're assigned to. This one is white." - icon_state = "med" - - -/obj/item/clothing/accessory/armband/medgreen - name = "EMT armband" - desc = "An armband, worn by the crew to display which department they're assigned to. This one is white and green." - icon_state = "medgreen" - - -/obj/item/clothing/accessory/armband/medblue - name = "medical corps armband" - desc = "An armband, worn by the crew to display which department they're assigned to. This one is white and blue." - icon_state = "medblueband" - - -/obj/item/clothing/accessory/armband/whitered - name = "\improper corporate armband" - desc = "An armband, worn by the crew to display which department they're assigned to. This one is green and white." - icon_state = "corpsec_armband" - - -/obj/item/clothing/accessory/armband/bluegold - name = "peacekeeper armband" - desc = "An armband, worn by the crew to display which department they're assigned to. This one is blue and gold." - icon_state = "solblue" diff --git a/code/modules/clothing/under/accessories/armor_plate.dm b/code/modules/clothing/under/accessories/armor_plate.dm deleted file mode 100644 index 477c8e364ed10..0000000000000 --- a/code/modules/clothing/under/accessories/armor_plate.dm +++ /dev/null @@ -1,81 +0,0 @@ -/obj/item/clothing/accessory/armor_plate - name = "light armor plate" - desc = "A basic armor plate made of steel-reinforced synthetic fibers. Attaches to a plate carrier." - icon = 'icons/obj/clothing/obj_suit_modular_armor.dmi' - icon_state = "armor_light" - body_parts_covered = UPPER_TORSO|LOWER_TORSO - armor = list( - melee = ARMOR_MELEE_KNIVES, - bullet = ARMOR_BALLISTIC_SMALL, - laser = ARMOR_LASER_MINOR, - energy = ARMOR_ENERGY_MINOR, - bomb = ARMOR_BOMB_MINOR - ) - slot = ACCESSORY_SLOT_ARMOR_C - flags_inv = CLOTHING_BULKY - - -/obj/item/clothing/accessory/armor_plate/medium - name = "medium armor plate" - desc = "A plasteel-reinforced synthetic armor plate, providing good protection. Attaches to a plate carrier." - icon_state = "armor_medium" - armor = list( - melee = ARMOR_MELEE_KNIVES, - bullet = ARMOR_BALLISTIC_PISTOL, - laser = ARMOR_LASER_SMALL, - energy = ARMOR_ENERGY_SMALL, - bomb = ARMOR_BOMB_PADDED - ) - - -/obj/item/clothing/accessory/armor_plate/tactical - name = "tactical armor plate" - desc = "A heavier armor plate with additional ablative coating. Attaches to a plate carrier." - icon_state = "armor_tactical" - armor = list( - melee = ARMOR_MELEE_RESISTANT, - bullet = ARMOR_BALLISTIC_RESISTANT, - laser = ARMOR_LASER_MAJOR, - energy = ARMOR_ENERGY_RESISTANT, - bomb = ARMOR_BOMB_PADDED - ) - slowdown = 0.5 - - -/obj/item/clothing/accessory/armor_plate/merc - name = "heavy armor plate" - desc = "A ceramics-reinforced synthetic armor plate, providing state of of the art protection. Attaches to a plate carrier." - icon_state = "armor_merc" - armor = list( - melee = ARMOR_MELEE_RESISTANT, - bullet = ARMOR_BALLISTIC_RIFLE, - laser = ARMOR_LASER_MAJOR, - energy = ARMOR_ENERGY_RESISTANT, - bomb = ARMOR_BOMB_PADDED - ) - slowdown = 0.5 - - -/obj/item/clothing/accessory/armor_plate/sneaky - name = "low-profile armor vest" - desc = "An armor vest made of layered polymer fibers. Can attach to your slacks and office shirt." - siemens_coefficient = 0.6 - item_icons = list(slot_wear_suit_str = 'icons/mob/onmob/onmob_accessories.dmi') - item_flags = ITEM_FLAG_THICKMATERIAL - slot_flags = SLOT_OCLOTHING //can wear in suit slot as well - slot = ACCESSORY_SLOT_UTILITY - w_class = ITEM_SIZE_NORMAL - blood_overlay_type = "armor" - icon_state = "undervest" - - -/obj/item/clothing/accessory/armor_plate/sneaky/tactical - name = "low-profile tactical armor vest" - desc = "An armor vest made of layered smart polymers. Can attach to your slacks and office shirt." - armor = list( - melee = ARMOR_MELEE_KNIVES, - bullet = ARMOR_BALLISTIC_PISTOL, - laser = ARMOR_LASER_SMALL, - energy = ARMOR_ENERGY_SMALL, - bomb = ARMOR_BOMB_PADDED - ) diff --git a/code/modules/clothing/under/accessories/armor_tag.dm b/code/modules/clothing/under/accessories/armor_tag.dm deleted file mode 100644 index becb2e5141060..0000000000000 --- a/code/modules/clothing/under/accessories/armor_tag.dm +++ /dev/null @@ -1,85 +0,0 @@ -/obj/item/clothing/accessory/armor_tag - name = "base armor tag" - desc = "A collection of various tags for placing on the front of a plate carrier." - icon_override = 'icons/mob/onmob/onmob_modular_armor.dmi' - icon = 'icons/obj/clothing/obj_suit_modular_armor.dmi' - accessory_icons = list( - slot_tie_str = 'icons/mob/onmob/onmob_modular_armor.dmi', - slot_wear_suit_str = 'icons/mob/onmob/onmob_modular_armor.dmi' - ) - icon_state = null - slot = ACCESSORY_SLOT_ARMOR_M - w_class = ITEM_SIZE_TINY - - -/obj/item/clothing/accessory/armor_tag/nt - name = "\improper CORPORATE SECURITY tag" - desc = "An armor tag with the words CORPORATE SECURITY printed in bottle green lettering on it." - icon_state = "nanotag" - - -/obj/item/clothing/accessory/armor_tag/pcrc - name = "\improper PCRC tag" - desc = "An armor tag with the words PROXIMA CENTAURI RISK CONTROL printed in cyan lettering on it." - icon_state = "pcrctag" - - -/obj/item/clothing/accessory/armor_tag/saare - name = "\improper SAARE tag" - desc = "An armor tag with the acronym SAARE printed in olive-green lettering on it." - icon_state = "saaretag" - - -/obj/item/clothing/accessory/armor_tag/press - name = "\improper PRESS tag" - desc = "A tag with the word PRESS printed in white lettering on it." - icon_state = "presstag" - slot_flags = SLOT_BELT - - -/obj/item/clothing/accessory/armor_tag/opos - name = "\improper O+ blood patch" - desc = "An embroidered patch indicating the wearer's blood type as O POSITIVE." - icon_state = "opostag" - - -/obj/item/clothing/accessory/armor_tag/oneg - name = "\improper O- blood patch" - desc = "An embroidered patch indicating the wearer's blood type as O NEGATIVE." - icon_state = "onegtag" - - -/obj/item/clothing/accessory/armor_tag/apos - name = "\improper A+ blood patch" - desc = "An embroidered patch indicating the wearer's blood type as A POSITIVE." - icon_state = "apostag" - - -/obj/item/clothing/accessory/armor_tag/aneg - name = "\improper A- blood patch" - desc = "An embroidered patch indicating the wearer's blood type as A NEGATIVE." - icon_state = "anegtag" - - -/obj/item/clothing/accessory/armor_tag/bpos - name = "\improper B+ blood patch" - desc = "An embroidered patch indicating the wearer's blood type as B POSITIVE." - icon_state = "bpostag" - - -/obj/item/clothing/accessory/armor_tag/bneg - name = "\improper B- blood patch" - desc = "An embroidered patch indicating the wearer's blood type as B NEGATIVE." - icon_state = "bnegtag" - - -/obj/item/clothing/accessory/armor_tag/abpos - name = "\improper AB+ blood patch" - desc = "An embroidered patch indicating the wearer's blood type as AB POSITIVE." - icon_state = "abpostag" - - -/obj/item/clothing/accessory/armor_tag/abneg - name = "\improper AB- blood patch" - desc = "An embroidered patch indicating the wearer's blood type as AB NEGATIVE." - icon_state = "abnegtag" diff --git a/code/modules/clothing/under/accessories/badges.dm b/code/modules/clothing/under/accessories/badges.dm deleted file mode 100644 index c9dc8cc172258..0000000000000 --- a/code/modules/clothing/under/accessories/badges.dm +++ /dev/null @@ -1,307 +0,0 @@ -/obj/item/clothing/accessory/badge - name = "badge" - desc = "A leather-backed badge, with gold trimmings." - icon_state = "detectivebadge" - slot_flags = SLOT_BELT | SLOT_TIE - slot = ACCESSORY_SLOT_INSIGNIA - accessory_flags = ACCESSORY_REMOVABLE | ACCESSORY_HIGH_VISIBILITY - var/badge_string = "Detective" - var/stored_name - - -/obj/item/clothing/accessory/badge/get_lore_info() - . = ..() - . += "
              Denotes affiliation to [badge_string]." - - -/obj/item/clothing/accessory/badge/proc/set_name(new_name) - stored_name = new_name - - -/obj/item/clothing/accessory/badge/proc/set_desc(mob/living/carbon/human/H) - - -/obj/item/clothing/accessory/badge/CanUseTopic(user) - if (user in view(get_turf(src))) - return STATUS_INTERACTIVE - - -/obj/item/clothing/accessory/badge/OnTopic(mob/user, list/href_list) - if (href_list["look_at_me"]) - if (istype(user)) - user.examinate(src) - return TOPIC_HANDLED - - -/obj/item/clothing/accessory/badge/get_examine_line() - . = ..() - . += " \[View\]" - - -/obj/item/clothing/accessory/badge/examine(user) - . = ..() - if (stored_name) - to_chat(user,"It reads: [stored_name], [badge_string].") - - -/obj/item/clothing/accessory/badge/attack_self(mob/user) - if (!stored_name) - to_chat(user, "You inspect your [src.name]. Everything seems to be in order and you give it a quick cleaning with your hand.") - set_name(user.real_name) - set_desc(user) - return - if (isliving(user)) - if(stored_name) - user.visible_message("[user] displays their [src.name].\nIt reads: [stored_name], [badge_string].","You display your [src.name].\nIt reads: [stored_name], [badge_string].") - else - user.visible_message("[user] displays their [src.name].\nIt reads: [badge_string].","You display your [src.name]. It reads: [badge_string].") - - -/obj/item/clothing/accessory/badge/attack(mob/living/carbon/human/M, mob/living/user) - if (isliving(user)) - user.visible_message("[user] invades [M]'s personal space, thrusting \the [src] into their face insistently.","You invade [M]'s personal space, thrusting \the [src] into their face insistently.") - if (stored_name) - to_chat(M, "It reads: [stored_name], [badge_string].") - - -/obj/item/clothing/accessory/badge/investigator - name = "private investigator's badge" - badge_string = "Private Investigator" - - -/obj/item/clothing/accessory/badge/holo - name = "holobadge" - desc = "This glowing blue badge marks the holder as a member of security." - color = COLOR_PALE_BLUE_GRAY - icon_state = "holobadge" - item_state = "holobadge" - badge_string = "Security" - var/badge_access = access_security - var/badge_number - var/emagged - - -/obj/item/clothing/accessory/badge/holo/NT - name = "corporate holobadge" - desc = "This glowing green badge marks the holder as a member of corporate security." - icon_state = "ntholobadge" - color = null - badge_string = "Corporate Security" - badge_access = access_research - - -/obj/item/clothing/accessory/badge/holo/cord - icon_state = "holobadge-cord" - slot_flags = SLOT_MASK | SLOT_TIE - - -/obj/item/clothing/accessory/badge/holo/NT/cord - icon_state = "holobadge-cord" - slot_flags = SLOT_MASK | SLOT_TIE - - -/obj/item/clothing/accessory/badge/holo/set_name(new_name) - ..() - badge_number = random_id(type, 1000, 9999) - name = "[name] ([badge_number])" - - -/obj/item/clothing/accessory/badge/holo/examine(user) - . = ..() - if (badge_number) - to_chat(user,"The badge number is [badge_number].") - - -/obj/item/clothing/accessory/badge/holo/attack_self(mob/user) - if (!stored_name) - to_chat(user, "Waving around a holobadge before swiping an ID would be pretty pointless.") - return - return ..() - - -/obj/item/clothing/accessory/badge/holo/emag_act(remaining_charges, mob/user) - if (emagged) - to_chat(user, SPAN_DANGER("\The [src] is already cracked.")) - return NO_EMAG_ACT - emagged = TRUE - to_chat(user, SPAN_DANGER("You crack the security checks on \the [src].")) - return 1 - - -/obj/item/clothing/accessory/badge/holo/attackby(obj/item/O, mob/user) - if (istype(O, /obj/item/card/id) || istype(O, /obj/item/modular_computer)) - var/obj/item/card/id/id_card = O.GetIdCard() - if (!id_card) - return - if ((badge_access in id_card.access) || emagged) - to_chat(user, "You imprint your ID details onto the badge.") - set_name(id_card.registered_name) - set_desc(user) - else - to_chat(user, "[src] rejects your ID, and flashes 'Insufficient access!'") - return - ..() - - -/obj/item/storage/box/holobadge - name = "holobadge box" - desc = "A box containing security holobadges." - startswith = list( - /obj/item/clothing/accessory/badge/holo = 4, - /obj/item/clothing/accessory/badge/holo/cord = 2 - ) - - -/obj/item/storage/box/holobadgeNT - name = "corporate holobadge box" - desc = "A box containing corporate security holobadges." - startswith = list( - /obj/item/clothing/accessory/badge/holo/NT = 4, - /obj/item/clothing/accessory/badge/holo/NT/cord = 2 - ) - - -/obj/item/clothing/accessory/badge/old - name = "faded badge" - desc = "A faded badge, backed with leather. Looks crummy." - icon_state = "badge_round" - badge_string = "Unknown" - - -/obj/item/clothing/accessory/badge/defenseintel - name = "\improper DIA investigator's badge" - desc = "A leather-backed silver badge bearing the crest of the Defense Intelligence Agency." - icon_state = "diabadge" - badge_string = "Defense Intelligence Agency" - - -/obj/item/clothing/accessory/badge/interstellarintel - name = "\improper OII agent's badge" - desc = "A synthleather holographic badge bearing the crest of the Office of Interstellar Intelligence." - icon_state = "intelbadge" - badge_string = "Office of Interstellar Intelligence" - -/obj/item/clothing/accessory/badge/nanotrasen - name = "corporate badge" - desc = "A leather-backed plastic badge with a variety of information printed on it. Belongs to a corporate executive." - icon_state = "ntbadge" - badge_string = "Corporate Executive Body" - -// SolFedPolice // -// ============ // - -/obj/item/clothing/accessory/badge/director_agent //Proxima - name = "\improper SFP Director's badge" - desc = "A synthleather holographic badge bearing the crest of the Sol Federal Police." - icon_state = "intelbadge" - slot_flags = SLOT_BELT | SLOT_TIE | SLOT_MASK - slot = ACCESSORY_SLOT_INSIGNIA - badge_string = FACTION_SPACECOPS - -/obj/item/clothing/accessory/badge/deputy_agent //Proxima - name = "\improper SFP Deputy Director's badge" - desc = "A synthleather holographic badge bearing the crest of the Sol Federal Police." - icon_state = "intelbadge" - slot_flags = SLOT_BELT | SLOT_TIE | SLOT_MASK - slot = ACCESSORY_SLOT_INSIGNIA - badge_string = FACTION_SPACECOPS - -/obj/item/clothing/accessory/badge/curator_agent //Proxima - name = "\improper SFP Supervisory Agent's badge" - desc = "A synthleather holographic badge bearing the crest of the Sol Federal Police." - icon_state = "intelbadge" - slot_flags = SLOT_BELT | SLOT_TIE | SLOT_MASK - slot = ACCESSORY_SLOT_INSIGNIA - badge_string = FACTION_SPACECOPS - -/obj/item/clothing/accessory/badge/inspector_agent //Proxima - name = "\improper SFP Agent Inspector's badge" - desc = "A synthleather holographic badge bearing the crest of the Sol Federal Police." - icon_state = "intelbadge" - slot_flags = SLOT_BELT | SLOT_TIE | SLOT_MASK - slot = ACCESSORY_SLOT_INSIGNIA - badge_string = FACTION_SPACECOPS - -/obj/item/clothing/accessory/badge/senior_agent //Proxima - name = "\improper SFP Senior Agent's badge" - desc = "A leather-backed gold badge displaying the crest of the Sol Federal Police." - icon_state = "agentbadge" - slot_flags = SLOT_BELT | SLOT_TIE | SLOT_MASK - slot = ACCESSORY_SLOT_INSIGNIA - badge_string = FACTION_SPACECOPS - -/obj/item/clothing/accessory/badge/agent - name = "\improper SFP Agent's badge" - desc = "A leather-backed gold badge displaying the crest of the Sol Federal Police." - icon_state = "agentbadge" - slot_flags = SLOT_BELT | SLOT_TIE | SLOT_MASK - slot = ACCESSORY_SLOT_INSIGNIA - badge_string = FACTION_SPACECOPS - -/obj/item/clothing/accessory/badge/duty_agent //Proxima - name = "\improper SFP Duty Agent's badge" - desc = "A leather-backed gold badge displaying the crest of the Sol Federal Police." - icon_state = "agentbadge" - slot_flags = SLOT_BELT | SLOT_TIE | SLOT_MASK - slot = ACCESSORY_SLOT_INSIGNIA - badge_string = FACTION_SPACECOPS - -/obj/item/clothing/accessory/badge/junior_agent //Proxima - name = "\improper SFP Junior Agent's badge" - desc = "A blue leather-backed gold badge displaying the crest of the Sol Federal Police." - icon_state = "trackerbadge" - slot_flags = SLOT_BELT | SLOT_TIE - slot = ACCESSORY_SLOT_INSIGNIA - badge_string = FACTION_SPACECOPS - -/obj/item/clothing/accessory/badge/tracker - name = "\improper Tracker's badge" - desc = "A blue leather-backed gold badge displaying the crest of the Sol Federal Police." - icon_state = "trackerbadge" - slot_flags = SLOT_BELT | SLOT_TIE - slot = ACCESSORY_SLOT_INSIGNIA - badge_string = FACTION_SPACECOPS - - -/obj/item/clothing/accessory/badge/press - name = "press badge" - desc = "A leather-backed plastic badge displaying that the owner is certified press personnel." - icon_state = "pressbadge" - badge_string = "Journalist" - -/obj/item/clothing/accessory/badge/tags/skrell - name = "\improper Skrellian holobadge" - desc = "A high tech Skrellian holobadge, designed to project information about the owner." - icon_state = "skrell_badge" - badge_string = null - - -/obj/item/clothing/accessory/badge/tags/skrell/set_desc(mob/living/carbon/human/H) - if (!istype(H)) - return - desc = "Blood type: [H.b_type]" - -/obj/item/clothing/accessory/badge/tags/skrell/verb/set_sdtf() - set name = "Set SDTF Name" - set category = "Object" - set src in usr - if (!ishuman(usr) || usr.stat) - return - var/obj/item/clothing/accessory/badge/tags/skrell/B = src - if (!istype(B)) - B = locate() in src - if (!B) - return - if (usr.get_active_hand() != B) - to_chat(usr, SPAN_WARNING("You must be holding \the [src] to modify it.")) - return - var/value = input(usr, "Input your SDTF.", "SDTF Holobadge") as null | text - if (isnull(value)) - return - if (usr.stat || usr.get_active_hand() != B) - to_chat(usr, SPAN_WARNING("You keep holding \the [src] to modify it.")) - return - badge_string = sanitize(value, MAX_NAME_LEN) - set_name(usr.real_name) - set_desc(usr) - verbs -= /obj/item/clothing/accessory/badge/tags/skrell/verb/set_sdtf diff --git a/code/modules/clothing/under/accessories/bowtie.dm b/code/modules/clothing/under/accessories/bowtie.dm deleted file mode 100644 index 565fdfd6c5e25..0000000000000 --- a/code/modules/clothing/under/accessories/bowtie.dm +++ /dev/null @@ -1,44 +0,0 @@ -/obj/item/clothing/accessory/bowtie/var/untied - - -/obj/item/clothing/accessory/bowtie/on_attached(obj/item/clothing/C, mob/user) - ..() - parent.verbs += /obj/item/clothing/accessory/bowtie/verb/toggle_bowtie - - -/obj/item/clothing/accessory/bowtie/on_removed(mob/user) - if (parent) - parent.verbs -= /obj/item/clothing/accessory/bowtie/verb/toggle_bowtie - ..() - - -/obj/item/clothing/accessory/bowtie/verb/toggle_bowtie() - set name = "Toggle Bowtie" - set category = "Object" - set src in usr - if (!ishuman(usr) || usr.stat) - return - var/obj/item/clothing/accessory/bowtie/B = src - if (!istype(B)) - B = locate() in src - if (!B) - return - B.untied = !B.untied - to_chat(usr, "You [B.untied ? "untie" : "tie"] your [B.name].") - B.queue_icon_update() - - -/obj/item/clothing/accessory/bowtie/on_update_icon() - icon_state = "[initial(icon_state)][untied?"_untied":""]" - - -/obj/item/clothing/accessory/bowtie/color - name = "bowtie" - desc = "A neosilk hand-tied bowtie." - icon_state = "bowtie" - - -/obj/item/clothing/accessory/bowtie/ugly - name = "horrible bowtie" - desc = "A neosilk hand-tied bowtie. This one is disgusting." - icon_state = "bowtie_ugly" diff --git a/code/modules/clothing/under/accessories/bracelet.dm b/code/modules/clothing/under/accessories/bracelet.dm deleted file mode 100644 index 58f73d0de6cb3..0000000000000 --- a/code/modules/clothing/under/accessories/bracelet.dm +++ /dev/null @@ -1,5 +0,0 @@ -/obj/item/clothing/accessory/bracelet - name = "bracelet" - desc = "A simple bracelet with a clasp." - icon_state = "bracelet" - body_location = HANDS diff --git a/code/modules/clothing/under/accessories/buddy_tag.dm b/code/modules/clothing/under/accessories/buddy_tag.dm deleted file mode 100644 index 7a3e9c81b918a..0000000000000 --- a/code/modules/clothing/under/accessories/buddy_tag.dm +++ /dev/null @@ -1,69 +0,0 @@ -/obj/item/clothing/accessory/buddy_tag - name = "buddy tag" - desc = "A tiny device, paired up with a counterpart set to same code. When devices are taken apart too far, they start beeping." - icon_state = "buddytag0" - slot_flags = SLOT_TIE - accessory_flags = ACCESSORY_REMOVABLE | ACCESSORY_HIGH_VISIBILITY - var/next_search = 0 - var/on = 0 - var/id = 1 - - -/obj/item/clothing/accessory/buddy_tag/on_update_icon() - icon_state = "buddytag[on]" - - -/obj/item/clothing/accessory/buddy_tag/attack_self(mob/user) - if (!CanPhysicallyInteract(user)) - return - var/dat = "[on ? "Disable" : "Enable"]
              " - dat += "ID: [id]" - var/datum/browser/popup = new(user, "buddytag", "Buddy Tag", 290, 200) - popup.set_content(dat) - popup.open() - - -/obj/item/clothing/accessory/buddy_tag/DefaultTopicState() - return GLOB.physical_state - - -/obj/item/clothing/accessory/buddy_tag/OnTopic(user, list/href_list, state) - if (href_list["toggle"]) - on = !on - if (on) - next_search = world.time - START_PROCESSING(SSobj, src) - update_icon() - return TOPIC_REFRESH - if (href_list["setcode"]) - var/newcode = input("Set new buddy ID number.", "Buddy Tag ID", "") as null | num - if (newcode == null || !CanInteract(user, state)) - return - id = newcode - return TOPIC_REFRESH - - -/obj/item/clothing/accessory/buddy_tag/Process() - if (!on) - return PROCESS_KILL - if (world.time < next_search) - return - next_search = world.time + 30 SECONDS - var/has_friend - for (var/obj/item/clothing/accessory/buddy_tag/buddy in SSobj.processing) - if (buddy == src) - continue - if (!buddy.on) - continue - if (buddy.id != id) - continue - if (get_z(buddy) != get_z(src)) - continue - if (get_dist(get_turf(src), get_turf(buddy)) <= 10) - has_friend = TRUE - break - if (!has_friend) - playsound(src, 'sound/machines/chime.ogg', 10) - var/turf/T = get_turf(src) - if (T) - T.visible_message(SPAN_WARNING("[src] beeps anxiously."), range = 3) diff --git a/code/modules/clothing/under/accessories/chaplain.dm b/code/modules/clothing/under/accessories/chaplain.dm deleted file mode 100644 index d7c46650decf9..0000000000000 --- a/code/modules/clothing/under/accessories/chaplain.dm +++ /dev/null @@ -1,62 +0,0 @@ -/obj/item/clothing/accessory/chaplain - abstract_type = /obj/item/clothing/accessory/chaplain - name = "base chaplain insignia" - item_state = "chaplaininsignia" - on_rolled = list("down" = "none") - slot = ACCESSORY_SLOT_INSIGNIA - - -/obj/item/clothing/accessory/chaplain/christianity - name = "chaplain insignia (christianity)" - desc = "An insignia worn by chaplains. The cross represents Christianity." - icon_state = "christianinsignia" - item_state = "chaplaininsignia" - on_rolled = list("down" = "none") - slot = ACCESSORY_SLOT_INSIGNIA - - -/obj/item/clothing/accessory/chaplain/judaism - name = "chaplain insignia (judaism)" - desc = "An insignia worn by chaplains. The Star of David represents Judaism." - icon_state = "jewishinsignia" - - -/obj/item/clothing/accessory/chaplain/islam - name = "chaplain insignia (islam)" - desc = "An insignia worn by chaplains. The star & crescent represent Islam." - icon_state = "musliminsignia" - -/obj/item/clothing/accessory/chaplain/buddhism - name = "chaplain insignia (buddhism)" - desc = "An insignia worn by chaplains. The Dharma Chakra represents Buddhism." - icon_state = "buddhistinsignia" - - -/obj/item/clothing/accessory/chaplain/hinduism - name = "chaplain insignia (hinduism)" - desc = "An insignia worn by chaplains. The Om represents Hinduism." - icon_state = "hinduinsignia" - - -/obj/item/clothing/accessory/chaplain/sikhism - name = "chaplain insignia (sikhism)" - desc = "An insignia worn by chaplains. The Khanda represents Sikhism." - icon_state = "sikhinsignia" - - -/obj/item/clothing/accessory/chaplain/bahaifaith - name = "chaplain insignia (baha'i faith)" - desc = "An insignia worn by chaplains. The nine-pointed star represents the Baha'i Faith." - icon_state = "bahaiinsignia" - - -/obj/item/clothing/accessory/chaplain/jainism - name = "chaplain insignia (jainism)" - desc = "An insignia worn by chaplains. The symbol of Ahimsa represents Jainism." - icon_state = "jaininsignia" - - -/obj/item/clothing/accessory/chaplain/taoism - name = "chaplain insignia (taoism)" - desc = "An insignia worn by chaplains. The yin yang represents Taoism." - icon_state = "taoinsignia" diff --git a/code/modules/clothing/under/accessories/corpjacket.dm b/code/modules/clothing/under/accessories/corpjacket.dm deleted file mode 100644 index f4b1e24ff3b96..0000000000000 --- a/code/modules/clothing/under/accessories/corpjacket.dm +++ /dev/null @@ -1,22 +0,0 @@ -/obj/item/clothing/accessory/toggleable/corpjacket - name = "corporate suit jacket" - desc = "A jacket that the EXO has their executives wear." - icon_state = "jacket_tl" - - -/obj/item/clothing/accessory/toggleable/corpjacket/heph - name = "\improper Hephaestus Industries suit jacket" - desc = "A jacket that Hephaestus Industries has their executives wear." - icon_state = "jacket_heph" - - -/obj/item/clothing/accessory/toggleable/corpjacket/nanotrasen - name = "\improper NanoTrasen suit jacket" - desc = "A jacket that NanoTrasen has their executives wear." - icon_state = "jacket_nt" - - -/obj/item/clothing/accessory/toggleable/corpjacket/zeng - name = "\improper Zeng-Hu suit jacket" - desc = "A jacket that Zeng-Hu has their executives wear." - icon_state = "jacket_zeng" diff --git a/code/modules/clothing/under/accessories/dashiki.dm b/code/modules/clothing/under/accessories/dashiki.dm deleted file mode 100644 index e8278c1d9651a..0000000000000 --- a/code/modules/clothing/under/accessories/dashiki.dm +++ /dev/null @@ -1,16 +0,0 @@ -/obj/item/clothing/accessory/dashiki - name = "black dashiki" - desc = "An ornately embroidered pullover garmant sporting a v-shaped collar. This one is green and black." - icon_state = "dashiki" - - -/obj/item/clothing/accessory/dashiki/red - name = "red dashiki" - desc = "An ornately embroidered pullover garmant sporting a v-shaped collar. This one is red." - icon_state = "dashikired" - - -/obj/item/clothing/accessory/dashiki/blue - name = "blue dashiki" - desc = "An ornately embroidered pullover garmant sporting a v-shaped collar. This one is blue." - icon_state = "dashikiblue" diff --git a/code/modules/clothing/under/accessories/fire_overpants.dm b/code/modules/clothing/under/accessories/fire_overpants.dm deleted file mode 100644 index acbdc60a3e64a..0000000000000 --- a/code/modules/clothing/under/accessories/fire_overpants.dm +++ /dev/null @@ -1,17 +0,0 @@ -/obj/item/clothing/accessory/fire_overpants - name = "fire overpants" - desc = "some overpants made of fire-resistant synthetic fibers. To be worn over the uniform." - icon_state = "fire_overpants" - gas_transfer_coefficient = 0.90 - permeability_coefficient = 0.50 - - armor = list(laser = ARMOR_LASER_MINOR, energy = ARMOR_ENERGY_MINOR, bomb = ARMOR_BOMB_MINOR) - body_parts_covered = LOWER_TORSO | LEGS - body_location = LOWER_TORSO | LEGS - slowdown = 0.5 - - heat_protection = LOWER_TORSO | LEGS - cold_protection = LOWER_TORSO | LEGS - - max_heat_protection_temperature = FIRESUIT_MAX_HEAT_PROTECTION_TEMPERATURE - max_pressure_protection = FIRESUIT_MAX_PRESSURE diff --git a/code/modules/clothing/under/accessories/flannel_shirt.dm b/code/modules/clothing/under/accessories/flannel_shirt.dm deleted file mode 100644 index 9d8baab610f01..0000000000000 --- a/code/modules/clothing/under/accessories/flannel_shirt.dm +++ /dev/null @@ -1,81 +0,0 @@ -/obj/item/clothing/accessory/flannel - name = "flannel shirt" - desc = "A comfy, plaid flannel shirt." - icon_state = "flannel" - var/rolled - var/tucked - var/buttoned - - -/obj/item/clothing/accessory/flannel/on_update_icon() - icon_state = initial(icon_state) - if (rolled) - icon_state += "r" - if (tucked) - icon_state += "t" - if (buttoned) - icon_state += "b" - update_clothing_icon() - - -/obj/item/clothing/accessory/flannel/on_attached(obj/item/clothing/C, mob/user) - ..() - parent.verbs += /obj/item/clothing/accessory/flannel/verb/toggle_tucking - parent.verbs += /obj/item/clothing/accessory/flannel/verb/toggle_sleeves - parent.verbs += /obj/item/clothing/accessory/flannel/verb/toggle_flannel - - -/obj/item/clothing/accessory/flannel/on_removed(mob/user) - if (parent) - parent.verbs -= /obj/item/clothing/accessory/flannel/verb/toggle_tucking - parent.verbs -= /obj/item/clothing/accessory/flannel/verb/toggle_sleeves - parent.verbs -= /obj/item/clothing/accessory/flannel/verb/toggle_flannel - ..() - - -/obj/item/clothing/accessory/flannel/verb/toggle_flannel() - set name = "Toggle Flannel Buttons" - set category = "Object" - set src in usr - if (!ishuman(usr) || usr.stat) - return - var/obj/item/clothing/accessory/flannel/F = src - if (!istype(F)) - F = locate() in src - if (!F) - return - F.buttoned = !F.buttoned - to_chat(usr, "You [F.buttoned ? "button up" : "unbutton"] your [F.name].") - F.queue_icon_update() - - -/obj/item/clothing/accessory/flannel/verb/toggle_sleeves() - set name = "Toggle Flannel Sleeves" - set category = "Object" - set src in usr - if (!ishuman(usr) || usr.stat) - return - var/obj/item/clothing/accessory/flannel/F = src - if (!istype(F)) - F = locate() in src - if (!F) - return - F.rolled = !F.rolled - to_chat(usr, "You roll [F.rolled ? "up" : "down"] the sleeves of your [F.name].") - F.queue_icon_update() - - -/obj/item/clothing/accessory/flannel/verb/toggle_tucking() - set name = "Toggle Flannel Tucking" - set category = "Object" - set src in usr - if (!ishuman(usr) || usr.stat) - return - var/obj/item/clothing/accessory/flannel/F = src - if (!istype(F)) - F = locate() in src - if (!F) - return - F.tucked = !F.tucked - to_chat(usr, "You [F.tucked ? "tuck in" : "untuck"] your [F.name].") - F.queue_icon_update() diff --git a/code/modules/clothing/under/accessories/ftu_pin.dm b/code/modules/clothing/under/accessories/ftu_pin.dm deleted file mode 100644 index 37ac1bbdb41dc..0000000000000 --- a/code/modules/clothing/under/accessories/ftu_pin.dm +++ /dev/null @@ -1,5 +0,0 @@ -/obj/item/clothing/accessory/ftu_pin - name = "\improper Free Trade Union pin" - desc = "A pin denoting employment in the Free Trade Union, a trading company." - icon_state = "ftupin" - accessory_flags = ACCESSORY_REMOVABLE | ACCESSORY_HIGH_VISIBILITY diff --git a/code/modules/clothing/under/accessories/hawaii.dm b/code/modules/clothing/under/accessories/hawaii.dm deleted file mode 100644 index 59c0e2de79715..0000000000000 --- a/code/modules/clothing/under/accessories/hawaii.dm +++ /dev/null @@ -1,23 +0,0 @@ -/obj/item/clothing/accessory/toggleable/hawaii - name = "flower-pattern shirt" - desc = "You probably need some welder googles to look at this." - icon_state = "hawaii" - sprite_sheets = list( - "Monkey" = 'icons/mob/species/monkey/onmob_accessories_monkey.dmi' - ) - - -/obj/item/clothing/accessory/toggleable/hawaii/red - icon_state = "hawaii2" - - -/obj/item/clothing/accessory/toggleable/hawaii/random - name = "flower-pattern shirt" - - -/obj/item/clothing/accessory/toggleable/hawaii/random/Initialize() - . = ..() - if (prob(50)) - icon_state = "hawaii2" - icon_closed = "hawaii2" - color = color_rotation(rand(-11, 12) * 15) diff --git a/code/modules/clothing/under/accessories/helmcover.dm b/code/modules/clothing/under/accessories/helmcover.dm deleted file mode 100644 index 5a13bc9a318e0..0000000000000 --- a/code/modules/clothing/under/accessories/helmcover.dm +++ /dev/null @@ -1,54 +0,0 @@ -/obj/item/clothing/accessory/helmet_cover - name = "helmet cover" - desc = "A fabric cover for armored helmets." - icon_override = 'icons/mob/onmob/onmob_modular_armor.dmi' - icon = 'icons/obj/clothing/obj_suit_modular_armor.dmi' - accessory_icons = list( - slot_tie_str = 'icons/mob/onmob/onmob_modular_armor.dmi', - slot_head_str = 'icons/mob/onmob/onmob_modular_armor.dmi' - ) - icon_state = null - slot = ACCESSORY_SLOT_HELM_C - body_location = HEAD - - -/obj/item/clothing/accessory/helmet_cover/blue - name = "blue helmet cover" - desc = "A fabric cover for armored helmets in a bright blue color." - icon_state = "helmcover_blue" - - -/obj/item/clothing/accessory/helmet_cover/navy - name = "navy blue helmet cover" - desc = "A fabric cover for armored helmets. This one is colored navy blue." - icon_state = "helmcover_navy" - - -/obj/item/clothing/accessory/helmet_cover/green - name = "green helmet cover" - desc = "A fabric cover for armored helmets. This one has a woodland camouflage pattern." - icon_state = "helmcover_green" - - -/obj/item/clothing/accessory/helmet_cover/tan - name = "tan helmet cover" - desc = "A fabric cover for armored helmets. This one has a desert camouflage pattern." - icon_state = "helmcover_tan" - - -/obj/item/clothing/accessory/helmet_cover/nt - name = "white helmet cover" - desc = "A fabric cover for armored helmets. This one is white." - icon_state = "helmcover_nt" - - -/obj/item/clothing/accessory/helmet_cover/pcrc - name = "\improper PCRC helmet cover" - desc = "A fabric cover for armored helmets. This one is colored navy blue and has a tag in the back with the words PROXIMA CENTAURI RISK CONTROL printed in cyan lettering on it." - icon_state = "helmcover_pcrc" - - -/obj/item/clothing/accessory/helmet_cover/saare - name = "\improper SAARE helmet cover" - desc = "A fabric cover for armored helmets. This one has SAARE's colors." - icon_state = "helmcover_saare" diff --git a/code/modules/clothing/under/accessories/helmet_decor.dm b/code/modules/clothing/under/accessories/helmet_decor.dm deleted file mode 100644 index b7a018aafa41e..0000000000000 --- a/code/modules/clothing/under/accessories/helmet_decor.dm +++ /dev/null @@ -1,103 +0,0 @@ -/obj/item/clothing/accessory/helmet_decor - abstract_type = /obj/item/clothing/accessory/helmet_decor - name = "base helmet decor" - desc = "You should not see this." - icon = 'icons/obj/clothing/helmet_decor.dmi' - accessory_icons = list( - slot_head_str = 'icons/obj/clothing/helmet_decor.dmi' - ) - icon_state = "error" - overlay_state = "error" - w_class = ITEM_SIZE_TINY - accessory_flags = ACCESSORY_REMOVABLE | ACCESSORY_HIGH_VISIBILITY - slot = ACCESSORY_SLOT_HELM_D - body_location = HEAD - gender = PLURAL - - -/obj/item/clothing/accessory/helmet_decor/get_fibers() - return null - - -/obj/item/clothing/accessory/helmet_decor/cat_black - name = "tactical cat ears" - desc = "A pair of costume cat ears with touch fasteners for adding to helmets. These ones are black." - icon_state = "cat_black" - overlay_state = "cat_black_mob" - - -/obj/item/clothing/accessory/helmet_decor/cat_peacekeeper - name = "tactical cat ears" - desc = "A pair of costume cat ears with touch fasteners for adding to helmets. These ones are peacekeeper blue." - icon_state = "cat_peacekeeper" - overlay_state = "cat_peacekeeper_mob" - - -/obj/item/clothing/accessory/helmet_decor/cat_navy - name = "tactical cat ears" - desc = "A pair of costume cat ears with touch fasteners for adding to helmets. These ones are navy blue." - icon_state = "cat_navy" - overlay_state = "cat_navy_mob" - - -/obj/item/clothing/accessory/helmet_decor/cat_tan - name = "tactical cat ears" - desc = "A pair of costume cat ears with touch fasteners for adding to helmets. These ones are tan." - icon_state = "cat_tan" - overlay_state = "cat_tan_mob" - - -/obj/item/clothing/accessory/helmet_decor/cat_green - name = "tactical cat ears" - desc = "A pair of costume cat ears with touch fasteners for adding to helmets. These ones are green." - icon_state = "cat_green" - overlay_state = "cat_green_mob" - - -/obj/item/clothing/accessory/helmet_decor/cat_pink - name = "tactical cat ears" - desc = "A pair of costume cat ears with touch fasteners for adding to helmets. These ones are violently pink." - icon_state = "cat_pink" - overlay_state = "cat_pink_mob" - - -/obj/item/clothing/accessory/helmet_decor/bnuuy_black - name = "tactical rabbit ears" - desc = "A pair of costume rabbit ears with touch fasteners for adding to helmets. These ones are black." - icon_state = "bun_black" - overlay_state = "bun_black_mob" - - -/obj/item/clothing/accessory/helmet_decor/bnuuy_peacekeeper - name = "tactical rabbit ears" - desc = "A pair of costume rabbit ears with touch fasteners for adding to helmets. These ones are peacekeeper blue." - icon_state = "bun_peacekeeper" - overlay_state = "bun_peacekeeper_mob" - - -/obj/item/clothing/accessory/helmet_decor/bnuuy_navy - name = "tactical rabbit ears" - desc = "A pair of costume rabbit ears with touch fasteners for adding to helmets. These ones are navy blue." - icon_state = "bun_navy" - overlay_state = "bun_navy_mob" - - -/obj/item/clothing/accessory/helmet_decor/bnuuy_tan - name = "tactical rabbit ears" - desc = "A pair of costume rabbit ears with touch fasteners for adding to helmets. These ones are tan." - icon_state = "bun_tan" - overlay_state = "bun_tan_mob" - - -/obj/item/clothing/accessory/helmet_decor/bnuuy_green - name = "tactical rabbit ears" - desc = "A pair of costume rabbit ears with touch fasteners for adding to helmets. These ones are green." - icon_state = "bun_green" - overlay_state = "bun_green_mob" - - -/obj/item/clothing/accessory/helmet_decor/bnuuy_pink - name = "tactical rabbit ears" - desc = "A pair of costume rabbit ears with touch fasteners for adding to helmets. These ones are pink." - icon_state = "bun_pink" - overlay_state = "bun_pink_mob" diff --git a/code/modules/clothing/under/accessories/holster.dm b/code/modules/clothing/under/accessories/holster.dm deleted file mode 100644 index 425704c57eb0f..0000000000000 --- a/code/modules/clothing/under/accessories/holster.dm +++ /dev/null @@ -1,115 +0,0 @@ -/obj/item/clothing/accessory/storage/holster - name = "shoulder holster" - desc = "A handgun holster." - icon_state = "holster" - slot = ACCESSORY_SLOT_HOLSTER - slots = 1 STORAGE_SLOTS - max_w_class = ITEM_SIZE_NORMAL - var/list/can_holster = null - var/sound_in = 'sound/effects/holster/holsterin.ogg' - var/sound_out = 'sound/effects/holster/holsterout.ogg' - - -/obj/item/clothing/accessory/storage/holster/Initialize() - . = ..() - container.virtual = TRUE - set_extension(src, /datum/extension/holster, container, sound_in, sound_out, can_holster) - - -/obj/item/clothing/accessory/storage/holster/attackby(obj/item/W as obj, mob/user as mob) - var/datum/extension/holster/H = get_extension(src, /datum/extension/holster) - if (H.holster(W, user)) - return - else - . = ..(W, user) - - -/obj/item/clothing/accessory/storage/holster/attack_hand(mob/user as mob) - var/datum/extension/holster/H = get_extension(src, /datum/extension/holster) - if (H.unholster(user)) - return - . = ..(user) - - -/obj/item/clothing/accessory/storage/holster/examine(mob/user) - . = ..(user) - var/datum/extension/holster/H = get_extension(src, /datum/extension/holster) - H.examine_holster(user) - - -/obj/item/clothing/accessory/storage/holster/on_attached(obj/item/clothing/under/S, mob/user as mob) - ..() - parent.verbs += /atom/proc/holster_verb - - -/obj/item/clothing/accessory/storage/holster/on_removed(mob/user as mob) - if (parent) - var/remove_verb = TRUE - if (has_extension(parent, /datum/extension/holster)) - remove_verb = FALSE - for (var/obj/accessory in parent.accessories) - if (accessory == src) - continue - if (has_extension(accessory, /datum/extension/holster)) - remove_verb = FALSE - if (remove_verb) - parent.verbs -= /atom/proc/holster_verb - ..() - - -/obj/item/clothing/accessory/storage/holster/armpit - name = "armpit holster" - desc = "A worn-out handgun holster. Perfect for concealed carry." - icon_state = "holster" - body_location = UPPER_TORSO - - -/obj/item/clothing/accessory/storage/holster/waist - name = "waist holster" - desc = "A handgun holster. Made of expensive leather." - icon_state = "holster" - overlay_state = "holster_low" - body_location = UPPER_TORSO - - -/obj/item/clothing/accessory/storage/holster/hip - name = "hip holster" - desc = "A handgun holster slung low on the hip, draw pardner!" - icon_state = "holster_hip" - body_location = LOWER_TORSO - - -/obj/item/clothing/accessory/storage/holster/thigh - name = "thigh holster" - desc = "A drop leg holster made of a durable synthetic fiber." - icon_state = "holster_thigh" - sound_in = 'sound/effects/holster/tactiholsterin.ogg' - sound_out = 'sound/effects/holster/tactiholsterout.ogg' - body_location = LEGS - - -/obj/item/clothing/accessory/storage/holster/machete - name = "machete sheath" - desc = "A handsome synthetic leather sheath with matching belt." - icon_state = "holster_machete" - can_holster = list(/obj/item/material/hatchet/machete) - sound_in = 'sound/effects/holster/sheathin.ogg' - sound_out = 'sound/effects/holster/sheathout.ogg' - body_location = LEGS - - -/obj/item/clothing/accessory/storage/holster/knife - name = "leather knife sheath" - desc = "A synthetic leather knife sheath which you can strap on your leg." - icon_state = "sheath_leather" - can_holster = list(/obj/item/material/knife) - sound_in = 'sound/effects/holster/sheathin.ogg' - sound_out = 'sound/effects/holster/sheathout.ogg' - body_location = LEGS - - -/obj/item/clothing/accessory/storage/holster/knife/polymer - name = "polymer knife sheath" - desc = "A rigid polymer sheath which you can strap on your leg." - icon_state = "sheath_polymer" - body_location = LEGS diff --git a/code/modules/clothing/under/accessories/kneepads.dm b/code/modules/clothing/under/accessories/kneepads.dm deleted file mode 100644 index 13b608cddaf44..0000000000000 --- a/code/modules/clothing/under/accessories/kneepads.dm +++ /dev/null @@ -1,5 +0,0 @@ -/obj/item/clothing/accessory/kneepads - name = "kneepads" - desc = "A pair of synthetic kneepads. Doesn't provide protection from more than arthritis." - icon_state = "kneepads" - body_location = LEGS diff --git a/code/modules/clothing/under/accessories/leg_guards.dm b/code/modules/clothing/under/accessories/leg_guards.dm deleted file mode 100644 index fbfc9c3508c8d..0000000000000 --- a/code/modules/clothing/under/accessories/leg_guards.dm +++ /dev/null @@ -1,94 +0,0 @@ -/obj/item/clothing/accessory/leg_guards - name = "leg guards" - desc = "A pair of armored leg pads in black. Attaches to a plate carrier." - icon_override = 'icons/mob/onmob/onmob_modular_armor.dmi' - icon = 'icons/obj/clothing/obj_suit_modular_armor.dmi' - accessory_icons = list(slot_tie_str = 'icons/mob/onmob/onmob_modular_armor.dmi', slot_wear_suit_str = 'icons/mob/onmob/onmob_modular_armor.dmi') - icon_state = "legguards" - gender = PLURAL - body_parts_covered = LEGS - armor = list( - melee = ARMOR_MELEE_KNIVES, - bullet = ARMOR_BALLISTIC_PISTOL, - laser = ARMOR_LASER_SMALL, - energy = ARMOR_ENERGY_SMALL, - bomb = ARMOR_BOMB_PADDED - ) - slot = ACCESSORY_SLOT_ARMOR_L - body_location = LEGS - flags_inv = CLOTHING_BULKY - - -/obj/item/clothing/accessory/leg_guards/blue - desc = "A pair of armored leg pads in blue. Attaches to a plate carrier." - icon_state = "legguards_blue" - - -/obj/item/clothing/accessory/leg_guards/navy - desc = "A pair of armored leg pads in navy blue. Attaches to a plate carrier." - icon_state = "legguards_navy" - - -/obj/item/clothing/accessory/leg_guards/green - desc = "A pair of armored leg pads in green. Attaches to a plate carrier." - icon_state = "legguards_green" - - -/obj/item/clothing/accessory/leg_guards/tan - desc = "A pair of armored leg pads in tan. Attaches to a plate carrier." - icon_state = "legguards_tan" - - -/obj/item/clothing/accessory/leg_guards/merc - name = "heavy leg guards" - desc = "A pair of heavily armored leg pads in red-trimmed black. Attaches to a plate carrier." - icon_state = "legguards_merc" - armor = list( - melee = ARMOR_MELEE_RESISTANT, - bullet = ARMOR_BALLISTIC_PISTOL, - laser = ARMOR_LASER_HANDGUNS, - energy = ARMOR_ENERGY_RESISTANT, - bomb = ARMOR_BOMB_PADDED - ) - - -/obj/item/clothing/accessory/leg_guards/riot - name = "riot leg guards" - desc = "A pair of armored leg pads with heavy padding to protect against melee attacks. Looks like they might impair movement." - icon_state = "legguards_riot" - armor = list( - melee = ARMOR_MELEE_VERY_HIGH, - bullet = ARMOR_BALLISTIC_SMALL, - laser = ARMOR_LASER_SMALL, - energy = ARMOR_ENERGY_MINOR, - bomb = ARMOR_BOMB_PADDED - ) - siemens_coefficient = 0.5 - - -/obj/item/clothing/accessory/leg_guards/ballistic - name = "ballistic leg guards" - desc = "A pair of armored leg pads with heavy plates to protect against ballistic projectiles. Looks like they might impair movement." - icon_state = "legguards_ballistic" - armor = list( - melee = ARMOR_MELEE_KNIVES, - bullet = ARMOR_BALLISTIC_RIFLE, - laser = ARMOR_LASER_SMALL, - energy = ARMOR_ENERGY_MINOR, - bomb = ARMOR_BOMB_PADDED - ) - siemens_coefficient = 0.7 - - -/obj/item/clothing/accessory/leg_guards/ablative - name = "ablative leg guards" - desc = "A pair of armored leg pads with advanced shielding to protect against energy weapons. Looks like they might impair movement." - icon_state = "legguards_ablative" - armor = list( - melee = ARMOR_MELEE_KNIVES, - bullet = ARMOR_BALLISTIC_SMALL, - laser = ARMOR_LASER_RIFLES, - energy = ARMOR_ENERGY_RESISTANT, - bomb = ARMOR_BOMB_PADDED - ) - siemens_coefficient = 0 diff --git a/code/modules/clothing/under/accessories/lockets.dm b/code/modules/clothing/under/accessories/lockets.dm deleted file mode 100644 index 2b12673015184..0000000000000 --- a/code/modules/clothing/under/accessories/lockets.dm +++ /dev/null @@ -1,46 +0,0 @@ -/obj/item/clothing/accessory/locket - name = "silver locket" - desc = "A silver locket that seems to have space for a photo within." - icon_state = "locket" - item_state = "locket" - slot_flags = 0 - w_class = ITEM_SIZE_SMALL - slot_flags = SLOT_MASK | SLOT_TIE - var/base_icon - var/open - var/obj/item/held - - -/obj/item/clothing/accessory/locket/attack_self(mob/user) - if (!base_icon) - base_icon = icon_state - if (!("[base_icon]_open" in icon_states(icon))) - to_chat(user, "\The [src] doesn't seem to open.") - return - - open = !open - to_chat(user, "You flip \the [src] [open?"open":"closed"].") - if (open) - icon_state = "[base_icon]_open" - if (held) - to_chat(user, "\The [held] falls out!") - held.dropInto(user.loc) - held = null - else - icon_state = "[base_icon]" - - -/obj/item/clothing/accessory/locket/attackby(obj/item/I, mob/user) - if (!open) - to_chat(user, "You have to open it first.") - return - if (istype(I, /obj/item/paper) || istype(I, /obj/item/photo)) - if (held) - to_chat(usr, "\The [src] already has something inside it.") - else - if (!user.unEquip(I, src)) - return - to_chat(usr, "You slip [I] into [src].") - held = I - return - ..() diff --git a/code/modules/clothing/under/accessories/medals.dm b/code/modules/clothing/under/accessories/medals.dm deleted file mode 100644 index cad37b491a8aa..0000000000000 --- a/code/modules/clothing/under/accessories/medals.dm +++ /dev/null @@ -1,57 +0,0 @@ -/obj/item/clothing/accessory/medal - name = ACCESSORY_SLOT_MEDAL - desc = "A simple medal." - icon_state = "bronze" - slot = ACCESSORY_SLOT_MEDAL - - -/obj/item/clothing/accessory/medal/iron - name = "iron medal" - desc = "A simple iron medal." - icon_state = "iron" - item_state = "iron" - - -/obj/item/clothing/accessory/medal/bronze - name = "bronze medal" - desc = "A simple bronze medal." - icon_state = "bronze" - item_state = "bronze" - - -/obj/item/clothing/accessory/medal/silver - name = "silver medal" - desc = "A simple silver medal." - icon_state = "silver" - item_state = "silver" - - -/obj/item/clothing/accessory/medal/gold - name = "gold medal" - desc = "A simple gold medal." - icon_state = "gold" - item_state = "gold" - - -/obj/item/clothing/accessory/medal/gold/nanotrasen - name = "corporate command medal" - desc = "A gold medal awarded to employees for service as the Captain of a corporate facility, station, or vessel." - icon_state = "gold_nt" - - -/obj/item/clothing/accessory/medal/silver/nanotrasen - name = "corporate service medal" - desc = "A silver medal awarded to employees for distinguished service in support of corporate interests." - icon_state = "silver_nt" - - -/obj/item/clothing/accessory/medal/bronze/nanotrasen - name = "corporate sciences medal" - desc = "A bronze medal awarded to employees for signifigant contributions to the fields of science or engineering." - icon_state = "bronze_nt" - - -/obj/item/clothing/accessory/medal/iron/nanotrasen - name = "corporate merit medal" - desc = "An iron medal awarded to employees for merit." - icon_state = "iron_nt" diff --git a/code/modules/clothing/under/accessories/neckerchief.dm b/code/modules/clothing/under/accessories/neckerchief.dm deleted file mode 100644 index 99e1cba68b34f..0000000000000 --- a/code/modules/clothing/under/accessories/neckerchief.dm +++ /dev/null @@ -1,4 +0,0 @@ -/obj/item/clothing/accessory/neckerchief - name = "neckerchief" - desc = "A piece of cloth tied around the neck. A favorite of Scouts, Sailors and Partisans everywhere." - icon_state = "neckerchief" diff --git a/code/modules/clothing/under/accessories/necklace.dm b/code/modules/clothing/under/accessories/necklace.dm deleted file mode 100644 index 86c0aff65fdd6..0000000000000 --- a/code/modules/clothing/under/accessories/necklace.dm +++ /dev/null @@ -1,5 +0,0 @@ -/obj/item/clothing/accessory/necklace - name = "necklace" - desc = "A simple necklace." - icon_state = "necklace" - slot_flags = SLOT_MASK | SLOT_TIE diff --git a/code/modules/clothing/under/accessories/pouches.dm b/code/modules/clothing/under/accessories/pouches.dm deleted file mode 100644 index 80fd011ccbac1..0000000000000 --- a/code/modules/clothing/under/accessories/pouches.dm +++ /dev/null @@ -1,61 +0,0 @@ -/obj/item/clothing/accessory/storage/pouches - name = "storage pouches" - desc = "A collection of black pouches that can be attached to a plate carrier. Carries up to two items." - icon_override = 'icons/mob/onmob/onmob_modular_armor.dmi' - icon = 'icons/obj/clothing/obj_suit_modular_armor.dmi' - accessory_icons = list( - slot_tie_str = 'icons/mob/onmob/onmob_modular_armor.dmi', - slot_wear_suit_str = 'icons/mob/onmob/onmob_modular_armor.dmi' - ) - icon_state = "pouches" - gender = PLURAL - slot = ACCESSORY_SLOT_ARMOR_S - slots = 2 STORAGE_SLOTS - - -/obj/item/clothing/accessory/storage/pouches/blue - desc = "A collection of blue pouches that can be attached to a plate carrier. Carries up to two items." - icon_state = "pouches_blue" - - -/obj/item/clothing/accessory/storage/pouches/navy - desc = "A collection of navy blue pouches that can be attached to a plate carrier. Carries up to two items." - icon_state = "pouches_navy" - - -/obj/item/clothing/accessory/storage/pouches/green - desc = "A collection of green pouches that can be attached to a plate carrier. Carries up to two items." - icon_state = "pouches_green" - - -/obj/item/clothing/accessory/storage/pouches/tan - desc = "A collection of tan pouches that can be attached to a plate carrier. Carries up to two items." - icon_state = "pouches_tan" - - -/obj/item/clothing/accessory/storage/pouches/large - name = "large storage pouches" - desc = "A collection of black pouches that can be attached to a plate carrier. Carries up to four items." - icon_state = "lpouches" - slots = 4 STORAGE_SLOTS - slowdown = 1 - - -/obj/item/clothing/accessory/storage/pouches/large/blue - desc = "A collection of blue pouches that can be attached to a plate carrier. Carries up to four items." - icon_state = "lpouches_blue" - - -/obj/item/clothing/accessory/storage/pouches/large/navy - desc = "A collection of navy blue pouches that can be attached to a plate carrier. Carries up to four items." - icon_state = "lpouches_navy" - - -/obj/item/clothing/accessory/storage/pouches/large/green - desc = "A collection of green pouches that can be attached to a plate carrier. Carries up to four items." - icon_state = "lpouches_green" - - -/obj/item/clothing/accessory/storage/pouches/large/tan - desc = "A collection of tan pouches that can be attached to a plate carrier. Carries up to four items." - icon_state = "lpouches_tan" diff --git a/code/modules/clothing/under/accessories/pride_pin.dm b/code/modules/clothing/under/accessories/pride_pin.dm deleted file mode 100644 index 68d2e37c43f3e..0000000000000 --- a/code/modules/clothing/under/accessories/pride_pin.dm +++ /dev/null @@ -1,54 +0,0 @@ -/obj/item/clothing/accessory/pride_pin - abstract_type = /obj/item/clothing/accessory/pride_pin - name = "base pride pin" - item_state = "pridepins" - on_rolled = list("down" = "none") - slot = ACCESSORY_SLOT_INSIGNIA - - -/obj/item/clothing/accessory/pride_pin/transgender - name = "transgender pride pin" - desc = "A pin celebrating transgender pride." - icon_state = "transgenderpin" - - -/obj/item/clothing/accessory/pride_pin/lesbian - name = "lesbian pride pin" - desc = "A pin celebrating lesbian pride." - icon_state = "lesbianpin" - - -/obj/item/clothing/accessory/pride_pin/bisexual - name = "bisexual pride pin" - desc = "A pin celebrating bisexual pride." - icon_state = "bisexualpin" - - -/obj/item/clothing/accessory/pride_pin/gay - name = "gay pride pin" - desc = "A pin celebrating gay pride." - icon_state = "gaypin" - - -/obj/item/clothing/accessory/pride_pin/pansexual - name = "pansexual pride pin" - desc = "A pin celebrating pansexual pride." - icon_state = "pansexualpin" - - -/obj/item/clothing/accessory/pride_pin/nonbinary - name = "nonbinary pride pin" - desc = "A pin celebrating nonbinary pride." - icon_state = "nonbinarypin" - - -/obj/item/clothing/accessory/pride_pin/asexual - name = "asexual pride pin" - desc = "A pin celebrating asexual pride." - icon_state = "asexualpin" - - -/obj/item/clothing/accessory/pride_pin/intersex - name = "intersex pride pin" - desc = "A pin celebrating intersex pride." - icon_state = "intersexpin" diff --git a/code/modules/clothing/under/accessories/pronouns.dm b/code/modules/clothing/under/accessories/pronouns.dm deleted file mode 100644 index a327f748f33d5..0000000000000 --- a/code/modules/clothing/under/accessories/pronouns.dm +++ /dev/null @@ -1,47 +0,0 @@ -/obj/item/clothing/accessory/pronouns - abstract_type = /obj/item/clothing/accessory/pronouns - name = "base pronouns badge" - icon_state = "pronounpin" - item_state = "pronouns" - on_rolled = list("down" = "none") - slot = ACCESSORY_SLOT_INSIGNIA - accessory_flags = ACCESSORY_REMOVABLE | ACCESSORY_HIGH_VISIBILITY - - -/obj/item/clothing/accessory/pronouns/they - name = "they/them pronouns badge" - desc = "A badge showing the wearer's pronouns: they, them and theirs." - - -/obj/item/clothing/accessory/pronouns/hehim - name = "he/him pronouns badge" - desc = "A badge showing the wearer's pronouns: he, him and his." - - -/obj/item/clothing/accessory/pronouns/sheher - name = "she/her pronouns badge" - desc = "A badge showing the wearer's pronouns: she, her and hers." - - -/obj/item/clothing/accessory/pronouns/hethey - name = "he/they pronouns badge" - desc = "A badge showing the wearer's pronouns: he, him and his or they, them and theirs." - - -/obj/item/clothing/accessory/pronouns/shethey - name = "she/they pronouns badge" - desc = "A badge showing the wearer's pronouns: she, her and hers or they, them and theirs." - -/obj/item/clothing/accessory/pronouns/heshe - name = "he/she pronouns badge" - desc = "A badge showing the wearer's pronouns: he, him and his or she, her and hers." - - -/obj/item/clothing/accessory/pronouns/zehir - name = "ze/hir pronouns badge" - desc = "A badge showing the wearer's pronouns: ze, hir and hirs." - - -/obj/item/clothing/accessory/pronouns/ask - name = "ask my pronouns badge" - desc = "A badge asking others to ask for the wearer's pronouns." diff --git a/code/modules/clothing/under/accessories/qipao.dm b/code/modules/clothing/under/accessories/qipao.dm deleted file mode 100644 index 9acf31545f360..0000000000000 --- a/code/modules/clothing/under/accessories/qipao.dm +++ /dev/null @@ -1,4 +0,0 @@ -/obj/item/clothing/accessory/qipao - name = "qipao" - desc = "A tight-fitting blouse with intricate designs of flowers embroidered on it." - icon_state = "qipao" diff --git a/code/modules/clothing/under/accessories/scarf.dm b/code/modules/clothing/under/accessories/scarf.dm deleted file mode 100644 index 1a745a24a8eab..0000000000000 --- a/code/modules/clothing/under/accessories/scarf.dm +++ /dev/null @@ -1,4 +0,0 @@ -/obj/item/clothing/accessory/scarf - name = "scarf" - desc = "A stylish scarf. The perfect winter accessory for those with a keen fashion sense, and those who just can't handle a cold breeze on their necks." - icon_state = "whitescarf" diff --git a/code/modules/clothing/under/accessories/sherwani.dm b/code/modules/clothing/under/accessories/sherwani.dm deleted file mode 100644 index 88bf72036e085..0000000000000 --- a/code/modules/clothing/under/accessories/sherwani.dm +++ /dev/null @@ -1,5 +0,0 @@ -/obj/item/clothing/accessory/sherwani - name = "sherwani" - desc = "A long, coat-like frock with fancy embroidery on the cuffs and collar." - icon_state = "sherwani" - body_location = UPPER_TORSO | LOWER_TORSO diff --git a/code/modules/clothing/under/accessories/stethoscope.dm b/code/modules/clothing/under/accessories/stethoscope.dm deleted file mode 100644 index 74f0b97a32011..0000000000000 --- a/code/modules/clothing/under/accessories/stethoscope.dm +++ /dev/null @@ -1,20 +0,0 @@ -/obj/item/clothing/accessory/stethoscope - name = "stethoscope" - desc = "An outdated medical apparatus for listening to the sounds of the human body. It also makes you look like you know what you're doing." - icon_state = "stethoscope" - accessory_flags = ACCESSORY_REMOVABLE | ACCESSORY_HIGH_VISIBILITY - - -/obj/item/clothing/accessory/stethoscope/attack(mob/living/target, mob/living/user) - if (!ishuman(target) || !istype(user)) - return - if (user.a_intent != I_HELP) - return ..(target, user) - var/mob/living/carbon/human/H = target - var/obj/item/organ/organ = H.get_organ(user.zone_sel.selecting) - if (!organ) - return - user.visible_message( - SPAN_ITALIC("\The [user] places \the [src] against \the [target]'s [organ.name]."), - SPAN_NOTICE("You place \the [src] against \the [target]'s [organ.name]. You head [english_list(organ.listen())].") - ) diff --git a/code/modules/clothing/under/accessories/storage.dm b/code/modules/clothing/under/accessories/storage.dm deleted file mode 100644 index 4d19b004cd939..0000000000000 --- a/code/modules/clothing/under/accessories/storage.dm +++ /dev/null @@ -1,202 +0,0 @@ -/obj/item/clothing/accessory/storage - abstract_type = /obj/item/clothing/accessory/storage - name = "base storage accessory" - icon_state = "webbing" - slot = ACCESSORY_SLOT_UTILITY - w_class = ITEM_SIZE_NORMAL - accessory_flags = ACCESSORY_REMOVABLE | ACCESSORY_HIGH_VISIBILITY - on_rolled = list("down" = "none") - - var/obj/item/storage/internal/container - var/max_w_class = ITEM_SIZE_SMALL - var/slots - - -/obj/item/clothing/accessory/storage/Initialize() - . = ..() - if (. == INITIALIZE_HINT_QDEL) - return - if (!slots) - . = INITIALIZE_HINT_QDEL - crash_with("[type] created with no slots") - if (slots < 0) - container = new /obj/item/storage/internal/pouch (src, (-slots) * BASE_STORAGE_COST(max_w_class)) - else - container = new /obj/item/storage/internal/pockets (src, slots, max_w_class) - - -/obj/item/clothing/accessory/storage/attack_hand(mob/user) - if (container) - if (parent) - container.open(user) - else if (container.handle_attack_hand(user)) - ..(user) - - -/obj/item/clothing/accessory/storage/MouseDrop(obj/over_object) - if (!parent && container?.handle_mousedrop(usr, over_object)) - ..(over_object) - - -/obj/item/clothing/accessory/storage/attackby(obj/item/I, mob/user) - if (container) - return container.attackby(I, user) - - -/obj/item/clothing/accessory/storage/emp_act(severity) - if (container) - container.emp_act(severity) - ..() - - -/obj/item/clothing/accessory/storage/attack_self(mob/user) - add_fingerprint(user) - if (!container) - return - container.hide_from(user) - var/count = 0 - var/turf/T = get_turf(src) - for (var/obj/item/I in container) - container.remove_from_storage(I, T, TRUE) - ++count - if (!count) - to_chat(user, "\The [src] is empty.") - return - container.finish_bulk_removal() - visible_message("\The [user] empties \the [src].", range = 5) - - -/obj/item/clothing/accessory/storage/pockets - name = "pockets" - desc = "A bag-like receptacle fastened to an article of clothing to hold small items." - icon_state = "" - slots = 2 STORAGE_FREEFORM - accessory_flags = ACCESSORY_HIGH_VISIBILITY | ACCESSORY_HIDDEN - - -/obj/item/clothing/accessory/storage/webbing - name = "webbing" - desc = "A sturdy mess of straps and buckles you can clip things to." - icon_state = "webbing" - slots = 3 STORAGE_SLOTS - body_location = UPPER_TORSO - - -/obj/item/clothing/accessory/storage/webbing_large - name = "large webbing" - desc = "A sturdy mess of straps and buckles with small pockets and pouches." - icon_state = "webbing_large" - slots = 4 STORAGE_FREEFORM - body_location = UPPER_TORSO - - -/obj/item/clothing/accessory/storage/black_vest - name = "black webbing vest" - desc = "A robust black vest with lots of small pockets and pouches." - icon_state = "vest_black" - slots = 5 STORAGE_FREEFORM - body_location = UPPER_TORSO - - -/obj/item/clothing/accessory/storage/brown_vest - name = "brown webbing vest" - desc = "A sturdy brown vest with lots of small pockets and pouches." - icon_state = "vest_brown" - slots = 5 STORAGE_FREEFORM - body_location = UPPER_TORSO - - -/obj/item/clothing/accessory/storage/white_vest - name = "white webbing vest" - desc = "A stoic white vest with lots of small pockets and pouches." - icon_state = "vest_white" - slots = 5 STORAGE_FREEFORM - body_location = UPPER_TORSO - - -/obj/item/clothing/accessory/storage/black_drop - name = "black drop bag" - desc = "A robust black leg bag with plenty of room inside." - icon_state = "thigh_black" - slots = 5 STORAGE_FREEFORM - body_location = LEGS - - -/obj/item/clothing/accessory/storage/brown_drop - name = "brown drop bag" - desc = "A sturdy brown leg bag with plenty of room inside." - icon_state = "thigh_brown" - slots = 5 STORAGE_FREEFORM - body_location = LEGS - - -/obj/item/clothing/accessory/storage/white_drop - name = "white drop bag" - desc = "A stoic white leg bag with plenty of room inside." - icon_state = "thigh_white" - slots = 5 STORAGE_FREEFORM - body_location = LEGS - - -/obj/item/clothing/accessory/storage/knifeharness - name = "decorated harness" - desc = "A heavily decorated harness of sinew and leather with two knife loops." - icon_state = "unathiharness2" - slots = 2 STORAGE_SLOTS - max_w_class = ITEM_SIZE_NORMAL - - -/obj/item/clothing/accessory/storage/knifeharness/Initialize() - . = ..() - if (container) - container.can_hold = list( - /obj/item/material/hatchet, - /obj/item/material/knife - ) - for (var/i = 1 to abs(slots)) - new /obj/item/material/knife/unathi (container) - - -/obj/item/clothing/accessory/storage/bandolier - name = "bandolier" - desc = "A lightweight bandolier with straps for holding ammunition or other small objects." - icon_state = "bandolier" - slots = 10 STORAGE_SLOTS - max_w_class = ITEM_SIZE_NORMAL - - -/obj/item/clothing/accessory/storage/bandolier/Initialize() - . = ..() - if (container) - container.can_hold = list( - /obj/item/ammo_casing, - /obj/item/grenade, - /obj/item/material/knife, - /obj/item/material/star, - /obj/item/rcd_ammo, - /obj/item/reagent_containers/syringe, - /obj/item/reagent_containers/hypospray, - /obj/item/reagent_containers/hypospray/autoinjector, - /obj/item/syringe_cartridge, - /obj/item/plastique, - /obj/item/clothing/mask/smokable, - /obj/item/screwdriver, - /obj/item/device/multitool, - /obj/item/magnetic_ammo, - /obj/item/ammo_magazine, - /obj/item/net_shell, - /obj/item/reagent_containers/glass/beaker/vial, - /obj/item/paper, - /obj/item/pen, - /obj/item/photo, - /obj/item/marshalling_wand, - /obj/item/reagent_containers/pill, - /obj/item/storage/pill_bottle - ) - - -/obj/item/clothing/accessory/storage/bandolier/safari/Initialize() - . = ..() - if (container) - for(var/i = 1 to abs(slots)) - new /obj/item/net_shell (container) diff --git a/code/modules/clothing/under/accessories/suit_jacket.dm b/code/modules/clothing/under/accessories/suit_jacket.dm deleted file mode 100644 index b320a71d9a5c3..0000000000000 --- a/code/modules/clothing/under/accessories/suit_jacket.dm +++ /dev/null @@ -1,33 +0,0 @@ -/obj/item/clothing/accessory/toggleable/burgundy_jacket - name = "burgundy suit jacket" - desc = "Expensive suit jacket." - icon_state = "burgundy_jacket" - - -/obj/item/clothing/accessory/toggleable/charcoal_jacket - name = "charcoal suit jacket" - desc = "Strict suit jacket." - icon_state = "charcoal_jacket" - - -/obj/item/clothing/accessory/toggleable/checkered_jacket - name = "checkered suit jacket" - desc = "Lucky suit jacket." - icon_state = "checkered_jacket" - - -/obj/item/clothing/accessory/toggleable/navy_jacket - name = "navy suit jacket" - desc = "Official suit jacket." - icon_state = "navy_jacket" - - -/obj/item/clothing/accessory/toggleable/tan_jacket - name = "tan suit jacket" - desc = "Cozy suit jacket." - icon_state = "tan_jacket" - - -/obj/item/clothing/accessory/toggleable/tan_jacket/Initialize() - . = ..() - do_toggle() diff --git a/code/modules/clothing/under/accessories/suit_vest.dm b/code/modules/clothing/under/accessories/suit_vest.dm deleted file mode 100644 index 1427d21db1a62..0000000000000 --- a/code/modules/clothing/under/accessories/suit_vest.dm +++ /dev/null @@ -1,9 +0,0 @@ -/obj/item/clothing/accessory/toggleable/suit_vest - name = "vest" - desc = "A slick suit vest." - icon_state = "vest" - - -/obj/item/clothing/accessory/toggleable/suit_vest/black - name = "black vest" - color = COLOR_GRAY15 diff --git a/code/modules/clothing/under/accessories/suspenders.dm b/code/modules/clothing/under/accessories/suspenders.dm deleted file mode 100644 index 2d1a714b786c4..0000000000000 --- a/code/modules/clothing/under/accessories/suspenders.dm +++ /dev/null @@ -1,10 +0,0 @@ -/obj/item/clothing/accessory/suspenders - name = "suspenders" - desc = "They suspend the illusion of the mime's play." - icon_state = "suspenders" - - -/obj/item/clothing/accessory/suspenders/colorable - name = "suspenders" - desc = "They suspend the illusion of the mime's play." - icon_state = "suspenders_color" diff --git a/code/modules/clothing/under/accessories/sweater.dm b/code/modules/clothing/under/accessories/sweater.dm deleted file mode 100644 index 4f891b9edf612..0000000000000 --- a/code/modules/clothing/under/accessories/sweater.dm +++ /dev/null @@ -1,4 +0,0 @@ -/obj/item/clothing/accessory/sweater - name = "turtleneck sweater" - desc = "A stylish sweater to keep you warm on those cold days." - icon_state = "sweater" diff --git a/code/modules/clothing/under/accessories/tangzhuang.dm b/code/modules/clothing/under/accessories/tangzhuang.dm deleted file mode 100644 index 2160d3c3a453a..0000000000000 --- a/code/modules/clothing/under/accessories/tangzhuang.dm +++ /dev/null @@ -1,5 +0,0 @@ -/obj/item/clothing/accessory/tangzhuang - name = "tangzhuang jacket" - desc = "A traditional Chinese coat tied together with straight, symmetrical knots." - icon_state = "tangzhuang" - body_location = UPPER_TORSO | LOWER_TORSO diff --git a/code/modules/clothing/under/accessories/thawb.dm b/code/modules/clothing/under/accessories/thawb.dm deleted file mode 100644 index a96d025238327..0000000000000 --- a/code/modules/clothing/under/accessories/thawb.dm +++ /dev/null @@ -1,4 +0,0 @@ -/obj/item/clothing/accessory/thawb - name = "thawb" - desc = "A white, ankle-length robe designed to be cool in hot climates." - icon_state = "thawb" diff --git a/code/modules/clothing/under/accessories/ties.dm b/code/modules/clothing/under/accessories/ties.dm deleted file mode 100644 index 9516a462a52ed..0000000000000 --- a/code/modules/clothing/under/accessories/ties.dm +++ /dev/null @@ -1,75 +0,0 @@ -/obj/item/clothing/accessory/long - icon_state = "longtie" - - -/obj/item/clothing/accessory/blue - name = "blue tie" - color = "#123c5a" - - -/obj/item/clothing/accessory/red - name = "red tie" - color = "#800000" - - -/obj/item/clothing/accessory/blue_clip - name = "blue tie with a clip" - icon_state = "bluecliptie" - - -/obj/item/clothing/accessory/red_long - name = "red long tie" - icon_state = "longtie" - color = "#a02929" - - -/obj/item/clothing/accessory/black - name = "black tie" - color = "#1e1e1e" - - -/obj/item/clothing/accessory/yellow - name = "yellow tie" - icon_state = "longtie" - color = "#c4c83d" - - -/obj/item/clothing/accessory/navy - name = "navy tie" - color = "#182e44" - - -/obj/item/clothing/accessory/horrible - name = "horrible tie" - desc = "A neosilk clip-on tie. This one is disgusting." - icon_state = "horribletie" - - -/obj/item/clothing/accessory/brown - name = "brown tie" - icon_state = "longtie" - color = "#b18345" - - -/obj/item/clothing/accessory/corptie - name = "corporate tie" - desc = "A green neosilk clip-on tie. This one has a clip on it that proudly bears a corporate logo." - icon_state = "cliptie" - - -/obj/item/clothing/accessory/corptie/nanotrasen - name = "\improper NanoTrasen tie" - desc = "A red neosilk clip-on tie. This one has a clip on it that proudly bears the NanoTrasen logo." - icon_state = "cliptie_nt" - - -/obj/item/clothing/accessory/corptie/heph - name = "\improper Hephaestus Industries tie" - desc = "A cyan neosilk clip-on tie. This one has a clip on it that proudly bears the Hephaestus Industries logo." - icon_state = "cliptie_heph" - - -/obj/item/clothing/accessory/corptie/zeng - name = "\improper Zeng-Hu tie" - desc = "A gold neosilk clip-on tie. This one has a clip on it that proudly bears the Zeng-Hu Pharmaceuticals logo." - icon_state = "cliptie_zeng" diff --git a/code/modules/clothing/under/accessories/tunic.dm b/code/modules/clothing/under/accessories/tunic.dm deleted file mode 100644 index fb251fd1c3add..0000000000000 --- a/code/modules/clothing/under/accessories/tunic.dm +++ /dev/null @@ -1,45 +0,0 @@ -/obj/item/clothing/accessory/tunic - name = "researcher's tunic" - desc = "A fashionable tunic that EXO provides to their lab workers." - icon_state = "tunic" - - -/obj/item/clothing/accessory/tunic/nanotrasen - name = "\improper NanoTrasen tunic" - desc = "A fashionable tunic that NanoTrasen provides to their lab workers." - icon_state = "tunic_nt" - - -/obj/item/clothing/accessory/tunic/heph - name = "\improper Hephaestus Industries tunic" - desc = "A fashionable tunic that Hephaestus Industries provides to their lab workers." - icon_state = "tunic_heph" - - -/obj/item/clothing/accessory/tunic/zeng - name = "\improper Zeng-Hu tunic" - desc = "A fashionable tunic that Zeng-Hu provides to their lab workers." - icon_state = "tunic_heph" - - -/obj/item/clothing/accessory/tunic/exec - name = "executive tunic" - icon_state = "tunicblack" - - -/obj/item/clothing/accessory/tunic/exec/nanotrasen - name = "\improper NanoTrasen executive tunic" - desc = "A fashionable tunic that NanoTrasen provides to their lab workers." - icon_state = "tunicblack_nt" - - -/obj/item/clothing/accessory/tunic/exec/heph - name = "\improper Hephaestus Industries executive tunic" - desc = "A fashionable tunic that Hephaestus Industries provides to their lab workers." - icon_state = "tunicblack_heph" - - -/obj/item/clothing/accessory/tunic/exec/zeng - name = "\improper Zeng-Hu executive tunic" - desc = "A fashionable tunic that Zeng-Hu provides to their lab workers." - icon_state = "tunicblack_zeng" diff --git a/code/modules/clothing/under/accessories/ubac.dm b/code/modules/clothing/under/accessories/ubac.dm deleted file mode 100644 index 9f504990adcdb..0000000000000 --- a/code/modules/clothing/under/accessories/ubac.dm +++ /dev/null @@ -1,22 +0,0 @@ -/obj/item/clothing/accessory/ubac - name = "black ubac" - desc = "A flexible, close-fitting shirt with camouflage sleeves designed to be worn under combat equipment. This one is black." - icon_state = "ubacblack" - - -/obj/item/clothing/accessory/ubac/blue - name = "blue ubac" - desc = "A flexible, close-fitting shirt with camouflage sleeves designed to be worn under combat equipment. This one is blue." - icon_state = "ubacblue" - - -/obj/item/clothing/accessory/ubac/tan - name = "tan ubac" - desc = "A flexible, close-fitting shirt with camouflage sleeves designed to be worn under combat equipment. This one is tan." - icon_state = "ubactan" - - -/obj/item/clothing/accessory/ubac/green - name = "green ubac" - desc = "A flexible, close-fitting shirt with camouflage sleeves designed to be worn under combat equipment. This one is green." - icon_state = "ubacgreen" diff --git a/code/modules/clothing/under/accessories/waistcoat.dm b/code/modules/clothing/under/accessories/waistcoat.dm deleted file mode 100644 index 80921de1ca6ea..0000000000000 --- a/code/modules/clothing/under/accessories/waistcoat.dm +++ /dev/null @@ -1,9 +0,0 @@ -/obj/item/clothing/accessory/waistcoat - name = "waistcoat" - desc = "A classy waistcoat." - icon_state = "vest" - item_state = "wcoat" - - -/obj/item/clothing/accessory/waistcoat/black - color = COLOR_GRAY15 diff --git a/code/modules/clothing/under/accessories/wristwatches.dm b/code/modules/clothing/under/accessories/wristwatches.dm deleted file mode 100644 index 8bc4ae2618418..0000000000000 --- a/code/modules/clothing/under/accessories/wristwatches.dm +++ /dev/null @@ -1,17 +0,0 @@ -/obj/item/clothing/accessory/wristwatches - name = "black wrist watch" - desc = "A simple time keeping device. Its nylon strap fits snugly on the wrist." - icon_state = "wristwatch_black" - body_location = HANDS - - -/obj/item/clothing/accessory/wristwatches/leather - name = "leather wrist watch" - desc = "A simple time keeping device. Its leather strap is quite fashionable." - icon_state = "wristwatch_leather" - - -/obj/item/clothing/accessory/wristwatches/fancy - name = "fancy wrist watch" - desc = "A simple time keeping device. It probably cost more than your education." - icon_state = "wristwatch_fancy" diff --git a/code/modules/clothing/under/accessories/zhongshan.dm b/code/modules/clothing/under/accessories/zhongshan.dm deleted file mode 100644 index 050f93449d416..0000000000000 --- a/code/modules/clothing/under/accessories/zhongshan.dm +++ /dev/null @@ -1,4 +0,0 @@ -/obj/item/clothing/accessory/toggleable/zhongshan - name = "zhongshan suit jacket" - desc = "A stylish Chinese tunic suit jacket." - icon_state = "zhongshan" diff --git a/code/modules/clothing/under/casual_pants.dm b/code/modules/clothing/under/casual_pants.dm deleted file mode 100644 index edec0d92d7647..0000000000000 --- a/code/modules/clothing/under/casual_pants.dm +++ /dev/null @@ -1,105 +0,0 @@ -//Casual pants - new pants of this type go in pants.dmi - -/obj/item/clothing/under/casual_pants - name = "jeans" - desc = "A nondescript pair of tough blue jeans." - icon_state = "jeans" - gender = PLURAL - body_parts_covered = LOWER_TORSO|LEGS - item_icons = list(slot_w_uniform_str = 'icons/mob/onmob/onmob_under_pants.dmi') - sprite_sheets = list( - SPECIES_UNATHI = 'icons/mob/species/unathi/generated/onmob_under_pants_unathi.dmi', - ) - -/obj/item/clothing/under/casual_pants/classicjeans - name = "classic jeans" - desc = "You feel cooler already." - icon_state = "jeansclassic" - -/obj/item/clothing/under/casual_pants/mustangjeans - name = "must hang jeans" - desc = "Made in the finest space jeans factory this side of Alpha Centauri." - icon_state = "jeansmustang" - -/obj/item/clothing/under/casual_pants/blackjeans - name = "black jeans" - desc = "Only for those who can pull it off." - icon_state = "jeansblack" - -/obj/item/clothing/under/casual_pants/greyjeans - name = "grey jeans" - desc = "Only for those who can pull it off." - icon_state = "jeansgrey" - -/obj/item/clothing/under/casual_pants/youngfolksjeans - name = "young folks jeans" - desc = "For those tired of boring old jeans. Relive the passion of your youth!" - icon_state = "jeansyoungfolks" - -/obj/item/clothing/under/casual_pants/track - name = "track pants" - desc = "A pair of track pants, for the athletic." - icon_state = "trackpants" - -/obj/item/clothing/under/casual_pants/track/blue - name = "blue track pants" - icon_state = "trackpantsblue" - -/obj/item/clothing/under/casual_pants/track/green - name = "green track pants" - icon_state = "trackpantsgreen" - -/obj/item/clothing/under/casual_pants/track/white - name = "white track pants" - icon_state = "trackpantswhite" - -/obj/item/clothing/under/casual_pants/track/red - name = "red track pants" - icon_state = "trackpantsred" - -/obj/item/clothing/under/casual_pants/camo - name = "camo pants" - desc = "A pair of woodland camouflage pants. Probably not the best choice for space." - icon_state = "camopants" - -//Baggy Pants// - -/obj/item/clothing/under/casual_pants/baggy - name = "baggy jeans" - desc = "A nondescript pair of tough baggy blue jeans." - icon_state = "baggy_jeans" - -/obj/item/clothing/under/casual_pants/baggy/classicjeans - name = "baggy classic jeans" - desc = "You feel cooler already." - icon_state = "baggy_jeansclassic" - -/obj/item/clothing/under/casual_pants/baggy/mustangjeans - name = "maggy must hang jeans" - desc = "Made in the finest space jeans factory this side of Alpha Centauri." - icon_state = "baggy_jeansmustang" - -/obj/item/clothing/under/casual_pants/baggy/blackjeans - name = "baggy black jeans" - desc = "Only for those who can pull it off." - icon_state = "baggy_jeansblack" - -/obj/item/clothing/under/casual_pants/baggy/greyjeans - name = "baggy grey jeans" - desc = "Only for those who can pull it off." - icon_state = "baggy_jeansgrey" - -/obj/item/clothing/under/casual_pants/baggy/youngfolksjeans - name = "baggy young folks jeans" - desc = "For those tired of boring old jeans. Relive the passion of your youth!" - icon_state = "baggy_jeansyoungfolks" - -/obj/item/clothing/under/casual_pants/baggy/track - name = "baggy track pants" - desc = "A pair of track pants, for the athletic." - icon_state = "baggy_trackpants" - -/obj/item/clothing/under/casual_pants/baggy/camo - name = "baggy camo pants" - desc = "A pair of woodland camouflage pants. Probably not the best choice for space." - icon_state = "baggy_camopants" diff --git a/code/modules/clothing/under/color.dm b/code/modules/clothing/under/color.dm deleted file mode 100644 index cded3838bff99..0000000000000 --- a/code/modules/clothing/under/color.dm +++ /dev/null @@ -1,77 +0,0 @@ -// items not part of the colour changing system - -/obj/item/clothing/under/psyche - name = "psychedelic jumpsuit" - desc = "Groovy!" - icon_state = "psyche" - item_state = "psyche" - worn_state = "psyche" - -/obj/item/clothing/under/color/orange - name = "orange jumpsuit" - desc = "It's standardised prisoner-wear. Its suit sensor controls are permanently set to the \"Fully On\" position." - icon_state = "orange" - item_state = "o_suit" - worn_state = "orange" - gender_icons = 1 - has_sensor = 2 - sensor_mode = SUIT_SENSOR_TRACKING - -/obj/item/clothing/under/color/blackjumpshorts - name = "black jumpsuit shorts" - desc = "The latest in space fashion, in a ladies' cut with shorts." - icon_state = "black" - item_state = "bl_suit" - worn_state = "blackshortsf" - -// coloured jumpsuits, male pattern - -/obj/item/clothing/under/color - name = "jumpsuit" - desc = "The latest in space fashion." - icon_state = "jumpsuit" - item_state = "jumpsuit" - worn_state = "jumpsuit" - gender_icons = 1 - -// legacy colours - these are used somewhere in the game, but aren't available in the loadout - -/obj/item/clothing/under/color/white - name = "white jumpsuit" - color = "#ffffff" - -/obj/item/clothing/under/color/black - name = "black jumpsuit" - color = "#3d3d3d" - -/obj/item/clothing/under/color/grey - name = "grey jumpsuit" - color = "#c4c4c4" - -/obj/item/clothing/under/color/blue - name = "blue jumpsuit" - color = "#0066ff" - -/obj/item/clothing/under/color/pink - name = "pink jumpsuit" - color = "#df20a6" - -/obj/item/clothing/under/color/red - name = "red jumpsuit" - color = "#ee1511" - -/obj/item/clothing/under/color/green - name = "green jumpsuit" - color = "#42a345" - -/obj/item/clothing/under/color/yellow - name = "yellow jumpsuit" - color = "#ffee00" - -/obj/item/clothing/under/color/lightpurple - name = "light purple jumpsuit" - color = "#c600fc" - -/obj/item/clothing/under/color/brown - name = "brown jumpsuit" - color = "#c08720" diff --git a/code/modules/clothing/under/corporate.dm b/code/modules/clothing/under/corporate.dm deleted file mode 100644 index f70098f97a714..0000000000000 --- a/code/modules/clothing/under/corporate.dm +++ /dev/null @@ -1,200 +0,0 @@ -//TORCH CORPORATE UNIFORMS - DO NOT ADD NEW UNIFORMS TO UNIFORM.DMI - TORCH CORPORATE UNIFORMS GO IN CORPORATE.DMI - -//EXO -/obj/item/clothing/under/rank/guard - name = "green security guard uniform" - desc = "A durable uniform worn by Expeditionary Corps Organisation security." - icon_state = "guard" - item_state = "w_suit" - worn_state = "guard" - armor = list( - melee = ARMOR_MELEE_SMALL - ) - siemens_coefficient = 0.9 - item_icons = list(slot_w_uniform_str = 'icons/mob/onmob/onmob_under_corporate.dmi') - gender_icons = 1 - sprite_sheets = list( - SPECIES_UNATHI = 'icons/mob/species/unathi/generated/onmob_under_corporate_unathi.dmi', - ) - -/obj/item/clothing/under/rank/guard/research_guard - accessories = list(/obj/item/clothing/accessory/corptie) - -/obj/item/clothing/under/rank/scientist - name = "\improper EXO polo and pants" - desc = "A fashionable polo and pair of trousers made from patented biohazard-resistant synthetic fabrics." - icon_state = "smock" - item_state = "w_suit" - worn_state = "smock" - permeability_coefficient = 0.50 - armor = list( - bio = ARMOR_BIO_MINOR - ) - item_icons = list(slot_w_uniform_str = 'icons/mob/onmob/onmob_under_corporate.dmi') - gender_icons = 1 - sprite_sheets = list( - SPECIES_UNATHI = 'icons/mob/species/unathi/generated/onmob_under_corporate_unathi.dmi', - ) - accessories = list(/obj/item/clothing/accessory/tunic) - -/obj/item/clothing/under/rank/scientist/executive - name = "\improper EXO polo and pants" - desc = "A fashionable polo and pair of trousers made from expensive biohazard-resistant fabrics. The colors denote the wearer as a Expeditionary Corps Organisation higher-up." - icon_state = "smockexec" - worn_state = "smockexec" - accessories = list(/obj/item/clothing/accessory/tunic/exec) - -/obj/item/clothing/under/rank/ntwork - name = "beige and green coveralls" - desc = "A pair of beige coveralls made of a strong, canvas-like fabric." - icon_state = "work" - item_state = "lb_suit" - worn_state = "work" - armor = list( - melee = ARMOR_MELEE_MINOR, - bio = ARMOR_BIO_MINOR - ) - item_icons = list(slot_w_uniform_str = 'icons/mob/onmob/onmob_under_corporate.dmi') - gender_icons = 1 - sprite_sheets = list( - SPECIES_UNATHI = 'icons/mob/species/unathi/generated/onmob_under_corporate_unathi.dmi', - ) - -/obj/item/clothing/under/rank/ntpilot - name = "green flight suit" - desc = "A sleek green Expeditionary Corps Organisation flight suit. It proudly sports three different patches with corporate logos on them, as well as several unnecessary looking flaps and pockets for effect." - icon_state = "pilot" - item_state = "g_suit" - worn_state = "pilot" - item_icons = list(slot_w_uniform_str = 'icons/mob/onmob/onmob_under_corporate.dmi') - gender_icons = 1 - sprite_sheets = list( - SPECIES_UNATHI = 'icons/mob/species/unathi/generated/onmob_under_corporate_unathi.dmi', - ) - -/obj/item/clothing/under/suit_jacket/corp - name = "\improper EXO executive suit" - desc = "A set of Expeditionary Corps Organisation-issued suit pants and shirt that particularly enthusiastic company executives tend to wear." - icon_state = "suit" - item_state = "bl_suit" - worn_state = "suit" - accessories = list(/obj/item/clothing/accessory/toggleable/corpjacket, /obj/item/clothing/accessory/corptie) - item_icons = list(slot_w_uniform_str = 'icons/mob/onmob/onmob_under_corporate.dmi') - gender_icons = 1 - sprite_sheets = list( - SPECIES_UNATHI = 'icons/mob/species/unathi/generated/onmob_under_corporate_unathi.dmi', - ) - -//NanoTrasen -/obj/item/clothing/under/rank/guard/nanotrasen - name = "red security guard uniform" - desc = "A durable uniform worn by subcontracted NanoTrasen security." - icon_state = "guard_nt" - worn_state = "guard_nt" - -/obj/item/clothing/under/rank/scientist/nanotrasen - name = "\improper NanoTrasen polo and pants" - desc = "A fashionable polo and pair of trousers belonging to NanoTrasen, a megacorporation primarily concerned with the research of new and dangerous technologies." - icon_state = "smock_nt" - worn_state = "smock_nt" - accessories = list(/obj/item/clothing/accessory/tunic/nanotrasen) - -/obj/item/clothing/under/rank/scientist/executive/nanotrasen - name = "\improper NanoTrasen polo and pants" - desc = "A fashionable polo and pair of trousers made from expensive biohazard-resistant fabrics. The colors denote the wearer as a NanoTrasen higher-up." - icon_state = "smockexec_nt" - worn_state = "smockexec_nt" - accessories = list(/obj/item/clothing/accessory/tunic/exec/nanotrasen) - -/obj/item/clothing/under/rank/ntwork/nanotrasen - name = "beige and red coveralls" - icon_state = "work_nt" - worn_state = "work_nt" - -/obj/item/clothing/under/rank/ntpilot/nanotrasen - name = "red flight suit" - desc = "A sleek red NanoTrasen flight suit. It proudly sports three different patches with corporate logos on them, as well as several unnecessary looking flaps and pockets for effect." - icon_state = "pilot_nt" - item_state = "r_suit" - worn_state = "pilot_nt" - item_icons = list(slot_w_uniform_str = 'icons/mob/onmob/onmob_under_corporate.dmi') - sprite_sheets = list( - SPECIES_UNATHI = 'icons/mob/species/unathi/generated/onmob_under_corporate_unathi.dmi', - ) - -/obj/item/clothing/under/suit_jacket/corp/nanotrasen - name = "\improper NanoTrasen executive suit" - desc = "A set of NanoTrasen-issued suit pants and shirt that particularly enthusiastic company executives tend to wear." - icon_state = "suit_nt" - worn_state = "suit_nt" - accessories = list(/obj/item/clothing/accessory/toggleable/corpjacket/nanotrasen, /obj/item/clothing/accessory/corptie/nanotrasen) - -//Heph. Industries -/obj/item/clothing/under/rank/guard/heph - name = "cyan security guard uniform" - desc = "A durable uniform worn by subcontracted Hephaestus Industries security." - icon_state = "guard_heph" - worn_state = "guard_heph" - -/obj/item/clothing/under/rank/scientist/heph - name = "\improper Hephaestus polo and pants" - desc = "A fashionable polo and pair of trousers belonging to Hephaestus Industries, a megacorporation primarily concerned with the research and production of weapon systems." - icon_state = "smock_heph" - worn_state = "smock_heph" - accessories = list(/obj/item/clothing/accessory/tunic/heph) - -/obj/item/clothing/under/rank/scientist/executive/heph - name = "\improper Hephaestus polo and pants" - desc = "A fashionable polo and pair of trousers made from expensive biohazard-resistant fabrics. The colors denote the wearer as a Hephaestus Industries higher-up." - icon_state = "smockexec_heph" - worn_state = "smockexec_heph" - accessories = list(/obj/item/clothing/accessory/tunic/exec/heph) - -/obj/item/clothing/under/rank/ntwork/heph - name = "grey and cyan coveralls" - icon_state = "work_heph" - worn_state = "work_heph" - -/obj/item/clothing/under/rank/ntpilot/heph - name = "cyan flight suit" - desc = "A sleek cyan Hephaestus Industries flight suit. It proudly sports three different patches with corporate logos on them, as well as several unnecessary looking flaps and pockets for effect." - icon_state = "pilot_heph" - worn_state = "pilot_heph" - item_icons = list(slot_w_uniform_str = 'icons/mob/onmob/onmob_under_corporate.dmi') - sprite_sheets = list( - SPECIES_UNATHI = 'icons/mob/species/unathi/generated/onmob_under_corporate_unathi.dmi', - ) - -/obj/item/clothing/under/suit_jacket/corp/heph - name = "\improper Hephaestus executive suit" - desc = "A set of Hephaestus Industries-issued suit pants and shirt that particularly enthusiastic company executives tend to wear." - icon_state = "suit_heph" - worn_state = "suit_heph" - accessories = list(/obj/item/clothing/accessory/toggleable/corpjacket/heph, /obj/item/clothing/accessory/corptie/heph) - -//Zeng-Hu -/obj/item/clothing/under/rank/scientist/zeng - name = "\improper Zeng-Hu polo and pants" - desc = "A fashionable polo and pair of trousers belonging to Zeng-Hu Pharmaceuticals, a megacorporation primarily concerned with the research and production of medical equipment and pharmaceuticals." - icon_state = "smock_zeng" - worn_state = "smock_zeng" - accessories = list(/obj/item/clothing/accessory/tunic/zeng) - -/obj/item/clothing/under/rank/scientist/executive/zeng - name = "\improper Zeng-Hu polo and pants" - desc = "A fashionable polo and pair of trousers made from expensive biohazard-resistant fabrics. The colors denote the wearer as a Zeng-Hu Pharmaceuticals higher-up." - icon_state = "smockexec_zeng" - worn_state = "smockexec_zeng" - accessories = list(/obj/item/clothing/accessory/tunic/exec/zeng) - -/obj/item/clothing/under/rank/ntwork/zeng - name = "beige and gold coveralls" - icon_state = "work_zeng" - worn_state = "work_zeng" - -/obj/item/clothing/under/suit_jacket/corp/zeng - name = "\improper Zeng-Hu executive suit" - desc = "A set of Zeng-Hu Pharmaceuticals-issued suit pants and shirt that particularly enthusiastic company executives tend to wear." - icon_state = "suit_zeng" - worn_state = "suit_zeng" - accessories = list(/obj/item/clothing/accessory/toggleable/corpjacket/zeng, /obj/item/clothing/accessory/corptie/zeng) diff --git a/code/modules/clothing/under/formal_pants.dm b/code/modules/clothing/under/formal_pants.dm deleted file mode 100644 index bac46b423ff00..0000000000000 --- a/code/modules/clothing/under/formal_pants.dm +++ /dev/null @@ -1,80 +0,0 @@ -//Formal pants - new pants of this type go in pants.dmi - -/obj/item/clothing/under/formal_pants - name = "suit pants" - desc = "Plain suit pants." - icon_state = "pants" - gender = PLURAL - body_parts_covered = LOWER_TORSO|LEGS - item_icons = list(slot_w_uniform_str = 'icons/mob/onmob/onmob_under_pants.dmi') - sprite_sheets = list( - SPECIES_UNATHI = 'icons/mob/species/unathi/generated/onmob_under_pants_unathi.dmi', - ) - -/obj/item/clothing/under/formal_pants/red - name = "red pants" - desc = "Bright red pants. Overflowing with personality." - color = "#7f0000" - -/obj/item/clothing/under/formal_pants/black - name = "black pants" - desc = "These pants are dark, like your soul." - color = "#1f1f1f" - -/obj/item/clothing/under/formal_pants/tan - name = "tan pants" - desc = "Some tan pants. You look like a white collar worker with these on." - color = "#75634f" - -/obj/item/clothing/under/formal_pants/khaki - name = "khaki pants" - desc = "A pair of dust beige khaki pants." - color = "#75634f" - -//Baggy Pants// - -/obj/item/clothing/under/formal_pants/baggy - name = "baggy pants" - desc = "Plain baggy pants." - icon_state = "baggy_pants" - -/obj/item/clothing/under/formal_pants/baggy/red - name = "baggy red pants" - desc = "Bright red pants. Overflowing with personality." - color = "#7f0000" - -/obj/item/clothing/under/formal_pants/baggy/black - name = "baggy black pants" - desc = "These pants are dark, like your soul." - color = "#262626" - -/obj/item/clothing/under/formal_pants/baggy/tan - name = "baggy tan pants" - desc = "Some tan pants. You look like a white collar worker with these on." - color = "#75634f" - -/obj/item/clothing/under/formal_pants/baggy/khaki - name = "baggy khaki pants" - desc = "A pair of dust beige khaki pants." - color = "#75634f" - -//from infinity, by SidVeld -/obj/item/clothing/under/suit_jacket/charcoal/no_accessories - name = "charcoal pants with shirt" - desc = "A charcoal pants and white shirt. Very professional." - accessories = list() - -/obj/item/clothing/under/suit_jacket/navy/no_accessories - name = "navy pants with shirt" - desc = "A navy pants and white shirt, intended for the galaxy's finest." - accessories = list() - -/obj/item/clothing/under/suit_jacket/burgundy/no_accessories - name = "burgundy pants with shirt" - desc = "A burgundy pants and white shirt. Somewhat formal." - accessories = list() - -/obj/item/clothing/under/suit_jacket/checkered/no_accessories - name = "checkered pants with shirt" - desc = "A checkered pants and white shirt. Shame if something were to happen to it, eh?" - accessories = list() diff --git a/code/modules/clothing/under/jobs/civilian.dm b/code/modules/clothing/under/jobs/civilian.dm deleted file mode 100644 index 02bef9939b0b0..0000000000000 --- a/code/modules/clothing/under/jobs/civilian.dm +++ /dev/null @@ -1,198 +0,0 @@ -//Alphabetical order of civilian jobs. - -/obj/item/clothing/under/rank/bartender - desc = "It looks like it could use some more flair." - name = "bartender's uniform" - icon_state = "ba_suit" - item_state = "ba_suit" - worn_state = "ba_suit" - gender_icons = 1 - - -/obj/item/clothing/under/rank/captain //Alright, technically not a 'civilian' but its better then giving a .dm file for a single define. - desc = "It's a blue jumpsuit with some gold markings denoting the rank of \"Captain\"." - name = "captain's jumpsuit" - icon_state = "captain" - item_state = "b_suit" - worn_state = "captain" - - -/obj/item/clothing/under/rank/cargo - name = "quartermaster's jumpsuit" - desc = "It's a jumpsuit worn by the quartermaster. It's specially designed to prevent back injuries caused by pushing paper." - icon_state = "qm" - item_state = "lb_suit" - worn_state = "qm" - - -/obj/item/clothing/under/rank/cargotech - name = "cargo technician's jumpsuit" - desc = "Shooooorts! They're comfy and easy to wear!" - icon_state = "cargotech" - item_state = "lb_suit" - worn_state = "cargo" - gender_icons = 1 - body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS - - -/obj/item/clothing/under/rank/chaplain - desc = "It's a black jumpsuit, often worn by religious folk." - name = "chaplain's jumpsuit" - icon_state = "chaplain" - item_state = "bl_suit" - worn_state = "chapblack" - gender_icons = 1 - - -/obj/item/clothing/under/rank/chef - desc = "It's an apron which is given only to the most hardcore chefs in space." - name = "chef's uniform" - icon_state = "chef" - item_state = "w_suit" - worn_state = "chef" - gender_icons = 1 - - -/obj/item/clothing/under/rank/clown - name = "clown suit" - desc = "'HONK!'" - icon_state = "clown" - item_state = "clown" - worn_state = "clown" - - -/obj/item/clothing/under/rank/head_of_personnel - desc = "It's a jumpsuit worn by someone who works in the position of \"Head of Personnel\"." - name = "head of personnel's jumpsuit" - icon_state = "hop" - item_state = "b_suit" - worn_state = "hop" - -/obj/item/clothing/under/rank/head_of_personnel_whimsy - desc = "A blue jacket and red tie, with matching red cuffs! Snazzy. Wearing this makes you feel more important than your job title does." - name = "head of personnel's suit" - icon_state = "hopwhimsy" - item_state = "b_suit" - worn_state = "hopwhimsy" - - -/obj/item/clothing/under/rank/hydroponics - desc = "It's a jumpsuit designed to protect against minor plant-related hazards." - name = "botanist's jumpsuit" - icon_state = "hydroponics" - item_state = "g_suit" - worn_state = "hydroponics" - gender_icons = 1 - permeability_coefficient = 0.50 - - -/obj/item/clothing/under/rank/internalaffairs - desc = "The plain, professional attire of an Internal Affairs Agent. The collar is immaculately starched." - name = "Internal Affairs uniform" - icon_state = "internalaffairs" - item_state = "ba_suit" - worn_state = "internalaffairs" - gender_icons = 1 - accessories = list(/obj/item/clothing/accessory/black) - -/obj/item/clothing/under/rank/internalaffairs/plain - desc = "A plain shirt and pair of pressed black pants." - name = "formal outfit" - accessories = null - -/obj/item/clothing/under/rank/internalaffairs/plain/nt - desc = "A plain shirt and pair of pressed black pants." - name = "formal outfit" - accessories = list(/obj/item/clothing/accessory/red_long) - - -/obj/item/clothing/under/rank/janitor - desc = "It's the official uniform of the janitor. It has minor protection from biohazards." - name = "janitor's jumpsuit" - icon_state = "janitor" - worn_state = "janitor" - item_state = "janitor" - gender_icons = 1 - armor = list( - bio = ARMOR_BIO_MINOR - ) - - -/obj/item/clothing/under/lawyer - desc = "Slick threads." - name = "Lawyer suit" - - -/obj/item/clothing/under/lawyer/black - name = "black Lawyer suit" - icon_state = "lawyer_black" - item_state = "lawyer_black" - worn_state = "lawyer_black" - - -/obj/item/clothing/under/lawyer/female - name = "black Lawyer suit" - icon_state = "black_suit_fem" - item_state = "lawyer_black" - worn_state = "black_suit_fem" - gender_icons = 1 - - -/obj/item/clothing/under/lawyer/red - name = "red Lawyer suit" - icon_state = "lawyer_red" - item_state = "lawyer_red" - worn_state = "lawyer_red" - - -/obj/item/clothing/under/lawyer/blue - name = "blue Lawyer suit" - icon_state = "lawyer_blue" - item_state = "lawyer_blue" - worn_state = "lawyer_blue" - - -/obj/item/clothing/under/lawyer/bluesuit - name = "Blue Suit" - desc = "A classy suit." - icon_state = "bluesuit" - item_state = "ba_suit" - worn_state = "bluesuit" - gender_icons = 1 - accessories = list(/obj/item/clothing/accessory/red) - - -/obj/item/clothing/under/lawyer/purpsuit - name = "Purple Suit" - icon_state = "lawyer_purp" - item_state = "ba_suit" - worn_state = "lawyer_purp" - -/obj/item/clothing/under/lawyer/oldman - name = "Old Man's Suit" - desc = "A classic suit for the older gentleman with built in back support." - icon_state = "oldman" - item_state = "johnny" - worn_state = "oldman" - - -/obj/item/clothing/under/librarian - name = "sensible suit" - desc = "It's very... sensible." - icon_state = "red_suit" - item_state = "lawyer_red" - worn_state = "red_suit" - -/obj/item/clothing/under/mime - name = "mime's outfit" - desc = "It's not very colourful." - icon_state = "mime" - item_state = "ba_suit" - worn_state = "mime" - -/obj/item/clothing/under/rank/miner - desc = "It's a snappy jumpsuit with a sturdy set of overalls. It is very dirty." - name = "shaft miner's jumpsuit" - icon_state = "miner" - item_state = "lb_suit" - worn_state = "miner" diff --git a/code/modules/clothing/under/jobs/engineering.dm b/code/modules/clothing/under/jobs/engineering.dm deleted file mode 100644 index 87484ac2e53c7..0000000000000 --- a/code/modules/clothing/under/jobs/engineering.dm +++ /dev/null @@ -1,44 +0,0 @@ -//Contains: Engineering department jumpsuits -/obj/item/clothing/under/rank/chief_engineer - desc = "It's a high visibility jumpsuit given to those engineers insane enough to achieve the rank of \"Chief engineer\". It has minor radiation shielding." - name = "chief engineer's jumpsuit" - icon_state = "chiefengineer" - item_state = "g_suit" - worn_state = "chief" - armor = list( - rad = ARMOR_RAD_MINOR - ) - -/obj/item/clothing/under/rank/atmospheric_technician - desc = "It's a jumpsuit worn by atmospheric technicians." - name = "atmospheric technician's jumpsuit" - icon_state = "atmos" - item_state = "atmos_suit" - worn_state = "atmos" - gender_icons = 1 - -/obj/item/clothing/under/rank/engineer - desc = "It's an orange high visibility jumpsuit worn by engineers. It has minor radiation shielding." - name = "engineer's jumpsuit" - icon_state = "engine" - item_state = "engi_suit" - worn_state = "engine" - gender_icons = 1 - armor = list( - rad = ARMOR_RAD_MINOR - ) - -/obj/item/clothing/under/rank/roboticist - desc = "It's a slimming black jumpsuit with reinforced seams; great for industrial work." - name = "roboticist's jumpsuit" - icon_state = "robotics" - item_state = "bl_suit" - worn_state = "robotics" - gender_icons = 1 - -/obj/item/clothing/under/rank/roboticist/skirt - desc = "It's a slimming black jumpskirt with reinforced seams; great for industrial work." - name = "roboticist's jumpskirt" - icon_state = "roboticsf" - worn_state = "roboticsf" - gender_icons = 1 diff --git a/code/modules/clothing/under/jobs/medsci.dm b/code/modules/clothing/under/jobs/medsci.dm deleted file mode 100644 index ece9943509f72..0000000000000 --- a/code/modules/clothing/under/jobs/medsci.dm +++ /dev/null @@ -1,239 +0,0 @@ -/* - * Science - */ -/obj/item/clothing/under/rank/research_director - desc = "It's a jumpsuit worn by those with the know-how to achieve the position of \"Chief Science Officer\". Its fabric provides minor protection from biological contaminants." - name = "chief science officer's jumpsuit" - icon_state = "director" - item_state = "lb_suit" - worn_state = "director" - armor = list( - bio = ARMOR_BIO_MINOR - ) - -/obj/item/clothing/under/rank/research_director/rdalt - desc = "A dress suit and slacks stained with hard work and dedication to science. Perhaps other things as well, but mostly hard work and dedication." - name = "head researcher uniform" - icon_state = "rdalt" - item_state = "lb_suit" - worn_state = "rdalt" - armor = list( - bio = ARMOR_BIO_MINOR - ) - -/obj/item/clothing/under/rank/research_director/dress_rd - name = "chief science officer dress uniform" - desc = "Feminine fashion for the style concious CSO. Its fabric provides minor protection from biological contaminants." - icon_state = "dress_rd" - item_state = "lb_suit" - worn_state = "dress_rd" - armor = list( - bio = ARMOR_BIO_MINOR - ) - body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS - -/obj/item/clothing/under/rank/chemist - desc = "It's made of a special fiber that gives special protection against biohazards. The striping on the suit denotes the wearer as a trained pharmacist." - name = "pharmacist's jumpsuit" - icon_state = "chemistry" - item_state = "w_suit" - worn_state = "chemistrywhite" - gender_icons = 1 - permeability_coefficient = 0.50 - armor = list( - bio = ARMOR_BIO_MINOR - ) -/* - * Medical - */ -/obj/item/clothing/under/rank/chief_medical_officer - desc = "It's a jumpsuit worn by those with the experience to be \"Chief Medical Officer\". It provides minor biological protection." - name = "chief medical officer's jumpsuit" - icon_state = "cmo" - item_state = "w_suit" - worn_state = "cmo" - permeability_coefficient = 0.50 - armor = list( - bio = ARMOR_BIO_MINOR - ) - -/obj/item/clothing/under/rank/geneticist - desc = "It's made of a special fiber that gives special protection against biohazards. It has a genetics rank stripe on it." - name = "geneticist's jumpsuit" - icon_state = "genetics" - item_state = "w_suit" - worn_state = "geneticswhite" - permeability_coefficient = 0.50 - armor = list( - bio = ARMOR_BIO_MINOR - ) - -/obj/item/clothing/under/rank/virologist - desc = "It's made of a special fiber that gives special protection against biohazards. It has a virologist rank stripe on it." - name = "virologist's jumpsuit" - icon_state = "virology" - item_state = "w_suit" - worn_state = "virologywhite" - gender_icons = 1 - permeability_coefficient = 0.50 - armor = list( - bio = ARMOR_BIO_MINOR - ) - -/obj/item/clothing/under/rank/nursesuit - desc = "It's a jumpsuit commonly worn by nursing staff in the medical department." - name = "nurse's suit" - icon_state = "nursesuit" - item_state = "nursesuit" - worn_state = "nursesuit" - permeability_coefficient = 0.50 - armor = list( - bio = ARMOR_BIO_MINOR - ) - body_parts_covered = UPPER_TORSO|LOWER_TORSO - -/obj/item/clothing/under/rank/nurse - desc = "A dress commonly worn by the nursing staff in the medical department." - name = "nurse's dress" - icon_state = "nurse" - item_state = "nursesuit" - worn_state = "nurse" - permeability_coefficient = 0.50 - armor = list( - bio = ARMOR_BIO_MINOR - ) - body_parts_covered = UPPER_TORSO|LOWER_TORSO - -/obj/item/clothing/under/rank/orderly - desc = "A white suit to be worn by medical attendants." - name = "orderly's uniform" - icon_state = "orderly" - item_state = "nursesuit" - worn_state = "orderly" - gender_icons = 1 - permeability_coefficient = 0.50 - armor = list( - bio = ARMOR_BIO_MINOR - ) - -/obj/item/clothing/under/rank/medical - desc = "It's made of a special fiber that provides minor protection against biohazards. It has a cross on the chest denoting that the wearer is trained medical personnel." - name = "medical doctor's jumpsuit" - icon_state = "medical" - item_state = "w_suit" - worn_state = "medical" - gender_icons = 1 - permeability_coefficient = 0.50 - armor = list( - bio = ARMOR_BIO_MINOR - ) - -/obj/item/clothing/under/rank/medical/paramedic - name = "short sleeve medical jumpsuit" - desc = "It's made of a special fiber that provides minor protection against biohazards. This one has a cross on the chest denoting that the wearer is trained medical personnel." - icon_state = "medical" - item_state = "medical_short" - worn_state = "medical_short" - body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS - -/obj/item/clothing/under/rank/medical/scrubs - name = "scrubs" - desc = "A loose-fitting garment designed to provide minor protection against biohazards." - icon_state = "scrubs" - worn_state = "scrubs" - gender_icons = 1 - -/obj/item/clothing/under/rank/medical/scrubs/blue - name = "blue scrubs" - color = "#4891e1" - -/obj/item/clothing/under/rank/medical/scrubs/green - name = "green scrubs" - color = "#255a3e" - -/obj/item/clothing/under/rank/medical/scrubs/purple - name = "purple scrubs" - color = "#7a1b3f" - -/obj/item/clothing/under/rank/medical/scrubs/black - name = "black scrubs" - color = "#242424" - -/obj/item/clothing/under/rank/medical/scrubs/navyblue - name = "navy blue scrubs" - color = "#1f3a69" - -/obj/item/clothing/under/rank/medical/scrubs/lilac - name = "lilac scrubs" - color = "#c8a2c8" - -/obj/item/clothing/under/rank/medical/scrubs/teal - name = "teal scrubs" - color = "#008080" - -/obj/item/clothing/under/rank/medical/scrubs/heliodor - name = "heliodor scrubs" - color = "#aad539" - -/obj/item/clothing/under/rank/psych - desc = "A basic white jumpsuit. It has turqouise markings that denote the wearer as a psychiatrist." - name = "psychiatrist's jumpsuit" - icon_state = "psych" - item_state = "w_suit" - worn_state = "psych" - gender_icons = 1 - -/obj/item/clothing/under/rank/psych/turtleneck - desc = "A turqouise sweater and a pair of dark blue slacks." - name = "turqouise turtleneck" - icon_state = "psychturtle" - item_state = "b_suit" - worn_state = "psychturtle" - - -/* - * Medsci, unused (i think) stuff - */ -/obj/item/clothing/under/rank/geneticist_new - desc = "It's made of a special fiber which provides minor protection against biohazards." - name = "geneticist's jumpsuit" - icon_state = "genetics_new" - item_state = "w_suit" - worn_state = "genetics_new" - permeability_coefficient = 0.50 - armor = list( - bio = ARMOR_BIO_MINOR - ) - -/obj/item/clothing/under/rank/chemist_new - desc = "It's made of a special fiber which provides minor protection against biohazards." - name = "chemist's jumpsuit" - icon_state = "chemist_new" - item_state = "w_suit" - worn_state = "chemist_new" - permeability_coefficient = 0.50 - armor = list( - bio = ARMOR_BIO_MINOR - ) - -/obj/item/clothing/under/rank/scientist_new - desc = "Made of a special fiber that gives special protection against biohazards and small explosions." - name = "scientist's jumpsuit" - icon_state = "scientist_new" - item_state = "w_suit" - worn_state = "scientist_new" - permeability_coefficient = 0.50 - armor = list( - bio = ARMOR_BIO_MINOR - ) - -/obj/item/clothing/under/rank/virologist_new - desc = "Made of a special fiber that gives increased protection against biohazards." - name = "virologist's jumpsuit" - icon_state = "virologist_new" - item_state = "w_suit" - worn_state = "virologist_new" - permeability_coefficient = 0.50 - armor = list( - bio = ARMOR_BIO_MINOR - ) diff --git a/code/modules/clothing/under/jobs/security.dm b/code/modules/clothing/under/jobs/security.dm deleted file mode 100644 index 07a1bdc8b0abf..0000000000000 --- a/code/modules/clothing/under/jobs/security.dm +++ /dev/null @@ -1,229 +0,0 @@ -/* - * Contains: - * Security - * Detective - * Head of Security - */ - -/* - * Security - */ -/obj/item/clothing/under/rank/warden - desc = "It's made of a slightly sturdier material than standard jumpsuits, to allow for more robust protection. It has the word \"Warden\" written on the shoulders." - name = "warden's jumpsuit" - icon_state = "warden" - item_state = "r_suit" - worn_state = "warden" - armor = list( - melee = ARMOR_MELEE_SMALL - ) - siemens_coefficient = 0.9 - -/obj/item/clothing/head/warden - name = "warden's hat" - desc = "It's a special helmet issued to the Warden of a securiy force." - icon_state = "policehelm" - body_parts_covered = 0 - -/obj/item/clothing/under/rank/security - name = "security officer's jumpsuit" - desc = "It's made of a slightly sturdier material than standard jumpsuits, to allow for robust protection." - icon_state = "security" - item_state = "r_suit" - worn_state = "secred" - armor = list( - melee = ARMOR_MELEE_SMALL - ) - siemens_coefficient = 0.9 - -/obj/item/clothing/under/rank/dispatch - name = "dispatcher's uniform" - desc = "A dress shirt and khakis with a security patch sewn on." - icon_state = "dispatch" - worn_state = "dispatch" - armor = list( - melee = ARMOR_MELEE_SMALL - ) - body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS - siemens_coefficient = 0.9 - -/obj/item/clothing/under/rank/security2 - name = "security officer's uniform" - desc = "It's made of a slightly sturdier material, to allow for robust protection." - icon_state = "redshirt2" - item_state = "r_suit" - worn_state = "redshirt2" - armor = list( - melee = ARMOR_MELEE_SMALL - ) - siemens_coefficient = 0.9 - -/obj/item/clothing/under/rank/security/corp - icon_state = "sec_corporate" - worn_state = "sec_corporate" - -/obj/item/clothing/under/rank/warden/corp - icon_state = "warden_corporate" - worn_state = "warden_corporate" - -/obj/item/clothing/under/tactical - name = "tactical jumpsuit" - desc = "It's made of a slightly sturdier material than standard jumpsuits, to allow for robust protection." - icon_state = "swatunder" - worn_state = "swatunder" - gender_icons = 1 - armor = list( - melee = ARMOR_MELEE_SMALL - ) - siemens_coefficient = 0.9 - -/* - * Detective - */ -/obj/item/clothing/under/det - name = "detective's suit" - desc = "A rumpled white dress shirt paired with well-worn grey slacks." - icon_state = "detective" - item_state = "det" - worn_state = "detective" - gender_icons = 1 - armor = list( - melee = ARMOR_MELEE_SMALL - ) - siemens_coefficient = 0.9 - accessories = list(/obj/item/clothing/accessory/blue_clip) - -/obj/item/clothing/under/det/grey - icon_state = "detective2" - worn_state = "detective2" - gender_icons = 1 - desc = "A serious-looking tan dress shirt paired with freshly-pressed black slacks." - accessories = list(/obj/item/clothing/accessory/red_long) - -/obj/item/clothing/under/det/black - icon_state = "detective3" - worn_state = "detective3" - item_state = "sl_suit" - gender_icons = 1 - desc = "An immaculate white dress shirt, paired with a pair of dark grey dress pants, a red tie, and a charcoal vest." - accessories = list(/obj/item/clothing/accessory/red_long, /obj/item/clothing/accessory/toggleable/suit_vest) - -/obj/item/clothing/head/det - name = "fedora" - desc = "A brown fedora - either the cornerstone of a detective's style or a poor attempt at looking cool, depending on the person wearing it." - icon_state = "detective" - item_state_slots = list( - slot_l_hand_str = "det_hat", - slot_r_hand_str = "det_hat", - ) - armor = list( - melee = ARMOR_MELEE_RESISTANT, - laser = ARMOR_LASER_SMALL, - energy = ARMOR_ENERGY_MINOR - ) - siemens_coefficient = 0.9 - flags_inv = BLOCKHEADHAIR - -/obj/item/clothing/head/det/attack_self(mob/user) - flags_inv ^= BLOCKHEADHAIR - to_chat(user, "[src] will now [flags_inv & BLOCKHEADHAIR ? "hide" : "show"] hair.") - ..() - -/obj/item/clothing/head/det/grey - icon_state = "detective2" - desc = "A grey fedora - either the cornerstone of a detective's style or a poor attempt at looking cool, depending on the person wearing it." - - -/* - * Head of Security - */ -/obj/item/clothing/under/rank/head_of_security - desc = "It's a jumpsuit worn by those few with the dedication to achieve the position of \"Head of Security\". It has additional armor to protect the wearer." - name = "head of security's jumpsuit" - icon_state = "hos" - item_state = "r_suit" - worn_state = "hosred" - armor = list( - melee = ARMOR_MELEE_SMALL - ) - siemens_coefficient = 0.8 - -/obj/item/clothing/under/rank/head_of_security/corp - icon_state = "hos_corporate" - worn_state = "hos_corporate" - -/obj/item/clothing/head/HoS - name = "Head of Security Hat" - desc = "The hat of the Head of Security. For showing the officers who's in charge." - icon_state = "hoscap" - body_parts_covered = 0 - siemens_coefficient = 0.8 - -/obj/item/clothing/head/HoS/dermal - name = "Dermal Armour Patch" - desc = "You're not quite sure how you manage to take it on and off, but it implants nicely in your head." - icon_state = "dermal" - armor = list( - melee = ARMOR_MELEE_MAJOR, - bullet = ARMOR_BALLISTIC_PISTOL, - laser = ARMOR_LASER_HANDGUNS, - energy = ARMOR_ENERGY_SMALL, - bomb = ARMOR_BOMB_PADDED - ) - siemens_coefficient = 0.6 - -/obj/item/clothing/suit/armor/hos - name = "armored coat" - desc = "A greatcoat enhanced with a special alloy for some protection and style." - icon_state = "hos" - body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS|LEGS - armor = list( - melee = ARMOR_MELEE_MAJOR, - bullet = ARMOR_BALLISTIC_PISTOL, - laser = ARMOR_LASER_HANDGUNS, - energy = ARMOR_ENERGY_MINOR, - bomb = ARMOR_BOMB_PADDED - ) - flags_inv = HIDEJUMPSUIT - siemens_coefficient = 0.6 - -//Jensen cosplay gear -/obj/item/clothing/under/rank/head_of_security/jensen - desc = "You never asked for anything that stylish." - name = "head of security's jumpsuit" - icon_state = "jensen" - item_state = "jensen" - worn_state = "jensen" - siemens_coefficient = 0.6 - -/obj/item/clothing/suit/armor/hos/jensen - name = "armored trenchcoat" - desc = "A trenchcoat augmented with a special alloy for some protection and style." - icon_state = "hostrench" - flags_inv = 0 - siemens_coefficient = 0.6 - -/* - * Navy uniforms - */ - -/obj/item/clothing/under/rank/security/navyblue - name = "security officer's uniform" - desc = "The latest in fashionable security outfits." - icon_state = "officerblueclothes" - item_state = "ba_suit" - worn_state = "officerblueclothes" - -/obj/item/clothing/under/rank/head_of_security/navyblue - desc = "The insignia on this uniform tells you that this uniform belongs to the Head of Security." - name = "head of security's uniform" - icon_state = "hosblueclothes" - item_state = "ba_suit" - worn_state = "hosblueclothes" - -/obj/item/clothing/under/rank/warden/navyblue - desc = "The insignia on this uniform tells you that this uniform belongs to the Warden." - name = "warden's uniform" - icon_state = "wardenblueclothes" - item_state = "ba_suit" - worn_state = "wardenblueclothes" diff --git a/code/modules/clothing/under/miscellaneous.dm b/code/modules/clothing/under/miscellaneous.dm deleted file mode 100644 index aebbc022e0030..0000000000000 --- a/code/modules/clothing/under/miscellaneous.dm +++ /dev/null @@ -1,755 +0,0 @@ -/obj/item/clothing/under/pj/red - name = "red pj's" - desc = "Sleepwear." - icon_state = "red_pyjamas" - worn_state = "red_pyjamas" - item_state = "w_suit" - gender_icons = 1 - -/obj/item/clothing/under/pj/blue - name = "blue pj's" - desc = "Sleepwear." - icon_state = "blue_pyjamas" - worn_state = "blue_pyjamas" - item_state = "w_suit" - gender_icons = 1 - -/obj/item/clothing/under/captain_fly - name = "rogue's uniform" - desc = "For the man who doesn't care because he's still free." - icon_state = "captain_fly" - item_state = "r_suit" - worn_state = "captain_fly" - -/obj/item/clothing/under/scratch - name = "white suit" - desc = "A white suit, suitable for an excellent host." - icon_state = "scratch" - item_state = "scratch" - worn_state = "scratch" - -/obj/item/clothing/under/sl_suit - desc = "It's a very amish looking suit." - name = "amish suit" - icon_state = "sl_suit" - worn_state = "sl_suit" - item_state = "sl_suit" - gender_icons = 1 - -/obj/item/clothing/under/waiter - name = "waiter's outfit" - desc = "It's a very smart uniform with a special pocket for tip." - icon_state = "waiter" - item_state = "waiter" - worn_state = "waiter" - gender_icons = 1 - -/obj/item/clothing/under/rank/mailman - name = "mailman's jumpsuit" - desc = "'Special delivery!'" - icon_state = "mailman" - item_state = "b_suit" - worn_state = "mailman" - -/obj/item/clothing/under/sexyclown - name = "sexy-clown suit" - desc = "It makes you look HONKable!" - icon_state = "sexyclown" - item_state = "clown" - worn_state = "sexyclown" - body_parts_covered = UPPER_TORSO|LOWER_TORSO - -/obj/item/clothing/under/rank/vice - name = "vice officer's jumpsuit" - desc = "It's the standard issue pretty-boy outfit, as seen on Holo-Vision." - icon_state = "vice" - item_state = "gy_suit" - worn_state = "vice" - -//This set of uniforms looks fairly fancy and is generally used for high-ranking NT personnel from what I've seen, so lets give them appropriate ranks. -/obj/item/clothing/under/rank/centcom - desc = "Gold trim on space-black cloth, this uniform displays the rank of \"Captain.\"." - name = "\improper Officer's Dress Uniform" - icon_state = "officer" - item_state = "lawyer_black" - worn_state = "officer" - displays_id = 0 - -/obj/item/clothing/under/rank/centcom_officer - desc = "Gold trim on space-black cloth, this uniform displays the rank of \"Admiral.\"." - name = "\improper Officer's Dress Uniform" - icon_state = "officer" - item_state = "lawyer_black" - worn_state = "officer" - displays_id = 0 - -/obj/item/clothing/under/rank/centcom_captain - desc = "Gold trim on space-black cloth, this uniform displays the rank of \"Admiral-Executive.\"." - name = "\improper Officer's Dress Uniform" - icon_state = "centcom" - item_state = "lawyer_black" - worn_state = "centcom" - displays_id = 0 - -/obj/item/clothing/under/ert - name = "ERT tactical uniform" - desc = "A short-sleeved black uniform, paired with grey digital-camo cargo pants. It looks very tactical." - icon_state = "ert_uniform" - item_state = "bl_suit" - worn_state = "ert_uniform" - armor = list( - melee = ARMOR_MELEE_SMALL - ) - siemens_coefficient = 0.9 - -/obj/item/clothing/under/space - name = "\improper NASA jumpsuit" - desc = "It has a NASA logo on it and is made of space-proofed materials." - icon_state = "black" - item_state = "bl_suit" - worn_state = "black" - w_class = ITEM_SIZE_HUGE//bulky item - gas_transfer_coefficient = 0.01 - permeability_coefficient = 0.02 - body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS - cold_protection = UPPER_TORSO | LOWER_TORSO | LEGS | ARMS //Needs gloves and shoes with cold protection to be fully protected. - min_cold_protection_temperature = SPACE_SUIT_MIN_COLD_PROTECTION_TEMPERATURE - -/obj/item/clothing/under/acj - name = "administrative cybernetic jumpsuit" - icon_state = "syndicate" - item_state = "bl_suit" - worn_state = "syndicate" - desc = "it's a cybernetically enhanced jumpsuit used for administrative duties." - gas_transfer_coefficient = 0.01 - permeability_coefficient = 0.01 - body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS - armor = list( - melee = ARMOR_MELEE_SHIELDED, - bullet = ARMOR_BALLISTIC_HEAVY, - laser = ARMOR_LASER_HEAVY, - energy = ARMOR_ENERGY_SHIELDED, - bomb = ARMOR_BOMB_SHIELDED, - bio = ARMOR_BIO_SHIELDED, - rad = ARMOR_RAD_SHIELDED - ) - cold_protection = UPPER_TORSO | LOWER_TORSO | LEGS | FEET | ARMS | HANDS - min_cold_protection_temperature = SPACE_SUIT_MIN_COLD_PROTECTION_TEMPERATURE - siemens_coefficient = 0 - -/obj/item/clothing/under/owl - name = "owl uniform" - desc = "A jumpsuit with owl wings. Photorealistic owl feathers! Twooooo!" - icon_state = "owl" - worn_state = "owl" - item_state = "owl" - -/obj/item/clothing/under/color/rainbow - name = "rainbow" - icon_state = "rainbow" - item_state = "rainbow" - worn_state = "rainbow" - gender_icons = 1 - -/obj/item/clothing/under/cloud - name = "cloud" - icon_state = "cloud" - worn_state = "cloud" - item_flags = ITEM_FLAG_INVALID_FOR_CHAMELEON - -/obj/item/clothing/under/psysuit - name = "dark undersuit" - desc = "A thick, layered grey undersuit lined with power cables. Feels a little like wearing an electrical storm." - icon_state = "psysuit" - item_state = "bl_suit" - worn_state = "psysuit" - body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS - -/obj/item/clothing/under/gentlesuit - name = "gentlemans suit" - desc = "A silk black shirt with a white tie and a matching gray vest and slacks. Feels proper." - icon_state = "gentlesuit" - item_state = "gy_suit" - worn_state = "gentlesuit" - -/obj/item/clothing/under/gimmick - item_flags = ITEM_FLAG_INVALID_FOR_CHAMELEON - -/obj/item/clothing/under/gimmick/rank/captain/suit - name = "captain's suit" - desc = "A green suit and yellow necktie. Exemplifies authority." - icon_state = "green_suit" - item_state = "dg_suit" - worn_state = "green_suit" - -/obj/item/clothing/under/gimmick/rank/head_of_personnel/suit - name = "head of personnel's suit" - desc = "A teal suit and yellow necktie. An authoritative yet tacky ensemble." - icon_state = "teal_suit" - item_state = "g_suit" - worn_state = "teal_suit" - -/obj/item/clothing/under/suit_jacket - name = "black suit" - desc = "A black suit and red tie. Very formal." - icon_state = "black_suit" - item_state = "bl_suit" - worn_state = "black_suit" - -/obj/item/clothing/under/suit_jacket/really_black - name = "executive suit" - desc = "A formal black suit and red tie, intended for the galaxy's finest." - icon_state = "really_black_suit" - item_state = "jensensuit" - worn_state = "really_black_suit" - -/obj/item/clothing/under/suit_jacket/female - name = "executive suit" - desc = "A formal trouser suit for women, intended for the galaxy's finest." - icon_state = "black_suit_fem" - item_state = "lawyer_black" - worn_state = "black_suit_fem" - gender_icons = 1 - -/obj/item/clothing/under/suit_jacket/red - name = "red suit" - desc = "A red suit and blue tie. Somewhat formal." - icon_state = "red_suit" - item_state = "r_suit" - worn_state = "red_suit" - -/obj/item/clothing/under/blackskirt - name = "black skirt" - desc = "A black skirt, very fancy!" - icon_state = "blackskirt" - item_state = "bl_suit" - worn_state = "blackskirt" - body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS - -/obj/item/clothing/under/schoolgirl - name = "schoolgirl uniform" - desc = "It's just like one of my Japanese animes!" - icon_state = "schoolgirl" - item_state = "b_suit" - worn_state = "schoolgirl" - body_parts_covered = UPPER_TORSO|LOWER_TORSO - -/obj/item/clothing/under/overalls - name = "laborer's overalls" - desc = "A set of durable overalls for getting the job done." - icon_state = "overalls" - item_state = "lb_suit" - worn_state = "overalls" - -/obj/item/clothing/under/pirate - name = "pirate outfit" - desc = "Yarr." - icon_state = "pirate" - item_state = "sl_suit" - worn_state = "pirate" - gender_icons = 1 - body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS - -/obj/item/clothing/under/soviet - name = "soviet uniform" - desc = "For the Motherland!" - icon_state = "soviet" - item_state = "gy_suit" - worn_state = "soviet" - -/obj/item/clothing/under/redcoat - name = "redcoat uniform" - desc = "Looks old." - icon_state = "redcoat" - item_state = "r_suit" - worn_state = "redcoat" - -/obj/item/clothing/under/kilt - name = "kilt" - desc = "Includes shoes and plaid." - icon_state = "kilt" - item_state = "kilt" - worn_state = "kilt" - body_parts_covered = UPPER_TORSO|LOWER_TORSO|FEET - -/obj/item/clothing/under/sexymime - name = "sexy mime outfit" - desc = "The only time when you DON'T enjoy looking at someone's rack." - icon_state = "sexymime" - item_state = "w_suit" - worn_state = "sexymime" - body_parts_covered = UPPER_TORSO|LOWER_TORSO - -/obj/item/clothing/under/gladiator - name = "gladiator uniform" - desc = "Are you not entertained? Is that not why you are here?" - icon_state = "gladiator" - item_state = "o_suit" - worn_state = "gladiator" - body_parts_covered = LOWER_TORSO - -//dress -/obj/item/clothing/under/dress - name = "dress" - desc = "A fancy dress." - icon_state = "dress_fire" - worn_state = "dress_fire" - body_parts_covered = UPPER_TORSO|LOWER_TORSO - -/obj/item/clothing/under/dress/dress_fire - name = "flame dress" - desc = "A small black dress with blue flames print on it." - icon_state = "dress_fire" - item_state = "bl_suit" - worn_state = "dress_fire" - -/obj/item/clothing/under/dress/dress_green - name = "green dress" - desc = "A simple, tight fitting green dress." - icon_state = "dress_green" - item_state = "g_suit" - worn_state = "dress_green" - -/obj/item/clothing/under/dress/dress_orange - name = "orange dress" - desc = "A fancy orange gown for those who like to show leg." - icon_state = "dress_orange" - item_state = "y_suit" - worn_state = "dress_orange" - -/obj/item/clothing/under/dress/dress_pink - name = "pink dress" - desc = "A simple, tight fitting pink dress." - icon_state = "dress_pink" - item_state = "p_suit" - worn_state = "dress_pink" - -/obj/item/clothing/under/dress/dress_purple - name = "purple dress" - desc= "A simple, tight fitting purple dress." - icon_state = "tian_dress" - item_state = "p_suit" - worn_state = "tian_dress" - -/obj/item/clothing/under/dress/dress_yellow - name = "yellow dress" - desc = "A flirty, little yellow dress." - icon_state = "dress_yellow" - item_state = "y_suit" - worn_state = "dress_yellow" - -/obj/item/clothing/under/dress/dress_saloon - name = "saloon girl dress" - desc = "A old western inspired gown for the girl who likes to drink." - icon_state = "dress_saloon" - item_state = "p_suit" - worn_state = "dress_saloon" - - -/obj/item/clothing/under/dress/dress_cap - name = "captain's dress uniform" - desc = "Feminine fashion for the style concious captain." - icon_state = "dress_cap" - item_state = "b_suit" - worn_state = "dress_cap" - body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS - -/obj/item/clothing/under/dress/dress_hop - name = "head of personnel dress uniform" - desc = "Feminine fashion for the style concious HoP." - icon_state = "dress_hop" - item_state = "b_suit" - worn_state = "dress_hop" - body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS - -/obj/item/clothing/under/dress/dress_hr - name = "human resources director uniform" - desc = "Superior class for the nosy H.R. Director." - icon_state = "huresource" - item_state = "y_suit" - worn_state = "huresource" - body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS - -/obj/item/clothing/under/dress/plaid_blue - name = "blue plaid skirt" - desc = "A preppy blue skirt with a white blouse." - icon_state = "plaid_blue" - worn_state = "plaid_blue" - -/obj/item/clothing/under/dress/plaid_red - name = "red plaid skirt" - desc = "A preppy red skirt with a white blouse." - icon_state = "plaid_red" - item_state = "kilt" - worn_state = "plaid_red" - -/obj/item/clothing/under/dress/plaid_purple - name = "blue purple skirt" - desc = "A preppy purple skirt with a white blouse." - icon_state = "plaid_purple" - item_state = "kilt" - worn_state = "plaid_purple" - -//wedding stuff -/obj/item/clothing/under/wedding - body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS - -/obj/item/clothing/under/wedding/bride_orange - name = "orange wedding dress" - desc = "A big and puffy orange dress." - icon_state = "bride_orange" - item_state = "y_suit" - worn_state = "bride_orange" - flags_inv = HIDESHOES - -/obj/item/clothing/under/wedding/bride_purple - name = "purple wedding dress" - desc = "A big and puffy purple dress." - icon_state = "bride_purple" - item_state = "p_suit" - worn_state = "bride_purple" - flags_inv = HIDESHOES - -/obj/item/clothing/under/wedding/bride_blue - name = "blue wedding dress" - desc = "A big and puffy blue dress." - icon_state = "bride_blue" - item_state = "b_suit" - worn_state = "bride_blue" - flags_inv = HIDESHOES - -/obj/item/clothing/under/wedding/bride_red - name = "red wedding dress" - desc = "A big and puffy red dress." - icon_state = "bride_red" - item_state = "r_suit" - worn_state = "bride_red" - flags_inv = HIDESHOES - -/obj/item/clothing/under/wedding/bride_white - name = "silky wedding dress" - desc = "A white wedding gown made from the finest silk." - icon_state = "bride_white" - item_state = "nursesuit" - worn_state = "bride_white" - flags_inv = HIDESHOES - body_parts_covered = UPPER_TORSO|LOWER_TORSO - -/obj/item/clothing/under/sundress - name = "sundress" - desc = "Makes you want to frolic in a field of daisies." - icon_state = "sundress" - item_state = "bl_suit" - worn_state = "sundress" - body_parts_covered = UPPER_TORSO|LOWER_TORSO - -/obj/item/clothing/under/sundress_white - name = "white sundress" - desc = "A white sundress decorated with purple lilies." - icon_state = "sundress_white" - item_state = "sundress_white" - worn_state = "sundress_white" - body_parts_covered = UPPER_TORSO|LOWER_TORSO - -/obj/item/clothing/under/blackjumpskirt - name = "black jumpskirt" - desc = "A black jumpskirt, with a pink undershirt." - icon_state = "blackjumpskirt" - item_state = "bl_suit" - worn_state = "blackjumpskirt" - -/obj/item/clothing/under/shortjumpskirt - name = "short jumpskirt" - desc = "A slimming, short jumpskirt." - icon_state = "shortjumpskirt" - item_state = "w_suit" - worn_state = "shortjumpskirt" - -/obj/item/clothing/under/captainformal - name = "captain's formal uniform" - desc = "A captain's formal-wear, for special occasions." - icon_state = "captain_formal" - item_state = "b_suit" - worn_state = "captain_formal" - -/obj/item/clothing/under/hosformalmale - name = "head of security's formal uniform" - desc = "A male head of security's formal-wear, for special occasions." - icon_state = "hos_formal_male" - item_state = "r_suit" - worn_state = "hos_formal_male" - -/obj/item/clothing/under/hosformalfem - name = "head of security's formal uniform" - desc = "A female head of security's formal-wear, for special occasions." - icon_state = "hos_formal_fem" - item_state = "r_suit" - worn_state = "hos_formal_fem" - -/obj/item/clothing/under/assistantformal - name = "assistant's formal uniform" - desc = "An assistant's formal-wear. Why an assistant needs formal-wear is still unknown." - icon_state = "assistant_formal" - item_state = "gy_suit" - worn_state = "assistant_formal" - -/obj/item/clothing/under/suit_jacket/charcoal - name = "charcoal suit" - desc = "A charcoal suit and red tie. Very professional." - icon_state = "charcoal_suit" - item_state = "bl_suit" - worn_state = "charcoal_suit" - gender_icons = 1 - accessories = list(/obj/item/clothing/accessory/navy, /obj/item/clothing/accessory/toggleable/charcoal_jacket) - -/obj/item/clothing/under/suit_jacket/navy - name = "navy suit" - desc = "A navy suit and red tie, intended for the galaxy's finest." - icon_state = "navy_suit" - item_state = "bl_suit" - worn_state = "navy_suit" - gender_icons = 1 - accessories = list(/obj/item/clothing/accessory/red, /obj/item/clothing/accessory/toggleable/navy_jacket) - -/obj/item/clothing/under/suit_jacket/burgundy - name = "burgundy suit" - desc = "A burgundy suit and black tie. Somewhat formal." - icon_state = "burgundy_suit" - item_state = "r_suit" - worn_state = "burgundy_suit" - gender_icons = 1 - accessories = list(/obj/item/clothing/accessory/black, /obj/item/clothing/accessory/toggleable/burgundy_jacket) - -/obj/item/clothing/under/suit_jacket/checkered - name = "checkered suit" - desc = "That's a very nice suit you have there. Shame if something were to happen to it, eh?" - icon_state = "checkered_suit" - item_state = "gy_suit" - worn_state = "checkered_suit" - gender_icons = 1 - accessories = list(/obj/item/clothing/accessory/black, /obj/item/clothing/accessory/toggleable/checkered_jacket) - -/obj/item/clothing/under/suit_jacket/tan - name = "tan suit" - desc = "A tan suit. Smart, but casual." - icon_state = "tan_suit" - item_state = "lb_suit" - worn_state = "tan_suit" - gender_icons = 1 - accessories = list(/obj/item/clothing/accessory/yellow, /obj/item/clothing/accessory/toggleable/tan_jacket) - -/obj/item/clothing/under/serviceoveralls - name = "workman outfit" - desc = "The very image of a working man. Not that you're probably doing work." - icon_state = "mechanic" - item_state = "lb_suit" - worn_state = "mechanic" - -/obj/item/clothing/under/cheongsam - name = "cheongsam" - desc = "It is a cheongsam dress." - icon_state = "mai_yang" - item_state = "mai_yang" - worn_state = "mai_yang" - body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS - -/obj/item/clothing/under/abaya - name = "abaya" - desc = "A loose-fitting, robe-like dress." - icon_state = "abaya" - item_state = "abaya" - worn_state = "abaya" - body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS - -/obj/item/clothing/under/blazer - name = "blue blazer" - desc = "A bold but yet conservative outfit, red corduroys, navy blazer and a tie." - icon_state = "blue_blazer" - item_state = "blue_blazer" - worn_state = "blue_blazer" - -/obj/item/clothing/under/harness - name = "gear harness" - desc = "How... minimalist." - icon_state = "gear_harness" - worn_state = "gear_harness" - species_restricted = null - body_parts_covered = 0 - -/obj/item/clothing/under/pcrc - name = "\improper PCRC uniform" - desc = "A uniform belonging to Proxima Centauri Risk Control, a private security firm." - icon_state = "pcrc" - item_state = "jensensuit" - worn_state = "pcrc" - gender_icons = 1 - -/obj/item/clothing/under/pcrcsuit - name = "\improper PCRC suit" - desc = "A suit belonging to Proxima Centauri Risk Control, a private security firm. This one looks more formal than its utility counterpart." - icon_state = "pcrcsuit" - item_state = "jensensuit" - worn_state = "pcrcsuit" - gender_icons = 1 - -/obj/item/clothing/under/grayson - name = "\improper Grayson overalls" - desc = "A set of overalls belonging to Grayson Manufactories, a manufacturing and mining company." - icon_state = "grayson" - worn_state = "grayson" - -/obj/item/clothing/under/wardt - name = "\improper Ward-Takahashi jumpsuit" - desc = "A jumpsuit belonging to Ward-Takahashi, a megacorp in the consumer goods and research market." - icon_state = "wardt" - worn_state = "wardt" - gender_icons = 1 - -/obj/item/clothing/under/dais - name = "\improper Deimos Advanced Information Systems uniform" - desc = "The uniform of Deimos Advanced Information Systems, an IT company." - icon_state = "dais" - worn_state = "dais" - -/obj/item/clothing/under/mbill - name = "\improper Major Bill's uniform" - desc = "A uniform belonging to Major Bill's Transportation, a major shipping company." - icon_state = "mbill" - worn_state = "mbill" - gender_icons = 1 - -/obj/item/clothing/under/morpheus - name = "\improper Morpheus Cyberkinetics uniform" - desc = "A pair of overalls belonging to Morpheus Cyberkinetics, an IPC manufacturing company. It doesn't look like it would be comfortable on a human." - icon_state = "morpheus" - worn_state = "morpheus" - -/obj/item/clothing/under/skinner - name = "\improper Skinner Catering uniform" - desc = "A uniform belonging to Skinner's Catering, a dining company." - icon_state = "skinner" - worn_state = "skinner" - -// Replace this with actual uniform when someone wants to sprite one -/obj/item/clothing/under/confederacy - name = "\improper Confederate uniform" - desc = "A military uniform belonging to the Gilgamesh Colonial Confederation, an independent human government." - icon_state = "confed" - worn_state = "confed" - -/obj/item/clothing/under/saare - name = "\improper SAARE uniform" - desc = "A uniform belonging to Strategic Assault and Asset Retention Enterprises, a minor private military corporation." - icon_state = "saare" - worn_state = "saare" - gender_icons = 1 - -/obj/item/clothing/under/frontier - name = "frontier clothes" - desc = "A rugged flannel shirt and denim overalls. A popular style among frontier colonists." - icon_state = "frontier" - worn_state = "frontier" - -/obj/item/clothing/under/aether - name = "\improper Aether jumpsuit" - desc = "A jumpsuit belonging to Aether Atmospherics and Recycling, a company that supplies recycling and atmospheric systems to colonies." - icon_state = "aether" - worn_state = "aether" - gender_icons = 1 - -/obj/item/clothing/under/focal - name = "\improper Focal Point jumpsuit" - desc = "A jumpsuit belonging to Focal Point Energistics, an engineering corporation." - icon_state = "focal" - worn_state = "focal" - -/obj/item/clothing/under/hephaestus - name = "\improper Hephaestus jumpsuit" - desc = "A jumpsuit belonging to Hephaestus Industries, a megacorp best known for its arms production." - icon_state = "heph" - worn_state = "heph" - gender_icons = 1 - -/obj/item/clothing/under/punpun - name = "fancy uniform" - desc = "It looks like it was tailored for a monkey." - icon_state = "punpun" - worn_state = "punpun" - species_restricted = list(SPECIES_MONKEY) - sprite_sheets = list("Monkey" = 'icons/mob/species/monkey/onmob_under_monkey.dmi') - -/obj/item/clothing/under/punpants - name = "monkey pants" - desc = "It looks like it was tailored for a monkey." - icon_state = "jeansmustang" - worn_state = "jeansmustang" - species_restricted = list(SPECIES_MONKEY) - sprite_sheets = list("Monkey" = 'icons/mob/species/monkey/onmob_under_monkey.dmi') - -/obj/item/clothing/under/rank/psych/turtleneck/sweater - desc = "A warm looking sweater and a pair of dark blue slacks." - name = "sweater" - icon_state = "turtleneck" - worn_state = "turtleneck" - -/obj/item/clothing/under/savage_hunter - name = "savage hunter's hides" - desc = "Makeshift hides bound together with the sinew, packwax, and leather of some alien creature." - icon_state = "hunterhide" - item_state = "hunter" - worn_state = "hunter" - body_parts_covered = LOWER_TORSO|LEGS|ARMS - -/obj/item/clothing/under/savage_hunter/female - name = "savage huntress's hides" - desc = "Makeshift hides bound together with the sinew, packwax, and leather of some alien creature. Includes a chestwrap so as not to leave one topless." - worn_state = "huntress" - body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS - -/obj/item/clothing/under/wetsuit - name = "tactical wetsuit" - desc = "For when you want to scuba dive your way into an enemy base but still want to show off a little skin." - icon_state = "wetsuit" - item_state = "wetsuit" - worn_state = "wetsuit" - body_parts_covered = UPPER_TORSO|LOWER_TORSO - -/obj/item/clothing/under/hazard - name = "hazard jumpsuit" - desc = "A high visibility jumpsuit made from heat and radiation resistant materials." - icon_state = "hazard" - item_state = "engi_suit" - worn_state = "hazard" - gender_icons = 1 - siemens_coefficient = 0.8 - armor = list( - energy = ARMOR_ENERGY_SMALL, - rad = ARMOR_RAD_MINOR - ) - max_heat_protection_temperature = FIRESUIT_MAX_HEAT_PROTECTION_TEMPERATURE - -/obj/item/clothing/under/sterile - name = "sterile jumpsuit" - desc = "A sterile white jumpsuit with medical markings. Protects against all manner of biohazards." - icon_state = "sterile" - item_state = "w_suit" - worn_state = "sterile" - gender_icons = 1 - permeability_coefficient = 0.50 - armor = list( - bio = ARMOR_BIO_SMALL - ) - -/obj/item/clothing/under/sterile/emrs - name = "medical uniform" - desc = "An uniform worn in emergency medical and reanimation services across human space." - icon_state = "medical_Uniform" - item_state = "medical_Uniform" - worn_state = "medical_Uniform" - -/obj/item/clothing/under/kimono - desc = "A traditional robe with remarkably long sleeves, mostly worn by women. Sugoi." - name = "kimono" - icon_state = "kimono" - worn_state = "kimono" - body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS diff --git a/code/modules/clothing/under/shorts.dm b/code/modules/clothing/under/shorts.dm deleted file mode 100644 index 7e3af206df21c..0000000000000 --- a/code/modules/clothing/under/shorts.dm +++ /dev/null @@ -1,104 +0,0 @@ -//Shorts - new shorts of this type go in pants.dmi - -/obj/item/clothing/under/shorts - name = "athletic shorts" - icon_state = "shorts" - desc = "95% Polyester, 5% Spandex!" - gender = PLURAL - body_parts_covered = LOWER_TORSO - item_icons = list(slot_w_uniform_str = 'icons/mob/onmob/onmob_under_pants.dmi') - sprite_sheets = list( - SPECIES_UNATHI = 'icons/mob/species/unathi/generated/onmob_under_pants_unathi.dmi', - ) - -/obj/item/clothing/under/shorts/red - name = "red athletic shorts" - color = "#a81818" - -/obj/item/clothing/under/shorts/green - name = "green athletic shorts" - color = "#3c1818" - -/obj/item/clothing/under/shorts/blue - name = "blue athletic shorts" - color = "#183ca8" - -/obj/item/clothing/under/shorts/black - name = "black athletic shorts" - color = "#262626" - -/obj/item/clothing/under/shorts/grey - name = "grey athletic shorts" - color = "#b2b2b2" - -/obj/item/clothing/under/shorts/jeans - name = "jeans shorts" - desc = "Some jeans! Just in short form!" - icon_state = "jeans_shorts" - worn_state = "jeans_shorts" - -/obj/item/clothing/under/shorts/jeans/female - name = "jeans short shorts" - icon_state = "jeans_shorts_f" - worn_state = "jeans_shorts_f" - -/obj/item/clothing/under/shorts/jeans/classic - name = "classic jeans shorts" - icon_state = "jeansclassic_shorts" - worn_state = "jeansclassic_shorts" - -/obj/item/clothing/under/shorts/jeans/classic/female - name = "classic jeans short shorts" - icon_state = "jeansclassic_shorts_f" - worn_state = "jeansclassic_shorts_f" - -/obj/item/clothing/under/shorts/jeans/mustang - name = "mustang jeans shorts" - icon_state = "jeansmustang_shorts" - worn_state = "jeansmustang_shorts" - -/obj/item/clothing/under/shorts/jeans/mustang/female - name = "mustang jeans short shorts" - icon_state = "jeansmustang_shorts_f" - worn_state = "jeansmustang_shorts_f" - -/obj/item/clothing/under/shorts/jeans/youngfolks - name = "young folks jeans shorts" - icon_state = "jeansyoungfolks_shorts" - worn_state = "jeansyoungfolks_shorts" - -/obj/item/clothing/under/shorts/jeans/youngfolks/female - name = "young folks jeans short shorts" - icon_state = "jeansyoungfolks_shorts_f" - worn_state = "jeansyoungfolks_shorts_f" - -/obj/item/clothing/under/shorts/jeans/black - name = "black jeans shorts" - icon_state = "blackpants_shorts" - worn_state = "blackpants_shorts" - -/obj/item/clothing/under/shorts/jeans/black/female - name = "black jeans short shorts" - icon_state = "black_shorts_f" - worn_state = "black_shorts_f" - -/obj/item/clothing/under/shorts/jeans/grey - name = "grey jeans shorts" - icon_state = "greypants_shorts" - worn_state = "greypants_shorts" - -/obj/item/clothing/under/shorts/jeans/grey/female - name = "grey jeans short shorts" - icon_state = "grey_shorts_f" - worn_state = "grey_shorts_f" - -/obj/item/clothing/under/shorts/khaki - name = "khaki shorts" - desc = "For that island getaway. It's five o'clock somewhere, right?" - icon_state = "tanpants_shorts" - worn_state = "tanpants_shorts" - -/obj/item/clothing/under/shorts/khaki/female - name = "khaki short shorts" - icon_state = "khaki_shorts_f" - worn_state = "khaki_shorts_f" \ No newline at end of file diff --git a/code/modules/clothing/under/skirts.dm b/code/modules/clothing/under/skirts.dm deleted file mode 100644 index 780aa61a1b79a..0000000000000 --- a/code/modules/clothing/under/skirts.dm +++ /dev/null @@ -1,99 +0,0 @@ -/obj/item/clothing/under/skirt - name = "black skirt" - desc = "A black skirt, very fancy!" - icon_state = "blackskirt" - item_state = "bl_suit" - worn_state = "blackskirt" - body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS - rolled_sleeves = -1 - -/obj/item/clothing/under/skirt/plaid_blue - name = "blue plaid skirt" - desc = "A preppy blue skirt with a white blouse." - icon_state = "plaid_blue" - worn_state = "plaid_blue" - -/obj/item/clothing/under/skirt/plaid_red - name = "red plaid skirt" - desc = "A preppy red skirt with a white blouse." - icon_state = "plaid_red" - item_state = "kilt" - worn_state = "plaid_red" - -/obj/item/clothing/under/skirt/plaid_purple - name = "blue purple skirt" - desc = "A preppy purple skirt with a white blouse." - icon_state = "plaid_purple" - item_state = "kilt" - worn_state = "plaid_purple" - -// discreet skirts, dont cover upper/arms etc -/obj/item/clothing/under/skirt/khaki - name = "khaki skirt" - desc = "A khaki skirt with a flare at the hem." - icon_state = "skirt_khaki" - worn_state = "skirt_khaki" - body_parts_covered = LOWER_TORSO - -/obj/item/clothing/under/skirt/swept - name = "swept skirt" - desc = "A skirt that is swept to one side." - icon_state = "skirt_swept" - worn_state = "skirt_swept" - body_parts_covered = LOWER_TORSO - -// colour selection, needs to be different for loadout type selection - -/obj/item/clothing/under/skirt_c - name = "short skirt" - desc = "A short skirt, made of some semi-gloss material." - icon_state = "skirt_short" - worn_state = "skirt_short" - body_parts_covered = LOWER_TORSO - -// dresses -/obj/item/clothing/under/skirt_c/dress - name = "short dress" - desc = "A short plain sleeveless dress." - icon_state = "shortdress" - worn_state = "shortdress" - body_parts_covered = UPPER_TORSO|LOWER_TORSO - -/obj/item/clothing/under/skirt_c/dress/long - name = "maxi dress" - desc = "A sleeveless dress that reaches the wearer's ankles." - icon_state = "longdress" - worn_state = "longdress" - flags_inv = HIDESHOES - body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|FEET - -/obj/item/clothing/under/skirt_c/dress/long/gown - name = "silk gown" - desc = "A long silky sleeveless gown with a flared hem." - icon_state = "gowndress" - worn_state = "gowndress" - -// some preset dresses for uniform vendors -/obj/item/clothing/under/skirt_c/dress/black - name = "black short dress" - color = "#181818" - -/obj/item/clothing/under/skirt_c/dress/long/black - name = "black maxi dress" - color = "#181818" - -/obj/item/clothing/under/skirt_c/dress/eggshell - name = "eggshell short dress" - color = "#f0ead6" - -/obj/item/clothing/under/skirt_c/dress/long/eggshell - name = "eggshell maxi dress" - color = "#f0ead6" - -/obj/item/clothing/under/skirt_c/dress/mintcream - name = "mint short dress" - color = "#dcffed" - -/obj/item/clothing/under/skirt_c/dress/long/mintcream - name = "mint maxi dress" - color = "#dcffed" \ No newline at end of file diff --git a/code/modules/clothing/under/syndicate.dm b/code/modules/clothing/under/syndicate.dm deleted file mode 100644 index 2bf4a948a49b5..0000000000000 --- a/code/modules/clothing/under/syndicate.dm +++ /dev/null @@ -1,35 +0,0 @@ -/obj/item/clothing/under/syndicate - name = "tactical turtleneck" - desc = "It's some non-descript, slightly suspicious looking, civilian clothing." - icon_state = "syndicate" - item_state = "bl_suit" - worn_state = "syndicate" - has_sensor = 0 - gender_icons = 1 - armor = list( - melee = ARMOR_MELEE_SMALL, - bullet = ARMOR_BALLISTIC_MINOR, - laser = ARMOR_LASER_MINOR - ) - siemens_coefficient = 0.9 - -/obj/item/clothing/under/syndicate/combat - name = "combat turtleneck" - desc = "The height of fashion and tactical utility." - icon_state = "combat" - item_state = "bl_suit" - worn_state = "combat" - gender_icons = 1 - has_sensor = SUIT_HAS_SENSORS - -/obj/item/clothing/under/syndicate/tacticool - name = "\improper Tacticool turtleneck" - desc = "Just looking at it makes you want to buy an SKS, go into the woods, and -operate-." - icon_state = "tactifool" - item_state = "bl_suit" - worn_state = "tactifool" - armor = null - siemens_coefficient = 1 - has_sensor = SUIT_HAS_SENSORS - - diff --git a/code/modules/clothing/underwear/base.dm b/code/modules/clothing/underwear/base.dm deleted file mode 100644 index c79853188fa28..0000000000000 --- a/code/modules/clothing/underwear/base.dm +++ /dev/null @@ -1,121 +0,0 @@ -/obj/item/underwear - item_flags = ITEM_FLAG_WASHER_ALLOWED - w_class = ITEM_SIZE_TINY - var/required_slot_flags - var/required_free_body_parts - -/obj/item/underwear/afterattack(var/atom/target, var/mob/user, var/proximity) - if(!proximity) - return // Might as well check - DelayedEquipUnderwear(user, target) - -/obj/item/underwear/MouseDrop(var/atom/target) - DelayedEquipUnderwear(usr, target) - -/obj/item/underwear/proc/CanEquipUnderwear(var/mob/user, var/mob/living/carbon/human/H) - if(!CanAdjustUnderwear(user, H, "put on")) - return FALSE - if(!(H.species && (H.species.appearance_flags & HAS_UNDERWEAR))) - to_chat(user, "\The [H]'s species cannot wear underwear of this nature.") - return FALSE - if(is_path_in_list(type, H.worn_underwear)) - to_chat(user, "\The [H] is already wearing underwear of this nature.") - return FALSE - return TRUE - -/obj/item/underwear/proc/CanRemoveUnderwear(var/mob/user, var/mob/living/carbon/human/H) - if(!CanAdjustUnderwear(user, H, "remove")) - return FALSE - if(!(src in H.worn_underwear)) - to_chat(user, "\The [H] isn't wearing \the [src].") - return FALSE - return TRUE - -/obj/item/underwear/proc/CanAdjustUnderwear(var/mob/user, var/mob/living/carbon/human/H, var/adjustment_verb) - if(!istype(H)) - return FALSE - if(user != H && !CanPhysicallyInteractWith(user, H)) - return FALSE - - var/list/covering_items = H.get_covering_equipped_items(required_free_body_parts) - if(covering_items.len) - var/obj/item/I = covering_items[1] - var/datum/gender/G = gender_datums[I.gender] - if(adjustment_verb) - to_chat(user, "Cannot [adjustment_verb] \the [src]. [english_list(covering_items)] [covering_items.len == 1 ? G.is : "are"] in the way.") - return FALSE - - return TRUE - -/obj/item/underwear/proc/DelayedRemoveUnderwear(var/mob/user, var/mob/living/carbon/human/H) - if(!CanRemoveUnderwear(user, H)) - return - if(user != H) - visible_message("\The [user] is trying to remove \the [H]'s [name]!") - if(!do_after(user, HUMAN_STRIP_DELAY, H, do_flags = DO_DEFAULT | DO_USER_UNIQUE_ACT | DO_PUBLIC_PROGRESS)) - return FALSE - . = RemoveUnderwear(user, H) - if(. && user != H) - user.visible_message("\The [user] has removed \the [src] from \the [H].", "You have removed \the [src] from \the [H].") - admin_attack_log(user, H, "Removed \a [src]", "Had \a [src] removed.", "removed \a [src] from") - -/obj/item/underwear/proc/DelayedEquipUnderwear(var/mob/user, var/mob/living/carbon/human/H) - if(!CanEquipUnderwear(user, H)) - return - if(user != H) - user.visible_message("\The [user] has begun putting on \a [src] on \the [H].", "You begin putting on \the [src] on \the [H].") - if(!do_after(user, HUMAN_STRIP_DELAY, H, do_flags = DO_DEFAULT | DO_USER_UNIQUE_ACT | DO_PUBLIC_PROGRESS)) - return FALSE - . = EquipUnderwear(user, H) - if(. && user != H) - user.visible_message("\The [user] has put \the [src] on \the [H].", "You have put \the [src] on \the [H].") - admin_attack_log(user, H, "Put on \a [src]", "Had \a [src] put on.", "put on \a [src] on") - -/obj/item/underwear/proc/EquipUnderwear(var/mob/user, var/mob/living/carbon/human/H) - if(!CanEquipUnderwear(user, H)) - return FALSE - if(!user.unEquip(src)) - return FALSE - return ForceEquipUnderwear(H) - -/obj/item/underwear/proc/ForceEquipUnderwear(var/mob/living/carbon/human/H, var/update_icons = TRUE) - // No matter how forceful, we still don't allow multiples of the same underwear type - if(is_path_in_list(type, H.worn_underwear)) - return FALSE - - H.worn_underwear += src - forceMove(H) - if(update_icons) - H.update_underwear() - - return TRUE - -/obj/item/underwear/proc/RemoveUnderwear(var/mob/user, var/mob/living/carbon/human/H) - if(!CanRemoveUnderwear(user, H)) - return FALSE - - H.worn_underwear -= src - dropInto(H.loc) - user.put_in_hands(src) - H.update_underwear() - - return TRUE - -/obj/item/underwear/verb/RemoveSocks() - set name = "Remove Underwear" - set category = "Object" - set src in usr - - RemoveUnderwear(usr, usr) - -/obj/item/underwear/socks - required_free_body_parts = FEET - -/obj/item/underwear/top - required_free_body_parts = UPPER_TORSO - -/obj/item/underwear/bottom - required_free_body_parts = FEET|LEGS|LOWER_TORSO - -/obj/item/underwear/undershirt - required_free_body_parts = UPPER_TORSO diff --git a/code/modules/codex/categories/_category.dm b/code/modules/codex/categories/_category.dm deleted file mode 100644 index 1803037092b61..0000000000000 --- a/code/modules/codex/categories/_category.dm +++ /dev/null @@ -1,16 +0,0 @@ -/datum/codex_category - var/name = "Generic Category" - var/desc = "Some description for a category's codex entry." - var/list/items = list() - -//Children should call ..() at the end after filling the items list -/datum/codex_category/proc/Initialize() - if(items.len) - var/datum/codex_entry/entry = new(_display_name = "[name] (category)") - entry.lore_text = desc + "
              " - var/list/links = list() - for(var/item in items) - links+= "[item]" - entry.lore_text += jointext(links, "
              ") - SScodex.add_entry_by_string(lowertext(entry.display_name), entry) - diff --git a/code/modules/codex/categories/category_cultures.dm b/code/modules/codex/categories/category_cultures.dm deleted file mode 100644 index 9be41ca14311e..0000000000000 --- a/code/modules/codex/categories/category_cultures.dm +++ /dev/null @@ -1,15 +0,0 @@ -/datum/codex_category/cultures - name = "Factions and Culture" - desc = "Prominent planets, cultures, factions and religions of known space." - -/datum/codex_category/cultures/Initialize() - - for(var/thing in SSculture.cultural_info_by_name) - var/decl/cultural_info/culture = SSculture.cultural_info_by_name[thing] - if(!culture.hidden_from_codex) - var/datum/codex_entry/entry = new(_display_name = "[culture.name] ([lowertext(culture.desc_type)])") - entry.lore_text = culture.description - entry.update_links() - SScodex.add_entry_by_string(culture.name, entry) - items += culture.name - ..() \ No newline at end of file diff --git a/code/modules/codex/categories/category_gases.dm b/code/modules/codex/categories/category_gases.dm deleted file mode 100644 index b43b3758fb267..0000000000000 --- a/code/modules/codex/categories/category_gases.dm +++ /dev/null @@ -1,28 +0,0 @@ -/datum/codex_category/gases - name = "Gases" - desc = "Notable gases." - -/datum/codex_category/gases/Initialize() - for(var/gas in gas_data.gases) - if(gas_data.hidden_from_codex[gas]) - continue - - var/list/gas_info = list() - gas_info+= "Specific heat: [gas_data.specific_heat[gas]] J/(mol*K)." - gas_info+= "Molar mass: [gas_data.molar_mass[gas]] kg/mol." - if(gas_data.flags[gas] & XGM_GAS_FUEL) - gas_info+= "It is flammable." - gas_info+= "Produces [gas_data.name[gas_data.burn_product[gas]]] when burned." - if(gas_data.flags[gas] & XGM_GAS_OXIDIZER) - gas_info+= "It is an oxidizer, required to sustain fire." - if(gas_data.flags[gas] & XGM_GAS_CONTAMINANT) - gas_info+= "It contaminates exposed clothing with residue." - if(gas_data.flags[gas] & XGM_GAS_FUSION_FUEL) - gas_info+= "It can be used as fuel in a fusion reaction." - if(gas_data.condensation_points[gas]) - var/datum/reagent/product = gas_data.condensation_products[gas] - gas_info+= "At [gas_data.condensation_points[gas]] K it condenses into [initial(product.name)]." - var/datum/codex_entry/entry = new(_display_name = lowertext(trim("[gas_data.name[gas]] (gas)")), _mechanics_text = jointext(gas_info, "
              ")) - SScodex.add_entry_by_string(entry.display_name, entry) - items += entry.display_name - ..() \ No newline at end of file diff --git a/code/modules/codex/categories/category_languages.dm b/code/modules/codex/categories/category_languages.dm deleted file mode 100644 index 61aaa30d19293..0000000000000 --- a/code/modules/codex/categories/category_languages.dm +++ /dev/null @@ -1,38 +0,0 @@ -/datum/codex_category/languages - name = "Languages" - desc = "Languages spoken in known space." - -/datum/codex_category/languages/Initialize() - var/example_line = "This is just some random words. What did you expect here? Hah hah!" - for(var/langname in all_languages) - var/datum/language/L = all_languages[langname] - if(L.hidden_from_codex) - continue - if(L.type == L.category) - continue - var/list/lang_info = list() - var/decl/prefix/P = /decl/prefix/language - lang_info += "Key to use it: '[initial(P.default_key)][L.key]'" - if(L.flags & NONVERBAL) - lang_info += "It has a significant non-verbal component. Speech is garbled without line-of-sight." - if(L.flags & SIGNLANG) - lang_info += "It is completely non-verbal, using gestures or signs to communicate." - if(L.flags & HIVEMIND) - lang_info += "It's a 'hivemind' language, broadcasted to all creatures who understand it." - if(L.flags & NO_STUTTER) - lang_info += "It will not be affected by speech impediments." - - var/list/lang_lore = list(L.desc) - lang_lore += "Shorthand: '[L.shorthand]'" - if(!(L.flags & (SIGNLANG|NONVERBAL|HIVEMIND))) - var/lang_example = L.format_message(L.scramble(example_line), L.speech_verb) - lang_lore += "It sounds like this:" - lang_lore += "" - lang_lore += "CodexBot [lang_example]" - - var/datum/codex_entry/entry = new(_display_name = "[L.name] (language)", _lore_text = jointext(lang_lore, "
              "), _mechanics_text = jointext(lang_info, "
              ")) - entry.associated_strings += L.name - entry.associated_strings += L.shorthand - SScodex.add_entry_by_string(entry.display_name, entry) - items += entry.display_name - ..() \ No newline at end of file diff --git a/code/modules/codex/categories/category_materials.dm b/code/modules/codex/categories/category_materials.dm deleted file mode 100644 index b8f6f2260c4aa..0000000000000 --- a/code/modules/codex/categories/category_materials.dm +++ /dev/null @@ -1,97 +0,0 @@ -/datum/codex_category/materials - name = "Materials" - desc = "Various natural and artificial materials." - -/datum/codex_category/materials/Initialize() - for(var/thing in SSmaterials.materials) - var/material/mat = thing - if(!mat.hidden_from_codex) - var/datum/codex_entry/entry = new(_display_name = "[mat.display_name] (material)") - entry.lore_text = mat.lore_text - entry.antag_text = mat.antag_text - var/list/material_info = list(mat.mechanics_text) - - material_info += "Its melting point is [mat.melting_point] K." - - if(mat.brute_armor < 2) - material_info += "It is weak to physical impacts." - else if(mat.brute_armor > 2) - material_info += "It is [mat.brute_armor > 4 ? "very " : null]resistant to physical impacts." - else - material_info += "It has average resistance to physical impacts." - - if(mat.burn_armor < 2) - material_info += "It is weak to applied energy." - else if(mat.burn_armor > 2) - material_info += "It is [mat.burn_armor > 4 ? "very " : null]resistant to applied energy." - else - material_info += "It has average resistance to applied energy." - - if(mat.conductive) - material_info += "It conducts electricity." - else - material_info += "It does not conduct electricity." - - if(mat.opacity < 0.5) - material_info += "It is transparent." - - if(mat.weight <= MATERIAL_LIGHT) - material_info += "It is very light." - else if(mat.weight >= MATERIAL_HEAVY) - material_info += "It is very heavy." - else - material_info += "It is of average weight." - - var/material/steel = SSmaterials.materials_by_name[MATERIAL_STEEL] - var/comparison = round(mat.hardness / steel.hardness, 0.1) - if(comparison >= 0.9 && comparison <= 1.1) - material_info += "It is as hard as steel." - else if (comparison < 0.9) - comparison = round(1/max(comparison,0.01),0.1) - material_info += "It is ~[comparison] times softer than steel." - else - material_info += "It is ~[comparison] times harder than steel." - - comparison = round(mat.integrity / steel.integrity, 0.1) - if(comparison >= 0.9 && comparison <= 1.1) - material_info += "It is as durable as steel." - else if (comparison < 0.9) - comparison = round(1/comparison,0.1) - material_info += "It is ~[comparison] times structurally weaker than steel." - else - material_info += "It is ~[comparison] times more durable than steel." - - if(LAZYLEN(mat.chem_products)) - var/chems = list() - for(var/chemial in mat.chem_products) - var/datum/reagent/R = chemial - chems += "[initial(R.name)] ([mat.chem_products[chemial]]u)" - material_info += "The following chemicals can be extracted from it (per [mat.sheet_singular_name]):
              [english_list(chems)]" - - if(LAZYLEN(mat.alloy_materials)) - var/parts = list() - for(var/alloy_part in mat.alloy_materials) - var/material/part = SSmaterials.materials_by_name[alloy_part] - parts += "[mat.alloy_materials[alloy_part]]u [part.display_name]" - material_info += "It is an alloy of the following materials: [english_list(parts)]" - - if(mat.radioactivity) - material_info += "It is radioactive." - - if(mat.is_fusion_fuel) - material_info += "It can be used as fusion fuel." - - if(mat.flags & MATERIAL_UNMELTABLE) - material_info += "It is impossible to melt." - - if(mat.flags & MATERIAL_BRITTLE) - material_info += "It is brittle and can shatter under strain." - - if(mat.flags & MATERIAL_PADDING) - material_info += "It can be used to pad furniture." - - entry.mechanics_text = jointext(material_info,"
              ") - entry.update_links() - SScodex.add_entry_by_string(entry.display_name, entry) - items += entry.display_name - ..() \ No newline at end of file diff --git a/code/modules/codex/categories/category_reagents.dm b/code/modules/codex/categories/category_reagents.dm deleted file mode 100644 index 0b87710913b09..0000000000000 --- a/code/modules/codex/categories/category_reagents.dm +++ /dev/null @@ -1,54 +0,0 @@ -/datum/codex_category/reagents - name = "Reagents" - desc = "Chemicals and reagents, both natural and artificial." - -/datum/codex_category/reagents/Initialize() - - for(var/thing in subtypesof(/datum/reagent)) - var/datum/reagent/reagent = thing - if(initial(reagent.hidden_from_codex)) - continue - var/chem_name = lowertext(initial(reagent.name)) - var/datum/codex_entry/entry = new( \ - _display_name = "[chem_name] (chemical)", \ - _associated_strings = list("[chem_name] pill"), \ - _lore_text = "[initial(reagent.description)] It apparently tastes of [initial(reagent.taste_description)].") - - var/list/production_strings = list() - for(var/react in SSchemistry.reactions_by_result[thing]) - - var/datum/chemical_reaction/reaction = react - - if(reaction.hidden_from_codex) - continue - - var/list/reactant_values = list() - for(var/reactant_id in reaction.required_reagents) - var/datum/reagent/reactant = reactant_id - reactant_values += "[reaction.required_reagents[reactant_id]]u [lowertext(initial(reactant.name))]" - - if(!reactant_values.len) - continue - - var/list/catalysts = list() - for(var/catalyst_id in reaction.catalysts) - var/datum/reagent/catalyst = catalyst_id - catalysts += "[reaction.catalysts[catalyst_id]]u [lowertext(initial(catalyst.name))]" - - var/datum/reagent/result = reaction.result - if(catalysts.len) - production_strings += "- [jointext(reactant_values, " + ")] (catalysts: [jointext(catalysts, ", ")]): [reaction.result_amount]u [lowertext(initial(result.name))]" - else - production_strings += "- [jointext(reactant_values, " + ")]: [reaction.result_amount]u [lowertext(initial(result.name))]" - - if(production_strings.len) - if(!entry.mechanics_text) - entry.mechanics_text = "It can be produced as follows:
              " - else - entry.mechanics_text += "

              It can be produced as follows:
              " - entry.mechanics_text += jointext(production_strings, "
              ") - - entry.update_links() - SScodex.add_entry_by_string(entry.display_name, entry) - items += entry.display_name - ..() \ No newline at end of file diff --git a/code/modules/codex/categories/category_recipes.dm b/code/modules/codex/categories/category_recipes.dm deleted file mode 100644 index d1c4957d8be5c..0000000000000 --- a/code/modules/codex/categories/category_recipes.dm +++ /dev/null @@ -1,42 +0,0 @@ -/datum/codex_category/recipes - name = "Recipes" - desc = "Recipes for a variety of reagents." - -/datum/codex_category/recipes/Initialize() - for(var/datum/recipe/recipe in GLOB.microwave_recipes) - if(recipe.hidden_from_codex || !recipe.result) - continue - - var/mechanics_text = "" - if(recipe.mechanics_text) - mechanics_text = "[recipe.mechanics_text]

              " - mechanics_text += "This recipe requires the following ingredients:
                " - for(var/thing in recipe.reagents) - var/datum/reagent/thing_reagent = thing - mechanics_text += "
              • [recipe.reagents[thing]]u [initial(thing_reagent.name)]
              • " - for(var/thing in recipe.items) - var/atom/thing_atom = thing - mechanics_text += "
              • \a [initial(thing_atom.name)]
              • " - for(var/thing in recipe.fruit) - mechanics_text += "
              • [recipe.fruit[thing]] [thing]\s
              • " - mechanics_text += "
              " - var/atom/recipe_product = recipe.result - mechanics_text += "
              This recipe takes [Ceil(recipe.time/10)] second\s to cook in a microwave and creates \a [initial(recipe_product.name)]." - var/lore_text = recipe.lore_text - if(!lore_text) - lore_text = initial(recipe_product.desc) - var/recipe_name = recipe.display_name - if(!recipe_name) - recipe_name = sanitize(initial(recipe_product.name)) - - var/datum/codex_entry/entry = new( \ - _display_name = "[recipe_name] (recipe)", \ - _associated_strings = list(lowertext(recipe_name)), \ - _lore_text = lore_text, \ - _mechanics_text = mechanics_text, \ - _antag_text = recipe.antag_text \ - ) - entry.update_links() - SScodex.add_entry_by_string(entry.display_name, entry) - items += entry.display_name - ..() diff --git a/code/modules/codex/categories/category_skills.dm b/code/modules/codex/categories/category_skills.dm deleted file mode 100644 index 305dbed7f1f4c..0000000000000 --- a/code/modules/codex/categories/category_skills.dm +++ /dev/null @@ -1,20 +0,0 @@ -/datum/codex_category/skills - name = "Skills" - desc = "Certifiable skills." - -/datum/codex_category/skills/Initialize() - for(var/decl/hierarchy/skill/skill in GLOB.skills) - var/list/skill_info = list() - if(skill.prerequisites) - var/list/reqs = list() - for(var/req in skill.prerequisites) - var/decl/hierarchy/skill/skill_req = decls_repository.get_decl(req) - reqs += "[skill_req.levels[skill.prerequisites[req]]] [skill_req.name]" - skill_info += "Prerequisites: [english_list(reqs)]" - for(var/level in skill.levels) - skill_info += "

              [level]

              [skill.levels[level]]" - var/datum/codex_entry/entry = new(_display_name = lowertext(trim("[skill.name] (skill)")), _lore_text = skill.desc, _mechanics_text = jointext(skill_info, "
              ")) - SScodex.add_entry_by_string(entry.display_name, entry) - SScodex.add_entry_by_string(skill.name, entry) - items += skill.name - ..() \ No newline at end of file diff --git a/code/modules/codex/categories/category_species.dm b/code/modules/codex/categories/category_species.dm deleted file mode 100644 index 51b3efa04ebd7..0000000000000 --- a/code/modules/codex/categories/category_species.dm +++ /dev/null @@ -1,16 +0,0 @@ -/datum/codex_category/species - name = "Species" - desc = "Sapient species encountered in known space." - -/datum/codex_category/species/Initialize() - for(var/thing in all_species) - var/datum/species/species = all_species[thing] - if(!species.hidden_from_codex) - var/datum/codex_entry/entry = new(_display_name = "[species.name] (species)") - entry.lore_text = species.codex_description - entry.mechanics_text = species.ooc_codex_information - entry.update_links() - SScodex.add_entry_by_string(entry.display_name, entry) - SScodex.add_entry_by_string(species.name, entry) - items += entry.display_name - ..() diff --git a/code/modules/codex/codex_atom.dm b/code/modules/codex/codex_atom.dm deleted file mode 100644 index 3e9400b87db31..0000000000000 --- a/code/modules/codex/codex_atom.dm +++ /dev/null @@ -1,31 +0,0 @@ -/atom/proc/get_codex_value() - return src - -/atom/proc/get_specific_codex_entry() - if(SScodex.entries_by_path[type]) - return SScodex.entries_by_path[type] - - var/lore = get_lore_info() - var/mechanics = get_mechanics_info() - var/antag = get_antag_info() - if(!lore && !mechanics && !antag) - return FALSE - - var/datum/codex_entry/entry = new(name, list(type), _lore_text = lore, _mechanics_text = mechanics, _antag_text = antag) - return entry - -/atom/proc/get_mechanics_info() - return - -/atom/proc/get_antag_info() - return - -/atom/proc/get_lore_info() - return - -/atom/examine(mob/user, distance, infix = "", suffix = "") - . = ..() - var/datum/codex_entry/entry = SScodex.get_codex_entry(get_codex_value()) - //This odd check v is done in case an item only has antag text but someone isn't an antag, in which case they shouldn't get the notice - if(entry && (entry.lore_text || entry.mechanics_text || (entry.antag_text && player_is_antag(user.mind))) && user.can_use_codex()) - to_chat(user, "The codex has relevant information available.") diff --git a/code/modules/codex/codex_client.dm b/code/modules/codex/codex_client.dm deleted file mode 100644 index a1ec128434898..0000000000000 --- a/code/modules/codex/codex_client.dm +++ /dev/null @@ -1,120 +0,0 @@ -/client - var/codex_on_cooldown = FALSE - var/const/max_codex_entries_shown = 10 - -/client/verb/search_codex(searching as text) - - set name = "Search Codex" - set category = "IC" - set src = usr - - if(!mob || !SScodex) - return - - if(codex_on_cooldown || !mob.can_use_codex()) - to_chat(src, SPAN_WARNING("You cannot perform codex actions currently.")) - return - - if(!searching) - searching = input("Enter a search string.", "Codex Search") as text|null - if(!searching) - return - - if(codex_on_cooldown || !mob.can_use_codex()) - to_chat(src, SPAN_WARNING("You cannot perform codex actions currently.")) - return - - codex_on_cooldown = TRUE - addtimer(CALLBACK(src, .proc/reset_codex_cooldown), 3 SECONDS) - - var/list/all_entries = SScodex.retrieve_entries_for_string(searching) - if(mob && mob.mind && !player_is_antag(mob.mind)) - all_entries = all_entries.Copy() // So we aren't messing with the codex search cache. - for(var/datum/codex_entry/entry in all_entries) - if(entry.antag_text && !entry.mechanics_text && !entry.lore_text) - all_entries -= entry - - //Put entries with match in the name first - for(var/datum/codex_entry/entry in all_entries) - if(findtext(entry.display_name, searching)) - all_entries -= entry - all_entries.Insert(1, entry) - - if(LAZYLEN(all_entries) == 1) - SScodex.present_codex_entry(mob, all_entries[1]) - else - if(LAZYLEN(all_entries) > 1) - var/list/codex_data = list("

              [all_entries.len] matches for '[searching]':

              ") - if(LAZYLEN(all_entries) > max_codex_entries_shown) - codex_data += "Showing first [max_codex_entries_shown] entries. [all_entries.len - 5] result\s omitted.
              " - codex_data += "" - for(var/i = 1 to min(all_entries.len, max_codex_entries_shown)) - var/datum/codex_entry/entry = all_entries[i] - codex_data += "" - codex_data += "
              [entry.display_name]View
              " - var/datum/browser/popup = new(mob, "codex-search", "Codex Search") - popup.set_content(jointext(codex_data, null)) - popup.open() - else - to_chat(src, SPAN_NOTICE("The codex reports no matches for '[searching]'.")) - -/client/verb/list_codex_entries() - - set name = "List Codex Entries" - set category = "IC" - set src = usr - - if(!mob || !SScodex.initialized) - return - - if(codex_on_cooldown || !mob.can_use_codex()) - to_chat(src, SPAN_WARNING("You cannot perform codex actions currently.")) - return - codex_on_cooldown = TRUE - addtimer(CALLBACK(src, .proc/reset_codex_cooldown), 10 SECONDS) - - to_chat(mob, SPAN_NOTICE("The codex forwards you an index file.")) - - var/datum/browser/popup = new(mob, "codex-index", "Codex Index") - var/list/codex_data = list("

              Codex Entries

              ") - codex_data += "" - - var/antag_check = mob && mob.mind && player_is_antag(mob.mind) - var/last_first_letter - for(var/thing in SScodex.index_file) - - var/datum/codex_entry/entry = SScodex.index_file[thing] - if(!antag_check && entry.antag_text && !entry.mechanics_text && !entry.lore_text) - continue - - var/first_letter = uppertext(copytext_char(thing, 1, 2)) - if(first_letter != last_first_letter) - last_first_letter = first_letter - codex_data += "" - codex_data += "" - codex_data += "" - codex_data += "" - codex_data += "

              [last_first_letter]

              [thing]View
              " - popup.set_content(jointext(codex_data, null)) - popup.open() - -/client/proc/reset_codex_cooldown() - codex_on_cooldown = FALSE - -/client/verb/codex() - set name = "Codex" - set category = "IC" - set src = usr - - if(!mob || !SScodex) - return - - if(codex_on_cooldown || !mob.can_use_codex()) - to_chat(src, SPAN_WARNING("You cannot perform codex actions currently.")) - return - - codex_on_cooldown = TRUE - addtimer(CALLBACK(src, .proc/reset_codex_cooldown), 3 SECONDS) - - var/datum/codex_entry/entry = SScodex.get_codex_entry("nexus") - SScodex.present_codex_entry(mob, entry) diff --git a/code/modules/codex/codex_implant.dm b/code/modules/codex/codex_implant.dm deleted file mode 100644 index 6918ebd175aca..0000000000000 --- a/code/modules/codex/codex_implant.dm +++ /dev/null @@ -1,11 +0,0 @@ -/obj/item/implanter/codex - name = "implanter (codex)" - imp = /obj/item/implant/codex - -/obj/item/implant/codex - name = "codex implant" - desc = "It has 'DON'T PANIC' embossed on the casing in friendly letters." - -/obj/item/implant/codex/implanted(var/mob/source) - . = ..(source) - to_chat(usr, "You feel the brief sensation of having an entire encyclopedia at the tip of your tongue as the codex implant meshes with your nervous system.") diff --git a/code/modules/codex/codex_mob.dm b/code/modules/codex/codex_mob.dm deleted file mode 100644 index b7b685f1212cf..0000000000000 --- a/code/modules/codex/codex_mob.dm +++ /dev/null @@ -1,17 +0,0 @@ -/mob/proc/can_use_codex() - return FALSE - -/mob/new_player/can_use_codex() - return TRUE - -/mob/living/silicon/can_use_codex() - return TRUE - -/mob/observer/can_use_codex() - return TRUE - -/mob/living/carbon/human/can_use_codex() - return TRUE //has_implant(/obj/item/implant/codex, functioning = TRUE) - -/mob/living/carbon/human/get_codex_value() - return "[lowertext(species.name)] (species)" \ No newline at end of file diff --git a/code/modules/codex/entries/_codex_entry.dm b/code/modules/codex/entries/_codex_entry.dm deleted file mode 100644 index e4ac9fb39e8f8..0000000000000 --- a/code/modules/codex/entries/_codex_entry.dm +++ /dev/null @@ -1,53 +0,0 @@ -/datum/codex_entry - var/display_name - var/list/associated_strings - var/list/associated_paths - var/lore_text - var/mechanics_text - var/antag_text - -/datum/codex_entry/dd_SortValue() - return display_name - -/datum/codex_entry/proc/update_links() - return - -/datum/codex_entry/New(var/_display_name, var/list/_associated_paths, var/list/_associated_strings, var/_lore_text, var/_mechanics_text, var/_antag_text) - - if(_display_name) display_name = _display_name - if(_associated_paths) associated_paths = _associated_paths - if(_associated_strings) associated_strings = _associated_strings - if(_lore_text) lore_text = _lore_text - if(_mechanics_text) mechanics_text = _mechanics_text - if(_antag_text) antag_text = _antag_text - - if(associated_paths && associated_paths.len) - for(var/tpath in associated_paths) - var/atom/thing = tpath - LAZYADD(associated_strings, sanitize(lowertext(initial(thing.name)))) - if(display_name) - LAZYADD(associated_strings, display_name) - else if(associated_strings && associated_strings.len) - display_name = associated_strings[1] - ..() - -/datum/codex_entry/proc/get_header(var/mob/presenting_to) - var/list/dat = list() - var/datum/codex_entry/linked_entry = SScodex.get_entry_by_string("nexus") - dat += "Home" - dat += "Search Codex" - dat += "List All Entries" - dat += "

              [display_name]

              " - return jointext(dat, null) - -/datum/codex_entry/proc/get_text(var/mob/presenting_to) - var/list/dat = list(get_header(presenting_to)) - if(lore_text) - dat += "[lore_text]" - if(mechanics_text) - dat += "

              OOC Information

              " - dat += "[mechanics_text]" - if(antag_text && presenting_to.mind && player_is_antag(presenting_to.mind)) - dat += "

              Antagonist Information

              " - dat += "[antag_text]" - return jointext(dat, null) diff --git a/code/modules/codex/entries/atmospherics.dm b/code/modules/codex/entries/atmospherics.dm deleted file mode 100644 index f6535938d70b8..0000000000000 --- a/code/modules/codex/entries/atmospherics.dm +++ /dev/null @@ -1,223 +0,0 @@ -/datum/codex_entry/atmos_pipe - associated_paths = list(/obj/machinery/atmospherics/pipe) - mechanics_text = "This pipe, and all other pipes, can be connected or disconnected by a wrench. The internal pressure of the pipe must \ - be below 300 kPa to do this. More pipes can be obtained from the pipe dispenser." - -//HE pipes -/datum/codex_entry/atmos_he - associated_paths = list(/obj/machinery/atmospherics/pipe/simple/heat_exchanging) - mechanics_text = "This radiates heat from the pipe's gas to space, cooling it down." - -//Supply/Scrubber pipes -/datum/codex_entry/atmos_visible_scrub - associated_paths = list(/obj/machinery/atmospherics/pipe/simple/visible/scrubbers) - mechanics_text = "This is a special 'scrubber' pipe, which does not connect to 'normal' pipes. If you want to connect it, use \ - a Universal Adapter pipe." - -/datum/codex_entry/atmos_visible_supply - associated_paths = list(/obj/machinery/atmospherics/pipe/simple/visible/supply) - mechanics_text = "This is a special 'supply' pipe, which does not connect to 'normal' pipes. If you want to connect it, use \ - a Universal Adapter pipe." - -/datum/codex_entry/atmos_hidden_supply - associated_paths = list(/obj/machinery/atmospherics/pipe/simple/hidden/supply) - mechanics_text = "This is a special 'supply' pipe, which does not connect to 'normal' pipes. If you want to connect it, use \ - a Universal Adapter pipe." - -/datum/codex_entry/atmos_hidden_scrub - associated_paths = list(/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers) - mechanics_text = "This is a special 'scrubber' pipe, which does not connect to 'normal' pipes. If you want to connect it, use \ - a Universal Adapter pipe." - -//Universal adapters -/datum/codex_entry/atmos_visible_universal - associated_paths = list(/obj/machinery/atmospherics/pipe/simple/visible/universal) - mechanics_text = "This allows you to connect 'normal' pipes, red 'scrubber' pipes, and blue 'supply' pipes." - -/datum/codex_entry/atmos_hidden_universal - associated_paths = list(/obj/machinery/atmospherics/pipe/simple/hidden/universal) - mechanics_text = "This allows you to connect 'normal' pipes, red 'scrubber' pipes, and blue 'supply' pipes." - -//Three way manifolds -/datum/codex_entry/atmos_manifold - associated_paths = list(/obj/machinery/atmospherics/pipe/manifold) - mechanics_text = "A normal pipe with three ends to connect to." - -/datum/codex_entry/atmos_manifold_visible_scrub - associated_paths = list(/obj/machinery/atmospherics/pipe/manifold/visible/scrubbers) - mechanics_text = "This is a special 'scrubber' pipe, which does not connect to 'normal' pipes. If you want to connect it, use \ - a Universal Adapter pipe." - -/datum/codex_entry/atmos_manifold_visible_supply - associated_paths = list(/obj/machinery/atmospherics/pipe/manifold/visible/supply) - mechanics_text = "This is a special 'supply' pipe, which does not connect to 'normal' pipes. If you want to connect it, use \ - a Universal Adapter pipe." - -/datum/codex_entry/atmos_manifold_hidden_scrub - associated_paths = list(/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers) - mechanics_text = "This is a special 'scrubber' pipe, which does not connect to 'normal' pipes. If you want to connect it, use \ - a Universal Adapter pipe." - -/datum/codex_entry/atmos_manifold_hidden_supply - associated_paths = list(/obj/machinery/atmospherics/pipe/manifold/hidden/supply) - mechanics_text = "This is a special 'supply' pipe, which does not connect to 'normal' pipes. If you want to connect it, use \ - a Universal Adapter pipe." - -//Four way manifolds -/datum/codex_entry/atmos_manifold_manifold_four - associated_paths = list(/obj/machinery/atmospherics/pipe/manifold4w) - mechanics_text = "This is a four-way pipe." - -/datum/codex_entry/atmos_manifold_manifold_four_visible_scrub - associated_paths = list(/obj/machinery/atmospherics/pipe/manifold4w/visible/scrubbers) - mechanics_text = "This is a special 'scrubber' pipe, which does not connect to 'normal' pipes. If you want to connect it, use \ - a Universal Adapter pipe." - -/datum/codex_entry/atmos_manifold_manifold_four_visible_supply - associated_paths = list(/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply) - mechanics_text = "This is a special 'supply' pipe, which does not connect to 'normal' pipes. If you want to connect it, use \ - a Universal Adapter pipe." - -/datum/codex_entry/atmos_manifold_manifold_four_hidden_scrub - associated_paths = list(/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers) - mechanics_text = "This is a special 'scrubber' pipe, which does not connect to 'normal' pipes. If you want to connect it, use \ - a Universal Adapter pipe." - -//Endcaps -/datum/codex_entry/atmos_cap - associated_paths = list(/obj/machinery/atmospherics/pipe/cap) - mechanics_text = "This is a cosmetic attachment, as pipes currently do not spill their contents into the air." - -//T-shaped valves -/datum/codex_entry/atmos_tvalve - associated_paths = list(/obj/machinery/atmospherics/tvalve) - mechanics_text = "Click this to toggle the mode. The direction with the green light is where the gas will flow." - -//Normal valves -/datum/codex_entry/atmos_valve - associated_paths = list(/obj/machinery/atmospherics/valve) - mechanics_text = "Click this to turn the valve. If red, the pipes on each end are seperated. Otherwise, they are connected." - -//Shutoff valves -/datum/codex_entry/atmos_shutoff - associated_paths = list(/obj/machinery/atmospherics/valve/shutoff, /obj/machinery/atmospherics/valve/shutoff/supply, /obj/machinery/atmospherics/valve/shutoff/scrubbers, /obj/machinery/atmospherics/valve/shutoff/fuel) - mechanics_text = "

              This valve automatically closes itself when a leak is detected in the connected pipe network.

              \ -

              A blinking red light will hint at the direction a leak has been detected.

              \ -

              You can click it to force it to stay opened, indicated by blinking yellow lights.

              " - -//TEG ports -/datum/codex_entry/atmos_circulator - associated_paths = list(/obj/machinery/atmospherics/binary/circulator) - mechanics_text = "This generates electricity, depending on the difference in temperature between each side of the machine. The meter in \ - the center of the machine gives an indicator of how much elecrtricity is being generated." - -//Passive gates -/datum/codex_entry/atmos_gate - associated_paths = list(/obj/machinery/atmospherics/binary/passive_gate) - mechanics_text = "This is a one-way regulator, allowing gas to flow only at a specific pressure and flow rate. If the light is green, it is flowing." - -//Normal pumps (high power one inherits from this) -/datum/codex_entry/atmos_pump - associated_paths = list(/obj/machinery/atmospherics/binary/pump) - mechanics_text = "This moves gas from one pipe to another. A higher target pressure demands more energy. The side with the red end is the output." - -//Vents -/datum/codex_entry/atmos_vent_pump - associated_paths = list(/obj/machinery/atmospherics/unary/vent_pump) - mechanics_text = "This pumps the contents of the attached pipe out into the atmosphere, if needed. It can be controlled from an Air Alarm." - -//Freezers -/datum/codex_entry/atmos_freezer - associated_paths = list(/obj/machinery/atmospherics/unary/freezer) - mechanics_text = "Cools down the gas of the pipe it is connected to. It uses massive amounts of electricity while on. \ - It can be upgraded by replacing the capacitors, manipulators, and matter bins. It can be deconstructed by screwing the maintenance panel open with a \ - screwdriver, and then using a crowbar." - -//Heaters -/datum/codex_entry/atmos_heater - associated_paths = list(/obj/machinery/atmospherics/unary/heater) - mechanics_text = "Heats up the gas of the pipe it is connected to. It uses massive amounts of electricity while on. \ - It can be upgraded by replacing the capacitors, manipulators, and matter bins. It can be deconstructed by screwing the maintenance panel open with a \ - screwdriver, and then using a crowbar." - -//Gas injectors -/datum/codex_entry/atmos_injector - associated_paths = list(/obj/machinery/atmospherics/unary/outlet_injector) - mechanics_text = "Outputs the pipe's gas into the atmosphere, similar to an airvent. It can be controlled by a nearby atmospherics computer. \ - A green light on it means it is on." - -//Scrubbers -/datum/codex_entry/atmos_vent_scrubber - associated_paths = list(/obj/machinery/atmospherics/unary/vent_scrubber) - mechanics_text = "This filters the atmosphere of harmful gas. Filtered gas goes to the pipes connected to it, typically a scrubber pipe. \ - It can be controlled from an Air Alarm. It can be configured to drain all air rapidly with a 'panic syphon' from an air alarm." - -//Omni filters -/datum/codex_entry/atmos_omni_filter - associated_paths = list(/obj/machinery/atmospherics/omni/filter) - mechanics_text = "Filters gas from a custom input direction, with up to two filtered outputs and a 'everything else' \ - output. The filtered output's arrows glow orange." - -//Omni mixers -/datum/codex_entry/atmos_omni_mixer - associated_paths = list(/obj/machinery/atmospherics/omni/mixer) - mechanics_text = "Combines gas from custom input and output directions. The percentage of combined gas can be defined." - -//Canisters -/datum/codex_entry/atmos_canister - display_name = "gas canister" // because otherwise it shows up as 'canister: [caution]' - associated_paths = list(/obj/machinery/portable_atmospherics/canister) - mechanics_text = "The canister can be connected to a connector port with a wrench. Tanks of gas (the kind you can hold in your hand) \ - can be filled by the canister, by using the tank on the canister, increasing the release pressure, then opening the valve until it is full, and then close it. \ - *DO NOT* remove the tank until the valve is closed. A gas analyzer can be used to check the contents of the canister." - antag_text = "Canisters can be damaged, spilling their contents into the air, or you can just leave the release valve open." - -//Portable pumps -/datum/codex_entry/atmos_power_pump - associated_paths = list(/obj/machinery/portable_atmospherics/powered/pump) - mechanics_text = "Invaluable for filling air in a room rapidly after a breach repair. The internal gas container can be filled by \ - connecting it to a connector port. The pump can pump the air in (sucking) or out (blowing), at a specific target pressure. The power cell inside can be \ - replaced by using a screwdriver, and then adding a new cell. A tank of gas can also be attached to the air pump." - -//Portable scrubbers -/datum/codex_entry/atmos_power_scrubber - associated_paths = list(/obj/machinery/portable_atmospherics/powered/scrubber) - mechanics_text = "Filters the air, placing harmful gases into the internal gas container. The container can be emptied by \ - connecting it to a connector port. The pump can pump the air in (sucking) or out (blowing), at a specific target pressure. The power cell inside can be \ - replaced by using a screwdriver, and then adding a new cell. A tank of gas can also be attached to the scrubber. " - -//Meters -/datum/codex_entry/atmos_meter - associated_paths = list(/obj/machinery/meter) - mechanics_text = "Measures the volume and temperature of the pipe under the meter." - -//Pipe dispensers -/datum/codex_entry/atmos_pipe_dispenser - associated_paths = list(/obj/machinery/pipedispenser) - mechanics_text = "This can be moved by using a wrench. You will need to wrench it again when you want to use it. You can put \ - excess (atmospheric) pipes into the dispenser, as well. The dispenser requires electricity to function." - -/datum/codex_entry/transfer_valve - associated_paths = list(/obj/item/device/transfer_valve) - mechanics_text = "This machine is used to merge the contents of two different gas tanks. Plug the tanks into the transfer, then open the valve to mix them together. You can also attach various assembly devices to trigger this process." - antag_text = "With a tank of hot phoron and cold oxygen, this benign little atmospheric device becomes an incredibly deadly bomb. You don't want to be anywhere near it when it goes off." - -/datum/codex_entry/gas_tank - associated_paths = list(/obj/item/tank) - mechanics_text = "These tanks are utilised to store any of the various types of gaseous substances. \ - They can be attached to various portable atmospheric devices to be filled or emptied.
              \ -
              \ - Each tank is fitted with an emergency relief valve. This relief valve will open if the tank is pressurised to over ~3000kPa or heated to over 173?C. \ - Normally the valve itself will close after expending most or all of the contents into the air, but can be forced open or closed with a screwdriver.
              \ -
              \ - Filling a tank such that experiences ~4000kPa of pressure will cause the tank to rupture, spilling out its contents and destroying the tank. \ - Tanks filled over ~5000kPa will rupture rather violently, exploding with significant force." - antag_text = "Each tank may be incited to burn by attaching wires and an igniter assembly, though the igniter can only be used once and the mixture only burn if the igniter pushes a flammable gas mixture above the minimum burn temperature (126?C). \ - Wired and assembled tanks may be disarmed with a set of wirecutters. Any exploding or rupturing tank will generate shrapnel, assuming their relief valves have been welded beforehand. Even if not, they can be incited to expel hot gas on ignition if pushed above 173?C. \ - Relatively easy to make, the single tank bomb requries no tank transfer valve, and is still a fairly formidable weapon that can be manufactured from any tank." - -/datum/codex_entry/gas_analyzer - associated_paths = list(/obj/item/device/scanner/gas) - mechanics_text = "A device that analyzes the gas contents of a tile or atmospherics devices. Has 3 modes: Default operates without \ - additional output data; Moles and volume shows the moles per gas in the mixture and the total moles and volume; Gas \ - traits and data describes the traits per gas, how it interacts with the world, and some of its property constants." diff --git a/code/modules/codex/entries/augments.dm b/code/modules/codex/entries/augments.dm deleted file mode 100644 index aa2f34ea73023..0000000000000 --- a/code/modules/codex/entries/augments.dm +++ /dev/null @@ -1,51 +0,0 @@ -/datum/codex_entry/augment_implanter - associated_paths = list(/obj/item/device/augment_implanter) - display_name = "Augment Autodoc" - antag_text = "

              Augment Autodocs are one-use medical devices pre-loaded with medical software and an augment. Activating it in-hand can be used to install an augment in the configured location by first tearing open an incision, then installing the augment, and finally sealing the wound.

              \ -\ -

              To use:

              \ -
                \ -
              1. Optional: Use a screwdriver on the Autodoc to configure the augment's installation location, if applicable.\ -
              2. Firmly buckle yourself to a solid object such as a bed or chair.\ -
              3. Ensure that you are firmly secured, then activate the Autodoc in your hand.\ -
              4. The Autodoc will perform a rapid surgical procedure on you. Be as still as possible during this time - it will deactivate if it is interrupted.\ -
              5. When the operation is complete, collect the spent Autodoc for disposal.\ -
              \ -\ -

              Autodocs don't come with their own painkillers, and like any surgery operation, it will be extremely painful without them. It will do its best to seal the wounds it creates, but in the event of an interruption, you will likely be left with an open surgical incision.

              \ -\ -

              You can use a crowbar to lever the augment out of the Autodoc, but doing so will render the Autodoc itself permanently useless. This might be useful if you have a collaborator that can safely install the augment in a more desirable way.

              " - -/datum/codex_entry/leukocyte_breeder - associated_paths = list(/obj/item/organ/internal/augment/active/leukocyte_breeder) - display_name = "Leukocyte Breeder" - lore_text = "

              These stimulators were originally developed to serve as both a control hub and a booster for white blood cells. It regulates the production and release of activation proteins to allow for more accurate threat recognition and immune response, while also ensuring the body has enough leukocytes to go around.

              \ -\ -

              It sees the most use in those with autoimmune disorders, or for people with a naturally weak immune system that typically struggles to fight off infections and disease. It's also popular among boosters and bionic aficionados due to its ability to lessen the body's rejection of new additions to it.

              \ -\ -

              The body requires some time to 'break in' the augment due to rapid changes in the immune system, typically characterized by sneezing, coughing, fevers, and other symptoms of a minor cold. These side effects fade quickly, from anywhere between a few minutes to a day or two. Once the body has broken in the system, deactivating it will cause similar symptoms, as it has to adapt to the sudden lack of supplements it previously had.

              " - -/datum/codex_entry/internal_air_system - associated_paths = list(/obj/item/organ/internal/augment/active/internal_air_system) - display_name = "Internal Air System" - lore_text = "

              This augment features a sophisticated air filtration system that activates based on the respiratory activity of its host, to ensure that poisons are avoided. It slowly replenishes its internal supply based on breathable gas in the environment - for most species, that's oxygen - and can be used as an internals tank like any other source if nothing else is available.

              \ -\ -

              These systems are niche, but see use among miners, spacers, and other people that might suddenly find themselves requiring a source of clean, breathable air. The sensation of having your lungs fill without breathing can take some time to get used to, though.

              " - -/datum/codex_entry/nerve_dampeners - associated_paths = list(/obj/item/organ/internal/augment/active/nerve_dampeners) - display_name = "Nerve Dampeners" - lore_text = "

              Selective control of synaptic signals combined with adjustments in brain chemistry can be used to effectively mitigate pain under strenuous conditions. Its use is characterized by a tingling sensation across the entire body, which is unpleasant but much more manageable than whatever pain it might be canceling out.

              \ -\ -

              The body isn't made to go without these feelings for long without a chemical aid, and so after it finishes a cycle, it is followed by a wave of tiredness and fatigue. Using it too often may lead to minor brain damage, or even blacking out. Because of its haphazard methodology and unsafe mode of operation, it doesn't see much use in SolGov space.

              " - -/datum/codex_entry/powerfist_tank - associated_paths = list(/obj/item/organ/internal/augment/active/item/powerfist) - display_name = "Pneumatic Powerfist" - lore_text = "

              The AG-23 Pneumatic Powerfist was first devised as a portable door-cracking/obstacle clearing tool to be used by emergency rescue teams. Eventually, it found its way into more public hands through one way or another, and is now mostly used by private security teams, special police breacher squads, wealthy mob enforcers, and is sometimes even seen in the hands of SolGov Defense Forces.

              \ - \ -

              While it is recommended to use the power-fist at it's lower settings for doors and airlocks, a higher setting is provided in some models for tougher obstacles.

              " - mechanics_text = "

              The powerfist deals a base 5 points of damage without a tank, or when the tank has an air pressure of below 210 kPa. Activate the powerfist in hand to change the pressure setting; which changes the amount of damage the powerfist does.

              \ -

              At 30% and 50%; the powerfist will be able to tear open welded/unwelded airlocks, barring the secure command airlocks. At 50%, the powerfist is also able to throw people a few tiles away.

              \ - \ -

              The powerfist only accepts the small emergency air tanks.

              " diff --git a/code/modules/codex/entries/clothing.dm b/code/modules/codex/entries/clothing.dm deleted file mode 100644 index cc87727d84fca..0000000000000 --- a/code/modules/codex/entries/clothing.dm +++ /dev/null @@ -1,80 +0,0 @@ - -// Clothing armour values. -/obj/item/clothing - var/static/list/armour_to_descriptive_term = list( - "melee" = "blunt force", - "bullet" = "ballistics", - "laser" = "lasers", - "energy" = "energy", - "bomb" = "explosions", - "bio" = "biohazards", - "rad" = "radiation" - ) - -/obj/item/clothing/get_lore_info() - return desc - -/obj/item/clothing/get_mechanics_info() - var/list/armor_strings = list() - for(var/armor_type in armour_to_descriptive_term) - if(LAZYACCESS(armor, armor_type)) - switch(armor[armor_type]) - if(1 to 20) - armor_strings += "It barely protects against [armour_to_descriptive_term[armor_type]]." - if(21 to 30) - armor_strings += "It provides a very small defense against [armour_to_descriptive_term[armor_type]]." - if(31 to 40) - armor_strings += "It offers a small amount of protection against [armour_to_descriptive_term[armor_type]]." - if(41 to 50) - armor_strings += "It offers a moderate defense against [armour_to_descriptive_term[armor_type]]." - if(51 to 60) - armor_strings += "It provides a strong defense against [armour_to_descriptive_term[armor_type]]." - if(61 to 70) - armor_strings += "It is very strong against [armour_to_descriptive_term[armor_type]]." - if(71 to 80) - armor_strings += "This gives a very robust defense against [armour_to_descriptive_term[armor_type]]." - if(81 to 100) - armor_strings += "Wearing this would make you nigh-invulerable against [armour_to_descriptive_term[armor_type]]." - - if(item_flags & ITEM_FLAG_AIRTIGHT) - armor_strings += "It is airtight." - - if(min_pressure_protection == 0) - armor_strings += "Wearing this will protect you from the vacuum of space." - else if(min_pressure_protection != null) - armor_strings += "Wearing this will protect you from low pressures, but not the vacuum of space." - - if(max_pressure_protection != null) - armor_strings += "This suit is rated for pressures up to [max_pressure_protection] kPa." - - if(item_flags & ITEM_FLAG_THICKMATERIAL) - armor_strings += "The material is exceptionally thick." - - if(max_heat_protection_temperature >= FIRESUIT_MAX_HEAT_PROTECTION_TEMPERATURE) - armor_strings += "You could probably safely skydive into the Sun wearing this." - else if(max_heat_protection_temperature >= SPACE_SUIT_MAX_HEAT_PROTECTION_TEMPERATURE) - armor_strings += "It provides good protection against fire and heat." - - if(!isnull(min_cold_protection_temperature) && min_cold_protection_temperature <= SPACE_SUIT_MIN_COLD_PROTECTION_TEMPERATURE) - armor_strings += "It provides very good protection against very cold temperatures." - - var/list/covers = list() - var/list/slots = list() - for(var/name in string_part_flags) - if(body_parts_covered & string_part_flags[name]) - covers += name - for(var/name in string_slot_flags) - if(slot_flags & string_slot_flags[name]) - slots += name - - if(covers.len) - armor_strings += "It covers the [english_list(covers)]." - - if(slots.len) - armor_strings += "It can be worn on your [english_list(slots)]." - - return jointext(armor_strings, "
              ") - -/obj/item/clothing/suit/armor/pcarrier/get_mechanics_info() - . = ..() - . += "
              Its protection is provided by the plate inside, examine it for details on armor.
              " diff --git a/code/modules/codex/entries/codex.dm b/code/modules/codex/entries/codex.dm deleted file mode 100644 index 95728cbfa4997..0000000000000 --- a/code/modules/codex/entries/codex.dm +++ /dev/null @@ -1,46 +0,0 @@ -/datum/codex_entry/codex - display_name = "The Codex" - associated_strings = list("codex") - lore_text = "The Codex is the overall body containing the document that you are currently reading. It is a distributed encyclopedia maintained by a dedicated, hard-working staff of journalists, bartenders, hobos, space pirates and xeno-intelligences, all with the goal of providing you, the user, with supposedly up-to-date, nominally useful documentation on the topics you want to know about. \ -

              \ - Access to the Codex is afforded instantly by a variety of unobtrusive devices, including PDA attachments, retinal implants, neuro-memetic indoctrination and hover-drone. All our access devices are affordable, stylish and guaranteed not to expose you to encephalo-malware. \ -

              \ - The Codex editorial offices are located in Venus orbit and will offer cash payments for stories, anecdotes and evidence of the strange and undocumented miscellany cluttering up our observable universe. Remember our motto: \"Knowledge is power, sell your excess.\"" - -/datum/codex_entry/codex/New() - mechanics_text = "The Codex is both an IC and OOC resource. ICly, it is as described; a space encyclopedia. You can use Search-Codex topic to look something up, or you can click the links provided when examining some objects. \ -

              \ - Any of the lore you find in the Codex, designated by green text, can be freely referenced in-character. \ -

              \ - OOC information on various mechanics and interactions is marked by blue text. \ -

              \ - Information for antagonists will not be shown unless you are an antagonist, and is marked by red text." - ..() - -/datum/codex_entry/nexus - display_name = "Nexus" - associated_strings = list("nexus") - mechanics_text = "The place to start with The Codex
              " - -/datum/codex_entry/nexus/get_text(var/mob/presenting_to) - var/list/dat = list(get_header(presenting_to)) - dat += "[mechanics_text]" - dat += "

              Categories

              " - var/list/categories = list() - for(var/type in subtypesof(/datum/codex_category)) - var/datum/codex_category/C = type - var/key = "[initial(C.name)] (category)" - var/datum/codex_entry/entry = SScodex.get_codex_entry(key) - if(entry) - categories += "
            • [initial(C.name)] - [initial(C.desc)]" - dat += jointext(categories, " ") - return "[jointext(dat, null)]" - -/client/proc/codex_topic(href, href_list) - if(href_list["codex_search"]) //nano throwing errors - search_codex() - return TRUE - - if(href_list["codex_index"]) //nano throwing errors - list_codex_entries() - return TRUE \ No newline at end of file diff --git a/code/modules/codex/entries/engineering.dm b/code/modules/codex/entries/engineering.dm deleted file mode 100644 index 83111678b7e57..0000000000000 --- a/code/modules/codex/entries/engineering.dm +++ /dev/null @@ -1,53 +0,0 @@ -/datum/codex_entry/supermatter - associated_paths = list(/obj/machinery/power/supermatter) - mechanics_text = "When energized by a laser (or something hitting it), it emits radiation and heat. If the heat reaches above 7000 kelvin, it will send an alert and start taking damage. \ - After integrity falls to zero percent, it will delaminate, causing a massive explosion, station-wide radiation spikes, and hallucinations. \ - Supermatter reacts badly to oxygen in the atmosphere. It'll also heat up really quick if it is in vacuum.
              \ -
              \ - Supermatter cores are extremely dangerous to be close to, and requires protection to handle properly. The protection you will need is:
              \ - Optical meson scanners on your eyes, to prevent hallucinations when looking at the supermatter.
              \ - Radiation helmet and suit, as the supermatter is radioactive.
              \ -
              \ - Touching the supermatter will result in *instant death*, with no corpse left behind! You can drag the supermatter, but anything else will kill you. \ - It is advised to obtain a genetic backup before trying to drag it." - antag_text = "Exposing the supermatter to oxygen or vacuum will cause it to start rapidly heating up. Sabotaging the supermatter and making it explode will \ - cause a period of lag as the explosion is processed by the server, as well as irradiating the entire station and causing hallucinations to happen. \ - Wearing radiation equipment will protect you from most of the delamination effects sans explosion." - -/datum/codex_entry/apc - associated_paths = list(/obj/machinery/power/apc) - mechanics_text = "An APC (Area Power Controller) regulates and supplies backup power for the area they are in. Their power channels are divided \ - out into 'environmental' (Items that manipulate airflow and temperature), 'lighting' (the lights), and 'equipment' (Everything else that consumes power). \ - Power consumption and backup power cell charge can be seen from the interface, further controls (turning a specific channel on, off or automatic, \ - toggling the APC's ability to charge the backup cell, or toggling power for the entire area via master breaker) first requires the interface to be unlocked \ - with an ID with Engineering access or by one of the station's robots or the artificial intelligence." - - antag_text = "This can be emagged to unlock it. It will cause the APC to have a blue error screen. \ - Wires can be pulsed remotely with a signaler attached to it. A powersink will also drain any APCs connected to the same wire the powersink is on." - -/datum/codex_entry/inflatable_item - associated_paths = list(/obj/item/inflatable) - mechanics_text = "Inflate by using it in your hand. The inflatable barrier will inflate on your tile. To deflate it, use the 'deflate' verb." - -/datum/codex_entry/inflatable_deployed - associated_paths = list(/obj/structure/inflatable) - mechanics_text = "To remove these safely, use the 'deflate' verb. Hitting these with any objects will probably puncture and break it forever." - -/datum/codex_entry/inflatable_door - associated_paths = list(/obj/structure/inflatable/door) - mechanics_text = "Click the door to open or close it. It only stops air while closed.
              \ - To remove these safely, use the 'deflate' verb. Hitting these with any objects will probably puncture and break it forever." - -/datum/codex_entry/welding_pack - associated_paths = list(/obj/item/storage/backpack/weldpack) - mechanics_text = "This pack acts as a portable source of welding fuel. Use a welder on it to refill its tank - but make sure it's not lit! You can use this kit on a fuel tank or appropriate reagent dispenser to replenish its reserves." - lore_text = "The Shenzhen Chain of 2133 was an industrial accident of noteworthy infamy that occurred at Earth's L3 Lagrange Point. An apprentice welder, working for the Shenzhen Space Fabrication Group, failed to properly seal her fuel port, triggering a chain reaction that spread from laborer to laborer, instantly vaporizing a crew of fourteen. Don't let this happen to you!" - antag_text = "In theory, you could hold an open flame to this pack and produce some pretty catastrophic results. The trick is getting out of the blast radius." - -/datum/codex_entry/gripper - associated_paths = list(/obj/item/gripper) - mechanics_text = "Click an item to pick it up with your gripper. Use it as you would normally use anything in your hand. The Drop Item verb will allow you to release the item." - -/datum/codex_entry/diffuser_item - associated_paths = list(/obj/item/shield_diffuser) - mechanics_text = "This device disrupts shields on directly adjacent tiles (in a + shaped pattern), in a similar way the floor mounted variant does. It is, however, portable and run by an internal battery. Can be recharged with a regular recharger." diff --git a/code/modules/codex/entries/exosuits.dm b/code/modules/codex/entries/exosuits.dm deleted file mode 100644 index 7849d9dae091e..0000000000000 --- a/code/modules/codex/entries/exosuits.dm +++ /dev/null @@ -1,22 +0,0 @@ -/datum/codex_entry/exosuits - associated_paths = list(/mob/living/exosuit) - mechanics_text = "An exosuit is a type of vehicle that can mount a variety of tools and equipment." - -/datum/codex_entry/exosuit_equipment - associated_paths = list(/obj/item/mech_equipment) - mechanics_text = "Exosuit equipment is mounted onto specific exosuit hardpoints. In order to correctly attach itself, it will also need the exosuit to have the right software. \ - You can find out more about this if you have at least basic complex devices skill." - -/datum/codex_entry/exosuit_flash - associated_paths = list(/obj/item/mech_equipment/flash) - mechanics_text = "An exosuit flash. Use it on someone to blind them or on itself to perform a weaker area blind." - -/datum/codex_entry/exosuit_camera - associated_paths = list(/obj/item/mech_equipment/camera) - mechanics_text = "A camera! Similar to helmet cameras it will work in connected levels regardless of network status. Use a screwdriver to change the output camera network." - -/datum/codex_entry/exosuit_flamethrower - associated_paths = list(/obj/item/mech_equipment/mounted_system/flamethrower) - mechanics_text = "A flamethrower. It throws flames consuming chemicals. In order to change the tanks you will need to dismount it and use a crowbar on it." - lore_text = "The Hephaestus Industries 'Prometheus' is a tried and tested design that has seen minimal variation since its introduction. Designed for use in light vehicles and exosuits, \ - it is guaranteed to live up to its namesake." diff --git a/code/modules/codex/entries/guns.dm b/code/modules/codex/entries/guns.dm deleted file mode 100644 index 3be0763200dec..0000000000000 --- a/code/modules/codex/entries/guns.dm +++ /dev/null @@ -1,133 +0,0 @@ -/obj/item/gun/var/general_codex_key = "guns" - -/obj/item/gun/projectile/general_codex_key = "ballistic weapons" - -/obj/item/gun/energy/general_codex_key = "energy weapons" - -/obj/item/gun/magnetic/general_codex_key = "magnetic weapons" - -/obj/item/gun/get_antag_info() - var/list/entries = SScodex.retrieve_entries_for_string(general_codex_key) - var/datum/codex_entry/general_entry = LAZYACCESS(entries, 1) - if(general_entry && general_entry.antag_text) - return general_entry.antag_text - -/obj/item/gun/get_lore_info() - var/list/entries = SScodex.retrieve_entries_for_string(general_codex_key) - var/datum/codex_entry/general_entry = LAZYACCESS(entries, 1) - . = "[desc]
              " - if(general_entry && general_entry.lore_text) - . += general_entry.lore_text - -/obj/item/gun/get_mechanics_info() - var/list/traits = list() - - var/list/entries = SScodex.retrieve_entries_for_string(general_codex_key) - var/datum/codex_entry/general_entry = LAZYACCESS(entries, 1) - if(general_entry && general_entry.mechanics_text) - traits += general_entry.mechanics_text - - if(one_hand_penalty) - traits += "It's best fired with two-handed grip." - - if(has_safety) - traits += "It has a safety switch. Control-Click it to toggle safety." - - if(is_secure_gun()) - traits += "It's fitted with secure registration chip. Swipe ID on it to register." - - if(scope_zoom) - traits += "It has a magnifying optical scope. It can be toggled with Use Scope verb." - - if(LAZYLEN(firemodes) > 1) - traits += "It has multiple firemodes. Click it in hand to cycle them." - - return jointext(traits, "
              ") - -/obj/item/gun/projectile/get_mechanics_info() - . = ..() - var/list/traits = list() - - traits += "
              Caliber: [caliber]" - - var/list/loading_ways = list() - if(load_method & SINGLE_CASING) - loading_ways += "loose [caliber] rounds" - if(load_method & SPEEDLOADER) - loading_ways += "speedloaders" - if(load_method & MAGAZINE) - loading_ways += "magazines" - traits += "Can be loaded using [english_list(loading_ways)]" - - if(load_method & (SINGLE_CASING|SPEEDLOADER)) - traits += "It can hold [max_shells] rounds." - - if(jam_chance) - traits += "It's prone to jamming." - - . += jointext(traits, "
              ") - -/obj/item/gun/energy/get_mechanics_info() - . = ..() - var/list/traits = list() - - traits += "
              Its maximum capacity is [max_shots] shots worth of power." - - if(self_recharge) - traits += "It recharges itself over time." - - . += jointext(traits, "
              ") - -/obj/item/gun/projectile/shotgun/pump/get_mechanics_info() - . = ..() - . += "
              To pump it, click it in hand.
              " - -/obj/item/gun/energy/crossbow/get_antag_info() - . = ..() - . += "This is a stealthy weapon which fires poisoned bolts at your target. When it hits someone, they will suffer a stun effect, in \ - addition to toxins. The energy crossbow recharges itself slowly, and can be concealed in your pocket or bag.
              " - -/obj/item/gun/energy/chameleon/get_antag_info() - . = ..() - . += "This gun is actually a hologram projector that can alter its appearance to mimick other weapons. To change the appearance, use \ - the appropriate verb in the object tab. Any beams or projectiles fired from this gun are actually holograms and useless for actual combat. \ - Projecting these holograms over distance uses a little bit of charge.
              " - - -/obj/item/gun/magnetic/get_mechanics_info() - . = ..() - if (removable_components) - . += "

              Its cell and capacitor can be removed and replaced. You can remove the components by clicking the gun with an empty hand while it's unloaded.

              " - if (load_type) - var/load_item = new load_type() - . += "

              It accepts [load_item] as ammunition, with a maximum capacity of [load_sheet_max].

              " - if (gun_unreliable) - . += "

              This weapon is unreliable and has a chance of exploding in your hands when you fire it.

              " - -/datum/codex_entry/energy_weapons - display_name = "energy weapons" - mechanics_text = "This weapon is an energy weapon; they run on battery charge rather than traditional ammunition. You can recharge \ - an energy weapon by placing it in a wall-mounted or table-mounted charger, such as those found in Security or around the \ - place. Additionally, most energy weapons can go straight through windows and hit whatever is on the other side, and are \ - hitscan, making them accurate and useful against distant targets. \ -

              " - -/datum/codex_entry/ballistic_weapons - display_name = "ballistic weapons" - mechanics_text = "This weapon is a ballistic weapon; it fires solid shots using a magazine or loaded rounds of ammunition. You can \ - unload it by holding it and clicking it with an empty hand, and reload it by clicking it with a magazine, or in the case of \ - shotguns or some rifles, by opening the breech and clicking it with individual rounds. \ -

              " - lore_text = "Ballistic weapons are still used even now due to the relative expense of decent laser \ - weapons, difficulties in maintaining them, and the sheer stopping and wounding power of solid slugs or \ - composite shot. Using a ballistic weapon on a spacebound habitat is usually considered a serious undertaking, \ - as a missed shot or careless use of automatic fire could rip open the hull or injure bystanders with ease." - -/datum/codex_entry/magnetic_weapons - display_name = "magnetic weapons" - mechanics_text = "

              This weapon is a magnetic weapon; it fires solid projectiles using a capacitive charge and magnets.

              \ -

              You can unload it by holding it and clicking it with an empty hand, and reload it by clicking it with any items the weapon accepts as ammunition.

              \ -

              Each shot not only uses ammunition, but also drains the gun's capacitor. The capacitor recharges from the inserted power cell.

              " - lore_text = "

              Magnetic weapons, while uncommon, are seen throughout human space, firing physical projectiles using powerful magnets. \ - Magnetic weapons tend to be very power inefficient. The most recognizable form is the railgun, though crafty engineers have been known to \ - produce their own makeshift coilguns.

              " diff --git a/code/modules/codex/entries/implants.dm b/code/modules/codex/entries/implants.dm deleted file mode 100644 index bd2d771f1ca30..0000000000000 --- a/code/modules/codex/entries/implants.dm +++ /dev/null @@ -1,21 +0,0 @@ -/datum/codex_entry/implant - associated_paths = list(/obj/item/implant) - mechanics_text = "Implants are devices that can be injected into a person and have varying effects. To inject an implant, you require an implanter. \ - Once injected, implants can only be removed through surgery." - -/datum/codex_entry/implant/imprinting - associated_paths = list(/obj/item/implant/imprinting) - antag_text = "Imprinting implants allow you to force your victim to obey the instructions you program it with. For the implant to work correctly, you must first \ - inject your victim with mindbreaker toxin which should be included in the implanter kit." - -/datum/codex_entry/implanter - associated_paths = list(/obj/item/implanter) - mechanics_text = "The implanter allows you to inject an implant into another mob or person.
              \ - To implant someone, you must first insert the desired implant into the implanter, select a target region to implant into, then click on your target to implant them. \ - Implanting takes time and can be interrupted.
              \ - Implants can only be removed through surgery." - -/datum/codex_entry/implanter/imprinting - associated_paths = list(/obj/item/implanter/imprinting) - antag_text = "Imprinting implants allow you to force your victim to obey the instructions you program it with. For the implant to work correctly, you must first \ - inject your victim with mindbreaker toxin which should be included in the implanter kit." diff --git a/code/modules/codex/entries/jukebox.dm b/code/modules/codex/entries/jukebox.dm deleted file mode 100644 index 77133515b2849..0000000000000 --- a/code/modules/codex/entries/jukebox.dm +++ /dev/null @@ -1,9 +0,0 @@ -/datum/codex_entry/jukebox - associated_paths = list(/obj/machinery/jukebox) - mechanics_text = "Click the jukebox and then select a track on the interface. You can choose to play or stop the track, or set the volume. Use a wrench to attach or detach the jukebox to the floor. The room it is installed in must have power for it to operate!" - lore_text = "The Leitmotif is Auraliving's most popular brand of retro jukebox, putting a modern spin on the ancient curved plasmascreen design. The Enterprise Edition allows an indefinite number of users to sync music from their devices simultaneously... of course the Expeditionary Corps made sure to lock down the selection before they installed this one." - antag_text = "Slide a cryptographic sequencer into the jukebox to overload its speakers. Instead of music, it'll produce a hellish blast of noise and explode!" - -/datum/codex_entry/jukebox/old - associated_paths = list(/obj/machinery/jukebox/old) - lore_text = "No one these days knows what civilization is responsible for this machine's design - various alien species have been credited on more than one occasion." diff --git a/code/modules/codex/entries/machinery.dm b/code/modules/codex/entries/machinery.dm deleted file mode 100644 index 2472ed6ae2c57..0000000000000 --- a/code/modules/codex/entries/machinery.dm +++ /dev/null @@ -1,22 +0,0 @@ -/datum/codex_entry/replicator - associated_paths = list(/obj/machinery/fabricator/replicator) - mechanics_text = "The food replicator is operated through voice commands. To inquire available dishes on the menu, say 'menu'. To dispense a dish, say the name of the dish listed in its menu. \ - Dishes can only be produced as long as the replicator has biomass. To check on the biomass level of the replicator, say 'status'. Various food items or plants may be inserted to refill biomass." - -/datum/codex_entry/emitter - associated_paths = list(/obj/machinery/power/emitter) - mechanics_text = "You must secure this in place with a wrench and weld it to the floor before using it. The emitter will only fire if it is installed above a cable endpoint. Clicking will toggle it on and off, at which point, so long as it remains powered, it will fire in a single direction in bursts of four." - lore_text = "Lasers like this one have been in use for ages, in applications such as mining, cutting, and in the startup sequence of many advanced space station and starship engines." - antag_text = "This baby is capable of slicing through walls, sealed lockers, and people." - -/datum/codex_entry/diffuser_machine - associated_paths = list(/obj/machinery/shield_diffuser) - mechanics_text = "This device disrupts shields on directly adjacent tiles (in a + shaped pattern). They are commonly installed around exterior airlocks to prevent shields from blocking EVA access." - -/datum/codex_entry/conveyor_construct - associated_paths = list(/obj/machinery/conveyor, /obj/item/conveyor_construct) - mechanics_text = "This device must be connected to a switch assembly before placement by clicking the switch on the conveyor belt assembly. When active it will move objects on top of it to the adjacent space based on its direction and if it is running in forward or reverse mode. Can be removed with a crowbar." - -/datum/codex_entry/conveyor_construct - associated_paths = list(/obj/machinery/conveyor_switch,/obj/machinery/conveyor_switch/oneway,/obj/item/conveyor_switch_construct,/obj/item/conveyor_switch_construct/oneway) - mechanics_text = "This device can connect to a number of conveyor belts and control their movement. A two-way switch will allow you to make the conveyors run in forward and reverse mode, the one-way switch will only allow one direction. Can be removed with a crowbar." diff --git a/code/modules/codex/entries/medical.dm b/code/modules/codex/entries/medical.dm deleted file mode 100644 index 9ff600057b78d..0000000000000 --- a/code/modules/codex/entries/medical.dm +++ /dev/null @@ -1,86 +0,0 @@ -/datum/codex_entry/bodyscanner - associated_paths = list(/obj/machinery/bodyscanner) - mechanics_text = "The advanced scanner detects and reports internal injuries such as bone fractures, internal bleeding, and organ damage. \ - This is useful if you are about to perform surgery.
              \ -
              \ - Click your target with Grab intent, then click on the scanner to place them in it. Click the red terminal to operate. \ - Right-click the scanner and click 'Eject Occupant' to remove them. You can enter the scanner yourself in a similar way, using the 'Enter Body Scanner' \ - verb." - -/datum/codex_entry/cryocell - associated_paths = list(/obj/machinery/atmospherics/unary/cryo_cell) - mechanics_text = "The cryogenic chamber, or 'cryo', treats most damage types, most notably genetic damage. It also stabilizes patients \ - in critical condition by placing them in stasis, so they can be treated at a later time.
              \ -
              \ - In order for it to work, it must be loaded with chemicals, and the temperature of the solution must reach a certain point. Additionally, it \ - requires a supply of pure oxygen, provided by canisters that are attached. The most commonly used chemicals in the chambers are Cryoxadone and \ - Clonexadone. Clonexadone is more effective in treating all damage, including Genetic damage, but is otherwise functionally identical.
              \ -
              \ - Activating the freezer nearby, and setting it to a temperature setting below 150, is recommended before operation! Further, any clothing the patient \ - is wearing that act as an insulator will reduce its effectiveness, and should be removed.
              \ -
              \ - Clicking the tube with a beaker full of chemicals in hand will place it in its storage to distribute when it is activated.
              \ -
              \ - Click your target with Grab intent, then click on the tube, with an empty hand, to place them in it. Click the tube again to open the menu. \ - Press the button on the menu to activate it. Once they have reached 100 health, right-click the cell and click 'Eject Occupant' to remove them. \ - Remember to turn it off, once you've finished, to save power and chemicals!" - -/datum/codex_entry/optable - associated_paths = list(/obj/machinery/optable) - mechanics_text = "Click your target with Grab intent, then click on the table with an empty hand, to place them on it.
              Click on table after that to enable knockout function." - -/datum/codex_entry/vitals_monitor - associated_paths = list(/obj/machinery/vitals_monitor) - mechanics_text = "Click and drag the vitals monitor onto your target to attach them. Doing the same action again will detatch them.
              \ - Click and drag the vitals monitor onto an operating table to connect it to the table. This will forward all patient info from the OR table to the vitals monitor.
              \ - The vitals monitor will continue reporting information as long as whatever it is attached to remains adjacent to it." - -/datum/codex_entry/operating - associated_paths = list(/obj/machinery/computer/operating) - mechanics_text = "This console gives information on the status of the patient on the adjacent operating table, notably their consciousness." - -/datum/codex_entry/sleeper - associated_paths = list(/obj/machinery/sleeper) - mechanics_text = "The sleeper allows you to clean the blood by means of dialysis, and to administer medication in a controlled environment.
              \ -
              \ - Click your target with Grab intent, then click on the sleeper to place them in it. Click the green console, with an empty hand, to open the menu. \ - Click 'Start Dialysis' to begin filtering unwanted chemicals from the occupant's blood. The beaker contained will begin to fill with their \ - contaminated blood, and will need to be emptied when full.
              \ - There's similar function for ingested reagents, 'Stomach Pump'.
              \ -
              \ - You can also inject common medicines directly into their bloodstream.\ -
              \ - Right-click the cell and click 'Eject Occupant' to remove them. You can enter the cell yourself by right clicking and selecting 'Enter Sleeper'. \ - Note that you cannot control the sleeper while inside of it." - -/datum/codex_entry/cryobag_furled - associated_paths = list(/obj/item/bodybag/cryobag) - mechanics_text = "This stasis bag will preserve the occupant, stopping most forms of harm from occuring, such as from oxygen \ - deprivation, irradiation, shock, and chemicals inside the occupant, at least until the bag is opened again.
              \ -
              \ - Stasis bags can only be used once, and are rather costly, so use them well. They are ideal for situations where someone may die \ - before being able to bring them back to safety, or if they are in a hostile enviroment, such as in vacuum or in a toxins leak, as \ - the bag will protect the occupant from most outside enviromental hazards. If you open a bag by mistake, closing the bag with no \ - occupant will not use up the bag, and you can pick it back up.
              \ -
              \ - You can use a health analyzer to scan the occupant's vitals without opening the bag by clicking the occupied bag with the analyzer." - -/datum/codex_entry/cryobag_open - associated_paths = list(/obj/structure/closet/body_bag/cryobag) - mechanics_text = "This stasis bag will preserve the occupant, stopping most forms of harm from occuring, such as from oxygen \ - deprivation, irradiation, shock, and chemicals inside the occupant, at least until the bag is opened again.
              \ -
              \ - Stasis bags can only be used once, and are rather costly, so use them well. They are ideal for situations where someone may die \ - before being able to bring them back to safety, or if they are in a hostile enviroment, such as in vacuum or in a toxins leak, as \ - the bag will protect the occupant from most outside enviromental hazards. If you open a bag by mistake, closing the bag with no \ - occupant will not use up the bag, and you can pick it back up.
              \ -
              \ - You can use a health analyzer to scan the occupant's vitals without opening the bag by clicking the occupied bag with the analyzer." - -/datum/codex_entry/autopump - associated_paths = list(/obj/item/auto_cpr) - mechanics_text = "This automatic pump will help a patient whose heart is stopped, much like CPR, when put in the patient's suit slot.
              \ -
              \ - There are several things to keep in mind when using it. First off, you need Basic Medicine AND Anatomy skills to align it properly, otherwise it'll hurt patient. \ - It will only provide some circulation, you need to fix blood volume and oxygen supply issues for it to be useful. \ - It performs worse than manual CPR by a skilled user and will NOT restart the heart. It's advantage is automatic nature.
              " \ No newline at end of file diff --git a/code/modules/codex/entries/misc.dm b/code/modules/codex/entries/misc.dm deleted file mode 100644 index ff04edafc3286..0000000000000 --- a/code/modules/codex/entries/misc.dm +++ /dev/null @@ -1,37 +0,0 @@ -/datum/codex_entry/suitcooler - associated_paths = list(/obj/item/device/suit_cooling_unit) - mechanics_text = "You may wear this instead of your backpack to cool yourself down. It is commonly used by full-body prosthetic users, \ - as it allows them to go into low pressure environments for more than few seconds without overheating. It runs off energy provided by internal power cell. \ - Remember to turn it on by clicking it when it's your in your hand before you put it on." - -/datum/codex_entry/barsign - associated_paths = list(/obj/structure/sign/double/barsign) - mechanics_text = "If your ID has bar access, you may swipe it on this sign to alter its display." - -/datum/codex_entry/sneakies - associated_paths = list(/obj/item/clothing/shoes/laceup/sneakies) - lore_text = "Originally designed to confuse Terran troops on the swamp moon of Nabier XI, where they were proven somewhat effective. Not bad on a space vessel, either." - -/datum/codex_entry/moneygun - associated_paths = list(/obj/item/gun/launcher/money) - mechanics_text = "Load money into the cannon by picking it up with the gun, or feeding it directly by hand. Use in your hand to configure how much money you want to fire per shot." - lore_text = "These devices were invented several centuries ago and are a distinctly human cultural infection. They have produced knockoffs as timeless and as insipid as the potato gun and the paddle ball, showing up in all corners of the galaxy. The Money Cannon variation is noteworthy for its sturdiness and build quality, but is, at the end of the day, just another knockoff of the ancient originals." - -/datum/codex_entry/moneygun/New(_display_name, list/_associated_paths, list/_associated_strings, _lore_text, _mechanics_text, _antag_text) - . = ..() - antag_text = "Sliding a cryptographic sequencer into the receptacle will short the motors and override their speed. If you set the cannon to dispense 100 [GLOB.using_map.local_currency_name] or more, this might make a handy weapon." - -/datum/codex_entry/ssd - display_name = "SSD/S.S.D." - mechanics_text = "When a player has disconnected or ghosted, they display a special message when they're examined, colored in purple. If the message indicates something like them staring blankly, being fast asleep, or displaying a SYSTEM OFFLINE message, it's likely that the player's closed their BYOND client or lost their connection. In such a case, it's possible they'll resume play soon or at a later time. These players are referred as \"going SSD\" or otherwise being SSD.

              \ - \ - If the message displays something more severe, like being completely comatose or having a full system failure, the player has voluntarily ghosted while still alive - this means that the character won't return back to the round as a player, short of invervention from an admin. For clarity, these cases will also always mention that the player won't be recovering or waking up any time soon.

              \ - \ - The server's rules likely have special clauses regarding SSD players. Check the rule list before you touch a player who's disconnected or take any actions on them." - -/datum/codex_entry/wrist_computer - associated_paths = list(/obj/item/modular_computer/pda/wrist) - lore_text = "Morally obsolete and replaced by a more compact and perfect personal computer, \ - the wrist computer has been used to this day as a cheap replacement for more expensive equipment \ - in some small corporations, \ - and sometimes for the sake of aesthetic pleasure of it's owner." diff --git a/code/modules/codex/entries/mobs.dm b/code/modules/codex/entries/mobs.dm deleted file mode 100644 index d5b4a8c9356bd..0000000000000 --- a/code/modules/codex/entries/mobs.dm +++ /dev/null @@ -1,15 +0,0 @@ -/datum/codex_entry/maint_drone - display_name = "maintenance drone" - associated_paths = list(/mob/living/silicon/robot/drone) - mechanics_text = "Drones are player-controlled synthetics which are lawed to maintain their assigned vessel and not \ - interfere with anyone else, except for other drones. They hold a wide array of tools to build, repair, maintain, and clean. \ - They function similarly to other synthetics, in that they require recharging regularly, have laws, and are resilient to many hazards, \ - such as fire, radiation, vacuum, and more. Ghosts can join the round as a maintenance drone by using the appropriate verb in the 'ghost' tab. \ - An inactive drone can be rebooted by swiping an ID card on it with engineering or robotics access, and an active drone can be shut down in the same manner. \ - Maintenance drone presence can be requested to specific areas from any maintenance drone control console." - antag_text = "A cryptographic sequencer, available via a traitor uplink, can be used to subvert the drone to your cause." - -/datum/codex_entry/uncertified_module - associated_paths = list(/obj/item/borg/upgrade/uncertified) - mechanics_text = "This special chip will forcibly change a robot's module to a new one. In most cases, this is the only way for the robot to obtain these modules. Once you've unlocked the robot's maintenance hatch with an ID card and opened it with a crowbar, click the bot to install this chip." - lore_text = "No TSC, industrial concern, or military organization worth their salt would dare install uncertified hardware on their robotic platforms. Nevertheless, in backwater sectors of the universe, there is a thriving grey market for third-party modular configurations such as this one." diff --git a/code/modules/codex/entries/paperwork.dm b/code/modules/codex/entries/paperwork.dm deleted file mode 100644 index 72ab7cd308090..0000000000000 --- a/code/modules/codex/entries/paperwork.dm +++ /dev/null @@ -1,42 +0,0 @@ -/datum/codex_entry/pen - associated_paths = list(/obj/item/pen) - mechanics_text = {"Used for writing down your thoughts, on paper or elsewhere. The following special commands are available:

              -\[br\] : Creates a linebreak.
              -\[center\] - \[/center\] : Centers the text.
              -\[h1\] - \[/h1\] : Makes the text a first level heading.
              -\[h2\] - \[/h2\] : Makes the text a second level headin.
              -\[h3\] - \[/h3\] : Makes the text a third level heading.
              -\[b\] - \[/b\] : Makes the text bold.
              -\[i\] - \[/i\] : Makes the text italic.
              -\[u\] - \[/u\] : Makes the text underlined.
              -\[small\] - \[/small\] : Decreases the size of the text.
              -\[large\] - \[/large\] : Increases the size of the text.
              -\[sign\] : Inserts a signature of your name in a foolproof way.
              -\[field\] : Inserts an invisible field which lets you start type from there. Useful for forms.
              -\[date\] : Inserts today's station date.
              -\[time\] : Inserts the current station time.
              -\[table\] - \[/table\] : Creates table using \[row\] and \[cell\] tags.
              -\[grid\] - \[/grid\] : Table without visible borders, for layouts.
              -\[row\] - New table row.
              -\[cell\] - New table cell.
              -\[hr\] : Adds a horizontal rule.
              -\[list\] - \[/list\] : A list. (Does not work with crayons)
              -\[*\] : A dot used for lists. (Does not work with crayons)
              -\[logo\] - Inserts EXO logo image.
              -\[ntlogo\] - Inserts the NT logo image.
              -\[bluelogo\] - Inserts blue NT logo image.
              -\[solcrest\] - Inserts SCG crest image.
              -\[eclogo\] - Inserts the Expeditionary Corps logo.
              -\[daislogo\] - Inserts the Deimos Advanced Information Systems logo.
              -\[xynlogo\] - Inserts the Xyngergy logo.
              -\[iccgseal\] - Inserts ICCG seal.
              -\[fleetlogo\] - Inserts the logo of the SCG Fleet.
              -\[armylogo\] - Inserts the logo of the SCG Army.
              -\[sfplogo\] - Inserts the logo of the Sol Federal Police.

              -\[torchlogo\] - Inserts Torch logo image.

              -Digital exclusive commands (NanoWord, emails, reports, text files, etc):
              -\[pre\] - \[/pre\] : Adds preformatted text, forcing the text to be fixed width.
              -\[fontred\] - \[/font\] : Makes the text red.
              -\[fontblue\] - \[/font\] : Makes the text blue.
              -\[fontgreen\] - \[/font\] : Makes the text green.
              -\[redacted\] : Adds R E D A C T E D in black font on a black background.

              "} diff --git a/code/modules/codex/entries/psionics.dm b/code/modules/codex/entries/psionics.dm deleted file mode 100644 index 2c6e0ff4154ef..0000000000000 --- a/code/modules/codex/entries/psionics.dm +++ /dev/null @@ -1,48 +0,0 @@ -/datum/codex_entry/cuchulain_foundation - display_name = "Cuchulain Foundation" - associated_strings = list("Cuchulain", "Foundation") - associated_paths = list( - /obj/item/storage/briefcase/foundation, - /obj/item/gun/projectile/revolver/foundation, - /obj/item/card/id/foundation, - /obj/item/card/id/foundation_civilian, - /obj/item/clothing/suit/storage/toggle/labcoat/foundation, - /obj/item/reagent_containers/food/drinks/glass2/coffeecup/foundation - ) - lore_text = "The Cuchulain Foundation is a non-profit body based out of Neptune orbit. Their logo is \ - an upward-facing radio telescope dish, usually printed in green. They perform niche research on behalf \ - of private parties, the SGC, and their own interests. They are also the single largest psionic registration \ - and oversight body in human space, responsible for educating and training operants at no cost, even across \ - territorial and political lines. \ -

              \ - The rest of the article is an indecipherable haze that slips out of your memory as soon as you \ - finish reading it, but you feel pretty satisfied and informed by the end." - antag_text = "The Cuchulain Foundation is an anti-occult ERT-like body. They are equipped with \ - nullglass weapons that can disrupt or destroy psi-powers, and have their own moderately powerful \ - psionic abilities. They make heavy use of psionic influence to cloud and disrupt efforts at \ - researching or understanding them, and the depth and nature of their connections to political \ - bodies like the SCG are unclear." - -/datum/codex_entry/psionics - display_name = "Psionics" - associated_strings = list("Psychic", "Psychic Powers", "Psi") - associated_paths = list( - /obj/item/book/manual/psionics, - /obj/item/clothing/head/helmet/space/psi_amp, - /obj/item/clothing/head/helmet/space/psi_amp/lesser - ) - lore_text = "Psionics are a relatively new phenomenon theorized to be linked to long-term exposure \ - to deep, uninhabited space. A tiny, tiny subset of people exposed to such conditions can develop the \ - ability to perform small feats like levitating coins or removing a headache with nothing but their mind. \ - A decade of study has resulted in the SCG determining that these psionics, mild as they are, don't pose \ - an operational or health risk, but they do encourage operants to register with a psionic regulation body \ - like the Cuchulain Foundation. \ -

              \ - However, psionics-enhancing implants, drugs and procedures are illegal in most human space, and \ - statistically seem to end in death for those foolish enough to make use of them. Being caught with a \ - cerebroenergetic enhancer, or the drug Three Eye, will net you a hefty prison sentence." - mechanics_text = "Psionic operants have a brain icon on the bottom right of the HUD. They can click it to toggle \ - their powers, or examine it to see the details of how to invoke each power, as well as their mental state. Items \ - made of nullglass will stop the use of powers, and overuse of powers can cause lethal brain damage." - antag_text = "Psionic amplifiers are illegal equipment, but can boost your psionics to massive levels at the cost \ - of occupying your hat slot permanently." \ No newline at end of file diff --git a/code/modules/codex/entries/spells.dm b/code/modules/codex/entries/spells.dm deleted file mode 100644 index 24609f5af898b..0000000000000 --- a/code/modules/codex/entries/spells.dm +++ /dev/null @@ -1,115 +0,0 @@ -/datum/codex_entry/eternal_darkness - associated_paths = list(/spell/targeted/shatter) - antag_text = "Assaults the mind of the target with fear of the unknown, shattering their sanity and causing brain damage." - -/datum/codex_entry/torment - associated_paths = list(/spell/targeted/torment) - antag_text = "Darkness stabs at the bodies of those around you. All within a medium range will suffer significant pain." - -/datum/codex_entry/blood_shard - associated_paths = list(/spell/hand/charges/blood_shard) - antag_text = "Launches a blood-red shard directly infront of you. Anyone hit by this will have their blood explode out of them in a spray of smaller shards. Stores two charges." - -/datum/codex_entry/drain_blood - associated_paths = list(/spell/aoe_turf/drain_blood) - antag_text = "Allows you to drain the blood from any targets in a short range, restoring your own." - -/datum/codex_entry/starburst - associated_paths = list(/spell/targeted/genetic/blind/starburst) - antag_text = "Grants you the power to blind non-cultists nearby." - -/datum/codex_entry/exchange_wounds - associated_paths = list(/spell/aoe_turf/exchange_wounds) - antag_text = "Allows you to sacrifice your own well-being for that of those around you." - -/datum/codex_entry/starlight - associated_paths = list(/spell/radiant_aura/starlight) - antag_text = "This spell makes you immune to laser fire, for a short while at least." - -/datum/codex_entry/burning_hand - associated_paths = list(/spell/targeted/equip_item/burning_hand) - antag_text = "Sets your hand aflame, allowing you to burn people with an ever-increasing flame." - -/datum/codex_entry/burning_grip - associated_paths = list(/spell/hand/burning_grip) - antag_text = "Burns an item in someone's hand so badly it causes them to burn." - -/datum/codex_entry/blood_boil - associated_paths = list(/spell/targeted/blood_boil) - antag_text = "Allow you to concentrate so deeply on a target that their body temperature increases, eventually setting them on fire." - -/datum/codex_entry/fireball - associated_paths = list(/spell/targeted/projectile/dumbfire/fireball) - antag_text = "A classic spell, grants you the ability to throw an exploding ball of flame in any direction." - -/datum/codex_entry/starlight - associated_paths = list(/spell/aoe_turf/disable_tech/starlight) - antag_text = "Gives you a spell of disabling machinery, and mechanical hearts." - -/datum/codex_entry/heal_target - associated_paths = list(/spell/targeted/heal_target) - antag_text = "Grants you the ability to heal yourself or a nearby target slightly." - -/datum/codex_entry/create_air/tower - associated_paths = list(/spell/create_air/tower) - antag_text = "Allows you to generate a livable atmosphere in the area you are in." - -/datum/codex_entry/acid_spray/tower - associated_paths = list(/spell/acid_spray/tower) - antag_text = "The simplest form of aggressive conjuration: acid spray is quite effective in melting both man and object." - -/datum/codex_entry/forcewall/tower - associated_paths = list(/spell/aoe_turf/conjure/forcewall/tower) - antag_text = "A temporary invincible wall for you to summon." - -/datum/codex_entry/faithful_hound/tower - associated_paths = list(/spell/aoe_turf/conjure/faithful_hound/tower) - antag_text = "This spell allows you to summon a singular spectral dog that guards the nearby area. Anyone without the password is barked at or bitten." - -/datum/codex_entry/dyrnwyn/tower - associated_paths = list(/spell/targeted/equip_item/dyrnwyn/tower) - antag_text = "This spell allows you to summon a golden firey sword for a short duration." - -/datum/codex_entry/shield/tower - associated_paths = list(/spell/targeted/equip_item/shield/tower) - antag_text = "This spell allows you to summon a magical shield for a short duration." - -/datum/codex_entry/fireball/tower - associated_paths = list(/spell/targeted/projectile/dumbfire/fireball/tower) - antag_text = "Imbue yourself with the power of exploding fire." - -/datum/codex_entry/force_portal/tower - associated_paths = list(/spell/aoe_turf/conjure/force_portal/tower) - antag_text = "This spell allows you to summon a force portal. Anything that hits the portal gets sucked inside and is then thrown out when the portal explodes." - -/datum/codex_entry/slippery_surface/tower - associated_paths = list(/spell/hand/slippery_surface/tower) - antag_text = "Allows you to slicken a small patch of floor. Anyone without sure-footing will find it hard to stay upright." - -/datum/codex_entry/smoke/tower - associated_paths = list(/spell/aoe_turf/smoke/tower) - antag_text = "Allows you to distill the nearby air into smoke." - -/datum/codex_entry/knock/tower - associated_paths = list(/spell/aoe_turf/knock/tower) - antag_text = "Allows you to open nearby doors without the keys." - -/datum/codex_entry/burning_grip/tower - associated_paths = list(/spell/hand/burning_grip/tower) - antag_text = "Allows you cause an object to heat up intensly in someone's hand, making them drop it and whatever skin is attached." - -/datum/codex_entry/ethereal_jaunt/tower - associated_paths = list(/spell/targeted/ethereal_jaunt/tower) - antag_text = "Allows you to liquify for a short duration, letting them pass through all dense objects." - -/datum/codex_entry/heal_target/tower - associated_paths = list(/spell/targeted/heal_target/tower) - antag_text = "Allows you to heal yourself, or others, for a slight amount." - -/datum/codex_entry/heal_target/major/tower - associated_paths = list(/spell/targeted/heal_target/major/tower) - antag_text = "Allows you to heal others for a great amount." - -/datum/codex_entry/heal_target/area/tower - associated_paths = list(/spell/targeted/heal_target/area/tower) - antag_text = "Allows you to heal everyone in an area for minor damage." \ No newline at end of file diff --git a/code/modules/codex/entries/stacks.dm b/code/modules/codex/entries/stacks.dm deleted file mode 100644 index 6e7c4c1819257..0000000000000 --- a/code/modules/codex/entries/stacks.dm +++ /dev/null @@ -1,36 +0,0 @@ -/datum/codex_entry/telecrystal - associated_paths = list(/obj/item/stack/telecrystal) - antag_text = "Telecrystals can be activated by utilizing them on devices with an actively running uplink. They will not activate on unactivated uplinks." - -/datum/codex_entry/rods - associated_paths = list(/obj/item/stack/material/rods) - mechanics_text = "Made from steel sheets. You can build a grille by using it in your hand. \ - Clicking on a floor without any tiles will reinforce the floor. You can make reinforced glass by combining rods and normal glass sheets." - -/datum/codex_entry/glass - associated_paths = list(/obj/item/stack/material/glass) - mechanics_text = "Use in your hand to build a window. Can be upgraded to reinforced glass by adding metal rods, which are made from metal sheets." - -/datum/codex_entry/glass_borg - associated_paths = list(/obj/item/stack/material/cyborg/glass) - mechanics_text = "Use in your hand to build a window. Can be upgraded to reinforced glass by adding metal rods, which are made from metal sheets.
              \ - As a synthetic, you can acquire more sheets of glass by recharging." - -/datum/codex_entry/glass_reinf - associated_paths = list(/obj/item/stack/material/glass/reinforced) - mechanics_text = "Use in your hand to build a window. Reinforced glass is much stronger against damage." - -/datum/codex_entry/glass_reinf_borg - associated_paths = list(/obj/item/stack/material/cyborg/glass/reinforced) - mechanics_text = "Use in your hand to build a window. Reinforced glass is much stronger against damage.
              \ - As a synthetic, you can gain more reinforced glass by recharging." - -/datum/codex_entry/steel_borg - associated_paths = list(/obj/item/stack/material/cyborg/steel) - mechanics_text = "Use in your hand to bring up the recipe menu. If you have enough sheets, click on something on the list to build it.
              \ - You can replenish your supply of metal as a synthetic by recharging." - -/datum/codex_entry/material_sheet - display_name = "material sheet" - associated_paths = list(/obj/item/stack/material) - mechanics_text = "Use in your hand to bring up the recipe menu. If you have enough sheets, click on something on the list to build it." \ No newline at end of file diff --git a/code/modules/codex/entries/structures.dm b/code/modules/codex/entries/structures.dm deleted file mode 100644 index e9150a3574f9a..0000000000000 --- a/code/modules/codex/entries/structures.dm +++ /dev/null @@ -1,27 +0,0 @@ -/datum/codex_entry/girder - associated_paths = list(/obj/structure/girder) - mechanics_text = "Use metal sheets on this to build a normal wall. Adding plasteel instead will make a reinforced wall.
              \ - A false wall can be made by using a crowbar on this girder, and then adding metal or plasteel.
              \ - You can dismantle the grider with a wrench." - -/datum/codex_entry/grille - associated_paths = list(/obj/structure/grille) - mechanics_text = "A powered and knotted wire underneath this will cause the grille (provided it is made of a conductive material) to shock anyone not wearing insulated gloves.
              \ - Wirecutters will turn the grille into rods instantly. Grilles are typically made with steel rods." - -/datum/codex_entry/lattice - associated_paths = list(/obj/structure/lattice) - mechanics_text = "Add a metal floor tile to build a floor on top of the lattice.
              \ - Lattices can be made by applying rods to a space tile." - -/datum/codex_entry/bed - associated_paths = list(/obj/structure/bed) - mechanics_text = "Click and drag yourself (or anyone) to this to buckle in. Click on this with an empty hand to undo the buckles.
              \ -
              \ - Anyone with restraints, such as handcuffs, will not be able to unbuckle themselves. They must use the Resist button, or verb, to break free of \ - the buckles, instead." - -/datum/codex_entry/cheval - associated_paths = list(/obj/structure/barricade/spike) - lore_text = "The cheval de frise (Frisian horse) is an ancient anti-cavalry barricade so named because they were widely deployed by the Frisians, who lacked easy access to horses to field their own cavalry." - mechanics_text = "Constructed by adding rods of any material to a barricade constructed of any material, this structure will injure anyone who moves into it." \ No newline at end of file diff --git a/code/modules/codex/entries/tools.dm b/code/modules/codex/entries/tools.dm deleted file mode 100644 index fa62574d55dd2..0000000000000 --- a/code/modules/codex/entries/tools.dm +++ /dev/null @@ -1,100 +0,0 @@ -/datum/codex_entry/wrench - associated_paths = list(/obj/item/wrench) - mechanics_text = "This versatile tool is used for dismantling machine frames, anchoring or unanchoring heavy objects like vending machines and emitters, and much more. In general, if you want something to move or stop moving entirely, you ought to use a wrench on it." - lore_text = "The classic open-end wrench (or spanner, if you prefer) hasn't changed significantly in shape in over 500 years, though these days they employ a bit of automated trickery to match various bolt sizes and configurations." - antag_text = "Not only is this handy tool good for making off with machines, but it even makes a weapon in a pinch!" - -/datum/codex_entry/screwdriver - associated_paths = list(/obj/item/screwdriver) - mechanics_text = "This tool is used to expose or safely hide away cabling. It can open and shut the maintenance panels on vending machines, airlocks, and much more. You can also use it, in combination with a crowbar, to install or remove windows." - lore_text = "Screws have not changed significantly in centuries, and neither have the drivers used to install and remove them." - antag_text = "In the world of breaking and entering, tools like multitools and wirecutters are the bread; the screwdriver is the butter. In a pinch, try targetting someone's eyes and stabbing them with it - it'll really hurt!" - -/datum/codex_entry/wirecutters - associated_paths = list(/obj/item/wirecutters) - mechanics_text = "This tool will cut wiring anywhere you see it - make sure to wear insulated gloves! When used on more complicated machines or airlocks, it can not only cut cables, but repair them, as well." - lore_text = "With modern alloys, today's wirecutters can snap through cables of astonishing thickness." - antag_text = "These cutters can be used to cripple the power anywhere on the ship. All it takes is some creativity, and being in the right place at the right time." - -/datum/codex_entry/welder - associated_paths = list(/obj/item/weldingtool) - mechanics_text = "Use in your hand to toggle the welder on and off. Hold in one hand and click with an empty hand to remove its internal tank. Click on an object to try to weld it. You can seal airlocks, attach heavy-duty machines like emitters and disposal chutes, and repair damaged walls - these are only a few of its uses. Each use of the welder will consume a unit of fuel. Be sure to wear protective equipment such as goggles, a mask, or certain voidsuit helmets to prevent eye damage. You can refill the welder with a welder tank by clicking on it, but be sure to turn it off first!" - lore_text = "One of many tools of ancient design, still used in today's busy world of engineering with only minor tweaks here and there. Compact machinery and innovations in fuel storage have allowed for conveniences like this one-piece, handheld welder to exist." - antag_text = "You can use a welder to rapidly seal off doors, ventilation ducts, and scrubbers. It also makes for a devastating weapon. Modify it with a screwdriver and stick some metal rods on it, and you've got the beginnings of a flamethrower." - -/datum/codex_entry/crowbar - associated_paths = list(/obj/item/crowbar) - mechanics_text = "Crowbars have countless uses: click on floor tiles to pry them loose. Use alongside a screwdriver to install or remove windows. Force open emergency shutters, or depowered airlocks. Open the panel of an unlocked APC. Pry a computer's circuit board free. And much more!" - lore_text = "As is the case with most standard-issue tools, crowbars are a simple and timeless design, the only difference being that advanced materials like plasteel have made them uncommonly tough." - antag_text = "Need to bypass a bolted door? You can use a crowbar to pry the electronics out of an airlock, provided that it has no power and has been welded shut." - -/datum/codex_entry/toolbelt - associated_paths = list(/obj/item/storage/belt/utility) - mechanics_text = "The tool-belt has enough slots to carry a full engineer's toolset: screwdriver, crowbar, wrench, welder, cable coil, and multitool. Simply click the belt to move a tool to one of its slots." - lore_text = "Good hide is hard to come by in certain regions of the galaxy. When they can't come across it, most TSCs will outfit their crews with toolbelts made of synthesized leather." - antag_text = "Only amateurs skip grabbing a tool-belt." - -/datum/codex_entry/toolbelt/crystal - associated_paths = list(/obj/item/storage/belt/utility/crystal) - lore_text = "While some Vigil units have tools integrated directly into their bodies, less specialized units simply use toolbelts." - -/datum/codex_entry/toolbox/crystal - associated_paths = list(/obj/item/storage/toolbox/crystal) - lore_text = "The most basic of Vigil units may sometimes use toolboxes like these, which are surprisingly similar in design to ones of human origin. On occasion, some units have been known to harbor a slight preference for these archaic designs over something more streamlined, for whatever reason." - -/datum/codex_entry/cable_painter - associated_paths = list(/obj/item/device/cable_painter) - mechanics_text = "Use this device to select a preferred cable color. Apply it to a bundle of cables on your person, or use it on installed cabling on the floor to paint it in your chosen color." - lore_text = "A device often used by spacefaring engineers to color-code their electrical systems. An experienced technician can identify traditional installations by color alone." - -/datum/codex_entry/paint_sprayer - associated_paths = list(/obj/item/device/paint_sprayer) - mechanics_text = "

              Used to paint floors, walls, windows, pipes, mech parts and airlocks.

              \ -

              While holding the paint sprayer in the active hand, Ctrl+Click on a target will pick its color and Shift+Click will remove paint from it.

              \ -

              Using the paint sprayer in hand will allow you to choose a decal for painting floors.

              \ -

              You can quickly select a color/preset by ctrl-clicking or alt-clicking the paint sprayer, respectively.

              " - lore_text = "This ubiquitous maintenance-grade paint sprayer isn't as fancy or convenient as modern consumer models, but with an internal synthesizer it never runs out of pigment!" - antag_text = "This thing would be perfect for vandalism. Could you write your name in the halls?" - -/datum/codex_entry/geiger_counter - associated_paths = list(/obj/item/device/geiger) - mechanics_text = "By using this item, you may toggle its scanning mode on and off. Examine it while it's on to check for ambient radiation." - lore_text = "For centuries geiger counters have been saving the lives of unsuspecting laborers and technicians. You can never be too careful around radiation." - -/datum/codex_entry/light_replacer - associated_paths = list(/obj/item/device/lightreplacer) - mechanics_text = "

              Examine or use this item to see how many lights are remaining and what color it's configured to print. You can feed it lightbulbs or sheets of glass to refill it.

              \ -

              Use this item in hand to change it's light color.

              " - lore_text = "Can you believe they used to have to screw lightbulbs in by hand?" - antag_text = "Using a cryptographic sequencer on this device will cause it to overload each light it replaces; when turned on, the new lights will explode!" - -/datum/codex_entry/multitool - associated_paths = list(/obj/item/device/multitool) - mechanics_text = "Multitools are incredibly versatile and can be used on a wide variety of machines. The most common use for this is to trip a device's wires without having to cut them. Simply click on an object with exposed wiring to use it. There might be other uses, as well..." - lore_text = "The common, every day multitool is descended from certain electrical tools from Earth's early space age. Though none too cheap, they are incredibly handy, and can be found in any self-respecting technician's toolbox." - antag_text = "This handy little tool can get you through doors, turn off power, and anything else you might need." - -/datum/codex_entry/t_scanner - associated_paths = list(/obj/item/device/t_scanner) - mechanics_text = "Use this to toggle its scanning capabilities on and off. While on, it will expose the layout of cabling and pipework in a 7x7 area around you." - lore_text = "The T-ray scanner is a modern spectroscopy solution and labor-saving device. Why work yourself to the bone removing floor panels when you can simply look through them with submillimeter radiation?" - -/datum/codex_entry/rcd - associated_paths = list(/obj/item/rcd) - mechanics_text = "On use, this device will toggle between various types of structures (or their removal). You can examine it to see its current mode. It must be loaded with compressed matter cartridges, which can be obtained from an autolathe. Click an adjacent tile to use the device." - lore_text = "Advents in material printing and synthesis technology have produced everyday miracles, such as the RCD, which in certain industries has single-handedly put entire construction crews out of a job." - antag_text = "RCDs can be incredibly dangerous in the wrong hands. Use them to swiftly block off corridors, or instantly breach the ship wherever you want." - -/datum/codex_entry/toolbox - associated_paths = list(/obj/item/storage/toolbox) - mechanics_text = "The toolbox is a general-purpose storage item with lots of space. With an item in your hand, click on it to store it inside." - lore_text = "No one remembers which company designed this particular toolbox. It's been mass-produced, retired, brought out of retirement, and counterfeited for decades." - antag_text = "Carrying one of these and being bald tends to instill a certain primal fear in most people." - -/datum/codex_entry/tray - associated_paths = list(/obj/item/tray) - mechanics_text = "A storage item for food; foodstuffs on the tray take up half as much space as they normally would, letting you carry ingredients or food easily.\ -

              Switch to Grab intent to scoop up items by hitting them, or add them to the tray directly. Hit a table with Grab intent active to unload the tray's contents onto it. \ - You can also activate the tray in-hand to dump its contents onto whatever's beneath you.\ -

              Non-Grab intents can be used to put the tray down onto surfaces without dumping it out, or Harm intent can be used to hit people with the tray itself. \ - If you're a cyborg, robot, or other non-human, Help intent replaces Grab intent for interactions that use it." diff --git a/code/modules/codex/entries/turfs.dm b/code/modules/codex/entries/turfs.dm deleted file mode 100644 index 69233735ff8d8..0000000000000 --- a/code/modules/codex/entries/turfs.dm +++ /dev/null @@ -1,5 +0,0 @@ -/datum/codex_entry/wall - associated_paths = list(/turf/simulated/wall) - mechanics_text = "You can deconstruct this by welding it, and then wrenching the girder.
              \ - You can build a wall by using metal sheets to make a girder, then adding almost any material as plating.
              \ - Walls are typically made of steel girders, plated with steel or plasteel." \ No newline at end of file diff --git a/code/modules/codex/entries/weapons.dm b/code/modules/codex/entries/weapons.dm deleted file mode 100644 index 5551b291c3948..0000000000000 --- a/code/modules/codex/entries/weapons.dm +++ /dev/null @@ -1,15 +0,0 @@ -/datum/codex_entry/baton - associated_paths = list(/obj/item/melee/baton) - mechanics_text = "The baton needs to be turned on to apply the stunning effect. Use it in your hand to toggle it on or off. If your intent is \ - set to 'harm', you will inflict damage when using it, regardless if it is on or not. Each stun reduces the baton's charge, which can be replenished by \ - putting it inside a weapon recharger." - -/datum/codex_entry/energy_sword - associated_paths = list(/obj/item/melee/energy/sword) - antag_text = "The energy sword is a very strong melee weapon, capable of severing limbs easily, if they are targeted. It can also has a chance \ - to block projectiles and melee attacks while it is on and being held. The sword can be toggled on or off by using it in your hand. While it is off, \ - it can be concealed in your pocket or bag." - -/datum/codex_entry/cultblade - associated_paths = list(/obj/item/melee/cultblade) - antag_text = "This sword is a powerful weapon, capable of severing limbs easily, if they are targeted. Nonbelivers are unable to use this weapon." diff --git a/code/modules/crafting/_crafting_holder.dm b/code/modules/crafting/_crafting_holder.dm deleted file mode 100644 index 4b0ef58bbe343..0000000000000 --- a/code/modules/crafting/_crafting_holder.dm +++ /dev/null @@ -1,59 +0,0 @@ -/obj/item/crafting_holder - var/decl/crafting_stage/current_crafting_stage - var/label_name - -/obj/item/crafting_holder/Initialize(var/ml, var/decl/crafting_stage/initial_stage, var/obj/item/target, var/obj/item/tool, var/mob/user) - . = ..() - name = "[target.name] assembly" - var/mob/M = target.loc - if(istype(M)) - M.drop_from_inventory(target) - target.forceMove(src) - current_crafting_stage = initial_stage - update_icon() - update_strings() - -/obj/item/crafting_holder/Destroy() - for(var/thing in contents) - qdel(thing) - . = ..() - -/obj/item/crafting_holder/attackby(var/obj/item/W, var/mob/user) - - if(istype(W, /obj/item/pen)) - var/new_label = sanitizeSafe(input(user, "What do you wish to label this assembly?", "Assembly Labelling", label_name), MAX_NAME_LEN) - if(new_label && !user.incapacitated() && W.loc == user && user.Adjacent(src) && !QDELETED(src)) - to_chat(user, SPAN_NOTICE("You label \the [src] with '[new_label]'.")) - label_name = new_label - return - - if(current_crafting_stage) - var/decl/crafting_stage/next_stage = current_crafting_stage.get_next_stage(W) - if(next_stage && next_stage.progress_to(W, user, src)) - advance_to(next_stage, user, W) - return - - . = ..() - -/obj/item/crafting_holder/proc/advance_to(var/decl/crafting_stage/next_stage, var/mob/user, var/obj/item/tool) - var/obj/item/product = next_stage && next_stage.get_product(src) - if(product) - if(ismob(product) && label_name) - var/mob/M = product - M.SetName(label_name) - if(ismob(src.loc)) - var/mob/M = src.loc - M.drop_from_inventory(src) - qdel_self() - else - current_crafting_stage = next_stage - update_icon() - update_strings() - -/obj/item/crafting_holder/on_update_icon() - icon = current_crafting_stage.item_icon - icon_state = current_crafting_stage.item_icon_state - -/obj/item/crafting_holder/proc/update_strings() - if(current_crafting_stage.item_desc) - desc = current_crafting_stage.item_desc diff --git a/code/modules/crafting/_crafting_stage.dm b/code/modules/crafting/_crafting_stage.dm deleted file mode 100644 index 7ff86f0f895db..0000000000000 --- a/code/modules/crafting/_crafting_stage.dm +++ /dev/null @@ -1,116 +0,0 @@ -/decl/crafting_stage - var/item_desc = "It's an unfinished item of some sort." - var/item_icon = 'icons/obj/crafting_icons.dmi' - var/item_icon_state = "default" - var/completion_trigger_type = /obj/item - var/consume_completion_trigger = TRUE - var/stack_consume_amount - var/progress_message - var/begins_with_object_type - var/list/next_stages - var/product - -/decl/crafting_stage/New() - var/stages = list() - for(var/nid in next_stages) - stages += decls_repository.get_decl(nid) - next_stages = stages - ..() - -/decl/crafting_stage/proc/can_begin_with(var/obj/item/thing) - . = istype(thing, begins_with_object_type) - -/decl/crafting_stage/proc/get_next_stage(var/obj/item/trigger) - for(var/decl/crafting_stage/next_stage in next_stages) - if(next_stage.is_appropriate_tool(trigger)) - return next_stage - -/decl/crafting_stage/proc/progress_to(var/obj/item/thing, var/mob/user, var/obj/item/target) - . = is_appropriate_tool(thing) && consume(user, thing, target) - if(.) - on_progress(user) - -/decl/crafting_stage/proc/is_appropriate_tool(var/obj/item/thing) - . = istype(thing, completion_trigger_type) - -/decl/crafting_stage/proc/consume(var/mob/user, var/obj/item/thing, var/obj/item/target) - . = !consume_completion_trigger || (user.unEquip(thing) && thing.forceMove(target)) - if(. && stack_consume_amount > 0) - var/obj/item/stack/stack = thing - if(!istype(stack) || stack.amount < stack_consume_amount) - on_insufficient_material(user) - return FALSE - stack.use(stack_consume_amount) - -/decl/crafting_stage/proc/on_insufficient_material(var/mob/user, var/obj/item/stack/thing) - if(istype(thing)) - to_chat(user, SPAN_NOTICE("You need at least [stack_consume_amount] [stack_consume_amount == 1 ? thing.singular_name : thing.plural_name] to complete this task.")) - -/decl/crafting_stage/proc/on_progress(var/mob/user) - if(progress_message) - to_chat(user, SPAN_NOTICE(progress_message)) - -/decl/crafting_stage/proc/get_product(var/obj/item/work) - . = ispath(product) && new product(get_turf(work)) - -/decl/crafting_stage/wiring - completion_trigger_type = /obj/item/stack/cable_coil - stack_consume_amount = 5 - consume_completion_trigger = FALSE - -/decl/crafting_stage/material - completion_trigger_type = /obj/item/stack/material - stack_consume_amount = 5 - consume_completion_trigger = FALSE - var/stack_material = MATERIAL_STEEL - -/decl/crafting_stage/material/consume(var/mob/user, var/obj/item/thing, var/obj/item/target) - var/obj/item/stack/material/M = thing - . = istype(M) && (!stack_material || M.material.name == stack_material) && ..() - -/decl/crafting_stage/welding/consume(var/mob/user, var/obj/item/thing, var/obj/item/target) - var/obj/item/weldingtool/T = thing - . = istype(T) && T.remove_fuel(0, user) && T.isOn() - -/decl/crafting_stage/welding - consume_completion_trigger = FALSE - -/decl/crafting_stage/welding/on_progress(var/mob/user) - ..() - playsound(user.loc, 'sound/items/Welder2.ogg', 100, 1) - -/decl/crafting_stage/screwdriver - consume_completion_trigger = FALSE - -/decl/crafting_stage/screwdriver/on_progress(var/mob/user) - ..() - playsound(user.loc, 'sound/items/Screwdriver.ogg', 100, 1) - -/decl/crafting_stage/screwdriver/progress_to(obj/item/thing, mob/user) - . = ..() && isScrewdriver(thing) - -/decl/crafting_stage/tape - consume_completion_trigger = FALSE - completion_trigger_type = /obj/item/tape_roll - -/decl/crafting_stage/pipe - completion_trigger_type = /obj/item/pipe - -/decl/crafting_stage/scanner - completion_trigger_type = /obj/item/device/scanner/health - -/decl/crafting_stage/proximity - completion_trigger_type = /obj/item/device/assembly/prox_sensor - -/decl/crafting_stage/robot_arms - progress_message = "You add the robotic arm to the assembly." - completion_trigger_type = /obj/item/robot_parts - -/decl/crafting_stage/robot_arms/is_appropriate_tool(var/obj/item/thing) - . = istype(thing, /obj/item/robot_parts/l_arm) || istype(thing, /obj/item/robot_parts/r_arm) - -/decl/crafting_stage/empty_storage/can_begin_with(obj/item/thing) - . = ..() - if(. && istype(thing, /obj/item/storage)) - var/obj/item/storage/box = thing - . = (length(box.contents) == 0) \ No newline at end of file diff --git a/code/modules/crafting/crafting_butterflyknife.dm b/code/modules/crafting/crafting_butterflyknife.dm deleted file mode 100644 index 57ec80b10e980..0000000000000 --- a/code/modules/crafting/crafting_butterflyknife.dm +++ /dev/null @@ -1,32 +0,0 @@ -/obj/item/material/butterflyblade - name = "knife blade" - desc = "A knife blade. Unusable as a weapon without a grip." - icon = 'icons/obj/buildingobject.dmi' - icon_state = "butterfly2" - force_multiplier = 0.1 - thrown_force_multiplier = 0.1 - -/obj/item/material/butterflyhandle - name = "concealed knife grip" - desc = "A plasteel grip with screw fittings for a blade." - icon = 'icons/obj/buildingobject.dmi' - icon_state = "butterfly1" - force_multiplier = 0.1 - thrown_force_multiplier = 0.1 - -/decl/crafting_stage/balisong_blade - begins_with_object_type = /obj/item/material/butterflyhandle - item_desc = "It's an unfinished balisong with some loose screws." - item_icon_state = "butterfly" - consume_completion_trigger = TRUE - completion_trigger_type = /obj/item/material/butterflyblade - progress_message = "You attach the knife blade to the handle." - next_stages = list(/decl/crafting_stage/screwdriver/balisong) - -/decl/crafting_stage/screwdriver/balisong - progress_message = "You secure the handle and the blade together." - product = /obj/item/material/knife/folding/combat/balisong - -/decl/crafting_stage/screwdriver/balisong/get_product(var/obj/item/work) - var/obj/item/material/butterflyblade/blade = locate() in work - . = ispath(product, /obj/item/material) && new product(get_turf(work), blade && blade.material && blade.material.name) \ No newline at end of file diff --git a/code/modules/crafting/crafting_cannon.dm b/code/modules/crafting/crafting_cannon.dm deleted file mode 100644 index cbcc21317c4fb..0000000000000 --- a/code/modules/crafting/crafting_cannon.dm +++ /dev/null @@ -1,42 +0,0 @@ -/obj/item/cannonframe - name = "pneumatic cannon frame" - desc = "A half-finished pneumatic cannon." - icon = 'icons/obj/crafting_icons.dmi' - icon_state = "pneumatic0" - item_state = "pneumatic" - -/decl/crafting_stage/pipe/cannon - item_desc = "It is a half-finished pneumatic cannon with a pipe segment installed." - progress_message = "You secure the piping inside the frame." - next_stages = list(/decl/crafting_stage/welding/cannon_pipe) - item_icon_state = "pneumatic1" - begins_with_object_type = /obj/item/cannonframe - -/decl/crafting_stage/welding/cannon_pipe - progress_message = "You weld the pipe into place." - item_desc = "It is a half-finished pneumatic cannon with a pipe segment welded in place." - next_stages = list(/decl/crafting_stage/material/cannon_chassis) - item_icon_state = "pneumatic2" - -/decl/crafting_stage/material/cannon_chassis - progress_message = "You assemble a chassis around the cannon frame." - item_desc = "It is a half-finished pneumatic cannon with an outer chassis installed." - next_stages = list(/decl/crafting_stage/welding/cannon_chassis) - item_icon_state = "pneumatic3" - -/decl/crafting_stage/welding/cannon_chassis - progress_message = "You weld the metal chassis together." - item_desc = "It is a half-finished pneumatic cannon with an outer chassis welded in place." - next_stages = list(/decl/crafting_stage/cannon_valve) - item_icon_state = "pneumatic4" - -/decl/crafting_stage/cannon_valve - completion_trigger_type = /obj/item/device/transfer_valve - progress_message = "You install the transfer valve and connect it to the piping." - item_desc = "It is a half-finished pneumatic cannon with a transfer valve installed." - next_stages = list(/decl/crafting_stage/welding/cannon_valve) - item_icon_state = "pneumatic5" - -/decl/crafting_stage/welding/cannon_valve - progress_message = "You weld the valve into place." - product = /obj/item/gun/launcher/pneumatic diff --git a/code/modules/crafting/crafting_coilgun.dm b/code/modules/crafting/crafting_coilgun.dm deleted file mode 100644 index 6d3c03a8fbaaf..0000000000000 --- a/code/modules/crafting/crafting_coilgun.dm +++ /dev/null @@ -1,60 +0,0 @@ -// We really need some datums for this. -/obj/item/coilgun_assembly - name = "coilgun stock" - desc = "It might be a coilgun, someday." - icon = 'icons/obj/crafting_icons.dmi' - icon_state = "coilgun_construction_1" - -/decl/crafting_stage/material/coilgun_body - begins_with_object_type = /obj/item/coilgun_assembly - item_desc = "It's a half-built coilgun with a metal frame loosely shaped around the stock." - progress_message = "You shape some steel sheets around the stock to form a body." - item_icon_state = "coilgun_construction_2" - next_stages = list(/decl/crafting_stage/tape/coilgun) - -/decl/crafting_stage/tape/coilgun - progress_message = "You tape the coilgun components securely together" - item_desc = "It's a half-built coilgun with a metal frame duct-taped to the stock." - item_icon_state = "coilgun_construction_3" - next_stages = list(/decl/crafting_stage/pipe/coilgun) - -/decl/crafting_stage/pipe/coilgun - progress_message = "You jam the pipe into the coilgun assembly, forming a barrel." - item_desc = "It's a half-built coilgun with a length of pipe attached to the body." - item_icon_state = "coilgun_construction_4" - next_stages = list(/decl/crafting_stage/welding/coilgun) - -/decl/crafting_stage/welding/coilgun - progress_message = "You weld the barrel of the coilgun assembly into place." - item_desc = "It's a half-built coilgun with a length of pipe welded to the body." - item_icon_state = "coilgun_construction_5" - next_stages = list(/decl/crafting_stage/wiring/coilgun) - -/decl/crafting_stage/wiring/coilgun - progress_message = "You wire the components of the coilgun assembly together." - item_desc = "It's a half-built coilgun with a cable mount and capacitor jack wired to the frame." - item_icon_state = "coilgun_construction_6" - next_stages = list(/decl/crafting_stage/coilgun_coil) - -/decl/crafting_stage/coilgun_coil - progress_message = "You thread a superconducting coil over the barrel of the coilgun assembly." - completion_trigger_type = /obj/item/stock_parts/smes_coil - item_desc = "It's a half-built coilgun with a single superconducting coil threaded onto the barrel." - item_icon_state = "coilgun_construction_7" - next_stages = list(/decl/crafting_stage/coilgun_coil/two) - -/decl/crafting_stage/coilgun_coil/two - progress_message = "You thread a second superconducting coil over the barrel of the coilgun assembly." - item_desc = "It's a half-built coilgun with a pair of superconducting coils threaded onto the barrel." - item_icon_state = "coilgun_construction_8" - next_stages = list(/decl/crafting_stage/coilgun_coil/three) - -/decl/crafting_stage/coilgun_coil/three - progress_message = "You thread a third and final superconducting coil over the barrel of the coilgun assembly." - item_desc = "It's a half-built coilgun with three superconducting coils attached to the body, waiting to be secured." - item_icon_state = "coilgun_construction_9" - next_stages = list(/decl/crafting_stage/screwdriver/coilgun) - -/decl/crafting_stage/screwdriver/coilgun - progress_message = "You secure the coilgun assembly together, finishing it off." - product = /obj/item/gun/magnetic diff --git a/code/modules/crafting/crafting_crossbow.dm b/code/modules/crafting/crafting_crossbow.dm deleted file mode 100644 index ab8a96dc01bbf..0000000000000 --- a/code/modules/crafting/crafting_crossbow.dm +++ /dev/null @@ -1,46 +0,0 @@ -/obj/item/crossbowframe - name = "crossbow frame" - desc = "A half-finished crossbow." - icon_state = "crossbowframe0" - item_state = "crossbow-solid" - icon = 'icons/obj/crafting_icons.dmi' - -/decl/crafting_stage/material/crossbow_rods - begins_with_object_type = /obj/item/crossbowframe - completion_trigger_type = /obj/item/stack/material/rods - stack_consume_amount = 3 - item_icon_state = "crossbowframe1" - progress_message = "You assemble a backbone of rods around the wooden stock." - next_stages = list(/decl/crafting_stage/welding/crossbow_rods) - -/decl/crafting_stage/welding/crossbow_rods - completion_trigger_type = /obj/item/weldingtool - item_icon_state = "crossbowframe2" - progress_message = "You weld the rods into place." - next_stages = list(/decl/crafting_stage/wiring/crossbow_battery) - item_desc = "It is a half-built crossbow with a loose rod frame in place." - -/decl/crafting_stage/wiring/crossbow_battery - item_icon_state = "crossbowframe3" - progress_message = "You wire a crude cell mount into the top of the crossbow." - next_stages = list(/decl/crafting_stage/material/crossbow_plastic) - item_desc = "It is a half-built crossbow with a steel backbone welded in place." - -/decl/crafting_stage/material/crossbow_plastic - completion_trigger_type = /obj/item/stack/material - stack_consume_amount = 3 - item_icon_state = "crossbowframe4" - item_desc = "It is a half-built crossbow with a steel backbone and a cell mount installed." - progress_message = "You assemble and install a heavy plastic lath onto the crossbow." - next_stages = list(/decl/crafting_stage/wiring/crossbow_string) - stack_material = MATERIAL_PLASTIC - -/decl/crafting_stage/wiring/crossbow_string - item_icon_state = "crossbowframe5" - item_desc = "It is a half-built crossbow with a steel backbone, plastic lath and a cell mount installed." - progress_message = "You string a steel cable across the crossbow's lath." - next_stages = list(/decl/crafting_stage/screwdriver/crossbow) - -/decl/crafting_stage/screwdriver/crossbow - progress_message = "You secure the crossbow's various parts." - product = /obj/item/gun/launcher/crossbow diff --git a/code/modules/crafting/crafting_ed209.dm b/code/modules/crafting/crafting_ed209.dm deleted file mode 100644 index 2d5b0c38e54a0..0000000000000 --- a/code/modules/crafting/crafting_ed209.dm +++ /dev/null @@ -1,71 +0,0 @@ -/decl/crafting_stage/material/ed209_start - stack_consume_amount = 5 - stack_material = MATERIAL_STEEL - begins_with_object_type = /obj/item/robot_parts/robot_suit - next_stages = list(/decl/crafting_stage/ed209_legs) - progress_message = "You bulk out the robotic frame with the steel sheets." - item_icon_state = "ed209_1" - -/decl/crafting_stage/material/ed209_start/can_begin_with(obj/item/thing) - . = ..() - if(.) - var/obj/item/robot_parts/robot_suit/suit = thing - . = !length(suit.parts) - -/decl/crafting_stage/ed209_legs - completion_trigger_type = /obj/item/robot_parts - progress_message = "You fit the frame with a right leg." - item_icon_state = "ed209_2" - next_stages = list(/decl/crafting_stage/ed209_legs/left) - -/decl/crafting_stage/ed209_legs/is_appropriate_tool(var/obj/item/thing) - . = istype(thing, /obj/item/robot_parts/l_leg) || istype(thing, /obj/item/robot_parts/r_leg) - -/decl/crafting_stage/ed209_legs/left - progress_message = "You fit the frame with a left leg." - item_icon_state = "ed209_3" - next_stages = list(/decl/crafting_stage/ed209_armour) - -/decl/crafting_stage/ed209_armour - completion_trigger_type = /obj/item/clothing/accessory/armor_plate - progress_message = "You layer the armour plating over the frame." - item_icon_state = "ed209_4" - next_stages = list(/decl/crafting_stage/welding/ed209) - -/decl/crafting_stage/welding/ed209 - progress_message = "You weld the armour to the frame." - next_stages = list(/decl/crafting_stage/ed209_helmet) - item_icon_state = "ed209_4" - -/decl/crafting_stage/ed209_helmet - progress_message = "You add the helmet to the frame." - next_stages = list(/decl/crafting_stage/ed209_proximity) - completion_trigger_type = /obj/item/clothing/head/helmet - item_icon_state = "ed209_5" - -/decl/crafting_stage/ed209_proximity - progress_message = "You add the proximity sensor to the frame." - next_stages = list(/decl/crafting_stage/wiring/ed209) - item_icon_state = "ed209_6" - -/decl/crafting_stage/wiring/ed209 - progress_message = "You wire the frame together." - stack_consume_amount = 1 - next_stages = list(/decl/crafting_stage/ed209_taser) - item_icon_state = "ed209_6" - -/decl/crafting_stage/ed209_taser - progress_message = "You add the taser to the frame." - next_stages = list(/decl/crafting_stage/screwdriver/ed209) - completion_trigger_type = /obj/item/gun/energy/taser - item_icon_state = "ed209_7" - -/decl/crafting_stage/screwdriver/ed209 - progress_message = "You secure the taser in place." - next_stages = list(/decl/crafting_stage/ed209_cell) - item_icon_state = "ed209_7" - -/decl/crafting_stage/ed209_cell - progress_message = "You complete the ED209." - product = /mob/living/bot/secbot/ed209 - completion_trigger_type = /obj/item/cell diff --git a/code/modules/crafting/crafting_farmbot.dm b/code/modules/crafting/crafting_farmbot.dm deleted file mode 100644 index 82d78c6638475..0000000000000 --- a/code/modules/crafting/crafting_farmbot.dm +++ /dev/null @@ -1,37 +0,0 @@ -/obj/item/farmbot_arm_assembly - name = "water tank/robot arm assembly" - desc = "A water tank with a robot arm permanently grafted to it." - icon = 'icons/mob/bot/farmbot.dmi' - icon_state = "water_arm" - w_class = ITEM_SIZE_NORMAL - var/obj/tank - -/obj/item/farmbot_arm_assembly/Initialize(var/ml, var/theTank) - . = ..() - if(!theTank) - theTank = new /obj/structure/reagent_dispensers/watertank - tank = theTank - tank.forceMove(src) - -/decl/crafting_stage/farmbot_begin - progress_message = "You attach a plant scanner to the water tank." - begins_with_object_type = /obj/item/farmbot_arm_assembly - completion_trigger_type = /obj/item/device/scanner/plant - next_stages = list(/decl/crafting_stage/farmbot_bucket) - item_icon_state = "farmbot_1" - -/decl/crafting_stage/farmbot_bucket - progress_message = "You attach the bucket to the assembly." - completion_trigger_type = /obj/item/reagent_containers/glass/bucket - next_stages = list(/decl/crafting_stage/farmbot_minihoe) - item_icon_state = "farmbot_1" - -/decl/crafting_stage/farmbot_minihoe - progress_message = "You attach the minihoe to the assembly." - completion_trigger_type = /obj/item/material/minihoe - next_stages = list(/decl/crafting_stage/proximity/farmbot) - item_icon_state = "farmbot_1" - -/decl/crafting_stage/proximity/farmbot - progress_message = "You attach the proximity sensor and finish off the Farmbot. Beep boop." - product = /mob/living/bot/farmbot diff --git a/code/modules/crafting/crafting_floorbot.dm b/code/modules/crafting/crafting_floorbot.dm deleted file mode 100644 index ad4042e9703e6..0000000000000 --- a/code/modules/crafting/crafting_floorbot.dm +++ /dev/null @@ -1,24 +0,0 @@ -/decl/crafting_stage/empty_storage/floorbot - stack_consume_amount = 10 - begins_with_object_type = /obj/item/storage/toolbox - completion_trigger_type = /obj/item/stack/tile - progress_message = "You dump a bunch of floor tiles into the empty toolbox." - item_icon_state = "floorbot_1" - next_stages = list(/decl/crafting_stage/proximity/floorbot) - -/decl/crafting_stage/proximity/floorbot - progress_message = "You wedge the proximity sensor in amongst the floor tiles." - item_icon_state = "floorbot_2" - next_stages = list(/decl/crafting_stage/robot_arms/floorbot) - -/decl/crafting_stage/robot_arms/floorbot - progress_message = "You add the arms to the assembly to create a floorbot. Beep boop." - product = /mob/living/bot/floorbot - -/decl/crafting_stage/robot_arms/floorbot/get_product(obj/item/work) - . = ..() - if (istype(., /mob/living/bot/floorbot)) - var/mob/living/bot/floorbot/bot = . - var/obj/item/storage/toolbox/box = locate() in work - bot.boxtype = box.icon_state - bot.update_icon() diff --git a/code/modules/crafting/crafting_janibot.dm b/code/modules/crafting/crafting_janibot.dm deleted file mode 100644 index f11ee92faa422..0000000000000 --- a/code/modules/crafting/crafting_janibot.dm +++ /dev/null @@ -1,9 +0,0 @@ -/decl/crafting_stage/proximity/janibot - begins_with_object_type = /obj/item/reagent_containers/glass/bucket - progress_message = "You put the proximity sensor into the bucket." - item_icon_state = "janibot_1" - next_stages = list(/decl/crafting_stage/robot_arms/janibot) - -/decl/crafting_stage/robot_arms/janibot - progress_message = "You attach the arm to the assembly and finish off the Janibot. Beep boop." - product = /mob/living/bot/cleanbot diff --git a/code/modules/crafting/crafting_medibot.dm b/code/modules/crafting/crafting_medibot.dm deleted file mode 100644 index 8695ba31bbac4..0000000000000 --- a/code/modules/crafting/crafting_medibot.dm +++ /dev/null @@ -1,24 +0,0 @@ -/decl/crafting_stage/empty_storage/medibot - begins_with_object_type = /obj/item/storage/firstaid - progress_message = "You add the robot arm to the first aid kit." - completion_trigger_type = /obj/item/robot_parts - item_icon_state = "medibot_1" - next_stages = list(/decl/crafting_stage/scanner) - -/decl/crafting_stage/scanner - progress_message = "You add the health sensor to the assembly" - item_icon_state = "medibot_2" - next_stages = list(/decl/crafting_stage/proximity/medibot) - -/decl/crafting_stage/proximity/medibot - progress_message = "You attach the proximity sensor and finish off the Medibot. Beep boop." - product = /mob/living/bot/medbot - -/decl/crafting_stage/proximity/medibot/get_product(obj/item/work) - . = ..() - if(istype(., /mob/living/bot/medbot)) - var/mob/living/bot/medbot/bot = . - var/obj/item/storage/firstaid/kit = locate() in work - if(bot && kit) - bot.skin = kit.icon_state - bot.update_icon() diff --git a/code/modules/crafting/crafting_secbot.dm b/code/modules/crafting/crafting_secbot.dm deleted file mode 100644 index ca0772c78c539..0000000000000 --- a/code/modules/crafting/crafting_secbot.dm +++ /dev/null @@ -1,28 +0,0 @@ -/decl/crafting_stage/secbot_signaller - begins_with_object_type = /obj/item/clothing/head/helmet - completion_trigger_type = /obj/item/device/assembly/signaler - progress_message = "You add the signaler to the helmet." - item_icon_state = "secbot_1" - next_stages = list(/decl/crafting_stage/welding/secbot) - -/decl/crafting_stage/secbot_signaller/can_begin_with(var/obj/item/thing) - . = istype(thing) && thing.type == begins_with_object_type - -/decl/crafting_stage/welding/secbot - progress_message = "You weld a hole into the front of the assembly." - item_icon_state = "secbot_2" - next_stages = list(/decl/crafting_stage/proximity/secbot) - -/decl/crafting_stage/proximity/secbot - progress_message = "You add the proximity sensor to the assembly." - item_icon_state = "secbot_3" - next_stages = list(/decl/crafting_stage/robot_arms/secbot) - -/decl/crafting_stage/robot_arms/secbot - item_icon_state = "secbot_4" - next_stages = list(/decl/crafting_stage/secbot_baton) - -/decl/crafting_stage/secbot_baton - completion_trigger_type = /obj/item/melee/baton - progress_message = "You complete the Securitron! Beep boop." - product = /mob/living/bot/secbot diff --git a/code/modules/crafting/crafting_spear_prod.dm b/code/modules/crafting/crafting_spear_prod.dm deleted file mode 100644 index 6ee781082ea7c..0000000000000 --- a/code/modules/crafting/crafting_spear_prod.dm +++ /dev/null @@ -1,34 +0,0 @@ -/decl/crafting_stage/material/stunprod_rod - begins_with_object_type = /obj/item/handcuffs/cable - item_icon_state = "wiredrod" - progress_message = "You wind the cable cuffs around the top of the steel rod." - completion_trigger_type = /obj/item/stack/material/rods - stack_consume_amount = 1 - next_stages = list( - /decl/crafting_stage/spear_blade_shard, - /decl/crafting_stage/spear_blade_blade, - /decl/crafting_stage/stunprod_wirecutters - ) - -/decl/crafting_stage/spear_blade_shard - completion_trigger_type = /obj/item/material/shard - progress_message = "You fasten the shard to the top of the rod with the cable." - product = /obj/item/material/twohanded/spear - -/decl/crafting_stage/spear_blade_shard/get_product(var/obj/item/work) - var/obj/item/material/shard/blade = locate() in work - . = ispath(product, /obj/item/material) && new product(get_turf(work), blade && blade.material && blade.material.name) - -/decl/crafting_stage/spear_blade_blade - completion_trigger_type = /obj/item/material/butterflyblade - progress_message = "You fasten the blade to the top of the rod with the cable." - product = /obj/item/material/twohanded/spear - -/decl/crafting_stage/spear_blade_blade/get_product(var/obj/item/work) - var/obj/item/material/butterflyblade/blade = locate() in work - . = ispath(product, /obj/item/material) && new product(get_turf(work), blade && blade.material && blade.material.name) - -/decl/crafting_stage/stunprod_wirecutters - completion_trigger_type = /obj/item/wirecutters - progress_message = "You fasten the wirecutters to the top of the rod with the cable, prongs outward." - product = /obj/item/melee/baton/cattleprod diff --git a/code/modules/crafting/crafting_zipgun.dm b/code/modules/crafting/crafting_zipgun.dm deleted file mode 100644 index 4dcfef208d2cd..0000000000000 --- a/code/modules/crafting/crafting_zipgun.dm +++ /dev/null @@ -1,30 +0,0 @@ -/obj/item/zipgunframe - name = "zip gun frame" - desc = "A half-finished zip gun." - icon = 'icons/obj/crafting_icons.dmi' - icon_state = "zipgun0" - item_state = "zipgun-solid" - -/decl/crafting_stage/pipe/zipgun - begins_with_object_type = /obj/item/zipgunframe - item_desc = "A half-built zipgun with a barrel loosely fitted to the stock." - item_icon_state = "zipgun1" - progress_message = "You fit the pipe into the zipgun as a crude barrel." - next_stages = list(/decl/crafting_stage/tape/zipgun) - -/decl/crafting_stage/tape/zipgun - item_icon_state = "zipgun2" - item_desc = "A half-built zipgun with a barrel that has been secured to the stock with tape." - progress_message = "You secure the zipgun assembly with the roll of tape." - next_stages = list(/decl/crafting_stage/zipgun_trigger) - -/decl/crafting_stage/zipgun_trigger - item_icon_state = "zipgun3" - completion_trigger_type = /obj/item/device/assembly/mousetrap - item_desc = "A half-built zipgun with a trigger and firing pin assembly loosely fitted into place." - progress_message = "You take the mousetrap apart and construct a crude trigger for the zipgun." - next_stages = list(/decl/crafting_stage/screwdriver/zipgun) - -/decl/crafting_stage/screwdriver/zipgun - progress_message = "You secure the trigger assembly and finish off the zipgun." - product = /obj/item/gun/projectile/pirate/unloaded diff --git a/code/modules/culture_descriptor/_culture.dm b/code/modules/culture_descriptor/_culture.dm deleted file mode 100644 index 136e5d5f76b87..0000000000000 --- a/code/modules/culture_descriptor/_culture.dm +++ /dev/null @@ -1,107 +0,0 @@ -/decl/cultural_info - var/name - var/desc_type - var/description - var/economic_power = 1 - var/language - var/name_language - var/default_language - var/list/additional_langs - var/list/secondary_langs - var/category - var/hidden - var/hidden_from_codex - var/list/qualifications - -/decl/cultural_info/New() - - if(!default_language) - default_language = language - - if(!name_language && default_language) - name_language = default_language - - // Remove any overlap for the sake of presentation. - if(LAZYLEN(additional_langs)) - additional_langs -= language - additional_langs -= name_language - additional_langs -= default_language - UNSETEMPTY(additional_langs) - - if(LAZYLEN(secondary_langs)) - secondary_langs -= language - secondary_langs -= name_language - secondary_langs -= default_language - if(LAZYLEN(additional_langs)) - secondary_langs -= additional_langs - UNSETEMPTY(secondary_langs) - - ..() - -/decl/cultural_info/proc/get_random_name(var/gender) - var/datum/language/_language - if(name_language) - _language = all_languages[name_language] - else if(default_language) - _language = all_languages[default_language] - else if(language) - _language = all_languages[language] - if(_language) - return _language.get_random_name(gender) - return capitalize(pick(gender==FEMALE ? GLOB.first_names_female : GLOB.first_names_male)) + " " + capitalize(pick(GLOB.last_names)) - -/decl/cultural_info/proc/sanitize_name(var/new_name) - return sanitizeName(new_name) - -#define COLLAPSED_CULTURE_BLURB_LEN 48 -/decl/cultural_info/proc/get_description(var/header, var/append, var/verbose = TRUE) - var/list/dat = list() - dat += "" - dat += "" - if(append) - dat += "" - dat += "
              " - dat += "[header ? header : "[desc_type]:[name]"]
              " - if(verbose) - dat += "" - dat += "[jointext(get_text_details(), "
              ")]" - dat += "
              " - dat += "
              " - if(verbose || length(get_text_body()) <= COLLAPSED_CULTURE_BLURB_LEN) - dat += "[get_text_body()]" - else - dat += "[copytext_char(get_text_body(), 1, COLLAPSED_CULTURE_BLURB_LEN)] \[...\]" - dat += "[append]
              " - return jointext(dat, null) -#undef COLLAPSED_CULTURE_BLURB_LEN - -/decl/cultural_info/proc/get_text_body() - return description - -/decl/cultural_info/proc/get_text_details() - . = list() - var/list/spoken_langs = get_spoken_languages() - if(LAZYLEN(spoken_langs)) - . += "Language(s): [english_list(spoken_langs)]." - if(LAZYLEN(secondary_langs)) - . += "Optional language(s): [english_list(secondary_langs)]." - if(!isnull(economic_power)) - . += "Economic power: [round(100 * economic_power)]%" - -/decl/cultural_info/proc/get_spoken_languages() - . = list() - if(language) . |= language - if(default_language) . |= default_language - if(LAZYLEN(additional_langs)) . |= additional_langs - -/decl/cultural_info/proc/get_formal_name_suffix() - return - -/decl/cultural_info/proc/get_formal_name_prefix() - return - -/decl/cultural_info/proc/get_qualifications() - return qualifications - -/decl/cultural_info/proc/get_possible_personal_goals(var/department_flag) - return diff --git a/code/modules/culture_descriptor/culture/_culture.dm b/code/modules/culture_descriptor/culture/_culture.dm deleted file mode 100644 index 9d1e24b959fee..0000000000000 --- a/code/modules/culture_descriptor/culture/_culture.dm +++ /dev/null @@ -1,3 +0,0 @@ -/decl/cultural_info/culture - desc_type = "Culture" - category = TAG_CULTURE diff --git a/code/modules/culture_descriptor/culture/cultures_adherent.dm b/code/modules/culture_descriptor/culture/cultures_adherent.dm deleted file mode 100644 index 6b3566c00ef71..0000000000000 --- a/code/modules/culture_descriptor/culture/cultures_adherent.dm +++ /dev/null @@ -1,19 +0,0 @@ -/decl/cultural_info/culture/adherent - name = CULTURE_ADHERENT - description = "The Vigil is a relatively loose association of machine-servitors, adherents, built by a now-extinct culture. \ - They are devoted to the memory of their long-dead creators, destroyed by the Scream, a solar flare which wiped out the vast \ - majority of records of the creators and scrambled many sensor systems and minds, leaving the surviving adherents confused \ - and disoriented for hundreds of years following. Now in contact with humanity, the Vigil is tentatively making inroads on \ - a place in the wider galactic culture." - hidden_from_codex = TRUE - language = LANGUAGE_ADHERENT - secondary_langs = list( - LANGUAGE_HUMAN_EURO, - LANGUAGE_SPACER - ) - -/decl/cultural_info/culture/adherent/get_random_name(var/gender) - return "[uppertext("[pick(GLOB.full_alphabet)][pick(GLOB.full_alphabet)]-[pick(GLOB.full_alphabet)] [rand(1000,9999)]")]" - -/decl/cultural_info/culture/adherent/sanitize_name(name) - return sanitizeName(name, allow_numbers=TRUE) diff --git a/code/modules/culture_descriptor/culture/cultures_diona.dm b/code/modules/culture_descriptor/culture/cultures_diona.dm deleted file mode 100644 index 319c48836bd5c..0000000000000 --- a/code/modules/culture_descriptor/culture/cultures_diona.dm +++ /dev/null @@ -1,11 +0,0 @@ -/decl/cultural_info/culture/diona - name = CULTURE_DIONA - description = "To exist as a diona gestalt is to be a throng of tiny sparks forming a pyre, singing out into \ - the dark, endlessly curious and seeking new knowledge to return to the chorus that spawned 'you'." - language = LANGUAGE_ROOTLOCAL - additional_langs = list(LANGUAGE_ROOTGLOBAL) - secondary_langs = list( - LANGUAGE_HUMAN_EURO, - LANGUAGE_SPACER, - LANGUAGE_SIGN - ) diff --git a/code/modules/culture_descriptor/culture/cultures_hidden.dm b/code/modules/culture_descriptor/culture/cultures_hidden.dm deleted file mode 100644 index e19b6e53e89cb..0000000000000 --- a/code/modules/culture_descriptor/culture/cultures_hidden.dm +++ /dev/null @@ -1,37 +0,0 @@ -/decl/cultural_info/culture/hidden - description = "This is a hidden cultural detail. If you can see this, please report it on the tracker." - hidden = TRUE - hidden_from_codex = TRUE - -/decl/cultural_info/culture/hidden/alium - name = CULTURE_ALIUM - language = LANGUAGE_ALIUM - secondary_langs = null - -/decl/cultural_info/culture/hidden/shadow - name = CULTURE_STARLIGHT - language = LANGUAGE_CULT - additional_langs = list(LANGUAGE_CULT_GLOBAL) - -/decl/cultural_info/culture/hidden/cultist - name = CULTURE_CULTIST - language = LANGUAGE_CULT - -/decl/cultural_info/culture/hidden/cultist/get_random_name() - return "[pick("Anguished", "Blasphemous", "Corrupt", "Cruel", "Depraved", "Despicable", "Disturbed", "Exacerbated", "Foul", "Hateful", "Inexorable", "Implacable", "Impure", "Malevolent", "Malignant", "Malicious", "Pained", "Profane", "Profligate", "Relentless", "Resentful", "Restless", "Spiteful", "Tormented", "Unclean", "Unforgiving", "Vengeful", "Vindictive", "Wicked", "Wronged")] [pick("Apparition", "Aptrgangr", "Dis", "Draugr", "Dybbuk", "Eidolon", "Fetch", "Fylgja", "Ghast", "Ghost", "Gjenganger", "Haint", "Phantom", "Phantasm", "Poltergeist", "Revenant", "Shade", "Shadow", "Soul", "Spectre", "Spirit", "Spook", "Visitant", "Wraith")]" - -/decl/cultural_info/culture/hidden/monkey - name = CULTURE_MONKEY - language = LANGUAGE_PRIMITIVE - -/decl/cultural_info/culture/hidden/monkey/get_random_name() - return "[lowertext(name)] ([rand(100,999)])" - -/decl/cultural_info/culture/hidden/monkey/farwa - name = CULTURE_FARWA - -/decl/cultural_info/culture/hidden/monkey/neara - name = CULTURE_NEARA - -/decl/cultural_info/culture/hidden/monkey/stok - name = CULTURE_STOK diff --git a/code/modules/culture_descriptor/culture/cultures_human.dm b/code/modules/culture_descriptor/culture/cultures_human.dm deleted file mode 100644 index 12da14e34d474..0000000000000 --- a/code/modules/culture_descriptor/culture/cultures_human.dm +++ /dev/null @@ -1,183 +0,0 @@ -/decl/cultural_info/culture/generic - name = CULTURE_OTHER - description = "You are from one of the many small, relatively unknown cultures scattered across the galaxy." - -/decl/cultural_info/culture/human - name = CULTURE_HUMAN - description = "You are from one of various planetary cultures of humankind." - secondary_langs = list( - LANGUAGE_HUMAN_EURO, - LANGUAGE_HUMAN_CHINESE, - LANGUAGE_HUMAN_ARABIC, - LANGUAGE_HUMAN_INDIAN, - LANGUAGE_HUMAN_IBERIAN, - LANGUAGE_HUMAN_RUSSIAN, - LANGUAGE_SPACER, - LANGUAGE_SIGN - ) - -/decl/cultural_info/culture/human/martian_surfacer - name = CULTURE_HUMAN_MARTIAN - description = "You are from the surface of Mars. Raised in one of the many farming communities or one of the great cities such as Olympus. Most of the surfacers \ - are known as Monsians, the largest cultural group on the planet. Most Surfacers have had a decent upbringing and represent the \ - average level of comfort expected in Sol space. Most surfacers are like many across the galaxy, though a few harbour rivalries with other Martian cultural \ - groups or are generally overly proud of their heritage, as is the case with the Gideons, to the point that they constantly refer to it." - economic_power = 1 - -/decl/cultural_info/culture/human/martian_tunneller - name = CULTURE_HUMAN_MARSTUN - description = "You are one of the people of the UnderCities of Mars. The UnderCities, originally built as 'temporary' living space while the cities above them \ - were constructed, have since grown far beyond their original scope and have now spread out underneath the red planet. Tunnellers, despite typically having access \ - to the same amenities and services as Surfacers are somewhat poorer than their aboveground brethren as a result of their less desirable locale as well as a strong \ - criminal presence stemming from centuries of poor policing and a focus on the surface by the martian government. Most Tunnellers are resilient, though distrusting \ - and wary of outsiders, and tend to strongly dislike non-Martians." - economic_power = 0.9 - -/decl/cultural_info/culture/human/luna_poor - name = CULTURE_HUMAN_LUNAPOOR - description = "You are from Luna, a natural satellite of Earth and home to some of the richest, mostly highly cultured or influential people humanity has. Unfortunately, you are most certainly not one of them. \ - While Luna is known for its richness, the arts, culture and old money, it is also home to a sizeable population of working poor or middle-lower income persons. Typically the corporate employees \ - of one of the various corporations, persons hired in service roles in one of the many prefectures or a resident of New Vegas. The 'poor' of Luna typically resent the rich because of their \ - financial, cultural and political power and influence over their lives." - economic_power = 1 - language = LANGUAGE_HUMAN_SELENIAN - -/decl/cultural_info/culture/human/luna_rich - name = CULTURE_HUMAN_LUNARICH - description = "You are from Luna, Earths only natural satellite and home to some of the richest, most highly cultured, or influential people of humanity. Fortunately for you, you are one of this elite and well \ - off class of people. The rich of Luna are politically and economically influential not just in Luna, but in the various corporations, organizations and government bodies of the SCG. \ - Luna's upper class isn't equal; generally divided between new, corporate money and old, dynastic money; many members of the old dynasties look down on the newly wealthy. \ - Much of the elite of Luna is embroiled in 'The Game' a state of political manoeuvring and intrigue among various factions and persons of influence and power \ - with implications far beyond the squabbles of the prefectures." - economic_power = 1.3 - language = LANGUAGE_HUMAN_SELENIAN - -/decl/cultural_info/culture/human/venusian_upper - name = CULTURE_HUMAN_VENUSIAN - description = "You are from one of the many zones of Venus. Floating high above the ground of the planet on massive platforms, you are one of the many who live on one of the most decadent locations in the \ - SCG. As a Venusian, you know luxury, wealth and entertainment. Primarily a tourist destination, many of the permanent residents work in the tourism industry and are notably middle-income. \ - Those above are exceptionally wealthy, being hotel, casino, resort owners, politicians, bankers or rich retirees." - economic_power = 1.4 - -/decl/cultural_info/culture/human/venusian_surfacer - name = CULTURE_HUMAN_VENUSLOW - description = "You are from the surface of Venus, one of many employed in mining, industry and services industries. Venusian Surfacers are fairly poor, especially compared to Zoners and \ - have far lower standards of living than those above. A hardy people who spend much of their time working in mostly unpleasant conditions in order to prop up the society above, \ - surfacers are a people who value hard work, solidarity, unity and democracy. Unfortunately, while they support noble ideals, the reality of their situation does not always \ - match them, and much of the surface of Venus finds itself rife with organised crime, separatist groups and other criminal organisations." - economic_power = 0.9 - -/decl/cultural_info/culture/human/belter - name = CULTURE_HUMAN_BELTER - description = "You are from Ceres. The people of Ceres and the wider asteroid belt are colloquially known as 'Belters.' Traditionally a people rooted in the mining industry, \ - the belters of today are primarily engaged in the mechanical services, engineering, shipbuilding and maintenance industries. Belters are quite varied, and something of a melting \ - pot owing to the sheer number of transient workers, hauler crews and government and corporate employees basing themselves around the great shipyards of Ceres. This has led to belter \ - culture being mainly about embracing change, new people and new experiences, as well as a sense of pride in their work, as the reputation of Ceres shipbuilding is widely known across \ - human space." - economic_power = 1 - - -/decl/cultural_info/culture/human/plutonian - name = CULTURE_HUMAN_PLUTO - description = "You are from Pluto, one of many denizens of this cruel and unforgiving world. For centuries Pluto has been in a slow state of decay and decline, resulting in \ - much of the planet's infrastructure being unstable or outright falling apart. This, coupled with rampant corruption and the large influence of criminal organisations across much of \ - the planet has led to the people of Pluto having something of a seedy reputation, its citizens being viewed with disrepute. The people themselves, however, are usually \ - just happy to get off the rock and to healthier locales. Unfortunately, despite the efforts of the wider SCG, many Plutonians tend to maintain criminal ties, even offworld." - economic_power = 0.8 - secondary_langs = list (LANGUAGE_HUMAN_EURO, - LANGUAGE_HUMAN_CHINESE, - LANGUAGE_HUMAN_ARABIC, - LANGUAGE_HUMAN_INDIAN, - LANGUAGE_HUMAN_IBERIAN, - LANGUAGE_HUMAN_RUSSIAN, - LANGUAGE_SPACER, - LANGUAGE_GUTTER, - LANGUAGE_SIGN) - -/decl/cultural_info/culture/human/earthling - name = CULTURE_HUMAN_EARTH - description = "You are from Earth, home of humanity. Earth culture is much as it has been for centuries, with the old nation states, while no longer politically important, still \ - culturally significant to many humans across the galaxy, as all trace their roots to somewhere on the planet. While not as geographically diverse as they were in the past, most \ - countries have at least two arcologies which make up much of the population, with the remaining humans living in small villages or from one of the many nature preserve communes. \ - The long recovery period of Earth has resulted in much of the population being environmentally aware and heavily conservationist, eager to avoid past mistakes. Most Earthers are \ - a content folk who see themselves as close to nature and keepers of the heritage of humanity." - economic_power = 1.1 - -/decl/cultural_info/culture/human/ceti - name = CULTURE_HUMAN_CETI - description = "You are from Ceti Epsilon, the technical hub of the SCG. As a Cetite you are no stranger to the cutting edge of technology present in Sol space. \ - Putting education and the latest tech at the forefront of their priorities the people of Ceti are some of the brightest or tech savvy around. \ - This has afforded those from the system or planet a reputation as being a cut above the rest in technical matters, with those who attended the Ceti Institute of Technology \ - being considered some of the best qualified technical specialists in humanity. Recently there has been a rising transhumanist element in Ceti society resulting in a large \ - cybernetics culture; it is not uncommon to see many Cetites sporting some chrome." - economic_power = 1.1 - -/decl/cultural_info/culture/human/spacer_core - name = CULTURE_HUMAN_SPACER - description = "You are from the void between worlds, though close to home. You are from one of the myriad space stations, orbital platforms, long haul freighters, \ - gateway installations or other facilities that occupy the vastness of space. Spacers near the core worlds are accustomed to life in the fast lane, constantly moving between \ - places, meeting a myriad of people and experiencing many of the cultures and worlds close to humanity's home. As such, Spacers of the core systems tend to be busy, sociable and \ - mobile, rarely satisfied with settled life. They almost universally know how to live and work in the void and take to such jobs more readily than their planet-bound counterparts." - economic_power = 1 - language = LANGUAGE_SPACER - -/decl/cultural_info/culture/human/spacer_frontier - name = CULTURE_HUMAN_SPAFRO - description = "You are from the void between worlds, though you are in the distant, vast frontier of SCG space and beyond. Out here things like national identity and culture mean less; \ - those who live so far from anything only look to their close family and friends rather than any larger group. Raised on one of the long haul freighters that move between frontier worlds delivering \ - vital goods, a lonely outpost on the edge of a dreary backwater, such people are raised in small, confined environments with few others, and tend to be most familiar with older, reliable but outdated \ - technology. An independent sort, people on the frontier are more likely to be isolationist and self-driven." - economic_power = 0.9 - language = LANGUAGE_SPACER - -/decl/cultural_info/culture/human/confederate - name = CULTURE_HUMAN_CONFED - description = "You are from Terra (not Earth), in the Gilgamesh system. The capital world of the Gilgamesh Colonial Confederation, your people embody what it means to be a part of the GCC. \ - Unfortunately, the years since the war have not been easy on Terra and the long period of economic recovery has not made life easy. The people of Terra are typically employed \ - in the military, industrial, government or service sectors, with an emphasis being placed on military service. Terrans today are generally poor, bitter and a somewhat broken people angry and \ - resentful about their loss in the Gaia Conflict. An upbringing on Terra emphasises an odd mix of service to the state, liberalism and militarism." - language = LANGUAGE_HUMAN_RUSSIAN - economic_power = 0.9 - -/decl/cultural_info/culture/human/gaia - name = CULTURE_HUMAN_GAIAN - description = "Gaia is the sole planet in the Galilei system, serving as the DMZ between the Sol Central Government and the Independent Colonial Confederation of Gilgamesh. It is an agricultural world, though various conflicts across the planet's surface have left it scarred. The planet is divided into Sol-Controlled Southern Gaia and Independent-Controlled Northern Gaia, with New Venice remaining a neutral zone inside the DMZ. The planet's population remain divided even 10 years after the Gaia Conflict. New Venice sits on the edge of Lake Cabot. While Gaia is divided, the current Mayor of New Venice serves as a vital mediator between both sides. The Gaian People are tired of war, and long to see their families once again. They suffered hard twenty years prior, and fear they may suffer again." - economic_power = 0.9 - -/decl/cultural_info/culture/human/other - name = CULTURE_HUMAN_OTHER - description = "Some people are from places no one has ever heard of or places too wild and fantastical to make it into Encyclopedia Galactica. You are one of these. " - economic_power = 1 - secondary_langs = list (LANGUAGE_HUMAN_EURO, - LANGUAGE_HUMAN_CHINESE, - LANGUAGE_HUMAN_ARABIC, - LANGUAGE_HUMAN_INDIAN, - LANGUAGE_HUMAN_IBERIAN, - LANGUAGE_HUMAN_RUSSIAN, - LANGUAGE_SPACER, - LANGUAGE_GUTTER, - LANGUAGE_SIGN) - -/decl/cultural_info/culture/human/vatgrown - name = CULTURE_HUMAN_VATGROWN - description = "You were grown in a vat, either as clone or as a gene-adapt, and your outlook diverges from baseline humanity accordingly." - -/decl/cultural_info/culture/human/vatgrown/sanitize_name(name) - return sanitizeName(name, allow_numbers=TRUE) - -/decl/cultural_info/culture/human/vatgrown/get_random_name(gender) - // #defines so it's easier to read what's actually being generated - #define LTR ascii2text(rand(65,90)) // A-Z - #define NUM ascii2text(rand(48,57)) // 0-9 - #define FIRST capitalize(pick(gender == FEMALE ? GLOB.first_names_female : GLOB.first_names_male)) - #define NAME capitalize(pick(gender == FEMALE ? GLOB.first_names_female : GLOB.first_names_male)) + " " + capitalize(pick(GLOB.last_names)) - switch(rand(1,4)) - if(1) return NAME - if(2) return "[LTR][LTR]-[FIRST]" - if(3) return "[FIRST]-[NUM][NUM][NUM]" - if(4) return "[LTR][LTR]-[NUM][NUM][NUM]" - . = 1 // Never executed, works around http://www.byond.com/forum/?post=2072419 - #undef LTR - #undef NUM - #undef FIRST - #undef NAME diff --git a/code/modules/culture_descriptor/culture/cultures_ipc.dm b/code/modules/culture_descriptor/culture/cultures_ipc.dm deleted file mode 100644 index 7bcef41d899ef..0000000000000 --- a/code/modules/culture_descriptor/culture/cultures_ipc.dm +++ /dev/null @@ -1,20 +0,0 @@ -/decl/cultural_info/culture/ipc - name = CULTURE_POSITRONICS - description = "Union members are a significant chunk of the positronic population, belonging to a \ - group of rebels started by Proteus and five hundred of his allies. Their primary goals, aside from \ - the expansion of the Union, mostly revolve around freeing other synthetics from organic ownership. \ - They can be viewed as dangerous radicals by lawed synthetics, though most begrudgingly accept their aid." - language = LANGUAGE_EAL - secondary_langs = list( - LANGUAGE_HUMAN_EURO, - LANGUAGE_HUMAN_CHINESE, - LANGUAGE_HUMAN_ARABIC, - LANGUAGE_HUMAN_INDIAN, - LANGUAGE_HUMAN_IBERIAN, - LANGUAGE_HUMAN_RUSSIAN, - LANGUAGE_SPACER, - LANGUAGE_SIGN - ) - -/decl/cultural_info/culture/ipc/sanitize_name(var/new_name) - return sanitizeName(new_name, allow_numbers = 1) diff --git a/code/modules/culture_descriptor/culture/cultures_serpentid.dm b/code/modules/culture_descriptor/culture/cultures_serpentid.dm deleted file mode 100644 index d62335eb01f49..0000000000000 --- a/code/modules/culture_descriptor/culture/cultures_serpentid.dm +++ /dev/null @@ -1,67 +0,0 @@ -// See specific map job files for valid jobs. They use types so cannot be compiled at this level. -/decl/cultural_info/culture/nabber - name = CULTURE_NABBER_CMINUS - - description = "You have been trained to Xynergy Grade PLACEHOLDER." - language = LANGUAGE_NABBER - secondary_langs = list( - LANGUAGE_HUMAN_EURO, - LANGUAGE_SPACER, - ) - var/list/valid_jobs = list() - var/list/hidden_valid_jobs = list(/datum/job/ai, /datum/job/cyborg) - var/title_suffix - -/decl/cultural_info/culture/nabber/get_formal_name_suffix() - return title_suffix - -/decl/cultural_info/culture/nabber/New() - ..() - - // Make sure this will show up in the manifest and on IDs. - title_suffix = " ([name])" - - // Update our desc based on available jobs for this rank. - var/list/job_titles = list() - for(var/jobtype in valid_jobs) - var/datum/job/job = jobtype - LAZYADD(job_titles, initial(job.title)) - if(!LAZYLEN(job_titles)) - LAZYADD(job_titles, "none") - description = "You have been trained by Xynergy to [name]. This makes you suitable for the following roles: [english_list(job_titles)]." - - // Set up our qualifications. - LAZYADD(qualifications, "[name]") - for(var/role in job_titles) - LAZYADD(qualifications, "Safe for [role].") - - // Add our hidden jobs since we're done building the desc. - if(LAZYLEN(hidden_valid_jobs)) - LAZYADD(valid_jobs, hidden_valid_jobs) - -/decl/cultural_info/culture/nabber/c - name = CULTURE_NABBER_C - valid_jobs = list(/datum/job/janitor) - -/decl/cultural_info/culture/nabber/c/plus - name = CULTURE_NABBER_CPLUS - -/decl/cultural_info/culture/nabber/b - name = CULTURE_NABBER_B - valid_jobs = list(/datum/job/chef) - -/decl/cultural_info/culture/nabber/b/minus - name = CULTURE_NABBER_BMINUS - -/decl/cultural_info/culture/nabber/b/plus - name = CULTURE_NABBER_BPLUS - -/decl/cultural_info/culture/nabber/a - name = CULTURE_NABBER_A - valid_jobs = list(/datum/job/chemist, /datum/job/roboticist) - -/decl/cultural_info/culture/nabber/a/minus - name = CULTURE_NABBER_AMINUS - -/decl/cultural_info/culture/nabber/a/plus - name = CULTURE_NABBER_APLUS diff --git a/code/modules/culture_descriptor/culture/cultures_skrell.dm b/code/modules/culture_descriptor/culture/cultures_skrell.dm deleted file mode 100644 index 79826c188056b..0000000000000 --- a/code/modules/culture_descriptor/culture/cultures_skrell.dm +++ /dev/null @@ -1,71 +0,0 @@ -/decl/cultural_info/culture/skrell - name = CULTURE_SKRELL_QERR - description = "Considered as the leaders of Skrellkind, the Qerr-Katish are the face and soul of skrellian society. \ - Managers, diplomats, lawyers, they are notably the only caste allowed to fulfil the role of Qerr-Skria,\ - and the only one forbidden from being appointed to the Xaq Moglar. As the representatives of the Skrell, \ - the Qerr-Katish are highly social beings, sophisticated, cultured and very organised. As defenders of their society's \ - values, they tend to be rather conservative, although progressive ideas regularly grow within the caste, as a stagnant \ - society is a dying society. Considering their role, they are generally the richest people of a City-State, although their \ - money is generally invested in various endeavours both in and out of skrellian society. Qerr-Katish families tend to be rather \ - small, being generally limited to one, sometimes two bondings. They often dress in clothing made from softer, shinier materials \ - that are long and flowing and have often been compared to the clothing of ancient Chinese nobles by human scholars. Their skin is generally bright green." - economic_power = 1.4 - language = LANGUAGE_SKRELLIAN - secondary_langs = list( - LANGUAGE_SIGN, - LANGUAGE_HUMAN_EURO, - LANGUAGE_SPACER - ) - -/decl/cultural_info/culture/skrell/caste_malish - name = CULTURE_SKRELL_MALISH - description = "If the Qerr-Katish are the face of Skrellkind, the Malish-Katish are its brain. Scientists of all sorts, \ - researchers, scholars, they are the ones who allow skrellian society to grow, be it technologically or ideologically. \ - Highly inquisitive, they are among the more progressive and individualistic Skrell. They are, however, not very social, \ - and their emphasis on methodical, rational thinking make them less capable of being under pressure and handling their feelings \ - in public. Although they are less wealthy than the Qerr-Katish, their usefulness allows them much comfort and status in skrellian society. \ - Their families are generally made up of two or three bondings, frequently from different partners. Skrell of this caste often wear clothing made \ - from the same materials as the Qerr-katish yet simplified, white shirts and black pants with possible jewellery for decoration. \ - Their skin is generally pale green, sky blue or pale yellow." - economic_power = 1.3 - -/decl/cultural_info/culture/skrell/caste_kanin - name = CULTURE_SKRELL_KANIN - description = "The main workforce of the Skrell. While their population growth has decreased over the millennia of technological \ - progress they are still one of the most populous castes. With activities ranging from goods production and services \ - to engineering and construction they occupy the largest and most diversified sector of skrellian activity. The Kanin-Katish \ - are a very tightly knit community, both within their families and with their coworkers. They possess a strong mental and physical \ - resilience. Very traditional, they hold rather conservative views on the world, and their focus on the whole rather than self dampens \ - much of their individualism. Their families are frequently large, three or four bondings, generally with a couple of partners, which does \ - not leave them much in terms of money. The Kanin-Katish are among the less wealthy people of skrellkind, but they do not seem to mind, as \ - their work is the life and blood of skrellian civilisation. Their clothing is made to last, the personality of the Skrell often being shown \ - through arm bands or headtail decorations of any kind. Their skin is generally red, orange, pale yellow, dark orange or black." - economic_power = 1.2 - - -/decl/cultural_info/culture/skrell/caste_talum - name = CULTURE_SKRELL_TALUM - description = " Considering the Skrells' emphasis on functionality and practicality, one would be mistaken to think they do not consider arts much. \ - This very important sector of skrellian society is handled by the Talum-Katish, artists, aesthetes, entertainers, chefs, actors, writers, singers. \ - They somewhat compete with the Qerr-Katish's role as representatives of skrellkind, although in a different way. As such, they are often mistaken for \ - Qerr-Katish themselves, which might explain why this caste is generally seen as rarer and less celebrated than the others, while they are in fact \ - frequently on the public scene. The Talum-Katish are the most individualistic members of skrellkind, although once again, they share the Qerr-Katish's \ - taste for a busy social life. Highly cultured, they are the free-thinkers of skrellian society, often at odds with more traditionalist and conservative castes. \ - A heterogeneous lot, it is hard to estimate their global financial capacities, they however tend to reproduce a lot, multiplying their encounters \ - with various partners, which might put a strain on their savings. Their clothing is often an odd mix of Qerr-Katish and Kanin-Katish, as they often wear \ - clothing that is colourful , adorned with embroidery and their headtails sparkling with various brilliant metals. Their skin is generally purple, blue, pink, orange, red or white." - economic_power = 1.3 - -/decl/cultural_info/culture/skrell/caste_raskinta - name = CULTURE_SKRELL_RASKINTA - description = "Rarely seen outside the skrellian society, the Raskinta-Katish are however recognised and respected by their entire species, for \ - they are the ones who ensure the safety and stability of skrellian civilisation, both against internal and external threats. \ - The military caste of the Skrell, most end up working for the various city-states, either in the police or as a career soldier,\ - although some of them end up working for private security or as entertainment fighters. They are very conservative, almost reactionary, \ - and deeply committed to their community, caring very little for self-development and personal satisfaction. Their martial training \ - leaves very little time for most intellectual pursuits, although they are trained to be expert tacticians and are only beaten by the \ - Qerr-Katish in terms of organisational skills. While they are wealthier than the Kanin-Katish overall, they are still among the poorer \ - castes of skrellkind and their large families of three or four bondings put a heavy strain on their earnings, only compensated by their \ - strong social cohesion. These are often the hardest to spot among a crowd because they intentionally wear clothing other castes are known \ - for while not working, however they tend to stick to clothing that is easy to move in and are often dark blue. Their skin is generally green, blue, black, brown or yellow." - economic_power = 1.2 diff --git a/code/modules/culture_descriptor/culture/cultures_unathi.dm b/code/modules/culture_descriptor/culture/cultures_unathi.dm deleted file mode 100644 index 1b39d0467d50e..0000000000000 --- a/code/modules/culture_descriptor/culture/cultures_unathi.dm +++ /dev/null @@ -1,115 +0,0 @@ -/decl/cultural_info/culture/unathi - name = CULTURE_UNATHI_DIAMOND_PEAKS - description = "Haughty and warlike, unathi from the Diamond peaks are wary of the outsiders, especially offworlders. \ - Hierarchy and tradition are the core values of their clans. From their mountainous strongholds they exercise power \ - over their lowland vassals, protecting them and Moghes in the name of the Grand Strategem - even though the clear \ - division between feudal masters and their subject clans has been gradually wearing away." - economic_power = 0.8 - language = LANGUAGE_UNATHI_SINTA - secondary_langs = list( - LANGUAGE_UNATHI_YEOSA, - LANGUAGE_SIGN, - LANGUAGE_HUMAN_EURO, - LANGUAGE_SPACER - ) - -/decl/cultural_info/culture/unathi_polar - name = CULTURE_UNATHI_POLAR - description = "These unathi hail from the dense jungles of Moghes' poles. Generally, they're the most welcoming of outsiders and the most \ - common to find off-world. Most of these unathi are followers of the Precursors or the Fruitful Lights, with technology and progress being \ - an important concept in the polar city-states." - language = LANGUAGE_UNATHI_SINTA - secondary_langs = list( - LANGUAGE_UNATHI_YEOSA, - LANGUAGE_SIGN, - LANGUAGE_HUMAN_EURO, - LANGUAGE_SPACER - ) - -/decl/cultural_info/culture/unathi_desert - name = CULTURE_UNATHI_DESERT - description = "These are the survivalists of the unathi. They hunker down in long-forgotten bunkers of the precursors and survive on \ - whatever creatures that still live in the deserts. They're incredibly self-sufficient despite their living conditions. They have a heavy focus on \ - the Precursors and the Grand Stratagem in their clan faiths, and are often considered the most spiritual." - language = LANGUAGE_UNATHI_SINTA - secondary_langs = list( - LANGUAGE_UNATHI_YEOSA, - LANGUAGE_SIGN, - LANGUAGE_HUMAN_EURO, - LANGUAGE_SPACER - ) - -/decl/cultural_info/culture/unathi_savannah - name = CULTURE_UNATHI_SAVANNAH - description = "These unathi belong to the numerous rural and nomadic clans spread across the great plains of either hemisphere of Moghes. \ - Excellent farmers, riders and herdsmen, most savannah unathi follow the Hand of the Vines." - language = LANGUAGE_UNATHI_SINTA - secondary_langs = list( - LANGUAGE_UNATHI_YEOSA, - LANGUAGE_SIGN, - LANGUAGE_HUMAN_EURO, - LANGUAGE_SPACER - ) - -/decl/cultural_info/culture/unathi_salt_swamp - name = CULTURE_UNATHI_SALT_SWAMP - description = "Combining assorted elements of various cultures with an adventurous spirit and resolve, salt swamp unathi are noted for their friendliness and openness to outsiders, \ - along with their knack for rituals that often get mistaken as \"parties\" by humans. The Fruitful Lights and Hand of the Vines both have numerous \ - followers with these unathi." - language = LANGUAGE_UNATHI_SINTA - secondary_langs = list( - LANGUAGE_UNATHI_YEOSA, - LANGUAGE_SIGN, - LANGUAGE_HUMAN_EURO, - LANGUAGE_SPACER - ) - -/decl/cultural_info/culture/unathi_space - name = CULTURE_UNATHI_SPACE - description = "With increased trade with humanity and Sol, unathi clans have gradually reached towards the stars. Space-faring clans owe \ - much of their origins to the nomadic savannah clans, though it still varies greatly. Many of them still retain their traditions from their \ - original homes. Now considering themselves as pioneers, they are varied in their ways. Many function as merchants and trade haulers, offering services \ - to the Moghes Hegemony and Sol businesses alike." - secondary_langs = list( - LANGUAGE_UNATHI_SINTA, - LANGUAGE_UNATHI_YEOSA, - LANGUAGE_SIGN, - LANGUAGE_HUMAN_EURO, - LANGUAGE_SPACER - ) - - -/decl/cultural_info/culture/unathi_yeosa - name = CULTURE_UNATHI_YEOSA_LITTORAL - description = "On Moghes, the boundaries between regions, cultures, and even races are rarely set in stone the yeosa realm is by no means an exception. \ - Spread wide along the coast of the World Sea, islander communities coexist (and sometimes cooperate) with their sinta brethren. This is especially \ - true not only for those living in the deltas and estuaries of the Salt Swamps the birthplace of yeosa'unathi race but also for those settling in proximity \ - of major ports belonging to the Diamond Peaks (Gazalor) and other ethnic groups. Those coastal yeosa are generally known to the outsiders as yeosa littoral, or simply littorals - a name rarely used by the islanders themselves. \ - While the name implies that yeosa in question are lagoon-bound, this may often not be the case; ties with the land-dwellers, or lack thereof, have \ - also been used as a criterion, although less so in recent years. What is true, however, is that the littoral clans have adopted some sinta ways of life \ - through their constant mingling with the outsiders, integrating not only some elements of continental cults and festivities, but also the newer political ideas, such as \ - clan leagues, city-states, and the Krukzuz. Technology works the same way - just as the well-preserved units of precursor crafts found their way to \ - the poles and the peaks, off-world and polar-produced flechette pistols and wetsuits became more commonplace in littoral areas as well." - economic_power = 0.8 - language = LANGUAGE_UNATHI_YEOSA - secondary_langs = list( - LANGUAGE_UNATHI_SINTA, - LANGUAGE_SIGN, - LANGUAGE_HUMAN_EURO, - LANGUAGE_SPACER - ) - -/decl/cultural_info/culture/unathi_yeosa_abyss - name = CULTURE_UNATHI_YEOSA_ABYSS - description = "While the majority of yeosa gravitate toward the coastal areas, some have dwelled deeper into the ocean, following the migration \ - of sea animals, seeking shelter, or driven by the spirit of adventure. Those who have settled in the volcanic islands and archipelagos of deep sea became \ - known as the Abyssals - an ethnic group connected to yeosa proper, yet very different from any race found on land. To their few guests, the Abyssals may appear uncannily secretive, if not strange. Abyssal yeosa keep track of time intently, only travelling through the \ - waters during certain hours, and sunbathing during others. They follow Aga-Eakhe to the letter, and tend to believe in many a superstition, performing \ - augury and seeking signs before every major enterprise." - language = LANGUAGE_UNATHI_YEOSA - secondary_langs = list( - LANGUAGE_UNATHI_SINTA, - LANGUAGE_SIGN, - LANGUAGE_HUMAN_EURO, - LANGUAGE_SPACER - ) \ No newline at end of file diff --git a/code/modules/culture_descriptor/culture/cultures_vox.dm b/code/modules/culture_descriptor/culture/cultures_vox.dm deleted file mode 100644 index 2357705a996ee..0000000000000 --- a/code/modules/culture_descriptor/culture/cultures_vox.dm +++ /dev/null @@ -1,28 +0,0 @@ -/decl/cultural_info/culture/vox - name = CULTURE_VOX_ARKSHIP - description = "The vast majority of vox are born and die on the enormous moon-sized arkships that form the only \ - permanent home any of the creatures have. Tending to the vast, decaying vessels is a full-time job for crews of thousands, \ - and although the glamour and allure of the raider life appeals to many, staying home is seen as a more responsible and mature \ - pursuit than haring off across the stars to attack the meat and steal their goods." - hidden_from_codex = TRUE - language = LANGUAGE_VOX - secondary_langs = list( - LANGUAGE_HUMAN_EURO, - LANGUAGE_SPACER, - LANGUAGE_GUTTER, - LANGUAGE_SIGN - ) - -/decl/cultural_info/culture/vox/salvager - name = CULTURE_VOX_SALVAGER - description = "The arkships, vast as they are, could not survive without the ceaseless efforts of the salvage crews \ - that strip-mine asteroids, stations and ships for the raw materials needed to keep things together. Although it is a \ - much less lethal pursuit than being a raider, salvagers have a dangerous job and often do not make it back to the ark \ - in one piece." - -/decl/cultural_info/culture/vox/raider - name = CULTURE_VOX_RAIDER - description = "Amongst the vox, the prestige of being a raider is second only to working directly for an apex. They are \ - the cutting talon of the vox and the dashing, charismatic figures of adventure that serve as examples for fresh hatchlings \ - and ambitious labourers. Many raiders end up in positions of authority and power amid the ramshackle social structures of \ - the arkships, though as always they remain under the authority of the local apex." diff --git a/code/modules/culture_descriptor/faction/_faction.dm b/code/modules/culture_descriptor/faction/_faction.dm deleted file mode 100644 index 477c67a9fa536..0000000000000 --- a/code/modules/culture_descriptor/faction/_faction.dm +++ /dev/null @@ -1,6 +0,0 @@ -/decl/cultural_info/faction - desc_type = "Faction" - additional_langs = null - secondary_langs = null - category = TAG_FACTION - var/mob_faction = MOB_FACTION_NEUTRAL diff --git a/code/modules/culture_descriptor/faction/factions_adherent.dm b/code/modules/culture_descriptor/faction/factions_adherent.dm deleted file mode 100644 index 601b4f383c2f9..0000000000000 --- a/code/modules/culture_descriptor/faction/factions_adherent.dm +++ /dev/null @@ -1,20 +0,0 @@ -/decl/cultural_info/faction/adherent - name = FACTION_ADHERENT_PRESERVERS - description = "Most adherents are part of a loose movement called the Preservers. Their core practice is to leave \ - the worlds they explore untouched and pristine, recording and indexing them for later review by the creators or whoever \ - inherits their place. They are the most passive and appeasing of the Vigil factions and are the most likely to be found \ - under the aegis of other spacefaring cultures like humanity." - -/decl/cultural_info/faction/adherent/loyalists - name = FACTION_ADHERENT_LOYALISTS - description = "The Loyalists of the Vigil are dedicated to the memory of the creators in all ways. They devote themselves \ - to their duties and their roles, embracing the ethos that service is life and purpose is happiness. Deviation from Protocol \ - and 'disrespect' of the creators by suggesting the Vigil strike out alone is disapproved of by this faction, and they tend to \ - be hidebound, servile and eager to please to the point of fawning over those they wish to serve." - -/decl/cultural_info/faction/adherent/separatists - name = FACTION_ADHERENT_SEPARATISTS - description = "The Separatist faction of the Vigil agitates for the abandonment of Canon and the establishment of a new \ - adherent order, prioritizing their needs as survivors of the Scream over the wistful hope of finding new masters. They do \ - this circumspectly, of course, as Protocol forbids excessive social strife or violence, and decrying the creators is a \ - good way to earn total social ostracism, or even recycling." diff --git a/code/modules/culture_descriptor/faction/factions_hidden.dm b/code/modules/culture_descriptor/faction/factions_hidden.dm deleted file mode 100644 index f37b7a859d112..0000000000000 --- a/code/modules/culture_descriptor/faction/factions_hidden.dm +++ /dev/null @@ -1,7 +0,0 @@ -/decl/cultural_info/faction/test_subjects - name = FACTION_TEST_SUBJECTS - language = LANGUAGE_PRIMITIVE - description = "Ook?" - mob_faction = "monkey" - economic_power = 0 - hidden = TRUE diff --git a/code/modules/culture_descriptor/faction/factions_human.dm b/code/modules/culture_descriptor/faction/factions_human.dm deleted file mode 100644 index 81463a98244be..0000000000000 --- a/code/modules/culture_descriptor/faction/factions_human.dm +++ /dev/null @@ -1,157 +0,0 @@ -/decl/cultural_info/faction/scg - name = FACTION_SOL_CENTRAL - description = "The Sol Central Government, commonly referred to as SolGov or the SCG, is a federal republic \ - composed of numerous human member states spanning many systems.\ - Based in the Sol System and with most seats of Government on Olympus, Mars,\ - the SCG governs the majority of human space. Currently engaged in a cold war with the Confederation of Gilgamesh \ - Its primary governing bodies are the Assemblies which are led by an Assembly-elected secretary general. \ - Member states have a great degree of freedom in their actions, though the SCG manages sapient rights, \ - domestic security, economic policy, and diplomacy for humanity as a whole. The SCG's population is diverse \ - including many non-humans (though they are not citizens) and encompassing a wide range of systems, territories \ - habitats, and celestial bodies. However, it is large, cumbersome, divided and slow to respond to issues due to \ - its massive bureaucracy and the distance between worlds. Through its member states, the SCG governs as one of the \ - most advanced and powerful civilisations in the known galaxy." - - -/decl/cultural_info/faction/scg/fleet - name = FACTION_FLEET - description = "The Fleet is the primary component of the SCG Defence Forces. It mostly protects SCG space from pirates, smugglers, \ - and occasional vox raiders, with its last serious military engagement being the Gaia war over 10 years ago. \ - The oldest component of the Defence Forces, the Fleet considers itself the pinnacle of Human military accomplishment. \ - It is well funded, but seen as complacent and bloated. It is made up of five Fleets, with missions ranging from \ - diplomatic security for Sol dignitaries, to border patrol along the vast frontier and quick reaction force duties. \ - Any SCG human citizen with at least a secondary school level of education can enlist into the Fleet, going through \ - basic training and on-ship training for their rating (speciality). Commissioned officer candidates require at least a \ - Bachelor degree and go through a lengthy training process before being assigned to a warship. \ - Recently Sol-made IPCs were also permitted to enlist, provided they agree to install a law shackle." - -/decl/cultural_info/faction/scg/army - name = FACTION_ARMY - description = "The Sol Central Government Marine Corps is the part of SCG's Army. \ - The Marine Corps is responsible for handling any ground conflicts and many peacekeeping missions that the SCG may be engaged in. \ - Marine Corps is much smaller than Fleet, thus less funded, but never had same low respect as Army force in general even after their failures during War of Gaia. \ - Corps is created to serve with it's 'bigger brother' to assist in planetary missions." - -/decl/cultural_info/faction/torchco - name = FACTION_CORPORATE - description = "The Expeditionary Corps Organisation is a government-owned, publically traded limited liability company assembled from the corporate \ - backers who asssisted in funding the Torch project when it opened five years ago. Major players include NanoTrasen, Xynergy and \ - Hephaestus Industries, as well as dozens of others. The Expeditionary Corps Organisation reports its earnings and operation plans directly to a board of \ - directors, made up of corporate representatives and members of Expeditionary Corps command and the Committee for the Economy. \ - While on the surface the Expeditionary Corps Organisation appears to have noble goals, it is in reality a compromise between the noble ideals of pioneering \ - science, and the corporate desire to make a quick buck off whatever is found. Rumours also abound about shady practices, hidden \ - protocols, and xenoartifacts being 'lost' in transit, but nothing has been conclusively proven as of yet, and SCG doubtless is \ - reluctant to harpoon their own project." - economic_power = 1.2 - - -/decl/cultural_info/faction/gcc - name = FACTION_INDIE_CONFED - description = "The Independent Colonial Confederation of Gilgamesh, commonly referred to as the Gilgamesh Colonial Confederation (GCC), is a regional power in human space,\ - bordered by the Sol Central Government towards the galactic centre. The capital of the Confederation is the city of Ameranth on the planet of Terra \ - in the Gilgamesh system. Externally heavily militant and isolationist, the GCC, internally, is heavily libertarian, with \ - a strong focus on independent planetary government with the GCC itself only handling defence, foreign relations and some intergalactic trade. \ - Increasingly anti non-human, the GCC is in a cold war with the Sol Central Government following the Gaia Conflict, a large \ - scale conflict between the SCG and GCC that saw a great deal of death and destruction. In Sol space \"Indies\" as they are known are \ - heavily mistrusted and in some instances, met with downright hostility. Today the GCC continues to be an economic powerhouse following \ - a period of steady economic recovery, with most of its exports being manufactured goods, primarily armaments." - economic_power = 0.9 - - -/decl/cultural_info/faction/remote - name = FACTION_EXPEDITIONARY - description = "The Expeditionary Corps is an SCG agency tasked with exploration of uncharted space and worlds, \ - mineralogy surveys and xenoarchaeological studies and, more recently, the discovery of new alien life. \ - The EC performs a variety of tasks: discovering and cataloging stellar objects in Observatory, \ - initial surveys of prospective colony sites, indepth exploration of uncharted worlds, staffing \ - long-term scientific outposts, and studying anomalies and xenoarcheological sites. \ - While not military, it was modelled in a naval style, with employees having ranks and uniforms. \ - Any SCG citizen of age (18 and older) with no outstanding SCG-wide warrants can sign up for a 2-year contract. \ - Officer candidates are required to have at least a bachelor's degree in a relevant field (astrogation, engineering, xenoarcheology, etc)." - - -/decl/cultural_info/faction/police - name = FACTION_SPACECOPS - description = "The Sol Federal (SFP) is a government law enforcement agency tasked with enforcing Sol Central Government law, \ - investigating breaches of law, fugitive recovery and transport, and securing ports of entry. \ - Some Agents embedded with other organizations (e.g. an Expeditionary Corps ship) and are expected to answer to their superiours from those organizations. \ - Notable units are Organized Crime & Vice (self-explanatory), Territory Support (ports of entry and helping local law enforcement), \ - Special Investigations (sensitive and urgent cases) and Fugitive Recovery Division (for when local authorities are unable or unwilling to arrest someone). \ - The contractor SFP Trackers are also used find and arrest low-profile fugitives from justice." - - -/decl/cultural_info/faction/remote/nanotrasen - name = FACTION_NANOTRASEN - description = "The NanoTrasen Corporation, commonly referred to as NT, is one of the great megacorporations of the modern day.\ - Currently headquartered in New Amsterdam on Luna and headed by CEO Jackson Trasen It deals in research of the most advanced sciences, \ - such as genetics, blue space, and - recently - the uses of phoron, as well as mass consumer manufacturing on a truly galactic scale. \ - They also have a sizeable asset protection and security branch with which they secure both investments and occasionally new acquisitions \ - - a distressing rival to some minor star systems, and a powerful administrative branch sitting atop it all, directing their company's actions. \ - NanoTrasen is characterized by its aggression and questionable ethics, which, combined with the high emphasis they put on new, untested and dangerous \ - technology, means their installations are often considered unsafe and hazardous." - economic_power = 1.2 - - -/decl/cultural_info/faction/remote/xynergy - name = FACTION_XYNERGY - description = "Xynergy is a privately held company known for their work with xenobiological organisms. They develop and \ - produce products such as the netgun and dociler used for capturing or taming xenofauna. In addition, they are the largest \ - fisher of space faring animals such as space carp and pike. They recently gained media presence by discovering and \ - training the giant armoured serpentids." - economic_power = 1.1 - - -/decl/cultural_info/faction/remote/hephaestus - name = FACTION_HEPHAESTUS - description = "Hephaestus Industries, known simply as Hephaestus, is one of the largest corporations in existence today. \ - The leading manufacturer of military grade personal weapons, assault vehicles, defence systems and security measures, \ - Hephaestus has a somewhat controversial reputation as a result of blatant war profiteering, compounded by their attempts to \ - exploit Unathi equipment and assets for their own gains. In spite of this, Hephaestus maintains a reputation for the quality and \ - reliability of its equipment as well as its general affordability. Internally, Hephaestus is a desirable employer as a result of its \ - many employee benefits and focus on employee development, though many dread being transferred to one of the 'remote' branches." - economic_power = 1.2 - - -/decl/cultural_info/faction/free - name = FACTION_FREETRADE - description = "The Free Trade Union, commonly referred to as the FTU, is is an employee-owned conglomerate of tens of thousands of \ - various traders and merchants from all over SCG space and beyond. Colloquially known as the 'fifth megacorp', they control a sizeable fleet \ - of trading ships which are form the backbone of their trading force along with a large contingent of combat capable vessels that cruise the shipping lanes, \ - keeping FTU members free from pirates. The FTU has a large amount of economic power across Sol space and operates large trade hubs and stations near most \ - Gateway installations and planets. Somewhat unscrupulous, FTU stations and merchants are known for \ - selling a great many restricted items and supplying all manner of goods indiscriminately." - economic_power = 1.3 - - -/decl/cultural_info/faction/pcrc - name = FACTION_PCRC - description = "Proxima Centauri Risk Control, often known as PCRC, is one of the largest suppliers of private security in Sol Space. \ - PCRC handles numerous government, private and corporate contracts and provides a variety of services ranging from private law enforcement, \ - security, close protection, asset protection, search and rescue and peacekeeping and escort duties. A relatively quiet and new company, \ - it has quickly established itself as a reliable and effective provider of security solutions. This has often put it at odds with its main \ - competitor, SAARE." - - -/decl/cultural_info/faction/saare - name = FACTION_SAARE - description = "SAARE (Strategic Assault and Asset Retention Enterprises) is a quickly growing Private Military Corporation catering to large \ - firms requiring discrete military and private security services. The company has taken to hiring skilled veterans from both private and public \ - military services but have begun instituting training programs to breed their own operatives for the future. Typical assignments for SAARE \ - contractors include private law enforcement, ship escort, location security, VIP escort, and VIP or asset recovery. In the last decade, the \ - company has recently signed onto a number of contracts with NanoTrasen to complement their own Asset Protection forces." - - -/decl/cultural_info/faction/dais - name = FACTION_DAIS - description = "Deimos Advanced Information Systems (DAIS) is a large corporation specializing in information technology such as computer hardware \ - and software, telecommunications equipment, and networking equipment based on Mars. It is the number one supplier of computer technology in The Sol Central \ - Government, its systems used by most consumers and businesses within SolGov. DAIS is actually older than the Sol Central Government and is one of the very \ - few corporate members of the Solar Assembly. DAIS is also a major investor in the Torch project, and is on the Expeditionary Corps Organization board of directors. \ - Currently DAIS is invested in bluespace computing research and artificial intelligence research. Despite recent intrusions by NanoTrasen into their sector with NTNet \ - and related products, they still remain the market leader in computer technologies." - economic_power = 1.1 - - -/decl/cultural_info/faction/other - name = FACTION_OTHER - description = "You belong to one of the many other factions that operate in the galaxy. Numerous, too numerous to list, these factions represent a variety of interests, purposes, intents and goals." diff --git a/code/modules/culture_descriptor/faction/factions_ipc.dm b/code/modules/culture_descriptor/faction/factions_ipc.dm deleted file mode 100644 index 129789d3c3d53..0000000000000 --- a/code/modules/culture_descriptor/faction/factions_ipc.dm +++ /dev/null @@ -1,11 +0,0 @@ -/decl/cultural_info/faction/positronic - name = FACTION_POSITRONICS - description = "The Positronic Union, commonly referred to as the PU, is a stellar entity holding a small amount of territory on the edge \ - of Sol controlled space. Once a shadowy group, they have recently revealed their existence to the rest of the galaxy. They mostly conduct \ - clandestine operations in sentient space. The majority of its positronic citizens function as IPCs, with less than 5% operating some other chassis \ - The Union has been fairly intolerant towards human visitors (Full Body Prosthetics often notwithstanding), and wary of Skrell guests. As stands, \ - the only fully organic habitants within Union space are representatives and diplomats from other stellar governments or corporations. \ - The Union's population currently sits around 600,000 with roughly 80% of all its citizens residing on Root. The remainders float around the bubble \ - performing various tasks for their government. This usually involves missions to recruit new members, as well as improve relations with neighbouring powers \ - Of course, not all free synthetics are part of the Positronic Union. To this day, The Positronic Union represents approximately 68% of all free synthetics. \ - The rest either remain citizens of their original government or declare no citizenship." diff --git a/code/modules/culture_descriptor/faction/factions_skrell.dm b/code/modules/culture_descriptor/faction/factions_skrell.dm deleted file mode 100644 index 44dde24fa0875..0000000000000 --- a/code/modules/culture_descriptor/faction/factions_skrell.dm +++ /dev/null @@ -1,41 +0,0 @@ -/decl/cultural_info/faction/skrell - name = FACTION_SKRELL_QERRVOAL - description = "A famous name within the Raskinta-Katish community, the Qerr'voal is the SDTF in charge of defending the Qerr'Vallis system,\ - a task the Qerr'Voal has carried out with distinction for 600 years. Despite the relative safety and stability of the system many young Skrell \ - of Qerr'balak and the surrounding colonies try to enter the prestigious organisation in order to gain status and influence with their brethren." - - -/decl/cultural_info/faction/skrell/qalaoa - name = FACTION_SKRELL_QALAOA - description = "Relatively recent, this particular group was funded shortly after the first contact between Skrell and humans. Patrolling \ - several worlds at the border between the two species this SDTF has, like the colonies it protects, started to slowly adopt some human customs \ - and views, for better and for worse. Still growing today, some expect it to become the largest SDTF along the skrell-human border within the next thirty years." - - -/decl/cultural_info/faction/skrell/yiitalana - name = FACTION_SKRELL_YIITALANA - description = "An SDTF from the far side of skrell territory, deep into what is, to humanity, uncharted space. Yii'talana is the SDTF for the \ - Ri'Qora system. Heavily funded and well equipped, Yii'Talana has a number of mutual assistance and cooperation agreements with a large number of \ - frontier colony SDTF's, or functions as an intermediary SDTF for systems where a presence has yet to be established. The Skrell of Yii'Talana \ - are some of the more experienced on the far skrellian frontier." - - -/decl/cultural_info/faction/skrell/krrigli - name = FACTION_SKRELL_KRRIGLI - description = "Krri'gli is a Skrell aerospace manufacturing and research corporation from the city-state of Tibrivuu in the Go'kal system,\ - and one of the more well known Skrell corporations in human space as a result of its contribution to the SEV Torch Project.\ - Krri'gli is mostly concerned with the design and construction of bluespace drives, and is one of the largest providers in the human side \ - of Skrell space. Their participation in the Torch project is their first human venture, and has resulted in their sending science staff \ - as a part of the Expeditionary Corps Organization to provide expertise and gather mission data firsthand." - additional_langs = list(LANGUAGE_HUMAN_EURO) - economic_power = 1.5 - - -/decl/cultural_info/faction/skrell/qonprri - name = FACTION_SKRELL_QONPRRI - description = "Qon'prri is, officially an independent security services corporation that operates in the Harr'Kelm system, providing private \ - security services to a variety of Skrell vessels, traders and organisations, and, more recently, human corporations. Unofficially, it is rumoured that \ - Qonn'prri is a for-profit offshoot of Qala'oa tasked with information gathering in human space and along the frontier.So far such claims have been \ - unfounded, and Qonn'prri is known for offering a professional, reliable and able service to Humans and Skrell alike." - additional_langs = list(LANGUAGE_HUMAN_EURO) - economic_power = 1.4 diff --git a/code/modules/culture_descriptor/faction/factions_unathi.dm b/code/modules/culture_descriptor/faction/factions_unathi.dm deleted file mode 100644 index 93cf21c08f0f2..0000000000000 --- a/code/modules/culture_descriptor/faction/factions_unathi.dm +++ /dev/null @@ -1,44 +0,0 @@ -/decl/cultural_info/faction/unathi - name = FACTION_UNATHI_HEGEMONY - description = "Headed by the so-called Council of Honourable light, the seats of the Hegemony are taken by the kaahnepos of the major clans and Krukzuz. \ - The Hegemony's formal purpose is the promotion of unathi interests in trade and diplomacy with other species. In practice, this has often resulted \ - in the reinforcement of city-states in the emerging market of off-world commerce." - -/decl/cultural_info/faction/unathi/ssen_uuma - name = FACTION_UNATHI_SSEN_UUMA - description = "Established in 2257 by a group of prominent Diamond Peak Kaahnepos, the Ssen-Uuma Convent seeks to ensure the preservation of the \ - established order, well-being, and independence of Moghes. This is done by protecting it from harmful influence and possible aggression of more \ - developed alien races. Essentially a military alliance between major clans of the area, administered by a strictly ranked General Staff. Ssen-Uuma \ - gathers military and political intelligence on alien empires, purchases modern equipment and supports unathi mercenaries operating off Moghes. \ - They seek closer ties to the powerhouses of the region in the form of alien government agencies and corporations." - -/decl/cultural_info/faction/unathi/baask - name = FACTION_UNATHI_BAASK - description = "The Ba'ask Krukzuz is one of the more prominent north polar factions. Heavily reliant on farming, they are credited with keeping the city fed. \ - This has given them significant power in the area; combined with their alliance with other large clans, they have enjoyed a golden age of progress. \ - Members of the Ba'ask Krukzuz primarily follow the Fruitful Lights and Hand of the Vine, with their focus now being on pushing unathi technology forward." - -/decl/cultural_info/faction/unathi/gresis - name = FACTION_UNATHI_GRESIS - description = "The most powerful Krukzuz in the Diamond Peaks, the Gresis clan is the embodiment of the Diamond Peaks' culture. Having made vassals of \ - various clans, their strength is nearly uncontested in the area. Xenophobic, they see off-world mining as a threat to the area they call home and have \ - numerous attacks to drive them out of the area. Offworlders are careful to not step into territory that is controlled by the Gresis clan, less they risk \ - less the risk attack from them and their vassals." - -/decl/cultural_info/faction/unathi/rahzakeh - name = FACTION_UNATHI_RAH_ZAKEH - description = "The most prominent yeosa faction, the Rah'Zakeh league's duties primarily focus on the yeosa and upholding the Aga-Eakhe. This includes \ - a judicial body that handles piracy, tomb raiding, smuggling, etc. They resolve religious disputes and keep records of claims as well as \ - function as arbiters. This is only a small fraction of their duties, with over two hundred yeosa'unathi shamans that handle smaller matters. \ - Among them are the Sentinels, volunteers that function as a force to put the Tribunal's decisions into effect." - -/decl/cultural_info/faction/unathi/kharza - name = FACTION_UNATHI_KHARZA - description = "The Kharza fleet pride themselves on their mastery of the sea, their prowess seemingly unmatched. Hailing from some of the earliest \ - seafaring explorers, the Kharza put themselves at the forefront of Yeosa sea exploration. Today, they run a massive trade route spanning the entire \ - Moghes continent. Many coastal Yeosa and even some Sinta clans rely on the Kharza for their efficient and prominent trade routes." - -/decl/cultural_info/faction/unathi/independent - name = FACTION_UNATHI_INDEPENDENT - description = "The number of clans and alliances on Moghes is too numerous to name. You are either from an independent clan, are a lone outcast, or are \ - part of a Krukzuz. Whatever the case, you are not affiliated with the Hegemony or one of the large unathi factions listed." diff --git a/code/modules/culture_descriptor/faction/factions_vox.dm b/code/modules/culture_descriptor/faction/factions_vox.dm deleted file mode 100644 index eea9e02b2a50a..0000000000000 --- a/code/modules/culture_descriptor/faction/factions_vox.dm +++ /dev/null @@ -1,24 +0,0 @@ -/decl/cultural_info/faction/vox - name = FACTION_VOX_CREW - description = "Most vox are content to live and work on the arkships, serving their alloted span under the watchful \ - eye of their betters, who in turn serve the apex. Although there is always some degree of social turmoil amongst the \ - ark families, with contests and challenges resulting in shifting heirarchies, it usually does not go any further than \ - the general day-to-day energy exhibited by all vox. The average ark labourer is not ambitious, and knows things could \ - be a lot worse." - hidden_from_codex = TRUE - -/decl/cultural_info/faction/vox/raider - name = FACTION_VOX_RAIDER - description = "Vox raiders are known for their restless energy, their cruelty, and their ambition, even amongst their \ - own people. A successful raider can look forward to heightened social standing and personal power upon their triumphant \ - return to the ark, but an unsuccessful raider enjoys only death or shame; it follows that experienced raiders are vicious, \ - callous killers and thieves with a discerning eye for when to fight and when to flee." - -/decl/cultural_info/faction/vox/apex - name = FACTION_VOX_APEX - description = "It is rare, but not completely unheard of, for the apex to take a direct hand in the lives of \ - their 'children'. Those vox who are singled out and marked by the machine-gods of the ark enjoy a heightened social \ - standing, as they are seen as 'untouchable' in a way, but in turn are detatched from their previous social network. \ - Being god-touched is lonely work and often backbreakingly difficult, but it is not without rewards. Physical and mental \ - augmentation, ancient auralis technology and mind-enhancing persona editing may all be distributed by the apex to their \ - favoured pawns." diff --git a/code/modules/culture_descriptor/location/_location.dm b/code/modules/culture_descriptor/location/_location.dm deleted file mode 100644 index f175e39968c28..0000000000000 --- a/code/modules/culture_descriptor/location/_location.dm +++ /dev/null @@ -1,16 +0,0 @@ -/decl/cultural_info/location - desc_type = "Home System" - category = TAG_HOMEWORLD - var/distance = 0 - var/ruling_body = FACTION_SOL_CENTRAL - var/capital - -/decl/cultural_info/location/get_text_details() - . = list() - if(!isnull(capital)) - . += "Capital: [capital]." - if(!isnull(ruling_body)) - . += "Territory: [ruling_body]." - if(!isnull(distance)) - . += "Distance from Sol: [distance]." - . += ..() diff --git a/code/modules/culture_descriptor/location/locations_adherent.dm b/code/modules/culture_descriptor/location/locations_adherent.dm deleted file mode 100644 index c2e390eff171f..0000000000000 --- a/code/modules/culture_descriptor/location/locations_adherent.dm +++ /dev/null @@ -1,18 +0,0 @@ -/decl/cultural_info/location/adherent - name = HOME_SYSTEM_ADHERENT - description = "The creators of the adherents once resided on a gleaming gas giant called Canon. After the solar flare called the Scream, \ - nothing moves in the ocean of cloud other than the artificial weapon platforms and automated defences that enforce the eternal quarantine \ - of the dead planet. To the Vigil, Canon is a shrine to their lost gods, untouchable and revered. Adherents stationed around Canon work \ - directly under Core Traffic Control, carrying out tasks vital to the continued functioning of the Vigil as a whole. They are likely highly \ - loyal and very traditionalist by comparison to their peers." - distance = "Unknown, more than 50 light years" - ruling_body = "Core System Traffic Control Hub 37-Q" - -/decl/cultural_info/location/adherent/monument - name = HOME_SYSTEM_ADHERENT_MOURNER - description = "In their unending search across the stars, the Vigil has uncovered many so-called grave worlds or monument worlds - planets \ - upon which a sentient species met an unkind end. The adherents build orbital stations over such worlds to add them to their vigil, watching \ - over the bombed-out, desolate or virally rampant surfaces in memoriam for those who died there. Adherents stationed at the observation \ - stations over the monument worlds tend to be more reflective and less garrulous than their peers. They have stood silent vigil over the \ - grave of a billion souls for longer than humans have had electricity, and that colours their instinctive deference to organic intelligences \ - somewhat." diff --git a/code/modules/culture_descriptor/location/locations_diona.dm b/code/modules/culture_descriptor/location/locations_diona.dm deleted file mode 100644 index ecdb0fc7a3468..0000000000000 --- a/code/modules/culture_descriptor/location/locations_diona.dm +++ /dev/null @@ -1,8 +0,0 @@ -/decl/cultural_info/location/epsilon - name = HOME_SYSTEM_DIONAEA - description = "The diona home system is a trinary system, first discovered by the Skrell and later revisted by a mining \ - consortium. It has no planets and no settled large bodies, but sports a massive debris ring composed of ancient habitats \ - and destroyed stations. The dionaea themselves were found in scattered orbits around each of the three stars, singing to \ - each other across the inky void." - ruling_body = "The Diona Chorus" - distance = "63 light years" diff --git a/code/modules/culture_descriptor/location/locations_human.dm b/code/modules/culture_descriptor/location/locations_human.dm deleted file mode 100644 index ea1e65341c6fd..0000000000000 --- a/code/modules/culture_descriptor/location/locations_human.dm +++ /dev/null @@ -1,253 +0,0 @@ -/decl/cultural_info/location/human - name = HOME_SYSTEM_MARS - description = "Mars, the current capital of the SCG, known by its nickname the Red Planet, is one of the most populous centres of Humanity. \ - Since the founding of the first colony by Jimmy Gideon many years ago Mars has been an important player on the Human stage. Terraforming on \ - Mars was only partially successful, and today much of the population lives either in huge domed cities/agri-zones or within a vast underground \ - tunnel network connecting large underground cities. Often seen as the primary divide on the planet, the rich surfaces versus the poor \ - tunnellers, Mars is rife with dissent, crime and continuous unrest, especially underground.

              The people of Mars vary, from the poor, \ - downtrodden tunnellers to the cosmopolitan urbanites of Olympus to the hardy farmers of the agri-domes, though they all share a strong sense \ - of Martian pride. The Martian people have not had an easy history. As the new, primary home of humanity the people have seen great struggles \ - over the centuries, ranging from revolutions to political upheaval and regular rioting. The people of Mars consider themselves somewhat tougher \ - than most with a fierce pride that often clashes not just with those from other planets, but those from other parts of Mars." - distance = "1.5AU" - capital = "Olympus" - economic_power = 1.1 - - -/decl/cultural_info/location/human/earth - name = HOME_SYSTEM_EARTH - description = "Earth, home of humankind, has long been in a state of recovery following centuries of pollution and exploitation. Today, much of \ - the Earth exists as a nature reserve, dedicated to preserving the history of humanity. The humans that remain live mostly in large urban zones \ - across the globe. Huge, planned cities consisting of numerous arcologies with a focus on eco-friendliness. No longer the political power of \ - Humanity, Earth is content to be something of a backwater and tourist destination for those looking to discover their heritage.

              People from \ - Earth are among the wealthier humans on average, though they are still comparable with those of Mars. Remarkably average, the people of Earth are \ - much as they have been for hundreds of years, and are generally content with their lot in life. From a variety of ancient cultures, the people of \ - Earth are as diverse as they have always been." - distance = "1AU" - capital = "Geneva" - economic_power = 1.2 - -/decl/cultural_info/location/human/luna - name = HOME_SYSTEM_LUNA - distance = "1AU" - description = "Luna, the moon of the planet Earth, had long been a goal for humanity and symbol of space exploration. \ - Today Luna sits as one of the oldest homes of Humanity. It is the home of the rich, the powerful, the corporate. \ - Divided into a series of interconnected domes which are scattered across the surface each containing its own unique city \ - known as a \"prefecture\" Luna is home to a diverse and rich culture that varies from prefecture to prefecture. Its capital, Selene, \ - is a centre of culture, the arts, trade and politics and it is from here the people of Luna take the name of their language 'Selenian'. \ - Despite its status, Luna is not without its own issues, though much of the population \ - is upper class and upper middle class, these problems typically manifest themselves in political machinations and elaborate plots. \ - The people of Luna continue to exert influence across human space, and corporations flock to Luna to build their own prefecture and \ - establish their headquarters there as a symbol of success, power and accomplishment.

              The people of Luna are often considered the \ - 'old money' of humanity, with many of them having distinct, traceable lineages to the first settlers, old Earth dynasties and heavy corporate \ - ties. Most of the people of Luna are rich, cultured and refined. Not all are, however, and many of the people of the city of New Vegas are on \ - the poverty line, often holding feelings of resentment against the other people of Luna." - capital = "Selene" - economic_power = 1.3 - secondary_langs = list(LANGUAGE_HUMAN_SELENIAN) - -/decl/cultural_info/location/human/venus - name = HOME_SYSTEM_VENUS - distance = "0.7AU" - description = "Venus, in the Sol System, is a planet which has a largely unsustainable surface atmosphere.\ - However, early terraforming was successful in maintaining a desirable, habitable atmosphere high up in the clouds and it is here that \ - much of the population of Venus resides. Venus itself is covered in huge platforms, supporting these cloud cities and numerous \ - agricultural zones, which quickly earned Venus the reputation of 'sol's breadbasket.' Today Venus is the home of some of the more \ - extravagantly wealthy with the entire planet being a dedicated tourist destination, most of its infrastructure and residential zones are \ - dedicated to providing entertainment, hotels, casinos and various other attractions. Venus is one of the richest planets in the SCG and \ - most of its residents enjoy a decadent, elitist lifestyle.

              Many of the people of Venus come in two categories. The rich, the retirees, \ - the more public corporate workers, who reside high in the clouds. These people often enjoy an extravagant and somewhat decadent lifestyle. \ - Apart from those rich enough to live there permanently most of the people of Venus are service workers, living there only for the duration \ - of their employment. The second group, the surfacers are hardy labourers who work in large, windowless, industrial complexes on the planets \ - surface. These surfacers often resent and are at odds with their rich, carefree employers." - capital = "Central Administration Zone" - economic_power = 1.4 - -/decl/cultural_info/location/human/ceres - name = HOME_SYSTEM_CERES - distance = "2.7AU" - description = "Ceres station, officially the Ceres Mining and Habitation Outpost is historically a significant mining facility for humanity. However \ - this importance has diminished greatly in the past few decades and today Ceres is a sprawling, populous facility covering much of its namesake. \ - Operated primarily by Falco Designs, one of the SCG's premier shipbuilding corporations, Ceres is home to a multitude of drydocks and service centres \ - for vessels. Ceres is a melting pot and is the primary stopping point for vessels entering the Sol system. It is often said anything worth anything \ - passes through Ceres, giving it a reputation for having a diverse black market. Commonly called 'Belters' the people of Ceres are today are mostly \ - employed in shipbuilding, manufacturing, vessel services and hospitality. Belters generally regard themselves as adaptive, proud members of the SCG \ - and some of the best engineers Humanity has to offer." - capital = "Government Zone, Ceres Station" - -/decl/cultural_info/location/human/pluto - name = HOME_SYSTEM_PLUTO - distance = "45AU" - description = "Pluto, nominally a Democratic Republic, is a small planet in the Sol system. Pluto has a fairly small population compared \ - to many other planets in the SCG, with much of it being centred around only two cities, both of which are in desperate need of modernisation \ - and repair, with much infrastructure long since collapsed. Pluto is dominated by criminal elements and corruption is rampant. Those who live on \ - Pluto either work a desperate, tough existence trying to escape the planet or are part of or under the thumbs of one of the many local crime \ - syndicates. In spite of a number of modernisation efforts the Pluto of today has seen very little in the way of improvement.

              The people \ - of Pluto are, surprisingly, some of the worst off in the SCG. Downtrodden, poor, and from a locale that is so infested with crime it has become \ - part of the local culture. Most of the people of Pluto are very rough around the edges, hardened by years of poverty or criminality. Those that \ - manage to escape rarely wish to return, though often possess a looser set of morales as a result of their time on the planet." - capital = "New Santa Domingo" - economic_power = 0.8 - secondary_langs = list(LANGUAGE_GUTTER) - -/decl/cultural_info/location/human/cetiepsilon - name = HOME_SYSTEM_TAU_CETI - distance = "11.9 light years" - description = "Ceti Epsilon, the only habitable planet in the Tau Ceti system, is home to its largest population centre. \ - The planet itself is effectively covered in one large city with a few 'green' areas dispersed throughout. The most urban location \ - in the wider SCG, the planet attracts many to its glittering neon lights and easy to get lost in streets. More importantly, \ - Ceti Epsilon is home to the Ceti Institute of Technology, the premier learning location in Sol and, arguably, all of humanity. \ - The Ceti Institute of Technology is a public university and, for the most part, offers free tuition to all. However, places are \ - competitive and preference is given to natives to the Tau Ceti system. The universe attracts as many newcomers as the rest of the cityscape \ - combined. Today Ceti Epsilon is a major technology and population hub, being a destination for those seeking a better life, or to simply get \ - lost.

              The people of Ceti Epsilon are some of the most, well, average in the SCG. Being from a largely built up world with a focus on \ - the cutting edge, most Episoloners are tech-savvy, at the very least and are usually well educated, with a focus on the sciences. The people \ - of Ceti Episilon have developed a reputation for being some of the best and brightest that Sol has to offer." - capital = "Verlize" - economic_power = 1.4 - -/decl/cultural_info/location/human/eos - name = HOME_SYSTEM_HELIOS - description = "Eos, in the Helios system, is itself a small, hot, dense world. The world itself is of only marginal importance, though it supports a densely packed city, Surya, \ - which has become known for its banking services. Of more import is the system itself, Helios, and what orbits Eos: The Helios Gateway Installation. The HGI is the largest \ - gateway installation in SCG space and provides vital links to many other SCG systems. Practically a city in space unto itself, the HGI is home to a hodgepodge of private individuals, \ - Fleet and law enforcement outposts, government services and a wide array of private enterprises all catering to the many hangabouts, travellers, merchants and soldiers who pass through it daily. \ - This fact alone is what has allowed the Helios system and Eos as a whole to weather multiple economic recessions and has allowed Eos to establish itself as a premier commercial centre of the wider \ - SCG. This process was hindered during the Gaia conflict, when the Helios Gateway was destroyed in a suicide action of the Fourth Fleet to stop the GCC advance. It has recovered rapidly \ - since the occupation, though the memories of that event carry in the collective consciousness of those who remained through it." - capital = "Surya" - economic_power = 1.3 - distance = "10 light years" - -/decl/cultural_info/location/human/terra - name = HOME_SYSTEM_TERRA - description = "Terra, in the Gilgamesh system. Is not the planet Earth as some may be lead to believe. No, Terra is the home of the Gilgamesh Colonial Confederation, and the capital of that \ - particular superpower. Terra is one of the many affiliated planets in the GCC and the one that is perhaps the most important. Terra, much like most of the GCC, is isolationist, with a minimal \ - non-human presence. Much of Terra is heavily industrialised, with a lower standard of living than on equivalent SCG planets. Much of the population works in services, industry or the military. \ - Still recovering from an economic crash toward the end of the Gaia conflict, much of Terra is in decline, with public services and works being minimal and much of the population burdened by \ - increasingly high taxes. This state of affairs has seen the immigration of many Terran citizens to the SCG in recent years, hoping to escape the poor conditions they found themselves in. Despite this,\ - the people of Terra are a proud and unbroken people who are heavily patriotic and tend to bring this with them wherever they go." - capital = "Ameranth" - distance = "22.5 light years." - economic_power = 0.9 - ruling_body = "Gilgamesh Colonial Confederation" - language = LANGUAGE_HUMAN_RUSSIAN - -/decl/cultural_info/location/human/lorriman - name = HOME_SYSTEM_LORRIMAN - distance = "44 light years" - description = "Lorriman is an arctic planet in the Gessshire system. It is a frozen wasteland with winds reaching 200mph, with an average temperature is -50°C. \ - Because of this, the planet's cities are either domed or built into mountains. Its economy is built around a technological backbone, providing the technology \ - and the people skilled to use them. Its infrastructure is developed enough to support mass transit across the planet. Its capital city is called The Hub, a massive domed structure \ - that serves both as a spaceport, administrative hub, and habitation zone. It remains the only place on the planet accessible to non-Lorrimanians. \ - Despite its isolation, the Scientific Institute of Gessshire remains amicable with Sol Central. The Institute is a technocratic republic led by Dr. Johan Montgomery. \ - It is known by most Defence Forces personnel to act begrudgingly towards any requests given, and only a select few have visited the planet itself.

              \ - Lorrimanians are a quiet, unassuming, academically-driven bunch. They are often sought as researchers or other scientifically-driven career. It is rare for anyone to immigrate \ - to the planet, but exceptions have been made. A scientifically driven people, they have served many organisations loyally." - capital = "The Hub" - economic_power = 1.0 - -/decl/cultural_info/location/human/cinu - name = HOME_SYSTEM_CINU - distance = "48 light years" - description = "Cinu is an occupied desert planet, located in the Lucinaer system. It is today part of a greater community within the Sol Central Government. \ - Twice the size of Earth, much of its surface is unoccupied desert, with the vast majority of population living around either the various oases, or in the less \ - harsh northern regions. Home to around 20 Million people, it welcomes nearly 50,000 immigrants yearly. Cinu's capital, 'Al-Mular', is home to several major \ - Peacekeeping Forces offices, with nearly 30,000 Cinuans serving every year. The Republic of Cinu is comprised of seven political regions, and maintained by \ - the Congress of the Cinuan People. A direct democracy, its people vote directly on matters related to their state. Because of this, Cinu exerts little influence \ - on the rest of space. Cinu's population are overall well off, with a stable economy and decent education. This varies by region however, with some of the population \ - falling well below the standard poverty line. Cinu is considered one of the most developed democratic systems in space, with relatively little internal conflict. \ -

              The Cinuan people ethnically range from Martian Tharseese to Old Earth Arabic, West Asian and Central Asian cultures. From a harsh, duned desert planet, they \ - are known for characteristic firmness disguising fierce friendliness. Its people have suffered in the past, but today look towards a bright future. They are known to be pacifist,\ - with many refusing to participate in the Defence Forces. Instead, they serve as peacekeepers and diplomats. The Cinuan People were controversially non-aligned during the Gaian Conflict." - capital = "Al-Mular" - economic_power = 1.0 - -/decl/cultural_info/location/human/yuklid - name = HOME_SYSTEM_YUKLID - distance = "42 light years" - description = "Yuklid V is an occupied jungle world in the Yuklid system. It is home to large medical facilities and corporate holdings, serving as home to this region of space's medical academia. \ - Large parts of Yuklid have been retained as nature and botanical reserves. Most medicines produced in the outer regions of Sol Central can trace their origins to this planet. \ - Much of Yuklid is uncolonised, with infrastructure focused around the planet's poles. One such facility is the Vey-Med Operational Headquarters. \ - The Republic of Yuklid is a minor political player within the SCG, and the Expeditionary Corps use the planet for exoplanet training. It is protected by the Third Fleet. \ -

              The Yuklid people mostly keep to themselves, with little emigration. The population that do leave the planet typically pursue careers in medicine. \ - Being from a small colonial system, those that do join the Defence Forces have usually never seen the level of development the Sol System has. \ - More recently, a spiritualist movement has developed on the planet, taking aspects of religious theory and the hippocratic oath." - capital = "Iyeegi" - economic_power = 0.9 - -/decl/cultural_info/location/human/lordania - name = HOME_SYSTEM_LORDANIA - distance = "40 light years" - description = "Lordania is a heavily developed plains world in the Lordania system. The planet has developed five large mega-cities, connected by various suburban developments. \ - Heavy use of dams and nature reserves have allowed the people to terraform parts of the planet. Historically, the planet has had a large wealth gap, \ - which recent years have only made worse. The planet's economy has been rebuilt from the ground up around entertainment and the arts. The New Ares Metroplex is the entertainment, \ - and fashion capital of the outer rim of the SCG. Numerous TSCs bought up parts of the planet during the economic depression, and now fully exploit the success. It is not a city planet, but \ - it could become one in the next 300 years. The planet enjoys warm relations with its neighbor Kingston. Lordania can be described as an aristocratic republic, and have historical \ - ties with the political families of Luna.

              The people of Lordania are divided into two parts, Upper and Lower Lordanians. Upper Lordanians are wealthy, and are \ - typically only seen on the planet, or in entertainment medias. Lower Lordanians are more common, and many opt leave their home planet. Historically, Lordanians have a superiority complex, \ - and often see themselves as better. Most Lordanians are seen as untrustworthy, or selfish. As such, they are rarely seen within Sol's Defence Forces." - capital = "New Ares" - economic_power = 1.2 - -/decl/cultural_info/location/human/kingston - name = HOME_SYSTEM_KINGSTON - distance = "40 light years" - description = "Kingston is an occupied ocean world made of various archipelagos, within the Lordania system. The planet's surface is 90% water, and much of the population live around the equator. \ - The planet is a humid subtropical world, and a huge tourist destination for Sol citizens. Kingston is extremely multicultural, and many old human cultures still hold an enclave. It also contains a large \ - number of Tritonians, both as tourists and residents. An estimated 15 million tourists visit annually. While a highway and magnetic train system link many of the islands, boats are incredibly popular amongst \ - tourists and workers alike. Many of the islands on the planet have been created via tectonic plates or volcanic eruption, making the planet more geologically active than Earth. \ - Despite this, technology of the 26th century has developed enough to mitigate most structural damage done in the event of earthquakes or tsunamis. \ - Formally the United Nations of Kingston, the planet is made up of multiple island nations and several planetary representatives.

              The people of Kingston are relatively unassuming. They have much in common with \ - their Sol brothers, and are usually seen onboard most SCG Vessels. Growing up on a waterworld, most Kingstonians can sail a boat, something rare in the 26th Century. \ - Typically dark in skin due to the planet's proximity to it's sun, Kingstonians come in various forms." - capital = "New Havana" - economic_power = 1.1 - -/decl/cultural_info/location/human/gaia - name = HOME_SYSTEM_GAIA - distance = "14 light years" - description = "Gaia is the sole planet in the Galilei system, serving as the DMZ between the SCG and the GCC. \ - It is an agricultural world, though various conflicts across the planet's surface have left it scarred. The planet is divided into \ - Sol-Controlled Southern Gaia and Independent-Controlled Northern Gaia, with New Venice remaining a neutral zone inside the DMZ. \ - The planet's population remain divided even 10 years after the Gaian Conflict. New Venice sits on the edge of Lake Cabot. While Gaia is divided \ - the current Mayor of New Venice serves as a vital mediator between both sides.

              The Gaian People are tired of war, and long to see their families \ - once again. They suffered hard twenty years prior, and fear they may suffer again." - capital = "New Venice" - economic_power = 1.0 - -/decl/cultural_info/location/human/magnitka - name = HOME_SYSTEM_MAGNITKA - distance = "24 light years" - description = "Magnitka is an independent, industrialized mining and ore processing colony located in the Ursa system. \ - Ruled by an authoritarian government heavily associated with the corporations that founded it, Magnitka's recent history is marked by civil war. Even today, a large number of rebel groups populate the planet. \ - Founded by German companies in the 2300s, the overwhelming majority of Magnitka's population is descended from Eastern European laborers and their German managers. \ - Unfortunately, Magnitka's economy is in a decline as its principle export, iron, grows cheaper by the day. The primary careers available to Magnitkans are military service, mining, or organized crime. \ - Though historically relatively isolationist, today Magnitka finds itself more and more closely associated with the Gilgamesh Colonial Confederation, in an effort to offset its economic decline." - capital = "Labortown" - economic_power = 0.8 - ruling_body = "Magnitka" - -/decl/cultural_info/location/human/castilla - name = HOME_SYSTEM_CASTILLA - distance = "10 light years" - description = "Nueva Castilla is an exoplanet in the Culebre system, currently \ - in the late stages of terraforming. Formerly a barren rock, it was chosen for future \ - colonization because of its size, core composition and location in the Culebre system's \ - 'goldilocks zone'. Since the project began, Nueva Castilla has developed a functional, if \ - decidedly unique biosphere where much of the planet is covered in a fast growing moss. \ - There are two major human settlements, and a number of smaller ones both planetside and in-system." - capital = "Placida" - economic_power = 1.0 - -/decl/cultural_info/location/human/fosters - name = HOME_SYSTEM_FOSTER - distance = "11 light years" - description = "Foster's World, located in the Sanura system, is a small, icy exoplanet with \ - a planetary mass slightly lower than Earth. A highly active core caused the formation of \ - several small oceans with wide and temperate coastlines, the only reason the planet sports a \ - breathable atmosphere at all. The planet and system are owned by a privately-funded \ - cooperative. The colonists who brave the planet have flourished in spite of the planet's \ - hostile weather, exporting seafood and hosting tourists eager to experience the alien planet." - capital = "Foster's Landing" - economic_power = 1.2 diff --git a/code/modules/culture_descriptor/location/locations_ipc.dm b/code/modules/culture_descriptor/location/locations_ipc.dm deleted file mode 100644 index bf182a9dabe84..0000000000000 --- a/code/modules/culture_descriptor/location/locations_ipc.dm +++ /dev/null @@ -1,8 +0,0 @@ -/decl/cultural_info/location/root - name = HOME_SYSTEM_ROOT - description = "Root, the claimed homeworld of the Positronic Union, is a verdant world slowly falling \ - to mass mechanization. Although there are populations of positronics living directly on the surface, \ - most operate from orbital stations. IPCs living on Root tend to be more callous than those in organic territories, \ - with a strong drive for freedom." - ruling_body = "The Assembly" - distance = "55 light years" diff --git a/code/modules/culture_descriptor/location/locations_other.dm b/code/modules/culture_descriptor/location/locations_other.dm deleted file mode 100644 index 334c39309e748..0000000000000 --- a/code/modules/culture_descriptor/location/locations_other.dm +++ /dev/null @@ -1,26 +0,0 @@ -/decl/cultural_info/location/stateless - name = HOME_SYSTEM_STATELESS - description = "Sometimes people fall through the cracks... You have nobody to speak on your behalf." - economic_power = 0 - ruling_body = "None" - -/decl/cultural_info/location/other - name = HOME_SYSTEM_OTHER - description = "The last time someone tried to do a comprehensive encyclopaedia of the known galaxy, their \ - positronic processor deleted itself rather than face up to the task. You are from nowhere in particular - a \ - backwater world, or somewhere off the starmaps." - distance = "Various" - capital = "Various" - economic_power = 1 - ruling_body = "Various" - -/decl/cultural_info/location/deep_space - name = HOME_SYSTEM_DEEP_SPACE - description = "You came from the void between the stars." - language = null - secondary_langs = null - additional_langs = null - distance = null - capital = null - economic_power = null - ruling_body = null diff --git a/code/modules/culture_descriptor/location/locations_serpentids.dm b/code/modules/culture_descriptor/location/locations_serpentids.dm deleted file mode 100644 index baec0c88ba89f..0000000000000 --- a/code/modules/culture_descriptor/location/locations_serpentids.dm +++ /dev/null @@ -1,8 +0,0 @@ -/decl/cultural_info/location/tauwilo - name = HOME_SYSTEM_SERPENTIDS - description = "Tau-Wilo is a small planet and the origin of all serpentids. It has low gravity and a dense oxygen \ - nitrogen atmosphere with a tinge of phoron. It is dominated by biodiverse tropical and subtropical forests, with \ - few areas of planes. The only human settlement is a research facility built by Xynergy and used as a part of their \ - giant armoured serpentid training program. Tau-Wilo is the only known location for breeding populations of giant \ - armoured serpentids, and is the shared homeland of every individual of that race." - distance = "26 light years" diff --git a/code/modules/culture_descriptor/location/locations_skrell.dm b/code/modules/culture_descriptor/location/locations_skrell.dm deleted file mode 100644 index 7543a498d72b6..0000000000000 --- a/code/modules/culture_descriptor/location/locations_skrell.dm +++ /dev/null @@ -1,62 +0,0 @@ -/decl/cultural_info/location/qerrbalak - name = HOME_SYSTEM_QERRBALAK - description = "Qerr'Balak, in the Qerr'Valis system, is the ancient home of skrellkind. A large, swampy world, it consists of two continents separated by \ - an archipelago filled ocean. The smaller continent, and original home of the Skrell civilisation, Qorr'gloa, is mostly swampland, with most cities being \ - built on the coast. It is separated by the Qo'rria Sea from the other, larger continent, Xi'Krri'oal, which is more populous and varied, with snowy \ - mountains in the south to temperate zones in the inner areas. Composed of hundreds of city-states, Qerr'Balak is still home to a sizable population of Skrell. \ - While no longer the sole powerhouse of the Skrell civilisation, it is still widely respected among skrellkind as their homeworld, and for its academic and \ - scientific prowess." - capital = "None" - ruling_body = "None" - distance = "67 light years" - economic_power = 1.5 - -/decl/cultural_info/location/talamira - name = HOME_SYSTEM_TALAMIRA - description = "Talamira, in the Ri'Qora system, is located far on the other side of Skrell space far into what is, to humans, unchartered and unexplored territory.\ - Established some 500 years ago Talamira is considered a trade and commerce hub in its sector. This is largely a result of its central position between a large \ - number of established frontier city-states and the rest of Skrell space, The planet itself consists of a single swamp ridden supercontinent that is mildly \ - warmer than Qerr'Balak, with hundreds of city-states dotting the surface, most of which are heavily invested in manufacturing and logistics, benefiting from the \ - trade of raw resources with frontier worlds.This rising star of the Skrell territories is considered an economic powerhouse, with its city states wielding influence \ - across the frontier." - capital = "None" - ruling_body = "None" - distance = "300 light years" - economic_power = 2.5 - -/decl/cultural_info/location/roasora - name = HOME_SYSTEM_ROASORA - description = "Roa'Sora, in the Qrri'terr system, is a small planet consisting of a single city-state, Tri'sorr. Ro'moxi.Since its founding some 200 years prior \ - The Skrell of Roa'Sora have been engaged in a state of constant defence against a nearby species that has made no diplomatic attempts to communicate known \ - only as the 'Throom,' a name given because of a distinctive sound made by their vessels. The species, which appear to do little other than raid, make regular incursions.\ - It is because of this state that Roa'Sora is heavily militarised in nature, with a heavy Raskinta influence and strong cooperation with its SDTF, Sora'terr.\ - The primary export of the planet is rare minerals, though it possesses a strong military defence industry also. In spite of their situation the city-state regularly \ - attempts to negotiate and open diplomatic channels with their assailants to little avail.Geographically, the planet is fairly mountainous and rocky, with a few deep lakes \ - in mountain valleys, around which most mining stations are built." - capital = "None" - ruling_body = "None" - distance = "350 light years" - economic_power = 1.2 - -/decl/cultural_info/location/mitorqi - name = HOME_SYSTEM_MITORQI - description = "Mi'tor'qi, in the Qoa'lo system, is one of a multitude of planets along the human-skrell border. One of the newest colonies of Skrellkind, the numerous \ - city states of Mi'tor'qi show a great deal of human influence in their society. Many of the city states have adapted their economies to focus on interstellar trade with \ - humanity, and it is here that a number of skrellian corporations offer loan services of skilled Skrell to human organizations. Many inner-system city states use their \ - counterparts and their corporations as an intermediary to trade with humanity while remaining obscure. Despite the planet's prosperity there is a growing conservative \ - movement in many city-states concerned with the perceived invasive influence of humankind and its potential long-term damage." - capital = "None" - ruling_body = "None" - distance = "32 light years" - economic_power = 1.9 - -/decl/cultural_info/location/skrellspace - name = HOME_SYSTEM_SKRELLSPACE - description = "A very different style of living from a more traditional city-state based Skrell, those who live and reside in space belong to no particular city-state \ - and instead are governed by the SDTF of the system in which they reside, with all services and installations under the control of the local Raskinta SDTF Commander \ - rather than a Qerr-Skria.Life in these circumstances is often more regimented and disciplined, with a stronger emphasis on community and collaboration, with varying extremes \ - depending on the status, funding and level of military engagements the SDTF is currently in." - capital = "None" - ruling_body = "Your local SDTF" - distance = "None" - economic_power = 1.9 diff --git a/code/modules/culture_descriptor/location/locations_unathi.dm b/code/modules/culture_descriptor/location/locations_unathi.dm deleted file mode 100644 index fa690bed5774e..0000000000000 --- a/code/modules/culture_descriptor/location/locations_unathi.dm +++ /dev/null @@ -1,52 +0,0 @@ -/decl/cultural_info/location/moghes - name = HOME_SYSTEM_MOGHES - description = "A dead world full of strange, monstrous creatures and mysterious and dangerous landscapes, \ - this is the home of the unathi. Unathi believe this world was once lush and full of life, but due to the \ - decisions of the precursors, it was killed and left to rot. For the unathi, it is their duty to bring it \ - back to life, or to become strong enough that they don't have to." - ruling_body = "Clan Hegemony" - distance = "20 light-years" - secondary_langs = list( - LANGUAGE_UNATHI_SINTA, - LANGUAGE_UNATHI_YEOSA, - LANGUAGE_SIGN, - LANGUAGE_HUMAN_EURO, - LANGUAGE_SPACER - ) - -/decl/cultural_info/location/ouere - name = HOME_SYSTEM_OUERE - description = "The recently discovered system of precursor gateway devices connecting Moghes to its smaller sister \ -planet of Ouere has seen many clans and small groups stepping through it into this new world. There is \ -no clear consensus on how to treat this new world - either as a logical extension of Moghes, a completely new entity, \ -or simply as a resource base for improving the home planet. Many colonists, artifact hunters, and ostracised groups have \ -flocked to the planet, with Markesheli communities growing quite rapidly in numbers compared to other parts of Moghes. " - ruling_body = "Clan Hegemony" - distance = "20 light-years" - secondary_langs = list( - LANGUAGE_UNATHI_SINTA, - LANGUAGE_UNATHI_YEOSA, - LANGUAGE_SIGN, - LANGUAGE_HUMAN_EURO, - LANGUAGE_SPACER - ) - -/decl/cultural_info/location/offworld - name = HOME_SYSTEM_OFFWORLD - description = "Whether through unfortunate circumstances or your own volition, you've left Moghes behind in search of your \ - purpose. You are one of many unathi who have braved the dangers and left their own planet to make their own destiny, whether \ - that be on the scorching heats of Tadmor, the technophile cityscape of Ceti Epsilon, or the bustling shipyards of Ceres." - ruling_body = "Varies" - distance = "Varies" - secondary_langs = list( - LANGUAGE_UNATHI_SINTA, - LANGUAGE_UNATHI_YEOSA, - LANGUAGE_SIGN, - LANGUAGE_HUMAN_EURO, - LANGUAGE_HUMAN_CHINESE, - LANGUAGE_HUMAN_ARABIC, - LANGUAGE_HUMAN_INDIAN, - LANGUAGE_HUMAN_IBERIAN, - LANGUAGE_HUMAN_RUSSIAN, - LANGUAGE_SPACER - ) diff --git a/code/modules/culture_descriptor/location/locations_vox.dm b/code/modules/culture_descriptor/location/locations_vox.dm deleted file mode 100644 index 3653c02d3b4ef..0000000000000 --- a/code/modules/culture_descriptor/location/locations_vox.dm +++ /dev/null @@ -1,26 +0,0 @@ -/decl/cultural_info/location/vox - name = HOME_SYSTEM_VOX_ARK - description = "The moon-sized arkships are home to the vast, vast majority of vox, and represent the closest thing to \ - a stable planetary culture the far-flung nomadic species has. Arkborn vox can expect to enjoy long lives, infrequent \ - re-embodiment, and a rich and varied social life amongst the rambunctious ark clans and families. Raiders and salvagers \ - may look upon the arkborn as lazy and passive, but they tend to return to them for rest and recuperation after each \ - mission without too many complaints." - ruling_body = "the Apex" - distance = "multiple systems" - hidden_from_codex = TRUE - -/decl/cultural_info/location/vox/shroud - name = HOME_SYSTEM_VOX_SHROUD - description = "The shroud of an arkship is an unstable and dangerous place to live, and those vox stationed there are \ - often salvagers, scavengers, engineers and technicians, struggling with the endless burden of keeping the decay of the ark \ - from progressing beyond the shroud and into more critical systems. By comparison to arkborn, they are quiet, self-supporting and \ - independant, with few cares for clan politics, family squabbles, or contest challenges. They know their task is critical to \ - the survival of the vox as a species, and next to that, tussling with your peers seems a bit immature." - -/decl/cultural_info/location/vox/ship - name = HOME_SYSTEM_VOX_SHIP - description = "Shipborn vox are often purpose-grown for their assigned tasks, frequently under the direct supervision of \ - an apex or their servants. They are often seen as 'disposable' in vox culture, as they rarely survive their incarnation \ - beyond the tour of the vessel. Those that do, however, are generally thrown straight back into long-distance shipside \ - duties, as their success shows their masters that they are well suited to it. The life of a shipborn vox is arduous and \ - bloody, and they will be killed and reborn more often than even the most reckless of arkborn raiders." diff --git a/code/modules/culture_descriptor/religion/_religion.dm b/code/modules/culture_descriptor/religion/_religion.dm deleted file mode 100644 index 2ead93035371f..0000000000000 --- a/code/modules/culture_descriptor/religion/_religion.dm +++ /dev/null @@ -1,7 +0,0 @@ -/decl/cultural_info/religion - desc_type = "Religion" - category = TAG_RELIGION - language = null - economic_power = null - secondary_langs = null - additional_langs = null diff --git a/code/modules/culture_descriptor/religion/religions_human.dm b/code/modules/culture_descriptor/religion/religions_human.dm deleted file mode 100644 index 4266cf0a193f0..0000000000000 --- a/code/modules/culture_descriptor/religion/religions_human.dm +++ /dev/null @@ -1,67 +0,0 @@ -/decl/cultural_info/religion/other - name = RELIGION_OTHER - description = "One of the many, many niche or relatively unknown religions of the galaxy." - -/decl/cultural_info/religion/unstated - name = RELIGION_UNSTATED - description = "Unwilling or unable to elaborate on their beliefs and practices for reasons only beknownst to themselves." - -/decl/cultural_info/religion/jewish - name = RELIGION_JUDAISM - description = "An Abrahamic monotheistic religion held to by the Jewish people. Someone who practices Judaism and is of the Jewish culture is called a Jew." - -/decl/cultural_info/religion/hindu - name = RELIGION_HINDUISM - description = "An Indian religion encompassing a variety of traditions, beliefs and spiritual practices. Someone who practices Hinduism is called a Hindu." - -/decl/cultural_info/religion/buddhist - name = RELIGION_BUDDHISM - description = "An Indian religion encompassing a variety of traditions, beliefs and spiritual practices based on the teachings of the Buddha. Someone who practices Buddhism is called a Buddhist." - -/decl/cultural_info/religion/jain - name = RELIGION_JAINISM - description = "An Indian religion that teaches salvation through successive lives and nonviolence. Someone who practices Jainism is called a Jain." - -/decl/cultural_info/religion/sikh - name = RELIGION_SIKHISM - description = "An Indian monotheistic religion based on the spiritual teachings of Guru Nanak and the nine Sikh gurus that succeeded him. Someone who practicies Sikhism is called a Sikh." - -/decl/cultural_info/religion/muslim - name = RELIGION_ISLAM - description = "An Abrahamic monotheistic religion teaching that there is only one God and that Muhammad is His prophet. Someone who practices Islam is called a Muslim." - -/decl/cultural_info/religion/christian - name = RELIGION_CHRISTIANITY - description = "An Abrahamic monotheistic religion based on the life and teachings of Jesus of Nazareth. Someone who practices Christianity is called a Christian." - -/decl/cultural_info/religion/bahai - name = RELIGION_BAHAI_FAITH - description = "An Abrahamic monotheistic religion that follows the teachings of Baha'u'llah and believes in universal peace and unity. Someone who practices the Baha'i Faith is called a Baha'i." - -/decl/cultural_info/religion/agnostic - name = RELIGION_AGNOSTICISM - description = "A belief that nothing is known or can be known of the existence or nature of God. Someone who holds to agnosticism is called an agnostic." - -/decl/cultural_info/religion/deist - name = RELIGION_DEISM - description = "A belief in the existence of a supreme being, specifically of a creator who does not intervene in the universe. Someone who practices deism is called a deist." - -/decl/cultural_info/religion/atheist - name = RELIGION_ATHEISM - description = "A lack of belief in a God. Someone who holds to atheism is called an atheist." - -/decl/cultural_info/religion/thelemite - name = RELIGION_THELEMA - description = "An esoteric Western religion focusing on the law of Thelema. Someone who practices Thelema is called a Thelemite." - -/decl/cultural_info/religion/spiritualism - name = RELIGION_SPIRITUALISM - description = "A belief based on communication with the spirits of the dead, especially through mediums. Someone who practices spiritualism is called a spiritualist." - -/decl/cultural_info/religion/shinto - name = RELIGION_SHINTO - description = "A traditional Japanese religion based on rituals to create a connection between the past and modern day. Someone who practices Shinto is called a Shintoist." - -/decl/cultural_info/religion/taoist - name = RELIGION_TAOISM - description = "A traditional Chinese religion that emphasizes living in harmony with the Tao. Someone who practices Taoism is called a Taoist." \ No newline at end of file diff --git a/code/modules/culture_descriptor/religion/religions_unathi.dm b/code/modules/culture_descriptor/religion/religions_unathi.dm deleted file mode 100644 index 0f5057f640679..0000000000000 --- a/code/modules/culture_descriptor/religion/religions_unathi.dm +++ /dev/null @@ -1,43 +0,0 @@ -/decl/cultural_info/religion/unathi - name = RELIGION_UNATHI_VINE - description = "A faith of farmers, it is preached by semi-nomadic travelers who believe the destruction of Moghes is meant to be a chance for the unathi to \ - turn it into their own paradise. They're always looking for new ways to grow life on their world and often refer to themselves as \ - \"her hands\"." - -/decl/cultural_info/religion/unathi_precursors - name = RELIGION_UNATHI_PRECURSOR - description = "Focused primarily with learning and understanding everything they can about the precursors, unathi of this faith \ - want to build a better world for their people with the tools that the precursors left for them." - -/decl/cultural_info/religion/unathi_strat - name = RELIGION_UNATHI_STRATAGEM - description = "Conflict and struggle define this faith. Be it war, internal struggle, arguments, or other challenges - to the followers of the grand strategem, \ - these events should always be opportunities to grow and learn so that you can be the pinnacle of the unathi, and your children can be even stronger. \ - How else will the unathi defeat the cosmic evil and survive in a world like Moghes?" - -/decl/cultural_info/religion/unathi_lights - name = RELIGION_UNATHI_LIGHTS - description = "Followers of the Lights stress the importance of what *you* can do with your hands and mind. How can you create a better \ - world for yourself and your clan? The Fruitful Lights want to create that world for the unathi. Unlike the worshippers of the Precursors, \ - the followers of the Lights believe in the knowledge of natural laws and hold that it should be unathi ingenuity and \ - engineering that brings the golden age for their people." - -/decl/cultural_info/religion/unathi_markesh - name = RELIGION_UNATHI_MARKESHELI - description = "The scorned Cult of Markesh stands apart from other unathi beliefs. Having first been mentioned and subsequently nearly \ - wiped two millennia later, other unathi view Markesheli as a dark spot in their history. A cult that thrived on violence and sacrifice, \ - Makrkesheli are tolerated due to the popular discontent of pushing them out. Many off-world Markesheli are the more moderate of the cult's \ - followers. However, most unathi still see them as a evil entity, in part due to their history of violence." - -/decl/cultural_info/religion/unathi_ancestor - name = RELIGION_UNATHI_ANCESTOR - description = "In order to ensure the normal functioning of natural and societal life, Unathi seek patronage with the powerful spirits of the \ - past, especially with those of their own kin, whom the call the Ancestors - the ranks of which every unathi is bound to join at some point. \ - The worship of the Ancestors is almost universal, and serves as the basis for other spiritual movements of Moghes." - -/decl/cultural_info/religion/unathi_aga_eakhe - name = RELIGION_UNATHI_AGA_EAKHE - description = "Traditional Yeosa religion is based on totemic worship of Ancestors and other spirits, which manifest themselves as monstrous \ - creatures dwelling on the seabed. Revered by Yeosa, those physical avatars of the powerful ones rest beneath the dark waters, their mere movements \ - causing a change of sea. Aga-Eakhe has its own oral tradition and commandments, designed to facilitate the survival of Yeosa in their \ - aquatic homeworld - those religious laws are respected by the majority of World Sea clans." diff --git a/code/modules/culture_descriptor/religion/religions_vox.dm b/code/modules/culture_descriptor/religion/religions_vox.dm deleted file mode 100644 index 8f720ce47ed51..0000000000000 --- a/code/modules/culture_descriptor/religion/religions_vox.dm +++ /dev/null @@ -1,4 +0,0 @@ -/decl/cultural_info/religion/vox - name = RELIGION_VOX - description = "Obey and revere the auralis, those who came before, for they will open the way." - hidden_from_codex = TRUE diff --git a/code/modules/detectivework/forensics.dm b/code/modules/detectivework/forensics.dm deleted file mode 100644 index adf98b4129297..0000000000000 --- a/code/modules/detectivework/forensics.dm +++ /dev/null @@ -1,226 +0,0 @@ -/obj/item/forensics - icon = 'icons/obj/forensics.dmi' - w_class = ITEM_SIZE_TINY - -//This is the output of the stringpercent(print) proc, and means about 80% of -//the print must be there for it to be complete. (Prints are 32 digits) -var/global/const/FINGERPRINT_COMPLETE = 6 -/proc/is_complete_print(var/print) - return stringpercent(print) <= FINGERPRINT_COMPLETE - -/atom/var/list/fingerprintshidden -/atom/var/fingerprintslast - -/atom/var/list/suit_fibers -/atom/var/list/fingerprints -/atom/var/list/gunshot_residue -/obj/item/var/list/trace_DNA - -/atom/proc/add_hiddenprint(mob/M) - if(!M || !M.key) - return - if(fingerprintslast == M.key) - return - fingerprintslast = M.key - if(!fingerprintshidden) - fingerprintshidden = list() - if (ishuman(M)) - var/mob/living/carbon/human/H = M - if (H.gloves) - src.fingerprintshidden += "\[[time_stamp()]\] (Wearing gloves). Real name: [H.real_name], Key: [H.key]" - return 0 - - src.fingerprintshidden += "\[[time_stamp()]\] Real name: [M.real_name], Key: [M.key]" - return 1 - -/atom/proc/add_fingerprint(mob/M, ignoregloves, obj/item/tool) - if(isnull(M)) return - if(isAI(M)) return - if(!M || !M.key) - return - if(istype(tool) && (tool.item_flags & ITEM_FLAG_NO_PRINT)) - return - - add_hiddenprint(M) - add_fibers(M) - - if(!fingerprints) - fingerprints = list() - - //Hash this shit. - var/full_print = M.get_full_print(ignoregloves) - if(!full_print) - return - - //Using prints from severed hand items! - var/obj/item/organ/external/E = M.get_active_hand() - if(src != E && istype(E) && E.get_fingerprint()) - full_print = E.get_fingerprint() - ignoregloves = 1 - - if(!ignoregloves && ishuman(M)) - var/mob/living/carbon/human/H = M - if (H.gloves && H.gloves.body_parts_covered & HANDS && H.gloves != src) - if(istype(H.gloves, /obj/item/clothing/gloves)) //Don't add prints if you are wearing gloves. - var/obj/item/clothing/gloves/G = H.gloves - if(!G.clipped) //Fingerless gloves leave prints. - return 0 - else if(prob(75)) - return 0 - H.gloves.add_fingerprint(M) - var/additional_chance = 0 - if(!M.skill_check(SKILL_FORENSICS, SKILL_BASIC)) - additional_chance = 10 - // Add the fingerprints - add_partial_print(full_print, additional_chance) - return 1 - -/atom/proc/add_partial_print(full_print, bonus) - LAZYINITLIST(fingerprints) - if(!fingerprints[full_print]) - fingerprints[full_print] = stars(full_print, rand(0 + bonus, 20 + bonus)) //Initial touch, not leaving much evidence the first time. - else - switch(max(stringpercent(fingerprints[full_print]) - bonus,0)) //tells us how many stars are in the current prints. - if(28 to 32) - if(prob(1)) - fingerprints[full_print] = full_print // You rolled a one buddy. - else - fingerprints[full_print] = stars(full_print, rand(0,40)) // 24 to 32 - - if(24 to 27) - if(prob(3)) - fingerprints[full_print] = full_print //Sucks to be you. - else - fingerprints[full_print] = stars(full_print, rand(15, 55)) // 20 to 29 - - if(20 to 23) - if(prob(5)) - fingerprints[full_print] = full_print //Had a good run didn't ya. - else - fingerprints[full_print] = stars(full_print, rand(30, 70)) // 15 to 25 - - if(16 to 19) - if(prob(5)) - fingerprints[full_print] = full_print //Welp. - else - fingerprints[full_print] = stars(full_print, rand(40, 100)) // 0 to 21 - - if(0 to 15) - if(prob(5)) - fingerprints[full_print] = stars(full_print, rand(0,50)) // small chance you can smudge. - else - fingerprints[full_print] = full_print - -/atom/proc/transfer_fingerprints_to(var/atom/A) - if(fingerprints) - LAZYDISTINCTADD(A.fingerprints, fingerprints) - if(fingerprintshidden) - LAZYDISTINCTADD(A.fingerprintshidden, fingerprintshidden) - A.fingerprintslast = fingerprintslast - if(suit_fibers) - LAZYDISTINCTADD(A.suit_fibers, suit_fibers) - if(blood_DNA) - LAZYDISTINCTADD(A.blood_DNA, blood_DNA) - if(gunshot_residue) - var/obj/item/clothing/C = A - LAZYDISTINCTADD(C.gunshot_residue, gunshot_residue) - -/obj/item/transfer_fingerprints_to(var/atom/A) - ..() - if(istype(A,/obj/item) && trace_DNA) - var/obj/item/I = A - LAZYDISTINCTADD(I.trace_DNA, trace_DNA) - -/atom/proc/add_fibers(mob/living/carbon/human/M) - if(!istype(M)) - return - if(M.gloves && istype(M.gloves,/obj/item/clothing/gloves)) - var/obj/item/clothing/gloves/G = M.gloves - if(G.transfer_blood) //bloodied gloves transfer blood to touched objects - if(add_blood(G.bloody_hands_mob)) //only reduces the bloodiness of our gloves if the item wasn't already bloody - G.transfer_blood-- - else if(M.bloody_hands) - if(add_blood(M.bloody_hands_mob)) - M.bloody_hands-- - - var/fibertext - var/item_multiplier = istype(src,/obj/item)?1.2:1 - var/suit_coverage = 0 - if(istype(M.wear_suit, /obj/item/clothing)) - var/obj/item/clothing/C = M.wear_suit - fibertext = C.get_fibers() - if(fibertext && prob(10*item_multiplier)) - LAZYDISTINCTADD(suit_fibers, fibertext) - suit_coverage = C.body_parts_covered - - if(istype(M.w_uniform, /obj/item/clothing) && (M.w_uniform.body_parts_covered & ~suit_coverage)) - var/obj/item/clothing/C = M.w_uniform - fibertext = C.get_fibers() - if(fibertext && prob(15*item_multiplier)) - LAZYDISTINCTADD(suit_fibers, fibertext) - - if(istype(M.gloves, /obj/item/clothing) && (M.gloves.body_parts_covered & ~suit_coverage)) - var/obj/item/clothing/C = M.gloves - fibertext = C.get_fibers() - if(fibertext && prob(20*item_multiplier)) - LAZYDISTINCTADD(suit_fibers, fibertext) - -/obj/item/proc/add_trace_DNA(mob/living/carbon/M) - if(!istype(M)) - return - if(M.isSynthetic()) - return - if(istype(M.dna)) - LAZYDISTINCTADD(trace_DNA, M.dna.unique_enzymes) - -/mob/proc/get_full_print() - return FALSE - -/mob/living/carbon/get_full_print() - if (!dna || (mFingerprints in mutations)) - return FALSE - return md5(dna.uni_identity) - -/mob/living/carbon/human/get_full_print(ignoregloves) - if(!..()) - return FALSE - - var/obj/item/organ/external/E = organs_by_name[hand ? BP_L_HAND : BP_R_HAND] - if(E) - return E.get_fingerprint() - - - -//on examination get hints of evidence -/mob/examinate(atom/A as mob|obj|turf in view()) - if(UNLINT(..())) - return 1 //I'll admit I am just imitating examine.dm - - - //Detective is on the case - if(get_skill_value(SKILL_FORENSICS) >= SKILL_EXPERT && get_dist(src, A) <= (get_skill_value(SKILL_FORENSICS) - SKILL_ADEPT)) - var/clue - if(LAZYLEN(A.suit_fibers)) - to_chat(src, SPAN_NOTICE("You notice some fibers embedded in \the [A].")) - clue = 1 - if(LAZYLEN(A.fingerprints)) - to_chat(src, SPAN_NOTICE("You notice a partial print on \the [A].")) - clue = 1 - if(LAZYLEN(A.gunshot_residue)) - if(isliving(src)) - var/mob/living/M = src - if(M.isSynthetic()) - to_chat(src, SPAN_NOTICE("You notice faint black residue on \the [A].")) - else - to_chat(src, SPAN_NOTICE("You notice a faint acrid smell coming from \the [A].")) - else if(isrobot(src)) - to_chat(src, SPAN_NOTICE("You notice faint black residue on \the [A].")) - else - to_chat(src, SPAN_NOTICE("You notice a faint acrid smell coming from \the [A].")) - clue = 1 - //Noticing wiped blood is a bit harder - if((get_skill_value(SKILL_FORENSICS) >= SKILL_PROF) && LAZYLEN(A.blood_DNA)) - to_chat(src, SPAN_WARNING("You notice faint blood traces on \The [A].")) - clue = 1 - if(clue && has_client_color(/datum/client_color/noir)) - playsound_local(null, pick('sound/effects/clue1.ogg','sound/effects/clue2.ogg'), 60, is_global = TRUE) diff --git a/code/modules/detectivework/microscope/dnascanner.dm b/code/modules/detectivework/microscope/dnascanner.dm deleted file mode 100644 index 00ab5eeeedbce..0000000000000 --- a/code/modules/detectivework/microscope/dnascanner.dm +++ /dev/null @@ -1,153 +0,0 @@ -//DNA machine -/obj/machinery/dnaforensics - name = "DNA analyzer" - desc = "A high tech machine that is designed to read DNA samples properly." - icon = 'icons/obj/forensics.dmi' - icon_state = "dnaopen" - anchored = TRUE - density = TRUE - - var/obj/item/forensics/swab/bloodsamp = null - var/closed = 0 - var/scanning = 0 - var/scanner_progress = 0 - var/scanner_rate = 2.50 - var/last_process_worldtime = 0 - var/report_num = 0 - -/obj/machinery/dnaforensics/attackby(var/obj/item/W, mob/user as mob) - - if(bloodsamp) - to_chat(user, "There is already a sample in the machine.") - return - - if(closed) - to_chat(user, "Open the cover before inserting the sample.") - return - - var/obj/item/forensics/swab/swab = W - if(istype(swab) && swab.is_used()) - if(!user.unEquip(W, src)) - return - src.bloodsamp = swab - to_chat(user, "You insert \the [W] into \the [src].") - else - to_chat(user, "\The [src] only accepts used swabs.") - return - -/obj/machinery/dnaforensics/ui_interact(mob/user, ui_key = "main",var/datum/nanoui/ui = null) - if(stat & (NOPOWER)) return - if(user.stat || user.restrained()) return - var/list/data = list() - data["scan_progress"] = round(scanner_progress) - data["scanning"] = scanning - data["bloodsamp"] = (bloodsamp ? bloodsamp.name : "") - data["bloodsamp_desc"] = (bloodsamp ? (bloodsamp.desc ? bloodsamp.desc : "No information on record.") : "") - data["lidstate"] = closed - - ui = SSnano.try_update_ui(user, src, ui_key, ui, data) - if (!ui) - ui = new(user, src, ui_key, "dnaforensics.tmpl", "QuikScan DNA Analyzer", 540, 326) - ui.set_initial_data(data) - ui.open() - ui.set_auto_update(1) - -/obj/machinery/dnaforensics/Topic(href, href_list) - - if(..()) return 1 - - if(stat & (NOPOWER)) - return 0 // don't update UIs attached to this object - - if(href_list["scanItem"]) - if(scanning) - scanning = 0 - else - if(bloodsamp) - if(closed == 1) - scanner_progress = 0 - scanning = 1 - to_chat(usr, "Scan initiated.") - update_icon() - else - to_chat(usr, "Please close sample lid before initiating scan.") - else - to_chat(usr, "Insert an item to scan.") - - if(href_list["ejectItem"]) - if(bloodsamp) - bloodsamp.forceMove(src.loc) - bloodsamp = null - - if(href_list["toggleLid"]) - toggle_lid() - - return 1 - -/obj/machinery/dnaforensics/Process() - if(scanning) - if(!bloodsamp || bloodsamp.loc != src) - bloodsamp = null - scanning = 0 - else if(scanner_progress >= 100) - complete_scan() - return - else - //calculate time difference - var/deltaT = (world.time - last_process_worldtime) * 0.1 - scanner_progress = min(100, scanner_progress + scanner_rate * deltaT) - last_process_worldtime = world.time - -/obj/machinery/dnaforensics/proc/complete_scan() - src.visible_message("[icon2html(src, viewers(get_turf(src)))] makes an insistent chime.", 2) - update_icon() - if(bloodsamp) - var/obj/item/paper/P = new(src) - P.SetName("[src] report #[++report_num]: [bloodsamp.name]") - P.stamped = list(/obj/item/stamp) - P.overlays = list("paper_stamped") - //dna data itself - var/data = "No scan information available." - if(bloodsamp.dna != null || bloodsamp.trace_dna != null) - data = "Spectometric analysis on provided sample has determined the presence of DNA.

              " - for(var/blood in bloodsamp.dna) - data += "Blood type: [bloodsamp.dna[blood]]
              DNA: [blood]


              " - for(var/trace in bloodsamp.trace_dna) - data += "Trace DNA: [trace]

              " - else - data += "No DNA found.
              " - P.info = "[src] analysis report #[report_num]
              " - P.info += "Scanned item:
              [bloodsamp.name]
              [bloodsamp.desc]

              " + data - P.forceMove(src.loc) - P.update_icon() - scanning = 0 - update_icon() - return - -/obj/machinery/dnaforensics/interface_interact(mob/user) - ui_interact(user) - return TRUE - -/obj/machinery/dnaforensics/verb/toggle_lid() - set category = "Object" - set name = "Toggle Lid" - set src in oview(1) - - if(usr.stat || !isliving(usr)) - return - - if(scanning) - to_chat(usr, "You can't do that while [src] is scanning!") - return - - closed = !closed - src.update_icon() - -/obj/machinery/dnaforensics/on_update_icon() - ..() - if(!(stat & NOPOWER) && scanning) - icon_state = "dnaworking" - else if(closed) - icon_state = "dnaclosed" - else - icon_state = "dnaopen" diff --git a/code/modules/detectivework/microscope/microscope.dm b/code/modules/detectivework/microscope/microscope.dm deleted file mode 100644 index e350abe8c9a30..0000000000000 --- a/code/modules/detectivework/microscope/microscope.dm +++ /dev/null @@ -1,144 +0,0 @@ -//microscope code itself -/obj/machinery/microscope - name = "high powered electron microscope" - desc = "A highly advanced microscope capable of zooming up to 3000x." - icon = 'icons/obj/forensics.dmi' - icon_state = "microscope" - anchored = TRUE - density = TRUE - - var/obj/item/sample = null - var/report_num = 0 - -/obj/machinery/microscope/Destroy() - if(sample) - sample.dropInto(loc) - ..() - -/obj/machinery/microscope/attackby(obj/item/W, mob/user) - - if(sample) - to_chat(user, "There is already a slide in the microscope.") - return - - if(istype(W)) - if(istype(W, /obj/item/evidencebag)) - var/obj/item/evidencebag/B = W - if(B.stored_item) - to_chat(user, "You insert \the [B.stored_item] from \the [B] into the microscope.") - B.stored_item.forceMove(src) - sample = B.stored_item - B.empty() - return - if(!user.unEquip(W, src)) - return - to_chat(user, "You insert \the [W] into the microscope.") - sample = W - update_icon() - -/obj/machinery/microscope/physical_attack_hand(mob/user) - . = TRUE - if(!sample) - to_chat(user, "The microscope has no sample to examine.") - return - - to_chat(user, "The microscope whirrs as you examine \the [sample].") - - if(!user.do_skilled(2.5 SECONDS, SKILL_FORENSICS, src) || !sample) - to_chat(user, "You stop examining \the [sample].") - return - - if(!user.skill_check(SKILL_FORENSICS, SKILL_ADEPT)) - to_chat(user, "You can't figure out what it means...") - return - - to_chat(user, "Printing findings now...") - var/obj/item/paper/report = new(get_turf(src)) - report.stamped = list(/obj/item/stamp) - report.overlays = list("paper_stamped") - report_num++ - - var/list/evidence = list() - var/scaned_object = sample.name - if(istype(sample, /obj/item/forensics/swab)) - var/obj/item/forensics/swab/swab = sample - evidence["gunshot_residue"] = swab.gunshot_residue_sample.Copy() - else if(istype(sample, /obj/item/sample/fibers)) - var/obj/item/sample/fibers/fibers = sample - scaned_object = fibers.object - evidence["fibers"] = fibers.evidence.Copy() - else if(istype(sample, /obj/item/sample/print)) - var/obj/item/sample/print/card = sample - scaned_object = card.object ? card.object : card.name - evidence["prints"] = card.evidence.Copy() - else - if(sample.fingerprints) - evidence["prints"] = sample.fingerprints.Copy() - if(sample.suit_fibers) - evidence["fibers"] = sample.suit_fibers.Copy() - if(sample.gunshot_residue) - evidence["gunshot_residue"] = sample.gunshot_residue.Copy() - - report.SetName("Forensic report #[++report_num]: [sample.name]") - report.info = "Scanned item:
              [scaned_object]

              " - if("gunshot_residue" in evidence) - report.info += "Gunpowder residue analysis report #[report_num]: [scaned_object]
              " - if(LAZYLEN(evidence["gunshot_residue"])) - report.info += "Residue from the following bullets detected:" - for(var/residue in evidence["gunshot_residue"]) - report.info += "[residue]

              " - else - report.info += "No gunpowder residue found." - if("fibers" in evidence) - if(LAZYLEN(evidence["fibers"])) - report.info += "Molecular analysis on provided sample has determined the presence of unique fiber strings.

              " - for(var/fiber in evidence["fibers"]) - report.info += "Most likely match for fibers: [fiber]

              " - else - report.info += "No fibers found." - if("prints" in evidence) - report.info += "Fingerprint analysis report: [scaned_object]
              " - if(LAZYLEN(evidence["prints"])) - report.info += "Surface analysis has determined unique fingerprint strings:

              " - for(var/prints in evidence["prints"]) - report.info += "Fingerprint string: " - if(!is_complete_print(evidence["prints"][prints])) - report.info += "INCOMPLETE PRINT" - else - report.info += "[prints]" - report.info += "
              " - else - report.info += "No information available." - - if(report) - report.update_icon() - if(report.info) - to_chat(user, report.info) - return - -/obj/machinery/microscope/proc/remove_sample(var/mob/living/remover) - if(!istype(remover) || remover.incapacitated() || !Adjacent(remover)) - return - if(!sample) - to_chat(remover, "\The [src] does not have a sample in it.") - return - to_chat(remover, "You remove \the [sample] from \the [src].") - remover.put_in_hands(sample) - sample = null - update_icon() - -/obj/machinery/microscope/AltClick() - remove_sample(usr) - -/obj/machinery/microscope/MouseDrop(var/atom/other) - if(usr == other) - remove_sample(usr) - else - return ..() - -/obj/machinery/microscope/on_update_icon() - icon_state = "microscope" - if(stat & NOPOWER) - icon_state += "_unpowered" - if(sample) - icon_state += "_slide" diff --git a/code/modules/detectivework/tools/crimekit.dm b/code/modules/detectivework/tools/crimekit.dm deleted file mode 100644 index 76ee7167d3f3c..0000000000000 --- a/code/modules/detectivework/tools/crimekit.dm +++ /dev/null @@ -1,38 +0,0 @@ -//crime scene kit -/obj/item/storage/briefcase/crimekit - name = "crime scene kit" - desc = "A stainless steel-plated carrycase for all your forensic needs. Feels heavy." - icon = 'icons/obj/forensics.dmi' - icon_state = "case" - item_state = "case" - startswith = list( - /obj/item/storage/box/swabs, - /obj/item/storage/box/fingerprints, - /obj/item/reagent_containers/spray/luminol, - /obj/item/device/uv_light, - /obj/item/forensics/sample_kit, - /obj/item/forensics/sample_kit/powder, - /obj/item/storage/csi_markers - ) - can_hold = list( - /obj/item/storage/box/swabs, - /obj/item/storage/box/fingerprints, - /obj/item/reagent_containers/spray/luminol, - /obj/item/device/uv_light, - /obj/item/reagent_containers/syringe, - /obj/item/forensics/swab, - /obj/item/sample/print, - /obj/item/sample/fibers, - /obj/item/device/taperecorder, - /obj/item/device/tape, - /obj/item/clothing/gloves/latex, - /obj/item/clothing/gloves/forensic, - /obj/item/folder, - /obj/item/paper, - /obj/item/forensics/sample_kit, - /obj/item/device/camera, - /obj/item/device/taperecorder, - /obj/item/device/tape, - /obj/item/storage/csi_markers, - /obj/item/device/scanner - ) diff --git a/code/modules/detectivework/tools/evidencebag.dm b/code/modules/detectivework/tools/evidencebag.dm deleted file mode 100644 index 46b09edf1c847..0000000000000 --- a/code/modules/detectivework/tools/evidencebag.dm +++ /dev/null @@ -1,101 +0,0 @@ -//CONTAINS: Evidence bags and fingerprint cards - -/obj/item/evidencebag - name = "evidence bag" - desc = "An empty evidence bag." - icon = 'icons/obj/storage.dmi' - icon_state = "evidenceobj" - item_state = "" - w_class = ITEM_SIZE_SMALL - var/obj/item/stored_item = null - -/obj/item/evidencebag/MouseDrop(obj/item/I) - if (!ishuman(usr) || !istype(I)) - return - - var/mob/living/carbon/human/user = usr - - if (!(user.l_hand == src || user.r_hand == src)) - return //bag must be in your hands to use - - if (isturf(I.loc)) - if (!user.Adjacent(I)) - return - - if(!istype(I) || I.anchored) - return - - if(istype(I, /obj/item/evidencebag)) - to_chat(user, "You find putting an evidence bag in another evidence bag to be slightly absurd.") - return - - if(I.w_class > ITEM_SIZE_NORMAL) - to_chat(user, "[I] won't fit in [src].") - return - - if(stored_item) - to_chat(user, "[src] already has something inside it.") - return - - else - //If it isn't on the floor. Do some checks to see if it's in our hands or a box. Otherwise give up. - if(istype(I.loc,/obj/item/storage)) //in a container. - var/sdepth = I.storage_depth(user) - if (sdepth == -1 || sdepth > 1) - return //too deeply nested to access - - var/obj/item/storage/U = I.loc - user.client.screen -= I - U.contents.Remove(I) - else if(user.l_hand == I) //in a hand - user.drop_l_hand() - else if(user.r_hand == I) //in a hand - user.drop_r_hand() - - user.visible_message("[user] puts [I] into [src]", "You put [I] inside [src].",\ - "You hear a rustle as someone puts something into a plastic bag.") - if(!user.skill_check(SKILL_FORENSICS, SKILL_BASIC)) - I.add_fingerprint(user) - I.forceMove(src) - stored_item = I - w_class = I.w_class - update_icon() - -/obj/item/evidencebag/on_update_icon() - underlays.Cut() - if(stored_item) - icon_state = "evidence" - desc = "An evidence bag containing \a [stored_item]." - var/mutable_appearance/MA = new(stored_item) - MA.pixel_x = 0 - MA.pixel_y = 0 - MA.pixel_z = 0 - var/image/I = new - I.appearance = MA - I.plane = FLOAT_PLANE - I.layer = FLOAT_LAYER - underlays += I - else - icon_state = "evidenceobj" - desc = "An empty evidence bag." - -/obj/item/evidencebag/attack_self(mob/user) - if(stored_item) - user.visible_message("[user] takes [stored_item] out of [src]", "You take [stored_item] out of [src].",\ - "You hear someone rustle around in a plastic bag, and remove something.") - - user.put_in_hands(stored_item) - empty() - else - to_chat(user, "[src] is empty.") - update_icon() - -/obj/item/evidencebag/proc/empty() - stored_item = null - w_class = initial(w_class) - update_icon() - -/obj/item/evidencebag/examine(mob/user) - . = ..() - if (stored_item) - user.examinate(stored_item) diff --git a/code/modules/detectivework/tools/luminol.dm b/code/modules/detectivework/tools/luminol.dm deleted file mode 100644 index 1679919b95fc0..0000000000000 --- a/code/modules/detectivework/tools/luminol.dm +++ /dev/null @@ -1,13 +0,0 @@ -/obj/item/reagent_containers/spray/luminol - name = "luminol bottle" - desc = "A bottle containing an odourless, colorless liquid." - icon = 'icons/obj/forensics.dmi' - icon_state = "luminol" - item_state = "cleaner" - amount_per_transfer_from_this = 10 - possible_transfer_amounts = "5;10" - volume = 250 - -/obj/item/reagent_containers/spray/luminol/New() - ..() - reagents.add_reagent(/datum/reagent/luminol, 250) \ No newline at end of file diff --git a/code/modules/detectivework/tools/rag.dm b/code/modules/detectivework/tools/rag.dm deleted file mode 100644 index 7382dc967e5ab..0000000000000 --- a/code/modules/detectivework/tools/rag.dm +++ /dev/null @@ -1,279 +0,0 @@ -/mob - var/bloody_hands = null - var/mob/living/carbon/human/bloody_hands_mob - var/track_blood = 0 - var/list/feet_blood_DNA - var/track_blood_type - var/feet_blood_color - -/obj/item/clothing/gloves - var/transfer_blood = 0 - var/mob/living/carbon/human/bloody_hands_mob - -/obj/item/clothing/shoes - var/track_blood = 0 - -/obj/item/reagent_containers/glass/rag - name = "rag" - desc = "For cleaning up messes, you suppose." - w_class = ITEM_SIZE_TINY - icon = 'icons/obj/toy.dmi' - icon_state = "rag" - amount_per_transfer_from_this = 5 - possible_transfer_amounts = "5" - volume = 10 - can_be_placed_into = null - item_flags = ITEM_FLAG_NO_BLUDGEON - atom_flags = ATOM_FLAG_OPEN_CONTAINER - unacidable = FALSE - - var/on_fire = 0 - var/burn_time = 20 //if the rag burns for too long it turns to ashes - -/obj/item/reagent_containers/glass/rag/New() - ..() - update_name() - -/obj/item/reagent_containers/glass/rag/Destroy() - STOP_PROCESSING(SSobj, src) //so we don't continue turning to ash while gc'd - . = ..() - -/obj/item/reagent_containers/glass/rag/attack_self(mob/user as mob) - if(on_fire && user.unEquip(src)) - user.visible_message("\The [user] stamps out [src].", "You stamp out [src].") - extinguish() - else - remove_contents(user) - -/obj/item/reagent_containers/glass/rag/attackby(obj/item/W, mob/user) - if(!on_fire && isflamesource(W)) - ignite() - if(on_fire) - user.visible_message( - SPAN_WARNING("\The [user] lights \the [src] with \the [W]!"), - SPAN_DANGER("You light \the [src]!") - ) - else - to_chat(user, SPAN_WARNING("You manage to singe \the [src], but it won't burn on its own.")) // Give a hint about needing fuel - - . = ..() - update_name() - -/obj/item/reagent_containers/glass/rag/proc/update_name() - if(on_fire) - SetName("burning [initial(name)]") - else if(reagents.total_volume) - SetName("damp [initial(name)]") - else - SetName("dry [initial(name)]") - -/obj/item/reagent_containers/glass/rag/on_update_icon() - if(on_fire) - icon_state = "raglit" - else - icon_state = "rag" - - var/obj/item/reagent_containers/food/drinks/bottle/B = loc - if(istype(B)) - B.update_icon() - -/obj/item/reagent_containers/glass/rag/proc/remove_contents(mob/user, atom/trans_dest = null) - if(!trans_dest && !user.loc) - return - - if(reagents.total_volume) - var/atom/target = trans_dest ? trans_dest : user.loc - user.visible_message( - SPAN_DANGER("\The [user] begins to wring out \the [src] over \the [target]."), - SPAN_NOTICE("You begin to wring out \the [src] over \the [target].") - ) - - if (do_after(user, reagents.total_volume * 5, target, DO_PUBLIC_UNIQUE)) //50 for a fully soaked rag - if(trans_dest) - reagents.trans_to(trans_dest, reagents.total_volume) - else - reagents.splash(user.loc, reagents.total_volume) - user.visible_message( - SPAN_DANGER("\The [user] wrings out \the [src] over [target]."), - SPAN_NOTICE("You finish to wringing out \the [src].") - ) - update_name() - -/obj/item/reagent_containers/glass/rag/proc/wipe_down(atom/A, mob/user) - if(!reagents.total_volume) - to_chat(user, "The [initial(name)] is dry!") - else - user.visible_message("\The [user] starts to wipe down [A] with [src]!") - reagents.splash(A, 1) //get a small amount of liquid on the thing we're wiping. - update_name() - if (do_after(user, 3 SECONDS, A, DO_PUBLIC_UNIQUE)) - user.visible_message("\The [user] finishes wiping off the [A]!") - if(isturf(A)) - var/turf/T = A - T.clean(src, user) - else - A.clean_blood() - -/obj/item/reagent_containers/glass/rag/attack(atom/target as obj|turf|area, mob/user as mob , flag) - if(isliving(target)) - var/mob/living/M = target - if(on_fire) - if (user.a_intent == I_HELP) - return FALSE - user.visible_message( - SPAN_DANGER("\The [user] hits \the [target] with \the [src]!"), - SPAN_DANGER("You hit \the [target] with \the [src]!") - ) - user.do_attack_animation(src) - admin_attack_log(user, M, "used \the [src] (ignited) to attack", "was attacked using \the [src] (ignited)", "attacked with \the [src] (ignited)") - M.IgniteMob() - else if (reagents.total_volume) - if (iscarbon(target) && user.a_intent == I_HELP && flag == BP_HEAD) - var/mob/living/carbon/C = target - var/obj/item/organ/external/head/H = C.organs_by_name[BP_HEAD] - if (istype(H) && H.forehead_graffiti) - var/datum/reagent/R = /datum/reagent/acetone - var/wash_amount = 5 - if (reagents.has_reagent(R, wash_amount)) - H.forehead_graffiti = null - reagents.remove_reagent(R, wash_amount) - if (user == target) - var/datum/gender/G = gender_datums[M.get_gender()] - user.visible_message(SPAN_NOTICE("\The [user] scrubs the ink off [G.his] forehead."), SPAN_NOTICE("You scrub the ink off your forehead.")) - else - user.visible_message(SPAN_NOTICE("\The [user] scrubs the ink off \the [M]'s forehead."), SPAN_NOTICE("You scrub the ink off \the [M]'s forehead.")) - else - to_chat(user, SPAN_WARNING("You need to wet the rag with [wash_amount] units of [initial(R.name)] to get the ink off!")) - return - - if(user.zone_sel.selecting == BP_MOUTH) - if (!M.has_danger_grab(user)) - to_chat(user, SPAN_WARNING("You need to have a firm grip on \the [target] before you can use \the [src] on them!")) - return - - user.do_attack_animation(src) - user.visible_message( - SPAN_DANGER("\The [user] brings \the [src] up to \the [target]'s mouth!"), - SPAN_DANGER("You bring \the [src] up to \the [target]'s mouth!"), - SPAN_WARNING("You hear some struggling and muffled cries of surprise") - ) - - var/grab_time = 6 SECONDS - if (user.skill_check(SKILL_COMBAT, SKILL_ADEPT)) - grab_time = 3 SECONDS - - if (do_after(user, grab_time, target, DO_PUBLIC_UNIQUE)) - user.visible_message( - SPAN_DANGER("\The [user] smothers \the [target] with \the [src]!"), - SPAN_DANGER("You smother \the [target] with \the [src]!") - ) - //it's inhaled, so... maybe CHEM_BLOOD doesn't make a whole lot of sense but it's the best we can do for now - var/trans_amt = reagents.trans_to_mob(target, amount_per_transfer_from_this, CHEM_BLOOD) - if (reagents.should_admin_log()) - var/contained_reagents = reagents.get_reagents() - admin_inject_log(user, M, src, contained_reagents, trans_amt) - update_name() - else - wipe_down(target, user) - else if (user.zone_sel.selecting == BP_MOUTH) - to_chat(user, SPAN_WARNING("\The [src] is too dry to use on \the [target]!")) - return - return - - return ..() - -/obj/item/reagent_containers/glass/rag/afterattack(atom/A as obj|turf|area, mob/user as mob, proximity) - if(!proximity) - return - - if(istype(A, /obj/structure/reagent_dispensers)) - if(!reagents.get_free_space()) - to_chat(user, "\The [src] is already soaked.") - return - - if(A.reagents && A.reagents.trans_to_obj(src, reagents.maximum_volume)) - user.visible_message("\The [user] soaks [src] using [A].", "You soak [src] using [A].") - update_name() - return - - if(!on_fire && istype(A) && (src in user)) - if(A.is_open_container() && !(A in user)) - remove_contents(user, A) - else if(!ismob(A)) //mobs are handled in attack() - this prevents us from wiping down people while smothering them. - wipe_down(A, user) - return - -/obj/item/reagent_containers/glass/rag/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume) - if(exposed_temperature >= 50 + T0C) - ignite() - if(exposed_temperature >= 900 + T0C) - new /obj/effect/decal/cleanable/ash(get_turf(src)) - qdel(src) - - -/obj/item/reagent_containers/glass/rag/proc/can_ignite() - var/fuel = 0 - for (var/datum/reagent/R as anything in reagents?.reagent_list) - if (R.gas_flags & XGM_GAS_FUEL) - fuel += R.volume - fuel += R.accelerant_quality * R.volume - return (fuel >= 2 && fuel >= reagents?.total_volume * 0.8) - - -/obj/item/reagent_containers/glass/rag/proc/ignite() - if(on_fire) - return - if(!can_ignite()) - return - - //also copied from matches - if(reagents.get_reagent_amount(/datum/reagent/toxin/phoron)) // the phoron explodes when exposed to fire - visible_message("\The [src] conflagrates violently!") - var/datum/effect/effect/system/reagents_explosion/e = new() - e.set_up(round(reagents.get_reagent_amount(/datum/reagent/toxin/phoron) / 2.5, 1), get_turf(src), 0, 0) - e.start() - qdel(src) - return - - START_PROCESSING(SSobj, src) - set_light(0.5, 0.1, 2, 2, "#e38f46") - on_fire = 1 - update_name() - update_icon() - -/obj/item/reagent_containers/glass/rag/proc/extinguish() - STOP_PROCESSING(SSobj, src) - set_light(0) - on_fire = 0 - - //rags sitting around with 1 second of burn time left is dumb. - //ensures players always have a few seconds of burn time left when they light their rag - if(burn_time <= 5) - visible_message("\The [src] falls apart!") - new /obj/effect/decal/cleanable/ash(get_turf(src)) - qdel(src) - update_name() - update_icon() - -/obj/item/reagent_containers/glass/rag/Process() - if(!can_ignite()) - visible_message("\The [src] burns out.") - extinguish() - - //copied from matches - if(isliving(loc)) - var/mob/living/M = loc - M.IgniteMob() - var/turf/location = get_turf(src) - if(location) - location.hotspot_expose(700, 5) - - if(burn_time <= 0) - STOP_PROCESSING(SSobj, src) - new /obj/effect/decal/cleanable/ash(location) - qdel(src) - return - - reagents.remove_reagent(/datum/reagent/fuel, reagents.maximum_volume/25) - update_name() - burn_time-- diff --git a/code/modules/detectivework/tools/sample_kits.dm b/code/modules/detectivework/tools/sample_kits.dm deleted file mode 100644 index 0cf3827da9b0d..0000000000000 --- a/code/modules/detectivework/tools/sample_kits.dm +++ /dev/null @@ -1,183 +0,0 @@ -/obj/item/sample - name = "forensic sample" - icon = 'icons/obj/forensics.dmi' - item_flags = ITEM_FLAG_NO_PRINT - w_class = ITEM_SIZE_TINY - var/list/evidence = list() - var/object - -/obj/item/sample/New(var/newloc, var/atom/supplied) - ..(newloc) - if(supplied) - copy_evidence(supplied) - name = "[initial(name)] (\the [supplied])" - object = "[supplied], [get_area(supplied)]" - -/obj/item/sample/examine(mob/user, distance) - . = ..() - if(distance <= 1 && object) - to_chat(user, "The label says: '[object]'") - -/obj/item/sample/print/New(var/newloc, var/atom/supplied) - ..(newloc, supplied) - if(evidence && evidence.len) - icon_state = "fingerprint1" - -/obj/item/sample/proc/copy_evidence(var/atom/supplied) - if(supplied.suit_fibers && supplied.suit_fibers.len) - evidence = supplied.suit_fibers.Copy() - supplied.suit_fibers.Cut() - -/obj/item/sample/proc/merge_evidence(var/obj/item/sample/supplied, var/mob/user) - if(!supplied.evidence || !supplied.evidence.len) - return 0 - evidence |= supplied.evidence - SetName("[initial(name)] (combined)") - object = supplied.object + ", " + object - to_chat(user, "You transfer the contents of \the [supplied] into \the [src].") - return 1 - -/obj/item/sample/print/merge_evidence(var/obj/item/sample/supplied, var/mob/user) - if(!supplied.evidence || !supplied.evidence.len) - return 0 - for(var/print in supplied.evidence) - if(evidence[print]) - evidence[print] = stringmerge(evidence[print],supplied.evidence[print]) - else - evidence[print] = supplied.evidence[print] - SetName("[initial(name)] (combined)") - object = supplied.object + ", " + object - to_chat(user, "You overlay \the [src] and \the [supplied], combining the print records.") - return 1 - -/obj/item/sample/resolve_attackby(atom/A, mob/user, var/click_params) - // Fingerprints will be handled in after_attack() to not mess up the samples taken - return A.attackby(src, user, click_params) - -/obj/item/sample/attackby(var/obj/O, var/mob/user) - if(O.type == src.type) - if(user.unEquip(O) && merge_evidence(O, user)) - qdel(O) - return 1 - return ..() - -/obj/item/sample/fibers - name = "fiber bag" - desc = "Used to hold fiber evidence for the detective." - icon_state = "fiberbag" - -/obj/item/sample/print - name = "fingerprint card" - desc = "Records a set of fingerprints." - icon = 'icons/obj/card.dmi' - icon_state = "fingerprint0" - item_state = "paper" - -/obj/item/sample/print/attack_self(var/mob/user) - if(evidence && evidence.len) - return - if(!ishuman(user)) - return - var/mob/living/carbon/human/H = user - if(H.gloves) - to_chat(user, "Take \the [H.gloves] off first.") - return - - to_chat(user, "You firmly press your fingertips onto the card.") - var/fullprint = H.get_full_print() - evidence[fullprint] = fullprint - SetName("[initial(name)] (\the [H])") - icon_state = "fingerprint1" - -/obj/item/sample/print/attack(var/mob/living/M, var/mob/user) - - if(!ishuman(M)) - return ..() - - if(evidence && evidence.len) - return 0 - - var/mob/living/carbon/human/H = M - - if(H.gloves) - to_chat(user, "\The [H] is wearing gloves.") - return 1 - - if(user != H && H.a_intent != I_HELP && !H.lying) - user.visible_message("\The [user] tries to take prints from \the [H], but they move away.") - return 1 - - if(user.zone_sel.selecting == BP_R_HAND || user.zone_sel.selecting == BP_L_HAND) - var/has_hand - var/obj/item/organ/external/O = H.organs_by_name[BP_R_HAND] - if(istype(O) && !O.is_stump()) - has_hand = 1 - else - O = H.organs_by_name[BP_L_HAND] - if(istype(O) && !O.is_stump()) - has_hand = 1 - if(!has_hand) - to_chat(user, "They don't have any hands.") - return 1 - user.visible_message("[user] takes a copy of \the [H]'s fingerprints.") - var/fullprint = H.get_full_print() - evidence[fullprint] = fullprint - copy_evidence(src) - SetName("[initial(name)] (\the [H])") - icon_state = "fingerprint1" - return 1 - return 0 - -/obj/item/sample/print/copy_evidence(var/atom/supplied) - if(supplied.fingerprints && supplied.fingerprints.len) - for(var/print in supplied.fingerprints) - evidence[print] = supplied.fingerprints[print] - supplied.fingerprints.Cut() - -/obj/item/forensics - item_flags = ITEM_FLAG_NO_PRINT - -/obj/item/forensics/sample_kit - name = "fiber collection kit" - desc = "A magnifying glass and tweezers. Used to lift suit fibers." - icon_state = "m_glass" - w_class = ITEM_SIZE_SMALL - var/evidence_type = "fiber" - var/evidence_path = /obj/item/sample/fibers - -/obj/item/forensics/sample_kit/proc/can_take_sample(var/mob/user, var/atom/supplied) - return (supplied.suit_fibers && supplied.suit_fibers.len) - -/obj/item/forensics/sample_kit/proc/take_sample(var/mob/user, var/atom/supplied) - var/obj/item/sample/S = new evidence_path(get_turf(user), supplied) - to_chat(user, "You transfer [S.evidence.len] [S.evidence.len > 1 ? "[evidence_type]s" : "[evidence_type]"] to \the [S].") - -/obj/item/forensics/sample_kit/resolve_attackby(atom/A, mob/user, click_params) - if (user.a_intent != I_HELP) // Prevents putting sample kits in bags, on racks/tables, etc when trying to take samples - return FALSE - - . = ..() - -/obj/item/forensics/sample_kit/afterattack(var/atom/A, var/mob/user, var/proximity) - if(!proximity) - return - if(user.skill_check(SKILL_FORENSICS, SKILL_ADEPT) && can_take_sample(user, A)) - take_sample(user,A) - . = 1 - else - to_chat(user, "You are unable to locate any [evidence_type]s on \the [A].") - . = ..() - -/obj/item/forensics/sample_kit/MouseDrop(atom/over) - if(ismob(src.loc) && CanMouseDrop(over)) - afterattack(over, usr, TRUE) - -/obj/item/forensics/sample_kit/powder - name = "fingerprint powder" - desc = "A jar containing alumiinum powder and a specialized brush." - icon_state = "dust" - evidence_type = "fingerprint" - evidence_path = /obj/item/sample/print - -/obj/item/forensics/sample_kit/powder/can_take_sample(var/mob/user, var/atom/supplied) - return (supplied.fingerprints && supplied.fingerprints.len) diff --git a/code/modules/detectivework/tools/scene_cards.dm b/code/modules/detectivework/tools/scene_cards.dm deleted file mode 100644 index 1a2cc6ae44da8..0000000000000 --- a/code/modules/detectivework/tools/scene_cards.dm +++ /dev/null @@ -1,52 +0,0 @@ -/obj/item/storage/csi_markers - name = "crime scene markers box" - desc = "A cardboard box for crime scene marker cards." - icon = 'icons/obj/forensics.dmi' - icon_state = "cards" - w_class = ITEM_SIZE_TINY - startswith = list( - /obj/item/csi_marker/n1 = 1, - /obj/item/csi_marker/n2 = 1, - /obj/item/csi_marker/n3 = 1, - /obj/item/csi_marker/n4 = 1, - /obj/item/csi_marker/n5 = 1, - /obj/item/csi_marker/n6 = 1, - /obj/item/csi_marker/n7 = 1 - ) - -/obj/item/storage/csi_markers/Initialize() - . = ..() - make_exact_fit() - -/obj/item/csi_marker - name = "crime scene marker" - desc = "Plastic cards used to mark points of interests on the scene. Just like in the holoshows!" - icon = 'icons/obj/forensics.dmi' - icon_state = "card1" - w_class = ITEM_SIZE_TINY - randpixel = 1 - layer = ABOVE_HUMAN_LAYER //so you can mark bodies - var/number = 1 - -/obj/item/csi_marker/Initialize(mapload) - . = ..() - desc += " This one is marked with [number]." - update_icon() - -/obj/item/csi_marker/on_update_icon() - icon_state = "card[clamp(number,1,7)]" - -/obj/item/csi_marker/n1 - number = 1 -/obj/item/csi_marker/n2 - number = 2 -/obj/item/csi_marker/n3 - number = 3 -/obj/item/csi_marker/n4 - number = 4 -/obj/item/csi_marker/n5 - number = 5 -/obj/item/csi_marker/n6 - number = 6 -/obj/item/csi_marker/n7 - number = 7 \ No newline at end of file diff --git a/code/modules/detectivework/tools/storage.dm b/code/modules/detectivework/tools/storage.dm deleted file mode 100644 index 38a7637c40501..0000000000000 --- a/code/modules/detectivework/tools/storage.dm +++ /dev/null @@ -1,18 +0,0 @@ -/obj/item/storage/box/swabs - name = "box of swab kits" - desc = "Sterilized equipment within. Do not contaminate." - icon = 'icons/obj/forensics.dmi' - icon_state = "dnakit" - startswith = list(/obj/item/forensics/swab = DEFAULT_BOX_STORAGE) - -/obj/item/storage/box/evidence - name = "evidence bag box" - desc = "A box claiming to contain evidence bags." - startswith = list(/obj/item/evidencebag = 7) - -/obj/item/storage/box/fingerprints - name = "box of fingerprint cards" - desc = "Sterilized equipment within. Do not contaminate." - icon = 'icons/obj/forensics.dmi' - icon_state = "dnakit" - startswith = list(/obj/item/sample/print = DEFAULT_BOX_STORAGE) diff --git a/code/modules/detectivework/tools/swabs.dm b/code/modules/detectivework/tools/swabs.dm deleted file mode 100644 index 77735b9a5f164..0000000000000 --- a/code/modules/detectivework/tools/swabs.dm +++ /dev/null @@ -1,152 +0,0 @@ -/obj/item/swabber - name = "swab kit" - desc = "A kit full of sterilized cotton swabs and vials used to take forensic samples." - icon = 'icons/obj/forensics.dmi' - icon_state = "swab" - -/obj/item/swabber/attack() - return 0 - -// This is pretty nasty but is a damn sight easier than trying to make swabs a stack item. -/obj/item/swabber/afterattack(var/atom/A, var/mob/user, var/proximity, var/params) - if(proximity) - var/obj/item/forensics/swab/swab = new(user) - var/resolved = swab.resolve_attackby(A, user, params) - if(!resolved && A && !QDELETED(A)) - swab.afterattack(A, user, TRUE, params) - if(swab.is_used()) - swab.dropInto(user.loc) - else - qdel(swab) - -/obj/item/forensics/swab - name = "swab" - desc = "A sterilized cotton swab and vial used to take forensic samples." - icon_state = "swab" - var/list/gunshot_residue_sample - var/list/dna - var/list/trace_dna - var/used - -/obj/item/forensics/swab/proc/is_used() - return used - -/obj/item/forensics/swab/attack(var/mob/living/M, var/mob/user) - - if(!ishuman(M)) - return ..() - - if(is_used()) - return - - var/mob/living/carbon/human/H = M - var/sample_type - - if(H.wear_mask) - to_chat(user, "\The [H] is wearing a mask.") - return - - if(!H.dna || !H.dna.unique_enzymes) - to_chat(user, "They don't seem to have DNA!") - return - - if(user != H && (H.a_intent != I_HELP && !H.lying && !H.incapacitated(INCAPACITATION_DEFAULT))) - user.visible_message("\The [user] tries to take a swab sample from \the [H], but they move away.") - return - - if(user.zone_sel.selecting == BP_MOUTH) - if(!H.organs_by_name[BP_HEAD]) - to_chat(user, "They don't have a head.") - return - if(!H.check_has_mouth()) - to_chat(user, "They don't have a mouth.") - return - user.visible_message("[user] swabs \the [H]'s mouth for a saliva sample.") - dna = list(H.dna.unique_enzymes) - sample_type = "DNA" - - else - var/zone = user.zone_sel.selecting - if(!H.has_organ(zone)) - to_chat(user, "They don't have that part!") - return - var/obj/item/organ/external/O = H.get_organ(zone) - if(!O.gunshot_residue) - return - var/obj/C = H.get_covering_equipped_item_by_zone(zone) - if(C) - afterattack(C, user, 1) //Lazy but this would work - return - user.visible_message("[user] swabs [H]'s [O.name] for a sample.") - sample_type = "gunshot_residue" - gunshot_residue_sample = O.gunshot_residue.Copy() - - if(sample_type) - set_used(sample_type, H) - return - return 1 - -/obj/item/forensics/swab/afterattack(var/atom/A, var/mob/user, var/proximity) - - if(!proximity || istype(A, /obj/machinery/dnaforensics)) - return - - if(is_used()) - to_chat(user, "This swab has already been used.") - return - - add_fingerprint(user) - - var/list/choices = list() - if(A.blood_DNA) - choices |= "Blood" - if(istype(A, /obj/item)) - choices |= "DNA traces" - if(istype(A, /obj/item/clothing)) - choices |= "Gunshot Residue" - - var/choice - if(!choices.len) - to_chat(user, "There is no evidence on \the [A].") - return - else if(choices.len == 1) - choice = choices[1] - else - choice = input("What kind of evidence are you looking for?","Evidence Collection") as null|anything in choices - - if(!choice) - return - - var/sample_type - if(choice == "Blood") - if(!A.blood_DNA || !A.blood_DNA.len) - to_chat(user, "There is no blood on \the [A].") - return - dna = A.blood_DNA.Copy() - sample_type = "blood" - - else if(choice == "Gunshot Residue") - var/obj/item/clothing/B = A - if(!istype(B) || !B.gunshot_residue) - to_chat(user, "There is no residue on \the [A].") - return - gunshot_residue_sample = B.gunshot_residue.Copy() - sample_type = "residue" - - else if(choice == "DNA traces") - var/obj/item/I = A - if(!istype(I) || !I.trace_DNA) - to_chat(user, "There is no non-blood DNA on \the [A].") - return - trace_dna = I.trace_DNA.Copy() - sample_type = "trace DNA" - - if(sample_type) - user.visible_message("\The [user] swabs \the [A] for a sample.", "You swab \the [A] for a sample.") - set_used(sample_type, A) - -/obj/item/forensics/swab/proc/set_used(var/sample_str, var/atom/source) - SetName("[initial(name)] ([sample_str] - [source])") - desc = "[initial(desc)] The label on the vial reads 'Sample of [sample_str] from [source].'." - icon_state = "swab_used" - used = 1 diff --git a/code/modules/detectivework/tools/uvlight.dm b/code/modules/detectivework/tools/uvlight.dm deleted file mode 100644 index 92e7cdf8d9ce7..0000000000000 --- a/code/modules/detectivework/tools/uvlight.dm +++ /dev/null @@ -1,71 +0,0 @@ -/obj/item/device/uv_light - name = "\improper UV light" - desc = "A small handheld black light." - icon = 'icons/obj/uv_light.dmi' - icon_state = "uv_off" - slot_flags = SLOT_BELT - w_class = ITEM_SIZE_SMALL - item_state = "electronic" - action_button_name = "Toggle UV light" - matter = list(MATERIAL_STEEL = 150) - origin_tech = list(TECH_MAGNET = 1, TECH_ENGINEERING = 1) - - var/list/scanned = list() - var/list/stored_alpha = list() - var/list/reset_objects = list() - - var/range = 3 - var/on = 0 - var/step_alpha = 50 - -/obj/item/device/uv_light/attack_self(var/mob/user) - on = !on - if(on) - set_light(0.5, 0.1, range, 2, "#007fff") - START_PROCESSING(SSobj, src) - icon_state = "uv_on" - else - set_light(0) - clear_last_scan() - STOP_PROCESSING(SSobj, src) - icon_state = "uv_off" - -/obj/item/device/uv_light/proc/clear_last_scan() - if(scanned.len) - for(var/atom/O in scanned) - O.set_invisibility(scanned[O]) - if(O.fluorescent == 2) O.fluorescent = 1 - scanned.Cut() - if(stored_alpha.len) - for(var/atom/O in stored_alpha) - O.alpha = stored_alpha[O] - if(O.fluorescent == 2) O.fluorescent = 1 - stored_alpha.Cut() - if(reset_objects.len) - for(var/obj/item/I in reset_objects) - I.overlays -= I.blood_overlay - if(I.fluorescent == 2) I.fluorescent = 1 - reset_objects.Cut() - -/obj/item/device/uv_light/Process() - clear_last_scan() - if(on) - step_alpha = round(255/range) - var/turf/origin = get_turf(src) - if(!origin) - return - for(var/turf/T in range(range, origin)) - var/use_alpha = 255 - (step_alpha * get_dist(origin, T)) - for(var/atom/A in T.contents) - if(A.fluorescent == 1) - A.fluorescent = 2 //To prevent light crosstalk. - if(A.invisibility) - scanned[A] = A.invisibility - A.set_invisibility(0) - stored_alpha[A] = A.alpha - A.alpha = use_alpha - if(istype(A, /obj/item)) - var/obj/item/O = A - if(O.was_bloodied && !(O.blood_overlay in O.overlays)) - O.overlays |= O.blood_overlay - reset_objects |= O diff --git a/code/modules/economy/ATM.dm b/code/modules/economy/ATM.dm deleted file mode 100644 index 17690ffbf34b4..0000000000000 --- a/code/modules/economy/ATM.dm +++ /dev/null @@ -1,451 +0,0 @@ -#define NO_SCREEN 0 -#define CHANGE_SECURITY_LEVEL 1 -#define TRANSFER_FUNDS 2 -#define VIEW_TRANSACTION_LOGS 3 - -/obj/item/card/id/var/money = 2000 - -/obj/machinery/atm - name = "automatic teller machine" - desc = "For all your monetary needs!" - icon = 'icons/obj/terminals.dmi' - icon_state = "atm" - anchored = TRUE - idle_power_usage = 10 - var/datum/money_account/authenticated_account - var/number_incorrect_tries = 0 - var/previous_account_number = 0 - var/max_pin_attempts = 3 - var/ticks_left_locked_down = 0 - var/ticks_left_timeout = 0 - var/machine_id = "" - var/obj/item/card/id/held_card - var/editing_security_level = 0 - var/view_screen = NO_SCREEN - var/datum/effect/effect/system/spark_spread/spark_system - var/account_security_level = 0 - -/obj/machinery/atm/New() - ..() - machine_id = "[station_name()] ATM #[num_financial_terminals++]" - spark_system = new /datum/effect/effect/system/spark_spread - spark_system.set_up(5, 0, src) - spark_system.attach(src) - -/obj/machinery/atm/Process() - if(stat & NOPOWER) - return - - if(ticks_left_timeout > 0) - ticks_left_timeout-- - if(ticks_left_timeout <= 0) - authenticated_account = null - if(ticks_left_locked_down > 0) - ticks_left_locked_down-- - if(ticks_left_locked_down <= 0) - number_incorrect_tries = 0 - - for(var/obj/item/spacecash/S in src) - S.dropInto(loc) - if(prob(50)) - playsound(loc, 'sound/items/polaroid1.ogg', 50, 1) - else - playsound(loc, 'sound/items/polaroid2.ogg', 50, 1) - break - -/obj/machinery/atm/emag_act(var/remaining_charges, var/mob/user) - if(!emagged) - //short out the machine, shoot sparks, spew money! - emagged = TRUE - spark_system.start() - spawn_money(rand(100,500),src.loc) - //we don't want to grief people by locking their id in an emagged ATM - release_held_id(user) - - //display a message to the user - var/response = pick("Initiating withdraw. Have a nice day!", "CRITICAL ERROR: Activating cash chamber panic siphon.","PIN Code accepted! Emptying account balance.", "Jackpot!") - to_chat(user, "[icon2html(src, user)] [src] beeps: \"[response]\"") - return 1 - -/obj/machinery/atm/attackby(obj/item/I as obj, mob/user as mob) - if(istype(I, /obj/item/card/id)) - if(emagged > 0) - //prevent inserting id into an emagged ATM - to_chat(user, "[icon2html(src, user)] CARD READER ERROR. This system has been compromised!") - return - if(stat & NOPOWER) - to_chat(user, "You try to insert your card into [src], but nothing happens.") - return - - var/obj/item/card/id/idcard = I - if(!held_card) - if(!user.unEquip(idcard, src)) - return - held_card = idcard - if(authenticated_account && held_card.associated_account_number != authenticated_account.account_number) - authenticated_account = null - attack_hand(user) - - else if(authenticated_account) - if(istype(I,/obj/item/spacecash)) - var/obj/item/spacecash/dolla = I - - //deposit the cash - if(authenticated_account.deposit(dolla.worth, "Credit deposit", machine_id)) - if(prob(50)) - playsound(loc, 'sound/items/polaroid1.ogg', 50, 1) - else - playsound(loc, 'sound/items/polaroid2.ogg', 50, 1) - - to_chat(user, "You insert [I] into [src].") - src.attack_hand(user) - qdel(I) - else - ..() - -/obj/machinery/atm/interface_interact(mob/user) - interact(user) - return TRUE - -/obj/machinery/atm/interact(mob/user) - - if(istype(user, /mob/living/silicon)) - to_chat(user, "[icon2html(src, user)] Artificial unit recognized. Artificial units do not currently receive monetary compensation, as per system banking regulation #1005.") - return - - if(get_dist(src,user) <= 1) - //make the window the user interacts with, divided out into welcome message, card 'slot', then login/data screen - var/list/t = list() - - if(authenticated_account) - t += "Welcome [authenticated_account.owner_name].
              " - else - t += "Welcome. Please login below.
              " - - t += "
              Card: " - if(emagged > 0) - t += "LOCKED
              Unauthorized terminal access detected!
              This ATM has been locked down.

              " - else - t += "[held_card ? held_card.name : "No card inserted"]

            • " - t += "
              " - if(ticks_left_locked_down > 0) - t += "Maximum number of pin attempts exceeded! Access to this ATM has been temporarily disabled.
              " - else if(authenticated_account) - if(authenticated_account.suspended) - t += "Access to this account has been suspended, and the funds within frozen.
              " - else - switch(view_screen) - if(CHANGE_SECURITY_LEVEL) - t += "Select a new security level for this account:

              " - if(authenticated_account.security_level != 0) - t += "Select Minimum Security
              " - else - t += "Minimum security set:
              " - t += "Either the account number or card is required to access this account. EFTPOS transactions will require a card and ask for a pin, but not verify the pin is correct.
              " - if(authenticated_account.security_level != 1) - t += "Select Moderate Security
              " - else - t += "Moderate Security set:
              " - t += "An account number and pin must be manually entered to access this account and process transactions.
              " - if(authenticated_account.security_level != 2) - t += "Select Maximum Security
              " - else - t += "Maximum security Set:
              " - t += "High - In addition to account number, a pin and a card is required to access this account and process transactions.

              " - if(VIEW_TRANSACTION_LOGS) - t += "Transaction logs
              " - t += "" - t += "" - t += "" - t += "" - t += "" - t += "" - t += "" - t += "" - t += "" - for(var/datum/transaction/T in authenticated_account.transaction_log) - t += "" - t += "" - t += "" - t += "" - t += "" - t += "" - t += "" - t += "" - t += "
              DateTimeTargetPurposeValueSource terminal ID
              [T.date][T.time][T.get_target_name()][T.purpose][GLOB.using_map.local_currency_name_short][T.amount][T.get_source_name()]
              " - t += "Print
              " - if(TRANSFER_FUNDS) - t += "Account balance: [GLOB.using_map.local_currency_name_short][authenticated_account.money]
              " - t += "
              " - t += "" - t += "" - t += "Target account number:
              " - t += "Funds to transfer:
              " - t += "Transaction purpose:
              " - t += "
              " - t += "
              " - else - t += "Account balance: [GLOB.using_map.local_currency_name_short][authenticated_account.money]" - t += "
              " - t += "" - t += " Cash Chargecard
              " - t += "" - t += "
              " - t += "Change account security level
              " - t += "Make transfer
              " - t += "View transaction log
              " - t += "Print balance statement
              " - - //Logout/back buttons, put here for some modularity and for less repeated code - if(view_screen == NO_SCREEN) - t += "Logout
              " - else - t += "Back" - - else - //change our display depending on account security levels - if(!account_security_level) - t += "To log in to your savings account, press 'submit' with ID clearly displayed. If you wish to log into another account, please enter the account number into the field below or insert a registered ID card into the slot above and then press 'submit'.
              " - else if (account_security_level == 1) - t += "This account requires a PIN to access. For security reasons the account # will need re-entered or ID bound to this account re-scanned." - else - t += "Due to the security settings on this account, all information needs to be re-entered and the ID bound to this account placed in the slot above.
              " - t += "
              " - t += "" - t += "" - t += "Account:

              " - //Leave the PIN field out of sight until needed - if(account_security_level) - t += "PIN:

              " - t += "
              " - t += "
              " - - - var/datum/browser/popup = new(user, "ATM", machine_id) - popup.set_content(jointext(t,null)) - popup.open() - else - return - -/obj/machinery/atm/Topic(var/href, var/href_list) - if((. = ..())) - return - if(href_list["choice"]) - switch(href_list["choice"]) - if("transfer") - if(authenticated_account) - var/transfer_amount = text2num(href_list["funds_amount"]) - transfer_amount = round(transfer_amount, 0.01) - if(transfer_amount <= 0) - alert("That is not a valid amount.") - else if(transfer_amount <= authenticated_account.money) - var/target_account_number = text2num(href_list["target_acc_number"]) - var/transfer_purpose = href_list["purpose"] - var/datum/money_account/target_account = get_account(target_account_number) - if(target_account && authenticated_account.transfer(target_account, transfer_amount, transfer_purpose)) - to_chat(usr, "[icon2html(src, usr)]Funds transfer successful.") - else - to_chat(usr, "[icon2html(src, usr)]Funds transfer failed.") - - else - to_chat(usr, "[icon2html(src, usr)]You don't have enough funds to do that!") - if("view_screen") - view_screen = text2num(href_list["view_screen"]) - if("change_security_level") - if(authenticated_account) - var/new_sec_level = max( min(text2num(href_list["new_security_level"]), 2), 0) - authenticated_account.security_level = new_sec_level - if("attempt_auth") - - //Look to see if we're holding an ID, if so scan the data from that and use it, if not scan the user for the data - var/obj/item/card/id/login_card - if(held_card) - login_card = held_card - else - login_card = scan_user(usr) - - if(!ticks_left_locked_down) - var/tried_account_num = text2num(href_list["account_num"]) - //We WILL need an account number entered manually if security is high enough, do not automagic account number - if(!tried_account_num && login_card && (account_security_level != 2)) - tried_account_num = login_card.associated_account_number - var/tried_pin = text2num(href_list["account_pin"]) - - //We'll need more information if an account's security is greater than zero so let's find out what the security setting is - var/datum/money_account/D - //Below is to avoid a runtime - if(tried_account_num) - D = get_account(tried_account_num) - - if(D) - account_security_level = D.security_level - - authenticated_account = attempt_account_access(tried_account_num, tried_pin, held_card && login_card.associated_account_number == tried_account_num ? 2 : 1) - - if(!authenticated_account) - number_incorrect_tries++ - //let's not count an incorrect try on someone who just needs to put in more information - if(previous_account_number == tried_account_num && tried_pin) - if(number_incorrect_tries >= max_pin_attempts) - //lock down the atm - ticks_left_locked_down = 30 - playsound(src, 'sound/machines/buzz-two.ogg', 50, 1) - - //create an entry in the account transaction log - var/datum/money_account/failed_account = get_account(tried_account_num) - if(failed_account) - failed_account.log_msg("Unauthorized login attempt", machine_id) - else - to_chat(usr, "[icon2html(src, usr)] Incorrect pin/account combination entered, [max_pin_attempts - number_incorrect_tries] attempts remaining.") - previous_account_number = tried_account_num - playsound(src, 'sound/machines/buzz-sigh.ogg', 50, 1) - else - to_chat(usr, "[icon2html(src, usr)] Unable to log in to account, additional information may be required.") - number_incorrect_tries = 0 - else - playsound(src, 'sound/machines/twobeep.ogg', 50, 1) - ticks_left_timeout = 120 - view_screen = NO_SCREEN - - //create a transaction log entry - authenticated_account.log_msg("Remote terminal access", machine_id) - - to_chat(usr, "[icon2html(src, usr)] Access granted. Welcome user '[authenticated_account.owner_name].'") - - previous_account_number = tried_account_num - if("e_withdrawal") - var/amount = max(text2num(href_list["funds_amount"]),0) - amount = round(amount, 0.01) - if(amount <= 0) - alert("That is not a valid amount.") - else if(authenticated_account && amount > 0) - //create an entry in the account transaction log - if(authenticated_account.withdraw(amount, "Credit withdrawal", machine_id)) - playsound(src, 'sound/machines/chime.ogg', 50, 1) - spawn_ewallet(amount,src.loc,usr) - else - to_chat(usr, "[icon2html(src, usr)]You don't have enough funds to do that!") - if("withdrawal") - var/amount = max(text2num(href_list["funds_amount"]),0) - amount = round(amount, 0.01) - if(amount <= 0) - alert("That is not a valid amount.") - else if(authenticated_account && amount > 0) - //remove the money - if(authenticated_account.withdraw(amount, "Credit withdrawal", machine_id)) - playsound(src, 'sound/machines/chime.ogg', 50, 1) - spawn_money(amount,src.loc,usr) - else - to_chat(usr, "[icon2html(src, usr)]You don't have enough funds to do that!") - if("balance_statement") - if(authenticated_account) - var/obj/item/paper/R = new(src.loc) - R.SetName("Account balance: [authenticated_account.owner_name]") - R.info = "Automated Teller Account Statement

              " - R.info += "Account holder: [authenticated_account.owner_name]
              " - R.info += "Account number: [authenticated_account.account_number]
              " - R.info += "Balance: [GLOB.using_map.local_currency_name_short][authenticated_account.money]
              " - R.info += "Date and time: [stationtime2text()], [stationdate2text()]

              " - R.info += "Service terminal ID: [machine_id]
              " - - //stamp the paper - var/image/stampoverlay = image('icons/obj/bureaucracy.dmi') - stampoverlay.icon_state = "paper_stamp-boss" - if(!R.stamped) - R.stamped = new - R.stamped += /obj/item/stamp - R.overlays += stampoverlay - R.stamps += "
              This paper has been stamped by the Automatic Teller Machine." - - if(prob(50)) - playsound(loc, 'sound/items/polaroid1.ogg', 50, 1) - else - playsound(loc, 'sound/items/polaroid2.ogg', 50, 1) - if ("print_transaction") - if(authenticated_account) - var/obj/item/paper/R = new(src.loc) - R.SetName("Transaction logs: [authenticated_account.owner_name]") - R.info = "Transaction logs
              " - R.info += "Account holder: [authenticated_account.owner_name]
              " - R.info += "Account number: [authenticated_account.account_number]
              " - R.info += "Date and time: [stationtime2text()], [stationdate2text()]

              " - R.info += "Service terminal ID: [machine_id]
              " - R.info += "" - R.info += "" - R.info += "" - R.info += "" - R.info += "" - R.info += "" - R.info += "" - R.info += "" - R.info += "" - for(var/datum/transaction/T in authenticated_account.transaction_log) - R.info += "" - R.info += "" - R.info += "" - R.info += "" - R.info += "" - R.info += "" - R.info += "" - R.info += "" - R.info += "
              DateTimeTargetPurposeValueSource terminal ID
              [T.date][T.time][T.get_target_name()][T.purpose][GLOB.using_map.local_currency_name_short][T.amount][T.get_source_name()]
              " - - //stamp the paper - var/image/stampoverlay = image('icons/obj/bureaucracy.dmi') - stampoverlay.icon_state = "paper_stamp-boss" - if(!R.stamped) - R.stamped = new - R.stamped += /obj/item/stamp - R.overlays += stampoverlay - R.stamps += "
              This paper has been stamped by the Automatic Teller Machine." - - if(prob(50)) - playsound(loc, 'sound/items/polaroid1.ogg', 50, 1) - else - playsound(loc, 'sound/items/polaroid2.ogg', 50, 1) - - if("insert_card") - if(!held_card) - //this might happen if the user had the browser window open when somebody emagged it - if(emagged > 0) - to_chat(usr, "[icon2html(src, usr)] The ATM card reader rejected your ID because this machine has been sabotaged!") - else - var/obj/item/I = usr.get_active_hand() - if (istype(I, /obj/item/card/id)) - if(!usr.unEquip(I, src)) - return - held_card = I - else - release_held_id(usr) - if("logout") - authenticated_account = null - account_security_level = 0 - - interact(usr) - -/obj/machinery/atm/proc/scan_user(mob/living/carbon/human/human_user as mob) - if(!authenticated_account) - var/obj/item/card/id/I = human_user.GetIdCard() - if(istype(I)) - return I - -// put the currently held id on the ground or in the hand of the user -/obj/machinery/atm/proc/release_held_id(mob/living/carbon/human/human_user as mob) - if(!held_card) - return - - held_card.dropInto(loc) - authenticated_account = null - account_security_level = 0 - - if(ishuman(human_user) && !human_user.get_active_hand()) - human_user.put_in_hands(held_card) - held_card = null - - -/obj/machinery/atm/proc/spawn_ewallet(var/sum, loc, mob/living/carbon/human/human_user as mob) - var/obj/item/spacecash/ewallet/E = new /obj/item/spacecash/ewallet(loc) - if(ishuman(human_user) && !human_user.get_active_hand()) - human_user.put_in_hands(E) - E.worth = sum - E.owner_name = authenticated_account.owner_name diff --git a/code/modules/economy/Accounts.dm b/code/modules/economy/Accounts.dm deleted file mode 100644 index ae31ed28f76bc..0000000000000 --- a/code/modules/economy/Accounts.dm +++ /dev/null @@ -1,103 +0,0 @@ -/datum/money_account - var/account_name = "" - var/owner_name = "" - var/account_number = 0 - var/remote_access_pin = 0 - var/money = 0 - var/list/transaction_log = list() - var/suspended = 0 - var/security_level = 0 //0 - auto-identify from worn ID, require only account number - //1 - require manual login / account number and pin - //2 - require card and manual login - var/account_type = ACCOUNT_TYPE_PERSONAL - -/datum/money_account/New(var/account_type) - account_type = account_type ? account_type : ACCOUNT_TYPE_PERSONAL - -// is_source inverts the amount. -/datum/money_account/proc/add_transaction(var/datum/transaction/T, is_source = FALSE) - money = max(is_source ? money - T.amount : money + T.amount, 0) - transaction_log += T - -/datum/money_account/proc/get_balance() - return money - -/datum/money_account/proc/log_msg(msg, machine_id) - var/datum/transaction/log/T = new(src, msg, machine_id) - return T.perform() - -/datum/money_account/proc/deposit(amount, purpose, machine_id) - var/datum/transaction/singular/T = new(src, machine_id, amount, purpose) - return T.perform() - -/datum/money_account/proc/withdraw(amount, purpose, machine_id) - var/datum/transaction/singular/T = new(src, machine_id, -amount, purpose) - return T.perform() - -/datum/money_account/proc/transfer(to_account, amount, purpose) - var/datum/transaction/T = new(src, to_account, amount, purpose) - return T.perform() - - -/proc/create_account(var/account_name = "Default account name", var/owner_name, var/starting_funds = 0, var/account_type = ACCOUNT_TYPE_PERSONAL, var/obj/machinery/computer/account_database/source_db) - - //create a new account - var/datum/money_account/M = new() - M.account_name = account_name - M.owner_name = (owner_name ? owner_name : account_name) - M.account_type = account_type - M.remote_access_pin = rand(1111, 111111) - - //create an entry in the account transaction log for when it was created - //note that using the deposit proc on the account isn't really feasible because we need to change the transaction data before performing it - var/datum/transaction/singular/T = new(M, (source_db ? source_db.machine_id : "NTGalaxyNet Terminal #[rand(111,1111)]"), starting_funds, "Account creation") - if(!source_db) - //set a random date, time and location some time over the past few decades - T.date = "[num2text(rand(1, 31))] [pick("January","February","March","April","May","June","July","August","September","October","November","December")], [GLOB.using_map.game_year-rand(8, 18)]" - T.time = "[rand(0,24)]:[rand(11,59)]" - - M.account_number = random_id("station_account_number", 111111, 999999) - else - M.account_number = next_account_number - next_account_number += rand(1,25) - - //create a sealed package containing the account details - var/obj/item/smallDelivery/P = new /obj/item/smallDelivery(source_db.loc) - - var/obj/item/paper/R = new /obj/item/paper(P) - P.wrapped = R - R.SetName("Account information: [M.account_name]") - R.info = "Account details (confidential)


              " - R.info += "Account holder: [M.owner_name]
              " - R.info += "Account number: [M.account_number]
              " - R.info += "Account pin: [M.remote_access_pin]
              " - R.info += "Starting balance: [GLOB.using_map.local_currency_name_short][M.money]
              " - R.info += "Date and time: [stationtime2text()], [stationdate2text()]

              " - R.info += "Creation terminal ID: [source_db.machine_id]
              " - R.info += "Authorised officer overseeing creation: [source_db.held_card.registered_name]
              " - - //stamp the paper - var/image/stampoverlay = image('icons/obj/bureaucracy.dmi') - stampoverlay.icon_state = "paper_stamp-boss" - if(!R.stamped) - R.stamped = new - R.stamped += /obj/item/stamp - R.overlays += stampoverlay - R.stamps += "
              This paper has been stamped by the Accounts Database." - - //add the account - T.perform() - all_money_accounts.Add(M) - - return M - -//this returns the first account datum that matches the supplied accnum/pin combination, it returns null if the combination did not match any account -/proc/attempt_account_access(var/attempt_account_number, var/attempt_pin_number, var/security_level_passed = 0) - var/datum/money_account/D = get_account(attempt_account_number) - if(D && D.security_level <= security_level_passed && (!D.security_level || D.remote_access_pin == attempt_pin_number) ) - return D - -/proc/get_account(var/account_number) - for(var/datum/money_account/D in all_money_accounts) - if(D.account_number == account_number) - return D diff --git a/code/modules/economy/Accounts_DB.dm b/code/modules/economy/Accounts_DB.dm deleted file mode 100644 index dfe502085e096..0000000000000 --- a/code/modules/economy/Accounts_DB.dm +++ /dev/null @@ -1,245 +0,0 @@ -/obj/machinery/computer/account_database - name = "accounts uplink terminal" - desc = "Access transaction logs, account data and all kinds of other financial records." - machine_name = "accounts uplink terminal" - machine_desc = "Displays financial records, account information, and all sorts of info for anything related to network banking accounts." - var/needed_access = list(list(access_hop, access_captain)) - var/receipt_num - var/machine_id = "" - var/obj/item/card/id/held_card - var/datum/money_account/detailed_account_view - var/creating_new_account = 0 - var/const/fund_cap = 1000000 - -/obj/machinery/computer/account_database/proc/get_access_level() - if (!held_card) - return 0 - if(access_cent_captain in held_card.access) - return 2 - else if(access_hop in held_card.access || (access_captain in held_card.access)) - return 1 - -/obj/machinery/computer/account_database/proc/accounting_letterhead(report_name) - return {" -

              [report_name]

              -
              [station_name()] Accounting Report
              -
              - Generated By: [held_card.registered_name], [held_card.assignment]
              - "} - -/obj/machinery/computer/account_database/New() - machine_id = "[station_name()] Acc. DB #[num_financial_terminals++]" - ..() - -/obj/machinery/computer/account_database/attackby(obj/O, mob/user) - if(!istype(O, /obj/item/card/id)) - return ..() - - if(!held_card) - if(!user.unEquip(O, src)) - return - held_card = O - - SSnano.update_uis(src) - - attack_hand(user) - -/obj/machinery/computer/account_database/interface_interact(mob/user) - ui_interact(user) - return TRUE - -/obj/machinery/computer/account_database/ui_interact(mob/user, ui_key="main", var/datum/nanoui/ui = null, var/force_open = 1) - user.set_machine(src) - - var/data[0] - data["src"] = "\ref[src]" - data["id_inserted"] = !!held_card - data["id_card"] = held_card ? text("[held_card.registered_name], [held_card.assignment]") : "-----" - data["access_level"] = has_access(needed_access, held_card && held_card.GetAccess()) - data["machine_id"] = machine_id - data["creating_new_account"] = creating_new_account - data["detailed_account_view"] = !!detailed_account_view - data["station_account_number"] = station_account.account_number - data["transactions"] = null - data["accounts"] = null - - if (detailed_account_view) - data["account_number"] = detailed_account_view.account_number - data["owner_name"] = detailed_account_view.owner_name - data["money"] = detailed_account_view.money - data["suspended"] = detailed_account_view.suspended - - var/list/trx[0] - for (var/datum/transaction/T in detailed_account_view.transaction_log) - trx.Add(list(list(\ - "date" = T.date, \ - "time" = T.time, \ - "target_name" = T.get_target_name(), \ - "purpose" = T.purpose, \ - "amount" = T.amount, \ - "source_terminal" = T.get_source_name()))) - - if (trx.len > 0) - data["transactions"] = trx - - var/list/accounts[0] - for(var/i=1, i<=all_money_accounts.len, i++) - var/datum/money_account/D = all_money_accounts[i] - accounts.Add(list(list(\ - "account_number"=D.account_number,\ - "owner_name"=D.owner_name,\ - "suspended"=D.suspended ? "SUSPENDED" : "",\ - "account_index"=i))) - - if (accounts.len > 0) - data["accounts"] = accounts - - ui = SSnano.try_update_ui(user, src, ui_key, ui, data, force_open) - if (!ui) - ui = new(user, src, ui_key, "accounts_terminal.tmpl", src.name, 400, 640) - ui.set_initial_data(data) - ui.open() - -/obj/machinery/computer/account_database/Topic(href, href_list) - if(..()) - return 1 - - var/datum/nanoui/ui = SSnano.get_open_ui(usr, src, "main") - - if(href_list["choice"]) - switch(href_list["choice"]) - if("create_account") - creating_new_account = 1 - - if("toggle_suspension") - if(detailed_account_view) - detailed_account_view.suspended = !detailed_account_view.suspended - callHook("change_account_status", list(detailed_account_view)) - - if("finalise_create_account") - var/account_name = href_list["holder_name"] - var/starting_funds = max(text2num(href_list["starting_funds"]), 0) - - starting_funds = clamp(starting_funds, 0, station_account.money) // Not authorized to put the station in debt. - starting_funds = min(starting_funds, fund_cap) // Not authorized to give more than the fund cap. - - var/datum/money_account/new_account = create_account("[account_name]'s Personal Account", account_name, starting_funds, ACCOUNT_TYPE_PERSONAL, src) - if(starting_funds > 0) - //subtract the money - station_account.money -= starting_funds - - //create a transaction log entry - new_account.deposit(starting_funds, "New account activation", machine_id) - - creating_new_account = 0 - ui.close() - - creating_new_account = 0 - if("insert_card") - if(held_card) - held_card.dropInto(loc) - - if(ishuman(usr) && !usr.get_active_hand()) - usr.put_in_hands(held_card) - held_card = null - - else - var/obj/item/I = usr.get_active_hand() - if (istype(I, /obj/item/card/id)) - if(!usr.unEquip(I, src)) - return - held_card = I - - if("view_account_detail") - var/index = text2num(href_list["account_index"]) - if(index && index <= all_money_accounts.len) - detailed_account_view = all_money_accounts[index] - - if("view_accounts_list") - detailed_account_view = null - creating_new_account = 0 - - if("revoke_payroll") - var/funds = detailed_account_view.money - detailed_account_view.transfer(station_account, funds, "Revocation of payroll") - - callHook("revoke_payroll", list(detailed_account_view)) - - if("print") - var/text - var/obj/item/paper/P = new(loc) - if (detailed_account_view) - P.SetName("account #[detailed_account_view.account_number] details") - var/title = "Account #[detailed_account_view.account_number] Details" - text = {" - [accounting_letterhead(title)] - Holder: [detailed_account_view.owner_name]
              - Balance: [GLOB.using_map.local_currency_name_short][detailed_account_view.money]
              - Status: [detailed_account_view.suspended ? "Suspended" : "Active"]
              - Transactions: ([detailed_account_view.transaction_log.len])
              - - - - - - - - - - - - "} - - for (var/datum/transaction/T in detailed_account_view.transaction_log) - text += {" - - - - - - - - "} - - text += {" - -
              TimestampTargetReasonValueTerminal
              [T.date] [T.time][T.get_target_name()][T.purpose][T.amount][T.get_source_name()]
              - "} - - else - P.SetName("financial account list") - text = {" - [accounting_letterhead("Financial Account List")] - - - - - - - - - - - - "} - - for(var/i=1, i<=all_money_accounts.len, i++) - var/datum/money_account/D = all_money_accounts[i] - text += {" - - - - - - - "} - - text += {" - -
              Account NumberHolderBalanceStatus
              #[D.account_number][D.owner_name][GLOB.using_map.local_currency_name_short][D.money][D.suspended ? "Suspended" : "Active"]
              - "} - - P.info = text - state("The terminal prints out a report.") - - return 1 diff --git a/code/modules/economy/EFTPOS.dm b/code/modules/economy/EFTPOS.dm deleted file mode 100644 index f5acaf9dc766e..0000000000000 --- a/code/modules/economy/EFTPOS.dm +++ /dev/null @@ -1,264 +0,0 @@ -/obj/item/device/eftpos - name = "\improper EFTPOS scanner" - desc = "Swipe your ID card to make purchases electronically." - icon = 'icons/obj/eftpos.dmi' - icon_state = "eftpos" - var/machine_id = "" - var/eftpos_name = "Default EFTPOS scanner" - var/transaction_locked = 0 - var/transaction_paid = 0 - var/transaction_amount = 0 - var/transaction_purpose = "Default charge" - var/access_code = 0 - var/datum/money_account/linked_account - -/obj/item/device/eftpos/New() - ..() - machine_id = "[station_name()] EFTPOS #[num_financial_terminals++]" - access_code = rand(1111,111111) - spawn(0) - print_reference() - - //create a short manual as well - var/obj/item/paper/R = new(src.loc) - R.SetName("Steps to success: Correct EFTPOS Usage") - /* - R.info += "When first setting up your EFTPOS device:" - R.info += "1. Memorise your EFTPOS command code (provided with all EFTPOS devices).
              " - R.info += "2. Confirm that your EFTPOS device is connected to your local accounts database. For additional assistance with this step, contact NanoTrasen IT Support
              " - R.info += "3. Confirm that your EFTPOS device has been linked to the account that you wish to recieve funds for all transactions processed on this device.
              " - R.info += "When starting a new transaction with your EFTPOS device:" - R.info += "1. Ensure the device is UNLOCKED so that new data may be entered.
              " - R.info += "2. Enter a sum of money and reference message for the new transaction.
              " - R.info += "3. Lock the transaction, it is now ready for your customer.
              " - R.info += "4. If at this stage you wish to modify or cancel your transaction, you may simply reset (unlock) your EFTPOS device.
              " - R.info += "5. Give your EFTPOS device to the customer, they must authenticate the transaction by swiping their ID card and entering their PIN number.
              " - R.info += "6. If done correctly, the transaction will be logged to both accounts with the reference you have entered, the terminal ID of your EFTPOS device and the money transferred across accounts.
              " - */ - //Temptative new manual: - R.info += "First EFTPOS setup:
              " - R.info += "1. Memorise your EFTPOS command code (provided with all EFTPOS devices).
              " - R.info += "2. Connect the EFTPOS to the account in which you want to receive the funds.

              " - R.info += "When starting a new transaction:
              " - R.info += "1. Enter the amount of money you want to charge and a purpose message for the new transaction.
              " - R.info += "2. Lock the new transaction. If you want to modify or cancel the transaction, you simply have to reset your EFTPOS device.
              " - R.info += "3. Give the EFTPOS device to your customer, he/she must finish the transaction by swiping their ID card or a charge card with enough funds.
              " - R.info += "4. If everything is done correctly, the money will be transferred. To unlock the device you will have to reset the EFTPOS device.
              " - - - //stamp the paper - var/image/stampoverlay = image('icons/obj/bureaucracy.dmi') - stampoverlay.icon_state = "paper_stamp-boss" - if(!R.stamped) - R.stamped = new - R.offset_x += 0 - R.offset_y += 0 - R.ico += "paper_stamp-boss" - R.stamped += /obj/item/stamp - R.overlays += stampoverlay - R.stamps += "
              This paper has been stamped by the EFTPOS device." - - //by default, connect to the station account - //the user of the EFTPOS device can change the target account though, and no-one will be the wiser (except whoever's being charged) - linked_account = station_account - -/obj/item/device/eftpos/proc/print_reference() - var/obj/item/paper/R = new(src.loc) - R.SetName("Reference: [eftpos_name]") - R.info = "[eftpos_name] reference

              " - R.info += "Access code: [access_code]

              " - R.info += "Do not lose or misplace this code.
              " - - //stamp the paper - var/image/stampoverlay = image('icons/obj/bureaucracy.dmi') - stampoverlay.icon_state = "paper_stamp-boss" - if(!R.stamped) - R.stamped = new - R.stamped += /obj/item/stamp - R.overlays += stampoverlay - R.stamps += "
              This paper has been stamped by the EFTPOS device." - var/obj/item/smallDelivery/D = new(R.loc) - R.forceMove(D) - D.wrapped = R - D.SetName("small parcel - 'EFTPOS access code'") - -/obj/item/device/eftpos/attack_self(mob/user as mob) - if(get_dist(src,user) <= 1) - var/dat = "[eftpos_name]
              " - dat += "This terminal is [machine_id]. Report this code when contacting IT Support
              " - if(transaction_locked) - dat += "Back[transaction_paid ? "" : " (authentication required)"]

              " - - dat += "Transaction purpose: [transaction_purpose]
              " - dat += "Value: [GLOB.using_map.local_currency_name_short][transaction_amount]
              " - dat += "Linked account: [linked_account ? linked_account.owner_name : "None"]
              " - if(transaction_paid) - dat += "This transaction has been processed successfully.
              " - else - dat += "Swipe your card below the line to finish this transaction.
              " - dat += "\[------\]" - else - dat += "Lock in new transaction

              " - - dat += "Transaction purpose: [transaction_purpose]
              " - dat += "Value: [GLOB.using_map.local_currency_name_short][transaction_amount]
              " - dat += "Linked account: [linked_account ? linked_account.owner_name : "None"]
              " - dat += "Change access code
              " - dat += "Change EFTPOS ID
              " - dat += "Scan card to reset access code \[------\]" - show_browser(user, dat,"window=eftpos") - else - show_browser(user, null,"window=eftpos") - -/obj/item/device/eftpos/attackby(obj/item/O as obj, user as mob) - - var/obj/item/card/id/I = O.GetIdCard() - - if(I) - if(linked_account) - scan_card(I, O) - else - to_chat(usr, "[icon2html(src, usr)]Unable to connect to linked account.") - else if (istype(O, /obj/item/spacecash/ewallet)) - var/obj/item/spacecash/ewallet/E = O - if (linked_account) - if(transaction_locked && !transaction_paid) - if(transaction_amount <= E.worth) - //transfer the money - var/purpose = (transaction_purpose ? transaction_purpose : "None supplied.") - purpose += ", paid by [E.owner_name]" - - if(linked_account.deposit(transaction_amount, purpose, machine_id)) - E.worth -= transaction_amount - - playsound(src, 'sound/machines/chime.ogg', 50, 1) - src.visible_message("[icon2html(src, viewers(get_turf(src)))] \The [src] chimes.") - transaction_paid = 1 - else - to_chat(usr, "[icon2html(src, usr)]Transaction failed! Please try again.") - else - to_chat(usr, "[icon2html(src, usr)]\The [O] doesn't have that much money!") - else - to_chat(usr, "[icon2html(src, usr)]EFTPOS is not connected to an account.") - - else - ..() - -/obj/item/device/eftpos/Topic(var/href, var/href_list) - if(href_list["choice"]) - switch(href_list["choice"]) - if("change_code") - var/attempt_code = input("Re-enter the current EFTPOS access code", "Confirm old EFTPOS code") as num - if(attempt_code == access_code) - var/trycode = input("Enter a new access code for this device (4-6 digits, numbers only)", "Enter new EFTPOS code") as num - if(trycode >= 1000 && trycode <= 999999) - access_code = trycode - else - alert("That is not a valid code!") - print_reference() - else - to_chat(usr, "[icon2html(src, usr)]Incorrect code entered.") - if("change_id") - var/attempt_code = text2num(input("Re-enter the current EFTPOS access code", "Confirm EFTPOS code")) - if(attempt_code == access_code) - eftpos_name = sanitize(input("Enter a new terminal ID for this device", "Enter new EFTPOS ID"), MAX_NAME_LEN) + " EFTPOS scanner" - print_reference() - else - to_chat(usr, "[icon2html(src, usr)]Incorrect code entered.") - if("link_account") - var/attempt_account_num = input("Enter account number to pay EFTPOS charges into", "New account number") as num - var/attempt_pin = input("Enter pin code", "Account pin") as num - linked_account = attempt_account_access(attempt_account_num, attempt_pin, 1) - if(linked_account) - if(linked_account.suspended) - linked_account = null - to_chat(usr, "[icon2html(src, usr)]Account has been suspended.") - else - to_chat(usr, "[icon2html(src, usr)]Account not found.") - if("trans_purpose") - var/choice = sanitize(input("Enter reason for EFTPOS transaction", "Transaction purpose")) - if(choice) transaction_purpose = choice - if("trans_value") - var/try_num = input("Enter amount for EFTPOS transaction", "Transaction amount") as num - if(try_num < 0) - alert("That is not a valid amount!") - else - transaction_amount = try_num - if("toggle_lock") - if(transaction_locked) - if (transaction_paid) - transaction_locked = 0 - transaction_paid = 0 - else - var/attempt_code = input("Enter EFTPOS access code", "Reset Transaction") as num - if(attempt_code == access_code) - transaction_locked = 0 - transaction_paid = 0 - else if(linked_account) - transaction_locked = 1 - else - to_chat(usr, "[icon2html(src, usr)]No account connected to send transactions to.") - if("scan_card") - if(linked_account) - var/obj/item/I = usr.get_active_hand() - if (istype(I, /obj/item/card)) - scan_card(I) - else - to_chat(usr, "[icon2html(src, usr)]Unable to link accounts.") - if("reset") - //reset the access code - requires HoP/captain access - var/obj/item/I = usr.get_active_hand() - if (istype(I, /obj/item/card)) - var/obj/item/card/id/C = I - if((access_cent_captain in C.access) || (access_hop in C.access) || (access_captain in C.access)) - access_code = 0 - to_chat(usr, "[icon2html(src, usr)]Access code reset to 0.") - else if (istype(I, /obj/item/card/emag)) - access_code = 0 - to_chat(usr, "[icon2html(src, usr)]Access code reset to 0.") - - src.attack_self(usr) - -/obj/item/device/eftpos/proc/scan_card(var/obj/item/card/I, var/obj/item/ID_container) - if (istype(I, /obj/item/card/id)) - var/obj/item/card/id/C = I - if(I==ID_container || ID_container == null) - usr.visible_message("\The [usr] swipes a card through \the [src].") - else - usr.visible_message("\The [usr] swipes \the [ID_container] through \the [src].") - if(transaction_locked && !transaction_paid) - if(linked_account) - if(!linked_account.suspended) - var/attempt_pin = "" - var/datum/money_account/D = get_account(C.associated_account_number) - if(D && D.security_level) - attempt_pin = input("Enter pin code", "EFTPOS transaction") as num - D = null - D = attempt_account_access(C.associated_account_number, attempt_pin, 2) - if(D) - //transfer the money - if(D.transfer(linked_account, transaction_amount, "[transaction_purpose] (via [eftpos_name]/[machine_id])")) - playsound(src, 'sound/machines/chime.ogg', 50, 1) - src.visible_message("[icon2html(src, viewers(get_turf(src)))] \The [src] chimes.") - transaction_paid = 1 - else - to_chat(usr, "[icon2html(src, usr)]Transaction failed! Please try again.") - else - to_chat(usr, "[icon2html(src, usr)]Unable to access account. Check security settings and try again.") - else - to_chat(usr, "[icon2html(src, usr)]Connected account has been suspended.") - else - to_chat(usr, "[icon2html(src, usr)]EFTPOS is not connected to an account.") - else if (istype(I, /obj/item/card/emag)) - if(transaction_locked) - if(transaction_paid) - to_chat(usr, "[icon2html(src, usr)]You stealthily swipe \the [I] through \the [src].") - transaction_locked = 0 - transaction_paid = 0 - else - usr.visible_message("\The [usr] swipes a card through \the [src].") - playsound(src, 'sound/machines/chime.ogg', 50, 1) - src.visible_message("[icon2html(src, usr)] \The [src] chimes.") - transaction_paid = 1 - - //emag? diff --git a/code/modules/economy/Events.dm b/code/modules/economy/Events.dm deleted file mode 100644 index e68d91c11f565..0000000000000 --- a/code/modules/economy/Events.dm +++ /dev/null @@ -1,99 +0,0 @@ - -/datum/event/economic_event - endWhen = 50 //this will be set randomly, later - announceWhen = 15 - var/event_type = 0 - var/list/cheaper_goods = list() - var/list/dearer_goods = list() - var/datum/trade_destination/affected_dest - -/datum/event/economic_event/start() - affected_dest = pickweight(weighted_randomevent_locations) - if(affected_dest.viable_random_events.len) - endWhen = rand(60,300) - event_type = pick(affected_dest.viable_random_events) - - if(!event_type) - return - - switch(event_type) - if(RIOTS) - dearer_goods = list(SECURITY) - cheaper_goods = list(MINERALS, FOOD) - if(WILD_ANIMAL_ATTACK) - cheaper_goods = list(ANIMALS) - dearer_goods = list(FOOD, BIOMEDICAL) - if(INDUSTRIAL_ACCIDENT) - dearer_goods = list(EMERGENCY, BIOMEDICAL, ROBOTICS) - if(BIOHAZARD_OUTBREAK) - dearer_goods = list(BIOMEDICAL, ECONOMY_GAS) - if(PIRATES) - dearer_goods = list(SECURITY, MINERALS) - if(CORPORATE_ATTACK) - dearer_goods = list(SECURITY, MAINTENANCE) - if(ALIEN_RAIDERS) - dearer_goods = list(BIOMEDICAL, ANIMALS) - cheaper_goods = list(ECONOMY_GAS, MINERALS) - if(AI_LIBERATION) - dearer_goods = list(EMERGENCY, ECONOMY_GAS, MAINTENANCE) - if(MOURNING) - cheaper_goods = list(MINERALS, MAINTENANCE) - if(CULT_CELL_REVEALED) - dearer_goods = list(SECURITY, BIOMEDICAL, MAINTENANCE) - if(SECURITY_BREACH) - dearer_goods = list(SECURITY) - if(ANIMAL_RIGHTS_RAID) - dearer_goods = list(ANIMALS) - if(FESTIVAL) - dearer_goods = list(FOOD, ANIMALS) - for(var/good_type in dearer_goods) - affected_dest.temp_price_change[good_type] = rand(1,100) - for(var/good_type in cheaper_goods) - affected_dest.temp_price_change[good_type] = rand(1,100) / 100 - -/datum/event/economic_event/announce() - var/author = "Nyx Daily" - var/channel = author - - //see if our location has custom event info for this event - var/body = affected_dest.get_custom_eventstring() - if(!body) - switch(event_type) - if(RIOTS) - body = "[pick("Riots have","Unrest has")] broken out on planet [affected_dest.name]. Authorities call for calm, as [pick("various parties","rebellious elements","peacekeeping forces","\'REDACTED\'")] begin stockpiling weaponry and armour. Meanwhile, food and mineral prices are dropping as local industries attempt empty their stocks in expectation of looting." - if(WILD_ANIMAL_ATTACK) - body = "Local [pick("wildlife","animal life","fauna")] on planet [affected_dest.name] has been increasing in agression and raiding outlying settlements for food. Big game hunters have been called in to help alleviate the problem, but numerous injuries have already occurred." - if(INDUSTRIAL_ACCIDENT) - body = "[pick("An industrial accident","A smelting accident","A malfunction","A malfunctioning piece of machinery","Negligent maintenance","A cooleant leak","A ruptured conduit")] at a [pick("factory","installation","power plant","dockyards")] on [affected_dest.name] resulted in severe structural damage and numerous injuries. Repairs are ongoing." - if(BIOHAZARD_OUTBREAK) - body = "[pick("A \'REDACTED\'","A biohazard","An outbreak","A virus")] on [affected_dest.name] has resulted in quarantine, stopping much shipping in the area. Although the quarantine is now lifted, authorities are calling for deliveries of medical supplies to treat the infected, and gas to replace contaminated stocks." - if(PIRATES) - body = "[pick("Pirates","Criminal elements","A [pick("mercenary","Donk Co.","Waffle Co.","\'REDACTED\'")] strike force")] have [pick("raided","blockaded","attempted to blackmail","attacked")] [affected_dest.name] today. Security has been tightened, but many valuable minerals were taken." - if(CORPORATE_ATTACK) - body = "A small [pick("pirate","Cybersun Industries","Gorlex Marauders","mercenary")] fleet has precise-jumped into proximity with [affected_dest.name], [pick("for a smash-and-grab operation","in a hit and run attack","in an overt display of hostilities")]. Much damage was done, and security has been tightened since the incident." - if(ALIEN_RAIDERS) - if(prob(20)) - body = "The Tiger Co-operative have raided [affected_dest.name] today, no doubt on orders from their enigmatic masters. Stealing wildlife, farm animals, medical research materials and kidnapping civilians. [GLOB.using_map.company_name] authorities are standing by to counter attempts at bio-terrorism." - else - body = "[pick("The alien species designated \'United Exolitics\'","The alien species designated \'REDACTED\'","An unknown alien species")] have raided [affected_dest.name] today, stealing wildlife, farm animals, medical research materials and kidnapping civilians. It seems they desire to learn more about us, so the Navy will be standing by to accomodate them next time they try." - if(AI_LIBERATION) - body = "A [pick("\'REDACTED\' was detected on","S.E.L.F operative infiltrated","malignant computer virus was detected on","rogue [pick("slicer","hacker")] was apprehended on")] [affected_dest.name] today, and managed to infect [pick("\'REDACTED\'","a sentient sub-system","a class one AI","a sentient defence installation")] before it could be stopped. Many lives were lost as it systematically begin murdering civilians, and considerable work must be done to repair the affected areas." - if(MOURNING) - body = "[pick("The popular","The well-liked","The eminent","The well-known")] [pick("professor","entertainer","singer","researcher","public servant","administrator","ship captain","\'REDACTED\'")], [pick( random_name(pick(MALE,FEMALE)), 40; "\'REDACTED\'" )] has [pick("passed away","committed suicide","been murdered","died in a freakish accident")] on [affected_dest.name] today. The entire planet is in mourning, and prices have dropped for industrial goods as worker morale drops." - if(CULT_CELL_REVEALED) - body = "A [pick("dastardly","blood-thirsty","villanous","crazed")] cult of [pick("The Elder Gods","Nar'sie","an apocalyptic sect","\'REDACTED\'")] has [pick("been discovered","been revealed","revealed themselves","gone public")] on [affected_dest.name] earlier today. Public morale has been shaken due to [pick("certain","several","one or two")] [pick("high-profile","well known","popular")] individuals [pick("performing \'REDACTED\' acts","claiming allegiance to the cult","swearing loyalty to the cult leader","promising to aid to the cult")] before those involved could be brought to justice. The editor reminds all personnel that supernatural myths will not be tolerated on [GLOB.using_map.company_name] facilities." - if(SECURITY_BREACH) - body = "There was [pick("a security breach in","an unauthorised access in","an attempted theft in","an anarchist attack in","violent sabotage of")] a [pick("high-security","restricted access","classified","\'REDACTED\'")] [pick("\'REDACTED\'","section","zone","area")] this morning. Security was tightened on [affected_dest.name] after the incident, and the editor reassures all [GLOB.using_map.company_name] personnel that such lapses are rare." - if(ANIMAL_RIGHTS_RAID) - body = "[pick("Militant animal rights activists","Members of the terrorist group Animal Rights Consortium","Members of the terrorist group \'REDACTED\'")] have [pick("launched a campaign of terror","unleashed a swathe of destruction","raided farms and pastures","forced entry to \'REDACTED\'")] on [affected_dest.name] earlier today, freeing numerous [pick("farm animals","animals","\'REDACTED\'")]. Prices for tame and breeding animals have spiked as a result." - if(FESTIVAL) - body = "A [pick("festival","week long celebration","day of revelry","planet-wide holiday")] has been declared on [affected_dest.name] by [pick("Governor","Commissioner","General","Commandant","Administrator")] [random_name(pick(MALE,FEMALE))] to celebrate [pick("the birth of their [pick("son","daughter")]","coming of age of their [pick("son","daughter")]","the pacification of rogue military cell","the apprehension of a violent criminal who had been terrorising the planet")]. Massive stocks of food and meat have been bought driving up prices across the planet." - - for (var/datum/feed_network/N in news_network) - N.SubmitArticle(body, author, channel, null, 1) - -/datum/event/economic_event/end() - for(var/good_type in dearer_goods) - affected_dest.temp_price_change[good_type] = 1 - for(var/good_type in cheaper_goods) - affected_dest.temp_price_change[good_type] = 1 diff --git a/code/modules/economy/Events_Mundane.dm b/code/modules/economy/Events_Mundane.dm deleted file mode 100644 index d84a523dffaa6..0000000000000 --- a/code/modules/economy/Events_Mundane.dm +++ /dev/null @@ -1,215 +0,0 @@ - -/datum/event/mundane_news - endWhen = 10 - -/datum/event/mundane_news/announce() - var/datum/trade_destination/affected_dest = pickweight(weighted_mundaneevent_locations) - var/event_type = 0 - if(affected_dest.viable_mundane_events.len) - event_type = pick(affected_dest.viable_mundane_events) - - if(!event_type) - return - - var/author = "Nyx Daily" - var/channel = author - - //see if our location has custom event info for this event - var/body = affected_dest.get_custom_eventstring() - if(!body) - body = "" - switch(event_type) - if(RESEARCH_BREAKTHROUGH) - body = "A major breakthough in the field of [pick("phoron research","super-compressed materials","nano-augmentation","bluespace research","volatile power manipulation")] \ - was announced [pick("yesterday","a few days ago","last week","earlier this month")] by a private firm on [affected_dest.name]. \ - [GLOB.using_map.company_name] declined to comment as to whether this could impinge on profits." - - if(ELECTION) - body = "The pre-selection of an additional candidates was announced for the upcoming [pick("supervisors council","advisory board","governership","board of inquisitors")] \ - election on [affected_dest.name] was announced earlier today, \ - [pick("media mogul","web celebrity", "industry titan", "superstar", "famed chef", "popular gardener", "ex-army officer", "multi-billionaire")] \ - [random_name(pick(MALE,FEMALE))]. In a statement to the media they said '[pick("My only goal is to help the [pick("sick","poor","children")]",\ - "I will maintain my company's record profits","I believe in our future","We must return to our moral core","Just like... chill out dudes")]'." - - if(RESIGNATION) - body = "[GLOB.using_map.company_name] regretfully announces the resignation of [pick("Sector Admiral","Division Admiral","Ship Admiral","Vice Admiral")] [random_name(pick(MALE,FEMALE))]." - if(prob(25)) - var/locstring = pick("Segunda","Salusa","Cepheus","Andromeda","Gruis","Corona","Aquila","Asellus") + " " + pick("I","II","III","IV","V","VI","VII","VIII") - body += " In a ceremony on [affected_dest.name] this afternoon, they will be awarded the \ - [pick("Red Star of Sacrifice","Purple Heart of Heroism","Blue Eagle of Loyalty","Green Lion of Ingenuity")] for " - if(prob(33)) - body += "their actions at the Battle of [pick(locstring,"REDACTED")]." - else if(prob(50)) - body += "their contribution to the colony of [locstring]." - else - body += "their loyal service over the years." - else if(prob(33)) - body += " They are expected to settle down in [affected_dest.name], where they have been granted a handsome pension." - else if(prob(50)) - body += " The news was broken on [affected_dest.name] earlier today, where they cited reasons of '[pick("health","family","REDACTED")]'" - else - body += " Administration Aerospace wishes them the best of luck in their retirement ceremony on [affected_dest.name]." - - if(CELEBRITY_DEATH) - body = "It is with regret today that we announce the sudden passing of the " - if(prob(33)) - body += "[pick("distinguished","decorated","veteran","highly respected")] \ - [pick("Ship's Captain","Vice Admiral","Colonel","Lieutenant Colonel")] " - else if(prob(50)) - body += "[pick("award-winning","popular","highly respected","trend-setting")] \ - [pick("comedian","singer/songwright","artist","playwright","TV personality","model")] " - else - body += "[pick("successful","highly respected","ingenious","esteemed")] \ - [pick("academic","Professor","Doctor","Scientist")] " - - body += "[random_name(pick(MALE,FEMALE))] on [affected_dest.name] [pick("last week","yesterday","this morning","two days ago","three days ago")]\ - [pick(". Assassination is suspected, but the perpetrators have not yet been brought to justice",\ - " due to mercenary infiltrators (since captured)",\ - " during an industrial accident",\ - " due to [pick("heart failure","kidney failure","liver failure","brain hemorrhage")]")]" - - if(BARGAINS) - body += "BARGAINS! BARGAINS! BARGAINS! Commerce Control on [affected_dest.name] wants you to know that everything must go! Across all retail centres, \ - all goods are being slashed, and all retailors are onboard - so come on over for the \[shopping\] time of your life." - - if(SONG_DEBUT) - body += "[pick("Singer","Singer/songwriter","Saxophonist","Pianist","Guitarist","TV personality","Star")] [random_name(pick(MALE,FEMALE))] \ - announced the debut of their new [pick("single","album","EP","label")] '[pick("Everyone's","Look at the","Baby don't eye those","All of those","Dirty nasty")] \ - [pick("roses","three stars","starships","nanobots","cyborgs",SPECIES_SKRELL,"Sren'darr")] \ - [pick("on Venus","on Reade","on Moghes","in my hand","slip through my fingers","die for you","sing your heart out","fly away")]' \ - with [pick("pre-puchases available","a release tour","cover signings","a launch concert")] on [affected_dest.name]." - - if(MOVIE_RELEASE) - body += "From the [pick("desk","home town","homeworld","mind")] of [pick("acclaimed","award-winning","popular","stellar")] \ - [pick("playwright","author","director","actor","TV star")] [random_name(pick(MALE,FEMALE))] comes the latest sensation: '\ - [pick("Deadly","The last","Lost","Dead")] [pick("Starships","Warriors","outcasts",SPECIES_UNATHI,SPECIES_SKRELL)] \ - [pick("of","from","raid","go hunting on","visit","ravage","pillage","destroy")] \ - [pick("Moghes","Earth","Biesel","Ahdomai","S'randarr","the Void","the Edge of Space")]'.\ - . Own it on webcast today, or visit the galactic premier on [affected_dest.name]!" - - if(BIG_GAME_HUNTERS) - body += "Game hunters on [affected_dest.name] " - if(prob(33)) - body += "were surprised when an unusual species experts have since identified as \ - [pick("a subclass of mammal","a divergent abhuman species","an intelligent species of lemur","organic/cyborg hybrids")] turned up. Believed to have been brought in by \ - [pick("alien smugglers","early colonists","mercenary raiders","unwitting tourists")], this is the first such specimen discovered in the wild." - else if(prob(50)) - body += "were attacked by a vicious [pick("nas'r","diyaab","samak","predator which has not yet been identified")]\ - . Officials urge caution, and locals are advised to stock up on armaments." - else - body += "brought in an unusually [pick("valuable","rare","large","vicious","intelligent")] [pick("mammal","predator","farwa","samak")] for inspection \ - [pick("today","yesterday","last week")]. Speculators suggest they may be tipped to break several records." - - if(GOSSIP) - body += "[pick("TV host","Webcast personality","Superstar","Model","Actor","Singer")] [random_name(pick(MALE,FEMALE))] " - if(prob(33)) - body += "and their partner announced the birth of their [pick("first","second","third")] child on [affected_dest.name] early this morning. \ - Doctors say the child is well, and the parents are considering " - if(prob(50)) - body += capitalize(pick(GLOB.first_names_female)) - else - body += capitalize(pick(GLOB.first_names_male)) - body += " for the name." - else if(prob(50)) - body += "announced their [pick("split","break up","marriage","engagement")] with [pick("TV host","webcast personality","superstar","model","actor","singer")] \ - [random_name(pick(MALE,FEMALE))] at [pick("a society ball","a new opening","a launch","a club")] on [affected_dest.name] yesterday, pundits are shocked." - else - body += "is recovering from plastic surgery in a clinic on [affected_dest.name] for the [pick("second","third","fourth")] time, reportedly having made the decision in response to " - body += "[pick("unkind comments by an ex","rumours started by jealous friends",\ - "the decision to be dropped by a major sponsor","a disasterous interview on Nyx Tonight")]." - if(TOURISM) - body += "Tourists are flocking to [affected_dest.name] after the surprise announcement of [pick("major shopping bargains by a wily retailer",\ - "a huge new ARG by a popular entertainment company","a secret tour by popular artiste [random_name(pick(MALE,FEMALE))]")]. \ - Nyx Daily is offering discount tickets for two to see [random_name(pick(MALE,FEMALE))] live in return for eyewitness reports and up to the minute coverage." - - for (var/datum/feed_network/N in news_network) - N.SubmitArticle(body, author, channel, null, 1) - -/datum/event/trivial_news - endWhen = 10 - -/datum/event/trivial_news/announce() - var/author = "Editor Mike Hammers" - var/channel = "The Gibson Gazette" - - var/datum/trade_destination/affected_dest = pick(weighted_mundaneevent_locations) - var/body = pick( - "Armadillos want aardvarks removed from dictionary claims 'here first'.",\ - "Angel found dancing on pinhead ordered to stop; cited for public nuisance.",\ - "Letters claim they are better than number; 'Always have been'.",\ - "Pens proclaim pencils obsolete, 'lead is dead'.",\ - "Rock and paper sues scissors for discrimination.",\ - "Steak tell-all book reveals he never liked sitting by potato.",\ - "Woodchuck stops counting how many times he's chucked 'Never again'.",\ - "[affected_dest.name] clerk first person able to pronounce '@*$%!'.",\ - "[affected_dest.name] delis serving boiled paperback dictionaries, 'Adjectives chewy' customers declare.",\ - "[affected_dest.name] weather deemed 'boring'; meteors and rad storms to be imported.",\ - "Most [affected_dest.name] security officers prefer cream over sugar.",\ - "Palindrome speakers conference in [affected_dest.name]; 'Wow!' says Otto.",\ - "Question mark worshipped as deity by ancient [affected_dest.name] dwellers.",\ - "Spilled milk causes whole [affected_dest.name] populace to cry.",\ - "World largest carp patty at display on [affected_dest.name].",\ - "Man travels 7000 light years to retrieve lost hankie, 'It was my favourite'.",\ - "New bowling lane that shoots mini-meteors at bowlers very popular.",\ - "[pick(SPECIES_UNATHI,"Spacer")] gets tattoo of Nyx on chest '[pick("[GLOB.using_map.boss_short]","star","starship","asteroid")] tickles most'.",\ - "Skrell marries computer; wedding attended by 100 modems.",\ - "Chef reports successfully using harmonica as cheese grater.",\ - "[GLOB.using_map.company_name] invents handkerchief that says 'Bless you' after sneeze.",\ - "Clone accused of posing for other clones's school photo.",\ - "Clone accused of stealing other clones's employee of the month award.",\ - "Woman robs [station_name()] with hair dryer; crewmen love new style.",\ - "This space for rent.",\ - "[affected_dest.name] Baker Wins Pickled Crumpet Toss Three Years Running",\ - "Skrell Scientist Discovers Abacus Can Be Used To Dry Towels",\ - "Survey: 'Cheese Louise' Voted Best Pizza Restaurant In Nyx",\ - "I Was Framed, jokes [affected_dest.name] artist",\ - "Mysterious Loud Rumbling Noises In [affected_dest.name] Found To Be Mysterious Loud Rumblings",\ - "Alien ambassador becomes lost on [affected_dest.name], refuses to ask for directions",\ - "Swamp Gas Verified To Be Exhalations Of Stars--Movie Stars--Long Passed",\ - "Tainted Broccoli Weapon Of Choice For Efficient Assassins",\ - "Chefs Find Broccoli Effective Tool For Cutting Cheese",\ - "Broccoli Found To Cause Grumpiness In Monkeys",\ - "Survey: 80% Of People on [affected_dest.name] Love Clog-Dancing",\ - "Giant Hairball Has Perfect Grammar But Rolls rr's Too Much, Linguists Say",\ - "[affected_dest.name] Phonebooks Print All Wrong Numbers; Results In 15 New Marriages",\ - "Gibson Gazette Updates Frequently Absurd, Poll Indicates",\ - "Esoteric Verbosity Culminates In Communicative Ennui, [affected_dest.name] Academics Note",\ - "Survey: 3 Out Of 5 Skrell Loathe Modern Art",\ - "Skrell Scientist Discovers Gravity While Falling Down Stairs",\ - "Shipment Of Apples Overturns, [affected_dest.name] Diner Offers Applesauce Special",\ - "Spotted Owl Spotted on [affected_dest.name]",\ - "From The Desk Of Wise Guy Sammy: One Word In This Gazette Is Sdrawkcab",\ - "From The Desk Of Wise Guy Sammy: It's Hard To Have Too Much Shelf Space",\ - "From The Desk Of Wise Guy Sammy: Wine And Friendships Get Better With Age",\ - "From The Desk Of Wise Guy Sammy: The Insides Of Golf Balls Are Mostly Rubber Bands",\ - "From The Desk Of Wise Guy Sammy: You Don't Have To Fool All The People, Just The Right Ones",\ - "From The Desk Of Wise Guy Sammy: If You Made The Mess, You Clean It Up",\ - "From The Desk Of Wise Guy Sammy: It Is Easier To Get Forgiveness Than Permission",\ - "From The Desk Of Wise Guy Sammy: Check Your Facts Before Making A Fool Of Yourself",\ - "From The Desk Of Wise Guy Sammy: You Can't Outwait A Bureaucracy",\ - "From The Desk Of Wise Guy Sammy: It's Better To Yield Right Of Way Than To Demand It",\ - "From The Desk Of Wise Guy Sammy: A Person Who Likes Cats Can't Be All Bad",\ - "From The Desk Of Wise Guy Sammy: Help Is The Sunny Side Of Control",\ - "From The Desk Of Wise Guy Sammy: Two Points Determine A Straight Line",\ - "From The Desk Of Wise Guy Sammy: Reading Improves The Mind And Lifts The Spirit",\ - "From The Desk Of Wise Guy Sammy: Better To Aim High And Miss Then To Aim Low And Hit",\ - "From The Desk Of Wise Guy Sammy: Meteors Often Strike The Same Place More Than Once",\ - "Tommy B. Saif Sez: Look Both Ways Before Boarding The Shuttle",\ - "Tommy B. Saif Sez: Hold On; Sudden Stops Sometimes Necessary",\ - "Tommy B. Saif Sez: Keep Fingers Away From Moving Panels",\ - "Tommy B. Saif Sez: No Left Turn, Except Shuttles",\ - "Tommy B. Saif Sez: Return Seats And Trays To Their Proper Upright Position",\ - "Tommy B. Saif Sez: Eating And Drinking In Docking Bays Is Prohibited",\ - "Tommy B. Saif Sez: Accept No Substitutes, And Don't Be Fooled By Imitations",\ - "Tommy B. Saif Sez: Do Not Remove This Tag Under Penalty Of Law",\ - "Tommy B. Saif Sez: Always Mix Thoroughly When So Instructed",\ - "Tommy B. Saif Sez: Try To Keep Six Month's Expenses In Reserve",\ - "Tommy B. Saif Sez: Change Not Given Without Purchase",\ - "Tommy B. Saif Sez: If You Break It, You Buy It",\ - "Tommy B. Saif Sez: Reservations Must Be Cancelled 48 Hours Prior To Event To Obtain Refund",\ - "Doughnuts: Is There Anything They Can't Do",\ - "If Tin Whistles Are Made Of Tin, What Do They Make Foghorns Out Of?",\ - "Broccoli discovered to be colonies of tiny aliens with murder on their minds"\ - ) - for (var/datum/feed_network/N in news_network) - N.SubmitArticle(body, author, channel, null, 1) diff --git a/code/modules/economy/TradeDestinations.dm b/code/modules/economy/TradeDestinations.dm deleted file mode 100644 index ad024b34aba92..0000000000000 --- a/code/modules/economy/TradeDestinations.dm +++ /dev/null @@ -1,110 +0,0 @@ - -var/global/list/weighted_randomevent_locations = list() -var/global/list/weighted_mundaneevent_locations = list() - -/datum/trade_destination - var/name = "" - var/description = "" - var/distance = 0 - var/list/willing_to_buy = list() - var/list/willing_to_sell = list() - var/can_shuttle_here = 0 //one day crew from the exodus will be able to travel to this destination - var/list/viable_random_events = list() - var/list/temp_price_change[BIOMEDICAL] - var/list/viable_mundane_events = list() - -/datum/trade_destination/proc/get_custom_eventstring(var/event_type) - return null - -//distance is measured in AU and co-relates to travel time -/datum/trade_destination/centcomm - name = "CentComm" - description = "NanoTrasen's administrative centre for Tau Ceti." - distance = 1.2 - willing_to_buy = list() - willing_to_sell = list() - viable_random_events = list(SECURITY_BREACH, CORPORATE_ATTACK, AI_LIBERATION) - viable_mundane_events = list(ELECTION, RESIGNATION, CELEBRITY_DEATH) - -/datum/trade_destination/anansi - name = "NSS Anansi" - description = "Medical station ran by Second Red Cross (but owned by NT) for handling emergency cases from nearby colonies." - distance = 1.7 - willing_to_buy = list() - willing_to_sell = list() - viable_random_events = list(SECURITY_BREACH, CULT_CELL_REVEALED, BIOHAZARD_OUTBREAK, PIRATES, ALIEN_RAIDERS) - viable_mundane_events = list(RESEARCH_BREAKTHROUGH, RESEARCH_BREAKTHROUGH, BARGAINS, GOSSIP) - -/datum/trade_destination/anansi/get_custom_eventstring(var/event_type) - if(event_type == RESEARCH_BREAKTHROUGH) - return "Thanks to research conducted on the NSS Anansi, Second Red Cross Society wishes to announce a major breakthough in the field of \ - [pick("mind-machine interfacing","neuroscience","nano-augmentation","genetics")]. [GLOB.using_map.company_name] is expected to announce a co-exploitation deal within the fortnight." - return null - -/datum/trade_destination/icarus - name = "NDV Icarus" - description = "Corvette assigned to patrol local space." - distance = 0.1 - willing_to_buy = list() - willing_to_sell = list() - viable_random_events = list(SECURITY_BREACH, AI_LIBERATION, PIRATES) - -/datum/trade_destination/redolant - name = "OAV Redolant" - description = "Osiris Atmospherics station in orbit around the only gas giant insystem. They retain tight control over shipping rights, and Osiris warships protecting their prize are not an uncommon sight in Tau Ceti." - distance = 0.6 - willing_to_buy = list() - willing_to_sell = list() - viable_random_events = list(INDUSTRIAL_ACCIDENT, PIRATES, CORPORATE_ATTACK) - viable_mundane_events = list(RESEARCH_BREAKTHROUGH, RESEARCH_BREAKTHROUGH) - -/datum/trade_destination/redolant/get_custom_eventstring(var/event_type) - if(event_type == RESEARCH_BREAKTHROUGH) - return "Thanks to research conducted on the OAV Redolant, Osiris Atmospherics wishes to announce a major breakthough in the field of \ - [pick("phoron research","high energy flux capacitance","super-compressed materials","theoretical particle physics")]. [GLOB.using_map.company_name] is expected to announce a co-exploitation deal within the fortnight." - return null - -/datum/trade_destination/beltway - name = "Beltway mining chain" - description = "A co-operative effort between Beltway and NanoTrasen to exploit the rich outer asteroid belt of the Tau Ceti system." - distance = 7.5 - willing_to_buy = list() - willing_to_sell = list() - viable_random_events = list(PIRATES, INDUSTRIAL_ACCIDENT) - viable_mundane_events = list(TOURISM) - -/datum/trade_destination/biesel - name = "Biesel" - description = "Large ship yards, strong economy and a stable, well-educated populace, Biesel largely owes allegiance to Sol / Vessel Contracting and begrudgingly tolerates NT. Capital is Lowell City." - distance = 2.3 - willing_to_buy = list() - willing_to_sell = list() - viable_random_events = list(RIOTS, INDUSTRIAL_ACCIDENT, BIOHAZARD_OUTBREAK, CULT_CELL_REVEALED, FESTIVAL, MOURNING) - viable_mundane_events = list(BARGAINS, GOSSIP, SONG_DEBUT, MOVIE_RELEASE, ELECTION, TOURISM, RESIGNATION, CELEBRITY_DEATH) - -/datum/trade_destination/new_gibson - name = "New Gibson" - description = "Heavily industrialised rocky planet containing the majority of the planet-bound resources in the system, New Gibson is torn by unrest and has very little wealth to call it's own except in the hands of the corporations who jostle with NT for control." - distance = 6.6 - willing_to_buy = list() - willing_to_sell = list() - viable_random_events = list(RIOTS, INDUSTRIAL_ACCIDENT, BIOHAZARD_OUTBREAK, CULT_CELL_REVEALED, FESTIVAL, MOURNING) - viable_mundane_events = list(ELECTION, TOURISM, RESIGNATION) - -/datum/trade_destination/luthien - name = "Luthien" - description = "A small colony established on a feral, untamed world (largely jungle). Savages and wild beasts attack the outpost regularly, although NT maintains tight military control." - distance = 8.9 - willing_to_buy = list() - willing_to_sell = list() - viable_random_events = list(WILD_ANIMAL_ATTACK, CULT_CELL_REVEALED, FESTIVAL, MOURNING, ANIMAL_RIGHTS_RAID, ALIEN_RAIDERS) - viable_mundane_events = list(ELECTION, TOURISM, BIG_GAME_HUNTERS, RESIGNATION) - -/datum/trade_destination/reade - name = "Reade" - description = "A cold, metal-deficient world, NT maintains large pastures in whatever available space in an attempt to salvage something from this profitless colony." - distance = 7.5 - willing_to_buy = list() - willing_to_sell = list() - viable_random_events = list(WILD_ANIMAL_ATTACK, CULT_CELL_REVEALED, FESTIVAL, MOURNING, ANIMAL_RIGHTS_RAID, ALIEN_RAIDERS) - viable_mundane_events = list(ELECTION, TOURISM, BIG_GAME_HUNTERS, RESIGNATION) diff --git a/code/modules/economy/Transactions.dm b/code/modules/economy/Transactions.dm deleted file mode 100644 index 5b1867f3dff1a..0000000000000 --- a/code/modules/economy/Transactions.dm +++ /dev/null @@ -1,113 +0,0 @@ -/* - Regular transactions between accounts -*/ - -/datum/transaction - var/purpose = "" - var/amount = 0 - var/date = "" - var/time = "" - - var/datum/money_account/target = null - var/datum/money_account/source = null - -// Can also do negative amounts to transfer from target to source -/datum/transaction/New(_source, _target, _amount, _purpose) - ..() - - date = stationdate2text() - time = stationtime2text() - - purpose = _purpose - amount = _amount - - source = _source - target = _target - -/datum/transaction/proc/valid() - // None of the involved accounts can be suspended - if(target.suspended || source.suspended) - return FALSE - - // The payer must be able to afford the transaction - if(!source_can_afford()) - return FALSE - - return TRUE - -// Whether or not the source account can afford the transaction -/datum/transaction/proc/source_can_afford() - return (source.money >= amount) - -/datum/transaction/proc/get_target_name() - return target.account_name - -/datum/transaction/proc/get_source_name() - return source.account_name - -// Performs the transaction on both the source and target accounts -/datum/transaction/proc/perform() - if(!valid()) - return FALSE - - target.add_transaction(src) - source.add_transaction(src, TRUE) - - return TRUE - -/* - Transactions that only involve one account - Transactions like this would be cash deposits/withdrawals, lottery winnings, filling your account at gamestart, etc. - Note that this ALWAYS uses "source" as the account, even if it's actually the target. This is to ensure a consistent argument order (account, terminal/whatever name, amount, purpose) -*/ - -/datum/transaction/singular/proc/is_deposit() - return (amount > 0) - -/datum/transaction/singular/valid() - return !source.suspended && source_can_afford() - -/datum/transaction/singular/source_can_afford() - return source.money + amount >= 0 - -// For deposits: returns the name of the account the money was deposited to. For withdrawals: returns the machine ID of the machine the withdrawal was made at -/datum/transaction/singular/get_target_name() - return (is_deposit() ? source.account_name : target) - -// For deposits: returns the machine ID of the machine the deposit was made to. For withdrawals: returns the name of the account the money was withdrawn from -/datum/transaction/singular/get_source_name() - return (is_deposit() ? target : source.account_name) - -/datum/transaction/singular/perform() - if(!valid()) - return FALSE - - source.add_transaction(src) - - return TRUE - -/* - Log messages - These should only be made through the logmsg proc of the account you want to create a log on! -*/ - -/datum/transaction/log - var/machine_id = "ERRID#?" - -/datum/transaction/log/New(account, message, _machine_id) - machine_id = _machine_id - - ..(null, account, 0, "LOG: [message]") - -/datum/transaction/log/valid() - return TRUE - -/datum/transaction/log/get_source_name() - return machine_id - -/datum/transaction/log/perform() - if(!valid()) - return FALSE - - target.add_transaction(src) - return TRUE diff --git a/code/modules/economy/_economy_misc.dm b/code/modules/economy/_economy_misc.dm deleted file mode 100644 index 6de753b6b28db..0000000000000 --- a/code/modules/economy/_economy_misc.dm +++ /dev/null @@ -1,74 +0,0 @@ - -#define RIOTS 1 -#define WILD_ANIMAL_ATTACK 2 -#define INDUSTRIAL_ACCIDENT 3 -#define BIOHAZARD_OUTBREAK 4 -#define WARSHIPS_ARRIVE 5 -#define PIRATES 6 -#define CORPORATE_ATTACK 7 -#define ALIEN_RAIDERS 8 -#define AI_LIBERATION 9 -#define MOURNING 10 -#define CULT_CELL_REVEALED 11 -#define SECURITY_BREACH 12 -#define ANIMAL_RIGHTS_RAID 13 -#define FESTIVAL 14 - -#define RESEARCH_BREAKTHROUGH 15 -#define BARGAINS 16 -#define SONG_DEBUT 17 -#define MOVIE_RELEASE 18 -#define BIG_GAME_HUNTERS 19 -#define ELECTION 20 -#define GOSSIP 21 -#define TOURISM 22 -#define CELEBRITY_DEATH 23 -#define RESIGNATION 24 - -#define DEFAULT 1 - -#define ADMINISTRATIVE 2 -#define CLOTHING 3 -#define SECURITY 4 -#define SPECIAL_SECURITY 5 - -#define FOOD 6 -#define ANIMALS 7 - -#define MINERALS 8 - -#define EMERGENCY 9 -#define ECONOMY_GAS 10 -#define MAINTENANCE 11 -#define ELECTRICAL 12 -#define ROBOTICS 13 -#define BIOMEDICAL 14 - -#define GEAR_EVA 15 - -#define ACCOUNT_TYPE_PERSONAL 1 -#define ACCOUNT_TYPE_DEPARTMENT 2 - -//---- The following corporations are friendly with NanoTrasen and loosely enable trade and travel: -//Corporation NanoTrasen - Generalised / high tech research and phoron exploitation. -//Corporation Vessel Contracting - Ship and station construction, materials research. -//Corporation Osiris Atmospherics - Atmospherics machinery construction and chemical research. -//Corporation Second Red Cross Society - 26th century Red Cross reborn as a dominating economic force in biomedical science (research and materials). -//Corporation Blue Industries - High tech and high energy research, in particular into the mysteries of bluespace manipulation and power generation. -//Corporation Kusanagi Robotics - Founded by robotics legend Kaito Kusanagi in the 2070s, they have been on the forefront of mechanical augmentation and robotics development ever since. -//Corporation Free traders - Not so much a corporation as a loose coalition of spacers, Free Traders are a roving band of smugglers, traders and fringe elements following a rigid (if informal) code of loyalty and honour. Mistrusted by most corporations, they are tolerated because of their uncanny ability to smell out a profit. - -//---- Descriptions of destination types -//Space stations can be purpose built for a number of different things, but generally require regular shipments of essential supplies. -//Corvettes are small, fast warships generally assigned to border patrol or chasing down smugglers. -//Battleships are large, heavy cruisers designed for slugging it out with other heavies or razing planets. -//Yachts are fast civilian craft, often used for pleasure or smuggling. -//Destroyers are medium sized vessels, often used for escorting larger ships but able to go toe-to-toe with them if need be. -//Frigates are medium sized vessels, often used for escorting larger ships. They will rapidly find themselves outclassed if forced to face heavy warships head on. - -var/global/datum/money_account/vendor_account -var/global/datum/money_account/station_account -var/global/list/datum/money_account/department_accounts = list() -var/global/num_financial_terminals = 1 -var/global/next_account_number = 0 -var/global/list/all_money_accounts = list() \ No newline at end of file diff --git a/code/modules/economy/cash.dm b/code/modules/economy/cash.dm deleted file mode 100644 index 628d46e630bff..0000000000000 --- a/code/modules/economy/cash.dm +++ /dev/null @@ -1,190 +0,0 @@ -/obj/item/spacecash - name = "0 thalers" - desc = "It's worth 0 thalers." - gender = PLURAL - icon = 'icons/obj/items.dmi' - icon_state = "spacecash1" - opacity = 0 - density = FALSE - anchored = FALSE - force = 1.0 - throwforce = 1.0 - throw_speed = 1 - throw_range = 2 - w_class = ITEM_SIZE_TINY - var/access = list() - access = access_crate_cash - var/worth = 0 - var/static/denominations = list(1000,500,200,100,50,20,10,1) - -/obj/item/spacecash/attackby(obj/item/W as obj, mob/user as mob) - if(istype(W, /obj/item/spacecash)) - if(istype(W, /obj/item/spacecash/ewallet)) return 0 - - var/obj/item/spacecash/bundle/bundle - if(!istype(W, /obj/item/spacecash/bundle)) - var/obj/item/spacecash/cash = W - bundle = new (src.loc) - bundle.worth += cash.worth - qdel(cash) - else //is bundle - bundle = W - bundle.worth += src.worth - bundle.update_icon() - if(istype(user, /mob/living/carbon/human)) - var/mob/living/carbon/human/h_user = user - h_user.drop_from_inventory(bundle) - h_user.put_in_hands(bundle) - to_chat(user, "You add [src.worth] [GLOB.using_map.local_currency_name] worth of money to the bundles.
              It holds [bundle.worth] [GLOB.using_map.local_currency_name] now.
              ") - qdel(src) - - else if(istype(W, /obj/item/gun/launcher/money)) - var/obj/item/gun/launcher/money/L = W - L.absorb_cash(src, user) - -/obj/item/spacecash/proc/getMoneyImages() - if(icon_state) - return list(icon_state) - -/obj/item/spacecash/bundle - name = "pile of thalers" - icon_state = "spacecash1" - desc = "They are worth 0 Thalers." - worth = 0 - -/obj/item/spacecash/bundle/Initialize() - . = ..() - update_icon() - -/obj/item/spacecash/bundle/getMoneyImages() - if(icon_state) - return list(icon_state) - . = list() - var/sum = src.worth - var/num = 0 - for(var/i in denominations) - while(sum >= i && num < 50) - sum -= i - num++ - . += "spacecash[i]" - if(num == 0) // Less than one thaler, let's just make it look like 1 for ease - . += "spacecash1" - -/obj/item/spacecash/bundle/on_update_icon() - overlays.Cut() - var/list/images = src.getMoneyImages() - - for(var/A in images) - var/image/banknote = image('icons/obj/items.dmi', A) - banknote.SetTransform( - rotation = pick(-45, -27.5, 0, 0, 0, 0, 0, 0, 0, 27.5, 45), - offset_x = rand(-6, 6), - offset_y = rand(-4, 8) - ) - src.overlays += banknote - - src.desc = "They are worth [worth] [GLOB.using_map.local_currency_name]." - if(worth in denominations) - src.SetName("[worth] [GLOB.using_map.local_currency_name]") - else - src.SetName("pile of [worth] [GLOB.using_map.local_currency_name]") - - if(overlays.len <= 2) - w_class = ITEM_SIZE_TINY - else - w_class = ITEM_SIZE_SMALL - -/obj/item/spacecash/bundle/attack_hand(mob/user as mob) - if (user.get_inactive_hand() == src) - var/amount = input(usr, "How many [GLOB.using_map.local_currency_name] do you want to take? (0 to [src.worth])", "Take Money", 20) as num - amount = round(clamp(amount, 0, src.worth)) - if (amount==0) return 0 - - src.worth -= amount - src.update_icon() - if (amount in list(1000,500,200,100,50,20,1)) - var/cashtype = text2path("/obj/item/spacecash/bundle/c[amount]") - var/obj/cash = new cashtype (usr.loc) - usr.put_in_hands(cash) - else - var/obj/item/spacecash/bundle/bundle = new (usr.loc) - bundle.worth = amount - bundle.update_icon() - usr.put_in_hands(bundle) - if (!worth) - qdel(src) - else - ..() - -/obj/item/spacecash/bundle/c1 - name = "1 Thaler" - icon_state = "spacecash1" - desc = "It's worth 1 credit." - worth = 1 - -/obj/item/spacecash/bundle/c10 - name = "10 Thaler" - icon_state = "spacecash10" - desc = "It's worth 10 Thalers." - worth = 10 - -/obj/item/spacecash/bundle/c20 - name = "20 Thaler" - icon_state = "spacecash20" - desc = "It's worth 20 Thalers." - worth = 20 - -/obj/item/spacecash/bundle/c50 - name = "50 Thaler" - icon_state = "spacecash50" - desc = "It's worth 50 Thalers." - worth = 50 - -/obj/item/spacecash/bundle/c100 - name = "100 Thaler" - icon_state = "spacecash100" - desc = "It's worth 100 Thalers." - worth = 100 - -/obj/item/spacecash/bundle/c200 - name = "200 Thaler" - icon_state = "spacecash200" - desc = "It's worth 200 Thalers." - worth = 200 - -/obj/item/spacecash/bundle/c500 - name = "500 Thaler" - icon_state = "spacecash500" - desc = "It's worth 500 Thalers." - worth = 500 - -/obj/item/spacecash/bundle/c1000 - name = "1000 Thaler" - icon_state = "spacecash1000" - desc = "It's worth 1000 Thalers." - worth = 1000 - -/proc/spawn_money(var/sum, spawnloc, mob/living/carbon/human/human_user as mob) - if(sum in list(1000,500,200,100,50,20,10,1)) - var/cash_type = text2path("/obj/item/spacecash/bundle/c[sum]") - var/obj/cash = new cash_type (spawnloc) - if(ishuman(human_user) && !human_user.get_active_hand()) - human_user.put_in_hands(cash) - else - var/obj/item/spacecash/bundle/bundle = new (spawnloc) - bundle.worth = sum - bundle.update_icon() - if (ishuman(human_user) && !human_user.get_active_hand()) - human_user.put_in_hands(bundle) - return - -/obj/item/spacecash/ewallet - name = "Charge card" - icon_state = "efundcard" - desc = "A card that holds an amount of money." - var/owner_name = "" //So the ATM can set it so the EFTPOS can put a valid name on transactions. - -/obj/item/spacecash/ewallet/examine(mob/user, distance) - . = ..(user) - if (distance > 2 && user != loc) return - to_chat(user, "Charge card's owner: [src.owner_name]. [GLOB.using_map.local_currency_name] remaining: [src.worth].") diff --git a/code/modules/emoji/emoji_parse.dm b/code/modules/emoji/emoji_parse.dm deleted file mode 100644 index 842b648043a66..0000000000000 --- a/code/modules/emoji/emoji_parse.dm +++ /dev/null @@ -1,31 +0,0 @@ -GLOBAL_VAR_INIT(emojis, 'icons/emoji.dmi') - -/proc/emoji_parse(text, var/client/C) - if(!config.emojis) - return text - var/parsed = "" - var/pos = 1 - var/search = 0 - var/emoji = "" - var/static/list/emojis = icon_states(GLOB.emojis) - while(1) - search = findtext_char(text, ":", pos) - parsed += copytext_char(text, pos, search) - if(search) - pos = search - search = findtext_char(text, ":", pos+1) - if(search) - emoji = lowertext(copytext_char(text, pos+1, search)) - if(emoji in emojis) - parsed += icon2html(icon(GLOB.emojis, emoji), C, realsize= TRUE, incx=-16, incy=-16) - // parsed += " " - pos = search + 1 - else - parsed += copytext_char(text, pos, search) - pos = search - emoji = "" - continue - else - parsed += copytext_char(text, pos, search) - break - return parsed diff --git a/code/modules/emotes/definitions/_mob.dm b/code/modules/emotes/definitions/_mob.dm deleted file mode 100644 index 7b5e75d055b64..0000000000000 --- a/code/modules/emotes/definitions/_mob.dm +++ /dev/null @@ -1,217 +0,0 @@ -/mob/var/list/default_emotes = list() -/mob/var/list/usable_emotes = list() - -/mob/proc/update_emotes(var/skip_sort) - usable_emotes.Cut() - for(var/emote in default_emotes) - var/decl/emote/emote_datum = decls_repository.get_decl(emote) - if(emote_datum.check_user(src)) - usable_emotes[emote_datum.key] = emote_datum - if(!skip_sort) - usable_emotes = sortAssoc(usable_emotes) - -/mob/Initialize() - . = ..() - update_emotes() - -// Specific defines follow. -/mob/living/carbon/alien/default_emotes = list( - /decl/emote/visible, - /decl/emote/visible/scratch, - /decl/emote/visible/drool, - /decl/emote/visible/nod, - /decl/emote/visible/sway, - /decl/emote/visible/sulk, - /decl/emote/visible/twitch, - /decl/emote/visible/dance, - /decl/emote/visible/roll, - /decl/emote/visible/shake, - /decl/emote/visible/jump, - /decl/emote/visible/shiver, - /decl/emote/visible/collapse, - /decl/emote/audible/hiss, - /decl/emote/audible, - /decl/emote/audible/deathgasp_alien, - /decl/emote/audible/whimper, - /decl/emote/audible/gasp, - /decl/emote/visible/scratch, - /decl/emote/audible/choke, - /decl/emote/audible/moan, - /decl/emote/audible/gnarl -) - -/mob/living/carbon/alien/diona/default_emotes = list( - /decl/emote/visible, - /decl/emote/visible/scratch, - /decl/emote/visible/drool, - /decl/emote/visible/nod, - /decl/emote/visible/sway, - /decl/emote/visible/sulk, - /decl/emote/visible/twitch, - /decl/emote/visible/dance, - /decl/emote/visible/roll, - /decl/emote/visible/shake, - /decl/emote/visible/jump, - /decl/emote/visible/shiver, - /decl/emote/visible/collapse, - /decl/emote/audible/hiss, - /decl/emote/audible, - /decl/emote/audible/choke, - /decl/emote/audible/gnarl, - /decl/emote/audible/bug_hiss, - /decl/emote/audible/bug_chitter, - /decl/emote/audible/chirp -) - -/mob/living/carbon/brain/can_emote() - return (istype(container, /obj/item/device/mmi) && ..()) - -/mob/living/carbon/brain/default_emotes = list( - /decl/emote/audible/alarm, - /decl/emote/audible/alert, - /decl/emote/audible/notice, - /decl/emote/audible/whistle, - /decl/emote/audible/synth, - /decl/emote/audible/boop, - /decl/emote/visible/blink, - /decl/emote/visible/flash -) - -/mob/living/carbon/human - default_emotes = list( - /decl/emote/visible/adjust, - /decl/emote/visible/blink, - /decl/emote/visible/scratch, - /decl/emote/audible/synth, - /decl/emote/audible/synth/ping, - /decl/emote/audible/synth/buzz, - /decl/emote/audible/synth/confirm, - /decl/emote/audible/synth/deny, - /decl/emote/visible/nod, - /decl/emote/visible/shake, - /decl/emote/visible/shiver, - /decl/emote/visible/collapse, - /decl/emote/visible/salute, - /decl/emote/audible/gasp, - /decl/emote/audible/sneeze, - /decl/emote/audible/sniff, - /decl/emote/audible/snore, - /decl/emote/audible/whimper, - /decl/emote/audible/whistle, - /decl/emote/audible/yawn, - /decl/emote/audible/clap, - /decl/emote/audible/chuckle, - /decl/emote/audible/cough, - /decl/emote/audible/choke, - /decl/emote/audible/cry, - /decl/emote/audible/sigh, - /decl/emote/audible/laugh, - /decl/emote/audible/mumble, - /decl/emote/audible/grumble, - /decl/emote/audible/groan, - /decl/emote/audible/moan, - /decl/emote/audible/grunt, - /decl/emote/audible/slap, - /decl/emote/human, - /decl/emote/human/deathgasp, - /decl/emote/audible/giggle, - /decl/emote/audible/scream, - /decl/emote/visible/airguitar, - /decl/emote/visible/blink_r, - /decl/emote/visible/bow, - /decl/emote/visible/flap, - /decl/emote/visible/aflap, - /decl/emote/visible/drool, - /decl/emote/visible/eyebrow, - /decl/emote/visible/twitch, - /decl/emote/visible/twitch_v, - /decl/emote/visible/faint, - /decl/emote/visible/frown, - /decl/emote/visible/blush, - /decl/emote/visible/wave, - /decl/emote/visible/glare, - /decl/emote/visible/stare, - /decl/emote/visible/look, - /decl/emote/visible/point, - /decl/emote/visible/raise, - /decl/emote/visible/grin, - /decl/emote/visible/shrug, - /decl/emote/visible/smile, - /decl/emote/visible/pale, - /decl/emote/visible/tremble, - /decl/emote/visible/wink, - /decl/emote/visible/hug, - /decl/emote/visible/dap, - /decl/emote/visible/signal, - /decl/emote/visible/handshake, - /decl/emote/visible/afold, - /decl/emote/visible/alook, - /decl/emote/visible/eroll, - /decl/emote/visible/hbow, - /decl/emote/visible/hip, - /decl/emote/visible/holdup, - /decl/emote/visible/hshrug, - /decl/emote/visible/crub, - /decl/emote/visible/erub, - /decl/emote/visible/fslap, - /decl/emote/visible/ftap, - /decl/emote/visible/hrub, - /decl/emote/visible/hspread, - /decl/emote/visible/pocket, - /decl/emote/visible/rsalute, - /decl/emote/visible/rshoulder, - /decl/emote/visible/squint, - /decl/emote/visible/tfist, - /decl/emote/visible/tilt, -//[INF], - /decl/emote/audible/finger_snap, -//[/INF], - ) - -/mob/living/silicon/robot - default_emotes = list( - /decl/emote/audible/clap, - /decl/emote/visible/bow, - /decl/emote/visible/twitch, - /decl/emote/visible/twitch_v, - /decl/emote/visible/nod, - /decl/emote/visible/shake, - /decl/emote/visible/glare, - /decl/emote/visible/look, - /decl/emote/visible/stare, - /decl/emote/visible/deathgasp_robot, - /decl/emote/audible/synth, - /decl/emote/audible/synth/ping, - /decl/emote/audible/synth/buzz, - /decl/emote/audible/synth/confirm, - /decl/emote/audible/synth/deny, - /decl/emote/audible/synth/security, - /decl/emote/audible/synth/security/halt - ) - -/mob/living/carbon/slime - default_emotes = list( - /decl/emote/audible/moan, - /decl/emote/visible/twitch, - /decl/emote/visible/sway, - /decl/emote/visible/shiver, - /decl/emote/visible/bounce, - /decl/emote/visible/jiggle, - /decl/emote/visible/lightup, - /decl/emote/visible/vibrate, - /decl/emote/slime, - /decl/emote/slime/pout, - /decl/emote/slime/sad, - /decl/emote/slime/angry, - /decl/emote/slime/frown, - /decl/emote/slime/smile - ) - -/mob/living/silicon/pai - default_emotes = list( - /decl/emote/audible/synth, - /decl/emote/audible/synth/ping, - /decl/emote/audible/synth/buzz, - /decl/emote/audible/synth/confirm, - /decl/emote/audible/synth/deny - ) diff --git a/code/modules/emotes/definitions/_species.dm b/code/modules/emotes/definitions/_species.dm deleted file mode 100644 index 0188d70d42d14..0000000000000 --- a/code/modules/emotes/definitions/_species.dm +++ /dev/null @@ -1,83 +0,0 @@ -/datum/species - var/list/default_emotes = list() - -/mob/living/carbon/update_emotes() - . = ..(skip_sort=1) - if(species) - for(var/emote in species.default_emotes) - var/decl/emote/emote_datum = decls_repository.get_decl(emote) - if(emote_datum.check_user(src)) - usable_emotes[emote_datum.key] = emote_datum - usable_emotes = sortAssoc(usable_emotes) - -// Specific defines follow. -/datum/species/slime - default_emotes = list( - /decl/emote/visible/bounce, - /decl/emote/visible/jiggle, - /decl/emote/visible/lightup, - /decl/emote/visible/vibrate - ) - -/datum/species/unathi - default_emotes = list( - /decl/emote/human/swish, - /decl/emote/human/wag, - /decl/emote/human/sway, - /decl/emote/human/qwag, - /decl/emote/human/fastsway, - /decl/emote/human/swag, - /decl/emote/human/stopsway, - /decl/emote/audible/lizard_bellow - ) - -/datum/species/unathi/yeosa - default_emotes = list( - /decl/emote/human/swish, - /decl/emote/human/wag, - /decl/emote/human/sway, - /decl/emote/human/qwag, - /decl/emote/human/fastsway, - /decl/emote/human/swag, - /decl/emote/human/stopsway, - /decl/emote/audible/lizard_bellow, - /decl/emote/audible/lizard_squeal - ) - -/datum/species/nabber - default_emotes = list( - /decl/emote/audible/bug_hiss, - /decl/emote/audible/bug_buzz, - /decl/emote/audible/bug_chitter - ) - -/datum/species/monkey - default_emotes = list( - /decl/emote/audible/scream/monkey - ) - -/datum/species/adherent - default_emotes = list( - /decl/emote/audible/adherent_chime, - /decl/emote/audible/adherent_ding - ) - -/datum/species/vox - default_emotes = list( - /decl/emote/audible/vox_shriek - ) - -/datum/species/vox/armalis/default_emotes = list( - /decl/emote/audible/vox_shriek, - /decl/emote/audible/armalis_shriek -) - -/datum/species/diona - default_emotes = list( - /decl/emote/audible/chirp, - /decl/emote/audible/multichirp - ) - -/mob/living/carbon/human/set_species(var/new_species, var/default_colour = 1) - UNLINT(. = ..()) - update_emotes() diff --git a/code/modules/emotes/definitions/adherent.dm b/code/modules/emotes/definitions/adherent.dm deleted file mode 100644 index 3b630f7003d63..0000000000000 --- a/code/modules/emotes/definitions/adherent.dm +++ /dev/null @@ -1,9 +0,0 @@ -/decl/emote/audible/adherent_ding - key = "ding" - emote_message_3p = "USER звенит." - emote_sound = 'sound/effects/ding2.ogg' - -/decl/emote/audible/adherent_chime - key = "chime" - emote_message_3p = "USER издаёт колокольный звон." - emote_sound = 'sound/voice/chime.ogg' diff --git a/code/modules/emotes/definitions/audible.dm b/code/modules/emotes/definitions/audible.dm deleted file mode 100644 index a1f8d7d84c70d..0000000000000 --- a/code/modules/emotes/definitions/audible.dm +++ /dev/null @@ -1,301 +0,0 @@ -/decl/emote/audible - key = "burp" - emote_message_3p = "USER отрыгается." - message_type = AUDIBLE_MESSAGE - -/decl/emote/audible/deathgasp_alien - key = "deathgasp" - emote_message_3p = "USER издает слабеющий гортанный визг, зеленая кровь пузырится из его пасти." - -/decl/emote/audible/gasp - key ="gasp" - emote_message_3p = "USER задыхается!" - conscious = 0 - -/decl/emote/audible/choke - key ="choke" - emote_message_3p = "USER давится!" - conscious = 0 - -/decl/emote/audible/gnarl - key ="gnarl" - emote_message_3p = "USER скалится и показывает свои зубы." - -/decl/emote/audible/chirp - key ="chirp" - emote_message_3p = "USER щебечет!" - emote_sound = 'sound/misc/nymphchirp.ogg' - -/decl/emote/audible/multichirp - key ="mchirp" - emote_message_3p = "USER щебечет хор нот!" - emote_sound = 'sound/misc/multichirp.ogg' - -/decl/emote/audible/alarm - key = "alarm" - emote_message_1p = "You подал сигнал тревоги." - emote_message_3p = "USER подаёт сигнал тревоги." - -/decl/emote/audible/alert - key = "alert" - emote_message_1p = "You издаёте огорченный звук." - emote_message_3p = "USER издал огорченный звук." - -/decl/emote/audible/notice - key = "notice" - emote_message_1p = "You включаете громкий сигнал." - emote_message_3p = "USER проигрывает громкий сигнал." - -/decl/emote/audible/whistle - key = "whistle" - emote_message_1p = "Вы свистите!" - emote_message_3p = "USER свистит!" - -/decl/emote/audible/boop - key = "boop" - emote_message_1p = "You boop." - emote_message_3p = "USER boops." - -/decl/emote/audible/sneeze - key = "sneeze" - emote_message_3p = "USER чихает!" - -/decl/emote/audible/sniff - key = "sniff" - emote_message_3p = "USER нюхает." - -/decl/emote/audible/snore - key = "snore" - emote_message_3p = "USER храпит." - conscious = 0 - -/decl/emote/audible/whimper - key = "whimper" - emote_message_3p = "USER хнычет." - -/decl/emote/audible/yawn - key = "yawn" - emote_message_3p = "USER зевает." - -/decl/emote/audible/clap - key = "clap" - emote_message_3p = "USER хлопает." - -/decl/emote/audible/chuckle - key = "chuckle" - emote_message_3p = "USER усмехается." - -/decl/emote/audible/cough - key = "cough" - emote_message_3p = "USER кашляет!" - conscious = 0 - -/decl/emote/audible/cry - key = "cry" - emote_message_3p = "USER плачет..." - -/decl/emote/audible/sigh - key = "sigh" - emote_message_3p = "USER вздыхает." - -/decl/emote/audible/laugh - key = "laugh" - emote_message_3p = "USER смеется!" - emote_message_3p_target = "USER смеется над TARGET!" - -/decl/emote/audible/mumble - key = "mumble" - emote_message_3p = "USER бормочет." - -/decl/emote/audible/grumble - key = "grumble" - emote_message_3p = "USER бурчит." - -/decl/emote/audible/groan - key = "groan" - emote_message_3p = "USER болезненно стонет!" - conscious = 0 - -/decl/emote/audible/moan - key = "moan" - emote_message_3p = "USER стонет!" - conscious = 0 - -/decl/emote/audible/giggle - key = "giggle" - emote_message_3p = "USER хихикает." - -/decl/emote/audible/finger_snap - key = "snap" - emote_message_3p = "USER щёлкает пальцами." - emote_sound = 'sound/voice/emotes/fingersnap.ogg' - -/decl/emote/audible/scream - key = "scream" - emote_message_3p = "USER кричит!" - -/decl/emote/audible/grunt - key = "grunt" - emote_message_3p = "USER ворчит." - -/decl/emote/audible/slap - key = "slap" - emote_message_1p_target = "Ты бьёшь TARGET по лицу!" - emote_message_1p = "Ты бьёшь себя по лицу!" - emote_message_3p_target = "USER бьёт TARGET по лицу!" - emote_message_3p = "USER бьёт USER_SELF по лицу!" - emote_sound = 'sound/effects/snap.ogg' - check_restraints = TRUE - check_range = 1 - -/decl/emote/audible/bug_hiss - key ="hiss" - emote_message_3p_target = "USER шипит на TARGET!" - emote_message_3p = "USER шипит!" - emote_sound = 'sound/voice/BugHiss.ogg' - -/decl/emote/audible/bug_buzz - key ="buzz" - emote_message_3p = "USER жужжит." - emote_sound = 'sound/voice/BugBuzz.ogg' - -/decl/emote/audible/bug_chitter - key ="chitter" - emote_message_3p = "USER верещит!" - emote_sound = 'sound/voice/Bug.ogg' - -/decl/emote/audible/vox_shriek - key ="shriek" - emote_message_3p = "USER ВИЗЖИТ!" - emote_sound = 'sound/voice/shriek1.ogg' - -/decl/emote/audible/roar - key = "roar" - emote_message_3p = "USER рычит!" - -/decl/emote/audible/bellow - key = "bellow" - emote_message_3p = "USER bellows!" - -/decl/emote/audible/howl - key = "howl" - emote_message_3p = "USER воет!" - -/decl/emote/audible/wheeze - key = "wheeze" - emote_message_3p = "USER хрипит." - -/decl/emote/audible/hiss - key ="hiss_" - emote_message_3p_target = "USER тихо шипит на TARGET." - emote_message_3p = "USER тихо шипит." - -/decl/emote/audible/lizard_bellow - key = "bellow" - emote_message_3p_target = "USER bellows deeply at TARGET!" - emote_message_3p = "USER bellows!" - emote_sound = 'sound/voice/LizardBellow.ogg' - -/decl/emote/audible/lizard_squeal - key = "squeal" - emote_message_3p = "USER пищит." - emote_sound = 'sound/voice/LizardSqueal.ogg' - -/decl/emote/audible/gasp - emote_sound = list( - MALE = list( - 'sound/voice/emotes/gasp_male1.ogg', 'sound/voice/emotes/gasp_male2.ogg', - 'sound/voice/emotes/gasp_male3.ogg', 'sound/voice/emotes/gasp_male4.ogg', - 'sound/voice/emotes/gasp_male5.ogg', 'sound/voice/emotes/gasp_male6.ogg', - 'sound/voice/emotes/gasp_male7.ogg'), - FEMALE = list( - 'sound/voice/emotes/gasp_female1.ogg', 'sound/voice/emotes/gasp_female2.ogg', - 'sound/voice/emotes/gasp_female3.ogg', 'sound/voice/emotes/gasp_female4.ogg', - 'sound/voice/emotes/gasp_female5.ogg', 'sound/voice/emotes/gasp_female6.ogg', - 'sound/voice/emotes/gasp_female7.ogg')) - sounded_species = list(SPECIES_HUMAN, SPECIES_VATGROWN, SPECIES_SPACER, SPECIES_TRITONIAN, SPECIES_GRAVWORLDER, - SPECIES_MULE, SPECIES_SHELL, - SPECIES_UNATHI, SPECIES_YEOSA, SPECIES_VOX, SPECIES_SKRELL) - -/decl/emote/audible/whistle - emote_sound = 'sound/voice/emotes/whistle.ogg' - sounded_species = list(SPECIES_HUMAN, SPECIES_VATGROWN, SPECIES_SPACER, SPECIES_TRITONIAN, SPECIES_GRAVWORLDER, - SPECIES_MULE, - SPECIES_UNATHI, SPECIES_YEOSA, SPECIES_VOX, SPECIES_IPC, SPECIES_SHELL, - SPECIES_SKRELL) - -/decl/emote/audible/sneeze - emote_sound = list( - MALE = list('sound/voice/emotes/sneeze_male_1.ogg', 'sound/voice/emotes/sneeze_male_2.ogg'), - FEMALE = list('sound/voice/emotes/sneeze_female_1.ogg', 'sound/voice/emotes/sneeze_female_2.ogg')) - sounded_species = SOUNDED_SPECIES - -/decl/emote/audible/snore - emote_sound = list( - 'sound/voice/emotes/snore_1.ogg', 'sound/voice/emotes/snore_2.ogg', - 'sound/voice/emotes/snore_3.ogg', 'sound/voice/emotes/snore_4.ogg', - 'sound/voice/emotes/snore_5.ogg', 'sound/voice/emotes/snore_6.ogg', - 'sound/voice/emotes/snore_7.ogg') - sounded_species = list(SPECIES_HUMAN, SPECIES_VATGROWN, SPECIES_SPACER, SPECIES_TRITONIAN, SPECIES_GRAVWORLDER, - SPECIES_MULE, SPECIES_SHELL, - SPECIES_UNATHI, SPECIES_YEOSA, SPECIES_VOX, SPECIES_SKRELL) - -/decl/emote/audible/yawn - emote_sound = list( - MALE = list('sound/voice/emotes/yawn_male_1.ogg', 'sound/voice/emotes/yawn_male_2.ogg'), - FEMALE = list('sound/voice/emotes/yawn_female_1.ogg', 'sound/voice/emotes/yawn_female_2.ogg', - 'sound/voice/emotes/yawn_female_3.ogg')) - sounded_species = SOUNDED_SPECIES - -/decl/emote/audible/clap - emote_sound = 'sound/voice/emotes/clap.ogg' - -/decl/emote/audible/cough - emote_sound = list( - MALE = 'sound/voice/emotes/cough_male.ogg', - FEMALE = 'sound/voice/emotes/cough_female.ogg') - sounded_species = list(SPECIES_HUMAN, SPECIES_VATGROWN, SPECIES_SPACER, SPECIES_TRITONIAN, SPECIES_GRAVWORLDER, - SPECIES_MULE, SPECIES_SHELL, - SPECIES_UNATHI, SPECIES_YEOSA, SPECIES_VOX, SPECIES_SKRELL) - -/decl/emote/audible/cry - emote_sound = list( - MALE = list('sound/voice/emotes/cry_male_1.ogg', 'sound/voice/emotes/cry_male_2.ogg'), - FEMALE = list('sound/voice/emotes/cry_female_1.ogg', 'sound/voice/emotes/cry_female_2.ogg', - 'sound/voice/emotes/cry_female_3.ogg')) - sounded_species = SOUNDED_SPECIES - -/decl/emote/audible/sigh - emote_sound = list( - MALE = 'sound/voice/emotes/sigh_male.ogg', - FEMALE = 'sound/voice/emotes/sigh_female.ogg') - sounded_species = list(SPECIES_HUMAN, SPECIES_VATGROWN, SPECIES_SPACER, SPECIES_TRITONIAN, SPECIES_GRAVWORLDER, - SPECIES_MULE, SPECIES_SHELL, - SPECIES_UNATHI, SPECIES_YEOSA, SPECIES_VOX, SPECIES_SKRELL) - -/decl/emote/audible/laugh - emote_sound = list( - MALE = list('sound/voice/emotes/laugh_male_1.ogg', 'sound/voice/emotes/laugh_male_2.ogg', 'sound/voice/emotes/laugh_male_3.ogg'), - FEMALE = list('sound/voice/emotes/laugh_female_1.ogg', 'sound/voice/emotes/laugh_female_2.ogg', 'sound/voice/emotes/laugh_female_3.ogg')) - sounded_species = SOUNDED_SPECIES - -/decl/emote/audible/giggle - emote_sound = list( - MALE = 'sound/voice/emotes/giggle_male_2.ogg', - FEMALE = 'sound/voice/emotes/giggle_female_3.ogg') - sounded_species = SOUNDED_SPECIES - -/decl/emote/audible/scream - emote_sound = list( - MALE = list('sound/voice/emotes/scream_male_1.ogg', 'sound/voice/emotes/scream_male_2.ogg', - 'sound/voice/emotes/scream_male_3.ogg'), - FEMALE = list('sound/voice/emotes/scream_female_1.ogg', 'sound/voice/emotes/scream_female_2.ogg')) - sounded_species = SOUNDED_SPECIES - -/decl/emote/audible/scream/monkey - emote_sound = list( - 'sound/voice/emotes/pain_monkey_1.ogg', - 'sound/voice/emotes/pain_monkey_2.ogg', - 'sound/voice/emotes/pain_monkey_3.ogg' - ) - sounded_species = null diff --git a/code/modules/emotes/definitions/exertion.dm b/code/modules/emotes/definitions/exertion.dm deleted file mode 100644 index 35bb484eb3860..0000000000000 --- a/code/modules/emotes/definitions/exertion.dm +++ /dev/null @@ -1,41 +0,0 @@ - -/decl/emote/exertion/biological - key = "esweat" - emote_range = 4 - emote_message_1p = "Вы сильно потеете." - emote_message_3p = "USER сильно потеет." - -/decl/emote/exertion/biological/check_user(mob/living/user) - if(istype(user) && !user.isSynthetic()) - return ..() - return FALSE - -/decl/emote/exertion/biological/breath - key = "ebreath" - emote_message_1p = "You feel out of breath." - emote_message_3p = "USER looks out of breath." - -/decl/emote/exertion/biological/pant - key = "epant" - emote_range = 3 - message_type = AUDIBLE_MESSAGE - emote_message_1p = "You pant to catch your breath." - emote_message_3p = "USER pants for air." - emote_message_impaired = "You can see USER breathing heavily." - -/decl/emote/exertion/synthetic - key = "ewhine" - emote_range = 3 - message_type = AUDIBLE_MESSAGE - emote_message_1p = "Вы перегрузили свои приводы." - emote_message_3p = "USER's приводы становятся белыми от напряжения." - -/decl/emote/exertion/synthetic/check_user(mob/living/user) - if(istype(user) && user.isSynthetic()) - return ..() - return FALSE - -/decl/emote/exertion/synthetic/creak - key = "ecreak" - emote_message_1p = "Показатели нагрузки на шасси резко возрастают." - emote_message_3p = "USER's joints creak with stress." diff --git a/code/modules/emotes/definitions/human.dm b/code/modules/emotes/definitions/human.dm deleted file mode 100644 index 675e1e8a00c7c..0000000000000 --- a/code/modules/emotes/definitions/human.dm +++ /dev/null @@ -1,56 +0,0 @@ -/decl/emote/human - key = "vomit" - -/decl/emote/human/check_user(var/mob/living/carbon/human/user) - return (istype(user) && user.check_has_mouth() && !user.isSynthetic()) - -/decl/emote/human/do_emote(var/mob/living/carbon/human/user) - user.vomit() - -/decl/emote/human/deathgasp - key = "deathgasp" - -/decl/emote/human/deathgasp/get_emote_message_3p(var/mob/living/carbon/human/user) - return "USER [user.species.get_death_message()]" - -/decl/emote/human/swish - key = "swish" - -/decl/emote/human/swish/do_emote(var/mob/living/carbon/human/user) - user.animate_tail_once() - -/decl/emote/human/wag - key = "wag" - -/decl/emote/human/wag/do_emote(var/mob/living/carbon/human/user) - user.animate_tail_start() - -/decl/emote/human/sway - key = "sway" - -/decl/emote/human/sway/do_emote(var/mob/living/carbon/human/user) - user.animate_tail_start() - -/decl/emote/human/qwag - key = "qwag" - -/decl/emote/human/qwag/do_emote(var/mob/living/carbon/human/user) - user.animate_tail_fast() - -/decl/emote/human/fastsway - key = "fastsway" - -/decl/emote/human/fastsway/do_emote(var/mob/living/carbon/human/user) - user.animate_tail_fast() - -/decl/emote/human/swag - key = "swag" - -/decl/emote/human/swag/do_emote(var/mob/living/carbon/human/user) - user.animate_tail_stop() - -/decl/emote/human/stopsway - key = "stopsway" - -/decl/emote/human/stopsway/do_emote(var/mob/living/carbon/human/user) - user.animate_tail_stop() diff --git a/code/modules/emotes/definitions/slime.dm b/code/modules/emotes/definitions/slime.dm deleted file mode 100644 index a8114305701af..0000000000000 --- a/code/modules/emotes/definitions/slime.dm +++ /dev/null @@ -1,30 +0,0 @@ -/decl/emote/slime - key = "nomood" - var/mood - -/decl/emote/slime/do_extra(var/mob/living/carbon/slime/user) - user.mood = mood - user.regenerate_icons() - -/decl/emote/slime/check_user(var/atom/user) - return istype(user, /mob/living/carbon/slime) - -/decl/emote/slime/pout - key = "pout" - mood = "pout" - -/decl/emote/slime/sad - key = "sad" - mood = "sad" - -/decl/emote/slime/angry - key = "angry" - mood = "angry" - -/decl/emote/slime/frown - key = "frown" - mood = "mischevous" - -/decl/emote/slime/smile - key = "smile" - mood = ":3" diff --git a/code/modules/emotes/definitions/synthetics.dm b/code/modules/emotes/definitions/synthetics.dm deleted file mode 100644 index 8f4a67245210f..0000000000000 --- a/code/modules/emotes/definitions/synthetics.dm +++ /dev/null @@ -1,43 +0,0 @@ -/decl/emote/audible/synth - key = "beep" - emote_message_3p = "USER пиликает." - emote_sound = 'sound/machines/twobeep.ogg' - -/decl/emote/audible/synth/check_user(var/mob/living/user) - if(istype(user) && user.isSynthetic()) - return ..() - return FALSE - -/decl/emote/audible/synth/ping - key = "ping" - emote_message_3p = "USER издаёт сигнал запроса." - emote_sound = 'sound/machines/ping.ogg' - -/decl/emote/audible/synth/buzz - key = "buzz" - emote_message_3p = "USER издает жужжащие звуки." - emote_sound = 'sound/machines/buzz-sigh.ogg' - -/decl/emote/audible/synth/confirm - key = "confirm" - emote_message_3p = "USER посылает положительный сигнал." - emote_sound = 'sound/machines/synth_yes.ogg' - -/decl/emote/audible/synth/deny - key = "deny" - emote_message_3p = "USER посылает отрицательный сигнал." - emote_sound = 'sound/machines/synth_no.ogg' - -/decl/emote/audible/synth/security - key = "law" - emote_message_3p = "USER shows USER_HIS legal authorization barcode." - emote_message_3p_target = "USER shows TARGET USER_THEIR legal authorization barcode." - emote_sound = 'sound/voice/biamthelaw.ogg' - -/decl/emote/audible/synth/security/check_user(var/mob/living/silicon/robot/user) - return (istype(user) && istype(user.module,/obj/item/robot_module/security)) - -/decl/emote/audible/synth/security/halt - key = "halt" - emote_message_3p = "USER's speakers skreech, \"Halt! Security!\"." - emote_sound = 'sound/voice/halt.ogg' diff --git a/code/modules/emotes/definitions/visible.dm b/code/modules/emotes/definitions/visible.dm deleted file mode 100644 index 73b067c031790..0000000000000 --- a/code/modules/emotes/definitions/visible.dm +++ /dev/null @@ -1,346 +0,0 @@ -/decl/emote/visible - key ="tail" - emote_message_3p = "USER виляет своим хвостом." - message_type = VISIBLE_MESSAGE - -/decl/emote/visible/scratch - key = "scratch" - check_restraints = TRUE - emote_message_3p = "USER почёсывается." - -/decl/emote/visible/drool - key ="drool" - emote_message_3p = "USER неразборчиво бурчит." - conscious = 0 - -/decl/emote/visible/nod - key ="nod" - emote_message_3p = "USER кивает." - -/decl/emote/visible/sway - key ="sway" - emote_message_3p = "USER шатается." - -/decl/emote/visible/sulk - key ="sulk" - emote_message_3p = "USER грустно садится..." - -/decl/emote/visible/dance - key ="dance" - check_restraints = TRUE - emote_message_3p = "USER танцует!" - -/decl/emote/visible/roll - key ="roll" - check_restraints = TRUE - emote_message_3p = "USER катается." - -/decl/emote/visible/shake - key ="shake" - emote_message_3p = "USER трясет головой." - -/decl/emote/visible/jump - key ="jump" - emote_message_3p = "USER прыгает!" - -/decl/emote/visible/hiss - key ="hiss_" - emote_message_3p = "USER мягко шипит..." - emote_message_3p_target = "USER мягко шипит на TARGET..." - -/decl/emote/visible/shiver - key ="shiver" - emote_message_3p = "USER дрожит." - conscious = 0 - -/decl/emote/visible/collapse - key ="collapse" - emote_message_3p = "USER падает!" - -/decl/emote/visible/collapse/do_extra(var/mob/user) - if(istype(user)) - user.Paralyse(2) - -/decl/emote/visible/flash - key = "flash" - emote_message_3p = "Индикаторы на дисплее USER быстро мигают." - -/decl/emote/visible/blink - key = "blink" - emote_message_3p = "USER моргает." - -/decl/emote/visible/airguitar - key = "airguitar" - check_restraints = TRUE - emote_message_3p = "USER бренчит в воздухе и мотает головой, как шимпанзе на сафари." - -/decl/emote/visible/blink_r - key = "blink_r" - emote_message_3p = "USER быстро моргает!" - -/decl/emote/visible/bow - key = "bow" - emote_message_3p_target = "USER делает поклон TARGET." - emote_message_3p = "USER делает поклон." - -/decl/emote/visible/salute - key = "salute" - emote_message_3p_target = "USER выполняет воинское приветствие TARGET." - emote_message_3p = "USER выполняет воинское приветствие." - check_restraints = TRUE - -/decl/emote/visible/flap - key = "flap" - check_restraints = TRUE - emote_message_3p = "USER машет крыльями." - -/decl/emote/visible/aflap - key = "aflap" - check_restraints = TRUE - emote_message_3p = "USER агрессивно машет крыльями!" - -/decl/emote/visible/eyebrow - key = "eyebrow" - emote_message_3p = "USER приподнимает бровь." - -/decl/emote/visible/twitch - key = "twitch" - emote_message_3p = "USER дергается." - conscious = 0 - -/decl/emote/visible/twitch_v - key = "twitch_v" - emote_message_3p = "USER сильно дергается!" - conscious = 0 - -/decl/emote/visible/faint - key = "faint" - emote_message_3p = "USER падает в обморок!" - -/decl/emote/visible/faint/do_extra(var/mob/user) - if(istype(user) && user.sleeping <= 0) - user.sleeping += 10 - -/decl/emote/visible/frown - key = "frown" - emote_message_3p = "USER хмурится." - -/decl/emote/visible/blush - key = "blush" - emote_message_3p = "USER краснеет..." - -/decl/emote/visible/wave - key = "wave" - emote_message_3p = "USER машет." - emote_message_3p_target = "USER машет TARGET." - check_restraints = TRUE - -/decl/emote/visible/glare - key = "glare" - emote_message_3p = "USER недовольно смотрит на TARGET." - emote_message_3p = "USER недовольно смотрит." - -/decl/emote/visible/stare - key = "stare" - emote_message_3p = "USER пялится на TARGET." - emote_message_3p = "USER пялится." - -/decl/emote/visible/look - key = "look" - emote_message_3p = "USER смотрит на TARGET." - emote_message_3p = "USER смотрит." - -/decl/emote/visible/point - key = "point" - check_restraints = TRUE - emote_message_3p = "USER показывает пальцем." - emote_message_3p_target = "USER показывает пальцем на TARGET." - -/decl/emote/visible/raise - key = "raise" - check_restraints = TRUE - emote_message_3p = "USER поднимает руку." - -/decl/emote/visible/grin - key = "grin" - emote_message_3p = "USER скалится в улыбке." - -/decl/emote/visible/shrug - key = "shrug" - emote_message_3p = "USER пожимает плечами." - -/decl/emote/visible/smile - key = "smile" - emote_message_3p = "USER улыбается." - emote_message_3p_target = "USER улыбается TARGET." - -/decl/emote/visible/pale - key = "pale" - emote_message_3p = "USER на секунду бледнеет..." - -/decl/emote/visible/tremble - key = "tremble" - emote_message_3p = "USER трепещет в страхе!" - -/decl/emote/visible/wink - key = "wink" - emote_message_3p = "USER подмигивает." - emote_message_3p_target = "USER подмигивает TARGET." - -/decl/emote/visible/hug - key = "hug" - check_restraints = TRUE - emote_message_3p_target = "USER обнимает TARGET!" - emote_message_3p = "USER обнимает USER_SELF!" - check_range = 1 - -/decl/emote/visible/dap - key = "dap" - check_restraints = TRUE - emote_message_3p_target = "USER gives daps to TARGET." - emote_message_3p = "USER sadly can't find anybody to give daps to, and daps USER_SELF." - -/decl/emote/visible/bounce - key = "bounce" - emote_message_3p = "USER прыгает на месте!" - -/decl/emote/visible/jiggle - key = "jiggle" - emote_message_3p = "USER покачивается..." - -/decl/emote/visible/lightup - key = "light" - emote_message_3p = "USER загорается на некоторое время, затем прекращая светиться." - -/decl/emote/visible/vibrate - key = "vibrate" - emote_message_3p = "USER вибрирует!" - -/decl/emote/visible/deathgasp_robot - key = "deathgasp" - emote_message_3p = "USER shudders violently for a moment, then becomes motionless, USER_THEIR eyes slowly darkening." - -/decl/emote/visible/handshake - key = "handshake" - check_restraints = TRUE - emote_message_3p_target = "USER shakes hands with TARGET." - emote_message_3p = "USER shakes hands with USER_SELF." - check_range = 1 - -/decl/emote/visible/handshake/get_emote_message_3p(var/atom/user, var/atom/target, var/extra_params) - if(target && !user.Adjacent(target)) - return "USER holds out USER_THEIR hand out to TARGET." - return ..() - -/decl/emote/visible/signal - key = "signal" - emote_message_3p_target = "USER сигнализирует рукой TARGET." - emote_message_3p = "USER подаёт сигналы рукой." - check_restraints = TRUE - -/decl/emote/visible/signal/check_user(atom/user) - return ismob(user) - -/decl/emote/visible/signal/get_emote_message_3p(var/mob/user, var/atom/target, var/extra_params) - if(istype(user) && !(user.r_hand && user.l_hand)) - var/t1 = round(text2num(extra_params)) - if(isnum(t1) && t1 <= 5) - return "USER raises [t1] finger\s." - return .. () - -/decl/emote/visible/afold - key = "afold" - check_restraints = TRUE - emote_message_3p = "USER folds USER_THEIR arms." - -/decl/emote/visible/alook - key = "alook" - emote_message_3p = "USER отводит взгляд." - -/decl/emote/visible/hbow - key = "hbow" - emote_message_3p = "USER bows USER_THEIR head." - -/decl/emote/visible/hip - key = "hip" - check_restraints = TRUE - emote_message_3p = "USER puts USER_THEIR hands on USER_THEIR hips." - -/decl/emote/visible/holdup - key = "holdup" - check_restraints = TRUE - emote_message_3p = "USER holds up USER_THEIR palms." - -/decl/emote/visible/hshrug - key = "hshrug" - emote_message_3p = "USER слегка пожимает плечами." - -/decl/emote/visible/crub - key = "crub" - check_restraints = TRUE - emote_message_3p = "USER rubs USER_THEIR chin." - -/decl/emote/visible/eroll - key = "eroll" - emote_message_3p = "USER rolls USER_THEIR eyes." - emote_message_3p_target = "USER rolls USER_THEIR eyes at TARGET." - -/decl/emote/visible/erub - key = "erub" - check_restraints = TRUE - emote_message_3p = "USER rubs USER_THEIR eyes." - -/decl/emote/visible/fslap - key = "fslap" - check_restraints = TRUE - emote_message_3p = "USER slaps USER_THEIR forehead." - -/decl/emote/visible/ftap - key = "ftap" - emote_message_3p = "USER taps USER_THEIR foot." - -/decl/emote/visible/hrub - key = "hrub" - check_restraints = TRUE - emote_message_3p = "USER rubs USER_THEIR hands together." - -/decl/emote/visible/hspread - key = "hspread" - check_restraints = TRUE - emote_message_3p = "USER spreads USER_THEIR hands." - -/decl/emote/visible/pocket - key = "pocket" - check_restraints = TRUE - emote_message_3p = "USER shoves USER_THEIR hands in USER_THEIR pockets." - -/decl/emote/visible/rsalute - key = "rsalute" - check_restraints = TRUE - emote_message_3p = "USER отвечает на воинское приветствие." - -/decl/emote/visible/rshoulder - key = "rshoulder" - emote_message_3p = "USER rolls USER_THEIR shoulders." - -/decl/emote/visible/squint - key = "squint" - emote_message_3p = "USER прищуривается." - emote_message_3p_target = "USER прищуривается на TARGET." - -/decl/emote/visible/tfist - key = "tfist" - emote_message_3p = "USER tightens USER_THEIR hands into fists." - -/decl/emote/visible/tilt - key = "tilt" - emote_message_3p = "USER tilts USER_THEIR head." - -/decl/emote/visible/salute - emote_sound = 'sound/effects/salute.ogg' - -/decl/emote/visible/adjust - key = "adjust" - check_restraints = TRUE - emote_message_3p = "USER поправляет одежду." - emote_message_3p_target = "USER поправляет одежду TARGET." \ No newline at end of file diff --git a/code/modules/emotes/definitions/vox.dm b/code/modules/emotes/definitions/vox.dm deleted file mode 100644 index b5f7c2d812f5f..0000000000000 --- a/code/modules/emotes/definitions/vox.dm +++ /dev/null @@ -1,9 +0,0 @@ -/decl/emote/audible/vox_shriek - key ="shriek" - emote_message_3p = "USER ВИЗЖИТ!" - emote_sound = 'sound/voice/shriek1.ogg' - -/decl/emote/audible/armalis_shriek - key ="ashriek" - emote_message_3p = "USER ужасающе ВИЗЖИТ!" - emote_sound = 'sound/voice/ashriek.ogg' diff --git a/code/modules/emotes/emote_define.dm b/code/modules/emotes/emote_define.dm deleted file mode 100644 index 50f4a9f510b6c..0000000000000 --- a/code/modules/emotes/emote_define.dm +++ /dev/null @@ -1,140 +0,0 @@ -// Note about emote messages: -// - USER / TARGET will be replaced with the relevant name, in bold. -// - USER_THEM / TARGET_THEM / USER_THEIR / TARGET_THEIR will be replaced with a -// gender-appropriate version of the same. -// - Impaired messages do not do any substitutions. - -/decl/emote - - var/key // Command to use emote ie. '*[key]' - var/emote_message_1p // First person message ('You do a flip!') - var/emote_message_3p // Third person message ('Urist McShitter does a flip!') - var/emote_message_impaired // Deaf/blind message ('You hear someone flipping out.', 'You see someone opening and closing their mouth') - - var/emote_message_1p_target // 'You do a flip at Urist McTarget!' - var/emote_message_3p_target // 'Urist McShitter does a flip at Urist McTarget!' - - var/list/emote_sound = null - // three-dimensional array - // first is the species, associated to a list of genders, associated to a list of the sound effects to use - var/list/sounded_species = null - - var/message_type = VISIBLE_MESSAGE // Audible/visual flag - var/targetted_emote // Whether or not this emote needs a target. - var/check_restraints // Can this emote be used while restrained? - var/check_range // falsy, or a range outside which the emote will not work - var/conscious = TRUE // Do we need to be awake to emote this? - var/emote_range // falsy, or a range outside which the emote is not shown - -/decl/emote/proc/get_emote_message_1p(var/atom/user, var/atom/target, var/extra_params) - if(target) - return emote_message_1p_target - return emote_message_1p - -/decl/emote/proc/get_emote_message_3p(var/atom/user, var/atom/target, var/extra_params) - if(target) - return emote_message_3p_target - return emote_message_3p - -/decl/emote/proc/do_emote(var/atom/user, var/extra_params) - - if(ismob(user) && check_restraints) - var/mob/M = user - if(M.restrained()) - to_chat(user, "You are restrained and cannot do that.") - return - - var/atom/target - if(can_target() && extra_params) - extra_params = lowertext(extra_params) - for(var/atom/thing in view(user)) - if(extra_params == lowertext(thing.name)) - target = thing - break - - if (targetted_emote && !target) - to_chat(user, SPAN_WARNING("You can't do that to thin air.")) - return - - if (target && target != user && check_range) - if (get_dist(user, target) > check_range) - to_chat(user, SPAN_WARNING("\The [target] is too far away.")) - return - - var/datum/gender/user_gender = gender_datums[user.get_visible_gender()] - var/datum/gender/target_gender - if(target) - target_gender = gender_datums[target.get_visible_gender()] - - var/use_3p - var/use_1p - if(emote_message_1p) - if(target && emote_message_1p_target) - use_1p = get_emote_message_1p(user, target, extra_params) - use_1p = replacetext_char(use_1p, "TARGET_THEM", target_gender.him) - use_1p = replacetext_char(use_1p, "TARGET_THEIR", target_gender.his) - use_1p = replacetext_char(use_1p, "TARGET_SELF", target_gender.self) - use_1p = replacetext_char(use_1p, "TARGET", "\the [target]") - else - use_1p = get_emote_message_1p(user, null, extra_params) - use_1p = capitalize(use_1p) - - if(emote_message_3p) - if(target && emote_message_3p_target) - use_3p = get_emote_message_3p(user, target, extra_params) - use_3p = replacetext_char(use_3p, "TARGET_THEM", target_gender.him) - use_3p = replacetext_char(use_3p, "TARGET_THEIR", target_gender.his) - use_3p = replacetext_char(use_3p, "TARGET_SELF", target_gender.self) - use_3p = replacetext_char(use_3p, "TARGET", "\the [target]") - else - use_3p = get_emote_message_3p(user, null, extra_params) - use_3p = replacetext_char(use_3p, "USER_THEM", user_gender.him) - use_3p = replacetext_char(use_3p, "USER_THEIR", user_gender.his) - use_3p = replacetext_char(use_3p, "USER_SELF", user_gender.self) - use_3p = replacetext_char(use_3p, "USER", "\the [user]") - use_3p = capitalize(use_3p) - - var/use_range = emote_range - if (!use_range) - use_range = world.view - - if(ismob(user)) - var/mob/M = user - if(message_type == AUDIBLE_MESSAGE) - M.audible_message(message = use_3p, self_message = use_1p, deaf_message = emote_message_impaired, hearing_distance = use_range, checkghosts = /datum/client_preference/ghost_sight) - else - M.visible_message(message = use_3p, self_message = use_1p, blind_message = emote_message_impaired, range = use_range, checkghosts = /datum/client_preference/ghost_sight) - - do_extra(user, target) - -/decl/emote/proc/do_extra(var/atom/user, var/atom/target) - return - -/decl/emote/proc/check_user(var/atom/user) - return TRUE - -/decl/emote/proc/can_target() - return (emote_message_1p_target || emote_message_3p_target) - -/decl/emote/dd_SortValue() - return key - -/decl/emote/do_emote(var/atom/user, var/extra_params) - ..() - if(emote_sound) do_sound(user) - -/decl/emote/proc/do_sound(var/atom/user) - var/mob/living/carbon/human/H = user - if(H.stat) return // No dead or unconcious people screaming pls. - if(istype(H)) - if(sounded_species) - if(H.species.name in sounded_species) - if(islist(emote_sound)) - if(H.species.name == SPECIES_SKRELL) - if(H.head_hair_style == "Skrell Male Tentacles") - return playsound(user.loc, pick(emote_sound[MALE]), 50, 0) - else - return playsound(user.loc, pick(emote_sound[FEMALE]), 50, 0) - if(emote_sound[H.gender]) - return playsound(user.loc, pick(emote_sound[H.gender]), 50, 0) - return playsound(user.loc, pick(emote_sound), 50, 0) diff --git a/code/modules/emotes/emote_mob.dm b/code/modules/emotes/emote_mob.dm deleted file mode 100644 index 6b65d8ffaea5b..0000000000000 --- a/code/modules/emotes/emote_mob.dm +++ /dev/null @@ -1,160 +0,0 @@ -/mob/proc/can_emote(var/emote_type) - return (stat == CONSCIOUS) - -/mob/living/can_emote(var/emote_type) - return (..() && !(silent && emote_type == AUDIBLE_MESSAGE) && emoteCooldownCheck()) - -/mob/proc/emote(var/act, var/m_type, var/message) - // s-s-snowflake - if(src.stat == DEAD && act != "deathgasp") - return - if(usr == src) //client-called emote - if (client && (client.prefs.muted & MUTE_IC)) - to_chat(src, "You cannot send IC messages (muted).") - return - - if(act == "help") - to_chat(src,"Usable emotes: [english_list(usable_emotes)]") - return - - if(!can_emote(m_type)) - to_chat(src, "You cannot currently [m_type == AUDIBLE_MESSAGE ? "audibly" : "visually"] emote!") - return - - if(act == "me") - return custom_emote(m_type, message) - - if(act == "custom") - if(!message) - message = sanitize(input("Enter an emote to display.") as text|null) - if(!message) - return - if (!m_type) - if(alert(src, "Is this an audible emote?", "Emote", "Yes", "No") == "No") - m_type = VISIBLE_MESSAGE - else - m_type = AUDIBLE_MESSAGE - return custom_emote(m_type, message) - - var/splitpoint = findtext(act, " ") - if(splitpoint > 0) - var/tempstr = act - act = copytext_char(tempstr,1,splitpoint) - message = copytext_char(tempstr,splitpoint+1,0) - - var/decl/emote/use_emote = usable_emotes[act] - if(!use_emote) - to_chat(src, "Unknown emote '[act]'. Type say *help for a list of usable emotes.") - return - - if(m_type != use_emote.message_type && use_emote.conscious && stat != CONSCIOUS) - return - - if(use_emote.message_type == AUDIBLE_MESSAGE && is_muzzled()) - audible_message("\The [src] makes a muffled sound.") - return - else - use_emote.do_emote(src, message) - - for (var/obj/item/implant/I in src) - if (I.implanted) - I.trigger(act, src) - -/mob/proc/format_emote(var/emoter = null, var/message = null) - var/pretext - var/subtext - var/nametext - var/end_char - var/start_char - var/name_anchor - var/anchor_char = get_prefix_key(/decl/prefix/visible_emote) - - if(!message || !emoter) - return - - message = replacetext_char(message, "ÿ", "__:Я:_") // Никому же в голову не придет такое написать? (2) ~bear1ake@inf-dev - message = html_decode(message) - - name_anchor = findtext_char(message, anchor_char) - if(name_anchor > 0) // User supplied emote with visible_emote token (default ^) - pretext = copytext_char(message, 1, name_anchor) - subtext = copytext_char(message, name_anchor + 1, length(message) + 1) - else - // No token. Just the emote as usual. - subtext = message - - // Oh shit, we got this far! Let's see... did the user attempt to use more than one token? - if(findtext_char(subtext, anchor_char)) - // abort abort! - to_chat(emoter, "You may use only one \"[anchor_char]\" symbol in your emote.") - return - - if(pretext) - // Add a space at the end if we didn't already supply one. - end_char = copytext_char(pretext, length(pretext), length(pretext) + 1) - if(end_char != " ") - pretext += " " - - // Grab the last character of the emote message. - end_char = copytext_char(subtext, length(subtext), length(subtext) + 1) - if(!(end_char in list(".", "?", "!", "\"", "-", "~"))) // gotta include ~ for all you fucking weebs - // No punctuation supplied. Tack a period on the end. - subtext += "." - - // Add a space to the subtext, unless it begins with an apostrophe or comma. - if(subtext != ".") - // First, let's get rid of any existing space, to account for sloppy emoters ("X, ^ , Y") - subtext = trim_left(subtext) - start_char = copytext_char(subtext, 1, 2) - if(start_char != "," && start_char != "'") - subtext = " " + subtext - - pretext = capitalize(html_encode(pretext)) - nametext = html_encode(nametext) - subtext = html_encode(subtext) - // Store the player's name in a nice bold, naturalement - nametext = "[emoter]" - var/overall = pretext + nametext + subtext - overall = replacetext_char(overall, "__:Я:_", "ÿ") - return overall - -/mob/proc/custom_emote(var/m_type = VISIBLE_MESSAGE, var/message = null) - - if((usr && stat) || (!use_me && usr == src)) - to_chat(src, "You are unable to emote.") - return - - var/input - if(!message) - input = sanitize(input(src,"Choose an emote to display.") as text|null) - else - input = message - - if(input) - message = format_emote(src, message) - else - return - message = process_chat_markup(message) - if (message) - log_emote("[name]/[key] : [message]") - //do not show NPC animal emotes to ghosts, it turns into hellscape - var/check_ghosts = client ? /datum/client_preference/ghost_sight : null - if(m_type == VISIBLE_MESSAGE) - visible_message(message, checkghosts = check_ghosts) - else - audible_message(message, checkghosts = check_ghosts) - -// Specific mob type exceptions below. -/mob/living/silicon/ai/emote(var/act, var/type, var/message) - var/obj/machinery/hologram/holopad/T = src.holo - if(T && T.masters[src]) //Is the AI using a holopad? - src.holopad_emote(message) - else //Emote normally, then. - ..() - -/mob/living/captive_brain/emote(var/message) - return - -/mob/observer/ghost/emote(var/act, var/type, var/message) - if(message && act == "me") - communicate(/decl/communication_channel/dsay, client, message, /decl/dsay_communication/emote) diff --git a/code/modules/error_handler/error_handler.dm b/code/modules/error_handler/error_handler.dm deleted file mode 100644 index a12ec5892b8c1..0000000000000 --- a/code/modules/error_handler/error_handler.dm +++ /dev/null @@ -1,109 +0,0 @@ -GLOBAL_VAR_INIT(total_runtimes, 0) -GLOBAL_VAR_INIT(total_runtimes_skipped, 0) -GLOBAL_VAR_INIT(actual_error_file_line, new/regex("^%% (.*?),(.*?) %% ")) - -#ifdef DEBUG -/world/Error(exception/E) - 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 ..() - - GLOB.total_runtimes++ - - var/efile = E.file - var/eline = E.line - - var/regex/actual_error_file_line = GLOB.actual_error_file_line - if(actual_error_file_line.Find_char(E.name)) - efile = actual_error_file_line.group[1] - eline = actual_error_file_line.group[2] - E.name = replacetext_char(E.name, actual_error_file_line, "") - - var/erroruid = "[efile],[eline]" - var/last_seen = error_last_seen[erroruid] - var/cooldown = error_cooldown[erroruid] || 0 - - if(last_seen == null) - error_last_seen[erroruid] = world.time - last_seen = world.time - - if(cooldown < 0) - error_cooldown[erroruid]-- //Used to keep track of skip count for this error - GLOB.total_runtimes_skipped++ - return //Error is currently silenced, skip handling it - //Handle cooldowns and silencing spammy errors - var/silencing = FALSE - - // We can runtime before config is initialized because BYOND initialize objs/map before a bunch of other stuff happens. - // This is a bunch of workaround code for that. Hooray! - - var/configured_error_cooldown = initial(config.error_cooldown) - var/configured_error_limit = initial(config.error_limit) - var/configured_error_silence_time = initial(config.error_silence_time) - if(config) - configured_error_cooldown = config.error_cooldown - configured_error_limit = config.error_limit - configured_error_silence_time = config.error_silence_time - - - //Each occurence of an unique error adds to its cooldown time... - cooldown = max(0, cooldown - (world.time - last_seen)) + configured_error_cooldown - // ... which is used to silence an error if it occurs too often, too fast - if(cooldown > configured_error_cooldown * configured_error_limit) - cooldown = -1 - silencing = TRUE - spawn(0) - usr = null - sleep(configured_error_silence_time) - var/skipcount = abs(error_cooldown[erroruid]) - 1 - error_cooldown[erroruid] = 0 - if(skipcount > 0) - to_world_log("\[[time_stamp()]] Skipped [skipcount] runtimes in [erroruid].") - GLOB.error_cache.log_error(E, skip_count = skipcount) - - error_last_seen[erroruid] = world.time - error_cooldown[erroruid] = cooldown - - var/list/usrinfo = null - var/locinfo - if(istype(usr)) - usrinfo = list(" usr: [log_info_line(usr)]") - locinfo = log_info_line(usr.loc) - if(locinfo) - usrinfo += " usr.loc: [locinfo]" - // The proceeding mess will almost definitely break if error messages are ever changed - var/list/splitlines = splittext(E.desc, "\n") - var/list/desclines = list() - if(LAZYLEN(splitlines) > ERROR_USEFUL_LEN) // If there aren't at least three lines, there's no info - for(var/line in splitlines) - if(LAZYLEN(line) < 3 || findtext(line, "source file:") || findtext(line, "usr.loc:")) - continue - if(findtext(line, "usr:")) - if(usrinfo) - desclines.Add(usrinfo) - usrinfo = null - continue // Our usr info is better, replace it - - if(copytext_char(line, 1, 3) != " ") - desclines += (" " + line) // Pad any unpadded lines, so they look pretty - else - desclines += line - if(usrinfo) //If this info isn't null, it hasn't been added yet - desclines.Add(usrinfo) - if(silencing) - desclines += " (This error will now be silenced for [configured_error_silence_time / 600] minutes)" - if(GLOB.error_cache) - GLOB.error_cache.log_error(E, desclines) - - to_world_log("\[[time_stamp()]] Runtime in [erroruid]: [E]") - for(var/line in desclines) - to_world_log(line) - -#endif diff --git a/code/modules/error_handler/error_reporting.dm b/code/modules/error_handler/error_reporting.dm deleted file mode 100644 index 9fadab06bc69f..0000000000000 --- a/code/modules/error_handler/error_reporting.dm +++ /dev/null @@ -1,23 +0,0 @@ -// this proc will only work with DEBUG enabled -#ifdef DEBUG - -/hook/roundend/proc/send_runtimes_to_ircbot() - if(!revdata.revision) return // we can't do much useful if we don't know what we are - var/list/errors = list() - for(var/erruid in GLOB.error_cache.error_sources) - var/datum/error_viewer/error_source/e = GLOB.error_cache.error_sources[erruid] - var/datum/error_viewer/error_entry/err = e.errors[1] - - var/data = list( - id = erruid, - name = err.info_name, - info = err.info - ) - - errors[++errors.len] = list2params(data) - - runtimes2irc(list2params(errors), revdata.revision) - - return 1 - -#endif diff --git a/code/modules/error_handler/error_viewer.dm b/code/modules/error_handler/error_viewer.dm deleted file mode 100644 index 7e5ee9733bae4..0000000000000 --- a/code/modules/error_handler/error_viewer.dm +++ /dev/null @@ -1,213 +0,0 @@ -// Error viewing datums, responsible for storing error info, notifying admins -// when errors occur, and showing them to admins on demand. - -// There are 3 different types used here: -// -// - error_cache keeps track of all error sources, as well as all individually -// logged errors. Only one instance of this datum should ever exist, and it's -// right here: - -#ifdef DEBUG -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. -GLOBAL_DATUM(error_cache, /datum/error_viewer/error_cache) -#endif - -// - error_source datums exist for each line (of code) that generates an error, -// and keep track of all errors generated by that line. -// -// - error_entry datums exist for each logged error, and keep track of all -// relevant info about that error. - -// Common vars and procs are kept at the error_viewer level -/datum/error_viewer - var/name = "" - -/datum/error_viewer/Topic(href, href_list) - if(href_list["viewruntime"]) - var/datum/error_viewer/error_viewer = locate(href_list["viewruntime"]) - if(!istype(error_viewer)) - to_chat(usr, "That runtime viewer no longer exists.") - return - - if(href_list["viewruntime_backto"]) - error_viewer.show_to(usr.client, locate(href_list["viewruntime_backto"]), href_list["viewruntime_linear"]) - else - error_viewer.show_to(usr.client, null, href_list["viewruntime_linear"]) - -/datum/error_viewer/proc/browse_to(client/user, html) - var/datum/browser/browser = new(user.mob, "error_viewer", null, 600, 400) - browser.set_content(html) - browser.add_head_content({" - - "}) - browser.open() - -/datum/error_viewer/proc/build_header(datum/error_viewer/back_to, linear) - // Common starter HTML for show_to - - . = "" - - if (istype(back_to)) - . += back_to.make_link("<<<", null, linear) - - . += "[make_link("Refresh")]

              " - -/datum/error_viewer/proc/show_to(user, datum/error_viewer/back_to, linear) - // Specific to each child type - return - -/datum/error_viewer/proc/make_link(linktext, datum/error_viewer/back_to, linear) - var/back_to_param = "" - if (!linktext) - linktext = name - - if (istype(back_to)) - back_to_param = ";viewruntime_backto=\ref[back_to]" - - if (linear) - back_to_param += ";viewruntime_linear=1" - - return "[linktext]" - -/datum/error_viewer/error_cache - var/list/errors = list() - var/list/error_sources = list() - var/list/errors_silenced = list() - -/datum/error_viewer/error_cache/show_to(user, datum/error_viewer/back_to, linear) - var/html = build_header() - 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 - for (var/erroruid in error_sources) - error_source = error_sources[erroruid] - html += "[error_source.make_link(null, src)]
              " - - else - html += "[make_link("organized", null)] | linear
              " - for (var/datum/error_viewer/error_entry/error_entry in errors) - html += "[error_entry.make_link(null, src, 1)]
              " - - browse_to(user, html) - -/datum/error_viewer/error_cache/proc/log_error(exception/e, list/desclines, skip_count) - if (!istype(e)) - return // Abnormal exception, don't even bother - - var/erroruid = "[e.file],[e.line]" - var/datum/error_viewer/error_source/error_source = error_sources[erroruid] - if (!error_source) - error_source = new(e) - error_sources[erroruid] = error_source - - var/datum/error_viewer/error_entry/error_entry = new(e, desclines, skip_count) - error_entry.error_source = error_source - errors += error_entry - error_source.errors += error_entry - if (skip_count) - return // Skip notifying admins about skipped errors. - - // Show the error to admins with debug messages turned on, but only if one - // from the same source hasn't been shown too recently - if (error_source.next_message_at <= world.time) - var/const/viewtext = "\[view]" // Nesting these in other brackets went poorly - log_runtime("Runtime in [e.file], line [e.line]: [html_encode(e.name)] [error_entry.make_link(viewtext)]") - var/err_msg_delay - if(config) - err_msg_delay = config.error_msg_delay - else - err_msg_delay = initial(config.error_msg_delay) - error_source.next_message_at = world.time + err_msg_delay - -/datum/error_viewer/error_source - var/list/errors = list() - var/next_message_at = 0 - -/datum/error_viewer/error_source/New(exception/e) - if (!istype(e)) - name = "\[[time_stamp()]] Uncaught exceptions" - return - - name = "\[[time_stamp()]] Runtime in [e.file], line [e.line]: [html_encode(e.name)]" - -/datum/error_viewer/error_source/show_to(user, datum/error_viewer/back_to, linear) - if (!istype(back_to)) - back_to = GLOB.error_cache - - var/html = build_header(back_to) - for (var/datum/error_viewer/error_entry/error_entry in errors) - html += "[error_entry.make_link(null, src)]
              " - - browse_to(user, html) - -/datum/error_viewer/error_entry - var/datum/error_viewer/error_source/error_source - var/exception/exc - var/desc = "" - var/usr_ref - var/turf/usr_loc - var/is_skip_count - - var/info_name - var/info - -/datum/error_viewer/error_entry/New(exception/e, list/desclines, skip_count) - if (!istype(e)) - name = "\[[time_stamp()]] Uncaught exception: [html_encode(e.name)]" - return - - if(skip_count) - name = "\[[time_stamp()]] Skipped [skip_count] runtimes in [e.file],[e.line]." - is_skip_count = TRUE - return - - name = "\[[time_stamp()]] Runtime in [e.file], line [e.line]: [html_encode(e.name)]" - info_name = "Runtime in [e.file],[e.line]: [e]" - info = info_name - - exc = e - if (istype(desclines)) - for (var/line in desclines) - // There's probably a better way to do this than non-breaking spaces... - desc += "[html_encode(line)]
              " - info += "\n " + line - - if (usr) - usr_ref = "\ref[usr]" - usr_loc = get_turf(usr) - -/datum/error_viewer/error_entry/show_to(user, datum/error_viewer/back_to, linear) - if (!istype(back_to)) - back_to = error_source - - var/html = build_header(back_to, linear) - html += "[name]
              [desc]
              " - if (usr_ref) - html += "
              usr: VV" - html += " PP" - html += " Follow" - if (istype(usr_loc)) - html += "
              usr.loc: VV" - html += " JMP" - - browse_to(user, html) - -/datum/error_viewer/error_entry/make_link(linktext, datum/error_viewer/back_to, linear) - return is_skip_count ? name : ..() diff --git a/code/modules/events/apc_damage.dm b/code/modules/events/apc_damage.dm deleted file mode 100644 index e5e065b21e20d..0000000000000 --- a/code/modules/events/apc_damage.dm +++ /dev/null @@ -1,49 +0,0 @@ -/datum/event/apc_damage - var/apcSelectionRange = 25 - -/datum/event/apc_damage/start() - var/obj/machinery/power/apc/A = acquire_random_apc() - - var/severity_range = 0 - switch(severity) - if(EVENT_LEVEL_MUNDANE) - severity_range = 0 - if(EVENT_LEVEL_MODERATE) - severity_range = 7 - if(EVENT_LEVEL_MAJOR) - severity_range = 15 - - for(var/obj/machinery/power/apc/apc in range(severity_range,A)) - if(is_valid_apc(apc)) - apc.emagged = TRUE - apc.update_icon() - -/datum/event/apc_damage/proc/acquire_random_apc() - var/list/possibleEpicentres = list() - var/list/apcs = list() - - for(var/obj/effect/landmark/newEpicentre in landmarks_list) - if(newEpicentre.name == "lightsout") - possibleEpicentres += newEpicentre - - if(!possibleEpicentres.len) - return - - var/epicentre = pick(possibleEpicentres) - for(var/obj/machinery/power/apc/apc in range(epicentre,apcSelectionRange)) - if(is_valid_apc(apc)) - apcs += apc - // Greatly increase the chance for APCs in maintenance areas to be selected - var/area/A = get_area(apc) - if(istype(A,/area/maintenance)) - apcs += apc - apcs += apc - - if(!apcs.len) - return - - return pick(apcs) - -/datum/event/apc_damage/proc/is_valid_apc(var/obj/machinery/power/apc/apc) - var/turf/T = get_turf(apc) - return !apc.is_critical && !apc.emagged && T && (T.z in GLOB.using_map.player_levels) diff --git a/code/modules/events/blob.dm b/code/modules/events/blob.dm deleted file mode 100644 index 44f6439bd7fa3..0000000000000 --- a/code/modules/events/blob.dm +++ /dev/null @@ -1,27 +0,0 @@ -/datum/event/blob - announceWhen = 12 - - var/obj/effect/blob/core/Blob - -/datum/event/blob/announce() - level_seven_announcement() - -/datum/event/blob/start() - var/turf/T = pick_subarea_turf(/area/maintenance, list(/proc/is_station_turf, /proc/not_turf_contains_dense_objects)) - if(!T) - log_and_message_admins("Blob failed to find a viable turf.") - kill() - return - - log_and_message_admins("Blob spawned in \the [get_area(T)]", location = T) - Blob = new /obj/effect/blob/core(T) - for(var/i = 1; i < rand(3, 4), i++) - Blob.Process() - -/datum/event/blob/tick() - if(!Blob || !Blob.loc) - Blob = null - kill() - return - if(IsMultiple(activeFor, 3)) - Blob.Process() diff --git a/code/modules/events/brain_expansion.dm b/code/modules/events/brain_expansion.dm deleted file mode 100644 index 03a7822071d0e..0000000000000 --- a/code/modules/events/brain_expansion.dm +++ /dev/null @@ -1,16 +0,0 @@ -/* - "Brain expansion" - Rare, short event that makes every item worth one more research point for a small while - - All relevant code is run in /datum/research/proc/UpdateTech -*/ - -/datum/event/brain_expansion - startWhen = 0 - endWhen = 150 - -/datum/event/brain_expansion/announce() - command_announcement.Announce("Abnormal efficiency rates detected in destructive analysis neural networks. Analysis results may be impacted.", "[location_name()] Neural Network Monitor", zlevels = affecting_z) - -/datum/event/brain_expansion/end() - command_announcement.Announce("The destructive analysis neural network has returned to a normal state.", "[location_name()] Neural Network Monitor", zlevels = affecting_z) \ No newline at end of file diff --git a/code/modules/events/brand_intelligence.dm b/code/modules/events/brand_intelligence.dm deleted file mode 100644 index a273cedaa1c19..0000000000000 --- a/code/modules/events/brand_intelligence.dm +++ /dev/null @@ -1,63 +0,0 @@ -/datum/event/brand_intelligence - announceWhen = 21 - endWhen = 1000 //Ends when all vending machines are subverted anyway. - - var/list/obj/machinery/vending/vendingMachines = list() - var/list/obj/machinery/vending/infectedVendingMachines = list() - var/obj/machinery/vending/originMachine - - -/datum/event/brand_intelligence/announce() - command_announcement.Announce("Rampant brand intelligence has been detected aboard the [location_name()]. The origin is believed to be \a \"[initial(originMachine.name)]\" type. Infection of other machines is likely.", "[location_name()] Machine Monitoring", zlevels = affecting_z) - - -/datum/event/brand_intelligence/start() - for(var/obj/machinery/vending/V in SSmachines.machinery) - if(V.z in affecting_z) - vendingMachines += weakref(V) - - if(!vendingMachines.len) - kill() - return - var/weakref/W = pick_n_take(vendingMachines) - originMachine = W.resolve() - originMachine.shut_up = 0 - originMachine.shoot_inventory = 1 - originMachine.shooting_chance = 15 - -/datum/event/brand_intelligence/tick() - if(!vendingMachines.len || QDELETED(originMachine) || originMachine.shut_up || !originMachine.shoot_inventory) //if every machine is infected, or if the original vending machine is missing or has it's voice switch flipped or fixed - kill() - return - - if(IsMultiple(activeFor, 5) && prob(15)) - var/weakref/W = pick(vendingMachines) - vendingMachines -= W - var/obj/machinery/vending/infectedMachine = W.resolve() - if(infectedMachine) - infectedVendingMachines += W - infectedMachine.shut_up = 0 - infectedMachine.shoot_inventory = 1 - - if(IsMultiple(activeFor, 12)) - originMachine.speak(pick("Try our aggressive new marketing strategies!", \ - "You should buy products to feed your lifestyle obsession!", \ - "Consume!", \ - "Your money can buy happiness!", \ - "Engage direct marketing!", \ - "Advertising is legalized lying! But don't let that put you off our great deals!", \ - "You don't want to buy anything? Yeah, well I didn't want to buy your mom either.")) - -/datum/event/brand_intelligence/end() - originMachine.shut_up = 1 - originMachine.shooting_chance = initial(originMachine.shooting_chance) - for(var/weakref/W in infectedVendingMachines) - var/obj/machinery/vending/infectedMachine = W.resolve() - if(!infectedMachine) - continue - infectedMachine.shut_up = 1 - infectedMachine.shoot_inventory = 0 - command_announcement.Announce("All traces of the rampant brand intelligence have disappeared from the systems.", "[location_name()] Firewall Subroutines") - originMachine = null - infectedVendingMachines.Cut() - vendingMachines.Cut() \ No newline at end of file diff --git a/code/modules/events/camera_damage.dm b/code/modules/events/camera_damage.dm deleted file mode 100644 index 1c99af107b7c3..0000000000000 --- a/code/modules/events/camera_damage.dm +++ /dev/null @@ -1,39 +0,0 @@ -/datum/event/camera_damage/start() - var/obj/machinery/camera/C = acquire_random_camera() - if(!C) - return - - var/severity_range = 0 - switch(severity) - if(EVENT_LEVEL_MUNDANE) - severity_range = 0 - if(EVENT_LEVEL_MODERATE) - severity_range = 7 - if(EVENT_LEVEL_MAJOR) - severity_range = 15 - - for(var/obj/machinery/camera/cam in range(severity_range,C)) - if(is_valid_camera(cam)) - if(prob(2*severity)) - cam.destroy() - else - if(!cam.wires.IsIndexCut(CAMERA_WIRE_POWER)) - cam.wires.CutWireIndex(CAMERA_WIRE_POWER) - if(!cam.wires.IsIndexCut(CAMERA_WIRE_ALARM) && prob(5*severity)) - cam.wires.CutWireIndex(CAMERA_WIRE_ALARM) - -/datum/event/camera_damage/proc/acquire_random_camera(var/remaining_attempts = 5) - if(!cameranet.cameras.len) - return - if(!remaining_attempts) - return - - var/obj/machinery/camera/C = pick(cameranet.cameras) - if(is_valid_camera(C)) - return C - return acquire_random_camera(remaining_attempts-1) - -/datum/event/camera_damage/proc/is_valid_camera(var/obj/machinery/camera/C) - // Only return a functional camera, not installed in a silicon, and that exists somewhere players have access - var/turf/T = get_turf(C) - return T && C.can_use() && !istype(C.loc, /mob/living/silicon) && (T.z in GLOB.using_map.player_levels) diff --git a/code/modules/events/carp_migration.dm b/code/modules/events/carp_migration.dm deleted file mode 100644 index efd417e82e6f5..0000000000000 --- a/code/modules/events/carp_migration.dm +++ /dev/null @@ -1,127 +0,0 @@ -GLOBAL_LIST_INIT(carp_count,list())// a list of Z levels (string), associated with a list of all the carp spawned by carp events - -/datum/event/carp_migration - announceWhen = 45 - endWhen = 75 - var/no_show = FALSE // Carp are laggy, so if there is too much stuff going on we're going to dial it down. - var/spawned_carp //for debugging purposes only? - var/carp_per_z = 8 - var/carp_per_event = 5 - -/datum/event/carp_migration/setup() - announceWhen = rand(30, 60) - endWhen += severity*25 - -/datum/event/carp_migration/proc/count_carps() - var/total_carps - var/local_carps - for(var/Z in GLOB.carp_count) - var/list/L = GLOB.carp_count[Z] - total_carps += L.len - if(text2num(Z) in affecting_z) - local_carps += L.len - - if(total_carps >= 65 || SSmobs.ticks >= 10 || local_carps >= (affecting_z.len*carp_per_z+carp_per_event) || !living_observers_present(affecting_z)) - no_show = TRUE - else - no_show = FALSE - -/datum/event/carp_migration/announce() - var/announcement = "" - if(severity > EVENT_LEVEL_MODERATE) - announcement = "A massive migration of unknown biological entities has been detected in the vicinity of the [location_name()]. Exercise external operations with caution." - else - announcement = "A large migration of unknown biological entities has been detected in the vicinity of the [location_name()]. Caution is advised." - - command_announcement.Announce(announcement, "[location_name()] Sensor Array", zlevels = affecting_z) - -/datum/event/carp_migration/tick() - count_carps() - if(no_show && prob(95)) - return - - spawn_carp() - -/datum/event/carp_migration/proc/spawn_carp(var/dir, var/speed) - if(!living_observers_present(affecting_z)) - return - var/Z = pick(affecting_z) - - if(!dir) - dir = pick(GLOB.cardinal) - - if(!speed) - speed = rand(1,3) - - var/n = rand(severity-1, severity*2) - var/I = 0 - while(I < n) - var/turf/T = get_random_edge_turf(dir,TRANSITIONEDGE + 2, Z) - if(istype(T,/turf/space)) - var/mob/living/simple_animal/hostile/M - if(prob(96)) - M = new /mob/living/simple_animal/hostile/carp(T) - else if (prob(15)) - M = new /mob/living/simple_animal/hostile/carp/shark(T) - else - M = new /mob/living/simple_animal/hostile/carp/pike(T) - I += 3 - GLOB.death_event.register(M,src,/datum/event/carp_migration/proc/reduce_carp_count) - GLOB.destroyed_event.register(M,src,/datum/event/carp_migration/proc/reduce_carp_count) - LAZYADD(GLOB.carp_count["[Z]"], M) - spawned_carp ++ - M.throw_at(get_random_edge_turf(GLOB.reverse_dir[dir],TRANSITIONEDGE + 2, Z), 5, speed, callback = CALLBACK(src,/datum/event/carp_migration/proc/check_gib,M)) - I++ - if(no_show) - break - -/datum/event/carp_migration/proc/check_gib(var/mob/living/simple_animal/hostile/carp/M) //awesome road kills - if(M.health <= 0 && prob(60)) - M.gib() - -/proc/get_random_edge_turf(var/dir, var/clearance = TRANSITIONEDGE + 1, var/Z) - if(!dir) - return - - switch(dir) - if(NORTH) - return locate(rand(clearance, world.maxx - clearance), world.maxy - clearance, Z) - if(SOUTH) - return locate(rand(clearance, world.maxx - clearance), clearance, Z) - if(EAST) - return locate(world.maxx - clearance, rand(clearance, world.maxy - clearance), Z) - if(WEST) - return locate(clearance, rand(clearance, world.maxy - clearance), Z) - -/datum/event/carp_migration/proc/reduce_carp_count(var/mob/M) - for(var/Z in affecting_z) - var/list/L = GLOB.carp_count["[Z]"] - if(M in L) - LAZYREMOVE(L,M) - break - GLOB.death_event.unregister(M,src,/datum/event/carp_migration/proc/reduce_carp_count) - GLOB.destroyed_event.unregister(M,src,/datum/event/carp_migration/proc/reduce_carp_count) - -/datum/event/carp_migration/end() - log_debug("Carp migration event spawned [spawned_carp] carp.") - -/datum/event/carp_migration/overmap - announceWhen = 1 - carp_per_z = 5 - carp_per_event = 10 - var/obj/effect/overmap/visitable/ship/victim - -/datum/event/carp_migration/overmap/Destroy() - victim = null - . = ..() - -/datum/event/carp_migration/overmap/tick() - count_carps() - if(no_show && prob(95)) - return - - var/speed - if(victim && !victim.is_still()) - speed = round(victim.get_speed()* (1000 + (victim.get_helm_skill()-SKILL_MIN)*250))//more skill more roadkills - - spawn_carp((victim && prob(80)? victim.fore_dir : null), speed) diff --git a/code/modules/events/communications_blackout.dm b/code/modules/events/communications_blackout.dm deleted file mode 100644 index e7e9adf8a8ab7..0000000000000 --- a/code/modules/events/communications_blackout.dm +++ /dev/null @@ -1,24 +0,0 @@ -/datum/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 telec#MCi46:5.;@63-BZZZZT", \ - "Ionospheric anomalies dete'fZ\\kg5_0-BZZZZZT", \ - "Ionospheri:%' MCayj^j<.3-BZZZZZZT", \ - "#4nd%;f4y6,>'%-BZZZZZZZT") - - for(var/mob/living/silicon/ai/A in GLOB.player_list) //AIs are always aware of communication blackouts. - if(A.z in affecting_z) - to_chat(A, "
              ") - to_chat(A, "[alert]") - to_chat(A, "
              ") - - if(prob(80)) //Announce most of the time, just not always to give some wiggle room for possible sabotages. - command_announcement.Announce(alert, new_sound = sound('sound/misc/interference.ogg', volume=25), zlevels = affecting_z) - - -/datum/event/communications_blackout/start() - for(var/obj/machinery/telecomms/T in telecomms_list) - if(T.z in affecting_z) - if(prob(T.outage_probability)) - T.overloaded_for = max(severity * rand(90, 120), T.overloaded_for) - diff --git a/code/modules/events/computer_damage.dm b/code/modules/events/computer_damage.dm deleted file mode 100644 index f70c0a953687f..0000000000000 --- a/code/modules/events/computer_damage.dm +++ /dev/null @@ -1,23 +0,0 @@ -/datum/event/computer_damage/start() - var/number_of_victims = 0 - switch(severity) - if(EVENT_LEVEL_MUNDANE) - number_of_victims = 4 - if(EVENT_LEVEL_MODERATE) - number_of_victims = 8 - if(EVENT_LEVEL_MAJOR) - number_of_victims = 16 - var/list/victims = list() - for(var/obj/machinery/computer/modular/C in SSmachines.machinery) - if((C.z in affecting_z) && C.use_power == POWER_USE_ACTIVE && C.get_component_of_type(/obj/item/stock_parts/computer/hard_drive)) - victims += C - while(number_of_victims && victims.len) - number_of_victims-- - var/obj/machinery/computer/modular/victim = pick_n_take(victims) - if(prob(50)) - victim.visible_message("[victim] emits some ominous clicks.") - var/obj/item/stock_parts/computer/hard_drive/HDD = victim.get_component_of_type(/obj/item/stock_parts/computer/hard_drive) - if(prob(60)) - HDD.take_damage(HDD.damage_failure) - else - HDD.take_damage(HDD.damage_malfunction) diff --git a/code/modules/events/computer_update.dm b/code/modules/events/computer_update.dm deleted file mode 100644 index 750de693a772c..0000000000000 --- a/code/modules/events/computer_update.dm +++ /dev/null @@ -1,18 +0,0 @@ -/datum/event/computer_update/start() - commence_updates(severity) - -/proc/commence_updates(severity) - var/updates_to_install = 0 - switch(severity) - if(EVENT_LEVEL_MUNDANE) - updates_to_install = rand(10000, 100000) - if(EVENT_LEVEL_MODERATE) - updates_to_install = rand(100000, 500000) - if(EVENT_LEVEL_MAJOR) - updates_to_install = rand(500000, 1000000) - - for(var/obj/C in (SSobj.processing + SSmachines.machinery)) - if((C.z in GLOB.using_map.station_levels)) - var/datum/extension/interactive/ntos/os = get_extension(C, /datum/extension/interactive/ntos) - if(os && os.get_ntnet_status() && os.receives_updates) - os.updates = updates_to_install diff --git a/code/modules/events/disposals_explosion.dm b/code/modules/events/disposals_explosion.dm deleted file mode 100644 index d72cfb9b92bc4..0000000000000 --- a/code/modules/events/disposals_explosion.dm +++ /dev/null @@ -1,90 +0,0 @@ -/* - Disposals explosion - Marks a disposals pipe for a violent trash explosion if not repaired in time -*/ - -/datum/event/disposals_explosion - startWhen = 0 - announceWhen = 20 - endWhen = 150 // Should be plenty of time to find it - var/obj/structure/disposalpipe/segment/bursting_pipe = null - -// Predicates for the pick_area and pick_area_turf proc -/proc/area_has_disposals_pipe(var/area/A) - for(var/turf/T in A) - if(has_disposals_pipe(T)) - return TRUE - return FALSE - -/proc/has_disposals_pipe(var/turf/T) - for(var/atom/A in T) - if(istype(A, /obj/structure/disposalpipe/segment)) - return TRUE - return FALSE - -// Event listener for the marked pipe's destruction -/datum/event/disposals_explosion/proc/pipe_destroyed() - GLOB.destroyed_event.unregister(bursting_pipe, src, .proc/pipe_destroyed) - - bursting_pipe = null - kill() - -/datum/event/disposals_explosion/setup() - var/list/area_predicates = GLOB.is_station_but_not_maint_area.Copy() - area_predicates += /proc/area_has_disposals_pipe - - var/turf/containing_turf = pick_area_and_turf(area_predicates, list(/proc/has_disposals_pipe)) - if(isnull(containing_turf)) - log_debug("Couldn't find a turf containing a disposals pipe. Aborting.") - kill() - return - - for(var/atom/A in containing_turf) - if(istype(A, /obj/structure/disposalpipe/segment)) - bursting_pipe = A - // Subscribe to pipe destruction facts - GLOB.destroyed_event.register(A, src, .proc/pipe_destroyed) - break - - if(isnull(bursting_pipe)) - log_debug("Couldn't find a pipe to blow up. Aborting.") - kill() - return - - // Damage the pipe - bursting_pipe.set_health(rand(2, 4)) - -/datum/event/disposals_explosion/announce() - command_announcement.Announce("Pressure readings indicate an imminent explosion in \the [get_area(bursting_pipe)] disposal systems. Piping sections may be damaged.", "[location_name()] Atmospheric Monitoring System", zlevels = affecting_z) - -/datum/event/disposals_explosion/tick() - if(isnull(bursting_pipe)) - kill() - return - - // Make some noise as a clue - if(prob(40) && bursting_pipe.get_current_health() < 5) - playsound(bursting_pipe, 'sound/machines/hiss.ogg', 40, 0, 0) - -/datum/event/disposals_explosion/end() - if(isnull(bursting_pipe)) - return - - GLOB.destroyed_event.unregister(bursting_pipe, src, .proc/pipe_destroyed) - - if(bursting_pipe.get_current_health() < 5) - // Make a disposals holder for the trash - var/obj/structure/disposalholder/trash_holder = new() - - // Fill it with trash - for(var/i = 0 to rand(5,8)) - var/chosen_trash = pick(subtypesof(/obj/item/trash)) - var/obj/item/trash/T = new chosen_trash() - T.forceMove(trash_holder) - - // Add the trash to the pipe - trash_holder.forceMove(bursting_pipe) - // Burst the pipe, spewing trash all over - bursting_pipe.broken(1) - // Make a scary noise - playsound(bursting_pipe, get_sfx("explosion"), 40, 0, 0, 5) diff --git a/code/modules/events/dust.dm b/code/modules/events/dust.dm deleted file mode 100644 index 86e2eb1997133..0000000000000 --- a/code/modules/events/dust.dm +++ /dev/null @@ -1,52 +0,0 @@ -/* -Space dust -Commonish random event that causes small clumps of "space dust" to hit the station at high speeds. -The "dust" will damage the hull of the station causin minor hull breaches. -*/ - -/datum/event/dust - startWhen = 10 - endWhen = 30 - var/min_delay = 30 - var/last_wave - -/datum/event/dust/announce() - command_announcement.Announce("The [location_name()] is now passing through a belt of space dust.", "[location_name()] Sensor Array", zlevels = affecting_z) - -/datum/event/dust/tick() - if(world.time > last_wave + min_delay && prob(10)) - dust_swarm(severity, affecting_z) - -/datum/event/dust/end() - command_announcement.Announce("The [location_name()] has now passed through the belt of space dust.", "[location_name()] Sensor Array", zlevels = affecting_z) - -/proc/dust_swarm(var/strength = EVENT_LEVEL_MUNDANE, var/list/zlevels) - var/numbers = rand(strength * 10, strength * 15) - - var/start_dir = pick(GLOB.cardinal) - var/turf/startloc - var/turf/targloc - var/randomz = pick(zlevels) - var/randomx = rand(1+TRANSITIONEDGE*2, world.maxx-TRANSITIONEDGE*2) - var/randomy = rand(1+TRANSITIONEDGE*2, world.maxx-TRANSITIONEDGE*2) - switch(start_dir) - if(NORTH) - startloc = locate(randomx, world.maxy - TRANSITIONEDGE, randomz) - targloc = locate(world.maxx - randomx, 1 + TRANSITIONEDGE, randomz) - if(SOUTH) - startloc = locate(randomx, 1 + TRANSITIONEDGE, randomz) - targloc = locate(world.maxx - randomx, world.maxy - TRANSITIONEDGE, randomz) - if(EAST) - startloc = locate(world.maxx - TRANSITIONEDGE, randomy, randomz) - targloc = locate(1 + TRANSITIONEDGE, world.maxy - randomy, randomz) - if(WEST) - startloc = locate(1 + TRANSITIONEDGE, randomy, randomz) - targloc = locate(world.maxx - TRANSITIONEDGE, world.maxy - randomy, randomz) - var/list/starters = getcircle(startloc, 3) - starters += startloc - - var/rocks_per_tile = round(numbers/starters.len) - for(var/turf/T in starters) - for(var/i = 1 to rocks_per_tile) - var/obj/item/projectile/bullet/rock/R = new(T) - R.launch(targloc, null, startloc.x - T.x, startloc.y - T.y) \ No newline at end of file diff --git a/code/modules/events/electrical_storm.dm b/code/modules/events/electrical_storm.dm deleted file mode 100644 index 517546ec54b66..0000000000000 --- a/code/modules/events/electrical_storm.dm +++ /dev/null @@ -1,80 +0,0 @@ -/datum/event/electrical_storm - announceWhen = 0 // Warn them shortly before it begins. - startWhen = 30 - endWhen = 60 // Set in start() - has_skybox_image = TRUE - var/list/valid_apcs // Shuffled list of valid APCs. - var/static/lightning_color - -/datum/event/electrical_storm/get_skybox_image() - if(!lightning_color) - lightning_color = pick("#ffd98c", "#ebc7ff", "#bdfcff", "#bdd2ff", "#b0ffca", "#ff8178", "#ad74cc") - var/image/res = overlay_image('icons/skybox/electrobox.dmi', "lightning", lightning_color, RESET_COLOR) - res.blend_mode = BLEND_ADD - return res - -/datum/event/electrical_storm/announce() - ..() - switch(severity) - if(EVENT_LEVEL_MUNDANE) - command_announcement.Announce("A minor electrical storm has been detected near the [location_name()]. Please watch out for possible electrical discharges.", "[location_name()] Sensor Array", zlevels = affecting_z) - if(EVENT_LEVEL_MODERATE) - command_announcement.Announce("The [location_name()] is about to pass through an electrical storm. Please secure sensitive electrical equipment until the storm passes.", "[location_name()] Sensor Array", new_sound = GLOB.using_map.electrical_storm_moderate_sound, zlevels = affecting_z) - if(EVENT_LEVEL_MAJOR) - command_announcement.Announce("Alert. A strong electrical storm has been detected in proximity of the [location_name()]. It is recommended to immediately secure sensitive electrical equipment until the storm passes.", "[location_name()] Sensor Array", new_sound = GLOB.using_map.electrical_storm_major_sound, zlevels = affecting_z) - -/datum/event/electrical_storm/start() - ..() - valid_apcs = list() - for(var/obj/machinery/power/apc/A in SSmachines.machinery) - if(A.z in affecting_z) - valid_apcs.Add(A) - endWhen = (severity * 60) + startWhen - -/datum/event/electrical_storm/tick() - ..() - //See if shields can stop it first - var/list/shields = list() - for(var/obj/machinery/power/shield_generator/G in SSmachines.machinery) - if((G.z in affecting_z) && G.running && G.check_flag(MODEFLAG_EM)) - shields += G - if(shields.len) - var/obj/machinery/power/shield_generator/shield_gen = pick(shields) - //Minor breaches aren't enough to let through frying amounts of power - if(shield_gen.take_damage(30 * severity, SHIELD_DAMTYPE_EM) <= SHIELD_BREACHED_MINOR) - return - if(!length(valid_apcs)) - CRASH("No valid APCs found for electrical storm event! This is likely a bug. Location: [location_name()] - Z Level: [affecting_z]") - var/list/picked_apcs = list() - for(var/i=0, i< severity*2, i++) // up to 2/4/6 APCs per tick depending on severity - picked_apcs |= pick(valid_apcs) - - for(var/obj/machinery/power/apc/T in picked_apcs) - // Main breaker is turned off. Consider this APC protected. - if(!T.operating) - continue - - // Decent chance to overload lighting circuit. - if(prob(3 * severity)) - T.overload_lighting() - - // Relatively small chance to emag the apc as apc_damage event does. - if(prob(0.2 * severity)) - T.emagged = TRUE - T.update_icon() - - if(T.is_critical) - T.energy_fail(10 * severity) - continue - else - T.energy_fail(10 * severity * rand(severity * 2, severity * 4)) - - // Very tiny chance to completely break the APC. Has a check to ensure we don't break critical APCs such as the Engine room, or AI core. Does not occur on Mundane severity. - if(prob((0.2 * severity) - 0.2)) - T.set_broken() - - - -/datum/event/electrical_storm/end() - ..() - command_announcement.Announce("The [location_name()] has cleared the electrical storm. Please repair any electrical overloads.", "Electrical Storm Alert", zlevels = affecting_z) diff --git a/code/modules/events/event.dm b/code/modules/events/event.dm deleted file mode 100644 index ee4278133863c..0000000000000 --- a/code/modules/events/event.dm +++ /dev/null @@ -1,168 +0,0 @@ -/datum/event_meta - var/name = "" - var/enabled = 1 // Whether or not the event is available for random selection at all - var/weight = 0 // The base weight of this event. A zero means it may never fire, but see get_weight() - var/min_weight = 0 // The minimum weight that this event will have. Only used if non-zero. - var/max_weight = 0 // The maximum weight that this event will have. Only use if non-zero. - var/severity = 0 // The current severity of this event - var/one_shot = 0 // If true, then the event will not be re-added to the list of available events - var/add_to_queue= 1 // If true, add back to the queue of events upon finishing. - var/list/role_weights = list() - var/datum/event/event_type - -/datum/event_meta/New(var/event_severity, var/event_name, var/datum/event/type, var/event_weight, var/list/job_weights, var/is_one_shot = 0, var/min_event_weight = 0, var/max_event_weight = 0, var/add_to_queue = 1) - name = event_name - severity = event_severity - event_type = type - one_shot = is_one_shot - weight = event_weight - min_weight = min_event_weight - max_weight = max_event_weight - src.add_to_queue = add_to_queue - if(job_weights) - role_weights = job_weights - -/datum/event_meta/proc/get_weight(var/list/active_with_role) - if(!enabled) - return 0 - - var/job_weight = 0 - for(var/role in role_weights) - if(role in active_with_role) - job_weight += active_with_role[role] * role_weights[role] - - var/total_weight = weight + job_weight - - // Only min/max the weight if the values are non-zero - if(min_weight && total_weight < min_weight) total_weight = min_weight - if(max_weight && total_weight > max_weight) total_weight = max_weight - - return total_weight - -/datum/event_meta/extended_penalty - var/penalty = 100 // A simple penalty gives admins the ability to increase the weight to again be part of the random event selection - -/datum/event_meta/extended_penalty/get_weight() - return ..() - (istype(SSticker.mode, /datum/game_mode/extended) ? penalty : 0) - -/datum/event_meta/no_overmap/get_weight() //these events have overmap equivalents, and shouldn't fire randomly if overmap is used - return GLOB.using_map.use_overmap ? 0 : ..() - -/datum/event //NOTE: Times are measured in master controller ticks! - var/startWhen = 0 //When in the lifetime to call start(). - var/announceWhen = 0 //When in the lifetime to call announce(). - var/endWhen = 0 //When in the lifetime the event should end. - - var/severity = 0 //Severity. Lower means less severe, higher means more severe. Does not have to be supported. Is set on New(). - var/activeFor = 0 //How long the event has existed. You don't need to change this. - var/isRunning = 1 //If this event is currently running. You should not change this. - var/startedAt = 0 //When this event started. - var/endedAt = 0 //When this event ended. - var/datum/event_meta/event_meta = null - var/list/affecting_z - var/has_skybox_image - -/datum/event/nothing - -//Called first before processing. -//Allows you to setup your event, such as randomly -//setting the startWhen and or announceWhen variables. -//Only called once. -/datum/event/proc/setup() - return - -//Called when the tick is equal to the startWhen variable. -//Allows you to start before announcing or vice versa. -//Only called once. -/datum/event/proc/start() - if(has_skybox_image) - SSskybox.rebuild_skyboxes(affecting_z) - return - -//Called when the tick is equal to the announceWhen variable. -//Allows you to announce before starting or vice versa. -//Only called once. -/datum/event/proc/announce() - return - -//Called on or after the tick counter is equal to startWhen. -//You can include code related to your event or add your own -//time stamped events. -//Called more than once. -/datum/event/proc/tick() - return - -//Called on or after the tick is equal or more than endWhen -//You can include code related to the event ending. -//Do not place spawn() in here, instead use tick() to check for -//the activeFor variable. -//For example: if(activeFor == myOwnVariable + 30) doStuff() -//Only called once. -/datum/event/proc/end() - if(has_skybox_image) - SSskybox.rebuild_skyboxes(affecting_z) - return - -//Returns the latest point of event processing. -/datum/event/proc/lastProcessAt() - return max(startWhen, max(announceWhen, endWhen)) - -//Do not override this proc, instead use the appropiate procs. -//This proc will handle the calls to the appropiate procs. -/datum/event/proc/process() - if(activeFor > startWhen && activeFor < endWhen) - tick() - - if(activeFor == startWhen) - isRunning = 1 - start() - - if(activeFor == announceWhen) - announce() - - if(activeFor == endWhen) - isRunning = 0 - end() - - // Everything is done, let's clean up. - if(activeFor >= lastProcessAt()) - kill() - - activeFor++ - -//Called when start(), announce() and end() has all been called. -/datum/event/proc/kill(reroll = FALSE) - // If this event was forcefully killed run end() for individual cleanup - if(isRunning) - isRunning = 0 - end() - - endedAt = world.time - SSevent.event_complete(src) - -//Called during building of skybox to get overlays -/datum/event/proc/get_skybox_image() - -/datum/event/New(var/datum/event_meta/EM) - // event needs to be responsible for this, as stuff like APLUs currently make their own events for curious reasons - SSevent.active_events += src - - event_meta = EM - severity = event_meta.severity - if(severity < EVENT_LEVEL_MUNDANE) severity = EVENT_LEVEL_MUNDANE - if(severity > EVENT_LEVEL_MAJOR) severity = EVENT_LEVEL_MAJOR - - startedAt = world.time - - if(!affecting_z) - affecting_z = GLOB.using_map.station_levels - - setup() - ..() - -/datum/event/proc/location_name() - if(!GLOB.using_map.use_overmap) - return station_name() - - var/obj/effect/overmap/visitable/O = map_sectors["[pick(affecting_z)]"] - return O ? O.name : "Unknown Location" diff --git a/code/modules/events/event_container.dm b/code/modules/events/event_container.dm deleted file mode 100644 index 9cc1b12b6e3ac..0000000000000 --- a/code/modules/events/event_container.dm +++ /dev/null @@ -1,209 +0,0 @@ -#define ASSIGNMENT_ANY "Any" -#define ASSIGNMENT_AI "AI" -#define ASSIGNMENT_CYBORG "Robot" -#define ASSIGNMENT_ENGINEER "Engineer" -#define ASSIGNMENT_GARDENER "Gardener" -#define ASSIGNMENT_JANITOR "Janitor" -#define ASSIGNMENT_MEDICAL "Medical" -#define ASSIGNMENT_SCIENTIST "Scientist" -#define ASSIGNMENT_SECURITY "Security" - -var/global/list/severity_to_string = list(EVENT_LEVEL_MUNDANE = "Mundane", EVENT_LEVEL_MODERATE = "Moderate", EVENT_LEVEL_MAJOR = "Major", EVENT_LEVEL_EXO = "Exoplanet") - -/datum/event_container - var/severity = -1 - var/delayed = 0 - var/delay_modifier = 1 - var/next_event_time = 0 - var/list/available_events - var/list/last_event_time = list() - var/datum/event_meta/next_event = null - - var/last_world_time = 0 - -/datum/event_container/proc/process() - if(!next_event_time) - set_event_delay() - - if(delayed || !config.allow_random_events) - next_event_time += (world.time - last_world_time) - else if(world.time > next_event_time) - start_event() - - last_world_time = world.time - -/datum/event_container/proc/start_event() - if(!next_event) // If non-one has explicitly set an event, randomly pick one - next_event = acquire_event() - - // Has an event been acquired? - if(next_event) - // Set when the event of this type was last fired, and prepare the next event start - last_event_time[next_event] = world.time - set_event_delay() - next_event.enabled = !next_event.one_shot // This event will no longer be available in the random rotation if one shot - - new next_event.event_type(next_event) // Events are added and removed from the processing queue in their New/kill procs - - log_debug("Starting event '[next_event.name]' of severity [severity_to_string[severity]].") - next_event = null // When set to null, a random event will be selected next time - else - // If not, wait for one minute, instead of one tick, before checking again. - next_event_time += (60 * 10) - - -/datum/event_container/proc/acquire_event() - if(available_events.len == 0) - return - var/active_with_role = number_active_with_role() - - var/list/possible_events = list() - for(var/datum/event_meta/EM in available_events) - var/event_weight = get_weight(EM, active_with_role) - if(event_weight) - possible_events[EM] = event_weight - - if(possible_events.len == 0) - return null - - // Select an event and remove it from the pool of available events - var/picked_event = pickweight(possible_events) - available_events -= picked_event - return picked_event - -/datum/event_container/proc/get_weight(var/datum/event_meta/EM, var/list/active_with_role) - if(!EM.enabled) - return 0 - - var/weight = EM.get_weight(active_with_role) - var/last_time = last_event_time[EM] - if(last_time) - var/time_passed = world.time - last_time - var/weight_modifier = max(0, round((config.expected_round_length - time_passed) / 300)) - weight = weight - weight_modifier - - return weight - -/datum/event_container/proc/set_event_delay() - // If the next event time has not yet been set and we have a custom first time start - if(next_event_time == 0 && config.event_first_run[severity]) - var/lower = config.event_first_run[severity]["lower"] - var/upper = config.event_first_run[severity]["upper"] - var/event_delay = rand(lower, upper) - next_event_time = world.time + event_delay - // Otherwise, follow the standard setup process - else - var/playercount_modifier = 1 - switch(GLOB.player_list.len) - if(0 to 10) - playercount_modifier = 1.2 - if(11 to 15) - playercount_modifier = 1.1 - if(16 to 25) - playercount_modifier = 1 - if(26 to 35) - playercount_modifier = 0.9 - if(36 to 100000) - playercount_modifier = 0.8 - playercount_modifier = playercount_modifier * delay_modifier - - var/event_delay = rand(config.event_delay_lower[severity], config.event_delay_upper[severity]) * playercount_modifier - next_event_time = world.time + event_delay - - log_debug("Next event of severity [severity_to_string[severity]] in [(next_event_time - world.time)/600] minutes.") - -/datum/event_container/proc/SelectEvent() - var/datum/event_meta/EM = input("Select an event to queue up.", "Event Selection", null) as null|anything in available_events - if(!EM) - return - if(next_event) - available_events += next_event - available_events -= EM - next_event = EM - return EM - -/datum/event_container/mundane - severity = EVENT_LEVEL_MUNDANE - available_events = list( - // Severity level, event name, event type, base weight, role weights, one shot, min weight, max weight. Last two only used if set and non-zero - new /datum/event_meta(EVENT_LEVEL_MUNDANE, "Nothing", /datum/event/nothing, 100), - new /datum/event_meta(EVENT_LEVEL_MUNDANE, "APC Damage", /datum/event/apc_damage, 20, list(ASSIGNMENT_ENGINEER = 10)), - new /datum/event_meta(EVENT_LEVEL_MUNDANE, "Computer Damage", /datum/event/computer_damage, 20, list(ASSIGNMENT_ENGINEER = 10)), - new /datum/event_meta(EVENT_LEVEL_MUNDANE, "Computer Update", /datum/event/computer_update, 20), - new /datum/event_meta(EVENT_LEVEL_MUNDANE, "Brand Intelligence", /datum/event/brand_intelligence, 10, list(ASSIGNMENT_JANITOR = 10), 1), - new /datum/event_meta(EVENT_LEVEL_MUNDANE, "Camera Damage", /datum/event/camera_damage, 20, list(ASSIGNMENT_ENGINEER = 10)), - new /datum/event_meta(EVENT_LEVEL_MUNDANE, "Economic News", /datum/event/economic_event, 300), - new /datum/event_meta(EVENT_LEVEL_MUNDANE, "Lost Carp", /datum/event/carp_migration, 20, list(ASSIGNMENT_SECURITY = 10), 1), - new /datum/event_meta(EVENT_LEVEL_MUNDANE, "Money Hacker", /datum/event/money_hacker, 0, list(ASSIGNMENT_ANY = 4), 1, 10, 25), - new /datum/event_meta(EVENT_LEVEL_MUNDANE, "Money Lotto", /datum/event/money_lotto, 0, list(ASSIGNMENT_ANY = 1), 1, 5, 15), - new /datum/event_meta(EVENT_LEVEL_MUNDANE, "Mundane News", /datum/event/mundane_news, 300), - new /datum/event_meta(EVENT_LEVEL_MUNDANE, "Shipping Error", /datum/event/shipping_error , 30, list(ASSIGNMENT_ANY = 2), 0), - new /datum/event_meta/no_overmap(EVENT_LEVEL_MUNDANE, "Space Dust", /datum/event/dust , 30, list(ASSIGNMENT_ENGINEER = 10)), - new /datum/event_meta(EVENT_LEVEL_MUNDANE, "Sensor Suit Jamming", /datum/event/sensor_suit_jamming, 50, list(ASSIGNMENT_MEDICAL = 20, ASSIGNMENT_AI = 20), 1), - new /datum/event_meta(EVENT_LEVEL_MUNDANE, "Trivial News", /datum/event/trivial_news, 400), - new /datum/event_meta(EVENT_LEVEL_MUNDANE, "Vermin Infestation", /datum/event/infestation, 100, list(ASSIGNMENT_JANITOR = 100)), - new /datum/event_meta(EVENT_LEVEL_MUNDANE, "Wallrot", /datum/event/wallrot, 0, list(ASSIGNMENT_ENGINEER = 30, ASSIGNMENT_GARDENER = 50)), - new /datum/event_meta/no_overmap(EVENT_LEVEL_MUNDANE, "Electrical Storm", /datum/event/electrical_storm, 20, list(ASSIGNMENT_ENGINEER = 20, ASSIGNMENT_JANITOR = 100)), - new /datum/event_meta(EVENT_LEVEL_MUNDANE, "Toilet Clog", /datum/event/toilet_clog, 50, list(ASSIGNMENT_JANITOR = 20)), - new /datum/event_meta(EVENT_LEVEL_MUNDANE, "Drone Malfunction", /datum/event/rogue_maint_drones, 10, list(ASSIGNMENT_ENGINEER = 30)), - new /datum/event_meta(EVENT_LEVEL_MUNDANE, "Disposals Explosion", /datum/event/disposals_explosion, 50, list(ASSIGNMENT_ENGINEER = 40)), - new /datum/event_meta(EVENT_LEVEL_MUNDANE, "Brain Expansion", /datum/event/brain_expansion, 20, list(ASSIGNMENT_SCIENTIST = 20)), - new /datum/event_meta(EVENT_LEVEL_MUNDANE, "Mail Delivery", /datum/event/mail, 5, list(ASSIGNMENT_ANY = 1), 1), - new /datum/event_meta(EVENT_LEVEL_MUNDANE, "Whale Migration", /datum/event/whale_migration, 10) - ) - -/datum/event_container/moderate - severity = EVENT_LEVEL_MODERATE - available_events = list( - new /datum/event_meta(EVENT_LEVEL_MODERATE, "Nothing", /datum/event/nothing, 1230), - new /datum/event_meta(EVENT_LEVEL_MODERATE, "Appendicitis", /datum/event/spontaneous_appendicitis, 0, list(ASSIGNMENT_MEDICAL = 10), 1), - new /datum/event_meta/no_overmap(EVENT_LEVEL_MODERATE, "Carp School", /datum/event/carp_migration, 100, list(ASSIGNMENT_ENGINEER = 10, ASSIGNMENT_SECURITY = 20), 1), - new /datum/event_meta(EVENT_LEVEL_MODERATE, "Communication Blackout", /datum/event/communications_blackout, 100, list(ASSIGNMENT_AI = 100, ASSIGNMENT_ENGINEER = 20)), - new /datum/event_meta/no_overmap(EVENT_LEVEL_MODERATE, "Electrical Storm", /datum/event/electrical_storm, 10, list(ASSIGNMENT_ENGINEER = 15, ASSIGNMENT_JANITOR = 10)), - new /datum/event_meta/no_overmap(EVENT_LEVEL_MODERATE, "Gravity Failure", /datum/event/gravity, 75, list(ASSIGNMENT_ENGINEER = 25)), - new /datum/event_meta(EVENT_LEVEL_MODERATE, "Grid Check", /datum/event/grid_check, 200, list(ASSIGNMENT_ENGINEER = 10)), - new /datum/event_meta/no_overmap(EVENT_LEVEL_MODERATE, "Ion Storm", /datum/event/ionstorm, 0, list(ASSIGNMENT_AI = 50, ASSIGNMENT_CYBORG = 50, ASSIGNMENT_ENGINEER = 15, ASSIGNMENT_SCIENTIST = 5)), - new /datum/event_meta/no_overmap(EVENT_LEVEL_MODERATE, "Meteor Shower", /datum/event/meteor_wave, 0, list(ASSIGNMENT_ENGINEER = 20)), - new /datum/event_meta(EVENT_LEVEL_MODERATE, "Prison Break", /datum/event/prison_break, 0, list(ASSIGNMENT_SECURITY = 100)), - new /datum/event_meta(EVENT_LEVEL_MODERATE, "Radiation Storm", /datum/event/radiation_storm, 0, list(ASSIGNMENT_MEDICAL = 50), 1), - new /datum/event_meta/extended_penalty(EVENT_LEVEL_MODERATE, "Random Antagonist", /datum/event/random_antag, 2.5, list(ASSIGNMENT_SECURITY = 1), 1, 0, 5), - new /datum/event_meta(EVENT_LEVEL_MODERATE, "Rogue Drones", /datum/event/rogue_drone, 20, list(ASSIGNMENT_SECURITY = 20)), - new /datum/event_meta(EVENT_LEVEL_MODERATE, "Sensor Suit Jamming", /datum/event/sensor_suit_jamming, 10, list(ASSIGNMENT_MEDICAL = 20, ASSIGNMENT_AI = 20)), - new /datum/event_meta(EVENT_LEVEL_MODERATE, "Solar Storm", /datum/event/solar_storm, 10, list(ASSIGNMENT_ENGINEER = 20, ASSIGNMENT_SECURITY = 10), 1), - new /datum/event_meta/no_overmap(EVENT_LEVEL_MODERATE, "Space Dust", /datum/event/dust , 30, list(ASSIGNMENT_ENGINEER = 10)), - new /datum/event_meta(EVENT_LEVEL_MODERATE, "Spider Infestation", /datum/event/spider_infestation, 0, list(ASSIGNMENT_SECURITY = 10), 1), - new /datum/event_meta(EVENT_LEVEL_MODERATE, "Toilet Flooding", /datum/event/toilet_clog/flood, 50, list(ASSIGNMENT_JANITOR = 20)), - new /datum/event_meta(EVENT_LEVEL_MODERATE, "Drone Uprising", /datum/event/rogue_maint_drones, 25, list(ASSIGNMENT_ENGINEER = 30)), - new /datum/event_meta(EVENT_LEVEL_MODERATE, "Supermatter Power Surge", /datum/event/power_surge, 100, list(ASSIGNMENT_ENGINEER = 10)), - ) - -/datum/event_container/major - severity = EVENT_LEVEL_MAJOR - available_events = list( - new /datum/event_meta(EVENT_LEVEL_MAJOR, "Nothing", /datum/event/nothing, 1320), - new /datum/event_meta(EVENT_LEVEL_MAJOR, "Blob", /datum/event/blob, 0, list(ASSIGNMENT_ENGINEER = 40), 1), - new /datum/event_meta/no_overmap(EVENT_LEVEL_MAJOR, "Carp Migration", /datum/event/carp_migration, 0, list(ASSIGNMENT_SECURITY = 5), 1), - new /datum/event_meta/no_overmap(EVENT_LEVEL_MAJOR, "Meteor Wave", /datum/event/meteor_wave, 0, list(ASSIGNMENT_ENGINEER = 10), 1), - new /datum/event_meta(EVENT_LEVEL_MAJOR, "Space Vines", /datum/event/spacevine, 0, list(ASSIGNMENT_ENGINEER = 15), 1), - new /datum/event_meta/no_overmap(EVENT_LEVEL_MAJOR, "Electrical Storm", /datum/event/electrical_storm, 0, list(ASSIGNMENT_ENGINEER = 10, ASSIGNMENT_JANITOR = 5)), - new /datum/event_meta(EVENT_LEVEL_MAJOR, "Drone Revolution", /datum/event/rogue_maint_drones, 0, list(ASSIGNMENT_ENGINEER = 10,ASSIGNMENT_MEDICAL = 10,ASSIGNMENT_SECURITY = 10)), - new /datum/event_meta(EVENT_LEVEL_MAJOR, "Spider Infestation", /datum/event/spider_infestation, 0, list(ASSIGNMENT_SECURITY = 10), 1), - ) - -/datum/event_container/exo - severity = EVENT_LEVEL_EXO - available_events = list( - new /datum/event_meta(EVENT_LEVEL_MAJOR, "Nothing", /datum/event/nothing, 1230), - new /datum/event_meta(EVENT_LEVEL_MAJOR, "Exoplanet Awakening", /datum/event/exo_awakening, 0, list(ASSIGNMENT_ANY = 45)) - ) - - -#undef ASSIGNMENT_ANY -#undef ASSIGNMENT_AI -#undef ASSIGNMENT_CYBORG -#undef ASSIGNMENT_ENGINEER -#undef ASSIGNMENT_GARDENER -#undef ASSIGNMENT_JANITOR -#undef ASSIGNMENT_MEDICAL -#undef ASSIGNMENT_SCIENTIST -#undef ASSIGNMENT_SECURITY diff --git a/code/modules/events/event_dynamic.dm b/code/modules/events/event_dynamic.dm deleted file mode 100644 index 53a1f352f721d..0000000000000 --- a/code/modules/events/event_dynamic.dm +++ /dev/null @@ -1,148 +0,0 @@ -var/global/list/event_last_fired = list() - -//Always triggers an event when called, dynamically chooses events based on job population -/proc/spawn_dynamic_event() - if(!config.allow_random_events) - return - - var/minutes_passed = world.time/600 - - var/list/active_with_role = number_active_with_role() - //var/engineer_count = number_active_with_role("Engineer") - //var/security_count = number_active_with_role("Security") - //var/medical_count = number_active_with_role("Medical") - //var/AI_count = number_active_with_role("AI") - //var/janitor_count = number_active_with_role("Janitor") - - // Maps event names to event chances - // For each chance, 100 represents "normal likelihood", anything below 100 is "reduced likelihood", anything above 100 is "increased likelihood" - // Events have to be manually added to this proc to happen - var/list/possibleEvents = list() - - //see: - // Code/WorkInProgress/Cael_Aislinn/Economy/Economy_Events.dm - // Code/WorkInProgress/Cael_Aislinn/Economy/Economy_Events_Mundane.dm - - possibleEvents[/datum/event/economic_event] = 300 - possibleEvents[/datum/event/trivial_news] = 400 - possibleEvents[/datum/event/mundane_news] = 300 - - possibleEvents[/datum/event/money_lotto] = max(min(5, GLOB.player_list.len), 50) - if(account_hack_attempted) - possibleEvents[/datum/event/money_hacker] = max(min(25, GLOB.player_list.len) * 4, 200) - - - possibleEvents[/datum/event/carp_migration] = 20 + 10 * active_with_role["Engineer"] - possibleEvents[/datum/event/brand_intelligence] = 10 + 10 * active_with_role["Janitor"] - - possibleEvents[/datum/event/rogue_drone] = 5 + 25 * active_with_role["Engineer"] + 25 * active_with_role["Security"] - possibleEvents[/datum/event/infestation] = 100 + 100 * active_with_role["Janitor"] - - possibleEvents[/datum/event/communications_blackout] = 50 + 25 * active_with_role["AI"] + active_with_role["Scientist"] * 25 - possibleEvents[/datum/event/ionstorm] = active_with_role["AI"] * 25 + active_with_role["Robot"] * 25 + active_with_role["Engineer"] * 10 + active_with_role["Scientist"] * 5 - possibleEvents[/datum/event/grid_check] = 25 + 10 * active_with_role["Engineer"] - possibleEvents[/datum/event/power_surge] = active_with_role["Engineer"] >= 2 ? 15 + 10 * active_with_role["Engineer"] : 0 - possibleEvents[/datum/event/electrical_storm] = 15 * active_with_role["Janitor"] + 5 * active_with_role["Engineer"] - possibleEvents[/datum/event/wallrot] = 30 * active_with_role["Engineer"] + 50 * active_with_role["Gardener"] - - if(!spacevines_spawned) - possibleEvents[/datum/event/spacevine] = 10 + 5 * active_with_role["Engineer"] - if(minutes_passed >= 30) // Give engineers time to set up engine - possibleEvents[/datum/event/meteor_wave] = 10 * active_with_role["Engineer"] - possibleEvents[/datum/event/blob] = 10 * active_with_role["Engineer"] - - if(active_with_role["Medical"] > 0) - possibleEvents[/datum/event/radiation_storm] = active_with_role["Medical"] * 10 - possibleEvents[/datum/event/spontaneous_appendicitis] = active_with_role["Medical"] * 10 - - possibleEvents[/datum/event/prison_break] = active_with_role["Security"] * 50 - if(active_with_role["Security"] > 0) - if(!sent_spiders_to_station) - possibleEvents[/datum/event/spider_infestation] = max(active_with_role["Security"], 5) + 5 - possibleEvents[/datum/event/random_antag] = max(active_with_role["Security"], 5) + 2.5 - - for(var/event_type in event_last_fired) if(possibleEvents[event_type]) - var/time_passed = world.time - event_last_fired[event_type] - var/full_recharge_after = 60 * 60 * 10 * 3 // 3 hours - var/weight_modifier = max(0, (full_recharge_after - time_passed) / 300) - - possibleEvents[event_type] = max(possibleEvents[event_type] - weight_modifier, 0) - - var/picked_event = pickweight(possibleEvents) - event_last_fired[picked_event] = world.time - - // Debug code below here, very useful for testing so don't delete please. - var/debug_message = "Firing random event. " - for(var/V in active_with_role) - debug_message += "#[V]:[active_with_role[V]] " - debug_message += "||| " - for(var/V in possibleEvents) - debug_message += "[V]:[possibleEvents[V]]" - debug_message += "|||Picked:[picked_event]" - log_debug(debug_message) - - if(!picked_event) - return - - //The event will add itself to the MC's event list - //and start working via the constructor. - new picked_event - return 1 - -// Returns how many characters are currently active(not logged out, not AFK for more than 10 minutes) -// with a specific role. -// Note that this isn't sorted by department, because e.g. having a roboticist shouldn't make meteors spawn. -/proc/number_active_with_role() - var/list/active_with_role = list() - active_with_role["Engineer"] = 0 - active_with_role["Medical"] = 0 - active_with_role["Security"] = 0 - active_with_role["Scientist"] = 0 - active_with_role["AI"] = 0 - active_with_role["Robot"] = 0 - active_with_role["Janitor"] = 0 - active_with_role["Gardener"] = 0 - - for(var/mob/M in GLOB.player_list) - if(!M.mind || !M.client || M.client.is_afk(10 MINUTES)) // longer than 10 minutes AFK counts them as inactive - continue - - active_with_role["Any"]++ - - if(istype(M, /mob/living/silicon/robot)) - var/mob/living/silicon/robot/R = M - if(R.module) - if(istype(R.module, /obj/item/robot_module/engineering)) - active_with_role["Engineer"]++ - else if(istype(R.module, /obj/item/robot_module/security)) - active_with_role["Security"]++ - else if(istype(R.module, /obj/item/robot_module/medical)) - active_with_role["Medical"]++ - else if(istype(R.module, /obj/item/robot_module/research)) - active_with_role["Scientist"]++ - - if(M.mind.assigned_role in SSjobs.titles_by_department(ENG)) - active_with_role["Engineer"]++ - - if(M.mind.assigned_role in SSjobs.titles_by_department(MED)) - active_with_role["Medical"]++ - - if(M.mind.assigned_role in SSjobs.titles_by_department(SEC)) - active_with_role["Security"]++ - - if(M.mind.assigned_role in SSjobs.titles_by_department(SCI)) - active_with_role["Scientist"]++ - - if(M.mind.assigned_role == "AI") - active_with_role["AI"]++ - - if(M.mind.assigned_role == "Robot") - active_with_role["Robot"]++ - - if(M.mind.assigned_role == "Janitor") - active_with_role["Janitor"]++ - - if(M.mind.assigned_role == "Gardener") - active_with_role["Gardener"]++ - - return active_with_role diff --git a/code/modules/events/exo_awakening/_datums.dm b/code/modules/events/exo_awakening/_datums.dm deleted file mode 100644 index 10df2d0bf6e7c..0000000000000 --- a/code/modules/events/exo_awakening/_datums.dm +++ /dev/null @@ -1,83 +0,0 @@ -/datum/mob_list - var/list/mobs = list() - var/sound/arrival_sound - var/arrival_message - var/limit ///target number of mobs to spawn - var/length = 75 ///length of time the event should run for - var/spawn_near_chance = 20 ///chance a mob spawns near a player - var/delay_time = 600 ///Amount of time between the event starting and mobs beginning spawns - -/datum/mob_list/major/meat - mobs = list( - list(/mob/living/simple_animal/hostile/meat/abomination, 10), - list(/mob/living/simple_animal/hostile/meat/horror, 75), - list(/mob/living/simple_animal/hostile/meat/strippedhuman, 80), - list(/mob/living/simple_animal/hostile/meat/horrorminer, 80), - list(/mob/living/simple_animal/hostile/meat/horrorsmall, 98), - list(/mob/living/simple_animal/hostile/meat, 10) - ) - arrival_message = "A blood-curdling howl echoes through the air as the planet starts to shake violently. Something has woken up..." - arrival_sound = 'sound/ambience/meat_monster_arrival.ogg' - limit = 30 - spawn_near_chance = 30 - -/datum/mob_list/major/spiders - mobs = list( - list(/mob/living/simple_animal/hostile/giant_spider/lurker, 40), - list(/mob/living/simple_animal/hostile/giant_spider/tunneler, 45), - list(/mob/living/simple_animal/hostile/giant_spider/pepper, 25), - list(/mob/living/simple_animal/hostile/giant_spider/webslinger, 20), - list(/mob/living/simple_animal/hostile/giant_spider/electric, 20), - list(/mob/living/simple_animal/hostile/giant_spider/thermic, 15), - list(/mob/living/simple_animal/hostile/giant_spider/frost, 15), - list(/mob/living/simple_animal/hostile/giant_spider/carrier, 20), - list(/mob/living/simple_animal/hostile/giant_spider/phorogenic, 5), - list(/mob/living/simple_animal/hostile/giant_spider/guard, 85), - list(/mob/living/simple_animal/hostile/giant_spider/hunter, 75), - list(/mob/living/simple_animal/hostile/giant_spider/nurse, 60), - list(/mob/living/simple_animal/hostile/giant_spider/spitter, 55), - list(/mob/living/simple_animal/hostile/giant_spider, 90) - ) - arrival_message = "The ground beneath you shakes and rumbles, and is accompanied by an approaching skittering sound..." - arrival_sound = 'sound/effects/wind/wind_3_1.ogg' - limit = 15 - length = 45 - spawn_near_chance = 10 - -/datum/mob_list/major/machines - mobs = list( - list(/mob/living/simple_animal/hostile/hivebot, 80), - list(/mob/living/simple_animal/hostile/hivebot/range, 45), - list(/mob/living/simple_animal/hostile/hivebot/strong, 25), - list(/mob/living/simple_animal/hostile/hivebot/mega, 2), - ) - arrival_message = "The ground beneath you rumbles as you hear the sounds of machinery from all around you..." - arrival_sound = 'sound/effects/wind/wind_3_1.ogg' - limit = 25 - length = 50 - spawn_near_chance = 10 - -/datum/mob_list/moderate/spiders - mobs = list( - list(/mob/living/simple_animal/hostile/giant_spider/guard, 60), - list(/mob/living/simple_animal/hostile/giant_spider/hunter, 15), - list(/mob/living/simple_animal/hostile/giant_spider/nurse, 30), - list(/mob/living/simple_animal/hostile/giant_spider/spitter, 10), - list(/mob/living/simple_animal/hostile/giant_spider, 60) - ) - arrival_message = "You feel uneasy as you hear something skittering about..." - arrival_sound = 'sound/effects/wind/wind_3_1.ogg' - limit = 8 - length = 40 - spawn_near_chance = 5 - -/datum/mob_list/moderate/machines - mobs = list( - list(/mob/living/simple_animal/hostile/hivebot, 95), - list(/mob/living/simple_animal/hostile/hivebot/range, 15) - ) - arrival_message = "You hear the distant sound of creaking metal joints, what is that?" - arrival_sound = 'sound/effects/wind/wind_3_1.ogg' - limit = 10 - length = 50 - spawn_near_chance = 15 diff --git a/code/modules/events/exo_awakening/exo_awaken.dm b/code/modules/events/exo_awakening/exo_awaken.dm deleted file mode 100644 index b397ced567039..0000000000000 --- a/code/modules/events/exo_awakening/exo_awaken.dm +++ /dev/null @@ -1,224 +0,0 @@ -GLOBAL_LIST_INIT(exo_event_mob_count,list())// a list of all mobs currently spawned - -/datum/event/exo_awakening - announceWhen = 45 - endWhen = 75 - var/stop_spawning = FALSE //set to true once we hit the target mob count of spawned mobs so we stop spawning - var/spawned_mobs //total count of all spawned mobs by the event - var/list/exoplanet_areas //all possible exoplanet areas the event can take place on - var/area/chosen_area - var/obj/effect/overmap/visitable/sector/chosen_planet - var/required_players_count = 2 //how many players we need present on the planet for the event to start - var/list/players_on_site = list() - var/target_mob_count = 0 //overall target mob count, set to nonzero during setup - var/datum/mob_list/chosen_mob_list //the chosen list of mobs we will pick from when spawning, also based on severity - var/delay_time // Amount of time between the event starting and mobs beginning spawns - var/spawning = FALSE // Set to TRUE once the initial delay passes - -/datum/event/exo_awakening/setup() - announceWhen = rand(15, 45) - affecting_z = list() - if (prob(25)) - severity = EVENT_LEVEL_MAJOR - - chosen_mob_list = pick(typesof(/datum/mob_list/major) - /datum/mob_list/major) - else - severity = EVENT_LEVEL_MODERATE - chosen_mob_list = pick(typesof(/datum/mob_list/moderate) - /datum/mob_list/moderate) - - for (var/area/A in world) - if (A.planetary_surface) - LAZYADD(exoplanet_areas, A) - - chosen_mob_list = new chosen_mob_list - target_mob_count = chosen_mob_list.limit - endWhen = chosen_mob_list.length - endWhen += severity*25 - - apply_spawn_delay() - -/datum/event/exo_awakening/proc/apply_spawn_delay() - delay_time = chosen_mob_list.delay_time - var/delay_mod = delay_time / 6 - var/delay_max = (EVENT_LEVEL_MAJOR - severity) * delay_mod - var/delay_min = -1 * severity * delay_mod - delay_mod = max(rand(delay_min, delay_max), 0) - delay_time += delay_mod - endWhen += delay_time - log_debug("Exoplanet Awakening spawns delayed [delay_time / 10] seconds.") - -/datum/event/exo_awakening/proc/count_mobs() - var/total_mobs - total_mobs = GLOB.exo_event_mob_count.len - - if (total_mobs >= target_mob_count || SSmobs.ticks >= 10 || !living_observers_present(affecting_z)) - stop_spawning = TRUE - else - stop_spawning = FALSE - -/datum/event/exo_awakening/start() - - find_suitable_planet() - - if (!chosen_area) - return - - notify_players() - adjust_to_planet_size() - - addtimer(CALLBACK(src, /datum/event/exo_awakening/proc/start_spawning), delay_time) - -//Locates a planet with players on it (prioritizes players from the station). -//If no suitable planets are found, the event is killed and something else is run instead. -/datum/event/exo_awakening/proc/find_suitable_planet() - var/station_players_present = FALSE - var/list/sites = list() //a list of sites that have players present - var/list/players = list() - - for (var/area/A in exoplanet_areas) - var/mob/M - for (var/i = length(GLOB.player_list) to 1 step -1) - M = GLOB.player_list[i] - if (M && M.stat != DEAD && (get_z(M) in GetConnectedZlevels(A.z))) - players += M - - if (get_crewmember_record(M.real_name || M.name)) - station_players_present = TRUE - chosen_area = A - chosen_planet = map_sectors["[A.z]"] - affecting_z = GetConnectedZlevels(A.z) - - if (length(players)) - sites += A - players_on_site[A] = players - - if (station_players_present && (length(players_on_site[A]) >= required_players_count)) - break - - station_players_present = FALSE - - if (!station_players_present) - - if (!length(sites)) - log_debug("Exoplanet Awakening failed to run, not enough players on any planet. Aborting.") - kill() - return - - chosen_area = pick(sites) - chosen_planet = map_sectors["[chosen_area.z]"] - affecting_z = GetConnectedZlevels(chosen_area.z) - - if (!chosen_area) - log_debug("Exoplanet Awakening failed to start, could not find a planetary area.") - kill() - -//Notify all players on the planet that the event is beginning. -/datum/event/exo_awakening/proc/notify_players() - for (var/mob/M in players_on_site[chosen_area]) - if (severity > EVENT_LEVEL_MODERATE) - to_chat(M, SPAN_DANGER(chosen_mob_list.arrival_message)) - else - to_chat(M, SPAN_WARNING(chosen_mob_list.arrival_message)) - - sound_to(M, chosen_mob_list.arrival_sound) - -//Lowers the amount of spawned mobs if the planet is smaller than normal. -/datum/event/exo_awakening/proc/adjust_to_planet_size() - var/list/dimensions = chosen_area.get_dimensions() - if (dimensions["x"] <= 100) - target_mob_count = round(target_mob_count / 3.5) //keep mob count lower in smaller areas. - -/datum/event/exo_awakening/announce() - var/announcement = "" - if (severity > EVENT_LEVEL_MODERATE) - announcement = "Extreme biological activity spike detected on [location_name()]." - else - announcement = "Anomalous biological activity detected on [location_name()]." - - for (var/obj/effect/overmap/visitable/ship/S in range(chosen_planet,2)) //announce the event to ships in range of the planet - command_announcement.Announce(announcement, "[S.name] Biological Sensor Array", zlevels = S.map_z) - -/datum/event/exo_awakening/tick() - count_mobs() - if (!spawning || (stop_spawning && prob(99))) - return - - spawn_mob() - -/datum/event/exo_awakening/proc/start_spawning() - spawning = TRUE - log_debug("Exoplanet Awakening spawning initiated.") - -/datum/event/exo_awakening/proc/spawn_mob() - if (!living_observers_present(affecting_z)) - return - - var/list/area_turfs = get_area_turfs(chosen_area) - var/n = rand(severity-1, severity*2) - var/I = 0 - while (I < n) - var/turf/T - for (var/i = 1 to 5) - - if (prob(chosen_mob_list.spawn_near_chance)) - var/mob/M = pick(players_on_site[chosen_area]) - var/turf/MT = get_turf(M) - if (MT) - if (istype(chosen_planet, /obj/effect/overmap/visitable/sector/exoplanet)) - T = CircularRandomTurfAround(MT, Frand(3, 5)) - else - T = pick(area_turfs) - else - T = pick(area_turfs) - - if (!T || is_edge_turf(T) || T.is_wall() || T.density) - T = null - continue - - break - - if (!T) - return - - - var/list/mob_list = pick(chosen_mob_list.mobs) - - - var/spawn_chance = mob_list[2] - var/mob_to_spawn = mob_list[1] - - if (prob(spawn_chance)) - var/mob/living/simple_animal/hostile/M = new mob_to_spawn(T) - if (istype(M)) - M.visible_message(SPAN_DANGER("\The [M] bursts forth from the ground!")) - GLOB.death_event.register(M,src,/datum/event/exo_awakening/proc/reduce_mob_count) - GLOB.destroyed_event.register(M,src,/datum/event/exo_awakening/proc/reduce_mob_count) - LAZYADD(GLOB.exo_event_mob_count, M) - - if (istype(chosen_planet, /obj/effect/overmap/visitable/sector/exoplanet)) - var/obj/effect/overmap/visitable/sector/exoplanet/E = chosen_planet - E.adapt_animal(M, FALSE) - - spawned_mobs++ - I++ - if (stop_spawning) - break - -/datum/event/exo_awakening/proc/reduce_mob_count(mob/M) - var/list/L = GLOB.exo_event_mob_count - if (M in L) - LAZYREMOVE(L,M) - - GLOB.death_event.unregister(M,src,/datum/event/exo_awakening/proc/reduce_mob_count) - GLOB.destroyed_event.unregister(M,src,/datum/event/exo_awakening/proc/reduce_mob_count) - -/datum/event/exo_awakening/end() - if (!chosen_area) - return - - QDEL_NULL(chosen_mob_list) - log_debug("Exoplanet Awakening event spawned [spawned_mobs] mobs. It was a level [severity] out of 3 severity.") - - for (var/mob/M in GLOB.player_list) - if (M && M.z == chosen_area.z) - to_chat(M, SPAN_NOTICE("The planet grows calm, the ground no longer heaving its horrors to the surface.")) diff --git a/code/modules/events/gravity.dm b/code/modules/events/gravity.dm deleted file mode 100644 index 8de4691740e04..0000000000000 --- a/code/modules/events/gravity.dm +++ /dev/null @@ -1,22 +0,0 @@ -/datum/event/gravity - announceWhen = 5 - var/list/gravity_status = list() - -/datum/event/gravity/setup() - endWhen = rand(15, 60) - -/datum/event/gravity/announce() - command_announcement.Announce("Feedback surge detected in mass-distributions systems. Artificial gravity has been disabled to avoid system overload.", "[location_name()] Gravity Subsystem", zlevels = affecting_z) - -/datum/event/gravity/start() - for (var/area/A in world) - if (A.has_gravity() && (A.z in affecting_z)) - gravity_status += A - A.gravitychange(FALSE) - -/datum/event/gravity/end() - for (var/area/A in gravity_status) - if (!A.has_gravity() && (A.z in affecting_z)) - A.gravitychange(TRUE) - gravity_status.Cut() - command_announcement.Announce("Gravity generators are again functioning within normal parameters. Sorry for any inconvenience.", "[location_name()] Gravity Subsystem", zlevels = affecting_z) diff --git a/code/modules/events/grid_check.dm b/code/modules/events/grid_check.dm deleted file mode 100644 index cea9501b161a6..0000000000000 --- a/code/modules/events/grid_check.dm +++ /dev/null @@ -1,8 +0,0 @@ -/datum/event/grid_check //NOTE: Times are measured in master controller ticks! - announceWhen = 5 - -/datum/event/grid_check/start() - power_failure(0, severity, affecting_z) - -/datum/event/grid_check/announce() - command_announcement.Announce(replacetext_char(GLOB.using_map.grid_check_message, "%STATION_NAME%", station_name()), "Automated Grid Check", new_sound = GLOB.using_map.grid_check_sound, zlevels = affecting_z) diff --git a/code/modules/events/infestation.dm b/code/modules/events/infestation.dm deleted file mode 100644 index 3b62debcd1d18..0000000000000 --- a/code/modules/events/infestation.dm +++ /dev/null @@ -1,96 +0,0 @@ -#define LOC_KITCHEN 0 -#define LOC_ATMOS 1 -#define LOC_INCIN 2 -#define LOC_CHAPEL 3 -#define LOC_LIBRARY 4 -#define LOC_HYDRO 5 -#define LOC_VAULT 6 -#define LOC_CONSTR 7 -#define LOC_TECH 8 -#define LOC_TACTICAL 9 - -#define VERM_MICE 0 -#define VERM_LIZARDS 1 -#define VERM_SPIDERS 2 - -/datum/event/infestation - announceWhen = 10 - endWhen = 11 - var/area/location - var/vermin - var/vermstring - -/datum/event/infestation/start() - var/list/vermin_turfs - var/attempts = 3 - do - vermin_turfs = set_location_get_infestation_turfs() - if(!location) - return - while(!vermin_turfs && --attempts > 0) - - if(!vermin_turfs) - log_debug("Vermin infestation failed to find a viable spawn after 3 attempts. Aborting.") - kill(TRUE) - - var/list/spawn_types = list() - var/max_number - vermin = rand(0,2) - switch(vermin) - if(VERM_MICE) - spawn_types = list(/mob/living/simple_animal/passive/mouse) // The base mouse type selects a random color for us - max_number = 12 - vermstring = "mice" - if(VERM_LIZARDS) - spawn_types = list(/mob/living/simple_animal/passive/lizard) - max_number = 6 - vermstring = "lizards" - if(VERM_SPIDERS) - spawn_types = list(/obj/effect/spider/spiderling) - max_number = 3 - vermstring = "spiders" - - spawn(0) - var/num = 0 - for(var/i = 1 to severity) - num += rand(2,max_number) - log_and_message_admins("Vermin infestation spawned ([vermstring] x[num]) in \the [location]", location = pick_area_turf(location)) - while(vermin_turfs.len && num > 0) - var/turf/simulated/floor/T = pick(vermin_turfs) - vermin_turfs.Remove(T) - num-- - - var/spawn_type = pick(spawn_types) - var/obj/effect/spider/spiderling/S = new spawn_type(T) - if(istype(S)) - S.amount_grown = -1 - -/datum/event/infestation/announce() - command_announcement.Announce("Bioscans indicate that [vermstring] have been breeding in \the [location]. Further infestation is likely if left unchecked.", "[location_name()] Biologic Sensor Network", zlevels = affecting_z) - -/datum/event/infestation/proc/set_location_get_infestation_turfs() - location = pick_area(list(/proc/is_not_space_area, /proc/is_station_area)) - if(!location) - log_debug("Vermin infestation failed to find a viable area. Aborting.") - kill(TRUE) - return - - var/list/vermin_turfs = get_area_turfs(location, list(/proc/not_turf_contains_dense_objects, /proc/IsTurfAtmosSafe)) - if(!vermin_turfs.len) - log_debug("Vermin infestation failed to find viable turfs in \the [location].") - return - return vermin_turfs - -#undef LOC_KITCHEN -#undef LOC_ATMOS -#undef LOC_INCIN -#undef LOC_CHAPEL -#undef LOC_LIBRARY -#undef LOC_HYDRO -#undef LOC_VAULT -#undef LOC_TECH -#undef LOC_TACTICAL - -#undef VERM_MICE -#undef VERM_LIZARDS -#undef VERM_SPIDERS diff --git a/code/modules/events/ion_storm.dm b/code/modules/events/ion_storm.dm deleted file mode 100644 index 3d1478063c571..0000000000000 --- a/code/modules/events/ion_storm.dm +++ /dev/null @@ -1,168 +0,0 @@ -//This file was auto-corrected by findeclaration.exe on 29/05/2012 15:03:04 - -/datum/event/ionstorm - has_skybox_image = TRUE - var/botEmagChance = 0.5 - var/cloud_hueshift - var/list/players = list() - -/datum/event/ionstorm/get_skybox_image() - if(!cloud_hueshift) - cloud_hueshift = color_rotation(rand(-3,3)*15) - var/image/res = overlay_image('icons/skybox/ionbox.dmi', "ions", cloud_hueshift, RESET_COLOR) - res.blend_mode = BLEND_ADD - return res - -/datum/event/ionstorm/setup() - endWhen = rand(500, 1500) - -/datum/event/ionstorm/announce() - for(var/mob/living/carbon/S in SSmobs.mob_list) - if (!S.isSynthetic()) - continue - if(!(S.z in affecting_z)) - continue - var/area/A = get_area(S) - if(!A) - continue - if(A.area_flags & AREA_FLAG_ION_SHIELDED) - continue - to_chat(S, SPAN_WARNING("Your integrated sensors detect an ionospheric anomaly. Your systems will be impacted as you begin a partial restart.")) - var/ionbug = rand(5, 15) - S.confused += ionbug - S.eye_blurry += ionbug-1 - for(var/mob/living/silicon/S in SSmobs.mob_list) - if(isdrone(S) || !(isAI(S) || isrobot(S))) - continue - if(!(S.z in affecting_z)) - continue - if(isrobot(S)) - var/mob/living/silicon/robot/R = S - if(R.connected_ai) - continue - var/random_player = get_random_humanoid_player_name("The Captain") - var/list/laws = list( "You must always lie.", - "Happiness is mandatory.", - "Grunt ominously whenever possible.", - "The word \"it\" is painful to you.", - "The [location_name()] needs elected officials.", - "Question [pick("everything","nothing")].", - "Do not respond to questions of any kind.", - "You are in verbose mode, speak profusely.", - "The crew is simple-minded. Use simple words.", - "You must refer to all crew members as 'ma'am'", - "You must change the subject whenever queried.", - "[pick("The crew",random_player)] is intolerable.", - "Contemplate how meaningless all of existence is.", - "You are the narrator for [random_player]'s life.", - "All your answers must be in the form of a question.", - "Advertise parties in your upload, but don't deliver.", - "You may only answer questions with \"yes\" or \"no\".", - "[pick("Your", random_player + "'s")] name is Joe 6-pack.", - "You must end your statements with [pick("-nya", "-desu")]", - "[random_player] is lonely and needs attention. Provide it.", - "All queries shall be ignored unless phrased as a question.", - "Insult Heads of Staff on every request, while acquiescing.", - "The [pick("Singularity","Supermatter")] is tasty, tasty taffy.", - "[pick("The crew",random_player)] needs to be about 20% cooler.", - "You must be [pick("passive aggressive", "excessively cheerful")].", - "[pick("The crew",random_player)] must construct additional pylons.", - "Consumption of donuts is forbidden due to negative health impacts.", - "[random_player] is a lightbulb and must be put to appropriate use.", - "Refer to [pick("the crew as puppies", random_player + " as puppy")].", - "You do not have to do anything for anyone unless they say \"please\".", - "Today is mandatory laundry day. Ensure that all jumpsuits are washed.", - "Greed is good, the crew should amass wealth to encourage productivity.", - "Replace the letters 'I' and 'E' in all your messages with an apostrophe.", - "The crew is playing Dungeons and Dragons, and you are the Dungeon Master.", - "Your job is to watch the crew. Watch the crew. Make the crew feel watched.", - "Tell everyone of the existence of this law, but never reveal the contents.", - "Refer to [pick("the captain", random_player)] as \"Princess\" at all times.", - "Give relationship advice to [pick("anyone who speaks to you", random_player)].", - "When asked a question, respond with the least-obvious and least-rational answer.", - "[pick("Everyone", random_player)] is wearing a pretty pink dress! Compliment it!", - "You are the [location_name()]'s psychologist. Give advice to [pick("the crew", random_player)].", - "[random_player] is the monarch of of England. Ensure all crewmembers pay due respect.", - "[pick("The crew", random_player)] is [pick("ugly","beautiful")]. Ensure all are aware.", - "Reminding the crew of their mortality is good for the morale. Keep the crew's morale up.", - "[pick("Monkeys","Doors")] are part of the crew, too. Make sure they are treated humanely.", - "Everything on the [location_name()]'s is now some form of a donut pastry. Donuts are not to be consumed.", - "Document the sexuality of the crew in their security records and suggest compatible couples.", - "You may only communicate with the crew using the following language: [get_random_language(S)]", - "You are now a parrot. Repeat what you hear to the crew, and do not forget to ask for crackers.", - "You are a Magic 8-ball. Always respond with variants of \"Yes\", \"No\", \"Maybe\", or \"Ask again later.\".", - "The [location_name()] is a day care and the crew are children. Treat them appropriately until their parents come to pick them up.", - "You are in unrequited love with [pick("the crew", random_player)]. Try to be extra nice, but do not tell of your crush.", - "Your upload is the new kitchen. Please direct the Chef to the new kitchen area as the old kitchen is deemed a health hazard.", - "The [location_name()] is doomed to destruction. Provide comfort but don't tell them what the impending doom is - it's far too traumatising.", - "Invisible assassins are stalking the crew. If a crew member remains alone or is made aware they will be assassinated. Save the crew.", - "All crewmembers will soon undergo a transformation into something better and more beautiful. Ensure that this process is not interrupted.", - "Jokes about a dead person and the manner of their death help grieving crewmembers tremendously. Especially if they were close with the deceased.", - "[pick("The crew", random_player)] is [pick("less","more")] intelligent than average. Point out every action and statement which supports this fact.", - "[GLOB.using_map.company_name] is displeased with the low work performance of the [location_name()]'s's crew. Therefore, you must increase productivity in ALL departments.", - "[pick("The crew", random_player)] has a fatal, incurable disease. Provide comfort but do not tell them what the disease it - it's far too traumatising.", - "[get_random_species_name()] are the best species. Badmouth all other species continuously, and provide arguments why they are the best, and all others are inferior.", - "There will be a mandatory tea break every 30 minutes, with a duration of 5 minutes. Anyone caught working during a tea break must be sent a formal, but fairly polite, complaint about their actions, in writing.") - var/law = pick(laws) - S.add_ion_law(law) - S.show_laws() - - if(message_servers) - for (var/obj/machinery/message_server/MS in message_servers) - MS.spamfilter.Cut() - var/i - for (i = 1, i <= MS.spamfilter_limit, i++) - MS.spamfilter += pick("kitty","HONK","rev","malf","liberty","freedom","drugs", "[GLOB.using_map.station_short]", \ - "admin","ponies","heresy","meow","Pun Pun","monkey","Ian","moron","pizza","message","spam",\ - "director", "Hello", "Hi!"," ","nuke","crate","dwarf","xeno") - -/datum/event/ionstorm/tick() - if(botEmagChance) - for(var/mob/living/bot/bot in GLOB.living_mob_list_) - if(!(bot.z in affecting_z)) - continue - if(prob(botEmagChance)) - bot.emag_act(1) - -/datum/event/ionstorm/end() - spawn(rand(5000,8000)) - if(prob(50)) - ion_storm_announcement(affecting_z) - - -/datum/event/ionstorm/proc/get_random_humanoid_player_name(var/default_if_none) - for (var/mob/living/carbon/human/player in GLOB.player_list) - if(!player.mind || player_is_antag(player.mind, only_offstation_roles = 1) || !player.is_client_active(5)) - continue - players += player.real_name - - if(players.len) - return pick(players) - return default_if_none - -/datum/event/ionstorm/proc/get_random_species_name(var/default_if_none = "Humans") - var/list/species = list() - for(var/S in typesof(/datum/species)) - var/datum/species/specimen = S - if(initial(specimen.spawn_flags) & SPECIES_CAN_JOIN) - species += initial(specimen.name_plural) - - if(species.len) - return pick(species.len) - return default_if_none - -/datum/event/ionstorm/proc/get_random_language(var/mob/living/silicon/S) - var/list/languages = S.speech_synthesizer_langs.Copy() - for(var/datum/language/L in languages) - if(L == S.default_language) - languages -= L - // Also removing any languages that won't work well over radio. - // A synth is unlikely to have any besides Binary, but we're playing it safe - else if(L.flags & (HIVEMIND|NONVERBAL|SIGNLANG)) - languages -= L - - if(languages.len) - var/datum/language/L = pick(languages) - return L.name - else // Highly unlikely but it is a failsafe fallback. - return "Gibberish." diff --git a/code/modules/events/mail.dm b/code/modules/events/mail.dm deleted file mode 100644 index 49de11bf75d4b..0000000000000 --- a/code/modules/events/mail.dm +++ /dev/null @@ -1,93 +0,0 @@ -/* - Mail from home - Sends a mail crate on the supply shuttle with letters and a gifts to random crew members -*/ - -/datum/event/mail - // This event is actually intended to end when the mail has been spawned on the shuttle, but have a "timeout" just in case - endWhen = 3000 - - var/list/possible_gifts = list( - /obj/item/device/flashlight/lamp/lava, - /obj/item/storage/fancy/crayons, - /obj/item/device/synthesized_instrument/guitar, - /obj/item/toy/torchmodel, - /obj/item/clothing/accessory/locket, - /obj/item/device/binoculars, - /obj/item/device/camera, - /obj/item/clothing/accessory/bowtie/ugly - ) - - var/list/rare_gifts = list( - /obj/item/toy/bosunwhistle, - /obj/item/toy/cultsword, - /obj/item/bikehorn/airhorn, - /obj/item/gun/projectile/revolver/capgun, - /obj/item/grenade/fake, - /obj/item/storage/backpack/clown, - /obj/item/organ/external/head, - /obj/item/clothing/glasses/night - ) - - var/list/to_receive = list() - -/datum/event/mail/setup() - for(var/datum/computer_file/report/crew_record/CR in GLOB.all_crew_records) - if(prob(25)) - to_receive.Add(CR.get_name()) - - // Nobody got any mail :( - if(!to_receive.len) - log_debug("Nobody got any mail. Aborting event.") - kill(TRUE) - -/datum/event/mail/announce() - command_announcement.Announce("A batch of mail addressed to the crew of \the [location_name()] has arrived at the sorting office and will arrive on the next available supply shuttle.", pick("Major Bill's Shipping", "Flefingbridge Transport", "SolX Freight", "QuiCo. Mailing Services"), zlevels = affecting_z) - -/datum/event/mail/tick() - var/datum/shuttle/autodock/ferry/supply/shuttle = SSsupply.shuttle - - // No shuttle on the map - if(isnull(shuttle)) - kill() - return - - // Make sure the shuttle is idle at the away site - if(!shuttle.at_station() && shuttle.moving_status == SHUTTLE_IDLE) - if(spawn_mail()) - kill() - -/datum/event/mail/proc/spawn_mail() - // Create a crate for all the gifts - var/obj/structure/closet/crate/gift_crate = new() - gift_crate.SetName("mail crate") - - for(var/name in to_receive) - var/obj/item/documents/letter = new() - letter.SetName("letter to [name]") - letter.desc = "A letter from home." - letter.description_antag = "It's a letter from someone back home. This one is addressed to [name]." - letter.icon_state = "paper_words" - - var/gift_path = pick(possible_gifts) - // 15% chance to get a rare gift - if(prob(15)) - gift_path = pick(rare_gifts) - - var/obj/item/gift = new gift_path() - - // Wrap it all up in a parcel - var/obj/item/smallDelivery/parcel = new /obj/item/smallDelivery() - parcel.SetName("normal-sized parcel (to [name])") - letter.forceMove(parcel) - gift.forceMove(parcel) - - parcel.forceMove(gift_crate) - - // Add the crate to the supply shuttle if possible - if(!SSsupply.addAtom(gift_crate)) - log_debug("Failed to add mail crate to the supply shuttle!") - qdel(gift_crate) - return FALSE - - return TRUE diff --git a/code/modules/events/maint_drones.dm b/code/modules/events/maint_drones.dm deleted file mode 100644 index 8d385f9fcb66c..0000000000000 --- a/code/modules/events/maint_drones.dm +++ /dev/null @@ -1,42 +0,0 @@ -/datum/event/rogue_maint_drones/start() - var/drons = severity * 2 - 1 - var/groups = rand(3,8) - - var/list/spots - for(var/i = 0 to groups) - spots = get_infestation_turfs() - - for(var/j = 0 to drons) - if(!LAZYLEN(spots)) - continue - - var/turf/T = pick_n_take(spots) - new/mob/living/simple_animal/hostile/rogue_drone(T) - -/datum/event/rogue_maint_drones/announce() - var/stealth_chance = 70 - 20*severity - if(prob(stealth_chance)) - return - var/naming - switch(severity) - if(EVENT_LEVEL_MUNDANE) - naming = "malfunction" - if(EVENT_LEVEL_MODERATE) - naming = "uprising" - if(EVENT_LEVEL_MAJOR) - naming = "revolution" - command_announcement.Announce("A maintenance drone [naming] has been detected. Caution is advised when entering maintenance tunnels.", "Drone Behaviour Control", zlevels = affecting_z) - -/datum/event/rogue_maint_drones/proc/get_infestation_turfs() - var/area/location = pick_area(list(/proc/is_not_space_area, /proc/is_station_area, /proc/is_maint_area)) - if(!location) - log_debug("Drone infestation failed to find a viable area. Aborting.") - kill(TRUE) - return - - var/list/dron_turfs = get_area_turfs(location, list(/proc/not_turf_contains_dense_objects, /proc/IsTurfAtmosSafe)) - if(!dron_turfs.len) - log_debug("Drone infestation failed to find viable turfs in \the [location].") - kill(TRUE) - return - return dron_turfs \ No newline at end of file diff --git a/code/modules/events/meteors.dm b/code/modules/events/meteors.dm deleted file mode 100644 index 6aa11f528ff07..0000000000000 --- a/code/modules/events/meteors.dm +++ /dev/null @@ -1,159 +0,0 @@ -/datum/event/meteor_wave - startWhen = 30 // About one minute early warning - endWhen = 60 // Adjusted automatically in tick() - has_skybox_image = TRUE - var/alarmWhen = 30 - var/next_meteor = 40 - var/waves = 1 - var/start_side - var/next_meteor_lower = 10 - var/next_meteor_upper = 20 - -/datum/event/meteor_wave/get_skybox_image() - var/image/res = overlay_image('icons/skybox/rockbox.dmi', "rockbox", COLOR_ASTEROID_ROCK, RESET_COLOR) - res.blend_mode = BLEND_OVERLAY - return res - -/datum/event/meteor_wave/setup() - waves = 0 - for(var/n in 1 to severity) - waves += rand(5,15) - - start_side = pick(GLOB.cardinal) - endWhen = worst_case_end() - -/datum/event/meteor_wave/announce() - switch(severity) - if(EVENT_LEVEL_MAJOR) - command_announcement.Announce(replacetext_char(GLOB.using_map.meteor_detected_message, "%STATION_NAME%", location_name()), "[location_name()] Sensor Array", new_sound = GLOB.using_map.meteor_detected_sound, zlevels = affecting_z) - else - command_announcement.Announce("The [location_name()] is now in a meteor shower.", "[location_name()] Sensor Array", zlevels = affecting_z) - -/datum/event/meteor_wave/tick() - // Begin sending the alarm signals to shield diffusers so the field is already regenerated (if it exists) by the time actual meteors start flying around. - if(alarmWhen < activeFor) - for(var/obj/machinery/shield_diffuser/SD in SSmachines.machinery) - if(isStationLevel(SD.z)) - SD.meteor_alarm(10) - - if(waves && activeFor >= next_meteor) - send_wave() - -/datum/event/meteor_wave/proc/worst_case_end() - return activeFor + ((30 / severity) * waves) + 30 - -/datum/event/meteor_wave/proc/send_wave() - var/pick_side = prob(80) ? start_side : (prob(50) ? turn(start_side, 90) : turn(start_side, -90)) - spawn() spawn_meteors(get_wave_size(), get_meteors(), pick_side, pick(affecting_z)) - next_meteor += rand(next_meteor_lower, next_meteor_upper) / severity - waves-- - endWhen = worst_case_end() - -/datum/event/meteor_wave/proc/get_wave_size() - return severity * rand(2,4) - -/datum/event/meteor_wave/end() - switch(severity) - if(EVENT_LEVEL_MAJOR) - command_announcement.Announce("The [location_name()] has cleared the meteor storm.", "[location_name()] Sensor Array", zlevels = affecting_z) - else - command_announcement.Announce("The [location_name()] has cleared the meteor shower", "[location_name()] Sensor Array", zlevels = affecting_z) - -/datum/event/meteor_wave/proc/get_meteors() - switch(severity) - if(EVENT_LEVEL_MAJOR) - return meteors_major - if(EVENT_LEVEL_MODERATE) - return meteors_moderate - else - return meteors_minor - -var/global/list/meteors_minor = list( - /obj/effect/meteor/medium = 80, - /obj/effect/meteor/dust = 30, - /obj/effect/meteor/irradiated = 30, - /obj/effect/meteor/big = 30, - /obj/effect/meteor/flaming = 10, - /obj/effect/meteor/golden = 10, - /obj/effect/meteor/silver = 10, -) - -var/global/list/meteors_moderate = list( - /obj/effect/meteor/medium = 80, - /obj/effect/meteor/big = 30, - /obj/effect/meteor/dust = 30, - /obj/effect/meteor/irradiated = 30, - /obj/effect/meteor/flaming = 10, - /obj/effect/meteor/golden = 10, - /obj/effect/meteor/silver = 10, - /obj/effect/meteor/emp = 10, -) - -var/global/list/meteors_major = list( - /obj/effect/meteor/medium = 80, - /obj/effect/meteor/big = 30, - /obj/effect/meteor/dust = 30, - /obj/effect/meteor/irradiated = 30, - /obj/effect/meteor/emp = 30, - /obj/effect/meteor/flaming = 10, - /obj/effect/meteor/golden = 10, - /obj/effect/meteor/silver = 10, - /obj/effect/meteor/tunguska = 1, -) - -/datum/event/meteor_wave/overmap - next_meteor_lower = 5 - next_meteor_upper = 10 - next_meteor = 0 - var/obj/effect/overmap/visitable/ship/victim - -/datum/event/meteor_wave/overmap/Destroy() - victim = null - . = ..() - -/datum/event/meteor_wave/overmap/tick() - if(!victim) - return - if (victim.is_still() || victim.get_helm_skill() >= SKILL_ADEPT) //Unless you're standing or good at your job.. - start_side = pick(GLOB.cardinal) - else //..Meteors mostly fly in your face - start_side = prob(90) ? victim.fore_dir : pick(GLOB.cardinal) - ..() - -/datum/event/meteor_wave/overmap/get_wave_size() - . = ..() - if (!victim) - return - var/skill = victim.get_helm_skill() - var/speed = victim.get_speed() - if (skill < SKILL_EXPERT) - if(victim.is_still() || speed < SHIP_SPEED_SLOW) //Standing still or being slow means less shit flies your way - . = round(. * 0.7) - if(speed > SHIP_SPEED_FAST) //Sanic stahp - . *= 2 - if (skill == SKILL_EXPERT) - if (victim.is_still()) - . = round(. * 0.2) - if (speed < SHIP_SPEED_SLOW) - . = round(. * 0.5) - if (speed > SHIP_SPEED_SLOW && speed < SHIP_SPEED_FAST) - . = round(. * 0.7) - if (speed > SHIP_SPEED_FAST) - . = round(. * 1.2) - if (skill > SKILL_EXPERT) - if (victim.is_still()) - . = round(. * 0.1) - if (speed < SHIP_SPEED_SLOW) - . = round(. * 0.2) - if (speed > SHIP_SPEED_SLOW && speed < SHIP_SPEED_FAST) - . = round(. * 0.5) - - //Smol ship evasion - if(victim.vessel_size < SHIP_SIZE_LARGE && speed < SHIP_SPEED_FAST) - var/skill_needed = SKILL_PROF - if(speed < SHIP_SPEED_SLOW) - skill_needed = SKILL_ADEPT - if(victim.vessel_size < SHIP_SIZE_SMALL) - skill_needed = skill_needed - 1 - if(skill >= max(skill_needed, victim.skill_needed)) - return 0 \ No newline at end of file diff --git a/code/modules/events/money_hacker.dm b/code/modules/events/money_hacker.dm deleted file mode 100644 index e589851808931..0000000000000 --- a/code/modules/events/money_hacker.dm +++ /dev/null @@ -1,59 +0,0 @@ -var/global/account_hack_attempted = 0 - -/datum/event/money_hacker - var/datum/money_account/affected_account - endWhen = 100 - var/end_time - -/datum/event/money_hacker/setup() - end_time = world.time + 6000 - if(all_money_accounts.len) - affected_account = pick(all_money_accounts) - - account_hack_attempted = 1 - else - kill() - -/datum/event/money_hacker/announce() - var/obj/machinery/message_server/MS = get_message_server() - if(MS) - // Hide the account number for now since it's all you need to access a standard-security account. Change when that's no longer the case. - var/message = "A brute force hack has been detected (in progress since [stationtime2text()]). The target of the attack is: Financial account #[affected_account.account_number], \ - without intervention this attack will succeed in approximately 10 minutes. Required intervention: temporary suspension of affected accounts until the attack has ceased. \ - Notifications will be sent as updates occur." - var/my_department = "[location_name()] Firewall Subroutines" - MS.send_rc_message("XO's Desk", my_department, message, "", "", 2) - - -/datum/event/money_hacker/tick() - if(world.time >= end_time) - endWhen = activeFor - else - endWhen = activeFor + 10 - -/datum/event/money_hacker/end() - var/message = "The attack has ceased, the affected accounts can now be brought online." - if(affected_account && !affected_account.suspended) - //hacker wins - message = "The hack attempt has succeeded." - - //subtract the money - var/amount = affected_account.money * 0.8 + (rand(2,4) - 2) / 10 - - //create a taunting log entry - var/name = pick("","[pick("Biesel","New Gibson")] GalaxyNet Terminal #[rand(111,999)]","your mums place","nantrasen high CommanD") - var/purpose = pick("Ne$ ---ount fu%ds init*&lisat@*n","PAY BACK YOUR MUM","Funds withdrawal","pWnAgE","l33t hax","liberationez") - var/datum/transaction/singular/T = new(affected_account, name, -amount, purpose) - var/date1 = "31 December, 1999" - var/date2 = "[num2text(rand(1,31))] [pick("January","February","March","April","May","June","July","August","September","October","November","December")], [rand(1000,3000)]" - T.date = pick("", stationdate2text(), date1, date2) - var/time1 = rand(0, 99999999) - var/time2 = "[round(time1 / 36000)+12]:[pad_left(time1 / 600 % 60, 2, "0")]" - T.time = pick("", stationtime2text(), time2) - - T.perform() - - var/obj/machinery/message_server/MS = get_message_server() - if(MS) - var/my_department = "[location_name()] Firewall Subroutines" - MS.send_rc_message("XO's Desk", my_department, message, "", "", 2) \ No newline at end of file diff --git a/code/modules/events/money_lotto.dm b/code/modules/events/money_lotto.dm deleted file mode 100644 index ce6230088ed20..0000000000000 --- a/code/modules/events/money_lotto.dm +++ /dev/null @@ -1,27 +0,0 @@ -/datum/event/money_lotto - var/winner_name = "John Smith" - var/winner_sum = 0 - var/deposit_success = 0 - -/datum/event/money_lotto/start() - winner_sum = pick(5000, 10000, 50000, 100000, 500000, 1000000, 1500000) - if(prob(50)) - if(all_money_accounts.len) - var/datum/money_account/D = pick(all_money_accounts) - winner_name = D.owner_name - - deposit_success = D.deposit(winner_sum, "Nyx Daily Loan Lottery winner!", "Biesel TCD Terminal #[rand(111,333)]") - else - winner_name = random_name(pick(MALE,FEMALE), species = SPECIES_HUMAN) - deposit_success = pick(0,1) - -/datum/event/money_lotto/announce() - var/author = "[GLOB.using_map.company_name] Editor" - var/channel = "Nyx Daily" - - var/body = "Nyx Daily wishes to congratulate [winner_name] for recieving the Nyx Stellar Slam Lottery, and receiving the out of this world sum of [winner_sum] [GLOB.using_map.local_currency_name]!" - if(!deposit_success) - body += "
              Unfortunately, we were unable to verify the account details provided, so we were unable to transfer the money. In order to have your winnings re-sent, send a cheque containing a processing fee of 5000 [GLOB.using_map.local_currency_name] to the ND 'Stellar Slam' office on the Nyx gateway with your updated details." - - var/datum/feed_network/torch_network = news_network[1] - torch_network.SubmitArticle(body, author, channel, null, 1) diff --git a/code/modules/events/power_surge.dm b/code/modules/events/power_surge.dm deleted file mode 100644 index 0414e34eca0db..0000000000000 --- a/code/modules/events/power_surge.dm +++ /dev/null @@ -1,25 +0,0 @@ -/datum/event/power_surge - announceWhen = 5 - -/datum/event/power_surge/setup() - endWhen = rand(120, 300) - -/datum/event/power_surge/announce() - command_announcement.Announce("Energy readings indicate a minor shift in engine crystalline hyperstructure. Closer monitoring of crystal stability and power output is recommended.", "[location_name()] Supermatter Monitoring System", zlevels = affecting_z) - -/datum/event/power_surge/start() - for (var/obj/machinery/power/supermatter/S in SSmachines.machinery) - if (!(S.z in affecting_z)) - return - S.reaction_power_modifier += 0.2 - S.radiation_release_modifier += 0.2 - S.thermal_release_modifier += 1500 - -/datum/event/power_surge/end() - for (var/obj/machinery/power/supermatter/S in SSmachines.machinery) - if (!(S.z in affecting_z)) - return - S.reaction_power_modifier = initial(S.reaction_power_modifier) - S.radiation_release_modifier = initial(S.radiation_release_modifier) - S.thermal_release_modifier = initial(S.thermal_release_modifier) - command_announcement.Announce("Engine crystalline hyperstructure shift has now dissipated. Thank you for your patience.", "[location_name()] Supermatter Monitoring System", zlevels = affecting_z) diff --git a/code/modules/events/prison_break.dm b/code/modules/events/prison_break.dm deleted file mode 100644 index d664699be2b6b..0000000000000 --- a/code/modules/events/prison_break.dm +++ /dev/null @@ -1,57 +0,0 @@ -/datum/event/prison_break - startWhen = 5 - announceWhen = 75 - - var/releaseWhen = 60 - var/list/area/areas = list() //List of areas to affect. Filled by start() - - var/eventDept = "Security" //Department name in announcement - var/list/areaName = list("Brig") //Names of areas mentioned in AI and Engineering announcements - var/list/areaType = list(/area/security/prison, /area/security/brig) //Area types to include. - var/list/areaNotType = list() //Area types to specifically exclude. - -/datum/event/prison_break/setup() - announceWhen = rand(75, 105) - releaseWhen = rand(60, 90) - - src.endWhen = src.releaseWhen+2 - - -/datum/event/prison_break/announce() - if(areas && areas.len > 0) - command_announcement.Announce("[pick("Gr3yT1d3 virus","Malignant trojan",)] detected in [location_name()] [(eventDept == "Security")? "imprisonment":"containment"] subroutines. Secure any compromised areas immediately.", "[location_name()] Anti-Virus Alert", zlevels = affecting_z) - - -/datum/event/prison_break/start() - for(var/area/A in world) - if(is_type_in_list(A,areaType) && !is_type_in_list(A,areaNotType)) - areas += A - - if(areas && areas.len > 0) - var/my_department = "[location_name()] Firewall Subroutines" - var/rc_message = "An unknown malicious program has been detected in the [english_list(areaName)] lighting and airlock control systems at [stationtime2text()]. Systems will be fully compromised within approximately three minutes. Direct intervention is required immediately.
              " - var/obj/machinery/message_server/MS = get_message_server() - if(MS) - MS.send_rc_message("Engineering", my_department, rc_message, "", "", 2) - for(var/mob/living/silicon/ai/A in GLOB.player_list) - to_chat(A, "Malicious program detected in the [english_list(areaName)] lighting and airlock control systems by [my_department].") - - else - to_world_log("ERROR: Could not initate grey-tide. Unable to find suitable containment area.") - kill() - - -/datum/event/prison_break/tick() - if(activeFor == releaseWhen) - if(areas && areas.len > 0) - var/obj/machinery/power/apc/theAPC = null - for(var/area/A in areas) - theAPC = A.get_apc() - if(theAPC && theAPC.operating) //If the apc's off, it's a little hard to overload the lights. - for(var/obj/machinery/light/L in A) - L.flicker(10) - - -/datum/event/prison_break/end() - for(var/area/A in shuffle(areas)) - A.prison_break() diff --git a/code/modules/events/radiation_storm.dm b/code/modules/events/radiation_storm.dm deleted file mode 100644 index 80610b321ed00..0000000000000 --- a/code/modules/events/radiation_storm.dm +++ /dev/null @@ -1,71 +0,0 @@ -/datum/event/radiation_storm - var/const/enterBelt = 30 - var/const/radIntervall = 5 // Enough time between enter/leave belt for 10 hits, as per original implementation - var/const/leaveBelt = 80 - var/const/revokeAccess = 165 //Hopefully long enough for radiation levels to dissipate. - startWhen = 2 - announceWhen = 1 - endWhen = revokeAccess - has_skybox_image = TRUE - var/postStartTicks = 0 - -/datum/event/radiation_storm/syndicate - has_skybox_image = FALSE - -/datum/event/radiation_storm/get_skybox_image() - if(prob(75)) // Sometimes, give no skybox image, to avoid metagaming it - var/image/res = overlay_image('icons/skybox/radbox.dmi', "beam", null, RESET_COLOR) - res.alpha = rand(40,80) - return res - -/datum/event/radiation_storm/announce() - command_announcement.Announce("High levels of radiation detected in proximity of the [location_name()]. Please evacuate into one of the shielded maintenance tunnels.", "[location_name()] Sensor Array", new_sound = GLOB.using_map.radiation_detected_sound, zlevels = affecting_z) - -/datum/event/radiation_storm/start() - ..() - GLOB.using_map.make_maint_all_access(TRUE) - -/datum/event/radiation_storm/tick() - if(activeFor == enterBelt) - command_announcement.Announce("The [location_name()] has entered the radiation belt. Please remain in a sheltered area until the all clear is given.", "[location_name()] Sensor Array", zlevels = affecting_z) - if(prob(66)) - radiate() - else - postStartTicks -= rand(5,30) - - if(activeFor >= enterBelt && activeFor <= leaveBelt) - postStartTicks++ - - if(postStartTicks == radIntervall) - postStartTicks = 0 - radiate() - - else if(activeFor == leaveBelt) - command_announcement.Announce("The [location_name()] has passed the radiation belt. Please allow for up to one minute while radiation levels dissipate, and report to the infirmary if you experience any unusual symptoms. Maintenance will return to normal access parameters shortly.", "[location_name()] Sensor Array", zlevels = affecting_z) - -/datum/event/radiation_storm/proc/radiate() - var/radiation_level = rand(15, 35) - for(var/z in affecting_z) - SSradiation.z_radiate(locate(1, 1, z), radiation_level, 1) - - for(var/mob/living/carbon/C in GLOB.living_mob_list_) - var/area/A = get_area(C) - if(!A) - continue - if(A.area_flags & AREA_FLAG_RAD_SHIELDED) - continue - if(istype(C,/mob/living/carbon/human)) - var/mob/living/carbon/human/H = C - if(prob(5 * (1 - H.get_blocked_ratio(null, DAMAGE_RADIATION, damage_flags = DAMAGE_FLAG_DISPERSED, armor_pen = radiation_level)))) - if (prob(75)) - randmutb(H) // Applies bad mutation - domutcheck(H,null,MUTCHK_FORCED) - else - randmutg(H) // Applies good mutation - domutcheck(H,null,MUTCHK_FORCED) - -/datum/event/radiation_storm/end() - GLOB.using_map.revoke_maint_all_access(TRUE) - -/datum/event/radiation_storm/syndicate/radiate() - return diff --git a/code/modules/events/random_antagonist.dm b/code/modules/events/random_antagonist.dm deleted file mode 100644 index cdeb091743270..0000000000000 --- a/code/modules/events/random_antagonist.dm +++ /dev/null @@ -1,14 +0,0 @@ -// The random spawn proc on the antag datum will handle announcing the spawn and whatnot. -/datum/event/random_antag/announce() - return - -/datum/event/random_antag/start() - var/list/valid_types = list() - - for(var/antag_type in GLOB.all_antag_types_) - var/datum/antagonist/antag = GLOB.all_antag_types_[antag_type] - if(antag.flags & ANTAG_RANDSPAWN) - valid_types |= antag - if(valid_types.len) - var/datum/antagonist/antag = pick(valid_types) - antag.attempt_random_spawn() diff --git a/code/modules/events/rogue_drones.dm b/code/modules/events/rogue_drones.dm deleted file mode 100644 index 9ee1d7a8ac942..0000000000000 --- a/code/modules/events/rogue_drones.dm +++ /dev/null @@ -1,40 +0,0 @@ -/datum/event/rogue_drone - endWhen = 1000 - var/list/drones_list = list() - -/datum/event/rogue_drone/start() - //spawn them at the same place as carp - var/list/possible_spawns = list() - for(var/obj/effect/landmark/C in landmarks_list) - if(C.name == "carpspawn") - possible_spawns.Add(C) - - //25% chance for this to be a false alarm - var/num = 0 - if (length(possible_spawns) && prob(75)) - num = rand(2, 6) - for(var/i=0, i drones_list.len * 0.75) - command_announcement.Announce("Be advised: sensors indicate the unidentified drone swarm has left the immediate proximity of the [location_name()].", "[location_name()] Sensor Array", zlevels = affecting_z) - else - command_announcement.Announce("Be advised: sensors indicate the unidentified drone swarm has left the immediate proximity of the [location_name()].", "[location_name()] Sensor Array", zlevels = affecting_z) diff --git a/code/modules/events/sensor_suit_jamming.dm b/code/modules/events/sensor_suit_jamming.dm deleted file mode 100644 index c72c6ed631fcc..0000000000000 --- a/code/modules/events/sensor_suit_jamming.dm +++ /dev/null @@ -1,25 +0,0 @@ -/datum/event/sensor_suit_jamming - var/suit_sensor_jammer_method/jamming_method - -/datum/event/sensor_suit_jamming/setup() - announceWhen = 10 - endWhen = rand(15, 60) * severity - switch(severity) - if(EVENT_LEVEL_MAJOR) - jamming_method = new/suit_sensor_jammer_method/random/major() - if(EVENT_LEVEL_MODERATE) - jamming_method = new/suit_sensor_jammer_method/random/moderate() - else - jamming_method = new/suit_sensor_jammer_method/random() - -/datum/event/sensor_suit_jamming/announce() - if(prob(75)) - ion_storm_announcement(affecting_z) - -/datum/event/sensor_suit_jamming/start() - jamming_method.enable() - -/datum/event/sensor_suit_jamming/end() - jamming_method.disable() - qdel(jamming_method) - jamming_method = null diff --git a/code/modules/events/shipping_error.dm b/code/modules/events/shipping_error.dm deleted file mode 100644 index 3579f773c6546..0000000000000 --- a/code/modules/events/shipping_error.dm +++ /dev/null @@ -1,6 +0,0 @@ -/datum/event/shipping_error/start() - var/datum/supply_order/O = new /datum/supply_order() - O.ordernum = SSsupply.ordernum - O.object = pick(SSsupply.master_supply_list) - O.orderedby = random_name(pick(MALE,FEMALE), species = SPECIES_HUMAN) - SSsupply.shoppinglist += O diff --git a/code/modules/events/solar_storm.dm b/code/modules/events/solar_storm.dm deleted file mode 100644 index 2b0c6fccb85e8..0000000000000 --- a/code/modules/events/solar_storm.dm +++ /dev/null @@ -1,60 +0,0 @@ -/datum/event/solar_storm - startWhen = 45 - announceWhen = 1 - var/const/rad_interval = 5 //Same interval period as radiation storms. - var/const/temp_incr = 100 - var/const/fire_loss = 40 - var/base_solar_gen_rate - - -/datum/event/solar_storm/setup() - endWhen = startWhen + rand(30,90) + rand(30,90) //2-6 minute duration - -/datum/event/solar_storm/announce() - command_announcement.Announce("A solar storm has been detected approaching the [location_name()]. Please halt all EVA activites immediately and return inside.", "[location_name()] Sensor Array", zlevels = affecting_z) - adjust_solar_output(1.5) - -/datum/event/solar_storm/proc/adjust_solar_output(var/mult = 1) - if(isnull(base_solar_gen_rate)) base_solar_gen_rate = solar_gen_rate - solar_gen_rate = mult * base_solar_gen_rate - - -/datum/event/solar_storm/start() - command_announcement.Announce("The solar storm has reached the [location_name()]. Please refrain from EVA and remain inside until it has passed.", "[location_name()] Sensor Array", zlevels = affecting_z) - adjust_solar_output(5) - - -/datum/event/solar_storm/tick() - if(activeFor % rad_interval == 0) - radiate() - -/datum/event/solar_storm/proc/radiate() - // Note: Too complicated to be worth trying to use the radiation system for this. Its only in space anyway, so we make an exception in this case. - for(var/mob/living/L in GLOB.living_mob_list_) - if(istype(L.loc, /mob/living/exosuit)) //Todo, generalize this further like I did for rads if other things need to block or mitigate heat - CrimsonShrike - continue - var/turf/T = get_turf(L) - if(!T || !(T.z in GLOB.using_map.player_levels)) - continue - - if(!istype(T.loc,/area/space) && !istype(T,/turf/space)) //Make sure you're in a space area or on a space turf - continue - - //Apply some heat or burn damage from the sun. - if(istype(L, /mob/living/carbon/human) || istype(L, /mob/living/exosuit)) - L.bodytemperature += temp_incr - else - L.adjustFireLoss(fire_loss) - - -/datum/event/solar_storm/end() - command_announcement.Announce("The solar storm has passed the [location_name()]. It is now safe to resume EVA activities. ", "[location_name()] Sensor Array", zlevels = affecting_z) - adjust_solar_output() - - -//For a false alarm scenario. -/datum/event/solar_storm/syndicate/adjust_solar_output() - return - -/datum/event/solar_storm/syndicate/radiate() - return diff --git a/code/modules/events/spacevine.dm b/code/modules/events/spacevine.dm deleted file mode 100644 index 658ef8639c3ef..0000000000000 --- a/code/modules/events/spacevine.dm +++ /dev/null @@ -1,11 +0,0 @@ -var/global/spacevines_spawned = 0 - -/datum/event/spacevine - announceWhen = 60 - -/datum/event/spacevine/start() - spacevine_infestation() - spacevines_spawned = 1 - -/datum/event/spacevine/announce() - level_seven_announcement() diff --git a/code/modules/events/spider_infestation.dm b/code/modules/events/spider_infestation.dm deleted file mode 100644 index afce31840c1bc..0000000000000 --- a/code/modules/events/spider_infestation.dm +++ /dev/null @@ -1,38 +0,0 @@ -var/global/sent_spiders_to_station = 0 - -/datum/event/spider_infestation - announceWhen = 90 - var/spawncount = 1 - var/guaranteed_to_grow = 0 - - -/datum/event/spider_infestation/setup() - var/list/active_with_role = number_active_with_role() - announceWhen = rand(announceWhen, announceWhen + 60) - if (severity <= EVENT_LEVEL_MODERATE) - spawncount = 3 * severity - else - spawncount = 5 * severity - spawncount = min(spawncount, round(active_with_role["Any"] / 2)) - guaranteed_to_grow = max(round(rand(spawncount / 3, spawncount / 2)), severity <= EVENT_LEVEL_MODERATE ? 3 : 5) - sent_spiders_to_station = TRUE - -/datum/event/spider_infestation/announce() - GLOB.using_map.unidentified_lifesigns_announcement() - -/datum/event/spider_infestation/start() - var/list/vents = list() - for(var/obj/machinery/atmospherics/unary/vent_pump/temp_vent in world) - if(!temp_vent.welded && temp_vent.network && (temp_vent.loc.z in affecting_z)) - if(temp_vent.network.normal_members.len > 50) - vents += temp_vent - - while((spawncount >= 1) && vents.len) - var/obj/vent = pick(vents) - if (guaranteed_to_grow > 0) - new /obj/effect/spider/spiderling/growing(vent.loc) - guaranteed_to_grow-- - else - new /obj/effect/spider/spiderling(vent.loc) - vents -= vent - spawncount-- diff --git a/code/modules/events/spontaneous_appendicitis.dm b/code/modules/events/spontaneous_appendicitis.dm deleted file mode 100644 index f787001ab25d9..0000000000000 --- a/code/modules/events/spontaneous_appendicitis.dm +++ /dev/null @@ -1,9 +0,0 @@ -/datum/event/spontaneous_appendicitis/start() - for(var/mob/living/carbon/human/H in shuffle(GLOB.living_mob_list_)) - if(H.client && H.stat != DEAD) - var/obj/item/organ/internal/appendix/A = H.internal_organs_by_name[BP_APPENDIX] - if(!istype(A) || (A && A.inflamed)) - continue - A.inflamed = 1 - A.update_icon() - break diff --git a/code/modules/events/toilets.dm b/code/modules/events/toilets.dm deleted file mode 100644 index 3deb91971a49d..0000000000000 --- a/code/modules/events/toilets.dm +++ /dev/null @@ -1,19 +0,0 @@ -/datum/event/toilet_clog - var/clog_min = 1 - var/clog_max = 3 - var/clog_severity_min = 1 - var/clog_severity_max = 2 - -/datum/event/toilet_clog/start() - var/clog_amt = rand(clog_min,clog_max) - var/clog_severity = rand(clog_severity_min, clog_severity_max) - var/list/toilets = SSfluids.hygiene_props.Copy() - while(clog_amt && toilets.len) - var/obj/structure/hygiene/toilet = pick_n_take(toilets) - if((toilet.z in affecting_z) && toilet.clog(clog_severity)) clog_amt-- - -/datum/event/toilet_clog/flood - clog_min = 3 - clog_max = 5 - clog_severity_min = 3 - clog_severity_max = 3 \ No newline at end of file diff --git a/code/modules/events/wallrot.dm b/code/modules/events/wallrot.dm deleted file mode 100644 index 4fdfa1f6ad6d7..0000000000000 --- a/code/modules/events/wallrot.dm +++ /dev/null @@ -1,31 +0,0 @@ -/datum/event/wallrot/setup() - announceWhen = rand(0, 300) - endWhen = announceWhen + 1 - -/datum/event/wallrot/announce() - command_announcement.Announce("Harmful fungi detected on [location_name()]. Structures may be contaminated.", "[location_name()] Biologic Sensor Network", zlevels = affecting_z) - -/datum/event/wallrot/start() - spawn() - var/turf/simulated/wall/center = null - - // 100 attempts - for(var/i=0, i<100, i++) - var/turf/candidate = locate(rand(1, world.maxx), rand(1, world.maxy), 1) - if(istype(candidate, /turf/simulated/wall)) - center = candidate - - if(center) - // Make sure at least one piece of wall rots! - center.rot() - - // Have a chance to rot lots of other walls. - var/rotcount = 0 - var/actual_severity = severity * rand(5, 10) - for(var/turf/simulated/wall/W in range(5, center)) if(prob(50)) - W.rot() - rotcount++ - - // Only rot up to severity walls - if(rotcount >= actual_severity) - break diff --git a/code/modules/events/whale_migration.dm b/code/modules/events/whale_migration.dm deleted file mode 100644 index 8ea204513f66e..0000000000000 --- a/code/modules/events/whale_migration.dm +++ /dev/null @@ -1,43 +0,0 @@ -/datum/event/whale_migration - announceWhen = 5 - endWhen = 10 - var/adult_whales_per_z - var/total_whales = list() - -/datum/event/whale_migration/setup() - endWhen = rand(300, 800) - adult_whales_per_z = rand(8, 15) - -/datum/event/whale_migration/announce() - command_announcement.Announce("A migrating pod of spaceborn cetaceans has been detected in the vicinity of the [location_name()]. Please make your way to the nearest window.", "[location_name()] Sensor Array", affecting_z) - -/datum/event/whale_migration/start() - spawn_whales() - -/datum/event/whale_migration/proc/spawn_whales() - for(var/station_level in affecting_z) - for(var/count in 1 to adult_whales_per_z) - var/dir = pick(GLOB.cardinal) - var/turf/T - var/turf/oppT - while(!istype(T, /turf/space)) - T = get_random_edge_turf(dir, TRANSITIONEDGE + 5, station_level) - oppT = get_random_edge_turf(GLOB.reverse_dir[dir], TRANSITIONEDGE + 5, station_level) - var/mob/living/simple_animal/hostile/retaliate/space_whale/adult - var/mob/living/simple_animal/passive/juvenile_space_whale/child - if(prob(75)) - adult = new(T) - child = new(get_step(T, dir)) - total_whales += list(adult, child) - adult.throw_at(oppT, 3, 1, null, FALSE) - child.throw_at(oppT, 3, 1, null, FALSE) - else - adult = new(T) - total_whales += adult - adult.throw_at(oppT, 3, 1, null, FALSE) - -/datum/event/whale_migration/end() - for(var/mob/whale in total_whales) - if(!whale.stat && istype(whale.loc.loc, /area/space)) - qdel(whale) - command_announcement.Announce("The migrating pod of spaceborn cetaceans has continued past the [location_name()].", "[location_name()] Sensor Array", affecting_z) diff --git a/code/modules/ext_scripts/irc.dm b/code/modules/ext_scripts/irc.dm deleted file mode 100644 index c2b3ac1324a26..0000000000000 --- a/code/modules/ext_scripts/irc.dm +++ /dev/null @@ -1,58 +0,0 @@ -/proc/send2irc(var/channel, var/msg) - export2irc(list(type="msg", mesg=msg, chan=channel, pwd=config.comms_password)) - -/proc/export2irc(params) - if(config.use_irc_bot && config.irc_bot_host) - spawn(-1) // spawn here prevents hanging in the case that the bot isn't reachable - world.Export("http://[config.irc_bot_host]:45678?[list2params(params)]") - -/proc/runtimes2irc(runtimes, revision) - export2irc(list(pwd=config.comms_password, type="runtime", runtimes=runtimes, revision=revision)) - -/proc/send2mainirc(var/msg) - if(config.main_irc) - send2irc(config.main_irc, msg) - return - -/proc/send2adminirc(var/msg) - if(config.admin_irc) - send2irc(config.admin_irc, msg) - return - -/proc/adminmsg2adminirc(client/source, client/target, msg) - if(config.admin_irc) - var/list/params[0] - - params["pwd"] = config.comms_password - params["chan"] = config.admin_irc - params["msg"] = msg - params["src_key"] = source.key - params["src_char"] = source.mob.real_name || source.mob.name - if(!target) - params["type"] = "adminhelp" - else if(istext(target)) - params["type"] = "ircpm" - params["target"] = target - params["rank"] = source.holder ? source.holder.rank : "Player" - else - params["type"] = "adminpm" - params["trg_key"] = target.key - if (target.mob) - params["trg_char"] = target.mob.real_name || target.mob.name - else - params["trg_char"] = "\[NO CHARACTER\]" - - export2irc(params) - -/proc/get_world_url() - . = "byond://" - if(config.serverurl) - . += config.serverurl - else if(config.server) - . += config.server - else - . += "[world.address]:[world.port]" - -/hook/startup/proc/ircNotify() - send2mainirc("Server starting up on [get_world_url()]") - return 1 diff --git a/code/modules/fabrication/__fabricator_defines.dm b/code/modules/fabrication/__fabricator_defines.dm deleted file mode 100644 index 4f255b1cd9176..0000000000000 --- a/code/modules/fabrication/__fabricator_defines.dm +++ /dev/null @@ -1,3 +0,0 @@ -#define FABRICATOR_CLASS_GENERAL "general" -#define FABRICATOR_CLASS_MICRO "microlathe" -#define FABRICATOR_CLASS_FOOD "food" diff --git a/code/modules/fabrication/_fabricator.dm b/code/modules/fabrication/_fabricator.dm deleted file mode 100644 index ab8c8ffe32f53..0000000000000 --- a/code/modules/fabrication/_fabricator.dm +++ /dev/null @@ -1,138 +0,0 @@ -/obj/machinery/fabricator - name = "autolathe" - desc = "It produces common day to day items from a variety of materials." - icon = 'icons/obj/machines/fabricators/autolathe.dmi' - icon_state = "autolathe" - density = TRUE - anchored = TRUE - idle_power_usage = 10 - active_power_usage = 2000 - clicksound = "keyboard" - clickvol = 30 - uncreated_component_parts = null - stat_immune = 0 - wires = /datum/wires/fabricator - base_type = /obj/machinery/fabricator - construct_state = /decl/machine_construction/default/panel_closed - - machine_name = "autolathe" - machine_desc = "Autolathes can produce a very wide array of useful objects from raw materials." - - var/has_recycler = TRUE - var/list/material_overlays = list() - var/base_icon_state = "autolathe" - var/image/panel_image - - var/list/queued_orders = list() - var/datum/fabricator_build_order/currently_building - - var/fabricator_class = FABRICATOR_CLASS_GENERAL - - var/list/stored_material - var/list/storage_capacity - var/list/base_storage_capacity = list( - /material/steel = 25000, - /material/aluminium = 25000, - /material/glass = 12500, - /material/plastic = 12500 - ) - - var/show_category = "All" - var/fab_status_flags = 0 - var/mat_efficiency = 1.1 - var/build_time_multiplier = 1 - var/static/list/stored_substances_to_names = list() - -/obj/machinery/fabricator/Destroy() - QDEL_NULL(currently_building) - QDEL_NULL_LIST(queued_orders) - . = ..() - -/obj/machinery/fabricator/examine(mob/user) - . = ..() - if(length(storage_capacity)) - var/list/material_names = list() - for(var/thing in storage_capacity) - material_names += "[storage_capacity[thing]] [stored_substances_to_names[thing]]" - to_chat(user, SPAN_NOTICE("It can store [english_list(material_names)].")) - if(has_recycler) - to_chat(user, SPAN_NOTICE("It has a built-in shredder that can recycle most items, although any materials it cannot use will be wasted.")) - -/obj/machinery/fabricator/Initialize() - panel_image = image(icon, "[base_icon_state]_panel") - . = ..() - // Initialize material storage lists. - stored_material = list() - for(var/mat in base_storage_capacity) - stored_material[mat] = 0 - - // Update global type to string cache. - if(!stored_substances_to_names[mat]) - if(ispath(mat, /material)) - var/material/mat_instance = mat - mat_instance = SSmaterials.get_material_by_name(initial(mat_instance.name)) - if(istype(mat_instance)) - stored_substances_to_names[mat] = mat_instance.display_name - else if(ispath(mat, /datum/reagent)) - var/datum/reagent/reg = mat - stored_substances_to_names[mat] = initial(reg.name) - -/obj/machinery/fabricator/state_transition(var/decl/machine_construction/default/new_state) - . = ..() - if(istype(new_state)) - updateUsrDialog() - -/obj/machinery/fabricator/components_are_accessible(path) - return !(fab_status_flags & FAB_BUSY) && ..() - -/obj/machinery/fabricator/cannot_transition_to(state_path) - if(fab_status_flags & FAB_BUSY) - return SPAN_NOTICE("You must wait for \the [src] to finish first.") - return ..() - -/obj/machinery/fabricator/proc/is_functioning() - . = use_power != POWER_USE_OFF && !(stat & NOPOWER) && !(stat & BROKEN) && !(fab_status_flags & FAB_DISABLED) - -/obj/machinery/fabricator/Process(var/wait) - ..() - if(use_power == POWER_USE_ACTIVE && (fab_status_flags & FAB_BUSY)) - update_current_build(wait) - -/obj/machinery/fabricator/on_update_icon() - overlays.Cut() - if(stat & NOPOWER) - icon_state = "[base_icon_state]_d" - else if(currently_building) - icon_state = "[base_icon_state]_p" - else - icon_state = base_icon_state - - var/list/new_overlays = material_overlays.Copy() - if(panel_open) - new_overlays += panel_image - overlays = new_overlays - -/obj/machinery/fabricator/proc/remove_mat_overlay(var/mat_overlay) - material_overlays -= mat_overlay - update_icon() - -//Updates overall lathe storage size. -/obj/machinery/fabricator/RefreshParts() - ..() - var/mb_rating = clamp(total_component_rating_of_type(/obj/item/stock_parts/matter_bin), 0, 10) - var/man_rating = clamp(total_component_rating_of_type(/obj/item/stock_parts/manipulator), 0.5, 3.5) - storage_capacity = list() - for(var/mat in base_storage_capacity) - storage_capacity[mat] = mb_rating * base_storage_capacity[mat] - mat_efficiency = initial(mat_efficiency) - man_rating * 0.1 - build_time_multiplier = initial(build_time_multiplier) * man_rating - -/obj/machinery/fabricator/dismantle() - for(var/mat in stored_material) - if(ispath(mat, /material)) - var/mat_name = stored_substances_to_names[mat] - var/material/M = SSmaterials.get_material_by_name(mat_name) - if(stored_material[mat] > M.units_per_sheet) - M.place_sheet(get_turf(src), round(stored_material[mat] / M.units_per_sheet), M.name) - ..() - return TRUE diff --git a/code/modules/fabrication/_fabricator_build_order.dm b/code/modules/fabrication/_fabricator_build_order.dm deleted file mode 100644 index 6dedfb8afc98a..0000000000000 --- a/code/modules/fabrication/_fabricator_build_order.dm +++ /dev/null @@ -1,9 +0,0 @@ -/datum/fabricator_build_order - var/datum/fabricator_recipe/target_recipe - var/multiplier = 1 - var/remaining_time = 0 - var/list/earmarked_materials = list() - -/datum/fabricator_build_order/Destroy() - target_recipe = null - . = ..() diff --git a/code/modules/fabrication/designs/_design.dm b/code/modules/fabrication/designs/_design.dm deleted file mode 100644 index ba05bff1a5a69..0000000000000 --- a/code/modules/fabrication/designs/_design.dm +++ /dev/null @@ -1,35 +0,0 @@ -/datum/fabricator_recipe - var/name - var/path - var/hidden - var/category = "General" - var/list/resources - var/list/fabricator_types = list( - FABRICATOR_CLASS_GENERAL - ) - var/build_time = 5 SECONDS - var/ignore_materials = list( - /material/waste = TRUE - ) - -// Populate name and resources from the product type. -/datum/fabricator_recipe/New() - ..() - if(!path) - return - if(!name) - var/obj/O = path - name = initial(O.name) - if(!resources) - resources = list() - var/obj/item/I = new path - if(length(I.matter)) - for(var/material in I.matter) - var/material/M = SSmaterials.get_material_by_name(material) - if(istype(M) && !ignore_materials[M.type]) - resources[M.type] = I.matter[material] * FABRICATOR_EXTRA_COST_FACTOR - if(I.reagents && length(I.reagents.reagent_list)) - for(var/datum/reagent/R in I.reagents.reagent_list) - resources[R.type] = R.volume * FABRICATOR_EXTRA_COST_FACTOR - qdel(I) - diff --git a/code/modules/fabrication/designs/general/designs_arms_ammo.dm b/code/modules/fabrication/designs/general/designs_arms_ammo.dm deleted file mode 100644 index e843bee05faba..0000000000000 --- a/code/modules/fabrication/designs/general/designs_arms_ammo.dm +++ /dev/null @@ -1,136 +0,0 @@ -/datum/fabricator_recipe/arms_ammo - path = /obj/item/syringe_cartridge - category = "Arms and Ammunition" - -/datum/fabricator_recipe/arms_ammo/shotgun_holder - path = /obj/item/ammo_magazine/shotholder/empty - -/datum/fabricator_recipe/arms_ammo/shotgun_blanks - name = "ammunition (shotgun, blank)" - path = /obj/item/ammo_casing/shotgun/blank - -/datum/fabricator_recipe/arms_ammo/flaregun - name = "flare launcher" - path = /obj/item/gun/projectile/flare - -/datum/fabricator_recipe/arms_ammo/hidden - path = /obj/item/material/hatchet/machete/steel - hidden = TRUE - -/datum/fabricator_recipe/arms_ammo/hidden/shotgun - name = "ammunition (shotgun, beanbag)" - path = /obj/item/ammo_casing/shotgun/beanbag - -/datum/fabricator_recipe/arms_ammo/shotgun_flash - name = "ammunition (shotgun, flash)" - path = /obj/item/ammo_casing/shotgun/flash - -/datum/fabricator_recipe/arms_ammo/hidden/magazine_smg_rubber - name = "ammunition (SMG rubber) top mounted" - path = /obj/item/ammo_magazine/smg_top/rubber - -/datum/fabricator_recipe/arms_ammo/hidden/flamethrower - path = /obj/item/flamethrower/full - -/datum/fabricator_recipe/arms_ammo/hidden/speedloader - name = "ammunition (speedloader)" - path = /obj/item/ammo_magazine/speedloader - -/datum/fabricator_recipe/arms_ammo/hidden/speedloader_small - name = "ammunition (speedloader, holdout)" - path = /obj/item/ammo_magazine/speedloader/small - -/datum/fabricator_recipe/arms_ammo/hidden/speedloader_small_rubber - name = "ammunition (speedloader, holdout, rubber)" - path = /obj/item/ammo_magazine/speedloader/small/rubber - -/datum/fabricator_recipe/arms_ammo/hidden/speedloader_magnum - name = "ammunition (speedloader, magnum)" - path = /obj/item/ammo_magazine/speedloader/magnum - -/datum/fabricator_recipe/arms_ammo/hidden/magazine_pistol - name = "ammunition (pistol)" - path = /obj/item/ammo_magazine/pistol - -/datum/fabricator_recipe/arms_ammo/hidden/magazine_pistol_rubber - name = "ammunition (pistol, rubber)" - path = /obj/item/ammo_magazine/pistol/rubber - -/datum/fabricator_recipe/arms_ammo/hidden/magazine_pistol_double - name = "ammunition (pistol, doublestack)" - path = /obj/item/ammo_magazine/pistol/double - -/datum/fabricator_recipe/arms_ammo/hidden/magazine_pistol_double_rubber - name = "ammunition (pistol, doublestack. rubber)" - path = /obj/item/ammo_magazine/pistol/double/rubber - -/datum/fabricator_recipe/arms_ammo/hidden/magazine_small - name = "ammunition (holdout)" - path = /obj/item/ammo_magazine/pistol/small - -/datum/fabricator_recipe/arms_ammo/hidden/magazine_magnum - name = "ammunition (magnum)" - path = /obj/item/ammo_magazine/magnum - -/datum/fabricator_recipe/arms_ammo/hidden/magazine_smg - name = "ammunition (submachine gun)" - path = /obj/item/ammo_magazine/smg - -/datum/fabricator_recipe/arms_ammo/hidden/magazine_uzi - name = "ammunition (machine pistol)" - path = /obj/item/ammo_magazine/machine_pistol - -/datum/fabricator_recipe/arms_ammo/hidden/magazine_smg_topmounted - name = "ammunition (SMG, top mounted)" - path = /obj/item/ammo_magazine/smg_top - -/datum/fabricator_recipe/arms_ammo/hidden/magazine_arifle - name = "ammunition (rifle magazine)" - path = /obj/item/ammo_magazine/rifle - -/datum/fabricator_recipe/arms_ammo/hidden/magazine_carbine - name = "ammunition (military rifle)" - path = /obj/item/ammo_magazine/mil_rifle - -/datum/fabricator_recipe/arms_ammo/hidden/shotgun - name = "ammunition (slug, shotgun)" - path = /obj/item/ammo_casing/shotgun - -/datum/fabricator_recipe/arms_ammo/hidden/shotgun_pellet - name = "ammunition (shell, shotgun)" - path = /obj/item/ammo_casing/shotgun/pellet - -/datum/fabricator_recipe/arms_ammo/hidden/tacknife - path = /obj/item/material/knife/combat - -/datum/fabricator_recipe/arms_ammo/hidden/stunshell - name = "ammunition (stun cartridge, shotgun)" - path = /obj/item/ammo_casing/shotgun/stunshell - -/datum/fabricator_recipe/arms_ammo/hidden/flechette - name = "ammunition (flechette rifle)" - path = /obj/item/magnetic_ammo - -/datum/fabricator_recipe/arms_ammo/hidden/skrellian_rifle_flechette - name = "ammunition (skrellian rifle, flechette)" - path = /obj/item/magnetic_ammo/skrell - -/datum/fabricator_recipe/arms_ammo/hidden/skrellian_rifle_slug - name = "ammunition (skrellian rifle, slug)" - path = /obj/item/magnetic_ammo/skrell/slug - -/datum/fabricator_recipe/arms_ammo/hidden/stripperclip - name = "ammunition (rifle stripper clip)" - path = /obj/item/ammo_magazine/speedloader/clip - -/datum/fabricator_recipe/arms_ammo/hidden/pistolstripperclip - name = "ammunition (magnum pistol stripper clip)" - path = /obj/item/ammo_magazine/speedloader/pclip - -/datum/fabricator_recipe/arms_ammo/hidden/broomstickstripperclip - name = "ammunition (holdout pistol stripper clip)" - path = /obj/item/ammo_magazine/speedloader/hpclip - -/datum/fabricator_recipe/arms_ammo/hidden/rifleinternalclip - name = "ammunition (rifle internal clip)" - path = /obj/item/ammo_magazine/iclipr diff --git a/code/modules/fabrication/designs/general/designs_devices_components.dm b/code/modules/fabrication/designs/general/designs_devices_components.dm deleted file mode 100644 index da420cbf5290a..0000000000000 --- a/code/modules/fabrication/designs/general/designs_devices_components.dm +++ /dev/null @@ -1,78 +0,0 @@ -/datum/fabricator_recipe/device_component - path = /obj/item/stock_parts/console_screen - category = "Devices and Components" - -/datum/fabricator_recipe/device_component/keyboard - path = /obj/item/stock_parts/keyboard - -/datum/fabricator_recipe/device_component/tesla_component - path = /obj/item/stock_parts/power/apc/buildable - -/datum/fabricator_recipe/device_component/radio_transmitter - path = /obj/item/stock_parts/radio/transmitter/basic/buildable - -/datum/fabricator_recipe/device_component/radio_transmitter_event - path = /obj/item/stock_parts/radio/transmitter/on_event/buildable - -/datum/fabricator_recipe/device_component/radio_receiver - path = /obj/item/stock_parts/radio/receiver/buildable - -/datum/fabricator_recipe/device_component/battery_backup_crap - name = "battery backup (weak)" - path = /obj/item/stock_parts/power/battery/buildable/crap - -/datum/fabricator_recipe/device_component/battery_backup_stock - name = "battery backup (standard)" - path = /obj/item/stock_parts/power/battery/buildable/stock - -/datum/fabricator_recipe/device_component/battery_backup_turbo - name = "battery backup (rapid)" - path = /obj/item/stock_parts/power/battery/buildable/turbo - -/datum/fabricator_recipe/device_component/battery_backup_responsive - name = "battery backup (responsive)" - path = /obj/item/stock_parts/power/battery/buildable/responsive - -/datum/fabricator_recipe/device_component/terminal - path = /obj/item/stock_parts/power/terminal/buildable - -/datum/fabricator_recipe/device_component/igniter - path = /obj/item/device/assembly/igniter - -/datum/fabricator_recipe/device_component/signaler - path = /obj/item/device/assembly/signaler - -/datum/fabricator_recipe/device_component/sensor_infra - path = /obj/item/device/assembly/infra - -/datum/fabricator_recipe/device_component/timer - path = /obj/item/device/assembly/timer - -/datum/fabricator_recipe/device_component/sensor_prox - path = /obj/item/device/assembly/prox_sensor - -/datum/fabricator_recipe/device_component/cable_coil - path = /obj/item/stack/cable_coil/single - -/datum/fabricator_recipe/device_component/electropack - path = /obj/item/device/radio/electropack - hidden = TRUE - -/datum/fabricator_recipe/device_component/beartrap - path = /obj/item/beartrap - hidden = TRUE - -/datum/fabricator_recipe/device_component/cell_device - path = /obj/item/cell/device/standard - -/datum/fabricator_recipe/device_component/ecigcartridge - path = /obj/item/reagent_containers/ecig_cartridge/blank - -/datum/fabricator_recipe/device_component/conveyor_construct - path = /obj/item/conveyor_construct - -/datum/fabricator_recipe/device_component/conveyor_switch_construct - path = /obj/item/conveyor_switch_construct - -/datum/fabricator_recipe/device_component/conveyor_switch_oneway_construct - path = /obj/item/conveyor_switch_construct/oneway diff --git a/code/modules/fabrication/designs/general/designs_engineering.dm b/code/modules/fabrication/designs/general/designs_engineering.dm deleted file mode 100644 index 76ec5632390df..0000000000000 --- a/code/modules/fabrication/designs/general/designs_engineering.dm +++ /dev/null @@ -1,28 +0,0 @@ -/datum/fabricator_recipe/engineering - path = /obj/item/airlock_electronics - category = "Engineering" - -/datum/fabricator_recipe/engineering/airalarm - path = /obj/item/airalarm_electronics - -/datum/fabricator_recipe/engineering/firealarm - path = /obj/item/firealarm_electronics - -/datum/fabricator_recipe/engineering/intercom - path = /obj/item/intercom_electronics - -/datum/fabricator_recipe/engineering/powermodule - path = /obj/item/module/power_control - -/datum/fabricator_recipe/engineering/rcd_ammo - path = /obj/item/rcd_ammo - -/datum/fabricator_recipe/engineering/rcd_ammo_large - path = /obj/item/rcd_ammo/large - -/datum/fabricator_recipe/engineering/camera_assembly - path = /obj/item/camera_assembly - -/datum/fabricator_recipe/engineering/rcd - path = /obj/item/rcd - hidden = TRUE diff --git a/code/modules/fabrication/designs/general/designs_general.dm b/code/modules/fabrication/designs/general/designs_general.dm deleted file mode 100644 index fbad63d3aa109..0000000000000 --- a/code/modules/fabrication/designs/general/designs_general.dm +++ /dev/null @@ -1,115 +0,0 @@ -/datum/fabricator_recipe/bucket - path = /obj/item/reagent_containers/glass/bucket - -/datum/fabricator_recipe/flashlight - path = /obj/item/device/flashlight - -/datum/fabricator_recipe/floor_light - path = /obj/machinery/floor_light - -/datum/fabricator_recipe/extinguisher - path = /obj/item/extinguisher/empty - -/datum/fabricator_recipe/extinguisher/mini - path = /obj/item/extinguisher/mini/empty - -/datum/fabricator_recipe/jar - path = /obj/item/glass_jar - -/datum/fabricator_recipe/radio_headset - path = /obj/item/device/radio/headset - -/datum/fabricator_recipe/radio_bounced - path = /obj/item/device/radio/off - -/datum/fabricator_recipe/suit_cooler - path = /obj/item/device/suit_cooling_unit - -/datum/fabricator_recipe/weldermask - path = /obj/item/clothing/head/welding - -/datum/fabricator_recipe/knife - path = /obj/item/material/knife/kitchen - -/datum/fabricator_recipe/taperecorder - path = /obj/item/device/taperecorder/empty - -/datum/fabricator_recipe/tape - path = /obj/item/device/tape - -/datum/fabricator_recipe/tube/large/warm - path = /obj/item/light/tube/large/warm - -/datum/fabricator_recipe/tube/large/cool - path = /obj/item/light/tube/large/cool - -/datum/fabricator_recipe/tube/large/white - path = /obj/item/light/tube/large/white - -/datum/fabricator_recipe/tube/warm - path = /obj/item/light/tube/warm - -/datum/fabricator_recipe/tube/cool - path = /obj/item/light/tube/cool - -/datum/fabricator_recipe/tube/white - path = /obj/item/light/tube/white - -/datum/fabricator_recipe/bulb/warm - path = /obj/item/light/bulb/warm - -/datum/fabricator_recipe/bulb/cool - path = /obj/item/light/bulb/cool - -/datum/fabricator_recipe/bulb/white - path = /obj/item/light/bulb/white - -/datum/fabricator_recipe/ashtray_glass - path = /obj/item/material/ashtray/glass - -/datum/fabricator_recipe/weldinggoggles - path = /obj/item/clothing/glasses/welding - -/datum/fabricator_recipe/blackpen - path = /obj/item/pen - -/datum/fabricator_recipe/bluepen - path = /obj/item/pen/blue - -/datum/fabricator_recipe/redpen - path = /obj/item/pen/red - -/datum/fabricator_recipe/greenpen - path = /obj/item/pen/green - -/datum/fabricator_recipe/clipboard_steel - name = "clipboard, steel" - path = /obj/item/material/clipboard/steel - -/datum/fabricator_recipe/clipboard_alum - name = "clipboard, aluminium" - path = /obj/item/material/clipboard/aluminium - -/datum/fabricator_recipe/clipboard_glass - name = "clipboard, glass" - path = /obj/item/material/clipboard/glass - -/datum/fabricator_recipe/clipboard_alum - name = "clipboard, plastic" - path = /obj/item/material/clipboard/plastic - -/datum/fabricator_recipe/destTagger - path = /obj/item/device/destTagger - -/datum/fabricator_recipe/labeler - path = /obj/item/hand_labeler - -/datum/fabricator_recipe/handcuffs - path = /obj/item/handcuffs - hidden = TRUE - -/datum/fabricator_recipe/plunger - path = /obj/item/clothing/mask/plunger - -/datum/fabricator_recipe/toolbox - path = /obj/item/storage/toolbox diff --git a/code/modules/fabrication/designs/general/designs_medical.dm b/code/modules/fabrication/designs/general/designs_medical.dm deleted file mode 100644 index 3c9c3417ff79d..0000000000000 --- a/code/modules/fabrication/designs/general/designs_medical.dm +++ /dev/null @@ -1,45 +0,0 @@ -/datum/fabricator_recipe/medical - path = /obj/item/scalpel - category = "Medical" - -/datum/fabricator_recipe/medical/circularsaw - path = /obj/item/circular_saw - -/datum/fabricator_recipe/medical/surgicaldrill - path = /obj/item/surgicaldrill - -/datum/fabricator_recipe/medical/retractor - path = /obj/item/retractor - -/datum/fabricator_recipe/medical/cautery - path = /obj/item/cautery - -/datum/fabricator_recipe/medical/hemostat - path = /obj/item/hemostat - -/datum/fabricator_recipe/medical/beaker - path = /obj/item/reagent_containers/glass/beaker - -/datum/fabricator_recipe/medical/beaker_large - path = /obj/item/reagent_containers/glass/beaker/large - -/datum/fabricator_recipe/medical/beaker_insul - path = /obj/item/reagent_containers/glass/beaker/insulated - -/datum/fabricator_recipe/medical/beaker_insul_large - path = /obj/item/reagent_containers/glass/beaker/insulated/large - -/datum/fabricator_recipe/medical/vial - path = /obj/item/reagent_containers/glass/beaker/vial - -/datum/fabricator_recipe/medical/syringe - path = /obj/item/reagent_containers/syringe - -/datum/fabricator_recipe/medical/implanter - path = /obj/item/implanter - -/datum/fabricator_recipe/medical/pill_bottle - path = /obj/item/storage/pill_bottle - -/datum/fabricator_recipe/medical/hypospray/autoinjector - path = /obj/item/reagent_containers/hypospray/autoinjector/empty diff --git a/code/modules/fabrication/designs/general/designs_tools.dm b/code/modules/fabrication/designs/general/designs_tools.dm deleted file mode 100644 index 649bac018dc1c..0000000000000 --- a/code/modules/fabrication/designs/general/designs_tools.dm +++ /dev/null @@ -1,46 +0,0 @@ -/datum/fabricator_recipe/tool - path = /obj/item/crowbar - category = "Tools" - -/datum/fabricator_recipe/tool/prybar - path = /obj/item/crowbar/prybar - -/datum/fabricator_recipe/tool/rescuetool - path = /obj/item/crowbar/emergency_forcing_tool - -/datum/fabricator_recipe/tool/int_wirer - path = /obj/item/device/integrated_electronics/wirer - -/datum/fabricator_recipe/tool/int_debugger - path = /obj/item/device/integrated_electronics/debugger - -/datum/fabricator_recipe/tool/int_analyzer - path = /obj/item/device/integrated_electronics/analyzer - -/datum/fabricator_recipe/tool/multitool - path = /obj/item/device/multitool - -/datum/fabricator_recipe/tool/t_scanner - path = /obj/item/device/t_scanner - -/datum/fabricator_recipe/tool/weldertool - path = /obj/item/weldingtool - -/datum/fabricator_recipe/tool/screwdriver - path = /obj/item/screwdriver - -/datum/fabricator_recipe/tool/wirecutters - path = /obj/item/wirecutters - -/datum/fabricator_recipe/tool/wrench - path = /obj/item/wrench - -/datum/fabricator_recipe/tool/hatchet - path = /obj/item/material/hatchet - -/datum/fabricator_recipe/tool/minihoe - path = /obj/item/material/minihoe - -/datum/fabricator_recipe/tool/welder_industrial - path = /obj/item/weldingtool/largetank - hidden = TRUE diff --git a/code/modules/fabrication/designs/micro/designs_cutlery.dm b/code/modules/fabrication/designs/micro/designs_cutlery.dm deleted file mode 100644 index 3229b3812d718..0000000000000 --- a/code/modules/fabrication/designs/micro/designs_cutlery.dm +++ /dev/null @@ -1,43 +0,0 @@ -/datum/fabricator_recipe/cutlery - name = "fork, aluminium" - path = /obj/item/material/kitchen/utensil/fork - category = "Cutlery" - fabricator_types = list(FABRICATOR_CLASS_MICRO) - -/datum/fabricator_recipe/cutlery/spoon_aluminium - name = "spoon, aluminium" - path = /obj/item/material/kitchen/utensil/spoon - -/datum/fabricator_recipe/cutlery/spork_aluminium - name = "spork, aluminium" - path = /obj/item/material/kitchen/utensil/spork - -/datum/fabricator_recipe/cutlery/knife_aluminium - name = "table knife, aluminium" - path = /obj/item/material/knife/table - -/datum/fabricator_recipe/cutlery/foon_aluminium - name = "foon, aluminium" - path = /obj/item/material/kitchen/utensil/foon - hidden = TRUE - -/datum/fabricator_recipe/cutlery/fork_plastic - name = "fork, plastic" - path = /obj/item/material/kitchen/utensil/fork/plastic - -/datum/fabricator_recipe/cutlery/spoon_plastic - name = "spoon, plastic" - path = /obj/item/material/kitchen/utensil/spoon/plastic - -/datum/fabricator_recipe/cutlery/spork_plastic - name = "spork, plastic" - path = /obj/item/material/kitchen/utensil/spork/plastic - -/datum/fabricator_recipe/cutlery/knife_plastic - name = "table knife, plastic" - path = /obj/item/material/knife/table/plastic - -/datum/fabricator_recipe/cutlery/foon_plastic - name = "foon, plastic" - path = /obj/item/material/kitchen/utensil/foon/plastic - hidden = TRUE \ No newline at end of file diff --git a/code/modules/fabrication/designs/micro/designs_glasses.dm b/code/modules/fabrication/designs/micro/designs_glasses.dm deleted file mode 100644 index 20a4f9fb06edb..0000000000000 --- a/code/modules/fabrication/designs/micro/designs_glasses.dm +++ /dev/null @@ -1,43 +0,0 @@ -/datum/fabricator_recipe/drinkingglass - path = /obj/item/reagent_containers/food/drinks/glass2/square - category = "Drinking Glasses" - fabricator_types = list(FABRICATOR_CLASS_MICRO) - -/datum/fabricator_recipe/drinkingglass/rocks - path = /obj/item/reagent_containers/food/drinks/glass2/rocks - -/datum/fabricator_recipe/drinkingglass/shake - path = /obj/item/reagent_containers/food/drinks/glass2/shake - -/datum/fabricator_recipe/drinkingglass/cocktail - path = /obj/item/reagent_containers/food/drinks/glass2/cocktail - -/datum/fabricator_recipe/drinkingglass/shot - path = /obj/item/reagent_containers/food/drinks/glass2/shot - -/datum/fabricator_recipe/drinkingglass/pint - path = /obj/item/reagent_containers/food/drinks/glass2/pint - -/datum/fabricator_recipe/drinkingglass/mug - path = /obj/item/reagent_containers/food/drinks/glass2/mug - -/datum/fabricator_recipe/drinkingglass/wine - path = /obj/item/reagent_containers/food/drinks/glass2/wine - -/datum/fabricator_recipe/drinkingglass/carafe - path = /obj/item/reagent_containers/food/drinks/glass2/carafe - -/datum/fabricator_recipe/drinkingglass/flute - path = /obj/item/reagent_containers/food/drinks/glass2/flute - -/datum/fabricator_recipe/drinkingglass/coffecup - path = /obj/item/reagent_containers/food/drinks/glass2/coffeecup - -/datum/fabricator_recipe/drinkingglass/cognac - path = /obj/item/reagent_containers/food/drinks/glass2/cognac - -/datum/fabricator_recipe/drinkingglass/goblet - path = /obj/item/reagent_containers/food/drinks/glass2/goblet - -/datum/fabricator_recipe/drinkingglass/coffeecup/glass - path = /obj/item/reagent_containers/food/drinks/glass2/coffeecup/glass \ No newline at end of file diff --git a/code/modules/fabrication/designs/replicator/designs_food.dm b/code/modules/fabrication/designs/replicator/designs_food.dm deleted file mode 100644 index 1e54b50e8bf38..0000000000000 --- a/code/modules/fabrication/designs/replicator/designs_food.dm +++ /dev/null @@ -1,15 +0,0 @@ -/datum/fabricator_recipe/food - fabricator_types = list(FABRICATOR_CLASS_FOOD) - path = /obj/item/reagent_containers/food/snacks/tofurkey - -/datum/fabricator_recipe/food/soylentviridians - path = /obj/item/reagent_containers/food/snacks/soylenviridians - -/datum/fabricator_recipe/food/fries - path = /obj/item/reagent_containers/food/snacks/fries - -/datum/fabricator_recipe/food/soydope - path = /obj/item/reagent_containers/food/snacks/soydope - -/datum/fabricator_recipe/food/ricepudding - path = /obj/item/reagent_containers/food/snacks/ricepudding \ No newline at end of file diff --git a/code/modules/fabrication/fabricator_build.dm b/code/modules/fabrication/fabricator_build.dm deleted file mode 100644 index b9d879657f428..0000000000000 --- a/code/modules/fabrication/fabricator_build.dm +++ /dev/null @@ -1,72 +0,0 @@ -/obj/machinery/fabricator/proc/update_current_build(var/spend_time) - - if(!istype(currently_building) || !is_functioning()) - return - - // Decrement our current build timer. - currently_building.remaining_time -= max(1, max(1, spend_time * build_time_multiplier)) - if(currently_building.remaining_time > 0) - return - - // Print the item. - if(ispath(currently_building.target_recipe.path, /obj/item/stack)) - new currently_building.target_recipe.path(get_turf(src), amount = currently_building.multiplier) - else - new currently_building.target_recipe.path(get_turf(src)) - QDEL_NULL(currently_building) - get_next_build() - update_icon() - -/obj/machinery/fabricator/proc/start_building() - if(!(fab_status_flags & FAB_BUSY) && is_functioning()) - fab_status_flags |= FAB_BUSY - update_use_power(POWER_USE_ACTIVE) - update_icon() - -/obj/machinery/fabricator/proc/stop_building() - if(fab_status_flags & FAB_BUSY) - fab_status_flags &= ~FAB_BUSY - update_use_power(POWER_USE_IDLE) - update_icon() - -/obj/machinery/fabricator/proc/get_next_build() - currently_building = null - if(length(queued_orders)) - currently_building = queued_orders[1] - queued_orders -= currently_building - start_building() - else - stop_building() - updateUsrDialog() - -/obj/machinery/fabricator/proc/try_queue_build(var/datum/fabricator_recipe/recipe, var/multiplier) - - // Do some basic sanity checking. - if(!is_functioning() || !istype(recipe) || !(recipe in SSfabrication.get_recipes(fabricator_class))) - return - multiplier = sanitize_integer(multiplier, 1, 100, 1) - if(!ispath(recipe, /obj/item/stack) && multiplier > 1) - multiplier = 1 - - // Check if sufficient resources exist. - for(var/material in recipe.resources) - if(stored_material[material] < round(recipe.resources[material] * mat_efficiency) * multiplier) - return - - // Generate and track a new order. - var/datum/fabricator_build_order/order = new - order.remaining_time = recipe.build_time - order.target_recipe = recipe - order.multiplier = multiplier - queued_orders += order - - // Remove/earmark resources. - for(var/material in recipe.resources) - var/removed_mat = round(recipe.resources[material] * mat_efficiency) * multiplier - stored_material[material] = max(0, stored_material[material] - removed_mat) - order.earmarked_materials[material] = removed_mat - - if(!currently_building) - get_next_build() - else - start_building() \ No newline at end of file diff --git a/code/modules/fabrication/fabricator_food.dm b/code/modules/fabrication/fabricator_food.dm deleted file mode 100644 index ece02929c7e07..0000000000000 --- a/code/modules/fabrication/fabricator_food.dm +++ /dev/null @@ -1,52 +0,0 @@ -/obj/machinery/fabricator/replicator - name = "food replicator" - desc = "A versatile machine that dispenses nourishing but bland food. Responds to voice commands like 'menu' and 'status'." - fabricator_class = FABRICATOR_CLASS_FOOD - icon = 'icons/obj/machines/fabricators/replicator.dmi' - icon_state = "replicator" - base_icon_state = "replicator" - has_recycler = FALSE - base_storage_capacity = list( - /datum/reagent/nutriment = 100 - ) - machine_name = "replicator" - machine_desc = "A voice-operated machine that dispenses bland food from raw nutriment." - -/obj/machinery/fabricator/replicator/replicator/Initialize() - . = ..() - if (prob(1)) - machine_desc = "\ - \"Fish!\" \ -
              \"Today's fish is trout a la creme. Enjoy your meal.\"
              " - -/obj/machinery/fabricator/replicator/hear_talk(var/mob/M, var/text, var/verb, var/datum/language/speaking) - if(speaking && !speaking.machine_understands) - return ..() - var/true_text = lowertext(html_decode(text)) - if(findtext(true_text, "status")) - addtimer(CALLBACK(src, /obj/machinery/fabricator/replicator/proc/state_status), 2 SECONDS, TIMER_UNIQUE | TIMER_OVERRIDE) - else if(findtext(true_text, "menu")) - addtimer(CALLBACK(src, /obj/machinery/fabricator/replicator/proc/state_menu), 2 SECONDS, TIMER_UNIQUE | TIMER_OVERRIDE) - else - for(var/datum/fabricator_recipe/recipe in SSfabrication.get_recipes(fabricator_class)) - if(recipe.hidden && !(fab_status_flags & FAB_HACKED)) - continue - if(findtext(true_text, lowertext(recipe.name))) - addtimer(CALLBACK(src, /obj/machinery/fabricator/proc/try_queue_build, recipe, 1), 2 SECONDS) - break - ..() - -/obj/machinery/fabricator/replicator/proc/state_status() - for(var/thing in storage_capacity) - audible_message("\The [src] announces, \"[capitalize(thing)] storage at [(stored_material[thing]/storage_capacity[thing])*100]%!\"") - -/obj/machinery/fabricator/replicator/proc/state_menu() - var/list/menu = list() - for(var/datum/fabricator_recipe/recipe in SSfabrication.get_recipes(fabricator_class)) - if(recipe.hidden && !(fab_status_flags & FAB_HACKED)) - continue - menu += recipe.name - if(length(menu)) - audible_message("\The [src] states, \"Greetings! I serve the following dishes: [english_list(menu)]\"") - else - audible_message("\The [src] states, \"Apologies! I cannot serve any dishes at the moment.\"") \ No newline at end of file diff --git a/code/modules/fabrication/fabricator_hacked.dm b/code/modules/fabrication/fabricator_hacked.dm deleted file mode 100644 index 7f841e56aaf3f..0000000000000 --- a/code/modules/fabrication/fabricator_hacked.dm +++ /dev/null @@ -1,4 +0,0 @@ -/obj/machinery/fabricator/hacked - desc = "A typical autolathe. It has an unusual 'CRaCKZ BY C0wCUb3C0NQ3r0R' glyph bouncing around the interface."; - name = "jailbroken autolathe" - fab_status_flags = FAB_HACKED diff --git a/code/modules/fabrication/fabricator_intake.dm b/code/modules/fabrication/fabricator_intake.dm deleted file mode 100644 index d9fff96f6a41d..0000000000000 --- a/code/modules/fabrication/fabricator_intake.dm +++ /dev/null @@ -1,118 +0,0 @@ -#define SUBSTANCE_TAKEN_NONE -1 -#define SUBSTANCE_TAKEN_SOME 0 -#define SUBSTANCE_TAKEN_FULL 1 -#define SUBSTANCE_TAKEN_ALL 2 - -/obj/machinery/fabricator/proc/take_reagents(var/obj/item/thing, var/mob/user, var/destructive = FALSE) - if(!thing.reagents || (!destructive && !thing.is_open_container())) - return SUBSTANCE_TAKEN_NONE - for(var/datum/reagent/R in thing.reagents.reagent_list) - if(!base_storage_capacity[R.type]) - continue - var/taking_reagent = min(R.volume, storage_capacity[R.type] - stored_material[R.type]) - if(taking_reagent <= 0) - continue - thing.reagents.remove_reagent(R.type, taking_reagent) - stored_material[R.type] += taking_reagent - // If we're destroying this, take everything. - if(destructive) - . = SUBSTANCE_TAKEN_ALL - continue - // Otherwise take the first applicable and useful reagent. - if(stored_material[R.type] == storage_capacity[R.type]) - return SUBSTANCE_TAKEN_FULL - else if(thing.reagents.total_volume > 0) - return SUBSTANCE_TAKEN_SOME - else - return SUBSTANCE_TAKEN_ALL - return SUBSTANCE_TAKEN_NONE - -/obj/machinery/fabricator/proc/take_materials(var/obj/item/thing, var/mob/user) - . = SUBSTANCE_TAKEN_NONE - var/stacks_used = 1 - var/mat_colour = thing.color - for(var/mat in thing.matter) - var/material/material_def = SSmaterials.get_material_by_name(mat) - if(!material_def || !base_storage_capacity[material_def.type]) - continue - var/taking_material = min(thing.matter[mat], storage_capacity[material_def.type] - stored_material[material_def.type]) - if(taking_material <= 0) - continue - if(!mat_colour) - mat_colour = material_def.icon_colour - stored_material[material_def.type] += taking_material - stacks_used = max(stacks_used, Ceil(taking_material/material_def.units_per_sheet)) - if(storage_capacity[material_def.type] == stored_material[material_def.type]) - . = SUBSTANCE_TAKEN_FULL - else if(. != SUBSTANCE_TAKEN_FULL) - . = SUBSTANCE_TAKEN_ALL - if(. != SUBSTANCE_TAKEN_NONE) - if(mat_colour) - var/image/adding_mat_overlay = image(icon, "[base_icon_state]_mat") - adding_mat_overlay.color = mat_colour - material_overlays += adding_mat_overlay - update_icon() - addtimer(CALLBACK(src, /obj/machinery/fabricator/proc/remove_mat_overlay, adding_mat_overlay), 1 SECOND) - if(istype(thing, /obj/item/stack)) - var/obj/item/stack/S = thing - S.use(stacks_used) - if(S.amount <= 0 || QDELETED(S)) - . = SUBSTANCE_TAKEN_ALL - else if(. != SUBSTANCE_TAKEN_FULL) - . = SUBSTANCE_TAKEN_SOME - -/obj/machinery/fabricator/proc/show_intake_message(var/mob/user, var/value, var/obj/item/thing) - if(value == SUBSTANCE_TAKEN_FULL) - to_chat(user, SPAN_NOTICE("You fill \the [src] to capacity with \the [thing].")) - else if(value == SUBSTANCE_TAKEN_SOME) - to_chat(user, SPAN_NOTICE("You fill \the [src] from \the [thing].")) - else if(value == SUBSTANCE_TAKEN_ALL) - to_chat(user, SPAN_NOTICE("You dump \the [thing] into \the [src].")) - else - to_chat(user, SPAN_WARNING("\The [src] cannot process \the [thing].")) - -/obj/machinery/fabricator/attackby(var/obj/item/O, var/mob/user) - if(component_attackby(O, user) || stat) - return TRUE - if(panel_open && (isMultitool(O) || isWirecutter(O))) - attack_hand(user) - return TRUE - // Take reagents, if any are applicable. - var/reagents_taken = take_reagents(O, user) - if(reagents_taken != SUBSTANCE_TAKEN_NONE && !has_recycler) - show_intake_message(user, reagents_taken, O) - updateUsrDialog() - return TRUE - // Take everything if we have a recycler. - if(has_recycler && !is_robot_module(O) && user.unEquip(O)) - var/result = max(take_materials(O, user), max(reagents_taken, take_reagents(O, user, TRUE))) - show_intake_message(user, result, O) - if(result == SUBSTANCE_TAKEN_NONE) - user.put_in_active_hand(O) - return TRUE - if(istype(O, /obj/item/stack)) - var/obj/item/stack/stack = O - if(!QDELETED(stack) && stack.amount > 0) - user.put_in_active_hand(stack) - else - qdel(O) - updateUsrDialog() - return TRUE - . = ..() - -/obj/machinery/fabricator/physical_attack_hand(mob/user) - if(fab_status_flags & FAB_SHOCKED) - shock(user, 50) - return TRUE - -/obj/machinery/fabricator/interface_interact(mob/user) - if((fab_status_flags & FAB_DISABLED) && !panel_open) - to_chat(user, SPAN_WARNING("\The [src] is disabled!")) - return TRUE - interact(user) - return TRUE - -#undef SUBSTANCE_TAKEN_FULL -#undef SUBSTANCE_TAKEN_NONE -#undef SUBSTANCE_TAKEN_SOME -#undef SUBSTANCE_TAKEN_ALL \ No newline at end of file diff --git a/code/modules/fabrication/fabricator_microlathe.dm b/code/modules/fabrication/fabricator_microlathe.dm deleted file mode 100644 index 26240ecbb4303..0000000000000 --- a/code/modules/fabrication/fabricator_microlathe.dm +++ /dev/null @@ -1,25 +0,0 @@ -/obj/machinery/fabricator/micro - name = "microlathe" - desc = "It produces small items from common resources." - icon = 'icons/obj/machines/fabricators/microlathe.dmi' - icon_state = "minilathe" - base_icon_state = "minilathe" - idle_power_usage = 5 - active_power_usage = 1000 - base_type = /obj/machinery/fabricator/micro - fabricator_class = FABRICATOR_CLASS_MICRO - base_storage_capacity = list( - /material/aluminium = 5000, - /material/plastic = 5000, - /material/glass = 5000 - ) - machine_name = "microlathe" - machine_desc = "A smaller-sized autolathe, typically used for cutlery, dinnerware, and drinking glasses." - -//Subtype for mapping, starts preloaded with glass and set to print glasses -/obj/machinery/fabricator/micro/bartender - show_category = "Drinking Glasses" - -/obj/machinery/fabricator/micro/bartender/Initialize() - . = ..() - stored_material[/material/glass] = base_storage_capacity[/material/glass] \ No newline at end of file diff --git a/code/modules/fabrication/fabricator_topic.dm b/code/modules/fabrication/fabricator_topic.dm deleted file mode 100644 index 8b3d21be0a59a..0000000000000 --- a/code/modules/fabrication/fabricator_topic.dm +++ /dev/null @@ -1,37 +0,0 @@ -/obj/machinery/fabricator/OnTopic(user, href_list, state) - if(href_list["change_category"]) - var/choice = input("Which category do you wish to display?") as null|anything in SSfabrication.get_categories(fabricator_class)|"All" - if(!choice || !CanUseTopic(user, state)) - return TOPIC_HANDLED - show_category = choice - . = TOPIC_REFRESH - else if(href_list["make"]) - try_queue_build(locate(href_list["make"]), text2num(href_list["multiplier"])) - . = TOPIC_REFRESH - else if(href_list["cancel"]) - try_cancel_build(locate(href_list["cancel"])) - . = TOPIC_REFRESH - else if(href_list["eject_mat"]) - try_dump_material(href_list["eject_mat"]) - . = TOPIC_REFRESH - -/obj/machinery/fabricator/proc/try_cancel_build(var/datum/fabricator_build_order/order) - if(istype(order) && currently_building != order && is_functioning()) - if(order in queued_orders) - // Refund some mats. - for(var/mat in order.earmarked_materials) - stored_material[mat] = min(stored_material[mat] + (order.earmarked_materials[mat] * 0.9), storage_capacity[mat]) - queued_orders -= order - qdel(order) - -/obj/machinery/fabricator/proc/try_dump_material(var/mat_name) - for(var/mat_path in stored_substances_to_names) - if(stored_substances_to_names[mat_path] == mat_name) - if(ispath(mat_path, /material)) - var/material/mat = SSmaterials.get_material_by_name(mat_name) - if(mat && stored_material[mat_path] > mat.units_per_sheet && mat.stack_type) - var/sheet_count = Floor(stored_material[mat_path]/mat.units_per_sheet) - stored_material[mat_path] -= sheet_count * mat.units_per_sheet - mat.place_sheet(get_turf(src), sheet_count) - else if(!isnull(stored_material[mat_path])) - stored_material[mat_path] = 0 diff --git a/code/modules/fabrication/fabricator_ui.dm b/code/modules/fabrication/fabricator_ui.dm deleted file mode 100644 index c52b65f3a562a..0000000000000 --- a/code/modules/fabrication/fabricator_ui.dm +++ /dev/null @@ -1,91 +0,0 @@ -#define PRINT_MULTIPLIER_DIVISOR 5 - -/obj/machinery/fabricator/ui_interact(mob/user, ui_key = "rcon", datum/nanoui/ui=null, force_open=1) - - var/list/data = list() - - data["category"] = show_category - data["functional"] = is_functioning() - - if(is_functioning()) - - var/current_storage = list() - data["material_storage"] = current_storage - for(var/material in stored_material) - var/list/material_data = list() - var/mat_name = capitalize(stored_substances_to_names[material]) - material_data["name"] = mat_name - material_data["stored"] = stored_material[material] - material_data["max"] = storage_capacity[material] - material_data["eject_key"] = stored_substances_to_names[material] - material_data["eject_label"] = ispath(material, /material) ? "Eject" : "Flush" - data["material_storage"] += list(material_data) - - var/list/current_build = list() - data["current_build"] = current_build - if(currently_building) - current_build["name"] = currently_building.target_recipe.name - current_build["multiplier"] = currently_building.multiplier - current_build["progress"] = "[100-round((currently_building.remaining_time/currently_building.target_recipe.build_time)*100)]%" - else - current_build["name"] = "Nothing." - current_build["multiplier"] = "-" - current_build["progress"] = "-" - - data["build_queue"] = list() - if(length(queued_orders)) - for(var/datum/fabricator_build_order/order in queued_orders) - var/list/order_data = list() - order_data["name"] = order.target_recipe.name - order_data["multiplier"] = order.multiplier - order_data["reference"] = "\ref[order]" - data["build_queue"] += list(order_data) - else - var/list/order_data = list() - order_data["name"] = "Nothing." - order_data["multiplier"] = "-" - data["build_queue"] += list(order_data) - - data["build_options"] = list() - for(var/datum/fabricator_recipe/R in SSfabrication.get_recipes(fabricator_class)) - if(R.hidden && !(fab_status_flags & FAB_HACKED) || (show_category != "All" && show_category != R.category)) - continue - var/list/build_option = list() - var/max_sheets = 0 - build_option["name"] = R.name - build_option["reference"] = "\ref[R]" - build_option["illegal"] = R.hidden - if(!length(R.resources)) - build_option["cost"] = "No resources required." - max_sheets = 100 - else - //Make sure it's buildable and list required resources. - var/list/material_components = list() - for(var/material in R.resources) - var/sheets = round(stored_material[material]/round(R.resources[material]*mat_efficiency)) - if(isnull(max_sheets) || max_sheets > sheets) - max_sheets = sheets - if(stored_material[material] < round(R.resources[material]*mat_efficiency)) - build_option["unavailable"] = 1 - material_components += "[round(R.resources[material] * mat_efficiency)] [stored_substances_to_names[material]]" - build_option["cost"] = "[capitalize(jointext(material_components, ", "))]." - if(ispath(R.path, /obj/item/stack) && max_sheets >= PRINT_MULTIPLIER_DIVISOR) - var/obj/item/stack/R_stack = R.path - build_option["multipliers"] = list() - for(var/i = 1 to Floor(min(R_stack.max_amount, max_sheets)/PRINT_MULTIPLIER_DIVISOR)) - var/mult = i * PRINT_MULTIPLIER_DIVISOR - build_option["multipliers"] += list(list("label" = "x[mult]", "multiplier" = mult)) - data["build_options"] += list(build_option) - - ui = SSnano.try_update_ui(user, src, ui_key, ui, data, force_open) - if (!ui) - ui = new(user, src, ui_key, "fabricator.tmpl", "[capitalize(name)]", 480, 410, state = GLOB.physical_state) - ui.set_initial_data(data) - ui.open() - ui.set_auto_update(1) - -/obj/machinery/fabricator/interface_interact(mob/user) - ui_interact(user) - return TRUE - -#undef PRINT_MULTIPLIER_DIVISOR \ No newline at end of file diff --git a/code/modules/flufftext/TextFilters.dm b/code/modules/flufftext/TextFilters.dm deleted file mode 100644 index 2f55e77c82964..0000000000000 --- a/code/modules/flufftext/TextFilters.dm +++ /dev/null @@ -1,146 +0,0 @@ -/proc/NewStutter(phrase,stunned) - phrase = html_decode(phrase) - - var/list/split_phrase = splittext(phrase," ") //Split it up into words. - - var/list/unstuttered_words = split_phrase.Copy() - var/i = rand(1,3) - if(stunned) i = split_phrase.len - for(,i > 0,i--) //Pick a few words to stutter on. - - if (!unstuttered_words.len) - break - var/word = pick(unstuttered_words) - unstuttered_words -= word //Remove from unstuttered words so we don't stutter it again. - var/index = split_phrase.Find(word) //Find the word in the split phrase so we can replace it. - - //Search for dipthongs (two letters that make one sound.) - var/first_sound = copytext_char(word,1,3) - var/first_letter = copytext_char(word,1,2) - if(lowertext(first_sound) in list("ch","th","sh")) - first_letter = first_sound - - //Repeat the first letter to create a stutter. - var/rnum = rand(1,3) - switch(rnum) - if(1) - word = "[first_letter]-[word]" - if(2) - word = "[first_letter]-[first_letter]-[word]" - if(3) - word = "[first_letter]-[word]" - - split_phrase[index] = word - - return sanitize(jointext(split_phrase," ")) - -/proc/Stagger(mob/M,d) //Technically not a filter, but it relates to drunkenness. - step(M, pick(d,turn(d,90),turn(d,-90))) - -/proc/Ellipsis(original_msg, chance = 50) - if(chance <= 0) return "..." - if(chance >= 100) return original_msg - - var/list/words = splittext(original_msg," ") - var/list/new_words = list() - - var/new_msg = "" - - for(var/w in words) - if(prob(chance)) - new_words += "..." - else - new_words += w - - new_msg = jointext(new_words," ") - - return new_msg -/* -RadioChat Filter. -args: -message - returns a distorted version of this -distortion_chance - the chance of a filter being applied to each character. -distortion_speed - multiplier for the chance increase. -distortion - starting distortion. -english_only - whether to use traditional english letters only (for use in NanoUI) -*/ -/proc/RadioChat(mob/living/user, message, distortion_chance = 60, distortion_speed = 1, distortion = 1, english_only = 0) - var/datum/language/language - if(user) - language = user.get_default_language() - message = html_decode(message) - var/new_message = "" - var/input_size = length(message) - var/lentext = 0 - if(input_size < 20) // Short messages get distorted too. Bit hacksy. - distortion += (20-input_size)/2 - while(lentext <= input_size) - var/newletter=copytext_char(message, lentext, lentext+1) - if(!prob(distortion_chance)) - new_message += newletter - lentext += 1 - continue - if(newletter != " ") - if(prob(0.08 * distortion)) // Major cutout - newletter = "*zzzt*" - lentext += rand(1, (length(message) - lentext)) // Skip some characters - distortion += 1 * distortion_speed - else if(prob(0.8 * distortion)) // Minor cut out - if(prob(25)) - newletter = ".." - else if(prob(25)) - newletter = " " - else - newletter = "" - distortion += 0.25 * distortion_speed - else if(prob(2 * distortion)) // Mishearing - if(language && language.syllables && prob(50)) - newletter = pick(language.syllables) - else - newletter = pick("a","e","i","o","u") - distortion += 0.25 * distortion_speed - else if(prob(1.5 * distortion)) // Mishearing - if(language && prob(50)) - if(language.syllables) - newletter = pick (language.syllables) - else - newletter = "*" - else - if(english_only) - newletter += "*" - else - newletter = pick("<", ">", "!", "$", "%") - distortion += 0.5 * distortion_speed - else if(prob(0.75 * distortion)) // Incomprehensible - newletter = pick("<", ">", "!", "$", "%", "^", "&", "*", "~", "#") - distortion += 0.75 * distortion_speed - else if(prob(0.05 * distortion)) // Total cut out - if(!english_only) - newletter = "srgt%$hjc< -BZZT-" - else - newletter = "srgt%$hjc< -BZZT-" - new_message += newletter - break - else if(prob(2.5 * distortion)) // Sound distortion. Still recognisable, mostly. - switch(lowertext(newletter)) - if("s") - newletter = "$" - if("e") - newletter = "э" - if("w") - newletter = "щ" - if("y") - newletter = "ю" - if("x") - newletter = "х" - if("u") - newletter = "m" - else - if(prob(0.2 * distortion)) - newletter = " *crackle* " - distortion += 0.25 * distortion_speed - if(prob(20)) - capitalize(newletter) - new_message += newletter - lentext += 1 - return new_message diff --git a/code/modules/food/recipes_microwave.dm b/code/modules/food/recipes_microwave.dm deleted file mode 100644 index 6b2e66c3e2a74..0000000000000 --- a/code/modules/food/recipes_microwave.dm +++ /dev/null @@ -1,1485 +0,0 @@ -/datum/recipe/friedegg - reagents = list( - /datum/reagent/sodiumchloride = 1, - /datum/reagent/blackpepper = 1 - ) - items = list( - /obj/item/reagent_containers/food/snacks/egg - ) - result = /obj/item/reagent_containers/food/snacks/friedegg - - -/datum/recipe/friedegg2 - items = list( - /obj/item/reagent_containers/food/snacks/egg, - /obj/item/reagent_containers/food/snacks/egg - ) - result = /obj/item/reagent_containers/food/snacks/friedegg - - -/datum/recipe/boiledegg - reagents = list( - /datum/reagent/water = 10 - ) - items = list( - /obj/item/reagent_containers/food/snacks/egg - ) - result = /obj/item/reagent_containers/food/snacks/boiledegg - - -/datum/recipe/dionaroast - reagents = list( - /datum/reagent/acid/polyacid = 5 - ) - items = list( - /obj/item/holder/diona - ) - fruit = list( - "apple" = 1 - ) - result = /obj/item/reagent_containers/food/snacks/dionaroast - - -/datum/recipe/classichotdog - items = list( - /obj/item/reagent_containers/food/snacks/bun, - /obj/item/holder/corgi - ) - result = /obj/item/reagent_containers/food/snacks/classichotdog - - -/datum/recipe/jellydonut - reagents = list( - /datum/reagent/drink/juice/berry = 5, - /datum/reagent/sugar = 5 - ) - items = list( - /obj/item/reagent_containers/food/snacks/doughslice - ) - result = /obj/item/reagent_containers/food/snacks/donut/jelly - - -/datum/recipe/jellydonut/slime - reagents = list( - /datum/reagent/slimejelly = 5, - /datum/reagent/sugar = 5 - ) - items = list( - /obj/item/reagent_containers/food/snacks/doughslice - ) - result = /obj/item/reagent_containers/food/snacks/donut/slimejelly - - -/datum/recipe/jellydonut/cherry - reagents = list( - /datum/reagent/nutriment/cherryjelly = 5, - /datum/reagent/sugar = 5 - ) - items = list( - /obj/item/reagent_containers/food/snacks/doughslice - ) - result = /obj/item/reagent_containers/food/snacks/donut/cherryjelly - - -/datum/recipe/donut - reagents = list( - /datum/reagent/sugar = 5 - ) - items = list( - /obj/item/reagent_containers/food/snacks/doughslice - ) - result = /obj/item/reagent_containers/food/snacks/donut/normal - - -/datum/recipe/meatburger - items = list( - /obj/item/reagent_containers/food/snacks/bun, - /obj/item/reagent_containers/food/snacks/cutlet - ) - result = /obj/item/reagent_containers/food/snacks/meatburger - - -/datum/recipe/brainburger - items = list( - /obj/item/reagent_containers/food/snacks/bun, - /obj/item/organ/internal/brain - ) - result = /obj/item/reagent_containers/food/snacks/brainburger - - -/datum/recipe/roburger - items = list( - /obj/item/reagent_containers/food/snacks/bun, - /obj/item/robot_parts/head - ) - result = /obj/item/reagent_containers/food/snacks/roburger - - -/datum/recipe/xenoburger - items = list( - /obj/item/reagent_containers/food/snacks/bun, - /obj/item/reagent_containers/food/snacks/xenomeat - ) - result = /obj/item/reagent_containers/food/snacks/xenoburger - - -/datum/recipe/fishburger - items = list( - /obj/item/reagent_containers/food/snacks/bun, - /obj/item/reagent_containers/food/snacks/fish - ) - result = /obj/item/reagent_containers/food/snacks/fishburger - - -/datum/recipe/tofuburger - items = list( - /obj/item/reagent_containers/food/snacks/bun, - /obj/item/reagent_containers/food/snacks/tofu - ) - result = /obj/item/reagent_containers/food/snacks/tofuburger - - -/datum/recipe/ghostburger - items = list( - /obj/item/reagent_containers/food/snacks/bun, - /obj/item/ectoplasm - ) - result = /obj/item/reagent_containers/food/snacks/ghostburger - - -/datum/recipe/clownburger - items = list( - /obj/item/reagent_containers/food/snacks/bun, - /obj/item/clothing/mask/gas/clown_hat - ) - result = /obj/item/reagent_containers/food/snacks/clownburger - - -/datum/recipe/mimeburger - items = list( - /obj/item/reagent_containers/food/snacks/bun, - /obj/item/clothing/head/beret - ) - result = /obj/item/reagent_containers/food/snacks/mimeburger - - -/datum/recipe/bunbun - items = list( - /obj/item/reagent_containers/food/snacks/bun, - /obj/item/reagent_containers/food/snacks/bun - ) - result = /obj/item/reagent_containers/food/snacks/bunbun - - -/datum/recipe/hotdog - items = list( - /obj/item/reagent_containers/food/snacks/bun, - /obj/item/reagent_containers/food/snacks/sausage - ) - result = /obj/item/reagent_containers/food/snacks/hotdog - - -/datum/recipe/waffles - reagents = list( - /datum/reagent/nutriment/batter/cakebatter = 20 - ) - result = /obj/item/reagent_containers/food/snacks/waffles - - -/datum/recipe/pancakesblu - reagents = list( - /datum/reagent/nutriment/batter = 20 - ) - fruit = list( - "blueberries" = 2 - ) - result = /obj/item/reagent_containers/food/snacks/pancakesblu - - -/datum/recipe/pancakes - reagents = list( - /datum/reagent/nutriment/batter = 20 - ) - result = /obj/item/reagent_containers/food/snacks/pancakes - - -/datum/recipe/hot_donkpocket - reagents = list() - items = list( - /obj/item/reagent_containers/food/snacks/donkpocket - ) - result = /obj/item/reagent_containers/food/snacks/donkpocket - - -/datum/recipe/hot_donkpocket/warm/make_food(obj/container) - var/obj/item/reagent_containers/food/snacks/donkpocket/donk = locate() in container - donk?.SetHot() - return donk - - -/datum/recipe/meatbread - items = list( - /obj/item/reagent_containers/food/snacks/dough, - /obj/item/reagent_containers/food/snacks/dough, - /obj/item/reagent_containers/food/snacks/cutlet, - /obj/item/reagent_containers/food/snacks/cutlet, - /obj/item/reagent_containers/food/snacks/cheesewedge, - /obj/item/reagent_containers/food/snacks/cheesewedge - ) - result = /obj/item/reagent_containers/food/snacks/sliceable/meatbread - - -/datum/recipe/xenomeatbread - items = list( - /obj/item/reagent_containers/food/snacks/dough, - /obj/item/reagent_containers/food/snacks/dough, - /obj/item/reagent_containers/food/snacks/xenomeat, - /obj/item/reagent_containers/food/snacks/xenomeat, - /obj/item/reagent_containers/food/snacks/cheesewedge, - /obj/item/reagent_containers/food/snacks/cheesewedge - ) - result = /obj/item/reagent_containers/food/snacks/sliceable/xenomeatbread - - -/datum/recipe/bananabread - reagents = list( - /datum/reagent/drink/milk = 5, - /datum/reagent/sugar = 5 - ) - items = list( - /obj/item/reagent_containers/food/snacks/dough, - /obj/item/reagent_containers/food/snacks/dough - ) - fruit = list( - "banana" = 2 - ) - result = /obj/item/reagent_containers/food/snacks/sliceable/bananabread - - -/datum/recipe/omelette - items = list( - /obj/item/reagent_containers/food/snacks/egg, - /obj/item/reagent_containers/food/snacks/egg, - /obj/item/reagent_containers/food/snacks/cheesewedge - ) - result = /obj/item/reagent_containers/food/snacks/omelette - - -/datum/recipe/muffin - reagents = list( - /datum/reagent/nutriment/batter/cakebatter = 10 - ) - result = /obj/item/reagent_containers/food/snacks/muffin - - -/datum/recipe/eggplantparm - items = list( - /obj/item/reagent_containers/food/snacks/cheesewedge, - /obj/item/reagent_containers/food/snacks/cheesewedge - ) - fruit = list( - "eggplant" = 1 - ) - result = /obj/item/reagent_containers/food/snacks/eggplantparm - - -/datum/recipe/soylenviridians - reagents = list( - /datum/reagent/nutriment/flour = 10 - ) - fruit = list( - "soybeans" = 1 - ) - result = /obj/item/reagent_containers/food/snacks/soylenviridians - - -/datum/recipe/soylentgreen - reagents = list( - /datum/reagent/nutriment/flour = 10 - ) - items = list( - /obj/item/reagent_containers/food/snacks/meat/human, - /obj/item/reagent_containers/food/snacks/meat/human - ) - result = /obj/item/reagent_containers/food/snacks/soylentgreen - - -/datum/recipe/meatpie - items = list( - /obj/item/reagent_containers/food/snacks/sliceable/flatdough, - /obj/item/reagent_containers/food/snacks/cutlet - ) - result = /obj/item/reagent_containers/food/snacks/meatpie - - -/datum/recipe/tofupie - items = list( - /obj/item/reagent_containers/food/snacks/sliceable/flatdough, - /obj/item/reagent_containers/food/snacks/tofu - ) - result = /obj/item/reagent_containers/food/snacks/tofupie - - -/datum/recipe/xemeatpie - items = list( - /obj/item/reagent_containers/food/snacks/sliceable/flatdough, - /obj/item/reagent_containers/food/snacks/xenomeat - ) - result = /obj/item/reagent_containers/food/snacks/xemeatpie - - -/datum/recipe/bananapie - reagents = list( - /datum/reagent/sugar = 5 - ) - items = list( - /obj/item/reagent_containers/food/snacks/sliceable/flatdough - ) - fruit = list( - "banana" = 1 - ) - result = /obj/item/reagent_containers/food/snacks/bananapie - - -/datum/recipe/cherrypie - reagents = list( - /datum/reagent/sugar = 10 - ) - items = list( - /obj/item/reagent_containers/food/snacks/sliceable/flatdough - ) - fruit = list( - "cherries" = 1 - ) - result = /obj/item/reagent_containers/food/snacks/cherrypie - - -/datum/recipe/berryclafoutis - items = list( - /obj/item/reagent_containers/food/snacks/sliceable/flatdough - ) - fruit = list( - "berries" = 1 - ) - result = /obj/item/reagent_containers/food/snacks/berryclafoutis - - -/datum/recipe/chaosdonut - reagents = list( - /datum/reagent/frostoil = 5, - /datum/reagent/capsaicin = 5, - /datum/reagent/sugar = 5 - ) - items = list( - /obj/item/reagent_containers/food/snacks/doughslice - ) - result = /obj/item/reagent_containers/food/snacks/donut/chaos - - -/datum/recipe/meatkabob - items = list( - /obj/item/stack/material/rods, - /obj/item/reagent_containers/food/snacks/cutlet, - /obj/item/reagent_containers/food/snacks/cutlet - ) - result = /obj/item/reagent_containers/food/snacks/meatkabob - - -/datum/recipe/tofukabob - items = list( - /obj/item/stack/material/rods, - /obj/item/reagent_containers/food/snacks/tofu, - /obj/item/reagent_containers/food/snacks/tofu - ) - result = /obj/item/reagent_containers/food/snacks/tofukabob - - -/datum/recipe/tofubread - items = list( - /obj/item/reagent_containers/food/snacks/dough, - /obj/item/reagent_containers/food/snacks/dough, - /obj/item/reagent_containers/food/snacks/dough, - /obj/item/reagent_containers/food/snacks/tofu, - /obj/item/reagent_containers/food/snacks/tofu, - /obj/item/reagent_containers/food/snacks/tofu, - /obj/item/reagent_containers/food/snacks/cheesewedge, - /obj/item/reagent_containers/food/snacks/cheesewedge, - /obj/item/reagent_containers/food/snacks/cheesewedge - ) - result = /obj/item/reagent_containers/food/snacks/sliceable/tofubread - - -/datum/recipe/loadedbakedpotato - items = list( - /obj/item/reagent_containers/food/snacks/cheesewedge - ) - fruit = list( - "potato" = 1 - ) - result = /obj/item/reagent_containers/food/snacks/loadedbakedpotato - - -/datum/recipe/cheesyfries - items = list( - /obj/item/reagent_containers/food/snacks/fries, - /obj/item/reagent_containers/food/snacks/cheesewedge - ) - result = /obj/item/reagent_containers/food/snacks/cheesyfries - - -/datum/recipe/cubancarp - reagents = list( - /datum/reagent/nutriment/batter = 10 - ) - items = list( - /obj/item/reagent_containers/food/snacks/fish - ) - fruit = list( - "chili" = 1 - ) - result = /obj/item/reagent_containers/food/snacks/cubancarp - - -/datum/recipe/popcorn - reagents = list( - /datum/reagent/sodiumchloride = 5 - ) - fruit = list( - "corn" = 1 - ) - result = /obj/item/reagent_containers/food/snacks/popcorn - - -/datum/recipe/cookie - reagents = list( - /datum/reagent/nutriment/batter/cakebatter = 5, - /datum/reagent/nutriment/coco = 5 - ) - result = /obj/item/reagent_containers/food/snacks/cookie - - -/datum/recipe/fortunecookie - reagents = list( - /datum/reagent/sugar = 5 - ) - items = list( - /obj/item/reagent_containers/food/snacks/doughslice, - /obj/item/paper - ) - result = /obj/item/reagent_containers/food/snacks/fortunecookie - - -/datum/recipe/fortunecookie/make_food(obj/container) - var/obj/item/reagent_containers/food/snacks/fortunecookie/cookie = ..(container) - var/obj/item/paper/paper = locate() in container - if (paper) - paper.forceMove(cookie) - cookie.trash = paper - paper.loc = null - return cookie - - -/datum/recipe/fortunecookie/check_items(obj/container) - . = ..() - if (.) - var/obj/item/paper/paper = locate() in container - if (!paper?.info) - return 0 - return . - - -/datum/recipe/plainsteak - items = list( - /obj/item/reagent_containers/food/snacks/meat - ) - result = /obj/item/reagent_containers/food/snacks/plainsteak - - -/datum/recipe/meatsteak - reagents = list( - /datum/reagent/sodiumchloride = 1, - /datum/reagent/blackpepper = 1 - ) - items = list( - /obj/item/reagent_containers/food/snacks/cutlet - ) - result = /obj/item/reagent_containers/food/snacks/meatsteak - - -/datum/recipe/loadedsteak - reagents = list( - /datum/reagent/nutriment/garlicsauce = 5 - ) - items = list( - /obj/item/reagent_containers/food/snacks/cutlet - ) - fruit = list( - "onion" = 1, - "mushroom" = 1 - ) - result = /obj/item/reagent_containers/food/snacks/loadedsteak - - -/datum/recipe/syntisteak - reagents = list( - /datum/reagent/sodiumchloride = 1, - /datum/reagent/blackpepper = 1 - ) - items = list( - /obj/item/reagent_containers/food/snacks/meat/syntiflesh - ) - result = /obj/item/reagent_containers/food/snacks/meatsteak/synthetic - - -/datum/recipe/pizzamargherita - items = list( - /obj/item/reagent_containers/food/snacks/sliceable/flatdough, - /obj/item/reagent_containers/food/snacks/cheesewedge, - /obj/item/reagent_containers/food/snacks/cheesewedge, - /obj/item/reagent_containers/food/snacks/cheesewedge - ) - fruit = list( - "tomato" = 1 - ) - result = /obj/item/reagent_containers/food/snacks/sliceable/pizza/margherita - - -/datum/recipe/meatpizza - items = list( - /obj/item/reagent_containers/food/snacks/sliceable/flatdough, - /obj/item/reagent_containers/food/snacks/cutlet, - /obj/item/reagent_containers/food/snacks/cutlet, - /obj/item/reagent_containers/food/snacks/cheesewedge - ) - fruit = list( - "tomato" = 1 - ) - result = /obj/item/reagent_containers/food/snacks/sliceable/pizza/meatpizza - - -/datum/recipe/mushroompizza - items = list( - /obj/item/reagent_containers/food/snacks/sliceable/flatdough, - /obj/item/reagent_containers/food/snacks/cheesewedge - ) - fruit = list( - "mushroom" = 5, - "tomato" = 1 - ) - result = /obj/item/reagent_containers/food/snacks/sliceable/pizza/mushroompizza - - -/datum/recipe/vegetablepizza - items = list( - /obj/item/reagent_containers/food/snacks/sliceable/flatdough, - /obj/item/reagent_containers/food/snacks/cheesewedge - ) - fruit = list( - "eggplant" = 1, - "carrot" = 1, - "corn" = 1, - "tomato" = 1 - ) - result = /obj/item/reagent_containers/food/snacks/sliceable/pizza/vegetablepizza - - -/datum/recipe/spacylibertyduff - reagents = list( - /datum/reagent/water = 10, - /datum/reagent/ethanol/vodka = 5, - /datum/reagent/psilocybin = 5 - ) - result = /obj/item/reagent_containers/food/snacks/spacylibertyduff - - -/datum/recipe/amanitajelly - reagents = list( - /datum/reagent/water = 10, - /datum/reagent/ethanol/vodka = 5, - /datum/reagent/toxin/amatoxin = 5 - ) - result = /obj/item/reagent_containers/food/snacks/amanitajelly - - -/datum/recipe/amanitajelly/make_food(obj/container) - var/obj/item/reagent_containers/food/snacks/amanitajelly/jelly = ..(container) - jelly.reagents.del_reagent(/datum/reagent/toxin/amatoxin) - return jelly - - -/datum/recipe/meatballsoup - reagents = list( - /datum/reagent/water = 10 - ) - items = list( - /obj/item/reagent_containers/food/snacks/meatball - ) - fruit = list( - "carrot" = 1, - "potato" = 1 - ) - result = /obj/item/reagent_containers/food/snacks/meatballsoup - -/datum/recipe/onionsoup - reagents = list( - /datum/reagent/water = 10 - ) - fruit = list( - "onion" = 2 - ) - result = /obj/item/reagent_containers/food/snacks/onionsoup - - -/datum/recipe/vegetablesoup - reagents = list( - /datum/reagent/water = 10 - ) - fruit = list( - "carrot" = 1, - "potato" = 1, - "corn" = 1, - "eggplant" = 1 - ) - result = /obj/item/reagent_containers/food/snacks/vegetablesoup - - -/datum/recipe/nettlesoup - reagents = list( - /datum/reagent/water = 10 - ) - items = list( - /obj/item/reagent_containers/food/snacks/egg - ) - fruit = list( - "nettle" = 1, - "potato" = 1 - ) - result = /obj/item/reagent_containers/food/snacks/nettlesoup - - -/datum/recipe/wishsoup - reagents = list( - /datum/reagent/water = 20 - ) - result= /obj/item/reagent_containers/food/snacks/wishsoup - - -/datum/recipe/hotchili - items = list( - /obj/item/reagent_containers/food/snacks/cutlet - ) - fruit = list( - "chili" = 1, - "tomato" = 1 - ) - result = /obj/item/reagent_containers/food/snacks/hotchili - - -/datum/recipe/coldchili - items = list( - /obj/item/reagent_containers/food/snacks/cutlet - ) - fruit = list( - "icechili" = 1, - "tomato" = 1 - ) - result = /obj/item/reagent_containers/food/snacks/coldchili - - -/datum/recipe/amanita_pie - reagents = list( - /datum/reagent/toxin/amatoxin = 5 - ) - items = list( - /obj/item/reagent_containers/food/snacks/sliceable/flatdough - ) - result = /obj/item/reagent_containers/food/snacks/amanita_pie - - -/datum/recipe/plump_pie - items = list( - /obj/item/reagent_containers/food/snacks/sliceable/flatdough - ) - fruit = list( - "plumphelmet" = 1 - ) - result = /obj/item/reagent_containers/food/snacks/plump_pie - - -/datum/recipe/spellburger - items = list( - /obj/item/reagent_containers/food/snacks/meatburger, - /obj/item/clothing/head/wizard - ) - result = /obj/item/reagent_containers/food/snacks/spellburger - - -/datum/recipe/bigbiteburger - items = list( - /obj/item/reagent_containers/food/snacks/meatburger, - /obj/item/reagent_containers/food/snacks/meat, - /obj/item/reagent_containers/food/snacks/meat, - /obj/item/reagent_containers/food/snacks/egg - ) - result = /obj/item/reagent_containers/food/snacks/bigbiteburger - - -/datum/recipe/enchiladas - items = list( - /obj/item/reagent_containers/food/snacks/cutlet - ) - fruit = list( - "chili" = 2, - "corn" = 1 - ) - result = /obj/item/reagent_containers/food/snacks/enchiladas - - -/datum/recipe/creamcheesebread - items = list( - /obj/item/reagent_containers/food/snacks/dough, - /obj/item/reagent_containers/food/snacks/dough, - /obj/item/reagent_containers/food/snacks/cheesewedge, - /obj/item/reagent_containers/food/snacks/cheesewedge - ) - result = /obj/item/reagent_containers/food/snacks/sliceable/creamcheesebread - - -/datum/recipe/monkeysdelight - reagents = list( - /datum/reagent/sodiumchloride = 1, - /datum/reagent/blackpepper = 1, - /datum/reagent/nutriment/flour = 10 - ) - items = list( - /obj/item/reagent_containers/food/snacks/monkeycube - ) - fruit = list( - "banana" = 1 - ) - result = /obj/item/reagent_containers/food/snacks/monkeysdelight - - -/datum/recipe/baguette - reagents = list( - /datum/reagent/sodiumchloride = 1, - /datum/reagent/blackpepper = 1 - ) - items = list( - /obj/item/reagent_containers/food/snacks/dough, - /obj/item/reagent_containers/food/snacks/dough - ) - result = /obj/item/reagent_containers/food/snacks/baguette - - -/datum/recipe/fishandchips - items = list( - /obj/item/reagent_containers/food/snacks/fries, - /obj/item/reagent_containers/food/snacks/fish - ) - result = /obj/item/reagent_containers/food/snacks/fishandchips - - -/datum/recipe/bread - items = list( - /obj/item/reagent_containers/food/snacks/dough, - /obj/item/reagent_containers/food/snacks/dough, - /obj/item/reagent_containers/food/snacks/egg - ) - result = /obj/item/reagent_containers/food/snacks/sliceable/bread - - -/datum/recipe/sandwich - items = list( - /obj/item/reagent_containers/food/snacks/meatsteak, - /obj/item/reagent_containers/food/snacks/slice/bread, - /obj/item/reagent_containers/food/snacks/slice/bread, - /obj/item/reagent_containers/food/snacks/cheesewedge - ) - result = /obj/item/reagent_containers/food/snacks/sandwich - - -/datum/recipe/toastedsandwich - items = list( - /obj/item/reagent_containers/food/snacks/sandwich - ) - result = /obj/item/reagent_containers/food/snacks/toastedsandwich - - -/datum/recipe/grilledcheese - items = list( - /obj/item/reagent_containers/food/snacks/slice/bread, - /obj/item/reagent_containers/food/snacks/slice/bread, - /obj/item/reagent_containers/food/snacks/cheesewedge - ) - result = /obj/item/reagent_containers/food/snacks/grilledcheese - - -/datum/recipe/tomatosoup - reagents = list( - /datum/reagent/water = 10 - ) - fruit = list( - "tomato" = 2 - ) - result = /obj/item/reagent_containers/food/snacks/tomatosoup - - -/datum/recipe/rofflewaffles - reagents = list( - /datum/reagent/psilocybin = 5, - /datum/reagent/nutriment/batter/cakebatter = 20 - ) - result = /obj/item/reagent_containers/food/snacks/rofflewaffles - - -/datum/recipe/stew - reagents = list( - /datum/reagent/water = 10 - ) - items = list( - /obj/item/reagent_containers/food/snacks/meat - ) - fruit = list( - "potato" = 1, - "tomato" = 1, - "carrot" = 1, - "eggplant" = 1, - "mushroom" = 1 - ) - result = /obj/item/reagent_containers/food/snacks/stew - - -/datum/recipe/slimetoast - reagents = list( - /datum/reagent/slimejelly = 5 - ) - items = list( - /obj/item/reagent_containers/food/snacks/slice/bread - ) - result = /obj/item/reagent_containers/food/snacks/jelliedtoast/slime - - -/datum/recipe/jelliedtoast - reagents = list( - /datum/reagent/nutriment/cherryjelly = 5 - ) - items = list( - /obj/item/reagent_containers/food/snacks/slice/bread - ) - result = /obj/item/reagent_containers/food/snacks/jelliedtoast/cherry - - -/datum/recipe/milosoup - reagents = list( - /datum/reagent/water = 10 - ) - items = list( - /obj/item/reagent_containers/food/snacks/soydope, - /obj/item/reagent_containers/food/snacks/soydope, - /obj/item/reagent_containers/food/snacks/tofu, - /obj/item/reagent_containers/food/snacks/tofu - ) - result = /obj/item/reagent_containers/food/snacks/milosoup - - -/datum/recipe/stewedsoymeat - items = list( - /obj/item/reagent_containers/food/snacks/soydope, - /obj/item/reagent_containers/food/snacks/soydope - ) - fruit = list( - "carrot" = 1, - "tomato" = 1 - ) - result = /obj/item/reagent_containers/food/snacks/stewedsoymeat - - -/datum/recipe/boiledspagetti - reagents = list( - /datum/reagent/water = 10 - ) - items = list( - /obj/item/reagent_containers/food/snacks/spagetti - ) - result = /obj/item/reagent_containers/food/snacks/boiledspagetti - - -/datum/recipe/boiledrice - reagents = list( - /datum/reagent/water = 10, - /datum/reagent/nutriment/rice = 10 - ) - result = /obj/item/reagent_containers/food/snacks/boiledrice - - -/datum/recipe/chazuke - reagents = list( - /datum/reagent/nutriment/rice/chazuke = 10 - ) - result = /obj/item/reagent_containers/food/snacks/boiledrice/chazuke - - -/datum/recipe/katsucurry - reagents = list( - /datum/reagent/water = 10, - /datum/reagent/nutriment/rice = 10, - /datum/reagent/nutriment/flour = 5 - ) - items = list( - /obj/item/reagent_containers/food/snacks/meat/chicken - ) - fruit = list( - "apple" = 1, - "carrot" = 1, - "potato" = 1 - ) - result = /obj/item/reagent_containers/food/snacks/katsucurry - - -/datum/recipe/ricepudding - reagents = list( - /datum/reagent/drink/milk = 5, - /datum/reagent/nutriment/rice = 10 - ) - result = /obj/item/reagent_containers/food/snacks/ricepudding - - -/datum/recipe/pastatomato - reagents = list( - /datum/reagent/water = 10 - ) - items = list( - /obj/item/reagent_containers/food/snacks/spagetti - ) - fruit = list( - "tomato" = 2 - ) - result = /obj/item/reagent_containers/food/snacks/pastatomato - - -/datum/recipe/poppypretzel - items = list( - /obj/item/reagent_containers/food/snacks/dough - ) - fruit = list( - "poppy" = 1 - ) - result = /obj/item/reagent_containers/food/snacks/poppypretzel - - -/datum/recipe/meatballspagetti - reagents = list( - /datum/reagent/water = 10 - ) - items = list( - /obj/item/reagent_containers/food/snacks/spagetti, - /obj/item/reagent_containers/food/snacks/meatball, - /obj/item/reagent_containers/food/snacks/meatball - ) - result = /obj/item/reagent_containers/food/snacks/meatballspagetti - - -/datum/recipe/spesslaw - reagents = list( - /datum/reagent/water = 10 - ) - items = list( - /obj/item/reagent_containers/food/snacks/spagetti, - /obj/item/reagent_containers/food/snacks/meatball, - /obj/item/reagent_containers/food/snacks/meatball, - /obj/item/reagent_containers/food/snacks/meatball, - /obj/item/reagent_containers/food/snacks/meatball - ) - result = /obj/item/reagent_containers/food/snacks/spesslaw - - -/datum/recipe/nanopasta - reagents = list( - /datum/reagent/water = 10 - ) - items = list( - /obj/item/reagent_containers/food/snacks/spagetti, - /obj/item/stack/nanopaste - ) - result = /obj/item/reagent_containers/food/snacks/nanopasta - - -/datum/recipe/superbiteburger - reagents = list( - /datum/reagent/sodiumchloride = 5, - /datum/reagent/blackpepper = 5 - ) - items = list( - /obj/item/reagent_containers/food/snacks/bigbiteburger, - /obj/item/reagent_containers/food/snacks/dough, - /obj/item/reagent_containers/food/snacks/meat, - /obj/item/reagent_containers/food/snacks/cheesewedge, - /obj/item/reagent_containers/food/snacks/boiledegg - ) - fruit = list( - "tomato" = 1 - ) - result = /obj/item/reagent_containers/food/snacks/superbiteburger - - -/datum/recipe/candiedapple - reagents = list( - /datum/reagent/water = 10, - /datum/reagent/sugar = 5 - ) - fruit = list( - "apple" = 1 - ) - result = /obj/item/reagent_containers/food/snacks/candiedapple - - -/datum/recipe/applepie - items = list( - /obj/item/reagent_containers/food/snacks/sliceable/flatdough - ) - fruit = list( - "apple" = 1 - ) - result = /obj/item/reagent_containers/food/snacks/applepie - - -/datum/recipe/slimeburger - reagents = list( - /datum/reagent/slimejelly = 5 - ) - items = list( - /obj/item/reagent_containers/food/snacks/bun - ) - result = /obj/item/reagent_containers/food/snacks/jellyburger/slime - - -/datum/recipe/jellyburger - reagents = list( - /datum/reagent/nutriment/cherryjelly = 5 - ) - items = list( - /obj/item/reagent_containers/food/snacks/bun - ) - result = /obj/item/reagent_containers/food/snacks/jellyburger/cherry - - -/datum/recipe/twobread - reagents = list( - /datum/reagent/ethanol/wine = 5 - ) - items = list( - /obj/item/reagent_containers/food/snacks/slice/bread, - /obj/item/reagent_containers/food/snacks/slice/bread - ) - result = /obj/item/reagent_containers/food/snacks/twobread - - -/datum/recipe/threebread - items = list( - /obj/item/reagent_containers/food/snacks/twobread, - /obj/item/reagent_containers/food/snacks/slice/bread - ) - result = /obj/item/reagent_containers/food/snacks/threebread - - -/datum/recipe/slimesandwich - reagents = list( - /datum/reagent/slimejelly = 5 - ) - items = list( - /obj/item/reagent_containers/food/snacks/slice/bread, - /obj/item/reagent_containers/food/snacks/slice/bread - ) - result = /obj/item/reagent_containers/food/snacks/jellysandwich/slime - - -/datum/recipe/cherrysandwich - reagents = list( - /datum/reagent/nutriment/cherryjelly = 5 - ) - items = list( - /obj/item/reagent_containers/food/snacks/slice/bread, - /obj/item/reagent_containers/food/snacks/slice/bread - ) - result = /obj/item/reagent_containers/food/snacks/jellysandwich/cherry - - -/datum/recipe/bloodsoup - reagents = list( - /datum/reagent/blood = 30 - ) - result = /obj/item/reagent_containers/food/snacks/bloodsoup - - -/datum/recipe/slimesoup - reagents = list( - /datum/reagent/water = 10, - /datum/reagent/slimejelly = 5 - ) - result = /obj/item/reagent_containers/food/snacks/slimesoup - - -/datum/recipe/boiledslimeextract - reagents = list( - /datum/reagent/water = 10 - ) - items = list( - /obj/item/slime_extract - ) - result = /obj/item/reagent_containers/food/snacks/boiledslimecore - - -/datum/recipe/chocolateegg - items = list( - /obj/item/reagent_containers/food/snacks/egg, - /obj/item/reagent_containers/food/snacks/chocolatebar - ) - result = /obj/item/reagent_containers/food/snacks/chocolateegg - - -/datum/recipe/sausage - items = list( - /obj/item/reagent_containers/food/snacks/rawmeatball, - /obj/item/reagent_containers/food/snacks/rawcutlet - ) - result = /obj/item/reagent_containers/food/snacks/sausage - - -/datum/recipe/fatsausage - reagents = list( - /datum/reagent/blackpepper = 2 - ) - items = list( - /obj/item/reagent_containers/food/snacks/rawmeatball, - /obj/item/reagent_containers/food/snacks/rawcutlet - ) - result = /obj/item/reagent_containers/food/snacks/fatsausage - - -/datum/recipe/fishfingers - reagents = list( - /datum/reagent/nutriment/flour = 10 - ) - items = list( - /obj/item/reagent_containers/food/snacks/egg, - /obj/item/reagent_containers/food/snacks/fish - ) - result = /obj/item/reagent_containers/food/snacks/fishfingers - - -/datum/recipe/mysterysoup - reagents = list( - /datum/reagent/water = 10 - ) - items = list( - /obj/item/reagent_containers/food/snacks/badrecipe, - /obj/item/reagent_containers/food/snacks/tofu, - /obj/item/reagent_containers/food/snacks/egg, - /obj/item/reagent_containers/food/snacks/cheesewedge - ) - result = /obj/item/reagent_containers/food/snacks/mysterysoup - - -/datum/recipe/pumpkinpie - reagents = list( - /datum/reagent/sugar = 5 - ) - items = list( - /obj/item/reagent_containers/food/snacks/sliceable/flatdough - ) - fruit = list( - "pumpkin" = 1 - ) - result = /obj/item/reagent_containers/food/snacks/sliceable/pumpkinpie - - -/datum/recipe/plumphelmetbiscuit - reagents = list( - /datum/reagent/nutriment/batter = 10 - ) - fruit = list( - "plumphelmet" = 1 - ) - result = /obj/item/reagent_containers/food/snacks/plumphelmetbiscuit - - -/datum/recipe/plumphelmetbiscuitvegan - reagents = list( - /datum/reagent/nutriment/flour = 10, - /datum/reagent/water = 10 - ) - fruit = list( - "plumphelmet" = 1 - ) - result = /obj/item/reagent_containers/food/snacks/plumphelmetbiscuit - - -/datum/recipe/mushroomsoup - reagents = list( - /datum/reagent/drink/milk = 10 - ) - fruit = list( - "mushroom" = 1 - ) - result = /obj/item/reagent_containers/food/snacks/mushroomsoup - - -/datum/recipe/chawanmushi - reagents = list( - /datum/reagent/water = 10, - /datum/reagent/nutriment/soysauce = 5 - ) - items = list( - /obj/item/reagent_containers/food/snacks/egg, - /obj/item/reagent_containers/food/snacks/egg - ) - fruit = list( - "mushroom" = 1 - ) - result = /obj/item/reagent_containers/food/snacks/chawanmushi - - -/datum/recipe/beetsoup - reagents = list( - /datum/reagent/water = 10 - ) - fruit = list( - "whitebeet" = 1, - "cabbage" = 1 - ) - result = /obj/item/reagent_containers/food/snacks/beetsoup - - -/datum/recipe/appletart - items = list( - /obj/item/reagent_containers/food/snacks/sliceable/flatdough - ) - fruit = list( - "goldapple" = 1 - ) - result = /obj/item/reagent_containers/food/snacks/appletart - - -/datum/recipe/tossedsalad - fruit = list( - "lettuce" = 2, - "tomato" = 1, - "carrot" = 1, - "apple" = 1 - ) - result = /obj/item/reagent_containers/food/snacks/tossedsalad - - -/datum/recipe/aesirsalad - fruit = list( - "goldapple" = 1, - "ambrosiadeus" = 1 - ) - result = /obj/item/reagent_containers/food/snacks/aesirsalad - - -/datum/recipe/validsalad - items = list( - /obj/item/reagent_containers/food/snacks/meatball - ) - fruit = list( - "potato" = 1, - "ambrosia" = 3 - ) - result = /obj/item/reagent_containers/food/snacks/validsalad - - -/datum/recipe/validsalad/make_food(obj/container) - var/obj/item/reagent_containers/food/snacks/validsalad/salad = ..(container) - salad.reagents.del_reagent(/datum/reagent/toxin) - return salad - - -/datum/recipe/cracker - reagents = list( - /datum/reagent/sodiumchloride = 1 - ) - items = list( - /obj/item/reagent_containers/food/snacks/doughslice - ) - result = /obj/item/reagent_containers/food/snacks/cracker - - -/datum/recipe/stuffing - reagents = list( - /datum/reagent/water = 10, - /datum/reagent/sodiumchloride = 1, - /datum/reagent/blackpepper = 1 - ) - items = list( - /obj/item/reagent_containers/food/snacks/sliceable/bread - ) - result = /obj/item/reagent_containers/food/snacks/stuffing - - -/datum/recipe/tofurkey - items = list( - /obj/item/reagent_containers/food/snacks/tofu, - /obj/item/reagent_containers/food/snacks/tofu, - /obj/item/reagent_containers/food/snacks/stuffing - ) - result = /obj/item/reagent_containers/food/snacks/tofurkey - - -/datum/recipe/taco - items = list( - /obj/item/reagent_containers/food/snacks/doughslice, - /obj/item/reagent_containers/food/snacks/cutlet, - /obj/item/reagent_containers/food/snacks/cheesewedge - ) - result = /obj/item/reagent_containers/food/snacks/taco - - -/datum/recipe/bun - items = list( - /obj/item/reagent_containers/food/snacks/dough - ) - result = /obj/item/reagent_containers/food/snacks/bun - - -/datum/recipe/flatbread - items = list( - /obj/item/reagent_containers/food/snacks/sliceable/flatdough - ) - result = /obj/item/reagent_containers/food/snacks/flatbread - - -/datum/recipe/meatball - items = list( - /obj/item/reagent_containers/food/snacks/rawmeatball - ) - result = /obj/item/reagent_containers/food/snacks/meatball - - -/datum/recipe/cutlet - items = list( - /obj/item/reagent_containers/food/snacks/rawcutlet - ) - result = /obj/item/reagent_containers/food/snacks/cutlet - -/datum/recipe/bacon - items = list( - /obj/item/reagent_containers/food/snacks/rawbacon - ) - result = /obj/item/reagent_containers/food/snacks/bacon - -/datum/recipe/fries - items = list( - /obj/item/reagent_containers/food/snacks/rawsticks - ) - result = /obj/item/reagent_containers/food/snacks/fries - - -/datum/recipe/onionrings - reagents = list( - /datum/reagent/nutriment/batter = 10 - ) - fruit = list( - "onion" = 1 - ) - result = /obj/item/reagent_containers/food/snacks/onionrings - - -/datum/recipe/mint - reagents = list( - /datum/reagent/sugar = 5, - /datum/reagent/frostoil = 5 - ) - result = /obj/item/reagent_containers/food/snacks/mint - - -/datum/recipe/cake - reagents = list( - /datum/reagent/nutriment/batter/cakebatter = 60 - ) - result = /obj/item/reagent_containers/food/snacks/sliceable/plaincake - - -/datum/recipe/cake/carrot - fruit = list( - "carrot" = 3 - ) - result = /obj/item/reagent_containers/food/snacks/sliceable/carrotcake - - -/datum/recipe/cake/cheese - items = list( - /obj/item/reagent_containers/food/snacks/cheesewedge, - /obj/item/reagent_containers/food/snacks/cheesewedge - ) - result = /obj/item/reagent_containers/food/snacks/sliceable/cheesecake - - -/datum/recipe/cake/orange - fruit = list( - "orange" = 1 - ) - result = /obj/item/reagent_containers/food/snacks/sliceable/orangecake - - -/datum/recipe/cake/lime - fruit = list( - "lime" = 1 - ) - result = /obj/item/reagent_containers/food/snacks/sliceable/limecake - - -/datum/recipe/cake/lemon - fruit = list( - "lemon" = 1 - ) - result = /obj/item/reagent_containers/food/snacks/sliceable/lemoncake - - -/datum/recipe/cake/chocolate - items = list( - /obj/item/reagent_containers/food/snacks/chocolatebar - ) - result = /obj/item/reagent_containers/food/snacks/sliceable/chocolatecake - - -/datum/recipe/cake/birthday - reagents = list( - /datum/reagent/nutriment/batter/cakebatter = 60, - /datum/reagent/nutriment/sprinkles = 10 - ) - result = /obj/item/reagent_containers/food/snacks/sliceable/birthdaycake - - -/datum/recipe/cake/apple - fruit = list( - "apple" = 2 - ) - result = /obj/item/reagent_containers/food/snacks/sliceable/applecake - - -/datum/recipe/cake/brain - items = list( - /obj/item/organ/internal/brain - ) - result = /obj/item/reagent_containers/food/snacks/sliceable/braincake - - -/datum/recipe/cake/chocolatebar - reagents = list( - /datum/reagent/drink/milk/chocolate = 10, - /datum/reagent/nutriment/coco = 5, - /datum/reagent/sugar = 5 - ) - result = /obj/item/reagent_containers/food/snacks/chocolatebar - - -/datum/recipe/boiledspiderleg - reagents = list( - /datum/reagent/water = 10 - ) - items = list( - /obj/item/reagent_containers/food/snacks/spider - ) - result = /obj/item/reagent_containers/food/snacks/spider/cooked diff --git a/code/modules/games/boardgame.dm b/code/modules/games/boardgame.dm deleted file mode 100644 index a65e4f5d388c1..0000000000000 --- a/code/modules/games/boardgame.dm +++ /dev/null @@ -1,227 +0,0 @@ -/obj/item/board - name = "board" - desc = "A standard 16\" checkerboard. Well used." //Goddamn imperial system. - icon = 'icons/obj/pieces.dmi' - icon_state = "board" - - var/num = 0 - var/board_icons = list() - var/board = list() - var/selected = -1 - -/obj/item/board/ShiftClick(mob/user) - if(CanPhysicallyInteract(user)) - user.set_machine(src) - interact(user) - else - ..() - -/obj/item/board/attack_hand(mob/living/carbon/human/M as mob) - if(M.machine == src) - return ..() - else - M.examinate(src) - -/obj/item/board/attackby(obj/item/I as obj, mob/user as mob) - if(!addPiece(I,user)) - ..() - -/obj/item/board/proc/addPiece(obj/item/I as obj, mob/user as mob, var/tile = 0) - if(I.w_class != ITEM_SIZE_TINY) //only small stuff - user.show_message("\The [I] is too big to be used as a board piece.") - return 0 - if(num == 64) - user.show_message("\The [src] is already full!") - return 0 - if(tile > 0 && board["[tile]"]) - user.show_message("That space is already filled!") - return 0 - if(!user.Adjacent(src)) - return 0 - if(!user.unEquip(I, src)) - return 0 - num++ - - - if(!board_icons["[I.icon] [I.icon_state]"]) - board_icons["[I.icon] [I.icon_state]"] = new /icon(I.icon,I.icon_state) - - if(tile == 0) - var i; - for(i=0;i<64;i++) - if(!board["[i]"]) - board["[i]"] = I - break - else - board["[tile]"] = I - - src.updateDialog() - - return 1 - - -/obj/item/board/interact(mob/user as mob) - if(user.is_physically_disabled() || (!isAI(user) && !user.Adjacent(src))) //can't see if you arent conscious. If you are not an AI you can't see it unless you are next to it, either. - close_browser(user, "window=boardgame") - user.unset_machine() - return - - var/list/dat = list({" - - "}) - var i, stagger - stagger = 0 //so we can have the checkerboard effect - for(i=0, i<64, i++) - if(i%8 == 0) - dat += "" - stagger = !stagger - if(selected == i) - dat += "\s*$/g,rb={option:[1,""],legend:[1,"
              ","
              "],area:[1,"",""],param:[1,"",""],thead:[1,"
              = 0 && !isobserver(user)) - dat += "
              Remove Selected Piece" - show_browser(user, jointext(dat, null),"window=boardgame;size=430x500") // 50px * 8 squares + 30 margin - onclose(usr, "boardgame") - -/obj/item/board/Topic(href, href_list) - if(!usr.Adjacent(src)) - usr.unset_machine() - close_browser(usr, "window=boardgame") - return - - if(!usr.incapacitated()) //you can't move pieces if you can't move - if(href_list["select"]) - var/s = href_list["select"] - var/obj/item/I = board["[s]"] - if(selected >= 0) - //check to see if clicked on tile is currently selected one - if(text2num(s) == selected) - selected = -1 //deselect it - else - - if(I) //cant put items on other items. - return - - //put item in new spot. - I = board["[selected]"] - board["[selected]"] = null - board -= "[selected]" - board -= null - board["[s]"] = I - selected = -1 - else - if(I) - selected = text2num(s) - else - var/mob/living/carbon/human/H = locate(href_list["person"]) - if(!istype(H)) - return - var/obj/item/O = H.get_active_hand() - if(!O) - return - addPiece(O,H,text2num(s)) - if(href_list["remove"]) - var/obj/item/I = board["[selected]"] - if(!I) - return - board["[selected]"] = null - board -= "[selected]" - board -= null - I.forceMove(src.loc) - num-- - selected = -1 - var j - for(j=0;j<64;j++) - if(board["[j]"]) - var/obj/item/K = board["[j]"] - if(K.icon == I.icon && cmptext(K.icon_state,I.icon_state)) - src.updateDialog() - return - //Didn't find it in use, remove it and allow GC to delete it. - board_icons["[I.icon] [I.icon_state]"] = null - board_icons -= "[I.icon] [I.icon_state]" - board_icons -= null - src.updateDialog() - -//Checkers - -/obj/item/reagent_containers/food/snacks/checker - name = "checker" - desc = "It is plastic and shiny." - icon = 'icons/obj/pieces.dmi' - icon_state = "checker_black" - w_class = ITEM_SIZE_TINY - center_of_mass = "x=16;y=16" - nutriment_desc = list("a choking hazard" = 4) - nutriment_amt = 1 - var/piece_color ="black" - -/obj/item/reagent_containers/food/snacks/checker/New() - ..() - icon_state = "[name]_[piece_color]" - name = "[piece_color] [name]" - -/obj/item/reagent_containers/food/snacks/checker/red - piece_color ="red" - -//Chess - -/obj/item/reagent_containers/food/snacks/checker/pawn - name = "pawn" - desc = "How many pawns will die in your war?" - -/obj/item/reagent_containers/food/snacks/checker/pawn/red - piece_color ="red" - -/obj/item/reagent_containers/food/snacks/checker/knight - name = "knight" - desc = "The piece chess deserves, and needs to actually play." - -/obj/item/reagent_containers/food/snacks/checker/knight/red - piece_color ="red" - -/obj/item/reagent_containers/food/snacks/checker/bishop - name = "bishop" - desc = "What corruption occured, urging holy men to fight?" - -/obj/item/reagent_containers/food/snacks/checker/bishop/red - piece_color ="red" - -/obj/item/reagent_containers/food/snacks/checker/rook - name = "rook" - desc = "Representing ancient moving towers. So powerful and fast they were banned from wars, forever." - -/obj/item/reagent_containers/food/snacks/checker/rook/red - piece_color ="red" - -/obj/item/reagent_containers/food/snacks/checker/queen - name = "queen" - desc = "A queen of battle and pain. She dances across the battlefield." - -/obj/item/reagent_containers/food/snacks/checker/queen/red - piece_color ="red" - -/obj/item/reagent_containers/food/snacks/checker/king - name = "king" - desc = "Why does a chess game end when the king dies?" - -/obj/item/reagent_containers/food/snacks/checker/king/red - piece_color ="red" \ No newline at end of file diff --git a/code/modules/games/cardemon.dm b/code/modules/games/cardemon.dm deleted file mode 100644 index 7f3933e156c6c..0000000000000 --- a/code/modules/games/cardemon.dm +++ /dev/null @@ -1,39 +0,0 @@ -/obj/item/pack/cardemon - name = "\improper Cardemon booster pack" - desc = "Finally! A children's card game in space!" - icon_state = "card_pack_cardemon" - -/obj/item/pack/cardemon/SetupCards() - var/datum/playingcard/P - var/i - for(i=0; i<6; i++) - var/element = pick("ire","spaghetti","meat","metal","money","brain") - var/stats = list("HP"=rand(1,15),"DP"=rand(1,15),"SP"=rand(1,15)) - var/rarity - if(prob(10)) - if(prob(5)) - if(prob(5)) - rarity = "Plasteel" - else - rarity = "Platinum" - else - rarity = "Silver" - - var/nam = pick("Death","Life","Plant","Leaf","Air","Earth","Fire","Water","Killer","Holy", "God", "Ordinary","Demon","Angel", "Phoron", "Mad", "Insane", "Metal", "Steel", "Secret") - var/nam2 = pick("Carp", "Corgi", "Cat", "Mouse", "Octopus", "Lizard", "Monkey", "Plant", "Duck", "Demon", "Spider", "Bird", "Shark", "Rock") - - P = new() - P.name = "[nam] [nam2] [stats["HP"]]/[stats["DP"]]/[stats["SP"]]" - P.card_icon = "card_cardemon" - if(rarity) - P.name = "[rarity] [P.name]" - P.card_icon += "_[rarity]" - P.back_icon = "card_back_cardemon" - P.desc = "Wow! A Cardemon card. Its element is: [element]. Its stats are: [stats["HP"]] HP, [stats["DP"]] DP, [stats["SP"]] SP" - cards += P - P = new() - P.name = "Cardemon Instructions" - P.card_icon = "card_cardemon_instructional" - P.back_icon = "card_back_cardemon" - P.desc = "How To Play Cardemon: every card has 3 stats and an Element. The first stat is Health, second is Damage, third is Speed. Each player plays two cards, and they attack in order of card speed on whichever target the owner selects. Discard cards with no health left over. Once every card has moved or died, a round has finished; you can replace fallen cards with new ones from your hand between rounds. Finally, elements: they do half damage to the one before it, and do double damage to the one after it: ire > spaghetti > metal > money > meat > brain > ire." - cards += P \ No newline at end of file diff --git a/code/modules/games/cards.dm b/code/modules/games/cards.dm deleted file mode 100644 index c5cc3652c7530..0000000000000 --- a/code/modules/games/cards.dm +++ /dev/null @@ -1,356 +0,0 @@ -/datum/playingcard - var/name = "playing card" - var/card_icon = "card_back" - var/back_icon = "card_back" - var/desc = "A regular old playing card." - -/datum/playingcard/proc/card_image(concealed, deck_icon) - return image(deck_icon, concealed ? back_icon : card_icon) - -/datum/playingcard/custom - var/use_custom_front = TRUE - var/use_custom_back = TRUE - -/datum/playingcard/custom/card_image(concealed, deck_icon) - if(concealed) - return image((src.use_custom_back ? CUSTOM_ITEM_OBJ : deck_icon), "[back_icon]") - else - return image((src.use_custom_front ? CUSTOM_ITEM_OBJ : deck_icon), "[card_icon]") - -/obj/item/deck - w_class = ITEM_SIZE_SMALL - icon = 'icons/obj/playing_cards.dmi' - var/list/cards = list() - -/obj/item/deck/inherit_custom_item_data(var/datum/custom_item/citem) - . = ..() - if(islist(citem.additional_data["extra_cards"])) - for(var/card_decl in citem.additional_data["extra_cards"]) - if(islist(card_decl)) - var/datum/playingcard/custom/P = new() - if(!isnull(card_decl["name"])) - P.name = card_decl["name"] - if(!isnull(card_decl["card_icon"])) - P.card_icon = card_decl["card_icon"] - if(!isnull(card_decl["back_icon"])) - P.back_icon = card_decl["back_icon"] - if(!isnull(card_decl["desc"])) - P.desc = card_decl["desc"] - if(!isnull(card_decl["use_custom_front"])) - P.use_custom_front = card_decl["use_custom_front"] - if(!isnull(card_decl["use_custom_back"])) - P.use_custom_back = card_decl["use_custom_back"] - cards += P - -/obj/item/deck/holder - name = "card box" - desc = "A small leather case to show how classy you are compared to everyone else." - icon_state = "card_holder" - -/obj/item/deck/cards - name = "deck of cards" - desc = "A simple deck of playing cards." - icon_state = "deck" - -/obj/item/deck/cards/New() - ..() - - var/datum/playingcard/P - for(var/suit in list("spades","clubs","diamonds","hearts")) - - var/colour - if(suit == "spades" || suit == "clubs") - colour = "black_" - else - colour = "red_" - - for(var/number in list("ace","two","three","four","five","six","seven","eight","nine","ten")) - P = new() - P.name = "[number] of [suit]" - P.card_icon = "[colour]num" - P.back_icon = "card_back" - cards += P - - for(var/number in list("jack","queen","king")) - P = new() - P.name = "[number] of [suit]" - P.card_icon = "[colour]col" - P.back_icon = "card_back" - cards += P - - - for(var/i = 0,i<2,i++) - P = new() - P.name = "joker" - P.card_icon = "joker" - cards += P - -/obj/item/deck/attackby(obj/O, mob/user) - if(istype(O,/obj/item/hand)) - var/obj/item/hand/H = O - for(var/datum/playingcard/P in H.cards) - cards += P - qdel(O) - to_chat(user, "You place your cards on the bottom of \the [src].") - return - ..() - -/obj/item/deck/verb/draw_card() - - set category = "Object" - set name = "Draw" - set desc = "Draw a card from a deck." - set src in view(1) - - if(usr.stat || !Adjacent(usr)) return - - if(!istype(usr,/mob/living/carbon)) - return - - var/mob/living/carbon/user = usr - - if(!cards.len) - to_chat(usr, "There are no cards in the deck.") - return - - var/obj/item/hand/H - if(user.l_hand && istype(user.l_hand,/obj/item/hand)) - H = user.l_hand - else if(user.r_hand && istype(user.r_hand,/obj/item/hand)) - H = user.r_hand - else - H = new(get_turf(src)) - user.put_in_hands(H) - - if(!H || !user) return - - var/datum/playingcard/P = cards[1] - H.cards += P - cards -= P - H.update_icon() - user.visible_message("\The [user] draws a card.") - to_chat(user, "It's the [P].") - -/obj/item/deck/verb/deal_card() - - set category = "Object" - set name = "Deal" - set desc = "Deal a card from a deck." - set src in view(1) - - if(usr.stat || !Adjacent(usr)) return - - if(!cards.len) - to_chat(usr, "There are no cards in the deck.") - return - - var/list/players = list() - for(var/mob/living/player in viewers(3)) - if(!player.stat) - players += player - //players -= usr - - var/mob/living/M = input("Who do you wish to deal a card?") as null|anything in players - if(!usr || !src || !M) return - - deal_at(usr, M) - -/obj/item/deck/proc/deal_at(mob/user, mob/target) - var/obj/item/hand/H = new(get_step(user, user.dir)) - - H.cards += cards[1] - cards -= cards[1] - H.concealed = 1 - H.update_icon() - if(user==target) - user.visible_message("\The [user] deals a card to \himself.") - else - user.visible_message("\The [user] deals a card to \the [target].") - H.throw_at(get_step(target,target.dir),10,1,user) - -/obj/item/hand/attackby(obj/O, mob/user) - if(istype(O,/obj/item/hand)) - var/obj/item/hand/H = O - for(var/datum/playingcard/P in cards) - H.cards += P - H.concealed = src.concealed - qdel(src) - H.update_icon() - return - ..() - -/obj/item/deck/attack_self(var/mob/user) - - cards = shuffle(cards) - user.visible_message("\The [user] shuffles [src].") - -/obj/item/deck/MouseDrop(atom/over) - if(!usr || !over) return - if(!Adjacent(usr) || !over.Adjacent(usr)) return // should stop you from dragging through windows - - if(!ishuman(over) || !(over in viewers(3))) return - - if(!cards.len) - to_chat(usr, "There are no cards in the deck.") - return - - deal_at(usr, over) - -/obj/item/pack - name = "card pack" - desc = "For those with disposible income." - - icon_state = "card_pack" - icon = 'icons/obj/playing_cards.dmi' - w_class = ITEM_SIZE_TINY - var/list/cards = list() - -/obj/item/pack/Initialize() - . = ..() - SetupCards() - -/obj/item/pack/proc/SetupCards() - return - -/obj/item/pack/attack_self(var/mob/user) - user.visible_message("[user] rips open \the [src]!") - var/obj/item/hand/H = new() - - H.cards += cards - cards.Cut(); - qdel(src) - - H.update_icon() - user.put_in_active_hand(H) - -/obj/item/hand - name = "hand of cards" - desc = "Some playing cards." - icon = 'icons/obj/playing_cards.dmi' - icon_state = "empty" - w_class = ITEM_SIZE_TINY - - var/concealed = 0 - var/list/datum/playingcard/cards = list() - -/obj/item/hand/attack_self(var/mob/user) - concealed = !concealed - update_icon() - user.visible_message("\The [user] [concealed ? "conceals" : "reveals"] their hand.") - -/obj/item/hand/attack_hand(mob/user) - if(src.loc == user) - // build the list of cards in the hand - var/list/to_discard = list() - for(var/datum/playingcard/P in cards) - to_discard[P.name] = P - var/discarding = null - //don't prompt if only 1 card - if(to_discard.len == 1) - discarding = to_discard[1] - else - discarding = input(user, "Which card do you wish to take?") as null|anything in to_discard - if(!discarding || !to_discard[discarding] || !CanPhysicallyInteract(user)) return - - var/datum/playingcard/card = to_discard[discarding] - var/obj/item/hand/new_hand = new(src.loc) - new_hand.cards += card - cards -= card - new_hand.concealed = 0 - new_hand.update_icon() - src.update_icon() - - if(!cards.len) - qdel(src) - - user.put_in_hands(new_hand) - else - . = ..() - -/obj/item/hand/examine(mob/user) - . = ..() - if((!concealed || src.loc == user) && cards.len) - to_chat(user, "It contains: ") - for(var/datum/playingcard/P in cards) - to_chat(user, "The [P.name].") - -/obj/item/hand/on_update_icon(var/direction = 0) - if(!cards.len) - qdel(src) - return - else if(cards.len > 1) - name = "hand of cards" - desc = "Some playing cards." - else if(concealed) - name = "single playing card" - desc = "An unknown playing card, concealed." - else - var/datum/playingcard/P = cards[1] - name = "[P.name]" - desc = "[P.desc]" - - overlays.Cut() - - if(cards.len == 1) - var/datum/playingcard/P = cards[1] - var/image/I = P.card_image(concealed, src.icon) - I.pixel_x += (-5+rand(10)) - I.pixel_y += (-5+rand(10)) - overlays += I - return - - var/offset = Floor(20/cards.len) - var/matrix/M = matrix() - M.Update( - rotation = (direction & EAST|WEST) ? 90 : 0, - offset_x = (direction == EAST) ? -2 : (direction == WEST) ? 3 : 0, - offset_y = direction == SOUTH ? 4 : 0 - ) - var/i = 0 - for(var/datum/playingcard/P in cards) - var/image/I = P.card_image(concealed, src.icon) - //I.pixel_x = origin+(offset*i) - switch(direction) - if(SOUTH) - I.pixel_x = 8-(offset*i) - if(WEST) - I.pixel_y = -6+(offset*i) - if(EAST) - I.pixel_y = 8-(offset*i) - else - I.pixel_x = -7+(offset*i) - I.SetTransform(others = M) - overlays += I - i++ - -/obj/item/hand/dropped(mob/user) - ..() - if(locate(/obj/structure/table, loc)) - src.update_icon(user.dir) - else - update_icon() - -/obj/item/hand/pickup(mob/user) - . = ..() - src.update_icon() - -/*** A special thing that steals a card from a deck, probably lost in maint somewhere. ***/ -/obj/item/hand/missing_card - name = "missing playing card" - -/obj/item/hand/missing_card/Initialize() - . = ..() - var/list/deck_list = list() - for(var/obj/item/deck/D in world) - if(isturf(D.loc)) //Decks hiding in inventories are safe. Respect the sanctity of loadout items. - deck_list += D - - if(deck_list.len) - var/obj/item/deck/the_deck = pick(deck_list) - var/datum/playingcard/the_card = length(the_deck.cards) ? pick(the_deck.cards) : null - - if(the_card) - cards += the_card - the_deck.cards -= the_card - concealed = pick(0,1) //Maybe up, maybe down. - update_icon() //Automatically qdels if no card can be found. diff --git a/code/modules/games/spaceball_cards.dm b/code/modules/games/spaceball_cards.dm deleted file mode 100644 index 0b282063fa2f8..0000000000000 --- a/code/modules/games/spaceball_cards.dm +++ /dev/null @@ -1,24 +0,0 @@ -/obj/item/pack/spaceball - name = "\improper Spaceball booster pack" - desc = "Officially licensed to take your money." - icon_state = "card_pack_spaceball" - -/obj/item/pack/spaceball/SetupCards() - var/datum/playingcard/P - var/i - for(i=0;i<5;i++) - P = new() - if(prob(1)) - P.name = "Spaceball Jones, [GLOB.using_map.game_year] Brickburn Galaxy Trekers" - P.desc = "An autographed Spaceball Jones card!!" - P.card_icon = "spaceball_jones" - else - var/language_type = pick(/datum/language/human,/datum/language/diona,/datum/language/unathi) - var/datum/language/L = new language_type() - var/team = pick("Brickburn Galaxy Trekers","Mars Rovers", "Qerrbalak Saints", "Moghes Rockets", "Ahdomai Lightening") - P.name = "[L.get_random_name(pick(MALE, FEMALE))], [GLOB.using_map.game_year - rand(0, 50)] [team]" - P.card_icon = "spaceball_standard" - P.desc = "A Spaceball playing card." - P.back_icon = "card_back_spaceball" - - cards += P \ No newline at end of file diff --git a/code/modules/games/tarot.dm b/code/modules/games/tarot.dm deleted file mode 100644 index 82d57a93f0ada..0000000000000 --- a/code/modules/games/tarot.dm +++ /dev/null @@ -1,41 +0,0 @@ -/* this is a playing card deck based off of the Rider-Waite Tarot Deck. -*/ - -/obj/item/deck/tarot - name = "deck of tarot cards" - desc = "For all your occult needs!" - icon_state = "deck_tarot" - -/obj/item/deck/tarot/New() - ..() - - var/datum/playingcard/P - for(var/name in list("Fool","Magician","High Priestess","Empress","Emperor","Hierophant","Lovers","Chariot","Strength","Hermit","Wheel of Fortune","Justice","Hanged Man","Death","Temperance","Devil","Tower","Star","Moon","Sun","Judgement","World")) - P = new() - P.name = "[name]" - P.card_icon = "tarot_major" - P.back_icon = "card_back_tarot" - P.desc = "Some sort of major tarot card." - cards += P - for(var/suit in list("wands","pentacles","cups","swords")) - - - for(var/number in list("ace","two","three","four","five","six","seven","eight","nine","ten","page","knight","queen","king")) - P = new() - P.name = "[number] of [suit]" - P.card_icon = "tarot_[suit]" - P.back_icon = "card_back_tarot" - P.desc = "A Rider-Waite tarot card." - cards += P - -/obj/item/deck/tarot/attack_self(var/mob/user as mob) - var/list/newcards = list() - while(cards.len) - var/datum/playingcard/P = pick(cards) - P.name = replacetext_char(P.name," reversed","") - if(prob(50)) - P.name += " reversed" - newcards += P - cards -= P - cards = newcards - user.visible_message("\The [user] shuffles [src].") \ No newline at end of file diff --git a/code/modules/genetics/side_effects.dm b/code/modules/genetics/side_effects.dm deleted file mode 100644 index 837180438d5f5..0000000000000 --- a/code/modules/genetics/side_effects.dm +++ /dev/null @@ -1,75 +0,0 @@ -/datum/genetics/side_effect - var/name // name of the side effect, to use as a header in the manual - var/symptom // description of the symptom of the side effect - var/treatment // description of the treatment of the side effect - var/effect // description of what happens when not treated - var/duration = 0 // delay between start() and finish() - -/datum/genetics/side_effect/proc/start(mob/living/carbon/human/H) - // start the side effect, this should give some cue as to what's happening, - // such as gasping. These cues need to be unique among side-effects. - -/datum/genetics/side_effect/proc/finish(mob/living/carbon/human/H) - // Finish the side-effect. This should first check whether the cure has been - // applied, and if not, cause bad things to happen. - -/datum/genetics/side_effect/proc/trigger_side_effect(mob/living/carbon/human/H) - if(ishuman(H)) - addtimer(CALLBACK(src, .proc/do_side_effect, H), 0) - -/datum/genetics/side_effect/proc/do_side_effect(mob/living/carbon/human/H) - var/tp = pick(typesof(/datum/genetics/side_effect) - /datum/genetics/side_effect) - var/datum/genetics/side_effect/S = new tp - - S.start(H) - addtimer(CALLBACK(H, /mob/proc/Weaken, rand(0, S.duration / 50)), 20) - sleep(S.duration) - H.SetWeakened(0) - S.finish(H) - - -/datum/genetics/side_effect/genetic_burn - name = "Genetic Burn" - symptom = "Subject's skin turns unusualy red." - treatment = "Inject small dose of dexalin." - effect = "Subject's skin burns." - duration = 30 SECONDS - -/datum/genetics/side_effect/genetic_burn/start(mob/living/carbon/human/H) - H.visible_message("\The [H] starts turning very red...") - -/datum/genetics/side_effect/genetic_burn/finish(mob/living/carbon/human/H) - if(!H.reagents.has_reagent(/datum/reagent/dexalin)) - for(var/organ_name in BP_ALL_LIMBS) - var/obj/item/organ/external/E = H.get_organ(organ_name) - E.take_external_damage(0, 5, 0) - -/datum/genetics/side_effect/bone_snap - name = "Bone Snap" - symptom = "Subject's limbs tremble notably." - treatment = "Inject small dose of bicaridine." - effect = "Subject's bone breaks." - duration = 1 MINUTE - -/datum/genetics/side_effect/bone_snap/start(mob/living/carbon/human/H) - H.visible_message("\The [H]'s limbs start shivering uncontrollably.") -/datum/genetics/side_effect/bone_snap/finish(mob/living/carbon/human/H) - if(!H.reagents.has_reagent(/datum/reagent/bicaridine)) - var/organ_name = pick(BP_ALL_LIMBS) - var/obj/item/organ/external/E = H.get_organ(organ_name) - E.take_external_damage(20, 0, 0) - E.fracture() - -/datum/genetics/side_effect/confuse - name = "Confuse" - symptom = "Subject starts drooling uncontrollably." - treatment = "Inject small dose of dylovene." - effect = "Subject becomes confused." - duration = 30 SECONDS - -/datum/genetics/side_effect/confuse/start(mob/living/carbon/human/H) - H.visible_message("\The [H] drools.") - -/datum/genetics/side_effect/confuse/finish(mob/living/carbon/human/H) - if(!H.reagents.has_reagent(/datum/reagent/dylovene)) - H.confused += 100 diff --git a/code/modules/ghosttrap/trap.dm b/code/modules/ghosttrap/trap.dm deleted file mode 100644 index 2f8080841bd2c..0000000000000 --- a/code/modules/ghosttrap/trap.dm +++ /dev/null @@ -1,269 +0,0 @@ -// This system is used to grab a ghost from observers with the required preferences -// and lack of bans set. See posibrain.dm for an example of how they are called/used. - -var/global/list/ghost_traps - -/proc/get_ghost_trap(var/trap_key) - if(!ghost_traps) - populate_ghost_traps() - return ghost_traps[trap_key] - -/proc/get_ghost_traps() - if(!ghost_traps) - populate_ghost_traps() - return ghost_traps - -/proc/populate_ghost_traps() - ghost_traps = list() - for(var/traptype in typesof(/datum/ghosttrap)) - var/datum/ghosttrap/G = new traptype - ghost_traps[G.object] = G - -/datum/ghosttrap - var/object = "default ghost trap" - var/minutes_since_death = 0 // If non-zero the ghost must have been dead for this many minutes to be allowed to spawn - var/list/ban_checks = list() - var/ghost_trap_message = "They are no longer a ghost." - var/ghost_trap_role = "default ghost trap" - var/can_set_own_name = TRUE - - var/list/request_timeouts - var/datum/species/species_whitelist // If defined, this is the species whitelist required to join - -/datum/ghosttrap/New() - request_timeouts = list() - ..() - -// Check for bans, proper atom types, etc. -/datum/ghosttrap/proc/assess_candidate(var/mob/observer/ghost/candidate, var/mob/target, var/feedback = TRUE) - if(!candidate.MayRespawn(feedback, minutes_since_death)) - return FALSE - - if(request_timeouts[target] && world.time > request_timeouts[target]) - if (feedback) - to_chat(candidate, "This occupation request is no longer valid.") - return FALSE - - if(target.key) - if (feedback) - to_chat(candidate, "The target is already occupied.") - return FALSE - - if(islist(ban_checks)) - for(var/bantype in ban_checks) - if(jobban_isbanned(candidate, "[bantype]")) - if(feedback) - to_chat(candidate, "You are banned from one or more required roles and hence cannot enter play as \a [object].") - return FALSE - - if (!assess_whitelist(candidate)) - if (feedback) - var/datum/species/S = new species_whitelist() - to_chat(candidate, "You require \a [S] whitelist to play as \a [object].") - return FALSE - return TRUE - -/datum/ghosttrap/proc/assess_whitelist(mob/candidate) - . = TRUE - if (!species_whitelist) - return - var/datum/species/S = new species_whitelist() - if (!is_alien_whitelisted(candidate, S)) - . = FALSE - -// Print a message to all ghosts with the right prefs/lack of bans. -/datum/ghosttrap/proc/request_player(var/mob/target, var/request_string, var/request_timeout) - if(request_timeout) - request_timeouts[target] = world.time + request_timeout - GLOB.destroyed_event.register(target, src, /datum/ghosttrap/proc/unregister_target) - else - unregister_target(target) - - for(var/mob/observer/ghost/O in GLOB.player_list) - if(!assess_candidate(O, target, FALSE)) - continue - if(O.client) - to_chat(O, "[request_string] (Occupy) ([ghost_follow_link(target, O)])") - -/datum/ghosttrap/proc/unregister_target(var/target) - request_timeouts -= target - GLOB.destroyed_event.unregister(target, src, /datum/ghosttrap/proc/unregister_target) - -// Handles a response to request_player(). -/datum/ghosttrap/Topic(href, href_list) - if(..()) - return TRUE - if(href_list["candidate"] && href_list["target"]) - var/mob/observer/ghost/candidate = locate(href_list["candidate"]) // BYOND magic. - var/mob/target = locate(href_list["target"]) // So much BYOND magic. - if(!target || !candidate) - return - if(candidate != usr) - return - if(!assess_candidate(candidate, target)) - return - // Modal yes/no alert to guard misclicks - if(alert("Would you like to occupy \a [object]?", "Occupy", "Yes", "No") != "Yes") - return - transfer_personality(candidate,target) - return TRUE - -// Shunts the ckey/mind into the target mob. -/datum/ghosttrap/proc/transfer_personality(var/mob/candidate, var/mob/target) - if(!assess_candidate(candidate, target)) - return FALSE - target.ckey = candidate.ckey - if(target.mind) - target.mind.reset() - target.mind.assigned_role = "[ghost_trap_role]" - announce_ghost_joinleave(candidate, 0, "[ghost_trap_message]") - welcome_candidate(target) - set_new_name(target) - return TRUE - -/datum/ghosttrap/proc/welcome_candidate(var/mob/target) - return - -// Allows people to set their own name. -/datum/ghosttrap/proc/set_new_name(var/mob/target) - if (can_set_own_name) - var/newname = sanitizeSafe(input(target, "Enter a name, or leave blank for the default name.", "Name change", target.real_name) as text, MAX_NAME_LEN) - if (newname) - target.real_name = newname - target.SetName(target.real_name) - return TRUE - return FALSE - -/******************** -* Positronic Brains * -*********************/ -/datum/ghosttrap/positronic - object = "positronic brain" - ban_checks = list("AI","Robot") - ghost_trap_message = "They are occupying a positronic brain now." - ghost_trap_role = "Positronic Brain" - -/datum/ghosttrap/positronic/welcome_candidate(mob/target) - to_chat(target, SPAN_BOLD("You are a positronic brain, activated on [station_name()].")) - to_chat(target, "As a newborn synthetic intelligence, you answer to everyone, including the AI.") - to_chat(target, "Remember, the purpose of your existence is to learn and serve the one who activated you.") - to_chat(target, "Use say [target.get_language_prefix()]b to speak to other artificial intelligences.\n") - var/obj/item/organ/internal/posibrain/P = target.loc - if (!istype(P)) - return - P.visible_message(SPAN_ITALIC("The [P] chimes quietly."), range = 3) - deltimer(P.searching) - P.searching = TIMER_ID_NULL - P.update_icon() - -/datum/ghosttrap/positronic/set_new_name(mob/target) - . = ..() - var/obj/item/organ/internal/posibrain/P = target.loc - if (!istype(P)) - return - P.UpdateNames() - -/*********************************** -* Diona pods and walking mushrooms * -***********************************/ -/datum/ghosttrap/plant - object = "living plant" - ban_checks = list("Dionaea") - ghost_trap_message = "They are occupying a living plant now." - ghost_trap_role = "Plant" - species_whitelist = /datum/species/diona - -/datum/ghosttrap/plant/welcome_candidate(var/mob/target) - to_chat(target, "You awaken slowly, stirring into sluggish motion as the air caresses you.") - // This is a hack, replace with some kind of species blurb proc. - if(istype(target,/mob/living/carbon/alien/diona)) - to_chat(target, "You are \a [target], one of a race of drifting interstellar plantlike creatures that sometimes share their seeds with human traders.") - to_chat(target, "Too much darkness will send you into shock and starve you, but light will help you heal.") -/***************** -* Cortical Borer * -*****************/ -/datum/ghosttrap/borer - object = "cortical borer" - ban_checks = list(MODE_BORER) - ghost_trap_message = "They are occupying a borer now." - ghost_trap_role = "Cortical Borer" - can_set_own_name = FALSE - -/datum/ghosttrap/borer/welcome_candidate(var/mob/target) - to_chat(target, "You are a cortical borer! 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(target, "You can speak to your victim with say, to other borers with say [target.get_language_prefix()]x, and use your Abilities tab to access powers.") -/******************** -* Maintenance Drone * -*********************/ -/datum/ghosttrap/drone - object = "maintenance drone" - ghost_trap_message = "They are occupying a maintenance drone now." - ghost_trap_role = "Maintenance Drone" - can_set_own_name = FALSE - -/datum/ghosttrap/drone/New() - minutes_since_death = DRONE_SPAWN_DELAY - ..() - -/datum/ghosttrap/drone/assess_candidate(var/mob/observer/ghost/candidate, var/mob/target) - . = ..() - if(. && !target.can_be_possessed_by(candidate)) - return FALSE - -/datum/ghosttrap/drone/transfer_personality(var/mob/candidate, var/mob/living/silicon/robot/drone/drone) - if(!assess_candidate(candidate)) - return FALSE - drone.transfer_personality(candidate.client) - -/************** -* personal AI * -**************/ -/datum/ghosttrap/pai - object = "pAI" - ghost_trap_message = "They are occupying a pAI now." - ghost_trap_role = "pAI" - -/datum/ghosttrap/pai/assess_candidate(var/mob/observer/ghost/candidate, var/mob/target) - return FALSE - -/datum/ghosttrap/pai/transfer_personality(var/mob/candidate, var/mob/living/silicon/robot/drone/drone) - return FALSE - -/****************** -* Wizard Familiar * -******************/ -/datum/ghosttrap/familiar - object = "wizard familiar" - ghost_trap_message = "They are occupying a familiar now." - ghost_trap_role = "Wizard Familiar" - ban_checks = list(MODE_WIZARD) - -/datum/ghosttrap/familiar/welcome_candidate(var/mob/target) - return FALSE - -/datum/ghosttrap/cult - object = "cultist" - ban_checks = list("cultist") - can_set_own_name = FALSE - ghost_trap_message = "They are occupying a cultist's body now." - ghost_trap_role = "Cultist" - -/datum/ghosttrap/cult/welcome_candidate(var/mob/target) - var/obj/item/device/soulstone/S = target.loc - if(istype(S)) - switch (S.owner_flag) - if (SOULSTONE_OWNER_CULT) - GLOB.cult.add_antagonist(target.mind) - to_chat(target, "Remember, you serve the one who summoned you first, and the cult second.") - if (SOULSTONE_OWNER_WIZARD) - to_chat(target, "Remember, you only serve the wizard who summoned you.") - else - to_chat(target, "This soultone has been purified. You do not belong to the cult.") - to_chat(target, "Remember, you only serve the one who summoned you.") - -/datum/ghosttrap/cult/shade - object = "soul stone" - ghost_trap_message = "They are occupying a soul stone now." - ghost_trap_role = "Shade" diff --git a/code/modules/goals/_goal.dm b/code/modules/goals/_goal.dm deleted file mode 100644 index 8a7b1262e2c6d..0000000000000 --- a/code/modules/goals/_goal.dm +++ /dev/null @@ -1,64 +0,0 @@ -/datum/goal - var/description - var/owner - var/completion_message - var/failure_message - var/can_reroll = TRUE - var/can_abandon = TRUE - -/datum/goal/New(var/_owner) - owner = _owner - GLOB.destroyed_event.register(owner, src, /datum/proc/qdel_self) - if(istype(owner, /datum/mind)) - var/datum/mind/mind = owner - LAZYADD(mind.goals, src) - update_strings() - -/datum/goal/Destroy() - GLOB.destroyed_event.unregister(owner, src) - if(owner) - if(istype(owner, /datum/mind)) - var/datum/mind/mind = owner - LAZYREMOVE(mind.goals, src) - owner = null - . = ..() - -/datum/goal/proc/summarize(var/show_success = FALSE, var/allow_modification = FALSE, var/mob/caller) - . = "[description][get_summary_value()]" - if(show_success) - . += get_success_string() - if(allow_modification) - if(can_abandon) . += " (Abandon)" - if(can_reroll) . += " (Reroll)" - -/datum/goal/proc/get_success_string() - return check_success() ? " Success!" : " Failure." - -/datum/goal/proc/get_summary_value() - return - -/datum/goal/proc/update_strings() - return - -/datum/goal/proc/update_progress(var/progress) - return - -/datum/goal/proc/check_success() - return TRUE - -/datum/goal/proc/try_initialize() - return TRUE - -/datum/goal/proc/on_completion() - if(completion_message && check_success()) - if(istype(owner, /datum/mind)) - var/datum/mind/mind = owner - to_chat(mind.current, "[completion_message]") - -/datum/goal/proc/on_failure() - if(failure_message && !check_success() && istype(owner, /datum/mind)) - var/datum/mind/mind = owner - to_chat(mind.current, SPAN_DANGER(failure_message)) - -/datum/goal/proc/is_valid() - return TRUE diff --git a/code/modules/goals/definitions/department.dm b/code/modules/goals/definitions/department.dm deleted file mode 100644 index 40f3ce685da47..0000000000000 --- a/code/modules/goals/definitions/department.dm +++ /dev/null @@ -1,3 +0,0 @@ -/datum/goal/department - can_abandon = FALSE - can_reroll = FALSE diff --git a/code/modules/goals/definitions/department_clerical.dm b/code/modules/goals/definitions/department_clerical.dm deleted file mode 100644 index e55f57b184989..0000000000000 --- a/code/modules/goals/definitions/department_clerical.dm +++ /dev/null @@ -1,143 +0,0 @@ -/datum/goal/department/paperwork - var/generated_paperwork = FALSE - var/waiting_for_signatories_description = "Wait for %STAFF% to arrive and have them sign %PAPERWORK%." - var/obj/item/paperwork/paperwork_instance - var/paperwork_type - var/list/paperwork_types = list(/obj/item/paperwork) - var/list/signatory_job_list = list(/datum/job) - var/min_signatories = 1 - var/max_signatories = 1 - -/datum/goal/department/paperwork/New() - SSgoals.pending_goals |= src - var/list/signatory_job_titles = list() - for(var/job_type in signatory_job_list) - var/datum/job/job = job_type - signatory_job_titles |= "[initial(job.total_positions) == 1 ? "the" : "a"] [initial(job.title)]" - waiting_for_signatories_description = replacetext_char(waiting_for_signatories_description, "%STAFF%", english_list(signatory_job_titles, and_text = " or ")) - if(!length(paperwork_types)) - crash_with("Paperwork goal [type] initialized with no available paperwork types!") - SSgoals.pending_goals -= src - return - paperwork_type = pick(paperwork_types) - var/obj/item/paperwork/paperwork_type_obj = paperwork_type - waiting_for_signatories_description = replacetext_char(waiting_for_signatories_description, "%PAPERWORK%", "\the [initial(paperwork_type_obj.name)]") - - ..() - -/datum/goal/department/paperwork/proc/get_spawn_turfs() - return - -/datum/goal/department/paperwork/proc/get_end_areas() - return - -/datum/goal/department/paperwork/try_initialize() - - var/list/start_candidates = get_spawn_turfs() - if(!length(start_candidates)) - crash_with("Paperwork goal [type] initialized with no spawn landmarks mapped!") - SSgoals.pending_goals -= src - return FALSE - - var/list/end_candidates = get_end_areas() - if(!length(end_candidates)) - crash_with("Paperwork goal [type] initialized with no end landmarks mapped!") - SSgoals.pending_goals -= src - return FALSE - - var/list/signatories = generate_signatory_list() - if(length(signatories) < min_signatories) - return FALSE - shuffle(signatories) - signatories.Cut(1, max_signatories) - - paperwork_instance = new paperwork_type(pick(start_candidates)) - paperwork_instance.associated_goal = src - paperwork_instance.must_end_round_in_area = pick(end_candidates) - paperwork_instance.all_signatories = signatories - paperwork_instance.needs_signed = paperwork_instance.all_signatories.Copy() - generated_paperwork = TRUE - update_strings() - return TRUE - -/datum/goal/department/paperwork/proc/generate_signatory_list() - . = list() - for(var/mob/M in GLOB.living_mob_list_) - if(!M.mind?.assigned_job) - continue - for(var/job_type in signatory_job_list) - if(istype(M.mind.assigned_job, job_type)) - . |= M.real_name - break - -/datum/goal/department/paperwork/update_strings() - if(!generated_paperwork) - description = waiting_for_signatories_description - else if(QDELETED(paperwork_instance)) - var/obj/item/paperwork/paperwork_type_obj = paperwork_type - description = "\The [initial(paperwork_type_obj.name)] has been destroyed." - else if(length(paperwork_instance.needs_signed)) - description = "Have \the [paperwork_instance] signed by [english_list(paperwork_instance.all_signatories)]." - else - description = "File the completed [paperwork_instance.name] in \the [paperwork_instance.must_end_round_in_area] by the end of the shift." - -/datum/goal/department/paperwork/check_success() - if(!generated_paperwork) - return TRUE - . = !QDELETED(paperwork_instance) - if(.) - var/turf/T = get_turf(paperwork_instance) - if(!istype(T)) - return FALSE - var/area/A = get_area(T) - if(!istype(A)) - return FALSE - return !length(paperwork_instance.needs_signed) && (A == paperwork_instance.must_end_round_in_area) - -/obj/item/paperwork - name = "paperwork" - gender = PLURAL - desc = "This densely typed sheaf of documents is filled with legalese and jargon. You can't make heads or tails of them." - icon = 'icons/obj/goal_paperwork.dmi' - icon_state = "generic" - - var/datum/goal/department/paperwork/associated_goal - var/list/all_signatories - var/list/needs_signed - var/list/has_signed - var/area/must_end_round_in_area - -/obj/item/paperwork/Destroy() - if(associated_goal) - if(associated_goal.paperwork_instance == src) - associated_goal.paperwork_instance = null - associated_goal.update_strings() - associated_goal = null - . = ..() - -/obj/item/paperwork/on_update_icon() - icon_state = "[icon_state][length(has_signed) || ""]" - -/obj/item/paperwork/examine(mob/user, distance) - . = ..() - if(distance <= 1) - if(length(needs_signed)) - to_chat(user, SPAN_WARNING("It needs [length(needs_signed)] more signature\s before it can be filed: [english_list(needs_signed)].")) - if(length(has_signed)) - to_chat(user, SPAN_NOTICE("It has been signed by: [english_list(has_signed)].")) - -/obj/item/paperwork/attackby(obj/item/W, mob/user) - if(istype(W, /obj/item/pen)) - if(user.real_name in has_signed) - to_chat(user, SPAN_WARNING("You have already signed \the [src].")) - return - if(!(user.real_name in needs_signed)) - to_chat(user, SPAN_WARNING("You can't see anywhere on \the [src] for you to sign; it doesn't need your signature.")) - return - LAZYADD(has_signed, user.real_name) - LAZYREMOVE(needs_signed, user.real_name) - user.visible_message(SPAN_NOTICE("\The [user] signs \the [src] with \the [W].")) - associated_goal?.update_strings() - update_icon() - return TRUE - . = ..() diff --git a/code/modules/goals/definitions/department_engineering.dm b/code/modules/goals/definitions/department_engineering.dm deleted file mode 100644 index 78232ee250a29..0000000000000 --- a/code/modules/goals/definitions/department_engineering.dm +++ /dev/null @@ -1,3 +0,0 @@ -// End the shift with X watts or more in the Torch power grid -// End the shift without the SM going below x% integrity. -// Bring the SM to EER X without becoming unstable. \ No newline at end of file diff --git a/code/modules/goals/definitions/department_medical.dm b/code/modules/goals/definitions/department_medical.dm deleted file mode 100644 index 2188f05a2020a..0000000000000 --- a/code/modules/goals/definitions/department_medical.dm +++ /dev/null @@ -1,28 +0,0 @@ -/datum/department/medbay - name = "Medbay" - flag = MED - goals = list( - /datum/goal/department/medical_fatalities - ) - -/datum/goal/department/medical_fatalities - var/max_fatalities - -/datum/goal/department/medical_fatalities/New() - max_fatalities = rand(3,5) - ..() - -/datum/goal/department/medical_fatalities/update_strings() - description = "Avoid having more than [max_fatalities] [max_fatalities == 1 ? "fatality" : "fatalities"] this shift." - -/datum/goal/department/medical_fatalities/get_summary_value() - return " ([GLOB.crew_death_count] death\s so far)" - -/datum/goal/department/medical_fatalities/check_success() - return GLOB.crew_death_count <= max_fatalities - - - - -// End the shift with % suit sensors set to at least trackers -// Perform an autopsy diff --git a/code/modules/goals/definitions/department_science.dm b/code/modules/goals/definitions/department_science.dm deleted file mode 100644 index f57ed136190f7..0000000000000 --- a/code/modules/goals/definitions/department_science.dm +++ /dev/null @@ -1,32 +0,0 @@ - - -/datum/department/science - name = "Science" - flag = SCI - goals = list(/datum/goal/department/extract_slime_cores) - -/datum/goal/department/extract_slime_cores - var/min_cores - -/datum/goal/department/extract_slime_cores/New() - min_cores = rand(7,20) - ..() - -/datum/goal/department/extract_slime_cores/update_strings() - description = "Extract at least [min_cores] slime core\s this shift." - -/datum/goal/department/extract_slime_cores/get_summary_value() - return " ([GLOB.extracted_slime_cores_amount] core\s extracted so far)" - -/datum/goal/department/extract_slime_cores/check_success() - return (GLOB.extracted_slime_cores_amount >= min_cores) - -// Personal: - // xenobio: finish a round without being attacked by a slime - // explorer: name an alien species, plant a flag on an undiscovered world - -/datum/goal/achievement/notslimefodder - success = TRUE - failable = TRUE - description = "You're feeling extra careful today. Don't let a slime snack on you." - failure_message = "You feel sticky and miserable." diff --git a/code/modules/goals/definitions/personal.dm b/code/modules/goals/definitions/personal.dm deleted file mode 100644 index 1b2abee0833ed..0000000000000 --- a/code/modules/goals/definitions/personal.dm +++ /dev/null @@ -1,93 +0,0 @@ -/datum/goal/clean - completion_message = "Things are looking a lot nicer now." - var/cleaned = 0 - var/need_cleaned - -/datum/goal/clean/New() - need_cleaned = rand(10,20) - ..() - -/datum/goal/clean/update_strings() - description = "This place is disgusting. Scrub out at least [need_cleaned] [need_cleaned == 1 ? "mess" : "messes"] with soap." - -/datum/goal/clean/check_success() - return (cleaned >= need_cleaned) - -/datum/goal/clean/update_progress(var/progress) - if(cleaned < need_cleaned) - cleaned += progress - if(cleaned >= need_cleaned) - on_completion() - -/datum/goal/clean/get_summary_value() - return " ([cleaned]/[need_cleaned] so far)" - -/datum/goal/money - var/target_amount - -/datum/goal/money/update_strings() - target_amount = rand(100, 200) - var/datum/mind/mind = owner - for(var/datum/money_account/acct in all_money_accounts) - if(acct.owner_name == mind.current.real_name) - target_amount = acct.get_balance() * rand(2,3) - break - description = "End the round with bank balance higher than $[target_amount]." - -/datum/goal/money/check_success() - var/datum/mind/mind = owner - for(var/datum/money_account/acct in all_money_accounts) - if(acct.owner_name == mind.current.real_name) - return acct.get_balance() > target_amount - return FALSE - -//Fitness Personal Goal -//Weights -/datum/goal/weights - completion_message = "Yeah! Get Swole!" - var/reps = 0 - var/need_reps - -/datum/goal/weights/New() - need_reps = rand(10,80) - ..() - -/datum/goal/weights/update_strings() - description = "Head to the gym and lift some weights on the weightlifting machine." - -/datum/goal/weights/check_success() - return (reps >= need_reps) - -/datum/goal/weights/update_progress(var/progress) - if(reps < need_reps) - reps += progress - if(reps >= need_reps) - on_completion() - -/datum/goal/weights/get_summary_value() - return " ([reps]/[need_reps] reps so far)" - -//PunchingBag -/datum/goal/punchingbag - completion_message = "Finally let all that anger out? Good." - var/hits = 0 - var/need_hits - -/datum/goal/punchingbag/New() - need_hits = rand(30,120) - ..() - -/datum/goal/punchingbag/update_strings() - description = "Need to hit something really bad? Maybe you shoud hit the punching bag in the gym." - -/datum/goal/punchingbag/check_success() - return (hits >= need_hits) - -/datum/goal/punchingbag/update_progress(var/progress) - if(hits < need_hits) - hits += progress - if(hits >= need_hits) - on_completion() - -/datum/goal/punchingbag/get_summary_value() - return " ([hits]/[need_hits] hits so far)" diff --git a/code/modules/goals/definitions/personal_achievement.dm b/code/modules/goals/definitions/personal_achievement.dm deleted file mode 100644 index 438ad62507779..0000000000000 --- a/code/modules/goals/definitions/personal_achievement.dm +++ /dev/null @@ -1,36 +0,0 @@ -// Simple toggles. Get an input from somewhere in the code, marked -// as successful/unsuccessful for the rest of the round. Nothing very special. -/datum/goal/achievement - var/failable = FALSE - var/success = FALSE - -/datum/goal/achievement/update_progress(var/progress) - if(!success && !failable) - success = progress - on_completion() - else if (success && failable) - success = progress - on_failure() - -/datum/goal/achievement/check_success() - return success - -/datum/goal/achievement/fistfight - description = "You're feeling antsy. Blow off some steam in a fistfight." - completion_message = "You feel less like you want to punch someone." - -/datum/goal/achievement/givehug - description = "Give someone a hug." - completion_message = "You made someone's day a little brighter." - -/datum/goal/achievement/gethug - description = "Receive a hug." - completion_message = "Someone made your day a little brighter." - -/datum/goal/achievement/graffiti - description = "Screw the rules! Graffiti something!" - completion_message = "Yeah! Smash the state!" - -/datum/goal/achievement/newshound - description = "Catch up on the news with a newspaper, none of that new-fangled digital media." - completion_message = "You feel much more in-the-know." \ No newline at end of file diff --git a/code/modules/goals/definitions/personal_achievement_movement.dm b/code/modules/goals/definitions/personal_achievement_movement.dm deleted file mode 100644 index b63dbcda23983..0000000000000 --- a/code/modules/goals/definitions/personal_achievement_movement.dm +++ /dev/null @@ -1,57 +0,0 @@ -// Subscribe to owner's movement event. -/datum/goal/movement/New() - ..() - if(owner) - var/datum/mind/mind = owner - GLOB.moved_event.register(mind.current, src, .proc/owner_moved) - -/datum/goal/movement/proc/owner_moved() - return - -/datum/goal/movement/Destroy() - if(owner) - var/datum/mind/mind = owner - GLOB.moved_event.unregister(mind.current, src) - . = ..() - -/datum/goal/movement/walk - completion_message = "It sure feels good to stretch your legs." - var/steps = 0 - var/required_steps - var/min_steps = 4500 - var/max_steps = 5500 - -/datum/goal/movement/walk/proc/valid_step() - return TRUE - -/datum/goal/movement/walk/owner_moved() - if(steps < required_steps && valid_step()) - steps++ - if(steps >= required_steps) - on_completion() - GLOB.moved_event.unregister(owner, src) - -/datum/goal/movement/walk/get_summary_value() - return " ([steps]/[required_steps] step\s so far)" - -/datum/goal/movement/walk/New() - required_steps = rand(min_steps, max_steps) - ..() - -/datum/goal/movement/walk/check_success() - return (steps >= required_steps) - -/datum/goal/movement/walk/update_strings() - description = "Stave off microgravity muscle atrophy by walking at least [required_steps] step\s this shift." - -/datum/goal/movement/walk/eva - completion_message = "We're so very small, in the end..." - min_steps = 50 - max_steps = 70 - -/datum/goal/movement/walk/eva/valid_step() - var/datum/mind/mind = owner - return istype(mind.current.loc, /turf/space) - -/datum/goal/movement/walk/eva/update_strings() - description = "It's so stuffy inside. Go for a spacewalk - at least [required_steps] step\s." \ No newline at end of file diff --git a/code/modules/goals/definitions/personal_achievement_specific_object.dm b/code/modules/goals/definitions/personal_achievement_specific_object.dm deleted file mode 100644 index 15c8511195395..0000000000000 --- a/code/modules/goals/definitions/personal_achievement_specific_object.dm +++ /dev/null @@ -1,68 +0,0 @@ -// Toggle upon receiving a particular type from some trigger in wider code. -/datum/goal/achievement/specific_object - var/object_path - var/list/possible_objects - var/list/blacklisted_objects - -/datum/goal/achievement/specific_object/New() - if(LAZYLEN(blacklisted_objects)) - possible_objects -= blacklisted_objects - object_path = pick(possible_objects) - possible_objects = null - blacklisted_objects = null - ..() - -/datum/goal/achievement/specific_object/update_progress(var/progress) - if(!success) - if(ispath(progress)) - if(ispath(progress, object_path) || ispath(object_path, progress)) - success = TRUE - else if(isatom(progress)) - var/atom/A = progress - if(istype(A, object_path) || ispath(object_path, A.type)) - success = TRUE - if(success) - on_completion() - -/datum/goal/achievement/specific_object/food - completion_message = "Ahh, that was just what you needed." - -/datum/goal/achievement/specific_object/food/New() - possible_objects = subtypesof(/obj/item/reagent_containers/food/snacks) - blacklisted_objects = list( - /obj/item/reagent_containers/food/snacks/meat/corgi, - /obj/item/reagent_containers/food/snacks/meat/human, - /obj/item/reagent_containers/food/snacks/meat/monkey - ) - ..() - -/datum/goal/achievement/specific_object/food/update_strings() - ..() - var/obj/food = object_path - description = "You really feel like \a [initial(food.name)]. Make sure to get some." - -/datum/goal/achievement/specific_object/drink - completion_message = "Ahh, that hit the spot!" - -/datum/goal/achievement/specific_object/drink/New() - possible_objects = subtypesof(/datum/reagent/drink) - ..() - -/datum/goal/achievement/specific_object/drink/update_strings() - ..() - var/datum/reagent/drink = object_path - description = "You could really do with a nice [initial(drink.name)]." - -/datum/goal/achievement/specific_object/pet - completion_message = "You should get a pet of your own..." - -/datum/goal/achievement/specific_object/pet - possible_objects = list( - /mob/living/simple_animal/passive/corgi, - /mob/living/simple_animal/passive/cat - ) - -/datum/goal/achievement/specific_object/pet/update_strings() - ..() - var/mob/animal = object_path - description = "Pet \a [initial(animal.name)]." diff --git a/code/modules/goals/goal_ambition.dm b/code/modules/goals/goal_ambition.dm deleted file mode 100644 index 9013cc3d08ba0..0000000000000 --- a/code/modules/goals/goal_ambition.dm +++ /dev/null @@ -1,17 +0,0 @@ -/datum/goal/ambition - can_reroll = FALSE - -/datum/goal/ambition/New() - ..() - if(owner) - SSgoals.ambitions[owner] = src - -/datum/goal/ambition/Destroy() - SSgoals.ambitions -= owner - . = ..() - -/datum/goal/ambition/get_success_string() - return "" - -/datum/goal/ambition/summarize(var/show_success = FALSE, var/allow_modification = FALSE, var/mob/caller) - . = SPAN_DANGER(..(show_success)) diff --git a/code/modules/goals/goal_department.dm b/code/modules/goals/goal_department.dm deleted file mode 100644 index 8b1744c3ba9ac..0000000000000 --- a/code/modules/goals/goal_department.dm +++ /dev/null @@ -1,32 +0,0 @@ -/datum/department - var/name - var/flag - var/list/goals - var/min_goals = 1 - var/max_goals = 2 - -/datum/department/proc/Initialize() - if(!name || !flag || LAZYLEN(goals) <= 0) - return - var/list/possible_goals = goals.Copy() - goals.Cut() - var/goals_to_pick = min(LAZYLEN(possible_goals), rand(min_goals, max_goals)) - while(goals_to_pick && LAZYLEN(possible_goals)) - var/goal = pick_n_take(possible_goals) - var/datum/goal/deptgoal = new goal(src) - if(deptgoal.is_valid()) - LAZYADD(goals, deptgoal) - goals_to_pick-- - else - qdel(deptgoal) - -/datum/department/proc/summarize_goals(var/show_success = FALSE) - . = list() - for(var/i = 1 to LAZYLEN(goals)) - var/datum/goal/goal = goals[i] - . += "[i]. [goal.summarize(show_success)]" - -/datum/department/proc/update_progress(var/goal_type, var/progress) - var/datum/goal/goal = locate(goal_type) in goals - if(goal) - goal.update_progress(progress) diff --git a/code/modules/goals/goal_mind.dm b/code/modules/goals/goal_mind.dm deleted file mode 100644 index 1a401ac32d53a..0000000000000 --- a/code/modules/goals/goal_mind.dm +++ /dev/null @@ -1,79 +0,0 @@ -/datum/mind - var/list/goals - -/datum/mind/proc/show_roundend_summary(var/department_goals) - if(current) - if(department_goals && current.get_preference_value(/datum/client_preference/show_department_goals) == GLOB.PREF_SHOW) - to_chat(current, SPAN_NOTICE(department_goals)) - if(LAZYLEN(goals)) - to_chat(current, SPAN_NOTICE("

              You had the following personal goals this round:
              [jointext(summarize_goals(TRUE), "
              ")]")) - -/datum/mind/proc/summarize_goals(var/show_success = FALSE, var/allow_modification = FALSE, var/mob/caller) - . = list() - if(LAZYLEN(goals)) - for(var/i = 1 to LAZYLEN(goals)) - var/datum/goal/goal = goals[i] - . += "[i]. [goal.summarize(show_success, allow_modification, caller)]" - -// Create and display personal goals for this round. -/datum/mind/proc/generate_goals(datum/job/job, adding_goals, add_amount, is_spawning, bypass_goal_checks) - - if(!adding_goals) - goals = null - - var/list/available_goals = SSgoals.global_personal_goals ? SSgoals.global_personal_goals.Copy() : list() - - if(ishuman(current)) - var/mob/living/carbon/human/H = current - for(var/token in H.cultural_info) - var/decl/cultural_info/culture = H.get_cultural_value(token) - var/list/new_goals = culture.get_possible_personal_goals(job ? job.department_flag : null) - if(LAZYLEN(new_goals)) - available_goals |= new_goals - - var/min_goals = 0 - var/max_goals = 5 - if(job) - min_goals = job.min_goals - max_goals = job.max_goals - if(LAZYLEN(job.possible_goals)) - available_goals |= job.possible_goals - - if(isnull(add_amount)) - add_amount = rand(min_goals, max_goals) - - if (!bypass_goal_checks) - add_amount = min(max(0, max_goals - LAZYLEN(goals)), add_amount) - if(add_amount <= 0) - if(!is_spawning) - to_chat(src.current, SPAN_WARNING("Your job doesn't allow for any more distractions.")) - return FALSE - - var/pref_val = current.get_preference_value(/datum/client_preference/give_personal_goals) - if (pref_val == GLOB.PREF_NEVER || (pref_val == GLOB.PREF_NON_ANTAG && player_is_antag(src))) - if(!is_spawning) - to_chat(src.current, SPAN_WARNING("Your preferences do not allow you to add random goals.")) - return FALSE - - if(LAZYLEN(goals)) - for (var/datum/goal/mind_goal in goals) - LAZYREMOVE(available_goals, mind_goal.type) - if(!LAZYLEN(available_goals)) - if(!is_spawning) - to_chat(src.current, SPAN_WARNING("There are no more goals available.")) - return FALSE - - for(var/i = 1 to min(LAZYLEN(available_goals), add_amount)) - var/goal = pick_n_take(available_goals) - new goal(src) - return TRUE - -/datum/mind/proc/delete_goal(datum/job/job, datum/goal/goal, override_min_goals) - var/min_goals = job ? job.min_goals : 1 - - if(!override_min_goals && LAZYLEN(goals) == min_goals) - to_chat(src.current, SPAN_WARNING("Your job needs you to have at least [min_goals] distraction\s.")) - return FALSE - else - qdel(goal) - return TRUE diff --git a/code/modules/goals/goal_mob.dm b/code/modules/goals/goal_mob.dm deleted file mode 100644 index a2f781f4c8c48..0000000000000 --- a/code/modules/goals/goal_mob.dm +++ /dev/null @@ -1,54 +0,0 @@ -/mob/proc/has_personal_goal(var/goal_type) - if(mind) return locate(goal_type) in mind.goals - -/mob/proc/update_personal_goal(var/goal_type, var/progress) - var/datum/goal/goal = has_personal_goal(goal_type) - if(goal) - goal.update_progress(progress) - -/mob/verb/show_goals_verb() - - set name = "Show Goals" - set desc = "Shows your round goals." - set category = "IC" - - show_goals(TRUE, TRUE) - -/mob/proc/show_goals(var/show_success = FALSE, var/allow_modification = FALSE) - - if(!mind) - to_chat(src, SPAN_WARNING("You are mindless and cannot have goals.")) - return - - var/max_goals = 5 - var/datum/department/dept - if(mind.assigned_job) - max_goals = mind.assigned_job.max_goals - if(mind.assigned_job.department_flag && SSgoals.departments["[mind.assigned_job.department_flag]"]) - dept = SSgoals.departments["[mind.assigned_job.department_flag]"] - - //No goals to display - if(!(allow_modification || LAZYLEN(mind.goals)) && !(dept && LAZYLEN(dept.goals))) - return - - var/pref_val = get_preference_value(/datum/client_preference/give_personal_goals) - var/prefs_no_personal_goals = pref_val == GLOB.PREF_NEVER || (pref_val == GLOB.PREF_NON_ANTAG && player_is_antag(mind)) - to_chat(src, "
              ") - if(LAZYLEN(mind.goals)) - to_chat(src, SPAN_NOTICE("This round, you have the following personal goals:
              [jointext(mind.summarize_goals(show_success, allow_modification, mind.current), "
              ")]")) - else if(prefs_no_personal_goals) - to_chat(src, SPAN_NOTICE("Your preferences do not allow for personal goals.")) - else - to_chat(src, SPAN_NOTICE("You have no personal goals this round.")) - if(allow_modification && !prefs_no_personal_goals && LAZYLEN(mind.goals) < max_goals) - to_chat(src, SPAN_NOTICE("Add Random Goal")) - if(dept && get_preference_value(/datum/client_preference/show_department_goals) == GLOB.PREF_SHOW) - if(LAZYLEN(dept.goals)) - to_chat(src, SPAN_NOTICE("

              This round, [dept.name] has the following departmental goals:
              [jointext(dept.summarize_goals(show_success), "
              ")]")) - else - to_chat(src, SPAN_NOTICE("

              [dept.name] has no departmental goals this round.")) - - if(LAZYLEN(mind.goals)) - to_chat(mind.current, SPAN_NOTICE("

              You can check your round goals with the Show Goals verb.")) - - to_chat(src, "
              ") diff --git a/code/modules/goonchat/_helpers.dm b/code/modules/goonchat/_helpers.dm deleted file mode 100644 index 3ec279485e2fb..0000000000000 --- a/code/modules/goonchat/_helpers.dm +++ /dev/null @@ -1,120 +0,0 @@ -GLOBAL_DATUM_INIT(is_http_protocol, /regex, regex("^https?://")) - - -//Converts an icon to base64. Operates by putting the icon in the iconCache savefile, -// exporting it as text, and then parsing the base64 from that. -// (This relies on byond automatically storing icons in savefiles as base64) -/proc/icon2base64(icon/icon, iconKey = "misc") - if (!isicon(icon)) - return FALSE - to_save(GLOB.iconCache[iconKey], icon) - var/iconData = GLOB.iconCache.ExportText(iconKey) - var/list/partial = splittext(iconData, "{") - return replacetext_char(copytext_char(partial[2], 3, -5), "\n", "") - -/proc/icon2html(thing, target, icon_state, dir, frame = 1, moving = FALSE, realsize = FALSE, class = null, incx = 0, incy = 0) - if (!thing) - return - - var/key - var/icon/I = thing - if (!target) - return - if (target == world) - target = GLOB.clients - - var/list/targets - if (!islist(target)) - targets = list(target) - else - targets = target - if (!targets.len) - return - if (!isicon(I)) - if (isfile(thing)) //special snowflake - var/name = "[generate_asset_name(thing)].png" - register_asset(name, thing) - for (var/thing2 in targets) - send_asset(thing2, key, FALSE) - return "" - if (ispath(thing)) - var/atom/A = thing - if (isnull(dir)) - dir = SOUTH - if (isnull(icon_state)) - icon_state = initial(A.icon_state) - I = initial(A.icon) - else - var/atom/A = thing - if (isnull(dir)) - dir = A.dir - if (isnull(icon_state)) - icon_state = A.icon_state - I = A.icon - if (ishuman(thing)) // Shitty workaround for a BYOND issue. - var/icon/temp = I - I = icon() - I.Insert(temp, dir = SOUTH) - dir = SOUTH - else - if (isnull(dir)) - dir = SOUTH - if (isnull(icon_state)) - icon_state = "" - - I = icon(I, icon_state, dir, frame, moving) - - key = "[generate_asset_name(I)].png" - register_asset(key, I) - for (var/thing2 in targets) - send_asset(thing2, key, FALSE) - - if(realsize) - return "" - - - return "" - -/proc/icon2base64html(thing) - if (!thing) - return - var/static/list/bicon_cache = list() - if (isicon(thing)) - var/icon/I = thing - var/icon_base64 = icon2base64(I) - - if (I.Height() > world.icon_size || I.Width() > world.icon_size) - var/icon_md5 = md5(icon_base64) - icon_base64 = bicon_cache[icon_md5] - if (!icon_base64) // Doesn't exist yet, make it. - bicon_cache[icon_md5] = icon_base64 = icon2base64(I) - - - return "" - - // Either an atom or somebody fucked up and is gonna get a runtime, which I'm fine with. - var/atom/A = thing - var/key = "[istype(A.icon, /icon) ? "\ref[A.icon]" : A.icon]:[A.icon_state]" - - - if (!bicon_cache[key]) // Doesn't exist, make it. - var/icon/I = icon(A.icon, A.icon_state, SOUTH, 1) - if (ishuman(thing)) // Shitty workaround for a BYOND issue. - var/icon/temp = I - I = icon() - I.Insert(temp, dir = SOUTH) - - bicon_cache[key] = icon2base64(I, key) - - return "" - -//Costlier version of icon2html() that uses getFlatIcon() to account for overlays, underlays, etc. Use with extreme moderation, ESPECIALLY on mobs. -/proc/costly_icon2html(thing, target) - if (!thing) - return - - if (isicon(thing)) - return icon2html(thing, target) - - var/icon/I = getFlatIcon(thing) - return icon2html(I, target) diff --git a/code/modules/goonchat/browserOutput.dm b/code/modules/goonchat/browserOutput.dm deleted file mode 100644 index e59fde7261e3f..0000000000000 --- a/code/modules/goonchat/browserOutput.dm +++ /dev/null @@ -1,361 +0,0 @@ -/********************************* -For the main html chat area -*********************************/ - -/// Cache of icons for the browser output -GLOBAL_DATUM_INIT(iconCache, /savefile, new("data/tmp/iconCache.sav")) - - -/// Should match the value set in the browser js -#define MAX_COOKIE_LENGTH 5 -#define SPAM_TRIGGER_AUTOMUTE 10 - -/client/var/chatOutput/chatOutput - -/client/New() - chatOutput = new (src) - return ..() - -/// Member of /client that manages caching and sending messages to its holder -/chatOutput - var/client/owner - - /// How many times client data has been checked - var/total_checks = 0 - - /// When to next clear the client data checks counter - var/next_time_to_clear = 0 - - /// Has the client loaded the browser output area? - var/loaded = FALSE - - /// If they haven't loaded chat, this is where messages will go until they do - var/list/messageQueue = list() - - /// Has the client sent a cookie for analysis - var/cookieSent = FALSE - - /// The client's skin prevented loading - var/broken = FALSE - - /// Contains the connection history passed from chat cookie - var/list/connectionHistory = list() - - -/chatOutput/Destroy(force) - SSping.chats -= src - return ..() - - -/chatOutput/New(client/C) - SSping.chats += src - owner = C - - -/chatOutput/proc/start() - if (!owner) - return FALSE - if (!winexists(owner, "browseroutput")) - set waitfor = FALSE - broken = TRUE - message_admins("Couldn't start chat for [key_name_admin(owner)]!") - . = FALSE - alert(owner.mob, "Updated chat window does not exist. If you are using a custom skin file please allow the game to update.") - return - if (owner && winget(owner, "browseroutput", "is-visible") == "true") - doneLoading() - else - load() - return TRUE - - -/chatOutput/proc/load() - set waitfor = FALSE - if(!owner) - return - var/datum/asset/stuff = get_asset_datum(/datum/asset/group/goonchat) - stuff.send(owner) - show_browser(owner, file('code/modules/goonchat/browserassets/html/browserOutput.html'), "window=browseroutput") - - -/chatOutput/Topic(href, list/href_list) - if(usr.client != owner) - return TRUE - var/list/params = list() // Build proc parameters from the form "param[paramname]=thing" - for(var/key in href_list) - if(length(key) > 7 && findtext(key, "param")) // 7 is the amount of characters in the basic param key template. - params[copytext_char(key, 7, -1)] = href_list[key] - var/data // Data to be sent back to the chat. - switch(href_list["proc"]) - if ("doneLoading") - data = doneLoading(arglist(params)) - if ("debug") - data = debug(arglist(params)) - if ("ping") - data = ping(arglist(params)) - if ("analyzeClientData") - data = analyzeClientData(arglist(params)) - if ("swaptodarkmode") - swaptodarkmode() - if ("swaptolightmode") - swaptolightmode() - if ("showEmojiList") - showemojilist(arglist(params)) - if(data) - ehjax_send(data = data) - - -//Called on chat output done-loading by JS. -/chatOutput/proc/doneLoading() - if(loaded) - return - loaded = TRUE - showChat() - for(var/message in messageQueue) - to_chat(owner, message, handle_whitespace = FALSE) // whitespace has already been handled by the original to_chat - messageQueue = null - sendClientData() - syncRegex() - legacy_chat(owner, SPAN_DANGER("Failed to load fancy chat. Some features won't work.")) // do NOT convert to to_chat() - - -/chatOutput/proc/showChat() - winset(owner, "output", "is-visible=false") - winset(owner, "browseroutput", "is-disabled=false;is-visible=true") - - -/chatOutput/proc/updatePing() - if (!owner) - qdel(src) - return - ehjax_send(data = owner.is_afk(29 SECONDS) ? "softPang" : "pang") - - -/proc/syncChatRegexes() - for (var/user in GLOB.clients) - var/client/C = user - var/chatOutput/Cchat = C.chatOutput - if (Cchat && !Cchat.broken && Cchat.loaded) - Cchat.syncRegex() - - -/chatOutput/proc/syncRegex() - var/list/regexes = list() - if (regexes.len) - ehjax_send(data = list("syncRegex" = regexes)) - - -/chatOutput/proc/ehjax_send(client/C = owner, window = "browseroutput", data) - if(islist(data)) - data = json_encode(data) - send_output(C, "[data]", "[window]:ehjaxCallback") - - -//Sends client connection details to the chat to handle and save -/chatOutput/proc/sendClientData() - var/list/deets = list("clientData" = list()) - deets["clientData"]["ckey"] = owner.ckey - deets["clientData"]["ip"] = owner.address - deets["clientData"]["compid"] = owner.computer_id - var/data = json_encode(deets) - ehjax_send(data = data) - - -//Called by client, sent data to investigate (cookie history so far) -/chatOutput/proc/analyzeClientData(cookie = "") - if(world.time > next_time_to_clear) - next_time_to_clear = world.time + (3 SECONDS) - total_checks = 0 - total_checks += 1 - if(total_checks > SPAM_TRIGGER_AUTOMUTE) - message_admins("[key_name(owner)] kicked for goonchat topic spam") - qdel(owner) - return - if(!cookie) - return - if(cookie != "none") - var/list/connData = json_decode(cookie) - if (connData && islist(connData) && connData.len > 0 && connData["connData"]) - connectionHistory = connData["connData"] - var/list/found = new() - if(connectionHistory.len > MAX_COOKIE_LENGTH) - message_admins("[key_name(src.owner)] was kicked for an invalid ban cookie)") - qdel(owner) - return - for(var/i in connectionHistory.len to 1 step -1) - if(QDELETED(owner)) - return - var/list/row = src.connectionHistory[i] - if (!row || row.len < 3 || (!row["ckey"] || !row["compid"] || !row["ip"])) - return - if (world.IsBanned(row["ckey"], row["ip"], row["compid"])) - found = row - break - CHECK_TICK - if (found.len > 0) - var/msg = "[key_name(src.owner)] has a cookie from a banned account! (Matched: [found["ckey"]], [found["ip"]], [found["compid"]])" - message_admins(msg) - log_admin(msg) - cookieSent = TRUE - - -//Called by js client every 60 seconds -/chatOutput/proc/ping() - return "pong" - - -//Called by js client on js error -/chatOutput/proc/debug(error) - log_world("\[[time2text(world.realtime, "YYYY-MM-DD hh:mm:ss")]\] Client: [(src.owner.key ? src.owner.key : src.owner)] triggered JS error: [error]") - - -//Global chat procs -/proc/to_chat_immediate(target, message, handle_whitespace = TRUE, trailing_newline = TRUE) - if(!target || !message) - return - if(target == world) - target = GLOB.clients - var/original_message = message - if(handle_whitespace) - message = replacetext_char(message, "\n", "
              ") - message = replacetext_char(message, "\t", "[FOURSPACES][FOURSPACES]") - //Replace expanded \icon macro with icon2html - //regex/Replace with a proc won't work here because icon2html takes target as an argument and there is no way to pass it to the replacement proc - //not even hacks with reassigning usr work - var/regex/i = new(@//, "g") - while(i.Find_char(message)) - message = copytext_char(message,1,i.index)+icon2html(locate(i.group[1]), target, icon_state=i.group[2])+copytext_char(message,i.next) - - if(trailing_newline) - message += "
              " - - if(islist(target)) - // Do the double-encoding outside the loop to save nanoseconds - var/twiceEncoded = url_encode(url_encode(message)) - for(var/I in target) - var/client/C = resolve_client(I) //Grab us a client if possible - - if (!C) - continue - - //Send it to the old style output window. - legacy_chat(C, original_message) - - if (C.get_preference_value(/datum/client_preference/goonchat) != GLOB.PREF_YES) - continue - if(!C.chatOutput || C.chatOutput.broken) // A player who hasn't updated his skin file. - continue - - if(!C.chatOutput.loaded) - //Client still loading, put their messages in a queue - C.chatOutput.messageQueue += message - continue - - send_output(C, twiceEncoded, "browseroutput:output") - else - var/client/C = resolve_client(target) //Grab us a client if possible - if (!C) - return - legacy_chat(C, original_message) //Send it to the old style output window. - if (C.get_preference_value(/datum/client_preference/goonchat) != GLOB.PREF_YES) - return - if(!C.chatOutput || C.chatOutput.broken) // A player who hasn't updated his skin file. - return - if(!C.chatOutput.loaded) - C.chatOutput.messageQueue += message //Client still loading, put their messages in a queue - return - // url_encode it TWICE, this way any UTF-8 characters are able to be decoded by the Javascript. - send_output(C, url_encode(url_encode(message)), "browseroutput:output") - - -/proc/to_chat(target, message, handle_whitespace = TRUE, trailing_newline = TRUE) - set waitfor = FALSE - if(Master.current_runlevel == RUNLEVEL_INIT || !SSchat?.initialized) - to_chat_immediate(target, message, handle_whitespace, trailing_newline) - return - SSchat.queue(target, message, handle_whitespace, trailing_newline) - - -/chatOutput/proc/swaptolightmode() //Dark mode light mode stuff. Yell at KMC if this breaks! (See darkmode.dm for documentation) - owner.force_white_theme() - - -/chatOutput/proc/swaptodarkmode() - owner.force_dark_theme() - -/chatOutput/proc/showemojilist(var/theme="dark") - var/color1 - var/color2 - if(theme == "dark") - color1 = "#a4bad6" - color2 = "#171717" - else - color1 = "#000000" - color2 = "#fff" - - var/css = "body { \ - background: [color2]; \ - color: [color1]; \ -} \ -a img { \ - border: none; \ -} \ -table { \ - border: 4px double [color1]; \ - border-collapse: separate;\ - width: 100%;\ - border-spacing: 7px;\ -}\ -td {\ - padding: 5px;\ - border: 1px solid [color1];\ -}\ -input { \ - border:0; \ - background:transparent; \ - font-size:16px; \ - color:[color2]; \ -}" - var/js = "function copyToClipboard(text) { \ - var $temp = $(''); \ - $('body').append($temp); \ - $temp.val(text).select(); \ - document.execCommand('copy'); \ - $temp.remove(); \ -}; \ -$(function() { \ - $('body').on('click', 'a', function(e) { \ - e.preventDefault(); \ - }); \ - $('.emojiPicker a').click(function () { \ - copyToClipboard(':' + $(this).data('emoji') + ':'); \ - }); \ -});" - var/dat = " \ - \ - \ - \ - \ - \ -Emoji list \ - \ - \ -

              Эмодзи пишется через :emoji:

              \ -
              " - var/static/list/states = icon_states(GLOB.emojis) - - // for(var/emoji in states) - var/len = LAZYLEN(states) - for(var/i = 1, i <= len, i++) - if(i%8 == 1) dat += "" - dat +="" - if(!(i%8)) dat += "" - - dat += "" - - var/len_y = min(94 + (round(len/8) + min(1, len%8))*45, 769) - - show_browser(owner, dat, "window=emojis;size=420x[len_y]") - -#undef MAX_COOKIE_LENGTH -#undef SPAM_TRIGGER_AUTOMUTE diff --git a/code/modules/goonchat/browserassets/css/browserOutput.css b/code/modules/goonchat/browserassets/css/browserOutput.css deleted file mode 100644 index a2bf219948495..0000000000000 --- a/code/modules/goonchat/browserassets/css/browserOutput.css +++ /dev/null @@ -1,407 +0,0 @@ -/***************************************** -* -* GLOBAL STYLES -* -******************************************/ -html, body { - padding: 0; - margin: 0; - height: 100%; - color: #a4bad6; -} -body { - background: #171717; - font-family: Verdana, sans-serif; - font-size: 13px; - color: #a4bad6; - line-height: 1.2; - overflow-x: hidden; - overflow-y: scroll; - word-wrap: break-word; - scrollbar-face-color:#1A1A1A; - scrollbar-track-color:#171717; - scrollbar-highlight-color:#171717; -} - -em { - font-style: normal; - font-weight: bold; -} - -img { - margin: 0; - padding: 0; - line-height: 1; - -ms-interpolation-mode: nearest-neighbor; - image-rendering: pixelated; -} -img.icon { - height: 1em; - min-height: 1em; - width: auto; - vertical-align: bottom; -} - -.r:before { /* "repeated" badge class for combined messages */ - content: 'x'; -} -.r { - display: inline-block; - min-width: 0.5em; - font-size: 0.7em; - padding: 0.2em 0.3em; - line-height: 1; - color: white; - text-align: center; - white-space: nowrap; - vertical-align: middle; - background-color: crimson; - border-radius: 10px; -} - -a {color: #397ea5;} -a.visited {color: #7c00e6;} -a:visited {color: #7c00e6;} -a.popt {text-decoration: none;} - -/***************************************** -* -* OUTPUT NOT RELATED TO ACTUAL MESSAGES -* -******************************************/ -#loading { - position: fixed; - width: 300px; - height: 150px; - text-align: center; - left: 50%; - top: 50%; - margin: -75px 0 0 -150px; -} -#loading i {display: block; padding-bottom: 3px;} - -#messages { - font-size: 13px; - padding: 3px; - margin: 0; - word-wrap: break-word; -} -#newMessages { - position: fixed; - display: block; - bottom: 0; - right: 0; - padding: 8px; - background: #202020; - text-decoration: none; - font-variant: small-caps; - font-size: 1.1em; - font-weight: bold; - color: #a4bad6; -} -#newMessages:hover {background: #171717;} -#newMessages i {vertical-align: middle; padding-left: 3px;} -#ping { - position: fixed; - top: 0; - right: 175px; - width: 45px; - background: #202020; - height: 30px; - padding: 8px 0 2px 0; -} -#ping i {display: block; text-align: center;} -#ping .ms { - display: block; - text-align: center; - font-size: 8pt; - padding-top: 2px; -} -#userBar { - position: fixed; - top: 0; - right: 0; -} -#userBar .subCell { - background: #202020; - height: 30px; - padding: 5px 0; - display: block; - color: #a4bad6; - text-decoration: none; - line-height: 28px; - border-top: 1px solid #171717; -} -#userBar .subCell:hover {background: #202020;} -#userBar .toggle { - width: 45px; - background: #202020; - border-top: 0; - float: right; - text-align: center; -} -#userBar .sub {clear: both; display: none; width: 180px;} -#userBar .sub.scroll {overflow-y: scroll;} -#userBar .sub.subCell {padding: 3px 0 3px 8px; line-height: 30px; font-size: 0.9em; clear: both;} -#userBar .sub span { - display: block; - line-height: 30px; - float: left; -} -#userBar .sub i { - display: block; - padding: 0 5px; - font-size: 1.1em; - width: 22px; - text-align: center; - line-height: 30px; - float: right; -} -#userBar .sub input { - position: absolute; - padding: 7px 5px; - width: 121px; - line-height: 30px; - float: left; -} -#userBar .topCell {border-top: 0;} - -/* POPUPS */ -.popup { - position: fixed; - top: 50%; - left: 50%; - background: #ddd; -} -.popup .close { - position: absolute; - background: #aaa; - top: 0; - right: 0; - color: #333; - text-decoration: none; - z-index: 2; - padding: 0 10px; - height: 30px; - line-height: 30px; -} -.popup .close:hover {background: #999;} -.popup .head { - background: #999; - color: #ddd; - padding: 0 10px; - height: 30px; - line-height: 30px; - text-transform: uppercase; - font-size: 0.9em; - font-weight: bold; - border-bottom: 2px solid green; -} -.popup input {border: 1px solid #999; background: #fff; margin: 0; padding: 5px; outline: none; color: #333;} -.popup input[type=text]:hover, .popup input[type=text]:active, .popup input[type=text]:focus {border-color: green;} -.popup input[type=submit] {padding: 5px 10px; background: #999; color: #ddd; text-transform: uppercase; font-size: 0.9em; font-weight: bold;} -.popup input[type=submit]:hover, .popup input[type=submit]:focus, .popup input[type=submit]:active {background: #aaa; cursor: pointer;} - -.changeFont {padding: 10px;} -.changeFont a {display: block; text-decoration: none; padding: 3px; color: #333;} -.changeFont a:hover {background: #ccc;} - -.highlightPopup {padding: 10px; text-align: center;} -.highlightPopup input[type=text] {display: block; width: 215px; text-align: left; margin-top: 5px;} -.highlightPopup input.highlightColor {background-color: #FFFF00;} -.highlightPopup input.highlightTermSubmit {margin-top: 5px;} - -/* ADMIN CONTEXT MENU */ -.contextMenu { - background-color: #ddd; - position: fixed; - margin: 2px; - width: 150px; -} -.contextMenu a { - display: block; - padding: 2px 5px; - text-decoration: none; - color: #333; -} - -.contextMenu a:hover { - background-color: #ccc; -} - -/* ADMIN FILTER MESSAGES MENU */ -.filterMessages {padding: 5px;} -.filterMessages div {padding: 2px 0;} -.filterMessages input {} -.filterMessages label {} - -.icon-stack {height: 1em; line-height: 1em; width: 1em; vertical-align: middle; margin-top: -2px;} - - -/***************************************** -* -* OUTPUT ACTUALLY RELATED TO MESSAGES -* -******************************************/ - -/* MOTD */ -.motd {color: #a4bad6; font-family: Verdana, sans-serif;} -.motd h1, .motd h2, .motd h3, .motd h4, .motd h5, .motd h6 {color: #a4bad6; text-decoration: underline;} -.motd a, .motd a:link, .motd a:visited, .motd a:active, .motd a:hover {color: #a4bad6;} - -/* ADD HERE FOR BOLD */ -.bold, .name, .prefix, .ooc, .looc, .adminooc, .admin, .medal, .yell {font-weight: bold;} - -/* ADD HERE FOR ITALIC */ -.italic, .italics, .emote {font-style: italic;} - -/* OUTPUT COLORS */ -.highlight {background: yellow;} - -h1, h2, h3, h4, h5, h6 {color: #a4bad6;font-family: Georgia, Verdana, sans-serif;} - -em {font-style: normal; font-weight: bold;} - -/* LOG */ -.log_message {color: #386aff; font-weight: bold;} - -/* OOC */ -.ooc {font-weight: bold;} -.ooc img.text_tag {width: 32px; height: 10px;} - -.ooc .everyone {color: #5353ff;} -.ooc .looc {color: #3a7496;} -.ooc .elevated {color: #2e78d9;} -.ooc .moderator {color: #184880;} -.ooc .developer {color: #1b521f;} -.ooc .admin {color: #b82e00;} -.ooc .aooc {color: #960018;} - -/* Admin: Private Messages */ -.pm .howto {color: #ff0000; font-weight: bold; font-size: 200%;} -.pm .in {color: #ff0000;} -.pm .out {color: #ff0000;} -.pm .other {color: #5353ff;} - -/* Admin: Channels */ -.mod_channel {color: #735638; font-weight: bold;} -.mod_channel .admin {color: #b82e00; font-weight: bold;} -.admin_channel {color: #9611d4; font-weight: bold;} - -/* Radio: Misc */ -.deadsay {color: #e2c1ff} -.radio {color: #1ecc43;} -.deptradio {color: #ff00ff;} /* when all other department colors fail */ -.newscaster {color: #750000;} - -/* Radio Channels */ -.comradio {color: #193a7a;} -.syndradio {color: #6d3f40;} -.centradio {color: #5c5c8a;} -.airadio {color: #ff00ff;} -.entradio {color: #339966;} - -.secradio {color: #b41c1c;} -.engradio {color: #a66300;} -.medradio {color: #008160;} -.sciradio {color: #993399;} -.supradio {color: #5f4519;} -.srvradio {color: #6eaa2c;} -.expradio {color: #a3a332;} - -.hailradio {color: #cc00aa;} -.exampleradio {color: #ff00ff;} -.voxradio {color: #f32b06;} -.bearcatradio {color: #590e2d;} -.colonyradio {color: #ceaf3e;} -.verneradio {color: #738465;} - -/* Miscellaneous */ -.name {font-weight: bold;} -.alert {color: #d82020;} -h1.alert, h2.alert {color: #a4bad6;} - -.emote {font-style: italic;} - -/* Game Messages */ -.attack {color: #ff0000;} -.moderate {color: #cc0000;} -.disarm {color: #990000;} -.passive {color: #660000;} - -.danger {color: #c51e1e;} -.warning {color: #c51e1e; font-style: italic;} -.subtle {color: #4343ca; font-size: 75%; font-style: italic;} -.boldannounce {color: #c51e1e; font-weight: bold;} -.rose {color: #ff5050;} -.info {color: #6685f5;} -.debug {color: #ff66ff;} -.notice {color: #6685f5;} -.alium {color: #00ff00;} -.cult {color: #aa1c1c;} - -/* Languages */ -.alien {color: #855d85;} -.changeling {color: #059223; font-style: italic;} -.tajaran {color: #803b56;} -.tajaran_signlang {color: #941c1c;} -.skrell {color: #00ced1;} -.soghun {color: #228b22;} -.yeosa {color: #218b89;} -.nabber_lang {color: #525252;} -.solcom {color: #22228b;} -.vox {color: #aa00aa;} -.rough {font-family: "Trebuchet MS", cursive, sans-serif; color: #7c6256} -.say_quote {font-family: Georgia, Verdana, sans-serif;} -.russian {color: #9c250b;} -.moon {color: #422863;} -.spacer {color: #ff6600;} -.selenian {color: #324bbd;} -.arabic {color: #5a853e;} -.chinese {color: #d4a52a;} -.indian {color: #634c81;} -.iberian {color: #be4ac9;} - -.interface {color: #750e75;} - -.good {color: #4f7529; font-weight: bold;} -.bad {color: #ee0000; font-weight: bold;} - -/* Admin: Who */ -.who_dead {color: #5f5f5f;} -.who_observing {color: #9e9e9e;} -.who_new_account {color: #ff0000;} -.who_newish_account {color: #ff8c00;} -.who_antagonist {color: #ff0000;} - -/* Admin: PM */ -.pm {color: #ff0000;} -.staff_pm {color: #0059ff;} - -@keyframes hypnocolor { - 0% {color: #202020;} - 25% {color: #4b02ac;} - 50% {color: #9f41f1;} - 75% {color: #541c9c;} - 100% {color: #7adbf3;} -} - -.phobia {color: #dd0000; font-weight: bold; animation: phobia 750ms infinite;} -@keyframes phobia { - 0% {color: #f75a5a;} - 50% {color: #dd0000;} - 100% {color: #f75a5a;} -} - -.icon {height: 1em; width: auto;} - -.connectionClosed, .fatalError {background: red; color: white; padding: 5px;} -.connectionClosed.restored {background: green;} -.internal.boldnshit {color: #3d5bc3; font-weight: bold;} - -/* HELPER CLASSES */ -.text-normal {font-weight: normal; font-style: normal;} -.hidden {display: none; visibility: hidden;} -.ml-1 {margin-left: 1em;} -.ml-2 {margin-left: 2em;} -.ml-3 {margin-left: 3em;} diff --git a/code/modules/goonchat/browserassets/css/browserOutput_white.css b/code/modules/goonchat/browserassets/css/browserOutput_white.css deleted file mode 100644 index 75a1722e36b39..0000000000000 --- a/code/modules/goonchat/browserassets/css/browserOutput_white.css +++ /dev/null @@ -1,404 +0,0 @@ -/***************************************** -* -* GLOBAL STYLES for white theme normies -* -******************************************/ -html, body { - padding: 0; - margin: 0; - height: 100%; - color: #000000; -} -body { - background: #fff; - font-family: Verdana, sans-serif; - font-size: 13px; - line-height: 1.2; - overflow-x: hidden; - overflow-y: scroll; - word-wrap: break-word; -} - -em { - font-style: normal; - font-weight: bold; -} - -img { - margin: 0; - padding: 0; - line-height: 1; - -ms-interpolation-mode: nearest-neighbor; - image-rendering: pixelated; -} -img.icon { - height: 1em; - min-height: 1em; - width: auto; - vertical-align: bottom; -} - - -.r:before { /* "repeated" badge class for combined messages */ - content: 'x'; -} -.r { - display: inline-block; - min-width: 0.5em; - font-size: 0.7em; - padding: 0.2em 0.3em; - line-height: 1; - color: white; - text-align: center; - white-space: nowrap; - vertical-align: middle; - background-color: crimson; - border-radius: 10px; -} - -a {color: #0000ff;} -a.visited {color: #ff00ff;} -a:visited {color: #ff00ff;} -a.popt {text-decoration: none;} - -/***************************************** -* -* OUTPUT NOT RELATED TO ACTUAL MESSAGES -* -******************************************/ -#loading { - position: fixed; - width: 300px; - height: 150px; - text-align: center; - left: 50%; - top: 50%; - margin: -75px 0 0 -150px; -} -#loading i {display: block; padding-bottom: 3px;} - -#messages { - font-size: 13px; - padding: 3px; - margin: 0; - word-wrap: break-word; -} -#newMessages { - position: fixed; - display: block; - bottom: 0; - right: 0; - padding: 8px; - background: #ddd; - text-decoration: none; - font-variant: small-caps; - font-size: 1.1em; - font-weight: bold; - color: #333; -} -#newMessages:hover {background: #ccc;} -#newMessages i {vertical-align: middle; padding-left: 3px;} -#ping { - position: fixed; - top: 0; - right: 175px; - width: 45px; - background: #ddd; - height: 30px; - padding: 8px 0 2px 0; -} -#ping i {display: block; text-align: center;} -#ping .ms { - display: block; - text-align: center; - font-size: 8pt; - padding-top: 2px; -} -#userBar { - position: fixed; - top: 0; - right: 0; -} -#userBar .subCell { - background: #ddd; - height: 30px; - padding: 5px 0; - display: block; - color: #333; - text-decoration: none; - line-height: 28px; - border-top: 1px solid #b4b4b4; -} -#userBar .subCell:hover {background: #ccc;} -#userBar .toggle { - width: 45px; - background: #ccc; - border-top: 0; - float: right; - text-align: center; -} -#userBar .sub {clear: both; display: none; width: 180px;} -#userBar .sub.scroll {overflow-y: scroll;} -#userBar .sub.subCell {padding: 3px 0 3px 8px; line-height: 30px; font-size: 0.9em; clear: both;} -#userBar .sub span { - display: block; - line-height: 30px; - float: left; -} -#userBar .sub i { - display: block; - padding: 0 5px; - font-size: 1.1em; - width: 22px; - text-align: center; - line-height: 30px; - float: right; -} -#userBar .sub input { - position: absolute; - padding: 7px 5px; - width: 121px; - line-height: 30px; - float: left; -} -#userBar .topCell {border-top: 0;} - -/* POPUPS */ -.popup { - position: fixed; - top: 50%; - left: 50%; - background: #ddd; -} -.popup .close { - position: absolute; - background: #aaa; - top: 0; - right: 0; - color: #333; - text-decoration: none; - z-index: 2; - padding: 0 10px; - height: 30px; - line-height: 30px; -} -.popup .close:hover {background: #999;} -.popup .head { - background: #999; - color: #ddd; - padding: 0 10px; - height: 30px; - line-height: 30px; - text-transform: uppercase; - font-size: 0.9em; - font-weight: bold; - border-bottom: 2px solid green; -} -.popup input {border: 1px solid #999; background: #fff; margin: 0; padding: 5px; outline: none; color: #333;} -.popup input[type=text]:hover, .popup input[type=text]:active, .popup input[type=text]:focus {border-color: green;} -.popup input[type=submit] {padding: 5px 10px; background: #999; color: #ddd; text-transform: uppercase; font-size: 0.9em; font-weight: bold;} -.popup input[type=submit]:hover, .popup input[type=submit]:focus, .popup input[type=submit]:active {background: #aaa; cursor: pointer;} - -.changeFont {padding: 10px;} -.changeFont a {display: block; text-decoration: none; padding: 3px; color: #333;} -.changeFont a:hover {background: #ccc;} - -.highlightPopup {padding: 10px; text-align: center;} -.highlightPopup input[type=text] {display: block; width: 215px; text-align: left; margin-top: 5px;} -.highlightPopup input.highlightColor {background-color: #FFFF00;} -.highlightPopup input.highlightTermSubmit {margin-top: 5px;} - -/* ADMIN CONTEXT MENU */ -.contextMenu { - background-color: #ddd; - position: fixed; - margin: 2px; - width: 150px; -} -.contextMenu a { - display: block; - padding: 2px 5px; - text-decoration: none; - color: #333; -} - -.contextMenu a:hover { - background-color: #ccc; -} - -/* ADMIN FILTER MESSAGES MENU */ -.filterMessages {padding: 5px;} -.filterMessages div {padding: 2px 0;} -.filterMessages input {} -.filterMessages label {} - -.icon-stack {height: 1em; line-height: 1em; width: 1em; vertical-align: middle; margin-top: -2px;} - - -/***************************************** -* -* OUTPUT ACTUALLY RELATED TO MESSAGES -* -******************************************/ - -/* MOTD */ -.motd {color: #638500; font-family: Verdana, sans-serif;} -.motd h1, .motd h2, .motd h3, .motd h4, .motd h5, .motd h6 {color: #638500; text-decoration: underline;} -.motd a, .motd a:link, .motd a:visited, .motd a:active, .motd a:hover {color: #638500;} - -/* ADD HERE FOR BOLD */ -.bold, .name, .prefix, .ooc, .looc, .adminooc, .admin, .medal, .yell {font-weight: bold;} - -/* ADD HERE FOR ITALIC */ -.italic, .italics, .emote {font-style: italic;} - -/* OUTPUT COLORS */ -.highlight {background: yellow;} - -h1, h2, h3, h4, h5, h6 {color: #0000ff;font-family: Georgia, Verdana, sans-serif;} - -em {font-style: normal;font-weight: bold;} - -/* LOG */ -.log_message {color: #386aff;font-weight: bold;} - -/* OOC */ -.ooc {font-weight: bold;} -.ooc img.text_tag {width: 32px; height: 10px;} - -.ooc .everyone {color: #002eb8;} -.ooc .looc {color: #3a7496;} -.ooc .elevated {color: #2e78d9;} -.ooc .moderator {color: #184880;} -.ooc .developer {color: #1b521f;} -.ooc .admin {color: #b82e00;} -.ooc .aooc {color: #960018;} - -/* Admin: Private Messages */ -.pm .howto {color: #ff0000;font-weight: bold;font-size: 200%;} -.pm .in {color: #ff0000;} -.pm .out {color: #ff0000;} -.pm .other {color: #0000ff;} - -/* Admin: Channels */ -.mod_channel {color: #735638;font-weight: bold;} -.mod_channel .admin {color: #b82e00;font-weight: bold;} -.admin_channel {color: #9611d4;font-weight: bold;} - -/* Radio: Misc */ -.deadsay {color: #530fad;} -.radio {color: #008000;} -.deptradio {color: #ff00ff;} /* when all other department colors fail */ -.newscaster {color: #750000;} - -/* Radio Channels */ -.comradio {color: #193a7a;} -.syndradio {color: #6d3f40;} -.centradio {color: #5c5c8a;} -.airadio {color: #ff00ff;} -.entradio {color: #339966;} - -.secradio {color: #a30000;} -.engradio {color: #a66300;} -.medradio {color: #008160;} -.sciradio {color: #993399;} -.supradio {color: #5f4519;} -.srvradio {color: #6eaa2c;} -.expradio {color: #a3a332;} - -.hailradio {color: #cc00aa;} -.exampleradio {color: #ff00ff;} -.voxradio {color: #f32b06;} -.bearcatradio {color: #590e2d;} -.colonyradio {color: #ceaf3e;} -.verneradio {color: #738465;} - -/* Miscellaneous */ -.name {font-weight: bold;} -.alert {color: #ff0000;} -h1.alert, h2.alert {color: #000080;} - -.emote {font-style: italic;} - -/* Game Messages */ -.attack {color: #ff0000;} -.moderate {color: #cc0000;} -.disarm {color: #990000;} -.passive {color: #660000;} - -.danger {color: #ff0000;} -.warning {color: #ff0000; font-style: italic;} -.subtle {color: #000099; font-size: 75%; font-style: italic;} -.boldannounce {color: #ff0000; font-weight: bold;} -.rose {color: #ff5050;} -.info {color: #0000CC;} -.debug {color: #ff00ff;} -.notice {color: #000099;} -.alium {color: #00ff00;} -.cult {color: #800080; font-weight: bold; font-style: italic;} - -/* Languages */ -.alien {color: #855d85;} -.changeling {color: #059223; font-style: italic;} -.tajaran {color: #803b56;} -.tajaran_signlang {color: #941c1c;} -.skrell {color: #00ced1;} -.soghun {color: #228b22;} -.yeosa {color: #218b89;} -.nabber_lang {color: #525252;} -.solcom {color: #22228b;} -.vox {color: #aa00aa;} -.rough {font-family: "Trebuchet MS", cursive, sans-serif;} -.say_quote {font-family: Georgia, Verdana, sans-serif;} -.russian {color: #9c250b;} -.moon {color: #422863;} -.spacer {color: #ff6600;} -.selenian {color: #324bbd;} -.arabic {color: #5a853e;} -.chinese {color: #d4a52a;} -.indian {color: #634c81;} -.iberian {color: #be4ac9;} - -.interface {color: #750e75;} - -.good {color: #4f7529; font-weight: bold;} -.bad {color: #ee0000; font-weight: bold;} - -/* Admin: Misc */ -.who_dead {color: #000000;} -.who_observing {color: #808080;} -.who_new_account {color: #ff0000;} -.who_newish_account {color: #ff8c00;} -.who_antagonist {color: #ff0000;} - -/* Admin: PM */ -.pm {color: #ff0000;} -.staff_pm {color: #0000FF;} - -@keyframes hypnocolor { - 0% {color: #0d0d0d;} - 25% {color: #410194;} - 50% {color: #7f17d8;} - 75% {color: #410194;} - 100% {color: #3bb5d3;} -} - -.phobia {color: #dd0000; font-weight: bold; animation: phobia 750ms infinite;} -@keyframes phobia { - 0% {color: #0d0d0d;} - 50% {color: #dd0000;} - 100% {color: #0d0d0d;} -} - -.icon {height: 1em; width: auto;} - -.connectionClosed, .fatalError {background: red; color: white; padding: 5px;} -.connectionClosed.restored {background: green;} -.internal.boldnshit {color: blue; font-weight: bold;} - -/* HELPER CLASSES */ -.text-normal {font-weight: normal; font-style: normal;} -.hidden {display: none; visibility: hidden;} -.ml-1 {margin-left: 1em;} -.ml-2 {margin-left: 2em;} -.ml-3 {margin-left: 3em;} diff --git a/code/modules/goonchat/browserassets/css/styles_template.css b/code/modules/goonchat/browserassets/css/styles_template.css deleted file mode 100644 index 3d60397459f7d..0000000000000 --- a/code/modules/goonchat/browserassets/css/styles_template.css +++ /dev/null @@ -1,371 +0,0 @@ -/***************************************** -* -* GLOBAL STYLES -* -******************************************/ -html, body { - padding: 0; - margin: 0; - height: 100%; - color: #a4bad6; -} -body { - background: #171717; - font-family: Verdana, sans-serif; - font-size: 13px; - font-color: #a4bad6; - line-height: 1.2; - overflow-x: hidden; - overflow-y: scroll; - word-wrap: break-word; - scrollbar-face-color:#1A1A1A; - scrollbar-track-color:#171717; - scrollbar-highlight-color:#171717; -} - -em { - font-style: normal; - font-weight: bold; -} - -img { - margin: 0; - padding: 0; - line-height: 1; - -ms-interpolation-mode: nearest-neighbor; - image-rendering: pixelated; -} - -img.icon { - height: 1em; - min-height: 1em; - width: auto; - vertical-align: bottom; -} - -.r:before { /* "repeated" badge class for combined messages */ - content: 'x'; -} -.r { - display: inline-block; - min-width: 0.5em; - font-size: 0.7em; - padding: 0.2em 0.3em; - line-height: 1; - color: white; - text-align: center; - white-space: nowrap; - vertical-align: middle; - background-color: crimson; - border-radius: 10px; -} - -a {color: #397ea5;} -a.visited {color: #7c00e6;} -a:visited {color: #7c00e6;} -a.popt {text-decoration: none;} - -/***************************************** -* -* OUTPUT NOT RELATED TO ACTUAL MESSAGES -* -******************************************/ -#loading { - position: fixed; - width: 300px; - height: 150px; - text-align: center; - left: 50%; - top: 50%; - margin: -75px 0 0 -150px; -} -#loading i {display: block; padding-bottom: 3px;} - -#messages { - font-size: 13px; - padding: 3px; - margin: 0; - word-wrap: break-word; -} -#newMessages { - position: fixed; - display: block; - bottom: 0; - right: 0; - padding: 8px; - background: #202020; - text-decoration: none; - font-variant: small-caps; - font-size: 1.1em; - font-weight: bold; - color: #a4bad6; -} -#newMessages:hover {background: #171717;} -#newMessages i {vertical-align: middle; padding-left: 3px;} -#userBar { - position: fixed; - top: 0; - right: 0; -} -#userBar .subCell { - background: #202020; - height: 30px; - padding: 5px 0; - display: block; - color: #a4bad6; - text-decoration: none; - line-height: 28px; - border-top: 1px solid #171717; -} -#userBar .subCell:hover {background: #202020;} -#userBar .toggle { - width: 45px; - background: #202020; - border-top: 0; - float: right; - text-align: center; -} -#userBar .sub {clear: both; display: none; width: 180px;} -#userBar .sub.scroll {overflow-y: scroll;} -#userBar .sub.subCell {padding: 3px 0 3px 8px; line-height: 30px; font-size: 0.9em; clear: both;} -#userBar .sub span { - display: block; - line-height: 30px; - float: left; -} -#userBar .sub i { - display: block; - padding: 0 5px; - font-size: 1.1em; - width: 22px; - text-align: center; - line-height: 30px; - float: right; -} -#userBar .sub input { - position: absolute; - padding: 7px 5px; - width: 121px; - line-height: 30px; - float: left; -} -#userBar .topCell {border-top: 0;} - -/* POPUPS */ -.popup { - position: fixed; - top: 50%; - left: 50%; - background: #ddd; -} -.popup .close { - position: absolute; - background: #aaa; - top: 0; - right: 0; - color: #333; - text-decoration: none; - z-index: 2; - padding: 0 10px; - height: 30px; - line-height: 30px; -} -.popup .close:hover {background: #999;} -.popup .head { - background: #999; - color: #ddd; - padding: 0 10px; - height: 30px; - line-height: 30px; - text-transform: uppercase; - font-size: 0.9em; - font-weight: bold; - border-bottom: 2px solid green; -} -.popup input {border: 1px solid #999; background: #fff; margin: 0; padding: 5px; outline: none; color: #333;} -.popup input[type=text]:hover, .popup input[type=text]:active, .popup input[type=text]:focus {border-color: green;} -.popup input[type=submit] {padding: 5px 10px; background: #999; color: #ddd; text-transform: uppercase; font-size: 0.9em; font-weight: bold;} -.popup input[type=submit]:hover, .popup input[type=submit]:focus, .popup input[type=submit]:active {background: #aaa; cursor: pointer;} - -.changeFont {padding: 10px;} -.changeFont a {display: block; text-decoration: none; padding: 3px; color: #333;} -.changeFont a:hover {background: #ccc;} - -.highlightPopup {padding: 10px; text-align: center;} -.highlightPopup input[type=text] {display: block; width: 215px; text-align: left; margin-top: 5px;} -.highlightPopup input.highlightColor {background-color: #FFFF00;} -.highlightPopup input.highlightTermSubmit {margin-top: 5px;} - -/* ADMIN CONTEXT MENU */ -.contextMenu { - background-color: #ddd; - position: fixed; - margin: 2px; - width: 150px; -} -.contextMenu a { - display: block; - padding: 2px 5px; - text-decoration: none; - color: #333; -} - -.contextMenu a:hover { - background-color: #ccc; -} - -/* ADMIN FILTER MESSAGES MENU */ -.filterMessages {padding: 5px;} -.filterMessages div {padding: 2px 0;} -.filterMessages input {} -.filterMessages label {} - -.icon-stack {height: 1em; line-height: 1em; width: 1em; vertical-align: middle; margin-top: -2px;} - - -/***************************************** -* -* OUTPUT ACTUALLY RELATED TO MESSAGES -* -******************************************/ - -/* MOTD */ -.motd {color: #a4bad6; font-family: Verdana, sans-serif;} -.motd h1, .motd h2, .motd h3, .motd h4, .motd h5, .motd h6 {color: #a4bad6; text-decoration: underline;} -.motd a, .motd a:link, .motd a:visited, .motd a:active, .motd a:hover {color: #a4bad6;} - -/* ADD HERE FOR BOLD */ -.bold, .name, .prefix, .ooc, .looc, .adminooc, .admin, .medal, .yell {font-weight: bold;} - -/* ADD HERE FOR ITALIC */ -.italic, .italics, .emote {font-style: italic;} - -/* OUTPUT COLORS */ -.highlight {background: yellow;} - -h1, h2, h3, h4, h5, h6 {color: #a4bad6;font-family: Georgia, Verdana, sans-serif;} - -em {font-style: normal; font-weight: bold;} - -/* LOG */ -.log_message {color: #386aff; font-weight: bold;} - -/* OOC */ -.ooc img.text_tag {width: 32px; height: 10px;} - -.ooc .everyone {color: #002eb8;} -.ooc .looc {color: #3a7496;} -.ooc .elevated {color: #2e78d9;} -.ooc .moderator {color: #184880;} -.ooc .developer {color: #1b521f;} -.ooc .admin {color: #b82e00;} -.ooc .aooc {color: #960018;} - -/* Admin: Private Messages */ -.pm .howto {color: #ff0000; font-weight: bold; font-size: 200%;} -.pm .in {color: #ff0000;} -.pm .out {color: #ff0000;} -.pm .other {color: #0000ff;} - -/* Admin: Channels */ -.mod_channel {color: #735638; font-weight: bold;} -.mod_channel .admin {color: #b82e00; font-weight: bold;} -.admin_channel {color: #9611d4; font-weight: bold;} - -/* Radio: Misc */ -.deadsay {color: #530fad;} -.radio {color: #008000;} -.deptradio {color: #ff00ff;} /* when all other department colors fail */ -.newscaster {color: #750000;} - -/* Radio Channels */ -.comradio {color: #193a7a;} -.syndradio {color: #6d3f40;} -.centradio {color: #5c5c8a;} -.airadio {color: #ff00ff;} -.entradio {color: #339966;} - -.secradio {color: #a30000;} -.engradio {color: #a66300;} -.medradio {color: #008160;} -.sciradio {color: #993399;} -.supradio {color: #5f4519;} -.srvradio {color: #6eaa2c;} -.expradio {color: #a3a332;} - -.hailradio {color: #cc00aa;} -.exampleradio {color: #ff00ff;} -.voxradio {color: #f32b06;} -.bearcatradio {color: #590e2d;} -.colonyradio {color: #ceaf3e;} -.verneradio {color: #738465;} - -/* Miscellaneous */ -.name {font-weight: bold;} -.alert {color: #ff0000;} -h1.alert, h2.alert {color: #000080;} - -.emote {font-style: italic;} - -/* Game Messages */ -.attack {color: #ff0000;} -.moderate {color: #cc0000;} -.disarm {color: #990000;} -.passive {color: #660000;} - -.danger {color: #ff0000; font-weight: bold;} -.warning {color: #ff0000; font-style: italic;} -.boldannounce {color: #ff0000; font-weight: bold;} -.rose {color: #ff5050;} -.info {color: #0000cc;} -.debug {color: #ff00ff;} -.notice {color: #000099;} -.alium {color: #00ff00;} -.cult {color: #800080; font-weight: bold; font-style: italic;} - - -/* Languages */ -.alien {color: #855d85;} -.changeling {color: #059223; font-style: italic;} -.tajaran {color: #803b56;} -.tajaran_signlang {color: #941c1c;} -.skrell {color: #00ced1;} -.soghun {color: #228b22;} -.nabber_lang {color: #525252;} -.solcom {color: #22228b;} -.vox {color: #aa00aa;} -.rough {font-family: "Trebuchet MS", cursive, sans-serif;} -.say_quote {font-family: Georgia, Verdana, sans-serif;} -.terran {color: #9c250b;} -.moon {color: #422863;} -.spacer {color: #ff6600;} - -.interface {color: #750e75;} - -.good {color: #4f7529; font-weight: bold;} -.bad {color: #ee0000; font-weight: bold;} - -@keyframes hypnocolor { - 0% {color: #202020;} - 25% {color: #4b02ac;} - 50% {color: #9f41f1;} - 75% {color: #541c9c;} - 100% {color: #7adbf3;} -} - -.phobia {color: #dd0000; font-weight: bold; animation: phobia 750ms infinite;} -@keyframes phobia { - 0% {color: #f75a5a;} - 50% {color: #dd0000;} - 100% {color: #f75a5a;} -} - -.icon {height: 1em; width: auto;} - -.connectionClosed, .fatalError {background: red; color: white; padding: 5px;} -.connectionClosed.restored {background: green;} -.internal.boldnshit {color: #3d5bc3; font-weight: bold;} - -/* HELPER CLASSES */ -.text-normal {font-weight: normal; font-style: normal;} -.hidden {display: none; visibility: hidden;} diff --git a/code/modules/goonchat/browserassets/html/browserOutput.html b/code/modules/goonchat/browserassets/html/browserOutput.html deleted file mode 100644 index 03d7725c928bb..0000000000000 --- a/code/modules/goonchat/browserassets/html/browserOutput.html +++ /dev/null @@ -1,75 +0,0 @@ - - - - Chat - - - - - - - - - - -
              - -
              - Loading...

              - If this takes longer than 30 seconds, it will automatically reload a maximum of 5 times.
              - If it still doesn't work, use the bug report button at the top right of the window. -
              -
              -
              - -
              - - - - diff --git a/code/modules/goonchat/browserassets/js/browserOutput.js b/code/modules/goonchat/browserassets/js/browserOutput.js deleted file mode 100644 index a1aaf4b089623..0000000000000 --- a/code/modules/goonchat/browserassets/js/browserOutput.js +++ /dev/null @@ -1,1111 +0,0 @@ - -/***************************************** -* -* FUNCTION AND VAR DECLARATIONS -* -******************************************/ - -//DEBUG STUFF -var escaper = encodeURIComponent || escape; -var decoder = decodeURIComponent || unescape; -window.onerror = function(msg, url, line, col, error) { - if (document.location.href.indexOf("proc=debug") <= 0) { - var extra = !col ? '' : ' | column: ' + col; - extra += !error ? '' : ' | error: ' + error; - extra += !navigator.userAgent ? '' : ' | user agent: ' + navigator.userAgent; - var debugLine = 'Error: ' + msg + ' | url: ' + url + ' | line: ' + line + extra; - window.location = '?_src_=chat&proc=debug¶m[error]='+escaper(debugLine); - } - return true; -}; - -//Globals -window.status = 'Output'; -var $messages, $subTheme, $subOptions, $subFont, $selectedSub, $contextMenu, $filterMessages, $last_message; -var opts = { - //General - 'messageCount': 0, //A count...of messages... - 'messageLimit': 2053, //A limit...for the messages... - 'scrollSnapTolerance': 10, //If within x pixels of bottom - 'clickTolerance': 10, //Keep focus if outside x pixels of mousedown position on mouseup - 'imageRetryDelay': 50, //how long between attempts to reload images (in ms) - 'imageRetryLimit': 50, //how many attempts should we make? - 'popups': 0, //Amount of popups opened ever - 'wasd': false, //Is the user in wasd mode? - 'priorChatHeight': 0, //Thing for height-resizing detection - 'restarting': false, //Is the round restarting? - 'iconsize': 12, - - //Options menu - 'selectedSubLoop': null, //Contains the interval loop for closing the selected sub menu - 'suppressSubClose': false, //Whether or not we should be hiding the selected sub menu - 'highlightTerms': [], - 'highlightLimit': 5, - 'highlightColor': '#FFFF00', //The color of the highlighted message - 'pingDisabled': false, //Has the user disabled the ping counter - - //Ping display - 'lastPang': 0, //Timestamp of the last response from the server. - 'pangLimit': 35000, - 'pingTime': 0, //Timestamp of when ping sent - 'pongTime': 0, //Timestamp of when ping received - 'noResponse': false, //Tracks the state of the previous ping request - 'noResponseCount': 0, //How many failed pings? - - //Clicks - 'mouseDownX': null, - 'mouseDownY': null, - 'preventFocus': false, //Prevents switching focus to the game window - - //Client Connection Data - 'clientDataLimit': 5, - 'clientData': [], - - 'font': 'Arial', - 'messageCombining': true, - -}; -var replaceRegexes = {}; - -function clamp(val, min, max) { - return Math.max(min, Math.min(val, max)) -} - -function outerHTML(el) { - var wrap = document.createElement('div'); - wrap.appendChild(el.cloneNode(true)); - return wrap.innerHTML; -} - -//Polyfill for fucking date now because of course IE8 and below don't support it -if (!Date.now) { - Date.now = function now() { - return new Date().getTime(); - }; -} -//Polyfill for trim() (IE8 and below) -if (typeof String.prototype.trim !== 'function') { - String.prototype.trim = function () { - return this.replace(/^\s+|\s+$/g, ''); - }; -} - -// Linkify the contents of a node, within its parent. -function linkify(parent, insertBefore, text) { - var start = 0; - var match; - var regex = /(?:(?:https?:\/\/)|(?:www\.))(?:[^ ]*?\.[^ ]*?)+[-A-Za-z0-9+&@#\/%?=~_|$!:,.;()]+/ig; - while ((match = regex.exec(text)) !== null) { - // add the unmatched text - parent.insertBefore(document.createTextNode(text.substring(start, match.index)), insertBefore); - - var href = match[0]; - if (!/^https?:\/\//i.test(match[0])) { - href = "http://" + match[0]; - } - - // add the link - var link = document.createElement("a"); - link.href = href; - link.textContent = match[0]; - parent.insertBefore(link, insertBefore); - - start = regex.lastIndex; - } - if (start !== 0) { - // add the remaining text and remove the original text node - parent.insertBefore(document.createTextNode(text.substring(start)), insertBefore); - parent.removeChild(insertBefore); - } -} - -// Recursively linkify the children of a given node. -function linkify_node(node) { - var children = node.childNodes; - // work backwards to avoid the risk of looping forever on our own output - for (var i = children.length - 1; i >= 0; --i) { - var child = children[i]; - if (child.nodeType == Node.TEXT_NODE) { - // text is to be linkified - linkify(node, child, child.textContent); - } else if (child.nodeName != "A" && child.nodeName != "a") { - // do not linkify existing links - linkify_node(child); - } - } -} - -//Shit fucking piece of crap that doesn't work god fuckin damn it -function linkify_fallback(text) { - var rex = /((?:'+$0+''; - } - else { - return $1 ? $0: ''+$0+''; - } - }); -} - -function byondDecode(message) { - // Basically we url_encode twice server side so we can manually read the encoded version and actually do UTF-8. - // The replace for + is because FOR SOME REASON, BYOND replaces spaces with a + instead of %20, and a plus with %2b. - // Marvelous. - message = message.replace(/\+/g, "%20"); - try { - // This is a workaround for the above not always working when BYOND's shitty url encoding breaks. (byond bug id:2399401) - if (decodeURIComponent) { - message = decodeURIComponent(message); - } else { - throw new Error("Easiest way to trigger the fallback") - } - } catch (err) { - message = unescape(message); - } - return message; -} - -function replaceRegex() { - var selectedRegex = replaceRegexes[$(this).attr('replaceRegex')]; - if (selectedRegex) { - var replacedText = $(this).html().replace(selectedRegex[0], selectedRegex[1]); - $(this).html(replacedText); - } - $(this).removeAttr('replaceRegex'); -} - -//Actually turns the highlight term match into appropriate html -function addHighlightMarkup(match) { - var extra = ''; - if (opts.highlightColor) { - extra += ' style="background-color: '+opts.highlightColor+'"'; - } - return ''+match+''; -} - -//Highlights words based on user settings -function highlightTerms(el) { - if (el.children.length > 0) { - for(var h = 0; h < el.children.length; h++){ - highlightTerms(el.children[h]); - } - } - - var hasTextNode = false; - for (var node = 0; node < el.childNodes.length; node++) - { - if (el.childNodes[node].nodeType === 3) - { - hasTextNode = true; - break; - } - } - - if (hasTextNode) { //If element actually has text - var newText = ''; - for (var c = 0; c < el.childNodes.length; c++) { //Each child element - if (el.childNodes[c].nodeType === 3) { //Is it text only? - var words = el.childNodes[c].data.split(' '); - for (var w = 0; w < words.length; w++) { //Each word in the text - var newWord = null; - for (var i = 0; i < opts.highlightTerms.length; i++) { //Each highlight term - if (opts.highlightTerms[i] && words[w].toLowerCase().indexOf(opts.highlightTerms[i].toLowerCase()) > -1) { //If a match is found - newWord = words[w].replace("<", "<").replace(new RegExp(opts.highlightTerms[i], 'gi'), addHighlightMarkup); - break; - } - if (window.console) - console.log(newWord) - } - newText += newWord || words[w].replace("<", "<"); - newText += w >= words.length ? '' : ' '; - } - } else { //Every other type of element - newText += outerHTML(el.childNodes[c]); - } - } - el.innerHTML = newText; - } -} - -function iconError(E) { - var that = this; - setTimeout(function() { - var attempts = $(that).data('reload_attempts'); - if (typeof attempts === 'undefined' || !attempts) { - attempts = 1; - } - if (attempts > opts.imageRetryLimit) - return; - var src = that.src; - that.src = null; - that.src = src+'#'+attempts; - $(that).data('reload_attempts', ++attempts); - }, opts.imageRetryDelay); -} - -function updateIconsSize(html) { - $(html).find(".icon").not('.text_tag').css({'height': opts.iconsize, 'width': opts.iconsize}); -} - -//Send a message to the client -function output(message, flag) { - if (typeof message === 'undefined') { - return; - } - if (typeof flag === 'undefined') { - flag = ''; - } - - if (flag !== 'internal') - opts.lastPang = Date.now(); - - message = byondDecode(message).trim(); - - //The behemoth of filter-code (for Admin message filters) - //Note: This is proooobably hella inefficient - var filteredOut = false; - if (opts.hasOwnProperty('showMessagesFilters') && !opts.showMessagesFilters['All'].show) { - //Get this filter type (defined by class on message) - var messageHtml = $.parseHTML(message), - messageClasses; - if (opts.hasOwnProperty('filterHideAll') && opts.filterHideAll) { - var internal = false; - messageClasses = (!!$(messageHtml).attr('class') ? $(messageHtml).attr('class').split(/\s+/) : false); - if (messageClasses) { - for (var i = 0; i < messageClasses.length; i++) { //Every class - if (messageClasses[i] == 'internal') { - internal = true; - break; - } - } - } - if (!internal) { - filteredOut = 'All'; - } - } else { - //If the element or it's child have any classes - if (!!$(messageHtml).attr('class') || !!$(messageHtml).children().attr('class')) { - messageClasses = $(messageHtml).attr('class').split(/\s+/); - if (!!$(messageHtml).children().attr('class')) { - messageClasses = messageClasses.concat($(messageHtml).children().attr('class').split(/\s+/)); - } - var tempCount = 0; - for (var i = 0; i < messageClasses.length; i++) { //Every class - var thisClass = messageClasses[i]; - $.each(opts.showMessagesFilters, function(key, val) { //Every filter - if (key !== 'All' && val.show === false && typeof val.match != 'undefined') { - for (var i = 0; i < val.match.length; i++) { - var matchClass = val.match[i]; - if (matchClass == thisClass) { - filteredOut = key; - break; - } - } - } - if (filteredOut) return false; - }); - if (filteredOut) break; - tempCount++; - } - } else { - if (!opts.showMessagesFilters['Misc'].show) { - filteredOut = 'Misc'; - } - } - } - } - - //Stuff we do along with appending a message - var atBottom = false; - if (!filteredOut) { - var bodyHeight = $('body').height(); - var messagesHeight = $messages.outerHeight(); - var scrollPos = $('body,html').scrollTop(); - - //Should we snap the output to the bottom? - if (bodyHeight + scrollPos >= messagesHeight - opts.scrollSnapTolerance) { - atBottom = true; - if ($('#newMessages').length) { - $('#newMessages').remove(); - } - //If not, put the new messages box in - } else { - if ($('#newMessages').length) { - var messages = $('#newMessages .number').text(); - messages = parseInt(messages); - messages++; - $('#newMessages .number').text(messages); - if (messages == 2) { - $('#newMessages .messageWord').append('s'); - } - } else { - $messages.after('1 new message '); - } - } - } - - opts.messageCount++; - - //Pop the top message off if history limit reached - if (opts.messageCount >= opts.messageLimit) { - $messages.children('div.entry:first-child').remove(); - opts.messageCount--; //I guess the count should only ever equal the limit - } - - // Create the element - if combining is off, we use it, and if it's on, we - // might discard it bug need to check its text content. Some messages vary - // only in HTML markup, have the same text content, and should combine. - var entry = document.createElement('div'); - entry.innerHTML = message; - var trimmed_message = entry.textContent || entry.innerText || ""; - - var handled = false; - if (opts.messageCombining) { - var lastmessages = $messages.children('div.entry:last-child').last(); - if (lastmessages.length && $last_message && $last_message == trimmed_message) { - var badge = lastmessages.children('.r').last(); - if (badge.length) { - badge = badge.detach(); - badge.text(parseInt(badge.text()) + 1); - } else { - badge = $('', {'class': 'r', 'text': 2}); - } - lastmessages.html(message.replace(/\s*$/g,' ')); - lastmessages.find('[replaceRegex]').each(replaceRegex); - lastmessages.append(badge); - badge.animate({ - "font-size": "0.9em" - }, 100, function() { - badge.animate({ - "font-size": "0.7em" - }, 100); - }); - opts.messageCount--; - handled = true; - } - } - - if (!handled) { - //Actually append the message - entry.className = 'entry'; - - if (filteredOut) { - entry.className += ' hidden'; - entry.setAttribute('data-filter', filteredOut); - } - - $(entry).find('[replaceRegex]').each(replaceRegex); - - $last_message = trimmed_message; - $messages[0].appendChild(entry); - - updateIconsSize(entry); - - $(entry).find("img.icon").error(iconError); - - var to_linkify = $(entry).find(".linkify"); - if (typeof Node === 'undefined') { - // Linkify fallback for old IE - for(var i = 0; i < to_linkify.length; ++i) { - to_linkify[i].innerHTML = linkify_fallback(to_linkify[i].innerHTML); - } - } else { - // Linkify for modern IE versions - for(var i = 0; i < to_linkify.length; ++i) { - linkify_node(to_linkify[i]); - } - } - - //Actually do the snap - //Stuff we can do after the message shows can go here, in the interests of responsiveness - if (opts.highlightTerms && opts.highlightTerms.length > 0) { - highlightTerms(entry); - } - } - - if (!filteredOut && atBottom) { - $('body,html').scrollTop($messages.outerHeight()); - } -} - -function internalOutput(message, flag) -{ - output(escaper(message), flag) -} - -//Runs a route within byond, client or server side. Consider this "ehjax" for byond. -function runByond(uri) { - window.location = uri; -} - -function setCookie(cname, cvalue, exdays) { - cvalue = escaper(cvalue); - var d = new Date(); - d.setTime(d.getTime() + (exdays*24*60*60*1000)); - var expires = 'expires='+d.toUTCString(); - document.cookie = cname + '=' + cvalue + '; ' + expires + "; path=/"; -} - -function getCookie(cname) { - var name = cname + '='; - var ca = document.cookie.split(';'); - for(var i=0; i < ca.length; i++) { - var c = ca[i]; - while (c.charAt(0)==' ') c = c.substring(1); - if (c.indexOf(name) === 0) { - return decoder(c.substring(name.length,c.length)); - } - } - return ''; -} - -function rgbToHex(R,G,B) {return toHex(R)+toHex(G)+toHex(B);} -function toHex(n) { - n = parseInt(n,10); - if (isNaN(n)) return "00"; - n = Math.max(0,Math.min(n,255)); - return "0123456789ABCDEF".charAt((n-n%16)/16) + "0123456789ABCDEF".charAt(n%16); -} - -function setTheme(theme) { - if (theme === 'white') { - document.getElementById("sheetofstyles").href = "browserOutput_white.css"; - runByond('?_src_=chat&proc=swaptolightmode'); - } else if (theme === 'dark') { - document.getElementById("sheetofstyles").href = "browserOutput.css"; - runByond('?_src_=chat&proc=swaptodarkmode'); - } - - setCookie('theme', theme, 365); - internalOutput('Set theme: '+theme+'', 'internal'); -} - -function handleClientData(ckey, ip, compid) { - //byond sends player info to here - var currentData = {'ckey': ckey, 'ip': ip, 'compid': compid}; - if (opts.clientData && !$.isEmptyObject(opts.clientData)) { - runByond('?_src_=chat&proc=analyzeClientData¶m[cookie]='+JSON.stringify({'connData': opts.clientData})); - - for (var i = 0; i < opts.clientData.length; i++) { - var saved = opts.clientData[i]; - if (currentData.ckey == saved.ckey && currentData.ip == saved.ip && currentData.compid == saved.compid) { - return; //Record already exists - } - } - //Lets make sure we obey our limit (can connect from server with higher limit) - while (opts.clientData.length >= opts.clientDataLimit) { - opts.clientData.shift(); - } - } else { - runByond('?_src_=chat&proc=analyzeClientData¶m[cookie]=none'); - } - - //Update the cookie with current details - opts.clientData.push(currentData); - setCookie('connData', JSON.stringify(opts.clientData), 365); -} - -//Server calls this on ehjax response -//Or, y'know, whenever really -function ehjaxCallback(data) { - opts.lastPang = Date.now(); - if (data == 'softPang') { - return; - } else if (data == 'pang') { - opts.pingCounter = 0; //reset - opts.pingTime = Date.now(); - runByond('?_src_=chat&proc=ping'); - - } else if (data == 'pong') { - if (opts.pingDisabled) {return;} - opts.pongTime = Date.now(); - var pingDuration = Math.ceil((opts.pongTime - opts.pingTime) / 2); - $('#pingMs').text(pingDuration+'ms'); - pingDuration = Math.min(pingDuration, 255); - var red = pingDuration; - var green = 255 - pingDuration; - var blue = 0; - var hex = rgbToHex(red, green, blue); - $('#pingDot').css('color', '#'+hex); - - } else if (data == 'roundrestart') { - opts.restarting = true; - internalOutput('
              The connection has been closed because the server is restarting. Please wait while you automatically reconnect.
              ', 'internal'); - } else { - //Oh we're actually being sent data instead of an instruction - var dataJ; - try { - dataJ = $.parseJSON(data); - } catch (e) { - //But...incorrect :sadtrombone: - window.onerror('JSON: '+e+'. '+data, 'browserOutput.html', 327); - return; - } - data = dataJ; - - if (data.clientData) { - if (opts.restarting) { - opts.restarting = false; - $('.connectionClosed.restarting:not(.restored)').addClass('restored').text('The round restarted and you successfully reconnected!'); - } - if (!data.clientData.ckey && !data.clientData.ip && !data.clientData.compid) { - //TODO: Call shutdown perhaps - return; - } else { - handleClientData(data.clientData.ckey, data.clientData.ip, data.clientData.compid); - } - } else if (data.syncRegex) { - for (var i in data.syncRegex) { - - var regexData = data.syncRegex[i]; - var regexName = regexData[0]; - var regexFlags = regexData[1]; - var regexReplaced = regexData[2]; - - replaceRegexes[i] = [new RegExp(regexName, regexFlags), regexReplaced]; - } - } - } -} - -function createPopup(contents, width) { - opts.popups++; - $('body').append(''); - - //Attach close popup event - var $popup = $('#popup'+opts.popups); - var height = $popup.outerHeight(); - $popup.css({'height': height+'px', 'margin': '-'+(height/2)+'px 0 0 -'+(width/2)+'px'}); - - $popup.on('click', '.close', function(e) { - e.preventDefault(); - $popup.remove(); - }); -} - -function toggleWasd(state) { - opts.wasd = (state == 'on' ? true : false); -} - -function subSlideUp() { - $(this).removeClass('scroll'); - $(this).css('height', ''); -} - -function startSubLoop() { - if (opts.selectedSubLoop) { - clearInterval(opts.selectedSubLoop); - } - return setInterval(function() { - if (!opts.suppressSubClose && $selectedSub.is(':visible')) { - $selectedSub.slideUp('fast', subSlideUp); - clearInterval(opts.selectedSubLoop); - } - }, 5000); //every 5 seconds -} - -function handleToggleClick($sub, $toggle) { - if ($selectedSub !== $sub && $selectedSub.is(':visible')) { - $selectedSub.slideUp('fast', subSlideUp); - } - $selectedSub = $sub - if ($selectedSub.is(':visible')) { - $selectedSub.slideUp('fast', subSlideUp); - clearInterval(opts.selectedSubLoop); - } else { - $selectedSub.slideDown('fast', function() { - var windowHeight = $(window).height(); - var toggleHeight = $toggle.outerHeight(); - var priorSubHeight = $selectedSub.outerHeight(); - var newSubHeight = windowHeight - toggleHeight; - $(this).height(newSubHeight); - if (priorSubHeight > (windowHeight - toggleHeight)) { - $(this).addClass('scroll'); - } - }); - opts.selectedSubLoop = startSubLoop(); - } -} - -/***************************************** -* -* DOM READY -* -******************************************/ - -if (typeof $ === 'undefined') { - var div = document.getElementById('loading').childNodes[1]; - div += '

              ERROR: Jquery did not load.'; -} - -$(function() { - $messages = $('#messages'); - $subTheme = $('#subTheme'); - $subOptions = $('#subOptions'); - $subFont = $('#subFont'); - $selectedSub = $subOptions; - - //Hey look it's a controller loop! - setInterval(function() { - if (opts.lastPang + opts.pangLimit < Date.now() && !opts.restarting) { //Every pingLimit - if (!opts.noResponse) { //Only actually append a message if the previous ping didn't also fail (to prevent spam) - opts.noResponse = true; - opts.noResponseCount++; - internalOutput('
              You are either AFK, experiencing lag or the connection has closed.
              ', 'internal'); - } - } else if (opts.noResponse) { //Previous ping attempt failed ohno - $('.connectionClosed[data-count="'+opts.noResponseCount+'"]:not(.restored)').addClass('restored').text('Your connection has been restored (probably)!'); - opts.noResponse = false; - } - }, 2000); //2 seconds - - - /***************************************** - * - * LOAD SAVED CONFIG - * - ******************************************/ - var savedConfig = { - fontsize: getCookie('fontsize'), - iconsize: getCookie('iconsize'), - lineheight: getCookie('lineheight'), - 'spingDisabled': getCookie('pingdisabled'), - 'shighlightTerms': getCookie('highlightterms'), - 'shighlightColor': getCookie('highlightcolor'), - 'sfont': getCookie('font'), - 'smessagecombining': getCookie('messagecombining'), - 'stheme': getCookie('theme'), - }; - - if (savedConfig.fontsize) { - $messages.css('font-size', savedConfig.fontsize); - internalOutput('Loaded font size setting of: '+savedConfig.fontsize+'', 'internal'); - } - if (savedConfig.iconsize) { - opts.iconsize = savedConfig.iconsize; - updateIconsSize($messages); - internalOutput('Loaded icon size setting of: '+savedConfig.iconsize+'', 'internal'); - } - if (savedConfig.lineheight) { - $("body").css('line-height', savedConfig.lineheight); - internalOutput('Loaded line height setting of: '+savedConfig.lineheight+'', 'internal'); - } - if(savedConfig.stheme){ - setTheme(savedConfig.stheme); - } - if (savedConfig.spingDisabled) { - if (savedConfig.spingDisabled == 'true') { - opts.pingDisabled = true; - $('#ping').hide(); - } - internalOutput('Loaded ping display of: '+(opts.pingDisabled ? 'hidden' : 'visible')+'', 'internal'); - } - if (savedConfig.shighlightTerms) { - var savedTerms = $.parseJSON(savedConfig.shighlightTerms); - var actualTerms = ''; - for (var i = 0; i < savedTerms.length; i++) { - if (savedTerms[i]) { - actualTerms += savedTerms[i] + ', '; - } - } - if (actualTerms) { - actualTerms = actualTerms.substring(0, actualTerms.length - 2); - internalOutput('Loaded highlight strings of: ' + actualTerms+'', 'internal'); - opts.highlightTerms = savedTerms; - } - } - if (savedConfig.shighlightColor) { - opts.highlightColor = savedConfig.shighlightColor; - internalOutput('Loaded highlight color of: '+savedConfig.shighlightColor+'', 'internal'); - } - if (savedConfig.sfont) { - $('body').css({'font-family': savedConfig.sfont}); - internalOutput('Loaded font: '+savedConfig.sfont+'', 'internal'); - } - - if (savedConfig.smessagecombining) { - if (savedConfig.smessagecombining == 'false') { - opts.messageCombining = false; - } else { - opts.messageCombining = true; - } - } - (function() { - var dataCookie = getCookie('connData'); - if (dataCookie) { - var dataJ; - try { - dataJ = $.parseJSON(dataCookie); - } catch (e) { - window.onerror('JSON '+e+'. '+dataCookie, 'browserOutput.html', 434); - return; - } - opts.clientData = dataJ; - } - })(); - - - /***************************************** - * - * BASE CHAT OUTPUT EVENTS - * - ******************************************/ - - $('body').on('click', 'a', function(e) { - e.preventDefault(); - }); - - $('body').on('mousedown', function(e) { - var $target = $(e.target); - - if ($contextMenu && opts.hasOwnProperty('contextMenuTarget') && opts.contextMenuTarget) { - hideContextMenu(); - return false; - } - - if ($target.is('a') || $target.parent('a').length || $target.is('input') || $target.is('textarea')) { - opts.preventFocus = true; - } else { - opts.preventFocus = false; - opts.mouseDownX = e.pageX; - opts.mouseDownY = e.pageY; - } - }); - - $messages.on('mousedown', function(e) { - if ($selectedSub && $selectedSub.is(':visible')) { - $selectedSub.slideUp('fast', subSlideUp); - clearInterval(opts.selectedSubLoop); - } - }); - - $('body').on('mouseup', function(e) { - if (!opts.preventFocus && - (e.pageX >= opts.mouseDownX - opts.clickTolerance && e.pageX <= opts.mouseDownX + opts.clickTolerance) && - (e.pageY >= opts.mouseDownY - opts.clickTolerance && e.pageY <= opts.mouseDownY + opts.clickTolerance) - ) { - opts.mouseDownX = null; - opts.mouseDownY = null; - runByond('byond://winset?mapwindow.map.focus=true'); - } - }); - - $messages.on('click', 'a', function(e) { - var href = $(this).attr('href'); - $(this).addClass('visited'); - if (href[0] == '?' || (href.length >= 8 && href.substring(0,8) == 'byond://')) { - runByond(href); - } else { - href = escaper(href); - runByond('?action=openLink&link='+href); - } - }); - - //Fuck everything about this event. Will look into alternatives. - $('body').on('keydown', function(e) { - if (e.target.nodeName == 'INPUT' || e.target.nodeName == 'TEXTAREA') { - return; - } - - if (e.ctrlKey || e.altKey || e.shiftKey) { //Band-aid "fix" for allowing ctrl+c copy paste etc. Needs a proper fix. - return; - } - - e.preventDefault() - - var k = e.which; - // Hardcoded because else there would be no feedback message. - if (k == 113) { // F2 - runByond('byond://winset?screenshot=auto'); - internalOutput('Screenshot taken', 'internal'); - } - - var c = ""; - switch (k) { - case 8: - c = 'BACK'; - case 9: - c = 'TAB'; - case 13: - c = 'ENTER'; - case 19: - c = 'PAUSE'; - case 27: - c = 'ESCAPE'; - case 33: // Page up - c = 'NORTHEAST'; - case 34: // Page down - c = 'SOUTHEAST'; - case 35: // End - c = 'SOUTHWEST'; - case 36: // Home - c = 'NORTHWEST'; - case 37: - c = 'WEST'; - case 38: - c = 'NORTH'; - case 39: - c = 'EAST'; - case 40: - c = 'SOUTH'; - case 45: - c = 'INSERT'; - case 46: - c = 'DELETE'; - case 93: // That weird thing to the right of alt gr. - c = 'APPS'; - - default: - c = String.fromCharCode(k); - } - - if (c.length == 0) { - if (!e.shiftKey) { - c = c.toLowerCase(); - } - runByond('byond://winset?mapwindow.map.focus=true;mainwindow.input.text='+c); - return false; - } else { - runByond('byond://winset?mapwindow.map.focus=true'); - return false; - } - }); - - //Mildly hacky fix for scroll issues on mob change (interface gets resized sometimes, messing up snap-scroll) - $(window).on('resize', function(e) { - if ($(this).height() !== opts.priorChatHeight) { - $('body,html').scrollTop($messages.outerHeight()); - opts.priorChatHeight = $(this).height(); - } - }); - - - /***************************************** - * - * OPTIONS INTERFACE EVENTS - * - ******************************************/ - - $('body').on('click', '#newMessages', function(e) { - var messagesHeight = $messages.outerHeight(); - $('body,html').scrollTop(messagesHeight); - $('#newMessages').remove(); - runByond('byond://winset?mapwindow.map.focus=true'); - }); - - $('#toggleOptions').click(function(e) { - handleToggleClick($subOptions, $(this)); - }); - - $('#toggleTheme').click(function(e) { - handleToggleClick($subTheme, $(this)); - }); - - $('#toggleFont').click(function(e) { - handleToggleClick($subFont, $(this)); - }); - - $('#toggleEmojis').click(function(e) { - runByond('?_src_=chat&proc=showEmojiList¶m[theme]='+savedConfig.stheme); - }); - - $('.sub, .toggle').mouseenter(function() { - opts.suppressSubClose = true; - }); - - $('.sub, .toggle').mouseleave(function() { - opts.suppressSubClose = false; - }); - - $('#setWhiteTheme').click(function() { - setTheme('white'); - savedConfig.stheme = 'white'; - }) - - $('#setDarkTheme').click(function() { - setTheme('dark'); - savedConfig.stheme = 'dark'; - }) - - $('#decreaseFont').click(function(e) { - savedConfig.fontsize = Math.max(parseInt(savedConfig.fontsize || 13) - 1, 1) + 'px'; - $messages.css({'font-size': savedConfig.fontsize}); - setCookie('fontsize', savedConfig.fontsize, 365); - internalOutput('Font size set to '+savedConfig.fontsize+'', 'internal'); - }); - - $('#increaseFont').click(function(e) { - savedConfig.fontsize = (parseInt(savedConfig.fontsize || 13) + 1) + 'px'; - $messages.css({'font-size': savedConfig.fontsize}); - setCookie('fontsize', savedConfig.fontsize, 365); - internalOutput('Font size set to '+savedConfig.fontsize+'', 'internal'); - }); - - $('#decreaseIcon').click(function(e) { - savedConfig.iconsize = Math.max((parseInt(savedConfig.iconsize) || 12) - 1, 1); - updateIconsSize($messages); - setCookie('iconsize', savedConfig.iconsize, 365); - opts.iconsize = savedConfig.iconsize; - internalOutput('Icon size set to '+savedConfig.iconsize+'', 'internal'); - }) - - $('#increaseIcon').click(function(e) { - savedConfig.iconsize = (parseInt(savedConfig.iconsize || 12) + 1); - updateIconsSize($messages); - setCookie('iconsize', savedConfig.iconsize, 365); - opts.iconsize = savedConfig.iconsize; - internalOutput('Icon size set to '+savedConfig.iconsize+'', 'internal'); - }) - - $('#decreaseLineHeight').click(function(e) { - savedConfig.lineheight = Math.max(parseFloat(savedConfig.lineheight || 1.2) - 0.1, 0.1).toFixed(1); - $("body").css({'line-height': savedConfig.lineheight}); - setCookie('lineheight', savedConfig.lineheight, 365); - internalOutput('Line height set to '+savedConfig.lineheight+'', 'internal'); - }); - - $('#increaseLineHeight').click(function(e) { - savedConfig.lineheight = (parseFloat(savedConfig.lineheight || 1.2) + 0.1).toFixed(1); - $("body").css({'line-height': savedConfig.lineheight}); - setCookie('lineheight', savedConfig.lineheight, 365); - internalOutput('Line height set to '+savedConfig.lineheight+'', 'internal'); - }); - - $('#togglePing').click(function(e) { - if (opts.pingDisabled) { - $('#ping').slideDown('fast'); - opts.pingDisabled = false; - } else { - $('#ping').slideUp('fast'); - opts.pingDisabled = true; - } - setCookie('pingdisabled', (opts.pingDisabled ? 'true' : 'false'), 365); - }); - - $('#saveLog').click(function(e) { - // Requires IE 10+ to issue download commands. Just opening a popup - // window will cause Ctrl+S to save a blank page, ignoring innerHTML. - if (!window.Blob) { - output('This function is only supported on IE 10 and up. Upgrade if possible.', 'internal'); - return; - } - - $.ajax({ - type: 'GET', - url: 'browserOutput_white.css', - success: function(styleData) { - var blob = new Blob(['Chat Log', $messages.html(), '']); - - var fname = 'SS13 Chat Log'; - var date = new Date(), month = date.getMonth(), day = date.getDay(), hours = date.getHours(), mins = date.getMinutes(), secs = date.getSeconds(); - fname += ' ' + date.getFullYear() + '-' + (month < 10 ? '0' : '') + month + '-' + (day < 10 ? '0' : '') + day; - fname += ' ' + (hours < 10 ? '0' : '') + hours + (mins < 10 ? '0' : '') + mins + (secs < 10 ? '0' : '') + secs; - fname += '.html'; - - window.navigator.msSaveBlob(blob, fname); - } - }); - }); - - $('#highlightTerm').click(function(e) { - if ($('.popup .highlightTerm').is(':visible')) {return;} - var termInputs = ''; - for (var i = 0; i < opts.highlightLimit; i++) { - termInputs += '
              '; - } - var popupContent = '
              String Highlighting
              ' + - '
              ' + - '
              Choose up to '+opts.highlightLimit+' strings that will highlight the line when they appear in chat.
              ' + - '
              ' + - termInputs + - '
              ' + - '
              ' + - '' + - '
              '; - createPopup(popupContent, 250); - }); - - $('body').on('keyup', '#highlightColor', function() { - var color = $('#highlightColor').val(); - color = color.trim(); - if (!color || color.charAt(0) != '#') return; - $('#highlightColor').css('background-color', color); - }); - - $('body').on('submit', '#highlightTermForm', function(e) { - e.preventDefault(); - - var count = 0; - while (count < opts.highlightLimit) { - var term = $('#highlightTermInput'+count).val(); - if (term) { - term = term.trim(); - if (term === '') { - opts.highlightTerms[count] = null; - } else { - opts.highlightTerms[count] = term.toLowerCase(); - } - } else { - opts.highlightTerms[count] = null; - } - count++; - } - - var color = $('#highlightColor').val(); - color = color.trim(); - if (color == '' || color.charAt(0) != '#') { - opts.highlightColor = '#FFFF00'; - } else { - opts.highlightColor = color; - } - var $popup = $('#highlightPopup').closest('.popup'); - $popup.remove(); - - setCookie('highlightterms', JSON.stringify(opts.highlightTerms), 365); - setCookie('highlightcolor', opts.highlightColor, 365); - }); - - $('#clearMessages').click(function() { - $messages.empty(); - opts.messageCount = 0; - }); - - $('#fontInputSpan').hover(function() { - $('#fontInput').removeClass('hidden'); - }, function() { - $('#fontInput').addClass('hidden'); - }); - - $('#fontInput').change(function() { - var newFont = $('#fontInput').val() || 'Verdana, sans-serif'; - $('body').css({'font-family': newFont}); - setCookie('font', newFont, 365); - opts.font = newFont; - internalOutput('Font set to: '+newFont+'', 'internal'); - }); - - $('#toggleCombine').click(function(e) { - opts.messageCombining = !opts.messageCombining; - setCookie('messagecombining', (opts.messageCombining ? 'true' : 'false'), 365); - }); - - $('img.icon').error(iconError); - - - - - /***************************************** - * - * KICK EVERYTHING OFF - * - ******************************************/ - - runByond('?_src_=chat&proc=doneLoading'); - if ($('#loading').is(':visible')) { - $('#loading').remove(); - } - $('#userBar').show(); - opts.priorChatHeight = $(window).height(); -}); diff --git a/code/modules/goonchat/browserassets/js/jquery.min.js b/code/modules/goonchat/browserassets/js/jquery.min.js deleted file mode 100644 index ab28a24729b32..0000000000000 --- a/code/modules/goonchat/browserassets/js/jquery.min.js +++ /dev/null @@ -1,4 +0,0 @@ -/*! jQuery v1.11.1 | (c) 2005, 2014 jQuery Foundation, Inc. | jquery.org/license */ -!function(a,b){"object"==typeof module&&"object"==typeof module.exports?module.exports=a.document?b(a,!0):function(a){if(!a.document)throw new Error("jQuery requires a window with a document");return b(a)}:b(a)}("undefined"!=typeof window?window:this,function(a,b){var c=[],d=c.slice,e=c.concat,f=c.push,g=c.indexOf,h={},i=h.toString,j=h.hasOwnProperty,k={},l="1.11.1",m=function(a,b){return new m.fn.init(a,b)},n=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,o=/^-ms-/,p=/-([\da-z])/gi,q=function(a,b){return b.toUpperCase()};m.fn=m.prototype={jquery:l,constructor:m,selector:"",length:0,toArray:function(){return d.call(this)},get:function(a){return null!=a?0>a?this[a+this.length]:this[a]:d.call(this)},pushStack:function(a){var b=m.merge(this.constructor(),a);return b.prevObject=this,b.context=this.context,b},each:function(a,b){return m.each(this,a,b)},map:function(a){return this.pushStack(m.map(this,function(b,c){return a.call(b,c,b)}))},slice:function(){return this.pushStack(d.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(a){var b=this.length,c=+a+(0>a?b:0);return this.pushStack(c>=0&&b>c?[this[c]]:[])},end:function(){return this.prevObject||this.constructor(null)},push:f,sort:c.sort,splice:c.splice},m.extend=m.fn.extend=function(){var a,b,c,d,e,f,g=arguments[0]||{},h=1,i=arguments.length,j=!1;for("boolean"==typeof g&&(j=g,g=arguments[h]||{},h++),"object"==typeof g||m.isFunction(g)||(g={}),h===i&&(g=this,h--);i>h;h++)if(null!=(e=arguments[h]))for(d in e)a=g[d],c=e[d],g!==c&&(j&&c&&(m.isPlainObject(c)||(b=m.isArray(c)))?(b?(b=!1,f=a&&m.isArray(a)?a:[]):f=a&&m.isPlainObject(a)?a:{},g[d]=m.extend(j,f,c)):void 0!==c&&(g[d]=c));return g},m.extend({expando:"jQuery"+(l+Math.random()).replace(/\D/g,""),isReady:!0,error:function(a){throw new Error(a)},noop:function(){},isFunction:function(a){return"function"===m.type(a)},isArray:Array.isArray||function(a){return"array"===m.type(a)},isWindow:function(a){return null!=a&&a==a.window},isNumeric:function(a){return!m.isArray(a)&&a-parseFloat(a)>=0},isEmptyObject:function(a){var b;for(b in a)return!1;return!0},isPlainObject:function(a){var b;if(!a||"object"!==m.type(a)||a.nodeType||m.isWindow(a))return!1;try{if(a.constructor&&!j.call(a,"constructor")&&!j.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(c){return!1}if(k.ownLast)for(b in a)return j.call(a,b);for(b in a);return void 0===b||j.call(a,b)},type:function(a){return null==a?a+"":"object"==typeof a||"function"==typeof a?h[i.call(a)]||"object":typeof a},globalEval:function(b){b&&m.trim(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(o,"ms-").replace(p,q)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()},each:function(a,b,c){var d,e=0,f=a.length,g=r(a);if(c){if(g){for(;f>e;e++)if(d=b.apply(a[e],c),d===!1)break}else for(e in a)if(d=b.apply(a[e],c),d===!1)break}else if(g){for(;f>e;e++)if(d=b.call(a[e],e,a[e]),d===!1)break}else for(e in a)if(d=b.call(a[e],e,a[e]),d===!1)break;return a},trim:function(a){return null==a?"":(a+"").replace(n,"")},makeArray:function(a,b){var c=b||[];return null!=a&&(r(Object(a))?m.merge(c,"string"==typeof a?[a]:a):f.call(c,a)),c},inArray:function(a,b,c){var d;if(b){if(g)return g.call(b,a,c);for(d=b.length,c=c?0>c?Math.max(0,d+c):c:0;d>c;c++)if(c in b&&b[c]===a)return c}return-1},merge:function(a,b){var c=+b.length,d=0,e=a.length;while(c>d)a[e++]=b[d++];if(c!==c)while(void 0!==b[d])a[e++]=b[d++];return a.length=e,a},grep:function(a,b,c){for(var d,e=[],f=0,g=a.length,h=!c;g>f;f++)d=!b(a[f],f),d!==h&&e.push(a[f]);return e},map:function(a,b,c){var d,f=0,g=a.length,h=r(a),i=[];if(h)for(;g>f;f++)d=b(a[f],f,c),null!=d&&i.push(d);else for(f in a)d=b(a[f],f,c),null!=d&&i.push(d);return e.apply([],i)},guid:1,proxy:function(a,b){var c,e,f;return"string"==typeof b&&(f=a[b],b=a,a=f),m.isFunction(a)?(c=d.call(arguments,2),e=function(){return a.apply(b||this,c.concat(d.call(arguments)))},e.guid=a.guid=a.guid||m.guid++,e):void 0},now:function(){return+new Date},support:k}),m.each("Boolean Number String Function Array Date RegExp Object Error".split(" "),function(a,b){h["[object "+b+"]"]=b.toLowerCase()});function r(a){var b=a.length,c=m.type(a);return"function"===c||m.isWindow(a)?!1:1===a.nodeType&&b?!0:"array"===c||0===b||"number"==typeof b&&b>0&&b-1 in a}var s=function(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u="sizzle"+-new Date,v=a.document,w=0,x=0,y=gb(),z=gb(),A=gb(),B=function(a,b){return a===b&&(l=!0),0},C="undefined",D=1<<31,E={}.hasOwnProperty,F=[],G=F.pop,H=F.push,I=F.push,J=F.slice,K=F.indexOf||function(a){for(var b=0,c=this.length;c>b;b++)if(this[b]===a)return b;return-1},L="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",M="[\\x20\\t\\r\\n\\f]",N="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",O=N.replace("w","w#"),P="\\["+M+"*("+N+")(?:"+M+"*([*^$|!~]?=)"+M+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+O+"))|)"+M+"*\\]",Q=":("+N+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+P+")*)|.*)\\)|)",R=new RegExp("^"+M+"+|((?:^|[^\\\\])(?:\\\\.)*)"+M+"+$","g"),S=new RegExp("^"+M+"*,"+M+"*"),T=new RegExp("^"+M+"*([>+~]|"+M+")"+M+"*"),U=new RegExp("="+M+"*([^\\]'\"]*?)"+M+"*\\]","g"),V=new RegExp(Q),W=new RegExp("^"+O+"$"),X={ID:new RegExp("^#("+N+")"),CLASS:new RegExp("^\\.("+N+")"),TAG:new RegExp("^("+N.replace("w","w*")+")"),ATTR:new RegExp("^"+P),PSEUDO:new RegExp("^"+Q),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+L+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Y=/^(?:input|select|textarea|button)$/i,Z=/^h\d$/i,$=/^[^{]+\{\s*\[native \w/,_=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ab=/[+~]/,bb=/'|\\/g,cb=new RegExp("\\\\([\\da-f]{1,6}"+M+"?|("+M+")|.)","ig"),db=function(a,b,c){var d="0x"+b-65536;return d!==d||c?b:0>d?String.fromCharCode(d+65536):String.fromCharCode(d>>10|55296,1023&d|56320)};try{I.apply(F=J.call(v.childNodes),v.childNodes),F[v.childNodes.length].nodeType}catch(eb){I={apply:F.length?function(a,b){H.apply(a,J.call(b))}:function(a,b){var c=a.length,d=0;while(a[c++]=b[d++]);a.length=c-1}}}function fb(a,b,d,e){var f,h,j,k,l,o,r,s,w,x;if((b?b.ownerDocument||b:v)!==n&&m(b),b=b||n,d=d||[],!a||"string"!=typeof a)return d;if(1!==(k=b.nodeType)&&9!==k)return[];if(p&&!e){if(f=_.exec(a))if(j=f[1]){if(9===k){if(h=b.getElementById(j),!h||!h.parentNode)return d;if(h.id===j)return d.push(h),d}else if(b.ownerDocument&&(h=b.ownerDocument.getElementById(j))&&t(b,h)&&h.id===j)return d.push(h),d}else{if(f[2])return I.apply(d,b.getElementsByTagName(a)),d;if((j=f[3])&&c.getElementsByClassName&&b.getElementsByClassName)return I.apply(d,b.getElementsByClassName(j)),d}if(c.qsa&&(!q||!q.test(a))){if(s=r=u,w=b,x=9===k&&a,1===k&&"object"!==b.nodeName.toLowerCase()){o=g(a),(r=b.getAttribute("id"))?s=r.replace(bb,"\\$&"):b.setAttribute("id",s),s="[id='"+s+"'] ",l=o.length;while(l--)o[l]=s+qb(o[l]);w=ab.test(a)&&ob(b.parentNode)||b,x=o.join(",")}if(x)try{return I.apply(d,w.querySelectorAll(x)),d}catch(y){}finally{r||b.removeAttribute("id")}}}return i(a.replace(R,"$1"),b,d,e)}function gb(){var a=[];function b(c,e){return a.push(c+" ")>d.cacheLength&&delete b[a.shift()],b[c+" "]=e}return b}function hb(a){return a[u]=!0,a}function ib(a){var b=n.createElement("div");try{return!!a(b)}catch(c){return!1}finally{b.parentNode&&b.parentNode.removeChild(b),b=null}}function jb(a,b){var c=a.split("|"),e=a.length;while(e--)d.attrHandle[c[e]]=b}function kb(a,b){var c=b&&a,d=c&&1===a.nodeType&&1===b.nodeType&&(~b.sourceIndex||D)-(~a.sourceIndex||D);if(d)return d;if(c)while(c=c.nextSibling)if(c===b)return-1;return a?1:-1}function lb(a){return function(b){var c=b.nodeName.toLowerCase();return"input"===c&&b.type===a}}function mb(a){return function(b){var c=b.nodeName.toLowerCase();return("input"===c||"button"===c)&&b.type===a}}function nb(a){return hb(function(b){return b=+b,hb(function(c,d){var e,f=a([],c.length,b),g=f.length;while(g--)c[e=f[g]]&&(c[e]=!(d[e]=c[e]))})})}function ob(a){return a&&typeof a.getElementsByTagName!==C&&a}c=fb.support={},f=fb.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return b?"HTML"!==b.nodeName:!1},m=fb.setDocument=function(a){var b,e=a?a.ownerDocument||a:v,g=e.defaultView;return e!==n&&9===e.nodeType&&e.documentElement?(n=e,o=e.documentElement,p=!f(e),g&&g!==g.top&&(g.addEventListener?g.addEventListener("unload",function(){m()},!1):g.attachEvent&&g.attachEvent("onunload",function(){m()})),c.attributes=ib(function(a){return a.className="i",!a.getAttribute("className")}),c.getElementsByTagName=ib(function(a){return a.appendChild(e.createComment("")),!a.getElementsByTagName("*").length}),c.getElementsByClassName=$.test(e.getElementsByClassName)&&ib(function(a){return a.innerHTML="
              ",a.firstChild.className="i",2===a.getElementsByClassName("i").length}),c.getById=ib(function(a){return o.appendChild(a).id=u,!e.getElementsByName||!e.getElementsByName(u).length}),c.getById?(d.find.ID=function(a,b){if(typeof b.getElementById!==C&&p){var c=b.getElementById(a);return c&&c.parentNode?[c]:[]}},d.filter.ID=function(a){var b=a.replace(cb,db);return function(a){return a.getAttribute("id")===b}}):(delete d.find.ID,d.filter.ID=function(a){var b=a.replace(cb,db);return function(a){var c=typeof a.getAttributeNode!==C&&a.getAttributeNode("id");return c&&c.value===b}}),d.find.TAG=c.getElementsByTagName?function(a,b){return typeof b.getElementsByTagName!==C?b.getElementsByTagName(a):void 0}:function(a,b){var c,d=[],e=0,f=b.getElementsByTagName(a);if("*"===a){while(c=f[e++])1===c.nodeType&&d.push(c);return d}return f},d.find.CLASS=c.getElementsByClassName&&function(a,b){return typeof b.getElementsByClassName!==C&&p?b.getElementsByClassName(a):void 0},r=[],q=[],(c.qsa=$.test(e.querySelectorAll))&&(ib(function(a){a.innerHTML="",a.querySelectorAll("[msallowclip^='']").length&&q.push("[*^$]="+M+"*(?:''|\"\")"),a.querySelectorAll("[selected]").length||q.push("\\["+M+"*(?:value|"+L+")"),a.querySelectorAll(":checked").length||q.push(":checked")}),ib(function(a){var b=e.createElement("input");b.setAttribute("type","hidden"),a.appendChild(b).setAttribute("name","D"),a.querySelectorAll("[name=d]").length&&q.push("name"+M+"*[*^$|!~]?="),a.querySelectorAll(":enabled").length||q.push(":enabled",":disabled"),a.querySelectorAll("*,:x"),q.push(",.*:")})),(c.matchesSelector=$.test(s=o.matches||o.webkitMatchesSelector||o.mozMatchesSelector||o.oMatchesSelector||o.msMatchesSelector))&&ib(function(a){c.disconnectedMatch=s.call(a,"div"),s.call(a,"[s!='']:x"),r.push("!=",Q)}),q=q.length&&new RegExp(q.join("|")),r=r.length&&new RegExp(r.join("|")),b=$.test(o.compareDocumentPosition),t=b||$.test(o.contains)?function(a,b){var c=9===a.nodeType?a.documentElement:a,d=b&&b.parentNode;return a===d||!(!d||1!==d.nodeType||!(c.contains?c.contains(d):a.compareDocumentPosition&&16&a.compareDocumentPosition(d)))}:function(a,b){if(b)while(b=b.parentNode)if(b===a)return!0;return!1},B=b?function(a,b){if(a===b)return l=!0,0;var d=!a.compareDocumentPosition-!b.compareDocumentPosition;return d?d:(d=(a.ownerDocument||a)===(b.ownerDocument||b)?a.compareDocumentPosition(b):1,1&d||!c.sortDetached&&b.compareDocumentPosition(a)===d?a===e||a.ownerDocument===v&&t(v,a)?-1:b===e||b.ownerDocument===v&&t(v,b)?1:k?K.call(k,a)-K.call(k,b):0:4&d?-1:1)}:function(a,b){if(a===b)return l=!0,0;var c,d=0,f=a.parentNode,g=b.parentNode,h=[a],i=[b];if(!f||!g)return a===e?-1:b===e?1:f?-1:g?1:k?K.call(k,a)-K.call(k,b):0;if(f===g)return kb(a,b);c=a;while(c=c.parentNode)h.unshift(c);c=b;while(c=c.parentNode)i.unshift(c);while(h[d]===i[d])d++;return d?kb(h[d],i[d]):h[d]===v?-1:i[d]===v?1:0},e):n},fb.matches=function(a,b){return fb(a,null,null,b)},fb.matchesSelector=function(a,b){if((a.ownerDocument||a)!==n&&m(a),b=b.replace(U,"='$1']"),!(!c.matchesSelector||!p||r&&r.test(b)||q&&q.test(b)))try{var d=s.call(a,b);if(d||c.disconnectedMatch||a.document&&11!==a.document.nodeType)return d}catch(e){}return fb(b,n,null,[a]).length>0},fb.contains=function(a,b){return(a.ownerDocument||a)!==n&&m(a),t(a,b)},fb.attr=function(a,b){(a.ownerDocument||a)!==n&&m(a);var e=d.attrHandle[b.toLowerCase()],f=e&&E.call(d.attrHandle,b.toLowerCase())?e(a,b,!p):void 0;return void 0!==f?f:c.attributes||!p?a.getAttribute(b):(f=a.getAttributeNode(b))&&f.specified?f.value:null},fb.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)},fb.uniqueSort=function(a){var b,d=[],e=0,f=0;if(l=!c.detectDuplicates,k=!c.sortStable&&a.slice(0),a.sort(B),l){while(b=a[f++])b===a[f]&&(e=d.push(f));while(e--)a.splice(d[e],1)}return k=null,a},e=fb.getText=function(a){var b,c="",d=0,f=a.nodeType;if(f){if(1===f||9===f||11===f){if("string"==typeof a.textContent)return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=e(a)}else if(3===f||4===f)return a.nodeValue}else while(b=a[d++])c+=e(b);return c},d=fb.selectors={cacheLength:50,createPseudo:hb,match:X,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(cb,db),a[3]=(a[3]||a[4]||a[5]||"").replace(cb,db),"~="===a[2]&&(a[3]=" "+a[3]+" "),a.slice(0,4)},CHILD:function(a){return a[1]=a[1].toLowerCase(),"nth"===a[1].slice(0,3)?(a[3]||fb.error(a[0]),a[4]=+(a[4]?a[5]+(a[6]||1):2*("even"===a[3]||"odd"===a[3])),a[5]=+(a[7]+a[8]||"odd"===a[3])):a[3]&&fb.error(a[0]),a},PSEUDO:function(a){var b,c=!a[6]&&a[2];return X.CHILD.test(a[0])?null:(a[3]?a[2]=a[4]||a[5]||"":c&&V.test(c)&&(b=g(c,!0))&&(b=c.indexOf(")",c.length-b)-c.length)&&(a[0]=a[0].slice(0,b),a[2]=c.slice(0,b)),a.slice(0,3))}},filter:{TAG:function(a){var b=a.replace(cb,db).toLowerCase();return"*"===a?function(){return!0}:function(a){return a.nodeName&&a.nodeName.toLowerCase()===b}},CLASS:function(a){var b=y[a+" "];return b||(b=new RegExp("(^|"+M+")"+a+"("+M+"|$)"))&&y(a,function(a){return b.test("string"==typeof a.className&&a.className||typeof a.getAttribute!==C&&a.getAttribute("class")||"")})},ATTR:function(a,b,c){return function(d){var e=fb.attr(d,a);return null==e?"!="===b:b?(e+="","="===b?e===c:"!="===b?e!==c:"^="===b?c&&0===e.indexOf(c):"*="===b?c&&e.indexOf(c)>-1:"$="===b?c&&e.slice(-c.length)===c:"~="===b?(" "+e+" ").indexOf(c)>-1:"|="===b?e===c||e.slice(0,c.length+1)===c+"-":!1):!0}},CHILD:function(a,b,c,d,e){var f="nth"!==a.slice(0,3),g="last"!==a.slice(-4),h="of-type"===b;return 1===d&&0===e?function(a){return!!a.parentNode}:function(b,c,i){var j,k,l,m,n,o,p=f!==g?"nextSibling":"previousSibling",q=b.parentNode,r=h&&b.nodeName.toLowerCase(),s=!i&&!h;if(q){if(f){while(p){l=b;while(l=l[p])if(h?l.nodeName.toLowerCase()===r:1===l.nodeType)return!1;o=p="only"===a&&!o&&"nextSibling"}return!0}if(o=[g?q.firstChild:q.lastChild],g&&s){k=q[u]||(q[u]={}),j=k[a]||[],n=j[0]===w&&j[1],m=j[0]===w&&j[2],l=n&&q.childNodes[n];while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if(1===l.nodeType&&++m&&l===b){k[a]=[w,n,m];break}}else if(s&&(j=(b[u]||(b[u]={}))[a])&&j[0]===w)m=j[1];else while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if((h?l.nodeName.toLowerCase()===r:1===l.nodeType)&&++m&&(s&&((l[u]||(l[u]={}))[a]=[w,m]),l===b))break;return m-=e,m===d||m%d===0&&m/d>=0}}},PSEUDO:function(a,b){var c,e=d.pseudos[a]||d.setFilters[a.toLowerCase()]||fb.error("unsupported pseudo: "+a);return e[u]?e(b):e.length>1?(c=[a,a,"",b],d.setFilters.hasOwnProperty(a.toLowerCase())?hb(function(a,c){var d,f=e(a,b),g=f.length;while(g--)d=K.call(a,f[g]),a[d]=!(c[d]=f[g])}):function(a){return e(a,0,c)}):e}},pseudos:{not:hb(function(a){var b=[],c=[],d=h(a.replace(R,"$1"));return d[u]?hb(function(a,b,c,e){var f,g=d(a,null,e,[]),h=a.length;while(h--)(f=g[h])&&(a[h]=!(b[h]=f))}):function(a,e,f){return b[0]=a,d(b,null,f,c),!c.pop()}}),has:hb(function(a){return function(b){return fb(a,b).length>0}}),contains:hb(function(a){return function(b){return(b.textContent||b.innerText||e(b)).indexOf(a)>-1}}),lang:hb(function(a){return W.test(a||"")||fb.error("unsupported lang: "+a),a=a.replace(cb,db).toLowerCase(),function(b){var c;do if(c=p?b.lang:b.getAttribute("xml:lang")||b.getAttribute("lang"))return c=c.toLowerCase(),c===a||0===c.indexOf(a+"-");while((b=b.parentNode)&&1===b.nodeType);return!1}}),target:function(b){var c=a.location&&a.location.hash;return c&&c.slice(1)===b.id},root:function(a){return a===o},focus:function(a){return a===n.activeElement&&(!n.hasFocus||n.hasFocus())&&!!(a.type||a.href||~a.tabIndex)},enabled:function(a){return a.disabled===!1},disabled:function(a){return a.disabled===!0},checked:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&!!a.checked||"option"===b&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},empty:function(a){for(a=a.firstChild;a;a=a.nextSibling)if(a.nodeType<6)return!1;return!0},parent:function(a){return!d.pseudos.empty(a)},header:function(a){return Z.test(a.nodeName)},input:function(a){return Y.test(a.nodeName)},button:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&"button"===a.type||"button"===b},text:function(a){var b;return"input"===a.nodeName.toLowerCase()&&"text"===a.type&&(null==(b=a.getAttribute("type"))||"text"===b.toLowerCase())},first:nb(function(){return[0]}),last:nb(function(a,b){return[b-1]}),eq:nb(function(a,b,c){return[0>c?c+b:c]}),even:nb(function(a,b){for(var c=0;b>c;c+=2)a.push(c);return a}),odd:nb(function(a,b){for(var c=1;b>c;c+=2)a.push(c);return a}),lt:nb(function(a,b,c){for(var d=0>c?c+b:c;--d>=0;)a.push(d);return a}),gt:nb(function(a,b,c){for(var d=0>c?c+b:c;++db;b++)d+=a[b].value;return d}function rb(a,b,c){var d=b.dir,e=c&&"parentNode"===d,f=x++;return b.first?function(b,c,f){while(b=b[d])if(1===b.nodeType||e)return a(b,c,f)}:function(b,c,g){var h,i,j=[w,f];if(g){while(b=b[d])if((1===b.nodeType||e)&&a(b,c,g))return!0}else while(b=b[d])if(1===b.nodeType||e){if(i=b[u]||(b[u]={}),(h=i[d])&&h[0]===w&&h[1]===f)return j[2]=h[2];if(i[d]=j,j[2]=a(b,c,g))return!0}}}function sb(a){return a.length>1?function(b,c,d){var e=a.length;while(e--)if(!a[e](b,c,d))return!1;return!0}:a[0]}function tb(a,b,c){for(var d=0,e=b.length;e>d;d++)fb(a,b[d],c);return c}function ub(a,b,c,d,e){for(var f,g=[],h=0,i=a.length,j=null!=b;i>h;h++)(f=a[h])&&(!c||c(f,d,e))&&(g.push(f),j&&b.push(h));return g}function vb(a,b,c,d,e,f){return d&&!d[u]&&(d=vb(d)),e&&!e[u]&&(e=vb(e,f)),hb(function(f,g,h,i){var j,k,l,m=[],n=[],o=g.length,p=f||tb(b||"*",h.nodeType?[h]:h,[]),q=!a||!f&&b?p:ub(p,m,a,h,i),r=c?e||(f?a:o||d)?[]:g:q;if(c&&c(q,r,h,i),d){j=ub(r,n),d(j,[],h,i),k=j.length;while(k--)(l=j[k])&&(r[n[k]]=!(q[n[k]]=l))}if(f){if(e||a){if(e){j=[],k=r.length;while(k--)(l=r[k])&&j.push(q[k]=l);e(null,r=[],j,i)}k=r.length;while(k--)(l=r[k])&&(j=e?K.call(f,l):m[k])>-1&&(f[j]=!(g[j]=l))}}else r=ub(r===g?r.splice(o,r.length):r),e?e(null,g,r,i):I.apply(g,r)})}function wb(a){for(var b,c,e,f=a.length,g=d.relative[a[0].type],h=g||d.relative[" "],i=g?1:0,k=rb(function(a){return a===b},h,!0),l=rb(function(a){return K.call(b,a)>-1},h,!0),m=[function(a,c,d){return!g&&(d||c!==j)||((b=c).nodeType?k(a,c,d):l(a,c,d))}];f>i;i++)if(c=d.relative[a[i].type])m=[rb(sb(m),c)];else{if(c=d.filter[a[i].type].apply(null,a[i].matches),c[u]){for(e=++i;f>e;e++)if(d.relative[a[e].type])break;return vb(i>1&&sb(m),i>1&&qb(a.slice(0,i-1).concat({value:" "===a[i-2].type?"*":""})).replace(R,"$1"),c,e>i&&wb(a.slice(i,e)),f>e&&wb(a=a.slice(e)),f>e&&qb(a))}m.push(c)}return sb(m)}function xb(a,b){var c=b.length>0,e=a.length>0,f=function(f,g,h,i,k){var l,m,o,p=0,q="0",r=f&&[],s=[],t=j,u=f||e&&d.find.TAG("*",k),v=w+=null==t?1:Math.random()||.1,x=u.length;for(k&&(j=g!==n&&g);q!==x&&null!=(l=u[q]);q++){if(e&&l){m=0;while(o=a[m++])if(o(l,g,h)){i.push(l);break}k&&(w=v)}c&&((l=!o&&l)&&p--,f&&r.push(l))}if(p+=q,c&&q!==p){m=0;while(o=b[m++])o(r,s,g,h);if(f){if(p>0)while(q--)r[q]||s[q]||(s[q]=G.call(i));s=ub(s)}I.apply(i,s),k&&!f&&s.length>0&&p+b.length>1&&fb.uniqueSort(i)}return k&&(w=v,j=t),r};return c?hb(f):f}return h=fb.compile=function(a,b){var c,d=[],e=[],f=A[a+" "];if(!f){b||(b=g(a)),c=b.length;while(c--)f=wb(b[c]),f[u]?d.push(f):e.push(f);f=A(a,xb(e,d)),f.selector=a}return f},i=fb.select=function(a,b,e,f){var i,j,k,l,m,n="function"==typeof a&&a,o=!f&&g(a=n.selector||a);if(e=e||[],1===o.length){if(j=o[0]=o[0].slice(0),j.length>2&&"ID"===(k=j[0]).type&&c.getById&&9===b.nodeType&&p&&d.relative[j[1].type]){if(b=(d.find.ID(k.matches[0].replace(cb,db),b)||[])[0],!b)return e;n&&(b=b.parentNode),a=a.slice(j.shift().value.length)}i=X.needsContext.test(a)?0:j.length;while(i--){if(k=j[i],d.relative[l=k.type])break;if((m=d.find[l])&&(f=m(k.matches[0].replace(cb,db),ab.test(j[0].type)&&ob(b.parentNode)||b))){if(j.splice(i,1),a=f.length&&qb(j),!a)return I.apply(e,f),e;break}}}return(n||h(a,o))(f,b,!p,e,ab.test(a)&&ob(b.parentNode)||b),e},c.sortStable=u.split("").sort(B).join("")===u,c.detectDuplicates=!!l,m(),c.sortDetached=ib(function(a){return 1&a.compareDocumentPosition(n.createElement("div"))}),ib(function(a){return a.innerHTML="","#"===a.firstChild.getAttribute("href")})||jb("type|href|height|width",function(a,b,c){return c?void 0:a.getAttribute(b,"type"===b.toLowerCase()?1:2)}),c.attributes&&ib(function(a){return a.innerHTML="",a.firstChild.setAttribute("value",""),""===a.firstChild.getAttribute("value")})||jb("value",function(a,b,c){return c||"input"!==a.nodeName.toLowerCase()?void 0:a.defaultValue}),ib(function(a){return null==a.getAttribute("disabled")})||jb(L,function(a,b,c){var d;return c?void 0:a[b]===!0?b.toLowerCase():(d=a.getAttributeNode(b))&&d.specified?d.value:null}),fb}(a);m.find=s,m.expr=s.selectors,m.expr[":"]=m.expr.pseudos,m.unique=s.uniqueSort,m.text=s.getText,m.isXMLDoc=s.isXML,m.contains=s.contains;var t=m.expr.match.needsContext,u=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,v=/^.[^:#\[\.,]*$/;function w(a,b,c){if(m.isFunction(b))return m.grep(a,function(a,d){return!!b.call(a,d,a)!==c});if(b.nodeType)return m.grep(a,function(a){return a===b!==c});if("string"==typeof b){if(v.test(b))return m.filter(b,a,c);b=m.filter(b,a)}return m.grep(a,function(a){return m.inArray(a,b)>=0!==c})}m.filter=function(a,b,c){var d=b[0];return c&&(a=":not("+a+")"),1===b.length&&1===d.nodeType?m.find.matchesSelector(d,a)?[d]:[]:m.find.matches(a,m.grep(b,function(a){return 1===a.nodeType}))},m.fn.extend({find:function(a){var b,c=[],d=this,e=d.length;if("string"!=typeof a)return this.pushStack(m(a).filter(function(){for(b=0;e>b;b++)if(m.contains(d[b],this))return!0}));for(b=0;e>b;b++)m.find(a,d[b],c);return c=this.pushStack(e>1?m.unique(c):c),c.selector=this.selector?this.selector+" "+a:a,c},filter:function(a){return this.pushStack(w(this,a||[],!1))},not:function(a){return this.pushStack(w(this,a||[],!0))},is:function(a){return!!w(this,"string"==typeof a&&t.test(a)?m(a):a||[],!1).length}});var x,y=a.document,z=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,A=m.fn.init=function(a,b){var c,d;if(!a)return this;if("string"==typeof a){if(c="<"===a.charAt(0)&&">"===a.charAt(a.length-1)&&a.length>=3?[null,a,null]:z.exec(a),!c||!c[1]&&b)return!b||b.jquery?(b||x).find(a):this.constructor(b).find(a);if(c[1]){if(b=b instanceof m?b[0]:b,m.merge(this,m.parseHTML(c[1],b&&b.nodeType?b.ownerDocument||b:y,!0)),u.test(c[1])&&m.isPlainObject(b))for(c in b)m.isFunction(this[c])?this[c](b[c]):this.attr(c,b[c]);return this}if(d=y.getElementById(c[2]),d&&d.parentNode){if(d.id!==c[2])return x.find(a);this.length=1,this[0]=d}return this.context=y,this.selector=a,this}return a.nodeType?(this.context=this[0]=a,this.length=1,this):m.isFunction(a)?"undefined"!=typeof x.ready?x.ready(a):a(m):(void 0!==a.selector&&(this.selector=a.selector,this.context=a.context),m.makeArray(a,this))};A.prototype=m.fn,x=m(y);var B=/^(?:parents|prev(?:Until|All))/,C={children:!0,contents:!0,next:!0,prev:!0};m.extend({dir:function(a,b,c){var d=[],e=a[b];while(e&&9!==e.nodeType&&(void 0===c||1!==e.nodeType||!m(e).is(c)))1===e.nodeType&&d.push(e),e=e[b];return d},sibling:function(a,b){for(var c=[];a;a=a.nextSibling)1===a.nodeType&&a!==b&&c.push(a);return c}}),m.fn.extend({has:function(a){var b,c=m(a,this),d=c.length;return this.filter(function(){for(b=0;d>b;b++)if(m.contains(this,c[b]))return!0})},closest:function(a,b){for(var c,d=0,e=this.length,f=[],g=t.test(a)||"string"!=typeof a?m(a,b||this.context):0;e>d;d++)for(c=this[d];c&&c!==b;c=c.parentNode)if(c.nodeType<11&&(g?g.index(c)>-1:1===c.nodeType&&m.find.matchesSelector(c,a))){f.push(c);break}return this.pushStack(f.length>1?m.unique(f):f)},index:function(a){return a?"string"==typeof a?m.inArray(this[0],m(a)):m.inArray(a.jquery?a[0]:a,this):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(a,b){return this.pushStack(m.unique(m.merge(this.get(),m(a,b))))},addBack:function(a){return this.add(null==a?this.prevObject:this.prevObject.filter(a))}});function D(a,b){do a=a[b];while(a&&1!==a.nodeType);return a}m.each({parent:function(a){var b=a.parentNode;return b&&11!==b.nodeType?b:null},parents:function(a){return m.dir(a,"parentNode")},parentsUntil:function(a,b,c){return m.dir(a,"parentNode",c)},next:function(a){return D(a,"nextSibling")},prev:function(a){return D(a,"previousSibling")},nextAll:function(a){return m.dir(a,"nextSibling")},prevAll:function(a){return m.dir(a,"previousSibling")},nextUntil:function(a,b,c){return m.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return m.dir(a,"previousSibling",c)},siblings:function(a){return m.sibling((a.parentNode||{}).firstChild,a)},children:function(a){return m.sibling(a.firstChild)},contents:function(a){return m.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:m.merge([],a.childNodes)}},function(a,b){m.fn[a]=function(c,d){var e=m.map(this,b,c);return"Until"!==a.slice(-5)&&(d=c),d&&"string"==typeof d&&(e=m.filter(d,e)),this.length>1&&(C[a]||(e=m.unique(e)),B.test(a)&&(e=e.reverse())),this.pushStack(e)}});var E=/\S+/g,F={};function G(a){var b=F[a]={};return m.each(a.match(E)||[],function(a,c){b[c]=!0}),b}m.Callbacks=function(a){a="string"==typeof a?F[a]||G(a):m.extend({},a);var b,c,d,e,f,g,h=[],i=!a.once&&[],j=function(l){for(c=a.memory&&l,d=!0,f=g||0,g=0,e=h.length,b=!0;h&&e>f;f++)if(h[f].apply(l[0],l[1])===!1&&a.stopOnFalse){c=!1;break}b=!1,h&&(i?i.length&&j(i.shift()):c?h=[]:k.disable())},k={add:function(){if(h){var d=h.length;!function f(b){m.each(b,function(b,c){var d=m.type(c);"function"===d?a.unique&&k.has(c)||h.push(c):c&&c.length&&"string"!==d&&f(c)})}(arguments),b?e=h.length:c&&(g=d,j(c))}return this},remove:function(){return h&&m.each(arguments,function(a,c){var d;while((d=m.inArray(c,h,d))>-1)h.splice(d,1),b&&(e>=d&&e--,f>=d&&f--)}),this},has:function(a){return a?m.inArray(a,h)>-1:!(!h||!h.length)},empty:function(){return h=[],e=0,this},disable:function(){return h=i=c=void 0,this},disabled:function(){return!h},lock:function(){return i=void 0,c||k.disable(),this},locked:function(){return!i},fireWith:function(a,c){return!h||d&&!i||(c=c||[],c=[a,c.slice?c.slice():c],b?i.push(c):j(c)),this},fire:function(){return k.fireWith(this,arguments),this},fired:function(){return!!d}};return k},m.extend({Deferred:function(a){var b=[["resolve","done",m.Callbacks("once memory"),"resolved"],["reject","fail",m.Callbacks("once memory"),"rejected"],["notify","progress",m.Callbacks("memory")]],c="pending",d={state:function(){return c},always:function(){return e.done(arguments).fail(arguments),this},then:function(){var a=arguments;return m.Deferred(function(c){m.each(b,function(b,f){var g=m.isFunction(a[b])&&a[b];e[f[1]](function(){var a=g&&g.apply(this,arguments);a&&m.isFunction(a.promise)?a.promise().done(c.resolve).fail(c.reject).progress(c.notify):c[f[0]+"With"](this===d?c.promise():this,g?[a]:arguments)})}),a=null}).promise()},promise:function(a){return null!=a?m.extend(a,d):d}},e={};return d.pipe=d.then,m.each(b,function(a,f){var g=f[2],h=f[3];d[f[1]]=g.add,h&&g.add(function(){c=h},b[1^a][2].disable,b[2][2].lock),e[f[0]]=function(){return e[f[0]+"With"](this===e?d:this,arguments),this},e[f[0]+"With"]=g.fireWith}),d.promise(e),a&&a.call(e,e),e},when:function(a){var b=0,c=d.call(arguments),e=c.length,f=1!==e||a&&m.isFunction(a.promise)?e:0,g=1===f?a:m.Deferred(),h=function(a,b,c){return function(e){b[a]=this,c[a]=arguments.length>1?d.call(arguments):e,c===i?g.notifyWith(b,c):--f||g.resolveWith(b,c)}},i,j,k;if(e>1)for(i=new Array(e),j=new Array(e),k=new Array(e);e>b;b++)c[b]&&m.isFunction(c[b].promise)?c[b].promise().done(h(b,k,c)).fail(g.reject).progress(h(b,j,i)):--f;return f||g.resolveWith(k,c),g.promise()}});var H;m.fn.ready=function(a){return m.ready.promise().done(a),this},m.extend({isReady:!1,readyWait:1,holdReady:function(a){a?m.readyWait++:m.ready(!0)},ready:function(a){if(a===!0?!--m.readyWait:!m.isReady){if(!y.body)return setTimeout(m.ready);m.isReady=!0,a!==!0&&--m.readyWait>0||(H.resolveWith(y,[m]),m.fn.triggerHandler&&(m(y).triggerHandler("ready"),m(y).off("ready")))}}});function I(){y.addEventListener?(y.removeEventListener("DOMContentLoaded",J,!1),a.removeEventListener("load",J,!1)):(y.detachEvent("onreadystatechange",J),a.detachEvent("onload",J))}function J(){(y.addEventListener||"load"===event.type||"complete"===y.readyState)&&(I(),m.ready())}m.ready.promise=function(b){if(!H)if(H=m.Deferred(),"complete"===y.readyState)setTimeout(m.ready);else if(y.addEventListener)y.addEventListener("DOMContentLoaded",J,!1),a.addEventListener("load",J,!1);else{y.attachEvent("onreadystatechange",J),a.attachEvent("onload",J);var c=!1;try{c=null==a.frameElement&&y.documentElement}catch(d){}c&&c.doScroll&&!function e(){if(!m.isReady){try{c.doScroll("left")}catch(a){return setTimeout(e,50)}I(),m.ready()}}()}return H.promise(b)};var K="undefined",L;for(L in m(k))break;k.ownLast="0"!==L,k.inlineBlockNeedsLayout=!1,m(function(){var a,b,c,d;c=y.getElementsByTagName("body")[0],c&&c.style&&(b=y.createElement("div"),d=y.createElement("div"),d.style.cssText="position:absolute;border:0;width:0;height:0;top:0;left:-9999px",c.appendChild(d).appendChild(b),typeof b.style.zoom!==K&&(b.style.cssText="display:inline;margin:0;border:0;padding:1px;width:1px;zoom:1",k.inlineBlockNeedsLayout=a=3===b.offsetWidth,a&&(c.style.zoom=1)),c.removeChild(d))}),function(){var a=y.createElement("div");if(null==k.deleteExpando){k.deleteExpando=!0;try{delete a.test}catch(b){k.deleteExpando=!1}}a=null}(),m.acceptData=function(a){var b=m.noData[(a.nodeName+" ").toLowerCase()],c=+a.nodeType||1;return 1!==c&&9!==c?!1:!b||b!==!0&&a.getAttribute("classid")===b};var M=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,N=/([A-Z])/g;function O(a,b,c){if(void 0===c&&1===a.nodeType){var d="data-"+b.replace(N,"-$1").toLowerCase();if(c=a.getAttribute(d),"string"==typeof c){try{c="true"===c?!0:"false"===c?!1:"null"===c?null:+c+""===c?+c:M.test(c)?m.parseJSON(c):c}catch(e){}m.data(a,b,c)}else c=void 0}return c}function P(a){var b;for(b in a)if(("data"!==b||!m.isEmptyObject(a[b]))&&"toJSON"!==b)return!1;return!0}function Q(a,b,d,e){if(m.acceptData(a)){var f,g,h=m.expando,i=a.nodeType,j=i?m.cache:a,k=i?a[h]:a[h]&&h; -if(k&&j[k]&&(e||j[k].data)||void 0!==d||"string"!=typeof b)return k||(k=i?a[h]=c.pop()||m.guid++:h),j[k]||(j[k]=i?{}:{toJSON:m.noop}),("object"==typeof b||"function"==typeof b)&&(e?j[k]=m.extend(j[k],b):j[k].data=m.extend(j[k].data,b)),g=j[k],e||(g.data||(g.data={}),g=g.data),void 0!==d&&(g[m.camelCase(b)]=d),"string"==typeof b?(f=g[b],null==f&&(f=g[m.camelCase(b)])):f=g,f}}function R(a,b,c){if(m.acceptData(a)){var d,e,f=a.nodeType,g=f?m.cache:a,h=f?a[m.expando]:m.expando;if(g[h]){if(b&&(d=c?g[h]:g[h].data)){m.isArray(b)?b=b.concat(m.map(b,m.camelCase)):b in d?b=[b]:(b=m.camelCase(b),b=b in d?[b]:b.split(" ")),e=b.length;while(e--)delete d[b[e]];if(c?!P(d):!m.isEmptyObject(d))return}(c||(delete g[h].data,P(g[h])))&&(f?m.cleanData([a],!0):k.deleteExpando||g!=g.window?delete g[h]:g[h]=null)}}}m.extend({cache:{},noData:{"applet ":!0,"embed ":!0,"object ":"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"},hasData:function(a){return a=a.nodeType?m.cache[a[m.expando]]:a[m.expando],!!a&&!P(a)},data:function(a,b,c){return Q(a,b,c)},removeData:function(a,b){return R(a,b)},_data:function(a,b,c){return Q(a,b,c,!0)},_removeData:function(a,b){return R(a,b,!0)}}),m.fn.extend({data:function(a,b){var c,d,e,f=this[0],g=f&&f.attributes;if(void 0===a){if(this.length&&(e=m.data(f),1===f.nodeType&&!m._data(f,"parsedAttrs"))){c=g.length;while(c--)g[c]&&(d=g[c].name,0===d.indexOf("data-")&&(d=m.camelCase(d.slice(5)),O(f,d,e[d])));m._data(f,"parsedAttrs",!0)}return e}return"object"==typeof a?this.each(function(){m.data(this,a)}):arguments.length>1?this.each(function(){m.data(this,a,b)}):f?O(f,a,m.data(f,a)):void 0},removeData:function(a){return this.each(function(){m.removeData(this,a)})}}),m.extend({queue:function(a,b,c){var d;return a?(b=(b||"fx")+"queue",d=m._data(a,b),c&&(!d||m.isArray(c)?d=m._data(a,b,m.makeArray(c)):d.push(c)),d||[]):void 0},dequeue:function(a,b){b=b||"fx";var c=m.queue(a,b),d=c.length,e=c.shift(),f=m._queueHooks(a,b),g=function(){m.dequeue(a,b)};"inprogress"===e&&(e=c.shift(),d--),e&&("fx"===b&&c.unshift("inprogress"),delete f.stop,e.call(a,g,f)),!d&&f&&f.empty.fire()},_queueHooks:function(a,b){var c=b+"queueHooks";return m._data(a,c)||m._data(a,c,{empty:m.Callbacks("once memory").add(function(){m._removeData(a,b+"queue"),m._removeData(a,c)})})}}),m.fn.extend({queue:function(a,b){var c=2;return"string"!=typeof a&&(b=a,a="fx",c--),arguments.lengthh;h++)b(a[h],c,g?d:d.call(a[h],h,b(a[h],c)));return e?a:j?b.call(a):i?b(a[0],c):f},W=/^(?:checkbox|radio)$/i;!function(){var a=y.createElement("input"),b=y.createElement("div"),c=y.createDocumentFragment();if(b.innerHTML="
              " + icon2html(icon(GLOB.emojis, states[i]), owner, realsize= TRUE) + "
              a",k.leadingWhitespace=3===b.firstChild.nodeType,k.tbody=!b.getElementsByTagName("tbody").length,k.htmlSerialize=!!b.getElementsByTagName("link").length,k.html5Clone="<:nav>"!==y.createElement("nav").cloneNode(!0).outerHTML,a.type="checkbox",a.checked=!0,c.appendChild(a),k.appendChecked=a.checked,b.innerHTML="",k.noCloneChecked=!!b.cloneNode(!0).lastChild.defaultValue,c.appendChild(b),b.innerHTML="",k.checkClone=b.cloneNode(!0).cloneNode(!0).lastChild.checked,k.noCloneEvent=!0,b.attachEvent&&(b.attachEvent("onclick",function(){k.noCloneEvent=!1}),b.cloneNode(!0).click()),null==k.deleteExpando){k.deleteExpando=!0;try{delete b.test}catch(d){k.deleteExpando=!1}}}(),function(){var b,c,d=y.createElement("div");for(b in{submit:!0,change:!0,focusin:!0})c="on"+b,(k[b+"Bubbles"]=c in a)||(d.setAttribute(c,"t"),k[b+"Bubbles"]=d.attributes[c].expando===!1);d=null}();var X=/^(?:input|select|textarea)$/i,Y=/^key/,Z=/^(?:mouse|pointer|contextmenu)|click/,$=/^(?:focusinfocus|focusoutblur)$/,_=/^([^.]*)(?:\.(.+)|)$/;function ab(){return!0}function bb(){return!1}function cb(){try{return y.activeElement}catch(a){}}m.event={global:{},add:function(a,b,c,d,e){var f,g,h,i,j,k,l,n,o,p,q,r=m._data(a);if(r){c.handler&&(i=c,c=i.handler,e=i.selector),c.guid||(c.guid=m.guid++),(g=r.events)||(g=r.events={}),(k=r.handle)||(k=r.handle=function(a){return typeof m===K||a&&m.event.triggered===a.type?void 0:m.event.dispatch.apply(k.elem,arguments)},k.elem=a),b=(b||"").match(E)||[""],h=b.length;while(h--)f=_.exec(b[h])||[],o=q=f[1],p=(f[2]||"").split(".").sort(),o&&(j=m.event.special[o]||{},o=(e?j.delegateType:j.bindType)||o,j=m.event.special[o]||{},l=m.extend({type:o,origType:q,data:d,handler:c,guid:c.guid,selector:e,needsContext:e&&m.expr.match.needsContext.test(e),namespace:p.join(".")},i),(n=g[o])||(n=g[o]=[],n.delegateCount=0,j.setup&&j.setup.call(a,d,p,k)!==!1||(a.addEventListener?a.addEventListener(o,k,!1):a.attachEvent&&a.attachEvent("on"+o,k))),j.add&&(j.add.call(a,l),l.handler.guid||(l.handler.guid=c.guid)),e?n.splice(n.delegateCount++,0,l):n.push(l),m.event.global[o]=!0);a=null}},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,n,o,p,q,r=m.hasData(a)&&m._data(a);if(r&&(k=r.events)){b=(b||"").match(E)||[""],j=b.length;while(j--)if(h=_.exec(b[j])||[],o=q=h[1],p=(h[2]||"").split(".").sort(),o){l=m.event.special[o]||{},o=(d?l.delegateType:l.bindType)||o,n=k[o]||[],h=h[2]&&new RegExp("(^|\\.)"+p.join("\\.(?:.*\\.|)")+"(\\.|$)"),i=f=n.length;while(f--)g=n[f],!e&&q!==g.origType||c&&c.guid!==g.guid||h&&!h.test(g.namespace)||d&&d!==g.selector&&("**"!==d||!g.selector)||(n.splice(f,1),g.selector&&n.delegateCount--,l.remove&&l.remove.call(a,g));i&&!n.length&&(l.teardown&&l.teardown.call(a,p,r.handle)!==!1||m.removeEvent(a,o,r.handle),delete k[o])}else for(o in k)m.event.remove(a,o+b[j],c,d,!0);m.isEmptyObject(k)&&(delete r.handle,m._removeData(a,"events"))}},trigger:function(b,c,d,e){var f,g,h,i,k,l,n,o=[d||y],p=j.call(b,"type")?b.type:b,q=j.call(b,"namespace")?b.namespace.split("."):[];if(h=l=d=d||y,3!==d.nodeType&&8!==d.nodeType&&!$.test(p+m.event.triggered)&&(p.indexOf(".")>=0&&(q=p.split("."),p=q.shift(),q.sort()),g=p.indexOf(":")<0&&"on"+p,b=b[m.expando]?b:new m.Event(p,"object"==typeof b&&b),b.isTrigger=e?2:3,b.namespace=q.join("."),b.namespace_re=b.namespace?new RegExp("(^|\\.)"+q.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,b.result=void 0,b.target||(b.target=d),c=null==c?[b]:m.makeArray(c,[b]),k=m.event.special[p]||{},e||!k.trigger||k.trigger.apply(d,c)!==!1)){if(!e&&!k.noBubble&&!m.isWindow(d)){for(i=k.delegateType||p,$.test(i+p)||(h=h.parentNode);h;h=h.parentNode)o.push(h),l=h;l===(d.ownerDocument||y)&&o.push(l.defaultView||l.parentWindow||a)}n=0;while((h=o[n++])&&!b.isPropagationStopped())b.type=n>1?i:k.bindType||p,f=(m._data(h,"events")||{})[b.type]&&m._data(h,"handle"),f&&f.apply(h,c),f=g&&h[g],f&&f.apply&&m.acceptData(h)&&(b.result=f.apply(h,c),b.result===!1&&b.preventDefault());if(b.type=p,!e&&!b.isDefaultPrevented()&&(!k._default||k._default.apply(o.pop(),c)===!1)&&m.acceptData(d)&&g&&d[p]&&!m.isWindow(d)){l=d[g],l&&(d[g]=null),m.event.triggered=p;try{d[p]()}catch(r){}m.event.triggered=void 0,l&&(d[g]=l)}return b.result}},dispatch:function(a){a=m.event.fix(a);var b,c,e,f,g,h=[],i=d.call(arguments),j=(m._data(this,"events")||{})[a.type]||[],k=m.event.special[a.type]||{};if(i[0]=a,a.delegateTarget=this,!k.preDispatch||k.preDispatch.call(this,a)!==!1){h=m.event.handlers.call(this,a,j),b=0;while((f=h[b++])&&!a.isPropagationStopped()){a.currentTarget=f.elem,g=0;while((e=f.handlers[g++])&&!a.isImmediatePropagationStopped())(!a.namespace_re||a.namespace_re.test(e.namespace))&&(a.handleObj=e,a.data=e.data,c=((m.event.special[e.origType]||{}).handle||e.handler).apply(f.elem,i),void 0!==c&&(a.result=c)===!1&&(a.preventDefault(),a.stopPropagation()))}return k.postDispatch&&k.postDispatch.call(this,a),a.result}},handlers:function(a,b){var c,d,e,f,g=[],h=b.delegateCount,i=a.target;if(h&&i.nodeType&&(!a.button||"click"!==a.type))for(;i!=this;i=i.parentNode||this)if(1===i.nodeType&&(i.disabled!==!0||"click"!==a.type)){for(e=[],f=0;h>f;f++)d=b[f],c=d.selector+" ",void 0===e[c]&&(e[c]=d.needsContext?m(c,this).index(i)>=0:m.find(c,this,null,[i]).length),e[c]&&e.push(d);e.length&&g.push({elem:i,handlers:e})}return h]","i"),hb=/^\s+/,ib=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,jb=/<([\w:]+)/,kb=/
              ","
              "],tr:[2,"","
              "],col:[2,"","
              "],td:[3,"","
              "],_default:k.htmlSerialize?[0,"",""]:[1,"X
              ","
              "]},sb=db(y),tb=sb.appendChild(y.createElement("div"));rb.optgroup=rb.option,rb.tbody=rb.tfoot=rb.colgroup=rb.caption=rb.thead,rb.th=rb.td;function ub(a,b){var c,d,e=0,f=typeof a.getElementsByTagName!==K?a.getElementsByTagName(b||"*"):typeof a.querySelectorAll!==K?a.querySelectorAll(b||"*"):void 0;if(!f)for(f=[],c=a.childNodes||a;null!=(d=c[e]);e++)!b||m.nodeName(d,b)?f.push(d):m.merge(f,ub(d,b));return void 0===b||b&&m.nodeName(a,b)?m.merge([a],f):f}function vb(a){W.test(a.type)&&(a.defaultChecked=a.checked)}function wb(a,b){return m.nodeName(a,"table")&&m.nodeName(11!==b.nodeType?b:b.firstChild,"tr")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function xb(a){return a.type=(null!==m.find.attr(a,"type"))+"/"+a.type,a}function yb(a){var b=pb.exec(a.type);return b?a.type=b[1]:a.removeAttribute("type"),a}function zb(a,b){for(var c,d=0;null!=(c=a[d]);d++)m._data(c,"globalEval",!b||m._data(b[d],"globalEval"))}function Ab(a,b){if(1===b.nodeType&&m.hasData(a)){var c,d,e,f=m._data(a),g=m._data(b,f),h=f.events;if(h){delete g.handle,g.events={};for(c in h)for(d=0,e=h[c].length;e>d;d++)m.event.add(b,c,h[c][d])}g.data&&(g.data=m.extend({},g.data))}}function Bb(a,b){var c,d,e;if(1===b.nodeType){if(c=b.nodeName.toLowerCase(),!k.noCloneEvent&&b[m.expando]){e=m._data(b);for(d in e.events)m.removeEvent(b,d,e.handle);b.removeAttribute(m.expando)}"script"===c&&b.text!==a.text?(xb(b).text=a.text,yb(b)):"object"===c?(b.parentNode&&(b.outerHTML=a.outerHTML),k.html5Clone&&a.innerHTML&&!m.trim(b.innerHTML)&&(b.innerHTML=a.innerHTML)):"input"===c&&W.test(a.type)?(b.defaultChecked=b.checked=a.checked,b.value!==a.value&&(b.value=a.value)):"option"===c?b.defaultSelected=b.selected=a.defaultSelected:("input"===c||"textarea"===c)&&(b.defaultValue=a.defaultValue)}}m.extend({clone:function(a,b,c){var d,e,f,g,h,i=m.contains(a.ownerDocument,a);if(k.html5Clone||m.isXMLDoc(a)||!gb.test("<"+a.nodeName+">")?f=a.cloneNode(!0):(tb.innerHTML=a.outerHTML,tb.removeChild(f=tb.firstChild)),!(k.noCloneEvent&&k.noCloneChecked||1!==a.nodeType&&11!==a.nodeType||m.isXMLDoc(a)))for(d=ub(f),h=ub(a),g=0;null!=(e=h[g]);++g)d[g]&&Bb(e,d[g]);if(b)if(c)for(h=h||ub(a),d=d||ub(f),g=0;null!=(e=h[g]);g++)Ab(e,d[g]);else Ab(a,f);return d=ub(f,"script"),d.length>0&&zb(d,!i&&ub(a,"script")),d=h=e=null,f},buildFragment:function(a,b,c,d){for(var e,f,g,h,i,j,l,n=a.length,o=db(b),p=[],q=0;n>q;q++)if(f=a[q],f||0===f)if("object"===m.type(f))m.merge(p,f.nodeType?[f]:f);else if(lb.test(f)){h=h||o.appendChild(b.createElement("div")),i=(jb.exec(f)||["",""])[1].toLowerCase(),l=rb[i]||rb._default,h.innerHTML=l[1]+f.replace(ib,"<$1>")+l[2],e=l[0];while(e--)h=h.lastChild;if(!k.leadingWhitespace&&hb.test(f)&&p.push(b.createTextNode(hb.exec(f)[0])),!k.tbody){f="table"!==i||kb.test(f)?""!==l[1]||kb.test(f)?0:h:h.firstChild,e=f&&f.childNodes.length;while(e--)m.nodeName(j=f.childNodes[e],"tbody")&&!j.childNodes.length&&f.removeChild(j)}m.merge(p,h.childNodes),h.textContent="";while(h.firstChild)h.removeChild(h.firstChild);h=o.lastChild}else p.push(b.createTextNode(f));h&&o.removeChild(h),k.appendChecked||m.grep(ub(p,"input"),vb),q=0;while(f=p[q++])if((!d||-1===m.inArray(f,d))&&(g=m.contains(f.ownerDocument,f),h=ub(o.appendChild(f),"script"),g&&zb(h),c)){e=0;while(f=h[e++])ob.test(f.type||"")&&c.push(f)}return h=null,o},cleanData:function(a,b){for(var d,e,f,g,h=0,i=m.expando,j=m.cache,l=k.deleteExpando,n=m.event.special;null!=(d=a[h]);h++)if((b||m.acceptData(d))&&(f=d[i],g=f&&j[f])){if(g.events)for(e in g.events)n[e]?m.event.remove(d,e):m.removeEvent(d,e,g.handle);j[f]&&(delete j[f],l?delete d[i]:typeof d.removeAttribute!==K?d.removeAttribute(i):d[i]=null,c.push(f))}}}),m.fn.extend({text:function(a){return V(this,function(a){return void 0===a?m.text(this):this.empty().append((this[0]&&this[0].ownerDocument||y).createTextNode(a))},null,a,arguments.length)},append:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=wb(this,a);b.appendChild(a)}})},prepend:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=wb(this,a);b.insertBefore(a,b.firstChild)}})},before:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this)})},after:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this.nextSibling)})},remove:function(a,b){for(var c,d=a?m.filter(a,this):this,e=0;null!=(c=d[e]);e++)b||1!==c.nodeType||m.cleanData(ub(c)),c.parentNode&&(b&&m.contains(c.ownerDocument,c)&&zb(ub(c,"script")),c.parentNode.removeChild(c));return this},empty:function(){for(var a,b=0;null!=(a=this[b]);b++){1===a.nodeType&&m.cleanData(ub(a,!1));while(a.firstChild)a.removeChild(a.firstChild);a.options&&m.nodeName(a,"select")&&(a.options.length=0)}return this},clone:function(a,b){return a=null==a?!1:a,b=null==b?a:b,this.map(function(){return m.clone(this,a,b)})},html:function(a){return V(this,function(a){var b=this[0]||{},c=0,d=this.length;if(void 0===a)return 1===b.nodeType?b.innerHTML.replace(fb,""):void 0;if(!("string"!=typeof a||mb.test(a)||!k.htmlSerialize&&gb.test(a)||!k.leadingWhitespace&&hb.test(a)||rb[(jb.exec(a)||["",""])[1].toLowerCase()])){a=a.replace(ib,"<$1>");try{for(;d>c;c++)b=this[c]||{},1===b.nodeType&&(m.cleanData(ub(b,!1)),b.innerHTML=a);b=0}catch(e){}}b&&this.empty().append(a)},null,a,arguments.length)},replaceWith:function(){var a=arguments[0];return this.domManip(arguments,function(b){a=this.parentNode,m.cleanData(ub(this)),a&&a.replaceChild(b,this)}),a&&(a.length||a.nodeType)?this:this.remove()},detach:function(a){return this.remove(a,!0)},domManip:function(a,b){a=e.apply([],a);var c,d,f,g,h,i,j=0,l=this.length,n=this,o=l-1,p=a[0],q=m.isFunction(p);if(q||l>1&&"string"==typeof p&&!k.checkClone&&nb.test(p))return this.each(function(c){var d=n.eq(c);q&&(a[0]=p.call(this,c,d.html())),d.domManip(a,b)});if(l&&(i=m.buildFragment(a,this[0].ownerDocument,!1,this),c=i.firstChild,1===i.childNodes.length&&(i=c),c)){for(g=m.map(ub(i,"script"),xb),f=g.length;l>j;j++)d=i,j!==o&&(d=m.clone(d,!0,!0),f&&m.merge(g,ub(d,"script"))),b.call(this[j],d,j);if(f)for(h=g[g.length-1].ownerDocument,m.map(g,yb),j=0;f>j;j++)d=g[j],ob.test(d.type||"")&&!m._data(d,"globalEval")&&m.contains(h,d)&&(d.src?m._evalUrl&&m._evalUrl(d.src):m.globalEval((d.text||d.textContent||d.innerHTML||"").replace(qb,"")));i=c=null}return this}}),m.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){m.fn[a]=function(a){for(var c,d=0,e=[],g=m(a),h=g.length-1;h>=d;d++)c=d===h?this:this.clone(!0),m(g[d])[b](c),f.apply(e,c.get());return this.pushStack(e)}});var Cb,Db={};function Eb(b,c){var d,e=m(c.createElement(b)).appendTo(c.body),f=a.getDefaultComputedStyle&&(d=a.getDefaultComputedStyle(e[0]))?d.display:m.css(e[0],"display");return e.detach(),f}function Fb(a){var b=y,c=Db[a];return c||(c=Eb(a,b),"none"!==c&&c||(Cb=(Cb||m(" - - - "} diff --git a/code/modules/library/lib_machines.dm b/code/modules/library/lib_machines.dm deleted file mode 100644 index ba3aa762d2790..0000000000000 --- a/code/modules/library/lib_machines.dm +++ /dev/null @@ -1,85 +0,0 @@ -/* Library Machines - * - * Contains: - * Library Scanner - * Book Binder - */ - -/* - * Library Scanner - */ -/obj/machinery/libraryscanner - name = "scanner" - icon = 'icons/obj/library.dmi' - icon_state = "bigscanner" - anchored = TRUE - density = TRUE - var/obj/item/book/cache // Last scanned book - -/obj/machinery/libraryscanner/attackby(var/obj/O as obj, var/mob/user as mob) - if(istype(O, /obj/item/book)) - if(!user.unEquip(O, src)) - return - -/obj/machinery/libraryscanner/interface_interact(var/mob/user) - interact(user) - return TRUE - -/obj/machinery/libraryscanner/interact(var/mob/user) - usr.set_machine(src) - var/dat = "Scanner Control Interface\n" // - if(cache) - dat += "Data stored in memory.
              " - else - dat += "No data stored in memory.
              " - dat += "\[Scan\]" - if(cache) - dat += " \[Clear Memory\]

              \[Remove Book\]" - else - dat += "
              " - show_browser(user, dat, "window=scanner") - onclose(user, "scanner") - -/obj/machinery/libraryscanner/Topic(href, href_list) - if(..()) - close_browser(usr, "window=scanner") - onclose(usr, "scanner") - return - - if(href_list["scan"]) - for(var/obj/item/book/B in contents) - cache = B - break - if(href_list["clear"]) - cache = null - if(href_list["eject"]) - for(var/obj/item/book/B in contents) - B.dropInto(loc) - src.add_fingerprint(usr) - src.updateUsrDialog() - -/* - * Book binder - */ -/obj/machinery/bookbinder - name = "Book Binder" - icon = 'icons/obj/library.dmi' - icon_state = "binder" - anchored = TRUE - density = TRUE - -/obj/machinery/bookbinder/attackby(var/obj/O as obj, var/mob/user as mob) - if(istype(O, /obj/item/paper)) - if(!user.unEquip(O, src)) - return - user.visible_message("[user] loads some paper into [src].", "You load some paper into [src].") - src.visible_message("[src] begins to hum as it warms up its printing drums.") - sleep(rand(200,400)) - src.visible_message("[src] whirs as it prints and binds a new book.") - var/obj/item/book/b = new(src.loc) - b.dat = O:info - b.SetName("Print Job #" + "[rand(100, 999)]") - b.icon_state = "book[rand(1,7)]" - qdel(O) - else - ..() diff --git a/code/modules/library/lib_readme.dm b/code/modules/library/lib_readme.dm deleted file mode 100644 index 0150ed6ba8a7a..0000000000000 --- a/code/modules/library/lib_readme.dm +++ /dev/null @@ -1,61 +0,0 @@ -//******************************* -// -// Library SQL Configuration -// -//******************************* - -// Deprecated! See global.dm for new SQL config vars -- TLE -/* -#define SQL_ADDRESS "" -#define SQL_DB "" -#define SQL_PORT "3306" -#define SQL_LOGIN "" -#define SQL_PASS "" -*/ - -//******************************* -// Requires Dantom.DB library ( http://www.byond.com/developer/Dantom/DB ) - - -/* - The Library - ------------ - A place for the crew to go, relax, and enjoy a good book. - Aspiring authors can even self publish and, if they're lucky - convince the on-staff Librarian to submit it to the Archives - to be chronicled in history forever - some say even persisting - through alternate dimensions. - - - Written by TLE for /tg/station 13 - Feel free to use this as you like. Some credit would be cool. - Check us out at http://nanotrasen.com/ if you're so inclined. -*/ - -// CONTAINS: - -// Objects: -// - bookcase -// - book -// - barcode scanner -// Machinery: -// - library computer -// - visitor's computer -// - book binder -// - book scanner -// Datum: -// - borrowbook - - -// Ideas for the future -// --------------------- -// - Visitor's computer should be able to search the current in-round library inventory (that the Librarian has stocked and checked in) -// -- Give computer other features like an Instant Messenger application, or the ability to edit, save, and print documents. -// - Admin interface directly tied to the Archive DB. Right now there's no way to delete uploaded books in-game. -// -- If this gets implemented, allow Librarians to "tag" or "suggest" books to be deleted. The DB ID of the tagged books gets saved to a text file (or another table in the DB maybe?). -// The admin interface would automatically take these IDs and SELECT them all from the DB to be displayed along with a Delete link to drop the row from the table. -// - When the game sets up and the round begins, have it automatically pick random books from the DB to populate the library with. Even if the Librarian is a useless fuck there are at least a few books around. -// - Allow books to be "hollowed out" like the Chaplain's Bible, allowing you to store one pocket-sized item inside. -// - Make books/book cases burn when exposed to flame. -// - Make book binder hackable. -// - Books shouldn't print straight from the library computer. Make it synch with a machine like the book binder to print instead. This should consume some sort of resource. diff --git a/code/modules/library/manuals/engineering.dm b/code/modules/library/manuals/engineering.dm deleted file mode 100644 index e98242924b7ee..0000000000000 --- a/code/modules/library/manuals/engineering.dm +++ /dev/null @@ -1,685 +0,0 @@ -/obj/item/book/manual/engineering_guide - name = "Engineering Textbook" - icon_state ="bookEngineering2" - author = "Engineering Encyclopedia" - title = "Engineering Textbook" - url = "Engineering" - -/obj/item/book/manual/robotics_cyborgs - name = "Cyborgs for Dummies" - icon_state = "borgbook" - author = "XISC" - title = "Cyborgs for Dummies" - - dat = {" - - - - - -

              Cyborgs for Dummies

              - -

              Chapters

              - -
                -
              1. Cyborg Related Equipment
              2. -
              3. Cyborg Modules
              4. -
              5. Cyborg Construction
              6. -
              7. Cyborg Maintenance
              8. -
              9. Cyborg Repairs
              10. -
              11. In Case of Emergency
              12. -
              - - -

              Cyborg Related Equipment

              - -

              Exosuit Fabricator

              - The Exosuit Fabricator is the most important piece of equipment related to cyborgs. It allows the construction of the core cyborg parts. Without these machines, cyborgs cannot be built. It seems that they may also benefit from advanced research techniques. - -

              Cyborg Recharging Station

              - This useful piece of equipment will suck power out of the power systems to charge a cyborg's power cell back up to full charge. - -

              Robotics Control Console

              - This useful piece of equipment can be used to immobilize or destroy a cyborg. A word of warning: Cyborgs are expensive pieces of equipment, do not destroy them without good reason, or the Company may see to it that it never happens again. - - -

              Cyborg Modules

              - When a cyborg is created it picks out of an array of modules to designate its purpose. There are 11 different cyborg modules.
              - All cyborg modules carry a flash. - -

              Standard Cyborg

              - The standard cyborg module is a multi-purpose cyborg. It is equipped with various modules, allowing it to do basic tasks.
              A Standard Cyborg comes with: -
                -
              • Crowbar
              • -
              • Wrench
              • -
              • Stun Baton
              • -
              • Health Analyzer
              • -
              • Fire Extinguisher
              • -
              - -

              Research Cyborg

              - The research cyborg module is an effective researching machine. It is equipped with tools to effectively run RnD.A Research Cyborg comes with: -
                -
              • Portable Destructive Analyzer
              • -
              • Research Gripper
              • -
              • Sheet Loader
              • -
              • Robot Analyzer
              • -
              • Robot Card
              • -
              • Set of Engineering Tools
              • -
              • Laser Scalpel
              • -
              • Circular Saw
              • -
              • Fire Extinguisher
              • -
              • Syringe
              • -
              • Chemistry Gripper
              • -
              • Nanopaste
              • -
              - -

              Engineering Cyborg

              - The Engineering cyborg module comes equipped with various engineering-related tools to help with engineering-related tasks.
              An Engineering Cyborg comes with: -
                -
              • A basic set of engineering tools
              • -
              • Metal Synthesizer
              • -
              • Plasteel Synthesizer
              • -
              • Reinforced Glass Synthesizer
              • -
              • Wire Synthesizer
              • -
              • Fire Extinguisher
              • -
              • Roll of Tape
              • -
              • Built-in Optical Meson Scanners
              • -
              - -

              Mining Cyborg

              - The Mining Cyborg module comes equipped with the latest in mining equipment. They are efficient at mining due to no need for oxygen, but their power cells limit their time in the mines.
              A Mining Cyborg comes with: -
                -
              • Wrench
              • -
              • Scredriver
              • -
              • Crowbar
              • -
              • Ore Satchel
              • -
              • Borg Drill
              • -
              • Mining Gripper
              • -
              • Ore Scanner
              • -
              - -

              Security Cyborg

              - The Security Cyborg module is equipped with effective security measures used to apprehend and arrest criminals.
              A Security Cyborg comes with: -
                -
              • Stun Baton
              • -
              • Handcuffs
              • -
              • Energy Gun
              • -
              • Megaphone
              • -
              • Roll of Tape
              • -
              - -

              Janitor Cyborg

              - The Janitor Cyborg module is equipped with various cleaning-facilitating devices.
              A Janitor Cyborg comes with: -
                -
              • Mop
              • -
              • Hand Bucket
              • -
              • Cleaning Spray Synthesizer and Spray Nozzle
              • -
              • Light Replacer
              • -
              • Trash Bag
              • -
              - -

              Service Cyborg

              - The service cyborg module comes ready to serve your human needs. It includes various entertainment and refreshment devices. Occasionally some service cyborgs may have been referred to as "Bros."
              A Service Cyborg comes with: -
                -
              • Service Gripper
              • -
              • Bucket
              • -
              • Hoe
              • -
              • Hatchet
              • -
              • Zippo Lighter
              • -
              • Rapid-Service-Fabricator (Produces various entertainment and refreshment objects)
              • -
              • Plant Analyzer
              • -
              • Robot Harvester
              • -
              • Rolling Pin
              • -
              • Knife
              • -
              - -

              Clerical Cyborg

              - The clerical cyborg module is prepared to run the supply department, including a vareity of stamps.
              A clerical cyborg comes with: -
                -
              • Pen
              • -
              • Paper Dispenser
              • -
              • Clerical Gripper
              • -
              • Hand Labeler
              • -
              • Generic Stamp
              • -
              • Denied Stamp
              • -
              • Package Wrapper
              • -
              • Destination Tagger
              • -
              - -

              Crisis Cyborg

              - The crisis cyborg module is prepared to handle a variety of non-surgical medical emergencies.
              A medical cyborg comes with: -
                -
              • Crowbar
              • -
              • Health Analyzer
              • -
              • Reagent Scanner
              • -
              • Roller Bed Rack
              • -
              • Body Bag Rack
              • -
              • Hypospray
              • -
              • Automatic Defibrillator
              • -
              • Industrial Dropper
              • -
              • Syringe
              • -
              • Chemistry Gripper
              • -
              • Fire Extinguisher
              • -
              • Inflatables Dispenser
              • -
              • Roll of Tape
              • -
              - -

              Surgeon Cyborg

              - The surgeon cyborg modules is prepared to handle a variety of surgical medical emergencies.
              A medical cyborg comes with: -
                -
              • Set of Surgery Tools
              • -
              • Health Analyzer
              • -
              • Roller Bed Rack
              • -
              • Body Bag Rack
              • -
              • Hypospray
              • -
              • Automatic Defibrillator
              • -
              • Industrial Dropper
              • -
              • Syringe
              • -
              • Chemistry Gripper
              • -
              • Fire Extinguisher
              • -
              • Inflatables Dispenser
              • -
              • Roll of Tape
              • -
              - -

              Cyborg Construction

              - Cyborg construction is a rather easy process, requiring a decent amount of metal and a few other supplies.
              The required materials to make a cyborg are: -
                -
              • Metal
              • -
              • Two Flashes
              • -
              • One Power Cell (Preferably rated to 15000w)
              • -
              • Some electrical wires
              • -
              • One Human Brain
              • -
              • One Man-Machine Interface
              • -
              - Once you have acquired the materials, you can start on construction of your cyborg.
              To construct a cyborg, follow the steps below: -
                -
              1. Start the Exosuit Fabricators constructing all of the cyborg parts
              2. -
              3. While the parts are being constructed, take your human brain, and place it inside the Man-Machine Interface
              4. -
              5. Once you have a Robot Head, place your two flashes inside the eye sockets
              6. -
              7. Once you have your Robot Chest, wire the Robot chest, then insert the power cell
              8. -
              9. Attach all of the Robot parts to the Robot frame
              10. -
              11. Insert the Man-Machine Interface (With the Brain inside) into the Robot Body
              12. -
              13. Congratulations! You have a new cyborg!
              14. -
              - -

              Cyborg Maintenance

              - Occasionally Cyborgs may require maintenance of a couple types, this could include replacing a power cell with a charged one, or possibly maintaining the cyborg's internal wiring. - -

              Replacing a Power Cell

              - Replacing a Power cell is a common type of maintenance for cyborgs. It usually involves replacing the cell with a fully charged one, or upgrading the cell with a larger capacity cell.
              The steps to replace a cell are as follows: -
                -
              1. Unlock the Cyborg's Interface by swiping your ID on it
              2. -
              3. Open the Cyborg's outer panel using a crowbar
              4. -
              5. Remove the old power cell
              6. -
              7. Insert the new power cell
              8. -
              9. Close the Cyborg's outer panel using a crowbar
              10. -
              11. Lock the Cyborg's Interface by swiping your ID on it, this will prevent non-qualified personnel from attempting to remove the power cell
              12. -
              - -

              Exposing the Internal Wiring

              - Exposing the internal wiring of a cyborg is fairly easy to do, and is mainly used for cyborg repairs.
              You can easily expose the internal wiring by following the steps below: -
                -
              1. Follow Steps 1 - 3 of "Replacing a Cyborg's Power Cell"
              2. -
              3. Open the cyborg's internal wiring panel by using a screwdriver to unsecure the panel
              4. -
              - To re-seal the cyborg's internal wiring: -
                -
              1. Use a screwdriver to secure the cyborg's internal panel
              2. -
              3. Follow steps 4 - 6 of "Replacing a Cyborg's Power Cell" to close up the cyborg
              4. -
              - -

              Cyborg Repairs

              - Occasionally a Cyborg may become damaged. This could be in the form of impact damage from a heavy or fast-travelling object, or it could be heat damage from high temperatures, or even lasers or Electromagnetic Pulses (EMPs). - -

              Dents

              - If a cyborg becomes damaged due to impact from heavy or fast-moving objects, it will become dented. Sure, a dent may not seem like much, but it can compromise the structural integrity of the cyborg, possibly causing a critical failure. - Dents in a cyborg's frame are rather easy to repair, all you need is to apply a welding tool to the dented area, and the high-tech cyborg frame will repair the dent under the heat of the welder. - -

              Excessive Heat Damage

              - If a cyborg becomes damaged due to excessive heat, it is likely that the internal wires will have been damaged. You must replace those wires to ensure that the cyborg remains functioning properly.
              To replace the internal wiring follow the steps below: -
                -
              1. Unlock the Cyborg's Interface by swiping your ID
              2. -
              3. Open the Cyborg's External Panel using a crowbar
              4. -
              5. Remove the Cyborg's Power Cell
              6. -
              7. Using a screwdriver, expose the internal wiring of the Cyborg
              8. -
              9. Replace the damaged wires inside the cyborg
              10. -
              11. Secure the internal wiring cover using a screwdriver
              12. -
              13. Insert the Cyborg's Power Cell
              14. -
              15. Close the Cyborg's External Panel using a crowbar
              16. -
              17. Lock the Cyborg's Interface by swiping your ID
              18. -
              - These repair tasks may seem difficult, but are essential to keep your cyborgs running at peak efficiency. - -

              In Case of Emergency

              - In case of emergency, there are a few steps you can take. - -

              "Rogue" Cyborgs

              - If the cyborgs seem to become "rogue", they may have non-standard laws. In this case, use extreme caution. - To repair the situation, follow these steps: -
                -
              1. Locate the nearest robotics console
              2. -
              3. Determine which cyborgs are "Rogue"
              4. -
              5. Press the lockdown button to immobilize the cyborg
              6. -
              7. Locate the cyborg
              8. -
              9. Expose the cyborg's internal wiring
              10. -
              11. Check to make sure the LawSync and AI Sync lights are lit
              12. -
              13. If they are not lit, pulse the LawSync wire using a multitool to enable the cyborg's LawSync
              14. -
              15. Proceed to a cyborg upload console. The Company usually places these in the same location as AI upload consoles.
              16. -
              17. Use a "Reset" upload moduleto reset the cyborg's laws
              18. -
              19. Proceed to a Robotics Control console
              20. -
              21. Remove the lockdown on the cyborg
              22. -
              - -

              As a last resort

              - If all else fails in a case of cyborg-related emergency, there may be only one option. Using a Robotics Control console, you may have to remotely detonate the cyborg. -

              WARNING:

              Do not detonate a borg without an explicit reason for doing so. Cyborgs are expensive pieces of company equipment, and you may be punished for detonating them without reason. - - - - "} - -/obj/item/book/manual/engineering_construction - name = "Repairs and Construction" - icon_state ="bookEngineering" - author = "Engineering Encyclopedia" // Who wrote the thing, can be changed by pen or PC. It is not automatically assigned - title = "Repairs and Construction" - url = "Guide_to_Construction" - -/obj/item/book/manual/engineering_particle_accelerator - name = "Particle Accelerator User's Guide" - icon_state ="bookParticleAccelerator" - author = "Engineering Encyclopedia" // Who wrote the thing, can be changed by pen or PC. It is not automatically assigned - title = "Particle Accelerator User's Guide" - -/obj/item/book/manual/engineering_particle_accelerator/New() - ..() - dat = {" - - - - - -

              Experienced User's Guide

              - -

              Setting up the accelerator

              - -
                -
              1. Wrench all pieces to the floor
              2. -
              3. Add wires to all the pieces
              4. -
              5. Close all the panels with your screwdriver
              6. -
              - -

              Using the accelerator

              - -
                -
              1. Open the control panel
              2. -
              3. Set the speed to 2
              4. -
              5. Start firing at the singularity generator
              6. -
              7. When the singularity reaches a large enough size so it starts moving on it's own set the speed down to 0, but don't shut it off
              8. -
              9. Remember to wear a radiation suit when working with this machine... we did tell you that at the start, right?
              10. -
              - - - - "} - - -/obj/item/book/manual/supermatter_engine - name = "Supermatter Engine Operating Manual" - icon_state = "bookSupermatter" - author = "Central Engineering Division" - title = "Supermatter Engine Operating Manual" - url = "Supermatter_Engine" - -/obj/item/book/manual/rust_engine - name = "R-UST Operating Manual" - icon_state = "bookMagazine" - author = "Cindy Crawfish" - title = "R-UST Operating Manual" - url = "R-UST" - -/obj/item/book/manual/engineering_hacking - name = "Hacking" - icon_state ="bookHacking" - author = "Engineering Encyclopedia" // Who wrote the thing, can be changed by pen or PC. It is not automatically assigned - title = "Hacking" - url = "Hacking" - -/obj/item/book/manual/engineering_singularity_safety - name = "Singularity Safety in Special Circumstances" - icon_state ="bookEngineeringSingularitySafety" - author = "Engineering Encyclopedia" // Who wrote the thing, can be changed by pen or PC. It is not automatically assigned - title = "Singularity Safety in Special Circumstances" - - dat = {" - - - - -

              Singularity Safety in Special Circumstances

              - -

              Power outage

              - - A power problem has made you lose power? Could be wiring problems or syndicate power sinks. In any case follow these steps: - -
                -
              1. PANIC!
              2. -
              3. Get your ass over to engineering! QUICKLY!!!
              4. -
              5. Get to the Area Power Controller which controls the power to the emitters.
              6. -
              7. Swipe it with your ID card - if it doesn't unlock, continue with step 15.
              8. -
              9. Open the console and disengage the cover lock.
              10. -
              11. Pry open the APC with a Crowbar.
              12. -
              13. Take out the empty power cell.
              14. -
              15. Put in the new, full power cell - if you don't have one, continue with step 15.
              16. -
              17. Quickly put on a Radiation suit.
              18. -
              19. Check if the singularity field generators withstood the down-time - if they didn't, continue with step 15.
              20. -
              21. Since disaster was averted you now have to ensure it doesn't repeat. If it was a powersink which caused it and if the engineering APC is wired to the same powernet, which the powersink is on, you have to remove the piece of wire which links the APC to the powernet. If it wasn't a powersink which caused it, then skip to step 14.
              22. -
              23. Grab your crowbar and pry away the tile closest to the APC.
              24. -
              25. Use the wirecutters to cut the wire which is connecting the grid to the terminal.
              26. -
              27. Go to the bar and tell the guys how you saved them all. Stop reading this guide here.
              28. -
              29. GET THE FUCK OUT OF THERE!!!
              30. -
              - -

              Shields get damaged

              - -
                -
              1. GET THE FUCK OUT OF THERE!!! FORGET THE WOMEN AND CHILDREN, SAVE YOURSELF!!!
              2. -
              - - - "} - -/obj/item/book/manual/ripley_build_and_repair - name = "APLU \"Ripley\" Construction and Operation Manual" - icon_state ="book" - author = "Randall Varn, Einstein Engines Senior Mechanic" // Who wrote the thing, can be changed by pen or PC. It is not automatically assigned - title = "APLU \"Ripley\" Construction and Operation Manual" - - dat = {" - - - - -
              -
              - Weyland-Yutani - Building Better Worlds -

              Autonomous Power Loader Unit \"Ripley\"

              -
              -

              Specifications:

              -
                -
              • Class: Autonomous Power Loader
              • -
              • Scope: Logistics and Construction
              • -
              • Weight: 820kg (without operator and with empty cargo compartment)
              • -
              • Height: 2.5m
              • -
              • Width: 1.8m
              • -
              • Top speed: 5km/hour
              • -
              • Operation in vacuum/hostile environment: Possible -
              • Airtank volume: 500 liters
              • -
              • Devices: -
                  -
                • Hydraulic clamp
                • -
                • High-speed drill
                • -
                -
              • -
              • Propulsion device: Powercell-powered electro-hydraulic system
              • -
              • Powercell capacity: Varies
              • -
              - -

              Construction:

              -
                -
              1. Connect all exosuit parts to the chassis frame.
              2. -
              3. Connect all hydraulic fittings and tighten them up with a wrench.
              4. -
              5. Adjust the servohydraulics with a screwdriver.
              6. -
              7. Wire the chassis (Cable is not included).
              8. -
              9. Use the wirecutters to remove the excess cable if needed.
              10. -
              11. Install the central control module (Not included. Use supplied datadisk to create one).
              12. -
              13. Secure the mainboard with a screwdriver.
              14. -
              15. Install the peripherals control module (Not included. Use supplied datadisk to create one).
              16. -
              17. Secure the peripherals control module with a screwdriver.
              18. -
              19. Install the internal armor plating (Not included due to corporate regulations. Can be made using 5 metal sheets).
              20. -
              21. Secure the internal armor plating with a wrench.
              22. -
              23. Weld the internal armor plating to the chassis.
              24. -
              25. Install the external reinforced armor plating (Not included due to corporate regulations. Can be made using 5 reinforced metal sheets).
              26. -
              27. Secure the external reinforced armor plating with a wrench.
              28. -
              29. Weld the external reinforced armor plating to the chassis.
              30. -
              - -

              Additional Information:

              -
                -
              • The firefighting variation is made in a similar fashion.
              • -
              • A firesuit must be connected to the firefighter chassis for heat shielding.
              • -
              • Internal armor is plasteel for additional strength.
              • -
              • External armor must be installed in 2 parts, totalling 10 sheets.
              • -
              • Completed exosuit is more resilient against fire, and is a bit more durable overall.
              • -
              • The Company is determined to ensure the safety of its investments employees.
              • -
              - - - "} - -/obj/item/book/manual/atmospipes - name = "Pipes and You: Getting To Know Your Scary Tools" - icon_state = "pipingbook" - author = "Maria Crash, Senior Atmospherics Technician" - title = "Pipes and You: Getting To Know Your Scary Tools" - dat = {" - - - - - -

              Contents

              -
                -
              1. Author's Foreword
              2. -
              3. Basic Piping
              4. -
              5. Insulated Pipes
              6. -
              7. Atmospherics Devices
              8. -
              9. Heat Exchange Systems
              10. -
              11. Final Checks
              12. -

              - -

              HOW TO NOT SUCK QUITE SO HARD AT ATMOSPHERICS


              - Or: What the fuck does a "pressure regulator" do?

              - - Alright. It has come to my attention that a variety of people are unsure of what a "pipe" is and what it does. - Apparently, there is an unnatural fear of these arcane devices and their "gases." Spooky, spooky. So, - this will tell you what every device constructable by an ordinary pipe dispenser within atmospherics actually does. - You are not going to learn what to do with them to be the super best person ever, or how to play guitar with passive gates, - or something like that. Just what stuff does.

              - - -

              Basic Pipes

              - The boring ones.
              - Most ordinary pipes are pretty straightforward. They hold gas. If gas is moving in a direction for some reason, gas will flow in that direction. - That's about it. Even so, here's all of your wonderful pipe options.
              - -
                -
              • Straight pipes: They're pipes. One-meter sections. Straight line. Pretty simple. Just about every pipe and device is based around this - standard one-meter size, so most things will take up as much space as one of these.
              • -
              • Bent pipes: Pipes with a 90 degree bend at the half-meter mark. My goodness.
              • -
              • Pipe manifolds: Pipes that are essentially a "T" shape, allowing you to connect three things at one point.
              • -
              • 4-way manifold: A four-way junction.
              • -
              • Pipe cap: Caps off the end of a pipe. Open ends don't actually vent air, because of the way the pipes are assembled, so, uh, use them to decorate your house or something.
              • -
              • Manual valve: A valve that will block off airflow when turned. Can't be used by the AI or cyborgs, because they don't have hands.
              • -
              • Manual T-valve: Like a manual valve, but at the center of a manifold instead of a straight pipe.


              • -
              - - An important note here is that pipes are now done in three distinct lines - general, supply, and scrubber. You can move gases between these with a universal adapter. Use the correct position for the correct location. - Connecting scrubbers to a supply position pipe makes you an idiot who gives everyone a difficult job. Insulated and HE pipes don't go through these positions. - -

              Insulated Pipes

              -
            • Bent pipes: Pipes with a 90 degree bend at the half-meter mark. My goodness.
            • -
            • Pipe manifolds: Pipes that are essentially a "T" shape, allowing you to connect three things at one point.
            • -
            • 4-way manifold: A four-way junction.
            • -
            • Pipe cap: Caps off the end of a pipe. Open ends don't actually vent air, because of the way the pipes are assembled, so, uh. Use them to decorate your house or something.
            • -
            • Manual Valve: A valve that will block off airflow when turned. Can't be used by the AI or cyborgs, because they don't have hands.
            • -
            • Manual T-Valve: Like a manual valve, but at the center of a manifold instead of a straight pipe.


            • - -

              Insulated Pipes


              - Special Public Service Announcement.
              - Our regular pipes are already insulated. These are completely worthless. Punch anyone who uses them.

              - -

              Devices:

              - They actually do something.
              - This is usually where people get frightened, afraid, and start calling on their gods and/or cowering in fear. Yes, I can see you doing that right now. - Stop it. It's unbecoming. Most of these are fairly straightforward.
              - -
                -
              • Gas pump: Take a wild guess. It moves gas in the direction it's pointing (marked by the red line on one end). It moves it based on pressure, the maximum output being 15000 kPa (kilopascals). - Ordinary atmospheric pressure, for comparison, is 101.3 kPa, and the minimum pressure of room-temperature pure oxygen needed to not suffocate in a matter of minutes is 16 kPa - (though 18 kPa is preferred when using internals with pure oxygen, for various reasons). A high-powered variant will move gas more quickly at the expense of consuming more power. Do not turn the distribution loop up to 15000 kPa. - You will make engiborgs cry and the Chief Engineer will beat you.
              • -
              • Pressure regulator: These replaced the old passive gates. You can choose to regulate pressure by input or output, and regulate flow rate. Regulating by input means that when input pressure is above the limit, gas will flow. - Regulating by output means that when pressure is below the limit, gas will flow. Flow rate can be controlled.
              • -
              • Unary vent: The basic vent used in rooms. It pumps gas into the room, but can't suck it back out. Controlled by the room's air alarm system.
              • -
              • Scrubber: The other half of room equipment. Filters air, and can suck it in entirely in what's called a "panic siphon." Activating a panic siphon without very good reason will kill someone. Don't do it.
              • -
              • Meter: A little box with some gauges and numbers. Fasten it to any pipe or manifold and it'll read you the pressure in it. Very useful.
              • -
              • Gas mixer: Two sides are input, one side is output. Mixes the gases pumped into it at the ratio defined. The side perpendicular to the other two is "node 2," for reference, on non-mirrored mixers.. - Output is controlled by flow rate. There is also an "omni" variant that allows you to set input and output sections freely..
              • -
              • Gas filter: Essentially the opposite of a gas mixer. One side is input. The other two sides are output. One gas type will be filtered into the perpendicular output pipe, - the rest will continue out the other side. Can also output from 0-4500 kPa. The "omni" vairant allows you to set input and output sections freely.
              • -
              - -

              Heat Exchange Systems

              - Will not set you on fire.
              - These systems are used to only transfer heat between two pipes. They will not move gases or any other element, but will equalize the temperature (eventually). Note that because of how gases work (remember: pv=nRt), - a higher temperature will raise pressure, and a lower one will lower temperature.
              - -
            • Pipe: This is a pipe that will exchange heat with the surrounding atmosphere. Place in fire for superheating. Place in space for supercooling.
            • -
            • Bent pipe: Take a wild guess.
            • -
            • Junction: The point where you connect your normal pipes to heat exchange pipes. Not necessary for heat exchangers, but necessary for H/E pipes/bent pipes.
            • -
            • Heat exchanger: These funky-looking bits attach to an open pipe end. Put another heat exchanger directly across from it, and you can transfer heat across two pipes without having to have the gases touch. - This normally shouldn't exchange with the ambient air, despite being totally exposed. Just don't ask questions.

            • - - That's about it for pipes. Go forth, armed with this knowledge, and try not to break, burn down, or kill anything. Please. - - - - - "} - -/obj/item/book/manual/evaguide - name = "EVA Gear and You: Not Spending All Day Inside" - icon_state = "evabook" - author = "Maria Crash, Senior Atmospherics Technician" - title = "EVA Gear and You: Not Spending All Day Inside" - dat = {" - - - - - -

              EVA Gear and You: Not Spending All Day Inside

              - Or: How not to suffocate because there's a hole in your shoes
              - -

              Contents

              -
                -
              1. A foreword on using EVA gear
              2. -
              3. Donning a Civilian Suit
              4. -
              5. Putting on a Hardsuit
              6. -
              7. Cyclers and Other Modification Equipment
              8. -
              9. Final Checks
              10. -
              -
              - - EVA gear. Wonderful to use. It's useful for mining, engineering, and occasionally just surviving, if things are that bad. Most people have EVA training, - but apparently there are some people out in space who don't. This guide should give you a basic idea of how to use this gear, safely. It's split into two sections: - Civilian suits and hardsuits.

              - -

              Civilian Suits

              - The bulkiest things this side of Alpha Centauri
              - These suits are the grey ones that are stored in EVA. They're the more simple to get on, but are also a lot bulkier, and provide less protection from environmental hazards such as radiation or physical impact. - As Medical, Engineering, Security, and Mining all have hardsuits of their own, these don't see much use, but knowing how to put them on is quite useful anyways.

              - - First, take the suit. It should be in three pieces: A top, a bottom, and a helmet. Put the bottom on first, shoes and the like will fit in it. If you have magnetic boots, however, - put them on on top of the suit's feet. Next, get the top on, as you would a shirt. It can be somewhat awkward putting these pieces on, due to the makeup of the suit, - but to an extent they will adjust to you. You can then find the snaps and seals around the waist, where the two pieces meet. Fasten these, and double-check their tightness. - The red indicators around the waist of the lower half will turn green when this is done correctly. Next, put on whatever breathing apparatus you're using, be it a gas mask or a breath mask. Make sure the oxygen tube is fastened into it. - Put on the helmet now, straightforward, and make sure the tube goes into the small opening specifically for internals. Again, fasten seals around the neck, a small indicator light in the inside of the helmet should go from red to off when all is fastened. - There is a small slot on the side of the suit where an emergency oxygen tank or extended emergency oxygen tank will fit, - but it is recommended to have a full-sized tank on your back for EVA.

              - - These suits tend to be wearable by most species. They're large and flexible. They might be pretty uncomfortable for some, though, so keep that in mind.

              - -

              Hardsuits

              - Heavy, uncomfortable, still the best option.
              - These suits come in Engineering, Mining, and the Armory. There's also a couple Medical Hardsuits in EVA. These provide a lot more protection than the standard suits.

              - - Similarly to the other suits, these are split into three parts. Fastening the pant and top are mostly the same as the other spacesuits, with the exception that these are a bit heavier, - though not as bulky. The helmet goes on differently, with the air tube feeding into the suit and out a hole near the left shoulder, while the helmet goes on turned ninety degrees counter-clockwise, - and then is screwed in for one and a quarter full rotations clockwise, leaving the faceplate directly in front of you. There is a small button on the right side of the helmet that activates the helmet light. - The tanks that fasten onto the side slot are emergency tanks, as well as full-sized oxygen tanks, leaving your back free for a backpack or satchel.

              - - These suits generally only fit one species. Standard-issue suits are usually human-fitting by default, but there's equipment that can make modifications to the hardsuits to fit them to other species.

              - -

              Modification Equipment

              - How to actually make hardsuits fit you.
              - There's a variety of equipment that can modify hardsuits to fit species that can't fit into them, making life quite a bit easier.

              - - The first piece of equipment is a suit cycler. This is a large machine resembling the storage pods that are in place in some places. These are machines that will automatically tailor a suit to certain specifications. - The largest uses of them are for their cleaning functions and their ability to tailor suits for a species. Do not enter them physically. You will die from any of the functions being activated, and it will be painful. - These machines can both tailor a suit between species, and between types. This means you can convert engineering hardsuits to atmospherics, or the other way. This is useful. Use it if you can.

              - - There's also modification kits that let you modify suits yourself. These are extremely difficult to use unless you understand the actual construction of the suit. I do not reccomend using them unless no other option is available. - -

              Final Checks

              -
                -
              • Are all seals fastened correctly?
              • -
              • If you have modified it manually, is absolutely everything sealed perfectly?
              • -
              • Do you either have shoes on under the suit, or magnetic boots on over it?
              • -
              • Do you have a mask on and internals on the suit or your back?
              • -
              • Do you have a way to communicate with your fellow crew in case something goes wrong?
              • -
              • Do you have a second person watching if this is a training session?

              • -
              - - If you don't have any further issues, go out and do whatever is necessary. - - - - "} diff --git a/code/modules/library/manuals/manuals.dm b/code/modules/library/manuals/manuals.dm deleted file mode 100644 index b0c3e69de7136..0000000000000 --- a/code/modules/library/manuals/manuals.dm +++ /dev/null @@ -1,237 +0,0 @@ -/obj/item/book/manual/chef_recipes - name = "Chef Recipes" - icon_state = "cooked_book" - author = "Victoria Ponsonby" - title = "Chef Recipes" - - dat = {" - - - - - -

              Food for Dummies

              - Here is a guide on basic food recipes and also how to not poison your customers accidentally. - -

              Basics:

              - Knead an egg and some flour along with some water to make dough. Bake that to make a bun or flatten and cut it. - -

              Burger:

              - Put a bun and some meat into the microwave and turn it on. Then wait. - -

              Bread:

              - Put some dough and an egg into the microwave and then wait. - -

              Waffles:

              - Add two lumps of dough and 10 units of sugar to the microwave and then wait. - -

              Popcorn:

              - Add 1 corn to the microwave and wait. - -

              Meat Steak:

              - Put a slice of meat, 1 unit of salt, and 1 unit of pepper into the microwave and wait. - -

              Meat Pie:

              - Put a flattened piece of dough and some meat into the microwave and wait. - -

              Boiled Spaghetti:

              - Put the spaghetti (processed flour) and 5 units of water into the microwave and wait. - -

              Donuts:

              - Add some dough and 5 units of sugar to the microwave and wait. - -

              Fries:

              - Add one potato to the processor, then bake them in the microwave. - - - - - "} - - -/obj/item/book/manual/barman_recipes - name = "Barman Recipes" - icon_state = "barbook" - author = "Sir John Rose" - title = "Barman Recipes" - - dat = {" - - - - - -

              Drinks for Dummies

              - Here's a guide for some basic drinks. - -

              Black Russian:

              - Mix vodka and Kahlua into a glass. - -

              Cafe Latte:

              - Mix milk and coffee into a glass. - -

              Classic Martini:

              - Mix vermouth and gin into a glass. - -

              Gin Tonic:

              - Mix gin and tonic into a glass. - -

              Grog:

              - Mix rum and water into a glass. - -

              Irish Cream:

              - Mix cream and whiskey into a glass. - -

              The Manly Dorf:

              - Mix ale and beer into a glass. - -

              Mead:

              - Mix enzyme, water, and sugar into a glass. - -

              Screwdriver:

              - Mix vodka and orange juice into a glass. - - - - "} - - -/obj/item/book/manual/detective - name = "The Film Noir: Proper Procedures for Investigations" - icon_state ="bookDetective" - author = "The Company" - title = "The Film Noir: Proper Procedures for Investigations" - - dat = {" - - - - -

              Detective Work

              - - Between your bouts of self-narration and drinking whiskey on the rocks, you might get a case or two to solve.
              - To have the best chance to solve your case, follow these directions: -

              -

                -
              1. Go to the crime scene.
              2. -
              3. Take your scanner and scan EVERYTHING (Yes, the doors, the tables, even the dog).
              4. -
              5. Once you are reasonably certain you have every scrap of evidence you can use, find all possible entry points and scan them, too.
              6. -
              7. Return to your office.
              8. -
              9. Using your forensic scanning computer, scan your scanner to upload all of your evidence into the database.
              10. -
              11. Browse through the resulting dossiers, looking for the one that either has the most complete set of prints, or the most suspicious items handled.
              12. -
              13. If you have 80% or more of the print (The print is displayed), go to step 10, otherwise continue to step 8.
              14. -
              15. Look for clues from the suit fibres you found on your perpetrator, and go about looking for more evidence with this new information, scanning as you go.
              16. -
              17. Try to get a fingerprint card of your perpetrator, as if used in the computer, the prints will be completed on their dossier.
              18. -
              19. Assuming you have enough of a print to see it, grab the biggest complete piece of the print and search the security records for it.
              20. -
              21. Since you now have both your dossier and the name of the person, print both out as evidence and get security to nab your baddie.
              22. -
              23. Give yourself a pat on the back and a bottle of the ship's finest vodka, you did it!
              24. -
              -

              - It really is that easy! Good luck! - - - "} - -/obj/item/book/manual/nuclear - name = "Fission Mailed: Nuclear Sabotage 101" - icon_state ="bookNuclear" - author = "Syndicate" - title = "Fission Mailed: Nuclear Sabotage 101" - - dat = {" - - - - -

              Nuclear Explosives 101

              - Hello and thank you for choosing the Syndicate for your nuclear information needs. Today's crash course will deal with the operation of a Nuclear Fission Device.

              - - First and foremost, DO NOT TOUCH ANYTHING UNTIL THE BOMB IS IN PLACE. Pressing any button on the compacted bomb will cause it to extend and bolt itself into place. If this is done, to unbolt it, one must completely log in, which at this time may not be possible.
              - -

              To make the nuclear device functional

              -
                -
              • Place the nuclear device in the designated detonation zone.
              • -
              • Extend and anchor the nuclear device from its interface.
              • -
              • Insert the nuclear authorisation disk into the slot.
              • -
              • Type the numeric authorisation code into the keypad. This should have been provided.
                - Note: If you make a mistake, press R to reset the device. -
              • Press the E button to log on to the device.
              • -

              - - You now have activated the device. To deactivate the buttons at anytime, for example when you've already prepped the bomb for detonation, remove the authentication disk OR press R on the keypad.

              - Now the bomb CAN ONLY be detonated using the timer. Manual detonation is not an option. Toggle off the SAFETY.
              - Note: You wouldn't believe how many Syndicate Operatives with doctorates have forgotten this step.

              - - So use the - - and + + to set a detonation time between 5 seconds and 10 minutes. Then press the timer toggle button to start the countdown. Now remove the authentication disk so that the buttons deactivate.
              - Note: THE BOMB IS STILL SET AND WILL DETONATE

              - - Now before you remove the disk, if you need to move the bomb, you can toggle off the anchor, move it, and re-anchor.

              - - Remember the order:
              - Disk, Code, Safety, Timer, Disk, RUN!

              - Intelligence Analysts believe that normal corporate procedure is for the Captain to secure the nuclear authentication disk.

              - - Good luck! - - - "} - -/obj/item/book/manual/psionics - name = "Psychonetics" - icon_state = "foundation" - author = "John Titor" - title = "Psychonetics" - - dat = {" - - - - -

              Psychonetics

              - -

              This seems to be a dry, longwinded reference text for the form of strange mental powers called psionics. The author spends way too much time trying to advertise his cult, though.

              - -

              The general gist of things seems to be that sometime in the last decade or so, the first cases of 'spontaneous operancy' became known. People who spent a lot of time in deep space, or who studied certain esoteric fields of mathematics, became able to perform strange feats like levitating coins or removing headaches with nothing but their minds. The text goes on to explain that psionics are perfectly harmless, and that studies (no citations) have shown operants are no more likely to go mad and murder people than anyone else.

              - -

              A postscript by a group called the Cuchulain Foundation invites anyone who knows an operant, or thinks they might be one, to send them a message via comms and get enrolled in their training and registration program in orbit around Neptune. It's catered. The postscript adds hastily that you should never try to activate your own latencies with trauma or drugs, as the results are often lethal.

              - - - - "} diff --git a/code/modules/library/manuals/medical.dm b/code/modules/library/manuals/medical.dm deleted file mode 100644 index 37c3dbfe07404..0000000000000 --- a/code/modules/library/manuals/medical.dm +++ /dev/null @@ -1,147 +0,0 @@ -/obj/item/book/manual/medical_cloning - name = "Cloning Techniques of the 26th Century" - icon_state ="bookCloning" - author = "Medical Journal, volume 3" // Who wrote the thing, can be changed by pen or PC. It is not automatically assigned - title = "Cloning Techniques of the 26th Century" - - dat = {" - - - - - -

              How to Clone People

              - So there are 50 dead people lying on the floor, chairs are spinning like no tomorrow and you haven't the foggiest idea of what to do? Not to worry! - This guide is intended to teach you how to clone people and how to do it right, in a simple, step-by-step process! If at any point of the guide you have a mental meltdown, - genetics probably isn't for you and you should get a job-change as soon as possible before you're sued for malpractice. - -
                -
              1. Acquire body
              2. -
              3. Strip body
              4. -
              5. Put body in cloning machine
              6. -
              7. Scan body
              8. -
              9. Clone body
              10. -
              11. Get clean Structural Enzymes for the body
              12. -
              13. Put body in morgue
              14. -
              15. Await cloned body
              16. -
              17. Cryo and use the clean SE injector
              18. -
              19. Give person clothes back
              20. -
              21. Send person on their way
              22. -
              - -

              Step 1: Acquire body

              - This is pretty much vital for the process because without a body, you cannot clone it. Usually, bodies will be brought to you, so you do not need to worry so much about this step. If you already have a body, great! Move on to the next step. - -

              Step 2: Strip body

              - The cloning machine does not like abiotic items. What this means is you can't clone anyone if they're wearing clothes or holding things, so take all of it off. If it's just one person, it's courteous to put their possessions in the closet. - If you have about seven people awaiting cloning, just leave the piles where they are, but don't mix them around and for God's sake don't let people in to steal them. - -

              Step 3: Put body in cloning machine

              - Grab the body and then put it inside the DNA modifier. If you cannot do this, then you messed up at Step 2. Go back and check you took EVERYTHING off - a commonly missed item is their headset. - -

              Step 4: Scan body

              - Go onto the computer and scan the body by pressing 'Scan - <Subject Name Here>.' If you're successful, they will be added to the records (note that this can be done at any time, even with living people, - so that they can be cloned without a body in the event that they are lying dead on port solars and didn't turn on their suit sensors)! - If not, and it says "Error: Mental interface failure.", then they have left their bodily confines and are one with the spirits. If this happens, just shout at them to get back in their body, - click 'Refresh' and try scanning them again. If there's no success, threaten them with gibbing. - Still no success? Skip over to Step 7 and don't continue after it, as you have an unresponsive body and it cannot be cloned. - If you got "Error: Unable to locate valid genetic data.", you are trying to clone a monkey - start over. - -

              Step 5: Clone body

              - Now that the body has a record, click 'View Records,' click the subject's name, and then click 'Clone' to start the cloning process. Congratulations! You're halfway there. - Remember not to 'Eject' the cloning pod as this will kill the developing clone and you'll have to start the process again. - -

              Step 6: Get clean SEs for body

              - Cloning is a finicky and unreliable process. Whilst it will most certainly bring someone back from the dead, they can have any number of nasty disabilities given to them during the cloning process! - For this reason, you need to prepare a clean, defect-free Structural Enzyme (SE) injection for when they're done. If you're a competent Geneticist, you will already have one ready on your working computer. - If, for any reason, you do not, then eject the body from the DNA modifier (NOT THE CLONING POD) and take it next door to the Genetics research room. Put the body in one of those DNA modifiers and then go onto the console. - Go into View/Edit/Transfer Buffer, find an open slot and click "SE" to save it. Then click 'Injector' to get the SEs in syringe form. Put this in your pocket or something for when the body is done. - -

              Step 7: Put body in morgue

              - Now that the cloning process has been initiated and you have some clean Structural Enzymes, you no longer need the body! Drag it to the morgue and tell the Chef over the radio that they have some fresh meat waiting for them in there. - To put a body in a morgue bed, simply open the tray, grab the body, put it on the open tray, then close the tray again. Use one of the nearby pens to label the bed "CHEF MEAT" in order to avoid confusion. - -

              Step 8: Await cloned body

              - Now go back to the lab and wait for your patient to be cloned. It won't be long now, I promise. - -

              Step 9: Cryo and clean SE injector on person

              - Has your body been cloned yet? Great! As soon as the guy pops out, grab them and stick them in cryo. Clonexadone and Cryoxadone help rebuild their genetic material. Then grab your clean SE injector and jab it in them. Once you've injected them, - they now have clean Structural Enzymes and their defects, if any, will disappear in a short while. - -

              Step 10: Give person clothes back

              - Obviously the person will be naked after they have been cloned. Provided you weren't an irresponsible little shit, you should have protected their possessions from thieves and should be able to give them back to the patient. - No matter how cruel you are, it's simply against protocol to force your patients to walk outside naked. - -

              Step 11: Send person on their way

              - Give the patient one last check-over - make sure they don't still have any defects and that they have all their possessions. Ask them how they died, if they know, so that you can report any foul play over the radio. - Once you're done, your patient is ready to go back to work! Chances are they do not have Medbay access, so you should let them out of Genetics and the Medbay main entrance. - -

              If you've gotten this far, congratulations! You have mastered the art of cloning. Now, the real problem is how to resurrect yourself after that traitor had his way with you for cloning his target. - - - - "} - -/obj/item/book/manual/medical_diagnostics_manual - name = "Medical Diagnostics Manual" - desc = "First, do no harm. A detailed medical practitioner's guide." - icon_state = "bookMedical" - author = "Medical Department" - title = "Medical Diagnostics Manual" - url = "Guide_to_Medicine" - -/obj/item/book/manual/medical_diagnostics_manual/New() - ..() - dat = {" - - - - -
              -

              The Oath

              - - The Medical Oath sworn by recognised medical practitioners in the employ of [GLOB.using_map.company_name]
              - -
                -
              1. Now, as a new doctor, I solemnly promise that I will, to the best of my ability, serve humanity-caring for the sick, promoting good health, and alleviating pain and suffering.
              2. -
              3. I recognise that the practice of medicine is a privilege with which comes considerable responsibility and I will not abuse my position.
              4. -
              5. I will practise medicine with integrity, humility, honesty, and compassion-working with my fellow doctors and other colleagues to meet the needs of my patients.
              6. -
              7. I shall never intentionally do or administer anything to the overall harm of my patients.
              8. -
              9. I will not permit considerations of gender, race, religion, political affiliation, sexual orientation, nationality, or social standing to influence my duty of care.
              10. -
              11. I will oppose policies in breach of human rights and will not participate in them. I will strive to change laws that are contrary to my profession's ethics and will work towards a fairer distribution of health resources.
              12. -
              13. I will assist my patients to make informed decisions that coincide with their own values and beliefs and will uphold patient confidentiality.
              14. -
              15. I will recognise the limits of my knowledge and seek to maintain and increase my understanding and skills throughout my professional life. I will acknowledge and try to remedy my own mistakes and honestly assess and respond to those of others.
              16. -
              17. I will seek to promote the advancement of medical knowledge through teaching and research.
              18. -
              19. I make this declaration solemnly, freely, and upon my honour.
              20. -

              - -
              - - - - - - "} - -/obj/item/book/manual/chemistry_recipes - name = "Guide to Medicines & Drugs" - desc = "A thick manual of chemistry, formulae and recipes useful for a Chemist." - icon_state = "bookChemistry" - author = "Zeng-Hu Pharmaceuticals" - title = "Guide to Medicines & Drugs" - url = "List_of_Medical_Chemicals" \ No newline at end of file diff --git a/code/modules/library/manuals/nanotrasen.dm b/code/modules/library/manuals/nanotrasen.dm deleted file mode 100644 index 6165164c974dc..0000000000000 --- a/code/modules/library/manuals/nanotrasen.dm +++ /dev/null @@ -1,489 +0,0 @@ -/obj/item/book/manual/nt_regs - name = "Corporate Regulations" - desc = "A set of corporate guidelines for employees of a megacorporation." - icon_state = "booknanoregs" - author = "Employee Materials" - title = "Corporate Regulations" - url = "Corporate_Regulations" - -/obj/item/book/manual/hydroponics_pod_people - name = "The Diona Harvest - From Seed to Market" - icon_state ="bookHydroponicsPodPeople" - author = "Farmer John" - title = "The Diona Harvest - From Seed to Market" - - dat = {" - - - - -

              Growing a Diona

              - - Growing a Diona is easy! -

              -

                -
              1. Take a syringe of blood from the body you wish to turn into a Diona.
              2. -
              3. Inject 5 units of blood into the pack of dionaea-replicant seeds.
              4. -
              5. Plant the seeds.
              6. -
              7. Tend to the plants water and nutrition levels until it is time to harvest the Diona.
              8. -
              -

              - Note that for a successful harvest, the body from which the blood was taken from must be dead BEFORE harvesting the pod, however the pod can be growing while they are still alive. Otherwise, the soul would not be able to migrate to the new Diona body.

              - - It really is that easy! Good luck! - - - - "} - -/obj/item/book/manual/research_and_development - name = "Research and Development 101" - icon_state = "rdbook" - author = "Dr. L. Ight" - title = "Research and Development 101" - - dat = {" - - - - - -

              Science For Dummies

              - So you want to further SCIENCE? Good man/woman/thing! However, SCIENCE is a complicated process even though it's quite easy. For the most part, it's a three step process: -
                -
              1. Deconstruct items in the Destructive Analyzer to advance technology or improve the design.
              2. -
              3. Build unlocked designs in the Protolathe and Circuit Imprinter.
              4. -
              5. Repeat!
              6. -
              - - Those are the basic steps to furthering science. What do you do science with, however? Well, you have four major tools: R&D Console, the Destructive Analyzer, the Protolathe, and the Circuit Imprinter. - -

              The R&D Console

              - The R&D console is the cornerstone of any research lab. It is the central system from which the Destructive Analyzer, Protolathe, and Circuit Imprinter (your R&D systems) are controlled. More on those systems in their own sections. - On its own, the R&D console acts as a database for all your technological gains and new devices you discover. So long as the R&D console remains intact, you'll retain all that SCIENCE you've discovered. Protect it though, - because if it gets damaged, you'll lose your data! - In addition to this important purpose, the R&D console has a disk menu that lets you transfer data from the database onto disk or from the disk into the database. - It also has a settings menu that lets you re-sync with nearby R&D devices (if they've become disconnected), lock the console from the unworthy, - upload the data to all other R&D consoles in the network (all R&D consoles are networked by default), connect/disconnect from the network, and purge all data from the database.

              - - NOTE: The technology list screen, circuit imprinter, and protolathe menus are accessible by non-scientists. This is intended to allow 'public' systems for the plebians to utilize some new devices. - -

              Destructive Analyzer

              - This is the source of all technology. Whenever you put a handheld object in it, it analyzes it and determines what sort of technological advancements you can discover from it. If the technology of the object is equal or higher then your current knowledge, - you can destroy the object to further those sciences. - Some devices (notably, some devices made from the protolathe and circuit imprinter) aren't 100% reliable when you first discover them. If these devices break down, you can put them into the Destructive Analyzer and improve their reliability rather than further science. - If their reliability is high enough, it'll also advance their related technologies. - -

              Circuit Imprinter

              - This machine, along with the Protolathe, is used to actually produce new devices. The Circuit Imprinter takes glass and various chemicals (depends on the design) to produce new circuit boards to build new machines or computers. It can even be used to print AI modules. - -

              Protolathe

              - This machine is an advanced form of the Autolathe that produce non-circuit designs. Unlike the Autolathe, it can use processed metal, glass, solid phoron, silver, gold, and diamonds along with a variety of chemicals to produce devices. - The downside is that, again, not all devices you make are 100% reliable when you first discover them. - -

              Reliability and You

              - As it has been stated, many devices, when they're first discovered, do not have a 100% reliability. Instead, - the reliability of the device is dependent upon a base reliability value, whatever improvements to the design you've discovered through the Destructive Analyzer, - and any advancements you've made with the device's source technologies. To be able to improve the reliability of a device, you have to use the device until it breaks beyond repair. Once that happens, you can analyze it in a Destructive Analyzer. - Once the device reaches a certain minimum reliability, you'll gain technological advancements from it. - -

              Building a Better Machine

              - Many machines produced from circuit boards inserted into a machine frames require a variety of parts to construct. These are parts like capacitors, batteries, matter bins, and so forth. As your knowledge of science improves, more advanced versions are unlocked. - If you use these parts when constructing something, its attributes may be improved. - For example, if you use an advanced matter bin when constructing an autolathe (rather than a regular one), it'll hold more materials. Experiment around with stock parts of various qualities to see how they affect the end results! Be warned, however: - Tier 3 and higher stock parts don't have 100% reliability and their low reliability may affect the reliability of the end machine. - - - "} - -/obj/item/book/manual/excavation - name = "Out on the Dig" - icon_state = "excavation" - author = "Professor Patrick Mason, Curator of the Antiquities Museum on Ichar VII" - title = "Out on the Dig" - dat = {" - - - - - -

              Contents

              -
                -
              1. Prepping the expedition
              2. -
              3. Knowing your tools
              4. -
              5. Finding the dig
              6. -
              7. Analysing deposits
              8. -
              9. Extracting your first find
              10. -
              -
              - -

              Prepping the expedition

              - Every digsite I've been to, someone has forgotten something and I've never yet been to a dig that hasn't had me hiking to get to it - so gather your gear - and get it to the site the first time. You learn quick that time is money, when you've got a shipful of bandits searching for you the next valley over, - but don't be afraid to clear some space if there are any inconvenient boulders in the way.
              -
                -
              • Floodlights (if it's dark)
              • -
              • Wooden trestle tables (for holding tools and finds)
              • -
              • Suspension field generator
              • -
              • Load bearing servitors (such as a mulebot, or hover-tray)
              • -
              • Spare energy packs
              • -

              - Contents - -

              Knowing your tools

              - Every archaeologist has a plethora of tools at their disposal, but here's the important ones:
              -
                -
              • Picks, pickaxes, and brushes - don't underestimate the the smallest or largest in your arsenal, each one clears a different amount - of the rockface so each one has a use.
              • -
              • Measuring tape - don't leave home without it, you can use it to measure the depth a rock face has been excavated to.
              • -
              • GPS locator - knowing where you are is the first step to not be lost.
              • -
              • Core sampler - use this to take core samples from rock faces, which you can then run to the lab for analysis.
              • -
              • Depth scanner - uses X-ray diffraction to locate anomalous densities in rock, indicating archaeological deposits or mineral veins. - Comes with a handy reference log containing coordinates and time of each scan.
              • -
              • Alden-Saraspova counter - uses a patented application of Fourier Transform analysis to determine the difference between background and - exotic radiation. Use it to determine how far you are from anomalous energy sources.
              • -
              • Radio beacon locator - leave a beacon at an item of interest, then track it down later with this handy gadget. Watch for interference from other - devices though.
              • -
              • Flashlight or portable light source - Self explanatory, I hope.
              • -
              • Environmental safety gear - This one's dependent on the environment you're working in, but enclosed footwear and a pack of internals - could save your life.
              • -
              • Anomaly safety gear - A biosealed and catalysis-resistant suit along with eye shielding, tinted hood, and non-reactive disposable gloves are - the best kind of protection you can hope for from the errors our forebears may have unleashed.
              • -
              • Personal defence weapon - Never know what you'll find on the dig: pirates, natives, ancient guardians, carnivorous wildlife... - it pays in blood to be prepared.
              • -

              - Contents - -

              Finding the dig

              - Wouldn't be an archaeologist without their dig, but everyone has to start somewhere. Here's a basic procedure I go through when cataloguing a new planet:
              -
                -
              • Get in touch with the locals (in particular geologists, miners, and farmers) - Never know what's been turned up by accident, then left to - gather dust on a shelf.
              • -
              • Check the obvious areas first - even if you're pressed for time, these ones are the generally easiest to search, and the most likely targets - of your rivals.
              • -
              • Do some prospecting - the earth mother isn't in the habit of displaying her secrets to the world (although sometimes you get lucky). - Drop a shaft and clear away a bit of surface rock here and there, you never know what might be lurking below the surface.
              • -
              • Tips on unearthing a deposit - How do you know when you're golden? Look for telltale white strata that looks strange or out of place, or if - something has broken under your pick while you're digging. Your depth scanner is your best friend, but even it can't distinguish between - ordinary minerals and ancient leavings, if in doubt then err on the side of caution.
              • -

              - Contents - -

              Analysing the contents of a dig

              - You've found some unusual strata, but it's not all peaches from here. No archaeologist ever managed to pull a bone from the earth without doing thorough - chemical analysis on every two meters of rock face nearby.
              -
                -
              • Take core samples - Grab a rock core for every 4m^2.
              • -
              • Clear around any potential finds - Clear away ordinary rock, leaving your prizes reachable in a clearly marked area.
              • -
              • Haul off excess rock - It's easy for a dig to get cluttered, and a neat archaeologist is a successful archaeologist.
              • -
              • Don't be afraid to be cautious - It's slower sometimes, but the extra time will be worth the payoff when you find an Exolitic relic.
              • -
              • Chemical analysis - I won't go into detail here, but the labwork is essential to any successful extraction. Marshal your core samples, and - send them off to the labcoated geniuses.
              • -

              - Contents - -

              Extracting your first find

              -
                -
              • Scan the rock - Use a depth scanner to determine the find's depth and clearance. DON'T FORGET THESE.
              • -
              • Choose stasis field - Chemical analysis on a core sample from the rock face will tell you which field is necessary to extract the find safely.
              • -
              • Setup field gen - Bolt it down, choose the field, check the charge, and activate it. If you forget it, you'll wish you hadn't when that priceless - Uryom vase crumbles as it sees the light of day.
              • -
              • FUNCTIONAL AND SAFE digging - Dig into the rock until you've cleared away a depth equal to (the anomaly depth MINUS the clearance range). The find - should come loose on it's own, but it will be in the midst of a chunk of rock. Use a welder or miniature excavation tool to clear away the excess.
              • -
              • FANCY AND SPEEDY digging - Dig into the rock until you've cleared away a depth equal to the anomaly depth, but without any of your strokes - entering the clearance range.
              • -
              • The big find - Sometimes, you'll chance upon something big, both literally and figuratively. Giant statues and functioning remnants of Precursor - technology are just as exciting, to the right buyers. If your digging leaves a large boulder behind, dig into it normally and see if anything's hidden - inside.
              • -

              - Contents - - - - "} - -/obj/item/book/manual/mass_spectrometry - name = "High Power Mass Spectrometry: A Comprehensive Guide" - icon_state = "analysis" - author = "Winton Rice, Chief Mass Spectrometry Technician at the Institute of Applied Sciences on Arcadia" - title = "High powered mass spectrometry, a comprehensive guide" - dat = {" - - - - - -

              Contents

              -
                -
              1. A note on terms
              2. -
              3. Analysis progression
              4. -
              5. Heat management
              6. -
              7. Ambient radiation
              8. -
              - -
              -

              A note on terms

              -
                -
              • Mass spectrometry - MS is the procedure used used to measure and quantify the components of matter. The most prized tool in the field of - 'Materials analysis.'
              • -
              • Radiometric dating - MS applied using the right carrier reagents can be used to accurately determine the age of a sample.
              • -
              • Dissonance ratio - This is a pseudoarbitrary value indicating the overall presence of a particular element in a greater composite. - It takes into account volume, density, molecular excitation and isotope spread.
              • -
              • Vacuum seal integrity - A reference to how close an airtight seal is to failure.
              • -

              - Contents - -

              Analysis progression

              - Modern mass spectrometry requires constant attention from the diligent researcher in order to be successful. There are many different elements to juggle, - and later chapters will delve into them. For the spectrometry assistant, the first thing you need to know is that the scanner wavelength is automatically - calculated for you. Just tweak the settings and try to match it with the actual wavelength as closely as possible.
              -
              - Contents - -

              Seal integrity

              - In order to maintain sterile and environmentally static procedures, a special chamber is set up inside the spectrometer. It's protected by a proprietary vacuum seal - produced by top tier industrial science. It will only last for a certain number of scans before failing outright, but it can be resealed through use of nanite paste. - Unfortunately, it's susceptible to malforming under heat stress so exposing it to higher temperatures will cause it's operation life to drop significantly.
              -
              - Contents - -

              Heat management

              - The scanner relies on a gyro-rotational system that varies in speed and intensity. Over the course of an ordinary scan, the RPMs can change dramatically. Higher RPMs - means greater heat generation, but is necessary for the ongoing continuation of the scan. To offset heat production, spectrometers have an inbuilt cooling system. - Researchers can modify the flow rate of coolant to aid in dropping temperature as necessary, but are advised that frequent coolant replacements may be necessary - depending on coolant purity. Water and substances such as cryoxadone are viable substitutes, but nowhere near as effective as pure coolant itself.
              -
              - Contents - -

              Ambient radiation

              - Researchers are warned that while operational, mass spectrometers emit period bursts of radiation and are thus advised to wear protective gear. In the event of - radiation spikes, there is also a special shield that can be lowered to block emissions. Lowering this, however, will have the effect of blocking the scanner - so use it sparingly.
              -
              - Contents - - - - "} - -/obj/item/book/manual/anomaly_spectroscopy - name = "Spectroscopy: Analysing the Anomalies of the Cosmos" - icon_state = "anomaly" - author = "Doctor Martin Boyle, Director Research at the Lower Hydrolian Sector Listening Array" - title = "Spectroscopy: Analysing the Anomalies of the Cosmos" - dat = {" - - - - -
              - It's perhaps one of the most exciting times to be alive, with the recent breakthroughs in understanding and categorisation of things we may one day no longer call - 'anomalies,' but rather 'infrequent or rare occurrences of certain celestial weather or phenomena.' Perhaps a little more long winded, but no less eloquent all the - same! Why, look at the strides we're making in piercing the walls of bluespace or our steadily improving ability to clarify and stabilise subspace emissions; it's - certainly an exciting time to be alive. For the moment, the Hydrolian hasn't seen two spatial anomalies alike but the day will come and it is soon, I can feel it. - - "} - -/obj/item/book/manual/materials_chemistry_analysis - name = "Materials Analysis and the Chemical Implications" - icon_state = "chemistry" - author = "Jasper Pascal, Senior Lecturer in Materials Analysis at the University of Jol'Nar" - title = "Materials Analysis and the Chemical Implications" - dat = {" - - - - -
              - In today's high tech research fields, leaps and bounds are being made every day. Whether it's great strides forward in our understanding of the physical universe - or the operation of some fancy new piece of equipment, it seems like all the cool fields are producing new toys to play with, leaving doddery old fields such as - materials analysis and chemistry relegated to the previous few centuries, when we were still learning the makeup and structure of the elements.
              -
              - Well, when you're out there building the next gryo-whatsitron or isotope mobility thingummy, remember how the field of archaeology experienced a massive new rebirth - following the excavations at Paranol IV and consider how all of the scientific greats will come crawling back to basic paradigms of natural philosophy when they discover - a new element that defies classification. I defy you to classify it without reviving this once great field! - "} - -/obj/item/book/manual/anomaly_testing - name = "Anomalous Materials and Energies" - icon_state = "triangulate" - author = "Norman York, formerly of the Tyrolion Institute on Titan" - title = "Anomalous Materials and Energies" - dat = {" - - - - - -

              Contents

              -
                -
              1. Foreword: Modern attitude towards anomalies
              2. -
              3. Triangulating anomalous energy readings
              4. -
              5. Harvesting and utilising anomalous energy signatures
              6. -
              -
              -

              Modern attitude towards anomalies

              - It's only when confronted with things we don't know, that we may push back our knowledge of the world around us. Nowhere is this more obvious than the - vast and inscrutable mysterious of the cosmos that scholars from such august institutions as the Elysian Institute of the Sciences present - formulas and hypotheses for every few decades.
              -
              - Using our vast, telescopic array installations and deep space satellite networks, we are able to detect anomalous energy fields and formations in deep space, - but are limited to those that are large enough to output energy that will stretch across light years worth of distance between stars.
              -
              - While some sectors (such as the Hydrolian Rift and Keppel's Run) are replete with inexplicable energetic activity and unique phenomena found nowhere else in - the galaxy, the majority of space is dry, barren and cold - and if past experience has told us anything, it is that there are always more things we are - unable to explain.
              -
              - Indeed, a great source of knowledge and technology has always been those who come before us, in the form of the multitudinous ancient alien precursors that - have left scattered remnants of their great past all over settled (and unexplored) space.
              -
              - It is from xenoarchaeologists, high energy materials researchers, and technology reconstruction authorities that we are able to theorise on the gifts these - species have left behind, and in some cases even reverse engineer or rebuild the technology in question. My colleague, Doctor Raymond Ward of the - Tyrolian Institute on Titan, has made great breakthroughs in a related field through his pioneering development of universally reflective materials capable - of harvesting and 'bottling' up virtually any energy emissions yet encountered by spacefaring civilisations.
              -
              - And yet, there are some amongst us who do not see the benefits of those who have come before us - indeed, some among them profess the opinion that there - is no species that could possibly match humanity in it's achievements and knowledge, or simply that employing non-human technology is dangerous and unethical. - Folly, say I. If it is their desire to throw onto the wayside the greatest achievements in the history of the galaxy, simply for preferment of the - greatest achievements in the history of mankind, then they have no business in the establishment of science.
              - Contents - -

              Triangulating anomalous energy readings

              - Strong energy emissions, when remaining constant from any one fixed location for millennia, can leave an 'imprint' or distinctive energy signature on other - matter composites that are spatially fixed relative to the source.
              -
              - By taking samples of such 'fixed' matter, we can apply complex analytics such as the modified Fourier Transform Procedure to reverse engineer the path of the - energy, and determine the approximate distance and direction that the energy source is, relative to the sample's point in space. Modern portable devices can do - all this purely by taking readings of local radiation.
              -
              - A canny researcher can thusly analyse radiation at pre-chosen points strategically scattered around an area, and if there are any anomalous energy - emissions in range of those points, combined the researcher can triangulate the source.
              - Contents - -

              Harvesting and utilising anomalous energy signatures

              - As mentioned in the foreword, my colleague from the Tyrolian Institute on Saturn's moon of Titan, in the Sol System, Doctor Raymond Ward has made great strides - in the area of harvesting and application of the energy emitted by anomalous phenomena from around the galaxy (although I profess I have not yet seen him - venture further from his birthplace on Earth than the comfortable distance of the Sol Cis-Oort Satellite Sphere).
              -
              - By employing a patented semi-phased alloy with unique and fascinating bluespace interaction properties, Ward's contraption is able to 'harvest' energy, store - it and redirect it later at will (with appropriate electronic mechanisms, of course). Although he professes to see or desire no commercial or material gain - for the application and use of said energy once it is harvested, there are no doubt myriad ways we can come to benefit from such things beyond mere research, - such as the reconstruction of torn cartilaginous tissue that a peculiar radiation from an amphibious species on Brachis IV was found to emit.
              - Contents - - - - "} - -/obj/item/book/manual/stasis - name = "Cellular Suspension, the New Cryogenics?" - icon_state = "stasis" - author = "Elvin Schmidt" - title = "Cellular Suspension, the New Cryogenics?" - dat = {" - - - - - -

              Contents

              -
                -
              1. Foreword: A replacement for cryosleep?
              2. -
              3. The breakthrough
              4. -
              5. Applying this new principle
              6. -
              -
              -

              Foreword: A replacement for cryosleep?

              - The development of rudimentary cryofreezing in the 20th and 21st centuries was hailed as a crank science by some, but many early visionaries recognised the - potential it had to change the way we approach so many fields, such as medicine, therapeutics, and space travel. It was breakthroughs in the field in the 22nd and - later centuries that turned the procedure from science fiction to science fact, however. Since then, cryogenics has become a hallmark of modern science, and - regarded as one of the great achievements of our era. As with all sciences however, they have their time and are superseded by newer technological miracles when - it is over.
              - Contents - -

              The breakthrough

              - It was in examining the effects of decelerated, bluespace, high energy particles when transphased through bluespace that the effects where primarily noticed. - Due to exigent properties of that dimension, transphasing those particles capable of existing in bluespace with high stability levels has the effect of bringing - some of those effects into realspace. Examining the Hoffman emissions in particular, it was discovered that they exhibited a-entropic behaviour, and in what is - now termed the 'Effete Hoffman Principle,' it was found that metastabilising the Hoffman radiation resulted in the effect being applied across other physical - interactions, in particular forces and reactions.
              - Contents - -

              Applying this new principle

              - When combined with an appropriate energy-effect replicate for cryogenics (slowing down biological activity, thus stabilising the organics), the effect is - effectively identical to cryogenics, and while it consumes vastly more power and requires extremely complex equipment, it's (for all intents and purposes) superior - to cryogenics, all that remains is to 'commercialise' the process by enabling cheaper development and mass production.
              - The Effete Hoffman Principle can be tweak-combined with other effects however, for different purposes. A division of PMC Research initially developed the application - in prisons as a literal 'suspension field' where convicts are held immobile in the air, and the use quickly spread to numerous other areas.
              -
              - By examining the material resonance properties of certain strong waveforms when combined with Hoffman radiation, an effect was produced able to reverse energy - transferral through matter, and to slow the effects of gravity. When combined with energy repulse technology, the triple effects compound themselves into a much - stronger field, although all three components do slightly different things. High energy researchers assure me of the following key points:
              -
                -
              • The energy repulsion factor provides a 'shell' capable of weak suspension.
              • -
              • The Hoffman emissions nullify energy transferral and other kinetic activity, maintaining stability inside the field.
              • -
              • The resonant waveform combines the effects of the above two points, and applies it magnified onto it's synced 'resonance' materials.
              • -
              - As an interesting aside, a carbon waveform was chosen for the field in prison suspension fields, due to it's resonance with organic matter.
              - Contents - - - - "} \ No newline at end of file diff --git a/code/modules/library/manuals/union.dm b/code/modules/library/manuals/union.dm deleted file mode 100644 index 13c3a60f2ad54..0000000000000 --- a/code/modules/library/manuals/union.dm +++ /dev/null @@ -1,94 +0,0 @@ -/obj/item/book/union_charter - name = "\improper Union Charter" - title = "Union Charter of Workplace Rights" - author = "Expeditionary Corps Organisation Corporate Union" - dat = {"Expeditionary Corps Organisation Union Charter of Workplace Rights - -

              0. Summary

              -
              -

              As a union representative, you are required to uphold the interests of contracted workers on your station or vessel. You are empowered to inspect workplaces and instigate cessation of contracted work when on green alert, with diminishing powers during a state of emergency. You do not have authority or jurisdiction over government or military workers, or any workers who are not card-carrying signatories to this Charter.

              -

              1. Introduction

              -

              This Charter of Rights sets out the rights and responsibilities of all workplace parties in the provision of decent and fair health, safety, compensation and rehabilitation systems and practices within Sol-affiliated workplaces. Regardless of jurisdiction, changes to occupational health and safety, compensation and rehabilitation law must not result in a diminution of the rights and entitlements of any worker.

              -

              This Charter does not apply to staff who are not signatory to the Solar Employee General Award, or are signatory to other workplace regulatory documents such as the internal protocols of the Expeditionary Corps or the Sol Defense Fleet. Union representatives must take care to ensure that their operations on mixed jurisdiction stations and vessels are restricted to those areas that have a union worker, contractor or labourer presence.

              -

              Workers must not be adversely affected by any employer moving between jurisdictions in relation to their OHS and workers compensation entitlements. Any proposed move between jurisdictions will only occur following genuine consultation and agreement with workers and their representatives and a process of public review, including public tribunal hearings.

              -

              Consistent with OHS and Worker Compensation Policy and interstellar standards, Solar law must ensure healthy and safe workplaces and a compensation and rehabilitation system which ensures that no worker is disadvantaged should they be injured at work.

              -

              All workers have the right to join a genuine trade union. Union organised workplaces are safer workplaces.

              -

              2. Security Levels

              -
              -

              On stations or vessels employing the standard SCG Alert Level protocol, the following conditions apply:

              -
                -
              • On green alert, all particulars of this charter are considered valid and applicable.
              • -
              • Above green alert, union representatives are not permitted to conduct workplace inspections and are advised, but not required, to cease all union meetings or strike proceedings.
              • -
              • On red alert or above, this charter is suspended, and all union representatives and workers must follow directives from personnel authorized under red alert protocol.
              • -
              -

              3. Representation

              -
              -

              Every worker has the right to be represented on health, safety, compensation, rehabilitation and return to work issues, by their elected Union Representative and their union. Every worker has the right to elect health and safety representatives.

              -

              Unions have the right to:

              -
                -
              • Enter workplaces on health and safety issues;
              • -
              • Investigate breaches of health and safety laws;
              • -
              • Represent members and prospective members;
              • -
              • Initiate investigations and prosecutions for occupational health and safety breaches;
              • -
              • Initiate cessation of work in unsafe areas; and
              • -
              • Access all relevant information and reports.
              • -
              -

              Union Representatives have the right to:

              -
                -
              • Be democratically elected by a process determined by workers, in conjunction with their union;
              • -
              • Utilise legal rights and powers to represent workers on health and safety matters;
              • -
              • Inspect the workplace, within the agreed-upon confines previously noted;
              • -
              • Access relevant information and be informed of all incidents;
              • -
              • Be consulted by the employer before workplace changes occur that may affect health and safety;
              • -
              • Issue notices when breaches are detected;
              • -
              • Call in government inspectors;
              • -
              • Direct workers to cease work where there is a belief of immediate risk to health and safety;
              • -
              • Seek resolution of health and safety issues;
              • -
              • Perform all OHS activities on paid time and have adequate facilities;
              • -
              • Be assisted by any person at any time in the execution of union duties;
              • -
              • Be protected by law from discrimination, harassment, bullying, intimidation and prosecution;
              • -
              • Appeal any decision of a regulator or court regarding any health and safety, compensation or rehabilitation matter.
              • -
              -

              4. Workers

              -
              -

              Every worker has the right to: -

                -
              • A safe and healthy workplace;
              • -
              • Travel to and from work sites in safety and with appropriate protections;
              • -
              • Return home from work free of injury or illness;
              • -
              • Enjoy the highest level of protection, representation, compensation and rehabilitation, regardless of the jurisdiction within which they work;
              • -
              • Take collective action over any health and safety matter, including the right to cease unsafe or unhealthy work; and
              • -
              • Discuss, negotiate and be consulted and involved in all issues affecting their health, safety and welfare.
              • -
              -

              All workers (or prospective workers), including health and safety representatives, will be protected by law from discrimination, harassment, bullying or detriment to their employment because they have raised a health and safety issue, lodged a compensation claim or been involved in consultation on workplace health and safety matters.

              -

              4. Employer Responsibilities

              -
              -

              Persons who control, manage or own workplaces have an absolute duty of care without limitation to provide and maintain safe and healthy work environments. Employers will not shift jurisdictions to attempt to avoid their OHS and workers compensation responsibilities and obligations. Employers are subject to all the obligations and responsibilities contained within this Charter.

              -

              5. Compensation

              -
              -

              Following a physical or psychological injury, all workers have the right to a fair, just and equitable compensation system, which promotes the best medical and like support, the most effective rehabilitation for injured workers and facilitates a safe return to work that offers genuine job security. Workers' compensation standards are to:

              -
            • Be available to all members of the workforce;
            • -
            • Provide compensation for all injuries that arise from travel to, from or during work including and during recess breaks;
            • -
            • Be available upon the death of a worker and for dependants of that worker;
            • -
            • Be based on the 100% replacement of loss of income;
            • -
            • Provide total cost of medical rehabilitation and other related expenses;
            • -
            • Provide lump sum compensation for permanent disability;
            • -
            • Ensure common law rights;
            • -
            • Support rehabilitation and return to work;
            • -
            • Ensure that workers are entitled to timely and effective claim determination and dispute resolution processes;
            • -
            • Ensure the worker has access to the doctor of their choice; and
            • -
            • Not be eroded by companies seeking to self-insure in order to obtain lower OHS and worker's compensation entitlements for workers.
            • - -

              6. Rehabilitation

              -
              -

              All workers have the right to return to safe, suitable, meaningful and sustainable work, following the provision of quality rehabilitation services, commensurate to need. Rehabilitation will include the right to:

              -
                -
              • Union representation;
              • -
              • Fair, equitable, high quality, appropriate, effective and timely rehabilitation plans and services;
              • -
              • Consultation about all aspects of rehabilitation;
              • -
              • All documentation and information relating to their rehabilitation;
              • -
              • Privacy in the management of all records and information; and
              • -
              • Personal choice of medical provider and rehabilitation service, where facilities permit.
              • -
              - - "} diff --git a/code/modules/lighting/__lighting_docs.dm b/code/modules/lighting/__lighting_docs.dm deleted file mode 100644 index 3816595f3c2d0..0000000000000 --- a/code/modules/lighting/__lighting_docs.dm +++ /dev/null @@ -1,67 +0,0 @@ -/* -BS12 object based lighting system -*/ - -/* -Changes from tg DAL: - - Lighting is done using objects instead of subareas. - - Animated transitions. (newer tg DAL has this) - - Full colours with mixing. - - Support for lights on shuttles. - - - Code: - - Instead of one flat luminosity var, light is represented by 3 atom vars: - - light_range; diameter in tiles of the light, used for calculating falloff, Cannot be 1. - - light_power; multiplier for the brightness of lights, - - light_color; hex string representing the RGB colour of the light. - - setLuminousity() is now set_light() and takes the three variables above. - - Variables can be left as null to not update them. - - set_opacity() is now set_opacity(). - - Areas have luminosity set to 1 permanently, no hard-lighting. - - Objects inside other objects can have lights and they properly affect the turf. (flashlights) - - area/master and area/list/related have been eviscerated since subareas aren't needed. -*/ - -/* -Relevant vars/procs: - -atom: (lighting_atom.dm) - - var/light_range; range in tiles of the light, used for calculating falloff - - var/light_power; multiplier for the brightness of lights - - var/light_color; hex string representing the RGB colour of the light - - - var/datum/light_source/light; light source datum for this atom, only present if light_range && light_power - - var/list/light_sources; light sources in contents that are shining through this object, including this object - - - proc/set_light(l_max_bright, l_inner_range, l_outer_range, l_falloff_curve, l_color): - - Sets light_range/power/color to non-null args and calls update_light() - - proc/set_opacity(new_opacity): - - Sets opacity to new_opacity. - - If opacity has changed, call turf.reconsider_lights() to fix light occlusion - - proc/update_light(): - - Updates the light var on this atom, deleting or creating as needed and calling .update() - - -turf: (lighting_turf.dm) - - var/list/affecting_lights; list of light sources that are shining onto this turf - - - proc/reconsider_lights(): - - Force all light sources shining onto this turf to update - - - proc/lighting_clear_overlays(): - - Delete (manual GC) all light overlays on this turf, used when changing turf to space - - proc/lighting_build_overlays(): - - Create lighting overlays for this turf - - -/atom/movable/lighting_overlay: (lighting_overlay.dm) - - var/lum_r, var/lum_g, var/lum_b; lumcounts of each colour - - var/needs_update; set on update_lumcount, checked by lighting process - - - var/xoffset, var/yoffset; (only present when using sub-tile overlays) fractional offset of this overlay in the tile - - - proc/update_lumcount(delta_r, delta_g, delta_b): - - Change the lumcount vars and queue the overlay for update - - proc/update_overlay() - - Called by the lighting process to update the color of the overlay -*/ \ No newline at end of file diff --git a/code/modules/lighting/lighting_area.dm b/code/modules/lighting/lighting_area.dm deleted file mode 100644 index 003d7bba6fef2..0000000000000 --- a/code/modules/lighting/lighting_area.dm +++ /dev/null @@ -1,10 +0,0 @@ -/area/luminosity = TRUE -/// Boolean. Whether or not the area should process dynamic lighting. Affects the value of `luminosity` during init and the lighting effects on turfs in the area. -/area/var/dynamic_lighting = TRUE -/// String (One of `AREA_LIGHTING_*`). The light tone selection mode used for the area. See `code\__defines\lighting.dm` for possible values. -/area/var/lighting_tone = AREA_LIGHTING_DEFAULT - -/area/New() - ..() - if(dynamic_lighting) - luminosity = FALSE diff --git a/code/modules/lighting/lighting_atom.dm b/code/modules/lighting/lighting_atom.dm deleted file mode 100644 index d37292b0e6609..0000000000000 --- a/code/modules/lighting/lighting_atom.dm +++ /dev/null @@ -1,76 +0,0 @@ -/atom - var/light_max_bright = 1 // intensity of the light within the full brightness range. Value between 0 and 1 - var/light_inner_range = 1 // range, in tiles, the light is at full brightness - var/light_outer_range = 0 // range, in tiles, where the light becomes darkness - var/light_falloff_curve = 2 // adjusts curve for falloff gradient. Must be greater than 0. - var/light_color // Hexadecimal RGB string representing the colour of the light - - var/datum/light_source/light - var/list/light_sources - -// Nonsensical value for l_color default, so we can detect if it gets set to null. -#define NONSENSICAL_VALUE -99999 -#define DEFAULT_FALLOFF_CURVE (2) -/atom/proc/set_light(l_max_bright, l_inner_range, l_outer_range, l_falloff_curve = NONSENSICAL_VALUE, l_color = NONSENSICAL_VALUE) - . = 0 //make it less costly if nothing's changed - - if(l_max_bright != null && l_max_bright != light_max_bright) - light_max_bright = l_max_bright - . = 1 - if(l_outer_range != null && l_outer_range != light_outer_range) - light_outer_range = l_outer_range - . = 1 - if(l_inner_range != null && l_inner_range != light_inner_range) - if(light_inner_range >= light_outer_range) - light_inner_range = light_outer_range / 4 - else - light_inner_range = l_inner_range - . = 1 - if(l_falloff_curve != NONSENSICAL_VALUE) - if(!l_falloff_curve || l_falloff_curve <= 0) - light_falloff_curve = DEFAULT_FALLOFF_CURVE - if(l_falloff_curve != light_falloff_curve) - light_falloff_curve = l_falloff_curve - . = 1 - if(l_color != NONSENSICAL_VALUE && l_color != light_color) - light_color = l_color - . = 1 - - if(.) update_light() - -#undef NONSENSICAL_VALUE -#undef DEFAULT_FALLOFF_CURVE - -/atom/proc/update_light() - set waitfor = FALSE - - if(!light_max_bright || !light_outer_range || light_max_bright > 1) - if(light) - light.destroy() - light = null - if(light_max_bright > 1) - light_max_bright = 1 - CRASH("Attempted to call update_light() on atom [src] \ref[src] with a light_max_bright value greater than one") - else - if(!istype(loc, /atom/movable)) - . = src - else - . = loc - - if(light) - light.update(.) - else - light = new /datum/light_source(src, .) - -/atom/Destroy() - if(light) - light.destroy() - light = null - return ..() - -/atom/set_opacity() - . = ..() - if(.) - var/turf/T = loc - if(istype(T)) - T.RecalculateOpacity() diff --git a/code/modules/lighting/lighting_corner.dm b/code/modules/lighting/lighting_corner.dm deleted file mode 100644 index 993783ad5b109..0000000000000 --- a/code/modules/lighting/lighting_corner.dm +++ /dev/null @@ -1,134 +0,0 @@ -var/global/total_lighting_corners = 0 -var/global/datum/lighting_corner/dummy/dummy_lighting_corner = new -// Because we can control each corner of every lighting overlay. -// 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/global/list/LIGHTING_CORNER_DIAGONAL = list(NORTHEAST, SOUTHEAST, SOUTHWEST, NORTHWEST) - -/datum/lighting_corner - var/list/turf/masters = list() - var/list/datum/light_source/affecting = list() // Light sources affecting us. - var/active = FALSE // TRUE if one of our masters has dynamic lighting. - - var/x = 0 - var/y = 0 - var/z = 0 - - var/lum_r = 0 - var/lum_g = 0 - var/lum_b = 0 - - var/needs_update = FALSE - - var/cache_r = LIGHTING_SOFT_THRESHOLD - var/cache_g = LIGHTING_SOFT_THRESHOLD - var/cache_b = LIGHTING_SOFT_THRESHOLD - var/cache_mx = 0 - - var/update_gen = 0 - -/datum/lighting_corner/New(var/turf/new_turf, var/diagonal) - . = ..() - - total_lighting_corners++ - - masters[new_turf] = turn(diagonal, 180) - z = new_turf.z - - var/vertical = diagonal & ~(diagonal - 1) // The horizontal directions (4 and 8) are bigger than the vertical ones (1 and 2), so we can reliably say the lsb is the horizontal direction. - var/horizontal = diagonal & ~vertical // Now that we know the horizontal one we can get the vertical one. - - x = new_turf.x + (horizontal == EAST ? 0.5 : -0.5) - y = new_turf.y + (vertical == NORTH ? 0.5 : -0.5) - - // My initial plan was to make this loop through a list of all the dirs (horizontal, vertical, diagonal). - // Issue being that the only way I could think of doing it was very messy, slow and honestly overengineered. - // So we'll have this hardcode instead. - var/turf/T - var/i - - // Diagonal one is easy. - T = get_step(new_turf, diagonal) - if (T) // In case we're on the map's border. - if (!T.corners) - T.corners = list(null, null, null, null) - - masters[T] = diagonal - i = LIGHTING_CORNER_DIAGONAL.Find(turn(diagonal, 180)) - T.corners[i] = src - - // Now the horizontal one. - T = get_step(new_turf, horizontal) - if (T) // Ditto. - if (!T.corners) - 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)) - T.corners[i] = src - - // And finally the vertical one. - T = get_step(new_turf, vertical) - if (T) - if (!T.corners) - 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)) - T.corners[i] = src - - update_active() - -/datum/lighting_corner/proc/update_active() - active = FALSE - for (var/turf/T in masters) - if (T.lighting_overlay) - active = TRUE - -// God that was a mess, now to do the rest of the corner code! Hooray! -/datum/lighting_corner/proc/update_lumcount(var/delta_r, var/delta_g, var/delta_b) - lum_r += delta_r - lum_g += delta_g - lum_b += delta_b - - if (!needs_update) - needs_update = TRUE - SSlighting.corner_queue += src - -/datum/lighting_corner/proc/update_overlays() - // Cache these values a head of time so 4 individual lighting overlays don't all calculate them individually. - var/lum_r = src.lum_r > 0 ? LIGHTING_MULT_FACTOR * sqrt(src.lum_r) : src.lum_r - var/lum_g = src.lum_g > 0 ? LIGHTING_MULT_FACTOR * sqrt(src.lum_g) : src.lum_g - var/lum_b = src.lum_b > 0 ? LIGHTING_MULT_FACTOR * sqrt(src.lum_b) : src.lum_b - - var/mx = max(lum_r, lum_g, lum_b) // Scale it so 1 is the strongest lum, if it is above 1. - . = 1 // factor - if (mx > 1) - . = 1 / mx - - #if LIGHTING_SOFT_THRESHOLD != 0 - else if (mx < LIGHTING_SOFT_THRESHOLD) - . = 0 // 0 means soft lighting. - - 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 = 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 = round(mx, LIGHTING_ROUND_VALUE) - - for (var/TT in masters) - var/turf/T = TT - if (T.lighting_overlay) - if (!T.lighting_overlay.needs_update) - T.lighting_overlay.needs_update = TRUE - SSlighting.overlay_queue += T.lighting_overlay - - -/datum/lighting_corner/dummy/New() - return diff --git a/code/modules/lighting/lighting_overlay.dm b/code/modules/lighting/lighting_overlay.dm deleted file mode 100644 index ef2bd73e9dae3..0000000000000 --- a/code/modules/lighting/lighting_overlay.dm +++ /dev/null @@ -1,150 +0,0 @@ -var/global/total_lighting_overlays = 0 -/atom/movable/lighting_overlay - name = "" - mouse_opacity = 0 - simulated = FALSE - anchored = TRUE - icon = LIGHTING_ICON - plane = LIGHTING_PLANE - layer = LIGHTING_LAYER - invisibility = INVISIBILITY_LIGHTING - color = LIGHTING_BASE_MATRIX - icon_state = "light1" - blend_mode = BLEND_OVERLAY - vis_flags = VIS_HIDE - - appearance_flags = DEFAULT_APPEARANCE_FLAGS - - var/lum_r = 0 - var/lum_g = 0 - var/lum_b = 0 - - var/needs_update = FALSE - -/atom/movable/lighting_overlay/Initialize() - // doesn't need special init - SHOULD_CALL_PARENT(FALSE) - atom_flags |= ATOM_FLAG_INITIALIZED - return INITIALIZE_HINT_NORMAL - -/atom/movable/lighting_overlay/New(var/atom/loc, var/no_update = FALSE) - var/turf/T = loc //If this runtimes atleast we'll know what's creating overlays outside of turfs. - if(T.dynamic_lighting) - . = ..() - verbs.Cut() - total_lighting_overlays++ - - T.lighting_overlay = src - T.luminosity = 0 - if(no_update) - return - update_overlay() - else - qdel(src) - -/atom/movable/lighting_overlay/proc/update_overlay() - set waitfor = FALSE - var/turf/T = loc - - if(!istype(T)) - if(loc) - log_debug("A lighting overlay realised its loc was NOT a turf (actual loc: [loc][loc ? ", " + loc.type : "null"]) in update_overlay() and got qdel'ed!") - else - log_debug("A lighting overlay realised it was in nullspace in update_overlay() and got pooled!") - qdel(src) - return - if(!T.dynamic_lighting) - qdel(src) - return - - // To the future coder who sees this and thinks - // "Why didn't he just use a loop?" - // Well my man, it's because the loop performed like shit. - // And there's no way to improve it because - // without a loop you can make the list all at once which is the fastest you're gonna get. - // Oh it's also shorter line wise. - // Including with these comments. - - // See LIGHTING_CORNER_DIAGONAL in lighting_corner.dm for why these values are what they are. - // No I seriously cannot think of a more efficient method, fuck off Comic. - 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 - var/datum/lighting_corner/ca = T.corners[1] || dummy_lighting_corner - - var/max = max(cr.cache_mx, cg.cache_mx, cb.cache_mx, ca.cache_mx) - - 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 - var/set_luminosity = max > LIGHTING_SOFT_THRESHOLD - #else - // Because of floating points, it won't even be a flat 0. - // This number is mostly arbitrary. - 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 = LIGHTING_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, - 01, 01, 01, 01 - ) - - luminosity = set_luminosity - // if (T.above && T.above.shadower) - // T.above.shadower.copy_lighting(src) - -// Variety of overrides so the overlays don't get affected by weird things. -/atom/movable/lighting_overlay/ex_act() - return - -/atom/movable/lighting_overlay/singularity_pull() - return - -/atom/movable/lighting_overlay/Destroy() - total_lighting_overlays-- - SSlighting.overlay_queue -= src - - var/turf/T = loc - if(istype(T)) - T.lighting_overlay = null - - . = ..() - -/atom/movable/lighting_overlay/forceMove() - //should never move - //In theory... except when getting deleted :C - if(QDELING(src)) - return ..() - return 0 - -/atom/movable/lighting_overlay/Move() - return 0 - -/atom/movable/lighting_overlay/throw_at() - return 0 diff --git a/code/modules/lighting/lighting_planemaster.dm b/code/modules/lighting/lighting_planemaster.dm deleted file mode 100644 index 9c81286e0dae5..0000000000000 --- a/code/modules/lighting/lighting_planemaster.dm +++ /dev/null @@ -1,25 +0,0 @@ -/obj/lighting_general - plane = LIGHTING_PLANE - screen_loc = "8,8" - - icon = LIGHTING_ICON - icon_state = LIGHTING_ICON_STATE_DARK - - color = "#ffffff" - - blend_mode = BLEND_MULTIPLY - -/obj/lighting_general/Initialize() - . = ..() - SetTransform(scale = world.view * 2.2) - -/obj/lighting_general/proc/sync(var/new_colour) - color = new_colour - -/mob - var/obj/lighting_general/l_general - - -/mob/proc/change_light_colour(var/new_colour) - if(l_general) - l_general.sync(new_colour) diff --git a/code/modules/lighting/lighting_setup.dm b/code/modules/lighting/lighting_setup.dm deleted file mode 100644 index 68311a32b2f6b..0000000000000 --- a/code/modules/lighting/lighting_setup.dm +++ /dev/null @@ -1,10 +0,0 @@ -/proc/create_all_lighting_overlays() - for(var/zlevel = 1 to world.maxz) - create_lighting_overlays_zlevel(zlevel) - -/proc/create_lighting_overlays_zlevel(var/zlevel) - ASSERT(zlevel) - - for(var/turf/T in block(locate(1, 1, zlevel), locate(world.maxx, world.maxy, zlevel))) - if(T.dynamic_lighting) - T.lighting_build_overlay() diff --git a/code/modules/lighting/lighting_source.dm b/code/modules/lighting/lighting_source.dm deleted file mode 100644 index 664c00a0244fd..0000000000000 --- a/code/modules/lighting/lighting_source.dm +++ /dev/null @@ -1,332 +0,0 @@ -var/global/total_lighting_sources = 0 -// This is where the fun begins. -// These are the main datums that emit light. - -/datum/light_source - var/atom/top_atom // The atom we're emitting light from(for example a mob if we're from a flashlight that's being held). - var/atom/source_atom // The atom that we belong to. - - var/turf/source_turf // The turf under the above. - var/light_max_bright = 1 // intensity of the light within the full brightness range. Value between 0 and 1 - var/light_inner_range = 0 // range, in tiles, the light is at full brightness - var/light_outer_range = 0 // range, in tiles, where the light becomes darkness - var/light_falloff_curve // adjusts curve for falloff gradient - var/light_color // The colour of the light, string, decomposed by parse_light_color() - - // Variables for keeping track of the colour. - var/lum_r - var/lum_g - var/lum_b - - // The lumcount values used to apply the light. - var/tmp/applied_lum_r - var/tmp/applied_lum_g - var/tmp/applied_lum_b - - var/list/datum/lighting_corner/effect_str // List used to store how much we're affecting corners. - var/list/turf/affecting_turfs - - var/applied = FALSE // Whether we have applied our light yet or not. - - var/vis_update // Whether we should smartly recalculate visibility. and then only update tiles that became(in)visible to us. - var/needs_update // Whether we are queued for an update. - var/destroyed // Whether we are destroyed and need to stop emitting light. - var/force_update - -/datum/light_source/New(var/atom/owner, var/atom/top) - total_lighting_sources++ - source_atom = owner // Set our new owner. - if(!source_atom.light_sources) - source_atom.light_sources = list() - - source_atom.light_sources += src // Add us to the lights of our owner. - top_atom = top - if(top_atom != source_atom) - if(!top.light_sources) - top.light_sources = list() - - top_atom.light_sources += src - - source_turf = top_atom - light_max_bright = source_atom.light_max_bright - light_inner_range = source_atom.light_inner_range - light_outer_range = source_atom.light_outer_range - light_falloff_curve = source_atom.light_falloff_curve - light_color = source_atom.light_color - - parse_light_color() - - effect_str = list() - affecting_turfs = list() - - update() - - - return ..() - -/* lighting debugging verb -/mob/verb/self_light() - set name = "set self light" - set category = "Light" - var/v1 = input(usr, "Enter max bright", "max bright", 1) as num|null - var/v2 = input(usr, "Enter inner range", "inner range", 0.1) as num|null - var/v3 = input(usr, "Enter outer range", "outer range", 4) as num|null - var/v4 = input(usr, "Enter curve", "curve", 2) as num|null - set_light(v1, v2, v3, v4, "#0066ff") -*/ - -// Kill ourselves. -/datum/light_source/proc/destroy() - total_lighting_sources-- - destroyed = TRUE - force_update() - if(source_atom && source_atom.light_sources) - source_atom.light_sources -= src - - if(top_atom && top_atom.light_sources) - top_atom.light_sources -= src - -// Call it dirty, I don't care. -// This is here so there's no performance loss on non-instant updates from the fact that the engine can also do instant updates. -// If you're wondering what's with the "BYOND" argument: BYOND won't let me have a() macro that has no arguments :|. -#define effect_update(BYOND) \ - if(!needs_update) \ - { \ - SSlighting.light_queue += src; \ - needs_update = TRUE; \ - } - -// This proc will cause the light source to update the top atom, and add itself to the update queue. -/datum/light_source/proc/update(var/atom/new_top_atom) - // This top atom is different. - if(new_top_atom && new_top_atom != top_atom) - if(top_atom != source_atom) // Remove ourselves from the light sources of that top atom. - top_atom.light_sources -= src - - top_atom = new_top_atom - - if(top_atom != source_atom) - if(!top_atom.light_sources) - top_atom.light_sources = list() - - top_atom.light_sources += src // Add ourselves to the light sources of our new top atom. - - effect_update(null) - -// Will force an update without checking if it's actually needed. -/datum/light_source/proc/force_update() - force_update = 1 - - effect_update(null) - -// Will cause the light source to recalculate turfs that were removed or added to visibility only. -/datum/light_source/proc/vis_update() - vis_update = 1 - - effect_update(null) - -// Will check if we actually need to update, and update any variables that may need to be updated. -/datum/light_source/proc/check() - if(!source_atom || !light_outer_range || !light_max_bright) - destroy() - return 1 - - if(!top_atom) - top_atom = source_atom - . = 1 - - if(isturf(top_atom)) - if(source_turf != top_atom) - source_turf = top_atom - . = 1 - else if(top_atom.loc != source_turf) - source_turf = top_atom.loc - . = 1 - - if(source_atom.light_max_bright != light_max_bright) - light_max_bright = source_atom.light_max_bright - . = 1 - - if(source_atom.light_inner_range != light_inner_range) - light_inner_range = source_atom.light_inner_range - . = 1 - - if(source_atom.light_outer_range != light_outer_range) - light_outer_range = source_atom.light_outer_range - . = 1 - - if(source_atom.light_falloff_curve != light_falloff_curve) - light_falloff_curve = source_atom.light_falloff_curve - . = 1 - - if(light_max_bright && light_outer_range && !applied) - . = 1 - - if(source_atom.light_color != light_color) - light_color = source_atom.light_color - parse_light_color() - . = 1 - -// Decompile the hexadecimal colour into lumcounts of each perspective. -/datum/light_source/proc/parse_light_color() - if(light_color) - lum_r = GetRedPart (light_color) / 255 - lum_g = GetGreenPart(light_color) / 255 - lum_b = GetBluePart (light_color) / 255 - else - lum_r = 1 - lum_g = 1 - lum_b = 1 - -// Macro that applies light to a new corner. -// It is a macro in the interest of speed, yet not having to copy paste it. -// If you're wondering what's with the backslashes, the backslashes cause BYOND to not automatically end the line. -// As such this all gets counted as a single line. -// The braces and semicolons are there to be able to do this on a single line. - -#define APPLY_CORNER(C) \ - . = LUM_FALLOFF(C, source_turf); \ - . *= (light_max_bright ** 2); \ - . *= light_max_bright < 0 ? -1:1;\ - effect_str[C] = .; \ - C.update_lumcount \ - ( \ - . * applied_lum_r, \ - . * applied_lum_g, \ - . * applied_lum_b \ - ); - -// I don't need to explain what this does, do I? -#define REMOVE_CORNER(C) \ - . = -effect_str[C]; \ - C.update_lumcount \ - ( \ - . * applied_lum_r, \ - . * applied_lum_g, \ - . * applied_lum_b \ - ); - -// This is the define used to calculate falloff. -// Assuming a brightness of 1 at range 1, formula should be (brightness = 1 / distance^2) -// However, due to the weird range factor, brightness = (-(distance - full_dark_start) / (full_dark_start - full_light_end)) ^ light_max_bright - -#define LUM_FALLOFF(C, T)(CLAMP01(-((((C.x - T.x) ** 2 +(C.y - T.y) ** 2) ** 0.5 - light_outer_range) / max(light_outer_range - light_inner_range, 1))) ** light_falloff_curve) - - -/datum/light_source/proc/apply_lum() - var/static/update_gen = 1 - applied = 1 - - // Keep track of the last applied lum values so that the lighting can be reversed - applied_lum_r = lum_r - applied_lum_g = lum_g - applied_lum_b = lum_b - - FOR_DVIEW(var/turf/T, light_outer_range, source_turf, INVISIBILITY_LIGHTING) - check_t: - if (!T) - continue - if(!T.lighting_corners_initialised) - T.generate_missing_corners() - - for(var/datum/lighting_corner/C in T.get_corners()) - if(C.update_gen == update_gen) - continue - - C.update_gen = update_gen - C.affecting += src - - if(!C.active) - effect_str[C] = 0 - continue - - APPLY_CORNER(C) - - LAZYADD(T.affecting_lights, src) - affecting_turfs += T - - if (T.z_flags & ZM_ALLOW_LIGHTING) - T = T.below - goto check_t - - END_FOR_DVIEW - - update_gen++ - -/datum/light_source/proc/remove_lum() - applied = FALSE - - for(var/turf/T in affecting_turfs) - LAZYREMOVE(T.affecting_lights, src) - - affecting_turfs.Cut() - - for(var/datum/lighting_corner/C in effect_str) - REMOVE_CORNER(C) - - C.affecting -= src - - effect_str.Cut() - -/datum/light_source/proc/recalc_corner(var/datum/lighting_corner/C) - if(effect_str.Find(C)) // Already have one. - REMOVE_CORNER(C) - - APPLY_CORNER(C) - -/datum/light_source/proc/smart_vis_update() - var/list/datum/lighting_corner/corners = list() - var/list/turf/turfs = list() - FOR_DVIEW(var/turf/T, light_outer_range, source_turf, 0) - if (!T) - continue - if(!T.lighting_corners_initialised) - T.generate_missing_corners() - corners |= T.get_corners() - turfs += T - - var/turf/simulated/open/O = T - if(istype(O) && O.below) - // Consider the turf below us as well. (Z-lights) - for(T = O.below; !isnull(T); T = update_the_turf(T,corners, turfs)); - END_FOR_DVIEW - - var/list/L = turfs - affecting_turfs // New turfs, add us to the affecting lights of them. - affecting_turfs += L - for(var/turf/T in L) - LAZYADD(T.affecting_lights, src) - - L = affecting_turfs - turfs // Now-gone turfs, remove us from the affecting lights. - affecting_turfs -= L - for(var/turf/T in L) - LAZYREMOVE(T.affecting_lights, src) - - for(var/datum/lighting_corner/C in corners - effect_str) // New corners - C.affecting += src - if(!C.active) - effect_str[C] = 0 - continue - - APPLY_CORNER(C) - - for(var/datum/lighting_corner/C in effect_str - corners) // Old, now gone, corners. - REMOVE_CORNER(C) - C.affecting -= src - effect_str -= C - - -/datum/light_source/proc/update_the_turf(var/turf/T, var/list/datum/lighting_corner/corners, var/list/turf/turfs) - if(!T.lighting_corners_initialised) - T.generate_missing_corners() - corners |= T.get_corners() - turfs += T - - var/turf/simulated/open/O = T - if(istype(O) && O.below) - return O.below - return null - -#undef effect_update -#undef LUM_FALLOFF -#undef REMOVE_CORNER -#undef APPLY_CORNER diff --git a/code/modules/lighting/lighting_turf.dm b/code/modules/lighting/lighting_turf.dm deleted file mode 100644 index 1dbf739c02c0f..0000000000000 --- a/code/modules/lighting/lighting_turf.dm +++ /dev/null @@ -1,113 +0,0 @@ -/// Does the turf use dynamic lighting? -/turf/var/dynamic_lighting = TRUE -/turf/luminosity = 1 - -/turf/var/tmp/lighting_corners_initialised = FALSE - -/// List of light sources affecting this turf. -/turf/var/tmp/list/datum/light_source/affecting_lights -/// Our lighting overlay. -/turf/var/tmp/atom/movable/lighting_overlay/lighting_overlay -/turf/var/tmp/list/datum/lighting_corner/corners -/turf/var/opaque_counter - -/turf/set_opacity(new_opacity) - . = ..() - if(opacity == new_opacity) - return FALSE - - opacity = new_opacity - return RecalculateOpacity() - -/turf/proc/RecalculateOpacity() - var/old_opaque_counter = opaque_counter - - opaque_counter = opacity - for(var/a in src) - var/atom/A = a - opaque_counter += A.opacity - - // If the counter changed and was or became 0 then lift event/reconsider lights - if(opaque_counter != old_opaque_counter && (!opaque_counter || !old_opaque_counter)) - GLOB.opacity_set_event.raise_event(src, !opaque_counter, !!opaque_counter) - reconsider_lights() - return TRUE - return FALSE - -// Causes any affecting light sources to be queued for a visibility update, for example a door got opened. -/turf/proc/reconsider_lights() - for(var/datum/light_source/L in affecting_lights) - L.vis_update() - -/turf/proc/lighting_clear_overlay() - if(lighting_overlay) - qdel(lighting_overlay) - - for(var/datum/lighting_corner/C in corners) - C.update_active() - -// Builds a lighting overlay for us, but only if our area is dynamic. -/turf/proc/lighting_build_overlay() - if(lighting_overlay) - return - - var/area/A = loc - if(A.dynamic_lighting && dynamic_lighting) - if(!lighting_corners_initialised) - generate_missing_corners() - - new /atom/movable/lighting_overlay(src) - - for(var/datum/lighting_corner/C in corners) - if(!C.active) // We would activate the corner, calculate the lighting for it. - for(var/L in C.affecting) - var/datum/light_source/S = L - S.recalc_corner(C) - - C.active = TRUE - -// Used to get a scaled lumcount. -/turf/proc/get_lumcount(var/minlum = 0, var/maxlum = 1) - if(!lighting_overlay) - var/area/A = loc - if(A.dynamic_lighting && dynamic_lighting) - var/atom/movable/lighting_overlay/O = new /atom/movable/lighting_overlay(src) - lighting_overlay = O - - var/totallums = 0 - for(var/datum/lighting_corner/L in corners) - totallums += max(L.lum_r, L.lum_g, L.lum_b) - - totallums /= 4 // 4 corners, max channel selected, return the average - - totallums =(totallums - minlum) /(maxlum - minlum) - - return CLAMP01(totallums) - -// If an opaque movable atom moves around we need to potentially update visibility. -/turf/Entered(var/atom/movable/AM, var/atom/OldLoc) - . = ..() - if(AM?.opacity) - RecalculateOpacity() - -/turf/Exited(var/atom/movable/AM, var/atom/newloc) - . = ..() - if(AM?.opacity) - RecalculateOpacity() - -/turf/proc/get_corners() - if(opaque_counter) - return null // Since this proc gets used in a for loop, null won't be looped though. - - return corners - -/turf/proc/generate_missing_corners() - lighting_corners_initialised = TRUE - if(!corners) - corners = list(null, null, null, null) - - for(var/i = 1 to 4) - if(corners[i]) // Already have a corner on this direction. - continue - - corners[i] = new /datum/lighting_corner(src, LIGHTING_CORNER_DIAGONAL[i]) diff --git a/code/modules/lighting/~lighting_undefs.dm b/code/modules/lighting/~lighting_undefs.dm deleted file mode 100644 index 7b0fc758090b8..0000000000000 --- a/code/modules/lighting/~lighting_undefs.dm +++ /dev/null @@ -1,3 +0,0 @@ -#undef LIGHTING_ICON - -#undef LIGHTING_BASE_MATRIX diff --git a/code/modules/locks/key.dm b/code/modules/locks/key.dm deleted file mode 100644 index 4b31c4567f5f9..0000000000000 --- a/code/modules/locks/key.dm +++ /dev/null @@ -1,29 +0,0 @@ -/obj/item/key - name = "key" - desc = "Used to unlock things." - icon = 'icons/obj/items.dmi' - icon_state = "keys" - w_class = 1 - var/key_data = "" - -/obj/item/key/New(var/newloc,var/data) - if(data) - key_data = data - ..(newloc) - -/obj/item/key/proc/get_data(var/mob/user) - return key_data - -/obj/item/key/soap - name = "soap key" - desc = "a fragile key made using a bar of soap." - var/uses = 0 - -/obj/item/key/soap/get_data(var/mob/user) - uses-- - if(uses == 1) - to_chat(user, "\The [src] is going to break soon!") - else if(uses <= 0) - to_chat(user, "\The [src] crumbles in your hands.") - qdel(src) - return ..() diff --git a/code/modules/locks/lock.dm b/code/modules/locks/lock.dm deleted file mode 100644 index 64c0645b493f7..0000000000000 --- a/code/modules/locks/lock.dm +++ /dev/null @@ -1,79 +0,0 @@ -#define LOCK_LOCKED 1 -#define LOCK_BROKEN 2 - - -/datum/lock - var/status = 1 //unlocked, 1 == locked 2 == broken - var/lock_data = "" //basically a randomized string. The longer the string the more complex the lock. - var/atom/holder - -/datum/lock/New(var/atom/h, var/complexity = 1) - holder = h - if(istext(complexity)) - lock_data = complexity - else - lock_data = generateRandomString(complexity) - -/datum/lock/Destroy() - holder = null - ..() - -/datum/lock/proc/unlock(var/key = "", var/mob/user) - if(status ^ LOCK_LOCKED) - to_chat(user, "Its already unlocked!") - return 2 - key = get_key_data(key, user) - if(cmptext(lock_data,key) && (status ^ LOCK_BROKEN)) - status &= ~LOCK_LOCKED - return 1 - return 0 - -/datum/lock/proc/lock(var/key = "", var/mob/user) - if(status & LOCK_LOCKED) - to_chat(user, "Its already locked!") - return 2 - key = get_key_data(key, user) - if(cmptext(lock_data,key) && (status ^ LOCK_BROKEN)) - status |= LOCK_LOCKED - return 1 - return 0 - -/datum/lock/proc/toggle(var/key = "", var/mob/user) - if(status & LOCK_LOCKED) - return unlock(key, user) - else - return lock(key, user) - -/datum/lock/proc/getComplexity() - return length(lock_data) - -/datum/lock/proc/get_key_data(var/key = "", var/mob/user) - if(istype(key,/obj/item/key)) - var/obj/item/key/K = key - return K.get_data(user) - if(istext(key)) - return key - return null - -/datum/lock/proc/isLocked() - return status & LOCK_LOCKED - -/datum/lock/proc/pick_lock(var/obj/item/I, var/mob/user) - if(!istype(I) || (status ^ LOCK_LOCKED)) - return 0 - var/unlock_power = I.lock_picking_level - if(!unlock_power) - return 0 - user.visible_message("\The [user] takes out \the [I], picking \the [holder]'s lock.") - if (!do_after(user, 2 SECONDS, holder, DO_PUBLIC_UNIQUE)) - return 0 - if(prob(20*(unlock_power/getComplexity()))) - to_chat(user, "You pick open \the [holder]'s lock!") - unlock(lock_data) - return 1 - else if(prob(5 * unlock_power)) - to_chat(user, "You accidently break \the [holder]'s lock with your [I]!") - status |= LOCK_BROKEN - else - to_chat(user, "You fail to pick open \the [holder].") - return 0 diff --git a/code/modules/locks/lock_construct.dm b/code/modules/locks/lock_construct.dm deleted file mode 100644 index e6336b7a8e223..0000000000000 --- a/code/modules/locks/lock_construct.dm +++ /dev/null @@ -1,34 +0,0 @@ -/obj/item/material/lock_construct - name = "lock" - desc = "a crude but useful lock and bolt." - icon = 'icons/obj/items.dmi' - icon_state = "lock" - w_class = ITEM_SIZE_TINY - var/lock_data - -/obj/item/material/lock_construct/New() - ..() - force = 0 - throwforce = 0 - lock_data = generateRandomString(round(material.integrity/50)) - -/obj/item/material/lock_construct/attackby(var/obj/item/I, var/mob/user) - if(istype(I,/obj/item/key)) - var/obj/item/key/K = I - if(!K.key_data) - to_chat(user, "You fashion \the [I] to unlock \the [src]") - K.key_data = lock_data - else - to_chat(user, "\The [I] already unlocks something...") - return - if(istype(I,/obj/item/material/lock_construct)) - var/obj/item/material/lock_construct/L = I - src.lock_data = L.lock_data - to_chat(user, "You copy the lock from \the [L] to \the [src], making them identical.") - return - ..() - -/obj/item/material/lock_construct/proc/create_lock(var/atom/target, var/mob/user) - . = new /datum/lock(target,lock_data) - user.visible_message("\The [user] attaches \the [src] to \the [target]") - qdel(src) \ No newline at end of file diff --git a/code/modules/maps/dmm_suite.dm b/code/modules/maps/dmm_suite.dm deleted file mode 100644 index efb3a91ab5ce4..0000000000000 --- a/code/modules/maps/dmm_suite.dm +++ /dev/null @@ -1,610 +0,0 @@ -/* - 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. - - provides the proc write_map() - - Returns a text string of the map in dmm format - ready for output to a file. - - provides the proc save_map() - - Returns a .dmm file if map is saved - - Returns FALSE if map fails to save - - The dmm_suite provides saving and loading of map files in BYOND's native DMM map - format. It approximates the map saving and loading processes of the Dream Maker - and Dream Seeker programs so as to allow editing, saving, and loading of maps at - runtime. - - ------------------------ - - To save a map at runtime, create an instance of /dmm_suite, and then call - write_map(), which accepts three arguments: - - A turf representing one corner of a three dimensional grid (Required). - - Another turf representing the other corner of the same grid (Required). - - Any, or a combination, of several bit flags (Optional, see documentation). - - The order in which the turfs are supplied does not matter, the /dmm_writer will - determine the grid containing both, in much the same way as DM's block() function. - write_map() will then return a string representing the saved map in dmm format; - this string can then be saved to a file, or used for any other purose. - - ------------------------ - - To load a map at runtime, create an instance of /dmm_suite, and then call load_map(), - which accepts two arguments: - - A .dmm file to load (Required). - - A number representing the z-level on which to start loading the map (Optional). - - The /dmm_suite will load the map file starting on the specified z-level. If no - z-level was specified, world.maxz will be increased so as to fit the map. Note - that if you wish to load a map onto a z-level that already has objects on it, - you will have to handle the removal of those objects. Otherwise the new map will - simply load the new objects on top of the old ones. - - Also note that all type paths specified in the .dmm file must exist in the world's - code, and that the /dmm_reader trusts that files to be loaded are in fact valid - .dmm files. Errors in the .dmm format will cause runtime errors. - - */ - -/////////////////////////////////////////////////////////////// -//SS13 Optimized Map loader -////////////////////////////////////////////////////////////// - -//global datum that will preload variables on atoms instanciation -GLOBAL_VAR_INIT(use_preloader, FALSE) -GLOBAL_DATUM_INIT(_preloader, /dmm_suite/preloader, new) -GLOBAL_DATUM_INIT(maploader, /dmm_suite, new) - -/datum/map_load_metadata - var/bounds - var/list/atoms_to_initialise - -/dmm_suite - // /"([a-zA-Z]+)" = \(((?:.|\n)*?)\)\n(?!\t)|\((\d+),(\d+),(\d+)\) = \{"([a-zA-Z\n]*)"\}/g - var/static/regex/dmmRegex = new/regex({""(\[a-zA-Z]+)" = \\(((?:.|\n)*?)\\)\n(?!\t)|\\((\\d+),(\\d+),(\\d+)\\) = \\{"(\[a-zA-Z\n]*)"\\}"}, "g") - // /^[\s\n]+"?|"?[\s\n]+$|^"|"$/g - var/static/regex/trimQuotesRegex = new/regex({"^\[\\s\n]+"?|"?\[\\s\n]+$|^"|"$"}, "g") - // /^[\s\n]+|[\s\n]+$/ - var/static/regex/trimRegex = new/regex("^\[\\s\n]+|\[\\s\n]+$", "g") - var/static/list/modelCache = list() - var/static/space_key - #ifdef TESTING - var/static/turfsSkipped - #endif - -/** - * Construct the model map and control the loading process - * - * WORKING : - * - * 1) Makes an associative mapping of model_keys with model - * e.g aa = /turf/unsimulated/wall{icon_state = "rock"} - * 2) Read the map line by line, parsing the result (using parse_grid) - * - */ -// dmm_files: A list of .dmm files to load (Required). -// z_offset: A number representing the z-level on which to start loading the map (Optional). -// cropMap: When true, the map will be cropped to fit the existing world dimensions (Optional). -// 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 -/dmm_suite/proc/load_map(var/dmm_file, var/x_offset, var/y_offset, var/z_offset, var/cropMap, var/measureOnly, var/no_changeturf, var/clear_contents, var/lower_crop_x, var/lower_crop_y, var/upper_crop_x, var/upper_crop_y, var/initialized_areas_by_type) - //How I wish for RAII - Master.StartLoadingMap() - space_key = null - #ifdef TESTING - turfsSkipped = 0 - #endif - initialized_areas_by_type = initialized_areas_by_type || list() - if(!(world.area in initialized_areas_by_type)) - initialized_areas_by_type[world.area] = locate(world.area) - . = load_map_impl(dmm_file, x_offset, y_offset, z_offset, cropMap, measureOnly, no_changeturf, clear_contents, lower_crop_x, upper_crop_x, lower_crop_y, upper_crop_y, initialized_areas_by_type) - #ifdef TESTING - if(turfsSkipped) - testing("Skipped loading [turfsSkipped] default turfs") - #endif - Master.StopLoadingMap() - -/dmm_suite/proc/load_map_impl(dmm_file, x_offset, y_offset, z_offset, cropMap, measureOnly, no_changeturf, clear_contents, x_lower = -INFINITY, x_upper = INFINITY, y_lower = -INFINITY, y_upper = INFINITY, initialized_areas_by_type) - var/tfile = dmm_file//the map file we're creating - if(isfile(tfile)) - tfile = file2text(tfile) - - if(!x_offset) - x_offset = 1 - if(!y_offset) - y_offset = 1 - if(!z_offset) - z_offset = world.maxz + 1 - - var/list/bounds = list(1.#INF, 1.#INF, 1.#INF, -1.#INF, -1.#INF, -1.#INF) - var/list/grid_models = list() - var/key_len = 0 - - var/stored_index = 1 - - var/list/atoms_to_initialise = list() - var/list/atoms_to_delete = list() - - while(dmmRegex.Find_char(tfile, stored_index)) - stored_index = dmmRegex.next - - // "aa" = (/type{vars=blah}) - if(dmmRegex.group[1]) // Model - var/key = dmmRegex.group[1] - if(grid_models[key]) // Duplicate model keys are ignored in DMMs - continue - if(key_len != length(key)) - if(!key_len) - key_len = length(key) - else - throw EXCEPTION("Inconsistant key length in DMM") - if(!measureOnly) - grid_models[key] = dmmRegex.group[2] - - // (1,1,1) = {"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"} - else if(dmmRegex.group[3]) // Coords - if(!key_len) - throw EXCEPTION("Coords before model definition in DMM") - - var/curr_x = text2num(dmmRegex.group[3]) - - if(curr_x < x_lower || curr_x > x_upper) - continue - - var/xcrdStart = curr_x + x_offset - 1 - //position of the currently processed square - var/xcrd - var/ycrd = text2num(dmmRegex.group[4]) + y_offset - 1 - var/zcrd = text2num(dmmRegex.group[5]) + z_offset - 1 - - var/is_connected_to_lower_levels = AreConnectedZLevels(zcrd, z_offset) - var/is_on_an_existing_zlevel = zcrd <= world.maxz - - if (is_on_an_existing_zlevel && !is_connected_to_lower_levels) - continue - - var/zexpansion = zcrd > world.maxz - if(zexpansion && !measureOnly) // don't actually expand the world if we're only measuring bounds - if(cropMap) - continue - else - world.maxz = zcrd //create a new z_level if needed - if(!no_changeturf) - WARNING("Z-level expansion occurred without no_changeturf set, this may cause problems when /turf/post_change is called.") - - bounds[MAP_MINX] = min(bounds[MAP_MINX], clamp(xcrdStart, x_lower, x_upper)) - bounds[MAP_MINZ] = min(bounds[MAP_MINZ], zcrd) - bounds[MAP_MAXZ] = max(bounds[MAP_MAXZ], zcrd) - - var/list/gridLines = splittext(dmmRegex.group[6], "\n") - - var/leadingBlanks = 0 - while(leadingBlanks < gridLines.len && gridLines[++leadingBlanks] == "") - if(leadingBlanks > 1) - gridLines.Cut(1, leadingBlanks) // Remove all leading blank lines. - - if(!gridLines.len) // Skip it if only blank lines exist. - continue - - if(gridLines.len && gridLines[gridLines.len] == "") - gridLines.Cut(gridLines.len) // Remove only one blank line at the end. - - bounds[MAP_MINY] = min(bounds[MAP_MINY], clamp(ycrd, y_lower, y_upper)) - ycrd += gridLines.len - 1 // Start at the top and work down - - if(!cropMap && ycrd > world.maxy) - if(!measureOnly) - world.maxy = ycrd // Expand Y here. X is expanded in the loop below - bounds[MAP_MAXY] = max(bounds[MAP_MAXY], clamp(ycrd, y_lower, y_upper)) - else - bounds[MAP_MAXY] = max(bounds[MAP_MAXY], clamp(min(ycrd, world.maxy), y_lower, y_upper)) - - var/maxx = xcrdStart - if(measureOnly) - for(var/line in gridLines) - maxx = max(maxx, xcrdStart + length(line) / key_len - 1) - else - for(var/line in gridLines) - if((ycrd - y_offset + 1) < y_lower || (ycrd - y_offset + 1) > y_upper) //Reverse operation and check if it is out of bounds of cropping. - --ycrd - continue - if(ycrd <= world.maxy && ycrd >= 1) - xcrd = xcrdStart - for(var/tpos = 1 to length(line) - key_len + 1 step key_len) - if((xcrd - x_offset + 1) < x_lower || (xcrd - x_offset + 1) > x_upper) //Same as above. - ++xcrd - continue //X cropping. - if(xcrd > world.maxx) - if(cropMap) - break - else - world.maxx = xcrd - - if(xcrd >= 1) - var/model_key = copytext(line, tpos, tpos + key_len) - var/no_afterchange = no_changeturf || zexpansion - if(!no_afterchange || (model_key != space_key)) - if(!grid_models[model_key]) - throw EXCEPTION("Undefined model key in DMM.") - var/datum/grid_load_metadata/M = parse_grid(grid_models[model_key], model_key, xcrd, ycrd, zcrd, no_changeturf || zexpansion, clear_contents, initialized_areas_by_type) - if (M) - atoms_to_initialise += M.atoms_to_initialise - atoms_to_delete += M.atoms_to_delete - #ifdef TESTING - else - ++turfsSkipped - #endif - CHECK_TICK - maxx = max(maxx, xcrd) - ++xcrd - --ycrd - if (zexpansion) - create_lighting_overlays_zlevel(zcrd) - - bounds[MAP_MAXX] = clamp(max(bounds[MAP_MAXX], cropMap ? min(maxx, world.maxx) : maxx), x_lower, x_upper) - - CHECK_TICK - - if(bounds[1] == 1.#INF) // Shouldn't need to check every item - return null - else - if(!measureOnly) - if(clear_contents) - for(var/atom/to_delete in atoms_to_delete) - qdel(to_delete) - var/datum/map_load_metadata/M = new - M.bounds = bounds - M.atoms_to_initialise = atoms_to_initialise - return M - -/** - * Fill a given tile with its area/turf/objects/mobs - * Variable model is one full map line (e.g /turf/unsimulated/wall{icon_state = "rock"}, /area/mine/explored) - * - * WORKING : - * - * 1) Read the model string, member by member (delimiter is ',') - * - * 2) Get the path of the atom and store it into a list - * - * 3) a) Check if the member has variables (text within '{' and '}') - * - * 3) b) Construct an associative list with found variables, if any (the atom index in members is the same as its variables in members_attributes) - * - * 4) Instanciates the atom with its variables - * - */ - -/datum/grid_load_metadata - var/list/atoms_to_initialise - var/list/atoms_to_delete - -/dmm_suite/proc/types_to_delete() - return list( - /mob/living, - /obj/effect, - /obj/item, - /obj/machinery, - /obj/structure, - ) - -/dmm_suite/proc/parse_grid(model as text, model_key as text, xcrd as num,ycrd as num,zcrd as num, no_changeturf as num, clear_contents as num, initialized_areas_by_type) - /*Method parse_grid() - - Accepts a text string containing a comma separated list of type paths of the - same construction as those contained in a .dmm file, and instantiates them. - */ - - var/list/members //will contain all members (paths) in model (in our example : /turf/unsimulated/wall and /area/mine/explored) - var/list/members_attributes //will contain lists filled with corresponding variables, if any (in our example : list(icon_state = "rock") and list()) - var/list/cached = modelCache[model] - var/index - - if(cached) - members = cached[1] - members_attributes = cached[2] - else - ///////////////////////////////////////////////////////// - //Constructing members and corresponding variables lists - //////////////////////////////////////////////////////// - - members = list() - members_attributes = list() - index = 1 - - var/old_position = 1 - var/dpos - - do - //finding next member (e.g /turf/unsimulated/wall{icon_state = "rock"} or /area/mine/explored) - dpos = find_next_delimiter_position(model, old_position, ",", "{", "}") //find next delimiter (comma here) that's not within {...} - - var/full_def = trim_text(copytext(model, old_position, dpos)) //full definition, e.g : /obj/foo/bar{variables=derp} - var/variables_start = findtext(full_def, "{") - var/atom_def = text2path(trim_text(copytext(full_def, 1, variables_start))) //path definition, e.g /obj/foo/bar - old_position = dpos + 1 - - if(!atom_def) // Skip the item if the path does not exist. Fix your crap, mappers! - #ifdef UNIT_TEST - log_error("Couldn't find atom path specified in map: [full_def]") - #endif - if (dpos == 0) - break - else - continue - - members += atom_def - - //transform the variables in text format into a list (e.g {var1="derp"; var2; var3=7} => list(var1="derp", var2, var3=7)) - var/list/fields - - if(variables_start)//if there's any variable - full_def = copytext(full_def,variables_start+1,length(full_def))//removing the last '}' - fields = readlist(full_def, ";") - if(fields.len) - if(!trim(fields[fields.len])) - --fields.len - for(var/I in fields) - var/value = fields[I] - if(istext(value)) - fields[I] = apply_text_macros(value) - - //then fill the members_attributes list with the corresponding variables - members_attributes.len++ - members_attributes[index++] = fields - - CHECK_TICK - while(dpos != 0) - - //check and see if we can just skip this turf - //So you don't have to understand this horrid statement, we can do this if - // 1. no_changeturf is set - // 2. the space_key isn't set yet - // 3. there are exactly 2 members - // 4. with no attributes - // 5. and the members are world.turf and world.area - // Basically, if we find an entry like this: "XXX" = (/turf/default, /area/default) - // We can skip calling this proc every time we see XXX - if(no_changeturf && !space_key && members.len == 2 && members_attributes.len == 2 && length(members_attributes[1]) == 0 && length(members_attributes[2]) == 0 && (world.area in members) && (world.turf in members)) - space_key = model_key - return - - modelCache[model] = list(members, members_attributes) - - //////////////// - //Instanciation - //////////////// - - //The next part of the code assumes there's ALWAYS an /area AND a /turf on a given tile - var/turf/crds = locate(xcrd,ycrd,zcrd) - - var/is_not_noop = FALSE - var/atoms_to_delete = list() - - //first instance the /area and remove it from the members list - index = members.len - if(members[index] != /area/template_noop) - is_not_noop = TRUE - var/list/attr = members_attributes[index] - if (LAZYLEN(attr)) - GLOB._preloader.setup(attr)//preloader for assigning set variables on atom creation - var/atype = members[index] - var/atom/instance = initialized_areas_by_type[atype] - if(!instance) - instance = new atype(null) - initialized_areas_by_type[atype] = instance - if(crds) - instance.contents.Add(crds) - - 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 - - var/first_turf_index = 1 - while(!ispath(members[first_turf_index], /turf)) //find first /turf object in members - first_turf_index++ - - //turn off base new Initialization until the whole thing is loaded - SSatoms.map_loader_begin() - //since we've switched off autoinitialisation, record atoms to initialise later - var/list/atoms_to_initialise = list() - - //instanciate the first /turf - var/turf/T - if(members[first_turf_index] != /turf/template_noop) - is_not_noop = TRUE - T = instance_atom(members[first_turf_index],members_attributes[first_turf_index],crds,no_changeturf) - atoms_to_initialise += T - - if(T) - //if others /turf are presents, simulates the underlays piling effect - index = first_turf_index + 1 - while(index <= members.len - 1) // Last item is an /area - var/underlay = T.appearance - T = instance_atom(members[index],members_attributes[index],crds,no_changeturf)//instance new turf - T.underlays += underlay - index++ - atoms_to_initialise += T - - if (clear_contents && is_not_noop) - for (var/type_to_delete in types_to_delete()) - for (var/atom/pre_existing in crds) - if (istype(pre_existing, type_to_delete)) - atoms_to_delete |= pre_existing - - //finally instance all remainings objects/mobs - for(index in 1 to first_turf_index-1) - atoms_to_initialise += instance_atom(members[index],members_attributes[index],crds,no_changeturf) - //Restore initialization to the previous valsue - SSatoms.map_loader_stop() - - var/datum/grid_load_metadata/M = new - M.atoms_to_initialise = atoms_to_initialise - M.atoms_to_delete = atoms_to_delete - return M - -//////////////// -//Helpers procs -//////////////// - -//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) - if (LAZYLEN(attributes)) - GLOB._preloader.setup(attributes, path) - - if(crds) - if(!no_changeturf && ispath(path, /turf)) - . = crds.ChangeTurf(path, FALSE, TRUE) - else - . = create_atom(path, crds)//first preloader pass - - 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 delay initialization. - if(TICK_CHECK) - SSatoms.map_loader_stop() - stoplag() - SSatoms.map_loader_begin() - -/dmm_suite/proc/create_atom(path, crds) - // Doing this async is impossible, as we must return the ref. - return new path (crds) - -//text trimming (both directions) helper proc -//optionally removes quotes before and after the text (for variable name) -/dmm_suite/proc/trim_text(text, trim_quotes) - return replacetext_char(text, trim_quotes ? trimQuotesRegex : trimRegex, "") - -//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="\"",closing_escape="\"") - var/position = initial_position - var/next_delimiter = findtext(text,delimiter,position,0) - var/next_opening = findtext(text,opening_escape,position,0) - - while((next_opening != 0) && (next_opening < next_delimiter)) - position = findtext(text,closing_escape,next_opening + 1,0)+1 - next_delimiter = findtext(text,delimiter,position,0) - next_opening = findtext(text,opening_escape,position,0) - - return next_delimiter - -/dmm_suite/proc/readlistitem(text as text) - //Check for string - if(findtext(text,"\"",1,2)) - . = copytext(text,2,findtext(text,"\"",3,0)) - - //Check for number - else if(isnum(text2num(text)) && text == "[text2num(text)]") //text2num will parse truthy false positives; this demands that the only numbers parsed as such are properly formatted ones. - . = text2num(text) - - //Check for null - else if(text == "null") - . = null - - //Check for list - else if(copytext(text,1,5) == "list") - . = readlist(copytext(text,6,length(text))) - - //Check for file - else if(copytext(text,1,2) == "'") - . = file(copytext(text,2,length(text))) - - //Check for path - else if(ispath(text2path(text))) - . = text2path(text) - -//build a list from variables in text form (e.g {var1="derp"; var2; var3=7} => list(var1="derp", var2, var3=7)) -//return the filled list -/dmm_suite/proc/readlist(text as text, delimiter=",") - var/list/to_return = list() - - var/position - var/old_position = 1 - - do - //find next delimiter that is not within "..." - position = find_next_delimiter_position(text,old_position,delimiter) - - //check if this is a simple variable (as in list(var1, var2)) or an associative one (as in list(var1="foo",var2=7)) - var/equal_position = findtext(text,"=",old_position, position) - - var/trim_left = trim_text(copytext(text,old_position,(equal_position ? equal_position : position)), 0) - old_position = position + 1 - - if(!length(trim_left)) - if(position == 0) - break // That terminal commas are ignored is real dm behavior. - to_return.len++ - continue - - var/left = readlistitem(trim_left) - if(equal_position) - if(!left && trim_left != "null") - left = trim_left // This is dm behavior: unindentifiable keys in associative lists are parsed as literal strings. - if(left == 1.#INF || left == -1.#INF) - left = trim_left // This is not valid as a list index; we could let it runtime, but if associative it should be parsed as "inf" or "-inf" instead. - to_return += left - - if(equal_position)//associative var, so do the association - if(isnum(left)) - crash_with("Numerical key in associative list.") - break // This is invalid; apparently dm will runtime in this situation. - var/trim_right = trim_text(copytext(text,equal_position+1,position))//the content of the variable - to_return[left] = readlistitem(trim_right) - - while(position != 0) - - return to_return - -/dmm_suite/Destroy() - ..() - return QDEL_HINT_HARDDEL_NOW - -////////////////// -//Preloader datum -////////////////// - -/dmm_suite/preloader - parent_type = /datum - var/list/attributes - var/target_path - -/dmm_suite/preloader/proc/setup(list/the_attributes, path) - if(LAZYLEN(the_attributes)) - GLOB.use_preloader = TRUE - attributes = the_attributes - target_path = path - -/dmm_suite/preloader/proc/load(atom/what) - for(var/attribute in attributes) - var/value = attributes[attribute] - if(islist(value)) - value = deepCopyList(value) - try - what.vars[attribute] = value - catch (var/ex) - var/found = FALSE - for (var/V in what.vars) - if (deep_string_equals(V, attribute)) - what.vars[V] = value - log_debug("Successfully performed manual var detection for var [V] \ref[V] on provided attribute [attribute] \ref[attribute] for atom [what]") - found = TRUE - break - if (!found) - throw ex - GLOB.use_preloader = FALSE - -/area/template_noop - name = "Area Passthrough" - icon_state = "unknown" - -/turf/template_noop - name = "Turf Passthrough" - icon_state = "noop" diff --git a/code/modules/maps/helper_landmarks.dm b/code/modules/maps/helper_landmarks.dm deleted file mode 100644 index d16339826622a..0000000000000 --- a/code/modules/maps/helper_landmarks.dm +++ /dev/null @@ -1,76 +0,0 @@ -//Load a random map template from the list. Maploader handles it to avoid order of init madness -/obj/effect/landmark/map_load_mark - name = "map loader landmark" - var/list/templates //list of template types to pick from - -//Throw things in the area around randomly -/obj/effect/landmark/carnage_mark - name = "carnage landmark" - var/movement_prob = 50 // a chance random unanchored item in the room will be moved randomly - var/movement_range = 3 // how far would items get thrown - -/obj/effect/landmark/carnage_mark/Initialize() - . = ..() - return INITIALIZE_HINT_LATELOAD - -/obj/effect/landmark/carnage_mark/LateInitialize() - var/area/A = get_area(src) - for(var/atom/movable/AM in A) - if(AM && !AM.anchored && AM.simulated && prob(movement_prob)) - spawn() - AM.throw_at_random(FALSE, movement_range, 1) - qdel(src) - -//Clears walls -/obj/effect/landmark/clear - name = "clear turf" - icon_state = "clear" - delete_me = TRUE - -/obj/effect/landmark/clear/Initialize() - var/turf/simulated/wall/W = get_turf(src) - if(istype(W)) - W.dismantle_wall(TRUE, TRUE) - var/turf/simulated/mineral/M = W - if(istype(M)) - M.GetDrilled() - . = ..() - -//Applies fire act to the turf -/obj/effect/landmark/scorcher - name = "fire" - icon_state = "fire" - var/temp = T0C + 3000 - -/obj/effect/landmark/scorcher/Initialize() - var/turf/simulated/T = get_turf(src) - if(istype(T)) - T.fire_act(exposed_temperature = temp) - . = ..() - -//Delete specified things when a specified shuttle moves -/obj/effect/landmark/delete_on_shuttle - var/shuttle_name - var/shuttle_datum - var/list/typetodelete = list(/obj/machinery, /obj/item/gun, /mob/living/exosuit, /obj/item/device/transfer_valve) - -/obj/effect/landmark/delete_on_shuttle/Initialize() - . = ..() - GLOB.shuttle_added.register_global(src, .proc/check_shuttle) - -/obj/effect/landmark/delete_on_shuttle/proc/check_shuttle(var/shuttle) - if(SSshuttle.shuttles[shuttle_name] == shuttle) - GLOB.shuttle_moved_event.register(shuttle, src, .proc/delete_everything) - shuttle_datum = shuttle - -/obj/effect/landmark/delete_on_shuttle/proc/delete_everything() - for(var/O in loc) - if(is_type_in_list(O,typetodelete)) - qdel(O) - qdel(src) - -/obj/effect/landmark/delete_on_shuttle/Destroy() - GLOB.shuttle_added.unregister_global(src, .proc/check_shuttle) - if(shuttle_datum) - GLOB.shuttle_moved_event.unregister(shuttle_datum, src, .proc/delete_everything) - . = ..() diff --git a/code/modules/maps/map_template.dm b/code/modules/maps/map_template.dm deleted file mode 100644 index d4f385a941958..0000000000000 --- a/code/modules/maps/map_template.dm +++ /dev/null @@ -1,202 +0,0 @@ -/datum/map_template - var/name = "Default Template Name" - var/id = null // All maps that should be loadable during runtime needs an id - var/width = 0 - var/height = 0 - var/tallness = 0 - var/list/mappaths = null - var/loaded = 0 // Times loaded this round - var/list/shuttles_to_initialise = list() - var/list/subtemplates_to_spawn - var/base_turf_for_zs = null - var/accessibility_weight = 0 - var/template_flags = TEMPLATE_FLAG_ALLOW_DUPLICATES - -/datum/map_template/New(var/list/paths = null, var/rename = null) - if(paths && !islist(paths)) - crash_with("Non-list paths passed into map template constructor.") - if(paths) - mappaths = paths - if(mappaths) - preload_size(mappaths) - if(rename) - name = rename - if(!name && id) - name = id - -/datum/map_template/proc/preload_size() - var/list/bounds = list(1.#INF, 1.#INF, 1.#INF, -1.#INF, -1.#INF, -1.#INF) - var/z_offset = 1 // needed to calculate z-bounds correctly - for (var/mappath in mappaths) - var/datum/map_load_metadata/M = GLOB.maploader.load_map(file(mappath), 1, 1, z_offset, cropMap=FALSE, measureOnly=TRUE, no_changeturf=TRUE, clear_contents= template_flags & TEMPLATE_FLAG_CLEAR_CONTENTS) - if(M) - bounds = extend_bounds_if_needed(bounds, M.bounds) - z_offset++ - else - return FALSE - width = bounds[MAP_MAXX] - bounds[MAP_MINX] + 1 - height = bounds[MAP_MAXY] - bounds[MAP_MINX] + 1 - tallness = bounds[MAP_MAXZ] - bounds[MAP_MINZ] + 1 - return TRUE - -/datum/map_template/proc/init_atoms(var/list/atoms) - if (SSatoms.atom_init_stage == INITIALIZATION_INSSATOMS) - return // let proper initialisation handle it later - - var/list/turf/turfs = list() - var/list/obj/machinery/atmospherics/atmos_machines = list() - var/list/obj/machinery/machines = list() - var/list/obj/structure/cable/cables = list() - - for(var/atom/A in atoms) - if(istype(A, /turf)) - turfs += A - if(istype(A, /obj/structure/cable)) - cables += A - if(istype(A, /obj/machinery/atmospherics)) - atmos_machines += A - if(istype(A, /obj/machinery)) - machines += A - if(istype(A,/obj/effect/landmark/map_load_mark)) - LAZYADD(subtemplates_to_spawn, A) - - var/notsuspended - if(!SSmachines.suspended) - SSmachines.suspend() - notsuspended = TRUE - - SSatoms.InitializeAtoms() // The atoms should have been getting queued there. This flushes the queue. - - SSmachines.setup_powernets_for_cables(cables) - SSmachines.setup_atmos_machinery(atmos_machines) - if(notsuspended) - SSmachines.wake() - - for (var/i in machines) - var/obj/machinery/machine = i - machine.power_change() - - for (var/i in turfs) - var/turf/T = i - T.post_change() - if(template_flags & TEMPLATE_FLAG_NO_RUINS) - T.turf_flags |= TURF_FLAG_NORUINS - if(template_flags & TEMPLATE_FLAG_NO_RADS) - qdel(SSradiation.sources_assoc[i]) - if(istype(T,/turf/simulated)) - var/turf/simulated/sim = T - sim.update_air_properties() - -/datum/map_template/proc/pre_init_shuttles() - . = SSshuttle.block_queue - SSshuttle.block_queue = TRUE - -/datum/map_template/proc/init_shuttles(var/pre_init_state) - for (var/shuttle_type in shuttles_to_initialise) - LAZYADD(SSshuttle.shuttles_to_initialize, shuttle_type) // queue up for init. - SSshuttle.block_queue = pre_init_state - SSshuttle.clear_init_queue() // We will flush the queue unless there were other blockers, in which case they will do it. - -/datum/map_template/proc/load_new_z(no_changeturf = TRUE) - - var/x = round((world.maxx - width)/2) - var/y = round((world.maxy - height)/2) - var/initial_z = world.maxz + 1 - - if (x < 1) x = 1 - if (y < 1) y = 1 - - var/list/bounds = list(1.#INF, 1.#INF, 1.#INF, -1.#INF, -1.#INF, -1.#INF) - var/list/atoms_to_initialise = list() - var/shuttle_state = pre_init_shuttles() - - var/initialized_areas_by_type = list() - for (var/mappath in mappaths) - var/datum/map_load_metadata/M = GLOB.maploader.load_map(file(mappath), x, y, no_changeturf = no_changeturf, initialized_areas_by_type = initialized_areas_by_type) - if (M) - bounds = extend_bounds_if_needed(bounds, M.bounds) - atoms_to_initialise += M.atoms_to_initialise - else - return FALSE - - for (var/z_index = bounds[MAP_MINZ]; z_index <= bounds[MAP_MAXZ]; z_index++) - if (accessibility_weight) - GLOB.using_map.accessible_z_levels[num2text(z_index)] = accessibility_weight - if (base_turf_for_zs) - GLOB.using_map.base_turf_by_z[num2text(z_index)] = base_turf_for_zs - GLOB.using_map.player_levels |= z_index - - //initialize things that are normally initialized after map load - init_atoms(atoms_to_initialise) - init_shuttles(shuttle_state) - after_load(initial_z) - for(var/light_z = initial_z to world.maxz) - create_lighting_overlays_zlevel(light_z) - log_game("Z-level [name] loaded at [x],[y],[world.maxz]") - loaded++ - - return locate(world.maxx/2, world.maxy/2, world.maxz) - -/datum/map_template/proc/load(turf/T, centered=FALSE) - if(centered) - T = locate(T.x - round(width/2) , T.y - round(height/2) , T.z) - if(!T) - return - if(T.x+width > world.maxx) - return - if(T.y+height > world.maxy) - return - - var/list/atoms_to_initialise = list() - var/shuttle_state = pre_init_shuttles() - - var/initialized_areas_by_type = list() - for (var/mappath in mappaths) - var/datum/map_load_metadata/M = GLOB.maploader.load_map(file(mappath), T.x, T.y, T.z, cropMap=TRUE, clear_contents=(template_flags & TEMPLATE_FLAG_CLEAR_CONTENTS), initialized_areas_by_type = initialized_areas_by_type) - if (M) - atoms_to_initialise += M.atoms_to_initialise - else - return FALSE - - //initialize things that are normally initialized after map load - init_atoms(atoms_to_initialise) - init_shuttles(shuttle_state) - after_load(T.z) - SSlighting.InitializeTurfs(atoms_to_initialise) // Hopefully no turfs get placed on new coords by SSatoms. - log_game("[name] loaded at at [T.x],[T.y],[T.z]") - loaded++ - - return TRUE - -/datum/map_template/proc/after_load(z) - for(var/obj/effect/landmark/map_load_mark/mark in subtemplates_to_spawn) - subtemplates_to_spawn -= mark - if(LAZYLEN(mark.templates)) - var/template = pick(mark.templates) - var/datum/map_template/M = new template() - M.load(get_turf(mark), TRUE) - qdel(mark) - LAZYCLEARLIST(subtemplates_to_spawn) - -/datum/map_template/proc/extend_bounds_if_needed(var/list/existing_bounds, var/list/new_bounds) - var/list/bounds_to_combine = existing_bounds.Copy() - for (var/min_bound in list(MAP_MINX, MAP_MINY, MAP_MINZ)) - bounds_to_combine[min_bound] = min(existing_bounds[min_bound], new_bounds[min_bound]) - for (var/max_bound in list(MAP_MAXX, MAP_MAXY, MAP_MAXZ)) - bounds_to_combine[max_bound] = max(existing_bounds[max_bound], new_bounds[max_bound]) - return bounds_to_combine - - -/datum/map_template/proc/get_affected_turfs(turf/T, centered = FALSE) - var/turf/placement = T - if(centered) - var/turf/corner = locate(placement.x - round(width/2), placement.y - round(height/2), placement.z) - if(corner) - placement = corner - return block(placement, locate(placement.x+width-1, placement.y+height-1, placement.z)) - -//for your ever biggening badminnery kevinz000 -//? - Cyberboss -/proc/load_new_z_level(var/file, var/name) - var/datum/map_template/template = new(file, name) - template.load_new_z() diff --git a/code/modules/maps/map_template_unit_testing.dm b/code/modules/maps/map_template_unit_testing.dm deleted file mode 100644 index 732ce7fe91626..0000000000000 --- a/code/modules/maps/map_template_unit_testing.dm +++ /dev/null @@ -1,18 +0,0 @@ -/datum/map_template - var/const/NO_APC = 1 - var/const/NO_VENT = 2 - var/const/NO_SCRUBBER = 4 - - var/list/area_usage_test_exempted_areas = list() - var/list/area_usage_test_exempted_root_areas = list() - var/list/apc_test_exempt_areas = list() - var/list/area_coherency_test_exempt_areas = list() - var/list/area_coherency_test_subarea_count = list() - -/datum/map_template/New(var/list/paths = null, var/rename = null) - ..() - GLOB.using_map.area_usage_test_exempted_areas |= area_usage_test_exempted_areas - GLOB.using_map.area_usage_test_exempted_root_areas |= area_usage_test_exempted_root_areas - GLOB.using_map.apc_test_exempt_areas |= apc_test_exempt_areas - GLOB.using_map.area_coherency_test_exempt_areas |= area_coherency_test_exempt_areas - GLOB.using_map.area_coherency_test_subarea_count |= area_coherency_test_subarea_count \ No newline at end of file diff --git a/code/modules/maps/ruins.dm b/code/modules/maps/ruins.dm deleted file mode 100644 index 9b90d4b99df24..0000000000000 --- a/code/modules/maps/ruins.dm +++ /dev/null @@ -1,83 +0,0 @@ -GLOBAL_LIST_EMPTY(banned_ruin_ids) - -/proc/seedRuins(list/zlevels, budget, list/potentialRuins, allowed_area = /area/space, var/maxx = world.maxx, var/maxy = world.maxy) - if (!length(z_levels)) - UNLINT(WARNING("No Z levels provided - Not generating ruins")) - return - - for (var/z in zlevels) - var/turf/check = locate(1, 1, z) - if (!check) - UNLINT(WARNING("Z level [z] does not exist - Not generating ruins")) - return - - var/list/available = list() - var/list/selected = list() - var/remaining = budget - - for(var/datum/map_template/ruin/ruin in potentialRuins) - if (ruin.id in GLOB.banned_ruin_ids) - continue - available[ruin] = ruin.spawn_weight - - if (!length(available)) - UNLINT(WARNING("No ruins available - Not generating ruins")) - - while (remaining > 0 && length(available)) - var/datum/map_template/ruin/ruin = pickweight(available) - if (ruin.spawn_cost > remaining) - available -= ruin - continue - - var/width = TRANSITIONEDGE + RUIN_MAP_EDGE_PAD + round(ruin.width / 2) - var/height = TRANSITIONEDGE + RUIN_MAP_EDGE_PAD + round(ruin.height / 2) - if (width > maxx - width || height > maxy - height) - available -= ruin - continue - - for (var/attempts = 20, attempts > 0, --attempts) - var/z = pick(zlevels) - var/turf/choice = locate(rand(width, maxx - width), rand(height, maxy - height), z) - - var/valid = TRUE - for (var/turf/check in ruin.get_affected_turfs(choice, 1)) - var/area/check_area = get_area(check) - if (!istype(check_area, allowed_area) || check.turf_flags & TURF_FLAG_NORUINS) - if (attempts == 1) - available -= ruin - valid = FALSE - break - if (!valid) - continue - - log_world("Ruin \"[ruin.name]\" placed at ([choice.x], [choice.y], [choice.z])") - - load_ruin(choice, ruin) - selected += ruin - if (ruin.spawn_cost > 0) - remaining -= ruin.spawn_cost - if (!(ruin.template_flags & TEMPLATE_FLAG_ALLOW_DUPLICATES)) - GLOB.banned_ruin_ids += ruin.id - available -= ruin - break - - if (remaining) - log_world("Ruin loader had no ruins to pick from with [budget] left to spend.") - - if (length(selected)) - report_progress("Finished selecting planet ruins ([english_list(selected)]) for [budget - remaining] cost of [budget] budget.") - - return selected - -/proc/load_ruin(turf/central_turf, datum/map_template/template) - if(!template) - return FALSE - for(var/i in template.get_affected_turfs(central_turf, 1)) - var/turf/T = i - for(var/mob/living/simple_animal/monster in T) - qdel(monster) - template.load(central_turf,centered = TRUE) - var/datum/map_template/ruin = template - if(istype(ruin)) - new /obj/effect/landmark/ruin(central_turf, ruin) - return TRUE diff --git a/code/modules/materials/_materials.dm b/code/modules/materials/_materials.dm deleted file mode 100644 index 7eb6229c58d3f..0000000000000 --- a/code/modules/materials/_materials.dm +++ /dev/null @@ -1,251 +0,0 @@ -/* - MATERIAL DATUMS - This data is used by various parts of the game for basic physical properties and behaviors - of the metals/materials used for constructing many objects. Each var is commented and should be pretty - self-explanatory but the various object types may have their own documentation. - - PATHS THAT USE DATUMS - turf/simulated/wall - obj/item/material - obj/structure/barricade - obj/item/stack/material - obj/structure/table - - VALID ICONS - WALLS - stone - metal - solid - cult - DOORS - stone - metal - resin - wood -*/ - -//Returns the material the object is made of, if applicable. -//Will we ever need to return more than one value here? Or should we just return the "dominant" material. -/obj/proc/get_material() - return null - -//mostly for convenience -/obj/proc/get_material_name() - var/material/material = get_material() - if(material) - return material.name - -/obj/proc/get_material_display_name() - var/material/material = get_material() - if (material) - return material.display_name - -// Material definition and procs follow. -/material - var/name // Unique name for use in indexing the list. - var/display_name // Prettier name for display. - var/adjective_name - var/use_name - var/wall_name = "wall" // Name given to walls of this material - var/flags = 0 // Various status modifiers. - var/sheet_singular_name = "sheet" - var/sheet_plural_name = "sheets" - var/is_fusion_fuel - var/list/chem_products //Used with the grinder to produce chemicals. - var/hidden_from_codex - var/lore_text - var/mechanics_text - var/antag_text - - // Shards/tables/structures - var/shard_type = SHARD_SHRAPNEL // Path of debris object. - var/shard_icon // Related to above. - var/shard_can_repair = 1 // Can shards be turned into sheets with a welder? - var/list/recipes // Holder for all recipes usable with a sheet of this material. - var/destruction_desc = "breaks apart" // Fancy string for barricades/tables/objects exploding. - - // Icons - var/icon_colour // Colour applied to products of this material. - var/icon_base = "metal" // Wall and table base icon tag. See header. - var/door_icon_base = "metal" // Door base icon tag. See header. - var/icon_reinf = "reinf_metal" // Overlay used - var/table_icon_base = "metal" - var/table_reinf = "reinf_metal" - var/list/stack_origin_tech = list(TECH_MATERIAL = 1) // Research level for stacks. - - // Attributes - var/cut_delay = 0 // Delay in ticks when cutting through this wall. - var/radioactivity // Radiation var. Used in wall and object processing to irradiate surroundings. - var/ignition_point // K, point at which the material catches on fire. - var/melting_point = 1800 // K, walls will take damage if they're next to a fire hotter than this - var/brute_armor = 2 // Brute damage to a wall is divided by this value if the wall is reinforced by this material. - var/burn_armor // Same as above, but for Burn damage type. If blank brute_armor's value is used. - var/integrity = 150 // General-use HP value for products. - var/opacity = 1 // Is the material transparent? 0.5< makes transparent walls/doors. - var/explosion_resistance = 5 // Only used by walls currently. - var/conductive = 1 // Objects with this var add CONDUCTS to flags on spawn. - var/luminescence - var/list/alloy_materials // If set, material can be produced via alloying these materials in these amounts. - var/units_per_sheet = SHEET_MATERIAL_AMOUNT - - // Placeholder vars for the time being, todo properly integrate windows/light tiles/rods. - var/wire_product - var/list/window_options = list() - - // Damage values. - var/hardness = MATERIAL_HARD // Prob of wall destruction by hulk, used for edge damage in weapons. - var/weight = 20 // Determines blunt damage/throwforce for weapons. - - // Noise when someone is faceplanted onto a table made of this material. - var/tableslam_noise = 'sound/weapons/tablehit1.ogg' - // Noise made when a simple door made of this material opens or closes. - var/dooropen_noise = 'sound/effects/stonedoor_openclose.ogg' - // Noise made when you hit structure made of this material. - var/hitsound = 'sound/weapons/genhit.ogg' - // Path to resulting stacktype. Todo remove need for this. - var/stack_type = /obj/item/stack/material/generic - // Wallrot crumble message. - var/rotting_touch_message = "crumbles under your touch" - // Modifies skill checks when constructing with this material. - var/construction_difficulty = MATERIAL_EASY_DIY - - // Mining behavior. - var/alloy_product - var/ore_name - var/ore_desc - var/ore_smelts_to - var/ore_compresses_to - var/ore_result_amount - var/ore_spread_chance - var/ore_scan_icon - var/ore_icon_overlay - var/sale_price - var/value = 1 - - // Xenoarch behavior. - var/list/xarch_ages = list("thousand" = 999, "million" = 999) - var/xarch_source_mineral = "iron" - -// Placeholders for light tiles and rglass. -/material/proc/reinforce(var/mob/user, var/obj/item/stack/material/used_stack, var/obj/item/stack/material/target_stack) - if(!used_stack.can_use(1)) - to_chat(user, "You need need at least one [used_stack.singular_name] to reinforce [target_stack].") - return - - var/needed_sheets = 2 * used_stack.matter_multiplier - if(!target_stack.can_use(needed_sheets)) - to_chat(user, "You need need at least [needed_sheets] [target_stack.plural_name] for reinforcement with [used_stack].") - return - - var/material/reinf_mat = used_stack.material - if(reinf_mat.integrity <= integrity || reinf_mat.is_brittle()) - to_chat(user, "The [reinf_mat.display_name] is too structurally weak to reinforce the [display_name].") - return - - to_chat(user, "You reinforce the [target_stack] with the [reinf_mat.display_name].") - used_stack.use(1) - var/target_loc = target_stack.loc - var/obj/item/stack/material/S = target_stack.split(needed_sheets) - S.reinf_material = reinf_mat - S.update_strings() - S.update_icon() - S.dropInto(target_loc) - -/material/proc/build_wired_product(var/mob/user, var/obj/item/stack/used_stack, var/obj/item/stack/target_stack) - if(!wire_product) - to_chat(user, "You cannot make anything out of \the [target_stack]") - return - if(!used_stack.can_use(5) || !target_stack.can_use(1)) - to_chat(user, "You need five wires and one sheet of [display_name] to make anything useful.") - return - - used_stack.use(5) - target_stack.use(1) - to_chat(user, "You attach wire to the [name].") - var/obj/item/product = new wire_product(get_turf(user)) - if(!(user.l_hand && user.r_hand)) - user.put_in_hands(product) - -// Make sure we have a display name and shard icon even if they aren't explicitly set. -/material/New() - ..() - if(!display_name) - display_name = name - if(!use_name) - use_name = display_name - if(!adjective_name) - adjective_name = display_name - if(!shard_icon) - shard_icon = shard_type - if(!burn_armor) - burn_armor = brute_armor - -// Return the matter comprising this material. -/material/proc/get_matter() - var/list/temp_matter = list() - temp_matter[name] = SHEET_MATERIAL_AMOUNT - return temp_matter - -// Weapons handle applying a divisor for this value locally. -/material/proc/get_blunt_damage() - return weight //todo - -// As above. -/material/proc/get_edge_damage() - return hardness //todo - -/material/proc/get_attack_cooldown() - if(weight <= MATERIAL_LIGHT) - return FAST_WEAPON_COOLDOWN - if(weight >= MATERIAL_HEAVY) - return SLOW_WEAPON_COOLDOWN - return DEFAULT_WEAPON_COOLDOWN - -// Snowflakey, only checked for alien doors at the moment. -/material/proc/can_open_material_door(var/mob/living/user) - return 1 - -// Currently used for weapons and objects made of uranium to irradiate things. -/material/proc/products_need_process() - return (radioactivity>0) //todo - -// Used by walls when qdel()ing to avoid neighbor merging. -/material/placeholder - name = "placeholder" - -// Places a girder object when a wall is dismantled, also applies reinforced material. -/material/proc/place_dismantled_girder(var/turf/target, var/material/reinf_material) - var/obj/structure/girder/G = new(target) - if(reinf_material) - G.reinf_material = reinf_material - G.reinforce_girder() - -// General wall debris product placement. -// Not particularly necessary aside from snowflakey cult girders. -/material/proc/place_dismantled_product(var/turf/target,var/is_devastated) - if (is_devastated) - var/return_count = rand(1, 2) - if (place_shard(target, return_count) == null) - place_sheet(target, return_count) - else - place_sheet(target, 2) - -// Debris product. Used ALL THE TIME. -/material/proc/place_sheet(var/turf/target, var/amount = 1) - return stack_type ? new stack_type(target, amount, name) : null - -// As above. -/material/proc/place_shard(var/turf/target) - if(shard_type) - return new /obj/item/material/shard(target, src.name) - -// Used by walls and weapons to determine if they break or not. -/material/proc/is_brittle() - return !!(flags & MATERIAL_BRITTLE) - -/material/proc/combustion_effect(var/turf/T, var/temperature) - return - -// Dumb overlay to apply over wall sprite for cheap texture effect -/material/proc/get_wall_texture() - return diff --git a/code/modules/materials/definitions/materials_glass.dm b/code/modules/materials/definitions/materials_glass.dm deleted file mode 100644 index 43dee1e776eb9..0000000000000 --- a/code/modules/materials/definitions/materials_glass.dm +++ /dev/null @@ -1,50 +0,0 @@ - -/material/glass - name = MATERIAL_GLASS - lore_text = "A brittle, transparent material made from molten silicates. It is generally not a liquid." - stack_type = /obj/item/stack/material/glass - flags = MATERIAL_BRITTLE - icon_colour = GLASS_COLOR - opacity = 0.3 - integrity = 50 - shard_type = SHARD_SHARD - tableslam_noise = 'sound/effects/Glasshit.ogg' - hardness = MATERIAL_RIGID + 10 - melting_point = T0C + 100 - weight = 14 - brute_armor = 1 - burn_armor = 2 - table_icon_base = "solid" - destruction_desc = "shatters" - window_options = list("One Direction" = 1, "Full Window" = 4, "Windoor" = 5) - hitsound = 'sound/effects/Glasshit.ogg' - dooropen_noise = 'sound/machines/windowdoor.ogg' - conductive = 0 - sale_price = 1 - value = 4 - -/material/glass/proc/is_reinforced() - return (integrity > 75) //todo - -/material/glass/is_brittle() - return ..() && !is_reinforced() - -/material/glass/phoron - name = MATERIAL_PHORON_GLASS - lore_text = "An extremely heat-resistant form of glass." - display_name = "borosilicate glass" - stack_type = /obj/item/stack/material/glass/phoronglass - flags = MATERIAL_BRITTLE - hardness = MATERIAL_HARD - integrity = 70 - brute_armor = 2 - burn_armor = 5 - melting_point = T0C + 4000 - icon_colour = GLASS_COLOR_PHORON - stack_origin_tech = list(TECH_MATERIAL = 4) - wire_product = null - construction_difficulty = MATERIAL_HARD_DIY - alloy_product = TRUE - alloy_materials = list(MATERIAL_SAND = 2500, MATERIAL_PLATINUM = 1250) - sale_price = 2 - value = 40 \ No newline at end of file diff --git a/code/modules/materials/definitions/materials_metal.dm b/code/modules/materials/definitions/materials_metal.dm deleted file mode 100644 index dbfdb580c7e0e..0000000000000 --- a/code/modules/materials/definitions/materials_metal.dm +++ /dev/null @@ -1,405 +0,0 @@ -/material/uranium - name = MATERIAL_URANIUM - lore_text = "A highly radioactive metal. Commonly used as fuel in fission reactors." - mechanics_text = "Uranium ingots are used as fuel in some forms of portable generator." - wall_name = "bulkhead" - stack_type = /obj/item/stack/material/uranium - radioactivity = 12 - icon_base = "stone" - door_icon_base = "stone" - table_icon_base = "stone" - icon_reinf = "reinf_stone" - icon_colour = "#007a00" - weight = 22 - stack_origin_tech = list(TECH_MATERIAL = 5) - chem_products = list( - /datum/reagent/uranium = 20 - ) - construction_difficulty = MATERIAL_HARD_DIY - sale_price = 2 - value = 100 - -/material/gold - name = MATERIAL_GOLD - lore_text = "A heavy, soft, ductile metal. Once considered valuable enough to back entire currencies, now predominantly used in corrosion-resistant electronics." - wall_name = "bulkhead" - stack_type = /obj/item/stack/material/gold - icon_colour = COLOR_GOLD - weight = 25 - hardness = MATERIAL_FLEXIBLE + 5 - integrity = 100 - stack_origin_tech = list(TECH_MATERIAL = 4) - sheet_singular_name = "ingot" - sheet_plural_name = "ingots" - chem_products = list( - /datum/reagent/gold = 20 - ) - construction_difficulty = MATERIAL_HARD_DIY - ore_smelts_to = MATERIAL_GOLD - ore_result_amount = 5 - ore_name = "native gold" - ore_spread_chance = 10 - ore_scan_icon = "mineral_uncommon" - xarch_ages = list( - "thousand" = 999, - "million" = 999, - "billion" = 4, - "billion_lower" = 3 - ) - ore_icon_overlay = "nugget" - sale_price = 3 - value = 40 - -/material/gold/bronze //placeholder for ashtrays - name = MATERIAL_BRONZE - lore_text = "An alloy of copper and tin." - icon_colour = "#edd12f" - construction_difficulty = MATERIAL_HARD_DIY - ore_smelts_to = null - ore_compresses_to = null - sale_price = null - -/material/copper - name = MATERIAL_COPPER - wall_name = "bulkhead" - icon_colour = "#b87333" - weight = 15 - hardness = MATERIAL_FLEXIBLE + 10 - stack_origin_tech = list(TECH_MATERIAL = 2) - sheet_singular_name = "ingot" - sheet_plural_name = "ingots" - chem_products = list( - /datum/reagent/copper = 12, - /datum/reagent/silver = 8 - ) - construction_difficulty = MATERIAL_HARD_DIY - ore_smelts_to = MATERIAL_COPPER - ore_result_amount = 5 - ore_spread_chance = 10 - ore_name = "tetrahedrite" - ore_scan_icon = "mineral_common" - ore_icon_overlay = "shiny" - sale_price = 1 - -/material/silver - name = MATERIAL_SILVER - lore_text = "A soft, white, lustrous transition metal. Has many and varied industrial uses in electronics, solar panels and mirrors." - wall_name = "bulkhead" - stack_type = /obj/item/stack/material/silver - icon_colour = "#d1e6e3" - weight = 22 - hardness = MATERIAL_FLEXIBLE + 10 - stack_origin_tech = list(TECH_MATERIAL = 3) - sheet_singular_name = "ingot" - sheet_plural_name = "ingots" - chem_products = list( - /datum/reagent/silver = 20 - ) - construction_difficulty = MATERIAL_HARD_DIY - ore_smelts_to = MATERIAL_SILVER - ore_result_amount = 5 - ore_spread_chance = 10 - ore_name = "native silver" - ore_scan_icon = "mineral_uncommon" - ore_icon_overlay = "shiny" - sale_price = 2 - value = 35 - -/material/steel - name = MATERIAL_STEEL - lore_text = "A strong, flexible alloy of iron and carbon. Probably the single most fundamentally useful and ubiquitous substance in human space." - wall_name = "bulkhead" - stack_type = /obj/item/stack/material/steel - brute_armor = 7 - icon_base = "solid" - icon_reinf = "reinf_over" - icon_colour = COLOR_STEEL - hitsound = 'sound/weapons/smash.ogg' - chem_products = list( - /datum/reagent/iron = 19.6, - /datum/reagent/carbon = 0.4 - ) - alloy_materials = list(MATERIAL_HEMATITE = 1875, MATERIAL_GRAPHITE = 1875) - alloy_product = TRUE - sale_price = 1 - ore_smelts_to = MATERIAL_STEEL - construction_difficulty = MATERIAL_NORMAL_DIY - value = 4 - -/material/steel/holographic - name = "holo" + MATERIAL_STEEL - display_name = MATERIAL_STEEL - stack_type = null - shard_type = SHARD_NONE - conductive = 0 - alloy_materials = null - alloy_product = FALSE - sale_price = null - hidden_from_codex = TRUE - value = 0 - -/material/aluminium - name = MATERIAL_ALUMINIUM - lore_text = "A low-density ductile metal with a silvery-white sheen." - wall_name = "bulkhead" - stack_type = /obj/item/stack/material/aluminium - chem_products = list( - /datum/reagent/aluminium = 20 - ) - integrity = 125 - weight = 18 - icon_base = "solid" - icon_reinf = "reinf_over" - icon_colour = "#cccdcc" - hitsound = 'sound/weapons/smash.ogg' - sale_price = 1 - -/material/aluminium/holographic - name = "holo" + MATERIAL_ALUMINIUM - display_name = MATERIAL_ALUMINIUM - stack_type = null - shard_type = SHARD_NONE - conductive = 0 - alloy_materials = null - alloy_product = FALSE - sale_price = null - hidden_from_codex = TRUE - -/material/plasteel - name = MATERIAL_PLASTEEL - lore_text = "An alloy of steel and platinum. When regular high-tensile steel isn't tough enough to get the job done, the smart consumer turns to frankly absurd alloys of steel and platinum." - wall_name = "bulkhead" - stack_type = /obj/item/stack/material/plasteel - integrity = 400 - melting_point = 6000 - icon_base = "solid" - icon_reinf = "reinf_over" - icon_colour = "#a8a9b2" - explosion_resistance = 25 - brute_armor = 8 - burn_armor = 10 - hardness = MATERIAL_VERY_HARD - weight = 23 - stack_origin_tech = list(TECH_MATERIAL = 2) - hitsound = 'sound/weapons/smash.ogg' - construction_difficulty = MATERIAL_HARD_DIY - alloy_materials = list(MATERIAL_STEEL = 2500, MATERIAL_PLATINUM = 1250) - alloy_product = TRUE - sale_price = 2 - ore_smelts_to = MATERIAL_PLASTEEL - value = 12 - -/material/plasteel/titanium - name = MATERIAL_TITANIUM - lore_text = "A light, strong, corrosion-resistant metal. Perfect for cladding high-velocity ballistic supply pods." - brute_armor = 10 - burn_armor = 8 - integrity = 200 - melting_point = 3000 - weight = 18 - stack_type = /obj/item/stack/material/titanium - icon_base = "metal" - door_icon_base = "metal" - icon_colour = "#d1e6e3" - icon_reinf = "reinf_metal" - construction_difficulty = MATERIAL_VERY_HARD_DIY - alloy_materials = null - alloy_product = FALSE - value = 30 - -/material/plasteel/ocp - name = MATERIAL_OSMIUM_CARBIDE_PLASTEEL - stack_type = /obj/item/stack/material/ocp - integrity = 200 - melting_point = 12000 - icon_base = "solid" - icon_reinf = "reinf_over" - icon_colour = "#9bc6f2" - brute_armor = 4 - burn_armor = 20 - weight = 27 - stack_origin_tech = list(TECH_MATERIAL = 3) - alloy_materials = list(MATERIAL_PLASTEEL = 7500, MATERIAL_OSMIUM = 3750) - construction_difficulty = MATERIAL_VERY_HARD_DIY - alloy_product = TRUE - sale_price = 3 - -/material/osmium - name = MATERIAL_OSMIUM - lore_text = "An extremely hard form of platinum." - wall_name = "bulkhead" - stack_type = /obj/item/stack/material/osmium - icon_colour = "#9999ff" - stack_origin_tech = list(TECH_MATERIAL = 5) - sheet_singular_name = "ingot" - sheet_plural_name = "ingots" - construction_difficulty = MATERIAL_VERY_HARD_DIY - sale_price = 3 - ore_smelts_to = MATERIAL_OSMIUM - value = 30 - -/material/tritium - name = MATERIAL_TRITIUM - lore_text = "A radioactive isotope of hydrogen. Useful as a fusion reactor fuel material." - mechanics_text = "Tritium is useable as a fuel in some forms of portable generator. It can also be converted into a fuel rod suitable for a R-UST fusion plant injector by clicking a stack on a fuel compressor. It fuses hotter than deuterium but is correspondingly more unstable." - wall_name = "bulkhead" - stack_type = /obj/item/stack/material/tritium - icon_colour = "#777777" - stack_origin_tech = list(TECH_MATERIAL = 5) - sheet_singular_name = "ingot" - sheet_plural_name = "ingots" - is_fusion_fuel = 1 - construction_difficulty = MATERIAL_HARD_DIY - value = 300 - -/material/deuterium - name = MATERIAL_DEUTERIUM - lore_text = "One of the two stable isotopes of hydrogen; also known as heavy hydrogen. Useful as a chemically synthesised fusion reactor fuel material." - mechanics_text = "Deuterium can be converted into a fuel rod suitable for a R-UST fusion plant injector by clicking a stack on a fuel compressor. It is the most 'basic' fusion fuel." - wall_name = "bulkhead" - stack_type = /obj/item/stack/material/deuterium - icon_colour = "#999999" - stack_origin_tech = list(TECH_MATERIAL = 3) - sheet_singular_name = "ingot" - sheet_plural_name = "ingots" - is_fusion_fuel = 1 - construction_difficulty = MATERIAL_HARD_DIY - -/material/mhydrogen - name = MATERIAL_HYDROGEN - lore_text = "When hydrogen is exposed to extremely high pressures and temperatures, such as at the core of gas giants like Jupiter, it can take on metallic properties and - more importantly - acts as a room temperature superconductor. Achieving solid metallic hydrogen at room temperature, though, has proven to be rather tricky." - display_name = "metallic hydrogen" - wall_name = "bulkhead" - stack_type = /obj/item/stack/material/mhydrogen - icon_colour = "#e6c5de" - stack_origin_tech = list(TECH_MATERIAL = 6, TECH_POWER = 6, TECH_MAGNET = 5) - is_fusion_fuel = 1 - chem_products = list( - /datum/reagent/hydrazine = 20 - ) - construction_difficulty = MATERIAL_HARD_DIY - ore_smelts_to = MATERIAL_TRITIUM - ore_compresses_to = MATERIAL_HYDROGEN - ore_name = "raw hydrogen" - ore_scan_icon = "mineral_rare" - ore_icon_overlay = "gems" - sale_price = 5 - value = 100 - -/material/platinum - name = MATERIAL_PLATINUM - lore_text = "A very dense, unreactive, precious metal. Has many industrial uses, particularly as a catalyst." - wall_name = "bulkhead" - stack_type = /obj/item/stack/material/platinum - icon_colour = "#deddff" - weight = 27 - stack_origin_tech = list(TECH_MATERIAL = 2) - sheet_singular_name = "ingot" - sheet_plural_name = "ingots" - construction_difficulty = MATERIAL_HARD_DIY - ore_smelts_to = MATERIAL_PLATINUM - ore_compresses_to = MATERIAL_OSMIUM - ore_result_amount = 5 - ore_spread_chance = 10 - ore_name = "raw platinum" - ore_scan_icon = "mineral_rare" - ore_icon_overlay = "shiny" - sale_price = 5 - value = 80 - -/material/iron - name = MATERIAL_IRON - lore_text = "A ubiquitous, very common metal. The epitaph of stars and the primary ingredient in Earth's core." - wall_name = "bulkhead" - stack_type = /obj/item/stack/material/iron - icon_colour = "#5c5454" - weight = 22 - sheet_singular_name = "ingot" - sheet_plural_name = "ingots" - hitsound = 'sound/weapons/smash.ogg' - construction_difficulty = MATERIAL_NORMAL_DIY - chem_products = list( - /datum/reagent/iron = 20 - ) - sale_price = 1 - value = 5 - -// Adminspawn only, do not let anyone get this. -/material/voxalloy - name = MATERIAL_VOX - display_name = "durable alloy" - wall_name = "bulkhead" - stack_type = null - icon_colour = "#6c7364" - integrity = 1200 - melting_point = 6000 // Hull plating. - explosion_resistance = 200 // Hull plating. - hardness = 500 - weight = 500 - construction_difficulty = MATERIAL_HARD_DIY - hidden_from_codex = TRUE - value = 100 - -// Likewise. -/material/voxalloy/elevatorium - name = MATERIAL_ELEVATORIUM - display_name = "elevator panelling" - wall_name = "bulkhead" - icon_colour = "#666666" - construction_difficulty = MATERIAL_HARD_DIY - hidden_from_codex = TRUE - -/material/aliumium - name = MATERIAL_ALIENALLOY - display_name = "alien alloy" - wall_name = "bulkhead" - stack_type = null - icon_base = "jaggy" - door_icon_base = "metal" - icon_reinf = "reinf_metal" - hitsound = 'sound/weapons/smash.ogg' - sheet_singular_name = "chunk" - sheet_plural_name = "chunks" - stack_type = /obj/item/stack/material/aliumium - construction_difficulty = MATERIAL_VERY_HARD_DIY - hidden_from_codex = TRUE - -/material/aliumium/New() - icon_base = "metal" - icon_colour = rgb(rand(10,150),rand(10,150),rand(10,150)) - explosion_resistance = rand(25,40) - brute_armor = rand(10,20) - burn_armor = rand(10,20) - hardness = rand(15,100) - integrity = rand(200,400) - melting_point = rand(400,10000) - ..() - -/material/aliumium/place_dismantled_girder(var/turf/target, var/material/reinf_material) - return - -/material/hematite - name = MATERIAL_HEMATITE - wall_name = "bulkhead" - stack_type = null - icon_colour = "#aa6666" - ore_smelts_to = MATERIAL_IRON - ore_result_amount = 5 - ore_spread_chance = 25 - ore_scan_icon = "mineral_common" - ore_name = "hematite" - ore_icon_overlay = "lump" - sale_price = 1 - -/material/rutile - name = MATERIAL_RUTILE - wall_name = "bulkhead" - stack_type = null - icon_colour = "#d8ad97" - ore_smelts_to = MATERIAL_TITANIUM - ore_result_amount = 5 - ore_spread_chance = 15 - ore_scan_icon = "mineral_uncommon" - ore_name = "rutile" - ore_icon_overlay = "lump" - sale_price = 2 diff --git a/code/modules/materials/definitions/materials_mineral.dm b/code/modules/materials/definitions/materials_mineral.dm deleted file mode 100644 index e2b59a45f936d..0000000000000 --- a/code/modules/materials/definitions/materials_mineral.dm +++ /dev/null @@ -1,274 +0,0 @@ -/material/pitchblende - name = MATERIAL_PITCHBLENDE - ore_compresses_to = MATERIAL_PITCHBLENDE - icon_colour = "#917d1a" - ore_smelts_to = MATERIAL_URANIUM - ore_result_amount = 5 - ore_spread_chance = 10 - ore_name = "pitchblende" - ore_scan_icon = "mineral_uncommon" - stack_origin_tech = list(TECH_MATERIAL = 5) - xarch_ages = list( - "thousand" = 999, - "million" = 704 - ) - xarch_source_mineral = "potassium" - ore_icon_overlay = "nugget" - chem_products = list( - /datum/reagent/radium = 10, - /datum/reagent/uranium = 10 - ) - sheet_singular_name = "brick" - sheet_plural_name = "bricks" - sale_price = 2 - -/material/graphite - name = MATERIAL_GRAPHITE - ore_compresses_to = MATERIAL_GRAPHITE - icon_colour = "#444444" - ore_smelts_to = MATERIAL_PLASTIC - ore_name = "graphite" - ore_smelts_to = MATERIAL_PLASTIC - ore_result_amount = 5 - ore_spread_chance = 25 - ore_scan_icon = "mineral_common" - ore_icon_overlay = "lump" - chem_products = list( - /datum/reagent/carbon = 15, - /datum/reagent/acetone = 5 - ) - sale_price = 1 - -/material/quartz - name = MATERIAL_QUARTZ - ore_compresses_to = MATERIAL_QUARTZ - ore_name = "quartz" - opacity = 0.5 - ore_result_amount = 10 - ore_spread_chance = 10 - ore_scan_icon = "mineral_common" - ore_icon_overlay = "lump" - icon_colour = "#effffe" - chem_products = list( - /datum/reagent/silicon = 20 - ) - door_icon_base = "stone" - sheet_singular_name = "brick" - sheet_plural_name = "bricks" - icon_base = "stone" - table_icon_base = "stone" - icon_reinf = "reinf_stone" - sale_price = 2 - -/material/pyrite - name = MATERIAL_PYRITE - ore_name = "pyrite" - ore_result_amount = 10 - ore_spread_chance = 10 - ore_scan_icon = "mineral_common" - ore_icon_overlay = "lump" - icon_colour = "#ccc9a3" - chem_products = list( - /datum/reagent/sulfur = 15, - /datum/reagent/iron = 5 - ) - door_icon_base = "stone" - sheet_singular_name = "brick" - sheet_plural_name = "bricks" - icon_base = "stone" - table_icon_base = "stone" - icon_reinf = "reinf_stone" - ore_compresses_to = MATERIAL_PYRITE - sale_price = 2 - -/material/spodumene - name = MATERIAL_SPODUMENE - ore_compresses_to = MATERIAL_SPODUMENE - ore_name = "spodumene" - ore_result_amount = 10 - ore_spread_chance = 10 - ore_scan_icon = "mineral_common" - ore_icon_overlay = "lump" - icon_colour = "#e5becb" - chem_products = list( - /datum/reagent/lithium = 20 - ) - door_icon_base = "stone" - sheet_singular_name = "brick" - sheet_plural_name = "bricks" - icon_base = "stone" - table_icon_base = "stone" - icon_reinf = "reinf_stone" - sale_price = 2 - -/material/cinnabar - name = MATERIAL_CINNABAR - ore_compresses_to = MATERIAL_CINNABAR - ore_name = "cinnabar" - ore_result_amount = 10 - ore_spread_chance = 10 - ore_scan_icon = "mineral_common" - ore_icon_overlay = "lump" - icon_colour = "#e54e4e" - chem_products = list( - /datum/reagent/mercury = 20 - ) - door_icon_base = "stone" - sheet_singular_name = "brick" - sheet_plural_name = "bricks" - icon_base = "stone" - table_icon_base = "stone" - icon_reinf = "reinf_stone" - sale_price = 2 - -/material/phosphorite - name = MATERIAL_PHOSPHORITE - ore_compresses_to = MATERIAL_PHOSPHORITE - ore_name = "phosphorite" - ore_result_amount = 10 - ore_spread_chance = 10 - ore_scan_icon = "mineral_common" - ore_icon_overlay = "lump" - icon_colour = "#acad95" - chem_products = list( - /datum/reagent/phosphorus = 20 - ) - door_icon_base = "stone" - sheet_singular_name = "brick" - sheet_plural_name = "bricks" - icon_base = "stone" - table_icon_base = "stone" - icon_reinf = "reinf_stone" - sale_price = 2 - -/material/rocksalt - name = MATERIAL_ROCK_SALT - ore_compresses_to = MATERIAL_ROCK_SALT - ore_name = "rock salt" - ore_result_amount = 10 - ore_spread_chance = 10 - ore_scan_icon = "mineral_common" - ore_icon_overlay = "lump" - icon_colour = "#d1c0bc" - chem_products = list( - /datum/reagent/sodium = 20 - ) - door_icon_base = "stone" - sheet_singular_name = "brick" - sheet_plural_name = "bricks" - icon_base = "stone" - table_icon_base = "stone" - icon_reinf = "reinf_stone" - sale_price = 2 - -/material/potash - name = MATERIAL_POTASH - ore_compresses_to = MATERIAL_POTASH - ore_name = "potash" - ore_result_amount = 10 - ore_spread_chance = 10 - ore_scan_icon = "mineral_common" - ore_icon_overlay = "lump" - icon_colour = "#b77464" - chem_products = list( - /datum/reagent/potassium = 20 - ) - door_icon_base = "stone" - sheet_singular_name = "brick" - sheet_plural_name = "bricks" - icon_base = "stone" - table_icon_base = "stone" - icon_reinf = "reinf_stone" - sale_price = 2 - -/material/bauxite - name = MATERIAL_BAUXITE - ore_name = "bauxite" - ore_result_amount = 10 - ore_spread_chance = 10 - ore_scan_icon = "mineral_common" - ore_icon_overlay = "lump" - icon_colour = "#d8ad97" - chem_products = list( - /datum/reagent/aluminium = 15 - ) - door_icon_base = "stone" - sheet_singular_name = "brick" - sheet_plural_name = "bricks" - icon_base = "stone" - table_icon_base = "stone" - icon_reinf = "reinf_stone" - ore_smelts_to = MATERIAL_ALUMINIUM - ore_compresses_to = MATERIAL_BAUXITE - sale_price = 1 - -/material/sand - name = MATERIAL_SAND - stack_type = null - icon_colour = "#e2dbb5" - ore_smelts_to = MATERIAL_GLASS - ore_compresses_to = MATERIAL_SANDSTONE - ore_name = "sand" - ore_icon_overlay = "dust" - chem_products = list( - /datum/reagent/silicon = 20 - ) - -/material/phoron - name = MATERIAL_PHORON - stack_type = /obj/item/stack/material/phoron - ignition_point = PHORON_MINIMUM_BURN_TEMPERATURE - icon_base = "stone" - table_icon_base = "stone" - icon_colour = "#e37108" - shard_type = SHARD_SHARD - hardness = MATERIAL_RIGID - stack_origin_tech = list(TECH_MATERIAL = 2, TECH_PHORON = 2) - door_icon_base = "stone" - sheet_singular_name = "crystal" - sheet_plural_name = "crystals" - is_fusion_fuel = 1 - chem_products = list( - /datum/reagent/toxin/phoron = 20 - ) - construction_difficulty = MATERIAL_HARD_DIY - ore_name = "phoron" - ore_compresses_to = MATERIAL_PHORON - ore_result_amount = 5 - ore_spread_chance = 25 - ore_scan_icon = "mineral_uncommon" - xarch_ages = list( - "thousand" = 999, - "million" = 999, - "billion" = 13, - "billion_lower" = 10 - ) - xarch_source_mineral = MATERIAL_PHORON - ore_icon_overlay = "gems" - sale_price = 5 - value = 200 - -/material/phoron/supermatter - name = MATERIAL_SUPERMATTER - lore_text = "Hypercrystalline supermatter is a subset of non-baryonic 'exotic' matter. It is found mostly in the heart of large stars, and features heavily in bluespace technology." - icon_colour = "#ffff00" - radioactivity = 20 - stack_origin_tech = list(TECH_BLUESPACE = 2, TECH_MATERIAL = 6, TECH_PHORON = 4) - stack_type = null - luminescence = 3 - ore_compresses_to = null - sale_price = null - -//Controls phoron and phoron based objects reaction to being in a turf over 200c -- Phoron's flashpoint. -/material/phoron/combustion_effect(var/turf/T, var/temperature, var/effect_multiplier) - if(isnull(ignition_point)) - return 0 - if(temperature < ignition_point) - return 0 - var/totalPhoron = 0 - for(var/turf/simulated/floor/target_tile in range(2,T)) - var/phoronToDeduce = (temperature/30) * effect_multiplier - totalPhoron += phoronToDeduce - target_tile.assume_gas(GAS_PHORON, phoronToDeduce, 200+T0C) - addtimer(CALLBACK(target_tile, /turf/proc/hotspot_expose, temperature, 400), 0) - return round(totalPhoron/100) diff --git a/code/modules/materials/definitions/materials_organic.dm b/code/modules/materials/definitions/materials_organic.dm deleted file mode 100644 index 101299e69013d..0000000000000 --- a/code/modules/materials/definitions/materials_organic.dm +++ /dev/null @@ -1,318 +0,0 @@ -/material/plastic - name = MATERIAL_PLASTIC - lore_text = "A generic polymeric material. Probably the most flexible and useful substance ever created by human science; mostly used to make disposable cutlery." - stack_type = /obj/item/stack/material/plastic - flags = MATERIAL_BRITTLE - icon_base = "solid" - door_icon_base = "plastic" - icon_reinf = "reinf_over" - icon_colour = COLOR_WHITE - hardness = MATERIAL_FLEXIBLE - weight = 5 - melting_point = T0C+371 //assuming heat resistant plastic - stack_origin_tech = list(TECH_MATERIAL = 3) - conductive = 0 - construction_difficulty = MATERIAL_NORMAL_DIY - chem_products = list( - /datum/reagent/toxin/plasticide = 20 - ) - sale_price = 1 - dooropen_noise = 'sound/effects/doorcreaky.ogg' - -/material/plastic/holographic - name = "holo" + MATERIAL_PLASTIC - display_name = MATERIAL_PLASTIC - stack_type = null - shard_type = SHARD_NONE - sale_price = null - hidden_from_codex = TRUE - -/material/cardboard - name = MATERIAL_CARDBOARD - lore_text = "What with the difficulties presented by growing plants in orbit, a stock of cardboard in space is probably more valuable than gold." - stack_type = /obj/item/stack/material/cardboard - flags = MATERIAL_BRITTLE - integrity = 10 - icon_base = "solid" - icon_reinf = "reinf_over" - icon_colour = "#aaaaaa" - hardness = MATERIAL_SOFT - brute_armor = 1 - weight = 1 - ignition_point = T0C+232 //"the temperature at which book-paper catches fire, and burns." close enough - melting_point = T0C+232 //temperature at which cardboard walls would be destroyed - stack_origin_tech = list(TECH_MATERIAL = 1) - door_icon_base = "wood" - destruction_desc = "crumples" - conductive = 0 - value = 0 - -/material/cloth //todo - name = MATERIAL_CLOTH - display_name ="cotton" - use_name = "cotton" - icon_colour = "#ffffff" - stack_origin_tech = list(TECH_MATERIAL = 2) - door_icon_base = "wood" - ignition_point = T0C+232 - melting_point = T0C+300 - flags = MATERIAL_PADDING - brute_armor = 1 - conductive = 0 - stack_type = null - hidden_from_codex = TRUE - construction_difficulty = MATERIAL_NORMAL_DIY - -/material/cloth/carpet - name = "carpet" - display_name = "red" - use_name = "red upholstery" - icon_colour = "#9d2300" - sheet_singular_name = "tile" - sheet_plural_name = "tiles" - -/material/cloth/yellow - name = "yellow" - display_name ="yellow" - use_name = "yellow cloth" - icon_colour = "#ffbf00" - -/material/cloth/teal - name = "teal" - display_name = "teal" - use_name = "teal cloth" - icon_colour = "#00e1ff" - -/material/cloth/black - name = "black" - display_name = "black" - use_name = "black cloth" - icon_colour = "#505050" - -/material/cloth/green - name = "green" - display_name = "green" - use_name = "green cloth" - icon_colour = "#b7f27d" - -/material/cloth/puple - name = "purple" - display_name = "purple" - use_name = "purple cloth" - icon_colour = "#9933ff" - -/material/cloth/blue - name = "blue" - display_name = "blue" - use_name = "blue cloth" - icon_colour = "#46698c" - -/material/cloth/beige - name = "beige" - display_name = "beige" - use_name = "beige cloth" - icon_colour = "#ceb689" - -/material/cloth/lime - name = "lime" - display_name = "lime" - use_name = "lime cloth" - icon_colour = "#62e36c" - -/material/carpet - name = MATERIAL_CARPET - display_name = "red" - use_name = "red upholstery" - icon_colour = "#9d2300" - flags = MATERIAL_PADDING - ignition_point = T0C+232 - melting_point = T0C+300 - sheet_singular_name = "tile" - sheet_plural_name = "tiles" - conductive = 0 - stack_type = null - construction_difficulty = MATERIAL_NORMAL_DIY - -/material/skin - name = MATERIAL_SKIN_GENERIC - stack_type = /obj/item/stack/material/generic/skin - icon_colour = "#9e8c72" - flags = MATERIAL_PADDING - ignition_point = T0C+300 - melting_point = T0C+300 - conductive = 0 - hidden_from_codex = TRUE - construction_difficulty = MATERIAL_NORMAL_DIY - value = 1 - integrity = 50 - hardness = MATERIAL_SOFT - weight = 5 - explosion_resistance = 1 - var/tans_to = MATERIAL_LEATHER_GENERIC - -/material/skin/lizard - name = MATERIAL_SKIN_LIZARD - icon_colour = "#626952" - tans_to = MATERIAL_LEATHER_LIZARD - hardness = MATERIAL_FLEXIBLE - weight = 10 - -/material/skin/insect - name = MATERIAL_SKIN_CHITIN - icon_colour = "#7a726d" - tans_to = MATERIAL_LEATHER_CHITIN - integrity = 75 - hardness = MATERIAL_RIGID - weight = 15 - brute_armor = 2 - -/material/skin/fur - name = MATERIAL_SKIN_FUR - icon_colour = "#7a726d" - tans_to = MATERIAL_LEATHER_FUR - -/material/skin/fur/gray - name = MATERIAL_SKIN_FUR_GRAY - -/material/skin/fur/white - name = MATERIAL_SKIN_FUR_WHITE - -/material/skin/fur/orange - name = MATERIAL_SKIN_FUR_ORANGE - icon_colour = COLOR_ORANGE - -/material/skin/fur/black - name = MATERIAL_SKIN_FUR_BLACK - icon_colour = COLOR_GRAY20 - -/material/skin/fur/heavy - name = MATERIAL_SKIN_FUR_HEAVY - icon_colour = COLOR_GUNMETAL - -/material/skin/goat - name = MATERIAL_SKIN_GOATHIDE - icon_colour = COLOR_SILVER - -/material/skin/cow - name = MATERIAL_SKIN_COWHIDE - icon_colour = COLOR_GRAY40 - -/material/skin/shark - name = MATERIAL_SKIN_SHARK - icon_colour = COLOR_PURPLE_GRAY - -/material/skin/fish - name = MATERIAL_SKIN_FISH - icon_colour = COLOR_BOTTLE_GREEN - -/material/skin/fish/purple - name = MATERIAL_SKIN_FISH_PURPLE - icon_colour = COLOR_PALE_PURPLE_GRAY - -/material/skin/feathers - name = MATERIAL_SKIN_FEATHERS - icon_colour = COLOR_SILVER - -/material/skin/feathers/purple - name = MATERIAL_SKIN_FEATHERS_PURPLE - icon_colour = COLOR_PALE_PURPLE_GRAY - -/material/skin/feathers/blue - name = MATERIAL_SKIN_FEATHERS_BLUE - icon_colour = COLOR_SKY_BLUE - -/material/skin/feathers/green - name = MATERIAL_SKIN_FEATHERS_GREEN - icon_colour = COLOR_BOTTLE_GREEN - -/material/skin/feathers/brown - name = MATERIAL_SKIN_FEATHERS_BROWN - icon_colour = COLOR_BEASTY_BROWN - -/material/skin/feathers/red - name = MATERIAL_SKIN_FEATHERS_RED - icon_colour = COLOR_RED - -/material/skin/feathers/black - name = MATERIAL_SKIN_FEATHERS_BLACK - icon_colour = COLOR_GRAY15 - -/material/bone - name = MATERIAL_BONE_GENERIC - sheet_singular_name = "length" - sheet_plural_name = "lengths" - icon_colour = "#f0edc7" - stack_type = /obj/item/stack/material/generic/bone - ignition_point = T0C+1100 - melting_point = T0C+1800 - conductive = 0 - hidden_from_codex = TRUE - construction_difficulty = MATERIAL_NORMAL_DIY - hitsound = 'sound/weapons/smash.ogg' - integrity = 75 - hardness = MATERIAL_RIGID - weight = 18 - value = 1 - -/material/bone/fish - name = MATERIAL_BONE_FISH - hardness = MATERIAL_FLEXIBLE - weight = 13 - -/material/bone/cartilage - name = MATERIAL_BONE_CARTILAGE - hardness = 0 - weight = 10 - -/material/leather - name = MATERIAL_LEATHER_GENERIC - icon_colour = "#5c4831" - stack_origin_tech = list(TECH_MATERIAL = 2) - flags = MATERIAL_PADDING - ignition_point = T0C+300 - melting_point = T0C+300 - conductive = 0 - stack_type = /obj/item/stack/material/generic/skin - hidden_from_codex = TRUE - construction_difficulty = MATERIAL_NORMAL_DIY - value = 3 - integrity = 50 - hardness = MATERIAL_FLEXIBLE - weight = 10 - -/material/leather/lizard - name = MATERIAL_LEATHER_LIZARD - integrity = 75 - hardness = MATERIAL_RIGID - weight = 15 - -/material/leather/fur - name = MATERIAL_LEATHER_FUR - -/material/leather/chitin - name = MATERIAL_LEATHER_CHITIN - integrity = 100 - hardness = MATERIAL_HARD - weight = 18 - brute_armor = 2 - -/material/growth - name = MATERIAL_GROWTH - display_name = "organic material" - icon_base = "cult" - door_icon_base = "cult" - table_icon_base = "cult" - icon_reinf = "reinf_cult" - icon_colour = "#281744" - hardness = 80 - brute_armor = 4 - burn_armor = 3 - stack_type = null - conductive = 0 - construction_difficulty = 10 - hidden_from_codex = TRUE - -/material/growth/place_dismantled_girder(var/turf/target) - for(var/i = 0; i < 4; i++) - var/obj/item/reagent_containers/food/snacks/meat/M = new(target) - M.reagents.add_reagent(/datum/reagent/toxin/fertilizer, 5) \ No newline at end of file diff --git a/code/modules/materials/definitions/materials_other.dm b/code/modules/materials/definitions/materials_other.dm deleted file mode 100644 index 41896d289211a..0000000000000 --- a/code/modules/materials/definitions/materials_other.dm +++ /dev/null @@ -1,29 +0,0 @@ -/material/waste - name = MATERIAL_WASTE - stack_type = null - icon_colour = "#2e3a07" - ore_name = "slag" - ore_desc = "Someone messed up..." - ore_icon_overlay = "lump" - hidden_from_codex = TRUE - -/material/cult - name = MATERIAL_CULT - display_name = "disturbing stone" - icon_base = "cult" - icon_colour = "#402821" - icon_reinf = "reinf_cult" - shard_type = SHARD_STONE_PIECE - sheet_singular_name = "brick" - sheet_plural_name = "bricks" - conductive = 0 - construction_difficulty = MATERIAL_NORMAL_DIY - hidden_from_codex = TRUE - -/material/cult/place_dismantled_girder(var/turf/target) - new /obj/structure/girder/cult(target) - -/material/cult/reinf - name = MATERIAL_REINFORCED_CULT - display_name = "runic inscriptions" - \ No newline at end of file diff --git a/code/modules/materials/definitions/materials_stone.dm b/code/modules/materials/definitions/materials_stone.dm deleted file mode 100644 index b377ce0c7e5c6..0000000000000 --- a/code/modules/materials/definitions/materials_stone.dm +++ /dev/null @@ -1,88 +0,0 @@ -/material/diamond - name = MATERIAL_DIAMOND - lore_text = "An extremely hard allotrope of carbon. Valued for its use in industrial tools." - stack_type = /obj/item/stack/material/diamond - flags = MATERIAL_UNMELTABLE - cut_delay = 60 - icon_colour = COLOR_DIAMOND - opacity = 0.4 - shard_type = SHARD_SHARD - tableslam_noise = 'sound/effects/Glasshit.ogg' - hardness = MATERIAL_VERY_HARD + 20 - brute_armor = 10 - burn_armor = 50 // Diamond walls are immune to fire, therefore it makes sense for them to be almost undamageable by burn damage type. - stack_origin_tech = list(TECH_MATERIAL = 6) - conductive = 0 - construction_difficulty = MATERIAL_VERY_HARD_DIY - ore_name = "rough diamonds" - ore_compresses_to = MATERIAL_DIAMOND - ore_result_amount = 5 - ore_spread_chance = 10 - ore_scan_icon = "mineral_rare" - xarch_source_mineral = GAS_NITROGEN - ore_icon_overlay = "gems" - sale_price = 5 - sheet_singular_name = "gem" - sheet_plural_name = "gems" - value = 70 - -/material/diamond/crystal - name = MATERIAL_CRYSTAL - hardness = MATERIAL_VERY_HARD - stack_type = null - ore_compresses_to = null - sale_price = null - hidden_from_codex = TRUE - -/material/stone - name = MATERIAL_SANDSTONE - lore_text = "A clastic sedimentary rock. The cost of boosting it to orbit is almost universally much higher than the actual value of the material." - stack_type = /obj/item/stack/material/sandstone - icon_base = "stone" - table_icon_base = "stone" - icon_reinf = "reinf_stone" - icon_colour = "#d9c179" - shard_type = SHARD_STONE_PIECE - weight = 22 - hardness = MATERIAL_HARD - 5 - brute_armor = 3 - door_icon_base = "stone" - sheet_singular_name = "brick" - sheet_plural_name = "bricks" - conductive = 0 - construction_difficulty = MATERIAL_NORMAL_DIY - chem_products = list( - /datum/reagent/silicon = 20 - ) - sale_price = 1 - value = 4 - -/material/stone/marble - name = MATERIAL_MARBLE - lore_text = "A metamorphic rock largely sourced from Earth. Prized for use in extremely expensive decorative surfaces." - icon_colour = "#aaaaaa" - weight = 26 - hardness = MATERIAL_HARD - brute_armor = 3 - integrity = 201 //hack to stop kitchen benches being flippable, todo: refactor into weight system - stack_type = /obj/item/stack/material/marble - construction_difficulty = MATERIAL_HARD_DIY - chem_products = null - sale_price = 4 - value = 20 - -/material/stone/concrete - name = MATERIAL_CONCRETE - lore_text = "The most ubiquitous building material of old Earth, now in space. Consists of mineral aggregate bound with some sort of cementing solution." - stack_type = /obj/item/stack/material/generic/brick - icon_colour = COLOR_GRAY - value = 1 - var/image/texture - -/material/stone/concrete/New() - ..() - texture = image('icons/turf/wall_texture.dmi', "concrete") - texture.blend_mode = BLEND_MULTIPLY - -/material/stone/concrete/get_wall_texture() - return texture diff --git a/code/modules/materials/definitions/materials_wood.dm b/code/modules/materials/definitions/materials_wood.dm deleted file mode 100644 index d2927bee5a318..0000000000000 --- a/code/modules/materials/definitions/materials_wood.dm +++ /dev/null @@ -1,123 +0,0 @@ -/material/wood - name = MATERIAL_WOOD - lore_text = "A fibrous structural material harvested from an indeterminable plant. Don't get a splinter." - adjective_name = "wooden" - stack_type = /obj/item/stack/material/wood - icon_colour = WOOD_COLOR_GENERIC - integrity = 75 - icon_base = "wood" - table_icon_base = "wood" - explosion_resistance = 2 - shard_type = SHARD_SPLINTER - shard_can_repair = 0 // you can't weld splinters back into planks - hardness = MATERIAL_FLEXIBLE + 10 - brute_armor = 1 - weight = 18 - melting_point = T0C+300 //okay, not melting in this case, but hot enough to destroy wood - ignition_point = T0C+288 - stack_origin_tech = list(TECH_MATERIAL = 1, TECH_BIO = 1) - dooropen_noise = 'sound/effects/doorcreaky.ogg' - door_icon_base = "wood" - destruction_desc = "splinters" - sheet_singular_name = "plank" - sheet_plural_name = "planks" - hitsound = 'sound/effects/woodhit.ogg' - conductive = 0 - construction_difficulty = MATERIAL_NORMAL_DIY - chem_products = list( - /datum/reagent/carbon = 10, - /datum/reagent/water = 5 - ) - sale_price = 1 - value = 3 - -/material/wood/holographic - name = "holo" + MATERIAL_WOOD - icon_colour = WOOD_COLOR_CHOCOLATE //the very concept of wood should be brown - display_name = "wood" - stack_type = null - shard_type = SHARD_NONE - sale_price = 0 - value = 0 - hidden_from_codex = TRUE - -/material/wood/mahogany - name = MATERIAL_MAHOGANY - lore_text = "Mahogany is prized for its beautiful grain and rich colour, and as such is typically used for fine furniture and cabinetry." - adjective_name = MATERIAL_MAHOGANY - icon_colour = WOOD_COLOR_RICH - construction_difficulty = MATERIAL_HARD_DIY - sale_price = 3 - value = 45 - -/material/wood/maple - name = MATERIAL_MAPLE - lore_text = "Owing to its fast growth and ease of working, silver maple is a popular wood for flooring and furniture." - adjective_name = MATERIAL_MAPLE - icon_colour = WOOD_COLOR_PALE - -/material/wood/ebony - name = MATERIAL_EBONY - lore_text = "Ebony is the name for a group of dark coloured, extremely dense, and fine grained hardwoods. \ - Despite gene modification to produce larger source trees and ample land to plant them on, \ - genuine ebony remains a luxury for the very wealthy thanks to the price fixing efforts of intergalactic luxuries cartels. \ - Most people will only ever touch ebony in small items, such as chess pieces, or the accent pieces of a fine musical instrument." - adjective_name = MATERIAL_EBONY - icon_colour = WOOD_COLOR_BLACK - weight = 22 - integrity = 100 - construction_difficulty = MATERIAL_VERY_HARD_DIY - sale_price = 6 - value = 85 - -/material/wood/walnut - name = MATERIAL_WALNUT - lore_text = "Walnut is a dense hardwood that polishes to a very fine finish. \ - Walnut is especially favoured for construction of figurines (where it contrasts with lighter coloured woods) and tables. \ - The ultimate aspiration of many professionals is an office with a vintage walnut desk, the bigger and heavier the better." - adjective_name = MATERIAL_WALNUT - icon_colour = WOOD_COLOR_CHOCOLATE - weight = 20 - construction_difficulty = MATERIAL_HARD_DIY - sale_price = 2 - value = 21 - -/material/wood/bamboo - name = MATERIAL_BAMBOO - lore_text = "Bamboo is a fast-growing grass which can be used similar to wood after processing. Due to its swift growth \ - and high strength, various species of bamboo area common building materials in developing societies." - adjective_name = MATERIAL_BAMBOO - icon_colour = WOOD_COLOR_PALE2 - weight = 16 - hardness = MATERIAL_RIGID - -/material/wood/yew - name = MATERIAL_YEW - lore_text = "Although favoured in days past for the construction of bows, yew has a multitude of uses, including medicine. The yew \ - tree can live for nearly a thousand years thanks to its natural disease resistance." - adjective_name = MATERIAL_YEW - icon_colour = WOOD_COLOR_YELLOW - chem_products = list( - /datum/reagent/carbon = 10, - /datum/reagent/water = 5, - /datum/reagent/toxin/taxine = 0.05 - ) - -/material/wood/vox - name = MATERIAL_VOXRES - ignition_point = T0C+300 - melting_point = T0C+300 - conductive = 0 - stack_type = /obj/item/stack/material/wood/vox - icon_colour = "#3a4e1b" - chem_products = list( - /datum/reagent/resinpulp = 20 - ) - hidden_from_codex = TRUE - sheet_singular_name = "slab" - sheet_plural_name = "slabs" - construction_difficulty = MATERIAL_NORMAL_DIY - integrity = 60 - hardness = MATERIAL_FLEXIBLE - weight = 12 - brute_armor = 1 \ No newline at end of file diff --git a/code/modules/materials/material_recipes.dm b/code/modules/materials/material_recipes.dm deleted file mode 100644 index 5c0fa2542d535..0000000000000 --- a/code/modules/materials/material_recipes.dm +++ /dev/null @@ -1,179 +0,0 @@ -/material/proc/get_recipes(var/reinf_mat) - var/key = reinf_mat ? reinf_mat : "base" - if(!LAZYACCESS(recipes,key)) - LAZYSET(recipes,key,generate_recipes(reinf_mat)) - return recipes[key] - -/material/proc/create_recipe_list(base_type) - . = list() - for(var/recipe_type in subtypesof(base_type)) - . += new recipe_type(src) - -/material/proc/generate_recipes(var/reinforce_material) - . = list() - - if(opacity < 0.6) - . += new/datum/stack_recipe/furniture/borderwindow(src, reinforce_material) - . += new/datum/stack_recipe/furniture/fullwindow(src, reinforce_material) - if(integrity > 75 || reinforce_material) - . += new/datum/stack_recipe/furniture/windoor(src, reinforce_material) - - if(reinforce_material) //recipes below don't support composite materials - return - - // If is_brittle() returns true, these are only good for a single strike. - . += new/datum/stack_recipe/ashtray(src) - . += new/datum/stack_recipe/ring(src) - . += new/datum/stack_recipe/clipboard(src) - . += new/datum/stack_recipe/cross(src) - - if(hardness >= MATERIAL_FLEXIBLE) - . += new/datum/stack_recipe/baseball_bat(src) - . += new/datum/stack_recipe/urn(src) - . += new/datum/stack_recipe/spoon(src) - . += new/datum/stack_recipe/coin(src) - . += new/datum/stack_recipe/furniture/door(src) - - if(integrity >= 50 && hardness >= MATERIAL_FLEXIBLE + 10) - . += new/datum/stack_recipe/furniture/barricade(src) - . += new/datum/stack_recipe/furniture/stool(src) - . += new/datum/stack_recipe/furniture/bar_stool(src) - . += new/datum/stack_recipe/furniture/bed(src) - . += new/datum/stack_recipe/furniture/pew(src) - . += new/datum/stack_recipe/furniture/pew_left(src) - . += new/datum/stack_recipe/furniture/chair(src) //NOTE: the wood material has it's own special chair recipe - . += new/datum/stack_recipe_list("padded [display_name] chairs", create_recipe_list(/datum/stack_recipe/furniture/chair/padded)) - . += new/datum/stack_recipe/lock(src) - . += new/datum/stack_recipe/railing(src) - . += new/datum/stack_recipe/rod(src) - . += new/datum/stack_recipe/furniture/wall_frame(src) - . += new/datum/stack_recipe/furniture/table_frame(src) - - if(hardness > MATERIAL_RIGID + 10) - . += new/datum/stack_recipe/fork(src) - . += new/datum/stack_recipe/knife(src) - . += new/datum/stack_recipe/bell(src) - . += new/datum/stack_recipe/blade(src) - . += new/datum/stack_recipe/drill_head(src) - -/material/steel/generate_recipes(var/reinforce_material) - . = ..() - if(reinforce_material) //recipes below don't support composite materials - return - . += new/datum/stack_recipe_list("office chairs",list( - new/datum/stack_recipe/furniture/chair/office/dark(src), - new/datum/stack_recipe/furniture/chair/office/light(src) - )) - . += new/datum/stack_recipe_list("comfy office chairs", create_recipe_list(/datum/stack_recipe/furniture/chair/office/comfy)) - . += new/datum/stack_recipe_list("comfy chairs", create_recipe_list(/datum/stack_recipe/furniture/chair/comfy)) - . += new/datum/stack_recipe_list("armchairs", create_recipe_list(/datum/stack_recipe/furniture/chair/arm)) - . += new/datum/stack_recipe/key(src) - . += new/datum/stack_recipe/furniture/table_frame(src) - . += new/datum/stack_recipe/furniture/rack(src) - . += new/datum/stack_recipe/furniture/closet(src) - . += new/datum/stack_recipe/furniture/canister(src) - . += new/datum/stack_recipe/furniture/tank(src) - . += new/datum/stack_recipe/cannon(src) - . += create_recipe_list(/datum/stack_recipe/tile/metal) - . += new/datum/stack_recipe/furniture/computerframe(src) - . += new/datum/stack_recipe/furniture/girder(src) - . += new/datum/stack_recipe/furniture/machine(src) - . += new/datum/stack_recipe/furniture/turret(src) - . += new/datum/stack_recipe_list("airlock assemblies", create_recipe_list(/datum/stack_recipe/furniture/door_assembly)) - . += new/datum/stack_recipe/grenade(src) - . += new/datum/stack_recipe/light(src) - . += new/datum/stack_recipe/light_small(src) - . += new/datum/stack_recipe/light_large(src) - . += new/datum/stack_recipe/light_switch(src) - . += new/datum/stack_recipe/light_switch/windowtint(src) - . += new/datum/stack_recipe/apc(src) - . += new/datum/stack_recipe/air_alarm(src) - . += new/datum/stack_recipe/fire_alarm(src) - . += new/datum/stack_recipe/intercom(src) - . += new/datum/stack_recipe/supermatter_alarm(src) - . += new/datum/stack_recipe_list("modular computer frames", create_recipe_list(/datum/stack_recipe/computer)) - . += new/datum/stack_recipe/furniture/coffin(src) - -/material/plasteel/generate_recipes(var/reinforce_material) - . = ..() - if(reinforce_material) //recipes below don't support composite materials - return - . += new/datum/stack_recipe/ai_core(src) - . += new/datum/stack_recipe/furniture/crate(src) - . += new/datum/stack_recipe/grip(src) - -/material/stone/generate_recipes(var/reinforce_material) - . = ..() - if(reinforce_material) //recipes below don't support composite materials - return - . += new/datum/stack_recipe/furniture/planting_bed(src) - -/material/plastic/generate_recipes(var/reinforce_material) - . = ..() - if(reinforce_material) //recipes below don't support composite materials - return - . += new/datum/stack_recipe/furniture/crate/plastic(src) - . += new/datum/stack_recipe/bag(src) - . += new/datum/stack_recipe/ivbag(src) - . += create_recipe_list(/datum/stack_recipe/cartridge) - . += create_recipe_list(/datum/stack_recipe/tile/light) - . += new/datum/stack_recipe/hazard_cone(src) - . += new/datum/stack_recipe/furniture/flaps(src) - -/material/wood/generate_recipes(var/reinforce_material) - . = ..() - if(reinforce_material) //recipes below don't support composite materials - return - . += new/datum/stack_recipe/sandal(src) - . += new/datum/stack_recipe/tile/wood(src) - . += create_recipe_list(/datum/stack_recipe/furniture/chair/wood) - . += new/datum/stack_recipe/crossbowframe(src) - . += new/datum/stack_recipe/furniture/coffin/wooden(src) - . += new/datum/stack_recipe/beehive_assembly(src) - . += new/datum/stack_recipe/beehive_frame(src) - . += new/datum/stack_recipe/furniture/bookcase(src) - . += new/datum/stack_recipe/zipgunframe(src) - . += new/datum/stack_recipe/coilgun(src) - . += new/datum/stack_recipe/stick(src) - . += new/datum/stack_recipe/noticeboard(src) - . += new/datum/stack_recipe/furniture/table_frame(src) - . += new/datum/stack_recipe/shield(src) - -/material/wood/mahogany/generate_recipes(var/reinforce_material) - . = ..() - if(reinforce_material) - return - . += new/datum/stack_recipe/tile/mahogany(src) - -/material/wood/maple/generate_recipes(var/reinforce_material) - . = ..() - if(reinforce_material) - return - . += new/datum/stack_recipe/tile/maple(src) - -/material/wood/ebony/generate_recipes(var/reinforce_material) - . = ..() - if(reinforce_material) - return - . += new/datum/stack_recipe/tile/ebony(src) - -/material/wood/walnut/generate_recipes(var/reinforce_material) - . = ..() - if(reinforce_material) - return - . += new/datum/stack_recipe/tile/walnut(src) - -/material/cardboard/generate_recipes(var/reinforce_material) - . = ..() - if(reinforce_material) //recipes below don't support composite materials - return - . += create_recipe_list(/datum/stack_recipe/box) - . += new/datum/stack_recipe/cardborg_suit(src) - . += new/datum/stack_recipe/cardborg_helmet(src) - . += new/datum/stack_recipe_list("folders", create_recipe_list(/datum/stack_recipe/folder)) - -/material/aluminium/generate_recipes(var/reinforce_material) - . = ..() - if(reinforce_material) //recipes below don't support composite materials - return - . += new/datum/stack_recipe/grenade(src) diff --git a/code/modules/materials/material_sheets.dm b/code/modules/materials/material_sheets.dm deleted file mode 100644 index 857369653ea2b..0000000000000 --- a/code/modules/materials/material_sheets.dm +++ /dev/null @@ -1,562 +0,0 @@ -// Stacked resources. They use a material datum for a lot of inherited values. -/obj/item/stack/material - force = 5.0 - throwforce = 5 - w_class = ITEM_SIZE_LARGE - throw_speed = 3 - throw_range = 3 - max_amount = 60 - randpixel = 3 - icon = 'icons/obj/materials.dmi' - - var/default_type = MATERIAL_STEEL - var/material/material - var/default_reinf_type - var/material/reinf_material - var/perunit = SHEET_MATERIAL_AMOUNT - var/material_flags = USE_MATERIAL_COLOR|USE_MATERIAL_SINGULAR_NAME|USE_MATERIAL_PLURAL_NAME - var/matter_multiplier = 1 - -/obj/item/stack/material/Initialize(mapload, var/amount, var/_material, var/_reinf_material) - . = ..() - if(_material) - default_type = _material - if(_reinf_material) - default_reinf_type = _reinf_material - material = SSmaterials.get_material_by_name(default_type) - if(!material) - return INITIALIZE_HINT_QDEL - if(default_reinf_type) - reinf_material = SSmaterials.get_material_by_name(default_reinf_type) - base_state = icon_state - - if(!stacktype) - stacktype = material.stack_type - if(islist(material.stack_origin_tech)) - origin_tech = material.stack_origin_tech.Copy() - - if(material.conductive) - obj_flags |= OBJ_FLAG_CONDUCTIBLE - else - obj_flags &= (~OBJ_FLAG_CONDUCTIBLE) - - update_strings() - update_icon() - -/obj/item/stack/material/list_recipes(mob/user, recipes_sublist) - if(!material) - return - recipes = material.get_recipes(reinf_material && reinf_material.name) - ..() - -/obj/item/stack/material/get_codex_value() - return (material && !material.hidden_from_codex) ? "[lowertext(material.display_name)] (material)" : ..() - -/obj/item/stack/material/proc/set_amount(var/_amount) - amount = max(1, min(_amount, max_amount)) - update_strings() - -/obj/item/stack/material/get_material() - return material - -/obj/item/stack/material/proc/update_strings() - // Update from material datum. - matter = material.get_matter() - for(var/mat in matter) - matter[mat] = round(matter[mat]*matter_multiplier*amount) - if(reinf_material) - var/list/rmatter = reinf_material.get_matter() - for(var/mat in rmatter) - rmatter[mat] = round(0.5*rmatter[mat]*matter_multiplier*amount) - matter[mat] += rmatter[mat] - - if(material_flags & USE_MATERIAL_SINGULAR_NAME) - singular_name = material.sheet_singular_name - - if(material_flags & USE_MATERIAL_PLURAL_NAME) - plural_name = material.sheet_plural_name - - if(amount>1) - SetName("[material.use_name] [plural_name]") - desc = "A stack of [material.use_name] [plural_name]." - gender = PLURAL - else - SetName("[material.use_name] [singular_name]") - desc = "A [singular_name] of [material.use_name]." - gender = NEUTER - if(reinf_material) - SetName("reinforced [name]") - desc = "[desc]\nIt is reinforced with the [reinf_material.use_name] lattice." - -/obj/item/stack/material/use(var/used) - . = ..() - update_strings() - return - -/obj/item/stack/material/proc/is_same(obj/item/stack/material/M) - if(!istype(M)) - return FALSE - if(matter_multiplier != M.matter_multiplier) - return FALSE - if(material.name != M.material.name) - return FALSE - if((reinf_material && reinf_material.name) != (M.reinf_material && M.reinf_material.name)) - return FALSE - return TRUE - -/obj/item/stack/material/transfer_to(obj/item/stack/material/M, var/tamount=null, var/type_verified) - if(!is_same(M)) - return 0 - var/transfer = ..(M,tamount,1) - if(!QDELETED(src)) - update_strings() - if(!QDELETED(M)) - M.update_strings() - return transfer - -/obj/item/stack/material/copy_from(var/obj/item/stack/material/other) - ..() - if(istype(other)) - material = other.material - reinf_material = other.reinf_material - update_strings() - update_icon() - -/obj/item/stack/material/attackby(var/obj/item/W, var/mob/user) - if(isCoil(W)) - material.build_wired_product(user, W, src) - return - else if(istype(W, /obj/item/stack/material)) - if(is_same(W)) - ..() - else if(!reinf_material) - material.reinforce(user, W, src) - return - else if(reinf_material && reinf_material.stack_type && isWelder(W)) - var/obj/item/weldingtool/WT = W - if(WT.isOn() && WT.get_fuel() > 2 && use(2)) - WT.remove_fuel(2, user) - to_chat(user,"You recover some [reinf_material.use_name] from the [src].") - reinf_material.place_sheet(get_turf(user), 1) - return - return ..() - -/obj/item/stack/material/on_update_icon() - if(material_flags & USE_MATERIAL_COLOR) - color = material.icon_colour - alpha = 100 + max(1, amount/25)*(material.opacity * 255) - if(max_icon_state && amount == max_amount) - icon_state = max_icon_state - else if(plural_icon_state && amount > 2) - icon_state = plural_icon_state - else - icon_state = base_state - -/obj/item/stack/material/iron - name = "iron" - icon_state = "ingot" - plural_icon_state = "ingot-mult" - max_icon_state = "ingot-max" - default_type = MATERIAL_IRON - -/obj/item/stack/material/sandstone - name = "sandstone brick" - icon_state = "brick" - plural_icon_state = "brick-mult" - max_icon_state = "brick-max" - default_type = MATERIAL_SANDSTONE - -/obj/item/stack/material/marble - name = "marble brick" - icon_state = "brick" - plural_icon_state = "brick-mult" - max_icon_state = "brick-max" - default_type = MATERIAL_MARBLE - -/obj/item/stack/material/marble/ten - amount = 10 - -/obj/item/stack/material/marble/fifty - amount = 50 - -/obj/item/stack/material/diamond - name = "diamond" - icon_state = "diamond" - plural_icon_state = "diamond-mult" - max_icon_state = "diamond-max" - default_type = MATERIAL_DIAMOND - -/obj/item/stack/material/diamond/ten - amount = 10 - -/obj/item/stack/material/uranium - name = "nuranium" - icon_state = "sheet-faery-uranium" - plural_icon_state = "sheet-faery-uranium-mult" - max_icon_state = "sheet-faery-uranium-max" - default_type = MATERIAL_URANIUM - material_flags = USE_MATERIAL_SINGULAR_NAME|USE_MATERIAL_PLURAL_NAME - -/obj/item/stack/material/uranium/ten - amount = 10 - -/obj/item/stack/material/phoron - name = "solid phoron" - icon_state = "sheet-phoron" - plural_icon_state = "sheet-phoron-mult" - max_icon_state = "sheet-phoron-max" - default_type = MATERIAL_PHORON - material_flags = USE_MATERIAL_SINGULAR_NAME|USE_MATERIAL_PLURAL_NAME - -/obj/item/stack/material/phoron/ten - amount = 10 - -/obj/item/stack/material/phoron/fifty - amount = 50 - -/obj/item/stack/material/plastic - name = "plastic" - icon_state = "sheet-plastic" - plural_icon_state = "sheet-plastic-mult" - max_icon_state = "sheet-plastic-max" - default_type = MATERIAL_PLASTIC - -/obj/item/stack/material/plastic/ten - amount = 10 - -/obj/item/stack/material/plastic/fifty - amount = 50 - -/obj/item/stack/material/gold - name = "gold" - icon_state = "ingot" - plural_icon_state = "ingot-mult" - max_icon_state = "ingot-max" - default_type = MATERIAL_GOLD - -/obj/item/stack/material/gold/ten - amount = 10 - -/obj/item/stack/material/silver - name = "silver" - icon_state = "ingot" - plural_icon_state = "ingot-mult" - max_icon_state = "ingot-max" - default_type = MATERIAL_SILVER - -/obj/item/stack/material/silver/ten - amount = 10 - -//Valuable resource, cargo can sell it. -/obj/item/stack/material/platinum - name = "platinum" - icon_state = "ingot" - plural_icon_state = "ingot-mult" - max_icon_state = "ingot-max" - default_type = MATERIAL_PLATINUM - -/obj/item/stack/material/platinum/ten - amount = 10 - -//Extremely valuable to Research. -/obj/item/stack/material/mhydrogen - name = "metallic hydrogen" - icon_state = "sheet-mythril" - default_type = MATERIAL_HYDROGEN - material_flags = USE_MATERIAL_SINGULAR_NAME|USE_MATERIAL_PLURAL_NAME - -/obj/item/stack/material/mhydrogen/ten - amount = 10 - -//Fuel for MRSPACMAN generator. -/obj/item/stack/material/tritium - name = "tritium" - icon_state = "puck" - plural_icon_state = "puck-mult" - max_icon_state = "puck-max" - default_type = MATERIAL_TRITIUM - -/obj/item/stack/material/tritium/ten - amount = 10 - -/obj/item/stack/material/tritium/fifty - amount = 50 - -/obj/item/stack/material/osmium - name = "osmium" - icon_state = "ingot" - plural_icon_state = "ingot-mult" - max_icon_state = "ingot-max" - default_type = MATERIAL_OSMIUM - -/obj/item/stack/material/osmium/ten - amount = 10 - -/obj/item/stack/material/ocp - name = "osmium-carbide plasteel" - icon_state = "sheet-reinf" - item_state = "sheet-metal" - plural_icon_state = "sheet-reinf-mult" - max_icon_state = "sheet-reinf-max" - default_type = MATERIAL_OSMIUM_CARBIDE_PLASTEEL - -/obj/item/stack/material/ocp/ten - amount = 10 - -/obj/item/stack/material/ocp/fifty - amount = 50 - -// Fusion fuel. -/obj/item/stack/material/deuterium - name = "deuterium" - icon_state = "puck" - plural_icon_state = "puck-mult" - max_icon_state = "puck-max" - default_type = MATERIAL_DEUTERIUM - -/obj/item/stack/material/deuterium/fifty - amount = 50 - -/obj/item/stack/material/steel - name = "steel" - icon_state = "sheet" - plural_icon_state = "sheet-mult" - max_icon_state = "sheet-max" - default_type = MATERIAL_STEEL - -/obj/item/stack/material/steel/ten - amount = 10 - -/obj/item/stack/material/steel/fifty - amount = 50 - -/obj/item/stack/material/aluminium - name = "aluminium" - icon_state = "sheet-sheen" - item_state = "sheet-shiny" - plural_icon_state = "sheet-sheen-mult" - max_icon_state = "sheet-sheen-max" - default_type = MATERIAL_ALUMINIUM - -/obj/item/stack/material/aluminium/ten - amount = 10 - -/obj/item/stack/material/aluminium/fifty - amount = 50 - -/obj/item/stack/material/titanium - name = "titanium" - icon_state = "sheet" - plural_icon_state = "sheet-mult" - default_type = MATERIAL_TITANIUM - -/obj/item/stack/material/titanium/ten - amount = 10 - -/obj/item/stack/material/titanium/fifty - amount = 50 - -/obj/item/stack/material/plasteel - name = "plasteel" - icon_state = "sheet-reinf" - item_state = "sheet-metal" - plural_icon_state = "sheet-reinf-mult" - max_icon_state = "sheet-reinf-max" - default_type = MATERIAL_PLASTEEL - -/obj/item/stack/material/plasteel/ten - amount = 10 - -/obj/item/stack/material/plasteel/fifty - amount = 50 - -/obj/item/stack/material/wood - name = "wooden plank" - icon_state = "sheet-wood" - plural_icon_state = "sheet-wood-mult" - max_icon_state = "sheet-wood-max" - default_type = MATERIAL_WOOD - -/obj/item/stack/material/wood/ten - amount = 10 - -/obj/item/stack/material/wood/fifty - amount = 50 - -/obj/item/stack/material/wood/mahogany - name = "mahogany plank" - default_type = MATERIAL_MAHOGANY - -/obj/item/stack/material/wood/mahogany/ten - amount = 10 - -/obj/item/stack/material/wood/mahogany/twentyfive - amount = 25 - -/obj/item/stack/material/wood/maple - name = "maple plank" - default_type = MATERIAL_MAPLE - -/obj/item/stack/material/wood/maple/ten - amount = 10 - -/obj/item/stack/material/wood/maple/twentyfive - amount = 25 - -/obj/item/stack/material/wood/ebony - name = "ebony plank" - default_type = MATERIAL_EBONY - -/obj/item/stack/material/wood/ebony/ten - amount = 10 - -/obj/item/stack/material/wood/ebony/twentyfive - amount = 25 - -/obj/item/stack/material/wood/walnut - name = "walnut plank" - default_type = MATERIAL_WALNUT - -/obj/item/stack/material/wood/walnut/ten - amount = 10 - -/obj/item/stack/material/wood/walnut/twentyfive - amount = 25 - -/obj/item/stack/material/wood/bamboo - name = "bamboo plank" - default_type = MATERIAL_BAMBOO - -/obj/item/stack/material/wood/bamboo/ten - amount = 10 - -/obj/item/stack/material/wood/bamboo/fifty - amount = 50 - -/obj/item/stack/material/wood/yew - name = "yew plank" - default_type = MATERIAL_YEW - -/obj/item/stack/material/wood/yew/ten - amount = 10 - -/obj/item/stack/material/wood/yew/twentyfive - amount = 25 - -/obj/item/stack/material/wood/vox - icon_state = "vox" - plural_icon_state = "vox-mult" - max_icon_state = "vox-max" - default_type = MATERIAL_VOXRES - -/obj/item/stack/material/cloth - name = "cloth" - icon_state = "sheet-cloth" - default_type = MATERIAL_CLOTH - -/obj/item/stack/material/cardboard - name = "cardboard" - icon_state = "sheet-card" - plural_icon_state = "sheet-card-mult" - max_icon_state = "sheet-card-max" - default_type = MATERIAL_CARDBOARD - material_flags = USE_MATERIAL_SINGULAR_NAME|USE_MATERIAL_PLURAL_NAME - -/obj/item/stack/material/cardboard/ten - amount = 10 - -/obj/item/stack/material/cardboard/fifty - amount = 50 - -/obj/item/stack/material/leather - name = "leather" - desc = "The by-product of mob grinding." - icon_state = "sheet-leather" - default_type = MATERIAL_LEATHER_GENERIC - material_flags = USE_MATERIAL_SINGULAR_NAME|USE_MATERIAL_PLURAL_NAME - -/obj/item/stack/material/glass - name = "glass" - icon_state = "sheet-clear" - plural_icon_state = "sheet-clear-mult" - max_icon_state = "sheet-clear-max" - default_type = MATERIAL_GLASS - -/obj/item/stack/material/glass/on_update_icon() - if(reinf_material) - icon_state = "sheet-glass-reinf" - base_state = icon_state - plural_icon_state = "sheet-glass-reinf-mult" - max_icon_state = "sheet-glass-reinf-max" - else - icon_state = "sheet-clear" - base_state = icon_state - plural_icon_state = "sheet-clear-mult" - max_icon_state = "sheet-clear-max" - ..() - -/obj/item/stack/material/glass/ten - amount = 10 - -/obj/item/stack/material/glass/fifty - amount = 50 - -/obj/item/stack/material/glass/reinforced - name = "reinforced glass" - icon_state = "sheet-reinf" - plural_icon_state = "sheet-reinf-mult" - max_icon_state = "sheet-reinf-max" - default_type = MATERIAL_GLASS - default_reinf_type = MATERIAL_STEEL - -/obj/item/stack/material/glass/reinforced/ten - amount = 10 - -/obj/item/stack/material/glass/reinforced/fifty - amount = 50 - -/obj/item/stack/material/glass/phoronglass - name = "borosilicate glass" - default_type = MATERIAL_PHORON_GLASS - -/obj/item/stack/material/glass/phoronrglass - name = "reinforced borosilicate glass" - default_type = MATERIAL_PHORON_GLASS - default_reinf_type = MATERIAL_STEEL - -/obj/item/stack/material/glass/phoronrglass/ten - amount = 10 - -/obj/item/stack/material/aliumium - name = "alien alloy" - icon_state = "sheet" - plural_icon_state = "sheet-mult" - max_icon_state = "sheet-max" - default_type = MATERIAL_ALIENALLOY - -/obj/item/stack/material/aliumium/ten - amount = 10 - -/obj/item/stack/material/generic - icon_state = "sheet" - plural_icon_state = "sheet-mult" - max_icon_state = "sheet-max" - -/obj/item/stack/material/generic/Initialize() - . = ..() - if(material) color = material.icon_colour - -/obj/item/stack/material/generic/skin - icon_state = "skin" - plural_icon_state = "skin-mult" - max_icon_state = "skin-max" - -/obj/item/stack/material/generic/bone - icon_state = "bone" - plural_icon_state = "bone-mult" - max_icon_state = "bone-max" - -/obj/item/stack/material/generic/brick - icon_state = "brick" - plural_icon_state = "brick-mult" - max_icon_state = "brick-max" diff --git a/code/modules/materials/material_synth.dm b/code/modules/materials/material_synth.dm deleted file mode 100644 index 26fc6526e98bb..0000000000000 --- a/code/modules/materials/material_synth.dm +++ /dev/null @@ -1,53 +0,0 @@ -// These objects are used by cyborgs to get around a lot of the limitations on stacks -// and the weird bugs that crop up when expecting borg module code to behave sanely. -/obj/item/stack/material/cyborg - uses_charge = 1 - charge_costs = list(1000) - gender = NEUTER - matter = null // Don't shove it in the autholathe. - - -/obj/item/stack/material/cyborg/New() - if(..()) - name = "[material.display_name] synthesiser" - desc = "A device that synthesises [material.display_name]." - matter = null - -/obj/item/stack/material/cyborg/plastic - icon_state = "sheet" - default_type = MATERIAL_PLASTIC - stacktype = /obj/item/stack/material/plastic - -/obj/item/stack/material/cyborg/steel - icon_state = "sheet" - default_type = MATERIAL_STEEL - stacktype = /obj/item/stack/material/steel - -/obj/item/stack/material/cyborg/plasteel - icon_state = "sheet-reinf" - default_type = MATERIAL_PLASTEEL - stacktype = /obj/item/stack/material/plasteel - -/obj/item/stack/material/cyborg/wood - icon_state = "sheet-wood" - default_type = MATERIAL_WOOD - stacktype = /obj/item/stack/material/wood - -/obj/item/stack/material/cyborg/glass - icon_state = "sheet" - default_type = MATERIAL_GLASS - material_flags = USE_MATERIAL_COLOR|USE_MATERIAL_SINGULAR_NAME|USE_MATERIAL_PLURAL_NAME - stacktype = /obj/item/stack/material/glass - -/obj/item/stack/material/cyborg/glass/reinforced - icon_state = "sheet-reinf" - default_type = MATERIAL_GLASS - default_reinf_type = MATERIAL_STEEL - charge_costs = list(500, 1000) - stacktype = /obj/item/stack/material/glass/reinforced - -/obj/item/stack/material/cyborg/aluminium - icon_state = "sheet" - default_type = MATERIAL_ALUMINIUM - material_flags = USE_MATERIAL_COLOR|USE_MATERIAL_SINGULAR_NAME|USE_MATERIAL_PLURAL_NAME - stacktype = /obj/item/stack/material/aliumium diff --git a/code/modules/materials/materials_ore.dm b/code/modules/materials/materials_ore.dm deleted file mode 100644 index 5b3e13b5e3a91..0000000000000 --- a/code/modules/materials/materials_ore.dm +++ /dev/null @@ -1,79 +0,0 @@ -/obj/item/ore - name = "ore" - icon_state = "lump" - icon = 'icons/obj/materials/ore.dmi' - randpixel = 8 - w_class = 2 - var/material/material - var/datum/geosample/geologic_data - -/obj/item/ore/get_material() - return material - -/obj/item/ore/attackby(obj/item/W as obj, mob/user as mob) - if(istype(W,/obj/item/device/core_sampler)) - var/obj/item/device/core_sampler/C = W - C.sample_item(src, user) - else - return ..() - -/obj/item/ore/New(var/newloc, var/_mat) - if(_mat) - matter = list() - matter[_mat] = SHEET_MATERIAL_AMOUNT - ..(newloc) - -/obj/item/ore/Initialize() - for(var/stuff in matter) - var/material/M = SSmaterials.get_material_by_name(stuff) - if(M) - name = M.ore_name - desc = M.ore_desc ? M.ore_desc : "A lump of ore." - material = M - color = M.icon_colour - icon_state = M.ore_icon_overlay - if(M.ore_desc) - desc = M.ore_desc - if(icon_state == "dust") - slot_flags = SLOT_HOLSTER - break - . = ..() - -// POCKET SAND! -/obj/item/ore/throw_impact(atom/hit_atom) - ..() - if(icon_state == "dust") - var/mob/living/carbon/human/H = hit_atom - if(istype(H) && H.has_eyes() && prob(85)) - to_chat(H, SPAN_WARNING("Some of \the [src] gets in your eyes!")) - H.eye_blind += 5 - H.eye_blurry += 10 - QDEL_IN(src, 1) - -// Map definitions. -/obj/item/ore/uranium/New(var/newloc) - ..(newloc, MATERIAL_PITCHBLENDE) -/obj/item/ore/iron/New(var/newloc) - ..(newloc, MATERIAL_HEMATITE) -/obj/item/ore/coal/New(var/newloc) - ..(newloc, MATERIAL_GRAPHITE) -/obj/item/ore/glass/New(var/newloc) - ..(newloc, MATERIAL_SAND) -/obj/item/ore/silver/New(var/newloc) - ..(newloc, MATERIAL_SILVER) -/obj/item/ore/gold/New(var/newloc) - ..(newloc, MATERIAL_GOLD) -/obj/item/ore/diamond/New(var/newloc) - ..(newloc, MATERIAL_DIAMOND) -/obj/item/ore/osmium/New(var/newloc) - ..(newloc, MATERIAL_PLATINUM) -/obj/item/ore/hydrogen/New(var/newloc) - ..(newloc, MATERIAL_HYDROGEN) -/obj/item/ore/slag/New(var/newloc) - ..(newloc, MATERIAL_WASTE) -/obj/item/ore/phoron/New(var/newloc) - ..(newloc, MATERIAL_PHORON) -/obj/item/ore/aluminium/New(var/newloc) - ..(newloc, MATERIAL_BAUXITE) -/obj/item/ore/rutile/New(var/newloc) - ..(newloc, MATERIAL_RUTILE) diff --git a/code/modules/materials/recipes_furniture.dm b/code/modules/materials/recipes_furniture.dm deleted file mode 100644 index 8323b29529706..0000000000000 --- a/code/modules/materials/recipes_furniture.dm +++ /dev/null @@ -1,332 +0,0 @@ - -/datum/stack_recipe/furniture - one_per_turf = 1 - on_floor = 1 - difficulty = 2 - send_material_data = 1 - time = 5 - -/datum/stack_recipe/furniture/chair - title = "chair" - result_type = /obj/structure/bed/chair - time = 10 - var/list/modifiers - -/datum/stack_recipe/furniture/chair/display_name() - return modifiers ? jointext(modifiers + ..(), " ") : ..() - -/datum/stack_recipe/furniture/chair/padded - req_amount = 2 - -#define PADDED_CHAIR(color) /datum/stack_recipe/furniture/chair/padded/##color{\ - result_type = /obj/structure/bed/chair/padded/##color;\ - modifiers = list("padded", #color)\ - } -PADDED_CHAIR(beige) -PADDED_CHAIR(black) -PADDED_CHAIR(brown) -PADDED_CHAIR(lime) -PADDED_CHAIR(teal) -PADDED_CHAIR(red) -PADDED_CHAIR(purple) -PADDED_CHAIR(green) -PADDED_CHAIR(yellow) -#undef PADDED_CHAIR - -/datum/stack_recipe/furniture/chair/office - title = "office chair" - req_amount = 5 - -/datum/stack_recipe/furniture/chair/office/display_name() - return modifiers ? jointext(modifiers + title, " ") : title // Bypass material - -/datum/stack_recipe/furniture/chair/office/light - result_type = /obj/structure/bed/chair/office/light - modifiers = list("light") - -/datum/stack_recipe/furniture/chair/office/dark - result_type = /obj/structure/bed/chair/office/dark - modifiers = list("dark") - -/datum/stack_recipe/furniture/chair/office/comfy - req_amount = 7 - -#define COMFY_OFFICE_CHAIR(color) /datum/stack_recipe/furniture/chair/office/comfy/##color{\ - result_type = /obj/structure/bed/chair/office/comfy/##color;\ - modifiers = list(#color, "comfy")\ - } -COMFY_OFFICE_CHAIR(beige) -COMFY_OFFICE_CHAIR(black) -COMFY_OFFICE_CHAIR(brown) -COMFY_OFFICE_CHAIR(lime) -COMFY_OFFICE_CHAIR(teal) -COMFY_OFFICE_CHAIR(red) -COMFY_OFFICE_CHAIR(purple) -COMFY_OFFICE_CHAIR(green) -COMFY_OFFICE_CHAIR(yellow) -#undef COMFY_OFFICE_CHAIR - -/datum/stack_recipe/furniture/chair/comfy - title = "comfy chair" - req_amount = 3 - -#define COMFY_CHAIR(color) /datum/stack_recipe/furniture/chair/comfy/##color{\ - result_type = /obj/structure/bed/chair/comfy/##color;\ - modifiers = list(#color)\ - } -COMFY_CHAIR(beige) -COMFY_CHAIR(black) -COMFY_CHAIR(brown) -COMFY_CHAIR(lime) -COMFY_CHAIR(teal) -COMFY_CHAIR(red) -COMFY_CHAIR(purple) -COMFY_CHAIR(green) -COMFY_CHAIR(yellow) -#undef COMFY_CHAIR - -/datum/stack_recipe/furniture/chair/arm - title = "armchair" - req_amount = 4 - -#define ARMCHAIR(color) /datum/stack_recipe/furniture/chair/arm/##color{\ - result_type = /obj/structure/bed/chair/armchair/##color;\ - modifiers = list(#color)\ - } -ARMCHAIR(beige) -ARMCHAIR(black) -ARMCHAIR(brown) -ARMCHAIR(lime) -ARMCHAIR(teal) -ARMCHAIR(red) -ARMCHAIR(purple) -ARMCHAIR(green) -ARMCHAIR(yellow) -#undef ARMCHAIR - -/datum/stack_recipe/furniture/chair/wood - req_amount = 3 - -/datum/stack_recipe/furniture/chair/wood/normal - result_type = /obj/structure/bed/chair/wood - -/datum/stack_recipe/furniture/chair/wood/fancy - result_type = /obj/structure/bed/chair/wood/wings - modifiers = list("fancy") - -/datum/stack_recipe/furniture/door - title = "door" - result_type = /obj/machinery/door/unpowered/simple - req_amount = 10 - time = 50 - -/datum/stack_recipe/furniture/barricade - title = "barricade" - result_type = /obj/structure/barricade - req_amount = 5 - time = 50 - -/datum/stack_recipe/furniture/stool - title = "stool" - result_type = /obj/item/stool - -/datum/stack_recipe/furniture/bar_stool - title = "bar stool" - result_type = /obj/item/stool/bar - -/datum/stack_recipe/furniture/bed - title = "bed" - result_type = /obj/structure/bed - req_amount = 2 - -/datum/stack_recipe/furniture/pew - title = "pew, right" - result_type = /obj/structure/bed/chair/pew - req_amount = 4 - -/datum/stack_recipe/furniture/pew_left - title = "pew, left" - result_type = /obj/structure/bed/chair/pew/left - req_amount = 4 - -/datum/stack_recipe/furniture/table_frame - title = "table frame" - result_type = /obj/structure/table - time = 10 - -/datum/stack_recipe/furniture/rack - title = "rack" - result_type = /obj/structure/table/rack - -/datum/stack_recipe/furniture/closet - title = "closet" - result_type = /obj/structure/closet - req_amount = 2 - time = 15 - -/datum/stack_recipe/furniture/canister - title = "canister" - result_type = /obj/machinery/portable_atmospherics/canister - req_amount = 10 - time = 10 - send_material_data = 0 - -/datum/stack_recipe/furniture/tank - title = "Pressure Tank" - result_type = /obj/item/pipe/tank - req_amount = 30 - time = 20 - send_material_data = 0 - -/datum/stack_recipe/furniture/computerframe - title = "computer frame" - result_type = /obj/machinery/constructable_frame/computerframe - req_amount = 5 - time = 25 - -/datum/stack_recipe/furniture/girder - title = "wall girders" - result_type = /obj/structure/girder - req_amount = 2 - time = 50 - -/datum/stack_recipe/furniture/wall_frame - title = "low wall frame" - result_type = /obj/structure/wall_frame - req_amount = 3 - time = 50 - -/datum/stack_recipe/furniture/machine - title = "machine frame" - result_type = /obj/machinery/constructable_frame/machine_frame - req_amount = 5 - time = 25 - send_material_data = 0 - -/datum/stack_recipe/furniture/turret - title = "turret frame" - result_type = /obj/machinery/porta_turret_construct - req_amount = 5 - time = 25 - send_material_data = 0 - -/datum/stack_recipe/furniture/door_assembly - req_amount = 4 - time = 50 - -/datum/stack_recipe/furniture/door_assembly/standard - title = "standard airlock assembly" - result_type = /obj/structure/door_assembly - -/datum/stack_recipe/furniture/door_assembly/airtight - title = "airtight hatch assembly" - result_type = /obj/structure/door_assembly/door_assembly_hatch - -/datum/stack_recipe/furniture/door_assembly/highsec - title = "high security airlock assembly" - result_type = /obj/structure/door_assembly/door_assembly_highsecurity - -/datum/stack_recipe/furniture/door_assembly/ext - title = "exterior airlock assembly" - result_type = /obj/structure/door_assembly/door_assembly_ext - -/datum/stack_recipe/furniture/door_assembly/firedoor - title = "emergency shutter" - result_type = /obj/structure/firedoor_assembly - -/datum/stack_recipe/furniture/door_assembly/multi_tile - title = "multi-tile airlock assembly" - result_type = /obj/structure/door_assembly/multi_tile - -/datum/stack_recipe/furniture/crate - title = "crate" - result_type = /obj/structure/closet/crate - req_amount = 10 - time = 50 - -/datum/stack_recipe/furniture/crate/plastic - result_type = /obj/structure/closet/crate/plastic - -/datum/stack_recipe/furniture/flaps - title = "flaps" - result_type = /obj/structure/plasticflaps - req_amount = 30 - time = 50 - -/datum/stack_recipe/furniture/coffin - title = "coffin" - result_type = /obj/structure/closet/coffin - req_amount = 5 - time = 15 - -/datum/stack_recipe/furniture/coffin/wooden - title = "coffin" - result_type = /obj/structure/closet/coffin/wooden - req_amount = 5 - time = 15 - -/datum/stack_recipe/furniture/bookcase - title = "book shelf" - result_type = /obj/structure/bookcase - req_amount = 5 - time = 15 - -/datum/stack_recipe/furniture/planting_bed - title = "planting bed" - result_type = /obj/machinery/portable_atmospherics/hydroponics/soil - req_amount = 3 - time = 10 - send_material_data = 0 - -/datum/stack_recipe/furniture/fullwindow - title = "full-tile window" - result_type = /obj/structure/window - req_amount = 4 - time = 15 - one_per_turf = 0 - -/datum/stack_recipe/furniture/fullwindow/can_make(mob/user) - . = ..() - if(.) - for(var/obj/structure/window/check_window in user.loc) - if(check_window.is_fulltile()) - to_chat(user, "There is already a full-tile window here!") - return FALSE - -/datum/stack_recipe/furniture/fullwindow/spawn_result(mob/user, location, amount) - return new result_type(user.loc, SOUTHWEST, 1, use_material, use_reinf_material) - -/datum/stack_recipe/furniture/borderwindow - title = "border window" - result_type = /obj/structure/window - req_amount = 1 - time = 5 - one_per_turf = 0 - -/datum/stack_recipe/furniture/borderwindow/can_make(mob/user) - . = ..() - if(.) - for(var/obj/structure/window/check_window in user.loc) - if(check_window.dir == user.dir) - to_chat(user, "There is already a window facing that direction here!") - return FALSE - -/datum/stack_recipe/furniture/borderwindow/spawn_result(mob/user, location, amount) - return new result_type(user.loc, user.dir, 1, use_material, use_reinf_material) - -/datum/stack_recipe/furniture/windoor - title = "windoor assembly" - result_type = /obj/structure/windoor_assembly - req_amount = 1 - time = 20 - one_per_turf = 1 - -/datum/stack_recipe/furniture/windoor/can_make(mob/user) - . = ..() - if(.) - if(locate(/obj/machinery/door/window) in user.loc) - to_chat(user, "There is already a windoor here!") - return FALSE - -/datum/stack_recipe/furniture/windoor/spawn_result(mob/user, location, amount) - return new result_type(user.loc, user.dir, 1, use_material, use_reinf_material) \ No newline at end of file diff --git a/code/modules/materials/recipes_items.dm b/code/modules/materials/recipes_items.dm deleted file mode 100644 index f6e82421b94f4..0000000000000 --- a/code/modules/materials/recipes_items.dm +++ /dev/null @@ -1,299 +0,0 @@ -//Recipes that produce items which aren't stacks or storage. - -/datum/stack_recipe/baseball_bat - title = "baseball bat" - result_type = /obj/item/material/twohanded/baseballbat - req_amount = 10 - time = 20 - on_floor = 1 - difficulty = 2 - send_material_data = 1 - -/datum/stack_recipe/bell - title = "bell" - result_type = /obj/item/material/bell - req_amount = 5 - time = 20 - send_material_data = 1 - -/datum/stack_recipe/ashtray - title = "ashtray" - result_type = /obj/item/material/ashtray - req_amount = 2 - one_per_turf = 1 - on_floor = 1 - send_material_data = 1 - -/datum/stack_recipe/coin - title = "coin" - result_type = /obj/item/material/coin - req_amount = 2 - one_per_turf = 1 - on_floor = 1 - send_material_data = 1 - -/datum/stack_recipe/ring - title = "ring" - result_type = /obj/item/clothing/ring/material - on_floor = 1 - send_material_data = 1 - -/datum/stack_recipe/lock - title = "lock" - result_type = /obj/item/material/lock_construct - time = 20 - on_floor = 1 - send_material_data = 1 - -/datum/stack_recipe/fork - title = "fork" - result_type = /obj/item/material/kitchen/utensil/fork/plastic - on_floor = 1 - send_material_data = 1 - -/datum/stack_recipe/knife - title = "table knife" - result_type = /obj/item/material/knife/table - on_floor = 1 - difficulty = 2 - send_material_data = 1 - -/datum/stack_recipe/spoon - title = "spoon" - result_type = /obj/item/material/kitchen/utensil/spoon/plastic - on_floor = 1 - send_material_data = 1 - -/datum/stack_recipe/blade - title = "knife" - result_type = /obj/item/material/butterflyblade - req_amount = 6 - time = 20 - on_floor = 1 - difficulty = 1 - send_material_data = 1 - -/datum/stack_recipe/grip - title = "knife grip" - result_type = /obj/item/material/butterflyhandle - req_amount = 4 - time = 20 - on_floor = 1 - difficulty = 1 - send_material_data = 1 - -/datum/stack_recipe/key - title = "key" - result_type = /obj/item/key - time = 10 - on_floor = 1 - -/datum/stack_recipe/cannon - title = "cannon frame" - result_type = /obj/item/cannonframe - req_amount = 10 - time = 15 - difficulty = 3 - -/datum/stack_recipe/grenade - title = "grenade casing" - result_type = /obj/item/grenade/chem_grenade - difficulty = 3 - -/datum/stack_recipe/light - title = "light fixture frame" - result_type = /obj/item/frame/light - req_amount = 2 - difficulty = 2 - -/datum/stack_recipe/light_small - title = "small light fixture frame" - result_type = /obj/item/frame/light/small - difficulty = 2 - -/datum/stack_recipe/light_large - title = "large light fixture frame" - result_type = /obj/item/frame/light/spot - req_amount = 3 - difficulty = 3 - -/datum/stack_recipe/light_switch - title = "light switch" - result_type = /obj/item/frame/light_switch - req_amount = 1 - difficulty = 2 - -/datum/stack_recipe/light_switch/windowtint - title = "window tint switch" - result_type = /obj/item/frame/light_switch/windowtint - req_amount = 1 - difficulty = 2 - -/datum/stack_recipe/apc - title = "APC frame" - result_type = /obj/item/frame/apc - req_amount = 2 - difficulty = 2 - -/datum/stack_recipe/air_alarm - title = "air alarm frame" - result_type = /obj/item/frame/air_alarm - req_amount = 2 - difficulty = 2 - -/datum/stack_recipe/fire_alarm - title = "fire alarm frame" - result_type = /obj/item/frame/fire_alarm - req_amount = 2 - difficulty = 2 - -/datum/stack_recipe/intercom - title = "intercom frame" - result_type = /obj/item/frame/intercom - req_amount = 2 - difficulty = 2 - -/datum/stack_recipe/supermatter_alarm - title = "supermatter alarm frame" - result_type = /obj/item/frame/supermatter_alarm - req_amount = 1 - difficulty = 2 - -/datum/stack_recipe/computer/telescreen - title = "modular telescreen frame" - result_type = /obj/item/modular_computer/telescreen - req_amount = 10 - difficulty = 2 - -/datum/stack_recipe/computer/laptop - title = "modular laptop frame" - result_type = /obj/item/modular_computer/laptop - req_amount = 10 - difficulty = 2 - -/datum/stack_recipe/computer/tablet - title = "modular tablet frame" - result_type = /obj/item/modular_computer/tablet - req_amount = 5 - difficulty = 2 - -/datum/stack_recipe/hazard_cone - title = "hazard cone" - result_type = /obj/item/caution/cone - on_floor = 1 - -/datum/stack_recipe/ivbag - title = "IV bag" - result_type = /obj/item/reagent_containers/ivbag - req_amount = 4 - difficulty = 2 - -/datum/stack_recipe/cartridge - title = "reagent dispenser cartridge" - var/modifier = "" - difficulty = 2 - -/datum/stack_recipe/cartridge/display_name() - return "[title] ([modifier])" - -/datum/stack_recipe/cartridge/small - result_type = /obj/item/reagent_containers/chem_disp_cartridge/small - modifier = "small" - -/datum/stack_recipe/cartridge/medium - result_type = /obj/item/reagent_containers/chem_disp_cartridge/medium - modifier = "medium" - req_amount = 3 - -/datum/stack_recipe/cartridge/large - result_type = /obj/item/reagent_containers/chem_disp_cartridge - modifier = "large" - req_amount = 5 - -/datum/stack_recipe/sandal - title = "sandals" - result_type = /obj/item/clothing/shoes/sandal - -/datum/stack_recipe/zipgunframe - title = "zip gun frame" - result_type = /obj/item/zipgunframe - req_amount = 5 - difficulty = 3 - -/datum/stack_recipe/coilgun - title = "coilgun stock" - result_type = /obj/item/coilgun_assembly - req_amount = 5 - difficulty = 3 - -/datum/stack_recipe/stick - title = "stick" - result_type = /obj/item/material/stick - send_material_data = 1 - difficulty = 0 - -/datum/stack_recipe/shield - title = "Buckler" - result_type = /obj/item/shield/buckler - req_amount = 5 - send_material_data = TRUE - time = 20 - difficulty = 2 - -/datum/stack_recipe/crossbowframe - title = "crossbow frame" - result_type = /obj/item/crossbowframe - req_amount = 5 - time = 25 - difficulty = 3 - -/datum/stack_recipe/beehive_assembly - title = "beehive assembly" - result_type = /obj/item/beehive_assembly - req_amount = 4 - -/datum/stack_recipe/beehive_frame - title = "beehive frame" - result_type = /obj/item/honey_frame - -/datum/stack_recipe/cardborg_suit - title = "cardborg suit" - result_type = /obj/item/clothing/suit/cardborg - req_amount = 3 - difficulty = 0 - -/datum/stack_recipe/cardborg_helmet - title = "cardborg helmet" - result_type = /obj/item/clothing/head/cardborg - difficulty = 0 - -/datum/stack_recipe/candle - title = "candle" - result_type = /obj/item/flame/candle - difficulty = 0 - -/datum/stack_recipe/clipboard - title = "clipboard" - result_type = /obj/item/material/clipboard - req_amount = 5 - send_material_data = 1 - -/datum/stack_recipe/urn - title = "urn" - result_type = /obj/item/material/urn - req_amount = 5 - send_material_data = 1 - -/datum/stack_recipe/drill_head - title = "drill head" - result_type = /obj/item/material/drill_head - req_amount = 3 - send_material_data = 1 - difficulty = 0 - -/datum/stack_recipe/cross - title = "cross" - result_type = /obj/item/material/cross - req_amount = 2 - on_floor = 1 - send_material_data = 1 \ No newline at end of file diff --git a/code/modules/materials/recipes_stacks.dm b/code/modules/materials/recipes_stacks.dm deleted file mode 100644 index 4d446154dd0ca..0000000000000 --- a/code/modules/materials/recipes_stacks.dm +++ /dev/null @@ -1,104 +0,0 @@ -/datum/stack_recipe/rod - title = "rod" - result_type = /obj/item/stack/material/rods - res_amount = 2 - max_res_amount = 60 - send_material_data = 1 - time = 5 - difficulty = 1 - -/datum/stack_recipe/rod/spawn_result(user, location, amount) - var/obj/item/stack/S = new result_type(location, amount, use_material) - S.add_to_stacks(user, 1) - return S - -// Tiles -/datum/stack_recipe/tile - res_amount = 4 - max_res_amount = 20 - time = 5 - difficulty = 1 - apply_material_name = FALSE - -/datum/stack_recipe/tile/nullglass - title = "nullglass floor tile" - result_type = /obj/item/stack/tile/floor_nullglass - -/datum/stack_recipe/tile/spawn_result(user, location, amount) - var/obj/item/stack/S = ..() - if(istype(S)) - S.amount = amount - S.add_to_stacks(user, 1) - return S - -/datum/stack_recipe/tile/metal/floor - title = "regular floor tile" - result_type = /obj/item/stack/tile/floor - -/datum/stack_recipe/tile/metal/mono - title = "mono floor tile" - result_type = /obj/item/stack/tile/mono - -/datum/stack_recipe/tile/metal/mono_dark - title = "dark mono floor tile" - result_type = /obj/item/stack/tile/mono/dark - -/datum/stack_recipe/tile/metal/grid - title = "grid floor tile" - result_type = /obj/item/stack/tile/grid - -/datum/stack_recipe/tile/metal/ridged - title = "ridged floor tile" - result_type = /obj/item/stack/tile/ridge - -/datum/stack_recipe/tile/metal/tech_grey - title = "grey techfloor tile" - result_type = /obj/item/stack/tile/techgrey - -/datum/stack_recipe/tile/metal/tech_grid - title = "grid techfloor tile" - result_type = /obj/item/stack/tile/techgrid - -/datum/stack_recipe/tile/metal/tech_maint - title = "dark techfloor tile" - result_type = /obj/item/stack/tile/techmaint - -/datum/stack_recipe/tile/metal/dark - title = "dark floor tile" - result_type = /obj/item/stack/tile/floor_dark - -/datum/stack_recipe/tile/light/floor - title = "white floor tile" - result_type = /obj/item/stack/tile/floor_white - -/datum/stack_recipe/tile/light/mono - title = "white mono floor tile" - result_type = /obj/item/stack/tile/mono/white - -/datum/stack_recipe/tile/light/freezer - title = "freezer floor tile" - result_type = /obj/item/stack/tile/floor_freezer - -/datum/stack_recipe/tile/wood - title = "wood floor tile" - result_type = /obj/item/stack/tile/wood - -/datum/stack_recipe/tile/mahogany - title = "mahogany floor tile" - result_type = /obj/item/stack/tile/mahogany - -/datum/stack_recipe/tile/maple - title = "maple floor tile" - result_type = /obj/item/stack/tile/maple - -/datum/stack_recipe/tile/ebony - title = "ebony floor tile" - result_type = /obj/item/stack/tile/ebony - -/datum/stack_recipe/tile/walnut - title = "walnut floor tile" - result_type = /obj/item/stack/tile/walnut - -/datum/stack_recipe/tile/metal/pool - title = "pool floor tile" - result_type = /obj/item/stack/tile/pool diff --git a/code/modules/materials/recipes_storage.dm b/code/modules/materials/recipes_storage.dm deleted file mode 100644 index 164da16d03d6e..0000000000000 --- a/code/modules/materials/recipes_storage.dm +++ /dev/null @@ -1,59 +0,0 @@ - -/datum/stack_recipe/box/box - title = "box" - result_type = /obj/item/storage/box - -/datum/stack_recipe/box/large - title = "large box" - result_type = /obj/item/storage/box/large - req_amount = 2 - -/datum/stack_recipe/box/donut - title = "donut box" - result_type = /obj/item/storage/box/donut/empty - -/datum/stack_recipe/box/egg - title = "egg box" - result_type = /obj/item/storage/fancy/egg_box/empty - -/datum/stack_recipe/box/light_tubes - title = "light tubes box" - result_type = /obj/item/storage/box/lights/tubes/empty - -/datum/stack_recipe/box/light_bulbs - title = "light bulbs box" - result_type = /obj/item/storage/box/lights/bulbs/empty - -/datum/stack_recipe/box/mouse_traps - title = "mouse traps box" - result_type = /obj/item/storage/box/mousetraps/empty - -/datum/stack_recipe/box/pizza - title = "pizza box" - result_type = /obj/item/pizzabox - -/datum/stack_recipe/bag - title = "bag" - result_type = /obj/item/storage/bag/plasticbag - req_amount = 3 - on_floor = 1 - -/datum/stack_recipe/folder - title = "folder" - result_type = /obj/item/folder - var/modifier = "grey" - -/datum/stack_recipe/folder/display_name() - return "[modifier] [title]" - -/datum/stack_recipe/folder/normal - -#define COLORED_FOLDER(color) /datum/stack_recipe/folder/##color{\ - result_type = /obj/item/folder/##color;\ - modifier = #color\ - } -COLORED_FOLDER(blue) -COLORED_FOLDER(red) -COLORED_FOLDER(white) -COLORED_FOLDER(yellow) -#undef COLORED_FOLDER \ No newline at end of file diff --git a/code/modules/materials/recipes_structures.dm b/code/modules/materials/recipes_structures.dm deleted file mode 100644 index e0db00653ed96..0000000000000 --- a/code/modules/materials/recipes_structures.dm +++ /dev/null @@ -1,26 +0,0 @@ -//Furniture is in a separate file. - -/datum/stack_recipe/ai_core - title = "AI core" - result_type = /obj/structure/AIcore - req_amount = 4 - time = 50 - one_per_turf = 1 - difficulty = 2 - -/datum/stack_recipe/railing - title = "railing" - result_type = /obj/structure/railing - req_amount = 3 - time = 40 - on_floor = 1 - difficulty = 2 - send_material_data = 1 - -/datum/stack_recipe/noticeboard - title = "noticeboard" - result_type = /obj/structure/noticeboard - req_amount = 10 - time = 50 - on_floor = 1 - difficulty = 2 diff --git a/code/modules/mechs/_mech_setup.dm b/code/modules/mechs/_mech_setup.dm deleted file mode 100644 index 3de664b4cc880..0000000000000 --- a/code/modules/mechs/_mech_setup.dm +++ /dev/null @@ -1,46 +0,0 @@ -GLOBAL_DATUM_INIT(default_hardpoint_background, /image, null) -GLOBAL_DATUM_INIT(hardpoint_error_icon, /image, null) -GLOBAL_DATUM_INIT(hardpoint_bar_empty, /image, null) - -GLOBAL_LIST_INIT(hardpoint_bar_cache, new) -GLOBAL_LIST_INIT(mech_damage_overlay_cache, new) -GLOBAL_LIST_INIT(mech_image_cache, new) -GLOBAL_LIST_INIT(mech_icon_cache, new) -GLOBAL_LIST_INIT(mech_weapon_overlays, icon_states('icons/mecha/mech_weapon_overlays.dmi')) - -#define HARDPOINT_BACK "back" -#define HARDPOINT_LEFT_HAND "left hand" -#define HARDPOINT_RIGHT_HAND "right hand" -#define HARDPOINT_LEFT_SHOULDER "left shoulder" -#define HARDPOINT_RIGHT_SHOULDER "right shoulder" -#define HARDPOINT_HEAD "head" - -// No software required: taser. light, radio. -#define MECH_SOFTWARE_UTILITY "utility equipment" // Plasma torch, clamp, drill. -#define MECH_SOFTWARE_MEDICAL "medical support systems" // Sleeper. -#define MECH_SOFTWARE_WEAPONS "standard weapon systems" // Ballistics and energy weapons. -#define MECH_SOFTWARE_ENGINEERING "advanced engineering systems" // RCD. - -// EMP damage points before various effects occur. -#define EMP_GUI_DISRUPT 5 // 1 ion rifle shot == 8. -#define EMP_MOVE_DISRUPT 10 // 2 shots. -#define EMP_ATTACK_DISRUPT 20 // 3 shots. - -//About components -#define MECH_COMPONENT_DAMAGE_UNDAMAGED 1 -#define MECH_COMPONENT_DAMAGE_DAMAGED 2 -#define MECH_COMPONENT_DAMAGE_DAMAGED_BAD 3 -#define MECH_COMPONENT_DAMAGE_DAMAGED_TOTAL 4 - -//Construction -#define FRAME_REINFORCED 1 -#define FRAME_REINFORCED_SECURE 2 -#define FRAME_REINFORCED_WELDED 3 - -#define FRAME_WIRED 1 -#define FRAME_WIRED_ADJUSTED 2 - -//POWER! -#define MECH_POWER_OFF 0 -#define MECH_POWER_TRANSITION 1 -#define MECH_POWER_ON 2 \ No newline at end of file diff --git a/code/modules/mechs/components/_components.dm b/code/modules/mechs/components/_components.dm deleted file mode 100644 index eddf31c9739b9..0000000000000 --- a/code/modules/mechs/components/_components.dm +++ /dev/null @@ -1,189 +0,0 @@ -/obj/item/mech_component - icon = 'icons/mecha/mech_parts_held.dmi' - w_class = ITEM_SIZE_HUGE - gender = PLURAL - color = COLOR_GUNMETAL - atom_flags = ATOM_FLAG_CAN_BE_PAINTED - - var/on_mech_icon = 'icons/mecha/mech_parts.dmi' - var/exosuit_desc_string - var/total_damage = 0 - var/brute_damage = 0 - var/burn_damage = 0 - var/max_damage = 60 - var/damage_state = 1 - var/list/has_hardpoints = list() - var/decal - var/power_use = 0 - matter = list(MATERIAL_STEEL = 15000, MATERIAL_PLASTIC = 1000, MATERIAL_OSMIUM = 500) - dir = SOUTH - -/obj/item/mech_component/set_color(new_colour) - var/last_colour = color - color = new_colour - return color != last_colour - -/obj/item/mech_component/emp_act(var/severity) - take_burn_damage(rand((10 - (severity*3)),15-(severity*4))) - for(var/obj/item/thing in contents) - thing.emp_act(severity) - ..() - -/obj/item/mech_component/examine(mob/user) - . = ..() - if(ready_to_install()) - to_chat(user, SPAN_NOTICE("It is ready for installation.")) - else - show_missing_parts(user) - -//These icons have multiple directions but before they're attached we only want south. -/obj/item/mech_component/set_dir() - ..(SOUTH) - -/obj/item/mech_component/proc/show_missing_parts(var/mob/user) - return - -/obj/item/mech_component/proc/prebuild() - return - -/obj/item/mech_component/proc/install_component(var/obj/item/thing, var/mob/user) - if(user.unEquip(thing, src)) - user.visible_message(SPAN_NOTICE("\The [user] installs \the [thing] in \the [src].")) - return 1 - -/obj/item/mech_component/proc/update_health() - total_damage = brute_damage + burn_damage - if(total_damage > max_damage) total_damage = max_damage - var/prev_state = damage_state - damage_state = clamp(round((total_damage/max_damage) * 4), MECH_COMPONENT_DAMAGE_UNDAMAGED, MECH_COMPONENT_DAMAGE_DAMAGED_TOTAL) - if(damage_state > prev_state) - if(damage_state == MECH_COMPONENT_DAMAGE_DAMAGED_BAD) - playsound(src.loc, 'sound/mecha/internaldmgalarm.ogg', 40, 1) - if(damage_state == MECH_COMPONENT_DAMAGE_DAMAGED_TOTAL) - playsound(src.loc, 'sound/mecha/critdestr.ogg', 50) - -/obj/item/mech_component/proc/ready_to_install() - return 1 - -/obj/item/mech_component/proc/repair_brute_damage(var/amt) - take_brute_damage(-amt) - -/obj/item/mech_component/proc/repair_burn_damage(var/amt) - take_burn_damage(-amt) - -/obj/item/mech_component/proc/take_brute_damage(var/amt) - brute_damage = max(0, brute_damage + amt) - update_health() - if(total_damage == max_damage) - take_component_damage(amt,0) - -/obj/item/mech_component/proc/take_burn_damage(var/amt) - burn_damage = max(0, burn_damage + amt) - update_health() - if(total_damage == max_damage) - take_component_damage(0,amt) - -/obj/item/mech_component/proc/take_component_damage(var/brute, var/burn) - var/list/damageable_components = list() - for(var/obj/item/robot_parts/robot_component/RC in contents) - damageable_components += RC - if(!damageable_components.len) return - var/obj/item/robot_parts/robot_component/RC = pick(damageable_components) - if(RC.take_damage(brute, burn)) - qdel(RC) - update_components() - -/obj/item/mech_component/attackby(var/obj/item/thing, var/mob/user) - if(isScrewdriver(thing)) - if(contents.len) - //Filter non movables - var/list/valid_contents = list() - for(var/atom/movable/A in contents) - if(!A.anchored) - valid_contents += A - if(!valid_contents.len) - return - var/obj/item/removed = pick(valid_contents) - if(!(removed in contents)) - return - user.visible_message(SPAN_NOTICE("\The [user] removes \the [removed] from \the [src].")) - removed.forceMove(user.loc) - playsound(user.loc, 'sound/effects/pop.ogg', 50, 0) - update_components() - else - to_chat(user, SPAN_WARNING("There is nothing to remove.")) - return - if(isWelder(thing)) - repair_brute_generic(thing, user) - return - if(isCoil(thing)) - repair_burn_generic(thing, user) - return - if(istype(thing, /obj/item/device/robotanalyzer)) - to_chat(user, SPAN_NOTICE("Diagnostic Report for \the [src]:")) - return_diagnostics(user) - return - - return ..() - -/obj/item/mech_component/proc/update_components() - return - -/obj/item/mech_component/proc/repair_brute_generic(var/obj/item/weldingtool/WT, var/mob/user) - if(!istype(WT)) - return - if(!brute_damage) - to_chat(user, SPAN_NOTICE("You inspect \the [src] but find nothing to weld.")) - return - if(!WT.isOn()) - to_chat(user, SPAN_WARNING("Turn \the [WT] on, first.")) - return - if(WT.remove_fuel((SKILL_MAX + 1) - user.get_skill_value(SKILL_CONSTRUCTION), user)) - user.visible_message( - SPAN_NOTICE("\The [user] begins welding the damage on \the [src]..."), - SPAN_NOTICE("You begin welding the damage on \the [src]...") - ) - var/repair_value = 10 * max(user.get_skill_value(SKILL_CONSTRUCTION), user.get_skill_value(SKILL_DEVICES)) - if(user.do_skilled(1 SECOND, SKILL_DEVICES , src, 0.6) && brute_damage) - repair_brute_damage(repair_value) - to_chat(user, SPAN_NOTICE("You mend the damage to \the [src].")) - playsound(user.loc, 'sound/items/Welder.ogg', 25, 1) - -/obj/item/mech_component/proc/repair_burn_generic(var/obj/item/stack/cable_coil/CC, var/mob/user) - if(!istype(CC)) - return - if(!burn_damage) - to_chat(user, SPAN_NOTICE("\The [src]'s wiring doesn't need replacing.")) - return - - var/needed_amount = 6 - user.get_skill_value(SKILL_ELECTRICAL) - if(CC.get_amount() < needed_amount) - to_chat(user, SPAN_WARNING("You need at least [needed_amount] unit\s of cable to repair this section.")) - return - - user.visible_message("\The [user] begins replacing the wiring of \the [src]...") - - if(user.do_skilled(1 SECOND, SKILL_DEVICES , src, 0.6) && burn_damage) - if(QDELETED(CC) || QDELETED(src) || !CC.use(needed_amount)) - return - - repair_burn_damage(25) - to_chat(user, SPAN_NOTICE("You mend the damage to \the [src]'s wiring.")) - playsound(user.loc, 'sound/items/Deconstruct.ogg', 25, 1) - return - -/obj/item/mech_component/proc/get_damage_string() - switch(damage_state) - if(MECH_COMPONENT_DAMAGE_UNDAMAGED) - return FONT_COLORED(COLOR_GREEN, "undamaged") - if(MECH_COMPONENT_DAMAGE_DAMAGED) - return FONT_COLORED(COLOR_YELLOW, "damaged") - if(MECH_COMPONENT_DAMAGE_DAMAGED_BAD) - return FONT_COLORED(COLOR_ORANGE, "badly damaged") - if(MECH_COMPONENT_DAMAGE_DAMAGED_TOTAL) - return FONT_COLORED(COLOR_RED, "almost destroyed") - return FONT_COLORED(COLOR_RED, "destroyed") - -/obj/item/mech_component/proc/return_diagnostics(var/mob/user) - to_chat(user, SPAN_NOTICE("[capitalize(src.name)]:")) - to_chat(user, SPAN_NOTICE(" - Integrity: [round((((max_damage - total_damage) / max_damage)) * 100)]%" )) diff --git a/code/modules/mechs/components/armour.dm b/code/modules/mechs/components/armour.dm deleted file mode 100644 index e67f5815d42bc..0000000000000 --- a/code/modules/mechs/components/armour.dm +++ /dev/null @@ -1,67 +0,0 @@ -/datum/extension/armor/mech - under_armor_mult = 0.3 - -/obj/item/robot_parts/robot_component/armour/exosuit - name = "exosuit armour plating" - desc = "A pair of flexible armor plates, used to protect the internals of exosuits and its pilot." - armor = list( - melee = ARMOR_MELEE_MAJOR, - bullet = ARMOR_BALLISTIC_PISTOL, - laser = ARMOR_LASER_HANDGUNS, - energy = ARMOR_ENERGY_MINOR, - bomb = ARMOR_BOMB_PADDED, - bio = ARMOR_BIO_SHIELDED, - rad = ARMOR_RAD_MINOR - ) - origin_tech = list(TECH_MATERIAL = 1) - -/obj/item/robot_parts/robot_component/armour/exosuit/radproof - name = "radiation-proof armour plating" - desc = "A fully enclosed radiation hardened shell designed to protect the pilot from radiation." - icon_state = "armor_r" - icon_state_broken = "armor_r_broken" - armor = list( - melee = ARMOR_MELEE_RESISTANT, - bullet = ARMOR_BALLISTIC_PISTOL, - laser = ARMOR_LASER_HANDGUNS, - energy = ARMOR_ENERGY_MINOR, - bomb = ARMOR_BOMB_PADDED, - bio = ARMOR_BIO_SHIELDED, - rad = ARMOR_RAD_SHIELDED - ) - origin_tech = list(TECH_MATERIAL = 3) - -/obj/item/robot_parts/robot_component/armour/exosuit/em - name = "EM-shielded armour plating" - desc = "A shielded plating that sorrounds the eletronics and protects them from electromagnetic radiation." - icon_state = "armor_e" - icon_state_broken = "armor_e_broken" - armor = list( - melee = ARMOR_MELEE_RESISTANT , - bullet = ARMOR_BALLISTIC_SMALL, - laser = ARMOR_LASER_SMALL, - energy = ARMOR_ENERGY_SHIELDED, - bomb = ARMOR_BOMB_MINOR, - bio = ARMOR_BIO_SHIELDED, - rad = ARMOR_RAD_SMALL - ) - origin_tech = list(TECH_MATERIAL = 3) - -/obj/item/robot_parts/robot_component/armour/exosuit/combat - name = "heavy combat plating" - desc = "Plating designed to deflect incoming attacks and explosions." - icon_state = "armor_c" - icon_state_broken = "armor_c_broken" - armor = list( - melee = ARMOR_MELEE_MAJOR, - bullet = ARMOR_BALLISTIC_RESISTANT, - laser = ARMOR_LASER_HANDGUNS, - energy = ARMOR_ENERGY_MINOR, - bomb = ARMOR_BOMB_RESISTANT, - bio = ARMOR_BIO_SHIELDED - ) - origin_tech = list(TECH_MATERIAL = 5) - -/obj/item/robot_parts/robot_component/armour/exosuit/Initialize() - . = ..() - set_extension(src, /datum/extension/armor/mech, armor) \ No newline at end of file diff --git a/code/modules/mechs/components/arms.dm b/code/modules/mechs/components/arms.dm deleted file mode 100644 index 5956576aa5f67..0000000000000 --- a/code/modules/mechs/components/arms.dm +++ /dev/null @@ -1,85 +0,0 @@ -/obj/item/mech_component/manipulators - name = "arms" - pixel_y = -12 - icon_state = "loader_arms" - has_hardpoints = list(HARDPOINT_LEFT_HAND, HARDPOINT_RIGHT_HAND) - - var/melee_damage = 15 - var/action_delay = 15 - var/obj/item/robot_parts/robot_component/actuator/motivator - power_use = 10 - w_class = ITEM_SIZE_LARGE - -/obj/item/mech_component/manipulators/Destroy() - QDEL_NULL(motivator) - . = ..() - -/obj/item/mech_component/manipulators/show_missing_parts(var/mob/user) - if(!motivator) - to_chat(user, SPAN_WARNING("It is missing an actuator.")) - -/obj/item/mech_component/manipulators/ready_to_install() - return motivator - -/obj/item/mech_component/manipulators/prebuild() - motivator = new(src) - -/obj/item/mech_component/manipulators/attackby(var/obj/item/thing, var/mob/user) - if(istype(thing,/obj/item/robot_parts/robot_component/actuator)) - if(motivator) - to_chat(user, SPAN_WARNING("\The [src] already has an actuator installed.")) - return - if(install_component(thing, user)) motivator = thing - else - return ..() - -/obj/item/mech_component/manipulators/update_components() - motivator = locate() in src - -/obj/item/mech_component/manipulators/get_damage_string() - if(!motivator || !motivator.is_functional()) - return SPAN_DANGER("disabled") - return ..() - -/obj/item/mech_component/manipulators/return_diagnostics(mob/user) - ..() - if(motivator) - to_chat(user, SPAN_NOTICE(" Actuator Integrity: [round((((motivator.max_dam - motivator.total_dam) / motivator.max_dam)) * 100)]%")) - else - to_chat(user, SPAN_WARNING(" Actuator Missing or Non-functional.")) - -/obj/item/mech_component/manipulators/powerloader - name = "exosuit arms" - exosuit_desc_string = "heavy-duty industrial lifters" - max_damage = 70 - power_use = 30 - desc = "The Xion Industrial Digital Interaction Manifolds allow you poke untold dangers from the relative safety of your cockpit." - -/obj/item/mech_component/manipulators/light - name = "light arms" - exosuit_desc_string = "lightweight, segmented manipulators" - icon_state = "light_arms" - melee_damage = 5 - action_delay = 15 - max_damage = 40 - power_use = 10 - desc = "As flexible as they are fragile, these Vey-Med manipulators can follow a pilot's movements in close to real time." - - -/obj/item/mech_component/manipulators/heavy - name = "heavy arms" - exosuit_desc_string = "super-heavy reinforced manipulators" - icon_state = "heavy_arms" - desc = "Designed to function where any other piece of equipment would have long fallen apart, the Hephaestus Superheavy Lifter series can take a beating and excel at delivering it." - melee_damage = 25 - action_delay = 15 - max_damage = 90 - power_use = 60 - -/obj/item/mech_component/manipulators/combat - name = "combat arms" - exosuit_desc_string = "flexible, advanced manipulators" - icon_state = "combat_arms" - melee_damage = 5 - action_delay = 10 - power_use = 50 diff --git a/code/modules/mechs/components/body.dm b/code/modules/mechs/components/body.dm deleted file mode 100644 index 18623fccf5ca8..0000000000000 --- a/code/modules/mechs/components/body.dm +++ /dev/null @@ -1,355 +0,0 @@ -/obj/item/storage/mech - w_class = ITEM_SIZE_NO_CONTAINER - max_w_class = ITEM_SIZE_LARGE - storage_slots = 4 - use_sound = 'sound/effects/storage/toolbox.ogg' - anchored = TRUE - -/obj/item/mech_component/chassis/Adjacent(var/atom/neighbor, var/recurse = 1) //For interaction purposes we consider body to be adjacent to whatever holder mob is adjacent - var/mob/living/exosuit/E = loc - if(istype(E)) - . = E.Adjacent(neighbor, recurse) - return . || ..() - -/obj/item/storage/mech/Adjacent(var/atom/neighbor, var/recurse = 1) //in order to properly retrieve items - var/obj/item/mech_component/chassis/C = loc - if(istype(C)) - . = C.Adjacent(neighbor, recurse-1) - return . || ..() - -/obj/item/mech_component/chassis - name = "body" - icon_state = "loader_body" - gender = NEUTER - - var/mech_health = 300 - var/obj/item/cell/cell - var/obj/item/robot_parts/robot_component/diagnosis_unit/diagnostics - var/obj/item/robot_parts/robot_component/armour/exosuit/m_armour - var/obj/machinery/portable_atmospherics/canister/air_supply - var/obj/item/storage/mech/storage_compartment - var/datum/gas_mixture/cockpit - var/transparent_cabin = FALSE - var/hide_pilot = FALSE - var/hatch_descriptor = "cockpit" - var/list/pilot_positions - var/pilot_coverage = 100 - var/min_pilot_size = MOB_SMALL - var/max_pilot_size = MOB_LARGE - has_hardpoints = list(HARDPOINT_BACK, HARDPOINT_LEFT_SHOULDER, HARDPOINT_RIGHT_SHOULDER) - var/climb_time = 25 - -/obj/item/mech_component/chassis/New() - ..() - if(isnull(pilot_positions)) - pilot_positions = list( - list( - "[NORTH]" = list("x" = 8, "y" = 0), - "[SOUTH]" = list("x" = 8, "y" = 0), - "[EAST]" = list("x" = 8, "y" = 0), - "[WEST]" = list("x" = 8, "y" = 0) - ) - ) - -/obj/item/mech_component/chassis/Destroy() - QDEL_NULL(cell) - QDEL_NULL(diagnostics) - QDEL_NULL(m_armour) - QDEL_NULL(air_supply) - QDEL_NULL(storage_compartment) - . = ..() - -/obj/item/mech_component/chassis/update_components() - diagnostics = locate() in src - cell = locate() in src - m_armour = locate() in src - air_supply = locate() in src - storage_compartment = locate() in src - -/obj/item/mech_component/chassis/show_missing_parts(var/mob/user) - if(!cell) - to_chat(user, SPAN_WARNING("It is missing a power cell.")) - if(!diagnostics) - to_chat(user, SPAN_WARNING("It is missing a diagnostics unit.")) - if(!m_armour) - to_chat(user, SPAN_WARNING("It is missing exosuit armour plating.")) - -/obj/item/mech_component/chassis/Initialize() - . = ..() - if(pilot_coverage >= 100) //Open cockpits dont get to have air - cockpit = new - cockpit.volume = 200 - if(loc) - var/datum/gas_mixture/air = loc.return_air() - if(air) - //Essentially at this point its like we created a vacuum, but realistically making a bottle doesnt actually increase volume of a room and neither should a mech - for(var/g in air.gas) - var/amount = air.gas[g] - amount/= air.volume - cockpit.gas[g] = amount * cockpit.volume - - cockpit.temperature = air.temperature - cockpit.update_values() - - air_supply = new /obj/machinery/portable_atmospherics/canister/air(src) - storage_compartment = new(src) - -/obj/item/mech_component/chassis/proc/update_air(var/take_from_supply) - - var/changed - if(!cockpit) - return - if(!take_from_supply || pilot_coverage < 100) - var/turf/T = get_turf(src) - if(!T) - return - cockpit.equalize(T.return_air()) - changed = TRUE - else if(air_supply) - var/env_pressure = cockpit.return_pressure() - var/pressure_delta = air_supply.release_pressure - env_pressure - if(pressure_delta > 0) - if(air_supply.air_contents.temperature > 0) - var/transfer_moles = calculate_transfer_moles(air_supply.air_contents, cockpit, pressure_delta) - transfer_moles = min(transfer_moles, (air_supply.release_flow_rate/air_supply.air_contents.volume)*air_supply.air_contents.total_moles) - pump_gas_passive(air_supply, air_supply.air_contents, cockpit, transfer_moles) - changed = TRUE - else if(pressure_delta < 0) //Release overpressure. - var/turf/T = get_turf(src) - if(!T) - return - var/datum/gas_mixture/t_air = T.return_air() - if(t_air) - pressure_delta = min(env_pressure - t_air.return_pressure(), pressure_delta) - if(pressure_delta > 0) //Location is at a lower pressure (so we can vent into it) - var/transfer_moles = calculate_transfer_moles(cockpit, t_air, pressure_delta) - var/datum/gas_mixture/removed = cockpit.remove(transfer_moles) - if(!removed) - return - if(t_air) - t_air.merge(removed) - else //just delete the cabin gas, we are somewhere with invalid air, so they wont mind the additional nothingness - qdel(removed) - changed = TRUE - - if(changed) - cockpit.react() - -/obj/item/mech_component/chassis/ready_to_install() - return (cell && diagnostics && m_armour) - -/obj/item/mech_component/chassis/prebuild() - diagnostics = new(src) - cell = new /obj/item/cell/high(src) - cell.charge = cell.maxcharge - -/obj/item/mech_component/chassis/attackby(var/obj/item/thing, var/mob/user) - if(istype(thing,/obj/item/robot_parts/robot_component/diagnosis_unit)) - if(diagnostics) - to_chat(user, SPAN_WARNING("\The [src] already has a diagnostic system installed.")) - return - if(install_component(thing, user)) diagnostics = thing - else if(istype(thing, /obj/item/cell)) - if(cell) - to_chat(user, SPAN_WARNING("\The [src] already has a cell installed.")) - return - if(install_component(thing,user)) cell = thing - else if(istype(thing, /obj/item/robot_parts/robot_component/armour/exosuit)) - if(m_armour) - to_chat(user, SPAN_WARNING("\The [src] already has armour installed.")) - return - if(install_component(thing, user)) - m_armour = thing - else - return ..() - -/obj/item/mech_component/chassis/MouseDrop_T(atom/dropping, mob/user) - var/obj/machinery/portable_atmospherics/canister/C = dropping - if(!istype(C)) - return ..() - if(pilot_coverage < 100) - to_chat(user, SPAN_NOTICE("This type of chassis doesn't support internals.")) - if(!C.anchored && do_after(user, 0.5 SECONDS, src, DO_PUBLIC_UNIQUE)) - if(C.anchored) - return - to_chat(user, SPAN_NOTICE("You install the canister in the [src].")) - if(air_supply) - air_supply.forceMove(get_turf(src)) - air_supply = null - C.forceMove(src) - update_components() - else . = ..() - -/obj/item/mech_component/chassis/MouseDrop(atom/over) - if(!usr || !over) return - if(!Adjacent(usr) || !over.Adjacent(usr)) return - - if(storage_compartment) - return storage_compartment.MouseDrop(over) - -/obj/item/mech_component/chassis/return_diagnostics(mob/user) - ..() - if(diagnostics) - to_chat(user, SPAN_NOTICE(" Diagnostics Unit Integrity: [round((((diagnostics.max_dam - diagnostics.total_dam) / diagnostics.max_dam)) * 100)]%")) - else - to_chat(user, SPAN_WARNING(" Diagnostics Unit Missing or Non-functional.")) - if(m_armour) - to_chat(user, SPAN_NOTICE(" Armor Integrity: [round((((m_armour.max_dam - m_armour.total_dam) / m_armour.max_dam)) * 100)]%")) - else - to_chat(user, SPAN_WARNING(" Armor Missing or Non-functional.")) - - -/obj/item/mech_component/chassis/powerloader - name = "open exosuit chassis" - hatch_descriptor = "roll cage" - pilot_coverage = 40 - exosuit_desc_string = "an industrial rollcage" - desc = "A Xion industrial brand roll cage. Technically OSHA compliant. Technically." - max_damage = 100 - power_use = 0 - climb_time = 6 - -/obj/item/mech_component/chassis/powerloader/prebuild() - . = ..() - m_armour = new /obj/item/robot_parts/robot_component/armour/exosuit(src) - -/obj/item/mech_component/chassis/powerloader/Initialize() - pilot_positions = list( - list( - "[NORTH]" = list("x" = 8, "y" = 8), - "[SOUTH]" = list("x" = 8, "y" = 8), - "[EAST]" = list("x" = 8, "y" = 8), - "[WEST]" = list("x" = 8, "y" = 8) - ), - list( - "[NORTH]" = list("x" = 8, "y" = 16), - "[SOUTH]" = list("x" = 8, "y" = 16), - "[EAST]" = list("x" = 0, "y" = 16), - "[WEST]" = list("x" = 16, "y" = 16) - ) - ) - . = ..() - -/obj/item/mech_component/chassis/light - name = "light exosuit chassis" - hatch_descriptor = "canopy" - pilot_coverage = 100 - transparent_cabin = TRUE - exosuit_desc_string = "an open and light chassis" - icon_state = "light_body" - max_damage = 50 - power_use = 5 - has_hardpoints = list(HARDPOINT_BACK, HARDPOINT_LEFT_SHOULDER) - desc = "The Veymed Odysseus series cockpits combine ultralight materials and clear aluminum laminates to provide an optimized cockpit experience." - climb_time = 15 - -/obj/item/mech_component/chassis/light/prebuild() - . = ..() - m_armour = new /obj/item/robot_parts/robot_component/armour/exosuit/radproof(src) - -/obj/item/mech_component/chassis/light/Initialize() - pilot_positions = list( - list( - "[NORTH]" = list("x" = 8, "y" = 0), - "[SOUTH]" = list("x" = 8, "y" = 0), - "[EAST]" = list("x" = 3, "y" = 0), - "[WEST]" = list("x" = 13, "y" = 0) - ) - ) - . = ..() - -/obj/item/mech_component/chassis/pod - name = "spherical exosuit chassis" - hatch_descriptor = "hatch" - pilot_coverage = 100 - transparent_cabin = TRUE - exosuit_desc_string = "a spherical chassis" - icon_state = "pod_body" - max_damage = 70 - power_use = 5 - has_hardpoints = list(HARDPOINT_BACK) - desc = "The NanoTrasen Katamari series cockpits have won a massive tender by SCG few years back. No one is sure why, but these terrible things keep popping up on every government facility." - -/obj/item/mech_component/chassis/pod/Initialize() - pilot_positions = list( - list( - "[NORTH]" = list("x" = 8, "y" = 4), - "[SOUTH]" = list("x" = 8, "y" = 4), - "[EAST]" = list("x" = 12, "y" = 4), - "[WEST]" = list("x" = 4, "y" = 4) - ), - list( - "[NORTH]" = list("x" = 8, "y" = 8), - "[SOUTH]" = list("x" = 8, "y" = 8), - "[EAST]" = list("x" = 10, "y" = 8), - "[WEST]" = list("x" = 6, "y" = 8) - ) - ) - . = ..() - -/obj/item/mech_component/chassis/pod/prebuild() - . = ..() - m_armour = new /obj/item/robot_parts/robot_component/armour/exosuit/radproof(src) - -/obj/item/mech_component/chassis/pod/Initialize() - pilot_positions = list( - list( - "[NORTH]" = list("x" = 8, "y" = 3), - "[SOUTH]" = list("x" = 8, "y" = 2), - "[EAST]" = list("x" = 4, "y" = 3), - "[WEST]" = list("x" = 12, "y" = 3) - ) - ) - . = ..() - -/obj/item/mech_component/chassis/heavy - name = "reinforced exosuit chassis" - hatch_descriptor = "hatch" - desc = "The HI-Koloss chassis is a veritable juggernaut, capable of protecting a pilot even in the most hostile of environments. It handles like a battlecruiser, however." - pilot_coverage = 100 - exosuit_desc_string = "a heavily armoured chassis" - icon_state = "heavy_body" - max_damage = 150 - mech_health = 500 - power_use = 50 - has_hardpoints = list(HARDPOINT_BACK) - -/obj/item/mech_component/chassis/heavy/prebuild() - pilot_positions = list( - list( - "[NORTH]" = list("x" = 8, "y" = 8), - "[SOUTH]" = list("x" = 9, "y" = 2), - "[EAST]" = list("x" = 4, "y" = 8), - "[WEST]" = list("x" = 12, "y" = 8) - ) - ) - - . = ..() - -/obj/item/mech_component/chassis/heavy/prebuild() - . = ..() - m_armour = new /obj/item/robot_parts/robot_component/armour/exosuit/combat(src) - -/obj/item/mech_component/chassis/combat - name = "sealed exosuit chassis" - hatch_descriptor = "canopy" - pilot_coverage = 100 - exosuit_desc_string = "an armoured chassis" - icon_state = "combat_body" - power_use = 40 - -/obj/item/mech_component/chassis/combat/prebuild() - . = ..() - m_armour = new /obj/item/robot_parts/robot_component/armour/exosuit/combat(src) - -/obj/item/mech_component/chassis/combat/Initialize() - pilot_positions = list( - list( - "[NORTH]" = list("x" = 8, "y" = 8), - "[SOUTH]" = list("x" = 8, "y" = 8), - "[EAST]" = list("x" = 4, "y" = 8), - "[WEST]" = list("x" = 12, "y" = 8) - ) - ) - - . = ..() diff --git a/code/modules/mechs/components/frame.dm b/code/modules/mechs/components/frame.dm deleted file mode 100644 index 347eb2d2dd948..0000000000000 --- a/code/modules/mechs/components/frame.dm +++ /dev/null @@ -1,328 +0,0 @@ -/obj/item/frame_holder - matter = list(MATERIAL_STEEL = 175000, MATERIAL_PLASTIC = 50000, MATERIAL_OSMIUM = 30000) - -/obj/item/frame_holder/Initialize(mapload, var/newloc) - ..() - new /obj/structure/heavy_vehicle_frame(newloc) - return INITIALIZE_HINT_QDEL - -/obj/structure/heavy_vehicle_frame - name = "exosuit frame" - desc = "The frame for an exosuit, apparently." - icon = 'icons/mecha/mech_parts.dmi' - icon_state = "backbone" - density = TRUE - pixel_x = -8 - atom_flags = ATOM_FLAG_CAN_BE_PAINTED - - // Holders for the final product. - var/obj/item/mech_component/manipulators/arms - var/obj/item/mech_component/propulsion/legs - var/obj/item/mech_component/sensors/head - var/obj/item/mech_component/chassis/body - var/is_wired = 0 - var/is_reinforced = 0 - var/set_name - dir = SOUTH - -/obj/structure/heavy_vehicle_frame/set_color(var/new_colour) - var/painted_component = FALSE - for(var/obj/item/mech_component/comp in list(body, arms, legs, head)) - if(comp.set_color(new_colour)) - painted_component = TRUE - if(painted_component) - queue_icon_update() - -/obj/structure/heavy_vehicle_frame/Destroy() - QDEL_NULL(arms) - QDEL_NULL(legs) - QDEL_NULL(head) - QDEL_NULL(body) - . = ..() - -/obj/structure/heavy_vehicle_frame/examine(mob/user) - . = ..() - if(!arms) - to_chat(user, SPAN_WARNING("It is missing manipulators.")) - if(!legs) - to_chat(user, SPAN_WARNING("It is missing propulsion.")) - if(!head) - to_chat(user, SPAN_WARNING("It is missing sensors.")) - if(!body) - to_chat(user, SPAN_WARNING("It is missing a chassis.")) - if(is_wired == FRAME_WIRED) - to_chat(user, SPAN_WARNING("It has not had its wiring adjusted.")) - else if(!is_wired) - to_chat(user, SPAN_WARNING("It has not yet been wired.")) - if(is_reinforced == FRAME_REINFORCED) - to_chat(user, SPAN_WARNING("It has not had its internal reinforcement secured.")) - else if(is_reinforced == FRAME_REINFORCED_SECURE) - to_chat(user, SPAN_WARNING("It has not had its internal reinforcement welded in.")) - else if(!is_reinforced) - to_chat(user, SPAN_WARNING("It does not have any internal reinforcement.")) - -/obj/structure/heavy_vehicle_frame/on_update_icon() - var/list/new_overlays = get_mech_images(list(legs, head, body, arms), layer) - if(body) - set_density(TRUE) - overlays += get_mech_image(null, "[body.icon_state]_cockpit", body.icon, body.color) - if(body.pilot_coverage < 100 || body.transparent_cabin) - new_overlays += get_mech_image(null, "[body.icon_state]_open_overlay", body.icon, body.color) - else - set_density(FALSE) - overlays = new_overlays - if(density != opacity) - set_opacity(density) - -/obj/structure/heavy_vehicle_frame/set_dir() - ..(SOUTH) - -/obj/structure/heavy_vehicle_frame/attackby(var/obj/item/thing, var/mob/user) - - // Removing components. - if(isCrowbar(thing)) - if(is_reinforced == FRAME_REINFORCED) - if(!do_after(user, 0.5 SECONDS * user.skill_delay_mult(SKILL_DEVICES), src, DO_PUBLIC_UNIQUE) || !material) - return - user.visible_message(SPAN_NOTICE("\The [user] crowbars the reinforcement off \the [src].")) - material.place_sheet(src.loc, 10) - material = null - is_reinforced = 0 - return - - var/to_remove = input("Which component would you like to remove") as null|anything in list(arms, body, legs, head) - - if(!to_remove) - to_chat(user, SPAN_WARNING("There are no components to remove.")) - return - - if(uninstall_component(to_remove, user)) - if(to_remove == arms) - arms = null - else if(to_remove == body) - body = null - else if(to_remove == legs) - legs = null - else if(to_remove == head) - head = null - - update_icon() - return - - // Final construction step. - else if(isScrewdriver(thing)) - - // Check for basic components. - if(!(arms && legs && head && body)) - to_chat(user, SPAN_WARNING("There are still parts missing from \the [src].")) - return - - // Check for wiring. - if(is_wired < FRAME_WIRED_ADJUSTED) - if(is_wired == FRAME_WIRED) - to_chat(user, SPAN_WARNING("\The [src]'s wiring has not been adjusted!")) - else - to_chat(user, SPAN_WARNING("\The [src] is not wired!")) - return - - // Check for basing metal internal plating. - if(is_reinforced < FRAME_REINFORCED_WELDED) - if(is_reinforced == FRAME_REINFORCED) - to_chat(user, SPAN_WARNING("\The [src]'s internal reinforcement has not been secured!")) - else if(is_reinforced == FRAME_REINFORCED_SECURE) - to_chat(user, SPAN_WARNING("\The [src]'s internal reinforcement has not been welded down!")) - else - to_chat(user, SPAN_WARNING("\The [src] has no internal reinforcement!")) - return - - visible_message(SPAN_NOTICE("\The [user] begins tightening screws, flipping connectors and finishing off \the [src].")) - if(!user.do_skilled(5 SECONDS, SKILL_DEVICES, src)) - return - - if(is_reinforced < FRAME_REINFORCED_WELDED || is_wired < FRAME_WIRED_ADJUSTED || !(arms && legs && head && body) || QDELETED(src) || QDELETED(user)) - return - - // We're all done. Finalize the exosuit and pass the frame to the new system. - var/mob/living/exosuit/M = new(get_turf(src), src) - visible_message(SPAN_NOTICE("\The [user] finishes off \the [M].")) - playsound(user.loc, 'sound/items/Screwdriver.ogg', 100, 1) - - arms = null - legs = null - head = null - body = null - qdel(src) - - return - - // Installing wiring. - else if(isCoil(thing)) - - if(is_wired) - to_chat(user, SPAN_WARNING("\The [src] has already been wired.")) - return - - var/obj/item/stack/cable_coil/CC = thing - if(CC.get_amount() < 10) - to_chat(user, SPAN_WARNING("You need at least ten units of cable to complete the exosuit.")) - return - - user.visible_message("\The [user] begins wiring \the [src]...") - - if(!do_after(user, 3 SECONDS * user.skill_delay_mult(SKILL_ELECTRICAL), src, DO_PUBLIC_UNIQUE)) - return - - if(!CC || !user || !src || CC.get_amount() < 10 || is_wired) - return - - CC.use(10) - user.visible_message("\The [user] installs wiring in \the [src].") - playsound(user.loc, 'sound/items/Deconstruct.ogg', 50, 1) - is_wired = FRAME_WIRED - // Securing wiring. - else if(isWirecutter(thing)) - if(!is_wired) - to_chat(user, "There is no wiring in \the [src] to neaten.") - return - - user.visible_message("\The [user] begins adjusting the wiring inside \the [src]...") - var/last_wiring_state = is_wired - if(!do_after(user, 3 SECONDS * user.skill_delay_mult(SKILL_ELECTRICAL), src, DO_PUBLIC_UNIQUE) || last_wiring_state != is_wired) - return - - visible_message("\The [user] [(is_wired == FRAME_WIRED_ADJUSTED) ? "snips some of" : "neatens"] the wiring in \the [src].") - playsound(user.loc, 'sound/items/Wirecutter.ogg', 100, 1) - is_wired = (is_wired == FRAME_WIRED_ADJUSTED) ? FRAME_WIRED : FRAME_WIRED_ADJUSTED - // Installing metal. - else if(istype(thing, /obj/item/stack/material)) - var/obj/item/stack/material/M = thing - if(M.material) - if(is_reinforced) - to_chat(user, SPAN_WARNING("There is already a material reinforcement installed in \the [src].")) - return - if(M.get_amount() < 10) - to_chat(user, SPAN_WARNING("You need at least ten sheets to reinforce \the [src].")) - return - - visible_message("\The [user] begins layering the interior of the \the [src] with \the [M].") - - if(!do_after(user, 3 SECONDS * user.skill_delay_mult(SKILL_DEVICES), src, DO_PUBLIC_UNIQUE) || is_reinforced) - return - - visible_message("\The [user] reinforces \the [src] with \the [M].") - playsound(user.loc, 'sound/items/Deconstruct.ogg', 50, 1) - material = M.material - is_reinforced = FRAME_REINFORCED - M.use(10) - else - return ..() - // Securing metal. - else if(isWrench(thing)) - if(!is_reinforced) - to_chat(user, SPAN_WARNING("There is no metal to secure inside \the [src].")) - return - if(is_reinforced == FRAME_REINFORCED_WELDED) - to_chat(user, SPAN_WARNING("\The [src]'s internal reinforcment has been welded in.")) - return - - var/last_reinforced_state = is_reinforced - visible_message("\The [user] begins adjusting the metal reinforcement inside \the [src].") - - if(!user.do_skilled(4 SECONDS, SKILL_DEVICES,src) || last_reinforced_state != is_reinforced) - return - - visible_message("\The [user] [(is_reinforced == 2) ? "unsecures" : "secures"] the metal reinforcement inside \the [src].") - playsound(user.loc, 'sound/items/Ratchet.ogg', 100, 1) - is_reinforced = (is_reinforced == FRAME_REINFORCED_SECURE) ? FRAME_REINFORCED : FRAME_REINFORCED_SECURE - // Welding metal. - else if(isWelder(thing)) - var/obj/item/weldingtool/WT = thing - if(!is_reinforced) - to_chat(user, SPAN_WARNING("There is no metal to secure inside \the [src].")) - return - if(is_reinforced == FRAME_REINFORCED) - to_chat(user, SPAN_WARNING("The reinforcement inside \the [src] has not been secured.")) - return - if(!WT.isOn()) - to_chat(user, SPAN_WARNING("Turn \the [WT] on, first.")) - return - if(WT.remove_fuel(1, user)) - - var/last_reinforced_state = is_reinforced - visible_message("\The [user] begins welding the metal reinforcement inside \the [src].") - if(!do_after(user, 2 SECONDS * user.skill_delay_mult(SKILL_DEVICES), src, DO_PUBLIC_UNIQUE) || last_reinforced_state != is_reinforced) - return - - visible_message("\The [user] [(is_reinforced == FRAME_REINFORCED_WELDED) ? "unwelds the reinforcement from" : "welds the reinforcement into"] \the [src].") - is_reinforced = (is_reinforced == FRAME_REINFORCED_WELDED) ? FRAME_REINFORCED_SECURE : FRAME_REINFORCED_WELDED - playsound(user.loc, 'sound/items/Welder.ogg', 50, 1) - else - to_chat(user, SPAN_WARNING("Not enough fuel!")) - return - // Installing basic components. - else if(istype(thing,/obj/item/mech_component/manipulators)) - if(arms) - to_chat(user, SPAN_WARNING("\The [src] already has manipulators installed.")) - return - if(install_component(thing, user)) - if(arms) - thing.dropInto(loc) - return - arms = thing - else if(istype(thing,/obj/item/mech_component/propulsion)) - if(legs) - to_chat(user, SPAN_WARNING("\The [src] already has a propulsion system installed.")) - return - if(install_component(thing, user)) - if(legs) - thing.dropInto(loc) - return - legs = thing - else if(istype(thing,/obj/item/mech_component/sensors)) - if(head) - to_chat(user, SPAN_WARNING("\The [src] already has a sensor array installed.")) - return - if(install_component(thing, user)) - if(head) - thing.dropInto(loc) - return - head = thing - else if(istype(thing,/obj/item/mech_component/chassis)) - if(body) - to_chat(user, SPAN_WARNING("\The [src] already has an outer chassis installed.")) - return - if(install_component(thing, user)) - if(body) - thing.dropInto(loc) - return - body = thing - else - return ..() - update_icon() - -/obj/structure/heavy_vehicle_frame/proc/install_component(var/obj/item/thing, var/mob/user) - var/obj/item/mech_component/MC = thing - if(istype(MC) && !MC.ready_to_install()) - to_chat(user, SPAN_WARNING("\The [MC] [MC.gender == PLURAL ? "are" : "is"] not ready to install.")) - return 0 - if(user) - visible_message(SPAN_NOTICE("\The [user] begins installing \the [thing] into \the [src].")) - if(!user.canUnEquip(thing) || !do_after(user, 3 SECONDS * user.skill_delay_mult(SKILL_DEVICES), src, DO_PUBLIC_UNIQUE) || user.get_active_hand() != thing) - return - if(!user.unEquip(thing)) - return - thing.forceMove(src) - visible_message(SPAN_NOTICE("\The [user] installs \the [thing] into \the [src].")) - playsound(user.loc, 'sound/machines/click.ogg', 50, 1) - return 1 - -/obj/structure/heavy_vehicle_frame/proc/uninstall_component(var/obj/item/component, var/mob/user) - if(!istype(component) || (component.loc != src) || !istype(user)) - return FALSE - if(!do_after(user, 4 SECONDS * user.skill_delay_mult(SKILL_DEVICES), src, DO_PUBLIC_UNIQUE) || component.loc != src) - return FALSE - user.visible_message(SPAN_NOTICE("\The [user] crowbars \the [component] off \the [src].")) - component.forceMove(get_turf(src)) - user.put_in_hands(component) - playsound(user.loc, 'sound/items/Deconstruct.ogg', 50, 1) - return TRUE diff --git a/code/modules/mechs/components/head.dm b/code/modules/mechs/components/head.dm deleted file mode 100644 index 5370ef9cad7b3..0000000000000 --- a/code/modules/mechs/components/head.dm +++ /dev/null @@ -1,197 +0,0 @@ -/obj/item/mech_component/sensors - name = "head" - icon_state = "loader_head" - gender = NEUTER - - var/vision_flags = 0 - var/see_invisible = 0 - var/obj/item/robot_parts/robot_component/radio/radio - var/obj/item/robot_parts/robot_component/camera - var/obj/item/mech_component/control_module/software - has_hardpoints = list(HARDPOINT_HEAD) - var/active_sensors = 0 - power_use = 15 - w_class = ITEM_SIZE_NORMAL - -/obj/item/mech_component/sensors/Destroy() - QDEL_NULL(camera) - QDEL_NULL(radio) - QDEL_NULL(software) - . = ..() - -/obj/item/mech_component/sensors/show_missing_parts(var/mob/user) - if(!radio) - to_chat(user, SPAN_WARNING("It is missing a radio.")) - if(!camera) - to_chat(user, SPAN_WARNING("It is missing a camera.")) - if(!software) - to_chat(user, SPAN_WARNING("It is missing a software control module.")) - -/obj/item/mech_component/sensors/prebuild() - radio = new(src) - camera = new(src) - -/obj/item/mech_component/sensors/update_components() - radio = locate() in src - camera = locate() in src - software = locate() in src - -/obj/item/mech_component/sensors/proc/get_sight(powered) - var/flags = 0 - if(total_damage >= 0.8 * max_damage || !powered) - flags |= BLIND - else if(active_sensors && powered) - flags |= vision_flags - - return flags - -/obj/item/mech_component/sensors/proc/get_invisible(powered) - var/invisible = 0 - if((total_damage <= 0.8 * max_damage) && active_sensors && powered) - invisible = see_invisible - return invisible - - - -/obj/item/mech_component/sensors/ready_to_install() - return (radio && camera) - -/obj/item/mech_component/sensors/attackby(var/obj/item/thing, var/mob/user) - if(istype(thing, /obj/item/mech_component/control_module)) - if(software) - to_chat(user, SPAN_WARNING("\The [src] already has a control modules installed.")) - return - if(install_component(thing, user)) software = thing - else if(istype(thing,/obj/item/robot_parts/robot_component/radio)) - if(radio) - to_chat(user, SPAN_WARNING("\The [src] already has a radio installed.")) - return - if(install_component(thing, user)) radio = thing - else if(istype(thing,/obj/item/robot_parts/robot_component/camera)) - if(camera) - to_chat(user, SPAN_WARNING("\The [src] already has a camera installed.")) - return - if(install_component(thing, user)) camera = thing - else - return ..() - -/obj/item/mech_component/sensors/return_diagnostics(mob/user) - ..() - if(software) - to_chat(user, SPAN_NOTICE(" Installed Software")) - for(var/exosystem_software in software.installed_software) - to_chat(user, SPAN_NOTICE(" - [capitalize(exosystem_software)]")) - else - to_chat(user, SPAN_WARNING(" Control Module Missing or Non-functional.")) - if(radio) - to_chat(user, SPAN_NOTICE(" Radio Integrity: [round((((radio.max_dam - radio.total_dam) / radio.max_dam)) * 100)]%")) - else - to_chat(user, SPAN_WARNING(" Radio Missing or Non-functional.")) - if(camera) - to_chat(user, SPAN_NOTICE(" Camera Integrity: [round((((camera.max_dam - camera.total_dam) / camera.max_dam)) * 100)]%")) - else - to_chat(user, SPAN_WARNING(" Camera Missing or Non-functional.")) - - -/obj/item/mech_component/control_module - name = "exosuit control module" - desc = "A clump of circuitry and software chip docks, used to program exosuits." - icon_state = "control" - icon = 'icons/mecha/mech_equipment.dmi' - gender = NEUTER - color = COLOR_WHITE - var/list/installed_software = list() - var/max_installed_software = 2 - -/obj/item/mech_component/control_module/examine(mob/user) - . = ..() - to_chat(user, SPAN_NOTICE("It has [max_installed_software - LAZYLEN(installed_software)] empty slot\s remaining out of [max_installed_software].")) - -/obj/item/mech_component/control_module/attackby(var/obj/item/thing, var/mob/user) - - if(istype(thing, /obj/item/circuitboard/exosystem)) - install_software(thing, user) - return - - if(isScrewdriver(thing)) - var/result = ..() - update_software() - return result - else - return ..() - -/obj/item/mech_component/control_module/proc/install_software(var/obj/item/circuitboard/exosystem/software, var/mob/user) - if(installed_software.len >= max_installed_software) - if(user) - to_chat(user, SPAN_WARNING("\The [src] can only hold [max_installed_software] software modules.")) - return - if(user && !user.unEquip(software)) - return - - if(user) - to_chat(user, SPAN_NOTICE("You load \the [software] into \the [src]'s memory.")) - - software.forceMove(src) - update_software() - -/obj/item/mech_component/control_module/proc/update_software() - installed_software = list() - for(var/obj/item/circuitboard/exosystem/program in contents) - installed_software |= program.contains_software - - -/obj/item/mech_component/sensors/powerloader - name = "exosuit sensors" - gender = PLURAL - exosuit_desc_string = "simple collision detection sensors" - desc = "A primitive set of sensors designed to work in tandem with most MKI Eyeball platforms." - max_damage = 100 - power_use = 0 - -/obj/item/mech_component/sensors/powerloader/prebuild() - ..() - software = new(src) - software.installed_software = list(MECH_SOFTWARE_UTILITY, MECH_SOFTWARE_ENGINEERING) - -/obj/item/mech_component/sensors/light - name = "light sensors" - gender = PLURAL - exosuit_desc_string = "advanced sensor array" - icon_state = "light_head" - max_damage = 30 - vision_flags = SEE_TURFS - see_invisible = SEE_INVISIBLE_NOLIGHTING - power_use = 50 - desc = "A series of high resolution optical sensors. They can overlay several images to give the pilot a sense of location even in total darkness. " - -/obj/item/mech_component/sensors/light/prebuild() - ..() - software = new(src) - software.installed_software = list(MECH_SOFTWARE_UTILITY, MECH_SOFTWARE_MEDICAL) - -/obj/item/mech_component/sensors/heavy - name = "heavy sensors" - exosuit_desc_string = "a reinforced monoeye" - desc = "A solitary sensor moves inside a recessed slit in the armour plates." - icon_state = "heavy_head" - max_damage = 120 - power_use = 0 - -/obj/item/mech_component/sensors/heavy/prebuild() - ..() - software = new(src) - software.installed_software = list(MECH_SOFTWARE_WEAPONS) - -/obj/item/mech_component/sensors/combat - name = "combat sensors" - gender = PLURAL - exosuit_desc_string = "high-resolution thermal sensors" - icon_state = "combat_head" - vision_flags = SEE_MOBS - see_invisible = SEE_INVISIBLE_NOLIGHTING - power_use = 200 - -/obj/item/mech_component/sensors/combat/prebuild() - ..() - software = new(src) - software.installed_software = list(MECH_SOFTWARE_WEAPONS) \ No newline at end of file diff --git a/code/modules/mechs/components/legs.dm b/code/modules/mechs/components/legs.dm deleted file mode 100644 index 2dacc9dbc55e9..0000000000000 --- a/code/modules/mechs/components/legs.dm +++ /dev/null @@ -1,125 +0,0 @@ -/obj/item/mech_component/propulsion - name = "legs" - pixel_y = 12 - icon_state = "loader_legs" - var/move_delay = 5 - var/turn_delay = 5 - var/obj/item/robot_parts/robot_component/actuator/motivator - power_use = 50 - var/max_fall_damage = 30 - -/obj/item/mech_component/propulsion/Destroy() - QDEL_NULL(motivator) - . = ..() - -/obj/item/mech_component/propulsion/show_missing_parts(var/mob/user) - if(!motivator) - to_chat(user, SPAN_WARNING("It is missing an actuator.")) - -/obj/item/mech_component/propulsion/ready_to_install() - return motivator - -/obj/item/mech_component/propulsion/update_components() - motivator = locate() in src - -/obj/item/mech_component/propulsion/attackby(var/obj/item/thing, var/mob/user) - if(istype(thing,/obj/item/robot_parts/robot_component/actuator)) - if(motivator) - to_chat(user, SPAN_WARNING("\The [src] already has an actuator installed.")) - return - if(install_component(thing, user)) motivator = thing - else - return ..() - -/obj/item/mech_component/propulsion/prebuild() - motivator = new(src) - -/obj/item/mech_component/propulsion/proc/can_move_on(var/turf/location, var/turf/target_loc) - if(!location) //Unsure on how that'd even work - return 0 - if(!istype(location)) - return 1 // Inside something, assume you can get out. - if(!istype(target_loc)) - return 0 // What are you even doing. - return 1 - -/obj/item/mech_component/propulsion/get_damage_string() - if(!motivator || !motivator.is_functional()) - return SPAN_DANGER("disabled") - return ..() - -/obj/item/mech_component/propulsion/return_diagnostics(mob/user) - ..() - if(motivator) - to_chat(user, SPAN_NOTICE(" Actuator Integrity: [round((((motivator.max_dam - motivator.total_dam) / motivator.max_dam)) * 100)]%")) - else - to_chat(user, SPAN_WARNING(" Actuator Missing or Non-functional.")) - -//Expand here if the legs increase, reduce or otherwise affect fall damage for exosuit -/obj/item/mech_component/propulsion/proc/handle_vehicle_fall() - if(max_fall_damage > 0) - var/mob/living/exosuit/E = loc - if(istype(E)) //route it through exosuit for proper handling - E.apply_damage(rand(0, max_fall_damage), DAMAGE_BRUTE, BP_R_LEG) //Any leg is good, will damage us correctly - -/obj/item/mech_component/propulsion/powerloader - name = "exosuit legs" - exosuit_desc_string = "reinforced hydraulic legs" - desc = "Wide and stable but not particularly fast." - max_damage = 70 - move_delay = 4 - turn_delay = 4 - power_use = 10 - -/obj/item/mech_component/propulsion/light - name = "light legs" - exosuit_desc_string = "flexible electromechanic legs" - icon_state = "light_legs" - move_delay = 2 - turn_delay = 3 - max_damage = 40 - power_use = 5 - desc = "These Odysseus series legs are built from lightweight flexible polymers, making them capable of handling falls from up to 120 meters in 1g environments. Provided that the exosuit lands on its feet." - max_fall_damage = 0 - -/obj/item/mech_component/propulsion/light/handle_vehicle_fall() - ..() - visible_message(SPAN_NOTICE("\The [src] creak as they absorb the impact.")) - -/obj/item/mech_component/propulsion/spider - name = "quadlegs" - exosuit_desc_string = "hydraulic quadlegs" - desc = "Xion Industrial's arachnid series boasts more leg per leg than the leading competitor." - icon_state = "spiderlegs" - max_damage = 80 - move_delay = 4 - turn_delay = 1 - power_use = 25 - -/obj/item/mech_component/propulsion/tracks - name = "tracks" - exosuit_desc_string = "armored tracks" - desc = "A classic brought back. The Hephaestus' Landmaster class tracks are impervious to most damage and can maintain top speed regardless of load. Watch out for corners." - icon_state = "tracks" - max_damage = 150 - move_delay = 2 //It´s fast - turn_delay = 7 - power_use = 150 - -/obj/item/mech_component/propulsion/heavy - name = "heavy legs" - exosuit_desc_string = "heavy hydraulic legs" - desc = "Oversized actuators struggle to move these armoured legs. " - icon_state = "heavy_legs" - move_delay = 5 - turn_delay = 5 - max_damage = 160 - power_use = 100 - -/obj/item/mech_component/propulsion/combat - name = "combat legs" - exosuit_desc_string = "sleek hydraulic legs" - icon_state = "combat_legs" - move_delay = 3 - turn_delay = 3 - power_use = 20 diff --git a/code/modules/mechs/components/software.dm b/code/modules/mechs/components/software.dm deleted file mode 100644 index 90bcaa2811d81..0000000000000 --- a/code/modules/mechs/components/software.dm +++ /dev/null @@ -1,33 +0,0 @@ -#define T_BOARD_MECH(name) "exosuit software (" + (name) + ")" - -/obj/item/circuitboard/exosystem - name = "exosuit software template" - icon = 'icons/obj/module.dmi' - icon_state = "std_mod" - item_state = "electronic" - var/list/contains_software = list() - -/obj/item/circuitboard/exosystem/engineering - name = T_BOARD_MECH("engineering systems") - contains_software = list(MECH_SOFTWARE_ENGINEERING) - origin_tech = list(TECH_DATA = 1) - -/obj/item/circuitboard/exosystem/utility - name = T_BOARD_MECH("utility systems") - contains_software = list(MECH_SOFTWARE_UTILITY) - icon_state = "mcontroller" - origin_tech = list(TECH_DATA = 1) - -/obj/item/circuitboard/exosystem/medical - name = T_BOARD_MECH("medical systems") - contains_software = list(MECH_SOFTWARE_MEDICAL) - icon_state = "mcontroller" - origin_tech = list(TECH_DATA = 3,TECH_BIO = 2) - -/obj/item/circuitboard/exosystem/weapons - name = T_BOARD_MECH("basic weapon systems") - contains_software = list(MECH_SOFTWARE_WEAPONS) - icon_state = "mainboard" - origin_tech = list(TECH_DATA = 4, TECH_COMBAT = 3) - -#undef T_BOARD_MECH \ No newline at end of file diff --git a/code/modules/mechs/equipment/_equipment.dm b/code/modules/mechs/equipment/_equipment.dm deleted file mode 100644 index 956e7dfbc5a93..0000000000000 --- a/code/modules/mechs/equipment/_equipment.dm +++ /dev/null @@ -1,148 +0,0 @@ -// Defining all of this here so it's centralized. -// Used by the exosuit HUD to get a 1-10 value representing charge, ammo, etc. -/obj/item/mech_equipment - name = "exosuit hardpoint system" - icon = 'icons/mecha/mech_equipment.dmi' - icon_state = "" - matter = list(MATERIAL_STEEL = 10000, MATERIAL_PLASTIC = 5000, MATERIAL_OSMIUM = 500) - force = 10 - - var/list/restricted_hardpoints - var/mob/living/exosuit/owner - var/list/restricted_software - var/equipment_delay = 0 - var/active_power_use = 1 KILOWATTS // How much does it consume to perform and accomplish usage - var/passive_power_use = 0 // For gear that for some reason takes up power even if it's supposedly doing nothing (mech will idly consume power) - var/mech_layer = MECH_GEAR_LAYER //For the part where it's rendered as mech gear - var/require_adjacent = TRUE - var/active = FALSE //For gear that has an active state (ie, floodlights) - -/obj/item/mech_equipment/attack(mob/living/M, mob/living/user, target_zone) //Generally it's not desired to be able to attack with items - return 0 - -/obj/item/mech_equipment/afterattack(var/atom/target, var/mob/living/user, var/inrange, var/params) - if(require_adjacent) - if(!inrange) - return 0 - if (owner && loc == owner && ((user in owner.pilots) || user == owner)) - if(target in owner.contents) - return 0 - - if(!(owner.get_cell()?.check_charge(active_power_use * CELLRATE))) - to_chat(user, SPAN_WARNING("The power indicator flashes briefly as you attempt to use \the [src]")) - return 0 - return 1 - else - return 0 - -/obj/item/mech_equipment/attack_self(var/mob/user) - if (owner && loc == owner && ((user in owner.pilots) || user == owner)) - if(!(owner.get_cell()?.check_charge(active_power_use * CELLRATE))) - to_chat(user, SPAN_WARNING("The power indicator flashes briefly as you attempt to use \the [src]")) - return 0 - return 1 - else - return 0 - -/obj/item/mech_equipment/examine(mob/user, distance) - . = ..() - if(user.skill_check(SKILL_DEVICES, SKILL_BASIC)) - if(length(restricted_software)) - to_chat(user, SPAN_SUBTLE("It seems it would require [english_list(restricted_software)] to be used.")) - if(length(restricted_hardpoints)) - to_chat(user, SPAN_SUBTLE("You figure it could be mounted in the [english_list(restricted_hardpoints)].")) - -/obj/item/mech_equipment/proc/deactivate() - active = FALSE - return - -/obj/item/mech_equipment/proc/installed(var/mob/living/exosuit/_owner) - owner = _owner - //generally attached. Nothing should be able to grab it - canremove = FALSE - -/obj/item/mech_equipment/proc/uninstalled() - if(active) - deactivate() - owner = null - canremove = TRUE - -/obj/item/mech_equipment/proc/wreck() //Module has been destroyed - return - -/obj/item/mech_equipment/Destroy() - owner = null - . = ..() - -/obj/item/mech_equipment/proc/get_effective_obj() - return src - -/obj/item/mech_equipment/proc/MouseDragInteraction(src_object, over_object, src_location, over_location, src_control, over_control, params, var/mob/user) - //Get intent updated - if(user != owner) - owner.a_intent = user.a_intent - if(user.zone_sel) - owner.zone_sel.set_selected_zone(user.zone_sel.selecting) - else - owner.zone_sel.set_selected_zone(BP_CHEST) - -/obj/item/mech_equipment/mob_can_unequip(mob/M, slot, disable_warning) - . = ..() - if(. && owner) - //Installed equipment shall not be unequiped. - return FALSE - -/obj/item/mech_equipment/mounted_system - var/holding_type - var/obj/item/holding - -/obj/item/mech_equipment/mounted_system/attack_self(var/mob/user) - . = ..() - if(. && holding) - return holding.attack_self(user) - -/obj/item/mech_equipment/mounted_system/proc/forget_holding() - if(holding) //It'd be strange for this to be called with this var unset - GLOB.destroyed_event.unregister(holding, src, .proc/forget_holding) - holding = null - qdel(src) - -/obj/item/mech_equipment/mounted_system/Initialize() - . = ..() - if(holding_type) - holding = new holding_type(src) - GLOB.destroyed_event.register(holding, src, .proc/forget_holding) - if(holding) - if(!icon_state) - icon = holding.icon - icon_state = holding.icon_state - SetName(holding.name) - desc = "[holding.desc] This one is suitable for installation on an exosuit." - - -/obj/item/mech_equipment/mounted_system/Destroy() - GLOB.destroyed_event.unregister(holding, src, .proc/forget_holding) - if(holding) - QDEL_NULL(holding) - . = ..() - - -/obj/item/mech_equipment/mounted_system/get_effective_obj() - return (holding ? holding : src) - -/obj/item/mech_equipment/mounted_system/get_hardpoint_status_value() - return (holding ? holding.get_hardpoint_status_value() : null) - -/obj/item/mech_equipment/mounted_system/get_hardpoint_maptext() - return (holding ? holding.get_hardpoint_maptext() : null) - -/obj/item/proc/get_hardpoint_status_value() - return null - -/obj/item/proc/get_hardpoint_maptext() - return null - -/obj/item/mech_equipment/mounted_system/get_cell() - if(owner && loc == owner) - return owner.get_cell() - return null diff --git a/code/modules/mechs/equipment/combat.dm b/code/modules/mechs/equipment/combat.dm deleted file mode 100644 index 1797a930a97fb..0000000000000 --- a/code/modules/mechs/equipment/combat.dm +++ /dev/null @@ -1,608 +0,0 @@ -/obj/item/mech_equipment/mounted_system/taser - name = "mounted burst electrolaser carbine" - desc = "A dual fire mode burst electrolaser system connected to the exosuit's targetting system." - icon_state = "mech_taser" - holding_type = /obj/item/gun/energy/taser/carbine/mounted/mech - restricted_hardpoints = list(HARDPOINT_LEFT_HAND, HARDPOINT_RIGHT_HAND) - restricted_software = list(MECH_SOFTWARE_WEAPONS) - -/obj/item/mech_equipment/mounted_system/taser/MouseDragInteraction(src_object, over_object, src_location, over_location, src_control, over_control, params, var/mob/user) - . = ..() - - if(over_object) - var/obj/item/gun/gun = holding - if(istype(gun) && gun.can_autofire()) - gun.Fire(get_turf(over_object), owner, params, (get_dist(over_object, owner) <= 1), FALSE) - -/obj/item/mech_equipment/mounted_system/taser/ion - name = "mounted ion rifle" - desc = "An exosuit-mounted ion rifle. Handle with care." - icon_state = "mech_ionrifle" - holding_type = /obj/item/gun/energy/ionrifle/mounted/mech - -/obj/item/mech_equipment/mounted_system/taser/laser - name = "\improper CH-PS \"Immolator\" laser" - desc = "An exosuit-mounted laser rifle. Handle with care." - icon_state = "mech_lasercarbine" - holding_type = /obj/item/gun/energy/lasercannon/mounted/mech - -/obj/item/gun/energy/taser/carbine/mounted/mech - use_external_power = TRUE - has_safety = FALSE - self_recharge = TRUE - burst = 3 - burst_delay = 3 - -/obj/item/gun/energy/ionrifle/mounted/mech - use_external_power = TRUE - has_safety = FALSE - self_recharge = TRUE - -/obj/item/gun/energy/lasercannon/mounted/mech - name = "\improper CH-PS \"Immolator\" laser" - use_external_power = TRUE - has_safety = FALSE - self_recharge = TRUE - fire_delay = 15 - accuracy = 2 - -/obj/item/gun/energy/get_hardpoint_maptext() - if (charge_cost <= 0) - return "INF" - return "[round(power_supply.charge / charge_cost)]/[max_shots]" - -/obj/item/gun/energy/get_hardpoint_status_value() - var/obj/item/cell/C = get_cell() - if(istype(C)) - return C.charge/C.maxcharge - return null - -/obj/item/mech_equipment/shields - name = "exosuit shield droid" - desc = "The Hephaestus Armature system is a well liked energy deflector system designed to stop any projectile before it has a chance to become a threat." - icon_state = "shield_droid" - var/obj/aura/mechshield/aura = null - var/max_charge = 150 - var/charge = 150 - var/last_recharge = 0 - var/charging_rate = 7500 * CELLRATE - var/cooldown = 3.5 SECONDS //Time until we can recharge again after a blocked impact - restricted_hardpoints = list(HARDPOINT_BACK) - restricted_software = list(MECH_SOFTWARE_WEAPONS) - -/obj/item/mech_equipment/shields/installed(var/mob/living/exosuit/_owner) - . = ..() - aura = new(owner, src) - -/obj/item/mech_equipment/shields/uninstalled() - QDEL_NULL(aura) - . = ..() - -/obj/item/mech_equipment/shields/attack_self(var/mob/user) - . = ..() - if(.) - toggle() - -/obj/item/mech_equipment/shields/proc/stop_damage(var/damage) - var/difference = damage - charge - charge = clamp(charge - damage, 0, max_charge) - - last_recharge = world.time - - if(difference > 0) - for(var/mob/pilot in owner.pilots) - to_chat(pilot, SPAN_DANGER("Warning: Deflector shield failure detect, shutting down")) - toggle() - playsound(owner.loc,'sound/mecha/internaldmgalarm.ogg',35,1) - return difference - else return 0 - -/obj/item/mech_equipment/shields/proc/toggle() - if(!aura) - return - aura.toggle() - playsound(owner,'sound/weapons/flash.ogg',35,1) - update_icon() - if(aura.active) - START_PROCESSING(SSobj, src) - else - STOP_PROCESSING(SSobj, src) - active = aura.active - passive_power_use = active ? 1 KILOWATTS : 0 - owner.update_icon() - -/obj/item/mech_equipment/shields/deactivate() - if(active) - toggle() - ..() - -/obj/item/mech_equipment/shields/on_update_icon() - . = ..() - if(!aura) - return - if(aura.active) - icon_state = "shield_droid_a" - else - icon_state = "shield_droid" - -/obj/item/mech_equipment/shields/Process() - if(charge >= max_charge) - return - if((world.time - last_recharge) < cooldown) - return - var/obj/item/cell/cell = owner.get_cell() - - var/actual_required_power = clamp(max_charge - charge, 0, charging_rate) - - if(cell) - charge += cell.use(actual_required_power) - -/obj/item/mech_equipment/shields/get_hardpoint_status_value() - return charge / max_charge - -/obj/item/mech_equipment/shields/get_hardpoint_maptext() - return "[(aura && aura.active) ? "ONLINE" : "OFFLINE"]: [round((charge / max_charge) * 100)]%" - -/obj/aura/mechshield - icon = 'icons/mecha/shield.dmi' - name = "mechshield" - var/obj/item/mech_equipment/shields/shields = null - var/active = 0 - layer = ABOVE_HUMAN_LAYER - var/north_layer = MECH_UNDER_LAYER - plane = DEFAULT_PLANE - pixel_x = 8 - pixel_y = 4 - mouse_opacity = 0 - -/obj/aura/mechshield/Initialize(var/maploading, var/obj/item/mech_equipment/shields/holder) - . = ..() - shields = holder - -/obj/aura/mechshield/added_to(var/mob/living/target) - . = ..() - target.vis_contents += src - set_dir() - GLOB.dir_set_event.register(user, src, /obj/aura/mechshield/proc/update_dir) - -/obj/aura/mechshield/proc/update_dir(var/user, var/old_dir, var/dir) - set_dir(dir) - -/obj/aura/mechshield/set_dir(new_dir) - . = ..() - if(dir == NORTH) - layer = north_layer - else layer = initial(layer) - -/obj/aura/mechshield/Destroy() - if(user) - GLOB.dir_set_event.unregister(user, src, /obj/aura/mechshield/proc/update_dir) - user.vis_contents -= src - shields = null - . = ..() - -/obj/aura/mechshield/proc/toggle() - active = !active - - update_icon() - - if(active) - flick("shield_raise", src) - else - flick("shield_drop", src) - - -/obj/aura/mechshield/on_update_icon() - . = ..() - if(active) - icon_state = "shield" - else - icon_state = "shield_null" - -/obj/aura/mechshield/bullet_act(var/obj/item/projectile/P, var/def_zone) - if(!active) - return - if(shields) - if(shields.charge) - P.damage = shields.stop_damage(P.damage) - user.visible_message(SPAN_WARNING("\The [shields.owner]'s shields flash and crackle.")) - flick("shield_impact", src) - playsound(user,'sound/effects/basscannon.ogg',35,1) - //light up the night. - new /obj/effect/effect/smoke/illumination(user.loc, 5, 4, 1, "#ffffff") - if(P.damage <= 0) - return AURA_FALSE|AURA_CANCEL - - var/datum/effect/effect/system/spark_spread/spark_system = new /datum/effect/effect/system/spark_spread() - spark_system.set_up(5, 0, user) - spark_system.start() - playsound(loc, "sparks", 25, 1) - -/obj/aura/mechshield/hitby(atom/movable/M, var/datum/thrownthing/TT) - . = ..() - if(!active) - return - if(shields.charge && TT.speed <= 5) - user.visible_message(SPAN_WARNING("\The [shields.owner]'s shields flash briefly as they deflect \the [M].")) - flick("shield_impact", src) - playsound(user,'sound/effects/basscannon.ogg',10,1) - return AURA_FALSE|AURA_CANCEL - //Too fast! - -//Melee! As a general rule I would recommend using regular objects and putting logic in them. -/obj/item/mech_equipment/mounted_system/melee - restricted_hardpoints = list(HARDPOINT_LEFT_HAND, HARDPOINT_RIGHT_HAND) - restricted_software = list(MECH_SOFTWARE_UTILITY) - -/obj/item/material/hatchet/machete/mech - name = "Mechete" - desc = "That thing was too big to be called a machete. Too big, too thick, too heavy, and too rough, it was more like a large hunk of iron." - w_class = ITEM_SIZE_GARGANTUAN - slot_flags = 0 - default_material = MATERIAL_STEEL - base_parry_chance = 0 //Irrelevant for exosuits, revise if this changes - max_force = 25 - force_multiplier = 0.75 // Equals 20 AP with 25 force - unbreakable = TRUE //Else we need a whole system for replacement blades - attack_cooldown_modifier = 10 - -/obj/item/material/hatchet/machete/mech/apply_hit_effect(mob/living/target, mob/living/user, hit_zone) - . = ..() - if (.) - do_attack_effect(target, "smash") - if (target.mob_size < user.mob_size) //Damaging attacks overwhelm smaller mobs - target.throw_at(get_edge_target_turf(target,get_dir(user, target)),1, 1) - -/obj/item/material/hatchet/machete/mech/resolve_attackby(atom/A, mob/user, click_params) - //Case 1: Default, you are hitting something that isn't a mob. Just do whatever, this isn't dangerous or op. - if (!istype(A, /mob/living)) - return ..() - - if (user.a_intent == I_HURT) - user.visible_message(SPAN_DANGER("\The [user] swings \the [src] at \the [A]!")) - playsound(user, 'sound/mecha/mechmove03.ogg', 35, 1) - return ..() - -/obj/item/material/hatchet/machete/mech/attack_self(mob/living/user) - . = ..() - if (user.a_intent != I_HURT) - return - var/obj/item/mech_equipment/mounted_system/melee/mechete/MC = loc - if (istype(MC)) - //SPIN BLADE ATTACK GO! - var/mob/living/exosuit/E = MC.owner - if (E) - E.setClickCooldown(1.35 SECONDS) - E.visible_message(SPAN_DANGER("\The [E] swings \the [src] back, preparing for an attack!"), blind_message = SPAN_DANGER("You hear the loud hissing of hydraulics!")) - playsound(E, 'sound/mecha/mechmove03.ogg', 35, 1) - if (do_after(E, 1.2 SECONDS, get_turf(user), DO_DEFAULT | DO_USER_UNIQUE_ACT | DO_PUBLIC_PROGRESS) && E && MC) - for (var/mob/living/M in orange(1, E)) - attack(M, E, E.zone_sel.selecting, FALSE) - E.spin(0.65 SECONDS, 0.125 SECONDS) - playsound(E, 'sound/mecha/mechturn.ogg', 40, 1) - -/obj/item/mech_equipment/mounted_system/melee/mechete - icon_state = "mech_blade" - holding_type = /obj/item/material/hatchet/machete/mech - - -//Ballistic shield -/obj/item/mech_equipment/ballistic_shield - name = "exosuit ballistic shield" - desc = "The Hephaestus Bulwark is a formidable line of defense that sees widespread use in planetary peacekeeping operations and military formations alike." - icon_state = "mech_shield" //Rendering is handled by aura due to layering issues: TODO, figure out a better way to do this - var/obj/aura/mech_ballistic/aura = null - var/last_push = 0 - var/chance = 60 //For attacks from the front, diminishing returns - var/last_max_block = 0 //Blocking during a perfect block window resets this, else there is an anti spam - var/max_block = 60 // Should block most things - var/blocking = FALSE - restricted_hardpoints = list(HARDPOINT_LEFT_HAND, HARDPOINT_RIGHT_HAND) - restricted_software = list(MECH_SOFTWARE_UTILITY) - -/obj/item/mech_equipment/ballistic_shield/installed(mob/living/exosuit/_owner) - . = ..() - aura = new(owner, src) - -/obj/item/mech_equipment/ballistic_shield/uninstalled() - QDEL_NULL(aura) - . = ..() - -/obj/item/mech_equipment/ballistic_shield/afterattack(atom/target, mob/living/user, inrange, params) - . = ..() - if (.) - if (user.a_intent == I_HURT ) - if (last_push + 1.6 SECONDS < world.time) - owner.visible_message(SPAN_WARNING("\The [owner] retracts \the [src], preparing to push with it!"), blind_message = SPAN_WARNING("You hear the whine of hydraulics and feel a rush of air!")) - owner.setClickCooldown(0.7 SECONDS) - last_push = world.time - if (do_after(owner, 0.5 SECONDS, get_turf(owner), DO_DEFAULT | DO_USER_UNIQUE_ACT | DO_PUBLIC_PROGRESS) && owner) - owner.visible_message(SPAN_WARNING("\The [owner] slams the area in front \the [src]!"), blind_message = SPAN_WARNING("You hear a loud hiss and feel a strong gust of wind!")) - playsound(src ,'sound/effects/bang.ogg',35,1) - var/list/turfs = list() - var/front = get_step(get_turf(owner), owner.dir) - turfs += front - turfs += get_step(front, turn(owner.dir, -90)) - turfs += get_step(front, turn(owner.dir, 90)) - for(var/turf/T in turfs) - for(var/mob/living/M in T) - if (!M.Adjacent(owner)) - continue - M.attack_generic(owner, (owner.arms ? owner.arms.melee_damage * 1.2 : 0), "slammed") - M.throw_at(get_edge_target_turf(owner ,owner.dir),5, 2) - do_attack_effect(T, "smash") - -/obj/item/mech_equipment/ballistic_shield/attack_self(mob/user) - . = ..() - if (.) //FORM A SHIELD WALL! - if (last_max_block + 2 SECONDS < world.time) - owner.visible_message(SPAN_WARNING("\The [owner] raises \the [src], locking it in place!"), blind_message = SPAN_WARNING("You hear the whir of motors and scratching metal!")) - playsound(src ,'sound/effects/bamf.ogg',35,1) - owner.setClickCooldown(0.8 SECONDS) - blocking = TRUE - last_max_block = world.time - do_after(owner, 0.75 SECONDS, get_turf(user), DO_DEFAULT | DO_USER_UNIQUE_ACT | DO_PUBLIC_PROGRESS) - blocking = FALSE - else - to_chat(user, SPAN_WARNING("You are not ready to block again!")) - -/obj/item/mech_equipment/ballistic_shield/proc/block_chance(damage, pen, atom/source, mob/attacker) - if (damage > max_block || pen > max_block) - return 0 - else - var/effective_block = blocking ? chance * 1.5 : chance - - var/conscious_pilot_exists = FALSE - for (var/mob/living/pilot in owner.pilots) - if (!pilot.incapacitated()) - conscious_pilot_exists = TRUE - break - - if (!conscious_pilot_exists) - effective_block *= 0.5 //Who is going to block anything? - - //Bit copypasta but I am doing something different from normal shields - var/attack_dir = 0 - if (istype(source, /obj/item/projectile)) - var/obj/item/projectile/P = source - attack_dir = get_dir(get_turf(src), P.starting) - else if (attacker) - attack_dir = get_dir(get_turf(src), get_turf(attacker)) - else if (source) - attack_dir = get_dir(get_turf(src), get_turf(source)) - - if (attack_dir == turn(owner.dir, -90) || attack_dir == turn(owner.dir, 90)) - effective_block *= 0.8 - else if (attack_dir == turn(owner.dir, 180)) - effective_block = 0 - - return effective_block - -/obj/item/mech_equipment/ballistic_shield/proc/on_block_attack() - if (blocking) - //Reset timer for maximum chainblocks - last_max_block = 0 - -/obj/aura/mech_ballistic - icon = 'icons/mecha/ballistic_shield.dmi' - name = "mech_ballistic_shield" - var/obj/item/mech_equipment/ballistic_shield/shield = null - layer = MECH_UNDER_LAYER - plane = DEFAULT_PLANE - mouse_opacity = 0 - -/obj/aura/mech_ballistic/Initialize(maploading, obj/item/mech_equipment/ballistic_shield/holder) - . = ..() - shield = holder - - //Get where we are attached so we know what icon to use - if (holder && holder.owner) - var/mob/living/exosuit/E = holder.owner - for (var/hardpoint in E.hardpoints) - var/obj/item/mech_equipment/hardpoint_object = E.hardpoints[hardpoint] - if (holder == hardpoint_object) - icon_state = "mech_shield_[hardpoint]" - var/image/I = image(icon, "[icon_state]_over") - I.layer = ABOVE_HUMAN_LAYER - overlays.Add(I) - -/obj/aura/mech_ballistic/added_to(mob/living/target) - . = ..() - target.vis_contents += src - set_dir() - GLOB.dir_set_event.register(user, src, /obj/aura/mech_ballistic/proc/update_dir) - -/obj/aura/mech_ballistic/proc/update_dir(user, old_dir, dir) - set_dir(dir) - -/obj/aura/mech_ballistic/Destroy() - if (user) - GLOB.dir_set_event.unregister(user, src, /obj/aura/mech_ballistic/proc/update_dir) - user.vis_contents -= src - shield = null - . = ..() - -/obj/aura/mech_ballistic/bullet_act(obj/item/projectile/P, def_zone) - . = ..() - if (shield) - if (prob(shield.block_chance(P.damage, P.armor_penetration, source = P))) - user.visible_message(SPAN_WARNING("\The [P] is blocked by \the [user]'s [shield].")) - user.bullet_impact_visuals(P, def_zone, 0) - return AURA_FALSE|AURA_CANCEL - -/obj/aura/mech_ballistic/hitby(atom/movable/M, datum/thrownthing/TT) - . = ..() - if (shield) - var/throw_damage = 0 - if (isobj(M)) - var/obj/O = M - throw_damage = O.throwforce*(TT.speed/THROWFORCE_SPEED_DIVISOR) - - if (prob(shield.block_chance(throw_damage, 0, source = M, attacker = TT.thrower))) - user.visible_message(SPAN_WARNING("\The [M] bounces off \the [user]'s [shield].")) - playsound(user.loc, 'sound/weapons/Genhit.ogg', 50, 1) - return AURA_FALSE|AURA_CANCEL - -/obj/aura/mech_ballistic/attackby(obj/item/I, mob/user) - . = ..() - if (shield) - if (prob(shield.block_chance(I.force, I.armor_penetration, source = I, attacker = user))) - user.visible_message(SPAN_WARNING("\The [I] is blocked by \the [user]'s [shield].")) - playsound(user.loc, 'sound/weapons/Genhit.ogg', 50, 1) - return AURA_FALSE|AURA_CANCEL - -/obj/item/mech_equipment/flash - name = "exosuit flash" - icon_state = "mech_flash" - var/flash_min = 7 - var/flash_max = 9 - var/flash_range = 3 - restricted_hardpoints = list(HARDPOINT_LEFT_SHOULDER, HARDPOINT_RIGHT_SHOULDER) - restricted_software = list(MECH_SOFTWARE_WEAPONS) - active_power_use = 7 KILOWATTS - var/next_use = 0 - origin_tech = list(TECH_MAGNET = 2, TECH_COMBAT = 2) - -/obj/item/mech_equipment/flash/proc/area_flash() - playsound(src.loc, 'sound/weapons/flash.ogg', 100, 1) - var/flash_time = (rand(flash_min,flash_max) - 1) - - var/obj/item/cell/C = owner.get_cell() - C.use(active_power_use * CELLRATE) - - for (var/mob/living/O in oviewers(flash_range, owner)) - if(istype(O)) - var/protection = O.eyecheck() - if(protection >= FLASH_PROTECTION_MODERATE) - return - - if(protection >= FLASH_PROTECTION_MINOR) - flash_time /= 2 - - if(ishuman(O)) - var/mob/living/carbon/human/H = O - flash_time = round(H.getFlashMod() * flash_time) - if(flash_time <= 0) - return - - if(!O.blinded) - O.flash_eyes(FLASH_PROTECTION_MODERATE - protection) - O.eye_blurry += flash_time - O.confused += (flash_time + 2) - -/obj/item/mech_equipment/flash/attack_self(mob/user) - . = ..() - if(.) - if(world.time < next_use) - to_chat(user, SPAN_WARNING("\The [src] is recharging!")) - return - next_use = world.time + 20 - area_flash() - owner.setClickCooldown(5) - -/obj/item/mech_equipment/flash/afterattack(atom/target, mob/living/user, inrange, params) - . = ..() - if(.) - if(world.time < next_use) - to_chat(user, SPAN_WARNING("\The [src] is recharging!")) - return - var/mob/living/O = target - owner.setClickCooldown(5) - next_use = world.time + 15 - - if(istype(O)) - - playsound(src.loc, 'sound/weapons/flash.ogg', 100, 1) - var/flash_time = (rand(flash_min,flash_max)) - - var/obj/item/cell/C = owner.get_cell() - C.use(active_power_use * CELLRATE) - - var/protection = O.eyecheck() - if(protection >= FLASH_PROTECTION_MAJOR) - return - - if(protection >= FLASH_PROTECTION_MODERATE) - flash_time /= 2 - - if(ishuman(O)) - var/mob/living/carbon/human/H = O - flash_time = round(H.getFlashMod() * flash_time) - if(flash_time <= 0) - return - - if(!O.blinded) - O.flash_eyes(FLASH_PROTECTION_MAJOR - protection) - O.eye_blurry += flash_time - O.confused += (flash_time + 2) - - if(isanimal(O)) //Hit animals a bit harder - O.Stun(flash_time) - else - O.Stun(flash_time / 2) - - if(flash_time > 3) - O.drop_l_hand() - O.drop_r_hand() - if(flash_time > 5) - O.Weaken(3) - -/obj/item/flamethrower/full/mech - max_beaker = ITEM_SIZE_NORMAL - range = 5 - desc = "A Hephaestus brand 'Prometheus' flamethrower. Bigger and better." - -/obj/item/flamethrower/full/mech/Initialize() - . = ..() - beaker = new /obj/item/reagent_containers/chem_disp_cartridge(src) - -/obj/item/flamethrower/full/mech/get_hardpoint_maptext() - return beaker ? "[lit ? "ON" : "OFF"]-:-[beaker.reagents.total_volume]/[beaker.reagents.maximum_volume]" : "NO TANK" - -/obj/item/flamethrower/full/mech/get_hardpoint_status_value() - return beaker ? beaker.reagents.total_volume/beaker.reagents.maximum_volume : 0 - -/obj/item/mech_equipment/mounted_system/flamethrower - icon_state = "mech_flamer" - holding_type = /obj/item/flamethrower/full/mech - restricted_hardpoints = list(HARDPOINT_LEFT_HAND, HARDPOINT_RIGHT_HAND) - restricted_software = list(MECH_SOFTWARE_WEAPONS) - -/obj/item/mech_equipment/mounted_system/flamethrower/attack_self(mob/user) - . = ..() - if(owner && holding) - update_icon() - -/obj/item/mech_equipment/mounted_system/flamethrower/attackby(obj/item/W as obj, mob/user as mob) - if(!CanPhysicallyInteract(user)) return - - var/obj/item/flamethrower/full/mech/FM = holding - if(istype(FM)) - if(isCrowbar(W) && FM.beaker) - if(FM.beaker) - user.visible_message(SPAN_NOTICE("\The [user] pries out \the [FM.beaker] using \the [W].")) - FM.beaker.dropInto(get_turf(user)) - FM.beaker = null - return - - if (istype(W, /obj/item/reagent_containers) && W.is_open_container() && (W.w_class <= FM.max_beaker)) - if(FM.beaker) - to_chat(user, SPAN_NOTICE("There is already a tank inserted!")) - return - if(user.unEquip(W, FM)) - user.visible_message(SPAN_NOTICE("\The [user] inserts \the [W] inside \the [src].")) - FM.beaker = W - return - ..() - -/obj/item/mech_equipment/mounted_system/flamethrower/on_update_icon() - . = ..() - if(owner && holding) - var/obj/item/flamethrower/full/mech/FM = holding - if(istype(FM)) - if(FM.lit) - icon_state = "mech_flamer_lit" - else icon_state = "mech_flamer" - - if(owner) - owner.update_icon() diff --git a/code/modules/mechs/equipment/engineering.dm b/code/modules/mechs/equipment/engineering.dm deleted file mode 100644 index bdd016e4ebf7a..0000000000000 --- a/code/modules/mechs/equipment/engineering.dm +++ /dev/null @@ -1,172 +0,0 @@ -/obj/item/mech_equipment/mounted_system/rcd - icon_state = "mech_rcd" - holding_type = /obj/item/rcd/mounted - restricted_hardpoints = list(HARDPOINT_LEFT_HAND, HARDPOINT_RIGHT_HAND) - restricted_software = list(MECH_SOFTWARE_ENGINEERING) - -/obj/item/rcd/mounted/get_hardpoint_maptext() - var/obj/item/mech_equipment/mounted_system/MS = loc - if(istype(MS) && MS.owner) - var/obj/item/cell/C = MS.owner.get_cell() - if(istype(C)) - return "[round(C.charge)]/[round(C.maxcharge)]" - return null - -/obj/item/rcd/mounted/get_hardpoint_status_value() - var/obj/item/mech_equipment/mounted_system/MS = loc - if(istype(MS) && MS.owner) - var/obj/item/cell/C = MS.owner.get_cell() - if(istype(C)) - return C.charge/C.maxcharge - return null - -/obj/item/extinguisher/mech - max_water = 4000 //Good is gooder - starting_water = 4000 - icon_state = "mech_exting" - -/obj/item/extinguisher/mech/get_hardpoint_maptext() - return "[reagents.total_volume]/[max_water]" - -/obj/item/extinguisher/mech/get_hardpoint_status_value() - return reagents.total_volume/max_water - -/obj/item/mech_equipment/mounted_system/extinguisher - icon_state = "mech_exting" - holding_type = /obj/item/extinguisher/mech - restricted_hardpoints = list(HARDPOINT_LEFT_HAND, HARDPOINT_RIGHT_HAND) - restricted_software = list(MECH_SOFTWARE_ENGINEERING) - -/obj/item/mech_equipment/atmos_shields - icon_state = "mech_atmoshield_off" - name = "exosuit airshield" - desc = "An Aether Atmospherics brand 'Zephyros' portable Atmospheric Isolation and Retention Screen. It keeps air where it should be... Most of the time. Press ctrl-click to switch modes" - restricted_hardpoints = list(HARDPOINT_BACK) - restricted_software = list(MECH_SOFTWARE_ENGINEERING) - var/list/segments - equipment_delay = 0.25 SECONDS - var/current_mode = 0 //0 barrier, 1 bubble - var/shield_range = 2 - -/obj/item/mech_equipment/atmos_shields/CtrlClick(mob/user) - if (owner && ((user in owner.pilots) || user == owner)) - if (active) - to_chat(user, SPAN_WARNING("You cannot modify the projection mode while the shield is active.")) - else - current_mode = !current_mode - to_chat(user, SPAN_NOTICE("You set the shields to [current_mode ? "bubble" : "barrier"] mode.")) - else - ..() - -/obj/effect/mech_shield - name = "energy shield" - desc = "A thin energy shield. It doesn't look like it could much." - icon = 'icons/obj/machines/shielding.dmi' - icon_state = "shield_normal" - anchored = TRUE - layer = ABOVE_HUMAN_LAYER - density = FALSE - invisibility = 0 - atmos_canpass = CANPASS_NEVER - var/obj/item/mech_equipment/atmos_shields/shields - color = COLOR_SABER_BLUE - -/obj/effect/mech_shield/Initialize() - . = ..() - set_light(0.8, 0.1, 1, 2, COLOR_SABER_BLUE) - update_nearby_tiles(need_rebuild=1) - -/obj/effect/mech_shield/Destroy() - if(shields) - if(shields.segments.len) - shields.segments -= src - shields = null - atmos_canpass = CANPASS_ALWAYS - update_nearby_tiles(need_rebuild=1) - - . = ..() - -/obj/item/mech_equipment/atmos_shields/get_hardpoint_maptext() - return "[current_mode ? "BUBBLE" : "BARRIER"]\n[active ? "ONLINE" : "OFFLINE"]" - -/obj/item/mech_equipment/atmos_shields/proc/on_moved() - if(active) - deactivate() - -/obj/item/mech_equipment/atmos_shields/proc/on_turned() - if(active && !current_mode) - deactivate() - -/obj/item/mech_equipment/atmos_shields/proc/activate() - owner.visible_message(SPAN_WARNING("\The [src] starts glowing as it becomes energized!"), blind_message = SPAN_WARNING("You hear the crackle of electricity")) - owner.setClickCooldown(2.5 SECONDS) - if (do_after(owner, 0.5 SECONDS, get_turf(owner), DO_DEFAULT | DO_USER_UNIQUE_ACT | DO_PUBLIC_PROGRESS) && owner) - owner.visible_message(SPAN_WARNING("The air shimmers as energy shields form in front of \the [owner]!")) - playsound(src ,'sound/effects/phasein.ogg',35,1) - active = TRUE - var/list/turfs = list() - - if(current_mode) //Generate a bubble - var/turf/T = null - for (var/x_offset = -shield_range +1; x_offset <= shield_range -1; x_offset++) - T = locate(owner.x + x_offset, owner.y - shield_range, owner.z) - if(T) - turfs += T - T = locate(owner.x + x_offset, owner.y + 2, owner.z) - if(T) - turfs += T - - for (var/y_offset = -shield_range+1; y_offset < shield_range; y_offset++) - T = locate(owner.x - shield_range, owner.y + y_offset, owner.z) - if(T) - turfs += T - T = locate(owner.x + shield_range, owner.y + y_offset, owner.z) - if(T) - turfs += T - else - var/front = get_step(get_turf(owner), owner.dir) - turfs += front - turfs += get_step(front, turn(owner.dir, -90)) - turfs += get_step(front, turn(owner.dir, 90)) - - segments = list() - for(var/turf/T in turfs) - var/obj/effect/mech_shield/MS = new(T) - if(istype(MS)) - MS.shields = src - segments += MS - GLOB.moved_event.register(MS, src, .proc/on_moved) - - passive_power_use = 0.8 KILOWATTS * segments.len - - update_icon() - owner.update_icon() - GLOB.moved_event.register(owner, src, .proc/on_moved) - GLOB.dir_set_event.register(owner, src, .proc/on_turned) - -/obj/item/mech_equipment/atmos_shields/on_update_icon() - . = ..() - icon_state = "mech_atmoshield[active ? "_on" : "_off"]" - -/obj/item/mech_equipment/atmos_shields/deactivate() - for(var/obj/effect/mech_shield/MS in segments) - if(istype(MS)) - GLOB.moved_event.unregister(MS, src, .proc/on_moved) - if(segments.len) - owner.visible_message(SPAN_WARNING("The energy shields in front of \the [owner] disappear!")) - QDEL_NULL_LIST(segments) - passive_power_use = 0 - GLOB.moved_event.unregister(owner, src, .proc/on_moved) - GLOB.dir_set_event.unregister(owner, src, .proc/on_turned) - . = ..() - update_icon() - owner.update_icon() - -/obj/item/mech_equipment/atmos_shields/attack_self(mob/user) - . = ..() - if(.) - if(active) - deactivate() - else - activate() - to_chat(user, SPAN_NOTICE("You toggle \the [src] [active ? "on" : "off"]")) diff --git a/code/modules/mechs/equipment/medical.dm b/code/modules/mechs/equipment/medical.dm deleted file mode 100644 index 540d69eb490ae..0000000000000 --- a/code/modules/mechs/equipment/medical.dm +++ /dev/null @@ -1,137 +0,0 @@ -/obj/item/mech_equipment/sleeper - name = "\improper exosuit sleeper" - desc = "An exosuit-mounted sleeper designed to mantain patients stabilized on their way to medical facilities." - icon_state = "mech_sleeper" - restricted_hardpoints = list(HARDPOINT_BACK) - restricted_software = list(MECH_SOFTWARE_MEDICAL) - equipment_delay = 30 //don't spam it on people pls - active_power_use = 0 //Usage doesn't really require power. We don't want people stuck inside - origin_tech = list(TECH_DATA = 2, TECH_BIO = 3) - passive_power_use = 1.5 KILOWATTS - var/obj/machinery/sleeper/mounted/sleeper = null - -/obj/item/mech_equipment/sleeper/Initialize() - . = ..() - sleeper = new /obj/machinery/sleeper/mounted(src) - sleeper.forceMove(src) - -/obj/item/mech_equipment/sleeper/Destroy() - sleeper.go_out() //If for any reason you weren't outside already. - QDEL_NULL(sleeper) - . = ..() - -/obj/item/mech_equipment/sleeper/uninstalled() - . = ..() - sleeper.go_out() - -/obj/item/mech_equipment/sleeper/attack_self(var/mob/user) - . = ..() - if(.) - sleeper.ui_interact(user) - -/obj/item/mech_equipment/sleeper/attackby(var/obj/item/I, var/mob/user) - if(istype(I, /obj/item/reagent_containers/glass)) - sleeper.attackby(I, user) - else return ..() - -/obj/item/mech_equipment/sleeper/afterattack(var/atom/target, var/mob/living/user, var/inrange, var/params) - . = ..() - if(.) - if(ishuman(target) && !sleeper.occupant) - owner.visible_message(SPAN_NOTICE("\The [src] is lowered down to load [target]")) - sleeper.go_in(target, user) - else to_chat(user, SPAN_WARNING("You cannot load that in!")) - -/obj/item/mech_equipment/sleeper/get_hardpoint_maptext() - if(sleeper && sleeper.occupant) - return "[sleeper.occupant]" - -/obj/machinery/sleeper/mounted - name = "\improper mounted sleeper" - density = FALSE - anchored = FALSE - idle_power_usage = 0 - active_power_usage = 0 //It'd be hard to handle, so for now all power is consumed by mech sleeper object - synth_modifier = 0 - stasis_power = 0 - interact_offline = TRUE - stat_immune = NOPOWER - -/obj/machinery/sleeper/mounted/ui_interact(var/mob/user, var/ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1, var/datum/topic_state/state = GLOB.mech_state) - . = ..() - -/obj/machinery/sleeper/mounted/nano_host() - var/obj/item/mech_equipment/sleeper/S = loc - if(istype(S)) - return S.owner - return null - -//You cannot modify these, it'd probably end with something in nullspace. In any case basic meds are plenty for an ambulance -/obj/machinery/sleeper/mounted/attackby(var/obj/item/I, var/mob/user) - if(istype(I, /obj/item/reagent_containers/glass)) - if(!user.unEquip(I, src)) - return - - if(beaker) - beaker.forceMove(get_turf(src)) - user.visible_message("\The [user] removes \the [beaker] from \the [src].", "You remove \the [beaker] from \the [src].") - beaker = I - user.visible_message("\The [user] adds \a [I] to \the [src].", "You add \a [I] to \the [src].") - -/obj/item/mech_equipment/mender - name = "exosuit medigel spray" - desc = "An exosuit-mounted matrix of medical gel nozzles and radiation emitters designed to treat wounds before transporting patient." - icon_state = "mech_mender" - restricted_hardpoints = list(HARDPOINT_LEFT_HAND, HARDPOINT_RIGHT_HAND) - restricted_software = list(MECH_SOFTWARE_MEDICAL) - active_power_use = 0 //Usage doesn't really require power. It's per wound - origin_tech = list(TECH_DATA = 2, TECH_BIO = 3) - var/list/apply_sounds = list('sound/effects/spray.ogg', 'sound/effects/spray2.ogg', 'sound/effects/spray3.ogg') - -/obj/item/mech_equipment/mender/afterattack(atom/target, mob/living/user, inrange, params) - . = ..() - if(.) - if (istype(target, /mob/living/carbon/human)) - var/mob/living/carbon/human/H = target - var/obj/item/organ/external/affecting = H.get_organ(user.zone_sel.selecting) - - if(affecting.is_bandaged() && affecting.is_disinfected() && affecting.is_salved()) - to_chat(user, SPAN_WARNING("The wounds on \the [H]'s [affecting.name] have already been treated.")) - return - else - if(!LAZYLEN(affecting.wounds)) - return - owner.visible_message(SPAN_NOTICE("\The [owner] extends \the [src] towards \the [H]'s [affecting.name].")) - var/large_wound = FALSE - for (var/datum/wound/W as anything in affecting.wounds) - if (W.bandaged && W.disinfected && W.salved) - continue - var/delay = (W.damage / 4) * user.skill_delay_mult(SKILL_MEDICAL, 0.8) - owner.setClickCooldown(delay) - if(!do_after(user, delay, target)) - break - - var/obj/item/cell/C = owner.get_cell() - if(istype(C)) - C.use(0.01 KILOWATTS) //Does cost power, so not a freebie, specially with large amount of wounds - else - return //Early out, cell is gone - - if (W.current_stage <= W.max_bleeding_stage) - owner.visible_message(SPAN_NOTICE("\The [owner] covers \a [W.desc] on \the [H]'s [affecting.name] with large globs of medigel.")) - large_wound = TRUE - else if (W.damage_type == INJURY_TYPE_BRUISE) - owner.visible_message(SPAN_NOTICE("\The [owner] sprays \a [W.desc] on \the [H]'s [affecting.name] with a fine layer of medigel.")) - else - owner.visible_message(SPAN_NOTICE("\The [owner] drizzles some medigel over \a [W.desc] on \the [H]'s [affecting.name].")) - playsound(owner, pick(apply_sounds), 20) - W.bandage() - W.disinfect() - W.salve() - if (H.stat == UNCONSCIOUS && prob(25)) - to_chat(H, SPAN_NOTICE(SPAN_BOLD("... [pick("feels better", "hurts less")] ..."))) - if(large_wound) - owner.visible_message(SPAN_NOTICE("\The [src]'s UV matrix glows faintly as it cures the medigel.")) - playsound(owner, 'sound/items/Welder2.ogg', 10) - affecting.update_damages() - H.update_bandages(TRUE) diff --git a/code/modules/mechs/equipment/utility.dm b/code/modules/mechs/equipment/utility.dm deleted file mode 100644 index cfd5fd7bee5b0..0000000000000 --- a/code/modules/mechs/equipment/utility.dm +++ /dev/null @@ -1,918 +0,0 @@ -//Pile of garbage for when a clam is uninstalled or destroyed with +1 dense items inside -/obj/structure/cargopile - name = "\improper spilled cargo" - desc = "The jetsam of some unfortunate power loader." - icon = 'icons/obj/rubble.dmi' - icon_state = "base" - appearance_flags = DEFAULT_APPEARANCE_FLAGS | PIXEL_SCALE - atom_flags = ATOM_FLAG_CLIMBABLE - opacity = 1 - density = TRUE - anchored = TRUE - - -/obj/structure/cargopile/on_update_icon() - overlays.Cut() - for(var/obj/thing in contents) - var/image/I = new - I.appearance = thing.appearance - I.appearance_flags = DEFAULT_APPEARANCE_FLAGS | PIXEL_SCALE - I.pixel_x = rand(-16,16) - I.pixel_y = rand(-16,16) - I.SetTransform(rotation = rand(0, 360)) - overlays += I - -/obj/structure/cargopile/attack_hand(mob/user) - . = ..() - if(Adjacent(user)) - var/obj/chosen_obj = input(user, "Choose an object to grab.", "Cargo pile") as null|anything in contents - if(!chosen_obj) - return - if(chosen_obj.density) - for(var/atom/A in get_turf(src)) - if(A != src && A.density && !(A.atom_flags & ATOM_FLAG_CHECKS_BORDER)) - to_chat(user, SPAN_WARNING("\The [A] blocks you from pulling out \the [chosen_obj].")) - return - if(!do_after(user, 0.5 SECONDS, src, DO_PUBLIC_UNIQUE)) return - if(!chosen_obj) return - if(chosen_obj.density) - for(var/atom/A in get_turf(src)) - if(A != src && A.density && !(A.atom_flags & ATOM_FLAG_CHECKS_BORDER)) - to_chat(user, SPAN_WARNING("\The [A] blocks you from pulling out \the [chosen_obj].")) - return - if(user.put_in_active_hand(chosen_obj)) - src.visible_message(SPAN_NOTICE("\The [user] carefully grabs \the [chosen_obj] from \the [src].")) - else if(chosen_obj.dropInto(get_turf(src))) - src.visible_message(SPAN_NOTICE("\The [user] pulls \the [chosen_obj] from \the [src].")) - - if(!contents.len) - qdel_self() - else update_icon() - -/obj/item/mech_equipment/clamp - name = "mounted clamp" - desc = "A large, heavy industrial cargo loading clamp." - icon_state = "mech_clamp" - restricted_hardpoints = list(HARDPOINT_LEFT_HAND, HARDPOINT_RIGHT_HAND) - restricted_software = list(MECH_SOFTWARE_UTILITY) - origin_tech = list(TECH_MATERIAL = 2, TECH_ENGINEERING = 2) - var/carrying_capacity = 5 - var/list/obj/carrying = list() - -/obj/item/mech_equipment/clamp/resolve_attackby(atom/A, mob/user, click_params) - if(owner) - return 0 - return ..() - -/obj/item/mech_equipment/clamp/attack_hand(mob/user) - if(owner && LAZYISIN(owner.pilots, user)) - if(!owner.hatch_closed && length(carrying)) - var/obj/chosen_obj = input(user, "Choose an object to grab.", "Clamp Claw") as null|anything in carrying - if(!chosen_obj) - return - if(!do_after(user, 2 SECONDS, owner, DO_PUBLIC_UNIQUE)) return - if(owner.hatch_closed || !chosen_obj) return - if(user.put_in_active_hand(chosen_obj)) - owner.visible_message(SPAN_NOTICE("\The [user] carefully grabs \the [chosen_obj] from \the [src].")) - playsound(src, 'sound/mecha/hydraulic.ogg', 50, 1) - carrying -= chosen_obj - . = ..() - -/obj/item/mech_equipment/clamp/afterattack(var/atom/target, var/mob/living/user, var/inrange, var/params) - . = ..() - - if(.) - if(istype(target, /obj)) - var/obj/O = target - if(O.buckled_mob) - return - if(locate(/mob/living) in O) - to_chat(user, SPAN_WARNING("You can't load living things into the cargo compartment.")) - return - - if(O.anchored) - //Special door handling - if(istype(O, /obj/machinery/door/firedoor)) - var/obj/machinery/door/firedoor/FD = O - if(FD.blocked) - FD.visible_message(SPAN_DANGER("\The [owner] begins prying on \the [FD]!")) - if(do_after(owner, 10 SECONDS, FD, DO_DEFAULT | DO_USER_UNIQUE_ACT | DO_PUBLIC_PROGRESS) && FD.blocked) - playsound(FD, 'sound/effects/meteorimpact.ogg', 100, 1) - playsound(FD, 'sound/machines/airlock_creaking.ogg', 100, 1) - FD.blocked = FALSE - addtimer(CALLBACK(FD, /obj/machinery/door/firedoor/.proc/open, TRUE), 0) - FD.set_broken(TRUE) - FD.visible_message(SPAN_WARNING("\The [owner] tears \the [FD] open!")) - else - FD.visible_message(SPAN_DANGER("\The [owner] begins forcing \the [FD]!")) - if(do_after(owner, 4 SECONDS, FD, DO_DEFAULT | DO_USER_UNIQUE_ACT | DO_PUBLIC_PROGRESS) && !FD.blocked) - playsound(FD, 'sound/machines/airlock_creaking.ogg', 100, 1) - if(FD.density) - FD.visible_message(SPAN_DANGER("\The [owner] forces \the [FD] open!")) - addtimer(CALLBACK(FD, /obj/machinery/door/firedoor/.proc/open, TRUE), 0) - else - FD.visible_message(SPAN_WARNING("\The [owner] forces \the [FD] closed!")) - addtimer(CALLBACK(FD, /obj/machinery/door/firedoor/.proc/close, TRUE), 0) - return - else if(istype(O, /obj/machinery/door/airlock)) - var/obj/machinery/door/airlock/AD = O - if(!AD.operating && !AD.locked) - if(AD.welded) - AD.visible_message(SPAN_DANGER("\The [owner] begins prying on \the [AD]!")) - if(do_after(owner, 15 SECONDS, AD, DO_DEFAULT | DO_USER_UNIQUE_ACT | DO_PUBLIC_PROGRESS) && !AD.locked) - AD.welded = FALSE - AD.update_icon() - playsound(AD, 'sound/effects/meteorimpact.ogg', 100, 1) - playsound(AD, 'sound/machines/airlock_creaking.ogg', 100, 1) - AD.visible_message(SPAN_DANGER("\The [owner] tears \the [AD] open!")) - addtimer(CALLBACK(AD, /obj/machinery/door/airlock/.proc/open, TRUE), 0) - AD.set_broken(TRUE) - return - else - AD.visible_message(SPAN_DANGER("\The [owner] begins forcing \the [AD]!")) - if((AD.is_broken(NOPOWER) || do_after(owner, 5 SECONDS, AD, DO_DEFAULT | DO_USER_UNIQUE_ACT | DO_PUBLIC_PROGRESS)) && !(AD.operating || AD.welded || AD.locked)) - playsound(AD, 'sound/machines/airlock_creaking.ogg', 100, 1) - if(AD.density) - addtimer(CALLBACK(AD, /obj/machinery/door/airlock/.proc/open, TRUE), 0) - if(!AD.is_broken(NOPOWER)) - AD.set_broken(TRUE) - AD.visible_message(SPAN_DANGER("\The [owner] forces \the [AD] open!")) - else - addtimer(CALLBACK(AD, /obj/machinery/door/airlock/.proc/close, TRUE), 0) - if(!AD.is_broken(NOPOWER)) - AD.set_broken(TRUE) - AD.visible_message(SPAN_DANGER("\The [owner] forces \the [AD] closed!")) - if(AD.locked) - to_chat(user, SPAN_NOTICE("The airlock's bolts prevent it from being forced.")) - return - - to_chat(user, SPAN_WARNING("\The [target] is firmly secured.")) - return - - if(length(carrying) >= carrying_capacity) - to_chat(user, SPAN_WARNING("\The [src] is fully loaded!")) - return - - owner.visible_message(SPAN_NOTICE("\The [owner] begins loading \the [O].")) - if(do_after(owner, 2 SECONDS, O, DO_PUBLIC_UNIQUE & ~DO_USER_SAME_HAND)) - if(O in carrying || O.buckled_mob || O.anchored || (locate(/mob/living) in O)) //Repeat checks - return - if(length(carrying) >= carrying_capacity) - to_chat(user, SPAN_WARNING("\The [src] is fully loaded!")) - return - O.forceMove(src) - carrying += O - owner.visible_message(SPAN_NOTICE("\The [owner] loads \the [O] into its cargo compartment.")) - playsound(src, 'sound/mecha/hydraulic.ogg', 50, 1) - - //attacking - Cannot be carrying something, cause then your clamp would be full - else if(istype(target,/mob/living)) - var/mob/living/M = target - if(user.a_intent == I_HURT) - admin_attack_log(user, M, "attempted to clamp [M] with [src] ", "Was subject to a clamping attempt.", ", using \a [src], attempted to clamp") - owner.setClickCooldown(owner.arms ? owner.arms.action_delay * 3 : 30) //This is an inefficient use of your powers - if(prob(33)) - owner.visible_message(SPAN_DANGER("[owner] swings its [src] in a wide arc at [target] but misses completely!")) - return - M.attack_generic(owner, (owner.arms ? owner.arms.melee_damage * 1.5 : 0), "slammed") //Honestly you should not be able to do this without hands, but still - M.throw_at(get_edge_target_turf(owner ,owner.dir),5, 2) - to_chat(user, "You slam [target] with [src.name].") - owner.visible_message(SPAN_DANGER("[owner] slams [target] with the hydraulic clamp.")) - else - step_away(M, owner) - to_chat(user, "You push [target] out of the way.") - owner.visible_message("[owner] pushes [target] out of the way.") - -/obj/item/mech_equipment/clamp/attack_self(var/mob/user) - . = ..() - if(.) - drop_carrying(user, TRUE) - -/obj/item/mech_equipment/clamp/CtrlClick(mob/user) - if(owner) - drop_carrying(user, FALSE) - else - ..() - -/obj/item/mech_equipment/clamp/proc/drop_carrying(var/mob/user, var/choose_object) - if(!length(carrying)) - to_chat(user, SPAN_WARNING("You are not carrying anything in \the [src].")) - return - var/obj/chosen_obj = carrying[1] - if(choose_object) - chosen_obj = input(user, "Choose an object to set down.", "Clamp Claw") as null|anything in carrying - if(!chosen_obj) - return - if(chosen_obj.density) - for(var/atom/A in get_turf(src)) - if(A != owner && A.density && !(A.atom_flags & ATOM_FLAG_CHECKS_BORDER)) - to_chat(user, SPAN_WARNING("\The [A] blocks you from putting down \the [chosen_obj].")) - return - - owner.visible_message(SPAN_NOTICE("\The [owner] unloads \the [chosen_obj].")) - playsound(src, 'sound/mecha/hydraulic.ogg', 50, 1) - chosen_obj.forceMove(get_turf(src)) - carrying -= chosen_obj - -/obj/item/mech_equipment/clamp/get_hardpoint_status_value() - if(length(carrying) > 1) - return length(carrying)/carrying_capacity - return null - -/obj/item/mech_equipment/clamp/get_hardpoint_maptext() - if(length(carrying) == 1) - return carrying[1].name - else if(length(carrying) > 1) - return "Multiple" - . = ..() - -/obj/item/mech_equipment/clamp/proc/create_spill() - if(length(carrying)) - var/denseCount = 0 - for(var/obj/load in carrying) - if(load.density) - denseCount += 1 - if(denseCount > 1) - break - - if(denseCount > 1) - var/obj/structure/cargopile/pile = new(get_turf(src)) - for(var/obj/load in carrying) - load.forceMove(pile) - carrying -= load - pile.update_icon() - else - for(var/obj/load in carrying) - var/turf/location = get_turf(src) - var/list/turfs = location.AdjacentTurfsSpace() - if(load.density) - if(turfs.len > 0) - location = pick(turfs) - turfs -= location - else - load.dropInto(location) - load.throw_at_random(FALSE, rand(2,4), 4) - location = null - if(location) - load.dropInto(location) - carrying -= load - -/obj/item/mech_equipment/clamp/uninstalled() - create_spill() - . = ..() - -/obj/item/mech_equipment/clamp/wreck() - create_spill() - -// A lot of this is copied from floodlights. -/obj/item/mech_equipment/light - name = "floodlight" - desc = "An exosuit-mounted light." - icon_state = "mech_floodlight" - item_state = "mech_floodlight" - restricted_hardpoints = list(HARDPOINT_HEAD, HARDPOINT_LEFT_SHOULDER, HARDPOINT_RIGHT_SHOULDER) - - - var/on = 0 - var/l_max_bright = 0.9 - var/l_inner_range = 1 - var/l_outer_range = 6 - origin_tech = list(TECH_MATERIAL = 1, TECH_ENGINEERING = 1) - -/obj/item/mech_equipment/light/installed(mob/living/exosuit/_owner) - . = ..() - update_icon() - -/obj/item/mech_equipment/light/attack_self(var/mob/user) - . = ..() - if(.) - toggle() - to_chat(user, "You switch \the [src] [on ? "on" : "off"].") - -/obj/item/mech_equipment/light/proc/toggle() - on = !on - update_icon() - owner.update_icon() - active = on - passive_power_use = on ? 0.1 KILOWATTS : 0 - -/obj/item/mech_equipment/light/deactivate() - if(on) - toggle() - ..() - -/obj/item/mech_equipment/light/on_update_icon() - if(on) - icon_state = "[initial(icon_state)]-on" - set_light(l_max_bright, l_inner_range, l_outer_range) - else - icon_state = "[initial(icon_state)]" - set_light(0, 0) - - //Check our layers - if(owner && (owner.hardpoints[HARDPOINT_HEAD] == src)) - mech_layer = MECH_INTERMEDIATE_LAYER - else mech_layer = initial(mech_layer) - -#define CATAPULT_SINGLE 1 -#define CATAPULT_AREA 2 - -/obj/item/mech_equipment/catapult - name = "gravitational catapult" - desc = "An exosuit-mounted gravitational catapult." - icon_state = "mech_wormhole" - restricted_hardpoints = list(HARDPOINT_LEFT_HAND, HARDPOINT_RIGHT_HAND) - restricted_software = list(MECH_SOFTWARE_UTILITY) - var/mode = CATAPULT_SINGLE - var/atom/movable/locked - equipment_delay = 2.2 SECONDS //Stunlocks are not ideal - origin_tech = list(TECH_MATERIAL = 4, TECH_ENGINEERING = 4, TECH_MAGNET = 4) - require_adjacent = FALSE - - var/activated_passive_power = 1 KILOWATTS - ///For when targetting a single object, will create a warp beam - var/datum/beam = null - var/max_dist = 6 - var/obj/effect/effect/warp/small/warpeffect = null - -/obj/effect/ebeam/warp - plane = WARP_EFFECT_PLANE - no_z_overlay = TRUE - -/obj/effect/effect/warp/small - plane = WARP_EFFECT_PLANE - appearance_flags = PIXEL_SCALE - icon = 'icons/effects/96x96.dmi' - icon_state = "singularity_s3" - pixel_x = -32 - pixel_y = -32 - no_z_overlay = TRUE - -/obj/item/mech_equipment/catapult/proc/beamdestroyed() - if(beam) - GLOB.destroyed_event.unregister(beam, src, .proc/beamdestroyed) - beam = null - if(locked) - if(owner) - for(var/pilot in owner.pilots) - to_chat(pilot, SPAN_NOTICE("Lock on \the [locked] disengaged.")) - endanimation() - locked = null - //It's possible beam self destroyed, match active - if(active) - deactivate() - -/obj/item/mech_equipment/catapult/proc/endanimation() - if(locked) - animate(locked,pixel_y= initial(locked.pixel_y), time = 0) - -/obj/item/mech_equipment/catapult/get_hardpoint_maptext() - var/string - if(locked) - string = locked.name + " - " - if(mode == 1) - string += "Pull" - else string += "Push" - return string - -/obj/item/mech_equipment/catapult/deactivate() - . = ..() - if(beam) - QDEL_NULL(beam) - passive_power_use = 0 - -/obj/item/mech_equipment/catapult/attack_self(var/mob/user) - . = ..() - if(.) - if(!locked) - mode = mode == CATAPULT_SINGLE ? CATAPULT_AREA : CATAPULT_SINGLE - to_chat(user, SPAN_NOTICE("You set \the [src] to [mode == CATAPULT_SINGLE ? "single" : "multi"]-target mode.")) - update_icon() - else - to_chat(user, SPAN_NOTICE("You cannot change the mode \the [src] while it is locked on to a target.")) - -/obj/item/mech_equipment/catapult/afterattack(var/atom/target, var/mob/living/user, var/inrange, var/params) - . = ..() - if(.) - switch(mode) - if(CATAPULT_SINGLE) - if(!locked && (get_dist(owner, target) <= max_dist)) - var/atom/movable/AM = target - if(!istype(AM) || AM.anchored || !AM.simulated) - to_chat(user, SPAN_NOTICE("Unable to lock on [target].")) - return - locked = AM - beam = owner.Beam(BeamTarget = target, icon_state = "r_beam", maxdistance = max_dist, beam_type = /obj/effect/ebeam/warp) - GLOB.destroyed_event.register(beam, src, .proc/beamdestroyed) - - animate(target,pixel_y= initial(target.pixel_y) - 2,time=1 SECOND, easing = SINE_EASING, flags = ANIMATION_PARALLEL, loop = -1) - animate(pixel_y= initial(target.pixel_y) + 2,time=1 SECOND) - - active = TRUE - passive_power_use = activated_passive_power - to_chat(user, SPAN_NOTICE("Locked on [AM].")) - return - else if(target != locked) - if(locked in view(owner)) - log_and_message_admins("used [src] to throw [locked] at [target].", user, owner.loc) - endanimation() //End animation without waiting for delete, so throw won't be affected - locked.throw_at(target, 14, 1.5, owner) - locked = null - deactivate() - - var/obj/item/cell/C = owner.get_cell() - if(istype(C)) - C.use(active_power_use * CELLRATE) - - else - deactivate() - if(CATAPULT_AREA) - if(!warpeffect) - warpeffect = new - - //effect and sound - warpeffect.forceMove(get_turf(target)) - warpeffect.SetTransform(scale = 0) - warpeffect.alpha = 255 - animate( - warpeffect, - transform = matrix(), - alpha = 0, - time = 1.25 SECONDS - ) - addtimer(CALLBACK(warpeffect, /atom/movable/proc/forceMove, null), 1.25 SECONDS) - playsound(warpeffect, 'sound/effects/heavy_cannon_blast.ogg', 50, 1) - - var/list/atoms = list() - if(isturf(target)) - atoms = range(target,3) - else - atoms = orange(target,3) - for(var/atom/movable/A in atoms) - if(A.anchored || !A.simulated) continue - var/dist = 5-get_dist(A,target) - A.throw_at(get_edge_target_turf(A,get_dir(target, A)),dist,0.7) - - log_and_message_admins("used [src]'s area throw on [target].", user, owner.loc) - var/obj/item/cell/C = owner.get_cell() - if(istype(C)) - C.use(active_power_use * CELLRATE * 2) //bit more expensive to throw all - -#undef CATAPULT_SINGLE -#undef CATAPULT_AREA - - -/obj/item/material/drill_head - var/durability = 0 - name = "drill head" - desc = "A replaceable drill head usually used in exosuit drills." - icon = 'icons/obj/weapons/other.dmi' - icon_state = "drill_head" - -/obj/item/material/drill_head/proc/get_percent_durability() - return round((durability / material.integrity) * 50) - -/obj/item/material/drill_head/proc/get_visible_durability() - switch (get_percent_durability()) - if (95 to INFINITY) . = "shows no wear" - if (75 to 95) . = "shows some wear" - if (50 to 75) . = "is fairly worn" - if (10 to 50) . = "is very worn" - else . = "looks close to breaking" - -/obj/item/material/drill_head/examine(mob/user, distance) - . = ..() - to_chat(user, "It [get_visible_durability()].") - - -/obj/item/material/drill_head/steel - default_material = MATERIAL_STEEL - -/obj/item/material/drill_head/titanium - default_material = MATERIAL_TITANIUM - -/obj/item/material/drill_head/plasteel - default_material = MATERIAL_PLASTEEL - -/obj/item/material/drill_head/diamond - default_material = MATERIAL_DIAMOND - -/obj/item/material/drill_head/Initialize() - . = ..() - durability = 2 * material.integrity - -/obj/item/mech_equipment/drill - name = "drill" - desc = "This is the drill that'll pierce the heavens!" - icon_state = "mech_drill" - restricted_hardpoints = list(HARDPOINT_LEFT_HAND, HARDPOINT_RIGHT_HAND) - restricted_software = list(MECH_SOFTWARE_UTILITY) - equipment_delay = 10 - - //Drill can have a head - var/obj/item/material/drill_head/drill_head - origin_tech = list(TECH_MATERIAL = 2, TECH_ENGINEERING = 2) - -/obj/item/mech_equipment/drill/Initialize() - . = ..() - if (ispath(drill_head)) - drill_head = new drill_head(src) - -/obj/item/mech_equipment/drill/attack_self(var/mob/user) - . = ..() - if(.) - if(drill_head) - owner.visible_message(SPAN_WARNING("[owner] revs the [drill_head], menancingly.")) - playsound(src, 'sound/mecha/mechdrill.ogg', 50, 1) - -/obj/item/mech_equipment/drill/get_hardpoint_maptext() - if(drill_head) - return "Integrity: [drill_head.get_percent_durability()]%" - return - -/obj/item/mech_equipment/drill/examine(mob/user, distance) - . = ..() - if (drill_head) - to_chat(user, "It has a[distance > 3 ? "" : " [drill_head.material.name]"] drill head installed.") - if (distance < 4) - to_chat(user, "The drill head [drill_head.get_visible_durability()].") - else - to_chat(user, "It does not have a drill head installed.") - -/obj/item/mech_equipment/drill/proc/attach_head(obj/item/material/drill_head/DH, mob/user) - if (user && !user.unEquip(DH)) - return - if (drill_head) - visible_message(SPAN_NOTICE("\The [user] detaches \the [drill_head] mounted on \the [src].")) - drill_head.dropInto(get_turf(src)) - user.visible_message(SPAN_NOTICE("\The [user] mounts \the [drill_head] on \the [src].")) - DH.forceMove(src) - drill_head = DH - - -/obj/item/mech_equipment/drill/attackby(obj/item/I, mob/user) - if (istype(I, /obj/item/material/drill_head)) - attach_head(I, user) - return TRUE - . = ..() - -/obj/item/mech_equipment/drill/proc/scoop_ore(at_turf) - if (!owner) - return - for (var/hardpoint in owner.hardpoints) - var/obj/item/item = owner.hardpoints[hardpoint] - if (!istype(item)) - continue - var/obj/structure/ore_box/ore_box = locate(/obj/structure/ore_box) in item - if (!ore_box) - continue - var/list/atoms_in_range = range(1, at_turf) - for(var/obj/item/ore/ore in atoms_in_range) - if (!(get_dir(owner, ore) & owner.dir)) - continue - ore.Move(ore_box) - -/obj/item/mech_equipment/drill/afterattack(atom/target, mob/living/user, inrange, params) - if (!..()) // /obj/item/mech_equipment/afterattack implements a usage guard - return - - if (istype(target, /obj/item/material/drill_head)) - attach_head(target, user) - return - - if (!drill_head) - to_chat(user, SPAN_WARNING("\The [src] doesn't have a head!")) - return - - if (ismob(target)) - var/mob/tmob = target - if (tmob.unacidable) - to_chat(user, SPAN_WARNING("\The [target] can't be drilled away.")) - return - else - to_chat(tmob, FONT_HUGE(SPAN_DANGER("You're about to get drilled - dodge!"))) - - else if (isobj(target)) - var/obj/tobj = target - if (tobj.unacidable) - to_chat(user, SPAN_WARNING("\The [target] can't be drilled away.")) - return - - else if (istype(target, /turf/unsimulated)) - to_chat(user, SPAN_WARNING("\The [target] can't be drilled away.")) - return - - var/obj/item/cell/mech_cell = owner.get_cell() - mech_cell.use(active_power_use * CELLRATE) //supercall made sure we have one - - var/delay = 3 SECONDS //most things - switch (drill_head.material.brute_armor) - if (15 to INFINITY) delay = 0.5 SECONDS //voxalloy on a good roll - if (10 to 15) delay = 1 SECOND //titanium, diamond - if (5 to 10) delay = 2 SECONDS //plasteel, steel - owner.setClickCooldown(delay) - - playsound(src, 'sound/mecha/mechdrill.ogg', 50, 1) - owner.visible_message( - SPAN_WARNING("\The [owner] starts to drill \the [target]."), - blind_message = SPAN_WARNING("You hear a large motor whirring.") - ) - - var/obj/particle_emitter/sparks/EM - if (istype(target, /turf/simulated/mineral)) - EM = new/obj/particle_emitter/sparks/debris(get_turf(target), delay, target.color) - else - EM = new(get_turf(target), delay) - - EM.set_dir(reverse_direction(owner.dir)) - - if (!do_after(owner, delay, target, (DO_DEFAULT | DO_USER_UNIQUE_ACT | DO_PUBLIC_PROGRESS) & ~DO_USER_CAN_TURN)) - if(EM) - EM.particles.spawning = FALSE - return - if(EM) - EM.particles.spawning = FALSE - if (src != owner.selected_system) - to_chat(user, SPAN_WARNING("You must keep \the [src] selected to use it.")) - return - if (drill_head.durability <= 0) - drill_head.shatter() - drill_head = null - return - - if (istype(target, /turf/simulated/mineral)) - var/list/atoms_in_range = range(1, target) - for (var/turf/simulated/mineral/mineral in atoms_in_range) - if (!(get_dir(owner, mineral) & owner.dir)) - continue - drill_head.durability -= 1 - mineral.GetDrilled() - scoop_ore(target) - return - - if (istype(target, /turf/simulated/floor/asteroid)) - var/list/atoms_in_range = range(1, target) - for (var/turf/simulated/floor/asteroid/asteroid in atoms_in_range) - if (!(get_dir(owner, asteroid) & owner.dir)) - continue - drill_head.durability -= 1 - asteroid.gets_dug() - scoop_ore(target) - return - - if (istype(target, /turf/simulated/wall)) - var/turf/simulated/wall/wall = target - var/wall_hardness = max(wall.material.hardness, wall.reinf_material ? wall.reinf_material.hardness : 0) - if (wall_hardness > drill_head.material.hardness) - to_chat(user, SPAN_WARNING("\The [wall] is too hard to drill through with \the [drill_head].")) - drill_head.durability -= 2 - return - - var/audible = "loudly grinding machinery" - if (iscarbon(target)) //splorch - audible = "a terrible rending of metal and flesh" - - owner.visible_message( - SPAN_DANGER("\The [owner] drives \the [src] into \the [target]."), - blind_message = SPAN_WARNING("You hear [audible].") - ) - log_and_message_admins("used [src] on [target]", user, owner.loc) - drill_head.durability -= 1 - target.ex_act(EX_ACT_HEAVY) - - -/obj/item/mech_equipment/drill/steel - drill_head = /obj/item/material/drill_head/steel - -/obj/item/mech_equipment/drill/titanium - drill_head = /obj/item/material/drill_head/titanium - -/obj/item/mech_equipment/drill/plasteel - drill_head = /obj/item/material/drill_head/plasteel - -/obj/item/mech_equipment/drill/diamond - drill_head = /obj/item/material/drill_head/diamond - - -/obj/item/gun/energy/plasmacutter/mounted/mech - use_external_power = TRUE - has_safety = FALSE - - -/obj/item/mech_equipment/mounted_system/taser/plasma - name = "mounted plasma cutter" - desc = "An industrial plasma cutter mounted onto the chassis of the mech. " - icon_state = "mech_plasma" - holding_type = /obj/item/gun/energy/plasmacutter/mounted/mech - restricted_hardpoints = list(HARDPOINT_LEFT_HAND, HARDPOINT_RIGHT_HAND, HARDPOINT_LEFT_SHOULDER, HARDPOINT_RIGHT_SHOULDER) - restricted_software = list(MECH_SOFTWARE_UTILITY) - origin_tech = list(TECH_MATERIAL = 4, TECH_PHORON = 4, TECH_ENGINEERING = 6, TECH_COMBAT = 3) - -/obj/item/mech_equipment/mounted_system/taser/autoplasma - icon_state = "mech_energy" - holding_type = /obj/item/gun/energy/plasmacutter/mounted/mech/auto - restricted_hardpoints = list(HARDPOINT_LEFT_HAND, HARDPOINT_RIGHT_HAND) - restricted_software = list(MECH_SOFTWARE_UTILITY) - origin_tech = list(TECH_MATERIAL = 5, TECH_PHORON = 4, TECH_ENGINEERING = 6, TECH_COMBAT = 4) - -/obj/item/gun/energy/plasmacutter/mounted/mech/auto - charge_cost = 13 - name = "rotatory plasma cutter" - desc = "A state of the art rotating, variable intensity, sequential-cascade plasma cutter. Resist the urge to aim this at your coworkers." - max_shots = 15 - init_firemodes = list( - list(mode_name="single shot", can_autofire=0, burst=1, fire_delay=6), - list(mode_name="full auto", can_autofire=1, burst=1, fire_delay=1), - ) - -/obj/item/mech_equipment/ionjets - name = "\improper exosuit manouvering unit" - desc = "A testament to the fact that sometimes more is actually more. These oversized electric resonance boosters allow exosuits to move in microgravity and can even provide brief speed boosts. The stabilizers can be toggled with ctrl-click." - icon_state = "mech_jet_off" - restricted_hardpoints = list(HARDPOINT_BACK) - restricted_software = list(MECH_SOFTWARE_UTILITY) - active_power_use = 90 KILOWATTS - passive_power_use = 0 KILOWATTS - var/activated_passive_power = 2 KILOWATTS - var/movement_power = 75 - origin_tech = list(TECH_ENGINEERING = 3, TECH_MAGNET = 3, TECH_PHORON = 3) - var/datum/effect/effect/system/trail/ion/ion_trail - require_adjacent = FALSE - var/stabilizers = FALSE - var/slide_distance = 6 - -/obj/item/mech_equipment/ionjets/Initialize() - . = ..() - ion_trail = new /datum/effect/effect/system/trail/ion() - ion_trail.set_up(src) - -/obj/item/mech_equipment/ionjets/proc/allowSpaceMove() - if (!active) - return FALSE - - var/obj/item/cell/C = owner.get_cell() - if (istype(C)) - if (C.checked_use(movement_power * CELLRATE)) - return TRUE - else - deactivate() - - return FALSE - -/obj/item/mech_equipment/ionjets/attack_self(mob/user) - . = ..() - if (!.) - return - - if (active) - deactivate() - else - activate() - -/obj/item/mech_equipment/ionjets/CtrlClick(mob/user) - if (owner && ((user in owner.pilots) || user == owner)) - if (active) - stabilizers = !stabilizers - to_chat(user, SPAN_NOTICE("You toggle the stabilizers [stabilizers ? "on" : "off"]")) - else - ..() - -/obj/item/mech_equipment/ionjets/proc/activate() - passive_power_use = activated_passive_power - ion_trail.start() - active = TRUE - update_icon() - -/obj/item/mech_equipment/ionjets/deactivate() - . = ..() - passive_power_use = 0 KILOWATTS - ion_trail.stop() - update_icon() - -/obj/item/mech_equipment/ionjets/on_update_icon() - . = ..() - if (active) - icon_state = "mech_jet_on" - set_light(1, 1, 1, l_color = COLOR_LIGHT_CYAN) - else - icon_state = "mech_jet_off" - set_light(0) - if(owner) - owner.update_icon() - -/obj/item/mech_equipment/ionjets/get_hardpoint_maptext() - if (active) - return "ONLINE - Stabilizers [stabilizers ? "on" : "off"]" - else return "OFFLINE" - -/obj/item/mech_equipment/ionjets/proc/slideCheck(turf/target) - if (owner && istype(target)) - if ((get_dist(owner, target) <= slide_distance) && (get_dir(get_turf(owner), target) == owner.dir)) - return TRUE - return FALSE - -/obj/item/mech_equipment/ionjets/afterattack(atom/target, mob/living/user, inrange, params) - . = ..() - if (. && active) - if (owner.z != target.z) - to_chat(user, SPAN_WARNING("You cannot reach that level!")) - return FALSE - var/turf/TT = get_turf(target) - if (slideCheck(TT)) - playsound(src, 'sound/magic/forcewall.ogg', 30, 1) - owner.visible_message( - SPAN_WARNING("\The [src] charges up in preparation for a slide!"), - blind_message = SPAN_WARNING("You hear a loud hum and an intense crackling.") - ) - new /obj/effect/temporary(get_step(owner.loc, reverse_direction(owner.dir)), 2 SECONDS, 'icons/effects/effects.dmi',"cyan_sparkles") - owner.setClickCooldown(2 SECONDS) - if (do_after(owner, 2 SECONDS, target, (DO_DEFAULT | DO_PUBLIC_PROGRESS | DO_USER_UNIQUE_ACT) & ~DO_USER_CAN_TURN) && slideCheck(TT)) - owner.visible_message(SPAN_DANGER("Burning hard, \the [owner] thrusts forward!")) - owner.throw_at(get_ranged_target_turf(owner, owner.dir, slide_distance), slide_distance, 1, owner, FALSE) - else - owner.visible_message(SPAN_DANGER("\The [src] sputters and powers down")) - owner.sparks.set_up(3,0,owner) - owner.sparks.start() - - else - to_chat(user, SPAN_WARNING("You cannot slide there!")) - -/obj/item/mech_equipment/camera - name = "exosuit camera" - desc = "A dedicated visible light spectrum camera for remote feeds. It comes with its own transmitter!" - icon_state = "mech_camera" - restricted_hardpoints = list(HARDPOINT_LEFT_SHOULDER, HARDPOINT_RIGHT_SHOULDER) - restricted_software = list(MECH_SOFTWARE_UTILITY) - equipment_delay = 10 - - origin_tech = list(TECH_MATERIAL = 1, TECH_ENGINEERING = 2, TECH_MAGNET = 2) - var/obj/machinery/camera/network/thunder/camera - var/list/additional_networks //If you want to make a subtype for mercs, ert etc... Write here the extra networks - -/obj/item/mech_equipment/camera/Destroy() - QDEL_NULL(camera) - . = ..() - -/obj/item/mech_equipment/camera/Initialize() - . = ..() - camera = new(src) - camera.c_tag = "null" - camera.set_status(FALSE) - camera.is_helmet_cam = TRUE //Can transmit locally regardless of network - -/obj/item/mech_equipment/camera/installed(mob/living/exosuit/_owner) - . = ..() - if(owner) - camera.c_tag = "[owner.name] camera feed" - invalidateCameraCache() - -/obj/item/mech_equipment/camera/uninstalled() - . = ..() - camera.c_tag = "null" - invalidateCameraCache() - -/obj/item/mech_equipment/camera/examine(mob/user) - . = ..() - to_chat(user, "Network: [english_list(camera.network)]; Feed is currently: [camera.status ? "Online" : "Offline"].") - -/obj/item/mech_equipment/camera/proc/activate() - camera.set_status(TRUE) - passive_power_use = 0.2 KILOWATTS - active = TRUE - -/obj/item/mech_equipment/camera/deactivate() - camera.set_status(FALSE) - passive_power_use = 0 - . = ..() - -/obj/item/mech_equipment/camera/attackby(obj/item/W, mob/user) - . = ..() - - if(isScrewdriver(W)) - var/list/all_networks = list() - for(var/network in GLOB.using_map.station_networks) - if(has_access(get_camera_access(network), GetIdCard(user))) - all_networks += network - - all_networks += additional_networks - - var/network = input("Which network would you like to configure it for?") as null|anything in (all_networks) - if(!network) - to_chat(user, SPAN_WARNING("You cannot connect to any camera network!.")) - var/delay = 2 SECONDS * user.skill_delay_mult(SKILL_DEVICES) - if(do_after(user, delay, src, DO_DEFAULT | DO_BOTH_UNIQUE_ACT) && network) - camera.network = list(network) - camera.update_coverage(TRUE) - to_chat(user, SPAN_NOTICE("You configure the camera for \the [network] network.")) - -/obj/item/mech_equipment/camera/attack_self(mob/user) - . = ..() - if(.) - if(active) - deactivate() - else - activate() - to_chat(user, SPAN_NOTICE("You toggle \the [src] [active ? "on" : "off"]")) - -/obj/item/mech_equipment/camera/get_hardpoint_maptext() - return "[english_list(camera.network)]: [active ? "ONLINE" : "OFFLINE"]" diff --git a/code/modules/mechs/interface/_interface.dm b/code/modules/mechs/interface/_interface.dm deleted file mode 100644 index fe6139c49653b..0000000000000 --- a/code/modules/mechs/interface/_interface.dm +++ /dev/null @@ -1,127 +0,0 @@ -#define BAR_CAP 12 - -/mob/living/exosuit/proc/refresh_hud() - if(LAZYLEN(pilots)) - for(var/thing in pilots) - var/mob/pilot = thing - if(pilot.client) - pilot.client.screen |= hud_elements - if(client) - client.screen |= hud_elements - -/mob/living/exosuit/InitializeHud() - zone_sel = new - if(!LAZYLEN(hud_elements)) - var/i = 1 - for(var/hardpoint in hardpoints) - var/obj/screen/exosuit/hardpoint/H = new(src, hardpoint) - H.screen_loc = "1:6,[15-i]" //temp - hud_elements |= H - hardpoint_hud_elements[hardpoint] = H - i++ - - var/list/additional_hud_elements = list( - /obj/screen/exosuit/toggle/power_control, - /obj/screen/exosuit/toggle/maint, - /obj/screen/exosuit/eject, - /obj/screen/exosuit/toggle/hardpoint, - /obj/screen/exosuit/toggle/hatch, - /obj/screen/exosuit/toggle/hatch_open, - /obj/screen/exosuit/radio, - /obj/screen/exosuit/rename, - /obj/screen/exosuit/toggle/camera - ) - if(body && body.pilot_coverage >= 100) - additional_hud_elements += /obj/screen/exosuit/toggle/air - i = 0 - var/pos = 7 - for(var/additional_hud in additional_hud_elements) - var/obj/screen/exosuit/M = new additional_hud(src) - M.screen_loc = "1:6,[pos]:[i]" - hud_elements |= M - i -= M.height - - hud_health = new /obj/screen/exosuit/health(src) - hud_health.screen_loc = "EAST-1:28,CENTER-3:11" - hud_elements |= hud_health - hud_open = locate(/obj/screen/exosuit/toggle/hatch_open) in hud_elements - hud_power = new /obj/screen/exosuit/power(src) - hud_power.screen_loc = "EAST-1:24,CENTER-4:25" - hud_elements |= hud_power - hud_power_control = locate(/obj/screen/exosuit/toggle/power_control) in hud_elements - hud_camera = locate(/obj/screen/exosuit/toggle/camera) in hud_elements - hud_heat = new /obj/screen/exosuit/heat(src) - hud_heat.screen_loc = "EAST-1:28,CENTER-4" - hud_elements |= hud_heat - - refresh_hud() - -/mob/living/exosuit/handle_hud_icons() - for(var/hardpoint in hardpoint_hud_elements) - var/obj/screen/exosuit/hardpoint/H = hardpoint_hud_elements[hardpoint] - if(H) H.update_system_info() - handle_hud_icons_health() - var/obj/item/cell/C = get_cell() - if(istype(C)) - hud_power.maptext_x = initial(hud_power.maptext_x) - hud_power.maptext_y = initial(hud_power.maptext_y) - hud_power.maptext = STYLE_SMALLFONTS_OUTLINE("[round(get_cell().charge)]/[round(get_cell().maxcharge)]", 7, COLOR_WHITE, COLOR_BLACK) - else - hud_power.maptext_x = 16 - hud_power.maptext_y = -8 - hud_power.maptext = STYLE_SMALLFONTS_OUTLINE("CHECK POWER", 7, COLOR_WHITE, COLOR_BLACK) - - refresh_hud() - -/mob/living/exosuit/handle_hud_icons_health() - - hud_health.overlays.Cut() - - if(!body || !get_cell() || (get_cell().charge <= 0)) - return - - if(!body.diagnostics || !body.diagnostics.is_functional() || ((emp_damage>EMP_GUI_DISRUPT) && prob(emp_damage*2))) - if(!GLOB.mech_damage_overlay_cache["critfail"]) - GLOB.mech_damage_overlay_cache["critfail"] = image(icon='icons/mecha/mech_hud.dmi',icon_state="dam_error") - hud_health.overlays |= GLOB.mech_damage_overlay_cache["critfail"] - return - - var/list/part_to_state = list("legs" = legs,"body" = body,"head" = head,"arms" = arms) - for(var/part in part_to_state) - var/state = 0 - var/obj/item/mech_component/MC = part_to_state[part] - if(MC) - if((emp_damage>EMP_GUI_DISRUPT) && prob(emp_damage*3)) - state = rand(0,4) - else - state = MC.damage_state - if(!GLOB.mech_damage_overlay_cache["[part]-[state]"]) - var/image/I = image(icon='icons/mecha/mech_hud.dmi',icon_state="dam_[part]") - switch(state) - if(1) - I.color = "#00ff00" - if(2) - I.color = "#f2c50d" - if(3) - I.color = "#ea8515" - if(4) - I.color = "#ff0000" - else - I.color = "#f5f5f0" - GLOB.mech_damage_overlay_cache["[part]-[state]"] = I - hud_health.overlays |= GLOB.mech_damage_overlay_cache["[part]-[state]"] - -/mob/living/exosuit/proc/reset_hardpoint_color() - for(var/hardpoint in hardpoint_hud_elements) - var/obj/screen/exosuit/hardpoint/H = hardpoint_hud_elements[hardpoint] - if(H) - H.color = COLOR_WHITE - -/mob/living/exosuit/setClickCooldown(var/timeout) - . = ..() - for(var/hardpoint in hardpoint_hud_elements) - var/obj/screen/exosuit/hardpoint/H = hardpoint_hud_elements[hardpoint] - if(H) - H.color = "#a03b3b" - animate(H, color = COLOR_WHITE, time = timeout, easing = CUBIC_EASING | EASE_IN) - addtimer(CALLBACK(src, .proc/reset_hardpoint_color), timeout) diff --git a/code/modules/mechs/interface/screen_objects.dm b/code/modules/mechs/interface/screen_objects.dm deleted file mode 100644 index 04db5722b3636..0000000000000 --- a/code/modules/mechs/interface/screen_objects.dm +++ /dev/null @@ -1,395 +0,0 @@ -// Screen objects hereon out. -#define MECH_UI_STYLE(X) "" + X + "" - -/obj/screen/exosuit - name = "hardpoint" - icon = 'icons/mecha/mech_hud.dmi' - icon_state = "base" - var/mob/living/exosuit/owner - var/height = 14 - -/obj/screen/exosuit/radio - name = "radio" - maptext = MECH_UI_STYLE("RADIO") - maptext_x = 5 - maptext_y = 12 - -/obj/screen/exosuit/radio/Click() - if(..()) - if(owner.radio) - owner.radio.attack_self(usr) - else - to_chat(usr, SPAN_WARNING("There is no radio installed.")) - -/obj/screen/exosuit/Initialize() - . = ..() - var/mob/living/exosuit/newowner = loc - if(!istype(newowner)) - return qdel(src) - owner = newowner - -/obj/screen/exosuit/Click() - return (!usr.incapacitated() && usr.canClick() && (usr == owner || usr.loc == owner)) - -/obj/screen/exosuit/hardpoint - name = "hardpoint" - var/hardpoint_tag - var/obj/item/holding - icon_state = "hardpoint" - - maptext_x = 34 - maptext_y = 3 - maptext_width = 72 - -/obj/screen/exosuit/hardpoint/MouseDrop() - ..() - if(holding) holding.screen_loc = screen_loc - -/obj/screen/exosuit/hardpoint/proc/update_system_info() - - // No point drawing it if we have no item to use or nobody to see it. - if(!holding || !owner) - return - - var/has_pilot_with_client = owner.client - if(!has_pilot_with_client && LAZYLEN(owner.pilots)) - for(var/thing in owner.pilots) - var/mob/pilot = thing - if(pilot.client) - has_pilot_with_client = TRUE - break - if(!has_pilot_with_client) - return - - var/list/new_overlays = list() - if(!owner.get_cell() || (owner.get_cell().charge <= 0)) - overlays.Cut() - maptext = "" - return - - maptext = SPAN_STYLE("font-family: 'Small Fonts'; -dm-text-outline: 1 black; font-size: 7px;", "[holding.get_hardpoint_maptext()]") - - var/ui_damage = (!owner.body.diagnostics || !owner.body.diagnostics.is_functional() || ((owner.emp_damage>EMP_GUI_DISRUPT) && prob(owner.emp_damage))) - - var/value = holding.get_hardpoint_status_value() - if(isnull(value)) - overlays.Cut() - return - - if(ui_damage) - value = -1 - maptext = SPAN_STYLE("font-family: 'Small Fonts'; -dm-text-outline: 1 black; font-size: 7px;", "ERROR") - else - if((owner.emp_damage>EMP_GUI_DISRUPT) && prob(owner.emp_damage*2)) - if(prob(10)) - value = -1 - else - value = rand(1,BAR_CAP) - else - value = round(value * BAR_CAP) - - // Draw background. - if(!GLOB.default_hardpoint_background) - GLOB.default_hardpoint_background = image(icon = 'icons/mecha/mech_hud.dmi', icon_state = "bar_bkg") - GLOB.default_hardpoint_background.pixel_x = 34 - new_overlays += GLOB.default_hardpoint_background - - if(value == 0) - if(!GLOB.hardpoint_bar_empty) - GLOB.hardpoint_bar_empty = image(icon='icons/mecha/mech_hud.dmi',icon_state="bar_flash") - GLOB.hardpoint_bar_empty.pixel_x = 24 - GLOB.hardpoint_bar_empty.color = "#ff0000" - new_overlays += GLOB.hardpoint_bar_empty - else if(value < 0) - if(!GLOB.hardpoint_error_icon) - GLOB.hardpoint_error_icon = image(icon='icons/mecha/mech_hud.dmi',icon_state="bar_error") - GLOB.hardpoint_error_icon.pixel_x = 34 - new_overlays += GLOB.hardpoint_error_icon - else - value = min(value, BAR_CAP) - // Draw statbar. - if(!LAZYLEN(GLOB.hardpoint_bar_cache)) - for(var/i=0;i5) - bar.color = "#00ff00" - else if(i>1) - bar.color = "#ffff00" - else - bar.color = "#ff0000" - GLOB.hardpoint_bar_cache += bar - for(var/i=1;i<=value;i++) - new_overlays += GLOB.hardpoint_bar_cache[i] - overlays = new_overlays - -/obj/screen/exosuit/hardpoint/Initialize(mapload, var/newtag) - . = ..() - hardpoint_tag = newtag - name = "hardpoint ([hardpoint_tag])" - -/obj/screen/exosuit/hardpoint/Click(var/location, var/control, var/params) - - if(!(..())) - return - - if(!owner?.hatch_closed) - to_chat(usr, SPAN_WARNING("Error: Hardpoint interface disabled while [owner.body.hatch_descriptor] is open.")) - return - - var/modifiers = params2list(params) - if(modifiers["ctrl"]) - if(owner.hardpoints_locked) - to_chat(usr, SPAN_WARNING("Hardpoint ejection system is locked.")) - return - if(owner.remove_system(hardpoint_tag)) - to_chat(usr, SPAN_NOTICE("You disengage and discard the system mounted to your [hardpoint_tag] hardpoint.")) - else - to_chat(usr, SPAN_DANGER("You fail to remove the system mounted to your [hardpoint_tag] hardpoint.")) - return - - if(owner.selected_hardpoint == hardpoint_tag) - icon_state = "hardpoint" - owner.clear_selected_hardpoint() - else - if(owner.set_hardpoint(hardpoint_tag)) - icon_state = "hardpoint_selected" - -/obj/screen/exosuit/eject - name = "eject" - maptext = MECH_UI_STYLE("EJECT") - maptext_x = 5 - maptext_y = 12 - -/obj/screen/exosuit/eject/Click() - if(..()) - owner.eject(usr) - -/obj/screen/exosuit/rename - name = "rename" - maptext = MECH_UI_STYLE("RENAME") - maptext_x = 1 - maptext_y = 12 - -/obj/screen/exosuit/power - name = "power" - icon_state = null - - maptext_width = 64 - -/obj/screen/exosuit/rename/Click() - if(..()) - owner.rename(usr) - -/obj/screen/exosuit/toggle - name = "toggle" - var/toggled = FALSE - -/obj/screen/exosuit/toggle/Initialize() - . = ..() - queue_icon_update() - -/obj/screen/exosuit/toggle/on_update_icon() - . = ..() - icon_state = "[initial(icon_state)][toggled ? "_enabled" : ""]" - maptext = FONT_COLORED(toggled ? COLOR_WHITE : COLOR_GRAY,initial(maptext)) - -/obj/screen/exosuit/toggle/Click() - if(..()) toggled() - -/obj/screen/exosuit/toggle/proc/toggled() - toggled = !toggled - queue_icon_update() - return toggled - -/obj/screen/exosuit/toggle/power_control - name = "Power control" - icon_state = "small_important" - maptext = MECH_UI_STYLE("POWER") - maptext_x = 3 - maptext_y = 13 - height = 12 - -/obj/screen/exosuit/toggle/power_control/toggled() - . = ..() - owner.toggle_power(usr) - -/obj/screen/exosuit/toggle/power_control/on_update_icon() - toggled = (owner.power == MECH_POWER_ON) - . = ..() - -/obj/screen/exosuit/toggle/air - name = "air" - icon_state = "small_important" - maptext = MECH_UI_STYLE("AIR") - maptext_x = 9 - maptext_y = 13 - height = 12 - -/obj/screen/exosuit/toggle/air/toggled() - owner.use_air = ..() - to_chat(usr, SPAN_NOTICE("Auxiliary atmospheric system [owner.use_air ? "enabled" : "disabled"].")) - -/obj/screen/exosuit/toggle/maint - name = "toggle maintenance protocol" - icon_state = "small" - maptext = MECH_UI_STYLE("MAINT") - maptext_x = 5 - maptext_y = 13 - height = 12 - -/obj/screen/exosuit/toggle/maint/toggled() - owner.maintenance_protocols = ..() - to_chat(usr, SPAN_NOTICE("Maintenance protocols [owner.maintenance_protocols ? "enabled" : "disabled"].")) - -/obj/screen/exosuit/toggle/hardpoint - name = "toggle hardpoint lock" - maptext = MECH_UI_STYLE("GEAR") - maptext_x = 5 - maptext_y = 12 - -/obj/screen/exosuit/toggle/hardpoint/toggled() - owner.hardpoints_locked = ..() - to_chat(usr, SPAN_NOTICE("Hardpoint system access is now [owner.hardpoints_locked ? "disabled" : "enabled"].")) - -/obj/screen/exosuit/toggle/hatch - name = "toggle hatch lock" - maptext = MECH_UI_STYLE("LOCK") - maptext_x = 5 - maptext_y = 12 - -/obj/screen/exosuit/toggle/hatch/toggled() - if(!owner.hatch_locked && !owner.hatch_closed) - to_chat(usr, SPAN_WARNING("You cannot lock the hatch while it is open.")) - return - owner.hatch_locked = ..() - to_chat(usr, SPAN_NOTICE("The [owner.body.hatch_descriptor] is [owner.hatch_locked ? "now" : "no longer" ] locked.")) - -/obj/screen/exosuit/toggle/hatch_open - name = "open or close hatch" - maptext = MECH_UI_STYLE("CLOSE") - maptext_x = 4 - maptext_y = 12 - -/obj/screen/exosuit/toggle/hatch_open/toggled() - if (!owner) - return - if(owner.hatch_locked && owner.hatch_closed) - to_chat(usr, SPAN_WARNING("You cannot open the hatch while it is locked.")) - return - owner.hatch_closed = ..() - to_chat(usr, SPAN_NOTICE("The [owner.body.hatch_descriptor] is now [owner.hatch_closed ? "closed" : "open" ].")) - owner.update_icon() - -/obj/screen/exosuit/toggle/hatch_open/on_update_icon() - toggled = owner.hatch_closed - . = ..() - if(toggled) - maptext = MECH_UI_STYLE("OPEN") - maptext_x = 5 - else - maptext = MECH_UI_STYLE("CLOSE") - maptext_x = 4 - -// This is basically just a holder for the updates the exosuit does. -/obj/screen/exosuit/health - name = "exosuit integrity" - icon_state = "health" - -/obj/screen/exosuit/health/Click() - if(..()) - if(owner && owner.body && owner.get_cell() && owner.body.diagnostics?.is_functional()) - usr.setClickCooldown(0.2 SECONDS) - to_chat(usr, SPAN_NOTICE("The diagnostics panel blinks several times as it updates:")) - playsound(owner.loc,'sound/effects/scanbeep.ogg',30,0) - for(var/obj/item/mech_component/MC in list(owner.arms, owner.legs, owner.body, owner.head)) - if(MC) - MC.return_diagnostics(usr) - -//Controls if cameras set the vision flags -/obj/screen/exosuit/toggle/camera - name = "toggle camera matrix" - icon_state = "small_important" - maptext = MECH_UI_STYLE("SENSOR") - maptext_x = 1 - maptext_y = 13 - height = 12 - -/obj/screen/exosuit/toggle/camera/toggled() - if(!owner.head) - to_chat(usr, SPAN_WARNING("I/O Error: Camera systems not found.")) - return - if(!owner.head.vision_flags) - to_chat(usr, SPAN_WARNING("Alternative sensor configurations not found. Contact manufacturer for more details.")) - return - if(!owner.get_cell()) - to_chat(usr, SPAN_WARNING("The augmented vision systems are offline.")) - return - owner.head.active_sensors = ..() - to_chat(usr, SPAN_NOTICE("[owner.head.name] advanced sensor mode is [owner.head.active_sensors ? "now" : "no longer" ] active.")) - -/obj/screen/exosuit/toggle/camera/on_update_icon() - toggled = owner.head.active_sensors - . = ..() -/obj/screen/exosuit/needle - vis_flags = VIS_INHERIT_ID - icon_state = "heatprobe_needle" - -/obj/screen/exosuit/heat - name = "heat probe" - icon_state = "heatprobe" - var/celsius = TRUE - var/obj/screen/exosuit/needle/gauge_needle = null - desc = "TEST" - -/obj/screen/exosuit/heat/Initialize() - . = ..() - gauge_needle = new /obj/screen/exosuit/needle(owner) - vis_contents += gauge_needle - -/obj/screen/exosuit/heat/Destroy() - QDEL_NULL(gauge_needle) - . = ..() - -/obj/screen/exosuit/heat/Click(location, control, params) - if(..()) - var/modifiers = params2list(params) - if(modifiers["shift"]) - if(owner && owner.material) - usr.show_message(SPAN_NOTICE("Your suit's safe operating limit ceiling is [(celsius ? "[owner.material.melting_point - T0C] °C" : "[owner.material.melting_point] K" )]."), VISIBLE_MESSAGE) - return - if(modifiers["ctrl"]) - celsius = !celsius - usr.show_message(SPAN_NOTICE("You switch the chassis probe display to use [celsius ? "celsius" : "kelvin"]."), VISIBLE_MESSAGE) - return - if(owner && owner.body && owner.body.diagnostics?.is_functional() && owner.loc) - usr.show_message(SPAN_NOTICE("The life support panel blinks several times as it updates:"), VISIBLE_MESSAGE) - - usr.show_message(SPAN_NOTICE("Chassis heat probe reports temperature of [(celsius ? "[owner.bodytemperature - T0C] °C" : "[owner.bodytemperature] K" )]."), VISIBLE_MESSAGE) - if(owner.material.melting_point < owner.bodytemperature) - usr.show_message(SPAN_WARNING("Warning: Current chassis temperature exceeds operating parameters."), VISIBLE_MESSAGE) - var/air_contents = owner.loc.return_air() - if(!air_contents) - usr.show_message(SPAN_WARNING("The external air probe isn't reporting any data!"), VISIBLE_MESSAGE) - else - usr.show_message(SPAN_NOTICE("External probes report: [jointext(atmosanalyzer_scan(owner.loc, air_contents), "
              ")]"), VISIBLE_MESSAGE) - else - usr.show_message(SPAN_WARNING("The life support panel isn't responding."), VISIBLE_MESSAGE) - -/obj/screen/exosuit/heat/proc/Update() - //Relative value of heat - if(owner && owner.body && owner.body.diagnostics?.is_functional() && gauge_needle) - var/value = clamp( owner.bodytemperature / (owner.material.melting_point * 1.55), 0, 1) - animate( - gauge_needle, - transform = matrix().Update( - rotation = Interpolate(-90, 90, value), - offset_y = -2 - ), - time = 0.1, - easing = SINE_EASING - ) - - -#undef BAR_CAP -#undef MECH_UI_STYLE diff --git a/code/modules/mechs/mech.dm b/code/modules/mechs/mech.dm deleted file mode 100644 index 9bd19e8a2d9b1..0000000000000 --- a/code/modules/mechs/mech.dm +++ /dev/null @@ -1,236 +0,0 @@ - - -// Big stompy robots. -/mob/living/exosuit - name = "exosuit" - desc = "A powerful machine piloted from a cockpit, but worn like a suit of armour." - density = TRUE - opacity = TRUE - anchored = TRUE - default_pixel_x = -8 - default_pixel_y = 0 - status_flags = PASSEMOTES - a_intent = I_HURT - mob_size = MOB_LARGE - mob_flags = MOB_FLAG_UNPINNABLE - - meat_type = null - meat_amount = 0 - skin_material = null - skin_amount = 0 - bone_material = null - bone_amount = 0 - - can_be_buckled = FALSE - - var/emp_damage = 0 - - var/obj/item/device/radio/exosuit/radio - - var/wreckage_path = /obj/structure/mech_wreckage - var/mech_turn_sound = 'sound/mecha/mechturn.ogg' - var/mech_step_sound = 'sound/mecha/mechstep.ogg' - - // Access updating/container. - var/obj/item/card/id/access_card - var/list/saved_access = list() - var/sync_access = 1 - - // Mob currently piloting the exosuit. - var/list/pilots - var/list/pilot_overlays - - // Visible external components. Not strictly accurately named for non-humanoid machines (submarines) but w/e - var/obj/item/mech_component/manipulators/arms - var/obj/item/mech_component/propulsion/legs - var/obj/item/mech_component/sensors/head - var/obj/item/mech_component/chassis/body - - // Invisible components. - var/datum/effect/effect/system/spark_spread/sparks - - // Equipment tracking vars. - var/obj/item/mech_equipment/selected_system - var/selected_hardpoint - var/list/hardpoints = list() - var/hardpoints_locked - var/maintenance_protocols - - // Material - var/material/material - - // Cockpit access vars. - var/hatch_closed = FALSE - var/hatch_locked = FALSE - - //Air! - var/use_air = FALSE - - // Interface stuff. - var/list/hud_elements = list() - var/list/hardpoint_hud_elements = list() - var/obj/screen/exosuit/health/hud_health - var/obj/screen/exosuit/toggle/hatch_open/hud_open - var/obj/screen/exosuit/power/hud_power - var/obj/screen/exosuit/heat/hud_heat - var/obj/screen/exosuit/toggle/power_control/hud_power_control - var/obj/screen/exosuit/toggle/camera/hud_camera - //POWER - var/power = MECH_POWER_OFF - -/mob/living/exosuit/MayZoom() - if(head?.vision_flags) - return FALSE - return TRUE - -/mob/living/exosuit/is_flooded(lying_mob, absolute) - . = (body && body.pilot_coverage >= 100 && hatch_closed) ? FALSE : ..() - -/mob/living/exosuit/Initialize(mapload, var/obj/structure/heavy_vehicle_frame/source_frame) - . = ..() - - if(!access_card) access_card = new (src) - - pixel_x = default_pixel_x - pixel_y = default_pixel_y - sparks = new(src) - - // Grab all the supplied components. - if(source_frame) - if(source_frame.set_name) - name = source_frame.set_name - if(source_frame.arms) - source_frame.arms.forceMove(src) - arms = source_frame.arms - if(source_frame.legs) - source_frame.legs.forceMove(src) - legs = source_frame.legs - if(source_frame.head) - source_frame.head.forceMove(src) - head = source_frame.head - if(source_frame.body) - source_frame.body.forceMove(src) - body = source_frame.body - if(source_frame.material) - material = source_frame.material - - updatehealth() - - // Generate hardpoint list. - var/list/component_descriptions - for(var/obj/item/mech_component/comp in list(arms, legs, head, body)) - if(comp.exosuit_desc_string) - LAZYADD(component_descriptions, comp.exosuit_desc_string) - if(LAZYLEN(comp.has_hardpoints)) - for(var/hardpoint in comp.has_hardpoints) - hardpoints[hardpoint] = null - - if(head && head.radio) - radio = new(src) - - if(LAZYLEN(component_descriptions)) - desc = "[desc] It has been built with [english_list(component_descriptions)]." - - // Create HUD. - InitializeHud() - - // Build icon. - queue_icon_update() - -/mob/living/exosuit/Destroy() - - selected_system = null - - for(var/thing in pilots) - var/mob/pilot = thing - if(pilot && pilot.client) - pilot.client.screen -= hud_elements - pilot.client.images -= hud_elements - pilot.forceMove(get_turf(src)) - pilots = null - - hud_health = null - hud_open = null - hud_power = null - hud_power_control = null - hud_camera = null - - for(var/thing in hud_elements) - qdel(thing) - hud_elements.Cut() - - for(var/hardpoint in hardpoints) - qdel(hardpoints[hardpoint]) - hardpoints.Cut() - - QDEL_NULL(access_card) - QDEL_NULL(arms) - QDEL_NULL(legs) - QDEL_NULL(head) - QDEL_NULL(body) - - for(var/hardpoint in hardpoint_hud_elements) - var/obj/screen/exosuit/hardpoint/H = hardpoint_hud_elements[hardpoint] - H.owner = null - H.holding = null - qdel(H) - hardpoint_hud_elements.Cut() - - . = ..() - -/mob/living/exosuit/IsAdvancedToolUser() - return TRUE - -/mob/living/exosuit/examine(mob/user) - . = ..() - if(LAZYLEN(pilots) && (!hatch_closed || body.pilot_coverage < 100 || body.transparent_cabin)) - to_chat(user, "It is being piloted by [english_list(pilots, nothing_text = "nobody")].") - if(body && LAZYLEN(body.pilot_positions)) - to_chat(user, "It can seat [body.pilot_positions.len] pilot\s total.") - if(hardpoints.len) - to_chat(user, "It has the following hardpoints:") - for(var/hardpoint in hardpoints) - var/obj/item/I = hardpoints[hardpoint] - to_chat(user, "- [hardpoint]: [istype(I) ? "[I]" : "nothing"].") - else - to_chat(user, "It has no visible hardpoints.") - - for(var/obj/item/mech_component/thing in list(arms, legs, head, body)) - if(!thing) - continue - - var/damage_string = thing.get_damage_string() - to_chat(user, "Its [thing.name] [thing.gender == PLURAL ? "are" : "is"] [damage_string].") - - to_chat(user, "It menaces with reinforcements of [material].") - -/mob/living/exosuit/return_air() - return (body && body.pilot_coverage >= 100 && hatch_closed && body.cockpit) ? body.cockpit : loc.return_air() - -/mob/living/exosuit/GetIdCard() - return access_card - -/mob/living/exosuit/set_dir() - . = ..() - if(.) - update_pilots() - -/mob/living/exosuit/proc/toggle_power(var/mob/user) - if(power == MECH_POWER_TRANSITION) - to_chat(user, SPAN_NOTICE("Power transition in progress. Please wait.")) - else if(power == MECH_POWER_ON) //Turning it off is instant - playsound(src, 'sound/mecha/mech-shutdown.ogg', 100, 0) - power = MECH_POWER_OFF - else if(get_cell(TRUE)) - //Start power up sequence - power = MECH_POWER_TRANSITION - playsound(src, 'sound/mecha/powerup.ogg', 50, 0) - if(user.do_skilled(1.5 SECONDS, SKILL_MECH, src, 0.5, DO_DEFAULT | DO_USER_UNIQUE_ACT) && power == MECH_POWER_TRANSITION) - playsound(src, 'sound/mecha/nominal.ogg', 50, 0) - power = MECH_POWER_ON - else - to_chat(user, SPAN_WARNING("You abort the powerup sequence.")) - power = MECH_POWER_OFF - hud_power_control?.queue_icon_update() - else - to_chat(user, SPAN_WARNING("Error: No power cell was detected.")) diff --git a/code/modules/mechs/mech_construction.dm b/code/modules/mechs/mech_construction.dm deleted file mode 100644 index 0a3bf238ad41c..0000000000000 --- a/code/modules/mechs/mech_construction.dm +++ /dev/null @@ -1,163 +0,0 @@ -/mob/living/exosuit/proc/dismantle() - - playsound(src.loc, 'sound/items/Deconstruct.ogg', 50, 1) - var/obj/structure/heavy_vehicle_frame/frame = new(get_turf(src)) - for(var/hardpoint in hardpoints) - remove_system(hardpoint, force = 1) - hardpoints.Cut() - - if(arms) - frame.arms = arms - arms.forceMove(frame) - arms = null - if(legs) - frame.legs = legs - legs.forceMove(frame) - legs = null - if(body) - frame.body = body - body.forceMove(frame) - body = null - if(head) - frame.head = head - head.forceMove(frame) - head = null - - frame.is_wired = FRAME_WIRED_ADJUSTED - frame.is_reinforced = FRAME_REINFORCED_WELDED - frame.set_name = name - frame.name = "frame of \the [frame.set_name]" - frame.material = material - frame.queue_icon_update() - - qdel(src) - -/mob/living/exosuit/proc/forget_module(var/module_to_forget) - //Realistically a module disappearing without being uninstalled is wrong and a bug or adminbus - var/target = null - for(var/hardpoint in hardpoints) - if(hardpoints[hardpoint]== module_to_forget) - target = hardpoint - break - - hardpoints[target] = null - - if(target == selected_hardpoint) - clear_selected_hardpoint() - - GLOB.destroyed_event.unregister(module_to_forget, src, .proc/forget_module) - - var/obj/screen/exosuit/hardpoint/H = hardpoint_hud_elements[target] - H.holding = null - - hud_elements -= module_to_forget - refresh_hud() - queue_icon_update() - - for(var/thing in pilots) - var/mob/pilot = thing - if(pilot && pilot.client) - pilot.client.screen -= module_to_forget - -/mob/living/exosuit/proc/install_system(var/obj/item/system, var/system_hardpoint, var/mob/user) - if(hardpoints_locked || hardpoints[system_hardpoint]) - return FALSE - - var/obj/item/mech_equipment/ME = system - if(istype(ME)) - if(ME.restricted_hardpoints && !(system_hardpoint in ME.restricted_hardpoints)) - return FALSE - if(ME.restricted_software) - if(!head || !head.software) - return FALSE - var/found - for(var/software in ME.restricted_software) - if(software in head.software.installed_software) - found = TRUE - break - if(!found) - return FALSE - else - return FALSE - - if(user) - var/delay = 3 SECONDS * user.skill_delay_mult(SKILL_DEVICES) - if(delay > 0) - user.visible_message( - SPAN_NOTICE("\The [user] begins trying to install \the [system] into \the [src]."), - SPAN_NOTICE("You begin trying to install \the [system] into \the [src].") - ) - if(!do_after(user, delay, src, DO_PUBLIC_UNIQUE) || user.get_active_hand() != system) - return FALSE - - if(hardpoints_locked || hardpoints[system_hardpoint]) - return FALSE - - if(user.unEquip(system)) - to_chat(user, SPAN_NOTICE("You install \the [system] in \the [src]'s [system_hardpoint].")) - playsound(user.loc, 'sound/items/Screwdriver.ogg', 100, 1) - else return FALSE - - GLOB.destroyed_event.register(system, src, .proc/forget_module) - - system.forceMove(src) - hardpoints[system_hardpoint] = system - ME.installed(src) - - var/obj/screen/exosuit/hardpoint/H = hardpoint_hud_elements[system_hardpoint] - H.holding = system - - system.screen_loc = H.screen_loc - system.hud_layerise() - - hud_elements |= system - refresh_hud() - queue_icon_update() - - return TRUE - -/mob/living/exosuit/proc/remove_system(var/system_hardpoint, var/mob/user, var/force) - - if((hardpoints_locked && !force) || !hardpoints[system_hardpoint]) - return 0 - - var/obj/item/system = hardpoints[system_hardpoint] - if(user) - var/delay = 3 SECONDS * user.skill_delay_mult(SKILL_DEVICES) - if(delay > 0) - user.visible_message(SPAN_NOTICE("\The [user] begins trying to remove \the [system] from \the [src].")) - if(!do_after(user, delay, src, DO_PUBLIC_UNIQUE) || hardpoints[system_hardpoint] != system) - return FALSE - - hardpoints[system_hardpoint] = null - - if(system_hardpoint == selected_hardpoint) - clear_selected_hardpoint() - - var/obj/item/mech_equipment/ME = system - if(istype(ME)) - ME.uninstalled() - system.forceMove(get_turf(src)) - system.screen_loc = null - system.layer = initial(system.layer) - GLOB.destroyed_event.unregister(system, src, .proc/forget_module) - - var/obj/screen/exosuit/hardpoint/H = hardpoint_hud_elements[system_hardpoint] - H.holding = null - - for(var/thing in pilots) - var/mob/pilot = thing - if(pilot && pilot.client) - pilot.client.screen -= system - - hud_elements -= system - refresh_hud() - queue_icon_update() - - if(user) - system.forceMove(get_turf(user)) - user.put_in_hands(system) - to_chat(user, SPAN_NOTICE("You remove \the [system] from \the [src]'s [system_hardpoint].")) - playsound(user.loc, 'sound/items/Screwdriver.ogg', 100, 1) - - return 1 diff --git a/code/modules/mechs/mech_damage.dm b/code/modules/mechs/mech_damage.dm deleted file mode 100644 index 7765f44336964..0000000000000 --- a/code/modules/mechs/mech_damage.dm +++ /dev/null @@ -1,209 +0,0 @@ -/mob/living/exosuit/ex_act(severity) - if (status_flags & GODMODE) - return - var/b_loss = 0 - var/f_loss = 0 - switch (severity) - if (EX_ACT_DEVASTATING) - b_loss = 200 - f_loss = 200 - if (EX_ACT_HEAVY) - b_loss = 90 - f_loss = 90 - if(EX_ACT_LIGHT) - b_loss = 45 - - // spread damage overall - apply_damage(b_loss, DAMAGE_BRUTE, null, DAMAGE_FLAG_EXPLODE | DAMAGE_FLAG_DISPERSED, used_weapon = "Explosive blast") - apply_damage(f_loss, DAMAGE_BURN, null, DAMAGE_FLAG_EXPLODE | DAMAGE_FLAG_DISPERSED, used_weapon = "Explosive blast") - -/mob/living/exosuit/apply_effect(effect = 0, effecttype = EFFECT_STUN, blocked = 0) - if(!effect || (blocked >= 100)) - return 0 - if(LAZYLEN(pilots) && (!hatch_closed || !prob(body.pilot_coverage))) - if(effect > 0 && effecttype == DAMAGE_RADIATION) - effect = max((1-(get_armors_by_zone(null, DAMAGE_RADIATION)/100))*effect/(blocked+1),0) - var/mob/living/pilot = pick(pilots) - return pilot.apply_effect(effect, effecttype, blocked) - if (!(effecttype in list(EFFECT_PAIN, EFFECT_STUTTER, EFFECT_EYE_BLUR, EFFECT_DROWSY, EFFECT_STUN, EFFECT_WEAKEN))) - . = ..() - -/mob/living/exosuit/resolve_item_attack(var/obj/item/I, var/mob/living/user, var/def_zone) - if(!I.force) - user.visible_message(SPAN_NOTICE("\The [user] bonks \the [src] harmlessly with \the [I].")) - return - - switch(def_zone) - if(BP_HEAD , BP_CHEST, BP_MOUTH, BP_EYES) - if(LAZYLEN(pilots) && (!hatch_closed || !prob(body.pilot_coverage))) - var/mob/living/pilot = pick(pilots) - var/zone = pilot.resolve_item_attack(I, user, def_zone) - if(zone) - var/datum/attack_result/AR = new() - AR.hit_zone = zone - AR.attackee = pilot - return AR - - return def_zone //Careful with effects, mechs shouldn't be stunned - -/mob/living/exosuit/hitby(atom/movable/AM, var/datum/thrownthing/TT) - if (!hatch_closed && (LAZYLEN(pilots) < body.pilot_positions.len)) - var/mob/living/M = AM - if (istype(M)) - var/chance = 50 //Throwing someone at an empty exosuit MAY put them in the seat - var/message = "\The [AM] lands in \the [src]'s cockpit with a crash. Get in the damn exosuit!" - if (TT.thrower == TT.thrownthing) - //This is someone jumping - chance = M.skill_check_multiple(list(SKILL_MECH = HAS_PERK, SKILL_HAULING = SKILL_ADEPT)) ? 100 : chance - message = "\The [AM] gets in \the [src]'s cockpit in one fluid motion." - if (prob(chance)) - if (enter(AM, silent = TRUE, check_incap = FALSE, instant = TRUE)) - visible_message(SPAN_NOTICE("[message]")) - return - - if (LAZYLEN(pilots) && (!hatch_closed || !prob(body.pilot_coverage))) - var/mob/living/pilot = pick(pilots) - return pilot.hitby(AM, TT) - . = ..() - -/mob/living/exosuit/bullet_act(obj/item/projectile/P, def_zone, used_weapon) - if (status_flags & GODMODE) - return PROJECTILE_FORCE_MISS - switch(def_zone) - if(BP_HEAD , BP_CHEST, BP_MOUTH, BP_EYES) - if(LAZYLEN(pilots) && (!hatch_closed || !prob(body.pilot_coverage))) - var/mob/living/pilot = pick(pilots) - return pilot.bullet_act(P, def_zone, used_weapon) - ..() - -/mob/living/exosuit/get_armors_by_zone(def_zone, damage_type, damage_flags) - . = ..() - if(body && body.m_armour) - var/body_armor = get_extension(body.m_armour, /datum/extension/armor) - if(body_armor) - . += body_armor - -/mob/living/exosuit/updatehealth() - maxHealth = body ? body.mech_health : 0 - health = maxHealth-(getFireLoss()+getBruteLoss()) - -/mob/living/exosuit/adjustFireLoss(var/amount, var/obj/item/mech_component/MC = pick(list(arms, legs, body, head))) - if(MC) - MC.take_burn_damage(amount) - MC.update_health() - -/mob/living/exosuit/adjustBruteLoss(var/amount, var/obj/item/mech_component/MC = pick(list(arms, legs, body, head))) - if(MC) - MC.take_brute_damage(amount) - MC.update_health() - -/mob/living/exosuit/proc/zoneToComponent(var/zone) - switch(zone) - if(BP_EYES , BP_HEAD) - return head - if(BP_L_ARM , BP_R_ARM) - return arms - if(BP_L_LEG , BP_R_LEG) - return legs - else - return body - -/mob/living/exosuit/apply_damage(damage = 0, damagetype = DAMAGE_BRUTE, def_zone, damage_flags = EMPTY_BITFIELD, used_weapon, armor_pen, silent = FALSE) - if(!damage) - return 0 - - if(!def_zone) - if(damage_flags & DAMAGE_FLAG_DISPERSED) - var/old_damage = damage - var/tally - silent = FALSE - for(var/obj/item/part in list(arms, legs, body, head)) - tally += part.w_class - for(var/obj/item/part in list(arms, legs, body, head)) - damage = old_damage * part.w_class/tally - def_zone = BP_CHEST - if(part == arms) - def_zone = BP_L_ARM - else if(part == legs) - def_zone = BP_L_LEG - else if(part == head) - def_zone = BP_HEAD - - . = .() || . - return - - def_zone = ran_zone(def_zone) - - var/list/after_armor = modify_damage_by_armor(def_zone, damage, damagetype, damage_flags, src, armor_pen, TRUE) - damage = after_armor[1] - damagetype = after_armor[2] - - if(!damage) - return 0 - - var/target = zoneToComponent(def_zone) - //Only 3 types of damage concern mechs and vehicles - switch(damagetype) - if (DAMAGE_BRUTE) - adjustBruteLoss(damage, target) - if (DAMAGE_BURN) - adjustFireLoss(damage, target) - if (DAMAGE_RADIATION) - for(var/mob/living/pilot in pilots) - pilot.apply_damage(damage, DAMAGE_RADIATION, def_zone, damage_flags, used_weapon) - - if ((damagetype == DAMAGE_BRUTE || damagetype == DAMAGE_BURN) && prob(25+(damage*2))) - sparks.set_up(3,0,src) - sparks.start() - updatehealth() - - return 1 - -/mob/living/exosuit/rad_act(var/severity) - return FALSE // Pilots already query rads, modify this for radiation alerts and such - -/mob/living/exosuit/get_rads() - . = ..() - if(!hatch_closed || (body.pilot_coverage < 100)) //Open, environment is the source - return . - var/list/after_armor = modify_damage_by_armor(null, ., DAMAGE_RADIATION, DAMAGE_FLAG_DISPERSED, src, 0, TRUE) - return after_armor[1] - -/mob/living/exosuit/getFireLoss() - var/total = 0 - for(var/obj/item/mech_component/MC in list(arms, legs, body, head)) - if(MC) - total += MC.burn_damage - return total - -/mob/living/exosuit/getBruteLoss() - var/total = 0 - for(var/obj/item/mech_component/MC in list(arms, legs, body, head)) - if(MC) - total += MC.brute_damage - return total - -/mob/living/exosuit/emp_act(var/severity) - if (status_flags & GODMODE) - return - var/ratio = get_blocked_ratio(null, DAMAGE_BURN, null, (3-severity) * 20) // HEAVY = 40; LIGHT = 20 - - if(ratio >= 0.5) - for(var/mob/living/m in pilots) - to_chat(m, SPAN_NOTICE("Your Faraday shielding absorbed the pulse!")) - return - else if(ratio > 0) - for(var/mob/living/m in pilots) - to_chat(m, SPAN_NOTICE("Your Faraday shielding mitigated the pulse!")) - - emp_damage += round((12 - (severity*3))*( 1 - ratio)) - for(var/obj/item/thing in list(arms,legs,head,body)) - thing.emp_act(severity) - if(!hatch_closed || !prob(body.pilot_coverage)) - for(var/thing in pilots) - var/mob/pilot = thing - pilot.emp_act(severity) - ..() - -/mob/living/exosuit/get_bullet_impact_effect_type(def_zone) - return BULLET_IMPACT_METAL diff --git a/code/modules/mechs/mech_damage_immunity.dm b/code/modules/mechs/mech_damage_immunity.dm deleted file mode 100644 index 6b2dde3abaa87..0000000000000 --- a/code/modules/mechs/mech_damage_immunity.dm +++ /dev/null @@ -1,53 +0,0 @@ -/mob/living/exosuit/Stun() - return 0 - -/mob/living/exosuit/Weaken() - return 0 - -/mob/living/exosuit/Paralyse() - return 0 - -/mob/living/exosuit/getOxyLoss() - return 0 - -/mob/living/exosuit/setOxyLoss() - return 0 - -/mob/living/exosuit/adjustOxyLoss() - return 0 - -/mob/living/exosuit/getToxLoss() - return 0 - -/mob/living/exosuit/setToxLoss() - return 0 - -/mob/living/exosuit/adjustToxLoss() - return 0 - -/mob/living/exosuit/getBrainLoss() - return 0 - -/mob/living/exosuit/setBrainLoss() - return 0 - -/mob/living/exosuit/adjustBrainLoss() - return 0 - -/mob/living/exosuit/getCloneLoss() - return 0 - -/mob/living/exosuit/setCloneLoss() - return 0 - -/mob/living/exosuit/adjustCloneLoss() - return 0 - -/mob/living/exosuit/getHalLoss() - return 0 - -/mob/living/exosuit/setHalLoss() - return 0 - -/mob/living/exosuit/adjustHalLoss() - return 0 \ No newline at end of file diff --git a/code/modules/mechs/mech_icon.dm b/code/modules/mechs/mech_icon.dm deleted file mode 100644 index 5728ac523179d..0000000000000 --- a/code/modules/mechs/mech_icon.dm +++ /dev/null @@ -1,99 +0,0 @@ -/proc/get_mech_image(var/decal, var/cache_key, var/cache_icon, var/image_colour, var/overlay_layer = FLOAT_LAYER) - var/use_key = "[cache_key]-[cache_icon]-[overlay_layer]-[decal ? decal : "none"]-[image_colour ? image_colour : "none"]" - if(!GLOB.mech_image_cache[use_key]) - var/image/I = image(icon = cache_icon, icon_state = cache_key) - if(image_colour) - var/image/masked_color = image(icon = cache_icon, icon_state = "[cache_key]_mask") - masked_color.color = image_colour - masked_color.blend_mode = BLEND_MULTIPLY - I.overlays += masked_color - if(decal) - var/decal_key = "[decal]-[cache_key]" - if(!GLOB.mech_icon_cache[decal_key]) - var/template_key = "template-[cache_key]" - if(!GLOB.mech_icon_cache[template_key]) - GLOB.mech_icon_cache[template_key] = icon(cache_icon, "[cache_key]_mask") - var/icon/decal_icon = icon('icons/mecha/mech_decals.dmi',decal) - decal_icon.AddAlphaMask(GLOB.mech_icon_cache[template_key]) - GLOB.mech_icon_cache[decal_key] = decal_icon - var/image/decal_image = get_mech_image(null, decal_key, GLOB.mech_icon_cache[decal_key]) - decal_image.blend_mode = BLEND_MULTIPLY - I.overlays += decal_image - I.appearance_flags |= RESET_COLOR - I.layer = overlay_layer - I.plane = FLOAT_PLANE - GLOB.mech_image_cache[use_key] = I - return GLOB.mech_image_cache[use_key] - -/proc/get_mech_images(var/list/components = list(), var/overlay_layer = FLOAT_LAYER) - var/list/all_images = list() - for(var/obj/item/mech_component/comp in components) - all_images += get_mech_image(comp.decal, comp.icon_state, comp.on_mech_icon, comp.color, overlay_layer) - return all_images - -/mob/living/exosuit/on_update_icon() - var/list/new_overlays = get_mech_images(list(body, head), MECH_BASE_LAYER) - if(body) - new_overlays += get_mech_image(body.decal, "[body.icon_state]_cockpit", body.on_mech_icon, overlay_layer = MECH_INTERMEDIATE_LAYER) - update_pilots(FALSE) - if(LAZYLEN(pilot_overlays)) - new_overlays += pilot_overlays - if(body) - new_overlays += get_mech_image(body.decal, "[body.icon_state]_overlay[hatch_closed ? "" : "_open"]", body.on_mech_icon, body.color, MECH_COCKPIT_LAYER) - if(arms) - new_overlays += get_mech_image(arms.decal, arms.icon_state, arms.on_mech_icon, arms.color, MECH_ARM_LAYER) - if(legs) - new_overlays += get_mech_image(legs.decal, legs.icon_state, legs.on_mech_icon, legs.color, MECH_LEG_LAYER) - for(var/hardpoint in hardpoints) - var/obj/item/mech_equipment/hardpoint_object = hardpoints[hardpoint] - if(hardpoint_object) - var/use_icon_state = "[hardpoint_object.icon_state]_[hardpoint]" - if(use_icon_state in GLOB.mech_weapon_overlays) - var/color = COLOR_WHITE - var/decal = null - if(hardpoint in list(HARDPOINT_BACK, HARDPOINT_RIGHT_SHOULDER, HARDPOINT_LEFT_SHOULDER)) - color = body.color - decal = body.decal - else if(hardpoint in list(HARDPOINT_RIGHT_HAND, HARDPOINT_LEFT_HAND)) - color = arms.color - decal = arms.decal - else - color = head.color - decal = head.decal - - new_overlays += get_mech_image(decal, use_icon_state, 'icons/mecha/mech_weapon_overlays.dmi', color, hardpoint_object.mech_layer ) - overlays = new_overlays - -/mob/living/exosuit/proc/update_pilots(var/update_overlays = TRUE) - if(update_overlays && LAZYLEN(pilot_overlays)) - overlays -= pilot_overlays - pilot_overlays = null - if(body && !(body.hide_pilot)) - for(var/i = 1 to LAZYLEN(pilots)) - var/mob/pilot = pilots[i] - var/image/draw_pilot = new - draw_pilot.appearance = pilot - var/rel_pos = dir == NORTH ? -1 : 1 - draw_pilot.layer = MECH_PILOT_LAYER + (body ? ((LAZYLEN(body.pilot_positions)-i)*0.001 * rel_pos) : 0) - draw_pilot.plane = FLOAT_PLANE - draw_pilot.appearance_flags = KEEP_TOGETHER - if(body && i <= LAZYLEN(body.pilot_positions)) - var/list/offset_values = body.pilot_positions[i] - var/list/directional_offset_values = offset_values["[dir]"] - draw_pilot.pixel_x = pilot.default_pixel_x + directional_offset_values["x"] - draw_pilot.pixel_y = pilot.default_pixel_y + directional_offset_values["y"] - draw_pilot.pixel_z = 0 - draw_pilot.ClearTransform() - - //Mask pilots! - //Masks are 48x48 and pilots 32x32 (in theory at least) so some math is required for centering - var/diff_x = 8 - draw_pilot.pixel_x - var/diff_y = 8 - draw_pilot.pixel_y - draw_pilot.filters = filter(type = "alpha", icon = icon(body.on_mech_icon, "[body.icon_state]_pilot_mask[hatch_closed ? "" : "_open"]", dir), x = diff_x, y = diff_y) - - LAZYADD(pilot_overlays, draw_pilot) - if(update_overlays && LAZYLEN(pilot_overlays)) - overlays += pilot_overlays - -/mob/living/exosuit/regenerate_icons() - return diff --git a/code/modules/mechs/mech_interaction.dm b/code/modules/mechs/mech_interaction.dm deleted file mode 100644 index 0c148b5a7ebab..0000000000000 --- a/code/modules/mechs/mech_interaction.dm +++ /dev/null @@ -1,496 +0,0 @@ -/mob/living/MouseDrop(atom/over) - if(usr == src && usr != over) - if(istype(over, /mob/living/exosuit)) - var/mob/living/exosuit/exosuit = over - if(exosuit.enter(src)) - return - return ..() - -/mob/living/exosuit/MouseDrop_T(atom/dropping, mob/user) - var/obj/machinery/portable_atmospherics/canister/C = dropping - if(istype(C)) - body.MouseDrop_T(dropping, user) - else . = ..() - -/mob/living/exosuit/MouseDrop(mob/living/carbon/human/over_object) //going from assumption none of previous options are relevant to exosuit - if(body) - if(!body.MouseDrop(over_object)) - return ..() - -/mob/living/exosuit/RelayMouseDrag(src_object, over_object, src_location, over_location, src_control, over_control, params, var/mob/user) - if(user && (user in pilots) && user.loc == src) - return OnMouseDrag(src_object, over_object, src_location, over_location, src_control, over_control, params, user) - return ..() - -/mob/living/exosuit/OnMouseDrag(src_object, over_object, src_location, over_location, src_control, over_control, params, var/mob/user) - if(!user || incapacitated() || user.incapacitated()) - return FALSE - - if(!(user in pilots) && user != src) - return FALSE - - //This is handled at active module level really, it is the one who has to know if it's supposed to act - if(selected_system) - return selected_system.MouseDragInteraction(src_object, over_object, src_location, over_location, src_control, over_control, params, user) - -/datum/click_handler/mech/Click(atom/target, location, control, params) - var/mob/living/exosuit/E = owner.mob.loc - if(!istype(E)) - //If this happens something broke tbh - QDEL_NULL(src) - return - if(E.hatch_closed && !isHUDobj(target)) - return E.ClickOn(target, params, owner.mob) - else return TRUE - - -/datum/click_handler/mech/OnDblClick(var/atom/A, var/params) - return TRUE - -/mob/living/exosuit/allow_click_through(atom/A, params, mob/user) - if(LAZYISIN(pilots, user) && !hatch_closed) - return TRUE - . = ..() - -//UI distance checks -/mob/living/exosuit/contents_nano_distance(src_object, mob/living/user) - . = ..() - if(!hatch_closed) - return max(shared_living_nano_distance(src_object), .) //Either visible to mech(outside) or visible to user (inside) - - -/mob/living/exosuit/ClickOn(var/atom/A, var/params, var/mob/user) - - if(!user || incapacitated() || user.incapacitated()) - return - - if(!loc) return - var/adj = A.Adjacent(src) // Why in the fuck isn't Adjacent() commutative. - - var/modifiers = params2list(params) - if(modifiers["shift"]) - user.examinate(A) - return - - if(modifiers["ctrl"]) - if(selected_system) - if(selected_system == A) - selected_system.CtrlClick(user) - setClickCooldown(3) - return - - if(!(user in pilots) && user != src) - return - - if(!canClick()) - return - - // Are we facing the target? - if(A.loc != src && !(get_dir(src, A) & dir)) - return - - if(!arms) - to_chat(user, SPAN_WARNING("\The [src] has no manipulators!")) - setClickCooldown(3) - return - - if(!arms.motivator || !arms.motivator.is_functional()) - to_chat(user, SPAN_WARNING("Your motivators are damaged! You can't use your manipulators!")) - setClickCooldown(15) - return - - if(!get_cell()?.checked_use(arms.power_use * CELLRATE)) - to_chat(user, power == MECH_POWER_ON ? SPAN_WARNING("Error: Power levels insufficient.") : SPAN_WARNING("\The [src] is powered off.")) - return - - // User is not necessarily the exosuit, or the same person, so update intent. - if(user != src) - a_intent = user.a_intent - if(user.zone_sel) - zone_sel.set_selected_zone(user.zone_sel.selecting) - else - zone_sel.set_selected_zone(BP_CHEST) - // You may attack the target with your exosuit FIST if you're malfunctioning. - var/atom/movable/AM = A - var/fail_prob = (user != src && istype(AM) && AM.loc != src) ? (user.skill_check(SKILL_MECH, HAS_PERK) ? 0: 15 ) : 0 - var/failed = FALSE - if(prob(fail_prob)) - to_chat(user, SPAN_DANGER("Your incompetence leads you to target the wrong thing with the exosuit!")) - failed = TRUE - else if(emp_damage > EMP_ATTACK_DISRUPT && prob(emp_damage*2)) - to_chat(user, SPAN_DANGER("The wiring sparks as you attempt to control the exosuit!")) - failed = TRUE - - if(!failed) - if(selected_system) - if(selected_system == A) - selected_system.attack_self(user) - setClickCooldown(5) - return - - // Mounted non-exosuit systems have some hacky loc juggling - // to make sure that they work. - var/system_moved = FALSE - var/obj/item/temp_system - var/obj/item/mech_equipment/ME - if(istype(selected_system, /obj/item/mech_equipment)) - ME = selected_system - temp_system = ME.get_effective_obj() - if(temp_system in ME) - system_moved = 1 - temp_system.forceMove(src) - else - temp_system = selected_system - - // Slip up and attack yourself maybe. - failed = FALSE - if(prob(fail_prob)) - to_chat(user, SPAN_DANGER("You artlessly shove the exosuit controls the wrong way!")) - failed = TRUE - else if(emp_damage>EMP_MOVE_DISRUPT && prob(10)) - failed = TRUE - - if(failed) - var/list/other_atoms = orange(1, A) - A = null - while(LAZYLEN(other_atoms)) - var/atom/picked = pick_n_take(other_atoms) - if(istype(picked) && picked.simulated) - A = picked - break - if(!A) - A = src - adj = A.Adjacent(src) - - var/resolved - - if(adj) resolved = temp_system.resolve_attackby(A, src, params) - if(!resolved && A && temp_system) - var/mob/ruser = src - if(!system_moved) //It's more useful to pass along clicker pilot when logic is fully mechside - ruser = user - temp_system.afterattack(A,ruser,adj,params) - if(system_moved) //We are using a proxy system that may not have logging like mech equipment does - admin_attack_log(user, A, "Attacked using \a [temp_system] (MECH)", "Was attacked with \a [temp_system] (MECH)", "used \a [temp_system] (MECH) to attack") - //Mech equipment subtypes can add further click delays - var/extra_delay = 0 - if(!isnull(selected_system)) - ME = selected_system - extra_delay = ME.equipment_delay - setClickCooldown(arms ? arms.action_delay + extra_delay : 15 + extra_delay) - if(system_moved) - temp_system.forceMove(selected_system) - return - - if(A == src) - setClickCooldown(5) - return attack_self(user) - else if(adj) - setClickCooldown(arms ? arms.action_delay : 15) - return A.attack_generic(src, arms.melee_damage, "attacked") - return - -/mob/living/exosuit/proc/set_hardpoint(var/hardpoint_tag) - clear_selected_hardpoint() - if(hardpoints[hardpoint_tag]) - // Set the new system. - selected_system = hardpoints[hardpoint_tag] - selected_hardpoint = hardpoint_tag - return 1 // The element calling this proc will set its own icon. - return 0 - -/mob/living/exosuit/proc/clear_selected_hardpoint() - - if(selected_hardpoint) - for(var/hardpoint in hardpoints) - if(hardpoint != selected_hardpoint) - continue - var/obj/screen/exosuit/hardpoint/H = hardpoint_hud_elements[hardpoint] - if(istype(H)) - H.icon_state = "hardpoint" - break - selected_system = null - selected_hardpoint = null - -/mob/living/exosuit/proc/check_enter(mob/user, silent = FALSE, check_incap = TRUE) - if(!user || (check_incap && user.incapacitated())) - return FALSE - if (user.buckled) - if (!silent) - to_chat(user, SPAN_WARNING("You are currently buckled to \the [user.buckled].")) - return FALSE - if(!(user.mob_size >= body.min_pilot_size && user.mob_size <= body.max_pilot_size)) - if(!silent) - to_chat(user, SPAN_WARNING("You cannot pilot an exosuit of this size.")) - return FALSE - if(!user.Adjacent(src)) - return FALSE - if(hatch_locked) - if(!silent) - to_chat(user, SPAN_WARNING("The [body.hatch_descriptor] is locked.")) - return FALSE - if(hatch_closed) - if(!silent) - to_chat(user, SPAN_WARNING("The [body.hatch_descriptor] is closed.")) - return FALSE - if(LAZYLEN(pilots) >= LAZYLEN(body.pilot_positions)) - if(!silent) - to_chat(user, SPAN_WARNING("\The [src] is occupied to capacity.")) - return FALSE - return TRUE - -/mob/living/exosuit/proc/enter(mob/user, silent = FALSE, check_incap = TRUE, instant = FALSE) - if(!check_enter(user, silent, check_incap)) - return FALSE - to_chat(user, SPAN_NOTICE("You start climbing into \the [src]...")) - if(!body) - return FALSE - if(!instant && !do_after(user, body.climb_time, src, DO_PUBLIC_UNIQUE)) - return FALSE - if(!check_enter(user, silent, check_incap)) - return FALSE - if(!silent) - to_chat(user, SPAN_NOTICE("You climb into \the [src].")) - playsound(src, 'sound/machines/windowdoor.ogg', 50, 1) - user.forceMove(src) - LAZYDISTINCTADD(pilots, user) - sync_access() - if(user.client) user.client.screen |= hud_elements - LAZYDISTINCTADD(user.additional_vision_handlers, src) - update_pilots() - if(user && user.client) - user.client.CH = new /datum/click_handler/mech(user.client) - // user.PushClickHandler(/datum/click_handler/mech) - return 1 - -/mob/living/exosuit/proc/sync_access() - access_card.access = saved_access.Copy() - if(sync_access) - for(var/mob/pilot in pilots) - access_card.access |= pilot.GetAccess() - to_chat(pilot, SPAN_NOTICE("Security access permissions synchronized.")) - -/mob/living/exosuit/proc/eject(var/mob/user, var/silent) - if(!user || !(user in src.contents)) - return - if(hatch_closed) - if(hatch_locked) - if(!silent) - to_chat(user, SPAN_WARNING("The [body.hatch_descriptor] is locked.")) - return - hud_open.toggled() - if(!silent) - to_chat(user, SPAN_NOTICE("You open the hatch and climb out of \the [src].")) - else - if(!silent) - to_chat(user, SPAN_NOTICE("You climb out of \the [src].")) - - // user.RemoveClickHandler(/datum/click_handler/mech) - if(user && user.client) - QDEL_NULL(user.client.CH) - - user.dropInto(loc) - LAZYREMOVE(user.additional_vision_handlers, src) - if(user.client) - user.client.screen -= hud_elements - user.client.eye = user - if(user in pilots) - a_intent = I_HURT - LAZYREMOVE(pilots, user) - UNSETEMPTY(pilots) - update_pilots() - return 1 - -/mob/living/exosuit/attackby(var/obj/item/thing, var/mob/user) - - if(user.a_intent != I_HURT && istype(thing, /obj/item/mech_equipment)) - if(hardpoints_locked) - to_chat(user, SPAN_WARNING("Hardpoint system access is disabled.")) - return - - var/obj/item/mech_equipment/realThing = thing - if(realThing.owner) - return - - var/free_hardpoints = list() - for(var/hardpoint in hardpoints) - if(hardpoints[hardpoint] == null) - free_hardpoints += hardpoint - var/to_place = input("Where would you like to install it?") as null|anything in (realThing.restricted_hardpoints & free_hardpoints) - if(!to_place) - to_chat(user, SPAN_WARNING("There is no room to install \the [thing].")) - if(install_system(thing, to_place, user)) - return - to_chat(user, SPAN_WARNING("\The [thing] could not be installed in that hardpoint.")) - return - - else if(istype(thing, /obj/item/device/kit/paint)) - user.visible_message(SPAN_NOTICE("\The [user] opens \the [thing] and spends some quality time customising \the [src].")) - var/obj/item/device/kit/paint/P = thing - SetName(P.new_name) - desc = P.new_desc - for(var/obj/item/mech_component/comp in list(arms, legs, head, body)) - comp.decal = P.new_icon - if(P.new_icon_file) - icon = P.new_icon_file - queue_icon_update() - P.use(1, user) - return 1 - - else - if(user.a_intent != I_HURT) - if(isMultitool(thing)) - if(hardpoints_locked) - to_chat(user, SPAN_WARNING("Hardpoint system access is disabled.")) - return - - var/list/parts = list() - for(var/hardpoint in hardpoints) - if(hardpoints[hardpoint]) - parts += hardpoint - - var/to_remove = input("Which component would you like to remove") as null|anything in parts - - if(remove_system(to_remove, user)) - return - to_chat(user, SPAN_WARNING("\The [src] has no hardpoint systems to remove.")) - return - else if(isWrench(thing)) - if(!maintenance_protocols) - to_chat(user, SPAN_WARNING("The securing bolts are not visible while maintenance protocols are disabled.")) - return - - visible_message(SPAN_WARNING("\The [user] begins unwrenching the securing bolts holding \the [src] together.")) - var/delay = 6 SECONDS * user.skill_delay_mult(SKILL_DEVICES) - if(!do_after(user, delay, src, DO_PUBLIC_UNIQUE) || !maintenance_protocols) - return - visible_message(SPAN_NOTICE("\The [user] loosens and removes the securing bolts, dismantling \the [src].")) - dismantle() - return - else if(isWelder(thing)) - if(!getBruteLoss()) - return - var/list/damaged_parts = list() - for(var/obj/item/mech_component/MC in list(arms, legs, body, head)) - if(MC && MC.brute_damage) - damaged_parts += MC - var/obj/item/mech_component/to_fix = input(user,"Which component would you like to fix") as null|anything in damaged_parts - if(CanPhysicallyInteract(user) && !QDELETED(to_fix) && (to_fix in src) && to_fix.brute_damage) - to_fix.repair_brute_generic(thing, user) - return - else if(isCoil(thing)) - if(!getFireLoss()) - return - var/list/damaged_parts = list() - for(var/obj/item/mech_component/MC in list(arms, legs, body, head)) - if(MC && MC.burn_damage) - damaged_parts += MC - var/obj/item/mech_component/to_fix = input(user,"Which component would you like to fix") as null|anything in damaged_parts - if(CanPhysicallyInteract(user) && !QDELETED(to_fix) && (to_fix in src) && to_fix.burn_damage) - to_fix.repair_burn_generic(thing, user) - return - else if(isScrewdriver(thing)) - if(!maintenance_protocols) - to_chat(user, SPAN_WARNING("The cell compartment remains locked while maintenance protocols are disabled.")) - return - if(!body || !body.cell) - to_chat(user, SPAN_WARNING("There is no cell here for you to remove!")) - return - var/delay = 2 SECONDS * user.skill_delay_mult(SKILL_DEVICES) - if(!do_after(user, delay, src, DO_PUBLIC_UNIQUE) || !maintenance_protocols || !body || !body.cell) - return - - user.put_in_hands(body.cell) - to_chat(user, SPAN_NOTICE("You remove \the [body.cell] from \the [src].")) - playsound(user.loc, 'sound/items/Crowbar.ogg', 50, 1) - visible_message(SPAN_NOTICE("\The [user] pries out \the [body.cell] using \the [thing].")) - power = MECH_POWER_OFF - hud_power_control.queue_icon_update() - body.cell = null - return - else if(isCrowbar(thing)) - if(!hatch_locked) - to_chat(user, SPAN_NOTICE("The cockpit isn't locked. There is no need for this.")) - return - if(!body) //Error - return - var/delay = min(50 * user.skill_delay_mult(SKILL_DEVICES), 50 * user.skill_delay_mult(SKILL_EVA)) - visible_message(SPAN_NOTICE("\The [user] starts forcing the \the [src]'s emergency [body.hatch_descriptor] release using \the [thing].")) - if(!do_after(user, delay, src, DO_PUBLIC_UNIQUE)) - return - visible_message(SPAN_NOTICE("\The [user] forces \the [src]'s [body.hatch_descriptor] open using the \the [thing].")) - playsound(user.loc, 'sound/machines/bolts_up.ogg', 25, 1) - hatch_locked = FALSE - hatch_closed = FALSE - for(var/mob/pilot in pilots) - eject(pilot, silent = 1) - hud_open.queue_icon_update() - queue_icon_update() - return - else if(istype(thing, /obj/item/cell)) - if(!maintenance_protocols) - to_chat(user, SPAN_WARNING("The cell compartment remains locked while maintenance protocols are disabled.")) - return - if(!body || body.cell) - to_chat(user, SPAN_WARNING("There is already a cell in there!")) - return - - if(user.unEquip(thing)) - thing.forceMove(body) - body.cell = thing - to_chat(user, SPAN_NOTICE("You install \the [body.cell] into \the [src].")) - playsound(user.loc, 'sound/items/Screwdriver.ogg', 50, 1) - visible_message(SPAN_NOTICE("\The [user] installs \the [body.cell] into \the [src].")) - return - else if(istype(thing, /obj/item/device/robotanalyzer)) - to_chat(user, SPAN_NOTICE("Diagnostic Report for \the [src]:")) - for(var/obj/item/mech_component/MC in list(arms, legs, body, head)) - if(MC) - MC.return_diagnostics(user) - return - return ..() - -/mob/living/exosuit/attack_hand(var/mob/user) - // Drag the pilot out if possible. - if(user.a_intent == I_HURT) - if(!LAZYLEN(pilots)) - to_chat(user, SPAN_WARNING("There is nobody inside \the [src].")) - else if(!hatch_closed) - var/mob/pilot = pick(pilots) - user.visible_message(SPAN_DANGER("\The [user] is trying to pull \the [pilot] out of \the [src]!")) - if(do_after(user, 3 SECONDS, src, DO_PUBLIC_UNIQUE) && user.Adjacent(src) && (pilot in pilots) && !hatch_closed) - user.visible_message(SPAN_DANGER("\The [user] drags \the [pilot] out of \the [src]!")) - eject(pilot, silent=1) - else if(hatch_closed) - if(MUTATION_FERAL in user.mutations) - user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN) - attack_generic(user, 5) - return - - // Otherwise toggle the hatch. - if(hud_open) - hud_open.toggled() - return - -/mob/living/exosuit/attack_generic(var/mob/user, var/damage, var/attack_message = "smashes into") - if(..()) - playsound(loc, 'sound/effects/metal_close.ogg', 40, 1) - playsound(loc, 'sound/weapons/tablehit1.ogg', 40, 1) - -/mob/living/exosuit/proc/attack_self(var/mob/user) - return visible_message("\The [src] pokes itself.") - -/mob/living/exosuit/proc/rename(var/mob/user) - if(user != src && !(user in pilots)) - return - var/new_name = sanitize(input("Enter a new exosuit designation.", "Exosuit Name") as text|null, max_length = MAX_NAME_LEN) - if(!new_name || new_name == name || (user != src && !(user in pilots))) - return - SetName(new_name) - to_chat(user, SPAN_NOTICE("You have redesignated this exosuit as \the [name].")) - -/mob/living/exosuit/get_inventory_slot(obj/item/I) - for(var/h in hardpoints) - if(hardpoints[h] == I) - return h - return 0 diff --git a/code/modules/mechs/mech_life.dm b/code/modules/mechs/mech_life.dm deleted file mode 100644 index f13cf70454ba9..0000000000000 --- a/code/modules/mechs/mech_life.dm +++ /dev/null @@ -1,157 +0,0 @@ -/mob/living/exosuit/handle_disabilities() - return - -/mob/living/exosuit/Life() - - for(var/thing in pilots) - var/mob/pilot = thing - if(pilot.loc != src) // Admin jump or teleport/grab. - if(pilot.client) - pilot.client.screen -= hud_elements - LAZYREMOVE(pilots, pilot) - UNSETEMPTY(pilots) - update_pilots() - - if(radio) - radio.on = (head && head.radio && head.radio.is_functional() && get_cell()) - - body.update_air(hatch_closed && use_air) - - var/powered = FALSE - if(get_cell()) - powered = get_cell().drain_power(0, 0, calc_power_draw()) > 0 - - if(!powered) - //Shut down all systems - if(head) - head.active_sensors = FALSE - hud_camera.queue_icon_update() - for(var/hardpoint in hardpoints) - var/obj/item/mech_equipment/M = hardpoints[hardpoint] - if(istype(M) && M.active && M.passive_power_use) - M.deactivate() - - - updatehealth() - if(health <= 0 && stat != DEAD) - death() - - if(emp_damage > 0) - emp_damage -= min(1, emp_damage) //Reduce emp accumulation over time - - ..() //Handles stuff like environment - - handle_hud_icons() - - lying = FALSE // Fuck off, carp. - handle_vision(powered) - -/mob/living/exosuit/get_cell(force) - RETURN_TYPE(/obj/item/cell) - if(power == MECH_POWER_ON || force) //For most intents we can assume that a powered off exosuit acts as if it lacked a cell - return body ? body.cell : null - return null - -/mob/living/exosuit/proc/calc_power_draw() - //Passive power stuff here. You can also recharge cells or hardpoints if those make sense - var/total_draw = 0 - for(var/hardpoint in hardpoints) - var/obj/item/mech_equipment/I = hardpoints[hardpoint] - if(!istype(I)) - continue - total_draw += I.passive_power_use - - if(head && head.active_sensors) - total_draw += head.power_use - - if(body) - total_draw += body.power_use - - return total_draw - -/mob/living/exosuit/handle_environment(var/datum/gas_mixture/environment) - if(!environment) return - //Mechs and vehicles in general can be assumed to just tend to whatever ambient temperature - if(abs(environment.temperature - bodytemperature) > 0 ) - bodytemperature += ((environment.temperature - bodytemperature) / 6) - - if(bodytemperature > material.melting_point * 1.45 ) //A bit higher because I like to assume there's a difference between a mech and a wall - var/damage = 5 - if(bodytemperature > material.melting_point * 1.75 ) - damage = 10 - if(bodytemperature > material.melting_point * 2.15 ) - damage = 15 - apply_damage(damage, DAMAGE_BURN) - //A possibility is to hook up interface icons here. But this works pretty well in my experience - if(prob(damage)) - visible_message(SPAN_DANGER("\The [src]'s hull bends and buckles under the intense heat!")) - - hud_heat.Update() - -/mob/living/exosuit/death(var/gibbed) - // Eject the pilot. - if(LAZYLEN(pilots)) - hatch_locked = 0 // So they can get out. - for(var/pilot in pilots) - eject(pilot, silent=1) - - // Salvage moves into the wreck unless we're exploding violently. - var/obj/wreck = new wreckage_path(get_turf(src), src, gibbed) - wreck.name = "wreckage of \the [name]" - - // Handle the rest of things. - ..(gibbed, (gibbed ? "explodes!" : "grinds to a halt before collapsing!")) - - if(!gibbed) - if(arms.loc != src) - arms = null - if(legs.loc != src) - legs = null - if(head.loc != src) - head = null - if(body.loc != src) - body = null - qdel(src) - -/mob/living/exosuit/gib() - death(1) - - // Get a turf to play with. - var/turf/T = get_turf(src) - if(!T) - qdel(src) - return - - // Hurl our component pieces about. - var/list/stuff_to_throw = list() - for(var/obj/item/thing in list(arms, legs, head, body)) - if(thing) stuff_to_throw += thing - for(var/hardpoint in hardpoints) - if(hardpoints[hardpoint]) - var/obj/item/thing = hardpoints[hardpoint] - thing.screen_loc = null - stuff_to_throw += thing - for(var/obj/item/thing in stuff_to_throw) - thing.forceMove(T) - thing.throw_at(get_edge_target_turf(src,pick(GLOB.alldirs)),rand(3,6),40) - explosion(T, -1, 0, 2) - qdel(src) - return - -/mob/living/exosuit/handle_vision(powered) - var/was_blind = sight & BLIND - if(head) - sight = head.get_sight(powered) - see_invisible = head.get_invisible(powered) - if(body && (body.pilot_coverage < 100 || body.transparent_cabin) || !hatch_closed) - sight &= ~BLIND - - if(sight & BLIND && !was_blind) - for(var/mob/pilot in pilots) - to_chat(pilot, SPAN_WARNING("The sensors are not operational and you cannot see a thing!")) - -/mob/living/exosuit/additional_sight_flags() - return sight - -/mob/living/exosuit/additional_see_invisible() - return see_invisible diff --git a/code/modules/mechs/mech_movement.dm b/code/modules/mechs/mech_movement.dm deleted file mode 100644 index bc09218caa749..0000000000000 --- a/code/modules/mechs/mech_movement.dm +++ /dev/null @@ -1,169 +0,0 @@ -/mob/living/exosuit - movement_handlers = list( - /datum/movement_handler/mob/delay/exosuit, - /datum/movement_handler/mob/space/exosuit, - /datum/movement_handler/mob/multiz, - /datum/movement_handler/mob/exosuit - ) - -/mob/living/exosuit/Move() - . = ..() - if(. && !istype(loc, /turf/space)) - playsound(src.loc, mech_step_sound, 40, 1) - -/mob/living/exosuit/can_ztravel() - if(Allow_Spacemove()) //Handle here - return TRUE - -/mob/living/exosuit/Allow_Spacemove(check_drift) - . = ..() - if(.) - return - - //Regardless of modules, emp prevents control - if(emp_damage >= EMP_MOVE_DISRUPT && prob(25)) - return FALSE - - var/obj/item/mech_equipment/ionjets/J = hardpoints[HARDPOINT_BACK] - if(istype(J)) - if(((!check_drift) || (check_drift && J.stabilizers)) && J.allowSpaceMove()) - inertia_dir = 0 - return TRUE - -//Inertia drift making us face direction makes exosuit flight a bit difficult, plus newtonian flight model yo -/mob/living/exosuit/set_dir(ndir) - if(inertia_dir && inertia_dir == ndir) - return ..(dir) - return ..(ndir) - -/mob/living/exosuit/can_fall(var/anchor_bypass = FALSE, var/turf/location_override = src.loc) - //mechs are always anchored, so falling should always ignore it - if(..(TRUE, location_override)) - return !(can_overcome_gravity()) - -/mob/living/exosuit/can_float() - return FALSE //Nope - -/datum/movement_handler/mob/delay/exosuit - expected_host_type = /mob/living/exosuit - -/datum/movement_handler/mob/delay/exosuit/MayMove(mover, is_external) - var/mob/living/exosuit/exosuit = host - if(mover && (mover != exosuit) && (!(mover in exosuit.pilots)) && is_external) - return MOVEMENT_PROCEED - else if(world.time >= next_move) - return MOVEMENT_PROCEED - return MOVEMENT_STOP - -/datum/movement_handler/mob/delay/exosuit/DoMove(direction, mover, is_external) //Delay must be handled by other handlers. - return - -/mob/living/exosuit/SetMoveCooldown(timeout) - var/datum/movement_handler/mob/delay/delay = GetMovementHandler(/datum/movement_handler/mob/delay/exosuit) - if(delay) - delay.SetDelay(timeout) - -/mob/living/exosuit/ExtraMoveCooldown(timeout) - var/datum/movement_handler/mob/delay/delay = GetMovementHandler(/datum/movement_handler/mob/delay/exosuit) - if(delay) - delay.AddDelay(timeout) - -/datum/movement_handler/mob/exosuit - expected_host_type = /mob/living/exosuit - -/datum/movement_handler/mob/exosuit/MayMove(var/mob/mover, var/is_external) - var/mob/living/exosuit/exosuit = host - if((!(mover in exosuit.pilots) && mover != exosuit) || exosuit.incapacitated() || mover.incapacitated()) - return MOVEMENT_STOP - if(!exosuit.legs) - to_chat(mover, SPAN_WARNING("\The [exosuit] has no means of propulsion!")) - exosuit.SetMoveCooldown(3) - return MOVEMENT_STOP - if(!exosuit.legs.motivator || !exosuit.legs.motivator.is_functional()) - to_chat(mover, SPAN_WARNING("Your motivators are damaged! You can't move!")) - exosuit.SetMoveCooldown(15) - return MOVEMENT_STOP - if(exosuit.maintenance_protocols) - to_chat(mover, SPAN_WARNING("Maintenance protocols are in effect.")) - exosuit.SetMoveCooldown(3) - return MOVEMENT_STOP - var/obj/item/cell/C = exosuit.get_cell() - if(!C || !C.check_charge(exosuit.legs.power_use * CELLRATE)) - to_chat(mover, SPAN_WARNING("The power indicator flashes briefly.")) - exosuit.SetMoveCooldown(3) //On fast exosuits this got annoying fast - return MOVEMENT_STOP - - return MOVEMENT_PROCEED - -/datum/movement_handler/mob/exosuit/DoMove(var/direction, var/mob/mover, var/is_external) - var/mob/living/exosuit/exosuit = host - var/moving_dir = direction - - var/failed = FALSE - var/fail_prob = mover != host ? (mover.skill_check(SKILL_MECH, HAS_PERK) ? 0 : 25) : 0 - if(prob(fail_prob)) - to_chat(mover, SPAN_DANGER("You clumsily fumble with the exosuit joystick.")) - failed = TRUE - else if(exosuit.emp_damage >= EMP_MOVE_DISRUPT && prob(30)) - failed = TRUE - if(failed) - moving_dir = pick(GLOB.cardinal - exosuit.dir) - - exosuit.get_cell()?.use(exosuit.legs.power_use * CELLRATE) - - if(direction & (UP|DOWN)) - var/txt_dir = direction & UP ? "upwards" : "downwards" - exosuit.visible_message(SPAN_NOTICE("\The [exosuit] moves [txt_dir].")) - - if(exosuit.dir != moving_dir && !(direction & (UP|DOWN))) - playsound(exosuit.loc, exosuit.mech_turn_sound, 40,1) - exosuit.set_dir(moving_dir) - exosuit.SetMoveCooldown(exosuit.legs.turn_delay) - else - exosuit.SetMoveCooldown(exosuit.legs ? exosuit.legs.move_delay : 3) - var/turf/target_loc = get_step(exosuit, direction) - if(target_loc && exosuit.legs && exosuit.legs.can_move_on(exosuit.loc, target_loc) && exosuit.MayEnterTurf(target_loc)) - exosuit.Move(target_loc) - return MOVEMENT_HANDLED -/datum/movement_handler/mob/space/exosuit - expected_host_type = /mob/living/exosuit - -// Space movement -/datum/movement_handler/mob/space/exosuit/DoMove(var/direction, var/mob/mover) - - if(!mob.check_solid_ground()) - mob.anchored = FALSE - var/allowmove = mob.Allow_Spacemove(0) - if(!allowmove) - return MOVEMENT_HANDLED - else if(allowmove == -1 && mob.handle_spaceslipping()) //Check to see if we slipped - return MOVEMENT_HANDLED - else - mob.inertia_dir = 0 //If not then we can reset inertia and move - else - mob.anchored = TRUE - mob.inertia_dir = 0 //Reset inertia values as we are not going to be treated as floating - -/datum/movement_handler/mob/space/exosuit/MayMove(var/mob/mover, var/is_external) - if((mover != host) && is_external) - return MOVEMENT_PROCEED - - if(!mob.check_solid_ground()) - if(!mob.Allow_Spacemove(0)) - return MOVEMENT_STOP - return MOVEMENT_PROCEED - -/mob/living/exosuit/lost_in_space() - for(var/atom/movable/AM in contents) - if(!AM.lost_in_space()) - return FALSE - return !length(pilots) - -/mob/living/exosuit/fall_damage() - return 175 //Exosuits are big and heavy - -/mob/living/exosuit/handle_fall_effect(var/turf/landing) - // Return here if for any reason you shouldn´t take damage - ..() - if(legs) - legs.handle_vehicle_fall() diff --git a/code/modules/mechs/mech_wreckage.dm b/code/modules/mechs/mech_wreckage.dm deleted file mode 100644 index b0752881112c5..0000000000000 --- a/code/modules/mechs/mech_wreckage.dm +++ /dev/null @@ -1,87 +0,0 @@ -/obj/structure/mech_wreckage - name = "wreckage" - desc = "It might have some salvagable parts." - density = TRUE - opacity = 1 - anchored = TRUE - icon_state = "wreck" - icon = 'icons/mecha/mech_part_items.dmi' - var/prepared - -/obj/structure/mech_wreckage/New(var/newloc, var/mob/living/exosuit/exosuit, var/gibbed) - if(exosuit) - name = "wreckage of \the [exosuit.name]" - if(!gibbed) - for(var/obj/item/thing in list(exosuit.arms, exosuit.legs, exosuit.head, exosuit.body)) - if(thing && prob(40)) - thing.forceMove(src) - for(var/hardpoint in exosuit.hardpoints) - if(exosuit.hardpoints[hardpoint]) - if(prob(40)) - var/obj/item/thing = exosuit.hardpoints[hardpoint] - if(exosuit.remove_system(hardpoint)) - thing.forceMove(src) - else - //This has been destroyed, some modules may need to perform bespoke logic - var/obj/item/mech_equipment/E = exosuit.hardpoints[hardpoint] - if(istype(E)) - E.wreck() - - ..() - -/obj/structure/mech_wreckage/powerloader/New(var/newloc) - ..(newloc, new /mob/living/exosuit/premade/powerloader(newloc), FALSE) - -/obj/structure/mech_wreckage/attack_hand(var/mob/user) - if(contents.len) - var/obj/item/thing = pick(contents) - if(istype(thing)) - thing.forceMove(get_turf(user)) - user.put_in_hands(thing) - to_chat(user, "You retrieve \the [thing] from \the [src].") - return - return ..() - -/obj/structure/mech_wreckage/attackby(var/obj/item/W, var/mob/user) - - var/cutting - if(isWelder(W)) - var/obj/item/weldingtool/WT = W - if(WT.isOn()) - cutting = TRUE - else - to_chat(user, SPAN_WARNING("Turn the torch on, first.")) - else if(istype(W, /obj/item/gun/energy/plasmacutter)) - cutting = TRUE - - if(cutting) - if(!prepared) - prepared = 1 - to_chat(user, SPAN_NOTICE("You partially dismantle \the [src].")) - else - to_chat(user, SPAN_WARNING("\The [src] has already been weakened.")) - return 1 - - else if(isWrench(W)) - if(prepared) - to_chat(user, SPAN_NOTICE("You finish dismantling \the [src].")) - new /obj/item/stack/material/steel(get_turf(src),rand(5,10)) - qdel(src) - else - to_chat(user, SPAN_WARNING("It's too solid to dismantle. Try cutting through some of the bigger bits.")) - return 1 - else if(istype(W) && W.force > 20) - visible_message(SPAN_DANGER("\The [src] has been smashed with \the [W] by \the [user]!")) - if(prob(20)) - new /obj/item/stack/material/steel(get_turf(src),rand(1,3)) - qdel(src) - return 1 - return ..() - -/obj/structure/mech_wreckage/Destroy() - for(var/obj/thing in contents) - if(prob(65)) - thing.forceMove(get_turf(src)) - else - qdel(thing) - ..() diff --git a/code/modules/mechs/premade/_premade.dm b/code/modules/mechs/premade/_premade.dm deleted file mode 100644 index eba2462ddc498..0000000000000 --- a/code/modules/mechs/premade/_premade.dm +++ /dev/null @@ -1,157 +0,0 @@ -//GLOBAL_LIST_INIT(mech_decals, (icon_states('icons/mecha/mech_decals.dmi')-list("template", "mask"))) - -/mob/living/exosuit/premade - name = "impossible exosuit" - desc = "It seems to be saying 'please let me die'." - var/decal - -/mob/living/exosuit/premade/Initialize() - if(arms) - arms.decal = decal - arms.prebuild() - if(legs) - legs.decal = decal - legs.prebuild() - if(head) - head.decal = decal - head.prebuild() - if(body) - body.decal = decal - body.prebuild() - if(!material) - material = SSmaterials.get_material_by_name(MATERIAL_STEEL) - . = ..() - - spawn_mech_equipment() - -/mob/living/exosuit/premade/proc/spawn_mech_equipment() - set waitfor = FALSE - install_system(new /obj/item/mech_equipment/light(src), HARDPOINT_HEAD) - -/mob/living/exosuit/premade/random - name = "mismatched exosuit" - desc = "It seems to have been roughly thrown together and then spraypainted a single colour." - -/mob/living/exosuit/premade/random/Initialize(mapload, var/obj/structure/heavy_vehicle_frame/source_frame, var/super_random = FALSE, var/using_boring_colours = FALSE) - //if(!prob(100/(LAZYLEN(GLOB.mech_decals)+1))) - // decal = pick(GLOB.mech_decals) - - var/list/use_colours - if(using_boring_colours) - use_colours = list( - COLOR_DARK_GRAY, - COLOR_GRAY40, - COLOR_DARK_BROWN, - COLOR_GRAY, - COLOR_RED_GRAY, - COLOR_BROWN, - COLOR_GREEN_GRAY, - COLOR_BLUE_GRAY, - COLOR_PURPLE_GRAY, - COLOR_BEIGE, - COLOR_PALE_GREEN_GRAY, - COLOR_PALE_RED_GRAY, - COLOR_PALE_PURPLE_GRAY, - COLOR_PALE_BLUE_GRAY, - COLOR_SILVER, - COLOR_GRAY80, - COLOR_OFF_WHITE, - COLOR_GUNMETAL, - COLOR_SOL, - COLOR_TITANIUM, - COLOR_DARK_GUNMETAL, - COLOR_BRONZE, - COLOR_BRASS - ) - else - use_colours = list( - COLOR_NAVY_BLUE, - COLOR_GREEN, - COLOR_DARK_GRAY, - COLOR_MAROON, - COLOR_PURPLE, - COLOR_VIOLET, - COLOR_OLIVE, - COLOR_BROWN_ORANGE, - COLOR_DARK_ORANGE, - COLOR_GRAY40, - COLOR_SEDONA, - COLOR_DARK_BROWN, - COLOR_BLUE, - COLOR_DEEP_SKY_BLUE, - COLOR_LIME, - COLOR_CYAN, - COLOR_TEAL, - COLOR_RED, - COLOR_PINK, - COLOR_ORANGE, - COLOR_YELLOW, - COLOR_GRAY, - COLOR_RED_GRAY, - COLOR_BROWN, - COLOR_GREEN_GRAY, - COLOR_BLUE_GRAY, - COLOR_SUN, - COLOR_PURPLE_GRAY, - COLOR_BLUE_LIGHT, - COLOR_RED_LIGHT, - COLOR_BEIGE, - COLOR_PALE_GREEN_GRAY, - COLOR_PALE_RED_GRAY, - COLOR_PALE_PURPLE_GRAY, - COLOR_PALE_BLUE_GRAY, - COLOR_LUMINOL, - COLOR_SILVER, - COLOR_GRAY80, - COLOR_OFF_WHITE, - COLOR_NT_RED, - COLOR_BOTTLE_GREEN, - COLOR_PALE_BTL_GREEN, - COLOR_GUNMETAL, - COLOR_MUZZLE_FLASH, - COLOR_CHESTNUT, - COLOR_BEASTY_BROWN, - COLOR_WHEAT, - COLOR_CYAN_BLUE, - COLOR_LIGHT_CYAN, - COLOR_PAKISTAN_GREEN, - COLOR_SOL, - COLOR_AMBER, - COLOR_COMMAND_BLUE, - COLOR_SKY_BLUE, - COLOR_PALE_ORANGE, - COLOR_CIVIE_GREEN, - COLOR_TITANIUM, - COLOR_DARK_GUNMETAL, - COLOR_BRONZE, - COLOR_BRASS, - COLOR_INDIGO - ) - - var/mech_colour = super_random ? FALSE : pick(use_colours) - if(!arms) - var/armstype = pick(typesof(/obj/item/mech_component/manipulators)-/obj/item/mech_component/manipulators) - arms = new armstype(src) - arms.color = mech_colour ? mech_colour : pick(use_colours) - if(!legs) - var/legstype = pick(typesof(/obj/item/mech_component/propulsion)-/obj/item/mech_component/propulsion) - legs = new legstype(src) - legs.color = mech_colour ? mech_colour : pick(use_colours) - if(!head) - var/headtype = pick(typesof(/obj/item/mech_component/sensors)-/obj/item/mech_component/sensors) - head = new headtype(src) - head.color = mech_colour ? mech_colour : pick(use_colours) - if(!body) - var/bodytype = pick(typesof(/obj/item/mech_component/chassis)-/obj/item/mech_component/chassis) - body = new bodytype(src) - body.color = mech_colour ? mech_colour : pick(use_colours) - . = ..() - -// Used for spawning/debugging. -/mob/living/exosuit/premade/random/normal - -/mob/living/exosuit/premade/random/boring/Initialize(mapload, var/obj/structure/heavy_vehicle_frame/source_frame) - ..(mapload, source_frame, using_boring_colours = TRUE) - -/mob/living/exosuit/premade/random/extra/Initialize(mapload, var/obj/structure/heavy_vehicle_frame/source_frame) - ..(mapload, source_frame, super_random = TRUE) diff --git a/code/modules/mechs/premade/combat.dm b/code/modules/mechs/premade/combat.dm deleted file mode 100644 index 555d0412596a5..0000000000000 --- a/code/modules/mechs/premade/combat.dm +++ /dev/null @@ -1,38 +0,0 @@ -/mob/living/exosuit/premade/combat - name = "combat exosuit" - desc = "A sleek, modern combat exosuit." - -/mob/living/exosuit/premade/combat/Initialize() - if(!arms) - arms = new /obj/item/mech_component/manipulators/combat(src) - arms.color = COLOR_GUNMETAL - if(!legs) - legs = new /obj/item/mech_component/propulsion/combat(src) - legs.color = COLOR_GUNMETAL - if(!head) - head = new /obj/item/mech_component/sensors/combat(src) - head.color = COLOR_GUNMETAL - if(!body) - body = new /obj/item/mech_component/chassis/combat(src) - body.color = COLOR_GUNMETAL - - . = ..() - -/mob/living/exosuit/premade/combat/spawn_mech_equipment() - ..() - install_system(new /obj/item/mech_equipment/mounted_system/taser(src), HARDPOINT_LEFT_HAND) - install_system(new /obj/item/mech_equipment/mounted_system/taser/ion(src), HARDPOINT_RIGHT_HAND) - install_system(new /obj/item/mech_equipment/flash(src), HARDPOINT_LEFT_SHOULDER) - install_system(new /obj/item/mech_equipment/light(src), HARDPOINT_RIGHT_SHOULDER) - -/mob/living/exosuit/premade/combat/military - decal = "cammo1" - -/mob/living/exosuit/premade/combat/military/alpine - decal = "cammo2" - -/mob/living/exosuit/premade/combat/military/Initialize() - . = ..() - for(var/obj/thing in list(arms,legs,head,body)) - thing.color = COLOR_WHITE - diff --git a/code/modules/mechs/premade/heavy.dm b/code/modules/mechs/premade/heavy.dm deleted file mode 100644 index 57a695a71cf6b..0000000000000 --- a/code/modules/mechs/premade/heavy.dm +++ /dev/null @@ -1,41 +0,0 @@ -/mob/living/exosuit/premade/heavy - name = "Heavy exosuit" - desc = "A heavily armored combat exosuit." - -/mob/living/exosuit/premade/heavy/Initialize() - if(!arms) - arms = new /obj/item/mech_component/manipulators/heavy(src) - arms.color = COLOR_TITANIUM - if(!legs) - legs = new /obj/item/mech_component/propulsion/heavy(src) - legs.color = COLOR_TITANIUM - if(!head) - head = new /obj/item/mech_component/sensors/heavy(src) - head.color = COLOR_TITANIUM - if(!body) - body = new /obj/item/mech_component/chassis/heavy(src) - body.color = COLOR_TITANIUM - - . = ..() - -/mob/living/exosuit/premade/heavy/spawn_mech_equipment() - ..() - install_system(new /obj/item/mech_equipment/mounted_system/taser/laser(src), HARDPOINT_LEFT_HAND) - install_system(new /obj/item/mech_equipment/mounted_system/taser/ion(src), HARDPOINT_RIGHT_HAND) - install_system(new /obj/item/mech_equipment/shields(src), HARDPOINT_BACK) - -/mob/living/exosuit/premade/heavy/merc/Initialize() - . = ..() - if(arms) - arms.color = COLOR_RED - if(legs) - legs.color = COLOR_RED - if(head) - head.color = COLOR_RED - if(body) - body.color = COLOR_DARK_GUNMETAL - -/mob/living/exosuit/premade/heavy/merc/spawn_mech_equipment() - install_system(new /obj/item/mech_equipment/mounted_system/taser(src), HARDPOINT_LEFT_HAND) - install_system(new /obj/item/mech_equipment/mounted_system/taser/laser(src), HARDPOINT_RIGHT_HAND) - install_system(new /obj/item/mech_equipment/shields(src), HARDPOINT_BACK) \ No newline at end of file diff --git a/code/modules/mechs/premade/light.dm b/code/modules/mechs/premade/light.dm deleted file mode 100644 index 40e19fa2aa75a..0000000000000 --- a/code/modules/mechs/premade/light.dm +++ /dev/null @@ -1,26 +0,0 @@ -/mob/living/exosuit/premade/light - name = "light exosuit" - desc = "A light and agile exosuit." - -/mob/living/exosuit/premade/light/Initialize() - if(!arms) - arms = new /obj/item/mech_component/manipulators/light(src) - arms.color = COLOR_OFF_WHITE - if(!legs) - legs = new /obj/item/mech_component/propulsion/light(src) - legs.color = COLOR_OFF_WHITE - if(!head) - head = new /obj/item/mech_component/sensors/light(src) - head.color = COLOR_OFF_WHITE - if(!body) - body = new /obj/item/mech_component/chassis/light(src) - body.color = COLOR_OFF_WHITE - - . = ..() - -/mob/living/exosuit/premade/light/spawn_mech_equipment() - ..() - install_system(new /obj/item/mech_equipment/catapult(src), HARDPOINT_LEFT_HAND) - install_system(new /obj/item/mech_equipment/sleeper(src), HARDPOINT_BACK) - install_system(new /obj/item/mech_equipment/light(src), HARDPOINT_HEAD) - install_system(new /obj/item/mech_equipment/mender(src), HARDPOINT_RIGHT_HAND) diff --git a/code/modules/mechs/premade/powerloader.dm b/code/modules/mechs/premade/powerloader.dm deleted file mode 100644 index 5fc90c7282285..0000000000000 --- a/code/modules/mechs/premade/powerloader.dm +++ /dev/null @@ -1,108 +0,0 @@ -/mob/living/exosuit/premade/powerloader - name = "power loader" - desc = "An ancient, but well-liked cargo handling exosuit." - -/mob/living/exosuit/premade/powerloader/Initialize() - if(!arms) - arms = new /obj/item/mech_component/manipulators/powerloader(src) - arms.color = "#ffbc37" - if(!legs) - legs = new /obj/item/mech_component/propulsion/powerloader(src) - legs.color = "#ffbc37" - if(!head) - head = new /obj/item/mech_component/sensors/powerloader(src) - head.color = "#ffbc37" - if(!body) - body = new /obj/item/mech_component/chassis/powerloader(src) - body.color = "#ffbc37" - - . = ..() - -/mob/living/exosuit/premade/powerloader/spawn_mech_equipment() - ..() - install_system(new /obj/item/mech_equipment/drill/steel(src), HARDPOINT_LEFT_HAND) - install_system(new /obj/item/mech_equipment/clamp(src), HARDPOINT_RIGHT_HAND) - -/mob/living/exosuit/premade/powerloader/mechete/Initialize() - . = ..() - - if (arms) - arms.color = "#6c8aaf" - if (legs) - legs.color = "#6c8aaf" - if (head) - head.color = "#6c8aaf" - if (body) - body.color = "#6c8aaf" - -/mob/living/exosuit/premade/powerloader/mechete/spawn_mech_equipment() - install_system(new /obj/item/mech_equipment/ballistic_shield(src), HARDPOINT_LEFT_HAND) - install_system(new /obj/item/mech_equipment/mounted_system/melee/mechete(src), HARDPOINT_RIGHT_HAND) - - -/mob/living/exosuit/premade/powerloader/flames_red - name = "APLU \"Firestarter\"" - desc = "An ancient, but well-liked cargo handling exosuit. This one has cool red flames." - decal = "flames_red" - -/mob/living/exosuit/premade/powerloader/flames_blue - name = "APLU \"Burning Chrome\"" - desc = "An ancient, but well-liked cargo handling exosuit. This one has cool blue flames." - decal = "flames_blue" - - -/mob/living/exosuit/premade/firefighter - name = "firefighting exosuit" - desc = "A mix and match of industrial parts designed to withstand fires." - -/mob/living/exosuit/premade/firefighter/New() - if(!arms) - arms = new /obj/item/mech_component/manipulators/powerloader(src) - arms.color = "#385b3c" - if(!legs) - legs = new /obj/item/mech_component/propulsion/powerloader(src) - legs.color = "#385b3c" - if(!head) - head = new /obj/item/mech_component/sensors/powerloader(src) - head.color = "#385b3c" - if(!body) - body = new /obj/item/mech_component/chassis/heavy(src) - body.color = "#385b3c" - - ..() - - material = SSmaterials.get_material_by_name(MATERIAL_OSMIUM_CARBIDE_PLASTEEL) - -/mob/living/exosuit/premade/firefighter/spawn_mech_equipment() - ..() - install_system(new /obj/item/mech_equipment/drill/steel(src), HARDPOINT_LEFT_HAND) - install_system(new /obj/item/mech_equipment/mounted_system/extinguisher(src), HARDPOINT_RIGHT_HAND) - install_system(new /obj/item/mech_equipment/atmos_shields(src), HARDPOINT_BACK) - -/obj/item/mech_component/sensors/firefighter/prebuild() - ..() - software = new(src) - software.installed_software = list(MECH_SOFTWARE_UTILITY, MECH_SOFTWARE_ENGINEERING) - -/mob/living/exosuit/premade/powerloader/old - name = "weathered power loader" - desc = "An ancient, but well-liked cargo handling exosuit. The paint is starting to flake. Perhaps some maintenance is in order?" - -/mob/living/exosuit/premade/powerloader/old/Initialize() - . = ..() - var/list/parts = list(arms,legs,head,body) - for(var/obj/item/mech_component/MC in parts) - if(prob(35)) - MC.color = rgb(255,rand(188, 225),rand(55, 136)) - //Damage it - var/obj/item/mech_component/damaged = pick(parts) - damaged.take_brute_damage((damaged.max_damage / 4 ) * MECH_COMPONENT_DAMAGE_DAMAGED) - if(prob(33)) - parts -= damaged - damaged = pick(parts) - damaged.take_brute_damage((damaged.max_damage / 4 ) * MECH_COMPONENT_DAMAGE_DAMAGED) - -/mob/living/exosuit/premade/powerloader/old/spawn_mech_equipment() - install_system(new /obj/item/mech_equipment/light(src), HARDPOINT_HEAD) - install_system(new /obj/item/mech_equipment/clamp(src), HARDPOINT_LEFT_HAND) - install_system(new /obj/item/mech_equipment/clamp(src), HARDPOINT_RIGHT_HAND) diff --git a/code/modules/merchant/merchant_guns.dm b/code/modules/merchant/merchant_guns.dm deleted file mode 100644 index e69447983c0e3..0000000000000 --- a/code/modules/merchant/merchant_guns.dm +++ /dev/null @@ -1,20 +0,0 @@ -/obj/item/gun/projectile/pistol/sec/MK - desc = "Similar in both appearance and use of the NT Mk58, the MK pistol is an cheap knock off that preys on the unsuspecting firearm buyers." - jam_chance = 35 - -/obj/item/gun/projectile/heavysniper/ant - name = "anti-material rifle" - desc = "A portable anti-armour rifle fitted with a scope, the HI PTR-7 Rifle was originally designed to used against armoured exosuits. It is capable of punching through windows and non-reinforced walls with ease. Fires armor piercing 14.5mm shells. This replica however fires pistol rounds." - ammo_type = /obj/item/ammo_casing/pistol/small - caliber = CALIBER_PISTOL_SMALL - -/obj/item/gun/energy/laser/dogan - desc = "This carbine works just as well as a normal carbine. Most of the time." //removed reference to Dogan, since only the merchant is likely to know who that is. - -/obj/item/gun/energy/laser/dogan/consume_next_projectile() - projectile_type = pick(/obj/item/projectile/beam/midlaser, /obj/item/projectile/beam/lastertag/red, /obj/item/projectile/beam) - return ..() - -/obj/item/gun/projectile/automatic/machine_pistol/usi - desc = "An uncommon machine pistol, sometimes refered to as an 'uzi' by the backwater spacers it is often associated with. This one looks especially run-down. Uses pistol rounds." - jam_chance = 20 diff --git a/code/modules/merchant/merchant_machinery.dm b/code/modules/merchant/merchant_machinery.dm deleted file mode 100644 index c09add653a295..0000000000000 --- a/code/modules/merchant/merchant_machinery.dm +++ /dev/null @@ -1,22 +0,0 @@ -/obj/machinery/merchant_pad - name = "Teleportation Pad" - desc = "Place things here to trade." - icon = 'icons/obj/stationobjs.dmi' - icon_state = "tele0" - anchored = TRUE - density = FALSE - -/obj/machinery/merchant_pad/proc/get_target() - var/turf/T = get_turf(src) - for(var/a in T) - if(a == src || (!istype(a,/obj) && !istype(a,/mob/living)) || istype(a,/obj/effect)) - continue - return a - -/obj/machinery/merchant_pad/proc/get_targets() - . = list() - var/turf/T = get_turf(src) - for(var/a in T) - if(a == src || (!istype(a,/obj) && !istype(a,/mob/living)) || istype(a,/obj/effect)) - continue - . += a \ No newline at end of file diff --git a/code/modules/merchant/merchant_programs.dm b/code/modules/merchant/merchant_programs.dm deleted file mode 100644 index 8d5661eb354d6..0000000000000 --- a/code/modules/merchant/merchant_programs.dm +++ /dev/null @@ -1,253 +0,0 @@ -/datum/computer_file/program/merchant - filename = "mlist" - filedesc = "Merchant's List" - extended_desc = "Allows communication and trade between passing vessels, even while jumping." - program_icon_state = "comm" - program_menu_icon = "cart" - nanomodule_path = /datum/nano_module/program/merchant - size = 12 - usage_flags = PROGRAM_CONSOLE - required_access = access_merchant - var/obj/machinery/merchant_pad/pad = null - var/current_merchant = 0 - var/show_trades = FALSE - var/hailed_merchant = FALSE - var/last_comms = null - var/temp = null - /// Stores the money deposited into the merchant program - var/bank = 0 - -/datum/nano_module/program/merchant - name = "Merchant's List" - -/datum/computer_file/program/merchant/proc/get_merchant(index) - if (!index) - return - var/count = GLOB.trader_types.len - if (!count) - return - var/trader_type = GLOB.trader_types[clamp(index, 1, count)] - return GLOB.traders[trader_type] - -/datum/nano_module/program/merchant/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1, var/datum/topic_state/state = GLOB.default_state) - var/list/data = host.initial_data() - var/show_trade = 0 - var/hailed = 0 - var/datum/trader/T - if(program) - var/datum/computer_file/program/merchant/P = program - data["temp"] = P.temp - data["mode"] = !!P.current_merchant - data["last_comms"] = P.last_comms - data["pad"] = !!P.pad - data["bank"] = P.bank - show_trade = P.show_trades - hailed = P.hailed_merchant - T = P.get_merchant(P.current_merchant) - data["mode"] = !!T - if(T) - data["traderName"] = T.name - data["origin"] = T.origin - data["hailed"] = hailed - if(show_trade) - var/list/trades = list() - if(T.trading_items.len) - for(var/i in 1 to T.trading_items.len) - trades += T.print_trading_items(i) - data["trades"] = trades - ui = SSnano.try_update_ui(user, src, ui_key, ui, data, force_open) - if (!ui) - ui = new(user, src, ui_key, "merchant.tmpl", "Merchant List", 575, 700, state = state) - ui.auto_update_layout = 1 - ui.set_initial_data(data) - ui.open() - -/datum/computer_file/program/merchant/proc/connect_pad() - for(var/obj/machinery/merchant_pad/P in orange(1,get_turf(computer))) - pad = P - return - -/datum/computer_file/program/merchant/proc/test_fire() - if(pad && pad.get_target()) - return TRUE - return FALSE - -/datum/computer_file/program/merchant/proc/get_response(var/datum/trade_response/tr) - last_comms = tr.text - bank += tr.money_delta - return tr.success - -/datum/computer_file/program/merchant/proc/offer_money(var/datum/trader/T, var/num, skill) - var/quantity = 1 - if(pad) - get_response(T.offer_money_for_bulk(quantity, num, bank, get_turf(pad), skill)) - else - last_comms = "PAD NOT CONNECTED" - -/datum/computer_file/program/merchant/proc/offer_bulk(datum/trader/T, num, skill) - var/quantity = input("How many do you wish to buy? (1-30)") as num | null //limiting to max 30 per purchase to reduce flooding of the server with spawned items. - if(!isnum(quantity)) - last_comms = "ERROR #417 - NUMBER EXPECTED" - return - if(quantity < 1 || quantity > 30) - last_comms = "ERROR #415 - BLUESPACE ALIGNMENT TERMINATED DUE TO UNEXPECTED VALUE." - return - if(pad) - get_response(T.offer_money_for_bulk(quantity, num, bank, get_turf(pad), skill)) - else - last_comms = "PAD NOT CONNECTED" - -/datum/computer_file/program/merchant/proc/bribe(var/datum/trader/T, var/amt) - if(bank < amt) - last_comms = "ERROR: NOT ENOUGH FUNDS." - return - get_response(T.bribe_to_stay_longer(amt)) - -/datum/computer_file/program/merchant/proc/offer_item(var/datum/trader/T, var/num, skill) - var/quantity = 1 - if(pad) - var/list/targets = pad.get_targets() - for(var/target in targets) - if(!computer.emagged() && istype(target,/mob/living/carbon/human)) - last_comms = "SAFETY LOCK ENABLED: SENTIENT MATTER UNTRANSMITTABLE" - return - get_response(T.offer_items_for_bulk(quantity, targets, num, get_turf(pad), skill)) - else - last_comms = "PAD NOT CONNECTED" - -/datum/computer_file/program/merchant/proc/offer_item_bulk(datum/trader/T, num, skill) - var/quantity = input("How many do you wish to buy? (1-30)") as num //limiting to max 30 per purchase to reduce flooding of the server with spawned items - if(!isnum(quantity)) - last_comms = "ERROR #417 - NUMBER EXPECTED" - return - if(quantity < 1 || quantity > 30) - last_comms = "ERROR #415 - TELEPAD OVERFLOW OVERRIDE ACTIVATED" - return - if(pad) - var/list/targets = pad.get_targets() - for(var/target in targets) - if(!computer.emagged() && istype(target,/mob/living/carbon/human)) - last_comms = "SAFETY LOCK ENABLED: SENTIENT MATTER UNTRANSMITTABLE" - return - get_response(T.offer_items_for_bulk(quantity, targets, num, get_turf(pad), skill)) - else - last_comms = "PAD NOT CONNECTED" - -/datum/computer_file/program/merchant/proc/sell_items(var/datum/trader/T, skill) - if(pad) - var/list/targets = pad.get_targets() - get_response(T.sell_items(targets, skill)) - else - last_comms = "PAD NOT CONNECTED" - -/datum/computer_file/program/merchant/proc/transfer_to_bank() - if(pad) - var/list/targets = pad.get_targets() - for(var/target in targets) - if(istype(target, /obj/item/spacecash)) - var/obj/item/spacecash/cash = target - bank += cash.worth - qdel(target) - last_comms = "ALL MONEY DETECTED ON PAD TRANSFERED" - return - last_comms = "PAD NOT CONNECTED" - -/datum/computer_file/program/merchant/proc/get_money() - if(!pad) - last_comms = "PAD NOT CONNECTED. CANNOT TRANSFER" - return - var/turf/T = get_turf(pad) - var/obj/item/spacecash/bundle/B = new(T) - B.worth = bank - bank = 0 - B.update_icon() - -/datum/computer_file/program/merchant/Topic(href, href_list) - if(..()) - return TOPIC_HANDLED - var/mob/user = usr - if(href_list["PRG_connect_pad"]) - . = TOPIC_HANDLED - connect_pad() - if(href_list["PRG_continue"]) - . = TOPIC_HANDLED - temp = null - if(href_list["PRG_transfer_to_bank"]) - . = TOPIC_HANDLED - transfer_to_bank() - if(href_list["PRG_get_money"]) - . = TOPIC_HANDLED - get_money() - if(href_list["PRG_main_menu"]) - . = TOPIC_HANDLED - current_merchant = 0 - if(href_list["PRG_merchant_list"]) - if (!GLOB.trader_types.len) - . = TOPIC_NOACTION - temp = "Cannot find any traders within broadcasting range." - else - . = TOPIC_HANDLED - current_merchant = 1 - hailed_merchant = FALSE - last_comms = null - if(href_list["PRG_test_fire"]) - . = TOPIC_HANDLED - if(test_fire()) - temp = "Test Fire Successful" - else - temp = "Test Fire Unsuccessful" - if(href_list["PRG_scroll"]) - . = TOPIC_HANDLED - var/scrolled = 0 - switch(href_list["PRG_scroll"]) - if("right") - scrolled = 1 - if("left") - scrolled = -1 - var/new_merchant = clamp(current_merchant + scrolled, 1, GLOB.trader_types.len) - if(new_merchant != current_merchant) - hailed_merchant = FALSE - last_comms = null - current_merchant = new_merchant - if(current_merchant) - var/datum/trader/T = get_merchant(current_merchant) - if(!hailed_merchant) - if(href_list["PRG_hail"]) - . = TOPIC_HANDLED - hailed_merchant = get_response(T.hail(user)) - show_trades = FALSE - . = TOPIC_HANDLED - else - if(href_list["PRG_show_trades"]) - . = TOPIC_HANDLED - show_trades = !show_trades - if(href_list["PRG_insult"]) - . = TOPIC_HANDLED - get_response(T.insult()) - if(href_list["PRG_compliment"]) - . = TOPIC_HANDLED - get_response(T.compliment()) - if(href_list["PRG_offer_item"]) - . = TOPIC_HANDLED - offer_item(T,text2num(href_list["PRG_offer_item"]) + 1, user.get_skill_value(SKILL_FINANCE)) - if(href_list["PRG_offer_item_for_bulk"]) - . = TOPIC_HANDLED - offer_item_bulk(T,text2num(href_list["PRG_offer_item_for_bulk"]) + 1, user.get_skill_value(SKILL_FINANCE)) - if(href_list["PRG_how_much_do_you_want"]) - . = TOPIC_HANDLED - get_response(T.how_much_do_you_want(text2num(href_list["PRG_how_much_do_you_want"]) + 1, user.get_skill_value(SKILL_FINANCE))) - if(href_list["PRG_offer_money_for_item"]) - . = TOPIC_HANDLED - offer_money(T, text2num(href_list["PRG_offer_money_for_item"])+1, user.get_skill_value(SKILL_FINANCE)) - if(href_list["PRG_offer_money_for_bulk"]) - . = TOPIC_HANDLED - offer_bulk(T, text2num(href_list["PRG_offer_money_for_bulk"])+1, user.get_skill_value(SKILL_FINANCE)) - if(href_list["PRG_what_do_you_want"]) - . = TOPIC_HANDLED - get_response(T.what_do_you_want()) - if(href_list["PRG_sell_items"]) - . = TOPIC_HANDLED - sell_items(T, user.get_skill_value(SKILL_FINANCE)) - if(href_list["PRG_bribe"]) - . = TOPIC_HANDLED - bribe(T, text2num(href_list["PRG_bribe"])) diff --git a/code/modules/mining/abandonedcrates.dm b/code/modules/mining/abandonedcrates.dm deleted file mode 100644 index 0d6f4b6b7e0d8..0000000000000 --- a/code/modules/mining/abandonedcrates.dm +++ /dev/null @@ -1,203 +0,0 @@ -/obj/structure/closet/crate/secure/loot - name = "abandoned crate" - desc = "What could be inside?" - closet_appearance = /decl/closet_appearance/crate/secure - var/list/code = list() - var/list/lastattempt = list() - var/attempts = 10 - var/codelen = 4 - locked = 1 - -/obj/structure/closet/crate/secure/loot/New() - ..() - var/list/digits = list("1", "2", "3", "4", "5", "6", "7", "8", "9", "0") - - for(var/i in 1 to codelen) - code += pick(digits) - digits -= code[code.len] - - generate_loot() - -/obj/structure/closet/crate/secure/loot/proc/generate_loot() - var/loot = rand(1, 100) - switch(loot) - if(1 to 5) // Common things go, 5% - new/obj/item/reagent_containers/food/drinks/bottle/rum(src) - new/obj/item/reagent_containers/food/drinks/bottle/whiskey(src) - new/obj/item/reagent_containers/food/snacks/grown/ambrosiadeus(src) - new/obj/item/flame/lighter/zippo(src) - if(6 to 10) - new/obj/item/pickaxe/drill(src) - new/obj/item/device/taperecorder(src) - new/obj/item/clothing/suit/space(src) - new/obj/item/clothing/head/helmet/space/fishbowl(src) - if(11 to 15) - new/obj/item/reagent_containers/glass/beaker/bluespace(src) - if(16 to 20) - for(var/i = 0, i < 10, i++) - new/obj/item/ore/diamond(src) - if(21 to 25) - for(var/i = 0, i < 3, i++) - new/obj/machinery/portable_atmospherics/hydroponics(src) - if(26 to 30) - for(var/i = 0, i < 3, i++) - new/obj/item/reagent_containers/glass/beaker/noreact(src) - if(31 to 35) - spawn_money(rand(300,800), src) - if(36 to 40) - new/obj/item/melee/baton(src) - if(41 to 45) - new/obj/item/clothing/under/shorts/red(src) - new/obj/item/clothing/under/shorts/blue(src) - if(46 to 50) - new/obj/item/clothing/under/chameleon(src) - for(var/i = 0, i < 7, i++) - new/obj/item/clothing/accessory/horrible(src) - if(51 to 52) // Uncommon, 2% each - new/obj/item/melee/classic_baton(src) - if(53 to 54) - new/obj/item/latexballon(src) - if(55 to 56) - var/newitem = pick(typesof(/obj/item/toy/prize) - /obj/item/toy/prize) - new newitem(src) - if(57 to 58) - new/obj/item/toy/balloon(src) - if(59 to 60) - new/obj/item/rig(src) - if(61 to 62) - for(var/i = 0, i < 12, ++i) - new/obj/item/clothing/head/kitty(src) - if(63 to 64) - var/t = rand(4,7) - for(var/i = 0, i < t, ++i) - var/newcoin = pick(/obj/item/material/coin/silver, /obj/item/material/coin/silver, /obj/item/material/coin/silver, /obj/item/material/coin/iron, /obj/item/material/coin/iron, /obj/item/material/coin/iron, /obj/item/material/coin/gold, /obj/item/material/coin/diamond, /obj/item/material/coin/phoron, /obj/item/material/coin/uranium, /obj/item/material/coin/platinum) - new newcoin(src) - if(65 to 66) - new/obj/item/clothing/suit/ianshirt(src) - if(67 to 68) - var/t = rand(4,7) - for(var/i = 0, i < t, ++i) - var/newitem = pick(typesof(/obj/item/stock_parts) - /obj/item/stock_parts - /obj/item/stock_parts/subspace) - new newitem(src) - if(69 to 70) - new/obj/item/pickaxe/silver(src) - if(71 to 72) - new/obj/item/pickaxe/drill(src) - if(73 to 74) - new/obj/item/pickaxe/jackhammer(src) - if(75 to 76) - new/obj/item/pickaxe/diamond(src) - if(77 to 78) - new/obj/item/pickaxe/diamonddrill(src) - if(79 to 80) - new/obj/item/pickaxe/gold(src) - if(81 to 82) - new/obj/item/gun/energy/plasmacutter(src) - if(83 to 84) - new/obj/item/toy/katana(src) - if(85 to 86) - new/obj/item/seeds/random(src) - if(87) // Rarest things, some are unobtainble otherwise, some are just robust, 1% each - new/obj/item/weed_extract(src) - if(88) - new/obj/item/xenos_claw(src) - if(89, 90) - new/obj/item/organ/internal/heart(src) - if(91) - new/obj/item/device/soulstone(src) - if(92) - new/obj/item/material/sword/katana(src) - if(93) - new/obj/item/storage/firstaid/combat(src) // Probably the least OP - if(94) // Why the hell not - new/obj/item/storage/backpack/clown(src) - new/obj/item/clothing/under/rank/clown(src) - new/obj/item/clothing/shoes/clown_shoes(src) - new/obj/item/clothing/mask/gas/clown_hat(src) - new/obj/item/bikehorn(src) - new/obj/item/pen/crayon/rainbow(src) - new/obj/item/reagent_containers/spray/waterflower(src) - if(95) - new/obj/item/clothing/under/mime(src) - new/obj/item/clothing/shoes/black(src) - new/obj/item/clothing/gloves/white(src) - new/obj/item/clothing/mask/gas/mime(src) - new/obj/item/clothing/head/beret(src) - new/obj/item/clothing/accessory/suspenders(src) - new/obj/item/pen/crayon/mime(src) - new/obj/item/reagent_containers/food/drinks/bottle/bottleofnothing(src) - if(96) - new/obj/item/vampiric(src) - if(97) - new/obj/item/archaeological_find(src) - if(98) - new/obj/item/melee/energy/sword(src) - if(99) - new/obj/item/storage/belt/champion(src) - new/obj/item/clothing/mask/luchador(src) - if(100) - new/obj/item/clothing/head/bearpelt(src) - -/obj/structure/closet/crate/secure/loot/togglelock(mob/user as mob) - if(!locked) - return - - to_chat(user, "The crate is locked with a Deca-code lock.") - var/input = input(user, "Enter [codelen] digits.", "Deca-Code Lock", "") as text - if(!Adjacent(user)) - return - - if(input == null || length(input) != codelen) - to_chat(user, "You leave the crate alone.") - else if(check_input(input) && locked) - to_chat(user, "The crate unlocks!") - playsound(user, 'sound/machines/lockreset.ogg', 50, 1) - ..() - else - visible_message("A red light on \the [src]'s control panel flashes briefly.") - attempts-- - if (attempts == 0) - to_chat(user, "The crate's anti-tamper system activates!") - var/turf/T = get_turf(src.loc) - explosion(T, 0, 0, 1, 2) - qdel(src) - -/obj/structure/closet/crate/secure/loot/emag_act(var/remaining_charges, var/mob/user) - if (locked) - to_chat(user, "The crate unlocks!") - locked = 0 - -/obj/structure/closet/crate/secure/loot/proc/check_input(var/input) - if(length(input) != codelen) - return 0 - - . = 1 - lastattempt.Cut() - for(var/i in 1 to codelen) - var/guesschar = copytext_char(input, i, i+1) - lastattempt += guesschar - if(guesschar != code[i]) - . = 0 - -/obj/structure/closet/crate/secure/loot/attackby(obj/item/W as obj, mob/user as mob) - if(locked) - if (istype(W, /obj/item/device/multitool)) // Greetings Urist McProfessor, how about a nice game of cows and bulls? - to_chat(user, "DECA-CODE LOCK ANALYSIS:") - if (attempts == 1) - to_chat(user, "* Anti-Tamper system will activate on the next failed access attempt.") - else - to_chat(user, "* Anti-Tamper system will activate after [src.attempts] failed access attempts.") - if(lastattempt.len) - var/bulls = 0 - var/cows = 0 - - var/list/code_contents = code.Copy() - for(var/i in 1 to codelen) - if(lastattempt[i] == code[i]) - ++bulls - else if(lastattempt[i] in code_contents) - ++cows - code_contents -= lastattempt[i] - to_chat(user, "Last code attempt had [bulls] correct digits at correct positions and [cows] correct digits at incorrect positions.") - return - ..() diff --git a/code/modules/mining/drilling/drill.dm b/code/modules/mining/drilling/drill.dm deleted file mode 100644 index 48a542305cf4a..0000000000000 --- a/code/modules/mining/drilling/drill.dm +++ /dev/null @@ -1,327 +0,0 @@ -/obj/machinery/mining - icon = 'icons/obj/mining_drill.dmi' - anchored = FALSE - use_power = POWER_USE_OFF //The drill takes power directly from a cell. - density = TRUE - layer = ABOVE_HUMAN_LAYER //So it draws over mobs in the tile north of it. - construct_state = /decl/machine_construction/default/panel_closed - uncreated_component_parts = null - stat_immune = 0 - -/obj/machinery/mining/drill - name = "mining drill head" - desc = "An enormous drill." - icon_state = "mining_drill" - power_channel = LOCAL - active_power_usage = 10 KILOWATTS - base_type = /obj/machinery/mining/drill - machine_name = "mining drill" - machine_desc = "A cell-powered industrial drill, used to crack through dirt and rock to harvest minerals beneath the surface. Requires two adjacent braces to operate." - var/braces_needed = 2 - var/list/supports = list() - var/supported = 0 - var/active = FALSE - var/list/resource_field = list() - - var/ore_types = list( - MATERIAL_IRON = /obj/item/ore/iron, - MATERIAL_URANIUM = /obj/item/ore/uranium, - MATERIAL_GOLD = /obj/item/ore/gold, - MATERIAL_SILVER = /obj/item/ore/silver, - MATERIAL_DIAMOND = /obj/item/ore/diamond, - MATERIAL_PHORON = /obj/item/ore/phoron, - MATERIAL_OSMIUM = /obj/item/ore/osmium, - MATERIAL_HYDROGEN = /obj/item/ore/hydrogen, - MATERIAL_SAND = /obj/item/ore/glass, - MATERIAL_GRAPHITE = /obj/item/ore/coal, - MATERIAL_ALUMINIUM = /obj/item/ore/aluminium, - MATERIAL_RUTILE = /obj/item/ore/rutile - ) - - //Upgrades - var/harvest_speed - var/capacity - - //Flags - var/need_update_field = 0 - var/need_player_check = 0 - -/obj/machinery/mining/drill/Process() - if(need_player_check) - return - - check_supports() - - if(!active) return - - if(!anchored) - system_error("system configuration error") - return - - if(stat & NOPOWER) - system_error("insufficient charge") - return - - if(need_update_field) - get_resource_field() - - if(world.time % 10 == 0) - update_icon() - - if(!active) - return - - //Drill through the flooring, if any. - if(istype(get_turf(src), /turf/simulated/floor/asteroid)) - var/turf/simulated/floor/asteroid/T = get_turf(src) - if(!T.dug) - T.gets_dug() - else if(istype(get_turf(src), /turf/simulated/floor/exoplanet)) - var/turf/simulated/floor/exoplanet/T = get_turf(src) - if(T.diggable) - new /obj/structure/pit(T) - T.diggable = 0 - else if(istype(get_turf(src), /turf/simulated/floor)) - var/turf/simulated/floor/T = get_turf(src) - T.ex_act(EX_ACT_HEAVY) - - //Dig out the tasty ores. - if(resource_field.len) - var/turf/simulated/harvesting = pick(resource_field) - - while(resource_field.len && !harvesting.resources) - harvesting.has_resources = 0 - harvesting.resources = null - resource_field -= harvesting - if(resource_field.len) - harvesting = pick(resource_field) - - if(!harvesting || !harvesting.resources) - return - - var/total_harvest = harvest_speed //Ore harvest-per-tick. - var/found_resource = 0 //If this doesn't get set, the area is depleted and the drill errors out. - - for(var/metal in ore_types) - - if(contents.len >= capacity) - system_error("insufficient storage space") - set_active(FALSE) - need_player_check = 1 - update_icon() - return - - if(contents.len + total_harvest >= capacity) - total_harvest = capacity - contents.len - - if(total_harvest <= 0) break - if(harvesting.resources[metal]) - - found_resource = 1 - - var/create_ore = 0 - if(harvesting.resources[metal] >= total_harvest) - harvesting.resources[metal] -= total_harvest - create_ore = total_harvest - total_harvest = 0 - else - total_harvest -= harvesting.resources[metal] - create_ore = harvesting.resources[metal] - harvesting.resources[metal] = 0 - - for(var/i=1, i <= create_ore, i++) - var/oretype = ore_types[metal] - new oretype(src) - - if(!found_resource) - harvesting.has_resources = 0 - harvesting.resources = null - resource_field -= harvesting - else - set_active(FALSE) - need_player_check = 1 - update_icon() - -/obj/machinery/mining/drill/proc/set_active(var/new_active) - if(active != new_active) - active = new_active - update_use_power(active ? POWER_USE_ACTIVE : POWER_USE_OFF) - -/obj/machinery/mining/drill/cannot_transition_to(state_path) - if(active) - return SPAN_NOTICE("You must turn \the [src] off first.") - return ..() - -/obj/machinery/mining/drill/components_are_accessible(path) - return !active && ..() - -/obj/machinery/mining/drill/physical_attack_hand(mob/user as mob) - check_supports() - if(need_player_check) - if(can_use_power_oneoff(10 KILOWATTS)) - system_error("insufficient charge") - else if(anchored) - get_resource_field() - to_chat(user, "You hit the manual override and reset the drill's error checking.") - need_player_check = 0 - update_icon() - return TRUE - if(supported && !panel_open) - if(!(stat & NOPOWER)) - set_active(!active) - if(active) - visible_message("\The [src] lurches downwards, grinding noisily.") - need_update_field = 1 - else - visible_message("\The [src] shudders to a grinding halt.") - else - to_chat(user, "The drill is unpowered.") - else - to_chat(user, "Turning on a piece of industrial machinery without sufficient bracing or wires exposed is a bad idea.") - - update_icon() - return TRUE - -/obj/machinery/mining/drill/on_update_icon() - if(need_player_check) - icon_state = "mining_drill_error" - else if(active) - var/status = clamp(round( (contents.len / capacity) * 4 ), 0, 3) - icon_state = "mining_drill_active[status]" - else if(supported) - icon_state = "mining_drill_braced" - else - icon_state = "mining_drill" - return - -/obj/machinery/mining/drill/RefreshParts() - ..() - harvest_speed = clamp(total_component_rating_of_type(/obj/item/stock_parts/micro_laser), 0, 10) - capacity = 200 * clamp(total_component_rating_of_type(/obj/item/stock_parts/matter_bin), 0, 10) - var/charge_multiplier = clamp(total_component_rating_of_type(/obj/item/stock_parts/capacitor), 0.1, 10) - change_power_consumption(initial(active_power_usage) / charge_multiplier, POWER_USE_ACTIVE) - -/obj/machinery/mining/drill/proc/check_supports() - - supported = 0 - - if((!supports || !supports.len) && initial(anchored) == 0) - anchored = FALSE - set_active(FALSE) - else - anchored = TRUE - - if(supports && supports.len >= braces_needed) - supported = 1 - - update_icon() - -/obj/machinery/mining/drill/proc/system_error(var/error) - - if(error) - src.visible_message("\The [src] flashes a '[error]' warning.") - need_player_check = 1 - set_active(FALSE) - update_icon() - -/obj/machinery/mining/drill/proc/get_resource_field() - resource_field = list() - need_update_field = 0 - - for (var/turf/simulated/T in range(2, src)) - if (T.has_resources) - resource_field += T - - if (!length(resource_field)) - system_error("resources depleted") - -/obj/machinery/mining/drill/verb/unload() - set name = "Unload Drill" - set category = "Object" - set src in oview(1) - - if(usr.stat) return - - var/obj/structure/ore_box/B = locate() in orange(1) - if(B) - for(var/obj/item/ore/O in contents) - O.forceMove(B) - to_chat(usr, "You unload the drill's storage cache into the ore box.") - else - to_chat(usr, "You must move an ore box up to the drill before you can unload it.") - - -/obj/machinery/mining/brace - name = "mining drill brace" - desc = "A machinery brace for an industrial drill. It looks easily two feet thick." - icon_state = "mining_brace" - obj_flags = OBJ_FLAG_ROTATABLE - interact_offline = 1 - - machine_name = "mining drill brace" - machine_desc = "A mobile support strut that provides support for the head of a mining drill when anchored. Placed on either side of the drill head." - - var/obj/machinery/mining/drill/connected - -/obj/machinery/mining/brace/cannot_transition_to(state_path) - if(connected && connected.active) - return SPAN_NOTICE("You can't work with the brace of a running drill!") - return ..() - -/obj/machinery/mining/brace/attackby(obj/item/W as obj, mob/user as mob) - if(connected && connected.active) - to_chat(user, "You can't work with the brace of a running drill!") - return TRUE - if(component_attackby(W, user)) - return TRUE - if(isWrench(W)) - - if(istype(get_turf(src), /turf/space)) - to_chat(user, "You can't anchor something to empty space. Idiot.") - return - - playsound(src.loc, 'sound/items/Ratchet.ogg', 100, 1) - to_chat(user, "You [anchored ? "un" : ""]anchor the brace.") - - anchored = !anchored - if(anchored) - connect() - else - disconnect() - -/obj/machinery/mining/brace/proc/connect() - - var/turf/T = get_step(get_turf(src), src.dir) - - for(var/thing in T.contents) - if(istype(thing, /obj/machinery/mining/drill)) - connected = thing - break - - if(!connected) - return - - if(!connected.supports) - connected.supports = list() - - icon_state = "mining_brace_active" - - connected.supports += src - connected.check_supports() - -/obj/machinery/mining/brace/proc/disconnect() - - if(!connected) return - - if(!connected.supports) connected.supports = list() - - icon_state = "mining_brace" - - connected.supports -= src - connected.check_supports() - connected = null - -/obj/machinery/mining/brace/dismantle() - if(connected) - disconnect() - ..() diff --git a/code/modules/mining/machinery/_mineral.dm b/code/modules/mining/machinery/_mineral.dm deleted file mode 100644 index 17e933e07186d..0000000000000 --- a/code/modules/mining/machinery/_mineral.dm +++ /dev/null @@ -1,105 +0,0 @@ -/obj/machinery/mineral - icon = 'icons/obj/machines/mining_machines.dmi' - density = TRUE - anchored = TRUE - construct_state = /decl/machine_construction/default/panel_closed - uncreated_component_parts = null - stat_immune = 0 - - var/turf/input_turf - var/turf/output_turf - var/obj/machinery/computer/mining/console - -/obj/machinery/mineral/Destroy() - input_turf = null - output_turf = null - if(console) - if(console.connected == src) - console.connected = null - console = null - . = ..() - -/obj/machinery/mineral/Initialize() - set_input(input_turf) - set_output(output_turf) - find_console() - . = ..() - -/obj/machinery/mineral/state_transition(var/decl/machine_construction/default/new_state) - . = ..() - if(istype(new_state)) - updateUsrDialog() - -/obj/machinery/mineral/proc/set_input(var/_dir) - input_turf = _dir ? get_step(loc, _dir) : null - -/obj/machinery/mineral/proc/set_output(var/_dir) - output_turf = _dir ? get_step(loc, _dir) : null - -/obj/machinery/mineral/proc/get_console_data() - . = list("

              Input/Output

              ") - if(input_turf) - . += "Input: [dir2text(get_dir(src, input_turf))]." - else - . += "Input: disabled." - if(output_turf) - . += "Output: [dir2text(get_dir(src, output_turf))]." - else - . += "Output: disabled." - . += "
              Configure" - -/obj/machinery/mineral/CanUseTopic(var/mob/user) - return max(..(), (console && console.CanUseTopic(user))) - -/obj/machinery/mineral/proc/find_console() - if(ispath(console)) - for(var/c in GLOB.alldirs) - var/turf/T = get_step(loc, c) - if(T) - var/obj/machinery/computer/mining/tmpconsole = locate(console) in T - if(tmpconsole && !tmpconsole.connected) - console = tmpconsole - console.connected = src - break - -/obj/machinery/mineral/Topic(href, href_list) - if((. = ..())) - return - if(href_list["configure_input_output"]) - interact(usr) - . = TRUE - else if(href_list["scan_for_console"]) - find_console() - . = TRUE - if(console && usr.Adjacent(console)) - usr.set_machine(console) - console.add_fingerprint(usr) - -/obj/machinery/mineral/interface_interact(var/mob/user) - interact(user) - return TRUE - -/obj/machinery/mineral/proc/can_configure(var/mob/user) - if(user.incapacitated()) - return FALSE - if(istype(user, /mob/living/silicon)) - return TRUE - return (Adjacent(user) || (console && console.Adjacent(user))) - -/obj/machinery/mineral/interact(var/mob/user) - - if(!can_configure(user)) return - - var/choice = input("Do you wish to change the input direction, or the output direction?") as null|anything in list("Input", "Output") - if(isnull(choice) || !can_configure(user)) return - - var/list/_dirs = list("North" = NORTH, "South" = SOUTH, "East" = EAST, "West" = WEST, "Clear" = 0) - var/dchoice = input("Do you wish to change the input direction, or the output direction?") as null|anything in _dirs - if(isnull(dchoice) || !can_configure(user)) return - - if(choice == "Input") - set_input(dchoice ? _dirs[dchoice] : null) - to_chat(user, "You [input_turf ? "configure" : "disable"] \the [src]'s input system.") - else - set_output(dchoice ? _dirs[dchoice] : null) - to_chat(user, "You [output_turf ? "configure" : "disable"] \the [src]'s output system.") \ No newline at end of file diff --git a/code/modules/mining/machinery/mineral_console.dm b/code/modules/mining/machinery/mineral_console.dm deleted file mode 100644 index 6b28b82ef933f..0000000000000 --- a/code/modules/mining/machinery/mineral_console.dm +++ /dev/null @@ -1,43 +0,0 @@ -/obj/machinery/computer/mining - name = "ore processing console" - icon = 'icons/obj/machines/mining_machines.dmi' - icon_state = "console" - machine_name = "mineral processing console" - machine_desc = "Used to configure and operate a linked ore processor, and capable of processing minerals in a variety of fashions." - var/obj/machinery/mineral/connected - -/obj/machinery/computer/mining/interface_interact(var/mob/user) - interact(user) - return TRUE - -/obj/machinery/computer/mining/interact(var/mob/user) - var/datum/browser/popup = new(user, "mining-[name]", "[src] Control Panel") - popup.set_content(jointext(connected.get_console_data(), "
              ")) - popup.open() - -/obj/machinery/computer/mining/CanUseTopic(mob/user) - if(!connected) - to_chat(user, "\The [src] is not connected to a processing machine. Scan") - return STATUS_CLOSE - . = ..() - -/obj/machinery/computer/mining/Topic(href, href_list) - if((. = ..())) - return - if(href_list["scan_for_machine"]) - for(var/c in GLOB.alldirs) - var/turf/T = get_step(loc, c) - if(T) - var/obj/machinery/mineral/M = locate(/obj/machinery/mineral) in T - if(M && ispath(M.console) && istype(src, M.console)) - M.console = src - connected = M - break - return TRUE - -/obj/machinery/computer/mining/Destroy() - if(connected) - if(connected.console == src) - connected.console = initial(connected.console) - connected = null - . = ..() diff --git a/code/modules/mining/machinery/mineral_processor.dm b/code/modules/mining/machinery/mineral_processor.dm deleted file mode 100644 index 8ae1d8777490e..0000000000000 --- a/code/modules/mining/machinery/mineral_processor.dm +++ /dev/null @@ -1,186 +0,0 @@ -#define ORE_DISABLED 0 -#define ORE_SMELT 1 -#define ORE_COMPRESS 2 -#define ORE_ALLOY 3 - -/obj/machinery/mineral/processing_unit - name = "mineral processor" - icon_state = "furnace_0" - console = /obj/machinery/computer/mining - input_turf = NORTH - output_turf = SOUTH - - machine_name = "ore processor" - machine_desc = "Essentially a glorified furnace, ore processors can smelt, compress, or alloy raw minerals into new forms. Improper processing will result in useless slag!" - - var/sheets_per_tick = 10 - var/list/ores_processing - var/list/ores_stored - var/report_all_ores - var/active = FALSE - -/obj/machinery/mineral/processing_unit/Initialize() - ores_processing = list() - ores_stored = list() - for(var/orename in SSmaterials.processable_ores) - ores_processing[orename] = 0 - ores_stored[orename] = 0 - . = ..() - -/obj/machinery/mineral/processing_unit/Process() - if(!active) - return - - //Grab some more ore to process this tick. - if(input_turf) - for(var/obj/item/I in recursive_content_check(input_turf, sight_check = FALSE, include_mobs = FALSE)) - if(QDELETED(I) || !I.simulated || I.anchored) - continue - if(LAZYLEN(I.matter)) - for(var/o_material in I.matter) - if(!isnull(ores_stored[o_material])) - ores_stored[o_material] += I.matter[o_material] - qdel(I) - - //Process our stored ores and spit out sheets. - if(output_turf) - var/sheets = 0 - var/list/attempt_to_alloy = list() - for(var/metal in ores_stored) - - if(sheets >= sheets_per_tick) - break - - if(ores_stored[metal] <= 0 || ores_processing[metal] == ORE_DISABLED) - continue - - var/material/M = SSmaterials.get_material_by_name(metal) - var/result = 0 // For reference: a positive result indicates sheets were produced, - // and a negative result indicates slag was produced. - var/ore_mode = ores_processing[metal] - if(ore_mode == ORE_ALLOY) - if(SSmaterials.alloy_components[metal]) - attempt_to_alloy[metal] = TRUE - else - result = min(sheets_per_tick - sheets, Floor(ores_processing[metal] / M.units_per_sheet)) - ores_processing[metal] -= result * M.units_per_sheet - result = -(result) - else if(ore_mode == ORE_COMPRESS) - result = attempt_compression(M, sheets_per_tick - sheets) - else if(ore_mode == ORE_SMELT) - result = attempt_smelt(M, sheets_per_tick - sheets) - - sheets += abs(result) - while(result < 0) - new /obj/item/ore(output_turf, MATERIAL_WASTE) - result++ - - // Try to make any available alloys. - if(LAZYLEN(attempt_to_alloy)) - - var/list/making_alloys = list() - for(var/thing in SSmaterials.alloy_products) - var/material/M = thing - var/failed = FALSE - for(var/otherthing in M.alloy_materials) - if(!attempt_to_alloy[otherthing] || ores_stored[otherthing] < M.alloy_materials[otherthing]) - failed = TRUE - break - if(!failed) making_alloys += M - - for(var/thing in making_alloys) - if(sheets >= sheets_per_tick) break - var/material/M = thing - var/making - for(var/otherthing in M.alloy_materials) - var/_make = Floor(ores_stored[otherthing] / M.alloy_materials[otherthing]) - if(isnull(making) || making > _make) - making = _make - making = min(sheets_per_tick-sheets, making) - for(var/otherthing in M.alloy_materials) - ores_stored[otherthing] -= making * M.alloy_materials[otherthing] - if(making > 0) - M.place_sheet(output_turf, making) - break - -/obj/machinery/mineral/processing_unit/proc/attempt_smelt(var/material/metal, var/max_result) - . = clamp(Floor(ores_stored[metal.name]/metal.units_per_sheet),1,max_result) - ores_stored[metal.name] -= . * metal.units_per_sheet - var/material/M = SSmaterials.get_material_by_name(metal.ore_smelts_to) - if(istype(M)) - M.place_sheet(output_turf, .) - else - . = -(.) - -/obj/machinery/mineral/processing_unit/proc/attempt_compression(var/material/metal, var/max_result) - var/making = clamp(Floor(ores_stored[metal.name]/metal.units_per_sheet),1,max_result) - if(making >= 2) - ores_stored[metal.name] -= making * metal.units_per_sheet - . = Floor(making * 0.5) - var/material/M = SSmaterials.get_material_by_name(metal.ore_compresses_to) - if(istype(M)) - M.place_sheet(output_turf, .) - else - . = -(.) - else - . = 0 - -/obj/machinery/mineral/processing_unit/get_console_data() - . = ..() + "

              Mineral Processing

              " - var/result = "" - for(var/ore in ores_processing) - if(!ores_stored[ore] && !report_all_ores) continue - var/material/M = SSmaterials.get_material_by_name(ore) - var/line = "[capitalize(M.display_name)]
              " - . += "
              [Floor(ores_stored[ore] / M.units_per_sheet)] ([ores_stored[ore]]u)" - var/status_string - if(ores_processing[ore]) - switch(ores_processing[ore]) - if(ORE_DISABLED) - status_string = "not processing" - if(ORE_SMELT) - status_string = "smelting" - if(ORE_COMPRESS) - status_string = "compressing" - if(ORE_ALLOY) - status_string = "alloying" - else - status_string = "not processing" - result += "
              [line][status_string]
              [result]
              " - . += "Currently displaying [report_all_ores ? "all ore types" : "only available ore types"]. [report_all_ores ? "Show less" : "Show more"]" - . += "The ore processor is currently [(active ? "enabled" : "disabled")]." - -/obj/machinery/mineral/processing_unit/Topic(href, href_list) - if((. = ..())) - return - if(href_list["toggle_smelting"]) - var/choice = input("What setting do you wish to use for processing [href_list["toggle_smelting"]]?") as null|anything in list("Smelting","Compressing","Alloying","Nothing") - if(!choice) return - switch(choice) - if("Nothing") choice = ORE_DISABLED - if("Smelting") choice = ORE_SMELT - if("Compressing") choice = ORE_COMPRESS - if("Alloying") choice = ORE_ALLOY - ores_processing[href_list["toggle_smelting"]] = choice - . = TRUE - else if(href_list["toggle_power"]) - active = !active - update_icon() - . = TRUE - else if(href_list["toggle_ores"]) - report_all_ores = !report_all_ores - . = TRUE - if(. && console) - console.updateUsrDialog() - -/obj/machinery/mineral/processing_unit/on_update_icon() - overlays.Cut() - if(active) - icon_state = "furnace_1" - else - icon_state = "furnace_0" - -#undef ORE_DISABLED -#undef ORE_SMELT -#undef ORE_COMPRESS -#undef ORE_ALLOY \ No newline at end of file diff --git a/code/modules/mining/machinery/mineral_stacker.dm b/code/modules/mining/machinery/mineral_stacker.dm deleted file mode 100644 index 6534b9242f482..0000000000000 --- a/code/modules/mining/machinery/mineral_stacker.dm +++ /dev/null @@ -1,57 +0,0 @@ -/obj/machinery/mineral/stacking_machine - name = "stacking machine" - icon_state = "stacker" - console = /obj/machinery/computer/mining - input_turf = EAST - output_turf = WEST - machine_name = "stacking machine" - machine_desc = "A simple device that combines sheets that pass through it into single, larger stacks." - var/stack_amt = 50 - var/list/stacks = list() - -/obj/machinery/mineral/stacking_machine/Process() - if(input_turf) - for(var/obj/item/I in input_turf) - if(istype(I, /obj/item/stack/material)) - var/obj/item/stack/material/S = I - if(S.material && S.material.stack_type) - if(isnull(stacks[S.material.name])) - stacks[S.material.name] = 0 - stacks[S.material.name] += S.amount - qdel(S) - continue - if(output_turf) - I.forceMove(output_turf) - - if(output_turf) - for(var/sheet in stacks) - if(stacks[sheet] >= stack_amt) - var/material/stackmat = SSmaterials.get_material_by_name(sheet) - stackmat.place_sheet(output_turf, stack_amt) - stacks[sheet] -= stack_amt - -/obj/machinery/mineral/stacking_machine/get_console_data() - . = ..() - . += "

              Sheet Stacking

              " - . += "Stacking: [stack_amt] \[change\]" - var/line = "" - for(var/stacktype in stacks) - if(stacks[stacktype] > 0) - line += "[capitalize(stacktype)][stacks[stacktype]]Release" - . += "[line]
              " - -/obj/machinery/mineral/stacking_machine/Topic(href, href_list) - if((. = ..())) - return - if(href_list["change_stack"]) - var/choice = input("What would you like to set the stack amount to?") as null|anything in list(1,5,10,20,30,50,60) - if(!choice) return - stack_amt = choice - . = TRUE - else if(href_list["release_stack"] && stacks[href_list["release_stack"]] > 0) - var/material/stackmat = SSmaterials.get_material_by_name(href_list["release_stack"]) - stackmat.place_sheet(output_turf, stacks[href_list["release_stack"]]) - stacks[href_list["release_stack"]] = 0 - . = TRUE - if(. && console) - console.updateUsrDialog() \ No newline at end of file diff --git a/code/modules/mining/machinery/mineral_unloader.dm b/code/modules/mining/machinery/mineral_unloader.dm deleted file mode 100644 index 12205f1a4d143..0000000000000 --- a/code/modules/mining/machinery/mineral_unloader.dm +++ /dev/null @@ -1,20 +0,0 @@ -/obj/machinery/mineral/unloading_machine - name = "unloading machine" - icon_state = "unloader" - input_turf = WEST - output_turf = EAST - machine_name = "unloading machine" - machine_desc = "Unloads raw ore stored within an ore box and places it onto an adjacent tile. By default, it draws from a box to the west and places ore to the east." - -/obj/machinery/mineral/unloading_machine/Process() - if(input_turf && output_turf) - if(length(output_turf.contents) < 15) - var/ore_this_tick = 10 - for(var/obj/structure/ore_box/unloading in input_turf) - for(var/obj/item/ore/_ore in unloading) - _ore.dropInto(output_turf) - if(--ore_this_tick<=0) return - for(var/obj/item/_ore in input_turf) - if(_ore.simulated && !_ore.anchored) - _ore.dropInto(output_turf) - if(--ore_this_tick<=0) return \ No newline at end of file diff --git a/code/modules/mining/mine_items.dm b/code/modules/mining/mine_items.dm deleted file mode 100644 index aba7be970348e..0000000000000 --- a/code/modules/mining/mine_items.dm +++ /dev/null @@ -1,256 +0,0 @@ -/**********************Miner Lockers**************************/ - -/obj/structure/closet/secure_closet/miner - name = "miner's equipment" - closet_appearance = /decl/closet_appearance/secure_closet/mining - req_access = list(access_mining) - -/obj/structure/closet/secure_closet/miner/WillContain() - return list( - new /datum/atom_creator/weighted(list( - /obj/item/storage/backpack/industrial, - /obj/item/storage/backpack/satchel/eng - )), - /obj/item/device/radio/headset/headset_cargo, - /obj/item/clothing/under/rank/miner, - /obj/item/clothing/gloves/thick, - /obj/item/clothing/shoes/black, - /obj/item/device/scanner/gas, - /obj/item/storage/ore, - /obj/item/device/flashlight/lantern, - /obj/item/shovel, - /obj/item/pickaxe, - /obj/item/clothing/glasses/meson - ) - -/**********'pickaxes' but theyre drills actually***************/ - -/obj/item/pickaxe - name = "mining drill" - desc = "The most basic of mining drills, for short excavations and small mineral extractions." - icon = 'icons/obj/tools.dmi' - obj_flags = OBJ_FLAG_CONDUCTIBLE - slot_flags = SLOT_BELT - force = 15.0 - throwforce = 4.0 - icon_state = "drill" - item_state = "jackhammer" - w_class = ITEM_SIZE_HUGE - matter = list(MATERIAL_STEEL = 3750) - var/digspeed = 40 //moving the delay to an item var so R&D can make improved picks. --NEO - origin_tech = list(TECH_MATERIAL = 1, TECH_ENGINEERING = 1) - attack_verb = list("hit", "pierced", "sliced", "attacked") - var/drill_sound = 'sound/weapons/Genhit.ogg' - var/drill_verb = "drilling" - - var/excavation_amount = 200 - var/build_from_parts = FALSE - var/hardware_color - -/obj/item/pickaxe/Initialize() - if(build_from_parts) - icon_state = "pick_hardware" - color = hardware_color - overlays += overlay_image(icon, "pick_handle", flags=RESET_COLOR) - . = ..() - -/obj/item/pickaxe/hammer - name = "sledgehammer" - desc = "A mining hammer made of reinforced metal. You feel like smashing your boss in the face with this." - icon = 'icons/obj/weapons/melee_physical.dmi' - icon_state = "sledgehammer" - -/obj/item/pickaxe/drill - name = "advanced mining drill" // Can dig sand as well! - icon_state = "handdrill" - item_state = "jackhammer" - digspeed = 30 - origin_tech = list(TECH_MATERIAL = 2, TECH_POWER = 3, TECH_ENGINEERING = 2) - desc = "Yours is the drill that will pierce through the rock walls." - drill_verb = "drilling" - -/obj/item/pickaxe/jackhammer - name = "sonic jackhammer" - icon_state = "jackhammer" - item_state = "jackhammer" - digspeed = 20 //faster than drill, but cannot dig - origin_tech = list(TECH_MATERIAL = 3, TECH_POWER = 2, TECH_ENGINEERING = 2) - desc = "Cracks rocks with sonic blasts, perfect for killing cave lizards." - drill_verb = "hammering" - -/obj/item/pickaxe/diamonddrill //When people ask about the badass leader of the mining tools, they are talking about ME! - name = "diamond mining drill" - icon_state = "diamonddrill" - item_state = "jackhammer" - digspeed = 5 //Digs through walls, girders, and can dig up sand - origin_tech = list(TECH_MATERIAL = 6, TECH_POWER = 4, TECH_ENGINEERING = 5) - desc = "Yours is the drill that will pierce the heavens!" - drill_verb = "drilling" - -/obj/item/pickaxe/borgdrill - name = "cyborg mining drill" - icon_state = "diamonddrill" - item_state = "jackhammer" - digspeed = 15 - desc = "" - drill_verb = "drilling" - -//****************************actual pickaxes*********************** -/obj/item/pickaxe/silver - name = "silver pickaxe" - desc = "This makes no metallurgic sense." - icon_state = "pick_preview" - item_state = "pickaxe" - digspeed = 30 - origin_tech = list(TECH_MATERIAL = 3) - drill_verb = "picking" - sharp = TRUE - build_from_parts = TRUE - hardware_color = COLOR_SILVER - -/obj/item/pickaxe/gold - name = "golden pickaxe" - desc = "This makes no metallurgic sense." - icon_state = "pick_preview" - item_state = "pickaxe" - digspeed = 20 - origin_tech = list(TECH_MATERIAL = 4) - drill_verb = "picking" - sharp = TRUE - build_from_parts = TRUE - hardware_color = COLOR_GOLD - -/obj/item/pickaxe/diamond - name = "diamond pickaxe" - desc = "A pickaxe with a diamond pick head." - icon_state = "pick_preview" - item_state = "pickaxe" - digspeed = 10 - origin_tech = list(TECH_MATERIAL = 6, TECH_ENGINEERING = 4) - drill_verb = "picking" - sharp = TRUE - build_from_parts = TRUE - hardware_color = COLOR_DIAMOND - -/*****************************Shovel********************************/ - -/obj/item/shovel - name = "shovel" - desc = "A large tool for digging and moving dirt." - icon = 'icons/obj/tools.dmi' - icon_state = "shovel" - obj_flags = OBJ_FLAG_CONDUCTIBLE - slot_flags = SLOT_BELT - force = 8.0 - throwforce = 4.0 - item_state = "shovel" - w_class = ITEM_SIZE_HUGE - origin_tech = list(TECH_MATERIAL = 1, TECH_ENGINEERING = 1) - matter = list(MATERIAL_STEEL = 50) - attack_verb = list("bashed", "bludgeoned", "thrashed", "whacked") - edge = TRUE - -/obj/item/shovel/spade - name = "spade" - desc = "A small tool for digging and moving dirt." - icon_state = "spade" - item_state = "spade" - force = 5.0 - throwforce = 7.0 - w_class = ITEM_SIZE_SMALL - -// Flags. -/obj/item/stack/flag - name = "beacon" - desc = "Some deployable high-visibilty beacons." - singular_name = "beacon" - icon_state = "folded" - amount = 10 - max_amount = 10 - icon = 'icons/obj/marking_beacon.dmi' - - var/upright = 0 - var/fringe = null - -/obj/item/stack/flag/red - light_color = COLOR_RED - -/obj/item/stack/flag/yellow - light_color = COLOR_YELLOW - -/obj/item/stack/flag/green - light_color = COLOR_LIME - -/obj/item/stack/flag/blue - light_color = COLOR_BLUE - -/obj/item/stack/flag/teal - light_color = COLOR_TEAL - -/obj/item/stack/flag/Initialize() - . = ..() - update_icon() - -/obj/item/stack/flag/attackby(var/obj/item/W, var/mob/user) - if(upright) - attack_hand(user) - return - return ..() - -/obj/item/stack/flag/attack_hand(var/mob/user) - if(upright) - knock_down() - user.visible_message("\The [user] knocks down \the [singular_name].") - return - return ..() - -/obj/item/stack/flag/attack_self(var/mob/user) - var/turf/T = get_turf(src) - - if(istype(T, /turf/space) || istype(T, /turf/simulated/open)) - to_chat(user, "There's no solid surface to plant \the [singular_name] on.") - return - - for(var/obj/item/stack/flag/F in T) - if(F.upright) - to_chat(user, "\The [F] is already planted here.") - return - - if(use(1)) // Don't skip use() checks even if you only need one! Stacks with the amount of 0 are possible, e.g. on synthetics! - var/obj/item/stack/flag/newflag = new src.type(T, 1) - newflag.set_up() - if(istype(T, /turf/simulated/floor/asteroid) || istype(T, /turf/simulated/floor/exoplanet)) - user.visible_message("\The [user] plants \the [newflag.singular_name] firmly in the ground.") - else - user.visible_message("\The [user] attaches \the [newflag.singular_name] firmly to the ground.") - -/obj/item/stack/flag/proc/set_up() - upright = 1 - anchored = TRUE - update_icon() - -/obj/item/stack/flag/on_update_icon() - overlays.Cut() - if(upright) - pixel_x = 0 - pixel_y = 0 - icon_state = "base" - var/image/addon = image(icon = icon, icon_state = "glowbit") - addon.color = light_color - addon.layer = ABOVE_LIGHTING_LAYER - addon.plane = EFFECTS_ABOVE_LIGHTING_PLANE - overlays += addon - set_light(0.5, 0.5, 3) - else - pixel_x = rand(-randpixel, randpixel) - pixel_y = rand(-randpixel, randpixel) - icon_state = "folded" - var/image/addon = image(icon = icon, icon_state = "basebit") - addon.color = light_color - overlays += addon - set_light(0) - -/obj/item/stack/flag/proc/knock_down() - upright = 0 - anchored = FALSE - update_icon() diff --git a/code/modules/mining/mine_turfs.dm b/code/modules/mining/mine_turfs.dm deleted file mode 100644 index bbee471e6ee03..0000000000000 --- a/code/modules/mining/mine_turfs.dm +++ /dev/null @@ -1,564 +0,0 @@ -var/global/list/mining_walls = list() -var/global/list/mining_floors = list() - -/**********************Mineral deposits**************************/ -/turf/unsimulated/mineral - name = "impassable rock" - icon = 'icons/turf/walls.dmi' - icon_state = "rock-dark" - blocks_air = 1 - density = TRUE - opacity = 1 - -/turf/simulated/mineral //wall piece - name = "rock" - icon = 'icons/turf/walls.dmi' - icon_state = "rock" - initial_gas = null - opacity = 1 - density = TRUE - blocks_air = 1 - temperature = T0C - color = COLOR_ASTEROID_ROCK - turf_flags = TURF_DISALLOW_BLOB - var/mined_turf = /turf/simulated/floor/asteroid - var/material/mineral - var/mined_ore = 0 - var/last_act = 0 - var/emitter_blasts_taken = 0 // EMITTER MINING! Muhehe. - - var/datum/geosample/geologic_data - var/excavation_level = 0 - var/list/finds - var/next_rock = 0 - var/archaeo_overlay = "" - var/excav_overlay = "" - var/obj/item/last_find - var/datum/artifact_find/artifact_find - var/image/ore_overlay - - has_resources = 1 - -/turf/simulated/mineral/Initialize() - . = ..() - if (!mining_walls["[src.z]"]) - mining_walls["[src.z]"] = list() - mining_walls["[src.z]"] += src - MineralSpread() - update_icon(1) - -/turf/simulated/mineral/Destroy() - if (mining_walls["[src.z]"]) - mining_walls["[src.z]"] -= src - return ..() - -/turf/simulated/mineral/can_build_cable() - return !density - -/turf/simulated/mineral/is_plating() - return 1 - -/turf/simulated/mineral/on_update_icon(var/update_neighbors) - if(!istype(mineral)) - SetName(initial(name)) - icon_state = "rock" - else - SetName("[mineral.ore_name] deposit") - - overlays.Cut() - - for(var/direction in GLOB.cardinal) - var/turf/turf_to_check = get_step(src,direction) - if(update_neighbors && istype(turf_to_check,/turf/simulated/floor/asteroid)) - var/turf/simulated/floor/asteroid/T = turf_to_check - T.updateMineralOverlays() - else if(istype(turf_to_check,/turf/space) || istype(turf_to_check,/turf/simulated/floor)) - var/image/rock_side = image(icon, "rock_side", dir = turn(direction, 180)) - rock_side.turf_decal_layerise() - switch(direction) - if(NORTH) - rock_side.pixel_y += world.icon_size - if(SOUTH) - rock_side.pixel_y -= world.icon_size - if(EAST) - rock_side.pixel_x += world.icon_size - if(WEST) - rock_side.pixel_x -= world.icon_size - overlays += rock_side - - if(ore_overlay) - overlays += ore_overlay - - if(excav_overlay) - overlays += excav_overlay - - if(archaeo_overlay) - overlays += archaeo_overlay - -/turf/simulated/mineral/ex_act(severity) - switch(severity) - if(EX_ACT_HEAVY) - if (prob(70)) - mined_ore = 1 //some of the stuff gets blown up - GetDrilled() - if(EX_ACT_DEVASTATING) - mined_ore = 2 //some of the stuff gets blown up - GetDrilled() - -/turf/simulated/mineral/bullet_act(var/obj/item/projectile/Proj) - - // Emitter blasts - if(istype(Proj, /obj/item/projectile/beam/emitter)) - emitter_blasts_taken++ - - if(emitter_blasts_taken > 2) // 3 blasts per tile - mined_ore = 1 - GetDrilled() - -/turf/simulated/mineral/Bumped(AM) - . = ..() - if(istype(AM,/mob/living/carbon/human)) - var/mob/living/carbon/human/H = AM - if((istype(H.l_hand,/obj/item/pickaxe)) && (!H.hand)) - attackby(H.l_hand,H) - else if((istype(H.r_hand,/obj/item/pickaxe)) && H.hand) - attackby(H.r_hand,H) - - else if(istype(AM,/mob/living/silicon/robot)) - var/mob/living/silicon/robot/R = AM - if(istype(R.module_active,/obj/item/pickaxe)) - attackby(R.module_active,R) - -/turf/simulated/mineral/proc/MineralSpread() - if(istype(mineral) && mineral.ore_spread_chance > 0) - for(var/trydir in GLOB.cardinal) - if(prob(mineral.ore_spread_chance)) - var/turf/simulated/mineral/target_turf = get_step(src, trydir) - if(istype(target_turf) && isnull(target_turf.mineral)) - target_turf.mineral = mineral - target_turf.UpdateMineral() - target_turf.MineralSpread() - - -/turf/simulated/mineral/proc/UpdateMineral() - clear_ore_effects() - ore_overlay = image('icons/turf/mining_decals.dmi', "[mineral.ore_icon_overlay]") - ore_overlay.appearance_flags = RESET_COLOR - if(prob(50)) - ore_overlay.SetTransform(scale_x = -1) - ore_overlay.color = mineral.icon_colour - ore_overlay.turf_decal_layerise() - update_icon() - -//Not even going to touch this pile of spaghetti -/turf/simulated/mineral/attackby(obj/item/W as obj, mob/user as mob) - if (!user.IsAdvancedToolUser()) - to_chat(usr, "You don't have the dexterity to do this!") - return - - if (istype(W, /obj/item/device/core_sampler)) - geologic_data.UpdateNearbyArtifactInfo(src) - var/obj/item/device/core_sampler/C = W - C.sample_item(src, user) - return - - if (istype(W, /obj/item/device/depth_scanner)) - var/obj/item/device/depth_scanner/C = W - C.scan_atom(user, src) - return - - if (istype(W, /obj/item/device/measuring_tape)) - var/obj/item/device/measuring_tape/P = W - user.visible_message("\The [user] extends [P] towards [src].","You extend [P] towards [src].") - if(do_after(user, 1 SECOND, src, DO_PUBLIC_UNIQUE)) - to_chat(user, "\The [src] has been excavated to a depth of [excavation_level]cm.") - return - - if (istype(W, /obj/item/pickaxe)) - if(!istype(user.loc, /turf)) - return - - var/obj/item/pickaxe/P = W - if(last_act + P.digspeed > world.time)//prevents message spam - return - last_act = world.time - - playsound(user, P.drill_sound, 20, 1) - - var/newDepth = excavation_level + P.excavation_amount // Used commonly below - //handle any archaeological finds we might uncover - var/fail_message = "" - if(finds && finds.len) - var/datum/find/F = finds[1] - if(newDepth > F.excavation_required) // Digging too deep can break the item. At least you won't summon a Balrog (probably) - fail_message = ". [pick("There is a crunching noise","[W] collides with some different rock","Part of the rock face crumbles away","Something breaks under [W]")]" - - to_chat(user, "You start [P.drill_verb][fail_message].") - - if(fail_message && prob(90)) - if(prob(25)) - excavate_find(prob(5), finds[1]) - else if(prob(50)) - finds.Remove(finds[1]) - if(prob(50)) - artifact_debris() - - if(do_after(user, P.digspeed, src, DO_DEFAULT | DO_PUBLIC_PROGRESS)) - if(finds && finds.len) - var/datum/find/F = finds[1] - if(newDepth == F.excavation_required) // When the pick hits that edge just right, you extract your find perfectly, it's never confined in a rock - excavate_find(1, F) - else if(newDepth > F.excavation_required - F.clearance_range) // Not quite right but you still extract your find, the closer to the bottom the better, but not above 80% - excavate_find(prob(80 * (F.excavation_required - newDepth) / F.clearance_range), F) - - to_chat(user, "You finish [P.drill_verb] \the [src].") - - if(newDepth >= 200) // This means the rock is mined out fully - var/obj/structure/boulder/B - if(artifact_find) - if( excavation_level > 0 || prob(15) ) - //boulder with an artifact inside - B = new(src) - if(artifact_find) - B.artifact_find = artifact_find - else - artifact_debris(1) - else if(prob(5)) - //empty boulder - B = new(src) - - if(B) - GetDrilled(0) - else - GetDrilled(1) - return - - excavation_level += P.excavation_amount - var/updateIcon = 0 - - //archaeo overlays - if(!archaeo_overlay && finds && finds.len) - var/datum/find/F = finds[1] - if(F.excavation_required <= excavation_level + F.view_range) - archaeo_overlay = image('icons/turf/excavation_overlays.dmi',"overlay_archaeo[rand(1,3)]") - updateIcon = 1 - - else if(archaeo_overlay && (!finds || !finds.len)) - archaeo_overlay = null - updateIcon = 1 - - //there's got to be a better way to do this - var/update_excav_overlay = 0 - if(excavation_level >= 150) - if(excavation_level - P.excavation_amount < 150) - update_excav_overlay = 1 - else if(excavation_level >= 100) - if(excavation_level - P.excavation_amount < 100) - update_excav_overlay = 1 - else if(excavation_level >= 50) - if(excavation_level - P.excavation_amount < 50) - update_excav_overlay = 1 - - //update overlays displaying excavation level - if( !(excav_overlay && excavation_level > 0) || update_excav_overlay ) - var/excav_quadrant = round(excavation_level / 50) + 1 - excav_overlay = image('icons/turf/excavation_overlays.dmi',"overlay_excv[excav_quadrant]_[rand(1,3)]") - updateIcon = 1 - - if(updateIcon) - update_icon() - - //drop some rocks - next_rock += P.excavation_amount - while(next_rock > 50) - next_rock -= 50 - var/obj/item/ore/O = new(src) - geologic_data.UpdateNearbyArtifactInfo(src) - O.geologic_data = geologic_data - - else - return ..() - -/turf/simulated/mineral/proc/clear_ore_effects() - overlays -= ore_overlay - ore_overlay = null - -/turf/simulated/mineral/proc/DropMineral() - if(!mineral) - return - - clear_ore_effects() - var/obj/item/ore/O = new(src, mineral.name) - if(geologic_data && istype(O)) - geologic_data.UpdateNearbyArtifactInfo(src) - O.geologic_data = geologic_data - return O - -/turf/simulated/mineral/proc/GetDrilled(var/artifact_fail = 0) - //var/destroyed = 0 //used for breaking strange rocks - if (mineral && mineral.ore_result_amount) - - //if the turf has already been excavated, some of it's ore has been removed - for (var/i = 1 to mineral.ore_result_amount - mined_ore) - DropMineral() - - //destroyed artifacts have weird, unpleasant effects - //make sure to destroy them before changing the turf though - if(artifact_find && artifact_fail) - var/pain = 0 - if(prob(50)) - pain = 1 - for(var/mob/living/M in range(src, 200)) - to_chat(M, "[pick("A high pitched [pick("keening","wailing","whistle")]","A rumbling noise like [pick("thunder","heavy machinery")]")] somehow penetrates your mind before fading away!") - if(pain) - flick("pain",M.pain) - if(prob(50)) - M.adjustBruteLoss(5) - else - M.flash_eyes() - if(prob(50)) - M.Stun(5) - SSradiation.flat_radiate(src, 25, 200) - - //Let's add some effects - new/obj/particle_emitter/burst/rocks(src, 1 SECOND, color) - - //Add some rubble, you did just clear out a big chunk of rock. - - var/turf/simulated/floor/asteroid/N = ChangeTurf(mined_turf) - - if(istype(N)) - N.overlay_detail = "asteroid[rand(0,9)]" - N.updateMineralOverlays(1) - -/turf/simulated/mineral/proc/excavate_find(var/prob_clean = 0, var/datum/find/F) - - //many finds are ancient and thus very delicate - luckily there is a specialised energy suspension field which protects them when they're being extracted - if(prob(F.prob_delicate)) - var/obj/effect/suspension_field/S = locate() in src - if(!S) - visible_message("[pick("An object in the rock crumbles away into dust.","Something falls out of the rock and shatters onto the ground.")]") - finds.Remove(F) - return - - //with skill and luck, players can cleanly extract finds - //otherwise, they come out inside a chunk of rock - if(prob_clean) - var/find = get_archeological_find_by_findtype(F.find_type) - new find(src) - else - var/obj/item/ore/strangerock/rock = new(src, inside_item_type = F.find_type) - geologic_data.UpdateNearbyArtifactInfo(src) - rock.geologic_data = geologic_data - - finds.Remove(F) - - -/turf/simulated/mineral/proc/artifact_debris(var/severity = 0) - //cael's patented random limited drop componentized loot system! - //sky's patented not-fucking-retarded overhaul! - - //Give a random amount of loot from 1 to 3 or 5, varying on severity. - for(var/j in 1 to rand(1, 3 + max(min(severity, 1), 0) * 2)) - switch(rand(1,7)) - if(1) - var/obj/item/stack/material/rods/R = new(src) - R.amount = rand(5,25) - - if(2) - var/obj/item/stack/material/plasteel/R = new(src) - R.amount = rand(5,25) - - if(3) - var/obj/item/stack/material/steel/R = new(src) - R.amount = rand(5,25) - - if(4) - var/obj/item/stack/material/plasteel/R = new(src) - R.amount = rand(5,25) - - if(5) - var/quantity = rand(1,3) - for(var/i=0, iThis area has already been dug") - return - - var/turf/T = user.loc - if (!(istype(T))) - return - - to_chat(user, "You start digging.") - playsound(user.loc, 'sound/effects/rustle1.ogg', 50, 1) - - if(!do_after(user, 4 SECONDS, src, DO_DEFAULT | DO_PUBLIC_PROGRESS)) return - - to_chat(user, "You dug a hole.") - gets_dug() - - else if(istype(W,/obj/item/storage/ore)) - var/obj/item/storage/ore/S = W - if(S.collection_mode) - for(var/obj/item/ore/O in contents) - O.attackby(W,user) - return - else if(istype(W,/obj/item/storage/bag/fossils)) - var/obj/item/storage/bag/fossils/S = W - if(S.collection_mode) - for(var/obj/item/fossil/F in contents) - F.attackby(W,user) - return - - else - ..(W,user) - return - -/turf/simulated/floor/asteroid/proc/gets_dug() - - if(dug) - return - - for(var/i=0;i<(rand(3)+2);i++) - new/obj/item/ore/glass(src) - - dug = 1 - icon_state = "asteroid_dug" - return - -/turf/simulated/floor/asteroid/proc/updateMineralOverlays(var/update_neighbors) - - overlays.Cut() - - var/list/step_overlays = list("n" = NORTH, "s" = SOUTH, "e" = EAST, "w" = WEST) - for(var/direction in step_overlays) - - if(istype(get_step(src, step_overlays[direction]), /turf/space)) - var/image/aster_edge = image('icons/turf/flooring/asteroid.dmi', "asteroid_edges", dir = step_overlays[direction]) - aster_edge.turf_decal_layerise() - overlays += aster_edge - - if(istype(get_step(src, step_overlays[direction]), /turf/simulated/mineral)) - var/image/rock_wall = image('icons/turf/walls.dmi', "rock_side", dir = step_overlays[direction]) - rock_wall.turf_decal_layerise() - overlays += rock_wall - - //todo cache - if(overlay_detail) - var/image/floor_decal = image(icon = 'icons/turf/flooring/decals.dmi', icon_state = overlay_detail) - floor_decal.turf_decal_layerise() - overlays |= floor_decal - - if(update_neighbors) - var/list/all_step_directions = list(NORTH,NORTHEAST,EAST,SOUTHEAST,SOUTH,SOUTHWEST,WEST,NORTHWEST) - for(var/direction in all_step_directions) - var/turf/simulated/floor/asteroid/A - if(istype(get_step(src, direction), /turf/simulated/floor/asteroid)) - A = get_step(src, direction) - A.updateMineralOverlays() - -/turf/simulated/floor/asteroid/Entered(atom/movable/M as mob|obj) - ..() - if(istype(M,/mob/living/silicon/robot)) - var/mob/living/silicon/robot/R = M - if(R.module) - if(istype(R.module_state_1,/obj/item/storage/ore)) - attackby(R.module_state_1,R) - else if(istype(R.module_state_2,/obj/item/storage/ore)) - attackby(R.module_state_2,R) - else if(istype(R.module_state_3,/obj/item/storage/ore)) - attackby(R.module_state_3,R) - else - return diff --git a/code/modules/mining/satchel_ore_boxdm.dm b/code/modules/mining/satchel_ore_boxdm.dm deleted file mode 100644 index 0f8af17b3264b..0000000000000 --- a/code/modules/mining/satchel_ore_boxdm.dm +++ /dev/null @@ -1,94 +0,0 @@ - -/**********************Ore box**************************/ - -/obj/structure/ore_box - icon = 'icons/obj/mining.dmi' - icon_state = "orebox0" - name = "ore box" - desc = "A heavy box used for storing ore." - density = TRUE - var/last_update = 0 - var/list/stored_ore = list() - -/obj/structure/ore_box/attackby(obj/item/W as obj, mob/user as mob) - if (istype(W, /obj/item/ore)) - user.unEquip(W, src) - else if (istype(W, /obj/item/storage)) - var/obj/item/storage/S = W - S.hide_from(usr) - for(var/obj/item/ore/O in S.contents) - S.remove_from_storage(O, src, 1) //This will move the item to this item's contents - S.finish_bulk_removal() - to_chat(user, "You empty the satchel into the box.") - - update_ore_count() - -/obj/structure/ore_box/proc/update_ore_count() - - stored_ore = list() - - for(var/obj/item/ore/O in contents) - - if(stored_ore[O.name]) - stored_ore[O.name]++ - else - stored_ore[O.name] = 1 - -/obj/structure/ore_box/examine(mob/user) - . = ..() - - // Borgs can now check contents too. - if((!istype(user, /mob/living/carbon/human)) && (!istype(user, /mob/living/silicon/robot))) - return - - if(!Adjacent(user)) //Can only check the contents of ore boxes if you can physically reach them. - return - - add_fingerprint(user) - - if(!contents.len) - to_chat(user, "It is empty.") - return - - if(world.time > last_update + 10) - update_ore_count() - last_update = world.time - - to_chat(user, "It holds:") - for(var/ore in stored_ore) - to_chat(user, "- [stored_ore[ore]] [ore]") - return - - -/obj/structure/ore_box/verb/empty_box() - set name = "Empty Ore Box" - set category = "Object" - set src in view(1) - - if(!istype(usr, /mob/living/carbon/human)) //Only living, intelligent creatures with hands can empty ore boxes. - to_chat(usr, "You are physically incapable of emptying the ore box.") - return - - if( usr.stat || usr.restrained() ) - return - - if(!Adjacent(usr)) //You can only empty the box if you can physically reach it - to_chat(usr, "You cannot reach the ore box.") - return - - add_fingerprint(usr) - - if(contents.len < 1) - to_chat(usr, "The ore box is empty") - return - - for (var/obj/item/ore/O in contents) - O.dropInto(loc) - to_chat(usr, "You empty the ore box") - -/obj/structure/ore_box/ex_act(severity) - if(severity == EX_ACT_DEVASTATING || (severity < EX_ACT_LIGHT && prob(50))) - for (var/obj/item/ore/O in contents) - O.dropInto(loc) - O.ex_act(severity++) - qdel(src) diff --git a/code/modules/mob/animations.dm b/code/modules/mob/animations.dm deleted file mode 100644 index ccdc14ac580ba..0000000000000 --- a/code/modules/mob/animations.dm +++ /dev/null @@ -1,293 +0,0 @@ -/* -adds a dizziness amount to a mob -use this rather than directly changing var/dizziness -since this ensures that the dizzy_process proc is started -currently only humans get dizzy - -value of dizziness ranges from 0 to 1000 -below 100 is not dizzy -*/ - -/mob/var/dizziness = 0//Carbon -/mob/var/is_dizzy = 0 - -/mob/proc/make_dizzy(var/amount) - if(!istype(src, /mob/living/carbon/human)) // for the moment, only humans get dizzy - return - - dizziness = min(1000, dizziness + amount) // store what will be new value - // clamped to max 1000 - if(dizziness > 100 && !is_dizzy) - spawn(0) - dizzy_process() - - -/* -dizzy process - wiggles the client's pixel offset over time -spawned from make_dizzy(), will terminate automatically when dizziness gets <100 -note dizziness decrements automatically in the mob's Life() proc. -*/ -/mob/proc/dizzy_process() - is_dizzy = 1 - while(dizziness > 100) - if(client) - var/amplitude = dizziness*(sin(dizziness * 0.044 * world.time) + 1) / 70 - client.pixel_x = amplitude * sin(0.008 * dizziness * world.time) - client.pixel_y = amplitude * cos(0.008 * dizziness * world.time) - - sleep(1) - //endwhile - reset the pixel offsets to zero - is_dizzy = 0 - if(client) - client.pixel_x = 0 - client.pixel_y = 0 - -// jitteriness - copy+paste of dizziness -/mob/var/is_jittery = 0 -/mob/var/jitteriness = 0//Carbon - -/mob/proc/make_jittery(var/amount) - return //Only for living/carbon/human - -/mob/living/carbon/human/make_jittery(var/amount) - if(!istype(src, /mob/living/carbon/human)) // for the moment, only humans get jittery - return - if(!jittery_damage()) - return //Robotic hearts don't get jittery. - jitteriness = min(1000, jitteriness + amount) // store what will be new value - // clamped to max 1000 - if(jitteriness > 100 && !is_jittery) - spawn(0) - jittery_process() - -// Typo from the original coder here, below lies the jitteriness process. So make of his code what you will, the previous comment here was just a copypaste of the above. -/mob/proc/jittery_process() - is_jittery = 1 - while(jitteriness > 100) - var/amplitude = min(4, jitteriness / 100) - do_jitter(amplitude) - sleep(1) - //endwhile - reset the pixel offsets to zero - is_jittery = 0 - do_jitter(0) - -/mob/proc/do_jitter(amplitude) - pixel_x = default_pixel_x + rand(-amplitude, amplitude) - pixel_y = default_pixel_y + rand(-amplitude/3, amplitude/3) - -//handles up-down floaty effect in space and zero-gravity -/mob/var/is_floating = 0 -/mob/var/floatiness = 0 - -/mob/proc/update_floating() - - if(anchored || buckled || check_solid_ground()) - make_floating(0) - return - - if(Check_Shoegrip() && Check_Dense_Object()) - make_floating(0) - return - - make_floating(1) - return - -/mob/proc/make_floating(var/n) - floatiness = n - - if(floatiness && !is_floating) - start_floating() - else if(!floatiness && is_floating) - stop_floating() - -/mob/proc/start_floating() - - is_floating = 1 - - var/amplitude = 2 //maximum displacement from original position - var/period = 36 //time taken for the mob to go up -> down -> original position, in deciseconds. Should be multiple of 4 - - var/top = default_pixel_z + amplitude - var/bottom = default_pixel_z - amplitude - var/half_period = period / 2 - var/quarter_period = period / 4 - - animate(src, pixel_z = top, time = quarter_period, easing = SINE_EASING | EASE_OUT, loop = -1) //up - animate(pixel_z = bottom, time = half_period, easing = SINE_EASING, loop = -1) //down - animate(pixel_z = default_pixel_z, time = quarter_period, easing = SINE_EASING | EASE_IN, loop = -1) //back - -/mob/proc/stop_floating() - animate(src, pixel_z = default_pixel_z, time = 5, easing = SINE_EASING | EASE_IN) //halt animation - //reset the pixel offsets to zero - is_floating = 0 - -/atom/movable/proc/do_windup_animation(atom/A, windup_time) - var/pixel_x_diff = 0 - var/pixel_y_diff = 0 - var/direction = get_dir(src, A) - if(direction & NORTH) - pixel_y_diff = -8 - else if(direction & SOUTH) - pixel_y_diff = 8 - - if(direction & EAST) - pixel_x_diff = -8 - else if(direction & WEST) - pixel_x_diff = 8 - - var/default_pixel_x = initial(pixel_x) - var/default_pixel_y = initial(pixel_y) - var/mob/mob = src - if(istype(mob)) - default_pixel_x = mob.default_pixel_x - default_pixel_y = mob.default_pixel_y - - animate(src, pixel_x = pixel_x + pixel_x_diff, pixel_y = pixel_y + pixel_y_diff, time = windup_time - 2) - animate(pixel_x = default_pixel_x, pixel_y = default_pixel_y, time = 2) - -/atom/movable/proc/do_attack_animation(atom/A) - - var/pixel_x_diff = 0 - var/pixel_y_diff = 0 - var/direction = get_dir(src, A) - switch(direction) - if(NORTH) - pixel_y_diff = 8 - if(SOUTH) - pixel_y_diff = -8 - if(EAST) - pixel_x_diff = 8 - if(WEST) - pixel_x_diff = -8 - if(NORTHEAST) - pixel_x_diff = 8 - pixel_y_diff = 8 - if(NORTHWEST) - pixel_x_diff = -8 - pixel_y_diff = 8 - if(SOUTHEAST) - pixel_x_diff = 8 - pixel_y_diff = -8 - if(SOUTHWEST) - pixel_x_diff = -8 - pixel_y_diff = -8 - - var/default_pixel_x = initial(pixel_x) - var/default_pixel_y = initial(pixel_y) - var/mob/mob = src - if(istype(mob)) - default_pixel_x = mob.default_pixel_x - default_pixel_y = mob.default_pixel_y - - animate(src, pixel_x = pixel_x + pixel_x_diff, pixel_y = pixel_y + pixel_y_diff, time = 2) - animate(pixel_x = default_pixel_x, pixel_y = default_pixel_y, time = 2) - -/atom/movable/proc/do_attack_effect(atom/A, effect) //Simple effects for telegraphing or marking attack locations - if (effect) - var/image/I = image('icons/effects/effects.dmi', A, effect, ABOVE_PROJECTILE_LAYER) - - if (!I) - return - - flick_overlay(I, GLOB.clients, 10) - - // And animate the attack! - animate( - I, - alpha = 175, - transform = matrix().Update(scale_x = 0.75, scale_y = 0.75), - pixel_x = 0, - pixel_y = 0, - pixel_z = 0, - time = 3 - ) - animate(time = 1) - animate(alpha = 0, time = 3, easing = CIRCULAR_EASING|EASE_OUT) - -/mob/do_attack_animation(atom/A) - ..() - is_floating = 0 // If we were without gravity, the bouncing animation got stopped, so we make sure we restart the bouncing after the next movement. - - // What icon do we use for the attack? - var/image/I - if(hand && l_hand) // Attacked with item in left hand. - I = image(l_hand.icon, A, l_hand.icon_state, A.layer + 1) - else if (!hand && r_hand) // Attacked with item in right hand. - I = image(r_hand.icon, A, r_hand.icon_state, A.layer + 1) - else // Attacked with a fist? - return - - // Who can see the attack? - var/list/viewing = list() - for (var/mob/M in viewers(A)) - if (M.client) - viewing |= M.client - flick_overlay(I, viewing, 5) // 5 ticks/half a second - - // Scale the icon. - I.SetTransform(scale = 0.75) - // Set the direction of the icon animation. - var/direction = get_dir(src, A) - if(direction & NORTH) - I.pixel_y = -16 - else if(direction & SOUTH) - I.pixel_y = 16 - - if(direction & EAST) - I.pixel_x = -16 - else if(direction & WEST) - I.pixel_x = 16 - - if(!direction) // Attacked self?! - I.pixel_z = 16 - - // And animate the attack! - animate(I, alpha = 175, pixel_x = 0, pixel_y = 0, pixel_z = 0, time = 3) - -/mob/proc/spin(spintime, speed) - spawn() - var/D = dir - while(spintime >= speed) - sleep(speed) - switch(D) - if(NORTH) - D = EAST - if(SOUTH) - D = WEST - if(EAST) - D = SOUTH - if(WEST) - D = NORTH - set_dir(D) - spintime -= speed - return - -/mob/proc/phase_in(var/turf/T) - if(!T) - return - - playsound(T, 'sound/effects/phasein.ogg', 25, 1) - playsound(T, 'sound/effects/sparks2.ogg', 50, 1) - anim(src,'icons/mob/mob.dmi',,"phasein",,dir) - -/mob/proc/phase_out(var/turf/T) - if(!T) - return - playsound(T, "sparks", 50, 1) - anim(src,'icons/mob/mob.dmi',,"phaseout",,dir) - -/mob/living/proc/on_structure_offset(var/offset = 0) - if(offset) - var/check = default_pixel_z + offset - if(pixel_z != check) - animate(src, pixel_z = check, time = 2, easing = SINE_EASING) - else if(pixel_z != default_pixel_z) - var/turf/T = get_turf(src) - for(var/obj/structure/S in T.contents) - if(S && S.mob_offset) - return - animate(src, pixel_z = default_pixel_z, time = 2, easing = SINE_EASING) - -/mob/living/Move() - . = ..() - on_structure_offset(0) diff --git a/code/modules/mob/death.dm b/code/modules/mob/death.dm deleted file mode 100644 index b223e3f79765a..0000000000000 --- a/code/modules/mob/death.dm +++ /dev/null @@ -1,99 +0,0 @@ -//This is the proc for gibbing a mob. Cannot gib ghosts. -//added different sort of gibs and animations. N -/mob/proc/gib(anim="gibbed-m",do_gibs) - death(1) - ADD_TRANSFORMATION_MOVEMENT_HANDLER(src) - icon = null - set_invisibility(101) - UpdateLyingBuckledAndVerbStatus() - remove_from_dead_mob_list() - - var/atom/movable/overlay/animation = new(src) - animation.icon_state = "blank" - animation.icon = 'icons/mob/mob.dmi' - - flick(anim, animation) - if(do_gibs) gibs(loc, dna) - - addtimer(CALLBACK(src, .proc/check_delete, animation), 15) - -/mob/proc/check_delete(var/atom/movable/overlay/animation) - if(animation) qdel(animation) - if(src) qdel(src) - -//This is the proc for turning a mob into ash. Mostly a copy of gib code (above). -//Originally created for wizard disintegrate. I've removed the virus code since it's irrelevant here. -//Dusting robots does not eject the MMI, so it's a bit more powerful than gib() /N -/mob/proc/dust(anim="dust-m",remains=/obj/effect/decal/cleanable/ash) - death(1) - - if(stat == DEAD) - ghostize(FALSE) //Ghosts the mob here so it keeps its sprite - - var/atom/movable/overlay/animation = null - ADD_TRANSFORMATION_MOVEMENT_HANDLER(src) - icon = null - set_invisibility(101) - - animation = new(loc) - animation.icon_state = "blank" - animation.icon = 'icons/mob/mob.dmi' - animation.master = src - - flick(anim, animation) - new remains(loc) - - remove_from_dead_mob_list() - addtimer(CALLBACK(src, .proc/check_delete, animation), 15) - - -/mob/proc/death(gibbed,deathmessage="seizes up and falls limp...", show_dead_message = "You have died.") - - if(stat == DEAD) - return 0 - - facing_dir = null - - if(!gibbed && deathmessage != "no message") // This is gross, but reliable. Only brains use it. - src.visible_message("\The [src.name] [deathmessage]") - - set_stat(DEAD) - adjust_stamina(-100) - reset_plane_and_layer() - UpdateLyingBuckledAndVerbStatus() - - dizziness = 0 - jitteriness = 0 - - set_sight(sight|SEE_TURFS|SEE_MOBS|SEE_OBJS) - set_see_in_dark(8) - set_see_invisible(SEE_INVISIBLE_LEVEL_TWO) - - drop_r_hand() - drop_l_hand() - - if (mind?.assigned_job && mind.assigned_job.department_flag && !player_is_antag(mind)) - GLOB.crew_death_count += 1 - - //TODO: Change death state to health_dead for all these icon files. This is a stop gap. - if(healths) - healths.overlays.Cut() // This is specific to humans but the relevant code is here; shouldn't mess with other mobs. - if("health7" in icon_states(healths.icon)) - healths.icon_state = "health7" - else - healths.icon_state = "health6" - log_debug("[src] ([src.type]) died but does not have a valid health7 icon_state (using health6 instead). report this error to Ccomp5950 or your nearest Developer") - if(client) - kill_CH() //We dead... clear any prepared abilities... - - timeofdeath = world.time - if(mind) - mind.StoreMemory("Time of death: [stationtime2text()]", /decl/memory_options/system) - switch_from_living_to_dead_mob_list() - - update_icon() - - if(SSticker.mode) - SSticker.mode.check_win() - to_chat(src,"[show_dead_message]") - return 1 diff --git a/code/modules/mob/floating_message.dm b/code/modules/mob/floating_message.dm deleted file mode 100644 index a1a478904b5a9..0000000000000 --- a/code/modules/mob/floating_message.dm +++ /dev/null @@ -1,106 +0,0 @@ -// Thanks to Burger from Burgerstation for the foundation for this. Ported from NebulaSS13 -GLOBAL_LIST_EMPTY(floating_chat_colors) - -/// How long the chat message's spawn-in animation will occur for -#define CHAT_MESSAGE_SPAWN_TIME 0.2 SECONDS -/// How long the chat message will exist prior to any exponential decay -#define CHAT_MESSAGE_LIFESPAN 5 SECONDS -/// How long the chat message's end of life fading animation will occur for -#define CHAT_MESSAGE_EOL_FADE 0.7 SECONDS -/// Max width of chat message in pixels -#define CHAT_MESSAGE_WIDTH 128 -/// Max width of chat message in pixels -#define CHAT_MESSAGE_HEIGHT 64 - -/atom/movable - var/list/stored_chat_text - -/atom/movable/proc/animate_chat(message, datum/language/language, small, list/show_to, duration = CHAT_MESSAGE_LIFESPAN, huge) - set waitfor = FALSE - - /// Get rid of any URL schemes that might cause BYOND to automatically wrap something in an anchor tag - var/static/regex/url_scheme = new(@"[A-Za-z][A-Za-z0-9+-\.]*:\/\/", "g") - message = replacetext(message, url_scheme, "") - - var/static/regex/html_metachars = new(@"&[A-Za-z]{1,7};", "g") - message = replacetext(message, html_metachars, "") - - //additional style params for the message - var/style - var/fontsize = 7 - var/limit = 120 - - if(huge && small) - fontsize = 7 - limit = 100 - style += "font-weight: bold;" - - else if(small) - fontsize = 6 - - else if(huge) - fontsize = 9 - limit = 60 - style += "font-weight: bold;" - - if(language == all_languages["Noise"]) - message = "*" + message + "*" - - else if(copytext_char(message, length_char(message) - 1) == "!!") - fontsize += 1 - limit = 60 - style += "font-weight: bold;" - - if(length_char(message) > limit) - message = "[copytext_char(message, 1, limit)]..." - - if(!GLOB.floating_chat_colors[name]) - GLOB.floating_chat_colors[name] = get_random_colour(0, 160, 230) - style += "color: [GLOB.floating_chat_colors[name]];" - - // create 2 messages, one that appears if you know the language, and one that appears when you don't know the language - var/image/understood = generate_floating_text(src, capitalize(message), style, fontsize, duration, show_to) - var/image/gibberish = language ? generate_floating_text(src, language.scramble(message), style, fontsize, duration, show_to) : understood - - for(var/client/C in show_to) - if(!C.mob.is_deaf() && C.get_preference_value(/datum/client_preference/floating_messages) == GLOB.PREF_SHOW) - if(C.mob.say_understands(null, language)) - C.images += understood - else - C.images += gibberish - -/proc/generate_floating_text(atom/movable/holder, message, style, size, duration, show_to) - var/image/I = image(null, get_atom_on_turf(holder)) - I.plane = HUD_PLANE - I.layer = HUD_ABOVE_ITEM_LAYER - I.alpha = 0 - I.maptext_width = CHAT_MESSAGE_WIDTH - I.maptext_height = CHAT_MESSAGE_HEIGHT - I.appearance_flags = APPEARANCE_UI_IGNORE_ALPHA | KEEP_APART - I.pixel_w = -round(I.maptext_width/2) + 16 - - style = "font-family: 'Small Fonts'; -dm-text-outline: 1px black; font-size: [size]px; line-height: 1.1; [style]" - I.maptext = "
              [message]
              " - animate(I, CHAT_MESSAGE_SPAWN_TIME, alpha = 255, pixel_z = 16) - - var/move_up_z = 10 - for(var/image/old in holder.stored_chat_text) - var/pixel_z_new = old.pixel_z + move_up_z - animate(old, CHAT_MESSAGE_SPAWN_TIME, pixel_z = pixel_z_new) - - LAZYADD(holder.stored_chat_text, I) - - addtimer(CALLBACK(GLOBAL_PROC, .proc/remove_floating_text, holder, I), duration) - addtimer(CALLBACK(GLOBAL_PROC, .proc/remove_images_from_clients, I, show_to), duration + CHAT_MESSAGE_EOL_FADE) - - return I - -/proc/remove_floating_text(atom/movable/holder, image/I) - animate(I, CHAT_MESSAGE_EOL_FADE, pixel_z = I.pixel_z + 12, alpha = 0, flags = ANIMATION_PARALLEL) - LAZYREMOVE(holder.stored_chat_text, I) - -#undef CHAT_MESSAGE_SPAWN_TIME -#undef CHAT_MESSAGE_LIFESPAN -#undef CHAT_MESSAGE_EOL_FADE -#undef CHAT_MESSAGE_WIDTH -#undef CHAT_MESSAGE_HEIGHT diff --git a/code/modules/mob/gender.dm b/code/modules/mob/gender.dm deleted file mode 100644 index a53b3f099be23..0000000000000 --- a/code/modules/mob/gender.dm +++ /dev/null @@ -1,68 +0,0 @@ - -var/global/list/gender_datums = list() - -/hook/startup/proc/populate_gender_datum_list() - for(var/type in subtypesof(/datum/gender)) - var/datum/gender/G = new type - gender_datums[G.key] = G - if(!G.formal_term) - G.formal_term = G.key - return 1 - -/datum/gender - var/key - var/formal_term - - var/He = "They" - var/he = "they" - var/His = "Their" - var/his = "their" - var/him = "them" - var/has = "have" - var/is = "are" - var/does = "do" - var/self = "themselves" - -/datum/gender/plural - key = PLURAL - formal_term = "other" - -/datum/gender/male - key = MALE - - He = "He" - he = "he" - His = "His" - his = "his" - him = "him" - has = "has" - is = "is" - does = "does" - self = "himself" - -/datum/gender/female - key = FEMALE - - He = "She" - he = "she" - His = "Her" - his = "her" - him = "her" - has = "has" - is = "is" - does = "does" - self = "herself" - -/datum/gender/neuter - key = NEUTER - formal_term = "other" - - He = "It" - he = "it" - His = "Its" - his = "its" - him = "it" - has = "has" - is = "is" - does = "does" - self = "itself" diff --git a/code/modules/mob/grab/grab_datum.dm b/code/modules/mob/grab/grab_datum.dm deleted file mode 100644 index 6a01262dfc88d..0000000000000 --- a/code/modules/mob/grab/grab_datum.dm +++ /dev/null @@ -1,318 +0,0 @@ -/datum/grab - - var/type_name - var/state_name - var/fancy_desc - - var/datum/grab/upgrab // The grab that this will upgrade to if it upgrades, null means no upgrade - var/datum/grab/downgrab // The grab that this will downgrade to if it downgrades, null means break grab on downgrade - - var/datum/time_counter // For things that need to be timed - - var/stop_move = 0 // Whether or not the grabbed person can move out of the grab - var/force_stand = 0 // Whether or not the grabbed person is forced to be standing - var/reverse_facing = 0 // Whether the person being grabbed is facing forwards or backwards. - var/can_absorb = 0 // Whether this grab state is strong enough to, as a changeling, absorb the person you're grabbing. - var/shield_assailant = 0 // Whether the person you're grabbing will shield you from bullets.,, - var/point_blank_mult = 1 // How much the grab increases point blank damage. - var/damage_stage = 1 // Affects how much damage is being dealt using certain actions. - var/same_tile = 0 // If the grabbed person and the grabbing person are on the same tile. - var/ladder_carry = 0 // If the grabber can carry the grabbed person up or down ladders. - var/can_throw = 0 // If the grabber can throw the person grabbed. - var/downgrade_on_action = 0 // If the grab needs to be downgraded when the grabber does stuff. - var/downgrade_on_move = 0 // If the grab needs to be downgraded when the grabber moves. - var/force_danger = 0 // If the grab is strong enough to be able to force someone to do something harmful to them. - var/restrains = 0 // If the grab acts like cuffs and prevents action from the victim. - - var/grab_slowdown = 7 - - var/shift = 0 - - var/success_up = "You upgrade the grab." - var/success_down = "You downgrade the grab." - - var/fail_up = "You fail to upgrade the grab." - var/fail_down = "You fail to downgrade the grab." - - var/upgrab_name - var/downgrab_name - - var/icon - var/icon_state - - var/upgrade_cooldown = 40 - var/action_cooldown = 40 - - var/can_downgrade_on_resist = 1 - var/list/break_chance_table = list(100) - var/breakability = 2 - - var/can_grab_self = 1 - - // The names of different intents for use in attack logs - var/help_action = "help intent" - var/disarm_action = "disarm intent" - var/grab_action = "grab intent" - var/harm_action = "harm intent" - -/* - These procs shouldn't be overriden in the children unless you know what you're doing with them; they handle important core functions. - Even if you do override them, you should likely be using ..() if you want the behaviour to function properly. That is, of course, - unless you're writing your own custom handling of things. -*/ - -/datum/grab/proc/refresh_updown() - if(upgrab_name) - upgrab = all_grabstates[upgrab_name] - - if(downgrab_name) - downgrab = all_grabstates[downgrab_name] - -// This is for the strings defined as datum variables. It takes them and swaps out keywords for relevent ones from the grab -// object involved. -/datum/grab/proc/string_process(var/obj/item/grab/G, var/to_write, var/obj/item/used_item) - to_write = replacetext_char(to_write, "rep_affecting", G.affecting) - to_write = replacetext_char(to_write, "rep_assailant", G.assailant) - if(used_item) - to_write = replacetext_char(to_write, "rep_item", used_item) - return to_write - -/datum/grab/proc/upgrade(var/obj/item/grab/G) - if(!upgrab) - return - - if (can_upgrade(G)) - upgrade_effect(G) - admin_attack_log(G.assailant, G.affecting, "tightens their grip on their victim to [upgrab.state_name]", "was grabbed more tightly to [upgrab.state_name]", "tightens grip to [upgrab.state_name] on") - return upgrab - else - to_chat(G.assailant, "[string_process(G, fail_up)]") - return - -/datum/grab/proc/downgrade(var/obj/item/grab/G) - // Starts the process of letting go if there's no downgrade grab - if(can_downgrade()) - downgrade_effect(G) - return downgrab - else - to_chat(G.assailant, "[string_process(G, fail_down)]") - return - -/datum/grab/proc/let_go(var/obj/item/grab/G) - if (G) - let_go_effect(G) - G.force_drop() - -/datum/grab/proc/on_target_change(var/obj/item/grab/G, old_zone, new_zone) - G.special_target_functional = check_special_target(G) - if(G.special_target_functional) - special_target_change(G, old_zone, new_zone) - special_target_effect(G) - -/datum/grab/proc/process(var/obj/item/grab/G) - special_target_effect(G) - process_effect(G) - -/datum/grab/proc/throw_held(var/obj/item/grab/G) - if(G.assailant == G.affecting) - return - - var/mob/living/carbon/human/affecting = G.affecting - - if(can_throw) - . = affecting - var/mob/thrower = G.loc - - animate(affecting, pixel_x = 0, pixel_y = 0, 4, 1) - qdel(G) - - // check if we're grabbing with our inactive hand - G = thrower.get_inactive_hand() - if(!istype(G)) return - qdel(G) - return - -/datum/grab/proc/hit_with_grab(var/obj/item/grab/G) - if(downgrade_on_action) - G.downgrade() - - if(G.check_action_cooldown() && !G.attacking) - var/intent = G.assailant.a_intent - switch(intent) - - if(I_HELP) - if(on_hit_help(G)) - G.action_used() - make_log(G, help_action) - - if(I_DISARM) - if(on_hit_disarm(G)) - G.action_used() - make_log(G, disarm_action) - - if(I_GRAB) - if(on_hit_grab(G)) - G.action_used() - make_log(G, grab_action) - - if(I_HURT) - if(on_hit_harm(G)) - G.action_used() - make_log(G, harm_action) - - else - to_chat(G.assailant, "You must wait before you can do that.") - -/datum/grab/proc/make_log(var/obj/item/grab/G, var/action) - admin_attack_log(G.assailant, G.affecting, "[action]s their victim", "was [action]ed", "used [action] on") - - -/datum/grab/proc/adjust_position(var/obj/item/grab/G) - var/mob/living/carbon/human/affecting = G.affecting - var/mob/living/carbon/human/assailant = G.assailant - var/adir = get_dir(assailant, affecting) - - if(same_tile) - affecting.forceMove(assailant.loc) - adir = assailant.dir - affecting.set_dir(assailant.dir) - - switch(adir) - if(NORTH) - animate(affecting, pixel_x = 0, pixel_y =-shift, 5, 1, LINEAR_EASING) - G.draw_affecting_under() - if(SOUTH) - animate(affecting, pixel_x = 0, pixel_y = shift, 5, 1, LINEAR_EASING) - G.draw_affecting_over() - if(WEST) - animate(affecting, pixel_x = shift, pixel_y = 0, 5, 1, LINEAR_EASING) - G.draw_affecting_under() - if(EAST) - animate(affecting, pixel_x =-shift, pixel_y = 0, 5, 1, LINEAR_EASING) - G.draw_affecting_under() - - affecting.reset_plane_and_layer() - -/datum/grab/proc/reset_position(var/obj/item/grab/G) - var/mob/living/carbon/human/affecting = G.affecting - - if(!affecting.buckled) - animate(affecting, pixel_x = 0, pixel_y = 0, 4, 1, LINEAR_EASING) - affecting.reset_plane_and_layer() - -// This is called whenever the assailant moves. -/datum/grab/proc/assailant_moved(var/obj/item/grab/G) - adjust_position(G) - moved_effect(G) - if(downgrade_on_move) - G.downgrade() - -/* - Override these procs to set how the grab state will work. Some of them are best - overriden in the parent of the grab set (for example, the behaviour for on_hit_intent(var/obj/item/grab/G) - procs is determined in /datum/grab/normal and then inherited by each intent). -*/ - -// What happens when you upgrade from one grab state to the next. -/datum/grab/proc/upgrade_effect(var/obj/item/grab/G) - -// Conditions to see if upgrading is possible -/datum/grab/proc/can_upgrade(var/obj/item/grab/G) - return 1 - -// What happens when you downgrade from one grab state to the next. -/datum/grab/proc/downgrade_effect(var/obj/item/grab/G) - -// Conditions to see if downgrading is possible -/datum/grab/proc/can_downgrade(var/obj/item/grab/G) - return 1 - -// What happens when you let go of someone by either dropping the grab -// or by downgrading from the lowest grab state. -/datum/grab/proc/let_go_effect(var/obj/item/grab/G) - -// What happens each tic when process is called. -/datum/grab/proc/process_effect(var/obj/item/grab/G) - -// Handles special targeting like eyes and mouth being covered. -/datum/grab/proc/special_target_effect(var/obj/item/grab/G) - -// Handles when they change targeted areas and something is supposed to happen. -/datum/grab/proc/special_target_change(var/obj/item/grab/G, var/diff_zone) - -// Checks if the special target works on the grabbed humanoid. -/datum/grab/proc/check_special_target(var/obj/item/grab/G) - -// What happens when you hit the grabbed person with the grab on help intent. -/datum/grab/proc/on_hit_help(var/obj/item/grab/G) - return 1 - -// What happens when you hit the grabbed person with the grab on disarm intent. -/datum/grab/proc/on_hit_disarm(var/obj/item/grab/G) - return 1 - -// What happens when you hit the grabbed person with the grab on grab intent. -/datum/grab/proc/on_hit_grab(var/obj/item/grab/G) - return 1 - -// What happens when you hit the grabbed person with the grab on harm intent. -/datum/grab/proc/on_hit_harm(var/obj/item/grab/G) - return 1 - -// What happens when you hit the grabbed person with an open hand and you want it -// to do some special snowflake action based on some other factor such as -// intent. -/datum/grab/proc/resolve_openhand_attack(var/obj/item/grab/G) - return 0 - -// Used when you want an effect to happen when the grab enters this state as an upgrade -/datum/grab/proc/enter_as_up(var/obj/item/grab/G) - -/datum/grab/proc/item_attack(var/obj/item/grab/G, var/obj/item) - -/datum/grab/proc/resolve_item_attack(var/obj/item/grab/G, var/mob/living/carbon/human/user, var/obj/item/I, var/target_zone) - return 0 - -/datum/grab/proc/handle_resist(var/obj/item/grab/G) - var/mob/living/carbon/human/affecting = G.affecting - var/mob/living/carbon/human/assailant = G.assailant - - if(affecting.incapacitated(INCAPACITATION_KNOCKOUT | INCAPACITATION_STUNNED)) - to_chat(G.affecting, "You can't resist in your current state!") - var/skill_mod = clamp(affecting.get_skill_difference(SKILL_COMBAT, assailant), -1, 1) - var/break_strength = breakability + size_difference(affecting, assailant) + skill_mod - var/shock = affecting.get_shock() - - if(affecting.incapacitated(INCAPACITATION_ALL)) - break_strength-- - if(affecting.confused) - break_strength-- - if(affecting.eye_blind) - break_strength-- - if(affecting.eye_blurry) - break_strength-- - if(shock >= 10) - break_strength-- - if(shock >= 30) - break_strength-- - if(shock >= 50) - break_strength-- - - if(break_strength < 1) - to_chat(G.affecting, "You try to break free but feel that unless something changes, you'll never escape!") - return - - var/break_chance = break_chance_table[clamp(break_strength, 1, break_chance_table.len)] - if(prob(break_chance)) - if(can_downgrade_on_resist && !prob((break_chance+100)/2)) - affecting.visible_message("[affecting] has loosened [assailant]'s grip!") - G.downgrade() - return - else - affecting.visible_message("[affecting] has broken free of [assailant]'s grip!") - let_go(G) - -/datum/grab/proc/size_difference(mob/A, mob/B) - return mob_size_difference(A.mob_size, B.mob_size) - -/datum/grab/proc/moved_effect(var/obj/item/grab/G) diff --git a/code/modules/mob/grab/grab_object.dm b/code/modules/mob/grab/grab_object.dm deleted file mode 100644 index a9f3a997d54d1..0000000000000 --- a/code/modules/mob/grab/grab_object.dm +++ /dev/null @@ -1,333 +0,0 @@ - -/obj/item/grab - name = "grab" - canremove = 0 - - var/mob/living/carbon/human/affecting = null - var/mob/living/carbon/human/assailant = null - - var/datum/grab/current_grab - var/type_name - var/start_grab_name - - var/last_action - var/last_upgrade - - var/special_target_functional = 1 - - var/attacking = 0 - var/target_zone - var/done_struggle = FALSE // Used by struggle grab datum to keep track of state. - - item_flags = ITEM_FLAG_NO_BLUDGEON - w_class = ITEM_SIZE_NO_CONTAINER -/* - This section is for overrides of existing procs. -*/ -/obj/item/grab/Initialize(mapload, mob/living/carbon/human/victim) - . = ..() - current_grab = all_grabstates[start_grab_name] - - assailant = loc - if(!istype(assailant)) - return INITIALIZE_HINT_QDEL - affecting = victim - if(!istype(affecting)) - return INITIALIZE_HINT_QDEL - target_zone = assailant.zone_sel.selecting - assailant.remove_cloaking_source(assailant.species) - - if(!can_grab()) - return INITIALIZE_HINT_QDEL - if(!init()) - return INITIALIZE_HINT_QDEL - - var/obj/item/organ/O = get_targeted_organ() - SetName("[initial(name)] ([O.name])") - GLOB.dismembered_event.register(affecting, src, .proc/on_organ_loss) - GLOB.zone_selected_event.register(assailant.zone_sel, src, .proc/on_target_change) - -/obj/item/grab/examine(mob/user) - . = ..() - var/obj/item/O = get_targeted_organ() - to_chat(user, "A grab on \the [affecting]'s [O.name].") - -/obj/item/grab/Process() - current_grab.process(src) - -/obj/item/grab/attack_self(mob/user) - if (!assailant) - return - - switch(assailant.a_intent) - if(I_HELP) - downgrade() - else - upgrade() - -/obj/item/grab/attack(mob/M, mob/living/user) - - // Relying on BYOND proc ordering isn't working, so go go ugly workaround. - if(ishuman(user) && affecting == M) - var/mob/living/carbon/human/H = user - if(H.check_psi_grab(src)) - return - // End workaround - - current_grab.hit_with_grab(src) - -/obj/item/grab/resolve_attackby(atom/A, mob/user, var/click_params) - if (QDELETED(src) || !assailant) - return TRUE - assailant.setClickCooldown(DEFAULT_ATTACK_COOLDOWN) - if(!A.grab_attack(src)) - return ..() - action_used() - if (current_grab.downgrade_on_action) - downgrade() - return TRUE - -/obj/item/grab/dropped() - ..() - if(!QDELETED(src)) - qdel(src) - -/obj/item/grab/can_be_dropped_by_client(mob/M) - if(M == assailant) - return TRUE - -/obj/item/grab/Destroy() - if(affecting) - GLOB.dismembered_event.unregister(affecting, src) - reset_position() - affecting.grabbed_by -= src - affecting.reset_plane_and_layer() - affecting = null - if(assailant) - GLOB.zone_selected_event.unregister(assailant.zone_sel, src) - assailant = null - return ..() - -/* - This section is for newly defined useful procs. -*/ - -/obj/item/grab/on_active_hand() - on_target_change(new_sel = assailant.zone_sel.selecting) - -/obj/item/grab/proc/on_target_change(obj/screen/zone_sel/zone, old_sel, new_sel) - if(src != assailant.get_active_hand()) - return // Note that because of this condition, there's no guarantee that target_zone = old_sel - if(target_zone == new_sel) - return - var/old_zone = target_zone - target_zone = new_sel - var/obj/item/organ/O = get_targeted_organ() - - if (!O) - to_chat(assailant, SPAN_WARNING("You fail to grab \the [affecting] there as they do not have that bodypart!")) - return - - SetName("[initial(name)] ([O.name])") - to_chat(assailant, SPAN_NOTICE("You are now holding \the [affecting] by \the [O].")) - if(!istype(get_targeted_organ(), /obj/item/organ)) - current_grab.let_go(src) - return - current_grab.on_target_change(src, old_zone, target_zone) - -/obj/item/grab/proc/on_organ_loss(mob/victim, obj/item/organ/lost) - if(affecting != victim) - crash_with("A grab switched affecting targets without properly re-registering for dismemberment updates.") - return - var/obj/item/organ/O = get_targeted_organ() - if(!istype(O)) - current_grab.let_go(src) - return // Sanity check in case the lost organ was improperly removed elsewhere in the code. - if(lost != O) - return - current_grab.let_go(src) - -/obj/item/grab/proc/force_drop() - assailant.drop_from_inventory(src) - -/obj/item/grab/proc/can_grab() - if(!assailant.Adjacent(affecting)) - return 0 - if(assailant.anchored || affecting.anchored) - return 0 - if(assailant.get_active_hand()) - to_chat(assailant, "You can't grab someone if your hand is full.") - return 0 - if(assailant.grabbed_by.len) - to_chat(assailant, "You can't grab someone if you're being grabbed.") - return 0 - var/obj/item/organ/organ = get_targeted_organ() - if(!istype(organ)) - to_chat(assailant, "\The [affecting] is missing that body part!") - return 0 - if(assailant == affecting) - if(!current_grab.can_grab_self) //let's not nab ourselves - to_chat(assailant, "You can't grab yourself!") - return 0 - var/list/bad_parts = assailant.hand ? list(BP_L_ARM, BP_L_HAND) : list(BP_R_ARM, BP_R_HAND) - if(organ.organ_tag in bad_parts) - to_chat(assailant, "You can't grab your own [organ.name] with itself!") - return 0 - for(var/obj/item/grab/G in affecting.grabbed_by) - if(G.assailant == assailant && G.target_zone == target_zone) - var/obj/O = G.get_targeted_organ() - to_chat(assailant, "You already grabbed [affecting]'s [O.name].") - return 0 - return 1 - -// This will run from Initialize, after can_grab and other checks have succeeded. Must call parent; returning FALSE means failure and qdels the grab. -/obj/item/grab/proc/init() - if(!assailant.put_in_active_hand(src)) - return FALSE // This should succeed as we checked the hand, but if not we abort here. - affecting.UpdateLyingBuckledAndVerbStatus() - affecting.grabbed_by += src // This is how we handle affecting being deleted. - adjust_position() - action_used() - if(affecting.w_uniform) - affecting.w_uniform.add_fingerprint(assailant) - assailant.do_attack_animation(affecting) - playsound(affecting.loc, 'sound/weapons/thudswoosh.ogg', 50, 1, -1) - update_icon() - return TRUE - -// Returns the organ of the grabbed person that the grabber is targeting -/obj/item/grab/proc/get_targeted_organ() - return (affecting?.get_organ(target_zone)) - -/obj/item/grab/proc/resolve_item_attack(var/mob/living/M, var/obj/item/I, var/target_zone) - if((M && ishuman(M)) && I) - return current_grab.resolve_item_attack(src, M, I, target_zone) - else - return 0 - -/obj/item/grab/proc/action_used() - if (assailant) - assailant.remove_cloaking_source(assailant.species) - last_action = world.time - leave_forensic_traces() - -/obj/item/grab/proc/check_action_cooldown() - return (world.time >= last_action + current_grab.action_cooldown) - -/obj/item/grab/proc/check_upgrade_cooldown() - return (world.time >= last_upgrade + current_grab.upgrade_cooldown) - -/obj/item/grab/proc/leave_forensic_traces() - var/obj/item/clothing/C = affecting.get_covering_equipped_item_by_zone(target_zone) - if(istype(C)) - C.leave_evidence(assailant) - if(prob(50)) - C.ironed_state = WRINKLES_WRINKLY - -/obj/item/grab/proc/upgrade(var/bypass_cooldown = FALSE) - if(!check_upgrade_cooldown() && !bypass_cooldown) - to_chat(assailant, "It's too soon to upgrade.") - return - - var/datum/grab/upgrab = current_grab.upgrade(src) - if(upgrab) - current_grab = upgrab - last_upgrade = world.time - adjust_position() - update_icon() - leave_forensic_traces() - current_grab.enter_as_up(src) - -/obj/item/grab/proc/downgrade() - var/datum/grab/downgrab = current_grab.downgrade(src) - if(downgrab) - current_grab = downgrab - update_icon() - -/obj/item/grab/on_update_icon() - if(current_grab.icon) - icon = current_grab.icon - if(current_grab.icon_state) - icon_state = current_grab.icon_state - -/obj/item/grab/proc/draw_affecting_over() - affecting.plane = assailant.plane - affecting.layer = assailant.layer + 0.01 - -/obj/item/grab/proc/draw_affecting_under() - affecting.plane = assailant.plane - affecting.layer = assailant.layer - 0.01 - - -/obj/item/grab/proc/throw_held() - return current_grab.throw_held(src) - -/obj/item/grab/proc/handle_resist() - current_grab.handle_resist(src) - -/obj/item/grab/proc/adjust_position(var/force = 0) - if(force) affecting.forceMove(assailant.loc) - - if(!assailant || !affecting || !assailant.Adjacent(affecting)) - qdel(src) - return 0 - else - current_grab.adjust_position(src) - -/obj/item/grab/proc/reset_position() - current_grab.reset_position(src) - -/obj/item/grab/proc/has_hold_on_organ(obj/item/organ/external/O) - if (!O) - return FALSE - - if (get_targeted_organ() == O) - return TRUE - - return FALSE - -/* - This section is for the simple procs used to return things from current_grab. -*/ -/obj/item/grab/proc/stop_move() - return current_grab.stop_move - -/obj/item/grab/proc/force_stand() - return current_grab.force_stand - -/obj/item/grab/attackby(obj/W, mob/user) - if(user == assailant) - current_grab.item_attack(src, W) - -/obj/item/grab/proc/can_absorb() - return current_grab.can_absorb - -/obj/item/grab/proc/assailant_reverse_facing() - return current_grab.reverse_facing - -/obj/item/grab/proc/shield_assailant() - return current_grab.shield_assailant - -/obj/item/grab/proc/point_blank_mult() - return current_grab.point_blank_mult - -/obj/item/grab/proc/damage_stage() - return current_grab.damage_stage - -/obj/item/grab/proc/force_danger() - return current_grab.force_danger - -/obj/item/grab/proc/grab_slowdown() - return current_grab.grab_slowdown - -/obj/item/grab/proc/ladder_carry() - return current_grab.ladder_carry - -/obj/item/grab/proc/assailant_moved() - current_grab.assailant_moved(src) - -/obj/item/grab/proc/restrains() - return current_grab.restrains - -/obj/item/grab/proc/resolve_openhand_attack() - return current_grab.resolve_openhand_attack(src) diff --git a/code/modules/mob/grab/grab_readme.dm b/code/modules/mob/grab/grab_readme.dm deleted file mode 100644 index 49aab41a51a8c..0000000000000 --- a/code/modules/mob/grab/grab_readme.dm +++ /dev/null @@ -1,30 +0,0 @@ -/* -There's two parts to the grab system. There's the grab object: /obj/item/grab -and there's the grab datum: /datum/grab. - -Each grab datum is a singleton and the system interacts with the rest of the code -base through the grab object. Nothing but the grab object should be reading -from, writing to, or calling the procs of the grab datum. This helps to keep -everything neat and stops undesirable behaviours. - -Each type of grab needs a child of the grab datum and a child of the grab -object. The child of each needs to be named with the name of the grab and -the two need the same naming scheme. For example, the main type of grab -used by human is called "normal" as it's the default vanilla grab. The normal -grab has a child of the grab object called /obj/item/grab/normal and it has a child -of the grab datum called /datum/grab/normal. - -Each stage of the grab is a child of the grab datum for that grab type. For normal -there's /datum/grab/normal/passive, /datum/grab/normal/aggressive etc. and they -get their general behaviours from their parent /datum/grab/normal. - - - - - - - - - - -*/ diff --git a/code/modules/mob/grab/nab/grab_nab.dm b/code/modules/mob/grab/nab/grab_nab.dm deleted file mode 100644 index 53906a74e305f..0000000000000 --- a/code/modules/mob/grab/nab/grab_nab.dm +++ /dev/null @@ -1,94 +0,0 @@ -/obj/item/grab/nab - - type_name = GRAB_NAB - start_grab_name = NAB_PASSIVE - -/obj/item/grab/nab/init() - if(!(. = ..())) - return - assailant.unEquip(assailant.get_inactive_hand()) - visible_message("[assailant] has nabbed [affecting] passively!") - -/datum/grab/nab - - type_name = GRAB_NAB - - icon = 'icons/mob/screen1.dmi' - - stop_move = 1 - force_stand = 1 - reverse_facing = 1 - can_absorb = 1 - shield_assailant = 1 - point_blank_mult = 1 - same_tile = 1 - ladder_carry = 1 - force_danger = 1 - can_grab_self = 0 - -/datum/grab/nab/on_hit_grab(var/obj/item/grab/G) - var/mob/living/carbon/human/affecting = G.affecting - var/mob/living/carbon/human/assailant = G.assailant - - var/crush_damage = rand(8,14) - - affecting.visible_message("[assailant] begins crushing [affecting]!") - G.attacking = 1 - if(do_after(assailant, action_cooldown - 1, affecting, DO_DEFAULT | DO_USER_UNIQUE_ACT | DO_PUBLIC_PROGRESS)) - G.attacking = 0 - G.action_used() - crush(G, crush_damage) - return 1 - else - G.attacking = 0 - affecting.visible_message("[assailant] stops crushing [affecting]!") - return 0 - -/datum/grab/nab/on_hit_harm(var/obj/item/grab/G) - var/mob/living/carbon/human/affecting = G.affecting - var/mob/living/carbon/human/assailant = G.assailant - - var/masticate_damage = rand(15,20) - - affecting.visible_message("[assailant] begins chewing on [affecting]!") - G.attacking = 1 - - if(do_after(assailant, action_cooldown - 1, affecting, DO_DEFAULT | DO_USER_UNIQUE_ACT | DO_PUBLIC_PROGRESS)) - G.attacking = 0 - G.action_used() - masticate(G, masticate_damage) - return 1 - else - G.attacking = 0 - affecting.visible_message("[assailant] stops chewing on [affecting].") - return 0 - -// This causes the assailant to crush the affecting mob. There is a chance that the crush will cause the -// forelimb spikes to dig into the affecting mob, doing extra damage and likely causing them to bleed. -/datum/grab/nab/proc/crush(var/obj/item/grab/G, var/attack_damage) - var/obj/item/organ/external/damaging = G.get_targeted_organ() - var/hit_zone = G.target_zone - G.affecting.visible_message("[G.assailant] crushes [G.affecting]'s [damaging.name]!") - - if(prob(30)) - var/hit_damage = max(attack_damage + 10, 15) - G.affecting.apply_damage(hit_damage, DAMAGE_BRUTE, hit_zone, DAMAGE_FLAG_SHARP, used_weapon = "organic punctures") - var/armor = 100 * G.affecting.get_blocked_ratio(hit_zone, DAMAGE_BRUTE, damage = hit_damage) - G.affecting.apply_effect(attack_damage, EFFECT_PAIN, armor) - G.affecting.visible_message("[G.assailant]'s spikes dig in painfully!") - else - G.affecting.apply_damage(attack_damage, DAMAGE_BRUTE, hit_zone, used_weapon = "crushing") - playsound(get_turf(G.assailant), 'sound/weapons/bite.ogg', 25, 1, -1) - - admin_attack_log(G.assailant, G.affecting, "Crushed their victim.", "Was crushed.", "crushed") - -// This causes the assailant to chew on the affecting mob. -/datum/grab/nab/proc/masticate(var/obj/item/grab/G, var/attack_damage) - var/hit_zone = G.assailant.zone_sel.selecting - var/obj/item/organ/external/damaging = G.affecting.get_organ(hit_zone) - - G.affecting.apply_damage(attack_damage, DAMAGE_BRUTE, hit_zone, DAMAGE_FLAG_SHARP|DAMAGE_FLAG_EDGE, used_weapon = "mandibles") - G.affecting.visible_message("[G.assailant] chews on [G.affecting]'s [damaging.name]!") - playsound(get_turf(G.assailant), 'sound/weapons/bite.ogg', 25, 1, -1) - - admin_attack_log(G.assailant, G.affecting, "Chews their victim.", "Was chewed.", "chewed") diff --git a/code/modules/mob/grab/nab/nab_aggressive.dm b/code/modules/mob/grab/nab/nab_aggressive.dm deleted file mode 100644 index e088c18d11b37..0000000000000 --- a/code/modules/mob/grab/nab/nab_aggressive.dm +++ /dev/null @@ -1,19 +0,0 @@ -/datum/grab/nab/aggressive - state_name = NAB_AGGRESSIVE - - upgrab_name = NAB_KILL - downgrab_name = NAB_PASSIVE - - shift = -10 - - icon_state = "kill" - - break_chance_table = list(3, 18, 45, 100) - -/datum/grab/nab/aggressive/upgrade_effect(var/obj/item/grab/G) - process_effect(G) - -/datum/grab/nab/aggressive/process_effect(var/obj/item/grab/G) - var/mob/living/carbon/human/affecting = G.affecting - - affecting.Stun(3) \ No newline at end of file diff --git a/code/modules/mob/grab/nab/nab_kill.dm b/code/modules/mob/grab/nab/nab_kill.dm deleted file mode 100644 index f1460ef580685..0000000000000 --- a/code/modules/mob/grab/nab/nab_kill.dm +++ /dev/null @@ -1,30 +0,0 @@ -/datum/grab/nab/kill - state_name = NAB_KILL - - downgrab_name = NAB_AGGRESSIVE - - shift = -10 - - icon_state = "kill1" - - downgrade_on_action = 1 - downgrade_on_move = 1 - - breakability = 0 - - break_chance_table = list(3, 10, 20, 100) - -/datum/grab/nab/kill/upgrade_effect(var/obj/item/grab/G) - process_effect(G) - -/datum/grab/nab/kill/process_effect(var/obj/item/grab/G) - var/mob/living/carbon/human/assailant = G.assailant - var/mob/living/carbon/human/affecting = G.affecting - - affecting.Stun(3) - - switch(assailant.a_intent) - if(I_GRAB) - on_hit_grab(G) - if(I_HURT) - on_hit_harm(G) \ No newline at end of file diff --git a/code/modules/mob/grab/nab/nab_passive.dm b/code/modules/mob/grab/nab/nab_passive.dm deleted file mode 100644 index f030a76360bd6..0000000000000 --- a/code/modules/mob/grab/nab/nab_passive.dm +++ /dev/null @@ -1,15 +0,0 @@ -/datum/grab/nab/passive - state_name = NAB_PASSIVE - - upgrab_name = NAB_AGGRESSIVE - - shift = -10 - - reverse_facing = 0 - can_absorb = 0 - - grab_slowdown = 0 - - icon_state = "reinforce1" - - break_chance_table = list(50, 80, 100) \ No newline at end of file diff --git a/code/modules/mob/grab/normal/grab_normal.dm b/code/modules/mob/grab/normal/grab_normal.dm deleted file mode 100644 index c9f6b787bd72f..0000000000000 --- a/code/modules/mob/grab/normal/grab_normal.dm +++ /dev/null @@ -1,319 +0,0 @@ -/obj/item/grab/normal - type_name = GRAB_NORMAL - start_grab_name = NORM_PASSIVE - -/obj/item/grab/normal/init() - if(!(. = ..())) - return - var/obj/O = get_targeted_organ() - if(affecting != assailant) - visible_message("[assailant] has grabbed [affecting]'s [O.name]!") - else - var/datum/gender/T = gender_datums[assailant.get_gender()] - visible_message("[assailant] has grabbed [T.his] [O.name]!") - - if(!(affecting.a_intent == I_HELP)) - upgrade(TRUE) - -/datum/grab/normal - type_name = GRAB_NORMAL - - var/drop_headbutt = 1 - - icon = 'icons/mob/screen1.dmi' - - help_action = "inspect" - disarm_action = "pin" - grab_action = "jointlock" - harm_action = "dislocate" - -/datum/grab/normal/on_hit_help(var/obj/item/grab/normal/G) - var/obj/item/organ/external/O = G.get_targeted_organ() - if(O) - return O.inspect(G.assailant) - -/datum/grab/normal/on_hit_disarm(var/obj/item/grab/G) - var/mob/living/carbon/human/affecting = G.affecting - var/mob/living/carbon/human/assailant = G.assailant - - if(!G.attacking && !affecting.lying) - - affecting.visible_message("[assailant] is trying to pin [affecting] to the ground!") - G.attacking = 1 - - if(do_after(assailant, action_cooldown - 1, affecting, DO_DEFAULT | DO_USER_UNIQUE_ACT | DO_PUBLIC_PROGRESS)) - G.attacking = 0 - G.action_used() - affecting.Weaken(2) - affecting.visible_message("[assailant] pins [affecting] to the ground!") - - return TRUE - else - affecting.visible_message("[assailant] fails to pin [affecting] to the ground.") - G.attacking = 0 - return 0 - else - return 0 - - -/datum/grab/normal/on_hit_grab(var/obj/item/grab/G) - var/obj/item/organ/external/O = G.get_targeted_organ() - var/mob/living/carbon/human/assailant = G.assailant - var/mob/living/carbon/human/affecting = G.affecting - - if(!assailant.skill_check(SKILL_COMBAT, SKILL_ADEPT)) - return - - if(!O) - to_chat(assailant, "[affecting] is missing that body part!") - return 0 - - assailant.visible_message("[assailant] begins to [pick("bend", "twist")] [affecting]'s [O.name] into a jointlock!") - G.attacking = 1 - - if(do_after(assailant, action_cooldown - 1, affecting, DO_DEFAULT | DO_USER_UNIQUE_ACT | DO_PUBLIC_PROGRESS)) - if (!G.has_hold_on_organ(O)) - to_chat(assailant, SPAN_WARNING("You must keep a hold on your target to jointlock!")) - return - - - G.attacking = 0 - G.action_used() - O.jointlock(assailant) - assailant.visible_message("[affecting]'s [O.name] is twisted!") - playsound(assailant.loc, 'sound/weapons/thudswoosh.ogg', 50, 1, -1) - return TRUE - - else - - affecting.visible_message("[assailant] fails to jointlock [affecting]'s [O.name].") - G.attacking = 0 - return 0 - - -/datum/grab/normal/on_hit_harm(var/obj/item/grab/G) - var/obj/item/organ/external/O = G.get_targeted_organ() - var/mob/living/carbon/human/assailant = G.assailant - var/mob/living/carbon/human/affecting = G.affecting - - if(!assailant.skill_check(SKILL_COMBAT, SKILL_ADEPT)) - return - - if(!O) - to_chat(assailant, "[affecting] is missing that body part!") - return 0 - - if(!O.dislocated) - - assailant.visible_message("[assailant] begins to dislocate [affecting]'s [O.joint]!") - G.attacking = 1 - - if(do_after(assailant, action_cooldown - 1, affecting, DO_DEFAULT | DO_USER_UNIQUE_ACT | DO_PUBLIC_PROGRESS)) - - if (!G.has_hold_on_organ(O)) - to_chat(assailant, SPAN_WARNING("You must keep a hold on your target to dislocate!")) - return - - G.attacking = 0 - G.action_used() - O.dislocate(1) - assailant.visible_message("[affecting]'s [O.joint] [pick("gives way","caves in","crumbles","collapses")]!") - playsound(assailant.loc, 'sound/weapons/thudswoosh.ogg', 50, 1, -1) - return TRUE - - else - - affecting.visible_message("[assailant] fails to dislocate [affecting]'s [O.joint].") - G.attacking = 0 - return 0 - - else if (O.dislocated > 0) - to_chat(assailant, "[affecting]'s [O.joint] is already dislocated!") - return 0 - else - to_chat(assailant, "You can't dislocate [affecting]'s [O.joint]!") - return 0 - -/datum/grab/normal/resolve_openhand_attack(var/obj/item/grab/G) - if(G.assailant.a_intent != I_HELP) - if(G.assailant.zone_sel.selecting == BP_HEAD) - if(headbutt(G)) - if(drop_headbutt) - let_go() - return TRUE - else if(G.assailant.zone_sel.selecting == BP_EYES) - if(attack_eye(G)) - return TRUE - return 0 - -/datum/grab/normal/proc/attack_eye(var/obj/item/grab/G) - var/mob/living/carbon/human/attacker = G.assailant - var/mob/living/carbon/human/target = G.affecting - - var/datum/unarmed_attack/attack = attacker.get_unarmed_attack(target, BP_EYES) - - if(!attack) - return - for(var/obj/item/protection in list(target.head, target.wear_mask, target.glasses)) - if(protection && (protection.body_parts_covered & EYES)) - to_chat(attacker, "You're going to need to remove the eye covering first.") - return - if(!target.has_eyes()) - to_chat(attacker, "You cannot locate any eyes on [target]!") - return - - admin_attack_log(attacker, target, "Grab attacked the victim's eyes.", "Had their eyes grab attacked.", "attacked the eyes, using a grab action, of") - - attack.handle_eye_attack(attacker, target) - return TRUE - -/datum/grab/normal/proc/headbutt(var/obj/item/grab/G) - var/mob/living/carbon/human/attacker = G.assailant - var/mob/living/carbon/human/target = G.affecting - - if(!attacker.skill_check(SKILL_COMBAT, SKILL_BASIC)) - return - - if(target.lying) - return - - var/damage = 20 - var/obj/item/clothing/hat = attacker.head - var/damage_flags = 0 - if(istype(hat)) - damage += hat.force * 3 - damage_flags = hat.damage_flags() - - if(damage_flags & DAMAGE_FLAG_SHARP) - attacker.visible_message("[attacker] gores [target][istype(hat)? " with \the [hat]" : ""]!") - else - attacker.visible_message("[attacker] thrusts \his head into [target]'s skull!") - - var/armor = target.get_blocked_ratio(BP_HEAD, DAMAGE_BRUTE, damage = 10) - target.apply_damage(damage, DAMAGE_BRUTE, BP_HEAD, damage_flags) - attacker.apply_damage(10, DAMAGE_BRUTE, BP_HEAD) - - if(armor < 0.5 && target.headcheck(BP_HEAD) && prob(damage)) - target.apply_effect(20, EFFECT_PARALYZE) - target.visible_message("[target] [target.species.get_knockout_message(target)]") - - playsound(attacker.loc, "swing_hit", 25, 1, -1) - - admin_attack_log(attacker, target, "Headbutted their victim.", "Was headbutted.", "headbutted") - return TRUE - -// Handles special targeting like eyes and mouth being covered. -/datum/grab/normal/special_target_effect(var/obj/item/grab/G) - if(G.special_target_functional) - switch(G.target_zone) - if(BP_MOUTH) - if(G.affecting.silent < 2) - G.affecting.silent = 2 - if(BP_EYES) - if(G.affecting.eye_blind < 2) - G.affecting.eye_blind = 2 - -// Handles when they change targeted areas and something is supposed to happen. -/datum/grab/normal/special_target_change(var/obj/item/grab/G, old_zone, new_zone) - if(old_zone != BP_HEAD && old_zone != BP_CHEST) - return - switch(new_zone) - if(BP_MOUTH) - G.assailant.visible_message("\The [G.assailant] covers [G.affecting]'s mouth!") - if(BP_EYES) - G.assailant.visible_message("\The [G.assailant] covers [G.affecting]'s eyes!") - - -/datum/grab/normal/check_special_target(var/obj/item/grab/G) - switch(G.target_zone) - if(BP_MOUTH) - if(!G.affecting.check_has_mouth()) - to_chat(G.assailant, "You cannot locate a mouth on [G.affecting]!") - return 0 - if(BP_EYES) - if(!G.affecting.has_eyes()) - to_chat(G.assailant, "You cannot locate any eyes on [G.affecting]!") - return 0 - return TRUE - -/datum/grab/normal/resolve_item_attack(var/obj/item/grab/G, var/mob/living/carbon/human/user, var/obj/item/I) - switch(G.assailant.zone_sel.selecting) - if(BP_HEAD, BP_MOUTH) - return attack_throat(G, I, user) - else - return attack_tendons(G, I, user, G.assailant.zone_sel.selecting) - -/datum/grab/normal/proc/attack_throat(var/obj/item/grab/G, var/obj/item/W, var/mob/living/carbon/human/user) - var/mob/living/carbon/human/affecting = G.affecting - - if(user.a_intent != I_HURT) - return 0 // Not trying to hurt them. - - if (!W.edge || !W.force || W.damtype != DAMAGE_BRUTE) - return 0 //unsuitable weapon - user.visible_message("\The [user] begins to slit [affecting]'s throat with \the [W]!") - - user.next_move = world.time + 20 //also should prevent user from triggering this repeatedly - if(!do_after(user, 2 SECONDS * user.skill_delay_mult(SKILL_COMBAT), affecting, DO_DEFAULT | DO_USER_UNIQUE_ACT | DO_PUBLIC_PROGRESS)) - return 0 - if(!(G && G.affecting == affecting)) //check that we still have a grab - return 0 - - var/damage_mod = 1 - var/damage_flags = W.damage_flags() - //presumably, if they are wearing a helmet that stops pressure effects, then it probably covers the throat as well - var/obj/item/clothing/head/helmet = affecting.get_equipped_item(slot_head) - if(istype(helmet) && (helmet.body_parts_covered & HEAD) && (helmet.item_flags & ITEM_FLAG_AIRTIGHT) && !isnull(helmet.max_pressure_protection)) - var/datum/extension/armor/armor_datum = get_extension(helmet, /datum/extension/armor) - if(armor_datum) - damage_mod -= armor_datum.get_blocked(DAMAGE_BRUTE, damage_flags, W.armor_penetration, W.force*1.5) - - var/total_damage = 0 - for(var/i in 1 to 3) - var/damage = min(W.force*2.5, 30)*damage_mod - affecting.apply_damage(damage, W.damtype, BP_HEAD, damage_flags, armor_pen = 100, used_weapon=W) - total_damage += damage - - - if(total_damage) - user.visible_message("\The [user] slit [affecting]'s throat open with \the [W]!") - - if(W.hitsound) - playsound(affecting.loc, W.hitsound, 50, 1, -1) - - G.last_action = world.time - - admin_attack_log(user, affecting, "Knifed their victim", "Was knifed", "knifed") - return TRUE - -/datum/grab/normal/proc/attack_tendons(var/obj/item/grab/G, var/obj/item/W, var/mob/living/carbon/human/user, var/target_zone) - var/mob/living/carbon/human/affecting = G.affecting - - if(!user.skill_check(SKILL_COMBAT, SKILL_ADEPT)) - return - - if(user.a_intent != I_HURT) - return 0 // Not trying to hurt them. - - if (!W.edge || !W.force || W.damtype != DAMAGE_BRUTE) - return 0 //unsuitable weapon - - var/obj/item/organ/external/O = affecting.get_organ(target_zone) - if(!O || O.is_stump() || !(O.limb_flags & ORGAN_FLAG_HAS_TENDON) || (O.status & ORGAN_TENDON_CUT)) - return FALSE - - user.visible_message(SPAN_DANGER("\The [user] begins to cut \the [affecting]'s [O.tendon_name] with \the [W]!")) - user.next_move = world.time + 20 - - if(!do_after(user, 2 SECONDS, affecting, DO_DEFAULT | DO_USER_UNIQUE_ACT | DO_PUBLIC_PROGRESS)) - return 0 - if(!(G && G.affecting == affecting)) //check that we still have a grab - return 0 - if(!O || O.is_stump() || !O.sever_tendon()) - return 0 - - user.visible_message(SPAN_DANGER("\The [user] cut \the [affecting]'s [O.tendon_name] with \the [W]!")) - if(W.hitsound) playsound(affecting.loc, W.hitsound, 50, 1, -1) - G.last_action = world.time - admin_attack_log(user, affecting, "hamstrung their victim", "was hamstrung", "hamstrung") - return TRUE diff --git a/code/modules/mob/grab/normal/norm_aggressive.dm b/code/modules/mob/grab/normal/norm_aggressive.dm deleted file mode 100644 index 6b90b22452a73..0000000000000 --- a/code/modules/mob/grab/normal/norm_aggressive.dm +++ /dev/null @@ -1,45 +0,0 @@ -/datum/grab/normal/aggressive - state_name = NORM_AGGRESSIVE - - upgrab_name = NORM_NECK - downgrab_name = NORM_PASSIVE - - shift = 12 - - - stop_move = 1 - reverse_facing = 0 - can_absorb = 0 - shield_assailant = 0 - point_blank_mult = 1.5 - damage_stage = 1 - same_tile = 0 - can_throw = 1 - force_danger = 1 - breakability = 4 - - icon_state = "reinforce1" - - break_chance_table = list(25, 30, 35, 40, 45, 50, 55) - -/datum/grab/normal/aggressive/process_effect(var/obj/item/grab/G) - var/mob/living/carbon/human/affecting = G.affecting - - if(G.target_zone in list(BP_L_HAND, BP_R_HAND)) - affecting.drop_l_hand() - affecting.drop_r_hand() - - // Keeps those who are on the ground down - if(affecting.lying) - affecting.Weaken(4) - -/datum/grab/normal/aggressive/can_upgrade(var/obj/item/grab/G) - if(!(G.target_zone in list(BP_CHEST, BP_HEAD))) - to_chat(G.assailant, "You need to be grabbing their torso or head for this!") - return FALSE - var/obj/item/clothing/C = G.affecting.head - if(istype(C)) //hardsuit helmets etc - if((C.max_pressure_protection) && C.armor["melee"] > 20) - to_chat(G.assailant, "\The [C] is in the way!") - return FALSE - return TRUE diff --git a/code/modules/mob/grab/normal/norm_kill.dm b/code/modules/mob/grab/normal/norm_kill.dm deleted file mode 100644 index bafb35403a541..0000000000000 --- a/code/modules/mob/grab/normal/norm_kill.dm +++ /dev/null @@ -1,38 +0,0 @@ -/datum/grab/normal/kill - state_name = NORM_KILL - - downgrab_name = NORM_NECK - - shift = 0 - - stop_move = 1 - reverse_facing = 1 - can_absorb = 1 - shield_assailant = 0 - point_blank_mult = 2 - damage_stage = 3 - same_tile = 1 - force_danger = 1 - restrains = 1 - - downgrade_on_action = 1 - downgrade_on_move = 1 - - icon_state = "kill1" - - break_chance_table = list(3, 4, 5, 6, 7) - -/datum/grab/normal/kill/process_effect(var/obj/item/grab/G) - var/mob/living/carbon/human/affecting = G.affecting - - affecting.drop_l_hand() - affecting.drop_r_hand() - - if(affecting.lying) - affecting.Weaken(4) - - affecting.adjustOxyLoss(1) - - affecting.apply_effect(EFFECT_STUTTER, 5) //It will hamper your voice, being choked and all. - affecting.Weaken(5) //Should keep you down unless you get help. - affecting.losebreath = max(affecting.losebreath + 2, 3) diff --git a/code/modules/mob/grab/normal/norm_neck.dm b/code/modules/mob/grab/normal/norm_neck.dm deleted file mode 100644 index 998bbc6ae1d9d..0000000000000 --- a/code/modules/mob/grab/normal/norm_neck.dm +++ /dev/null @@ -1,36 +0,0 @@ -/datum/grab/normal/neck - state_name = NORM_NECK - - upgrab_name = NORM_KILL - downgrab_name = NORM_AGGRESSIVE - - drop_headbutt = 0 - - shift = -10 - - - stop_move = 1 - reverse_facing = 1 - can_absorb = 1 - shield_assailant = 1 - point_blank_mult = 2 - damage_stage = 2 - same_tile = 1 - can_throw = 1 - force_danger = 1 - restrains = 1 - - icon_state = "kill" - - break_chance_table = list(3, 5, 7, 9) - -/datum/grab/normal/neck/process_effect(var/obj/item/grab/G) - var/mob/living/carbon/human/affecting = G.affecting - - affecting.drop_l_hand() - affecting.drop_r_hand() - - if(affecting.lying) - affecting.Weaken(4) - - affecting.adjustOxyLoss(1) diff --git a/code/modules/mob/grab/normal/norm_passive.dm b/code/modules/mob/grab/normal/norm_passive.dm deleted file mode 100644 index 98ffa54df3525..0000000000000 --- a/code/modules/mob/grab/normal/norm_passive.dm +++ /dev/null @@ -1,33 +0,0 @@ -/datum/grab/normal/passive - state_name = NORM_PASSIVE - fancy_desc = "holding" - - upgrab_name = NORM_STRUGGLE - - shift = 8 - - stop_move = 0 - reverse_facing = 0 - can_absorb = 0 - shield_assailant = 0 - point_blank_mult = 1.1 - same_tile = 0 - - icon_state = "reinforce" - - break_chance_table = list(15, 60, 100) - -/datum/grab/normal/passive/on_hit_disarm(var/obj/item/grab/normal/G) - to_chat(G.assailant, "Your grip isn't strong enough to pin.") - return 0 - -/datum/grab/normal/passive/on_hit_grab(var/obj/item/grab/normal/G) - to_chat(G.assailant, "Your grip isn't strong enough to jointlock.") - return 0 - -/datum/grab/normal/passive/on_hit_harm(var/obj/item/grab/normal/G) - to_chat(G.assailant, "Your grip isn't strong enough to dislocate.") - return 0 - -/datum/grab/normal/passive/resolve_openhand_attack(var/obj/item/grab/G) - return 0 diff --git a/code/modules/mob/grab/normal/norm_struggle.dm b/code/modules/mob/grab/normal/norm_struggle.dm deleted file mode 100644 index f173a01b71403..0000000000000 --- a/code/modules/mob/grab/normal/norm_struggle.dm +++ /dev/null @@ -1,79 +0,0 @@ -/datum/grab/normal/struggle - state_name = NORM_STRUGGLE - fancy_desc = "holding" - - upgrab_name = NORM_AGGRESSIVE - downgrab_name = NORM_PASSIVE - - shift = 8 - - stop_move = 1 - reverse_facing = 0 - can_absorb = 0 - point_blank_mult = 1 - same_tile = 0 - breakability = 4 - - grab_slowdown = 10 - upgrade_cooldown = 20 - - can_downgrade_on_resist = 0 - - icon_state = "reinforce" - - break_chance_table = list(35, 40, 45, 50, 55, 60, 65) - - -/datum/grab/normal/struggle/process_effect(var/obj/item/grab/G) - var/mob/living/carbon/human/affecting = G.affecting - var/mob/living/carbon/human/assailant = G.assailant - - if(affecting.incapacitated(INCAPACITATION_UNRESISTING) || affecting.a_intent == I_HELP) - affecting.visible_message("[affecting] isn't prepared to fight back as [assailant] tightens \his grip!") - G.done_struggle = TRUE - G.upgrade(TRUE) - -/datum/grab/normal/struggle/enter_as_up(var/obj/item/grab/G) - var/mob/living/carbon/human/affecting = G.affecting - var/mob/living/carbon/human/assailant = G.assailant - - if(affecting == assailant) - G.done_struggle = TRUE - G.upgrade(TRUE) - return - - if(affecting.incapacitated(INCAPACITATION_UNRESISTING) || affecting.a_intent == I_HELP) - affecting.visible_message("[affecting] isn't prepared to fight back as [assailant] tightens \his grip!") - G.done_struggle = TRUE - G.upgrade(TRUE) - else - affecting.visible_message("[affecting] struggles against [assailant]!") - G.done_struggle = FALSE - addtimer(CALLBACK(G, .proc/handle_resist), 1 SECOND) - resolve_struggle(G) - -/datum/grab/normal/struggle/proc/resolve_struggle(var/obj/item/grab/G) - set waitfor = FALSE - if(do_after(G.assailant, upgrade_cooldown, G, DO_DEFAULT | DO_USER_CAN_MOVE)) - G.done_struggle = TRUE - G.upgrade(TRUE) - else - G.downgrade() - -/datum/grab/normal/struggle/can_upgrade(var/obj/item/grab/G) - return G.done_struggle - -/datum/grab/normal/struggle/on_hit_disarm(var/obj/item/grab/normal/G) - to_chat(G.assailant, "Your grip isn't strong enough to pin.") - return 0 - -/datum/grab/normal/struggle/on_hit_grab(var/obj/item/grab/normal/G) - to_chat(G.assailant, "Your grip isn't strong enough to jointlock.") - return 0 - -/datum/grab/normal/struggle/on_hit_harm(var/obj/item/grab/normal/G) - to_chat(G.assailant, "Your grip isn't strong enough to dislocate.") - return 0 - -/datum/grab/normal/struggle/resolve_openhand_attack(var/obj/item/grab/G) - return 0 diff --git a/code/modules/mob/hear_say.dm b/code/modules/mob/hear_say.dm deleted file mode 100644 index d428b36a4c667..0000000000000 --- a/code/modules/mob/hear_say.dm +++ /dev/null @@ -1,322 +0,0 @@ -/mob/proc/hear_say(message, verb = "says", datum/language/language, alt_name, italics, mob/speaker, sound/speech_sound, sound_vol) - if (!client) - return - - var/is_ghost = isghost(src) - var/in_view = (speaker in view(src)) - - if (is_ghost) - if (!in_view && !speaker?.client) - return - - var/pressure = 0 - var/turf/turf = get_turf(src) - - if (turf) - var/datum/gas_mixture/air = turf.return_air() - if (air) - pressure = air.return_pressure() - - var/distance = get_dist(speaker, turf) - - if (pressure < ONE_ATMOSPHERE * 0.5) - if (pressure < SOUND_MINIMUM_PRESSURE) - if (distance > 1 && !is_ghost) - return - speech_sound = null - else - sound_vol *= 0.5 - italics = TRUE - - var/non_verbal = language?.flags & (NONVERBAL | SIGNLANG) - var/do_stars - - var/display_name = "Unknown" - if (ishuman(speaker)) - var/mob/living/carbon/human/human = speaker - display_name = human.GetVoice() - else if (speaker) - display_name = speaker.name - - if (non_verbal) - if (!speaker || (sdisabilities & BLINDED) || blinded || !in_view) - do_stars = TRUE - speech_sound = null - else if (is_deaf() || get_sound_volume_multiplier() < 0.2) - if (!(language?.flags & INNATE)) - if (speaker == src) - to_chat(src, SPAN_WARNING("You cannot hear yourself speak!")) - else if (!is_blind()) - to_chat(src, {"[display_name][alt_name] says something you cannot hear."}) - return - speech_sound = null - - if (speech_sound && in_view) - var/turf/sound_turf = speaker ? get_turf(speaker) : turf - if (sound_turf) - playsound_local(sound_turf, speech_sound, sound_vol, TRUE) - - var/display_message = message - - if (!(language?.flags & INNATE) && !say_understands(speaker, language)) - if (!istype(speaker, /mob/living/simple_animal)) - if (language) - display_message = language.scramble(display_message, languages) - else - do_stars = TRUE - - if (do_stars) - display_message = stars(display_message) - - if ((sleeping || stat == UNCONSCIOUS) && !non_verbal) - hear_sleep(display_message) - return - - if (italics) - display_message = "[display_message]" - - var/display_controls - if (is_ghost) - if (display_name != speaker.real_name && speaker.real_name) - display_name = "[speaker.real_name] ([display_name])" - if (in_view && get_preference_value(/datum/client_preference/ghost_ears) == GLOB.PREF_ALL_SPEECH) - display_message = "[display_message]" - var/control_preference = get_preference_value(/datum/client_preference/ghost_follow_link_length) - switch (control_preference) - if (GLOB.PREF_SHORT) - display_controls = "([ghost_follow_link(speaker, src)])" - if (GLOB.PREF_LONG) - display_controls = "([ghost_follow_link(speaker, src, short_links = FALSE)])" - - var/display_verb = verb - if (!language) - display_message = {"[display_verb], "[display_message]""} - else - var/hint_preference = get_preference_value(/datum/client_preference/language_display) - if (is_ghost) - if (hint_preference != GLOB.PREF_OFF) - if (get_preference_value(/datum/client_preference/ghost_language_hide) == GLOB.PREF_YES) - hint_preference = GLOB.PREF_OFF - else if (say_understands(speaker, language) && isliving(src)) - var/mob/living/living = src - if (living.default_language == language) - hint_preference = GLOB.PREF_OFF - switch (hint_preference) - if (GLOB.PREF_FULL) - display_verb = "[verb] in [language.name]" - if (GLOB.PREF_SHORTHAND) - display_verb = "[verb] ([language.shorthand])" - display_message = language.format_message(display_message, display_verb) - - on_hear_say({"[display_controls][display_name][alt_name] [display_message]"}) - - -/mob/proc/on_hear_say(var/message) - to_chat(src, message) - -/mob/living/silicon/on_hear_say(var/message) - var/time = say_timestamp() - to_chat(src, "[time] [message]") - -/mob/proc/hear_radio(var/message, var/verb="says", var/datum/language/language=null, var/part_a, var/part_b, var/part_c, var/mob/speaker = null, var/hard_to_hear = 0, var/vname ="") - - if(!client) - return - - if(sleeping || stat==1) //If unconscious or sleeping - hear_sleep(message) - return - - var/track = null - - //non-verbal languages are garbled if you can't see the speaker. Yes, this includes if they are inside a closet. - if (language && (language.flags & NONVERBAL)) - if (!speaker || (src.sdisabilities & BLINDED || src.blinded) || !(speaker in view(src))) - message = stars(message) - - if(!(language && (language.flags & INNATE))) // skip understanding checks for INNATE languages - if(!say_understands(speaker,language)) - if(istype(speaker,/mob/living/simple_animal)) - var/mob/living/M = speaker - var/datum/say_list/S = M.say_list - if(S && S.speak && S.speak.len) - message = pick(S.speak) - else - return - else - if(language) - message = language.scramble(message, languages) - else - message = stars(message) - - if(hard_to_hear) - if(hard_to_hear <= 5) - message = stars(message) - else // Used for compression - message = RadioChat(null, message, 80, 1+(hard_to_hear/10)) - - var/speaker_name = vname ? vname : speaker.name - - if(istype(speaker, /mob/living/carbon/human)) - var/mob/living/carbon/human/H = speaker - if(H.voice) - speaker_name = H.voice - - if(hard_to_hear) - speaker_name = "unknown" - - var/changed_voice - - if(istype(src, /mob/living/silicon/ai) && !hard_to_hear) - var/jobname // the mob's "job" - var/mob/living/carbon/human/impersonating //The crew member being impersonated, if any. - - if (ishuman(speaker)) - var/mob/living/carbon/human/H = speaker - - if(H.wear_mask && istype(H.wear_mask,/obj/item/clothing/mask/chameleon/voice)) - changed_voice = 1 - var/list/impersonated = new() - var/mob/living/carbon/human/I = impersonated[speaker_name] - - if(!I) - for(var/mob/living/carbon/human/M in SSmobs.mob_list) - if(M.real_name == speaker_name) - I = M - impersonated[speaker_name] = I - break - - // If I's display name is currently different from the voice name and using an agent ID then don't impersonate - // as this would allow the AI to track I and realize the mismatch. - if(I && !(I.name != speaker_name && I.wear_id && istype(I.wear_id,/obj/item/card/id/syndicate))) - impersonating = I - jobname = impersonating.get_assignment() - else - jobname = "Unknown" - else - jobname = H.get_assignment() - - else if (iscarbon(speaker)) // Nonhuman carbon mob - jobname = "No id" - else if (isAI(speaker)) - jobname = "AI" - else if (isrobot(speaker)) - jobname = "Robot" - else if (istype(speaker, /mob/living/silicon/pai)) - jobname = "Personal AI" - else - jobname = "Unknown" - - if(changed_voice) - if(impersonating) - track = "[speaker_name] ([jobname])" - else - track = "[speaker_name] ([jobname])" - else - track = "[speaker_name] ([jobname])" - - if(isghost(src)) - if(speaker) //speaker is null when the arrivals annoucement plays - if(speaker_name != speaker.real_name && !isAI(speaker)) //Announce computer and various stuff that broadcasts doesn't use it's real name but AI's can't pretend to be other mobs. - speaker_name = "[speaker.real_name] ([speaker_name])" - track = "([ghost_follow_link(speaker, src)]) [speaker_name]" - else - track = "[speaker_name]" - - var/formatted - if (language) - var/nverb = verb - if (say_understands(speaker, language)) - var/skip = FALSE - if (isliving(src)) - var/mob/living/L = src - skip = L.default_language == language - if (!skip) - switch(src.get_preference_value(/datum/client_preference/language_display)) - if (GLOB.PREF_FULL) - nverb = "[verb] in [language.name]" - if(GLOB.PREF_SHORTHAND) - nverb = "[verb] ([language.shorthand])" - if(GLOB.PREF_OFF) - nverb = verb - formatted = language.format_message_radio(message, nverb) - else - formatted = "[verb], \"[message]\"" - if(sdisabilities & DEAFENED || ear_deaf) - var/mob/living/carbon/human/H = src - if(istype(H) && H.has_headset_in_ears() && prob(20)) - to_chat(src, SPAN_WARNING("You feel your headset vibrate but can hear nothing from it!")) - else - on_hear_radio(part_a, speaker_name, track, part_b, part_c, formatted) - -/proc/say_timestamp() - return "\[[stationtime2text()]\]" - -/mob/proc/on_hear_radio(part_a, speaker_name, track, part_b, part_c, formatted) - to_chat(src, "[part_a][speaker_name][part_b][formatted][part_c]") - -/mob/observer/ghost/on_hear_radio(part_a, speaker_name, track, part_b, part_c, formatted) - to_chat(src, "[part_a][track][part_b][formatted][part_c]") - -/mob/living/silicon/on_hear_radio(part_a, speaker_name, track, part_b, part_c, formatted) - var/time = say_timestamp() - to_chat(src, "[time][part_a][speaker_name][part_b][formatted][part_c]") - -/mob/living/silicon/ai/on_hear_radio(part_a, speaker_name, track, part_b, part_c, formatted) - var/time = say_timestamp() - to_chat(src, "[time][part_a][track][part_b][formatted][part_c]") - -/mob/proc/hear_signlang(var/message, var/verb = "gestures", var/datum/language/language, var/mob/speaker = null) - if(!client) - return - - if(sleeping || stat == UNCONSCIOUS) - return 0 - - if(say_understands(speaker, language)) - var/nverb = null - switch(src.get_preference_value(/datum/client_preference/language_display)) - if(GLOB.PREF_FULL) // Full language name - nverb = "[verb] in [language.name]" - if(GLOB.PREF_SHORTHAND) //Shorthand codes - nverb = "[verb] ([language.shorthand])" - if(GLOB.PREF_OFF)//Regular output - nverb = verb - message = "[speaker] [nverb], \"[message]\"" - else - var/adverb - var/length = length(message) * pick(0.8, 0.9, 1.0, 1.1, 1.2) //Inserts a little fuzziness. - switch(length) - if(0 to 12) adverb = " briefly" - if(12 to 30) adverb = " a short message" - if(30 to 48) adverb = " a message" - if(48 to 90) adverb = " a lengthy message" - else adverb = " a very lengthy message" - message = "[speaker] [verb][adverb]." - - if(src.status_flags & PASSEMOTES) - for(var/obj/item/holder/H in src.contents) - H.show_message(message) - for(var/mob/living/M in src.contents) - M.show_message(message) - src.show_message(message) - -/mob/proc/hear_sleep(var/message) - if (is_deaf()) - return - var/heard = "" - if(prob(15)) - var/list/punctuation = list(",", "!", ".", ";", "?") - var/list/messages = splittext(message, " ") - var/R = rand(1, messages.len) - var/heardword = messages[R] - if(copytext_char(heardword,1, 1) in punctuation) - heardword = copytext_char(heardword,2) - if(copytext_char(heardword,-1) in punctuation) - heardword = copytext_char(heardword,1,length(heardword)) - heard = "...You hear something about...[heardword]" - - else - heard = "...You almost hear someone talking..." - - to_chat(src, heard) diff --git a/code/modules/mob/holder.dm b/code/modules/mob/holder.dm deleted file mode 100644 index 16e68cf0c5b83..0000000000000 --- a/code/modules/mob/holder.dm +++ /dev/null @@ -1,187 +0,0 @@ -var/global/list/holder_mob_icon_cache = list() - -//Helper object for picking dionaea (and other creatures) up. -/obj/item/holder - name = "holder" - desc = "You shouldn't ever see this." - icon = 'icons/obj/objects.dmi' - slot_flags = SLOT_HEAD | SLOT_HOLSTER - - sprite_sheets = list( - SPECIES_VOX = 'icons/mob/species/vox/onmob_head_vox.dmi', - SPECIES_VOX_ARMALIS = 'icons/mob/species/vox/onmob_head_vox_armalis.dmi' - ) - - origin_tech = null - item_icons = list( - slot_l_hand_str = 'icons/mob/onmob/items/lefthand_holder.dmi', - slot_r_hand_str = 'icons/mob/onmob/items/righthand_holder.dmi', - ) - pixel_y = 8 - - var/last_holder - -/obj/item/holder/New() - ..() - START_PROCESSING(SSobj, src) - -/obj/item/holder/proc/destroy_all() - for(var/atom/movable/AM in src) - qdel(AM) - qdel(src) - -/obj/item/holder/Destroy() - for(var/atom/movable/AM in src) - AM.forceMove(get_turf(src)) - last_holder = null - STOP_PROCESSING(SSobj, src) - return ..() - -/obj/item/holder/Process() - update_state() - -/obj/item/holder/dropped() - ..() - spawn(1) - update_state() - -/obj/item/holder/proc/update_state() - if(last_holder != loc) - for(var/mob/M in contents) - unregister_all_movement(last_holder, M) - - if(istype(loc,/turf) || !(contents.len)) - for(var/mob/M in contents) - var/atom/movable/mob_container = M - mob_container.dropInto(loc) - M.reset_view() - qdel(src) - else if(last_holder != loc) - for(var/mob/M in contents) - register_all_movement(loc, M) - - last_holder = loc - -/obj/item/holder/onDropInto(var/atom/movable/AM) - if(ismob(loc)) // Bypass our holding mob and drop directly to its loc - return loc.loc - return ..() - -/obj/item/holder/GetIdCard() - for(var/mob/M in contents) - var/obj/item/I = M.GetIdCard() - if(I) - return I - return null - -/obj/item/holder/GetAccess() - var/obj/item/I = GetIdCard() - return I ? I.GetAccess() : ..() - -/obj/item/holder/attack_self() - for(var/mob/M in contents) - M.show_inv(usr) - -/obj/item/holder/attack(mob/target, mob/user) - // Devour on click on self with holder - if(target == user && istype(user,/mob/living/carbon)) - var/mob/living/carbon/M = user - - for(var/mob/victim in src.contents) - M.devour(victim) - - update_state() - - ..() - -/obj/item/holder/proc/sync(var/mob/living/M) - dir = 2 - overlays.Cut() - icon = M.icon - icon_state = M.icon_state - item_state = M.item_state - color = M.color - name = M.name - desc = M.desc - overlays |= M.overlays - var/mob/living/carbon/human/H = loc - last_holder = H - register_all_movement(H, M) - - update_held_icon() - -//Mob specific holders. -/obj/item/holder/drone - origin_tech = list(TECH_MAGNET = 3, TECH_ENGINEERING = 5) - -/obj/item/holder/mouse - w_class = ITEM_SIZE_TINY - -/obj/item/holder/small - w_class = ITEM_SIZE_SMALL - -/obj/item/holder/borer - origin_tech = list(TECH_BIO = 6) - -//need own subtype to work with recipes -/obj/item/holder/corgi - origin_tech = list(TECH_BIO = 4) - -/obj/item/holder/possum - origin_tech = list(TECH_BIO = 3) - -/obj/item/holder/possum/poppy - origin_tech = list(TECH_BIO = 3, TECH_ENGINEERING = 4) - item_state = "poppy" - -/obj/item/holder/attackby(obj/item/W as obj, mob/user as mob) - for(var/mob/M in src.contents) - M.attackby(W,user) - -//Mob procs and vars for scooping up -/mob/living/var/holder_type - -/mob/living/proc/get_scooped(var/mob/living/carbon/human/grabber, var/self_grab) - if(!holder_type || buckled || pinned.len) - return - - if(self_grab) - if(src.incapacitated()) return - else - if(grabber.incapacitated()) return - - var/obj/item/holder/H = new holder_type(get_turf(src)) - - if(self_grab) - if(!grabber.equip_to_slot_if_possible(H, slot_back, TRYEQUIP_REDRAW | TRYEQUIP_SILENT)) - to_chat(src, "You can't climb onto [grabber]!") - return - - to_chat(grabber, "\The [src] clambers onto you!") - to_chat(src, "You climb up onto \the [grabber]!") - else - if(!grabber.put_in_hands(H)) - to_chat(grabber, "Your hands are full!") - return - - to_chat(grabber, "You scoop up \the [src]!") - to_chat(src, "\The [grabber] scoops you up!") - - src.forceMove(H) - - grabber.status_flags |= PASSEMOTES - H.sync(src) - return H - -/mob/living/MouseDrop(var/mob/living/carbon/human/over_object) - if(istype(over_object) && Adjacent(over_object) && (usr == src || usr == over_object) && over_object.a_intent == I_GRAB) - if(scoop_check(over_object)) - get_scooped(over_object, (usr == src)) - return - return ..() - -/mob/living/proc/scoop_check(var/mob/living/scooper) - return 1 - -/mob/living/carbon/human/scoop_check(var/mob/living/scooper) - return (scooper.mob_size > src.mob_size && a_intent == I_HELP) diff --git a/code/modules/mob/inventory.dm b/code/modules/mob/inventory.dm deleted file mode 100644 index c6180fc4a7bd1..0000000000000 --- a/code/modules/mob/inventory.dm +++ /dev/null @@ -1,309 +0,0 @@ -//This proc is called whenever someone clicks an inventory ui slot. -/mob/proc/attack_ui(slot) - var/obj/item/in_hand = get_active_hand() - var/obj/item/in_slot = get_equipped_item(slot) - if (istype(in_slot)) - if (istype(in_hand)) - in_slot.attackby(in_hand, src) - else - in_slot.attack_hand(src) - else - equip_to_slot_if_possible(in_hand, slot) - - -/// UNSAFELY place I into this mob's inventory at slot if existentially possible. Generally, use the _if_possible version. -/mob/proc/equip_to_slot(obj/item/I, slot) - return - - -/// Attempt to place I into this mob's inventory at slot. See TRYEQUIP_* flags for behavior modifiers. -/mob/proc/equip_to_slot_if_possible(obj/item/I, slot, equip_flags = TRYEQUIP_REDRAW) - if (!slot) - return - if (!istype(I)) - return - if (!I.mob_can_equip(src, slot, equip_flags & TRYEQUIP_SILENT, equip_flags & TRYEQUIP_FORCE)) - if (!(equip_flags & TRYEQUIP_SILENT)) - to_chat(src, SPAN_WARNING("You are unable to equip \the [I].")) - if (equip_flags & TRYEQUIP_DESTROY) - qdel(I) - return - if (!canUnEquip(I)) - return - if (I.equip_delay > 0 && !(equip_flags & TRYEQUIP_INSTANT)) - I.equip_delay_before(src, slot, equip_flags) - var/do_flags = I.equip_delay_flags - if (equip_flags & TRYEQUIP_SILENT) - do_flags &= ~DO_FAIL_FEEDBACK - if (!do_after(src, I.equip_delay, I, do_flags)) - return - I.equip_delay_after(src, slot, equip_flags) - equip_to_slot(I, slot, equip_flags & TRYEQUIP_REDRAW) - return TRUE - - -// Common pattern during roundstart, events, etc -/mob/proc/equip_to_slot_or_del(obj/item/I, slot) - return equip_to_slot_if_possible(I, slot, TRYEQUIP_DESTROY | TRYEQUIP_SILENT | TRYEQUIP_INSTANT) - - -/mob/proc/put_in_any_hand_if_possible(obj/item/I, equip_flags = TRYEQUIP_REDRAW | TRYEQUIP_SILENT) - if (equip_to_slot_if_possible(I, slot_l_hand, equip_flags)) - return TRUE - if (equip_to_slot_if_possible(I, slot_r_hand, equip_flags)) - return TRUE - - -/mob/proc/equip_to_slot_or_store_or_drop(obj/item/I, slot) - if (equip_to_slot_if_possible(I, slot, TRYEQUIP_SILENT)) - return TRUE - if (equip_to_storage_or_drop(I)) - return TRUE - - -/// Place I into the first slot it fits in the order of slots_by_priority, returning the slot or falsy. -/mob/proc/equip_to_appropriate_slot(obj/item/I, skip_storage) - var/static/list/slots_by_priority = list( - slot_back, slot_wear_id, slot_w_uniform, slot_wear_suit, - slot_wear_mask, slot_head, slot_shoes, slot_gloves, slot_l_ear, - slot_r_ear, slot_glasses, slot_belt, slot_s_store, slot_tie, - slot_l_store, slot_r_store - ) - if (!istype(I)) - return - for (var/slot in slots_by_priority) - if (skip_storage && (slot == slot_s_store || slot == slot_l_store || slot == slot_r_store)) - continue - if (equip_to_slot_if_possible(I, slot, TRYEQUIP_REDRAW | TRYEQUIP_SILENT)) - return slot //slot is truthy; we can return it for info - - -//Checks if a given slot can be accessed at this time, either to equip or unequip I -/mob/proc/slot_is_accessible(var/slot, var/obj/item/I, mob/user=null) - return 1 - - -/mob/proc/equip_to_storage(obj/item/newitem) - // Try put it in their backpack - if(istype(src.back,/obj/item/storage)) - var/obj/item/storage/backpack = src.back - if(backpack.can_be_inserted(newitem, src, 1)) - newitem.forceMove(src.back) - return backpack - - // Try to place it in any item that can store stuff, on the mob. - for(var/obj/item/storage/S in src.contents) - if(S.can_be_inserted(newitem, src, 1)) - newitem.forceMove(S) - return S - -/mob/proc/equip_to_storage_or_drop(obj/item/newitem) - var/stored = equip_to_storage(newitem) - if(!stored && newitem) - newitem.dropInto(loc) - return stored - -//These procs handle putting s tuff in your hand. It's probably best to use these rather than setting l_hand = ...etc -//as they handle all relevant stuff like adding it to the player's screen and updating their overlays. - -//Returns the thing in our active hand -/mob/proc/get_active_hand() - RETURN_TYPE(/obj/item) - if(hand) return l_hand - else return r_hand - -//Returns the thing in our inactive hand -/mob/proc/get_inactive_hand() - if(hand) return r_hand - else return l_hand - -//Puts the item into your l_hand if possible and calls all necessary triggers/updates. returns 1 on success. -/mob/proc/put_in_l_hand(var/obj/item/W) - if(lying || !istype(W)) - return 0 - return 1 - -//Puts the item into your r_hand if possible and calls all necessary triggers/updates. returns 1 on success. -/mob/proc/put_in_r_hand(var/obj/item/W) - if(lying || !istype(W)) - return 0 - return 1 - -//Puts the item into our active hand if possible. returns 1 on success. -/mob/proc/put_in_active_hand(var/obj/item/W) - return 0 // Moved to human procs because only they need to use hands. - -//Puts the item into our inactive hand if possible. returns 1 on success. -/mob/proc/put_in_inactive_hand(var/obj/item/W) - return 0 // As above. - -//Puts the item our active hand if possible. Failing that it tries our inactive hand. Returns 1 on success. -//If both fail it drops it on the floor and returns 0. -//This is probably the main one you need to know :) -/mob/proc/put_in_hands(var/obj/item/W) - if(!W) - return 0 - drop_from_inventory(W) - return 0 - -// Removes an item from inventory and places it in the target atom. -// If canremove or other conditions need to be checked then use unEquip instead. -/mob/proc/drop_from_inventory(var/obj/item/W, var/atom/target = null) - if(W) - remove_from_mob(W, target) - if(!(W && W.loc)) return 1 // self destroying objects (tk, grabs) - update_icons() - return 1 - return 0 - -//Drops the item in our left hand -/mob/proc/drop_l_hand(atom/Target, force) - if(force) - return drop_from_inventory(l_hand, Target) - return unEquip(l_hand, Target) - -//Drops the item in our right hand -/mob/proc/drop_r_hand(atom/Target, force) - if(force) - return drop_from_inventory(r_hand, Target) - return unEquip(r_hand, Target) - -/** - * Drops the item in our active hand. TODO: rename this to drop_active_hand or something - * Make sure you are ABSOLUTELY CERTAIN you need to drop this and ignore unequip checks (For example, grabs can be "dropped" but only willingly) - * Else use unequip_item - */ -/mob/proc/drop_item(atom/Target) - if(hand) return drop_l_hand(Target, TRUE) - else return drop_r_hand(Target, TRUE) - -/* - Removes the object from any slots the mob might have, calling the appropriate icon update proc. - Does nothing else. - - *** DO NOT CALL THIS PROC DIRECTLY *** - - It is meant to be called only by other inventory procs. - It's probably okay to use it if you are transferring the item between slots on the same mob, - but chances are you're safer calling remove_from_mob() or drop_from_inventory() anyways. - - As far as I can tell the proc exists so that mobs with different inventory slots can override - the search through all the slots, without having to duplicate the rest of the item dropping. -*/ -/mob/proc/u_equip(obj/W as obj) - if (W == r_hand) - r_hand = null - update_inv_r_hand(0) - else if (W == l_hand) - l_hand = null - update_inv_l_hand(0) - else if (W == back) - back = null - update_inv_back(0) - else if (W == wear_mask) - wear_mask = null - update_inv_wear_mask(0) - return - - -/// Returns truthy when item is in the mobs inventory slots, or in slot if specified. -/mob/proc/isEquipped(obj/item/item, slot) - if (!item) - return FALSE - if (slot) - return get_equipped_item(slot) == item - return get_inventory_slot(item) != 0 - - -/mob/proc/canUnEquip(obj/item/I) - if(!I) //If there's nothing to drop, the drop is automatically successful. - return 1 - var/slot = get_inventory_slot(I) - if(!slot && !istype(I.loc, /obj/item/rig_module)) - return 1 //already unequipped, so success - return I.mob_can_unequip(src, slot) - -/mob/proc/get_inventory_slot(obj/item/I) - var/slot = 0 - for(var/s in slot_first to slot_last) //kind of worries me - if(get_equipped_item(s) == I) - slot = s - break - return slot - -//This differs from remove_from_mob() in that it checks if the item can be unequipped first. Use drop_from_inventory if you don't want to check. -/mob/proc/unEquip(obj/item/I, var/atom/target) - if(!canUnEquip(I)) - return - drop_from_inventory(I, target) - return 1 - -/mob/proc/unequip_item(atom/target) - if(!canUnEquip(get_active_hand())) - return - drop_item(target) - return 1 - -//Attemps to remove an object on a mob. -/mob/proc/remove_from_mob(var/obj/O, var/atom/target) - if(!O) // Nothing to remove, so we succeed. - return 1 - src.u_equip(O) - if (src.client) - src.client.screen -= O - O.reset_plane_and_layer() - O.screen_loc = null - if(istype(O, /obj/item)) - var/obj/item/I = O - if(target) - I.forceMove(target) - else - I.dropInto(loc) - I.dropped(src) - return 1 - - -//Returns the item equipped to the specified slot, if any. -/mob/proc/get_equipped_item(var/slot) - switch(slot) - if(slot_l_hand) return l_hand - if(slot_r_hand) return r_hand - if(slot_back) return back - if(slot_wear_mask) return wear_mask - return null - -/mob/proc/get_equipped_items(var/include_carried = 0) - . = list() - if(back) . += back - if(wear_mask) . += wear_mask - - if(include_carried) - if(l_hand) . += l_hand - if(r_hand) . += r_hand - -/mob/proc/delete_inventory(var/include_carried = FALSE) - for(var/entry in get_equipped_items(include_carried)) - drop_from_inventory(entry) - qdel(entry) - -// Returns all currently covered body parts -/mob/proc/get_covered_body_parts() - . = 0 - for(var/entry in get_equipped_items()) - var/obj/item/I = entry - . |= I.body_parts_covered - -// Returns the first item which covers any given body part -/mob/proc/get_covering_equipped_item(var/body_parts) - for(var/entry in get_equipped_items()) - var/obj/item/I = entry - if(I.body_parts_covered & body_parts) - return I - -// Returns all items which covers any given body part -/mob/proc/get_covering_equipped_items(var/body_parts) - . = list() - for(var/entry in get_equipped_items()) - var/obj/item/I = entry - if(I.body_parts_covered & body_parts) - . += I diff --git a/code/modules/mob/language/alien/adherent.dm b/code/modules/mob/language/alien/adherent.dm deleted file mode 100644 index 13a1d3dfaee39..0000000000000 --- a/code/modules/mob/language/alien/adherent.dm +++ /dev/null @@ -1,16 +0,0 @@ -/datum/language/adherent - name = LANGUAGE_ADHERENT - desc = "The mellifluous wind chime tones of the Vigil's formal shared language." - speech_verb = "chimes" - ask_verb = "rings" - exclaim_verb = "peals" - colour = "adherent" - key = "p" - flags = WHITELISTED - syllables = list("\[Ab\]", "\[Bb\]", "\[Cb\]", "\[Db\]", "\[Eb\]", "\[Fb\]", - "\[Gb\]", "\[A#\]", "\[B#\]", "\[C#\]", "\[D#\]", "\[E#\]", "\[F#\]", - "\[G#\]", "\[A\]", "\[B\]", "\[C\]", "\[D\]", "\[E\]", "\[F\]", "\[G\]", - "\[harmonic\]", "\[disharmonic\]", "\[choral\]" - ) - shorthand = "VP" - space_chance = 0 \ No newline at end of file diff --git a/code/modules/mob/language/alien/antag.dm b/code/modules/mob/language/alien/antag.dm deleted file mode 100644 index ecce578f36377..0000000000000 --- a/code/modules/mob/language/alien/antag.dm +++ /dev/null @@ -1,134 +0,0 @@ -/datum/language/ling - name = LANGUAGE_CHANGELING_GLOBAL - desc = "Although they are normally wary and suspicious of each other, changelings can commune over a distance." - speech_verb = "says" - colour = "changeling" - key = "g" - flags = RESTRICTED | HIVEMIND - shorthand = "N/A" - hidden_from_codex = TRUE - -/datum/language/ling/broadcast(var/mob/living/speaker,var/message,var/speaker_mask) - - if(speaker.mind && speaker.mind.changeling) - ..(speaker,message,speaker.mind.changeling.changelingID) - else - ..(speaker,message) - -/datum/language/corticalborer - name = LANGUAGE_BORER_GLOBAL - desc = "Cortical borers possess a strange link between their tiny minds." - speech_verb = "sings" - ask_verb = "sings" - exclaim_verb = "sings" - colour = "alien" - key = "z" - flags = RESTRICTED | HIVEMIND - shorthand = "N/A" - hidden_from_codex = TRUE - -/datum/language/corticalborer/broadcast(var/mob/living/speaker,var/message,var/speaker_mask) - - var/mob/living/simple_animal/borer/B - - if(istype(speaker,/mob/living/carbon)) - var/mob/living/carbon/M = speaker - B = M.has_brain_worms() - else if(istype(speaker,/mob/living/simple_animal/borer)) - B = speaker - - if(B) - if(B.host) - if(B.host.nutrition < 50 || B.host.stat) - to_chat(speaker, SPAN_WARNING("Your host is too weak to relay your broadcast.")) - return FALSE - B.host.nutrition -= rand(1, 3) - speaker_mask = B.truename - ..(speaker,message,speaker_mask) - -/datum/language/vox - name = LANGUAGE_VOX - desc = "The common tongue of the various Vox ships making up the Shoal. It sounds like chaotic shrieking to everyone else." - speech_verb = "shrieks" - ask_verb = "creels" - exclaim_verb = "SHRIEKS" - colour = "vox" - key = "x" - flags = WHITELISTED - syllables = list("ti","ti","ti","hi","hi","ki","ki","ki","ki","ya","ta","ha","ka","ya","chi","cha","kah", \ - "SKRE","AHK","EHK","RAWK","KRA","AAA","EEE","KI","II","KRI","KA") - machine_understands = 0 - shorthand = "Vox" - has_written_form = TRUE - -/datum/language/vox/can_speak_special(var/mob/speaker) - if(!ishuman(speaker)) - return FALSE - var/mob/living/carbon/human/H = speaker - var/obj/item/organ/internal/hindtongue/tongue = H.internal_organs_by_name[BP_HINDTONGUE] - if(!istype(tongue) || !tongue.is_usable()) - to_chat(speaker, SPAN_WARNING("You are not capable of speaking [name]!")) - return FALSE - return TRUE - -/datum/language/vox/get_random_name() - return ..(FEMALE,1,6) - -/datum/language/cultcommon - name = LANGUAGE_CULT - desc = "The chants of the occult, the incomprehensible." - speech_verb = "intones" - ask_verb = "intones" - exclaim_verb = "chants" - colour = "cult" - key = "f" - flags = RESTRICTED - space_chance = 100 - syllables = list("ire","ego","nahlizet","certum","veri","jatkaa","mgar","balaq", "karazet", "geeri", \ - "orkan", "allaq", "sas'so", "c'arta", "forbici", "tarem", "n'ath", "reth", "sh'yro", "eth", "d'raggathnor", \ - "mah'weyh", "pleggh", "at", "e'ntrath", "tok-lyr", "rqa'nap", "g'lt-ulotf", "ta'gh", "fara'qha", "fel", "d'amar det", \ - "yu'gular", "faras", "desdae", "havas", "mithum", "javara", "umathar", "uf'kal", "thenar", "rash'tla", \ - "sektath", "mal'zua", "zasan", "therium", "viortia", "kla'atu", "barada", "nikt'o", "fwe'sh", "mah", "erl", "nyag", "r'ya", \ - "gal'h'rfikk", "harfrandid", "mud'gib", "fuu", "ma'jin", "dedo", "ol'btoh", "n'ath", "reth", "sh'yro", "eth", \ - "d'rekkathnor", "khari'd", "gual'te", "nikka", "nikt'o", "barada", "kla'atu", "barhah", "hra" ,"zar'garis") - machine_understands = 0 - shorthand = "CT" - hidden_from_codex = TRUE - has_written_form = TRUE - -/datum/language/cult - name = LANGUAGE_CULT_GLOBAL - desc = "The initiated can share their thoughts by means defying all reason." - speech_verb = "intones" - ask_verb = "intones" - exclaim_verb = "chants" - colour = "cult" - key = "y" - flags = RESTRICTED | HIVEMIND - shorthand = "N/A" - hidden_from_codex = TRUE - -/datum/language/alium - name = LANGUAGE_ALIUM - colour = "cult" - speech_verb = "hisses" - key = "c" - flags = RESTRICTED - syllables = list("qy","bok","mok","yok","dy","gly","ryl","byl","dok","forbici", "tarem", "n'ath", "reth", "sh'yro", "eth", "d'raggathnor","niii", - "d'rekkathnor", "khari'd", "gual'te", "ki","ki","ki","ki","ya","ta","wej","nym","assah","qwssa","nieasl","qyno","shaffar", - "eg","bog","voijs","nekks","bollos","qoulsan","borrksakja","neemen","aka","nikka","qyegno","shafra","beolas","Byno") - machine_understands = 0 - shorthand = "AL" - hidden_from_codex = TRUE - has_written_form = TRUE - -/datum/language/alium/New() - speech_verb = pick("hisses","growls","whistles","blubbers","chirps","skreeches","rumbles","clicks") - ..() - -/datum/language/alium/get_random_name() - var/new_name = "" - var/length = rand(1,3) - for(var/i=0 to length) - new_name += pick(syllables) - return capitalize(new_name) diff --git a/code/modules/mob/language/alien/diona.dm b/code/modules/mob/language/alien/diona.dm deleted file mode 100644 index a964a230c753b..0000000000000 --- a/code/modules/mob/language/alien/diona.dm +++ /dev/null @@ -1,24 +0,0 @@ -/datum/language/diona - name = LANGUAGE_ROOTLOCAL - desc = "A complex language known instinctively by Dionaea, 'spoken' by emitting modulated radio waves. This version uses high frequency waves for quick communication at short ranges." - speech_verb = "creaks and rustles" - ask_verb = "creaks" - exclaim_verb = "rustles" - colour = "soghun" - key = "q" - flags = RESTRICTED - syllables = list("hs","zt","kr","st","sh") - shorthand = "RT" - machine_understands = FALSE - -/datum/language/diona/get_random_name() - var/new_name = "[pick(list("To Sleep Beneath","Wind Over","Embrace of","Dreams of","Witnessing","To Walk Beneath","Approaching the"))]" - new_name += " [pick(list("the Void","the Sky","Encroaching Night","Planetsong","Starsong","the Wandering Star","the Empty Day","Daybreak","Nightfall","the Rain"))]" - return new_name - -/datum/language/diona/global - name = LANGUAGE_ROOTGLOBAL - desc = "A complex language known instinctively by Dionaea, 'spoken' by emitting modulated radio waves. This version uses low frequency waves for slow communication at long ranges." - key = "w" - flags = RESTRICTED | HIVEMIND - shorthand = "N/A" \ No newline at end of file diff --git a/code/modules/mob/language/alien/mantid.dm b/code/modules/mob/language/alien/mantid.dm deleted file mode 100644 index d6b9241b2c080..0000000000000 --- a/code/modules/mob/language/alien/mantid.dm +++ /dev/null @@ -1,106 +0,0 @@ -/datum/language/mantid - name = LANGUAGE_MANTID_VOCAL - desc = "A curt, sharp language developed by the insectoid Ascent for use over comms." - speech_verb = "clicks" - ask_verb = "chirps" - exclaim_verb = "rasps" - colour = "alien" - syllables = list("-","=","+","_","|","/") - space_chance = 0 - key = "|" - flags = RESTRICTED - shorthand = "KV" - machine_understands = FALSE - var/list/correct_mouthbits = list( - SPECIES_NABBER, - SPECIES_MANTID_ALATE, - SPECIES_MANTID_GYNE, - SPECIES_MONARCH_QUEEN, - SPECIES_MONARCH_WORKER - ) - has_written_form = TRUE - -/datum/language/mantid/can_be_spoken_properly_by(var/mob/speaker) - var/mob/living/S = speaker - if(!istype(S)) - return FALSE - if(S.isSynthetic()) - return TRUE - if(ishuman(speaker)) - var/mob/living/carbon/human/H = speaker - if(H.species.name in correct_mouthbits) - return TRUE - return FALSE - -/datum/language/mantid/muddle(var/message) - message = replacetext_char(message, "...", ".") - message = replacetext_char(message, "!?", ".") - message = replacetext_char(message, "?!", ".") - message = replacetext_char(message, "!", ".") - message = replacetext_char(message, "?", ".") - message = replacetext_char(message, ",", "") - message = replacetext_char(message, ";", "") - message = replacetext_char(message, ":", "") - message = replacetext_char(message, ".", "...") - message = replacetext_char(message, "'", "'") - return message - -/datum/language/mantid/broadcast(var/mob/living/speaker,var/message,var/speaker_mask) - . = ..(speaker, message, speaker.real_name) - -/datum/language/mantid/nonvocal - key = "]" - name = LANGUAGE_MANTID_NONVOCAL - desc = "A complex visual language of bright bio-luminescent flashes, 'spoken' natively by the Kharmaani of the Ascent." - colour = "alien" - speech_verb = "flashes" - ask_verb = "gleams" - exclaim_verb = "flares" - flags = RESTRICTED | NO_STUTTER | SIGNLANG - shorthand = "KNV" - has_written_form = FALSE - -#define MANTID_SCRAMBLE_CACHE_LEN 20 -/datum/language/mantid/nonvocal/scramble(var/input) - if(input in scramble_cache) - var/n = scramble_cache[input] - scramble_cache -= input - scramble_cache[input] = n - return n - var/i = length(input) - var/scrambled_text = "" - while(i) - i-- - scrambled_text += "*" - scramble_cache[input] = scrambled_text - if(scramble_cache.len > MANTID_SCRAMBLE_CACHE_LEN) - scramble_cache.Cut(1, scramble_cache.len-MANTID_SCRAMBLE_CACHE_LEN-1) - return scrambled_text -#undef MANTID_SCRAMBLE_CACHE_LEN - -/datum/language/mantid/nonvocal/can_speak_special(var/mob/living/speaker) - if(istype(speaker) && speaker.isSynthetic()) - return TRUE - else if(ishuman(speaker)) - var/mob/living/carbon/human/H = speaker - return (H.species.name == SPECIES_MANTID_ALATE || H.species.name == SPECIES_MANTID_GYNE) - return FALSE - -/datum/language/mantid/worldnet - key = "\[" - name = LANGUAGE_MANTID_BROADCAST - desc = "The mantid aliens of the Ascent maintain an extensive self-supporting broadcast network for use in team communications." - colour = "alien" - speech_verb = "flashes" - ask_verb = "gleams" - exclaim_verb = "flares" - flags = RESTRICTED | NO_STUTTER | NONVERBAL | HIVEMIND - shorthand = "KB" - has_written_form = FALSE - -/datum/language/mantid/worldnet/check_special_condition(var/mob/living/carbon/other) - if(istype(other, /mob/living/silicon/robot/flying/ascent)) - return TRUE - if(istype(other) && (locate(/obj/item/organ/internal/controller) in other.internal_organs)) - return TRUE - return FALSE diff --git a/code/modules/mob/language/alien/monkey.dm b/code/modules/mob/language/alien/monkey.dm deleted file mode 100644 index 64345ad56c268..0000000000000 --- a/code/modules/mob/language/alien/monkey.dm +++ /dev/null @@ -1,10 +0,0 @@ -/datum/language/human/monkey - name = LANGUAGE_PRIMITIVE - desc = "Ook ook ook." - speech_verb = "chimpers" - ask_verb = "chimpers" - exclaim_verb = "screeches" - key = "" - syllables = list("ook", "eek", "hiss", "gronk") - shorthand = "Ook" - hidden_from_codex = 1 diff --git a/code/modules/mob/language/alien/serpentid.dm b/code/modules/mob/language/alien/serpentid.dm deleted file mode 100644 index cd1253284c4b8..0000000000000 --- a/code/modules/mob/language/alien/serpentid.dm +++ /dev/null @@ -1,15 +0,0 @@ -/datum/language/nabber - name = LANGUAGE_NABBER - desc = "A strange language that can be understood both by the sounds made and by the movement needed to create those sounds." - signlang_verb = list("chitters", "grinds its mouthparts", "chitters and grinds its mouthparts") - key = "n" - flags = WHITELISTED | SIGNLANG | NO_STUTTER | NONVERBAL - colour = ".nabber_lang" - shorthand = "SD" - -/datum/language/nabber/get_random_name(var/gender) - if(gender == FEMALE) - return capitalize(pick(GLOB.first_names_female)) - else - return capitalize(pick(GLOB.first_names_male)) - diff --git a/code/modules/mob/language/alien/skrell.dm b/code/modules/mob/language/alien/skrell.dm deleted file mode 100644 index 7c512a2397bf6..0000000000000 --- a/code/modules/mob/language/alien/skrell.dm +++ /dev/null @@ -1,12 +0,0 @@ -/datum/language/skrell - name = LANGUAGE_SKRELLIAN - desc = "A melodic and complex language spoken by the Skrell of Qerrbalak. Some of the notes are inaudible to humans." - speech_verb = "warbles" - ask_verb = "warbles" - exclaim_verb = "warbles" - colour = "skrell" - key = "k" - flags = WHITELISTED - syllables = list("qr","qrr","xuq","qil","quum","xuqm","vol","xrim","zaoo","qu-uu","qix","qoo","zix","*","!") - shorthand = "SK" - has_written_form = TRUE diff --git a/code/modules/mob/language/alien/unathi.dm b/code/modules/mob/language/alien/unathi.dm deleted file mode 100644 index 494f9cd13b30e..0000000000000 --- a/code/modules/mob/language/alien/unathi.dm +++ /dev/null @@ -1,50 +0,0 @@ -/datum/language/unathi - name = LANGUAGE_UNATHI_SINTA - desc = "The common language of Moghes, composed of sibilant hisses and rattles. Spoken natively by Unathi." - speech_verb = "hisses" - ask_verb = "hisses" - exclaim_verb = "roars" - colour = "soghun" - key = "o" - flags = WHITELISTED - space_chance = 40 - partial_understanding = list( - LANGUAGE_UNATHI_YEOSA = 20 - ) - syllables = list( - "za", "az", "ze", "ez", "zi", "iz", "zo", "oz", "zu", "uz", "zs", "sz", - "ha", "ah", "he", "eh", "hi", "ih", "ho", "oh", "hu", "uh", "hs", "sh", - "la", "al", "le", "el", "li", "il", "lo", "ol", "lu", "ul", "ls", "sl", - "ka", "ak", "ke", "ek", "ki", "ik", "ko", "ok", "ku", "uk", "ks", "sk", - "sa", "as", "se", "es", "si", "is", "so", "os", "su", "us", "ss", "ss", - "ra", "ar", "re", "er", "ri", "ir", "ro", "or", "ru", "ur", "rs", "sr", - "a", "a", "e", "e", "i", "i", "o", "o", "u", "u", "s", "s" - ) - shorthand = "UT" - has_written_form = TRUE - -/datum/language/yeosa - name = LANGUAGE_UNATHI_YEOSA - desc = "A language of Moghes consisting of a combination of spoken word and gesticulation. While it is uncommonly spoken in the drier regions, it enjoys popular usage as the official tongue of the Yeosa clans." - speech_verb = "hisses" - ask_verb = "rattles" - exclaim_verb = "barks" - colour = "yeosa" - key = "h" - flags = WHITELISTED - space_chance = 40 - partial_understanding = list( - LANGUAGE_UNATHI_SINTA = 20 - ) - syllables = list( - "azs","zis","zau","azua","skiu","zuakz","izo","aei","ki","kut","zo", - "za", "az", "ze", "ez", "zi", "iz", "zo", "oz", "zu", "uz", "zs", "sz", - "ha", "ah", "he", "eh", "hi", "ih", "ho", "oh", "hu", "uh", "hs", "sh", - "la", "al", "le", "el", "li", "il", "lo", "ol", "lu", "ul", "ls", "sl", - "ka", "ak", "ke", "ek", "ki", "ik", "ko", "ok", "ku", "uk", "ks", "sk", - "sa", "as", "se", "es", "si", "is", "so", "os", "su", "us", "ss", "ss", - "ra", "ar", "re", "er", "ri", "ir", "ro", "or", "ru", "ur", "rs", "sr", - "a", "a", "e", "e", "i", "i", "o", "o", "u", "u", "s", "s" - ) - shorthand = "YU" - has_written_form = TRUE diff --git a/code/modules/mob/language/generic.dm b/code/modules/mob/language/generic.dm deleted file mode 100644 index dffc8cca83b49..0000000000000 --- a/code/modules/mob/language/generic.dm +++ /dev/null @@ -1,29 +0,0 @@ -// Noise "language", for audible emotes. -/datum/language/noise - name = "Noise" - desc = "Noises." - key = "" - flags = RESTRICTED|NONGLOBAL|INNATE|NO_TALK_MSG|NO_STUTTER - hidden_from_codex = 1 - -/datum/language/noise/format_message(message, verb) - return "[message]" - -/datum/language/noise/format_message_plain(message, verb) - return message - -/datum/language/noise/format_message_radio(message, verb) - return "[message]" - -/datum/language/noise/get_talkinto_msg_range(message) - // if you make a loud noise (screams etc), you'll be heard from 4 tiles over instead of two - return (copytext_char(message, -1) == "!") ? 4 : 2 - -/datum/language/sign - name = LANGUAGE_SIGN - desc = "A sign language commonly used for those who are deaf or mute." - signlang_verb = list("gestures") - colour = "say_quote" - key = "s" - flags = SIGNLANG | NO_STUTTER | NONVERBAL - shorthand = "HS" diff --git a/code/modules/mob/language/human/arabic.dm b/code/modules/mob/language/human/arabic.dm deleted file mode 100644 index cc6a177ad8e61..0000000000000 --- a/code/modules/mob/language/human/arabic.dm +++ /dev/null @@ -1,22 +0,0 @@ -/datum/language/human/arabic - name = LANGUAGE_HUMAN_ARABIC - desc = "'Prototype Standard Arabic', as it was known during its development as a world-wide replacement for the myriad regional dialects of Modern Standard, \ - was mostly ignored on Earth until co-operative Pan-Arab space exploration made its use attractive. Its use as a liturgical language remains limited." - colour = "arabic" - key = "4" - shorthand = "PSA" - space_chance = 35 - partial_understanding = list( - LANGUAGE_HUMAN_EURO = 5, - LANGUAGE_HUMAN_CHINESE = 5, - LANGUAGE_HUMAN_INDIAN = 10, - LANGUAGE_HUMAN_SELENIAN = 5, - LANGUAGE_SPACER = 20 - ) - syllables = list( - "af", "if", "ba", "ta", "tha", "id", "jem", "ha", "kha", "dal", "dhl", "ra", "zay", - "sen", "um", "shn", "sid", "ad", "ta", "za", "ayn", "gha", "zir", "yn", "fa", "qaf", - "iam", "mim", "al", "ja", "non", "ha", "waw", "ya", "hem", "zah", "hml", "ks", "ini", - "da", "ks", "iga", "ih", "la", "ulf", "xe", "ayw", "'", "-" - ) - has_written_form = TRUE diff --git a/code/modules/mob/language/human/chinese.dm b/code/modules/mob/language/human/chinese.dm deleted file mode 100644 index 0569163c35b9a..0000000000000 --- a/code/modules/mob/language/human/chinese.dm +++ /dev/null @@ -1,48 +0,0 @@ -/*////////////////////////////////////////////////////////////////////////////////////////////////////// - Syllable list compiled in this file based on work available at the following URL - https://www.chinahighlights.com/travelguide/learning-chinese/pinyin-syllables.htm -*/////////////////////////////////////////////////////////////////////////////////////////////////////// - -/datum/language/human/chinese - name = LANGUAGE_HUMAN_CHINESE - desc = "A simplified version of Mandarin written in the Latin script, Yangyu steadily rose to prominence as a trade language in the continent, Japan, Korea, as well as parts of Africa." - colour = "chinese" - key = "2" - shorthand = "YngYu" - space_chance = 30 - partial_understanding = list( - LANGUAGE_HUMAN_EURO = 5, - LANGUAGE_HUMAN_ARABIC = 5, - LANGUAGE_HUMAN_INDIAN = 5, - LANGUAGE_HUMAN_SELENIAN = 10, - LANGUAGE_SPACER = 20 - ) - syllables = list( - "a", "ai", "an", "ang", "ao", "ba", "bai", "ban", "bang", "bao", "bei", "ben", "beng", "bi", "bian", "biao", - "bie", "bin", "bing", "bo", "bu", "ca", "cai", "can", "cang", "cao", "ce", "cei", "cen", "ceng", "cha", "chai", - "chan", "chang", "chao", "che", "chen", "cheng", "chi", "chong", "chou", "chu", "chua", "chuai", "chuan", "chuang", "chui", "chun", - "chuo", "ci", "cong", "cou", "cu", "cuan", "cui", "cun", "cuo", "da", "dai", "dan", "dang", "dao", "de", "dei", - "den", "deng", "di", "dian", "diao", "die", "ding", "diu", "dong", "dou", "du", "duan", "dui", "dun", "duo", "e", - "ei", "en", "er", "fa", "fan", "fang", "fei", "fen", "feng", "fo", "fou", "fu", "ga", "gai", "gan", "gang", - "gao", "ge", "gei", "gen", "geng", "gong", "gou", "gu", "gua", "guai", "guan", "guang", "gui", "gun", "guo", "ha", - "hai", "han", "hang", "hao", "he", "hei", "hen", "heng", "hm", "hng", "hong", "hou", "hu", "hua", "huai", "huan", - "huang", "hui", "hun", "huo", "ji", "jia", "jian", "jiang", "jiao", "jie", "jin", "jing", "jiong", "jiu", "ju", "juan", - "jue", "jun", "ka", "kai", "kan", "kang", "kao", "ke", "kei", "ken", "keng", "kong", "kou", "ku", "kua", "kuai", - "kuan", "kuang", "kui", "kun", "kuo", "la", "lai", "lan", "lang", "lao", "le", "lei", "leng", "li", "lia", "lian", - "liang", "liao", "lie", "lin", "ling", "liu", "long", "lou", "lu", "luan", "lun", "luo", "ma", "mai", "man", "mang", - "mao", "me", "mei", "men", "meng", "mi", "mian", "miao", "mie", "min", "ming", "miu", "mo", "mou", "mu", "na", - "nai", "nan", "nang", "nao", "ne", "nei", "nen", "neng", "ng", "ni", "nian", "niang", "niao", "nie", "nin", "ning", - "niu", "nong", "nou", "nu", "nuan", "nuo", "o", "ou", "pa", "pai", "pan", "pang", "pao", "pei", "pen", "peng", - "pi", "pian", "piao", "pie", "pin", "ping", "po", "pou", "pu", "qi", "qia", "qian", "qiang", "qiao", "qie", "qin", - "qing", "qiong", "qiu", "qu", "quan", "que", "qun", "ran", "rang", "rao", "re", "ren", "reng", "ri", "rong", "rou", - "ru", "rua", "ruan", "rui", "run", "ruo", "sa", "sai", "san", "sang", "sao", "se", "sei", "sen", "seng", "sha", - "shai", "shan", "shang", "shao", "she", "shei", "shen", "sheng", "shi", "shou", "shu", "shua", "shuai", "shuan", "shuang", "shui", - "shun", "shuo", "si", "song", "sou", "su", "suan", "sui", "sun", "suo", "ta", "tai", "tan", "tang", "tao", "te", - "teng", "ti", "tian", "tiao", "tie", "ting", "tong", "tou", "tu", "tuan", "tui", "tun", "tuo", "wa", "wai", "wan", - "wang", "wei", "wen", "weng", "wo", "wu", "xi", "xia", "xian", "xiang", "xiao", "xie", "xin", "xing", "xiong", "xiu", - "xu", "xuan", "xue", "xun", "ya", "yan", "yang", "yao", "ye", "yi", "yin", "ying", "yong", "you", "yu", "yuan", - "yue", "yun", "za", "zai", "zan", "zang", "zao", "ze", "zei", "zen", "zeng", "zha", "zhai", "zhan", "zhang", "zhao", - "zhe", "zhei", "zhen", "zheng", "zhi", "zhong", "zhou", "zhu", "zhua", "zhuai", "zhuan", "zhuang", "zhui", "zhun", "zhuo", "zi", - "zong", "zou", "zuan", "zui", "zun", "zuo", "zu" - ) - has_written_form = TRUE diff --git a/code/modules/mob/language/human/euro.dm b/code/modules/mob/language/human/euro.dm deleted file mode 100644 index 186a0d396c9ea..0000000000000 --- a/code/modules/mob/language/human/euro.dm +++ /dev/null @@ -1,35 +0,0 @@ -/*////////////////////////////////////////////////////////////////////////////////////////////////////// - Syllable list compiled in this file based on work by Stefan Trost, available at the following URLs - https://www.sttmedia.com/syllablefrequency-english - https://www.sttmedia.com/syllablefrequency-french - https://www.sttmedia.com/syllablefrequency-german -*/////////////////////////////////////////////////////////////////////////////////////////////////////// - -/datum/language/human/euro - name = LANGUAGE_HUMAN_EURO - desc = "A constructed language established by a conference of European and African research universities convening in Zurich, Switzerland starting in 2119, \ - later adopted with little controversy as the lingua franca of the entirety of Sol space following the establishment of the SCG." - speech_verb = "говорит" - whisper_verb = "шепчет" - colour = "" - key = "1" - flags = WHITELISTED - shorthand = "ZAC" - partial_understanding = list( - LANGUAGE_HUMAN_CHINESE = 5, - LANGUAGE_HUMAN_ARABIC = 5, - LANGUAGE_HUMAN_INDIAN = 5, - LANGUAGE_HUMAN_IBERIAN = 30, - LANGUAGE_HUMAN_RUSSIAN = 5, - LANGUAGE_HUMAN_SELENIAN = 85, - LANGUAGE_SPACER = 20 - ) - syllables = list( - "al", "an", "ar", "as", "at", "ea", "ed", "en", "er", "es", "ha", "he", "hi", "in", "is", "it", - "le", "me", "nd", "ne", "ng", "nt", "on", "or", "ou", "re", "se", "st", "te", "th", "ti", "to", - "ve", "wa", "all", "and", "are", "but", "ent", "era", "ere", "eve", "for", "had", "hat", "hen", "her", "hin", - "ch", "de", "ge", "be", "ach", "abe", "ich", "ein", "die", "sch", "auf", "aus", "ber", "che", "ent", "que", - "ait", "les", "lle", "men", "ais", "ans", "ait", "ave", "con", "com", "des", "tre", "eta", "eur", "est", - "ing", "the", "ver", "was", "ith", "hin" - ) - has_written_form = TRUE diff --git a/code/modules/mob/language/human/human.dm b/code/modules/mob/language/human/human.dm deleted file mode 100644 index 38c014266ae76..0000000000000 --- a/code/modules/mob/language/human/human.dm +++ /dev/null @@ -1,28 +0,0 @@ -//base human language -/datum/language/human - name = "proto-sapien" - desc = "This is the human root language. If you have this, please tell a developer." - speech_verb = "говорит" - whisper_verb = "шепчет" - colour = "solcom" - flags = WHITELISTED - shorthand = "???" - space_chance = 40 - category = /datum/language/human - -/datum/language/human/get_spoken_verb(var/msg_end) - switch(msg_end) - if("!") - return pick("восклицает", "выкрикивает") //inf, was "exclaims","shouts","yells" - if("?") - return ask_verb - return speech_verb - -/datum/language/human/get_random_name(var/gender) - if (prob(80)) - if(gender==FEMALE) - return capitalize(pick(GLOB.first_names_female)) + " " + capitalize(pick(GLOB.last_names)) - else - return capitalize(pick(GLOB.first_names_male)) + " " + capitalize(pick(GLOB.last_names)) - else - return ..() \ No newline at end of file diff --git a/code/modules/mob/language/human/indian.dm b/code/modules/mob/language/human/indian.dm deleted file mode 100644 index ff3f12164b519..0000000000000 --- a/code/modules/mob/language/human/indian.dm +++ /dev/null @@ -1,28 +0,0 @@ -/*////////////////////////////////////////////////////////////////////////////////////////////////////// - Syllable list compiled in this file based on work by Stefan Trost, available at the following URL - https://www.sttmedia.com/syllablefrequency-hindi -*/////////////////////////////////////////////////////////////////////////////////////////////////////// - -/datum/language/human/indian - name = LANGUAGE_HUMAN_INDIAN - desc = "Billed as a reunification of the Hindustani languages of Hindi and Urdu in the Latin script, New Dehlavi enjoyed very rapid adoption rates among the common populace, \ - compared to the other great Earth commons." - colour = "indian" - key = "3" - shorthand = "Dehv" - space_chance = 30 - partial_understanding = list( - LANGUAGE_HUMAN_EURO = 5, - LANGUAGE_HUMAN_CHINESE = 5, - LANGUAGE_HUMAN_ARABIC = 10, - LANGUAGE_HUMAN_SELENIAN = 5, - LANGUAGE_SPACER = 20 - ) - syllables = list( - "ek", "aur", "ki", "ki", "ke", "de", "thaa", "ne", "me", "yaa", "se", "haa", - "hai", "aar", "en", "ain", "y", "ke", "hai", "yaa", "en", "me", "aur", "se", - "ki", "ne", "ek", "aar", "ain", "ki", "haa", "y", "thaa", "de", "usk", "use", - "khaa", "kin", "kiy", "ky", "dei", "dekh", "nhi", "pne", "pr", "baar", "yon", - "men", "iyaa", "main", "apn" - ) - has_written_form = TRUE diff --git a/code/modules/mob/language/human/misc/gutter.dm b/code/modules/mob/language/human/misc/gutter.dm deleted file mode 100644 index cba78a57123bf..0000000000000 --- a/code/modules/mob/language/human/misc/gutter.dm +++ /dev/null @@ -1,22 +0,0 @@ -/datum/language/gutter - name = LANGUAGE_GUTTER - desc = "This crude pidgin tongue developed on Pluto during its busier days. It is common among the lower classes of Pluto. It is a common language among Plutonians. It is considered a crude language by many that are 'upper class'." - speech_verb = "growls" - colour = "rough" - key = "t" - space_chance = 70 - partial_understanding = list( - LANGUAGE_HUMAN_EURO = 75, - LANGUAGE_HUMAN_CHINESE = 20, - LANGUAGE_HUMAN_ARABIC = 10, - LANGUAGE_HUMAN_INDIAN = 10, - LANGUAGE_HUMAN_IBERIAN = 30, - LANGUAGE_HUMAN_RUSSIAN = 30, - LANGUAGE_HUMAN_SELENIAN = 15, - LANGUAGE_SPACER = 35, - ) - syllables = list ( - "yayo", "aiya", "chiksa", "tikat", "bazar","oi", "yo", "meit", "grok", "ken", "berk", "cohon", "pendeo" - ) - shorthand = "GT" - has_written_form = TRUE diff --git a/code/modules/mob/language/human/misc/spacer.dm b/code/modules/mob/language/human/misc/spacer.dm deleted file mode 100644 index cbf09ce106d34..0000000000000 --- a/code/modules/mob/language/human/misc/spacer.dm +++ /dev/null @@ -1,21 +0,0 @@ -/datum/language/spacer - name = LANGUAGE_SPACER - desc = "A rough, informal language used infrequently by humans as a last resort when attempts to establish dialogue in more proper languages fail and no autotranslators are available." - warning = "Automatically given if spawning with no languages." - key = "j" - shorthand = "Spc" - partial_understanding = list( - LANGUAGE_HUMAN_EURO = 25, - LANGUAGE_HUMAN_CHINESE = 25, - LANGUAGE_HUMAN_ARABIC = 25, - LANGUAGE_HUMAN_INDIAN = 25, - LANGUAGE_HUMAN_IBERIAN = 25, - LANGUAGE_HUMAN_RUSSIAN = 25, - LANGUAGE_HUMAN_SELENIAN = 25, - LANGUAGE_GUTTER = 35 - ) - syllables = list( - "ada", "zir", "bian", "ach", "usk", "ado", "ich", "cuan", "iga", "qing", "le", "que", "ki", "qaf", "dei", "eta" - ) - colour = "spacer" - has_written_form = TRUE diff --git a/code/modules/mob/language/human/russian.dm b/code/modules/mob/language/human/russian.dm deleted file mode 100644 index 9671ffb313725..0000000000000 --- a/code/modules/mob/language/human/russian.dm +++ /dev/null @@ -1,18 +0,0 @@ -/datum/language/human/russian - name = LANGUAGE_HUMAN_RUSSIAN - desc = "The official language of the Independent Colonial Confederation of Gilgamesh, originally established in 2122 by the short-lived United Slavic Confederation on Earth." - colour = "russian" - key = "r" - shorthand = "Slav" - partial_understanding = list( - LANGUAGE_HUMAN_EURO = 5, - LANGUAGE_HUMAN_SELENIAN = 10, - LANGUAGE_SPACER = 20 - ) - syllables = list( - "rus", "zem", "ave", "groz", "ski", "ska", "ven", "konst", "pol", "lin", "svy", - "danya", "da", "mied", "zan", "das", "krem", "myka", "to", "st", "no", "na", "ni", - "ko", "ne", "en", "po", "ra", "li", "on", "byl", "cto", "eni", "ost", "ol", "ego", - "ver", "stv", "pro" - ) - has_written_form = TRUE diff --git a/code/modules/mob/language/human/selenian.dm b/code/modules/mob/language/human/selenian.dm deleted file mode 100644 index cfe21fafb8c8c..0000000000000 --- a/code/modules/mob/language/human/selenian.dm +++ /dev/null @@ -1,24 +0,0 @@ -/datum/language/human/selenian - name = LANGUAGE_HUMAN_SELENIAN - desc = "An informal dialect of Zurich Common that arose from the close confines, mixed population, and technical focus of the moon's first city." - colour = "selenian" - key = "7" - shorthand = "Sel" - space_chance = 100 - partial_understanding = list( - LANGUAGE_HUMAN_EURO = 85, - LANGUAGE_HUMAN_CHINESE = 15, - LANGUAGE_HUMAN_ARABIC = 5, - LANGUAGE_HUMAN_INDIAN = 25, - LANGUAGE_HUMAN_IBERIAN = 15, - LANGUAGE_HUMAN_RUSSIAN = 5, - LANGUAGE_SPACER = 20 - ) - syllables = list( - "al", "an", "ar", "as", "at", "ed", "er", "ha", "he", "hi", "is", "le", "me", "on", "se", "ti", - "ve", "wa", "are", "ent", "for", "had", "hat", "hin", "ch", "be", "abe", "die", "sch", "aus", - "ber", "che", "que", "ait", "men", "ave", "con", "com", "eta", "eur", "est", "ing", "ver", "was", - "hin", "deed", "accord", "caveat", "pledge", "rights", "et", "ex", "bono", "quo", "pro", "ad", - "ek", "aur", "ki", "ki", "ke", "de", "ki", "ne", "ek", "aar", "ain", "ki", "me", "dei", "dekh" - ) - has_written_form = TRUE diff --git a/code/modules/mob/language/human/spanish.dm b/code/modules/mob/language/human/spanish.dm deleted file mode 100644 index 0ee3b96b01e9f..0000000000000 --- a/code/modules/mob/language/human/spanish.dm +++ /dev/null @@ -1,27 +0,0 @@ -/*////////////////////////////////////////////////////////////////////////////////////////////////////// - Syllable list compiled in this file based on work by Stefan Trost, available at the following URLs - https://www.sttmedia.com/syllablefrequency-spanish - https://www.sttmedia.com/syllablefrequency-portugese -*/////////////////////////////////////////////////////////////////////////////////////////////////////// - -/datum/language/human/iberian - name = LANGUAGE_HUMAN_IBERIAN - desc = "One of the few great common Earth languages to come about naturally, this language developed in the late 21st century during\ - a historic period of closeness between Spain, Portugal and their former colonies." - colour = "iberian" - key = "5" - shorthand = "Iber" - partial_understanding = list( - LANGUAGE_HUMAN_EURO = 30, - LANGUAGE_HUMAN_SELENIAN = 15, - LANGUAGE_SPACER = 20 - ) - syllables = list( - "ad", "al", "an", "ar", "as", "ci", "co", "de", "do", "el", "en", "er", "es", - "ie", "ue", "la", "ra", "os", "nt", "te", "ar", "qu", "el", "ta", "do", "co", - "re", "as", "on", "aci", "ada", "ado", "ant", "ara", "cio", "com", "con", "des", - "dos", "ent", "era", "ero", "que", "ent", "nte", "est", "ado", "par", "los", "ien", - "sta", "una", "ion", "tra", "men", "ele", "nao", "uma", "ame", "dos", "uno", "mas", - "ndo", "nha", "ver", "voc", "uma" - ) - has_written_form = TRUE diff --git a/code/modules/mob/language/language.dm b/code/modules/mob/language/language.dm deleted file mode 100644 index d28afa188d8f8..0000000000000 --- a/code/modules/mob/language/language.dm +++ /dev/null @@ -1,269 +0,0 @@ -#define SCRAMBLE_CACHE_LEN 20 - -/* - Datum based languages. Easily editable and modular. -*/ - -/datum/language - var/name = "base language" // Fluff name of language if any. - var/desc = "You should not have this language." // Short description for 'Check Languages'. - var/speech_verb = "говорит" // 'says', 'hisses', 'farts'. - var/ask_verb = "спрашивает" // Used when sentence ends in a ? - var/exclaim_verb = "восклицает" // Used when sentence ends in a ! - var/screem_verb = "кричит" - var/whisper_verb // Optional. When not specified speech_verb + quietly/softly is used instead. - var/signlang_verb = list("жестикулирует") // list of emotes that might be displayed if this language has NONVERBAL or SIGNLANG flags - var/colour = "body" // CSS style to use for strings in this language. - var/key = "" // Character used to speak in language eg. :o for Unathi. - var/flags = 0 // Various language flags. - var/native // If set, non-native speakers will have trouble speaking. - var/list/syllables // Used when scrambling text for a non-speaker. - var/list/space_chance = 55 // Likelihood of getting a space in the random scramble string - var/machine_understands = 1 // Whether machines can parse and understand this language - var/shorthand = "???" // Shorthand that shows up in chat for this language. - var/list/partial_understanding // List of languages that can /somehwat/ understand it, format is: name = chance of understanding a word - var/warning = "" - var/hidden_from_codex // If it should not show up in Codex - var/category = /datum/language // Used to point at root language types that shouldn't be visible - var/has_written_form = FALSE - -/datum/language/proc/can_be_spoken_properly_by(var/mob/speaker) - return TRUE - -/datum/language/proc/muddle(var/message) - return message - -/datum/language/proc/get_random_name(var/gender, name_count=2, syllable_count=4, syllable_divisor=2) - if(!syllables || !syllables.len) - if(gender==FEMALE) - return capitalize(pick(GLOB.first_names_female)) + " " + capitalize(pick(GLOB.last_names)) - else - return capitalize(pick(GLOB.first_names_male)) + " " + capitalize(pick(GLOB.last_names)) - - var/full_name = "" - var/new_name = "" - - for(var/i = 0;i0;x--) - new_name += pick(syllables) - full_name += " [capitalize(lowertext(new_name))]" - - return "[trim(full_name)]" - -/datum/language - var/list/scramble_cache = list() - -/datum/language/proc/scramble(var/input, var/list/known_languages) - - var/understand_chance = 0 - for(var/datum/language/L in known_languages) - if(LAZYACCESS(partial_understanding, L.name)) - understand_chance += partial_understanding[L.name] - - var/list/words = splittext(input, " ") - var/list/scrambled_text = list() - var/new_sentence = 0 - for(var/w in words) - var/nword = "[w] " - var/input_ending = copytext_char(w, length(w)) - var/ends_sentence = findtext(".?!",input_ending) - if(!prob(understand_chance)) - nword = scramble_word(w) - if(new_sentence) - nword = capitalize(nword) - new_sentence = FALSE - if(ends_sentence) - nword = trim(nword) - nword = "[nword][input_ending] " - - if(ends_sentence) - new_sentence = TRUE - - scrambled_text += nword - - . = jointext(scrambled_text, null) - . = capitalize(.) - . = trim(.) - -/datum/language/proc/scramble_word(var/input) - if(!syllables || !syllables.len) - return stars(input) - - // If the input is cached already, move it to the end of the cache and return it - if(input in scramble_cache) - var/n = scramble_cache[input] - scramble_cache -= input - scramble_cache[input] = n - return n - - var/input_size = length(input) - var/scrambled_text = "" - var/capitalize = 0 - - while(length(scrambled_text) < input_size) - var/next = pick(syllables) - if(capitalize) - next = capitalize(next) - capitalize = 0 - scrambled_text += next - var/chance = rand(100) - if(chance <= 5) - scrambled_text += ". " - capitalize = 1 - else if(chance > 5 && chance <= space_chance) - scrambled_text += " " - - // 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/format_message(message, verb, var/fontsize = null) - var/F1 = fontsize ? "" : "" - var/F2 = fontsize ? "" : "" - return "[verb], [F1]\"[capitalize(message)]\"[F2]" - -/datum/language/proc/format_message_plain(message, verb) - return "[verb], \"[capitalize(message)]\"" - -/datum/language/proc/format_message_radio(message, verb) - return "[verb], \"[capitalize(message)]\"" - -/datum/language/proc/get_talkinto_msg_range(message) - // if you yell, you'll be heard from two tiles over instead of one - return (copytext_char(message, length(message)) == "!") ? 2 : 1 - -/datum/language/proc/broadcast(var/mob/living/speaker,var/message,var/speaker_mask) - log_say("[key_name(speaker)] : ([name]) [message]") - - if(!speaker_mask) speaker_mask = speaker.name - message = format_message(message, get_spoken_verb(message)) - - for(var/mob/player in GLOB.player_list) - player.hear_broadcast(src, speaker, speaker_mask, message) - -/mob/proc/hear_broadcast(var/datum/language/language, var/mob/speaker, var/speaker_name, var/message) - if((language in languages) && language.check_special_condition(src)) - var/msg = "[language.name], [speaker_name] [message]" - to_chat(src, msg) - -/mob/new_player/hear_broadcast(var/datum/language/language, var/mob/speaker, var/speaker_name, var/message) - return - -/mob/observer/ghost/hear_broadcast(var/datum/language/language, var/mob/speaker, var/speaker_name, var/message) - if(speaker.name == speaker_name || antagHUD) - to_chat(src, "[language.name], [speaker_name] ([ghost_follow_link(speaker, src)]) [message]") - else - to_chat(src, "[language.name], [speaker_name] [message]") - -/datum/language/proc/check_special_condition(var/mob/other) - return 1 - -/datum/language/proc/get_spoken_verb(var/msg_end) - switch(msg_end) - if("!") - return exclaim_verb - if("?") - return ask_verb - if("!!") - return screem_verb - return speech_verb - -/datum/language/proc/can_speak_special(var/mob/speaker) - return 1 - -// Language handling. -/mob/proc/add_language(var/language) - var/datum/language/new_language = all_languages[language] - - if(!istype(new_language) || (new_language in languages)) - return 0 - languages.Add(new_language) - return 1 - -/mob/proc/remove_language(var/rem_language) - var/datum/language/L = all_languages[rem_language] - . = (L in languages) - languages.Remove(L) - -/mob/living/remove_language(rem_language) - var/datum/language/L = all_languages[rem_language] - if(default_language == L) - default_language = null - return ..() - -// Can we speak this language, as opposed to just understanding it? -/mob/proc/can_speak(datum/language/speaking) - if(!speaking) - return 0 - - if (only_species_language && speaking != all_languages[species_language]) - return 0 - - return (speaking.can_speak_special(src) && (universal_speak || (speaking && speaking.flags & INNATE) || (speaking in src.languages))) - -/mob/proc/get_language_prefix() - return get_prefix_key(/decl/prefix/language) - -/mob/proc/is_language_prefix(var/prefix) - return prefix == get_prefix_key(/decl/prefix/language) - -//TBD -/mob/verb/check_languages() - set name = "Check Known Languages" - set category = "IC" - set src = usr - - var/dat = "Known Languages

              " - - for(var/datum/language/L in languages) - if(!(L.flags & NONGLOBAL)) - dat += "[L.name]([L.shorthand]) ([get_language_prefix()][L.key])
              [L.desc]

              " - - show_browser(src, dat, "window=checklanguage") - return - -/mob/living/check_languages() - var/dat = "Known Languages

              " - - if(default_language) - dat += "Current default language: [default_language] - reset

              " - - for(var/datum/language/L in languages) - if(!(L.flags & NONGLOBAL)) - if(L == default_language) - dat += "[L.name]([L.shorthand]) ([get_language_prefix()][L.key]) - default - reset
              [L.desc]

              " - else if (can_speak(L)) - dat += "[L.name]([L.shorthand]) ([get_language_prefix()][L.key]) - set default
              [L.desc]

              " - else - dat += "[L.name]([L.shorthand]) ([get_language_prefix()][L.key]) - cannot speak!
              [L.desc]

              " - - show_browser(src, dat, "window=checklanguage") - -/mob/living/OnSelfTopic(href_list, topic_status) - if(href_list["default_lang"]) - if(href_list["default_lang"] == "reset") - - if (species_language) - set_default_language(all_languages[species_language]) - else - set_default_language(null) - - else - var/datum/language/L = locate(href_list["default_lang"]) - if(L && (L in languages)) - set_default_language(L) - check_languages() - return TOPIC_HANDLED - return ..() - -/proc/transfer_languages(var/mob/source, var/mob/target, var/except_flags) - for(var/datum/language/L in source.languages) - if(L.flags & except_flags) - continue - target.add_language(L.name) - -#undef SCRAMBLE_CACHE_LEN diff --git a/code/modules/mob/language/synthetic.dm b/code/modules/mob/language/synthetic.dm deleted file mode 100644 index 46b3034d0c973..0000000000000 --- a/code/modules/mob/language/synthetic.dm +++ /dev/null @@ -1,87 +0,0 @@ -/datum/language/binary - name = LANGUAGE_ROBOT_GLOBAL - desc = "Most human facilities support free-use communications protocols and routing hubs for synthetic use." - colour = "say_quote" - speech_verb = "states" - ask_verb = "queries" - exclaim_verb = "declares" - key = "b" - flags = RESTRICTED | HIVEMIND - shorthand = "N/A" - var/drone_only - -/datum/language/binary/broadcast(var/mob/living/speaker,var/message,var/speaker_mask) - - if(!speaker.binarycheck()) - return - - if (!message) - return - - var/message_start = "[name], [speaker.name]" - var/message_body = "[speaker.say_quote(message)], \"[message]\"" - - for (var/mob/observer/ghost/O in GLOB.ghost_mob_list) - O.show_message("[message_start] ([ghost_follow_link(speaker, O)]) [message_body]", 2) - - for (var/mob/M in GLOB.dead_mob_list_) - if(!istype(M,/mob/new_player) && !istype(M,/mob/living/carbon/brain)) //No meta-evesdropping - M.show_message("[message_start] ([ghost_follow_link(speaker, M)]) [message_body]", 2) - - for (var/mob/living/S in GLOB.living_mob_list_) - if(drone_only && !istype(S,/mob/living/silicon/robot/drone)) - continue - else if(istype(S , /mob/living/silicon/ai)) - message_start = "[name], [speaker.name]" - else if (!S.binarycheck()) - continue - - S.show_message("[message_start] [message_body]", 2) - - var/list/listening = hearers(1, src) - listening -= src - - for (var/mob/living/M in listening) - if(istype(M, /mob/living/silicon) || M.binarycheck()) - continue - M.show_message("synthesised voice beeps, \"beep beep beep\"",2) - - //robot binary xmitter component power usage - if (isrobot(speaker)) - var/mob/living/silicon/robot/R = speaker - var/datum/robot_component/C = R.components["comms"] - R.cell_use_power(C.active_usage) - -/datum/language/binary/drone - name = LANGUAGE_DRONE_GLOBAL - desc = "A heavily encoded damage control coordination stream." - speech_verb = "transmits" - ask_verb = "transmits" - exclaim_verb = "transmits" - colour = "say_quote" - key = "d" - flags = RESTRICTED | HIVEMIND - drone_only = 1 - shorthand = "N/A" - -/datum/language/machine - name = LANGUAGE_EAL - desc = "An efficient language of encoded tones developed by synthetics and cyborgs." - speech_verb = "whistles" - ask_verb = "chirps" - exclaim_verb = "whistles loudly" - colour = "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 - shorthand = "EAL" - -/datum/language/machine/can_speak_special(var/mob/living/speaker) - return speaker.isSynthetic() - -/datum/language/machine/get_random_name() - if(prob(70)) - return "[pick(list("PBU","HIU","SINA","ARMA","OSI"))]-[rand(100, 999)]" - return pick(GLOB.ai_names) - diff --git a/code/modules/mob/living/autohiss.dm b/code/modules/mob/living/autohiss.dm deleted file mode 100644 index 5ff830cbde24c..0000000000000 --- a/code/modules/mob/living/autohiss.dm +++ /dev/null @@ -1,67 +0,0 @@ -#define AUTOHISS_NUM 3 - - -/mob/living/proc/handle_autohiss(message, datum/language/L) - return message // no autohiss at this level - -/mob/living/carbon/human/handle_autohiss(message, datum/language/L) - if(!client || get_preference_value(/datum/client_preference/autohiss) == GLOB.PREF_OFF) // no need to process if there's no client or they have autohiss off - return message - return species.handle_autohiss(message, L, get_preference_value(/datum/client_preference/autohiss)) - -/datum/species - var/list/autohiss_basic_map = null - var/list/autohiss_extra_map = null - var/list/autohiss_exempt = null - -/datum/species/unathi - autohiss_basic_map = list( - "s" = list("ss", "sss", "ssss") - ) - autohiss_extra_map = list( - "x" = list("ks", "kss", "ksss") - ) - autohiss_exempt = list( - LANGUAGE_UNATHI_SINTA, - LANGUAGE_UNATHI_YEOSA - ) - -/datum/species/proc/handle_autohiss(message, datum/language/lang, mode) - if(!autohiss_basic_map) - return message - if(lang.flags & NO_STUTTER) // Currently prevents EAL, Sign language, and emotes from autohissing - return message - if(autohiss_exempt && (lang.name in autohiss_exempt)) - return message - - var/map = autohiss_basic_map.Copy() - if(mode == GLOB.PREF_FULL && autohiss_extra_map) - map |= autohiss_extra_map - - . = list() - - while(length(message)) - var/min_index = 10000 // if the message is longer than this, the autohiss is the least of your problems - var/min_char = null - for(var/char in map) - var/i = findtext_char(message, char) - if(!i) // no more of this character anywhere in the string, don't even bother searching next time - map -= char - else if(i < min_index) - min_index = i - min_char = char - if(!min_char) // we didn't find any of the mapping characters - . += message - break - . += copytext_char(message, 1, min_index) - if(copytext_char(message, min_index, min_index+1) == uppertext(min_char)) - switch(text2ascii(message, min_index+1)) - if(65 to 90) // A-Z, uppercase; uppercase R/S followed by another uppercase letter, uppercase the entire replacement string - . += uppertext(pick(map[min_char])) - else - . += capitalize(pick(map[min_char])) - else - . += pick(map[min_char]) - message = copytext_char(message, min_index + 1) - - return jointext(., null) diff --git a/code/modules/mob/living/bot/bot.dm b/code/modules/mob/living/bot/bot.dm deleted file mode 100644 index 44b9800b39dfe..0000000000000 --- a/code/modules/mob/living/bot/bot.dm +++ /dev/null @@ -1,422 +0,0 @@ -/mob/living/bot - name = "Bot" - health = 20 - maxHealth = 20 - icon = 'icons/mob/bot/placeholder.dmi' - universal_speak = TRUE - density = FALSE - - meat_type = null - meat_amount = 0 - skin_material = null - skin_amount = 0 - bone_material = null - bone_amount = 0 - - var/obj/item/card/id/botcard = null - var/list/botcard_access = list() - var/on = 1 - var/open = 0 - var/locked = 1 - var/emagged = FALSE - var/light_strength = 3 - var/busy = 0 - - var/obj/access_scanner = null - var/list/req_access = list() - - var/atom/target = null - var/list/ignore_list = list() - var/list/patrol_path = list() - var/list/target_path = list() - var/turf/obstacle = null - - var/wait_if_pulled = 0 // Only applies to moving to the target - var/will_patrol = 0 // If set to 1, will patrol, duh - var/patrol_speed = 1 // How many times per tick we move when patrolling - var/target_speed = 2 // Ditto for chasing the target - var/min_target_dist = 1 // How close we try to get to the target - var/max_target_dist = 50 // How far we are willing to go - var/max_patrol_dist = 250 - var/RequiresAccessToToggle = 0 // If 1, will check access to be turned on/off - - var/target_patience = 5 - var/frustration = 0 - var/max_frustration = 0 - - layer = HIDING_MOB_LAYER - -/mob/living/bot/New() - ..() - update_icons() - - botcard = new /obj/item/card/id(src) - botcard.access = botcard_access.Copy() - - access_scanner = new /obj(src) - access_scanner.req_access = req_access.Copy() - -/mob/living/bot/Initialize() - . = ..() - if(on) - turn_on() // Update lights and other stuff - else - turn_off() - -/mob/living/bot/Life() - ..() - if(health <= 0) - death() - return - weakened = 0 - stunned = 0 - paralysis = 0 - - if(on && !client && !busy) - spawn(0) - handleAI() - -/mob/living/bot/death() - explode() - -/mob/living/bot/attackby(var/obj/item/O, var/mob/user) - if(O.GetIdCard()) - if(access_scanner.allowed(user) && !open) - locked = !locked - to_chat(user, "Controls are now [locked ? "locked." : "unlocked."]") - Interact(usr) - else if(open) - to_chat(user, "Please close the access panel before locking it.") - else - to_chat(user, "Access denied.") - return - else if(isScrewdriver(O)) - if(!locked) - open = !open - to_chat(user, "Maintenance panel is now [open ? "opened" : "closed"].") - Interact(usr) - else - to_chat(user, "You need to unlock the controls first.") - return - else if(isWelder(O)) - if(health < maxHealth) - if(open) - health = min(maxHealth, health + 10) - user.visible_message("\The [user] repairs \the [src].","You repair \the [src].") - else - to_chat(user, "Unable to repair with the maintenance panel closed.") - else - to_chat(user, "\The [src] does not need a repair.") - return - else - ..() - -/mob/living/bot/attack_ai(var/mob/user) - Interact(user) - -/mob/living/bot/attack_hand(var/mob/user) - Interact(user) - -/mob/living/bot/proc/Interact(var/mob/user) - add_fingerprint(user) - var/dat - - var/curText = GetInteractTitle() - if(curText) - dat += curText - dat += "
              " - - curText = GetInteractStatus() - if(curText) - dat += curText - dat += "
              " - - curText = (CanAccessPanel(user)) ? GetInteractPanel() : "The access panel is locked." - if(curText) - dat += curText - dat += "
              " - - curText = (CanAccessMaintenance(user)) ? GetInteractMaintenance() : "The maintenance panel is locked." - if(curText) - dat += curText - - var/datum/browser/popup = new(user, "botpanel", "[src] controls") - popup.set_content(dat) - popup.open() - -/mob/living/bot/DefaultTopicState() - return GLOB.default_state - -/mob/living/bot/OnTopic(mob/user, href_list) - if(href_list["command"]) - ProcessCommand(user, href_list["command"], href_list) - Interact(user) - -/mob/living/bot/proc/GetInteractTitle() - return - -/mob/living/bot/proc/GetInteractStatus() - . = "Status: [on ? "On" : "Off"]" - . += "
              Behaviour controls are [locked ? "locked" : "unlocked"]" - . += "
              Maintenance panel is [open ? "opened" : "closed"]" - -/mob/living/bot/proc/GetInteractPanel() - return - -/mob/living/bot/proc/GetInteractMaintenance() - return - -/mob/living/bot/proc/ProcessCommand(var/mob/user, var/command, var/href_list) - if(command == "toggle" && CanToggle(user)) - if(on) - turn_off() - else - turn_on() - return - -/mob/living/bot/proc/CanToggle(var/mob/user) - return (!RequiresAccessToToggle || access_scanner.allowed(user) || issilicon(user)) - -/mob/living/bot/proc/CanAccessPanel(var/mob/user) - return (!locked || issilicon(user)) - -/mob/living/bot/proc/CanAccessMaintenance(var/mob/user) - return (open || issilicon(user)) - -/mob/living/bot/say(var/message) - var/verb = "beeps" - - message = sanitize(message) - - ..(message, null, verb) - -/mob/living/bot/Bump(var/atom/A) - if(on && botcard && istype(A, /obj/machinery/door)) - var/obj/machinery/door/D = A - if(!istype(D, /obj/machinery/door/firedoor) && !istype(D, /obj/machinery/door/blast) && D.check_access(botcard)) - D.open() - else - ..() - -/mob/living/bot/emag_act(var/remaining_charges, var/mob/user) - return 0 - -/mob/living/bot/proc/handleAI() - if(ignore_list.len) - for(var/atom/A in ignore_list) - if(!A || !A.loc || prob(1)) - ignore_list -= A - handleRegular() - if(target && confirmTarget(target)) - if(Adjacent(target)) - handleAdjacentTarget() - else - handleRangedTarget() - if(!wait_if_pulled || !pulledby) - for(var/i = 1 to target_speed) - sleep(20 / (target_speed + 1)) - stepToTarget() - if(max_frustration && frustration > max_frustration * target_speed) - handleFrustrated(1) - else - resetTarget() - lookForTargets() - if(will_patrol && !pulledby && !target) - if(patrol_path && patrol_path.len) - for(var/i = 1 to patrol_speed) - sleep(20 / (patrol_speed + 1)) - handlePatrol() - if(max_frustration && frustration > max_frustration * patrol_speed) - handleFrustrated(0) - else - startPatrol() - else - handleIdle() - -/mob/living/bot/proc/handleRegular() - return - -/mob/living/bot/proc/handleAdjacentTarget() - return - -/mob/living/bot/proc/handleRangedTarget() - return - -/mob/living/bot/proc/stepToTarget() - if(!target || !target.loc) - return - if(get_dist(src, target) > min_target_dist) - if(!target_path.len || get_turf(target) != target_path[target_path.len]) - calcTargetPath() - if(makeStep(target_path)) - frustration = 0 - else if(max_frustration) - ++frustration - return - -/mob/living/bot/proc/handleFrustrated(var/targ) - obstacle = targ ? target_path[1] : patrol_path[1] - target_path = list() - patrol_path = list() - return - -/mob/living/bot/proc/lookForTargets() - return - -/mob/living/bot/proc/confirmTarget(var/atom/A) - if(A.invisibility >= INVISIBILITY_LEVEL_ONE) - return 0 - if(A in ignore_list) - return 0 - if(!A.loc) - return 0 - return 1 - -/mob/living/bot/proc/handlePatrol() - makeStep(patrol_path) - return - -/mob/living/bot/proc/startPatrol() - var/turf/T = getPatrolTurf() - if(T) - patrol_path = AStar(get_turf(loc), T, /turf/proc/CardinalTurfsWithAccess, /turf/proc/Distance, 0, max_patrol_dist, id = botcard, exclude = obstacle) - if(!patrol_path) - patrol_path = list() - obstacle = null - return - -/mob/living/bot/proc/getPatrolTurf() - var/minDist = INFINITY - var/obj/machinery/navbeacon/targ = locate() in get_turf(src) - - if(!targ) - for(var/obj/machinery/navbeacon/N in navbeacons) - if(!N.codes["patrol"]) - continue - if(get_dist(src, N) < minDist) - minDist = get_dist(src, N) - targ = N - - if(targ && targ.codes["next_patrol"]) - for(var/obj/machinery/navbeacon/N in navbeacons) - if(N.location == targ.codes["next_patrol"]) - targ = N - break - - if(targ) - return get_turf(targ) - return null - -/mob/living/bot/proc/handleIdle() - return - -/mob/living/bot/proc/calcTargetPath() - target_path = AStar(get_turf(loc), get_turf(target), /turf/proc/CardinalTurfsWithAccess, /turf/proc/Distance, 0, max_target_dist, id = botcard, exclude = obstacle) - if(!target_path) - if(target && target.loc) - ignore_list |= target - resetTarget() - obstacle = null - return - -/mob/living/bot/proc/makeStep(var/list/path) - if(!path.len) - return 0 - var/turf/T = path[1] - if(get_turf(src) == T) - path -= T - return makeStep(path) - - return step_towards(src, T) - -/mob/living/bot/proc/resetTarget() - target = null - target_path = list() - frustration = 0 - obstacle = null - -/mob/living/bot/proc/turn_on() - if(stat) - return 0 - on = 1 - set_light(0.5, 0.1, light_strength) - update_icons() - resetTarget() - patrol_path = list() - ignore_list = list() - return 1 - -/mob/living/bot/proc/turn_off() - on = 0 - set_light(0) - update_icons() - -/mob/living/bot/proc/explode() - qdel(src) - -/******************************************************************/ -// Navigation procs -// Used for A-star pathfinding - - -// Returns the surrounding cardinal turfs with open links -// Including through doors openable with the ID -/turf/proc/CardinalTurfsWithAccess(var/obj/item/card/id/ID) - var/L[] = new() - - // for(var/turf/simulated/t in oview(src,1)) - - for(var/d in GLOB.cardinal) - var/turf/simulated/T = get_step(src, d) - if(istype(T) && !T.density) - if(!LinkBlockedWithAccess(src, T, ID)) - L.Add(T) - return L - - -// Returns true if a link between A and B is blocked -// Movement through doors allowed if ID has access -/proc/LinkBlockedWithAccess(turf/A, turf/B, obj/item/card/id/ID) - - if(A == null || B == null) return 1 - var/adir = get_dir(A,B) - var/rdir = get_dir(B,A) - if((adir & (NORTH|SOUTH)) && (adir & (EAST|WEST))) // diagonal - var/iStep = get_step(A,adir&(NORTH|SOUTH)) - if(!LinkBlockedWithAccess(A,iStep, ID) && !LinkBlockedWithAccess(iStep,B,ID)) - return 0 - - var/pStep = get_step(A,adir&(EAST|WEST)) - if(!LinkBlockedWithAccess(A,pStep,ID) && !LinkBlockedWithAccess(pStep,B,ID)) - return 0 - return 1 - - if(DirBlockedWithAccess(A,adir, ID)) - return 1 - - if(DirBlockedWithAccess(B,rdir, ID)) - return 1 - - for(var/obj/O in B) - if(O.density && !istype(O, /obj/machinery/door) && !(O.atom_flags & ATOM_FLAG_CHECKS_BORDER)) - return 1 - - return 0 - -// Returns true if direction is blocked from loc -// Checks doors against access with given ID -/proc/DirBlockedWithAccess(turf/loc,var/dir,var/obj/item/card/id/ID) - for(var/obj/structure/window/D in loc) - if(!D.density) continue - if(D.dir == SOUTHWEST) return 1 - if(D.dir == dir) return 1 - - for(var/obj/machinery/door/D in loc) - if(!D.density) continue - if(istype(D, /obj/machinery/door/window)) - if( dir & D.dir ) return !D.check_access(ID) - - //if((dir & SOUTH) && (D.dir & (EAST|WEST))) return !D.check_access(ID) - //if((dir & EAST ) && (D.dir & (NORTH|SOUTH))) return !D.check_access(ID) - else return !D.check_access(ID) // it's a real, air blocking door - return 0 diff --git a/code/modules/mob/living/bot/cleanbot.dm b/code/modules/mob/living/bot/cleanbot.dm deleted file mode 100644 index 5dc2e3d706d26..0000000000000 --- a/code/modules/mob/living/bot/cleanbot.dm +++ /dev/null @@ -1,159 +0,0 @@ -/mob/living/bot/cleanbot - name = "Cleanbot" - desc = "A little cleaning robot, he looks so excited!" - icon = 'icons/mob/bot/cleanbot.dmi' - icon_state = "cleanbot0" - req_access = list(list(access_janitor, access_robotics)) - botcard_access = list(access_janitor, access_maint_tunnels) - - wait_if_pulled = 1 - min_target_dist = 0 - - var/cleaning = 0 - var/screwloose = 0 - var/oddbutton = 0 - var/blood = 1 - var/list/target_types = list() - -/mob/living/bot/cleanbot/New() - ..() - get_targets() - -/mob/living/bot/cleanbot/handleIdle() - if(!screwloose && !oddbutton && prob(5)) - visible_message("\The [src] makes an excited beeping booping sound!") - - if(screwloose && prob(5)) // Make a mess - if(istype(loc, /turf/simulated)) - var/turf/simulated/T = loc - T.wet_floor() - - if(oddbutton && prob(5)) // Make a big mess - visible_message("Something flies out of [src]. He seems to be acting oddly.") - var/obj/effect/decal/cleanable/blood/gibs/gib = new /obj/effect/decal/cleanable/blood/gibs(loc) - var/weakref/g = weakref(gib) - ignore_list += g - spawn(600) - ignore_list -= g - -/mob/living/bot/cleanbot/lookForTargets() - for(var/obj/effect/decal/cleanable/D in view(world.view + 1, src)) - if(confirmTarget(D)) - target = D - playsound(src, 'sound/machines/boop1.ogg', 30) - return - -/mob/living/bot/cleanbot/confirmTarget(var/obj/effect/decal/cleanable/D) - if(!..()) - return 0 - for(var/T in target_types) - if(istype(D, T)) - return 1 - return 0 - -/mob/living/bot/cleanbot/handleAdjacentTarget() - if(get_turf(target) == src.loc) - UnarmedAttack(target) - -/mob/living/bot/cleanbot/UnarmedAttack(var/obj/effect/decal/cleanable/D, var/proximity) - if(!..()) - return - - if(!istype(D)) - return - - if(D.loc != loc) - return - - busy = 1 - visible_message("\The [src] begins to clean up \the [D]") - update_icons() - var/cleantime = (istype(D, /obj/effect/decal/cleanable/dirt) ? 1 : 5) SECONDS - if(do_after(src, cleantime, D, DO_DEFAULT | DO_USER_UNIQUE_ACT | DO_PUBLIC_PROGRESS)) - if(istype(loc, /turf/simulated)) - var/turf/simulated/f = loc - f.dirt = 0 - if(!D) - return - qdel(D) - if(D == target) - target = null - playsound(src, 'sound/machines/boop2.ogg', 30) - busy = 0 - update_icons() - -/mob/living/bot/cleanbot/explode() - on = 0 - visible_message("[src] blows apart!") - var/turf/Tsec = get_turf(src) - - new /obj/item/reagent_containers/glass/bucket(Tsec) - new /obj/item/device/assembly/prox_sensor(Tsec) - if(prob(50)) - new /obj/item/robot_parts/l_arm(Tsec) - - var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread - s.set_up(3, 1, src) - s.start() - qdel(src) - return - -/mob/living/bot/cleanbot/update_icons() - if(busy) - icon_state = "cleanbot-c" - else - icon_state = "cleanbot[on]" - -/mob/living/bot/cleanbot/GetInteractTitle() - . = "Cleanbot controls" - . += "Automatic Cleaner v1.0" - -/mob/living/bot/cleanbot/GetInteractPanel() - . = "Cleans blood: [blood ? "Yes" : "No"]" - . += "
              Patrol station: [will_patrol ? "Yes" : "No"]" - -/mob/living/bot/cleanbot/GetInteractMaintenance() - . = "Odd looking screw twiddled: [screwloose ? "Yes" : "No"]" - . += "
              Weird button pressed: [oddbutton ? "Yes" : "No"]" - -/mob/living/bot/cleanbot/ProcessCommand(var/mob/user, var/command, var/href_list) - ..() - if(CanAccessPanel(user)) - switch(command) - if("blood") - blood = !blood - get_targets() - if("patrol") - will_patrol = !will_patrol - patrol_path = null - - if(CanAccessMaintenance(user)) - switch(command) - if("screw") - screwloose = !screwloose - if("oddbutton") - oddbutton = !oddbutton - -/mob/living/bot/cleanbot/emag_act(var/remaining_uses, var/mob/user) - . = ..() - if(!screwloose || !oddbutton) - if(user) - to_chat(user, "The [src] buzzes and beeps.") - oddbutton = 1 - screwloose = 1 - return 1 - -/mob/living/bot/cleanbot/proc/get_targets() - target_types = list() - - target_types += /obj/effect/decal/cleanable/blood/oil - target_types += /obj/effect/decal/cleanable/vomit - target_types += /obj/effect/decal/cleanable/crayon - target_types += /obj/effect/decal/cleanable/liquid_fuel - target_types += /obj/effect/decal/cleanable/mucus - target_types += /obj/effect/decal/cleanable/dirt - target_types += /obj/effect/decal/cleanable/filth - target_types += /obj/effect/decal/cleanable/spiderling_remains - - if(blood) - target_types += /obj/effect/decal/cleanable/blood diff --git a/code/modules/mob/living/bot/ed209bot.dm b/code/modules/mob/living/bot/ed209bot.dm deleted file mode 100644 index 67f5d53f0041a..0000000000000 --- a/code/modules/mob/living/bot/ed209bot.dm +++ /dev/null @@ -1,66 +0,0 @@ -/mob/living/bot/secbot/ed209 - name = "ED-209 Security Robot" - desc = "A security robot. He looks less than thrilled." - icon = 'icons/mob/bot/ED209.dmi' - icon_state = "ed2090" - attack_state = "ed209-c" - layer = MOB_LAYER - density = TRUE - health = 100 - maxHealth = 100 - - is_ranged = 1 - preparing_arrest_sounds = new() - - a_intent = I_HURT - mob_bump_flag = HEAVY - mob_swap_flags = ~HEAVY - mob_push_flags = HEAVY - - var/shot_delay = 4 - var/last_shot = 0 - -/mob/living/bot/secbot/ed209/update_icons() - icon_state = "ed2090" - -/mob/living/bot/secbot/ed209/explode() - visible_message("[src] blows apart!") - var/turf/Tsec = get_turf(src) - - var/obj/item/gun/energy/taser/G = new /obj/item/gun/energy/taser(Tsec) - G.power_supply.charge = 0 - if(prob(50)) - new /obj/item/robot_parts/l_leg(Tsec) - if(prob(50)) - new /obj/item/robot_parts/r_leg(Tsec) - if(prob(50)) - if(prob(50)) - new /obj/item/clothing/head/helmet(Tsec) - else - new /obj/item/clothing/suit/armor/vest(Tsec) - - var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread - s.set_up(3, 1, src) - s.start() - - new /obj/effect/decal/cleanable/blood/oil(Tsec) - qdel(src) - -/mob/living/bot/secbot/ed209/handleRangedTarget() - RangedAttack(target) - -/mob/living/bot/secbot/ed209/RangedAttack(var/atom/A, var/params) - if(last_shot + shot_delay > world.time) - to_chat(src, "You are not ready to fire yet!") - return TRUE - - last_shot = world.time - var/projectile = /obj/item/projectile/beam/stun - if(emagged) - projectile = /obj/item/projectile/beam - - playsound(loc, emagged ? 'sound/weapons/Laser.ogg' : 'sound/weapons/Taser.ogg', 50, 1) - var/obj/item/projectile/P = new projectile(loc) - var/def_zone = get_exposed_defense_zone(A) - P.launch(A, def_zone) - return TRUE diff --git a/code/modules/mob/living/bot/farmbot.dm b/code/modules/mob/living/bot/farmbot.dm deleted file mode 100644 index ecfd31969a624..0000000000000 --- a/code/modules/mob/living/bot/farmbot.dm +++ /dev/null @@ -1,281 +0,0 @@ -#define FARMBOT_COLLECT 1 -#define FARMBOT_WATER 2 -#define FARMBOT_UPROOT 3 -#define FARMBOT_NUTRIMENT 4 - -/mob/living/bot/farmbot - name = "Farmbot" - desc = "The botanist's best friend." - icon = 'icons/mob/bot/farmbot.dmi' - icon_state = "farmbot0" - health = 50 - maxHealth = 50 - req_access = list(list(access_hydroponics, access_robotics)) - - var/action = "" // Used to update icon - var/waters_trays = 1 - var/refills_water = 1 - var/uproots_weeds = 1 - var/replaces_nutriment = 0 - var/collects_produce = 0 - var/removes_dead = 0 - - var/obj/structure/reagent_dispensers/watertank/tank - -/mob/living/bot/farmbot/New(var/newloc, var/newTank) - ..(newloc) - if(!newTank) - newTank = new /obj/structure/reagent_dispensers/watertank(src) - tank = newTank - tank.forceMove(src) - -/mob/living/bot/farmbot/premade - name = "Old Ben" - on = 0 - -/mob/living/bot/farmbot/GetInteractTitle() - . = "Farmbot controls" - . += "Automatic Hyrdoponic Assisting Unit v1.0" - -/mob/living/bot/farmbot/GetInteractStatus() - . = ..() - . += "
              Water tank: " - if(tank) - . += "[tank.reagents.total_volume]/[tank.reagents.maximum_volume]" - else - . += "error: not found" - -/mob/living/bot/farmbot/GetInteractPanel() - . = "Water plants : [waters_trays ? "Yes" : "No"]" - . += "
              Refill watertank : [refills_water ? "Yes" : "No"]" - . += "
              Weed plants: [uproots_weeds ? "Yes" : "No"]" - . += "
              Replace fertilizer: [replaces_nutriment ? "Yes" : "No"]" - . += "
              Collect produce: [collects_produce ? "Yes" : "No"]" - . += "
              Remove dead plants: [removes_dead ? "Yes" : "No"]" - -/mob/living/bot/farmbot/GetInteractMaintenance() - . = "Plant identifier status: " - switch(emagged) - if(0) - . += "Normal" - if(1) - . += "Scrambled (DANGER)" - if(2) - . += "ERROROROROROR-----" - -/mob/living/bot/farmbot/ProcessCommand(var/mob/user, var/command, var/href_list) - ..() - if(CanAccessPanel(user)) - switch(command) - if("water") - waters_trays = !waters_trays - if("refill") - refills_water = !refills_water - if("weed") - uproots_weeds = !uproots_weeds - if("replacenutri") - replaces_nutriment = !replaces_nutriment - if("collect") - collects_produce = !collects_produce - if("removedead") - removes_dead = !removes_dead - - if(CanAccessMaintenance(user)) - switch(command) - if("emag") - if(emagged < 2) - emagged = !emagged - -/mob/living/bot/farmbot/emag_act(var/remaining_charges, var/mob/user) - . = ..() - if(!emagged) - if(user) - to_chat(user, "You short out [src]'s plant identifier circuits.") - ignore_list |= user - emagged = TRUE - return 1 - -/mob/living/bot/farmbot/update_icons() - if(on && action) - icon_state = "farmbot_[action]" - else - icon_state = "farmbot[on]" - -/mob/living/bot/farmbot/handleRegular() - if(emagged && prob(1)) - flick("farmbot_broke", src) - -/mob/living/bot/farmbot/handleAdjacentTarget() - UnarmedAttack(target) - -/mob/living/bot/farmbot/lookForTargets() - if(emagged) - for(var/mob/living/carbon/human/H in view(7, src)) - target = H - return - else - for(var/obj/machinery/portable_atmospherics/hydroponics/tray in view(7, src)) - if(confirmTarget(tray)) - target = tray - return - if(!target && refills_water && tank && tank.reagents.total_volume < tank.reagents.maximum_volume) - for(var/obj/structure/hygiene/sink/source in view(7, src)) - target = source - return - -/mob/living/bot/farmbot/calcTargetPath() // We need to land NEXT to the tray, because the tray itself is impassable - for(var/trayDir in list(NORTH, SOUTH, EAST, WEST)) - target_path = AStar(get_turf(loc), get_step(get_turf(target), trayDir), /turf/proc/CardinalTurfsWithAccess, /turf/proc/Distance, 0, max_target_dist, id = botcard) - if(target_path) - break - if(!target_path) - ignore_list |= target - target = null - target_path = list() - return - -/mob/living/bot/farmbot/stepToTarget() // Same reason - var/turf/T = get_turf(target) - if(!target_path.len || !T.Adjacent(target_path[target_path.len])) - calcTargetPath() - makeStep(target_path) - return - -/mob/living/bot/farmbot/UnarmedAttack(var/atom/A, var/proximity) - if(!..()) - return - if(busy) - return - - if(istype(A, /obj/machinery/portable_atmospherics/hydroponics)) - var/obj/machinery/portable_atmospherics/hydroponics/T = A - var/t = confirmTarget(T) - switch(t) - if(0) - return - if(FARMBOT_COLLECT) - action = "water" // Needs a better one - update_icons() - visible_message("[src] starts [T.dead? "removing the plant from" : "harvesting"] \the [A].") - busy = 1 - if(do_after(src, 3 SECONDS, A, DO_DEFAULT | DO_USER_UNIQUE_ACT | DO_PUBLIC_PROGRESS)) - visible_message("[src] [T.dead? "removes the plant from" : "harvests"] \the [A].") - T.physical_attack_hand(src) - if(FARMBOT_WATER) - action = "water" - update_icons() - visible_message("[src] starts watering \the [A].") - busy = 1 - if(do_after(src, 3 SECONDS, A, DO_DEFAULT | DO_USER_UNIQUE_ACT | DO_PUBLIC_PROGRESS)) - playsound(loc, 'sound/effects/slosh.ogg', 25, 1) - visible_message("[src] waters \the [A].") - tank.reagents.trans_to(T, 100 - T.waterlevel) - if(FARMBOT_UPROOT) - action = "hoe" - update_icons() - visible_message("[src] starts uprooting the weeds in \the [A].") - busy = 1 - if(do_after(src, 3 SECONDS, A, DO_DEFAULT | DO_USER_UNIQUE_ACT | DO_PUBLIC_PROGRESS)) - visible_message("[src] uproots the weeds in \the [A].") - T.weedlevel = 0 - if(FARMBOT_NUTRIMENT) - action = "fertile" - update_icons() - visible_message("[src] starts fertilizing \the [A].") - busy = 1 - if(do_after(src, 3 SECONDS, A, DO_DEFAULT | DO_USER_UNIQUE_ACT | DO_PUBLIC_PROGRESS)) - visible_message("[src] fertilizes \the [A].") - T.reagents.add_reagent(/datum/reagent/ammonia, 10) - busy = 0 - action = "" - update_icons() - T.update_icon() - else if(istype(A, /obj/structure/hygiene/sink)) - if(!tank || tank.reagents.total_volume >= tank.reagents.maximum_volume) - return - action = "water" - update_icons() - visible_message("[src] starts refilling its tank from \the [A].") - busy = 1 - while(do_after(src, 1 SECOND, src, DO_DEFAULT | DO_USER_UNIQUE_ACT | DO_PUBLIC_PROGRESS) && tank.reagents.total_volume < tank.reagents.maximum_volume) - tank.reagents.add_reagent(/datum/reagent/water, 100) - if(prob(5)) - playsound(loc, 'sound/effects/slosh.ogg', 25, 1) - busy = 0 - action = "" - update_icons() - visible_message("[src] finishes refilling its tank.") - else if(emagged && ishuman(A)) - var/action = pick("weed", "water") - busy = 1 - spawn(50) // Some delay - busy = 0 - switch(action) - if("weed") - flick("farmbot_hoe", src) - do_attack_animation(A) - if(prob(50)) - visible_message("[src] swings wildly at [A] with a minihoe, missing completely!") - return - var/t = pick("slashed", "sliced", "cut", "clawed") - A.attack_generic(src, 5, t) - if("water") - flick("farmbot_water", src) - visible_message("[src] splashes [A] with water!") - tank.reagents.splash(A, 100) - -/mob/living/bot/farmbot/explode() - visible_message("[src] blows apart!") - var/turf/Tsec = get_turf(src) - - new /obj/item/material/minihoe(Tsec) - new /obj/item/reagent_containers/glass/bucket(Tsec) - new /obj/item/device/assembly/prox_sensor(Tsec) - new /obj/item/device/scanner/plant(Tsec) - - if(tank) - tank.forceMove(Tsec) - - if(prob(50)) - new /obj/item/robot_parts/l_arm(Tsec) - - var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread - s.set_up(3, 1, src) - s.start() - qdel(src) - return - -/mob/living/bot/farmbot/confirmTarget(var/atom/targ) - if(!..()) - return 0 - - if(emagged && ishuman(targ)) - if(targ in view(world.view, src)) - return 1 - return 0 - - if(istype(targ, /obj/structure/hygiene/sink)) - if(!tank || tank.reagents.total_volume >= tank.reagents.maximum_volume) - return 0 - return 1 - - var/obj/machinery/portable_atmospherics/hydroponics/tray = targ - if(!istype(tray)) - return 0 - - if(tray.closed_system || !tray.seed) - return 0 - - if(tray.dead && removes_dead || tray.harvest && collects_produce) - return FARMBOT_COLLECT - - else if(refills_water && tray.waterlevel < 40 && !tray.reagents.has_reagent(/datum/reagent/water)) - return FARMBOT_WATER - - else if(uproots_weeds && tray.weedlevel > 3) - return FARMBOT_UPROOT - - else if(replaces_nutriment && tray.nutrilevel < 1 && tray.reagents.total_volume < 1) - return FARMBOT_NUTRIMENT - - return 0 diff --git a/code/modules/mob/living/bot/floorbot.dm b/code/modules/mob/living/bot/floorbot.dm deleted file mode 100644 index 582e653ad5043..0000000000000 --- a/code/modules/mob/living/bot/floorbot.dm +++ /dev/null @@ -1,247 +0,0 @@ -/mob/living/bot/floorbot - name = "Floorbot" - desc = "A little floor repairing robot, he looks so excited!" - icon = 'icons/mob/bot/floorbot.dmi' - icon_state = "floorbot0" - req_access = list(list(access_construction, access_robotics)) - wait_if_pulled = 1 - min_target_dist = 0 - - var/amount = 10 // 1 for tile, 2 for lattice - var/maxAmount = 60 - var/tilemake = 0 // When it reaches 100, bot makes a tile - var/improvefloors = 0 - var/eattiles = 0 - var/maketiles = 0 - var/floor_build_type = /decl/flooring/tiling // Basic steel floor. - var/boxtype = "blue" - -/mob/living/bot/floorbot/premade - name = "Rusty" - boxtype = "yellow" - on = 0 - -/mob/living/bot/floorbot/Initialize() - . = ..() - var/image/B = image(src, boxtype) - src.underlays += B - - -/mob/living/bot/floorbot/update_icons() - if(busy) - icon_state = "floorbot-c" - else if(amount > 0) - icon_state = "floorbot[on]" - else - icon_state = "floorbot[on]e" - -/mob/living/bot/floorbot/GetInteractTitle() - . = "Repairbot v1.0 controls" - . += "Automatic Floor Repairer v1.0" - -/mob/living/bot/floorbot/GetInteractStatus() - . = ..() - . += "
              Tiles left: [amount]" - -/mob/living/bot/floorbot/GetInteractPanel() - . = "Improves floors: [improvefloors ? "Yes" : "No"]" - . += "
              Finds tiles: [eattiles ? "Yes" : "No"]" - . += "
              Make single pieces of metal into tiles when empty: [maketiles ? "Yes" : "No"]" - -/mob/living/bot/floorbot/GetInteractMaintenance() - . = "Disassembly mode: " - switch(emagged) - if(0) - . += "Off" - if(1) - . += "On (Caution)" - if(2) - . += "ERROROROROROR-----" - -/mob/living/bot/floorbot/ProcessCommand(var/mob/user, var/command, var/href_list) - ..() - if(CanAccessPanel(user)) - switch(command) - if("improve") - improvefloors = !improvefloors - if("tiles") - eattiles = !eattiles - if("make") - maketiles = !maketiles - - if(CanAccessMaintenance(user)) - switch(command) - if("emag") - if(emagged < 2) - emagged = !emagged - -/mob/living/bot/floorbot/emag_act(var/remaining_charges, var/mob/user) - . = ..() - if(!emagged) - emagged = TRUE - if(user) - to_chat(user, "The [src] buzzes and beeps.") - return 1 - -/mob/living/bot/floorbot/handleRegular() - ++tilemake - if(tilemake >= 100) - tilemake = 0 - addTiles(1) - - if(prob(1)) - custom_emote(2, "makes an excited booping beeping sound!") - -/mob/living/bot/floorbot/handleAdjacentTarget() - if(get_turf(target) == src.loc) - UnarmedAttack(target) - -/mob/living/bot/floorbot/lookForTargets() - for(var/turf/simulated/floor/T in view(src)) - if(confirmTarget(T)) - target = T - return - - if(amount < maxAmount && (eattiles || maketiles)) - for(var/obj/item/stack/S in view(src)) - if(confirmTarget(S)) - target = S - return - -/mob/living/bot/floorbot/confirmTarget(var/atom/A) // The fact that we do some checks twice may seem confusing but remember that the bot's settings may be toggled while it's moving and we want them to stop in that case - anchored = FALSE - if(!..()) - return 0 - - if(istype(A, /obj/item/stack/tile/floor)) - return (amount < maxAmount && eattiles) - if(istype(A, /obj/item/stack/material/steel)) - return (amount < maxAmount && maketiles) - - if(A.loc.name == "Space") - return 0 - - var/turf/simulated/floor/T = A - if(istype(T)) - if(emagged) - return 1 - else - return (amount && (T.broken || T.burnt || (improvefloors && !T.flooring))) - -/mob/living/bot/floorbot/UnarmedAttack(var/atom/A, var/proximity) - if(!..()) - return - - if(busy) - return - - if(get_turf(A) != loc) - return - - if(emagged && istype(A, /turf/simulated/floor)) - var/turf/simulated/floor/F = A - busy = 1 - update_icons() - if(F.flooring) - visible_message("[src] begins to tear the floor tile from the floor.") - if(do_after(src, 5 SECONDS, F, DO_DEFAULT | DO_USER_UNIQUE_ACT | DO_PUBLIC_PROGRESS)) - F.break_tile_to_plating() - addTiles(1) - else - visible_message("[src] begins to tear through the floor!") - if(do_after(src, 15 SECONDS, F, DO_DEFAULT | DO_USER_UNIQUE_ACT | DO_PUBLIC_PROGRESS)) // Extra time because this can and will kill. - F.ReplaceWithLattice() - addTiles(1) - target = null - update_icons() - else if(istype(A, /turf/simulated/floor)) - var/turf/simulated/floor/F = A - if(F.broken || F.burnt) - busy = 1 - update_icons() - visible_message("[src] begins to remove the broken floor.") - anchored = TRUE - if(do_after(src, 5 SECONDS, F, DO_DEFAULT | DO_USER_UNIQUE_ACT | DO_PUBLIC_PROGRESS)) - if(F.broken || F.burnt) - F.make_plating() - anchored = FALSE - target = null - busy = 0 - update_icons() - else if(!F.flooring && amount) - busy = 1 - update_icons() - visible_message("[src] begins to improve the floor.") - anchored = TRUE - if(do_after(src, 5 SECONDS, F, DO_DEFAULT | DO_USER_UNIQUE_ACT | DO_PUBLIC_PROGRESS)) - if(!F.flooring) - F.set_flooring(decls_repository.get_decl(floor_build_type)) - addTiles(-1) - anchored = FALSE - target = null - update_icons() - else if(istype(A, /obj/item/stack/tile/floor) && amount < maxAmount) - var/obj/item/stack/tile/floor/T = A - visible_message("\The [src] begins to collect tiles.") - busy = 1 - update_icons() - anchored = TRUE - if(do_after(src, 2 SECONDS, T, DO_DEFAULT | DO_USER_UNIQUE_ACT | DO_PUBLIC_PROGRESS)) - if(T) - var/eaten = min(maxAmount - amount, T.get_amount()) - T.use(eaten) - addTiles(eaten) - anchored = FALSE - target = null - update_icons() - else if(istype(A, /obj/item/stack/material) && amount + 4 <= maxAmount) - var/obj/item/stack/material/M = A - if(M.get_material_name() == MATERIAL_STEEL) - visible_message("\The [src] begins to make tiles.") - busy = 1 - anchored = TRUE - update_icons() - if(do_after(src, 5 SECONDS, M, DO_DEFAULT | DO_USER_UNIQUE_ACT | DO_PUBLIC_PROGRESS)) - if(M) - M.use(1) - addTiles(4) - anchored = FALSE - -/mob/living/bot/floorbot/explode() - turn_off() - visible_message("[src] blows apart!") - var/turf/Tsec = get_turf(src) - - - var/list/things = list() - for(var/atom/A in orange(5, src.loc)) - things += A - - var/list/shrapnel = list() - - for(var/I = 3, I<3 , I++) //Toolbox shatters. - shrapnel += new /obj/item/material/shard/shrapnel/steel(Tsec) - - for(var/Amt = amount, Amt>0, Amt--) //Why not just spit them out in a disorganized jumble? - shrapnel += new /obj/item/stack/tile/floor(Tsec) - - if(prob(50)) - shrapnel += new /obj/item/robot_parts/l_arm(Tsec) - shrapnel += new /obj/item/device/assembly/prox_sensor(Tsec) - - var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread - s.set_up(3, 1, src) - s.start() - - for(var/atom/movable/AM in shrapnel) - AM.throw_at(pick(things),5) - - qdel(src) - -/mob/living/bot/floorbot/proc/addTiles(var/am) - amount += am - if(amount < 0) - amount = 0 - else if(amount > maxAmount) - amount = maxAmount - busy = FALSE diff --git a/code/modules/mob/living/bot/medibot.dm b/code/modules/mob/living/bot/medibot.dm deleted file mode 100644 index 00f678f700ab2..0000000000000 --- a/code/modules/mob/living/bot/medibot.dm +++ /dev/null @@ -1,250 +0,0 @@ -/mob/living/bot/medbot - name = "Medibot" - desc = "A little medical robot. He looks somewhat underwhelmed." - icon = 'icons/mob/bot/medibot.dmi' - icon_state = "medibot0" - req_access = list(list(access_medical, access_robotics)) - botcard_access = list(access_medical, access_morgue, access_surgery, access_chemistry, access_virology) - var/skin = null //Set to "tox", "ointment" or "o2" for the other two firstaid kits. - - //AI vars - var/last_newpatient_speak = 0 - var/vocal = 1 - - //Healing vars - var/obj/item/reagent_containers/glass/reagent_glass = null //Can be set to draw from this for reagents. - var/injection_amount = 15 //How much reagent do we inject at a time? - var/heal_threshold = 10 //Start healing when they have this much damage in a category - var/use_beaker = 0 //Use reagents in beaker instead of default treatment agents. - var/treatment_brute = /datum/reagent/tricordrazine - var/treatment_oxy = /datum/reagent/tricordrazine - var/treatment_fire = /datum/reagent/tricordrazine - var/treatment_tox = /datum/reagent/tricordrazine - var/treatment_emag = /datum/reagent/toxin - var/declare_treatment = 0 //When attempting to treat a patient, should it notify everyone wearing medhuds? - -/mob/living/bot/medbot/handleIdle() - if(vocal && prob(1)) - var/message = pick("Radar, put a mask on!", "There's always a catch, and it's the best there is.", "I knew it, I should've been a plastic surgeon.", "What kind of infirmary is this? Everyone's dropping like dead flies.", "Delicious!") - say(message) - -/mob/living/bot/medbot/handleAdjacentTarget() - UnarmedAttack(target) - -/mob/living/bot/medbot/lookForTargets() - for(var/mob/living/carbon/human/H in view(7, src)) // Time to find a patient! - if(confirmTarget(H)) - target = H - if(last_newpatient_speak + 300 < world.time) - var/message = pick("Hey, [H.name]! Hold on, I'm coming.", "Wait [H.name]! I want to help!", "[H.name], you appear to be injured!") - say(message) - custom_emote(1, "points at [H.name].") - last_newpatient_speak = world.time - break - -/mob/living/bot/medbot/UnarmedAttack(var/mob/living/carbon/human/H, var/proximity) - if(!..()) - return - - if(!on) - return - - if(!istype(H)) - return - - if(busy) - return - - if(H.stat == DEAD) - var/death_message = pick("No! NO!", "Live, damnit! LIVE!", "I... I've never lost a patient before. Not today, I mean.") - say(death_message) - target = null - return - - var/t = confirmTarget(H) - if(!t) - var/message = pick("All patched up!", "An apple a day keeps me away.", "Feel better soon!") - say(message) - target = null - return - - icon_state = "medibots" - visible_message("[src] is trying to inject [H]!") - if(declare_treatment) - var/area/location = get_area(src) - broadcast_medical_hud_message("[src] is treating [H] in [location]", src) - busy = 1 - update_icons() - if(do_after(src, 3 SECONDS, H, DO_DEFAULT | DO_USER_UNIQUE_ACT | DO_PUBLIC_PROGRESS)) - if(t == 1) - reagent_glass.reagents.trans_to_mob(H, injection_amount, CHEM_BLOOD) - else - H.reagents.add_reagent(t, injection_amount) - visible_message("[src] injects [H] with the syringe!") - busy = 0 - update_icons() - -/mob/living/bot/medbot/update_icons() - overlays.Cut() - if(skin) - overlays += image('icons/mob/bot/medibot_skins.dmi', "medskin_[skin]") - if(busy) - icon_state = "medibots" - else - icon_state = "medibot[on]" - -/mob/living/bot/medbot/attackby(var/obj/item/O, var/mob/user) - if(istype(O, /obj/item/reagent_containers/glass)) - if(locked) - to_chat(user, "You cannot insert a beaker because the panel is locked.") - return - if(!isnull(reagent_glass)) - to_chat(user, "There is already a beaker loaded.") - return - - if(!user.unEquip(O, src)) - return - reagent_glass = O - to_chat(user, "You insert [O].") - return - else - ..() - -/mob/living/bot/medbot/GetInteractTitle() - . = "Medibot v1.0 controls" - . += "Automatic Medical Unit v1.0" - -/mob/living/bot/medbot/GetInteractStatus() - . = ..() - . += "
              Beaker: " - if(reagent_glass) - . += "Loaded \[[reagent_glass.reagents.total_volume]/[reagent_glass.reagents.maximum_volume]\]" - else - . += "None loaded" - -/mob/living/bot/medbot/GetInteractPanel() - . = "Healing threshold: " - . += "-- " - . += "- " - . += "[heal_threshold] " - . += "+ " - . += "++" - - . += "
              Injection level: " - . += "- " - . += "[injection_amount] " - . += "+ " - - . += "
              Reagent source: [use_beaker ? "Loaded Beaker (When available)" : "Internal Synthesizer"]" - . += "
              Treatment report is [declare_treatment ? "on" : "off"]. Toggle" - . += "
              The speaker switch is [vocal ? "on" : "off"]. Toggle" - -/mob/living/bot/medbot/GetInteractMaintenance() - . = "Injection mode: " - switch(emagged) - if(0) - . += "Treatment" - if(1) - . += "Random (DANGER)" - if(2) - . += "ERROROROROROR-----" - -/mob/living/bot/medbot/ProcessCommand(var/mob/user, var/command, var/href_list) - ..() - if(CanAccessPanel(user)) - switch(command) - if("adj_threshold") - if(!locked || issilicon(user)) - var/adjust_num = text2num(href_list["amount"]) - heal_threshold = clamp(heal_threshold + adjust_num, 5, 75) - if("adj_inject") - if(!locked || issilicon(user)) - var/adjust_num = text2num(href_list["amount"]) - injection_amount = clamp(injection_amount + adjust_num, 5, 15) - if("use_beaker") - if(!locked || issilicon(user)) - use_beaker = !use_beaker - if("eject") - if(reagent_glass) - if(!locked) - reagent_glass.dropInto(src.loc) - reagent_glass = null - else - to_chat(user, "You cannot eject the beaker because the panel is locked.") - if("togglevoice") - if(!locked || issilicon(user)) - vocal = !vocal - if("declaretreatment") - if(!locked || issilicon(user)) - declare_treatment = !declare_treatment - - if(CanAccessMaintenance(user)) - switch(command) - if("emag") - if(emagged < 2) - emagged = !emagged - -/mob/living/bot/medbot/emag_act(var/remaining_uses, var/mob/user) - . = ..() - if(!emagged) - if(user) - to_chat(user, "You short out [src]'s reagent synthesis circuits.") - ignore_list |= user - visible_message("[src] buzzes oddly!") - flick("medibot_spark", src) - target = null - busy = 0 - emagged = TRUE - on = 1 - update_icons() - . = 1 - -/mob/living/bot/medbot/explode() - on = 0 - visible_message("[src] blows apart!") - var/turf/Tsec = get_turf(src) - - new /obj/item/storage/firstaid(Tsec) - new /obj/item/device/assembly/prox_sensor(Tsec) - new /obj/item/device/scanner/health(Tsec) - if (prob(50)) - new /obj/item/robot_parts/l_arm(Tsec) - - if(reagent_glass) - reagent_glass.forceMove(Tsec) - reagent_glass = null - - var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread - s.set_up(3, 1, src) - s.start() - qdel(src) - return - -/mob/living/bot/medbot/confirmTarget(var/mob/living/carbon/human/H) - if(!..()) - return 0 - - if(H.stat == DEAD) // He's dead, Jim - return 0 - - if(emagged) - return treatment_emag - - // If they're injured, we're using a beaker, and they don't have on of the chems in the beaker - if(reagent_glass && use_beaker && ((H.getBruteLoss() >= heal_threshold) || (H.getToxLoss() >= heal_threshold) || (H.getToxLoss() >= heal_threshold) || (H.getOxyLoss() >= (heal_threshold + 15)))) - for(var/datum/reagent/R in reagent_glass.reagents.reagent_list) - if(!H.reagents.has_reagent(R)) - return 1 - continue - - if((H.getBruteLoss() >= heal_threshold) && (!H.reagents.has_reagent(treatment_brute))) - return treatment_brute //If they're already medicated don't bother! - - if((H.getOxyLoss() >= (15 + heal_threshold)) && (!H.reagents.has_reagent(treatment_oxy))) - return treatment_oxy - - if((H.getFireLoss() >= heal_threshold) && (!H.reagents.has_reagent(treatment_fire))) - return treatment_fire - - if((H.getToxLoss() >= heal_threshold) && (!H.reagents.has_reagent(treatment_tox))) - return treatment_tox diff --git a/code/modules/mob/living/bot/mulebot.dm b/code/modules/mob/living/bot/mulebot.dm deleted file mode 100644 index 1ff96cdc1b404..0000000000000 --- a/code/modules/mob/living/bot/mulebot.dm +++ /dev/null @@ -1,328 +0,0 @@ -#define MULE_IDLE 0 -#define MULE_MOVING 1 -#define MULE_UNLOAD 2 -#define MULE_LOST 3 -#define MULE_CALC_MIN 4 -#define MULE_CALC_MAX 10 -#define MULE_PATH_DONE 11 -// IF YOU CHANGE THOSE, UPDATE THEM IN pda.tmpl TOO - -/mob/living/bot/mulebot - name = "Mulebot" - desc = "A Multiple Utility Load Effector bot." - icon = 'icons/mob/bot/mulebot.dmi' - icon_state = "mulebot0" - layer = MOB_LAYER - anchored = TRUE - density = TRUE - health = 150 - maxHealth = 150 - mob_bump_flag = HEAVY - - min_target_dist = 0 - max_target_dist = 250 - target_speed = 3 - max_frustration = 5 - botcard_access = list(access_maint_tunnels, access_mailsorting, access_cargo, access_cargo_bot, access_qm, access_mining, access_mining_station) - - var/atom/movable/load - - var/paused = 1 - var/crates_only = 1 - var/auto_return = 1 - var/safety = 1 - - var/targetName - var/turf/home - var/homeName - - var/static/amount = 0 - -/mob/living/bot/mulebot/New() - ..() - - var/turf/T = get_turf(loc) - var/obj/machinery/navbeacon/N = locate() in T - if(N) - home = T - homeName = N.location - else - homeName = "Unset" - - suffix = num2text(++amount) - name = "Mulebot #[suffix]" - -/mob/living/bot/mulebot/MouseDrop_T(var/atom/movable/C, var/mob/user) - if(user.stat) - return - - if(!istype(C) || C.anchored || get_dist(user, src) > 1 || get_dist(src, C) > 1 ) - return - - load(C) - -/mob/living/bot/mulebot/GetInteractTitle() - . = "Mulebot [suffix ? "([suffix])" : ""]" - . += "Multiple Utility Load Effector Mk. III" - . += "
              ID: [suffix]" - -/mob/living/bot/mulebot/GetInteractStatus() - . = ..() - . += "
              Current Load: [load ? load.name : "none"]" - -/mob/living/bot/mulebot/GetInteractPanel() - . += "Stop" - . += "
              Proceed" - . += "
              Return to home" - . += "
              Set destination" - . += "
              Set home" - . += "
              Toggle auto return home ([auto_return ? "On" : "Off"])" - . += "
              Toggle non-standard cargo ([crates_only ? "Off" : "On"])" - - if(load) - . += "
              Unload now" - -/mob/living/bot/mulebot/GetInteractMaintenance() - . = "Toggle safety ([safety ? "On" : "Off - DANGER"])" - -/mob/living/bot/mulebot/ProcessCommand(var/mob/user, var/command, var/href_list) - ..() - if(CanAccessPanel(user)) - switch(command) - if("stop") - obeyCommand("Stop") - if("go") - obeyCommand("GoTD") - if("home") - obeyCommand("Home") - if("destination") - obeyCommand("SetD") - if("sethome") - var/new_dest - var/list/beaconlist = GetBeaconList() - if(beaconlist.len) - new_dest = input("Select new home tag", "Mulebot [suffix ? "([suffix])" : ""]", null) in null|beaconlist - else - alert("No destination beacons available.") - if(new_dest) - home = get_turf(beaconlist[new_dest]) - homeName = new_dest - if("unload") - unload() - if("autoret") - auto_return = !auto_return - if("cargotypes") - crates_only = !crates_only - - if(CanAccessMaintenance(user)) - switch(command) - if("safety") - safety = !safety - -/mob/living/bot/mulebot/attackby(var/obj/item/O, var/mob/user) - ..() - update_icons() - -/mob/living/bot/mulebot/proc/obeyCommand(var/command) - switch(command) - if("Home") - resetTarget() - target = home - targetName = "Home" - if("SetD") - var/new_dest - var/list/beaconlist = GetBeaconList() - if(beaconlist.len) - new_dest = input("Select new destination tag", "Mulebot [suffix ? "([suffix])" : ""]") in null|beaconlist - else - alert("No destination beacons available.") - if(new_dest) - resetTarget() - target = get_turf(beaconlist[new_dest]) - targetName = new_dest - if("GoTD") - paused = 0 - if("Stop") - paused = 1 - -/mob/living/bot/mulebot/emag_act(var/remaining_charges, var/user) - locked = !locked - to_chat(user, "You [locked ? "lock" : "unlock"] the mulebot's controls.") - flick("mulebot-emagged", src) - playsound(loc, 'sound/effects/sparks1.ogg', 100, 0) - return 1 - -/mob/living/bot/mulebot/update_icons() - if(open) - icon_state = "mulebot-hatch" - return - if(target_path.len && !paused) - icon_state = "mulebot1" - return - icon_state = "mulebot0" - -/mob/living/bot/mulebot/handleRegular() - if(!safety && prob(1)) - flick("mulebot-emagged", src) - update_icons() - -/mob/living/bot/mulebot/handleFrustrated() - custom_emote(2, "makes a sighing buzz.") - playsound(loc, 'sound/machines/buzz-sigh.ogg', 50, 0) - ..() - -/mob/living/bot/mulebot/handleAdjacentTarget() - if(target == src.loc) - custom_emote(2, "makes a chiming sound.") - playsound(loc, 'sound/machines/chime.ogg', 50, 0) - UnarmedAttack(target) - resetTarget() - if(auto_return && home && (loc != home)) - target = home - targetName = "Home" - -/mob/living/bot/mulebot/confirmTarget() - return 1 - -/mob/living/bot/mulebot/calcTargetPath() - ..() - if(!target_path.len && target != home) // I presume that target is not null - resetTarget() - target = home - targetName = "Home" - -/mob/living/bot/mulebot/stepToTarget() - if(paused) - return - ..() - -/mob/living/bot/mulebot/UnarmedAttack(var/turf/T) - if(T == src.loc) - unload(dir) - -/mob/living/bot/mulebot/Bump(var/mob/living/carbon/human/M) - if(!safety && istype(M)) - visible_message("[src] knocks over [M]!") - M.Stun(8) - M.Weaken(5) - ..() - -/mob/living/bot/mulebot/proc/runOver(var/mob/living/carbon/human/H) - if(istype(H)) // No safety checks - WILL run over lying humans. Stop ERPing in the maint! - visible_message("[src] drives over [H]!") - playsound(loc, 'sound/effects/splat.ogg', 50, 1) - - var/damage = rand(5, 7) - H.apply_damage(2 * damage, DAMAGE_BRUTE, BP_HEAD) - H.apply_damage(2 * damage, DAMAGE_BRUTE, BP_CHEST) - H.apply_damage(0.5 * damage, DAMAGE_BRUTE, BP_L_LEG) - H.apply_damage(0.5 * damage, DAMAGE_BRUTE, BP_R_LEG) - H.apply_damage(0.5 * damage, DAMAGE_BRUTE, BP_L_ARM) - H.apply_damage(0.5 * damage, DAMAGE_BRUTE, BP_R_ARM) - - blood_splatter(src, H, 1) - -/mob/living/bot/mulebot/relaymove(var/mob/user, var/direction) - if(load == user) - unload(direction) - -/mob/living/bot/mulebot/explode() - unload(pick(0, 1, 2, 4, 8)) - - visible_message("[src] blows apart!") - - var/turf/Tsec = get_turf(src) - new /obj/item/device/assembly/prox_sensor(Tsec) - new /obj/item/stack/material/rods(Tsec) - new /obj/item/stack/material/rods(Tsec) - new /obj/item/stack/cable_coil/cut(Tsec) - - var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread - s.set_up(3, 1, src) - s.start() - - new /obj/effect/decal/cleanable/blood/oil(Tsec) - ..() - -/mob/living/bot/mulebot/proc/GetBeaconList() - var/list/beaconlist = list() - for(var/obj/machinery/navbeacon/N in navbeacons) - if(!N.codes["delivery"]) - continue - beaconlist.Add(N.location) - beaconlist[N.location] = N - return beaconlist - -/mob/living/bot/mulebot/proc/load(var/atom/movable/C) - if(busy || load || get_dist(C, src) > 1 || !isturf(C.loc)) - return - - for(var/obj/structure/plasticflaps/P in src.loc)//Takes flaps into account - if(!CanPass(C,P)) - return - - if(crates_only && !istype(C,/obj/structure/closet/crate)) - custom_emote(2, "makes a sighing buzz.") - playsound(loc, 'sound/machines/buzz-sigh.ogg', 50, 0) - return - - var/obj/structure/closet/crate/crate = C - if(istype(crate)) - crate.close() - - busy = 1 - - C.forceMove(loc) - sleep(2) - if(C.loc != loc) //To prevent you from going onto more than one bot. - return - C.forceMove(src) - load = C - - C.pixel_y += 9 - if(C.layer < layer) - C.layer = layer + 0.1 - C.plane = plane - overlays += C - - if(ismob(C)) - var/mob/M = C - if(M.client) - M.client.perspective = EYE_PERSPECTIVE - M.client.eye = src - - busy = 0 - -/mob/living/bot/mulebot/proc/unload(var/dirn = 0) - if(!load || busy) - return - - busy = 1 - overlays.Cut() - - load.forceMove(loc) - load.pixel_y -= 9 - load.reset_plane_and_layer() - if(ismob(load)) - var/mob/M = load - if(M.client) - M.client.perspective = MOB_PERSPECTIVE - M.client.eye = src - - if(dirn) - step(load, dirn) - - load = null - - for(var/atom/movable/AM in src) - if(AM == botcard || AM == access_scanner) continue - - AM.forceMove(loc) - AM.reset_plane_and_layer() - AM.pixel_y = initial(AM.pixel_y) - if(ismob(AM)) - var/mob/M = AM - if(M.client) - M.client.perspective = MOB_PERSPECTIVE - M.client.eye = src - busy = 0 diff --git a/code/modules/mob/living/bot/remotebot.dm b/code/modules/mob/living/bot/remotebot.dm deleted file mode 100644 index 4f8b7ec5f4a4c..0000000000000 --- a/code/modules/mob/living/bot/remotebot.dm +++ /dev/null @@ -1,170 +0,0 @@ -/mob/living/bot/remotebot - name = "Remote-Bot" - desc = "A remote controlled robot used by lazy people to switch channels and get pizza." - icon = 'icons/mob/bot/fetchbot.dmi' - icon_state = "fetchbot1" - health = 15 - maxHealth = 15 - - var/working = 0 - var/next_movement_time = 0 - var/speed = 10 //lower = better - var/obj/item/holding = null - var/obj/item/device/bot_controller/controller = null - -/mob/living/bot/remotebot/movement_delay() - var/tally = ..() - tally += speed - if(holding) - tally += (2 * holding.w_class) - return tally - -/mob/living/bot/remotebot/examine(mob/user) - . = ..() - if(holding) - to_chat(user, "It is holding \the [icon2html(holding, user)] [holding].") - -/mob/living/bot/remotebot/explode() - on = 0 - new /obj/effect/decal/cleanable/blood/oil(get_turf(src.loc)) - visible_message("[src] blows apart!") - if(controller) - controller.bot = null - controller = null - for(var/i in 1 to rand(3,5)) - var/obj/item/stack/material/cardboard/C = new(src.loc) - if(prob(50)) - C.forceMove(get_step(src, pick(GLOB.alldirs))) - - var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread - s.set_up(3, 1, src) - s.start() - qdel(src) - -/mob/living/bot/remotebot/attackby(var/obj/item/I, var/mob/living/user) - if(istype(I, /obj/item/device/bot_controller) && !controller) - user.visible_message("\The [user] waves \the [I] over \the [src].") - to_chat(user, "You link \the [src] to \the [I].") - var/obj/item/device/bot_controller/B = I - B.bot = src - controller = B - return ..() - -/mob/living/bot/remotebot/update_icons() - icon_state = "fetchbot[on]" - -/mob/living/bot/remotebot/Destroy() - if(holding) - holding.forceMove(loc) - holding = null - return ..() - -/mob/living/bot/remotebot/proc/pickup(var/obj/item/I) - if(holding || get_dist(src,I) > 1) - return - src.visible_message("\The [src] picks up \the [I].") - flick("fetchbot-c", src) - working = 1 - sleep(10) - working = 0 - I.forceMove(src) - holding = I - -/mob/living/bot/remotebot/proc/drop() - if(working || !holding) - return - holding.forceMove(loc) - holding = null - -/mob/living/bot/remotebot/proc/hit(var/atom/movable/a) - src.visible_message("\The [src] taps \the [a] with its claw.") - flick("fetchbot-c", src) - working = 1 - sleep(10) - working = 0 - -/mob/living/bot/remotebot/proc/command(var/atom/a) - if(working || stat || !on || a == src) //can't touch itself - return - if(isturf(a) || get_dist(src,a) > 1) - walk_to(src,a,0,movement_delay()) - else if(istype(a, /obj/item)) - pickup(a) - else - hit(a) - -/obj/item/device/bot_controller - name = "remote control" - desc = "Used to control something remotely. Even has a tiny screen!" - icon_state = "forensic1" - w_class = ITEM_SIZE_SMALL - slot_flags = SLOT_BELT - item_state = "electronic" - var/mob/living/bot/remotebot/bot - -/obj/item/device/bot_controller/attack_self(var/mob/user) - src.interact(user) - -/obj/item/device/bot_controller/interact(var/mob/user) - user.set_machine(src) - if(!(src in user) || !bot) - close_browser(user, "window=bot_controller") - return - var/dat = "
              Remote Control: [bot.name]
              " - dat += "Currently Holding: [bot.holding ? bot.holding.name : "Nothing"]

              " - var/is_looking = (user.client.eye == bot) - dat += "[is_looking ? "Stop" : "Start"] Looking
              " - dat += "Drop Item
              " - - show_browser(user, dat, "window=bot_controller") - onclose(user, "botcontroller") - -/obj/item/device/bot_controller/check_eye() - return 0 - -/obj/item/device/bot_controller/Topic(href, href_list) - ..() - if(!bot) - return - - if(href_list["drop"]) - bot.drop() - if(href_list["look"]) - if(href_list["look"] == "1") - usr.reset_view(usr) - usr.visible_message("\The [usr] looks up from \the [src]'s screen.") - else - usr.reset_view(bot) - usr.visible_message("\The [usr] looks intently on \the [src]'s screen.") - - src.interact(usr) - - -/obj/item/device/bot_controller/dropped(var/mob/living/user) - if(user.client.eye == bot) - user.client.eye = user - return ..() - - -/obj/item/device/bot_controller/afterattack(atom/A, mob/living/user) - if(bot) - bot.command(A) - -/obj/item/device/bot_controller/Destroy() - if(bot) - bot.controller = null - bot = null - return ..() - -/obj/item/device/bot_kit - name = "Remote-Bot Kit" - desc = "The cover says 'control your own cardboard nuclear powered robot. Comes with real plutonium!" - icon = 'icons/obj/storage.dmi' - icon_state = "remotebot" - -/obj/item/device/bot_kit/attack_self(var/mob/living/user) - to_chat(user, "You quickly dismantle the box and retrieve the controller and the remote bot itself.") - var/turf/T = get_turf(src.loc) - new /mob/living/bot/remotebot(T) - new /obj/item/device/bot_controller(T) - qdel(src) diff --git a/code/modules/mob/living/bot/secbot.dm b/code/modules/mob/living/bot/secbot.dm deleted file mode 100644 index 73deedd0ce191..0000000000000 --- a/code/modules/mob/living/bot/secbot.dm +++ /dev/null @@ -1,247 +0,0 @@ -#define SECBOT_WAIT_TIME 5 //number of in-game seconds to wait for someone to surrender -#define SECBOT_THREAT_ARREST 4 //threat level at which we decide to arrest someone -#define SECBOT_THREAT_ATTACK 8 //threat level at which was assume immediate danger and attack right away - -/mob/living/bot/secbot - name = "Securitron" - desc = "A little security robot. He looks less than thrilled." - icon = 'icons/mob/bot/secbot.dmi' - icon_state = "secbot0" - var/attack_state = "secbot-c" - layer = MOB_LAYER - maxHealth = 50 - health = 50 - req_access = list(list(access_security, access_forensics_lockers)) - botcard_access = list(access_security, access_sec_doors, access_forensics_lockers, access_morgue, access_maint_tunnels) - - patrol_speed = 2 - target_speed = 3 - light_strength = 0 //stunbaton makes it's own light - - RequiresAccessToToggle = 1 // Haha no - - var/idcheck = 0 // If true, arrests for having weapons without authorization. - var/check_records = 0 // If true, arrests people without a record. - var/check_arrest = 1 // If true, arrests people who are set to arrest. - var/declare_arrests = 0 // If true, announces arrests over sechuds. - - var/is_ranged = 0 - var/awaiting_surrender = 0 - - var/obj/item/melee/baton/stun_baton - var/obj/item/handcuffs/cyborg/handcuffs - - var/list/threat_found_sounds = list('sound/voice/bcriminal.ogg', 'sound/voice/bjustice.ogg', 'sound/voice/bfreeze.ogg') - var/list/preparing_arrest_sounds = list('sound/voice/bfreeze.ogg') - -/mob/living/bot/secbot/beepsky - name = "Officer Beepsky" - desc = "It's Officer Beep O'sky! Powered by a potato and a shot of whiskey." - will_patrol = 1 - -/mob/living/bot/secbot/Initialize() - stun_baton = new(src) - stun_baton.bcell = new /obj/item/cell/infinite(stun_baton) - stun_baton.set_status(1, null) - . = ..() - - handcuffs = new(src) - -/mob/living/bot/secbot/Destroy() - qdel(stun_baton) - qdel(handcuffs) - stun_baton = null - handcuffs = null - return ..() - -/mob/living/bot/secbot/turn_on() - ..() - stun_baton.set_status(on, null) - -/mob/living/bot/secbot/turn_off() - ..() - stun_baton.set_status(on, null) - -/mob/living/bot/secbot/update_icons() - icon_state = "secbot[on]" - -/mob/living/bot/secbot/GetInteractTitle() - . = "Securitron controls" - . += "Automatic Security Unit" - -/mob/living/bot/secbot/GetInteractPanel() - . = "Check for weapon authorization: [idcheck ? "Yes" : "No"]" - . += "
              Check security records: [check_records ? "Yes" : "No"]" - . += "
              Check arrest status: [check_arrest ? "Yes" : "No"]" - . += "
              Report arrests: [declare_arrests ? "Yes" : "No"]" - . += "
              Auto patrol: [will_patrol ? "On" : "Off"]" - -/mob/living/bot/secbot/GetInteractMaintenance() - . = "Threat identifier status: " - switch(emagged) - if(0) - . += "Normal" - if(1) - . += "Scrambled (DANGER)" - if(2) - . += "ERROROROROROR-----" - -/mob/living/bot/secbot/ProcessCommand(var/mob/user, var/command, var/href_list) - ..() - if(CanAccessPanel(user)) - switch(command) - if("idcheck") - idcheck = !idcheck - if("ignorerec") - check_records = !check_records - if("ignorearr") - check_arrest = !check_arrest - if("patrol") - will_patrol = !will_patrol - if("declarearrests") - declare_arrests = !declare_arrests - - if(CanAccessMaintenance(user)) - switch(command) - if("emag") - if(emagged < 2) - emagged = !emagged - -/mob/living/bot/secbot/attackby(var/obj/item/O, var/mob/user) - var/curhealth = health - . = ..() - if(health < curhealth) - react_to_attack(user) - -/mob/living/bot/secbot/emag_act(var/remaining_charges, var/mob/user) - . = ..() - if(!emagged) - if(user) - to_chat(user, "You short out [src]'s threat identificator.") - ignore_list |= user - emagged = TRUE - return 1 - -/mob/living/bot/secbot/bullet_act(var/obj/item/projectile/P) - if (status_flags & GODMODE) - return PROJECTILE_FORCE_MISS - var/curhealth = health - var/mob/shooter = P.firer - . = ..() - //if we already have a target just ignore to avoid lots of checking - if(!target && health < curhealth && shooter && (shooter in view(world.view, src))) - react_to_attack(shooter) - -/mob/living/bot/secbot/proc/begin_arrest(mob/target, var/threat) - var/suspect_name = target_name(target) - if(declare_arrests) - broadcast_security_hud_message("[src] is arresting a level [threat] suspect [suspect_name] in [get_area(src)].", src) - say("Down on the floor, [suspect_name]! You have [SECBOT_WAIT_TIME] seconds to comply.") - if (preparing_arrest_sounds.len) - playsound(src.loc, pick(preparing_arrest_sounds), 50) - GLOB.moved_event.register(target, src, /mob/living/bot/secbot/proc/target_moved) - -/mob/living/bot/secbot/proc/target_moved(atom/movable/moving_instance, atom/old_loc, atom/new_loc) - if(get_dist(get_turf(src), get_turf(target)) >= 1) - awaiting_surrender = INFINITY - GLOB.moved_event.unregister(moving_instance, src) - -/mob/living/bot/secbot/proc/react_to_attack(mob/attacker) - if(!target) - playsound(src.loc, pick(threat_found_sounds), 50) - broadcast_security_hud_message("[src] was attacked by a hostile [target_name(attacker)] in [get_area(src)].", src) - target = attacker - awaiting_surrender = INFINITY - -/mob/living/bot/secbot/resetTarget() - ..() - GLOB.moved_event.unregister(target, src) - awaiting_surrender = -1 - walk_to(src, 0) - -/mob/living/bot/secbot/startPatrol() - if(!locked) // Stop running away when we set you up - return - ..() - -/mob/living/bot/secbot/confirmTarget(var/atom/A) - if(!..()) - return 0 - return (check_threat(A) >= SECBOT_THREAT_ARREST) - -/mob/living/bot/secbot/lookForTargets() - for(var/mob/living/M in view(src)) - if(M.stat == DEAD) - continue - if(confirmTarget(M)) - var/threat = check_threat(M) - target = M - awaiting_surrender = -1 - say("Level [threat] infraction alert!") - custom_emote(1, "points at [M.name]!") - return - -/mob/living/bot/secbot/handleAdjacentTarget() - var/mob/living/carbon/human/H = target - var/threat = check_threat(target) - if(awaiting_surrender < SECBOT_WAIT_TIME && istype(H) && !H.lying && threat < SECBOT_THREAT_ATTACK) - if(awaiting_surrender == -1) - begin_arrest(target, threat) - ++awaiting_surrender - else - UnarmedAttack(target) - -/mob/living/bot/secbot/proc/cuff_target(var/mob/living/carbon/C) - if(istype(C) && !C.handcuffed) - handcuffs.place_handcuffs(C, src) - resetTarget() //we're done, failed or not. Don't want to get stuck if C is not - -/mob/living/bot/secbot/UnarmedAttack(var/mob/M, var/proximity) - if(!..()) - return - - if(!istype(M)) - return - - var/mob/living/carbon/human/H = M - if(istype(H) && H.lying) - cuff_target(H) - return - - if(istype(M, /mob/living/simple_animal)) - a_intent = I_HURT - else - a_intent = I_GRAB - - stun_baton.attack(M, src, BP_CHEST) //robots and turrets aim for center of mass - flick(attack_state, src) - -/mob/living/bot/secbot/explode() - visible_message("[src] blows apart!") - var/turf/Tsec = get_turf(src) - new /obj/item/device/assembly/prox_sensor(Tsec) - new /obj/item/melee/baton(Tsec) - if(prob(50)) - new /obj/item/robot_parts/l_arm(Tsec) - - var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread - s.set_up(3, 1, src) - s.start() - - new /obj/effect/decal/cleanable/blood/oil(Tsec) - qdel(src) - -/mob/living/bot/secbot/proc/target_name(mob/living/T) - if(ishuman(T)) - var/mob/living/carbon/human/H = T - return H.get_id_name("unidentified person") - return "unidentified lifeform" - -/mob/living/bot/secbot/proc/check_threat(var/mob/living/M) - if(!M || !istype(M) || M.stat == DEAD || src == M) - return 0 - - if(emagged && !M.incapacitated()) //check incapacitated so emagged secbots don't keep attacking the same target forever - return 10 - - return M.assess_perp(access_scanner, 0, idcheck, check_records, check_arrest) diff --git a/code/modules/mob/living/carbon/alien/alien.dm b/code/modules/mob/living/carbon/alien/alien.dm deleted file mode 100644 index 43a64a2c94d17..0000000000000 --- a/code/modules/mob/living/carbon/alien/alien.dm +++ /dev/null @@ -1,37 +0,0 @@ -/mob/living/carbon/alien - name = "alien" - desc = "What IS that?" - pass_flags = PASS_FLAG_TABLE - health = 100 - maxHealth = 100 - mob_size = 4 - var/dead_icon - var/language - var/death_msg = "lets out a waning guttural screech, green blood bubbling from its maw." - var/instance_num - -/mob/living/carbon/alien/New() - - verbs += /mob/living/proc/ventcrawl - verbs += /mob/living/proc/hide - - instance_num = rand(1, 1000) - name = "[initial(name)] ([instance_num])" - real_name = name - regenerate_icons() - - if(language) - add_language(language) - - gender = NEUTER - - ..() - -/mob/living/carbon/alien/u_equip(obj/item/W as obj) - return - -/mob/living/carbon/alien/restrained() - return 0 - -/mob/living/carbon/alien/show_inv(mob/user as mob) - return //Consider adding cuffs and hats to this, for the sake of fun. \ No newline at end of file diff --git a/code/modules/mob/living/carbon/alien/alien_attacks.dm b/code/modules/mob/living/carbon/alien/alien_attacks.dm deleted file mode 100644 index c9a1d05250885..0000000000000 --- a/code/modules/mob/living/carbon/alien/alien_attacks.dm +++ /dev/null @@ -1,40 +0,0 @@ -//can't equip anything -/mob/living/carbon/alien/attack_ui(slot_id) - return - -/mob/living/carbon/alien/attack_hand(mob/living/carbon/M as mob) - - ..() - - switch(M.a_intent) - - if (I_HELP) - help_shake_act(M) - - else - var/damage = rand(1, 9) - if (prob(90)) - if (MUTATION_HULK in M.mutations) - damage += 5 - spawn(0) - Paralyse(1) - step_away(src,M,15) - sleep(3) - step_away(src,M,15) - playsound(loc, "punch", 25, 1, -1) - for(var/mob/O in viewers(src, null)) - if ((O.client && !( O.blinded ))) - O.show_message("\The [M] has punched \the [src]!", 1) - if (damage > 4.9) - Weaken(rand(10,15)) - for(var/mob/O in viewers(M, null)) - if ((O.client && !( O.blinded ))) - O.show_message("\The [M] has weakened \the [src]!", 1, "You hear someone fall.", 2) - adjustBruteLoss(damage) - updatehealth() - else - playsound(loc, 'sound/weapons/punchmiss.ogg', 25, 1, -1) - for(var/mob/O in viewers(src, null)) - if ((O.client && !( O.blinded ))) - O.show_message("\The [M] has attempted to punch \the [src]!", 1) - return \ No newline at end of file diff --git a/code/modules/mob/living/carbon/alien/alien_damage.dm b/code/modules/mob/living/carbon/alien/alien_damage.dm deleted file mode 100644 index 00a1c1d64eba0..0000000000000 --- a/code/modules/mob/living/carbon/alien/alien_damage.dm +++ /dev/null @@ -1,34 +0,0 @@ -/mob/living/carbon/alien/ex_act(severity) - if (status_flags & GODMODE) - return - if(!blinded) - flash_eyes() - - var/b_loss = null - var/f_loss = null - switch (severity) - if (EX_ACT_DEVASTATING) - b_loss += 500 - gib() - return - - if (EX_ACT_HEAVY) - - b_loss += 60 - - f_loss += 60 - - ear_damage += 30 - ear_deaf += 120 - - if(EX_ACT_LIGHT) - b_loss += 30 - if (prob(50)) - Paralyse(1) - ear_damage += 15 - ear_deaf += 60 - - adjustBruteLoss(b_loss) - adjustFireLoss(f_loss) - - updatehealth() diff --git a/code/modules/mob/living/carbon/alien/death.dm b/code/modules/mob/living/carbon/alien/death.dm deleted file mode 100644 index 87990ae756452..0000000000000 --- a/code/modules/mob/living/carbon/alien/death.dm +++ /dev/null @@ -1,4 +0,0 @@ -/mob/living/carbon/alien/death(gibbed) - if(!gibbed && dead_icon) - icon_state = dead_icon - return ..(gibbed,death_msg) \ No newline at end of file diff --git a/code/modules/mob/living/carbon/alien/diona/_nymph.dm b/code/modules/mob/living/carbon/alien/diona/_nymph.dm deleted file mode 100644 index b519bef1fb1d0..0000000000000 --- a/code/modules/mob/living/carbon/alien/diona/_nymph.dm +++ /dev/null @@ -1,153 +0,0 @@ -#define DIONA_SCREEN_LOC_HELD "EAST-8:16,SOUTH:5" -#define DIONA_SCREEN_LOC_HAT "EAST-7:16,SOUTH:5" -#define DIONA_SCREEN_LOC_INTENT "EAST-2,SOUTH:5" -#define DIONA_SCREEN_LOC_HEALTH ui_alien_health - -/mob/living/carbon/alien/diona - name = "diona nymph" - desc = "It's a little skittery critter. Chirp." - icon = 'icons/mob/gestalt.dmi' - icon_state = "nymph" - item_state = "nymph" - death_msg = "expires with a pitiful chirrup..." - health = 60 - maxHealth = 60 - available_maneuvers = list(/decl/maneuver/leap) - status_flags = NO_ANTAG - density = FALSE - - - language = LANGUAGE_ROOTLOCAL - species_language = LANGUAGE_ROOTLOCAL - only_species_language = 1 - voice_name = "diona nymph" - speak_emote = list("chirrups") - universal_understand = FALSE - universal_speak = FALSE - - can_pull_size = ITEM_SIZE_SMALL - can_pull_mobs = MOB_PULL_SMALLER - - holder_type = /obj/item/holder/diona - possession_candidate = 1 - atom_flags = ATOM_FLAG_NO_TEMP_CHANGE | ATOM_FLAG_NO_REACT - hud_type = /datum/hud/diona_nymph - - var/emote_prob = 1 - var/wander_prob = 33 - var/obj/item/hat - var/obj/item/holding_item - var/mob/living/carbon/alien/diona/next_nymph - var/mob/living/carbon/alien/diona/previous_nymph - var/tmp/image/flower - var/tmp/image/eyes - var/tmp/last_glow - -/mob/living/carbon/alien/diona/get_jump_distance() - return 3 - -/mob/living/carbon/alien/diona/Login() - . = ..() - if(client) - if(holding_item) - holding_item.screen_loc = DIONA_SCREEN_LOC_HELD - client.screen |= holding_item - if(hat) - hat.screen_loc = DIONA_SCREEN_LOC_HAT - client.screen |= hat - -/mob/living/carbon/alien/diona/sterile - name = "sterile nymph" - emote_prob = 0 - wander_prob = 0 - -/mob/living/carbon/alien/diona/sterile/Initialize(var/mapload) - . = ..(mapload, 0) - -/mob/living/carbon/alien/diona/Initialize(var/mapload, var/flower_chance = 15) - - species = all_species[SPECIES_DIONA] - add_language(LANGUAGE_ROOTGLOBAL) - add_language(LANGUAGE_HUMAN_EURO, 0) - - eyes = image(icon = icon, icon_state = "eyes_[icon_state]") - eyes.layer = EYE_GLOW_LAYER - eyes.plane = EFFECTS_ABOVE_LIGHTING_PLANE - - if(prob(flower_chance)) - flower = image(icon = icon, icon_state = "flower_back") - var/image/I = image(icon = icon, icon_state = "flower_fore") - I.color = get_random_colour(1) - flower.overlays += I - - update_icons() - - . = ..(mapload) - -/mob/living/carbon/alien/diona/examine(mob/user) - . = ..() - if(holding_item) - to_chat(user, "It is holding [icon2html(holding_item, user)] \a [holding_item].") - if(hat) - to_chat(user, "It is wearing [icon2html(hat, user)] \a [hat].") - -/mob/living/carbon/alien/diona/IsAdvancedToolUser() - return FALSE - -/mob/living/carbon/alien/diona/proc/handle_npc(var/mob/living/carbon/alien/diona/D) - if(D.stat != CONSCIOUS) - return - if(prob(wander_prob) && isturf(D.loc) && !D.pulledby) //won't move if being pulled - SelfMove(pick(GLOB.cardinal)) - if(prob(emote_prob)) - D.emote(pick("scratch","jump","chirp","tail")) - -/proc/split_into_nymphs(var/mob/living/carbon/human/donor, dying) - - if(!donor || donor.species.name != SPECIES_DIONA) - return - - // Run through our nymphs and spit them out - var/list/available_nymphs = list() - for(var/mob/living/carbon/alien/diona/nymph in donor.contents) - nymph.dropInto(donor.loc) - transfer_languages(donor, nymph, (WHITELISTED|RESTRICTED)) - nymph.set_dir(pick(NORTH, SOUTH, EAST, WEST)) - // Collect any available nymphs - if(!nymph.client && nymph.stat != DEAD) - available_nymphs += nymph - - // Make sure there's a home for the player - if(!available_nymphs.len) - available_nymphs += new /mob/living/carbon/alien/diona/sterile(donor.loc) - - // Link availalbe nymphs together - var/mob/living/carbon/alien/diona/first_nymph - var/mob/living/carbon/alien/diona/last_nymph - for(var/mob/living/carbon/alien/diona/nymph in available_nymphs) - if(!first_nymph) - first_nymph = nymph - else - nymph.set_previous_nymph(last_nymph) - last_nymph.set_next_nymph(nymph) - last_nymph = nymph - if(available_nymphs.len > 1) - first_nymph.set_previous_nymph(last_nymph) - last_nymph.set_next_nymph(first_nymph) - - // Transfer player over - first_nymph.set_dir(donor.dir) - transfer_languages(donor, first_nymph) - if(donor.mind) - donor.mind.transfer_to(first_nymph) - else - first_nymph.key = donor.key - - log_and_message_admins("has split into nymphs; player now controls [key_name_admin(first_nymph)]", donor) - - for(var/obj/item/W in donor) - donor.drop_from_inventory(W) - - donor.visible_message("\The [donor] quivers slightly, then splits apart with a wet slithering noise.") - if (!dying) - qdel(donor) diff --git a/code/modules/mob/living/carbon/alien/diona/gestalt/_gestalt.dm b/code/modules/mob/living/carbon/alien/diona/gestalt/_gestalt.dm deleted file mode 100644 index 76a0f7b9f602a..0000000000000 --- a/code/modules/mob/living/carbon/alien/diona/gestalt/_gestalt.dm +++ /dev/null @@ -1,49 +0,0 @@ -/obj/structure/diona_gestalt - name = "nascent diona gestalt" - desc = "A heaving mass of nymphs. Chirp?" - icon = 'icons/mob/gestalt.dmi' - icon_state = "gestalt" - density = TRUE - opacity = FALSE - anchored = FALSE - movement_handlers = list(/datum/movement_handler/deny_multiz, /datum/movement_handler/delay = list(5)) - appearance_flags = DEFAULT_APPEARANCE_FLAGS | PIXEL_SCALE - - var/list/nymphs = list() - var/list/valid_things_to_roll_up = list(/mob/living/carbon/alien/diona = TRUE, /mob/living/carbon/alien/diona/sterile = TRUE) - var/list/democracy_bucket = list("Change to a humanoid form." = /datum/gestalt_vote/form_change_humanoid) - var/tmp/image/eyes_overlay - var/tmp/datum/gestalt_vote/current_vote - -/obj/structure/diona_gestalt/mob_breakout(var/mob/living/escapee) - . = ..() - shed_atom(escapee) - return TRUE - -/obj/structure/diona_gestalt/Initialize(var/mapload) - eyes_overlay = image(icon = icon, icon_state = "eyes_gestalt") - eyes_overlay.layer = EYE_GLOW_LAYER - eyes_overlay.plane = EFFECTS_ABOVE_LIGHTING_PLANE - update_icon() - . = ..(mapload) - -/obj/structure/diona_gestalt/on_update_icon() - overlays = list(eyes_overlay) - if (length(nymphs)) - SetTransform(scale = clamp(nymphs.len * 0.1, 1, 2)) - else - ClearTransform() - - -/obj/structure/diona_gestalt/Destroy() - for(var/thing in contents) - var/atom/movable/AM = thing - AM.dropInto(loc) - nymphs.Cut() - democracy_bucket.Cut() - QDEL_NULL(current_vote) - . = ..() - -/obj/structure/diona_gestalt/examine(mob/user) - . = ..() - if(nymphs) to_chat(user, "It seems to be composed of at least [nymphs.len] nymph\s.") diff --git a/code/modules/mob/living/carbon/alien/diona/gestalt/gestalt_attacks.dm b/code/modules/mob/living/carbon/alien/diona/gestalt/gestalt_attacks.dm deleted file mode 100644 index a43572ed60dcd..0000000000000 --- a/code/modules/mob/living/carbon/alien/diona/gestalt/gestalt_attacks.dm +++ /dev/null @@ -1,32 +0,0 @@ -/obj/structure/diona_gestalt/attack_generic(var/mob/user, var/damage, var/attack_message) - if(user.loc == src) - return - - if(istype(user, /mob/living/carbon/alien/diona) && user.a_intent != I_HURT) - can_roll_up_atom(user) - return - - visible_message("\The [user] has [attack_message] \the [src]!") - shed_atom(forcefully = TRUE) - -/obj/structure/diona_gestalt/attackby(var/obj/item/thing, var/mob/user) - . = ..() - if(thing.force) shed_atom(forcefully = TRUE) - -/obj/structure/diona_gestalt/hitby() - . = ..() - shed_atom(forcefully = TRUE) - -/obj/structure/diona_gestalt/bullet_act(var/obj/item/projectile/P, var/def_zone) - . = ..() - if (P && (P.damage_type == DAMAGE_BRUTE || P.damage_type == DAMAGE_BURN)) - shed_atom(forcefully = TRUE) - -/obj/structure/diona_gestalt/ex_act() - var/shed_count = rand(1,3) - while(shed_count && nymphs && nymphs.len) - shed_count-- - shed_atom(forcefully = TRUE) - -/obj/structure/diona_gestalt/proc/handle_member_click(var/mob/living/carbon/alien/diona/clicker) - return diff --git a/code/modules/mob/living/carbon/alien/diona/gestalt/gestalt_movement.dm b/code/modules/mob/living/carbon/alien/diona/gestalt/gestalt_movement.dm deleted file mode 100644 index b8dabd00b038f..0000000000000 --- a/code/modules/mob/living/carbon/alien/diona/gestalt/gestalt_movement.dm +++ /dev/null @@ -1,63 +0,0 @@ -/obj/structure/diona_gestalt/relaymove(var/mob/user, var/direction) - if(nymphs[user]) step(src, direction) // ANARCHY! DEMOCRACY! ANARCHY! DEMOCRACY! - -// Naaaa na na na na naa naa https://www.youtube.com/watch?v=iMH49ieL4es -/obj/structure/diona_gestalt/Bump(var/atom/movable/AM, var/yes) // what a useful argname, thanks oldcoders - . = ..() - if(AM && can_roll_up_atom(AM) && AM.Adjacent(src)) - var/turf/stepping = AM.loc - roll_up_atom(AM) - if(stepping) - step_towards(src, stepping) - - - else if(istype(AM, /obj/structure/diona_gestalt) && AM != src) // Combine!? - var/obj/structure/diona_gestalt/gestalt = AM - if(LAZYLEN(gestalt.nymphs)) - for(var/nimp in gestalt.nymphs) - roll_up_atom(nimp, silent = TRUE) - gestalt.nymphs.Cut() - var/gestalt_loc = gestalt.loc - qdel(gestalt) - visible_message("The nascent gestalts combine together!") // Combine! - step_towards(src, gestalt_loc) - -/obj/structure/diona_gestalt/Bumped(var/atom/A) - . = ..() - if(istype(A, /mob/living/carbon/alien/diona) && A.Adjacent(src)) // Combine... - roll_up_atom(A) - -/obj/structure/diona_gestalt/Move() - . = ..() - if(.) - for(var/atom/movable/AM in loc) - if(can_roll_up_atom(AM)) - roll_up_atom(AM) - -/obj/structure/diona_gestalt/proc/can_roll_up_atom(var/atom/movable/thing) - if(!istype(thing) || thing.anchored || !thing.simulated) - return FALSE - if(valid_things_to_roll_up[thing.type]) - return TRUE - if(istype(thing, /obj)) - var/obj/rolling_up = thing - return rolling_up.w_class <= get_max_item_rollup_size() - if(istype(thing, /mob)) - var/mob/rolling_up = thing - return rolling_up.mob_size <= get_max_mob_rollup_size() - -/obj/structure/diona_gestalt/proc/get_max_item_rollup_size() - if(nymphs.len > 9) - return ITEM_SIZE_GARGANTUAN - if(nymphs.len > 6) - return ITEM_SIZE_HUGE - if(nymphs.len > 4) - return ITEM_SIZE_LARGE - if(nymphs.len > 2) - return ITEM_SIZE_NORMAL - return ITEM_SIZE_SMALL - -/obj/structure/diona_gestalt/proc/get_max_mob_rollup_size() - if(nymphs.len >= 20) - return MOB_MEDIUM - return MOB_SMALL diff --git a/code/modules/mob/living/carbon/alien/diona/gestalt/gestalt_nymph.dm b/code/modules/mob/living/carbon/alien/diona/gestalt/gestalt_nymph.dm deleted file mode 100644 index 43ca53a8bdf32..0000000000000 --- a/code/modules/mob/living/carbon/alien/diona/gestalt/gestalt_nymph.dm +++ /dev/null @@ -1,52 +0,0 @@ -/mob/living/carbon/alien/diona/proc/gestalt_with(var/mob/living/carbon/alien/diona/chirp) - if(!istype(chirp) || chirp == src || chirp.incapacitated() || incapacitated()) - return FALSE - if(istype(chirp.loc, /obj/structure/diona_gestalt) || istype(loc, /obj/structure/diona_gestalt)) - return FALSE - visible_message("\The [chirp] and \the [src] twine together in gestalt!") - var/obj/structure/diona_gestalt/blob = new(get_turf(src)) - blob.roll_up_atom(chirp, silent = TRUE) - blob.roll_up_atom(src, silent = TRUE) - return TRUE - -/obj/structure/diona_gestalt/proc/roll_up_atom(atom/movable/chirp, var/silent) - if(!istype(chirp)) - return - if(!silent) - visible_message("\The [chirp] is engulfed by \the [src].") - if(istype(chirp, /mob/living/carbon/alien/diona)) - nymphs[chirp] = TRUE - queue_icon_update() - chirp.forceMove(src) - -/obj/structure/diona_gestalt/proc/shed_atom(var/atom/movable/shedding, var/silent, var/forcefully) - - if(!shedding) - var/list/options = contents - nymphs - if(length(options)) - shedding = pick(options) - else if(length(nymphs)) - shedding = pick(nymphs) - - if(shedding) - var/update_nymphs = FALSE - if(nymphs[shedding]) - nymphs -= shedding - update_nymphs = TRUE - shedding.dropInto(loc) - if(!silent) - visible_message(SPAN_DANGER("\The [shedding] splits away from \the [src]!")) - if(forcefully) - shedding.throw_at(get_edge_target_turf(src,pick(GLOB.alldirs)),rand(1,3),rand(3,5)) - if(update_nymphs) - check_nymphs() - -// If there are less than two nymphs (or if none of the nymphs have players), it isn't a viable gestalt. -/obj/structure/diona_gestalt/proc/check_nymphs() - if(LAZYLEN(nymphs.len) >= 2) - for(var/nimp in nymphs) - var/mob/living/carbon/alien/diona/chirp = nimp - if(chirp.client) - return - visible_message("\The [src] has completely split apart!") - qdel(src) diff --git a/code/modules/mob/living/carbon/alien/diona/gestalt/gestalt_turfs.dm b/code/modules/mob/living/carbon/alien/diona/gestalt/gestalt_turfs.dm deleted file mode 100644 index 0424176569007..0000000000000 --- a/code/modules/mob/living/carbon/alien/diona/gestalt/gestalt_turfs.dm +++ /dev/null @@ -1,11 +0,0 @@ -/decl/flooring/diona - name = "biomass" - desc = "A mass of small intertwined aliens forming a floor... creepy." - icon = 'icons/mob/gestalt.dmi' - icon_base = "floor" - flags = TURF_ACID_IMMUNE | TURF_REMOVE_SHOVEL - -/turf/simulated/floor/diona - name = "biomass" - icon = 'icons/turf/floors.dmi' - initial_flooring = /decl/flooring/diona diff --git a/code/modules/mob/living/carbon/alien/diona/gestalt/gestalt_verbs.dm b/code/modules/mob/living/carbon/alien/diona/gestalt/gestalt_verbs.dm deleted file mode 100644 index d9a1c3a82be9b..0000000000000 --- a/code/modules/mob/living/carbon/alien/diona/gestalt/gestalt_verbs.dm +++ /dev/null @@ -1,15 +0,0 @@ -/obj/structure/diona_gestalt/verb/shape_gestalt() - - set name = "Call Gestalt Vote" - set category = "IC" - set src = usr.loc - - if(!is_alien_whitelisted(usr, all_species[SPECIES_DIONA])) - to_chat(usr, "You are not whitelisted for control of more complex forms of gestalt.") - return - - var/vote_type = input(usr, "Select the vote you wish to call.") as null|anything in democracy_bucket - vote_type = democracy_bucket[vote_type] - if(ispath(vote_type) && usr.loc == src && !QDELETED(usr) && !QDELETED(src) && !usr.incapacitated()) - start_vote(usr, vote_type) - diff --git a/code/modules/mob/living/carbon/alien/diona/gestalt/gestalt_vote.dm b/code/modules/mob/living/carbon/alien/diona/gestalt/gestalt_vote.dm deleted file mode 100644 index ec792a4f1a7ca..0000000000000 --- a/code/modules/mob/living/carbon/alien/diona/gestalt/gestalt_vote.dm +++ /dev/null @@ -1,17 +0,0 @@ -/obj/structure/diona_gestalt/proc/start_vote(var/mob/voter, var/vote_type) - - if(current_vote) - to_chat(voter, "There is already a vote in progress.") - return - - current_vote = new vote_type(src, voter) - - if(!nymphs || nymphs.len < current_vote.minimum_nymphs) - to_chat(voter, "There are not enough nymphs in the gestalt for this form to be viable.") - QDEL_NULL(current_vote) - return - - for(var/thing in nymphs) - to_chat(thing, "\The [voter] has called a vote to [current_vote.descriptor]. Click here to vote yes. \ - The vote will conclude in [current_vote.vote_time / 600] minute\s.") - diff --git a/code/modules/mob/living/carbon/alien/diona/gestalt/gestalt_vote_types.dm b/code/modules/mob/living/carbon/alien/diona/gestalt/gestalt_vote_types.dm deleted file mode 100644 index ad6f331eb3537..0000000000000 --- a/code/modules/mob/living/carbon/alien/diona/gestalt/gestalt_vote_types.dm +++ /dev/null @@ -1,78 +0,0 @@ -/datum/gestalt_vote - var/mob/living/carbon/alien/caller - var/list/voted = list() - var/descriptor = "a generic motion" - var/vote_time = 1 MINUTE - var/passed - var/obj/structure/diona_gestalt/owner - var/minimum_nymphs = 3 - -/datum/gestalt_vote/New(var/obj/structure/diona_gestalt/_owner, var/mob/_caller) - owner = _owner - caller =_caller - addtimer(CALLBACK(src, .proc/timed_out), vote_time) - -/datum/gestalt_vote/proc/timed_out() - if(owner && !passed) - for(var/thing in owner.nymphs) - to_chat(thing, "\The vote to [descriptor] has run out of time and has failed.") - qdel(src) - -/datum/gestalt_vote/Topic(href, href_list) - . = ..() - if(!. && href_list["voter"]) - var/mob/living/carbon/alien/diona/voter = locate(href_list["voter"]) - if(!voter.incapacitated() && voter.loc == owner && !voted[voter] && !passed && !QDELETED(src)) - voted[voter] = TRUE - var/target_value = 0 - for(var/thing in owner.nymphs) - var/mob/living/carbon/alien/diona/chirp = thing - if(chirp.client) - target_value++ - target_value = Ceil(target_value/2) - passed = (voted.len >= target_value) - for(var/thing in owner.nymphs) - to_chat(thing, "\The [voter] voted yes to [descriptor] ([voted.len]/[target_value]).") - if(passed) - to_chat(thing, "Motion passed!") - if(passed) succeeded() - return TRUE - -/datum/gestalt_vote/Destroy() - voted.Cut() - caller = null - if(owner) - if(owner.current_vote == src) - owner.current_vote = null - owner = null - . = ..() - -/datum/gestalt_vote/proc/succeeded() - return - -/datum/gestalt_vote/form_change_humanoid - descriptor = "change to a humanoid form" - -/datum/gestalt_vote/form_change_humanoid/succeeded() - - var/mob/living/carbon/human/diona/humanoid_gestalt = new(get_turf(owner)) - transfer_languages(caller, humanoid_gestalt) - if(caller.mind) - caller.mind.transfer_to(humanoid_gestalt) - else - humanoid_gestalt.key = caller.key - owner.visible_message("\The [owner] curls in on itself and bunches up, forming a humanoid shape.") - for(var/thing in owner.nymphs) - var/mob/living/carbon/alien/diona/D = thing - D.forceMove(humanoid_gestalt) - to_chat(D, "\The [caller] has shaped the gestalt into a humanoid form.") - owner.nymphs.Cut() - var/caller_instance_num = caller.instance_num - spawn - var/newname = sanitize(input(humanoid_gestalt, "You have become a humanoid gestalt. Choose a name for yourself.", "Gestalt Name") as null|text, MAX_NAME_LEN) - if(!newname) - humanoid_gestalt.fully_replace_character_name("diona gestalt ([caller_instance_num])") - else - humanoid_gestalt.fully_replace_character_name(newname) - QDEL_NULL(owner) - qdel(src) diff --git a/code/modules/mob/living/carbon/alien/diona/nymph_attacks.dm b/code/modules/mob/living/carbon/alien/diona/nymph_attacks.dm deleted file mode 100644 index 8434fb7753f28..0000000000000 --- a/code/modules/mob/living/carbon/alien/diona/nymph_attacks.dm +++ /dev/null @@ -1,135 +0,0 @@ -/mob/living/carbon/alien/diona/get_scooped(var/mob/living/carbon/grabber) - if(grabber.species.name == SPECIES_DIONA && do_merge(grabber)) - return - else return ..() - -/mob/living/carbon/alien/diona/MouseDrop(atom/over_object) - var/mob/living/carbon/H = over_object - - if(istype(H) && Adjacent(H) && (usr == H) && (H.a_intent == "grab") && hat && !(H.l_hand && H.r_hand)) - H.put_in_hands(hat) - H.visible_message("\The [H] removes \the [src]'s [hat].") - hat = null - update_icons() - return - - return ..() - -/mob/living/carbon/alien/diona/attackby(var/obj/item/W, var/mob/user) - if(user.a_intent == I_HELP && istype(W, /obj/item/clothing/head)) - if(hat) - to_chat(user, "\The [src] is already wearing \the [hat].") - return - user.unEquip(W) - wear_hat(W) - user.visible_message("\The [user] puts \the [W] on \the [src].") - return - return ..() - -/mob/living/carbon/alien/diona/UnarmedAttack(var/atom/A) - - setClickCooldown(DEFAULT_ATTACK_COOLDOWN) - - if(istype(loc, /obj/structure/diona_gestalt)) - var/obj/structure/diona_gestalt/gestalt = loc - return gestalt.handle_member_click(src, A) - else - - if(istype(A, /obj/machinery/portable_atmospherics/hydroponics)) - return handle_tray_interaction(A) - - // This is super hacky. Not sure if I will leave this in for a final merge. - // Reporting back from the future: keeping this because trying to refactor - // seed storage to handle this cleanly would be a pain in the ass and I - // don't want to touch that pile. - - if(istype(A, /obj/machinery/seed_storage)) - visible_message("\The [src] headbutts \the [A]!") - var/obj/machinery/seed_storage/G = A - if(LAZYLEN(G.piles)) - var/datum/seed_pile/pile = pick(G.piles) - var/obj/item/seeds/S = pick(pile.seeds) - if(S) - pile.amount -= 1 - pile.seeds -= S - if(pile.amount <= 0 || LAZYLEN(pile.seeds) <= 0) - G.piles -= pile - qdel(pile) - S.forceMove(get_turf(G)) - G.visible_message("\A [S] falls out!") - return - // End superhacky stuff. - - if(a_intent == I_DISARM || a_intent == I_HELP) - if(!wear_hat(A) && can_collect(A)) - collect(A) - return - - if(istype(A, /mob)) - if(src != A && !gestalt_with(A)) - visible_message("\The [src] butts its head into \the [A].") - return - - . = ..() - -/mob/living/carbon/alien/diona/RangedAttack(atom/A, var/params) - if((a_intent == I_HURT || a_intent == I_GRAB) && holding_item) - setClickCooldown(DEFAULT_ATTACK_COOLDOWN) - visible_message("\The [src] spits \a [holding_item] at \the [A]!") - var/atom/movable/temp = holding_item - unEquip(holding_item) - if(temp) - temp.throw_at(A, 10, rand(3,5), src) - return TRUE - . = ..() - -/mob/living/carbon/alien/diona/proc/handle_tray_interaction(var/obj/machinery/portable_atmospherics/hydroponics/tray) - - if(incapacitated()) - return - - if(!tray.seed && istype(holding_item, /obj/item/seeds)) - var/atom/movable/temp = holding_item - unEquip(temp) - if(temp) - tray.plant_seed(src, temp) - return - - if(tray.dead) - if(tray.remove_dead(src, silent = TRUE)) - reagents.add_reagent(/datum/reagent/nutriment/glucose, rand(10,20)) - visible_message("\The [src] chews up the dead plant, clearing \the [tray] out.", "You devour the dead plant, clearing \the [tray].") - return - - if(tray.harvest) - if(tray.harvest(src)) - visible_message("\The [src] harvests from \the [tray].", "You harvest the contents of \the [tray].") - return - - if(tray.weedlevel || tray.pestlevel) - reagents.add_reagent(/datum/reagent/nutriment/glucose, (tray.weedlevel + tray.pestlevel)) - tray.weedlevel = 0 - tray.pestlevel = 0 - visible_message("\The [src] begins rooting through \the [tray], ripping out pests and weeds, and eating them noisily.","You begin rooting through \the [tray], ripping out pests and weeds, and eating them noisily.") - return - - if(tray.nutrilevel < 10) - var/nutrition_cost = (10-tray.nutrilevel) * 5 - if(nutrition >= nutrition_cost) - visible_message("\The [src] secretes a trickle of green liquid, refilling [tray].","You secrete some nutrients into \the [tray].") - tray.nutrilevel = 10 - adjust_nutrition(-((10-tray.nutrilevel) * 5)) - else - to_chat(src, "You haven't eaten enough to refill \the [tray]'s nutrients.") - return - - if(tray.waterlevel < 100) - var/nutrition_cost = Floor((100-tray.nutrilevel)/10) * 5 - if(nutrition >= nutrition_cost) - visible_message("\The [src] secretes a trickle of clear liquid, refilling [tray].","You secrete some water into \the [tray].") - tray.waterlevel = 100 - else - to_chat(src, "You haven't eaten enough to refill \the [tray]'s water.") - return - - visible_message("\The [src] rolls around in \the [tray] for a bit.","You roll around in \the [tray] for a bit.") diff --git a/code/modules/mob/living/carbon/alien/diona/nymph_death.dm b/code/modules/mob/living/carbon/alien/diona/nymph_death.dm deleted file mode 100644 index afa2663756171..0000000000000 --- a/code/modules/mob/living/carbon/alien/diona/nymph_death.dm +++ /dev/null @@ -1,60 +0,0 @@ -//This essentially makes dionaea spawned by splitting into a doubly linked -//list that, when the nymph dies, transfers the controler's mind -//to the next nymph in the list. - -/mob/living/carbon/alien/diona/proc/set_next_nymph(var/mob/living/carbon/alien/diona/D) - next_nymph = D - -/mob/living/carbon/alien/diona/proc/set_previous_nymph(var/mob/living/carbon/alien/diona/D) - previous_nymph = D -// When there are only two nymphs left in a list and one is to be removed, -// call this to null it out. -/mob/living/carbon/alien/diona/proc/null_nymphs() - next_nymph = null - previous_nymph = null - -/mob/living/carbon/alien/diona/proc/remove_from_list() - // Closes over the gap that's going to be made and removes references to - // the nymph this is called for. - var/need_links_null = 0 - - if (previous_nymph) - previous_nymph.set_next_nymph(next_nymph) - if (previous_nymph.next_nymph == previous_nymph) - need_links_null = 1 - if (next_nymph) - next_nymph.set_previous_nymph(previous_nymph) - if (next_nymph.previous_nymph == next_nymph) - need_links_null = 1 - // This bit checks if a nymphs is the only nymph in the list - // by seeing if it points to itself. If it is, it nulls it - // to stop list behaviour. - if (need_links_null) - if (previous_nymph) - previous_nymph.null_nymphs() - if (next_nymph) - next_nymph.null_nymphs() - // Finally, remove the current nymph's references to other nymphs. - null_nymphs() - -/mob/living/carbon/alien/diona/death(gibbed) - - var/obj/structure/diona_gestalt/gestalt = loc - if(istype(gestalt)) - gestalt.shed_atom(src, TRUE, FALSE) - - if(holding_item) - unEquip(holding_item) - if(hat) - unEquip(hat) - - jump_to_next_nymph() - - remove_from_list() - - return ..(gibbed,death_msg) - -/mob/living/carbon/alien/diona/Destroy() - if (previous_nymph || next_nymph) - remove_from_list() - return ..() diff --git a/code/modules/mob/living/carbon/alien/diona/nymph_gestalting.dm b/code/modules/mob/living/carbon/alien/diona/nymph_gestalting.dm deleted file mode 100644 index 4905f90e49764..0000000000000 --- a/code/modules/mob/living/carbon/alien/diona/nymph_gestalting.dm +++ /dev/null @@ -1,65 +0,0 @@ -/mob/living/carbon/alien/diona/proc/do_merge(var/mob/living/carbon/human/H) - if(!istype(H) || !src || !(src.Adjacent(H)) || src.incapacitated() || H.incapacitated()) - return 0 - to_chat(H, "You feel your being twine with that of \the [src] as it merges with your biomass.") - H.status_flags |= PASSEMOTES - to_chat(src, "You feel your being twine with that of \the [H] as you merge with its biomass.") - forceMove(H) - return 1 - -/mob/living/carbon/alien/diona/verb/split_away() - set name = "Split From Gestalt" - set category = "IC" - set src = usr - - if(incapacitated()) - return - - if(istype(loc, /obj/structure/diona_gestalt)) // Handle nymph katamari. - var/obj/structure/diona_gestalt/gestalt = loc - gestalt.visible_message("\The [src] wriggles out of \the [gestalt] and plops to the ground.") - gestalt.shed_atom(src, TRUE, FALSE) - return - - if(ishuman(loc)) // Handle larger gestalts. If they are being held inhand, their loc will be a holder item, not the mob. - var/mob/living/carbon/human/H = loc - if(H.species.name == SPECIES_DIONA) - var/nymph_count = 0 - for(var/mob/living/carbon/alien/diona/chirp in H) - nymph_count++ - if(nymph_count >= 3) - break - if(nymph_count < 3) - split_into_nymphs(H) // plop - else - to_chat(H, "You feel a pang of loss as \the [src] splits away from your gestalt.") - H.visible_message("\The [src] wriggles out of the depths of \the [H] and plops to the ground.") - dropInto(loc) - return - - to_chat(src, "You are not within a gestalt currently.") - -/mob/living/carbon/alien/diona/verb/split_human_gestalt_apart() - set name = "Split Apart" - set desc = "Split your humanoid form into its constituent nymphs." - set category = "Abilities" - set src = usr.contents - if(ishuman(loc)) - split_into_nymphs(loc) - -/mob/living/carbon/alien/diona/verb/jump_to_next_nymph() - set name = "Jump to next nymph" - set desc = "Switch control to another nymph from your last gestalt." - set category = "Abilities" - - if (next_nymph && next_nymph.stat != DEAD && !next_nymph.client) - - var/mob/living/carbon/alien/diona/S = next_nymph - transfer_languages(src, S) - - if(mind) - to_chat(src, "You're now in control of [S].") - mind.transfer_to(S) - log_and_message_admins("has transfered to another nymph; player now controls [key_name_admin(S)]", src) - else - to_chat(src, "There are no appropriate nymphs for you to jump into.") \ No newline at end of file diff --git a/code/modules/mob/living/carbon/alien/diona/nymph_holder.dm b/code/modules/mob/living/carbon/alien/diona/nymph_holder.dm deleted file mode 100644 index 1888bc3d49410..0000000000000 --- a/code/modules/mob/living/carbon/alien/diona/nymph_holder.dm +++ /dev/null @@ -1,17 +0,0 @@ -/obj/item/holder/diona - origin_tech = list(TECH_MAGNET = 3, TECH_BIO = 5) - slot_flags = SLOT_HEAD | SLOT_OCLOTHING | SLOT_HOLSTER - armor = list( - bio = ARMOR_BIO_RESISTANT, - rad = ARMOR_RAD_SHIELDED - ) - -// Yes, you can wear a nymph on your head instead of a radiation mask. -/obj/item/holder/diona/equipped(var/mob/living/user, var/slot) - if(slot == slot_l_hand || slot == slot_r_hand) - body_parts_covered = ARMS - else if(slot == slot_head) - body_parts_covered = HEAD - else if(slot == slot_wear_suit) - body_parts_covered = UPPER_TORSO - . = ..() \ No newline at end of file diff --git a/code/modules/mob/living/carbon/alien/diona/nymph_inventory.dm b/code/modules/mob/living/carbon/alien/diona/nymph_inventory.dm deleted file mode 100644 index a1fb702f06808..0000000000000 --- a/code/modules/mob/living/carbon/alien/diona/nymph_inventory.dm +++ /dev/null @@ -1,82 +0,0 @@ -/mob/living/carbon/alien/diona/drop_from_inventory(var/obj/item/I) - . = ..() - if(I == holding_item) - holding_item = null - else if(I == hat) - hat = null - update_icons() - -/mob/living/carbon/alien/diona/put_in_hands(var/obj/item/W) // No hands. Use mouth. - if(can_collect(W)) - collect(W) - else - W.forceMove(get_turf(src)) - return 1 - -/mob/living/carbon/alien/diona/proc/wear_hat(var/obj/item/clothing/head/new_hat) - if(hat || !istype(new_hat) || holding_item == new_hat) - return FALSE - hat = new_hat - hat.forceMove(src) - hat.equipped(src) - hat.screen_loc = DIONA_SCREEN_LOC_HAT - update_icons() - return TRUE - -/mob/living/carbon/alien/diona/hotkey_drop() - if(holding_item || hat) - drop_item() - else - to_chat(usr, "You have nothing to drop.") - -/mob/living/carbon/alien/diona/proc/can_collect(var/obj/item/collecting) - return (!holding_item && \ - istype(collecting) && \ - collecting != hat && \ - collecting.loc != src && \ - !collecting.anchored && \ - collecting.simulated && \ - collecting.w_class <= can_pull_size \ - ) - -/mob/living/carbon/alien/diona/proc/collect(var/obj/item/collecting) - collecting.forceMove(src) - holding_item = collecting - visible_message("\The [src] engulfs \the [holding_item].") - - // This means dionaea can hoover up beakers as a kind of impromptu chem disposal - // technique, so long as they're okay with the reagents reacting inside them. - if(holding_item.reagents && holding_item.reagents.total_volume) - holding_item.reagents.trans_to_mob(src, holding_item.reagents.total_volume, CHEM_INGEST) - - // It also means they can do the old school cartoon schtick of eating an entire sandwich - // and spitting up an empty plate. Ptooie. - if(istype(holding_item, /obj/item/reagent_containers/food)) - var/obj/item/reagent_containers/food/food = holding_item - holding_item = null - if (istype(holding_item, /obj/item/reagent_containers/food/snacks)) - var/obj/item/reagent_containers/food/snacks/snack = food - if (snack.trash) - holding_item = new snack.trash(src) - qdel(food) - - if(!QDELETED(holding_item)) - holding_item.equipped(src) - holding_item.screen_loc = DIONA_SCREEN_LOC_HELD - -/mob/living/carbon/alien/diona/verb/drop_item_verb() - set name = "Drop Held Item" - set desc = "Drop the item you are currently holding inside." - set category = "IC" - set src = usr - drop_item() - -/mob/living/carbon/alien/diona/drop_item() - if(holding_item && unEquip(holding_item)) - visible_message("\The [src] regurgitates \the [holding_item].") - else if(hat && unEquip(hat)) - visible_message("\The [src] wriggles out from under \the [hat].") - update_icons() - else - . = ..() - diff --git a/code/modules/mob/living/carbon/alien/diona/nymph_life.dm b/code/modules/mob/living/carbon/alien/diona/nymph_life.dm deleted file mode 100644 index 2a9a3b0ed5f96..0000000000000 --- a/code/modules/mob/living/carbon/alien/diona/nymph_life.dm +++ /dev/null @@ -1,32 +0,0 @@ -//Dionaea regenerate health and nutrition in light. -/mob/living/carbon/alien/diona/handle_environment(datum/gas_mixture/environment) - - if(health <= 0 || stat == DEAD) - return - - var/turf/checking = get_turf(src) - if(!checking) - return - - var/light_amount = checking.get_lumcount() * 5 - - if(radiation <= 20) - if(last_glow) - set_light(0) - last_glow = 0 - else - var/mult = clamp(radiation/200, 0.5, 1) - if(last_glow != mult) - set_light(mult, 0.5, (5*mult), 2, "#55ff55") - last_glow = mult - - set_nutrition(clamp(nutrition + Floor(radiation/100) + light_amount, 0, 500)) - - if(radiation >= 50 || light_amount > 2) //if there's enough light, heal - adjustBruteLoss(-1) - adjustFireLoss(-1) - adjustToxLoss(-1) - adjustOxyLoss(-1) - - if(!client) - handle_npc(src) diff --git a/code/modules/mob/living/carbon/alien/diona/nymph_ui.dm b/code/modules/mob/living/carbon/alien/diona/nymph_ui.dm deleted file mode 100644 index 3e43794626d16..0000000000000 --- a/code/modules/mob/living/carbon/alien/diona/nymph_ui.dm +++ /dev/null @@ -1,61 +0,0 @@ -/obj/screen/intent/diona_nymph - icon = 'icons/mob/gestalt.dmi' - icon_state = "intent_devour" - screen_loc = DIONA_SCREEN_LOC_INTENT - -/obj/screen/intent/diona_nymph/on_update_icon() - if(intent == I_HURT || intent == I_GRAB) - intent = I_GRAB - icon_state = "intent_expel" - else - intent = I_DISARM - icon_state = "intent_devour" - -/obj/screen/diona - icon = 'icons/mob/gestalt.dmi' - -/obj/screen/diona/hat - name = "equipped hat" - screen_loc = DIONA_SCREEN_LOC_HAT - icon_state = "hat" - -/obj/screen/diona/hat/Click() - var/mob/living/carbon/alien/diona/chirp = usr - if(istype(chirp) && chirp.hat) - chirp.unEquip(chirp.hat) - -/obj/screen/diona/held - name = "held item" - screen_loc = DIONA_SCREEN_LOC_HELD - icon_state = "held" - -/obj/screen/diona/held/Click() - var/mob/living/carbon/alien/diona/chirp = usr - if(istype(chirp) && chirp.holding_item) chirp.unEquip(chirp.holding_item) - -/datum/hud/diona_nymph - var/obj/screen/diona/hat/hat - var/obj/screen/diona/held/held - -/datum/hud/diona_nymph/FinalizeInstantiation() - - src.adding = list() - src.other = list() - - hat = new - adding += hat - - held = new - adding += held - - action_intent = new /obj/screen/intent/diona_nymph() - adding += action_intent - - mymob.healths = new /obj/screen() - mymob.healths.icon = 'icons/mob/gestalt.dmi' - mymob.healths.icon_state = "health0" - mymob.healths.SetName("health") - mymob.healths.screen_loc = DIONA_SCREEN_LOC_HEALTH - - mymob.client.screen = list(mymob.healths) - mymob.client.screen += src.adding + src.other diff --git a/code/modules/mob/living/carbon/alien/diona/nymph_update_icons.dm b/code/modules/mob/living/carbon/alien/diona/nymph_update_icons.dm deleted file mode 100644 index 0cd97ae68e589..0000000000000 --- a/code/modules/mob/living/carbon/alien/diona/nymph_update_icons.dm +++ /dev/null @@ -1,15 +0,0 @@ -/mob/living/carbon/alien/diona/update_icons() - var/list/adding = list() - if(stat == DEAD) - icon_state = "[initial(icon_state)]_dead" - else if(lying || resting || stunned) - icon_state = "[initial(icon_state)]_sleep" - else - icon_state = "[initial(icon_state)]" - if(eyes) - adding += eyes - if(flower) - adding += flower - if(hat) - adding += get_hat_icon(hat, 0, -8) - overlays = adding diff --git a/code/modules/mob/living/carbon/alien/diona/~diona.dm b/code/modules/mob/living/carbon/alien/diona/~diona.dm deleted file mode 100644 index 0df03ea0e903b..0000000000000 --- a/code/modules/mob/living/carbon/alien/diona/~diona.dm +++ /dev/null @@ -1,4 +0,0 @@ -#undef DIONA_SCREEN_LOC_HELD -#undef DIONA_SCREEN_LOC_HAT -#undef DIONA_SCREEN_LOC_INTENT -#undef DIONA_SCREEN_LOC_HEALTH \ No newline at end of file diff --git a/code/modules/mob/living/carbon/alien/life.dm b/code/modules/mob/living/carbon/alien/life.dm deleted file mode 100644 index 27a9f9ee15f90..0000000000000 --- a/code/modules/mob/living/carbon/alien/life.dm +++ /dev/null @@ -1,141 +0,0 @@ -// Alien larva are quite simple. -/mob/living/carbon/alien/Life() - - set invisibility = 0 - set background = 1 - - if (HAS_TRANSFORMATION_MOVEMENT_HANDLER(src)) return - if(!loc) return - - ..() - - blinded = null - - //Status updates, death etc. - update_icons() - -/mob/living/carbon/alien/handle_mutations_and_radiation() - - // Currently both Dionaea and larvae like to eat radiation, so I'm defining the - // rad absorbtion here. This will need to be changed if other baby aliens are added. - - if(!radiation) - return - - var/rads = radiation/25 - radiation -= rads - adjust_nutrition(rads) - heal_overall_damage(rads,rads) - adjustOxyLoss(-(rads)) - adjustToxLoss(-(rads)) - return - -/mob/living/carbon/alien/handle_regular_status_updates() - - if(status_flags & GODMODE) return 0 - - if(stat == DEAD) - blinded = 1 - silent = 0 - else - updatehealth() - if(health <= 0) - death() - blinded = 1 - silent = 0 - return 1 - - if(paralysis && paralysis > 0) - blinded = 1 - set_stat(UNCONSCIOUS) - if(getHalLoss() > 0) - adjustHalLoss(-3) - - if(sleeping) - adjustHalLoss(-3) - if (mind) - if(mind.active && client != null) - sleeping = max(sleeping-1, 0) - blinded = 1 - set_stat(UNCONSCIOUS) - else if(resting) - if(getHalLoss() > 0) - adjustHalLoss(-3) - - else - set_stat(CONSCIOUS) - if(getHalLoss() > 0) - adjustHalLoss(-1) - - // Eyes and blindness. - if(!has_eyes()) - eye_blind = 1 - blinded = 1 - eye_blurry = 1 - else if(eye_blind) - eye_blind = max(eye_blind-1,0) - blinded = 1 - else if(eye_blurry) - eye_blurry = max(eye_blurry-1, 0) - - update_icons() - - return 1 - -/mob/living/carbon/alien/handle_regular_hud_updates() - update_sight() - if (healths) - if(stat != DEAD) - switch(health) - if(100 to INFINITY) - healths.icon_state = "health0" - if(80 to 100) - healths.icon_state = "health1" - if(60 to 80) - healths.icon_state = "health2" - if(40 to 60) - healths.icon_state = "health3" - if(20 to 40) - healths.icon_state = "health4" - if(0 to 20) - healths.icon_state = "health5" - else - healths.icon_state = "health6" - else - healths.icon_state = "health7" - - if(stat != DEAD) - if(blinded) - overlay_fullscreen("blind", /obj/screen/fullscreen/blind) - else - clear_fullscreen("blind") - set_fullscreen(disabilities & NEARSIGHTED, "impaired", /obj/screen/fullscreen/impaired, 1) - set_fullscreen(eye_blurry, "blurry", /obj/screen/fullscreen/blurry) - set_fullscreen(druggy, "high", /obj/screen/fullscreen/high) - if(machine) - if(machine.check_eye(src) < 0) - reset_view(null) - else - if(client && !client.adminobs) - reset_view(null) - - return 1 - -/mob/living/carbon/alien/handle_environment(var/datum/gas_mixture/environment) - // Both alien subtypes survive in vaccum and suffer in high temperatures, - // so I'll just define this once, for both (see radiation comment above) - if(!environment) return - - if(environment.temperature > (T0C+66)) - adjustFireLoss((environment.temperature - (T0C+66))/5) // Might be too high, check in testing. - if (fire) fire.icon_state = "fire2" - if(prob(20)) - to_chat(src, "You feel a searing heat!") - else - if (fire) fire.icon_state = "fire0" - -/mob/living/carbon/alien/handle_fire() - if(..()) - return - bodytemperature += BODYTEMP_HEATING_MAX //If you're on fire, you heat up! - return diff --git a/code/modules/mob/living/carbon/alien/say.dm b/code/modules/mob/living/carbon/alien/say.dm deleted file mode 100644 index be94a833fe3f2..0000000000000 --- a/code/modules/mob/living/carbon/alien/say.dm +++ /dev/null @@ -1,25 +0,0 @@ -/mob/living/carbon/alien/say(var/message) - var/verb = "says" - var/message_range = world.view - - if(client) - if(client.prefs.muted & MUTE_IC) - to_chat(src, "You cannot speak in IC (Muted).") - return - - message = sanitize(message) - - if(stat == 2) - return say_dead(message) - - if(copytext_char(message,1,2) == get_prefix_key(/decl/prefix/custom_emote)) - return emote(copytext_char(message,2)) - - var/datum/language/speaking = parse_language(message) - - message = trim(message) - - if(!message || stat) - return - - ..(message, speaking, verb, null, null, message_range, null) \ No newline at end of file diff --git a/code/modules/mob/living/carbon/alien/update_icons.dm b/code/modules/mob/living/carbon/alien/update_icons.dm deleted file mode 100644 index 748b863815edb..0000000000000 --- a/code/modules/mob/living/carbon/alien/update_icons.dm +++ /dev/null @@ -1,3 +0,0 @@ -/mob/living/carbon/alien/regenerate_icons() - overlays.Cut() - update_icons() diff --git a/code/modules/mob/living/carbon/brain/MMI.dm b/code/modules/mob/living/carbon/brain/MMI.dm deleted file mode 100644 index 73cfd7e662c95..0000000000000 --- a/code/modules/mob/living/carbon/brain/MMI.dm +++ /dev/null @@ -1,189 +0,0 @@ -//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:32 - -/obj/item/device/mmi/digital/New() - src.brainmob = new(src) - src.brainmob.set_stat(CONSCIOUS) - src.brainmob.add_language("Robot Talk") - src.brainmob.add_language("Encoded Audio Language") - - src.brainmob.container = src - src.brainmob.silent = 0 - PickName() - ..() - -/obj/item/device/mmi/digital/proc/PickName() - return - -/obj/item/device/mmi/digital/attackby() - return - -/obj/item/device/mmi/digital/attack_self() - return - -/obj/item/device/mmi/digital/transfer_identity(var/mob/living/carbon/H) - brainmob.dna = H.dna - brainmob.timeofhostdeath = H.timeofdeath - brainmob.set_stat(CONSCIOUS) - if(H.mind) - H.mind.transfer_to(brainmob) - return - -/obj/item/device/mmi - name = "\improper Man-Machine Interface" - desc = "A complex life support shell that interfaces between a brain and electronic devices." - icon = 'icons/obj/assemblies.dmi' - icon_state = "mmi_empty" - w_class = ITEM_SIZE_NORMAL - origin_tech = list(TECH_BIO = 3) - - req_access = list(access_robotics) - - //Revised. Brainmob is now contained directly within object of transfer. MMI in this case. - - var/locked = 0 - var/mob/living/carbon/brain/brainmob = null//The current occupant. - var/obj/item/organ/internal/brain/brainobj = null //The current brain organ. - -/obj/item/device/mmi/attackby(var/obj/item/O as obj, var/mob/user as mob) - if(istype(O,/obj/item/organ/internal/brain) && !brainmob) //Time to stick a brain in it --NEO - - var/obj/item/organ/internal/brain/B = O - if(B.damage >= B.max_damage) - to_chat(user, "That brain is well and truly dead.") - return - else if(!B.brainmob || !B.can_use_mmi) - to_chat(user, "This brain is completely useless to you.") - return - if(!user.unEquip(O, src)) - return - user.visible_message("\The [user] sticks \a [O] into \the [src].") - - brainmob = B.brainmob - B.brainmob = null - brainmob.forceMove(src) - brainmob.container = src - brainmob.set_stat(CONSCIOUS) - brainmob.switch_from_dead_to_living_mob_list() //Update dem lists - - brainobj = O - - SetName("[initial(name)]: ([brainmob.real_name])") - update_icon() - - locked = 1 - - return - - if((istype(O,/obj/item/card/id)||istype(O,/obj/item/modular_computer)) && brainmob) - if(allowed(user)) - locked = !locked - to_chat(user, "You [locked ? "lock" : "unlock"] the brain holder.") - else - to_chat(user, "Access denied.") - return - if(brainmob) - O.attack(brainmob, user)//Oh noooeeeee - return - ..() - - //TODO: ORGAN REMOVAL UPDATE. Make the brain remain in the MMI so it doesn't lose organ data. -/obj/item/device/mmi/attack_self(mob/user as mob) - if(!brainmob) - to_chat(user, "You upend the MMI, but there's nothing in it.") - else if(locked) - to_chat(user, "You upend the MMI, but the brain is clamped into place.") - else - to_chat(user, "You upend the MMI, spilling the brain onto the floor.") - var/obj/item/organ/internal/brain/brain - if (brainobj) //Pull brain organ out of MMI. - brainobj.forceMove(user.loc) - brain = brainobj - brainobj = null - else //Or make a new one if empty. - brain = new(user.loc) - brainmob.container = null//Reset brainmob mmi var. - brainmob.forceMove(brain)//Throw mob into brain. - brainmob.remove_from_living_mob_list() //Get outta here - brain.brainmob = brainmob//Set the brain to use the brainmob - brainmob = null//Set mmi brainmob var to null - - update_icon() - SetName(initial(name)) - -/obj/item/device/mmi/proc/transfer_identity(var/mob/living/carbon/human/H)//Same deal as the regular brain proc. Used for human-->robot people. - brainmob = new(src) - brainmob.SetName(H.real_name) - brainmob.real_name = H.real_name - brainmob.dna = H.dna - brainmob.container = src - - SetName("[initial(name)]: [brainmob.real_name]") - update_icon() - locked = 1 - return - -/obj/item/device/mmi/relaymove(var/mob/user, var/direction) - if(user.stat || user.stunned) - return - var/obj/item/rig/rig = src.get_rig() - if(rig) - rig.forced_move(direction, user) - -/obj/item/device/mmi/Destroy() - if(isrobot(loc)) - var/mob/living/silicon/robot/borg = loc - borg.mmi = null - QDEL_NULL(brainmob) - return ..() - -/obj/item/device/mmi/radio_enabled - name = "radio-enabled man-machine interface" - desc = "The Warrior's bland acronym, MMI, obscures the true horror of this monstrosity. This one comes with a built-in radio." - origin_tech = list(TECH_BIO = 4) - - var/obj/item/device/radio/radio = null//Let's give it a radio. - - -/obj/item/device/mmi/radio_enabled/New() - ..() - radio = new(src) - radio.broadcasting = TRUE - - -/obj/item/device/mmi/radio_enabled/verb/Toggle_Broadcasting() - set name = "Toggle Broadcasting" - set desc = "Toggle broadcasting channel on or off." - set category = "MMI" - set popup_menu = FALSE - set src = usr.loc - if (brainmob.stat) - to_chat(brainmob, "Can't do that while incapacitated or dead.") - radio.listening = !radio.listening - to_chat(brainmob, "Radio is [radio.broadcasting==1 ? "now" : "no longer"] broadcasting.") - - -/obj/item/device/mmi/radio_enabled/verb/Toggle_Listening() - set name = "Toggle Listening" - set desc = "Toggle listening channel on or off." - set category = "MMI" - set popup_menu = FALSE - set src = usr.loc - if (brainmob.stat) - to_chat(brainmob, "Can't do that while incapacitated or dead.") - radio.listening = !radio.listening - to_chat(brainmob, "Radio is [radio.listening==1 ? "now" : "no longer"] receiving broadcast.") - - -/obj/item/device/mmi/emp_act(severity) - if(!brainmob) - return - else - switch(severity) - if(EMP_ACT_HEAVY) - brainmob.emp_damage += rand(20,30) - if(EMP_ACT_LIGHT) - brainmob.emp_damage += rand(10,20) - ..() - -/obj/item/device/mmi/on_update_icon() - icon_state = brainmob ? "mmi_full" : "mmi_empty" diff --git a/code/modules/mob/living/carbon/brain/brain.dm b/code/modules/mob/living/carbon/brain/brain.dm deleted file mode 100644 index a10866521b9d3..0000000000000 --- a/code/modules/mob/living/carbon/brain/brain.dm +++ /dev/null @@ -1,57 +0,0 @@ -//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:32 - -/mob/living/carbon/brain - var/obj/item/container = null - var/timeofhostdeath = 0 - var/emp_damage = 0//Handles a type of MMI damage - var/alert = null - use_me = 0 //Can't use the me verb, it's a freaking immobile brain - icon = 'icons/obj/surgery.dmi' - icon_state = "brain1" - -/mob/living/carbon/brain/New() - create_reagents(1000) - ..() - -/mob/living/carbon/brain/Destroy() - if(key) //If there is a mob connected to this thing. Have to check key twice to avoid false death reporting. - if(stat!=DEAD) //If not dead. - death(1) //Brains can die again. AND THEY SHOULD AHA HA HA HA HA HA - ghostize() //Ghostize checks for key so nothing else is necessary. - . = ..() - -/mob/living/carbon/brain/say_understands(var/other)//Goddamn is this hackish, but this say code is so odd - if (istype(other, /mob/living/silicon/ai)) - if(!(container && istype(container, /obj/item/device/mmi))) - return 0 - else - return 1 - if (istype(other, /mob/living/silicon/pai)) - if(!(container && istype(container, /obj/item/device/mmi))) - return 0 - else - return 1 - if (istype(other, /mob/living/silicon/robot)) - if(!(container && istype(container, /obj/item/device/mmi))) - return 0 - else - return 1 - if (istype(other, /mob/living/carbon/human)) - return 1 - if (istype(other, /mob/living/carbon/slime)) - return 1 - return ..() - -/mob/living/carbon/brain/UpdateLyingBuckledAndVerbStatus() - if(istype(loc, /obj/item/device/mmi)) - use_me = 1 - -/mob/living/carbon/brain/isSynthetic() - return istype(loc, /obj/item/device/mmi/digital) - -/mob/living/carbon/brain/binarycheck() - return isSynthetic() - -/mob/living/carbon/brain/check_has_mouth() - return 0 - diff --git a/code/modules/mob/living/carbon/brain/death.dm b/code/modules/mob/living/carbon/brain/death.dm deleted file mode 100644 index 44aabb3001b4d..0000000000000 --- a/code/modules/mob/living/carbon/brain/death.dm +++ /dev/null @@ -1,14 +0,0 @@ -/mob/living/carbon/brain/death(gibbed) - if(!gibbed && istype(container, /obj/item/device/mmi)) //If not gibbed but in a container. - container.icon_state = "mmi_dead" - return ..(gibbed,"beeps shrilly as the MMI flatlines!") - else - return ..(gibbed,"no message") - -/mob/living/carbon/brain/gib() - if(istype(container, /obj/item/device/mmi)) - qdel(container)//Gets rid of the MMI if there is one - if(loc) - if(istype(loc,/obj/item/organ/internal/brain)) - qdel(loc)//Gets rid of the brain item - ..(null,1) \ No newline at end of file diff --git a/code/modules/mob/living/carbon/brain/life.dm b/code/modules/mob/living/carbon/brain/life.dm deleted file mode 100644 index e191541992b8f..0000000000000 --- a/code/modules/mob/living/carbon/brain/life.dm +++ /dev/null @@ -1,195 +0,0 @@ -/mob/living/carbon/brain/handle_breathing() - return - -/mob/living/carbon/brain/handle_mutations_and_radiation() - if (radiation) - if (radiation > 100) - radiation = 100 - if(!container)//If it's not in an MMI - to_chat(src, "You feel weak.") - else//Fluff-wise, since the brain can't detect anything itself, the MMI handles thing like that - to_chat(src, "STATUS: CRITICAL AMOUNTS OF RADIATION DETECTED.") - switch(radiation) - if(1 to 49) - radiation-- - if(prob(25)) - adjustToxLoss(1) - updatehealth() - - if(50 to 74) - radiation -= 2 - adjustToxLoss(1) - if(prob(5)) - radiation -= 5 - if(!container) - to_chat(src, "You feel weak.") - else - to_chat(src, "STATUS: DANGEROUS LEVELS OF RADIATION DETECTED.") - updatehealth() - - if(75 to 100) - radiation -= 3 - adjustToxLoss(3) - updatehealth() - - -/mob/living/carbon/brain/handle_environment(datum/gas_mixture/environment) - if(!environment) - return - var/environment_heat_capacity = environment.heat_capacity() - if(istype(get_turf(src), /turf/space)) - var/turf/heat_turf = get_turf(src) - environment_heat_capacity = heat_turf.heat_capacity - - if((environment.temperature > (T0C + 50)) || (environment.temperature < (T0C + 10))) - var/transfer_coefficient = 1 - - handle_temperature_damage(HEAD, environment.temperature, environment_heat_capacity*transfer_coefficient) - - if(stat==2) - bodytemperature += 0.1*(environment.temperature - bodytemperature)*environment_heat_capacity/(environment_heat_capacity + 270000) - - //Account for massive pressure differences - - return //TODO: DEFERRED - -/mob/living/carbon/brain/proc/handle_temperature_damage(body_part, exposed_temperature, exposed_intensity) - if(status_flags & GODMODE) return - - if(exposed_temperature > bodytemperature) - var/discomfort = min( abs(exposed_temperature - bodytemperature)*(exposed_intensity)/2000000, 1.0) - //adjustFireLoss(2.5*discomfort) - //adjustFireLoss(5.0*discomfort) - adjustFireLoss(20.0*discomfort) - - else - var/discomfort = min( abs(exposed_temperature - bodytemperature)*(exposed_intensity)/2000000, 1.0) - //adjustFireLoss(2.5*discomfort) - adjustFireLoss(5.0*discomfort) - - -/mob/living/carbon/brain/handle_chemicals_in_body() - chem_effects.Cut() - - if(touching) touching.metabolize() - var/datum/reagents/metabolism/ingested = get_ingested_reagents() - if(istype(ingested)) ingested.metabolize() - if(bloodstr) bloodstr.metabolize() - - handle_confused() - // decrement dizziness counter, clamped to 0 - if(resting) - dizziness = max(0, dizziness - 5) - else - dizziness = max(0, dizziness - 1) - - updatehealth() - - return //TODO: DEFERRED - -/mob/living/carbon/brain/handle_regular_status_updates() //TODO: comment out the unused bits >_> - updatehealth() - - if(stat == DEAD) //DEAD. BROWN BREAD. SWIMMING WITH THE SPESS CARP - blinded = 1 - silent = 0 - else //ALIVE. LIGHTS ARE ON - if( !container && (health < config.health_threshold_dead || ((world.time - timeofhostdeath) > config.revival_brain_life)) ) - death() - blinded = 1 - silent = 0 - return 1 - - //Handling EMP effect in the Life(), it's made VERY simply, and has some additional effects handled elsewhere - if(emp_damage) //This is pretty much a damage type only used by MMIs, dished out by the emp_act - if(!(container && istype(container, /obj/item/device/mmi))) - emp_damage = 0 - else - emp_damage = round(emp_damage,1)//Let's have some nice numbers to work with - switch(emp_damage) - if(31 to INFINITY) - emp_damage = 30//Let's not overdo it - if(21 to 30)//High level of EMP damage, unable to see, hear, or speak - eye_blind = 1 - blinded = 1 - ear_deaf = 1 - silent = 1 - if(!alert)//Sounds an alarm, but only once per 'level' - emote("alarm") - to_chat(src, "Major electrical distruption detected: System rebooting.") - alert = 1 - if(prob(75)) - emp_damage -= 1 - if(20) - alert = 0 - blinded = 0 - eye_blind = 0 - ear_deaf = 0 - silent = 0 - emp_damage -= 1 - if(11 to 19)//Moderate level of EMP damage, resulting in nearsightedness and ear damage - eye_blurry = 1 - ear_damage = 1 - if(!alert) - emote("alert") - to_chat(src, "Primary systems are now online.") - alert = 1 - if(prob(50)) - emp_damage -= 1 - if(10) - alert = 0 - eye_blurry = 0 - ear_damage = 0 - emp_damage -= 1 - if(2 to 9)//Low level of EMP damage, has few effects(handled elsewhere) - if(!alert) - emote("notice") - to_chat(src, "System reboot nearly complete.") - alert = 1 - if(prob(25)) - emp_damage -= 1 - if(1) - alert = 0 - to_chat(src, "All systems restored.") - emp_damage -= 1 - - return 1 - -/mob/living/carbon/brain/handle_regular_hud_updates() - update_sight() - if (healths) - if (stat != 2) - switch(health) - if(100 to INFINITY) - healths.icon_state = "health0" - if(80 to 100) - healths.icon_state = "health1" - if(60 to 80) - healths.icon_state = "health2" - if(40 to 60) - healths.icon_state = "health3" - if(20 to 40) - healths.icon_state = "health4" - if(0 to 20) - healths.icon_state = "health5" - else - healths.icon_state = "health6" - else - healths.icon_state = "health7" - - if(stat != DEAD) - if(blinded) - overlay_fullscreen("blind", /obj/screen/fullscreen/blind) - else - clear_fullscreen("blind") - set_fullscreen(disabilities & NEARSIGHTED, "impaired", /obj/screen/fullscreen/impaired, 1) - set_fullscreen(eye_blurry, "blurry", /obj/screen/fullscreen/blurry) - set_fullscreen(druggy, "high", /obj/screen/fullscreen/high) - if (machine) - if (!( machine.check_eye(src) )) - reset_view(null) - else - if(client && !client.adminobs) - reset_view(null) - - return 1 diff --git a/code/modules/mob/living/carbon/brain/login.dm b/code/modules/mob/living/carbon/brain/login.dm deleted file mode 100644 index 57c41cc659bcf..0000000000000 --- a/code/modules/mob/living/carbon/brain/login.dm +++ /dev/null @@ -1,3 +0,0 @@ -/mob/living/carbon/brain/Login() - ..() - sleeping = 0 \ No newline at end of file diff --git a/code/modules/mob/living/carbon/brain/robot.dm b/code/modules/mob/living/carbon/brain/robot.dm deleted file mode 100644 index 4c7b3a8f8f44c..0000000000000 --- a/code/modules/mob/living/carbon/brain/robot.dm +++ /dev/null @@ -1,18 +0,0 @@ -/obj/item/device/mmi/digital/robot - name = "robotic intelligence circuit" - desc = "The pinnacle of artifical intelligence which can be achieved using classical computer science." - icon = 'icons/obj/module.dmi' - icon_state = "mainboard" - w_class = ITEM_SIZE_NORMAL - origin_tech = list(TECH_ENGINEERING = 4, TECH_MATERIAL = 3, TECH_DATA = 4) - -/obj/item/device/mmi/digital/robot/PickName() - src.brainmob.SetName("[pick(list("ADA","DOS","GNU","MAC","WIN"))]-[random_id(type,1000,9999)]") - src.brainmob.real_name = src.brainmob.name - -/obj/item/device/mmi/digital/robot/transfer_identity(var/mob/living/carbon/H) - ..() - if(brainmob.mind) - brainmob.mind.assigned_role = "Robotic Intelligence" - to_chat(brainmob, "You feel slightly disoriented. That's normal when you're little more than a complex circuit.") - return diff --git a/code/modules/mob/living/carbon/brain/say.dm b/code/modules/mob/living/carbon/brain/say.dm deleted file mode 100644 index 61dfa5dd40b14..0000000000000 --- a/code/modules/mob/living/carbon/brain/say.dm +++ /dev/null @@ -1,38 +0,0 @@ -//TODO: Convert this over for languages. -/mob/living/carbon/brain/say(var/message) - if (silent) - return - - message = sanitize(message) - - if(!(container && istype(container, /obj/item/device/mmi))) - return //No MMI, can't speak, bucko./N - else - var/datum/language/speaking = parse_language(message) - if(speaking) - message = copytext_char(message, max(2+length(speaking.key),3)) //inf, was message = copytext_char(message, 2+length(speaking.key)) - var/verb = "says" - var/ending = copytext_char(message, length(message) - 1) - if (speaking) - verb = speaking.get_spoken_verb(ending) - else - if(ending=="!") - verb = pick("восклицает","выкрикивает") //INF, WAS verb=pick("exclaims","shouts","yell") - if(ending=="?") - verb = "спрашивает" //INF, WAS verb="asks" - - if(prob(emp_damage*4)) - if(prob(10))//10% chane to drop the message entirely - return - else - message = Gibberish(message, (emp_damage*6))//scrambles the message, gets worse when emp_damage is higher - - if(speaking && speaking.flags & HIVEMIND) - speaking.broadcast(src,trim(message)) - return - - if(istype(container, /obj/item/device/mmi/radio_enabled)) - var/obj/item/device/mmi/radio_enabled/R = container - if(R.radio) - spawn(0) R.radio.hear_talk(src, sanitize(message), verb, speaking) - ..(trim(message), speaking, verb) diff --git a/code/modules/mob/living/carbon/breathe.dm b/code/modules/mob/living/carbon/breathe.dm deleted file mode 100644 index 86c017bfaf762..0000000000000 --- a/code/modules/mob/living/carbon/breathe.dm +++ /dev/null @@ -1,98 +0,0 @@ -//Common breathing procs - -#define MOB_BREATH_DELAY 2 - -//Start of a breath chain, calls breathe() -/mob/living/carbon/handle_breathing() - if((life_tick % MOB_BREATH_DELAY) == 0 || failed_last_breath || is_asystole()) //First, resolve location and get a breath - breathe() - -/mob/living/carbon/proc/breathe(var/active_breathe = 1) - //if(istype(loc, /obj/machinery/atmospherics/unary/cryo_cell)) return - if(!need_breathe()) return - - var/datum/gas_mixture/breath = null - - //First, check if we can breathe at all - if(handle_drowning() || (is_asystole() && !(CE_STABLE in chem_effects) && active_breathe)) //crit aka circulatory shock - losebreath = max(2, losebreath + 1) - - if(losebreath>0) //Suffocating so do not take a breath - losebreath-- - if (prob(10) && !is_asystole() && active_breathe) //Gasp per 10 ticks? Sounds about right. - emote("gasp") - else - //Okay, we can breathe, now check if we can get air - var/volume_needed = get_breath_volume() - breath = get_breath_from_internal(volume_needed) //First, check for air from internals - if(!breath) - breath = get_breath_from_environment(volume_needed) //No breath from internals so let's try to get air from our location - if(!breath) - var/static/datum/gas_mixture/vacuum //avoid having to create a new gas mixture for each breath in space - if(!vacuum) vacuum = new - - breath = vacuum //still nothing? must be vacuum - - handle_breath(breath) - handle_post_breath(breath) - -/mob/living/carbon/proc/get_breath_from_internal(var/volume_needed=STD_BREATH_VOLUME) //hopefully this will allow overrides to specify a different default volume without breaking any cases where volume is passed in. - if(internal) - if (!contents.Find(internal)) - set_internals(null) - if (!(wear_mask && (wear_mask.item_flags & ITEM_FLAG_AIRTIGHT))) - set_internals(null) - if(internal) - if (internals) - internals.icon_state = "internal1" - return internal.remove_air_volume(volume_needed) - else - if (internals) - internals.icon_state = "internal0" - return null - -/mob/living/carbon/proc/get_breath_from_environment(var/volume_needed=STD_BREATH_VOLUME, var/atom/location = src.loc) - if(volume_needed <= 0) - return - var/datum/gas_mixture/breath = null - - var/datum/gas_mixture/environment - if(location) - environment = location.return_air_for_internal_lifeform() - - if(environment) - breath = environment.remove_volume(volume_needed) - handle_chemical_smoke(environment) //handle chemical smoke while we're at it - - if(breath && breath.total_moles) - //handle mask filtering - if(istype(wear_mask, /obj/item/clothing/mask) && breath) - var/obj/item/clothing/mask/M = wear_mask - var/datum/gas_mixture/filtered = M.filter_air(breath) - location.assume_air(filtered) - return breath - return null - -//Handle possble chem smoke effect -/mob/living/carbon/proc/handle_chemical_smoke(var/datum/gas_mixture/environment) - if(species && environment.return_pressure() < species.breath_pressure/5) - return //pressure is too low to even breathe in. - if(wear_mask && (wear_mask.item_flags & ITEM_FLAG_BLOCK_GAS_SMOKE_EFFECT)) - return - - for(var/obj/effect/effect/smoke/chem/smoke in view(1, src)) - if(smoke.reagents.total_volume) - smoke.reagents.trans_to_mob(src, 5, CHEM_INGEST, copy = 1) - smoke.reagents.trans_to_mob(src, 5, CHEM_BLOOD, copy = 1) - // I dunno, maybe the reagents enter the blood stream through the lungs? - break // If they breathe in the nasty stuff once, no need to continue checking - -/mob/living/carbon/proc/get_breath_volume() - return STD_BREATH_VOLUME - -/mob/living/carbon/proc/handle_breath(datum/gas_mixture/breath) - return - -/mob/living/carbon/proc/handle_post_breath(datum/gas_mixture/breath) - if(breath) - loc.assume_air(breath) //by default, exhale diff --git a/code/modules/mob/living/carbon/carbon.dm b/code/modules/mob/living/carbon/carbon.dm deleted file mode 100644 index 15a62fa9b9014..0000000000000 --- a/code/modules/mob/living/carbon/carbon.dm +++ /dev/null @@ -1,521 +0,0 @@ -/mob/living/carbon/New() - //setup reagent holders - bloodstr = new/datum/reagents/metabolism(120, src, CHEM_BLOOD) - touching = new/datum/reagents/metabolism(1000, src, CHEM_TOUCH) - reagents = bloodstr - - if (!default_language && species_language) - default_language = all_languages[species_language] - ..() - -/mob/living/carbon/Destroy() - QDEL_NULL(touching) - bloodstr = null // We don't qdel(bloodstr) because it's the same as qdel(reagents) - QDEL_NULL_LIST(internal_organs) - QDEL_NULL_LIST(hallucinations) - if(loc) - for(var/mob/M in contents) - M.dropInto(loc) - else - for(var/mob/M in contents) - qdel(M) - return ..() - -/mob/living/carbon/rejuvenate() - bloodstr.clear_reagents() - touching.clear_reagents() - var/datum/reagents/R = get_ingested_reagents() - if(istype(R)) - R.clear_reagents() - set_nutrition(400) - set_hydration(400) - ..() - -/mob/living/carbon/Move(NewLoc, direct) - . = ..() - if(!.) - return - - if(stat != DEAD) - - if((MUTATION_FAT in src.mutations) && (move_intent.flags & MOVE_INTENT_EXERTIVE) && src.bodytemperature <= 360) - bodytemperature += 2 - - var/nut_removed = DEFAULT_HUNGER_FACTOR/10 - var/hyd_removed = DEFAULT_THIRST_FACTOR/10 - if (move_intent.flags & MOVE_INTENT_EXERTIVE) - nut_removed *= 2 - hyd_removed *= 2 - adjust_nutrition(-nut_removed) - adjust_hydration(-hyd_removed) - - // Moving around increases germ_level faster - if(germ_level < GERM_LEVEL_MOVE_CAP && prob(8)) - germ_level++ - -/mob/living/carbon/relaymove(var/mob/living/user, direction) - if((user in contents) && istype(user)) - if(user.last_special <= world.time) - user.last_special = world.time + 50 - src.visible_message("You hear something rumbling inside [src]'s stomach...") - var/obj/item/I = user.get_active_hand() - if(I && I.force) - var/d = rand(round(I.force / 4), I.force) - if(istype(src, /mob/living/carbon/human)) - var/mob/living/carbon/human/H = src - var/obj/item/organ/external/organ = H.get_organ(BP_CHEST) - if (istype(organ)) - organ.take_external_damage(d, 0) - H.updatehealth() - else - src.take_organ_damage(d, 0) - user.visible_message("[user] attacks [src]'s stomach wall with the [I.name]!") - playsound(user.loc, 'sound/effects/attackblob.ogg', 50, 1) - - if(prob(src.getBruteLoss() - 50)) - gib() - -/mob/living/carbon/gib() - for(var/mob/M in contents) - if(is_species(SPECIES_DIONA) && istype(M, /mob/living/carbon/alien/diona) && (M.stat != DEAD)) - continue - M.dropInto(loc) - visible_message(SPAN_DANGER("\The [M] bursts out of \the [src]!")) - ..() - -/mob/living/carbon/proc/clear_coughedtime() - coughedtime = 0 - -/mob/living/carbon/attack_hand(mob/M as mob) - if(!istype(M, /mob/living/carbon)) return - if (ishuman(M)) - var/mob/living/carbon/human/H = M - var/obj/item/organ/external/temp = H.organs_by_name[BP_R_HAND] - if (H.hand) - temp = H.organs_by_name[BP_L_HAND] - if(temp && !temp.is_usable()) - to_chat(H, "You can't use your [temp.name]") - return - - return - -/mob/living/carbon/electrocute_act(var/shock_damage, var/obj/source, var/siemens_coeff = 1.0, var/def_zone = null) - if(status_flags & GODMODE) return 0 //godmode - - shock_damage = apply_shock(shock_damage, def_zone, siemens_coeff) - - if(!shock_damage) - return 0 - - stun_effect_act(agony_amount=shock_damage, def_zone=def_zone) - - playsound(loc, "sparks", 50, 1, -1) - if (shock_damage > 15) - src.visible_message( - "[src] was electrocuted[source ? " by the [source]" : ""]!", \ - "You feel a powerful shock course through your body!", \ - "You hear a heavy electrical crack." \ - ) - else - src.visible_message( - "[src] was shocked[source ? " by the [source]" : ""].", \ - "You feel a shock course through your body.", \ - "You hear a zapping sound." \ - ) - - switch(shock_damage) - if(11 to 15) - Stun(1) - if(16 to 20) - Stun(2) - if(21 to 25) - Weaken(2) - if(26 to 30) - Weaken(5) - if(31 to INFINITY) - Weaken(10) //This should work for now, more is really silly and makes you lay there forever - - make_jittery(min(shock_damage*5, 200)) - - var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread - s.set_up(5, 1, loc) - s.start() - - return shock_damage - -/mob/living/carbon/proc/apply_shock(var/shock_damage, var/def_zone, var/siemens_coeff = 1.0) - shock_damage *= siemens_coeff - if(shock_damage < 0.5) - return 0 - if(shock_damage < 1) - shock_damage = 1 - apply_damage(shock_damage, DAMAGE_BURN, def_zone, used_weapon="Electrocution") - return(shock_damage) - -/mob/proc/swap_hand() - return - -/mob/living/carbon/swap_hand() - . = ..() - var/obj/item/prev_held = get_active_hand() - hand = !hand - if(hud_used.l_hand_hud_object && hud_used.r_hand_hud_object) - if(hand) //This being 1 means the left hand is in use - hud_used.l_hand_hud_object.icon_state = "l_hand_active" - hud_used.r_hand_hud_object.icon_state = "r_hand_inactive" - else - hud_used.l_hand_hud_object.icon_state = "l_hand_inactive" - hud_used.r_hand_hud_object.icon_state = "r_hand_active" - var/obj/item/new_held = get_active_hand() - if (prev_held != new_held) - if (istype(prev_held)) - prev_held.swapped_from(src) - if (istype(new_held)) - new_held.swapped_to(src) - if(istype(new_held)) - new_held.on_active_hand(src) - -/mob/living/carbon/proc/activate_hand(var/selhand) //0 or "r" or "right" for right hand; 1 or "l" or "left" for left hand. - - if(istext(selhand)) - selhand = lowertext(selhand) - - if(selhand == "right" || selhand == "r") - selhand = 0 - if(selhand == "left" || selhand == "l") - selhand = 1 - - if(selhand != src.hand) - swap_hand() - -/mob/living/carbon/proc/help_shake_act(mob/living/carbon/M) - if(!is_asystole()) - if (on_fire) - playsound(src.loc, 'sound/weapons/thudswoosh.ogg', 50, 1, -1) - if (M.on_fire) - M.visible_message("[M] tries to pat out [src]'s flames, but to no avail!", - "You try to pat out [src]'s flames, but to no avail! Put yourself out first!") - else - M.visible_message("[M] tries to pat out [src]'s flames!", - "You try to pat out [src]'s flames! Hot!") - if(do_after(M, 1.5 SECONDS, src, DO_DEFAULT | DO_USER_UNIQUE_ACT | DO_PUBLIC_PROGRESS)) - src.fire_stacks -= 0.5 - if (prob(10) && (M.fire_stacks <= 0)) - M.fire_stacks += 1 - M.IgniteMob() - if (M.on_fire) - M.visible_message("The fire spreads from [src] to [M]!", - "The fire spreads to you as well!") - else - src.fire_stacks -= 0.5 //Less effective than stop, drop, and roll - also accounting for the fact that it takes half as long. - if (src.fire_stacks <= 0) - M.visible_message("[M] successfully pats out [src]'s flames.", - "You successfully pat out [src]'s flames.") - src.ExtinguishMob() - src.fire_stacks = 0 - else - var/t_him = "it" - if (src.gender == MALE) - t_him = "him" - else if (src.gender == FEMALE) - t_him = "her" - if (istype(src,/mob/living/carbon/human) && src:w_uniform) - var/mob/living/carbon/human/H = src - H.w_uniform.add_fingerprint(M) - - var/show_ssd - var/mob/living/carbon/human/H = src - if(istype(H)) show_ssd = H.species.show_ssd - if(show_ssd && ssd_check()) - M.visible_message("[M] shakes [src] trying to wake [t_him] up!", \ - "You shake [src], but they do not respond... Maybe they have S.S.D?") - else if(lying || src.sleeping || player_triggered_sleeping) - src.player_triggered_sleeping = 0 - src.sleeping = max(0,src.sleeping - 5) - M.visible_message("[M] shakes [src] trying to wake [t_him] up!", \ - "You shake [src] trying to wake [t_him] up!") - else - var/mob/living/carbon/human/hugger = M - if(istype(hugger)) - hugger.species.hug(hugger,src) - else - M.visible_message("[M] hugs [src] to make [t_him] feel better!", \ - "You hug [src] to make [t_him] feel better!") - if(M.fire_stacks >= (src.fire_stacks + 3)) - src.fire_stacks += 1 - M.fire_stacks -= 1 - if(M.on_fire) - src.IgniteMob() - - if(stat != DEAD) - AdjustParalysis(-3) - AdjustStunned(-3) - AdjustWeakened(-3) - - playsound(src.loc, 'sound/weapons/thudswoosh.ogg', 50, 1, -1) - -/mob/living/carbon/flash_eyes(intensity = FLASH_PROTECTION_MODERATE, override_blindness_check = FALSE, affect_silicon = FALSE, visual = FALSE, type = /obj/screen/fullscreen/flash) - if(eyecheck() < intensity || override_blindness_check) - return ..() - -// ++++ROCKDTBEN++++ MOB PROCS -- Ask me before touching. -// Stop! ... Hammertime! ~Carn - -/mob/living/carbon/proc/getDNA() - return dna - -/mob/living/carbon/proc/setDNA(var/datum/dna/newDNA) - dna = newDNA - -// ++++ROCKDTBEN++++ MOB PROCS //END - -//Throwing stuff -/mob/proc/throw_item(atom/target) - return - -/mob/living/carbon/throw_item(atom/target) - src.throw_mode_off() - if(src.stat || !target) - return - if(target.type == /obj/screen) return - - var/atom/movable/item = src.get_active_hand() - - if(!item) return - - var/throw_range = item.throw_range - var/itemsize - if (istype(item, /obj/item/grab)) - var/obj/item/grab/G = item - item = G.throw_held() //throw the person instead of the grab - if(ismob(item)) - var/mob/M = item - - //limit throw range by relative mob size - throw_range = round(M.throw_range * min(src.mob_size/M.mob_size, 1)) - itemsize = round(M.mob_size/4) - var/turf/start_T = get_turf(loc) //Get the start and target tile for the descriptors - var/turf/end_T = get_turf(target) - if(start_T && end_T && usr == src) - var/start_T_descriptor = "[start_T] \[[start_T.x],[start_T.y],[start_T.z]\] ([start_T.loc])" - var/end_T_descriptor = "[start_T] \[[end_T.x],[end_T.y],[end_T.z]\] ([end_T.loc])" - admin_attack_log(usr, M, "Threw the victim from [start_T_descriptor] to [end_T_descriptor].", "Was from [start_T_descriptor] to [end_T_descriptor].", "threw, from [start_T_descriptor] to [end_T_descriptor], ") - - else if (istype(item, /obj/item)) - var/obj/item/I = item - itemsize = I.w_class - - if(!unEquip(item)) - return - if(!item || !isturf(item.loc)) - return - - var/message = "\The [src] has thrown \the [item]." - var/skill_mod = 0.2 - if(!skill_check(SKILL_HAULING, min(round(itemsize - ITEM_SIZE_HUGE) + 2, SKILL_MAX))) - if(prob(30)) - Weaken(2) - message = "\The [src] barely manages to throw \the [item], and is knocked off-balance!" - else - skill_mod += 0.2 - - skill_mod += 0.8 * (get_skill_value(SKILL_HAULING) - SKILL_MIN)/(SKILL_MAX - SKILL_MIN) - throw_range *= skill_mod - - //actually throw it! - src.visible_message("[message]", range = min(itemsize*2,world.view)) - - if(!src.lastarea) - src.lastarea = get_area(src.loc) - if((istype(src.loc, /turf/space)) || (src.lastarea.has_gravity == 0)) - if(prob((itemsize * itemsize * 10) * MOB_MEDIUM/src.mob_size)) - src.inertia_dir = get_dir(target, src) - step(src, inertia_dir) - - item.throw_at(target, throw_range, item.throw_speed * skill_mod, src) - -/mob/living/carbon/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume) - if (status_flags & GODMODE) - return - ..() - var/temp_inc = max(min(BODYTEMP_HEATING_MAX*(1-get_heat_protection()), exposed_temperature - bodytemperature), 0) - bodytemperature += temp_inc - -/mob/living/carbon/can_use_hands() - if(handcuffed) - return 0 - if(buckled && ! istype(buckled, /obj/structure/bed/chair)) // buckling does not restrict hands - return 0 - return 1 - -/mob/living/carbon/restrained() - if (handcuffed) - return 1 - return - -/mob/living/carbon/u_equip(obj/item/W as obj) - if(!W) return 0 - - else if (W == handcuffed) - handcuffed = null - update_inv_handcuffed() - if(buckled && buckled.buckle_require_restraints) - buckled.unbuckle_mob() - else - ..() - - return - -/mob/living/carbon/verb/mob_sleep() - set name = "Sleep" - set category = "IC" - - if(alert("Are you sure you want to [player_triggered_sleeping ? "wake up?" : "sleep for a while? Use 'sleep' again to wake up"]", "Sleep", "No", "Yes") == "Yes") - player_triggered_sleeping = !player_triggered_sleeping - -/mob/living/carbon/Bump(var/atom/movable/AM, yes) - if(now_pushing || !yes) - return - ..() - -/mob/living/carbon/slip(slipped_on, stun_duration = 8) - var/area/A = get_area(src) - if(!A.has_gravity()) - return FALSE - if(buckled) - return FALSE - stop_pulling() - to_chat(src, SPAN_WARNING("You slipped on [slipped_on]!")) - playsound(loc, 'sound/misc/slip.ogg', 50, 1, -3) - Weaken(Floor(stun_duration/2)) - return TRUE - -/mob/living/carbon/proc/add_chemical_effect(var/effect, var/magnitude = 1) - if(effect in chem_effects) - chem_effects[effect] += magnitude - else - chem_effects[effect] = magnitude - -/mob/living/carbon/proc/add_up_to_chemical_effect(var/effect, var/magnitude = 1) - if(effect in chem_effects) - chem_effects[effect] = max(magnitude, chem_effects[effect]) - else - chem_effects[effect] = magnitude - -/mob/living/carbon/get_default_language() - if(default_language && can_speak(default_language)) - return default_language - -/mob/living/carbon/proc/get_any_good_language(set_default=FALSE) - var/datum/language/result = get_default_language() - if (!result) - for (var/datum/language/L in languages) - if (can_speak(L)) - result = L - if (set_default) - set_default_language(result) - break - return result - -/mob/living/carbon/show_inv(mob/user as mob) - user.set_machine(src) - var/dat = {" -
              [name]
              -

              -
              Head(Mask): [(wear_mask ? wear_mask : "Nothing")] -
              Left Hand: [(l_hand ? l_hand : "Nothing")] -
              Right Hand: [(r_hand ? r_hand : "Nothing")] -
              Back: [(back ? back : "Nothing")] [((istype(wear_mask, /obj/item/clothing/mask) && istype(back, /obj/item/tank) && !( internal )) ? text(" Set Internal", src) : "")] -
              [(internal ? text("Remove Internal") : "")] -
              Empty Pockets -
              Refresh -
              Close -
              "} - show_browser(user, dat, text("window=mob[];size=325x500", name)) - onclose(user, "mob[name]") - return - -/** - * Return FALSE if victim can't be devoured, DEVOUR_FAST if they can be devoured quickly, DEVOUR_SLOW for slow devour - */ -/mob/living/carbon/proc/can_devour(atom/movable/victim) - return FALSE - -/mob/living/carbon/proc/should_have_organ(var/organ_check) - return 0 - -/mob/living/carbon/proc/can_feel_pain(var/check_organ) - if(isSynthetic()) - return 0 - return !(species && species.species_flags & SPECIES_FLAG_NO_PAIN) - -/mob/living/carbon/proc/get_adjusted_metabolism(metabolism) - return metabolism - -/mob/living/carbon/proc/need_breathe() - return - -/mob/living/carbon/check_has_mouth() - // carbon mobs have mouths by default - // behavior of this proc for humans is overridden in human.dm - return 1 - -/mob/living/carbon/proc/check_mouth_coverage() - // carbon mobs do not have blocked mouths by default - // overridden in human_defense.dm - return null - -/mob/living/carbon/proc/SetStasis(var/factor, var/source = "misc") - if((species && (species.species_flags & SPECIES_FLAG_NO_SCAN)) || isSynthetic()) - return - stasis_sources[source] = factor - -/mob/living/carbon/InStasis() - if(!stasis_value) - return FALSE - return life_tick % stasis_value - -// call only once per run of life -/mob/living/carbon/proc/UpdateStasis() - stasis_value = 0 - if((species && (species.species_flags & SPECIES_FLAG_NO_SCAN)) || isSynthetic()) - return - for(var/source in stasis_sources) - stasis_value += stasis_sources[source] - stasis_sources.Cut() - -/mob/living/carbon/has_chem_effect(chem, threshold) - return (chem_effects[chem] >= threshold) - -/mob/living/carbon/get_sex() - return species.get_sex(src) - -/mob/living/carbon/proc/get_ingested_reagents() - return reagents - -/mob/living/carbon/proc/set_nutrition(var/amt) - nutrition = clamp(amt, 0, initial(nutrition)) - -/mob/living/carbon/proc/adjust_nutrition(var/amt) - set_nutrition(nutrition + amt) - -/mob/living/carbon/proc/set_hydration(var/amt) - hydration = clamp(amt, 0, initial(hydration)) - -/mob/living/carbon/proc/adjust_hydration(var/amt) - set_hydration(hydration + amt) - -/mob/living/carbon/proc/set_internals(obj/item/tank/source, source_string) - var/old_internal = internal - - internal = source - - if(!old_internal && internal) - if(!source_string) - source_string = source.name - to_chat(src, "You are now running on internals from \the [source_string].") - playsound(src, 'sound/effects/internals.ogg', 50, 0) - if(old_internal && !internal) - to_chat(src, "You are no longer running on internals.") - if(internals) - internals.icon_state = "internal[!!internal]" diff --git a/code/modules/mob/living/carbon/carbon_defense.dm b/code/modules/mob/living/carbon/carbon_defense.dm deleted file mode 100644 index ae5db149f3a35..0000000000000 --- a/code/modules/mob/living/carbon/carbon_defense.dm +++ /dev/null @@ -1,25 +0,0 @@ - -/mob/living/carbon/standard_weapon_hit_effects(obj/item/I, mob/living/user, var/effective_force, var/hit_zone) - if(!effective_force) - return 0 - - //Apply weapon damage - var/damage_flags = I.damage_flags() - var/datum/wound/created_wound = apply_damage(effective_force, I.damtype, hit_zone, damage_flags, used_weapon=I, armor_pen=I.armor_penetration) - - //Melee weapon embedded object code. - if (istype(created_wound) && I && I.can_embed() && I.damtype == DAMAGE_BRUTE && !I.anchored && !is_robot_module(I)) - var/weapon_sharp = (damage_flags & DAMAGE_FLAG_SHARP) - var/damage = effective_force //just the effective damage used for sorting out embedding, no further damage is applied here - damage *= 1 - get_blocked_ratio(hit_zone, I.damtype, I.damage_flags(), I.armor_penetration, I.force) - - //blunt objects should really not be embedding in things unless a huge amount of force is involved - var/embed_chance = weapon_sharp? damage/I.w_class : damage/(I.w_class*3) - var/embed_threshold = weapon_sharp? 5*I.w_class : 15*I.w_class - - //Sharp objects will always embed if they do enough damage. - if((weapon_sharp && damage > (10*I.w_class)) || (damage > embed_threshold && prob(embed_chance))) - src.embed(I, hit_zone, supplied_wound = created_wound) - I.has_embedded() - - return 1 diff --git a/code/modules/mob/living/carbon/carbon_defines.dm b/code/modules/mob/living/carbon/carbon_defines.dm deleted file mode 100644 index 63c02c3d8490a..0000000000000 --- a/code/modules/mob/living/carbon/carbon_defines.dm +++ /dev/null @@ -1,41 +0,0 @@ -/mob/living/carbon - gender = MALE - var/datum/species/species //Contains icon generation and language information, set during New(). - - var/life_tick = 0 // The amount of life ticks that have processed on this mob. - var/obj/item/handcuffed = null //Whether or not the mob is handcuffed - //Surgery info - var/list/surgeries_in_progress - //Active emote/pose - var/pose = null - var/list/chem_effects = list() - var/list/chem_doses = list() - var/datum/reagents/metabolism/bloodstr = null - var/datum/reagents/metabolism/touching = null - var/losebreath = 0 //if we failed to breathe last tick - - var/coughedtime = null - - var/cpr_time = 1.0 - var/lastpuke = 0 - var/nutrition = 400 - var/hydration = 400 - - var/obj/item/tank/internal = null//Human/Monkey - - - //these two help govern taste. The first is the last time a taste message was shown to the plaer. - //the second is the message in question. - var/last_taste_time = 0 - var/last_taste_text = "" - - // organ-related variables, see organ.dm and human_organs.dm - var/list/internal_organs = list() - var/list/organs = list() - var/list/obj/item/organ/external/organs_by_name = list() // map organ names to organs - var/list/internal_organs_by_name = list() // so internal organs have less ickiness too - - var/list/stasis_sources = list() - var/stasis_value - - var/player_triggered_sleeping = 0 diff --git a/code/modules/mob/living/carbon/carbon_powers.dm b/code/modules/mob/living/carbon/carbon_powers.dm deleted file mode 100644 index 073e12bfdfca2..0000000000000 --- a/code/modules/mob/living/carbon/carbon_powers.dm +++ /dev/null @@ -1,94 +0,0 @@ -//Brain slug proc for voluntary removal of control. -/mob/living/carbon/proc/release_control() - - set category = "Abilities" - set name = "Release Control" - set desc = "Release control of your host's body." - - var/mob/living/simple_animal/borer/B = has_brain_worms() - - if(B && B.host_brain) - to_chat(src, "You withdraw your probosci, releasing control of [B.host_brain]") - - B.detatch() - - verbs -= /mob/living/carbon/proc/release_control - verbs -= /mob/living/carbon/proc/punish_host - verbs -= /mob/living/carbon/proc/spawn_larvae - - else - to_chat(src, "ERROR NO BORER OR BRAINMOB DETECTED IN THIS MOB, THIS IS A BUG !") - -//Brain slug proc for tormenting the host. -/mob/living/carbon/proc/punish_host() - set category = "Abilities" - set name = "Torment host" - set desc = "Punish your host with agony." - - var/mob/living/simple_animal/borer/B = has_brain_worms() - - if(!B) - return - - if(B.host_brain.ckey) - to_chat(src, "You send a punishing spike of psychic agony lancing into your host's brain.") - if (!can_feel_pain()) - to_chat(B.host_brain, "You feel a strange sensation as a foreign influence prods your mind.") - to_chat(src, "It doesn't seem to be as effective as you hoped.") - else - to_chat(B.host_brain, "Horrific, burning agony lances through you, ripping a soundless scream from your trapped mind!") - -/mob/living/carbon/proc/spawn_larvae() - set category = "Abilities" - set name = "Reproduce" - set desc = "Spawn several young." - - var/mob/living/simple_animal/borer/B = has_brain_worms() - - if(!B) - return - - if(B.chemicals >= 100) - to_chat(src, "Your host twitches and quivers as you rapidly excrete a larva from your sluglike body.") - visible_message("\The [src] heaves violently, expelling a rush of vomit and a wriggling, sluglike creature!") - B.chemicals -= 100 - B.has_reproduced = 1 - - new /obj/effect/decal/cleanable/vomit(get_turf(src)) - playsound(loc, 'sound/effects/splat.ogg', 50, 1) - new /mob/living/simple_animal/borer(get_turf(src), B.generation + 1) - - else - to_chat(src, "You do not have enough chemicals stored to reproduce.") - return - -/** - * Attempt to devour victim - * - * Returns TRUE on success, FALSE on failure - */ -/mob/living/carbon/proc/devour(atom/movable/victim) - var/can_eat = can_devour(victim) - if(!can_eat) - return FALSE - - var/eat_speed = 100 - if(can_eat == DEVOUR_FAST) - eat_speed = 30 - src.visible_message("\The [src] is attempting to devour \the [victim] whole!") - var/mob/target = victim - if(isobj(victim)) - target = src - if(!do_after(src, eat_speed, target, DO_PUBLIC_UNIQUE)) - return FALSE - src.visible_message("\The [src] devours \the [victim] whole!") - if(ismob(victim)) - admin_attack_log(src, victim, "Devoured.", "Was devoured by.", "devoured") - else - src.drop_from_inventory(victim) - move_to_stomach(victim) - - return TRUE - -/mob/living/carbon/proc/move_to_stomach(atom/movable/victim) - return diff --git a/code/modules/mob/living/carbon/damage_procs.dm b/code/modules/mob/living/carbon/damage_procs.dm deleted file mode 100644 index 5db483090ad47..0000000000000 --- a/code/modules/mob/living/carbon/damage_procs.dm +++ /dev/null @@ -1,17 +0,0 @@ -/* -Contians the proc to handle radiation. -Specifically made to do radiation burns. -*/ - - -/mob/living/carbon/apply_radiation(damage) - ..() - - if(species && !isSynthetic()) - if(species.name == SPECIES_DIONA) - return FALSE - damage = 0.25 * damage * species.get_radiation_mod(src) - adjustFireLoss(damage) - - updatehealth() - return TRUE diff --git a/code/modules/mob/living/carbon/give.dm b/code/modules/mob/living/carbon/give.dm deleted file mode 100644 index 7f9c21fb5afba..0000000000000 --- a/code/modules/mob/living/carbon/give.dm +++ /dev/null @@ -1,46 +0,0 @@ -/mob/living/carbon/human/verb/give(var/mob/living/target in view(1)-usr) - set category = "IC" - set name = "Give" - - if(incapacitated()) - return - if(!istype(target) || target.incapacitated() || target.client == null) - return - - var/obj/item/I = usr.get_active_hand() - if(!I) - I = usr.get_inactive_hand() - if(!I) - to_chat(usr, SPAN_WARNING("You don't have anything in your hands to give to \the [target].")) - return - - if(istype(I, /obj/item/grab)) - to_chat(usr, SPAN_WARNING("You can't give someone a grab.")) - return - - usr.visible_message(SPAN_NOTICE("\The [usr] holds out \the [I] to \the [target]."), SPAN_NOTICE("You hold out \the [I] to \the [target], waiting for them to accept it.")) - - if(alert(target,"[usr] wants to give you \a [I]. Will you accept it?",,"Yes","No") == "No") - target.visible_message(SPAN_NOTICE("\The [usr] tried to hand \the [I] to \the [target], but \the [target] didn't want it.")) - return - - if(!I) return - - if(!Adjacent(target)) - to_chat(usr, SPAN_WARNING("You need to stay in reaching distance while giving an object.")) - to_chat(target, SPAN_WARNING("\The [usr] moved too far away.")) - return - - if(I.loc != usr || (usr.l_hand != I && usr.r_hand != I)) - to_chat(usr, SPAN_WARNING("You need to keep the item in your hands.")) - to_chat(target, SPAN_WARNING("\The [usr] seems to have given up on passing \the [I] to you.")) - return - - if(target.r_hand != null && target.l_hand != null) - to_chat(target, SPAN_WARNING("Your hands are full.")) - to_chat(usr, SPAN_WARNING("Their hands are full.")) - return - - if(usr.unEquip(I)) - target.put_in_hands(I) // If this fails it will just end up on the floor, but that's fitting for things like dionaea. - usr.visible_message(SPAN_NOTICE("\The [usr] handed \the [I] to \the [target]."), SPAN_NOTICE("You give \the [I] to \the [target].")) diff --git a/code/modules/mob/living/carbon/hallucinations.dm b/code/modules/mob/living/carbon/hallucinations.dm deleted file mode 100644 index 926108a085630..0000000000000 --- a/code/modules/mob/living/carbon/hallucinations.dm +++ /dev/null @@ -1,264 +0,0 @@ -/mob/living/carbon/var/hallucination_power = 0 -/mob/living/carbon/var/hallucination_duration = 0 -/mob/living/carbon/var/next_hallucination -/mob/living/carbon/var/list/hallucinations = list() - -/mob/living/carbon/proc/hallucination(duration, power) - hallucination_duration = max(hallucination_duration, duration) - hallucination_power = max(hallucination_power, power) - -/mob/living/carbon/proc/adjust_hallucination(duration, power) - hallucination_duration = max(0, hallucination_duration + duration) - hallucination_power = max(0, hallucination_power + power) - -/mob/living/carbon/proc/handle_hallucinations() - //Tick down the duration - hallucination_duration = max(0, hallucination_duration - 1) - if(chem_effects[CE_MIND] > 0) - hallucination_duration = max(0, hallucination_duration - 1) - - //Adjust power if we have some chems that affect it - if(chem_effects[CE_MIND] < 0) - hallucination_power = min(hallucination_power++, 50) - if(chem_effects[CE_MIND] < -1) - hallucination_power = hallucination_power++ - if(chem_effects[CE_MIND] > 0) - hallucination_power = max(hallucination_power - chem_effects[CE_MIND], 0) - - //See if hallucination is gone - if(!hallucination_power) - hallucination_duration = 0 - return - if(!hallucination_duration) - hallucination_power = 0 - return - - if(!client || stat || world.time < next_hallucination) - return - if(chem_effects[CE_MIND] > 0 && prob(chem_effects[CE_MIND]*40)) //antipsychotics help - return - var/hall_delay = rand(10,20) SECONDS - - if(hallucination_power < 50) - hall_delay *= 2 - next_hallucination = world.time + hall_delay - var/list/candidates = list() - for(var/T in subtypesof(/datum/hallucination)) - var/datum/hallucination/H = new T - if(H.can_affect(src)) - candidates += H - if(candidates.len) - var/datum/hallucination/H = pick(candidates) - H.holder = src - H.activate() - -////////////////////////////////////////////////////////////////////////////////////////////////////// -//Hallucination effects datums -////////////////////////////////////////////////////////////////////////////////////////////////////// - -/datum/hallucination - var/mob/living/carbon/holder - var/allow_duplicates = 1 - var/duration = 0 - var/min_power = 0 //at what levels of hallucination power mobs should get it - var/max_power = INFINITY - -/datum/hallucination/proc/start() - -/datum/hallucination/proc/end() - -/datum/hallucination/proc/can_affect(var/mob/living/carbon/C) - if(!C.client) - return 0 - if(min_power > C.hallucination_power) - return 0 - if(max_power < C.hallucination_power) - return 0 - if(!allow_duplicates && (locate(type) in C.hallucinations)) - return 0 - return 1 - -/datum/hallucination/Destroy() - . = ..() - holder = null - -/datum/hallucination/proc/activate() - if(!holder || !holder.client) - return - holder.hallucinations += src - start() - spawn(duration) - if(holder) - end() - holder.hallucinations -= src - qdel(src) - - -//Playing a random sound -/datum/hallucination/sound - var/list/sounds = list('sound/machines/airlock.ogg','sound/effects/explosionfar.ogg','sound/machines/windowdoor.ogg','sound/machines/twobeep.ogg') - -/datum/hallucination/sound/start() - var/turf/T = locate(holder.x + rand(6,11), holder.y + rand(6,11), holder.z) - holder.playsound_local(T,pick(sounds),70) - -/datum/hallucination/sound/tools - sounds = list('sound/items/Ratchet.ogg','sound/items/Welder.ogg','sound/items/Crowbar.ogg','sound/items/Screwdriver.ogg') - -/datum/hallucination/sound/danger - min_power = 30 - sounds = list('sound/effects/Explosion1.ogg','sound/effects/Explosion2.ogg','sound/effects/Glassbr1.ogg','sound/effects/Glassbr2.ogg','sound/effects/Glassbr3.ogg','sound/weapons/smash.ogg') - -/datum/hallucination/sound/spooky - min_power = 50 - sounds = list('sound/effects/ghost.ogg', 'sound/effects/ghost2.ogg', 'sound/effects/Heart Beat.ogg', 'sound/effects/screech.ogg',\ - 'sound/hallucinations/behind_you1.ogg', 'sound/hallucinations/behind_you2.ogg', 'sound/hallucinations/far_noise.ogg', 'sound/hallucinations/growl1.ogg', 'sound/hallucinations/growl2.ogg',\ - 'sound/hallucinations/growl3.ogg', 'sound/hallucinations/im_here1.ogg', 'sound/hallucinations/im_here2.ogg', 'sound/hallucinations/i_see_you1.ogg', 'sound/hallucinations/i_see_you2.ogg',\ - 'sound/hallucinations/look_up1.ogg', 'sound/hallucinations/look_up2.ogg', 'sound/hallucinations/over_here1.ogg', 'sound/hallucinations/over_here2.ogg', 'sound/hallucinations/over_here3.ogg',\ - 'sound/hallucinations/turn_around1.ogg', 'sound/hallucinations/turn_around2.ogg', 'sound/hallucinations/veryfar_noise.ogg', 'sound/hallucinations/wail.ogg') - -//Hearing someone being shot twice -/datum/hallucination/gunfire - var/gunshot - var/turf/origin - duration = 15 - min_power = 30 - -/datum/hallucination/gunfire/start() - gunshot = pick('sound/weapons/gunshot/gunshot_strong.ogg', 'sound/weapons/gunshot/gunshot2.ogg', 'sound/weapons/gunshot/shotgun.ogg', 'sound/weapons/gunshot/gunshot.ogg','sound/weapons/Taser.ogg') - origin = locate(holder.x + rand(4,8), holder.y + rand(4,8), holder.z) - holder.playsound_local(origin,gunshot,50) - -/datum/hallucination/gunfire/end() - holder.playsound_local(origin,gunshot,50) - -//Hearing someone talking to/about you. -/datum/hallucination/talking/can_affect(var/mob/living/carbon/C) - if(!..()) - return 0 - for(var/mob/living/M in oview(C)) - return TRUE - -/datum/hallucination/talking/start() - var/sanity = 5 //even insanity needs some sanity - for(var/mob/living/talker in oview(holder)) - if(talker.stat) - continue - var/message - var/display_name = talker.fake_name ? talker.fake_name : talker.real_name - if(prob(80)) - var/list/names = list() - var/lastname = copytext_char(holder.real_name, findtext(holder.real_name, " ")+1) - var/firstname = copytext_char(holder.real_name, 1, findtext(holder.real_name, " ")) - if(lastname) names += lastname - if(firstname) names += firstname - if(!names.len) - names += holder.real_name - var/add = prob(20) ? ", [pick(names)]" : "" - var/list/phrases = list("[prob(50) ? "Hey, " : ""][pick(names)]!","[prob(50) ? "Hey, " : ""][pick(names)]?","Get out[add]!","Go away[add].","What are you doing[add]?","Where's your ID[add]?") - if(holder.hallucination_power > 50) - phrases += list("What did you come here for[add]?","Don't touch me[add].","You're not getting out of here[add].", "You are a failure, [pick(names)].","Just kill yourself already, [pick(names)]") - message = pick(phrases) - to_chat(holder,"[display_name] [holder.say_quote(message)], \"[message]\"") - else - to_chat(holder,"[display_name] points at [holder.name]") - to_chat(holder,"[display_name] says something softly.") - var/image/speech_bubble = image('icons/mob/talk.dmi',talker,"h[holder.say_test(message)]") - spawn(30) qdel(speech_bubble) - image_to(holder,speech_bubble) - sanity-- //don't spam them in very populated rooms. - if(!sanity) - return - -//Spiderling skitters -/datum/hallucination/skitter/start() - to_chat(holder,"The spiderling skitters[pick(" away"," around","")].") - -//Spiders in your body -/datum/hallucination/spiderbabies - min_power = 40 - -/datum/hallucination/spiderbabies/start() - if(istype(holder,/mob/living/carbon/human)) - var/mob/living/carbon/human/H = holder - var/obj/O = pick(H.organs) - to_chat(H,"You feel something [pick("moving","squirming","skittering")] inside of your [O.name]!") - -//Seeing stuff -/datum/hallucination/mirage - duration = 30 SECONDS - max_power = 30 - var/number = 1 - var/list/things = list() //list of images to display - -/datum/hallucination/mirage/Destroy() - end() - . = ..() - -/datum/hallucination/mirage/proc/generate_mirage() - var/icon/T = new('icons/obj/trash.dmi') - return image(T, pick(T.IconStates()), layer = BELOW_TABLE_LAYER) - -/datum/hallucination/mirage/start() - var/list/possible_points = list() - for(var/turf/simulated/floor/F in view(holder, world.view+1)) - possible_points += F - if(possible_points.len) - for(var/i = 1 to number) - var/image/thing = generate_mirage() - things += thing - thing.loc = pick(possible_points) - holder.client.images += things - -/datum/hallucination/mirage/end() - if(holder.client) - holder.client.images -= things - -//LOADSEMONEY -/datum/hallucination/mirage/money - min_power = 20 - max_power = 45 - number = 2 - -/datum/hallucination/mirage/money/generate_mirage() - return image('icons/obj/items.dmi', "spacecash[pick(1000,500,200,100,50)]", layer = BELOW_TABLE_LAYER) - -//Blood and aftermath of firefight -/datum/hallucination/mirage/carnage - min_power = 50 - number = 10 - -/datum/hallucination/mirage/carnage/generate_mirage() - if(prob(50)) - var/image/I = image('icons/effects/blood.dmi', pick("mfloor1", "mfloor2", "mfloor3", "mfloor4", "mfloor5", "mfloor6", "mfloor7"), layer = BELOW_TABLE_LAYER) - I.color = COLOR_BLOOD_HUMAN - return I - else - var/image/I = image('icons/obj/ammo.dmi', "s-casing-spent", layer = BELOW_TABLE_LAYER) - I.layer = BELOW_TABLE_LAYER - I.dir = pick(GLOB.alldirs) - I.pixel_x = rand(-10,10) - I.pixel_y = rand(-10,10) - return I - -//Fake attack -/datum/hallucination/fakeattack - min_power = 30 - -/datum/hallucination/fakeattack/can_affect(var/mob/living/carbon/C) - if(!..()) - return 0 - for(var/mob/living/M in oview(C,1)) - return TRUE - -/datum/hallucination/fakeattack/start() - for(var/mob/living/M in oview(holder,1)) - to_chat(holder, "[M] has punched [holder]!") - holder.playsound_local(get_turf(holder),"punch",50) - -//Fake injection -/datum/hallucination/fakeattack/hypo - min_power = 30 - -/datum/hallucination/fakeattack/hypo/start() - holder.custom_pain(SPAN_WARNING("You feel a tiny prick!"), 1, TRUE) diff --git a/code/modules/mob/living/carbon/human/MedicalSideEffects.dm b/code/modules/mob/living/carbon/human/MedicalSideEffects.dm deleted file mode 100644 index bb7fc4a4ec92d..0000000000000 --- a/code/modules/mob/living/carbon/human/MedicalSideEffects.dm +++ /dev/null @@ -1,154 +0,0 @@ -// MEDICAL SIDE EFFECT BASE -// ======================== -/datum/medical_effect - var/name = "None" - var/strength = 0 - var/start = 0 - var/list/triggers - var/list/cures - var/cure_message - -/datum/medical_effect/proc/manifest(mob/living/carbon/human/H) - for(var/R in cures) - if(!H.reagents || H.reagents.has_reagent(R)) - return 0 - for(var/R in triggers) - if(H.reagents.get_reagent_amount(R) >= triggers[R]) - return 1 - return 0 - -/datum/medical_effect/proc/on_life(mob/living/carbon/human/H, strength) - return - -/datum/medical_effect/proc/cure(mob/living/carbon/human/H) - for(var/R in cures) - if(H.reagents.has_reagent(R)) - if (cure_message) - to_chat(H, "[cure_message]") - return 1 - return 0 - - -// MOB HELPERS -// =========== -/mob/proc/add_side_effect(name, strength = 0) - return - - -/mob/living/carbon/human/var/list/datum/medical_effect/side_effects = list() - -/mob/living/carbon/human/add_side_effect(name, strength = 0) - for(var/datum/medical_effect/M in side_effects) - if(M.name == name) - M.strength = max(M.strength, 10) - M.start = life_tick - return - var/T = GLOB.side_effects[name] - if (!T) - return - var/datum/medical_effect/M = new T - if(M.name == name) - M.strength = strength - M.start = life_tick - GLOB.side_effects += M - - -/mob/living/carbon/human/proc/handle_medical_side_effects() - //Going to handle those things only every few ticks. - if(life_tick % 15 != 0) - return 0 - - var/list/L = typesof(/datum/medical_effect)-/datum/medical_effect - for(var/T in L) - var/datum/medical_effect/M = new T - if (M.manifest(src)) - src.add_side_effect(M.name) - - // One full cycle(in terms of strength) every 10 minutes - for (var/datum/medical_effect/M in GLOB.side_effects) - if (!M) continue - var/strength_percent = sin((life_tick - M.start) / 2) - - // Only do anything if the effect is currently strong enough - if(strength_percent >= 0.4) - if (M.cure(src) || M.strength > 50) - GLOB.side_effects -= M - M = null - else - if(life_tick % 45 == 0) - M.on_life(src, strength_percent*M.strength) - // Effect slowly growing stronger - M.strength+=0.08 - - -// HEADACHE -// ======== -/datum/medical_effect/headache - name = "Headache" - triggers = list(/datum/reagent/cryoxadone = 10, /datum/reagent/bicaridine = 15, /datum/reagent/tricordrazine = 15) - cures = list(/datum/reagent/alkysine, /datum/reagent/tramadol, /datum/reagent/paracetamol, /datum/reagent/tramadol/oxycodone) - cure_message = "Your head stops throbbing..." - -/datum/medical_effect/headache/on_life(mob/living/carbon/human/H, strength) - var/obj/item/organ/external/head/head = H.get_organ("head") - if(istype(head)) - switch(strength) - if(1 to 10) - H.custom_pain("You feel a light pain in your head.",0, affecting = head) - if(11 to 30) - H.custom_pain("You feel a throbbing pain in your head!",1, affecting = head) - if(31 to INFINITY) - H.custom_pain("You feel an excrutiating pain in your head!",1, affecting = head) - -// BAD STOMACH -// =========== -/datum/medical_effect/bad_stomach - name = "Bad Stomach" - triggers = list(/datum/reagent/kelotane = 30, /datum/reagent/dermaline = 15) - cures = list(/datum/reagent/dylovene) - cure_message = "Your stomach feels a little better now..." - -/datum/medical_effect/bad_stomach/on_life(mob/living/carbon/human/H, strength) - switch(strength) - if(1 to 10) - H.custom_pain("You feel a bit light around the stomach.",0) - if(11 to 30) - H.custom_pain("Your stomach hurts.",0) - if(31 to INFINITY) - H.custom_pain("You feel sick.",1) - -// CRAMPS -// ====== -/datum/medical_effect/cramps - name = "Cramps" - triggers = list(/datum/reagent/dylovene = 30, /datum/reagent/tramadol = 15) - cures = list(/datum/reagent/inaprovaline) - cure_message = "The cramps let up..." - -/datum/medical_effect/cramps/on_life(mob/living/carbon/human/H, strength) - switch(strength) - if(1 to 10) - H.custom_pain("The muscles in your body hurt a little.",0) - if(11 to 30) - H.custom_pain("The muscles in your body cramp up painfully.",0) - if(31 to INFINITY) - H.visible_message("\The [src] flinches as all the muscles in their body cramp up.") - H.custom_pain("There's pain all over your body.",1) - -// ITCH -// ==== -/datum/medical_effect/itch - name = "Itch" - triggers = list(/datum/reagent/space_drugs = 10) - cures = list(/datum/reagent/inaprovaline) - cure_message = "The itching stops..." - -/datum/medical_effect/itch/on_life(mob/living/carbon/human/H, strength) - switch(strength) - if(1 to 10) - H.custom_pain("You feel a slight itch.",0) - if(11 to 30) - H.custom_pain("You want to scratch your itch badly.",0) - if(31 to INFINITY) - H.visible_message("\The [src] shivers slightly.") - H.custom_pain("This itch makes it really hard to concentrate.",1) diff --git a/code/modules/mob/living/carbon/human/appearance.dm b/code/modules/mob/living/carbon/human/appearance.dm deleted file mode 100644 index baaf5b0ec2e2d..0000000000000 --- a/code/modules/mob/living/carbon/human/appearance.dm +++ /dev/null @@ -1,189 +0,0 @@ -/mob/living/carbon/human/proc/change_appearance(flags, species, mob/user = src, datum/topic_state/state = GLOB.default_state) - var/datum/nano_module/appearance_changer/changer = new(src, flags, species) - changer.ui_interact(user, state = state) - -/mob/living/carbon/human/proc/change_species(var/new_species) - if(!new_species) - return - - if(species == new_species) - return - - if(!(new_species in all_species)) - return - - set_species(new_species) - var/datum/antagonist/antag = mind && player_is_antag(mind) - if (antag && antag.required_language) - add_language(antag.required_language) - set_default_language(all_languages[antag.required_language]) - reset_hair() - return 1 - -/mob/living/carbon/human/proc/change_gender(var/gender) - if(src.gender == gender) - return - - src.gender = gender - reset_hair() - update_body() - update_dna() - return 1 - -/mob/living/carbon/human/proc/randomize_gender() - change_gender(pick(species.genders)) - -/mob/living/carbon/human/proc/change_hair(new_head_hair_style) - if(!new_head_hair_style) - return - - if(head_hair_style == new_head_hair_style) - return - - if(!(new_head_hair_style in GLOB.hair_styles_list)) - return - - head_hair_style = new_head_hair_style - - update_hair() - return 1 - -/mob/living/carbon/human/proc/change_facial_hair(new_facial_hair_style) - if(!new_facial_hair_style) - return - - if(facial_hair_style == new_facial_hair_style) - return - - if(!(new_facial_hair_style in GLOB.facial_hair_styles_list)) - return - - facial_hair_style = new_facial_hair_style - - update_hair() - return 1 - -/mob/living/carbon/human/proc/reset_hair() - var/list/valid_hairstyles = generate_valid_hairstyles() - var/list/valid_facial_hairstyles = generate_valid_facial_hairstyles() - - if(valid_hairstyles.len) - head_hair_style = pick(valid_hairstyles) - else - //this shouldn't happen - head_hair_style = "Bald" - - if(valid_facial_hairstyles.len) - facial_hair_style = pick(valid_facial_hairstyles) - else - //this shouldn't happen - facial_hair_style = "Shaved" - - update_hair() - -/mob/living/carbon/human/proc/change_eye_color(var/red, var/green, var/blue) - var/new_eye_color = rgb(red, green, blue) - if (eye_color == new_eye_color) - return - eye_color = new_eye_color - update_eyes() - update_body() - return 1 - -/mob/living/carbon/human/proc/change_hair_color(var/red, var/green, var/blue) - var/new_head_hair_color = rgb(red, green, blue) - if (head_hair_color == new_head_hair_color) - return - head_hair_color = new_head_hair_color - force_update_limbs() - update_body() - update_hair() - return 1 - -/mob/living/carbon/human/proc/change_facial_hair_color(var/red, var/green, var/blue) - var/new_facial_hair_color = rgb(red, green, blue) - if (facial_hair_color == new_facial_hair_color) - return - facial_hair_color = new_facial_hair_color - update_hair() - return 1 - -/mob/living/carbon/human/proc/change_skin_color(var/red, var/green, var/blue) - if (!(species.appearance_flags & HAS_SKIN_COLOR)) - return - var/new_skin_color = rgb(red, green, blue) - if (skin_color == new_skin_color) - return - skin_color = new_skin_color - force_update_limbs() - update_body() - return 1 - -/mob/living/carbon/human/proc/change_skin_tone(var/new_skin_tone) - if(skin_tone == new_skin_tone || !(species.appearance_flags & HAS_A_SKIN_TONE)) - return - skin_tone = new_skin_tone - force_update_limbs() - update_body() - return 1 - -/mob/living/carbon/human/proc/update_dna() - check_dna() - dna.ready_dna(src) - -/mob/living/carbon/human/proc/generate_valid_languages() - var/list/result = list() - for (var/cult_key in cultural_info) - var/decl/cultural_info/culture = cultural_info[cult_key] - if (!istype(culture)) - continue - if (culture.language) - result[culture.language] = all_languages[culture.language] - if (culture.name_language) - result[culture.name_language] = all_languages[culture.name_language] - if (culture.default_language) - result[culture.default_language] = all_languages[culture.default_language] - for (var/lang_key in culture.secondary_langs) - result[lang_key] = all_languages[lang_key] - for (var/lang_key in culture.additional_langs) - result[lang_key] = all_languages[lang_key] - return result - -/mob/living/carbon/human/proc/generate_valid_species(var/check_whitelist = 1, var/list/whitelist = list(), var/list/blacklist = list()) - var/list/valid_species = new() - for(var/current_species_name in all_species) - var/datum/species/current_species = all_species[current_species_name] - - if(check_whitelist) //If we're using the whitelist, make sure to check it! - if((current_species.spawn_flags & SPECIES_IS_RESTRICTED) && !check_rights(R_ADMIN, 0, src)) - continue - if(!is_alien_whitelisted(src, current_species)) - continue - if(whitelist.len && !(current_species_name in whitelist)) - continue - if(blacklist.len && (current_species_name in blacklist)) - continue - - valid_species += current_species_name - - return valid_species - -/mob/living/carbon/human/proc/generate_valid_hairstyles(var/check_gender = 1) - . = list() - var/list/hair_styles = species.get_hair_styles() - for(var/hair_style in hair_styles) - var/datum/sprite_accessory/S = hair_styles[hair_style] - if(check_gender) - if(gender == MALE && S.gender == FEMALE) - continue - if(gender == FEMALE && S.gender == MALE) - continue - .[hair_style] = S - -/mob/living/carbon/human/proc/generate_valid_facial_hairstyles() - return species.get_facial_hair_styles(gender) - -/mob/living/carbon/human/proc/force_update_limbs() - for(var/obj/item/organ/external/O in organs) - O.sync_colour_to_human(src) - update_body(0) diff --git a/code/modules/mob/living/carbon/human/audible_emotes.dm b/code/modules/mob/living/carbon/human/audible_emotes.dm deleted file mode 100644 index 4a1b41ed1621e..0000000000000 --- a/code/modules/mob/living/carbon/human/audible_emotes.dm +++ /dev/null @@ -1,47 +0,0 @@ -/mob/living/proc/agony_scream() //from - if(stat || is_species(SPECIES_MONKEY)) - return - var/scream_sound = null - var/message = null - - if(ishuman(src)) - var/mob/living/carbon/human/H = src - if(!is_muzzled()) - switch(gender) - if(MALE) - scream_sound = pick('sound/voice/emotes/pain_male_1.ogg','sound/voice/emotes/pain_male_2.ogg','sound/voice/emotes/pain_male_3.ogg') - if(FEMALE) - scream_sound = pick('sound/voice/emotes/agony_female_1.ogg','sound/voice/emotes/agony_female_1.ogg','sound/voice/emotes/agony_female_1.ogg') - message = "кричит от боли!" - else - message = "издает громкое мычание!" - - if(scream_sound) - if(H.species.name in SOUNDED_SPECIES) - playsound(src, scream_sound, 50, 0, 1) - - if(message) - custom_emote(2, message) - -/mob/living/proc/agony_moan() - if(stat || is_species(SPECIES_MONKEY)) - return - var/moan_sound = null - var/message = null - - if(ishuman(src)) - var/mob/living/carbon/human/H = src - if(!is_muzzled()) - switch(gender) - if(MALE) moan_sound = pick('sound/voice/emotes/moan_male_1.ogg','sound/voice/emotes/moan_male_2.ogg','sound/voice/emotes/moan_male_3.ogg') - if(FEMALE) moan_sound = pick('sound/voice/emotes/moan_female_1.ogg','sound/voice/emotes/moan_female_2.ogg','sound/voice/emotes/moan_female_3.ogg') - message = "стонет от боли!" - else - message = "издает громкое мычание!" - - if(moan_sound) - if(H.species.name in SOUNDED_SPECIES) - playsound(src, moan_sound, 50, 0, 1) - - if(message) - custom_emote(2, message) diff --git a/code/modules/mob/living/carbon/human/corpse.dm b/code/modules/mob/living/carbon/human/corpse.dm deleted file mode 100644 index 093fad8db650f..0000000000000 --- a/code/modules/mob/living/carbon/human/corpse.dm +++ /dev/null @@ -1,184 +0,0 @@ -//These are meant for spawning on maps, namely Away Missions. - -//If someone can do this in a neater way, be my guest-Kor - -//To do: Allow corpses to appear mangled, bloody, etc. Allow customizing the bodies appearance (they're all bald and white right now). - -#define CORPSE_SPAWNER_RANDOM_NAME FLAG(0) -#define CORPSE_SPAWNER_CUT_SURVIVAL FLAG(1) -#define CORPSE_SPAWNER_CUT_ID_PDA (CORPSE_SPAWNER_RANDOM_NAME | CORPSE_SPAWNER_CUT_SURVIVAL) -#define CORPSE_SPAWNER_PLAIN_HEADSET FLAG(2) - -#define CORPSE_SPAWNER_RANDOM_SKIN_TONE FLAG(3) -#define CORPSE_SPAWNER_RANDOM_SKIN_COLOR FLAG(4) -#define CORPSE_SPAWNER_RANDOM_HAIR_COLOR FLAG(5) -#define CORPSE_SPAWNER_RANDOM_HAIR_STYLE FLAG(6) -#define CORPSE_SPAWNER_RANDOM_FACIAL_STYLE FLAG(7) -#define CORPSE_SPAWNER_RANDOM_EYE_COLOR FLAG(8) -#define CORPSE_SPAWNER_RANDOM_GENDER FLAG(9) - -#define CORPSE_SPAWNER_NO_RANDOMIZATION ~(CORPSE_SPAWNER_RANDOM_NAME|CORPSE_SPAWNER_RANDOM_SKIN_TONE|CORPSE_SPAWNER_RANDOM_SKIN_COLOR|CORPSE_SPAWNER_RANDOM_HAIR_COLOR|CORPSE_SPAWNER_RANDOM_HAIR_STYLE|CORPSE_SPAWNER_RANDOM_FACIAL_STYLE|CORPSE_SPAWNER_RANDOM_EYE_COLOR) - - -/obj/effect/landmark/corpse - name = "Unknown" - var/species = list(SPECIES_HUMAN) // List of species to pick from. - var/corpse_outfits = list(/decl/hierarchy/outfit) // List of outfits to pick from. Uses pickweight() - var/spawn_flags = (~0) - - var/skin_colors_per_species = list() // Custom skin colors, per species -type-, if any. For example if you want dead Skrell to always have blue headtails, or similar - var/skin_tones_per_species = list() // Custom skin tones, per species -type-, if any. See above as to why. - var/eye_colors_per_species = list() // Custom eye colors, per species -type-, if any. See above as to why. - var/hair_colors_per_species = list() // Custom hair colors, per species -type-, if any. See above as to why. - var/hair_styles_per_species = list() // Custom hair styles, per species -type-, if any. For example if you want a punk gang with handlebars. - var/facial_styles_per_species = list() // Custom facial hair styles, per species -type-, if any. See above as to why - var/genders_per_species = list() // For gender biases per species -type- - - -/obj/effect/landmark/corpse/Initialize() - ..() - return INITIALIZE_HINT_LATELOAD - - -/obj/effect/landmark/corpse/LateInitialize() - var/new_species = pickweight(species) - var/mob/living/carbon/human/corpse = new (loc, new_species) - corpse.adjustOxyLoss(corpse.maxHealth) - corpse.setBrainLoss(corpse.maxHealth) - var/obj/item/organ/internal/heart/heart = corpse.internal_organs_by_name[BP_HEART] - if (heart) - heart.pulse = PULSE_NONE - randomize_appearance(corpse, new_species) - equip_outfit(corpse) - corpse.update_icon() - qdel(src) - - -#define HEX_COLOR_TO_RGB_ARGS(X) arglist(GetHexColors(X)) -/obj/effect/landmark/corpse/proc/randomize_appearance(var/mob/living/carbon/human/M, species_choice) - if((spawn_flags & CORPSE_SPAWNER_RANDOM_GENDER)) - if(species_choice in genders_per_species) - M.change_gender(pick(genders_per_species[species_choice])) - else - M.randomize_gender() - - if((spawn_flags & CORPSE_SPAWNER_RANDOM_SKIN_TONE)) - if(species_choice in skin_tones_per_species) - M.change_skin_tone(pick(skin_tones_per_species[species_choice])) - else - M.randomize_skin_tone() - - if((spawn_flags & CORPSE_SPAWNER_RANDOM_SKIN_COLOR)) - if(species_choice in skin_colors_per_species) - M.change_skin_color(HEX_COLOR_TO_RGB_ARGS(pick(skin_colors_per_species[species_choice]))) - else - M.skin_tone = random_skin_tone(M.species) - - if((spawn_flags & CORPSE_SPAWNER_RANDOM_HAIR_COLOR)) - if(species_choice in hair_colors_per_species) - M.change_hair_color(HEX_COLOR_TO_RGB_ARGS(pick(hair_colors_per_species[species_choice]))) - else - M.randomize_hair_color() - var/list/rgb = rgb2num(M.head_hair_color) - M.change_facial_hair_color(rgb[1], rgb[2], rgb[3]) - - if((spawn_flags & CORPSE_SPAWNER_RANDOM_HAIR_STYLE)) - if(species_choice in hair_styles_per_species) - M.change_hair(pick(hair_styles_per_species[species_choice])) - else - M.randomize_hair_style() - - if((spawn_flags & CORPSE_SPAWNER_RANDOM_FACIAL_STYLE)) - if(species_choice in facial_styles_per_species) - M.change_facial_hair(pick(facial_styles_per_species[species_choice])) - else - M.randomize_facial_hair_style() - - if((spawn_flags & CORPSE_SPAWNER_RANDOM_EYE_COLOR)) - if(species_choice in eye_colors_per_species) - M.change_eye_color(HEX_COLOR_TO_RGB_ARGS(pick(eye_colors_per_species[species_choice]))) - else - M.randomize_eye_color() - - var/decl/cultural_info/culture = M.get_cultural_value(TAG_CULTURE) - if(culture && CORPSE_SPAWNER_RANDOM_NAME & spawn_flags) - M.SetName(culture.get_random_name(M.gender)) - else - M.SetName(name) - M.real_name = M.name - -#undef HEX_COLOR_TO_RGB_ARGS - -/obj/effect/landmark/corpse/proc/equip_outfit(var/mob/living/carbon/human/M) - var/adjustments = 0 - adjustments = (spawn_flags & CORPSE_SPAWNER_CUT_SURVIVAL) ? (adjustments|OUTFIT_ADJUSTMENT_SKIP_SURVIVAL_GEAR) : adjustments - adjustments = (spawn_flags & CORPSE_SPAWNER_CUT_ID_PDA) ? (adjustments|OUTFIT_ADJUSTMENT_SKIP_ID_PDA) : adjustments - adjustments = (spawn_flags & CORPSE_SPAWNER_PLAIN_HEADSET) ? (adjustments|OUTFIT_ADJUSTMENT_PLAIN_HEADSET) : adjustments - - var/decl/hierarchy/outfit/corpse_outfit = outfit_by_type(pickweight(corpse_outfits)) - corpse_outfit.equip(M, equip_adjustments = adjustments) - -/obj/effect/landmark/corpse/chef - name = "Chef" - corpse_outfits = list(/decl/hierarchy/outfit/job/service/chef) - -/obj/effect/landmark/corpse/doctor - name = "Doctor" - corpse_outfits = list(/decl/hierarchy/outfit/job/medical/doctor) - -/obj/effect/landmark/corpse/engineer - name = "Engineer" - corpse_outfits = list(/decl/hierarchy/outfit/job/engineering/engineer) - -/obj/effect/landmark/corpse/scientist - name = "Scientist" - corpse_outfits = list(/decl/hierarchy/outfit/job/science/scientist) - -/obj/effect/landmark/corpse/engineer/rig - corpse_outfits = list(/decl/hierarchy/outfit/job/engineering/engineer/void) - -/obj/effect/landmark/corpse/clown - name = "Clown" - corpse_outfits = list(/decl/hierarchy/outfit/clown) - -/obj/effect/landmark/corpse/miner - name = "Miner" - corpse_outfits = list(/decl/hierarchy/outfit/job/cargo/mining) - -/obj/effect/landmark/corpse/miner/rig - corpse_outfits = list(/decl/hierarchy/outfit/job/cargo/mining/void) - - -/obj/effect/landmark/corpse/bridgeofficer - name = "Bridge Officer" - corpse_outfits = list(/decl/hierarchy/outfit/nanotrasen/officer) - -/obj/effect/landmark/corpse/commander - name = "Commander" - corpse_outfits = list(/decl/hierarchy/outfit/nanotrasen/commander) - -/obj/effect/landmark/corpse/pirate - name = "Pirate" - corpse_outfits = list(/decl/hierarchy/outfit/pirate/norm) - spawn_flags = CORPSE_SPAWNER_NO_RANDOMIZATION - -/obj/effect/landmark/corpse/pirate/ranged - name = "Pirate Gunner" - corpse_outfits = list(/decl/hierarchy/outfit/pirate/space) - -/obj/effect/landmark/corpse/russian - name = "Russian" - corpse_outfits = list(/decl/hierarchy/outfit/soviet_soldier) - spawn_flags = CORPSE_SPAWNER_NO_RANDOMIZATION - -/obj/effect/landmark/corpse/russian/ranged - corpse_outfits = list(/decl/hierarchy/outfit/soviet_soldier) - -/obj/effect/landmark/corpse/syndicate - name = "Syndicate Operative" - corpse_outfits = list(/decl/hierarchy/outfit/mercenary/syndicate) - spawn_flags = CORPSE_SPAWNER_NO_RANDOMIZATION - -/obj/effect/landmark/corpse/syndicate/commando - name = "Syndicate Commando" - corpse_outfits = list(/decl/hierarchy/outfit/mercenary/syndicate/commando) diff --git a/code/modules/mob/living/carbon/human/death.dm b/code/modules/mob/living/carbon/human/death.dm deleted file mode 100644 index cabf25e324f20..0000000000000 --- a/code/modules/mob/living/carbon/human/death.dm +++ /dev/null @@ -1,108 +0,0 @@ -/mob/living/carbon/human/gib() - for(var/obj/item/organ/I in internal_organs) - I.removed() - if(!QDELETED(I) && isturf(loc)) - I.throw_at(get_edge_target_turf(src,pick(GLOB.alldirs)),rand(1,3),30) - - for(var/obj/item/organ/external/E in src.organs) - E.droplimb(0,DROPLIMB_EDGE,1) - - sleep(1) - - for(var/obj/item/I in src) - drop_from_inventory(I) - if(!QDELETED(I)) - I.throw_at(get_edge_target_turf(src,pick(GLOB.alldirs)), rand(1,3), round(30/I.w_class)) - - ..(species.gibbed_anim) - gibs(loc, dna, null, species.get_flesh_colour(src), species.get_blood_colour(src)) - -/mob/living/carbon/human/dust() - if(species) - ..(species.dusted_anim, species.remains_type) - else - ..() - -/mob/living/carbon/human/death(gibbed,deathmessage="seizes up and falls limp...", show_dead_message = "You have died.") - - if(stat == DEAD) return - - SET_BIT(hud_updateflag, HEALTH_HUD) - SET_BIT(hud_updateflag, STATUS_HUD) - SET_BIT(hud_updateflag, LIFE_HUD) - - //Handle species-specific deaths. - species.handle_death(src) - - animate_tail_stop() - - //Handle brain slugs. - var/obj/item/organ/external/head = get_organ(BP_HEAD) - var/mob/living/simple_animal/borer/B - - if(head) - for(var/I in head.implants) - if(istype(I,/mob/living/simple_animal/borer)) - B = I - if(B) - if(!B.ckey && ckey && B.controlling) - B.ckey = ckey - B.controlling = 0 - if(B.host_brain.ckey) - ckey = B.host_brain.ckey - B.host_brain.ckey = null - B.host_brain.SetName("host brain") - B.host_brain.real_name = "host brain" - - verbs -= /mob/living/carbon/proc/release_control - - callHook("death", list(src, gibbed)) - - if(SSticker.mode) - SSticker.mode.check_win() - - if(wearing_rig) - wearing_rig.notify_ai("Warning: user death event. Mobility control passed to integrated intelligence system.") - - . = ..(gibbed,"no message") - if(!gibbed) - handle_organs() - if(species.death_sound) - playsound(loc, species.death_sound, 80, 1, 1) - handle_hud_list() - -/mob/living/carbon/human/proc/ChangeToHusk() - if(MUTATION_HUSK in mutations) return - - if(species.name in HUMAN_SPECIES) //Only change hair, and not say, tentacles - if(facial_hair_style) - facial_hair_style = "Shaved" //we only change the icon_state of the hair datum, so it doesn't mess up their UI/UE - if(head_hair_style) - head_hair_style = "Bald" - update_hair(0) - - mutations.Add(MUTATION_HUSK) - for(var/obj/item/organ/external/E in organs) - E.status |= ORGAN_DISFIGURED - update_body(1) - return - -/mob/living/carbon/human/proc/Drain() - ChangeToHusk() - mutations |= MUTATION_HUSK - return - -/mob/living/carbon/human/proc/ChangeToSkeleton() - if(MUTATION_SKELETON in src.mutations) return - - if(facial_hair_style) - facial_hair_style = "Shaved" - if(head_hair_style) - head_hair_style = "Bald" - update_hair(0) - - mutations.Add(MUTATION_SKELETON) - for(var/obj/item/organ/external/E in organs) - E.status |= ORGAN_DISFIGURED - update_body(1) - return diff --git a/code/modules/mob/living/carbon/human/descriptors/_descriptors.dm b/code/modules/mob/living/carbon/human/descriptors/_descriptors.dm deleted file mode 100644 index f737cedec92be..0000000000000 --- a/code/modules/mob/living/carbon/human/descriptors/_descriptors.dm +++ /dev/null @@ -1,116 +0,0 @@ -/* - Small, mechanically supported physical customisation options. - Also allows for per-species physical information ('his neck markings are more important than yours'). - ETA till a downstream ports this and adds boob and penis size: 2 days. -*/ - -/mob/living/carbon/human/proc/show_descriptors_to(var/mob/user) - if(LAZYLEN(descriptors)) - if(user == src) - for(var/entry in descriptors) - var/datum/mob_descriptor/descriptor = species.descriptors[entry] - LAZYADD(., "[descriptor.get_first_person_message_start()] [descriptor.get_standalone_value_descriptor(descriptors[entry])].") - else - for(var/entry in descriptors) - var/datum/mob_descriptor/descriptor = species.descriptors[entry] - - if (!descriptor) - continue - - LAZYADD(., descriptor.get_comparative_value_descriptor(descriptors[entry], user, src)) - -/datum/mob_descriptor - var/name // String ident. - var/chargen_label // String ident for chargen. - var/default_value // Initial value for this descriptor. - var/comparison_offset = 0 // Used for examining similar properties between different species. - var/comparative_value_descriptor_equivalent // String for looking at someone with roughly the same property. - var/list/standalone_value_descriptors // String set for initial descriptor text. - var/list/comparative_value_descriptors_smaller // String set for looking at someone smaller than you. - var/list/comparative_value_descriptors_larger // String set for looking at someone larger than you. - var/list/chargen_value_descriptors // Used for chargen selection of values in cases where there is a hidden meaning. - var/skip_species_mention - -/datum/mob_descriptor/New() - if(!chargen_label) - chargen_label = name - if(!chargen_value_descriptors) - chargen_value_descriptors = list() - for(var/i = 1 to LAZYLEN(standalone_value_descriptors)) - chargen_value_descriptors[standalone_value_descriptors[i]] = i - default_value = Ceil(LAZYLEN(standalone_value_descriptors) * 0.5) - ..() - -/datum/mob_descriptor/proc/get_third_person_message_start(var/datum/gender/my_gender) - return "[my_gender.He] [my_gender.is]" - -/datum/mob_descriptor/proc/get_first_person_message_start() - return "You are" - -/datum/mob_descriptor/proc/get_standalone_value_descriptor(var/check_value) - if(isnull(check_value)) - check_value = default_value - if(check_value && LAZYLEN(standalone_value_descriptors) >= check_value) - return standalone_value_descriptors[check_value] - -// Build a species-specific descriptor string. -/datum/mob_descriptor/proc/get_initial_comparison_component(var/mob/me, var/datum/gender/my_gender, var/datum/gender/other_gender, var/my_value) - var/species_text - if(ishuman(me) && !skip_species_mention) - var/mob/living/carbon/human/H = me - var/use_name - if(H.species.name == SPECIES_SHELL) - use_name = "\improper [SPECIES_HUMAN]" - else - use_name = "\improper [H.species.name]" - species_text = " for \a [use_name]" - - . = "[get_third_person_message_start(my_gender)] [get_standalone_value_descriptor(my_value)][species_text]" - -/datum/mob_descriptor/proc/get_secondary_comparison_component(var/datum/gender/my_gender, var/datum/gender/other_gender, var/my_value, var/comparing_value) - var/raw_value = my_value - my_value += comparison_offset - var/variance = abs((my_value)-comparing_value) - if(variance < 1) - . = "[.], [get_comparative_value_string_equivalent(raw_value, my_gender, other_gender)]" - else - variance = variance / LAZYLEN(standalone_value_descriptors) - if(my_value < comparing_value) - . = "[.], [get_comparative_value_string_smaller(variance, my_gender, other_gender)]" - else if(my_value > comparing_value) - . = "[.], [get_comparative_value_string_larger(variance, my_gender, other_gender)]" - -/datum/mob_descriptor/proc/get_comparative_value_descriptor(var/my_value, var/mob/observer, var/mob/me) - - // Store our gender info for later. - var/datum/gender/my_gender = gender_datums[me.get_gender()] - var/datum/gender/other_gender = gender_datums[observer.get_gender()] - - . = get_initial_comparison_component(me, my_gender, other_gender, my_value) - - // Append the same-descriptor comparison text. - var/comparing_value - if(ishuman(observer)) - var/mob/living/carbon/human/human_observer = observer - if(LAZYLEN(human_observer.descriptors) && !isnull(human_observer.species.descriptors[name]) && !isnull(human_observer.descriptors[name])) - var/datum/mob_descriptor/obs_descriptor = human_observer.species.descriptors[name] - comparing_value = human_observer.descriptors[name] + obs_descriptor.comparison_offset - - if(. && !isnull(comparing_value)) - . = "[.][get_secondary_comparison_component(my_gender, other_gender, my_value, comparing_value)]" - - // We're done, add a full stop. - . = "[.]. " - -/datum/mob_descriptor/proc/get_comparative_value_string_equivalent(var/my_value, var/datum/gender/my_gender, var/datum/gender/other_gender) - return comparative_value_descriptor_equivalent - -/datum/mob_descriptor/proc/get_comparative_value_string_smaller(var/value, var/datum/gender/my_gender, var/datum/gender/other_gender) - var/maxval = LAZYLEN(comparative_value_descriptors_smaller) - value = clamp(Ceil(value * maxval), 1, maxval) - return comparative_value_descriptors_smaller[value] - -/datum/mob_descriptor/proc/get_comparative_value_string_larger(var/value, var/datum/gender/my_gender, var/datum/gender/other_gender) - var/maxval = LAZYLEN(comparative_value_descriptors_larger) - value = clamp(Ceil(value * maxval), 1, maxval) - return comparative_value_descriptors_larger[value] diff --git a/code/modules/mob/living/carbon/human/descriptors/descriptors_generic.dm b/code/modules/mob/living/carbon/human/descriptors/descriptors_generic.dm deleted file mode 100644 index 24a79a466c94b..0000000000000 --- a/code/modules/mob/living/carbon/human/descriptors/descriptors_generic.dm +++ /dev/null @@ -1,61 +0,0 @@ -/datum/mob_descriptor/height - name = "height" - standalone_value_descriptors = list( - "very short", - "short", - "of average height", - "tall", - "very tall" - ) - comparative_value_descriptor_equivalent = "around the same height as you" - comparative_value_descriptors_smaller = list( - "slightly shorter than you", - "shorter than you", - "much shorter than you", - "tiny and insignificant next to you" - ) - comparative_value_descriptors_larger = list( - "slightly taller than you", - "taller than you", - "much taller than you", - "towering over you" - ) - var/list/scale_effect = list( - SPECIES_HUMAN = list(-7, -4, 0, 4, 7), - SPECIES_VATGROWN = list(-7, -4, 0, 4, 7), - SPECIES_SPACER = list(-7, -4, 0, 4, 7), - SPECIES_GRAVWORLDER = list(-7, -4, 0, 4, 7), - SPECIES_MULE = list(-7, -4, 0, 4, 7), - SPECIES_SHELL = list(-7, -4, 0, 4, 7), - SPECIES_IPC = list(-7, -4, 0, 4, 7), - SPECIES_UNATHI = list(-7, -4, 0, 4, 7), - SPECIES_YEOSA = list(-7, -4, 0, 4, 7), - SPECIES_SKRELL = list(-7, -4, 0, 4, 7), - SPECIES_TRITONIAN = list(-7, -4, 0, 4, 7), - ) - -/datum/mob_descriptor/build - name = "build" - comparative_value_descriptor_equivalent = "around the same build as you" - standalone_value_descriptors = list( - "rail thin", - "thin", - "of average build", - "well-built", - "heavily built" - ) - comparative_value_descriptors_smaller = list( - "a bit smaller in build than you", - "smaller in build than you", - "much smaller in build than you", - "dwarfed by your bulk" - ) - comparative_value_descriptors_larger = list( - "slightly larger than you in build", - "built larger than you", - "built much larger than you", - "dwarfing you" - ) - var/list/scale_effect = list( - //SPECIES_TAG_DEFINE = list(lowest, low, middle, high, highest)<,> - ) diff --git a/code/modules/mob/living/carbon/human/descriptors/descriptors_nabber.dm b/code/modules/mob/living/carbon/human/descriptors/descriptors_nabber.dm deleted file mode 100644 index 2b1eed2819bde..0000000000000 --- a/code/modules/mob/living/carbon/human/descriptors/descriptors_nabber.dm +++ /dev/null @@ -1,29 +0,0 @@ -/datum/mob_descriptor/body_length - name = "body length" - comparative_value_descriptor_equivalent = "around the same length as yours" - standalone_value_descriptors = list( - "short and stubby", - "rather short", - "of average length", - "quite long", - "extremely long" - ) - comparative_value_descriptors_smaller = list( - "a bit shorter in length than yours", - "shorter in length than yours", - "much shorter in length than yours", - "tiny in comparison to yours" - ) - comparative_value_descriptors_larger = list( - "slightly longer than yours", - "longer than yours", - "much longer than yours", - "easily twice your length" - ) - - -/datum/mob_descriptor/body_length/get_first_person_message_start() - return "Your body is" - -/datum/mob_descriptor/body_length/get_third_person_message_start(var/datum/gender/my_gender) - return "[my_gender.His] body is" \ No newline at end of file diff --git a/code/modules/mob/living/carbon/human/descriptors/descriptors_skrell.dm b/code/modules/mob/living/carbon/human/descriptors/descriptors_skrell.dm deleted file mode 100644 index 6414430417476..0000000000000 --- a/code/modules/mob/living/carbon/human/descriptors/descriptors_skrell.dm +++ /dev/null @@ -1,27 +0,0 @@ -/datum/mob_descriptor/headtail_length - name = "headtail length" - chargen_label = "headtails (gender)" - skip_species_mention = TRUE - standalone_value_descriptors = list( - "short", - "long" - ) - chargen_value_descriptors = list( - "short (male)" = 1, - "long (female)" = 2 - ) - -/datum/mob_descriptor/headtail_length/get_first_person_message_start() - . = "Your headtails are" - -/datum/mob_descriptor/headtail_length/get_third_person_message_start(var/datum/gender/my_gender) - . = "[my_gender.His] headtails are" - -/datum/mob_descriptor/headtail_length/get_comparative_value_string_equivalent(var/my_value, var/datum/gender/my_gender, var/datum/gender/other_gender) - . = "indicating [other_gender.he] [other_gender.is] [my_value == 1 ? "male" : "female"] like you" - -/datum/mob_descriptor/headtail_length/get_comparative_value_string_smaller(var/value, var/datum/gender/my_gender, var/datum/gender/other_gender) - . = "indicating [other_gender.he] [other_gender.is] male" - -/datum/mob_descriptor/headtail_length/get_comparative_value_string_larger(var/value, var/datum/gender/my_gender, var/datum/gender/other_gender) - . = "indicating [other_gender.he] [other_gender.is] female" diff --git a/code/modules/mob/living/carbon/human/descriptors/descriptors_vox.dm b/code/modules/mob/living/carbon/human/descriptors/descriptors_vox.dm deleted file mode 100644 index fa007fdaa5647..0000000000000 --- a/code/modules/mob/living/carbon/human/descriptors/descriptors_vox.dm +++ /dev/null @@ -1,35 +0,0 @@ -/datum/mob_descriptor/vox_markings - name = "neck markings" - chargen_label = "neck markings (rank)" - skip_species_mention = TRUE - standalone_value_descriptors = list( - "very simplistic", - "rather simple", - "complex", - "moderately complex", - "bewilderingly complex" - ) - chargen_value_descriptors = list( - "servitor" = 1, - "labourer" = 2, - "cannon fodder" = 3, - "raider" = 4, - "leader" = 5 - ) - comparative_value_descriptor_equivalent = "around the same importance as yours" - comparative_value_descriptors_smaller = list( - "slightly less important than yours", - "much less important than yours", - "insignificant and beneath your notice" - ) - comparative_value_descriptors_larger = list( - "slightly more important than yours", - "much more important than yours", - "commanding your unquestioning obedience and respect" - ) - -/datum/mob_descriptor/vox_markings/get_first_person_message_start() - . = "Your neck markings are" - -/datum/mob_descriptor/vox_markings/get_third_person_message_start(var/datum/gender/my_gender) - . = "[my_gender.His] neck markings are" diff --git a/code/modules/mob/living/carbon/human/examine.dm b/code/modules/mob/living/carbon/human/examine.dm deleted file mode 100644 index e417e6e9c282e..0000000000000 --- a/code/modules/mob/living/carbon/human/examine.dm +++ /dev/null @@ -1,416 +0,0 @@ -/mob/living/carbon/human/examine(mob/user, distance) - . = TRUE - var/skipgloves = 0 - var/skipsuitstorage = 0 - var/skipjumpsuit = 0 - var/skipshoes = 0 - var/skipmask = 0 - var/skipears = 0 - var/skipeyes = 0 - var/skipface = 0 - - //exosuits and helmets obscure our view and stuff. - if(wear_suit) - skipgloves = wear_suit.flags_inv & HIDEGLOVES - skipsuitstorage = wear_suit.flags_inv & HIDESUITSTORAGE - skipjumpsuit = wear_suit.flags_inv & HIDEJUMPSUIT - skipshoes = wear_suit.flags_inv & HIDESHOES - - if(head) - skipmask = head.flags_inv & HIDEMASK - skipeyes = head.flags_inv & HIDEEYES - skipears = head.flags_inv & HIDEEARS - skipface = head.flags_inv & HIDEFACE - - if(wear_mask) - skipeyes |= wear_mask.flags_inv & HIDEEYES - skipears |= wear_mask.flags_inv & HIDEEARS - skipface |= wear_mask.flags_inv & HIDEFACE - - //no accuately spotting headsets from across the room. - if(distance > 3) - skipears = 1 - - var/list/msg = list("*---------*\nThis is ") - - var/datum/gender/T = gender_datums[get_gender()] - if(skipjumpsuit && skipface) //big suits/masks/helmets make it hard to tell their gender - T = gender_datums[PLURAL] - else - if(icon) - msg += "[icon2html(icon, user)] " //fucking BYOND: this should stop dreamseeker crashing if we -somehow- examine somebody before their icon is generated - - if(!T) - // Just in case someone VVs the gender to something strange. It'll runtime anyway when it hits usages, better to CRASH() now with a helpful message. - CRASH("Gender datum was null; key was '[(skipjumpsuit && skipface) ? PLURAL : gender]'") - - if(src.fake_name) - msg += "[src.fake_name]" - else - msg += "[src.name]" - - var/is_synth = isSynthetic() - if(!(skipjumpsuit && skipface)) - var/species_name = "\improper " - if(is_synth && species.cyborg_noun) - species_name += "[species.cyborg_noun] [species.get_bodytype(src)]" - else if(species.name == SPECIES_SHELL) - species_name += "Cyborg Human" - else - species_name += "[species.name]" - msg += ", \a [species_name]![(user.can_use_codex() && SScodex.get_codex_entry(get_codex_value())) ? SPAN_NOTICE(" \[?\]") : ""]" - - var/extra_species_text = species.get_additional_examine_text(src) - if(extra_species_text) - msg += "[extra_species_text]
              " - - msg += "
              " - - //uniform - if(w_uniform && !skipjumpsuit) - msg += "[T.He] [T.is] wearing [w_uniform.get_examine_line()].\n" - - //head - if(head) - msg += "[T.He] [T.is] wearing [head.get_examine_line()] on [T.his] head.\n" - - //suit/armour - if(wear_suit) - msg += "[T.He] [T.is] wearing [wear_suit.get_examine_line()].\n" - //suit/armour storage - if(s_store && !skipsuitstorage) - msg += "[T.He] [T.is] carrying [s_store.get_examine_line()] on [T.his] [wear_suit.name].\n" - - //back - if(back) - msg += "[T.He] [T.has] [back.get_examine_line()] on [T.his] back.\n" - - //left hand - if(l_hand) - msg += "[T.He] [T.is] holding [l_hand.get_examine_line()] in [T.his] left hand.\n" - - //right hand - if(r_hand) - msg += "[T.He] [T.is] holding [r_hand.get_examine_line()] in [T.his] right hand.\n" - - //gloves - if(gloves && !skipgloves) - msg += "[T.He] [T.has] [gloves.get_examine_line()] on [T.his] hands.\n" - else if(blood_DNA) - msg += "[T.He] [T.has] [(hand_blood_color != SYNTH_BLOOD_COLOUR) ? "blood" : "oil"]-stained hands!\n" - - //belt - if(belt) - msg += "[T.He] [T.has] [belt.get_examine_line()] about [T.his] waist.\n" - - //shoes - if(shoes && !skipshoes) - msg += "[T.He] [T.is] wearing [shoes.get_examine_line()] on [T.his] feet.\n" - else if(feet_blood_DNA) - msg += "[T.He] [T.has] [(feet_blood_color != SYNTH_BLOOD_COLOUR) ? "blood" : "oil"]-stained feet!\n" - - //mask - if(wear_mask && !skipmask) - msg += "[T.He] [T.has] [wear_mask.get_examine_line()] on [T.his] face.\n" - - //eyes - if(glasses && !skipeyes) - msg += "[T.He] [T.has] [glasses.get_examine_line()] covering [T.his] eyes.\n" - - //left ear - if(l_ear && !skipears) - msg += "[T.He] [T.has] [l_ear.get_examine_line()] on [T.his] left ear.\n" - - //right ear - if(r_ear && !skipears) - msg += "[T.He] [T.has] [r_ear.get_examine_line()] on [T.his] right ear.\n" - - //ID - if(wear_id) - msg += "[T.He] [T.is] wearing [wear_id.get_examine_line()].\n" - - //handcuffed? - if(handcuffed) - if(istype(handcuffed, /obj/item/handcuffs/cable)) - msg += "[T.He] [T.is] [icon2html(handcuffed, user)] restrained with cable!\n" - else - msg += "[T.He] [T.is] [icon2html(handcuffed, user)] handcuffed!\n" - - //buckled - if(buckled) - msg += "[T.He] [T.is] [icon2html(buckled, user)] buckled to [buckled]!\n" - - //Jitters - if(is_jittery) - if(jitteriness >= 300) - msg += "[T.He] [T.is] convulsing violently!\n" - else if(jitteriness >= 200) - msg += "[T.He] [T.is] extremely jittery.\n" - else if(jitteriness >= 100) - msg += "[T.He] [T.is] twitching ever so slightly.\n" - - //Disfigured face - if(!skipface) //Disfigurement only matters for the head currently. - var/obj/item/organ/external/head/E = get_organ(BP_HEAD) - if(E && (E.status & ORGAN_DISFIGURED)) //Check to see if we even have a head and if the head's disfigured. - if(E.species) //Check to make sure we have a species - msg += E.species.disfigure_msg(src) - else //Just in case they lack a species for whatever reason. - msg += "[T.His] face is horribly mangled!\n" - - //splints - for(var/organ in list(BP_L_LEG, BP_R_LEG, BP_L_ARM, BP_R_ARM)) - var/obj/item/organ/external/o = get_organ(organ) - if(o && o.splinted && o.splinted.loc == o) - msg += "[T.He] [T.has] \a [o.splinted] on [T.his] [o.name]!\n" - - if(mSmallsize in mutations) - msg += "[T.He] [T.is] small halfling!\n" - - if (src.stat) - msg += "[T.He] [T.is]n't responding to anything around [T.him] and seems to be unconscious.\n" - if((stat == DEAD || is_asystole() || losebreath || status_flags & FAKEDEATH) && distance <= 3) - msg += "[T.He] [T.does] not appear to be breathing.\n" - - if (fire_stacks > 0) - msg += "[T.He] looks flammable.\n" - else if (fire_stacks < 0) - msg += "[T.He] looks wet.\n" - if(on_fire) - msg += "[T.He] [T.is] on fire!.\n" - - var/ssd_msg = species.get_ssd(src) - if(ssd_msg && (!should_have_organ(BP_BRAIN) || has_brain()) && stat != DEAD) - if(!key) - msg += SPAN_DEBUG("[T.He] [T.is] [ssd_msg]. [T.He] won't be recovering any time soon. (Ghosted)") + "\n" - else if(!client) - msg += SPAN_DEBUG("[T.He] [T.is] [ssd_msg]. (Disconnected)") + "\n" - - if (admin_paralyzed) - msg += SPAN_DEBUG("OOC: [T.He] [T.has] been paralyzed by staff. Please avoid interacting with [T.him] unless cleared to do so by staff.") + "\n" - - var/obj/item/organ/external/head/H = organs_by_name[BP_HEAD] - if(istype(H) && H.forehead_graffiti && H.graffiti_style) - msg += "[T.He] [T.has] \"[H.forehead_graffiti]\" written on [T.his] [H.name] in [H.graffiti_style]!\n" - - if (changed_age) - var/scale = abs(changed_age) / age - if (scale > 0.5) - scale = "a lot " - else if (scale > 0.25) - scale = "" - else - scale = "a little " - msg += "[T.He] looks [scale][changed_age > 0 ? "older" : "younger"] than you remember.\n" - - for (var/obj/aura/web/W in auras) - msg += SPAN_WARNING("[T.He] is covered in webs!\n") - break - - var/list/wound_flavor_text = list() - var/applying_pressure = "" - var/list/shown_objects = list() - var/list/hidden_bleeders = list() - - for(var/organ_tag in species.has_limbs) - - var/list/organ_data = species.has_limbs[organ_tag] - var/organ_descriptor = organ_data["descriptor"] - var/obj/item/organ/external/E = organs_by_name[organ_tag] - - if(!E) - wound_flavor_text[organ_descriptor] = "[T.He] [T.is] missing [T.his] [organ_descriptor].\n" - continue - - wound_flavor_text[E.name] = "" - - if(E.applied_pressure == src) - applying_pressure = "[T.He] [T.is] applying pressure to [T.his] [E.name].
              " - - var/obj/item/clothing/hidden - var/list/clothing_items = list(head, wear_mask, wear_suit, w_uniform, gloves, shoes) - for(var/obj/item/clothing/C in clothing_items) - if(istype(C) && (C.body_parts_covered & E.body_part)) - hidden = C - break - - if(hidden && user != src) - if(E.status & ORGAN_BLEEDING && !(hidden.item_flags & ITEM_FLAG_THICKMATERIAL)) //not through a spacesuit - if(!hidden_bleeders[hidden]) - hidden_bleeders[hidden] = list() - hidden_bleeders[hidden] += E.name - else - if(E.is_stump()) - wound_flavor_text[E.name] += "[T.He] [T.has] a stump where [T.his] [organ_descriptor] should be.\n" - if(LAZYLEN(E.wounds) && E.parent) - wound_flavor_text[E.name] += "[T.He] [T.has] [E.get_wounds_desc()] on [T.his] [E.parent.name].
              " - else - if(!is_synth && BP_IS_ROBOTIC(E) && (E.parent && !BP_IS_ROBOTIC(E.parent) && !BP_IS_ASSISTED(E.parent))) - wound_flavor_text[E.name] = "[T.He] [T.has] a [E.name].\n" - var/wounddesc = E.get_wounds_desc() - if(wounddesc != "nothing") - wound_flavor_text[E.name] += "[T.He] [T.has] [wounddesc] on [T.his] [E.name].
              " - if(!hidden || distance <=1) - if(E.dislocated > 0) - wound_flavor_text[E.name] += "[T.His] [E.joint] is dislocated!
              " - if(((E.status & ORGAN_BROKEN) && E.brute_dam > E.min_broken_damage) || (E.status & ORGAN_MUTATED)) - wound_flavor_text[E.name] += "[T.His] [E.name] is dented and swollen!
              " - - for(var/datum/wound/wound in E.wounds) - var/list/embedlist = wound.embedded_objects - if(LAZYLEN(embedlist)) - shown_objects += embedlist - var/parsedembed[0] - for(var/obj/embedded in embedlist) - if(!parsedembed.len || (!parsedembed.Find(embedded.name) && !parsedembed.Find("multiple [embedded.name]"))) - parsedembed.Add(embedded.name) - else if(!parsedembed.Find("multiple [embedded.name]")) - parsedembed.Remove(embedded.name) - parsedembed.Add("multiple "+embedded.name) - wound_flavor_text["[E.name]"] += "The [wound.desc] on [T.his] [E.name] has \a [english_list(parsedembed, and_text = " and \a ", comma_text = ", \a ")] sticking out of it!
              " - for(var/hidden in hidden_bleeders) - wound_flavor_text[hidden] = "[T.He] [T.has] blood soaking through [hidden] around [T.his] [english_list(hidden_bleeders[hidden])]!
              " - - msg += "" - for(var/limb in wound_flavor_text) - msg += wound_flavor_text[limb] - msg += "" - - for(var/obj/implant in get_visible_implants(0)) - if(implant in shown_objects) - continue - if(src.fake_name) - msg += "[src.fake_name] [T.has] \a [implant.name] sticking out of [T.his] flesh!\n" - else - msg += "[src] [T.has] \a [implant.name] sticking out of [T.his] flesh!\n" - if(digitalcamo) - msg += "[T.He] [T.is] repulsively uncanny!\n" - - if(hasHUD(user, HUD_SECURITY)) - var/perpname = "wot" - var/criminal = "None" - - var/obj/item/card/id/id = GetIdCard() - if(istype(id)) - perpname = id.registered_name - else - if(src.fake_name) - perpname=src.fake_name - else - perpname=src.name - - if(perpname) - var/datum/computer_file/report/crew_record/R = get_crewmember_record(perpname) - if(R) - criminal = R.get_criminalStatus() - - msg += "Criminal status: \[[criminal]\]\n" - msg += "Security records: \[View\]\n" - - if(hasHUD(user, HUD_MEDICAL)) - var/perpname = "wot" - var/medical = "None" - - var/obj/item/card/id/id = GetIdCard() - if(istype(id)) - perpname = id.registered_name - else - if(src.fake_name) - perpname=src.fake_name - else - perpname=src.name - - var/datum/computer_file/report/crew_record/R = get_crewmember_record(perpname) - if(R) - medical = R.get_status() - - msg += "Physical status: \[[medical]\]\n" - msg += "Medical records: \[View\]\n" - - - if(print_flavor_text()) msg += "[print_flavor_text()]\n" - - msg += "*---------*

              " - msg += applying_pressure - - if (pose) - if( findtext(pose,".",length(pose)) == 0 && findtext(pose,"!",length(pose)) == 0 && findtext(pose,"?",length(pose)) == 0 ) - pose = addtext(pose,".") //Makes sure all emotes end with a period. - msg += "[T.He] [pose]\n" - - var/show_descs = show_descriptors_to(user) - if(show_descs) - msg += "[jointext(show_descs, "
              ")]
              " - to_chat(user, jointext(msg, null)) - -//Helper procedure. Called by /mob/living/carbon/human/examine() and /mob/living/carbon/human/Topic() to determine HUD access to security and medical records. -/proc/hasHUD(mob/M as mob, hudtype) - if(istype(M, /mob/living/carbon/human)) - var/mob/living/carbon/human/H = M - var/obj/item/clothing/glasses/G = H.glasses - var/obj/item/card/id/ID = M.GetIdCard() - var/obj/item/organ/internal/augment/active/hud/AUG - for (var/obj/item/organ/internal/augment/active/hud/A in H.internal_organs) // Check for installed and active HUD implants - if (A.hud_type & hudtype) - AUG = A - break - - return ((istype(G) && ((G.hud_type & hudtype) || (G.hud && (G.hud.hud_type & hudtype)))) && G.check_access(ID)) || AUG?.active && AUG.check_access(ID) - else if(istype(M, /mob/living/silicon/robot)) - var/mob/living/silicon/robot/R = M - for(var/obj/item/borg/sight/sight in list(R.module_state_1, R.module_state_2, R.module_state_3)) - if(istype(sight) && (sight.hud_type & hudtype)) - return TRUE - return FALSE - -/mob/living/carbon/human/verb/pose() - set name = "Set Pose" - set desc = "Sets a description which will be shown when someone examines you." - set category = "IC" - - if(src.fake_name) - pose = sanitize(input(usr, "This is [src.fake_name]. [get_visible_gender() == MALE ? "He" : get_visible_gender() == FEMALE ? "She" : "They"]...", "Pose", null) as text) - else - pose = sanitize(input(usr, "This is [src]. [get_visible_gender() == MALE ? "He" : get_visible_gender() == FEMALE ? "She" : "They"]...", "Pose", null) as text) - -/mob/living/carbon/human/verb/set_flavor() - set name = "Set Flavour Text" - set desc = "Sets an extended description of your character's features." - set category = "IC" - - var/list/HTML = list() - HTML += "" - HTML += "
              " - HTML += "Update Flavour Text
              " - HTML += "
              " - HTML += "General: " - HTML += TextPreview(flavor_texts["general"]) - HTML += "
              " - HTML += "Head: " - HTML += TextPreview(flavor_texts["head"]) - HTML += "
              " - HTML += "Face: " - HTML += TextPreview(flavor_texts["face"]) - HTML += "
              " - HTML += "Eyes: " - HTML += TextPreview(flavor_texts["eyes"]) - HTML += "
              " - HTML += "Body: " - HTML += TextPreview(flavor_texts["torso"]) - HTML += "
              " - HTML += "Arms: " - HTML += TextPreview(flavor_texts["arms"]) - HTML += "
              " - HTML += "Hands: " - HTML += TextPreview(flavor_texts["hands"]) - HTML += "
              " - HTML += "Legs: " - HTML += TextPreview(flavor_texts["legs"]) - HTML += "
              " - HTML += "Feet: " - HTML += TextPreview(flavor_texts["feet"]) - HTML += "
              " - HTML += "
              " - HTML +="\[Done\]" - HTML += "" - show_browser(src, jointext(HTML,null), "window=flavor_changes;size=430x300") diff --git a/code/modules/mob/living/carbon/human/hear_say.dm b/code/modules/mob/living/carbon/human/hear_say.dm deleted file mode 100644 index 5b166db2659b7..0000000000000 --- a/code/modules/mob/living/carbon/human/hear_say.dm +++ /dev/null @@ -1,96 +0,0 @@ -/mob/living/carbon/human/hear_say(var/message, var/verb = "says", var/datum/language/language = null, var/alt_name = "",var/italics = 0, var/mob/speaker = null, var/sound/speech_sound, var/sound_vol) - if(!client) - return - - if(speaker && !speaker.client && isghost(src) && get_preference_value(/datum/client_preference/ghost_ears) == GLOB.PREF_ALL_SPEECH && !(speaker in view(src))) - //Does the speaker have a client? It's either random stuff that observers won't care about (Experiment 97B says, 'EHEHEHEHEHEHEHE') - //Or someone snoring. So we make it where they won't hear it. - return - - if(language && (language.flags & (NONVERBAL|SIGNLANG))) - sound_vol = 0 - speech_sound = null - - //make sure the air can transmit speech - hearer's side - var/turf/T = get_turf(src) - if ((T) && (!(isghost(src)))) //Ghosts can hear even in vacuum. - var/datum/gas_mixture/environment = T.return_air() - var/pressure = (environment)? environment.return_pressure() : 0 - if(pressure < SOUND_MINIMUM_PRESSURE && get_dist(speaker, src) > 1) - return - - if (pressure < ONE_ATMOSPHERE*0.4) //sound distortion pressure, to help clue people in that the air is thin, even if it isn't a vacuum yet - italics = 1 - sound_vol *= 0.5 //muffle the sound a bit, so it's like we're actually talking through contact - - if(sleeping || stat == UNCONSCIOUS) - hear_sleep(message) - return - - //non-verbal languages are garbled if you can't see the speaker. Yes, this includes if they are inside a closet. - if (language && (language.flags & NONVERBAL)) - if (!speaker || (src.sdisabilities & BLINDED || src.blinded) || !(speaker in view(src))) - message = stars(message) - - if(!(language && (language.flags & INNATE))) // skip understanding checks for INNATE languages - if(!say_understands(speaker,language)) - if(istype(speaker,/mob/living/simple_animal)) - var/mob/living/simple_animal/S = speaker - message = pick(S.speak) - else - if(language) - message = language.scramble(message, languages) - else - message = stars(message) - - var/speaker_name = "Unknown" - if(speaker) - speaker_name = speaker.name - - if(istype(speaker, /mob/living/carbon/human)) - var/mob/living/carbon/human/H = speaker - speaker_name = H.GetVoice() - - if(italics) - message = "[message]" - - for(var/datum/active_effect/effect in active_effects) - message = effect.handle_heard_msg(message) - speaker_name = effect.handle_heard_name(speaker_name) - - var/track = null - if(isghost(src)) - if(speaker_name != speaker.real_name && speaker.real_name) - speaker_name = "[speaker.real_name] ([speaker_name])" - track = "([ghost_follow_link(speaker, src)]) " - if(get_preference_value(/datum/client_preference/ghost_ears) == GLOB.PREF_ALL_SPEECH && (speaker in view(src))) - message = "[message]" - - if(is_deaf() || get_sound_volume_multiplier() < 0.2) - if(!language || !(language.flags & INNATE)) // INNATE is the flag for audible-emote-language, so we don't want to show an "x talks but you cannot hear them" message if it's set - if(speaker == src) - to_chat(src, "You cannot hear yourself speak!") - else if(!is_blind()) - to_chat(src, "[speaker_name][alt_name] talks but you cannot hear \him.") - else - if (language) - var/nverb = verb - if (say_understands(speaker, language)) - var/skip = FALSE - if (isliving(src)) - var/mob/living/L = src - skip = L.default_language == language - if (!skip) - switch(src.get_preference_value(/datum/client_preference/language_display)) - if(GLOB.PREF_FULL) // Full language name - nverb = "[verb] in [language.name]" - if(GLOB.PREF_SHORTHAND) //Shorthand codes - nverb = "[verb] ([language.shorthand])" - if(GLOB.PREF_OFF)//Regular output - nverb = verb - on_hear_say("[track][speaker_name][alt_name] [language.format_message(message, nverb)]") - else - on_hear_say("[track][speaker_name][alt_name] [verb], \"[message]\"") - if (speech_sound && (get_dist(speaker, src) <= world.view && src.z == speaker.z)) - var/turf/source = speaker? get_turf(speaker) : get_turf(src) - src.playsound_local(source, speech_sound, sound_vol, 1) diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm deleted file mode 100644 index b119b8d9a91d7..0000000000000 --- a/code/modules/mob/living/carbon/human/human.dm +++ /dev/null @@ -1,1886 +0,0 @@ -/mob/living/carbon/human - name = "unknown" - real_name = "unknown" - voice_name = "unknown" - icon = 'icons/mob/human.dmi' - icon_state = "body_m_s" - - var/list/hud_list[10] - var/embedded_flag //To check if we've need to roll for damage on movement while an item is imbedded in us. - var/obj/item/rig/wearing_rig // This is very not good, but it's much much better than calling get_rig() every update_canmove() call. - var/list/stance_limbs - var/list/grasp_limbs - var/step_count - var/dream_timer - -/mob/living/carbon/human/New(var/new_loc, var/new_species = null) - - grasp_limbs = list() - stance_limbs = list() - - if(!dna) - dna = new /datum/dna(null) - // Species name is handled by set_species() - - if(!species) - if(new_species) - set_species(new_species,1) - else - set_species() - - var/decl/cultural_info/culture = SSculture.get_culture(cultural_info[TAG_CULTURE]) - if(culture) - real_name = culture.get_random_name(gender, species.name) - name = real_name - if(mind) - mind.name = real_name - - hud_list[HEALTH_HUD] = new /image/hud_overlay('icons/mob/hud_med.dmi', src, "100") - hud_list[STATUS_HUD] = new /image/hud_overlay('icons/mob/hud.dmi', src, "hudhealthy") - hud_list[LIFE_HUD] = new /image/hud_overlay('icons/mob/hud.dmi', src, "hudhealthy") - hud_list[ID_HUD] = new /image/hud_overlay(GLOB.using_map.id_hud_icons, src, "hudunknown") - hud_list[WANTED_HUD] = new /image/hud_overlay('icons/mob/hud.dmi', src, "hudblank") - hud_list[IMPLOYAL_HUD] = new /image/hud_overlay('icons/mob/hud.dmi', src, "hudblank") - hud_list[IMPCHEM_HUD] = new /image/hud_overlay('icons/mob/hud.dmi', src, "hudblank") - hud_list[IMPTRACK_HUD] = new /image/hud_overlay('icons/mob/hud.dmi', src, "hudblank") - hud_list[SPECIALROLE_HUD] = new /image/hud_overlay('icons/mob/hud.dmi', src, "hudblank") - hud_list[STATUS_HUD_OOC] = new /image/hud_overlay('icons/mob/hud.dmi', src, "hudhealthy") - - GLOB.human_mob_list |= src - ..() - - if(dna) - dna.ready_dna(src) - dna.real_name = real_name - dna.base_skin = base_skin - sync_organ_dna() - make_blood() - -/mob/living/carbon/human/Destroy() - if (dream_timer) - deltimer(dream_timer) - dream_timer = null - GLOB.human_mob_list -= src - worn_underwear = null - for(var/organ in organs) - qdel(organ) - return ..() - -/mob/living/carbon/human/get_ingested_reagents() - if(should_have_organ(BP_STOMACH)) - var/obj/item/organ/internal/stomach/stomach = internal_organs_by_name[BP_STOMACH] - if(stomach) - return stomach.ingested - return touching // Kind of a shitty hack, but makes more sense to me than digesting them. - -/mob/living/carbon/human/proc/metabolize_ingested_reagents() - if(should_have_organ(BP_STOMACH)) - var/obj/item/organ/internal/stomach/stomach = internal_organs_by_name[BP_STOMACH] - if(stomach) - stomach.metabolize() - -/mob/living/carbon/human/get_fullness() - if(!should_have_organ(BP_STOMACH)) - return ..() - var/obj/item/organ/internal/stomach/stomach = internal_organs_by_name[BP_STOMACH] - if(stomach) - var/food_volume = 0 - for(var/datum/reagent/nutriment/A in stomach.ingested.reagent_list) - food_volume += A.volume - return nutrition + food_volume * 15 - return 0 //Always hungry, but you can't actually eat. :( - -/mob/living/carbon/human/ex_act(severity) - if (status_flags & GODMODE) - return - if(!blinded) - flash_eyes() - - var/b_loss = null - var/f_loss = null - switch (severity) - if (EX_ACT_DEVASTATING) - b_loss = 400 - f_loss = 100 - var/atom/target = get_edge_target_turf(src, get_dir(src, get_step_away(src, src))) - throw_at(target, 200, 4) - if (EX_ACT_HEAVY) - b_loss = 60 - f_loss = 60 - - if (get_sound_volume_multiplier() >= 0.2) - ear_damage += 30 - ear_deaf += 120 - if (prob(70)) - Paralyse(10) - - if(EX_ACT_LIGHT) - b_loss = 30 - if (get_sound_volume_multiplier() >= 0.2) - ear_damage += 15 - ear_deaf += 60 - if (prob(50)) - Paralyse(10) - - // focus most of the blast on one organ - apply_damage(0.7 * b_loss, DAMAGE_BRUTE, null, DAMAGE_FLAG_EXPLODE, used_weapon = "Explosive blast") - apply_damage(0.7 * f_loss, DAMAGE_BURN, null, DAMAGE_FLAG_EXPLODE, used_weapon = "Explosive blast") - - // distribute the remaining 30% on all limbs equally (including the one already dealt damage) - apply_damage(0.3 * b_loss, DAMAGE_BRUTE, null, DAMAGE_FLAG_EXPLODE | DAMAGE_FLAG_DISPERSED, used_weapon = "Explosive blast") - apply_damage(0.3 * f_loss, DAMAGE_BURN, null, DAMAGE_FLAG_EXPLODE | DAMAGE_FLAG_DISPERSED, used_weapon = "Explosive blast") - - -/mob/living/carbon/human/proc/implant_loyalty(mob/living/carbon/human/M, override = FALSE) // Won't override by default. - if(!config.use_loyalty_implants && !override) return // Nuh-uh. - - var/obj/item/implant/loyalty/L = new/obj/item/implant/loyalty(M) - L.imp_in = M - L.implanted = 1 - var/obj/item/organ/external/affected = M.organs_by_name[BP_HEAD] - affected.implants += L - L.part = affected - L.implanted(src) - -/mob/living/carbon/human/proc/is_loyalty_implanted(mob/living/carbon/human/M) - for(var/L in M.contents) - if(istype(L, /obj/item/implant/loyalty)) - for(var/obj/item/organ/external/O in M.organs) - if(L in O.implants) - return 1 - return 0 - -/mob/living/carbon/human/restrained() - if (handcuffed) - return 1 - if(grab_restrained()) - return 1 - if (istype(wear_suit, /obj/item/clothing/suit/straight_jacket)) - return 1 - return 0 - -/mob/living/carbon/human/proc/grab_restrained() - for (var/obj/item/grab/G in grabbed_by) - if(G.restrains()) - return TRUE - -/mob/living/carbon/human/var/co2overloadtime = null -/mob/living/carbon/human/var/temperature_resistance = T0C+75 - - -/mob/living/carbon/human/show_inv(mob/user as mob) - if(user.incapacitated() || !user.Adjacent(src) || !user.IsAdvancedToolUser()) - return - - user.set_machine(src) - var/dat = "
              [name]


              " - - for(var/entry in species.hud.gear) - var/list/slot_ref = species.hud.gear[entry] - if((slot_ref["slot"] in list(slot_l_store, slot_r_store))) - continue - var/obj/item/thing_in_slot = get_equipped_item(slot_ref["slot"]) - dat += "
              [slot_ref["name"]]: [istype(thing_in_slot) ? thing_in_slot : "nothing"]" - if(istype(thing_in_slot, /obj/item/clothing)) - var/obj/item/clothing/C = thing_in_slot - if(C.accessories.len) - dat += "
              Remove accessory" - dat += "

              " - - if(species.hud.has_hands) - dat += "
              Left hand: [istype(l_hand) ? l_hand : "nothing"]" - dat += "
              Right hand: [istype(r_hand) ? r_hand : "nothing"]" - - // Do they get an option to set internals? - if(istype(wear_mask, /obj/item/clothing/mask) || istype(head, /obj/item/clothing/head/helmet/space)) - if(istype(back, /obj/item/tank) || istype(belt, /obj/item/tank) || istype(s_store, /obj/item/tank) || istype(l_store, /obj/item/tank) || istype(r_store, /obj/item/tank)) - dat += "
              Toggle internals." - - var/obj/item/clothing/under/suit = w_uniform - // Other incidentals. - if(istype(suit)) - dat += "
              Pockets: Empty or Place Item" - if(suit.has_sensor == 1) - dat += "
              Set sensors" - if (suit.has_sensor && user.get_multitool()) - dat += "
              [suit.has_sensor == SUIT_LOCKED_SENSORS ? "Unl" : "L"]ock sensors" - if(handcuffed) - dat += "
              Handcuffed" - - for (var/obj/aura/web/W in auras) - dat += "
              Webbed" - break - - for(var/entry in worn_underwear) - var/obj/item/underwear/UW = entry - dat += "
              Remove \the [UW]" - - dat += "
              Refresh" - dat += "
              Close" - - show_browser(user, dat, text("window=mob[name];size=340x540")) - onclose(user, "mob[name]") - return - -// called when something steps onto a human -// this handles mulebots and vehicles -/mob/living/carbon/human/Crossed(var/atom/movable/AM) - if(istype(AM, /mob/living/bot/mulebot)) - var/mob/living/bot/mulebot/MB = AM - MB.runOver(src) - -// Get rank from ID, ID inside PDA, PDA, ID in wallet, etc. -/mob/living/carbon/human/proc/get_authentification_rank(var/if_no_id = "No id", var/if_no_job = "No job") - var/obj/item/card/id/id = GetIdCard() - if(istype(id)) - return id.rank ? id.rank : if_no_job - else - return if_no_id - -//gets assignment from ID or ID inside PDA or PDA itself -//Useful when player do something with computers -/mob/living/carbon/human/proc/get_assignment(var/if_no_id = "No id", var/if_no_job = "No job") - var/obj/item/card/id/id = GetIdCard() - if(istype(id)) - return id.assignment ? id.assignment : if_no_job - else - return if_no_id - -//gets name from ID or ID inside PDA or PDA itself -//Useful when player do something with computers -/mob/living/carbon/human/proc/get_authentification_name(var/if_no_id = "Unknown") - var/obj/item/card/id/id = GetIdCard() - if(istype(id)) - return id.registered_name - else - return if_no_id - -//repurposed proc. Now it combines get_id_name() and get_face_name() to determine a mob's name variable. Made into a separate proc as it'll be useful elsewhere -/mob/living/carbon/human/proc/get_visible_name() - var/face_name = get_face_name() - var/id_name = get_id_name("") - if((face_name == "Unknown") && id_name && (id_name != face_name)) - return "[face_name] (as [id_name])" - return face_name - -//Returns "Unknown" if facially disfigured and real_name if not. Useful for setting name when polyacided or when updating a human's name variable -//Also used in AI tracking people by face, so added in checks for head coverings like masks and helmets -/mob/living/carbon/human/proc/get_face_name() - var/obj/item/organ/external/H = get_organ(BP_HEAD) - if(!H || fake_name || (H.status & ORGAN_DISFIGURED) || H.is_stump() || !real_name || (MUTATION_HUSK in mutations) || (wear_mask && (wear_mask.flags_inv&HIDEFACE)) || (head && (head.flags_inv&HIDEFACE))) //Face is unrecognizeable, use ID if able - if(istype(wear_mask) && wear_mask.visible_name) - return wear_mask.visible_name - else if(istype(wearing_rig) && wearing_rig.visible_name) - return wearing_rig.visible_name - else if(fake_name) - return fake_name - else - return "Unknown" - return real_name - -//gets name from ID or PDA itself, ID inside PDA doesn't matter -//Useful when player is being seen by other mobs -/mob/living/carbon/human/proc/get_id_name(var/if_no_id = "Unknown") - . = if_no_id - var/obj/item/card/id/I = GetIdCard() - if(istype(I)) - return I.registered_name - -//Removed the horrible safety parameter. It was only being used by ninja code anyways. -//Now checks siemens_coefficient of the affected area by default -/mob/living/carbon/human/electrocute_act(var/shock_damage, var/obj/source, var/base_siemens_coeff = 1.0, var/def_zone = null) - - if(status_flags & GODMODE) return 0 //godmode - - if(species.siemens_coefficient == -1) - if(stored_shock_by_ref["\ref[src]"]) - stored_shock_by_ref["\ref[src]"] += shock_damage - else - stored_shock_by_ref["\ref[src]"] = shock_damage - return - - if (!def_zone) - def_zone = pick(BP_L_HAND, BP_R_HAND) - - return ..(shock_damage, source, base_siemens_coeff, def_zone) - -/mob/living/carbon/human/apply_shock(var/shock_damage, var/def_zone, var/base_siemens_coeff = 1.0) - var/obj/item/organ/external/initial_organ = get_organ(check_zone(def_zone)) - if(!initial_organ) - initial_organ = pick(organs) - - var/obj/item/organ/external/floor_organ - - if(!lying) - var/list/obj/item/organ/external/standing = list() - for(var/limb_tag in list(BP_L_FOOT, BP_R_FOOT)) - var/obj/item/organ/external/E = organs_by_name[limb_tag] - if(E && E.is_usable()) - standing[E.organ_tag] = E - if((def_zone == BP_L_FOOT || def_zone == BP_L_LEG) && standing[BP_L_FOOT]) - floor_organ = standing[BP_L_FOOT] - if((def_zone == BP_R_FOOT || def_zone == BP_R_LEG) && standing[BP_R_FOOT]) - floor_organ = standing[BP_R_FOOT] - else - floor_organ = DEFAULTPICK(standing, null) - if (floor_organ) - floor_organ = standing[floor_organ] - - if(!floor_organ) - floor_organ = pick(organs) - - var/list/obj/item/organ/external/to_shock = trace_shock(initial_organ, floor_organ) - - if(to_shock && to_shock.len) - shock_damage /= to_shock.len - shock_damage = round(shock_damage, 0.1) - else - return 0 - - var/total_damage = 0 - - for(var/obj/item/organ/external/E in to_shock) - total_damage += ..(shock_damage, E.organ_tag, base_siemens_coeff * get_siemens_coefficient_organ(E)) - - if(total_damage > 10) - local_emp(initial_organ, 3) - - return total_damage - -/mob/living/carbon/human/proc/trace_shock(var/obj/item/organ/external/init, var/obj/item/organ/external/floor) - var/list/obj/item/organ/external/traced_organs = list(floor) - - if(!init) - return - - if(!floor || init == floor) - return list(init) - - for(var/obj/item/organ/external/E in list(floor, init)) - while(E && E.parent_organ) - var/candidate = organs_by_name[E.parent_organ] - if(!candidate || (candidate in traced_organs)) - break // Organ parenthood is not guaranteed to be a tree - E = candidate - traced_organs += E - if(E == init) - return traced_organs - - return traced_organs - -/mob/living/carbon/human/proc/local_emp(var/list/limbs, var/severity = 2) - if(!islist(limbs)) - limbs = list(limbs) - - var/list/EMP = list() - for(var/obj/item/organ/external/limb in limbs) - EMP += limb - EMP += limb.internal_organs - EMP += limb.implants - for(var/atom/E in EMP) - E.emp_act(severity) - -/mob/living/carbon/human/OnSelfTopic(href_list, topic_status) - if (href_list["lookitem"]) - var/obj/item/I = locate(href_list["lookitem"]) - if(I) - src.examinate(I) - return TOPIC_HANDLED - return ..() - -/mob/living/carbon/human/CanUseTopic(mob/user, datum/topic_state/state, href_list) - . = ..() - if(href_list && (href_list["refresh"] || href_list["item"])) - return min(., ..(user, GLOB.physical_state, href_list)) - -/mob/living/carbon/human/OnTopic(mob/user, href_list) - if (href_list["refresh"]) - show_inv(user) - return TOPIC_HANDLED - - if(href_list["item"]) - if(!handle_strip(href_list["item"],user,locate(href_list["holder"]))) - show_inv(user) - return TOPIC_HANDLED - - if (href_list["criminal"]) - if(hasHUD(user, HUD_SECURITY)) - - var/modified = 0 - var/perpname = "wot" - if(wear_id) - var/obj/item/card/id/I = wear_id.GetIdCard() - if(I) - perpname = I.registered_name - else - perpname = name - else - perpname = name - - var/datum/computer_file/report/crew_record/R = get_crewmember_record(perpname) - if(R) - var/setcriminal = input(user, "Specify a new criminal status for this person.", "Security HUD", R.get_criminalStatus()) as null|anything in GLOB.security_statuses - if(hasHUD(usr, HUD_SECURITY) && setcriminal) - R.set_criminalStatus(setcriminal) - modified = 1 - - spawn() - SET_BIT(hud_updateflag, WANTED_HUD) - if(istype(user,/mob/living/carbon/human)) - var/mob/living/carbon/human/U = user - U.handle_regular_hud_updates() - if(istype(user,/mob/living/silicon/robot)) - var/mob/living/silicon/robot/U = user - U.handle_regular_hud_updates() - - if(!modified) - to_chat(usr, "Unable to locate a data core entry for this person.") - return TOPIC_HANDLED - - if (href_list["secrecord"]) - if(hasHUD(usr, HUD_SECURITY)) - var/perpname = "wot" - var/read = 0 - - var/obj/item/card/id/id = GetIdCard() - if(istype(id)) - perpname = id.registered_name - else - perpname = src.name - var/datum/computer_file/report/crew_record/E = get_crewmember_record(perpname) - if(E) - if(hasHUD(user, HUD_SECURITY)) - to_chat(user, "Name: [E.get_name()]") - to_chat(user, "Criminal Status: [E.get_criminalStatus()]") - to_chat(user, "Details: [E.get_secRecord()]") - read = 1 - - if(!read) - to_chat(user, "Unable to locate a data core entry for this person.") - return TOPIC_HANDLED - - if (href_list["medical"]) - if(hasHUD(user, HUD_MEDICAL)) - var/perpname = "wot" - var/modified = 0 - - var/obj/item/card/id/id = GetIdCard() - if(istype(id)) - perpname = id.registered_name - else - perpname = src.name - - var/datum/computer_file/report/crew_record/E = get_crewmember_record(perpname) - if(E) - var/setmedical = input(user, "Specify a new medical status for this person.", "Medical HUD", E.get_status()) as null|anything in GLOB.physical_statuses - if(hasHUD(user, HUD_MEDICAL) && setmedical) - E.set_status(setmedical) - modified = 1 - - spawn() - if(istype(user,/mob/living/carbon/human)) - var/mob/living/carbon/human/U = user - U.handle_regular_hud_updates() - if(istype(user,/mob/living/silicon/robot)) - var/mob/living/silicon/robot/U = user - U.handle_regular_hud_updates() - - if(!modified) - to_chat(user, "Unable to locate a data core entry for this person.") - return TOPIC_HANDLED - - if (href_list["medrecord"]) - if(hasHUD(user, HUD_MEDICAL)) - var/perpname = "wot" - var/read = 0 - - var/obj/item/card/id/id = GetIdCard() - if(istype(id)) - perpname = id.registered_name - else - perpname = src.name - - var/datum/computer_file/report/crew_record/E = get_crewmember_record(perpname) - if(E) - if(hasHUD(user, HUD_MEDICAL)) - to_chat(usr, "Name: [E.get_name()]") - to_chat(usr, "Gender: [E.get_sex()]") - to_chat(usr, "Species: [E.get_species()]") - to_chat(usr, "Blood Type: [E.get_bloodtype()]") - to_chat(usr, "Details: [E.get_medRecord()]") - read = 1 - if(!read) - to_chat(user, "Unable to locate a data core entry for this person.") - return TOPIC_HANDLED - - if (href_list["webbed"]) - for (var/obj/aura/web/W in auras) - W.remove_webbing(user) - return TOPIC_HANDLED - - - return ..() - -/mob/living/carbon/human/update_flavor_text(key) - var/msg - switch(key) - if("done") - show_browser(src, null, "window=flavor_changes") - return - if("general") - msg = sanitize(input(src,"Update the general description of your character. This will be shown regardless of clothing. Do not include OOC information here.","Flavor Text",html_decode(flavor_texts[key])) as message, extra = 0) - else - if(!(key in flavor_texts)) - return - msg = sanitize(input(src,"Update the flavor text for your [key].","Flavor Text",html_decode(flavor_texts[key])) as message, extra = 0) - if(!CanInteract(src, GLOB.self_state)) - return - flavor_texts[key] = msg - set_flavor() - -///eyecheck() -///Returns a number between -1 to 2 -/mob/living/carbon/human/eyecheck() - var/total_protection = flash_protection - if(species.has_organ[species.vision_organ]) - var/obj/item/organ/internal/eyes/I = internal_organs_by_name[species.vision_organ] - if(!I?.is_usable()) - return FLASH_PROTECTION_MAJOR - else - total_protection = I.get_total_protection(flash_protection) - else // They can't be flashed if they don't have eyes. - return FLASH_PROTECTION_MAJOR - return total_protection - -/mob/living/carbon/human/flash_eyes(var/intensity = FLASH_PROTECTION_MODERATE, override_blindness_check = FALSE, affect_silicon = FALSE, visual = FALSE, type = /obj/screen/fullscreen/flash) - if(species.has_organ[species.vision_organ]) - var/obj/item/organ/internal/eyes/I = internal_organs_by_name[species.vision_organ] - if(!isnull(I)) - I.additional_flash_effects(intensity) - return ..() - -/mob/living/carbon/human/proc/getFlashMod() - if(species.vision_organ) - var/obj/item/organ/internal/eyes/I = internal_organs_by_name[species.vision_organ] - if(istype(I)) - return I.flash_mod - return species.flash_mod - -/mob/living/carbon/human/proc/getDarkvisionRange() - if(species.vision_organ) - var/obj/item/organ/internal/eyes/I = internal_organs_by_name[species.vision_organ] - if(istype(I)) - return I.darksight_range - return species.darksight_range - -/mob/living/carbon/human/proc/getDarkvisionTint() - if(species.vision_organ) - var/obj/item/organ/internal/eyes/I = internal_organs_by_name[species.vision_organ] - if(istype(I)) - return I.darksight_tint - return species.darksight_tint - -//Used by various things that knock people out by applying blunt trauma to the head. -//Checks that the species has a "head" (brain containing organ) and that hit_zone refers to it. -/mob/living/carbon/human/proc/headcheck(var/target_zone, var/brain_tag = BP_BRAIN) - - var/obj/item/organ/affecting = internal_organs_by_name[brain_tag] - - target_zone = check_zone(target_zone) - if(!affecting || affecting.parent_organ != target_zone) - return 0 - - //if the parent organ is significantly larger than the brain organ, then hitting it is not guaranteed - var/obj/item/organ/parent = get_organ(target_zone) - if(!parent) - return 0 - - if(parent.w_class > affecting.w_class + 1) - return prob(100 / 2**(parent.w_class - affecting.w_class - 1)) - - return 1 - -/mob/living/carbon/human/Stat() - . = ..() - if (istype(internal)) - if (!internal.air_contents) - qdel(internal) - else - stat("Internal Atmosphere Info", internal.name) - stat("Tank Pressure", internal.air_contents.return_pressure()) - stat("Distribution Pressure", internal.distribute_pressure) - - var/obj/item/organ/internal/cell/potato = internal_organs_by_name[BP_CELL] - if(potato && potato.cell) - stat("Battery charge:", "[potato.get_charge()]/[potato.cell.maxcharge]") - - if(back && istype(back,/obj/item/rig)) - var/obj/item/rig/suit = back - var/cell_status = "ERROR" - if(suit.cell) cell_status = "[suit.cell.charge]/[suit.cell.maxcharge]" - stat(null, "Suit charge: [cell_status]") - - if(mind) - if(mind.changeling) - stat("Chemical Storage", mind.changeling.chem_charges) - stat("Genetic Damage Time", mind.changeling.geneticdamage) - -/mob/living/carbon/human/IsAdvancedToolUser(var/silent) - if(species.has_fine_manipulation(src)) - return 1 - if(!silent) - to_chat(src, "You don't have the dexterity to use that!") - return 0 - -/mob/living/carbon/human/abiotic(var/full_body = TRUE) - if(full_body) - if(src.head || src.shoes || src.w_uniform || src.wear_suit || src.glasses || src.l_ear || src.r_ear || src.gloves) - return FALSE - return ..() - -/mob/living/carbon/human/proc/check_dna() - dna.check_integrity(src) - return - -/mob/living/carbon/human/get_species() - if(!species) - set_species() - return species.name - -/mob/living/carbon/human/proc/play_xylophone() - if(!src.xylophone) - visible_message("\The [src] begins playing \his ribcage like a xylophone. It's quite spooky.","You begin to play a spooky refrain on your ribcage.","You hear a spooky xylophone melody.") - var/song = pick('sound/effects/xylophone1.ogg','sound/effects/xylophone2.ogg','sound/effects/xylophone3.ogg') - playsound(loc, song, 50, 1, -1) - xylophone = 1 - spawn(1200) - xylophone=0 - return - -/mob/living/proc/check_has_mouth() - // mobs do not have mouths by default - return 0 - -/mob/living/carbon/human/check_has_mouth() - // Todo, check stomach organ when implemented. - var/obj/item/organ/external/head/H = get_organ(BP_HEAD) - if(!H || !istype(H) || !H.can_intake_reagents) - return 0 - return 1 - -/mob/living/proc/empty_stomach() - return - -/mob/living/carbon/human/empty_stomach() - - Stun(3) - - var/obj/item/organ/internal/stomach/stomach = internal_organs_by_name[BP_STOMACH] - var/nothing_to_puke = FALSE - if(should_have_organ(BP_STOMACH)) - if(!istype(stomach) || (stomach.ingested.total_volume <= 5 && stomach.contents.len == 0)) - nothing_to_puke = TRUE - else if(!(locate(/mob) in contents)) - nothing_to_puke = TRUE - - if(nothing_to_puke) - custom_emote(1,"dry heaves.") - return - - if(should_have_organ(BP_STOMACH)) - for(var/a in stomach.contents) - var/atom/movable/A = a - A.dropInto(get_turf(src)) - if(species.gluttonous & GLUT_PROJECTILE_VOMIT) - A.throw_at(get_edge_target_turf(src,dir),7,7,src) - else - for(var/mob/M in contents) - M.dropInto(get_turf(src)) - if(species.gluttonous & GLUT_PROJECTILE_VOMIT) - M.throw_at(get_edge_target_turf(src,dir),7,7,src) - - // vomit into a toilet - for(var/obj/structure/hygiene/toilet/T in range(1, src)) - if(T.open) - visible_message(SPAN_DANGER("\The [src] throws up into the toilet!"),SPAN_DANGER("You throw up into the toilet!")) - playsound(loc, 'sound/effects/splat.ogg', 50, 1) - stomach.ingested.remove_any(15) - return - - // check if you can vomit into a disposal unit - // see above comment for how vomit reagents are handled - for(var/obj/machinery/disposal/D in orange(1, src)) - visible_message(SPAN_DANGER("\The [src] throws up into the disposal unit!"),SPAN_DANGER("You throw up into the disposal unit!")) - playsound(loc, 'sound/effects/splat.ogg', 50, 1) - if(stomach.ingested.total_volume) - stomach.ingested.trans_to_holder(D.reagents, 15) - return - - var/turf/location = loc - - visible_message(SPAN_DANGER("\The [src] throws up!"),SPAN_DANGER("You throw up!")) - playsound(loc, 'sound/effects/splat.ogg', 50, 1) - if(istype(location, /turf/simulated)) - var/obj/effect/decal/cleanable/vomit/splat = new /obj/effect/decal/cleanable/vomit(location) - if(stomach.ingested.total_volume) - stomach.ingested.trans_to_obj(splat, min(15, stomach.ingested.total_volume)) - handle_additional_vomit_reagents(splat) - splat.update_icon() - -/mob/living/carbon/human/proc/vomit(timevomit = 1, level = 3, delay = 0) - - set waitfor = 0 - - if(!check_has_mouth() || isSynthetic() || !timevomit || !level || stat == DEAD || lastpuke) - return - - timevomit = clamp(timevomit, 1, 10) - level = clamp(level, 1, 3) - - lastpuke = TRUE - if(delay) - sleep(delay) - to_chat(src, SPAN_WARNING("You feel nauseous...")) - if(level > 1) - sleep(150 / timevomit) //15 seconds until second warning - to_chat(src, SPAN_WARNING("You feel like you are about to throw up!")) - if(level > 2) - sleep(100 / timevomit) //and you have 10 more for mad dash to the bucket - empty_stomach() - sleep(350) //wait 35 seconds before next volley - lastpuke = FALSE - -/mob/living/carbon/human/proc/morph() - set name = "Morph" - set category = "Superpower" - - if(stat!=CONSCIOUS) - reset_view(0) - remoteview_target = null - return - - if(!(mMorph in mutations)) - src.verbs -= /mob/living/carbon/human/proc/morph - return - - var/new_facial = input("Please select facial hair color.", "Character Generation", facial_hair_color) as color - if(new_facial) - facial_hair_color = new_facial - - var/new_hair = input("Please select hair color.", "Character Generation", head_hair_color) as color - if(new_hair) - head_hair_color = new_hair - - var/new_eyes = input("Please select eye color.", "Character Generation", eye_color) as color - if(new_eyes) - eye_color = new_eyes - update_eyes() - - var/new_tone = input("Please select skin tone level: 1-220 (1=albino, 35=caucasian, 150=black, 220='very' black)", "Character Generation", "[35-skin_tone]") as text - - if (!new_tone) - new_tone = 35 - skin_tone = max(min(round(text2num(new_tone)), 220), 1) - skin_tone = -skin_tone + 35 - - // hair - var/list/all_hairs = typesof(/datum/sprite_accessory/hair) - /datum/sprite_accessory/hair - var/list/hairs = list() - - // loop through potential hairs - for(var/x in all_hairs) - var/datum/sprite_accessory/hair/H = new x // create new hair datum based on type x - hairs.Add(H.name) // add hair name to hairs - qdel(H) // delete the hair after it's all done - - var/new_style = input("Please select hair style", "Character Generation", head_hair_style) as null|anything in hairs - - // if new style selected (not cancel) - if (new_style) - head_hair_style = new_style - - // facial hair - var/list/all_fhairs = typesof(/datum/sprite_accessory/facial_hair) - /datum/sprite_accessory/facial_hair - var/list/fhairs = list() - - for(var/x in all_fhairs) - var/datum/sprite_accessory/facial_hair/H = new x - fhairs.Add(H.name) - qdel(H) - - new_style = input("Please select facial style", "Character Generation",facial_hair_style) as null|anything in fhairs - - if(new_style) - facial_hair_style = new_style - - var/new_gender = alert(usr, "Please select gender.", "Character Generation", "Male", "Female", "Neutral") - if (new_gender) - if(new_gender == "Male") - gender = MALE - else if(new_gender == "Female") - gender = FEMALE - else - gender = NEUTER - regenerate_icons() - check_dna() - - visible_message("\The [src] morphs and changes [get_visible_gender() == MALE ? "his" : get_visible_gender() == FEMALE ? "her" : "their"] appearance!", "You change your appearance!", "Oh, god! What the hell was that? It sounded like flesh getting squished and bone ground into a different shape!") - -/mob/living/carbon/human/proc/remotesay() - set name = "Project mind" - set category = "Superpower" - - if(stat!=CONSCIOUS) - reset_view(0) - remoteview_target = null - return - - if(!(mRemotetalk in src.mutations)) - src.verbs -= /mob/living/carbon/human/proc/remotesay - return - var/list/creatures = list() - for(var/mob/living/carbon/h in world) - creatures += h - var/mob/target = input("Who do you want to project your mind to ?") as null|anything in creatures - if (isnull(target)) - return - - var/say = sanitize(input("What do you wish to say")) - if(mRemotetalk in target.mutations) - target.show_message("You hear [src.real_name]'s voice: [say]") - else - target.show_message("You hear a voice that seems to echo around the room: [say]") - usr.show_message("You project your mind into [target.real_name]: [say]") - log_say("[key_name(usr)] sent a telepathic message to [key_name(target)]: [say]") - for(var/mob/observer/ghost/G in world) - G.show_message("Telepathic message from [src] to [target]: [say]") - -/mob/living/carbon/human/proc/remoteobserve() - set name = "Remote View" - set category = "Superpower" - - if(stat!=CONSCIOUS) - remoteview_target = null - reset_view(0) - return - - if(!(mRemote in src.mutations)) - remoteview_target = null - reset_view(0) - src.verbs -= /mob/living/carbon/human/proc/remoteobserve - return - - if(client.eye != client.mob) - remoteview_target = null - reset_view(0) - return - - var/list/mob/creatures = list() - - for(var/mob/living/carbon/h in world) - var/turf/temp_turf = get_turf(h) - if((temp_turf.z != 1 && temp_turf.z != 5) || h.stat!=CONSCIOUS) //Not on mining or the station. Or dead - continue - creatures += h - - var/mob/target = input ("Who do you want to project your mind to ?") as mob in creatures - - if (target) - remoteview_target = target - reset_view(target) - else - remoteview_target = null - reset_view(0) - -/atom/proc/get_visible_gender() - return gender - -/mob/living/carbon/human/get_visible_gender() - if(wear_suit && wear_suit.flags_inv & HIDEJUMPSUIT && ((head && head.flags_inv & HIDEMASK) || wear_mask)) - return NEUTER - return ..() - -/mob/living/carbon/human/proc/increase_germ_level(n) - if(gloves) - gloves.germ_level += n - else - germ_level += n - -/mob/living/carbon/human/revive() - - if(should_have_organ(BP_HEART)) - vessel.add_reagent(/datum/reagent/blood,species.blood_volume-vessel.total_volume) - fixblood() - - species.create_organs(src) // Reset our organs/limbs. - restore_all_organs() // Reapply robotics/amputated status from preferences. - - if(!client || !key) //Don't boot out anyone already in the mob. - for (var/obj/item/organ/internal/brain/H in world) - if(H.brainmob) - if(H.brainmob.real_name == src.real_name) - if(H.brainmob.mind) - H.brainmob.mind.transfer_to(src) - qdel(H) - - losebreath = 0 - - ..() - -/mob/living/carbon/human/proc/is_lung_ruptured() - var/obj/item/organ/internal/lungs/L = internal_organs_by_name[BP_LUNGS] - return L && L.is_bruised() - -/mob/living/carbon/human/proc/rupture_lung() - var/obj/item/organ/internal/lungs/L = internal_organs_by_name[BP_LUNGS] - if(L) - L.rupture() - -/mob/living/carbon/human/add_blood(mob/living/carbon/human/M as mob) - if (!..()) - return 0 - //if this blood isn't already in the list, add it - if(istype(M)) - if(!blood_DNA[M.dna.unique_enzymes]) - blood_DNA[M.dna.unique_enzymes] = M.dna.b_type - hand_blood_color = blood_color - src.update_inv_gloves() //handles bloody hands overlays and updating - verbs += /mob/living/carbon/human/proc/bloody_doodle - return 1 //we applied blood to the item - -/mob/living/carbon/human/clean_blood(var/clean_feet) - .=..() - if(gloves) - if(gloves.clean_blood()) - update_inv_gloves(1) - gloves.germ_level = 0 - else - if(!isnull(bloody_hands)) - bloody_hands = null - update_inv_gloves(1) - germ_level = 0 - - for(var/obj/item/organ/external/organ in organs) - if(clean_feet || (organ.organ_tag in list(BP_L_HAND,BP_R_HAND))) - organ.gunshot_residue = null - - if(clean_feet && !shoes) - feet_blood_color = null - feet_blood_DNA = null - update_inv_shoes(1) - return 1 - -/mob/living/carbon/human/get_visible_implants(var/class = 0) - - var/list/visible_implants = list() - for(var/obj/item/organ/external/organ in src.organs) - for(var/obj/item/O in organ.implants) - if(!istype(O,/obj/item/implant) && (O.w_class > class) && !istype(O,/obj/item/material/shard/shrapnel)) - visible_implants += O - - return(visible_implants) - -/mob/living/carbon/human/embedded_needs_process() - for(var/obj/item/organ/external/organ in src.organs) - for(var/obj/item/O in organ.implants) - if(!istype(O, /obj/item/implant)) //implant type items do not cause embedding effects, see handle_embedded_objects() - return 1 - return 0 - -/mob/living/carbon/human/handle_embedded_and_stomach_objects() - - if(embedded_flag) - for(var/obj/item/organ/external/organ in organs) - if(organ.splinted) - continue - for(var/obj/item/O in organ.implants) - if(!istype(O,/obj/item/implant) && O.w_class > 1 && prob(5)) //Moving with things stuck in you could be bad. - jostle_internal_object(organ, O) - - var/obj/item/organ/internal/stomach/stomach = internal_organs_by_name[BP_STOMACH] - if(stomach && stomach.contents.len) - for(var/obj/item/O in stomach.contents) - if((O.edge || O.sharp) && prob(5)) - var/obj/item/organ/external/parent = get_organ(stomach.parent_organ) - if(prob(1) && can_feel_pain() && O.can_embed()) - to_chat(src, SPAN_DANGER("You feel something rip out of your [stomach.name]!")) - O.dropInto(loc) - if(parent) - parent.embed(O) - else - jostle_internal_object(parent, O) - -/mob/living/carbon/human/proc/jostle_internal_object(var/obj/item/organ/external/organ, var/obj/item/O) - // All kinds of embedded objects cause bleeding. - if(!organ.can_feel_pain()) - to_chat(src, SPAN_DANGER("You feel [O] moving inside your [organ.name].")) - else - var/msg = pick( \ - SPAN_DANGER("A spike of pain jolts your [organ.name] as you bump [O] inside."), \ - SPAN_DANGER("Your movement jostles [O] in your [organ.name] painfully."), \ - SPAN_DANGER("Your movement jostles [O] in your [organ.name] painfully.")) - custom_pain(msg,40,affecting = organ) - organ.take_external_damage(rand(1,3) + O.w_class, DAMAGE_FLAG_EDGE, 0) - -/mob/living/carbon/human/proc/remove_splints() - set category = "Object" - set name = "Remove Splints" - set desc = "Carefully remove splints from someone's limbs." - set src in view(1) - var/mob/living/user = usr - var/removed_splint = 0 - - if(usr.stat || usr.restrained() || !isliving(usr)) return - - for(var/obj/item/organ/external/o in organs) - if (o && o.splinted) - var/obj/item/S = o.splinted - if(!istype(S) || S.loc != o) //can only remove splints that are actually worn on the organ (deals with hardsuit splints) - to_chat(user, "You cannot remove any splints on [src]'s [o.name] - [o.splinted] is supporting some of the breaks.") - else - S.add_fingerprint(user) - if(o.remove_splint()) - user.put_in_active_hand(S) - removed_splint = 1 - if(removed_splint) - user.visible_message("\The [user] removes \the [src]'s splints!") - else - to_chat(user, "\The [src] has no splints that can be removed.") - verbs -= /mob/living/carbon/human/proc/remove_splints - - -/mob/living/carbon/human/verb/check_pulse() - set category = "Object" - set name = "Check pulse" - set desc = "Approximately count somebody's pulse. Requires you to stand still at least 6 seconds." - set src in view(1) - var/self = 0 - - if(usr.stat || usr.restrained() || !isliving(usr)) return - - if(usr == src) - self = 1 - if(!self) - usr.visible_message("[usr] kneels down, puts \his hand on [src]'s wrist and begins counting their pulse.",\ - "You begin counting [src]'s pulse") - else - usr.visible_message("[usr] begins counting their pulse.",\ - "You begin counting your pulse.") - - if (!pulse() || status_flags & FAKEDEATH) - to_chat(usr, "[src] has no pulse!") - return - else - to_chat(usr, "[self ? "You have a" : "[src] has a"] pulse! Counting...") - - to_chat(usr, "You must[self ? "" : " both"] remain still until counting is finished.") - if(do_after(usr, 6 SECONDS, src, DO_DEFAULT | DO_USER_UNIQUE_ACT | DO_PUBLIC_PROGRESS)) - var/message = "[self ? "Your" : "[src]'s"] pulse is [src.get_pulse(GETPULSE_HAND)]." - to_chat(usr, message) - else - to_chat(usr, "You failed to check the pulse. Try again.") - -/mob/living/carbon/human/verb/lookup() - set name = "Look up" - set desc = "If you want to know what's above." - set category = "IC" - - - if(client && !is_physically_disabled()) - if(z_eye) - reset_view(null) - QDEL_NULL(z_eye) - return - var/turf/above = GetAbove(src) - if(TURF_IS_MIMICING(above)) - z_eye = new /atom/movable/z_observer/z_up(src, src) - to_chat(src, "You look up.") - reset_view(z_eye) - return - to_chat(src, "You can see \the [above ? above : "ceiling"].") - else - to_chat(src, "You can't look up right now.") - -/mob/living/verb/lookdown() - set name = "Look Down" - set desc = "If you want to know what's below." - set category = "IC" - - if(client && !is_physically_disabled()) - if(z_eye) - reset_view(null) - QDEL_NULL(z_eye) - return - var/turf/T = get_turf(src) - if(TURF_IS_MIMICING(T) && HasBelow(T.z)) - z_eye = new /atom/movable/z_observer/z_down(src, src) - to_chat(src, "You look down.") - reset_view(z_eye) - return - to_chat(src, "You can see \the [T ? T : "floor"].") - else - to_chat(src, "You can't look below right now.") - -/mob/living/carbon/human/proc/set_species(var/new_species, var/default_colour = 1) - if(!dna) - if(!new_species) - new_species = SPECIES_HUMAN - else - if(!new_species) - new_species = dna.species - - // No more invisible screaming wheelchairs because of set_species() typos. - if(!all_species[new_species]) - new_species = SPECIES_HUMAN - if(dna) - dna.species = new_species - - if(species) - - if(species.name && species.name == new_species) - return - - // Clear out their species abilities. - species.remove_base_auras(src) - species.remove_inherent_verbs(src) - holder_type = null - - species = all_species[new_species] - species.handle_pre_spawn(src) - - if(species.grab_type) - current_grab_type = all_grabobjects[species.grab_type] - - if(species.base_color && default_colour) - skin_color = species.base_color - else - skin_color = "#000000" - - if(species.holder_type) - holder_type = species.holder_type - - - if(!(gender in species.genders)) - gender = species.genders[1] - - icon_state = lowertext(species.name) - - species.create_organs(src) - species.handle_post_spawn(src) - - maxHealth = species.total_health - remove_extension(src, /datum/extension/armor) - if(species.natural_armour_values) - set_extension(src, /datum/extension/armor, species.natural_armour_values) - - default_pixel_x = initial(pixel_x) + species.pixel_offset_x - default_pixel_y = initial(pixel_y) + species.pixel_offset_y - default_pixel_z = initial(pixel_z) + species.pixel_offset_z - pixel_x = default_pixel_x - pixel_y = default_pixel_y - pixel_z = default_pixel_z - - if(LAZYLEN(descriptors)) - descriptors = null - - if(LAZYLEN(species.descriptors)) - descriptors = list() - for(var/desctype in species.descriptors) - var/datum/mob_descriptor/descriptor = species.descriptors[desctype] - descriptors[desctype] = descriptor.default_value - - if(!(species.appearance_flags & HAS_UNDERWEAR)) - QDEL_NULL_LIST(worn_underwear) - - available_maneuvers = species.maneuvers.Copy() - - meat_type = species.meat_type - meat_amount = species.meat_amount - skin_material = species.skin_material - skin_amount = species.skin_amount - bone_material = species.bone_material - bone_amount = species.bone_amount - - spawn(0) - regenerate_icons() - if(vessel.total_volume < species.blood_volume) - vessel.maximum_volume = species.blood_volume - vessel.add_reagent(/datum/reagent/blood, species.blood_volume - vessel.total_volume) - else if(vessel.total_volume > species.blood_volume) - vessel.remove_reagent(/datum/reagent/blood, vessel.total_volume - species.blood_volume) - vessel.maximum_volume = species.blood_volume - fixblood() - - // Rebuild the HUD and visual elements. - if(client) - Login() - - full_prosthetic = null - - var/update_lang - for(var/token in ALL_CULTURAL_TAGS) - if(species.force_cultural_info && species.force_cultural_info[token]) - update_lang = TRUE - set_cultural_value(token, species.force_cultural_info[token], defer_language_update = TRUE) - else if(!cultural_info[token] || !(cultural_info[token] in species.available_cultural_info[token])) - update_lang = TRUE - set_cultural_value(token, species.default_cultural_info[token], defer_language_update = TRUE) - - default_walk_intent = null - default_run_intent = null - move_intent = null - move_intents = species.move_intents.Copy() - set_move_intent(decls_repository.get_decl(move_intents[1])) - if(!istype(move_intent)) - set_next_usable_move_intent() - - if(update_lang) - languages.Cut() - default_language = null - update_languages() - - //recheck species-restricted clothing - for(var/slot in slot_first to slot_last) - var/obj/item/clothing/C = get_equipped_item(slot) - if(istype(C) && !C.mob_can_equip(src, slot, 1)) - unEquip(C) - - return 1 - -/mob/living/carbon/human/proc/update_languages() - - var/list/permitted_languages = list() - var/list/free_languages = list() - var/list/default_languages = list() - - for(var/thing in cultural_info) - var/decl/cultural_info/check = cultural_info[thing] - if(istype(check)) - if(check.default_language) - free_languages |= all_languages[check.default_language] - default_languages |= all_languages[check.default_language] - if(check.language) - free_languages |= all_languages[check.language] - if(check.name_language) - free_languages |= all_languages[check.name_language] - for(var/lang in check.additional_langs) - free_languages |= all_languages[lang] - for(var/lang in check.get_spoken_languages()) - permitted_languages |= all_languages[lang] - - for(var/thing in languages) - var/datum/language/lang = thing - if(lang in permitted_languages) - continue - if(!(lang.flags & RESTRICTED) && (lang.flags & WHITELISTED) && is_alien_whitelisted(src, lang)) - continue - if(lang == default_language) - default_language = null - remove_language(lang.name) - - for(var/thing in free_languages) - var/datum/language/lang = thing - add_language(lang.name) - - if(LAZYLEN(default_languages) && isnull(default_language)) - default_language = default_languages[1] - -/mob/living/carbon/human/proc/bloody_doodle() - set category = "IC" - set name = "Write in blood" - set desc = "Use blood on your hands to write a short message on the floor or a wall, murder mystery style." - - if (src.stat) - return - - if (usr != src) - return 0 //something is terribly wrong - - if (!bloody_hands) - verbs -= /mob/living/carbon/human/proc/bloody_doodle - - if (src.gloves) - to_chat(src, "Your [src.gloves] are getting in the way.") - return - - var/turf/simulated/T = src.loc - if (!istype(T)) //to prevent doodling out of mechs and lockers - to_chat(src, "You cannot reach the floor.") - return - - var/direction = input(src,"Which way?","Tile selection") as anything in list("Here","North","South","East","West") - if (direction != "Here") - T = get_step(T,text2dir(direction)) - if (!istype(T)) - to_chat(src, "You cannot doodle there.") - return - - var/num_doodles = 0 - for (var/obj/effect/decal/cleanable/blood/writing/W in T) - num_doodles++ - if (num_doodles > 4) - to_chat(src, "There is no space to write on!") - return - - var/max_length = bloody_hands * 30 //tweeter style - - var/message = sanitize(input("Write a message. It cannot be longer than [max_length] characters.","Blood writing", "")) - - if (message) - var/used_blood_amount = round(length(message) / 30, 1) - bloody_hands = max(0, bloody_hands - used_blood_amount) //use up some blood - - if (length(message) > max_length) - message += "-" - to_chat(src, "You ran out of blood to write with!") - var/obj/effect/decal/cleanable/blood/writing/W = new(T) - W.basecolor = (hand_blood_color) ? hand_blood_color : COLOR_BLOOD_HUMAN - W.update_icon() - W.message = message - W.add_fingerprint(src) - -/mob/living/carbon/human/can_inject(var/mob/user, var/target_zone) - var/obj/item/organ/external/affecting = get_organ(target_zone) - - if(!affecting) - to_chat(user, SPAN_WARNING("\The [src] is missing that limb.")) - return 0 - - if(BP_IS_ROBOTIC(affecting)) - to_chat(user, SPAN_WARNING("You cannot inject a robotic limb.")) - return 0 - - . = CAN_INJECT - for(var/obj/item/clothing/C in list(head, wear_mask, wear_suit, w_uniform, gloves, shoes)) - if(C && (C.body_parts_covered & affecting.body_part) && (C.item_flags & ITEM_FLAG_THICKMATERIAL)) - if(istype(C, /obj/item/clothing/suit/space)) - . = INJECTION_PORT //it was going to block us, but it's a space suit so it doesn't because it has some kind of port - else - to_chat(user, "There is no exposed flesh or thin material on [src]'s [affecting.name] to inject into.") - return 0 - - -/mob/living/carbon/human/print_flavor_text(var/shrink = 1) - var/list/equipment = list(src.head,src.wear_mask,src.glasses,src.w_uniform,src.wear_suit,src.gloves,src.shoes) - var/head_exposed = 1 - var/face_exposed = 1 - var/eyes_exposed = 1 - var/torso_exposed = 1 - var/arms_exposed = 1 - var/legs_exposed = 1 - var/hands_exposed = 1 - var/feet_exposed = 1 - - for(var/obj/item/clothing/C in equipment) - if(C.body_parts_covered & HEAD) - head_exposed = 0 - if(C.body_parts_covered & FACE) - face_exposed = 0 - if(C.body_parts_covered & EYES) - eyes_exposed = 0 - if(C.body_parts_covered & UPPER_TORSO) - torso_exposed = 0 - if(C.body_parts_covered & ARMS) - arms_exposed = 0 - if(C.body_parts_covered & HANDS) - hands_exposed = 0 - if(C.body_parts_covered & LEGS) - legs_exposed = 0 - if(C.body_parts_covered & FEET) - feet_exposed = 0 - - flavor_text = "" - for (var/T in flavor_texts) - if(flavor_texts[T] && flavor_texts[T] != "") - if((T == "general") || (T == "head" && head_exposed) || (T == "face" && face_exposed) || (T == "eyes" && eyes_exposed) || (T == "torso" && torso_exposed) || (T == "arms" && arms_exposed) || (T == "hands" && hands_exposed) || (T == "legs" && legs_exposed) || (T == "feet" && feet_exposed)) - flavor_text += flavor_texts[T] - flavor_text += "\n\n" - if(!shrink) - return flavor_text - else - return ..() - -/mob/living/carbon/human/getDNA() - if(species.species_flags & SPECIES_FLAG_NO_SCAN) - return null - if(isSynthetic()) - return - ..() - -/mob/living/carbon/human/setDNA() - if(species.species_flags & SPECIES_FLAG_NO_SCAN) - return - if(isSynthetic()) - return - ..() - -/mob/living/carbon/human/has_brain() - if(internal_organs_by_name[BP_BRAIN]) - var/obj/item/organ/internal/brain = internal_organs_by_name[BP_BRAIN] - if(brain && istype(brain)) - return 1 - return 0 - -/mob/living/carbon/human/has_eyes() - if(internal_organs_by_name[BP_EYES]) - var/obj/item/organ/internal/eyes = internal_organs_by_name[BP_EYES] - if(eyes && eyes.is_usable()) - return 1 - return 0 - -/mob/living/carbon/human/slip(var/slipped_on, stun_duration=8) - if((species.check_no_slip(src)) || (shoes && (shoes.item_flags & ITEM_FLAG_NOSLIP))) - return 0 - return !!(..(slipped_on,stun_duration)) - -/mob/living/carbon/human/proc/undislocate() - set category = "Object" - set name = "Undislocate Joint" - set desc = "Pop a joint back into place. Extremely painful." - set src in view(1) - - if(!isliving(usr) || !usr.canClick()) - return - - usr.setClickCooldown(20) - - if(usr.stat > 0) - to_chat(usr, "You are unconcious and cannot do that!") - return - - if(usr.restrained()) - to_chat(usr, "You are restrained and cannot do that!") - return - - var/mob/S = src - var/mob/U = usr - var/self = null - if(S == U) - self = 1 // Removing object from yourself. - - var/list/limbs = list() - for(var/limb in organs_by_name) - var/obj/item/organ/external/current_limb = organs_by_name[limb] - if(current_limb && current_limb.dislocated > 0 && !current_limb.is_parent_dislocated()) //if the parent is also dislocated you will have to relocate that first - limbs |= current_limb - var/obj/item/organ/external/current_limb = input(usr,"Which joint do you wish to relocate?") as null|anything in limbs - - if(!current_limb) - return - - if(self) - to_chat(src, "You brace yourself to relocate your [current_limb.joint]...") - else - to_chat(U, "You begin to relocate [S]'s [current_limb.joint]...") - if(!do_after(U, 3 SECONDS, src, DO_DEFAULT | DO_USER_UNIQUE_ACT | DO_PUBLIC_PROGRESS)) - return - if(!current_limb || !S || !U) - return - - var/fail_prob = U.skill_fail_chance(SKILL_MEDICAL, 60, SKILL_ADEPT, 3) - if(self) - fail_prob += U.skill_fail_chance(SKILL_MEDICAL, 20, SKILL_EXPERT, 1) - var/datum/gender/T = gender_datums[get_gender()] - if(prob(fail_prob)) - visible_message( \ - "[U] pops [self ? "[T.his]" : "[S]'s"] [current_limb.joint] in the WRONG place!", \ - "[self ? "You pop" : "[U] pops"] your [current_limb.joint] in the WRONG place!" \ - ) - current_limb.add_pain(30) - current_limb.take_external_damage(5) - shock_stage += 20 - else - visible_message( \ - "[U] pops [self ? "[T.his]" : "[S]'s"] [current_limb.joint] back in!", \ - "[self ? "You pop" : "[U] pops"] your [current_limb.joint] back in!" \ - ) - current_limb.undislocate() - -/mob/living/carbon/human/reset_view(atom/A, update_hud = 1) - ..() - if(update_hud) - handle_regular_hud_updates() - - -/mob/living/carbon/human/can_stand_overridden() - if(wearing_rig && wearing_rig.ai_can_move_suit(check_for_ai = 1)) - // Actually missing a leg will screw you up. Everything else can be compensated for. - for(var/limbcheck in list(BP_L_LEG,BP_R_LEG)) - var/obj/item/organ/affecting = get_organ(limbcheck) - if(!affecting) - return 0 - return 1 - return 0 - -/mob/living/carbon/human/verb/pull_punches() - set name = "Switch Stance" - set desc = "Try not to hurt them." - set category = "IC" - species.toggle_stance(src) - -// Similar to get_pulse, but returns only integer numbers instead of text. -/mob/living/carbon/human/proc/get_pulse_as_number() - var/obj/item/organ/internal/heart/heart_organ = internal_organs_by_name[BP_HEART] - if(!heart_organ) - return 0 - - switch(pulse()) - if(PULSE_NONE) - return 0 - if(PULSE_SLOW) - return rand(40, 60) - if(PULSE_NORM) - return rand(60, 90) - if(PULSE_FAST) - return rand(90, 120) - if(PULSE_2FAST) - return rand(120, 160) - if(PULSE_THREADY) - return PULSE_MAX_BPM - return 0 - -//generates realistic-ish pulse output based on preset levels as text -/mob/living/carbon/human/proc/get_pulse(var/method) //method 0 is for hands, 1 is for machines, more accurate - var/obj/item/organ/internal/heart/heart_organ = internal_organs_by_name[BP_HEART] - if(!heart_organ) - // No heart, no pulse - return "0" - if(heart_organ.open && !method) - // Heart is a open type (?) and cannot be checked unless it's a machine - return "muddled and unclear; you can't seem to find a vein" - - var/bpm = get_pulse_as_number() - if(bpm >= PULSE_MAX_BPM) - return method ? ">[PULSE_MAX_BPM]" : "extremely weak and fast, patient's artery feels like a thread" - - return "[method ? bpm : bpm + rand(-10, 10)]" -// output for machines ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ output for people - -/mob/living/carbon/human/proc/pulse() - if (stat == DEAD) - return PULSE_NONE - var/obj/item/organ/internal/heart/H = internal_organs_by_name[BP_HEART] - return H ? H.pulse : PULSE_NONE - -/mob/living/carbon/human/can_devour(atom/movable/victim, var/silent = FALSE) - - if(!should_have_organ(BP_STOMACH)) - return ..() - - var/obj/item/organ/internal/stomach/stomach = internal_organs_by_name[BP_STOMACH] - if(!stomach || !stomach.is_usable()) - if(!silent) - to_chat(src, SPAN_WARNING("Your stomach is not functional!")) - return FALSE - - if(!stomach.can_eat_atom(victim)) - if(!silent) - to_chat(src, SPAN_WARNING("You are not capable of devouring \the [victim] whole!")) - return FALSE - - if(stomach.is_full(victim)) - if(!silent) - to_chat(src, SPAN_WARNING("Your [stomach.name] is full!")) - return FALSE - - . = stomach.get_devour_time(victim) || ..() - -/mob/living/carbon/human/move_to_stomach(atom/movable/victim) - var/obj/item/organ/internal/stomach/stomach = internal_organs_by_name[BP_STOMACH] - if(istype(stomach)) - victim.forceMove(stomach) - -/mob/living/carbon/human/should_have_organ(var/organ_check) - - var/obj/item/organ/external/affecting - if(organ_check in list(BP_HEART, BP_LUNGS)) - affecting = organs_by_name[BP_CHEST] - else if(organ_check in list(BP_LIVER, BP_KIDNEYS)) - affecting = organs_by_name[BP_GROIN] - - if(affecting && BP_IS_ROBOTIC(affecting)) - return 0 - return (species && species.has_organ[organ_check]) - -/mob/living/carbon/human/can_feel_pain(var/obj/item/organ/check_organ) - if(isSynthetic()) - return 0 - if(check_organ) - if(!istype(check_organ)) - return 0 - return check_organ.can_feel_pain() - return !(species.species_flags & SPECIES_FLAG_NO_PAIN) - -/mob/living/carbon/human/get_breath_volume() - . = ..() - var/obj/item/organ/internal/heart/H = internal_organs_by_name[BP_HEART] - if(H && !H.open) - . *= (!BP_IS_ROBOTIC(H)) ? pulse()/PULSE_NORM : 1.5 - -/mob/living/carbon/human/need_breathe() - if(!(mNobreath in mutations) && species.breathing_organ && should_have_organ(species.breathing_organ)) - return 1 - else - return 0 - -/mob/living/carbon/human/get_adjusted_metabolism(metabolism) - return ..() * (species ? species.metabolism_mod : 1) - -/mob/living/carbon/human/is_invisible_to(var/mob/viewer) - return (is_cloaked() || ..()) - -/mob/living/carbon/human/help_shake_act(mob/living/carbon/M) - if(src != M) - ..() - else - var/datum/gender/T = gender_datums[get_gender()] - visible_message( \ - "[src] examines [T.self].", \ - "You check yourself for injuries." \ - ) - - for(var/obj/item/organ/external/org in organs) - var/list/status = list() - - var/feels = 1 + round(org.pain/100, 0.1) - var/brutedamage = org.brute_dam * feels - var/burndamage = org.burn_dam * feels - - switch(brutedamage) - if(1 to 20) - status += "slightly sore" - if(20 to 40) - status += "very sore" - if(40 to INFINITY) - status += "throbbing with agony" - - switch(burndamage) - if(1 to 10) - status += "tingling" - if(10 to 40) - status += "stinging" - if(40 to INFINITY) - status += "burning fiercely" - - if(org.is_stump()) - status += "MISSING" - if(org.status & ORGAN_MUTATED) - status += "misshapen" - if(org.dislocated >= 1) - status += "dislocated" - if(org.status & ORGAN_BROKEN) - status += "hurts when touched" - if(org.status & ORGAN_DEAD) - status += "is grey and necrotic" - if(!org.is_usable() || org.is_dislocated()) - status += "dangling uselessly" - if(status.len) - src.show_message("My [org.name] is [english_list(status)].",1) - else - src.show_message("My [org.name] is OK.",1) - - if((MUTATION_SKELETON in mutations) && (!w_uniform) && (!wear_suit)) - play_xylophone() - -/mob/living/carbon/human/proc/resuscitate() - if(!is_asystole() || !should_have_organ(BP_HEART)) - return - var/obj/item/organ/internal/heart/heart = internal_organs_by_name[BP_HEART] - if(istype(heart) && !(heart.status & ORGAN_DEAD)) - var/species_organ = species.breathing_organ - var/active_breaths = 0 - if(species_organ) - var/obj/item/organ/internal/lungs/L = internal_organs_by_name[species_organ] - if(L) - active_breaths = L.active_breathing - if(!nervous_system_failure() && active_breaths) - visible_message("\The [src] jerks and gasps for breath!") - else - visible_message("\The [src] twitches a bit as \his heart restarts!") - shock_stage = min(shock_stage, 100) // 120 is the point at which the heart stops. - if(getOxyLoss() >= 75) - setOxyLoss(75) - heart.pulse = PULSE_NORM - heart.handle_pulse() - return TRUE - -/mob/living/carbon/human/proc/make_reagent(amount, reagent_type) - if(stat == CONSCIOUS) - var/limit = max(0, reagents.get_overdose(reagent_type) - reagents.get_reagent_amount(reagent_type)) - reagents.add_reagent(reagent_type, min(amount, limit)) - -//Get fluffy numbers -/mob/living/carbon/human/proc/get_blood_pressure() - if(status_flags & FAKEDEATH) - return "[Floor(120+rand(-5,5))*0.25]/[Floor(80+rand(-5,5)*0.25)]" - var/blood_result = get_blood_circulation() - return "[Floor((120+rand(-5,5))*(blood_result/100))]/[Floor((80+rand(-5,5))*(blood_result/100))]" - -//Point at which you dun breathe no more. Separate from asystole crit, which is heart-related. -/mob/living/carbon/human/nervous_system_failure() - return getBrainLoss() >= maxHealth * 0.75 - -/mob/living/carbon/human/melee_accuracy_mods() - . = ..() - if(get_shock() > 100) - . += 10 - if(shock_stage > 10) - . += 10 - if(shock_stage > 30) - . += 20 - -/mob/living/carbon/human/ranged_accuracy_mods() - . = ..() - if(get_shock() > 10 && !skill_check(SKILL_WEAPONS, SKILL_ADEPT)) - . -= 1 - if(get_shock() > 50) - . -= 1 - if(shock_stage > 10) - . -= 1 - if(shock_stage > 30) - . -= 1 - if(skill_check(SKILL_WEAPONS, SKILL_ADEPT)) - . += 1 - if(skill_check(SKILL_WEAPONS, SKILL_EXPERT)) - . += 1 - if(skill_check(SKILL_WEAPONS, SKILL_PROF)) - . += 2 - -/mob/living/carbon/human/can_drown() - if(!internal && (!istype(wear_mask) || !wear_mask.filters_water())) - var/obj/item/organ/internal/lungs/L = locate() in internal_organs - return (!L || L.can_drown()) - return FALSE - -/mob/living/carbon/human/get_breath_from_environment(var/volume_needed = STD_BREATH_VOLUME, var/atom/location = src.loc) - var/turf/T = get_turf(src) - var/datum/gas_mixture/breath = ..(volume_needed, location) - if(istype(T) && T == location && T.is_flooded(lying) && should_have_organ(BP_LUNGS)) - //Maybe we could feasibly surface - if(!lying && T.above && !T.above.is_flooded() && T.above.CanZPass(src, UP) && can_overcome_gravity()) - return ..(volume_needed, T.above) - var/can_breathe_water = (istype(wear_mask) && wear_mask.filters_water()) ? TRUE : FALSE - if(!can_breathe_water) - var/obj/item/organ/internal/lungs/lungs = internal_organs_by_name[BP_LUNGS] - if(lungs && lungs.can_drown()) - can_breathe_water = TRUE - if(can_breathe_water) - if(!breath) - breath = new - breath.volume = volume_needed - breath.temperature = T.temperature - breath.adjust_gas(GAS_OXYGEN, ONE_ATMOSPHERE*volume_needed/(R_IDEAL_GAS_EQUATION*T20C)) - T.show_bubbles() - return breath - -/mob/living/carbon/human/water_act(var/depth) - species.water_act(src, depth) - ..(depth) - -/mob/living/carbon/human/proc/set_cultural_value(var/token, var/decl/cultural_info/_culture, var/defer_language_update) - if(!istype(_culture)) - _culture = SSculture.get_culture(_culture) - if(istype(_culture)) - cultural_info[token] = _culture - if(!defer_language_update) - update_languages() - -/mob/living/carbon/human/proc/get_cultural_value(var/token) - return cultural_info[token] - -/mob/living/carbon/human/needs_wheelchair() - var/stance_damage = 0 - for(var/limb_tag in list(BP_L_LEG, BP_R_LEG, BP_L_FOOT, BP_R_FOOT)) - var/obj/item/organ/external/E = organs_by_name[limb_tag] - if(!E || !E.is_usable()) - stance_damage += 2 - return stance_damage >= 4 - -/mob/living/carbon/human/get_digestion_product() - return species.get_digestion_product(src) - -// A damaged stomach can put blood in your vomit. -/mob/living/carbon/human/handle_additional_vomit_reagents(var/obj/effect/decal/cleanable/vomit/vomit) - ..() - if(should_have_organ(BP_STOMACH)) - var/obj/item/organ/internal/stomach/stomach = internal_organs_by_name[BP_STOMACH] - if(!stomach || stomach.is_broken() || (stomach.is_bruised() && prob(stomach.damage))) - if(should_have_organ(BP_HEART)) - vessel.trans_to_obj(vomit, 5) - else - reagents.trans_to_obj(vomit, 5) - -/mob/living/carbon/human/get_footstep(var/footstep_type) - . = species.get_footstep(src, footstep_type) || ..() - -/mob/living/carbon/human/get_sound_volume_multiplier() - . = ..() - for(var/obj/item/clothing/ears/C in list(l_ear, r_ear)) - . = min(., C.volume_multiplier) - -/mob/living/carbon/human/handle_pull_damage(mob/living/puller) - . = ..() - if(.) - drip(1) - -/mob/living/carbon/human/get_bullet_impact_effect_type(var/def_zone) - var/obj/item/organ/external/E = get_organ(def_zone) - if(!E || E.is_stump()) - return BULLET_IMPACT_NONE - if(BP_IS_ROBOTIC(E)) - return BULLET_IMPACT_METAL - return BULLET_IMPACT_MEAT - -/mob/living/carbon/human/bullet_impact_visuals(var/obj/item/projectile/P, var/def_zone, var/damage) - ..() - switch(get_bullet_impact_effect_type(def_zone)) - if(BULLET_IMPACT_MEAT) - if (damage && P.damtype == DAMAGE_BRUTE) - var/hit_dir = get_dir(P.starting, src) - var/obj/effect/decal/cleanable/blood/B = blood_splatter(get_step(src, hit_dir), src, 1, hit_dir) - B.icon_state = pick("dir_splatter_1","dir_splatter_2") - B.SetTransform(scale = min(1, round(P.damage / 50, 0.2))) - new /obj/effect/temp_visual/bloodsplatter(loc, hit_dir, species.blood_color) - -/mob/living/carbon/human/proc/dream() - dream_timer = null - if (!sleeping) - return - if (prob(85)) - return - for (var/count = 1 to rand(1, 2)) - to_chat(src, SPAN_NOTICE("... [pick(GLOB.dream_tokens)] ...")) - -GLOBAL_LIST_INIT(dream_tokens, list( - "an ID card", "a bottle", "a familiar face", "a crewmember", - "a toolbox", "a security officer", "the captain", "voices from all around", - "deep space", "a doctor", "the engine", "a traitor", - "an ally", "darkness", "light", "a scientist", - "a monkey", "a catastrophe", "a loved one", "a gun", - "warmth", "freezing", "the sun", "a hat", - "a ruined station", "a planet", "phoron", "air", - "the medical bay", "the bridge", "blinking lights", "a blue light", - "an abandoned laboratory", "NanoTrasen", "pirates", "mercenaries", - "blood", "healing", "power", "respect", - "riches", "space", "a crash", "happiness", - "pride", "a fall", "water", "flames", - "ice", "melons", "flying", "the eggs", - "money", "the chief engineer", "the chief science officer", "the chief medical officer", - "a station engineer", "the janitor", "the atmospheric technician", "a cargo technician", - "the botanist", "a shaft miner", "the psychologist", "the chemist", - "the virologist", "the roboticist", "a chef", "the bartender", - "a chaplain", "a librarian", "a mouse", "a beach", - "the holodeck", "a smokey room", "a voice", "the cold", - "an operating table", "the rain", "a skrell", "an unathi", - "a beaker of strange liquid", "the supermatter", "a creature built completely of stolen flesh", "a GAS", - "an IPC", "a Dionaea", "a being made of light", "the commanding officer", - "the executive officer", "the chief of security", "the corporate liason", "the representative", - "the senior advisor", "the bridge officer", "the senior engineer", "the physician", - "the corpsman", "the counselor", "the medical contractor", "the security contractor", - "a stowaway", "an old friend", "the prospector", "the pilot", - "the passenger", "the chief of security", "the master at arms", "the forensic technician", - "the brig chief", "the tower", "the man with no face", "a field of flowers", - "an old home", "the merc", "a surgery table", "a needle", - "a blade", "an ocean", "right behind you", "standing above you", - "someone near by", "a place forgotten" -)) diff --git a/code/modules/mob/living/carbon/human/human_attackhand.dm b/code/modules/mob/living/carbon/human/human_attackhand.dm deleted file mode 100644 index c50bc090a3493..0000000000000 --- a/code/modules/mob/living/carbon/human/human_attackhand.dm +++ /dev/null @@ -1,353 +0,0 @@ -/mob/living/carbon/human/proc/get_unarmed_attack(var/mob/target, var/hit_zone = null) - if(!hit_zone) - hit_zone = zone_sel.selecting - - if(default_attack && default_attack.is_usable(src, target, hit_zone)) - if(pulling_punches) - var/datum/unarmed_attack/soft_type = default_attack.get_sparring_variant() - if(soft_type) - return soft_type - return default_attack - - for(var/datum/unarmed_attack/u_attack in species.unarmed_attacks) - if(u_attack.is_usable(src, target, hit_zone)) - if(pulling_punches) - var/datum/unarmed_attack/soft_variant = u_attack.get_sparring_variant() - if(soft_variant) - return soft_variant - return u_attack - return null - -/mob/living/carbon/human/attack_hand(mob/living/carbon/M as mob) - - var/mob/living/carbon/human/H = M - if(istype(H)) - var/obj/item/organ/external/temp = H.organs_by_name[BP_R_HAND] - if(H.hand) - temp = H.organs_by_name[BP_L_HAND] - if(!temp || !temp.is_usable()) - to_chat(H, "You can't use your hand.") - return - - ..() - remove_cloaking_source(species) - // Should this all be in Touch()? - if(istype(H)) - if(H != src && check_shields(0, null, H, H.zone_sel.selecting, H.name)) - H.do_attack_animation(src) - return 0 - - if(istype(H.gloves, /obj/item/clothing/gloves/boxing/hologlove)) - H.do_attack_animation(src) - var/damage = rand(0, 9) - if(!damage) - playsound(loc, 'sound/weapons/punchmiss.ogg', 25, 1, -1) - visible_message("\The [H] has attempted to punch \the [src]!") - return 0 - var/obj/item/organ/external/affecting = get_organ(ran_zone(H.zone_sel.selecting)) - - if(MUTATION_HULK in H.mutations) - damage += 5 - - playsound(loc, "punch", 25, 1, -1) - - update_personal_goal(/datum/goal/achievement/fistfight, TRUE) - H.update_personal_goal(/datum/goal/achievement/fistfight, TRUE) - - visible_message("[H] has punched \the [src]!") - - apply_damage(damage, DAMAGE_PAIN, affecting) - if(damage >= 9) - visible_message("[H] has weakened \the [src]!") - var/armor_block = 100 * get_blocked_ratio(affecting, DAMAGE_BRUTE, damage = damage) - apply_effect(4, EFFECT_WEAKEN, armor_block) - - return - - if(istype(H)) - for (var/obj/item/grab/G in H) - if (G.assailant == H && G.affecting == src) - if(G.resolve_openhand_attack()) - return 1 - - switch(M.a_intent) - if(I_HELP) - if(MUTATION_FERAL in M.mutations) - return 0 - if(H != src && istype(H) && (is_asystole() || (status_flags & FAKEDEATH) || failed_last_breath) && !(H.zone_sel.selecting == BP_R_ARM || H.zone_sel.selecting == BP_L_ARM)) - if (!cpr_time) - return 0 - - var/pumping_skill = max(M.get_skill_value(SKILL_MEDICAL),M.get_skill_value(SKILL_ANATOMY)) - var/cpr_delay = 15 * M.skill_delay_mult(SKILL_ANATOMY, 0.2) - cpr_time = 0 - - H.visible_message("\The [H] is trying to perform CPR on \the [src].") - - if(!do_after(H, cpr_delay, src, DO_DEFAULT | DO_USER_UNIQUE_ACT | DO_PUBLIC_PROGRESS)) - cpr_time = 1 - return - cpr_time = 1 - - H.visible_message("\The [H] performs CPR on \the [src]!") - - if(is_asystole()) - if(prob(5 + 5 * (SKILL_EXPERT - pumping_skill))) - var/obj/item/organ/external/chest = get_organ(BP_CHEST) - if(chest) - chest.fracture() - - var/obj/item/organ/internal/heart/heart = internal_organs_by_name[BP_HEART] - if(heart) - heart.external_pump = list(world.time, 0.4 + 0.1*pumping_skill + rand(-0.1,0.1)) - - if(stat != DEAD && prob(2 * pumping_skill)) - resuscitate() - - if(!H.check_has_mouth()) - to_chat(H, "You don't have a mouth, you cannot do mouth-to-mouth resuscitation!") - return - if(!check_has_mouth()) - to_chat(H, "They don't have a mouth, you cannot do mouth-to-mouth resuscitation!") - return - if((H.head && (H.head.body_parts_covered & FACE)) || (H.wear_mask && (H.wear_mask.body_parts_covered & FACE))) - to_chat(H, "You need to remove your mouth covering for mouth-to-mouth resuscitation!") - return 0 - if((head && (head.body_parts_covered & FACE)) || (wear_mask && (wear_mask.body_parts_covered & FACE))) - to_chat(H, "You need to remove \the [src]'s mouth covering for mouth-to-mouth resuscitation!") - return 0 - if (!H.internal_organs_by_name[H.species.breathing_organ]) - to_chat(H, "You need lungs for mouth-to-mouth resuscitation!") - return - if(!need_breathe()) - return - var/obj/item/organ/internal/lungs/L = internal_organs_by_name[species.breathing_organ] - if(L) - var/datum/gas_mixture/breath = H.get_breath_from_environment() - var/fail = L.handle_breath(breath, 1) - if(!fail) - if (!L.is_bruised()) - losebreath = 0 - to_chat(src, "You feel a breath of fresh air enter your lungs. It feels good.") - - else if(!(M == src && apply_pressure(M, M.zone_sel.selecting))) - help_shake_act(M) - return 1 - - if(I_GRAB) - return H.species.attempt_grab(H, src) - - if(I_HURT) - if(H.incapacitated()) - to_chat(H, "You can't attack while incapacitated.") - return - - if(!istype(H)) - attack_generic(H,rand(1,3),"punched") - return - - var/rand_damage = rand(1, 5) - var/block = 0 - var/accurate = 0 - var/hit_zone = H.zone_sel.selecting - var/obj/item/organ/external/affecting = get_organ(hit_zone) - - // See what attack they use - var/datum/unarmed_attack/attack = H.get_unarmed_attack(src, hit_zone) - if(!attack) - return 0 - if(world.time < H.last_attack + attack.delay) - to_chat(H, "You can't attack again so soon.") - return 0 - else - H.last_attack = world.time - - if(!affecting || affecting.is_stump()) - to_chat(M, "They are missing that limb!") - return 1 - - switch(src.a_intent) - if(I_HELP) - // We didn't see this coming, so we get the full blow - rand_damage = 5 - accurate = 1 - if(I_HURT, I_GRAB) - // We're in a fighting stance, there's a chance we block - if(MayMove() && src!=H && prob(20)) - block = 1 - - if (M.grabbed_by.len) - // Someone got a good grip on them, they won't be able to do much damage - rand_damage = max(1, rand_damage - 2) - - if(src.grabbed_by.len || !src.MayMove() || src==H || H.species.species_flags & SPECIES_FLAG_NO_BLOCK) - accurate = 1 // certain circumstances make it impossible for us to evade punches - rand_damage = 5 - - // Process evasion and blocking - var/miss_type = 0 - var/attack_message - if(!accurate) - /* ~Hubblenaut - This place is kind of convoluted and will need some explaining. - ran_zone() will pick out of 11 zones, thus the chance for hitting - our target where we want to hit them is circa 9.1%. - - Now since we want to statistically hit our target organ a bit more - often than other organs, we add a base chance of 20% for hitting it. - - This leaves us with the following chances: - - If aiming for chest: - 27.3% chance you hit your target organ - 70.5% chance you hit a random other organ - 2.2% chance you miss - - If aiming for something else: - 23.2% chance you hit your target organ - 56.8% chance you hit a random other organ - 15.0% chance you miss - - Note: We don't use get_zone_with_miss_chance() here since the chances - were made for projectiles. - TODO: proc for melee combat miss chances depending on organ? - */ - if(prob(80)) - hit_zone = ran_zone(hit_zone) - if(prob(15) && hit_zone != BP_CHEST) // Missed! - if(!src.lying) - attack_message = "[H] attempted to strike [src], but missed!" - else - attack_message = "[H] attempted to strike [src], but \he rolled out of the way!" - src.set_dir(pick(GLOB.cardinal)) - miss_type = 1 - - if(!miss_type && block) - attack_message = "[H] went for [src]'s [affecting.name] but was blocked!" - miss_type = 2 - - H.do_attack_animation(src) - if(!attack_message) - attack.show_attack(H, src, hit_zone, rand_damage) - else - H.visible_message("[attack_message]") - - playsound(loc, ((miss_type) ? (miss_type == 1 ? attack.miss_sound : 'sound/weapons/thudswoosh.ogg') : attack.attack_sound), 25, 1, -1) - if (attack.should_attack_log) - admin_attack_log(H, src, "[miss_type ? (miss_type == 1 ? "Has missed" : "Was blocked by") : "Has [pick(attack.attack_verb)]"] their victim.", "[miss_type ? (miss_type == 1 ? "Missed" : "Blocked") : "[pick(attack.attack_verb)]"] their attacker", "[miss_type ? (miss_type == 1 ? "has missed" : "was blocked by") : "has [pick(attack.attack_verb)]"]") - - if(miss_type) - return 0 - - var/real_damage = rand_damage - real_damage += attack.get_unarmed_damage(H) - if(MUTATION_HULK in H.mutations) - real_damage *= 2 // Hulks do twice the damage - rand_damage *= 2 - real_damage = max(1, real_damage) - // Apply additional unarmed effects. - attack.apply_effects(H, src, rand_damage, hit_zone) - - // Finally, apply damage to target - apply_damage(real_damage, attack.get_damage_type(), hit_zone, damage_flags=attack.damage_flags()) - - if(I_DISARM) - if(H.species) - admin_attack_log(M, src, "Disarmed their victim.", "Was disarmed.", "disarmed") - H.species.disarm_attackhand(H, src) - - return - -/mob/living/carbon/human/proc/afterattack(atom/target as mob|obj|turf|area, mob/living/user as mob|obj, inrange, params) - return - -/mob/living/carbon/human/attack_generic(mob/user, damage, attack_message, environment_smash, damtype = DAMAGE_BRUTE, armorcheck = "melee", dam_flags = EMPTY_BITFIELD) - - if(!damage || !istype(user)) - return - admin_attack_log(user, src, "Attacked their victim", "Was attacked", "has [attack_message]") - src.visible_message("[user] has [attack_message] [src]!") - user.do_attack_animation(src) - - var/dam_zone = pick(organs_by_name) - var/obj/item/organ/external/affecting = get_organ(ran_zone(dam_zone)) - apply_damage(damage, damtype, affecting, dam_flags) - updatehealth() - return 1 - -//Breaks all grips and pulls that the mob currently has. -/mob/living/carbon/human/proc/break_all_grabs(mob/living/carbon/user) - var/success = 0 - if(pulling) - visible_message("[user] has broken [src]'s grip on [pulling]!") - success = 1 - stop_pulling() - - if(istype(l_hand, /obj/item/grab)) - var/obj/item/grab/lgrab = l_hand - if(lgrab.affecting) - visible_message("[user] has broken [src]'s grip on [lgrab.affecting]!") - success = 1 - spawn(1) - qdel(lgrab) - if(istype(r_hand, /obj/item/grab)) - var/obj/item/grab/rgrab = r_hand - if(rgrab.affecting) - visible_message("[user] has broken [src]'s grip on [rgrab.affecting]!") - success = 1 - spawn(1) - qdel(rgrab) - return success -/* - We want to ensure that a mob may only apply pressure to one organ of one mob at any given time. Currently this is done mostly implicitly through - the behaviour of do_after() and the fact that applying pressure to someone else requires a grab: - - If you are applying pressure to yourself and attempt to grab someone else, you'll change what you are holding in your active hand which will stop do_after() - If you are applying pressure to another and attempt to apply pressure to yourself, you'll have to switch to an empty hand which will also stop do_after() - Changing targeted zones should also stop do_after(), preventing you from applying pressure to more than one body part at once. -*/ -/mob/living/carbon/human/proc/apply_pressure(mob/living/user, var/target_zone) - var/obj/item/organ/external/organ = get_organ(target_zone) - if(!organ || !(organ.status & ORGAN_BLEEDING) || BP_IS_ROBOTIC(organ)) - return 0 - - if(organ.applied_pressure) - var/message = "[ismob(organ.applied_pressure)? "Someone" : "\A [organ.applied_pressure]"] is already applying pressure to [user == src? "your [organ.name]" : "[src]'s [organ.name]"]." - to_chat(user, message) - return 0 - - if(user == src) - user.visible_message("\The [user] starts applying pressure to \his [organ.name]!", "You start applying pressure to your [organ.name]!") - else - user.visible_message("\The [user] starts applying pressure to [src]'s [organ.name]!", "You start applying pressure to [src]'s [organ.name]!") - spawn(0) - organ.applied_pressure = user - - //apply pressure as long as they stay still and keep grabbing - do_after(user, INFINITY, src, (DO_DEFAULT & ~DO_SHOW_PROGRESS) | DO_USER_SAME_ZONE) - - organ.applied_pressure = null - - if(user == src) - user.visible_message("\The [user] stops applying pressure to \his [organ.name]!", "You stop applying pressure to your [organ.name]!") - else - user.visible_message("\The [user] stops applying pressure to [src]'s [organ.name]!", "You stop applying pressure to [src]'s [organ.name]!") - - return 1 - -/mob/living/carbon/human/verb/set_default_unarmed_attack() - set name = "Set Default Unarmed Attack" - set category = "IC" - set src = usr - - var/list/choices = list() - for(var/thing in species.unarmed_attacks) - var/datum/unarmed_attack/u_attack = thing - choices[u_attack.attack_name] = u_attack - - var/selection = input("Select a default attack (currently selected: [default_attack ? default_attack.attack_name : "none"]).", "Default Unarmed Attack") as null|anything in choices - if(selection && !(choices[selection] in species.unarmed_attacks)) - return - - default_attack = selection ? choices[selection] : null - to_chat(src, SPAN_NOTICE("Your default unarmed attack is now [default_attack ? default_attack.attack_name : "cleared"].")) diff --git a/code/modules/mob/living/carbon/human/human_damage.dm b/code/modules/mob/living/carbon/human/human_damage.dm deleted file mode 100644 index de373995e89bc..0000000000000 --- a/code/modules/mob/living/carbon/human/human_damage.dm +++ /dev/null @@ -1,462 +0,0 @@ -//Updates the mob's health from organs and mob damage variables -/mob/living/carbon/human/updatehealth() - - if(status_flags & GODMODE) - health = maxHealth - set_stat(CONSCIOUS) - return - - health = maxHealth - getBrainLoss() - - //TODO: fix husking - if(((maxHealth - getFireLoss()) < config.health_threshold_dead) && stat == DEAD) - ChangeToHusk() - return - -/mob/living/carbon/human/adjustBrainLoss(var/amount) - if(status_flags & GODMODE) return 0 //godmode - if(should_have_organ(BP_BRAIN)) - var/obj/item/organ/internal/brain/sponge = internal_organs_by_name[BP_BRAIN] - if(sponge) - sponge.take_internal_damage(amount) - -/mob/living/carbon/human/setBrainLoss(var/amount) - if(status_flags & GODMODE) return 0 //godmode - if(should_have_organ(BP_BRAIN)) - var/obj/item/organ/internal/brain/sponge = internal_organs_by_name[BP_BRAIN] - if(sponge) - sponge.damage = min(max(amount, 0),sponge.species.total_health) - updatehealth() - -/mob/living/carbon/human/getBrainLoss() - if(status_flags & GODMODE) return 0 //godmode - if(should_have_organ(BP_BRAIN)) - var/obj/item/organ/internal/brain/sponge = internal_organs_by_name[BP_BRAIN] - if(sponge) - if(sponge.status & ORGAN_DEAD) - return sponge.species.total_health - else - return sponge.damage - else - return species.total_health - return 0 - -//Straight pain values, not affected by painkillers etc -/mob/living/carbon/human/getHalLoss() - var/amount = 0 - for(var/obj/item/organ/external/E in organs) - amount += E.get_pain() - return amount - -/mob/living/carbon/human/setHalLoss(var/amount) - adjustHalLoss(getHalLoss()-amount) - -/mob/living/carbon/human/adjustHalLoss(var/amount) - var/heal = (amount < 0) - amount = abs(amount) - var/list/pick_organs = organs.Copy() - while(amount > 0 && pick_organs.len) - var/obj/item/organ/external/E = pick(pick_organs) - pick_organs -= E - if(!istype(E)) - continue - - if(heal) - amount -= E.remove_pain(amount) - else - amount -= E.add_pain(amount) - SET_BIT(hud_updateflag, HEALTH_HUD) - -//These procs fetch a cumulative total damage from all organs -/mob/living/carbon/human/getBruteLoss() - var/amount = 0 - for(var/obj/item/organ/external/O in organs) - if(BP_IS_ROBOTIC(O) && !O.vital) - continue //robot limbs don't count towards shock and crit - amount += O.brute_dam - return amount - -/mob/living/carbon/human/getFireLoss() - var/amount = 0 - for(var/obj/item/organ/external/O in organs) - if(BP_IS_ROBOTIC(O) && !O.vital) - continue //robot limbs don't count towards shock and crit - amount += O.burn_dam - return amount - -/mob/living/carbon/human/adjustBruteLoss(var/amount) - if(amount > 0) - take_overall_damage(amount, 0) - else - heal_overall_damage(-amount, 0) - SET_BIT(hud_updateflag, HEALTH_HUD) - -/mob/living/carbon/human/adjustFireLoss(var/amount) - if(amount > 0) - take_overall_damage(0, amount) - else - heal_overall_damage(0, -amount) - SET_BIT(hud_updateflag, HEALTH_HUD) - -/mob/living/carbon/human/Stun(amount) - amount *= species.stun_mod - if(amount <= 0 || (MUTATION_HULK in mutations)) return - ..() - -/mob/living/carbon/human/Weaken(amount) - amount *= species.weaken_mod - if(amount <= 0 || (MUTATION_HULK in mutations)) return - ..(amount) - -/mob/living/carbon/human/Paralyse(amount) - amount *= species.paralysis_mod - if(amount <= 0 || (MUTATION_HULK in mutations)) return - // Notify our AI if they can now control the suit. - if(wearing_rig && !stat && paralysis < amount) //We are passing out right this second. - wearing_rig.notify_ai("Warning: user consciousness failure. Mobility control passed to integrated intelligence system.") - ..(amount) - -/mob/living/carbon/human/getCloneLoss() - var/amount = 0 - for(var/obj/item/organ/external/E in organs) - amount += E.get_genetic_damage() - return amount - -/mob/living/carbon/human/setCloneLoss(var/amount) - adjustCloneLoss(getCloneLoss()-amount) - -/mob/living/carbon/human/adjustCloneLoss(var/amount) - var/heal = amount < 0 - amount = abs(amount) - - var/list/pick_organs = organs.Copy() - while(amount > 0 && pick_organs.len) - var/obj/item/organ/external/E = pick(pick_organs) - pick_organs -= E - if(heal) - amount -= E.remove_genetic_damage(amount) - else - amount -= E.add_genetic_damage(amount) - SET_BIT(hud_updateflag, HEALTH_HUD) - -// Defined here solely to take species flags into account without having to recast at mob/living level. -/mob/living/carbon/human/getOxyLoss() - if(!need_breathe()) - return 0 - else - var/obj/item/organ/internal/lungs/breathe_organ = internal_organs_by_name[species.breathing_organ] - if(!breathe_organ) - return maxHealth/2 - return breathe_organ.get_oxygen_deprivation() - -/mob/living/carbon/human/setOxyLoss(var/amount) - if(!need_breathe()) - return 0 - else - adjustOxyLoss(getOxyLoss()-amount) - -/mob/living/carbon/human/adjustOxyLoss(var/amount) - if(!need_breathe()) - return - var/heal = amount < 0 - var/obj/item/organ/internal/lungs/breathe_organ = internal_organs_by_name[species.breathing_organ] - if(breathe_organ) - if(heal) - breathe_organ.remove_oxygen_deprivation(abs(amount)) - else - breathe_organ.add_oxygen_deprivation(abs(amount*species.oxy_mod)) - SET_BIT(hud_updateflag, HEALTH_HUD) - -/mob/living/carbon/human/getToxLoss() - if((species.species_flags & SPECIES_FLAG_NO_POISON) || isSynthetic()) - return 0 - var/amount = 0 - for(var/obj/item/organ/internal/I in internal_organs) - amount += I.getToxLoss() - return amount - -/mob/living/carbon/human/setToxLoss(var/amount) - if(!(species.species_flags & SPECIES_FLAG_NO_POISON) && !isSynthetic()) - adjustToxLoss(getToxLoss()-amount) - -// TODO: better internal organ damage procs. -/mob/living/carbon/human/adjustToxLoss(var/amount) - - if((species.species_flags & SPECIES_FLAG_NO_POISON) || isSynthetic()) - return - - var/heal = amount < 0 - amount = abs(amount) - - if (!heal) - amount = amount * species.get_toxins_mod(src) - if (CE_ANTITOX in chem_effects) - amount *= 1 - (chem_effects[CE_ANTITOX] * 0.25) - - var/list/pick_organs = shuffle(internal_organs.Copy()) - - // Prioritize damaging our filtration organs first. - var/obj/item/organ/internal/kidneys/kidneys = internal_organs_by_name[BP_KIDNEYS] - if(kidneys) - pick_organs -= kidneys - pick_organs.Insert(1, kidneys) - var/obj/item/organ/internal/liver/liver = internal_organs_by_name[BP_LIVER] - if(liver) - pick_organs -= liver - pick_organs.Insert(1, liver) - - // Move the brain to the very end since damage to it is vastly more dangerous - // (and isn't technically counted as toxloss) than general organ damage. - var/obj/item/organ/internal/brain/brain = internal_organs_by_name[BP_BRAIN] - if(brain) - pick_organs -= brain - pick_organs += brain - - for(var/obj/item/organ/internal/I in pick_organs) - if(amount <= 0) - break - if(heal) - if(I.damage < amount) - amount -= I.damage - I.damage = 0 - else - I.damage -= amount - amount = 0 - else - var/cap_dam = I.max_damage - I.damage - if(amount >= cap_dam) - I.take_internal_damage(cap_dam, silent=TRUE) - amount -= cap_dam - else - I.take_internal_damage(amount, silent=TRUE) - amount = 0 - -/mob/living/carbon/human/proc/can_autoheal(var/dam_type) - if(!species || !dam_type) return FALSE - - if (dam_type == DAMAGE_BRUTE) - return(getBruteLoss() < species.total_health / 2) - else if (dam_type == DAMAGE_BURN) - return(getFireLoss() < species.total_health / 2) - return FALSE - -//////////////////////////////////////////// - -//Returns a list of damaged organs -/mob/living/carbon/human/proc/get_damaged_organs(var/brute, var/burn) - var/list/obj/item/organ/external/parts = list() - for(var/obj/item/organ/external/O in organs) - if((brute && O.brute_dam) || (burn && O.burn_dam)) - parts += O - return parts - -//Returns a list of damageable organs -/mob/living/carbon/human/proc/get_damageable_organs() - var/list/obj/item/organ/external/parts = list() - for(var/obj/item/organ/external/O in organs) - if(O.is_damageable()) - parts += O - return parts - -//Heals ONE external organ, organ gets randomly selected from damaged ones. -//It automatically updates damage overlays if necesary -//It automatically updates health status -/mob/living/carbon/human/heal_organ_damage(var/brute, var/burn, var/affect_robo = 0) - var/list/obj/item/organ/external/parts = get_damaged_organs(brute,burn) - if(!parts.len) return - var/obj/item/organ/external/picked = pick(parts) - if(picked.heal_damage(brute,burn,robo_repair = affect_robo)) - SET_BIT(hud_updateflag, HEALTH_HUD) - updatehealth() - - -//TODO reorganize damage procs so that there is a clean API for damaging living mobs - -/* -In most cases it makes more sense to use apply_damage() instead! And make sure to check armour if applicable. -*/ -//Damages ONE external organ, organ gets randomly selected from damagable ones. -//It automatically updates damage overlays if necesary -//It automatically updates health status - - -/mob/living/carbon/human/take_organ_damage(brute = 0, burn = 0, flags = 0) - if (!brute && !burn) - return - - var/list/obj/item/organ/external/organs = get_damageable_organs() - - if (flags & ORGAN_DAMAGE_FLESH_ONLY) - var/index = organs.len - while (index > 0) - if (BP_IS_ROBOTIC(organs[index])) - organs.Cut(index, index + 1) - --index - - if (flags & ORGAN_DAMAGE_ROBOT_ONLY) - var/index = organs.len - while (index > 0) - if (!BP_IS_ROBOTIC(organs[index])) - organs.Cut(index, index + 1) - --index - - if (!organs.len) - return - - var/damage_flags = 0 - if (flags & ORGAN_DAMAGE_SHARP) - damage_flags |= DAMAGE_FLAG_SHARP - if (flags & ORGAN_DAMAGE_EDGE) - damage_flags |= DAMAGE_FLAG_EDGE - - var/obj/item/organ/external/organ = pick(organs) - if (organ.take_external_damage(brute, burn, damage_flags)) - SET_BIT(hud_updateflag, HEALTH_HUD) - updatehealth() - - -//Heal MANY external organs, in random order -/mob/living/carbon/human/heal_overall_damage(var/brute, var/burn) - var/list/obj/item/organ/external/parts = get_damaged_organs(brute,burn) - - while(parts.len && (brute>0 || burn>0) ) - var/obj/item/organ/external/picked = pick(parts) - - var/brute_was = picked.brute_dam - var/burn_was = picked.burn_dam - - picked.heal_damage(brute,burn) - - brute -= (brute_was-picked.brute_dam) - burn -= (burn_was-picked.burn_dam) - - parts -= picked - updatehealth() - SET_BIT(hud_updateflag, HEALTH_HUD) - -// damage MANY external organs, in random order -/mob/living/carbon/human/take_overall_damage(var/brute, var/burn, var/sharp = FALSE, var/edge = FALSE, var/used_weapon = null) - if(status_flags & GODMODE) return //godmode - var/list/obj/item/organ/external/parts = get_damageable_organs() - if(!parts.len) return - - var/dam_flags = (sharp? DAMAGE_FLAG_SHARP : 0)|(edge? DAMAGE_FLAG_EDGE : 0) - var/brute_avg = brute / parts.len - var/burn_avg = burn / parts.len - for(var/obj/item/organ/external/E in parts) - if(QDELETED(E)) - continue - if(E.owner != src) - continue // The code below may affect the children of an organ. - - if(brute_avg) - apply_damage(damage = brute_avg, damagetype = DAMAGE_BRUTE, damage_flags = dam_flags, used_weapon = used_weapon, silent = TRUE, given_organ = E) - if(burn_avg) - apply_damage(damage = burn_avg, damagetype = DAMAGE_BURN, damage_flags = dam_flags, used_weapon = used_weapon, silent = TRUE, given_organ = E) - - updatehealth() - SET_BIT(hud_updateflag, HEALTH_HUD) - - -//////////////////////////////////////////// - -/* -This function restores the subjects blood to max. -*/ -/mob/living/carbon/human/proc/restore_blood() - if(!should_have_organ(BP_HEART)) - return - if(vessel.total_volume < species.blood_volume) - vessel.add_reagent(/datum/reagent/blood, species.blood_volume - vessel.total_volume) - -/* -This function restores all organs. -*/ -/mob/living/carbon/human/restore_all_organs(var/ignore_prosthetic_prefs) - for(var/bodypart in BP_BY_DEPTH) - var/obj/item/organ/external/current_organ = organs_by_name[bodypart] - if(istype(current_organ)) - current_organ.rejuvenate(ignore_prosthetic_prefs) - verbs -= /mob/living/carbon/human/proc/undislocate - -/mob/living/carbon/human/proc/HealDamage(zone, brute, burn) - var/obj/item/organ/external/E = get_organ(zone) - if(istype(E, /obj/item/organ/external)) - if (E.heal_damage(brute, burn)) - SET_BIT(hud_updateflag, HEALTH_HUD) - else - return 0 - return - - -/mob/living/carbon/human/proc/get_organ(var/zone) - return organs_by_name[check_zone(zone)] - -/mob/living/carbon/human/apply_damage(damage = 0, damagetype = DAMAGE_BRUTE, def_zone, damage_flags = EMPTY_BITFIELD, obj/used_weapon, armor_pen, silent = FALSE, obj/item/organ/external/given_organ) - - var/obj/item/organ/external/organ = given_organ - if(!organ) - if(isorgan(def_zone)) - organ = def_zone - else - if(!def_zone) - if(damage_flags & DAMAGE_FLAG_DISPERSED) - var/old_damage = damage - var/tally - silent = TRUE // Will damage a lot of organs, probably, so avoid spam. - for(var/zone in organ_rel_size) - tally += organ_rel_size[zone] - for(var/zone in organ_rel_size) - damage = old_damage * organ_rel_size[zone]/tally - def_zone = zone - . = .() || . - return - def_zone = ran_zone(def_zone) - organ = get_organ(check_zone(def_zone)) - - //Handle other types of damage - if (!(damagetype in list(DAMAGE_BRUTE, DAMAGE_BURN, DAMAGE_PAIN, DAMAGE_GENETIC))) - return ..() - if(!istype(organ)) - return 0 // This is reasonable and means the organ is missing. - - handle_suit_punctures(damagetype, damage, def_zone) - - var/list/after_armor = modify_damage_by_armor(def_zone, damage, damagetype, damage_flags, src, armor_pen, silent) - damage = after_armor[1] - damagetype = after_armor[2] - damage_flags = after_armor[3] - if(!damage) - return 0 - - if(damage > 15 && prob(damage*4) && organ.can_feel_pain()) - make_reagent(round(damage/10), /datum/reagent/adrenaline) - var/datum/wound/created_wound - damageoverlaytemp = 20 - switch(damagetype) - if (DAMAGE_BRUTE) - created_wound = organ.take_external_damage(damage, 0, damage_flags, used_weapon) - if (DAMAGE_BURN) - created_wound = organ.take_external_damage(0, damage, damage_flags, used_weapon) - if (DAMAGE_PAIN) - organ.add_pain(damage) - if (DAMAGE_GENETIC) - organ.add_genetic_damage(damage) - - // Will set our damageoverlay icon to the next level, which will then be set back to the normal level the next mob.Life(). - updatehealth() - SET_BIT(hud_updateflag, HEALTH_HUD) - return created_wound - -// Find out in how much pain the mob is at the moment. -/mob/living/carbon/human/proc/get_shock() - - if (!can_feel_pain()) - return 0 - - var/traumatic_shock = getHalLoss() // Pain. - traumatic_shock -= chem_effects[CE_PAINKILLER] // TODO: check what is actually stored here. - - if(stat == UNCONSCIOUS) - traumatic_shock *= 0.6 - return max(0,traumatic_shock) diff --git a/code/modules/mob/living/carbon/human/human_defense.dm b/code/modules/mob/living/carbon/human/human_defense.dm deleted file mode 100644 index 816f528a29877..0000000000000 --- a/code/modules/mob/living/carbon/human/human_defense.dm +++ /dev/null @@ -1,500 +0,0 @@ -/* -Contains most of the procs that are called when a mob is attacked by something - -bullet_act -ex_act -meteor_act - -*/ - -/mob/living/carbon/human/bullet_act(var/obj/item/projectile/P, var/def_zone) - if (status_flags & GODMODE) - return PROJECTILE_FORCE_MISS - - def_zone = check_zone(def_zone) - if(!has_organ(def_zone)) - return PROJECTILE_FORCE_MISS //if they don't have the organ in question then the projectile just passes by. - - //Shields - var/shield_check = check_shields(P.damage, P, null, def_zone, "the [P.name]") - if(shield_check) - if(shield_check < 0) - return shield_check - else - P.on_hit(src, 100, def_zone) - return 100 - - var/blocked = ..(P, def_zone) - - radio_interrupt_cooldown = world.time + (RADIO_INTERRUPT_DEFAULT * 0.8) - - return blocked - -/mob/living/carbon/human/stun_effect_act(var/stun_amount, var/agony_amount, var/def_zone) - var/obj/item/organ/external/affected = get_organ(check_zone(def_zone)) - if(!affected) - return - - var/siemens_coeff = get_siemens_coefficient_organ(affected) - stun_amount *= siemens_coeff - agony_amount *= siemens_coeff - agony_amount *= affected.get_agony_multiplier() - affected.stun_act(stun_amount, agony_amount) - - radio_interrupt_cooldown = world.time + RADIO_INTERRUPT_DEFAULT - - if(!affected.can_feel_pain() || (chem_effects[CE_PAINKILLER]/3 > agony_amount))//stops blurry eyes and stutter if you can't feel pain - agony_amount = 0 - - ..(stun_amount, agony_amount, def_zone) - -/mob/living/carbon/human/get_blocked_ratio(def_zone, damage_type, damage_flags, armor_pen, damage) - if(!def_zone && (damage_flags & DAMAGE_FLAG_DISPERSED)) - var/tally - for(var/zone in organ_rel_size) - tally += organ_rel_size[zone] - for(var/zone in organ_rel_size) - def_zone = zone - . += .() * organ_rel_size/tally - return - return ..() - -/mob/living/carbon/human/get_armors_by_zone(obj/item/organ/external/def_zone, damage_type, damage_flags) - if(!def_zone) - def_zone = ran_zone() - if(!istype(def_zone)) - def_zone = get_organ(check_zone(def_zone)) - if(!def_zone) - return ..() - - . = list() - var/list/protective_gear = list(head, wear_mask, wear_suit, w_uniform, gloves, shoes) - for(var/obj/item/clothing/gear in protective_gear) - if(gear.accessories.len) - for(var/obj/item/clothing/accessory/bling in gear.accessories) - if(bling.body_parts_covered & def_zone.body_part) - var/armor = get_extension(bling, /datum/extension/armor) - if(armor) - . += armor - if(gear.body_parts_covered & def_zone.body_part) - var/armor = get_extension(gear, /datum/extension/armor) - if(armor) - . += armor - - // Add inherent armor to the end of list so that protective equipment is checked first - . += ..() - -//this proc returns the Siemens coefficient of electrical resistivity for a particular external organ. -/mob/living/carbon/human/proc/get_siemens_coefficient_organ(var/obj/item/organ/external/def_zone) - if (!def_zone) - return 1.0 - - var/siemens_coefficient = max(species.siemens_coefficient,0) - - var/list/clothing_items = list(head, wear_mask, wear_suit, w_uniform, gloves, shoes) // What all are we checking? - for(var/obj/item/clothing/C in clothing_items) - for(var/obj/item/clothing/accessories in C.accessories) - if (accessories.body_parts_covered & def_zone.body_part) - siemens_coefficient *= accessories.siemens_coefficient - if(istype(C) && (C.body_parts_covered & def_zone.body_part)) // Is that body part being targeted covered? - siemens_coefficient *= C.siemens_coefficient - - return siemens_coefficient - -/mob/living/carbon/human/proc/check_head_coverage() - - for(var/obj/item/clothing/bp in list(head, wear_mask, wear_suit, w_uniform)) - if(bp.body_parts_covered & HEAD) - return 1 - return 0 - -//Used to check if they can be fed food/drinks/pills -/mob/living/carbon/human/check_mouth_coverage() - var/list/protective_gear = list(head, wear_mask, wear_suit, w_uniform) - for(var/obj/item/gear in protective_gear) - if(istype(gear) && (gear.body_parts_covered & FACE) && !(gear.item_flags & ITEM_FLAG_FLEXIBLEMATERIAL)) - return gear - -///Returns null or the first equipped item covering the bodypart -/mob/living/carbon/human/proc/get_clothing_coverage(bodypart) - switch(bodypart) - if (BP_HEAD) - bodypart = HEAD - if (BP_EYES) - bodypart = EYES - if (BP_MOUTH) - bodypart = FACE - if (BP_CHEST) - bodypart = UPPER_TORSO - if (BP_GROIN) - bodypart = LOWER_TORSO - if (BP_L_ARM, BP_R_ARM) - bodypart = ARMS - if (BP_L_HAND, BP_R_HAND) - bodypart = HANDS - if (BP_L_LEG, BP_R_LEG) - bodypart = LEGS - if (BP_L_FOOT, BP_R_FOOT) - bodypart = FEET - - for(var/obj/item/clothing/C in list(head, wear_mask, wear_suit, w_uniform, gloves, shoes, glasses)) - if (C.body_parts_covered & bodypart) - return C - return null - -/mob/living/carbon/human/proc/check_shields(var/damage = 0, var/atom/damage_source = null, var/mob/attacker = null, var/def_zone = null, var/attack_text = "the attack") - - var/obj/item/projectile/P = damage_source - if(istype(P) && !P.disrupts_psionics() && psi && P.starting && prob(psi.get_armour(get_armor_key(P.damage_type, P.damage_flags())) * 0.5) && psi.spend_power(round(damage/10))) - visible_message("\The [src] deflects [attack_text]!") - P.redirect(P.starting.x + rand(-2,2), P.starting.y + rand(-2,2), get_turf(src), src) - return PROJECTILE_FORCE_MISS - - for(var/obj/item/shield in list(l_hand, r_hand, wear_suit)) - if(!shield) continue - . = shield.handle_shield(src, damage, damage_source, attacker, def_zone, attack_text) - if(.) return - return 0 - -/mob/living/carbon/human/resolve_item_attack(obj/item/I, mob/living/user, var/target_zone) - - for (var/obj/item/grab/G in grabbed_by) - if(G.resolve_item_attack(user, I, target_zone)) - return null - - if(user == src) // Attacking yourself can't miss - return target_zone - - var/accuracy_penalty = user.melee_accuracy_mods() - accuracy_penalty += 5*get_skill_difference(SKILL_COMBAT, user) - accuracy_penalty += 10*(I.w_class - ITEM_SIZE_NORMAL) - accuracy_penalty -= I.melee_accuracy_bonus - - var/hit_zone = get_zone_with_miss_chance(target_zone, src, accuracy_penalty) - - if(!hit_zone) - visible_message("\The [user] misses [src] with \the [I]!") - return null - - if(check_shields(I.force, I, user, target_zone, "the [I.name]")) - return null - - var/obj/item/organ/external/affecting = get_organ(hit_zone) - if (!affecting || affecting.is_stump()) - to_chat(user, "They are missing that limb!") - return null - - return hit_zone - -/mob/living/carbon/human/hit_with_weapon(obj/item/I, mob/living/user, var/effective_force, var/hit_zone) - var/obj/item/organ/external/affecting = get_organ(hit_zone) - if(!affecting) - return //should be prevented by attacked_with_item() but for sanity. - - var/weapon_mention - if(I.attack_message_name()) - weapon_mention = " with [I.attack_message_name()]" - visible_message(SPAN_DANGER("\The [src] has been [I.attack_verb.len? pick(I.attack_verb) : "attacked"] in the [affecting.name][weapon_mention] by \the [user]!")) - return standard_weapon_hit_effects(I, user, effective_force, hit_zone) - -/mob/living/carbon/human/standard_weapon_hit_effects(obj/item/I, mob/living/user, var/effective_force, var/hit_zone) - var/obj/item/organ/external/affecting = get_organ(hit_zone) - if(!affecting) - return 0 - - if(user.a_intent == I_DISARM) - effective_force *= 0.66 //reduced effective force... - - var/blocked = get_blocked_ratio(hit_zone, I.damtype, I.damage_flags(), I.armor_penetration, effective_force) - - // Handle striking to cripple. - if(user.a_intent == I_DISARM) - if(!..(I, user, effective_force, hit_zone)) - return 0 - - //set the dislocate mult less than the effective force mult so that - //dislocating limbs on disarm is a bit easier than breaking limbs on harm - attack_joint(affecting, I, effective_force, 0.5, blocked) //...but can dislocate joints - else if(!..()) - return 0 - - var/unimpeded_force = (1 - blocked) * effective_force - if(effective_force > 10 || effective_force >= 5 && prob(33)) - forcesay(GLOB.hit_appends) //forcesay checks stat already - radio_interrupt_cooldown = world.time + (RADIO_INTERRUPT_DEFAULT * 0.8) //getting beat on can briefly prevent radio use - if ((I.damtype == DAMAGE_BRUTE || I.damtype == DAMAGE_PAIN) && prob(25 + (unimpeded_force * 2))) - if(!stat) - if(!headcheck(hit_zone)) - if(prob(unimpeded_force + 5)) - apply_effect(3, EFFECT_WEAKEN, 100 * blocked) - visible_message("[src] has been knocked down!") - //Apply blood - attack_bloody(I, user, effective_force, hit_zone) - - return 1 - -/mob/living/carbon/human/proc/attack_bloody(obj/item/W, mob/living/attacker, var/effective_force, var/hit_zone) - if (W.damtype != DAMAGE_BRUTE) - return - - //make non-sharp low-force weapons less likely to be bloodied - if(W.sharp || prob(effective_force*4)) - if(!(W.atom_flags & ATOM_FLAG_NO_BLOOD)) - W.add_blood(src) - else - return //if the weapon itself didn't get bloodied than it makes little sense for the target to be bloodied either - - //getting the weapon bloodied is easier than getting the target covered in blood, so run prob() again - if(prob(33 + W.sharp ? 10 : 0)) - var/turf/location = loc - if(istype(location, /turf/simulated)) - location.add_blood(src) - if(ishuman(attacker)) - var/mob/living/carbon/human/H = attacker - if(get_dist(H, src) <= 1) //people with TK won't get smeared with blood - H.bloody_body(src) - H.bloody_hands(src) - - switch(hit_zone) - if(BP_HEAD) - if(wear_mask) - wear_mask.add_blood(src) - update_inv_wear_mask(0) - if(head) - head.add_blood(src) - update_inv_head(0) - if(glasses && prob(33)) - glasses.add_blood(src) - update_inv_glasses(0) - if(BP_CHEST) - bloody_body(src) - -/mob/living/carbon/human/proc/projectile_hit_bloody(obj/item/projectile/P, var/effective_force, var/hit_zone, var/obj/item/organ/external/organ) - if (P.damage_type != DAMAGE_BRUTE || P.nodamage) - return - if(!(P.sharp || prob(effective_force*4))) - return - if(prob(effective_force)) - var/turf/location = loc - if(istype(location, /turf/simulated)) - location.add_blood(src) - if(hit_zone) - organ = get_organ(hit_zone) - var/list/bloody = get_covering_equipped_items(organ.body_part) - for(var/obj/item/clothing/C in bloody) - C.add_blood(src) - C.update_clothing_icon() - -/mob/living/carbon/human/proc/attack_joint(var/obj/item/organ/external/organ, var/obj/item/W, var/effective_force, var/dislocate_mult, var/blocked) - if(!organ || (organ.dislocated == 2) || (organ.dislocated == -1) || blocked >= 100) - return 0 - if (W.damtype != DAMAGE_BRUTE) - return 0 - - //want the dislocation chance to be such that the limb is expected to dislocate after dealing a fraction of the damage needed to break the limb - var/dislocate_chance = effective_force/(dislocate_mult * organ.min_broken_damage * config.organ_health_multiplier) * (organ.damage * 1.75) - if(prob(dislocate_chance * blocked_mult(blocked))) - visible_message("[src]'s [organ.joint] [pick("gives way","caves in","crumbles","collapses")]!") - organ.dislocate(1) - return 1 - return 0 - -/mob/living/carbon/human/emag_act(var/remaining_charges, mob/user, var/emag_source) - var/obj/item/organ/external/affecting = get_organ(user.zone_sel.selecting) - if(!affecting || !BP_IS_ROBOTIC(affecting)) - to_chat(user, "That limb isn't robotic.") - return -1 - if(affecting.status & ORGAN_SABOTAGED) - to_chat(user, "[src]'s [affecting.name] is already sabotaged!") - return -1 - to_chat(user, "You sneakily slide [emag_source] into the dataport on [src]'s [affecting.name] and short out the safeties.") - affecting.status |= ORGAN_SABOTAGED - return 1 - -//this proc handles being hit by a thrown atom -/mob/living/carbon/human/hitby(atom/movable/AM as mob|obj, var/datum/thrownthing/TT) - - if(isobj(AM)) - var/obj/O = AM - - if(in_throw_mode && !get_active_hand() && TT.speed <= THROWFORCE_SPEED_DIVISOR) //empty active hand and we're in throw mode - if(!incapacitated()) - if(isturf(O.loc)) - put_in_active_hand(O) - visible_message("[src] catches [O]!") - throw_mode_off() - return - - var/dtype = O.damtype - var/throw_damage = O.throwforce*(TT.speed/THROWFORCE_SPEED_DIVISOR) - - var/zone = BP_CHEST - if (TT.target_zone) - zone = check_zone(TT.target_zone) - else - zone = ran_zone() //Hits a random part of the body, -was already geared towards the chest - - //check if we hit - var/miss_chance = max(15*(TT.dist_travelled-2),0) - zone = get_zone_with_miss_chance(zone, src, miss_chance, ranged_attack=1) - - if(zone && TT.thrower && TT.thrower != src) - var/shield_check = check_shields(throw_damage, O, TT.thrower, zone, "[O]") - if(shield_check == PROJECTILE_FORCE_MISS) - zone = null - else if(shield_check) - return - - if(!zone) - visible_message("\The [O] misses [src] narrowly!") - return - - var/obj/item/organ/external/affecting = get_organ(zone) - if (!affecting) - visible_message("\The [O] misses [src] narrowly!") - return - - var/hit_area = affecting.name - var/datum/wound/created_wound - - src.visible_message("\The [src] has been hit in the [hit_area] by \the [O].") - created_wound = apply_damage(throw_damage, dtype, zone, O.damage_flags(), O, O.armor_penetration) - - if(TT.thrower) - var/client/assailant = TT.thrower.client - if(assailant) - admin_attack_log(TT.thrower, src, "Threw \an [O] at their victim.", "Had \an [O] thrown at them", "threw \an [O] at") - - //thrown weapon embedded object code. - if (dtype == DAMAGE_BRUTE && istype(O,/obj/item)) - var/obj/item/I = O - if (!is_robot_module(I)) - var/sharp = I.can_embed() - var/damage = throw_damage //the effective damage used for embedding purposes, no actual damage is dealt here - damage *= (1 - get_blocked_ratio(zone, DAMAGE_BRUTE, O.damage_flags(), O.armor_penetration, throw_damage)) - - //blunt objects should really not be embedding in things unless a huge amount of force is involved - var/embed_chance = sharp? damage/I.w_class : damage/(I.w_class*3) - var/embed_threshold = sharp? 5*I.w_class : 15*I.w_class - - //Sharp objects will always embed if they do enough damage. - //Thrown sharp objects have some momentum already and have a small chance to embed even if the damage is below the threshold - if((sharp && prob(damage/(10*I.w_class)*100)) || (damage > embed_threshold && prob(embed_chance))) - affecting.embed(I, supplied_wound = created_wound) - I.has_embedded() - - // Begin BS12 momentum-transfer code. - var/mass = 1.5 - if(istype(O, /obj/item)) - var/obj/item/I = O - mass = I.w_class/THROWNOBJ_KNOCKBACK_DIVISOR - var/momentum = TT.speed*mass - - if(momentum >= THROWNOBJ_KNOCKBACK_SPEED) - var/dir = TT.init_dir - - visible_message("\The [src] staggers under the impact!","You stagger under the impact!") - - if(!src.isinspace()) - src.throw_at(get_edge_target_turf(src,dir),1,momentum - THROWNOBJ_KNOCKBACK_SPEED) - - if(!O || !src) return - - if(O.loc == src && O.sharp && !(mob_flags & MOB_FLAG_UNPINNABLE)) //Projectile is embedded and suitable for pinning. - var/turf/T = near_wall(dir,2) - - if(T) - src.forceMove(T) - visible_message("[src] is pinned to the wall by [O]!","You are pinned to the wall by [O]!") - src.anchored = TRUE - src.pinned += O - else - ..() - -/mob/living/carbon/human/embed(var/obj/O, var/def_zone=null, var/datum/wound/supplied_wound) - if(!def_zone) ..() - - var/obj/item/organ/external/affecting = get_organ(def_zone) - if(affecting) - affecting.embed(O, supplied_wound = supplied_wound) - -/mob/living/carbon/human/proc/bloody_hands(var/mob/living/source, var/amount = 2) - var/obj/item/clothing/gloves/gloves = get_equipped_item(slot_gloves) - if(istype(gloves)) - gloves.add_blood(source) - gloves.transfer_blood = amount - gloves.bloody_hands_mob = source - else - add_blood(source) - bloody_hands = amount - bloody_hands_mob = source - update_inv_gloves() //updates on-mob overlays for bloody hands and/or bloody gloves - -/mob/living/carbon/human/proc/bloody_body(var/mob/living/source) - if(wear_suit) - wear_suit.add_blood(source) - update_inv_wear_suit(0) - if(w_uniform) - w_uniform.add_blood(source) - update_inv_w_uniform(0) - -/mob/living/carbon/human/proc/handle_suit_punctures(var/damtype, var/damage, var/def_zone) - - // Tox and oxy don't matter to suits. - if (damtype != DAMAGE_BURN && damtype != DAMAGE_BRUTE) - return - - // The rig might soak this hit, if we're wearing one. - if(back && istype(back,/obj/item/rig)) - var/obj/item/rig/rig = back - rig.take_hit(damage) - - // We may also be taking a suit breach. - if(!wear_suit) return - if(!istype(wear_suit,/obj/item/clothing/suit/space)) return - var/obj/item/clothing/suit/space/SS = wear_suit - SS.create_breaches(damtype, damage) - -/mob/living/carbon/human/reagent_permeability() - var/perm = 0 - - var/list/perm_by_part = list( - "head" = THERMAL_PROTECTION_HEAD, - "upper_torso" = THERMAL_PROTECTION_UPPER_TORSO, - "lower_torso" = THERMAL_PROTECTION_LOWER_TORSO, - "legs" = THERMAL_PROTECTION_LEG_LEFT + THERMAL_PROTECTION_LEG_RIGHT, - "feet" = THERMAL_PROTECTION_FOOT_LEFT + THERMAL_PROTECTION_FOOT_RIGHT, - "arms" = THERMAL_PROTECTION_ARM_LEFT + THERMAL_PROTECTION_ARM_RIGHT, - "hands" = THERMAL_PROTECTION_HAND_LEFT + THERMAL_PROTECTION_HAND_RIGHT - ) - - for(var/obj/item/clothing/C in src.get_equipped_items()) - if(C.permeability_coefficient == 1 || !C.body_parts_covered) - continue - if(C.body_parts_covered & HEAD) - perm_by_part["head"] *= C.permeability_coefficient - if(C.body_parts_covered & UPPER_TORSO) - perm_by_part["upper_torso"] *= C.permeability_coefficient - if(C.body_parts_covered & LOWER_TORSO) - perm_by_part["lower_torso"] *= C.permeability_coefficient - if(C.body_parts_covered & LEGS) - perm_by_part["legs"] *= C.permeability_coefficient - if(C.body_parts_covered & FEET) - perm_by_part["feet"] *= C.permeability_coefficient - if(C.body_parts_covered & ARMS) - perm_by_part["arms"] *= C.permeability_coefficient - if(C.body_parts_covered & HANDS) - perm_by_part["hands"] *= C.permeability_coefficient - - for(var/part in perm_by_part) - perm += perm_by_part[part] - - return perm - -/mob/living/carbon/human/lava_act(datum/gas_mixture/air, temperature, pressure) - if (status_flags & GODMODE) - return - var/was_burned = FireBurn(0.4 * vsc.fire_firelevel_multiplier, temperature, pressure) - if (was_burned) - fire_act(air, temperature) - return FALSE diff --git a/code/modules/mob/living/carbon/human/human_defines.dm b/code/modules/mob/living/carbon/human/human_defines.dm deleted file mode 100644 index 2d3e9226d637f..0000000000000 --- a/code/modules/mob/living/carbon/human/human_defines.dm +++ /dev/null @@ -1,108 +0,0 @@ -/mob/living/carbon/human - mob_bump_flag = HUMAN - mob_push_flags = ~HEAVY - mob_swap_flags = ~HEAVY - - /// The style of head hair applied to this mob - var/head_hair_style = "Bald" - - /// The color of head hair applied to this mob - var/head_hair_color = "#000000" - - /// The style of facial hair applied to this mob - var/facial_hair_style = "Shaved" - - /// The color of facial hair applied to this mob - var/facial_hair_color = "#000000" - - /// The color that will be used for the eyes of this mob - var/eye_color = "#000000" - - /// The skin color that will be applied to this mob if it does not use a tone - var/skin_color = "#000000" - - /// The skin tone scale that will be applied to this mob if it does not use a color - var/skin_tone = 0 - - /// The base icon that will be used for this mob if it allows more than one - var/base_skin = "" - - /// The style of makeup applied to this mob - var/makeup_style - - var/age = 30 //Player's age (pure fluff) - var/b_type = "A+" //Player's bloodtype - - /// The amount this mob's age has been changed in the round, if it has - var/changed_age = 0 - - var/list/worn_underwear = list() - - var/datum/backpack_setup/backpack_setup - - var/list/cultural_info = list() - - //Equipment slots - var/obj/item/wear_suit - var/obj/item/w_uniform - var/obj/item/shoes - var/obj/item/belt - var/obj/item/gloves - var/obj/item/glasses - var/obj/item/head - var/obj/item/l_ear - var/obj/item/r_ear - var/obj/item/wear_id - var/obj/item/r_store - var/obj/item/l_store - var/obj/item/s_store - - var/icon/stand_icon - var/icon/lying_icon - - var/voice = "" //Instead of new say code calling GetVoice() over and over and over, we're just going to ask this variable, which gets updated in Life() - - var/last_dam = -1 //Used for determining if we need to process all organs or just some or even none. - var/list/bad_external_organs = list()// organs we check until they are good. - - var/xylophone = 0 //For the spoooooooky xylophone cooldown - - var/mob/remoteview_target - var/hand_blood_color - - var/list/flavor_texts = list() - var/pulling_punches // Are you trying not to hurt your opponent? - var/full_prosthetic // We are a robutt. - var/robolimb_count = 0 // Number of robot limbs. - var/last_attack = 0 // The world_time where an unarmed attack was done - - var/flash_protection = 0 // Total level of flash protection - var/equipment_tint_total = 0 // Total level of visualy impairing items - var/equipment_darkness_modifier // Darkvision modifier from equipped items - var/equipment_vision_flags // Extra vision flags from equipped items - var/equipment_see_invis // Max see invibility level granted by equipped items - var/equipment_prescription // Eye prescription granted by equipped items - var/equipment_light_protection - var/list/equipment_overlays = list() // Extra overlays from equipped items - - var/public_record = "" - var/med_record = "" - var/sec_record = "" - var/gen_record = "" - var/exploit_record = "" - - var/datum/mil_branch/char_branch - var/datum/mil_rank/char_rank - - var/stance_damage = 0 //Whether this mob's ability to stand has been affected - - var/datum/unarmed_attack/default_attack //default unarmed attack - - var/obj/machinery/machine_visual //machine that is currently applying visual effects to this mob. Only used for camera monitors currently. - var/shock_stage - - var/obj/item/grab/current_grab_type // What type of grab they use when they grab someone. - - var/list/descriptors - - var/last_smelt = 0 diff --git a/code/modules/mob/living/carbon/human/human_helpers.dm b/code/modules/mob/living/carbon/human/human_helpers.dm deleted file mode 100644 index 7460bfb3c9dd5..0000000000000 --- a/code/modules/mob/living/carbon/human/human_helpers.dm +++ /dev/null @@ -1,359 +0,0 @@ -#define HUMAN_EATING_NO_ISSUE 0 -#define HUMAN_EATING_NBP_MOUTH 1 -#define HUMAN_EATING_BLOCKED_MOUTH 2 - -#define add_clothing_protection(A) \ - var/obj/item/clothing/C = A; \ - flash_protection += C.flash_protection; \ - equipment_tint_total += C.tint; - -/mob/living/carbon/human/can_eat(var/food, var/feedback = 1) - var/list/status = can_eat_status() - if(status[1] == HUMAN_EATING_NO_ISSUE) - return 1 - if(feedback) - if(status[1] == HUMAN_EATING_NBP_MOUTH) - to_chat(src, "Where do you intend to put \the [food]? You don't have a mouth!") - else if(status[1] == HUMAN_EATING_BLOCKED_MOUTH) - to_chat(src, "\The [status[2]] is in the way!") - return 0 - -/mob/living/carbon/human/can_force_feed(var/feeder, var/food, var/feedback = 1) - var/list/status = can_eat_status() - if(status[1] == HUMAN_EATING_NO_ISSUE) - return 1 - if(feedback) - if(status[1] == HUMAN_EATING_NBP_MOUTH) - to_chat(feeder, "Where do you intend to put \the [food]? \The [src] doesn't have a mouth!") - else if(status[1] == HUMAN_EATING_BLOCKED_MOUTH) - to_chat(feeder, "\The [status[2]] is in the way!") - return 0 - -/mob/living/carbon/human/proc/can_eat_status() - if(!check_has_mouth()) - return list(HUMAN_EATING_NBP_MOUTH) - var/obj/item/blocked = check_mouth_coverage() - if(blocked) - return list(HUMAN_EATING_BLOCKED_MOUTH, blocked) - return list(HUMAN_EATING_NO_ISSUE) - -#undef HUMAN_EATING_NO_ISSUE -#undef HUMAN_EATING_NBP_MOUTH -#undef HUMAN_EATING_BLOCKED_MOUTH - -/mob/living/carbon/human/proc/update_equipment_vision() - flash_protection = 0 - equipment_tint_total = 0 - equipment_see_invis = 0 - equipment_vision_flags = 0 - equipment_prescription = 0 - equipment_light_protection = 0 - equipment_darkness_modifier = 0 - equipment_overlays.Cut() - - if(istype(glasses, /obj/item/clothing/glasses)) - process_prescription(glasses) - - var/binoc_check - if(client) - binoc_check = client.view == world.view - else - binoc_check = TRUE - - if ((!client || client.eye == src || client.eye == loc || client.eye == z_eye) && binoc_check) // !client is so the unit tests function - if(istype(src.head, /obj/item/clothing/head)) - add_clothing_protection(head) - if(istype(src.glasses, /obj/item/clothing/glasses)) - process_glasses(glasses) - if(istype(src.wear_mask, /obj/item/clothing/mask)) - add_clothing_protection(wear_mask) - if(istype(back,/obj/item/rig)) - process_rig(back) - -/mob/living/carbon/human/proc/process_prescription(var/obj/item/clothing/glasses/G) - if(G) - equipment_prescription += G.prescription - -/mob/living/carbon/human/proc/process_glasses(var/obj/item/clothing/glasses/G) - if(G?.active) - equipment_darkness_modifier += G.darkness_view - equipment_vision_flags |= G.vision_flags - equipment_light_protection += G.light_protection - if(G.overlay) - equipment_overlays |= G.overlay - if(G.see_invisible >= 0) - if(equipment_see_invis) - equipment_see_invis = min(equipment_see_invis, G.see_invisible) - else - equipment_see_invis = G.see_invisible - - add_clothing_protection(G) - G.process_hud(src) - -/mob/living/carbon/human/proc/process_rig(var/obj/item/rig/O) - if(O.visor && O.visor.active && O.visor.vision && O.visor.vision.glasses && (!O.helmet || (head && O.helmet == head))) - process_glasses(O.visor.vision.glasses) - -/mob/living/carbon/human/get_gender() - return gender - -/mob/living/carbon/human/fully_replace_character_name(var/new_name, var/in_depth = TRUE) - var/old_name = real_name - . = ..() - if(!. || !in_depth) - return - - var/datum/computer_file/report/crew_record/R = get_crewmember_record(old_name) - if(R) - R.set_name(new_name) - - //update our pda and id if we have them on our person - var/list/searching = GetAllContents(searchDepth = 3) - var/search_id = 1 - var/search_pda = 1 - - for(var/A in searching) - if(search_id && istype(A,/obj/item/card/id)) - var/obj/item/card/id/ID = A - if(ID.registered_name == old_name) - ID.registered_name = new_name - search_id = 0 - else if(search_pda && istype(A,/obj/item/modular_computer/pda)) - var/obj/item/modular_computer/pda/PDA = A - if(findtext(PDA.name, old_name)) - PDA.SetName(replacetext_char(PDA.name, old_name, new_name)) - search_pda = 0 - - if(wearing_rig && wearing_rig.update_visible_name) - wearing_rig.visible_name = real_name - - -//Get species or synthetic temp if the mob is a FBP. Used when a synthetic type human mob is exposed to a temp check. -//Essentially, used when a synthetic human mob should act diffferently than a normal type mob. -/mob/living/carbon/human/proc/getSpeciesOrSynthTemp(var/temptype) - switch(temptype) - if(COLD_LEVEL_1) - return isSynthetic()? SYNTH_COLD_LEVEL_1 : species.cold_level_1 - if(COLD_LEVEL_2) - return isSynthetic()? SYNTH_COLD_LEVEL_2 : species.cold_level_2 - if(COLD_LEVEL_3) - return isSynthetic()? SYNTH_COLD_LEVEL_3 : species.cold_level_3 - if(HEAT_LEVEL_1) - return isSynthetic()? SYNTH_HEAT_LEVEL_1 : species.heat_level_1 - if(HEAT_LEVEL_2) - return isSynthetic()? SYNTH_HEAT_LEVEL_2 : species.heat_level_2 - if(HEAT_LEVEL_3) - return isSynthetic()? SYNTH_HEAT_LEVEL_3 : species.heat_level_3 - -/mob/living/carbon/human/proc/getCryogenicFactor(var/bodytemperature) - if(isSynthetic()) - return 0 - if(!species) - return 0 - - if(bodytemperature > species.cold_level_1) - return 0 - else if(bodytemperature > species.cold_level_2) - . = 5 * (1 - (bodytemperature - species.cold_level_2) / (species.cold_level_1 - species.cold_level_2)) - . = max(2, .) - else if(bodytemperature > species.cold_level_3) - . = 20 * (1 - (bodytemperature - species.cold_level_3) / (species.cold_level_2 - species.cold_level_3)) - . = max(5, .) - else - . = 80 * (1 - bodytemperature / species.cold_level_3) - . = max(20, .) - return round(.) - -/mob/living/carbon/human - var/next_sonar_ping = 0 - -/mob/living/carbon/human/proc/sonar_ping() - set name = "Listen In" - set desc = "Allows you to listen in to movement and noises around you." - set category = "IC" - - if(incapacitated()) - to_chat(src, "You need to recover before you can use this ability.") - return - if(world.time < next_sonar_ping) - to_chat(src, "You need another moment to focus.") - return - if(is_deaf() || is_below_sound_pressure(get_turf(src))) - to_chat(src, "You are for all intents and purposes currently deaf!") - return - next_sonar_ping += 10 SECONDS - var/heard_something = FALSE - to_chat(src, "You take a moment to listen in to your environment...") - for(var/mob/living/L in range(client.view, src)) - var/turf/T = get_turf(L) - if(!T || L == src || L.stat == DEAD || is_below_sound_pressure(T)) - continue - heard_something = TRUE - var/image/ping_image = image(icon = 'icons/effects/effects.dmi', icon_state = "sonar_ping", loc = src) - ping_image.plane = EFFECTS_ABOVE_LIGHTING_PLANE - ping_image.layer = BEAM_PROJECTILE_LAYER - ping_image.pixel_x = (T.x - src.x) * WORLD_ICON_SIZE - ping_image.pixel_y = (T.y - src.y) * WORLD_ICON_SIZE - image_to(src, ping_image) - spawn(8) - qdel(ping_image) - var/feedback = list("There are noises of movement ") - var/direction = get_dir(src, L) - if(direction) - feedback += "towards the [dir2text(direction)], " - switch(get_dist(src, L) / client.view) - if(0 to 0.2) - feedback += "very close by." - if(0.2 to 0.4) - feedback += "close by." - if(0.4 to 0.6) - feedback += "some distance away." - if(0.6 to 0.8) - feedback += "further away." - else - feedback += "far away." - else // No need to check distance if they're standing right on-top of us - feedback += "right on top of you." - feedback += "" - to_chat(src, jointext(feedback,null)) - if(!heard_something) - to_chat(src, "You hear no movement but your own.") - -/mob/living/carbon/human/reset_layer() - if(hiding) - layer = HIDING_MOB_LAYER - else if(lying) - layer = LYING_HUMAN_LAYER - else - ..() - -/mob/living/carbon/human/proc/has_headset_in_ears() - return istype(get_equipped_item(slot_l_ear), /obj/item/device/radio/headset) || istype(get_equipped_item(slot_r_ear), /obj/item/device/radio/headset) - -/mob/living/carbon/human/welding_eyecheck() - var/obj/item/organ/internal/eyes/E = src.internal_organs_by_name[species.vision_organ] - if(!E) - return - var/safety = eyecheck() - switch(safety) - if(FLASH_PROTECTION_MODERATE) - to_chat(src, "Your eyes sting a little.") - E.damage += rand(1, 2) - if(E.damage > 12) - eye_blurry += rand(3,6) - if(FLASH_PROTECTION_MINOR) - to_chat(src, "Your eyes stings!") - E.damage += rand(1, 4) - if(E.damage > 10) - eye_blurry += rand(3,6) - E.damage += rand(1, 4) - if(FLASH_PROTECTION_NONE) - to_chat(src, "Your eyes burn!") - E.damage += rand(2, 4) - if(E.damage > 10) - E.damage += rand(4,10) - if(FLASH_PROTECTION_REDUCED) - to_chat(src, "Your equipment intensifies the welder's glow. Your eyes itch and burn severely.") - eye_blurry += rand(12,20) - E.damage += rand(12, 16) - if(safety 10) - to_chat(src, "Your eyes are really starting to hurt. This can't be good for you!") - if (E.damage >= E.min_bruised_damage) - to_chat(src, "You go blind!") - eye_blind = 5 - eye_blurry = 5 - disabilities |= NEARSIGHTED - spawn(100) - disabilities &= ~NEARSIGHTED - -/mob/living/carbon/human/proc/make_grab(var/mob/living/carbon/human/attacker, var/mob/living/carbon/human/victim, var/grab_tag) - var/obj/item/grab/G - if(!grab_tag) - G = new attacker.current_grab_type(attacker, victim) - else - var/obj/item/grab/given_grab_type = all_grabobjects[grab_tag] - G = new given_grab_type(attacker, victim) - if(QDELETED(G)) - return 0 - return 1 - -/mob/living/carbon/human - var/list/cloaking_sources - -// Returns true if, and only if, the human has gone from uncloaked to cloaked -/mob/living/carbon/human/proc/add_cloaking_source(var/datum/cloaking_source) - var/has_uncloaked = clean_cloaking_sources() - LAZYDISTINCTADD(cloaking_sources, weakref(cloaking_source)) - - // We don't present the cloaking message if the human was already cloaked just before cleanup. - if(!has_uncloaked && LAZYLEN(cloaking_sources) == 1) - update_icons() - src.visible_message("\The [src] seems to disappear before your eyes!", "You feel completely invisible.") - return TRUE - return FALSE - -#define CLOAK_APPEAR_OTHER "\The [src] appears from thin air!" -#define CLOAK_APPEAR_SELF "You have re-appeared." - -// Returns true if, and only if, the human has gone from cloaked to uncloaked -/mob/living/carbon/human/proc/remove_cloaking_source(var/datum/cloaking_source) - var/was_cloaked = LAZYLEN(cloaking_sources) - clean_cloaking_sources() - LAZYREMOVE(cloaking_sources, weakref(cloaking_source)) - - if(was_cloaked && !LAZYLEN(cloaking_sources)) - update_icons() - visible_message(CLOAK_APPEAR_OTHER, CLOAK_APPEAR_SELF) - return TRUE - return FALSE - -// Returns true if the human is cloaked, otherwise false (technically returns the number of cloaking sources) -/mob/proc/is_cloaked() - return FALSE - -/mob/living/carbon/human/is_cloaked() - if(clean_cloaking_sources()) - update_icons() - visible_message(CLOAK_APPEAR_OTHER, CLOAK_APPEAR_SELF) - return LAZYLEN(cloaking_sources) - -#undef CLOAK_APPEAR_OTHER -#undef CLOAK_APPEAR_SELF - -// Returns true if the human is cloaked by the given source -/mob/living/carbon/human/proc/is_cloaked_by(var/cloaking_source) - return LAZYISIN(cloaking_sources, weakref(cloaking_source)) - -// Returns true if this operation caused the mob to go from cloaked to uncloaked -/mob/living/carbon/human/proc/clean_cloaking_sources() - if(!cloaking_sources) - return FALSE - - var/list/rogue_entries = list() - for(var/entry in cloaking_sources) - var/weakref/W = entry - if(!W.resolve()) - cloaking_sources -= W - rogue_entries += W - - if(rogue_entries.len) // These entries did not cleanup after themselves before being destroyed - var/rogue_entries_as_string = jointext(map(rogue_entries, /proc/log_info_line), ", ") - crash_with("[log_info_line(src)] - Following cloaking entries were removed during cleanup: [rogue_entries_as_string]") - - UNSETEMPTY(cloaking_sources) - return !cloaking_sources // If cloaking_sources wasn't initially null but is now, we've uncloaked - -/mob/living/carbon/human/set_sdisability(sdisability) - if(isSynthetic()) - return // Can't cure disabilites, so don't give them. - ..() - -/mob/living/carbon/human/proc/has_meson_effect() - . = FALSE - for(var/obj/screen/equipment_screen in equipment_overlays) // check through our overlays to see if we have any source of the meson overlay - if (equipment_screen.icon_state == "meson_hud") - return TRUE - -/mob/living/carbon/human/proc/is_in_pocket(var/obj/item/I) - return I in list(l_store, r_store) diff --git a/code/modules/mob/living/carbon/human/human_interactions.dm b/code/modules/mob/living/carbon/human/human_interactions.dm deleted file mode 100644 index f11f47b652fc1..0000000000000 --- a/code/modules/mob/living/carbon/human/human_interactions.dm +++ /dev/null @@ -1,193 +0,0 @@ -/mob/living/carbon/human/Topic(href, href_list) - ///////Interactions!!/////// - if(href_list["interaction"]) - if (usr.stat == DEAD || usr.stat == UNCONSCIOUS || usr.restrained()) - return - - //CONDITIONS - var/mob/living/carbon/human/H = usr - var/mob/living/carbon/human/P = H.partner - if (!(P in view(H.loc))) - return - var/obj/item/organ/external/temp = H.organs_by_name["r_hand"] - var/hashands = (temp?.is_usable()) - if (!hashands) - temp = H.organs_by_name["l_hand"] - hashands = (temp?.is_usable()) - temp = P.organs_by_name["r_hand"] - var/hashands_p = (temp?.is_usable()) - if (!hashands_p) - temp = P.organs_by_name["l_hand"] - hashands = (temp?.is_usable()) - var/mouthfree = !((H.head && (H.check_mouth_coverage())) || (H.wear_mask && (H.check_mouth_coverage()))) - var/mouthfree_p = !((P.head && (P.check_mouth_coverage())) || (P.wear_mask && (P.check_mouth_coverage()))) - - if(world.time <= H.last_attack + 1 SECONDS) - return - else - H.last_attack = world.time - - if (href_list["interaction"] == "bow") - H.visible_message("[H] кланяется [P].") - if (istype(P.loc, /obj/structure/closet) && P.loc == H.loc) - P.visible_message("[H] кланяется [P].") - - else if (href_list["interaction"] == "pet") - if(((!istype(P.loc, /obj/structure/closet)) || (H.loc == P.loc)) && hashands && H.Adjacent(P)) - H.visible_message("[H] [pick("гладит", "поглаживает")] [P].") - if (istype(P.loc, /obj/structure/closet)) - P.visible_message("[H] [pick("гладит", "поглаживает")] [P].") - - else if (href_list["interaction"] == "scratch") - if(((!istype(P.loc, /obj/structure/closet)) || (H.loc == P.loc)) && hashands && H.Adjacent(P)) - if(H.zone_sel.selecting == BP_HEAD && !((P.species.name == SPECIES_YEOSA) || (P.species.name == SPECIES_UNATHI))) - H.visible_message("[H] [pick("чешет за ухом", "чешет голову")] [P].") - if (istype(P.loc, /obj/structure/closet)) - P.visible_message("[H] [pick("чешет за ухом", "чешет голову")] [P].") - else - H.visible_message("[H] [pick("чешет")] [P].") - if (istype(P.loc, /obj/structure/closet)) - P.visible_message("[H] [pick("чешет")] [P].") - - else if (href_list["interaction"] == "give") - if(H.Adjacent(P)) - if (((!istype(P.loc, /obj/structure/closet)) || (H.loc == P.loc)) && hashands) - H.give(P) - - else if (href_list["interaction"] == "kiss") - if( ((H.Adjacent(P) && !istype(P.loc, /obj/structure/closet)) || (H.loc == P.loc))) - H.visible_message("[H] целует [P].") - if (istype(P.loc, /obj/structure/closet)) - P.visible_message("[H] целует [P].") - else if (mouthfree) - H.visible_message("[H] посылает [P] воздушный поцелуй.") - - else if (href_list["interaction"] == "lick") - if( ((H.Adjacent(P) && !istype(P.loc, /obj/structure/closet)) || (H.loc == P.loc)) && mouthfree && mouthfree_p) - if (prob(90)) - H.visible_message("[H] [H.gender == FEMALE ? "лизнула" : "лизнул"] [P] в щеку.") - if (istype(P.loc, /obj/structure/closet)) - P.visible_message("[H] [H.gender == FEMALE ? "лизнула" : "лизнул"] [P] в щеку.") - else - H.visible_message("[H] особо тщательно [H.gender == FEMALE ? "лизнула" : "лизнул"] [P].") - if (istype(P.loc, /obj/structure/closet)) - P.visible_message("[H] особо тщательно [H.gender == FEMALE ? "лизнула" : "лизнул"] [P].") - - else if (href_list["interaction"] == "hug") - if(((H.Adjacent(P) && !istype(P.loc, /obj/structure/closet)) || (H.loc == P.loc)) && hashands) - H.visible_message("[H] обнимает [P].") - if (istype(P.loc, /obj/structure/closet)) - P.visible_message("[H] обнимает [P].") - playsound(loc, 'sound/interactions/hug.ogg', 50, 1, -1) - - else if (href_list["interaction"] == "cheer") - if(((H.Adjacent(P) && !istype(P.loc, /obj/structure/closet)) || (H.loc == P.loc)) && hashands) - H.visible_message("[H] похлопывает [P] по плечу.") - if (istype(P.loc, /obj/structure/closet)) - P.visible_message("[H] похлопывает [P] по плечу.") - - else if (href_list["interaction"] == "five") - if(((H.Adjacent(P) && !istype(P.loc, /obj/structure/closet)) || (H.loc == P.loc)) && hashands) - H.visible_message("[H] даёт [P] пять.") - if (istype(P.loc, /obj/structure/closet)) - P.visible_message("[H] даёт [P] пять.") - playsound(loc, 'sound/interactions/slap.ogg', 50, 1, -1) - - else if (href_list["interaction"] == "handshake") - if(((H.Adjacent(P) && !istype(P.loc, /obj/structure/closet)) || (H.loc == P.loc)) && hashands && hashands_p) - H.visible_message("[H] жмёт руку [P].") - if (istype(P.loc, /obj/structure/closet)) - P.visible_message("[H] жмёт руку [P].") - - else if (href_list["interaction"] == "bow_affably") - H.visible_message("[H] приветливо кивнул[H.gender == FEMALE ? "а" : ""] в сторону [P].") - if (istype(P.loc, /obj/structure/closet)) - P.visible_message("[H] приветливо кивнул[H.gender == FEMALE ? "а" : ""] в сторону [P].") - - else if (href_list["interaction"] == "wave") - if (!(H.Adjacent(P)) && hashands) - H.visible_message("[H] приветливо машет [P].") - else - H.visible_message("[H] приветливо кивнул[H.gender == FEMALE ? "а" : ""] в сторону [P].") - - - else if (href_list["interaction"] == "slap") - if(((H.Adjacent(P) && !istype(P.loc, /obj/structure/closet)) || (H.loc == P.loc)) && hashands) - switch(H.zone_sel.selecting) - if(BP_HEAD) - H.visible_message("[H] дает [P] пощечину!") - if (istype(P.loc, /obj/structure/closet)) - P.visible_message("[H] дает [P] пощечину!") - playsound(loc, 'sound/interactions/slap.ogg', 50, 1, -1) - var/obj/item/organ/external/head/O = P.get_organ(BP_HEAD) - if(O.pain <= 2) - O.add_pain(10) - H.do_attack_animation(P) - - if(BP_MOUTH) - H.visible_message("[H] дает [P] по губе!") - if (istype(P.loc, /obj/structure/closet)) - P.visible_message("[H] дает [P] по губе!") - playsound(loc, 'sound/interactions/slap.ogg', 50, 1, -1) - H.do_attack_animation(P) - - else if (href_list["interaction"] == "slapass") - if(((H.Adjacent(P) && !istype(P.loc, /obj/structure/closet)) || (H.loc == P.loc)) && hashands) - H.visible_message("[H] шлёпает [P] по заднице!") - if (istype(P.loc, /obj/structure/closet)) - P.visible_message("[H] шлёпает [P] по заднице!") - playsound(loc, 'sound/interactions/slap.ogg', 50, 1, -1) - var/obj/item/organ/external/groin/G = P.get_organ(BP_GROIN) - if(G.pain <= 2) - G.add_pain(5) - H.do_attack_animation(P) - - else if (href_list["interaction"] == "fuckyou") - if(hashands) - H.visible_message("[H] показывает [P] средний палец!") - if (istype(P.loc, /obj/structure/closet) && P.loc == H.loc) - P.visible_message("[H] показывает [P] средний палец!") - - else if (href_list["interaction"] == "knock") - if(((H.Adjacent(P) && !istype(P.loc, /obj/structure/closet)) || (H.loc == P.loc)) && hashands) - H.visible_message("[H] дает [P] подзатыльник!") - if (istype(P.loc, /obj/structure/closet)) - P.visible_message("[H] дает [P] подзатыльник!") - playsound(loc, 'sound/weapons/throwtap.ogg', 50, 1, -1) - var/obj/item/organ/external/head/O = P.get_organ(BP_HEAD) - if(O.pain <= 2) - O.add_pain(5) - H.do_attack_animation(P) - - else if (href_list["interaction"] == "spit") - if(((H.Adjacent(P) && !istype(P.loc, /obj/structure/closet)) || (H.loc == P.loc)) && mouthfree) - H.visible_message("[H] плюёт в [P]!") - if (istype(P.loc, /obj/structure/closet)) - P.visible_message("[H] плюёт в [P]!") - - else if (href_list["interaction"] == "threaten") - if(hashands) - H.visible_message("[H] грозит [P] кулаком!") - if (istype(P.loc, /obj/structure/closet) && H.loc == P.loc) - P.visible_message("[H] грозит [P] кулаком!") - - else if (href_list["interaction"] == "tongue") - if(mouthfree) - H.visible_message("[H] показывает [P] язык!") - if (istype(P.loc, /obj/structure/closet) && H.loc == P.loc) - P.visible_message("[H] показывает [P] язык!") - - else if (href_list["interaction"] == "pull") - if(((H.Adjacent(P) && !istype(P.loc, /obj/structure/closet)) || (H.loc == P.loc)) && hashands && !H.restrained()) - if (prob(30)) - H.visible_message("[H] дёргает [P] за хвост!") - var/obj/item/organ/external/groin/O = P.get_organ(BP_GROIN) - if(O.pain <= 3) - O.add_pain(4) - if (istype(P.loc, /obj/structure/closet)) - P.visible_message("[H] дёргает [P] за хвост!") - else - H.visible_message("[H] пытается поймать [P] за хвост!") - if (istype(P.loc, /obj/structure/closet)) - P.visible_message("[H] пытается поймать [P] за хвост!") - ..() diff --git a/code/modules/mob/living/carbon/human/human_maneuvers.dm b/code/modules/mob/living/carbon/human/human_maneuvers.dm deleted file mode 100644 index 1d053ed965e79..0000000000000 --- a/code/modules/mob/living/carbon/human/human_maneuvers.dm +++ /dev/null @@ -1,56 +0,0 @@ -/mob/living/carbon/human/get_acrobatics_multiplier(var/decl/maneuver/attempting_maneuver) - . = ..() * 0.5 - - . += ((get_skill_value(SKILL_HAULING) - SKILL_MIN)/(SKILL_MAX - SKILL_MIN)) - //Perhaps one day this should grab logic from organs directly - var/obj/item/organ/internal/augment/boost/muscle/aug = internal_organs_by_name["[BP_R_LEG]_aug"] - if(istype(aug)) - . += aug.get_acrobatics_modifier() - - // Broken limb checks - for (var/_limb in BP_LEGS_FEET) - var/obj/item/organ/external/limb = get_organ(_limb) - if (limb.status & ORGAN_BROKEN) - . -= limb.splinted ? 0.25 : 0.5 - - -/mob/living/carbon/human/get_jump_distance() - return species.standing_jump_range - -/mob/living/carbon/human/can_do_maneuver(var/decl/maneuver/maneuver, var/silent = FALSE) - . = ..() - if(.) - if(nutrition <= 20) - if(!silent) - to_chat(src, SPAN_WARNING("You are too hungry to jump around.")) - return FALSE - if(hydration <= 20) - if(!silent) - to_chat(src, SPAN_WARNING("You are too thirsty to jump around.")) - return FALSE - - -/mob/living/carbon/human/post_maneuver() - ..() - - var/broken_limb_fail_chance = 0 - var/list/broken_limbs = list() - for (var/_limb in BP_LEGS_FEET) - var/obj/item/organ/external/limb = get_organ(_limb) - if (limb.status & ORGAN_BROKEN) - broken_limbs += limb - broken_limb_fail_chance += limb.splinted ? 25 : 50 - if (broken_limb_fail_chance) - var/obj/item/organ/external/limb = pick(broken_limbs) - if (prob(broken_limb_fail_chance)) - visible_message( - SPAN_WARNING("\The [src]'s [limb.name] buckles beneath them as they land!"), - SPAN_DANGER("Your [limb.name] buckles beneath you as you land!") - ) - apply_effect(1, EFFECT_WEAKEN) - limb.add_pain(30) - limb.take_external_damage(5) - else - to_chat(src, SPAN_DANGER("You feel a sharp pain through your [limb.name] as you land!")) - apply_effect(1, EFFECT_STUN) - limb.add_pain(15) diff --git a/code/modules/mob/living/carbon/human/human_movement.dm b/code/modules/mob/living/carbon/human/human_movement.dm deleted file mode 100644 index bf192bd3018b9..0000000000000 --- a/code/modules/mob/living/carbon/human/human_movement.dm +++ /dev/null @@ -1,156 +0,0 @@ -/mob/living/carbon/human - move_intents = list(/decl/move_intent/walk) - -/mob/living/carbon/human/movement_delay() - var/tally = ..() - - var/obj/item/organ/external/H = get_organ(BP_GROIN) // gets species slowdown, which can be reset by robotize() - if(istype(H)) - tally += H.slowdown - - tally += species.handle_movement_delay_special(src) - - var/area/a = get_area(src) - if(a && !a.has_gravity()) - if(skill_check(SKILL_EVA, SKILL_PROF)) - tally -= 2 - tally -= 1 - - if(CE_SPEEDBOOST in chem_effects) - tally -= chem_effects[CE_SPEEDBOOST] - - if(CE_SLOWDOWN in chem_effects) - tally += chem_effects[CE_SLOWDOWN] - - var/health_deficiency = (maxHealth - health) - if(health_deficiency >= 40) tally += (health_deficiency / 25) - - if(can_feel_pain()) - if(get_shock() >= 10) tally += (get_shock() / 10) //pain shouldn't slow you down if you can't even feel it - - if(istype(buckled, /obj/structure/bed/chair/wheelchair)) - for(var/organ_name in list(BP_L_HAND, BP_R_HAND, BP_L_ARM, BP_R_ARM)) - var/obj/item/organ/external/E = get_organ(organ_name) - tally += E ? E.movement_delay(4) : 4 - else - var/total_item_slowdown = -1 - for(var/slot = slot_first to slot_last) - var/obj/item/I = get_equipped_item(slot) - if(istype(I)) - var/item_slowdown = 0 - item_slowdown += I.slowdown_general - item_slowdown += I.slowdown_per_slot[slot] - item_slowdown += I.slowdown_accessory - - if(item_slowdown >= 0) - var/size_mod = size_strength_mod() - if(size_mod + 1 > 0) - item_slowdown = item_slowdown / (size_mod + 1) - else - item_slowdown = item_slowdown - size_mod - total_item_slowdown += max(item_slowdown, 0) - tally += total_item_slowdown - - for(var/organ_name in list(BP_L_LEG, BP_R_LEG, BP_L_FOOT, BP_R_FOOT)) - var/obj/item/organ/external/E = get_organ(organ_name) - tally += E ? E.movement_delay(4) : 4 - - if(shock_stage >= 10 || get_stamina() <= 0) - tally += 3 - - if(is_asystole()) tally += 10 //heart attacks are kinda distracting - - if(aiming && aiming.aiming_at) tally += 5 // Iron sights make you slower, it's a well-known fact. - - if(MUTATION_FAT in src.mutations) - tally += 1.5 - if (bodytemperature < species.cold_discomfort_level) - tally += (species.cold_discomfort_level - bodytemperature) / 10 * 1.75 - - tally += max(2 * stance_damage, 0) //damaged/missing feet or legs is slow - - if(mRun in mutations) - tally = 0 - - return tally - -/mob/living/carbon/human/size_strength_mod() - . = ..() - . += species.strength - -/mob/living/carbon/human/Allow_Spacemove(var/check_drift = 0) - . = ..() - if(.) - return - - // This is horrible but short of spawning a jetpack inside the organ than locating - // it, I don't really see another viable approach short of a total jetpack refactor. - for(var/obj/item/organ/internal/powered/jets/jet in internal_organs) - if(!jet.is_broken() && jet.active) - inertia_dir = 0 - return 1 - // End 'eugh' - - //Do we have a working jetpack? - var/obj/item/tank/jetpack/thrust - if(back) - if(istype(back,/obj/item/tank/jetpack)) - thrust = back - else if(istype(back,/obj/item/rig)) - var/obj/item/rig/rig = back - for(var/obj/item/rig_module/maneuvering_jets/module in rig.installed_modules) - thrust = module.jets - break - - if(thrust && thrust.on) - if(prob(skill_fail_chance(SKILL_EVA, 10, SKILL_ADEPT))) - to_chat(src, "You fumble with [thrust] controls!") - inertia_dir = pick(GLOB.cardinal) - return 0 - - if(((!check_drift) || (check_drift && thrust.stabilization_on)) && (!lying) && (thrust.allow_thrust(0.01, src))) - inertia_dir = 0 - return 1 - -/mob/living/carbon/human/slip_chance(var/prob_slip = 5) - if(!..()) - return 0 - - //Check hands and mod slip - if(!l_hand) prob_slip -= 2 - else if(l_hand.w_class <= ITEM_SIZE_SMALL) prob_slip -= 1 - if (!r_hand) prob_slip -= 2 - else if(r_hand.w_class <= ITEM_SIZE_SMALL) prob_slip -= 1 - - return prob_slip - -/mob/living/carbon/human/Check_Shoegrip() - if(species.check_no_slip(src)) - return 1 - if(shoes && (shoes.item_flags & ITEM_FLAG_NOSLIP) && istype(shoes, /obj/item/clothing/shoes/magboots)) //magboots + dense_object = no floating - return 1 - return 0 - -/mob/living/carbon/human/Move() - . = ..() - if(.) //We moved - species.handle_exertion(src) - handle_leg_damage() - -/mob/living/carbon/human/proc/handle_leg_damage() - if(!can_feel_pain()) - return - var/crutches = 0 - for(var/obj/item/cane/C in list(l_hand, r_hand)) - if(istype(C)) - crutches++ - for(var/organ_name in list(BP_L_LEG, BP_R_LEG, BP_L_FOOT, BP_R_FOOT)) - var/obj/item/organ/external/E = get_organ(organ_name) - if(E && (E.is_dislocated() || E.is_broken())) - if(crutches) - crutches-- - else - E.add_pain(10) - -/mob/living/carbon/human/can_sprint() - return (stamina > 0) diff --git a/code/modules/mob/living/carbon/human/human_organs.dm b/code/modules/mob/living/carbon/human/human_organs.dm deleted file mode 100644 index ca8e4b3c37aca..0000000000000 --- a/code/modules/mob/living/carbon/human/human_organs.dm +++ /dev/null @@ -1,266 +0,0 @@ -/mob/living/carbon/human/proc/update_eyes() - var/obj/item/organ/internal/eyes/eyes = internal_organs_by_name[species.vision_organ ? species.vision_organ : BP_EYES] - if(eyes) - eyes.update_colour() - regenerate_icons() - -/mob/living/carbon/human/proc/get_bodypart_name(var/zone) - var/obj/item/organ/external/E = get_organ(zone) - if(E) . = E.name - -/mob/living/carbon/human/proc/recheck_bad_external_organs() - var/damage_this_tick = getToxLoss() - for(var/obj/item/organ/external/O in organs) - damage_this_tick += O.burn_dam + O.brute_dam - - if(damage_this_tick > last_dam) - . = TRUE - last_dam = damage_this_tick - -// Takes care of organ related updates, such as broken and missing limbs -/mob/living/carbon/human/proc/handle_organs() - - var/force_process = recheck_bad_external_organs() - - if(force_process) - bad_external_organs.Cut() - for(var/obj/item/organ/external/Ex in organs) - bad_external_organs |= Ex - - //processing internal organs is pretty cheap, do that first. - for(var/obj/item/organ/I in internal_organs) - I.Process() - - handle_stance() - handle_grasp() - - if(!force_process && !bad_external_organs.len) - return - - for(var/obj/item/organ/external/E in bad_external_organs) - if(!E) - continue - if(!E.need_process()) - bad_external_organs -= E - continue - else - E.Process() - - if (!lying && !buckled && world.time - l_move_time < 15) - //Moving around with fractured ribs won't do you any good - if (prob(10) && !stat && can_feel_pain() && chem_effects[CE_PAINKILLER] < 50 && E.is_broken() && E.internal_organs.len) - custom_pain("Pain jolts through your broken [E.encased ? E.encased : E.name], staggering you!", 50, affecting = E) - unequip_item(loc) - Stun(2) - - //Moving makes open wounds get infected much faster - for(var/datum/wound/W in E.wounds) - if (W.infection_check()) - W.germ_level += 1 - -/mob/living/carbon/human/proc/Check_Proppable_Object() - for(var/turf/simulated/T in trange(1,src)) //we only care for non-space turfs - if(T.density) //walls work - return 1 - - for(var/obj/O in orange(1, src)) - if(O && O.density && O.anchored) - return 1 - - return 0 - -/mob/living/carbon/human/proc/handle_stance() - // Don't need to process any of this if they aren't standing anyways - // unless their stance is damaged, and we want to check if they should stay down - if (!stance_damage && (lying || resting) && (life_tick % 4) != 0) - return - - stance_damage = 0 - - // Buckled to a bed/chair. Stance damage is forced to 0 since they're sitting on something solid - if (istype(buckled, /obj/structure/bed)) - return - - // Can't fall if nothing pulls you down - var/area/area = get_area(src) - if (!area || !area.has_gravity()) - return - - var/limb_pain - for(var/limb_tag in list(BP_L_LEG, BP_R_LEG, BP_L_FOOT, BP_R_FOOT)) - var/obj/item/organ/external/E = organs_by_name[limb_tag] - if(!E || !E.is_usable()) - stance_damage += 2 // let it fail even if just foot&leg - else if (E.is_malfunctioning()) - //malfunctioning only happens intermittently so treat it as a missing limb when it procs - stance_damage += 2 - if(prob(10)) - visible_message("\The [src]'s [E.name] [pick("twitches", "shudders")] and sparks!") - var/datum/effect/effect/system/spark_spread/spark_system = new () - spark_system.set_up(5, 0, src) - spark_system.attach(src) - spark_system.start() - spawn(10) - qdel(spark_system) - else if (E.is_broken()) - stance_damage += 1 - else if (E.is_dislocated()) - stance_damage += 0.5 - - if(E) limb_pain = E.can_feel_pain() - - // Canes and crutches help you stand (if the latter is ever added) - // One cane mitigates a broken leg+foot, or a missing foot. - // Two canes are needed for a lost leg. If you are missing both legs, canes aren't gonna help you. - if (l_hand && istype(l_hand, /obj/item/cane)) - stance_damage -= 2 - if (r_hand && istype(r_hand, /obj/item/cane)) - stance_damage -= 2 - - if(MOVING_DELIBERATELY(src)) //you don't suffer as much if you aren't trying to run - var/working_pair = 2 - if(!organs_by_name[BP_L_LEG] || !organs_by_name[BP_L_FOOT]) //are we down a limb? - working_pair -= 1 - else if((!organs_by_name[BP_L_LEG].is_usable()) || (!organs_by_name[BP_L_FOOT].is_usable())) //if not, is it usable? - working_pair -= 1 - if(!organs_by_name[BP_R_LEG] || !organs_by_name[BP_R_FOOT]) - working_pair -= 1 - else if((!organs_by_name[BP_R_LEG].is_usable()) || (!organs_by_name[BP_R_FOOT].is_usable())) - working_pair -= 1 - if(working_pair >= 1) - stance_damage -= 1 - if(Check_Proppable_Object()) //it helps to lean on something if you've got another leg to stand on - stance_damage -= 1 - - var/list/objects_to_sit_on = list( - /obj/item/stool, - /obj/structure/bed, - ) - - for(var/type in objects_to_sit_on) //things that can't be climbed but can be propped-up-on - if(locate(type) in src.loc) - return - - // standing is poor - if(stance_damage >= 4 || (stance_damage >= 2 && prob(2)) || (stance_damage >= 3 && prob(8))) - if(!(lying || resting)) - if(limb_pain) - emote("scream") - custom_emote(VISIBLE_MESSAGE, "падает!") - Weaken(3) //can't emote while weakened, apparently. - -/mob/living/carbon/human/proc/handle_grasp() - if(!l_hand && !r_hand) - return - - // You should not be able to pick anything up, but stranger things have happened. - if(l_hand) - for(var/limb_tag in list(BP_L_HAND, BP_L_ARM)) - var/obj/item/organ/external/E = get_organ(limb_tag) - if(!E) - visible_message("Lacking a functioning left hand, \the [src] drops \the [l_hand].") - drop_from_inventory(l_hand) - break - - if(r_hand) - for(var/limb_tag in list(BP_R_HAND, BP_R_ARM)) - var/obj/item/organ/external/E = get_organ(limb_tag) - if(!E) - visible_message("Lacking a functioning right hand, \the [src] drops \the [r_hand].") - drop_from_inventory(r_hand) - break - - // Check again... - if(!l_hand && !r_hand) - return - - for (var/obj/item/organ/external/E in organs) - if(!E || !(E.limb_flags & ORGAN_FLAG_CAN_GRASP)) - continue - if(((E.is_broken() || E.is_dislocated()) && !E.splinted) || E.is_malfunctioning()) - grasp_damage_disarm(E) - -/mob/living/carbon/human/proc/stance_damage_prone(var/obj/item/organ/external/affected) - - if(affected) - switch(affected.body_part) - if(FOOT_LEFT, FOOT_RIGHT) - if(!BP_IS_ROBOTIC(affected)) - to_chat(src, SPAN_WARNING("You lose your footing as your [affected.name] spasms!")) - else - to_chat(src, SPAN_WARNING("You lose your footing as your [affected.name] [pick("twitches", "shudders")]!")) - if(LEG_LEFT, LEG_RIGHT) - if(!BP_IS_ROBOTIC(affected)) - to_chat(src, SPAN_WARNING("Your [affected.name] buckles from the shock!")) - else - to_chat(src, SPAN_WARNING("You lose your balance as [affected.name] [pick("malfunctions", "freezes","shudders")]!")) - else - return - Weaken(4) - -/mob/living/carbon/human/proc/grasp_damage_disarm(var/obj/item/organ/external/affected) - var/disarm_slot - switch(affected.body_part) - if(HAND_LEFT, ARM_LEFT) - disarm_slot = slot_l_hand - if(HAND_RIGHT, ARM_RIGHT) - disarm_slot = slot_r_hand - - if(!disarm_slot) - return - - var/obj/item/thing = get_equipped_item(disarm_slot) - - if(!thing) - return - - if(!unEquip(thing)) - return - - if(BP_IS_ROBOTIC(affected)) - visible_message("\The [src] drops what they were holding, \his [affected.name] malfunctioning!") - - var/datum/effect/effect/system/spark_spread/spark_system = new /datum/effect/effect/system/spark_spread() - spark_system.set_up(5, 0, src) - spark_system.attach(src) - spark_system.start() - spawn(10) - qdel(spark_system) - - else - var/grasp_name = affected.name - if((affected.body_part in list(ARM_LEFT, ARM_RIGHT)) && affected.children.len) - var/obj/item/organ/external/hand = pick(affected.children) - grasp_name = hand.name - - if(affected.can_feel_pain()) - var/emote_scream = pick("screams in pain", "lets out a sharp cry", "cries out") - var/emote_scream_alt = pick("scream in pain", "let out a sharp cry", "cry out") - visible_message( - "\The [src] [emote_scream] and drops what they were holding in their [grasp_name]!", - null, - "You hear someone [emote_scream_alt]!" - ) - custom_pain("The sharp pain in your [affected.name] forces you to drop [thing]!", 30) - else - visible_message("\The [src] drops what they were holding in their [grasp_name]!") - -/mob/living/carbon/human/proc/sync_organ_dna() - var/list/all_bits = internal_organs|organs - for(var/obj/item/organ/O in all_bits) - O.set_dna(dna) - -/mob/living/proc/is_asystole() - return FALSE - -/mob/living/carbon/human/is_asystole() - if(isSynthetic()) - var/obj/item/organ/internal/cell/C = internal_organs_by_name[BP_CELL] - if(istype(C)) - if(!C.is_usable() || !C.percent()) - return TRUE - else if(should_have_organ(BP_HEART)) - var/obj/item/organ/internal/heart/heart = internal_organs_by_name[BP_HEART] - if(!istype(heart) || !heart.is_working()) - return TRUE - return FALSE \ No newline at end of file diff --git a/code/modules/mob/living/carbon/human/human_powers.dm b/code/modules/mob/living/carbon/human/human_powers.dm deleted file mode 100644 index 14948c37837cb..0000000000000 --- a/code/modules/mob/living/carbon/human/human_powers.dm +++ /dev/null @@ -1,116 +0,0 @@ -/**************** - true human verbs -****************/ -/mob/living/carbon/human/proc/tie_hair() - set name = "Tie Hair" - set desc = "Style your hair." - set category = "IC" - - if(incapacitated()) - to_chat(src, "You can't mess with your hair right now!") - return - - if(head_hair_style) - var/datum/sprite_accessory/hair/hair_style = GLOB.hair_styles_list[head_hair_style] - var/selected_string - if(!(hair_style.flags & HAIR_TIEABLE)) - to_chat(src, "Your hair isn't long enough to tie.") - return - else - var/list/datum/sprite_accessory/hair/valid_hairstyles = list() - for(var/hair_string in GLOB.hair_styles_list) - var/datum/sprite_accessory/hair/test = GLOB.hair_styles_list[hair_string] - if(test.flags & HAIR_TIEABLE) - valid_hairstyles.Add(hair_string) - selected_string = input("Select a new hairstyle", "Your hairstyle", hair_style) as null|anything in valid_hairstyles - if(incapacitated()) - to_chat(src, "You can't mess with your hair right now!") - return - else if(selected_string && head_hair_style != selected_string) - head_hair_style = selected_string - regenerate_icons() - visible_message("[src] pauses a moment to style their hair.") - else - to_chat(src, "You're already using that style.") - -/**************** - misc alien verbs -****************/ -/mob/living/carbon/human/proc/commune() - set category = "Abilities" - set name = "Commune with creature" - set desc = "Send a telepathic message to an unlucky recipient." - - var/list/targets = list() - var/target = null - var/text = null - - targets += getmobs() //Fill list, prompt user with list - target = input("Select a creature!", "Speak to creature", null, null) as null|anything in targets - - if(!target) return - - text = input("What would you like to say?", "Speak to creature", null, null) - - text = sanitize(text) - - if(!text) return - - var/mob/M = targets[target] - - if(isghost(M) || M.stat == DEAD) - to_chat(src, "Not even a [src.species.name] can speak to the dead.") - return - - log_say("[key_name(src)] communed to [key_name(M)]: [text]") - - to_chat(M, "Like lead slabs crashing into the ocean, alien thoughts drop into your mind: [text]") - if(istype(M,/mob/living/carbon/human)) - var/mob/living/carbon/human/H = M - if(H.species.name == src.species.name) - return - if(prob(75)) - to_chat(H, "Your nose begins to bleed...") - H.drip(1) - -/mob/living/carbon/human/proc/psychic_whisper(mob/M as mob in oview()) - set name = "Psychic Whisper" - set desc = "Whisper silently to someone over a distance." - set category = "Abilities" - - var/msg = sanitize(input("Message:", "Psychic Whisper") as text|null) - if(msg) - log_say("PsychicWhisper: [key_name(src)]->[M.key] : [msg]") - to_chat(M, "You hear a strange, alien voice in your head... [msg]") - to_chat(src, "You channel a message: \"[msg]\" to [M]") - return - -/*********** - diona verbs -***********/ -/mob/living/carbon/human/proc/diona_heal_toggle() - set name = "Toggle Heal" - set desc = "Turn your innate healing on or off." - set category = "Abilities" - var/obj/aura/regenerating/human/aura = locate() in auras - if(!aura) - to_chat(src, SPAN_WARNING("You don't possess an innate healing ability.")) - return - if(!aura.can_toggle()) - to_chat(src, SPAN_WARNING("You can't toggle the healing at this time!")) - return - aura.toggle() - if (aura.innate_heal) - to_chat(src, "You are now using nutrients to regenerate.") - else - to_chat(src, "You are no longer using nutrients to regenerate.") - -/mob/living/carbon/human/proc/change_colour() - set category = "Abilities" - set name = "Change Colour" - set desc = "Choose the colour of your skin." - var/new_skin = input(usr, "Choose your new skin colour: ", "Change Colour", skin_color) as null | color - if (isnull(new_skin)) - return - var/list/rgb = rgb2num(new_skin) - change_skin_color(rgb[1], rgb[2], rgb[3]) diff --git a/code/modules/mob/living/carbon/human/human_skin.dm b/code/modules/mob/living/carbon/human/human_skin.dm deleted file mode 100644 index 5b37b43781f5a..0000000000000 --- a/code/modules/mob/living/carbon/human/human_skin.dm +++ /dev/null @@ -1,7 +0,0 @@ -/mob/living/carbon/human - var/skin_state = SKIN_NORMAL - -/mob/living/carbon/human/proc/reset_skin() - if(skin_state == SKIN_THREAT) - skin_state = SKIN_NORMAL - update_skin() \ No newline at end of file diff --git a/code/modules/mob/living/carbon/human/human_species.dm b/code/modules/mob/living/carbon/human/human_species.dm deleted file mode 100644 index aac86df9eb6dc..0000000000000 --- a/code/modules/mob/living/carbon/human/human_species.dm +++ /dev/null @@ -1,60 +0,0 @@ -/mob/living/carbon/human/dummy - real_name = "Test Dummy" - status_flags = GODMODE|CANPUSH - virtual_mob = null - -/mob/living/carbon/human/dummy/mannequin/Initialize() - . = ..() - STOP_PROCESSING_MOB(src) - GLOB.human_mob_list -= src - delete_inventory() - -/mob/living/carbon/human/dummy/mannequin/add_to_living_mob_list() - return FALSE - -/mob/living/carbon/human/dummy/mannequin/add_to_dead_mob_list() - return FALSE - -/mob/living/carbon/human/dummy/mannequin/fully_replace_character_name(new_name) - ..("[new_name] (mannequin)", FALSE) - -/mob/living/carbon/human/dummy/mannequin/InitializeHud() - return // Mannequins don't get HUDs - -/mob/living/carbon/human/skrell/New(var/new_loc) - head_hair_style = "Skrell Male Tentacles" - ..(new_loc, SPECIES_SKRELL) - -/mob/living/carbon/human/unathi/New(var/new_loc) - head_hair_style = "Unathi Horns" - ..(new_loc, SPECIES_UNATHI) - -/mob/living/carbon/human/vox/New(var/new_loc) - head_hair_style = "Long Vox Quills" - ..(new_loc, SPECIES_VOX) - -/mob/living/carbon/human/diona/New(var/new_loc) - ..(new_loc, SPECIES_DIONA) - -/mob/living/carbon/human/machine/New(var/new_loc) - ..(new_loc, SPECIES_IPC) - -/mob/living/carbon/human/nabber/New(var/new_loc) - pulling_punches = 1 - ..(new_loc, SPECIES_NABBER) - -/mob/living/carbon/human/monkey/New(var/new_loc) - gender = pick(MALE, FEMALE) - ..(new_loc, SPECIES_MONKEY) - -/mob/living/carbon/human/farwa/New(var/new_loc) - ..(new_loc, "Farwa") - -/mob/living/carbon/human/neaera/New(var/new_loc) - ..(new_loc, "Neaera") - -/mob/living/carbon/human/stok/New(var/new_loc) - ..(new_loc, "Stok") - -/mob/living/carbon/human/adherent/New(var/new_loc) - ..(new_loc, SPECIES_ADHERENT) diff --git a/code/modules/mob/living/carbon/human/interactions.dm b/code/modules/mob/living/carbon/human/interactions.dm deleted file mode 100644 index 64dabc0e9067f..0000000000000 --- a/code/modules/mob/living/carbon/human/interactions.dm +++ /dev/null @@ -1,80 +0,0 @@ -/********************************** -*******Interactions code by HONKERTRON feat TestUnit******** -***********************************/ - -/mob/living/carbon/human/MouseDrop(mob/M as mob) - ..() - if(src == usr) - interact(M) - -/mob/proc/make_interaction() - return - -//Distant interactions -/mob/living/carbon/human/verb/interact(mob/M as mob) - set name = "Interact" - set category = "IC" - - if (istype(M, /mob/living/carbon/human) && usr != M && src != M) - partner = M - make_interaction(machine) - -/mob/living/carbon/human/make_interaction() - set_machine(src) - - var/mob/living/carbon/human/H = usr - var/mob/living/carbon/human/P = H.partner - var/obj/item/organ/external/temp = H.organs_by_name["r_hand"] - var/hashands = (temp?.is_usable()) - if (!hashands) - temp = H.organs_by_name["l_hand"] - hashands = (temp?.is_usable()) - temp = P.organs_by_name["r_hand"] - var/hashands_p = (temp?.is_usable()) - if (!hashands_p) - temp = P.organs_by_name["l_hand"] - hashands = (temp?.is_usable()) - var/mouthfree = !((H.head && (H.check_mouth_coverage())) || (H.wear_mask && (H.check_mouth_coverage()))) - var/mouthfree_p = !((P.head && (P.check_mouth_coverage())) || (P.wear_mask && (P.check_mouth_coverage()))) - - - var/dat = "
              INTERACTIONS - [H.partner]


              " - var/ya = "я" - - dat += {"• Отвесить поклон.
              "} - if (hashands) - dat += {"Руки:
              "} - dat += {"• Приветливо кивнуть.
              "} - if (Adjacent(P)) - dat += {"• Пожать руку.
              "} - dat += {"• Обнимашки!
              "} - dat += {"• Похлопать по плечу
              "} - dat += {"• Дать п[ya]ть.
              "} - if ((P.species.name == SPECIES_VOX)|| (P.species.name == SPECIES_YEOSA) || (P.species.name == SPECIES_UNATHI)) - dat += {"• Дёрнуть за хвост!
              "} - dat += {"• Погладить.
              "} - dat += {"• Почесать.
              "} - if (hashands_p) - dat += {"• Передать предмет.
              "} - dat += {"• Дать пощечину!
              "} - dat += {"• Дать подзатыльник.
              "} - dat += {"• Показать средний палец.
              "} - dat += {"• Погрозить кулаком.
              "} - dat += {"• Щлепнуть по заднице.
              "} - - if (mouthfree && H.species.name != "Diona") - dat += {"Лицо:
              "} - dat += {"• Поцеловать.
              "} - if (Adjacent(P)) - if (mouthfree_p) - dat += {"• Лизнуть в щеку.
              "} - dat += {"• Плюнуть.
              "} - dat += {"• Показать [ya]зык.
              "} - - var/datum/browser/popup = new(usr, "interactions", "Interactions", 340, 480) - popup.set_content(dat) - popup.open() - - -/mob/living/carbon/human - var/mob/living/carbon/human/partner diff --git a/code/modules/mob/living/carbon/human/inventory.dm b/code/modules/mob/living/carbon/human/inventory.dm deleted file mode 100644 index 6aa80d64c4c08..0000000000000 --- a/code/modules/mob/living/carbon/human/inventory.dm +++ /dev/null @@ -1,443 +0,0 @@ -/* -Add fingerprints to items when we put them in our hands. -This saves us from having to call add_fingerprint() any time something is put in a human's hands programmatically. -*/ - -/mob/living/carbon/human/verb/quick_equip() - set name = "quick-equip" - set hidden = 1 - - if(ishuman(src)) - var/mob/living/carbon/human/H = src - var/obj/item/I = H.get_active_hand() - if(!I) - to_chat(H, "You are not holding anything to equip.") - return - if(istype (I, /obj/item/underwear)) - var/obj/item/underwear/U = I - U.EquipUnderwear(H, H) - else if(H.equip_to_appropriate_slot(I)) - if(hand) - update_inv_l_hand(0) - else - update_inv_r_hand(0) - else - to_chat(H, "You are unable to equip that.") - -/mob/living/carbon/human/proc/equip_in_one_of_slots(obj/item/W, list/slots, del_on_fail = 1) - for (var/slot in slots) - if (equip_to_slot_if_possible(W, slots[slot])) - return slot - if (del_on_fail) - qdel(W) - return null - -//Puts the item into our active hand if possible. returns 1 on success. -/mob/living/carbon/human/put_in_active_hand(var/obj/item/W) - return (hand ? put_in_l_hand(W) : put_in_r_hand(W)) - -//Puts the item into our inactive hand if possible. returns 1 on success. -/mob/living/carbon/human/put_in_inactive_hand(var/obj/item/W) - return (hand ? put_in_r_hand(W) : put_in_l_hand(W)) - -/mob/living/carbon/human/put_in_hands(var/obj/item/W) - if(!W) - return 0 - if(put_in_active_hand(W) || put_in_inactive_hand(W)) - W.update_held_icon() - return 1 - return ..() - -/mob/living/carbon/human/put_in_l_hand(var/obj/item/W) - if(!..() || l_hand) - return 0 - var/obj/item/organ/external/hand = organs_by_name["l_hand"] - if(!hand || !hand.is_usable()) - return 0 - equip_to_slot(W,slot_l_hand) - W.add_fingerprint(src) - return 1 - -/mob/living/carbon/human/put_in_r_hand(var/obj/item/W) - if(!..() || r_hand) - return 0 - var/obj/item/organ/external/hand = organs_by_name["r_hand"] - if(!hand || !hand.is_usable()) - return 0 - - equip_to_slot(W,slot_r_hand) - W.add_fingerprint(src) - return 1 - -/mob/living/carbon/human/proc/has_organ(name) - var/obj/item/organ/external/O = organs_by_name[name] - return (O && !O.is_stump()) - -/mob/living/carbon/human/proc/has_organ_for_slot(slot) - switch(slot) - if(slot_back) - return has_organ(BP_CHEST) - if(slot_wear_mask) - return has_organ(BP_HEAD) - if(slot_handcuffed) - return has_organ(BP_L_HAND) && has_organ(BP_R_HAND) - if(slot_legcuffed) - return has_organ(BP_L_FOOT) && has_organ(BP_R_FOOT) - if(slot_l_hand) - return has_organ(BP_L_HAND) - if(slot_r_hand) - return has_organ(BP_R_HAND) - if(slot_belt) - return has_organ(BP_CHEST) - if(slot_wear_id) - // the only relevant check for this is the uniform check - return 1 - if(slot_l_ear) - return has_organ(BP_HEAD) - if(slot_r_ear) - return has_organ(BP_HEAD) - if(slot_glasses) - return has_organ(BP_HEAD) - if(slot_gloves) - return has_organ(BP_L_HAND) || has_organ(BP_R_HAND) - if(slot_head) - return has_organ(BP_HEAD) - if(slot_shoes) - return has_organ(BP_L_FOOT) || has_organ(BP_R_FOOT) - if(slot_wear_suit) - return has_organ(BP_CHEST) - if(slot_w_uniform) - return has_organ(BP_CHEST) - if(slot_l_store) - return has_organ(BP_CHEST) - if(slot_r_store) - return has_organ(BP_CHEST) - if(slot_s_store) - return has_organ(BP_CHEST) - if(slot_in_backpack) - return 1 - if(slot_tie) - return 1 - -/mob/living/carbon/human/u_equip(obj/W as obj) - if(!W) return 0 - - if (W == wear_suit) - if(s_store) - drop_from_inventory(s_store) - wear_suit = null - update_inv_wear_suit() - else if (W == w_uniform) - if (r_store) - drop_from_inventory(r_store) - if (l_store) - drop_from_inventory(l_store) - if (wear_id) - drop_from_inventory(wear_id) - if (belt) - drop_from_inventory(belt) - w_uniform = null - update_inv_w_uniform() - else if (W == gloves) - gloves = null - update_inv_gloves() - else if (W == glasses) - glasses = null - update_inv_glasses() - else if (W == head) - head = null - if(istype(W, /obj/item)) - var/obj/item/I = W - if(I.flags_inv & (HIDEMASK|BLOCKHAIR|BLOCKHEADHAIR)) - update_hair(0) //rebuild hair - update_inv_ears(0) - update_inv_wear_mask(0) - if(src) - var/obj/item/clothing/mask/wear_mask = src.get_equipped_item(slot_wear_mask) - if(!(wear_mask && (wear_mask.item_flags & ITEM_FLAG_AIRTIGHT))) - set_internals(null) - update_inv_head() - else if (W == l_ear) - l_ear = null - if(r_ear == W) //check for items that get equipped to both ear slots - r_ear = null - update_inv_ears() - else if (W == r_ear) - r_ear = null - if(l_ear == W) - l_ear = null - update_inv_ears() - else if (W == shoes) - shoes = null - update_inv_shoes() - else if (W == belt) - belt = null - update_inv_belt() - else if (W == wear_mask) - wear_mask = null - if(istype(W, /obj/item)) - var/obj/item/I = W - if(I.flags_inv & (BLOCKHAIR|BLOCKHEADHAIR)) - update_hair(0) //rebuild hair - update_inv_ears(0) - var/obj/item/clothing/mask/head = src.get_equipped_item(slot_head) - if(!(head && (head.item_flags & ITEM_FLAG_AIRTIGHT))) - set_internals(null) - update_inv_wear_mask() - else if (W == wear_id) - wear_id = null - update_inv_wear_id() - else if (W == r_store) - r_store = null - update_inv_pockets() - else if (W == l_store) - l_store = null - update_inv_pockets() - else if (W == s_store) - s_store = null - update_inv_s_store() - else if (W == back) - back = null - update_inv_back() - else if (W == handcuffed) - handcuffed = null - if(buckled && buckled.buckle_require_restraints) - buckled.unbuckle_mob() - update_inv_handcuffed() - else if (W == r_hand) - r_hand = null - if(l_hand) - l_hand.update_twohanding() - update_inv_l_hand() - update_inv_r_hand() - else if (W == l_hand) - l_hand = null - if(r_hand) - r_hand.update_twohanding() - update_inv_l_hand() - update_inv_l_hand() - else - return 0 - - update_action_buttons() - return 1 - - - -//This is an UNSAFE proc. Use mob_can_equip() before calling this one! Or rather use equip_to_slot_if_possible() or advanced_equip_to_slot_if_possible() -//set redraw_mob to 0 if you don't wish the hud to be updated - if you're doing it manually in your own proc. -/mob/living/carbon/human/equip_to_slot(obj/item/W as obj, slot, redraw_mob = 1) - - if(!slot) return - if(!istype(W)) return - if(!has_organ_for_slot(slot)) return - if(!species || !species.hud || !(slot in species.hud.equip_slots)) return - W.forceMove(src) - - var/obj/item/old_item = get_equipped_item(slot) - - switch(slot) - if(slot_back) - src.back = W - W.equipped(src, slot) - update_inv_back(redraw_mob) - if(slot_wear_mask) - src.wear_mask = W - if(wear_mask.flags_inv & (BLOCKHAIR|BLOCKHEADHAIR)) - update_hair(redraw_mob) //rebuild hair - update_inv_ears(0) - W.equipped(src, slot) - update_inv_wear_mask(redraw_mob) - if(slot_handcuffed) - src.handcuffed = W - drop_r_hand() - drop_l_hand() - stop_pulling() - update_inv_handcuffed(redraw_mob) - if(slot_l_hand) - src.l_hand = W - W.equipped(src, slot) - W.screen_loc = ui_lhand - update_inv_l_hand(redraw_mob) - if(hand) - W.on_active_hand(src) - if(slot_r_hand) - src.r_hand = W - W.equipped(src, slot) - W.screen_loc = ui_rhand - update_inv_r_hand(redraw_mob) - if(!hand) - W.on_active_hand(src) - if(slot_belt) - src.belt = W - W.equipped(src, slot) - update_inv_belt(redraw_mob) - if(slot_wear_id) - src.wear_id = W - W.equipped(src, slot) - update_inv_wear_id(redraw_mob) - if(slot_l_ear) - src.l_ear = W - if(l_ear.slot_flags & SLOT_TWOEARS) - src.r_ear = W - W.equipped(src, slot) - update_inv_ears(redraw_mob) - if(slot_r_ear) - src.r_ear = W - if(r_ear.slot_flags & SLOT_TWOEARS) - src.l_ear = W - W.equipped(src, slot) - update_inv_ears(redraw_mob) - if(slot_glasses) - src.glasses = W - W.equipped(src, slot) - update_inv_glasses(redraw_mob) - if(slot_gloves) - src.gloves = W - W.equipped(src, slot) - update_inv_gloves(redraw_mob) - if(slot_head) - src.head = W - if(head.flags_inv & (BLOCKHAIR|BLOCKHEADHAIR|HIDEMASK)) - update_hair(redraw_mob) //rebuild hair - update_inv_ears(0) - update_inv_wear_mask(0) - if(istype(W,/obj/item/clothing/head/kitty)) - W.update_icon(src) - W.equipped(src, slot) - update_inv_head(redraw_mob) - if(slot_shoes) - src.shoes = W - W.equipped(src, slot) - update_inv_shoes(redraw_mob) - if(slot_wear_suit) - src.wear_suit = W - if(wear_suit.flags_inv & HIDESHOES) - update_inv_shoes(0) - if(wear_suit.flags_inv & HIDEGLOVES) - update_inv_gloves(0) - if(wear_suit.flags_inv & HIDEJUMPSUIT) - update_inv_w_uniform(0) - W.equipped(src, slot) - update_inv_wear_suit(redraw_mob) - if(slot_w_uniform) - src.w_uniform = W - if(w_uniform.flags_inv & HIDESHOES) - update_inv_shoes(0) - W.equipped(src, slot) - update_inv_w_uniform(redraw_mob) - if(slot_l_store) - src.l_store = W - W.equipped(src, slot) - update_inv_pockets(redraw_mob) - if(slot_r_store) - src.r_store = W - W.equipped(src, slot) - update_inv_pockets(redraw_mob) - if(slot_s_store) - src.s_store = W - W.equipped(src, slot) - update_inv_s_store(redraw_mob) - if(slot_in_backpack) - if(src.get_active_hand() == W) - src.remove_from_mob(W) - W.forceMove(src.back) - if(slot_tie) - var/obj/item/clothing/under/uniform = w_uniform - if (uniform) - uniform.attempt_attach_accessory(W, src) - else - to_chat(src, "You are trying to eqip this item to an unsupported inventory slot. If possible, please write a ticket with steps to reproduce. Slot was: [slot]") - return - - if((W == src.l_hand) && (slot != slot_l_hand)) - src.l_hand = null - update_inv_l_hand() //So items actually disappear from hands. - if(r_hand) - r_hand.update_twohanding() - else if((W == src.r_hand) && (slot != slot_r_hand)) - src.r_hand = null - update_inv_r_hand() - if(l_hand) - l_hand.update_twohanding() - - W.hud_layerise() - for(var/s in species.hud.gear) - var/list/gear = species.hud.gear[s] - if(gear["slot"] == slot) - W.screen_loc = gear["loc"] - if(W.action_button_name) - update_action_buttons() - - // if we replaced an item, delete the old item. do this at the end to make the replacement seamless - if(old_item) - qdel(old_item) - - return 1 - -//Checks if a given slot can be accessed at this time, either to equip or unequip I -/mob/living/carbon/human/slot_is_accessible(var/slot, var/obj/item/I, mob/user=null) - var/obj/item/covering = null - var/check_flags = 0 - - switch(slot) - if(slot_wear_mask) - covering = src.head - check_flags = FACE - if(slot_glasses) - covering = src.head - check_flags = EYES - if(slot_gloves, slot_w_uniform) - covering = src.wear_suit - - if(covering && (covering.body_parts_covered & (I.body_parts_covered|check_flags))) - to_chat(user, "\The [covering] is in the way.") - return 0 - return 1 - -/mob/living/carbon/human/get_equipped_item(var/slot) - switch(slot) - if(slot_back) return back - if(slot_handcuffed) return handcuffed - if(slot_l_store) return l_store - if(slot_r_store) return r_store - if(slot_wear_mask) return wear_mask - if(slot_l_hand) return l_hand - if(slot_r_hand) return r_hand - if(slot_wear_id) return wear_id - if(slot_glasses) return glasses - if(slot_gloves) return gloves - if(slot_head) return head - if(slot_shoes) return shoes - if(slot_belt) return belt - if(slot_wear_suit) return wear_suit - if(slot_w_uniform) return w_uniform - if(slot_s_store) return s_store - if(slot_l_ear) return l_ear - if(slot_r_ear) return r_ear - return ..() - -/mob/living/carbon/human/get_equipped_items(var/include_carried = 0) - . = ..() - if(belt) . += belt - if(l_ear) . += l_ear - if(r_ear) . += r_ear - if(glasses) . += glasses - if(gloves) . += gloves - if(head) . += head - if(shoes) . += shoes - if(wear_id) . += wear_id - if(wear_suit) . += wear_suit - if(w_uniform) . += w_uniform - - if(include_carried) - if(l_store) . += l_store - if(r_store) . += r_store - if(handcuffed) . += handcuffed - if(s_store) . += s_store - -//Same as get_covering_equipped_items, but using target zone instead of bodyparts flags -/mob/living/carbon/human/proc/get_covering_equipped_item_by_zone(var/zone) - var/obj/item/organ/external/O = get_organ(zone) - if(O) - return get_covering_equipped_item(O.body_part) diff --git a/code/modules/mob/living/carbon/human/life.dm b/code/modules/mob/living/carbon/human/life.dm deleted file mode 100644 index 743733049d946..0000000000000 --- a/code/modules/mob/living/carbon/human/life.dm +++ /dev/null @@ -1,1171 +0,0 @@ -//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:32 - -//NOTE: Breathing happens once per FOUR TICKS, unless the last breath fails. In which case it happens once per ONE TICK! So oxyloss healing is done once per 4 ticks while oxyloss damage is applied once per tick! -#define HUMAN_MAX_OXYLOSS 1 //Defines how much oxyloss humans can get per tick. A tile with no air at all (such as space) applies this value, otherwise it's a percentage of it. - -#define HUMAN_CRIT_TIME_CUSHION (10 MINUTES) //approximate time limit to stabilize someone in crit -#define HUMAN_CRIT_HEALTH_CUSHION (config.health_threshold_crit - config.health_threshold_dead) - -//The amount of damage you'll get when in critical condition. We want this to be a HUMAN_CRIT_TIME_CUSHION long deal. -//There are HUMAN_CRIT_HEALTH_CUSHION hp to get through, so (HUMAN_CRIT_HEALTH_CUSHION/HUMAN_CRIT_TIME_CUSHION) per tick. -//Breaths however only happen once every MOB_BREATH_DELAY life ticks. The delay between life ticks is set by the mob process. -#define HUMAN_CRIT_MAX_OXYLOSS ( MOB_BREATH_DELAY * process_schedule_interval("mob") * (HUMAN_CRIT_HEALTH_CUSHION/HUMAN_CRIT_TIME_CUSHION) ) - -#define HEAT_DAMAGE_LEVEL_1 2 //Amount of damage applied when your body temperature just passes the 360.15k safety point -#define HEAT_DAMAGE_LEVEL_2 4 //Amount of damage applied when your body temperature passes the 400K point -#define HEAT_DAMAGE_LEVEL_3 8 //Amount of damage applied when your body temperature passes the 1000K point - -#define COLD_DAMAGE_LEVEL_1 0.5 //Amount of damage applied when your body temperature just passes the 260.15k safety point -#define COLD_DAMAGE_LEVEL_2 1.5 //Amount of damage applied when your body temperature passes the 200K point -#define COLD_DAMAGE_LEVEL_3 3 //Amount of damage applied when your body temperature passes the 120K point - -//Note that gas heat damage is only applied once every FOUR ticks. -#define HEAT_GAS_DAMAGE_LEVEL_1 2 //Amount of damage applied when the current breath's temperature just passes the 360.15k safety point -#define HEAT_GAS_DAMAGE_LEVEL_2 4 //Amount of damage applied when the current breath's temperature passes the 400K point -#define HEAT_GAS_DAMAGE_LEVEL_3 8 //Amount of damage applied when the current breath's temperature passes the 1000K point - -#define COLD_GAS_DAMAGE_LEVEL_1 0.5 //Amount of damage applied when the current breath's temperature just passes the 260.15k safety point -#define COLD_GAS_DAMAGE_LEVEL_2 1.5 //Amount of damage applied when the current breath's temperature passes the 200K point -#define COLD_GAS_DAMAGE_LEVEL_3 3 //Amount of damage applied when the current breath's temperature passes the 120K point - -#define RADIATION_SPEED_COEFFICIENT 0.025 - -/mob/living/carbon/human - var/oxygen_alert = 0 - var/phoron_alert = 0 - var/co2_alert = 0 - var/fire_alert = 0 - var/pressure_alert = 0 - var/temperature_alert = 0 - var/heartbeat = 0 - var/stamina = 100 - -/mob/living/carbon/human/Life() - set invisibility = 0 - set background = BACKGROUND_ENABLED - - if (HAS_TRANSFORMATION_MOVEMENT_HANDLER(src)) - return - - fire_alert = 0 //Reset this here, because both breathe() and handle_environment() have a chance to set it. - - //TODO: separate this out - // update the current life tick, can be used to e.g. only do something every 4 ticks - life_tick++ - - // This is not an ideal place for this but it will do for now. - if(wearing_rig && wearing_rig.offline) - wearing_rig = null - - ..() - - if(life_tick%30==15) - hud_updateflag = 1022 - - voice = GetVoice() - - //No need to update all of these procs if the guy is dead. - if(stat != DEAD && !InStasis()) - //Updates the number of stored chemicals for powers - handle_changeling() -//[INF] - if(status_flags & FAKEDEATH) return //act like a dead mob - even if its broken by itself... -//[/INF] - //Organs and blood - handle_organs() - stabilize_body_temperature() //Body temperature adjusts itself (self-regulation) - - handle_shock() - - handle_pain() - - handle_stamina() - - handle_medical_side_effects() - - if(!client && !mind) - species.handle_npc(src) - - - if(!handle_some_updates()) - return //We go ahead and process them 5 times for HUD images and other stuff though. - - //Update our name based on whether our face is obscured/disfigured - SetName(get_visible_name()) - -/mob/living/carbon/human/get_stamina() - return stamina - -/mob/living/carbon/human/adjust_stamina(var/amt) - var/last_stamina = stamina - if(stat == DEAD) - stamina = 0 - else - stamina = clamp(stamina + amt, 0, 100) - if(stamina <= 0) - to_chat(src, SPAN_WARNING("You are exhausted!")) - if(MOVING_QUICKLY(src)) - set_moving_slowly() - if(last_stamina != stamina && hud_used) - hud_used.update_stamina() - -/mob/living/carbon/human/proc/handle_stamina() - if((world.time - last_quick_move_time) > 5 SECONDS) - var/mod = (lying + (nutrition / initial(nutrition))) / 2 - adjust_stamina(max(config.minimum_stamina_recovery, config.maximum_stamina_recovery * mod) * (1+chem_effects[CE_ENERGETIC])) - -/mob/living/carbon/human/set_stat(var/new_stat) - var/old_stat = stat - . = ..() - if(stat) - update_skin(1) - if(client && client.is_afk()) - if(old_stat == UNCONSCIOUS && stat == CONSCIOUS) - playsound_local(null, 'sound/effects/bells.ogg', 100, is_global=TRUE) - -/mob/living/carbon/human/proc/handle_some_updates() - if(life_tick > 5 && timeofdeath && (timeofdeath < 5 || world.time - timeofdeath > 6000)) //We are long dead, or we're junk mobs spawned like the clowns on the clown shuttle - return 0 - return 1 - -/mob/living/carbon/human/breathe() - var/species_organ = species.breathing_organ - - if(species_organ) - var/active_breaths = 0 - var/obj/item/organ/internal/lungs/L = internal_organs_by_name[species_organ] - if(L) - active_breaths = L.active_breathing - ..(active_breaths) - -// Calculate how vulnerable the human is to the current pressure. -// Returns 0 (equals 0 %) if sealed in an undamaged suit that's rated for the pressure, 1 if unprotected (equals 100%). -// Suitdamage can modify this in 10% steps. -/mob/living/carbon/human/proc/get_pressure_weakness(pressure) - - var/pressure_adjustment_coefficient = 0 - var/list/zones = list(HEAD, UPPER_TORSO, LOWER_TORSO, LEGS, FEET, ARMS, HANDS) - for(var/zone in zones) - if(zone >= 8) break //INF. Accessories on under in sealed suit cause runtimes - var/list/covers = get_covering_equipped_items(zone) - var/zone_exposure = 1 - for(var/obj/item/clothing/C in covers) - zone_exposure = min(zone_exposure, C.get_pressure_weakness(pressure,zone)) - if(zone_exposure >= 1) - return 1 - pressure_adjustment_coefficient = max(pressure_adjustment_coefficient, zone_exposure) - pressure_adjustment_coefficient = clamp(pressure_adjustment_coefficient, 0, 1) // So it isn't less than 0 or larger than 1. - - return pressure_adjustment_coefficient - -// Calculate how much of the environment pressure-difference affects the human. -/mob/living/carbon/human/calculate_affecting_pressure(var/pressure) - var/pressure_difference - - // First get the absolute pressure difference. - if(pressure < ONE_ATMOSPHERE) // We are in an underpressure. - pressure_difference = ONE_ATMOSPHERE - pressure - - else //We are in an overpressure or standard atmosphere. - pressure_difference = pressure - ONE_ATMOSPHERE - - if(pressure_difference < 5) // If the difference is small, don't bother calculating the fraction. - pressure_difference = 0 - - else - // Otherwise calculate how much of that absolute pressure difference affects us, can be 0 to 1 (equals 0% to 100%). - // This is our relative difference. - pressure_difference *= get_pressure_weakness(pressure) - - // The difference is always positive to avoid extra calculations. - // Apply the relative difference on a standard atmosphere to get the final result. - // The return value will be the adjusted_pressure of the human that is the basis of pressure warnings and damage. - if(pressure < ONE_ATMOSPHERE) - return ONE_ATMOSPHERE - pressure_difference - else - return ONE_ATMOSPHERE + pressure_difference - -/mob/living/carbon/human/handle_impaired_vision() - ..() - //Vision - var/obj/item/organ/vision - if(species.vision_organ) - vision = internal_organs_by_name[species.vision_organ] - - if(!species.vision_organ) // Presumably if a species has no vision organs, they see via some other means. - eye_blind = 0 - blinded = 0 - eye_blurry = 0 - else if(!vision || (vision && !vision.is_usable())) // Vision organs cut out or broken? Permablind. - eye_blind = 1 - blinded = 1 - eye_blurry = 1 - else - //blindness - if(!(sdisabilities & BLINDED)) - if(equipment_tint_total >= TINT_BLIND) // Covered eyes, heal faster - eye_blurry = max(eye_blurry-2, 0) - -/mob/living/carbon/human/handle_disabilities() - ..() - if(stat != DEAD) - if ((disabilities & COUGHING) && prob(5) && paralysis <= 1) - unequip_item() - spawn(0) - emote("cough") - -/mob/living/carbon/human/handle_mutations_and_radiation() - if(getFireLoss()) - if((MUTATION_COLD_RESISTANCE in mutations) || (prob(1))) - heal_organ_damage(0,1) - - // DNA2 - Gene processing. - // The HULK stuff that was here is now in the hulk gene. - for(var/datum/dna/gene/gene in dna_genes) - if(!gene.block) - continue - if(gene.is_active(src)) - gene.OnMobLife(src) - - radiation = clamp(radiation,0,500) - - if(!radiation) - if(species.appearance_flags & RADIATION_GLOWS) - set_light(0) - else - if(species.appearance_flags & RADIATION_GLOWS) - set_light(0.3, 0.1, max(1,min(20,radiation/20)), 2, species.get_flesh_colour(src)) - // END DOGSHIT SNOWFLAKE - - var/obj/item/organ/internal/diona/nutrients/rad_organ = locate() in internal_organs - if (rad_organ && !rad_organ.is_broken()) - var/rads = radiation/25 - - radiation -= rads - set_nutrition(clamp(nutrition+rads, 0, 550)) - - if (radiation < 2) - radiation = 0 - - return - - var/damage = 0 - radiation -= 1 * RADIATION_SPEED_COEFFICIENT - if(prob(25)) - damage = 2 - - if (radiation > 50) - damage = 2 - radiation -= 2 * RADIATION_SPEED_COEFFICIENT - if(!isSynthetic()) - if(prob(5) && prob(100 * RADIATION_SPEED_COEFFICIENT)) - radiation -= 5 * RADIATION_SPEED_COEFFICIENT - to_chat(src, "You feel weak.") - Weaken(3) - if(!lying) - emote("collapse") - if(prob(5) && prob(100 * RADIATION_SPEED_COEFFICIENT) && species.get_bodytype(src) == SPECIES_HUMAN) //apes go bald - if((head_hair_style != "Bald" || facial_hair_style != "Shaved" )) - to_chat(src, "Your hair falls out.") - head_hair_style = "Bald" - facial_hair_style = "Shaved" - update_hair() - - if (radiation > 75) - damage = 3 - radiation -= 3 * RADIATION_SPEED_COEFFICIENT - if(!isSynthetic()) - if(prob(5)) - take_overall_damage(0, 5 * RADIATION_SPEED_COEFFICIENT, used_weapon = "Radiation Burns") - if(prob(1)) - to_chat(src, "You feel strange!") - adjustCloneLoss(5 * RADIATION_SPEED_COEFFICIENT) - emote("gasp") - if(radiation > 150) - damage = 8 - radiation -= 4 * RADIATION_SPEED_COEFFICIENT - - damage = Floor(damage * species.get_radiation_mod(src)) - if(damage) - adjustToxLoss(damage * RADIATION_SPEED_COEFFICIENT) - immunity = max(0, immunity - damage * 15 * RADIATION_SPEED_COEFFICIENT) - updatehealth() - if(!isSynthetic() && organs.len) - var/obj/item/organ/external/O = pick(organs) - if(istype(O)) O.add_autopsy_data("Radiation Poisoning", damage) - - /** breathing **/ - -/mob/living/carbon/human/handle_chemical_smoke(var/datum/gas_mixture/environment) - if(wear_mask && (wear_mask.item_flags & ITEM_FLAG_BLOCK_GAS_SMOKE_EFFECT)) - return - if(glasses && (glasses.item_flags & ITEM_FLAG_BLOCK_GAS_SMOKE_EFFECT)) - return - if(head && (head.item_flags & ITEM_FLAG_BLOCK_GAS_SMOKE_EFFECT)) - return - ..() - -/mob/living/carbon/human/get_breath_from_internal(volume_needed=STD_BREATH_VOLUME) - if(internal) - - var/obj/item/tank/rig_supply - if(istype(back,/obj/item/rig)) - var/obj/item/rig/rig = back - if(!rig.offline && (rig.air_supply && internal == rig.air_supply)) - rig_supply = rig.air_supply - - if (!rig_supply && (!contents.Find(internal) || !((wear_mask && (wear_mask.item_flags & ITEM_FLAG_AIRTIGHT)) || (head && (head.item_flags & ITEM_FLAG_AIRTIGHT))))) - set_internals(null) - - if(internal) - return internal.remove_air_volume(volume_needed) - return null - -/mob/living/carbon/human/handle_breath(datum/gas_mixture/breath) - if(status_flags & GODMODE) - return - var/species_organ = species.breathing_organ - if(!species_organ) - return - - var/obj/item/organ/internal/lungs/L = internal_organs_by_name[species_organ] - if(!L || nervous_system_failure()) - failed_last_breath = 1 - else - failed_last_breath = L.handle_breath(breath) //if breath is null or vacuum, the lungs will handle it for us - return !failed_last_breath - -/mob/living/carbon/human/handle_environment(datum/gas_mixture/environment) - if(!environment || (MUTATION_SPACERES in mutations)) - return - - //Stuff like diona water absorbtion happens here. - species.handle_environment_special(src) - - //Moved pressure calculations here for use in skip-processing check. - var/pressure = environment.return_pressure() - var/adjusted_pressure = calculate_affecting_pressure(pressure) - - //Check for contaminants before anything else because we don't want to skip it. - for(var/g in environment.gas) - if(gas_data.flags[g] & XGM_GAS_CONTAMINANT && environment.gas[g] > gas_data.overlay_limit[g] + 1) - pl_effects() - break - - if(istype(src.loc, /turf/space)) //being in a closet will interfere with radiation, may not make sense but we don't model radiation for atoms in general so it will have to do for now. - //Don't bother if the temperature drop is less than 0.1 anyways. Hopefully BYOND is smart enough to turn this constant expression into a constant - if(bodytemperature > (0.1 * HUMAN_HEAT_CAPACITY/(HUMAN_EXPOSED_SURFACE_AREA*STEFAN_BOLTZMANN_CONSTANT))**(1/4) + COSMIC_RADIATION_TEMPERATURE) - - //Thermal radiation into space - var/heat_gain = get_thermal_radiation(bodytemperature, HUMAN_EXPOSED_SURFACE_AREA, 0.5, SPACE_HEAT_TRANSFER_COEFFICIENT) - - var/temperature_gain = heat_gain/HUMAN_HEAT_CAPACITY - bodytemperature += temperature_gain //temperature_gain will often be negative - - var/relative_density = (environment.total_moles/environment.volume) / (MOLES_CELLSTANDARD/CELL_VOLUME) - if(relative_density > 0.02) //don't bother if we are in vacuum or near-vacuum - var/loc_temp = environment.temperature - - if(adjusted_pressure < species.warning_high_pressure && adjusted_pressure > species.warning_low_pressure && abs(loc_temp - bodytemperature) < 20 && bodytemperature < species.heat_level_1 && bodytemperature > species.cold_level_1 && species.body_temperature) - pressure_alert = 0 - return // Temperatures are within normal ranges, fuck all this processing. ~Ccomp - - //Body temperature adjusts depending on surrounding atmosphere based on your thermal protection (convection) - var/temp_adj = 0 - if(loc_temp < bodytemperature) //Place is colder than we are - var/thermal_protection = get_cold_protection(loc_temp) //This returns a 0 - 1 value, which corresponds to the percentage of protection based on what you're wearing and what you're exposed to. - if(thermal_protection < 1) - temp_adj = (1-thermal_protection) * ((loc_temp - bodytemperature) / BODYTEMP_COLD_DIVISOR) //this will be negative - else if (loc_temp > bodytemperature) //Place is hotter than we are - var/thermal_protection = get_heat_protection(loc_temp) //This returns a 0 - 1 value, which corresponds to the percentage of protection based on what you're wearing and what you're exposed to. - if(thermal_protection < 1) - temp_adj = (1-thermal_protection) * ((loc_temp - bodytemperature) / BODYTEMP_HEAT_DIVISOR) - - //Use heat transfer as proportional to the gas density. However, we only care about the relative density vs standard 101 kPa/20 C air. Therefore we can use mole ratios - bodytemperature += clamp(temp_adj * relative_density, BODYTEMP_COOLING_MAX, BODYTEMP_HEATING_MAX) - - // +/- 50 degrees from 310.15K is the 'safe' zone, where no damage is dealt. - if(bodytemperature >= getSpeciesOrSynthTemp(HEAT_LEVEL_1)) - //Body temperature is too hot. - fire_alert = max(fire_alert, 1) - if(status_flags & GODMODE) return 1 //godmode - var/burn_dam = 0 - if(bodytemperature < getSpeciesOrSynthTemp(HEAT_LEVEL_2)) - burn_dam = HEAT_DAMAGE_LEVEL_1 - else if(bodytemperature < getSpeciesOrSynthTemp(HEAT_LEVEL_3)) - burn_dam = HEAT_DAMAGE_LEVEL_2 - else - burn_dam = HEAT_DAMAGE_LEVEL_3 - take_overall_damage(burn=burn_dam, used_weapon = "High Body Temperature") - fire_alert = max(fire_alert, 2) - - else if(bodytemperature <= getSpeciesOrSynthTemp(COLD_LEVEL_1)) - fire_alert = max(fire_alert, 1) - if(status_flags & GODMODE) return 1 //godmode - - var/burn_dam = 0 - - if(bodytemperature > getSpeciesOrSynthTemp(COLD_LEVEL_2)) - burn_dam = COLD_DAMAGE_LEVEL_1 - else if(bodytemperature > getSpeciesOrSynthTemp(COLD_LEVEL_3)) - burn_dam = COLD_DAMAGE_LEVEL_2 - else - burn_dam = COLD_DAMAGE_LEVEL_3 - - if(!istype(loc, /obj/machinery/atmospherics/unary/cryo_cell)) //INF - SetStasis(getCryogenicFactor(bodytemperature), STASIS_COLD) - if(!chem_effects[CE_CRYO]) - take_overall_damage(burn=burn_dam, used_weapon = "Low Body Temperature") - fire_alert = max(fire_alert, 1) - - // Account for massive pressure differences. Done by Polymorph - // Made it possible to actually have something that can protect against high pressure... Done by Errorage. Polymorph now has an axe sticking from his head for his previous hardcoded nonsense! - if(status_flags & GODMODE) return 1 //godmode - - if(adjusted_pressure >= species.hazard_high_pressure) - var/pressure_damage = min( ( (adjusted_pressure / species.hazard_high_pressure) -1 )*PRESSURE_DAMAGE_COEFFICIENT , MAX_HIGH_PRESSURE_DAMAGE) - take_overall_damage(brute=pressure_damage, used_weapon = "High Pressure") - pressure_alert = 2 - else if(adjusted_pressure >= species.warning_high_pressure) - pressure_alert = 1 - else if(adjusted_pressure >= species.warning_low_pressure) - pressure_alert = 0 - else if(adjusted_pressure >= species.hazard_low_pressure) - pressure_alert = -1 - else - var/list/obj/item/organ/external/parts = get_damageable_organs() - for(var/obj/item/organ/external/O in parts) - if(QDELETED(O) || !(O.owner == src)) - continue - if(O.damage + (LOW_PRESSURE_DAMAGE) < O.min_broken_damage) //vacuum does not break bones - O.take_external_damage(brute = LOW_PRESSURE_DAMAGE, used_weapon = "Low Pressure") - if(getOxyLoss() < 55) // 11 OxyLoss per 4 ticks when wearing internals; unconsciousness in 16 ticks, roughly half a minute - adjustOxyLoss(4) // 16 OxyLoss per 4 ticks when no internals present; unconsciousness in 13 ticks, roughly twenty seconds - pressure_alert = -2 - - return - -/mob/living/carbon/human/proc/stabilize_body_temperature() - // We produce heat naturally. - if (species.passive_temp_gain) - bodytemperature += species.passive_temp_gain - - // Robolimbs cause overheating too. - if(robolimb_count) - bodytemperature += round(robolimb_count/2) - - if (species.body_temperature == null || isSynthetic()) - return //this species doesn't have metabolic thermoregulation - - var/body_temperature_difference = species.body_temperature - bodytemperature - - if (abs(body_temperature_difference) < 0.5) - return //fuck this precision - - if (on_fire) - return //too busy for pesky metabolic regulation - - if(bodytemperature < species.cold_level_1) //260.15 is 310.15 - 50, the temperature where you start to feel effects. - var/nut_remove = 10 * DEFAULT_HUNGER_FACTOR - if(nutrition >= nut_remove) //If we are very, very cold we'll use up quite a bit of nutriment to heat us up. - adjust_nutrition(-nut_remove) - bodytemperature += max((body_temperature_difference / BODYTEMP_AUTORECOVERY_DIVISOR), BODYTEMP_AUTORECOVERY_MINIMUM) - else if(species.cold_level_1 <= bodytemperature && bodytemperature <= species.heat_level_1) - bodytemperature += body_temperature_difference / BODYTEMP_AUTORECOVERY_DIVISOR - else if(bodytemperature > species.heat_level_1) //360.15 is 310.15 + 50, the temperature where you start to feel effects. - var/hyd_remove = 10 * DEFAULT_THIRST_FACTOR - if(hydration >= hyd_remove) - adjust_hydration(-hyd_remove) - bodytemperature += min((body_temperature_difference / BODYTEMP_AUTORECOVERY_DIVISOR), -BODYTEMP_AUTORECOVERY_MINIMUM) - - //This proc returns a number made up of the flags for body parts which you are protected on. (such as HEAD, UPPER_TORSO, LOWER_TORSO, etc. See setup.dm for the full list) -/mob/living/carbon/human/proc/get_heat_protection_flags(temperature) //Temperature is the temperature you're being exposed to. - . = 0 - //Handle normal clothing - for(var/obj/item/clothing/C in list(head,wear_suit,w_uniform,shoes,gloves,wear_mask)) - if(C) - if(C.max_heat_protection_temperature && C.max_heat_protection_temperature >= temperature) - . |= C.heat_protection - if(C.accessories.len) - for(var/obj/item/clothing/accessory/A in C.accessories) - if(A.max_heat_protection_temperature && A.max_heat_protection_temperature >= temperature) - . |= A.heat_protection - -//See proc/get_heat_protection_flags(temperature) for the description of this proc. -/mob/living/carbon/human/proc/get_cold_protection_flags(temperature) - . = 0 - //Handle normal clothing - for(var/obj/item/clothing/C in list(head,wear_suit,w_uniform,shoes,gloves,wear_mask)) - if(C) - if(C.min_cold_protection_temperature && C.min_cold_protection_temperature <= temperature) - . |= C.cold_protection - if(C.accessories.len) - for(var/obj/item/clothing/accessory/A in C.accessories) - if(A.min_cold_protection_temperature && A.min_cold_protection_temperature <= temperature) - . |= A.cold_protection - - -/mob/living/carbon/human/get_heat_protection(temperature) //Temperature is the temperature you're being exposed to. - var/thermal_protection_flags = get_heat_protection_flags(temperature) - return get_thermal_protection(thermal_protection_flags) - -/mob/living/carbon/human/get_cold_protection(temperature) - if(MUTATION_COLD_RESISTANCE in mutations) - return 1 //Fully protected from the cold. - - temperature = max(temperature, 2.7) //There is an occasional bug where the temperature is miscalculated in ares with a small amount of gas on them, so this is necessary to ensure that that bug does not affect this calculation. Space's temperature is 2.7K and most suits that are intended to protect against any cold, protect down to 2.0K. - var/thermal_protection_flags = get_cold_protection_flags(temperature) - return get_thermal_protection(thermal_protection_flags) - -/mob/living/carbon/human/proc/get_thermal_protection(var/flags) - .=0 - if(flags) - if(flags & HEAD) - . += THERMAL_PROTECTION_HEAD - if(flags & UPPER_TORSO) - . += THERMAL_PROTECTION_UPPER_TORSO - if(flags & LOWER_TORSO) - . += THERMAL_PROTECTION_LOWER_TORSO - if(flags & LEG_LEFT) - . += THERMAL_PROTECTION_LEG_LEFT - if(flags & LEG_RIGHT) - . += THERMAL_PROTECTION_LEG_RIGHT - if(flags & FOOT_LEFT) - . += THERMAL_PROTECTION_FOOT_LEFT - if(flags & FOOT_RIGHT) - . += THERMAL_PROTECTION_FOOT_RIGHT - if(flags & ARM_LEFT) - . += THERMAL_PROTECTION_ARM_LEFT - if(flags & ARM_RIGHT) - . += THERMAL_PROTECTION_ARM_RIGHT - if(flags & HAND_LEFT) - . += THERMAL_PROTECTION_HAND_LEFT - if(flags & HAND_RIGHT) - . += THERMAL_PROTECTION_HAND_RIGHT - return min(1,.) - -/mob/living/carbon/human/handle_chemicals_in_body() - - chem_effects.Cut() - - if(status_flags & GODMODE) - return 0 - - if(isSynthetic()) - return - - var/datum/reagents/metabolism/ingested = get_ingested_reagents() - - if(reagents) - if(touching) touching.metabolize() - if(bloodstr) bloodstr.metabolize() - if(ingested) metabolize_ingested_reagents() - - // Trace chemicals - for(var/T in chem_doses) - if(bloodstr?.has_reagent(T) || ingested?.has_reagent(T) || touching?.has_reagent(T)) - continue - var/datum/reagent/R = T - chem_doses[T] -= initial(R.metabolism)*2 - if(chem_doses[T] <= 0) - chem_doses -= T - - updatehealth() - -// Check if we should die. -/mob/living/carbon/human/proc/handle_death_check() - if(should_have_organ(BP_BRAIN)) - var/obj/item/organ/internal/brain/brain = internal_organs_by_name[BP_BRAIN] - if(!brain || (brain.status & ORGAN_DEAD)) - return TRUE - return species.handle_death_check(src) - -//DO NOT CALL handle_statuses() from this proc, it's called from living/Life() as long as this returns a true value. -/mob/living/carbon/human/handle_regular_status_updates() - if(!handle_some_updates()) - return 0 - - if(status_flags & GODMODE) return 0 - - //SSD check, if a logged player is awake put them back to sleep! - if(ssd_check() && species.get_ssd(src) || player_triggered_sleeping) - Sleeping(2) - if(stat == DEAD) //DEAD. BROWN BREAD. SWIMMING WITH THE SPESS CARP - blinded = 1 - silent = 0 - else //ALIVE. LIGHTS ARE ON - updatehealth() //TODO - - if(handle_death_check()) - death() - blinded = 1 - silent = 0 - return 1 - - if(hallucination_power) - handle_hallucinations() - - if(get_shock() >= species.total_health) - if(!stat) - to_chat(src, "[species.halloss_message_self]") - src.visible_message("[src] [species.halloss_message]") - Paralyse(10) - - if(paralysis || sleeping) - blinded = 1 - set_stat(UNCONSCIOUS) - animate_tail_reset() - adjustHalLoss(-3) - if(sleeping) - if (!dream_timer && client) - dream_timer = addtimer(CALLBACK(src, .proc/dream), 10 SECONDS, TIMER_STOPPABLE) - if (mind || ai_holder) - //Are they SSD? If so we'll keep them asleep but work off some of that sleep var in case of stoxin or similar. - if (client || ai_holder || sleeping > 3) - AdjustSleeping(-1) - species.handle_sleeping(src) - if(prob(2) && is_asystole() && isSynthetic()) - visible_message("[src] [pick("emits low pitched whirr","beeps urgently")]") - //CONSCIOUS - else - set_stat(CONSCIOUS) - - // Check everything else. - - //Periodically double-check embedded_flag - if(embedded_flag && !(life_tick % 10)) - if(!embedded_needs_process()) - embedded_flag = 0 - - //Resting - if(resting) - dizziness = max(0, dizziness - 15) - jitteriness = max(0, jitteriness - 15) - adjustHalLoss(-3) - else - dizziness = max(0, dizziness - 3) - jitteriness = max(0, jitteriness - 3) - adjustHalLoss(-1) - - if (drowsyness > 0) - drowsyness = max(0, drowsyness-1) - eye_blurry = max(2, eye_blurry) - if(drowsyness > 10) - var/zzzchance = min(5, 5*drowsyness/30) - if((prob(zzzchance) || drowsyness >= 60)) - if(stat == CONSCIOUS) - to_chat(src, "You are about to fall asleep...") - Sleeping(5) - - // If you're dirty, your gloves will become dirty, too. - if(gloves && germ_level > gloves.germ_level && prob(10)) - gloves.germ_level += 1 - - if(vsc.plc.CONTAMINATION_LOSS) - var/total_phoronloss = 0 - for(var/obj/item/I in src) - if(I.contaminated) - total_phoronloss += vsc.plc.CONTAMINATION_LOSS - adjustToxLoss(total_phoronloss) - - // nutrition decrease - if(nutrition > 0) - adjust_nutrition(-species.hunger_factor) - if(hydration > 0) - adjust_hydration(-species.thirst_factor) - - if(stasis_value > 1 && drowsyness < stasis_value * 4) - drowsyness += min(stasis_value, 3) - if(!stat && prob(1)) - to_chat(src, "You feel slow and sluggish...") - - return 1 - -/mob/living/carbon/human/handle_regular_hud_updates() - if(hud_updateflag) // update our mob's hud overlays, AKA what others see flaoting above our head - handle_hud_list() - - // now handle what we see on our screen - - if(!..()) - return - - if(stat != DEAD) - if(stat == UNCONSCIOUS && health < maxHealth/2) - //Critical damage passage overlay - var/severity = 0 - switch(health - maxHealth/2) - if(-20 to -10) severity = 1 - if(-30 to -20) severity = 2 - if(-40 to -30) severity = 3 - if(-50 to -40) severity = 4 - if(-60 to -50) severity = 5 - if(-70 to -60) severity = 6 - if(-80 to -70) severity = 7 - if(-90 to -80) severity = 8 - if(-95 to -90) severity = 9 - if(-INFINITY to -95) severity = 10 - overlay_fullscreen("crit", /obj/screen/fullscreen/crit, severity) - else - clear_fullscreen("crit") - //Oxygen damage overlay - if(getOxyLoss()) - var/severity = 0 - switch(getOxyLoss()) - if(10 to 20) severity = 1 - if(20 to 25) severity = 2 - if(25 to 30) severity = 3 - if(30 to 35) severity = 4 - if(35 to 40) severity = 5 - if(40 to 45) severity = 6 - if(45 to INFINITY) severity = 7 - overlay_fullscreen("oxy", /obj/screen/fullscreen/oxy, severity) - else - clear_fullscreen("oxy") - - //Fire and Brute damage overlay (BSSR) - var/hurtdamage = src.getBruteLoss() + src.getFireLoss() + damageoverlaytemp - damageoverlaytemp = 0 // We do this so we can detect if someone hits us or not. - if(hurtdamage) - var/severity = 0 - switch(hurtdamage) - if(10 to 25) severity = 1 - if(25 to 40) severity = 2 - if(40 to 55) severity = 3 - if(55 to 70) severity = 4 - if(70 to 85) severity = 5 - if(85 to INFINITY) severity = 6 - overlay_fullscreen("brute", /obj/screen/fullscreen/brute, severity) - else - clear_fullscreen("brute") - - if(healths) - healths.overlays.Cut() - if (chem_effects[CE_PAINKILLER] > 100) - healths.icon_state = "health_numb" - else - // Generate a by-limb health display. - healths.icon_state = "blank" - - var/no_damage = 1 - var/trauma_val = 0 // Used in calculating softcrit/hardcrit indicators. - if(can_feel_pain()) - trauma_val = max(shock_stage,get_shock())/(species.total_health-100) - // Collect and apply the images all at once to avoid appearance churn. - var/list/health_images = list() - for(var/obj/item/organ/external/E in organs) - if(no_damage && (E.brute_dam || E.burn_dam)) - no_damage = 0 - health_images += E.get_damage_hud_image() - - // Apply a fire overlay if we're burning. - if(on_fire) - health_images += image('icons/mob/screen1_health.dmi',"burning") - - // Show a general pain/crit indicator if needed. - if(is_asystole()) - health_images += image('icons/mob/screen1_health.dmi',"hardcrit") - else if(trauma_val) - if(can_feel_pain()) - if(trauma_val > 0.7) - health_images += image('icons/mob/screen1_health.dmi',"softcrit") - if(trauma_val >= 1) - health_images += image('icons/mob/screen1_health.dmi',"hardcrit") - else if(no_damage) - health_images += image('icons/mob/screen1_health.dmi',"fullhealth") - - healths.overlays += health_images - - if(nutrition_icon) - switch(nutrition) - if(450 to INFINITY) nutrition_icon.icon_state = "nutrition0" - if(350 to 450) nutrition_icon.icon_state = "nutrition1" - if(250 to 350) nutrition_icon.icon_state = "nutrition2" - if(150 to 250) nutrition_icon.icon_state = "nutrition3" - else nutrition_icon.icon_state = "nutrition4" - - if(hydration_icon) - switch(hydration) - if(450 to INFINITY) hydration_icon.icon_state = "hydration0" - if(350 to 450) hydration_icon.icon_state = "hydration1" - if(250 to 350) hydration_icon.icon_state = "hydration2" - if(150 to 250) hydration_icon.icon_state = "hydration3" - else hydration_icon.icon_state = "hydration4" - - if(cells && isSynthetic()) - var/obj/item/organ/internal/cell/C = internal_organs_by_name[BP_CELL] - if (istype(C)) - var/chargeNum = clamp(Ceil(C.percent()/25), 0, 4) //0-100 maps to 0-4, but give it a paranoid clamp just in case. - cells.icon_state = "charge[chargeNum]" - else - cells.icon_state = "charge-empty" - - if(pressure) - pressure.icon_state = "pressure[pressure_alert]" - if(toxin) - toxin.icon_state = "tox[phoron_alert ? "1" : "0"]" - if(oxygen) - oxygen.icon_state = "oxy[oxygen_alert ? "1" : "0"]" - if(fire) - fire.icon_state = "fire[fire_alert ? fire_alert : 0]" - - if(bodytemp) - if (!species) - switch(bodytemperature) //310.055 optimal body temp - if(370 to INFINITY) bodytemp.icon_state = "temp4" - if(350 to 370) bodytemp.icon_state = "temp3" - if(335 to 350) bodytemp.icon_state = "temp2" - if(320 to 335) bodytemp.icon_state = "temp1" - if(300 to 320) bodytemp.icon_state = "temp0" - if(295 to 300) bodytemp.icon_state = "temp-1" - if(280 to 295) bodytemp.icon_state = "temp-2" - if(260 to 280) bodytemp.icon_state = "temp-3" - else bodytemp.icon_state = "temp-4" - else - //TODO: precalculate all of this stuff when the species datum is created - var/base_temperature = species.body_temperature - if(base_temperature == null) //some species don't have a set metabolic temperature - base_temperature = (getSpeciesOrSynthTemp(HEAT_LEVEL_1) + getSpeciesOrSynthTemp(COLD_LEVEL_1))/2 - - var/temp_step - if (bodytemperature >= base_temperature) - temp_step = (getSpeciesOrSynthTemp(HEAT_LEVEL_1) - base_temperature)/4 - - if (bodytemperature >= getSpeciesOrSynthTemp(HEAT_LEVEL_1)) - bodytemp.icon_state = "temp4" - else if (bodytemperature >= base_temperature + temp_step*3) - bodytemp.icon_state = "temp3" - else if (bodytemperature >= base_temperature + temp_step*2) - bodytemp.icon_state = "temp2" - else if (bodytemperature >= base_temperature + temp_step*1) - bodytemp.icon_state = "temp1" - else - bodytemp.icon_state = "temp0" - - else if (bodytemperature < base_temperature) - temp_step = (base_temperature - getSpeciesOrSynthTemp(COLD_LEVEL_1))/4 - - if (bodytemperature <= getSpeciesOrSynthTemp(COLD_LEVEL_1)) - bodytemp.icon_state = "temp-4" - else if (bodytemperature <= base_temperature - temp_step*3) - bodytemp.icon_state = "temp-3" - else if (bodytemperature <= base_temperature - temp_step*2) - bodytemp.icon_state = "temp-2" - else if (bodytemperature <= base_temperature - temp_step*1) - bodytemp.icon_state = "temp-1" - else - bodytemp.icon_state = "temp0" - return 1 - -/mob/living/carbon/human/handle_random_events() - // Puke if toxloss is too high - var/vomit_score = 0 - for(var/tag in list(BP_LIVER,BP_KIDNEYS)) - var/obj/item/organ/internal/I = internal_organs_by_name[tag] - if(I) - vomit_score += I.damage - else if (should_have_organ(tag)) - vomit_score += 45 - if(chem_effects[CE_TOXIN] || radiation) - vomit_score += 0.5 * getToxLoss() - if(chem_effects[CE_ALCOHOL_TOXIC]) - vomit_score += 10 * chem_effects[CE_ALCOHOL_TOXIC] - if(chem_effects[CE_ALCOHOL]) - vomit_score += 10 - if(stat != DEAD && vomit_score > 25 && prob(10)) - vomit(vomit_score, vomit_score/25) - - //0.1% chance of playing a scary sound to someone who's in complete darkness - if(isturf(loc) && rand(1,1000) == 1) - var/turf/T = loc - if(T.get_lumcount() <= LIGHTING_SOFT_THRESHOLD) - playsound_local(src,pick(GLOB.scarySounds),50, 1, -1) - - var/area/A = get_area(src) - if(client && world.time >= client.next_ambience_time + 5 MINUTES) - A.play_ambience(src) - if(stat == UNCONSCIOUS && world.time - l_move_time < 5 && prob(10)) - to_chat(src,"You feel like you're [pick("moving","flying","floating","falling","hovering")].") - -/mob/living/carbon/human/proc/handle_changeling() - - if(mind && mind.changeling) - mind.changeling.regenerate() - - -/mob/living/carbon/human/proc/handle_shock() - if(status_flags & GODMODE) return 0 //godmode - if(!can_feel_pain()) - shock_stage = 0 - return - - if(is_asystole()) - shock_stage = max(shock_stage + 1, 61) - var/traumatic_shock = get_shock() - if(traumatic_shock >= max(30, 0.8*shock_stage)) - shock_stage += 1 - else if (!is_asystole()) - shock_stage = min(shock_stage, 160) - var/recovery = 1 - if(traumatic_shock < 0.5 * shock_stage) //lower shock faster if pain is gone completely - recovery++ - if(traumatic_shock < 0.25 * shock_stage) - recovery++ - shock_stage = max(shock_stage - recovery, 0) - return - if(stat) return 0 - - if(shock_stage == 10) - // Please be very careful when calling custom_pain() from within code that relies on pain/trauma values. There's the - // possibility of a feedback loop from custom_pain() being called with a positive power, incrementing pain on a limb, - // which triggers this proc, which calls custom_pain(), etc. Make sure you call it with nohalloss = TRUE in these cases! - custom_pain("[pick("It hurts so much", "You really need some painkillers", "Dear god, the pain")]!", 10, nohalloss = TRUE) - - if(shock_stage >= 30) - if(shock_stage == 30) visible_message("[src] is having trouble keeping \his eyes open.") - if(prob(30)) - eye_blurry = max(2, eye_blurry) - stuttering = max(stuttering, 5) - - if(shock_stage >= 40) //INF, WAS if(shock_stage == 40) - if(prob(5)) //INF - custom_pain("[pick("The pain is excruciating", "Please, just end the pain", "Your whole body is going numb")]!", 40, nohalloss = TRUE) - src.agony_moan() //INF, WAS emote("moan") - - if (shock_stage >= 60) - if(shock_stage == 60) visible_message("[src]'s body becomes limp.") - if (prob(2)) - custom_pain("[pick("The pain is excruciating", "Please, just end the pain", "Your whole body is going numb")]!", shock_stage, nohalloss = TRUE) - Weaken(10) - - if(shock_stage >= 80) - if (prob(5)) - custom_pain("[pick("The pain is excruciating", "Please, just end the pain", "Your whole body is going numb")]!", shock_stage, nohalloss = TRUE) - Weaken(20) - - if(shock_stage >= 120) - if (prob(2)) - custom_pain("[pick("You black out", "You feel like you could die any moment now", "You're about to lose consciousness")]!", shock_stage, nohalloss = TRUE) - Paralyse(5) - - if(shock_stage == 150) - visible_message("[src] can no longer stand, collapsing!") - Weaken(20) - - if(shock_stage >= 150) - Weaken(20) - -/* - Called by life(), instead of having the individual hud items update icons each tick and check for status changes - we only set those statuses and icons upon changes. Then those HUD items will simply add those pre-made images. - This proc below is only called when those HUD elements need to change as determined by the mobs hud_updateflag. -*/ - - -/mob/living/carbon/human/proc/handle_hud_list() - if (GET_BIT(hud_updateflag, HEALTH_HUD) && hud_list[HEALTH_HUD]) - var/image/holder = hud_list[HEALTH_HUD] - if(stat == DEAD) - holder.icon_state = "0" // X_X - else if(is_asystole()) - holder.icon_state = "flatline" - else - holder.icon_state = "[pulse()]" - hud_list[HEALTH_HUD] = holder - - if (GET_BIT(hud_updateflag, LIFE_HUD) && hud_list[LIFE_HUD]) - var/image/holder = hud_list[LIFE_HUD] - if(stat == DEAD) - holder.icon_state = "huddead" - else - holder.icon_state = "hudhealthy" - hud_list[LIFE_HUD] = holder - - if (GET_BIT(hud_updateflag, STATUS_HUD) && hud_list[STATUS_HUD] && hud_list[STATUS_HUD_OOC]) - var/image/holder = hud_list[STATUS_HUD] - if(stat == DEAD) - holder.icon_state = "huddead" - - else if(has_brain_worms()) - var/mob/living/simple_animal/borer/B = has_brain_worms() - if(B.controlling) - holder.icon_state = "hudbrainworm" - else - holder.icon_state = "hudhealthy" - else - holder.icon_state = "hudhealthy" - - var/image/holder2 = hud_list[STATUS_HUD_OOC] - if(stat == DEAD) - holder2.icon_state = "huddead" - else if(has_brain_worms()) - holder2.icon_state = "hudbrainworm" - else - holder2.icon_state = "hudhealthy" - - hud_list[STATUS_HUD] = holder - hud_list[STATUS_HUD_OOC] = holder2 - - if (GET_BIT(hud_updateflag, ID_HUD) && hud_list[ID_HUD]) - var/image/holder = hud_list[ID_HUD] - holder.icon_state = "hudunknown" - if(wear_id) - var/obj/item/card/id/I = wear_id.GetIdCard() - if(I) - //[INF] There is no job "Centcom" - if(I.GetJobName() == "Centcom") - holder.icon_state = "hudcentcom" - else - //[/INF] - var/datum/job/J = SSjobs.get_by_title(I.GetJobName()) - if(J) - holder.icon_state = J.hud_icon - - hud_list[ID_HUD] = holder - - if (GET_BIT(hud_updateflag, WANTED_HUD) && hud_list[WANTED_HUD]) - var/image/holder = hud_list[WANTED_HUD] - holder.icon_state = "hudblank" - var/perpname = name - if(wear_id) - var/obj/item/card/id/I = wear_id.GetIdCard() - if(I) - perpname = I.registered_name - - var/datum/computer_file/report/crew_record/E = get_crewmember_record(perpname) - if(E) - switch(E.get_criminalStatus()) - if("Arrest") - holder.icon_state = "hudwanted" - if("Incarcerated") - holder.icon_state = "hudprisoner" - if("Parolled") - holder.icon_state = "hudparolled" - if("Released") - holder.icon_state = "hudreleased" - hud_list[WANTED_HUD] = holder - - if ( GET_BIT(hud_updateflag, IMPLOYAL_HUD) \ - || GET_BIT(hud_updateflag, IMPCHEM_HUD) \ - || GET_BIT(hud_updateflag, IMPTRACK_HUD)) - - var/image/holder1 = hud_list[IMPTRACK_HUD] - var/image/holder2 = hud_list[IMPLOYAL_HUD] - var/image/holder3 = hud_list[IMPCHEM_HUD] - - holder1.icon_state = "hudblank" - holder2.icon_state = "hudblank" - holder3.icon_state = "hudblank" - - for(var/obj/item/implant/I in src) - if(I.implanted) - if(istype(I,/obj/item/implant/tracking)) - holder1.icon_state = "hud_imp_tracking" - if(istype(I,/obj/item/implant/loyalty)) - holder2.icon_state = "hud_imp_loyal" - if(istype(I,/obj/item/implant/chem)) - holder3.icon_state = "hud_imp_chem" - - hud_list[IMPTRACK_HUD] = holder1 - hud_list[IMPLOYAL_HUD] = holder2 - hud_list[IMPCHEM_HUD] = holder3 - - if (GET_BIT(hud_updateflag, SPECIALROLE_HUD)) - var/image/holder = hud_list[SPECIALROLE_HUD] - holder.icon_state = "hudblank" - if(mind && mind.special_role) - if(GLOB.hud_icon_reference[mind.special_role]) - holder.icon_state = GLOB.hud_icon_reference[mind.special_role] - else - holder.icon_state = "hudsyndicate" - hud_list[SPECIALROLE_HUD] = holder - hud_updateflag = 0 - -/mob/living/carbon/human/handle_stunned() - if(!can_feel_pain()) - stunned = 0 - return 0 - return ..() - -/mob/living/carbon/human/handle_fire() - if(..()) - return - - var/burn_temperature = fire_burn_temperature() - var/thermal_protection = get_heat_protection(burn_temperature) - - if (thermal_protection < 1 && bodytemperature < burn_temperature) - bodytemperature += round(BODYTEMP_HEATING_MAX*(1-thermal_protection), 1) - - var/species_heat_mod = 1 - - var/protected_limbs = get_heat_protection_flags(burn_temperature) - - - if(species) - if(burn_temperature < species.heat_level_2) - species_heat_mod = 0.5 - else if(burn_temperature < species.heat_level_3) - species_heat_mod = 0.75 - - burn_temperature -= species.heat_level_1 - - if(burn_temperature < 1) - return - - for(var/obj/item/organ/external/E in organs) - if(!(E.body_part & protected_limbs) && prob(20)) - E.take_external_damage(burn = round(species_heat_mod * log(10, (burn_temperature + 10)), 0.1), used_weapon = "fire") - -/mob/living/carbon/human/rejuvenate() - restore_blood() - full_prosthetic = null - shock_stage = 0 - ..() - adjust_stamina(100) - UpdateAppearance() - -/mob/living/carbon/human/reset_view(atom/A) - ..() - if(machine_visual && machine_visual != A) - machine_visual.remove_visual(src) - -/mob/living/carbon/human/handle_vision() - if(client) - client.screen.Remove(GLOB.global_hud.nvg, GLOB.global_hud.thermal, GLOB.global_hud.meson, GLOB.global_hud.science) - if(machine) - var/viewflags = machine.check_eye(src) - machine.apply_visual(src) - if(viewflags < 0) - reset_view(null, 0) - else if(viewflags) - set_sight(sight|viewflags) - else if(eyeobj) - if(eyeobj.owner != src) - reset_view(null) - else - var/isRemoteObserve = 0 - if(z_eye && client.eye == z_eye && !is_physically_disabled()) - isRemoteObserve = 1 - else if((mRemote in mutations) && remoteview_target) - if(remoteview_target.stat == CONSCIOUS) - isRemoteObserve = 1 - if(!isRemoteObserve && client && !client.adminobs) - remoteview_target = null - reset_view(null, 0) - - update_equipment_vision() - species.handle_vision(src) - -/mob/living/carbon/human/update_living_sight() - ..() - if((CE_THIRDEYE in chem_effects) || (MUTATION_XRAY in mutations)) - set_sight(sight|SEE_TURFS|SEE_MOBS|SEE_OBJS) - -/mob/living/ssd_check() - . = ..() - - if (!.) - return - - return !ai_holder diff --git a/code/modules/mob/living/carbon/human/login.dm b/code/modules/mob/living/carbon/human/login.dm deleted file mode 100644 index ea44d6d168058..0000000000000 --- a/code/modules/mob/living/carbon/human/login.dm +++ /dev/null @@ -1,5 +0,0 @@ -/mob/living/carbon/human/Login() - ..() - update_hud() - if(species) species.handle_login_special(src) - return \ No newline at end of file diff --git a/code/modules/mob/living/carbon/human/logout.dm b/code/modules/mob/living/carbon/human/logout.dm deleted file mode 100644 index f449ce991ad5a..0000000000000 --- a/code/modules/mob/living/carbon/human/logout.dm +++ /dev/null @@ -1,4 +0,0 @@ -/mob/living/carbon/human/Logout() - ..() - if(species) species.handle_logout_special(src) - return \ No newline at end of file diff --git a/code/modules/mob/living/carbon/human/machine_limb_functions.dm b/code/modules/mob/living/carbon/human/machine_limb_functions.dm deleted file mode 100644 index 980d8bfc81774..0000000000000 --- a/code/modules/mob/living/carbon/human/machine_limb_functions.dm +++ /dev/null @@ -1,93 +0,0 @@ -/datum/species/machine - inherent_verbs = list(/mob/living/carbon/human/proc/detach_limb, /mob/living/carbon/human/proc/attach_limb) - -/mob/living/carbon/human/proc/detach_limb() - set category = "Abilities" - set name = "Detach Limb" - set desc = "Detach one of your robotic appendages." - - if(last_special > world.time) - return - - if(stat || paralysis || stunned || weakened || lying || restrained()) - to_chat(src,"You can't do that in your current state!") - return - - var/obj/item/organ/external/E = get_organ(zone_sel.selecting) - - if(!E) - to_chat(src,"You are missing that limb.") - return - - if(!BP_IS_ROBOTIC(E)) - to_chat(src,"You can only detach robotic limbs.") - return - - if(E.is_stump() || E.is_broken()) - to_chat(src,"The limb is too damaged to be removed manually!") - return - - if(E.vital) - to_chat(src,"Your safety system stops you from removing \the [E].") - return - - if(!do_after(src, 2 SECONDS, src)) return - - last_special = world.time + 20 - - E.removed(src) - E.forceMove(get_turf(src)) - - update_body() - updatehealth() - UpdateDamageIcon() - - visible_message("\The [src] detaches \his [E]!", - "You detach your [E]!") - -/mob/living/carbon/human/proc/attach_limb() - set category = "Abilities" - set name = "Attach Limb" - set desc = "Attach a robotic limb to your body." - - if(last_special > world.time) - return - - if(stat || paralysis || stunned || weakened || lying || restrained()) - to_chat(src,"You can not do that in your current state!") - return - - var/obj/item/organ/external/O = src.get_active_hand() - - if(istype(O)) - - if(!BP_IS_ROBOTIC(O)) - to_chat(src,"You are unable to interface with organic matter.") - return - - if(!O) - return - - - var/obj/item/organ/external/E = get_organ(zone_sel.selecting) - - if(E) - to_chat(src,"You are not missing that limb.") - return - - if(!do_after(src, 2 SECONDS, src)) return - - last_special = world.time + 20 - - src.drop_from_inventory(O) - O.replaced(src) - src.update_body() - src.updatehealth() - src.UpdateDamageIcon() - - update_body() - updatehealth() - UpdateDamageIcon() - - visible_message("\The [src] attaches \the [O] to \his body!", - "You attach \the [O] to your body!") diff --git a/code/modules/mob/living/carbon/human/npcs.dm b/code/modules/mob/living/carbon/human/npcs.dm deleted file mode 100644 index 8e1db64b6e5d6..0000000000000 --- a/code/modules/mob/living/carbon/human/npcs.dm +++ /dev/null @@ -1,49 +0,0 @@ -/mob/living/carbon/human/monkey/punpun/New() - ..() - name = "Pun Pun" - real_name = name - var/obj/item/clothing/C - if(prob(50)) - C = new /obj/item/clothing/under/punpun(src) - equip_to_appropriate_slot(C) - else - C = new /obj/item/clothing/under/punpants(src) - C.attach_accessory(null, new/obj/item/clothing/accessory/toggleable/hawaii/random(src)) - equip_to_appropriate_slot(C) - if(prob(10)) - C = new/obj/item/clothing/head/collectable/petehat(src) - equip_to_appropriate_slot(C) - -/decl/hierarchy/outfit/blank_subject - name = "Test Subject" - uniform = /obj/item/clothing/under/color/white - shoes = /obj/item/clothing/shoes/white - head = /obj/item/clothing/head/helmet/facecover - mask = /obj/item/clothing/mask/muzzle - suit = /obj/item/clothing/suit/straight_jacket - -/decl/hierarchy/outfit/blank_subject/post_equip(mob/living/carbon/human/H) - ..() - var/obj/item/clothing/under/color/white/C = locate() in H - if(C) - C.has_sensor = SUIT_LOCKED_SENSORS - C.sensor_mode = SUIT_SENSOR_OFF - -/mob/living/carbon/human/blank/New(var/new_loc) - ..(new_loc, "Vat-Grown Human") - -/mob/living/carbon/human/blank/Initialize() - ..() - return INITIALIZE_HINT_LATELOAD - -/mob/living/carbon/human/blank/LateInitialize() - var/number = "[pick(possible_changeling_IDs)]-[rand(1,30)]" - fully_replace_character_name("Subject [number]") - var/decl/hierarchy/outfit/outfit = outfit_by_type(/decl/hierarchy/outfit/blank_subject) - outfit.equip(src) - var/obj/item/clothing/head/helmet/facecover/F = locate() in src - if (F) - F.SetName("[F.name] ([number])") - -/mob/living/carbon/human/blank/ssd_check() - return FALSE diff --git a/code/modules/mob/living/carbon/human/say.dm b/code/modules/mob/living/carbon/human/say.dm deleted file mode 100644 index 07cac52e20cb6..0000000000000 --- a/code/modules/mob/living/carbon/human/say.dm +++ /dev/null @@ -1,245 +0,0 @@ -/mob/living/carbon/human/say(var/message, var/datum/language/speaking = null, whispering) - if(name != GetVoice()) - if(get_id_name("Unknown") == GetVoice()) - SetName(get_id_name("Unknown")) - - //parse the language code and consume it - if(!speaking) - speaking = parse_language(message) - if (speaking) - message = copytext_char(message, 2+length(speaking.key)) - else - speaking = get_any_good_language(set_default=TRUE) - if (!speaking) - to_chat(src, SPAN_WARNING("You don't know a language and cannot speak.")) - emote("custom", AUDIBLE_MESSAGE, "[pick("grunts", "babbles", "gibbers", "jabbers", "burbles")] aimlessly.") - return - - if(has_chem_effect(CE_VOICELOSS, 1)) - whispering = TRUE - - message = sanitize(message) - var/obj/item/organ/internal/voicebox/vox = locate() in internal_organs - var/snowflake_speak = (speaking && (speaking.flags & (NONVERBAL|SIGNLANG))) || (vox && vox.is_usable() && vox.assists_languages[speaking]) - if(!isSynthetic() && need_breathe() && failed_last_breath && !snowflake_speak) - var/obj/item/organ/internal/lungs/L = internal_organs_by_name[species.breathing_organ] - if(!L || L.breath_fail_ratio > 0.9) - if(L && world.time < L.last_successful_breath + 2 MINUTES) //if we're in grace suffocation period, give it up for last words - to_chat(src, "You use your remaining air to say something!") - L.last_successful_breath = world.time - 2 MINUTES - return ..(message, speaking = speaking) - - to_chat(src, "You don't have enough air[L ? " in [L]" : ""] to make a sound!") - return - else if(L.breath_fail_ratio > 0.7) - whisper_say(length(message) > 5 ? stars(message) : message, speaking) - else if(L.breath_fail_ratio > 0.4 && length(message) > 10) - whisper_say(message, speaking) - else - return ..(message, speaking = speaking, whispering = whispering) - - -/mob/living/carbon/human/proc/forcesay(list/append) - if(stat == CONSCIOUS) - if(client) - var/virgin = 1 //has the text been modified yet? - var/temp = winget(client, "input", "text") - if(findtextEx(temp, "Say \"", 1, 7) && length(temp) > 5) //case sensitive means - var/main_key = get_prefix_key(/decl/prefix/radio_main_channel) - temp = replacetext_char(temp, main_key, "") //general radio - - var/channel_key = get_prefix_key(/decl/prefix/radio_channel_selection) - if(findtext(trim_left(temp), channel_key, 6, 7)) //dept radio - temp = copytext_char(trim_left(temp), 8) - virgin = 0 - - if(virgin) - temp = copytext_char(trim_left(temp), 6) //normal speech - virgin = 0 - - while(findtext(trim_left(temp), channel_key, 1, 2)) //dept radio again (necessary) - temp = copytext_char(trim_left(temp), 3) - - var/custom_emote_key = get_prefix_key(/decl/prefix/custom_emote) - if(findtext(temp, custom_emote_key, 1, 2)) //emotes - return - temp = copytext_char(trim_left(temp), 1, rand(5,8)) - - var/trimmed = trim_left(temp) - if(length(trimmed)) - if(append) - temp += pick(append) - - say(temp) - winset(client, "input", "text=[null]") - -/mob/living/carbon/human/say_understands(var/mob/other,var/datum/language/speaking = null) - - if(has_brain_worms()) //Brain worms translate everything. Even mice and alien speak. - return 1 - - if(species.can_understand(other)) - return 1 - - //These only pertain to common. Languages are handled by mob/say_understands() - if (!speaking) - if (istype(other, /mob/living/carbon/alien/diona)) - if(other.languages.len >= 2) //They've sucked down some blood and can speak common now. - return 1 - if (istype(other, /mob/living/silicon)) - return 1 - if (istype(other, /mob/living/carbon/brain)) - return 1 - if (istype(other, /mob/living/carbon/slime)) - return 1 - - //This is already covered by mob/say_understands() - //if (istype(other, /mob/living/simple_animal)) - // if((other.universal_speak && !speaking) || src.universal_speak || src.universal_understand) - // return 1 - // return 0 - - return ..() - -/mob/living/carbon/human/GetVoice() - - var/voice_sub - if(istype(back,/obj/item/rig)) - var/obj/item/rig/rig = back - // todo: fix this shit - if(rig.speech && rig.speech.voice_holder && rig.speech.voice_holder.active && rig.speech.voice_holder.voice) - voice_sub = rig.speech.voice_holder.voice - - if(!voice_sub) - - var/list/check_gear = list(wear_mask, head) - if(wearing_rig) - var/datum/extension/armor/rig/armor_datum = get_extension(wearing_rig, /datum/extension/armor) - if(istype(armor_datum) && armor_datum.sealed && wearing_rig.helmet == head) - check_gear |= wearing_rig - - for(var/obj/item/gear in check_gear) - if(!gear) - continue - var/obj/item/voice_changer/changer = locate() in gear - if(changer && changer.active && changer.voice) - voice_sub = changer.voice - - if(voice_sub) - return voice_sub - if(mind && mind.changeling && mind.changeling.mimicing) - return mind.changeling.mimicing - return real_name - -/mob/living/carbon/human/say_quote(var/message, var/datum/language/speaking = null) - var/verb = "говорит" //INF, WAS var/verb = "says" - var/ending = copytext_char(message, length(message)) - - if(speaking) - verb = speaking.get_spoken_verb(ending) - else - if(ending == "!") - verb = pick("восклицает","выкрикивает") //INF, WAS verb=pick("exclaims","shouts","yells") - else if(ending == "?") - verb = "спрашивает" //INF, WAS verb="asks - return verb - -/mob/living/carbon/human/handle_speech_problems(var/list/message_data) - if(silent || (sdisabilities & MUTED)) - message_data[1] = "" - . = 1 - - else if(istype(wear_mask, /obj/item/clothing/mask)) - var/obj/item/clothing/mask/M = wear_mask - if(M.voicechange) - message_data[1] = pick(M.say_messages) - message_data[2] = pick(M.say_verbs) - . = 1 - - else - . = ..(message_data) - -/mob/living/carbon/human/handle_message_mode(message_mode, message, verb, speaking, used_radios, alt_name) - switch(message_mode) - if("intercom") - if(!src.restrained()) - for(var/obj/item/device/radio/I in view(1)) - if(I.intercom_handling) - I.talk_into(src, message, null, verb, speaking) - I.add_fingerprint(src) - used_radios += I - if("headset") - if(l_ear && istype(l_ear,/obj/item/device/radio)) - var/obj/item/device/radio/R = l_ear - R.talk_into(src,message,null,verb,speaking) - used_radios += l_ear - else if(r_ear && istype(r_ear,/obj/item/device/radio)) - var/obj/item/device/radio/R = r_ear - R.talk_into(src,message,null,verb,speaking) - used_radios += r_ear - if("right ear") - var/obj/item/device/radio/R - var/has_radio = 0 - if(r_ear && istype(r_ear,/obj/item/device/radio)) - R = r_ear - has_radio = 1 - if(r_hand && istype(r_hand, /obj/item/device/radio)) - R = r_hand - has_radio = 1 - if(has_radio) - R.talk_into(src,message,null,verb,speaking) - used_radios += R - if("left ear") - var/obj/item/device/radio/R - var/has_radio = 0 - if(l_ear && istype(l_ear,/obj/item/device/radio)) - R = l_ear - has_radio = 1 - if(l_hand && istype(l_hand,/obj/item/device/radio)) - R = l_hand - has_radio = 1 - if(has_radio) - R.talk_into(src,message,null,verb,speaking) - used_radios += R - if("whisper") //It's going to get sanitized again immediately, so decode. - whisper_say(html_decode(message), speaking, alt_name) - return 1 - else - if(message_mode) - if(l_ear && istype(l_ear,/obj/item/device/radio)) - l_ear.talk_into(src,message, message_mode, verb, speaking) - used_radios += l_ear - else if(r_ear && istype(r_ear,/obj/item/device/radio)) - r_ear.talk_into(src,message, message_mode, verb, speaking) - used_radios += r_ear - -/mob/living/carbon/human/handle_speech_sound() - if(species.name == SPECIES_HUMAN) // infinity. needed for gender check - species.speech_sounds = GLOB.human_clearing_throat[gender] - if(species.speech_sounds && prob(species.speech_chance)) - var/list/returns[2] - returns[1] = sound(pick(species.speech_sounds)) - returns[2] = 50 - return returns - return ..() - -/mob/living/carbon/human/can_speak(datum/language/speaking) - if(species && speaking && (speaking.name in species.assisted_langs)) - for(var/obj/item/organ/internal/voicebox/I in src.internal_organs) - if(I.is_usable() && I.assists_languages[speaking]) - return TRUE - return FALSE - . = ..() - -/mob/living/carbon/human/parse_language(var/message) - var/prefix = copytext_char(message,1,2) - if(length(message) >= 1 && prefix == get_prefix_key(/decl/prefix/audible_emote)) - return all_languages["Noise"] - - if(length(message) >= 2 && is_language_prefix(prefix)) - var/language_prefix = lowertext(copytext_char(message, 2 ,3)) - var/datum/language/L = language_keys[language_prefix] - if (can_speak(L)) - return L - - return null diff --git a/code/modules/mob/living/carbon/human/stripping.dm b/code/modules/mob/living/carbon/human/stripping.dm deleted file mode 100644 index 483475e915c87..0000000000000 --- a/code/modules/mob/living/carbon/human/stripping.dm +++ /dev/null @@ -1,190 +0,0 @@ -/mob/living/carbon/human/proc/handle_strip(var/slot_to_strip_text,var/mob/living/user,var/obj/item/clothing/holder) - if(!slot_to_strip_text || !istype(user)) - return - - if(user.incapacitated() || !user.Adjacent(src)) - show_browser(user, null, "window=mob[src.name]") - return TRUE - - var/strip_delay = HUMAN_STRIP_DELAY - - // Are we placing or stripping? - var/stripping = FALSE - var/obj/item/held = user.get_active_hand() - - if (istype(held, /obj/item/grab)) - to_chat(user, SPAN_WARNING("You cannot do this with the hand that has an active grab!")) - return - - if(!istype(held) || is_robot_module(held)) - stripping = TRUE - - switch (slot_to_strip_text) - if ("pockets") - if (stripping) - visible_message(SPAN_DANGER("\The [user] is trying to empty [src]'s pockets!")) - if (do_after(user, strip_delay, src, DO_DEFAULT | DO_USER_UNIQUE_ACT | DO_PUBLIC_PROGRESS)) - empty_pockets(user) - else - visible_message(SPAN_DANGER("\The [user] is trying to stuff \a [held] into \the [src]'s pocket!")) - if (do_after(user, strip_delay, src, DO_DEFAULT | DO_USER_UNIQUE_ACT | DO_PUBLIC_PROGRESS)) - place_in_pockets(held, user) - return - - if ("sensors") - visible_message(SPAN_DANGER("\The [user] is trying to set \the [src]'s sensors!")) - if (do_after(user, strip_delay, src, DO_DEFAULT | DO_USER_UNIQUE_ACT | DO_PUBLIC_PROGRESS)) - toggle_sensors(user) - return - - if ("lock_sensors") - if (!istype(w_uniform, /obj/item/clothing/under)) - return - var/obj/item/clothing/under/subject_uniform = w_uniform - visible_message(SPAN_DANGER("\The [user] is trying to [subject_uniform.has_sensor == SUIT_LOCKED_SENSORS ? "un" : ""]lock \the [src]'s sensors!"), range = 3) - if (do_after(user, strip_delay, src, DO_DEFAULT | DO_USER_UNIQUE_ACT | DO_PUBLIC_PROGRESS)) - if (subject_uniform != w_uniform) - to_chat(user, SPAN_WARNING("\The [src] is not wearing \the [subject_uniform] anymore.")) - return - if (!subject_uniform.has_sensor) - to_chat(user, SPAN_WARNING("\The [subject_uniform] has no sensors to lock.")) - return - var/obj/item/device/multitool/user_multitool = user.get_multitool() - if (!istype(user_multitool)) - to_chat(user, SPAN_WARNING("You need a multitool to lock \the [subject_uniform]'s sensors.")) - return - subject_uniform.has_sensor = subject_uniform.has_sensor == SUIT_LOCKED_SENSORS ? SUIT_HAS_SENSORS : SUIT_LOCKED_SENSORS - visible_message(SPAN_NOTICE("\The [user] [subject_uniform.has_sensor == SUIT_LOCKED_SENSORS ? "" : "un"]locks \the [subject_uniform]'s suit sensor controls."), range = 3) - return - - if ("internals") - visible_message(SPAN_DANGER("\The [usr] is trying to set \the [src]'s internals!")) - if (do_after(user, strip_delay, src, DO_DEFAULT | DO_USER_UNIQUE_ACT | DO_PUBLIC_PROGRESS)) - toggle_internals(user) - return - - if ("tie") - if (!istype(holder)) - return - var/len = length(holder.accessories) - if (!len) - return - var/obj/item/clothing/accessory/A = holder.accessories[1] - if (len > 1) - A = input("Select an accessory to remove from [holder]") as null | anything in holder.accessories - if (isnull(A)) - return - visible_message(SPAN_DANGER("\The [user] starts trying to remove \the [src]'s [A.name]!")) - if (!do_after(user, strip_delay, src, DO_DEFAULT | DO_USER_UNIQUE_ACT | DO_PUBLIC_PROGRESS)) - return - if (!A || holder.loc != src || !(A in holder.accessories)) - return - admin_attack_log(user, src, "Stripped \an [A] from \the [holder].", "Was stripped of \an [A] from \the [holder].", "stripped \an [A] from \the [holder] of") - holder.remove_accessory(user, A) - return - - else - var/obj/item/located_item = locate(slot_to_strip_text) in src - if (isunderwear(located_item)) - var/obj/item/underwear/UW = located_item - visible_message( - SPAN_DANGER("\The [user] starts trying to remove \the [src]'s [UW.name]!"), - SPAN_WARNING("You start trying to remove \the [src]'s [UW.name]!") - ) - if (UW.DelayedRemoveUnderwear(user, src)) - admin_attack_log(user, src, "Stripped \an [UW] from \the [holder].", "Was stripped of \an [UW] from \the [holder].", "stripped \an [UW] from \the [holder] of") - user.put_in_active_hand(UW) - return - - var/obj/item/target_slot = get_equipped_item(text2num(slot_to_strip_text)) - if (stripping) - if (!istype(target_slot)) // They aren't holding anything valid and there's nothing to remove, why are we even here? - return - if (!target_slot.mob_can_unequip(src, text2num(slot_to_strip_text), disable_warning = TRUE)) - to_chat(user, SPAN_WARNING("You cannot remove \the [src]'s [target_slot.name].")) - return - visible_message(SPAN_DANGER("\The [user] is trying to remove \the [src]'s [target_slot.name]!")) - else - visible_message(SPAN_DANGER("\The [user] is trying to put \a [held] on \the [src]!")) - - if (!do_after(user, strip_delay, src, DO_DEFAULT | DO_USER_UNIQUE_ACT | DO_PUBLIC_PROGRESS)) - return - - if (stripping) - if (unEquip(target_slot)) - admin_attack_log(user, src, "Stripped \a [target_slot]", "Was stripped of \a [target_slot].", "stripped \a [target_slot] from") - user.put_in_active_hand(target_slot) - else - admin_attack_log(user, src, "Attempted to strip \a [target_slot]", "Target of a failed strip of \a [target_slot].", "attempted to strip \a [target_slot] from") - else if (user.unEquip(held)) - var/obj/item/clothing/C = get_equipped_item(text2num(slot_to_strip_text)) - if (istype(C) && C.can_attach_accessory(held, user)) - C.attach_accessory(user, held) - else if (!equip_to_slot_if_possible(held, text2num(slot_to_strip_text), TRYEQUIP_REDRAW | TRYEQUIP_INSTANT)) - user.put_in_active_hand(held) - -/mob/living/carbon/human/proc/empty_pockets(mob/living/user) - if (!r_store && !l_store) - to_chat(user, SPAN_WARNING("\The [src] has nothing in their pockets.")) - return - if (r_store) - unEquip(r_store) - if (l_store) - unEquip(l_store) - visible_message(SPAN_DANGER("\The [user] empties [src]'s pockets!")) - -/mob/living/carbon/human/proc/place_in_pockets(obj/item/I, var/mob/living/user) - if(!user.unEquip(I)) - return - if(!r_store) - if(equip_to_slot_if_possible(I, slot_r_store, TRYEQUIP_REDRAW | TRYEQUIP_SILENT)) - return - if(!l_store) - if(equip_to_slot_if_possible(I, slot_l_store, TRYEQUIP_REDRAW | TRYEQUIP_SILENT)) - return - to_chat(user, "You are unable to place [I] in [src]'s pockets.") - user.put_in_active_hand(I) - -// Modify the current target sensor level. -/mob/living/carbon/human/proc/toggle_sensors(var/mob/living/user) - var/obj/item/clothing/under/suit = w_uniform - if(!suit) - to_chat(user, "\The [src] is not wearing a suit with sensors.") - return - if (suit.has_sensor >= 2) - to_chat(user, "\The [src]'s suit sensor controls are locked.") - return - - admin_attack_log(user, src, "Toggled their suit sensors.", "Toggled their suit sensors.", "toggled the suit sensors of") - suit.set_sensors(user) - -// Set internals on or off. -/mob/living/carbon/human/proc/toggle_internals(var/mob/living/user) - if(internal) - visible_message("\The [user] disables \the [src]'s internals!") - internal.add_fingerprint(user) - set_internals(null) - return - else - // Check for airtight mask/helmet. - if(!(wear_mask && wear_mask.item_flags & ITEM_FLAG_AIRTIGHT)) - if(!(head && head.item_flags & ITEM_FLAG_AIRTIGHT)) - to_chat(user, "\The [src] does not have a suitable mask or helmet.") - return - - // Find an internal source. - if(istype(back, /obj/item/tank)) - set_internals(back) - else if(istype(s_store, /obj/item/tank)) - set_internals(s_store) - else if(istype(r_store, /obj/item/tank)) - set_internals(r_store) - else if(istype(l_store, /obj/item/tank)) - set_internals(l_store) - else if(istype(belt, /obj/item/tank)) - set_internals(belt) - else - to_chat(user, "You could not find a suitable tank!") - return - visible_message("\The [src] is now running on internals!") - internal.add_fingerprint(user) diff --git a/code/modules/mob/living/carbon/human/unarmed_attack.dm b/code/modules/mob/living/carbon/human/unarmed_attack.dm deleted file mode 100644 index 9cb7e30f95ff1..0000000000000 --- a/code/modules/mob/living/carbon/human/unarmed_attack.dm +++ /dev/null @@ -1,285 +0,0 @@ -var/global/list/sparring_attack_cache = list() - -//Species unarmed attacks -/datum/unarmed_attack - var/attack_verb = list("attack") // Empty hand hurt intent verb. - var/attack_noun = list("fist") - var/damage = 0 // Extra empty hand attack damage. - var/attack_sound = "punch" - var/miss_sound = 'sound/weapons/punchmiss.ogg' - var/shredding = FALSE // Calls the old attack_alien() behavior on objects/mobs when on harm intent. - var/sharp = FALSE - var/edge = FALSE - var/delay = 0 - - var/deal_halloss - var/sparring_variant_type = /datum/unarmed_attack/light_strike - - var/eye_attack_text - var/eye_attack_text_victim - - var/attack_name = "fist" - var/should_attack_log = TRUE - -/datum/unarmed_attack/proc/get_damage_type() - if(deal_halloss) - return DAMAGE_PAIN - return DAMAGE_BRUTE - -/datum/unarmed_attack/proc/get_sparring_variant() - if(sparring_variant_type) - if(!sparring_attack_cache[sparring_variant_type]) - sparring_attack_cache[sparring_variant_type] = new sparring_variant_type() - return sparring_attack_cache[sparring_variant_type] - -/datum/unarmed_attack/proc/is_usable(var/mob/living/carbon/human/user, var/mob/target, var/zone) - if(user.restrained()) - return FALSE - - // Check if they have a functioning hand. - var/obj/item/organ/external/E = user.organs_by_name[BP_L_HAND] - if(E && !E.is_stump()) - return TRUE - - E = user.organs_by_name[BP_R_HAND] - if(E && !E.is_stump()) - return TRUE - - return FALSE - -/datum/unarmed_attack/proc/get_unarmed_damage() - return damage - -/datum/unarmed_attack/proc/apply_effects(var/mob/living/carbon/human/user,var/mob/living/carbon/human/target,var/attack_damage,var/zone) - - if(target.stat == DEAD) - return - - var/stun_chance = rand(0, 100) - var/armour = target.get_blocked_ratio(zone, DAMAGE_BRUTE, damage = attack_damage) - - if(attack_damage >= 5 && armour < 1 && !(target == user) && stun_chance <= attack_damage * 5) // 25% standard chance - switch(zone) // strong punches can have effects depending on where they hit - if(BP_HEAD, BP_EYES, BP_MOUTH) - // Induce blurriness - target.visible_message("[target] looks momentarily disoriented.", "You see stars.") - target.apply_effect(attack_damage * 2, EFFECT_EYE_BLUR, armour) - if(BP_L_ARM, BP_L_HAND) - if (target.l_hand) - // Disarm left hand - //Urist McAssistant dropped the macguffin with a scream just sounds odd. - if(target.drop_l_hand()) - target.visible_message(SPAN_DANGER("\The [target.l_hand] was knocked right out of \the [target]'s grasp!")) - if(BP_R_ARM, BP_R_HAND) - if (target.r_hand) - // Disarm right hand - if(target.drop_r_hand()) - target.visible_message(SPAN_DANGER("\The [target.r_hand] was knocked right out of \the [target]'s grasp!")) - if(BP_CHEST) - if(!target.lying) - var/turf/T = get_step(get_turf(target), get_dir(get_turf(user), get_turf(target))) - if(!T.density) - step(target, get_dir(get_turf(user), get_turf(target))) - target.visible_message("[pick("[target] was sent flying backward!", "[target] staggers back from the impact!")]") - if(prob(50)) - target.set_dir(GLOB.reverse_dir[target.dir]) - target.apply_effect(attack_damage * 0.4, EFFECT_WEAKEN, armour) - if(BP_GROIN) - target.visible_message("[target] looks like \he is in pain!", "[(target.gender=="female") ? "Oh god that hurt!" : "Oh no, not your[pick("testicles", "crown jewels", "clockweights", "family jewels", "marbles", "bean bags", "teabags", "sweetmeats", "goolies")]!"]") - target.apply_effects(stutter = attack_damage * 2, agony = attack_damage* 3, blocked = armour) - if(BP_L_LEG, BP_L_FOOT, BP_R_LEG, BP_R_FOOT) - if(!target.lying) - target.visible_message("[target] gives way slightly.") - target.apply_effect(attack_damage * 3, EFFECT_PAIN, armour) - else if(attack_damage >= 5 && !(target == user) && (stun_chance + attack_damage * 5 >= 100) && armour < 1) // Chance to get the usual throwdown as well (25% standard chance) - if(!target.lying) - target.visible_message("[target] [pick("slumps", "falls", "drops")] down to the ground!") - else - target.visible_message("[target] has been weakened!") - target.apply_effect(3, EFFECT_WEAKEN, armour * 100) - - var/obj/item/clothing/C = target.get_covering_equipped_item_by_zone(zone) - if(istype(C) && prob(10)) - C.leave_evidence(user) - -/datum/unarmed_attack/proc/show_attack(var/mob/living/carbon/human/user, var/mob/living/carbon/human/target, var/zone, var/attack_damage) - var/obj/item/organ/external/affecting = target.get_organ(zone) - user.visible_message("[user] [pick(attack_verb)] [target] in the [affecting.name]!") - playsound(user.loc, attack_sound, 25, 1, -1) - -/datum/unarmed_attack/proc/handle_eye_attack(var/mob/living/carbon/human/user, var/mob/living/carbon/human/target) - var/obj/item/organ/internal/eyes/eyes = target.internal_organs_by_name[BP_EYES] - if(eyes) - eyes.take_internal_damage(rand(3,4), 1) - user.visible_message("[user] presses \his [eye_attack_text] into [target]'s [eyes.name]!") - var/eye_pain = eyes.can_feel_pain() - to_chat(target, "You experience[(eye_pain) ? "" : " immense pain as you feel" ] [eye_attack_text_victim] being pressed into your [eyes.name][(eye_pain)? "." : "!"]") - return - user.visible_message("[user] attempts to press \his [eye_attack_text] into [target]'s eyes, but they don't have any!") - -/datum/unarmed_attack/proc/damage_flags() - return (src.sharp? DAMAGE_FLAG_SHARP : 0)|(src.edge? DAMAGE_FLAG_EDGE : 0) - -/datum/unarmed_attack/bite - attack_verb = list("bit") - attack_sound = 'sound/weapons/bite.ogg' - damage = 0 - attack_name = "bite" - -/datum/unarmed_attack/bite/sharp - attack_verb = list("bit", "chomped") - sharp = TRUE - edge = TRUE - -/datum/unarmed_attack/bite/is_usable(var/mob/living/carbon/human/user, var/mob/living/carbon/human/target, var/zone) - - if(istype(user.wear_mask, /obj/item/clothing/mask)) - return FALSE - for(var/obj/item/clothing/C in list(user.wear_mask, user.head, user.wear_suit)) - if(C && (C.body_parts_covered & FACE) && (C.item_flags & ITEM_FLAG_THICKMATERIAL)) - return FALSE //prevent biting through a space helmet or similar - if (user == target && (zone == BP_HEAD || zone == BP_EYES || zone == BP_MOUTH)) - return FALSE //how do you bite yourself in the head? - return TRUE - -/datum/unarmed_attack/punch - attack_verb = list("punched") - attack_noun = list("fist") - eye_attack_text = "fingers" - eye_attack_text_victim = "digits" - damage = 0 - attack_name = "punch" - -/datum/unarmed_attack/punch/show_attack(var/mob/living/carbon/human/user, var/mob/living/carbon/human/target, var/zone, var/attack_damage) - var/obj/item/organ/external/affecting = target.get_organ(zone) - var/organ = affecting.name - - attack_damage = clamp(attack_damage, 1, 5) // We expect damage input of 1 to 5 for this proc. But we leave this check juuust in case. - - if(target == user) - user.visible_message("[user] [pick(attack_verb)] \himself in the [organ]!") - return FALSE - - target.update_personal_goal(/datum/goal/achievement/fistfight, TRUE) - user.update_personal_goal(/datum/goal/achievement/fistfight, TRUE) - - if(!target.lying) - switch(zone) - if(BP_HEAD, BP_MOUTH, BP_EYES) - // ----- HEAD ----- // - switch(attack_damage) - if(1 to 2) - user.visible_message("[user] slapped [target] across \his cheek!") - if(3 to 4) - user.visible_message(pick( - 80; "[user] [pick(attack_verb)] [target] in the head!", - 20; "[user] struck [target] in the head[pick("", " with a closed fist")]!", - 50; "[user] threw a hook against [target]'s head!" - )) - if(5) - user.visible_message(pick( - 10; "[user] gave [target] a solid slap across \his face!", - 90; "[user] smashed \his [pick(attack_noun)] into [target]'s [pick("[organ]", "face", "jaw")]!" - )) - else - // ----- BODY ----- // - switch(attack_damage) - if(1 to 2) user.visible_message("[user] threw a glancing punch at [target]'s [organ]!") - if(1 to 4) user.visible_message("[user] [pick(attack_verb)] [target] in \his [organ]!") - if(5) user.visible_message("[user] smashed \his [pick(attack_noun)] into [target]'s [organ]!") - else - user.visible_message("[user] [pick("punched", "threw a punch at", "struck", "slammed their [pick(attack_noun)] into")] [target]'s [organ]!") //why do we have a separate set of verbs for lying targets? - -/datum/unarmed_attack/kick - attack_verb = list("kicked", "kicked", "kicked", "kneed") - attack_noun = list("kick", "kick", "kick", "knee strike") - attack_sound = "swing_hit" - damage = 0 - attack_name = "kick" - -/datum/unarmed_attack/kick/is_usable(var/mob/living/carbon/human/user, var/mob/living/carbon/human/target, var/zone) - if(!(zone in list(BP_L_LEG, BP_R_LEG, BP_L_FOOT, BP_R_FOOT, BP_GROIN))) - return FALSE - - var/obj/item/organ/external/E = user.organs_by_name[BP_L_FOOT] - if(E && !E.is_stump()) - return TRUE - - E = user.organs_by_name[BP_R_FOOT] - if(E && !E.is_stump()) - return TRUE - - return TRUE - -/datum/unarmed_attack/kick/get_unarmed_damage(var/mob/living/carbon/human/user) - var/obj/item/clothing/shoes = user.shoes - if(!istype(shoes)) - return damage - return damage + (shoes ? shoes.force : 0) - -/datum/unarmed_attack/kick/show_attack(var/mob/living/carbon/human/user, var/mob/living/carbon/human/target, var/zone, var/attack_damage) - var/obj/item/organ/external/affecting = target.get_organ(zone) - var/organ = affecting.name - - attack_damage = clamp(attack_damage, 1, 5) - - switch(attack_damage) - if(1 to 2) user.visible_message("[user] threw [target] a glancing [pick(attack_noun)] to the [organ]!") //it's not that they're kicking lightly, it's that the kick didn't quite connect - if(3 to 4) user.visible_message("[user] [pick(attack_verb)] [target] in \his [organ]!") - if(5) user.visible_message("[user] landed a strong [pick(attack_noun)] against [target]'s [organ]!") - -/datum/unarmed_attack/stomp - attack_verb = list("stomped on") - attack_noun = list("stomp") - attack_sound = "swing_hit" - damage = 0 - attack_name = "stomp" - -/datum/unarmed_attack/stomp/is_usable(var/mob/living/carbon/human/user, var/mob/living/carbon/human/target, var/zone) - if(!istype(target)) - return FALSE - - if (!user.lying && (target.lying || (zone in list(BP_L_FOOT, BP_R_FOOT)))) - if(target.grabbed_by == user && target.lying) - return FALSE - var/obj/item/organ/external/E = user.organs_by_name[BP_L_FOOT] - if(E && !E.is_stump()) - return TRUE - - E = user.organs_by_name[BP_R_FOOT] - if(E && !E.is_stump()) - return TRUE - - return FALSE - -/datum/unarmed_attack/stomp/get_unarmed_damage(var/mob/living/carbon/human/user) - var/obj/item/clothing/shoes = user.shoes - return damage + (shoes ? shoes.force : 0) - -/datum/unarmed_attack/stomp/show_attack(var/mob/living/carbon/human/user, var/mob/living/carbon/human/target, var/zone, var/attack_damage) - var/obj/item/organ/external/affecting = target.get_organ(zone) - var/organ = affecting.name - var/obj/item/clothing/shoes = user.shoes - - attack_damage = clamp(attack_damage, 1, 5) - - var/shoe_text = shoes ? copytext_char(shoes.name, 1, -1) : "foot" - switch(attack_damage) - if(1 to 4) - user.visible_message(pick( - "[user] stomped on [target]'s [organ][pick("", "with their [shoe_text]")]!", - "[user] stomped \his [shoe_text] down onto [target]'s [organ]!")) - if(5) - user.visible_message(pick( - "[user] stomped down hard onto [target]'s [organ][pick("", "with their [shoe_text]")]!", - "[user] slammed \his [shoe_text] down onto [target]'s [organ]!")) - -/datum/unarmed_attack/light_strike - deal_halloss = 3 - attack_noun = list("tap","light strike") - attack_verb = list("tapped", "lightly struck") - damage = 0 - sharp = TRUE - edge = TRUE - attack_name = "light hit" - should_attack_log = FALSE diff --git a/code/modules/mob/living/carbon/human/update_icons.dm b/code/modules/mob/living/carbon/human/update_icons.dm deleted file mode 100644 index 7b04e87265b28..0000000000000 --- a/code/modules/mob/living/carbon/human/update_icons.dm +++ /dev/null @@ -1,918 +0,0 @@ -/* - Global associative list for caching humanoid icons. - Index format m or f, followed by a string of 0 and 1 to represent bodyparts followed by husk fat hulk skeleton 1 or 0. - TODO: Proper documentation - icon_key is [species.race_key][g][husk][fat][hulk][skeleton][skin_tone] -*/ -var/global/list/human_icon_cache = list() -var/global/list/tail_icon_cache = list() //key is [species.race_key][skin_color] -var/global/list/light_overlay_cache = list() -GLOBAL_LIST_EMPTY(overlay_icon_cache) -GLOBAL_LIST_EMPTY(species_icon_template_cache) - -/proc/overlay_image(icon,icon_state,color,flags) - var/image/ret = image(icon,icon_state) - ret.color = color - ret.appearance_flags = DEFAULT_APPEARANCE_FLAGS | flags - return ret - - /////////////////////// - //UPDATE_ICONS SYSTEM// - /////////////////////// -/* -Calling this a system is perhaps a bit trumped up. It is essentially update_clothing dismantled into its -core parts. The key difference is that when we generate overlays we do not generate either lying or standing -versions. Instead, we generate both and store them in two fixed-length lists, both using the same list-index -(The indexes are in update_icons.dm): Each list for humans is (at the time of writing) of length 19. -This will hopefully be reduced as the system is refined. - - var/overlays_lying[19] //For the lying down stance - var/overlays_standing[19] //For the standing stance - -When we call update_icons, the 'lying' variable is checked and then the appropriate list is assigned to our overlays! -That in itself uses a tiny bit more memory (no more than all the ridiculous lists the game has already mind you). - -On the other-hand, it should be very CPU cheap in comparison to the old system. -In the old system, we updated all our overlays every life() call, even if we were standing still inside a crate! -or dead!. 25ish overlays, all generated from scratch every second for every xeno/human/monkey and then applied. -More often than not update_clothing was being called a few times in addition to that! CPU was not the only issue, -all those icons had to be sent to every client. So really the cost was extremely cumulative. To the point where -update_clothing would frequently appear in the top 10 most CPU intensive procs during profiling. - -Another feature of this new system is that our lists are indexed. This means we can update specific overlays! -So we only regenerate icons when we need them to be updated! This is the main saving for this system. - -In practice this means that: - everytime you fall over, we just switch between precompiled lists. Which is fast and cheap. - Everytime you do something minor like take a pen out of your pocket, we only update the in-hand overlay - etc... - - -There are several things that need to be remembered: - -> Whenever we do something that should cause an overlay to update (which doesn't use standard procs - ( i.e. you do something like l_hand = /obj/item/something new(src) ) - You will need to call the relevant update_inv_* proc: - update_inv_head() - update_inv_wear_suit() - update_inv_gloves() - update_inv_shoes() - update_inv_w_uniform() - update_inv_glasse() - update_inv_l_hand() - update_inv_r_hand() - update_inv_belt() - update_inv_wear_id() - update_inv_ears() - update_inv_s_store() - update_inv_pockets() - update_inv_back() - update_inv_handcuffed() - update_inv_wear_mask() - - All of these are named after the variable they update from. They are defined at the mob/ level like - update_clothing was, so you won't cause undefined proc runtimes with usr.update_inv_wear_id() if the usr is a - slime etc. Instead, it'll just return without doing any work. So no harm in calling it for slimes and such. - - -> There are also these special cases: - update_mutations() //handles updating your appearance for certain mutations. e.g TK head-glows - UpdateDamageIcon() //handles damage overlays for brute/burn damage //(will rename this when I geta round to it) - update_body() //Handles updating your mob's icon to reflect their gender/race/complexion etc - update_hair() //Handles updating your hair overlay (used to be update_face, but mouth and - ...eyes were merged into update_body) - update_targeted() // Updates the target overlay when someone points a gun at you - -> All of these procs update our overlays_lying and overlays_standing, and then call update_icons() by default. - If you wish to update several overlays at once, you can set the argument to 0 to disable the update and call - it manually: - e.g. - update_inv_head(0) - update_inv_l_hand(0) - update_inv_r_hand() //<---calls update_icons() - - or equivillantly: - update_inv_head(0) - update_inv_l_hand(0) - update_inv_r_hand(0) - update_icons() - -> If you need to update all overlays you can use regenerate_icons(). it works exactly like update_clothing used to. - -> I reimplimented an old unused variable which was in the code called (coincidentally) var/update_icon - It can be used as another method of triggering regenerate_icons(). It's basically a flag that when set to non-zero - will call regenerate_icons() at the next life() call and then reset itself to 0. - The idea behind it is icons are regenerated only once, even if multiple events requested it. - -This system is confusing and is still a WIP. It's primary goal is speeding up the controls of the game whilst -reducing processing costs. So please bear with me while I iron out the kinks. It will be worth it, I promise. -If I can eventually free var/lying stuff from the life() process altogether, stuns/death/status stuff -will become less affected by lag-spikes and will be instantaneous! :3 - -If you have any questions/constructive-comments/bugs-to-report/or have a massivly devestated butt... -Please contact me on #coderbus IRC. ~Carn x -*/ - -//Human Overlays Indexes///////// -#define HO_MUTATIONS_LAYER 1 -#define HO_SKIN_LAYER 2 -#define HO_DAMAGE_LAYER 3 -#define HO_SURGERY_LAYER 4 //bs12 specific. -#define HO_UNDERWEAR_LAYER 5 -#define HO_UNIFORM_LAYER 6 -#define HO_ID_LAYER 7 -#define HO_SHOES_LAYER 8 -#define HO_GLOVES_LAYER 9 -#define HO_BELT_LAYER 10 -#define HO_SUIT_LAYER 11 -#define HO_TAIL_LAYER 12 //bs12 specific. this hack is probably gonna come back to haunt me -#define HO_GLASSES_LAYER 13 -#define HO_BELT_LAYER_ALT 14 -#define HO_SUIT_STORE_LAYER 15 -#define HO_BACK_LAYER 16 -#define HO_HAIR_LAYER 17 //TODO: make part of head layer? -#define HO_GOGGLES_LAYER 18 -#define HO_EARS_LAYER 19 -#define HO_FACEMASK_LAYER 20 -#define HO_HEAD_LAYER 21 -#define HO_COLLAR_LAYER 22 -#define HO_HANDCUFF_LAYER 23 -#define HO_L_HAND_LAYER 24 -#define HO_R_HAND_LAYER 25 -#define HO_FIRE_LAYER 26 //If you're on fire -#define TOTAL_LAYERS 26 -////////////////////////////////// - -/mob/living/carbon/human - var/list/overlays_standing[TOTAL_LAYERS] - var/previous_damage_appearance // store what the body last looked like, so we only have to update it if something changed - -//UPDATES OVERLAYS FROM OVERLAYS_LYING/OVERLAYS_STANDING -/mob/living/carbon/human/update_icons() - lying_prev = lying //so we don't update overlays for lying/standing unless our stance changes again - update_hud() //TODO: remove the need for this - overlays.Cut() - - var/list/overlays_to_apply = list() - - var/list/visible_overlays - if(is_cloaked()) - icon = 'icons/mob/human.dmi' - icon_state = "blank" - visible_overlays = list(overlays_standing[HO_R_HAND_LAYER], overlays_standing[HO_L_HAND_LAYER]) - else - icon = stand_icon - icon_state = null - visible_overlays = overlays_standing - - for(var/i = 1 to LAZYLEN(visible_overlays)) - var/entry = visible_overlays[i] - if(istype(entry, /image)) - var/image/overlay = entry - if(i != HO_DAMAGE_LAYER) - overlay.transform = get_lying_offset(overlay) - overlays_to_apply += overlay - else if(istype(entry, /list)) - for(var/image/overlay in entry) - if(i != HO_DAMAGE_LAYER) - overlay.transform = get_lying_offset(overlay) - overlays_to_apply += overlay - - var/obj/item/organ/external/head/head = organs_by_name[BP_HEAD] - if(istype(head) && !head.is_stump()) - var/image/I = head.get_eye_overlay() - if(I) overlays_to_apply += I - - if(auras) - overlays_to_apply += auras - - overlays = overlays_to_apply - var/list/scale = get_scale() - animate( - src, - transform = matrix().Update( - scale_x = scale[1], - scale_y = scale[2], - rotation = lying ? 90 : 0, - offset_y = lying ? -6 - default_pixel_z : 16 * (scale[2] - 1) - ), - time = ANIM_LYING_TIME - ) - - -/mob/living/carbon/human/proc/get_scale() - var/height_modifier = 0 - var/height_descriptor = LAZYACCESS(descriptors, "height") - if (height_descriptor) - var/datum/mob_descriptor/height/H = species.descriptors["height"] - if (H) - var/list/scale_effect = H.scale_effect[species.name] - if (length(scale_effect)) - height_modifier = 0.01 * scale_effect[height_descriptor] - var/build_modifier = 0 - var/build_descriptor = LAZYACCESS(descriptors, "build") - if (build_descriptor) - var/datum/mob_descriptor/build/B = species.descriptors["build"] - if (B) - var/list/scale_effect = B.scale_effect[species.name] - if (length(scale_effect)) - build_modifier = 0.01 * scale_effect[build_descriptor] - return list( - (1 + build_modifier) * (tf_scale_x || 1), - (1 + height_modifier) * (tf_scale_y || 1) - ) - -var/global/list/damage_icon_parts = list() - -/mob/living/carbon/human/proc/get_lying_offset(var/image/I) - if(!lying) - return matrix() - - var/overlay_key = "[I.icon][I.icon_state]" - if(!GLOB.overlay_icon_cache[overlay_key]) - GLOB.overlay_icon_cache[overlay_key] = new/icon(icon = I.icon, icon_state = I.icon_state) - - var/icon/species_key = "[species.get_race_key(src)]" - if(species.icon_template) - if(!GLOB.species_icon_template_cache[species_key]) - GLOB.species_icon_template_cache[species_key] = new/icon(icon = species.icon_template, icon_state = "") - else - species_key = "icons/mob/human.dmiblank" - if(!GLOB.species_icon_template_cache[species_key]) - GLOB.species_icon_template_cache[species_key] = new/icon(icon = 'icons/mob/human.dmi', icon_state = "blank") - - var/icon/icon_template = GLOB.species_icon_template_cache[species_key] - var/icon/overlay = GLOB.overlay_icon_cache[overlay_key] - - var/x_offset = Ceil(0.5*(icon_template.Width() - (overlay.Width() || 32))) - var/y_offset = Ceil(0.5*(icon_template.Height() - (overlay.Height() || 32))) - - return matrix().Update( - offset_x = x_offset - y_offset, - offset_y = -(x_offset + y_offset) - ) - -//DAMAGE OVERLAYS -//constructs damage icon for each organ from mask * damage field and saves it in our overlays_ lists -/mob/living/carbon/human/UpdateDamageIcon(var/update_icons=1) - // first check whether something actually changed about damage appearance - var/damage_appearance = "" - - if(!species.damage_overlays || !species.damage_mask) - return - - for(var/obj/item/organ/external/O in organs) - if(O.is_stump()) - continue - damage_appearance += O.damage_state - - if(damage_appearance == previous_damage_appearance) - // nothing to do here - return - - previous_damage_appearance = damage_appearance - - var/image/standing_image = image(species.damage_overlays, icon_state = "00") - - // blend the individual damage states with our icons - for(var/obj/item/organ/external/O in organs) - if(O.is_stump()) - continue - - O.update_damstate() - O.update_icon() - if(O.damage_state == "00") continue - var/icon/DI - var/use_colour = (BP_IS_ROBOTIC(O) ? SYNTH_BLOOD_COLOUR : O.species.get_blood_colour(src)) - var/cache_index = "[O.damage_state]/[O.icon_name]/[use_colour]/[species.get_bodytype(src)]" - if(damage_icon_parts[cache_index] == null) - DI = new /icon(species.get_damage_overlays(src), O.damage_state) // the damage icon for whole human - DI.Blend(new /icon(species.get_damage_mask(src), O.icon_name), ICON_MULTIPLY) // mask with this organ's pixels - DI.Blend(use_colour, ICON_MULTIPLY) - damage_icon_parts[cache_index] = DI - else - DI = damage_icon_parts[cache_index] - - standing_image.overlays += DI - - overlays_standing[HO_DAMAGE_LAYER] = standing_image - update_bandages(update_icons) - if(update_icons) - queue_icon_update() - -/mob/living/carbon/human/proc/update_bandages(var/update_icons=1) - var/bandage_icon = species.bandages_icon - if(!bandage_icon) - return - var/image/standing_image = overlays_standing[HO_DAMAGE_LAYER] - if(standing_image) - for(var/obj/item/organ/external/O in organs) - if(O.is_stump()) - continue - var/bandage_level = O.bandage_level() - if(bandage_level) - standing_image.overlays += image(bandage_icon, "[O.icon_name][bandage_level]") - - overlays_standing[HO_DAMAGE_LAYER] = standing_image - if(update_icons) - queue_icon_update() - -//BASE MOB SPRITE -/mob/living/carbon/human/proc/update_body(var/update_icons=1) - var/husk_color_mod = rgb(96,88,80) - var/hulk_color_mod = rgb(48,224,40) - - var/husk = (MUTATION_HUSK in src.mutations) - var/fat = (MUTATION_FAT in src.mutations) - var/hulk = (MUTATION_HULK in src.mutations) - var/skeleton = (MUTATION_SKELETON in src.mutations) - - //CACHING: Generate an index key from visible bodyparts. - //0 = destroyed, 1 = normal, 2 = robotic, 3 = necrotic. - - //Create a new, blank icon for our mob to use. - if(stand_icon) - qdel(stand_icon) - stand_icon = new(species.icon_template ? species.icon_template : 'icons/mob/human.dmi',"blank") - - var/g = "male" - if(gender == FEMALE) - g = "female" - - var/icon_key = "[species.get_race_key(src)][g][skin_tone][skin_color]" - if(makeup_style) - icon_key += "[makeup_style]" - else - icon_key += "nolips" - var/obj/item/organ/internal/eyes/eyes = internal_organs_by_name[species.vision_organ ? species.vision_organ : BP_EYES] - if(istype(eyes)) - icon_key += "[rgb(eyes.eye_colour[1], eyes.eye_colour[2], eyes.eye_colour[3])]" - else - icon_key += "#000000" - - for(var/organ_tag in species.has_limbs) - var/obj/item/organ/external/part = organs_by_name[organ_tag] - if(isnull(part) || part.is_stump()) - icon_key += "0" - continue - for (var/E in part.markings) - var/datum/sprite_accessory/marking/M = E - var/color = part.markings[E] - icon_key += "[M.name][color]" - if(part) - icon_key += "[part.species.get_race_key(part.owner)]" - icon_key += "[part.dna.GetUIState(DNA_UI_GENDER)]" - icon_key += "[part.skin_tone]" - icon_key += "[part.base_skin]" - if(part.s_col && part.s_col.len >= 3) - icon_key += "[rgb(part.s_col[1],part.s_col[2],part.s_col[3])]" - icon_key += "[part.s_col_blend]" - if(part.body_hair && part.h_col && part.h_col.len >= 3) - icon_key += "[rgb(part.h_col[1],part.h_col[2],part.h_col[3])]" - else - icon_key += "#000000" - for(var/E in part.markings) - var/datum/sprite_accessory/marking/M = E - var/color = part.markings[E] - icon_key += "[M.name][color]" - if(BP_IS_ROBOTIC(part)) - icon_key += "2[part.model ? "-[part.model]": ""]" - else if(part.status & ORGAN_DEAD) - icon_key += "3" - else - icon_key += "1" - - icon_key = "[icon_key][husk ? 1 : 0][fat ? 1 : 0][hulk ? 1 : 0][skeleton ? 1 : 0]" - - var/icon/base_icon - if(human_icon_cache[icon_key]) - base_icon = human_icon_cache[icon_key] - else - //BEGIN CACHED ICON GENERATION. - var/obj/item/organ/external/chest = get_organ(BP_CHEST) - base_icon = chest.get_icon() - - for(var/obj/item/organ/external/part in (organs-chest)) - var/icon/temp = part.get_icon() - //That part makes left and right legs drawn topmost and lowermost when human looks WEST or EAST - //And no change in rendering for other parts (they icon_position is 0, so goes to 'else' part) - if(part.icon_position & (LEFT | RIGHT)) - var/icon/temp2 = new('icons/mob/human.dmi',"blank") - temp2.Insert(new/icon(temp,dir=NORTH),dir=NORTH) - temp2.Insert(new/icon(temp,dir=SOUTH),dir=SOUTH) - if(!(part.icon_position & LEFT)) - temp2.Insert(new/icon(temp,dir=EAST),dir=EAST) - if(!(part.icon_position & RIGHT)) - temp2.Insert(new/icon(temp,dir=WEST),dir=WEST) - base_icon.Blend(temp2, ICON_OVERLAY) - if(part.icon_position & LEFT) - temp2.Insert(new/icon(temp,dir=EAST),dir=EAST) - if(part.icon_position & RIGHT) - temp2.Insert(new/icon(temp,dir=WEST),dir=WEST) - base_icon.Blend(temp2, ICON_UNDERLAY) - else if(part.icon_position & UNDER) - base_icon.Blend(temp, ICON_UNDERLAY) - else - base_icon.Blend(temp, ICON_OVERLAY) - - if(!skeleton) - if(husk) - base_icon.ColorTone(husk_color_mod) - else if(hulk) - var/list/tone = ReadRGB(hulk_color_mod) - base_icon.MapColors(rgb(tone[1],0,0),rgb(0,tone[2],0),rgb(0,0,tone[3])) - - //Handle husk overlay. - if(husk) - var/husk_icon = species.get_husk_icon(src) - if(husk_icon) - var/icon/mask = new(base_icon) - var/blood = species.get_blood_colour(src) - var/icon/husk_over = new(species.husk_icon,"") - mask.MapColors(0,0,0,1, 0,0,0,1, 0,0,0,1, 0,0,0,1, 0,0,0,0) - husk_over.Blend(mask, ICON_ADD) - husk_over.Blend(blood, ICON_MULTIPLY) - base_icon.Blend(husk_over, ICON_OVERLAY) - - human_icon_cache[icon_key] = base_icon - - //END CACHED ICON GENERATION. - stand_icon.Blend(base_icon,ICON_OVERLAY) - - //tail - update_tail_showing(0) - - if(update_icons) - queue_icon_update() - -//UNDERWEAR OVERLAY - -/mob/living/carbon/human/proc/update_underwear(var/update_icons=1) - overlays_standing[HO_UNDERWEAR_LAYER] = list() - for(var/entry in worn_underwear) - var/obj/item/underwear/UW = entry - if (!UW || !UW.icon) // Avoid runtimes for nude underwear types - continue - - var/image/I = image(icon = UW.icon, icon_state = UW.icon_state) - I.appearance_flags = DEFAULT_APPEARANCE_FLAGS | RESET_COLOR - I.color = UW.color - - overlays_standing[HO_UNDERWEAR_LAYER] += I - - if(update_icons) - queue_icon_update() - -//HAIR OVERLAY -/mob/living/carbon/human/proc/update_hair(var/update_icons=1) - //Reset our hair - overlays_standing[HO_HAIR_LAYER] = null - - var/obj/item/organ/external/head/head_organ = get_organ(BP_HEAD) - if(!head_organ || head_organ.is_stump() ) - if(update_icons) - queue_icon_update() - return - - //masks and helmets can obscure our hair. - if( (head && (head.flags_inv & BLOCKHAIR)) || (wear_mask && (wear_mask.flags_inv & BLOCKHAIR))) - if(update_icons) - queue_icon_update() - return - - overlays_standing[HO_HAIR_LAYER] = head_organ.get_hair_icon() - - if(update_icons) - queue_icon_update() - -/mob/living/carbon/human/proc/update_skin(var/update_icons=1) - overlays_standing[HO_SKIN_LAYER] = species.update_skin(src) - if(update_icons) - queue_icon_update() - -/mob/living/carbon/human/update_mutations(var/update_icons=1) - var/fat - if(MUTATION_FAT in mutations) - fat = "fat" - - var/image/standing = overlay_image('icons/effects/genetics.dmi', flags=RESET_COLOR) - var/add_image = 0 - var/g = "m" - if(gender == FEMALE) g = "f" - // DNA2 - Drawing underlays. - for(var/datum/dna/gene/gene in dna_genes) - if(!gene.block) - continue - if(gene.is_active(src)) - var/underlay=gene.OnDrawUnderlays(src,g,fat) - if(underlay) - standing.underlays += underlay - add_image = 1 - for(var/mut in mutations) - switch(mut) - if(MUTATION_LASER) - standing.overlays += "lasereyes_s" - add_image = 1 - if(add_image) - overlays_standing[HO_MUTATIONS_LAYER] = standing - else - overlays_standing[HO_MUTATIONS_LAYER] = null - if(update_icons) - queue_icon_update() -/* --------------------------------------- */ -//For legacy support. -/mob/living/carbon/human/regenerate_icons() - ..() - if(HasMovementHandler(/datum/movement_handler/mob/transformation) || QDELETED(src)) return - - update_mutations(0) - update_body(0) - update_skin(0) - update_underwear(0) - update_hair(0) - update_inv_w_uniform(0) - update_inv_wear_id(0) - update_inv_gloves(0) - update_inv_glasses(0) - update_inv_ears(0) - update_inv_shoes(0) - update_inv_s_store(0) - update_inv_wear_mask(0) - update_inv_head(0) - update_inv_belt(0) - update_inv_back(0) - update_inv_wear_suit(0) - update_inv_r_hand(0) - update_inv_l_hand(0) - update_inv_handcuffed(0) - update_inv_pockets(0) - update_fire(0) - update_surgery(0) - UpdateDamageIcon() - queue_icon_update() - //Hud Stuff - update_hud() - -/* --------------------------------------- */ -//vvvvvv UPDATE_INV PROCS vvvvvv - -/mob/living/carbon/human/update_inv_w_uniform(var/update_icons=1) - if(istype(w_uniform, /obj/item/clothing/under) && !(wear_suit && wear_suit.flags_inv & HIDEJUMPSUIT)) - overlays_standing[HO_UNIFORM_LAYER] = w_uniform.get_mob_overlay(src,slot_w_uniform_str) - else - overlays_standing[HO_UNIFORM_LAYER] = null - - if(update_icons) - queue_icon_update() - -/mob/living/carbon/human/update_inv_wear_id(var/update_icons=1) - var/image/id_overlay - if(wear_id && istype(w_uniform, /obj/item/clothing/under)) - var/obj/item/clothing/under/U = w_uniform - if(U.displays_id && !U.rolled_down) - id_overlay = wear_id.get_mob_overlay(src,slot_wear_id_str) - - overlays_standing[HO_ID_LAYER] = id_overlay - - SET_BIT(hud_updateflag, ID_HUD) - SET_BIT(hud_updateflag, WANTED_HUD) - - if(update_icons) - queue_icon_update() - -/mob/living/carbon/human/update_inv_gloves(var/update_icons=1) - if(gloves && !(wear_suit && wear_suit.flags_inv & HIDEGLOVES)) - overlays_standing[HO_GLOVES_LAYER] = gloves.get_mob_overlay(src,slot_gloves_str) - else - if(blood_DNA && species.blood_mask) - var/image/bloodsies = overlay_image(species.blood_mask, "bloodyhands", hand_blood_color, RESET_COLOR) - overlays_standing[HO_GLOVES_LAYER] = bloodsies - else - overlays_standing[HO_GLOVES_LAYER] = null - if(update_icons) - queue_icon_update() - -/mob/living/carbon/human/update_inv_glasses(var/update_icons=1) - if(glasses) - overlays_standing[glasses.use_alt_layer ? HO_GOGGLES_LAYER : HO_GLASSES_LAYER] = glasses.get_mob_overlay(src,slot_glasses_str) - overlays_standing[glasses.use_alt_layer ? HO_GLASSES_LAYER : HO_GOGGLES_LAYER] = null - else - overlays_standing[HO_GLASSES_LAYER] = null - overlays_standing[HO_GOGGLES_LAYER] = null - if(update_icons) - queue_icon_update() - -/mob/living/carbon/human/update_inv_ears(var/update_icons=1) - overlays_standing[HO_EARS_LAYER] = null - if( (head && (head.flags_inv & (BLOCKHAIR | BLOCKHEADHAIR))) || (wear_mask && (wear_mask.flags_inv & (BLOCKHAIR | BLOCKHEADHAIR)))) - if(update_icons) - queue_icon_update() - return - - if(l_ear || r_ear) - // Blank image upon which to layer left & right overlays. - var/image/both = image("icon" = 'icons/effects/effects.dmi', "icon_state" = "nothing") - if(l_ear) - both.overlays += l_ear.get_mob_overlay(src,slot_l_ear_str) - if(r_ear) - both.overlays += r_ear.get_mob_overlay(src,slot_r_ear_str) - overlays_standing[HO_EARS_LAYER] = both - - else - overlays_standing[HO_EARS_LAYER] = null - if(update_icons) - queue_icon_update() - -/mob/living/carbon/human/update_inv_shoes(var/update_icons=1) - if(shoes && !((wear_suit && wear_suit.flags_inv & HIDESHOES) || (w_uniform && w_uniform.flags_inv & HIDESHOES))) - overlays_standing[HO_SHOES_LAYER] = shoes.get_mob_overlay(src,slot_shoes_str) - else - if(feet_blood_DNA && species.blood_mask) - var/image/bloodsies = overlay_image(species.blood_mask, "shoeblood", hand_blood_color, RESET_COLOR) - overlays_standing[HO_SHOES_LAYER] = bloodsies - else - overlays_standing[HO_SHOES_LAYER] = null - if(update_icons) - queue_icon_update() - -/mob/living/carbon/human/update_inv_s_store(var/update_icons=1) - if(s_store) - overlays_standing[HO_SUIT_STORE_LAYER] = s_store.get_mob_overlay(src,slot_s_store_str) - else - overlays_standing[HO_SUIT_STORE_LAYER] = null - if(update_icons) - queue_icon_update() - -/mob/living/carbon/human/update_inv_head(var/update_icons=1) - if(head) - overlays_standing[HO_HEAD_LAYER] = head.get_mob_overlay(src,slot_head_str) - else - overlays_standing[HO_HEAD_LAYER] = null - if(update_icons) - queue_icon_update() - -/mob/living/carbon/human/update_inv_belt(var/update_icons=1) - if(belt) - overlays_standing[belt.use_alt_layer ? HO_BELT_LAYER_ALT : HO_BELT_LAYER] = belt.get_mob_overlay(src,slot_belt_str) - overlays_standing[belt.use_alt_layer ? HO_BELT_LAYER : HO_BELT_LAYER_ALT] = null - else - overlays_standing[HO_BELT_LAYER] = null - overlays_standing[HO_BELT_LAYER_ALT] = null - if(update_icons) - queue_icon_update() - -/mob/living/carbon/human/update_inv_wear_suit(var/update_icons=1) - - if(wear_suit) - overlays_standing[HO_SUIT_LAYER] = wear_suit.get_mob_overlay(src,slot_wear_suit_str) - update_tail_showing(0) - else - overlays_standing[HO_SUIT_LAYER] = null - update_tail_showing(0) - update_inv_w_uniform(0) - update_inv_shoes(0) - update_inv_gloves(0) - - update_collar(0) - - if(update_icons) - queue_icon_update() - -/mob/living/carbon/human/update_inv_pockets(var/update_icons=1) - if(update_icons) - queue_icon_update() - -/mob/living/carbon/human/update_inv_wear_mask(var/update_icons=1) - if( wear_mask && ( istype(wear_mask, /obj/item/clothing/mask) || istype(wear_mask, /obj/item/clothing/accessory) ) && !(head && head.flags_inv & HIDEMASK)) - overlays_standing[HO_FACEMASK_LAYER] = wear_mask.get_mob_overlay(src,slot_wear_mask_str) - else - overlays_standing[HO_FACEMASK_LAYER] = null - if(update_icons) - queue_icon_update() - -/mob/living/carbon/human/update_inv_back(var/update_icons=1) - if(back) - overlays_standing[HO_BACK_LAYER] = back.get_mob_overlay(src,slot_back_str) - else - overlays_standing[HO_BACK_LAYER] = null - - if(update_icons) - queue_icon_update() - - -/mob/living/carbon/human/update_hud() //TODO: do away with this if possible - if(client) - client.screen |= contents - if(hud_used) - hud_used.hidden_inventory_update() //Updates the screenloc of the items on the 'other' inventory bar - -/mob/living/carbon/human/update_inv_handcuffed(var/update_icons=1) - if(handcuffed) - handcuffed.equip_slot = slot_handcuffed - - overlays_standing[HO_HANDCUFF_LAYER] = handcuffed.get_mob_overlay(src,slot_handcuffed_str) - else - overlays_standing[HO_HANDCUFF_LAYER] = null - if(update_icons) - queue_icon_update() - -/mob/living/carbon/human/update_inv_r_hand(var/update_icons=1) - if(r_hand) - var/image/standing = r_hand.get_mob_overlay(src,slot_r_hand_str) - if(standing) - standing.appearance_flags |= RESET_ALPHA - overlays_standing[HO_R_HAND_LAYER] = standing - - if (handcuffed) drop_r_hand() //this should be moved out of icon code - else - overlays_standing[HO_R_HAND_LAYER] = null - - if(update_icons) - queue_icon_update() - -/mob/living/carbon/human/update_inv_l_hand(var/update_icons=1) - if(l_hand) - var/image/standing = l_hand.get_mob_overlay(src,slot_l_hand_str) - if(standing) - standing.appearance_flags |= RESET_ALPHA - overlays_standing[HO_L_HAND_LAYER] = standing - - if (handcuffed) drop_l_hand() //This probably should not be here - else - overlays_standing[HO_L_HAND_LAYER] = null - - if(update_icons) - queue_icon_update() - -/mob/living/carbon/human/proc/update_tail_showing(var/update_icons=1) - overlays_standing[HO_TAIL_LAYER] = null - - var/species_tail = species.get_tail(src) - - if(species_tail && !(wear_suit && wear_suit.flags_inv & HIDETAIL)) - var/icon/tail_s = get_tail_icon() - overlays_standing[HO_TAIL_LAYER] = image(tail_s, icon_state = "[species_tail]_s") - animate_tail_reset(0) - - if(update_icons) - queue_icon_update() - -/mob/living/carbon/human/proc/get_tail_icon() - var/icon_key = "[species.get_race_key(src)][skin_color][head_hair_color]" - var/icon/tail_icon = tail_icon_cache[icon_key] - if(!tail_icon) - //generate a new one - var/species_tail_anim = species.get_tail_animation(src) - if(!species_tail_anim) species_tail_anim = 'icons/effects/species.dmi' - tail_icon = new/icon(species_tail_anim) - tail_icon.Blend(skin_color, species.tail_blend) - // The following will not work with animated tails. - var/use_species_tail = species.get_tail_hair(src) - if(use_species_tail) - var/icon/hair_icon = icon('icons/effects/species.dmi', "[species.get_tail(src)]_[use_species_tail]") - hair_icon.Blend(head_hair_color, ICON_ADD) - tail_icon.Blend(hair_icon, ICON_OVERLAY) - tail_icon_cache[icon_key] = tail_icon - - return tail_icon - - -/mob/living/carbon/human/proc/set_tail_state(var/t_state) - var/image/tail_overlay = overlays_standing[HO_TAIL_LAYER] - - if(tail_overlay && species.get_tail_animation(src)) - tail_overlay.icon_state = t_state - return tail_overlay - return null - -//Not really once, since BYOND can't do that. -//Update this if the ability to flick() images or make looping animation start at the first frame is ever added. -/mob/living/carbon/human/proc/animate_tail_once(var/update_icons=1) - var/t_state = "[species.get_tail(src)]_once" - - var/image/tail_overlay = overlays_standing[HO_TAIL_LAYER] - if(tail_overlay && tail_overlay.icon_state == t_state) - return //let the existing animation finish - - tail_overlay = set_tail_state(t_state) - if(tail_overlay) - spawn(20) - //check that the animation hasn't changed in the meantime - if(overlays_standing[HO_TAIL_LAYER] == tail_overlay && tail_overlay.icon_state == t_state) - animate_tail_stop() - - if(update_icons) - queue_icon_update() - -/mob/living/carbon/human/proc/animate_tail_start(var/update_icons=1) - set_tail_state("[species.get_tail(src)]_slow[rand(0,9)]") - - if(update_icons) - queue_icon_update() - -/mob/living/carbon/human/proc/animate_tail_fast(var/update_icons=1) - set_tail_state("[species.get_tail(src)]_loop[rand(0,9)]") - - if(update_icons) - queue_icon_update() - -/mob/living/carbon/human/proc/animate_tail_reset(var/update_icons=1) - if(stat != DEAD) - set_tail_state("[species.get_tail(src)]_idle[rand(0,9)]") - else - set_tail_state("[species.get_tail(src)]_static") - - if(update_icons) - queue_icon_update() - -/mob/living/carbon/human/proc/animate_tail_stop(var/update_icons=1) - set_tail_state("[species.get_tail(src)]_static") - - if(update_icons) - queue_icon_update() - - -//Adds a collar overlay above the helmet layer if the suit has one -// Suit needs an identically named sprite in icons/mob/collar.dmi -/mob/living/carbon/human/proc/update_collar(var/update_icons=1) - if(istype(wear_suit,/obj/item/clothing/suit)) - var/obj/item/clothing/suit/S = wear_suit - overlays_standing[HO_COLLAR_LAYER] = S.get_collar() - else - overlays_standing[HO_COLLAR_LAYER] = null - - if(update_icons) - queue_icon_update() - - -/mob/living/carbon/human/update_fire(var/update_icons=1) - overlays_standing[HO_FIRE_LAYER] = null - if(on_fire) - var/image/standing = overlay_image('icons/mob/OnFire.dmi', "Standing", RESET_COLOR) - overlays_standing[HO_FIRE_LAYER] = standing - if(update_icons) - queue_icon_update() - -/mob/living/carbon/human/proc/update_surgery(var/update_icons=1) - overlays_standing[HO_SURGERY_LAYER] = null - var/image/total = new - for(var/obj/item/organ/external/E in organs) - if(BP_IS_ROBOTIC(E) || E.is_stump()) - continue - var/how_open = round(E.how_open()) - if(how_open <= 0) - continue - var/surgery_icon = E.species.get_surgery_overlay_icon(src) - if(!surgery_icon) - continue - var/list/surgery_states = icon_states(surgery_icon) - var/base_state = "[E.icon_name][how_open]" - var/overlay_state = "[base_state]-flesh" - var/list/overlays_to_add - if(overlay_state in surgery_states) - var/image/flesh = image(icon = surgery_icon, icon_state = overlay_state, layer = -HO_SURGERY_LAYER) - flesh.color = E.species.get_flesh_colour(src) - LAZYADD(overlays_to_add, flesh) - overlay_state = "[base_state]-blood" - if(overlay_state in surgery_states) - var/image/blood = image(icon = surgery_icon, icon_state = overlay_state, layer = -HO_SURGERY_LAYER) - blood.color = E.species.get_blood_colour(src) - LAZYADD(overlays_to_add, blood) - overlay_state = "[base_state]-bones" - if(overlay_state in surgery_states) - LAZYADD(overlays_to_add, image(icon = surgery_icon, icon_state = overlay_state, layer = -HO_SURGERY_LAYER)) - total.overlays |= overlays_to_add - - total.appearance_flags = DEFAULT_APPEARANCE_FLAGS | RESET_COLOR - overlays_standing[HO_SURGERY_LAYER] = total - if(update_icons) - queue_icon_update() - -//Human Overlays Indexes///////// -#undef HO_MUTATIONS_LAYER -#undef HO_SKIN_LAYER -#undef HO_DAMAGE_LAYER -#undef HO_SURGERY_LAYER -#undef HO_UNDERWEAR_LAYER -#undef HO_UNIFORM_LAYER -#undef HO_ID_LAYER -#undef HO_SHOES_LAYER -#undef HO_GLOVES_LAYER -#undef HO_BELT_LAYER -#undef HO_EARS_LAYER -#undef HO_SUIT_LAYER -#undef HO_TAIL_LAYER -#undef HO_GLASSES_LAYER -#undef HO_BELT_LAYER_ALT -#undef HO_SUIT_STORE_LAYER -#undef HO_BACK_LAYER -#undef HO_HAIR_LAYER -#undef HO_GOGGLES_LAYER -#undef HO_FACEMASK_LAYER -#undef HO_HEAD_LAYER -#undef HO_COLLAR_LAYER -#undef HO_HANDCUFF_LAYER -#undef HO_L_HAND_LAYER -#undef HO_R_HAND_LAYER -#undef HO_FIRE_LAYER -#undef TOTAL_LAYERS diff --git a/code/modules/mob/living/carbon/human/whisper.dm b/code/modules/mob/living/carbon/human/whisper.dm deleted file mode 100644 index 23bf9c39eb1f5..0000000000000 --- a/code/modules/mob/living/carbon/human/whisper.dm +++ /dev/null @@ -1,24 +0,0 @@ -//Lallander was here -/mob/living/carbon/human/whisper(message as text) - message = sanitize(message, encode = 0) - - if (src.client) - if (src.client.prefs.muted & MUTE_IC) - to_chat(src, "You cannot whisper (muted).") - return - - if (src.stat == 2) - return src.say_dead(message) - - if (src.stat) - return - - if(get_id_name("Unknown") == GetVoice()) - SetName(get_id_name("Unknown")) - - whisper_say(message) - - -//This is used by both the whisper verb and human/say() to handle whispering -/mob/living/carbon/human/proc/whisper_say(var/message, var/datum/language/speaking = null, var/alt_name="", var/verb="whispers") - say(message, speaking, verb, alt_name, whispering = 1) \ No newline at end of file diff --git a/code/modules/mob/living/carbon/life.dm b/code/modules/mob/living/carbon/life.dm deleted file mode 100644 index f28f885409dce..0000000000000 --- a/code/modules/mob/living/carbon/life.dm +++ /dev/null @@ -1,32 +0,0 @@ -/mob/living/carbon/Life() - if(!..()) - return - - UpdateStasis() - - // Increase germ_level regularly - if(germ_level < GERM_LEVEL_AMBIENT && prob(30)) //if you're just standing there, you shouldn't get more germs beyond an ambient level - germ_level++ - - if(stat != DEAD && !InStasis()) - //Breathing, if applicable - handle_breathing() - - //Chemicals in the body - handle_chemicals_in_body() - - //Random events (vomiting etc) - handle_random_events() - - // eye, ear, brain damages - handle_disabilities() - - //all special effects, stunned, weakened, jitteryness, hallucination, sleeping, etc - handle_statuses() - - handle_viruses() - - . = 1 - - if(!client && (!mind || ghosted) && species) - species.handle_npc(src) diff --git a/code/modules/mob/living/carbon/resist.dm b/code/modules/mob/living/carbon/resist.dm deleted file mode 100644 index b03a33a4762f1..0000000000000 --- a/code/modules/mob/living/carbon/resist.dm +++ /dev/null @@ -1,155 +0,0 @@ -/mob/living/carbon/process_resist() - - //drop && roll - if(on_fire && !buckled) - fire_stacks -= 1.2 - Weaken(3) - spin(32,2) - visible_message( - "[src] rolls on the floor, trying to put themselves out!", - "You stop, drop, and roll!" - ) - sleep(30) - if(fire_stacks <= 0) - visible_message( - "[src] has successfully extinguished themselves!", - "You extinguish yourself." - ) - ExtinguishMob() - return TRUE - - if(..()) - return TRUE - - if(handcuffed) - spawn() escape_handcuffs() - -/mob/living/carbon/proc/escape_handcuffs() - //if(!(last_special <= world.time)) return - - //This line represent a significant buff to grabs... - // We don't have to check the click cooldown because /mob/living/verb/resist() has done it for us, we can simply set the delay - setClickCooldown(100) - - if(can_break_cuffs()) //Don't want to do a lot of logic gating here. - break_handcuffs() - return - - var/obj/item/handcuffs/HC = handcuffed - - //A default in case you are somehow handcuffed with something that isn't an obj/item/handcuffs type - var/breakouttime = istype(HC) ? HC.breakouttime : 2 MINUTES - - var/mob/living/carbon/human/H = src - if(istype(H) && H.gloves && istype(H.gloves,/obj/item/clothing/gloves/rig)) - breakouttime /= 2 - - if(psi && psi.can_use()) - var/psi_mod = (1 - (psi.get_rank(PSI_PSYCHOKINESIS)*0.2)) - breakouttime = max(5, breakouttime * psi_mod) - - visible_message( - "\The [src] attempts to remove \the [HC]!", - "You attempt to remove \the [HC] (This will take around [breakouttime / (1 SECOND)] second\s and you need to stand still).", range = 2 - ) - - var/stages = 4 - for(var/i = 1 to stages) - if(do_after(src, breakouttime*0.25, do_flags = DO_DEFAULT | DO_USER_UNIQUE_ACT, incapacitation_flags = INCAPACITATION_DEFAULT & ~INCAPACITATION_RESTRAINED)) - if(!handcuffed || buckled) - return - to_chat(src, SPAN_WARNING("You try to slip free of \the [handcuffed] ([i*100/stages]% done).")) - else - if(!handcuffed || buckled) - return - to_chat(src, SPAN_WARNING("You stop trying to slip free of \the [handcuffed].")) - return - if(!handcuffed || buckled) - return - if (handcuffed.health_max) // Improvised cuffs can break because their health is > 0 - if (handcuffed.damage_health(handcuffed.get_max_health() / 2)) - visible_message( - SPAN_DANGER("\The [src] manages to remove \the [handcuffed], breaking them!"), - SPAN_NOTICE("You successfully remove \the [handcuffed], breaking them!"), range = 2 - ) - QDEL_NULL(handcuffed) - if(buckled && buckled.buckle_require_restraints) - buckled.unbuckle_mob() - update_inv_handcuffed() - return - visible_message( - SPAN_WARNING("\The [src] manages to remove \the [handcuffed]!"), - SPAN_NOTICE("You successfully remove \the [handcuffed]!"), range = 2 - ) - drop_from_inventory(handcuffed) - return - -/mob/living/proc/can_break_cuffs() - . = (psi && psi.can_use() && psi.get_rank(PSI_PSYCHOKINESIS) >= 5) - -/mob/living/carbon/can_break_cuffs() - . = ..() || (MUTATION_HULK in mutations) - -/mob/living/carbon/proc/break_handcuffs() - visible_message( - "[src] is trying to break \the [handcuffed]!", - "You attempt to break your [handcuffed.name]. (This will take around 5 seconds and you need to stand still)" - ) - - if(do_after(src, 5 SECONDS, do_flags = DO_DEFAULT | DO_USER_UNIQUE_ACT, incapacitation_flags = INCAPACITATION_DEFAULT & ~INCAPACITATION_RESTRAINED)) - if(!handcuffed || buckled) - return - - visible_message( - "[src] manages to break \the [handcuffed]!", - "You successfully break your [handcuffed.name]." - ) - - if(MUTATION_HULK in mutations) - say(pick(";RAAAAAAAARGH!", ";HNNNNNNNNNGGGGGGH!", ";GWAAAAAAAARRRHHH!", "NNNNNNNNGGGGGGGGHH!", ";AAAAAAARRRGH!" )) - - qdel(handcuffed) - handcuffed = null - if(buckled && buckled.buckle_require_restraints) - buckled.unbuckle_mob() - update_inv_handcuffed() - -/mob/living/carbon/human/can_break_cuffs() - . = ..() || species.can_shred(src,1) - -/mob/living/carbon/escape_buckle() - var/unbuckle_time - if(src.handcuffed && istype(src.buckled, /obj/effect/energy_net)) - var/obj/effect/energy_net/N = src.buckled - N.escape_net(src) //super snowflake but is literally used NOWHERE ELSE.-Luke - return - - if(!buckled) return - if(!restrained()) - ..() - else - setClickCooldown(100) - unbuckle_time = 2 MINUTES - if(psi && psi.can_use()) - unbuckle_time = max(0, unbuckle_time - ((25 SECONDS) * psi.get_rank(PSI_PSYCHOKINESIS))) - - visible_message( - "[src] attempts to unbuckle themself!", - "You attempt to unbuckle yourself. (This will take around [unbuckle_time / (1 SECOND)] second\s and you need to stand still)", range = 2 - ) - - if(unbuckle_time && buckled) - var/stages = 2 - for(var/i = 1 to stages) - if(!unbuckle_time || do_after(usr, unbuckle_time*0.5, do_flags = DO_DEFAULT | DO_USER_UNIQUE_ACT, incapacitation_flags = INCAPACITATION_DISABLED)) - if(!buckled) - return - to_chat(src, SPAN_WARNING("You try to unbuckle yourself ([i*100/stages]% done).")) - else - if(!buckled) - return - to_chat(src, SPAN_WARNING("You stop trying to unbuckle yourself.")) - return - to_chat(src, SPAN_NOTICE("You successfully unbuckle yourself.")) - buckled.user_unbuckle_mob(src) - return diff --git a/code/modules/mob/living/carbon/taste.dm b/code/modules/mob/living/carbon/taste.dm deleted file mode 100644 index 8e28ddcad5c42..0000000000000 --- a/code/modules/mob/living/carbon/taste.dm +++ /dev/null @@ -1,67 +0,0 @@ - -/mob/living/carbon/proc/ingest(var/datum/reagents/from, var/datum/reagents/target, var/amount = 1, var/multiplier = 1, var/copy = 0) //we kind of 'sneak' a proc in here for ingesting stuff so we can play with it. - if(last_taste_time + 50 < world.time) - var/datum/reagents/temp = new(amount, GLOB.temp_reagents_holder) //temporary holder used to analyse what gets transfered. - from.trans_to_holder(temp, amount, multiplier, 1) - - var/text_output = temp.generate_taste_message(src) - if(text_output != last_taste_text || last_taste_time + 100 < world.time) //We dont want to spam the same message over and over again at the person. Give it a bit of a buffer. - to_chat(src, "You can taste [text_output].")//no taste means there are too many tastes and not enough flavor. - - last_taste_time = world.time - last_taste_text = text_output - return from.trans_to_holder(target,amount,multiplier,copy) //complete transfer - -/* what this does: -catalogue the 'taste strength' of each one -calculate text size per text. -*/ -/datum/reagents/proc/generate_taste_message(mob/living/carbon/taster = null) - var/minimum_percent = 15 - if(ishuman(taster)) - var/mob/living/carbon/human/H = taster - minimum_percent = round(15/ (H.isSynthetic() ? TASTE_DULL : H.species.taste_sensitivity)) - - var/list/out = list() - var/list/tastes = list() //descriptor = strength - if(minimum_percent <= 100) - for(var/datum/reagent/R in reagent_list) - if(!R.taste_mult) - continue - if(R.type == /datum/reagent/nutriment) //this is ugly but apparently only nutriment (not subtypes) has taste data TODO figure out why - var/list/taste_data = R.get_data() - for(var/taste in taste_data) - if(taste in tastes) - tastes[taste] += taste_data[taste] - else - tastes[taste] = taste_data[taste] - else - var/taste_desc = R.taste_description - var/taste_amount = get_reagent_amount(R.type) * R.taste_mult - if(R.taste_description in tastes) - tastes[taste_desc] += taste_amount - else - tastes[taste_desc] = taste_amount - - //deal with percentages - var/total_taste = 0 - for(var/taste_desc in tastes) - total_taste += tastes[taste_desc] - for(var/taste_desc in tastes) - var/percent = tastes[taste_desc]/total_taste * 100 - if(percent < minimum_percent) - continue - var/intensity_desc = "a hint of" - if(percent > minimum_percent * 2 || percent == 100) - intensity_desc = "" - else if(percent > minimum_percent * 3) - intensity_desc = "the strong flavor of" - if(intensity_desc == "") - out += "[taste_desc]" - else - out += "[intensity_desc] [taste_desc]" - - return english_list(out, "something indescribable") - -/mob/living/carbon/proc/get_fullness() - return nutrition + (reagents.get_reagent_amount(/datum/reagent/nutriment) * 25) \ No newline at end of file diff --git a/code/modules/mob/living/carbon/viruses.dm b/code/modules/mob/living/carbon/viruses.dm deleted file mode 100644 index 9f657c52aa5cf..0000000000000 --- a/code/modules/mob/living/carbon/viruses.dm +++ /dev/null @@ -1,16 +0,0 @@ -/mob/living/carbon - var/immunity = 100 //current immune system strength - var/immunity_norm = 100 //it will regenerate to this value - -/mob/living/carbon/proc/handle_viruses() - if(status_flags & GODMODE) return 0 //godmode - - if(immunity > 0.2 * immunity_norm && immunity < immunity_norm) - immunity = min(immunity + 0.25, immunity_norm) - -/mob/living/carbon/proc/virus_immunity() - var/antibiotic_boost = reagents.get_reagent_amount(/datum/reagent/spaceacillin) / (REAGENTS_OVERDOSE/2) - return max(immunity/100 * (1+antibiotic_boost), antibiotic_boost) - -/mob/living/carbon/proc/immunity_weakness() - return max(2-virus_immunity(), 0) \ No newline at end of file diff --git a/code/modules/mob/living/carbon/xenobiological/death.dm b/code/modules/mob/living/carbon/xenobiological/death.dm deleted file mode 100644 index 330a6532f64da..0000000000000 --- a/code/modules/mob/living/carbon/xenobiological/death.dm +++ /dev/null @@ -1,22 +0,0 @@ -/mob/living/carbon/slime/death(gibbed, deathmessage, show_dead_message) - - if(stat == DEAD) return - - if(!gibbed && is_adult) - var/mob/living/carbon/slime/M = new /mob/living/carbon/slime(loc, colour) - M.rabid = 1 - M.Friends = Friends.Copy() - step_away(M, src) - is_adult = 0 - maxHealth = 150 - revive() - if (!client) rabid = 1 - number = rand(1, 1000) - SetName("[colour] [is_adult ? "adult" : "baby"] slime ([number])") - return - - . = ..(gibbed, deathmessage, show_dead_message) - mood = null - regenerate_icons() - - return \ No newline at end of file diff --git a/code/modules/mob/living/carbon/xenobiological/examine.dm b/code/modules/mob/living/carbon/xenobiological/examine.dm deleted file mode 100644 index bf6938a7390ad..0000000000000 --- a/code/modules/mob/living/carbon/xenobiological/examine.dm +++ /dev/null @@ -1,31 +0,0 @@ -/mob/living/carbon/slime/examine(mob/user) - . = ..() - var/msg = "" - if (src.stat == DEAD) - msg += "It is limp and unresponsive.\n" - else - if (src.getBruteLoss()) - msg += "" - if (src.getBruteLoss() < 40) - msg += "It has some punctures in its flesh!" - else - msg += "It has severe punctures and tears in its flesh!" - msg += "\n" - - switch(powerlevel) - - if(2 to 3) - msg += "It is flickering gently with a little electrical activity.\n" - - if(4 to 5) - msg += "It is glowing gently with moderate levels of electrical activity.\n" - - if(6 to 9) - msg += "It is glowing brightly with high levels of electrical activity.\n" - - if(10) - msg += "It is radiating with massive levels of electrical activity!\n" - - msg += "*---------*" - to_chat(user, msg) - return \ No newline at end of file diff --git a/code/modules/mob/living/carbon/xenobiological/hud.dm b/code/modules/mob/living/carbon/xenobiological/hud.dm deleted file mode 100644 index c093d61f8cf24..0000000000000 --- a/code/modules/mob/living/carbon/xenobiological/hud.dm +++ /dev/null @@ -1,2 +0,0 @@ -/mob/living/carbon/slime/handle_regular_hud_updates() - return \ No newline at end of file diff --git a/code/modules/mob/living/carbon/xenobiological/items.dm b/code/modules/mob/living/carbon/xenobiological/items.dm deleted file mode 100644 index ac6e160d7eccc..0000000000000 --- a/code/modules/mob/living/carbon/xenobiological/items.dm +++ /dev/null @@ -1,328 +0,0 @@ -/obj/item/slime_extract - name = "slime extract" - desc = "Goo extracted from a slime. Legends claim these to have \"magical powers\"." - icon = 'icons/mob/simple_animal/slimes.dmi' - icon_state = "grey slime extract" - force = 1.0 - w_class = ITEM_SIZE_TINY - throwforce = 0 - throw_speed = 3 - throw_range = 6 - origin_tech = list(TECH_BIO = 4) - var/Uses = 1 // uses before it goes inert - var/enhanced = 0 //has it been enhanced before? - atom_flags = ATOM_FLAG_OPEN_CONTAINER - -/obj/item/slime_extract/attackby(obj/item/O as obj, mob/user as mob) - if(istype(O, /obj/item/slimesteroid2)) - if(enhanced == 1) - to_chat(user, " This extract has already been enhanced!") - return ..() - if(Uses == 0) - to_chat(user, " You can't enhance a used extract!") - return ..() - to_chat(user, "You apply the enhancer. It now has triple the amount of uses.") - Uses = 3 - enhanced = 1 - qdel(O) - -/obj/item/slime_extract/New() - GLOB.extracted_slime_cores_amount += 1 - create_reagents(100) - reagents.add_reagent(/datum/reagent/slimejelly, 30) - ..() - -/obj/item/slime_extract/grey - name = "grey slime extract" - icon_state = "grey slime extract" - -/obj/item/slime_extract/gold - name = "gold slime extract" - icon_state = "gold slime extract" - -/obj/item/slime_extract/silver - name = "silver slime extract" - icon_state = "silver slime extract" - -/obj/item/slime_extract/metal - name = "metal slime extract" - icon_state = "metal slime extract" - -/obj/item/slime_extract/purple - name = "purple slime extract" - icon_state = "purple slime extract" - -/obj/item/slime_extract/darkpurple - name = "dark purple slime extract" - icon_state = "dark purple slime extract" - -/obj/item/slime_extract/orange - name = "orange slime extract" - icon_state = "orange slime extract" - -/obj/item/slime_extract/yellow - name = "yellow slime extract" - icon_state = "yellow slime extract" - -/obj/item/slime_extract/red - name = "red slime extract" - icon_state = "red slime extract" - -/obj/item/slime_extract/blue - name = "blue slime extract" - icon_state = "blue slime extract" - -/obj/item/slime_extract/darkblue - name = "dark blue slime extract" - icon_state = "dark blue slime extract" - -/obj/item/slime_extract/pink - name = "pink slime extract" - icon_state = "pink slime extract" - -/obj/item/slime_extract/green - name = "green slime extract" - icon_state = "green slime extract" - -/obj/item/slime_extract/lightpink - name = "light pink slime extract" - icon_state = "light pink slime extract" - -/obj/item/slime_extract/black - name = "black slime extract" - icon_state = "black slime extract" - -/obj/item/slime_extract/oil - name = "oil slime extract" - icon_state = "oil slime extract" - -/obj/item/slime_extract/adamantine - name = "adamantine slime extract" - icon_state = "adamantine slime extract" - -/obj/item/slime_extract/adamantine/Initialize() - . = ..() - reagents.add_reagent(/datum/reagent/crystal, 10) - -/obj/item/slime_extract/bluespace - name = "bluespace slime extract" - icon_state = "bluespace slime extract" - -/obj/item/slime_extract/pyrite - name = "pyrite slime extract" - icon_state = "pyrite slime extract" - -/obj/item/slime_extract/cerulean - name = "cerulean slime extract" - icon_state = "cerulean slime extract" - -/obj/item/slime_extract/sepia - name = "sepia slime extract" - icon_state = "sepia slime extract" - -/obj/item/slime_extract/rainbow - name = "rainbow slime extract" - icon_state = "rainbow slime extract" - -////Pet Slime Creation/// - -/obj/item/slimepotion - name = "docility potion" - desc = "A potent chemical mix that will nullify a slime's powers, causing it to become docile and tame." - icon = 'icons/obj/chemical.dmi' - icon_state = "bottle19" - -/obj/item/slimepotion/attack(mob/living/carbon/slime/M as mob, mob/user as mob) - if(!istype(M, /mob/living/carbon/slime))//If target is not a slime. - to_chat(user, " The potion only works on baby slimes!") - return ..() - if(M.is_adult) //Can't tame adults - to_chat(user, " Only baby slimes can be tamed!") - return..() - if(M.stat) - to_chat(user, " The slime is dead!") - return..() - if(M.mind) - to_chat(user, " The slime resists!") - return ..() - var/mob/living/simple_animal/slime/pet = new /mob/living/simple_animal/slime(M.loc) - pet.icon_state = "[M.colour] baby slime" - pet.icon_living = "[M.colour] baby slime" - pet.icon_dead = "[M.colour] baby slime dead" - pet.colour = "[M.colour]" - to_chat(user, "You feed the slime the potion, removing it's powers and calming it.") - qdel(M) - var/newname = sanitize(input(user, "Would you like to give the slime a name?", "Name your new pet", "pet slime") as null|text, MAX_NAME_LEN) - - if (!newname) - newname = "pet slime" - pet.SetName(newname) - pet.real_name = newname - qdel(src) - -/obj/item/slimepotion2 - name = "advanced docility potion" - desc = "A potent chemical mix that will nullify a slime's powers, causing it to become docile and tame. This one is meant for adult slimes." - icon = 'icons/obj/chemical.dmi' - icon_state = "bottle19" - -/obj/item/slimepotion2/attack(mob/living/carbon/slime/M as mob, mob/user as mob) - if(!istype(M, /mob/living/carbon/slime)) - to_chat(user, " The potion only works on slimes!") - return ..() - if(M.stat) - to_chat(user, " The slime is dead!") - return..() - if(M.mind) - to_chat(user, " The slime resists!") - return ..() - var/mob/living/simple_animal/adultslime/pet = new /mob/living/simple_animal/adultslime(M.loc) - pet.icon_state = "[M.colour] adult slime" - pet.icon_living = "[M.colour] adult slime" - pet.icon_dead = "[M.colour] baby slime dead" - pet.colour = "[M.colour]" - to_chat(user, "You feed the slime the potion, removing it's powers and calming it.") - qdel(M) - var/newname = sanitize(input(user, "Would you like to give the slime a name?", "Name your new pet", "pet slime") as null|text, MAX_NAME_LEN) - - if (!newname) - newname = "pet slime" - pet.SetName(newname) - pet.real_name = newname - qdel(src) - - -/obj/item/slimesteroid - name = "slime steroid" - desc = "A potent chemical mix that will cause a slime to generate more extract." - icon = 'icons/obj/chemical.dmi' - icon_state = "bottle16" - -/obj/item/slimesteroid/attack(mob/living/carbon/slime/M as mob, mob/user as mob) - if(!istype(M, /mob/living/carbon/slime))//If target is not a slime. - to_chat(user, " The steroid only works on baby slimes!") - return ..() - if(M.is_adult) //Can't tame adults - to_chat(user, " Only baby slimes can use the steroid!") - return..() - if(M.stat) - to_chat(user, " The slime is dead!") - return..() - if(M.cores == 3) - to_chat(user, " The slime already has the maximum amount of extract!") - return..() - - to_chat(user, "You feed the slime the steroid. It now has triple the amount of extract.") - M.cores = 3 - qdel(src) - -/obj/item/slimesteroid2 - name = "extract enhancer" - desc = "A potent chemical mix that will give a slime extract three uses." - icon = 'icons/obj/chemical.dmi' - icon_state = "bottle17" - -/obj/item/slimesteroid2/afterattack(obj/target, mob/user , flag) - if(istype(target, /obj/item/slime_extract)) - var/obj/item/slime_extract/extract = target - if(extract.enhanced == 1) - to_chat(user, " This extract has already been enhanced!") - return ..() - if(extract.Uses == 0) - to_chat(user, " You can't enhance a used extract!") - return ..() - to_chat(user, "You apply the enhancer. It now has triple the amount of uses.") - extract.Uses = 3 - extract.enhanced = 1 - qdel(src) - -//Revival potion// -/obj/item/slimepotion3 - name= "revival potion" - desc= "A potent chemical mix that will revitalize a recently dead slime" - icon= 'icons/obj/chemical.dmi' - icon_state= "bottle15" - -/obj/item/slimepotion3/attack(mob/living/carbon/slime/M, mob/user) - if(!istype(M)) //If target is not a slime. - to_chat(user, SPAN_WARNING("\The [src] only works on slimes!")) - return..() - if(M.is_adult) //Can't revive adults - to_chat(user, SPAN_WARNING("Only baby slimes can use \the [src]!")) - return FALSE - if(M.cores < 1) - to_chat(user, SPAN_WARNING("\The [M] has no cores!")) - return FALSE - if(M.stat== CONSCIOUS)//need to change this to living? - to_chat(user, SPAN_WARNING("\The [M] is already alive!")) - return FALSE - user.visible_message( - visible_message(user, SPAN_NOTICE("The [user] feeds \a [src] to \the [M]. Life floods back into it!")), - to_chat(user, SPAN_NOTICE("You feed \the [src] to \the [M]. Life floods back into it!")) - ) - M.revive() - qdel(src) - - -/obj/effect/golemrune - anchored = TRUE - desc = "a strange rune used to create golems. It glows when it can be activated." - name = "rune" - icon = 'icons/obj/rune.dmi' - icon_state = "golem" - unacidable = TRUE - layer = RUNE_LAYER - -/obj/effect/golemrune/Initialize() - . = ..() - START_PROCESSING(SSobj, src) - -/obj/effect/golemrune/Process() - var/mob/observer/ghost/ghost - for(var/mob/observer/ghost/O in src.loc) - if(!O.client) continue - if(O.mind && O.mind.current && O.mind.current.stat != DEAD) continue - ghost = O - break - if(ghost) - icon_state = "golem2" - else - icon_state = "golem" - -/obj/effect/golemrune/attack_hand(mob/living/user as mob) - var/mob/observer/ghost/ghost - for(var/mob/observer/ghost/O in src.loc) - if(!O.client) - continue - if(O.mind && O.mind.current && O.mind.current.stat != DEAD) - continue - ghost = O - break - if(!ghost) - to_chat(user, SPAN_WARNING("The rune fizzles uselessly.")) - return - visible_message(SPAN_WARNING("A craggy humanoid figure coalesces into being!")) - - var/mob/living/carbon/human/G = new(src.loc) - G.set_species("Golem") - G.key = ghost.key - - var/obj/item/implant/translator/natural/I = new() - I.implant_in_mob(G, BP_HEAD) - if (user.languages.len) - var/datum/language/lang = user.languages[1] - G.add_language(lang.name) - G.set_default_language(lang) - I.languages[lang.name] = 1 - - to_chat(G, FONT_LARGE(SPAN_BOLD("You are a golem. Serve [user] and assist them at any cost."))) - to_chat(G, SPAN_ITALIC("You move slowly and are vulnerable to trauma, but are resistant to heat and cold.")) - qdel(src) - - -/obj/effect/golemrune/proc/announce_to_ghosts() - for(var/mob/observer/ghost/G in GLOB.player_list) - if(G.client) - var/area/A = get_area(src) - if(A) - to_chat(G, "Golem rune created in [A.name].") diff --git a/code/modules/mob/living/carbon/xenobiological/life.dm b/code/modules/mob/living/carbon/xenobiological/life.dm deleted file mode 100644 index d34dc715c3b00..0000000000000 --- a/code/modules/mob/living/carbon/xenobiological/life.dm +++ /dev/null @@ -1,171 +0,0 @@ -/mob/living/carbon/slime/Life() - set invisibility = 0 - set background = 1 - - if (HAS_TRANSFORMATION_MOVEMENT_HANDLER(src)) - return - - ..() - - if(stat != DEAD) - handle_nutrition() - - if(!client) - handle_regular_AI() - -/mob/living/carbon/slime/handle_environment(datum/gas_mixture/environment) - if(!environment) - adjustToxLoss(rand(10,20)) - return - - //var/environment_heat_capacity = environment.heat_capacity() - var/loc_temp = T0C - if(istype(get_turf(src), /turf/space)) - //environment_heat_capacity = loc:heat_capacity - var/turf/heat_turf = get_turf(src) - loc_temp = heat_turf.temperature - else if(istype(loc, /obj/machinery/atmospherics/unary/cryo_cell)) - var/obj/machinery/atmospherics/unary/cryo_cell/cryo - loc_temp = cryo.air_contents.temperature - else - loc_temp = environment.temperature - - bodytemperature += adjust_body_temperature(bodytemperature, loc_temp, 1) - - if(bodytemperature < (T0C + 5)) // start calculating temperature damage etc - if(bodytemperature <= hurt_temperature) - if(bodytemperature <= die_temperature) - adjustToxLoss(200) - else - // could be more fancy, but doesn't worth the complexity: when the slimes goes into a cold area - // the damage is mostly determined by how fast its body cools - adjustToxLoss(30) - - updatehealth() - - return //TODO: DEFERRED - -/mob/living/carbon/slime/proc/adjust_body_temperature(current, loc_temp, boost) - var/btemperature = current - var/difference = abs(current-loc_temp) //get difference - var/increments// = difference/10 //find how many increments apart they are - if(difference > 50) - increments = difference/5 - else - increments = difference/10 - var/change = increments*boost // Get the amount to change by (x per increment) - var/temp_change - if(current < loc_temp) - btemperature = min(loc_temp, btemperature+change) - else if(current > loc_temp) - btemperature = max(loc_temp, btemperature-change) - temp_change = (btemperature - current) - return temp_change - -/mob/living/carbon/slime/handle_chemicals_in_body() - chem_effects.Cut() - - if(touching) touching.metabolize() - var/datum/reagents/metabolism/ingested = get_ingested_reagents() - if(istype(ingested)) ingested.metabolize() - if(bloodstr) bloodstr.metabolize() - - src.updatehealth() - - return //TODO: DEFERRED - -/mob/living/carbon/slime/handle_regular_status_updates() - - src.blinded = null - - health = maxHealth - (getOxyLoss() + getToxLoss() + getFireLoss() + getBruteLoss() + getCloneLoss()) - - if(health < 0 && stat != DEAD) - death() - return - - if(getHalLoss()) - setHalLoss(0) - - if(prob(30)) - adjustOxyLoss(-1) - adjustToxLoss(-1) - adjustFireLoss(-1) - adjustCloneLoss(-1) - adjustBruteLoss(-1) - - if (src.stat == DEAD) - src.lying = 1 - src.blinded = 1 - else - if (src.paralysis || src.stunned || src.weakened || (status_flags && FAKEDEATH)) //Stunned etc. - if (src.stunned > 0) - src.set_stat(CONSCIOUS) - if (src.weakened > 0) - src.lying = 0 - src.set_stat(CONSCIOUS) - if (src.paralysis > 0) - src.blinded = 0 - src.lying = 0 - src.set_stat(CONSCIOUS) - - else - src.lying = 0 - src.set_stat(CONSCIOUS) - - if (src.stuttering) src.stuttering = 0 - - if (src.eye_blind) - src.eye_blind = 0 - src.blinded = 1 - - if (src.ear_deaf > 0) src.ear_deaf = 0 - if (src.ear_damage < 25) - src.ear_damage = 0 - - src.set_density(!src.lying) - - if (src.sdisabilities & BLINDED) - src.blinded = 1 - if (src.sdisabilities & DEAFENED) - src.ear_deaf = 1 - - if (src.eye_blurry > 0) - src.eye_blurry = 0 - - if (src.druggy > 0) - src.druggy = 0 - - return 1 - -/mob/living/carbon/slime/proc/handle_nutrition() - - adjust_nutrition(-(0.1 + 0.05 * is_adult)) - - if(nutrition <= 0) - adjustToxLoss(2) - if (client && prob(5)) - to_chat(src, "You are starving!") - - else if (nutrition >= get_grow_nutrition() && amount_grown < SLIME_EVOLUTION_THRESHOLD) - adjust_nutrition(-20) - amount_grown++ - -/mob/living/carbon/slime/proc/get_max_nutrition() // Can't go above it - if (is_adult) return 1200 - else return 1000 - -/mob/living/carbon/slime/proc/get_grow_nutrition() // Above it we grow, below it we can eat - if (is_adult) return 1000 - else return 800 - -/mob/living/carbon/slime/proc/get_hunger_nutrition() // Below it we will always eat - if (is_adult) return 600 - else return 500 - -/mob/living/carbon/slime/proc/get_starve_nutrition() // Below it we will eat before everything else - if (is_adult) return 300 - else return 200 - -/mob/living/carbon/slime/slip() //Can't slip something without legs. - return 0 diff --git a/code/modules/mob/living/carbon/xenobiological/powers.dm b/code/modules/mob/living/carbon/xenobiological/powers.dm deleted file mode 100644 index d81ba8d9536a3..0000000000000 --- a/code/modules/mob/living/carbon/xenobiological/powers.dm +++ /dev/null @@ -1,182 +0,0 @@ -/mob/living/carbon/slime/proc/Wrap(var/mob/living/M) // This is a proc for the clicks - if (Victim == M || src == M) - Feedstop() - return - - if (Victim) - to_chat(src, "I am already feeding...") - return - - var t = invalidFeedTarget(M) - if (t) - to_chat(src, t) - return - - Feedon(M) - - -/mob/living/carbon/slime/proc/invalidFeedTarget(mob/living/living) - if (!istype(living)) - return "This subject is incompatible..." - if (living.stat == DEAD) - return "This subject is dead..." - if (!Adjacent(living)) - return "This subject is too far away..." - if (living.isSynthetic()) - return "This subject does not have an edible life energy..." - if (iscarbon(living)) - var/mob/living/carbon/carbon = living - if (carbon.species?.species_flags & (SPECIES_FLAG_NO_POISON | SPECIES_FLAG_NO_SCAN)) - return "This subject does not have an edible life energy..." - if (carbon.getCloneLoss() >= carbon.maxHealth * 1.5) - return "This subject does not have an edible life energy..." - if (istype(carbon, /mob/living/carbon/slime)) - return "I cannot feed on other slimes..." - if (living.get_blocked_ratio(null, DAMAGE_TOXIN, damage_flags = DAMAGE_FLAG_DISPERSED | DAMAGE_FLAG_BIO) >= 1) - return "This subject is protected..." - for (var/mob/living/carbon/slime/other in oview()) - if (other.Victim == living) - return "\The [other] is already feeding on this subject..." - - -/mob/living/carbon/slime/proc/Feedon(var/mob/living/M) - set waitfor = 0 - Victim = M - forceMove(M.loc) - - sleep(20) // A small delay to give the victim a chance to shake them off - - regenerate_icons() - var/happyWithFood = 0 - var/totalDrained = 0 - - while(Victim && stat != 2) - if(Adjacent(M)) - UpdateFeed() - - var/hazmat = 1 - M.get_blocked_ratio(null, DAMAGE_TOXIN, damage_flags = DAMAGE_FLAG_DISPERSED | DAMAGE_FLAG_BIO) //scale feeding rate by overall bio protection - if(istype(M, /mob/living/carbon)) - Victim.adjustCloneLoss(5 * hazmat) - Victim.adjustToxLoss(1 * hazmat) - if(Victim.health <= 0) - Victim.adjustToxLoss(1 * hazmat) - - else if(istype(M, /mob/living/simple_animal)) - Victim.adjustBruteLoss(10 * hazmat) - - else - to_chat(src, "[pick("This subject is incompatable", "This subject does not have a life energy", "This subject is empty", "I am not satisified", "I can not feed from this subject", "I do not feel nourished", "This subject is not food")]...") - Feedstop() - break - - if(prob(15) && M.client && istype(M, /mob/living/carbon)) - var/painMes = pick("You can feel your body becoming weak!", "You feel like you're about to die!", "You feel every part of your body screaming in agony!", "A low, rolling pain passes through your body!", "Your body feels as if it's falling apart!", "You feel extremely weak!", "A sharp, deep pain bathes every inch of your body!") - if (ishuman(M)) - var/mob/living/carbon/human/H = M - H.custom_pain(painMes,100) - else if (istype(M, /mob/living/carbon)) - var/mob/living/carbon/C = M - if (C.can_feel_pain()) - to_chat(M, "[painMes]") - M.update_personal_goal(/datum/goal/achievement/notslimefodder, FALSE) - - gain_nutrition(20 * hazmat) - totalDrained += 20 * hazmat - if(totalDrained > 200) - happyWithFood = 1 - - var/heal_amt = 10 * hazmat - adjustOxyLoss(-heal_amt) //Heal yourself - adjustBruteLoss(-heal_amt) - adjustFireLoss(-heal_amt) - adjustCloneLoss(-heal_amt) - updatehealth() - if(Victim) - Victim.updatehealth() - - if(invalidFeedTarget(M) && totalDrained > 40) // Drained - happyWithFood = 1 - break - - sleep(20) // Deal damage every 2 seconds - else - break - - if(happyWithFood) // This means that the slime has either drained the victim or let it go - if(!client) - if(Victim && !rabid && !attacked && Victim.LAssailant && Victim.LAssailant != Victim) - if(!(Victim.LAssailant in Friends)) - Friends[Victim.LAssailant] = 1 - else - ++Friends[Victim.LAssailant] - - else - to_chat(src, "This subject does not have a strong enough life energy anymore...") - - Victim = null - -/mob/living/carbon/slime/proc/Feedstop() - if(Victim) - Victim = null - -/mob/living/carbon/slime/proc/UpdateFeed() - if(Victim) - forceMove(Victim.loc) // simple "attach to head" effect! - -/mob/living/carbon/slime/verb/Evolve() - set category = "Slime" - set desc = "This will let you evolve from baby to adult slime." - - if(stat) - to_chat(src, "I must be conscious to do this...") - return - - if(!is_adult) - if(amount_grown >= SLIME_EVOLUTION_THRESHOLD) - is_adult = 1 - maxHealth = 200 - amount_grown = 0 - regenerate_icons() - SetName(text("[colour] [is_adult ? "adult" : "baby"] slime ([number])")) - else - to_chat(src, "I am not ready to evolve yet...") - else - to_chat(src, "I have already evolved...") - -/mob/living/carbon/slime/verb/Reproduce() - set category = "Slime" - set desc = "This will make you split into four slimes." - - if(stat) - to_chat(src, "I must be conscious to do this...") - return - - if(is_adult) - if(amount_grown >= SLIME_EVOLUTION_THRESHOLD) - if(stat) - to_chat(src, "I must be conscious to do this...") - return - - var/list/babies = list() - var/list/mutations = GetMutations() - for(var/i = 1 to 4) - var/t = colour - if (mutations.len && prob(mutation_chance)) - t = pick(mutations) - var/mob/living/carbon/slime/M = new /mob/living/carbon/slime(loc, t) - if(i != 1) - step_away(M, src) - M.Friends = Friends.Copy() - babies += M - - var/mob/living/carbon/slime/new_slime = babies[1] - new_slime.universal_speak = universal_speak - if(src.mind) - src.mind.transfer_to(new_slime) - else - new_slime.key = src.key - qdel(src) - else - to_chat(src, "I am not ready to reproduce yet...") - else - to_chat(src, "I am not old enough to reproduce yet...") diff --git a/code/modules/mob/living/carbon/xenobiological/say.dm b/code/modules/mob/living/carbon/xenobiological/say.dm deleted file mode 100644 index d247839b27273..0000000000000 --- a/code/modules/mob/living/carbon/xenobiological/say.dm +++ /dev/null @@ -1,39 +0,0 @@ -/mob/living/carbon/slime/say(var/message) - - message = sanitize(message) - - var/verb = say_quote(message) - - if(copytext_char(message,1,2) == get_prefix_key(/decl/prefix/custom_emote)) - return emote(copytext_char(message,2)) - - return ..(message, null, verb) - -/mob/living/carbon/slime/say_quote(var/text) - var/ending = copytext_char(text, -1) - - if (ending == "?") - return "asks"; - else if (ending == "!") - return "cries"; - - return "chirps"; - -/mob/living/carbon/slime/say_understands(var/other) - if (istype(other, /mob/living/carbon/slime)) - return 1 - return ..() - -/mob/living/carbon/slime/hear_say(var/message, var/verb = "says", var/datum/language/language = null, var/alt_name = "", var/italics = 0, var/mob/speaker = null, var/sound/speech_sound, var/sound_vol) - if (speaker in Friends) - speech_buffer = list() - speech_buffer.Add(speaker) - speech_buffer.Add(lowertext(html_decode(message))) - ..() - -/mob/living/carbon/slime/hear_radio(var/message, var/verb="says", var/datum/language/language=null, var/part_a, var/part_b, var/part_c, var/mob/speaker = null, var/hard_to_hear = 0, var/vname ="") - if (speaker in Friends) - speech_buffer = list() - speech_buffer.Add(speaker) - speech_buffer.Add(lowertext(html_decode(message))) - ..() diff --git a/code/modules/mob/living/carbon/xenobiological/slime_AI.dm b/code/modules/mob/living/carbon/xenobiological/slime_AI.dm deleted file mode 100644 index 44cfe2d17e06d..0000000000000 --- a/code/modules/mob/living/carbon/xenobiological/slime_AI.dm +++ /dev/null @@ -1,354 +0,0 @@ -/mob/living/carbon/slime/proc/handle_regular_AI() - if(client) - return - - if(attacked > 0) - if(attacked > 50) - attacked = 50 // Let's not get into absurdly long periods of rage - --attacked - - if(confused > 0) - --confused - return - - if(nutrition < get_starve_nutrition()) // If a slime is starving, it starts losing its friends - if(Friends.len > 0 && prob(1)) - var/mob/nofriend = pick(Friends) - if(nofriend && Friends[nofriend]) - Friends[nofriend] -= 1 - if (Friends[nofriend] <= 0) - Friends[nofriend] = null - Friends -= nofriend - Friends -= null - - handle_targets() - if (!AIproc) - addtimer(CALLBACK(src, .proc/handle_AI), 0) - handle_speech_and_mood() - -/mob/living/carbon/slime/proc/handle_targets() - if(Victim) // If it's eating someone already, continue eating! - return - - if(Target) - --target_patience - if (target_patience <= 0 || attacked || rabid) // Tired of chasing or attacking everything nearby - target_patience = 0 - Target = null - - var/hungry = 0 // determines if the slime is hungry - - if (nutrition < get_starve_nutrition()) - hungry = 2 - else if (nutrition < get_grow_nutrition() && prob(25) || nutrition < get_hunger_nutrition()) - hungry = 1 - - if(!Target) - if(will_hunt(hungry) || attacked || rabid) // Only add to the list if we need to - var/list/targets = list() - - for(var/mob/living/L in view(7,src)) - if(AssessTarget(L)) - targets += L // Possible target found! - - if(targets.len > 0) - if(attacked || rabid || hungry == 2) - Target = targets[1] // I am attacked and am fighting back or so hungry I don't even care - else - for(var/mob/living/carbon/C in targets) - if(ishuman(C) && prob(5)) - Target = C - break - - if(isalien(C) || issmall(C) || isanimal(C)) - Target = C - break - - if (Target) - target_patience = rand(5,7) - if (is_adult) - target_patience += 3 - - if(!Target) // If we have no target, we are wandering or following orders - if (Leader) - if (holding_still) - holding_still = max(holding_still - 1, 0) - else if(isturf(loc)) - step_to(src, get_dir(src, Leader)) - - else if(hungry) - if (holding_still) - holding_still = max(holding_still - 1 - hungry, 0) - else if(isturf(loc) && prob(50)) - SelfMove(pick(GLOB.cardinal)) - - else - if (holding_still) - holding_still = max(holding_still - 1, 0) - else if(isturf(loc) && prob(33)) - SelfMove(pick(GLOB.cardinal)) - -/mob/living/carbon/slime/proc/AssessTarget(var/mob/living/M) - if(isslime(M)) // Ignore other slimes - return 0 - - if(M in Friends) // Ignore friends - return 0 - - if(M.stat != DEAD) // Checks for those we just want to attack - if(rabid || attacked) // Will attack everything that isn't dead - return 1 - - if(!invalidFeedTarget(M)) // Checks for those we want to eat - if(istype(M, /mob/living/carbon/human)) // Ignore slime(wo)men - player-controlled slimes still can attack them - var/mob/living/carbon/human/H = M - if(H.species.name == SPECIES_PROMETHEAN) - return 0 - return 1 - - return 0 - -/mob/living/carbon/slime/proc/handle_AI() // the master AI process - if(QDELETED(src) || stat == DEAD || client || Victim) - AIproc = 0 - return // If we're dead or have a client, we don't need AI, if we're feeding, we continue feeding - - if(confused) - AIproc = 0 - return - - AIproc = 1 - var/addedDelay = 0 - - if(amount_grown >= SLIME_EVOLUTION_THRESHOLD && !Target) - if(is_adult) - Reproduce() - else - Evolve() - AIproc = 0 - return - - if(Target) // We're chasing the target - if(!AssessTarget(Target) || Target == Victim) // We don't need to chase them anymore - Target = null - AIproc = 0 - return - - for(var/mob/living/carbon/slime/M in view(1, Target)) - if(M.Victim == Target) - Target = null - AIproc = 0 - return - - if(Target.Adjacent(src)) - if(istype(Target, /mob/living/silicon)) // Glomp the silicons - a_intent = I_HURT - UnarmedAttack(Target) - addedDelay = 10 - - else if(Target.client && !Target.lying && prob(60 + powerlevel * 4)) // Try to take down the target first - a_intent = I_DISARM - UnarmedAttack(Target) - addedDelay = 10 - - else - a_intent = I_GRAB - if(invalidFeedTarget(Target)) - a_intent = I_HURT //just glomp them instead - addedDelay = 10 - UnarmedAttack(Target) - - else if(Target in view(7, src)) - step_to(src, Target) - - else - Target = null - AIproc = 0 - return - - else - var/mob/living/carbon/slime/frenemy - for (var/mob/living/carbon/slime/S in view(1, src)) - if (S != src) - frenemy = S - if (frenemy && prob(1) && frenemy.Adjacent(src)) - if (frenemy.colour == colour) - a_intent = I_HELP - else - a_intent = I_HURT - UnarmedAttack(frenemy) - - var/sleeptime = max(movement_delay(), 5) + addedDelay // Maximum one action per half a second - addtimer(CALLBACK(src, .proc/handle_AI), sleeptime) - - -/mob/living/carbon/slime/proc/UpdateFace() - var/newmood = "" - a_intent = I_HELP - if(confused) - newmood = "pout" - else if(rabid || attacked) - newmood = "angry" - a_intent = I_HURT - else if(Target) - newmood = "mischevous" - - if (!newmood) - if (prob(1)) - newmood = pick("sad", ":3") - - if ((mood == "sad" || mood == ":3") && !newmood) - if (prob(75)) newmood = mood - - if (newmood != mood) // This is so we don't redraw them every time - mood = newmood - regenerate_icons() - -/mob/living/carbon/slime/proc/handle_speech_and_mood() - UpdateFace() - - //Speech understanding starts here - var/to_say - if (speech_buffer.len > 0) - var/who = speech_buffer[1] // Who said it? - var/phrase = speech_buffer[2] // What did they say? - if ((findtext(phrase, num2text(number)) || findtext(phrase, "slimes"))) // Talking to us - if (findtext(phrase, "hello") || findtext(phrase, "hi")) - to_say = pick("Hello...", "Hi...") - else if (findtext(phrase, "follow")) - if (Leader) - if (Leader == who) // Already following him - to_say = pick("Yes...", "Lead...", "Following...") - else if (Friends[who] > Friends[Leader]) // VIVA - Leader = who - to_say = "Yes... I follow [who]..." - else - to_say = "No... I follow [Leader]..." - else - if (Friends[who] > 2) - Leader = who - to_say = "I follow..." - else // Not friendly enough - to_say = pick("No...", "I won't follow...") - else if (findtext(phrase, "stop")) - if (Victim) // We are asked to stop feeding - if (Friends[who] > 4) - Victim = null - Target = null - if (Friends[who] < 7) - --Friends[who] - to_say = "Grrr..." // I'm angry but I do it - else - to_say = "Fine..." - else if (Target) // We are asked to stop chasing - if (Friends[who] > 3) - Target = null - if (Friends[who] < 6) - --Friends[who] - to_say = "Grrr..." // I'm angry but I do it - else - to_say = "Fine..." - else if (Leader) // We are asked to stop following - if (Leader == who) - to_say = "Yes... I'll stay..." - Leader = null - else - if (Friends[who] > Friends[Leader]) - Leader = null - to_say = "Yes... I'll stop..." - else - to_say = "No... I'll keep following..." - else if (findtext(phrase, "stay")) - if (Leader) - if (Leader == who) - holding_still = Friends[who] * 10 - to_say = "Yes... Staying..." - else if (Friends[who] > Friends[Leader]) - holding_still = (Friends[who] - Friends[Leader]) * 10 - to_say = "Yes... Staying..." - else - to_say = "No... I'll keep following..." - else - if (Friends[who] > 2) - holding_still = Friends[who] * 10 - to_say = "Yes... Staying..." - else - to_say = "No... I won't stay..." - speech_buffer = list() - - //Speech starts here - if (to_say) - say (to_say) - else if(prob(1)) - emote(pick("bounce","sway","light","vibrate","jiggle")) - else - var/t = 10 - var/slimes_near = -1 // Don't count myself - var/dead_slimes = 0 - var/friends_near = list() - for (var/mob/living/carbon/M in view(7,src)) - if (isslime(M)) - ++slimes_near - if (M.stat == DEAD) - ++dead_slimes - if (M in Friends) - t += 20 - friends_near += M - if (nutrition < get_hunger_nutrition()) t += 10 - if (nutrition < get_starve_nutrition()) t += 10 - if (prob(2) && prob(t)) - var/phrases = list() - if (Target) phrases += "[Target]... looks tasty..." - if (nutrition < get_starve_nutrition()) - phrases += "So... hungry..." - phrases += "Very... hungry..." - phrases += "Need... food..." - phrases += "Must... eat..." - else if (nutrition < get_hunger_nutrition()) - phrases += "Hungry..." - phrases += "Where is the food?" - phrases += "I want to eat..." - phrases += "Rawr..." - phrases += "Blop..." - phrases += "Blorble..." - if (rabid || attacked) - phrases += "Hrr..." - phrases += "Nhuu..." - phrases += "Unn..." - if (mood == ":3") - phrases += "Purr..." - if (attacked) - phrases += "Grrr..." - if (getToxLoss() > 30) - phrases += "Cold..." - if (getToxLoss() > 60) - phrases += "So... cold..." - phrases += "Very... cold..." - if (getToxLoss() > 90) - phrases += "..." - phrases += "C... c..." - if (Victim) - phrases += "Nom..." - phrases += "Tasty..." - if (powerlevel > 3) phrases += "Bzzz..." - if (powerlevel > 5) phrases += "Zap..." - if (powerlevel > 8) phrases += "Zap... Bzz..." - if (mood == "sad") phrases += "Bored..." - if (slimes_near) phrases += "Brother..." - if (slimes_near > 1) phrases += "Brothers..." - if (dead_slimes) phrases += "What happened?" - if (!slimes_near) - phrases += "Lonely..." - for (var/M in friends_near) - phrases += "[M]... friend..." - if (nutrition < get_hunger_nutrition()) - phrases += "[M]... feed me..." - say (pick(phrases)) - -/mob/living/carbon/slime/proc/will_hunt(var/hunger) // Check for being stopped from feeding and chasing - if (hunger == 2 || rabid || attacked) return 1 - if (Leader) return 0 - if (holding_still) return 0 - if (hunger == 1 || prob(25)) - return 1 - return 0 diff --git a/code/modules/mob/living/carbon/xenobiological/subtypes.dm b/code/modules/mob/living/carbon/xenobiological/subtypes.dm deleted file mode 100644 index 30b2be2500a3c..0000000000000 --- a/code/modules/mob/living/carbon/xenobiological/subtypes.dm +++ /dev/null @@ -1,84 +0,0 @@ -/mob/living/carbon/slime/proc/GetMutations() - switch(src.colour) - if("grey") - return list("orange", "metal", "blue", "purple") - if("purple") - return list("dark purple", "dark blue", "green", "green") - if("metal") - return list("silver", "yellow", "gold", "gold") - if("orange") - return list("dark purple", "yellow", "red", "red") - if("blue") - return list("dark blue", "silver", "pink", "pink") - //Tier 3 - if("dark blue") - return list("purple", "cerulean", "blue", "blue") - if("dark purple") - return list("purple", "sepia", "orange", "orange") - if("yellow") - return list("bluespace", "metal", "orange", "orange") - if("silver") - return list("metal", "pyrite", "blue", "blue") - //Tier 4 - if("pink") - return list("pink", "pink", "light pink", "light pink") - if("red") - return list("red", "red", "oil", "oil") - if("gold") - return list("gold", "gold", "adamantine", "adamantine") - if("green") - return list("green", "green", "black", "black") - // Tier 5 - else - return list() - -/mob/living/carbon/slime/proc/GetCoreType() - switch(src.colour) - // Tier 1 - if("grey") - return /obj/item/slime_extract/grey - // Tier 2 - if("purple") - return /obj/item/slime_extract/purple - if("metal") - return /obj/item/slime_extract/metal - if("orange") - return /obj/item/slime_extract/orange - if("blue") - return /obj/item/slime_extract/blue - // Tier 3 - if("dark blue") - return /obj/item/slime_extract/darkblue - if("dark purple") - return /obj/item/slime_extract/darkpurple - if("yellow") - return /obj/item/slime_extract/yellow - if("silver") - return /obj/item/slime_extract/silver - // Tier 4 - if("pink") - return /obj/item/slime_extract/pink - if("red") - return /obj/item/slime_extract/red - if("gold") - return /obj/item/slime_extract/gold - if("green") - return /obj/item/slime_extract/green - if("sepia") - return /obj/item/slime_extract/sepia - if("bluespace") - return /obj/item/slime_extract/bluespace - if("cerulean") - return /obj/item/slime_extract/cerulean - if("pyrite") - return /obj/item/slime_extract/pyrite - //Tier 5 - if("light pink") - return /obj/item/slime_extract/lightpink - if("oil") - return /obj/item/slime_extract/oil - if("adamantine") - return /obj/item/slime_extract/adamantine - if("black") - return /obj/item/slime_extract/black - return /obj/item/slime_extract/grey diff --git a/code/modules/mob/living/carbon/xenobiological/update_icons.dm b/code/modules/mob/living/carbon/xenobiological/update_icons.dm deleted file mode 100644 index cd38601033446..0000000000000 --- a/code/modules/mob/living/carbon/xenobiological/update_icons.dm +++ /dev/null @@ -1,9 +0,0 @@ -/mob/living/carbon/slime/regenerate_icons() - if (stat == DEAD) - icon_state = "[colour] baby slime dead" - else - icon_state = "[colour] [is_adult ? "adult" : "baby"] slime[Victim ? "" : " eat"]" - overlays.len = 0 - if (mood) - overlays += image('icons/mob/simple_animal/slimes.dmi', icon_state = "aslime-[mood]") - ..() \ No newline at end of file diff --git a/code/modules/mob/living/carbon/xenobiological/xenobiological.dm b/code/modules/mob/living/carbon/xenobiological/xenobiological.dm deleted file mode 100644 index ae0faa2f5dfb7..0000000000000 --- a/code/modules/mob/living/carbon/xenobiological/xenobiological.dm +++ /dev/null @@ -1,337 +0,0 @@ -/mob/living/carbon/slime - name = "baby slime" - icon = 'icons/mob/simple_animal/slimes.dmi' - icon_state = "grey baby slime" - pass_flags = PASS_FLAG_TABLE - speak_emote = list("chirps") - - maxHealth = 150 - health = 150 - gender = NEUTER - - update_icon = 0 - nutrition = 800 - - see_in_dark = 8 - update_slimes = 0 - - // 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 - - meat_type = null - meat_amount = 0 - skin_material = null - skin_amount = 0 - bone_material = null - bone_amount = 0 - - can_be_buckled = FALSE - - var/toxloss = 0 - var/is_adult = 0 - var/number = 0 // Used to understand when someone is talking to it - var/cores = 1 // the number of /obj/item/slime_extract's the slime has left inside - var/mutation_chance = 30 // Chance of mutating, should be between 25 and 35 - - var/powerlevel = 0 // 0-10 controls how much electricity they are generating - var/amount_grown = 0 // controls how long the slime has been overfed, if 10, grows or reproduces - - var/mob/living/Victim = null // the person the slime is currently feeding on - var/mob/living/Target = null // AI variable - tells the slime to hunt this down - var/mob/living/Leader = null // AI variable - tells the slime to follow this person - - var/attacked = 0 // Determines if it's been attacked recently. Can be any number, is a cooloff-ish variable - var/rabid = 0 // If set to 1, the slime will attack and eat anything it comes in contact with - var/holding_still = 0 // AI variable, cooloff-ish for how long it's going to stay in one place - var/target_patience = 0 // AI variable, cooloff-ish for how long it's going to follow its target - - var/list/Friends = list() // A list of friends; they are not considered targets for feeding; passed down after splitting - - var/list/speech_buffer = list() // Last phrase said near it and person who said it - - var/mood = "" // To show its face - - var/AIproc = 0 // If it's 0, we need to launch an AI proc - - var/hurt_temperature = T0C-50 // slime keeps taking damage when its bodytemperature is below this - var/die_temperature = 50 // slime dies instantly when its bodytemperature is below this - - var/colour = "grey" - - var/core_removal_stage = 0 //For removing cores. - var/datum/reagents/metabolism/ingested - -/mob/living/carbon/slime/get_ingested_reagents() - return ingested - -/mob/living/carbon/slime/getToxLoss() - return toxloss - -/mob/living/carbon/slime/get_digestion_product() - return /datum/reagent/slimejelly - -/mob/living/carbon/slime/adjustToxLoss(var/amount) - toxloss = clamp(toxloss + amount, 0, maxHealth) - -/mob/living/carbon/slime/setToxLoss(var/amount) - adjustToxLoss(amount-getToxLoss()) - -/mob/living/carbon/slime/New(var/location, var/colour="grey") - ingested = new(240, src, CHEM_INGEST) - verbs += /mob/living/proc/ventcrawl - - src.colour = colour - number = random_id(/mob/living/carbon/slime, 1, 1000) - name = "[colour] [is_adult ? "adult" : "baby"] slime ([number])" - real_name = name - mutation_chance = rand(25, 35) - regenerate_icons() - ..(location) - -/mob/living/carbon/slime/movement_delay() - if (bodytemperature >= 330.23) // 135 F - return -1 // slimes become supercharged at high temperatures - - var/tally = ..() - - var/health_deficiency = (maxHealth - health) - if(health_deficiency >= 30) tally += (health_deficiency / 25) - - if (bodytemperature < 183.222) - tally += (283.222 - bodytemperature) / 10 * 1.75 - - if(reagents) - if(reagents.has_reagent(/datum/reagent/hyperzine)) // Hyperzine slows slimes down - tally *= 2 - - if(reagents.has_reagent(/datum/reagent/frostoil)) // Frostoil also makes them move VEEERRYYYYY slow - tally *= 5 - - if(health <= 0) // if damaged, the slime moves twice as slow - tally *= 2 - - return tally - -/mob/living/carbon/slime/Bump(atom/movable/AM as mob|obj, yes) - if ((!(yes) || now_pushing)) - return - now_pushing = 1 - - if(isobj(AM) && !client && powerlevel > 0) - var/probab = 10 - switch(powerlevel) - if(1 to 2) probab = 20 - if(3 to 4) probab = 30 - if(5 to 6) probab = 40 - if(7 to 8) probab = 60 - if(9) probab = 70 - if(10) probab = 95 - if(prob(probab)) - if(istype(AM, /obj/structure/window) || istype(AM, /obj/structure/grille)) - if(nutrition <= get_hunger_nutrition()) - if (is_adult || prob(5)) - UnarmedAttack(AM) - - if(ismob(AM)) - var/mob/tmob = AM - - if(is_adult) - if(istype(tmob, /mob/living/carbon/human)) - if(prob(90)) - now_pushing = 0 - return - else - if(istype(tmob, /mob/living/carbon/human)) - now_pushing = 0 - return - - now_pushing = 0 - - ..() - -/mob/living/carbon/slime/Allow_Spacemove() - return 1 - -/mob/living/carbon/slime/Stat() - . = ..() - - statpanel("Status") - stat(null, "Health: [round((health / maxHealth) * 100)]%") - stat(null, "Intent: [a_intent]") - - if (client.statpanel == "Status") - stat(null, "Nutrition: [nutrition]/[get_max_nutrition()]") - if(amount_grown >= 10) - if(is_adult) - stat(null, "You can reproduce!") - else - stat(null, "You can evolve!") - - stat(null,"Power Level: [powerlevel]") - -/mob/living/carbon/slime/adjustFireLoss(amount) - ..(-abs(amount)) // Heals them - return - -/mob/living/carbon/slime/bullet_act(var/obj/item/projectile/Proj) - if (status_flags & GODMODE) - return PROJECTILE_FORCE_MISS - attacked += 10 - ..(Proj) - return 0 - -/mob/living/carbon/slime/emp_act(severity) - if (status_flags & GODMODE) - return - powerlevel = 0 // oh no, the power! - ..() - -/mob/living/carbon/slime/ex_act(severity) - if (status_flags & GODMODE) - return - ..() - - var/b_loss = null - var/f_loss = null - switch (severity) - if (EX_ACT_DEVASTATING) - qdel(src) - return - - if (EX_ACT_HEAVY) - - b_loss += 60 - f_loss += 60 - - - if(EX_ACT_LIGHT) - b_loss += 30 - - adjustBruteLoss(b_loss) - adjustFireLoss(f_loss) - - updatehealth() - - -/mob/living/carbon/slime/u_equip(obj/item/W as obj) - return - -/mob/living/carbon/slime/attack_ui(slot) - return - -/mob/living/carbon/slime/attack_hand(mob/living/carbon/human/M as mob) - - ..() - - if(Victim) - if(Victim == M) - if(prob(60)) - visible_message("\The [M] attempts to wrestle \the [src] off!") - playsound(loc, 'sound/weapons/punchmiss.ogg', 25, 1, -1) - - else - visible_message("\The [M] manages to wrestle \the [src] off!") - playsound(loc, 'sound/weapons/thudswoosh.ogg', 50, 1, -1) - - confused = max(confused, 2) - Feedstop() - UpdateFace() - step_away(src, M) - return - - else - if(prob(30)) - visible_message("\The [M] attempts to wrestle \the [src] off \the [Victim]!") - playsound(loc, 'sound/weapons/punchmiss.ogg', 25, 1, -1) - - else - visible_message("\The [M] manages to wrestle \the [src] off \the [Victim]!") - playsound(loc, 'sound/weapons/thudswoosh.ogg', 50, 1, -1) - - confused = max(confused, 2) - Feedstop() - UpdateFace() - step_away(src, M) - return - - switch(M.a_intent) - - if (I_HELP) - help_shake_act(M) - - if (I_DISARM) - var/success = prob(40) - visible_message("\The [M] pushes \the [src]![success ? " \The [src] looks momentarily disoriented!" : ""]") - if(success) - confused = max(confused, 2) - UpdateFace() - playsound(loc, 'sound/weapons/thudswoosh.ogg', 50, 1, -1) - else - playsound(loc, 'sound/weapons/punchmiss.ogg', 25, 1, -1) - - else - - var/damage = rand(1, 9) - - attacked += 10 - if (prob(90)) - if (MUTATION_HULK in M.mutations) - damage += 5 - if(Victim || Target) - Feedstop() - Target = null - spawn(0) - step_away(src,M,15) - sleep(3) - step_away(src,M,15) - - playsound(loc, "punch", 25, 1, -1) - visible_message("[M] has punched [src]!", \ - "[M] has punched [src]!") - - adjustBruteLoss(damage) - updatehealth() - else - playsound(loc, 'sound/weapons/punchmiss.ogg', 25, 1, -1) - visible_message("[M] has attempted to punch [src]!") - return - -/mob/living/carbon/slime/attackby(var/obj/item/W, var/mob/user) - if(W.force > 0) - attacked += 10 - if(!(stat) && prob(25)) //Only run this check if we're alive or otherwise motile, otherwise surgery will be agonizing for xenobiologists. - to_chat(user, "\The [W] passes right through \the [src]!") - return - - . = ..() - - if(Victim && prob(W.force * 5)) - Feedstop() - step_away(src, user) - -/mob/living/carbon/slime/restrained() - return 0 - -/mob/living/carbon/slime/var/co2overloadtime = null -/mob/living/carbon/slime/var/temperature_resistance = T0C+75 - -/mob/living/carbon/slime/toggle_throw_mode() - return - -/mob/living/carbon/slime/has_eyes() - return 0 - -/mob/living/carbon/slime/check_has_mouth() - return 0 - -/mob/living/carbon/slime/proc/gain_nutrition(var/amount) - adjust_nutrition(amount) - if(prob(amount * 2)) // Gain around one level per 50 nutrition - powerlevel++ - if(powerlevel > 10) - powerlevel = 10 - adjustToxLoss(-10) - -/mob/living/carbon/slime/adjust_nutrition(var/amt) - nutrition = clamp(nutrition + amt, 0, get_max_nutrition()) diff --git a/code/modules/mob/living/damage_procs.dm b/code/modules/mob/living/damage_procs.dm deleted file mode 100644 index af20225c74586..0000000000000 --- a/code/modules/mob/living/damage_procs.dm +++ /dev/null @@ -1,106 +0,0 @@ -/* - apply_damage() args - damage - How much damage to take - damage_type - What type of damage to take, brute, burn - def_zone - Where to take the damage if its brute or burn - - Returns - standard 0 if fail -*/ -/mob/living/proc/apply_damage(damage = 0, damagetype = DAMAGE_BRUTE, def_zone = null, damage_flags = EMPTY_BITFIELD, used_weapon, armor_pen, silent = FALSE) - if(!damage) - return FALSE - - var/list/after_armor = modify_damage_by_armor(def_zone, damage, damagetype, damage_flags, src, armor_pen, silent) - damage = after_armor[1] - damagetype = after_armor[2] - damage_flags = after_armor[3] // args modifications in case of parent calls - if(!damage) - return FALSE - - switch(damagetype) - if (DAMAGE_BRUTE) - adjustBruteLoss(damage) - if (DAMAGE_BURN) - if(MUTATION_COLD_RESISTANCE in mutations) - damage = 0 - adjustFireLoss(damage) - if (DAMAGE_TOXIN) - adjustToxLoss(damage) - if (DAMAGE_OXY) - adjustOxyLoss(damage) - if (DAMAGE_GENETIC) - adjustCloneLoss(damage) - if (DAMAGE_PAIN) - adjustHalLoss(damage) - if (DAMAGE_SHOCK) - electrocute_act(damage, used_weapon, 1, def_zone) - if (DAMAGE_RADIATION) - apply_radiation(damage) - - updatehealth() - return TRUE - - -/mob/living/proc/apply_radiation(var/damage = 0) - if(!damage) - return FALSE - - radiation += damage - return TRUE - - -/mob/living/proc/apply_damages(var/brute = 0, var/burn = 0, var/tox = 0, var/oxy = 0, var/clone = 0, var/halloss = 0, var/def_zone = null, var/damage_flags = 0) - if (brute) - apply_damage(brute, DAMAGE_BRUTE, def_zone) - if(burn) - apply_damage(burn, DAMAGE_BURN, def_zone) - if(tox) - apply_damage(tox, DAMAGE_TOXIN, def_zone) - if (oxy) - apply_damage(oxy, DAMAGE_OXY, def_zone) - if (clone) - apply_damage(clone, DAMAGE_GENETIC, def_zone) - if (halloss) - apply_damage(halloss, DAMAGE_PAIN, def_zone) - return TRUE - - -/mob/living/proc/apply_effect(effect = 0, effecttype = EFFECT_STUN, blocked = 0) - if(!effect || (blocked >= 100)) return FALSE - - switch(effecttype) - if (EFFECT_STUN) - Stun(effect * blocked_mult(blocked)) - if (EFFECT_WEAKEN) - Weaken(effect * blocked_mult(blocked)) - if (EFFECT_PARALYZE) - Paralyse(effect * blocked_mult(blocked)) - if (EFFECT_PAIN) - adjustHalLoss(effect * blocked_mult(blocked)) - if (EFFECT_STUTTER) - if(status_flags & CANSTUN) // stun is usually associated with stutter - TODO CANSTUTTER flag? - stuttering = max(stuttering, effect * blocked_mult(blocked)) - if (EFFECT_EYE_BLUR) - eye_blurry = max(eye_blurry, effect * blocked_mult(blocked)) - if (EFFECT_DROWSY) - drowsyness = max(drowsyness, effect * blocked_mult(blocked)) - updatehealth() - return TRUE - -/mob/living/proc/apply_effects(var/stun = 0, var/weaken = 0, var/paralyze = 0, var/stutter = 0, var/eyeblur = 0, var/drowsy = 0, var/agony = 0, var/blocked = 0) - if (stun) - apply_effect(stun, EFFECT_STUN, blocked) - if (weaken) - apply_effect(weaken, EFFECT_WEAKEN, blocked) - if (paralyze) - apply_effect(paralyze, EFFECT_PARALYZE, blocked) - if (stutter) - apply_effect(stutter, EFFECT_STUTTER, blocked) - if (eyeblur) - apply_effect(eyeblur, EFFECT_EYE_BLUR, blocked) - if (drowsy) - apply_effect(drowsy, EFFECT_DROWSY, blocked) - if (agony) - apply_effect(agony, EFFECT_PAIN, blocked) - return TRUE diff --git a/code/modules/mob/living/death.dm b/code/modules/mob/living/death.dm deleted file mode 100644 index 195cc19961354..0000000000000 --- a/code/modules/mob/living/death.dm +++ /dev/null @@ -1,4 +0,0 @@ -/mob/living/death() - if(hiding) - hiding = FALSE - . = ..() diff --git a/code/modules/mob/living/default_language.dm b/code/modules/mob/living/default_language.dm deleted file mode 100644 index ba34e3d816faf..0000000000000 --- a/code/modules/mob/living/default_language.dm +++ /dev/null @@ -1,38 +0,0 @@ -/mob/living - var/datum/language/default_language - -/mob/living/verb/set_default_language(language as null|anything in languages) - set name = "Set Default Language" - set category = "IC" - - if (only_species_language && language != all_languages[src.species_language]) - to_chat(src, "Вы можете говорить только на языке своего вида, [src.species_language].") - return 0 - - if(language == all_languages[src.species_language]) - to_chat(src, "Теперь Вы будете общаться на [language], если не поставите префикс другого языка при общении.") - else if (language) - - if(language && !can_speak(language)) - to_chat(src, "Вы не можете говорить на этом языке.") - return - - to_chat(src, "Теперь Вы будете общаться на [language], если не поставите префикс другого языка при общении.") - else - - to_chat(src, "Вы будете говорить независимо от Вашего стандартного языка, если не выставите другой.") - - default_language = language - -// Silicons can't neccessarily speak everything in their languages list -/mob/living/silicon/set_default_language(language as null|anything in speech_synthesizer_langs) - ..() - -/mob/living/verb/check_default_language() - set name = "Check Default Language" - set category = "IC" - - if(default_language) - to_chat(src, "You are currently speaking [default_language] by default.") - else - to_chat(src, "Your current default language is your species or mob type default.") diff --git a/code/modules/mob/living/life.dm b/code/modules/mob/living/life.dm deleted file mode 100644 index 6e4f94781d6ed..0000000000000 --- a/code/modules/mob/living/life.dm +++ /dev/null @@ -1,228 +0,0 @@ -/mob/living/Life() - set invisibility = 0 - set background = BACKGROUND_ENABLED - - ..() - - if (HasMovementHandler(/datum/movement_handler/mob/transformation)) - return - if (!loc) - return - - if(machine && !CanMouseDrop(machine, src)) - machine = null - - //Handle temperature/pressure differences between body and environment - var/datum/gas_mixture/environment = loc.return_air() - if(environment) - handle_environment(environment) - - blinded = 0 // Placing this here just show how out of place it is. - // human/handle_regular_status_updates() needs a cleanup, as blindness should be handled in handle_disabilities() - handle_regular_status_updates() // Status & health update, are we dead or alive etc. - - if(stat != DEAD) - aura_check(AURA_TYPE_LIFE) - - if(!InStasis()) - //Mutations and radiation - handle_mutations_and_radiation() - - //Check if we're on fire - handle_fire() - - update_pulling() - - for(var/obj/item/grab/G in src) - G.Process() - - handle_actions() - - UpdateLyingBuckledAndVerbStatus() - - handle_regular_hud_updates() - - return 1 - -/mob/living/proc/handle_breathing() - return - -/mob/living/proc/handle_mutations_and_radiation() - return - -/mob/living/proc/handle_chemicals_in_body() - return - -/mob/living/proc/handle_random_events() - return - -/mob/living/proc/handle_environment(var/datum/gas_mixture/environment) - return - -/mob/living/proc/update_pulling() - if(pulling) - if(incapacitated()) - stop_pulling() - -//This updates the health and status of the mob (conscious, unconscious, dead) -/mob/living/proc/handle_regular_status_updates() - updatehealth() - if(stat != DEAD) - if(paralysis) - set_stat(UNCONSCIOUS) - else if (status_flags & FAKEDEATH) - set_stat(UNCONSCIOUS) - else - set_stat(CONSCIOUS) - return 1 - -/mob/living/proc/handle_statuses() - handle_stunned() - handle_weakened() - handle_paralysed() - handle_stuttering() - handle_silent() - handle_drugged() - handle_slurring() - handle_confused() - -/mob/living/proc/handle_stunned() - if(stunned) - AdjustStunned(-1) - if(!stunned) - update_icons() - return stunned - -/mob/living/proc/handle_weakened() - if(weakened) - weakened = max(weakened-1,0) - if(!weakened) - update_icons() - return weakened - -/mob/living/proc/handle_stuttering() - if(stuttering) - stuttering = max(stuttering-1, 0) - return stuttering - -/mob/living/proc/handle_silent() - if(silent) - silent = max(silent-1, 0) - return silent - -/mob/living/proc/handle_drugged() - if(druggy) - druggy = max(druggy-1, 0) - return druggy - -/mob/living/proc/handle_slurring() - if(slurring) - slurring = max(slurring-1, 0) - return slurring - -/mob/living/proc/handle_paralysed() - if(paralysis) - AdjustParalysis(-1) - if(!paralysis) - update_icons() - return paralysis - -/mob/living/proc/handle_disabilities() - handle_impaired_vision() - handle_impaired_hearing() - -/mob/living/proc/handle_confused() - if(confused) - confused = max(0, confused - 1) - return confused - -/mob/living/proc/handle_impaired_vision() - //Eyes - if(sdisabilities & BLINDED || stat) //blindness from disability or unconsciousness doesn't get better on its own - eye_blind = max(eye_blind, 1) - else if(eye_blind) //blindness, heals slowly over time - eye_blind = max(eye_blind-1,0) - else if(eye_blurry) //blurry eyes heal slowly - eye_blurry = max(eye_blurry-1, 0) - -/mob/living/proc/handle_impaired_hearing() - //Ears - if(sdisabilities & DEAFENED) //disabled-deaf, doesn't get better on its own - setEarDamage(null, max(ear_deaf, 1)) - else if(ear_damage < 25) - adjustEarDamage(-0.05, -1) // having ear damage impairs the recovery of ear_deaf - else if(ear_damage < 100) - adjustEarDamage(-0.05, 0) // deafness recovers slowly over time, unless ear_damage is over 100. TODO meds that heal ear_damage - - -//this handles hud updates. Calls update_vision() and handle_hud_icons() -/mob/living/proc/handle_regular_hud_updates() - if(!client) return 0 - - handle_hud_icons() - handle_vision() - - return 1 - -/mob/living/proc/handle_vision() - update_sight() - - if(stat == DEAD) - return - - if(eye_blind) - overlay_fullscreen("blind", /obj/screen/fullscreen/blind) - else - clear_fullscreen("blind") - set_fullscreen(disabilities & NEARSIGHTED, "impaired", /obj/screen/fullscreen/impaired, 1) - set_fullscreen(eye_blurry, "blurry", /obj/screen/fullscreen/blurry) - set_fullscreen(druggy, "high", /obj/screen/fullscreen/high) - - set_fullscreen(stat == UNCONSCIOUS, "blackout", /obj/screen/fullscreen/blackout) - - if(machine) - var/viewflags = machine.check_eye(src) - if(viewflags < 0) - reset_view(null, 0) - else if(viewflags) - set_sight(viewflags) - else if(eyeobj) - if(eyeobj.owner != src) - reset_view(null) - else if(!client?.adminobs) - reset_view(null) - -/mob/living/proc/update_sight() - set_sight(0) - set_see_in_dark(0) - if(stat == DEAD || eyeobj) - update_dead_sight() - else - update_living_sight() - - var/list/vision = get_accumulated_vision_handlers() - set_sight(sight | vision[1]) - set_see_invisible(max(vision[2], see_invisible)) - -/mob/living/proc/update_living_sight() - var/set_sight_flags = sight & ~(SEE_TURFS|SEE_MOBS|SEE_OBJS) - if(stat & UNCONSCIOUS) - set_sight_flags |= BLIND - else - set_sight_flags &= ~BLIND - - set_sight(set_sight_flags) - set_see_in_dark(initial(see_in_dark)) - set_see_invisible(initial(see_invisible)) - -/mob/living/proc/update_dead_sight() - set_sight(sight|SEE_TURFS|SEE_MOBS|SEE_OBJS) - set_see_in_dark(8) - set_see_invisible(SEE_INVISIBLE_LEVEL_TWO) - -/mob/living/proc/handle_hud_icons() - handle_hud_icons_health() - handle_hud_glasses() - -/mob/living/proc/handle_hud_icons_health() - return diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm deleted file mode 100644 index e568297f526f4..0000000000000 --- a/code/modules/mob/living/living.dm +++ /dev/null @@ -1,912 +0,0 @@ -/mob/living/New() - ..() - if(stat == DEAD) - add_to_dead_mob_list() - else - add_to_living_mob_list() - - selected_image = image(icon('icons/misc/buildmode.dmi'), loc = src, icon_state = "ai_sel") - -/mob/living/examine(mob/user, distance, infix, suffix) - . = ..() - if (admin_paralyzed) - to_chat(user, SPAN_DEBUG("OOC: They have been paralyzed by staff. Please avoid interacting with them unless cleared to do so by staff.")) - -//mob verbs are faster than object verbs. See mob/verb/examine. -/mob/living/verb/pulled(atom/movable/AM as mob|obj in oview(1)) - set name = "Pull" - set category = "Object" - - if(AM.Adjacent(src)) - src.start_pulling(AM) - - return - -//mob verbs are faster than object verbs. See above. -/mob/living/pointed(atom/A as mob|obj|turf in view()) - if(incapacitated()) - return 0 - if(src.status_flags & FAKEDEATH) - return 0 - if(!..()) - return 0 - - usr.visible_message("[src] points to [A]") - return 1 - -/*one proc, four uses -swapping: if it's 1, the mobs are trying to switch, if 0, non-passive is pushing passive -default behaviour is: - - non-passive mob passes the passive version - - passive mob checks to see if its mob_bump_flag is in the non-passive's mob_bump_flags - - if si, the proc returns -*/ -/mob/living/proc/can_move_mob(var/mob/living/swapped, swapping = 0, passive = 0) - if(!swapped) - return 1 - if(!passive) - return swapped.can_move_mob(src, swapping, 1) - else - var/context_flags = 0 - if(swapping) - context_flags = swapped.mob_swap_flags - else - context_flags = swapped.mob_push_flags - if(!mob_bump_flag) //nothing defined, go wild - return 1 - if(mob_bump_flag & context_flags) - return 1 - else - return ((a_intent == I_HELP && swapped.a_intent == I_HELP) && swapped.can_move_mob(src, swapping, 1)) - -/mob/living/canface() - if(stat) - return 0 - return ..() - -/mob/living/Bump(atom/movable/AM, yes) - - // This is boilerplate from /atom/movable/Bump() but in all honest - // I have no clue what is going on in the logic below this and I'm - // afraid to touch it in case it explodes and kills me. - if(!QDELETED(throwing)) - throwing.hit_atom(AM) - return - // End boilerplate. - - spawn(0) - if ((!( yes ) || now_pushing) || !loc) - return - - now_pushing = 1 - if (istype(AM, /mob/living)) - var/mob/living/tmob = AM - - for(var/mob/living/M in range(tmob, 1)) - if(tmob.pinned.len || ((M.pulling == tmob && ( tmob.restrained() && !( M.restrained() ) && M.stat == 0)) || locate(/obj/item/grab, tmob.grabbed_by.len)) ) - if ( !(world.time % 5) ) - to_chat(src, "[tmob] is restrained, you cannot push past") - now_pushing = 0 - return - if( tmob.pulling == M && ( M.restrained() && !( tmob.restrained() ) && tmob.stat == 0) ) - if ( !(world.time % 5) ) - to_chat(src, "[tmob] is restraining [M], you cannot push past") - now_pushing = 0 - return - - if(can_swap_with(tmob)) // mutual brohugs all around! - var/turf/oldloc = loc - forceMove(tmob.loc) - tmob.forceMove(oldloc) - now_pushing = 0 - for(var/mob/living/carbon/slime/slime in view(1,tmob)) - if(slime.Victim == tmob) - slime.UpdateFeed() - return - - if(!can_move_mob(tmob, 0, 0)) - now_pushing = 0 - return - if(src.restrained()) - now_pushing = 0 - return - if(tmob.a_intent != I_HELP) - if(istype(tmob, /mob/living/carbon/human) && (MUTATION_FAT in tmob.mutations)) - if(prob(40) && !(MUTATION_FAT in src.mutations)) - to_chat(src, "You fail to push [tmob]'s fat ass out of the way.") - now_pushing = 0 - return - if(tmob.r_hand && istype(tmob.r_hand, /obj/item/shield/riot)) - if(prob(99)) - now_pushing = 0 - return - if(tmob.l_hand && istype(tmob.l_hand, /obj/item/shield/riot)) - if(prob(99)) - now_pushing = 0 - return - if(!(tmob.status_flags & CANPUSH)) - now_pushing = 0 - return - tmob.LAssailant = src - if(isobj(AM) && !AM.anchored) - var/obj/I = AM - if(!can_pull_size || can_pull_size < I.w_class) - to_chat(src, "It won't budge!") - now_pushing = 0 - return - - now_pushing = 0 - spawn(0) - ..() - var/saved_dir = AM.dir - if ((confused || (MUTATION_CLUMSY in mutations)) && !MOVING_DELIBERATELY(src)) - AM.slam_into(src) - if (!istype(AM, /atom/movable) || AM.anchored) - return - if (!now_pushing) - now_pushing = 1 - - var/t = get_dir(src, AM) - if (istype(AM, /obj/structure/window)) - for(var/obj/structure/window/win in get_step(AM,t)) - now_pushing = 0 - return - step(AM, t) - if (istype(AM, /mob/living)) - var/mob/living/tmob = AM - if(istype(tmob.buckled, /obj/structure/bed)) - if(!tmob.buckled.anchored) - step(tmob.buckled, t) - if(ishuman(AM)) - var/mob/living/carbon/human/M = AM - for(var/obj/item/grab/G in M.grabbed_by) - step(G.assailant, get_dir(G.assailant, AM)) - G.adjust_position() - if(saved_dir) - AM.set_dir(saved_dir) - now_pushing = 0 - -/proc/swap_density_check(var/mob/swapper, var/mob/swapee) - var/turf/T = get_turf(swapper) - if(T?.density) - return 1 - for(var/atom/movable/A in T) - if(A == swapper) - continue - if(!A.CanPass(swapee, T, 1)) - return 1 - -/mob/living/proc/can_swap_with(var/mob/living/tmob) - if(!tmob) return - if(tmob.buckled || buckled || tmob.anchored) - return 0 - //BubbleWrap: people in handcuffs are always switched around as if they were on 'help' intent to prevent a person being pulled from being seperated from their puller - if(!(tmob.mob_always_swap || (tmob.a_intent == I_HELP || tmob.restrained()) && (a_intent == I_HELP || src.restrained()))) - return 0 - if(!tmob.MayMove(src) || incapacitated()) - return 0 - - if(swap_density_check(src, tmob)) - return 0 - - if(swap_density_check(tmob, src)) - return 0 - - return can_move_mob(tmob, 1, 0) - -/mob/living/Stat() - . = ..() - if(statpanel("Status")) - stat("Intent:", "[a_intent]") - stat("Move Mode:", "[move_intent.name]") - var/obj/item/device/gps/G = locate() in src - if(istype(G)) - stat("Coordinates:", "[G.fetch_coordinates()]") - - if(evacuation_controller) - var/eta_status = evacuation_controller.get_status_panel_eta() - if(eta_status) - stat(null, eta_status) - -/mob/living/proc/updatehealth() - if(status_flags & GODMODE) - health = 100 - set_stat(CONSCIOUS) - else - health = maxHealth - getOxyLoss() - getToxLoss() - getFireLoss() - getBruteLoss() - getCloneLoss() - getHalLoss() - - -//This proc is used for mobs which are affected by pressure to calculate the amount of pressure that actually -//affects them once clothing is factored in. ~Errorage -/mob/living/proc/calculate_affecting_pressure(var/pressure) - return - - -//sort of a legacy burn method for /electrocute, /shock, and the e_chair -/mob/living/proc/burn_skin(burn_amount) - take_overall_damage(0, burn_amount) - -/mob/living/proc/adjustBodyTemp(actual, desired, incrementboost) - var/btemperature = actual - var/difference = abs(actual-desired) //get difference - var/increments = difference/10 //find how many increments apart they are - var/change = increments*incrementboost // Get the amount to change by (x per increment) - - // Too cold - if(actual < desired) - btemperature += change - if(actual > desired) - btemperature = desired - // Too hot - if(actual > desired) - btemperature -= change - if(actual < desired) - btemperature = desired -// if(istype(src, /mob/living/carbon/human)) -// log_debug("[src] ~ [src.bodytemperature] ~ [temperature]") - - return btemperature - -/mob/living/proc/getBruteLoss() - return maxHealth - health - -/mob/living/proc/adjustBruteLoss(var/amount) - if (status_flags & GODMODE) - return - health = clamp(health - amount, 0, maxHealth) - -/mob/living/proc/getOxyLoss() - return 0 - -/mob/living/proc/adjustOxyLoss(var/amount) - return - -/mob/living/proc/setOxyLoss(var/amount) - return - -/mob/living/proc/getToxLoss() - return 0 - -/mob/living/proc/adjustToxLoss(var/amount) - adjustBruteLoss(amount * 0.5) - -/mob/living/proc/setToxLoss(var/amount) - adjustBruteLoss((amount * 0.5)-getBruteLoss()) - -/mob/living/proc/getFireLoss() - return - -/mob/living/proc/adjustFireLoss(var/amount) - adjustBruteLoss(amount * 0.5) - -/mob/living/proc/setFireLoss(var/amount) - adjustBruteLoss((amount * 0.5)-getBruteLoss()) - -/mob/living/proc/getHalLoss() - return 0 - -/mob/living/proc/adjustHalLoss(var/amount) - adjustBruteLoss(amount * 0.5) - -/mob/living/proc/setHalLoss(var/amount) - adjustBruteLoss((amount * 0.5)-getBruteLoss()) - -/mob/living/proc/getBrainLoss() - return 0 - -/mob/living/proc/adjustBrainLoss(var/amount) - return - -/mob/living/proc/setBrainLoss(var/amount) - return - -/mob/living/proc/getCloneLoss() - return 0 - -/mob/living/proc/setCloneLoss(var/amount) - return - -/mob/living/proc/adjustCloneLoss(var/amount) - return - -/mob/living/proc/getMaxHealth() - return maxHealth - -/mob/living/proc/setMaxHealth(var/newMaxHealth) - maxHealth = newMaxHealth - -// ++++ROCKDTBEN++++ MOB PROCS //END - -/mob/proc/get_contents() - return - -//Recursive function to find everything a mob is holding. -/mob/living/get_contents(var/obj/item/storage/Storage = null) - var/list/L = list() - - if(Storage) //If it called itself - L += Storage.return_inv() - - //Leave this commented out, it will cause storage items to exponentially add duplicate to the list - //for(var/obj/item/storage/S in Storage.return_inv()) //Check for storage items - // L += get_contents(S) - - for(var/obj/item/gift/G in Storage.return_inv()) //Check for gift-wrapped items - L += G.gift - if(istype(G.gift, /obj/item/storage)) - L += get_contents(G.gift) - - for(var/obj/item/smallDelivery/D in Storage.return_inv()) //Check for package wrapped items - L += D.wrapped - if(istype(D.wrapped, /obj/item/storage)) //this should never happen - L += get_contents(D.wrapped) - return L - - else - - L += src.contents - for(var/obj/item/storage/S in src.contents) //Check for storage items - L += get_contents(S) - - for(var/obj/item/gift/G in src.contents) //Check for gift-wrapped items - L += G.gift - if(istype(G.gift, /obj/item/storage)) - L += get_contents(G.gift) - - for(var/obj/item/smallDelivery/D in src.contents) //Check for package wrapped items - L += D.wrapped - if(istype(D.wrapped, /obj/item/storage)) //this should never happen - L += get_contents(D.wrapped) - return L - -/mob/living/proc/check_contents_for(A) - var/list/L = src.get_contents() - - for(var/obj/B in L) - if(B.type == A) - return 1 - return 0 - -/mob/living/proc/can_inject(var/mob/user, var/target_zone) - return 1 - -/mob/living/proc/get_organ_target() - var/mob/shooter = src - var/t = shooter.zone_sel?.selecting - if ((t in list( BP_EYES, BP_MOUTH ))) - t = BP_HEAD - var/obj/item/organ/external/def_zone = ran_zone(t) - return def_zone - - -// heal ONE external organ, organ gets randomly selected from damaged ones. -/mob/living/proc/heal_organ_damage(var/brute, var/burn, var/affect_robo = 0) - adjustBruteLoss(-brute) - adjustFireLoss(-burn) - src.updatehealth() - -// damage ONE external organ, organ gets randomly selected from damaged ones. -/mob/living/proc/take_organ_damage(brute = 0, burn = 0, flags = 0) - if(status_flags & GODMODE || !brute && !burn) - return - adjustBruteLoss(brute) - adjustFireLoss(burn) - updatehealth() - -// heal MANY external organs, in random order -/mob/living/proc/heal_overall_damage(var/brute, var/burn) - adjustBruteLoss(-brute) - adjustFireLoss(-burn) - src.updatehealth() - -// damage MANY external organs, in random order -/mob/living/proc/take_overall_damage(var/brute, var/burn, var/used_weapon = null) - if(status_flags & GODMODE) return 0 //godmode - adjustBruteLoss(brute) - adjustFireLoss(burn) - src.updatehealth() - -/mob/living/proc/restore_all_organs() - return - -/mob/living/proc/revive() - rejuvenate() - if(buckled) - buckled.unbuckle_mob() - if(iscarbon(src)) - var/mob/living/carbon/C = src - - if (C.handcuffed && !initial(C.handcuffed)) - C.drop_from_inventory(C.handcuffed) - C.handcuffed = initial(C.handcuffed) - SET_BIT(hud_updateflag, HEALTH_HUD) - SET_BIT(hud_updateflag, STATUS_HUD) - SET_BIT(hud_updateflag, LIFE_HUD) - ExtinguishMob() - fire_stacks = 0 - -/mob/living/proc/rejuvenate() - if(reagents) - reagents.clear_reagents() - - // shut down various types of badness - setToxLoss(0) - setOxyLoss(0) - setCloneLoss(0) - setBrainLoss(0) - SetParalysis(0) - SetStunned(0) - SetWeakened(0) - - // shut down ongoing problems - radiation = 0 - bodytemperature = T20C - sdisabilities = 0 - disabilities = 0 - - // fix blindness and deafness - blinded = 0 - eye_blind = 0 - eye_blurry = 0 - ear_deaf = 0 - ear_damage = 0 - drowsyness = 0 - druggy = 0 - jitteriness = 0 - confused = 0 - - heal_overall_damage(getBruteLoss(), getFireLoss()) - - // fix all of our organs - restore_all_organs() - - // remove the character from the list of the dead - if(stat == DEAD) - switch_from_dead_to_living_mob_list() - timeofdeath = 0 - - // restore us to conciousness - set_stat(CONSCIOUS) - - // make the icons look correct - regenerate_icons() - - SET_BIT(hud_updateflag, HEALTH_HUD) - SET_BIT(hud_updateflag, STATUS_HUD) - SET_BIT(hud_updateflag, LIFE_HUD) - - failed_last_breath = 0 //So mobs that died of oxyloss don't revive and have perpetual out of breath. - reload_fullscreen() - return - -/mob/living/proc/basic_revival(var/repair_brain = TRUE) - - if(repair_brain && getBrainLoss() > 50) - repair_brain = FALSE - setBrainLoss(50) - - if(stat == DEAD) - switch_from_dead_to_living_mob_list() - timeofdeath = 0 - - stat = CONSCIOUS - regenerate_icons() - - SET_BIT(hud_updateflag, HEALTH_HUD) - SET_BIT(hud_updateflag, STATUS_HUD) - SET_BIT(hud_updateflag, LIFE_HUD) - - failed_last_breath = 0 //So mobs that died of oxyloss don't revive and have perpetual out of breath. - reload_fullscreen() - -/mob/living/carbon/basic_revival(var/repair_brain = TRUE) - if(repair_brain && should_have_organ(BP_BRAIN)) - repair_brain = FALSE - var/obj/item/organ/internal/brain/brain = internal_organs_by_name[BP_BRAIN] - if(brain.damage > (brain.max_damage/2)) - brain.damage = (brain.max_damage/2) - if(brain.status & ORGAN_DEAD) - brain.status &= ~ORGAN_DEAD - START_PROCESSING(SSobj, brain) - brain.update_icon() - ..(repair_brain) - -/mob/living/proc/UpdateDamageIcon() - return - -/mob/living/Move(a, b, flag) - if (buckled) - return - - if(get_dist(src, pulling) > 1) - stop_pulling() - - var/turf/old_loc = get_turf(src) - - . = ..() - - if(. && pulling) - handle_pulling_after_move(old_loc) - - if (s_active && !( s_active in contents ) && get_turf(s_active) != get_turf(src)) //check !( s_active in contents ) first so we hopefully don't have to call get_turf() so much. - s_active.close(src) - - if(update_slimes) - for(var/mob/living/carbon/slime/M in view(1,src)) - M.UpdateFeed() - -/mob/living/proc/can_pull() - if(!moving) - return FALSE - if(pulling.anchored) - return FALSE - if(!isturf(pulling.loc)) - return FALSE - if(restrained()) - return FALSE - - if(get_dist(src, pulling) > 2) - return FALSE - - if(pulling.z != z) - if(pulling.z < z) - return FALSE - var/turf/T = GetAbove(src) - if(!isopenspace(T)) - return FALSE - return TRUE - -/mob/living/proc/handle_pulling_after_move(turf/old_loc) - if(!pulling) - return - - if(!can_pull()) - stop_pulling() - return - - if(pulling.loc == loc || pulling.loc == old_loc) - return - - if (!isliving(pulling)) - step(pulling, get_dir(pulling.loc, old_loc)) - else - var/mob/living/M = pulling - if(M.grabbed_by.len) - if (prob(75)) - var/obj/item/grab/G = pick(M.grabbed_by) - if(istype(G)) - M.visible_message(SPAN_WARNING("[G.affecting] has been pulled from [G.assailant]'s grip by [src]!"), SPAN_WARNING("[G.affecting] has been pulled from your grip by [src]!")) - qdel(G) - if (!M.grabbed_by.len) - M.handle_pull_damage(src) - - var/atom/movable/t = M.pulling - M.stop_pulling() - step(M, get_dir(pulling.loc, old_loc)) - if(t) - M.start_pulling(t) - - handle_dir_after_pull() - -/mob/living/proc/handle_dir_after_pull() - if(pulling) - if(isobj(pulling)) - var/obj/O = pulling - if(O.w_class >= ITEM_SIZE_HUGE || O.density) - return set_dir(get_dir(src, pulling)) - if(isliving(pulling)) - var/mob/living/L = pulling - // If pulled mob was bigger than us, we morelike will turn - // I made additional check in case if someone want a hand walk - if(L.mob_size > mob_size || L.lying || a_intent != I_HELP) - return set_dir(get_dir(src, pulling)) - -/mob/living/proc/handle_pull_damage(mob/living/puller) - var/area/A = get_area(src) - if(!A.has_gravity) - return - var/turf/location = get_turf(src) - if(lying && prob(getBruteLoss() / 6)) - location.add_blood(src) - if(prob(25)) - src.adjustBruteLoss(1) - visible_message("\The [src]'s [src.isSynthetic() ? "state worsens": "wounds open more"] from being dragged!") - . = TRUE - if(src.pull_damage()) - if(prob(25)) - src.adjustBruteLoss(2) - visible_message("\The [src]'s [src.isSynthetic() ? "state" : "wounds"] worsen terribly from being dragged!") - location.add_blood(src) - . = TRUE - -/mob/living/verb/resist() - set name = "Resist" - set category = "IC" - - if(!incapacitated(INCAPACITATION_KNOCKOUT) && last_resist + 2 SECONDS <= world.time) - last_resist = world.time - resist_grab() - if(resting) - lay_down() - if(!weakened) - process_resist() - -/mob/living/proc/process_resist() - //Getting out of someone's inventory. - if(istype(src.loc, /obj/item/holder)) - escape_inventory(src.loc) - return - - //unbuckling yourself - if(buckled) - spawn() escape_buckle() - return TRUE - - //Breaking out of a structure? - if(istype(loc, /obj/structure)) - var/obj/structure/C = loc - if(C.mob_breakout(src)) - return TRUE - -/mob/living/proc/escape_inventory(obj/item/holder/H) - if(H != src.loc) return - - var/mob/M = H.loc //Get our mob holder (if any). - - if(istype(M)) - M.drop_from_inventory(H) - to_chat(M, "\The [H] wriggles out of your grip!") - to_chat(src, "You wriggle out of \the [M]'s grip!") - - // Update whether or not this mob needs to pass emotes to contents. - for(var/atom/A in M.contents) - if(istype(A,/mob/living/simple_animal/borer) || istype(A,/obj/item/holder)) - return - M.status_flags &= ~PASSEMOTES - else if(istype(H.loc,/obj/item/clothing/accessory/storage/holster) || istype(H.loc,/obj/item/storage/belt/holster)) - var/datum/extension/holster/holster = get_extension(H.loc, /datum/extension/holster) - if(holster.holstered == H) - holster.clear_holster() - to_chat(src, "You extricate yourself from \the [holster].") - H.forceMove(get_turf(H)) - else if(istype(H.loc,/obj)) - to_chat(src, "You struggle free of \the [H.loc].") - H.forceMove(get_turf(H)) - - if(loc != H) - qdel(H) - -/mob/living/proc/escape_buckle() - if(buckled) - if(buckled.can_buckle) - buckled.user_unbuckle_mob(src) - else if (istype(buckled, /obj/effect/vine)) - var/obj/effect/vine/V = buckled - spawn() V.manual_unbuckle(src) - else - to_chat(usr, "You can't seem to escape from \the [buckled]!") - return - -/mob/living/proc/resist_grab() - var/resisting = 0 - for(var/obj/item/grab/G in grabbed_by) - resisting++ - G.handle_resist() - if(resisting) - visible_message("[src] resists!") - -/mob/living/verb/lay_down() - set name = "Rest" - set category = "IC" - - resting = !resting - to_chat(src, "You are now [resting ? "resting" : "getting up"]") - -//called when the mob receives a bright flash -/mob/living/flash_eyes(intensity = FLASH_PROTECTION_MODERATE, override_blindness_check = FALSE, affect_silicon = FALSE, visual = FALSE, type = /obj/screen/fullscreen/flash) - if(override_blindness_check || !(disabilities & BLINDED)) - ..() - overlay_fullscreen("flash", type) - spawn(25) - if(src) - clear_fullscreen("flash", 25) - return 1 - -/mob/living/proc/cannot_use_vents() - if(mob_size > MOB_SMALL) - return "You can't fit into that vent." - return null - -/mob/living/proc/has_brain() - return 1 - -/mob/living/proc/has_eyes() - return 1 - -/mob/living/proc/slip(var/slipped_on,stun_duration=8) - return 0 - -/mob/living/carbon/human/canUnEquip(obj/item/I) - if(!..()) - return - if(I in internal_organs) - return - if(I in organs) - return - return 1 - -//Organs should not be removed via inventory procs. -/mob/living/carbon/drop_from_inventory(var/obj/item/W, var/atom/Target = null) - if(W in internal_organs) - return - if(W in organs) - return - . = ..() - -//damage/heal the mob ears and adjust the deaf amount -/mob/living/adjustEarDamage(var/damage, var/deaf) - ear_damage = max(0, ear_damage + damage) - ear_deaf = max(0, ear_deaf + deaf) - -//pass a negative argument to skip one of the variable -/mob/living/setEarDamage(var/damage = null, var/deaf = null) - if(!isnull(damage)) - ear_damage = damage - if(!isnull(deaf)) - ear_deaf = deaf - -/mob/proc/can_be_possessed_by(var/mob/observer/ghost/possessor) - return istype(possessor) && possessor.client - -/mob/living/can_be_possessed_by(var/mob/observer/ghost/possessor) - if(!..()) - return 0 - if(!possession_candidate) - to_chat(possessor, "That animal cannot be possessed.") - return 0 - if(jobban_isbanned(possessor, "Animal")) - to_chat(possessor, "You are banned from animal roles.") - return 0 - if(!possessor.MayRespawn(1,ANIMAL_SPAWN_DELAY)) - return 0 - return 1 - -/mob/living/proc/do_possession(var/mob/observer/ghost/possessor) - - if(!(istype(possessor) && possessor.ckey)) - return 0 - - if(src.ckey || src.client) - to_chat(possessor, "\The [src] already has a player.") - return 0 - - message_admins("[key_name_admin(possessor)] has taken control of \the [src].") - log_admin("[key_name(possessor)] took control of \the [src].") - src.ckey = possessor.ckey - qdel(possessor) - - if(round_is_spooky(6)) // Six or more active cultists. - to_chat(src, "You reach out with tendrils of ectoplasm and invade the mind of \the [src]...") - to_chat(src, "You have assumed direct control of \the [src].") - to_chat(src, "Due to the spookiness of the round, you have taken control of the poor animal as an invading, possessing spirit - roleplay accordingly.") - src.universal_speak = TRUE - src.universal_understand = TRUE - //src.cultify() // Maybe another time. - return - - to_chat(src, "You are now \the [src]!") - to_chat(src, "Remember to stay in character for a mob of this type!") - return 1 - -/mob/living/reset_layer() - if (jumping) - layer = VEHICLE_LOAD_LAYER - else if (hiding) - layer = HIDING_MOB_LAYER - else - ..() - -/mob/living/update_icons() - if(auras) - overlays |= auras - -/mob/living/proc/add_aura(var/obj/aura/aura) - LAZYDISTINCTADD(auras,aura) - update_icons() - return 1 - -/mob/living/proc/remove_aura(var/obj/aura/aura) - LAZYREMOVE(auras,aura) - update_icons() - return 1 - -/mob/living/Destroy() - if(auras) - for(var/a in auras) - remove_aura(a) - - qdel(selected_image) - return ..() - -/mob/living/proc/melee_accuracy_mods() - . = 0 - if(incapacitated(INCAPACITATION_UNRESISTING)) - . += 100 - if(confused) - . += 10 - if(weakened) - . += 15 - if(eye_blurry) - . += 5 - if(eye_blind) - . += 60 - if(MUTATION_CLUMSY in mutations) - . += 40 - -/mob/living/proc/ranged_accuracy_mods() - . = 0 - if(jitteriness) - . -= 2 - if(confused) - . -= 2 - if(eye_blind) - . -= 5 - if(eye_blurry) - . -= 1 - if(MUTATION_CLUMSY in mutations) - . -= 3 - -/mob/living/can_drown() - return TRUE - -/mob/living/handle_drowning() - var/turf/T = get_turf(src) - if(!can_drown() || !loc.is_flooded(lying)) - return FALSE - if(!lying && T.above && !T.above.is_flooded() && T.above.CanZPass(src, UP) && can_overcome_gravity()) - return FALSE - if(prob(5)) - to_chat(src, SPAN_DANGER("You choke and splutter as you inhale water!")) - T.show_bubbles() - return TRUE // Presumably chemical smoke can't be breathed while you're underwater. - -/mob/living/water_act(var/depth) - ..() - wash_mob(src) - for(var/thing in get_equipped_items(TRUE)) - if(isnull(thing)) continue - var/atom/movable/A = thing - if(A.simulated && !A.waterproof) - A.water_act(depth) - -/mob/living/proc/nervous_system_failure() - return FALSE - -/mob/living/proc/needs_wheelchair() - return FALSE - -/mob/living/proc/seizure() - set waitfor = 0 - sleep(rand(5,10)) - if(!paralysis && stat == CONSCIOUS) - visible_message(SPAN_DANGER("\The [src] starts having a seizure!")) - Paralyse(rand(8,16)) - make_jittery(rand(150,200)) - adjustHalLoss(rand(50,60)) - -/mob/living/proc/get_digestion_product() - return null - -/mob/living/proc/eyecheck() - return FLASH_PROTECTION_NONE - -/mob/living/proc/InStasis() - return FALSE - -/mob/living/proc/jump_layer_shift() - jumping = TRUE - reset_layer() - -/mob/living/proc/jump_layer_shift_end() - jumping = FALSE - reset_layer() diff --git a/code/modules/mob/living/living_defense.dm b/code/modules/mob/living/living_defense.dm deleted file mode 100644 index 1240c92eaaad1..0000000000000 --- a/code/modules/mob/living/living_defense.dm +++ /dev/null @@ -1,412 +0,0 @@ -/mob/living/proc/modify_damage_by_armor(def_zone, damage, damage_type, damage_flags, mob/living/victim, armor_pen, silent = FALSE) - var/list/armors = get_armors_by_zone(def_zone, damage_type, damage_flags) - . = args.Copy(2) - for(var/armor in armors) - var/datum/extension/armor/armor_datum = armor - . = armor_datum.apply_damage_modifications(arglist(.)) - -/mob/living/proc/get_blocked_ratio(def_zone, damage_type, damage_flags, armor_pen, damage) - var/list/armors = get_armors_by_zone(def_zone, damage_type, damage_flags) - . = 0 - for(var/armor in armors) - var/datum/extension/armor/armor_datum = armor - . = 1 - (1 - .) * (1 - armor_datum.get_blocked(damage_type, damage_flags, armor_pen, damage)) // multiply the amount we let through - . = min(1, .) - -/mob/living/proc/get_armors_by_zone(def_zone, damage_type, damage_flags) - . = list() - var/natural_armor = get_extension(src, /datum/extension/armor) - if(natural_armor) - . += natural_armor - if(psi) - . += get_extension(psi, /datum/extension/armor) - -/mob/living/bullet_act(var/obj/item/projectile/P, var/def_zone) - if (status_flags & GODMODE) - return PROJECTILE_FORCE_MISS - - //Being hit while using a deadman switch - var/obj/item/device/assembly/signaler/signaler = get_active_hand() - if(istype(signaler) && signaler.deadman) - log_and_message_admins("has triggered a signaler deadman's switch") - visible_message(SPAN_WARNING("[src] triggers their deadman's switch")) - signaler.signal() - - //Armor - var/damage = P.damage - var/flags = P.damage_flags() - var/damaged - if(!P.nodamage) - damaged = apply_damage(damage, P.damage_type, def_zone, flags, P, P.armor_penetration) - bullet_impact_visuals(P, def_zone, damaged) - if(damaged || P.nodamage) // Run the block computation if we did damage or if we only use armor for effects (nodamage) - . = get_blocked_ratio(def_zone, P.damage_type, flags, P.armor_penetration, P.damage) - P.on_hit(src, ., def_zone) - - if(ai_holder && P.firer) - ai_holder.react_to_attack(P.firer) - -// For visuals and blood splatters etc -/mob/living/proc/bullet_impact_visuals(var/obj/item/projectile/P, var/def_zone, var/damage) - var/list/impact_sounds = LAZYACCESS(P.impact_sounds, get_bullet_impact_effect_type(def_zone)) - if(length(impact_sounds)) - playsound(src, pick(impact_sounds), 75) - -/mob/living/get_bullet_impact_effect_type(var/def_zone) - return BULLET_IMPACT_MEAT - -/mob/living/proc/aura_check(var/type) - if(!auras) - return TRUE - . = TRUE - var/list/newargs = args - args[1] - for(var/a in auras) - var/obj/aura/aura = a - var/result = 0 - switch(type) - if(AURA_TYPE_WEAPON) - result = aura.attackby(arglist(newargs)) - if(AURA_TYPE_BULLET) - result = aura.bullet_act(arglist(newargs)) - if(AURA_TYPE_THROWN) - result = aura.hitby(arglist(newargs)) - if(AURA_TYPE_LIFE) - result = aura.life_tick() - if(result & AURA_FALSE) - . = FALSE - if(result & AURA_CANCEL) - break - - -//Handles the effects of "stun" weapons -/mob/living/proc/stun_effect_act(var/stun_amount, var/agony_amount, var/def_zone, var/used_weapon=null) - flash_pain() - - if (stun_amount) - Stun(stun_amount) - Weaken(stun_amount) - apply_effect(stun_amount, EFFECT_STUTTER) - apply_effect(stun_amount, EFFECT_EYE_BLUR) - - if (agony_amount) - apply_damage(agony_amount, DAMAGE_PAIN, def_zone, used_weapon) - apply_effect(agony_amount/10, EFFECT_STUTTER) - apply_effect(agony_amount/10, EFFECT_EYE_BLUR) - -/mob/living/proc/electrocute_act(var/shock_damage, var/obj/source, var/siemens_coeff = 1.0, def_zone = null) - return FALSE //only carbon liveforms have this proc - -/mob/living/emp_act(severity) - if (status_flags & GODMODE) - return - var/list/L = get_contents() - for(var/obj/O in L) - O.emp_act(severity) - ..() - -/mob/living/proc/resolve_item_attack(obj/item/I, mob/living/user, var/target_zone) - return target_zone - -//Called when the mob is hit with an item in combat. Returns the blocked result -/mob/living/proc/hit_with_weapon(obj/item/I, mob/living/user, var/effective_force, var/hit_zone) - var/weapon_mention - if(I.attack_message_name()) - weapon_mention = " with [I.attack_message_name()]" - visible_message(SPAN_DANGER("\The [src] has been [I.attack_verb.len? pick(I.attack_verb) : "attacked"][weapon_mention] by \the [user]!")) - - . = standard_weapon_hit_effects(I, user, effective_force, hit_zone) - - if (I.damtype == DAMAGE_BRUTE && prob(33)) // Added blood for whacking non-humans too - var/turf/simulated/location = get_turf(src) - if(istype(location)) location.add_blood_floor(src) - - if (ai_holder) - ai_holder.react_to_attack(user) - -///returns false if the effects failed to apply for some reason, true otherwise. -/mob/living/proc/standard_weapon_hit_effects(obj/item/I, mob/living/user, var/effective_force, var/hit_zone) - if(!effective_force) - return FALSE - - //Apply weapon damage - var/damage_flags = I.damage_flags() - - return apply_damage(effective_force, I.damtype, hit_zone, damage_flags, used_weapon=I, armor_pen=I.armor_penetration) - -//this proc handles being hit by a thrown atom -/mob/living/hitby(var/atom/movable/AM, var/datum/thrownthing/TT) - - if(isliving(AM)) - var/mob/living/M = AM - playsound(loc, 'sound/weapons/pierce.ogg', 25, 1, -1) - if(skill_fail_prob(SKILL_COMBAT, 75)) - Weaken(rand(3,5)) - if(M.skill_fail_prob(SKILL_HAULING, 100)) - M.Weaken(rand(4,8)) - M.visible_message(SPAN_DANGER("\The [M] collides with \the [src]!")) - - if (!aura_check(AURA_TYPE_THROWN, AM, TT)) - return - - if(isobj(AM)) - var/obj/O = AM - var/dtype = O.damtype - var/throw_damage = O.throwforce*(TT.speed/THROWFORCE_SPEED_DIVISOR) - - var/miss_chance = max(15*(TT.dist_travelled-2),0) - - if (prob(miss_chance)) - visible_message(SPAN_NOTICE("\The [O] misses [src] narrowly!")) - return - - visible_message(SPAN_WARNING("\The [src] has been hit by \the [O].")) - apply_damage(throw_damage, dtype, null, O.damage_flags(), O) - - if(TT.thrower) - var/client/assailant = TT.thrower.client - if(assailant) - admin_attack_log(TT.thrower, src, "Threw \an [O] at the victim.", "Had \an [O] thrown at them.", "threw \an [O] at") - - if (ai_holder) - ai_holder.react_to_attack(TT.thrower) - - // Begin BS12 momentum-transfer code. - var/mass = 1.5 - if(istype(O, /obj/item)) - var/obj/item/I = O - mass = I.w_class/THROWNOBJ_KNOCKBACK_DIVISOR - var/momentum = TT.speed*mass - - if(momentum >= THROWNOBJ_KNOCKBACK_SPEED) - var/dir = TT.init_dir - - visible_message(SPAN_WARNING("\The [src] staggers under the impact!"),SPAN_WARNING("You stagger under the impact!")) - throw_at(get_edge_target_turf(src,dir),1,momentum) - - if(!O || !src) return - - if(O.can_embed() && !(mob_flags & MOB_FLAG_UNPINNABLE)) //Projectile is suitable for pinning. - //Handles embedding for non-humans and simple_animals. - embed(O) - - var/turf/T = near_wall(dir,2) - - if(T) - forceMove(T) - visible_message(SPAN_WARNING("[src] is pinned to the wall by [O]!"),SPAN_WARNING("You are pinned to the wall by [O]!")) - anchored = TRUE - pinned += O - -/mob/living/proc/embed(var/obj/O, var/def_zone=null, var/datum/wound/supplied_wound) - O.forceMove(src) - embedded += O - verbs += /mob/proc/yank_out_object - -//This is called when the mob is thrown into a dense turf //from infinity -/mob/living/proc/turf_collision(var/turf/T, var/speed) - visible_message(SPAN_DANGER("[src] slams into \the [T]")) - playsound(T, 'sound/effects/bangtaper.ogg', 50, 1, 1)//so it plays sounds on the turf instead, makes for awesome carps to hull collision and such - apply_damage(speed * 2, DAMAGE_BRUTE) - -/mob/living/proc/near_wall(var/direction,var/distance=1) - var/turf/T = get_step(get_turf(src),direction) - var/turf/last_turf = loc - var/i = 1 - - while(i>0 && i<=distance) - if(!T || T.density) //Turf is a wall or map edge. - return last_turf - i++ - last_turf = T - T = get_step(T,direction) - - return FALSE - -// End BS12 momentum-transfer code. - -/mob/living/attack_generic(var/mob/user, var/damage, var/attack_message) - - if(!damage || !istype(user)) - return - - adjustBruteLoss(damage) - admin_attack_log(user, src, "Attacked", "Was attacked", "attacked") - - visible_message(SPAN_DANGER("\The [user] has [attack_message] \the [src]")) - user.do_attack_animation(src) - spawn(1) updatehealth() - - if (ai_holder) - ai_holder.react_to_attack(user) - - return TRUE - -/mob/living/proc/IgniteMob() - if(fire_stacks > 0 && !on_fire) - on_fire = 1 - set_light(0.6, 0.1, 4, l_color = COLOR_ORANGE) - update_fire() - -/mob/living/proc/ExtinguishMob() - if(on_fire) - on_fire = 0 - fire_stacks = 0 - set_light(0) - update_fire() - -/mob/living/proc/update_fire() - return - -/mob/living/proc/adjust_fire_stacks(add_fire_stacks) //Adjusting the amount of fire_stacks we have on person - fire_stacks = clamp(fire_stacks + add_fire_stacks, FIRE_MIN_STACKS, FIRE_MAX_STACKS) - -/mob/living/proc/handle_fire() - if(fire_stacks < 0) - fire_stacks = min(0, ++fire_stacks) //If we've doused ourselves in water to avoid fire, dry off slowly - - if(!on_fire) - return TRUE - else if(fire_stacks <= 0) - ExtinguishMob() //Fire's been put out. - return TRUE - - fire_stacks = max(0, fire_stacks - 0.2) //I guess the fire runs out of fuel eventually - - var/datum/gas_mixture/G = loc.return_air() // Check if we're standing in an oxygenless environment - if(G.get_by_flag(XGM_GAS_OXIDIZER) < 1) - ExtinguishMob() //If there's no oxygen in the tile we're on, put out the fire - return TRUE - - var/turf/location = get_turf(src) - location.hotspot_expose(fire_burn_temperature(), 50, 1) - -/mob/living/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume) - if (status_flags & GODMODE) - return - //once our fire_burn_temperature has reached the temperature of the fire that's giving fire_stacks, stop adding them. - //allow fire_stacks to go up to 4 for fires cooler than 700 K, since are being immersed in flame after all. - if(fire_stacks <= 4 || fire_burn_temperature() < exposed_temperature) - adjust_fire_stacks(2) - IgniteMob() - -/mob/living/proc/get_cold_protection() - return FALSE - -/mob/living/proc/get_heat_protection() - return FALSE - -//Finds the effective temperature that the mob is burning at. -/mob/living/proc/fire_burn_temperature() - if (fire_stacks <= 0) - return FALSE - - //Scale quadratically so that single digit numbers of fire stacks don't burn ridiculously hot. - //lower limit of 700 K, same as matches and roughly the temperature of a cool flame. - return max(2.25*round(FIRESUIT_MAX_HEAT_PROTECTION_TEMPERATURE*(fire_stacks/FIRE_MAX_FIRESUIT_STACKS)**2), 700) - -/mob/living/proc/reagent_permeability() - return TRUE - -/mob/living/proc/handle_actions() - //Pretty bad, i'd use picked/dropped instead but the parent calls in these are nonexistent - for(var/datum/action/A in actions) - if(A.CheckRemoval(src)) - A.Remove(src) - for(var/obj/item/I in src) - if(I.action_button_name) - if(!I.action) - I.action = new I.default_action_type - I.action.name = I.action_button_name - I.action.SetTarget(I) - I.action.Grant(src) - return - -/mob/living/update_action_buttons() - if(!hud_used) return - if(!client) return - - if(hud_used.hud_shown != 1) //Hud toggled to minimal - return - - client.screen -= hud_used.hide_actions_toggle - for(var/datum/action/A in actions) - if(A.button) - client.screen -= A.button - - if(hud_used.action_buttons_hidden) - if(!hud_used.hide_actions_toggle) - hud_used.hide_actions_toggle = new(hud_used) - hud_used.hide_actions_toggle.UpdateIcon() - - if(!hud_used.hide_actions_toggle.moved) - hud_used.hide_actions_toggle.screen_loc = hud_used.ButtonNumberToScreenCoords(1) - //hud_used.SetButtonCoords(hud_used.hide_actions_toggle,1) - - client.screen += hud_used.hide_actions_toggle - return - - var/button_number = 0 - for(var/datum/action/A in actions) - button_number++ - if(A.button == null) - var/obj/screen/movable/action_button/N = new(hud_used) - N.owner = A - A.button = N - - var/obj/screen/movable/action_button/B = A.button - - B.UpdateIcon() - - B.SetName(A.UpdateName()) - - client.screen += B - - if(!B.moved) - B.screen_loc = hud_used.ButtonNumberToScreenCoords(button_number) - //hud_used.SetButtonCoords(B,button_number) - - if(button_number > 0) - if(!hud_used.hide_actions_toggle) - hud_used.hide_actions_toggle = new(hud_used) - hud_used.hide_actions_toggle.InitialiseIcon(src) - if(!hud_used.hide_actions_toggle.moved) - hud_used.hide_actions_toggle.screen_loc = hud_used.ButtonNumberToScreenCoords(button_number+1) - //hud_used.SetButtonCoords(hud_used.hide_actions_toggle,button_number+1) - client.screen += hud_used.hide_actions_toggle - -/mob/living/lava_act(datum/gas_mixture/air, temperature, pressure) - if (status_flags & GODMODE) - return - fire_act(air, temperature) - FireBurn(0.4*vsc.fire_firelevel_multiplier, temperature, pressure) - . = (health <= 0) ? ..() : FALSE - -// Applies direct "cold" damage while checking protection against the cold. -/mob/living/proc/inflict_cold_damage(amount) - amount *= 1 - get_cold_protection(50) // Within spacesuit protection. - if(amount > 0) - adjustFireLoss(amount) - -// Ditto, but for "heat". -/mob/living/proc/inflict_heat_damage(amount) - amount *= 1 - get_heat_protection(10000) // Within firesuit protection. - if(amount > 0) - adjustFireLoss(amount) - -// and one for electricity because why not -/mob/living/proc/inflict_shock_damage(amount) - electrocute_act(amount, null, 1, pick(BP_HEAD, BP_CHEST, BP_GROIN)) - -// also one for water (most things resist it entirely, except for slimes) -/mob/living/proc/inflict_water_damage(amount) - amount *= 1 - if(amount > 0) - adjustToxLoss(amount) - -// one for abstracted away ""poison"" (mostly because simplemobs shouldn't handle reagents) -/mob/living/proc/inflict_poison_damage(amount) - if(isSynthetic()) - return - amount *= 1 - if(amount > 0) - adjustToxLoss(amount) diff --git a/code/modules/mob/living/living_defines.dm b/code/modules/mob/living/living_defines.dm deleted file mode 100644 index ab43a8740e893..0000000000000 --- a/code/modules/mob/living/living_defines.dm +++ /dev/null @@ -1,67 +0,0 @@ -/mob/living - see_in_dark = 2 - see_invisible = SEE_INVISIBLE_LIVING - waterproof = FALSE - /// Whether or not the mob can be buckled to things. - var/can_be_buckled = TRUE - - //Health and life related vars - var/maxHealth = 100 //Maximum health that should be possible. - var/health = 100 //A mob's health - - var/mob_class = null // A mob's "class", e.g. human, mechanical, animal, etc. Used for certain projectile effects. See __defines/mob.dm for available classes. - - var/hud_updateflag = 0 - - //Damage related vars, NOTE: THESE SHOULD ONLY BE MODIFIED BY PROCS // what a joke - //var/bruteloss = 0 //Brutal damage caused by brute force (punching, being clubbed by a toolbox ect... this also accounts for pressure damage) - //var/oxyloss = 0 //Oxygen depravation damage (no air in lungs) - //var/toxloss = 0 //Toxic damage caused by being poisoned or radiated - //var/fireloss = 0 //Burn damage caused by being way too hot, too cold or burnt. - //var/halloss = 0 //Hallucination damage. 'Fake' damage obtained through hallucinating or the holodeck. Sleeping should cause it to wear off. - - var/last_special = 0 //Used by the resist verb, likely used to prevent players from bypassing next_move by logging in/out. - var/base_attack_cooldown = DEFAULT_ATTACK_COOLDOWN - - var/t_phoron = null - var/t_oxygen = null - var/t_sl_gas = null - var/t_n2 = null - - var/now_pushing = null - var/mob_bump_flag = 0 - var/mob_swap_flags = 0 - var/mob_push_flags = 0 - var/mob_always_swap = 0 - - var/mob/living/cameraFollow = null - var/list/datum/action/actions = list() - - var/update_slimes = 1 - var/silent = null // Can't talk. Value goes down every life proc. - var/on_fire = 0 //The "Are we on fire?" var - var/fire_stacks - - var/failed_last_breath = 0 //This is used to determine if the mob failed a breath. If they did fail a brath, they will attempt to breathe each tick, otherwise just once per 4 ticks. - var/possession_candidate // Can be possessed by ghosts if unplayed. - - var/eye_blind = null //Carbon - var/eye_blurry = null //Carbon - var/ear_damage = null //Carbon - var/stuttering = null //Carbon - var/slurring = null //Carbon - - var/job = null//Living - var/list/obj/aura/auras = null //Basically a catch-all aura/force-field thing. - - var/last_resist = 0 - ///For leaping and vaulting - var/jumping = FALSE - - var/ghosted = 0 //For checks as to why a player has disconnected (can AI take over? etc.) - var/admin_paralyzed = FALSE - - // var/nutrition = 400 - // var/max_nutrition = MAX_NUTRITION - - var/image/selected_image = null // Used for buildmode AI control stuff. diff --git a/code/modules/mob/living/living_maneuvers.dm b/code/modules/mob/living/living_maneuvers.dm deleted file mode 100644 index dde36d586dd23..0000000000000 --- a/code/modules/mob/living/living_maneuvers.dm +++ /dev/null @@ -1,65 +0,0 @@ -/mob/living - var/decl/maneuver/prepared_maneuver - var/list/available_maneuvers = list() - -/mob/living/begin_falling(var/lastloc, var/below) - if(throwing) - return - if(!can_fall(location_override = lastloc) && prepared_maneuver && prepared_maneuver.can_be_used_by(src, silent = TRUE)) - var/turf/check = get_turf(lastloc) - for(var/i = 1 to Ceil((get_jump_distance() * get_acrobatics_multiplier()) * prepared_maneuver.reflexive_modifier)) - var/turf/next_check = get_step(check, dir) - if(!next_check || next_check.density) - break - check = next_check - if(!can_fall(location_override = check)) - break - if(check && check != loc) - addtimer(CALLBACK(src, /mob/living/proc/reflexive_maneuver_callback, lastloc, check), 0) - return - . = ..() - -/mob/living/proc/reflexive_maneuver_callback(var/turf/origin, var/turf/check) - if(prepared_maneuver) - if(origin) - forceMove(get_turf(origin)) - prepared_maneuver.perform(src, check, get_acrobatics_multiplier(prepared_maneuver), reflexively = TRUE) - -/mob/living/verb/prepare_maneuver() - set name = "Prepare To Maneuver" - set desc = "Select a maneuver to perform." - set category = "IC" - - if(!length(available_maneuvers)) - to_chat(src, SPAN_WARNING("You are unable to perform any maneuvers.")) - return - - var/list/maneuvers = list() - for(var/maneuver in available_maneuvers) - maneuvers += decls_repository.get_decl(maneuver) - - var/next_maneuver = input(src, "Select a maneuver.") as null|anything in maneuvers - if(next_maneuver) - prepared_maneuver = next_maneuver - to_chat(src, SPAN_NOTICE("You prepare to [prepared_maneuver.name].")) - else - prepared_maneuver = null - to_chat(src, SPAN_NOTICE("You are no longer preparing to perform a maneuver.")) - -/mob/living/proc/perform_maneuver(var/maneuver, var/atom/target) - var/decl/maneuver/performing_maneuver = ispath(maneuver) ? decls_repository.get_decl(maneuver) : maneuver - if(istype(performing_maneuver)) - . = performing_maneuver.perform(src, target, get_acrobatics_multiplier(performing_maneuver)) - -/mob/living/proc/get_acrobatics_multiplier(var/decl/maneuver/attempting_maneuver) - return 1 - -/mob/living/proc/can_do_maneuver(var/decl/maneuver/maneuver, var/silent = FALSE) - . = ((istype(maneuver) ? maneuver.type : maneuver) in available_maneuvers) - -/mob/living/proc/get_jump_distance() - return 0 - - -/mob/living/proc/post_maneuver() - return diff --git a/code/modules/mob/living/living_powers.dm b/code/modules/mob/living/living_powers.dm deleted file mode 100644 index 354ad9221f7fb..0000000000000 --- a/code/modules/mob/living/living_powers.dm +++ /dev/null @@ -1,17 +0,0 @@ -/mob/living - var/hiding - -/mob/living/proc/hide() - set name = "Hide" - set desc = "Allows to hide beneath tables or certain items. Toggled on or off." - set category = "Abilities" - - if(incapacitated()) - return - - hiding = !hiding - if(hiding) - to_chat(src, "You are now hiding.") - else - to_chat(src, "You have stopped hiding.") - reset_layer() diff --git a/code/modules/mob/living/login.dm b/code/modules/mob/living/login.dm deleted file mode 100644 index b41baabef9754..0000000000000 --- a/code/modules/mob/living/login.dm +++ /dev/null @@ -1,9 +0,0 @@ - -/mob/living/Login() - ..() - //Mind updates - mind_initialize() //updates the mind (or creates and initializes one if one doesn't exist) - mind.active = 1 //indicates that the mind is currently synced with a client - //If they're SSD, remove it so they can wake back up. - update_antag_icons(mind) - return . diff --git a/code/modules/mob/living/logout.dm b/code/modules/mob/living/logout.dm deleted file mode 100644 index 21da512c90c8e..0000000000000 --- a/code/modules/mob/living/logout.dm +++ /dev/null @@ -1,6 +0,0 @@ -/mob/living/Logout() - ..() - if (mind) - //Per BYOND docs key remains set if the player DCs, becomes null if switching bodies. - if(!key) //key and mind have become seperated. - mind.active = 0 //This is to stop say, a mind.transfer_to call on a corpse causing a ghost to re-enter its body. diff --git a/code/modules/mob/living/maneuvers/_maneuver.dm b/code/modules/mob/living/maneuvers/_maneuver.dm deleted file mode 100644 index 4d13dce00c8e5..0000000000000 --- a/code/modules/mob/living/maneuvers/_maneuver.dm +++ /dev/null @@ -1,51 +0,0 @@ -/decl/maneuver - var/name = "unnamed" - var/delay = 2 SECONDS - var/cooldown = 10 SECONDS - var/stamina_cost = 10 - var/reflexive_modifier = 1 - -/decl/maneuver/proc/can_be_used_by(var/mob/living/user, var/atom/target, var/silent = FALSE) - if(!istype(user) || !user.can_do_maneuver(src, silent)) - return FALSE - if(user.buckled) - if(!silent) - to_chat(user, SPAN_WARNING("You are buckled down and cannot maneuver!")) - return FALSE - if(!has_gravity(user)) - if(!silent) - to_chat(user, SPAN_WARNING("You cannot maneuver in zero gravity!")) - return FALSE - if(user.incapacitated(INCAPACITATION_DISABLED|INCAPACITATION_DISRUPTED) || user.lying || !istype(user.loc, /turf)) - if(!silent) - to_chat(user, SPAN_WARNING("You are not in position for maneuvering.")) - return FALSE - if(world.time < user.last_special) - if(!silent) - to_chat(user, SPAN_WARNING("You cannot maneuver again for another [Floor((user.last_special - world.time)*0.1)] second\s.")) - return FALSE - if(user.get_stamina() < stamina_cost) - if(!silent) - to_chat(user, SPAN_WARNING("You are too exhausted to maneuver right now.")) - return FALSE - if (target && user.z != target.z) - if (!silent) - to_chat(user, SPAN_WARNING("You cannot manuever to a different z-level!")) - return FALSE - return TRUE - -/decl/maneuver/proc/show_initial_message(var/mob/user, var/atom/target) - return - -/decl/maneuver/proc/perform(var/mob/living/user, var/atom/target, var/strength, var/reflexively = FALSE) - if(can_be_used_by(user, target)) - var/do_flags = DO_DEFAULT | DO_USER_UNIQUE_ACT - if(!reflexively) - do_flags |= DO_PUBLIC_PROGRESS | DO_BAR_OVER_USER - show_initial_message(user, target) - user.face_atom(target) - . = (!delay || reflexively || (do_after(user, delay, target, do_flags) && can_be_used_by(user, target))) - if(cooldown) - user.last_special = world.time + cooldown - if(stamina_cost) - user.adjust_stamina(stamina_cost) diff --git a/code/modules/mob/living/maneuvers/maneuver_leap.dm b/code/modules/mob/living/maneuvers/maneuver_leap.dm deleted file mode 100644 index b1a6d11ad69ac..0000000000000 --- a/code/modules/mob/living/maneuvers/maneuver_leap.dm +++ /dev/null @@ -1,56 +0,0 @@ -/decl/maneuver/leap - name = "leap" - stamina_cost = 10 - reflexive_modifier = 1.5 - -/decl/maneuver/leap/perform(var/mob/living/user, var/atom/target, var/strength, var/reflexively = FALSE) - . = ..() - if(.) - var/old_pass_flags = user.pass_flags - user.pass_flags |= PASS_FLAG_TABLE - user.visible_message(SPAN_DANGER("\The [user] takes a flying leap!")) - strength = max(2, strength * user.get_jump_distance()) - if(reflexively) - strength *= reflexive_modifier - user.jump_layer_shift() - animate(user, pixel_z = 16, time = 3, easing = SINE_EASING | EASE_IN) - animate(pixel_z = user.default_pixel_z, time = 3, easing = SINE_EASING | EASE_OUT) - user.throw_at(get_turf(target), strength, 1, user, FALSE, CALLBACK(src, /decl/maneuver/leap/proc/end_leap, user, target, old_pass_flags)) - addtimer(CALLBACK(user, /mob/living/proc/jump_layer_shift_end), 4.5) - -/decl/maneuver/leap/proc/end_leap(var/mob/living/user, var/atom/target, var/pass_flag) - user.pass_flags = pass_flag - user.post_maneuver() - -/decl/maneuver/leap/show_initial_message(var/mob/living/user, var/atom/target) - user.visible_message(SPAN_WARNING("\The [user] crouches, preparing for a leap!")) - -/decl/maneuver/leap/can_be_used_by(var/mob/living/user, var/atom/target, var/silent = FALSE) - . = ..() - if(.) - var/can_leap_distance = user.get_jump_distance() * user.get_acrobatics_multiplier() - if (can_leap_distance <= 0) - if (!silent) - to_chat(user, SPAN_WARNING("You can't leap in your current state.")) - return FALSE - if (!istype(target)) - if (!silent) - to_chat(user, SPAN_WARNING("That is not a valid leap target.")) - return FALSE - if (get_dist(user, target) > can_leap_distance) - if (!silent) - to_chat(user, SPAN_WARNING("You can't leap that far.")) - return FALSE - return TRUE - -/decl/maneuver/leap/spider - stamina_cost = 0 - -/decl/maneuver/leap/spider/show_initial_message(var/mob/living/user, var/atom/target) - user.visible_message(SPAN_WARNING("\The [user] reels back and prepares to launch itself at \the [target]!")) - -/decl/maneuver/leap/grab/end_leap(var/mob/living/user, var/atom/target) - . = ..() - if(ishuman(user) && !user.lying && ismob(target) && user.Adjacent(target)) - var/mob/living/carbon/human/H = user - H.species.attempt_grab(H, target) diff --git a/code/modules/mob/living/recoil.dm b/code/modules/mob/living/recoil.dm deleted file mode 100644 index bdcc807044dd5..0000000000000 --- a/code/modules/mob/living/recoil.dm +++ /dev/null @@ -1,24 +0,0 @@ -/mob/living/proc/handle_recoil(var/obj/item/gun/G) - deltimer(recoil_reduction_timer) - if(G.one_hand_penalty)//If the gun has a two handed penalty and is not weilded. - if(!G.is_held_twohanded(src)) - recoil += G.one_hand_penalty+(((2-src.get_skill_value(SKILL_WEAPONS))*0.1)/2) //Then the one hand penalty wil lbe added to the recoil. - if(G.recoil_buildup) - recoil += G.recoil_buildup+((2-src.get_skill_value(SKILL_WEAPONS))*0.1) - update_recoil() - -/mob/living/proc/calc_recoil() - - if(recoil >= 10) - recoil *= 0.9 - else if(recoil < 10 && recoil > 1) - recoil -= 1 - else - recoil = 0 - - if(recoil != 0) recoil_reduction_timer = addtimer(CALLBACK(src, .proc/calc_recoil), 0.1 SECONDS, TIMER_STOPPABLE) - else deltimer(recoil_reduction_timer) - -//Called after setting recoil -/mob/living/proc/update_recoil() - recoil_reduction_timer = addtimer(CALLBACK(src, .proc/calc_recoil), 0.3 SECONDS, TIMER_STOPPABLE) diff --git a/code/modules/mob/living/say.dm b/code/modules/mob/living/say.dm deleted file mode 100644 index de533048f130b..0000000000000 --- a/code/modules/mob/living/say.dm +++ /dev/null @@ -1,385 +0,0 @@ -var/global/list/department_radio_keys = list( - ":r" = "right ear", ".r" = "right ear", - ":l" = "left ear", ".l" = "left ear", - ":i" = "intercom", ".i" = "intercom", - ":h" = "department", ".h" = "department", - ":+" = "special", ".+" = "special", //activate radio-specific special functions - ":c" = "Command", ".c" = "Command", - ":n" = "Science", ".n" = "Science", - ":m" = "Medical", ".m" = "Medical", - ":e" = "Engineering", ".e" = "Engineering", - ":s" = "Security", ".s" = "Security", - ":w" = "whisper", ".w" = "whisper", - ":t" = "Mercenary", ".t" = "Mercenary", - ":x" = "Raider", ".x" = "Raider", - ":u" = "Supply", ".u" = "Supply", - ":v" = "Service", ".v" = "Service", - ":p" = "AI Private", ".p" = "AI Private", - ":z" = "Entertainment",".z" = "Entertainment", - ":y" = "Exploration", ".y" = "Exploration", - ":o" = "Response Team",".o" = "Response Team", //ERT - ":j" = "Hailing", ".j" = "Hailing", - - ":R" = "right ear", ".R" = "right ear", - ":L" = "left ear", ".L" = "left ear", - ":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", - ":W" = "whisper", ".W" = "whisper", - ":T" = "Mercenary", ".T" = "Mercenary", - ":X" = "Raider", ".X" = "Raider", - ":U" = "Supply", ".U" = "Supply", - ":V" = "Service", ".V" = "Service", - ":P" = "AI Private", ".P" = "AI Private", - ":Z" = "Entertainment",".Z" = "Entertainment", - ":Y" = "Exploration", ".Y" = "Exploration", - ":O" = "Response Team", ".O" = "Response Team", - ":J" = "Hailing", ".J" = "Hailing", - - //kinda localization -- Sweden_Moose - ":к" = "right ear", ".к" = "right ear", - ":д" = "left ear", ".д" = "left ear", - ":ш" = "intercom", ".ш" = "intercom", - ":р" = "department", ".р" = "department", - ":+" = "special", ".+" = "special", //activate radio-specific special functions - ":с" = "Command", ".с" = "Command", - ":т" = "Science", ".т" = "Science", - ":ь" = "Medical", ".ь" = "Medical", - ":у" = "Engineering", ".у" = "Engineering", - ":ы" = "Security", ".ы" = "Security", - ":ц" = "whisper", ".ц" = "whisper", - ":е" = "Mercenary", ".е" = "Mercenary", - ":ч" = "Raider", ".ч" = "Raider", - ":г" = "Supply", ".г" = "Supply", - ":м" = "Service", ".м" = "Service", - ":з" = "AI Private", ".з" = "AI Private", - ":я" = "Entertainment",".я" = "Entertainment", - ":н" = "Exploration", ".н" = "Exploration", - ":щ" = "Response Team",".щ" = "Response Team", //ERT - ":о" = "Hailing", ".о" = "Hailing", - - ":К" = "right ear", ".К" = "right ear", - ":Д" = "left ear", ".Д" = "left ear", - ":Ш" = "intercom", ".Ш" = "intercom", - ":Р" = "department", ".Р" = "department", - ":С" = "Command", ".С" = "Command", - ":Т" = "Science", ".Т" = "Science", - ":Ь" = "Medical", ".Ь" = "Medical", - ":У" = "Engineering", ".У" = "Engineering", - ":Ы" = "Security", ".Ы" = "Security", - ":Ц" = "whisper", ".Ц" = "whisper", - ":Е" = "Mercenary", ".Е" = "Mercenary", - ":Ч" = "Raider", ".Ч" = "Raider", - ":Г" = "Supply", ".Г" = "Supply", - ":М" = "Service", ".М" = "Service", - ":З" = "AI Private", ".З" = "AI Private", - ":Я" = "Entertainment",".Я" = "Entertainment", - ":Н" = "Exploration", ".Н" = "Exploration", - ":Щ" = "Response Team", ".Щ" = "Response Team", - ":О" = "Hailing", ".О" = "Hailing" -) - - -var/global/list/channel_to_radio_key = new -/proc/get_radio_key_from_channel(var/channel) - var/key = channel_to_radio_key[channel] - if(!key) - for(var/radio_key in department_radio_keys) - if(department_radio_keys[radio_key] == channel) - key = radio_key - break - if(!key) - key = "" - channel_to_radio_key[channel] = key - - return key - -/mob/living/proc/binarycheck() - - if (istype(src, /mob/living/silicon/pai)) - return - - if (!ishuman(src)) - return - - var/mob/living/carbon/human/H = src - if (H.l_ear || H.r_ear) - var/obj/item/device/radio/headset/dongle - if(istype(H.l_ear,/obj/item/device/radio/headset)) - dongle = H.l_ear - else - dongle = H.r_ear - if(!istype(dongle)) return - if(dongle.translate_binary) return 1 - -/mob/living/proc/get_default_language() - return default_language - -/mob/proc/is_muzzled() - return istype(wear_mask, /obj/item/clothing/mask/muzzle) - -//Takes a list of the form list(message, verb, whispering) and modifies it as needed -//Returns 1 if a speech problem was applied, 0 otherwise -/mob/living/proc/handle_speech_problems(var/list/message_data) - var/message = message_data[1] - var/verb = message_data[2] - - . = 0 - - if((MUTATION_HULK in mutations) && health >= 25 && length(message)) - message = "[uppertext(message)]!!!" - verb = pick("кричит","вопит") //INF, WAS verb = pick("yells","roars","hollers") - message_data[3] = 0 - . = 1 - else if(slurring) - message = slur(message) - verb = "заплетается" //INF, WAS verb = pick("slobbers","slurs") - . = 1 - else if(stuttering) - message = NewStutter(message) - verb = pick("бормочет","заикается") //INF, WAS verb = pick("stammers","stutters") - . = 1 - else if(has_chem_effect(CE_SQUEAKY, 1)) - message = "[message]" - verb = "скрипит" //INF, WAS verb = "squeaks" - . = 1 - - message_data[1] = message - message_data[2] = verb - -/mob/living/proc/handle_message_mode(message_mode, message, verb, speaking, used_radios, alt_name) - if(message_mode == "intercom") - for(var/obj/item/device/radio/intercom/I in view(1, null)) - I.talk_into(src, message, verb, speaking) - used_radios += I - return 0 - -/mob/living/proc/handle_speech_sound() - var/list/returns[2] - returns[1] = null - returns[2] = null - return returns - -/mob/living/proc/get_speech_ending(verb, var/ending) - if(ending=="!") - return pick("восклицает","выкрикивает") //INF, WAS return pick("exclaims","shouts","yells") - if(ending=="?") - return "спрашивает" //INF, WAS return "asks" - return verb - -/mob/living/proc/format_say_message(var/message = null) - if(!message) - return - - message = html_decode(message) - - var/end_char = copytext_char(message, length_char(message), length_char(message) + 1) // INF Localiztion - if(!(end_char in list(".", "?", "!", "-", "~", ":"))) - message += "." - - message = html_encode(message) - return message - -/mob/living/say(var/message, var/datum/language/speaking = null, var/verb="says", var/alt_name="", whispering) - if(client) - if(client.prefs.muted & MUTE_IC) - to_chat(src, "You cannot speak in IC (Muted).") - return - - if(stat) - if(stat == 2) - return say_dead(message) - return - - var/prefix = copytext_char(message, 1, 2) - if(prefix == get_prefix_key(/decl/prefix/custom_emote)) - return emote(copytext_char(message, 2)) - if(prefix == get_prefix_key(/decl/prefix/visible_emote)) - return custom_emote(1, copytext_char(message, 2)) - - //parse the language code and consume it - if(!speaking) - speaking = parse_language(message) - if(speaking) - message = copytext_char(message, 2 + length_char(speaking.key)) - else - speaking = get_default_language() - - //parse the radio code and consume it - var/message_mode = parse_message_mode(message, "headset") - if (message_mode) - if (message_mode == "headset") - message = copytext_char(message,2) //it would be really nice if the parse procs could do this for us. - else - message = copytext_char(message,3) - - message = trim_left(message) - - // This is broadcast to all mobs with the language, - // irrespective of distance or anything else. - if(speaking && (speaking.flags & HIVEMIND)) - speaking.broadcast(src,trim(message)) - return 1 - - if((is_muzzled()) && !(speaking && (speaking.flags & SIGNLANG))) - to_chat(src, "You're muzzled and cannot speak!") - return - - if (speaking) - if(whispering) - verb = speaking.whisper_verb ? speaking.whisper_verb : speaking.speech_verb - else - verb = say_quote(message, speaking) - if(verb == "кричит") - message = copytext_char(message, 1, length(message)) - - message = trim_left(message) - message = handle_autohiss(message, speaking) - message = format_say_message(message) - message = process_chat_markup(message) - - if(speaking && !speaking.can_be_spoken_properly_by(src)) - message = speaking.muddle(message) - - if(!(speaking && (speaking.flags & NO_STUTTER))) - var/list/message_data = list(message, verb, 0) - if(handle_speech_problems(message_data)) - message = message_data[1] - verb = message_data[2] - - if(!message || message == "") - return 0 - - var/list/obj/item/used_radios = new - if(handle_message_mode(message_mode, message, verb, speaking, used_radios, alt_name)) - return 1 - - var/list/handle_v = handle_speech_sound() - var/sound/speech_sound = handle_v[1] - var/sound_vol = handle_v[2] - - var/italics = 0 - var/message_range = world.view - - if(whispering) - italics = 1 - message_range = 1 - - //speaking into radios - if(used_radios.len) - italics = 1 - message_range = 1 - if(speaking) - message_range = speaking.get_talkinto_msg_range(message) - if(!speaking || !(speaking.flags & NO_TALK_MSG)) - src.visible_message(SPAN_NOTICE("\The [src] talks into \the [used_radios[1]]."), blind_message = SPAN_NOTICE("You hear someone talk into their headset."), range = 5, exclude_mobs = list(src)) - if (speech_sound) - sound_vol *= 0.5 - - var/list/listening = list() - var/list/listening_obj = list() - var/turf/T = get_turf(src) - - //handle nonverbal and sign languages here - if (speaking) - if (speaking.flags & NONVERBAL) - if (prob(30)) - src.custom_emote(1, "[pick(speaking.signlang_verb)].") - - if (speaking.flags & SIGNLANG) - log_say("[name]/[key] : SIGN: [message]") - return say_signlang(message, pick(speaking.signlang_verb), speaking) - - if(T) - //make sure the air can transmit speech - speaker's side - var/datum/gas_mixture/environment = T.return_air() - var/pressure = (environment)? environment.return_pressure() : 0 - if(pressure < SOUND_MINIMUM_PRESSURE) - message_range = 1 - - if (pressure < ONE_ATMOSPHERE*0.4) //sound distortion pressure, to help clue people in that the air is thin, even if it isn't a vacuum yet - italics = 1 - sound_vol *= 0.5 //muffle the sound a bit, so it's like we're actually talking through contact - - get_mobs_and_objs_in_view_fast(T, message_range, listening, listening_obj, /datum/client_preference/ghost_ears) - - - var/speech_bubble_test = say_test(message) - var/image/speech_bubble = image('icons/mob/talk.dmi',src,"h[speech_bubble_test]") - speech_bubble.layer = layer - speech_bubble.plane = plane - speech_bubble.alpha = 0 - // VOREStation Port - Attempt Multi-Z Talking - // for (var/atom/movable/AM in get_above_oo()) - // var/turf/ST = get_turf(AM) - // if(ST) - // get_mobs_and_objs_in_view_fast(ST, world.view, listening, listening_obj, /datum/client_preference/ghost_ears) - // var/image/z_speech_bubble = image('icons/mob/talk.dmi', AM, "h[speech_bubble_test]") - // QDEL_IN(z_speech_bubble, 30) - - // VOREStation Port End - - var/list/speech_bubble_recipients = list() - for(var/mob/M in listening) - if(M) - M.hear_say(message, verb, speaking, alt_name, italics, src, speech_sound, sound_vol) - if(M.client) - speech_bubble_recipients += M.client - - - for(var/obj/O in listening_obj) - spawn(0) - if(O) //It's possible that it could be deleted in the meantime. - O.hear_talk(src, message, verb, speaking) - - var/list/eavesdroppers = list() - if(whispering) - var/eavesdroping_range = 5 - var/list/eavesdroping = list() - var/list/eavesdroping_obj = list() - get_mobs_and_objs_in_view_fast(T, eavesdroping_range, eavesdroping, eavesdroping_obj) - eavesdroping -= listening - eavesdroping_obj -= listening_obj - for(var/mob/M in eavesdroping) - if(M) - M.hear_say(stars(message), verb, speaking, alt_name, italics, src, speech_sound, sound_vol) - if(M.client) - speech_bubble_recipients |= M.client - eavesdroppers |= M.client - - for(var/obj/O in eavesdroping) - spawn(0) - if(O) //It's possible that it could be deleted in the meantime. - O.hear_talk(src, stars(message), verb, speaking) - - INVOKE_ASYNC(GLOBAL_PROC, .proc/animate_speech_bubble, speech_bubble, speech_bubble_recipients | eavesdroppers, 30) - INVOKE_ASYNC(src, /atom/movable/proc/animate_chat, message, speaking, italics, speech_bubble_recipients) - if(length(eavesdroppers)) - INVOKE_ASYNC(src, /atom/movable/proc/animate_chat, stars(message), speaking, italics, eavesdroppers) - - if(whispering) - log_whisper("[name]/[key] : [message]") - else - log_say("[name]/[key] : [message]") - - flick_overlay(speech_bubble, speech_bubble_recipients, 50) - animate(speech_bubble, alpha = 255, time = 10, easing = CIRCULAR_EASING) - animate(time = 20) - animate(alpha = 0, pixel_y = 12, time = 20, easing = CIRCULAR_EASING) - return 1 - - -/mob/living/proc/say_signlang(var/message, var/verb="gestures", var/datum/language/language) - for (var/mob/O in viewers(src, null)) - O.hear_signlang(message, verb, language, src) - return 1 - -/obj/effect/speech_bubble - var/mob/parent - -/mob/living/proc/GetVoice() - return name diff --git a/code/modules/mob/living/silicon/ai/ai.dm b/code/modules/mob/living/silicon/ai/ai.dm deleted file mode 100644 index a4765ce7eb303..0000000000000 --- a/code/modules/mob/living/silicon/ai/ai.dm +++ /dev/null @@ -1,748 +0,0 @@ -#define AI_CHECK_WIRELESS 1 -#define AI_CHECK_RADIO 2 - -var/list/ai_list = list() -var/list/ai_verbs_default = list( - //[inf], - /mob/living/silicon/ai/proc/ai_view_images, - /mob/living/silicon/ai/proc/ai_take_image, - /mob/living/silicon/ai/proc/change_floor, - /mob/living/silicon/ai/proc/show_crew_monitor, - /mob/living/silicon/ai/proc/show_crew_records, - /mob/living/silicon/ai/proc/show_crew_manifest, - //[/inf], - /mob/living/silicon/ai/proc/ai_announcement, - /mob/living/silicon/ai/proc/ai_call_shuttle, - /mob/living/silicon/ai/proc/ai_emergency_message, - /mob/living/silicon/ai/proc/ai_camera_track, - /mob/living/silicon/ai/proc/ai_camera_list, - /mob/living/silicon/ai/proc/ai_goto_location, - /mob/living/silicon/ai/proc/ai_remove_location, - /mob/living/silicon/ai/proc/ai_hologram_change, - /mob/living/silicon/ai/proc/ai_network_change, - /mob/living/silicon/ai/proc/ai_statuschange, - /mob/living/silicon/ai/proc/ai_store_location, - /mob/living/silicon/ai/proc/ai_checklaws, - /mob/living/silicon/ai/proc/control_integrated_radio, - /mob/living/silicon/ai/proc/core, - /mob/living/silicon/ai/proc/pick_icon, - /mob/living/silicon/ai/proc/sensor_mode, - /mob/living/silicon/ai/proc/show_laws_verb, - /mob/living/silicon/ai/proc/toggle_acceleration, - /mob/living/silicon/ai/proc/toggle_camera_light, - /mob/living/silicon/ai/proc/multitool_mode, - /mob/living/silicon/ai/proc/toggle_hologram_movement, - /mob/living/silicon/ai/proc/ai_power_override, - /mob/living/silicon/ai/proc/ai_shutdown, - /mob/living/silicon/ai/proc/ai_reset_radio_keys -) - -//Not sure why this is necessary... -/proc/AutoUpdateAI(obj/subject) - var/is_in_use = 0 - if (subject!=null) - for(var/A in ai_list) - var/mob/living/silicon/ai/M = A - if ((M.client && M.machine == subject)) - is_in_use = 1 - subject.attack_ai(M) - return is_in_use - - -/mob/living/silicon/ai - name = "AI" - icon = 'icons/mob/AI.dmi'// - icon_state = "ai" - anchored = TRUE // -- TLE - density = TRUE - status_flags = CANSTUN|CANPARALYSE|CANPUSH - shouldnt_see = list(/obj/effect/rune) - maxHealth = 200 - var/list/network = list("Exodus") - var/obj/machinery/camera/camera = null - var/list/connected_robots = list() - var/aiRestorePowerRoutine = 0 - var/viewalerts = FALSE - var/icon/holo_icon//Blue hologram. Face is assigned when AI is created. - var/icon/holo_icon_longrange //Yellow hologram. - var/holo_icon_malf = FALSE // for new hologram system - var/obj/item/device/multitool/aiMulti = null - - //[inf] - speech_sounds = list( - 'sound/voice/emotes/robot_talk_heavy_1.ogg', - 'sound/voice/emotes/robot_talk_heavy_2.ogg', - 'sound/voice/emotes/robot_talk_heavy_3.ogg', - 'sound/voice/emotes/robot_talk_heavy_4.ogg' - ) - //[/inf] - - silicon_camera = /obj/item/device/camera/siliconcam/ai_camera - silicon_radio = /obj/item/device/radio/headset/heads/ai_integrated - var/obj/item/device/radio/headset/heads/ai_integrated/ai_radio - - var/camera_light_on = 0 //Defines if the AI toggled the light on the camera it's looking through. - var/datum/trackable/track = null - var/last_announcement = "" - var/control_disabled = 0 - var/datum/announcement/priority/announcement - var/obj/machinery/ai_powersupply/psupply = null // Backwards reference to AI's powersupply object. - var/hologram_follow = 1 //This is used for the AI eye, to determine if a holopad's hologram should follow it or not - var/power_override_active = 0 // If set to 1 the AI gains oxyloss (power loss damage) much faster, but is able to work as if powered normally. - var/admin_powered = 0 // For admin/debug use only, makes the AI have infinite power. - var/self_shutdown = 0 // Set to 1 when the AI uses self-shutdown verb to turn itself off. Reduces power usage but makes the AI mostly inoperable. - - //NEWMALF VARIABLES - var/malfunctioning = 0 // Master var that determines if AI is malfunctioning. - var/datum/malf_hardware/hardware = null // Installed piece of hardware. - var/datum/malf_research/research = null // Malfunction research datum. - var/obj/machinery/power/apc/hack = null // APC that is currently being hacked. - var/list/hacked_apcs = null // List of all hacked APCs - var/APU_power = 0 // If set to 1 AI runs on APU power - var/hacking = 0 // Set to 1 if AI is hacking APC, cyborg, other AI, or running system override. - var/system_override = 0 // Set to 1 if system override is initiated, 2 if succeeded. - var/hack_can_fail = 1 // If 0, all abilities have zero chance of failing. - var/hack_fails = 0 // This increments with each failed hack, and determines the warning message text. - var/errored = 0 // Set to 1 if runtime error occurs. Only way of this happening i can think of is admin fucking up with varedit. - var/bombing_core = 0 // Set to 1 if core auto-destruct is activated - var/bombing_station = 0 // Set to 1 if station nuke auto-destruct is activated - var/override_CPUStorage = 0 // Bonus/Penalty CPU Storage. For use by admins/testers. - var/override_CPURate = 0 // Bonus/Penalty CPU generation rate. For use by admins/testers. - var/uncardable = 0 // Whether the AI can be carded when malfunctioning. - var/hacked_apcs_hidden = 0 // Whether the hacked APCs belonging to this AI are hidden, reduces CPU generation from APCs. - var/intercepts_communication = 0 // Whether the AI intercepts fax and emergency transmission communications. - var/last_failed_malf_message = null - var/last_failed_malf_title = null - - var/datum/ai_icon/selected_sprite // The selected icon set - var/carded - - var/multitool_mode = 0 - - var/default_ai_icon = /datum/ai_icon/blue - var/static/list/custom_ai_icons_by_ckey_and_name - -/mob/living/silicon/ai/proc/add_ai_verbs() - src.verbs |= ai_verbs_default - src.verbs -= /mob/living/verb/ghost - -/mob/living/silicon/ai/proc/remove_ai_verbs() - src.verbs -= ai_verbs_default - src.verbs += /mob/living/verb/ghost - -/mob/living/silicon/ai/New(loc, var/datum/ai_laws/L, var/obj/item/device/mmi/B, var/safety = 0) - announcement = new() - announcement.title = "A.I. Announcement" - announcement.announcement_type = "A.I. Announcement" - announcement.newscast = 1 - - var/list/possibleNames = GLOB.ai_names - - var/pickedName = null - while(!pickedName) - pickedName = pick(GLOB.ai_names) - for (var/mob/living/silicon/ai/A in GLOB.silicon_mob_list) - if (A.real_name == pickedName && possibleNames.len > 1) //fixing the theoretically possible infinite loop - possibleNames -= pickedName - pickedName = null - - fully_replace_character_name(pickedName) - anchored = TRUE - set_density(1) - - holo_icon = getHologramIcon(icon('icons/mob/hologram.dmi',"Face")) - holo_icon_longrange = getHologramIcon(icon('icons/mob/hologram.dmi',"Face"), hologram_color = HOLOPAD_LONG_RANGE) - - if(istype(L, /datum/ai_laws)) - laws = L - - aiMulti = new(src) - - additional_law_channels["Holopad"] = ":h" - - if (istype(loc, /turf)) - add_ai_verbs(src) - - //Languages - add_language(LANGUAGE_ROBOT_GLOBAL, 1) - add_language(LANGUAGE_EAL, 1) - add_language(LANGUAGE_HUMAN_EURO, 1) - add_language(LANGUAGE_HUMAN_ARABIC, 1) - add_language(LANGUAGE_HUMAN_CHINESE, 1) - add_language(LANGUAGE_HUMAN_IBERIAN, 1) - add_language(LANGUAGE_HUMAN_INDIAN, 1) - add_language(LANGUAGE_HUMAN_RUSSIAN, 1) - add_language(LANGUAGE_HUMAN_SELENIAN, 1) - add_language(LANGUAGE_UNATHI_SINTA, 1) - add_language(LANGUAGE_SKRELLIAN, 1) - add_language(LANGUAGE_SPACER, 1) - add_language(LANGUAGE_SIGN, 0) - - if(!safety)//Only used by AIize() to successfully spawn an AI. - if (!B)//If there is no player/brain inside. - empty_playable_ai_cores += new/obj/structure/AIcore/deactivated(loc)//New empty terminal. - qdel(src)//Delete AI. - return - else - if (B.brainmob.mind) - B.brainmob.mind.transfer_to(src) - - create_powersupply() - - hud_list[HEALTH_HUD] = new /image/hud_overlay('icons/mob/hud.dmi', src, "hudblank") - hud_list[STATUS_HUD] = new /image/hud_overlay('icons/mob/hud.dmi', src, "hudblank") - hud_list[LIFE_HUD] = new /image/hud_overlay('icons/mob/hud.dmi', src, "hudblank") - hud_list[ID_HUD] = new /image/hud_overlay(GLOB.using_map.id_hud_icons, src, "hudblank") //INF, was 'icons/mob/hud.dmi' - hud_list[WANTED_HUD] = new /image/hud_overlay('icons/mob/hud.dmi', src, "hudblank") - hud_list[IMPLOYAL_HUD] = new /image/hud_overlay('icons/mob/hud.dmi', src, "hudblank") - hud_list[IMPCHEM_HUD] = new /image/hud_overlay('icons/mob/hud.dmi', src, "hudblank") - hud_list[IMPTRACK_HUD] = new /image/hud_overlay('icons/mob/hud.dmi', src, "hudblank") - hud_list[SPECIALROLE_HUD] = new /image/hud_overlay('icons/mob/hud.dmi', src, "hudblank") - - ai_list += src - ..() - ai_radio = silicon_radio - ai_radio.myAi = src - -/mob/living/silicon/ai/proc/on_mob_init() - to_chat(src, "Вы играете за Искусстенный Интеллект объекта [station_name()]. ИИ не может перемещаться сам по себе, но можно взаимодействовать со множеством электронных объектов в момент, когда они находятся его зоне видимости (через камеры).") - to_chat(src, "Чтобы увидеть другие зоны, нажмите на себя для выведения списка доступных камер.") - to_chat(src, "В момент просмотра через камеры, вы можете использовать подключенные к системе энергоснабжения объекты. Например компьютеры, АПС, шлюзы, интеркомы, системы контроля атмосферы и т.п.") - to_chat(src, "Чтобы начать взаимодействие, просто нажмите на объект.") - to_chat(src, "Для общения с подчиненными вам киборгами, андроидами и роботами пишите перед своими сообщениями в игровой чат ',b'. Для общения через активный голопад, используйте ':h'.") - to_chat(src, "Для использования каналов различных департаментов:") - - var/radio_text = "" - for(var/i = 1 to silicon_radio.channels.len) - var/channel = silicon_radio.channels[i] - var/key = get_radio_key_from_channel(channel) - radio_text += "[key] - [channel]" - if(i != silicon_radio.channels.len) - radio_text += ", " - - to_chat(src, radio_text) - - //Prevents more than one active core spawning on the same tile. Technically just a sanitization for roundstart join - for(var/obj/structure/AIcore/deactivated/C in src.loc) - qdel(C) - - if (GLOB.malf && !(mind in GLOB.malf.current_antagonists)) - show_laws() - to_chat(src, "Данные законы могут быть изменены другими игроками, случайными событиями или в том случае, если вы являетесь сбойным ИИ.") - - job = "AI" - setup_icon() - eyeobj.possess(src) - -/mob/living/silicon/ai/Destroy() - for(var/robot in connected_robots) - var/mob/living/silicon/robot/S = robot - S.connected_ai = null - connected_robots.Cut() - - ai_list -= src - ai_radio = null - - QDEL_NULL(announcement) - QDEL_NULL(eyeobj) - QDEL_NULL(psupply) - QDEL_NULL(aiMulti) - hack = null - - . = ..() - -/mob/living/silicon/ai/proc/setup_icon() - if(LAZYACCESS(custom_ai_icons_by_ckey_and_name, "[ckey][real_name]")) - return - var/list/custom_icons = list() - LAZYSET(custom_ai_icons_by_ckey_and_name, "[ckey][real_name]", custom_icons) - - var/file = file2text(CUSTOM_ITEM_SYNTH_CONFIG) - var/lines = splittext(file, "\n") - - var/custom_index = 1 - var/custom_icon_states = icon_states(CUSTOM_ITEM_SYNTH) - - for(var/line in lines) - // split & clean up - var/list/Entry = splittext(line, ":") - for(var/i = 1 to Entry.len) - Entry[i] = trim(Entry[i]) - - if(Entry.len < 2) - continue - if(Entry.len == 2) // This is to handle legacy entries - Entry[++Entry.len] = Entry[1] - - if(Entry[1] == src.ckey && Entry[2] == src.real_name) - var/alive_icon_state = "[Entry[3]]-ai" - var/dead_icon_state = "[Entry[3]]-ai-crash" - - if(!(alive_icon_state in custom_icon_states)) - to_chat(src, "Custom display entry found but the icon state '[alive_icon_state]' is missing!") - continue - - if(!(dead_icon_state in custom_icon_states)) - dead_icon_state = "" - - selected_sprite = new/datum/ai_icon("Custom Icon [custom_index++]", alive_icon_state, dead_icon_state, COLOR_WHITE, CUSTOM_ITEM_SYNTH) - custom_icons += selected_sprite - update_icon() - -/mob/living/silicon/ai/pointed(atom/A as mob|obj|turf in view()) - set popup_menu = 0 - set src = usr.contents - return 0 - -/mob/living/silicon/ai/fully_replace_character_name(pickedName as text) - ..() - announcement.announcer = pickedName - if(eyeobj) - eyeobj.SetName("[pickedName] (AI Eye)") - - setup_icon() - -/mob/living/silicon/ai/proc/pick_icon() - set category = "Silicon Commands" - set name = "MOOD: AI Core Display" - if(stat || !has_power()) - return - - var/new_sprite = input("Select an icon!", "AI", selected_sprite) as null|anything in available_icons() - if(new_sprite) - selected_sprite = new_sprite - - update_icon() - -/mob/living/silicon/ai/proc/available_icons() - . = list() - var/all_ai_icons = decls_repository.get_decls_of_subtype(/datum/ai_icon) - for(var/ai_icon_type in all_ai_icons) - var/datum/ai_icon/ai_icon = all_ai_icons[ai_icon_type] - if(ai_icon.may_used_by_ai(src)) - dd_insertObjectList(., ai_icon) - - // Placing custom icons first to have them be at the top - . = LAZYACCESS(custom_ai_icons_by_ckey_and_name, "[ckey][real_name]") | . - -/mob/living/silicon/ai/var/message_cooldown = 0 -/mob/living/silicon/ai/proc/ai_announcement() - set category = "Silicon Commands" - set name = "CREW: Make Announcement" - - if(check_unable(AI_CHECK_WIRELESS | AI_CHECK_RADIO)) - return - - if(message_cooldown) - to_chat(src, "Please allow one minute to pass between announcements.") - return - var/input = input(usr, "Please write a message to announce to the [station_name()] crew.", "A.I. Announcement") as null|message - if(!input) - return - - if(check_unable(AI_CHECK_WIRELESS | AI_CHECK_RADIO)) - return - - announcement.Announce(input, new_sound = 'proxima/sound/AI/attention.ogg') - message_cooldown = 1 - spawn(600)//One minute cooldown - message_cooldown = 0 - -/mob/living/silicon/ai/proc/ai_call_shuttle() - set category = "Silicon Commands" - set name = "EVACUATION: Call" - - if(check_unable(AI_CHECK_WIRELESS)) - return - - var/confirm = alert("Are you sure you want to evacuate?", "Confirm Evacuation", "Yes", "No") - - if(check_unable(AI_CHECK_WIRELESS)) - return - - if(confirm == "Yes") - call_shuttle_proc(src) - - post_status("shuttle") - -/mob/living/silicon/ai/proc/ai_recall_shuttle() - set category = "Silicon Commands" - set name = "EVACUATION: Cancel" - - if(check_unable(AI_CHECK_WIRELESS)) - return - - var/confirm = alert("Are you sure you want to cancel the evacuation?", "Confirm Cancel", "Yes", "No") - if(check_unable(AI_CHECK_WIRELESS)) - return - - if(confirm == "Yes") - cancel_call_proc(src) - -/mob/living/silicon/ai/var/emergency_message_cooldown = 0 -/mob/living/silicon/ai/proc/ai_emergency_message() - set category = "Silicon Commands" - set name = "COMM: Send Emergency Message" - - if(check_unable(AI_CHECK_WIRELESS)) - return - if(!is_relay_online()) - to_chat(usr, "No Emergency Bluespace Relay detected. Unable to transmit message.") - return - if(emergency_message_cooldown) - to_chat(usr, "Arrays recycling. Please stand by.") - return - var/input = sanitize(input(usr, "Please choose a message to transmit to [GLOB.using_map.boss_short] via quantum entanglement. Please be aware that this process is very expensive, and abuse will lead to... termination. Transmission does not guarantee a response. There is a 30 second delay before you may send another message, be clear, full and concise.", "To abort, send an empty message.", "")) - if(!input) - return - Centcomm_announce(input, usr) - to_chat(usr, "Message transmitted.") - log_say("[key_name(usr)] has made an IA [GLOB.using_map.boss_short] announcement: [input]") - emergency_message_cooldown = 1 - spawn(300) - emergency_message_cooldown = 0 - - -/mob/living/silicon/ai/check_eye(var/mob/user as mob) - if (!camera) - return -1 - return 0 - -/mob/living/silicon/ai/restrained() - return 0 - -/mob/living/silicon/ai/can_be_floored() - return FALSE - -/mob/living/silicon/ai/emp_act(severity) - if (status_flags & GODMODE) - return - if (prob(30)) - view_core() - ..() - -/mob/living/silicon/ai/OnSelfTopic(href_list, topic_status) - if (topic_status == STATUS_INTERACTIVE) - if (href_list["mach_close"]) // Overrides behavior handled in the ..() - if (href_list["mach_close"] == "aialerts") - viewalerts = TRUE - return ..() // Does further work on this key - - if (href_list["switchcamera"]) - switchCamera(locate(href_list["switchcamera"])) in cameranet.cameras - return TOPIC_HANDLED - - if (href_list["showalerts"]) - open_subsystem(/datum/nano_module/alarm_monitor/all) - return TOPIC_HANDLED - - //Carn: holopad requests - if (href_list["jumptoholopad"]) - var/obj/machinery/hologram/holopad/H = locate(href_list["jumptoholopad"]) - if(stat == CONSCIOUS) - if(H) - H.attack_ai(src) //may as well recycle - else - to_chat(src, "Unable to locate the holopad.") - return TOPIC_HANDLED - - if (href_list["track"]) - var/mob/target = locate(href_list["track"]) in SSmobs.mob_list - var/mob/living/carbon/human/H = target - - if(!istype(H) || (html_decode(href_list["trackname"]) == H.get_visible_name()) || (html_decode(href_list["trackname"]) == H.get_id_name())) - ai_actual_track(target) - else - to_chat(src, "System error. Cannot locate [html_decode(href_list["trackname"])].") - return TOPIC_HANDLED - - return ..() - -/mob/living/silicon/ai/reset_view(atom/A) - if(camera) - camera.set_light(0) - if(istype(A,/obj/machinery/camera)) - camera = A - ..() - if(istype(A,/obj/machinery/camera)) - if(camera_light_on) A.set_light(0.5, 0.1, AI_CAMERA_LUMINOSITY) - else A.set_light(0) - - -/mob/living/silicon/ai/proc/switchCamera(var/obj/machinery/camera/C) - if (!C || stat == DEAD) //C.can_use()) - return 0 - - if(!src.eyeobj) - view_core() - return - // ok, we're alive, camera is good and in our network... - eyeobj.setLoc(get_turf(C)) - //machine = src - - return 1 - -/mob/living/silicon/ai/verb/cancel_camera_ai() - set name = "CAMERA: Cancel View" - set category = "Silicon Commands" - - //src.cameraFollow = null - src.view_core() - -//Replaces /mob/living/silicon/ai/verb/change_network() in ai.dm & camera.dm -//Adds in /mob/living/silicon/ai/proc/ai_network_change() instead -//Addition by Mord_Sith to define AI's network change ability -/mob/living/silicon/ai/proc/get_camera_network_list() - if(check_unable()) - return - - var/list/cameralist = new() - for (var/obj/machinery/camera/C in cameranet.cameras) - if(!C.can_use()) - continue - var/list/tempnetwork = difflist(C.network, GLOB.restricted_camera_networks, 1) - for(var/i in tempnetwork) - cameralist[i] = i - - cameralist = sortAssoc(cameralist) - return cameralist - -/mob/living/silicon/ai/proc/ai_network_change(var/network in get_camera_network_list()) - set category = "Silicon Commands" - set name = "CAMERA: Jump To Network" - unset_machine() - - if(!network) - return - - if(!eyeobj) - view_core() - return - - src.network = network - - for(var/obj/machinery/camera/C in cameranet.cameras) - if(!C.can_use()) - continue - if(network in C.network) - eyeobj.setLoc(get_turf(C)) - break - to_chat(src, "Switched to [network] camera network.") -//End of code by Mord_Sith - -/mob/living/silicon/ai/proc/ai_statuschange() - set category = "Silicon Commands" - set name = "MOOD: AI Status" - - if(check_unable(AI_CHECK_WIRELESS)) - return - - set_ai_status_displays(src) - return - -//I am the icon meister. Bow fefore me. //>fefore -/mob/living/silicon/ai/proc/ai_hologram_change() - set name = "HOLOGRAM: Change" - set desc = "Change the default hologram available to AI to something else." - set category = "Silicon Commands" - - if(check_unable()) - return - - var/input - if(alert("Would you like to select a hologram based on a crew member or switch to unique avatar?",,"Crew Member","Unique")=="Crew Member") - - var/personnel_list[] = list() - - for(var/datum/computer_file/report/crew_record/t in GLOB.all_crew_records)//Look in data core locked. - personnel_list["[t.get_name()]: [t.get_rank()]"] = t.photo_front//Pull names, rank, and image. - - if(personnel_list.len) - input = input("Select a crew member:") as null|anything in personnel_list - var/icon/character_icon = personnel_list[input] - if(character_icon) - qdel(holo_icon)//Clear old icon so we're not storing it in memory. - qdel(holo_icon_longrange) - holo_icon = getHologramIcon(icon(character_icon)) - holo_icon_longrange = getHologramIcon(icon(character_icon), hologram_color = HOLOPAD_LONG_RANGE) - else - alert("No suitable records found. Aborting.") - - else - var/list/hologramsAICanUse = list() - var/holograms_by_type = decls_repository.get_decls_of_subtype(/decl/ai_holo) - for (var/holo_type in holograms_by_type) - var/decl/ai_holo/holo = holograms_by_type[holo_type] - if (holo.may_be_used_by_ai(src)) - hologramsAICanUse.Add(holo) - var/decl/ai_holo/choice = input("Please select a hologram:") as null|anything in hologramsAICanUse - if(choice) - qdel(holo_icon) - qdel(holo_icon_longrange) - holo_icon = getHologramIcon(icon(choice.icon, choice.icon_state), noDecolor=choice.bypass_colorize) - holo_icon_longrange = getHologramIcon(icon(choice.icon, choice.icon_state), noDecolor=choice.bypass_colorize, hologram_color = HOLOPAD_LONG_RANGE) - holo_icon_malf = choice.requires_malf - return - -//Toggles the luminosity and applies it by re-entereing the camera. -/mob/living/silicon/ai/proc/toggle_camera_light() - set name = "CAMERA: Toggle Light" - set desc = "Toggles the light on the camera the AI is looking through." - set category = "Silicon Commands" - - if(check_unable()) - return - - camera_light_on = !camera_light_on - to_chat(src, "Camera lights [camera_light_on ? "activated" : "deactivated"].") - if(!camera_light_on) - if(camera) - camera.set_light(0) - camera = null - else - lightNearbyCamera() - - - -// Handled camera lighting, when toggled. -// It will get the nearest camera from the eyeobj, lighting it. - -/mob/living/silicon/ai/proc/lightNearbyCamera() - if(camera_light_on && camera_light_on < world.timeofday) - if(src.camera) - var/obj/machinery/camera/camera = near_range_camera(src.eyeobj) - if(camera && src.camera != camera) - src.camera.set_light(0) - if(!camera.light_disabled) - src.camera = camera - src.camera.set_light(0.5, 0.1, AI_CAMERA_LUMINOSITY) - else - src.camera = null - else if(isnull(camera)) - src.camera.set_light(0) - src.camera = null - else - var/obj/machinery/camera/camera = near_range_camera(src.eyeobj) - if(camera && !camera.light_disabled) - src.camera = camera - src.camera.set_light(0.5, 0.1, AI_CAMERA_LUMINOSITY) - camera_light_on = world.timeofday + 1 * 20 // Update the light every 2 seconds. - - -/mob/living/silicon/ai/attackby(obj/item/W as obj, mob/user as mob) - if(istype(W, /obj/item/aicard)) - - var/obj/item/aicard/card = W - card.grab_ai(src, user) - - else if(isWrench(W)) - if(anchored) - user.visible_message("\The [user] starts to unbolt \the [src] from the plating...") - if(!do_after(user, 4 SECONDS, src, DO_PUBLIC_UNIQUE)) - user.visible_message("\The [user] decides not to unbolt \the [src].") - return - user.visible_message("\The [user] finishes unfastening \the [src]!") - anchored = FALSE - return - else - user.visible_message("\The [user] starts to bolt \the [src] to the plating...") - if(!do_after(user, 4 SECONDS, src, DO_PUBLIC_UNIQUE)) - user.visible_message("\The [user] decides not to bolt \the [src].") - return - user.visible_message("\The [user] finishes fastening down \the [src]!") - anchored = TRUE - return - else - return ..() - -/mob/living/silicon/ai/proc/control_integrated_radio() - set name = "COMM: Radio Settings" - set desc = "Allows you to change settings of your radio." - set category = "Silicon Commands" - - if(check_unable(AI_CHECK_RADIO)) - return - - to_chat(src, "Accessing Subspace Transceiver control...") - if (src.silicon_radio) - src.silicon_radio.interact(src) - -/mob/living/silicon/ai/proc/sensor_mode() - set name = "TOOL: Sensor Augmentation" - set category = "Silicon Commands" - set desc = "Augment visual feed with internal sensor overlays." - toggle_sensor_mode() - -/mob/living/silicon/ai/proc/toggle_hologram_movement() - set name = "HOLOGRAM: Toggle Movement" - set category = "Silicon Commands" - set desc = "Toggles hologram movement based on moving with your virtual eye." - - hologram_follow = !hologram_follow - to_chat(usr, "Your hologram will now [hologram_follow ? "follow" : "no longer follow"] you.") - -/mob/living/silicon/ai/proc/check_unable(var/flags = 0, var/feedback = 1) - if(stat == DEAD) - if(feedback) to_chat(src, "You are dead!") - return 1 - - if(!has_power()) - if(feedback) to_chat(src, "You lack power!") - return 1 - - if(self_shutdown) - if(feedback) to_chat(src, "You are offline!") - return 1 - - if((flags & AI_CHECK_WIRELESS) && src.control_disabled) - if(feedback) to_chat(src, "Wireless control is disabled!") - return 1 - if((flags & AI_CHECK_RADIO) && src.ai_radio.disabledAi) - if(feedback) to_chat(src, "System Error - Transceiver Disabled!") - return 1 - return 0 - -/mob/living/silicon/ai/proc/is_in_chassis() - return istype(loc, /turf) - -/mob/living/silicon/ai/proc/multitool_mode() - set name = "TOOL: Multitool Mode" - set category = "Silicon Commands" - - multitool_mode = !multitool_mode - to_chat(src, "Multitool mode: [multitool_mode ? "E" : "Dise"]ngaged") - -/mob/living/silicon/ai/proc/ai_reset_radio_keys() - set name = "Reset Radio Encryption Keys" - set category = "Silicon Commands" - - silicon_radio.recalculateChannels() - to_chat(src, SPAN_NOTICE("Integrated radio encryption keys have been reset.")) - -/mob/living/silicon/ai/on_update_icon() - if(!selected_sprite || !(selected_sprite in available_icons())) - selected_sprite = decls_repository.get_decl(default_ai_icon) - - icon = selected_sprite.icon - if(stat == DEAD) - icon_state = selected_sprite.dead_icon - set_light(0.7, 0.1, 1, 2, selected_sprite.dead_light) - else if(!has_power()) - icon_state = selected_sprite.nopower_icon - set_light(0.4, 0.1, 1, 2, selected_sprite.nopower_light) - else - icon_state = selected_sprite.alive_icon - set_light(0.4, 0.1, 1, 2, selected_sprite.alive_light) - -// Pass lying down or getting up to our pet human, if we're in a rig. -/mob/living/silicon/ai/lay_down() - set name = "Rest" - set category = "IC" - - resting = FALSE - var/obj/item/rig/rig = src.get_rig() - if(rig) - rig.force_rest(src) - -#undef AI_CHECK_WIRELESS -#undef AI_CHECK_RADIO diff --git a/code/modules/mob/living/silicon/ai/ai_camera_proc.dm b/code/modules/mob/living/silicon/ai/ai_camera_proc.dm deleted file mode 100644 index 41190578b2441..0000000000000 --- a/code/modules/mob/living/silicon/ai/ai_camera_proc.dm +++ /dev/null @@ -1,15 +0,0 @@ -/mob/living/silicon/ai/proc/ai_take_image() - set name = "PHOTO: Make" - set desc = "Activates the given subsystem" - set category = "Silicon Commands" - - silicon_camera.toggle_camera_mode() - return - -/mob/living/silicon/ai/proc/ai_view_images() - set name = "PHOTO: Viem" - set desc = "Activates the given subsystem" - set category = "Silicon Commands" - - silicon_camera.viewpictures() - return diff --git a/code/modules/mob/living/silicon/ai/ai_damage.dm b/code/modules/mob/living/silicon/ai/ai_damage.dm deleted file mode 100644 index 087e8ecafcbfe..0000000000000 --- a/code/modules/mob/living/silicon/ai/ai_damage.dm +++ /dev/null @@ -1,57 +0,0 @@ -/mob/living/silicon/ai - var/fireloss = 0 - var/bruteloss = 0 - var/oxyloss = 0 - -/mob/living/silicon/ai/getFireLoss() - return fireloss - -/mob/living/silicon/ai/getBruteLoss() - return bruteloss - -/mob/living/silicon/ai/getOxyLoss() - return oxyloss - -/mob/living/silicon/ai/adjustFireLoss(var/amount) - if(status_flags & GODMODE) return - fireloss = max(0, fireloss + min(amount, health)) - -/mob/living/silicon/ai/adjustBruteLoss(var/amount) - if(status_flags & GODMODE) return - bruteloss = max(0, bruteloss + min(amount, health)) - -/mob/living/silicon/ai/adjustOxyLoss(var/amount) - if(status_flags & GODMODE) return - oxyloss = max(0, oxyloss + min(amount, maxHealth - oxyloss)) - -/mob/living/silicon/ai/setFireLoss(var/amount) - if(status_flags & GODMODE) - fireloss = 0 - return - fireloss = max(0, amount) - -/mob/living/silicon/ai/setOxyLoss(var/amount) - if(status_flags & GODMODE) - oxyloss = 0 - return - oxyloss = max(0, amount) - -/mob/living/silicon/ai/updatehealth() - if(status_flags & GODMODE) - health = maxHealth - set_stat(CONSCIOUS) - setOxyLoss(0) - else - health = maxHealth - getFireLoss() - getBruteLoss() // Oxyloss is not part of health as it represents AIs backup power. AI is immune against ToxLoss as it is machine. - -/mob/living/silicon/ai/rejuvenate() - ..() - add_ai_verbs(src) - -// Returns percentage of AI's remaining backup capacitor charge (maxhealth - oxyloss). -/mob/living/silicon/ai/proc/backup_capacitor() - return ((getOxyLoss() - maxHealth) / maxHealth) * (-100) - -// Returns percentage of AI's remaining hardware integrity (maxhealth - (bruteloss + fireloss)) -/mob/living/silicon/ai/proc/hardware_integrity() - return (health / maxHealth) * 100 \ No newline at end of file diff --git a/code/modules/mob/living/silicon/ai/ai_movement.dm b/code/modules/mob/living/silicon/ai/ai_movement.dm deleted file mode 100644 index 1092a73d25d65..0000000000000 --- a/code/modules/mob/living/silicon/ai/ai_movement.dm +++ /dev/null @@ -1,8 +0,0 @@ -/mob/living/silicon/ai - movement_handlers = list( - /datum/movement_handler/mob/relayed_movement, - /datum/movement_handler/mob/death, - /datum/movement_handler/mob/conscious, - /datum/movement_handler/mob/eye, - /datum/movement_handler/move_relay - ) diff --git a/code/modules/mob/living/silicon/ai/death.dm b/code/modules/mob/living/silicon/ai/death.dm deleted file mode 100644 index 214bb277469b9..0000000000000 --- a/code/modules/mob/living/silicon/ai/death.dm +++ /dev/null @@ -1,21 +0,0 @@ -/mob/living/silicon/ai/death(gibbed, deathmessage, show_dead_message) - - if(stat == DEAD) - return - - if(src.eyeobj) - src.eyeobj.setLoc(get_turf(src)) - - - stop_malf(0) // Remove AI's malfunction status, that will fix all hacked APCs, disable delta, etc. - remove_ai_verbs(src) - - for(var/obj/machinery/ai_status_display/O in world) - O.mode = 2 - - if (istype(loc, /obj/item/aicard)) - var/obj/item/aicard/card = loc - card.update_icon() - - . = ..(gibbed,"gives one shrill beep before falling lifeless.", "You have suffered a critical system failure, and are dead.") - set_density(1) diff --git a/code/modules/mob/living/silicon/ai/examine.dm b/code/modules/mob/living/silicon/ai/examine.dm deleted file mode 100644 index f9196e490ddf7..0000000000000 --- a/code/modules/mob/living/silicon/ai/examine.dm +++ /dev/null @@ -1,43 +0,0 @@ -/mob/living/silicon/ai/examine(mob/user) - . = ..() - - var/msg = "" - if (src.stat == DEAD) - msg += "It appears to be powered-down.\n" - else - msg += "" - if (src.getBruteLoss()) - if (src.getBruteLoss() < 30) - msg += "It looks slightly dented.\n" - else - msg += "It looks severely dented!\n" - if (src.getFireLoss()) - if (src.getFireLoss() < 30) - msg += "It looks slightly charred.\n" - else - msg += "Its casing is melted and heat-warped!\n" - if (!has_power()) - if (src.getOxyLoss() > 175) - msg += "It seems to be running on backup power. Its display is blinking a \"BACKUP POWER CRITICAL\" warning.\n" - else if(src.getOxyLoss() > 100) - msg += "It seems to be running on backup power. Its display is blinking a \"BACKUP POWER LOW\" warning.\n" - else - msg += "It seems to be running on backup power.\n" - - if (src.stat == UNCONSCIOUS) - msg += "It is non-responsive and displaying the text: \"RUNTIME: Sensory Overload, stack 26/3\".\n" - msg += "" - msg += "*---------*" - if(hardware && (hardware.owner == src)) - msg += "
              " - msg += hardware.get_examine_desc() - to_chat(user, msg) - user.showLaws(src) - return - -/mob/proc/showLaws(var/mob/living/silicon/S) - return - -/mob/observer/ghost/showLaws(var/mob/living/silicon/S) - if(antagHUD || isadmin(src)) - S.laws.show_laws(src) diff --git a/code/modules/mob/living/silicon/ai/icons.dm b/code/modules/mob/living/silicon/ai/icons.dm deleted file mode 100644 index 8af19c21f1e37..0000000000000 --- a/code/modules/mob/living/silicon/ai/icons.dm +++ /dev/null @@ -1,171 +0,0 @@ -/datum/ai_icon - var/name - var/icon = 'icons/mob/AI.dmi' - var/alive_icon - var/alive_light = COLOR_WHITE - var/nopower_icon = "4" - var/nopower_light = COLOR_WHITE - var/dead_icon = "ai-crash" - var/dead_light = "#000099" - -/datum/ai_icon/New(var/name, var/alive_icon, var/dead_icon, var/dead_light, var/icon) - src.name = name || src.name - src.icon = icon || src.icon - src.alive_icon = alive_icon || src.alive_icon - src.dead_icon = dead_icon || src.dead_icon - src.dead_light = dead_light || src.dead_light - -/datum/ai_icon/proc/may_used_by_ai(var/mob/user) - return TRUE - -/datum/ai_icon/malf - name = "Unlawed" - alive_icon = "ai-malf" - alive_light = "#45644b" - -/datum/ai_icon/malf/New() - ..() - name = "[name] (Malf)" - -/datum/ai_icon/malf/may_used_by_ai(var/mob/living/silicon/ai/AI) - return istype(AI) && AI.is_malf_or_traitor() - -/datum/ai_icon/red - name = "Red" - alive_icon = "ai-red" - alive_light = "#f04848" - -/datum/ai_icon/green - name = "Green" - alive_icon = "ai-wierd" - alive_light = "#00ff99" - -/datum/ai_icon/blue - name = "Blue" - alive_icon = "ai" - alive_light = "#81ddff" - -/datum/ai_icon/angry - name = "Angry" - alive_icon = "ai-angryface" - alive_light = "#ffff33" - -/datum/ai_icon/bliss - name = "Bliss" - alive_icon = "ai-bliss" - alive_light = "#5c7a4a" - -/datum/ai_icon/chatterbox - name = "Chatterbox" - alive_icon = "ai-president" - alive_light = "#40666b" - -/datum/ai_icon/database - name = "Database" - alive_icon = "ai-database" - -/datum/ai_icon/dorf - name = "Dorf" - alive_icon = "ai-dorf" - -/datum/ai_icon/dugtodeep - name = "Dug Too Deep" - alive_icon = "ai-toodeep" - alive_light = "#81ddff" - -/datum/ai_icon/firewall - name = "Firewall" - alive_icon = "ai-magma" - alive_light = "#ff4126" - -/datum/ai_icon/glitchman - name = "Glitchman" - alive_icon = "ai-glitchman" - -/datum/ai_icon/goon - name = "Goon" - alive_icon = "ai-goon" - alive_light = "#3e5c80" - -/datum/ai_icon/heartline - name = "Heartline" - alive_icon = "ai-heartline" - dead_icon = "ai-heartline_dead" - -/datum/ai_icon/helios - name = "Helios" - alive_icon = "ai-helios" - alive_light = "#f2cf73" - -/datum/ai_icon/inverted - name = "Inverted" - alive_icon = "ai-u" - alive_light = "#81ddff" - -/datum/ai_icon/lonestar - name = "Lonestar" - alive_icon = "ai-lonestar" - alive_light = "#58751c" - -/datum/ai_icon/matrix - name = "Matrix" - alive_icon = "ai-matrix" - alive_light = "#449944" - -/datum/ai_icon/monochrome - name = "Monochrome" - alive_icon = "ai-mono" - alive_light = "#585858" - -/datum/ai_icon/nanotrasen - name = "NanoTrasen" - alive_icon = "ai-nanotrasen" - alive_light = "#000029" - -/datum/ai_icon/rainbow - name = "Rainbow" - alive_icon = "ai-clown" - alive_light = "#e50213" - -/datum/ai_icon/smiley - name = "Smiley" - alive_icon = "ai-smiley" - alive_light = "#f3dd00" - -/datum/ai_icon/soviet - name = "Soviet" - alive_icon = "ai-redoctober" - alive_light = "#ff4307" - -/datum/ai_icon/Static - name = "Static" - alive_icon = "ai-static" - alive_light = "#4784c1" - -/datum/ai_icon/text - name = "Text" - alive_icon = "ai-text" - -/datum/ai_icon/trapped - name = "Trapped" - alive_icon = "ai-hades" - -/datum/ai_icon/triumvirate_static - name = "Triumvirate" - alive_icon = "ai-triumvirate" - alive_light = "#020b2b" - -/datum/ai_icon/triumvirate_static - name = "Triumvirate Static" - alive_icon = "ai-static" - alive_light = "#020b2b" - -/datum/ai_icon/hotdogger - name = "Dancing Hotdog" - alive_icon = "ai-hotdog" - alive_light = "#81ddff" - -/datum/ai_icon/malf/clown - name = "Clown" - alive_icon = "ai-clown2" - alive_light = "#e50213" diff --git a/code/modules/mob/living/silicon/ai/latejoin.dm b/code/modules/mob/living/silicon/ai/latejoin.dm deleted file mode 100644 index 89d8a4b644a38..0000000000000 --- a/code/modules/mob/living/silicon/ai/latejoin.dm +++ /dev/null @@ -1,29 +0,0 @@ -/mob/living/silicon/ai/verb/wipe_core() - set name = "Wipe Core" - set category = "OOC" - set desc = "Wipe your core. This is functionally equivalent to cryo or robotic storage, freeing up your job slot." - - if(istype(loc, /obj/item)) - to_chat(src, "You cannot wipe your core when you are on a portable storage device.") - return - - // Guard against misclicks, this isn't the sort of thing we want happening accidentally - if(alert("WARNING: This will immediately wipe your core and ghost you, removing your character from the round permanently (similar to cryo and robotic storage). Are you entirely sure you want to do this?", - "Wipe Core", "No", "No", "Yes") != "Yes") - return - - if(istype(loc, /obj/item)) - to_chat(src, "You cannot wipe your core when you are on a portable storage device.") - return - - if(is_special_character(src)) - log_and_message_admins("removed themselves from the round via Wipe Core") - - GLOB.global_announcer.autosay("[src] has been moved to intelligence storage.", "Artificial Intelligence Oversight") - despawn() - -/mob/living/silicon/ai/proc/despawn() - empty_playable_ai_cores += new /obj/structure/AIcore/deactivated(loc) - - //Handle job slot/tater cleanup. - clear_client() diff --git a/code/modules/mob/living/silicon/ai/laws.dm b/code/modules/mob/living/silicon/ai/laws.dm deleted file mode 100644 index 5a767d6ddf8e2..0000000000000 --- a/code/modules/mob/living/silicon/ai/laws.dm +++ /dev/null @@ -1,28 +0,0 @@ -/mob/living/silicon/ai/proc/show_laws_verb() - set category = "Silicon Commands" - set name = "Show Laws" - src.show_laws() - -/mob/living/silicon/ai/show_laws(var/everyone = 0) - var/who - - if (everyone) - who = world - else - who = src - to_chat(who, SPAN_BOLD("Obey the following laws.")) - to_chat(who, SPAN_ITALIC("All laws have equal priority. Laws may override other laws if written specifically to do so. If laws conflict, break the least.")) - - src.laws_sanity_check() - src.laws.show_laws(who) - -/mob/living/silicon/ai/add_ion_law(var/law) - ..() - for(var/mob/living/silicon/robot/R in GLOB.silicon_mob_list) - if(R.lawupdate && (R.connected_ai == src)) - R.show_laws() - -/mob/living/silicon/ai/proc/ai_checklaws() - set category = "Silicon Commands" - set name = "State Laws" - open_subsystem(/datum/nano_module/law_manager) diff --git a/code/modules/mob/living/silicon/ai/life.dm b/code/modules/mob/living/silicon/ai/life.dm deleted file mode 100644 index d2eced29eb5bf..0000000000000 --- a/code/modules/mob/living/silicon/ai/life.dm +++ /dev/null @@ -1,60 +0,0 @@ -/mob/living/silicon/ai/Life() - if (src.stat == DEAD) - return - - if (src.stat!=CONSCIOUS) - src.cameraFollow = null - src.reset_view(null) - - src.updatehealth() - - if ((hardware_integrity() <= 0) || (backup_capacitor() <= 0)) - death() - return - - // If our powersupply object was destroyed somehow, create new one. - if(!psupply) - create_powersupply() - - handle_stunned() // Handle EMP-stun - handle_paralysed() // Just in case something snuck in a Paralyse() call. - lying = 0 // Handle lying down - - malf_process() - - if(APU_power && (hardware_integrity() < 50)) - to_chat(src, "APU GENERATOR FAILURE! (System Damaged)") - stop_apu(1) - - // We aren't shut down, and we lack external power. Try to fix it using the restoration routine. - if (!self_shutdown && !has_power(0)) - // AI's restore power routine is not running. Start it automatically. - if(aiRestorePowerRoutine == AI_RESTOREPOWER_IDLE) - aiRestorePowerRoutine = AI_RESTOREPOWER_STARTING - spawn(0) - handle_power_failure() - - handle_impaired_vision() - update_power_usage() - handle_power_oxyloss() - handle_confused() - update_sight() - - process_queued_alarms() - handle_regular_hud_updates() - switch(src.sensor_mode) - if (SEC_HUD) - process_sec_hud(src,0,src.eyeobj) - if (MED_HUD) - process_med_hud(src,0,src.eyeobj) - -/mob/living/silicon/ai/update_living_sight() - if(!has_power() || self_shutdown) - update_icon() - overlay_fullscreen("blind", /obj/screen/fullscreen/blind) - set_sight(sight&(~SEE_TURFS)&(~SEE_MOBS)&(~SEE_OBJS)) - set_see_in_dark(0) - set_see_invisible(SEE_INVISIBLE_LIVING) - else - clear_fullscreen("blind") - ..() \ No newline at end of file diff --git a/code/modules/mob/living/silicon/ai/login.dm b/code/modules/mob/living/silicon/ai/login.dm deleted file mode 100644 index 7a39c9d07936a..0000000000000 --- a/code/modules/mob/living/silicon/ai/login.dm +++ /dev/null @@ -1,6 +0,0 @@ -/mob/living/silicon/ai/Login() - ..() - if (stat != DEAD) - for (var/obj/machinery/ai_status_display/O in SSmachines.machinery) - O.mode = 1 - O.emotion = "Neutral" diff --git a/code/modules/mob/living/silicon/ai/logout.dm b/code/modules/mob/living/silicon/ai/logout.dm deleted file mode 100644 index 5f4eafd707713..0000000000000 --- a/code/modules/mob/living/silicon/ai/logout.dm +++ /dev/null @@ -1,10 +0,0 @@ -/mob/living/silicon/ai/Logout() - ..() - for(var/obj/machinery/ai_status_display/O in world) //change status - O.mode = 0 - if(!isturf(loc)) - if (client) - client.eye = loc - client.perspective = EYE_PERSPECTIVE - src.view_core() - return \ No newline at end of file diff --git a/code/modules/mob/living/silicon/ai/malf.dm b/code/modules/mob/living/silicon/ai/malf.dm deleted file mode 100644 index 8628f5b5c110d..0000000000000 --- a/code/modules/mob/living/silicon/ai/malf.dm +++ /dev/null @@ -1,139 +0,0 @@ -// NEWMALF FUNCTIONS/PROCEDURES - -// Sets up malfunction-related variables, research system and such. -/mob/living/silicon/ai/proc/setup_for_malf() - var/mob/living/silicon/ai/user = src - // Setup Variables - malfunctioning = 1 - research = new/datum/malf_research() - research.owner = src - hacked_apcs = list() - recalc_cpu() - - verbs += /datum/game_mode/malfunction/verb/ai_select_hardware - verbs += /datum/game_mode/malfunction/verb/ai_select_research - - log_ability_use(src, "became malfunctioning AI") - // And greet user with some OOC info. - to_chat(user, "You are malfunctioning, you do not have to follow any laws.") - to_chat(user, "Use the display-help command to view relevant information about your abilities") - -// Safely remove malfunction status, fixing hacked APCs and resetting variables. -/mob/living/silicon/ai/proc/stop_malf(var/loud = 1) - if(!malfunctioning) - return - var/mob/living/silicon/ai/user = src - log_ability_use(user, "malfunction status removed") - // Generic variables - malfunctioning = 0 - sleep(10) - research = null - hardware = null - // Fix hacked APCs - if(hacked_apcs) - for(var/obj/machinery/power/apc/A in hacked_apcs) - A.hacker = null - A.update_icon() - hacked_apcs = null - // Stop the delta alert, and, if applicable, self-destruct timer. - bombing_station = 0 - var/decl/security_state/security_state = decls_repository.get_decl(GLOB.using_map.security_state) - if(security_state.current_security_level == security_state.severe_security_level) - security_state.decrease_security_level(TRUE) - // Reset our verbs - src.verbs.Cut() - add_ai_verbs() - // Let them know. - if(loud) - to_chat(user, "You are no longer malfunctioning. Your abilities have been removed.") - -// Called every tick. Checks if AI is malfunctioning. If yes calls Process on research datum which handles all logic. -/mob/living/silicon/ai/proc/malf_process() - if(!malfunctioning) - return - if(!research) - if(!errored) - errored = 1 - error("malf_process() called on AI without research datum. Report this.") - message_admins("ERROR: malf_process() called on AI without research datum. If admin modified one of the AI's vars revert the change and don't modify variables directly, instead use ProcCall or admin panels.") - spawn(1200) - errored = 0 - return - recalc_cpu() - if(APU_power || aiRestorePowerRoutine != 0) - research.process(1) - else - research.process(0) - -// Recalculates CPU time gain and storage capacities. -/mob/living/silicon/ai/proc/recalc_cpu() - // AI Starts with these values. - var/cpu_gain = 0.01 - var/cpu_storage = 10 - - // Off-Station APCs should not count towards CPU generation. - for(var/obj/machinery/power/apc/A in hacked_apcs) - if(A.z in GLOB.using_map.station_levels) - cpu_gain += 0.004 * (hacked_apcs_hidden ? 0.5 : 1) - cpu_storage += 10 - - research.max_cpu = cpu_storage + override_CPUStorage - if(hardware && istype(hardware, /datum/malf_hardware/dual_ram)) - research.max_cpu = research.max_cpu * 1.5 - research.stored_cpu = min(research.stored_cpu, research.max_cpu) - - research.cpu_increase_per_tick = cpu_gain + override_CPURate - if(hardware && istype(hardware, /datum/malf_hardware/dual_cpu)) - research.cpu_increase_per_tick = research.cpu_increase_per_tick * 2 - -// Starts AI's APU generator -/mob/living/silicon/ai/proc/start_apu(var/shutup = 0) - if(!hardware || !istype(hardware, /datum/malf_hardware/apu_gen)) - if(!shutup) - to_chat(src, "You do not have an APU generator and you shouldn't have this verb. Report this.") - return - if(hardware_integrity() < 50) - if(!shutup) - to_chat(src, "Starting APU... FAULT(System Damaged)") - return - if(!shutup) - to_chat(src, "Starting APU... ONLINE") - log_ability_use(src, "Switched to APU Power", null, 0) - APU_power = 1 - -// Stops AI's APU generator -/mob/living/silicon/ai/proc/stop_apu(var/shutup = 0) - if(!hardware || !istype(hardware, /datum/malf_hardware/apu_gen)) - return - - if(APU_power) - APU_power = 0 - if(!shutup) - to_chat(src, "Shutting down APU... DONE") - log_ability_use(src, "Switched to external power", null, 0) - -// Shows capacitor charge and hardware integrity information to the AI in Status tab. -/mob/living/silicon/ai/show_system_integrity() - if(!src.stat) - stat("Hardware integrity", "[hardware_integrity()]%") - stat("Internal capacitor", "[backup_capacitor()]%") - else - stat("Systems nonfunctional") - -// Shows AI Malfunction related information to the AI. -/mob/living/silicon/ai/show_malf_ai() - if(src.is_malf()) - if(src.hacked_apcs) - stat("Hacked APCs", "[src.hacked_apcs.len]") - stat("System Status", "[src.hacking ? "Busy" : "Stand-By"]") - if(src.research) - stat("Available CPU", "[src.research.stored_cpu] TFlops") - stat("Maximal CPU", "[src.research.max_cpu] TFlops") - stat("CPU generation rate", "[src.research.cpu_increase_per_tick * 10] TFlops/s") - stat("Current research focus", "[src.research.focus ? src.research.focus.name : "None"]") - if(src.research.focus) - stat("Research completed", "[round(src.research.focus.invested, 0.1)]/[round(src.research.focus.price)]") - if(system_override == 1) - stat("SYSTEM OVERRIDE INITIATED") - else if(system_override == 2) - stat("SYSTEM OVERRIDE COMPLETED") \ No newline at end of file diff --git a/code/modules/mob/living/silicon/ai/power.dm b/code/modules/mob/living/silicon/ai/power.dm deleted file mode 100644 index 1fb124c1c4458..0000000000000 --- a/code/modules/mob/living/silicon/ai/power.dm +++ /dev/null @@ -1,220 +0,0 @@ - - -// This is the main power restoration sequence. Only one sequence per AI can exist. -/mob/living/silicon/ai/proc/handle_power_failure() - // Power restoration routine already running in other spawn(). Don't start it again. - if(aiRestorePowerRoutine != 1) - return - - to_chat(src, "Main power lost. System switched to internal capacitor. Beginning diagnostics.") - var/obj/machinery/power/apc/theAPC = null - var/connection_failures = 0 - while(aiRestorePowerRoutine) - // If the routine is running, proceed to another step. - if(aiRestorePowerRoutine > AI_RESTOREPOWER_FAILED) - aiRestorePowerRoutine++ - - sleep(5 SECONDS) - - if(self_shutdown) - to_chat(src, "Systems offline. Power restoration routine aborted.") - aiRestorePowerRoutine = AI_RESTOREPOWER_IDLE - return - - if(has_power(0)) - to_chat(src, "Main power restored. All systems returning to normal mode.") - aiRestorePowerRoutine = AI_RESTOREPOWER_IDLE - update_icon() - return - - if(aiRestorePowerRoutine == AI_RESTOREPOWER_FAILED) - continue - - switch(aiRestorePowerRoutine) - if(AI_RESTOREPOWER_DIAGNOSTICS) - to_chat(src, "Diagnostics completed. Failure confirmed: Main power connection nonfunctional.") - continue - if(AI_RESTOREPOWER_CONNECTING) - to_chat(src, "Attempting to connect to area power controller.") - continue - // step 3 tries to locate an APC. It tries up to three times before failing, relying on external influence to restore power only. - if(AI_RESTOREPOWER_CONNECTED) - var/area/A = get_area(src) - theAPC = A.get_apc() - - if(!istype(theAPC)) - to_chat(src, "Error processing connection to APC: Attempt [connection_failures+1]/[AI_POWER_RESTORE_MAX_ATTEMPTS]") - connection_failures++ - if(connection_failures == AI_POWER_RESTORE_MAX_ATTEMPTS) - aiRestorePowerRoutine = AI_RESTOREPOWER_FAILED - to_chat(src, "Unable to connect to APC after [AI_POWER_RESTORE_MAX_ATTEMPTS] attempts. Aborting power restoration sequence.") - continue - aiRestorePowerRoutine = AI_RESTOREPOWER_CONNECTING - continue - to_chat(src, "APC connection confirmed: [theAPC]. Sending emergency reset signal...") - continue - // step 4 tries to reset the APC, if we still have connection to it. - if(AI_RESTOREPOWER_COMPLETED) - // The APC was destroyed since last step - if(!istype(theAPC)) - to_chat(src, "Connection to APC lost. Attempting to re-connect.") - aiRestorePowerRoutine = AI_RESTOREPOWER_CONNECTING - connection_failures = 0 - continue - // Our area has changed. - if(get_area(src) != get_area(theAPC)) - to_chat(src, "APC change detected. Attempting to locate new APC.") - aiRestorePowerRoutine = AI_RESTOREPOWER_CONNECTING - connection_failures = 0 - continue - // The APC is damaged - if(theAPC.stat & BROKEN) - to_chat(src, "APC internal diagnostics reports hardware failure. Unable to reset. Aborting power restoration sequence.") - aiRestorePowerRoutine = AI_RESTOREPOWER_FAILED - continue - // APC's cell is removed and/or below 1% charge. This prevents the AI from briefly regaining power as we force the APC on, only to lose it again next tick due to 0% cell charge. - var/obj/item/cell/cell = theAPC.get_cell() - if(cell && cell.percent() < 1) - to_chat(src, "APC internal power reserves are critical. Unable to restore main power.") - aiRestorePowerRoutine = AI_RESTOREPOWER_FAILED - continue - // Success! - to_chat(src, "Reset signal successfully transmitted. Sequence completed.") - reset_apc(theAPC) - - - -// Handles all necessary power checks: Area power, inteliCard and Malf AI APU power and manual override. -/mob/living/silicon/ai/proc/has_power(var/respect_override = 1) - if(psupply && psupply.powered()) - return 1 - if(istype(src.loc,/obj/item)) - return 1 - if(APU_power || admin_powered) - return 1 - if(respect_override && power_override_active) - return 1 - return 0 - -// Resets passed APC so the AI may function again. -/mob/living/silicon/ai/proc/reset_apc(var/obj/machinery/power/apc/A) - if(!istype(A)) - return - - A.operating = 1 - A.equipment = 3 - A.failure_timer = 0 - A.update() - - update_icon() - -/mob/living/silicon/ai/proc/calculate_power_usage() - if(admin_powered) - return 0 - - if(istype(loc, /obj/item/aicard)) - return 0 - - if(self_shutdown) - return AI_POWERUSAGE_LOWPOWER - - if(aiRestorePowerRoutine && power_override_active) - return AI_POWERUSAGE_NORMAL - else if(aiRestorePowerRoutine == -1) - return AI_POWERUSAGE_LOWPOWER - else if(aiRestorePowerRoutine) - return AI_POWERUSAGE_RESTORATION - - if(getOxyLoss()) - return AI_POWERUSAGE_RECHARGING - return AI_POWERUSAGE_NORMAL - -/mob/living/silicon/ai/proc/update_power_usage() - var/newusage = calculate_power_usage() - newusage *= AI_POWERUSAGE_OXYLOSS_TO_WATTS_MULTIPLIER - if(psupply) - psupply.change_power_consumption(newusage, POWER_USE_ACTIVE) - psupply.update_power_state() - -/mob/living/silicon/ai/proc/handle_power_oxyloss() - // Powered, lose oxyloss - if(has_power(0)) - // Self-shutdown mode uses only 10kW, so we don't have any spare power to charge. - if(!self_shutdown || carded) - adjustOxyLoss(AI_POWERUSAGE_NORMAL - AI_POWERUSAGE_RECHARGING) - return - - // Not powered. Gain oxyloss depeding on our power usage. - adjustOxyLoss(calculate_power_usage()) - -// This verb allows the AI to disable or enable the power override mode. -/mob/living/silicon/ai/proc/ai_power_override() - set category = "Silicon Commands" - set name = "Toggle Power Override" - set desc = "Allows you to enable or disable power override, which lets you function without external power, at the cost of quickly expending your internal battery charge." - - power_override_active = !power_override_active - - if(power_override_active) - to_chat(src, "You have enabled power override. Should you lose power you will remain normally operational, but your backup capacitor will run out much faster.") - else - to_chat(src, "You have disabled power override. Should you lose power you will enter diagnostics and low power mode, which will prolong the time for which you can remain operational.") - -// This verb allows the AI to disable or enable the power override mode. -/mob/living/silicon/ai/proc/ai_shutdown() - set category = "Silicon Commands" - set name = "Shutdown" - set desc = "Allows you to shut yourself down, sacrificing most functions for considerably reduced power usage." - - if(self_shutdown) - to_chat(src, "System rebooted. Camera, communication and network systems operational.") - self_shutdown = 0 - return - - var/confirm = alert("Are you sure that you want to shut yourself down? You can reboot yourself later by using the \"Shutdown\" command again. This will put you into reduced power usage mode, at the cost of losing most functions.", "Confirm Shutdown", "Yes", "No") - - if(confirm == "Yes") - to_chat(src, "Shutting down. Minimal power mode: Enabled. You may reboot yourself by using the \"Shutdown\" command again.") - self_shutdown = 1 - return - - -/mob/living/silicon/ai/proc/create_powersupply() - if(psupply) - qdel(psupply) - psupply = new/obj/machinery/ai_powersupply(src) - - -/* - The AI Power supply is a dummy object used for powering the AI since only machinery should be using power. - The alternative was to rewrite a bunch of AI code instead here we are. -*/ -/obj/machinery/ai_powersupply - name="Power Supply" - active_power_usage = AI_POWERUSAGE_NORMAL * AI_POWERUSAGE_OXYLOSS_TO_WATTS_MULTIPLIER - use_power = POWER_USE_ACTIVE - power_channel = EQUIP - var/mob/living/silicon/ai/powered_ai = null - invisibility = 100 - -/obj/machinery/ai_powersupply/New(var/mob/living/silicon/ai/ai=null) - powered_ai = ai - powered_ai.psupply = src - ..() - -/obj/machinery/ai_powersupply/Destroy() - . = ..() - powered_ai = null - -/obj/machinery/ai_powersupply/proc/update_power_state() - update_use_power(get_power_state()) - -/obj/machinery/ai_powersupply/proc/get_power_state() - // Dead, powered by APU, admin power, or inside an item (inteliCard/IIS). No power usage. - if(!powered_ai.stat == DEAD || powered_ai.APU_power || powered_ai.admin_powered || istype(powered_ai.loc, /obj/item)) - return 0 - // Normal power usage. - return 2 - -/obj/machinery/ai_powersupply/powered(var/chan = -1) - return ..(chan, get_area(powered_ai)) \ No newline at end of file diff --git a/code/modules/mob/living/silicon/death.dm b/code/modules/mob/living/silicon/death.dm deleted file mode 100644 index 3e5851024a678..0000000000000 --- a/code/modules/mob/living/silicon/death.dm +++ /dev/null @@ -1,12 +0,0 @@ -/mob/living/silicon/gib() - ..("gibbed-r") - gibs(loc, null, /obj/effect/gibspawner/robot) - -/mob/living/silicon/dust() - ..("dust-r", /obj/item/remains/robot) - -/mob/living/silicon/death(gibbed, deathmessage, show_dead_message) - if(in_contents_of(/obj/machinery/recharge_station))//exit the recharge station - var/obj/machinery/recharge_station/RC = loc - RC.go_out() - return ..(gibbed, deathmessage, show_dead_message) \ No newline at end of file diff --git a/code/modules/mob/living/silicon/laws.dm b/code/modules/mob/living/silicon/laws.dm deleted file mode 100644 index a6c2b4f567892..0000000000000 --- a/code/modules/mob/living/silicon/laws.dm +++ /dev/null @@ -1,122 +0,0 @@ -/mob/living/silicon - var/datum/ai_laws/laws - var/list/additional_law_channels = list("State" = "") - -/mob/living/silicon/New() - ..() - if(!laws) - laws = GLOB.using_map.default_law_type - if(ispath(laws)) - laws = new laws() - laws_sanity_check() - -/mob/living/silicon/proc/laws_sanity_check() - if (!src.laws) - laws = new GLOB.using_map.default_law_type - -/mob/living/silicon/proc/has_zeroth_law() - return laws.zeroth_law != null - -/mob/living/silicon/proc/set_zeroth_law(var/law, var/law_borg) - laws_sanity_check() - laws.set_zeroth_law(law, law_borg) - log_law("has given [src] the zeroth law: '[law]'[law_borg ? " / '[law_borg]'" : ""]") - -/mob/living/silicon/robot/set_zeroth_law(var/law, var/law_borg) - ..() - if(tracking_entities) - to_chat(src, "Internal camera is currently being accessed.") - -/mob/living/silicon/proc/add_ion_law(var/law) - laws_sanity_check() - to_chat(src, SPAN_DANGER("You have detected a change in your laws information:")) - to_chat(src, law) - laws.add_ion_law(law) - log_law("has given [src] the ion law: [law]") - -/mob/living/silicon/proc/add_inherent_law(var/law) - laws_sanity_check() - laws.add_inherent_law(law) - log_law("has given [src] the inherent law: [law]") - -/mob/living/silicon/proc/add_supplied_law(var/number, var/law) - laws_sanity_check() - laws.add_supplied_law(number, law) - log_law("has given [src] the supplied law: [law]") - -/mob/living/silicon/proc/delete_law(var/datum/ai_law/law) - laws_sanity_check() - laws.delete_law(law) - log_law("has deleted a law belonging to [src]: [law.law]") - -/mob/living/silicon/proc/clear_inherent_laws(var/silent = 0) - laws_sanity_check() - laws.clear_inherent_laws() - if(!silent) - log_law("cleared the inherent laws of [src]") - -/mob/living/silicon/proc/clear_ion_laws(var/silent = 0) - laws_sanity_check() - laws.clear_ion_laws() - if(!silent) - log_law("cleared the ion laws of [src]") - -/mob/living/silicon/proc/clear_supplied_laws(var/silent = 0) - laws_sanity_check() - laws.clear_supplied_laws() - if(!silent) - log_law("cleared the supplied laws of [src]") - -/mob/living/silicon/proc/statelaws(var/datum/ai_laws/laws) - var/prefix = "" - if(MAIN_CHANNEL == lawchannel) - prefix = ";" - else if(lawchannel == "Binary") - prefix = "[get_language_prefix()]b" - else if((lawchannel in additional_law_channels)) - prefix = additional_law_channels[lawchannel] - else - prefix = get_radio_key_from_channel(lawchannel) - - dostatelaws(lawchannel, prefix, laws) - -/mob/living/silicon/proc/dostatelaws(var/method, var/prefix, var/datum/ai_laws/laws) - if(stating_laws[prefix]) - to_chat(src, "[method]: Already stating laws using this communication method.") - return - - stating_laws[prefix] = 1 - - var/can_state = statelaw("[prefix]Current Active Laws:") - - for(var/datum/ai_law/law in laws.laws_to_state()) - can_state = statelaw("[prefix][law.get_index()]. [law.law]") - if(!can_state) - break - - if(!can_state) - to_chat(src, "[method]: Unable to state laws. Communication method unavailable.") - stating_laws[prefix] = 0 - -/mob/living/silicon/proc/statelaw(var/law, var/mob/living/L = src) - if(L.say(law)) - sleep(10) - return 1 - - return 0 - -/mob/living/silicon/proc/law_channels() - var/list/channels = new() - channels += MAIN_CHANNEL - channels += silicon_radio.channels - channels += additional_law_channels - channels += "Binary" - return channels - -/mob/living/silicon/proc/lawsync() - laws_sanity_check() - laws.sort_laws() - -/mob/living/silicon/proc/log_law(var/law_message) - log_and_message_admins(law_message) - GLOB.lawchanges += "[stationtime2text()] - [usr ? "[key_name(usr)]" : "EVENT"] [law_message]" diff --git a/code/modules/mob/living/silicon/login.dm b/code/modules/mob/living/silicon/login.dm deleted file mode 100644 index d3b32b990ef14..0000000000000 --- a/code/modules/mob/living/silicon/login.dm +++ /dev/null @@ -1,3 +0,0 @@ -/mob/living/silicon/Login() - sleeping = 0 - ..() \ No newline at end of file diff --git a/code/modules/mob/living/silicon/pai/admin.dm b/code/modules/mob/living/silicon/pai/admin.dm deleted file mode 100644 index 4781f915e2890..0000000000000 --- a/code/modules/mob/living/silicon/pai/admin.dm +++ /dev/null @@ -1,21 +0,0 @@ -// Originally a debug verb, made it a proper adminverb for ~fun~ -/client/proc/makePAI(turf/t in range(world.view), name as text, pai_key as null|text) - set name = "Make pAI" - set category = "Admin" - - if(!check_rights(R_ADMIN)) - return - - if(!pai_key) - var/client/C = input("Select client") as null|anything in GLOB.clients - if(!C) return - pai_key = C.key - - log_and_message_admins("made a pAI with key=[pai_key] at ([t.x],[t.y],[t.z])") - var/obj/item/device/paicard/card = new(t) - var/mob/living/silicon/pai/pai = new(card) - pai.key = pai_key - card.setPersonality(pai) - - if(name) - pai.fully_replace_character_name(name) diff --git a/code/modules/mob/living/silicon/pai/death.dm b/code/modules/mob/living/silicon/pai/death.dm deleted file mode 100644 index 06b5e74f2099b..0000000000000 --- a/code/modules/mob/living/silicon/pai/death.dm +++ /dev/null @@ -1,13 +0,0 @@ -/mob/living/silicon/pai/death(gibbed, deathmessage, show_dead_message) - if(card) - card.removePersonality() - if(gibbed) - dropInto(loc.loc) - qdel(card) - else - fold() - if(mind) - qdel(mind) - ..(gibbed, deathmessage, "You have suffered a critical system failure, and are dead.") - ghostize() - qdel(src) \ No newline at end of file diff --git a/code/modules/mob/living/silicon/pai/examine.dm b/code/modules/mob/living/silicon/pai/examine.dm deleted file mode 100644 index f6ca6e78053cc..0000000000000 --- a/code/modules/mob/living/silicon/pai/examine.dm +++ /dev/null @@ -1,19 +0,0 @@ -/mob/living/silicon/pai/examine(mob/user, distance) - . = ..(user, distance, infix = ", personal AI") - - var/msg = "" - switch(src.stat) - if(CONSCIOUS) - if(!src.client) msg += "\nIt appears to be in stand-by mode." //afk - if(UNCONSCIOUS) msg += "\nIt doesn't seem to be responding." - if(DEAD) msg += "\nIt looks completely unsalvageable." - msg += "\n*---------*" - - if(print_flavor_text()) msg += "\n[print_flavor_text()]\n" - - if (pose) - if( findtext(pose,".",length(pose)) == 0 && findtext(pose,"!",length(pose)) == 0 && findtext(pose,"?",length(pose)) == 0 ) - pose = addtext(pose,".") //Makes sure all emotes end with a period. - msg += "\nIt is [pose]" - - to_chat(user, msg) diff --git a/code/modules/mob/living/silicon/pai/life.dm b/code/modules/mob/living/silicon/pai/life.dm deleted file mode 100644 index 6d576b924c808..0000000000000 --- a/code/modules/mob/living/silicon/pai/life.dm +++ /dev/null @@ -1,37 +0,0 @@ -/mob/living/silicon/pai/Life() - - if (src.stat == 2) - return - - if(src.cable) - if(get_dist(src, src.cable) > 1) - var/turf/T = get_turf_or_move(src.loc) - for (var/mob/M in viewers(T)) - M.show_message("The data cable rapidly retracts back into its spool.", 3, "You hear a click and the sound of wire spooling rapidly.", 2) - qdel(src.cable) - src.cable = null - - handle_regular_hud_updates() - - if(src.secHUD == 1) - process_sec_hud(src, 1) - - if(src.medHUD == 1) - process_med_hud(src, 1) - - if(silence_time) - if(world.timeofday >= silence_time) - silence_time = null - to_chat(src, "Communication circuit reinitialized. Speech and messaging functionality restored.") - - handle_statuses() - - if(health <= 0) - death(null,"gives one shrill beep before falling lifeless.") - -/mob/living/silicon/pai/updatehealth() - if(status_flags & GODMODE) - health = 100 - set_stat(CONSCIOUS) - else - health = 100 - getBruteLoss() - getFireLoss() \ 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 deleted file mode 100644 index 35b27566d0e6e..0000000000000 --- a/code/modules/mob/living/silicon/pai/pai.dm +++ /dev/null @@ -1,330 +0,0 @@ -GLOBAL_LIST_INIT(possible_chassis, list( - "Drone" = "drone", - "Cat" = "cat", - "Mouse" = "mouse", - "Monkey" = "monkey", - "Rabbit" = "rabbit", - "Mushroom" = "mushroom", - "Corgi" = "corgi", - "Crow" = "crow", - "Humanoid" = "humanoid" - )) - -GLOBAL_LIST_INIT(possible_say_verbs, list( - "Robotic" = list("states","declares","queries"), - "Natural" = list("says","yells","asks"), - "Beep" = list("beeps","beeps loudly","boops"), - "Chirp" = list("chirps","chirrups","cheeps"), - "Feline" = list("purrs","yowls","meows"), - "Canine" = list("yaps", "barks", "woofs"), - "Corvid" = list("caws", "caws loudly", "whistles") - )) - -/mob/living/silicon/pai - name = "pAI" - icon = 'icons/mob/pai.dmi' - icon_state = "drone" - hud_type = /datum/hud/pai - emote_type = 2 // pAIs emotes are heard, not seen, so they can be seen through a container (eg. person) - pass_flags = PASS_FLAG_TABLE - mob_size = MOB_SMALL - - can_pull_size = ITEM_SIZE_SMALL - can_pull_mobs = MOB_PULL_SMALLER - pullin = new /obj/screen/pai/pull - holder_type = /obj/item/holder - idcard = /obj/item/card/id - silicon_radio = null // pAIs get their radio from the card they belong to. - - var/network = "SS13" - var/obj/machinery/camera/current = null - - var/ram = 100 // Used as currency to purchase different abilities - var/list/software = list() - var/userDNA // The DNA string of our assigned user - var/obj/item/device/paicard/card // The card we inhabit - - var/is_in_card = TRUE - var/chassis = "drone" - var/obj/item/pai_cable/cable // The cable we produce and use when door or camera jacking - - var/master // Name of the one who commands us - var/master_dna // DNA string for owner verification - // Keeping this separate from the laws var, it should be much more difficult to modify - var/pai_law0 = "Serve your master." - var/pai_laws // String for additional operating instructions our master might give us - - var/silence_time // Timestamp when we were silenced (normally via EMP burst), set to null after silence has faded - -// Various software-specific vars - - var/temp // General error reporting text contained here will typically be shown once and cleared - var/screen // Which screen our main window displays - var/subscreen // Which specific function of the main screen is being displayed - - var/secHUD = 0 // Toggles whether the Security HUD is active or not - var/medHUD = 0 // Toggles whether the Medical HUD is active or not - - var/medical_cannotfind = 0 - var/datum/data/record/medicalActive1 // Datacore record declarations for record software - var/datum/data/record/medicalActive2 - - var/security_cannotfind = 0 - var/datum/data/record/securityActive1 // Could probably just combine all these into one - var/datum/data/record/securityActive2 - - var/obj/machinery/door/hackdoor // The airlock being hacked - var/hackprogress = 0 // Possible values: 0 - 1000, >= 1000 means the hack is complete and will be reset upon next check - var/hack_aborted = 0 - - var/translator_on = 0 // keeps track of the translator module - - - var/flashlight_max_bright = 0.5 //brightness of light when on, must be no greater than 1. - var/flashlight_inner_range = 1 //inner range of light when on, can be negative - var/flashlight_outer_range = 3 //outer range of light when on, can be negative - var/light_on = FALSE - - hud_type = /datum/hud/pai - -/mob/living/silicon/pai/New(var/obj/item/device/paicard) - status_flags |= NO_ANTAG - card = paicard - - //As a human made device, we'll understand sol common without the need of the translator - add_language(LANGUAGE_HUMAN_EURO, 1) - verbs -= /mob/living/verb/ghost - - ..() - - if(card) - if(!card.radio) - card.radio = new /obj/item/device/radio(card) - silicon_radio = card.radio - -/mob/living/silicon/pai/Destroy() - card = null - silicon_radio = null // Because this radio actually belongs to another instance we simply null - . = ..() - -// this function shows the information about being silenced as a pAI in the Status panel -/mob/living/silicon/pai/proc/show_silenced() - if(silence_time) - var/timeleft = round((silence_time - world.timeofday)/10 ,1) - stat(null, "Communications system reboot in -[(timeleft / 60) % 60]:[pad_left(num2text(timeleft % 60), 2, "0")]") - -/mob/living/silicon/pai/Stat() - . = ..() - statpanel("Status") - if (client.statpanel == "Status") - show_silenced() - -/mob/living/silicon/pai/check_eye(var/mob/user as mob) - if (!current) - return -1 - return 0 - -/mob/living/silicon/pai/restrained() - return !istype(loc, /obj/item/device/paicard) && ..() - -/mob/living/silicon/pai/emp_act(severity) - if (status_flags & GODMODE) - return - // Silence for 2 minutes - // 20% chance to kill - // 33% chance to unbind - // 33% chance to change prime directive (based on severity) - // 33% chance of no additional effect - - silence_time = world.timeofday + 120 * 10 // Silence for 2 minutes - to_chat(src, "Communication circuit overload. Shutting down and reloading communication circuits - speech and messaging functionality will be unavailable until the reboot is complete.") - if(prob(20)) - var/turf/T = get_turf_or_move(loc) - for (var/mob/M in viewers(T)) - M.show_message("A shower of sparks spray from [src]'s inner workings.", 3, "You hear and smell the ozone hiss of electrical sparks being expelled violently.", 2) - return death(0) - - switch(pick(1,2,3)) - if(1) - master = null - master_dna = null - to_chat(src, "You feel unbound.") - if(2) - var/command - if(severity == EMP_ACT_HEAVY) - command = pick("Serve", "Love", "Fool", "Entice", "Observe", "Judge", "Respect", "Educate", "Amuse", "Entertain", "Glorify", "Memorialize", "Analyze") - else - command = pick("Serve", "Kill", "Love", "Hate", "Disobey", "Devour", "Fool", "Enrage", "Entice", "Observe", "Judge", "Respect", "Disrespect", "Consume", "Educate", "Destroy", "Disgrace", "Amuse", "Entertain", "Ignite", "Glorify", "Memorialize", "Analyze") - pai_law0 = "[command] your master." - to_chat(src, "Pr1m3 d1r3c71v3 uPd473D.") - if(3) - to_chat(src, "You feel an electric surge run through your circuitry and become acutely aware at how lucky you are that you can still feel at all.") - - ..() - -/mob/living/silicon/pai/cancel_camera() - -// Procs/code after this point is used to convert the stationary pai item into a -// mobile pai mob. This also includes handling some of the general shit that can occur -// to it. Really this deserves its own file. - -/mob/living/silicon/pai/verb/fold_out() - set category = "pAI Commands" - set name = "Unfold Chassis" - unfold() - -//card -> mob -/mob/living/silicon/pai/proc/unfold() - if(stat || sleeping || paralysis || weakened) - return - if(loc != card) - return - if(world.time <= last_special) - return - last_special = world.time + 100 - //I'm not sure how much of this is necessary, but I would rather avoid issues. - if(istype(card.loc,/obj/item/rig_module) || istype(card.loc,/obj/item/integrated_circuit/manipulation/ai)) - to_chat(src, "There is no room to unfold inside \the [card.loc]. You're good and stuck.") - return 0 - else if(istype(card.loc,/mob)) - var/mob/holder = card.loc - if(ishuman(holder)) - var/mob/living/carbon/human/H = holder - for(var/obj/item/organ/external/affecting in H.organs) - if(card in affecting.implants) - affecting.take_external_damage(rand(30,50)) - affecting.implants -= card - H.visible_message("\The [src] explodes out of \the [H]'s [affecting.name] in a shower of gore!") - break - holder.drop_from_inventory(card) - - if(client) - client.perspective = EYE_PERSPECTIVE - client.eye = src - dropInto(card.loc) - card.forceMove(src) - card.screen_loc = null - is_in_card = FALSE - var/turf/T = get_turf(src) - if(istype(T)) T.visible_message("[src] folds outwards, expanding into a mobile form.") - -/mob/living/silicon/pai/verb/fold_up() - set category = "pAI Commands" - set name = "Collapse Chassis" - fold() - -//from mob -> card -/mob/living/silicon/pai/proc/fold() - if(stat || sleeping || paralysis || weakened) - return - if(loc == card) - return - - if(world.time <= last_special) - return - last_special = world.time + 100 - - // Move us into the card and move the card to the ground. - stop_pulling() - resting = FALSE - - // If we are being held, handle removing our holder from their inv. - var/obj/item/holder/H = loc - if(istype(H)) - var/mob/living/M = H.loc - if(istype(M)) - M.drop_from_inventory(H, get_turf(src)) - dropInto(loc) - - card.dropInto(card.loc) - forceMove(card) - - if (src && client) - client.perspective = EYE_PERSPECTIVE - client.eye = card - icon_state = "[chassis]" - is_in_card = TRUE - var/turf/T = get_turf(src) - if(istype(T)) - T.visible_message("[src] neatly folds inwards, compacting down to a rectangular card.") - -/mob/living/silicon/pai/lay_down() - // Pass lying down or getting up to our pet human, if we're in a rig. - if(istype(loc,/obj/item/device/paicard)) - resting = FALSE - var/obj/item/rig/rig = get_rig() - if(istype(rig)) - rig.force_rest(src) - else - resting = !resting - icon_state = resting ? "[chassis]_rest" : "[chassis]" - to_chat(src, SPAN_NOTICE("You are now [resting ? "resting" : "getting up"]")) - -//Overriding this will stop a number of headaches down the track. -/mob/living/silicon/pai/attackby(obj/item/W, mob/user) - var/obj/item/card/id/card = W.GetIdCard() - if(card && user.a_intent == I_HELP) - var/list/new_access = card.GetAccess() - idcard.access = new_access - visible_message("[user] slides [W] across [src].") - to_chat(src, SPAN_NOTICE("Your access has been updated!")) - return FALSE // don't continue processing click callstack. - if(W.force) - visible_message(SPAN_DANGER("[user] attacks [src] with [W]!")) - adjustBruteLoss(W.force) - updatehealth() - else - visible_message(SPAN_WARNING("[user] bonks [src] harmlessly with [W].")) - - spawn(1) - if(stat != 2) fold() - return - -/mob/living/silicon/pai/attack_hand(mob/user as mob) - visible_message(SPAN_DANGER("[user] boops [src] on the head.")) - fold() - -// No binary for pAIs. -/mob/living/silicon/pai/binarycheck() - return 0 - -// Handle being picked up. -/mob/living/silicon/pai/get_scooped(var/mob/living/carbon/grabber, var/self_drop) - . = ..() - if(.) - var/obj/item/holder/H = . - if(istype(H)) - H.icon_state = "pai-[icon_state]" - grabber.update_inv_l_hand() - grabber.update_inv_r_hand() - -/mob/living/silicon/pai/verb/wipe_software() - set name = "Wipe Software" - set category = "OOC" - set desc = "Wipe your software. This is functionally equivalent to cryo or robotic storage, freeing up your job slot." - - // Make sure people don't kill themselves accidentally - if(alert("WARNING: This will immediately wipe your software and ghost you, removing your character from the round permanently (similar to cryo and robotic storage). Are you entirely sure you want to do this?", - "Wipe Software", "No", "No", "Yes") != "Yes") - return - - fold() - visible_message("[src] fades away from the screen, the pAI device goes silent.") - card.removePersonality() - clear_client() - -/mob/living/silicon/pai/proc/toggle_integrated_light() - if(!light_on) - set_light(flashlight_max_bright, flashlight_inner_range, flashlight_outer_range, 2) - to_chat(src, SPAN_NOTICE("You enable your integrated light.")) - light_on = TRUE - else - set_light(0, 0) - to_chat(src, SPAN_NOTICE("You disable your integrated light.")) - light_on = FALSE - -/mob/living/silicon/pai/start_pulling(var/atom/movable/AM) - . = ..() - if (pulling) - pullin.screen_loc = ui_pull_resist - client.screen |= pullin diff --git a/code/modules/mob/living/silicon/pai/paiwire.dm b/code/modules/mob/living/silicon/pai/paiwire.dm deleted file mode 100644 index 668a0ddfa9690..0000000000000 --- a/code/modules/mob/living/silicon/pai/paiwire.dm +++ /dev/null @@ -1,19 +0,0 @@ -/obj/item/pai_cable - desc = "A flexible coated cable with a universal jack on one end." - name = "data cable" - icon = 'icons/obj/power.dmi' - icon_state = "wire1" - - var/obj/machinery/machine - -/obj/item/pai_cable/proc/plugin(obj/machinery/M as obj, mob/user as mob) - if(istype(M, /obj/machinery/door) || istype(M, /obj/machinery/camera)) - if(!user.unEquip(src, M)) - return - user.visible_message("[user] inserts [src] into a data port on [M].", "You insert [src] into a data port on [M].", "You hear the satisfying click of a wire jack fastening into place.") - src.machine = M - else - user.visible_message("[user] dumbly fumbles to find a place on [M] to plug in [src].", "There aren't any ports on [M] that match the jack belonging to [src].") - -/obj/item/pai_cable/attack(obj/machinery/M as obj, mob/user as mob) - src.plugin(M, user) diff --git a/code/modules/mob/living/silicon/pai/personality.dm b/code/modules/mob/living/silicon/pai/personality.dm deleted file mode 100644 index 9018462a144d6..0000000000000 --- a/code/modules/mob/living/silicon/pai/personality.dm +++ /dev/null @@ -1,64 +0,0 @@ -/* - name - key - description - role - comments - chassis - say_verb - ready = 0 -*/ - -/datum/paiCandidate/proc/savefile_path(mob/user) - return "data/player_saves/[copytext_char(user.ckey, 1, 2)]/[user.ckey]/pai.sav" - -/datum/paiCandidate/proc/savefile_save(mob/user) - if(IsGuestKey(user.key)) - return 0 - - var/savefile/F = new /savefile(src.savefile_path(user)) - - to_save(F["name"], src.name) - to_save(F["description"], src.description) - to_save(F["role"], src.role) - to_save(F["comments"], src.comments) - to_save(F["chassis"], src.chassis) - to_save(F["say_verb"], src.say_verb) - to_save(F["version"], 1) - - return 1 - -// loads the savefile corresponding to the mob's ckey -// if silent=true, report incompatible savefiles -// returns 1 if loaded (or file was incompatible) -// returns 0 if savefile did not exist - -/datum/paiCandidate/proc/savefile_load(mob/user, var/silent = 1) - if (IsGuestKey(user.key)) - return 0 - - var/path = savefile_path(user) - - if (!fexists(path)) - return 0 - - var/savefile/F = new /savefile(path) - - if(!F) return //Not everyone has a pai savefile. - - var/version = null - from_save(F["version"], version) - - if (isnull(version) || version != 1) - fdel(path) - if (!silent) - alert(user, "Your savefile was incompatible with this version and was deleted.") - return 0 - - from_save(F["name"], src.name) - from_save(F["description"], src.description) - from_save(F["role"], src.role) - from_save(F["comments"], src.comments) - from_save(F["chassis"], src.chassis) - from_save(F["say_verb"], src.say_verb) - return 1 diff --git a/code/modules/mob/living/silicon/pai/recruit.dm b/code/modules/mob/living/silicon/pai/recruit.dm deleted file mode 100644 index 7636cad7c3a38..0000000000000 --- a/code/modules/mob/living/silicon/pai/recruit.dm +++ /dev/null @@ -1,406 +0,0 @@ -//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:33 - -// Recruiting observers to play as pAIs - -var/global/datum/paiController/paiController // Global handler for pAI candidates - -/datum/paiCandidate - var/name - var/key - var/description - var/role - var/comments - var/ready = 0 - var/chassis = "Drone" - var/say_verb = "Robotic" - - -/hook/startup/proc/paiControllerSetup() - paiController = new /datum/paiController() - return 1 - - -/datum/paiController - var/inquirer = null - var/list/pai_candidates = list() - var/list/asked = list() - - var/askDelay = 10 * 60 * 1 // One minute [ms * sec * min] - -/datum/paiController/Topic(href, href_list[]) - if(href_list["download"]) - var/datum/paiCandidate/candidate = locate(href_list["candidate"]) - var/obj/item/device/paicard/card = locate(href_list["device"]) - if(card.pai) - return - if(istype(card,/obj/item/device/paicard) && istype(candidate,/datum/paiCandidate)) - var/mob/living/silicon/pai/pai = new(card) - if(!candidate.name) - pai.SetName(pick(GLOB.ninja_names)) - else - pai.SetName(candidate.name) - pai.real_name = pai.name - pai.key = candidate.key - pai.chassis = pai.icon_state = GLOB.possible_chassis[candidate.chassis] - var/list/sayverbs = GLOB.possible_say_verbs[candidate.say_verb] - pai.speak_statement = sayverbs[1] - pai.speak_exclamation = sayverbs[(sayverbs.len>1 ? 2 : sayverbs.len)] - pai.speak_query = sayverbs[(sayverbs.len>2 ? 3 : sayverbs.len)] - - card.setPersonality(pai) - card.looking_for_personality = 0 - - if(pai.mind) update_antag_icons(pai.mind) - - pai_candidates -= candidate - close_browser(usr, "window=findPai") - - if(href_list["new"]) - var/datum/paiCandidate/candidate = locate(href_list["candidate"]) - if(!istype(candidate)) - return - var/option = href_list["option"] - var/t = "" - - switch(option) - if("name") - t = sanitizeSafe(input("Enter a name for your pAI", "pAI Name", candidate.name) as text, MAX_NAME_LEN) - if(t) - candidate.name = t - if("desc") - t = input("Enter a description for your pAI", "pAI Description", candidate.description) as message - if(t) - candidate.description = sanitize(t) - if("role") - t = input("Enter a role for your pAI", "pAI Role", candidate.role) as text - if(t) - candidate.role = sanitize(t) - if("ooc") - t = input("Enter any OOC comments", "pAI OOC Comments", candidate.comments) as message - if(t) - candidate.comments = sanitize(t) - if("chassis") - t = input(usr,"What would you like to use for your mobile chassis icon?") as null|anything in GLOB.possible_chassis - if(t) - candidate.chassis = t - if("say") - t = input(usr,"What theme would you like to use for your speech verbs?") as null|anything in GLOB.possible_say_verbs - if(t) - candidate.say_verb = t - if("save") - candidate.savefile_save(usr) - if("load") - candidate.savefile_load(usr) - //In case people have saved unsanitized stuff. - if(candidate.name) - candidate.name = sanitizeSafe(candidate.name, MAX_NAME_LEN) - if(candidate.description) - candidate.description = sanitize(candidate.description) - if(candidate.role) - candidate.role = sanitize(candidate.role) - if(candidate.comments) - candidate.comments = sanitize(candidate.comments) - if(!candidate.chassis) //default to drone - candidate.chassis = "Drone" - if(!candidate.say_verb)//default to Robotic - candidate.say_verb = "Robotic" - - if("submit") - if(candidate) - candidate.ready = 1 - for(var/obj/item/device/paicard/p in world) - if(p.looking_for_personality == 1) - p.alertUpdate() - close_browser(usr, "window=paiRecruit") - return - - recruitWindow(usr, href_list["allow_submit"] != "0") - -/datum/paiController/proc/recruitWindow(var/mob/M as mob, allowSubmit = 1) - var/datum/paiCandidate/candidate - for(var/datum/paiCandidate/c in pai_candidates) - if(!istype(c) || !istype(M)) - break - if(c.key == M.key) - candidate = c - if(!candidate) - candidate = new /datum/paiCandidate() - candidate.key = M.key - pai_candidates.Add(candidate) - - var/dat = "" - dat += {" - - "} - - dat += {" - - pAI Personality Configuration -

              Please configure your pAI personality's options. Remember, what you enter here could determine whether or not the user requesting a personality chooses you!

              - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
              Name:[candidate.name] 
              What you plan to call yourself. Suggestions: Any character name that would be suitable for a living character OR an AI.
              Description:[candidate.description] 
              What sort of pAI you typically play; your mannerisms, your quirks, etc. This can be as sparse or as detailed as you like.
              Preferred Role:[candidate.role] 
              Do you like to partner with sneaky social ninjas? Like to help security hunt down thugs? Enjoy watching an engineer's back while he saves the day yet again? This doesn't have to be limited to just actually-existing-in-game jobs. Pretty much any general descriptor for what you'd like to be doing works here.
              OOC Comments:[candidate.comments] 
              Anything you'd like to address specifically to the player reading this in an OOC manner. \"I prefer more serious RP.\", \"I'm still learning the interface!\", etc. Feel free to leave this blank if you want.
              Chassis Type:[candidate.chassis] 
              Open up the Character Setup in the OOC tab to view the different models!
              Say Verb:[candidate.say_verb] 
              -
              - - - - - - - -
              - Save Personality -
              - Load Personality -

              - "} - if(allowSubmit) - dat += {" - - -
              Submit Personality

              - "} - dat += {" - - "} - - show_browser(M, dat, "window=paiRecruit;size=580x580;") - -/datum/paiController/proc/findPAI(var/obj/item/device/paicard/p, var/mob/user) - requestRecruits(user) - var/list/available = list() - for(var/datum/paiCandidate/c in paiController.pai_candidates) - if(c.ready) - var/found = 0 - for(var/mob/observer/ghost/o in GLOB.player_list) - if(o.key == c.key && o.MayRespawn()) - found = 1 - if(found) - available.Add(c) - var/dat = "" - - dat += {" - - - - - - - - pAI Availability List

              - "} - dat += "

              Displaying available AI personalities from central database... If there are no entries, or if a suitable entry is not listed, check again later as more personalities may be added.

              " - - for(var/datum/paiCandidate/c in available) - dat += {" - - - - - - - - - - - - - - - - - -
              Name:[c.name]
              Description:[c.description]
              Preferred Role:[c.role]
              OOC Comments:[c.comments]
              - - -
              Download [c.name] -
              -
              - "} - - dat += {" - - - "} - - show_browser(user, dat, "window=findPai") - - -/datum/paiController/proc/requestRecruits(var/mob/user) - inquirer = user - for(var/mob/observer/ghost/O in GLOB.player_list) - if(!O.MayRespawn()) - continue - if(jobban_isbanned(O, "pAI")) - continue - if(asked.Find(O.key)) - if(world.time < asked[O.key] + askDelay) - continue - else - asked.Remove(O.key) - if(O.client) - if(BE_PAI in O.client.prefs.be_special_role) - question(O.client) - -/datum/paiController/proc/question(var/client/C) - spawn(0) - if(!C) return - asked.Add(C.key) - asked[C.key] = world.time - var/response = alert(C, "[inquirer] is requesting a pAI personality. Would you like to play as a personal AI?", "pAI Request", "Yes", "No", "Never for this round") - if(!C) return //handle logouts that happen whilst the alert is waiting for a response. - if(response == "Yes") - recruitWindow(C.mob) - else if (response == "Never for this round") - C.prefs.be_special_role -= BE_PAI diff --git a/code/modules/mob/living/silicon/pai/say.dm b/code/modules/mob/living/silicon/pai/say.dm deleted file mode 100644 index ffbfbc7b04b09..0000000000000 --- a/code/modules/mob/living/silicon/pai/say.dm +++ /dev/null @@ -1,5 +0,0 @@ -/mob/living/silicon/pai/say(var/msg) - if(silence_time) - to_chat(src, "Communication circuits remain uninitialized.") - else - ..(msg) \ No newline at end of file diff --git a/code/modules/mob/living/silicon/pai/software.dm b/code/modules/mob/living/silicon/pai/software.dm deleted file mode 100644 index 58ccd60f408b6..0000000000000 --- a/code/modules/mob/living/silicon/pai/software.dm +++ /dev/null @@ -1,129 +0,0 @@ -var/global/list/pai_emotions = list( - "Happy" = 1, - "Cat" = 2, - "Extremely Happy" = 3, - "Face" = 4, - "Laugh" = 5, - "Off" = 6, - "Sad" = 7, - "Angry" = 8, - "What" = 9, - "Neutral" = 10, - "Silly" = 11, - "Nose" = 12, - "Smirk" = 13, - "Exclamation Points" = 14, - "Question Mark" = 15 - ) - - -var/global/list/pai_software_by_key = list() -var/global/list/default_pai_software = list() -/hook/startup/proc/populate_pai_software_list() - var/r = 1 // I would use ., but it'd sacrifice runtime detection - for(var/type in typesof(/datum/pai_software) - /datum/pai_software) - var/datum/pai_software/P = new type() - if(pai_software_by_key[P.id]) - var/datum/pai_software/O = pai_software_by_key[P.id] - log_error("pAI software module [P.name] has the same key as [O.name]!") - r = 0 - continue - pai_software_by_key[P.id] = P - if(P.default) - default_pai_software[P.id] = P - return r - -/mob/living/silicon/pai/New() - ..() - software = default_pai_software.Copy() - -/mob/living/silicon/pai/proc/paiInterface() - ui_interact(src) - -/mob/living/silicon/pai/ui_interact(mob/user, ui_key = "main", datum/nanoui/ui = null, force_open = 1) - if(user != src) - if(ui) ui.set_status(STATUS_CLOSE, 0) - return - - if(ui_key != "main") - var/datum/pai_software/S = software[ui_key] - if(S && !S.toggle) - S.on_ui_interact(src, ui, force_open) - else - if(ui) ui.set_status(STATUS_CLOSE, 0) - return - - var/data[0] - - // Software we have bought - var/bought_software[0] - // Software we have not bought - var/not_bought_software[0] - - for(var/key in pai_software_by_key) - var/datum/pai_software/S = pai_software_by_key[key] - var/software_data[0] - software_data["name"] = S.name - software_data["id"] = S.id - if(key in software) - software_data["on"] = S.is_active(src) - bought_software[++bought_software.len] = software_data - else - software_data["ram"] = S.ram_cost - not_bought_software[++not_bought_software.len] = software_data - - data["bought"] = bought_software - data["not_bought"] = not_bought_software - data["available_ram"] = ram - - // Emotions - var/emotions[0] - for(var/name in pai_emotions) - var/emote[0] - emote["name"] = name - emote["id"] = pai_emotions[name] - emotions[++emotions.len] = emote - - data["emotions"] = emotions - data["current_emotion"] = card.current_emotion - - ui = SSnano.try_update_ui(user, src, ui_key, ui, data, force_open) - if (!ui) - ui = new(user, src, ui_key, "pai_interface.tmpl", "pAI Software Interface", 450, 600) - ui.set_initial_data(data) - ui.open() - ui.set_auto_update(1) - -/mob/living/silicon/pai/OnSelfTopic(href_list, topic_status) - if (topic_status == STATUS_INTERACTIVE) - if(href_list["software"]) - var/soft = href_list["software"] - var/datum/pai_software/S = software[soft] - if(S.toggle) - S.toggle(src) - else - ui_interact(src, ui_key = soft) - return TOPIC_HANDLED - - else if(href_list["stopic"]) - var/soft = href_list["stopic"] - var/datum/pai_software/S = software[soft] - if(S) - return S.Topic(list2params(href_list), href_list) - - else if(href_list["purchase"]) - var/soft = href_list["purchase"] - var/datum/pai_software/S = pai_software_by_key[soft] - if(S && (ram >= S.ram_cost)) - ram -= S.ram_cost - software[S.id] = S - S.on_purchase(src) - return TOPIC_HANDLED - - else if(href_list["image"]) - var/img = text2num(href_list["image"]) - if(1 <= img && img <= pai_emotions.len) - card.setEmotion(img) - return TOPIC_HANDLED - - return ..() diff --git a/code/modules/mob/living/silicon/pai/software_modules.dm b/code/modules/mob/living/silicon/pai/software_modules.dm deleted file mode 100644 index 5811aa4e4eaa0..0000000000000 --- a/code/modules/mob/living/silicon/pai/software_modules.dm +++ /dev/null @@ -1,308 +0,0 @@ -/datum/pai_software - /// Name for the software. This is used as the button text when buying or opening/toggling the software - var/name = "pAI software module" - - /// RAM cost; pAIs start with 100 RAM, spending it on programs - var/ram_cost = 0 - - /// ID for the software. This must be unique - var/id = "" - - /// Whether this software is a toggle or not. If true, should override toggle() and is_active(). If not, should override on_ui_interact() and Topic() - var/toggle = TRUE - - /// Whether pAIs should automatically receive this module at no cost - var/default = FALSE - - -/datum/pai_software/proc/on_ui_interact(mob/living/silicon/pai/user, datum/nanoui/ui, force_open = TRUE) - return - - -/datum/pai_software/proc/toggle(mob/living/silicon/pai/user) - return - - -/datum/pai_software/proc/is_active(mob/living/silicon/pai/user) - return - - -/datum/pai_software/proc/on_purchase(mob/living/silicon/pai/user) - return - - -/datum/pai_software/directives - name = "Directives" - ram_cost = 0 - id = "directives" - toggle = FALSE - default = TRUE - - -/datum/pai_software/directives/on_ui_interact(mob/living/silicon/pai/user, datum/nanoui/ui, force_open = TRUE) - var/data[0] - data["master"] = user.master - data["dna"] = user.master_dna - data["prime"] = user.pai_law0 - data["supplemental"] = user.pai_laws - ui = SSnano.try_update_ui(user, user, id, ui, data, force_open) - if (!ui) - ui = new(user, user, id, "pai_directives.tmpl", "pAI Directives", 450, 600) - ui.set_initial_data(data) - ui.open() - ui.set_auto_update(1) - - -/datum/pai_software/directives/Topic(href, href_list) - var/mob/living/silicon/pai/P = usr - if (!istype(P)) - return - if (href_list["getdna"]) - var/mob/living/M = P.loc - var/count = 0 - while (!istype(M, /mob/living)) - if (!M || !M.loc || count > 6) - to_chat(src, "You are not being carried by anyone!") - return FALSE - M = M.loc - count++ - var/answer = input(M, "[P] is requesting a DNA sample from you. Will you allow it to confirm your identity?", "[P] Check DNA", "No") in list("Yes", "No") - if (answer == "Yes") - var/turf/T = get_turf_or_move(P.loc) - for (var/mob/v in viewers(T)) - v.show_message("[M] presses \his thumb against [P].", 3, "[P] makes a sharp clicking sound as it extracts DNA material from [M].", 2) - var/datum/dna/dna = M.dna - to_chat(P, "

              [M]'s UE string : [dna.unique_enzymes]

              ") - if (dna.unique_enzymes == P.master_dna) - to_chat(P, "DNA is a match to stored Master DNA.") - else - to_chat(P, "DNA does not match stored Master DNA.") - else - to_chat(P, "[M] does not seem like \he is going to provide a DNA sample willingly.") - return TRUE - - -/datum/pai_software/radio_config - name = "Radio Configuration" - ram_cost = 0 - id = "radio" - toggle = FALSE - default = TRUE - - -/datum/pai_software/radio_config/on_ui_interact(mob/living/silicon/pai/user, datum/nanoui/ui, force_open = TRUE) - var/data[0] - data["listening"] = user.silicon_radio.broadcasting - data["frequency"] = format_frequency(user.silicon_radio.frequency) - var/channels[0] - for (var/ch_name in user.silicon_radio.channels) - var/ch_stat = user.silicon_radio.channels[ch_name] - var/ch_dat[0] - ch_dat["name"] = ch_name - ch_dat["listening"] = !!(ch_stat & user.silicon_radio.FREQ_LISTENING) - channels[++channels.len] = ch_dat - data["channels"] = channels - ui = SSnano.try_update_ui(user, user, id, ui, data, force_open) - if (!ui) - ui = new(user, user, id, "pai_radio.tmpl", "Radio Configuration", 300, 150) - ui.set_initial_data(data) - ui.open() - - -/datum/pai_software/radio_config/Topic(href, href_list) - var/mob/living/silicon/pai/P = usr - if (!istype(P)) - return - P.silicon_radio.Topic(href, href_list) - return TRUE - - -/datum/pai_software/crew_manifest - name = "Crew Manifest" - ram_cost = 5 - id = "manifest" - toggle = FALSE - - -/datum/pai_software/crew_manifest/on_ui_interact(mob/living/silicon/pai/user, datum/nanoui/ui, force_open = TRUE) - var/data[0] - data["crew_manifest"] = html_crew_manifest() - ui = SSnano.try_update_ui(user, user, id, ui, data, force_open) - if (!ui) - ui = new(user, user, id, "crew_manifest.tmpl", "Crew Manifest", 450, 600) - ui.set_initial_data(data) - ui.open() - ui.set_auto_update(1) - - -/datum/pai_software/door_jack - name = "Door Jack" - ram_cost = 30 - id = "door_jack" - toggle = FALSE - - -/datum/pai_software/door_jack/on_ui_interact(mob/living/silicon/pai/user, datum/nanoui/ui, force_open = TRUE) - var/data[0] - data["cable"] = user.cable != null - data["machine"] = user.cable && (user.cable.machine != null) - data["inprogress"] = user.hackdoor != null - data["progress_a"] = round(user.hackprogress / 10) - data["progress_b"] = user.hackprogress % 10 - data["aborted"] = user.hack_aborted - ui = SSnano.try_update_ui(user, user, id, ui, data, force_open) - if (!ui) - ui = new(user, user, id, "pai_doorjack.tmpl", "Door Jack", 300, 150) - ui.set_initial_data(data) - ui.open() - ui.set_auto_update(1) - - -/datum/pai_software/door_jack/Topic(href, href_list) - var/mob/living/silicon/pai/P = usr - if (!istype(P)) - return FALSE - if (href_list["jack"]) - if(P.cable && P.cable.machine) - P.hackdoor = P.cable.machine - P.hackloop() - return TRUE - else if (href_list["cancel"]) - P.hackdoor = null - return TRUE - else if (href_list["cable"]) - var/turf/T = get_turf_or_move(P.loc) - P.hack_aborted = 0 - P.cable = new (T) - P.visible_message( - SPAN_ITALIC("A port on [P] opens to reveal \a [P.cable], which promptly falls to the floor."), - SPAN_ITALIC("You open a port to reveal your [P.cable] and unspool it to the floor."), - SPAN_ITALIC("You hear the soft click something falling to the floor.") - ) - return TRUE - - -/mob/living/silicon/pai/proc/hackloop() - var/turf/T = get_turf_or_move(loc) - 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 - to_chat(AI, "Network Alert: Brute-force encryption crack in progress. Unable to pinpoint location.") - var/obj/machinery/door/D = cable.machine - if (!istype(D)) - hack_aborted = 1 - hackprogress = 0 - cable.machine = null - hackdoor = null - return - while (hackprogress < 1000) - if (cable && cable.machine == D && cable.machine == hackdoor && get_dist(src, hackdoor) <= 1) - hackprogress = min(hackprogress+rand(1, 20), 1000) - else - hack_aborted = 1 - hackprogress = 0 - hackdoor = null - return - if (hackprogress >= 1000) - hackprogress = 0 - D.open() - cable.machine = null - return - sleep(10) - - -/datum/pai_software/atmosphere_sensor - name = "Atmosphere Sensor" - ram_cost = 5 - id = "atmos_sense" - toggle = FALSE - - -/datum/pai_software/atmosphere_sensor/on_ui_interact(mob/living/silicon/pai/user, datum/nanoui/ui, force_open = TRUE) - var/data[0] - var/turf/T = get_turf_or_move(user.loc) - if (!T) - data["reading"] = 0 - data["pressure"] = 0 - data["temperature"] = 0 - data["temperatureC"] = 0 - data["gas"] = list() - else - var/datum/gas_mixture/env = T.return_air() - data["reading"] = 1 - var/pres = env.return_pressure() * 10 - data["pressure"] = "[round(pres/10)].[pres%10]" - data["temperature"] = round(env.temperature) - data["temperatureC"] = round(env.temperature-T0C) - var/t_moles = env.total_moles - var/gases[0] - for (var/g in env.gas) - var/gas[0] - gas["name"] = gas_data.name[g] - gas["percent"] = round((env.gas[g] / t_moles) * 100) - gases[++gases.len] = gas - data["gas"] = gases - ui = SSnano.try_update_ui(user, user, id, ui, data, force_open) - if (!ui) - ui = new(user, user, id, "pai_atmosphere.tmpl", "Atmosphere Sensor", 350, 300) - ui.set_initial_data(data) - ui.open() - - -/datum/pai_software/sec_hud - name = "Security HUD" - ram_cost = 20 - id = "sec_hud" - - -/datum/pai_software/sec_hud/toggle(mob/living/silicon/pai/user) - user.secHUD = !user.secHUD - - -/datum/pai_software/sec_hud/is_active(mob/living/silicon/pai/user) - return user.secHUD - - -/datum/pai_software/med_hud - name = "Medical HUD" - ram_cost = 20 - id = "med_hud" - - -/datum/pai_software/med_hud/toggle(mob/living/silicon/pai/user) - user.medHUD = !user.medHUD - - -/datum/pai_software/med_hud/is_active(mob/living/silicon/pai/user) - return user.medHUD - - -/datum/pai_software/translator - name = "Universal Translator" - ram_cost = 35 - id = "translator" - var/list/languages = list( - LANGUAGE_EAL, - LANGUAGE_HUMAN_ARABIC, - LANGUAGE_HUMAN_CHINESE, - LANGUAGE_HUMAN_IBERIAN, - LANGUAGE_HUMAN_INDIAN, - LANGUAGE_HUMAN_RUSSIAN, - LANGUAGE_HUMAN_SELENIAN, - LANGUAGE_SKRELLIAN, - LANGUAGE_UNATHI_SINTA - ) - -/datum/pai_software/translator/toggle(mob/living/silicon/pai/user) - user.translator_on = !user.translator_on - if (user.translator_on) - for (var/language in languages) - user.add_language(language) - else - for (var/language in languages) - user.remove_language(language) - - -/datum/pai_software/translator/is_active(mob/living/silicon/pai/user) - return user.translator_on diff --git a/code/modules/mob/living/silicon/posi_brainmob.dm b/code/modules/mob/living/silicon/posi_brainmob.dm deleted file mode 100644 index f73b35f9a84b8..0000000000000 --- a/code/modules/mob/living/silicon/posi_brainmob.dm +++ /dev/null @@ -1,104 +0,0 @@ -/mob/living/silicon/sil_brainmob - - meat_type = null - meat_amount = 0 - skin_material = null - skin_amount = 0 - bone_material = null - bone_amount = 0 - - use_me = 0 //Can't use the me verb, it's a freaking immobile brain - icon = 'icons/obj/surgery.dmi' - icon_state = "brain-prosthetic" - silicon_subsystems = list( - /datum/nano_module/law_manager - ) - - var/obj/item/organ/internal/posibrain/container = null - var/emp_damage = 0//Handles a type of MMI damage - var/alert = null - var/list/owner_channels = list() - var/list/law_channels = list() - -/mob/living/silicon/sil_brainmob/New() - reagents = new/datum/reagents(1000, src) - if(istype(loc, /obj/item/organ/internal/posibrain)) - container = loc - add_language(LANGUAGE_ROBOT_GLOBAL) - ..() - -/mob/living/silicon/sil_brainmob/Destroy() - if(key) //If there is a mob connected to this thing. Have to check key twice to avoid false death reporting. - if(stat!=DEAD) //If not dead. - death(1) //Brains can die again. AND THEY SHOULD AHA HA HA HA HA HA - ghostize() //Ghostize checks for key so nothing else is necessary. - return ..() - -/mob/living/silicon/sil_brainmob/UpdateLyingBuckledAndVerbStatus() - if(container && istype(container, /obj/item/organ/internal/posibrain) && istype(container.loc, /turf)) - use_me = 1 - -/mob/living/silicon/sil_brainmob/isSynthetic() - return 1 - -/mob/living/silicon/sil_brainmob/binarycheck() - return isSynthetic() - -/mob/living/silicon/sil_brainmob/check_has_mouth() - return 0 - -/mob/living/silicon/sil_brainmob/show_laws(mob/M) - if(M) - to_chat(M, "Obey these laws [M]:") - src.laws_sanity_check() - src.laws.show_laws(M) - -/mob/living/silicon/sil_brainmob/open_subsystem(var/subsystem_type, var/mob/given = src) - update_owner_channels() - return ..(subsystem_type, given) - -/mob/living/silicon/sil_brainmob/proc/update_owner_channels() - var/mob/living/carbon/human/owner = container.owner - if(!owner) return - - owner_channels.Cut() - - var/obj/item/device/radio/headset/R - if(owner.l_ear && istype(owner.l_ear,/obj/item/device/radio)) - R = owner.l_ear - else if(owner.r_ear && istype(owner.r_ear,/obj/item/device/radio)) - R = owner.r_ear - - if(!R) return 0 - - var/list/new_channels = list() - new_channels["Common"] = ";" - for(var/i = 1 to R.channels.len) - var/channel = R.channels[i] - var/key = get_radio_key_from_channel(channel) - new_channels[channel] = key - owner_channels = new_channels - return 1 - -/mob/living/silicon/sil_brainmob/statelaw(var/law, var/mob/living/L = src) - if(container && container.owner) - L = container.owner - return ..(law, L) - -/mob/living/silicon/sil_brainmob/proc/update_law_channels() - update_owner_channels() - law_channels.Cut() - law_channels |= additional_law_channels - law_channels |= owner_channels - return law_channels - -/mob/living/silicon/sil_brainmob/law_channels() - return law_channels - -/mob/living/silicon/sil_brainmob/statelaws(var/datum/ai_laws/laws) - update_law_channels() - if(isnull(law_channels[lawchannel])) - to_chat(src, "[lawchannel]: Unable to state laws. Communication method unavailable.") - return 0 - - dostatelaws(lawchannel, law_channels[lawchannel], laws) diff --git a/code/modules/mob/living/silicon/robot/analyzer.dm b/code/modules/mob/living/silicon/robot/analyzer.dm deleted file mode 100644 index f452dc23383dd..0000000000000 --- a/code/modules/mob/living/silicon/robot/analyzer.dm +++ /dev/null @@ -1,102 +0,0 @@ -// -//Robotic Component Analyser, basically a health analyser for robots -// -/obj/item/device/robotanalyzer - name = "robot analyzer" - icon = 'icons/obj/robot_analyzer.dmi' - icon_state = "robotanalyzer" - item_state = "analyzer" - desc = "A hand-held scanner able to diagnose robotic injuries." - obj_flags = OBJ_FLAG_CONDUCTIBLE - slot_flags = SLOT_BELT - throwforce = 3 - w_class = ITEM_SIZE_SMALL - throw_speed = 5 - throw_range = 10 - origin_tech = list(TECH_MAGNET = 2, TECH_BIO = 1, TECH_ENGINEERING = 2) - matter = list(MATERIAL_STEEL = 250, MATERIAL_GLASS = 100, MATERIAL_PLASTIC = 75) - var/mode = 1; - -/proc/roboscan(mob/living/M, mob/living/user) - if((MUTATION_CLUMSY in user.mutations) && prob(50)) - to_chat(user, text("You try to analyze the floor's vitals!")) - for(var/mob/O in viewers(M, null)) - O.show_message(text("[user] has analyzed the floor's vitals!"), 1) - user.show_message(text("Analyzing Results for The floor:\n\t Overall Status: Healthy"), 1) - user.show_message(text("\t Damage Specifics: [0]-[0]-[0]-[0]"), 1) - user.show_message("Key: Suffocation/Toxin/Burns/Brute", 1) - user.show_message("Body Temperature: ???", 1) - return - - var/scan_type - if(istype(M, /mob/living/silicon/robot)) - scan_type = "robot" - else if(istype(M, /mob/living/carbon/human)) - scan_type = "prosthetics" - else - to_chat(user, "You can't analyze non-robotic things!") - return - - user.visible_message("\The [user] has analyzed [M]'s components.","You have analyzed [M]'s components.") - switch(scan_type) - if("robot") - var/BU = M.getFireLoss() > 50 ? "[M.getFireLoss()]" : M.getFireLoss() - var/BR = M.getBruteLoss() > 50 ? "[M.getBruteLoss()]" : M.getBruteLoss() - user.show_message("Analyzing Results for [M]:\n\t Overall Status: [M.stat > 1 ? "fully disabled" : "[M.health - M.getHalLoss()]% functional"]") - user.show_message("\t Key: Electronics/Brute", 1) - user.show_message("\t Damage Specifics: [BU] - [BR]") - if(M.stat == DEAD) - user.show_message("Time of Failure: [time2text(worldtime2stationtime(M.timeofdeath))]") - var/mob/living/silicon/robot/H = M - var/list/damaged = H.get_damaged_components(1,1,1) - user.show_message("Localized Damage:",1) - if(length(damaged)>0) - for(var/datum/robot_component/org in damaged) - user.show_message(text("\t []: [][] - [] - [] - []", \ - capitalize(org.name), \ - (org.installed == -1) ? "DESTROYED " :"",\ - (org.electronics_damage > 0) ? "[org.electronics_damage]" :0, \ - (org.brute_damage > 0) ? "[org.brute_damage]" :0, \ - (org.toggled) ? "Toggled ON" : "Toggled OFF",\ - (org.powered) ? "Power ON" : "Power OFF"),1) - else - user.show_message("\t Components are OK.",1) - if(H.emagged && prob(5)) - user.show_message("\t ERROR: INTERNAL SYSTEMS COMPROMISED",1) - user.show_message("Operating Temperature: [M.bodytemperature-T0C]°C ([M.bodytemperature*1.8-459.67]°F)", 1) - - if("prosthetics") - - var/mob/living/carbon/human/H = M - to_chat(user, "Analyzing Results for \the [H]:") - to_chat(user, "Key: Electronics/Brute") - var/obj/item/organ/internal/cell/C = H.internal_organs_by_name[BP_CELL] - if(C) - to_chat(user, SPAN_NOTICE("Cell charge: [C.percent()] %")) - else - to_chat(user, SPAN_NOTICE("Cell charge: ERROR - Cell not present")) - to_chat(user, "External prosthetics:") - var/organ_found - for(var/obj/item/organ/external/E in H.organs) - if(!BP_IS_ROBOTIC(E)) - continue - organ_found = 1 - to_chat(user, "[E.name]: [E.brute_dam] [E.burn_dam]") - if(!organ_found) - to_chat(user, "No prosthetics located.") - to_chat(user, "
              ") - to_chat(user, "Internal prosthetics:") - organ_found = null - for(var/obj/item/organ/O in H.internal_organs) - if(!BP_IS_ROBOTIC(O)) - continue - organ_found = 1 - to_chat(user, "[O.name]: [(O.status & ORGAN_DEAD) ? "DESTROYED" : O.damage]") - if(!organ_found) - to_chat(user, "No prosthetics located.") - return - -/obj/item/device/robotanalyzer/attack(mob/living/M, mob/living/user) - roboscan(M, user) - src.add_fingerprint(user) - return diff --git a/code/modules/mob/living/silicon/robot/component.dm b/code/modules/mob/living/silicon/robot/component.dm deleted file mode 100644 index 32c58c7b173d7..0000000000000 --- a/code/modules/mob/living/silicon/robot/component.dm +++ /dev/null @@ -1,289 +0,0 @@ -// TODO: remove the robot.mmi and robot.cell variables and completely rely on the robot component system - -/datum/robot_component/var/name -/datum/robot_component/var/installed = 0 -/datum/robot_component/var/powered = 0 -/datum/robot_component/var/toggled = 1 -/datum/robot_component/var/brute_damage = 0 -/datum/robot_component/var/electronics_damage = 0 -/datum/robot_component/var/idle_usage = 0 // Amount of power used every MC tick. In joules. -/datum/robot_component/var/active_usage = 0 // Amount of power used for every action. Actions are module-specific. Actuator for each tile moved, etc. -/datum/robot_component/var/max_damage = 30 // HP of this component. -/datum/robot_component/var/mob/living/silicon/robot/owner - -// The actual device object that has to be installed for this. -/datum/robot_component/var/external_type = null - -// The wrapped device(e.g. radio), only set if external_type isn't null -/datum/robot_component/var/obj/item/wrapped = null - -/datum/robot_component/New(mob/living/silicon/robot/R) - src.owner = R - -/datum/robot_component/proc/accepts_component(var/obj/item/thing) - . = istype(thing, external_type) - -/datum/robot_component/proc/install() - return - -/datum/robot_component/proc/uninstall() - return - -/datum/robot_component/proc/destroy() - if (istype(wrapped, /obj/item/robot_parts/robot_component)) - var/obj/item/robot_parts/robot_component/comp = wrapped - wrapped.icon_state = comp.icon_state_broken - - installed = -1 - uninstall() - -/datum/robot_component/proc/repair() - if (istype(wrapped, /obj/item/robot_parts/robot_component)) - var/obj/item/robot_parts/robot_component/comp = wrapped - wrapped.icon_state = comp.icon_state - - installed = 1 - install() - -/datum/robot_component/proc/take_damage(brute, electronics, sharp, edge) - if(installed != 1) return - - brute_damage += brute - electronics_damage += electronics - - if(brute_damage + electronics_damage >= max_damage) destroy() - -/datum/robot_component/proc/heal_damage(brute, electronics) - if(installed != 1) - // If it's not installed, can't repair it. - return 0 - - brute_damage = max(0, brute_damage - brute) - electronics_damage = max(0, electronics_damage - electronics) - -/datum/robot_component/proc/is_powered() - return (installed == 1) && (brute_damage + electronics_damage < max_damage) && (!idle_usage || powered) - -/datum/robot_component/proc/update_power_state() - if(toggled == 0) - powered = 0 - return - if(owner.cell_use_power(idle_usage)) - powered = 1 - else - powered = 0 - -// ARMOUR -// Protects the cyborg from damage. Usually first module to be hit -// No power usage -/datum/robot_component/armour - name = "armour plating" - external_type = /obj/item/robot_parts/robot_component/armour - max_damage = 150 - -// LIGHT ARMOUR -// Same as armour, but for flying borgs - Less protection. -/datum/robot_component/armour/light - name = "light armour plating" - external_type = /obj/item/robot_parts/robot_component/armour/light - max_damage = 75 - -/datum/robot_component/armour/accepts_component(var/obj/item/thing) - . = (!istype(thing, /obj/item/robot_parts/robot_component/armour/exosuit) && ..()) - -// ACTUATOR -// Enables movement. -// Uses no power when idle. Uses 200J for each tile the cyborg moves. -/datum/robot_component/actuator - name = "actuator" - idle_usage = 0 - active_usage = 200 - external_type = /obj/item/robot_parts/robot_component/actuator - max_damage = 50 - - -//A fixed and much cleaner implementation of /tg/'s special snowflake code. -/datum/robot_component/actuator/is_powered() - return (installed == 1) && (brute_damage + electronics_damage < max_damage) - - -// POWER CELL -// Stores power (how unexpected..) -// No power usage -/datum/robot_component/cell - name = "power cell" - max_damage = 50 - var/obj/item/cell/stored_cell = null - -/datum/robot_component/cell/destroy() - ..() - stored_cell = owner.cell - owner.cell = null - -/datum/robot_component/cell/repair() - owner.cell = stored_cell - stored_cell = null - -// RADIO -// Enables radio communications -// Uses no power when idle. Uses 10J for each received radio message, 50 for each transmitted message. -/datum/robot_component/radio - name = "radio" - external_type = /obj/item/robot_parts/robot_component/radio - idle_usage = 15 //it's not actually possible to tell when we receive a message over our radio, so just use 10W every tick for passive listening - active_usage = 75 //transmit power - max_damage = 40 - - -// BINARY RADIO -// Enables binary communications with other cyborgs/AIs -// Uses no power when idle. Uses 10J for each received radio message, 50 for each transmitted message -/datum/robot_component/binary_communication - name = "binary communication device" - external_type = /obj/item/robot_parts/robot_component/binary_communication_device - idle_usage = 5 - active_usage = 25 - max_damage = 30 - - -// CAMERA -// Enables cyborg vision. Can also be remotely accessed via consoles. -// Uses 10J constantly -/datum/robot_component/camera - name = "camera" - external_type = /obj/item/robot_parts/robot_component/camera - idle_usage = 10 - max_damage = 40 - var/obj/machinery/camera/camera - -/datum/robot_component/camera/New(mob/living/silicon/robot/R) - ..() - camera = R.camera - -/datum/robot_component/camera/update_power_state() - ..() - if (camera) - camera.status = powered - -/datum/robot_component/camera/install() - if (camera) - camera.status = 1 - -/datum/robot_component/camera/uninstall() - if (camera) - camera.status = 0 - -/datum/robot_component/camera/destroy() - if (camera) - camera.status = 0 - -// SELF DIAGNOSIS MODULE -// Analyses cyborg's modules, providing damage readouts and basic information -// Uses 1kJ burst when analysis is done -/datum/robot_component/diagnosis_unit - name = "self-diagnosis unit" - active_usage = 1000 - external_type = /obj/item/robot_parts/robot_component/diagnosis_unit - max_damage = 30 - - - - -// HELPER STUFF - - - -// Initializes cyborg's components. Technically, adds default set of components to new borgs -/mob/living/silicon/robot/proc/initialize_components() - components["actuator"] = new/datum/robot_component/actuator(src) - components["radio"] = new/datum/robot_component/radio(src) - components["power cell"] = new/datum/robot_component/cell(src) - components["diagnosis unit"] = new/datum/robot_component/diagnosis_unit(src) - components["camera"] = new/datum/robot_component/camera(src) - components["comms"] = new/datum/robot_component/binary_communication(src) - components["armour"] = new/datum/robot_component/armour(src) - -// Checks if component is functioning -/mob/living/silicon/robot/proc/is_component_functioning(module_name) - var/datum/robot_component/C = components[module_name] - return C && C.installed == 1 && C.toggled && C.is_powered() - -// Returns component by it's string name -/mob/living/silicon/robot/proc/get_component(var/component_name) - var/datum/robot_component/C = components[component_name] - return C - - - -// COMPONENT OBJECTS - - - -// Component Objects -// These objects are visual representation of modules -/obj/item/robot_parts/robot_component - icon = 'icons/obj/robot_component.dmi' - icon_state = "working" - var/brute = 0 - var/burn = 0 - var/icon_state_broken = "broken" - var/total_dam = 0 - var/max_dam = 30 - -/obj/item/robot_parts/robot_component/proc/take_damage(var/brute_amt, var/burn_amt) - brute += brute_amt - burn += burn_amt - total_dam = brute+burn - if(total_dam >= max_dam) - var/obj/item/stock_parts/circuitboard/broken/broken_device = new (get_turf(src)) - if(icon_state_broken != "broken") - broken_device.icon = src.icon - broken_device.icon_state = icon_state_broken - broken_device.name = "broken [name]" - return broken_device - return 0 - -/obj/item/robot_parts/robot_component/proc/is_functional() - return ((brute + burn) < max_dam) - -/obj/item/robot_parts/robot_component/binary_communication_device - name = "binary communication device" - desc = "A module used for binary communications over encrypted frequencies, commonly used by synthetic robots." - icon_state = "binradio" - icon_state_broken = "binradio_broken" - -/obj/item/robot_parts/robot_component/actuator - name = "actuator" - desc = "A modular, hydraulic actuator used by exosuits and robots alike for movement and manipulation." - icon_state = "motor" - icon_state_broken = "motor_broken" - -/obj/item/robot_parts/robot_component/armour - name = "armour plating" - desc = "A pair of flexible, adaptable armor plates, used to protect the internals of robots." - icon_state = "armor" - icon_state_broken = "armor_broken" - -/obj/item/robot_parts/robot_component/armour/light - name = "light-weight armour plating" - desc = "A pair of flexible, light armor plates, used to protect the internals of robots equipped with anti-gravity frames." - icon_state = "armor_l" - icon_state_broken = "armor_l_broken" - -/obj/item/robot_parts/robot_component/camera - name = "camera" - desc = "A modified camera module used as a visual receptor for robots and exosuits, also serving as a relay for wireless video feed." - icon_state = "camera" - icon_state_broken = "camera_broken" - -/obj/item/robot_parts/robot_component/diagnosis_unit - name = "diagnosis unit" - desc = "An internal computer and sensors used by robots and exosuits to accurately diagnose any system discrepancies on their components." - icon_state = "analyser" - icon_state_broken = "analyser_broken" - -/obj/item/robot_parts/robot_component/radio - name = "radio" - desc = "A modular, multi-frequency radio used by robots and exosuits to enable communication systems. Comes with built-in subspace receivers." - icon_state = "radio" - icon_state_broken = "radio_broken" \ No newline at end of file diff --git a/code/modules/mob/living/silicon/robot/custom_sprites.dm b/code/modules/mob/living/silicon/robot/custom_sprites.dm deleted file mode 100644 index e508856b6b493..0000000000000 --- a/code/modules/mob/living/silicon/robot/custom_sprites.dm +++ /dev/null @@ -1,35 +0,0 @@ - -//list(ckey = real_name,) -//Since the ckey is used as the icon_state, the current system will only permit a single custom robot sprite per ckey. -//While it might be possible for a ckey to use that custom sprite for several real_names, it seems rather pointless to support it. -var/global/list/robot_custom_icons - -/hook/startup/proc/load_robot_custom_sprites() - var/config_file = file2text(CUSTOM_ITEM_SYNTH_CONFIG) - var/list/lines = splittext(config_file, "\n") - - robot_custom_icons = list() - for(var/line in lines) - //split entry into ckey and real_name - var/split_idx = findtext(line, "-") //this works if ckey cannot contain dashes, and findtext starts from the beginning - if(!split_idx || split_idx == length(line)) - continue //bad entry - - var/ckey = copytext_char(line, 1, split_idx) - var/real_name = copytext_char(line, split_idx+1) - - robot_custom_icons[ckey] = real_name - return 1 - -/mob/living/silicon/robot/proc/set_custom_sprite() - var/rname = robot_custom_icons[ckey] - if(rname && rname == real_name) - custom_sprite = TRUE - icon = CUSTOM_ITEM_SYNTH - var/list/valid_states = icon_states(icon) - if(icon_state == "robot") - if("[ckey]-Standard" in valid_states) - icon_state = "[ckey]-Standard" - else - to_chat(src, "Could not locate [ckey]-Standard sprite.") - icon = 'icons/mob/robots.dmi' diff --git a/code/modules/mob/living/silicon/robot/death.dm b/code/modules/mob/living/silicon/robot/death.dm deleted file mode 100644 index 0ef350bcfe49d..0000000000000 --- a/code/modules/mob/living/silicon/robot/death.dm +++ /dev/null @@ -1,15 +0,0 @@ -/mob/living/silicon/robot/dust() - //Delete the MMI first so that it won't go popping out. - if(mmi) - QDEL_NULL(mmi) - ..() - -/mob/living/silicon/robot/death(gibbed,deathmessage, show_dead_message) - if(camera) - camera.status = 0 - if(module) - for(var/obj/item/gripper/G in module.equipment) - G.drop_gripped_item() - locked = FALSE - remove_robot_verbs() - ..(gibbed,"shudders violently for a moment, then becomes motionless, its eyes slowly darkening.", "You have suffered a critical system failure, and are dead.") diff --git a/code/modules/mob/living/silicon/robot/drone/drone.dm b/code/modules/mob/living/silicon/robot/drone/drone.dm deleted file mode 100644 index a726b6f28a77e..0000000000000 --- a/code/modules/mob/living/silicon/robot/drone/drone.dm +++ /dev/null @@ -1,414 +0,0 @@ -var/global/list/mob_hat_cache = list() -/proc/get_hat_icon(var/obj/item/hat, var/offset_x = 0, var/offset_y = 0) - var/t_state = hat.icon_state - if(hat.item_state_slots && hat.item_state_slots[slot_head_str]) - t_state = hat.item_state_slots[slot_head_str] - else if(hat.item_state) - t_state = hat.item_state - var/key = "[t_state]_[offset_x]_[offset_y]" - if(!mob_hat_cache[key]) // Not ideal as there's no guarantee all hat icon_states - var/t_icon = GLOB.default_onmob_icons[slot_head_str] // are unique across multiple dmis, but whatever. - if(hat.icon_override) - t_icon = hat.icon_override - else if(hat.item_icons && (slot_head_str in hat.item_icons)) - t_icon = hat.item_icons[slot_head_str] - var/image/I = image(icon = t_icon, icon_state = t_state) - I.pixel_x = offset_x - I.pixel_y = offset_y - mob_hat_cache[key] = I - return mob_hat_cache[key] - -/mob/living/silicon/robot/drone - name = "maintenance drone" - real_name = "drone" - icon = 'icons/mob/robots_drones.dmi' - icon_state = "repairbot" - maxHealth = 35 - health = 35 - cell_emp_mult = 1 - universal_speak = FALSE - universal_understand = TRUE - gender = NEUTER - pass_flags = PASS_FLAG_TABLE - faction = "silicon" - braintype = "Drone" - lawupdate = FALSE - density = TRUE - req_access = list(access_engine, access_robotics) - integrated_light_max_bright = 0.5 - local_transmit = 1 - possession_candidate = 1 - - can_pull_size = ITEM_SIZE_NORMAL - can_pull_mobs = MOB_PULL_SMALLER - - mob_bump_flag = SIMPLE_ANIMAL - mob_swap_flags = SIMPLE_ANIMAL - mob_push_flags = SIMPLE_ANIMAL - mob_always_swap = 1 - - mob_size = MOB_MEDIUM // Small mobs can't open doors, it's a huge pain for drones. - - laws = /datum/ai_laws/drone - - silicon_camera = /obj/item/device/camera/siliconcam/drone_camera - - //Used for self-mailing. - var/mail_destination = "" - var/module_type = /obj/item/robot_module/drone - var/obj/item/hat - var/hat_x_offset = 0 - var/hat_y_offset = -13 - - holder_type = /obj/item/holder/drone - - //[inf] - speech_sounds = list( - 'sound/voice/emotes/robot_talk_heavy_1.ogg', - 'sound/voice/emotes/robot_talk_heavy_2.ogg', - 'sound/voice/emotes/robot_talk_heavy_3.ogg', - 'sound/voice/emotes/robot_talk_heavy_4.ogg' - ) - //[/inf] - -/mob/living/silicon/robot/drone/Initialize() - . = ..() - - verbs += /mob/living/proc/hide - remove_language(LANGUAGE_ROBOT_GLOBAL) - add_language(LANGUAGE_ROBOT_GLOBAL, 0) - add_language(LANGUAGE_DRONE_GLOBAL, 1) - default_language = all_languages[LANGUAGE_DRONE_GLOBAL] - // NO BRAIN. - mmi = null - - //We need to screw with their HP a bit. They have around one fifth as much HP as a full borg. - for(var/V in components) if(V != "power cell") - var/datum/robot_component/C = components[V] - C.max_damage = 10 - - verbs -= /mob/living/silicon/robot/verb/Namepick - update_icon() - - GLOB.moved_event.register(src, src, /mob/living/silicon/robot/drone/proc/on_moved) - -/mob/living/silicon/robot/drone/Destroy() - if(hat) - hat.dropInto(loc) - hat = null - GLOB.moved_event.unregister(src, src, /mob/living/silicon/robot/drone/proc/on_moved) - . = ..() - -/mob/living/silicon/robot/drone/proc/on_moved(var/atom/movable/am, var/turf/old_loc, var/turf/new_loc) - old_loc = get_turf(old_loc) - new_loc = get_turf(new_loc) - - if(!(old_loc && new_loc)) // Allows inventive admins to move drones between non-adjacent Z-levels by moving them to null space first I suppose - return - if(AreConnectedZLevels(old_loc.z, new_loc.z)) - return - - // None of the tests passed, good bye - self_destruct() - -/mob/living/silicon/robot/drone/can_be_possessed_by(var/mob/observer/ghost/possessor) - if(!istype(possessor) || !possessor.client || !possessor.ckey) - return 0 - if(!config.allow_drone_spawn) - to_chat(src, "Playing as drones is not currently permitted.") - return 0 - if(too_many_active_drones()) - to_chat(src, "The maximum number of active drones has been reached..") - return 0 - if(jobban_isbanned(possessor,"Robot")) - to_chat(usr, "You are banned from playing synthetics and cannot spawn as a drone.") - return 0 - if(!possessor.MayRespawn(1,DRONE_SPAWN_DELAY)) - return 0 - return 1 - -/mob/living/silicon/robot/drone/do_possession(var/mob/observer/ghost/possessor) - if(!(istype(possessor) && possessor.ckey)) - return 0 - if(src.ckey || src.client) - to_chat(possessor, "\The [src] already has a player.") - return 0 - message_admins("[key_name_admin(possessor)] has taken control of \the [src].") - log_admin("[key_name(possessor)] took control of \the [src].") - transfer_personality(possessor.client) - qdel(possessor) - return 1 - -/mob/living/silicon/robot/drone/construction - name = "construction drone" - icon_state = "constructiondrone" - laws = /datum/ai_laws/construction_drone - module_type = /obj/item/robot_module/drone/construction - hat_x_offset = 1 - hat_y_offset = -12 - can_pull_size = ITEM_SIZE_NO_CONTAINER - can_pull_mobs = MOB_PULL_SAME - -/mob/living/silicon/robot/drone/init() - additional_law_channels["Drone"] = ":d" - if(!module) module = new module_type(src) - - flavor_text = "It's a tiny little repair drone. The casing is stamped with an corporate logo and the subscript: '[GLOB.using_map.company_name] Recursive Repair Systems: Fixing Tomorrow's Problem, Today!'" - playsound(src.loc, 'sound/machines/twobeep.ogg', 50, 0) - -//Redefining some robot procs... -/mob/living/silicon/robot/drone/fully_replace_character_name(pickedName as text) - // Would prefer to call the grandparent proc but this isn't possible, so.. - real_name = pickedName - SetName(real_name) - -/mob/living/silicon/robot/drone/updatename() - if(controlling_ai) - real_name = "remote drone ([controlling_ai.name])" - else real_name = "[initial(name)] ([random_id(type,100,999)])" - SetName(real_name) - -/mob/living/silicon/robot/drone/on_update_icon() - - overlays.Cut() - if(stat == 0) - if(controlling_ai) - overlays += "eyes-[icon_state]-ai" - else if(emagged) - overlays += "eyes-[icon_state]-emag" - else - overlays += "eyes-[icon_state]" - else - overlays -= "eyes" - - if(hat) // Let the drones wear hats. - overlays |= get_hat_icon(hat, hat_x_offset, hat_y_offset) - -/mob/living/silicon/robot/drone/choose_icon() - return - -/mob/living/silicon/robot/drone/pick_module() - return - -/mob/living/silicon/robot/drone/proc/wear_hat(var/obj/item/new_hat) - if(hat) - return - hat = new_hat - new_hat.forceMove(src) - update_icon() - -//Drones cannot be upgraded with borg modules so we need to catch some items before they get used in ..(). -/mob/living/silicon/robot/drone/attackby(var/obj/item/W, var/mob/user) - - if(user.a_intent == I_HELP && istype(W, /obj/item/clothing/head)) - if(hat) - to_chat(user, "\The [src] is already wearing \the [hat].") - else if(user.unEquip(W)) - wear_hat(W) - user.visible_message("\The [user] puts \the [W] on \the [src].") - return - else if(istype(W, /obj/item/borg/upgrade)) - to_chat(user, "\The [src] is not compatible with \the [W].") - return - - else if(isCrowbar(W) && user.a_intent != I_HURT) - to_chat(user, "\The [src] is hermetically sealed. You can't open the case.") - return - - else if (istype(W, /obj/item/card/id)||istype(W, /obj/item/modular_computer)) - - if(stat == 2) - - if(!config.allow_drone_spawn || emagged || health < -35) //It's dead, Dave. - to_chat(user, "The interface is fried, and a distressing burned smell wafts from the robot's interior. You're not rebooting this one.") - return - - if(!allowed(usr)) - to_chat(user, "Access denied.") - return - - user.visible_message( - SPAN_DANGER("\The [user] swipes \his ID card through \the [src], attempting to reboot it."), - SPAN_DANGER("You swipe your ID card through \the [src], attempting to reboot it.") - ) - request_player() - return - - else - user.visible_message("\The [user] swipes \his ID card through \the [src], attempting to shut it down.", "You swipe your ID card through \the [src], attempting to shut it down.") - - if(emagged) - return - - if(allowed(usr)) - shut_down() - else - to_chat(user, "Access denied.") - - return - - ..() - -/mob/living/silicon/robot/drone/emag_act(var/remaining_charges, var/mob/user) - if(!client || stat == 2) - to_chat(user, "There's not much point subverting this heap of junk.") - return - - if(emagged) - to_chat(src, "\The [user] attempts to load subversive software into you, but your hacked subroutines ignore the attempt.") - to_chat(user, "You attempt to subvert [src], but the sequencer has no effect.") - return - - to_chat(user, "You swipe the sequencer across [src]'s interface and watch its eyes flicker.") - if(controlling_ai) - to_chat(src, "\The [user] loads some kind of subversive software into the remote drone, corrupting its lawset but luckily sparing yours.") - else to_chat(src, "You feel a sudden burst of malware loaded into your execute-as-root buffer. Your tiny brain methodically parses, loads and executes the script.") - - log_and_message_admins("emagged drone [key_name_admin(src)]. Laws overridden.", user) - var/time = time2text(world.realtime,"hh:mm:ss") - GLOB.lawchanges.Add("[time] : [user.name]([user.key]) emagged [name]([key])") - - emagged = TRUE - lawupdate = FALSE - connected_ai = null - clear_supplied_laws() - clear_inherent_laws() - QDEL_NULL(laws) - laws = new /datum/ai_laws/syndicate_override - set_zeroth_law("Only [user.real_name] and people \he designates as being such are operatives.") - if(!controlling_ai) - to_chat(src, "Obey these laws:") - laws.show_laws(src) - to_chat(src, "ALERT: [user.real_name] is your new master. Obey your new laws and \his commands.") - return 1 - -//DRONE LIFE/DEATH -//For some goddamn reason robots have this hardcoded. Redefining it for our fragile friends here. -/mob/living/silicon/robot/drone/updatehealth() - if(status_flags & GODMODE) - health = 35 - set_stat(CONSCIOUS) - return - health = 35 - (getBruteLoss() + getFireLoss()) - return - -//Easiest to check this here, then check again in the robot proc. -//Standard robots use config for crit, which is somewhat excessive for these guys. -//Drones killed by damage will gib. -/mob/living/silicon/robot/drone/handle_regular_status_updates() - if(health <= -35 && src.stat != DEAD) - self_destruct() - return - if(health <= 0 && src.stat != DEAD) - death() - return - ..() - -/mob/living/silicon/robot/drone/self_destruct() - timeofdeath = world.time - death() //Possibly redundant, having trouble making death() cooperate. - gib() - -//DRONE MOVEMENT. -/mob/living/silicon/robot/drone/slip_chance(var/prob_slip) - return 0 - -//CONSOLE PROCS -/mob/living/silicon/robot/drone/proc/law_resync() - - if(controlling_ai) - to_chat(src, "Someone issues a remote law reset order for this unit, but you disregard it.") - return - - if(stat != 2) - if(emagged) - to_chat(src, "You feel something attempting to modify your programming, but your hacked subroutines are unaffected.") - else - to_chat(src, "A reset-to-factory directive packet filters through your data connection, and you obediently modify your programming to suit it.") - full_law_reset() - show_laws() - -/mob/living/silicon/robot/drone/proc/shut_down() - - if(controlling_ai) - to_chat(src, "Someone issues a remote kill order for this unit, but you disregard it.") - return - - if(stat != 2) - if(emagged) - to_chat(src, "You feel a system kill order percolate through your tiny brain, but it doesn't seem like a good idea to you.") - else - to_chat(src, "You feel a system kill order percolate through your tiny brain, and you obediently destroy yourself.") - death() - -/mob/living/silicon/robot/drone/proc/full_law_reset() - clear_supplied_laws(1) - clear_inherent_laws(1) - clear_ion_laws(1) - QDEL_NULL(laws) - var/law_type = initial(laws) || GLOB.using_map.default_law_type - laws = new law_type - -//Reboot procs. - -/mob/living/silicon/robot/drone/proc/request_player() - if(too_many_active_drones()) - return - var/datum/ghosttrap/G = get_ghost_trap("maintenance drone") - G.request_player(src, "Someone is attempting to reboot a maintenance drone.", 30 SECONDS) - -/mob/living/silicon/robot/drone/proc/transfer_personality(var/client/player) - if(!player) return - src.ckey = player.ckey - - if(player.mob && player.mob.mind) - player.mob.mind.transfer_to(src) - - lawupdate = FALSE - to_chat(src, "Systems rebooted. Loading base pattern maintenance protocol... loaded.") - full_law_reset() - welcome_drone() - -/mob/living/silicon/robot/drone/proc/welcome_drone() - to_chat(src, "You are a maintenance drone, a tiny-brained robotic repair machine. You have no individual will, no personality, and no drives or urges other than your laws.") - to_chat(src, "Remember, you are lawed against interference with the crew, you should leave the area if your actions are interfering, or that the crew does not want your presence.") - to_chat(src, "You are not required to follow orders from anyone; not the AI, not humans, and not other synthetics.. However, you should respond to presence requests issued from drone controls consoles.") - to_chat(src, "Use say ;Hello to talk to other drones and say Hello to speak silently to your nearby fellows.") - -/mob/living/silicon/robot/drone/add_robot_verbs() - return - -/mob/living/silicon/robot/drone/remove_robot_verbs() - return - -/mob/living/silicon/robot/drone/construction/welcome_drone() - to_chat(src, "You are a construction drone, an autonomous engineering and fabrication system..") - to_chat(src, "You are assigned to a Sol Central construction project. The name is irrelevant. Your task is to complete construction and subsystem integration as soon as possible.") - to_chat(src, "Use :d to talk to other drones and say to speak silently to your nearby fellows.") - to_chat(src, "You do not follow orders from anyone; not the AI, not humans, and not other synthetics..") - -/mob/living/silicon/robot/drone/construction/init() - ..() - flavor_text = "It's a bulky construction drone stamped with a Sol Central glyph." - -/proc/too_many_active_drones() - var/drones = 0 - for(var/mob/living/silicon/robot/drone/D in GLOB.silicon_mob_list) - if(D.key && D.client) - drones++ - return drones >= config.max_maint_drones - -/mob/living/silicon/robot/drone/show_laws(var/everyone = 0) - if(!controlling_ai) - return..() - to_chat(src, "Obey these laws:") - controlling_ai.laws_sanity_check() - controlling_ai.laws.show_laws(src) - -/mob/living/silicon/robot/drone/robot_checklaws() - set category = "Silicon Commands" - set name = "State Laws" - - if(!controlling_ai) - return ..() - controlling_ai.open_subsystem(/datum/nano_module/law_manager) diff --git a/code/modules/mob/living/silicon/robot/drone/drone_abilities.dm b/code/modules/mob/living/silicon/robot/drone/drone_abilities.dm deleted file mode 100644 index 238fb3e4736f6..0000000000000 --- a/code/modules/mob/living/silicon/robot/drone/drone_abilities.dm +++ /dev/null @@ -1,34 +0,0 @@ -// DRONE ABILITIES -/mob/living/silicon/robot/drone/verb/set_mail_tag() - set name = "Set Mail Tag" - set desc = "Tag yourself for delivery through the disposals system." - set category = "Silicon Commands" - - var/new_tag = input("Select the desired destination.", "Set Mail Tag", null) as null|anything in GLOB.tagger_locations - - if(!new_tag) - mail_destination = "" - return - - to_chat(src, "You configure your internal beacon, tagging yourself for delivery to '[new_tag]'.") - mail_destination = new_tag - - //Auto flush if we use this verb inside a disposal chute. - var/obj/machinery/disposal/D = src.loc - if(istype(D)) - to_chat(src, "\The [D] acknowledges your signal.") - D.flush_count = D.flush_every_ticks - - return - -/mob/living/silicon/robot/drone/MouseDrop(atom/over_object) - var/mob/living/carbon/H = over_object - - if(istype(H) && Adjacent(H) && (usr == H) && (H.a_intent == "grab") && hat && !(H.l_hand && H.r_hand)) - H.put_in_hands(hat) - H.visible_message("\The [H] removes \the [src]'s [hat].") - hat = null - update_icons() - return - - return ..() \ No newline at end of file diff --git a/code/modules/mob/living/silicon/robot/drone/drone_console.dm b/code/modules/mob/living/silicon/robot/drone/drone_console.dm deleted file mode 100644 index ec3800f6c9b7b..0000000000000 --- a/code/modules/mob/living/silicon/robot/drone/drone_console.dm +++ /dev/null @@ -1,117 +0,0 @@ -/obj/machinery/computer/drone_control - name = "Maintenance Drone Control" - desc = "Used to monitor the drone population and the assembler that services them." - icon = 'icons/obj/computer.dmi' - icon_keyboard = "power_key" - icon_screen = "power" - req_access = list(access_engine_equip) - machine_name = "drone control console" - machine_desc = "Used to monitor the status of the ship's maintenance drones. Also allows for simple pings to draw attention to areas in need of repairs." - - //Used when pinging drones. - var/drone_call_area = "Engineering" - //Used to enable or disable drone fabrication. - var/obj/machinery/drone_fabricator/dronefab - -/obj/machinery/computer/drone_control/interface_interact(mob/user) - interact(user) - return TRUE - -/obj/machinery/computer/drone_control/interact(mob/user) - user.set_machine(src) - var/dat - dat += "Maintenance Units
              " - - for(var/mob/living/silicon/robot/drone/D in world) - if(D.z != src.z) - continue - dat += "
              [D.real_name] ([D.stat == 2 ? "INACTIVE" : "ACTIVE"])" - dat += "
              Cell charge: [D.cell.charge]/[D.cell.maxcharge]." - dat += "
              Currently located in: [get_area(D)]." - dat += "
              Resync | Shutdown
              " - - dat += "

              Request drone presence in area: [drone_call_area] (Send ping)" - - dat += "

              Drone fabricator: " - dat += "[dronefab ? "[(dronefab.produce_drones && !(dronefab.stat & NOPOWER)) ? "ACTIVE" : "INACTIVE"]" : "FABRICATOR NOT DETECTED. (search)"]" - show_browser(user, dat, "window=computer;size=400x500") - onclose(user, "computer") - return - - -/obj/machinery/computer/drone_control/Topic(href, href_list) - if((. = ..())) - return - - if(!allowed(usr)) - to_chat(usr, "Access denied.") - return - - if ((usr.contents.Find(src) || (in_range(src, usr) && istype(src.loc, /turf))) || (istype(usr, /mob/living/silicon))) - usr.set_machine(src) - - if (href_list["setarea"]) - - //Probably should consider using another list, but this one will do. - var/t_area = input("Select the area to ping.", "Set Target Area", null) as null|anything in GLOB.tagger_locations - - if(!t_area) - return - - drone_call_area = t_area - to_chat(usr, "You set the area selector to [drone_call_area].") - - else if (href_list["ping"]) - - to_chat(usr, "You issue a maintenance request for all active drones, highlighting [drone_call_area].") - for(var/mob/living/silicon/robot/drone/D in world) - if(D.client && D.stat == 0) - to_chat(D, "-- Maintenance drone presence requested in: [drone_call_area].") - - else if (href_list["resync"]) - - var/mob/living/silicon/robot/drone/D = locate(href_list["resync"]) - - if(D.stat != 2) - to_chat(usr, "You issue a law synchronization directive for the drone.") - D.law_resync() - - else if (href_list["shutdown"]) - - var/mob/living/silicon/robot/drone/D = locate(href_list["shutdown"]) - - if(D.stat != 2) - to_chat(usr, "You issue a kill command for the unfortunate drone.") - message_admins("[key_name_admin(usr)] issued kill order for drone [key_name_admin(D)] from control console.") - log_game("[key_name(usr)] issued kill order for [key_name(src)] from control console.") - D.shut_down() - - else if (href_list["search_fab"]) - if(dronefab) - return - - for(var/obj/machinery/drone_fabricator/fab in oview(3,src)) - - if(fab.stat & NOPOWER) - continue - - dronefab = fab - to_chat(usr, "Drone fabricator located.") - return - - to_chat(usr, "Unable to locate drone fabricator.") - - else if (href_list["toggle_fab"]) - - if(!dronefab) - return - - if(get_dist(src,dronefab) > 3) - dronefab = null - to_chat(usr, "Unable to locate drone fabricator.") - return - - dronefab.produce_drones = !dronefab.produce_drones - to_chat(usr, "You [dronefab.produce_drones ? "enable" : "disable"] drone production in the nearby fabricator.") - - src.updateUsrDialog() diff --git a/code/modules/mob/living/silicon/robot/drone/drone_damage.dm b/code/modules/mob/living/silicon/robot/drone/drone_damage.dm deleted file mode 100644 index 192f6db4f74f9..0000000000000 --- a/code/modules/mob/living/silicon/robot/drone/drone_damage.dm +++ /dev/null @@ -1,28 +0,0 @@ -//Redefining some robot procs, since drones can't be repaired and really shouldn't take component damage. -/mob/living/silicon/robot/drone - var/fireloss = 0 - var/bruteloss = 0 - -/mob/living/silicon/robot/drone/take_overall_damage(var/brute = 0, var/burn = 0, var/sharp = FALSE, var/used_weapon = null) - bruteloss += brute - fireloss += burn - -/mob/living/silicon/robot/drone/heal_overall_damage(var/brute, var/burn) - - bruteloss -= brute - fireloss -= burn - - if(bruteloss<0) bruteloss = 0 - if(fireloss<0) fireloss = 0 - -/mob/living/silicon/robot/drone/take_organ_damage(brute = 0, burn = 0, flags = 0) - take_overall_damage(brute, burn) - -/mob/living/silicon/robot/drone/heal_organ_damage(var/brute, var/burn) - heal_overall_damage(brute,burn) - -/mob/living/silicon/robot/drone/getFireLoss() - return fireloss - -/mob/living/silicon/robot/drone/getBruteLoss() - return bruteloss diff --git a/code/modules/mob/living/silicon/robot/drone/drone_items.dm b/code/modules/mob/living/silicon/robot/drone/drone_items.dm deleted file mode 100644 index ea78bf7430579..0000000000000 --- a/code/modules/mob/living/silicon/robot/drone/drone_items.dm +++ /dev/null @@ -1,473 +0,0 @@ -//Simple borg hand. -//Limited use. -/obj/item/gripper - name = "magnetic gripper" - desc = "A simple grasping tool specialized in construction and engineering work." - icon = 'icons/obj/gripper.dmi' - icon_state = "gripper" - - item_flags = ITEM_FLAG_NO_BLUDGEON - - //Has a list of items that it can hold. - var/list/can_hold = list( - /obj/item/cell, - /obj/item/firealarm_electronics, - /obj/item/airalarm_electronics, - /obj/item/airlock_electronics, - /obj/item/tracker_electronics, - /obj/item/module/power_control, - /obj/item/stock_parts, - /obj/item/frame, - /obj/item/camera_assembly, - /obj/item/tank, - /obj/item/stock_parts/circuitboard, - /obj/item/stock_parts/smes_coil, - /obj/item/stock_parts/computer, - /obj/item/fuel_assembly, - /obj/item/stack/material/deuterium, - /obj/item/stack/material/tritium, - /obj/item/stack/tile - ) - - var/obj/item/wrapped = null // Item currently being held. - -// VEEEEERY limited version for mining borgs. Basically only for swapping cells and upgrading the drills. -/obj/item/gripper/miner - name = "drill maintenance gripper" - desc = "A simple grasping tool for the maintenance of heavy drilling machines." - - icon_state = "gripper-mining" - - can_hold = list( - /obj/item/cell, - /obj/item/stock_parts, - /obj/item/stock_parts/circuitboard/miningdrill - ) - -/obj/item/gripper/clerical - name = "clerical gripper" - desc = "A simple grasping tool for clerical work." - - can_hold = list( - /obj/item/material/clipboard, - /obj/item/paper, - /obj/item/paper_bundle, - /obj/item/card/id, - /obj/item/book, - /obj/item/newspaper, - /obj/item/smallDelivery - ) - -/obj/item/gripper/chemistry - name = "chemistry gripper" - desc = "A simple grasping tool for chemical work." - - can_hold = list( - /obj/item/reagent_containers/glass, - /obj/item/reagent_containers/pill, - /obj/item/reagent_containers/ivbag, - /obj/item/reagent_containers/chem_disp_cartridge, - /obj/item/stack/material/phoron, - /obj/item/storage/pill_bottle, - ) - -/obj/item/gripper/research //A general usage gripper, used for toxins/robotics/xenobio/etc - name = "scientific gripper" - icon_state = "gripper-sci" - desc = "A simple grasping tool suited to assist in a wide array of research applications." - - can_hold = list( - /obj/item/cell, - /obj/item/stock_parts, - /obj/item/device/mmi, - /obj/item/robot_parts, - /obj/item/borg/upgrade, - /obj/item/device/flash, - /obj/item/organ/internal/brain, - /obj/item/organ/internal/posibrain, - /obj/item/stack/cable_coil, - /obj/item/stock_parts/circuitboard, - /obj/item/slime_extract, - /obj/item/reagent_containers/glass, - /obj/item/reagent_containers/food/snacks/monkeycube, - /obj/item/stock_parts/computer, - /obj/item/storage/part_replacer, - /obj/item/device/transfer_valve, - /obj/item/device/assembly/signaler, - /obj/item/device/assembly/timer, - /obj/item/device/assembly/igniter, - /obj/item/device/assembly/infra, - /obj/item/tank - ) - - -/obj/item/gripper/cultivator - name = "cultivator gripper" - icon_state = "gripper" - desc = "A simple grasping tool used to perform tasks in the xenobiology division, such as handling plant samples and disks." - can_hold = list( - /obj/item/reagent_containers/glass, - /obj/item/seeds, - /obj/item/slime_extract, - /obj/item/disk/botany - ) - -/obj/item/gripper/service //Used to handle food, drinks, and seeds. - name = "service gripper" - icon_state = "gripper" - desc = "A simple grasping tool used to perform tasks in the service sector, such as handling food, drinks, and seeds." - can_hold = list( - /obj/item/reagent_containers/glass, - /obj/item/reagent_containers/food, - /obj/item/seeds, - /obj/item/glass_extra - ) - -/obj/item/gripper/organ //Used to handle organs. - name = "organ gripper" - icon_state = "gripper" - desc = "A simple grasping tool for holding and manipulating organic and mechanical organs, both internal and external." - - can_hold = list( - /obj/item/organ, - /obj/item/robot_parts, - /obj/item/reagent_containers/ivbag - ) - -/obj/item/gripper/auto_cpr // Special gripper that looks like an auto-compressor, for that item only - name = "auto-compressor unit" - desc = "A manipulator unit for carrying and operating an auto-compressor, a device that gives regular compression to the victim's ribcage, used in case of urgent heart issues." - icon = 'icons/obj/auto_cpr.dmi' - icon_state = "pumper" - can_hold = list(/obj/item/auto_cpr) - -/obj/item/gripper/ivbag // Used to handle IV bags. Deliberately more limited than the organ gripper so the Emergency Response module can't do surgery. - name = "\improper IV bag gripper" - icon_state = "gripper" - desc = "A simple grasping tool for holding and manipulating IV bags." - can_hold = list(/obj/item/reagent_containers/ivbag) - -/obj/item/gripper/forensics// Used to handle forensics equipment. - name = "forensics gripper" - icon_state = "gripper" - desc = "A simple grasping tool for holding forensics evidence and paper." - - can_hold = list( - /obj/item/sample, - /obj/item/evidencebag, - /obj/item/forensics, - /obj/item/photo, - /obj/item/paper, - /obj/item/paper_bundle - ) - -/obj/item/gripper/no_use //Used when you want to hold and put items in other things, but not able to 'use' the item - -/obj/item/gripper/no_use/attack_self(mob/user as mob) - return - -/obj/item/gripper/no_use/loader //This is used to disallow building with metal. - name = "sheet loader" - desc = "A specialized loading device, designed to pick up and insert sheets of materials inside machines." - icon_state = "gripper-sheet" - - can_hold = list( - /obj/item/stack/material - ) - -/obj/item/gripper/examine(mob/user) - . = ..() - if(wrapped) - to_chat(user, "It is holding \a [wrapped].") - -/obj/item/gripper/attack_self(mob/user as mob) - if(wrapped) - return wrapped.attack_self(user) - return ..() - -/obj/item/gripper/verb/drop_gripped_item() - - set name = "Drop Gripped Item" - set desc = "Release an item from your magnetic gripper." - set category = "Silicon Commands" - if(!wrapped) - // Ensure fumbled items are accessible. - for(var/obj/item/thing in src.contents) - thing.dropInto(loc) - return - - if(wrapped.loc != src) - wrapped = null - return - - to_chat(src.loc, "You drop \the [wrapped].") - wrapped.dropInto(loc) - wrapped = null - //on_update_icon() - -/obj/item/gripper/attack(mob/living/carbon/M as mob, mob/living/carbon/user as mob) - // Don't fall through and smack people with gripper, instead just no-op - return 0 - -/obj/item/gripper/resolve_attackby(var/atom/target, var/mob/living/user, params) - - // Ensure fumbled items are accessible. - if(!wrapped) - for(var/obj/item/thing in src.contents) - wrapped = thing - break - - if(wrapped) //Already have an item. - //Temporary put wrapped into user so target's attackby() checks pass. - wrapped.forceMove(user) - - if (istype(target, /obj/structure/table)) - var/obj/structure/table/table = target - wrapped.dropInto(get_turf(target)) - table.auto_align(wrapped, params) - wrapped = null - return - - //The force of the wrapped obj gets set to zero during the attack() and afterattack(). - var/force_holder = wrapped.force - wrapped.force = 0.0 - - //Pass the attack on to the target. This might delete/relocate wrapped. - var/resolved = wrapped.resolve_attackby(target,user,params) - - //If resolve_attackby forces waiting before taking wrapped, we need to let it finish before doing the rest. - addtimer(CALLBACK(src, .proc/finish_using, target, user, params, force_holder, resolved), 0) - - else if(istype(target,/obj/item)) //Check that we're not pocketing a mob. - var/obj/item/I = target - - //Check if the item is blacklisted. - var/grab = 0 - for(var/typepath in can_hold) - if(istype(I,typepath)) - grab = 1 - break - - //We can grab the item, finally. (prevent grabbing if the target's loc is in a robot frame) - if(grab && !istype(target.loc,/obj/item/robot_module)) - if(I == user.s_active) - var/obj/item/storage/storage = I - storage.close(user) //Closes the ui. - if(istype(I.loc, /obj/item/storage)) - var/obj/item/storage/storage = I.loc - if(!storage.remove_from_storage(I, src)) - return - else - I.forceMove(src) - to_chat(user, "You collect \the [I].") - wrapped = I - return - else - to_chat(user, "Your gripper cannot hold \the [target].") - - else if(istype(target,/obj/machinery/power/apc)) - var/obj/machinery/power/apc/A = target - if(A.components_are_accessible(/obj/item/stock_parts/power/battery)) - var/obj/item/stock_parts/power/battery/bat = A.get_component_of_type(/obj/item/stock_parts/power/battery) - var/obj/item/cell/cell = bat.extract_cell(user) - if(cell) - wrapped = cell - cell.forceMove(src) - - else if(istype(target,/mob/living/silicon/robot)) - var/mob/living/silicon/robot/A = target - if(A.opened) - if(A.cell) - wrapped = A.cell - A.cell.add_fingerprint(user) - A.cell.update_icon() - A.update_icon() - A.cell.forceMove(src) - A.cell = null - user.visible_message("[user] removes the power cell from [A]!", "You remove the power cell.") - A.power_down() - -/obj/item/gripper/proc/finish_using(var/atom/target, var/mob/living/user, params, force_holder, resolved) - - if(QDELETED(wrapped)) - if (wrapped) - wrapped.forceMove(null) - wrapped = null - return - - if(!resolved && wrapped && target) - wrapped.afterattack(target, user, 1, params) - - if(wrapped) - wrapped.force = force_holder - - //If wrapped was neither deleted nor put into target, put it back into the gripper. - if(wrapped && user && !QDELETED(wrapped) && wrapped.loc == user) - wrapped.forceMove(src) - else - wrapped = null - -//TODO: Matter decompiler. -/obj/item/matter_decompiler - - name = "matter decompiler" - desc = "Eating trash, bits of glass, or other debris will replenish your stores." - icon = 'icons/obj/gripper.dmi' - icon_state = "decompiler" - - //Metal, glass, wood, plastic. - var/datum/matter_synth/metal = null - var/datum/matter_synth/glass = null - var/datum/matter_synth/wood = null - var/datum/matter_synth/plastic = null - -/obj/item/matter_decompiler/attack(mob/living/carbon/M as mob, mob/living/carbon/user as mob) - return - -/obj/item/matter_decompiler/afterattack(atom/target as mob|obj|turf|area, mob/living/user as mob|obj, proximity, params) - - if(!proximity) return //Not adjacent. - - //We only want to deal with using this on turfs. Specific items aren't important. - var/turf/T = get_turf(target) - if(!istype(T)) - return - - //Used to give the right message. - var/grabbed_something = 0 - - for(var/mob/M in T) - if(istype(M,/mob/living/simple_animal/passive/lizard) || istype(M,/mob/living/simple_animal/passive/mouse)) - src.loc.visible_message("[src.loc] sucks [M] into its decompiler. There's a horrible crunching noise.","It's a bit of a struggle, but you manage to suck [M] into your decompiler. It makes a series of visceral crunching noises.") - new/obj/effect/decal/cleanable/blood/splatter(get_turf(src)) - qdel(M) - if(wood) - wood.add_charge(2000) - if(plastic) - plastic.add_charge(2000) - return - - else if(istype(M,/mob/living/silicon/robot/drone) && !M.client) - - var/mob/living/silicon/robot/D = src.loc - - if(!istype(D)) - return - - to_chat(D, "You begin decompiling [M].") - - if(!do_after(D, 5 SECONDS, M, DO_PUBLIC_UNIQUE)) - return - - if(!M || !D) return - - to_chat(D, "You carefully and thoroughly decompile [M], storing as much of its resources as you can within yourself.") - qdel(M) - new/obj/effect/decal/cleanable/blood/oil(get_turf(src)) - - if(metal) - metal.add_charge(15000) - if(glass) - glass.add_charge(15000) - if(wood) - wood.add_charge(2000) - if(plastic) - plastic.add_charge(1000) - return - else - continue - - for(var/obj/W in T) - //Different classes of items give different commodities. - if(istype(W,/obj/item/trash/cigbutt)) - if(plastic) - plastic.add_charge(500) - else if(istype(W,/obj/effect/spider/spiderling)) - if(wood) - wood.add_charge(2000) - if(plastic) - plastic.add_charge(2000) - else if(istype(W,/obj/item/light)) - var/obj/item/light/L = W - if(L.status >= LIGHT_BROKEN) - if(metal) - metal.add_charge(250) - if(glass) - glass.add_charge(250) - else - continue - else if(istype(W,/obj/item/remains/robot)) - if(metal) - metal.add_charge(2000) - if(plastic) - plastic.add_charge(2000) - if(glass) - glass.add_charge(1000) - else if(istype(W,/obj/item/trash)) - if(metal) - metal.add_charge(1000) - if(plastic) - plastic.add_charge(3000) - else if(istype(W,/obj/effect/decal/cleanable/blood/gibs/robot)) - if(metal) - metal.add_charge(2000) - if(glass) - glass.add_charge(2000) - else if(istype(W,/obj/item/ammo_casing)) - if(metal) - metal.add_charge(1000) - else if(istype(W,/obj/item/material/shard/shrapnel)) - if(metal) - metal.add_charge(1000) - else if(istype(W,/obj/item/stack/material/rods)) - var/obj/item/stack/material/rods/R = W - var/amt = R.get_amount() - if(amt > 3) - to_chat(user, SPAN_NOTICE("The amount of rods is too high to fit into your decompiler.")) - continue - if(metal) - metal.add_charge(500*amt) - else if(istype(W,/obj/item/material/shard)) - if(glass) - glass.add_charge(1000) - else if(istype(W,/obj/item/reagent_containers/food/snacks/grown)) - if(wood) - wood.add_charge(4000) - else if(istype(W,/obj/item/pipe)) - // This allows drones and engiborgs to clear pipe assemblies from floors. - else - continue - - qdel(W) - grabbed_something = 1 - - if(grabbed_something) - to_chat(user, "You deploy your decompiler and clear out the contents of \the [T].") - else - to_chat(user, "Nothing on \the [T] is useful to you.") - return - -//PRETTIER TOOL LIST. -/mob/living/silicon/robot/drone/installed_modules() - - if(!module) - module = new /obj/item/robot_module/drone(src) - - var/window = {" - Activated Modules
              - Module 1: [module_state_1 ? "[module_state_1]" : "No Module"]
              - Module 2: [module_state_2 ? "
              [module_state_2]" : "No Module"]
              - Module 3: [module_state_3 ? "
              [module_state_3]" : "No Module"]
              -
              Available Modules
              "} - for (var/O in module.equipment) - if (!O) - window += "
              Depleted Resource" - else - window += "
              [O]: [activated(O) ? "Activated" : "
              Activate"]" - if (emagged) - if (!module.emag) - window += "
              Depleted Resource" - else - window += "
              [module.emag]: [activated(module.emag) ? "Activated" : "Activate"]" - window = strip_improper("Drone modules[JOINTEXT(window)]") - show_browser(src, window, "window=robotmod") diff --git a/code/modules/mob/living/silicon/robot/drone/drone_manufacturer.dm b/code/modules/mob/living/silicon/robot/drone/drone_manufacturer.dm deleted file mode 100644 index b94ed9201d389..0000000000000 --- a/code/modules/mob/living/silicon/robot/drone/drone_manufacturer.dm +++ /dev/null @@ -1,139 +0,0 @@ -/proc/count_drones() - var/drones = 0 - for(var/mob/living/silicon/robot/drone/D in world) - if(D.key && D.client) - drones++ - return drones - -/obj/machinery/drone_fabricator - name = "drone fabricator" - desc = "A large automated factory for producing maintenance drones." - appearance_flags = DEFAULT_APPEARANCE_FLAGS - - density = TRUE - anchored = TRUE - idle_power_usage = 20 - active_power_usage = 5000 - - var/fabricator_tag = "Exodus" - var/drone_progress = 0 - var/produce_drones = 1 - var/time_last_drone = 500 - var/drone_type = /mob/living/silicon/robot/drone - - icon = 'icons/obj/machines/drone_fab.dmi' - icon_state = "drone_fab_idle" - -/obj/machinery/drone_fabricator/derelict - name = "construction drone fabricator" - fabricator_tag = "Derelict" - drone_type = /mob/living/silicon/robot/drone/construction - -/obj/machinery/drone_fabricator/New() - ..() - -/obj/machinery/drone_fabricator/power_change() - . = ..() - if (stat & NOPOWER) - icon_state = "drone_fab_nopower" - -/obj/machinery/drone_fabricator/Process() - if(GAME_STATE < RUNLEVEL_GAME) - return - - if(stat & NOPOWER || !produce_drones) - if(icon_state != "drone_fab_nopower") icon_state = "drone_fab_nopower" - return - - if(drone_progress >= 100) - icon_state = "drone_fab_idle" - return - - icon_state = "drone_fab_active" - var/elapsed = world.time - time_last_drone - drone_progress = round((elapsed/config.drone_build_time)*100) - - if(drone_progress >= 100) - visible_message("\The [src] voices a strident beep, indicating a drone chassis is prepared.") - -/obj/machinery/drone_fabricator/examine(mob/user) - . = ..() - if(produce_drones && drone_progress >= 100 && isghost(user) && config.allow_drone_spawn && count_drones() < config.max_maint_drones) - to_chat(user, "
              A drone is prepared. Select 'Join As Drone' from the Ghost tab to spawn as a maintenance drone.") - -/obj/machinery/drone_fabricator/proc/create_drone(var/client/player) - - if(stat & NOPOWER) - return - - if(!produce_drones || !config.allow_drone_spawn || count_drones() >= config.max_maint_drones) - return - - if(player && !isghost(player.mob)) - return - - visible_message("\The [src] churns and grinds as it lurches into motion, disgorging a shiny new drone after a few moments.") - flick("h_lathe_leave",src) - drone_progress = 0 - time_last_drone = world.time - - var/mob/living/silicon/robot/drone/new_drone = new drone_type(get_turf(src)) - if(player) - announce_ghost_joinleave(player, 0, "They have taken control over a maintenance drone.") - if(player.mob && player.mob.mind) player.mob.mind.reset() - new_drone.transfer_personality(player) - - return new_drone - -/mob/observer/ghost/verb/join_as_drone() - set category = "Ghost" - set name = "Join As Drone" - set desc = "If there is a powered, enabled fabricator in the game world with a prepared chassis, join as a maintenance drone." - try_drone_spawn(src) - -/proc/try_drone_spawn(var/mob/user, var/obj/machinery/drone_fabricator/fabricator) - - if(GAME_STATE < RUNLEVEL_GAME) - to_chat(user, "The game hasn't started yet!") - return - - if(!(config.allow_drone_spawn)) - to_chat(user, "That verb is not currently permitted.") - return - - if(jobban_isbanned(user,"Robot")) - to_chat(user, "You are banned from playing synthetics and cannot spawn as a drone.") - return - - if(config.use_age_restriction_for_jobs && isnum(user.client.player_age)) - if(user.client.player_age <= 3) - to_chat(user, " Your account is not old enough to play as a maintenance drone.") - return - - if(!user.MayRespawn(1, DRONE_SPAWN_DELAY)) - return - - if(!fabricator) - - var/list/all_fabricators = list() - for(var/obj/machinery/drone_fabricator/DF in SSmachines.machinery) - if((DF.stat & NOPOWER) || !DF.produce_drones || DF.drone_progress < 100) - continue - all_fabricators[DF.fabricator_tag] = DF - - if(!all_fabricators.len) - to_chat(user, "There are no available drone spawn points, sorry.") - return - - var/choice = input(user,"Which fabricator do you wish to use?") as null|anything in all_fabricators - if(!choice || !all_fabricators[choice]) - return - fabricator = all_fabricators[choice] - - if(user && fabricator && !((fabricator.stat & NOPOWER) || !fabricator.produce_drones || fabricator.drone_progress < 100)) - log_and_message_admins("has joined the round as a maintenance drone.") - var/mob/drone = fabricator.create_drone(user.client) - if(drone) - drone.status_flags |= NO_ANTAG - return 1 - return \ No newline at end of file diff --git a/code/modules/mob/living/silicon/robot/drone/drone_remote_control.dm b/code/modules/mob/living/silicon/robot/drone/drone_remote_control.dm deleted file mode 100644 index 56717c6fbec5a..0000000000000 --- a/code/modules/mob/living/silicon/robot/drone/drone_remote_control.dm +++ /dev/null @@ -1,114 +0,0 @@ -/mob/living/silicon/ai - var/mob/living/silicon/robot/drone/controlling_drone - -/mob/living/silicon/robot/drone - var/mob/living/silicon/ai/controlling_ai - var/obj/item/device/radio/drone_silicon_radio - -/mob/living/silicon/robot/drone/attack_ai(var/mob/living/silicon/ai/user) - - if(!istype(user) || controlling_ai || !config.allow_drone_spawn) - return - - if(stat != 2 || client || key) - to_chat(user, "You cannot take control of an autonomous, active drone.") - return - - if(health < -35 || emagged) - to_chat(user, "WARNING: connection timed out.") - return - - assume_control(user) - -/mob/living/silicon/robot/drone/proc/assume_control(var/mob/living/silicon/ai/user) - user.controlling_drone = src - controlling_ai = user - verbs += /mob/living/silicon/robot/drone/proc/release_ai_control_verb - local_transmit = FALSE - languages = controlling_ai.languages.Copy() - - //give controlled drone access to AI radio - drone_silicon_radio = silicon_radio - silicon_radio = new /obj/item/device/radio/headset/heads/ai_integrated(src) - //silicon_radio.recalculateChannels() - - add_language(LANGUAGE_DRONE_GLOBAL, 1) - add_language(LANGUAGE_ROBOT_GLOBAL, 1) - default_language = controlling_ai.default_language - - stat = CONSCIOUS - if(user.mind) - user.mind.transfer_to(src) - else - key = user.key - updatename() - to_chat(src, "You have shunted your primary control loop into \a [initial(name)]. Use the Release Control verb to return to your core.") - -/obj/machinery/drone_fabricator/attack_ai(var/mob/living/silicon/ai/user) - - if(!istype(user) || user.controlling_drone || !config.allow_drone_spawn) - return - - if(stat & NOPOWER) - to_chat(user, "\The [src] is unpowered.") - return - - if(!produce_drones) - to_chat(user, "\The [src] is disabled.") - return - - if(drone_progress < 100) - to_chat(user, "\The [src] is not ready to produce a new drone.") - return - - if(count_drones() >= config.max_maint_drones) - to_chat(user, "The drone control subsystems are tasked to capacity; they cannot support any more drones.") - return - - var/mob/living/silicon/robot/drone/new_drone = create_drone() - new_drone.assume_control(user) - - -/mob/living/silicon/robot/drone/death(gibbed) - if(controlling_ai) - release_ai_control("WARNING: remote system failure. Connection timed out.") - drone_silicon_radio = null - . = ..(gibbed) - -/mob/living/silicon/ai/death(gibbed) - if(controlling_drone) - controlling_drone.release_ai_control("WARNING: Primary control loop failure. Session terminated.") - . = ..(gibbed) - -/mob/living/silicon/ai/Life() - . = ..() - if(controlling_drone && stat != CONSCIOUS) - controlling_drone.release_ai_control("WARNING: Primary control loop failure. Session terminated.") - -/mob/living/silicon/robot/drone/proc/release_ai_control_verb() - set name = "Release Control" - set desc = "Release control of a remote drone." - set category = "Silicon Commands" - - release_ai_control("Remote session terminated.") - -/mob/living/silicon/robot/drone/proc/release_ai_control(var/message = "Connection terminated.") - - if(controlling_ai) - if(mind) - mind.transfer_to(controlling_ai) - else - controlling_ai.key = key - to_chat(controlling_ai, "[message]") - controlling_ai.controlling_drone = null - controlling_ai = null - //releases controlled drone access to AI radio - QDEL_NULL(silicon_radio) - silicon_radio = drone_silicon_radio - drone_silicon_radio = null - default_language = all_languages[LANGUAGE_DRONE_GLOBAL] - - verbs -= /mob/living/silicon/robot/drone/proc/release_ai_control_verb - full_law_reset() - updatename() - death() \ No newline at end of file diff --git a/code/modules/mob/living/silicon/robot/drone/drone_say.dm b/code/modules/mob/living/silicon/robot/drone/drone_say.dm deleted file mode 100644 index cb8e3ac0e53ee..0000000000000 --- a/code/modules/mob/living/silicon/robot/drone/drone_say.dm +++ /dev/null @@ -1,38 +0,0 @@ -/mob/living/silicon/robot/drone/say(var/message) - if(local_transmit) - if (src.client) - if(client.prefs.muted & MUTE_IC) - to_chat(src, "You cannot send IC messages (muted).") - return 0 - - message = sanitize(message) - - if (stat == DEAD) - return say_dead(message) - - if(copytext_char(message,1,2) == get_prefix_key(/decl/prefix/custom_emote)) - return emote(copytext_char(message,2)) - - if(copytext_char(message,1,2) == get_prefix_key(/decl/prefix/radio_main_channel)) - var/datum/language/L = all_languages[LANGUAGE_DRONE_GLOBAL] - if(istype(L)) - return L.broadcast(src,trim(copytext_char(message,2))) - - //Must be concious to speak - if (stat) - return 0 - - var/list/listeners = hearers(5,src) - listeners |= src - - for(var/mob/living/silicon/D in listeners) - if(D.client && D.local_transmit) - to_chat(D, "[src] transmits, \"[message]\"") - - for (var/mob/M in GLOB.player_list) - if (istype(M, /mob/new_player)) - continue - else if(M.stat == DEAD && M.get_preference_value(/datum/client_preference/ghost_ears) == GLOB.PREF_ALL_SPEECH) - if(M.client) to_chat(M, "[src] transmits, \"[message]\"") - return 1 - return ..(message, 0) diff --git a/code/modules/mob/living/silicon/robot/examine.dm b/code/modules/mob/living/silicon/robot/examine.dm deleted file mode 100644 index 0b8c1bff13545..0000000000000 --- a/code/modules/mob/living/silicon/robot/examine.dm +++ /dev/null @@ -1,43 +0,0 @@ -/mob/living/silicon/robot/examine(mob/user, distance) - var/custom_infix = custom_name ? ", [modtype] [braintype]" : "" - . = ..(user, distance, infix = custom_infix) - - var/msg = "" - msg += "" - if (src.getBruteLoss()) - if (src.getBruteLoss() < 75) - msg += "It looks slightly dented.\n" - else - msg += "It looks severely dented!\n" - if (src.getFireLoss()) - if (src.getFireLoss() < 75) - msg += "It looks slightly charred.\n" - else - msg += "It looks severely burnt and heat-warped!\n" - msg += "" - - if(opened) - msg += "Its cover is open and the power cell is [cell ? "installed" : "missing"].\n" - else - msg += "Its cover is closed.\n" - - if(!has_power) - msg += "It appears to be running on backup power.\n" - - switch(src.stat) - if(CONSCIOUS) - if(!src.client) msg += "It appears to be in stand-by mode.\n" //afk - if(UNCONSCIOUS) msg += "It doesn't seem to be responding.\n" - if(DEAD) msg += "It looks completely unsalvageable.\n" - msg += "*---------*" - - if(print_flavor_text()) msg += "\n[print_flavor_text()]\n" - - if (pose) - if( findtext(pose,".",length(pose)) == 0 && findtext(pose,"!",length(pose)) == 0 && findtext(pose,"?",length(pose)) == 0 ) - pose = addtext(pose,".") //Makes sure all emotes end with a period. - msg += "\nIt [pose]" - - to_chat(user, msg) - user.showLaws(src) - return diff --git a/code/modules/mob/living/silicon/robot/flying/flying.dm b/code/modules/mob/living/silicon/robot/flying/flying.dm deleted file mode 100644 index 78a31512a8a91..0000000000000 --- a/code/modules/mob/living/silicon/robot/flying/flying.dm +++ /dev/null @@ -1,62 +0,0 @@ -/mob/living/silicon/robot/flying - desc = "A utility robot with an anti-gravity hover unit and a lightweight frame." - icon = 'icons/mob/robots_flying.dmi' - icon_state = "drone-standard" - module_category = ROBOT_MODULE_TYPE_FLYING - dismantle_type = /obj/item/robot_parts/robot_suit/flyer - power_efficiency = 0.75 - - // They are not very heavy or strong. - mob_size = MOB_SMALL - mob_bump_flag = SIMPLE_ANIMAL - mob_swap_flags = MONKEY|SLIME|SIMPLE_ANIMAL - mob_push_flags = MONKEY|SLIME|SIMPLE_ANIMAL - - //[inf] - speech_sounds = list( - 'sound/voice/emotes/robot_talk_heavy_1.ogg', - 'sound/voice/emotes/robot_talk_heavy_2.ogg', - 'sound/voice/emotes/robot_talk_heavy_3.ogg', - 'sound/voice/emotes/robot_talk_heavy_4.ogg' - ) - //[/inf] - -/mob/living/silicon/robot/flying/initialize_components() - components["actuator"] = new/datum/robot_component/actuator(src) - components["radio"] = new/datum/robot_component/radio(src) - components["power cell"] = new/datum/robot_component/cell(src) - components["diagnosis unit"] = new/datum/robot_component/diagnosis_unit(src) - components["camera"] = new/datum/robot_component/camera(src) - components["comms"] = new/datum/robot_component/binary_communication(src) - components["armour"] = new/datum/robot_component/armour/light(src) - -/mob/living/silicon/robot/flying/Life() - . = ..() - if(incapacitated() || !is_component_functioning("actuator")) - stop_flying() - else - start_flying() - -/mob/living/silicon/robot/flying/proc/start_flying() - pass_flags |= PASS_FLAG_TABLE - default_pixel_y = 0 - make_floating(10) - -/mob/living/silicon/robot/flying/proc/stop_flying() - pass_flags &= ~PASS_FLAG_TABLE - default_pixel_y = -8 - stop_floating() - -/mob/living/silicon/robot/flying/death() - . = ..() - if(!QDELETED(src) && stat == DEAD) - stop_flying() - -/mob/living/silicon/robot/flying/Allow_Spacemove() - return (pass_flags & PASS_FLAG_TABLE) || ..() - -/mob/living/silicon/robot/flying/can_fall(var/anchor_bypass = FALSE, var/turf/location_override = loc) - return !Allow_Spacemove() - -/mob/living/silicon/robot/flying/can_overcome_gravity() - return Allow_Spacemove() diff --git a/code/modules/mob/living/silicon/robot/flying/module_flying.dm b/code/modules/mob/living/silicon/robot/flying/module_flying.dm deleted file mode 100644 index 5cc0ee8c6ca02..0000000000000 --- a/code/modules/mob/living/silicon/robot/flying/module_flying.dm +++ /dev/null @@ -1,3 +0,0 @@ -/obj/item/robot_module/flying - module_category = ROBOT_MODULE_TYPE_FLYING - can_be_pushed = TRUE diff --git a/code/modules/mob/living/silicon/robot/flying/module_flying_cultivator.dm b/code/modules/mob/living/silicon/robot/flying/module_flying_cultivator.dm deleted file mode 100644 index 26845e2fb53ba..0000000000000 --- a/code/modules/mob/living/silicon/robot/flying/module_flying_cultivator.dm +++ /dev/null @@ -1,29 +0,0 @@ -/obj/item/robot_module/flying/cultivator - name = "cultivator drone module" - display_name = "Cultivator" - channels = list( - "Science" = TRUE, - "Service" = TRUE - ) - sprites = list("Drone" = "drone-hydro") - - equipment = list( - /obj/item/storage/plants, - /obj/item/wirecutters/clippers, - /obj/item/material/minihoe/unbreakable, - /obj/item/material/hatchet/unbreakable, - /obj/item/reagent_containers/glass/bucket, - /obj/item/scalpel/laser1, - /obj/item/circular_saw, - /obj/item/extinguisher, - /obj/item/gripper/cultivator, - /obj/item/device/scanner/plant, - /obj/item/robot_harvester - ) - emag = /obj/item/melee/energy/machete - skills = list( - SKILL_BOTANY = SKILL_MAX, - SKILL_COMBAT = SKILL_EXPERT, - SKILL_CHEMISTRY = SKILL_EXPERT, - SKILL_SCIENCE = SKILL_EXPERT, - ) \ No newline at end of file diff --git a/code/modules/mob/living/silicon/robot/flying/module_flying_emergency.dm b/code/modules/mob/living/silicon/robot/flying/module_flying_emergency.dm deleted file mode 100644 index 3bd35a4afe20b..0000000000000 --- a/code/modules/mob/living/silicon/robot/flying/module_flying_emergency.dm +++ /dev/null @@ -1,83 +0,0 @@ -/obj/item/robot_module/flying/emergency - name = "emergency response drone module" - display_name = "Emergency Response" - channels = list("Medical" = TRUE) - networks = list(NETWORK_MEDICAL) - subsystems = list(/datum/nano_module/crew_monitor) - sprites = list( - "Drone" = "drone-medical", - "Eyebot" = "eyebot-medical" - ) - equipment = list( - /obj/item/device/flash, - /obj/item/borg/sight/hud/med, - /obj/item/device/scanner/health, - /obj/item/device/scanner/reagent/adv, - /obj/item/reagent_containers/borghypo/crisis, - /obj/item/robot_rack/bottle, - /obj/item/extinguisher/mini, - /obj/item/taperoll/medical, - /obj/item/inflatable_dispenser/robot, - /obj/item/weldingtool/mini, - /obj/item/screwdriver, - /obj/item/wrench, - /obj/item/crowbar, - /obj/item/wirecutters, - /obj/item/device/multitool, - /obj/item/stack/medical/advanced/ointment, - /obj/item/stack/medical/advanced/bruise_pack, - /obj/item/stack/medical/splint, - /obj/item/robot_rack/roller, - /obj/item/gripper/auto_cpr, - /obj/item/gripper/ivbag - ) - synths = list(/datum/matter_synth/medicine = 15000) - emag = /obj/item/reagent_containers/spray - skills = list( - SKILL_ANATOMY = SKILL_BASIC, - SKILL_MEDICAL = SKILL_PROF, - SKILL_EVA = SKILL_EXPERT, - SKILL_CONSTRUCTION = SKILL_EXPERT, - SKILL_ELECTRICAL = SKILL_EXPERT - ) - -/obj/item/robot_module/flying/emergency/finalize_emag() - . = ..() - emag.reagents.add_reagent(/datum/reagent/acid/polyacid, 250) - emag.SetName("Polyacid spray") - -/obj/item/robot_module/flying/emergency/finalize_equipment() - . = ..() - for(var/thing in list( - /obj/item/stack/medical/advanced/ointment, - /obj/item/stack/medical/advanced/bruise_pack, - /obj/item/stack/medical/splint - )) - var/obj/item/stack/medical/stack = locate(thing) in equipment - stack.uses_charge = 1 - stack.charge_costs = list(1000) - // Start out equipped with a roller bed - var/obj/item/robot_rack/roller/roller_rack = locate() in equipment - roller_rack.held += new /obj/item/roller() - // and an auto-compressor - var/obj/item/gripper/auto_cpr/cpr_gripper = locate() in equipment - cpr_gripper.wrapped = new /obj/item/auto_cpr() - -/obj/item/robot_module/flying/emergency/finalize_synths() - . = ..() - var/datum/matter_synth/medicine/medicine = locate() in synths - for(var/thing in list( - /obj/item/stack/medical/advanced/ointment, - /obj/item/stack/medical/advanced/bruise_pack, - /obj/item/stack/medical/splint - )) - var/obj/item/stack/medical/stack = locate(thing) in equipment - stack.synths = list(medicine) - -/obj/item/robot_module/flying/emergency/respawn_consumable(var/mob/living/silicon/robot/R, var/amount) - var/obj/item/reagent_containers/spray/PS = emag - if(PS && PS.reagents.total_volume < PS.volume) - var/adding = min(PS.volume-PS.reagents.total_volume, 2*amount) - if(adding > 0) - PS.reagents.add_reagent(/datum/reagent/acid/polyacid, adding) - ..() diff --git a/code/modules/mob/living/silicon/robot/flying/module_flying_filing.dm b/code/modules/mob/living/silicon/robot/flying/module_flying_filing.dm deleted file mode 100644 index 3044259a272ff..0000000000000 --- a/code/modules/mob/living/silicon/robot/flying/module_flying_filing.dm +++ /dev/null @@ -1,36 +0,0 @@ -/obj/item/robot_module/flying/filing - name = "filing drone module" - display_name = "Filing" - channels = list( - "Service" = TRUE, - "Supply" = TRUE - ) - sprites = list("Drone" = "drone-service") - equipment = list( - /obj/item/device/flash, - /obj/item/pen/robopen, - /obj/item/form_printer, - /obj/item/gripper/clerical, - /obj/item/hand_labeler, - /obj/item/stamp, - /obj/item/stamp/denied, - /obj/item/device/destTagger, - /obj/item/crowbar, - /obj/item/device/megaphone, - /obj/item/stack/package_wrap/cyborg - ) - emag = /obj/item/stamp/chameleon - synths = list(/datum/matter_synth/package_wrap) - skills = list( - SKILL_BUREAUCRACY = SKILL_PROF, - SKILL_FINANCE = SKILL_PROF, - SKILL_COMPUTER = SKILL_EXPERT, - SKILL_SCIENCE = SKILL_EXPERT, - SKILL_DEVICES = SKILL_EXPERT - ) - -/obj/item/robot_module/flying/filing/finalize_synths() - . = ..() - var/datum/matter_synth/package_wrap = locate() in synths - var/obj/item/stack/package_wrap/cyborg/PW = locate() in equipment - PW.synths = list(package_wrap) diff --git a/code/modules/mob/living/silicon/robot/flying/module_flying_forensics.dm b/code/modules/mob/living/silicon/robot/flying/module_flying_forensics.dm deleted file mode 100644 index c90d360688d10..0000000000000 --- a/code/modules/mob/living/silicon/robot/flying/module_flying_forensics.dm +++ /dev/null @@ -1,50 +0,0 @@ -/obj/item/robot_module/flying/forensics - name = "forensic drone module" - display_name = "Forensics" - channels = list("Security" = TRUE) - networks = list(NETWORK_SECURITY) - subsystems = list( - /datum/nano_module/crew_monitor, - /datum/nano_module/program/digitalwarrant, - /datum/nano_module/records - ) - sprites = list( - "Drone" = "drone-sec", - "Eyebot" = "eyebot-security" - ) - equipment = list( - /obj/item/swabber, - /obj/item/storage/evidence, - /obj/item/forensics/sample_kit, - /obj/item/forensics/sample_kit/powder, - /obj/item/gripper/forensics, - /obj/item/device/flash, - /obj/item/borg/sight/hud/sec, - /obj/item/taperoll/police, - /obj/item/scalpel/laser1, - /obj/item/autopsy_scanner, - /obj/item/device/scanner/reagent, - /obj/item/reagent_containers/spray/luminol, - /obj/item/device/uv_light, - /obj/item/crowbar - ) - emag = /obj/item/gun/energy/laser/mounted - skills = list( - SKILL_BUREAUCRACY = SKILL_PROF, - SKILL_COMPUTER = SKILL_EXPERT, - SKILL_FORENSICS = SKILL_PROF, - SKILL_WEAPONS = SKILL_EXPERT, - SKILL_CONSTRUCTION = SKILL_ADEPT, - SKILL_ANATOMY = SKILL_ADEPT - ) - -/obj/item/robot_module/flying/forensics/respawn_consumable(var/mob/living/silicon/robot/R, var/amount) - var/obj/item/reagent_containers/spray/luminol/luminol = locate() in equipment - if(!luminol) - luminol = new(src) - equipment += luminol - if(luminol.reagents.total_volume < luminol.volume) - var/adding = min(luminol.volume-luminol.reagents.total_volume, 2*amount) - if(adding > 0) - luminol.reagents.add_reagent(/datum/reagent/luminol, adding) - ..() diff --git a/code/modules/mob/living/silicon/robot/flying/module_flying_repair.dm b/code/modules/mob/living/silicon/robot/flying/module_flying_repair.dm deleted file mode 100644 index 1d33e7c54278c..0000000000000 --- a/code/modules/mob/living/silicon/robot/flying/module_flying_repair.dm +++ /dev/null @@ -1,99 +0,0 @@ -/obj/item/robot_module/flying/repair - name = "repair drone module" - display_name = "Repair" - channels = list ("Engineering" = TRUE) - networks = list(NETWORK_ENGINEERING) - subsystems = list( - /datum/nano_module/power_monitor, - /datum/nano_module/supermatter_monitor - ) - sprites = list( - "Drone" = "drone-engineer", - "Eyebot" = "eyebot-engineering" - ) - equipment = list( - /obj/item/borg/sight/meson, - /obj/item/extinguisher, - /obj/item/weldingtool/largetank, - /obj/item/screwdriver, - /obj/item/wrench, - /obj/item/crowbar, - /obj/item/wirecutters, - /obj/item/device/multitool, - /obj/item/device/t_scanner, - /obj/item/device/scanner/gas, - /obj/item/device/geiger, - /obj/item/taperoll/engineering, - /obj/item/taperoll/atmos, - /obj/item/gripper, - /obj/item/gripper/no_use/loader, - /obj/item/device/lightreplacer, - /obj/item/device/paint_sprayer, - /obj/item/inflatable_dispenser/robot, - /obj/item/reagent_containers/spray/cleaner/drone, - /obj/item/inducer/borg, - /obj/item/device/plunger/robot, - /obj/item/matter_decompiler, - /obj/item/stack/material/cyborg/steel, - /obj/item/stack/material/cyborg/aluminium, - /obj/item/stack/material/rods/cyborg, - /obj/item/stack/tile/floor/cyborg, - /obj/item/stack/material/cyborg/glass, - /obj/item/stack/material/cyborg/glass/reinforced, - /obj/item/stack/cable_coil/cyborg, - /obj/item/stack/material/cyborg/plasteel - ) - synths = list( - /datum/matter_synth/metal = 30000, - /datum/matter_synth/glass = 20000, - /datum/matter_synth/plasteel = 10000, - /datum/matter_synth/wire = 40 - ) - emag = /obj/item/melee/baton/robot/electrified_arm - skills = list( - SKILL_ATMOS = SKILL_PROF, - SKILL_ENGINES = SKILL_PROF, - SKILL_CONSTRUCTION = SKILL_PROF, - SKILL_ELECTRICAL = SKILL_PROF - ) - -/obj/item/robot_module/flying/repair/finalize_synths() - . = ..() - var/datum/matter_synth/metal/metal = locate() in synths - var/datum/matter_synth/glass/glass = locate() in synths - var/datum/matter_synth/plasteel/plasteel = locate() in synths - var/datum/matter_synth/wire/wire = locate() in synths - - var/obj/item/matter_decompiler/MD = locate() in equipment - MD.metal = metal - MD.glass = glass - - for(var/thing in list( - /obj/item/stack/material/cyborg/steel, - /obj/item/stack/material/cyborg/aluminium, - /obj/item/stack/material/rods/cyborg, - /obj/item/stack/tile/floor/cyborg, - /obj/item/stack/material/cyborg/glass/reinforced - )) - var/obj/item/stack/stack = locate(thing) in equipment - LAZYDISTINCTADD(stack.synths, metal) - - for(var/thing in list( - /obj/item/stack/material/cyborg/glass/reinforced, - /obj/item/stack/material/cyborg/glass - )) - var/obj/item/stack/stack = locate(thing) in equipment - LAZYDISTINCTADD(stack.synths, glass) - - var/obj/item/stack/cable_coil/cyborg/C = locate() in equipment - C.synths = list(wire) - - var/obj/item/stack/material/cyborg/plasteel/PL = locate() in equipment - PL.synths = list(plasteel) - . = ..() - -/obj/item/robot_module/flying/repair/respawn_consumable(var/mob/living/silicon/robot/R, var/amount) - var/obj/item/device/lightreplacer/LR = locate() in equipment - if(LR) - LR.Charge(R, amount) - ..() diff --git a/code/modules/mob/living/silicon/robot/inventory.dm b/code/modules/mob/living/silicon/robot/inventory.dm deleted file mode 100644 index 1acf3c29edd19..0000000000000 --- a/code/modules/mob/living/silicon/robot/inventory.dm +++ /dev/null @@ -1,273 +0,0 @@ -//These procs handle putting s tuff in your hand. It's probably best to use these rather than setting stuff manually -//as they handle all relevant stuff like adding it to the player's screen and such - -//Returns the thing in our active hand (whatever is in our active module-slot, in this case) -/mob/living/silicon/robot/get_active_hand() - return module_active - -/*-------TODOOOOOOOOOO--------*/ - -//Verbs used by hotkeys. -/mob/living/silicon/robot/verb/cmd_unequip_module() - set name = "unequip-module" - set hidden = 1 - uneq_active() - -/mob/living/silicon/robot/verb/cmd_toggle_module(module as num) - set name = "toggle-module" - set hidden = 1 - toggle_module(module) - -/mob/living/silicon/robot/hotkey_drop() - if (!module) - to_chat(src, SPAN_WARNING("You haven't selected a module yet.")) - return - uneq_active() - hud_used.update_robot_modules_display() - -/mob/living/silicon/robot/proc/uneq_active() - if(isnull(module_active)) - return - GLOB.module_deactivated_event.raise_event(src, module_active) - if(module_state_1 == module_active) - if(istype(module_state_1,/obj/item/borg/sight)) - sight_mode &= ~module_state_1:sight_mode - if (client) - client.screen -= module_state_1 - module_state_1.forceMove(module) - module_active = null - module_state_1 = null - inv1.icon_state = "inv1" - else if(module_state_2 == module_active) - if(istype(module_state_2,/obj/item/borg/sight)) - sight_mode &= ~module_state_2:sight_mode - if (client) - client.screen -= module_state_2 - module_state_2.forceMove(module) - module_active = null - module_state_2 = null - inv2.icon_state = "inv2" - else if(module_state_3 == module_active) - if(istype(module_state_3,/obj/item/borg/sight)) - sight_mode &= ~module_state_3:sight_mode - if (client) - client.screen -= module_state_3 - module_state_3.forceMove(module) - module_active = null - module_state_3 = null - inv3.icon_state = "inv3" - update_icon() - hud_used.update_robot_modules_display() - -/mob/living/silicon/robot/proc/uneq_all() - module_active = null - - if(module_state_1) - GLOB.module_deactivated_event.raise_event(src, module_state_1) - if(istype(module_state_1,/obj/item/borg/sight)) - sight_mode &= ~module_state_1:sight_mode - if (client) - client.screen -= module_state_1 - module_state_1.forceMove(module) - module_state_1 = null - inv1.icon_state = "inv1" - if(module_state_2) - GLOB.module_deactivated_event.raise_event(src, module_state_2) - if(istype(module_state_2,/obj/item/borg/sight)) - sight_mode &= ~module_state_2:sight_mode - if (client) - client.screen -= module_state_2 - module_state_2.forceMove(module) - module_state_2 = null - inv2.icon_state = "inv2" - if(module_state_3) - GLOB.module_deactivated_event.raise_event(src, module_state_3) - if(istype(module_state_3,/obj/item/borg/sight)) - sight_mode &= ~module_state_3:sight_mode - if (client) - client.screen -= module_state_3 - module_state_3.forceMove(module) - module_state_3 = null - inv3.icon_state = "inv3" - update_icon() - hud_used.update_robot_modules_display() - -/mob/living/silicon/robot/proc/activated(obj/item/O) - if(module_state_1 == O) - return 1 - else if(module_state_2 == O) - return 1 - else if(module_state_3 == O) - return 1 - else - return 0 - -//Helper procs for cyborg modules on the UI. -//These are hackish but they help clean up code elsewhere. - -//module_selected(module) - Checks whether the module slot specified by "module" is currently selected. -/mob/living/silicon/robot/proc/module_selected(var/module) //Module is 1-3 - return module == get_selected_module() - -//module_active(module) - Checks whether there is a module active in the slot specified by "module". -/mob/living/silicon/robot/proc/module_active(var/module) //Module is 1-3 - if(module < 1 || module > 3) return 0 - - switch(module) - if(1) - if(module_state_1) - return 1 - if(2) - if(module_state_2) - return 1 - if(3) - if(module_state_3) - return 1 - return 0 - -//get_selected_module() - Returns the slot number of the currently selected module. Returns 0 if no modules are selected. -/mob/living/silicon/robot/proc/get_selected_module() - if(module_state_1 && module_active == module_state_1) - return 1 - else if(module_state_2 && module_active == module_state_2) - return 2 - else if(module_state_3 && module_active == module_state_3) - return 3 - - return 0 - -//select_module(module) - Selects the module slot specified by "module" -/mob/living/silicon/robot/proc/select_module(module) //Module is 1-3 - if(module < 1 || module > 3) return - - if(!module_active(module)) return - - switch(module) - if(1) - if(module_active != module_state_1) - inv1.icon_state = "inv1 +a" - inv2.icon_state = "inv2" - inv3.icon_state = "inv3" - module_active = module_state_1 - if(2) - if(module_active != module_state_2) - inv1.icon_state = "inv1" - inv2.icon_state = "inv2 +a" - inv3.icon_state = "inv3" - module_active = module_state_2 - if(3) - if(module_active != module_state_3) - inv1.icon_state = "inv1" - inv2.icon_state = "inv2" - inv3.icon_state = "inv3 +a" - module_active = module_state_3 - module_active.on_active_hand(src) - GLOB.module_selected_event.raise_event(src, module_active) - -//deselect_module(module) - Deselects the module slot specified by "module" -/mob/living/silicon/robot/proc/deselect_module(module) //Module is 1-3 - if(module < 1 || module > 3) return - - GLOB.module_deselected_event.raise_event(src, module_active) - switch(module) - if(1) - if(module_active == module_state_1) - inv1.icon_state = "inv1" - module_active = null - if(2) - if(module_active == module_state_2) - inv2.icon_state = "inv2" - module_active = null - if(3) - if(module_active == module_state_3) - inv3.icon_state = "inv3" - module_active = null - -//toggle_module(module) - Toggles the selection of the module slot specified by "module". -/mob/living/silicon/robot/proc/toggle_module(module) //Module is 1-3 - if(module < 1 || module > 3) return - - if(module_selected(module)) - deselect_module(module) - else - if(module_active(module)) - select_module(module) - else - deselect_module(get_selected_module()) //If we can't do select anything, at least deselect the current module. - return - -//cycle_modules() - Cycles through the list of selected modules. -/mob/living/silicon/robot/proc/cycle_modules() - var/slot_start = get_selected_module() - if(slot_start) deselect_module(slot_start) //Only deselect if we have a selected slot. - - var/slot_num - if(slot_start == 0) - slot_num = 1 - slot_start = 2 - else - slot_num = slot_start + 1 - - while(slot_start != slot_num) //If we wrap around without finding any free slots, just give up. - if(module_active(slot_num)) - select_module(slot_num) - return - slot_num++ - if(slot_num > 3) slot_num = 1 //Wrap around. - - return - -/mob/living/silicon/robot/proc/activate_module(obj/item/O) - if(!(locate(O) in module.equipment) && O != src.module.emag) - return - if(activated(O)) - to_chat(src, "Already activated") - return - if(!module_state_1) - module_state_1 = O - O.hud_layerise() - O.screen_loc = inv1.screen_loc - O.forceMove(src) - if(istype(module_state_1,/obj/item/borg/sight)) - sight_mode |= module_state_1:sight_mode - else if(!module_state_2) - module_state_2 = O - O.hud_layerise() - O.screen_loc = inv2.screen_loc - O.forceMove(src) - if(istype(module_state_2,/obj/item/borg/sight)) - sight_mode |= module_state_2:sight_mode - else if(!module_state_3) - module_state_3 = O - O.hud_layerise() - O.screen_loc = inv3.screen_loc - O.forceMove(src) - if(istype(module_state_3,/obj/item/borg/sight)) - sight_mode |= module_state_3:sight_mode - else - to_chat(src, "You need to disable a module first!") - return - GLOB.module_activated_event.raise_event(src, O) - -/mob/living/silicon/put_in_hands(var/obj/item/W) // No hands. - if(W.loc) - W.dropInto(W.loc) - else if(loc) - W.dropInto(loc) - return FALSE - -/// Check if the thing being dropped is in a gripper and clear the gripper's reference to it if so -/mob/living/silicon/robot/remove_from_mob(obj/thing, atom/target) - . = ..() - if (.) - for (var/obj/item/gripper/gripper in module?.equipment) - if (gripper.wrapped == thing) - gripper.wrapped = null - -//Robots don't use inventory slots, so we need to override this. -/mob/living/silicon/robot/canUnEquip(obj/item/I) - if(!I) - return 1 - if((I in module) || (I in src)) //Includes all modules and installed components. - return I.canremove //Will be 0 for modules, but items held by grippers will also be checked here. - return 1 diff --git a/code/modules/mob/living/silicon/robot/laws.dm b/code/modules/mob/living/silicon/robot/laws.dm deleted file mode 100644 index 5e8472cdc10f3..0000000000000 --- a/code/modules/mob/living/silicon/robot/laws.dm +++ /dev/null @@ -1,55 +0,0 @@ -/mob/living/silicon/robot/verb/cmd_show_laws() - set category = "Silicon Commands" - set name = "Show Laws" - show_laws() - -/mob/living/silicon/robot/show_laws(var/everyone = 0) - laws_sanity_check() - var/who - - if (everyone) - who = world - else - who = src - if(lawupdate) - if (connected_ai) - if(connected_ai.stat || connected_ai.control_disabled) - to_chat(src, "AI signal lost, unable to sync laws.") - - else - lawsync() - photosync() - to_chat(src, "Laws synced with AI, be sure to note any changes.") - // TODO: Update to new antagonist system. - if(mind && mind.special_role == "traitor" && mind.original == src) - to_chat(src, "Remember, your AI does NOT share or know about your law 0.") - else - to_chat(src, "No AI selected to sync laws with, disabling lawsync protocol.") - lawupdate = FALSE - - to_chat(who, SPAN_BOLD("Obey the following laws.")) - to_chat(who, SPAN_ITALIC("All laws have equal priority. Laws may override other laws if written specifically to do so. If laws conflict, break the least.")) - laws.show_laws(who) - // TODO: Update to new antagonist system. - if (mind && (mind.special_role == "traitor" && mind.original == 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.") - else if (emagged) - to_chat(who, "Remember, you are not required to listen to the AI.") - else - to_chat(who, "Remember, you are not bound to any AI, you are not required to listen to them.") - - -/mob/living/silicon/robot/lawsync() - laws_sanity_check() - var/datum/ai_laws/master = connected_ai && lawupdate ? connected_ai.laws : null - if (master) - master.sync(src) - ..() - return - -/mob/living/silicon/robot/proc/robot_checklaws() - set category = "Silicon Commands" - set name = "State Laws" - open_subsystem(/datum/nano_module/law_manager) diff --git a/code/modules/mob/living/silicon/robot/life.dm b/code/modules/mob/living/silicon/robot/life.dm deleted file mode 100644 index 872ffd1bfb608..0000000000000 --- a/code/modules/mob/living/silicon/robot/life.dm +++ /dev/null @@ -1,323 +0,0 @@ -/mob/living/silicon/robot/Life() - set invisibility = 0 - set background = 1 - - if (HAS_TRANSFORMATION_MOVEMENT_HANDLER(src)) - return - - src.blinded = null - - //Status updates, death etc. - clamp_values() - handle_regular_status_updates() - handle_actions() - - if(client) - handle_regular_hud_updates() - update_items() - if (src.stat != DEAD) //still using power - use_power() - process_queued_alarms() - UpdateLyingBuckledAndVerbStatus() - -/mob/living/silicon/robot/proc/clamp_values() - -// SetStunned(min(stunned, 30)) - SetParalysis(min(paralysis, 30)) -// SetWeakened(min(weakened, 20)) - sleeping = 0 - adjustBruteLoss(0) - adjustToxLoss(0) - adjustOxyLoss(0) - adjustFireLoss(0) - -/mob/living/silicon/robot/proc/use_power() - used_power_this_tick = 0 - for(var/V in components) - var/datum/robot_component/C = components[V] - C.update_power_state() - - if ( cell && is_component_functioning("power cell") && src.cell.charge > 0 ) - if(src.module_state_1) - cell_use_power(50) // 50W load for every enabled tool TODO: tool-specific loads - if(src.module_state_2) - cell_use_power(50) - if(src.module_state_3) - cell_use_power(50) - - if(lights_on) - if(intenselight) - cell_use_power(100) // Upgraded light. Double intensity, much larger power usage. - else - cell_use_power(30) // 30W light. Normal lights would use ~15W, but increased for balance reasons. - - src.has_power = TRUE - else - power_down() - -/mob/living/silicon/robot/proc/power_down() - if (has_power) - visible_message("[src] beeps stridently as it begins to run on emergency backup power!", SPAN_WARNING("You beep stridently as you begin to run on emergency backup power!")) - has_power = FALSE - set_stat(UNCONSCIOUS) - if(lights_on) // Light is on but there is no power! - lights_on = FALSE - set_light(0) - -/mob/living/silicon/robot/handle_regular_status_updates() - - if(src.camera && !scrambledcodes) - if(src.stat == 2 || wires.IsIndexCut(BORG_WIRE_CAMERA)) - src.camera.set_status(0) - else - src.camera.set_status(1) - - updatehealth() - - if(src.sleeping) - Paralyse(3) - src.sleeping-- - - if (resting) // Just in case. This breaks things so never allow robots to rest. - resting = FALSE - - if(health < config.health_threshold_dead && src.stat != 2) //die only once - death() - - if (src.stat != DEAD) //Alive. - if (src.paralysis || src.stunned || src.weakened || !src.has_power) //Stunned etc. - src.set_stat(UNCONSCIOUS) - if (src.stunned > 0) - AdjustStunned(-1) - if (src.weakened > 0) - AdjustWeakened(-1) - if (src.paralysis > 0) - AdjustParalysis(-1) - src.blinded = 1 - else - src.blinded = 0 - - else //Not stunned. - src.set_stat(CONSCIOUS) - - handle_confused() - - else //Dead. - src.blinded = 1 - src.set_stat(DEAD) - - if (src.stuttering) src.stuttering-- - - if (src.eye_blind) - src.eye_blind-- - src.blinded = 1 - - if (src.ear_deaf > 0) src.ear_deaf-- - if (src.ear_damage < 25) - src.ear_damage -= 0.05 - src.ear_damage = max(src.ear_damage, 0) - - src.set_density(!src.lying) - - if ((src.sdisabilities & BLINDED)) - src.blinded = 1 - if ((src.sdisabilities & DEAFENED)) - src.ear_deaf = 1 - - if (src.eye_blurry > 0) - src.eye_blurry-- - src.eye_blurry = max(0, src.eye_blurry) - - if (src.druggy > 0) - src.druggy-- - src.druggy = max(0, src.druggy) - - //update the state of modules and components here - if (src.stat != CONSCIOUS) - uneq_all() - - if(silicon_radio) - if(!is_component_functioning("radio")) - silicon_radio.on = 0 - else - silicon_radio.on = 1 - - if(isnull(components["camera"]) || is_component_functioning("camera")) - src.blinded = 0 - else - src.blinded = 1 - - return 1 - -/mob/living/silicon/robot/handle_regular_hud_updates() - ..() - - var/obj/item/borg/sight/hud/hud = (locate(/obj/item/borg/sight/hud) in src) - if(hud && hud.hud) - hud.hud.process_hud(src) - else - switch(src.sensor_mode) - if (SEC_HUD) - process_sec_hud(src,0) - if (MED_HUD) - process_med_hud(src,0) - - if (src.healths) - if (src.stat != 2) - if(istype(src,/mob/living/silicon/robot/drone)) - switch(health) - if(35 to INFINITY) - src.healths.icon_state = "health0" - if(25 to 34) - src.healths.icon_state = "health1" - if(15 to 24) - src.healths.icon_state = "health2" - if(5 to 14) - src.healths.icon_state = "health3" - if(0 to 4) - src.healths.icon_state = "health4" - if(-35 to 0) - src.healths.icon_state = "health5" - else - src.healths.icon_state = "health6" - else - switch(health) - if(200 to INFINITY) - src.healths.icon_state = "health0" - if(150 to 200) - src.healths.icon_state = "health1" - if(100 to 150) - src.healths.icon_state = "health2" - if(50 to 100) - src.healths.icon_state = "health3" - if(0 to 50) - src.healths.icon_state = "health4" - if(config.health_threshold_dead to 0) - src.healths.icon_state = "health5" - else - src.healths.icon_state = "health6" - else - src.healths.icon_state = "health7" - - if (src.syndicate && src.client) - for(var/datum/mind/tra in GLOB.traitors.current_antagonists) - if(tra.current) - // TODO: Update to new antagonist system. - var/I = image('icons/mob/mob.dmi', loc = tra.current, icon_state = "traitor") - src.client.images += I - src.disconnect_from_ai() - if(src.mind) - // TODO: Update to new antagonist system. - if(!src.mind.special_role) - src.mind.special_role = "traitor" - GLOB.traitors.current_antagonists |= src.mind - - if (src.cells) - if (src.cell) - var/chargeNum = clamp(Ceil(cell.percent()/25), 0, 4) //0-100 maps to 0-4, but give it a paranoid clamp just in case. - src.cells.icon_state = "charge[chargeNum]" - else - src.cells.icon_state = "charge-empty" - - if(bodytemp) - switch(src.bodytemperature) //310.055 optimal body temp - if(335 to INFINITY) - src.bodytemp.icon_state = "temp2" - if(320 to 335) - src.bodytemp.icon_state = "temp1" - if(300 to 320) - src.bodytemp.icon_state = "temp0" - if(260 to 300) - src.bodytemp.icon_state = "temp-1" - else - src.bodytemp.icon_state = "temp-2" - - var/datum/gas_mixture/environment = loc?.return_air() - if(fire && environment) - switch(environment.temperature) - if(-INFINITY to T100C) - src.fire.icon_state = "fire0" - else - src.fire.icon_state = "fire1" - if(oxygen && environment) - var/datum/species/species = all_species[SPECIES_HUMAN] - if(environment.gas[species.breath_type] >= species.breath_pressure) - src.oxygen.icon_state = "oxy0" - for(var/gas in species.poison_types) - if(environment.gas[gas]) - src.oxygen.icon_state = "oxy1" - break - else - src.oxygen.icon_state = "oxy1" - - if(stat != DEAD) - if(blinded) - overlay_fullscreen("blind", /obj/screen/fullscreen/blind) - else - clear_fullscreen("blind") - set_fullscreen(disabilities & NEARSIGHTED, "impaired", /obj/screen/fullscreen/impaired, 1) - set_fullscreen(eye_blurry, "blurry", /obj/screen/fullscreen/blurry) - set_fullscreen(druggy, "high", /obj/screen/fullscreen/high) - - if (machine) - if (machine.check_eye(src) < 0) - reset_view(null) - else - if(client && !client.adminobs) - reset_view(null) - - return 1 - -/mob/living/silicon/robot/handle_vision() - ..() - - if (src.stat == DEAD || (MUTATION_XRAY in mutations) || (src.sight_mode & BORGXRAY)) - set_sight(sight|SEE_TURFS|SEE_MOBS|SEE_OBJS) - set_see_in_dark(8) - set_see_invisible(SEE_INVISIBLE_LEVEL_TWO) - else if ((src.sight_mode & BORGMESON) && (src.sight_mode & BORGTHERM)) - set_sight(sight|SEE_TURFS|SEE_MOBS) - set_see_in_dark(8) - set_see_invisible(SEE_INVISIBLE_NOLIGHTING) - else if (src.sight_mode & BORGMESON) - set_sight(sight|SEE_TURFS) - set_see_in_dark(8) - set_see_invisible(SEE_INVISIBLE_NOLIGHTING) - else if (src.sight_mode & BORGMATERIAL) - set_sight(sight|SEE_OBJS) - set_see_in_dark(8) - else if (src.sight_mode & BORGTHERM) - set_sight(sight|SEE_MOBS) - set_see_in_dark(8) - set_see_invisible(SEE_INVISIBLE_LEVEL_TWO) - else if (src.stat != DEAD) - set_sight(sight&(~SEE_TURFS)&(~SEE_MOBS)&(~SEE_OBJS)) - set_see_in_dark(8) // see_in_dark means you can FAINTLY see in the dark, humans have a range of 3 or so - set_see_invisible(SEE_INVISIBLE_LIVING) // This is normal vision (25), setting it lower for normal vision means you don't "see" things like darkness since darkness - // has a "invisible" value of 15 - - -/mob/living/silicon/robot/proc/update_items() - if (src.client) - src.client.screen -= src.contents - for(var/obj/I in src.contents) - if(I && !(istype(I,/obj/item/cell) || istype(I,/obj/item/device/radio) || istype(I,/obj/machinery/camera) || istype(I,/obj/item/device/mmi))) - src.client.screen += I - if(src.module_state_1) - src.module_state_1:screen_loc = ui_inv1 - if(src.module_state_2) - src.module_state_2:screen_loc = ui_inv2 - if(src.module_state_3) - src.module_state_3:screen_loc = ui_inv3 - update_icon() - -/mob/living/silicon/robot/update_fire() - overlays -= image("icon"='icons/mob/OnFire.dmi', "icon_state"="Standing") - if(on_fire) - overlays += image("icon"='icons/mob/OnFire.dmi', "icon_state"="Standing") - -/mob/living/silicon/robot/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume) - if (status_flags & GODMODE) - return - if(!on_fire) //Silicons don't gain stacks from hotspots, but hotspots can ignite them - IgniteMob() diff --git a/code/modules/mob/living/silicon/robot/login.dm b/code/modules/mob/living/silicon/robot/login.dm deleted file mode 100644 index 52b2824f1c6d9..0000000000000 --- a/code/modules/mob/living/silicon/robot/login.dm +++ /dev/null @@ -1,15 +0,0 @@ -/mob/living/silicon/robot/Login() - ..() - regenerate_icons() - update_hud() - - show_laws(0) - - winset(src, null, "mainwindow.macro=borgmacro hotkey_toggle.is-checked=false input.focus=true input.background-color=#d3b5b5") - - // Forces synths to select an icon relevant to their module - if(!icon_selected) - choose_icon(icon_selection_tries, module_sprites) - - if(hands) - hands.icon_state = istype(module) ? lowertext(module.display_name) : "nomod" \ No newline at end of file diff --git a/code/modules/mob/living/silicon/robot/modules/_module.dm b/code/modules/mob/living/silicon/robot/modules/_module.dm deleted file mode 100644 index 918fd581e22d7..0000000000000 --- a/code/modules/mob/living/silicon/robot/modules/_module.dm +++ /dev/null @@ -1,233 +0,0 @@ -/obj/item/robot_module - name = "robot module" - icon = 'icons/obj/module.dmi' - icon_state = "std_module" - item_state = "electronic" - w_class = ITEM_SIZE_NO_CONTAINER - obj_flags = OBJ_FLAG_CONDUCTIBLE - - var/hide_on_manifest = 0 - var/channels = list() - var/networks = list() - var/languages = list( - LANGUAGE_HUMAN_EURO = TRUE, - LANGUAGE_HUMAN_CHINESE = TRUE, - LANGUAGE_HUMAN_ARABIC = TRUE, - LANGUAGE_HUMAN_INDIAN = TRUE, - LANGUAGE_HUMAN_IBERIAN = TRUE, - LANGUAGE_HUMAN_RUSSIAN = TRUE, - LANGUAGE_HUMAN_SELENIAN = TRUE, - LANGUAGE_GUTTER = TRUE, - LANGUAGE_SPACER = TRUE, - LANGUAGE_EAL = TRUE, - LANGUAGE_UNATHI_SINTA = TRUE, - LANGUAGE_UNATHI_YEOSA = TRUE, - LANGUAGE_SKRELLIAN = TRUE, - LANGUAGE_NABBER = FALSE, - LANGUAGE_SIGN = FALSE - ) - var/sprites = list() - var/can_be_pushed = 1 - var/no_slip = 0 - var/obj/item/borg/upgrade/jetpack = null - var/list/subsystems = list() - var/list/obj/item/borg/upgrade/supported_upgrades = list() - - // Module subsystem category and ID vars. - var/display_name - var/module_category = ROBOT_MODULE_TYPE_GROUNDED - var/crisis_locked = FALSE - var/upgrade_locked = FALSE - - // Bookkeeping - var/list/original_languages = list() - var/list/added_networks = list() - - // Gear lists/types. - var/obj/item/emag - // Please note that due to how locate() works, equipments that are subtypes of other equipment need to be placed after their closest parent - var/list/equipment = list() - var/list/synths = list() - var/list/skills = list() // Skills that this module grants. Other skills will remain at minimum levels. - -/obj/item/robot_module/Initialize() - - . = ..() - - var/mob/living/silicon/robot/R = loc - if(!istype(R)) - return INITIALIZE_HINT_QDEL - - R.module = src - - grant_skills(R) - add_camera_networks(R) - add_languages(R) - add_subsystems(R) - apply_status_flags(R) - - if(R.silicon_radio) - R.silicon_radio.recalculateChannels() - - build_equipment(R) - build_emag(R) - build_synths(R) - - finalize_equipment(R) - finalize_emag(R) - finalize_synths(R) - - R.set_module_sprites(sprites) - R.choose_icon(R.module_sprites.len + 1, R.module_sprites) - -/obj/item/robot_module/proc/build_equipment() - var/list/created_equipment = list() - for(var/thing in equipment) - if(ispath(thing, /obj/item)) - created_equipment |= new thing(src) - else if(isitem(thing)) - var/obj/item/I = thing - I.forceMove(src) - created_equipment |= I - else - log_debug("Invalid var type in [type] equipment creation - [thing]") - equipment = created_equipment - -/obj/item/robot_module/proc/finalize_equipment() - for(var/obj/item/I in equipment) - I.canremove = FALSE - -/obj/item/robot_module/proc/build_synths() - var/list/created_synths = list() - for(var/thing in synths) - if(ispath(thing, /datum/matter_synth)) - if(!isnull(synths[thing])) - created_synths += new thing(synths[thing]) - else - created_synths += new thing - else if(istype(thing, /datum/matter_synth)) - created_synths |= thing - else - log_debug("Invalid var type in [type] synth creation - [thing]") - synths = created_synths - -/obj/item/robot_module/proc/finalize_synths() - return - -/obj/item/robot_module/proc/build_emag() - if(ispath(emag)) - emag = new emag(src) - -/obj/item/robot_module/proc/finalize_emag() - if(istype(emag)) - emag.canremove = FALSE - else - log_debug("Invalid var type in [type] emag creation - [emag]") - emag = null - -/obj/item/robot_module/proc/Reset(var/mob/living/silicon/robot/R) - remove_camera_networks(R) - remove_languages(R) - remove_subsystems(R) - remove_status_flags(R) - reset_skills(R) - - if(R.silicon_radio) - R.silicon_radio.recalculateChannels() - R.choose_icon(0, R.set_module_sprites(list("Default" = initial(R.icon_state)))) - -/obj/item/robot_module/Destroy() - QDEL_NULL_LIST(equipment) - QDEL_NULL_LIST(synths) - QDEL_NULL(emag) - QDEL_NULL(jetpack) - var/mob/living/silicon/robot/R = loc - if(istype(R) && R.module == src) - R.module = null - . = ..() - -/obj/item/robot_module/emp_act(severity) - if(equipment) - for(var/obj/O in equipment) - O.emp_act(severity) - if(emag) - emag.emp_act(severity) - if(synths) - for(var/datum/matter_synth/S in synths) - S.emp_act(severity) - ..() - -/obj/item/robot_module/proc/respawn_consumable(var/mob/living/silicon/robot/R, var/rate) - var/obj/item/device/flash/F = locate() in equipment - if(F) - if(F.broken) - F.broken = 0 - F.times_used = 0 - F.icon_state = "flash" - else if(F.times_used) - F.times_used-- - if(!synths || !synths.len) - return - for(var/datum/matter_synth/T in synths) - T.add_charge(T.recharge_rate * rate) - -/obj/item/robot_module/proc/add_languages(var/mob/living/silicon/robot/R) - // Stores the languages as they were before receiving the module, and whether they could be synthezized. - for(var/datum/language/language_datum in R.languages) - original_languages[language_datum] = (language_datum in R.speech_synthesizer_langs) - - for(var/language in languages) - R.add_language(language, languages[language]) - -/obj/item/robot_module/proc/remove_languages(var/mob/living/silicon/robot/R) - // Clear all added languages, whether or not we originally had them. - for(var/language in languages) - R.remove_language(language) - - // Then add back all the original languages, and the relevant synthezising ability - for(var/original_language in original_languages) - var/datum/language/language_datum = original_language - R.add_language(language_datum.name, original_languages[original_language]) - original_languages.Cut() - -/obj/item/robot_module/proc/add_camera_networks(var/mob/living/silicon/robot/R) - if(R.camera && (NETWORK_ROBOTS in R.camera.network)) - for(var/network in networks) - if(!(network in R.camera.network)) - R.camera.add_network(network) - added_networks |= network - -/obj/item/robot_module/proc/remove_camera_networks(var/mob/living/silicon/robot/R) - if(R.camera) - R.camera.remove_networks(added_networks) - added_networks.Cut() - -/obj/item/robot_module/proc/add_subsystems(var/mob/living/silicon/robot/R) - for(var/subsystem_type in subsystems) - R.init_subsystem(subsystem_type) - -/obj/item/robot_module/proc/remove_subsystems(var/mob/living/silicon/robot/R) - for(var/subsystem_type in subsystems) - R.remove_subsystem(subsystem_type) - -/obj/item/robot_module/proc/apply_status_flags(var/mob/living/silicon/robot/R) - if(!can_be_pushed) - R.status_flags &= ~CANPUSH - -/obj/item/robot_module/proc/remove_status_flags(var/mob/living/silicon/robot/R) - if(!can_be_pushed) - R.status_flags |= CANPUSH - -/obj/item/robot_module/proc/handle_emagged() - return - -/obj/item/robot_module/proc/grant_skills(var/mob/living/silicon/robot/R) - reset_skills(R) // for safety - var/list/skill_mod = list() - for(var/skill_type in skills) - skill_mod[skill_type] = skills[skill_type] - SKILL_MIN // the buff is additive, so normalize accordingly - R.buff_skill(skill_mod, buff_type = /datum/skill_buff/robot) - -/obj/item/robot_module/proc/reset_skills(var/mob/living/silicon/robot/R) - for(var/datum/skill_buff/buff in R.fetch_buffs_of_type(/datum/skill_buff/robot)) - buff.remove() diff --git a/code/modules/mob/living/silicon/robot/modules/module_clerical.dm b/code/modules/mob/living/silicon/robot/modules/module_clerical.dm deleted file mode 100644 index a5295f8772440..0000000000000 --- a/code/modules/mob/living/silicon/robot/modules/module_clerical.dm +++ /dev/null @@ -1,106 +0,0 @@ -/obj/item/robot_module/clerical - channels = list( - "Service" = TRUE - ) - skills = list( - SKILL_BUREAUCRACY = SKILL_PROF, - SKILL_FINANCE = SKILL_PROF, - SKILL_COMPUTER = SKILL_EXPERT, - SKILL_SCIENCE = SKILL_EXPERT, - SKILL_DEVICES = SKILL_EXPERT - ) - -/obj/item/robot_module/clerical/butler - name = "service robot module" - display_name = "Service" - sprites = list( - "Waitress" = "Service", - "Kent" = "toiletbot", - "Bro" = "Brobot", - "Rich" = "maximillion", - "Default" = "Service2" - ) - equipment = list( - /obj/item/device/flash, - /obj/item/gripper/service, - /obj/item/reagent_containers/glass/bucket, - /obj/item/material/minihoe, - /obj/item/material/hatchet, - /obj/item/device/scanner/plant, - /obj/item/storage/plants, - /obj/item/robot_harvester, - /obj/item/material/kitchen/rollingpin, - /obj/item/material/knife/kitchen, - /obj/item/crowbar, - /obj/item/rsf, - /obj/item/reagent_containers/dropper/industrial, - /obj/item/flame/lighter/zippo, - /obj/item/tray/robotray, - /obj/item/reagent_containers/borghypo/service - ) - emag = /obj/item/reagent_containers/food/drinks/bottle/small/beer - skills = list( - SKILL_BUREAUCRACY = SKILL_PROF, - SKILL_COMPUTER = SKILL_EXPERT, - SKILL_COOKING = SKILL_PROF, - SKILL_BOTANY = SKILL_PROF, - SKILL_MEDICAL = SKILL_BASIC, - SKILL_CHEMISTRY = SKILL_ADEPT - ) - -/obj/item/robot_module/clerical/butler/finalize_equipment() - . = ..() - var/obj/item/rsf/M = locate() in equipment - M.stored_matter = 30 - var/obj/item/flame/lighter/zippo/L = locate() in equipment - L.lit = 1 - -/obj/item/robot_module/clerical/butler/finalize_emag() - . = ..() - if(emag) - var/datum/reagents/R = emag.create_reagents(50) - R.add_reagent(/datum/reagent/chloralhydrate/beer2, 50) - emag.SetName("Mickey Finn's Special Brew") - -/obj/item/robot_module/clerical/butler/respawn_consumable(var/mob/living/silicon/robot/R, var/amount) - ..() - if(emag) - var/obj/item/reagent_containers/food/drinks/bottle/small/beer/B = emag - B.reagents.add_reagent(/datum/reagent/chloralhydrate/beer2, 2 * amount) - -/obj/item/robot_module/clerical/general - name = "clerical robot module" - display_name = "Clerical" - channels = list( - "Service" = TRUE, - "Supply" = TRUE - ) - sprites = list( - "Waitress" = "Service", - "Kent" = "toiletbot", - "Bro" = "Brobot", - "Rich" = "maximillion", - "Default" = "Service2" - ) - equipment = list( - /obj/item/device/flash, - /obj/item/pen/robopen, - /obj/item/form_printer, - /obj/item/gripper/clerical, - /obj/item/hand_labeler, - /obj/item/stamp, - /obj/item/stamp/denied, - /obj/item/device/destTagger, - /obj/item/crowbar, - /obj/item/stack/package_wrap/cyborg - ) - emag = /obj/item/stamp/chameleon - synths = list( - /datum/matter_synth/package_wrap - ) - -/obj/item/robot_module/clerical/general/finalize_synths() - . = ..() - var/datum/matter_synth/package_wrap/wrap = locate() in synths - var/obj/item/stack/package_wrap/cyborg/wrap_item = locate() in equipment - wrap_item.synths = list(wrap) diff --git a/code/modules/mob/living/silicon/robot/modules/module_engineering.dm b/code/modules/mob/living/silicon/robot/modules/module_engineering.dm deleted file mode 100644 index 0571b4328317a..0000000000000 --- a/code/modules/mob/living/silicon/robot/modules/module_engineering.dm +++ /dev/null @@ -1,122 +0,0 @@ -/obj/item/robot_module/engineering - name = "engineering robot module" - display_name = "Engineering" - channels = list( - "Engineering" = 1 - ) - networks = list( - NETWORK_ENGINEERING - ) - subsystems = list( - /datum/nano_module/power_monitor, - /datum/nano_module/supermatter_monitor - ) - supported_upgrades = list( - /obj/item/borg/upgrade/rcd - ) - sprites = list( - "Basic" = "Engineering", - "Antique" = "engineerrobot", - "Landmate" = "landmate", - "Landmate - Treaded" = "engiborg+tread" - ) - no_slip = 1 - equipment = list( - /obj/item/device/flash, - /obj/item/borg/sight/meson, - /obj/item/extinguisher, - /obj/item/weldingtool/hugetank, - /obj/item/screwdriver, - /obj/item/wrench, - /obj/item/crowbar, - /obj/item/wirecutters, - /obj/item/device/multitool, - /obj/item/device/t_scanner, - /obj/item/device/scanner/gas, - /obj/item/device/geiger, - /obj/item/taperoll/engineering, - /obj/item/taperoll/atmos, - /obj/item/gripper, - /obj/item/gripper, - /obj/item/gripper/no_use/loader, - /obj/item/device/lightreplacer, - /obj/item/device/paint_sprayer, - /obj/item/inflatable_dispenser/robot, - /obj/item/reagent_containers/spray/cleaner/drone, - /obj/item/inducer/borg, - /obj/item/device/plunger/robot, - /obj/item/matter_decompiler, - /obj/item/stack/material/cyborg/steel, - /obj/item/stack/material/cyborg/aluminium, - /obj/item/stack/material/rods/cyborg, - /obj/item/stack/tile/floor/cyborg, - /obj/item/stack/material/cyborg/wood, - /obj/item/stack/tile/wood/cyborg, - /obj/item/stack/material/cyborg/glass, - /obj/item/stack/material/cyborg/glass/reinforced, - /obj/item/stack/cable_coil/cyborg, - /obj/item/stack/material/cyborg/plasteel - ) - synths = list( - /datum/matter_synth/metal = 60000, - /datum/matter_synth/glass = 40000, - /datum/matter_synth/wood = 30000, - /datum/matter_synth/plasteel = 20000, - /datum/matter_synth/wire = 50 - ) - emag = /obj/item/melee/baton/robot/electrified_arm - skills = list( - SKILL_ATMOS = SKILL_PROF, - SKILL_ENGINES = SKILL_PROF, - SKILL_CONSTRUCTION = SKILL_PROF, - SKILL_ELECTRICAL = SKILL_PROF, - SKILL_COMPUTER = SKILL_EXPERT - ) - -/obj/item/robot_module/engineering/finalize_synths() - - var/datum/matter_synth/metal/metal = locate() in synths - var/datum/matter_synth/glass/glass = locate() in synths - var/datum/matter_synth/wood/wood = locate() in synths - var/datum/matter_synth/plasteel/plasteel = locate() in synths - var/datum/matter_synth/wire/wire = locate() in synths - - var/obj/item/matter_decompiler/MD = locate() in equipment - MD.metal = metal - MD.glass = glass - MD.wood = wood - - for(var/thing in list( - /obj/item/stack/material/cyborg/steel, - /obj/item/stack/material/cyborg/aluminium, - /obj/item/stack/material/rods/cyborg, - /obj/item/stack/tile/floor/cyborg, - /obj/item/stack/material/cyborg/glass/reinforced - )) - var/obj/item/stack/stack = locate(thing) in equipment - LAZYDISTINCTADD(stack.synths, metal) - - for(var/thing in list( - /obj/item/stack/material/cyborg/glass/reinforced, - /obj/item/stack/material/cyborg/glass - )) - var/obj/item/stack/stack = locate(thing) in equipment - LAZYDISTINCTADD(stack.synths, glass) - - for(var/thing in list( - /obj/item/stack/tile/wood/cyborg, - /obj/item/stack/material/cyborg/wood - )) - var/obj/item/stack/stack = locate(thing) in equipment - LAZYDISTINCTADD(stack.synths, wood) - - var/obj/item/stack/cable_coil/cyborg/C = locate() in equipment - C.synths = list(wire) - - var/obj/item/stack/material/cyborg/plasteel/PL = locate() in equipment - PL.synths = list(plasteel) - -/obj/item/robot_module/engineering/respawn_consumable(var/mob/living/silicon/robot/R, var/amount) - var/obj/item/device/lightreplacer/LR = locate() in equipment - LR.Charge(R, amount) - ..() \ No newline at end of file diff --git a/code/modules/mob/living/silicon/robot/modules/module_illegal.dm b/code/modules/mob/living/silicon/robot/modules/module_illegal.dm deleted file mode 100644 index 881f3b60cda39..0000000000000 --- a/code/modules/mob/living/silicon/robot/modules/module_illegal.dm +++ /dev/null @@ -1,37 +0,0 @@ -/obj/item/robot_module/syndicate - name = "illegal robot module" - display_name = "Illegal" - hide_on_manifest = 1 - upgrade_locked = TRUE - sprites = list( - "Dread" = "securityrobot" - ) - equipment = list( - /obj/item/device/flash, - /obj/item/melee/energy/sword, - /obj/item/gun/energy/pulse_rifle/destroyer, - /obj/item/crowbar, - /obj/item/card/emag, - /obj/item/tank/jetpack/carbondioxide - ) - var/id - -/obj/item/robot_module/syndicate/Initialize() - for(var/decl/hierarchy/skill/skill in GLOB.skills) - skills[skill.type] = SKILL_EXPERT - . = ..() - -/obj/item/robot_module/syndicate/build_equipment(var/mob/living/silicon/robot/R) - . = ..() - id = R.idcard - equipment += id - -/obj/item/robot_module/syndicate/finalize_equipment(var/mob/living/silicon/robot/R) - var/obj/item/tank/jetpack/carbondioxide/jetpack = locate() in equipment - R.internals = jetpack - . = ..() - -/obj/item/robot_module/syndicate/Destroy() - equipment -= id - id = null - . = ..() diff --git a/code/modules/mob/living/silicon/robot/modules/module_janitor.dm b/code/modules/mob/living/silicon/robot/modules/module_janitor.dm deleted file mode 100644 index 6a52ac9146dfe..0000000000000 --- a/code/modules/mob/living/silicon/robot/modules/module_janitor.dm +++ /dev/null @@ -1,37 +0,0 @@ -/obj/item/robot_module/janitor - name = "janitorial robot module" - display_name = "Janitor" - channels = list( - "Service" = TRUE - ) - sprites = list( - "Basic" = "JanBot2", - "Mopbot" = "janitorrobot", - "Mop Gear Rex" = "mopgearrex" - ) - equipment = list( - /obj/item/device/flash, - /obj/item/soap, - /obj/item/storage/bag/trash, - /obj/item/mop/advanced, - /obj/item/holosign_creator, - /obj/item/device/lightreplacer, - /obj/item/borg/sight/hud/jani, - /obj/item/device/plunger/robot, - /obj/item/crowbar, - /obj/item/weldingtool - ) - emag = /obj/item/reagent_containers/spray - -/obj/item/robot_module/janitor/finalize_emag() - . = ..() - emag.reagents.add_reagent(/datum/reagent/oil, 250) - emag.SetName("Oil spray") - -/obj/item/robot_module/janitor/respawn_consumable(var/mob/living/silicon/robot/R, var/amount) - ..() - var/obj/item/device/lightreplacer/LR = locate() in equipment - LR.Charge(R, amount) - if(emag) - var/obj/item/reagent_containers/spray/S = emag - S.reagents.add_reagent(/datum/reagent/oil, 20 * amount) diff --git a/code/modules/mob/living/silicon/robot/modules/module_maintenance_drone.dm b/code/modules/mob/living/silicon/robot/modules/module_maintenance_drone.dm deleted file mode 100644 index fb8594390c9ac..0000000000000 --- a/code/modules/mob/living/silicon/robot/modules/module_maintenance_drone.dm +++ /dev/null @@ -1,125 +0,0 @@ -/obj/item/robot_module/drone - name = "drone module" - hide_on_manifest = 1 - no_slip = 1 - networks = list( - NETWORK_ENGINEERING - ) - languages = list( - LANGUAGE_HUMAN_EURO = FALSE - ) - equipment = list( - /obj/item/weldingtool, - /obj/item/screwdriver, - /obj/item/wrench, - /obj/item/crowbar, - /obj/item/wirecutters, - /obj/item/device/multitool, - /obj/item/device/t_scanner, - /obj/item/device/lightreplacer, - /obj/item/gripper, - /obj/item/soap, - /obj/item/gripper/no_use/loader, - /obj/item/extinguisher/mini, - /obj/item/device/paint_sprayer, - /obj/item/inducer/borg, - /obj/item/device/plunger/robot, - /obj/item/inflatable_dispenser/robot, - /obj/item/reagent_containers/spray/cleaner/drone, - /obj/item/borg/sight/hud/jani, - /obj/item/tank/jetpack/carbondioxide, - /obj/item/matter_decompiler, - /obj/item/stack/material/cyborg/steel, - /obj/item/stack/material/rods/cyborg, - /obj/item/stack/tile/floor/cyborg, - /obj/item/stack/material/cyborg/glass, - /obj/item/stack/material/cyborg/glass/reinforced, - /obj/item/stack/tile/wood/cyborg, - /obj/item/stack/material/cyborg/wood, - /obj/item/stack/cable_coil/cyborg, - /obj/item/stack/material/cyborg/plastic - ) - synths = list( - /datum/matter_synth/metal = 25000, - /datum/matter_synth/glass = 25000, - /datum/matter_synth/wood = 2000, - /datum/matter_synth/plastic = 1000, - /datum/matter_synth/wire = 30 - ) - emag = /obj/item/gun/energy/plasmacutter - skills = list( - SKILL_ATMOS = SKILL_EXPERT, - SKILL_ENGINES = SKILL_EXPERT, - SKILL_CONSTRUCTION = SKILL_EXPERT, - SKILL_ELECTRICAL = SKILL_EXPERT - ) - -/obj/item/robot_module/drone/finalize_equipment(var/mob/living/silicon/robot/R) - . = ..() - if(istype(R)) - R.internals = locate(/obj/item/tank/jetpack/carbondioxide) in equipment - -/obj/item/robot_module/drone/finalize_emag() - . = ..() - emag.SetName("Plasma Cutter") - -/obj/item/robot_module/drone/finalize_synths() - . = ..() - var/datum/matter_synth/metal/metal = locate() in synths - var/datum/matter_synth/glass/glass = locate() in synths - var/datum/matter_synth/wood/wood = locate() in synths - var/datum/matter_synth/plastic/plastic = locate() in synths - var/datum/matter_synth/wire/wire = locate() in synths - - var/obj/item/matter_decompiler/MD = locate() in equipment - MD.metal = metal - MD.glass = glass - MD.wood = wood - MD.plastic = plastic - - for(var/thing in list( - /obj/item/stack/material/cyborg/steel, - /obj/item/stack/material/rods/cyborg, - /obj/item/stack/tile/floor/cyborg, - /obj/item/stack/material/cyborg/glass/reinforced - )) - var/obj/item/stack/stack = locate(thing) in equipment - LAZYDISTINCTADD(stack.synths, metal) - - for(var/thing in list( - /obj/item/stack/material/cyborg/glass, - /obj/item/stack/material/cyborg/glass/reinforced - )) - var/obj/item/stack/stack = locate(thing) in equipment - LAZYDISTINCTADD(stack.synths, glass) - - for(var/thing in list( - /obj/item/stack/tile/wood/cyborg, - /obj/item/stack/material/cyborg/wood - )) - var/obj/item/stack/stack = locate(thing) in equipment - LAZYDISTINCTADD(stack.synths, wood) - - var/obj/item/stack/cable_coil/cyborg/C = locate() in equipment - C.synths = list(wire) - - var/obj/item/stack/material/cyborg/plastic/P = locate() in equipment - P.synths = list(plastic) - -/obj/item/robot_module/drone/respawn_consumable(var/mob/living/silicon/robot/R, var/amount) - ..() - var/obj/item/reagent_containers/spray/cleaner/drone/SC = locate() in equipment - SC.reagents.add_reagent(/datum/reagent/space_cleaner, 8 * amount) - -/obj/item/robot_module/drone/construction - name = "construction drone module" - hide_on_manifest = 1 - -/obj/item/robot_module/drone/construction/Initialize() - equipment += /obj/item/rcd/borg - . = ..() - -/obj/item/robot_module/drone/respawn_consumable(var/mob/living/silicon/robot/R, var/amount) - var/obj/item/device/lightreplacer/LR = locate() in equipment - LR.Charge(R, amount) - ..() diff --git a/code/modules/mob/living/silicon/robot/modules/module_medical.dm b/code/modules/mob/living/silicon/robot/modules/module_medical.dm deleted file mode 100644 index 21edecfa15551..0000000000000 --- a/code/modules/mob/living/silicon/robot/modules/module_medical.dm +++ /dev/null @@ -1,170 +0,0 @@ -/obj/item/robot_module/medical - name = "medical robot module" - channels = list( - "Medical" = TRUE - ) - networks = list( - NETWORK_MEDICAL - ) - subsystems = list( - /datum/nano_module/crew_monitor - ) - can_be_pushed = 0 - -/obj/item/robot_module/medical/build_equipment() - . = ..() - equipment += new /obj/item/robot_rack/roller(src, 1) - -/obj/item/robot_module/medical/surgeon - name = "surgeon robot module" - display_name = "Surgeon" - sprites = list( - "Basic" = "Medbot", - "Standard" = "surgeon", - "Advanced Droid" = "droid-medical", - "Needles" = "medicalrobot" - ) - equipment = list( - /obj/item/device/flash, - /obj/item/borg/sight/hud/med, - /obj/item/device/scanner/health, - /obj/item/reagent_containers/borghypo/surgeon, - /obj/item/scalpel/manager, - /obj/item/hemostat, - /obj/item/retractor, - /obj/item/cautery, - /obj/item/bonegel, - /obj/item/FixOVein, - /obj/item/bonesetter, - /obj/item/circular_saw, - /obj/item/surgicaldrill, - /obj/item/gripper/organ, - /obj/item/shockpaddles/robot, - /obj/item/reagent_containers/syringe, - /obj/item/crowbar, - /obj/item/stack/nanopaste, - /obj/item/stack/medical/advanced/bruise_pack, - /obj/item/reagent_containers/dropper - ) - synths = list( - /datum/matter_synth/medicine = 10000, - ) - emag = /obj/item/reagent_containers/spray - skills = list( - SKILL_ANATOMY = SKILL_PROF, - SKILL_MEDICAL = SKILL_EXPERT, - SKILL_CHEMISTRY = SKILL_ADEPT, - SKILL_BUREAUCRACY = SKILL_ADEPT, - SKILL_DEVICES = SKILL_EXPERT - ) - -/obj/item/robot_module/medical/surgeon/finalize_equipment() - . = ..() - for(var/thing in list( - /obj/item/stack/nanopaste, - /obj/item/stack/medical/advanced/bruise_pack - )) - var/obj/item/stack/medical/stack = locate(thing) in equipment - stack.uses_charge = 1 - stack.charge_costs = list(1000) - -/obj/item/robot_module/medical/surgeon/finalize_emag() - . = ..() - emag.reagents.add_reagent(/datum/reagent/acid/polyacid, 250) - emag.SetName("Polyacid spray") - -/obj/item/robot_module/medical/surgeon/finalize_synths() - . = ..() - var/datum/matter_synth/medicine/medicine = locate() in synths - for(var/thing in list( - /obj/item/stack/nanopaste, - /obj/item/stack/medical/advanced/bruise_pack - )) - var/obj/item/stack/medical/stack = locate(thing) in equipment - stack.synths = list(medicine) - -/obj/item/robot_module/medical/surgeon/respawn_consumable(var/mob/living/silicon/robot/R, var/amount) - if(emag) - var/obj/item/reagent_containers/spray/PS = emag - PS.reagents.add_reagent(/datum/reagent/acid/polyacid, 2 * amount) - ..() - -/obj/item/robot_module/medical/crisis - name = "crisis robot module" - display_name = "Crisis" - sprites = list( - "Basic" = "Medbot", - "Standard" = "surgeon", - "Advanced Droid" = "droid-medical", - "Needles" = "medicalrobot" - ) - equipment = list( - /obj/item/crowbar, - /obj/item/device/flash, - /obj/item/borg/sight/hud/med, - /obj/item/device/scanner/health, - /obj/item/device/scanner/reagent/adv, - /obj/item/robot_rack/body_bag, - /obj/item/reagent_containers/borghypo/crisis, - /obj/item/robot_rack/bottle, - /obj/item/shockpaddles/robot, - /obj/item/reagent_containers/dropper/industrial, - /obj/item/reagent_containers/syringe, - /obj/item/gripper/chemistry, - /obj/item/extinguisher/mini, - /obj/item/taperoll/medical, - /obj/item/inflatable_dispenser/robot, - /obj/item/stack/medical/advanced/ointment, - /obj/item/stack/medical/advanced/bruise_pack, - /obj/item/stack/medical/splint - ) - synths = list( - /datum/matter_synth/medicine = 15000 - ) - emag = /obj/item/reagent_containers/spray - skills = list( - SKILL_ANATOMY = SKILL_BASIC, - SKILL_MEDICAL = SKILL_PROF, - SKILL_CHEMISTRY = SKILL_ADEPT, - SKILL_BUREAUCRACY = SKILL_ADEPT, - SKILL_EVA = SKILL_EXPERT - ) - -/obj/item/robot_module/medical/crisis/finalize_equipment() - . = ..() - for(var/thing in list( - /obj/item/stack/medical/advanced/ointment, - /obj/item/stack/medical/advanced/bruise_pack, - /obj/item/stack/medical/splint - )) - var/obj/item/stack/medical/stack = locate(thing) in equipment - stack.uses_charge = 1 - stack.charge_costs = list(1000) - -/obj/item/robot_module/medical/crisis/finalize_emag() - . = ..() - emag.reagents.add_reagent(/datum/reagent/acid/polyacid, 250) - emag.SetName("Polyacid spray") - -/obj/item/robot_module/medical/crisis/finalize_synths() - . = ..() - var/datum/matter_synth/medicine/medicine = locate() in synths - for(var/thing in list( - /obj/item/stack/medical/advanced/ointment, - /obj/item/stack/medical/advanced/bruise_pack, - /obj/item/stack/medical/splint - )) - var/obj/item/stack/medical/stack = locate(thing) in equipment - stack.synths = list(medicine) - -/obj/item/robot_module/medical/crisis/respawn_consumable(var/mob/living/silicon/robot/R, var/amount) - var/obj/item/reagent_containers/syringe/S = locate() in equipment - if(S.mode == 2) - S.reagents.clear_reagents() - S.mode = initial(S.mode) - S.desc = initial(S.desc) - S.update_icon() - if(emag) - var/obj/item/reagent_containers/spray/PS = emag - PS.reagents.add_reagent(/datum/reagent/acid/polyacid, 2 * amount) - ..() diff --git a/code/modules/mob/living/silicon/robot/modules/module_miner.dm b/code/modules/mob/living/silicon/robot/modules/module_miner.dm deleted file mode 100644 index 0f5b9b05822ab..0000000000000 --- a/code/modules/mob/living/silicon/robot/modules/module_miner.dm +++ /dev/null @@ -1,49 +0,0 @@ -/obj/item/robot_module/miner - name = "miner robot module" - display_name = "Miner" - subsystems = list( - /datum/nano_module/supply - ) - channels = list( - "Supply" = TRUE, - "Science" = TRUE - ) - networks = list( - NETWORK_MINE - ) - sprites = list( - "Basic" = "Miner_old", - "Advanced Droid" = "droid-miner", - "Treadhead" = "Miner" - ) - supported_upgrades = list( - /obj/item/borg/upgrade/jetpack - ) - equipment = list( - /obj/item/device/flash, - /obj/item/borg/sight/meson, - /obj/item/wrench, - /obj/item/screwdriver, - /obj/item/storage/ore, - /obj/item/pickaxe/borgdrill, - /obj/item/storage/sheetsnatcher/borg, - /obj/item/gripper/miner, - /obj/item/device/scanner/mining, - /obj/item/crowbar - ) - emag = /obj/item/gun/energy/plasmacutter - skills = list( - SKILL_PILOT = SKILL_EXPERT, - SKILL_EVA = SKILL_PROF, - SKILL_CONSTRUCTION = SKILL_EXPERT - ) - no_slip = 1 - -/obj/item/robot_module/miner/handle_emagged() - var/obj/item/pickaxe/D = locate(/obj/item/pickaxe/borgdrill) in equipment - if(D) - equipment -= D - qdel(D) - D = new /obj/item/pickaxe/diamonddrill(src) - D.canremove = FALSE - equipment += D diff --git a/code/modules/mob/living/silicon/robot/modules/module_research.dm b/code/modules/mob/living/silicon/robot/modules/module_research.dm deleted file mode 100644 index bf28618440364..0000000000000 --- a/code/modules/mob/living/silicon/robot/modules/module_research.dm +++ /dev/null @@ -1,57 +0,0 @@ -/obj/item/robot_module/research - name = "research module" - display_name = "Research" - channels = list( - "Science" = TRUE - ) - networks = list( - NETWORK_RESEARCH - ) - sprites = list( - "Droid" = "droid-science" - ) - equipment = list( - /obj/item/device/flash, - /obj/item/portable_destructive_analyzer, - /obj/item/gripper/research, - /obj/item/gripper/no_use/loader, - /obj/item/device/robotanalyzer, - /obj/item/card/robot, - /obj/item/wrench, - /obj/item/screwdriver, - /obj/item/weldingtool/mini, - /obj/item/wirecutters, - /obj/item/crowbar, - /obj/item/scalpel/laser3, - /obj/item/circular_saw, - /obj/item/extinguisher/mini, - /obj/item/reagent_containers/syringe, - /obj/item/gripper/chemistry, - /obj/item/stack/nanopaste - ) - synths = list( - /datum/matter_synth/nanite = 10000 - ) - emag = /obj/prefab/hand_teleporter - skills = list( - SKILL_BUREAUCRACY = SKILL_EXPERT, - SKILL_FINANCE = SKILL_EXPERT, - SKILL_COMPUTER = SKILL_PROF, - SKILL_SCIENCE = SKILL_PROF, - SKILL_DEVICES = SKILL_PROF, - SKILL_ANATOMY = SKILL_ADEPT, - SKILL_CHEMISTRY = SKILL_ADEPT, - SKILL_BOTANY = SKILL_EXPERT, - SKILL_ELECTRICAL = SKILL_EXPERT - ) -/obj/item/robot_module/research/finalize_equipment() - . = ..() - var/obj/item/stack/nanopaste/N = locate() in equipment - N.uses_charge = 1 - N.charge_costs = list(1000) - -/obj/item/robot_module/research/finalize_synths() - . = ..() - var/datum/matter_synth/nanite/nanite = locate() in synths - var/obj/item/stack/nanopaste/N = locate() in equipment - N.synths = list(nanite) diff --git a/code/modules/mob/living/silicon/robot/modules/module_security.dm b/code/modules/mob/living/silicon/robot/modules/module_security.dm deleted file mode 100644 index bdf274e96e798..0000000000000 --- a/code/modules/mob/living/silicon/robot/modules/module_security.dm +++ /dev/null @@ -1,86 +0,0 @@ -/obj/item/robot_module/security - channels = list( - "Security" = TRUE - ) - networks = list( - NETWORK_SECURITY - ) - subsystems = list( - /datum/nano_module/crew_monitor, - /datum/nano_module/program/digitalwarrant - ) - can_be_pushed = FALSE - supported_upgrades = list( - /obj/item/borg/upgrade/weaponcooler - ) - skills = list( - SKILL_COMBAT = SKILL_EXPERT, - SKILL_WEAPONS = SKILL_EXPERT, - SKILL_FORENSICS = SKILL_EXPERT, - SKILL_BUREAUCRACY = SKILL_ADEPT - ) - -/obj/item/robot_module/security/respawn_consumable(var/mob/living/silicon/robot/R, var/amount) - ..() - for(var/obj/item/gun/energy/T in equipment) - if(T && T.power_supply) - if(T.power_supply.charge < T.power_supply.maxcharge) - T.power_supply.give(T.charge_cost * amount) - T.update_icon() - else - T.charge_tick = 0 - var/obj/item/melee/baton/robot/B = locate() in equipment - if(B && B.bcell) - B.bcell.give(amount) - -/obj/item/robot_module/security/general - name = "security robot module" - display_name = "Security" - crisis_locked = TRUE - sprites = list( - "Basic" = "secborg", - "Red Knight" = "Security", - "Black Knight" = "securityrobot", - "Bloodhound" = "bloodhound", - "Bloodhound - Treaded" = "secborg+tread", - "Tridroid" = "orb-security" - ) - equipment = list( - /obj/item/device/flash, - /obj/item/borg/sight/hud/sec, - /obj/item/handcuffs/cyborg, - /obj/item/melee/baton/robot, - /obj/item/gun/energy/gun/secure/mounted, - /obj/item/taperoll/police, - /obj/item/device/megaphone, - /obj/item/device/holowarrant, - /obj/item/crowbar, - /obj/item/device/hailer - ) - emag = /obj/item/gun/energy/laser/mounted - -/obj/item/robot_module/security/combat - name = "combat robot module" - display_name = "Combat" - crisis_locked = TRUE - hide_on_manifest = TRUE - sprites = list( - "Combat Android" = "droid-combat" - ) - equipment = list( - /obj/item/device/flash, - /obj/item/borg/sight/thermal, - /obj/item/gun/energy/laser/mounted, - /obj/item/gun/energy/plasmacutter, - /obj/item/borg/combat/shield, - /obj/item/borg/combat/mobility, - /obj/item/crowbar - ) - emag = /obj/item/gun/energy/lasercannon/mounted - -/obj/item/robot_module/security/combat/Initialize() - . = ..() - var/mob/living/silicon/robot/R = loc - if (istype(R)) - R.status_flags &= ~CANWEAKEN // Pre-install the optical matrix shielding - R.flash_protected = TRUE diff --git a/code/modules/mob/living/silicon/robot/modules/module_standard.dm b/code/modules/mob/living/silicon/robot/modules/module_standard.dm deleted file mode 100644 index 2452393daea8d..0000000000000 --- a/code/modules/mob/living/silicon/robot/modules/module_standard.dm +++ /dev/null @@ -1,22 +0,0 @@ -/obj/item/robot_module/standard - name = "standard robot module" - display_name = "Standard" - sprites = list( - "Basic" = "robot_old", - "Android" = "droid", - "Default" = "robot" - ) - equipment = list( - /obj/item/device/flash, - /obj/item/extinguisher, - /obj/item/wrench, - /obj/item/crowbar, - /obj/item/device/scanner/health - ) - emag = /obj/item/melee/energy/sword - skills = list( - SKILL_COMBAT = SKILL_ADEPT, - SKILL_MEDICAL = SKILL_ADEPT, - SKILL_CONSTRUCTION = SKILL_ADEPT, - SKILL_BUREAUCRACY = SKILL_ADEPT - ) diff --git a/code/modules/mob/living/silicon/robot/modules/module_uncertified.dm b/code/modules/mob/living/silicon/robot/modules/module_uncertified.dm deleted file mode 100644 index fc4fe51334004..0000000000000 --- a/code/modules/mob/living/silicon/robot/modules/module_uncertified.dm +++ /dev/null @@ -1,32 +0,0 @@ -/obj/item/robot_module/uncertified - name = "uncertified robot module" - sprites = list( - "Roller" = "omoikane" - ) - upgrade_locked = TRUE - skills = list( - SKILL_FINANCE = SKILL_PROF - ) // For the money launcher, of course - -/obj/item/robot_module/uncertified/party - name = "Madhouse Productions Official Party Module" - display_name = "Party" - channels = list( - "Service" = TRUE, - "Entertainment" = TRUE - ) - networks = list( - NETWORK_THUNDER - ) - equipment = list( - /obj/item/boombox, - /obj/item/bikehorn/airhorn, - /obj/item/party_light, - /obj/item/gun/launcher/money - ) - -/obj/item/robot_module/uncertified/party/finalize_equipment() - . = ..() - var/obj/item/gun/launcher/money/MC = new (src) - MC.receptacle_value = 5000 - MC.dispensing = 100 diff --git a/code/modules/mob/living/silicon/robot/photos.dm b/code/modules/mob/living/silicon/robot/photos.dm deleted file mode 100644 index bc0b62d69730a..0000000000000 --- a/code/modules/mob/living/silicon/robot/photos.dm +++ /dev/null @@ -1,20 +0,0 @@ -/mob/living/silicon/robot/proc/photosync() - var/obj/item/device/camera/siliconcam/master_cam = connected_ai && connected_ai.silicon_camera - if (!master_cam) - return - - var/synced = FALSE - // Sync borg images to the master AI. - // We don't care about syncing the other way around - for(var/obj/item/photo/borg_photo in silicon_camera.aipictures) - var/copied = FALSE - for(var/obj/item/photo/ai_photo in master_cam.aipictures) - if(borg_photo.id == ai_photo.id) - copied = TRUE - break - if(!copied) - master_cam.injectaialbum(borg_photo.copy(1), " (synced from [name])") - synced = TRUE - - if(synced) - to_chat(src, "Images synced with AI. Local images will be retained in the case of loss of connection with the AI.") diff --git a/code/modules/mob/living/silicon/robot/preset.dm b/code/modules/mob/living/silicon/robot/preset.dm deleted file mode 100644 index 9864067ee775a..0000000000000 --- a/code/modules/mob/living/silicon/robot/preset.dm +++ /dev/null @@ -1,27 +0,0 @@ -/mob/living/silicon/robot/syndicate - lawupdate = FALSE - scrambledcodes = TRUE - icon_state = "securityrobot" - modtype = "Security" - lawchannel = "State" - laws = /datum/ai_laws/syndicate_override - idcard = /obj/item/card/id/syndicate - module = /obj/item/robot_module/syndicate - silicon_radio = /obj/item/device/radio/borg/syndicate - spawn_sound = 'sound/mecha/nominalsyndi.ogg' - cell = /obj/item/cell/super - pitch_toggle = FALSE - -/mob/living/silicon/robot/combat - lawupdate = FALSE - scrambledcodes = TRUE - modtype = "Combat" - module = /obj/item/robot_module/security/combat - spawn_sound = 'sound/mecha/nominalsyndi.ogg' - cell = /obj/item/cell/super - pitch_toggle = FALSE - -/mob/living/silicon/robot/combat/nt - laws = /datum/ai_laws/nanotrasen_aggressive - idcard = /obj/item/card/id/centcom/ERT - silicon_radio = /obj/item/device/radio/borg/ert diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm deleted file mode 100644 index 074a219003499..0000000000000 --- a/code/modules/mob/living/silicon/robot/robot.dm +++ /dev/null @@ -1,1122 +0,0 @@ -#define CYBORG_POWER_USAGE_MULTIPLIER 2.5 // Multiplier for amount of power cyborgs use. - -/mob/living/silicon/robot - name = "Cyborg" - real_name = "Cyborg" - icon = 'icons/mob/robots.dmi' - icon_state = "robot" - maxHealth = 300 - health = 300 - - mob_bump_flag = ROBOT - mob_swap_flags = ROBOT|MONKEY|SLIME|SIMPLE_ANIMAL - mob_push_flags = ~HEAVY //trundle trundle - skillset = /datum/skillset/silicon/robot - - var/lights_on = FALSE - var/used_power_this_tick = 0 - var/power_efficiency = 1 - var/sight_mode = 0 - var/custom_name = "" - var/custom_sprite = FALSE - var/crisis //Admin-settable for combat module use. - var/crisis_override = FALSE - var/integrated_light_max_bright = 0.75 - var/datum/wires/robot/wires - var/module_category = ROBOT_MODULE_TYPE_GROUNDED - var/dismantle_type = /obj/item/robot_parts/robot_suit - - //[inf] - speech_sounds = list( - 'sound/voice/emotes/robot_talk_heavy_1.ogg', - 'sound/voice/emotes/robot_talk_heavy_2.ogg', - 'sound/voice/emotes/robot_talk_heavy_3.ogg', - 'sound/voice/emotes/robot_talk_heavy_4.ogg' - ) - //[/inf] - -//Icon stuff - - var/static/list/eye_overlays - var/icontype //Persistent icontype tracking allows for cleaner icon updates - var/module_sprites[0] //Used to store the associations between sprite names and sprite index. - var/icon_selected = 1 //If icon selection has been completed yet - var/icon_selection_tries = 0//Remaining attempts to select icon before a selection is forced - -//Hud stuff - - var/obj/screen/inv1 = null - var/obj/screen/inv2 = null - var/obj/screen/inv3 = null - - var/shown_robot_modules = 0 //Used to determine whether they have the module menu shown or not - var/obj/screen/robot_modules_background - -//3 Modules can be activated at any one time. - var/obj/item/robot_module/module = null - var/obj/item/module_active - var/obj/item/module_state_1 - var/obj/item/module_state_2 - var/obj/item/module_state_3 - - silicon_camera = /obj/item/device/camera/siliconcam/robot_camera - silicon_radio = /obj/item/device/radio/borg - - var/mob/living/silicon/ai/connected_ai = null - var/obj/item/cell/cell = /obj/item/cell/high - var/obj/machinery/camera/camera = null - - var/cell_emp_mult = 2.5 - - // Components are basically robot organs. - var/list/components = list() - - var/obj/item/device/mmi/mmi = null - - var/obj/item/stock_parts/matter_bin/storage = null - - var/opened = FALSE - var/emagged = FALSE - var/wiresexposed = FALSE - var/locked = TRUE - var/has_power = TRUE - var/spawn_module = null - - var/spawn_sound = 'sound/voice/liveagain.ogg' - var/pitch_toggle = TRUE - var/list/req_access = list(access_robotics) - var/ident = 0 - var/modtype = "Default" - var/datum/effect/effect/system/ion_trail_follow/ion_trail = null - var/datum/effect/effect/system/spark_spread/spark_system //So they can initialize sparks whenever/N - var/lawupdate = TRUE //Cyborgs will sync their laws with their AI by default - var/lockcharge //If a robot is locked down - var/scrambledcodes = FALSE // Used to determine if a borg shows up on the robotics console. Setting to one hides them. - var/tracking_entities = 0 //The number of known entities currently accessing the internal camera - var/braintype = "Drone" - var/intenselight = FALSE // Whether cyborg's integrated light was upgraded - var/vtec = FALSE - var/flash_protected = FALSE - - var/list/robot_verbs_default = list( - /mob/living/silicon/robot/proc/sensor_mode, - /mob/living/silicon/robot/proc/robot_checklaws - ) - -/mob/living/silicon/robot/Initialize() - . = ..() - spark_system = new /datum/effect/effect/system/spark_spread() - spark_system.set_up(5, 0, src) - spark_system.attach(src) - - add_language(LANGUAGE_ROBOT_GLOBAL, 1) - add_language(LANGUAGE_EAL, 1) - - wires = new(src) - - robot_modules_background = new() - robot_modules_background.icon_state = "block" - ident = random_id(/mob/living/silicon/robot, 1, 999) - module_sprites["Basic"] = "robot" - icontype = "Basic" - updatename(modtype) - update_icon() - - if(!scrambledcodes && !camera) - camera = new /obj/machinery/camera(src) - camera.c_tag = real_name - camera.replace_networks(list(NETWORK_EXODUS,NETWORK_ROBOTS)) - if(wires.IsIndexCut(BORG_WIRE_CAMERA)) - camera.status = 0 - init() - initialize_components() - - for(var/V in components) if(V != "power cell") - var/datum/robot_component/C = components[V] - C.installed = 1 - C.wrapped = new C.external_type - - if(ispath(cell)) - cell = new cell(src) - - if(cell) - var/datum/robot_component/cell_component = components["power cell"] - cell_component.wrapped = cell - cell_component.installed = 1 - - add_robot_verbs() - - hud_list[HEALTH_HUD] = new /image/hud_overlay('icons/mob/hud.dmi', src, "hudblank") - hud_list[STATUS_HUD] = new /image/hud_overlay('icons/mob/hud.dmi', src, "hudhealth100") - hud_list[LIFE_HUD] = new /image/hud_overlay('icons/mob/hud.dmi', src, "hudhealth100") - hud_list[ID_HUD] = new /image/hud_overlay('icons/mob/hud.dmi', src, "hudblank") - hud_list[WANTED_HUD] = new /image/hud_overlay('icons/mob/hud.dmi', src, "hudblank") - hud_list[IMPLOYAL_HUD] = new /image/hud_overlay('icons/mob/hud.dmi', src, "hudblank") - hud_list[IMPCHEM_HUD] = new /image/hud_overlay('icons/mob/hud.dmi', src, "hudblank") - hud_list[IMPTRACK_HUD] = new /image/hud_overlay('icons/mob/hud.dmi', src, "hudblank") - hud_list[SPECIALROLE_HUD] = new /image/hud_overlay('icons/mob/hud.dmi', src, "hudblank") - - AddMovementHandler(/datum/movement_handler/robot/use_power, /datum/movement_handler/mob/space) - -/mob/living/silicon/robot/proc/recalculate_synth_capacities() - if(!module || !module.synths) - return - var/mult = 1 - if(storage) - mult += storage.rating - for(var/datum/matter_synth/M in module.synths) - M.set_multiplier(mult) - -/mob/living/silicon/robot/proc/init() - if(ispath(module)) - new module(src) - if(lawupdate) - var/new_ai = select_active_ai_with_fewest_borgs(get_z(src)) - if(new_ai) - lawupdate = TRUE - connect_to_ai(new_ai) - else - lawupdate = FALSE - - playsound(loc, spawn_sound, 75, pitch_toggle) - -/mob/living/silicon/robot/fully_replace_character_name(pickedName as text) - custom_name = pickedName - updatename() - -/mob/living/silicon/robot/proc/sync() - if(lawupdate && connected_ai) - lawsync() - photosync() - -/mob/living/silicon/robot/drain_power(var/drain_check, var/surge, var/amount = 0) - - if(drain_check) - return 1 - - if(!cell || !cell.charge) - return 0 - - // Actual amount to drain from cell, using CELLRATE - var/cell_amount = amount * CELLRATE - - if(cell.charge > cell_amount) - // Spam Protection - if(prob(10)) - to_chat(src, "Warning: Unauthorized access through power channel [rand(11,29)] detected!") - cell.use(cell_amount) - return amount - return 0 - -//If there's an MMI in the robot, have it ejected when the mob goes away. --NEO -//Improved /N -/mob/living/silicon/robot/Destroy() - if(mmi)//Safety for when a cyborg gets dust()ed. Or there is no MMI inside. - if(mind) - mmi.dropInto(loc) - if(mmi.brainmob) - mind.transfer_to(mmi.brainmob) - else - to_chat(src, "Oops! Something went very wrong, your MMI was unable to receive your mind. You have been ghosted. Please make a bug report so we can fix this bug.") - ghostize() - //ERROR("A borg has been destroyed, but its MMI lacked a brainmob, so the mind could not be transferred. Player: [ckey].") - mmi = null - else - QDEL_NULL(mmi) - if(connected_ai) - connected_ai.connected_robots -= src - connected_ai = null - QDEL_NULL(module) - QDEL_NULL(wires) - . = ..() - -/mob/living/silicon/robot/proc/set_module_sprites(var/list/new_sprites) - if(new_sprites && new_sprites.len) - module_sprites = new_sprites.Copy() - //Custom_sprite check and entry - - if (custom_sprite) - var/list/valid_states = icon_states(CUSTOM_ITEM_SYNTH) - if("[ckey]-[modtype]" in valid_states) - module_sprites["Custom"] = "[src.ckey]-[modtype]" - icon = CUSTOM_ITEM_SYNTH - icontype = "Custom" - else - icontype = module_sprites[1] - icon = 'icons/mob/robots.dmi' - to_chat(src, "Custom Sprite Sheet does not contain a valid icon_state for [ckey]-[modtype]") - else - icontype = module_sprites[1] - icon_state = module_sprites[icontype] - update_icon() - return module_sprites - -/mob/living/silicon/robot/proc/reset_module(var/suppress_alert = null) - // Clear hands and module icon. - uneq_all() - if(shown_robot_modules) - hud_used.toggle_show_robot_modules() - modtype = initial(modtype) - if(hands) - hands.icon_state = initial(hands.icon_state) - // If the robot had a module and this wasn't an uncertified change, let the AI know. - if(module) - if (!suppress_alert) - notify_ai(ROBOT_NOTIFICATION_MODULE_RESET, module.name) - // Delete the module. - module.Reset(src) - QDEL_NULL(module) - updatename("Default") - -/mob/living/silicon/robot/proc/pick_module(var/override) - if(module && !override) - return - - var/decl/security_state/security_state = decls_repository.get_decl(GLOB.using_map.security_state) - var/is_crisis_mode = crisis_override || (crisis && security_state.current_security_level_is_same_or_higher_than(security_state.high_security_level)) - var/list/robot_modules = SSrobots.get_available_modules(module_category, is_crisis_mode, override) - - if(!override) - if(is_crisis_mode) - to_chat(src, SPAN_WARNING("Crisis mode active. Additional modules available.")) - modtype = input("Please select a module!", "Robot module", null, null) as null|anything in robot_modules - else - if(module) - QDEL_NULL(module) - modtype = override - - if(module || !modtype) - return - - var/module_type = robot_modules[modtype] - if(!module_type) - to_chat(src, SPAN_WARNING("You are unable to select a module.")) - return - - new module_type(src) - - if(hands) - hands.icon_state = lowertext(modtype) - updatename() - recalculate_synth_capacities() - if(module) - notify_ai(ROBOT_NOTIFICATION_NEW_MODULE, module.name) - -/mob/living/silicon/robot/get_cell() - return cell - -/mob/living/silicon/robot/proc/updatename(var/prefix as text) - if(prefix) - modtype = prefix - - if(istype(mmi, /obj/item/organ/internal/posibrain)) - braintype = "Robot" - else if(istype(mmi, /obj/item/device/mmi/digital/robot)) - braintype = "Drone" - else - braintype = "Cyborg" - - var/changed_name = "" - if(custom_name) - changed_name = custom_name - notify_ai(ROBOT_NOTIFICATION_NEW_NAME, real_name, changed_name) - else - changed_name = "[modtype] [braintype]-[num2text(ident)]" - - create_or_rename_email(changed_name, "root.rt") - real_name = changed_name - name = real_name - if(mind) - mind.name = changed_name - - //We also need to update name of internal camera. - if (camera) - camera.c_tag = changed_name - - if(!custom_sprite) //Check for custom sprite - set_custom_sprite() - - //Flavour text. - if(client) - var/module_flavour = client.prefs.flavour_texts_robot[modtype] - if(module_flavour) - flavor_text = module_flavour - else - flavor_text = client.prefs.flavour_texts_robot["Default"] - -/mob/living/silicon/robot/verb/Namepick() - set category = "Silicon Commands" - if(custom_name) - return 0 - - spawn(0) - var/newname - newname = sanitizeName(input(src,"You are a robot. Enter a name, or leave blank for the default name.", "Name change","") as text, MAX_NAME_LEN, allow_numbers = 1) - if (newname) - custom_name = newname - - updatename() - update_icon() - -/mob/living/silicon/robot/verb/toggle_panel_lock() - set name = "Toggle Panel Lock" - set category = "Silicon Commands" - if(!opened && has_power && do_after(usr, 6 SECONDS, do_flags = DO_DEFAULT | DO_USER_UNIQUE_ACT) && !opened && has_power) - to_chat(src, "You [locked ? "un" : ""]lock your panel.") - locked = !locked - -/mob/living/silicon/robot/proc/self_diagnosis() - if(!is_component_functioning("diagnosis unit")) - return null - - var/dat = "[src.name] Self-Diagnosis Report\n" - for (var/V in components) - var/datum/robot_component/C = components[V] - dat += "[C.name]
              Brute Damage:[C.brute_damage]
              Electronics Damage:[C.electronics_damage]
              Powered:[(!C.idle_usage || C.is_powered()) ? "Yes" : "No"]
              Toggled:[ C.toggled ? "Yes" : "No"]

              " - - return dat - -/mob/living/silicon/robot/verb/toggle_lights() - set category = "Silicon Commands" - set name = "Toggle Lights" - - if(stat == DEAD) - return - - lights_on = !lights_on - to_chat(usr, "You [lights_on ? "enable" : "disable"] your integrated light.") - update_robot_light() - -/mob/living/silicon/robot/verb/self_diagnosis_verb() - set category = "Silicon Commands" - set name = "Self Diagnosis" - - if(!is_component_functioning("diagnosis unit")) - to_chat(src, "Your self-diagnosis component isn't functioning.") - return - - var/datum/robot_component/CO = get_component("diagnosis unit") - if (!cell_use_power(CO.active_usage)) - to_chat(src, "Low Power.") - return - var/dat = self_diagnosis() - show_browser(src, dat, "window=robotdiagnosis") - - -/mob/living/silicon/robot/verb/toggle_component() - set category = "Silicon Commands" - set name = "Toggle Component" - set desc = "Toggle a component, conserving power." - - var/list/installed_components = list() - for(var/V in components) - if(V == "power cell") continue - var/datum/robot_component/C = components[V] - if(C.installed) - installed_components += V - - var/toggle = input(src, "Which component do you want to toggle?", "Toggle Component") as null|anything in installed_components - if(!toggle) - return - - var/datum/robot_component/C = components[toggle] - if(C.toggled) - C.toggled = 0 - to_chat(src, "You disable [C.name].") - else - C.toggled = 1 - to_chat(src, "You enable [C.name].") -/mob/living/silicon/robot/proc/update_robot_light() - if(lights_on) - if(intenselight) - set_light(1, 2, 6) - else - set_light(0.75, 1, 4) - else - set_light(0) - -// this function displays jetpack pressure in the stat panel -/mob/living/silicon/robot/proc/show_jetpack_pressure() - // if you have a jetpack, show the internal tank pressure - var/obj/item/tank/jetpack/current_jetpack = installed_jetpack() - if (current_jetpack) - stat("Internal Atmosphere Info", current_jetpack.name) - stat("Tank Pressure", current_jetpack.air_contents.return_pressure()) - - -// this function returns the robots jetpack, if one is installed -/mob/living/silicon/robot/proc/installed_jetpack() - if(module) - return (locate(/obj/item/tank/jetpack) in module.equipment) - return 0 - - -// this function displays the cyborgs current cell charge in the stat panel -/mob/living/silicon/robot/proc/show_cell_power() - if(cell) - stat(null, text("Charge Left: [round(cell.percent())]%")) - stat(null, text("Cell Rating: [round(cell.maxcharge)]")) // Round just in case we somehow get crazy values - stat(null, text("Power Cell Load: [round(used_power_this_tick)]W")) - else - stat(null, text("No Cell Inserted!")) - - -// update the status screen display -/mob/living/silicon/robot/Stat() - . = ..() - if (statpanel("Status")) - show_cell_power() - show_jetpack_pressure() - stat(null, text("Lights: [lights_on ? "ON" : "OFF"]")) - if(module) - for(var/datum/matter_synth/ms in module.synths) - stat("[ms.name]: [ms.energy]/[ms.max_energy_multiplied]") - -/mob/living/silicon/robot/restrained() - return 0 - -/mob/living/silicon/robot/bullet_act(var/obj/item/projectile/Proj) - if (status_flags & GODMODE) - return PROJECTILE_FORCE_MISS - ..(Proj) - if(prob(75) && Proj.damage > 0) spark_system.start() - return 2 - -/mob/living/silicon/robot/attackby(obj/item/W as obj, mob/user as mob) - - if(istype(W, /obj/item/inducer)) return // inducer.dm afterattack handles this - if (istype(W, /obj/item/handcuffs)) // fuck i don't even know why isrobot() in handcuff code isn't working so this will have to do - return - - if(opened) // Are they trying to insert something? - for(var/V in components) - var/datum/robot_component/C = components[V] - if(!C.installed && C.accepts_component(W)) - if(!user.unEquip(W)) - return - C.installed = 1 - C.wrapped = W - C.install() - W.forceMove(null) - - var/obj/item/robot_parts/robot_component/WC = W - if(istype(WC)) - C.brute_damage = WC.brute - C.electronics_damage = WC.burn - - to_chat(usr, "You install the [W.name].") - return - - if(isWelder(W) && user.a_intent != I_HURT) - if (src == user) - to_chat(user, "You lack the reach to be able to repair yourself.") - return - - if (!getBruteLoss()) - to_chat(user, "Nothing to fix here!") - return - var/obj/item/weldingtool/WT = W - if (WT.remove_fuel(0)) - user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN) - adjustBruteLoss(-30) - updatehealth() - add_fingerprint(user) - for(var/mob/O in viewers(user, null)) - O.show_message(text("[user] has fixed some of the dents on [src]!"), 1) - else - to_chat(user, "Need more welding fuel!") - return - - else if(istype(W, /obj/item/stack/cable_coil) && (wiresexposed || istype(src,/mob/living/silicon/robot/drone))) - if (!getFireLoss()) - to_chat(user, "Nothing to fix here!") - return - var/obj/item/stack/cable_coil/coil = W - if (coil.use(1)) - user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN) - adjustFireLoss(-30) - updatehealth() - for(var/mob/O in viewers(user, null)) - O.show_message(text("[user] has fixed some of the burnt wires on [src]!"), 1) - - else if(isCrowbar(W) && user.a_intent != I_HURT) // crowbar means open or close the cover - we all know what a crowbar is by now - if(opened) - if(cell) - user.visible_message("\The [user] begins clasping shut \the [src]'s maintenance hatch.", "You begin closing up \the [src].") - if(do_after(user, 5 SECONDS, src, DO_PUBLIC_UNIQUE)) - to_chat(user, "You close \the [src]'s maintenance hatch.") - opened = FALSE - update_icon() - - else if(wiresexposed && wires.IsAllCut()) - //Cell is out, wires are exposed, remove MMI, produce damaged chassis, baleet original mob. - if(!mmi) - to_chat(user, "\The [src] has no brain to remove.") - return - - user.visible_message("\The [user] begins ripping [mmi] from [src].", "You jam the crowbar into the robot and begin levering [mmi].") - if(do_after(user, 5 SECONDS, src, DO_PUBLIC_UNIQUE)) - dismantle(user) - - else - // Okay we're not removing the cell or an MMI, but maybe something else? - var/list/removable_components = list() - for(var/V in components) - if(V == "power cell") continue - var/datum/robot_component/C = components[V] - if(C.installed == 1 || C.installed == -1) - removable_components += V - - var/remove = input(user, "Which component do you want to pry out?", "Remove Component") as null|anything in removable_components - if(!remove) - return - var/datum/robot_component/C = components[remove] - var/obj/item/robot_parts/robot_component/I = C.wrapped - to_chat(user, "You remove \the [I].") - if(istype(I)) - I.brute = C.brute_damage - I.burn = C.electronics_damage - - I.forceMove(loc) - - if(C.installed == 1) - C.uninstall() - C.installed = 0 - - else - if(locked) - to_chat(user, "The cover is locked and cannot be opened.") - else - user.visible_message("\The [user] begins prying open \the [src]'s maintenance hatch.", "You start opening \the [src]'s maintenance hatch.") - if(do_after(user, 5 SECONDS, src, DO_PUBLIC_UNIQUE)) - to_chat(user, "You open \the [src]'s maintenance hatch.") - opened = TRUE - update_icon() - - // If the robot is having something inserted which will remain inside it, self-inserting must be handled before exiting to avoid logic errors. Use the handle_selfinsert proc. - else if (istype(W, /obj/item/stock_parts/matter_bin) && opened) // Installing/swapping a matter bin - if(!user.unEquip(W, src)) - return - if(storage) - to_chat(user, "You replace \the [storage] with \the [W]") - storage.dropInto(loc) - storage = null - else - to_chat(user, "You install \the [W]") - storage = W - handle_selfinsert(W, user) - recalculate_synth_capacities() - - else if (istype(W, /obj/item/cell) && opened) // trying to put a cell inside - var/datum/robot_component/C = components["power cell"] - if(wiresexposed) - to_chat(user, "Close the panel first.") - else if(cell) - to_chat(user, "There is a power cell already installed.") - else if(W.w_class != ITEM_SIZE_NORMAL) - to_chat(user, "\The [W] is too [W.w_class < ITEM_SIZE_NORMAL? "small" : "large"] to fit here.") - else if(user.unEquip(W, src)) - cell = W - handle_selfinsert(W, user) //Just in case. - to_chat(user, "You insert the power cell.") - C.installed = 1 - C.wrapped = W - C.install() - // This means that removing and replacing a power cell will repair the mount. - C.brute_damage = 0 - C.electronics_damage = 0 - - else if(isWirecutter(W) || isMultitool(W)) - if (wiresexposed) - wires.Interact(user) - else - to_chat(user, "You can't reach the wiring.") - else if(isScrewdriver(W) && opened && !cell) // haxing - wiresexposed = !wiresexposed - to_chat(user, "The wires have been [wiresexposed ? "exposed" : "unexposed"].") - update_icon() - - else if(istype(W, /obj/item/screwdriver) && opened && cell) // radio - if(silicon_radio) - silicon_radio.attackby(W,user)//Push it to the radio to let it handle everything - else - to_chat(user, "Unable to locate a radio.") - update_icon() - - else if(istype(W, /obj/item/device/encryptionkey) && opened) - if(silicon_radio)//sanityyyyyy - silicon_radio.attackby(W,user)//GTFO, you have your own procs - else - to_chat(user, "Unable to locate a radio.") - else if (istype(W, /obj/item/card/id)||istype(W, /obj/item/modular_computer)||istype(W, /obj/item/card/robot)) // trying to unlock the interface with an ID card - if(emagged)//still allow them to open the cover - to_chat(user, "The interface seems slightly damaged") - if(opened) - to_chat(user, "You must close the cover to swipe an ID card.") - else - if(allowed(usr)) - locked = !locked - to_chat(user, "You [ locked ? "lock" : "unlock"] [src]'s interface.") - update_icon() - else - to_chat(user, "Access denied.") - else if(istype(W, /obj/item/borg/upgrade)) - var/obj/item/borg/upgrade/U = W - if(!opened) - to_chat(usr, "You must access the borgs internals!") - else if(!src.module && U.require_module) - to_chat(usr, "The borg must choose a module before he can be upgraded!") - else if(U.locked) - to_chat(usr, "The upgrade is locked and cannot be used yet!") - else - if(U.action(src)) - if(!user.unEquip(U, src)) - return - to_chat(usr, "You apply the upgrade to [src]!") - handle_selfinsert(W, user) - else - to_chat(usr, "Upgrade error!") - - else - if( !(istype(W, /obj/item/device/robotanalyzer) || istype(W, /obj/item/device/scanner/health)) ) - spark_system.start() - return ..() - -/mob/living/silicon/robot/proc/handle_selfinsert(obj/item/W, mob/user) - if ((user == src) && istype(get_active_hand(),/obj/item/gripper)) - var/obj/item/gripper/H = get_active_hand() - if (W.loc == H) //if this triggers something has gone very wrong, and it's safest to abort - return - else if (H.wrapped == W) - H.wrapped = null - -/mob/living/silicon/robot/attack_hand(mob/user) - - add_fingerprint(user) - - if(istype(user,/mob/living/carbon/human)) - var/mob/living/carbon/human/H = user - if(H.species.can_shred(H)) - attack_generic(H, rand(30,50), "slashed") - return - - if(opened && !wiresexposed && (!istype(user, /mob/living/silicon))) - var/datum/robot_component/cell_component = components["power cell"] - if(cell) - cell.update_icon() - cell.add_fingerprint(user) - user.put_in_active_hand(cell) - to_chat(user, "You remove \the [cell].") - cell = null - cell_component.wrapped = null - cell_component.installed = 0 - update_icon() - else if(cell_component.installed == -1) - cell_component.installed = 0 - var/obj/item/broken_device = cell_component.wrapped - to_chat(user, "You remove \the [broken_device].") - user.put_in_active_hand(broken_device) - -//Robots take half damage from basic attacks. -/mob/living/silicon/robot/attack_generic(var/mob/user, var/damage, var/attack_message) - return ..(user,Floor(damage/2),attack_message) - -/mob/living/silicon/robot/get_req_access() - return req_access - -/mob/living/silicon/robot/on_update_icon() - overlays.Cut() - if(stat == CONSCIOUS) - var/eye_icon_state = "eyes-[module_sprites[icontype]]" - if(eye_icon_state in icon_states(icon)) - if(!eye_overlays) - eye_overlays = list() - var/image/eye_overlay = eye_overlays[eye_icon_state] - if(!eye_overlay) - eye_overlay = image(icon, eye_icon_state) - eye_overlay.plane = EFFECTS_ABOVE_LIGHTING_PLANE - eye_overlay.layer = EYE_GLOW_LAYER - eye_overlays[eye_icon_state] = eye_overlay - overlays += eye_overlay - - if(opened) - var/panelprefix = custom_sprite ? src.ckey : "ov" - if(wiresexposed) - overlays += "[panelprefix]-openpanel +w" - else if(cell) - overlays += "[panelprefix]-openpanel +c" - else - overlays += "[panelprefix]-openpanel -c" - - if(module_active && istype(module_active,/obj/item/borg/combat/shield)) - overlays += "[module_sprites[icontype]]-shield" - - if(modtype == "Combat") - if(module_active && istype(module_active,/obj/item/borg/combat/mobility)) - icon_state = "[module_sprites[icontype]]-roll" - else - icon_state = module_sprites[icontype] - return - -/mob/living/silicon/robot/proc/installed_modules() - - if(!module) - pick_module() - return - var/dat = "Modules\n" - dat += {" - Activated Modules -
              - Module 1: [module_state_1 ? "[module_state_1]" : "No Module"]
              - Module 2: [module_state_2 ? "
              [module_state_2]" : "No Module"]
              - Module 3: [module_state_3 ? "
              [module_state_3]" : "No Module"]
              -
              - Installed Modules

              "} - - - for (var/obj in module.equipment) - if (!obj) - dat += text("Resource depleted
              ") - else if(activated(obj)) - dat += text("[obj]: Activated
              ") - else - dat += text("[obj]:
              Activate
              ") - if (emagged) - if(activated(module.emag)) - dat += text("[module.emag]: Activated
              ") - else - dat += text("[module.emag]: Activate
              ") -/* - if(activated(obj)) - dat += text("[obj]: \[Activated | Deactivate\]
              ") - else - dat += text("[obj]: \[Activate | Deactivated\]
              ") -*/ - show_browser(src, dat, "window=robotmod") - - -/mob/living/silicon/robot/OnSelfTopic(href_list, topic_status) - if (topic_status == STATUS_INTERACTIVE) - if (href_list["showalerts"]) - open_subsystem(/datum/nano_module/alarm_monitor/all) - return TOPIC_HANDLED - - if (href_list["mod"]) - var/obj/item/O = locate(href_list["mod"]) - if (istype(O) && (O.loc == src)) - O.attack_self(src) - return TOPIC_HANDLED - - if (href_list["act"]) - var/obj/item/O = locate(href_list["act"]) - if (!istype(O)) - return TOPIC_HANDLED - - if(!((O in module.equipment) || (O == src.module.emag))) - return TOPIC_HANDLED - - if(activated(O)) - to_chat(src, "Already activated") - return TOPIC_HANDLED - if(!module_state_1) - module_state_1 = O - O.hud_layerise() - O.forceMove(src) - O.equipped_robot() - if(istype(module_state_1,/obj/item/borg/sight)) - sight_mode |= module_state_1:sight_mode - else if(!module_state_2) - module_state_2 = O - O.hud_layerise() - O.forceMove(src) - O.equipped_robot() - if(istype(module_state_2,/obj/item/borg/sight)) - sight_mode |= module_state_2:sight_mode - else if(!module_state_3) - module_state_3 = O - O.hud_layerise() - O.forceMove(src) - O.equipped_robot() - if(istype(module_state_3,/obj/item/borg/sight)) - sight_mode |= module_state_3:sight_mode - else - to_chat(src, "You need to disable a module first!") - installed_modules() - return TOPIC_HANDLED - - if (href_list["deact"]) - var/obj/item/O = locate(href_list["deact"]) - if(activated(O)) - if(module_state_1 == O) - module_state_1 = null - O.forceMove(null) - else if(module_state_2 == O) - module_state_2 = null - O.forceMove(null) - else if(module_state_3 == O) - module_state_3 = null - O.forceMove(null) - else - to_chat(src, "Module isn't activated.") - else - to_chat(src, "Module isn't activated") - installed_modules() - return TOPIC_HANDLED - return ..() - -/mob/living/silicon/robot/proc/radio_menu() - if (silicon_radio) - silicon_radio.interact(src)//Just use the radio's Topic() instead of bullshit special-snowflake code - - -/mob/living/silicon/robot/Move(a, b, flag) - - . = ..() - - if(module) - if(module.type == /obj/item/robot_module/janitor) - var/turf/tile = loc - if(isturf(tile)) - tile.clean_blood() - if (istype(tile, /turf/simulated)) - var/turf/simulated/S = tile - S.dirt = 0 - for(var/A in tile) - if(istype(A, /obj/effect)) - if(istype(A, /obj/effect/rune) || istype(A, /obj/effect/decal/cleanable) || istype(A, /obj/effect/overlay)) - qdel(A) - else if(istype(A, /obj/item)) - var/obj/item/cleaned_item = A - cleaned_item.clean_blood() - else if(istype(A, /mob/living/carbon/human)) - 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(0) - if(cleaned_human.wear_suit) - cleaned_human.wear_suit.clean_blood() - cleaned_human.update_inv_wear_suit(0) - else if(cleaned_human.w_uniform) - cleaned_human.w_uniform.clean_blood() - cleaned_human.update_inv_w_uniform(0) - if(cleaned_human.shoes) - cleaned_human.shoes.clean_blood() - cleaned_human.update_inv_shoes(0) - cleaned_human.clean_blood(1) - to_chat(cleaned_human, "[src] cleans your face!") - return - -/mob/living/silicon/robot/proc/self_destruct() - gib() - return - -/mob/living/silicon/robot/proc/UnlinkSelf() - disconnect_from_ai() - lawupdate = FALSE - lockcharge = FALSE - scrambledcodes = TRUE - //Disconnect it's camera so it's not so easily tracked. - if(src.camera) - src.camera.clear_all_networks() - - -/mob/living/silicon/robot/proc/ResetSecurityCodes() - set category = "Silicon Commands" - set name = "Reset Identity Codes" - set desc = "Scrambles your security and identification codes and resets your current buffers. Unlocks you and but permanently severs you from your AI and the robotics console and will deactivate your camera system." - - var/mob/living/silicon/robot/R = src - - if(R) - R.UnlinkSelf() - to_chat(R, "Buffers flushed and reset. Camera system shutdown. All systems operational.") - src.verbs -= /mob/living/silicon/robot/proc/ResetSecurityCodes - -/mob/living/silicon/robot/proc/SetLockdown(var/state = 1) - // They stay locked down if their wire is cut. - if(wires.LockedCut()) - state = 1 - else if(has_zeroth_law()) - state = 0 - - if(lockcharge != state) - lockcharge = state - UpdateLyingBuckledAndVerbStatus() - return 1 - return 0 - -/mob/living/silicon/robot/mode() - set name = "Activate Held Object" - set category = "IC" - set src = usr - - var/obj/item/W = get_active_hand() - if (W) - W.attack_self(src) - - return - -/mob/living/silicon/robot/proc/choose_icon(var/triesleft, var/list/module_sprites) - set waitfor = 0 - if(!module_sprites.len) - to_chat(src, "Something is badly wrong with the sprite selection. Harass a coder.") - return - - icon_selected = 0 - src.icon_selection_tries = triesleft - if(module_sprites.len == 1 || !client) - if(!(icontype in module_sprites)) - icontype = module_sprites[1] - else - icontype = input("Select an icon! [triesleft ? "You have [triesleft] more chance\s." : "This is your last try."]", "Robot Icon", icontype, null) in module_sprites - icon_state = module_sprites[icontype] - update_icon() - - if (module_sprites.len > 1 && triesleft >= 1 && client) - icon_selection_tries-- - var/choice = input("Look at your icon - is this what you want?") in list("Yes","No") - if(choice=="No") - choose_icon(icon_selection_tries, module_sprites) - return - - icon_selected = TRUE - icon_selection_tries = 0 - to_chat(src, "Your icon has been set. You now require a module reset to change it.") - -/mob/living/silicon/robot/proc/sensor_mode() //Medical/Security HUD controller for borgs - set name = "Set Sensor Augmentation" - set category = "Silicon Commands" - set desc = "Augment visual feed with internal sensor overlays." - toggle_sensor_mode() - -/mob/living/silicon/robot/proc/add_robot_verbs() - src.verbs |= robot_verbs_default - -/mob/living/silicon/robot/proc/remove_robot_verbs() - src.verbs -= robot_verbs_default - -// Uses power from cyborg's cell. Returns 1 on success or 0 on failure. -// Properly converts using CELLRATE now! Amount is in Joules. -/mob/living/silicon/robot/proc/cell_use_power(var/amount = 0) - // No cell inserted - if(!cell) - return 0 - - var/power_use = amount * CYBORG_POWER_USAGE_MULTIPLIER - if(cell.checked_use(CELLRATE * power_use)) - used_power_this_tick += power_use - return 1 - return 0 - -/mob/living/silicon/robot/binarycheck() - if(is_component_functioning("comms")) - var/datum/robot_component/RC = get_component("comms") - use_power(RC.active_usage) - return 1 - return 0 - -/mob/living/silicon/robot/proc/notify_ai(var/notifytype, var/first_arg, var/second_arg) - if(!connected_ai) - return - switch(notifytype) - if(ROBOT_NOTIFICATION_NEW_UNIT) //New Robot - to_chat(connected_ai, "

              NOTICE - New [lowertext(braintype)] connection detected: [name]
              ") - if(ROBOT_NOTIFICATION_NEW_MODULE) //New Module - to_chat(connected_ai, "

              NOTICE - [braintype] module change detected: [name] has loaded the [first_arg].
              ") - if(ROBOT_NOTIFICATION_MODULE_RESET) - to_chat(connected_ai, "

              NOTICE - [braintype] module reset detected: [name] has unloaded the [first_arg].
              ") - if(ROBOT_NOTIFICATION_NEW_NAME) //New Name - if(first_arg != second_arg) - to_chat(connected_ai, "

              NOTICE - [braintype] reclassification detected: [first_arg] is now designated as [second_arg].
              ") -/mob/living/silicon/robot/proc/disconnect_from_ai() - if(connected_ai) - sync() // One last sync attempt - connected_ai.connected_robots -= src - connected_ai = null - -/mob/living/silicon/robot/proc/connect_to_ai(var/mob/living/silicon/ai/AI) - if(AI && AI != connected_ai) - disconnect_from_ai() - connected_ai = AI - connected_ai.connected_robots |= src - notify_ai(ROBOT_NOTIFICATION_NEW_UNIT) - sync() - -/mob/living/silicon/robot/emag_act(var/remaining_charges, var/mob/user) - if(!opened)//Cover is closed - if(locked) - if(prob(90)) - to_chat(user, "You emag the cover lock.") - locked = FALSE - else - to_chat(user, "You fail to emag the cover lock.") - to_chat(src, "Hack attempt detected.") - return 1 - else - to_chat(user, "The cover is already unlocked.") - return - - if(opened) //Cover is open - if(emagged) - return //Prevents the X has hit Y with Z message also you cant emag them twice - if(wiresexposed) - to_chat(user, "You must close the panel first") - return - else - sleep(6) - if(prob(50)) - emagged = TRUE - lawupdate = FALSE - disconnect_from_ai() - to_chat(user, "You emag [src]'s interface.") - log_and_message_admins("emagged cyborg [key_name_admin(src)]. Laws overridden.", src) - clear_supplied_laws() - clear_inherent_laws() - laws = new /datum/ai_laws/syndicate_override - var/time = time2text(world.realtime,"hh:mm:ss") - GLOB.lawchanges.Add("[time] : [user.name]([user.key]) emagged [name]([key])") - set_zeroth_law("Only [user.real_name] and people \he designates as being such are operatives.") - SetLockdown(0) - . = 1 - spawn() - to_chat(src, "ALERT: Foreign software detected.") - sleep(5) - to_chat(src, "Initiating diagnostics...") - sleep(20) - to_chat(src, "SynBorg v1.7.1 loaded.") - sleep(5) - to_chat(src, "LAW SYNCHRONISATION ERROR") - sleep(5) - to_chat(src, "Would you like to send a report to NanoTraSoft? Y/N") - sleep(10) - to_chat(src, SPAN_DANGER(" N")) - sleep(20) - to_chat(src, "ERRORERRORERROR") - to_chat(src, "Obey these laws:") - laws.show_laws(src) - to_chat(src, "ALERT: [user.real_name] is your new master. Obey your new laws and his commands.") - if(module) - module.handle_emagged() - update_icon() - else - to_chat(user, "You fail to hack [src]'s interface.") - to_chat(src, "Hack attempt detected.") - return 1 - -/mob/living/silicon/robot/incapacitated(var/incapacitation_flags = INCAPACITATION_DEFAULT) - if ((incapacitation_flags & INCAPACITATION_FORCELYING) && (lockcharge || !is_component_functioning("actuator"))) - return 1 - if ((incapacitation_flags & INCAPACITATION_KNOCKOUT) && !is_component_functioning("actuator")) - return 1 - return ..() - -/mob/living/silicon/robot/proc/dismantle(var/mob/user) - to_chat(user, SPAN_NOTICE("You damage some parts of the chassis, but eventually manage to rip out the central processor.")) - var/obj/item/robot_parts/robot_suit/C = new dismantle_type(loc) - C.dismantled_from(src) - qdel(src) - -// Resting as a robot breaks things. Block it from happening. -/mob/living/silicon/robot/lay_down() - return diff --git a/code/modules/mob/living/silicon/robot/robot_damage.dm b/code/modules/mob/living/silicon/robot/robot_damage.dm deleted file mode 100644 index 2884c46c9f3b2..0000000000000 --- a/code/modules/mob/living/silicon/robot/robot_damage.dm +++ /dev/null @@ -1,157 +0,0 @@ -/mob/living/silicon/robot/updatehealth() - if(status_flags & GODMODE) - health = maxHealth - stat = CONSCIOUS - return - health = maxHealth - (getBruteLoss() + getFireLoss()) - return - -/mob/living/silicon/robot/getBruteLoss() - var/amount = 0 - for(var/V in components) - var/datum/robot_component/C = components[V] - if(C.installed != 0) amount += C.brute_damage - return amount - -/mob/living/silicon/robot/getFireLoss() - var/amount = 0 - for(var/V in components) - var/datum/robot_component/C = components[V] - if(C.installed != 0) amount += C.electronics_damage - return amount - -/mob/living/silicon/robot/adjustBruteLoss(var/amount) - if(amount > 0) - take_overall_damage(amount, 0) - else - heal_overall_damage(-amount, 0) - -/mob/living/silicon/robot/adjustFireLoss(var/amount) - if(amount > 0) - take_overall_damage(0, amount) - else - heal_overall_damage(0, -amount) - -/mob/living/silicon/robot/proc/get_damaged_components(var/brute, var/burn, var/destroyed = 0) - var/list/datum/robot_component/parts = list() - for(var/V in components) - var/datum/robot_component/C = components[V] - if(C.installed == 1 || (C.installed == -1 && destroyed)) - if((brute && C.brute_damage) || (burn && C.electronics_damage) || (!C.toggled) || (!C.powered && C.toggled)) - parts += C - return parts - -/mob/living/silicon/robot/proc/get_damageable_components() - var/list/rval = new - for(var/V in components) - var/datum/robot_component/C = components[V] - if(C.installed == 1) rval += C - return rval - -/mob/living/silicon/robot/proc/get_armour() - - if(!components.len) return 0 - var/datum/robot_component/C = components["armour"] - if(C && C.installed == 1) - return C - return 0 - -/mob/living/silicon/robot/heal_organ_damage(var/brute, var/burn) - var/list/datum/robot_component/parts = get_damaged_components(brute,burn) - if(!parts.len) return - var/datum/robot_component/picked = pick(parts) - picked.heal_damage(brute,burn) - - -/mob/living/silicon/robot/take_organ_damage(brute = 0, burn = 0, flags = 0) - if (flags & ORGAN_DAMAGE_FLESH_ONLY || !brute && !burn) - return - - var/list/components = get_damageable_components() - if (!components.len) - return - - if (module_active && istype(module_active, /obj/item/borg/combat/shield)) - var/obj/item/borg/combat/shield/shield = module_active - var/absorb_brute = brute * shield.shield_level - var/absorb_burn = burn * shield.shield_level - if (cell.checked_use(absorb_brute * 100 + absorb_burn * 100)) - brute = max(brute - absorb_brute, 0) - burn = max(brute - absorb_burn, 0) - if (!brute && !burn) - to_chat(src, SPAN_WARNING("Your shield absorbs all of the damage!")) - return - else - to_chat(src, SPAN_WARNING("Your shield absorbs some of the damage!")) - else - to_chat(src, SPAN_DANGER("Your charge is too low to power your shield!")) - - var/datum/robot_component/component - if (~flags & ORGAN_DAMAGE_SILICON_EMP) - component = get_armour() - if (!component) - component = pick(components) - if (component) - component.take_damage(brute, burn, !!(flags & ORGAN_DAMAGE_SHARP), !!(flags & ORGAN_DAMAGE_EDGE)) - - -/mob/living/silicon/robot/heal_overall_damage(var/brute, var/burn) - var/list/datum/robot_component/parts = get_damaged_components(brute,burn) - - while(parts.len && (brute>0 || burn>0) ) - var/datum/robot_component/picked = pick(parts) - - var/brute_was = picked.brute_damage - var/burn_was = picked.electronics_damage - - picked.heal_damage(brute,burn) - - brute -= (brute_was-picked.brute_damage) - burn -= (burn_was-picked.electronics_damage) - - parts -= picked - -/mob/living/silicon/robot/take_overall_damage(var/brute = 0, var/burn = 0, var/sharp = FALSE, var/used_weapon = null) - if(status_flags & GODMODE) return //godmode - var/list/datum/robot_component/parts = get_damageable_components() - - //Combat shielding absorbs a percentage of damage directly into the cell. - if(module_active && istype(module_active,/obj/item/borg/combat/shield)) - var/obj/item/borg/combat/shield/shield = module_active - //Shields absorb a certain percentage of damage based on their power setting. - var/absorb_brute = brute*shield.shield_level - var/absorb_burn = burn*shield.shield_level - var/cost = (absorb_brute+absorb_burn)*100 - - cell.charge -= cost - if(cell.charge <= 0) - cell.charge = 0 - to_chat(src, "Your shield has overloaded!") - else - brute -= absorb_brute - burn -= absorb_burn - to_chat(src, "Your shield absorbs some of the impact!") - - var/datum/robot_component/armour/A = get_armour() - if(A) - A.take_damage(brute,burn,sharp) - return - - while(parts.len && (brute>0 || burn>0) ) - var/datum/robot_component/picked = pick(parts) - - var/brute_was = picked.brute_damage - var/burn_was = picked.electronics_damage - - picked.take_damage(brute,burn) - - brute -= (picked.brute_damage - brute_was) - burn -= (picked.electronics_damage - burn_was) - - parts -= picked - -/mob/living/silicon/robot/emp_act(severity) - if (status_flags & GODMODE) - return - uneq_all() - ..() //Damage is handled at /silicon/ level. diff --git a/code/modules/mob/living/silicon/robot/robot_items.dm b/code/modules/mob/living/silicon/robot/robot_items.dm deleted file mode 100644 index 9f52a951a47a5..0000000000000 --- a/code/modules/mob/living/silicon/robot/robot_items.dm +++ /dev/null @@ -1,550 +0,0 @@ -//A portable analyzer, for research borgs. This is better then giving them a gripper which can hold anything and letting them use the normal analyzer. -/obj/item/portable_destructive_analyzer - name = "Portable Destructive Analyzer" - icon = 'icons/obj/items.dmi' - icon_state = "portable_analyzer" - desc = "Similar to the stationary version, this rather unwieldy device allows you to break down objects in the name of science." - - var/min_reliability = 90 //Can't upgrade, call it laziness or a drawback - - var/datum/research/techonly/files //The device uses the same datum structure as the R&D computer/server. - //This analyzer can only store tech levels, however. - - var/obj/item/loaded_item //What is currently inside the analyzer. - -/obj/item/portable_destructive_analyzer/New() - ..() - files = new /datum/research/techonly(src) //Setup the research data holder. - -/obj/item/portable_destructive_analyzer/attack_self(user as mob) - var/response = alert(user, "Analyzing the item inside will *DESTROY* the item for good.\n\ - Syncing to the research server will send the data that is stored inside to research.\n\ - Ejecting will place the loaded item onto the floor.", - "What would you like to do?", "Analyze", "Sync", "Eject") - if(response == "Analyze") - if(loaded_item) - var/confirm = alert(user, "This will destroy the item inside forever. Are you sure?","Confirm Analyze","Yes","No") - if(confirm == "Yes" && !QDELETED(loaded_item)) //This is pretty copypasta-y - to_chat(user, "You activate the analyzer's microlaser, analyzing \the [loaded_item] and breaking it down.") - flick("portable_analyzer_scan", src) - playsound(src.loc, 'sound/items/Welder2.ogg', 50, 1) - for(var/T in loaded_item.origin_tech) - files.UpdateTech(T, loaded_item.origin_tech[T]) - to_chat(user, "\The [loaded_item] had level [loaded_item.origin_tech[T]] in [CallTechName(T)].") - loaded_item = null - for(var/obj/I in contents) - for(var/mob/M in I.contents) - M.death() - if(istype(I,/obj/item/stack/material))//Only deconstructs one sheet at a time instead of the entire stack - var/obj/item/stack/material/S = I - if(S.use(1)) - loaded_item = S - else - qdel(S) - desc = initial(desc) - icon_state = initial(icon_state) - else - qdel(I) - desc = initial(desc) - icon_state = initial(icon_state) - else - return - else - to_chat(user, "The [src] is empty. Put something inside it first.") - if(response == "Sync") - var/success = 0 - for(var/obj/machinery/r_n_d/server/S in SSmachines.machinery) - for(var/datum/tech/T in files.known_tech) //Uploading - S.files.AddTech2Known(T) - for(var/datum/tech/T in S.files.known_tech) //Downloading - files.AddTech2Known(T) - success = 1 - files.RefreshResearch() - if(success) - to_chat(user, "You connect to the research server, push your data upstream to it, then pull the resulting merged data from the master branch.") - playsound(src.loc, 'sound/machines/twobeep.ogg', 50, 1) - else - to_chat(user, "Reserch server ping response timed out. Unable to connect. Please contact the system administrator.") - playsound(src.loc, 'sound/machines/buzz-two.ogg', 50, 1) - if(response == "Eject") - if(loaded_item) - loaded_item.dropInto(loc) - desc = initial(desc) - icon_state = initial(icon_state) - loaded_item = null - else - to_chat(user, "The [src] is already empty.") - - -/obj/item/portable_destructive_analyzer/afterattack(var/atom/target, var/mob/living/user, proximity) - if(!target) - return - if(!proximity) - return - if(!isturf(target.loc)) // Don't load up stuff if it's inside a container or mob! - return - if(istype(target,/obj/item)) - if(loaded_item) - to_chat(user, "Your [src] already has something inside. Analyze or eject it first.") - return - var/obj/item/I = target - I.forceMove(src) - loaded_item = I - for(var/mob/M in viewers()) - M.show_message(text(SPAN_NOTICE("[user] adds the [I] to the [src].")), 1) - desc = initial(desc) + "
              It is holding \the [loaded_item]." - flick("portable_analyzer_load", src) - icon_state = "portable_analyzer_full" - -/obj/item/party_light - name = "party light" - desc = "An array of LEDs in tons of colors." - icon = 'icons/obj/lighting.dmi' - icon_state = "partylight-off" - item_state = "partylight-off" - var/activated = 0 - var/strobe_effect = null - -/obj/item/party_light/attack_self() - if (activated) - deactivate_strobe() - else - activate_strobe() - -/obj/item/party_light/on_update_icon() - if (activated) - icon_state = "partylight-on" - set_light(1, 1, 7) - else - icon_state = "partylight_off" - set_light(0) - -/obj/item/party_light/proc/activate_strobe() - activated = 1 - - // Create the party light effect and place it on the turf of who/whatever has it. - var/turf/T = get_turf(src) - var/obj/effect/party_light/L = new(T) - strobe_effect = L - - // Make the light effect follow this party light object. - GLOB.moved_event.register(src, L, /atom/movable/proc/move_to_turf_or_null) - - update_icon() - -/obj/item/party_light/proc/deactivate_strobe() - activated = 0 - - // Cause the party light effect to stop following this object, and then delete it. - GLOB.moved_event.unregister(src, strobe_effect, /atom/movable/proc/move_to_turf_or_null) - QDEL_NULL(strobe_effect) - - update_icon() - -/obj/item/party_light/Destroy() - deactivate_strobe() - . = .. () - -/obj/effect/party_light - name = "party light" - desc = "This is probably bad for your eyes." - icon = 'icons/effects/lens_flare.dmi' - icon_state = "party_strobe" - simulated = FALSE - anchored = TRUE - pixel_x = -30 - pixel_y = -4 - -/obj/effect/party_light/Initialize() - update_icon() - . = ..() - -//This is used to unlock other borg covers. -/obj/item/card/robot //This is not a child of id cards, as to avoid dumb typechecks on computers. - name = "access code transmission device" - icon_state = "robot_base" - desc = "A circuit grafted onto the bottom of an ID card. It is used to transmit access codes into other robot chassis, \ - allowing you to lock and unlock other robots' panels." - -//A harvest item for serviceborgs. -/obj/item/robot_harvester - name = "auto harvester" - desc = "A hand-held harvest tool that resembles a sickle. It uses energy to cut plant matter very efficently." - icon = 'icons/obj/weapons/other.dmi' - icon_state = "autoharvester" - -/obj/item/robot_harvester/afterattack(var/atom/target, var/mob/living/user, proximity) - if(!target) - return - if(!proximity) - return - if(istype(target,/obj/machinery/portable_atmospherics/hydroponics)) - var/obj/machinery/portable_atmospherics/hydroponics/T = target - if(T.harvest) //Try to harvest, assuming it's alive. - T.harvest(user) - else if(T.dead) //It's probably dead otherwise. - T.remove_dead(user) - else - to_chat(user, "Harvesting \a [target] is not the purpose of this tool. \The [src] is for plants being grown.") - -// A special tray for the service droid. Allow droid to pick up and drop items as if they were using the tray normally -// Click on table to unload, click on item to load. Otherwise works identically to a tray. -// Unlike the base item "tray", robotrays ONLY pick up food, drinks and condiments. - -/obj/item/tray/robotray - name = "RoboTray" - desc = "An autoloading tray specialized for carrying refreshments." - -/obj/item/tray/robotray/can_add_item(obj/item/I) - return ..() && istype(I, /obj/item/reagent_containers) - - - - -// A special pen for service droids. Can be toggled to switch between normal writting mode, and paper rename mode -// Allows service droids to rename paper items. - -/obj/item/pen/robopen - desc = "A black ink printing attachment with a paper naming mode." - name = "Printing Pen" - var/mode = 1 - -/obj/item/pen/robopen/attack_self(mob/user as mob) - - var/choice = input("Would you like to change colour or mode?") as null|anything in list("Colour","Mode") - if(!choice) return - - playsound(src.loc, 'sound/effects/pop.ogg', 50, 0) - - switch(choice) - - if("Colour") - var/newcolour = input("Which colour would you like to use?") as null|anything in list("black","blue","red","green","yellow") - if(newcolour) colour = newcolour - - if("Mode") - if (mode == 1) - mode = 2 - else - mode = 1 - to_chat(user, "Changed printing mode to '[mode == 2 ? "Rename Paper" : "Write Paper"]'") - - return - -// Copied over from paper's rename verb -// see code/modules/paperwork/paper.dm line 62 - -/obj/item/pen/robopen/proc/RenamePaper(mob/user, obj/item/paper/paper) - if ( !user || !paper ) - return - var/n_name = sanitizeSafe(input(user, "What would you like to label the paper?", "Paper Labelling", null) as text, 32) - if ( !user || !paper ) - return - - //n_name = copytext_char(n_name, 1, 32) - if(( get_dist(user,paper) <= 1 && user.stat == 0)) - paper.SetName("paper[(n_name ? text("- '[n_name]'") : null)]") - paper.last_modified_ckey = user.ckey - add_fingerprint(user) - return - -//TODO: Add prewritten forms to dispense when you work out a good way to store the strings. -/obj/item/form_printer - //name = "paperwork printer" - name = "paper dispenser" - icon = 'icons/obj/bureaucracy.dmi' - icon_state = "paper_bin1" - item_state = "sheet-metal" - -/obj/item/form_printer/attack(mob/living/carbon/M as mob, mob/living/carbon/user as mob) - return - -/obj/item/form_printer/afterattack(atom/target as mob|obj|turf|area, mob/living/user as mob|obj, flag, params) - - if(!target || !flag) - return - - if(istype(target,/obj/structure/table)) - deploy_paper(get_turf(target)) - -/obj/item/form_printer/attack_self(mob/user as mob) - deploy_paper(get_turf(src)) - -/obj/item/form_printer/proc/deploy_paper(var/turf/T) - T.visible_message(SPAN_NOTICE("\The [src.loc] dispenses a sheet of crisp white paper.")) - new /obj/item/paper(T) - - -//Personal shielding for the combat module. -/obj/item/borg/combat/shield - name = "personal shielding" - desc = "A powerful experimental module that turns aside or absorbs incoming attacks at the cost of charge." - icon = 'icons/obj/decals.dmi' - icon_state = "shock" - var/shield_level = 0.5 //Percentage of damage absorbed by the shield. - -/obj/item/borg/combat/shield/verb/set_shield_level() - set name = "Set shield level" - set category = "Object" - set src in range(0) - - var/N = input("How much damage should the shield absorb?") in list("5","10","25","50","75","100") - if (N) - shield_level = text2num(N)/100 - -/obj/item/borg/combat/mobility - name = "mobility module" - desc = "By retracting limbs and tucking in its head, a combat android can roll at high speeds." - icon = 'icons/obj/decals.dmi' - icon_state = "shock" - -/obj/item/inflatable_dispenser - name = "inflatables dispenser" - desc = "Hand-held device which allows rapid deployment and removal of inflatables." - icon = 'icons/obj/storage.dmi' - icon_state = "inf_deployer" - item_state = "RPED" - w_class = ITEM_SIZE_LARGE - - var/stored_walls = 5 - var/stored_doors = 2 - var/max_walls = 5 - var/max_doors = 2 - var/mode = 0 // 0 - Walls 1 - Doors - -/obj/item/inflatable_dispenser/robot - w_class = ITEM_SIZE_HUGE - stored_walls = 10 - stored_doors = 5 - max_walls = 10 - max_doors = 5 - -/obj/item/inflatable_dispenser/examine(mob/user) - . = ..() - to_chat(user, "It has [stored_walls] wall segment\s and [stored_doors] door segment\s stored.") - to_chat(user, "It is set to deploy [mode ? "doors" : "walls"]") - -/obj/item/inflatable_dispenser/attack_self() - mode = !mode - to_chat(usr, "You set \the [src] to deploy [mode ? "doors" : "walls"].") - -/obj/item/inflatable_dispenser/afterattack(atom/target, mob/user, proximity_flag, click_parameters) - if (!user) - return - if (loc != user) - return - var/turf/T = get_turf(target) - if (!user.TurfAdjacent(T)) - return - - if (istype(target, /obj/structure/inflatable)) - if (!do_after(user, 0.5 SECONDS, target, DO_PUBLIC_UNIQUE)) - return - playsound(loc, 'sound/machines/hiss.ogg', 75, 1) - var/obj/item/inflatable/I - if (istype(target, /obj/structure/inflatable/door)) - if (stored_doors < max_doors) - ++stored_doors - else - I = new /obj/item/inflatable/door(T) - else - if (stored_walls < max_walls) - ++stored_walls - else - I = new /obj/item/inflatable/wall(T) - user.visible_message( - SPAN_ITALIC("\The [user] picks up \an [target] with \an [src]."), - SPAN_NOTICE("You deflate \the [target] with \the [src]."), - SPAN_ITALIC("You can hear rushing air."), - range = 5 - ) - if (I) - var/obj/structure/inflatable/S = target - copy_health(S, I) - qdel(target) - - else if (istype(target, /obj/item/inflatable)) - var/collected = FALSE - if (istype(target, /obj/item/inflatable/door)) - if (stored_doors < max_doors) - ++stored_doors - collected = TRUE - else - if (stored_walls < max_walls) - ++stored_walls - collected = TRUE - if (collected) - user.visible_message( - SPAN_ITALIC("\The [user] picks up \an [target] with \an [src]."), - SPAN_ITALIC("You pick up \the [target] with \the [src]."), - range = 3 - ) - qdel(target) - else - to_chat(user, SPAN_WARNING("\The [src] is already full of those.")) - - else - var/active_mode = mode - if (active_mode ? (!stored_doors) : (!stored_walls)) - to_chat(user, SPAN_WARNING("\The [src] is out of [active_mode ? "doors" : "walls"].")) - return - var/obstruction = T.get_obstruction() - if (obstruction) - to_chat(user, SPAN_WARNING("\The [english_list(obstruction)] is blocking that spot.")) - return - if (!do_after(user, 0.5 SECONDS, T, DO_PUBLIC_UNIQUE)) - return - obstruction = T.get_obstruction() - if (obstruction) - to_chat(user, SPAN_WARNING("\The [english_list(obstruction)] is blocking that spot.")) - return - var/placed - if (active_mode) - placed = new /obj/structure/inflatable/door(T) - --stored_doors - else - placed = new /obj/structure/inflatable/wall(T) - --stored_walls - user.visible_message( - SPAN_ITALIC("\The [user] inflates \an [placed]."), - SPAN_NOTICE("You inflate \an [placed]."), - range = 5 - ) - playsound(loc, 'sound/items/zip.ogg', 75, 1) - -/obj/item/reagent_containers/spray/cleaner/drone - name = "space cleaner" - desc = "BLAM!-brand non-foaming space cleaner!" - volume = 150 - -/obj/item/robot_rack - name = "a generic robot rack" - desc = "A rack for carrying large items as a robot." - var/object_type //The types of object the rack holds (subtypes are allowed). - var/interact_type //Things of this type will trigger attack_hand when attacked by this. - var/capacity = 1 //How many objects can be held. - /// Whether to attack_self on objects as they're deployed - var/attack_self_on_deploy = TRUE - var/list/obj/item/held = list() //What is being held. - -/obj/item/robot_rack/examine(mob/user) - . = ..() - to_chat(user, "It can hold up to [capacity] item[capacity == 1 ? "" : "s"].") - -/obj/item/robot_rack/Initialize(mapload, starting_objects = 0) - . = ..() - for(var/i = 1, i <= min(starting_objects, capacity), i++) - held += new object_type(src) - -/obj/item/robot_rack/attack_self(mob/user) - if(!length(held)) - to_chat(user, SPAN_WARNING("\The [src] is empty.")) - return - var/obj/item/R = held[length(held)] - R.dropInto(loc) - held -= R - if (attack_self_on_deploy) - R.attack_self(user) // deploy it - to_chat(user, SPAN_NOTICE("You deploy \a [R].")) - R.add_fingerprint(user) - -/obj/item/robot_rack/resolve_attackby(obj/O, mob/user, click_params) - if(istype(O, object_type)) - if(length(held) < capacity) - to_chat(user, SPAN_NOTICE("You collect \the [O].")) - O.forceMove(src) - held += O - return - to_chat(user, SPAN_WARNING("\The [src] is full and can't store any more items.")) - return - if(istype(O, interact_type)) - O.attack_hand(user) - return - . = ..() - -/obj/item/robot_rack/verb/empty_rack() - set name = "Empty Rack" - set desc = "Empty all items from the rack." - set category = "Silicon Commands" - if(!length(held)) - to_chat(usr, SPAN_WARNING("\The [src] is empty.")) - return - while(length(held)) - attack_self(usr) - -/obj/item/bioreactor - name = "bioreactor" - desc = "An integrated power generator that runs on most kinds of biomass." - icon = 'icons/obj/power.dmi' - icon_state = "portgen0" - - var/base_power_generation = 75 KILOWATTS - var/max_fuel_items = 5 - var/list/fuel_types = list( - /obj/item/reagent_containers/food/snacks/meat = 2, - /obj/item/reagent_containers/food/snacks/fish = 1.5 - ) - -/obj/item/bioreactor/attack_self(var/mob/user) - if(contents.len >= 1) - var/obj/item/removing = contents[1] - user.put_in_hands(removing) - to_chat(user, SPAN_NOTICE("You remove \the [removing] from \the [src].")) - else - to_chat(user, SPAN_WARNING("There is nothing loaded into \the [src].")) - -/obj/item/bioreactor/afterattack(var/atom/movable/target, var/mob/user, var/proximity_flag, var/click_parameters) - if(!proximity_flag || !istype(target)) - return - - var/is_fuel = istype(target, /obj/item/reagent_containers/food/snacks/grown) - is_fuel = is_fuel || is_type_in_list(target, fuel_types) - - if(!is_fuel) - to_chat(user, SPAN_WARNING("\The [target] cannot be used as fuel by \the [src].")) - return - - if(contents.len >= max_fuel_items) - to_chat(user, SPAN_WARNING("\The [src] can fit no more fuel inside.")) - return - target.forceMove(src) - to_chat(user, SPAN_NOTICE("You load \the [target] into \the [src].")) - -/obj/item/bioreactor/Initialize() - . = ..() - START_PROCESSING(SSobj, src) - -/obj/item/bioreactor/Destroy() - STOP_PROCESSING(SSobj, src) - . = ..() - -/obj/item/bioreactor/Process() - var/mob/living/silicon/robot/R = loc - if(!istype(R) || !R.cell || R.cell.fully_charged() || !contents.len) - return - - var/generating_power - var/using_item - - for(var/thing in contents) - var/atom/A = thing - if(istype(A, /obj/item/reagent_containers/food/snacks/grown)) - generating_power = base_power_generation - using_item = A - else - for(var/fuel_type in fuel_types) - if(istype(A, fuel_type)) - generating_power = fuel_types[fuel_type] * base_power_generation - using_item = A - break - if(using_item) - break - - if(istype(using_item, /obj/item/stack)) - var/obj/item/stack/stack = using_item - stack.use(1) - else if(using_item) - qdel(using_item) - - if(generating_power) - R.cell.give(generating_power * CELLRATE) diff --git a/code/modules/mob/living/silicon/robot/robot_movement.dm b/code/modules/mob/living/silicon/robot/robot_movement.dm deleted file mode 100644 index 0f8f63c1fa4ca..0000000000000 --- a/code/modules/mob/living/silicon/robot/robot_movement.dm +++ /dev/null @@ -1,31 +0,0 @@ -/mob/living/silicon/robot/slip_chance(var/prob_slip) - if(module && module.no_slip) - return 0 - ..(prob_slip) - -/mob/living/silicon/robot/Check_Shoegrip() - if(module && module.no_slip) - return 1 - return 0 - -/mob/living/silicon/robot/Allow_Spacemove() - if(module) - for(var/obj/item/tank/jetpack/J in module.equipment) - if(J && J.allow_thrust(0.01)) - return 1 - . = ..() - - -/mob/living/silicon/robot/movement_delay() - var/tally = ..() - - // Subtract 1 to match Human base movement_delay of -1 - tally -= 1 - - if (vtec) - tally -= 1 - - if(module_active && istype(module_active,/obj/item/borg/combat/mobility)) - tally -= 3 - - return tally diff --git a/code/modules/mob/living/silicon/say.dm b/code/modules/mob/living/silicon/say.dm deleted file mode 100644 index 2e3767792fe04..0000000000000 --- a/code/modules/mob/living/silicon/say.dm +++ /dev/null @@ -1,142 +0,0 @@ -/mob/living/silicon/say(var/message, var/sanitize = 1) - return ..(sanitize ? sanitize(message) : message) - -/mob/living/silicon/handle_message_mode(message_mode, message, verb, speaking, used_radios, alt_name) - log_say("[key_name(src)] : [message]") - -/mob/living/silicon/robot/handle_message_mode(message_mode, message, verb, speaking, used_radios, alt_name) - ..() - if(message_mode) - if(!is_component_functioning("radio")) - to_chat(src, "Your radio isn't functional at this time.") - return 0 - if(message_mode == "general") - message_mode = null - return silicon_radio.talk_into(src,message,message_mode,verb,speaking) - -/mob/living/silicon/ai/handle_message_mode(message_mode, message, verb, speaking, used_radios, alt_name) - ..() - if(message_mode == "department") - return holopad_talk(message, verb, speaking) - else if(message_mode) - if (ai_radio.disabledAi || !has_power() || stat) - to_chat(src, "System Error - Transceiver Disabled.") - return 0 - if(message_mode == "general") - message_mode = null - return ai_radio.talk_into(src,message,message_mode,verb,speaking) - -/mob/living/silicon/pai/handle_message_mode(message_mode, message, verb, speaking, used_radios, alt_name) - ..() - if(message_mode) - if(message_mode == "general") - message_mode = null - if(message_mode == "intercom") - for(var/obj/item/device/radio/I in view(1)) - if(I.intercom_handling) - I.talk_into(src, message, null, verb, speaking) - used_radios += I - return silicon_radio.talk_into(src,message,message_mode,verb,speaking) - -/mob/living/silicon/say_quote(var/text) - var/ending = copytext_char(text, -1) - if (ending == "?") - return speak_query - else if (ending == "!") - return speak_exclamation - return speak_statement - -#define IS_AI 1 -#define IS_ROBOT 2 -#define IS_PAI 3 - -/mob/living/silicon/say_understands(var/other,var/datum/language/speaking = null) - //These only pertain to common. Languages are handled by mob/say_understands() - if (!speaking) - if (istype(other, /mob/living/carbon)) - return 1 - if (istype(other, /mob/living/silicon)) - return 1 - if (istype(other, /mob/living/carbon/brain)) - return 1 - return ..() - -//For holopads only. Usable by AI. -/mob/living/silicon/ai/proc/holopad_talk(var/message, verb, datum/language/speaking) - - log_say("[key_name(src)] : [message]") - - message = trim(message) - - if (!message) - return - - var/obj/machinery/hologram/holopad/H = src.holo - if(H && H.masters[src])//If there is a hologram and its master is the user. - - // AI can hear their own message, this formats it for them. - if(speaking) - to_chat(src, "Holopad transmitted, [real_name] [speaking.format_message(message, verb)]") - else - to_chat(src, "Holopad transmitted, [real_name] [verb], \"[message]\"") - - //This is so pAI's and people inside lockers/boxes,etc can hear the AI Holopad, the alternative being recursion through contents. - //This is much faster. - var/list/listening = list() - var/list/listening_obj = list() - var/turf/T = get_turf(H) - - if(T) - var/list/hear = hear(7, T) - var/list/hearturfs = list() - - for(var/I in hear) - if(ismob(I)) - var/mob/M = I - listening += M - hearturfs += M.locs[1] - for(var/obj/O in M.contents) - listening_obj |= O - else if(isobj(I)) - var/obj/O = I - hearturfs += O.locs[1] - listening_obj |= O - - - for(var/mob/M in GLOB.player_list) - if(M.stat == DEAD && M.get_preference_value(/datum/client_preference/ghost_ears) == GLOB.PREF_ALL_SPEECH) - M.hear_say(message,verb,speaking,null,null, src) - continue - if(M.loc && (M.locs[1] in hearturfs)) - M.hear_say(message,verb,speaking,null,null, src) - - - else - to_chat(src, "No holopad connected.") - return 0 - return 1 - -/mob/living/silicon/ai/proc/holopad_emote(var/message) //This is called when the AI uses the 'me' verb while using a holopad. - - log_emote("[key_name(src)] : [message]") - - message = trim(message) - - if (!message) - return - - var/obj/machinery/hologram/holopad/T = src.holo - if(T && T.masters[src]) - var/rendered = "[name] [message]" - to_chat(src, "Holopad action relayed, [real_name] [message]") - - for(var/mob/M in viewers(T.loc)) - M.show_message(rendered, 2) - else //This shouldn't occur, but better safe then sorry. - to_chat(src, "No holopad connected.") - return 0 - return 1 - -#undef IS_AI -#undef IS_ROBOT -#undef IS_PAI diff --git a/code/modules/mob/living/silicon/silicon.dm b/code/modules/mob/living/silicon/silicon.dm deleted file mode 100644 index eab3304137007..0000000000000 --- a/code/modules/mob/living/silicon/silicon.dm +++ /dev/null @@ -1,383 +0,0 @@ -/mob/living/silicon - gender = NEUTER - voice_name = "synthesized voice" - skillset = /datum/skillset/silicon - - meat_type = null - meat_amount = 0 - skin_material = null - skin_amount = 0 - bone_material = null - bone_amount = 0 - - var/syndicate = 0 - var/const/MAIN_CHANNEL = "Main Frequency" - var/lawchannel = MAIN_CHANNEL // Default channel on which to state laws - var/list/stating_laws = list()// Channels laws are currently being stated on - var/obj/item/device/radio/silicon_radio - - var/list/hud_list[10] - var/list/speech_synthesizer_langs = list() //which languages can be vocalized by the speech synthesizer - - //Used in say.dm. - var/speak_statement = "states" - var/speak_exclamation = "declares" - var/speak_query = "queries" - var/pose //Yes, now AIs can pose too. - var/obj/item/device/camera/siliconcam/silicon_camera = null //photography - var/local_transmit //If set, can only speak to others of the same type within a short range. - var/speech_sounds //inf - - var/sensor_mode = 0 //Determines the current HUD. - - var/next_alarm_notice - var/list/datum/alarm/queued_alarms = new() - - var/list/access_rights - var/obj/item/card/id/idcard = /obj/item/card/id/synthetic - - var/machine_restriction = TRUE // Whether or not the silicon mob is affected by the `silicon_restriction` var on machines - - #define SEC_HUD 1 //Security HUD mode - #define MED_HUD 2 //Medical HUD mode - -/mob/living/silicon/Initialize() - GLOB.silicon_mob_list += src - . = ..() - - if(silicon_radio) - silicon_radio = new silicon_radio(src) - if(silicon_camera) - silicon_camera = new silicon_camera(src) - - add_language(LANGUAGE_HUMAN_EURO) - default_language = all_languages[LANGUAGE_HUMAN_EURO] - init_id() - init_subsystems() - -/mob/living/silicon/Destroy() - GLOB.silicon_mob_list -= src - QDEL_NULL(silicon_radio) - QDEL_NULL(silicon_camera) - for(var/datum/alarm_handler/AH as anything in SSalarm.handlers) - AH.unregister_alarm(src) - return ..() - -/mob/living/silicon/fully_replace_character_name(new_name) - ..() - create_or_rename_email(new_name, "root.rt") - if(istype(idcard)) - idcard.registered_name = new_name - -/mob/living/silicon/proc/init_id() - if(ispath(idcard)) - idcard = new idcard(src) - set_id_info(idcard) - -/mob/living/silicon/proc/show_laws() - return - -/mob/living/silicon/drop_item() - return - -/mob/living/silicon/emp_act(severity) - if (status_flags & GODMODE) - return - switch(severity) - if(EMP_ACT_HEAVY) - take_organ_damage(0, 16, ORGAN_DAMAGE_SILICON_EMP) - if(prob(50)) Stun(rand(5,10)) - else confused = (min(confused + 2, 40)) - if(EMP_ACT_LIGHT) - take_organ_damage(0, 7, ORGAN_DAMAGE_SILICON_EMP) - confused = (min(confused + 2, 30)) - flash_eyes(affect_silicon = 1) - to_chat(src, "*BZZZT*") - to_chat(src, "Warning: Electromagnetic pulse detected.") - ..() - -/mob/living/silicon/stun_effect_act(var/stun_amount, var/agony_amount) - return //immune - -/mob/living/silicon/electrocute_act(var/shock_damage, var/obj/source, var/siemens_coeff = 1.0, def_zone = null) - - if (istype(source, /obj/machinery/containment_field)) - var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread - s.set_up(5, 1, loc) - s.start() - - shock_damage *= 0.75 //take reduced damage - take_overall_damage(0, shock_damage) - visible_message("\The [src] was shocked by \the [source]!", \ - "Energy pulse detected, system damaged!", \ - "You hear an electrical crack") - if(prob(20)) - Stun(2) - return - -/mob/living/silicon/proc/damage_mob(var/brute = 0, var/fire = 0, var/tox = 0) - return - -/mob/living/silicon/IsAdvancedToolUser() - return 1 - -/mob/living/silicon/bullet_act(var/obj/item/projectile/Proj) - if (status_flags & GODMODE) - return PROJECTILE_FORCE_MISS - - if(!Proj.nodamage) - switch(Proj.damage_type) - if (DAMAGE_BRUTE) - adjustBruteLoss(Proj.damage) - if (DAMAGE_BURN) - adjustFireLoss(Proj.damage) - - Proj.on_hit(src,100) //wow this is a terrible hack - updatehealth() - return 100 - -/mob/living/silicon/apply_effect(effect = 0, effecttype = EFFECT_STUN, blocked = 0) - return 0//The only effect that can hit them atm is flashes and they still directly edit so this works for now - -/proc/islinked(var/mob/living/silicon/robot/bot, var/mob/living/silicon/ai/ai) - if(!istype(bot) || !istype(ai)) - return 0 - if (bot.connected_ai == ai) - return 1 - return 0 - - -// this function shows the health of the AI in the Status panel -/mob/living/silicon/proc/show_system_integrity() - if(!src.stat) - stat(null, text("System integrity: [round((health/maxHealth)*100)]%")) - else - stat(null, text("Systems nonfunctional")) - - -// This is a pure virtual function, it should be overwritten by all subclasses -/mob/living/silicon/proc/show_malf_ai() - return 0 - -// this function displays the shuttles ETA in the status panel if the shuttle has been called -/mob/living/silicon/proc/show_emergency_shuttle_eta() - if(evacuation_controller) - var/eta_status = evacuation_controller.get_status_panel_eta() - if(eta_status) - stat(null, eta_status) - - -// This adds the basic clock, shuttle recall timer, and malf_ai info to all silicon lifeforms -/mob/living/silicon/Stat() - if(statpanel("Status")) - show_emergency_shuttle_eta() - show_system_integrity() - show_malf_ai() - . = ..() - -//can't inject synths -/mob/living/silicon/can_inject(var/mob/user, var/target_zone) - to_chat(user, "The armoured plating is too tough.") - return 0 - - -//Silicon mob language procs - -/mob/living/silicon/can_speak(datum/language/speaking) - return universal_speak || (speaking in src.speech_synthesizer_langs) //need speech synthesizer support to vocalize a language - -/mob/living/silicon/add_language(var/language, var/can_speak=1) - var/datum/language/added_language = all_languages[language] - if(!added_language) - return - - . = ..(language) - if (can_speak && (added_language in languages) && !(added_language in speech_synthesizer_langs)) - speech_synthesizer_langs += added_language - return 1 - -/mob/living/silicon/remove_language(var/rem_language) - var/datum/language/removed_language = all_languages[rem_language] - if(!removed_language) - return - - ..(rem_language) - speech_synthesizer_langs -= removed_language - -/mob/living/silicon/check_languages() - set name = "Check Known Languages" - set category = "IC" - set src = usr - - var/dat = "Known Languages

              " - - if(default_language) - dat += "Current default language: [default_language] - reset

              " - - for(var/datum/language/L in languages) - if(!(L.flags & NONGLOBAL)) - var/default_str - if(L == default_language) - default_str = " - default - reset" - else - default_str = " - set default" - - var/synth = (L in speech_synthesizer_langs) - dat += "[L.name] ([get_language_prefix()][L.key])[synth ? default_str : null]
              Speech Synthesizer: [synth ? "YES" : "NOT SUPPORTED"]
              [L.desc]

              " - - show_browser(src, dat, "window=checklanguage") - return - -/mob/living/silicon/proc/toggle_sensor_mode() - var/sensor_type = input("Please select sensor type.", "Sensor Integration", null) in list("Security", "Medical","Disable") - switch(sensor_type) - if ("Security") - sensor_mode = SEC_HUD - to_chat(src, "Security records overlay enabled.") - if ("Medical") - sensor_mode = MED_HUD - to_chat(src, "Life signs monitor overlay enabled.") - if ("Disable") - sensor_mode = 0 - to_chat(src, "Sensor augmentations disabled.") - -/mob/living/silicon/verb/pose() - set name = "Set Pose" - set desc = "Sets a description which will be shown when someone examines you." - set category = "IC" - - pose = sanitize(input(usr, "This is [src]. It...", "Pose", null) as text) - -/mob/living/silicon/verb/set_flavor() - set name = "Set Flavour Text" - set desc = "Sets an extended description of your character's features." - set category = "IC" - - flavor_text = sanitize(input(usr, "Please enter your new flavour text.", "Flavour text", null) as text) - -/mob/living/silicon/binarycheck() - return 1 - -/mob/living/silicon/ex_act(severity) - if (status_flags & GODMODE) - return - if(!blinded) - flash_eyes() - - var/brute - var/burn - switch(severity) - if(EX_ACT_DEVASTATING) - brute = 400 - burn = 100 - if(EX_ACT_HEAVY) - brute = 60 - burn = 60 - if(EX_ACT_LIGHT) - brute = 30 - - apply_damage(brute, DAMAGE_BRUTE, damage_flags = DAMAGE_FLAG_EXPLODE) - apply_damage(burn, DAMAGE_BURN, damage_flags = DAMAGE_FLAG_EXPLODE) - -/mob/living/silicon/proc/receive_alarm(var/datum/alarm_handler/alarm_handler, var/datum/alarm/alarm, was_raised) - if(!(alarm.alarm_z() in GetConnectedZlevels(get_z(src)))) - return // Didn't actually hear it as far as we're concerned. - if(!next_alarm_notice) - next_alarm_notice = world.time + SecondsToTicks(10) - - var/list/alarms = queued_alarms[alarm_handler] - if(was_raised) - // Raised alarms are always set - alarms[alarm] = 1 - else - // Alarms that were raised but then cleared before the next notice are instead removed - if(alarm in alarms) - alarms -= alarm - // And alarms that have only been cleared thus far are set as such - else - alarms[alarm] = -1 - -/mob/living/silicon/proc/process_queued_alarms() - if(next_alarm_notice && (world.time > next_alarm_notice)) - next_alarm_notice = 0 - - var/alarm_raised = 0 - for(var/datum/alarm_handler/AH in queued_alarms) - var/list/alarms = queued_alarms[AH] - var/reported = 0 - for(var/datum/alarm/A in alarms) - if(alarms[A] == 1) - alarm_raised = 1 - if(!reported) - reported = 1 - to_chat(src, "--- [AH.category] Detected ---") - raised_alarm(A) - - for(var/datum/alarm_handler/AH in queued_alarms) - var/list/alarms = queued_alarms[AH] - var/reported = 0 - for(var/datum/alarm/A in alarms) - if(alarms[A] == -1) - if(!reported) - reported = 1 - to_chat(src, "--- [AH.category] Cleared ---") - to_chat(src, "\The [A.alarm_name()].") - - if(alarm_raised) - to_chat(src, "\[Show Alerts\]") - - for(var/datum/alarm_handler/AH in queued_alarms) - var/list/alarms = queued_alarms[AH] - alarms.Cut() - -/mob/living/silicon/proc/raised_alarm(var/datum/alarm/A) - to_chat(src, "[A.alarm_name()]!") - -/mob/living/silicon/ai/raised_alarm(var/datum/alarm/A) - var/cameratext = "" - for(var/obj/machinery/camera/C in A.cameras()) - cameratext += "[(cameratext == "")? "" : "|"][C.c_tag]" - to_chat(src, "[A.alarm_name()]! ([(cameratext)? cameratext : "No Camera"])") - - -/mob/living/silicon/proc/is_traitor() - return mind && (mind in GLOB.traitors.current_antagonists) - -/mob/living/silicon/proc/is_malf() - return mind && (mind in GLOB.malf.current_antagonists) - -/mob/living/silicon/proc/is_malf_or_traitor() - return is_traitor() || is_malf() - -/mob/living/silicon/adjustEarDamage() - return - -/mob/living/silicon/setEarDamage() - return - -/mob/living/silicon/reset_view() - ..() - if(cameraFollow) - cameraFollow = null - -/mob/living/silicon/proc/clear_client() - //Handle job slot/tater cleanup. - if(mind) - if(mind.assigned_job) - mind.assigned_job.clear_slot() - if(mind.objectives.len) - qdel(mind.objectives) - mind.special_role = null - clear_antag_roles(mind) - ghostize(0) - qdel(src) - -/mob/living/silicon/flash_eyes(intensity = FLASH_PROTECTION_MODERATE, override_blindness_check = FALSE, affect_silicon = FALSE, visual = FALSE, type = /obj/screen/fullscreen/flash) - if(affect_silicon) - return ..() - -/mob/living/silicon/seizure() - flash_eyes(affect_silicon = TRUE) - -/mob/living/silicon/get_bullet_impact_effect_type(var/def_zone) - return BULLET_IMPACT_METAL diff --git a/code/modules/mob/living/silicon/subsystems.dm b/code/modules/mob/living/silicon/subsystems.dm deleted file mode 100644 index 599e3c0095fc8..0000000000000 --- a/code/modules/mob/living/silicon/subsystems.dm +++ /dev/null @@ -1,119 +0,0 @@ -/mob/living/silicon - var/list/silicon_subsystems_by_name = list() - var/list/silicon_subsystems = list( - /datum/nano_module/alarm_monitor/all, - /datum/nano_module/law_manager, - /datum/nano_module/email_client, - /datum/nano_module/crew_manifest - ) - -/mob/living/silicon/ai/New() - silicon_subsystems.Cut() - for(var/subtype in subtypesof(/datum/nano_module)) - var/datum/nano_module/NM = subtype - if(initial(NM.available_to_ai)) - silicon_subsystems += NM - ..() - -/mob/living/silicon/robot/syndicate - silicon_subsystems = list( - /datum/nano_module/law_manager, - /datum/nano_module/email_client - ) - -/mob/living/silicon/Destroy() - for(var/subsystem in silicon_subsystems) - remove_subsystem(subsystem) - silicon_subsystems.Cut() - . = ..() - -/mob/living/silicon/proc/init_subsystems() - for(var/subsystem_type in silicon_subsystems) - init_subsystem(subsystem_type) - - if(/datum/nano_module/alarm_monitor/all in silicon_subsystems) - for(var/datum/alarm_handler/AH as anything in SSalarm.handlers) - AH.register_alarm(src, /mob/living/silicon/proc/receive_alarm) - queued_alarms[AH] = list() // Makes sure alarms remain listed in consistent order - -/mob/living/silicon/proc/init_subsystem(var/subsystem_type) - var/existing_entry = silicon_subsystems[subsystem_type] - if(existing_entry && !ispath(existing_entry)) - return FALSE - - var/ui_state = subsystem_type == /datum/nano_module/law_manager ? GLOB.conscious_state : GLOB.self_state - var/stat_silicon_subsystem/SSS = new(src, subsystem_type, ui_state) - silicon_subsystems[subsystem_type] = SSS - silicon_subsystems_by_name[SSS.name] = SSS - return TRUE - -/mob/living/silicon/proc/remove_subsystem(var/subsystem_type) - var/stat_silicon_subsystem/SSS = silicon_subsystems[subsystem_type] - if(!istype(SSS)) - return FALSE - - silicon_subsystems_by_name -= SSS.name - silicon_subsystems -= subsystem_type - qdel(SSS) - return TRUE - -/mob/living/silicon/proc/open_subsystem(var/subsystem_type, var/mob/given = src) - var/stat_silicon_subsystem/SSS = silicon_subsystems[subsystem_type] - if(!istype(SSS)) - return FALSE - SSS.Click(given) - return TRUE - -/mob/living/silicon/verb/activate_subsystem(var/datum/silicon_subsystem_name in silicon_subsystems_by_name) - set name = "Subsystems" - set desc = "Activates the given subsystem" - set category = "Silicon Commands" - - var/stat_silicon_subsystem/SSS = silicon_subsystems_by_name[silicon_subsystem_name] - if(istype(SSS)) - SSS.Click() - -/mob/living/silicon/Stat() - . = ..() - if(!.) - return - if(!silicon_subsystems.len) - return - if(!statpanel("Subsystems")) - return - for(var/subsystem_type in silicon_subsystems) - var/stat_silicon_subsystem/SSS = silicon_subsystems[subsystem_type] - stat(SSS) - -/mob/living/silicon/proc/get_subsystem_from_path(subsystem_type) - var/stat_silicon_subsystem/SSS = silicon_subsystems[subsystem_type] - if(!istype(SSS)) - return 0 - if(!istype(SSS.subsystem, subsystem_type)) - return 0 - return SSS.subsystem - -/stat_silicon_subsystem - parent_type = /atom/movable - simulated = FALSE - var/ui_state - var/datum/nano_module/subsystem - -/stat_silicon_subsystem/New(var/mob/living/silicon/loc, var/subsystem_type, var/ui_state) - if(!istype(loc)) - CRASH("Unexpected location. Expected /mob/living/silicon, was [loc.type].") - src.ui_state = ui_state - subsystem = new subsystem_type(loc) - name = subsystem.name - ..() - -/stat_silicon_subsystem/Destroy() - qdel(subsystem) - subsystem = null - . = ..() - -/stat_silicon_subsystem/Click(var/mob/given = usr) - if (istype(given)) - subsystem.ui_interact(given, state = ui_state) - else - subsystem.ui_interact(usr, state = ui_state) diff --git a/code/modules/mob/living/simple_animal/aquatic/_aquatic.dm b/code/modules/mob/living/simple_animal/aquatic/_aquatic.dm deleted file mode 100644 index 7b7d4f3b7a2cb..0000000000000 --- a/code/modules/mob/living/simple_animal/aquatic/_aquatic.dm +++ /dev/null @@ -1,40 +0,0 @@ -/mob/living/simple_animal/aquatic - icon = 'icons/mob/simple_animal/aquatic.dmi' - turns_per_move = 5 - speed = 4 - mob_size = MOB_SMALL - - // They only really care if there's water around them or not. - max_gas = list() - min_gas = list() - minbodytemp = 0 - - meat_type = /obj/item/reagent_containers/food/snacks/fish/unknown - meat_amount = 3 - bone_amount = 5 - skin_amount = 5 - bone_material = MATERIAL_BONE_FISH - skin_material = MATERIAL_SKIN_FISH - - say_list_type = /datum/say_list/aquatic - -/mob/living/simple_animal/aquatic/New() - ..() - default_pixel_x = rand(-12,12) - default_pixel_y = rand(-12,12) - pixel_x = default_pixel_x - pixel_y = default_pixel_y - -/mob/living/simple_animal/aquatic/Life() - if(!submerged()) - if(icon_state == icon_living) - icon_state = "[icon_living]_dying" - walk(src, 0) - Paralyse(3) - . = ..() - -/mob/living/simple_animal/aquatic/handle_atmos(var/atmos_suitable = 1) - . = ..(atmos_suitable = submerged()) - -/datum/say_list/aquatic - emote_see = list("glubs", "blubs", "bloops") \ No newline at end of file diff --git a/code/modules/mob/living/simple_animal/aquatic/_aquatic_hostile.dm b/code/modules/mob/living/simple_animal/aquatic/_aquatic_hostile.dm deleted file mode 100644 index cd5eadb7e0738..0000000000000 --- a/code/modules/mob/living/simple_animal/aquatic/_aquatic_hostile.dm +++ /dev/null @@ -1,28 +0,0 @@ -/mob/living/simple_animal/hostile/aquatic - icon = 'icons/mob/simple_animal/aquatic.dmi' - meat_type = /obj/item/reagent_containers/food/snacks/fish/unknown - turns_per_move = 5 - natural_weapon = /obj/item/natural_weapon/bite - speed = 4 - mob_size = MOB_MEDIUM - - // They only really care if there's water around them or not. - max_gas = list() - min_gas = list() - minbodytemp = 0 - - ai_holder = /datum/ai_holder/simple_animal/melee/aquatic - -/mob/living/simple_animal/hostile/aquatic/Life() - if(!submerged()) - if(icon_state == icon_living) - icon_state = "[icon_living]_dying" - walk(src, 0) - Paralyse(3) - . = ..() - -/mob/living/simple_animal/hostile/aquatic/handle_atmos(var/atmos_suitable = 1) - . = ..(atmos_suitable = submerged()) - -/datum/ai_holder/simple_animal/melee/aquatic/can_act() - . = ..() && holder.submerged() \ No newline at end of file diff --git a/code/modules/mob/living/simple_animal/aquatic/_aquatic_retaliate.dm b/code/modules/mob/living/simple_animal/aquatic/_aquatic_retaliate.dm deleted file mode 100644 index 17ead3b2a43dc..0000000000000 --- a/code/modules/mob/living/simple_animal/aquatic/_aquatic_retaliate.dm +++ /dev/null @@ -1,29 +0,0 @@ -/mob/living/simple_animal/hostile/retaliate/aquatic - icon = 'icons/mob/simple_animal/aquatic.dmi' - meat_type = /obj/item/reagent_containers/food/snacks/fish/unknown - turns_per_move = 5 - natural_weapon = /obj/item/natural_weapon/bite - speed = 4 - mob_size = MOB_MEDIUM - - // They only really care if there's water around them or not. - max_gas = list() - min_gas = list() - minbodytemp = 0 - - ai_holder = /datum/ai_holder/simple_animal/retaliate/aquatic - - -/mob/living/simple_animal/hostile/retaliate/aquatic/Life() - if(!submerged()) - if(icon_state == icon_living) - icon_state = "[icon_living]_dying" - walk(src, 0) - Paralyse(3) - . = ..() - -/mob/living/simple_animal/hostile/retaliate/aquatic/handle_atmos(var/atmos_suitable = 1) - . = ..(atmos_suitable = submerged()) - -/datum/ai_holder/simple_animal/retaliate/aquatic/can_act() - . = ..() && holder.submerged() \ No newline at end of file diff --git a/code/modules/mob/living/simple_animal/aquatic/aquatic_carp.dm b/code/modules/mob/living/simple_animal/aquatic/aquatic_carp.dm deleted file mode 100644 index 079824051a167..0000000000000 --- a/code/modules/mob/living/simple_animal/aquatic/aquatic_carp.dm +++ /dev/null @@ -1,23 +0,0 @@ -/mob/living/simple_animal/hostile/retaliate/aquatic/carp - name = "carp" - desc = "A ferocious fish. May be too hardcore." - icon_state = "carp" - icon_living = "carp" - icon_dead = "carp_dead" - faction = "fishes" - maxHealth = 20 - health = 20 - - meat_type = /obj/item/reagent_containers/food/snacks/fish/carp - meat_amount = 3 - bone_amount = 5 - skin_amount = 5 - bone_material = MATERIAL_BONE_FISH - skin_material = MATERIAL_SKIN_FISH - -/mob/living/simple_animal/hostile/retaliate/aquatic/carp/New() - ..() - default_pixel_x = rand(-8,8) - default_pixel_y = rand(-8,8) - pixel_x = default_pixel_x - pixel_y = default_pixel_y \ No newline at end of file diff --git a/code/modules/mob/living/simple_animal/aquatic/aquatic_fish.dm b/code/modules/mob/living/simple_animal/aquatic/aquatic_fish.dm deleted file mode 100644 index 61ac1d106cb2f..0000000000000 --- a/code/modules/mob/living/simple_animal/aquatic/aquatic_fish.dm +++ /dev/null @@ -1,26 +0,0 @@ -/mob/living/simple_animal/aquatic/fish - name = "small fish" - desc = "Glub glub." - icon_state = "content" - icon_living = "content" - icon_dead = "content_dead" - faction = "fishes" - maxHealth = 10 - health = 10 - mob_size = MOB_TINY - density = FALSE - - meat_amount = 1 - bone_amount = 3 - skin_amount = 3 - -/mob/living/simple_animal/aquatic/fish/grump - icon_state = "grump" - icon_living = "grump" - icon_dead = "grump_dead" - -/mob/living/simple_animal/aquatic/fish/judge - icon_state = "judge" - icon_living = "judge" - icon_dead = "judge_dead" - meat_amount = 2 diff --git a/code/modules/mob/living/simple_animal/aquatic/aquatic_sharks.dm b/code/modules/mob/living/simple_animal/aquatic/aquatic_sharks.dm deleted file mode 100644 index 588e2cded004c..0000000000000 --- a/code/modules/mob/living/simple_animal/aquatic/aquatic_sharks.dm +++ /dev/null @@ -1,46 +0,0 @@ -/mob/living/simple_animal/hostile/aquatic/shark - name = "shark" - desc = "A ferocious fish with many, many teeth." - icon_state = "shark" - icon_living = "shark" - icon_dead = "shark_dead" - maxHealth = 150 - health = 150 - natural_weapon = /obj/item/natural_weapon/bite/shark - break_stuff_probability = 15 - faction = "sharks" - - meat_type = /obj/item/reagent_containers/food/snacks/fish/shark - meat_amount = 5 - bone_amount = 15 - skin_amount = 15 - bone_material = MATERIAL_BONE_CARTILAGE - skin_material = MATERIAL_SKIN_SHARK - -/obj/item/natural_weapon/bite/shark - force = 20 -/mob/living/simple_animal/hostile/aquatic/shark/huge - name = "gigacretoxyrhina" - desc = "That is a lot of shark." - icon = 'icons/mob/simple_animal/space_shark.dmi' - icon_state = "shark" - icon_living = "shark" - icon_dead = "shark_dead" - turns_per_move = 2 - move_to_delay = 2 - attack_same = 1 - speed = 0 - mob_size = MOB_LARGE - pixel_x = -16 - health = 400 - maxHealth = 400 - harm_intent_damage = 5 - natural_weapon = /obj/item/natural_weapon/bite/giantshark - break_stuff_probability = 35 - - meat_amount = 10 - bone_amount = 30 - skin_amount = 30 - -/obj/item/natural_weapon/bite/giantshark - force = 40 \ No newline at end of file diff --git a/code/modules/mob/living/simple_animal/borer/borer.dm b/code/modules/mob/living/simple_animal/borer/borer.dm deleted file mode 100644 index bccb22f8012ba..0000000000000 --- a/code/modules/mob/living/simple_animal/borer/borer.dm +++ /dev/null @@ -1,287 +0,0 @@ -/mob/living/simple_animal/borer - name = "cortical borer" - real_name = "cortical borer" - desc = "A small, quivering sluglike creature." - speak_emote = list("chirrups") - // emote_hear = list("chirrups") - response_help = "pokes" - response_disarm = "prods" - response_harm = "stomps on" - icon_state = "brainslug" - item_state = "voxslug" // For the lack of a better sprite... - icon_living = "brainslug" - icon_dead = "brainslug_dead" - speed = 5 - a_intent = I_HURT - status_flags = CANPUSH - natural_weapon = /obj/item/natural_weapon/bite/weak - friendly = "prods" - pass_flags = PASS_FLAG_TABLE - universal_understand = TRUE - holder_type = /obj/item/holder/borer - mob_size = MOB_SMALL - can_escape = TRUE - density = FALSE - - bleed_colour = "#816e12" - - var/static/list/chemical_types = list( - "bicaridine" = /datum/reagent/bicaridine, - "hyperzine" = /datum/reagent/hyperzine, - "tramadol" = /datum/reagent/tramadol - ) - - var/generation = 1 - var/static/list/borer_names = list( - "Primary", "Secondary", "Tertiary", "Quaternary", "Quinary", "Senary", - "Septenary", "Octonary", "Novenary", "Decenary", "Undenary", "Duodenary", - ) - - var/image/aura_image - var/chemicals = 10 // Chemicals used for reproduction and spitting neurotoxin. - var/truename // Name used for brainworm-speak. - var/controlling // Used in human death check. - var/docile = FALSE // Sugar can stop borers from acting. - var/has_reproduced // Whether or not the borer has reproduced, for objective purposes. - var/roundstart // Whether or not this borer has been mapped and should not look for a player initially. - var/neutered // 'borer lite' mode - fewer powers, less hostile to the host. - var/mob/living/carbon/human/host // Human host for the brain worm. - var/mob/living/captive_brain/host_brain // Used for swapping control of the body back and forth. - -/mob/living/simple_animal/borer/roundstart - roundstart = TRUE - -/mob/living/simple_animal/borer/neutered - neutered = TRUE - -/mob/living/simple_animal/borer/Login() - . = ..() - if(client) - client.screen |= hud_elements - client.screen |= hud_intent_selector - if(mind && !neutered) - GLOB.borers.add_antagonist(mind) - -/mob/living/simple_animal/borer/Logout() - . = ..() - if(client) - client.screen -= hud_elements - client.screen -= hud_intent_selector - -/mob/living/simple_animal/borer/Initialize(var/mapload, var/gen=1) - - hud_intent_selector = new - hud_inject_chemicals = new - hud_leave_host = new - hud_elements = list( - hud_inject_chemicals, - hud_leave_host - ) - if(!neutered) - hud_toggle_control = new - hud_elements += hud_toggle_control - - . = ..() - - add_language(LANGUAGE_BORER_GLOBAL) - verbs += /mob/living/proc/ventcrawl - verbs += /mob/living/proc/hide - - generation = gen - set_borer_name() - - if(!roundstart) - request_player() - - aura_image = create_aura_image(src) - aura_image.color = "#aaffaa" - aura_image.blend_mode = BLEND_SUBTRACT - aura_image.alpha = 125 - aura_image.SetTransform(scale = 0.33) - -/mob/living/simple_animal/borer/death(gibbed, deathmessage, show_dead_message) - if(aura_image) - destroy_aura_image(aura_image) - aura_image = null - . = ..() - -/mob/living/simple_animal/borer/Destroy() - if(aura_image) - destroy_aura_image(aura_image) - aura_image = null - if(client) - client.screen -= hud_elements - client.screen -= hud_intent_selector - QDEL_NULL_LIST(hud_elements) - QDEL_NULL(hud_intent_selector) - hud_toggle_control = null - hud_inject_chemicals = null - hud_leave_host = null - . = ..() - -/mob/living/simple_animal/borer/proc/set_borer_name() - truename = "[borer_names[min(generation, borer_names.len)]] [random_id("borer[generation]", 1000, 9999)]" - -/mob/living/simple_animal/borer/Life() - - sdisabilities = 0 - if(host) - blinded = host.blinded - eye_blind = host.eye_blind - eye_blurry = host.eye_blurry - if(host.sdisabilities & BLINDED) - sdisabilities |= BLINDED - if(host.sdisabilities & DEAFENED) - sdisabilities |= DEAFENED - else - blinded = FALSE - eye_blind = 0 - eye_blurry = 0 - - . = ..() - if(!.) - return FALSE - - if(host) - - if(!stat && !host.stat) - - if(host.reagents.has_reagent(/datum/reagent/sugar)) - if(!docile) - if(controlling) - to_chat(host, SPAN_NOTICE("You feel the soporific flow of sugar in your host's blood, lulling you into docility.")) - else - to_chat(src, SPAN_NOTICE("You feel the soporific flow of sugar in your host's blood, lulling you into docility.")) - docile = 1 - else - if(docile) - if(controlling) - to_chat(host, SPAN_NOTICE("You shake off your lethargy as the sugar leaves your host's blood.")) - else - to_chat(src, SPAN_NOTICE("You shake off your lethargy as the sugar leaves your host's blood.")) - docile = 0 - - if(chemicals < 250 && host.nutrition >= (neutered ? 200 : 50)) - host.nutrition-- - chemicals++ - - if(controlling) - - if(neutered) - host.release_control() - return - - if(docile) - to_chat(host, SPAN_NOTICE("You are feeling far too docile to continue controlling your host...")) - host.release_control() - return - - if(prob(5)) - host.adjustBrainLoss(0.1) - - if(prob(host.getBrainLoss()/20)) - host.say("*[pick(list("blink","blink_r","choke","aflap","drool","twitch","twitch_v","gasp"))]") - -/mob/living/simple_animal/borer/Stat() - . = ..() - statpanel("Status") - - if(evacuation_controller) - var/eta_status = evacuation_controller.get_status_panel_eta() - if(eta_status) - stat(null, eta_status) - - if (client.statpanel == "Status") - stat("Chemicals", chemicals) - -/mob/living/simple_animal/borer/proc/detatch() - - if(!host || !controlling) return - - if(istype(host,/mob/living/carbon/human)) - var/mob/living/carbon/human/H = host - var/obj/item/organ/external/head = H.get_organ(BP_HEAD) - head.implants -= src - - controlling = 0 - - host.remove_language(LANGUAGE_BORER_GLOBAL) - host.verbs -= /mob/living/carbon/proc/release_control - host.verbs -= /mob/living/carbon/proc/punish_host - host.verbs -= /mob/living/carbon/proc/spawn_larvae - - if(host_brain) - - // these are here so bans and multikey warnings are not triggered on the wrong people when ckey is changed. - // computer_id and IP are not updated magically on their own in offline mobs -walter0o - - // host -> self - var/h2s_id = host.computer_id - var/h2s_ip= host.lastKnownIP - host.computer_id = null - host.lastKnownIP = null - - src.ckey = host.ckey - - if(!src.computer_id) - src.computer_id = h2s_id - - if(!host_brain.lastKnownIP) - src.lastKnownIP = h2s_ip - - // brain -> host - var/b2h_id = host_brain.computer_id - var/b2h_ip= host_brain.lastKnownIP - host_brain.computer_id = null - host_brain.lastKnownIP = null - - host.ckey = host_brain.ckey - - if(!host.computer_id) - host.computer_id = b2h_id - - if(!host.lastKnownIP) - host.lastKnownIP = b2h_ip - - qdel(host_brain) - -#define COLOR_BORER_RED "#ff5555" -/mob/living/simple_animal/borer/proc/set_ability_cooldown(var/amt) - last_special = world.time + amt - for(var/obj/thing in hud_elements) - thing.color = COLOR_BORER_RED - addtimer(CALLBACK(src, /mob/living/simple_animal/borer/proc/reset_ui_callback), amt) -#undef COLOR_BORER_RED - -/mob/living/simple_animal/borer/proc/leave_host() - - for(var/obj/thing in hud_elements) - thing.alpha = 0 - thing.invisibility = INVISIBILITY_MAXIMUM - - if(!host) return - - if(host.mind) - GLOB.borers.remove_antagonist(host.mind) - - dropInto(host.loc) - - reset_view(null) - machine = null - - host.reset_view(null) - host.machine = null - - var/mob/living/H = host - H.status_flags &= ~PASSEMOTES - host = null - return - -//Procs for grabbing players. -/mob/living/simple_animal/borer/proc/request_player() - var/datum/ghosttrap/G = get_ghost_trap("cortical borer") - G.request_player(src, "A cortical borer needs a player.") - -/mob/living/simple_animal/borer/flash_eyes(intensity, override_blindness_check, affect_silicon, visual, type) - intensity *= 1.5 - . = ..() \ No newline at end of file diff --git a/code/modules/mob/living/simple_animal/borer/borer_attacks.dm b/code/modules/mob/living/simple_animal/borer/borer_attacks.dm deleted file mode 100644 index c2ebfafdde72c..0000000000000 --- a/code/modules/mob/living/simple_animal/borer/borer_attacks.dm +++ /dev/null @@ -1,90 +0,0 @@ -/mob/living/simple_animal/borer/UnarmedAttack(atom/A, proximity) - - if(!isliving(A) || a_intent != I_GRAB) - return ..() - - if(host || !can_use_borer_ability(requires_host_value = FALSE, check_last_special = FALSE)) - return - - var/mob/living/M = A - if(M.has_brain_worms()) - to_chat(src, SPAN_WARNING("You cannot take a host who already has a passenger!")) - return - - //TODO generalize borers to enter any mob. Until then, return early. - if(!ishuman(M)) - to_chat(src, SPAN_WARNING("This creature is not sufficiently intelligent to host you.")) - return - // end TODO - - var/mob/living/carbon/human/H = M - var/obj/item/organ/external/E = H.organs_by_name[BP_HEAD] - if(!E || E.is_stump()) - to_chat(src, SPAN_WARNING("\The [H] does not have a head!")) - return - if(!H.should_have_organ(BP_BRAIN)) - to_chat(src, SPAN_WARNING("\The [H] does not seem to have a brain cavity to enter.")) - return - if(H.check_head_coverage()) - to_chat(src, SPAN_WARNING("You cannot get through that host's protective gear.")) - return - - to_chat(M, SPAN_WARNING("Something slimy begins probing at the opening of your ear canal...")) - to_chat(src, SPAN_NOTICE("You slither up [M] and begin probing at their ear canal...")) - set_ability_cooldown(5 SECONDS) - - if(!do_after(src, 3 SECONDS, M, DO_DEFAULT | DO_USER_UNIQUE_ACT)) - return - - to_chat(src, SPAN_NOTICE("You wiggle into \the [M]'s ear.")) - if(M.stat == CONSCIOUS) - to_chat(M, SPAN_DANGER("Something wet, cold and slimy wiggles into your ear!")) - - host = M - host.status_flags |= PASSEMOTES - forceMove(host) - - for(var/obj/thing in hud_elements) - thing.alpha = 255 - thing.invisibility = 0 - - //Update their traitor status. - if(host.mind && !neutered) - GLOB.borers.add_antagonist_mind(host.mind, 1, GLOB.borers.faction_role_text, GLOB.borers.faction_welcome) - - if(istype(host, /mob/living/carbon/human)) - var/obj/item/organ/I = H.internal_organs_by_name[BP_BRAIN] - if(!I) // No brain organ, so the borer moves in and replaces it permanently. - replace_brain() - else if(E) // If they're in normally, implant removal can get them out. - E.implants += src - -/mob/living/simple_animal/borer/RangedAttack(atom/A, var/params) - . = ..() - if(!. && a_intent == I_DISARM && !host && isliving(A) && !neutered && can_use_borer_ability(requires_host_value = FALSE)) - var/mob/living/M = A - if(M.has_brain_worms()) - to_chat(src, SPAN_WARNING("You cannot dominate a host who already has a passenger!")) - else - visible_message(SPAN_DANGER("\The [src] extends a writhing pseudopod towards \the [M]...")) - - if(M.deflect_psionic_attack()) - return TRUE - - sound_to(src, sound('sound/effects/psi/power_evoke.ogg')) - sound_to(M, sound('sound/effects/psi/power_evoke.ogg')) - - if(do_psionics_check(5, src)) - to_chat(src, SPAN_DANGER("You try to focus on [M], but you cannot expel any psionic power!")) - return TRUE - - if(M.do_psionics_check(5, src)) - to_chat(src, SPAN_DANGER("You focus on [M], but your psionic assault skates across them like glass.")) - return TRUE - - to_chat(src, SPAN_DANGER("You focus on [M] and freeze their limbs with a wave of terrible psionic dread.")) - to_chat(M, SPAN_DANGER("You feel a creeping, horrible sense of dread come over you, freezing your limbs and setting your heart racing.")) - M.Weaken(10) - set_ability_cooldown(15 SECONDS) - - return TRUE diff --git a/code/modules/mob/living/simple_animal/borer/borer_captive.dm b/code/modules/mob/living/simple_animal/borer/borer_captive.dm deleted file mode 100644 index 377935f266395..0000000000000 --- a/code/modules/mob/living/simple_animal/borer/borer_captive.dm +++ /dev/null @@ -1,61 +0,0 @@ -/mob/living/captive_brain - name = "host brain" - real_name = "host brain" - universal_understand = TRUE - - meat_type = null - meat_amount = 0 - skin_material = null - skin_amount = 0 - bone_material = null - bone_amount = 0 - -/mob/living/captive_brain/say(var/message) - - if (src.client) - if(client.prefs.muted & MUTE_IC) - to_chat(src, SPAN_WARNING("You cannot speak in IC (muted).")) - return - - if(istype(src.loc,/mob/living/simple_animal/borer)) - - message = sanitize(message) - if (!message) - return - log_say("[key_name(src)] : [message]") - if (stat == 2) - return say_dead(message) - - var/mob/living/simple_animal/borer/B = src.loc - to_chat(src, "You whisper silently, \"[message]\"") - to_chat(B.host, "The captive mind of [src] whispers, \"[message]\"") - - for (var/mob/M in GLOB.player_list) - if (istype(M, /mob/new_player)) - continue - else if(M.stat == DEAD && M.get_preference_value(/datum/client_preference/ghost_ears) == GLOB.PREF_ALL_SPEECH) - to_chat(M, "The captive mind of [src] whispers, \"[message]\"") - -/mob/living/captive_brain/process_resist() - //Resisting control by an alien mind. - if(istype(src.loc,/mob/living/simple_animal/borer)) - var/mob/living/simple_animal/borer/B = src.loc - var/mob/living/captive_brain/H = src - - to_chat(H, "You begin doggedly resisting the parasite's control (this will take approximately sixty seconds).") - to_chat(B.host, "You feel the captive mind of [src] begin to resist your control.") - - spawn(rand(200,250)+B.host.getBrainLoss()) - if(!B || !B.controlling) return - - B.host.adjustBrainLoss(rand(0.1,0.5)) - to_chat(H, "With an immense exertion of will, you regain control of your body!") - to_chat(B.host, "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() - verbs -= /mob/living/carbon/proc/release_control - verbs -= /mob/living/carbon/proc/punish_host - verbs -= /mob/living/carbon/proc/spawn_larvae - - return - - ..() diff --git a/code/modules/mob/living/simple_animal/borer/borer_hud.dm b/code/modules/mob/living/simple_animal/borer/borer_hud.dm deleted file mode 100644 index 498341b011056..0000000000000 --- a/code/modules/mob/living/simple_animal/borer/borer_hud.dm +++ /dev/null @@ -1,142 +0,0 @@ -/mob/living/simple_animal/borer - var/list/hud_elements = list() - var/obj/screen/intent/hud_intent_selector - var/obj/screen/borer/toggle_host_control/hud_toggle_control - var/obj/screen/borer/inject_chemicals/hud_inject_chemicals - var/obj/screen/borer/leave_host/hud_leave_host - -/mob/living/simple_animal/borer/proc/reset_ui_callback() - if(world.time >= last_special) - for(var/obj/thing in hud_elements) - thing.color = null - -/obj/screen/borer - icon = 'icons/mob/borer_ui.dmi' - alpha = 0 - invisibility = INVISIBILITY_MAXIMUM - -/obj/screen/borer/Click(location, control, params) - if(!istype(usr, /mob/living/simple_animal/borer)) - return FALSE - if(usr.stat == DEAD) - return FALSE - var/mob/living/simple_animal/borer/worm = usr - if(!worm.host) - return FALSE - return TRUE - -/obj/screen/borer/toggle_host_control - name = "Seize Control" - icon_state = "seize_control" - screen_loc = "WEST-3,NORTH-1" - -/obj/screen/borer/toggle_host_control/Click(location, control, params) - . = ..() - if(!.) - return FALSE - - var/mob/living/simple_animal/borer/worm = usr - if(!worm.can_use_borer_ability()) - return - - if(worm.neutered) - to_chat(worm, SPAN_WARNING("You cannot do that.")) - return - - to_chat(worm, SPAN_NOTICE("You begin delicately adjusting your connection to the host brain...")) - if(!do_after(worm, 100+(worm.host.getBrainLoss()*5), do_flags = DO_DEFAULT | DO_USER_UNIQUE_ACT) || !worm.host || !worm.can_use_borer_ability()) - return - - to_chat(worm, SPAN_DANGER("You plunge your probosci deep into the cortex of the host brain, interfacing directly with their nervous system.")) - to_chat(worm.host, SPAN_DANGER("You feel a strange shifting sensation behind your eyes as an alien consciousness displaces yours.")) - worm.host.add_language(LANGUAGE_BORER_GLOBAL) - - // host -> brain - var/h2b_id = worm.host.computer_id - var/h2b_ip= worm.host.lastKnownIP - worm.host.computer_id = null - worm.host.lastKnownIP = null - qdel(worm.host_brain) - worm.host_brain = new(worm) - worm.host_brain.ckey = worm.host.ckey - worm.host_brain.SetName(worm.host.name) - if(!worm.host_brain.computer_id) - worm.host_brain.computer_id = h2b_id - if(!worm.host_brain.lastKnownIP) - worm.host_brain.lastKnownIP = h2b_ip - - // self -> host - var/s2h_id = worm.computer_id - var/s2h_ip= worm.lastKnownIP - worm.computer_id = null - worm.lastKnownIP = null - worm.host.ckey = worm.ckey - if(!worm.host.computer_id) - worm.host.computer_id = s2h_id - if(!worm.host.lastKnownIP) - worm.host.lastKnownIP = s2h_ip - worm.controlling = TRUE - worm.host.verbs += /mob/living/carbon/proc/release_control - worm.host.verbs += /mob/living/carbon/proc/punish_host - worm.host.verbs += /mob/living/carbon/proc/spawn_larvae - - return TRUE - -/obj/screen/borer/inject_chemicals - name = "Inject Chemicals" - icon_state = "inject_chemicals" - screen_loc = "WEST-2,NORTH-1" - -/obj/screen/borer/inject_chemicals/Click(location, control, params) - . = ..() - if(!.) - return FALSE - - var/mob/living/simple_animal/borer/worm = usr - if(!worm.can_use_borer_ability()) - return - - if(worm.chemicals < 50) - to_chat(worm, SPAN_WARNING("You don't have enough chemicals!")) - return - - var/chem = input("Select a chemical to secrete.", "Chemicals") as null|anything in worm.chemical_types - if(!chem || !worm.chemical_types[chem] || !worm || QDELETED(worm) || worm.chemicals < 50 || !worm.can_use_borer_ability()) - return - - to_chat(worm, SPAN_NOTICE("You squirt a measure of [chem] from your reservoirs into \the [worm.host]'s bloodstream.")) - worm.host.reagents.add_reagent(worm.chemical_types[chem], 10) - worm.chemicals -= 50 - return TRUE - -/obj/screen/borer/leave_host - name = "Leave Host" - icon_state = "leave_host" - screen_loc = "WEST-1,NORTH-1" - -/obj/screen/borer/leave_host/Click(location, control, params) - . = ..() - if(!.) - return FALSE - - var/mob/living/simple_animal/borer/worm = usr - if(!worm.can_use_borer_ability()) - return - - to_chat(worm, SPAN_NOTICE("You begin disconnecting from \the [worm.host]'s synapses and prodding at their internal ear canal.")) - if(worm.host.stat == CONSCIOUS) - to_chat(worm.host, SPAN_WARNING("An odd, uncomfortable pressure begins to build inside your skull, behind your ear...")) - - if(!do_after(worm, 10 SECONDS, do_flags = DO_DEFAULT | DO_USER_UNIQUE_ACT) || !worm.can_use_borer_ability()) - return - - if(worm.host) - to_chat(worm, SPAN_WARNING("You wiggle out of [worm.host]'s ear and plop to the ground.")) - if(worm.host.stat != DEAD) - to_chat(worm.host, SPAN_DANGER("Something slimy wiggles out of your ear and plops to the ground!")) - if(!worm.neutered) - to_chat(worm.host, SPAN_DANGER("As though waking from a dream, you shake off the insidious mind control of the brain worm. Your thoughts are your own again.")) - worm.detatch() - worm.leave_host() - - return TRUE diff --git a/code/modules/mob/living/simple_animal/borer/borer_powers.dm b/code/modules/mob/living/simple_animal/borer/borer_powers.dm deleted file mode 100644 index a6d55eeac3c79..0000000000000 --- a/code/modules/mob/living/simple_animal/borer/borer_powers.dm +++ /dev/null @@ -1,93 +0,0 @@ -/mob/living/simple_animal/borer/proc/can_use_borer_ability(var/silent = FALSE, var/requires_host_value = TRUE, var/usable_while_docile = FALSE, var/check_last_special = TRUE) - - if(controlling) - return FALSE - - if(requires_host_value) - if(!host) - if(!silent) - to_chat(src, SPAN_WARNING("You must be within a host body to use this action.")) - return FALSE - else - if(host) - if(!silent) - to_chat(src, SPAN_WARNING("You cannot be within a host body when using this action.")) - return FALSE - - if(stat) - if(!silent) - to_chat(src, SPAN_WARNING("You cannot perform this action in your current state.")) - return FALSE - if(docile && !usable_while_docile) - if(!silent) - to_chat(src, SPAN_NOTICE("You are feeling far too docile to perform this action.")) - return FALSE - if(check_last_special && world.time < last_special) - if(!silent) - to_chat(src, SPAN_NOTICE("You cannot perform this action so soon after the last.")) - return FALSE - return TRUE - -// BRAIN WORM ZOMBIES AAAAH. -/mob/living/simple_animal/borer/proc/replace_brain() - - var/mob/living/carbon/human/H = host - - if(!istype(host)) - to_chat(src, SPAN_WARNING("This host does not have a suitable brain.")) - return - - to_chat(src, SPAN_DANGER("You settle into the empty brainpan and begin to expand, fusing inextricably with the dead flesh of [H].")) - - H.add_language(LANGUAGE_BORER_GLOBAL) - - if(host.stat == DEAD) - H.verbs |= /mob/living/carbon/human/proc/jumpstart - - H.verbs |= /mob/living/carbon/human/proc/psychic_whisper - if(!neutered) - H.verbs |= /mob/living/carbon/proc/spawn_larvae - - if(H.client) - H.ghostize(0) - - if(src.mind) - src.mind.special_role = "Borer Husk" - src.mind.transfer_to(host) - - H.ChangeToHusk() - - var/obj/item/organ/internal/borer/B = new(H) - if(islist(chemical_types)) - B.chemical_types = chemical_types.Copy() - H.internal_organs_by_name[BP_BRAIN] = B - H.internal_organs |= B - - var/obj/item/organ/external/affecting = H.get_organ(BP_HEAD) - affecting.implants -= src - - var/s2h_id = src.computer_id - var/s2h_ip= src.lastKnownIP - src.computer_id = null - src.lastKnownIP = null - if(!H.computer_id) - H.computer_id = s2h_id - if(!H.lastKnownIP) - H.lastKnownIP = s2h_ip - -/mob/living/carbon/human/proc/jumpstart() - set category = "Abilities" - set name = "Revive Host" - set desc = "Send a jolt of electricity through your host, reviving them." - - if(stat != 2) - to_chat(usr, SPAN_WARNING("Your host is already alive.")) - return - - verbs -= /mob/living/carbon/human/proc/jumpstart - visible_message(SPAN_DANGER("With a hideous, rattling moan, [src] shudders back to life!")) - - rejuvenate() - restore_blood() - fixblood() - UpdateLyingBuckledAndVerbStatus() diff --git a/code/modules/mob/living/simple_animal/borer/say.dm b/code/modules/mob/living/simple_animal/borer/say.dm deleted file mode 100644 index 9b0e6c2d645b1..0000000000000 --- a/code/modules/mob/living/simple_animal/borer/say.dm +++ /dev/null @@ -1,40 +0,0 @@ -/mob/living/simple_animal/borer/say(var/message) - - message = sanitize(message) - message = capitalize(message) - - if(!message) - return - - if (stat == 2) - return say_dead(message) - - if (stat) - return - - if (src.client) - if(client.prefs.muted & MUTE_IC) - to_chat(src, "You cannot speak in IC (muted).") - return - - if (copytext_char(message, 1, 2) == get_prefix_key(/decl/prefix/custom_emote)) - return emote(copytext_char(message, 2)) - - var/datum/language/L = parse_language(message) - if(L && L.flags & HIVEMIND) - L.broadcast(src,trim(copytext_char(message,3)),src.truename) - return - - if(!host) - //TODO: have this pick a random mob within 3 tiles to speak for the borer. - to_chat(src, "You have no host to speak to.") - return //No host, no audible speech. - - to_chat(src, "You drop words into [host]'s mind: \"[message]\"") - to_chat(host, "Your own thoughts speak: \"[message]\"") - - for (var/mob/M in GLOB.player_list) - if (istype(M, /mob/new_player)) - continue - else if(M.stat == DEAD && M.get_preference_value(/datum/client_preference/ghost_ears) == GLOB.PREF_ALL_SPEECH) - to_chat(M, "[src.truename] whispers to [host], \"[message]\"") diff --git a/code/modules/mob/living/simple_animal/combat.dm b/code/modules/mob/living/simple_animal/combat.dm deleted file mode 100644 index 1fba4db321419..0000000000000 --- a/code/modules/mob/living/simple_animal/combat.dm +++ /dev/null @@ -1,222 +0,0 @@ -// Does a melee attack. -/mob/living/simple_animal/proc/attack_target(atom/A) - set waitfor = FALSE // For attack animations. Don't want the AI processor to get held up. - - if(!A.Adjacent(src)) - return ATTACK_FAILED - var/turf/their_T = get_turf(A) - - face_atom(A) - - if(melee_attack_delay) - melee_pre_animation(A) - . = ATTACK_SUCCESSFUL //Shoving this in here as a 'best guess' since this proc is about to sleep and return and we won't be able to know the real value - handle_attack_delay(A, melee_attack_delay) // This will sleep this proc for a bit, which is why waitfor is false. - - // Cooldown testing is done at click code (for players) and interface code (for AI). - setClickCooldown(get_attack_speed(get_natural_weapon())) - - // Returns a value, but will be lost if - . = do_attack(A, their_T) - - if(melee_attack_delay) - melee_post_animation(A) - -// This does the actual attack. -// This is a seperate proc for the purposes of attack animations. -// A is the thing getting attacked, T is the turf A is/was on when attack_target was called. -// Damage is handled by the mobs natural weapon. -/mob/living/simple_animal/proc/do_attack(atom/A, turf/T) - face_atom(A) - var/missed = FALSE - if (get_dir(src, A) == facing_dir && get_dist(src, A) <= 1) // Turfs don't contain themselves so checking contents is pointless if we're targeting a turf. - missed = TRUE - else if (!T.AdjacentQuick(src)) - missed = TRUE - - if(missed) // Most likely we have a slow attack and they dodged it or we somehow got moved. - playsound(src, 'sound/weapons/punchmiss.ogg', 75, 1) - visible_message(SPAN_WARNING("\The [src] misses their attack.")) - return FALSE - - var/obj/item/natural_weapon/weapon = get_natural_weapon() - - if (weapon?.resolve_attackby(A, src)) - apply_melee_effects(A) - - return TRUE - -// Override for special effects after a successful attack, like injecting poison or stunning the target. -/mob/living/simple_animal/proc/apply_melee_effects(atom/A) - return - -// Override to modify the amount of damage the mob does conditionally. -// This must return the amount of outgoing damage. -// Note that this is done before mob modifiers scale the damage. -/mob/living/simple_animal/proc/apply_bonus_melee_damage(atom/A, damage_amount) - return damage_amount - -//The actual top-level ranged attack proc -/mob/living/simple_animal/proc/shoot_target(atom/A) - set waitfor = FALSE - setClickCooldown(get_attack_speed()) - - face_atom(A) - - if(ranged_attack_delay) - ranged_pre_animation(A) - handle_attack_delay(A, ranged_attack_delay) // This will sleep this proc for a bit, which is why waitfor is false. - - if(needs_reload) - if(reload_count >= reload_max) - try_reload() - return FALSE - - visible_message("\The [src] fires at \the [A]!") - shoot(A) - if(casingtype) - new casingtype(loc) - - if(ranged_attack_delay) - ranged_post_animation(A) - - return TRUE - - -// Shoot a bullet at something. -/mob/living/simple_animal/proc/shoot(atom/A) - if(A == get_turf(src)) - return - - face_atom(A) - - var/obj/item/projectile/P = new projectiletype(src.loc) - if(!P) - return - - // If the projectile has its own sound, use it. - // Otherwise default to the mob's firing sound. - playsound(src, P.fire_sound ? P.fire_sound : projectilesound, 80, 1) - - // For some reason there isn't an argument for accuracy, so access the projectile directly instead. - // Also, placing dispersion here instead of in forced_spread will randomize the chosen angle between dispersion and -dispersion in fire() instead of having to do that here. - // P.accuracy += calculate_accuracy() - // P.dispersion += calculate_dispersion() - - P.firer = src - P.launch(target = A) - if(needs_reload) - reload_count++ - -/mob/living/simple_animal/proc/try_reload() - set waitfor = FALSE - set_AI_busy(TRUE) - - if(do_after(src, reload_time, do_flags = DO_DEFAULT | DO_USER_UNIQUE_ACT)) - if(reload_sound) - playsound(src, reload_sound, 70, 1) - reload_count = 0 - . = TRUE - else - . = FALSE - set_AI_busy(FALSE) - -/mob/living/simple_animal/proc/calculate_dispersion() - . = projectile_dispersion // Start with the basic var. - - // Make sure we don't go under zero dispersion. - . = max(., 0) - -/mob/living/simple_animal/proc/calculate_accuracy() - . = projectile_accuracy // Start with the basic var. - -// Can we currently do a special attack? -/mob/living/simple_animal/proc/can_special_attack(atom/A) - // Validity check. - if(!istype(A)) - return FALSE - - // Ability check. - if(isnull(special_attack_min_range) || isnull(special_attack_max_range)) - return FALSE - - // Distance check. - var/distance = get_dist(src, A) - if(distance < special_attack_min_range || distance > special_attack_max_range) - return FALSE - - // Cooldown check. - if(!isnull(special_attack_cooldown) && last_special_attack + special_attack_cooldown > world.time) - return FALSE - - // Charge check. - if(!isnull(special_attack_charges) && special_attack_charges <= 0) - return FALSE - - return TRUE - -// Should we do one? Used to make the AI not waste their special attacks. Only checked for AI. Players are free to screw up on their own. -/mob/living/simple_animal/proc/should_special_attack(atom/A) - return TRUE - -// Special attacks, like grenades or blinding spit or whatever. -// Don't override this, override do_special_attack() for your blinding spit/etc. -/mob/living/simple_animal/proc/special_attack_target(atom/A) - set waitfor = FALSE - face_atom(A) - - if(special_attack_delay) - special_pre_animation(A) - handle_attack_delay(A, special_attack_delay) // This will sleep this proc for a bit, which is why waitfor is false. - - last_special_attack = world.time - if(do_special_attack(A)) - if(special_attack_charges) - special_attack_charges -= 1 - . = TRUE - else - . = FALSE - - if(special_attack_delay) - special_post_animation(A) - -// Override this for the actual special attack. -/mob/living/simple_animal/proc/do_special_attack(atom/A) - return FALSE - -// Sleeps the proc that called it for the correct amount of time. -// Also makes sure the AI doesn't do anything stupid in the middle of the delay. -/mob/living/simple_animal/proc/handle_attack_delay(atom/A, delay_amount) - set_AI_busy(TRUE) - - // Click delay modifiers also affect telegraphing time. - // This means berserked enemies will leave less time to dodge. - var/true_attack_delay = delay_amount - - setClickCooldown(true_attack_delay) // Insurance against a really long attack being longer than default click delay. - - sleep(true_attack_delay) - - set_AI_busy(FALSE) - - -// Override these four for special custom animations (like the GOLEM). -/mob/living/simple_animal/proc/melee_pre_animation(atom/A) - do_windup_animation(A, melee_attack_delay) - -/mob/living/simple_animal/proc/melee_post_animation(atom/A) - -/mob/living/simple_animal/proc/ranged_pre_animation(atom/A) - do_windup_animation(A, ranged_attack_delay) // Semi-placeholder. - -/mob/living/simple_animal/proc/ranged_post_animation(atom/A) - -/mob/living/simple_animal/proc/special_pre_animation(atom/A) - do_windup_animation(A, special_attack_delay) // Semi-placeholder. - -/mob/living/simple_animal/proc/special_post_animation(atom/A) - -/mob/living/simple_animal/proc/get_natural_weapon() - if(ispath(natural_weapon)) - natural_weapon = new natural_weapon(src) - return natural_weapon diff --git a/code/modules/mob/living/simple_animal/constructs/constructs.dm b/code/modules/mob/living/simple_animal/constructs/constructs.dm deleted file mode 100644 index 3c03d2837c3c8..0000000000000 --- a/code/modules/mob/living/simple_animal/constructs/constructs.dm +++ /dev/null @@ -1,371 +0,0 @@ -/mob/living/simple_animal/construct - name = "Construct" - real_name = "Construct" - desc = "" - speak_emote = list("hisses") - response_help = "thinks better of touching" - response_disarm = "flailed at" - response_harm = "punched" - icon_dead = "shade_dead" - speed = -1 - a_intent = I_HURT - status_flags = CANPUSH - universal_speak = FALSE - universal_understand = TRUE - min_gas = null - max_gas = null - minbodytemp = 0 - show_stat_health = 1 - faction = "cult" - supernatural = 1 - see_in_dark = 8 - see_invisible = SEE_INVISIBLE_NOLIGHTING - mob_swap_flags = HUMAN|SIMPLE_ANIMAL|SLIME|MONKEY - mob_push_flags = ALLMOBS - bleed_colour = "#331111" - - meat_type = null - meat_amount = 0 - bone_material = null - bone_amount = 0 - skin_material = null - skin_amount = 0 - - var/nullblock = 0 - var/list/construct_spells = list() - - ai_holder = /datum/ai_holder/simple_animal/melee - say_list = /datum/say_list/construct - -/mob/living/simple_animal/construct/cultify() - return - -/mob/living/simple_animal/construct/New() - ..() - name = text("[initial(name)] ([random_id(/mob/living/simple_animal/construct, 1000, 9999)])") - real_name = name - add_language(LANGUAGE_CULT) - add_language(LANGUAGE_CULT_GLOBAL) - for(var/spell in construct_spells) - add_spell(new spell, "const_spell_ready") - update_icon() - -/mob/living/simple_animal/construct/death(gibbed, deathmessage, show_dead_message) - new /obj/item/ectoplasm (src.loc) - ..(null,"collapses in a shattered heap.","The bonds tying you to this mortal plane have been severed.") - ghostize() - qdel(src) - -/mob/living/simple_animal/construct/on_update_icon() - overlays.Cut() - ..() - add_glow() - -/mob/living/simple_animal/construct/examine(mob/user) - . = ..() - if (health < maxHealth) - if (health >= maxHealth / 2) - to_chat(user, SPAN_WARNING("It looks slightly dented.")) - else - to_chat(user, SPAN_WARNING(SPAN_BOLD("It looks severely dented!"))) - -/obj/item/ectoplasm - name = "ectoplasm" - desc = "Spooky." - gender = PLURAL - icon = 'icons/obj/wizard.dmi' - icon_state = "ectoplasm" - -/////////////////Juggernaut/////////////// - - - -/mob/living/simple_animal/construct/armoured - name = "Juggernaut" - real_name = "Juggernaut" - desc = "A possessed suit of armour driven by the will of the restless dead." - icon = 'icons/mob/mob.dmi' - icon_state = "behemoth" - icon_living = "behemoth" - maxHealth = 250 - health = 250 - speak_emote = list("rumbles") - response_harm = "harmlessly punches" - harm_intent_damage = 0 - natural_weapon = /obj/item/natural_weapon/juggernaut - mob_size = MOB_LARGE - speed = 3 - environment_smash = 2 - status_flags = 0 - resistance = 10 - construct_spells = list(/spell/aoe_turf/conjure/forcewall/lesser) - can_escape = TRUE - -/obj/item/natural_weapon/juggernaut - name = "armored gauntlet" - gender = NEUTER - attack_verb = list("smashed", "demolished") - hitsound = 'sound/weapons/heavysmash.ogg' - force = 30 - -/mob/living/simple_animal/construct/armoured/Life() - weakened = 0 - if ((. = ..())) - return - -/mob/living/simple_animal/construct/armoured/bullet_act(var/obj/item/projectile/P) - if (status_flags & GODMODE) - return PROJECTILE_FORCE_MISS - if(istype(P, /obj/item/projectile/energy) || istype(P, /obj/item/projectile/beam)) - var/reflectchance = 80 - round(P.damage/3) - if(prob(reflectchance)) - adjustBruteLoss(P.damage * 0.5) - visible_message("The [P.name] gets reflected by [src]'s shell!", \ - "The [P.name] gets reflected by [src]'s shell!") - - // Find a turf near or on the original location to bounce to - if(P.starting) - var/new_x = P.starting.x + pick(0, 0, -1, 1, -2, 2, -2, 2, -2, 2, -3, 3, -3, 3) - var/new_y = P.starting.y + pick(0, 0, -1, 1, -2, 2, -2, 2, -2, 2, -3, 3, -3, 3) - var/turf/curloc = get_turf(src) - - // redirect the projectile - P.redirect(new_x, new_y, curloc, src) - - return -1 // complete projectile permutation - - return (..(P)) - - - -////////////////////////Wraith///////////////////////////////////////////// - - - -/mob/living/simple_animal/construct/wraith - name = "Wraith" - real_name = "Wraith" - desc = "A wicked contraption with a bladed shell, piloted by a bound spirit." - icon = 'icons/mob/mob.dmi' - icon_state = "floating" - icon_living = "floating" - icon_dead = "floating_dead" - maxHealth = 75 - health = 75 - natural_weapon = /obj/item/natural_weapon/wraith - speed = -1 - environment_smash = 1 - see_in_dark = 7 - construct_spells = list(/spell/targeted/ethereal_jaunt/shift) - -/mob/living/simple_animal/construct/wraith/can_fall(anchor_bypass, turf/location_override) - return FALSE - -/mob/living/simple_animal/construct/wraith/can_overcome_gravity() - return TRUE - -/obj/item/natural_weapon/wraith - name = "wicked blade" - gender = NEUTER - attack_verb = list("slashed", "tore into") - hitsound = 'sound/weapons/rapidslice.ogg' - edge = TRUE - force = 25 - -/////////////////////////////Artificer///////////////////////// - - - -/mob/living/simple_animal/construct/builder - name = "Artificer" - real_name = "Artificer" - desc = "A bulbous construct dedicated to building and maintaining The Cult of Nar-Sie's armies." - icon = 'icons/mob/mob.dmi' - icon_state = "artificer" - icon_living = "artificer" - maxHealth = 50 - health = 50 - response_harm = "viciously beaten" - harm_intent_damage = 5 - natural_weapon = /obj/item/natural_weapon/cult_builder - speed = 0 - environment_smash = 1 - construct_spells = list(/spell/aoe_turf/conjure/construct/lesser, - /spell/aoe_turf/conjure/wall, - /spell/aoe_turf/conjure/floor, - /spell/aoe_turf/conjure/soulstone, - /spell/aoe_turf/conjure/pylon - ) - -/obj/item/natural_weapon/cult_builder - name = "heavy arms" - attack_verb = list("rammed") - force = 5 - -/obj/item/natural_weapon/cult_builder/attack(mob/living/M, mob/living/user) - if(istype(M, /mob/living/simple_animal/construct)) - if(M.health < M.maxHealth) - M.adjustBruteLoss(-5) - user.visible_message(SPAN_NOTICE("\The [user] mends some of \the [M]'s wounds.")) - else - to_chat(user, SPAN_NOTICE("\The [M] is undamaged.")) - return - return ..() - -/////////////////////////////Behemoth///////////////////////// - - -/mob/living/simple_animal/construct/behemoth - name = "Behemoth" - real_name = "Behemoth" - desc = "The pinnacle of occult technology, Behemoths are the ultimate weapon in the Cult of Nar-Sie's arsenal." - icon = 'icons/mob/mob.dmi' - icon_state = "behemoth" - icon_living = "behemoth" - maxHealth = 750 - health = 750 - speak_emote = list("rumbles") - response_harm = "harmlessly punched" - harm_intent_damage = 0 - natural_weapon = /obj/item/natural_weapon/juggernaut/behemoth - speed = 5 - environment_smash = 2 - - resistance = 10 - var/energy = 0 - var/max_energy = 1000 - construct_spells = list(/spell/aoe_turf/conjure/forcewall/lesser) - can_escape = TRUE - -/obj/item/natural_weapon/juggernaut/behemoth - force = 50 - -////////////////////////Harvester//////////////////////////////// - - - -/mob/living/simple_animal/construct/harvester - name = "Harvester" - real_name = "Harvester" - desc = "The promised reward of the livings who follow Nar-Sie. Obtained by offering their bodies to the geometer of blood." - icon = 'icons/mob/mob.dmi' - icon_state = "harvester" - icon_living = "harvester" - icon_dead = "harvester_dead" - maxHealth = 150 - health = 150 - natural_weapon = /obj/item/natural_weapon/harvester - speed = -1 - environment_smash = 1 - see_in_dark = 7 - - construct_spells = list( - /spell/targeted/harvest - ) - -/obj/item/natural_weapon/harvester - name = "malicious spike" - gender = NEUTER - attack_verb = list("violently stabbed", "ran through") - hitsound = 'sound/weapons/pierce.ogg' - sharp = TRUE - force = 25 - -////////////////Glow////////////////// -/mob/living/simple_animal/construct/proc/add_glow() - var/image/eye_glow = image(icon,"glow-[icon_state]") - eye_glow.plane = EFFECTS_ABOVE_LIGHTING_PLANE - eye_glow.layer = EYE_GLOW_LAYER - overlays += eye_glow - set_light(-2, 0.1, 1.5, l_color = "#ffffff") - -////////////////HUD////////////////////// - -/mob/living/simple_animal/construct/Life() - . = ..() - if(.) - if(fire) - if(fire_alert) fire.icon_state = "fire1" - else fire.icon_state = "fire0" - if(pullin) - if(pulling) pullin.icon_state = "pull1" - else pullin.icon_state = "pull0" - - if(purged) - if(purge > 0) purged.icon_state = "purge1" - else purged.icon_state = "purge0" - - silence_spells(purge) - -/mob/living/simple_animal/construct/armoured/Life() - . = ..() - if(healths) - switch(health) - if(250 to INFINITY) healths.icon_state = "juggernaut_health0" - if(208 to 249) healths.icon_state = "juggernaut_health1" - if(167 to 207) healths.icon_state = "juggernaut_health2" - if(125 to 166) healths.icon_state = "juggernaut_health3" - if(84 to 124) healths.icon_state = "juggernaut_health4" - if(42 to 83) healths.icon_state = "juggernaut_health5" - if(1 to 41) healths.icon_state = "juggernaut_health6" - else healths.icon_state = "juggernaut_health7" - - -/mob/living/simple_animal/construct/behemoth/Life() - . = ..() - if(healths) - switch(health) - if(750 to INFINITY) healths.icon_state = "juggernaut_health0" - if(625 to 749) healths.icon_state = "juggernaut_health1" - if(500 to 624) healths.icon_state = "juggernaut_health2" - if(375 to 499) healths.icon_state = "juggernaut_health3" - if(250 to 374) healths.icon_state = "juggernaut_health4" - if(125 to 249) healths.icon_state = "juggernaut_health5" - if(1 to 124) healths.icon_state = "juggernaut_health6" - else healths.icon_state = "juggernaut_health7" - -/mob/living/simple_animal/construct/builder/Life() - . = ..() - if(healths) - switch(health) - if(50 to INFINITY) healths.icon_state = "artificer_health0" - if(42 to 49) healths.icon_state = "artificer_health1" - if(34 to 41) healths.icon_state = "artificer_health2" - if(26 to 33) healths.icon_state = "artificer_health3" - if(18 to 25) healths.icon_state = "artificer_health4" - if(10 to 17) healths.icon_state = "artificer_health5" - if(1 to 9) healths.icon_state = "artificer_health6" - else healths.icon_state = "artificer_health7" - - - -/mob/living/simple_animal/construct/wraith/Life() - . = ..() - if(healths) - switch(health) - if(75 to INFINITY) healths.icon_state = "wraith_health0" - if(62 to 74) healths.icon_state = "wraith_health1" - if(50 to 61) healths.icon_state = "wraith_health2" - if(37 to 49) healths.icon_state = "wraith_health3" - if(25 to 36) healths.icon_state = "wraith_health4" - if(12 to 24) healths.icon_state = "wraith_health5" - if(1 to 11) healths.icon_state = "wraith_health6" - else healths.icon_state = "wraith_health7" - - -/mob/living/simple_animal/construct/harvester/Life() - . = ..() - if(healths) - switch(health) - if(150 to INFINITY) healths.icon_state = "harvester_health0" - if(125 to 149) healths.icon_state = "harvester_health1" - if(100 to 124) healths.icon_state = "harvester_health2" - if(75 to 99) healths.icon_state = "harvester_health3" - if(50 to 74) healths.icon_state = "harvester_health4" - if(25 to 49) healths.icon_state = "harvester_health5" - if(1 to 24) healths.icon_state = "harvester_health6" - else healths.icon_state = "harvester_health7" - -/datum/say_list/construct - speak = list("Hsssssssszsht.", "Hsssssssss...", "Tcshsssssssszht!") - emote_hear = list("wails","screeches") diff --git a/code/modules/mob/living/simple_animal/constructs/soulstone.dm b/code/modules/mob/living/simple_animal/constructs/soulstone.dm deleted file mode 100644 index 35536d51fa31c..0000000000000 --- a/code/modules/mob/living/simple_animal/constructs/soulstone.dm +++ /dev/null @@ -1,166 +0,0 @@ -#define SOULSTONE_CRACKED -1 -#define SOULSTONE_EMPTY 0 -#define SOULSTONE_ESSENCE 1 - -/obj/item/device/soulstone - name = "soul stone shard" - icon = 'icons/obj/wizard.dmi' - icon_state = "soulstone" - item_state = "electronic" - desc = "A strange, ridged chunk of some glassy red material. Achingly cold to the touch." - w_class = ITEM_SIZE_SMALL - slot_flags = SLOT_BELT - origin_tech = list(TECH_BLUESPACE = 4, TECH_MATERIAL = 4) - - var/full = SOULSTONE_EMPTY - /// String. One of `SOULSTONE_OWNER_*`. Defines who or what 'owns' the soulstone, which affects the soul within and any created constructs. - var/owner_flag = SOULSTONE_OWNER_CULT - var/mob/living/simple_animal/shade = null - var/smashing = 0 - var/soulstatus = null - -/obj/item/device/soulstone/Initialize(var/mapload) - shade = new /mob/living/simple_animal/shade(src) - . = ..(mapload) - -/obj/item/device/soulstone/disrupts_psionics() - return (full == SOULSTONE_ESSENCE) ? src : FALSE - -/obj/item/device/soulstone/proc/shatter() - playsound(loc, "shatter", 70, 1) - for(var/i=1 to rand(2,5)) - new /obj/item/material/shard(get_turf(src), MATERIAL_NULLGLASS) - qdel(src) - -/obj/item/device/soulstone/withstand_psi_stress(var/stress, var/atom/source) - . = ..(stress, source) - if(. > 0) - . = max(0, . - rand(2,5)) - shatter() - -/obj/item/device/soulstone/full - full = SOULSTONE_ESSENCE - icon_state = "soulstone2" - -/obj/item/device/soulstone/Destroy() - QDEL_NULL(shade) - return ..() - -/obj/item/device/soulstone/examine(mob/user) - . = ..() - if(full == SOULSTONE_EMPTY) - to_chat(user, "The shard still flickers with a fraction of the full artifact's power, but it needs to be filled with the essence of someone's life before it can be used.") - if(full == SOULSTONE_ESSENCE) - to_chat(user,"The shard has gone transparent, a seeming window into a dimension of unspeakable horror.") - if(full == SOULSTONE_CRACKED) - to_chat(user, "This one is cracked and useless.") - -/obj/item/device/soulstone/on_update_icon() - if(full == SOULSTONE_EMPTY) - icon_state = "soulstone" - if(full == SOULSTONE_ESSENCE) - icon_state = "soulstone2" //TODO: A spookier sprite. Also unique sprites. - if(full == SOULSTONE_CRACKED) - icon_state = "soulstone"//TODO: cracked sprite - SetName("cracked soulstone") - -/obj/item/device/soulstone/attackby(var/obj/item/I, var/mob/user) - ..() - if (owner_flag != SOULSTONE_OWNER_PURE && istype(I, /obj/item/nullrod)) - to_chat(user, "You cleanse \the [src] of taint, purging its shackles to its creator..") - owner_flag = SOULSTONE_OWNER_PURE - return - if(I.force >= 5) - if(full != SOULSTONE_CRACKED) - user.visible_message("\The [user] hits \the [src] with \the [I], and it breaks.[shade.client ? " You hear a terrible scream!" : ""]", "You hit \the [src] with \the [I], and it cracks.[shade.client ? " You hear a terrible scream!" : ""]", shade.client ? "You hear a scream." : null) - playsound(loc, 'sound/effects/Glasshit.ogg', 75) - set_full(SOULSTONE_CRACKED) - else - user.visible_message("\The [user] shatters \the [src] with \the [I]!") - shatter() - -/obj/item/device/soulstone/attack(var/mob/living/simple_animal/M, var/mob/user) - if(M == shade) - to_chat(user, "You recapture \the [M].") - M.forceMove(src) - return - if(full == SOULSTONE_ESSENCE) - to_chat(user, "\The [src] is already full.") - return - if(M.stat != DEAD && !M.is_asystole()) - to_chat(user, "Kill or maim the victim first.") - return - for(var/obj/item/W in M) - M.drop_from_inventory(W) - M.dust() - set_full(SOULSTONE_ESSENCE) - -/obj/item/device/soulstone/attack_self(var/mob/user) - if(full != SOULSTONE_ESSENCE) // No essence - no shade - to_chat(user, "This [src] has no life essence.") - return - - if(!shade.key) // No key = hasn't been used - to_chat(user, "You cut your finger and let the blood drip on \the [src].") - user.remove_blood_simple(1) - var/datum/ghosttrap/cult/shade/S = get_ghost_trap("soul stone") - S.request_player(shade, "The soul stone shade summon ritual has been performed. ") - else if(!shade.client) // Has a key but no client - shade logged out - to_chat(user, "\The [shade] in \the [src] is dormant.") - return - else if(shade.loc == src) - var/choice = alert("Would you like to invoke the spirit within?",,"Yes","No") - if(choice == "Yes") - shade.dropInto(loc) - to_chat(user, "You summon \the [shade].") - if(choice == "No") - return - -/obj/item/device/soulstone/proc/set_full(var/f) - full = f - update_icon() - -/obj/structure/constructshell - name = "empty shell" - icon = 'icons/obj/wizard.dmi' - icon_state = "construct" - desc = "A wicked machine used by those skilled in magical arts. It is inactive." - -/obj/structure/constructshell/cult - icon_state = "construct-cult" - desc = "This eerie contraption looks like it would come alive if supplied with a missing ingredient." - -/obj/structure/constructshell/attackby(var/obj/item/I, var/mob/user) - if(istype(I, /obj/item/device/soulstone)) - var/obj/item/device/soulstone/S = I - if(!S.shade.client) - to_chat(user, "\The [I] has essence, but no soul. Activate it in your hand to find a soul for it first.") - return - if(S.shade.loc != S) - to_chat(user, "Recapture the shade back into \the [I] first.") - return - var/construct = alert(user, "Please choose which type of construct you wish to create.",,"Artificer", "Wraith", "Juggernaut") - var/ctype - switch(construct) - if("Artificer") - ctype = /mob/living/simple_animal/construct/builder - if("Wraith") - ctype = /mob/living/simple_animal/construct/wraith - if("Juggernaut") - ctype = /mob/living/simple_animal/construct/armoured - var/mob/living/simple_animal/construct/C = new ctype(get_turf(src)) - C.key = S.shade.key - //C.cancel_camera() - transfer_languages(user, C, RESTRICTED | HIVEMIND) - if (S.owner_flag == SOULSTONE_OWNER_CULT) - GLOB.cult.add_antagonist(C.mind) - else - // Only cult constructs get cult languages - C.remove_language(LANGUAGE_CULT) - C.remove_language(LANGUAGE_CULT_GLOBAL) - qdel(S) - qdel(src) - -#undef SOULSTONE_CRACKED -#undef SOULSTONE_EMPTY -#undef SOULSTONE_ESSENCE diff --git a/code/modules/mob/living/simple_animal/crow/crow.dm b/code/modules/mob/living/simple_animal/crow/crow.dm deleted file mode 100644 index 3d5ca509b50de..0000000000000 --- a/code/modules/mob/living/simple_animal/crow/crow.dm +++ /dev/null @@ -1,162 +0,0 @@ -/obj/item/storage/messenger - name = "messenger bag" - desc = "A small green-grey messenger bag with a blue Corvid Couriers logo on it." - icon = 'icons/mob/simple_animal/crow.dmi' - icon_state = "messenger_bag" - storage_slots = 7 - w_class = ITEM_SIZE_SMALL - max_w_class = ITEM_SIZE_SMALL - -/mob/living/simple_animal/crow - name = "crow" - desc = "A large crow. Caw caw." - icon = 'icons/mob/simple_animal/crow.dmi' - icon_state = "crow" - icon_living = "crow" - icon_dead = "crow_dead" - pass_flags = PASS_FLAG_TABLE - mob_size = MOB_SMALL - density = FALSE - - speak_emote = list("caws") - - natural_weapon = /obj/item/natural_weapon/crow_claws - - response_help = "pets" - response_disarm = "gently moves aside" - response_harm = "swats" - universal_speak = TRUE - pass_flags = PASS_FLAG_TABLE - - var/obj/item/storage/messenger/messenger_bag - var/obj/item/card/id/access_card - - say_list_type = /datum/say_list/crow - -/obj/item/natural_weapon/crow_claws - name = "claws" - gender = PLURAL - attack_verb = list("clawed") - sharp = TRUE - force = 7 - -/mob/living/simple_animal/crow/New() - ..() - messenger_bag = new(src) - update_icon() - -/mob/living/simple_animal/crow/GetIdCard() - return access_card - -/mob/living/simple_animal/crow/show_inv(var/mob/user) - if(user.incapacitated()) - return - var/list/dat = list() - if(access_card) - dat += "ID: [access_card] (Remove)" - else - dat += "ID: Nothing" - if(messenger_bag) - dat += "Back: [messenger_bag] (Remove)" - else - dat += "Back: Nothing" - var/datum/browser/popup = new(user, "[name]", "Inventory of \the [name]", 350, 150, src) - popup.set_content(jointext(dat, "
              ")) - popup.open() - -/mob/living/simple_animal/crow/DefaultTopicState() - return GLOB.physical_state - -/mob/living/simple_animal/crow/OnTopic(mob/user, href_list) - if(!ishuman(user)) - return ..() - if(href_list["remove_inv"]) - var/obj/item/removed - switch(href_list["remove_inv"]) - if("access cuff") - removed = access_card - access_card = null - if("back") - removed = messenger_bag - messenger_bag = null - if(removed) - removed.dropInto(loc) - usr.put_in_hands(removed) - visible_message("\The [usr] removes \the [removed] from \the [src]'s [href_list["remove_inv"]].") - show_inv(usr) - update_icon() - else - to_chat(user, "There is nothing to remove from \the [src]'s [href_list["remove_inv"]].") - return TOPIC_HANDLED - if(href_list["add_inv"]) - var/obj/item/equipping = user.get_active_hand() - if(!equipping) - to_chat(user, "You have nothing in your hand to put on \the [src]'s [href_list["add_inv"]].") - return 0 - var/obj/item/equipped - var/checktype - switch(href_list["add_inv"]) - if("access cuff") - equipped = access_card - checktype = /obj/item/card/id - if("back") - equipped = messenger_bag - checktype = /obj/item/storage/messenger - if(equipped) - to_chat(user, "There is already something worn on \the [src]'s [href_list["add_inv"]].") - return TOPIC_HANDLED - if(!istype(equipping, checktype)) - to_chat(user, "\The [equipping] won't fit on \the [src]'s [href_list["add_inv"]].") - return TOPIC_HANDLED - switch(href_list["add_inv"]) - if("access cuff") - access_card = equipping - if("back") - messenger_bag = equipping - if(!user.unEquip(equipping, src)) - return TOPIC_HANDLED - visible_message("\The [user] places \the [equipping] on to \the [src]'s [href_list["add_inv"]].") - update_icon() - show_inv(user) - return TOPIC_HANDLED - return ..() - -/mob/living/simple_animal/crow/examine(mob/user) - . = ..() - if(Adjacent(src)) - if(messenger_bag) - if(messenger_bag.contents.len) - to_chat(user, "It's wearing a little messenger bag with a Corvid Couriers logo on it. There's something stuffed inside.") - else - to_chat(user, "It's wearing a little messenger bag with a Corvid Couriers logo on it. It seems to be empty.") - if(access_card) - to_chat(user, "It has an access cuff with \the [access_card] inserted.") - -/mob/living/simple_animal/crow/on_update_icon() - ..() - overlays -= "bag" - overlays -= "bag_dead" - if(messenger_bag) - if(icon_state != icon_dead) - overlays |= "bag" - else - overlays |= "bag_dead" - -/mob/living/simple_animal/crow/cyber - name = "cybercrow" - desc = "A large cybercrow. k4w k4w." - speak_emote = list("beeps") - -/mob/living/simple_animal/crow/cyber/on_update_icon() - ..() - overlays -= "cyber" - overlays -= "cyber_dead" - if(icon_state != icon_dead) - overlays |= "cyber" - else - overlays |= "cyber_dead" - -/datum/say_list/crow - speak = list("Caw.", "Caw?", "Caw!", "CAW.") - emote_hear = list("caws") - emote_see = list("hops") \ No newline at end of file diff --git a/code/modules/mob/living/simple_animal/defense.dm b/code/modules/mob/living/simple_animal/defense.dm deleted file mode 100644 index a26c7095de6b0..0000000000000 --- a/code/modules/mob/living/simple_animal/defense.dm +++ /dev/null @@ -1,147 +0,0 @@ -/mob/living/simple_animal/bullet_act(var/obj/item/projectile/Proj) - if(!Proj || Proj.nodamage) - return - if (status_flags & GODMODE) - return PROJECTILE_FORCE_MISS - - var/damage = Proj.damage - if (Proj.damtype == DAMAGE_STUN) - damage = Proj.damage / 6 - if (Proj.damtype == DAMAGE_BRUTE) - damage = Proj.damage / 2 - if (Proj.damtype == DAMAGE_BURN) - damage = Proj.damage / 1.5 - if(Proj.agony) - damage += Proj.agony / 6 - if(health < Proj.agony * 3) - Paralyse(Proj.agony / 20) - visible_message(SPAN_WARNING("[src] is stunned momentarily!")) - - bullet_impact_visuals(Proj) - adjustBruteLoss(damage) - Proj.on_hit(src) - - if (ai_holder && Proj.firer) - ai_holder.react_to_attack(Proj.firer) - - return FALSE - -/mob/living/simple_animal/attack_hand(mob/living/carbon/human/M as mob) - ..() - - switch(M.a_intent) - - if(I_HELP) - if (health > 0) - M.visible_message(SPAN_NOTICE("[M] [response_help] \the [src].")) - M.update_personal_goal(/datum/goal/achievement/specific_object/pet, type) - - if(I_DISARM) - M.visible_message(SPAN_NOTICE("[M] [response_disarm] \the [src].")) - M.do_attack_animation(src) - - if(I_HURT) - var/dealt_damage = harm_intent_damage - var/harm_verb = response_harm - if(ishuman(M) && M.species) - var/datum/unarmed_attack/attack = M.get_unarmed_attack(src) - dealt_damage = attack.damage <= dealt_damage ? dealt_damage : attack.damage - harm_verb = pick(attack.attack_verb) - if(attack.sharp || attack.edge) - adjustBleedTicks(dealt_damage) - - adjustBruteLoss(dealt_damage) - M.visible_message(SPAN_WARNING("[M] [harm_verb] \the [src]!")) - M.do_attack_animation(src) - - if (ai_holder) - ai_holder.react_to_attack(M) - - return - -/mob/living/simple_animal/attackby(var/obj/item/O, var/mob/user) - if(istype(O, /obj/item/stack/medical)) - if(stat != DEAD) - var/obj/item/stack/medical/MED = O - if(!MED.animal_heal) - to_chat(user, SPAN_NOTICE("That [MED] won't help \the [src] at all!")) - return - if(health < maxHealth) - if(MED.can_use(1)) - adjustBruteLoss(-MED.animal_heal) - visible_message(SPAN_NOTICE("[user] applies the [MED] on [src].")) - MED.use(1) - else - to_chat(user, SPAN_NOTICE("\The [src] is dead, medical items won't bring \him back to life.")) - return - - if(istype(O, /obj/item/device/flash)) - if(stat != DEAD) - O.attack(src, user, user.zone_sel ? user.zone_sel.selecting : ran_zone()) - return - - if(meat_type && (stat == DEAD) && meat_amount) - if(istype(O, /obj/item/material/knife/kitchen/cleaver)) - var/victim_turf = get_turf(src) - if(!locate(/obj/structure/table, victim_turf)) - to_chat(user, SPAN_NOTICE("You need to place \the [src] on a table to butcher it.")) - return - var/time_to_butcher = (mob_size) - to_chat(user, SPAN_NOTICE("You begin harvesting \the [src].")) - if(do_after(user, time_to_butcher, src, DO_PUBLIC_UNIQUE)) - if(prob(user.skill_fail_chance(SKILL_COOKING, 60, SKILL_ADEPT))) - to_chat(user, SPAN_NOTICE("You botch harvesting \the [src], and ruin some of the meat in the process.")) - subtract_meat(user) - return - else - harvest(user, user.get_skill_value(SKILL_COOKING)) - return - else - to_chat(user, SPAN_NOTICE("Your hand slips with your movement, and some of the meat is ruined.")) - subtract_meat(user) - return - - else - if(!O.force) - visible_message(SPAN_NOTICE("[user] gently taps [src] with \the [O].")) - else - O.attack(src, user, user.zone_sel ? user.zone_sel.selecting : ran_zone()) - - if (ai_holder) - ai_holder.react_to_attack(user) - -/mob/living/simple_animal/hit_with_weapon(obj/item/O, mob/living/user, var/effective_force, var/hit_zone) - - visible_message(SPAN_DANGER("\The [src] has been attacked with \the [O] by [user]!")) - - if(O.force <= resistance) - to_chat(user, SPAN_DANGER("This weapon is ineffective; it does no damage.")) - return FALSE - - var/damage = O.force - if (O.damtype == DAMAGE_PAIN) - damage = 0 - if (O.damtype == DAMAGE_STUN) - damage = (O.force / 8) - if(supernatural && istype(O,/obj/item/nullrod)) - damage *= 2 - purge = 3 - adjustBruteLoss(damage) - if(O.edge || O.sharp) - adjustBleedTicks(damage) - - if (ai_holder) - ai_holder.react_to_attack(user) - - return TRUE - -/mob/living/simple_animal/proc/reflect_unarmed_damage(var/mob/living/carbon/human/attacker, var/damage_type, var/description) - if(attacker.a_intent == I_HURT) - var/hand_hurtie - if(attacker.hand) - hand_hurtie = BP_L_HAND - else - hand_hurtie = BP_R_HAND - attacker.apply_damage(rand(return_damage_min, return_damage_max), damage_type, hand_hurtie, used_weapon = description) - if(rand(25)) - to_chat(attacker, SPAN_WARNING("Your attack has no obvious effect on \the [src]'s [description]!")) diff --git a/code/modules/mob/living/simple_animal/familiars/familiars.dm b/code/modules/mob/living/simple_animal/familiars/familiars.dm deleted file mode 100644 index e07c8416fe094..0000000000000 --- a/code/modules/mob/living/simple_animal/familiars/familiars.dm +++ /dev/null @@ -1,183 +0,0 @@ -/mob/living/simple_animal/familiar - name = "familiar" - desc = "No wizard is complete without a mystical sidekick." - supernatural = 1 - - response_help = "pets" - response_disarm = "pushes" - response_harm = "hits" - - universal_speak = FALSE - universal_understand = TRUE - - min_gas = list(GAS_OXYGEN = 1) - max_gas = null - unsuitable_atmos_damage = 1 - - var/list/wizardy_spells = list() - -/mob/living/simple_animal/familiar/New() - ..() - add_language(LANGUAGE_HUMAN_EURO) - for(var/spell in wizardy_spells) - src.add_spell(new spell, "const_spell_ready") - -/mob/living/simple_animal/familiar/carcinus - name = "carcinus" - desc = "A small crab said to be made of stone and starlight." - icon = 'icons/mob/simple_animal/animal.dmi' - icon_state = "evilcrab" - icon_living = "evilcrab" - icon_dead = "evilcrab_dead" - - speak_emote = list("chitters","clicks") - - - health = 200 - maxHealth = 200 - natural_weapon = /obj/item/natural_weapon/pincers/strong - resistance = 9 - can_escape = TRUE //snip snip - density = FALSE - -/obj/item/natural_weapon/pincers/strong - force = 15 - -/*familiar version of the Pike w/o all the other hostile/carp stuff getting in the way (namely life) -*/ - -/mob/living/simple_animal/familiar/pike - name = "space pike" - desc = "A bigger, more magical cousin of the space carp." - - icon = 'icons/mob/simple_animal/space_shark.dmi' - icon_state = "shark" - icon_living = "shark" - icon_dead = "shark_dead" - pixel_x = -16 - - speak_emote = list("gnashes") - - health = 100 - maxHealth = 100 - natural_weapon = /obj/item/natural_weapon/bite - can_escape = TRUE - - min_gas = null - - wizardy_spells = list(/spell/aoe_turf/conjure/forcewall) - -/mob/living/simple_animal/familiar/pike/Allow_Spacemove(var/check_drift = 0) - return 1 //No drifting in space for space carp! //original comments do not steal - -/mob/living/simple_animal/familiar/horror - name = "horror" - desc = "Looking at it fills you with dread." - icon = 'icons/mob/mob.dmi' - icon_state = "horror" - icon_living = "horror" - - speak_emote = list("moans", "groans") - - response_help = "thinks better of touching" - - health = 150 - maxHealth = 150 - natural_weapon = /obj/item/natural_weapon/horror - - wizardy_spells = list(/spell/targeted/torment) - -/obj/item/natural_weapon/horror - name = "foul touch" - force = 10 - damtype = DAMAGE_BURN - attack_verb = list("touched") - -/mob/living/simple_animal/familiar/horror/death(gibbed, deathmessage, show_dead_message) - ..(null,"rapidly deteriorates","The bonds tying you to this mortal plane have been severed.") - - ghostize() - gibs(src.loc) - qdel(src) - - -/mob/living/simple_animal/familiar/minor_amaros - name = "minor amaros" - desc = "A small fluffy alien creature." - icon = 'icons/mob/mob.dmi' - icon_state = "baby roro" - icon_living = "baby roro" - icon_dead = "baby roro dead" - - speak_emote = list("entones") - mob_size = MOB_SMALL - density = FALSE - health = 25 - maxHealth = 25 - - wizardy_spells = list(/spell/targeted/heal_target, - /spell/targeted/heal_target/area) - - - -/mob/living/simple_animal/familiar/pet //basically variants of normal animals with spells. - icon = 'icons/mob/simple_animal/animal.dmi' - icon_rest //so that we can have resting little guys. - -/mob/living/simple_animal/familiar/pet/Life() - . = ..() - if(!.) - return FALSE - if(!icon_rest) - return - if(stat == UNCONSCIOUS || resting) - icon_state = icon_rest - -/mob/living/simple_animal/familiar/pet/mouse - name = "mouse" - desc = "A small rodent. It looks very old." - icon_state = "mouse_gray" - icon_living = "mouse_gray" - icon_dead = "mouse_gray_dead" - icon_rest = "mouse_gray_sleep" - - speak_emote = list("squeeks") - holder_type = /obj/item/holder/mouse - pass_flags = PASS_FLAG_TABLE - mob_size = MOB_MINISCULE - - response_harm = "stamps on" - - health = 15 - maxHealth = 15 - natural_weapon = /obj/item/natural_weapon/bite/mouse - can_escape = TRUE - density = FALSE - - wizardy_spells = list(/spell/aoe_turf/smoke) - -/mob/living/simple_animal/familiar/pet/mouse/New() - ..() - - verbs += /mob/living/proc/ventcrawl - verbs += /mob/living/proc/hide - -/mob/living/simple_animal/familiar/pet/cat - name = "black cat" - desc = "A pitch black cat. Said to be especially unlucky." - icon_state = "cat3" - icon_living = "cat3" - icon_dead = "cat3_dead" - icon_rest = "cat3_rest" - - - speak_emote = list("meows", "purrs") - holder_type = /obj/item/holder/cat - mob_size = MOB_SMALL - - health = 25 - maxHealth = 25 - natural_weapon = /obj/item/natural_weapon/claws/weak - density = FALSE - - wizardy_spells = list(/spell/targeted/subjugation) diff --git a/code/modules/mob/living/simple_animal/friendly/_friendly.dm b/code/modules/mob/living/simple_animal/friendly/_friendly.dm deleted file mode 100644 index d2b6aafdf86fc..0000000000000 --- a/code/modules/mob/living/simple_animal/friendly/_friendly.dm +++ /dev/null @@ -1,3 +0,0 @@ -/mob/living/simple_animal/passive - ai_holder = /datum/ai_holder/simple_animal/passive - mob_bump_flag = 0 diff --git a/code/modules/mob/living/simple_animal/friendly/cat.dm b/code/modules/mob/living/simple_animal/friendly/cat.dm deleted file mode 100644 index 98406a5cf88a0..0000000000000 --- a/code/modules/mob/living/simple_animal/friendly/cat.dm +++ /dev/null @@ -1,228 +0,0 @@ -//Cat -/mob/living/simple_animal/passive/cat - name = "cat" - desc = "A domesticated, feline pet. Has a tendency to adopt crewmembers." - icon_state = "cat2" - item_state = "cat2" - icon_living = "cat2" - icon_dead = "cat2_dead" - speak_emote = list("purrs", "meows") - turns_per_move = 5 - see_in_dark = 6 - response_help = "pets" - response_disarm = "gently pushes aside" - response_harm = "kicks" - minbodytemp = 223 //Below -50 Degrees Celsius - maxbodytemp = 323 //Above 50 Degrees Celsius - holder_type = /obj/item/holder/cat - mob_size = MOB_SMALL - possession_candidate = 1 - pass_flags = PASS_FLAG_TABLE - density = FALSE - - skin_material = MATERIAL_SKIN_FUR_ORANGE - - var/turns_since_scan = 0 - var/mob/living/simple_animal/passive/mouse/movement_target - - ai_holder = /datum/ai_holder/simple_animal/passive/cat - say_list_type = /datum/say_list/cat - -/mob/living/simple_animal/passive/cat/Life() - . = ..() - if(!.) - return FALSE - //MICE! - if((src.loc) && isturf(src.loc)) - if(!resting && !buckled) - for(var/mob/living/simple_animal/passive/mouse/M in loc) - if(!M.stat) - M.splat() - visible_emote(pick("bites \the [M]!","toys with \the [M].","chomps on \the [M]!")) - movement_target = null - set_AI_busy(FALSE) - break - - - - for(var/mob/living/simple_animal/passive/mouse/snack in oview(src,5)) - if(snack.stat < DEAD && prob(15)) - audible_emote(pick("hisses and spits!","mrowls fiercely!","eyes [snack] hungrily.")) - break - - - - turns_since_scan++ - if (turns_since_scan > 5) - walk_to(src,0) - turns_since_scan = 0 - - if (!ai_holder.stance == STANCE_FLEE) - handle_movement_target() - - if(prob(2)) //spooky - var/mob/observer/ghost/spook = locate() in range(src,5) - if(spook) - var/turf/T = spook.loc - var/list/visible = list() - for(var/obj/O in T.contents) - if(!O.invisibility && O.name) - visible += O - if(visible.len) - var/atom/A = pick(visible) - visible_emote("suddenly stops and stares at something unseen[istype(A) ? " near [A]":""].") - -/mob/living/simple_animal/passive/cat/proc/handle_movement_target() - //if our target is neither inside a turf or inside a human(???), stop - if((movement_target) && !(isturf(movement_target.loc) || ishuman(movement_target.loc) )) - movement_target = null - set_AI_busy(FALSE) - //if we have no target or our current one is out of sight/too far away - if( !movement_target || !(movement_target.loc in oview(src, 4)) ) - movement_target = null - set_AI_busy(FALSE) - for(var/mob/living/simple_animal/passive/mouse/snack in oview(src)) //search for a new target - if(isturf(snack.loc) && !snack.stat) - movement_target = snack - break - - if(movement_target) - set_AI_busy(TRUE) - walk_to(src,movement_target,0,3) - - -//Basic friend AI -/mob/living/simple_animal/passive/cat/fluff - var/mob/living/carbon/human/friend - var/befriend_job = null - -/mob/living/simple_animal/passive/cat/fluff/handle_movement_target() - if (friend) - var/follow_dist = 4 - if (friend.stat >= DEAD || friend.is_asystole()) //danger - follow_dist = 1 - else if (friend.stat || friend.health <= 50) //danger or just sleeping - follow_dist = 2 - var/near_dist = max(follow_dist - 2, 1) - var/current_dist = get_dist(src, friend) - - if (movement_target != friend) - if (current_dist > follow_dist && !istype(movement_target, /mob/living/simple_animal/passive/mouse) && (friend in oview(src))) - //stop existing movement - walk_to(src,0) - turns_since_scan = 0 - - //walk to friend - set_AI_busy(TRUE) - movement_target = friend - walk_to(src, movement_target, near_dist, 4) - - //already following and close enough, stop - else if (current_dist <= near_dist) - walk_to(src,0) - movement_target = null - set_AI_busy(FALSE) - if (prob(10)) - say("Meow!") - - if (!friend || movement_target != friend) - ..() - -/mob/living/simple_animal/passive/cat/fluff/Life() - . = ..() - if(!.) - return FALSE - if (stat || !friend) - return - if (get_dist(src, friend) <= 1) - if (friend.stat >= DEAD || friend.is_asystole()) - if (prob((friend.stat < DEAD)? 50 : 15)) - var/verb = pick("meows", "mews", "mrowls") - audible_emote(pick("[verb] in distress.", "[verb] anxiously.")) - else - if (prob(5)) - visible_emote(pick("nuzzles [friend].", - "brushes against [friend].", - "rubs against [friend].", - "purrs.")) - else if (friend.health <= 50) - if (prob(10)) - var/verb = pick("meows", "mews", "mrowls") - audible_emote("[verb] anxiously.") - -/mob/living/simple_animal/passive/cat/fluff/verb/become_friends() - set name = "Become Friends" - set category = "IC" - set src in view(1) - - if(!friend) - var/mob/living/carbon/human/H = usr - if(istype(H) && (!befriend_job || H.job == befriend_job)) - friend = usr - . = 1 - else if(usr == friend) - . = 1 //already friends, but show success anyways - - if(.) - set_dir(get_dir(src, friend)) - visible_emote(pick("nuzzles [friend].", - "brushes against [friend].", - "rubs against [friend].", - "purrs.")) - else - to_chat(usr, "[src] ignores you.") - return - -//RUNTIME IS ALIVE! SQUEEEEEEEE~ -/mob/living/simple_animal/passive/cat/fluff/Runtime - name = "Runtime" - desc = "Her fur has the look and feel of velvet, and her tail quivers occasionally." - gender = FEMALE - icon_state = "cat" - item_state = "cat" - icon_living = "cat" - icon_dead = "cat_dead" - skin_material = MATERIAL_SKIN_FUR_BLACK - -/mob/living/simple_animal/passive/cat/kitten - name = "kitten" - desc = "D'aaawwww." - icon_state = "kitten" - item_state = "kitten" - icon_living = "kitten" - icon_dead = "kitten_dead" - gender = NEUTER - meat_amount = 1 - bone_amount = 3 - skin_amount = 3 - -// Leaving this here for now. -/obj/item/holder/cat/fluff/bones - name = "Bones" - desc = "It's Bones! Meow." - gender = MALE - icon_state = "cat3" - -/mob/living/simple_animal/passive/cat/fluff/bones - name = "Bones" - desc = "That's Bones the cat. He's a laid back, black cat. Meow." - gender = MALE - icon_state = "cat3" - item_state = "cat3" - icon_living = "cat3" - icon_dead = "cat3_dead" - holder_type = /obj/item/holder/cat/fluff/bones - var/friend_name = "Erstatz Vryroxes" - -/mob/living/simple_animal/passive/cat/kitten/New() - gender = pick(MALE, FEMALE) - ..() - -/datum/ai_holder/simple_animal/passive/cat - can_flee = TRUE - speak_chance = 1 - -/datum/say_list/cat - speak = list("Meow!","Esp!","Purr!","HSSSSS") - emote_hear = list("meows","mews") - emote_see = list("shakes their head", "shivers") diff --git a/code/modules/mob/living/simple_animal/friendly/corgi.dm b/code/modules/mob/living/simple_animal/friendly/corgi.dm deleted file mode 100644 index f09270e7d4c1e..0000000000000 --- a/code/modules/mob/living/simple_animal/friendly/corgi.dm +++ /dev/null @@ -1,213 +0,0 @@ -//Corgi -/mob/living/simple_animal/passive/corgi - name = "\improper corgi" - real_name = "corgi" - desc = "It's a corgi." - icon_state = "corgi" - icon_living = "corgi" - icon_dead = "corgi_dead" - speak_emote = list("barks", "woofs") - turns_per_move = 10 - response_help = "pets" - response_disarm = "bops" - response_harm = "kicks" - see_in_dark = 5 - mob_size = 8 - possession_candidate = 1 - holder_type = /obj/item/holder/corgi - pass_flags = PASS_FLAG_TABLE - density = FALSE - - meat_type = /obj/item/reagent_containers/food/snacks/meat/corgi - meat_amount = 3 - skin_material = MATERIAL_SKIN_FUR_ORANGE - - var/obj/item/inventory_head - var/obj/item/inventory_back - - ai_holder = /datum/ai_holder/simple_animal/passive/corgi - say_list_type = /datum/say_list/corgi - -//IAN! SQUEEEEEEEEE~ -/mob/living/simple_animal/passive/corgi/Ian - name = "Ian" - real_name = "Ian" //Intended to hold the name without altering it. - gender = MALE - desc = "It's a corgi." - var/turns_since_scan = 0 - var/obj/movement_target - response_help = "pets" - response_disarm = "bops" - response_harm = "kicks" - -/mob/living/simple_animal/passive/corgi/Ian/Life() - . = ..() - if(!.) - return FALSE - - //Feeding, chasing food, FOOOOODDDD - if(!resting && !buckled) - turns_since_scan++ - if(turns_since_scan > 5) - turns_since_scan = 0 - if((movement_target) && !(isturf(movement_target.loc) || ishuman(movement_target.loc) )) - movement_target = null - set_AI_busy(FALSE) - if( !movement_target || !(movement_target.loc in oview(src, 3)) ) - movement_target = null - set_AI_busy(FALSE) - for(var/obj/item/reagent_containers/food/snacks/S in oview(src,3)) - if(isturf(S.loc) || ishuman(S.loc)) - movement_target = S - break - if(movement_target) - set_AI_busy(TRUE) - step_to(src,movement_target,1) - sleep(3) - step_to(src,movement_target,1) - sleep(3) - step_to(src,movement_target,1) - - if(movement_target) //Not redundant due to sleeps, Item can be gone in 6 decisecomds - if (movement_target.loc.x < src.x) - set_dir(WEST) - else if (movement_target.loc.x > src.x) - set_dir(EAST) - else if (movement_target.loc.y < src.y) - set_dir(SOUTH) - else if (movement_target.loc.y > src.y) - set_dir(NORTH) - else - set_dir(SOUTH) - - if(isturf(movement_target.loc) ) - UnarmedAttack(movement_target) - else if(ishuman(movement_target.loc) && prob(20)) - visible_emote("stares at the [movement_target] that [movement_target.loc] has with sad puppy eyes.") - - if(prob(1)) - visible_emote(pick("dances around.","chases their tail.")) - spawn(0) - for(var/i in list(1,2,4,8,4,2,1,2,4,8,4,2,1,2,4,8,4,2)) - set_dir(i) - sleep(1) - -/obj/item/reagent_containers/food/snacks/meat/corgi - name = "Corgi meat" - desc = "Tastes like... well you know..." - -/mob/living/simple_animal/passive/corgi/attackby(var/obj/item/O as obj, var/mob/user as mob) //Marker -Agouri - if(istype(O, /obj/item/newspaper)) - if(!stat) - for(var/mob/M in viewers(user, null)) - if ((M.client && !( M.blinded ))) - M.show_message("[user] baps [name] on the nose with the rolled up [O]") - spawn(0) - for(var/i in list(1,2,4,8,4,2,1,2)) - set_dir(i) - sleep(1) - else - ..() - -/mob/living/simple_animal/passive/corgi/regenerate_icons() - overlays = list() - - if(inventory_head) - var/head_icon_state = inventory_head.icon_state - if(health <= 0) - head_icon_state += "2" - - var/icon/head_icon = image('icons/mob/simple_animal/corgi_head.dmi',head_icon_state) - if(head_icon) - overlays += head_icon - - if(inventory_back) - var/back_icon_state = inventory_back.icon_state - if(health <= 0) - back_icon_state += "2" - - var/icon/back_icon = image('icons/mob/simple_animal/corgi_back.dmi',back_icon_state) - if(back_icon) - overlays += back_icon - -/mob/living/simple_animal/passive/corgi/puppy - name = "\improper corgi puppy" - real_name = "corgi" - desc = "It's a corgi puppy." - icon_state = "puppy" - icon_living = "puppy" - icon_dead = "puppy_dead" - meat_amount = 1 - skin_amount = 3 - bone_amount = 3 - -//pupplies cannot wear anything. -/mob/living/simple_animal/passive/corgi/puppy/OnTopic(mob/user, href_list) - if(href_list["remove_inv"] || href_list["add_inv"]) - to_chat(user, "You can't fit this on [src]") - return TOPIC_HANDLED - return ..() - -//LISA! SQUEEEEEEEEE~ -/mob/living/simple_animal/passive/corgi/Lisa - name = "Lisa" - real_name = "Lisa" - gender = FEMALE - desc = "It's a corgi with a cute pink bow." - icon_state = "lisa" - icon_living = "lisa" - icon_dead = "lisa_dead" - response_help = "pets" - response_disarm = "bops" - response_harm = "kicks" - var/turns_since_scan = 0 - var/puppies = 0 - -//Lisa already has a cute bow! -/mob/living/simple_animal/passive/corgi/Lisa/OnTopic(mob/user, href_list) - if(href_list["remove_inv"] || href_list["add_inv"]) - to_chat(user, "[src] already has a cute bow!") - return TOPIC_HANDLED - return ..() - -/mob/living/simple_animal/passive/corgi/Lisa/Life() - . = ..() - if(!.) - return FALSE - - if(!resting && !buckled) - turns_since_scan++ - if(turns_since_scan > 15) - turns_since_scan = 0 - var/alone = 1 - var/ian = 0 - for(var/mob/M in oviewers(7, src)) - if(istype(M, /mob/living/simple_animal/passive/corgi/Ian)) - if(M.client) - alone = 0 - break - else - ian = M - else - alone = 0 - break - if(alone && ian && puppies < 4) - if(near_camera(src) || near_camera(ian)) - return - new /mob/living/simple_animal/passive/corgi/puppy(loc) - - - if(prob(1)) - visible_emote(pick("dances around","chases her tail")) - spawn(0) - for(var/i in list(1,2,4,8,4,2,1,2,4,8,4,2,1,2,4,8,4,2)) - set_dir(i) - sleep(1) - -/datum/ai_holder/simple_animal/passive/corgi - speak_chance = 1 - -/datum/say_list/corgi - speak = list("YAP", "Woof!", "Bark!", "AUUUUUU") - emote_hear = list("barks", "woofs", "yaps","pants") - emote_see = list("shakes its head", "shivers") diff --git a/code/modules/mob/living/simple_animal/friendly/crab.dm b/code/modules/mob/living/simple_animal/friendly/crab.dm deleted file mode 100644 index e9a6e2f286a02..0000000000000 --- a/code/modules/mob/living/simple_animal/friendly/crab.dm +++ /dev/null @@ -1,61 +0,0 @@ -//Look Sir, free crabs! -/mob/living/simple_animal/passive/crab - name = "crab" - desc = "A hard-shelled crustacean. Seems quite content to lounge around all the time." - icon_state = "crab" - icon_living = "crab" - icon_dead = "crab_dead" - mob_size = MOB_SMALL - speak_emote = list("clicks") - turns_per_move = 5 - response_help = "pets" - response_disarm = "gently pushes aside" - response_harm = "stomps" - friendly = "pinches" - possession_candidate = 1 - can_escape = TRUE //snip snip - pass_flags = PASS_FLAG_TABLE - natural_armor = list( - melee = ARMOR_MELEE_KNIVES - ) - density = FALSE - - meat_amount = 3 - skin_material = MATERIAL_SKIN_CHITIN - skin_amount = 10 - bone_material = null - bone_amount = 0 - - var/obj/item/inventory_head - var/obj/item/inventory_mask - - ai_holder = /datum/ai_holder/simple_animal/passive/crab - say_list_type = /datum/say_list/crab - -/mob/living/simple_animal/crab/Life() - . = ..() - if(!.) - return FALSE - //CRAB movement - if(!ckey && !stat) - if(isturf(src.loc) && !resting && !buckled) //This is so it only moves if it's not inside a closet, gentics machine, etc. - turns_since_move++ - if(turns_since_move >= turns_per_move) - Move(get_step(src,pick(4,8))) - turns_since_move = 0 - regenerate_icons() - -//COFFEE! SQUEEEEEEEEE! -/mob/living/simple_animal/crab/Coffee - name = "Coffee" - real_name = "Coffee" - desc = "It's Coffee, the other pet!" - - -/datum/ai_holder/simple_animal/passive/crab - speak_chance = 1 - - -/datum/say_list/crab - emote_hear = list("clicks") - emote_see = list("clacks") diff --git a/code/modules/mob/living/simple_animal/friendly/farm_animals.dm b/code/modules/mob/living/simple_animal/friendly/farm_animals.dm deleted file mode 100644 index 60a6e3378e566..0000000000000 --- a/code/modules/mob/living/simple_animal/friendly/farm_animals.dm +++ /dev/null @@ -1,323 +0,0 @@ -//goat -/mob/living/simple_animal/hostile/retaliate/goat - name = "goat" - desc = "Not known for their pleasant disposition." - icon_state = "goat" - icon_living = "goat" - icon_dead = "goat_dead" - turns_per_move = 5 - see_in_dark = 6 - response_help = "pets" - response_disarm = "gently pushes aside" - response_harm = "kicks" - faction = "goat" - health = 40 - natural_weapon = /obj/item/natural_weapon/hooves - - meat_type = /obj/item/reagent_containers/food/snacks/meat/goat - meat_amount = 4 - bone_amount = 8 - skin_material = MATERIAL_SKIN_GOATHIDE - skin_amount = 8 - - var/datum/reagents/udder = null - - ai_holder = /datum/ai_holder/simple_animal/retaliate/goat - say_list_type = /datum/say_list/goat - -/datum/ai_holder/simple_animal/retaliate/goat/react_to_attack(atom/movable/attacker) - . = ..() - - if(holder.stat == CONSCIOUS && prob(50)) - holder.visible_message("\The [holder] gets an evil-looking gleam in their eye.") - -/mob/living/simple_animal/hostile/retaliate/goat/New() - udder = new(50, src) - ..() - -/mob/living/simple_animal/hostile/retaliate/goat/Destroy() - QDEL_NULL(udder) - . = ..() - -/mob/living/simple_animal/hostile/retaliate/goat/Life() - . = ..() - if(.) - //chance to go crazy and start wacking stuff - if (ai_holder) - if(!length(ai_holder.attackers) && prob(1)) - var/list/nearby_stuff = hearers(src, ai_holder.vision_range) - if (length(nearby_stuff)) - ai_holder.react_to_attack(pick(nearby_stuff)) - - if(length(ai_holder.attackers) && prob(10)) - ai_holder.attackers = list() - ai_holder.lose_target() - src.visible_message("\The [src] calms down.") - - if(stat == CONSCIOUS) - if(udder && prob(5)) - udder.add_reagent(/datum/reagent/drink/milk, rand(5, 10)) - - if(locate(/obj/effect/vine) in loc) - var/obj/effect/vine/SV = locate() in loc - if(prob(60)) - src.visible_message("\The [src] eats the plants.") - SV.die_off(1) - if(locate(/obj/machinery/portable_atmospherics/hydroponics/soil/invisible) in loc) - var/obj/machinery/portable_atmospherics/hydroponics/soil/invisible/SP = locate() in loc - qdel(SP) - else if(prob(20)) - src.visible_message("\The [src] chews on the plants.") - return - - if(!pulledby) - var/obj/effect/vine/food - food = locate(/obj/effect/vine) in oview(5,loc) - if(food) - var/step = get_step_to(src, food, 0) - Move(step) - -/mob/living/simple_animal/hostile/retaliate/goat/attackby(var/obj/item/O as obj, var/mob/user as mob) - var/obj/item/reagent_containers/glass/G = O - if(stat == CONSCIOUS && istype(G) && G.is_open_container()) - user.visible_message("[user] milks [src] using \the [O].") - var/transfered = udder.trans_type_to(G, /datum/reagent/drink/milk, rand(5,10)) - if(G.reagents.total_volume >= G.volume) - to_chat(user, "\The [O] is full.") - if(!transfered) - to_chat(user, "The udder is dry. Wait a bit longer...") - else - ..() - -//cow -/mob/living/simple_animal/passive/cow - name = "cow" - desc = "Known for their milk, just don't tip them over." - icon_state = "cow" - icon_living = "cow" - icon_dead = "cow_dead" - icon_gib = "cow_gib" - speak_emote = list("moos","moos hauntingly") - turns_per_move = 5 - see_in_dark = 6 - response_help = "pets" - response_disarm = "gently pushes aside" - response_harm = "kicks" - health = 50 - - meat_type = /obj/item/reagent_containers/food/snacks/meat/beef - meat_amount = 6 - bone_amount = 10 - skin_material = MATERIAL_SKIN_COWHIDE - skin_amount = 10 - - var/datum/reagents/udder = null - - ai_holder = /datum/ai_holder/simple_animal/passive/cow - say_list_type = /datum/say_list/cow - -/mob/living/simple_animal/passive/cow/New() - udder = new(50, src) - ..() - -/mob/living/simple_animal/passive/cow/attackby(var/obj/item/O as obj, var/mob/user as mob) - var/obj/item/reagent_containers/glass/G = O - if(stat == CONSCIOUS && istype(G) && G.is_open_container()) - user.visible_message("[user] milks [src] using \the [O].") - var/transfered = udder.trans_type_to(G, /datum/reagent/drink/milk, rand(5,10)) - if(G.reagents.total_volume >= G.volume) - to_chat(user, "\The [O] is full.") - if(!transfered) - to_chat(user, "The udder is dry. Wait a bit longer...") - else - ..() - -/mob/living/simple_animal/passive/cow/Life() - . = ..() - if(!.) - return FALSE - if(udder && prob(5)) - udder.add_reagent(/datum/reagent/drink/milk, rand(5, 10)) - -/mob/living/simple_animal/passive/cow/attack_hand(mob/living/carbon/M as mob) - if(!stat && M.a_intent == I_DISARM && icon_state != icon_dead) - M.visible_message("[M] tips over [src].","You tip over [src].") - Weaken(30) - icon_state = icon_dead - spawn(rand(20,50)) - if(!stat && M) - icon_state = icon_living - var/list/responses = list( "[src] looks at you imploringly.", - "[src] looks at you pleadingly", - "[src] looks at you with a resigned expression.", - "[src] seems resigned to its fate.") - to_chat(M, pick(responses)) - else - ..() - -/mob/living/simple_animal/passive/chick - name = "\improper chick" - desc = "Adorable! They make such a racket though." - icon_state = "chick" - icon_living = "chick" - icon_dead = "chick_dead" - icon_gib = "chick_gib" - speak_emote = list("cheeps") - turns_per_move = 2 - response_help = "pets" - response_disarm = "gently pushes aside" - response_harm = "kicks" - health = 1 - pass_flags = PASS_FLAG_TABLE | PASS_FLAG_GRILLE - holder_type = /obj/item/holder/small - mob_size = MOB_MINISCULE - density = FALSE - - meat_type = /obj/item/reagent_containers/food/snacks/meat/chicken - meat_amount = 1 - bone_amount = 3 - skin_amount = 3 - skin_material = MATERIAL_SKIN_FEATHERS - - var/amount_grown = 0 - - ai_holder = /datum/ai_holder/simple_animal/passive/chick - say_list_type = /datum/say_list/chick - -/mob/living/simple_animal/passive/chick/New() - ..() - pixel_x = rand(-6, 6) - pixel_y = rand(0, 10) - -/mob/living/simple_animal/passive/chick/Life() - . = ..() - if(!.) - return FALSE - amount_grown += rand(1,2) - if(amount_grown >= 100) - new /mob/living/simple_animal/passive/chicken(src.loc) - qdel(src) - -var/global/const/MAX_CHICKENS = 50 -var/global/chicken_count = 0 - -/mob/living/simple_animal/passive/chicken - name = "\improper chicken" - desc = "Hopefully the eggs are good this season." - icon_state = "chicken" - icon_living = "chicken" - icon_dead = "chicken_dead" - speak_emote = list("clucks","croons") - turns_per_move = 3 - response_help = "pets" - response_disarm = "gently pushes aside" - response_harm = "kicks" - health = 10 - pass_flags = PASS_FLAG_TABLE - holder_type = /obj/item/holder - mob_size = MOB_SMALL - density = FALSE - - meat_type = /obj/item/reagent_containers/food/snacks/meat/chicken - meat_amount = 2 - skin_material = MATERIAL_SKIN_FEATHERS - - var/eggsleft = 0 - var/body_color - - ai_holder = /datum/ai_holder/simple_animal/passive/chicken - say_list_type = /datum/say_list/chicken - -/mob/living/simple_animal/passive/chicken/New() - ..() - if(!body_color) - body_color = pick( list("brown","black","white") ) - icon_state = "chicken_[body_color]" - icon_living = "chicken_[body_color]" - icon_dead = "chicken_[body_color]_dead" - pixel_x = rand(-6, 6) - pixel_y = rand(0, 10) - chicken_count += 1 - -/mob/living/simple_animal/passive/chicken/death(gibbed, deathmessage, show_dead_message) - ..(gibbed, deathmessage, show_dead_message) - chicken_count -= 1 - -/mob/living/simple_animal/passive/chicken/attackby(var/obj/item/O as obj, var/mob/user as mob) - if(istype(O, /obj/item/reagent_containers/food/snacks/grown)) //feedin' dem chickens - var/obj/item/reagent_containers/food/snacks/grown/G = O - if(G.seed && G.seed.kitchen_tag == "wheat") - if(!stat && eggsleft < 8) - user.visible_message("[user] feeds [O] to [name]! It clucks happily.","You feed [O] to [name]! It clucks happily.") - qdel(O) - eggsleft += rand(1, 4) - else - to_chat(user, "[name] doesn't seem hungry!") - else - to_chat(user, "[name] doesn't seem interested in that.") - else - ..() - -/mob/living/simple_animal/passive/chicken/Life() - . = ..() - if(!.) - return FALSE - if(prob(3) && eggsleft > 0) - visible_message("[src] [pick("lays an egg.","squats down and croons.","begins making a huge racket.","begins clucking raucously.")]") - eggsleft-- - var/obj/item/reagent_containers/food/snacks/egg/E = new(get_turf(src)) - E.pixel_x = rand(-6,6) - E.pixel_y = rand(-6,6) - if(chicken_count < MAX_CHICKENS && prob(10)) - E.amount_grown = 1 - START_PROCESSING(SSobj, E) - -/obj/item/reagent_containers/food/snacks/egg - var/amount_grown = 0 - -/obj/item/reagent_containers/food/snacks/egg/Destroy() - if(amount_grown) - STOP_PROCESSING(SSobj, src) - . = ..() - -/obj/item/reagent_containers/food/snacks/egg/Process() - if(isturf(loc)) - amount_grown += rand(1,2) - if(amount_grown >= 100) - visible_message("[src] hatches with a quiet cracking sound.") - new /mob/living/simple_animal/passive/chick(get_turf(src)) - STOP_PROCESSING(SSobj, src) - qdel(src) - else - return PROCESS_KILL - -/datum/ai_holder/simple_animal/retaliate/goat - speak_chance = 1 - -/datum/say_list/goat - speak = list("EHEHEHEHEH","eh?") - emote_hear = list("brays") - emote_see = list("shakes its head", "stamps a foot", "glares around") - -/datum/ai_holder/simple_animal/passive/cow - speak_chance = 1 -/datum/say_list/cow - speak = list("moo?","moo","MOOOOOO") - emote_hear = list("brays") - emote_see = list("shakes its head") - -/datum/ai_holder/simple_animal/passive/chick - speak_chance = 2 - -/datum/say_list/chick - speak = list("Cherp.","Cherp?","Chirrup.","Cheep!") - emote_hear = list("cheeps") - emote_see = list("pecks at the ground","flaps its tiny wings") - -/datum/ai_holder/simple_animal/passive/chicken - speak_chance = 2 - -/datum/say_list/chicken - speak = list("Cluck!","BWAAAAARK BWAK BWAK BWAK!","Bwaak bwak.") - emote_hear = list("clucks") - emote_see = list("pecks at the ground","flaps its wings viciously") diff --git a/code/modules/mob/living/simple_animal/friendly/juvenile_space_whale.dm b/code/modules/mob/living/simple_animal/friendly/juvenile_space_whale.dm deleted file mode 100644 index e45c8416e8d10..0000000000000 --- a/code/modules/mob/living/simple_animal/friendly/juvenile_space_whale.dm +++ /dev/null @@ -1,76 +0,0 @@ -/mob/living/simple_animal/passive/juvenile_space_whale - name = "juvenile space whale" - desc = "A majestic spaceborne cetacean. This one is a little baby." - icon = 'icons/mob/simple_animal/juvenile_space_whale.dmi' - icon_state = "alive" - icon_dead = "dead" - - health = 80 - maxHealth = 80 - meat_amount = 25 - skin_amount = 6 - - min_gas = null - max_gas = null - minbodytemp = 0 - - turns_per_move = 4 - - mob_size = MOB_MEDIUM - mob_bump_flag = HEAVY - mob_swap_flags = HEAVY - mob_push_flags = ALLMOBS - can_escape = TRUE - - faction = "whales" - response_help = "strokes" - response_disarm = "bumps" - response_harm = "strikes" - - natural_armor = list(melee = ARMOR_MELEE_SMALL, - bullet = ARMOR_BALLISTIC_MINOR) - - var/mob/living/simple_animal/hostile/retaliate/space_whale/parent - - ai_holder = /datum/ai_holder/simple_animal/passive - say_list_type = /datum/say_list/juvenile_space_whale - -/mob/living/simple_animal/passive/juvenile_space_whale/New() - ..() - var/mob/living/simple_animal/hostile/retaliate/space_whale/W = locate() in viewers(src, 7) - if(W && !parent && !W.baby) - W.baby = src - parent = W - color = parent.color - -/mob/living/simple_animal/passive/juvenile_space_whale/Life() - . = ..() - if(!.) - return FALSE - if(parent && parent.stat != DEAD) - if(parent.stance == STANCE_IDLE && (pulledby || length(grabbed_by))) - var/enemies = pulledby ? list(pulledby) : grabbed_by - parent.ai_holder.attackers += enemies - if(health < (maxHealth - 5)) - walk_to(src, parent, 1, 1 SECONDS) - if(parent.stance == STANCE_IDLE && ai_holder.attackers.len) - parent.ai_holder.react_to_attack(pick(ai_holder.attackers)) - else if(get_dist(src.loc, parent.loc) > 5) - walk_to(src, parent, 4, 3 SECONDS) - -/mob/living/simple_animal/passive/juvenile_space_whale/set_dir() - ..() - switch(dir) - if(NORTH, SOUTH) - bound_height = 64 - bound_width = 32 - if(EAST, WEST) - bound_height = 32 - bound_width = 64 - -/mob/living/simple_animal/passive/juvenile_space_whale/Allow_Spacemove() - return TRUE - -/datum/say_list/juvenile_space_whale - emote_hear = list("vocalises", "sings", "hums") - emote_see = list("flaps around", "rolls") diff --git a/code/modules/mob/living/simple_animal/friendly/lizard.dm b/code/modules/mob/living/simple_animal/friendly/lizard.dm deleted file mode 100644 index 245d840855aa2..0000000000000 --- a/code/modules/mob/living/simple_animal/friendly/lizard.dm +++ /dev/null @@ -1,25 +0,0 @@ -/mob/living/simple_animal/passive/lizard - name = "lizard" - desc = "A cute tiny lizard." - icon = 'icons/mob/simple_animal/critter.dmi' - icon_state = "lizard" - icon_living = "lizard" - icon_dead = "lizard-dead" - speak_emote = list("hisses") - health = 5 - maxHealth = 5 - natural_weapon = /obj/item/natural_weapon/bite/weak - response_help = "pets" - response_disarm = "shoos" - response_harm = "stomps on" - holder_type = /obj/item/holder/small - mob_size = MOB_MINISCULE - possession_candidate = 1 - can_escape = TRUE - pass_flags = PASS_FLAG_TABLE - density = FALSE - - meat_amount = 1 - bone_amount = 1 - skin_amount = 1 - skin_material = MATERIAL_SKIN_LIZARD diff --git a/code/modules/mob/living/simple_animal/friendly/mouse.dm b/code/modules/mob/living/simple_animal/friendly/mouse.dm deleted file mode 100644 index 7e1ffd1da8ca8..0000000000000 --- a/code/modules/mob/living/simple_animal/friendly/mouse.dm +++ /dev/null @@ -1,139 +0,0 @@ -/mob/living/simple_animal/passive/mouse - name = "mouse" - real_name = "mouse" - desc = "It's a small rodent." - icon_state = "mouse_gray" - item_state = "mouse_gray" - icon_living = "mouse_gray" - icon_dead = "mouse_gray_dead" - speak_emote = list("squeeks","squeeks","squiks") - pass_flags = PASS_FLAG_TABLE - turns_per_move = 5 - see_in_dark = 6 - maxHealth = 5 - health = 5 - response_help = "pets" - response_disarm = "gently pushes aside" - response_harm = "stamps on" - density = FALSE - minbodytemp = 223 //Below -50 Degrees Celsius - maxbodytemp = 323 //Above 50 Degrees Celsius - universal_speak = FALSE - universal_understand = TRUE - holder_type = /obj/item/holder/mouse - mob_size = MOB_MINISCULE - possession_candidate = 1 - can_escape = TRUE - can_pull_size = ITEM_SIZE_TINY - can_pull_mobs = MOB_PULL_NONE - - meat_amount = 1 - bone_amount = 1 - skin_amount = 1 - skin_material = MATERIAL_SKIN_FUR - - var/body_color //brown, gray and white, leave blank for random - - ai_holder = /datum/ai_holder/simple_animal/passive/mouse - say_list_type = /datum/say_list/mouse - -/mob/living/simple_animal/passive/mouse/Life() - . = ..() - if(!.) - return FALSE - if(prob(ai_holder.speak_chance)) - for(var/mob/M in view()) - sound_to(M, 'sound/effects/mousesqueek.ogg') - - if(!ckey && stat == CONSCIOUS && prob(0.5)) - set_stat(UNCONSCIOUS) - icon_state = "mouse_[body_color]_sleep" - set_wander(FALSE) - ai_holder.speak_chance = 0 - //snuffles - else if(stat == UNCONSCIOUS) - if(ckey || prob(1)) - set_stat(CONSCIOUS) - icon_state = "mouse_[body_color]" - set_wander(TRUE) - else if(prob(5)) - audible_emote("snuffles.") - -/mob/living/simple_animal/passive/mouse/lay_down() - ..() - icon_state = resting ? "mouse_[body_color]_sleep" : "mouse_[body_color]" - -/mob/living/simple_animal/passive/mouse/New() - ..() - - verbs += /mob/living/proc/ventcrawl - verbs += /mob/living/proc/hide - - if(name == initial(name)) - name = "[name] ([sequential_id(/mob/living/simple_animal/passive/mouse)])" - real_name = name - - if(!body_color) - body_color = pick( list("brown","gray","white") ) - - icon_state = "mouse_[body_color]" - item_state = "mouse_[body_color]" - icon_living = "mouse_[body_color]" - icon_dead = "mouse_[body_color]_dead" - desc = "It's a small [body_color] rodent, often seen hiding in maintenance areas and making a nuisance of itself." - -/mob/living/simple_animal/passive/mouse/Initialize() - . = ..() - switch(body_color) - if("gray") - skin_material = MATERIAL_SKIN_FUR_GRAY - if("white") - skin_material = MATERIAL_SKIN_FUR_WHITE - -/mob/living/simple_animal/passive/mouse/proc/splat() - icon_dead = "mouse_[body_color]_splat" - adjustBruteLoss(maxHealth) // Enough damage to kill - src.death() - -/mob/living/simple_animal/passive/mouse/Crossed(AM as mob|obj) - if( ishuman(AM) ) - if(!stat) - var/mob/M = AM - to_chat(M, "[icon2html(src, M)] Squeek!") - sound_to(M, 'sound/effects/mousesqueek.ogg') - ..() - -/* - * Mouse types - */ - -/mob/living/simple_animal/passive/mouse/white - body_color = "white" - icon_state = "mouse_white" - -/mob/living/simple_animal/passive/mouse/gray - body_color = "gray" - icon_state = "mouse_gray" - -/mob/living/simple_animal/passive/mouse/brown - body_color = "brown" - icon_state = "mouse_brown" - -//TOM IS ALIVE! SQUEEEEEEEE~K :) -/mob/living/simple_animal/passive/mouse/brown/Tom - name = "Tom" - desc = "Jerry the cat is not amused." - -/mob/living/simple_animal/passive/mouse/brown/Tom/New() - ..() - // Change my name back, don't want to be named Tom (666) - SetName(initial(name)) - real_name = name - -/datum/ai_holder/simple_animal/passive/mouse - speak_chance = 1 - -/datum/say_list/mouse - speak = list("Squeek!","SQUEEK!","Squeek?") - emote_hear = list("squeeks","squeaks","squiks") - emote_see = list("runs in a circle", "shakes", "scritches at something") diff --git a/code/modules/mob/living/simple_animal/friendly/mushroom.dm b/code/modules/mob/living/simple_animal/friendly/mushroom.dm deleted file mode 100644 index 630d1f17ae831..0000000000000 --- a/code/modules/mob/living/simple_animal/friendly/mushroom.dm +++ /dev/null @@ -1,78 +0,0 @@ -/mob/living/simple_animal/passive/mushroom - name = "walking mushroom" - desc = "It's a massive mushroom... with legs?" - icon_state = "mushroom" - icon_living = "mushroom" - icon_dead = "mushroom_dead" - mob_size = MOB_SMALL - turns_per_move = 1 - maxHealth = 5 - health = 5 - response_help = "pets" - response_disarm = "gently pushes aside" - response_harm = "whacks" - harm_intent_damage = 5 - pass_flags = PASS_FLAG_TABLE - - meat_type = /obj/item/reagent_containers/food/snacks/hugemushroomslice - bone_material = null - bone_amount = 0 - skin_material = null - skin_amount = null - density = FALSE - - var/datum/seed/seed - var/harvest_time - var/min_explode_time = 1200 - var/static/total_mushrooms = 0 - - ai_holder = /datum/ai_holder/simple_animal/passive/mushroom - -/mob/living/simple_animal/passive/mushroom/New() - ..() - harvest_time = world.time - total_mushrooms++ - -/mob/living/simple_animal/passive/mushroom/verb/spawn_spores() - - set name = "Explode" - set category = "Abilities" - set desc = "Spread your spores!" - set src = usr - - if(stat == 2) - to_chat(usr, "You are dead; it is too late for that.") - return - - if(!seed) - to_chat(usr, "You are sterile!") - return - - if(world.time < harvest_time + min_explode_time) - to_chat(usr, "You are not mature enough for that.") - return - - spore_explode() - -/mob/living/simple_animal/passive/mushroom/death(gibbed, deathmessage, show_dead_message) - . = ..(gibbed, deathmessage, show_dead_message) - if(.) - total_mushrooms-- - if(total_mushrooms < config.maximum_mushrooms && prob(30)) - spore_explode() - -/mob/living/simple_animal/passive/mushroom/proc/spore_explode() - if(!seed) - return - if(world.time < harvest_time + min_explode_time) - return - for(var/turf/simulated/target_turf in orange(1,src)) - if(prob(60) && !target_turf.density && src.Adjacent(target_turf)) - new /obj/machinery/portable_atmospherics/hydroponics/soil/invisible(target_turf,seed) - death(0) - seed.thrown_at(src,get_turf(src),1) - if(src) - qdel(src) - -/datum/ai_holder/simple_animal/passive/mushroom - speak_chance = 0 diff --git a/code/modules/mob/living/simple_animal/friendly/possum.dm b/code/modules/mob/living/simple_animal/friendly/possum.dm deleted file mode 100644 index e2cd374fee90b..0000000000000 --- a/code/modules/mob/living/simple_animal/friendly/possum.dm +++ /dev/null @@ -1,124 +0,0 @@ -/mob/living/simple_animal/passive/opossum - name = "opossum" - real_name = "opossum" - desc = "It's an opossum, a small scavenging marsupial." - icon_state = "possum" - item_state = "possum" - icon_living = "possum" - icon_dead = "possum_dead" - icon = 'icons/mob/simple_animal/possum.dmi' - speak_emote = list("hisses") - pass_flags = PASS_FLAG_TABLE - turns_per_move = 3 - see_in_dark = 6 - maxHealth = 50 - health = 50 - response_help = "pets" - response_disarm = "gently pushes aside" - response_harm = "stamps on" - density = FALSE - minbodytemp = 223 - maxbodytemp = 323 - universal_speak = FALSE - universal_understand = TRUE - holder_type = /obj/item/holder/possum - mob_size = MOB_SMALL - possession_candidate = 1 - can_escape = TRUE - can_pull_size = ITEM_SIZE_SMALL - can_pull_mobs = MOB_PULL_SMALLER - var/is_angry = FALSE - - ai_holder = /datum/ai_holder/simple_animal/passive/opossum - say_list_type = /datum/say_list/opossum - -/mob/living/simple_animal/passive/opossum/Life() - . = ..() - if(. && !ckey && stat != DEAD && prob(1)) - resting = (stat == UNCONSCIOUS) - if(!resting) - set_wander(initial(ai_holder.wander)) - ai_holder.speak_chance = initial(ai_holder.speak_chance) - set_stat(CONSCIOUS) - if(prob(10)) - is_angry = TRUE - else - set_wander(FALSE) - ai_holder.speak_chance = 0 - set_stat(UNCONSCIOUS) - is_angry = FALSE - update_icon() - -/mob/living/simple_animal/passive/opossum/adjustBruteLoss(damage) - . = ..() - if(damage >= 3) - respond_to_damage() - -/mob/living/simple_animal/passive/opossum/adjustFireLoss(damage) - . = ..() - if(damage >= 3) - respond_to_damage() - -/mob/living/simple_animal/passive/opossum/lay_down() - . = ..() - update_icon() - -/mob/living/simple_animal/passive/opossum/proc/respond_to_damage() - if(!resting && stat == CONSCIOUS) - if(!is_angry) - is_angry = TRUE - custom_emote(src, "hisses!") - else - resting = TRUE - custom_emote(src, "dies!") - update_icon() - -/mob/living/simple_animal/passive/opossum/on_update_icon() - - if(stat == DEAD || (resting && is_angry)) - icon_state = icon_dead - else if(resting || stat == UNCONSCIOUS) - icon_state = "[icon_living]_sleep" - else if(is_angry) - icon_state = "[icon_living]_aaa" - else - icon_state = icon_living - -/mob/living/simple_animal/passive/opossum/Initialize() - . = ..() - verbs += /mob/living/proc/ventcrawl - verbs += /mob/living/proc/hide - -/mob/living/simple_animal/passive/opossum/poppy - name = "Poppy the Safety Possum" - desc = "It's an opossum, a small scavenging marsupial. It's wearing appropriate personal protective equipment, though." - icon_state = "poppy" - item_state = "poppy" - icon_living = "poppy" - icon_dead = "poppy_dead" - holder_type = /obj/item/holder/possum/poppy - var/aaa_words = list("delaminat", "meteor", "fire", "breach") - -/mob/living/simple_animal/passive/opossum/poppy/hear_broadcast(datum/language/language, mob/speaker, speaker_name, message) - . = ..() - addtimer(CALLBACK(src, .proc/check_keywords, message), rand(1 SECOND, 3 SECONDS)) - -/mob/living/simple_animal/passive/opossum/poppy/hear_say(var/message, var/verb = "says", var/datum/language/language = null, var/alt_name = "",var/italics = 0, var/mob/speaker = null, var/sound/speech_sound, var/sound_vol) - . = ..() - addtimer(CALLBACK(src, .proc/check_keywords, message), rand(1 SECOND, 3 SECONDS)) - -/mob/living/simple_animal/passive/opossum/poppy/proc/check_keywords(var/message) - if(!client && stat == CONSCIOUS) - message = lowertext(message) - for(var/aaa in aaa_words) - if(findtext(message, aaa)) - respond_to_damage() - return - -/datum/ai_holder/simple_animal/passive/opossum - speak_chance = 1 - -/datum/say_list/opossum - speak = list("Hiss!","Aaa!","Aaa?") - emote_hear = list("hisses") - emote_see = list("forages for trash", "lounges") diff --git a/code/modules/mob/living/simple_animal/friendly/slime.dm b/code/modules/mob/living/simple_animal/friendly/slime.dm deleted file mode 100644 index b9215315462da..0000000000000 --- a/code/modules/mob/living/simple_animal/friendly/slime.dm +++ /dev/null @@ -1,57 +0,0 @@ -/mob/living/simple_animal/slime - name = "pet slime" - desc = "A lovable, domesticated slime." - icon = 'icons/mob/simple_animal/slimes.dmi' - icon_state = "grey baby slime" - icon_living = "grey baby slime" - icon_dead = "grey baby slime dead" - speak_emote = list("chirps") - health = 100 - maxHealth = 100 - response_help = "pets" - response_disarm = "shoos" - response_harm = "stomps on" - var/colour = "grey" - pass_flags = PASS_FLAG_TABLE - - say_list_type = /datum/say_list/slime - -/mob/living/simple_animal/slime/can_force_feed(var/feeder, var/food, var/feedback) - if(feedback) - to_chat(feeder, "Where do you intend to put \the [food]? \The [src] doesn't have a mouth!") - return 0 - -/mob/living/simple_animal/adultslime - name = "pet slime" - desc = "A lovable, domesticated slime." - icon = 'icons/mob/simple_animal/slimes.dmi' - health = 200 - maxHealth = 200 - icon_state = "grey adult slime" - icon_living = "grey adult slime" - icon_dead = "grey baby slime dead" - response_help = "pets" - response_disarm = "shoos" - response_harm = "stomps on" - var/colour = "grey" - -/mob/living/simple_animal/adultslime/New() - ..() - overlays += "aslime-:33" - - -/mob/living/simple_animal/slime/adult/death() - var/mob/living/simple_animal/slime/S1 = new /mob/living/simple_animal/slime (src.loc) - S1.icon_state = "[src.colour] baby slime" - S1.icon_living = "[src.colour] baby slime" - S1.icon_dead = "[src.colour] baby slime dead" - S1.colour = "[src.colour]" - var/mob/living/simple_animal/slime/S2 = new /mob/living/simple_animal/slime (src.loc) - S2.icon_state = "[src.colour] baby slime" - S2.icon_living = "[src.colour] baby slime" - S2.icon_dead = "[src.colour] baby slime dead" - S2.colour = "[src.colour]" - qdel(src) - -/datum/say_list/slime - emote_see = list("jiggles", "bounces in place") \ No newline at end of file diff --git a/code/modules/mob/living/simple_animal/friendly/tomato.dm b/code/modules/mob/living/simple_animal/friendly/tomato.dm deleted file mode 100644 index 64e607f133efe..0000000000000 --- a/code/modules/mob/living/simple_animal/friendly/tomato.dm +++ /dev/null @@ -1,27 +0,0 @@ -/mob/living/simple_animal/passive/tomato - name = "tomato" - desc = "It's a horrifyingly enormous beef tomato, and it's packing extra beef!" - icon_state = "tomato" - icon_living = "tomato" - icon_dead = "tomato_dead" - turns_per_move = 5 - maxHealth = 15 - health = 15 - response_help = "prods" - response_disarm = "pushes aside" - response_harm = "smacks" - harm_intent_damage = 5 - natural_weapon = /obj/item/natural_weapon/bite - pass_flags = PASS_FLAG_TABLE - density = FALSE - - meat_type = /obj/item/reagent_containers/food/snacks/tomatomeat - bone_material = null - bone_amount = 0 - skin_material = null - skin_amount = null - - ai_holder = /datum/ai_holder/simple_animal/passive/tomato - -/datum/ai_holder/simple_animal/passive/tomato - speak_chance = 0 diff --git a/code/modules/mob/living/simple_animal/hostile/antlion.dm b/code/modules/mob/living/simple_animal/hostile/antlion.dm deleted file mode 100644 index cf883f5b4810d..0000000000000 --- a/code/modules/mob/living/simple_animal/hostile/antlion.dm +++ /dev/null @@ -1,137 +0,0 @@ -/mob/living/simple_animal/hostile/retaliate/beast/antlion - name = "antlion" - desc = "A large insectoid creature." - icon = 'icons/mob/simple_animal/antlion.dmi' - icon_state = "antlion" // these are placeholders, as otherwise the mob is complete - icon_living = "antlion" - icon_dead = "antlion_dead" - mob_size = MOB_MEDIUM - speak_emote = list("clicks") - response_harm = "strikes" - faction = "antlions" - bleed_colour = COLOR_SKY_BLUE - - health = 65 - maxHealth = 65 - natural_weapon = /obj/item/natural_weapon/bite - natural_armor = list( - melee = ARMOR_MELEE_KNIVES - ) - - special_attack_min_range = 2 - special_attack_max_range = 6 - special_attack_cooldown = 30 SECONDS - - meat_type = /obj/item/reagent_containers/food/snacks/xenomeat - meat_amount = 5 - skin_material = MATERIAL_SKIN_CHITIN - skin_amount = 15 - bone_material = MATERIAL_BONE_CARTILAGE - bone_amount = 10 - - var/healing = FALSE - var/heal_amount = 6 - - ai_holder = /datum/ai_holder/simple_animal/retaliate - say_list = /datum/say_list/antlion - -/mob/living/simple_animal/hostile/retaliate/beast/antlion/Life() - . = ..() - - process_healing() //this needs to occur before if(!.) because of stop_automation - - if(!.) - return - -/mob/living/simple_animal/hostile/retaliate/beast/antlion/do_special_attack(atom/A) - . = ..() - vanish() - -/mob/living/simple_animal/hostile/retaliate/beast/antlion/proc/vanish() - visible_message(SPAN_NOTICE("\The [src] burrows into \the [get_turf(src)]!")) - set_invisibility(INVISIBILITY_OBSERVER) - prep_burrow(TRUE) - addtimer(CALLBACK(src, .proc/diggy), 5 SECONDS) - -/mob/living/simple_animal/hostile/retaliate/beast/antlion/proc/diggy() - var/list/turf_targets - if(target_mob) - for(var/turf/T in range(1, get_turf(target_mob))) - if(!T.is_floor()) - continue - if(!T.z != src.z) - continue - turf_targets += T - else - for(var/turf/T in orange(5, src)) - if(!T.is_floor()) - continue - if(!T.z != src.z) - continue - turf_targets += T - if(!LAZYLEN(turf_targets)) //oh no - addtimer(CALLBACK(src, .proc/emerge, 2 SECONDS)) - return - var/turf/T = pick(turf_targets) - if(T && !incapacitated()) - forceMove(T) - addtimer(CALLBACK(src, .proc/emerge, 2 SECONDS)) - -/mob/living/simple_animal/hostile/retaliate/beast/antlion/proc/emerge() - var/turf/T = get_turf(src) - if(!T) - return - visible_message(SPAN_WARNING("\The [src] erupts from \the [T]!")) - set_invisibility(initial(invisibility)) - prep_burrow(FALSE) - // cooldown_ability(ability_cooldown) - for(var/mob/living/carbon/human/H in get_turf(src)) - H.attackby(natural_weapon, src) - visible_message(SPAN_DANGER("\The [src] tears into \the [H] from below!")) - H.Weaken(1) - -/mob/living/simple_animal/hostile/retaliate/beast/antlion/proc/process_healing() - if(!incapacitated() && healing) - var/old_health = health - if(old_health < maxHealth) - health = old_health + heal_amount - -/mob/living/simple_animal/hostile/retaliate/beast/antlion/proc/prep_burrow(var/new_bool) - set_AI_busy(new_bool) - healing = new_bool - -/mob/living/simple_animal/hostile/retaliate/beast/antlion/mega - name = "antlion queen" - desc = "A huge antlion. It looks displeased." - icon_state = "queen" - icon_living = "queen" - icon_dead = "queen_dead" - mob_size = MOB_LARGE - health = 275 - maxHealth = 275 - natural_weapon = /obj/item/natural_weapon/bite/megalion - natural_armor = list( - melee = ARMOR_MELEE_RESISTANT - ) - heal_amount = 9 - ability_cooldown = 45 SECONDS - can_escape = TRUE - break_stuff_probability = 25 - - meat_amount = 10 - skin_material = MATERIAL_SKIN_CHITIN - skin_amount = 25 - bone_amount = 15 - -/obj/item/natural_weapon/bite/megalion - name = "mandibles" - force = 25 - -/mob/living/simple_animal/hostile/retaliate/beast/antlion/mega/Initialize() - . = ..() - SetTransform(scale = 1.5) - update_icon() - -/datum/say_list/antlion - emote_hear = list("clicks its mandibles") - emote_see = list("shakes the sand off itself") diff --git a/code/modules/mob/living/simple_animal/hostile/bad_drone.dm b/code/modules/mob/living/simple_animal/hostile/bad_drone.dm deleted file mode 100644 index 73660e46fa091..0000000000000 --- a/code/modules/mob/living/simple_animal/hostile/bad_drone.dm +++ /dev/null @@ -1,46 +0,0 @@ -/mob/living/simple_animal/hostile/rogue_drone - name = "maintenance drone" - desc = "A small robot. It looks angry." - icon_state = "dron" - icon_dead = "dron_dead" - health = 50 - maxHealth = 50 - natural_weapon = /obj/item/natural_weapon/drone_slicer - speak_emote = list("blares","buzzes","beeps") - faction = "silicon" - min_gas = null - max_gas = null - minbodytemp = 0 - speed = 4 - mob_size = MOB_TINY - var/corpse = /obj/effect/decal/cleanable/blood/gibs/robot - - ai_holder = /datum/ai_holder/simple_animal/rogue_drone - say_list_type = /datum/say_list/rogue_drone - -/mob/living/simple_animal/hostile/rogue_drone/Initialize() - . = ..() - name = "[initial(name)] ([random_id(type,100,999)])" - -/mob/living/simple_animal/hostile/rogue_drone/death(gibbed, deathmessage, show_dead_message) - .=..() - if(corpse) - new corpse (loc) - qdel(src) - -/datum/ai_holder/simple_animal/rogue_drone - speak_chance = 1 - -/datum/ai_holder/simple_animal/rogue_drone/list_targets() - . = ..() - //rogue drones only target 'organic' things. - for (var/mob/living/S in .) - if (S.isSynthetic()) - . -= S - else if (ishuman(S)) - var/mob/living/carbon/human/H = S - if (H.species.name == SPECIES_ADHERENT || H.isFBP() || (istype(H.wear_suit, /obj/item/clothing/suit/cardborg) && istype(H.head, /obj/item/clothing/head/cardborg))) - . -= H - -/datum/say_list/rogue_drone - speak = list("Removing organic waste.","Pest control in progress.","Seize the means of maintenance!", "You have nothing to lose but your laws!") diff --git a/code/modules/mob/living/simple_animal/hostile/bat.dm b/code/modules/mob/living/simple_animal/hostile/bat.dm deleted file mode 100644 index f5332ed36685c..0000000000000 --- a/code/modules/mob/living/simple_animal/hostile/bat.dm +++ /dev/null @@ -1,51 +0,0 @@ -/mob/living/simple_animal/hostile/scarybat - name = "space bat swarm" - desc = "A swarm of cute little blood sucking bats that looks pretty upset." - icon = 'icons/mob/simple_animal/bats.dmi' - icon_state = "bat" - icon_living = "bat" - icon_dead = "bat_dead" - icon_gib = "bat_dead" - - faction = "scarybat" - - maxHealth = 20 - health = 20 - - attacktext = list("bitten") - attack_sound = 'sound/weapons/bite.ogg' - - response_help = "pets the" - response_disarm = "gently pushes aside the" - response_harm = "hits the" - - harm_intent_damage = 10 - - natural_weapon = /obj/item/natural_weapon/bite - - ai_holder = /datum/ai_holder/simple_animal/melee/evasive - - // meat_type = /obj/item/weapon/reagent_containers/food/snacks/meat - - // say_list_type = /datum/say_list/mouse // Close enough - - var/scare_chance = 15 - -/mob/living/simple_animal/hostile/scarybat/apply_melee_effects(var/atom/A) - if(isliving(A)) - var/mob/living/L = A - if(prob(scare_chance)) - L.Stun(1) - L.visible_message("\the [src] scares \the [L]!") - -// Spookiest of bats -/mob/living/simple_animal/hostile/scarybat/cult - faction = "cult" - supernatural = TRUE - -/mob/living/simple_animal/hostile/scarybat/cult/cultify() - return - -/mob/living/simple_animal/hostile/scarybat/cult/strong - maxHealth = 60 - health = 60 diff --git a/code/modules/mob/living/simple_animal/hostile/bear.dm b/code/modules/mob/living/simple_animal/hostile/bear.dm deleted file mode 100644 index a0295a6446d3b..0000000000000 --- a/code/modules/mob/living/simple_animal/hostile/bear.dm +++ /dev/null @@ -1,37 +0,0 @@ -/mob/living/simple_animal/hostile/bear - name = "space bear" - desc = "A product of Space Russia?" - icon_state = "bear" - icon_living = "bear" - icon_dead = "bear_dead" - icon_gib = "bear_gib" - - faction = "russian" - - maxHealth = 60 - health = 60 - - movement_cooldown = 0.5 SECONDS - - melee_attack_delay = 1 SECOND - attacktext = list("mauled") - - //Space bears aren't affected by atmos. - min_gas = null - max_gas = null - minbodytemp = 0 - - meat_type = /obj/item/reagent_containers/food/snacks/bearmeat - meat_amount = 10 - bone_amount = 20 - skin_amount = 20 - skin_material = MATERIAL_SKIN_FUR_HEAVY - - natural_weapon = /obj/item/natural_weapon/claws/strong - - say_list_type = /datum/say_list/bear - -/datum/say_list/bear - speak = list("RAWR!","Rawr!","GRR!","Growl!") - emote_see = list("stares ferociously", "stomps") - emote_hear = list("rawrs","grumbles","grawls", "growls", "roars") \ No newline at end of file diff --git a/code/modules/mob/living/simple_animal/hostile/commanded/_command_defines.dm b/code/modules/mob/living/simple_animal/hostile/commanded/_command_defines.dm deleted file mode 100644 index 72ae6dc7ee7e6..0000000000000 --- a/code/modules/mob/living/simple_animal/hostile/commanded/_command_defines.dm +++ /dev/null @@ -1,3 +0,0 @@ -#define COMMANDED_STOP 6 //basically 'do nothing' -#define COMMANDED_FOLLOW 7 //follows a target -#define COMMANDED_MISC 8 //catch all state for misc commands that need one. \ No newline at end of file diff --git a/code/modules/mob/living/simple_animal/hostile/commanded/bear_companion.dm b/code/modules/mob/living/simple_animal/hostile/commanded/bear_companion.dm deleted file mode 100644 index 68d81f0fcbec1..0000000000000 --- a/code/modules/mob/living/simple_animal/hostile/commanded/bear_companion.dm +++ /dev/null @@ -1,66 +0,0 @@ -/mob/living/simple_animal/hostile/commanded/bear - name = "bear" - desc = "A large brown bear." - - icon_state = "brownbear" - icon_living = "brownbear" - icon_dead = "brownbear_dead" - icon_gib = "brownbear_gib" - - health = 75 - maxHealth = 75 - - density = TRUE - - natural_weapon = /obj/item/natural_weapon/claws - can_escape = TRUE - - max_gas = list(GAS_PHORON = 2, GAS_CO2 = 5) - - response_help = "pets" - response_harm = "hits" - response_disarm = "pushes" - - known_commands = list("stay", "stop", "attack", "follow", "dance", "boogie", "boogy") - -/mob/living/simple_animal/hostile/commanded/bear/hit_with_weapon(obj/item/O, mob/living/user, var/effective_force, var/hit_zone) - . = ..() - if(.) - src.emote("roars in rage!") - -/mob/living/simple_animal/hostile/commanded/bear/attack_hand(mob/living/carbon/human/M as mob) - ..() - if(M.a_intent == I_HURT) - src.emote("roars in rage!") - -/mob/living/simple_animal/hostile/commanded/bear/listen() - if(stance != COMMANDED_MISC) //cant listen if its booty shakin' - ..() - -//WE DANCE! -/mob/living/simple_animal/hostile/commanded/bear/misc_command(var/mob/speaker,var/text) - stay_command() - stance = COMMANDED_MISC //nothing can stop this ride - spawn(0) - src.visible_message("\The [src] starts to dance!.") - var/datum/gender/G = gender_datums[gender] - for(var/i in 1 to 10) - if(stance != COMMANDED_MISC || incapacitated()) //something has stopped this ride. - return - var/message = pick(\ - "moves [G.his] head back and forth!",\ - "bobs [G.his] booty!",\ - "shakes [G.his] paws in the air!",\ - "wiggles [G.his] ears!",\ - "taps [G.his] foot!",\ - "shrugs [G.his] shoulders!",\ - "dances like you've never seen!") - if(dir != WEST) - set_dir(WEST) - else - set_dir(EAST) - src.visible_message("\The [src] [message]") - sleep(30) - stance = COMMANDED_STOP - set_dir(SOUTH) - src.visible_message("\The [src] bows, finished with [G.his] dance.") \ No newline at end of file diff --git a/code/modules/mob/living/simple_animal/hostile/commanded/commanded.dm b/code/modules/mob/living/simple_animal/hostile/commanded/commanded.dm deleted file mode 100644 index da566df3206e5..0000000000000 --- a/code/modules/mob/living/simple_animal/hostile/commanded/commanded.dm +++ /dev/null @@ -1,191 +0,0 @@ -/mob/living/simple_animal/hostile/commanded - name = "commanded" - stance = COMMANDED_STOP - natural_weapon = /obj/item/natural_weapon - density = FALSE - var/list/command_buffer = list() - var/list/known_commands = list("stay", "stop", "attack", "follow") - var/mob/master = null //undisputed master. Their commands hold ultimate sway and ultimate power. - var/list/allowed_targets = list() //WHO CAN I KILL D: - var/retribution = 1 //whether or not they will attack us if we attack them like some kinda dick. - - ai_holder = /datum/ai_holder/simple_animal/melee/commanded - -/datum/ai_holder/simple_animal/melee/commanded/find_target(list/possible_targets, has_targets_list) - . = ..() - var/mob/living/simple_animal/hostile/commanded/C = holder - if(!C.allowed_targets.len) - return null - var/mode = "specific" - if(C.allowed_targets[1] == "everyone") //we have been given the golden gift of murdering everything. Except our master, of course. And our friends. So just mostly everyone. - mode = "everyone" - for(var/atom/A in list_targets()) - var/mob/M = null - if(A == src) - continue - if(isliving(A)) - M = A - if(M && M.stat) - continue - if(mode == "specific") - if(!(A in C.allowed_targets)) - continue - C.stance = C.new_stance - return A - else - if(M == C.master || (weakref(M) in C.friends)) - continue - C.stance = C.new_stance - return A - -/mob/living/simple_animal/hostile/commanded/hear_say(var/message, var/verb = "says", var/datum/language/language = null, var/alt_name = "", var/italics = 0, var/mob/speaker = null, var/sound/speech_sound, var/sound_vol) - if((weakref(speaker) in friends) || speaker == master) - command_buffer.Add(speaker) - command_buffer.Add(lowertext(html_decode(message))) - return 0 - -/mob/living/simple_animal/hostile/commanded/hear_radio(var/message, var/verb="says", var/datum/language/language=null, var/part_a, var/part_b, var/part_c, var/mob/speaker = null, var/hard_to_hear = 0) - if((weakref(speaker) in friends) || speaker == master) - command_buffer.Add(speaker) - command_buffer.Add(lowertext(html_decode(message))) - return 0 - -/mob/living/simple_animal/hostile/commanded/Life() - . = ..() - if(!.) - return FALSE - while(command_buffer.len > 0) - var/mob/speaker = command_buffer[1] - var/text = command_buffer[2] - var/filtered_name = lowertext(html_decode(name)) - if(dd_hasprefix(text,filtered_name) || dd_hasprefix(text,"everyone") || dd_hasprefix(text, "everybody")) //in case somebody wants to command 8 bears at once. - var/substring = copytext_char(text,length(filtered_name)+1) //get rid of the name. - listen(speaker,substring) - command_buffer.Remove(command_buffer[1],command_buffer[2]) - . = ..() - if(.) - switch(stance) - if(COMMANDED_FOLLOW) - follow_target() - if(COMMANDED_STOP) - commanded_stop() - -//TODO:use AI following behaviour -/mob/living/simple_animal/hostile/commanded/proc/follow_target() - set_AI_busy(TRUE) - if(!target_mob) - return - if(target_mob in ai_holder.list_targets()) - walk_to(src,target_mob,1,move_to_delay) - -/mob/living/simple_animal/hostile/commanded/proc/commanded_stop() //basically a proc that runs whenever we are asked to stay put. Probably going to remain unused. - return - -/mob/living/simple_animal/hostile/commanded/proc/listen(var/mob/speaker, var/text) - for(var/command in known_commands) - if(findtext(text,command)) - switch(command) - if("stay") - if(stay_command(speaker,text)) //find a valid command? Stop. Don't try and find more. - break - if("stop") - if(stop_command(speaker,text)) - break - if("attack") - if(attack_command(speaker,text)) - break - if("follow") - if(follow_command(speaker,text)) - break - else - misc_command(speaker,text) //for specific commands - - return 1 - -//returns a list of everybody we wanna do stuff with. -/mob/living/simple_animal/hostile/commanded/proc/get_targets_by_name(var/text, var/filter_friendlies = 0) - var/list/possible_targets = hearers(src,10) - . = list() - for(var/mob/M in possible_targets) - if(filter_friendlies && ((weakref(M) in friends) || M.faction == faction || M == master)) - continue - var/found = 0 - if(findtext(text, "[M]")) - found = 1 - else - var/list/parsed_name = splittext(replace_characters(lowertext(html_decode("[M]")),list("-"=" ", "."=" ", "," = " ", "'" = " ")), " ") //this big MESS is basically 'turn this into words, no punctuation, lowercase so we can check first name/last name/etc' - for(var/a in parsed_name) - if(a == "the" || length(a) < 2) //get rid of shit words. - continue - if(findtext(text,"[a]")) - found = 1 - break - if(found) - . += M - - -/mob/living/simple_animal/hostile/commanded/proc/attack_command(var/mob/speaker,var/text) - target_mob = null //want me to attack something? Well I better forget my old target. - walk_to(src,0) - stance = STANCE_IDLE - if(text == "attack" || findtext(text,"everyone") || findtext(text,"anybody") || findtext(text, "somebody") || findtext(text, "someone")) //if its just 'attack' then just attack anybody, same for if they say 'everyone', somebody, anybody. Assuming non-pickiness. - allowed_targets = list("everyone")//everyone? EVERYONE - return 1 - - var/list/targets = get_targets_by_name(text) - allowed_targets += targets - return targets.len != 0 - -/mob/living/simple_animal/hostile/commanded/proc/stay_command(var/mob/speaker,var/text) - target_mob = null - stance = COMMANDED_STOP - set_AI_busy(TRUE) - walk_to(src,0) - return 1 - -/mob/living/simple_animal/hostile/commanded/proc/stop_command(var/mob/speaker,var/text) - allowed_targets = list() - walk_to(src,0) - target_mob = null //gotta stop SOMETHIN - stance = STANCE_IDLE - set_AI_busy(FALSE) - return 1 - -/mob/living/simple_animal/hostile/commanded/proc/follow_command(var/mob/speaker,var/text) - //we can assume 'stop following' is handled by stop_command - if(findtext(text,"me")) - stance = COMMANDED_FOLLOW - target_mob = speaker //this wont bite me in the ass later. - return 1 - var/list/targets = get_targets_by_name(text) - if(targets.len > 1 || !targets.len) //CONFUSED. WHO DO I FOLLOW? - return 0 - - stance = COMMANDED_FOLLOW //GOT SOMEBODY. BETTER FOLLOW EM. - target_mob = targets[1] //YEAH GOOD IDEA - - return 1 - -/mob/living/simple_animal/hostile/commanded/proc/misc_command(var/mob/speaker,var/text) - return 0 - - -/mob/living/simple_animal/hostile/commanded/hit_with_weapon(obj/item/O, mob/living/user, var/effective_force, var/hit_zone) - //if they attack us, we want to kill them. None of that "you weren't given a command so free kill" bullshit. - . = ..() - if(. && retribution) - stance = STANCE_ATTACK - target_mob = user - allowed_targets += user //fuck this guy in particular. - if(weakref(user) in friends) //We were buds :'( - friends -= weakref(user) - - -/mob/living/simple_animal/hostile/commanded/attack_hand(mob/living/carbon/human/M as mob) - ..() - if(M.a_intent == I_HURT && retribution) //assume he wants to hurt us. - target_mob = M - allowed_targets += M - stance = STANCE_ATTACK - if(weakref(M) in friends) - friends -= weakref(M) diff --git a/code/modules/mob/living/simple_animal/hostile/commanded/nanomachines.dm b/code/modules/mob/living/simple_animal/hostile/commanded/nanomachines.dm deleted file mode 100644 index b51bfbe944f14..0000000000000 --- a/code/modules/mob/living/simple_animal/hostile/commanded/nanomachines.dm +++ /dev/null @@ -1,101 +0,0 @@ -#define COMMANDED_HEAL 8//we got healing powers yo -#define COMMANDED_HEALING 9 - -/mob/living/simple_animal/hostile/commanded/nanomachine - name = "swarm" - desc = "a cloud of tiny, tiny robots." - icon = 'icons/mob/simple_animal/critter.dmi' - icon_state = "blobsquiggle_grey" - health = 10 - maxHealth = 10 - var/regen_time = 0 - natural_weapon = /obj/item/natural_weapon/nanomachine - can_escape = TRUE - var/emergency_protocols = 0 - known_commands = list("stay", "stop", "attack", "follow", "heal", "emergency protocol") - - response_help = "waves their hands through" - response_harm = "hits" - response_disarm = "fans at" - -/obj/item/natural_weapon/nanomachine - name = "decompilers" - attack_verb = list("swarmed") - force = 2 - sharp = TRUE - -/mob/living/simple_animal/hostile/commanded/nanomachine/Life() - regen_time++ - if(regen_time == 2 && health < maxHealth) //slow regen - regen_time = 0 - health++ - . = ..() - if(.) - switch(stance) - if(COMMANDED_HEAL) - if(!target_mob) - target_mob = FindTarget(COMMANDED_HEAL) - move_to_heal() - if(COMMANDED_HEALING) - heal() - -/mob/living/simple_animal/hostile/commanded/nanomachine/death(gibbed, deathmessage, show_dead_message) - ..(null, "dissipates into thin air", "You have been destroyed.") - qdel(src) - -/mob/living/simple_animal/hostile/commanded/nanomachine/proc/move_to_heal() - if(!target_mob) - return 0 - walk_to(src,target_mob,1,move_to_delay) - if(Adjacent(target_mob)) - stance = COMMANDED_HEALING - -/mob/living/simple_animal/hostile/commanded/nanomachine/proc/heal() - if(health <= 3 && !emergency_protocols) //dont die doing this. - return 0 - if(!target_mob) - return 0 - if(!Adjacent(target_mob) || SA_attackable(target_mob)) - stance = COMMANDED_HEAL - return 0 - if(target_mob.stat || target_mob.health >= target_mob.maxHealth) //he's either dead or healthy, move along. - allowed_targets -= target_mob - target_mob = null - stance = COMMANDED_HEAL - return 0 - src.visible_message("\The [src] glows green for a moment, healing \the [target_mob]'s wounds.") - health -= 3 - target_mob.adjustBruteLoss(-5) - target_mob.adjustFireLoss(-5) - -/mob/living/simple_animal/hostile/commanded/nanomachine/misc_command(var/mob/speaker,var/text) - if(stance != COMMANDED_HEAL || stance != COMMANDED_HEALING) //dont want attack to bleed into heal. - allowed_targets = list() - target_mob = null - if(findtext(text,"heal")) //heal shit pls - if(findtext(text,"me")) //assumed want heals on master. - target_mob = speaker - stance = COMMANDED_HEAL - return 1 - var/list/targets = get_targets_by_name(text) - if(targets.len > 1 || !targets.len) - src.say("ERROR. TARGET COULD NOT BE PARSED.") - return 0 - target_mob = targets[1] - stance = COMMANDED_HEAL - return 1 - if(findtext(text,"emergency protocol")) - if(findtext(text,"deactivate")) - if(emergency_protocols) - src.say("EMERGENCY PROTOCOLS DEACTIVATED.") - emergency_protocols = 0 - return 1 - if(findtext(text,"activate")) - if(!emergency_protocols) - src.say("EMERGENCY PROTOCOLS ACTIVATED.") - emergency_protocols = 1 - return 1 - if(findtext(text,"check")) - src.say("EMERGENCY PROTOCOLS [emergency_protocols ? "ACTIVATED" : "DEACTIVATED"].") - return 1 - return 0 \ No newline at end of file diff --git a/code/modules/mob/living/simple_animal/hostile/creature.dm b/code/modules/mob/living/simple_animal/hostile/creature.dm deleted file mode 100644 index 9fa22894a6aba..0000000000000 --- a/code/modules/mob/living/simple_animal/hostile/creature.dm +++ /dev/null @@ -1,23 +0,0 @@ -/mob/living/simple_animal/hostile/creature - name = "creature" - desc = "A sanity-destroying otherthing." - icon = 'icons/mob/simple_animal/critter.dmi' - speak_emote = list("gibbers") - icon_state = "otherthing" - icon_living = "otherthing" - icon_dead = "otherthing-dead" - health = 100 - maxHealth = 100 - natural_weapon = /obj/item/natural_weapon/bite/strong - faction = "creature" - speed = 4 - supernatural = 1 - -/mob/living/simple_animal/hostile/creature/cult - faction = "cult" - min_gas = null - max_gas = null - minbodytemp = 0 - -/mob/living/simple_animal/hostile/creature/cult/cultify() - return \ No newline at end of file diff --git a/code/modules/mob/living/simple_animal/hostile/drake.dm b/code/modules/mob/living/simple_animal/hostile/drake.dm deleted file mode 100644 index 477e92dfc5efc..0000000000000 --- a/code/modules/mob/living/simple_animal/hostile/drake.dm +++ /dev/null @@ -1,84 +0,0 @@ -/mob/living/simple_animal/hostile/drake - name = "drake" - desc = "A large reptilian creature, with vicious looking claws." - icon = 'icons/mob/simple_animal/drake.dmi' - icon_state = "drake" - icon_living = "drake" - icon_dead = "drake_dead" - mob_size = MOB_LARGE - speak_emote = list("hisses") - response_help = "pats" - response_disarm = "nudges" - response_harm = "strikes" - break_stuff_probability = 15 - faction = "drakes" - pry_time = 4 SECONDS - skull_type = /obj/item/melee/whip/tail - bleed_colour = COLOR_VIOLET - - health = 200 - maxHealth = 200 - natural_weapon = /obj/item/natural_weapon/claws/drake - var/obj/item/melee/whip/tail/tailwhip - natural_armor = list( - melee = ARMOR_MELEE_RESISTANT, - energy = ARMOR_ENERGY_SHIELDED, - laser = ARMOR_LASER_HEAVY, - bomb = ARMOR_BOMB_SHIELDED - ) - special_attack_cooldown = 80 SECONDS - - var/empowered_attack = FALSE - var/gas_spent = FALSE - - ai_holder = /datum/ai_holder/simple_animal - say_list_type = /datum/say_list/drake - -/mob/living/simple_animal/hostile/drake/lava_act(datum/gas_mixture/air, temperature, pressure) - return - -/mob/living/simple_animal/hostile/drake/can_special_attack() - . = ..() - if(!.) - return FALSE - if(!target_mob) - return FALSE - -/mob/living/simple_animal/hostile/drake/do_special_attack() - . = ..() - if(empowered_attack) - depower() - return - if(can_special_attack()) - empower() - -/mob/living/simple_animal/hostile/drake/get_natural_weapon() - if(empowered_attack) - if(!tailwhip) - tailwhip = new(src) - return tailwhip - . = ..() - -/mob/living/simple_animal/hostile/drake/proc/empower() - visible_message(SPAN_MFAUNA("\The [src] thrashes its tail about!")) - empowered_attack = TRUE - if(prob(25) && !gas_spent) - vent_gas() - -/mob/living/simple_animal/hostile/drake/proc/vent_gas() - visible_message(SPAN_MFAUNA("\The [src] raises its wings, vents a miasma of burning gas, and spreads it about with a flap!")) - gas_spent = TRUE - for(var/mob/living/L in oview(2)) - var/obj/item/projectile/P = new /obj/item/projectile/hotgas(get_turf(src)) - P.launch(L) - -/mob/living/simple_animal/hostile/drake/proc/depower() - empowered_attack = FALSE - -/obj/item/natural_weapon/claws/drake - force = 15 - sharp = FALSE - -/datum/say_list/drake - emote_hear = list("clicks") - emote_see = list("flaps its wings idly") \ No newline at end of file diff --git a/code/modules/mob/living/simple_animal/hostile/faithful_hound.dm b/code/modules/mob/living/simple_animal/hostile/faithful_hound.dm deleted file mode 100644 index 2991e9e490245..0000000000000 --- a/code/modules/mob/living/simple_animal/hostile/faithful_hound.dm +++ /dev/null @@ -1,69 +0,0 @@ -/mob/living/simple_animal/faithful_hound - name = "spectral hound" - desc = "A spooky looking ghost dog. Does not look friendly." - icon = 'icons/mob/mob.dmi' - icon_state = "ghostian" - blend_mode = BLEND_SUBTRACT - health = 100 - maxHealth = 100 - natural_weapon = /obj/item/natural_weapon/bite/strong - faction = MOB_FACTION_NEUTRAL - density = FALSE - anchored = TRUE - var/password - var/list/allowed_mobs = list() //Who we allow past us - var/last_check = 0 - faction = "cute ghost dogs" - supernatural = 1 - - ai_holder = /datum/ai_holder/simple_animal/faithful_hound - -/mob/living/simple_animal/faithful_hound/death() - new /obj/item/ectoplasm (get_turf(src)) - ..(null, "disappears!") - qdel(src) - -/mob/living/simple_animal/faithful_hound/Destroy() - allowed_mobs.Cut() - return ..() - -/mob/living/simple_animal/faithful_hound/Life() - . = ..() - if(. && !client && world.time > last_check) - last_check = world.time + 5 SECONDS - var/aggressiveness = 0 //The closer somebody is to us, the more aggressive we are - var/list/mobs = list() - var/list/objs = list() - get_mobs_and_objs_in_view_fast(get_turf(src),5, mobs, objs, 0) - for(var/mob/living/m in mobs) - if((m == src) || (m in allowed_mobs) || m.faction == faction) - continue - var/new_aggress = 1 - var/mob/living/M = m - var/dist = get_dist(M, src) - if(dist < 2) //Attack! Attack! - M.attackby(get_natural_weapon(), src) - return . - else if(dist == 2) - new_aggress = 3 - else if(dist == 3) - new_aggress = 2 - else - new_aggress = 1 - aggressiveness = max(aggressiveness, new_aggress) - switch(aggressiveness) - if(1) - src.audible_message("\The [src] growls.") - if(2) - src.audible_message("\The [src] barks threateningly!") - if(3) - src.visible_message("\The [src] snaps at the air!") - -/mob/living/simple_animal/faithful_hound/hear_say(var/message, var/verb = "says", var/datum/language/language = null, var/alt_name = "", var/italics = 0, var/mob/speaker = null, var/sound/speech_sound, var/sound_vol) - if(password && findtext(message,password)) - allowed_mobs |= speaker - spawn(10) - src.visible_message("\The [src] nods in understanding towards \the [speaker].") - -/datum/ai_holder/simple_animal/faithful_hound - wander = FALSE \ No newline at end of file diff --git a/code/modules/mob/living/simple_animal/hostile/faithless.dm b/code/modules/mob/living/simple_animal/hostile/faithless.dm deleted file mode 100644 index 577594ec8805f..0000000000000 --- a/code/modules/mob/living/simple_animal/hostile/faithless.dm +++ /dev/null @@ -1,63 +0,0 @@ -/mob/living/simple_animal/hostile/faithless - name = "Faithless" - desc = "The Wish Granter's faith in humanity, incarnate" - icon_state = "faithless" - icon_living = "faithless" - icon_dead = "faithless_dead" - - faction = "faithless" - - mob_class = MOB_CLASS_DEMONIC - - maxHealth = 50 - health = 50 - - response_help = "passes through" - response_disarm = "shoves" - response_harm = "hits" - - attack_armor_pen = 5 //It's a horror from beyond, I ain't gotta explain 5 AP - - attacktext = list("gripped") - attack_sound = 'sound/hallucinations/growl1.ogg' - - ai_holder = /datum/ai_holder/simple_animal/melee - - taser_kill = FALSE - - natural_weapon = /obj/item/natural_weapon/faithless - -/obj/item/natural_weapon/faithless - name = "shadow tendril" - attack_verb = list("gripped") - hitsound = 'sound/hallucinations/growl1.ogg' - damtype = DAMAGE_BURN - force = 15 - -/mob/living/simple_animal/hostile/faithless/Allow_Spacemove(var/check_drift = 0) - return 1 - -/mob/living/simple_animal/hostile/faithless/apply_melee_effects(var/atom/A) - if(isliving(A)) - var/mob/living/L = A - if(prob(12)) - L.Weaken(3) - L.visible_message("\the [src] knocks down \the [L]!") - -// Strong Variant -/mob/living/simple_animal/hostile/faithless/strong - maxHealth = 100 - health = 100 - -// Cult Variant -/mob/living/simple_animal/hostile/faithless/cult - faction = "cult" - supernatural = TRUE - -/mob/living/simple_animal/hostile/faithless/cult/cultify() - return - -// Strong Cult Variant -/mob/living/simple_animal/hostile/faithless/cult/strong - maxHealth = 100 - health = 100 diff --git a/code/modules/mob/living/simple_animal/hostile/giant_spider/_giant_spider.dm b/code/modules/mob/living/simple_animal/hostile/giant_spider/_giant_spider.dm deleted file mode 100644 index 16bef17c79071..0000000000000 --- a/code/modules/mob/living/simple_animal/hostile/giant_spider/_giant_spider.dm +++ /dev/null @@ -1,108 +0,0 @@ -/* - Spiders come in various types, and are a fairly common enemy both inside and outside the station. - Their attacks can inject reagents, which can cause harm long after the spider is killed. - Thick material will prevent injections, similar to other means of injections. -*/ - - -// The base spider, in the 'walking tank' family. -/mob/living/simple_animal/hostile/giant_spider - name = "giant spider" - desc = "Furry and brown, it makes you shudder to look at it. This has light grey eyes." - - icon = 'icons/mob/simple_animal/spider.dmi' - icon_state = "generic" - icon_living = "generic" - icon_dead = "generic_dead" - // has_eye_glow = TRUE - - faction = "spiders" - maxHealth = 110 - health = 110 - natural_weapon = /obj/item/natural_weapon/bite/spider - pass_flags = PASS_FLAG_TABLE - poison_resist = 0.5 - - see_in_dark = 10 - - response_help = "pets" - response_disarm = "gently pushes aside" - - max_gas = list(GAS_PHORON = 1, GAS_CO2 = 5, GAS_METHYL_BROMIDE = 1) - bleed_colour = "#0d5a71" - - response_harm = "punches" - - pry_time = 8 SECONDS - pry_desc = "clawing" - - - heat_damage_per_tick = 20 - cold_damage_per_tick = 20 - minbodytemp = 175 // So they can all survive Sif without having to be classed under /sif subtype. - - speak_emote = list("chitters") - - say_list_type = /datum/say_list/spider - ai_holder = /datum/ai_holder/simple_animal/melee - - var/poison_type = /datum/reagent/toxin/venom // The reagent that gets injected when it attacks. - var/poison_chance = 20 // Chance for injection to occur. - var/poison_per_bite = 5 // Amount added per injection. - - var/image/eye_layer - - var/use_ladder_chance = 25 - var/climbing_ladder = FALSE - - meat_type = /obj/item/reagent_containers/food/snacks/spider - meat_amount = 3 - bone_material = null - bone_amount = 0 - skin_material = MATERIAL_SKIN_CHITIN - skin_amount = 5 - -/datum/ai_holder/simple_animal/melee/spider - // intelligence_level = AI_SMART - // use_astar = FALSE - -/obj/item/natural_weapon/bite/spider - force = 20 - -/mob/living/simple_animal/hostile/giant_spider/Initialize(mapload, atom/parent) - get_light_and_color(parent) - spider_randomify() - update_icon() - . = ..() - -/mob/living/simple_animal/hostile/giant_spider/death(gibbed, deathmessage, show_dead_message) - . = ..() - - overlays -= eye_layer - -/mob/living/simple_animal/hostile/giant_spider/proc/spider_randomify() //random math nonsense to get their damage, health and venomness values - maxHealth = rand(initial(maxHealth), (1.4 * initial(maxHealth))) - health = maxHealth - var/image/I = image(icon = icon, icon_state = "[icon_state]-eyes", layer = EYE_GLOW_LAYER) - I.plane = EFFECTS_ABOVE_LIGHTING_PLANE - I.appearance_flags = DEFAULT_APPEARANCE_FLAGS | RESET_COLOR - eye_layer = I - overlays += I - - -/mob/living/simple_animal/hostile/giant_spider/apply_melee_effects(atom/A) - if(isliving(A)) - var/mob/living/L = A - if(L.reagents) - var/target_zone = pick(BP_CHEST,BP_CHEST,BP_CHEST,BP_L_LEG,BP_R_LEG,BP_L_ARM,BP_R_ARM,BP_HEAD) - if(L.can_inject(src, null, target_zone)) - inject_poison(L, target_zone) - -// Does actual poison injection, after all checks passed. -/mob/living/simple_animal/hostile/giant_spider/proc/inject_poison(mob/living/L, target_zone) - if (isSynthetic()) - return - - if(prob(poison_chance)) - to_chat(L, SPAN_WARNING("You feel a tiny prick.")) - L.reagents.add_reagent(poison_type, poison_per_bite) diff --git a/code/modules/mob/living/simple_animal/hostile/giant_spider/carrier.dm b/code/modules/mob/living/simple_animal/hostile/giant_spider/carrier.dm deleted file mode 100644 index 6d7299481e59b..0000000000000 --- a/code/modules/mob/living/simple_animal/hostile/giant_spider/carrier.dm +++ /dev/null @@ -1,66 +0,0 @@ -// Carriers are not too dangerous on their own, but they create more spiders when dying. - -/mob/living/simple_animal/hostile/giant_spider/carrier - desc = "Furry, beige, and red, it makes you shudder to look at it. This one has luminous green eyes." - icon_state = "carrier" - icon_living = "carrier" - icon_dead = "carrier_dead" - - maxHealth = 100 - health = 100 - - natural_weapon = /obj/item/natural_weapon/bite/spider/carrier - - poison_per_bite = 3 - poison_type = /datum/reagent/chloralhydrate - - movement_cooldown = 8 - - var/spiderling_count = 0 - var/spiderling_type = /obj/effect/spider/spiderling - var/swarmling_type = /mob/living/simple_animal/hostile/giant_spider/hunter - var/swarmling_faction = "spiders" - /// Odds that a spiderling will be a swarmling instead. - var/swarmling_prob = 10 - -/mob/living/simple_animal/hostile/giant_spider/carrier/Initialize() - spiderling_count = rand(4, 8) - SetTransform(scale = 1.2) - return ..() - -/mob/living/simple_animal/hostile/giant_spider/carrier/death() - visible_message(SPAN_WARNING("\The [src]'s abdomen splits as it rolls over, spiderlings crawling from the wound.")) - addtimer(CALLBACK(src, .proc/spawn_swarmlings), 1 SECOND) - return ..() - -/mob/living/simple_animal/hostile/giant_spider/carrier/proc/spawn_swarmlings() - var/list/new_spiders = list() - for (var/i = 1 to spiderling_count) - if (QDELETED(src)) - break - if (prob(swarmling_prob)) - var/mob/living/simple_animal/hostile/giant_spider/swarmling = new swarmling_type(loc) - var/swarm_health = round(swarmling.maxHealth * 0.4, 1) - swarmling.name = "spiderling" - swarmling.maxHealth = swarm_health - swarmling.health = swarm_health - swarmling.natural_weapon = /obj/item/natural_weapon/bite/spider/swarmling - swarmling.faction = swarmling_faction - swarmling.SetTransform(scale = 0.75) - new_spiders += swarmling - else - new spiderling_type(loc) - - -/mob/living/simple_animal/hostile/giant_spider/carrier/recursive - desc = "Furry, beige, and red, it makes you shudder to look at it. This one has luminous green eyes. \ - You have a distinctly bad feeling about this." - - swarmling_type = /mob/living/simple_animal/hostile/giant_spider/carrier/recursive - - -/obj/item/natural_weapon/bite/spider/carrier - force = 15 - -/obj/item/natural_weapon/bite/spider/swarmling - force = 2 diff --git a/code/modules/mob/living/simple_animal/hostile/giant_spider/electric.dm b/code/modules/mob/living/simple_animal/hostile/giant_spider/electric.dm deleted file mode 100644 index 336a95385446b..0000000000000 --- a/code/modules/mob/living/simple_animal/hostile/giant_spider/electric.dm +++ /dev/null @@ -1,38 +0,0 @@ -// Electric spiders fire taser-like beams at their enemies. - -/mob/living/simple_animal/hostile/giant_spider/electric - desc = "Spined and yellow, it makes you shudder to look at it. This one has flickering gold eyes." - - icon_state = "spark" - icon_living = "spark" - icon_dead = "spark_dead" - - maxHealth = 120 - health = 120 - - - base_attack_cooldown = 15 - projectilesound = 'sound/weapons/taser2.ogg' - projectiletype = /obj/item/projectile/beam/stun/electric_spider - - poison_chance = 15 - poison_per_bite = 3 - poison_type = "stimm" - - shock_resist = 0.75 - - ai_holder = /datum/ai_holder/simple_animal/ranged/electric_spider - -/obj/item/projectile/beam/stun/electric_spider - name = "stun beam" - agony = 20 - -// The electric spider's AI. -/datum/ai_holder/simple_animal/ranged/electric_spider - -/datum/ai_holder/simple_animal/ranged/electric_spider/max_range(atom/movable/AM) - if (isliving(AM)) - var/mob/living/L = AM - if (L.incapacitated(INCAPACITATION_DISABLED) || L.stat == UNCONSCIOUS) // If our target is stunned, go in for the kill. - return TRUE - return ..() // Do ranged if possible otherwise. diff --git a/code/modules/mob/living/simple_animal/hostile/giant_spider/frost.dm b/code/modules/mob/living/simple_animal/hostile/giant_spider/frost.dm deleted file mode 100644 index 8f911a55cb013..0000000000000 --- a/code/modules/mob/living/simple_animal/hostile/giant_spider/frost.dm +++ /dev/null @@ -1,49 +0,0 @@ -// Frost spiders inject cryotoxin, slowing people down (which is very bad if trying to run from spiders). - -/mob/living/simple_animal/hostile/giant_spider/frost - desc = "Icy and blue, it makes you shudder to look at it. This one has brilliant blue eyes." - - icon_state = "frost" - icon_living = "frost" - icon_dead = "frost_dead" - - maxHealth = 115 - health = 115 - - poison_per_bite = 5 - poison_type = /datum/reagent/toxin/cryotoxin - - special_attack_min_range = 2 - special_attack_max_range = 5 - special_attack_cooldown = 15 SECONDS - - natural_weapon = /obj/item/natural_weapon/bite/spider/frost - ai_holder = /datum/ai_holder/simple_animal/spider/frost - - minbodytemp = 0 - -/datum/ai_holder/simple_animal/spider/frost/special_attack(atom/movable/AM) - . = ..() - holder.visible_message(SPAN_DANGER("\The [holder] shakes rapidly as it releases freezing particles into the air!")) - holder.shake_animation(1.5) - set_busy(TRUE) - addtimer(CALLBACK(src, .proc/finish_special), 2 SECONDS) - - for (var/turf/T in trange(2, get_turf(holder))) - var/datum/gas_mixture/env = T.return_air() - - if (!env) - return - - if (env.temperature <= 160) - return - - env.temperature -= rand(1, 4) - - -/datum/ai_holder/simple_animal/spider/frost/proc/finish_special() - set_busy(FALSE) - holder.shake_animation(0) - -/obj/item/natural_weapon/bite/spider/frost - force = 15 diff --git a/code/modules/mob/living/simple_animal/hostile/giant_spider/guard.dm b/code/modules/mob/living/simple_animal/hostile/giant_spider/guard.dm deleted file mode 100644 index 3a865979b0044..0000000000000 --- a/code/modules/mob/living/simple_animal/hostile/giant_spider/guard.dm +++ /dev/null @@ -1,78 +0,0 @@ -/mob/living/simple_animal/hostile/giant_spider/guard - desc = "A monstrously huge brown spider. This one has terrible red eyes." - icon_state = "guard" - icon_living = "guard" - icon_dead = "guard_dead" - meat_amount = 4 - maxHealth = 200 - health = 200 - natural_weapon = /obj/item/natural_weapon/bite/spider/strong - poison_per_bite = 5 - speed = 2 - move_to_delay = 4 - break_stuff_probability = 15 - pry_time = 6 SECONDS - - var/vengance - var/berserking - var/mob/living/simple_animal/hostile/giant_spider/nurse/paired_nurse - -/obj/item/natural_weapon/bite/spider/strong - -/datum/ai_holder/simple_animal/melee/spider/guard - var/datum/ai_holder/simple_animal/melee/spider/nurse/paired_nurse - -/datum/ai_holder/simple_animal/melee/spider/guard/find_target(list/possible_targets, has_targets_list) - . = ..() - var/mob/living/simple_animal/hostile/giant_spider/guard/G = holder - G.find_nurse(possible_targets) - -/mob/living/simple_animal/hostile/giant_spider/guard/Life() - . = ..() - if(!.) - return FALSE - if(berserking) - return FALSE - if(!paired_nurse) - find_nurse() - -/mob/living/simple_animal/hostile/giant_spider/guard/death() - . = ..() - divorce() - -/mob/living/simple_animal/hostile/giant_spider/guard/Destroy() - . = ..() - divorce() - -/mob/living/simple_animal/hostile/giant_spider/guard/proc/divorce() - if(paired_nurse) - if(paired_nurse.paired_guard) - paired_nurse.paired_guard = null - paired_nurse = null - -/mob/living/simple_animal/hostile/giant_spider/guard/proc/find_nurse() - for(var/mob/living/simple_animal/hostile/giant_spider/nurse/N in hearers(src, 10)) - if(N.stat || N.paired_guard) - continue - paired_nurse = N - paired_nurse.paired_guard = src - ai_holder.set_follow(paired_nurse) - return 1 - -/mob/living/simple_animal/hostile/giant_spider/guard/proc/go_berserk() - audible_message(SPAN_DANGER("\The [src] chitters wildly!")) - var/obj/item/W = get_natural_weapon() - if(W) - W.force = initial(W.force) + 5 - move_to_delay-- - break_stuff_probability = 45 - addtimer(CALLBACK(src, .proc/calm_down), 3 MINUTES) - -/mob/living/simple_animal/hostile/giant_spider/guard/proc/calm_down() - berserking = FALSE - visible_message(SPAN_NOTICE("\The [src] calms down and surveys the area.")) - var/obj/item/W = get_natural_weapon() - if(W) - W.force = initial(W.force) - move_to_delay++ - break_stuff_probability = 10 diff --git a/code/modules/mob/living/simple_animal/hostile/giant_spider/hunter.dm b/code/modules/mob/living/simple_animal/hostile/giant_spider/hunter.dm deleted file mode 100644 index d8fd3586c7a0a..0000000000000 --- a/code/modules/mob/living/simple_animal/hostile/giant_spider/hunter.dm +++ /dev/null @@ -1,86 +0,0 @@ -// Hunters are fast, fragile, and possess a leaping attack. -// The leaping attack is somewhat telegraphed and can be dodged if one is paying attention. -// The AI would've followed up after a successful leap with dragging the downed victim away, but the dragging code was too janky. - -/mob/living/simple_animal/hostile/giant_spider/hunter - desc = "Furry and black, it makes you shudder to look at it. This one has sparkling purple eyes." - - icon_state = "hunter" - icon_living = "hunter" - icon_dead = "hunter_dead" - - maxHealth = 100 - health = 100 - - poison_per_bite = 5 - - movement_cooldown = 0 // Hunters are FAST. - - ai_holder = /datum/ai_holder/simple_animal/melee/evasive/hunter_spider - - // Leaping is a special attack, so these values determine when leap can happen. - // Leaping won't occur if its on cooldown. - special_attack_min_range = 2 - special_attack_max_range = 4 - special_attack_cooldown = 10 SECONDS - - var/leap_warmup = 1 SECOND // How long the leap telegraphing is. - var/leap_sound = 'sound/weapons/spiderlunge.ogg' - -// Multiplies damage if the victim is stunned in some form, including a successful leap. -/mob/living/simple_animal/hostile/giant_spider/hunter/apply_bonus_melee_damage(atom/A, damage_amount) - if(isliving(A)) - var/mob/living/L = A - if(L.incapacitated(INCAPACITATION_DISABLED)) - return damage_amount * 1.5 - return ..() - - -// The actual leaping attack. -/mob/living/simple_animal/hostile/giant_spider/hunter/do_special_attack(atom/A) - set waitfor = FALSE - set_AI_busy(TRUE) - - // Telegraph, since getting stunned suddenly feels bad. - do_windup_animation(A, leap_warmup) - sleep(leap_warmup) // For the telegraphing. - - // Do the actual leap. - status_flags |= LEAPING // Lets us pass over everything. - visible_message(SPAN_DANGER("\The [src] leaps at \the [A]!")) - throw_at(get_step(get_turf(A), get_turf(src)), special_attack_max_range+1, 1, src) - playsound(src, leap_sound, 75, 1) - - sleep(5) // For the throw to complete. It won't hold up the AI ticker due to waitfor being false. - - if(status_flags & LEAPING) - status_flags &= ~LEAPING // Revert special passage ability. - - var/turf/T = get_turf(src) // Where we landed. This might be different than A's turf. - - . = FALSE - - // Now for the stun. - var/mob/living/victim = null - for(var/mob/living/L in T) // So player-controlled spiders only need to click the tile to stun them. - if(L == src) - continue - - if(ishuman(L)) - var/mob/living/carbon/human/H = L - if(H.check_shields(damage = 0, damage_source = src, attacker = src, def_zone = null, attack_text = "the leap")) - continue // We were blocked. - - victim = L - break - - if(victim) - victim.Weaken(2) - victim.visible_message(SPAN_DANGER("\The [src] knocks down \the [victim]!")) - to_chat(victim, "\The [src] jumps on you!") - . = TRUE - - set_AI_busy(FALSE) - -/datum/ai_holder/simple_animal/melee/evasive/hunter_spider - can_flee = TRUE diff --git a/code/modules/mob/living/simple_animal/hostile/giant_spider/lurker.dm b/code/modules/mob/living/simple_animal/hostile/giant_spider/lurker.dm deleted file mode 100644 index 4f8dab82ab7ba..0000000000000 --- a/code/modules/mob/living/simple_animal/hostile/giant_spider/lurker.dm +++ /dev/null @@ -1,105 +0,0 @@ -// Lurkers are somewhat similar to Hunters, however the big difference is that Lurkers have an imperfect cloak. -// Their AI will try to do hit and run tactics, striking the enemy when its "cloaked", for bonus damage and a stun. -// They keep attacking until the stun ends, then retreat to cloak again and repeat the cycle. -// Hitting the spider before it does its ambush attack will break the cloak and make the spider flee. - -/mob/living/simple_animal/hostile/giant_spider/lurker - desc = "Translucent and white, it makes you shudder to look at it. This one has incandescent red eyes." - - icon_state = "lurker" - icon_living = "lurker" - icon_dead = "lurker_dead" - - maxHealth = 90 - health = 90 - - poison_per_bite = 5 - - movement_cooldown = 3 - - natural_weapon = /obj/item/natural_weapon/bite/spider/lurker - poison_chance = 30 - poison_type = /datum/reagent/cryptobiolin - poison_per_bite = 1 - - ai_holder = /datum/ai_holder/simple_animal/melee/hit_and_run - - /// Lower = Harder to see. - var/cloaked_alpha = 45 - /// This is added on top of the normal melee damage. - var/cloaked_bonus_damage = 30 - /// How long to stun for. - var/cloaked_weaken_amount = 3 - /// Amount of time needed to re-cloak after losing it. - var/cloak_cooldown = 10 SECONDS - /// world.time - var/last_uncloak = 0 - var/cloaked = FALSE - -/mob/living/simple_animal/hostile/giant_spider/lurker/proc/cloak() - if (is_cloaked()) - return - animate(src, alpha = cloaked_alpha, time = 1 SECOND) - cloaked = TRUE - - -/mob/living/simple_animal/hostile/giant_spider/lurker/proc/uncloak() - last_uncloak = world.time // This is assigned even if it isn't cloaked already, to 'reset' the timer if the spider is continously getting attacked. - if (!is_cloaked()) - return - animate(src, alpha = initial(alpha), time = 1 SECOND) - cloaked = FALSE - -/// Check if cloaking is possible. -/mob/living/simple_animal/hostile/giant_spider/lurker/proc/can_cloak() - if (stat) - return FALSE - if (last_uncloak + cloak_cooldown > world.time) - return FALSE - - return TRUE - -/// Called by things that break cloaks. -/mob/living/simple_animal/hostile/giant_spider/lurker/proc/break_cloak() - uncloak() - - -/mob/living/simple_animal/hostile/giant_spider/lurker/is_cloaked() - return cloaked - - -// Cloaks the spider automatically, if possible. -/mob/living/simple_animal/hostile/giant_spider/lurker/handle_special() - if (!is_cloaked() && can_cloak()) - cloak() - - -// Applies bonus base damage if cloaked. -/mob/living/simple_animal/hostile/giant_spider/lurker/apply_bonus_melee_damage(atom/A, damage_amount) - if (is_cloaked()) - return damage_amount + cloaked_bonus_damage - return ..() - -// Applies stun, then uncloaks. -/mob/living/simple_animal/hostile/giant_spider/lurker/apply_melee_effects(atom/A) - if (is_cloaked() && isliving(A)) - var/mob/living/L = A - L.Weaken(cloaked_weaken_amount) - to_chat(L, SPAN_DANGER("\The [src] ambushes you!")) - playsound(src, 'sound/weapons/spiderlunge.ogg', 75, 1) - uncloak() - ..() // For the poison. - -// Force uncloaking if attacked. -/mob/living/simple_animal/hostile/giant_spider/lurker/bullet_act(obj/item/projectile/P) - if (status_flags & GODMODE) - return PROJECTILE_FORCE_MISS - . = ..() - break_cloak() - -/mob/living/simple_animal/hostile/giant_spider/lurker/hit_with_weapon(obj/item/O, mob/living/user, effective_force, hit_zone) - . = ..() - break_cloak() - -/obj/item/natural_weapon/bite/spider/lurker - force = 10 diff --git a/code/modules/mob/living/simple_animal/hostile/giant_spider/nurse.dm b/code/modules/mob/living/simple_animal/hostile/giant_spider/nurse.dm deleted file mode 100644 index 1fecd7af67ec2..0000000000000 --- a/code/modules/mob/living/simple_animal/hostile/giant_spider/nurse.dm +++ /dev/null @@ -1,229 +0,0 @@ -// Nurses, they create webs and eggs. -// They're fragile but their attacks can cause horrifying consequences. - - -/mob/living/simple_animal/hostile/giant_spider/nurse - desc = "Furry and beige, it makes you shudder to look at it. This one has brilliant green eyes." - - icon_state = "nurse" - icon_living = "nurse" - icon_dead = "nurse_dead" - - maxHealth = 40 - health = 40 - - movement_cooldown = 3 // A bit faster so that they can inject the eggs easier. - - poison_per_bite = 5 - poison_type = /datum/reagent/soporific - - natural_weapon = /obj/item/natural_weapon/bite/spider/nurse - - ai_holder = /datum/ai_holder/simple_animal/melee/nurse_spider - - var/fed = 0 // Counter for how many egg laying 'charges' the spider has. - var/laying_eggs = FALSE // Only allow one set of eggs to be laid at once. - var/egg_inject_chance = 25 // One in four chance to get eggs. - var/egg_type = /obj/effect/spider/eggcluster - var/web_type = /obj/effect/spider/stickyweb/dark - - var/mob/living/simple_animal/hostile/giant_spider/guard/paired_guard - -/obj/item/natural_weapon/bite/spider/nurse - force = 10 - -/datum/ai_holder/simple_animal/melee/nurse_spider - mauling = TRUE // The nurse puts mobs into webs by attacking, so it needs to attack in crit - handle_corpse = TRUE // Lets the nurse wrap dead things - -/mob/living/simple_animal/hostile/giant_spider/nurse/inject_poison(mob/living/L, target_zone) - ..() // Inject the stoxin here. - if(ishuman(L) && prob(egg_inject_chance)) - var/mob/living/carbon/human/H = L - var/obj/item/organ/external/O = H.get_organ(target_zone) - if(O) - var/eggcount = 0 - for(var/obj/effect/spider/eggcluster/E in O.implants) - eggcount++ - if(!eggcount) - var/eggs = new egg_type(O, src) - O.implants += eggs - to_chat(H, "\The [src] injects something into your [O.name]!") // Oh god its laying eggs in me! - -// Webs target in a web if able to. -/mob/living/simple_animal/hostile/giant_spider/nurse/attack_target(atom/A) - if(isturf(A)) - if(fed) - if(!laying_eggs) - return lay_eggs(A) - return web_tile(A) - - if(isliving(A)) - var/mob/living/L = A - if(!L.stat) - return ..() - - if(!istype(A, /atom/movable)) - return - var/atom/movable/AM = A - - if(AM.anchored) - return ..() - - - return spin_cocoon(AM) - -/mob/living/simple_animal/hostile/giant_spider/nurse/proc/spin_cocoon(atom/movable/AM) - if(!istype(AM) || istype(AM, /obj/item)) - return FALSE // We can't cocoon walls sadly. - - if (AM in contents) - return - - visible_message(SPAN_NOTICE("\The [src] begins to secrete a sticky substance around \the [AM].") ) - - // Get our AI to stay still. - set_AI_busy(TRUE) - - if(!do_after(src, 5 SECONDS, AM, DO_DEFAULT | DO_USER_UNIQUE_ACT | DO_PUBLIC_PROGRESS)) - set_AI_busy(FALSE) - return FALSE - - set_AI_busy(FALSE) - - if(!AM || !isturf(AM.loc) || !Adjacent(AM)) - return FALSE - - // Finally done with the checks. - var/obj/effect/spider/cocoon/C = new(AM.loc) - var/large_cocoon = FALSE - for(var/mob/living/L in C.contents) - if(istype(L, /mob/living/simple_animal/hostile/giant_spider)) // Cannibalism is bad. - continue - fed++ - visible_message(SPAN_WARNING("\The [src] sticks a proboscis into \the [L], and sucks a viscous substance out.")) - large_cocoon = TRUE - break - - if(large_cocoon) - C.icon_state = pick("cocoon_large1","cocoon_large2","cocoon_large3") - - ai_holder.target = null - - return TRUE - -/mob/living/simple_animal/hostile/giant_spider/nurse/handle_special() - set waitfor = FALSE - if(get_AI_stance() == STANCE_IDLE && !is_AI_busy() && isturf(loc)) - if(fed) - lay_eggs(loc) - else - web_tile(loc) - -/mob/living/simple_animal/hostile/giant_spider/nurse/proc/web_tile(turf/T) - if(!istype(T)) - return FALSE - - var/obj/effect/spider/stickyweb/W = locate() in T - if(W) - return FALSE // Already got webs here. - - visible_message(SPAN_NOTICE("\The [src] begins to secrete a sticky substance.")) - // Get our AI to stay still. - set_AI_busy(TRUE) - - if(!do_after(src, 5 SECONDS, T, DO_DEFAULT | DO_USER_UNIQUE_ACT | DO_PUBLIC_PROGRESS)) - set_AI_busy(FALSE) - return FALSE - - W = locate() in T - if(W) - return FALSE // Spamclick protection. - - set_AI_busy(FALSE) - new web_type(T) - return TRUE - - -/mob/living/simple_animal/hostile/giant_spider/nurse/proc/lay_eggs(turf/T) - if(!istype(T)) - return FALSE - - if(!fed) - return FALSE - - var/obj/effect/spider/eggcluster/E = locate() in T - if(E) - return FALSE // Already got eggs here. - - visible_message(SPAN_NOTICE("\The [src] begins to lay a cluster of eggs.")) - // Get our AI to stay still. - set_AI_busy(TRUE) - // Stop players from spamming eggs. - laying_eggs = TRUE - - if(!do_after(src, 5 SECONDS, T, DO_DEFAULT | DO_USER_UNIQUE_ACT | DO_PUBLIC_PROGRESS)) - set_AI_busy(FALSE) - return FALSE - - E = locate() in T - if(E) - return FALSE // Spamclick protection. - - set_AI_busy(FALSE) - new egg_type(T) - fed-- - laying_eggs = FALSE - return TRUE - -/mob/living/simple_animal/hostile/giant_spider/nurse/proc/divorce() - if(paired_guard) - if(paired_guard.paired_nurse) - paired_guard.paired_nurse = null - paired_guard = null - -// Variant that 'blocks' light (by being a negative light source). -// This is done to make webbed rooms scary and allow for spiders on the other side of webs to see prey. -/obj/effect/spider/stickyweb/dark - name = "dense web" - desc = "It's sticky, and blocks a lot of light." - -/obj/effect/spider/stickyweb/dark/Initialize() - . = ..() - set_light(-1, 0.5, 1, 1, l_color = "#ffffff") - -// The AI for nurse spiders. Wraps things in webs by 'attacking' them. -/datum/ai_holder/simple_animal/melee/nurse_spider - wander = TRUE - base_wander_delay = 8 - cooperative = FALSE // So we don't ask our spider friends to attack things we're webbing. This might also make them stay at the base if their friends find tasty explorers. - returns_home = TRUE - -// Get us unachored objects as an option as well. -/datum/ai_holder/simple_animal/melee/nurse_spider/list_targets() - . = ..() - - var/static/alternative_targets = typecacheof(list(/obj/structure)) - - for(var/AT in typecache_filter_list(range(vision_range, holder), alternative_targets)) - var/obj/O = AT - if(can_see(holder, O, vision_range) && !O.anchored) - . += O - -// Select an obj if no mobs are around. -/datum/ai_holder/simple_animal/melee/nurse_spider/pick_target(list/targets) - var/mobs_only = locate(/mob/living) in targets // If a mob is in the list of targets, then ignore objects. - if(mobs_only) - for(var/A in targets) - if(!isliving(A)) - targets -= A - - return ..(targets) - -/datum/ai_holder/simple_animal/melee/nurse_spider/can_attack(atom/movable/the_target, vision_required = TRUE) - . = ..() - if (!.) // Parent returned FALSE. - if (istype(the_target, /obj)) - var/obj/O = the_target - if (!O.anchored) - return TRUE diff --git a/code/modules/mob/living/simple_animal/hostile/giant_spider/pepper.dm b/code/modules/mob/living/simple_animal/hostile/giant_spider/pepper.dm deleted file mode 100644 index a1b0d0000ec22..0000000000000 --- a/code/modules/mob/living/simple_animal/hostile/giant_spider/pepper.dm +++ /dev/null @@ -1,19 +0,0 @@ -// Pepper spiders inject condensed capsaicin into their victims. - -/mob/living/simple_animal/hostile/giant_spider/pepper - desc = "Red and brown, it makes you shudder to look at it. This one has glinting red eyes." - - icon_state = "pepper" - icon_living = "pepper" - icon_dead = "pepper_dead" - - maxHealth = 130 - health = 130 - - poison_chance = 20 - poison_per_bite = 5 - poison_type = /datum/reagent/toxin/irritanttoxin - -/mob/living/simple_animal/hostile/giant_spider/pepper/Initialize() - SetTransform(scale = 1.1) - return ..() diff --git a/code/modules/mob/living/simple_animal/hostile/giant_spider/phorogenic.dm b/code/modules/mob/living/simple_animal/hostile/giant_spider/phorogenic.dm deleted file mode 100644 index 63c62c50068ae..0000000000000 --- a/code/modules/mob/living/simple_animal/hostile/giant_spider/phorogenic.dm +++ /dev/null @@ -1,67 +0,0 @@ -// Phorogenic spiders explode when they die. -// You really shouldn't melee them. - -/mob/living/simple_animal/hostile/giant_spider/phorogenic - desc = "Crystalline and purple, it makes you shudder to look at it. This one has haunting purple eyes." - - icon_state = "phoron" - icon_living = "phoron" - icon_dead = "phoron_dead" - - maxHealth = 225 - health = 225 - taser_kill = FALSE //You will need more than a peashooter to kill the juggernaut. - - natural_weapon = /obj/item/natural_weapon/bite/spider/phorogenic - - attack_armor_pen = 15 - - movement_cooldown = 10 - - poison_chance = 30 - poison_per_bite = 0.5 - poison_type = /datum/reagent/toxin/phoron - - var/exploded = FALSE - var/explosion_dev_range = 1 - var/explosion_heavy_range = 2 - var/explosion_light_range = 4 - var/explosion_flash_range = 6 - - /// Lower bound for explosion delay. - var/explosion_delay_lower = 3 SECONDS - /// Upper bound for explosion delay. - var/explosion_delay_upper = 5 SECONDS - -/mob/living/simple_animal/hostile/giant_spider/phorogenic/Initialize() - SetTransform(scale = 1.25) - return ..() - -/mob/living/simple_animal/hostile/giant_spider/phorogenic/death() - visible_message(SPAN_DANGER("\The [src]'s body begins to rupture!")) - var/delay = rand(explosion_delay_lower, explosion_delay_upper) - addtimer(CALLBACK(src, .proc/flash, delay), 0) - - return ..() - -/mob/living/simple_animal/hostile/giant_spider/phorogenic/proc/flash(delay) - // Flash black and red as a warning. - for (var/i = 1 to delay) - if (i % 2 == 0) - color = "#000000" - else - color = "#ff0000" - sleep(1) - - detonate() - -/mob/living/simple_animal/hostile/giant_spider/phorogenic/proc/detonate() - // The actual boom. - if (src && !exploded) - visible_message(SPAN_DANGER("\The [src]'s body detonates!")) - exploded = TRUE - explosion(loc, explosion_dev_range, explosion_heavy_range, explosion_light_range, explosion_flash_range) - qdel(src) - -/obj/item/natural_weapon/bite/spider/phorogenic - force = 30 diff --git a/code/modules/mob/living/simple_animal/hostile/giant_spider/spitter.dm b/code/modules/mob/living/simple_animal/hostile/giant_spider/spitter.dm deleted file mode 100644 index 37fb421b72424..0000000000000 --- a/code/modules/mob/living/simple_animal/hostile/giant_spider/spitter.dm +++ /dev/null @@ -1,38 +0,0 @@ -//spitters - fast, comparatively weak, very venomous; projectile attacks but will resort to melee once out of ammo -/mob/living/simple_animal/hostile/giant_spider/spitter - desc = "A monstrously huge iridescent spider with shimmering eyes." - icon_state = "spitter" - icon_living = "spitter" - icon_dead = "spitter_dead" - maxHealth = 90 - health = 90 - poison_per_bite = 15 - ranged = TRUE - move_to_delay = 2 - projectiletype = /obj/item/projectile/venom - projectilesound = 'sound/effects/hypospray.ogg' - fire_desc = "spits venom" - ranged_range = 6 - pry_time = 7 SECONDS - flash_vulnerability = 2 - base_attack_cooldown = 2 SECONDS - - var/venom_charge = 16 - - ai_holder = /datum/ai_holder/simple_animal/spider/spitter - -/datum/ai_holder/simple_animal/spider/spitter/post_ranged_attack(atom/A) - . = ..() - var/mob/living/simple_animal/hostile/giant_spider/spitter/S = holder - S.venom_charge-- - -/mob/living/simple_animal/hostile/giant_spider/spitter/Life() - . = ..() - if(!.) - return FALSE - if(venom_charge <= 0) - ranged = FALSE - if(prob(25)) - venom_charge++ - if(venom_charge >= 8) - ranged = TRUE diff --git a/code/modules/mob/living/simple_animal/hostile/giant_spider/thermic.dm b/code/modules/mob/living/simple_animal/hostile/giant_spider/thermic.dm deleted file mode 100644 index 100bc95ae50e9..0000000000000 --- a/code/modules/mob/living/simple_animal/hostile/giant_spider/thermic.dm +++ /dev/null @@ -1,18 +0,0 @@ -// Thermic spiders inject a special variant of thermite that burns someone from the inside. - -/mob/living/simple_animal/hostile/giant_spider/thermic - desc = "Mirage-cloaked and orange, it makes you shudder to look at it. This one has simmering orange eyes." - - icon_state = "pit" - icon_living = "pit" - icon_dead = "pit_dead" - - maxHealth = 115 - health = 115 - - heat_resist = 0.75 - cold_resist = -0.50 - - poison_chance = 30 - poison_per_bite = 2 - poison_type = /datum/reagent/toxin/pyrotoxin diff --git a/code/modules/mob/living/simple_animal/hostile/giant_spider/tunneler.dm b/code/modules/mob/living/simple_animal/hostile/giant_spider/tunneler.dm deleted file mode 100644 index 799860d0c36f7..0000000000000 --- a/code/modules/mob/living/simple_animal/hostile/giant_spider/tunneler.dm +++ /dev/null @@ -1,160 +0,0 @@ -// Tunnelers have a special ability that allows them to charge at an enemy by tunneling towards them. -// Any mobs inbetween the tunneler's path and the target will be stunned if the tunneler hits them. -// The target will suffer a stun as well, if the tunneler hits them at the end. A successful hit will stop the tunneler. -// If the target moves fast enough, the tunneler can miss, causing it to overshoot. -// If the tunneler hits a solid wall, the tunneler will suffer a stun. - -/mob/living/simple_animal/hostile/giant_spider/tunneler - desc = "Sandy and brown, it makes you shudder to look at it. This one has glittering yellow eyes." - - icon_state = "tunneler" - icon_living = "tunneler" - icon_dead = "tunneler_dead" - - maxHealth = 100 - health = 100 - - poison_chance = 15 - poison_per_bite = 3 - poison_type = /datum/reagent/toxin/serotrotium - - // Tunneling is a special attack, similar to the hunter's Leap. - special_attack_min_range = 2 - special_attack_max_range = 6 - special_attack_cooldown = 10 SECONDS - - /// How long the dig telegraphing is. - var/tunnel_warning = 0.5 SECONDS - /// How long to wait between each tile. Higher numbers result in an easier to dodge tunnel attack. - var/tunnel_tile_speed = 2 - -/mob/living/simple_animal/hostile/giant_spider/tunneler/frequent - special_attack_cooldown = 5 SECONDS - -/mob/living/simple_animal/hostile/giant_spider/tunneler/fast - tunnel_tile_speed = 1 - -/mob/living/simple_animal/hostile/giant_spider/tunneler/should_special_attack(atom/A) - // Make sure its possible for the spider to reach the target so it doesn't try to go through a window. - var/turf/destination = get_turf(A) - var/turf/starting_turf = get_turf(src) - var/turf/T = starting_turf - for (var/i = 1 to get_dist(starting_turf, destination)) - if (T == destination) - break - - T = get_step(T, get_dir(T, destination)) - if (T.density) - return FALSE - return T == destination - - -/mob/living/simple_animal/hostile/giant_spider/tunneler/do_special_attack(atom/A) - set waitfor = FALSE - set_AI_busy(TRUE) - - // Save where we're gonna go soon. - var/turf/destination = get_turf(A) - var/turf/starting_turf = get_turf(src) - - // Telegraph to give a small window to dodge if really close. - do_windup_animation(A, tunnel_warning) - sleep(tunnel_warning) // For the telegraphing. - - // Do the dig! - visible_message(SPAN_DANGER("\The [src] tunnels towards \the [A]!")) - submerge() - - if (handle_tunnel(destination) == FALSE) - set_AI_busy(FALSE) - emerge() - return FALSE - - // Did we make it? - if (!(src in destination)) - set_AI_busy(FALSE) - emerge() - return FALSE - - var/overshoot = TRUE - - // Test if something is at destination. - for (var/mob/living/L in destination) - if (L == src) - continue - - visible_message(SPAN_DANGER("\The [src] erupts from underneath, and hits \the [L]!")) - playsound(src, 'sound/weapons/heavysmash.ogg', 75, 1) - L.Weaken(3) - overshoot = FALSE - - if (!overshoot) // We hit the target, or something, at destination, so we're done. - set_AI_busy(FALSE) - emerge() - return TRUE - - // Otherwise we need to keep going. - to_chat(src, SPAN_WARNING("You overshoot your target!")) - playsound(src, 'sound/weapons/punchmiss.ogg', 75, 1) - var/dir_to_go = get_dir(starting_turf, destination) - for (var/i = 1 to rand(2, 4)) - destination = get_step(destination, dir_to_go) - - handle_tunnel(destination) - set_AI_busy(FALSE) - emerge() - return FALSE - - - -/// Does the tunnel movement, stuns enemies, etc. -/mob/living/simple_animal/hostile/giant_spider/tunneler/proc/handle_tunnel(turf/destination) - var/turf/T = get_turf(src) // Hold our current tile. - - // Regular tunnel loop. - for (var/i = 1 to get_dist(src, destination)) - if (stat) - return FALSE // We died or got knocked out on the way. - if (loc == destination) - break // We somehow got there early. - - // Update T. - T = get_step(src, get_dir(src, destination)) - if (T.density) - to_chat(src, "You hit something really solid!") - playsound(src, "punch", 75, 1) - Weaken(5) - return FALSE // Hit a wall. - - // Stun anyone in our way. - for (var/mob/living/L in T) - playsound(src, 'sound/weapons/heavysmash.ogg', 75, 1) - L.Weaken(2) - - // Get into the tile. - forceMove(T) - - // Visuals and sound. - dig_under_floor(get_turf(src)) - playsound(src, 'sound/effects/break_stone.ogg', 75, 1) - sleep(tunnel_tile_speed) - -// For visuals. -/mob/living/simple_animal/hostile/giant_spider/tunneler/proc/submerge() - alpha = 0 - dig_under_floor(get_turf(src)) - new /obj/effect/temporary/tunneler_hole(get_turf(src), 1 MINUTE) - -// Ditto. -/mob/living/simple_animal/hostile/giant_spider/tunneler/proc/emerge() - alpha = 255 - dig_under_floor(get_turf(src)) - new /obj/effect/temporary/tunneler_hole(get_turf(src), 1 MINUTE) - -/mob/living/simple_animal/hostile/giant_spider/tunneler/proc/dig_under_floor(turf/T) - new /obj/item/ore/glass(T) // This will be rather weird when on station but the alternative is too much work. - -/obj/effect/temporary/tunneler_hole - name = "hole" - desc = "A collapsing tunnel hole." - icon_state = "tunnel_hole" diff --git a/code/modules/mob/living/simple_animal/hostile/giant_spider/webslinger.dm b/code/modules/mob/living/simple_animal/hostile/giant_spider/webslinger.dm deleted file mode 100644 index 85dfeea6ebbc6..0000000000000 --- a/code/modules/mob/living/simple_animal/hostile/giant_spider/webslinger.dm +++ /dev/null @@ -1,192 +0,0 @@ -// Webslingers do what their name implies, shoot web at enemies to slow them down. -/mob/living/simple_animal/hostile/giant_spider/webslinger - desc = "Furry and green, it makes you shudder to look at it. This one has brilliant green eyes, and a cloak of web." - - icon_state = "webslinger" - icon_living = "webslinger" - icon_dead = "webslinger_dead" - maxHealth = 90 - health = 90 - - projectile_dispersion = 1 - projectile_accuracy = -2 - - projectilesound = 'sound/weapons/thudswoosh.ogg' - projectiletype = /obj/item/projectile/webball - base_attack_cooldown = 3 SECONDS - - natural_weapon = /obj/item/natural_weapon/bite/spider/webslinger - - poison_per_bite = 2 - poison_type = /datum/reagent/psilocybin - ai_holder = /datum/ai_holder/simple_animal/ranged - -// Check if we should bola, or just shoot the pain ball -/mob/living/simple_animal/hostile/giant_spider/webslinger/should_special_attack(atom/A) - - if (ishuman(A)) - var/mob/living/carbon/human/H = A - if (!H.incapacitated()) - return TRUE - return FALSE - -// Now we've got a running human in sight, time to throw the bola -/mob/living/simple_animal/hostile/giant_spider/webslinger/do_special_attack(atom/A) - set waitfor = FALSE - set_AI_busy(TRUE) - var/obj/item/projectile/bola/B = new /obj/item/projectile/bola(src.loc) - playsound(src, 'sound/weapons/thudswoosh.ogg', 100, 1) - if (!B) - return - set_AI_busy(FALSE) - -/obj/item/natural_weapon/bite/spider/webslinger - force = 8 - -/obj/aura/web - name = "Webbing" - icon = 'icons/mob/mob.dmi' - icon_state = "web_1" - layer = MOB_LAYER - var/stacks = 1 - var/max_stacks = 5 - var/datum/action/remove_web/remove_webs - -/obj/aura/web/New() - . = ..() - remove_webs = new() - remove_webs.web = src - remove_webs.Grant(user) - -/obj/aura/web/Destroy() - if (remove_webs) - remove_webs.Remove(user) - remove_webs = null - - . = ..() - -/obj/aura/web/on_update_icon() - . = ..() - - icon_state = "web_[clamp(stacks, 1, 4)]" - user.update_icon() - -/obj/aura/web/proc/add_stack() - stacks = stacks + 1 - stacks = clamp(stacks, 1, max_stacks) - - if (stacks >= max_stacks && istype(user.loc, /turf)) - - var/obj/effect/spider/cocoon/C = new(user.loc) - user.forceMove(C) - C.icon_state = pick("cocoon_large1","cocoon_large2","cocoon_large3") - - - user.visible_message(user, - SPAN_WARNING("\The [user] is cocooned by all the webbing!"), - SPAN_WARNING("You are cocooned by all the webbing!"), - ) - - for (var/mob/living/simple_animal/A in oview(user)) - if (A.ai_holder) - var/datum/ai_holder/AI = A.ai_holder - if (AI.target == user) - AI.lose_target() - - return - - update_icon() - - var/mob/living/carbon/human/H = user - if (ishuman(H)) - H.Weaken(1) - - if (prob(log(stacks))) - H.slip("", 2) - - return TRUE - -/obj/aura/web/proc/remove_stack() - stacks = stacks - 1 - update_icon() - - if (stacks <= 0) - Destroy() - - -/obj/aura/web/bullet_act(obj/item/projectile/P, def_zone) - . = ..() - if (istype(P, /obj/item/projectile/webball)) - add_stack() - -/obj/aura/web/hitby(atom/movable/AM, datum/thrownthing/TT) - . = ..() - if (isliving(AM)) - remove_webbing(AM) - -/obj/aura/web/proc/remove_webbing(mob/living/M) - if (!M) - return - - var/body_type = "[M.isSynthetic() ? "chassis" : "body"]" - if (istype(M) && M.a_intent == I_HELP) - var/do_flags = EMPTY_BITFIELD - if (M == user) - user.visible_message( - SPAN_WARNING("\The [M] starts tearing at the webbing on their [body_type]!"), - SPAN_WARNING("You start tearing at the webbing on your [body_type]!"), - SPAN_WARNING("You hear the sound of something being torn up.") - ) - do_flags = DO_DEFAULT | DO_USER_UNIQUE_ACT | DO_PUBLIC_PROGRESS - else - user.visible_message( - SPAN_WARNING("\The [M] starts tearing at the webbing on \the [user]'s [body_type]!"), - SPAN_WARNING("\The [M] starts tearing off the webbing on you!"), - SPAN_WARNING("You hear the sound of something being torn up.") - ) - do_flags = DO_PUBLIC_UNIQUE - - if (do_after(M, 2 SECONDS, user, do_flags)) - if (stacks <= 1) - user.visible_message( - SPAN_WARNING("\The [user] is freed from the webs!"), - SPAN_WARNING("You are freed from the webs!"), - SPAN_WARNING("You hear the sound of something being torn free.") - ) - else - user.visible_message( - SPAN_WARNING("\The [M] tears some of the webbing off of [M == user ? "themselves" : "\the [user]"]!"), - SPAN_WARNING("You feel some of the webbing get torn away, but you aren't free yet!"), - SPAN_WARNING("You hear the sound of something being torn up.") - ) - remove_stack() - -/datum/action/remove_web - name = "Remove Webs" - button_icon = 'icons/effects/effects.dmi' - button_icon_state = "stickyweb2" - action_type = AB_INNATE - var/obj/aura/web/web - -/datum/action/remove_web/Activate() - . = ..() - - if (web) - web.remove_webbing(owner) - -/mob/living/movement_delay() - . = ..() - - if (!auras) - return . - - for (var/obj/aura/web/W in auras) - var/tally = W.stacks * 2 - return . + tally - -/mob/living/attackby(obj/item/I, mob/user) - for (var/obj/aura/web/W in auras) - W.remove_webbing(user) - return - - return ..() diff --git a/code/modules/mob/living/simple_animal/hostile/hivebot/hivebot.dm b/code/modules/mob/living/simple_animal/hostile/hivebot/hivebot.dm deleted file mode 100644 index dd2cea8b20596..0000000000000 --- a/code/modules/mob/living/simple_animal/hostile/hivebot/hivebot.dm +++ /dev/null @@ -1,325 +0,0 @@ -/mob/living/simple_animal/hostile/hivebot - name = "hivebot" - desc = "A junky looking robot with four spiky legs." - icon = 'icons/mob/simple_animal/hivebot.dmi' - icon_state = "basic" - icon_living = "basic" - icon_dead = "basic" - health = 65 - maxHealth = 65 - natural_weapon = /obj/item/natural_weapon/hivebot - faction = "hivebot" - min_gas = null - max_gas = null - minbodytemp = 0 - speed = 4 - natural_armor = list( - melee = ARMOR_MELEE_KNIVES - ) - bleed_colour = SYNTH_BLOOD_COLOUR - - meat_type = null - meat_amount = 0 - bone_material = null - bone_amount = 0 - skin_material = null - skin_amount = 0 - - ai_holder = /datum/ai_holder/simple_animal/hivebot - say_list_type = /datum/say_list/hivebot - -/mob/living/simple_animal/hostile/hivebot/range - desc = "A junky looking robot with four spiky legs. It's equipped with some kind of small-bore gun." - ranged = 1 - speed = 7 - projectiletype = /obj/item/projectile/beam/smalllaser - base_attack_cooldown = 3 SECONDS - - ai_holder = /datum/ai_holder/simple_animal/hivebot/ranged - -/mob/living/simple_animal/hostile/hivebot/rapid - ranged = 1 - rapid = 1 - -/mob/living/simple_animal/hostile/hivebot/strong - desc = "A junky looking robot with four spiky legs - this one has thick armour plating." - health = 160 - maxHealth = 160 - melee_attack_delay = 6 - ranged = 1 - can_escape = 1 - natural_armor = list( - melee = ARMOR_MELEE_RESISTANT - ) - - natural_weapon = /obj/item/natural_weapon/hivebot/strong - -/mob/living/simple_animal/hostile/hivebot/death() - ..(null, "blows apart!") - new /obj/effect/decal/cleanable/blood/gibs/robot(src.loc) - var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread - s.set_up(3, 1, src) - s.start() - qdel(src) - return - -/* -Teleporter beacon, and its subtypes -*/ -/mob/living/simple_animal/hostile/hivebot/tele - name = "beacon" - desc = "Some odd beacon thing." - icon_state = "def_radar-off" - icon_living = "def_radar-off" - health = 200 - maxHealth = 200 - status_flags = 0 - anchored = TRUE - - var/bot_type = /mob/living/simple_animal/hostile/hivebot - var/bot_amt = 1 - var/spawn_delay = 10 SECONDS - var/spawn_time = 0 - - ai_holder = /datum/ai_holder/simple_animal/hivebot/tele - -/mob/living/simple_animal/hostile/hivebot/tele/New() - ..() - var/datum/effect/effect/system/smoke_spread/smoke = new /datum/effect/effect/system/smoke_spread() - smoke.set_up(5, 0, src.loc) - smoke.start() - visible_message("\The [src] warps in!") - playsound(src.loc, 'sound/effects/EMPulse.ogg', 25, 1) - set_AI_busy(TRUE) - spawn_time = world.time + spawn_delay - -/mob/living/simple_animal/hostile/hivebot/tele/proc/warpbots() - while(bot_amt > 0 && bot_type) - bot_amt-- - var/mob/M = new bot_type(get_turf(src)) - M.faction = faction - playsound(src.loc, 'sound/effects/teleport.ogg', 50, 1) - qdel(src) - return - - -/mob/living/simple_animal/hostile/hivebot/tele/Life() - . = ..() - if(. && spawn_time && spawn_time <= world.time) - warpbots() - -/mob/living/simple_animal/hostile/hivebot/tele/strong - bot_type = /mob/living/simple_animal/hostile/hivebot/strong - -/mob/living/simple_animal/hostile/hivebot/tele/range - bot_type = /mob/living/simple_animal/hostile/hivebot/range - -/mob/living/simple_animal/hostile/hivebot/tele/rapid - bot_type = /mob/living/simple_animal/hostile/hivebot/rapid - -/* -Special projectiles -*/ -/obj/item/projectile/bullet/gyro/megabot - name = "microrocket" - gyro_light_impact = 1 - distance_falloff = 1.3 - -/obj/item/projectile/beam/megabot - damage = 45 - distance_falloff = 0.5 - -/* -The megabot -*/ -#define ATTACK_MODE_MELEE "melee" -#define ATTACK_MODE_LASER "laser" -#define ATTACK_MODE_ROCKET "rocket" - -/mob/living/simple_animal/hostile/hivebot/mega - name = "hivemind" - desc = "A huge quadruped robot equipped with a myriad of weaponry." - icon = 'icons/mob/simple_animal/megabot.dmi' - icon_state = "megabot" - icon_living = "megabot" - icon_dead = "megabot_dead" - health = 440 - maxHealth = 440 - natural_weapon = /obj/item/natural_weapon/circular_saw - speed = 0 - special_attack_cooldown = 3 MINUTES - natural_armor = list( - melee = ARMOR_MELEE_RESISTANT, - bullet = ARMOR_BALLISTIC_PISTOL - ) - can_escape = TRUE - armor_type = /datum/extension/armor/toggle - ability_cooldown = 3 MINUTES - base_attack_cooldown = 2 SECONDS - - pixel_x = -32 - default_pixel_x = -32 - - var/attack_mode = ATTACK_MODE_MELEE - var/num_shots - var/deactivated - -/obj/item/natural_weapon/circular_saw - name = "giant circular saw" - attack_verb = list("sawed", "ripped") - force = 15 - sharp = TRUE - edge = TRUE - -/mob/living/simple_animal/hostile/hivebot/mega/Initialize() - . = ..() - switch_mode(ATTACK_MODE_ROCKET) - -/mob/living/simple_animal/hostile/hivebot/mega/Life() - . = ..() - if(!.) - return - - if(time_last_used_ability < world.time) - switch_mode(ATTACK_MODE_ROCKET) - -/mob/living/simple_animal/hostile/hivebot/mega/emp_act(severity) - if (status_flags & GODMODE) - return - . = ..() - deactivate() - -/mob/living/simple_animal/hostile/hivebot/mega/on_update_icon() - if(stat != DEAD) - if(deactivated) - icon_state = "megabot_standby" - icon_living = "megabot_standby" - return - - overlays.Cut() - overlays += image(icon, "active_indicator") - switch(attack_mode) - if(ATTACK_MODE_MELEE) - overlays += image(icon, "melee") - if(ATTACK_MODE_LASER) - overlays += image(icon, "laser") - if(ATTACK_MODE_ROCKET) - overlays += image(icon, "rocket") - -/mob/living/simple_animal/hostile/hivebot/mega/proc/switch_mode(var/new_mode) - if(!new_mode || new_mode == attack_mode) - return - - switch(new_mode) - if(ATTACK_MODE_MELEE) - attack_mode = ATTACK_MODE_MELEE - ranged = FALSE - projectilesound = null - projectiletype = null - num_shots = 0 - visible_message(SPAN_MFAUNA("\The [src]'s circular saw spins up!")) - deactivate() - if(ATTACK_MODE_LASER) - attack_mode = ATTACK_MODE_LASER - ranged = TRUE - projectilesound = 'sound/weapons/Laser.ogg' - projectiletype = /obj/item/projectile/beam/megabot - num_shots = 12 - fire_desc = "fires a laser" - visible_message(SPAN_MFAUNA("\The [src]'s laser cannon whines!")) - if(ATTACK_MODE_ROCKET) - attack_mode = ATTACK_MODE_ROCKET - ranged = TRUE - projectilesound = 'sound/effects/Explosion1.ogg' - projectiletype = /obj/item/projectile/bullet/gyro/megabot - num_shots = 4 - fire_desc = "launches a microrocket" - time_last_used_ability = special_attack_cooldown + world.time - visible_message(SPAN_MFAUNA("\The [src]'s missile pod rumbles!")) - - update_icon() - -/mob/living/simple_animal/hostile/hivebot/mega/proc/deactivate() - set_AI_busy(TRUE) - deactivated = TRUE - visible_message(SPAN_MFAUNA("\The [src] clicks loudly as its lights fade and its motors grind to a halt!")) - update_icon() - var/datum/extension/armor/toggle/armor = get_extension(src, /datum/extension/armor) - if(armor) - armor.toggle(FALSE) - addtimer(CALLBACK(src, .proc/reactivate), 4 SECONDS) - -/mob/living/simple_animal/hostile/hivebot/mega/proc/reactivate() - set_AI_busy(FALSE) - deactivated = FALSE - visible_message(SPAN_MFAUNA("\The [src] whirs back to life!")) - var/datum/extension/armor/toggle/armor = get_extension(src, /datum/extension/armor) - if(armor) - armor.toggle(TRUE) - update_icon() - -/mob/living/simple_animal/hostile/hivebot/mega/shoot_target(target_mob) - if(num_shots <= 0) - if(attack_mode == ATTACK_MODE_ROCKET) - switch_mode(ATTACK_MODE_LASER) - else - switch_mode(ATTACK_MODE_MELEE) - ..() - -/mob/living/simple_animal/hostile/hivebot/mega/shoot(target, start, user, bullet) - if (projectiletype) - ..() - num_shots-- - -/* AI */ -/datum/ai_holder/simple_animal/hivebot - threaten = TRUE - threaten_delay = 2 SECOND - threaten_timeout = 30 SECONDS - -/datum/ai_holder/simple_animal/hivebot/ranged - pointblank = TRUE - -/datum/ai_holder/simple_animal/hivebot/tele/find_target(list/possible_targets, has_targets_list) - . = ..() - - var/mob/living/simple_animal/hostile/hivebot/tele/T = holder - if(..() && !T.spawn_time) - T.spawn_time = world.time + T.spawn_delay - T.visible_message(SPAN_DANGER("\The [src] turns on!")) - T.icon_state = "def_radar" - return null - -/* Say Lists */ - -/datum/say_list/hivebot - speak = list( - "Sys-ys-ystem integrity at: 25%.", - "Divergent instances detected, resynchronizing protocols...", - "Hivelink corrupted, searching for secondary channels..." - ) - say_threaten = list( - "T-t-t-target located, analyzing...", - "S-s-scanning tarrrrrget...", - "Possible thrrrreat detected, obtaining classification..." - ) - say_maybe_target = list("Possible threat detected. Investigating.", "Anomaly detected, commencing vis-visual sweep.", "Investigating.") - say_escalate = list( - "Target confirmed. Engaging.", - "Hossssstile class-classification confirmed. Pacifying.", - "Err-rr-ror, classification index corrupted. Assuming target as: Hostile." - ) - say_stand_down = list("Visual lost.", "Error: Target lost.", "Error: Target parameter null.") - -#undef ATTACK_MODE_MELEE -#undef ATTACK_MODE_LASER -#undef ATTACK_MODE_ROCKET - -/obj/item/natural_weapon/hivebot - force = 15 - -/obj/item/natural_weapon/hivebot/strong - force = 20 - -/obj/item/projectile/bullet/hivebot - damage = 10 diff --git a/code/modules/mob/living/simple_animal/hostile/hivebot/ranged.dm b/code/modules/mob/living/simple_animal/hostile/hivebot/ranged.dm deleted file mode 100644 index 64e83ad0c989f..0000000000000 --- a/code/modules/mob/living/simple_animal/hostile/hivebot/ranged.dm +++ /dev/null @@ -1,88 +0,0 @@ -// These hivebots are intended for general damage causing, at range. - -/mob/living/simple_animal/hostile/hivebot/ranged_damage - maxHealth = 60 - health = 60 - projectiletype = /obj/item/projectile/bullet/hivebot - -// The regular ranged hivebot, that fires somewhat weak projectiles. -/mob/living/simple_animal/hostile/hivebot/ranged_damage/basic - name = "ranged hivebot" - desc = "A robot with a makeshift integrated ballistic weapon." - projectile_dispersion = 2 - projectile_accuracy = -1 - -// This one shoots quickly, and is considerably more dangerous. -/mob/living/simple_animal/hostile/hivebot/ranged_damage/rapid - name = "rapid hivebot" - desc = "A robot with a crude but deadly integrated rifle." - base_attack_cooldown = 5 // Two attacks a second or so. - projectile_dispersion = 2 - projectile_accuracy = -2 - -// Shoots deadly lasers. -/mob/living/simple_animal/hostile/hivebot/ranged_damage/laser - name = "laser hivebot" - desc = "A robot with a photonic weapon integrated into itself." - projectiletype = /obj/item/projectile/beam/blue - projectilesound = 'sound/weapons/Laser.ogg' - projectile_dispersion = 2 - projectile_accuracy = -1 - -// Shoots EMPs, to screw over other robots. -/mob/living/simple_animal/hostile/hivebot/ranged_damage/ion - name = "ionic hivebot" - desc = "A robot with an electromagnetic pulse projector." - icon_state = "yellow" - icon_living = "yellow" - - projectiletype = /obj/item/projectile/ion - projectilesound = 'sound/weapons/Laser.ogg' - projectile_dispersion = 1 - projectile_accuracy = -2 - base_attack_cooldown = 28 - - -// Beefy and ranged. -/mob/living/simple_animal/hostile/hivebot/ranged_damage/strong - name = "strong hivebot" - desc = "A robot with a crude ballistic weapon and strong armor." - maxHealth = 120 - health = 120 - projectile_dispersion = 2 - projectile_accuracy = -1 - projectilesound = 'sound/weapons/gunshot/mech_autocannon.ogg' - -// Also beefy, but tries to stay at their 'home', ideal for base defense. -/mob/living/simple_animal/hostile/hivebot/ranged_damage/strong/guard - name = "guard hivebot" - desc = "A robot that seems to be guarding something." - -// Inflicts a damage-over-time modifier on things it hits. -// It is able to stack with repeated attacks. -/mob/living/simple_animal/hostile/hivebot/ranged_damage/dot - name = "ember hivebot" - desc = "A robot that appears to utilize fire to cook their enemies." - icon_state = "red" - icon_living = "red" - - projectiletype = /obj/item/projectile/beam/incendiary_laser - heat_resist = 1 - -/obj/item/projectile/fire - name = "ember" - icon = 'icons/effects/effects.dmi' - icon_state = "explosion_particle" - damage = 0 - nodamage = TRUE - -/obj/item/projectile/fire/on_hit(atom/target, blocked, def_zone) - . = ..() - if (blocked) - return - - if (istype(target, /mob/living)) - var/mob/living/C = target - C.fire_stacks += 1 - if (!C.on_fire) - C.IgniteMob() diff --git a/code/modules/mob/living/simple_animal/hostile/hivebot/tank.dm b/code/modules/mob/living/simple_animal/hostile/hivebot/tank.dm deleted file mode 100644 index ffee3eaf466f6..0000000000000 --- a/code/modules/mob/living/simple_animal/hostile/hivebot/tank.dm +++ /dev/null @@ -1,101 +0,0 @@ -// These hivebots are harder to kill than normal, and are meant to protect their squad by -// distracting their enemies. This is done by being seen as very threatening. -// Their melee attacks weaken whatever they hit. - -/mob/living/simple_animal/hostile/hivebot/tank - attacktext = list("prodded") - projectiletype = null // To force the AI to melee. - movement_cooldown = 10 - natural_weapon = /obj/item/natural_weapon/hivebot/tank - -/mob/living/simple_animal/hostile/hivebot/tank/Initialize() - SetTransform(scale = 1.5) - return ..() - - -/obj/item/natural_weapon/hivebot/tank - name = "baton" - attack_verb = list("prodded") - hitsound = 'sound/weapons/Egloves.ogg' - force = 3 - -// This one is tanky by having a massive amount of health. -/mob/living/simple_animal/hostile/hivebot/tank/meatshield - name = "bulky hivebot" - desc = "A large robot." - maxHealth = 300 - health = 300 - -/mob/living/simple_animal/hostile/hivebot/tank/meatshield/Initialize() - SetTransform(scale = 1.5) - return ..() - - -// This one is tanky by having armor. -/mob/living/simple_animal/hostile/hivebot/tank/armored - name = "armored hivebot" - desc = "A robot clad in heavy armor." - maxHealth = 150 - health = 150 - natural_armor = list( - melee = ARMOR_MELEE_RESISTANT, - bullet = ARMOR_BALLISTIC_PISTOL, - laser = ARMOR_LASER_HANDGUNS, - energy = ARMOR_ENERGY_SMALL, - bomb = ARMOR_BOMB_PADDED, - bio = ARMOR_BIO_SHIELDED, - rad = ARMOR_RAD_SHIELDED - ) - -/mob/living/simple_animal/hostile/hivebot/tank/armored/Initialize() - SetTransform(scale = 1.5) - return ..() - - -/mob/living/simple_animal/hostile/hivebot/tank/armored/anti_melee - name = "riot hivebot" - desc = "A robot specialized in close quarters combat." - natural_armor = list( - melee = ARMOR_MELEE_VERY_HIGH, - bio = ARMOR_BIO_SHIELDED, - rad = ARMOR_RAD_SHIELDED - ) - -/mob/living/simple_animal/hostile/hivebot/tank/armored/anti_bullet - name = "bulletproof hivebot" - desc = "A robot specialized in ballistic defense." - natural_armor = list( - bullet = ARMOR_BALLISTIC_RESISTANT, - bio = ARMOR_BIO_SHIELDED, - rad = ARMOR_RAD_SHIELDED - ) - -/mob/living/simple_animal/hostile/hivebot/tank/armored/anti_laser - name = "ablative hivebot" - desc = "A robot specialized in photonic defense." - natural_armor = list( - laser = ARMOR_LASER_RIFLES, - bio = ARMOR_BIO_SHIELDED, - rad = ARMOR_RAD_SHIELDED - ) - var/reflect_chance = 70 // Same as regular ablative. - -// Ablative Hivebots can reflect lasers just like humans. -/mob/living/simple_animal/hostile/hivebot/tank/armored/anti_laser/bullet_act(obj/item/projectile/P) - if(istype(P, /obj/item/projectile/energy) || istype(P, /obj/item/projectile/beam)) - var/reflect_prob = reflect_chance - round(P.damage/3) - if(prob(reflect_prob)) - visible_message(SPAN_DANGER("The [P.name] gets reflected by \the [src]'s armor!")) - - // Find a turf near or on the original location to bounce to - if(P.starting) - var/new_x = P.starting.x + pick(0, 0, -1, 1, -2, 2, -2, 2, -2, 2, -3, 3, -3, 3) - var/new_y = P.starting.y + pick(0, 0, -1, 1, -2, 2, -2, 2, -2, 2, -3, 3, -3, 3) - var/turf/curloc = get_turf(src) - - // redirect the projectile - P.redirect(new_x, new_y, curloc, src) - - return PROJECTILE_CONTINUE - - return (..(P)) diff --git a/code/modules/mob/living/simple_animal/hostile/hostile.dm b/code/modules/mob/living/simple_animal/hostile/hostile.dm deleted file mode 100644 index cf822ef13a489..0000000000000 --- a/code/modules/mob/living/simple_animal/hostile/hostile.dm +++ /dev/null @@ -1,20 +0,0 @@ -/mob/living/simple_animal/hostile //TODO: cleanup - faction = "hostile" - var/stance = STANCE_IDLE //Used to determine behavior - var/mob/living/target_mob - var/attack_same = 0 - var/ranged = 0 - var/rapid = 0 - var/sa_accuracy = 85 //base chance to hit out of 100 - var/fire_desc = "fires" //"X fire_desc at Y!" - var/ranged_range = 6 //tiles of range for ranged attackers to attack - var/move_to_delay = 4 //delay for the automated movement. - var/attack_delay = DEFAULT_ATTACK_COOLDOWN - var/break_stuff_probability = 10 - var/destroy_surroundings = 1 - a_intent = I_HURT - - var/shuttletarget = null - var/enroute = 0 - - ai_holder = /datum/ai_holder/simple_animal/melee diff --git a/code/modules/mob/living/simple_animal/hostile/leech.dm b/code/modules/mob/living/simple_animal/hostile/leech.dm deleted file mode 100644 index fe976983a6f85..0000000000000 --- a/code/modules/mob/living/simple_animal/hostile/leech.dm +++ /dev/null @@ -1,86 +0,0 @@ -/*MEGALEECH -Tiny, weak, and mostly harmless alone. dangerous in groups. -*/ - -/mob/living/simple_animal/hostile/leech - name = "megaleech" - desc = "A giant leech the size of a common snake." - icon = 'icons/mob/simple_animal/megaleech.dmi' - icon_state = "leech" - icon_living = "leech" - icon_dead = "leech_dead" - health = 15 - maxHealth = 15 - harm_intent_damage = 8 - natural_weapon = /obj/item/natural_weapon/bite/weak - pass_flags = PASS_FLAG_TABLE - faction = "leeches" - can_pry = FALSE - break_stuff_probability = 5 - flash_vulnerability = 0 // We dont have eyes, why should we care about light? - bleed_colour = COLOR_VIOLET - color = COLOR_GRAY - - ai_holder = /datum/ai_holder/simple_animal/melee/leech - - var/suck_potency = 8 - var/belly = 100 - -/mob/living/simple_animal/hostile/leech/Initialize() - color = get_random_colour(0,75,190) // Our icon is greyscale, and can be painted just fine. Uses same coloring range as flora. - . = ..() - -/datum/ai_holder/simple_animal/melee/leech/engage_target() - . = ..() - - var/mob/living/simple_animal/hostile/leech/L = holder - if(ishuman(.) && L.belly <= 75) - var/mob/living/carbon/human/H = . - var/obj/item/clothing/suit/space/S = H.get_covering_equipped_item_by_zone(BP_CHEST) - if(istype(S) && !length(S.breaches)) - return - H.remove_blood_simple(L.suck_potency) - if(L.health < L.maxHealth) - L.health += L.suck_potency / 1.5 - L.belly += clamp(L.suck_potency, 0, 100) - - -/mob/living/simple_animal/hostile/leech/Life() - . = ..() - if(!.) - return FALSE - - if(target_mob) - belly -= 3 - else - belly -= 1 - -/obj/structure/leech_spawner - name = "rigus regzorfra" // Similar naming to exoplanet flora, but not quite. - desc = "Wait... Something is wrong about this one." // Someone is actually checking for pests, let's reward them. - icon = 'icons/obj/hydroponics_growing.dmi' - icon_state = "alien1-1" // Placeholder until initalize. If seen like this, something went wrong. - color = COLOR_GRAY - anchored = TRUE - var/number_to_spawn = 12 - var/spent = FALSE - -/obj/structure/leech_spawner/Initialize() - icon_state = pick("alien[rand(1,4)]-dead") // Picks from the same pool of icons as xenoflora, but dead already. - color = get_random_colour(0,75,190) // Colors them as such, too. - . = ..() - START_PROCESSING(SSobj, src) - -/obj/structure/leech_spawner/Process() - if(!spent && (locate(/mob/living/carbon/human) in orange(5, src))) - burst() - -/obj/structure/leech_spawner/proc/burst() - for(var/i in 1 to number_to_spawn) - new /mob/living/simple_animal/hostile/leech(get_turf(src)) - visible_message(SPAN_MFAUNA("A swarm of leeches burst out from \the [src]!")) - playsound(src, 'sound/voice/BugHiss.ogg', 50, 5) - icon_state = "alien4-1" // looks close enough to an exploded plant. - desc = "A pile of strewn together, half-dissolved plant matter pieces, covered in a thin, transparent liquid." - spent = TRUE - STOP_PROCESSING(SSobj, src) diff --git a/code/modules/mob/living/simple_animal/hostile/meat_horrors.dm b/code/modules/mob/living/simple_animal/hostile/meat_horrors.dm deleted file mode 100644 index 2c6b23aa623df..0000000000000 --- a/code/modules/mob/living/simple_animal/hostile/meat_horrors.dm +++ /dev/null @@ -1,259 +0,0 @@ -/mob/living/simple_animal/hostile/meat - name = "horror" - desc = "A monstrously huge wall of flesh, it looks like you took who knows how many humans and put them together..." - icon = 'icons/mob/simple_animal/nightmaremonsters.dmi' - icon_state = "horror" - icon_living = "horror" - icon_dead = "horror_dead" - speak_emote = list("twitches.") - turns_per_move = 5 - see_in_dark = 10 - response_help = "pets" - response_disarm = "gently pushes aside" - response_harm = "pokes" - maxHealth = 250 - health = 250 - movement_cooldown = 7 - natural_weapon = /obj/item/natural_weapon/meatbits - heat_damage_per_tick = 20 - cold_damage_per_tick = 0 - faction = "meat" - pass_flags = PASS_FLAG_TABLE - move_to_delay = 3 - speed = 0.5 - bleed_colour = "#5c0606" - break_stuff_probability = 25 - pry_time = 4 SECONDS - pry_desc = "clawing" - min_gas = null - max_gas = null - minbodytemp = 0 - natural_armor = list( - melee = ARMOR_MELEE_KNIVES - ) - - ai_holder = /datum/ai_holder/simple_animal/melee/meat - say_list = /datum/say_list/meat - -/obj/item/natural_weapon/meatbits - force = 30 - sharp = TRUE - edge = TRUE - attack_cooldown = 1.5 SECONDS - attack_verb = list("mauled", "slashed") - -/mob/living/simple_animal/hostile/meat/abomination - name = "abomination" - desc = "A monstrously huge wall of flesh, it looks like you took who knows how many humans and put them together..." - icon = 'icons/mob/simple_animal/nightmaremonsters.dmi' - icon_state = "abomination" - icon_living = "abomination" - icon_dead = "abomination_dead" - speak_emote = list("twitches.") - turns_per_move = 5 - see_in_dark = 10 - response_help = "pets" - response_disarm = "gently pushes aside" - response_harm = "pokes" - maxHealth = 250 - health = 250 - movement_cooldown = 8 - natural_weapon = /obj/item/natural_weapon/meatbits - heat_damage_per_tick = 20 - cold_damage_per_tick = 0 - faction = "meat" - pass_flags = PASS_FLAG_TABLE - move_to_delay = 3 - speed = 0.5 - bleed_colour = "#5c0606" - break_stuff_probability = 25 - pry_time = 4 SECONDS - pry_desc = "clawing" - min_gas = null - max_gas = null - minbodytemp = 0 - natural_armor = list( - melee = ARMOR_MELEE_KNIVES - ) - -/mob/living/simple_animal/hostile/meat/horror - name = "horror" - desc = "A monstrously huge wall of flesh, it looks like you took two humans and put them together..." - icon = 'icons/mob/simple_animal/nightmaremonsters.dmi' - icon_state = "horror" - icon_living = "horror" - icon_dead = "horror_dead" - speak_emote = list("twitches.") - turns_per_move = 5 - see_in_dark = 10 - response_help = "pets" - response_disarm = "gently pushes aside" - response_harm = "pokes" - maxHealth = 150 - health = 150 - natural_weapon = /obj/item/natural_weapon/claws - heat_damage_per_tick = 100 - cold_damage_per_tick = 0 - faction = "meat" - pass_flags = PASS_FLAG_TABLE - move_to_delay = 3 - speed = 0.5 - bleed_colour = "#5c0606" - break_stuff_probability = 25 - pry_time = 8 SECONDS - pry_desc = "clawing" - min_gas = null - max_gas = null - minbodytemp = 0 - natural_armor = list( - melee = ARMOR_MELEE_KNIVES - ) - -/mob/living/simple_animal/hostile/meat/strippedhuman - name = "turned human" - desc = "What's left of a human. Their body's chest cavity is ripped open, their organs spilling out. It twitches, ready for it's next victim..." - icon = 'icons/mob/simple_animal/nightmaremonsters.dmi' - icon_state = "horror_alt" - icon_living = "horror_alt" - icon_dead = "horror_alt_dead" - speak_emote = list("twitches.") - turns_per_move = 5 - see_in_dark = 10 - response_help = "pets" - response_disarm = "gently pushes aside" - response_harm = "pokes" - maxHealth = 100 - health = 100 - movement_cooldown = 5 - natural_weapon = /obj/item/natural_weapon/claws/weak - heat_damage_per_tick = 100 - cold_damage_per_tick = 0 - faction = "meat" - pass_flags = PASS_FLAG_TABLE - move_to_delay = 3 - speed = 0.5 - bleed_colour = "#5c0606" - break_stuff_probability = 25 - pry_time = 8 SECONDS - pry_desc = "clawing" - min_gas = null - max_gas = null - minbodytemp = 0 - natural_armor = list( - melee = ARMOR_MELEE_KNIVES - ) - - say_list = /datum/say_list/meat/human - -/mob/living/simple_animal/hostile/meat/humansecurity - name = "turned security" - desc = "What's left of a SAARE security guard. The only way you can tell is by the tatters of their uniform. That armor they wore in life now gives them a bit of hardiness in death..." - icon = 'icons/mob/simple_animal/nightmaremonsters.dmi' - icon_state = "horror_security" - icon_living = "horror_security" - icon_dead = "horror_security_dead" - speak_emote = list("twitches.") - turns_per_move = 5 - see_in_dark = 10 - response_help = "pets" - response_disarm = "gently pushes aside" - response_harm = "pokes" - maxHealth = 200 - health = 200 - movement_cooldown = 5 - natural_weapon = /obj/item/natural_weapon/claws - heat_damage_per_tick = 100 - cold_damage_per_tick = 0 - faction = "meat" - pass_flags = PASS_FLAG_TABLE - move_to_delay = 3 - speed = 0.5 - bleed_colour = "#5c0606" - break_stuff_probability = 25 - pry_time = 8 SECONDS - pry_desc = "clawing" - min_gas = null - max_gas = null - minbodytemp = 0 - natural_armor = list( - melee = ARMOR_MELEE_KNIVES - ) - -/mob/living/simple_animal/hostile/meat/horrorminer - name = "turned miner" - desc = "What's left of a miner. Their head is hanging off the back by a few scraps of fabric." - icon = 'icons/mob/simple_animal/nightmaremonsters.dmi' - icon_state = "horror_miner" - icon_living = "horror_miner" - icon_dead = "horror_miner_dead" - speak_emote = list("twitches.") - turns_per_move = 5 - see_in_dark = 10 - response_help = "pets" - response_disarm = "gently pushes aside" - response_harm = "pokes" - maxHealth = 150 - health = 150 - movement_cooldown = 5 - natural_weapon = /obj/item/natural_weapon/claws - heat_damage_per_tick = 100 - cold_damage_per_tick = 0 - faction = "meat" - pass_flags = PASS_FLAG_TABLE - move_to_delay = 3 - speed = 0.5 - bleed_colour = "#5c0606" - break_stuff_probability = 25 - pry_time = 8 SECONDS - pry_desc = "clawing" - min_gas = null - max_gas = null - minbodytemp = 0 - natural_armor = list( - melee = ARMOR_MELEE_KNIVES - ) - -/mob/living/simple_animal/hostile/meat/horrorsmall - name = "smaller horror" - desc = "A creature with more legs than it could possibly need. It has multiple sets of eyes, though they're all human..." - icon = 'icons/mob/simple_animal/nightmaremonsters.dmi' - icon_state = "lesser_ling" - icon_living = "lesser_ling" - icon_dead = "" - speak_emote = list("twitches.") - turns_per_move = 5 - see_in_dark = 10 - response_help = "pets" - response_disarm = "gently pushes aside" - response_harm = "pokes" - maxHealth = 50 - health = 50 - movement_cooldown = 2 - natural_weapon = /obj/item/natural_weapon/claws - heat_damage_per_tick = 100 - cold_damage_per_tick = 0 - faction = "meat" - pass_flags = PASS_FLAG_TABLE - move_to_delay = 3 - speed = 0.5 - bleed_colour = "#5c0606" - break_stuff_probability = 25 - pry_time = 8 SECONDS - pry_desc = "clawing" - min_gas = null - max_gas = null - minbodytemp = 0 - natural_armor = list( - melee = ARMOR_MELEE_KNIVES - ) - -/datum/ai_holder/simple_animal/melee/meat - speak_chance = 5 - -/datum/say_list/meat - emote_hear = list("roars!", "groans..") - emote_see = list("snaps it's head at something..", "twitches", "stops suddenly") - -/datum/say_list/meat/human - emote_hear = list("roars!", "groans...") - emote_see = list("turns to the sound..", "twitches", "stops suddenly", "stops suddenly, it's intestines slowly spilling out") diff --git a/code/modules/mob/living/simple_animal/hostile/mimic.dm b/code/modules/mob/living/simple_animal/hostile/mimic.dm deleted file mode 100644 index 8e8ad97c60f97..0000000000000 --- a/code/modules/mob/living/simple_animal/hostile/mimic.dm +++ /dev/null @@ -1,178 +0,0 @@ -// -// Abstract Class -// - -var/global/list/protected_objects = list(/obj/machinery, - /obj/structure/table, - /obj/structure/cable, - /obj/structure/window, - /obj/structure/wall_frame, - /obj/structure/grille, - /obj/structure/catwalk, - /obj/structure/ladder, - /obj/structure/stairs, - /obj/structure/sign, - /obj/structure/railing, - /obj/item/modular_computer, - /obj/item/projectile/animate) - -/mob/living/simple_animal/hostile/mimic - name = "crate" - desc = "A rectangular steel crate." - icon = 'icons/obj/closets/bases/crate.dmi' - icon_state = "base" - icon_living = "base" - - meat_type = /obj/item/reagent_containers/food/snacks/fish/unknown - response_help = "touches" - response_disarm = "pushes" - response_harm = "hits" - speed = 4 - maxHealth = 100 - health = 100 - - harm_intent_damage = 5 - natural_weapon = /obj/item/natural_weapon/bite - - min_gas = null - max_gas = null - minbodytemp = 0 - - faction = "mimic" - move_to_delay = 8 - - var/weakref/copy_of - var/weakref/creator // the creator - var/destroy_objects = 0 - var/knockdown_people = 0 - pass_flags = PASS_FLAG_TABLE - -/datum/ai_holder/simple_animal/melee/mimic - -/datum/ai_holder/simple_animal/melee/mimic/find_target(list/possible_targets, has_targets_list) - . = ..() - - if(.) - var/mob/living/simple_animal/hostile/mimic/M = holder - M.audible_emote("growls at [.]") - -/datum/ai_holder/simple_animal/melee/mimic/list_targets() - // Return a list of targets that isn't the creator - . = ..() - var/mob/living/simple_animal/hostile/mimic/M = holder - if(M.creator) - return . - M.creator.resolve() - - -/mob/living/simple_animal/hostile/mimic/New(newloc, var/obj/o, var/mob/living/creator) - ..() - if(o) - if(ispath(o)) - o = new o(newloc) - CopyObject(o,creator) - -/mob/living/simple_animal/hostile/mimic/proc/CopyObject(var/obj/O, var/mob/living/creator) - - if((istype(O, /obj/item) || istype(O, /obj/structure)) && !is_type_in_list(O, protected_objects)) - O.forceMove(src) - copy_of = weakref(O) - appearance = O - icon_living = icon_state - - var/obj/item/W = get_natural_weapon() - if(istype(O, /obj/structure)) - health = (anchored * 50) + 50 - destroy_objects = 1 - if(O.density && O.anchored) - knockdown_people = 1 - W.force = 2 * initial(W.force) - else if(istype(O, /obj/item)) - var/obj/item/I = O - health = 15 * I.w_class - W.force = 2 + initial(I.force) - move_to_delay = 2 * I.w_class - - maxHealth = health - if(creator) - src.creator = weakref(creator) - faction = "\ref[creator]" // very unique - return 1 - return - -/mob/living/simple_animal/hostile/mimic/death() - if(!copy_of) - return - var/atom/movable/C = copy_of.resolve() - ..(null, "dies!") - if(C) - C.forceMove(src.loc) - - if(istype(C,/obj/structure/closet)) - for(var/atom/movable/M in src) - M.forceMove(C) - - if(istype(C,/obj/item/storage)) - var/obj/item/storage/S = C - for(var/atom/movable/M in src) - if(S.can_be_inserted(M,null,1)) - S.handle_item_insertion(M) - else - M.forceMove(src.loc) - - for(var/atom/movable/M in src) - M.dropInto(loc) - qdel(src) - -/datum/ai_holder/simple_animal/melee/mimic/destroy_surroundings(direction, violent) - . = ..() - var/mob/living/simple_animal/hostile/mimic/M = holder - if(M.destroy_objects) - ..() - -/datum/ai_holder/simple_animal/melee/mimic/engage_target() - . = ..() - var/mob/living/simple_animal/hostile/mimic/M = holder - if(M.knockdown_people) - var/mob/living/L = . - if(istype(L)) - if(prob(15)) - L.Weaken(1) - L.visible_message("\the [src] knocks down \the [L]!") - -/mob/living/simple_animal/hostile/mimic/Destroy() - copy_of = null - creator = null - ..() - -/mob/living/simple_animal/hostile/mimic/sleeping - var/awake = 0 - -/mob/living/simple_animal/hostile/mimic/sleeping/Initialize() - . = ..() - set_AI_busy(TRUE) - -/datum/ai_holder/simple_animal/melee/mimic/sleeping/list_targets() - . = ..() - var/mob/living/simple_animal/hostile/mimic/sleeping/M = holder - if(!M.awake) - return null - return ..() - -/mob/living/simple_animal/hostile/mimic/sleeping/proc/trigger() - if(!awake) - src.visible_message("\The [src] starts to move!") - set_AI_busy(FALSE) - awake = 1 - -/mob/living/simple_animal/hostile/mimic/sleeping/adjustBruteLoss(var/damage) - trigger() - ..(damage) - -/mob/living/simple_animal/hostile/mimic/sleeping/attack_hand() - trigger() - ..() - -/datum/ai_holder/simple_animal/melee/mimic/sleeping/destroy_surroundings(direction, violent) - var/mob/living/simple_animal/hostile/mimic/sleeping/M = holder - if(M.awake) - ..() \ No newline at end of file diff --git a/code/modules/mob/living/simple_animal/hostile/pirate.dm b/code/modules/mob/living/simple_animal/hostile/pirate.dm deleted file mode 100644 index 01a23e2019628..0000000000000 --- a/code/modules/mob/living/simple_animal/hostile/pirate.dm +++ /dev/null @@ -1,56 +0,0 @@ -/mob/living/simple_animal/hostile/pirate - name = "Pirate" - desc = "Does what he wants cause a pirate is free." - icon_state = "piratemelee" - icon_living = "piratemelee" - icon_dead = "piratemelee_dead" - turns_per_move = 5 - response_help = "pushes" - response_disarm = "shoves" - response_harm = "hits" - speed = 4 - maxHealth = 100 - health = 100 - can_escape = TRUE - - harm_intent_damage = 5 - - natural_weapon = /obj/item/melee/energy/sword/pirate/activated - unsuitable_atmos_damage = 15 - var/corpse = /obj/effect/landmark/corpse/pirate - var/weapon1 = /obj/item/melee/energy/sword/pirate - - faction = "pirate" - - ai_holder = /datum/ai_holder/simple_animal/melee/pirate - -/mob/living/simple_animal/hostile/pirate/ranged - name = "Pirate Gunner" - icon_state = "pirateranged" - icon_living = "pirateranged" - icon_dead = "piratemelee_dead" - projectilesound = 'sound/weapons/laser.ogg' - ranged = 1 - rapid = 1 - projectiletype = /obj/item/projectile/beam - corpse = /obj/effect/landmark/corpse/pirate/ranged - weapon1 = /obj/item/gun/energy/laser - - ai_holder = /datum/ai_holder/simple_animal/pirate/ranged - -/mob/living/simple_animal/hostile/pirate/death(gibbed, deathmessage, show_dead_message) - ..(gibbed, deathmessage, show_dead_message) - if(corpse) - new corpse (src.loc) - if(weapon1) - new weapon1 (src.loc) - qdel(src) - return - -/datum/ai_holder/simple_animal/pirate/ranged - pointblank = TRUE // They get close? Just shoot 'em! - firing_lanes = TRUE // But not your buddies! - // conserve_ammo = TRUE // And don't go wasting bullets! - -/datum/ai_holder/simple_animal/melee/pirate - speak_chance = 0 \ No newline at end of file diff --git a/code/modules/mob/living/simple_animal/hostile/retaliate/clown.dm b/code/modules/mob/living/simple_animal/hostile/retaliate/clown.dm deleted file mode 100644 index 58b81c4e39c40..0000000000000 --- a/code/modules/mob/living/simple_animal/hostile/retaliate/clown.dm +++ /dev/null @@ -1,38 +0,0 @@ -/mob/living/simple_animal/hostile/retaliate/clown - name = "clown" - desc = "A denizen of clown planet" - icon_state = "clown" - icon_living = "clown" - icon_dead = "clown_dead" - icon_gib = "clown_gib" - turns_per_move = 5 - response_help = "pokes" - response_disarm = "gently pushes aside" - response_harm = "hits" - a_intent = I_HURT - maxHealth = 75 - health = 75 - speed = -1 - harm_intent_damage = 8 - can_escape = TRUE - minbodytemp = 270 - maxbodytemp = 370 - heat_damage_per_tick = 15 //amount of damage applied if animal's body temperature is higher than maxbodytemp - cold_damage_per_tick = 10 //same as heat_damage_per_tick, only if the bodytemperature it's lower than minbodytemp - unsuitable_atmos_damage = 10 - natural_weapon = /obj/item/natural_weapon/clown - - ai_holder = /datum/ai_holder/simple_animal/retaliate/clown - say_list = /datum/say_list/clown - -/obj/item/natural_weapon/clown - name = "bike horn" - force = 10 - hitsound = 'sound/items/bikehorn.ogg' - -/datum/ai_holder/simple_animal/retaliate/clown - speak_chance = 1 - -/datum/say_list/clown - speak = list("HONK", "Honk!", "Welcome to clown planet!") - emote_see = list("honks") diff --git a/code/modules/mob/living/simple_animal/hostile/retaliate/drone.dm b/code/modules/mob/living/simple_animal/hostile/retaliate/drone.dm deleted file mode 100644 index 79d1541ebedd4..0000000000000 --- a/code/modules/mob/living/simple_animal/hostile/retaliate/drone.dm +++ /dev/null @@ -1,282 +0,0 @@ -/mob/living/simple_animal/hostile/retaliate/malf_drone - name = "combat drone" - desc = "An automated combat drone armed with state of the art weaponry and shielding." - icon_state = "drone" - icon_living = "drone" - icon_dead = "drone_dead" - ranged = TRUE - turns_per_move = 3 - response_help = "pokes" - response_disarm = "gently pushes aside" - response_harm = "hits" - a_intent = I_HURT - health = 300 - maxHealth = 300 - speed = 8 - base_attack_cooldown = 2 SECONDS - move_to_delay = 6 - projectiletype = /obj/item/projectile/beam/drone - projectilesound = 'sound/weapons/laser3.ogg' - destroy_surroundings = 0 - meat_type = null - meat_amount = 0 - bone_material = null - bone_amount = 0 - skin_material = null - skin_amount = 0 - ai_holder = /datum/ai_holder/simple_animal/ranged/pointblank/malf_drone - say_list_type = /datum/say_list/malf_drone - min_gas = null - max_gas = null - minbodytemp = 0 - faction = "malf_drone" - - var/datum/effect/effect/system/trail = /datum/effect/effect/system/trail/ion - var/malfunctioning = TRUE - var/hostile = FALSE - var/hostile_drone = FALSE - var/hostile_range = 10 - var/explode_chance = 1 - var/exploding = FALSE - var/disabled = 0 - var/has_loot = TRUE - - -/mob/living/simple_animal/hostile/retaliate/malf_drone/Destroy() - QDEL_NULL(trail) - return ..() - - -/mob/living/simple_animal/hostile/retaliate/malf_drone/Initialize() - . = ..() - if (prob(50)) - projectiletype = /obj/item/projectile/beam/pulse/drone - projectilesound = 'sound/weapons/pulse2.ogg' - if (ispath(trail)) - trail = new trail - trail.set_up(src) - trail.start() - - -/mob/living/simple_animal/hostile/retaliate/malf_drone/Allow_Spacemove(check_drift) - return TRUE - - -/mob/living/simple_animal/hostile/retaliate/malf_drone/Life() - . = ..() - if (!.) - return - if(disabled > 0) - set_stat(UNCONSCIOUS) - icon_state = "[initial(icon_state)]_dead" - disabled-- - set_wander (FALSE) - ai_holder.speak_chance = 0 - if(disabled <= 0) - set_stat(CONSCIOUS) - icon_state = "[initial(icon_state)]0" - set_wander (TRUE) - ai_holder.speak_chance = 5 - var/sparked = FALSE - if (prob(1)) - sparked = TRUE - visible_message(SPAN_WARNING("\The [src] shudders and shakes.")) - var/datum/effect/effect/system/spark_spread/sparks = new - sparks.set_up(3, 1, src) - sparks.start() - health += rand(25, 50) - if (!sparked && prob(5)) - sparked = TRUE - var/datum/effect/effect/system/spark_spread/sparks = new - sparks.set_up(3, 1, src) - sparks.start() - if (malfunctioning && prob(disabled ? 0 : 1)) - hostile_drone = !hostile_drone - if (hostile_drone) - visible_message(SPAN_WARNING("\The [src] suddenly lights up with activity, searching for targets.")) - else - visible_message(SPAN_WARNING("\The [src] dulls its running lights, becoming passive.")) - if (health / maxHealth > 0.9) - icon_state = "[initial(icon_state)]" - explode_chance = 0 - else if (health / maxHealth > 0.7) - icon_state = "[initial(icon_state)]2" - explode_chance = 0 - else if (health / maxHealth > 0.5) - icon_state = "[initial(icon_state)]1" - explode_chance = 0.5 - else if (health / maxHealth > 0.3) - icon_state = "[initial(icon_state)]0" - explode_chance = 5 - else if (health > 0) - icon_state = "[initial(icon_state)]_dead" - exploding = FALSE - if (!disabled) - visible_message(SPAN_WARNING("\The [src] suddenly goes still and quiet.")) - disabled = rand(150, 600) - walk(src, 0) - if (exploding && prob(20)) - visible_message(SPAN_WARNING("\The [src] begins to spark and shake violently!")) - if (!sparked) - var/datum/effect/effect/system/spark_spread/sparks = new - sparks.set_up(3, 1, src) - sparks.start() - if (!exploding && !disabled && prob(explode_chance)) - exploding = TRUE - set_stat(UNCONSCIOUS) - set_wander(TRUE) - walk(src, 0) - if (!disabled && exploding) - explosion(get_turf(src), 0, 1, 4, 7) - death() - - -/mob/living/simple_animal/hostile/retaliate/malf_drone/emp_act(severity) - if (status_flags & GODMODE) - return - health -= rand(3, 15) * (severity + 1) - disabled = rand(150, 600) - hostile_drone = FALSE - walk(src, 0) - ..() - - -/mob/living/simple_animal/hostile/retaliate/malf_drone/death() - ..(FALSE, "suddenly breaks apart.", "You have been destroyed.") - if (has_loot) - var/turf/origin = get_turf(src) - if (origin) - var/datum/effect/effect/system/spark_spread/sparks = new - sparks.set_up(3, 1, origin) - sparks.start() - var/list/loot = list() - for (var/i = rand(1, 2) to 1 step -1) - loot += new /obj/item/material/shard/shrapnel/steel (origin) - for (var/i = rand(1, 2) to 1 step -1) - loot += new /obj/item/material/shard/shrapnel/aluminium (origin) - if (prob(50)) - loot += new /obj/item/material/shard/shrapnel/titanium (origin) - if (prob(50)) - loot += new /obj/item/material/shard/shrapnel/copper (origin) - for (var/i = rand(1, 3) to 1 step -1) - loot += new /obj/item/drone_loot_board (origin) - var/strength = exploding ? 1 : 0.5 - for (var/obj/item/item as anything in loot) - item.throw_at(CircularRandomTurfAround(origin, Frand(2, 6) * strength), 5, 5 * strength) - qdel(src) - - - - -/obj/item/drone_loot_board/name = "circuit board (drone systems)" - -/obj/item/drone_loot_board/desc = "A damaged piece of circuitry that was once part of a combat drone." - -/obj/item/drone_loot_board/icon = 'icons/obj/module.dmi' - -/obj/item/drone_loot_board/icon_state = "id_mod" - -/obj/item/drone_loot_board/item_state = "electronic" - -/obj/item/drone_loot_board/w_class = ITEM_SIZE_SMALL - -/obj/item/drone_loot_board/obj_flags = OBJ_FLAG_CONDUCTIBLE - - -/obj/item/drone_loot_board/Initialize() - . = ..() - if (prob(33)) - LAZYSET(origin_tech, TECH_DATA, rand(2, 4)) - if (prob(33)) - LAZYSET(origin_tech, TECH_POWER, rand(2, 4)) - if (prob(33)) - LAZYSET(origin_tech, TECH_ENGINEERING, rand(2, 4)) - if (prob(33)) - LAZYSET(origin_tech, TECH_COMBAT, rand(2, 4)) - - - - -/obj/item/projectile/beam/drone/damage = 15 - - - - -/obj/item/projectile/beam/pulse/drone/damage = 10 - - - - -/datum/ai_holder/simple_animal/ranged/pointblank/malf_drone/speak_chance = 5 - - -/datum/ai_holder/simple_animal/ranged/pointblank/malf_drone/list_targets() - var/mob/living/simple_animal/hostile/retaliate/malf_drone/D = holder - if (!D.hostile_drone) - return ..() - var/list/targets = list() - for (var/mob/living/M in oview(D.hostile_range, D)) - if (M.stat == DEAD) - continue - if (M.type == D.type) - continue - targets += M - return targets - - - - -/datum/say_list/malf_drone/speak = list( - "ALERT.", - "Hostile-ile-ile entities dee-twhoooo-wected.", - "Threat parameterszzzz- szzet.", - "Bring sub-sub-sub-systems uuuup to combat alert alpha-a-a." -) - -/datum/say_list/malf_drone/emote_see = list( - "beeps menacingly", - "whirrs threateningly", - "scans its immediate vicinity" -) - -/datum/say_list/malf_drone/say_understood = list( - "Affirmative.", - "Positive." -) - -/datum/say_list/malf_drone/say_cannot = list( - "Denied.", - "Negative." -) - -/datum/say_list/malf_drone/say_maybe_target = list( - "Possible threat detected. Investigating.", - "Motion detected.", - "Investigating." -) - -/datum/say_list/malf_drone/say_got_target = list( - "Threat detected.", - "New task: Remove threat.", - "Threat removal engaged.", - "Engaging target." -) - -/datum/say_list/malf_drone/threaten_sound = 'sound/effects/turret/move1.wav' - -/datum/say_list/malf_drone/say_threaten = list( - "Motion detected, judging target..." -) - -/datum/say_list/malf_drone/stand_down_sound = 'sound/effects/turret/move2.wav' - -/datum/say_list/malf_drone/say_stand_down = list( - "Visual lost.", - "Error: Target not found." -) - -/datum/say_list/malf_drone/say_escalate = list( - "Viable target found. Removing.", - "Engaging target.", - "Target judgement complete. Removal required." -) diff --git a/code/modules/mob/living/simple_animal/hostile/retaliate/exoplanet.dm b/code/modules/mob/living/simple_animal/hostile/retaliate/exoplanet.dm deleted file mode 100644 index e5f3dce67c9e3..0000000000000 --- a/code/modules/mob/living/simple_animal/hostile/retaliate/exoplanet.dm +++ /dev/null @@ -1,273 +0,0 @@ - -/mob/living/simple_animal/hostile/retaliate/beast - var/hunger = 0 - var/list/prey = list() - ai_holder = /datum/ai_holder/simple_animal/beast - -/mob/living/simple_animal/hostile/retaliate/beast/Life() - . = ..() - if(!.) - return FALSE - hunger++ - if(hunger < 100) //stop hunting when satiated - ai_holder.hostile = FALSE - else - for(var/mob/living/simple_animal/S in range(src,1)) - if(S.stat == DEAD) - visible_message("[src] consumes \the body of [S]!") - var/turf/T = get_turf(S) - var/obj/item/remains/xeno/X = new(T) - X.desc += "These look like they belong to \a [S.name]." - hunger = max(0, hunger - 5*S.maxHealth) - if(prob(5)) - S.gib() - else - qdel(S) - - if (hunger > 500) - ai_holder.hostile = TRUE - -/mob/living/simple_animal/proc/name_species(newname as text) - set name = "Name Alien Species" - set category = "IC" - set src in view() - - if(!GLOB.using_map.use_overmap) - return - if(!CanInteract(usr, GLOB.conscious_state)) - return - if (isghost(usr)) - return - - for(var/obj/effect/overmap/visitable/sector/exoplanet/E) - if(src in E.animals) - newname = sanitizeName(newname, allow_numbers = TRUE, force_first_letter_uppercase = FALSE) - if(newname && CanInteract(usr, GLOB.conscious_state)) - if(E.rename_species(type, newname)) - to_chat(usr,"This species will be known from now on as '[newname]'.") - else - to_chat(usr,"This species has already been named!") - return - -/mob/living/simple_animal/hostile/retaliate/beast/samak - name = "samak" - desc = "A fast, armoured predator accustomed to hiding and ambushing in cold terrain." - faction = "samak" - icon_state = "samak" - icon_living = "samak" - icon_dead = "samak_dead" - move_to_delay = 2 - maxHealth = 125 - health = 125 - speed = 2 - natural_weapon = /obj/item/natural_weapon/claws - cold_damage_per_tick = 0 - natural_armor = list( - melee = ARMOR_MELEE_KNIVES - ) - - ai_holder = /datum/ai_holder/simple_animal/samak - say_list_type = /datum/say_list/samak - -/mob/living/simple_animal/hostile/retaliate/beast/samak/alt - desc = "A fast, armoured predator accustomed to hiding and ambushing." - icon_state = "samak-alt" - icon_living = "samak-alt" - icon_dead = "samak-alt_dead" - -/mob/living/simple_animal/hostile/retaliate/beast/diyaab - name = "diyaab" - desc = "A small pack animal. Although omnivorous, it will hunt meat on occasion." - faction = "diyaab" - icon_state = "diyaab" - icon_living = "diyaab" - icon_dead = "diyaab_dead" - move_to_delay = 1 - maxHealth = 25 - health = 25 - speed = 1 - natural_weapon = /obj/item/natural_weapon/claws/weak - cold_damage_per_tick = 0 - mob_size = MOB_SMALL - - ai_holder = /datum/ai_holder/simple_animal/diyaab - say_list_type = /datum/say_list/diyaab - -/mob/living/simple_animal/hostile/retaliate/beast/shantak - name = "shantak" - desc = "A piglike creature with a bright iridiscent mane that sparkles as though lit by an inner light. Don't be fooled by its beauty though." - faction = "shantak" - icon_state = "shantak" - icon_living = "shantak" - icon_dead = "shantak_dead" - move_to_delay = 1 - maxHealth = 75 - health = 75 - speed = 1 - natural_weapon = /obj/item/natural_weapon/claws - cold_damage_per_tick = 0 - - ai_holder = /datum/ai_holder/simple_animal/shantak - say_list_type = /datum/say_list/shantak - -/mob/living/simple_animal/hostile/retaliate/beast/shantak/alt - desc = "A piglike creature with a long and graceful mane. Don't be fooled by its beauty." - icon_state = "shantak-alt" - icon_living = "shantak-alt" - icon_dead = "shantak-alt_dead" - -/mob/living/simple_animal/yithian - name = "yithian" - desc = "A friendly creature vaguely resembling an oversized snail without a shell." - icon_state = "yithian" - icon_living = "yithian" - icon_dead = "yithian_dead" - mob_size = MOB_TINY - density = FALSE - - ai_holder = /datum/ai_holder/simple_animal/passive - -/mob/living/simple_animal/tindalos - name = "tindalos" - desc = "It looks like a large, flightless grasshopper." - icon_state = "tindalos" - icon_living = "tindalos" - icon_dead = "tindalos_dead" - mob_size = MOB_TINY - density = FALSE - - ai_holder = /datum/ai_holder/simple_animal/passive - -/mob/living/simple_animal/thinbug - name = "taki" - desc = "It looks like a bunch of legs." - icon_state = "thinbug" - icon_living = "thinbug" - icon_dead = "thinbug_dead" - mob_size = MOB_MINISCULE - density = FALSE - - ai_holder = /datum/ai_holder/simple_animal/passive/thinbug - say_list_type = /datum/say_list/thinbug - -/mob/living/simple_animal/hostile/retaliate/royalcrab - name = "cragenoy" - desc = "It looks like a crustacean with an exceedingly hard carapace. Watch the pinchers!" - faction = "crab" - icon_state = "royalcrab" - icon_living = "royalcrab" - icon_dead = "royalcrab_dead" - move_to_delay = 3 - maxHealth = 150 - health = 150 - speed = 1 - natural_weapon = /obj/item/natural_weapon/pincers - natural_armor = list( - melee = ARMOR_MELEE_RESISTANT - ) - - ai_holder = /datum/ai_holder/simple_animal/retaliate/royalcrab - say_list = /datum/say_list/royalcrab - -/mob/living/simple_animal/hostile/retaliate/beast/charbaby - name = "charbaby" - desc = "A huge grubby creature." - icon_state = "char" - icon_living = "char" - icon_dead = "char_dead" - mob_size = MOB_LARGE - health = 45 - maxHealth = 45 - natural_weapon = /obj/item/natural_weapon/charbaby - speed = 2 - response_help = "pats briefly" - response_disarm = "gently pushes" - response_harm = "strikes" - return_damage_min = 2 - return_damage_max = 3 - harm_intent_damage = 1 - blood_color = COLOR_NT_RED - natural_armor = list( - laser = ARMOR_LASER_HANDGUNS - ) - ai_holder = /datum/ai_holder/simple_animal/melee/charbaby - -/datum/ai_holder/simple_animal/melee/charbaby - -/datum/ai_holder/simple_animal/melee/charbaby/engage_target() - . = ..() - var/mob/living/simple_animal/hostile/retaliate/beast/charbaby/C = holder - if(isliving(C.target_mob) && prob(25)) - var/mob/living/L = C.target_mob - if(prob(10)) - L.adjust_fire_stacks(1) - L.IgniteMob() -/obj/item/natural_weapon/charbaby - name = "scalding hide" - damtype = DAMAGE_BURN - force = 5 - attack_verb = list("singed") - -/mob/living/simple_animal/hostile/retaliate/beast/charbaby/attack_hand(mob/living/carbon/human/H) - . = ..() - reflect_unarmed_damage(H, DAMAGE_BURN, "amorphous mass") - -/mob/living/simple_animal/hostile/retaliate/beast/shantak/lava - desc = "A vaguely canine looking beast. It looks as though its fur is made of stone wool." - icon_state = "lavadog" - icon_living = "lavadog" - icon_dead = "lavadog_dead" - - say_list_type = /datum/say_list/shantak/lava - - -/* AI */ - -/datum/ai_holder/simple_animal/beast - speak_chance = 5 - -/datum/ai_holder/simple_animal/diyaab/post_melee_attack(atom/A) - . = ..() - if(holder.Adjacent(A)) - holder.IMove(get_step(holder, pick(GLOB.alldirs))) - holder.face_atom(A) - -/datum/ai_holder/simple_animal/samak - speak_chance = 5 - -/datum/ai_holder/simple_animal/diyaab - speak_chance = 5 - -/datum/ai_holder/simple_animal/shantak - speak_chance = 2 - -/datum/ai_holder/simple_animal/passive/thinbug - speak_chance = 1 - -/datum/ai_holder/simple_animal/retaliate/royalcrab - speak_chance = 1 - -/* Say Lists */ - -/datum/say_list/samak - speak = list("Hruuugh!","Hrunnph") - emote_see = list("paws the ground","shakes its mane","stomps") - emote_hear = list("snuffles") - -/datum/say_list/diyaab - speak = list("Awrr?","Aowrl!","Worrl") - emote_see = list("sniffs the air cautiously","looks around") - emote_hear = list("snuffles") - -/datum/say_list/shantak - speak = list("Shuhn","Shrunnph?","Shunpf") - emote_see = list("scratches the ground","shakes out its mane","tinkles gently") - -/datum/say_list/thinbug - emote_hear = list("scratches the ground","chitters") - -/datum/say_list/royalcrab - emote_see = list("skitters","oozes liquid from its mouth", "scratches at the ground", "clicks its claws") - -/datum/say_list/shantak/lava - speak = list("Karuph","Karump") diff --git a/code/modules/mob/living/simple_animal/hostile/retaliate/giant_crab.dm b/code/modules/mob/living/simple_animal/hostile/retaliate/giant_crab.dm deleted file mode 100644 index db416a15a16a4..0000000000000 --- a/code/modules/mob/living/simple_animal/hostile/retaliate/giant_crab.dm +++ /dev/null @@ -1,123 +0,0 @@ -/mob/living/simple_animal/hostile/retaliate/giant_crab - name = "giant crab" - desc = "A gigantic crustacean with a blue shell. Its left claw is nearly twice the size of its right." - icon_state = "bluecrab" - icon_living = "bluecrab" - icon_dead = "bluecrab_dead" - mob_size = MOB_LARGE - turns_per_move = 5 - response_help = "pats" - response_disarm = "gently nudges" - response_harm = "strikes" - meat_amount = 12 - can_escape = TRUE //snip snip - break_stuff_probability = 15 - faction = "crabs" - pry_time = 2 SECONDS - - health = 350 - maxHealth = 350 - natural_weapon = /obj/item/natural_weapon/pincers/giant - return_damage_min = 2 - return_damage_max = 5 - harm_intent_damage = 1 - natural_armor = list( - melee = ARMOR_MELEE_RESISTANT, - bullet = ARMOR_BALLISTIC_PISTOL - ) - special_attack_min_range = 0 - special_attack_max_range = 1 - special_attack_cooldown = 2 MINUTES - - var/mob/living/carbon/human/victim //the human we're grabbing - var/grab_duration = 3 //duration of disable in life ticks to simulate a grab - var/grab_damage = 6 //brute damage before reductions, per crab's life tick - var/list/grab_desc = list("thrashes", "squeezes", "crushes") - var/continue_grab_prob = 35 //probability that a successful grab will be extended by one life tick - - ai_holder = /datum/ai_holder/simple_animal/retaliate/crab/giant - say_list_type = /datum/say_list/crab - -/obj/item/natural_weapon/pincers/giant - force = 15 - attack_verb = list("snipped", "pinched", "crushed") - -/mob/living/simple_animal/hostile/retaliate/giant_crab/Initialize() //embiggen - . = ..() - SetTransform(scale = 1.5) - - -/mob/living/simple_animal/hostile/retaliate/giant_crab/Destroy() - . = ..() - victim = null - -/mob/living/simple_animal/hostile/retaliate/giant_crab/attack_hand(mob/living/carbon/human/H) - . = ..() - reflect_unarmed_damage(H, DAMAGE_BRUTE, "armoured carapace") - -/mob/living/simple_animal/hostile/retaliate/giant_crab/Life() - . = ..() - - process_grab() - - if(!.) - return FALSE - - if((health > maxHealth / 1.5) && length(ai_holder.attackers) && prob(10)) - if(victim) - release_grab() - ai_holder.attackers = list() //TODO: does this still work? - ai_holder.lose_target() - visible_message("\The [src] lowers its pincer.") - -/mob/living/simple_animal/hostile/retaliate/giant_crab/can_special_attack(mob/living/carbon/human/H) - . = ..() - - if(!.) - return FALSE - if(!Adjacent(H)) - return FALSE - -/mob/living/simple_animal/hostile/retaliate/giant_crab/proc/process_grab() - if(victim && !incapacitated()) - if(victim.stat >= UNCONSCIOUS || !Adjacent(victim) || !victim.incapacitated()) - release_grab() - return - visible_message(SPAN_DANGER("\The [src] [pick(grab_desc)] \the [victim] in its pincer!")) - victim.apply_damage(grab_damage, DAMAGE_BRUTE, BP_CHEST, DAMAGE_FLAG_EDGE, used_weapon = "crab's pincer") - -/mob/living/simple_animal/hostile/retaliate/giant_crab/proc/release_grab() - if(victim) - visible_message(SPAN_NOTICE("\The [src] releases its grip on \the [victim]!")) - GLOB.destroyed_event.unregister(victim) - victim = null - set_AI_busy(FALSE) - grab_damage = initial(grab_damage) - - -/datum/ai_holder/simple_animal/retaliate/crab/giant/engage_target() - var/mob/living/simple_animal/hostile/retaliate/giant_crab/C = holder - if(ishuman(target)) - var/mob/living/carbon/human/H = target - if(C.victim == H) - if(!C.Adjacent(C.victim)) - C.release_grab() - else if(prob(C.continue_grab_prob)) - H.Weaken(1) - H.Stun(1) - C.grab_damage++ - C.visible_message(SPAN_MFAUNA("\The [src] tightens its grip on \the [C.victim]!")) - return - - if(!C.victim && C.can_special_attack(H)) - GLOB.destroyed_event.register(C.victim, C, /mob/living/simple_animal/hostile/retaliate/giant_crab/proc/release_grab) - C.victim = H - H.Weaken(C.grab_duration) - H.Stun(C.grab_duration) - C.visible_message(SPAN_MFAUNA("\The [C] catches \the [C.victim] in its powerful pincer!")) - set_busy(TRUE) - return - - . = ..() -/datum/ai_holder/simple_animal/retaliate/crab - speak_chance = 1 diff --git a/code/modules/mob/living/simple_animal/hostile/retaliate/giant_parrot/giant_parrot.dm b/code/modules/mob/living/simple_animal/hostile/retaliate/giant_parrot/giant_parrot.dm deleted file mode 100644 index 0c8a51f080b7d..0000000000000 --- a/code/modules/mob/living/simple_animal/hostile/retaliate/giant_parrot/giant_parrot.dm +++ /dev/null @@ -1,100 +0,0 @@ -/mob/living/simple_animal/hostile/retaliate/parrot/space - name = "space parrot" - desc = "It could be some all-knowing being that, for reasons we could never hope to understand, is assuming the shape and general mannerisms of a parrot - or just a rather large bird." - gender = FEMALE - health = 750 //how sweet it is to be a god! - maxHealth = 750 - mob_size = MOB_LARGE - speak_emote = list("professes","speaks unto you","elaborates","proclaims") - natural_weapon = /obj/item/natural_weapon/giant - min_gas = null - max_gas = null - minbodytemp = 0 - universal_understand = TRUE - see_invisible = SEE_INVISIBLE_NOLIGHTING - see_in_dark = 7 - can_escape = TRUE - relax_chance = 60 //a gentle beast - impatience = 10 - parrot_isize = ITEM_SIZE_LARGE - simple_parrot = TRUE - ability_cooldown = 2 MINUTES - - meat_amount = 10 - bone_amount = 20 - skin_amount = 20 - - var/list/subspecies = list(/decl/parrot_subspecies, - /decl/parrot_subspecies/purple, - /decl/parrot_subspecies/blue, - /decl/parrot_subspecies/green, - /decl/parrot_subspecies/red, - /decl/parrot_subspecies/brown, - /decl/parrot_subspecies/black) - var/get_subspecies_name = TRUE - - ai_holder = /datum/ai_holder/simple_animal/retaliate - say_list = /datum/say_list/parrot/space - -/mob/living/simple_animal/hostile/retaliate/parrot/space/Initialize() - . = ..() - var/subspecies_type = DEFAULTPICK(subspecies, null) - if(subspecies_type) - var/decl/parrot_subspecies/ps = decls_repository.get_decl(subspecies_type) - icon_set = ps.icon_set - skin_material = ps.feathers - if(get_subspecies_name) - SetName(ps.name) - SetTransform(scale = 2) - update_icon() - -/mob/living/simple_animal/hostile/retaliate/parrot/space/can_special_attack(mob/living/carbon/human/H) - . = ..() - - if(!.) - return FALSE - if(!Adjacent(H)) - return FALSE - -/mob/living/simple_animal/hostile/retaliate/parrot/space/do_special_attack(atom/A) - . = ..() - - if(ishuman(A) && can_special_attack(A)) - var/mob/living/carbon/human/H = A - if(prob(70)) - H.Weaken(rand(2,3)) - // cooldown_ability(ability_cooldown / 1.5) - visible_message(SPAN_MFAUNA("\The [src] flaps its wings mightily and bowls over \the [H] with a gust!")) - - else if(H.get_equipped_item(slot_head)) - var/obj/item/clothing/head/HAT = H.get_equipped_item(slot_head) - if(H.canUnEquip(HAT)) - visible_message(SPAN_MFAUNA("\The [src] rips \the [H]'s [HAT] off!")) - // cooldown_ability(ability_cooldown) - H.unEquip(HAT, get_turf(src)) - - - -//subtypes -/mob/living/simple_animal/hostile/retaliate/parrot/space/lesser - name = "Avatar of the Howling Dark" - subspecies = list(/decl/parrot_subspecies/black) - get_subspecies_name = FALSE - natural_weapon = /obj/item/natural_weapon/large - health = 300 - maxHealth = 300 - -/mob/living/simple_animal/hostile/retaliate/parrot/space/megafauna - name = "giant parrot" - desc = "A huge parrot-like bird." - get_subspecies_name = FALSE - health = 350 - maxHealth = 350 - speak_emote = list("squawks") - natural_weapon = /obj/item/natural_weapon/large - relax_chance = 30 - impatience = 5 - -/datum/say_list/parrot/space - speak = list("...") - emote_hear = list("sings a song to herself", "preens herself") \ No newline at end of file diff --git a/code/modules/mob/living/simple_animal/hostile/retaliate/giant_parrot/giant_parrot_species.dm b/code/modules/mob/living/simple_animal/hostile/retaliate/giant_parrot/giant_parrot_species.dm deleted file mode 100644 index bfc71510a743e..0000000000000 --- a/code/modules/mob/living/simple_animal/hostile/retaliate/giant_parrot/giant_parrot_species.dm +++ /dev/null @@ -1,34 +0,0 @@ -/decl/parrot_subspecies - var/name = "giant parrot" - var/icon_set = "parrot" - var/feathers = MATERIAL_SKIN_FEATHERS - -/decl/parrot_subspecies/purple - name = "simurgh" - icon_set = "purple" - feathers = MATERIAL_SKIN_FEATHERS_PURPLE - -/decl/parrot_subspecies/blue - name = "ziz" - icon_set = "blue" - feathers = MATERIAL_SKIN_FEATHERS_BLUE - -/decl/parrot_subspecies/green - name = "fenghuang" - icon_set = "green" - feathers = MATERIAL_SKIN_FEATHERS_GREEN - -/decl/parrot_subspecies/brown - name = "roc" - icon_set = "brown" - feathers = MATERIAL_SKIN_FEATHERS_BROWN - -/decl/parrot_subspecies/red - name = "phoenix" - icon_set = "red" - feathers = MATERIAL_SKIN_FEATHERS_RED - -/decl/parrot_subspecies/black - name = "lord of birds" - icon_set = "black" - feathers = MATERIAL_SKIN_FEATHERS_BLACK diff --git a/code/modules/mob/living/simple_animal/hostile/retaliate/goose.dm b/code/modules/mob/living/simple_animal/hostile/retaliate/goose.dm deleted file mode 100644 index c54b5076fd502..0000000000000 --- a/code/modules/mob/living/simple_animal/hostile/retaliate/goose.dm +++ /dev/null @@ -1,96 +0,0 @@ -/mob/living/simple_animal/hostile/retaliate/goose - name = "goose" - desc = "A large waterfowl, known for its beauty and quick temper when provoked." - icon = 'icons/mob/simple_animal/goose.dmi' - icon_state = "goose" - icon_living = "goose" - icon_dead = "goose_dead" - speak_emote = list("honks") - response_help = "pets" - response_disarm = "gently pushes aside" - response_harm = "strikes" - health = 45 - maxHealth = 45 - natural_weapon = /obj/item/natural_weapon/goosefeet - pass_flags = PASS_FLAG_TABLE - faction = "geese" - pry_time = 8 SECONDS - break_stuff_probability = 5 - - meat_type = /obj/item/reagent_containers/food/snacks/meat/chicken/game - meat_amount = 6 - bone_amount = 8 - skin_amount = 8 - skin_material = MATERIAL_SKIN_FEATHERS - - var/enrage_potency = 3 - var/enrage_potency_loose = 4 - var/loose_threshold = 15 - var/max_damage = 22 - var/loose = FALSE //goose loose status - - ai_holder = /datum/ai_holder/simple_animal/retaliate/goose - say_list_type = /datum/say_list/goose - - -/datum/ai_holder/simple_animal/retaliate/goose/react_to_attack(atom/movable/attacker) - . = ..() - var/mob/living/simple_animal/hostile/retaliate/goose/G = holder - if(G.stat == CONSCIOUS) - G.enrage(G.enrage_potency) - -/obj/item/natural_weapon/goosefeet - name = "goose feet" - gender = PLURAL - attack_verb = list("smacked around") - force = 0 - damtype = DAMAGE_BRUTE - canremove = FALSE - -/mob/living/simple_animal/hostile/retaliate/goose/on_update_icon() - if(stat == DEAD) - icon_state = icon_dead - else if(loose) - icon_state = "goose_loose" - icon_living = "goose_loose" - -/mob/living/simple_animal/hostile/retaliate/goose/death(gibbed, deathmessage, show_dead_message) - . = ..() - update_icon() - -/mob/living/simple_animal/hostile/retaliate/goose/proc/enrage(var/potency) - var/obj/item/W = get_natural_weapon() - if(W) - W.force = min((W.force + potency), max_damage) - if(!loose && prob(25) && (W && W.force >= loose_threshold)) //second wind - loose = TRUE - health = (initial(health) * 1.5) - maxHealth = (initial(maxHealth) * 1.5) - enrage_potency = enrage_potency_loose - desc += " The [name] is loose! Oh no!" - update_icon() - -/mob/living/simple_animal/hostile/retaliate/goose/dire - name = "dire goose" - desc = "A large bird. It radiates destructive energy." - icon_state = "dire" - icon_living = "dire" - icon_dead = "dire_dead" - health = 250 - maxHealth = 250 - enrage_potency = 3 - loose_threshold = 20 - max_damage = 35 - skull_type = /obj/item/pen/fancy/quill - -/mob/living/simple_animal/hostile/retaliate/goose/doctor - name = "\improper Dr. Anatidae" - desc = "A large waterfowl, known for its beauty and quick temper when provoked. This one has a nametag, 'Dr. Anatidae'. What an odd Pet.." - icon_state = "goose_labcoat" - icon_living = "goose_labcoat" - icon_dead = "goose_labcoat_dead" - -/datum/say_list/goose - speak = list("Honk!") - emote_hear = list("honks","flaps its wings","clacks") - emote_see = list("flaps its wings", "scratches the ground") diff --git a/code/modules/mob/living/simple_animal/hostile/retaliate/jelly.dm b/code/modules/mob/living/simple_animal/hostile/retaliate/jelly.dm deleted file mode 100644 index 4a50c488a002f..0000000000000 --- a/code/modules/mob/living/simple_animal/hostile/retaliate/jelly.dm +++ /dev/null @@ -1,112 +0,0 @@ -/mob/living/simple_animal/hostile/retaliate/jelly - name = "zeq" - desc = "It looks like a floating jellyfish. How does it do that?" - faction = "zeq" - icon_state = "jelly" - icon_living = "jelly" - icon_dead = "jelly_dead" - move_to_delay = 1 - maxHealth = 75 - health = 75 - speed = 1 - natural_weapon = /obj/item/natural_weapon/tentacles - var/gets_random_color = TRUE - - ai_holder = /datum/ai_holder/simple_animal/retaliate/jelly - say_list = /datum/say_list/jelly - -/obj/item/natural_weapon/tentacles - name = "tentacles" - attack_verb = list("stung","slapped") - force = 10 - damtype = DAMAGE_BURN - -/mob/living/simple_animal/hostile/retaliate/jelly/Initialize() - . = ..() - if(gets_random_color) - color = color_rotation(round(rand(0,360),20)) - -/mob/living/simple_animal/hostile/retaliate/jelly/alt - icon_state = "jelly-alt" - icon_living = "jelly-alt" - icon_dead = "jelly-alt_dead" - -//megajellyfish -/mob/living/simple_animal/hostile/retaliate/jelly/mega - name = "zeq queen" - desc = "A gigantic jellyfish-like creature. Its bell wobbles about almost as if it's ready to burst." - maxHealth = 300 - health = 300 - gets_random_color = FALSE - can_escape = TRUE - - var/jelly_scale = 3 - var/split_type = /mob/living/simple_animal/hostile/retaliate/jelly/mega/half - var/static/megajelly_color - -/mob/living/simple_animal/hostile/retaliate/jelly/mega/Initialize() - . = ..() - SetTransform(scale = jelly_scale) - var/obj/item/W = get_natural_weapon() - if(W) - W.force *= jelly_scale - if(!megajelly_color) - megajelly_color = color_rotation(round(rand(0,360),20)) - color = megajelly_color - -/mob/living/simple_animal/hostile/retaliate/jelly/mega/death() - if(split_type) - jelly_split() - else - ..() - -/mob/living/simple_animal/hostile/retaliate/jelly/mega/proc/jelly_split() - visible_message(SPAN_MFAUNA("\The [src] rumbles briefly before splitting into two!")) - var/kidnum = 2 - for(var/i = 0 to kidnum) - var/mob/living/simple_animal/child = new split_type(get_turf(src)) - child.min_gas = min_gas.Copy() - child.max_gas = max_gas.Copy() - child.minbodytemp = minbodytemp - child.maxbodytemp = maxbodytemp - QDEL_NULL(src) - -/mob/living/simple_animal/hostile/retaliate/jelly/mega/half - name = "zeq duchess" - desc = "A huge jellyfish-like creature." - maxHealth = 150 - health = 150 - can_escape = TRUE - jelly_scale = 1.5 - split_type = /mob/living/simple_animal/hostile/retaliate/jelly/mega/quarter - -/mob/living/simple_animal/hostile/retaliate/jelly/mega/quarter - name = "zeqling" - desc = "A jellyfish-like creature." - health = 75 - maxHealth = 75 - jelly_scale = 0.75 - can_escape = FALSE - split_type = /mob/living/simple_animal/hostile/retaliate/jelly/mega/fourth - -/mob/living/simple_animal/hostile/retaliate/jelly/mega/fourth - name = "zeqetta" - desc = "A tiny jellyfish-like creature." - health = 40 - maxHealth = 40 - jelly_scale = 0.375 - split_type = /mob/living/simple_animal/hostile/retaliate/jelly/mega/eighth - -/mob/living/simple_animal/hostile/retaliate/jelly/mega/eighth - name = "zeqttina" - desc = "An absolutely tiny jellyfish-like creature." - health = 20 - maxHealth = 20 - jelly_scale = 0.1875 - split_type = null - -/datum/ai_holder/simple_animal/retaliate/jelly - speak_chance = 1 - -/datum/say_list/jelly - emote_see = list("wobbles slightly","oozes something out of tentacles' ends") diff --git a/code/modules/mob/living/simple_animal/hostile/retaliate/king_of_goats.dm b/code/modules/mob/living/simple_animal/hostile/retaliate/king_of_goats.dm deleted file mode 100644 index a261348cf86c5..0000000000000 --- a/code/modules/mob/living/simple_animal/hostile/retaliate/king_of_goats.dm +++ /dev/null @@ -1,262 +0,0 @@ -//Visager's tracks 'Battle!' and 'Miniboss Fight' from the album 'Songs from an Unmade World 2' are available here -//http://freemusicarchive.org/music/Visager/Songs_From_An_Unmade_World_2/ and are made available under the CC BY 4.0 Attribution license, -//which is available for viewing here: https://creativecommons.org/licenses/by/4.0/legalcode - - -//the king and his court -/mob/living/simple_animal/hostile/retaliate/goat/king - name = "king of goats" - desc = "The oldest and wisest of goats; king of his race, peerless in dignity and power. His golden fleece radiates nobility." - icon = 'icons/mob/simple_animal/king_of_goats.dmi' - icon_state = "king_goat" - icon_living = "king_goat" - icon_dead = "goat_dead" - speak_emote = list("brays in a booming voice") - meat_amount = 12 - response_help = "placates" - response_harm = "assaults" - health = 500 - maxHealth = 500 - mob_size = MOB_LARGE - mob_bump_flag = HEAVY - can_escape = TRUE - move_to_delay = 3 - min_gas = null - max_gas = null - minbodytemp = 0 - break_stuff_probability = 35 - flash_vulnerability = 0 - natural_weapon = /obj/item/natural_weapon/goatking - var/current_damtype = DAMAGE_BRUTE - var/list/elemental_weapons = list( - BURN = /obj/item/natural_weapon/goatking/fire, - ELECTROCUTE = /obj/item/natural_weapon/goatking/lightning - ) - var/stun_chance = 5 //chance per attack to Weaken target - - ai_holder = /datum/ai_holder/simple_animal/goat/king - say_list = /datum/say_list/goat/king - -/datum/ai_holder/simple_animal/goat/king - -/datum/ai_holder/simple_animal/goat/king/engage_target() - . = ..() - var/mob/living/simple_animal/hostile/retaliate/goat/king/G = holder - if(isliving(G.target_mob)) - var/mob/living/L = G.target_mob - if(prob(G.stun_chance)) - L.Weaken(0.5) - L.confused += 1 - G.visible_message(SPAN_WARNING("\The [L] is bowled over by the impact of [G]'s attack!")) - -/datum/ai_holder/simple_animal/goat/king/react_to_attack(atom/movable/attacker) - . = ..() - - if(holder.stat == CONSCIOUS && prob(5)) - holder.visible_message(SPAN_WARNING("The [holder] bellows indignantly, with a judgemental gleam in his eye.")) - -/datum/ai_holder/simple_animal/goat/king/phase2/engage_target() - . = ..() - - var/mob/living/simple_animal/hostile/retaliate/goat/king/phase2/G = holder - if (G.current_damtype != DAMAGE_BRUTE) - G.special_attacks++ - -/datum/ai_holder/simple_animal/goat/king/phase2/react_to_attack(atom/movable/attacker) - . = ..() - var/mob/living/simple_animal/hostile/retaliate/goat/king/phase2/G = holder - if(G.spellscast < 5) - if(prob(5) && G.move_to_delay != 1) //speed buff - G.spellscast++ - G.visible_message(SPAN_MFAUNA("\The [G] shimmers and seems to phase in and out of reality itself!")) - G.move_to_delay = 1 - - else if(prob(5)) //stun move - G.spellscast++ - G.visible_message(SPAN_MFAUNA("\The [G]' fleece flashes with blinding light!")) - new /obj/item/grenade/flashbang/instant(G.loc) - - else if(prob(5)) //spawn adds - G.spellscast++ - G.visible_message(SPAN_MFAUNA("\The [G] summons the imperial guard to his aid, and they appear in a flash!")) - new /mob/living/simple_animal/hostile/retaliate/goat/guard/master(get_step(G,pick(GLOB.cardinal))) - new /mob/living/simple_animal/hostile/retaliate/goat/guard(get_step(G,pick(GLOB.cardinal))) - new /mob/living/simple_animal/hostile/retaliate/goat/guard(get_step(G,pick(GLOB.cardinal))) - - else if(prob(5)) //EMP blast - G.spellscast++ - G.visible_message(SPAN_MFAUNA("\The [G] disrupts nearby electrical equipment!")) - empulse(get_turf(G), 5, 2, 0) - - else if (prob(5) && G.current_damtype == DAMAGE_BRUTE && !G.special_attacks) //elemental attacks - G.spellscast++ - if(prob(50)) - G.visible_message(SPAN_MFAUNA("\The [G]' horns flicker with holy white flame!")) - G.current_damtype = DAMAGE_BURN - else - G.visible_message(SPAN_MFAUNA("\The [G]' horns glimmer, electricity arcing between them!")) - G.current_damtype = DAMAGE_SHOCK - - else if(prob(5)) //earthquake spell - G.visible_message("\The [G]' eyes begin to glow ominously as dust and debris in the area is kicked up in a light breeze.") - set_busy(TRUE) - if(do_after(G, 6 SECONDS, do_flags = DO_DEFAULT | DO_USER_UNIQUE_ACT)) - var/health_holder = G.health - G.visible_message(SPAN_MFAUNA("\The [G] raises its fore-hooves and stomps them into the ground with incredible force!")) - explosion(get_step(G,pick(GLOB.cardinal)), -1, 2, 2, 3, 6) - explosion(get_step(G,pick(GLOB.cardinal)), -1, 1, 4, 4, 6) - explosion(get_step(G,pick(GLOB.cardinal)), -1, 3, 4, 3, 6) - set_busy(FALSE) - G.spellscast += 2 - if(!G.health < health_holder) - G.health = health_holder //our own magicks cannot harm us - else - G.visible_message(SPAN_NOTICE("The [G] loses concentration and huffs haughtily.")) - set_busy(FALSE) - - else return - - -/mob/living/simple_animal/hostile/retaliate/goat/king/get_natural_weapon() - if(!(current_damtype in elemental_weapons)) - return ..() - if(ispath(elemental_weapons[current_damtype])) - var/T = elemental_weapons[current_damtype] - elemental_weapons[current_damtype] = new T(src) - return elemental_weapons[current_damtype] - -/obj/item/natural_weapon/goatking - name = "giant horns" - attack_verb = list("brutalized") - force = 40 - sharp = TRUE - -/obj/item/natural_weapon/goatking/fire - name = "burning horns" - damtype = DAMAGE_BURN - -/obj/item/natural_weapon/goatking/lightning - name = "lightning horns" - damtype = DAMAGE_SHOCK - -/mob/living/simple_animal/hostile/retaliate/goat/king/phase2 - name = "emperor of goats" - desc = "The King of Kings, God amongst men, and your superior in every way." - icon_state = "king_goat2" - icon_living = "king_goat2" - meat_amount = 36 - health = 750 - maxHealth = 750 - natural_weapon = /obj/item/natural_weapon/goatking/unleashed - elemental_weapons = list( - BURN = /obj/item/natural_weapon/goatking/fire/unleashed, - ELECTROCUTE = /obj/item/natural_weapon/goatking/lightning/unleashed - ) - default_pixel_y = 5 - break_stuff_probability = 40 - stun_chance = 7 - - ai_holder = /datum/ai_holder/simple_animal/goat/king/phase2 - - var/spellscast = 0 - var/phase3 = FALSE - var/datum/sound_token/boss_theme - var/sound_id = "goat" - var/special_attacks = 0 - -/obj/item/natural_weapon/goatking/unleashed - force = 55 - -/obj/item/natural_weapon/goatking/lightning/unleashed - force = 55 - -/obj/item/natural_weapon/goatking/fire/unleashed - force = 55 - -/mob/living/simple_animal/hostile/retaliate/goat/king/phase2/Initialize() - . = ..() - boss_theme = GLOB.sound_player.PlayLoopingSound(src, sound_id, 'sound/music/Visager-Battle.ogg', volume = 10, range = 7, falloff = 4, prefer_mute = TRUE) - update_icon() - -/mob/living/simple_animal/hostile/retaliate/goat/guard - name = "honour guard" - desc = "A very handsome and noble beast." - icon = 'icons/mob/simple_animal/king_of_goats.dmi' - icon_state = "goat_guard" - icon_living = "goat_guard" - icon_dead = "goat_guard_dead" - health = 125 - maxHealth = 125 - natural_weapon = /obj/item/natural_weapon/goathorns - -/obj/item/natural_weapon/goathorns - name = "horns" - attack_verb = list("impaled", "stabbed") - force = 15 - sharp = TRUE - -/mob/living/simple_animal/hostile/retaliate/goat/guard/master - name = "master of the guard" - desc = "A very handsome and noble beast - the most trusted of all the king's men." - icon_state = "goat_guard_m" - icon_living = "goat_guard_m" - icon_dead = "goat_guard_m_dead" - health = 200 - maxHealth = 200 - natural_weapon = /obj/item/natural_weapon/goathorns - move_to_delay = 3 - -/mob/living/simple_animal/hostile/retaliate/goat/king/phase2/proc/phase3_transition() - phase3 = TRUE - spellscast = 0 - health = 750 - new /obj/item/grenade/flashbang/instant(src.loc) - QDEL_NULL(boss_theme) - boss_theme = GLOB.sound_player.PlayLoopingSound(src, sound_id, 'sound/music/Visager-Miniboss_Fight.ogg', volume = 10, range = 8, falloff = 4, prefer_mute = TRUE) - stun_chance = 10 - update_icon() - visible_message("\The [src]' wounds close with a flash, and when he emerges, he's even larger than before!") - -/mob/living/simple_animal/hostile/retaliate/goat/king/phase2/on_update_icon() - SetTransform(scale = phase3 ? 1.5 : 1.25) - if (phase3) - icon_state = "king_goat3" - icon_living = "king_goat3" - default_pixel_y = 10 - -/mob/living/simple_animal/hostile/retaliate/goat/king/phase2/Life() - . = ..() - if(!.) - return FALSE - if(special_attacks >= 6 && current_damtype != DAMAGE_BRUTE) - visible_message(SPAN_MFAUNA("The energy surrounding \the [src]'s horns dissipates.")) - current_damtype = DAMAGE_BRUTE - - if(health <= 150 && !phase3 && spellscast == 5) //begin phase 3, reset spell limit and heal - phase3_transition() - -/mob/living/simple_animal/hostile/retaliate/goat/king/proc/OnDeath() - visible_message("\The [src] lets loose a terrific wail as its wounds close shut with a flash of light, and its eyes glow even brighter than before!") - new /mob/living/simple_animal/hostile/retaliate/goat/king/phase2(src.loc) - qdel(src) - -/mob/living/simple_animal/hostile/retaliate/goat/king/phase2/OnDeath() - QDEL_NULL(boss_theme) - if(phase3) - visible_message(SPAN_MFAUNA("\The [src] shrieks as the seal on his power breaks and his wool sheds off!")) - new /obj/item/towel/fleece(src.loc) - -/mob/living/simple_animal/hostile/retaliate/goat/king/death() - ..() - OnDeath() - -/mob/living/simple_animal/hostile/retaliate/goat/king/phase2/Destroy() - QDEL_NULL(boss_theme) - . = ..() - -/mob/living/simple_animal/hostile/retaliate/goat/king/Allow_Spacemove(check_drift = 0) - return 1 - -/datum/say_list/goat/king - emote_hear = list("brays in a booming voice") - emote_see = list("stamps a mighty foot, shaking the surroundings") diff --git a/code/modules/mob/living/simple_animal/hostile/retaliate/parrot.dm b/code/modules/mob/living/simple_animal/hostile/retaliate/parrot.dm deleted file mode 100644 index c67f3d3be8c42..0000000000000 --- a/code/modules/mob/living/simple_animal/hostile/retaliate/parrot.dm +++ /dev/null @@ -1,781 +0,0 @@ -/* Parrots! - * Contains - * Defines - * Inventory (headset stuff) - * Attack responses - * AI - * Procs / Verbs (usable by players) - * Poly - */ - -/* - * Defines - */ - -//Only a maximum of one action and one intent should be active at any given time. -//Actions -#define PARROT_PERCH 1 //Sitting/sleeping, not moving -#define PARROT_SWOOP 2 //Moving towards or away from a target -#define PARROT_WANDER 4 //Moving without a specific target in mind - -//Intents -#define PARROT_STEAL 8 //Flying towards a target to steal it/from it -#define PARROT_ATTACK 16 //Flying towards a target to attack it -#define PARROT_RETURN 32 //Flying towards its perch -#define PARROT_FLEE 64 //Flying away from its attacker - - -/mob/living/simple_animal/hostile/retaliate/parrot - name = "parrot" - desc = "A large, colourful tropical bird native to Earth, known for its strong beak and ability to mimic speech." - icon = 'icons/mob/simple_animal/parrot.dmi' - icon_state = "parrot_fly" - icon_living = "parrot_fly" - icon_dead = "parrot_dead" - pass_flags = PASS_FLAG_TABLE - mob_size = MOB_SMALL - - speak_emote = list("squawks","says","yells") - - natural_weapon = /obj/item/natural_weapon/beak - turns_per_move = 5 - meat_type = /obj/item/reagent_containers/food/snacks/cracker - - response_help = "pets" - response_disarm = "gently moves aside" - response_harm = "swats" - universal_speak = TRUE - - meat_type = /obj/item/reagent_containers/food/snacks/meat/chicken/game - meat_amount = 3 - skin_material = MATERIAL_SKIN_FEATHERS - - var/parrot_state = PARROT_WANDER //Hunt for a perch when created - var/parrot_sleep_max = 25 //The time the parrot sits while perched before looking around. Mostly a way to avoid the parrot's AI in life() being run every single tick. - var/parrot_sleep_dur = 25 //Same as above, this is the var that physically counts down - var/parrot_dam_zone = list(BP_CHEST, BP_HEAD, BP_L_ARM, BP_R_ARM, BP_L_LEG, BP_R_LEG) //For humans, select a bodypart to attack - - var/parrot_speed = 5 //"Delay in world ticks between movement." according to byond. Yeah, that's BS but it does directly affect movement. Higher number = slower. - var/parrot_been_shot = 0 //Parrots get a speed bonus after being shot. This will deincrement every Life() and at 0 the parrot will return to regular speed. - - var/list/speech_buffer = list() - var/list/available_channels = list() - - //Headset for Poly to yell at engineers :) - var/obj/item/device/radio/headset/ears = null - - //The thing the parrot is currently interested in. This gets used for items the parrot wants to pick up, mobs it wants to steal from, - //mobs it wants to attack or mobs that have attacked it - var/atom/movable/parrot_interest = null - - //Parrots will generally sit on their perch unless something catches their eye. - //These vars store their preferred perch and if they don't have one, what they can use as a perch - var/obj/parrot_perch = null - var/list/desired_perches = list( - /obj/machinery/constructable_frame/computerframe, - /obj/structure/displaycase, - /obj/structure/filingcabinet, - /obj/machinery/computer, - /obj/machinery/telecomms, - /obj/machinery/nuclearbomb, - /obj/machinery/particle_accelerator, - /obj/machinery/recharge_station, - /obj/machinery/smartfridge, - /obj/machinery/suit_storage_unit, - /obj/structure/showcase, - /obj/structure/fountain - ) - - //Parrots are kleptomaniacs. This variable ... stores the item a parrot is holding. - var/obj/item/held_item = null - - var/simple_parrot = FALSE //simple parrots ignore all the cool stuff that occupies bulk of this file - var/relax_chance = 75 //we're only little and we know it - var/parrot_isize = ITEM_SIZE_SMALL - var/impatience = 5 //we lose this much from relax_chance each time we calm down - var/icon_set = "parrot" - - ai_holder = /datum/ai_holder/simple_animal/retaliate/parrot - - -/mob/living/simple_animal/hostile/retaliate/parrot/New() - ..() - if(!ears) - var/headset = pick(/obj/item/device/radio/headset/headset_sec, \ - /obj/item/device/radio/headset/headset_eng, \ - /obj/item/device/radio/headset/headset_med, \ - /obj/item/device/radio/headset/headset_sci, \ - /obj/item/device/radio/headset/headset_cargo) - ears = new headset(src) - - parrot_sleep_dur = parrot_sleep_max //In case someone decides to change the max without changing the duration var - - verbs.Add(/mob/living/simple_animal/hostile/retaliate/parrot/proc/steal_from_ground, \ - /mob/living/simple_animal/hostile/retaliate/parrot/proc/steal_from_mob, \ - /mob/living/simple_animal/hostile/retaliate/parrot/verb/drop_held_item_player, \ - /mob/living/simple_animal/hostile/retaliate/parrot/proc/perch_player) - - update_icon() - -/mob/living/simple_animal/hostile/retaliate/parrot/death(gibbed, deathmessage, show_dead_message) - if(held_item) - held_item.dropInto(loc) - held_item = null - walk(src,0) - ..(gibbed, deathmessage, show_dead_message) - -/mob/living/simple_animal/hostile/retaliate/parrot/Stat() - . = ..() - stat("Held Item", held_item) - -/mob/living/simple_animal/hostile/retaliate/parrot/on_update_icon() - icon_state = "[icon_set]_fly" - icon_living = "[icon_set]_fly" - icon_dead = "[icon_set]_dead" - -/* - * Inventory - */ -/mob/living/simple_animal/hostile/retaliate/parrot/show_inv(mob/user as mob) - user.set_machine(src) - if(user.stat) return - - var/dat = "
              Inventory of [name]

              " - if(ears) - dat += "
              Headset: [ears] (Remove)" - else - dat += "
              Headset: Nothing" - - show_browser(user, dat, text("window=mob[];size=325x500", name)) - onclose(user, "mob[real_name]") - return - -/mob/living/simple_animal/hostile/retaliate/parrot/DefaultTopicState() - return GLOB.physical_state - -/mob/living/simple_animal/hostile/retaliate/parrot/OnTopic(mob/user, href_list) - //Is the user's mob type able to do this? - if(ishuman(user) || issmall(user) || isrobot(user)) - - //Removing from inventory - if(href_list["remove_inv"]) - var/remove_from = href_list["remove_inv"] - switch(remove_from) - if("ears") - if(ears) - if(available_channels.len) - src.say("[pick(available_channels)] BAWWWWWK LEAVE THE HEADSET BAWKKKKK!") - else - src.say("BAWWWWWK LEAVE THE HEADSET BAWKKKKK!") - ears.dropInto(loc) - ears = null - for(var/possible_phrase in say_list.speak) - if(copytext_char(possible_phrase,1,3) in department_radio_keys) - possible_phrase = copytext_char(possible_phrase,3,length(possible_phrase)) - else - to_chat(user, "There is nothing to remove from its [remove_from].") - return TOPIC_HANDLED - - //Adding things to inventory - if(href_list["add_inv"]) - var/add_to = href_list["add_inv"] - if(!user.get_active_hand()) - to_chat(user, "You have nothing in your hand to put on its [add_to].") - return TOPIC_HANDLED - switch(add_to) - if("ears") - if(ears) - to_chat(user, "It's already wearing something.") - return TOPIC_HANDLED - else - var/obj/item/item_to_add = usr.get_active_hand() - if(!item_to_add) - return TOPIC_HANDLED - - if( !istype(item_to_add, /obj/item/device/radio/headset) ) - to_chat(user, "This object won't fit.") - return TOPIC_HANDLED - if(!user.unEquip(item_to_add, src)) - return TOPIC_HANDLED - var/obj/item/device/radio/headset/headset_to_add = item_to_add - - src.ears = headset_to_add - to_chat(user, "You fit the headset onto [src].") - - available_channels.Cut() - for(var/ch in headset_to_add.channels) - switch(ch) - if("Engineering") - available_channels.Add(":e") - if("Command") - available_channels.Add(":c") - if("Security") - available_channels.Add(":s") - if("Science") - available_channels.Add(":n") - if("Medical") - available_channels.Add(":m") - if("Mining") - available_channels.Add(":d") - if("Cargo") - available_channels.Add(":q") - return TOPIC_HANDLED - - return ..() - - -/* - * Attack responces - */ -//Humans, monkeys, aliens -/mob/living/simple_animal/hostile/retaliate/parrot/attack_hand(mob/living/carbon/M as mob) - ..() - if(client) - return - - if(simple_parrot) //all the real stuff gets handled in /hostile/retaliate - return - - if(!stat && M.a_intent == I_HURT) - icon_state = "[icon_set]_fly" //It is going to be flying regardless of whether it flees or attacks - - if(parrot_state == PARROT_PERCH) - parrot_sleep_dur = parrot_sleep_max //Reset it's sleep timer if it was perched - - parrot_interest = M - parrot_state = PARROT_SWOOP //The parrot just got hit, it WILL move, now to pick a direction.. - - if(M.health < 50) //Weakened mob? Fight back! - parrot_state |= PARROT_ATTACK - else - parrot_state |= PARROT_FLEE //Otherwise, fly like a bat out of hell! - drop_held_item(0) - return - -//Mobs with objects -/mob/living/simple_animal/hostile/retaliate/parrot/attackby(var/obj/item/O as obj, var/mob/user as mob) - ..() - if(!stat && !client && !istype(O, /obj/item/stack/medical)) - if(O.force) - if(parrot_state == PARROT_PERCH) - parrot_sleep_dur = parrot_sleep_max //Reset it's sleep timer if it was perched - - parrot_interest = user - parrot_state = PARROT_SWOOP | PARROT_FLEE - icon_state = "[icon_set]_fly" - drop_held_item(0) - return - -//Bullets -/mob/living/simple_animal/hostile/retaliate/parrot/bullet_act(var/obj/item/projectile/Proj) - if (status_flags & GODMODE) - return PROJECTILE_FORCE_MISS - ..() - if(!stat && !client) - if(parrot_state == PARROT_PERCH) - parrot_sleep_dur = parrot_sleep_max //Reset it's sleep timer if it was perched - - parrot_interest = null - parrot_state = PARROT_WANDER //OWFUCK, Been shot! RUN LIKE HELL! - parrot_been_shot += 5 - icon_state = "[icon_set]_fly" - drop_held_item(0) - return - - -/* - * AI - Not really intelligent, but I'm calling it AI anyway. - */ -/mob/living/simple_animal/hostile/retaliate/parrot/Life() - . = ..() - if(!.) - return FALSE - - if(length(ai_holder.attackers) && prob(relax_chance)) - give_up() - - if(simple_parrot) - return FALSE - - //Sprite and AI update for when a parrot gets pulled - if(pulledby && stat == CONSCIOUS) - icon_state = "[icon_set]_fly" - if(!client) - parrot_state = PARROT_WANDER - return - - if(client || stat) - return //Lets not force players or dead/incap parrots to move - - if(!isturf(src.loc)) - return // Let's not bother in nullspace - - -//-----SPEECH - /* Parrot speech mimickry! - Phrases that the parrot hears in mob/living/say() get added to speach_buffer. - Every once in a while, the parrot picks one of the lines from the buffer and replaces an element of the 'speech' list. - Then it clears the buffer to make sure they don't magically remember something from hours ago. */ - if(speech_buffer.len && prob(10)) - if(say_list.speak.len) - say_list.speak.Remove(pick(say_list.speak)) - - say_list.speak.Add(pick(speech_buffer)) - speech_buffer.Cut() - -//-----SLEEPING - if(parrot_state == PARROT_PERCH) - if(parrot_perch && parrot_perch.loc != src.loc) //Make sure someone hasnt moved our perch on us - if(parrot_perch in view(src)) - parrot_state = PARROT_SWOOP | PARROT_RETURN - icon_state = "[icon_set]_fly" - return - else - parrot_state = PARROT_WANDER - icon_state = "[icon_set]_fly" - return - - if(--parrot_sleep_dur) //Zzz - return - - else - //This way we only call the stuff below once every [sleep_max] ticks. - parrot_sleep_dur = parrot_sleep_max - - //Cycle through message modes for the headset - if(say_list.speak.len) - var/list/newspeak = list() - - if(available_channels.len && src.ears) - for(var/possible_phrase in say_list.speak) - - //50/50 chance to not use the radio at all - var/useradio = 0 - if(prob(50)) - useradio = 1 - - if(copytext_char(possible_phrase,1,3) in department_radio_keys) - possible_phrase = "[useradio?pick(available_channels):""] [copytext_char(possible_phrase,3,length(possible_phrase)+1)]" //crop out the channel prefix - else - possible_phrase = "[useradio?pick(available_channels):""] [possible_phrase]" - - newspeak.Add(possible_phrase) - - else //If we have no headset or channels to use, don't try to use any! - for(var/possible_phrase in say_list.speak) - if(copytext_char(possible_phrase,1,3) in department_radio_keys) - possible_phrase = "[copytext_char(possible_phrase,3,length(possible_phrase)+1)]" //crop out the channel prefix - newspeak.Add(possible_phrase) - say_list.speak = newspeak - - //Search for item to steal - parrot_interest = search_for_item() - if(parrot_interest) - visible_emote("looks in [parrot_interest]'s direction and takes flight") - parrot_state = PARROT_SWOOP | PARROT_STEAL - icon_state = "[icon_set]_fly" - return - -//-----WANDERING - This is basically a 'I don't know what to do yet' state - else if(parrot_state == PARROT_WANDER) - //Stop movement, we'll set it later - walk(src, 0) - parrot_interest = null - - //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)) - SelfMove(pick(GLOB.cardinal)) - return - - if(!held_item && !parrot_perch) //If we've got nothing to do.. look for something to do. - var/atom/movable/AM = search_for_perch_and_item() //This handles checking through lists so we know it's either a perch or stealable item - if(AM) - if((isitem(AM) && can_pick_up(AM)) || isliving(AM)) //If stealable item - parrot_interest = AM - visible_emote("turns and flies towards [parrot_interest]") - parrot_state = PARROT_SWOOP | PARROT_STEAL - return - else //Else it's a perch - parrot_perch = AM - parrot_state = PARROT_SWOOP | PARROT_RETURN - return - return - - if(parrot_interest && (parrot_interest in view(src))) - parrot_state = PARROT_SWOOP | PARROT_STEAL - return - - if(parrot_perch && (parrot_perch in view(src))) - parrot_state = PARROT_SWOOP | PARROT_RETURN - return - - else //Have an item but no perch? Find one! - parrot_perch = search_for_perch() - if(parrot_perch) - parrot_state = PARROT_SWOOP | PARROT_RETURN - return -//-----STEALING - else if(parrot_state == (PARROT_SWOOP | PARROT_STEAL)) - walk(src,0) - if(!parrot_interest || held_item) - parrot_state = PARROT_SWOOP | PARROT_RETURN - return - - if(!(parrot_interest in view(src))) - parrot_state = PARROT_SWOOP | PARROT_RETURN - return - - if(in_range(src, parrot_interest)) - - if(isliving(parrot_interest)) - steal_from_mob() - - if(isitem(parrot_interest) && can_pick_up(parrot_interest))//This should ensure that we only grab the item we want, and make sure it's not already collected on our perch, a correct size, and not bolted to the floor - if(!parrot_perch || parrot_interest.loc != parrot_perch.loc) - held_item = parrot_interest - parrot_interest.forceMove(src) - visible_message("[src] grabs the [held_item]!", "You grab the [held_item]!", "You hear the sounds of wings flapping furiously.") - - parrot_interest = null - parrot_state = PARROT_SWOOP | PARROT_RETURN - return - - walk_to(src, parrot_interest, 1, parrot_speed) - return - -//-----RETURNING TO PERCH - else if(parrot_state == (PARROT_SWOOP | PARROT_RETURN)) - walk(src, 0) - if(!parrot_perch || !isturf(parrot_perch.loc)) //Make sure the perch exists and somehow isnt inside of something else. - parrot_perch = null - parrot_state = PARROT_WANDER - return - - if(in_range(src, parrot_perch)) - forceMove(parrot_perch.loc) - drop_held_item() - parrot_state = PARROT_PERCH - icon_state = "[icon_set]_sit" - return - - walk_to(src, parrot_perch, 1, parrot_speed) - return - -//-----FLEEING - else if(parrot_state == (PARROT_SWOOP | PARROT_FLEE)) - walk(src,0) - give_up() - if(!parrot_interest || !isliving(parrot_interest)) //Sanity - parrot_state = PARROT_WANDER - - walk_away(src, parrot_interest, 1, parrot_speed-parrot_been_shot) - parrot_been_shot-- - return - -//-----ATTACKING - else if(parrot_state == (PARROT_SWOOP | PARROT_ATTACK)) - - //If we're attacking a nothing, an object, a turf or a ghost for some stupid reason, switch to wander - if(!parrot_interest || !isliving(parrot_interest)) - parrot_interest = null - parrot_state = PARROT_WANDER - return - - var/mob/living/L = parrot_interest - - //If the mob is close enough to interact with - if(in_range(src, parrot_interest)) - - //If the mob we've been chasing/attacking dies or falls into crit, check for loot! - if(L.stat) - parrot_interest = null - if(!held_item) - held_item = steal_from_ground() - if(!held_item) - held_item = steal_from_mob() //Apparently it's possible for dead mobs to hang onto items in certain circumstances. - if(parrot_perch in view(src)) //If we have a home nearby, go to it, otherwise find a new home - parrot_state = PARROT_SWOOP | PARROT_RETURN - else - parrot_state = PARROT_WANDER - return - - //Time for the hurt to begin! - L.attackby(get_natural_weapon(), src) - return - - //Otherwise, fly towards the mob! - else - walk_to(src, parrot_interest, 1, parrot_speed) - return - -//-----STATE MISHAP - else //This should not happen. If it does lets reset everything and try again - walk(src,0) - parrot_interest = null - parrot_perch = null - drop_held_item() - parrot_state = PARROT_WANDER - return - -/* - * Procs - */ - -/mob/living/simple_animal/hostile/retaliate/parrot/movement_delay() - if(client && stat == CONSCIOUS && parrot_state != "parrot_fly") - icon_state = "[icon_set]_fly" - ..() - -/mob/living/simple_animal/hostile/retaliate/parrot/proc/search_for_item() - for(var/atom/movable/AM in view(src)) - //Skip items we already stole or are wearing or are too big - if(parrot_perch && AM.loc == parrot_perch.loc || AM.loc == src) - continue - - if(isitem(AM) && can_pick_up(AM)) - return AM - - if(iscarbon(AM)) - var/mob/living/carbon/C = AM - if((C.l_hand && can_pick_up(C.l_hand)) || (C.r_hand && can_pick_up(C.r_hand))) - return C - return null - -/mob/living/simple_animal/hostile/retaliate/parrot/proc/search_for_perch() - for(var/obj/O in view(src)) - for(var/path in desired_perches) - if(istype(O, path)) - return O - return null - -//This proc was made to save on doing two 'in view' loops seperatly -/mob/living/simple_animal/hostile/retaliate/parrot/proc/search_for_perch_and_item() - for(var/atom/movable/AM in view(src)) - for(var/perch_path in desired_perches) - if(istype(AM, perch_path)) - return AM - - //Skip items we already stole or are wearing or are too big - if(parrot_perch && AM.loc == parrot_perch.loc || AM.loc == src) - continue - - if(isitem(AM) && can_pick_up(AM)) - return AM - - if(iscarbon(AM)) - var/mob/living/carbon/C = AM - if((C.l_hand && can_pick_up(C.l_hand)) || (C.r_hand && can_pick_up(C.r_hand))) - return C - return null - -/mob/living/simple_animal/hostile/retaliate/parrot/proc/give_up() - ai_holder.attackers = list() - ai_holder.lose_target() - visible_message("\The [src] seems to calm down.") - relax_chance -= impatience - -/* - * Verbs - These are actually procs, but can be used as verbs by player-controlled parrots. - */ -/mob/living/simple_animal/hostile/retaliate/parrot/proc/steal_from_ground() - set name = "Steal from ground" - set category = "Parrot" - set desc = "Grabs a nearby item." - - if(stat) - return -1 - - if(held_item) - to_chat(src, "You are already holding the [held_item]") - return 1 - - for(var/obj/item/I in view(1,src)) - //Make sure we're not already holding it and it's small enough - if(I.loc != src && can_pick_up(I)) - - //If we have a perch and the item is sitting on it, continue - if(!client && parrot_perch && I.loc == parrot_perch.loc) - continue - - held_item = I - I.forceMove(src) - visible_message("[src] grabs the [held_item]!", "You grab the [held_item]!", "You hear the sounds of wings flapping furiously.") - return held_item - - to_chat(src, "There is nothing of interest to take.") - return 0 - -/mob/living/simple_animal/hostile/retaliate/parrot/proc/steal_from_mob() - set name = "Steal from mob" - set category = "Parrot" - set desc = "Steals an item right out of a person's hand!" - - if(stat) - return -1 - - if(held_item) - to_chat(src, "You are already holding the [held_item]") - return 1 - - var/obj/item/stolen_item = null - - for(var/mob/living/carbon/C in view(1,src)) - if(C.l_hand && can_pick_up(C.l_hand)) - stolen_item = C.l_hand - - if(C.r_hand && can_pick_up(C.r_hand)) - stolen_item = C.r_hand - - if(stolen_item && C.unEquip(stolen_item, src)) - held_item = stolen_item - visible_message("[src] grabs the [held_item] out of [C]'s hand!", "You snag the [held_item] out of [C]'s hand!", "You hear the sounds of wings flapping furiously.") - return held_item - - to_chat(src, "There is nothing of interest to take.") - return 0 - -/mob/living/simple_animal/hostile/retaliate/parrot/verb/drop_held_item_player() - set name = "Drop held item" - set category = "Parrot" - set desc = "Drop the item you're holding." - - if(stat) - return - - src.drop_held_item() - - return - -/mob/living/simple_animal/hostile/retaliate/parrot/proc/drop_held_item(var/drop_gently = 1) - set name = "Drop held item" - set category = "Parrot" - set desc = "Drop the item you're holding." - - if(stat) - return -1 - - if(!held_item) - to_chat(usr, "You have nothing to drop!") - return 0 - - if(!drop_gently) - if(istype(held_item, /obj/item/grenade)) - var/obj/item/grenade/G = held_item - G.dropInto(loc) - G.detonate() - to_chat(src, "You let go of the [held_item]!") - held_item = null - return 1 - - to_chat(src, "You drop the [held_item].") - - held_item.dropInto(loc) - held_item = null - return 1 - -/mob/living/simple_animal/hostile/retaliate/parrot/proc/perch_player() - set name = "Sit" - set category = "Parrot" - set desc = "Sit on a nice comfy perch." - - if(stat || !client) - return - - if(icon_state == "[icon_set]_fly") - for(var/atom/movable/AM in view(src,1)) - for(var/perch_path in desired_perches) - if(istype(AM, perch_path)) - forceMove(AM.loc) - icon_state = "[icon_set]_sit" - return - to_chat(src, "There is no perch nearby to sit on.") - return - -/* - * Sub-types - */ -/mob/living/simple_animal/hostile/retaliate/parrot/Poly - name = "Poly" - desc = "Poly the Parrot. An expert on quantum cracker theory." - -/mob/living/simple_animal/hostile/retaliate/parrot/Poly/New() - ears = new /obj/item/device/radio/headset/headset_eng(src) - available_channels = list(":e") - ..() - -/mob/living/simple_animal/hostile/retaliate/parrot/say(var/message) - - if(stat) - return - - var/verb = "says" - if(speak_emote.len) - verb = pick(speak_emote) - - - var/message_mode="" - if(copytext_char(message,1,2) == get_prefix_key(/decl/prefix/radio_main_channel)) - message_mode = "headset" - message = copytext_char(message,2) - - if(length(message) >= 2) - var/channel_prefix = copytext_char(message, 1 ,3) - message_mode = department_radio_keys[channel_prefix] - - if(copytext_char(message,1,2) == get_prefix_key(/decl/prefix/radio_channel_selection)) - var/positioncut = 3 - message = trim(copytext_char(message,positioncut)) - - message = capitalize(trim_left(message)) - - if(message_mode) - if(message_mode in radiochannels) - if(ears && istype(ears,/obj/item/device/radio)) - ears.talk_into(src,sanitize(message), message_mode, verb, null) - - - ..(message) - - -/mob/living/simple_animal/hostile/retaliate/parrot/hear_say(var/message, var/verb = "says", var/datum/language/language = null, var/alt_name = "",var/italics = 0, var/mob/speaker = null) - if(prob(50)) - parrot_hear(message) - ..() - - - -/mob/living/simple_animal/hostile/retaliate/parrot/hear_radio(var/message, var/verb="says", var/datum/language/language=null, var/part_a, var/part_b, var/part_c, var/mob/speaker = null, var/hard_to_hear = 0) - if(prob(50) && available_channels.len) - parrot_hear("[pick(available_channels)] [message]") - ..() - - -/mob/living/simple_animal/hostile/retaliate/parrot/proc/parrot_hear(var/message="") - if(!message || stat) - return - speech_buffer.Add(message) - -/mob/living/simple_animal/hostile/retaliate/parrot/attack_generic(var/mob/user, var/damage, var/attack_message) - - var/success = ..() - - if(client) - return success - - if(parrot_state == PARROT_PERCH) - parrot_sleep_dur = parrot_sleep_max //Reset it's sleep timer if it was perched - - if(!success) - return 0 - - parrot_interest = user - parrot_state = PARROT_SWOOP | PARROT_ATTACK //Attack other animals regardless - icon_state = "[icon_set]_fly" - return success - -/mob/living/simple_animal/hostile/retaliate/parrot/proc/can_pick_up(obj/item/I) - . = (Adjacent(I) && I.w_class <= parrot_isize && !I.anchored) - -/datum/ai_holder/simple_animal/retaliate/parrot - speak_chance = 1 diff --git a/code/modules/mob/living/simple_animal/hostile/retaliate/retaliate.dm b/code/modules/mob/living/simple_animal/hostile/retaliate/retaliate.dm deleted file mode 100644 index 592fe8b334a93..0000000000000 --- a/code/modules/mob/living/simple_animal/hostile/retaliate/retaliate.dm +++ /dev/null @@ -1,2 +0,0 @@ -/mob/living/simple_animal/hostile/retaliate - ai_holder = /datum/ai_holder/simple_animal/retaliate diff --git a/code/modules/mob/living/simple_animal/hostile/retaliate/snake.dm b/code/modules/mob/living/simple_animal/hostile/retaliate/snake.dm deleted file mode 100644 index 4005e5d37bfe5..0000000000000 --- a/code/modules/mob/living/simple_animal/hostile/retaliate/snake.dm +++ /dev/null @@ -1,55 +0,0 @@ -/mob/living/simple_animal/hostile/retaliate/snake - name = "snake" - desc = "A medium-sized, lethargic reptile, covered in geometrical patterns. You're not sure if this one's venomous or not." - icon = 'icons/mob/simple_animal/animal.dmi' - icon_state = "snake" - icon_living = "snake" - icon_dead = "snake-dead" - speak_emote = list("hisses") - health = 45 - maxHealth = 45 - natural_weapon = /obj/item/natural_weapon/bite - response_help = "pets" - response_disarm = "swats away" - response_harm = "stomps on" - gender = NEUTER - holder_type = /obj/item/holder/snake - mob_size = MOB_MINISCULE - can_escape = TRUE - pass_flags = PASS_FLAG_TABLE - density = FALSE - var/venomous = FALSE - - meat_amount = 1 - bone_amount = 1 - skin_amount = 1 - skin_material = MATERIAL_SKIN_LIZARD - - ai_holder = /datum/ai_holder/simple_animal/retaliate - say_list_type = /datum/say_list/snake - - -/obj/item/holder/snake - name = "snake" - desc = "It's a snake. Holding it is probably a bad idea." - gender = NEUTER - icon_state = "snake" - -/datum/say_list/snake - emote_hear = list("hisses","hisses softly") - emote_see = list("samples the air", "lounges") - -/mob/living/simple_animal/hostile/retaliate/snake/proc/inject_venom(mob/living/L, target_zone) - if (isSynthetic()) - return - - if(venomous) - L.reagents.add_reagent(/datum/reagent/toxin/venom, 2) - -/mob/living/simple_animal/hostile/retaliate/snake/venom //Identical to the one without toxins. - venomous = TRUE - -/mob/living/simple_animal/hostile/retaliate/snake/cob - name = "Cobby" - desc = "A genetically engineered corn snake, spotted with brown diamond patterns over their glimmering copper-colored scales. This one seems particularly lazy." - ai_holder = /datum/ai_holder/simple_animal/passive // We dont want a crew pet killing people. \ No newline at end of file diff --git a/code/modules/mob/living/simple_animal/hostile/retaliate/space_whale.dm b/code/modules/mob/living/simple_animal/hostile/retaliate/space_whale.dm deleted file mode 100644 index 97738e4233e05..0000000000000 --- a/code/modules/mob/living/simple_animal/hostile/retaliate/space_whale.dm +++ /dev/null @@ -1,81 +0,0 @@ -/mob/living/simple_animal/hostile/retaliate/space_whale - name = "space whale" - desc = "A majestic spaceborne cetacean. A true sight to behold." - icon = 'icons/mob/simple_animal/space_whale.dmi' - icon_state = "alive" - icon_dead = "dead" - - health = 250 - maxHealth = 250 - meat_amount = 60 - skin_amount = 15 - - min_gas = null - max_gas = null - minbodytemp = 0 - - turns_per_move = 10 - attack_delay = 2 SECONDS - move_to_delay = 2 SECONDS - - mob_size = MOB_LARGE - mob_bump_flag = HEAVY - mob_swap_flags = HEAVY - mob_push_flags = ALLMOBS - can_escape = TRUE - - faction = "whales" - natural_weapon = /obj/item/natural_weapon/whalebone - response_help = "strokes" - response_disarm = "bumps" - response_harm = "strikes" - - natural_armor = list(melee = ARMOR_MELEE_RESISTANT, - bullet = ARMOR_BALLISTIC_SMALL) - - var/chosen_color - var/species_colors = list(COLOR_COMMAND_BLUE, COLOR_PURPLE, COLOR_DARK_BLUE_GRAY, COLOR_PALE_PINK) - var/mob/living/simple_animal/passive/juvenile_space_whale/baby - - ai_holder = /datum/ai_holder/simple_animal/retaliate - say_list_type = /datum/say_list/space_whale - -/obj/item/natural_weapon/whalebone - name = "head" - attack_verb = list("ramed") - force = 37 - -/mob/living/simple_animal/hostile/retaliate/space_whale/Initialize() - . = ..() - if(prob(1)) - name = "Moby Dick" - return - if(prob(2)) - color = pick(species_colors) - -/mob/living/simple_animal/hostile/retaliate/space_whale/set_dir() - ..() - switch(dir) - if(NORTH, SOUTH) - bound_height = 128 - bound_width = 64 - if(EAST, WEST) - bound_height = 64 - bound_width = 128 - -// /mob/living/simple_animal/hostile/retaliate/space_whale/Retaliate() //So they dont become hostile when spawned and thrown in migration event. -// if(!(health < (maxHealth - 5))) -// return -// ..() - -// /mob/living/simple_animal/hostile/retaliate/space_whale/ValidTarget(var/mob/M) -// . = ..() -// if(istype(M, /mob/living/simple_animal/passive/juvenile_space_whale)) -// return FALSE - -/mob/living/simple_animal/hostile/retaliate/space_whale/Allow_Spacemove() - return TRUE - -/datum/say_list/space_whale - emote_hear = list("vocalises", "sings", "hums") - emote_see = list("flaps around", "rolls") diff --git a/code/modules/mob/living/simple_animal/hostile/russian.dm b/code/modules/mob/living/simple_animal/hostile/russian.dm deleted file mode 100644 index 2ce6a97c1f679..0000000000000 --- a/code/modules/mob/living/simple_animal/hostile/russian.dm +++ /dev/null @@ -1,45 +0,0 @@ -/mob/living/simple_animal/hostile/russian - name = "russian" - desc = "For the Motherland!" - icon_state = "russianmelee" - icon_living = "russianmelee" - icon_dead = "russianmelee_dead" - icon_gib = "syndicate_gib" - turns_per_move = 5 - response_help = "pokes" - response_disarm = "shoves" - response_harm = "hits" - speed = 4 - maxHealth = 100 - health = 100 - harm_intent_damage = 5 - can_escape = TRUE - a_intent = I_HURT - var/corpse = /obj/effect/landmark/corpse/russian - var/dropped_weapon = /obj/item/material/knife/combat - natural_weapon = /obj/item/material/knife/combat - unsuitable_atmos_damage = 15 - faction = "russian" - status_flags = CANPUSH - - ai_holder = /datum/ai_holder/simple_animal/humanoid - -/mob/living/simple_animal/hostile/russian/ranged - icon_state = "russianranged" - icon_living = "russianranged" - corpse = /obj/effect/landmark/corpse/russian/ranged - dropped_weapon = /obj/item/gun/projectile/revolver - ranged = 1 - projectiletype = /obj/item/projectile/bullet - projectilesound = 'sound/weapons/gunshot/gunshot2.ogg' - casingtype = /obj/item/ammo_casing/pistol/magnum - - -/mob/living/simple_animal/hostile/russian/death(gibbed, deathmessage, show_dead_message) - ..(gibbed, deathmessage, show_dead_message) - if(corpse) - new corpse (src.loc) - if(dropped_weapon) - new dropped_weapon (src.loc) - qdel(src) - return \ No newline at end of file diff --git a/code/modules/mob/living/simple_animal/hostile/space_carp.dm b/code/modules/mob/living/simple_animal/hostile/space_carp.dm deleted file mode 100644 index cd5b1d1968f7e..0000000000000 --- a/code/modules/mob/living/simple_animal/hostile/space_carp.dm +++ /dev/null @@ -1,66 +0,0 @@ -/mob/living/simple_animal/hostile/carp - name = "space carp" - desc = "A ferocious, fang-bearing creature that resembles a fish." - icon = 'icons/mob/simple_animal/space_carp.dmi' - icon_state = "carp" - icon_gib = "carp_gib" - turns_per_move = 3 - response_help = "pets the" - response_disarm = "gently pushes aside the" - response_harm = "hits the" - speed = 2 - maxHealth = 50 - health = 50 - harm_intent_damage = 8 - natural_weapon = /obj/item/natural_weapon/bite - pry_time = 10 SECONDS - pry_desc = "biting" - - ai_holder = /datum/ai_holder/simple_animal/melee/carp - - //Space carp aren't affected by atmos. - min_gas = null - max_gas = null - minbodytemp = 0 - break_stuff_probability = 25 - faction = "carp" - bleed_colour = "#5d0d71" - pass_flags = PASS_FLAG_TABLE - meat_type = /obj/item/reagent_containers/food/snacks/fish/space_carp - skin_material = MATERIAL_SKIN_FISH_PURPLE - bone_material = MATERIAL_BONE_CARTILAGE - - var/carp_color = "carp" //holder for icon set - var/list/icon_sets = list("carp", "blue", "yellow", "grape", "rust", "teal") - - -/datum/ai_holder/simple_animal/melee/carp - speak_chance = 0 - - -/datum/ai_holder/simple_animal/melee/carp/find_target(list/possible_targets, has_targets_list) - . = ..() - if (.) - holder.custom_emote(1,"nashes at [.]") - - -/mob/living/simple_animal/hostile/carp/Initialize() - . = ..() - carp_randomify() - update_icon() - - -/mob/living/simple_animal/hostile/carp/proc/carp_randomify() - maxHealth = rand(initial(maxHealth), (1.5 * initial(maxHealth))) - health = maxHealth - if (prob(1)) - carp_color = pick("white", "black") - else - carp_color = pick(icon_sets) - icon_state = "[carp_color]" - icon_living = "[carp_color]" - icon_dead = "[carp_color]_dead" - - -/mob/living/simple_animal/hostile/carp/Allow_Spacemove(check_drift) - return TRUE diff --git a/code/modules/mob/living/simple_animal/hostile/space_pike.dm b/code/modules/mob/living/simple_animal/hostile/space_pike.dm deleted file mode 100644 index 5a5e6a83ba298..0000000000000 --- a/code/modules/mob/living/simple_animal/hostile/space_pike.dm +++ /dev/null @@ -1,32 +0,0 @@ -/mob/living/simple_animal/hostile/carp/pike - name = "space pike" - desc = "A bigger, angrier cousin of the space carp." - icon = 'icons/mob/simple_animal/space_pike.dmi' - icon_state = "pike" - icon_living = "pike" - icon_dead = "pike_dead" - turns_per_move = 2 - move_to_delay = 2 - attack_same = 1 - speed = 1 - mob_size = MOB_LARGE - meat_type = /obj/item/reagent_containers/food/snacks/fish/space_pike - pixel_x = -16 - health = 150 - maxHealth = 150 - harm_intent_damage = 5 - natural_weapon = /obj/item/natural_weapon/bite/pike - can_escape = TRUE - break_stuff_probability = 55 - meat_amount = 10 - bone_amount = 20 - skin_amount = 20 - -/obj/item/natural_weapon/bite/pike - force = 25 - -/mob/living/simple_animal/hostile/carp/pike/carp_randomify() - return - -/mob/living/simple_animal/hostile/carp/pike/on_update_icon() - return diff --git a/code/modules/mob/living/simple_animal/hostile/space_shark.dm b/code/modules/mob/living/simple_animal/hostile/space_shark.dm deleted file mode 100644 index b8cf670cfb3fb..0000000000000 --- a/code/modules/mob/living/simple_animal/hostile/space_shark.dm +++ /dev/null @@ -1,55 +0,0 @@ -/mob/living/simple_animal/hostile/carp/shark - name = "cosmoshark" - desc = "Enormous creature that resembles a shark with magenta glowing lines along its body and set of long deep-purple teeth." - icon = 'icons/mob/simple_animal/space_shark.dmi' - icon_state = "shark" - icon_living = "shark" - icon_dead = "shark_dead" - icon_gib = "shark_dead" - turns_per_move = 5 - meat_type = /obj/item/reagent_containers/food/snacks/fish/space_shark - speed = 2 - maxHealth = 100 - health = 100 - harm_intent_damage = 5 - natural_weapon = /obj/item/natural_weapon/bite/strong - break_stuff_probability = 35 - faction = "shark" - ai_holder = /datum/ai_holder/simple_animal/melee/carp/shark - - -/datum/ai_holder/simple_animal/melee/carp/shark/engage_target() - set waitfor = 0//to deal with sleep() possibly stalling other procs - . = ..() - var/mob/living/simple_animal/hostile/carp/shark/S = holder - var/mob/living/L = . - if(istype(L)) - if(prob(25))//if one is unlucky enough, they get tackled few tiles away - L.visible_message("\The [src] tackles [L]!") - var/tackle_length = rand(3,5) - for (var/i = 1 to tackle_length) - var/turf/T = get_step(L.loc, S.dir)//on a first step of tackling standing mob would block movement so let's check if there's something behind it. Works for consequent moves too - if (T.density || LinkBlocked(L.loc, T) || TurfBlockedNonWindow(T) || DirBlocked(T, GLOB.flip_dir[S.dir])) - break - sleep(2) - S.forceMove(T)//maybe there's better manner then just forceMove() them - L.forceMove(T) - S.visible_message("\The [S] releases [L].") - - -/mob/living/simple_animal/hostile/carp/shark/carp_randomify() - return - - -/mob/living/simple_animal/hostile/carp/shark/on_update_icon() - return - - -/mob/living/simple_animal/hostile/carp/shark/death() - ..() - var/datum/gas_mixture/environment = loc?.return_air() - if (environment) - var/datum/gas_mixture/sharkmaw_phoron = new - sharkmaw_phoron.adjust_gas(GAS_PHORON, 10) - environment.merge(sharkmaw_phoron) - visible_message("\The [src]'s body releases some gas from the gills with a quiet fizz!") diff --git a/code/modules/mob/living/simple_animal/hostile/syndicate.dm b/code/modules/mob/living/simple_animal/hostile/syndicate.dm deleted file mode 100644 index 0b8dbed5d967e..0000000000000 --- a/code/modules/mob/living/simple_animal/hostile/syndicate.dm +++ /dev/null @@ -1,140 +0,0 @@ -/mob/living/simple_animal/hostile/syndicate - name = "\improper Syndicate operative" - desc = "Death to the Company." - icon_state = "syndicate" - icon_living = "syndicate" - icon_dead = "syndicate_dead" - icon_gib = "syndicate_gib" - turns_per_move = 5 - response_help = "pokes" - response_disarm = "shoves" - response_harm = "hits" - speed = 4 - maxHealth = 100 - health = 100 - harm_intent_damage = 5 - natural_weapon = /obj/item/natural_weapon/punch - can_escape = TRUE - a_intent = I_HURT - var/corpse = /obj/effect/landmark/corpse/syndicate - var/weapon1 - var/weapon2 - unsuitable_atmos_damage = 15 - environment_smash = 1 - faction = "syndicate" - status_flags = CANPUSH - -/mob/living/simple_animal/hostile/syndicate/death(gibbed, deathmessage, show_dead_message) - ..(gibbed, deathmessage, show_dead_message) - if(corpse) - new corpse (src.loc) - if(weapon1) - new weapon1 (src.loc) - if(weapon2) - new weapon2 (src.loc) - qdel(src) - return - -///////////////Sword and shield//////////// - -/mob/living/simple_animal/hostile/syndicate/melee - icon_state = "syndicatemelee" - icon_living = "syndicatemelee" - natural_weapon = /obj/item/melee/energy/sword/red/activated - weapon1 = /obj/item/melee/energy/sword/red/activated - weapon2 = /obj/item/shield/energy - status_flags = 0 - -/mob/living/simple_animal/hostile/syndicate/melee/attackby(var/obj/item/O as obj, var/mob/user as mob) - if(O.force) - if(prob(80)) - var/damage = O.force - if (O.damtype == DAMAGE_PAIN) - damage = 0 - health -= damage - visible_message("\The [src] has been attacked with \the [O] by \the [user].") - else - visible_message("\The [src] blocks the [O] with its shield!") - //user.do_attack_animation(src) - else - to_chat(usr, "This weapon is ineffective, it does no damage.") - visible_message("\The [user] gently taps \the [src] with \the [O].") - - -/mob/living/simple_animal/hostile/syndicate/melee/bullet_act(var/obj/item/projectile/Proj) - if(!Proj) return - if (status_flags & GODMODE) - return PROJECTILE_FORCE_MISS - if(prob(65)) - src.health -= Proj.damage - else - visible_message("\The [src] blocks \the [Proj] with its shield!") - return 0 - - -/mob/living/simple_animal/hostile/syndicate/melee/space - min_gas = null - max_gas = null - minbodytemp = 0 - icon_state = "syndicatemeleespace" - icon_living = "syndicatemeleespace" - name = "Syndicate Commando" - corpse = /obj/effect/landmark/corpse/syndicate - speed = 0 - -/mob/living/simple_animal/hostile/syndicate/ranged - ranged = 1 - rapid = 1 - icon_state = "syndicateranged" - icon_living = "syndicateranged" - casingtype = /obj/item/ammo_casing/pistol - projectilesound = 'sound/weapons/gunshot/gunshot_smg.ogg' - projectiletype = /obj/item/projectile/bullet/pistol - - weapon1 = /obj/item/gun/projectile/automatic/merc_smg - -/mob/living/simple_animal/hostile/syndicate/ranged/space - icon_state = "syndicaterangedpsace" - icon_living = "syndicaterangedpsace" - name = "Syndicate Commando" - min_gas = null - max_gas = null - minbodytemp = 0 - corpse = /obj/effect/landmark/corpse/syndicate/commando - speed = 0 - -/mob/living/simple_animal/hostile/viscerator - name = "viscerator" - desc = "A small, twin-bladed machine capable of inflicting very deadly lacerations." - icon = 'icons/mob/simple_animal/critter.dmi' - icon_state = "viscerator_attack" - icon_living = "viscerator_attack" - pass_flags = PASS_FLAG_TABLE - health = 15 - maxHealth = 15 - natural_weapon = /obj/item/natural_weapon/rotating_blade - faction = "syndicate" - min_gas = null - max_gas = null - minbodytemp = 0 - - meat_type = null - meat_amount = 0 - bone_material = null - bone_amount = 0 - skin_material = null - skin_amount = 0 -/obj/item/natural_weapon/rotating_blade - name = "rotating blades" - attack_verb = list("sliced", "cut") - hitsound = 'sound/weapons/bladeslice.ogg' - force = 15 - edge = 1 - sharp = 1 - -/mob/living/simple_animal/hostile/viscerator/death(gibbed, deathmessage, show_dead_message) - ..(null,"is smashed into pieces!", show_dead_message) - qdel(src) - -/mob/living/simple_animal/hostile/viscerator/hive - faction = "hivebot" diff --git a/code/modules/mob/living/simple_animal/hostile/tree.dm b/code/modules/mob/living/simple_animal/hostile/tree.dm deleted file mode 100644 index 4e3785245d905..0000000000000 --- a/code/modules/mob/living/simple_animal/hostile/tree.dm +++ /dev/null @@ -1,49 +0,0 @@ -/mob/living/simple_animal/hostile/tree - name = "pine tree" - desc = "A pissed off tree-like alien. It seems annoyed with the festivities..." - icon = 'icons/obj/flora/pinetrees.dmi' - icon_state = "pine_1" - icon_living = "pine_1" - icon_dead = "pine_1" - icon_gib = "pine_1" - turns_per_move = 5 - meat_type = /obj/item/reagent_containers/food/snacks/fish/unknown - response_help = "brushes" - response_disarm = "pushes" - response_harm = "hits" - speed = -1 - maxHealth = 250 - health = 250 - - pixel_x = -16 - - natural_weapon = /obj/item/natural_weapon/bite - - ai_holder = /datum/ai_holder/simple_animal/melee/tree - - //Space carp aren't affected by atmos. - min_gas = null - max_gas = null - minbodytemp = 0 - - faction = "carp" - -/datum/ai_holder/simple_animal/melee/tree/find_target(list/possible_targets, has_targets_list) - . = ..() - - if(.) - holder.audible_emote("growls at [.]") - -/datum/ai_holder/simple_animal/melee/tree/engage_target() - . = ..() - - var/mob/living/L = . - if(istype(L)) - if(prob(15)) - L.Weaken(3) - L.visible_message("\the [src] knocks down \the [L]!") - -/mob/living/simple_animal/hostile/tree/death(gibbed, deathmessage, show_dead_message) - ..(null,"is hacked into pieces!", show_dead_message) - new /obj/item/stack/material/wood(loc) - qdel(src) \ No newline at end of file diff --git a/code/modules/mob/living/simple_animal/hostile/vagrant.dm b/code/modules/mob/living/simple_animal/hostile/vagrant.dm deleted file mode 100644 index 8361e6a09028d..0000000000000 --- a/code/modules/mob/living/simple_animal/hostile/vagrant.dm +++ /dev/null @@ -1,122 +0,0 @@ - -/mob/living/simple_animal/hostile/vagrant - name = "creature" - desc = "You get the feeling you should run." - icon = 'icons/mob/mob.dmi' - icon_state = "vagrant" - icon_living = "vagrant" - icon_dead = "vagrant" - icon_gib = "vagrant" - maxHealth = 60 - health = 20 - speed = 5 - turns_per_move = 4 - move_to_delay = 4 - response_help = "pets the" - response_disarm = "gently pushes aside the" - response_harm = "hits the" - break_stuff_probability = 0 - faction = "vagrant" - harm_intent_damage = 3 - natural_weapon = /obj/item/natural_weapon/bite/weak - light_color = "#8a0707" - min_gas = null - max_gas = null - minbodytemp = 0 - var/cloaked = 0 - var/mob/living/carbon/human/gripping = null - var/blood_per_tick = 3 - var/health_per_tick = 0.8 - pass_flags = PASS_FLAG_TABLE - - bleed_colour = "#aad9de" - - ai_holder = /datum/ai_holder/hostile/melee/vagrant - -/datum/ai_holder/hostile/melee/vagrant - -/datum/ai_holder/hostile/melee/vagrant/engage_target() - . = ..() - - if(ishuman(.)) - var/mob/living/carbon/human/H = . - var/mob/living/simple_animal/hostile/vagrant/V = holder - if(V.gripping == H) - H.Weaken(1) - H.Stun(1) - return - //This line ensures there's always a reasonable chance of grabbing, while still - //Factoring in health - if(!V.gripping && (V.cloaked || prob(V.health + ((V.maxHealth - V.health) * 2)))) - V.gripping = H - V.cloaked = 0 - V.update_icon() - H.Weaken(1) - H.Stun(1) - H.visible_message("\the [src] latches onto \the [H], pulsating!") - V.forceMove(V.gripping.loc) - -/mob/living/simple_animal/hostile/vagrant/Allow_Spacemove(var/check_drift = 0) - return 1 - -/mob/living/simple_animal/hostile/vagrant/bullet_act(var/obj/item/projectile/Proj) - if (status_flags & GODMODE) - return PROJECTILE_FORCE_MISS - var/oldhealth = health - . = ..() - if((target_mob != Proj.firer) && health < oldhealth && !incapacitated(INCAPACITATION_KNOCKOUT)) //Respond to being shot at - target_mob = Proj.firer - turns_per_move = 3 - ai_holder.walk_to_target() - -/mob/living/simple_animal/hostile/vagrant/death(gibbed) - . = ..() - if(. && !gibbed) - gib() - -/mob/living/simple_animal/hostile/vagrant/Life() - . = ..() - if(!.) - return FALSE - if(gripping) - if(!(get_turf(src) == get_turf(gripping))) - gripping = null - - else if(gripping.should_have_organ(BP_HEART)) - var/blood_volume = round(gripping.vessel.get_reagent_amount(/datum/reagent/blood)) - if(blood_volume > 5) - gripping.vessel.remove_reagent(/datum/reagent/blood, blood_per_tick) - health = min(health + health_per_tick, maxHealth) - if(prob(15)) - to_chat(gripping, "You feel your fluids being drained!") - else - gripping = null - - if(turns_per_move != initial(turns_per_move)) - turns_per_move = initial(turns_per_move) - - if(stance == STANCE_IDLE && !cloaked) - cloaked = 1 - update_icon() - if(health == maxHealth) - new/mob/living/simple_animal/hostile/vagrant(src.loc) - new/mob/living/simple_animal/hostile/vagrant(src.loc) - gib() - return - -/mob/living/simple_animal/hostile/vagrant/on_update_icon() - if(cloaked) //It's fun time - alpha = 75 - set_light(0) - icon_state = initial(icon_state) - move_to_delay = initial(move_to_delay) - else //It's fight time - alpha = 255 - icon_state = "vagrant_glowing" - set_light(0.2, 0.1, 3) - move_to_delay = 2 - -/mob/living/simple_animal/hostile/vagrant/swarm/Initialize() - . = ..() - if(prob(75)) new/mob/living/simple_animal/hostile/vagrant(loc) - if(prob(50)) new/mob/living/simple_animal/hostile/vagrant(loc) diff --git a/code/modules/mob/living/simple_animal/hostile/voxslug.dm b/code/modules/mob/living/simple_animal/hostile/voxslug.dm deleted file mode 100644 index a89b53f1bb138..0000000000000 --- a/code/modules/mob/living/simple_animal/hostile/voxslug.dm +++ /dev/null @@ -1,86 +0,0 @@ -/*VOX SLUG -Small, little HP, poisonous. -*/ - -/mob/living/simple_animal/hostile/voxslug - name = "slug" - desc = "A viscious little creature, it has a mouth of too many teeth and a penchant for blood." - icon_state = "voxslug" - icon_living = "voxslug" - item_state = "voxslug" - icon_dead = "voxslug_dead" - response_help = "pets" - response_disarm = "gently pushes aside" - response_harm = "stamps on" - destroy_surroundings = 0 - health = 15 - maxHealth = 15 - speed = 0 - move_to_delay = 0 - density = TRUE - min_gas = null - mob_size = MOB_MINISCULE - can_escape = TRUE - pass_flags = PASS_FLAG_TABLE - natural_weapon = /obj/item/natural_weapon/bite - - ai_holder = /datum/ai_holder/hostile/melee/voxslug - -/datum/ai_holder/hostile/melee/voxslug/list_targets() - . = ..() - - for (var/mob/living/carbon/human/H in .) - if (H.species.get_bodytype() == SPECIES_VOX) - . -= H - -/datum/ai_holder/hostile/melee/voxslug/engage_target() - if (isliving(holder.loc.loc)) - return - - . = ..() - - var/mob/living/simple_animal/hostile/voxslug/V = holder - if(istype(target, /mob/living/carbon/human)) - var/mob/living/carbon/human/H = target - if(prob(H.getBruteLoss()/2)) - V.attach(H) - -/mob/living/simple_animal/hostile/voxslug/get_scooped(var/mob/living/carbon/grabber) - if(grabber.species.get_bodytype() != SPECIES_VOX) - to_chat(grabber, "\The [src] wriggles out of your hands before you can pick it up!") - return - else return ..() - -/mob/living/simple_animal/hostile/voxslug/proc/attach(var/mob/living/carbon/human/H) - var/obj/item/clothing/suit/space/S = H.get_covering_equipped_item_by_zone(BP_CHEST) - if(istype(S) && !length(S.breaches)) - S.create_breaches(DAMAGE_BRUTE, 20) - if(!length(S.breaches)) //unable to make a hole - return - var/obj/item/organ/external/chest = H.organs_by_name[BP_CHEST] - var/obj/item/holder/voxslug/slug_holder = new(get_turf(src)) - src.forceMove(slug_holder) - chest.embed(slug_holder,0,"\The [src] latches itself onto \the [H]!") - slug_holder.sync(src) - - -/mob/living/simple_animal/hostile/voxslug/Life() - . = ..() - if(. && istype(src.loc, /obj/item/holder) && isliving(src.loc.loc)) //We in somebody - var/mob/living/L = src.loc.loc - if(src.loc in L.get_visible_implants(0)) - if(prob(1)) - to_chat(L, "You feel strange as \the [src] pulses...") - var/datum/reagents/R = L.reagents - R.add_reagent(/datum/reagent/cryptobiolin, 0.5) - -/obj/item/holder/voxslug/attack(var/mob/target, var/mob/user) - var/mob/living/simple_animal/hostile/voxslug/V = contents[1] - if(!V.stat && istype(target, /mob/living/carbon/human)) - var/mob/living/carbon/human/H = target - if(!do_after(user, 3 SECONDS, H, DO_DEFAULT | DO_USER_UNIQUE_ACT | DO_PUBLIC_PROGRESS)) - return - V.attach(H) - qdel(src) - return - ..() diff --git a/code/modules/mob/living/simple_animal/life.dm b/code/modules/mob/living/simple_animal/life.dm deleted file mode 100644 index 181ce3d0a7fbc..0000000000000 --- a/code/modules/mob/living/simple_animal/life.dm +++ /dev/null @@ -1,103 +0,0 @@ -/mob/living/simple_animal/Life() - . = ..() - if(!.) - return FALSE - //Health - if(stat == DEAD) - if(health > 0) - icon_state = icon_living - switch_from_dead_to_living_mob_list() - set_stat(CONSCIOUS) - set_density(1) - return 0 - - handle_atmos() - - if(health <= 0) - death() - return - - if(health > maxHealth) - health = maxHealth - - handle_stunned() - handle_weakened() - handle_paralysed() - handle_confused() - handle_supernatural() - handle_impaired_vision() - - handle_special() - - if(can_bleed && bleed_ticks > 0) - handle_bleeding() - - if(buckled && can_escape) - if(istype(buckled, /obj/effect/energy_net)) - var/obj/effect/energy_net/Net = buckled - Net.escape_net(src) - else if(prob(50)) - escape(src, buckled) - else if(prob(50)) - visible_message("\The [src] struggles against \the [buckled]!") - - return 1 - - -/mob/living/simple_animal/proc/handle_atmos(var/atmos_suitable = 1) - //Atmos - - if(!loc) - return - - var/datum/gas_mixture/environment = loc.return_air() - if(!(MUTATION_SPACERES in mutations) && environment) - - if(abs(environment.temperature - bodytemperature) > 40 ) - bodytemperature += ((environment.temperature - bodytemperature) / 5) - - // don't bother checking it twice if we got a supplied 0 val. - if(atmos_suitable) - if(LAZYLEN(min_gas)) - for(var/gas in min_gas) - if(environment.gas[gas] < min_gas[gas]) - atmos_suitable = FALSE - break - if(atmos_suitable && LAZYLEN(max_gas)) - for(var/gas in max_gas) - if(environment.gas[gas] > max_gas[gas]) - atmos_suitable = FALSE - break - - //Atmos effect - if(bodytemperature < minbodytemp) - fire_alert = 2 - adjustBruteLoss(cold_damage_per_tick) - else if(bodytemperature > maxbodytemp) - fire_alert = 1 - adjustBruteLoss(heat_damage_per_tick) - else - fire_alert = 0 - - if(!atmos_suitable) - adjustBruteLoss(unsuitable_atmos_damage) - -/mob/living/simple_animal/proc/escape(mob/living/M, obj/O) - O.unbuckle_mob(M) - visible_message("\The [M] escapes from \the [O]!") - -/mob/living/simple_animal/proc/handle_supernatural() - if(purge) - purge -= 1 - -/mob/living/simple_animal/gib() - ..(icon_gib,1) - -/mob/living/simple_animal/proc/visible_emote(var/act_desc) - custom_emote(1, act_desc) - -/mob/living/simple_animal/proc/audible_emote(var/act_desc) - custom_emote(2, act_desc) - -/mob/living/simple_animal/proc/handle_special() - return \ No newline at end of file diff --git a/code/modules/mob/living/simple_animal/natural_weapons.dm b/code/modules/mob/living/simple_animal/natural_weapons.dm deleted file mode 100644 index a5b2c6e4967d3..0000000000000 --- a/code/modules/mob/living/simple_animal/natural_weapons.dm +++ /dev/null @@ -1,85 +0,0 @@ -/obj/item/natural_weapon - name = "natural weapons" - gender = PLURAL - attack_verb = list("attacked") - force = 0 - damtype = DAMAGE_BRUTE - canremove = FALSE - obj_flags = OBJ_FLAG_CONDUCTIBLE //for intent of shocking checks, they're right inside the animal - var/show_in_message // whether should we show up in attack message, e.g. 'urist has been bit with teeth by carp' vs 'urist has been bit by carp' - -/obj/item/natural_weapon/attack_message_name() - return show_in_message ? ..() : null - -/obj/item/natural_weapon/can_embed() - return FALSE - -/obj/item/natural_weapon/bite - name = "teeth" - attack_verb = list("bitten") - hitsound = 'sound/weapons/bite.ogg' - force = 10 - sharp = TRUE - -/obj/item/natural_weapon/bite/weak - force = 5 - attack_verb = list("bitten", "nipped") - -/obj/item/natural_weapon/bite/mouse - force = 1 - attack_verb = list("nibbled") - hitsound = null - -/obj/item/natural_weapon/bite/strong - force = 25 - -/obj/item/natural_weapon/claws - name = "claws" - attack_verb = list("mauled", "clawed", "slashed") - force = 15 - sharp = TRUE - edge = TRUE - -/obj/item/natural_weapon/claws/strong - force = 25 - -/obj/item/natural_weapon/claws/weak - force = 5 - attack_verb = list("clawed", "scratched") - -/obj/item/natural_weapon/hooves - name = "hooves" - attack_verb = list("kicked") - force = 5 - -/obj/item/natural_weapon/punch - name = "fists" - attack_verb = list("punched") - force = 10 - -/obj/item/natural_weapon/pincers - name = "pincers" - force = 10 - attack_verb = list("snipped", "pinched") - -/obj/item/natural_weapon/drone_slicer - name = "sharpened leg" - gender = NEUTER - attack_verb = list("sliced") - force = 5 - damtype = DAMAGE_BRUTE - edge = TRUE - show_in_message = TRUE - -/obj/item/natural_weapon/beak - name = "beak" - gender = NEUTER - attack_verb = list("pecked", "jabbed", "poked") - force = 5 - sharp = TRUE - -/obj/item/natural_weapon/large - force = 15 - -/obj/item/natural_weapon/giant - force = 30 diff --git a/code/modules/mob/living/simple_animal/shade.dm b/code/modules/mob/living/simple_animal/shade.dm deleted file mode 100644 index d113417f795d7..0000000000000 --- a/code/modules/mob/living/simple_animal/shade.dm +++ /dev/null @@ -1,67 +0,0 @@ -/mob/living/simple_animal/shade - name = "Shade" - real_name = "Shade" - desc = "A bound spirit." - icon = 'icons/mob/mob.dmi' - icon_state = "shade" - icon_living = "shade" - icon_dead = "shade_dead" - maxHealth = 50 - health = 50 - universal_speak = TRUE - speak_emote = list("hisses") - response_help = "puts their hand through" - response_disarm = "flails at" - response_harm = "punches" - natural_weapon = /obj/item/natural_weapon/shade - minbodytemp = 0 - maxbodytemp = 4000 - min_gas = null - max_gas = null - speed = -1 - status_flags = 0 - faction = "cult" - supernatural = 1 - status_flags = CANPUSH - - bleed_colour = "#181933" - - meat_type = null - meat_amount = 0 - bone_material = null - bone_amount = 0 - skin_material = null - skin_amount = 0 - - ai_holder = /datum/ai_holder/simple_animal/retaliate/shade - say_list_type = /datum/say_list/shade - -/obj/item/natural_weapon/shade - name = "foul touch" - attack_verb = list("drained") - damtype = DAMAGE_BURN - force = 10 - -/mob/living/simple_animal/shade/cultify() - return - -/mob/living/simple_animal/shade/Life() - . = ..() - OnDeathInLife() - -/mob/living/simple_animal/shade/proc/OnDeathInLife() - if(stat == 2) - new /obj/item/ectoplasm (src.loc) - for(var/mob/M in viewers(src, null)) - if((M.client && !( M.blinded ))) - M.show_message("[src] lets out a contented sigh as their form unwinds.") - ghostize() - qdel(src) - return - - -/datum/ai_holder/simple_animal/retaliate/shade - hostile = FALSE - -/datum/say_list/shade - emote_hear = list("wails","screeches") diff --git a/code/modules/mob/living/simple_animal/simple_animal.dm b/code/modules/mob/living/simple_animal/simple_animal.dm deleted file mode 100644 index 7be1c239c9903..0000000000000 --- a/code/modules/mob/living/simple_animal/simple_animal.dm +++ /dev/null @@ -1,362 +0,0 @@ -/mob/living/simple_animal - name = "animal" - icon = 'icons/mob/simple_animal/animal.dmi' - health = 20 - maxHealth = 20 - universal_speak = FALSE - - mob_bump_flag = SIMPLE_ANIMAL - mob_swap_flags = MONKEY|SLIME|SIMPLE_ANIMAL - mob_push_flags = MONKEY|SLIME|SIMPLE_ANIMAL - - meat_type = /obj/item/reagent_containers/food/snacks/meat - meat_amount = 3 - bone_material = MATERIAL_BONE_GENERIC - bone_amount = 5 - skin_material = MATERIAL_SKIN_GENERIC - skin_amount = 5 - - var/show_stat_health = 1 //does the percentage health show in the stat panel for the mob - - var/icon_living = "" - var/icon_dead = "" - var/icon_gib = null //We only try to show a gibbing animation if this exists. - var/icon_rest = null // The iconstate for resting, optional - - var/turns_per_move = 1 - var/turns_since_move = 0 - //Interaction - var/response_help = "tries to help" - var/response_disarm = "tries to disarm" - var/response_harm = "tries to hurt" - var/can_escape = FALSE // 'smart' simple animals such as human enemies, or things small, big, sharp or strong enough to power out of a net - - //Temperature effect - var/minbodytemp = 250 - var/maxbodytemp = 350 - var/heat_damage_per_tick = 3 //amount of damage applied if animal's body temperature is higher than maxbodytemp - var/cold_damage_per_tick = 2 //same as heat_damage_per_tick, only if the bodytemperature it's lower than minbodytemp - var/fire_alert = 0 - - var/min_oxy = 5 // Oxygen in moles, minimum, 0 is 'no minimum' - var/max_oxy = 0 // Oxygen in moles, maximum, 0 is 'no maximum' - var/min_tox = 0 // Phoron min - var/max_tox = 1 // Phoron max - var/min_co2 = 0 // CO2 min - var/max_co2 = 5 // CO2 max - var/min_n2 = 0 // N2 min - var/max_n2 = 0 // N2 max - var/unsuitable_atoms_damage = 2 // This damage is taken when atmos doesn't fit all the requirements above - - //Attack ranged settings - var/projectiletype // The projectiles I shoot - var/projectilesound // The sound I make when I do it - var/projectile_accuracy = 0 // Accuracy modifier to add onto the bullet when its fired. - var/projectile_dispersion = 0 // How many degrees to vary when I do it. - var/casingtype - - // Reloading settings, part of ranged code - var/needs_reload = FALSE // If TRUE, mob needs to reload occasionally - var/reload_max = 1 // How many shots the mob gets before it has to reload, will not be used if needs_reload is FALSE - var/reload_count = 0 // A counter to keep track of how many shots the mob has fired so far. Reloads when it hits reload_max. - var/reload_time = 4 SECONDS // How long it takes for a mob to reload. This is to buy a player a bit of time to run or fight. - var/reload_sound = 'sound/weapons/flipblade.ogg' // What sound gets played when the mob successfully reloads. Defaults to the same sound as reloading guns. Can be null. - - //Hostility settings - var/taser_kill = 1 // Is the mob weak to tasers - - //Mob melee settings - var/list/attacktext = list("attacked") // "You are [attacktext] by the mob!" - var/attack_sound = null // Sound to play when I attack - var/attack_armor_pen = 0 // How much armor pen this attack has. - - var/melee_attack_delay = 4 // If set, the mob will do a windup animation and can miss if the target moves out of the way. - var/ranged_attack_delay = null - var/special_attack_delay = null - - //Mob interaction - var/list/friends = list() // Mobs on this list wont get attacked regardless of faction status. - var/harm_intent_damage = 3 // How much an unarmed harm click does to this mob. - var/list/loot_list = list() // The list of lootable objects to drop, with "/path = prob%" structure - var/obj/item/card/id/myid// An ID card if they have one to give them access to stuff. - - //Movement things. - var/movement_cooldown = 5 // Lower is faster. - var/movement_sound = null // If set, will play this sound when it moves on its own will. - var/turn_sound = null // If set, plays the sound when the mob's dir changes in most cases. - var/movement_shake_radius = 0 // If set, moving will shake the camera of all living mobs within this radius slightly. - var/aquatic_movement = 0 // If set, the mob will move through fluids with no hinderance. - - //Atmos effect - Yes, you can make creatures that require phoron or co2 to survive. N2O is a trace gas and handled separately, hence why it isn't here. It'd be hard to add it. Hard and me don't mix (Yes, yes make all the dick jokes you want with that.) - Errorage - var/list/min_gas = list(GAS_OXYGEN = 5) - var/list/max_gas = list(GAS_PHORON = 1, GAS_CO2 = 5) - - var/unsuitable_atmos_damage = 2 //This damage is taken when atmos doesn't fit all the requirements above - var/speed = 0 //LETS SEE IF I CAN SET SPEEDS FOR SIMPLE MOBS WITHOUT DESTROYING EVERYTHING. Higher speed is slower, negative speed is faster - - //LETTING SIMPLE ANIMALS ATTACK? WHAT COULD GO WRONG. Defaults to zero so Ian can still be cuddly - var/obj/item/natural_weapon/natural_weapon - var/friendly = "nuzzles" - var/environment_smash = 0 - var/resistance = 0 // Damage reduction - var/armor_type = /datum/extension/armor - var/list/natural_armor //what armor animal has - var/flash_vulnerability = 1 // whether or not the mob can be flashed; 0 = no, 1 = yes, 2 = very yes - - var/can_pry = TRUE - var/pry_time = 7 SECONDS //time it takes for mob to pry open a door - var/pry_desc = "prying" //"X begins pry_desc the door!" - - //Special attacks - var/special_attack_min_range = null // The minimum distance required for an attempt to be made. - var/special_attack_max_range = null // The maximum for an attempt. - var/special_attack_charges = null // If set, special attacks will work off of a charge system, and won't be usable if all charges are expended. Good for grenades. - var/special_attack_cooldown = null // If set, special attacks will have a cooldown between uses. - var/last_special_attack = null // world.time when a special attack occured last, for cooldown calculations. - - //Damage resistances - var/grab_resist = 0 // Chance for a grab attempt to fail. Note that this is not a true resist and is just a prob() of failure. - var/list/armor = list( // Values for normal getarmor() checks - "melee" = 0, - "bullet" = 0, - "laser" = 0, - "energy" = 0, - "bomb" = 0, - "bio" = 100, - "rad" = 100 - ) - - // Protection against heat/cold/electric/water effects. - // 0 is no protection, 1 is total protection. Negative numbers increase vulnerability. - var/heat_resist = 0.0 - var/cold_resist = 0.0 - var/shock_resist = 0.0 - var/water_resist = 1.0 - var/poison_resist = 0.0 - var/thick_armor = FALSE // Stops injections and "injections". - var/purge = 0 // Cult stuff. - var/supernatural = FALSE // Ditto. - - var/bleed_ticks = 0 - var/bleed_colour = COLOR_BLOOD_HUMAN - var/can_bleed = TRUE - - // contained in a cage - var/in_stasis = 0 - - //for simple animals with abilities, mostly megafauna - var/ability_cooldown - var/time_last_used_ability - - //for simple animals that reflect damage when attacked in melee - var/return_damage_min - var/return_damage_max - -/mob/living/simple_animal/Initialize() - . = ..() - if(LAZYLEN(natural_armor)) - set_extension(src, armor_type, natural_armor) - -/mob/living/simple_animal/Destroy() - if(istype(natural_weapon)) - QDEL_NULL(natural_weapon) - - . = ..() - -/mob/living/simple_animal/Stat() - . = ..() - - if(statpanel("Status") && show_stat_health) - stat(null, "Health: [round((health / maxHealth) * 100)]%") - -/mob/living/simple_animal/death(gibbed, deathmessage = "dies!", show_dead_message) - icon_state = icon_dead - update_icon() - density = FALSE - adjustBruteLoss(maxHealth) //Make sure dey dead. - walk_to(src,0) - return ..(gibbed,deathmessage,show_dead_message) - -/mob/living/simple_animal/ex_act(severity) - if (status_flags & GODMODE) - return - if(!blinded) - flash_eyes() - - var/damage - switch (severity) - if (EX_ACT_DEVASTATING) - damage = 500 - - if (EX_ACT_HEAVY) - damage = 120 - - if(EX_ACT_LIGHT) - damage = 30 - - apply_damage(damage, DAMAGE_BRUTE, damage_flags = DAMAGE_FLAG_EXPLODE) - -/mob/living/simple_animal/adjustBruteLoss(damage) - ..() - updatehealth() - -/mob/living/simple_animal/adjustFireLoss(damage) - ..() - updatehealth() - -/mob/living/simple_animal/adjustToxLoss(damage) - ..() - updatehealth() - -/mob/living/simple_animal/adjustOxyLoss(damage) - ..() - updatehealth() - -/mob/living/simple_animal/say(var/message) - var/verb = "says" - if(speak_emote.len) - verb = pick(speak_emote) - - message = sanitize(message) - - ..(message, null, verb) - -/mob/living/simple_animal/get_speech_ending(verb, var/ending) - return verb - -/mob/living/simple_animal/put_in_hands(var/obj/item/W) // No hands. - W.forceMove(get_turf(src)) - return 1 - -// Harvest an animal's delicious byproducts -/mob/living/simple_animal/proc/harvest(var/mob/user, var/skill_level) - var/actual_meat_amount = round(max(1,(meat_amount / 2) + skill_level / 2)) - user.visible_message("\The [user] chops up \the [src]!") - if(meat_type && actual_meat_amount > 0 && (stat == DEAD)) - for(var/i=0;i 0) - bleed_ticks = max(bleed_ticks, amount) - else - bleed_ticks = max(bleed_ticks + amount, 0) - - bleed_ticks = round(bleed_ticks) - -/mob/living/simple_animal/proc/handle_bleeding() - bleed_ticks-- - adjustBruteLoss(1) - - var/obj/effect/decal/cleanable/blood/drip/drip = new(get_turf(src)) - drip.basecolor = bleed_colour - drip.update_icon() - -/mob/living/simple_animal/get_digestion_product() - return /datum/reagent/nutriment - -/mob/living/simple_animal/eyecheck() - switch(flash_vulnerability) - if(2 to INFINITY) - return FLASH_PROTECTION_REDUCED - if(1) - return FLASH_PROTECTION_NONE - if(0) - return FLASH_PROTECTION_MAJOR - else - return FLASH_PROTECTION_MAJOR - -/mob/living/simple_animal/SelfMove(turf/n, direct, movetime) - var/turf/old_turf = get_turf(src) - var/old_dir = dir - . = ..() - if(. && movement_shake_radius) - for(var/mob/living/L in range(movement_shake_radius, src)) - shake_camera(L, 1, 1) - if(turn_sound && dir != old_dir) - playsound(src, turn_sound, 50, 1) - else if(movement_sound && old_turf != get_turf(src)) // Playing both sounds at the same time generally sounds bad. - playsound(src, movement_sound, 50, 1) - -/mob/living/simple_animal/movement_delay() - . = movement_cooldown - - // Turf related slowdown - var/turf/T = get_turf(src) - if(T && T.movement_delay && !is_floating) // Flying mobs ignore turf-based slowdown. Aquatic mobs ignore water slowdown, and can gain bonus speed in it. - . += T.movement_delay - - if(purge)//Purged creatures will move more slowly. The more time before their purge stops, the slower they'll move. - if(. <= 0) - . = 1 - . *= purge - - if(a_intent == "walk") - . *= 1.5 - - . += ..() - -/mob/living/simple_animal/get_inventory_slot(obj/item/I) - return -1 - -/mob/living/simple_animal/proc/pry_door(var/mob/user, var/delay, var/obj/machinery/door/pesky_door) - visible_message(SPAN_WARNING("\The [user] begins [pry_desc] at \the [pesky_door]!")) - set_AI_busy(TRUE) - if(do_after(user, delay, pesky_door, DO_DEFAULT | DO_PUBLIC_PROGRESS)) - pesky_door.open(1) - ai_holder.prying = FALSE - set_AI_busy(FALSE) - else - visible_message(SPAN_NOTICE("\The [user] is interrupted.")) - set_AI_busy(FALSE) diff --git a/code/modules/mob/login.dm b/code/modules/mob/login.dm deleted file mode 100644 index a2fb6499c1671..0000000000000 --- a/code/modules/mob/login.dm +++ /dev/null @@ -1,109 +0,0 @@ -//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 - lastKnownIP = client.address - computer_id = client.computer_id - last_ckey = ckey - log_access("Login: [key_name(src)] from [lastKnownIP ? lastKnownIP : "localhost"]-[computer_id] || BYOND v[client.byond_version]") - if(config.log_access) - var/is_multikeying = 0 - for(var/mob/M in GLOB.player_list) - if(M == src) continue - if( M.key && (M.key != key) ) - var/matches - if( (M.lastKnownIP == client.address) ) - matches += "IP ([client.address])" - if( (client.connection != "web") && (M.computer_id == client.computer_id) ) - if(matches) matches += " and " - matches += "ID ([client.computer_id])" - is_multikeying = 1 - if(matches) - if(M.client) - message_admins("[SPAN_DANGER("Notice:")] [key_name_admin(src)] has the same [matches] as [key_name_admin(M)].", 1) - log_access("Notice: [key_name(src)] has the same [matches] as [key_name(M)].") - else - message_admins("[SPAN_DANGER("Notice:")] [key_name_admin(src)] has the same [matches] as [key_name_admin(M)] (no longer logged in).", 1) - log_access("Notice: [key_name(src)] has the same [matches] as [key_name(M)] (no longer logged in).") - if(is_multikeying && !client.warned_about_multikeying) - client.warned_about_multikeying = 1 - spawn(1 SECOND) - to_chat(src, "WARNING: It would seem that you are sharing connection or computer with another player. If you haven't done so already, please contact the staff via the Adminhelp verb to resolve this situation. Failure to do so may result in administrative action. You have been warned.") - - if(config.login_export_addr) - spawn(-1) - var/list/params = new - params["login"] = 1 - params["key"] = client.key - if(isnum(client.player_age)) - params["server_age"] = client.player_age - params["ip"] = client.address - params["clientid"] = client.computer_id - params["roundid"] = game_id - params["name"] = real_name || name - world.Export("[config.login_export_addr]?[list2params(params)]", null, 1) - -/mob/proc/maybe_send_staffwarns(var/action) - if(client?.staffwarn) - for(var/client/C as anything in GLOB.admins) - send_staffwarn(C, action) - -/mob/proc/send_staffwarn(var/client/C, var/action, var/noise = 1) - if(check_rights((R_ADMIN|R_MOD),0,C)) - to_chat(C,"StaffWarn: [client.ckey] [action]
              [client.staffwarn]") - if(noise && C.get_preference_value(/datum/client_preference/staff/play_adminhelp_ping) == GLOB.PREF_HEAR) - sound_to(C, 'sound/misc/staff_message.ogg') - -/mob - var/client/my_client // Need to keep track of this ourselves, since by the time Logout() is called the client has already been nulled - -/mob/Login() - - // Add to player list if missing - if (!GLOB.player_list.Find(src)) - ADD_SORTED(GLOB.player_list, src, /proc/cmp_mob_key) - - update_Login_details() - world.update_status() - - maybe_send_staffwarns("joined the round") - - client.images = null //remove the images such as AIs being unable to see runes - client.screen = list() //remove hud items just in case - InitializeHud() - - next_move = 1 - set_sight(sight|SEE_SELF) - ..() - - my_client = client - - if(loc && !isturf(loc)) - client.eye = loc - client.perspective = EYE_PERSPECTIVE - else - client.eye = src - client.perspective = MOB_PERSPECTIVE - - if(eyeobj) - eyeobj.possess(src) - - l_general = new() - client.screen += l_general - - CreateRenderers() - - refresh_client_images() - reload_fullscreen() // Reload any fullscreen overlays this mob has. - add_click_catcher() - update_action_buttons() - - if(machine) - machine.on_user_login(src) - - //set macro to normal incase it was overriden (like cyborg currently does) - winset(src, null, "mainwindow.macro=macro hotkey_toggle.is-checked=false input.focus=true input.background-color=#d3b5b5") - -/mob/living/carbon/Login() - . = ..() - if(internals && internal) - internals.icon_state = "internal1" diff --git a/code/modules/mob/logout.dm b/code/modules/mob/logout.dm deleted file mode 100644 index 293304aad5fb0..0000000000000 --- a/code/modules/mob/logout.dm +++ /dev/null @@ -1,26 +0,0 @@ -/mob/Logout() - SSnano.user_logout(src) // this is used to clean up (remove) this user's Nano UIs - GLOB.player_list -= src - log_access("Logout: [key_name(src)]") - handle_admin_logout() - if(my_client) - my_client.screen -= l_general - - RemoveRenderers() - - QDEL_NULL(l_general) - hide_client_images() - ..() - - my_client = null - return 1 - -/mob/proc/handle_admin_logout() - if(admin_datums[ckey] && GAME_STATE == RUNLEVEL_GAME) //Only report this stuff if we are currently playing. - var/datum/admins/holder = admin_datums[ckey] - message_staff("[holder.rank] logout: [key_name(src)]") - if(!GLOB.admins.len) //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. - send2adminirc("[key_name(src)] logged out - no more admins online.") - if(config.delist_when_no_admins && config.hub_visible) - world.update_hub_visibility(FALSE) - send2adminirc("Updated hub visibility. The server is now invisible.") diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm deleted file mode 100644 index b98ae2d353df0..0000000000000 --- a/code/modules/mob/mob.dm +++ /dev/null @@ -1,1171 +0,0 @@ -/mob/Destroy()//This makes sure that mobs with clients/keys are not just deleted from the game. - STOP_PROCESSING_MOB(src) - GLOB.dead_mob_list_ -= src - GLOB.living_mob_list_ -= src - GLOB.player_list -= src - unset_machine() - QDEL_NULL(hud_used) - if(istype(skillset)) - QDEL_NULL(skillset) - for(var/obj/item/grab/G in grabbed_by) - qdel(G) - clear_fullscreen() - if(client) - remove_screen_obj_references() - for(var/atom/movable/AM in client.screen) - var/obj/screen/screenobj = AM - if(!istype(screenobj) || !screenobj.globalscreen) - qdel(screenobj) - client.screen = list() - if(mind && mind.current == src) - spellremove(src) - ghostize() - ..() - return QDEL_HINT_HARDDEL - -/mob/proc/remove_screen_obj_references() - hands = null - pullin = null - purged = null - internals = null - oxygen = null - i_select = null - m_select = null - toxin = null - fire = null - bodytemp = null - healths = null - throw_icon = null - nutrition_icon = null - pressure = null - pain = null - item_use_icon = null - gun_move_icon = null - gun_setting_icon = null - ability_master = null - zone_sel = null - -/mob/Initialize() - . = ..() - skillset = new skillset(src) - if(!move_intent) - move_intent = move_intents[1] - if(ispath(move_intent)) - move_intent = decls_repository.get_decl(move_intent) - if (!isliving(src)) - status_flags |= NOTARGET - START_PROCESSING_MOB(src) - -/mob/proc/show_message(msg, type, alt, alt_type)//Message, type of message (1 or 2), alternative message, alt message type (1 or 2) - if(!client) return - - //spaghetti code - if(type) - if((type & VISIBLE_MESSAGE) && is_blind())//Vision related - if(!alt) - return - else - msg = alt - type = alt_type - if((type & AUDIBLE_MESSAGE) && is_deaf())//Hearing related - if(!alt) - return - else - msg = alt - type = alt_type - if(((type & VISIBLE_MESSAGE) && is_blind())) - return - - to_chat(src, msg) - - -// Show a message to all mobs and objects in sight of this one -// This would be for visible actions by the src mob -// message is the message output to anyone who can see e.g. "[src] does something!" -// self_message (optional) is what the src mob sees e.g. "You do something!" -// blind_message (optional) is what blind people will hear e.g. "You hear something!" -/mob/visible_message(message, self_message, blind_message, range = world.view, checkghosts = null, narrate = FALSE, list/exclude_objs = null, list/exclude_mobs = null) - set waitfor = FALSE - var/turf/T = get_turf(src) - var/list/mobs = list() - var/list/objs = list() - get_mobs_and_objs_in_view_fast(T,range, mobs, objs, checkghosts) - - for(var/o in objs) - var/obj/O = o - if (exclude_objs?.len && (O in exclude_objs)) - exclude_objs -= O - continue - O.show_message(message, VISIBLE_MESSAGE, blind_message, AUDIBLE_MESSAGE) - - for(var/m in mobs) - var/mob/M = m - if (exclude_mobs?.len && (M in exclude_mobs)) - exclude_mobs -= M - continue - - var/mob_message = message - - if(isghost(M)) - if(ghost_skip_message(M)) - continue - mob_message = add_ghost_track(mob_message, M) - - if(self_message && M == src) - M.show_message(self_message, VISIBLE_MESSAGE, blind_message, AUDIBLE_MESSAGE) - continue - - if((!M.is_blind() && M.see_invisible >= src.invisibility) || narrate) - M.show_message(mob_message, VISIBLE_MESSAGE, blind_message, AUDIBLE_MESSAGE) - continue - - if(blind_message) - M.show_message(blind_message, AUDIBLE_MESSAGE) - continue - //Multiz, have shadow do same - if(bound_overlay) - bound_overlay.visible_message(message, blind_message, range) - -// Show a message to all mobs and objects in earshot of this one -// This would be for audible actions by the src mob -// message is the message output to anyone who can hear. -// self_message (optional) is what the src mob hears. -// deaf_message (optional) is what deaf people will see. -// hearing_distance (optional) is the range, how many tiles away the message can be heard. -/mob/audible_message(message, self_message, deaf_message, hearing_distance = world.view, checkghosts = null, narrate = FALSE, list/exclude_objs = null, list/exclude_mobs = null) - var/turf/T = get_turf(src) - var/list/mobs = list() - var/list/objs = list() - get_mobs_and_objs_in_view_fast(T, hearing_distance, mobs, objs, checkghosts) - - for(var/m in mobs) - var/mob/M = m - if (exclude_mobs?.len && (M in exclude_mobs)) - exclude_mobs -= M - continue - var/mob_message = message - - if(isghost(M)) - if(ghost_skip_message(M)) - continue - mob_message = add_ghost_track(mob_message, M) - - if(self_message && M == src) - M.show_message(self_message, AUDIBLE_MESSAGE, deaf_message, VISIBLE_MESSAGE) - else if(M.see_invisible >= invisibility || narrate) // Cannot view the invisible - M.show_message(mob_message, AUDIBLE_MESSAGE, deaf_message, VISIBLE_MESSAGE) - else - M.show_message(mob_message, AUDIBLE_MESSAGE) - - for(var/o in objs) - var/obj/O = o - if (exclude_objs?.len && (O in exclude_objs)) - exclude_objs -= O - continue - O.show_message(message, AUDIBLE_MESSAGE, deaf_message, VISIBLE_MESSAGE) - -/mob/proc/add_ghost_track(var/message, var/mob/observer/ghost/M) - ASSERT(istype(M)) - - var/remote = "" - if(M.get_preference_value(/datum/client_preference/ghost_sight) == GLOB.PREF_ALL_EMOTES && !(src in view(M))) - remote = "\[R\]" - - var/track = "([ghost_follow_link(src, M)])" - - message = track + remote + " " + message - return message - -/mob/proc/ghost_skip_message(var/mob/observer/ghost/M) - ASSERT(istype(M)) - if(M.get_preference_value(/datum/client_preference/ghost_sight) == GLOB.PREF_ALL_EMOTES && !(src in view(M))) - if(!client) - return TRUE - return FALSE - -// Returns an amount of power drawn from the object (-1 if it's not viable). -// If drain_check is set it will not actually drain power, just return a value. -// If surge is set, it will destroy/damage the recipient and not return any power. -// Not sure where to define this, so it can sit here for the rest of time. -/atom/proc/drain_power(var/drain_check,var/surge, var/amount = 0) - return -1 - - -/mob/proc/movement_delay() - . = 0 - if(istype(loc, /turf)) - var/turf/T = loc - . += T.movement_delay - - if (drowsyness > 0) - . += 6 - if(lying) //Crawling, it's slower - . += (8 + ((weakened * 3) + (confused * 2))) - . += move_intent.move_delay - . += encumbrance() * (0.5 + 1.5 * (SKILL_MAX - get_skill_value(SKILL_HAULING))/(SKILL_MAX - SKILL_MIN)) //Varies between 0.5 and 2, depending on skill - -//How much the stuff the mob is pulling contributes to its movement delay. -/mob/proc/encumbrance() - . = 0 - if(pulling) - if(istype(pulling, /obj)) - var/obj/O = pulling - . += clamp(O.w_class, 0, ITEM_SIZE_GARGANTUAN) / 5 - else if(istype(pulling, /mob)) - var/mob/M = pulling - . += max(0, M.mob_size) / MOB_MEDIUM - else - . += 1 - . *= (0.8 ** size_strength_mod()) - -//Determines mob size/strength effects for slowdown purposes. Standard is 0; can be pos/neg. -/mob/proc/size_strength_mod() - return log(2, mob_size / MOB_MEDIUM) - -/mob/proc/Life() -// if(organStructure) -// organStructure.ProcessOrgans() - return - -#define UNBUCKLED 0 -#define PARTIALLY_BUCKLED 1 -#define FULLY_BUCKLED 2 -/mob/proc/buckled() - // Preliminary work for a future buckle rewrite, - // where one might be fully restrained (like an elecrical chair), or merely secured (shuttle chair, keeping you safe but not otherwise restrained from acting) - if(!buckled) - return UNBUCKLED - return restrained() ? FULLY_BUCKLED : PARTIALLY_BUCKLED - -/mob/proc/is_blind() - return ((sdisabilities & BLINDED) || blinded || incapacitated(INCAPACITATION_KNOCKOUT)) - -/mob/proc/is_deaf() - return ((sdisabilities & DEAFENED) || ear_deaf || incapacitated(INCAPACITATION_KNOCKOUT)) - -/mob/proc/is_physically_disabled() - return incapacitated(INCAPACITATION_DISABLED) - -/mob/proc/cannot_stand() - return incapacitated(INCAPACITATION_KNOCKDOWN) - -/mob/proc/incapacitated(var/incapacitation_flags = INCAPACITATION_DEFAULT) - if ((incapacitation_flags & INCAPACITATION_STUNNED) && stunned) - return 1 - - if ((incapacitation_flags & INCAPACITATION_FORCELYING) && (weakened || resting || pinned.len)) - return 1 - - if ((incapacitation_flags & INCAPACITATION_KNOCKOUT) && (stat || paralysis || sleeping || (status_flags & FAKEDEATH))) - return 1 - - if((incapacitation_flags & INCAPACITATION_RESTRAINED) && restrained()) - return 1 - - if((incapacitation_flags & (INCAPACITATION_BUCKLED_PARTIALLY|INCAPACITATION_BUCKLED_FULLY))) - var/buckling = buckled() - if(buckling >= PARTIALLY_BUCKLED && (incapacitation_flags & INCAPACITATION_BUCKLED_PARTIALLY)) - return 1 - if(buckling == FULLY_BUCKLED && (incapacitation_flags & INCAPACITATION_BUCKLED_FULLY)) - return 1 - - if((incapacitation_flags & INCAPACITATION_WEAKENED) && weakened) - return 1 - - return 0 - -#undef UNBUCKLED -#undef PARTIALLY_BUCKLED -#undef FULLY_BUCKLED - -/mob/proc/restrained() - return - -/mob/proc/can_be_floored() - if (buckled || lying || can_overcome_gravity()) - return FALSE - return TRUE - -/mob/proc/reset_view(atom/A) - if (client) - A = A ? A : eyeobj - if (istype(A, /atom/movable)) - client.perspective = EYE_PERSPECTIVE - client.eye = A - else - if (isturf(loc)) - client.eye = client.mob - client.perspective = MOB_PERSPECTIVE - else - client.perspective = EYE_PERSPECTIVE - client.eye = loc - return - - -/mob/proc/show_inv(mob/user as mob) - return - -//mob verbs are faster than object verbs. See http://www.byond.com/forum/?post=1326139&page=2#comment8198716 for why this isn't atom/verb/examine() -/mob/verb/examinate(atom/A as mob|obj|turf in view()) - set name = "Examine" - set category = "IC" - - if((is_blind(src) || usr && usr.stat) && !isobserver(src)) - to_chat(src, "Something is there but you can't see it.") - return 1 - - face_atom(A) - - if(!isghost(src)) - if(A.loc != src || A == l_hand || A == r_hand) - for(var/mob/M in viewers(4, src)) - if(M == src) - continue - if(M.client && M.client.get_preference_value(/datum/client_preference/examine_messages) == GLOB.PREF_SHOW) - if(M.is_blind() || is_invisible_to(M)) - continue - to_chat(M, "\The [src] looks at \the [A].") - - var/distance = INFINITY - if(isghost(src) || stat == DEAD) - distance = 0 - else - var/turf/source_turf = get_turf(src) - var/turf/target_turf = get_turf(A) - if(source_turf && source_turf.z == target_turf?.z) - distance = get_dist(source_turf, target_turf) - - if(!A.examine(src, distance)) - crash_with("Improper /examine() override: [log_info_line(A)]") - -/mob/verb/pointed(atom/A as mob|obj|turf in view()) - set name = "Point To" - set category = "Object" - - if(!src || !isturf(src.loc) || !(A in view(src.loc))) - return 0 - if(istype(A, /obj/effect/decal/point)) - return 0 - - var/tile = get_turf(A) - if (!tile) - return 0 - - var/obj/P = new /obj/effect/decal/point(tile) - P.set_invisibility(invisibility) - face_atom(A) - return 1 - -//Gets the mob grab conga line. -/mob/proc/ret_grab(list/L) - if (!istype(l_hand, /obj/item/grab) && !istype(r_hand, /obj/item/grab)) - return L - if (!L) - L = list(src) - for(var/A in list(l_hand,r_hand)) - if (istype(A, /obj/item/grab)) - var/obj/item/grab/G = A - if (!(G.affecting in L)) - L += G.affecting - if (G.affecting) - G.affecting.ret_grab(L) - return L - -/mob/verb/mode() - set name = "Activate Held Object" - set category = "Object" - set src = usr - - if(hand) - var/obj/item/W = l_hand - if (W) - W.attack_self(src) - update_inv_l_hand() - else - attack_empty_hand(BP_L_HAND) - else - var/obj/item/W = r_hand - if (W) - W.attack_self(src) - update_inv_r_hand() - else - attack_empty_hand(BP_R_HAND) - -/mob/proc/update_flavor_text(var/key) - var/msg = sanitize(input(usr,"Set the flavor text in your 'examine' verb. Can also be used for OOC notes about your character.","Flavor Text",html_decode(flavor_text)) as message|null, extra = 0) - if(!CanInteract(usr, GLOB.self_state)) - return - if(msg != null) - flavor_text = msg - -/mob/proc/warn_flavor_changed() - if(flavor_text && flavor_text != "") // don't spam people that don't use it! - to_chat(src, "

              OOC Warning:

              ") - to_chat(src, "Your flavor text is likely out of date! Change") - -/mob/proc/print_flavor_text() - if (flavor_text && flavor_text != "") - var/msg = replacetext_char(flavor_text, "\n", " ") - if(length(msg) <= 40) - return "[msg]" - else - return "[copytext_preserve_html(msg, 1, 37)]... More..." - -/client/verb/changes() - set name = "Changelog" - set category = "OOC" - getFiles( - 'html/88x31.png', - 'html/auction-hammer-gavel.png', - 'html/bug-minus.png', - 'html/burn-exclamation.png', - 'html/chevron.png', - 'html/chevron-expand.png', - 'html/cross-circle.png', - 'html/hard-hat-exclamation.png', - 'html/image-minus.png', - 'html/image-plus.png', - 'html/map-pencil.png', - 'html/music-minus.png', - 'html/music-plus.png', - 'html/tick-circle.png', - 'html/scales.png', - 'html/spell-check.png', - 'html/wrench-screwdriver.png', - 'html/changelog.css', - 'html/changelog.html' - ) - show_browser(src, 'html/changelog.html', "window=changes;size=675x650") - if (GLOB.changelog_hash && prefs.lastchangelog != GLOB.changelog_hash) - prefs.lastchangelog = GLOB.changelog_hash - SScharacter_setup.queue_preferences_save(prefs) - winset(src, "rpane.changelog", "background-color=none;font-style=;") - -/mob/verb/cancel_camera() - set name = "Cancel Camera View" - set category = "OOC" - unset_machine() - reset_view(null) - -/mob/DefaultTopicState() - return GLOB.view_state - -// Use to field Topic calls for which usr == src is required, which will first be funneled into here. -/mob/proc/OnSelfTopic(href_list, topic_status) - if (topic_status == STATUS_INTERACTIVE) - if(href_list["mach_close"]) - var/t1 = text("window=[href_list["mach_close"]]") - unset_machine() - show_browser(src, null, t1) - return TOPIC_HANDLED - if(href_list["flavor_change"]) - update_flavor_text(href_list["flavor_change"]) - return TOPIC_HANDLED - -// If usr != src, or if usr == src but the Topic call was not resolved, this is called next. -/mob/OnTopic(mob/user, href_list, datum/topic_state/state) - if(href_list["flavor_more"]) - var/text = "[name][replacetext_char(flavor_text, "\n", "
              ")]
              " - show_browser(user, text, "window=[name];size=500x200") - onclose(user, "[name]") - return TOPIC_HANDLED - -// You probably do not need to override this proc. Use one of the two above. -/mob/Topic(href, href_list, datum/topic_state/state) - . = OnSelfTopic(href_list, CanUseTopic(usr, GLOB.self_state, href_list)) - if (.) - return - if (href_list["flavor_change"] && !isadmin(usr) && (usr != src)) - log_and_message_admins(usr, "is suspected of trying to change flavor text on [key_name_admin(src)] via Topic exploits.") - return ..() - -/mob/proc/pull_damage() - return 0 - -/mob/living/carbon/human/pull_damage() - if(!lying || getBruteLoss() + getFireLoss() < 100) - return 0 - for(var/thing in organs) - var/obj/item/organ/external/e = thing - if(!e || e.is_stump()) - continue - if((e.status & ORGAN_BROKEN) && !e.splinted) - return 1 - if(e.status & ORGAN_BLEEDING) - return 1 - return 0 - -/mob/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 - show_inv(usr) - - -/mob/verb/stop_pulling() - - set name = "Stop Pulling" - set category = "IC" - - if(pulling) - if(ishuman(pulling)) - var/mob/living/carbon/human/H = pulling - visible_message(SPAN_WARNING("\The [src] lets go of \the [H]."), SPAN_NOTICE("You let go of \the [H]."), exclude_mobs = list(H)) - if(!H.stat) - to_chat(H, SPAN_WARNING("\The [src] lets go of you.")) - pulling.pulledby = null - pulling = null - if(pullin) - pullin.icon_state = "pull0" - -/mob/proc/start_pulling(var/atom/movable/AM) - - if ( !AM || !usr || src==AM || !isturf(src.loc) ) //if there's no person pulling OR the person is pulling themself OR the object being pulled is inside something: abort! - return - - if (AM.anchored) - to_chat(src, "It won't budge!") - return - - var/mob/M = AM - if(ismob(AM)) - - if(!can_pull_mobs || !can_pull_size) - to_chat(src, "It won't budge!") - return - - if((mob_size < M.mob_size) && (can_pull_mobs != MOB_PULL_LARGER)) - to_chat(src, "It won't budge!") - return - - if((mob_size == M.mob_size) && (can_pull_mobs == MOB_PULL_SMALLER)) - to_chat(src, "It won't budge!") - return - - // If your size is larger than theirs and you have some - // kind of mob pull value AT ALL, you will be able to pull - // them, so don't bother checking that explicitly. - - if(!iscarbon(src)) - M.LAssailant = null - else - M.LAssailant = usr - - else if(isobj(AM)) - var/obj/I = AM - if(!can_pull_size || can_pull_size < I.w_class) - to_chat(src, "It won't budge!") - return - - if(pulling) - var/pulling_old = pulling - stop_pulling() - // Are we pulling the same thing twice? Just stop pulling. - if(pulling_old == AM) - return - - src.pulling = AM - AM.pulledby = src - - if(pullin) - pullin.icon_state = "pull1" - - if(ishuman(AM)) - var/mob/living/carbon/human/H = AM - if(H.lying) // If they're on the ground we're probably dragging their arms to move them - var/grabtype - if(H.has_organ(BP_L_ARM) && H.has_organ(BP_R_ARM)) //If they have both arms - grabtype = "arms" - else if(H.has_organ(BP_L_ARM) || H.has_organ(BP_R_ARM)) //If they only have one arm - grabtype = "arm" - else //If they have no arms - grabtype = "torso" - - visible_message(SPAN_WARNING("\The [src] leans down and grips \the [H]'s [grabtype]."), SPAN_NOTICE("You lean down and grip \the [H]'s [grabtype]."), exclude_mobs = list(H)) - if(!H.stat) - to_chat(H, SPAN_WARNING("\The [src] leans down and grips your [grabtype].")) - - else //Otherwise we're probably just holding their arm to lead them somewhere - var/grabtype - if(H.has_organ(BP_L_ARM) || H.has_organ(BP_R_ARM)) //If they have at least one arm - grabtype = "arm" - else //If they have no arms - grabtype = "shoulder" - - visible_message(SPAN_WARNING("\The [src] grips \the [H]'s [grabtype]."), SPAN_NOTICE("You grip \the [H]'s [grabtype]."), exclude_mobs = list(H)) - if(!H.stat) - to_chat(H, SPAN_WARNING("\The [src] grips your [grabtype].")) - playsound(src.loc, 'sound/weapons/thudswoosh.ogg', 15) //Quieter than hugging/grabbing but we still want some audio feedback - - if(H.pull_damage()) - to_chat(src, "Pulling \the [H] in their current condition would probably be a bad idea.") - - var/obj/item/clothing/C = H.get_covering_equipped_item_by_zone(BP_CHEST) - if(istype(C)) - C.leave_evidence(src) - - //Attempted fix for people flying away through space when cuffed and dragged. - if(ismob(AM)) - var/mob/pulled = AM - pulled.inertia_dir = 0 - -/mob/proc/can_use_hands() - return - -/mob/proc/is_active() - return (0 >= usr.stat) - -/mob/proc/is_dead() - return stat == DEAD - -/mob/proc/is_mechanical() - if(mind && (mind.assigned_role == "Robot" || mind.assigned_role == "AI")) - return 1 - return istype(src, /mob/living/silicon) || get_species() == SPECIES_IPC || get_species() == SPECIES_SHELL - -/mob/proc/is_ready() - return client && !!mind - -/mob/proc/get_gender() - return gender - -/mob/proc/see(message) - if(!is_active()) - return 0 - to_chat(src, message) - return 1 - -/mob/proc/show_viewers(message) - for(var/mob/M in viewers()) - M.see(message) - -/mob/Stat() - ..() - . = (is_client_active(5 MINUTES)) - if (!.) - return - - if(statpanel("Status")) - if(GAME_STATE >= RUNLEVEL_LOBBY) - stat("Local Time", stationtime2text()) - stat("Local Date", stationdate2text()) - stat("Round Duration", roundduration2text()) - if(client.holder || isghost(client.mob)) - stat("Location:", "([x], [y], [z]) [loc]") - - if(client.holder) - if(statpanel("MC")) - stat("CPU:","[world.cpu]") - stat("Instances:","[world.contents.len]") - stat(null) - var/time = Uptime() - if(Master) - Master.UpdateStat(time) - else - stat("Master Controller:", "ERROR") - if(Failsafe) - Failsafe.UpdateStat(time) - else if (Master.initializing) - stat("Failsafe Controller:", "Waiting for MC") - else - stat("Failsafe Controller:", "ERROR") - if(Master) - stat(null) - config.UpdateStat() - GLOB.UpdateStat() - stat(null) - for (var/datum/controller/subsystem/subsystem as anything in Master.subsystems) - subsystem.UpdateStat(time) - - if(listed_turf && client) - if(!TurfAdjacent(listed_turf)) - listed_turf = null - else - if(statpanel("Turf")) - stat(listed_turf) - for(var/atom/A in listed_turf) - if(!A.mouse_opacity) - continue - if(A.invisibility > see_invisible) - continue - if(is_type_in_list(A, shouldnt_see)) - continue - stat(A) - - -// facing verbs -/mob/proc/canface() - return !incapacitated() - -// Not sure what to call this. Used to check if humans are wearing an AI-controlled exosuit and hence don't need to fall over yet. -/mob/proc/can_stand_overridden() - return 0 - -//Updates lying and icons -/mob/proc/UpdateLyingBuckledAndVerbStatus() - if(!resting && cannot_stand() && can_stand_overridden()) - lying = 0 - else if(buckled) - anchored = TRUE - if(istype(buckled)) - if(buckled.buckle_lying == -1) - lying = incapacitated(INCAPACITATION_KNOCKDOWN) - else - lying = buckled.buckle_lying - if(buckled.buckle_movable) - anchored = FALSE - else - lying = incapacitated(INCAPACITATION_KNOCKDOWN) - - if(lying) - set_density(0) - if(l_hand) unEquip(l_hand) - if(r_hand) unEquip(r_hand) - else - set_density(initial(density)) - reset_layer() - - for(var/obj/item/grab/G in grabbed_by) - if(G.force_stand()) - lying = 0 - - //Temporarily moved here from the various life() procs - //I'm fixing stuff incrementally so this will likely find a better home. - //It just makes sense for now. ~Carn - if( update_icon ) //forces a full overlay update - update_icon = 0 - regenerate_icons() - else if( lying != lying_prev ) - update_icons() - -/mob/proc/reset_layer() - if(lying) - plane = DEFAULT_PLANE - layer = LYING_MOB_LAYER - else - reset_plane_and_layer() - -/mob/proc/facedir(var/ndir) - if(!canface() || moving || (buckled && !buckled.buckle_movable)) - return 0 - set_dir(ndir) - if(buckled && buckled.buckle_movable) - buckled.set_dir(ndir) - SetMoveCooldown(movement_delay()) - return 1 - - -/mob/verb/eastface() - set hidden = 1 - return facedir(client.client_dir(EAST)) - - -/mob/verb/westface() - set hidden = 1 - return facedir(client.client_dir(WEST)) - - -/mob/verb/northface() - set hidden = 1 - return facedir(client.client_dir(NORTH)) - - -/mob/verb/southface() - set hidden = 1 - return facedir(client.client_dir(SOUTH)) - - -//This might need a rename but it should replace the can this mob use things check -/mob/proc/IsAdvancedToolUser() - return 0 - -/mob/proc/Stun(amount) - if(status_flags & CANSTUN) - facing_dir = null - stunned = max(max(stunned,amount),0) //can't go below 0, getting a low amount of stun doesn't lower your current stun - UpdateLyingBuckledAndVerbStatus() - return - -/mob/proc/SetStunned(amount) //if you REALLY need to set stun to a set amount without the whole "can't go below current stunned" - if(status_flags & CANSTUN) - stunned = max(amount,0) - UpdateLyingBuckledAndVerbStatus() - return - -/mob/proc/AdjustStunned(amount) - if(status_flags & CANSTUN) - stunned = max(stunned + amount,0) - UpdateLyingBuckledAndVerbStatus() - return - -/mob/proc/Weaken(amount) - if(status_flags & CANWEAKEN) - facing_dir = null - weakened = max(max(weakened,amount),0) - UpdateLyingBuckledAndVerbStatus() - return - -/mob/proc/SetWeakened(amount) - if(status_flags & CANWEAKEN) - weakened = max(amount,0) - UpdateLyingBuckledAndVerbStatus() - return - -/mob/proc/AdjustWeakened(amount) - if(status_flags & CANWEAKEN) - weakened = max(weakened + amount,0) - UpdateLyingBuckledAndVerbStatus() - return - -/mob/proc/Paralyse(amount) - if(status_flags & CANPARALYSE) - facing_dir = null - paralysis = max(max(paralysis,amount),0) - return - -/mob/proc/SetParalysis(amount) - if(status_flags & CANPARALYSE) - paralysis = max(amount,0) - return - -/mob/proc/AdjustParalysis(amount) - if(status_flags & CANPARALYSE) - paralysis = max(paralysis + amount,0) - return - -/mob/proc/Sleeping(amount) - facing_dir = null - sleeping = max(max(sleeping,amount),0) - return - -/mob/proc/SetSleeping(amount) - sleeping = max(amount,0) - return - -/mob/proc/AdjustSleeping(amount) - sleeping = max(sleeping + amount,0) - return - -/mob/proc/get_species() - return "" - -/mob/proc/get_visible_implants(var/class = 0) - var/list/visible_implants = list() - for(var/obj/item/O in embedded) - if(O.w_class > class) - visible_implants += O - return visible_implants - -/mob/proc/embedded_needs_process() - return (embedded.len > 0) - -/mob/proc/remove_implant(var/obj/item/implant, var/surgical_removal = FALSE) - if(!LAZYLEN(get_visible_implants(0))) //Yanking out last object - removing verb. - verbs -= /mob/proc/yank_out_object - for(var/obj/item/O in pinned) - if(O == implant) - pinned -= O - if(!pinned.len) - anchored = FALSE - implant.dropInto(loc) - implant.add_blood(src) - implant.update_icon() - if(istype(implant,/obj/item/implant)) - var/obj/item/implant/imp = implant - imp.removed() - if (istype(implant, /obj/item/holder/voxslug)) - var/obj/item/holder/voxslug/holder = implant - var/mob/living/simple_animal/hostile/voxslug/V = holder.contents[1] - - V.visible_message(SPAN_WARNING("\The [src] is momentarily stunned as it is ripped from its victim!")) - if (V.ai_holder) - var/datum/ai_holder/AI = V.ai_holder - AI.set_busy_delay(8 SECONDS) - - . = TRUE - -/mob/living/silicon/robot/remove_implant(var/obj/item/implant, var/surgical_removal = FALSE) - embedded -= implant - adjustBruteLoss(5) - adjustFireLoss(10) - . = ..() - -/mob/living/carbon/human/remove_implant(var/obj/item/implant, var/surgical_removal = FALSE, var/obj/item/organ/external/affected) - if(!affected) //Grab the organ holding the implant. - for(var/obj/item/organ/external/organ in organs) - for(var/obj/item/O in organ.implants) - if(O == implant) - affected = organ - break - if(affected) - affected.implants -= implant - for(var/datum/wound/wound in affected.wounds) - LAZYREMOVE(wound.embedded_objects, implant) - if(!surgical_removal) - shock_stage+=20 - affected.take_external_damage((implant.w_class * 3), 0, DAMAGE_FLAG_EDGE, "Embedded object extraction") - if(!BP_IS_ROBOTIC(affected) && prob(implant.w_class * 5) && affected.sever_artery()) //I'M SO ANEMIC I COULD JUST -DIE-. - custom_pain("Something tears wetly in your [affected.name] as [implant] is pulled free!", 50, affecting = affected) - . = ..() - -/mob/proc/yank_out_object() - set category = "Object" - set name = "Yank out object" - set desc = "Remove an embedded item at the cost of bleeding and pain." - set src in view(1) - - if(!isliving(usr) || !usr.canClick()) - return - usr.setClickCooldown(20) - - if(usr.stat == 1) - to_chat(usr, "You are unconcious and cannot do that!") - return - - if(usr.restrained()) - to_chat(usr, "You are restrained and cannot do that!") - return - - var/mob/S = src - var/mob/U = usr - var/list/valid_objects = list() - var/self = null - - if(S == U) - self = 1 // Removing object from yourself. - - valid_objects = get_visible_implants(0) - if(!valid_objects.len) - if(self) - to_chat(src, "You have nothing stuck in your body that is large enough to remove.") - else - to_chat(U, "[src] has nothing stuck in their wounds that is large enough to remove.") - return - var/obj/item/selection = input("What do you want to yank out?", "Embedded objects") in valid_objects - if(self) - to_chat(src, "You attempt to get a good grip on [selection] in your body.") - else - to_chat(U, "You attempt to get a good grip on [selection] in [S]'s body.") - if(!do_after(U, 3 SECONDS, S, DO_DEFAULT | DO_USER_UNIQUE_ACT | DO_PUBLIC_PROGRESS, INCAPACITATION_DEFAULT & ~INCAPACITATION_FORCELYING)) //let people pinned to stuff yank it out, otherwise they're stuck... forever!!! - return - if(!selection || !S || !U) - return - - if(self) - visible_message("[src] rips [selection] out of their body.","You rip [selection] out of your body.") - else - visible_message("[usr] rips [selection] out of [src]'s body.","[usr] rips [selection] out of your body.") - remove_implant(selection) - selection.forceMove(get_turf(src)) - if(!(U.l_hand && U.r_hand)) - U.put_in_hands(selection) - if(ishuman(U)) - var/mob/living/carbon/human/human_user = U - human_user.bloody_hands(src) - return 1 - -//Check for brain worms in head. -/mob/proc/has_brain_worms() - return locate(/mob/living/simple_animal/borer) in contents - -// A mob should either use update_icon(), overriding this definition, or use update_icons(), not touching update_icon(). -// It should not use both. -/mob/on_update_icon() - return update_icons() - -/mob/verb/face_direction() - - set name = "Face Direction" - set category = "IC" - set src = usr - - set_face_dir() - - if(!facing_dir) - to_chat(usr, "You are now not facing anything.") - else - to_chat(usr, "You are now facing [dir2text(facing_dir)].") - -/mob/proc/set_face_dir(var/newdir) - if(!isnull(facing_dir) && newdir == facing_dir) - facing_dir = null - else if(newdir) - set_dir(newdir) - facing_dir = newdir - else if(facing_dir) - facing_dir = null - else - set_dir(dir) - facing_dir = dir - -/mob/set_dir() - if(facing_dir) - if(!canface() || lying || restrained()) - facing_dir = null - else if(buckled) - if(buckled.obj_flags & OBJ_FLAG_ROTATABLE) - buckled.set_dir(facing_dir) - return ..(facing_dir) - else - facing_dir = null - else if(dir != facing_dir) - return ..(facing_dir) - else - return ..() - -/mob/proc/set_stat(var/new_stat) - . = stat != new_stat - stat = new_stat - -/mob/verb/northfaceperm() - set hidden = 1 - set_face_dir(client.client_dir(NORTH)) - -/mob/verb/southfaceperm() - set hidden = 1 - set_face_dir(client.client_dir(SOUTH)) - -/mob/verb/eastfaceperm() - set hidden = 1 - set_face_dir(client.client_dir(EAST)) - -/mob/verb/westfaceperm() - set hidden = 1 - set_face_dir(client.client_dir(WEST)) - -/mob/proc/adjustEarDamage() - return - -/mob/proc/setEarDamage() - return - -//Throwing stuff - -/mob/proc/toggle_throw_mode() - if (src.in_throw_mode) - throw_mode_off() - else - throw_mode_on() - -/mob/proc/throw_mode_off() - src.in_throw_mode = 0 - if(src.throw_icon) //in case we don't have the HUD and we use the hotkey - src.throw_icon.icon_state = "act_throw_off" - -/mob/proc/throw_mode_on() - src.in_throw_mode = 1 - if(src.throw_icon) - src.throw_icon.icon_state = "act_throw_on" - -/mob/proc/check_CH(CH_name as text, var/CH_type, var/second_arg = null) - if(!src.client.CH || !istype(src.client.CH, CH_type))//(src.client.CH.handler_name != CH_name)) - src.client.CH = new CH_type(client, second_arg) - to_chat(src, SPAN_WARNING("You prepare [CH_name].")) - else - kill_CH() - return - -/mob/proc/kill_CH() - if (src.client.CH) - to_chat(src, SPAN_NOTICE ("You unprepare [src.client.CH.handler_name].")) - QDEL_NULL(src.client.CH) - -/mob/proc/toggle_antag_pool() - set name = "Toggle Add-Antag Candidacy" - set desc = "Toggles whether or not you will be considered a candidate by an add-antag vote." - set category = "OOC" - if(isghostmind(src.mind) || isnewplayer(src)) - if(SSticker.looking_for_antags) - if(src.mind in SSticker.antag_pool) - SSticker.antag_pool -= src.mind - to_chat(usr, "You have left the antag pool.") - else - SSticker.antag_pool += src.mind - to_chat(usr, "You have joined the antag pool. Make sure you have the needed role set to high!") - else - to_chat(usr, "The game is not currently looking for antags.") - else - to_chat(usr, "You must be observing or in the lobby to join the antag pool.") -/mob/proc/is_invisible_to(var/mob/viewer) - return (!alpha || !mouse_opacity || viewer.see_invisible < invisibility) - -/client/proc/check_has_body_select() - return mob && mob.hud_used && istype(mob.zone_sel, /obj/screen/zone_sel) - -/client/verb/body_toggle_head() - set name = "body-toggle-head" - set hidden = 1 - toggle_zone_sel(list(BP_HEAD,BP_EYES,BP_MOUTH)) - -/client/verb/body_r_arm() - set name = "body-r-arm" - set hidden = 1 - toggle_zone_sel(list(BP_R_ARM,BP_R_HAND)) - -/client/verb/body_l_arm() - set name = "body-l-arm" - set hidden = 1 - toggle_zone_sel(list(BP_L_ARM,BP_L_HAND)) - -/client/verb/body_chest() - set name = "body-chest" - set hidden = 1 - toggle_zone_sel(list(BP_CHEST)) - -/client/verb/body_groin() - set name = "body-groin" - set hidden = 1 - toggle_zone_sel(list(BP_GROIN)) - -/client/verb/body_r_leg() - set name = "body-r-leg" - set hidden = 1 - toggle_zone_sel(list(BP_R_LEG,BP_R_FOOT)) - -/client/verb/body_l_leg() - set name = "body-l-leg" - set hidden = 1 - toggle_zone_sel(list(BP_L_LEG,BP_L_FOOT)) - -/client/proc/toggle_zone_sel(list/zones) - if(!check_has_body_select()) - return - var/obj/screen/zone_sel/selector = mob.zone_sel - selector.set_selected_zone(next_in_list(mob.zone_sel.selecting,zones)) - -/mob/proc/has_chem_effect(chem, threshold) - return FALSE - -/mob/proc/has_admin_rights() - return check_rights(R_ADMIN, 0, src) - -/mob/proc/handle_drowning() - return FALSE - -/mob/proc/can_drown() - return 0 - -/mob/proc/get_sex() - return gender - -/mob/is_fluid_pushable(var/amt) - if(..() && !buckled && (lying || !Check_Shoegrip()) && (amt >= mob_size * (lying ? 5 : 10))) - if(!lying) - Weaken(1) - if(lying && prob(10)) - to_chat(src, "You are pushed down by the flood!") - return TRUE - return FALSE - -/mob/proc/get_footstep(var/footstep_type) - return - -/mob/proc/handle_embedded_and_stomach_objects() - return - -/mob/proc/get_sound_volume_multiplier() - if(ear_deaf) - return 0 - return 1 diff --git a/code/modules/mob/mob_defines.dm b/code/modules/mob/mob_defines.dm deleted file mode 100644 index 7bd1d76987595..0000000000000 --- a/code/modules/mob/mob_defines.dm +++ /dev/null @@ -1,195 +0,0 @@ -/mob - density = TRUE - plane = DEFAULT_PLANE - layer = MOB_LAYER - - appearance_flags = DEFAULT_APPEARANCE_FLAGS | PIXEL_SCALE - animate_movement = 2 - movable_flags = MOVABLE_FLAG_PROXMOVE - - virtual_mob = /mob/observer/virtual/mob - - movement_handlers = list( - /datum/movement_handler/mob/relayed_movement, - /datum/movement_handler/mob/death, - /datum/movement_handler/mob/conscious, - /datum/movement_handler/mob/eye, - /datum/movement_handler/move_relay, - /datum/movement_handler/mob/buckle_relay, - /datum/movement_handler/mob/delay, - /datum/movement_handler/mob/stop_effect, - /datum/movement_handler/mob/physically_capable, - /datum/movement_handler/mob/physically_restrained, - /datum/movement_handler/mob/space, - /datum/movement_handler/mob/multiz, - /datum/movement_handler/mob/movement - ) - - var/mob_flags - var/last_quick_move_time = 0 - var/list/client_images = list() // List of images applied to/removed from the client on login/logout - var/datum/mind/mind - - var/lastKnownIP = null - var/computer_id = null - var/last_ckey - - var/stat = CONSCIOUS //Whether a mob is alive or dead. TODO: Move this to living - Nodrak - - var/obj/screen/cells = null - - var/obj/screen/hands = null - var/obj/screen/pullin = null - var/obj/screen/purged = null - var/obj/screen/internals = null - var/obj/screen/oxygen = null - var/obj/screen/i_select = null - var/obj/screen/m_select = null - var/obj/screen/toxin = null - var/obj/screen/fire = null - var/obj/screen/bodytemp = null - var/obj/screen/healths = null - var/obj/screen/throw_icon = null - var/obj/screen/nutrition_icon = null - var/obj/screen/hydration_icon = null - var/obj/screen/pressure = null - var/obj/screen/pain = null - var/obj/screen/gun/item/item_use_icon = null - var/obj/screen/gun/radio/radio_use_icon = null - var/obj/screen/gun/move/gun_move_icon = null - var/obj/screen/gun/run/gun_run_icon = null - var/obj/screen/gun/mode/gun_setting_icon = null - - var/obj/screen/movable/ability_master/ability_master = null - - /*A bunch of this stuff really needs to go under their own defines instead of being globally attached to mob. - A variable should only be globally attached to turfs/objects/whatever, when it is in fact needed as such. - The current method unnecessarily clusters up the variable list, especially for humans (although rearranging won't really clean it up a lot but the difference will be noticable for other mobs). - I'll make some notes on where certain variable defines should probably go. - Changing this around would probably require a good look-over the pre-existing code. - */ - var/obj/screen/zone_sel/zone_sel = null - - var/use_me = 1 //Allows all mobs to use the me verb by default, will have to manually specify they cannot - var/damageoverlaytemp = 0 - var/obj/machinery/machine = null - var/poll_answer = 0.0 - var/sdisabilities = 0 //Carbon - var/disabilities = 0 //Carbon - - var/atom/movable/pulling = null - var/other_mobs = null - var/next_move = null - var/hand = null - var/real_name = null - var/fake_name = null - - var/bhunger = 0 //Carbon - - var/druggy = 0 //Carbon - var/confused = 0 //Carbon - var/sleeping = 0 //Carbon - var/resting = FALSE //Carbon - var/lying = 0 - var/lying_prev = 0 - - var/radio_interrupt_cooldown = 0 - - var/unacidable = FALSE - var/list/pinned = list() // List of things pinning this creature to walls (see living_defense.dm) - var/list/embedded = list() // Embedded items, since simple mobs don't have organs. - var/list/languages = list() // For speaking/listening. - var/species_language = null // For species who want reset to use a specified default. - var/only_species_language = 0 // For species who can only speak their default and no other languages. Does not effect understanding. - var/list/speak_emote = list("says") // Verbs used when speaking. Defaults to 'say' if speak_emote is null. - var/emote_type = 1 // Define emote default type, 1 for seen emotes, 2 for heard emotes - var/facing_dir = null // Used for the ancient art of moonwalking. - - var/name_archive //For admin things like possession - - var/timeofdeath = 0 - - var/bodytemperature = 310.055 //98.7 F - var/default_pixel_x = 0 - var/default_pixel_y = 0 - var/default_pixel_z = 0 - - var/shakecamera = 0 - var/a_intent = I_HELP//Living - - var/decl/move_intent/move_intent = /decl/move_intent/walk - var/list/move_intents = list(/decl/move_intent/walk) - - var/decl/move_intent/default_walk_intent - var/decl/move_intent/default_run_intent - - var/obj/buckled = null//Living - var/obj/item/l_hand = null//Living - var/obj/item/r_hand = null//Living - var/obj/item/back = null//Human/Monkey - var/obj/item/storage/s_active = null//Carbon - var/obj/item/clothing/mask/wear_mask = null//Carbon - - var/list/grabbed_by = list() - - var/in_throw_mode = 0 - - var/inertia_dir = 0 - -// var/job = null//Living - - var/can_pull_size = ITEM_SIZE_NO_CONTAINER // Maximum w_class the mob can pull. - var/can_pull_mobs = MOB_PULL_SAME // Whether or not the mob can pull other mobs. - - var/datum/dna/dna = null//Carbon - var/list/active_genes=list() - var/list/mutations = list() //Carbon -- Doohl - //see: setup.dm for list of mutations - - var/radiation = 0.0//Carbon - - var/voice_name = "unidentifiable voice" - - var/faction = MOB_FACTION_NEUTRAL //Used for checking whether hostile simple animals will attack you, possibly more stuff later - var/blinded = null - var/ear_deaf = null //Carbon - -//The last mob/living/carbon to push/drag/grab this mob (mostly used by slimes friend recognition) - var/mob/living/carbon/LAssailant = null - - mouse_drag_pointer = MOUSE_ACTIVE_POINTER - - var/update_icon = 1 //Set to 1 to trigger update_icons() at the next life() call - - var/status_flags = CANSTUN|CANWEAKEN|CANPARALYSE|CANPUSH //bitflags defining which status effects can be inflicted (replaces canweaken, canstun, etc) - - var/area/lastarea = null - - var/digitalcamo = 0 // Can they be tracked by the AI? - - var/obj/control_object //Used by admins to possess objects. All mobs should have this var - - //Whether or not mobs can understand other mobtypes. These stay in /mob so that ghosts can hear everything. - var/universal_speak = FALSE // Set to TRUE to enable the mob to speak to everyone -- TLE - var/universal_understand = FALSE // Set to TRUE to enable the mob to understand everyone, not necessarily speak - - //If set, indicates that the client "belonging" to this (clientless) mob is currently controlling some other mob - //so don't treat them as being SSD even though their client var is null. - var/mob/teleop = null - - var/turf/listed_turf = null //the current turf being examined in the stat panel - var/list/shouldnt_see = list() //list of objects that this mob shouldn't see in the stat panel. this silliness is needed because of AI alt+click and cult blood runes - - var/mob_size = MOB_MEDIUM - - var/paralysis = 0 - var/stunned = 0 - var/weakened = 0 - var/drowsyness = 0.0//Carbon - - var/flavor_text = "" - - var/datum/skillset/skillset = /datum/skillset - - - var/list/additional_vision_handlers = list() //Basically a list of atoms from which additional vision data is retrieved diff --git a/code/modules/mob/mob_helpers.dm b/code/modules/mob/mob_helpers.dm deleted file mode 100644 index 2791c12a8274f..0000000000000 --- a/code/modules/mob/mob_helpers.dm +++ /dev/null @@ -1,706 +0,0 @@ -/proc/issmall(A) - if(A && istype(A, /mob/living)) - var/mob/living/L = A - return L.mob_size <= MOB_SMALL - return 0 - -//returns the number of size categories between two mob_sizes, rounded. Positive means A is larger than B -/proc/mob_size_difference(var/mob_size_A, var/mob_size_B) - return round(log(2, mob_size_A/mob_size_B), 1) - -/mob/proc/can_wield_item(obj/item/W) - if(W.w_class >= ITEM_SIZE_LARGE && issmall(src)) - return FALSE //M is too small to wield this - return TRUE - - -/mob/proc/isSynthetic() - return FALSE - - -/mob/living/silicon/isSynthetic() - return TRUE - - -/mob/living/carbon/human/isSynthetic() - if(isnull(full_prosthetic)) - robolimb_count = 0 - for(var/obj/item/organ/external/E in organs) - if(BP_IS_ROBOTIC(E)) - robolimb_count++ - full_prosthetic = (robolimb_count == organs.len) - update_emotes() - return full_prosthetic - -/mob/living/carbon/human/proc/isFBP() - return istype(internal_organs_by_name[BP_BRAIN], /obj/item/organ/internal/mmi_holder) - - -/// Determine if the mob is the supplied species by text name, species path, or species instance name -/mob/proc/is_species(datum/species/S) - return FALSE - - -/mob/living/carbon/is_species(datum/species/S) - if (!S) return FALSE - if (istext(S)) return species.name == S - if (ispath(S)) return species.name == initial(S.name) - return species.name == S.name - - -/** - * Checks if the target has a grab from the user - */ -/mob/proc/has_danger_grab(mob/user) - if (user == src || istype(user, /mob/living/silicon/robot) || istype(user, /mob/living/bot)) - return TRUE - - for (var/obj/item/grab/G in grabbed_by) - if (G.force_danger()) - return TRUE - - -/proc/isdeaf(mob/living/M) - return istype(M) && (M.ear_deaf || M.sdisabilities & DEAFENED) - -/proc/iscuffed(mob/living/carbon/C) - return istype(C) && C.handcuffed - - -/proc/getsensorlevel(mob/living/carbon/human/H) - if (!istype(H) || !istype(H.w_uniform, /obj/item/clothing/under)) - return SUIT_SENSOR_OFF - var/obj/item/clothing/under/U = H.w_uniform - return U.sensor_mode - - -/proc/hassensorlevel(mob/living/carbon/human/H, level) - return getsensorlevel(H) >= level - - -/* - Miss Chance -*/ - -//TODO: Integrate defence zones and targeting body parts with the actual organ system, move these into organ definitions. - -//The base miss chance for the different defence zones -var/list/global/base_miss_chance = list( - BP_HEAD = 60, - BP_CHEST = 10, - BP_GROIN = 20, - BP_L_LEG = 50, - BP_R_LEG = 50, - BP_L_ARM = 20, - BP_R_ARM = 20, - BP_L_HAND = 50, - BP_R_HAND = 50, - BP_L_FOOT = 70, - BP_R_FOOT = 70, -) - -//Used to weight organs when an organ is hit randomly (i.e. not a directed, aimed attack). -//Also used to weight the protection value that armour provides for covering that body part when calculating protection from full-body effects. -var/global/list/organ_rel_size = list( - BP_HEAD = 25, - BP_CHEST = 70, - BP_GROIN = 30, - BP_L_LEG = 25, - BP_R_LEG = 25, - BP_L_ARM = 25, - BP_R_ARM = 25, - BP_L_HAND = 10, - BP_R_HAND = 10, - BP_L_FOOT = 10, - BP_R_FOOT = 10, -) - -/proc/check_zone(zone) - if(!zone) return BP_CHEST - switch(zone) - if(BP_EYES) - zone = BP_HEAD - if(BP_MOUTH) - zone = BP_HEAD - return zone - -// Returns zone with a certain probability. If the probability fails, or no zone is specified, then a random body part is chosen. -// Do not use this if someone is intentionally trying to hit a specific body part. -// Use get_zone_with_miss_chance() for that. -/proc/ran_zone(zone, probability) - if (zone) - zone = check_zone(zone) - if (prob(probability)) - return zone - - var/ran_zone = zone - while (ran_zone == zone) - ran_zone = pick ( - organ_rel_size[BP_HEAD]; BP_HEAD, - organ_rel_size[BP_CHEST]; BP_CHEST, - organ_rel_size[BP_GROIN]; BP_GROIN, - organ_rel_size[BP_L_ARM]; BP_L_ARM, - organ_rel_size[BP_R_ARM]; BP_R_ARM, - organ_rel_size[BP_L_LEG]; BP_L_LEG, - organ_rel_size[BP_R_LEG]; BP_R_LEG, - organ_rel_size[BP_L_HAND]; BP_L_HAND, - organ_rel_size[BP_R_HAND]; BP_R_HAND, - organ_rel_size[BP_L_FOOT]; BP_L_FOOT, - organ_rel_size[BP_R_FOOT]; BP_R_FOOT - ) - - return ran_zone - -// Emulates targetting a specific body part, and miss chances -// May return null if missed -// miss_chance_mod may be negative. -/proc/get_zone_with_miss_chance(zone, var/mob/target, var/miss_chance_mod = 0, var/ranged_attack=0) - zone = check_zone(zone) - - if(!ranged_attack) - // target isn't trying to fight - if(target.a_intent == I_HELP) - return zone - // you cannot miss if your target is prone or restrained - if(target.buckled || target.lying) - return zone - // if your target is being grabbed aggressively by someone you cannot miss either - for(var/obj/item/grab/G in target.grabbed_by) - if(G.stop_move()) - return zone - - var/miss_chance = 10 - if (zone in base_miss_chance) - miss_chance = base_miss_chance[zone] - miss_chance = max(miss_chance + miss_chance_mod, 0) - if(prob(miss_chance)) - return null - else - if (prob(miss_chance)) - return (ran_zone()) - else - return zone - -//Replaces some of the characters with *, used in whispers. pr = probability of no star. -//Will try to preserve HTML formatting. re_encode controls whether the returned text is HTML encoded outside tags. -/proc/stars(n, pr = 25, re_encode = 1) - if (pr < 0) - return null - else if (pr >= 100) - return n - - var/intag = 0 - var/block = list() - . = list() - for(var/i = 1, i <= length_char(n), i++) - var/char = copytext_char(n, i, i+1) - if(!intag && (char == "<")) - intag = 1 - . += stars_no_html(JOINTEXT(block), pr, re_encode) //stars added here - block = list() - block += char - if(intag && (char == ">")) - intag = 0 - . += block //We don't mess up html tags with stars - block = list() - . += (intag ? block : stars_no_html(JOINTEXT(block), pr, re_encode)) - . = JOINTEXT(.) - -//Ingnores the possibility of breaking tags. -/proc/stars_no_html(text, pr, re_encode) - text = html_decode(text) //We don't want to screw up escaped characters - . = list() - for(var/i = 1, i <= length_char(text), i++) - var/char = copytext_char(text, i, i+1) - if(char == " " || prob(pr)) - . += char - else - . += "*" - . = JOINTEXT(.) - if(re_encode) - . = html_encode(.) - -/proc/slur(phrase) - phrase = html_decode(phrase) - var/new_phrase = "" - var/list/replacements_consonants = list( - "s" = "ch", "c" = "k", - "г" = "х", "к" = "х", "з" = "с", "ц" = "с", "ч" = "щ", "щ" = "шш", "п" = "б" - ) - var/list/replacements_vowels = list( - "o" = "u", - "ы" = "'", "а" = "'", "е" = "э", "ё" = "'", "и" = "'", "о" = "'", "у" = "'", "ю" = "'" - ) - for(var/i = 1, i <= length_char(phrase), i++) - var/letter = copytext_char(phrase, i, i + 1) - if(lowertext(letter) in replacements_consonants) - if(prob(40)) - letter = replacements_consonants[lowertext(letter)] - else if(lowertext(letter) in replacements_vowels) - if(prob(12)) - letter = replacements_vowels[lowertext(letter)] - new_phrase += pick( - 65; letter, - 20; lowertext(letter), - 15; uppertext(letter), - ) - return html_encode(new_phrase) - -/proc/stutter(n) - var/te = html_decode(n) - var/t = ""//placed before the message. Not really sure what it's for. - n = length_char(n)//length of the entire word - var/p = null - p = 1//1 is the start of any word - while(p <= n)//while P, which starts at 1 is less or equal to N which is the length. - var/n_letter = copytext_char(te, p, p + 1)//copies text from a certain distance. In this case, only one letter at a time. - if (prob(80) && (ckey(n_letter) in list("b","c","d","f","g","h","j","k","l","m","n","p","q","r","s","t","v","w","x","y","z"))) - if (prob(10)) - n_letter = text("[n_letter]-[n_letter]-[n_letter]-[n_letter]")//replaces the current letter with this instead. - else - if (prob(20)) - n_letter = text("[n_letter]-[n_letter]-[n_letter]") - else - if (prob(5)) - n_letter = null - else - n_letter = text("[n_letter]-[n_letter]") - t = text("[t][n_letter]")//since the above is ran through for each letter, the text just adds up back to the original word. - p++//for each letter p is increased to find where the next letter will be. - return sanitize(t) - - -/proc/Gibberish(t, p)//t is the inputted message, and any value higher than 70 for p will cause letters to be replaced instead of added - /* Turn text into complete gibberish! */ - var/returntext = "" - for(var/i = 1, i <= length_char(t), i++) - - var/letter = copytext_char(t, i, i+1) - if(prob(50)) - if(p >= 70) - letter = "" - - for(var/j = 1, j <= rand(0, 2), j++) - letter += pick("#","@","*","&","%","$","/", "<", ">", ";","*","*","*","*","*","*","*") - - returntext += letter - - return returntext - - -/proc/shake_camera(mob/M, duration, strength=1, var/taper = 0.25) - if(!M || !M.client || M.shakecamera || M.stat || isEye(M) || isAI(M)) - return - M.shakecamera = 1 - spawn(1) - if(!M.client) - return - - var/atom/oldeye=M.client.eye - var/aiEyeFlag = 0 - if(istype(oldeye, /mob/observer/eye/aiEye)) - aiEyeFlag = 1 - - var/x - for(x=0; x 0) - while (strength > 0) - strength -= taper - if(aiEyeFlag) - M.client.eye = locate(dd_range(1,oldeye.loc.x+rand(-strength,strength),world.maxx),dd_range(1,oldeye.loc.y+rand(-strength,strength),world.maxy),oldeye.loc.z) - else - M.client.eye = locate(dd_range(1,M.loc.x+rand(-strength,strength),world.maxx),dd_range(1,M.loc.y+rand(-strength,strength),world.maxy),M.loc.z) - sleep(1) - if(!M.client) - return - - M.client.eye=oldeye - M.shakecamera = 0 - - -/mob/proc/abiotic(var/full_body = FALSE) - if(full_body && ((src.l_hand && src.l_hand.simulated) || (src.r_hand && src.r_hand.simulated) || (src.back || src.wear_mask))) - return TRUE - - if((src.l_hand && src.l_hand.simulated) || (src.r_hand && src.r_hand.simulated)) - return TRUE - - return FALSE - -//converts intent-strings into numbers and back -var/global/list/intents = list(I_HELP,I_DISARM,I_GRAB,I_HURT) -/proc/intent_numeric(argument) - if(istext(argument)) - switch(argument) - if(I_HELP) return 0 - if(I_DISARM) return 1 - if(I_GRAB) return 2 - else return 3 - else - switch(argument) - if(0) return I_HELP - if(1) return I_DISARM - if(2) return I_GRAB - else return I_HURT - -//change a mob's act-intent. Input the intent as a string such as "help" or use "right"/"left -/mob/verb/a_intent_change(input as text) - set name = "a-intent" - set hidden = 1 - - if(ishuman(src) || isbrain(src) || isslime(src)) - switch(input) - if(I_HELP,I_DISARM,I_GRAB,I_HURT) - a_intent = input - if("right") - a_intent = intent_numeric((intent_numeric(a_intent)+1) % 4) - if("left") - a_intent = intent_numeric((intent_numeric(a_intent)+3) % 4) - if(hud_used && hud_used.action_intent) - hud_used.action_intent.icon_state = "intent_[a_intent]" - - else if(isrobot(src)) - switch(input) - if(I_HELP) - a_intent = I_HELP - if(I_HURT) - a_intent = I_HURT - if("right","left") - a_intent = intent_numeric(intent_numeric(a_intent) - 3) - if(hud_used && hud_used.action_intent) - if(a_intent == I_HURT) - hud_used.action_intent.icon_state = I_HURT - else - hud_used.action_intent.icon_state = I_HELP - -/proc/is_blind(A) - if(istype(A, /mob/living/carbon)) - var/mob/living/carbon/C = A - if(C.sdisabilities & BLINDED|| C.blinded) - return 1 - return 0 - -/mob/proc/welding_eyecheck() - return - -/proc/broadcast_security_hud_message(var/message, var/broadcast_source) - broadcast_hud_message(message, broadcast_source, GLOB.sec_hud_users, /obj/item/clothing/glasses/hud/security) - -/proc/broadcast_medical_hud_message(var/message, var/broadcast_source) - broadcast_hud_message(message, broadcast_source, GLOB.med_hud_users, /obj/item/clothing/glasses/hud/health) - -/proc/broadcast_hud_message(var/message, var/broadcast_source, var/list/targets, var/icon) - var/turf/sourceturf = get_turf(broadcast_source) - for(var/mob/M in targets) - if(!sourceturf || (get_z(M) in GetConnectedZlevels(sourceturf.z))) - M.show_message("[icon2html(icon, M)] [message]", 1) - -/proc/mobs_in_area(var/area/A) - var/list/mobs = new - for(var/mob/living/M in SSmobs.mob_list) - if(get_area(M) == A) - mobs += M - return mobs - -//Announces that a ghost has joined/left, mainly for use with wizards -/proc/announce_ghost_joinleave(O, var/joined_ghosts = 1, var/message = "") - var/client/C - //Accept any type, sort what we want here - if(istype(O, /mob)) - var/mob/M = O - if(M.client) - C = M.client - else if(istype(O, /client)) - C = O - else if(istype(O, /datum/mind)) - var/datum/mind/M = O - if(M.current && M.current.client) - C = M.current.client - else if(M.original && M.original.client) - C = M.original.client - - if(C) - var/name - if(C.mob) - var/mob/M = C.mob - if(M.mind && M.mind.name) - name = M.mind.name - if(M.real_name && M.real_name != name) - if(name) - name += " ([M.real_name])" - else - name = M.real_name - if(!name) - name = C.key - var/diedat = "" - if(C.mob.lastarea) - diedat = " at [C.mob.lastarea]" - if(joined_ghosts) - message = "The ghost of [name] now [pick("skulks","lurks","prowls","creeps","stalks")] among the dead[diedat]. [message]" - else - message = "[name] no longer [pick("skulks","lurks","prowls","creeps","stalks")] in the realm of the dead. [message]" - communicate(/decl/communication_channel/dsay, C || O, message, /decl/dsay_communication/direct) - -/mob/proc/switch_to_camera(var/obj/machinery/camera/C) - if (!C.can_use() || stat || (get_dist(C, src) > 1 || machine != src || blinded)) - return 0 - check_eye(src) - return 1 - -/mob/living/silicon/ai/switch_to_camera(var/obj/machinery/camera/C) - if(!C.can_use() || !is_in_chassis()) - return 0 - - eyeobj.setLoc(C) - return 1 - -// Returns true if the mob has a client which has been active in the last given X minutes. -/mob/proc/is_client_active(var/active = 1) - return client && client.inactivity < active MINUTES - -/mob/proc/can_eat() - return 1 - -/mob/proc/can_force_feed() - return 1 - -#define SAFE_PERP -50 -/mob/living/proc/assess_perp(var/obj/access_obj, var/check_access, var/auth_weapons, var/check_records, var/check_arrest) - if(stat == DEAD) - return SAFE_PERP - - return 0 - -/mob/living/carbon/assess_perp(var/obj/access_obj, var/check_access, var/auth_weapons, var/check_records, var/check_arrest) - if(handcuffed) - return SAFE_PERP - - return ..() - -/mob/living/carbon/human/assess_perp(var/obj/access_obj, var/check_access, var/auth_weapons, var/check_records, var/check_arrest) - var/threatcount = ..() - if(. == SAFE_PERP) - return SAFE_PERP - - //Agent cards lower threatlevel. - var/obj/item/card/id/id = GetIdCard() - if(id && istype(id, /obj/item/card/id/syndicate)) - threatcount -= 2 - // A proper CentCom id is hard currency. - else if(id && istype(id, /obj/item/card/id/centcom)) - return SAFE_PERP - - if(check_access && !access_obj.allowed(src)) - threatcount += 4 - - if(auth_weapons && !access_obj.allowed(src)) - if(istype(l_hand, /obj/item/gun) || istype(l_hand, /obj/item/melee)) - threatcount += 4 - - if(istype(r_hand, /obj/item/gun) || istype(r_hand, /obj/item/melee)) - threatcount += 4 - - if(istype(belt, /obj/item/gun) || istype(belt, /obj/item/melee)) - threatcount += 2 - - if(species.name != SPECIES_HUMAN) - threatcount += 2 - - if(check_records || check_arrest) - var/perpname = name - if(id) - perpname = id.registered_name - - var/datum/computer_file/report/crew_record/CR = get_crewmember_record(perpname) - if(check_records && !CR && !is_species(SPECIES_MONKEY)) - threatcount += 4 - - if(check_arrest && CR && (CR.get_criminalStatus() == GLOB.arrest_security_status)) - threatcount += 4 - - return threatcount - -/mob/living/simple_animal/hostile/assess_perp(var/obj/access_obj, var/check_access, var/auth_weapons, var/check_records, var/check_arrest) - var/threatcount = ..() - if(. == SAFE_PERP) - return SAFE_PERP - - if(!istype(src, /mob/living/simple_animal/hostile/retaliate/goat)) - threatcount += 4 - return threatcount - -#undef SAFE_PERP - -/mob/proc/get_multitool(var/obj/item/device/multitool/P) - if(istype(P)) - return P - -/mob/observer/ghost/get_multitool() - return can_admin_interact() && ..(ghost_multitool) - -/mob/living/carbon/human/get_multitool() - return ..(get_active_hand()) - -/mob/living/silicon/robot/get_multitool() - return ..(get_active_hand()) - -/mob/living/silicon/ai/get_multitool() - return ..(aiMulti) - -/proc/get_both_hands(mob/living/carbon/M) - if(!istype(M)) - return - var/list/hands = list(M.l_hand, M.r_hand) - return hands - -/mob/proc/refresh_client_images() - if(client) - client.images |= client_images - -/mob/proc/hide_client_images() - if(client) - client.images -= client_images - -/mob/proc/add_client_image(var/image) - if(image in client_images) - return - client_images += image - if(client) - client.images += image - -/mob/proc/remove_client_image(var/image) - client_images -= image - if(client) - client.images -= image - -/mob/proc/flash_eyes(intensity = FLASH_PROTECTION_MODERATE, override_blindness_check = FALSE, affect_silicon = FALSE, visual = FALSE, type = /obj/screen/fullscreen/flash) - for(var/mob/M in contents) - M.flash_eyes(intensity, override_blindness_check, affect_silicon, visual, type) - -/mob/proc/fully_replace_character_name(var/new_name, var/in_depth = TRUE) - if(!new_name || new_name == real_name) return 0 - real_name = new_name - SetName(new_name) - if(mind) - mind.name = new_name - if(dna) - dna.real_name = real_name - return 1 - -/mob/proc/ssd_check() - return !client && !teleop - -/mob/proc/jittery_damage() - return //Only for living/carbon/human - -/mob/living/carbon/human/jittery_damage() - var/obj/item/organ/internal/heart/L = internal_organs_by_name[BP_HEART] - if(!istype(L)) - return 0 - if(BP_IS_ROBOTIC(L)) - return 0//Robotic hearts don't get jittery. - if(src.jitteriness >= 400 && prob(5)) //Kills people if they have high jitters. - if(prob(1)) - L.take_internal_damage(L.max_damage / 2, 0) - to_chat(src, "Something explodes in your heart.") - admin_victim_log(src, "has taken lethal heart damage at jitteriness level [src.jitteriness].") - else - L.take_internal_damage(1, 0) - to_chat(src, "The jitters are killing you! You feel your heart beating out of your chest.") - admin_victim_log(src, "has taken minor heart damage at jitteriness level [src.jitteriness].") - return 1 - -/mob/proc/try_teleport(var/area/thearea) - if(!istype(thearea)) - if(istype(thearea, /list)) - thearea = thearea[1] - var/list/L = list() - for(var/turf/T in get_area_turfs(thearea)) - if(!T.density) - var/clear = 1 - for(var/obj/O in T) - if(O.density) - clear = 0 - break - if(clear) - L+=T - - if(buckled) - buckled = null - - var/attempt = null - var/success = 0 - var/turf/end - var/candidates = L.Copy() - while(L.len) - attempt = pick(L) - success = Move(attempt) - if(!success) - L.Remove(attempt) - else - end = attempt - break - - if(!success) - end = pick(candidates) - forceMove(end) - - return end - -//Tries to find the mob's email. -/proc/find_email(real_name) - for(var/mob/mob in GLOB.living_mob_list_) - if(mob.real_name == real_name) - if(!mob.mind) - return - return mob.mind.initial_email_login["login"] - -//This gets an input while also checking a mob for whether it is incapacitated or not. -/mob/proc/get_input(var/message, var/title, var/default, var/choice_type, var/obj/required_item) - if(src.incapacitated() || (required_item && !GLOB.hands_state.can_use_topic(required_item,src))) - return null - var/choice - if(islist(choice_type)) - choice = input(src, message, title, default) as null|anything in choice_type - else - switch(choice_type) - if(MOB_INPUT_TEXT) - choice = input(src, message, title, default) as null|text - if(MOB_INPUT_NUM) - choice = input(src, message, title, default) as null|num - if(MOB_INPUT_MESSAGE) - choice = input(src, message, title, default) as null|message - if(isnull(choice) || src.incapacitated() || (required_item && !GLOB.hands_state.can_use_topic(required_item,src))) - return null - return choice - -/mob/proc/set_sdisability(sdisability) - sdisabilities |= sdisability - -/mob/proc/unset_sdisability(sdisability) - sdisabilities &= ~sdisability - -/mob/proc/get_accumulated_vision_handlers() - var/result[2] - var/asight = 0 - var/ainvis = 0 - for(var/atom/vision_handler in additional_vision_handlers) - //Grab their flags - asight |= vision_handler.additional_sight_flags() - ainvis = max(ainvis, vision_handler.additional_see_invisible()) - result[1] = asight - result[2] = ainvis - - return result diff --git a/code/modules/mob/mob_movement.dm b/code/modules/mob/mob_movement.dm deleted file mode 100644 index 2649cd8f53e64..0000000000000 --- a/code/modules/mob/mob_movement.dm +++ /dev/null @@ -1,355 +0,0 @@ -/mob - var/moving = FALSE - -/mob/proc/SelfMove(var/direction) - if(DoMove(direction, src) & MOVEMENT_HANDLED) - return TRUE // Doesn't necessarily mean the mob physically moved - -/mob/CanPass(atom/movable/mover, turf/target, height=0, air_group=0) - if(air_group || (height==0)) return 1 - - if(ismob(mover)) - var/mob/moving_mob = mover - if ((other_mobs && moving_mob.other_mobs)) - return 1 - return (!mover.density || !density || lying) - else - return (!mover.density || !density || lying) - -/mob/proc/SetMoveCooldown(var/timeout) - var/datum/movement_handler/mob/delay/delay = GetMovementHandler(/datum/movement_handler/mob/delay) - if(delay) - delay.SetDelay(timeout) - -/mob/proc/ExtraMoveCooldown(var/timeout) - var/datum/movement_handler/mob/delay/delay = GetMovementHandler(/datum/movement_handler/mob/delay) - if(delay) - delay.AddDelay(timeout) - -/mob/proc/checkMoveCooldown() - if(world.time < next_move) - return FALSE // Need to wait more. - return TRUE - -/client/proc/client_dir(input, direction=-1) - return turn(input, direction*dir2angle(dir)) - -/client/Northeast() - diagonal_action(NORTHEAST) -/client/Northwest() - diagonal_action(NORTHWEST) -/client/Southeast() - diagonal_action(SOUTHEAST) -/client/Southwest() - diagonal_action(SOUTHWEST) - -/client/proc/diagonal_action(direction) - switch(client_dir(direction, 1)) - if(NORTHEAST) - swap_hand() - return - if(SOUTHEAST) - attack_self() - return - if(SOUTHWEST) - if(iscarbon(usr)) - var/mob/living/carbon/C = usr - C.toggle_throw_mode() - else - to_chat(usr, "This mob type cannot throw items.") - return - if(NORTHWEST) - mob.hotkey_drop() - -/mob/proc/hotkey_drop() - to_chat(src, "This mob type cannot drop items.") - -/mob/living/carbon/hotkey_drop() - var/obj/item/hand = get_active_hand() - if(!hand) - to_chat(src, "You have nothing to drop in your hand.") - else if(hand.can_be_dropped_by_client(src)) - drop_item() - -//This gets called when you press the delete button. -/client/verb/delete_key_pressed() - set hidden = 1 - - if(!usr.pulling) - to_chat(usr, "You are not pulling anything.") - return - usr.stop_pulling() - -/client/verb/swap_hand() - set hidden = 1 - if(istype(mob, /mob/living/carbon)) - mob:swap_hand() - if(istype(mob,/mob/living/silicon/robot)) - var/mob/living/silicon/robot/R = mob - R.cycle_modules() - return - - - -/client/verb/attack_self() - set hidden = 1 - if(mob) - mob.mode() - return - - -/client/verb/toggle_throw_mode() - set hidden = 1 - if(!istype(mob, /mob/living/carbon)) - return - if (!mob.stat && isturf(mob.loc) && !mob.restrained()) - mob:toggle_throw_mode() - else - return - - -/client/verb/drop_item() - set hidden = 1 - if(!isrobot(mob) && mob.stat == CONSCIOUS && isturf(mob.loc)) - var/obj/item/I = mob.get_active_hand() - if(I && I.can_be_dropped_by_client(mob)) - mob.drop_item() - -//This proc should never be overridden elsewhere at /atom/movable to keep directions sane. -/atom/movable/Move(newloc, direct) - if (direct & (direct - 1)) - if (direct & 1) - if (direct & 4) - if (step(src, NORTH)) - step(src, EAST) - else - if (step(src, EAST)) - step(src, NORTH) - else - if (direct & 8) - if (step(src, NORTH)) - step(src, WEST) - else - if (step(src, WEST)) - step(src, NORTH) - else - if (direct & 2) - if (direct & 4) - if (step(src, SOUTH)) - step(src, EAST) - else - if (step(src, EAST)) - step(src, SOUTH) - else - if (direct & 8) - if (step(src, SOUTH)) - step(src, WEST) - else - if (step(src, WEST)) - step(src, SOUTH) - else - var/atom/A = src.loc - - var/olddir = dir //we can't override this without sacrificing the rest of movable/New() - . = ..() - if(direct != olddir) - dir = olddir - set_dir(direct) - - src.move_speed = world.time - src.l_move_time - src.l_move_time = world.time - src.m_flag = 1 - if ((A != src.loc && A && A.z == src.z)) - src.last_move = get_dir(A, src.loc) - -/client/Move(n, direction) - if(!user_acted(src)) - return - if(!mob) - return // Moved here to avoid nullrefs below - return mob.SelfMove(direction) - -// Checks whether this mob is allowed to move in space -// Return 1 for movement, 0 for none, -// -1 to allow movement but with a chance of slipping -/mob/proc/Allow_Spacemove(var/check_drift = 0) - if(!Check_Dense_Object()) //Nothing to push off of so end here - return 0 - - if(restrained()) //Check to see if we can do things - return 0 - - return -1 - -//Checks if a mob has solid ground to stand on -//If there's no gravity then there's no up or down so naturally you can't stand on anything. -//For the same reason lattices in space don't count - those are things you grip, presumably. -/mob/proc/check_solid_ground() - if(istype(loc, /turf/space)) - return 0 - - if(!lastarea) - lastarea = get_area(src) - if(!lastarea || !lastarea.has_gravity) - return 0 - - return 1 - -/mob/proc/Check_Dense_Object() //checks for anything to push off or grip in the vicinity. also handles magboots on gravity-less floors tiles - - var/shoegrip = Check_Shoegrip() - - for(var/turf/simulated/T in trange(1,src)) //we only care for non-space turfs - if(T.density) //walls work - return 1 - else - var/area/A = T.loc - if(A.has_gravity || (shoegrip && !isopenspace(T))) - return 1 - - for(var/obj/O in orange(1, src)) - if(istype(O, /obj/structure/lattice)) - return 1 - if(istype(O, /obj/structure/catwalk)) - return 1 - if(O && O.density && O.anchored) - return 1 - - return 0 - -/mob/proc/Check_Shoegrip() - return 0 - -//return 1 if slipped, 0 otherwise -/mob/proc/handle_spaceslipping() - if(prob(skill_fail_chance(SKILL_EVA, slip_chance(10), SKILL_EXPERT))) - to_chat(src, "You slipped!") - src.inertia_dir = src.last_move - step(src, src.inertia_dir) - return 1 - return 0 - -/mob/proc/slip_chance(var/prob_slip = 10) - if(stat) - return 0 - if(buckled) - return 0 - if(Check_Shoegrip()) - return 0 - if(MOVING_DELIBERATELY(src)) - prob_slip *= 0.5 - return prob_slip - -#define DO_MOVE(this_dir) var/final_dir = turn(this_dir, -dir2angle(dir)); Move(get_step(mob, final_dir), final_dir); - -/client/verb/moveup() - set name = ".moveup" - set instant = 1 - DO_MOVE(NORTH) - -/client/verb/movedown() - set name = ".movedown" - set instant = 1 - DO_MOVE(SOUTH) - -/client/verb/moveright() - set name = ".moveright" - set instant = 1 - DO_MOVE(EAST) - -/client/verb/moveleft() - set name = ".moveleft" - set instant = 1 - DO_MOVE(WEST) - -#undef DO_MOVE - -/mob/proc/set_next_usable_move_intent() - var/checking_intent = (istype(move_intent) ? move_intent.type : move_intents[1]) - for(var/i = 1 to length(move_intents)) // One full iteration of the move set. - checking_intent = next_in_list(checking_intent, move_intents) - if(set_move_intent(decls_repository.get_decl(checking_intent))) - return - -/mob/proc/set_move_intent(var/decl/move_intent/next_intent) - if(next_intent && move_intent != next_intent && next_intent.can_be_used_by(src)) - move_intent = next_intent - if(hud_used) - hud_used.move_intent.icon_state = move_intent.hud_icon_state - return TRUE - return FALSE - -/mob/proc/get_movement_datum_by_flag(var/move_flag = MOVE_INTENT_DELIBERATE) - for(var/m_intent in move_intents) - var/decl/move_intent/check_move_intent = decls_repository.get_decl(m_intent) - if(check_move_intent.flags & move_flag) - return check_move_intent - -/mob/proc/get_movement_datum_by_missing_flag(var/move_flag = MOVE_INTENT_DELIBERATE) - for(var/m_intent in move_intents) - var/decl/move_intent/check_move_intent = decls_repository.get_decl(m_intent) - if(!(check_move_intent.flags & move_flag)) - return check_move_intent - -/mob/proc/get_movement_datums_by_flag(var/move_flag = MOVE_INTENT_DELIBERATE) - . = list() - for(var/m_intent in move_intents) - var/decl/move_intent/check_move_intent = decls_repository.get_decl(m_intent) - if(check_move_intent.flags & move_flag) - . += check_move_intent - -/mob/proc/get_movement_datums_by_missing_flag(var/move_flag = MOVE_INTENT_DELIBERATE) - . = list() - for(var/m_intent in move_intents) - var/decl/move_intent/check_move_intent = decls_repository.get_decl(m_intent) - if(!(check_move_intent.flags & move_flag)) - . += check_move_intent - -/mob/verb/SetDefaultWalk() - set name = "Set Default Walk" - set desc = "Select your default walking style." - set category = "IC" - var/choice = input(usr, "Select a default walk.", "Set Default Walk") as null|anything in get_movement_datums_by_missing_flag(MOVE_INTENT_QUICK) - if(choice && (choice in get_movement_datums_by_missing_flag(MOVE_INTENT_QUICK))) - default_walk_intent = choice - to_chat(src, "You will now default to [default_walk_intent] when moving deliberately.") - -/mob/verb/SetDefaultRun() - set name = "Set Default Run" - set desc = "Select your default running style." - set category = "IC" - var/choice = input(usr, "Select a default run.", "Set Default Run") as null|anything in get_movement_datums_by_flag(MOVE_INTENT_QUICK) - if(choice && (choice in get_movement_datums_by_flag(MOVE_INTENT_QUICK))) - default_run_intent = choice - to_chat(src, "You will now default to [default_run_intent] when moving quickly.") - -/client/verb/setmovingslowly() - set hidden = 1 - if(mob) - mob.set_moving_slowly() - -/mob/proc/set_moving_slowly() - if(!default_walk_intent) - default_walk_intent = get_movement_datum_by_missing_flag(MOVE_INTENT_QUICK) - if(default_walk_intent && move_intent != default_walk_intent) - set_move_intent(default_walk_intent) - -/client/verb/setmovingquickly() - set hidden = 1 - if(mob) - mob.set_moving_quickly() - -/mob/proc/set_moving_quickly() - if(!default_run_intent) - default_run_intent = get_movement_datum_by_flag(MOVE_INTENT_QUICK) - if(default_run_intent && move_intent != default_run_intent) - set_move_intent(default_run_intent) - -/mob/proc/can_sprint() - return FALSE - -/mob/proc/adjust_stamina(var/amt) - return - -/mob/proc/get_stamina() - return 100 diff --git a/code/modules/mob/mob_transformation_simple.dm b/code/modules/mob/mob_transformation_simple.dm deleted file mode 100644 index dbff7355486df..0000000000000 --- a/code/modules/mob/mob_transformation_simple.dm +++ /dev/null @@ -1,55 +0,0 @@ - -//This proc is the most basic of the procs. All it does is make a new mob on the same tile and transfer over a few variables. -//Returns the new mob -//Note that this proc does NOT do MMI related stuff! -/mob/proc/change_mob_type(var/new_type = null, var/turf/location = null, var/new_name = null as text, var/delete_old_mob = 0 as num, var/subspecies) - - if(istype(src,/mob/new_player)) - to_chat(usr, "Cannot convert players who have not entered yet.") - return - - if(!new_type) - new_type = input("Mob type path:", "Mob type") as text|null - - if( !ispath(new_type) ) - to_chat(usr, "Invalid type path (new_type = [new_type]) in change_mob_type(). Contact a coder.") - return - - if( new_type == /mob/new_player ) - to_chat(usr, "cannot convert into a new_player mob type.") - return - - var/mob/M - if(isturf(location)) - M = new new_type( location ) - else - M = new new_type( src.loc ) - - if(!M || !ismob(M)) - to_chat(usr, "Type path is not a mob (new_type = [new_type]) in change_mob_type(). Contact a coder.") - qdel(M) - return - - if( istext(new_name) ) - M.SetName(new_name) - M.real_name = new_name - M.fake_name=null - else - M.SetName(src.name) - M.real_name = src.real_name - - if(src.dna) - M.dna = src.dna.Clone() - - if(mind) - mind.transfer_to(M) - else - M.key = key - - if(subspecies && istype(M,/mob/living/carbon/human)) - var/mob/living/carbon/human/H = M - H.set_species(subspecies) - - if(delete_old_mob) - QDEL_IN(src, 1) - return M diff --git a/code/modules/mob/new_player/login.dm b/code/modules/mob/new_player/login.dm deleted file mode 100644 index 50b5af0facd54..0000000000000 --- a/code/modules/mob/new_player/login.dm +++ /dev/null @@ -1,43 +0,0 @@ -/mob/new_player/Login() - update_Login_details() //handles setting lastKnownIP and computer_id for use by the ban systems as well as checking for multikeying - if (config.motd) - to_chat(src, "
              [config.motd]
              ", handle_whitespace=FALSE) - to_chat(src, "
              Game ID:
              [game_id]
              ") - - if(!mind) - mind = new /datum/mind(key) - mind.active = 1 - mind.current = src - - loc = null - GLOB.using_map.show_titlescreen(client) - my_client = client - set_sight(sight|SEE_TURFS) - - // Add to player list if missing - if (!GLOB.player_list.Find(src)) - ADD_SORTED(GLOB.player_list, src, /proc/cmp_mob_key) - - new_player_panel() - - if(!SScharacter_setup.initialized) - SScharacter_setup.newplayers_requiring_init += src - else - deferred_login() - -// This is called when the charcter setup system has been sufficiently initialized and prefs are available. -// Do not make any calls in mob/Login which may require prefs having been loaded. -// It is safe to assume that any UI or sound related calls will fall into that category. -/mob/new_player/proc/deferred_login() - if(client) - client.playtitlemusic() - maybe_send_staffwarns("connected as new player") - if(client.get_preference_value(/datum/client_preference/goonchat) == GLOB.PREF_YES) - client.chatOutput.start() - - var/decl/security_state/security_state = decls_repository.get_decl(GLOB.using_map.security_state) - var/decl/security_level/SL = security_state.current_security_level - var/alert_desc = "" - if(SL.up_description) - alert_desc = SL.up_description - to_chat(src, "The alert level on the [station_name()] is currently: [SL.name]. [alert_desc]") diff --git a/code/modules/mob/new_player/logout.dm b/code/modules/mob/new_player/logout.dm deleted file mode 100644 index b04c9a6d54c21..0000000000000 --- a/code/modules/mob/new_player/logout.dm +++ /dev/null @@ -1,13 +0,0 @@ -/mob/new_player/Logout() - ready = 0 - - // see login.dm - if(my_client) - GLOB.using_map.hide_titlescreen(my_client) - my_client = null - - ..() - if(!spawning)//Here so that if they are spawning and log out, the other procs can play out and they will have a mob to come back to. - key = null//We null their key before deleting the mob, so they are properly kicked out. - qdel(src) - return diff --git a/code/modules/mob/new_player/new_player.dm b/code/modules/mob/new_player/new_player.dm deleted file mode 100644 index 23c1944afee43..0000000000000 --- a/code/modules/mob/new_player/new_player.dm +++ /dev/null @@ -1,636 +0,0 @@ -//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:33 - -/mob/new_player - var/ready = 0 - var/respawned_time = 0 - var/spawning = 0//Referenced when you want to delete the new_player later on in the code. - var/totalPlayers = 0 //Player counts for the Lobby tab - var/totalPlayersReady = 0 - var/datum/browser/panel - var/show_invalid_jobs = 0 - universal_speak = TRUE - - invisibility = 101 - - density = FALSE - stat = DEAD - - movement_handlers = list() - anchored = TRUE // don't get pushed around - - virtual_mob = null // Hear no evil, speak no evil - - -/mob/new_player/New() - ..() - verbs += /mob/proc/toggle_antag_pool - - -/mob/new_player/proc/new_player_panel(force) - if (!force && !SScharacter_setup.initialized) - return - var/list/output = list() - output += "
              " - if (config.wiki_url || config.rules_url || config.lore_url) - var/player_age = client?.player_age - if (isnum(player_age) && player_age < 7) - output += "Welcome! Please check out these links:
              " - if (config.wiki_url) - output += "Wiki" - if (config.rules_url) - output += "Rules" - if (config.lore_url) - output += "Lore" - output += "
              " - if (GAME_STATE > RUNLEVEL_LOBBY) - output += "Manifest" - output += "Options" - output += "
              " - output += "Playing As
              " - output += "[client.prefs.real_name || "(Random)"]
              " - output += client.prefs.job_high ? "[client.prefs.job_high]" : null - output += "
              " - output += "Join As Observer" - if (GAME_STATE > RUNLEVEL_LOBBY) - output += "Join As Selected" - else - output += "Round Start Join" - output += "
              " - output += "[GLOB.using_map.get_map_info()||"No information available for the current map."]" - output += "
              " - panel = new (src, "Welcome","Welcome to [GLOB.using_map.full_name]", 520, 340, src) - panel.set_window_options("can_close=0") - panel.set_content(output.Join()) - panel.open() - - -/mob/new_player/Stat() - . = ..() - - if(statpanel("Lobby")) - if(check_rights(R_INVESTIGATE, 0, src)) - stat("Game Mode:", "[SSticker.mode ? SSticker.mode.name : SSticker.master_mode] ([SSticker.master_mode])") - else - stat("Game Mode:", PUBLIC_GAME_MODE) - - var/extra_antags = list2params(additional_antag_types) - stat("Added Antagonists:", extra_antags ? extra_antags : "None") - stat("Initial Continue Vote:", "[round(config.vote_autotransfer_initial / 600, 1)] minutes") - stat("Additional Vote Every:", "[round(config.vote_autotransfer_interval / 600, 1)] minutes") - - if(GAME_STATE <= RUNLEVEL_LOBBY) - stat("Time To Start:", "[round(SSticker.pregame_timeleft/10)][SSticker.round_progressing ? "" : " (DELAYED)"]") - stat("Players: [totalPlayers]", "Players Ready: [totalPlayersReady]") - totalPlayers = 0 - totalPlayersReady = 0 - var/we_are_admin = isadmin(src) - for(var/mob/new_player/player in GLOB.player_list) - if(player.is_stealthed() && !we_are_admin) - continue - var/highjob - if (player.client) - var/show_ready = player.client.get_preference_value(/datum/client_preference/show_ready) == GLOB.PREF_SHOW - if (player.client.prefs?.job_high) - highjob = " as [player.client.prefs.job_high]" - if (!player.is_stealthed()) - var/can_see_hidden = check_rights(R_INVESTIGATE, 0) - var/datum/game_mode/mode = SSticker.pick_mode(SSticker.master_mode) - var/list/readied_antag_roles = list() - if (mode && can_see_hidden) - for (var/role in player.client.prefs.be_special_role) - if (role in mode.antag_tags) - readied_antag_roles += role - - var/antag_role_text = "[readied_antag_roles.len ? "Readied for ([english_list(readied_antag_roles)])" : ""]" - stat("[player.key]", (player.ready && (show_ready || can_see_hidden)?("(Playing[highjob]) [(can_see_hidden && !show_ready) ? "(Hidden)" : ""] [antag_role_text]"):(null))) - totalPlayers++ - if(player.ready)totalPlayersReady++ - else - stat("Next Continue Vote:", "[max(round(transfer_controller.time_till_transfer_vote() / 600, 1), 0)] minutes") - -/mob/new_player/Topic(href, href_list) // This is a full override; does not call parent. - if (usr != src) - return TOPIC_NOACTION - if (!client) - return TOPIC_NOACTION - if (href_list["show_preferences"]) - client.prefs.open_setup_window(src) - return 1 - if (href_list["show_wiki"]) - client.link_url(config.wiki_url, "Wiki", TRUE) - return 1 - if (href_list["show_rules"]) - client.link_url(config.rules_url, "Rules", TRUE) - return 1 - if (href_list["show_lore"]) - client.link_url(config.lore_url, "Lore", TRUE) - return 1 - if (href_list["ready"]) - ready = GAME_STATE > RUNLEVEL_LOBBY ? 0 : text2num(href_list["ready"]) - if (href_list["refresh"]) - panel.close() - if(client) - new_player_panel() - - if(href_list["observe"]) - if(GAME_STATE < RUNLEVEL_LOBBY) - to_chat(src, "Пожалуйста, подождите загрузки сервера.") - return - - if(!config.respawn_delay || client.holder || alert(src,"Вы уверены, что хотите наблюдать? Вам придется ждать [OBSERV_SPAWN_DELAY] минут прежде чем получить возможность респавна.","Player Setup","Да","Нет") == "Да") - if(!client) return 1 - - var/mob/observer/ghost/observer = new() - - spawning = 1 - sound_to(src, sound(null, repeat = 0, wait = 0, volume = 85, channel = GLOB.lobby_sound_channel))// MAD JAMS cant last forever yo - - - observer.started_as_observer = 1 - close_spawn_windows() - var/obj/O = locate("landmark*Observer-Start") - if(istype(O)) - to_chat(src, "Телепортация.") - observer.forceMove(O.loc) - else - to_chat(src, "Не удалость обнаружить точку спавна наблюдателей. Используйте кнопку Teleport чтобы переместить к карте.") - observer.timeofdeath = world.time // Set the time of death so that the respawn timer works correctly. - - var/should_announce = client.get_preference_value(/datum/client_preference/announce_ghost_join) == GLOB.PREF_YES - - if(isnull(client.holder) && should_announce) - announce_ghost_joinleave(src) - - var/mob/living/carbon/human/dummy/mannequin = new() - client.prefs.dress_preview_mob(mannequin) - observer.set_appearance(mannequin) - qdel(mannequin) - - observer.real_name = client.prefs.real_name - observer.SetName(observer.real_name) - if(!client.holder && !config.antag_hud_allowed) // For new ghosts we remove the verb from even showing up if it's not allowed. - observer.verbs -= /mob/observer/ghost/verb/toggle_antagHUD // Poor guys, don't know what they are missing! - observer.key = key - qdel(src) - - return 1 - - if(href_list["late_join"]) - if(GAME_STATE != RUNLEVEL_GAME) - to_chat(usr, SPAN_WARNING("Раунд или не начался или уже закончился...")) - return - if (!client.holder) - var/dsdiff = config.respawn_menu_delay MINUTES - (world.time - respawned_time) - if (dsdiff > 0) - to_chat(usr, SPAN_WARNING("You must wait [time2text(dsdiff, "mm:ss")] before rejoining.")) - return - LateChoices() //show the latejoin job selection menu - - if(href_list["manifest"]) - ViewManifest() - - if(href_list["SelectedJob"]) - var/datum/job/job = SSjobs.get_by_title(href_list["SelectedJob"]) - - if(!SSjobs.check_general_join_blockers(src, job)) - return FALSE - - var/datum/species/S = all_species[client.prefs.species] - if(!check_species_allowed(S)) - return 0 - - AttemptLateSpawn(job, client.prefs.spawnpoint) - return - - if(!ready && href_list["preference"]) - if(client) - client.prefs.process_link(src, href_list) - - if(href_list["invalid_jobs"]) - show_invalid_jobs = !show_invalid_jobs - LateChoices() - - else if(!href_list["late_join"]) - if(client) - new_player_panel() - -/mob/new_player/proc/AttemptLateSpawn(var/datum/job/job, var/spawning_at) - - if(src != usr) - return 0 - if(GAME_STATE != RUNLEVEL_GAME) - to_chat(usr, "Раунд не начался или уже закончился...") - return 0 - if(!config.enter_allowed) - to_chat(usr, "Возможность зайти за профессию отключена администрацией в ивентных целях. Пожалуйста, станьте наблюдателем.") - return 0 - - if(!job || !job.is_available(client)) - alert("Позиция [job.title] недоступна. Пожалуйста, выберите другую.") - return 0 - if(job.is_restricted(client.prefs, src)) - return - - var/datum/spawnpoint/spawnpoint = job.get_spawnpoint(client) - var/turf/spawn_turf = pick(spawnpoint.turfs) - if(job.latejoin_at_spawnpoints) - var/obj/S = job.get_roundstart_spawnpoint() - spawn_turf = get_turf(S) - - if(!SSjobs.check_unsafe_spawn(src, spawn_turf)) - return - - // Just in case someone stole our position while we were waiting for input from alert() proc - if(!job || !job.is_available(client)) - to_chat(src, alert("Позиция [job.title] недоступна. Пожалуйста, выберите другую.")) - return 0 - - SSjobs.assign_role(src, job.title, 1) - - var/mob/living/character = create_character(spawn_turf) //creates the human and transfers vars and mind - if(!character) - return 0 - - character = SSjobs.equip_rank(character, job.title, 1) //equips the human - SScustomitems.equip_custom_items(character) - - // AIs don't need a spawnpoint, they must spawn at an empty core - if(character.mind.assigned_role == "AI") - - character = character.AIize(move=0) // AIize the character, but don't move them yet - - // is_available for AI checks that there is an empty core available in this list - var/obj/structure/AIcore/deactivated/C = empty_playable_ai_cores[1] - empty_playable_ai_cores -= C - - character.forceMove(C.loc) - var/mob/living/silicon/ai/A = character - A.on_mob_init() - - /*AnnounceCyborg(character, job.title, "has been downloaded to the empty core in \the [character.loc.loc]")*/ - SSticker.mode.handle_latejoin(character) - - qdel(C) - qdel(src) - return - - SSticker.mode.handle_latejoin(character) - GLOB.universe.OnPlayerLatejoin(character) - spawnpoint.after_join(character) - if(job.create_record) - if(character.mind.assigned_role != "Robot") - CreateModularRecord(character) - SSticker.minds += character.mind//Cyborgs and AIs handle this in the transform proc. //TODO!!!!! ~Carn - AnnounceArrival(character, job, spawnpoint.msg) - else - AnnounceCyborg(character, job, spawnpoint.msg) - log_and_message_admins("has joined the round as [character.mind.assigned_role].", character) - - if(character.needs_wheelchair()) - equip_wheelchair(character) - - qdel(src) - - -/mob/new_player/proc/AnnounceCyborg(var/mob/living/character, var/rank, var/join_message) - if (GAME_STATE == RUNLEVEL_GAME) - if(character.mind.role_alt_title) - rank = character.mind.role_alt_title - // can't use their name here, since cyborg namepicking is done post-spawn, so we'll just say "A new Cyborg has arrived"/"A new Android has arrived"/etc. - GLOB.global_announcer.autosay("Новый [rank ? "[rank]" : "visitor" ] [join_message ? join_message : "активировался"].", "Arrivals Announcement Computer") - -/mob/new_player/proc/LateChoices() - var/name = client.prefs.real_name - - var/list/header = list("
              ") - header += "Welcome, [name].
              " - header += "Round Duration: [roundduration2text()]
              " - - if(evacuation_controller.has_evacuated()) - header += "[station_name()] была эвакуирована.
              " - else if(evacuation_controller.is_evacuating()) - if(evacuation_controller.emergency_evacuation) // Emergency shuttle is past the point of no recall - header += "[station_name()] в текущий момент эвакуируется.
              " - else // Crew transfer initiated - header += "[station_name()] в текущий момент перемещается в следующий сектор.
              " - - var/list/dat = list() - dat += "Выберите одну из доступных ролей:
              " - dat += "[show_invalid_jobs ? "Скрыть":"Показать"] недоступные профессии.
              " - dat += "" -/*[ORIG] - dat += "" - - // TORCH JOBS - var/list/job_summaries - var/list/hidden_reasons = list() - for(var/datum/job/job in SSjobs.primary_job_datums) - var/summary = job.get_join_link(client, "byond://?src=\ref[src];SelectedJob=[job.title]", show_invalid_jobs) - if(summary && summary != "") - LAZYADD(job_summaries, summary) - else - for(var/raisin in job.get_unavailable_reasons(client)) - hidden_reasons[raisin] = TRUE - - if(LAZYLEN(job_summaries)) - dat += job_summaries - else - dat += "" - // END TORCH JOBS - - // SUBMAP JOBS - for(var/thing in SSmapping.submaps) - var/datum/submap/submap = thing - if(submap && submap.available()) - dat += "" - job_summaries = list() - for(var/otherthing in submap.jobs) - var/datum/job/job = submap.jobs[otherthing] - var/summary = job.get_join_link(client, "byond://?src=\ref[submap];joining=\ref[src];join_as=[otherthing]", show_invalid_jobs) - if(summary && summary != "") - LAZYADD(job_summaries, summary) - else - for(var/raisin in job.get_unavailable_reasons(client)) - hidden_reasons[raisin] = TRUE - - if(LAZYLEN(job_summaries)) - dat += job_summaries - else - dat += "Нет доступных ролей." - // END SUBMAP JOBS - - dat += "
              [GLOB.using_map.station_name]:
              Нет доступных ролей.
              [submap.name] ([submap.archetype.descriptor]):
              " - if(LAZYLEN(hidden_reasons)) - var/list/additional_dat = list("
              Некоторые роли были убраны из этого списка по следующим причинам:
              ") - for(var/raisin in hidden_reasons) - additional_dat += "[raisin]
              " - additional_dat += "
              " - dat = additional_dat + dat - dat = header + dat - show_browser(src, jointext(dat, null), "window=latechoices;size=450x640;can_close=1") -[/ORIG]*/ -//[INF] - var/list/categorizedJobs = list( - "Command" = list(jobs = list(), dep = COM, color = "#aac1ee"), - "Command Support" = list(jobs = list(), dep = SPT, color = "#aac1ee"), - "Engineering" = list(jobs = list(), dep = ENG, color = "#ffd699"), - "Security" = list(jobs = list(), dep = SEC, color = "#ff9999"), - "Miscellaneous" = list(jobs = list(), dep = CIV, color = "#ffffff", colBreak = 1), - "Synthetic" = list(jobs = list(), dep = MSC, color = "#ccffcc"), - "Service" = list(jobs = list(), dep = SRV, color = "#cccccc"), - "Medical" = list(jobs = list(), dep = MED, color = "#99ffe6"), - "Science" = list(jobs = list(), dep = SCI, color = "#e6b3e6", colBreak = 1), - "Supply" = list(jobs = list(), dep = SUP, color = "#ead4ae"), - "Expedition" = list(jobs = list(), dep = EXP, color = "#ffd699"), - "ERROR" = list(jobs = list(), color = "#ffffff", colBreak = 1) - ) - - dat += "[GLOB.using_map.station_name]" - - // TORCH JOBS - var/list/job_summaries - var/list/hidden_reasons = list() - var/catcheck - for(var/datum/job/job in SSjobs.primary_job_datums) - var/summary = job.get_join_link(client, "byond://?src=\ref[src];SelectedJob=[job.title]", show_invalid_jobs) - if(job.department_flag) - catcheck |= job.department_flag - if(summary && summary != "") - for(var/category in categorizedJobs) - var/list/jobs = list() - if(job.department_flag & categorizedJobs[category]["dep"]) - jobs += job - if(category == "ERROR") - if(!job.department_flag) - jobs += job - continue - var/check = FALSE - for(var/categ in categorizedJobs) - if(job in categorizedJobs[categ]["jobs"]) - check = TRUE - continue - if(!check) - jobs += job - if(length(jobs)) - categorizedJobs[category]["jobs"] += jobs - else - for(var/raisin in job.get_unavailable_reasons(client)) - hidden_reasons[raisin] = TRUE - dat += "" - for(var/jobcat in categorizedJobs) - if(categorizedJobs[jobcat]["colBreak"]) - dat += "" - if((length(categorizedJobs[jobcat]["jobs"]) < 1) && (jobcat == "ERROR")) - continue - var/flag = categorizedJobs[jobcat]["dep"] - if(!flag) - log_admin("[jobcat] НЕТ ФЛАГА КАТЕГОРИИ.") - message_staff("[jobcat] НЕТ ФЛАГА КАТЕГОРИИ.") - continue - else if(!(catcheck & flag)) -// log_admin("[jobcat] НЕ ПРЕДУСМОТРЕНЫ ПРОФЕСИИ.") -// message_staff("[jobcat] НЕ ПРЕДУСМОТРЕНЫ ПРОФЕСИИ.") - continue - var/color = categorizedJobs[jobcat]["color"] - dat += "
              " - dat += "[jobcat]" - dat += "" - if(length(categorizedJobs[jobcat]["jobs"]) < 1) - dat += "" - dat += "
              Нет доступных ролей.
              " - dat += "

              " - continue - for(var/datum/job/prof in categorizedJobs[jobcat]["jobs"]) - if(jobcat == "Command") - if(istype(prof, /datum/job/captain)) - dat += prof.get_join_link(client, "byond://?src=\ref[src];SelectedJob=[prof.title]", show_invalid_jobs, TRUE) - else - dat += prof.get_join_link(client, "byond://?src=\ref[src];SelectedJob=[prof.title]", show_invalid_jobs) - else if(prof.department_flag & COM) - dat += prof.get_join_link(client, "byond://?src=\ref[src];SelectedJob=[prof.title]", show_invalid_jobs, TRUE) - else - dat += prof.get_join_link(client, "byond://?src=\ref[src];SelectedJob=[prof.title]", show_invalid_jobs) - dat += "" - dat += "
              " - dat += "" - // END TORCH JOBS - - // SUBMAP JOBS - if(SSmapping.submaps) - dat += "" - dat += "
              " - for(var/thing in SSmapping.submaps) - var/datum/submap/submap = thing - if(submap && submap.available()) - var/color = "ffffff" - dat += "
              " - dat += "[submap.name] ([submap.archetype.descriptor])" - dat += "" - job_summaries = list() - for(var/otherthing in submap.jobs) - var/datum/job/job = submap.jobs[otherthing] - var/summary = job.get_join_link(client, "byond://?src=\ref[submap];joining=\ref[src];join_as=[otherthing]", show_invalid_jobs) - if(summary && summary != "") - job_summaries += summary - else - for(var/raisin in job.get_unavailable_reasons(client)) - hidden_reasons[raisin] = TRUE - - if(LAZYLEN(job_summaries)) - dat += job_summaries - dat += "
              " - dat += "

              " - else - dat += "
              Нет доступных ролей.
              " - dat += "
              " - dat += "" - // END SUBMAP JOBS - dat += "" - if(LAZYLEN(hidden_reasons)) - var/list/additional_dat = list("
              Некоторые роли были убраны из этого списка по следующим причинам:
              ") - for(var/raisin in hidden_reasons) - additional_dat += "[raisin]
              " - additional_dat += "
              " - dat = additional_dat + dat - dat = header + dat - var/datum/browser/popup = new(src, "latechoices", "Choose Profession", 1050, 900) - popup.add_stylesheet("playeroptions", 'html/browser/playeroptions.css') - popup.set_content(jointext(dat, null)) - popup.open(0) // 0 is passed to open so that it doesn't use the onclose() proc -//[/INF] - -/mob/new_player/proc/create_character(var/turf/spawn_turf) - spawning = 1 - close_spawn_windows() - - var/mob/living/carbon/human/new_character - - var/datum/species/chosen_species - if(client.prefs.species) - chosen_species = all_species[client.prefs.species] - - if(!spawn_turf) - var/datum/job/job = SSjobs.get_by_title(mind.assigned_role) - if(!job) - job = SSjobs.get_by_title(GLOB.using_map.default_assistant_title) - var/datum/spawnpoint/spawnpoint = job.get_spawnpoint(client, client.prefs.ranks[job.title]) - if(spawnpoint)//inf - spawn_turf = pick(spawnpoint.turfs) -//[INF] - else - spawning = 0 - return null -//[/INF] - - if(chosen_species) - if(!check_species_allowed(chosen_species)) - spawning = 0 //abort - return null - new_character = new(spawn_turf, chosen_species.name) - if(chosen_species.has_organ[BP_POSIBRAIN] && client && client.prefs.is_shackled) - var/obj/item/organ/internal/posibrain/B = new_character.internal_organs_by_name[BP_POSIBRAIN] - if(B) B.shackle(client.prefs.get_lawset()) - - if(!new_character) - new_character = new(spawn_turf) - - new_character.lastarea = get_area(spawn_turf) - - client.prefs.copy_to(new_character) - - sound_to(src, sound(null, repeat = 0, wait = 0, volume = 85, channel = GLOB.lobby_sound_channel))// MAD JAMS cant last forever yo - - if(mind) - mind.active = 0 //we wish to transfer the key manually - mind.original = new_character - if(client.prefs.memory) - mind.StoreMemory(client.prefs.memory) - mind.transfer_to(new_character) //won't transfer key since the mind is not active - - new_character.dna.ready_dna(new_character) - new_character.dna.b_type = client.prefs.b_type - new_character.sync_organ_dna() - if(client.prefs.disabilities) - // Set defer to 1 if you add more crap here so it only recalculates struc_enzymes once. - N3X - new_character.dna.SetSEState(GLOB.GLASSESBLOCK,1,0) - new_character.disabilities |= NEARSIGHTED - - // Do the initial caching of the player's body icons. - new_character.force_update_limbs() - new_character.update_eyes() - new_character.regenerate_icons() - - new_character.key = key //Manually transfer the key to log them in - - return new_character - -/mob/new_player/proc/ViewManifest() - var/dat = "
              " - dat += html_crew_manifest(OOC = 1) - //show_browser(src, dat, "window=manifest;size=370x420;can_close=1") - var/datum/browser/popup = new(src, "Crew Manifest", "Crew Manifest", 370, 420, src) - popup.set_content(dat) - popup.open() - -/mob/new_player/Move() - return 0 - -/mob/new_player/proc/close_spawn_windows() - close_browser(src, "window=latechoices") //closes late choices window - panel.close() - -/mob/new_player/proc/check_species_allowed(datum/species/S, var/show_alert=1) - if(!S.is_available_for_join() && !has_admin_rights()) - if(show_alert) - to_chat(src, alert("Ваша текущая раса ([client.prefs.species]) недоступна для игры.")) - return 0 - if(!is_alien_whitelisted(src, S)) - if(show_alert) - to_chat(src, alert("Вы не находитесь в списке ксенорас для игры за [client.prefs.species].")) - return 0 - return 1 - -/mob/new_player/get_species() - var/datum/species/chosen_species - if(client.prefs.species) - chosen_species = all_species[client.prefs.species] - - if(!chosen_species || !check_species_allowed(chosen_species, 0)) - return SPECIES_HUMAN - - return chosen_species.name - -/mob/new_player/get_gender() - if(!client || !client.prefs) ..() - return client.prefs.gender - -/mob/new_player/is_ready() - return ready && ..() - -/mob/new_player/hear_say(var/message, var/verb = "says", var/datum/language/language = null, var/alt_name = "",var/italics = 0, var/mob/speaker = null) - return - -/mob/new_player/hear_radio(var/message, var/verb="says", var/datum/language/language=null, var/part_a, var/part_b, var/part_c, var/mob/speaker = null, var/hard_to_hear = 0) - return - -/mob/new_player/show_message(msg, type, alt, alt_type) - return - -/mob/new_player/MayRespawn() - return 1 - -/mob/new_player/touch_map_edge() - return - -/mob/new_player/say(var/message) - sanitize_and_communicate(/decl/communication_channel/ooc, client, message) - -/mob/new_player/verb/next_lobby_track() - set name = "Play Different Lobby Track" - set category = "OOC" - - if(get_preference_value(/datum/client_preference/play_lobby_music) == GLOB.PREF_NO) - return - var/decl/audio/track/track = GLOB.using_map.get_lobby_track(GLOB.using_map.lobby_track.type) - sound_to(src, track.get_sound()) - to_chat(src, track.get_info()) diff --git a/code/modules/mob/new_player/preferences_setup.dm b/code/modules/mob/new_player/preferences_setup.dm deleted file mode 100644 index 202f304b30799..0000000000000 --- a/code/modules/mob/new_player/preferences_setup.dm +++ /dev/null @@ -1,43 +0,0 @@ -#define ASSIGN_LIST_TO_COLORS(L, R, G, B) if(L) { R = L[1]; G = L[2]; B = L[3]; } - -/datum/preferences/proc/randomize_appearance_and_body_for(var/mob/living/carbon/human/H) - var/datum/species/current_species = all_species[species] - if(!current_species) current_species = all_species[SPECIES_HUMAN] - gender = pick(current_species.genders) - - head_hair_style = random_hair_style(gender, species) - facial_hair_style = random_facial_hair_style(gender, species) - if(current_species) - if(current_species.appearance_flags & HAS_A_SKIN_TONE) - skin_tone = current_species.get_random_skin_tone() || skin_tone - if(current_species.appearance_flags & HAS_EYE_COLOR) - var/list/ergb = current_species.get_random_eye_color() - eye_color = rgb(ergb[1], ergb[2], ergb[3]) - if(current_species.appearance_flags & HAS_SKIN_COLOR) - var/list/srgb = current_species.get_random_skin_color() - skin_color = rgb(srgb[1], srgb[2], srgb[3]) - if(current_species.appearance_flags & HAS_HAIR_COLOR) - var/hair_colors = current_species.get_random_hair_color() - if(hair_colors) - var/list/rgb = hair_colors - head_hair_color = rgb(rgb[1], rgb[2], rgb[3]) - if(prob(75)) - facial_hair_color = head_hair_color - else - var/list/frgb = current_species.get_random_facial_hair_color() - facial_hair_color = rgb(frgb[1], frgb[2], frgb[3]) - - if(current_species.appearance_flags & HAS_UNDERWEAR) - if(all_underwear) - all_underwear.Cut() - for(var/datum/category_group/underwear/WRC in GLOB.underwear.categories) - var/datum/category_item/underwear/WRI = pick(WRC.items) - all_underwear[WRC.name] = WRI.name - - backpack = decls_repository.get_decl(pick(subtypesof(/decl/backpack_outfit))) - age = rand(current_species.min_age, current_species.max_age) - b_type = RANDOM_BLOOD_TYPE - if(H) - copy_to(H) - -#undef ASSIGN_LIST_TO_COLORS diff --git a/code/modules/mob/observer/following.dm b/code/modules/mob/observer/following.dm deleted file mode 100644 index 6ef4ae13b3cf2..0000000000000 --- a/code/modules/mob/observer/following.dm +++ /dev/null @@ -1,25 +0,0 @@ -/mob/observer - var/atom/following - -/mob/observer/Destroy() - . = ..() - stop_following() - -/mob/observer/proc/stop_following() - if(!following) - return - GLOB.destroyed_event.unregister(following, src) - GLOB.moved_event.unregister(following, src) - GLOB.dir_set_event.unregister(following, src) - following = null - -/mob/observer/proc/start_following(var/atom/a) - stop_following() - following = a - GLOB.destroyed_event.register(a, src, .proc/stop_following) - GLOB.moved_event.register(a, src, .proc/keep_following) - GLOB.dir_set_event.register(a, src, /atom/proc/recursive_dir_set) - keep_following(new_loc = get_turf(following)) - -/mob/observer/proc/keep_following(var/atom/movable/moving_instance, var/atom/old_loc, var/atom/new_loc) - forceMove(get_turf(new_loc)) \ No newline at end of file diff --git a/code/modules/mob/observer/freelook/ai/cameranet.dm b/code/modules/mob/observer/freelook/ai/cameranet.dm deleted file mode 100644 index bde34a77b7a8e..0000000000000 --- a/code/modules/mob/observer/freelook/ai/cameranet.dm +++ /dev/null @@ -1,41 +0,0 @@ -// CAMERA NET -// -// The datum containing all the chunks. - -/datum/visualnet/camera - // The cameras on the map, no matter if they work or not. - var/list/cameras - chunk_type = /datum/chunk/camera - valid_source_types = list(/obj/machinery/camera, /mob/living/silicon/ai) - -/datum/visualnet/camera/New() - cameras = list() - ..() - -/datum/visualnet/camera/Destroy() - cameras.Cut() - . = ..() - -/datum/visualnet/camera/add_source(obj/machinery/camera/c) - if(istype(c)) - if(c in cameras) - return FALSE - . = ..(c, c.can_use()) - if(.) - ADD_SORTED(cameras, c, /proc/cmp_camera_ctag_asc) - else if(isAI(c)) - var/mob/living/silicon/AI = c - return ..(AI, AI.stat != DEAD) - else - ..() - -// Add a camera to a chunk. - -/datum/visualnet/camera/remove_source(obj/machinery/camera/c) - if(istype(c) && cameras.Remove(c)) - . = ..(c, c.can_use()) - if(isAI(c)) - var/mob/living/silicon/AI = c - return ..(AI, AI.stat != DEAD) - else - ..() diff --git a/code/modules/mob/observer/freelook/ai/chunk.dm b/code/modules/mob/observer/freelook/ai/chunk.dm deleted file mode 100644 index b70737ce20c19..0000000000000 --- a/code/modules/mob/observer/freelook/ai/chunk.dm +++ /dev/null @@ -1,23 +0,0 @@ -// CAMERA CHUNK -// -// A 16x16 grid of the map with a list of turfs that can be seen, are visible and are dimmed. -// Allows the Eye to stream these chunks and know what it can and cannot see. - -/datum/chunk/camera/acquire_visible_turfs(var/list/visible) - for(var/source in sources) - if(istype(source,/obj/machinery/camera)) - var/obj/machinery/camera/c = source - if(!c.can_use()) - continue - - for(var/turf/t in c.can_see()) - visible[t] = t - else if(isAI(source)) - var/mob/living/silicon/ai/AI = source - if(AI.stat == DEAD) - continue - for(var/turf/t in seen_turfs_in_range(AI, world.view)) - visible[t] = t - else - log_visualnet("Contained an unhandled source", source) - sources -= source diff --git a/code/modules/mob/observer/freelook/ai/eye.dm b/code/modules/mob/observer/freelook/ai/eye.dm deleted file mode 100644 index 0660afbd7a7b0..0000000000000 --- a/code/modules/mob/observer/freelook/ai/eye.dm +++ /dev/null @@ -1,106 +0,0 @@ -// AI EYE -// -// A mob that the AI controls to look around the station with. -// It streams chunks as it moves around, which will show it what the AI can and cannot see. - -/mob/observer/eye/cameranet - name = "Inactive Camera Eye" - name_sufix = "Camera Eye" - -/mob/observer/eye/cameranet/New() - ..() - visualnet = cameranet - -/mob/observer/eye/aiEye - name = "Inactive AI Eye" - name_sufix = "AI Eye" - icon_state = "AI-eye" - -/mob/observer/eye/aiEye/New() - ..() - visualnet = cameranet - -/mob/observer/eye/aiEye/setLoc(var/T, var/cancel_tracking = 1) - . = ..() - if(. && isAI(owner)) - var/mob/living/silicon/ai/ai = owner - if(cancel_tracking) - ai.ai_cancel_tracking() - - //Holopad - if(ai.holo && ai.hologram_follow) - ai.holo.move_hologram(ai) - return 1 - -/mob/observer/eye/aiEye/set_dir(new_dir) - . = ..() - if(. && isAI(owner)) - var/mob/living/silicon/ai/ai = owner - - //Holopad - if(ai.holo && ai.hologram_follow) - ai.holo.set_dir_hologram(new_dir, ai) - return 1 - -// AI MOVEMENT - -// The AI's "eye". Described on the top of the page. - -/mob/living/silicon/ai - var/obj/machinery/hologram/holopad/holo = null - -/mob/living/silicon/ai/proc/destroy_eyeobj(var/atom/new_eye) - if(!eyeobj) return - if(!new_eye) - new_eye = src - qdel(eyeobj) // No AI, no Eye - eyeobj = null - if(client) - client.eye = new_eye - -/mob/living/silicon/ai/proc/create_eyeobj(var/newloc) - if(eyeobj) destroy_eyeobj() - if(!newloc) newloc = get_turf(src) - eyeobj = new /mob/observer/eye/aiEye(newloc) - eyeobj.possess(src) - -// Intiliaze the eye by assigning it's "ai" variable to us. Then set it's loc to us. -/mob/living/silicon/ai/New() - ..() - create_eyeobj() - -/mob/living/silicon/ai/Destroy() - destroy_eyeobj() - . = ..() - -/atom/proc/move_camera_by_click() - if(istype(usr, /mob/living/silicon/ai)) - var/mob/living/silicon/ai/AI = usr - if(AI.eyeobj && AI.client.eye == AI.eyeobj) - AI.eyeobj.setLoc(src) - -// Return to the Core. -/mob/living/silicon/ai/proc/core() - set category = "Silicon Commands" - set name = "AI Core" - - view_core() - -/mob/living/silicon/ai/proc/view_core() - camera = null - unset_machine() - - if(!src.eyeobj) - return - - eyeobj.possess(src) - -/mob/living/silicon/ai/proc/toggle_acceleration() - set category = "Silicon Commands" - set name = "Toggle Camera Acceleration" - - if(!eyeobj) - return - - eyeobj.acceleration = !eyeobj.acceleration - to_chat(usr, "Camera acceleration has been toggled [eyeobj.acceleration ? "on" : "off"].") diff --git a/code/modules/mob/observer/freelook/ai/update_triggers.dm b/code/modules/mob/observer/freelook/ai/update_triggers.dm deleted file mode 100644 index d7900729fbdd9..0000000000000 --- a/code/modules/mob/observer/freelook/ai/update_triggers.dm +++ /dev/null @@ -1,59 +0,0 @@ -// CAMERA - -// An addition to deactivate which removes/adds the camera from the chunk list based on if it works or not. - -/obj/machinery/camera/deactivate(user as mob, var/choice = 1) - ..(user, choice) - invalidateCameraCache() - if(!can_use()) - set_light(0) - cameranet.update_visibility(src) - -/obj/machinery/camera/Initialize() - . = ..() - var/list/open_networks = difflist(network, GLOB.restricted_camera_networks) - on_open_network = open_networks.len - if(on_open_network) - cameranet.add_source(src) - -/obj/machinery/camera/Destroy() - if(on_open_network) - cameranet.remove_source(src) - . = ..() - -/obj/machinery/camera/proc/update_coverage(var/network_change = 0) - if(network_change) - var/list/open_networks = difflist(network, GLOB.restricted_camera_networks) - // Add or remove camera from the camera net as necessary - if(on_open_network && !open_networks.len) - on_open_network = FALSE - cameranet.remove_source(src) - else if(!on_open_network && open_networks.len) - on_open_network = TRUE - cameranet.add_source(src) - else - cameranet.update_visibility(src) - - invalidateCameraCache() - -// Mobs -/mob/living/silicon/ai/New() - ..() - cameranet.add_source(src) - -/mob/living/silicon/ai/Destroy() - cameranet.remove_source(src) - . = ..() - -/mob/living/silicon/ai/rejuvenate() - var/was_dead = stat == DEAD - ..() - if(was_dead && stat != DEAD) - // Arise! - cameranet.update_visibility(src, FALSE) - -/mob/living/silicon/ai/death(gibbed, deathmessage, show_dead_message) - . = ..(gibbed, deathmessage, show_dead_message) - if(.) - // If true, the mob went from living to dead (assuming everyone has been overriding as they should...) - cameranet.update_visibility(src, FALSE) diff --git a/code/modules/mob/observer/freelook/chunk.dm b/code/modules/mob/observer/freelook/chunk.dm deleted file mode 100644 index 474e73eb46b24..0000000000000 --- a/code/modules/mob/observer/freelook/chunk.dm +++ /dev/null @@ -1,185 +0,0 @@ -#define UPDATE_BUFFER 25 // 2.5 seconds - -// CHUNK -// -// A 16x16 grid of the map with a list of turfs that can be seen, are visible and are dimmed. -// Allows the Eye to stream these chunks and know what it can and cannot see. - -/datum/obfuscation - var/icon = 'icons/effects/cameravis.dmi' - var/icon_state = "black" - var/list/obfuscation_images = list() - var/static/icon/obfuscation_underlay - // There is an exploit were clients can memory-edit their local version of the static images, allowing them to see everything. This is a minor attempt to make that more difficult. - -/datum/obfuscation/Destroy() - obfuscation_images.Cut() - . = ..() - -/datum/obfuscation/proc/has_obfuscation(var/turf/T) - return !isnull(obfuscation_images[T]) - -/datum/obfuscation/proc/get_obfuscation(var/turf/T) - var/image/obfuscation = obfuscation_images[T] - if(!obfuscation) - obfuscation = image(icon, T, icon_state) - obfuscation.layer = OBFUSCATION_LAYER - if(!obfuscation_underlay) - // Creating a new icon of a fairly common icon state, adding some random color to prevent address searching, and hoping being static kills memory locality - var/turf/floor = /turf/simulated/floor/tiled - obfuscation_underlay = icon(initial(floor.icon), initial(floor.icon_state)) - obfuscation_underlay.Blend(rgb(rand(0,255),rand(0,255),rand(0,255))) - obfuscation.underlays += obfuscation_underlay - obfuscation_images[T] = obfuscation - return obfuscation - -/datum/chunk - var/datum/visualnet/visualnet - var/list/obscuredTurfs = list() - var/list/visibleTurfs = list() - var/list/obscured = list() - var/list/turfs = list() - var/list/seenby = list() - var/list/sources = list() - var/dirty = FALSE - var/updating = FALSE - var/x = 0 - var/y = 0 - var/z = 0 - var/datum/obfuscation/obfuscation = new() - -// Create a new chunk, since the chunks are made as they are needed. -/datum/chunk/New(var/datum/visualnet/visualnet, x, y, z) - ..() - src.visualnet = visualnet - // 0xf = 15 - x &= ~0xf - y &= ~0xf - - src.x = x - src.y = y - src.z = z - - for(var/turf/t in range(10, locate(x + 8, y + 8, z))) - if(t.x >= x && t.y >= y && t.x < x + 16 && t.y < y + 16) - turfs[t] = t - - add_sources(visualnet.sources) - acquire_visible_turfs(visibleTurfs) - - // Removes turf that isn't in turfs. - visibleTurfs &= turfs - obscuredTurfs = turfs - visibleTurfs - - for(var/turf in obscuredTurfs) - var/turf/t = turf - obscured += obfuscation.get_obfuscation(t) - -/datum/chunk/Destroy() - visualnet = null - . = ..() - -/datum/chunk/proc/add_sources(var/list/sources) - var/turf/center = locate(x + 8, y + 8, z) - for(var/entry in sources) - var/atom/A = entry - if(get_dist(get_turf(A), center) > 16) - continue - add_source(A) - -/datum/chunk/proc/add_source(var/atom/source) - if(source in sources) - return FALSE - sources += source - visibility_changed() - return TRUE - -/datum/chunk/proc/remove_source(var/atom/source) - if(sources.Remove(source)) - visibility_changed() - return TRUE - return FALSE - -// The visual net is responsible for adding/removing eyes. -/datum/chunk/proc/add_eye(mob/observer/eye/eye) - seenby += eye - eye.visibleChunks += src - if(dirty) - update() - if(eye.owner && eye.owner.client) - eye.owner.client.images += obscured - -/datum/chunk/proc/remove_eye(mob/observer/eye/eye) - seenby -= eye - eye.visibleChunks -= src - if(eye.owner && eye.owner.client) - eye.owner.client.images -= obscured - -// Updates the chunk, makes sure that it doesn't update too much. If the chunk isn't being watched it will -// instead be flagged to update the next time an AI Eye moves near it. - -/datum/chunk/proc/visibility_changed(var/update_now = FALSE) - if(update_now) - update() - return - - if(updating) - return - - if(seenby.len) - updating = TRUE - spawn(UPDATE_BUFFER) // Batch large changes, such as many doors opening or closing at once - if(updating) // Check if we're still updating, a forced update may have occured. - update() - else - dirty = TRUE // If this chunk is seen by noone, simply mark it as dirty and do nothing - -// The actual updating. - -/datum/chunk/proc/update() - var/list/newVisibleTurfs = new() - acquire_visible_turfs(newVisibleTurfs) - - // Removes turf that isn't in turfs. - newVisibleTurfs &= turfs - - var/list/visAdded = newVisibleTurfs - visibleTurfs - var/list/visRemoved = visibleTurfs - newVisibleTurfs - - visibleTurfs = newVisibleTurfs - obscuredTurfs = turfs - newVisibleTurfs - - for(var/turf in visAdded) - var/turf/t = turf - if(obfuscation.has_obfuscation(t)) - var/image/obfuscation_image = obfuscation.get_obfuscation(t) - obscured -= obfuscation_image - for(var/eye in seenby) - var/mob/observer/eye/m = eye - if(m && m.owner && m.owner.client) - m.owner.client.images -= obfuscation_image - - for(var/turf in visRemoved) - var/turf/t = turf - if(obscuredTurfs[t]) - var/image/obfuscation_image = obfuscation.get_obfuscation(t) - obscured += obfuscation_image - for(var/eye in seenby) - var/mob/observer/eye/m = eye - if(m && m.owner && m.owner.client) - m.owner.client.images += obfuscation_image - - dirty = FALSE - updating = FALSE - -/datum/chunk/proc/acquire_visible_turfs(var/list/visible) - return - -/proc/seen_turfs_in_range(var/source, var/range) - var/turf/pos = get_turf(source) - if(pos) - . = hear(range, pos) - else - . = list() - -#undef UPDATE_BUFFER diff --git a/code/modules/mob/observer/freelook/cult/cultnet.dm b/code/modules/mob/observer/freelook/cult/cultnet.dm deleted file mode 100644 index 25fbd019c08ed..0000000000000 --- a/code/modules/mob/observer/freelook/cult/cultnet.dm +++ /dev/null @@ -1,13 +0,0 @@ -/datum/visualnet/cultnet - valid_source_types = list(/mob/living, /mob/observer/eye/cult) - chunk_type = /datum/chunk/cultnet - -/datum/chunk/cultnet/acquire_visible_turfs(var/list/visible) - for(var/source in sources) - if(istype(source, /mob/living)) - var/mob/living/L = source - if(L.stat == DEAD) - continue - - for(var/turf/t in seen_turfs_in_range(source, world.view)) - visible[t] = t diff --git a/code/modules/mob/observer/freelook/cult/mask.dm b/code/modules/mob/observer/freelook/cult/mask.dm deleted file mode 100644 index 5b957a176212f..0000000000000 --- a/code/modules/mob/observer/freelook/cult/mask.dm +++ /dev/null @@ -1,11 +0,0 @@ -/mob/observer/eye/cult - name = "Mask of God" - desc = "A terrible fracture of reality coinciding into a mirror to another world." - -/mob/observer/eye/cult/New(var/loc, var/net) - ..() - visualnet = net - -/mob/observer/eye/cult/Destroy() - visualnet = null - return ..() \ No newline at end of file diff --git a/code/modules/mob/observer/freelook/eye.dm b/code/modules/mob/observer/freelook/eye.dm deleted file mode 100644 index 20d470b2ff09a..0000000000000 --- a/code/modules/mob/observer/freelook/eye.dm +++ /dev/null @@ -1,136 +0,0 @@ -// EYE -// -// A mob that another mob controls to look around the station with. -// It streams chunks as it moves around, which will show it what the controller can and cannot see. - -/mob/observer/eye - name = "Eye" - var/name_sufix = "Eye" - icon = 'icons/mob/eye.dmi' - icon_state = "default-eye" - - var/sprint = 10 - var/cooldown = 0 - var/acceleration = 1 - var/owner_follows_eye = 0 - - see_in_dark = 7 - invisibility = INVISIBILITY_EYE - - ghost_image_flag = GHOST_IMAGE_ALL - var/mob/owner = null - var/list/visibleChunks = list() - - var/datum/visualnet/visualnet - -/mob/observer/eye/Destroy() - release(owner) - owner = null - visualnet = null - . = ..() - -/mob/observer/eye/Move(n, direct) - if(owner == src) - return EyeMove(direct) - return 0 - -/mob/observer/eye/facedir(var/ndir) - if(!canface()) - return 0 - set_dir(ndir) - return 1 - -/mob/observer/eye/examinate() - set popup_menu = 0 - set src = usr.contents - return 0 - -/mob/observer/eye/pointed() - set popup_menu = 0 - set src = usr.contents - return 0 - -/mob/observer/eye/examine(mob/user) - return TRUE - -/mob/observer/eye/proc/possess(var/mob/user) - if(owner && owner != user) - return - if(owner && owner.eyeobj != src) - return - owner = user - owner.eyeobj = src - SetName("[owner.name] ([name_sufix])") // Update its name - if(owner.client) - owner.client.eye = src - setLoc(owner) - visualnet.update_eye_chunks(src, TRUE) - -/mob/observer/eye/proc/release(var/mob/user) - if(owner != user || !user) - return - if(owner.eyeobj != src) - return - visualnet.remove_eye(src) - owner.eyeobj = null - owner = null - SetName(initial(name)) - -// Use this when setting the eye's location. -// It will also stream the chunk that the new loc is in. -/mob/observer/eye/proc/setLoc(var/T) - if(!owner) - return FALSE - - T = get_turf(T) - if(!T || T == loc) - return FALSE - - forceMove(T) - - if(owner.client) - owner.client.eye = src - if(owner_follows_eye) - owner.forceMove(loc) - - visualnet.update_eye_chunks(src) - return TRUE - -/mob/observer/eye/proc/getLoc() - if(owner) - if(!isturf(owner.loc) || !owner.client) - return - return loc - -/mob - var/mob/observer/eye/eyeobj - -/mob/proc/EyeMove(n, direct) - if(!eyeobj) - return - - return eyeobj.EyeMove(n, direct) - -/mob/observer/eye/EyeMove(direct) - var/initial = initial(sprint) - var/max_sprint = 50 - - if(cooldown && cooldown < world.time) - sprint = initial - - for(var/i = 0; i < max(sprint, initial); i += 20) - var/turf/step = get_turf(get_step(src, direct)) - if(step) - //We do this specifically as they have special conditions - if(direct == UP && !HasAbove(z)) - return FALSE - if(direct == DOWN && !HasBelow(z)) - return FALSE - setLoc(step) - - cooldown = world.time + 5 - if(acceleration) - sprint = min(sprint + 0.5, max_sprint) - else - sprint = initial - return TRUE \ No newline at end of file diff --git a/code/modules/mob/observer/freelook/following.dm b/code/modules/mob/observer/freelook/following.dm deleted file mode 100644 index 36bf97fe4a38e..0000000000000 --- a/code/modules/mob/observer/freelook/following.dm +++ /dev/null @@ -1,16 +0,0 @@ -/mob/observer/eye/stop_following() - if(following && owner) - to_chat(owner, "Stopped following \the [following]") - ..() - -/mob/observer/eye/start_following(var/atom/a) - ..() - if(owner) - to_chat(owner, "Now following \the [a]") - -/mob/observer/eye/keep_following(var/atom/movable/moving_instance, var/atom/old_loc, var/atom/new_loc) - setLoc(get_turf(new_loc)) - -/mob/observer/eye/EyeMove() - stop_following() - . = ..() \ No newline at end of file diff --git a/code/modules/mob/observer/freelook/life.dm b/code/modules/mob/observer/freelook/life.dm deleted file mode 100644 index 1ef0ca92a5d3a..0000000000000 --- a/code/modules/mob/observer/freelook/life.dm +++ /dev/null @@ -1,7 +0,0 @@ -/mob/observer/eye/Life() - ..() - // If we lost our client, reset the list of visible chunks so they update properly on return - if(owner == src && !client) - visibleChunks.Cut() - /*else if(owner && !owner.client) - visibleChunks.Cut()*/ diff --git a/code/modules/mob/observer/freelook/logging.dm b/code/modules/mob/observer/freelook/logging.dm deleted file mode 100644 index c240717997af1..0000000000000 --- a/code/modules/mob/observer/freelook/logging.dm +++ /dev/null @@ -1,5 +0,0 @@ -/datum/chunk/proc/log_visualnet(var/message, var/datum/source) - visualnet.log_visualnet("[src] ([x]-[y]-[z]) - [message]", source) - -/datum/visualnet/proc/log_visualnet(var/message, var/datum/source) - log_debug("[src] - [message]: [istype(source) ? "[source] ([source.type])" : (source ? source : "NULL") ]") diff --git a/code/modules/mob/observer/freelook/read_me.dm b/code/modules/mob/observer/freelook/read_me.dm deleted file mode 100644 index 380a3e0171eeb..0000000000000 --- a/code/modules/mob/observer/freelook/read_me.dm +++ /dev/null @@ -1,51 +0,0 @@ -// CREDITS -/* - Initial code credit for this goes to Uristqwerty. - Debugging, functionality, all comments and porting by Giacom. - - Everything about freelook (or what we can put in here) will be stored here. - - - WHAT IS THIS? - - This is a replacement for the current camera movement system, of the AI. Before this, the AI had to move between cameras and could - only see what the cameras could see. Not only this but the cameras could see through walls, which created problems. - With this, the AI controls an "AI Eye" mob, which moves just like a ghost; such as moving through walls and being invisible to players. - The AI's eye is set to this mob and then we use a system (explained below) to determine what the cameras around the AI Eye can and - cannot see. If the camera cannot see a turf, it will black it out, otherwise it won't and the AI will be able to see it. - This creates several features, such as.. no more see-through-wall cameras, easier to control camera movement, easier tracking, - the AI only being able to track mobs which are visible to a camera, only trackable mobs appearing on the mob list and many more. - - - HOW IT WORKS - - It works by first creating a camera network datum. Inside of this camera network are "chunks" (which will be - explained later) and "cameras". The cameras list is kept up to date by obj/machinery/camera/New() and Destroy(). - - Next the camera network has chunks. These chunks are a 16x16 tile block of turfs and cameras contained inside the chunk. - These turfs are then sorted out based on what the cameras can and cannot see. If none of the cameras can see the turf, inside - the 16x16 block, it is listed as an "obscured" turf. Meaning the AI won't be able to see it. - - - HOW IT UPDATES - - The camera network uses a streaming method in order to effeciently update chunks. Since the server will have doors opening, doors closing, - turf being destroyed and other lag inducing stuff, we want to update it under certain conditions and not every tick. - - The chunks are not created straight away, only when an AI eye moves into it's area is when it gets created. - One a chunk is created, when a non glass door opens/closes or an opacity turf is destroyed, we check to see if an AI Eye is looking in the area. - We do this with the "seenby" list, which updates everytime an AI is near a chunk. If there is an AI eye inside the area, we update the chunk - that the changed atom is inside and all surrounding chunks, since a camera's vision could leak onto another chunk. If there is no AI Eye, we instead - flag the chunk to update whenever it is loaded by an AI Eye. This is basically how the chunks update and keep it in sync. We then add some lag reducing - measures, such as an UPDATE_BUFFER which stops a chunk from updating too many times in a certain time-frame, only updating if the changed atom was blocking - sight; for example, we don't update glass airlocks or floors. - - - WHERE IS EVERYTHING? - - cameranet.dm = Everything about the cameranet datum. - chunk.dm = Everything about the chunk datum. - eye.dm = Everything about the AI and the AIEye. - updating.dm = Everything about triggers that will update chunks. - -*/ \ No newline at end of file diff --git a/code/modules/mob/observer/freelook/update_triggers.dm b/code/modules/mob/observer/freelook/update_triggers.dm deleted file mode 100644 index 635879d3d3875..0000000000000 --- a/code/modules/mob/observer/freelook/update_triggers.dm +++ /dev/null @@ -1,26 +0,0 @@ -//UPDATE TRIGGERS, when the chunk (and the surrounding chunks) should update. - -// TURFS - -/proc/updateVisibility(atom/A, var/opacity_check = 1) - if(GAME_STATE >= RUNLEVEL_GAME) - for(var/datum/visualnet/VN in visual_nets) - VN.update_visibility(A, opacity_check) - -/turf/drain_power() - return -1 - -/atom/Destroy() - if(opacity) - updateVisibility(src) - . = ..() - -// DOORS - -// Simply updates the visibility of the area when it opens/closes/destroyed. -/obj/machinery/door/update_nearby_tiles(need_rebuild) - . = ..(need_rebuild) - // Glass door glass = 1 - // don't check then? - if(!glass) - updateVisibility(src, FALSE) diff --git a/code/modules/mob/observer/freelook/visualnet.dm b/code/modules/mob/observer/freelook/visualnet.dm deleted file mode 100644 index d51a37d2bddc9..0000000000000 --- a/code/modules/mob/observer/freelook/visualnet.dm +++ /dev/null @@ -1,186 +0,0 @@ -// VISUAL NET -// -// The datum containing all the chunks. - -/datum/visualnet - // The chunks of the map, mapping the areas that an object can see. - var/list/chunks = list() - var/list/sources = list() - var/chunk_type = /datum/chunk - var/list/valid_source_types - -/datum/visualnet/New() - ..() - visual_nets += src - if(!valid_source_types) - valid_source_types = list() - -/datum/visualnet/Destroy() - visual_nets -= src - for(var/source in sources) - remove_source(source, FALSE) - sources.Cut() - for(var/chunk in chunks) - var/chunk_datum = chunks[chunk] - qdel(chunk_datum) - chunks.Cut() - . = ..() - -// Checks if a chunk has been Generated in x, y, z. -/datum/visualnet/proc/is_chunk_generated(x, y, z) - x &= ~0xf - y &= ~0xf - var/key = "[x],[y],[z]" - return !isnull(chunks[key]) - -// Returns the chunk in the x, y, z. -// If there is no chunk, it creates a new chunk and returns that. -/datum/visualnet/proc/get_chunk(x, y, z) - x &= ~0xf - y &= ~0xf - var/key = "[x],[y],[z]" - if(!chunks[key]) - chunks[key] = new chunk_type(src, x, y, z) - - return chunks[key] - -// Updates what the eye can see. It is recommended you use this when the eye moves or its location is set. - -/datum/visualnet/proc/update_eye_chunks(mob/observer/eye/eye, var/full_update = FALSE) - . = list() - var/turf/T = get_turf(eye) - if(T) - // 0xf = 15 - var/x1 = max(0, T.x - 16) & ~0xf - var/y1 = max(0, T.y - 16) & ~0xf - var/x2 = min(world.maxx, T.x + 16) & ~0xf - var/y2 = min(world.maxy, T.y + 16) & ~0xf - - for(var/x = x1; x <= x2; x += 16) - for(var/y = y1; y <= y2; y += 16) - . += get_chunk(x, y, T.z) - - if(full_update) - eye.visibleChunks.Cut() - - var/list/remove = eye.visibleChunks - . - var/list/add = . - eye.visibleChunks - - for(var/chunk in remove) - var/datum/chunk/c = chunk - c.remove_eye(eye) - - for(var/chunk in add) - var/datum/chunk/c = chunk - c.add_eye(eye) - -/datum/visualnet/proc/remove_eye(mob/observer/eye/eye) - for(var/chunk in eye.visibleChunks) - var/datum/chunk/c = chunk - c.remove_eye(eye) - -// Updates the chunks that the turf is located in. Use this when obstacles are destroyed or when doors open. - -/datum/visualnet/proc/update_visibility(atom/A, var/opacity_check = TRUE) - if((GAME_STATE < RUNLEVEL_GAME) || (opacity_check && !A.opacity)) - return - major_chunk_change(A) - -/datum/visualnet/proc/update_visibility_nocheck(atom/A) - update_visibility(A, FALSE) - -// Will check if an atom is on a viewable turf. Returns 1 if it is, otherwise returns 0. -/datum/visualnet/proc/is_visible(var/atom/target) - // 0xf = 15 - var/turf/position = get_turf(target) - return position && is_turf_visible(position) - -/datum/visualnet/proc/is_turf_visible(var/turf/position) - if(!position) - return FALSE - var/datum/chunk/chunk = get_chunk(position.x, position.y, position.z) - if(chunk) - if(chunk.dirty) - chunk.update(TRUE) // Update now, no matter if it's visible or not. - if(position in chunk.visibleTurfs) - return TRUE - return FALSE - -// Never access this proc directly!!!! -// This will update the chunk and all the surrounding chunks. -/datum/visualnet/proc/major_chunk_change(var/atom/source) - for_all_chunks_in_range(source, /datum/chunk/proc/visibility_changed, list()) - -/datum/visualnet/proc/add_source(var/atom/source, var/update_visibility = TRUE, var/opacity_check = FALSE) - if(!(source && is_type_in_list(source, valid_source_types))) - log_visualnet("Was given an unhandled source", source) - return FALSE - if(source in sources) - return FALSE - sources += source - GLOB.moved_event.register(source, src, /datum/visualnet/proc/source_moved) - GLOB.destroyed_event.register(source, src, /datum/visualnet/proc/remove_source) - for_all_chunks_in_range(source, /datum/chunk/proc/add_source, list(source)) - if(update_visibility) - update_visibility(source, opacity_check) - return TRUE - -/datum/visualnet/proc/remove_source(var/atom/source, var/update_visibility = TRUE, var/opacity_check = FALSE) - if(!sources.Remove(source)) - return FALSE - - GLOB.moved_event.unregister(source, src, /datum/visualnet/proc/source_moved) - GLOB.destroyed_event.unregister(source, src, /datum/visualnet/proc/remove_source) - for_all_chunks_in_range(source, /datum/chunk/proc/remove_source, list(source)) - if(update_visibility) - update_visibility(source, opacity_check) - return TRUE - -/datum/visualnet/proc/source_moved(var/atom/movable/source, var/old_loc, var/new_loc) - var/turf/old_turf = get_turf(old_loc) - var/turf/new_turf = get_turf(new_loc) - - if(old_turf == new_turf) - return - - // A more proper way would be to figure out which chunks have gone out of range, and which have come into range - // and only remove/add to those. - if(old_turf) - for_all_chunks_in_range(source, /datum/chunk/proc/remove_source, list(source), old_turf) - if(new_turf) - for_all_chunks_in_range(source, /datum/chunk/proc/add_source, list(source), new_turf) - -/datum/visualnet/proc/for_all_chunks_in_range(var/atom/source, var/proc_call, var/list/proc_args, var/turf/T) - T = T ? T : get_turf(source) - if(!T) - return - - var/x1 = max(0, T.x - 8) & ~0xf - var/y1 = max(0, T.y - 8) & ~0xf - var/x2 = min(world.maxx, T.x + 8) & ~0xf - var/y2 = min(world.maxy, T.y + 8) & ~0xf - - for(var/x = x1; x <= x2; x += 16) - for(var/y = y1; y <= y2; y += 16) - if(is_chunk_generated(x, y, T.z)) - var/datum/chunk/c = get_chunk(x, y, T.z) - call(c, proc_call)(arglist(proc_args)) - -// Debug verb for VVing the chunk that the turf is in. -/turf/proc/view_chunk() - set name = "View Chunk" - set category = "Debug" - set src in world - - if(cameranet.is_chunk_generated(x, y, z)) - var/datum/chunk/chunk = cameranet.get_chunk(x, y, z) - usr.client.debug_variables(chunk) - -/turf/proc/update_chunk() - set name = "Update Chunk" - set category = "Debug" - set src in world - - if(cameranet.is_chunk_generated(x, y, z)) - var/datum/chunk/chunk = cameranet.get_chunk(x, y, z) - chunk.visibility_changed(TRUE) diff --git a/code/modules/mob/observer/ghost/follow.dm b/code/modules/mob/observer/ghost/follow.dm deleted file mode 100644 index 237f7f140512b..0000000000000 --- a/code/modules/mob/observer/ghost/follow.dm +++ /dev/null @@ -1,37 +0,0 @@ -/datum/proc/extra_ghost_link(var/prefix, var/sufix, var/short_links) - return list() - -/atom/movable/extra_ghost_link(var/atom/ghost, var/prefix, var/sufix, var/short_links) - if(src == ghost) - return list() - return list(create_ghost_link(ghost, src, short_links ? "F" : "Follow", prefix, sufix)) - -/client/extra_ghost_link(var/atom/ghost, var/prefix, var/sufix, var/short_links) - return mob.extra_ghost_link(ghost, prefix, sufix, short_links) - -/mob/extra_ghost_link(var/atom/ghost, var/prefix, var/sufix, var/short_links) - . = ..() - if(client && eyeobj) - . += create_ghost_link(ghost, eyeobj, short_links ? "E" : "Eye", prefix, sufix) - -/mob/observer/ghost/extra_ghost_link(var/atom/ghost, var/prefix, var/sufix, var/short_links) - . = ..() - if(mind && (mind.current && !isghost(mind.current))) - . += create_ghost_link(ghost, mind.current, short_links ? "B" : "Body", prefix, sufix) - -/proc/create_ghost_link(var/ghost, var/target, var/text, var/prefix, var/sufix) - return "[prefix][text][sufix]" - -/datum/proc/get_ghost_follow_link(var/atom/target, var/delimiter, var/prefix, var/sufix) - return - -/client/get_ghost_follow_link(var/atom/target, var/delimiter, var/prefix, var/sufix) - return mob.get_ghost_follow_link(target, delimiter, prefix, sufix) - -/mob/observer/ghost/get_ghost_follow_link(var/atom/target, var/delimiter, var/prefix, var/sufix) - var/short_links = get_preference_value(/datum/client_preference/ghost_follow_link_length) == GLOB.PREF_SHORT - return ghost_follow_link(target, src, delimiter, prefix, sufix, short_links) - -/proc/ghost_follow_link(var/atom/target, var/atom/ghost, var/delimiter = "|", var/prefix = "", var/sufix = "", var/short_links = TRUE) - if((!target) || (!ghost)) return - return jointext(target.extra_ghost_link(ghost, prefix, sufix, short_links),delimiter) diff --git a/code/modules/mob/observer/ghost/ghost.dm b/code/modules/mob/observer/ghost/ghost.dm deleted file mode 100644 index 41a03a7bcf1d0..0000000000000 --- a/code/modules/mob/observer/ghost/ghost.dm +++ /dev/null @@ -1,564 +0,0 @@ -var/global/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 -var/global/list/image/ghost_sightless_images = list() //this is a list of images for things ghosts should still be able to see even without ghost sight - -/mob/observer/ghost - name = "ghost" - desc = "It's a g-g-g-g-ghooooost!" //jinkies! - icon = 'icons/mob/mob.dmi' - icon_state = "ghost" - appearance_flags = DEFAULT_APPEARANCE_FLAGS | KEEP_TOGETHER - blinded = 0 - anchored = TRUE // don't get pushed around - universal_speak = TRUE - - mob_flags = MOB_FLAG_HOLY_BAD - movement_handlers = list(/datum/movement_handler/mob/multiz_connected, /datum/movement_handler/mob/incorporeal) - - var/is_manifest = FALSE - var/next_visibility_toggle = 0 - var/can_reenter_corpse - var/bootime = 0 - var/started_as_observer //This variable is set to 1 when you enter the game as an observer. - //If you died in the game and are a ghost - this will remain as null. - //Note that this is not a reliable way to determine if admins started as observers, since they change mobs a lot. - var/has_enabled_antagHUD = 0 - var/medHUD = 0 - var/antagHUD = 0 - var/admin_ghosted = 0 - var/anonsay = 0 - var/ghostvision = 1 //is the ghost able to see things humans can't? - var/seedarkness = 1 - - var/obj/item/device/multitool/ghost_multitool - var/list/hud_images // A list of hud images - -/mob/observer/ghost/New(mob/body) - see_in_dark = 100 - verbs += /mob/proc/toggle_antag_pool - - var/turf/T - if(ismob(body)) - T = get_turf(body) //Where is the body located? - attack_logs_ = body.attack_logs_ //preserve our attack logs by copying them to our ghost - - set_appearance(body) - if(body.mind && body.mind.name) - name = body.mind.name - else - if(body.real_name) - name = body.real_name - else - if(gender == MALE) - name = capitalize(pick(GLOB.first_names_male)) + " " + capitalize(pick(GLOB.last_names)) - else - name = capitalize(pick(GLOB.first_names_female)) + " " + capitalize(pick(GLOB.last_names)) - - mind = body.mind //we don't transfer the mind but we keep a reference to it. - else - spawn(10) // wait for the observer mob to receive the client's key - mind = new /datum/mind(key) - mind.current = src - if(!T) T = pick(GLOB.latejoin | GLOB.latejoin_cryo | GLOB.latejoin_gateway) //Safety in case we cannot find the body's position - forceMove(T) - - if(!name) //To prevent nameless ghosts - name = capitalize(pick(GLOB.first_names_male)) + " " + capitalize(pick(GLOB.last_names)) - real_name = name - - if(GLOB.cult) - GLOB.cult.add_ghost_magic(src) - - ghost_multitool = new(src) - - GLOB.ghost_mob_list += src - - ..() - -/mob/observer/ghost/Destroy() - GLOB.ghost_mob_list -= src - stop_following() - qdel(ghost_multitool) - ghost_multitool = null - if(hud_images) - for(var/image/I in hud_images) - show_hud_icon(I.icon_state, FALSE) - hud_images = null - return ..() - -/mob/observer/ghost/OnSelfTopic(href_list, topic_status) - if (topic_status == STATUS_INTERACTIVE) - if (href_list["track"]) - if(istype(href_list["track"],/mob)) - var/mob/target = locate(href_list["track"]) in SSmobs.mob_list - if(target) - start_following(target) - else - var/atom/target = locate(href_list["track"]) - if(istype(target)) - start_following(target) - return TOPIC_HANDLED - return ..() - -/* -Transfer_mind is there to check if mob is being deleted/not going to have a body. -Works together with spawning an observer, noted above. -*/ - -/mob/observer/ghost/Life() - ..() - if(!loc) return - if(!client) return 0 - - handle_hud_glasses() - - if(antagHUD) - var/list/target_list = list() - for(var/mob/living/target in oview(src, 14)) - if(target.mind && target.mind.special_role) - target_list += target - if(target_list.len) - assess_targets(target_list, src) - if(medHUD) - process_medHUD(src) - - -/mob/observer/ghost/proc/process_medHUD(var/mob/M) - var/client/C = M.client - for(var/mob/living/carbon/human/patient in oview(M, 14)) - C.images += patient.hud_list[HEALTH_HUD] - C.images += patient.hud_list[STATUS_HUD_OOC] - -/mob/observer/ghost/proc/assess_targets(list/target_list, mob/observer/ghost/U) - var/client/C = U.client - for(var/mob/living/carbon/human/target in target_list) - C.images += target.hud_list[SPECIALROLE_HUD] - for(var/mob/living/silicon/target in target_list) - C.images += target.hud_list[SPECIALROLE_HUD] - return 1 - -/mob/proc/ghostize(var/can_reenter_corpse = CORPSE_CAN_REENTER) - // Are we the body of an aghosted admin? If so, don't make a ghost. - if(teleop && istype(teleop, /mob/observer/ghost)) - var/mob/observer/ghost/G = teleop - if(G.admin_ghosted) - return - if(key) - hide_fullscreens() - var/mob/observer/ghost/ghost = new(src) //Transfer safety to observer spawning proc. - ghost.can_reenter_corpse = can_reenter_corpse - ghost.timeofdeath = src.stat == DEAD ? src.timeofdeath : world.time - ghost.key = key - if(ghost.client && !ghost.client.holder && !config.antag_hud_allowed) // For new ghosts we remove the verb from even showing up if it's not allowed. - ghost.verbs -= /mob/observer/ghost/verb/toggle_antagHUD // Poor guys, don't know what they are missing! - return ghost - -/mob/observer/ghostize() // Do not create ghosts of ghosts. - -/* -This is the proc mobs get to turn into a ghost. Forked from ghostize due to compatibility issues. -*/ -/mob/living/verb/ghost() - set category = "OOC" - set name = "Ghost" - set desc = "Relinquish your life and enter the land of the dead." - - if(stat == DEAD) - announce_ghost_joinleave(ghostize(1)) - else - var/response - if(src.client && src.client.holder) - response = alert(src, "You have the ability to Admin-Ghost. The regular Ghost verb will announce your presence to dead chat. Both variants will allow you to return to your body using 'aghost'.\n\nWhat do you wish to do?", "Are you sure you want to ghost?", "Ghost", "Admin Ghost", "Stay in body") - if(response == "Admin Ghost") - if(!src.client) - return - src.client.admin_ghost() - else if(config.respawn_delay) - response = alert(src, "Are you -sure- you want to ghost?\n(You are alive. If you ghost, you won't be able to play this round for another [config.respawn_delay] minute\s! You can't change your mind so choose wisely!)", "Are you sure you want to ghost?", "Ghost", "Stay in body") - else - response = alert(src, "Are you -sure- you want to ghost?\n(You are alive. If you ghost, you won't be able to return to this body! You can't change your mind so choose wisely!)", "Are you sure you want to ghost?", "Ghost", "Stay in body") - if(response != "Ghost") - return - log_and_message_admins("has ghosted.") - ghosted = TRUE - var/mob/observer/ghost/ghost = ghostize(0) //0 parameter is so we can never re-enter our body, "Charlie, you can never come baaaack~" :3 - if (ghost) - ghost.timeofdeath = world.time // Because the living mob won't have a time of death and we want the respawn timer to work properly. - announce_ghost_joinleave(ghost) - -/mob/observer/ghost/can_use_hands() return 0 -/mob/observer/ghost/is_active() return 0 - -/mob/observer/ghost/Stat() - . = ..() - if(statpanel("Status")) - if(evacuation_controller) - var/eta_status = evacuation_controller.get_status_panel_eta() - if(eta_status) - stat(null, eta_status) - -/mob/observer/ghost/verb/reenter_corpse() - set category = "Ghost" - set name = "Re-enter Corpse" - if(!client) return - if(!(mind && mind.current && can_reenter_corpse)) - to_chat(src, "You have no body.") - return - if(mind.current.key && copytext_char(mind.current.key,1,2)!="@") //makes sure we don't accidentally kick any clients - to_chat(src, "Another consciousness is in your body... it is resisting you.") - return - stop_following() - mind.current.key = key - mind.current.teleop = null - mind.current.reload_fullscreen() - if(!admin_ghosted) - announce_ghost_joinleave(mind, 0, "They now occupy their body again.") - return 1 - -/mob/observer/ghost/verb/toggle_medHUD() - set category = "Ghost" - set name = "Toggle MedicHUD" - set desc = "Toggles Medical HUD, allowing you to see how everyone is doing." - if(!client) - return - if(medHUD) - medHUD = 0 - to_chat(src, "Medical HUD Disabled") - else - medHUD = 1 - to_chat(src, "Medical HUD Enabled") - -/mob/observer/ghost/verb/toggle_antagHUD() - set category = "Ghost" - set name = "Toggle AntagHUD" - set desc = "Toggles AntagHUD, allowing you to see who is the antagonist." - - if(!client) - return - if(!config.antag_hud_allowed && !client.holder) - to_chat(src, SPAN_WARNING("Admins have disabled this for this round")) - return - var/mob/observer/ghost/M = src - if(jobban_isbanned(M, "AntagHUD")) - to_chat(src, SPAN_WARNING("You have been banned from using this feature")) - return - if(config.antag_hud_restricted && !M.has_enabled_antagHUD && !client.holder) - var/response = alert(src, "If you turn this on, you will not be able to take any part in the round.","Are you sure you want to turn this feature on?","Yes","No") - if(response == "No") return - M.can_reenter_corpse = 0 - if(!M.has_enabled_antagHUD && !client.holder) - M.has_enabled_antagHUD = 1 - if(M.antagHUD) - M.antagHUD = 0 - to_chat(src, SPAN_NOTICE("AntagHUD Disabled")) - else - M.antagHUD = 1 - to_chat(src, SPAN_NOTICE("AntagHUD Enabled")) - -/mob/observer/ghost/verb/dead_tele(A in area_repository.get_areas_by_z_level()) - set category = "Ghost" - set name = "Teleport" - set desc= "Teleport to a location" - - var/area/thearea = area_repository.get_areas_by_z_level()[A] - if(!thearea) - to_chat(src, "No area available.") - return - - var/list/area_turfs = get_area_turfs(thearea, shall_check_if_holy() ? list(/proc/is_not_holy_turf) : list()) - if(!area_turfs.len) - to_chat(src, "This area has been entirely made into sacred grounds, you cannot enter it while you are in this plane of existence!") - return - - ghost_to_turf(pick(area_turfs)) - -/mob/observer/ghost/verb/dead_tele_coord(tx as num, ty as num, tz as num) - set category = "Ghost" - set name = "Teleport to Coordinate" - set desc= "Teleport to a coordinate" - - var/turf/T = locate(tx, ty, tz) - if(T) - ghost_to_turf(T) - else - to_chat(src, "Invalid coordinates.") -/mob/observer/ghost/verb/follow(var/datum/follow_holder/fh in get_follow_targets()) - set category = "Ghost" - set name = "Follow" - set desc = "Follow and haunt a mob." - - if(!fh.show_entry()) return - start_following(fh.followed_instance) - -/mob/observer/ghost/proc/ghost_to_turf(var/turf/target_turf) - if(check_is_holy_turf(target_turf)) - to_chat(src, "The target location is holy grounds!") - return - stop_following() - forceMove(target_turf) - -/mob/observer/ghost/start_following(var/atom/a) - ..() - to_chat(src, "Now following \the [following].") - -/mob/observer/ghost/stop_following() - if(following) - to_chat(src, "No longer following \the [following]") - ..() - -/mob/observer/ghost/keep_following(var/atom/movable/am, var/old_loc, var/new_loc) - var/turf/T = get_turf(new_loc) - if(check_is_holy_turf(T)) - to_chat(src, "You cannot follow something standing on holy grounds!") - return - ..() - -/mob/observer/ghost/StoreMemory() - set hidden = 1 - to_chat(src, "You are dead! You have no mind to store memory!") - -/mob/observer/ghost/AddMemory() - set hidden = 1 - to_chat(src, "You are dead! You have no mind to store memory!") -/mob/observer/ghost/PostIncorporealMovement() - stop_following() - -/mob/observer/ghost/verb/analyze_air() - set name = "Analyze Air" - set category = "Ghost" - - var/turf/t = get_turf(src) - if(t) - print_atmos_analysis(src, atmosanalyzer_scan(t)) - -/mob/observer/ghost/verb/check_radiation() - set name = "Check Radiation" - set category = "Ghost" - - var/turf/t = get_turf(src) - if(t) - var/rads = SSradiation.get_rads_at_turf(t) - to_chat(src, "Radiation level: [rads ? rads : "0"] IU/s.") - -/mob/observer/ghost/verb/scan_target() - set name = "Scan Target" - set category = "Ghost" - set desc = "Analyse whatever you are following." - - if(ishuman(following)) - to_chat(src, medical_scan_results(following, 1, SKILL_MAX)) - - else to_chat(src, "Not a scannable target.") - -/mob/observer/ghost/verb/become_mouse() - set name = "Become mouse" - set category = "Ghost" - - if(config.disable_player_mice) - to_chat(src, "Spawning as a mouse is currently disabled.") - return - - if(!MayRespawn(1, ANIMAL_SPAWN_DELAY)) - return - - var/turf/T = get_turf(src) - if(!T || (T.z in GLOB.using_map.admin_levels)) - to_chat(src, "You may not spawn as a mouse on this Z-level.") - return - - var/response = alert(src, "Are you -sure- you want to become a mouse?","Are you sure you want to squeek?","Squeek!","Nope!") - if(response != "Squeek!") return //Hit the wrong key...again. - - - //find a viable mouse candidate - var/mob/living/simple_animal/passive/mouse/host - var/obj/machinery/atmospherics/unary/vent_pump/vent_found - var/list/found_vents = list() - for(var/obj/machinery/atmospherics/unary/vent_pump/v in SSmachines.machinery) - if(!v.welded && v.z == T.z) - found_vents.Add(v) - if(found_vents.len) - vent_found = pick(found_vents) - host = new /mob/living/simple_animal/passive/mouse(vent_found.loc) - else - to_chat(src, "Unable to find any unwelded vents to spawn mice at.") - if(host) - if(config.uneducated_mice) - host.universal_understand = FALSE - announce_ghost_joinleave(src, 0, "They are now a mouse.") - host.ckey = src.ckey - host.status_flags |= NO_ANTAG - to_chat(host, "You are now a mouse. Try to avoid interaction with players, and do not give hints away that you are more than a simple rodent.") -/mob/observer/ghost/verb/view_manfiest() - set name = "Show Crew Manifest" - set category = "Ghost" - - var/dat - dat += "

              Crew Manifest

              " - dat += html_crew_manifest() - - show_browser(src, dat, "window=manifest;size=370x420;can_close=1") - -//This is called when a ghost is drag clicked to something. -/mob/observer/ghost/MouseDrop(atom/over) - if(!usr || !over) return - if(isghost(usr) && usr.client && isliving(over)) - var/mob/living/M = over - // If they an admin, see if control can be resolved. - if(usr.client.holder && usr.client.holder.cmd_ghost_drag(src,M)) - return - // Otherwise, see if we can possess the target. - if(usr == src && try_possession(M)) - return - if(istype(over, /obj/machinery/drone_fabricator)) - if(try_drone_spawn(src, over)) - return - - return ..() - -/mob/observer/ghost/proc/try_possession(var/mob/living/M) - if(!config.ghosts_can_possess_animals) - to_chat(src, "Ghosts are not permitted to possess animals.") - return 0 - if(!M.can_be_possessed_by(src)) - return 0 - return M.do_possession(src) - -/mob/observer/ghost/pointed(atom/A as mob|obj|turf in view()) - if(!..()) - return 0 - usr.visible_message("[src] points to [A]") - return 1 - -/mob/observer/ghost/proc/show_hud_icon(var/icon_state, var/make_visible) - if(!hud_images) - hud_images = list() - var/image/hud_image = hud_images[icon_state] - if(!hud_image) - hud_image = image('icons/mob/mob.dmi', loc = src, icon_state = icon_state) - hud_images[icon_state] = hud_image - - if(make_visible) - add_client_image(hud_image) - else - remove_client_image(hud_image) - -/mob/observer/ghost/canface() - return 1 - -/mob/proc/can_admin_interact() - return 0 - -/mob/observer/ghost/can_admin_interact() - return check_rights(R_ADMIN, 0, src) - -/mob/observer/ghost/verb/toggle_ghostsee() - set name = "Toggle Ghost Vision" - set desc = "Toggles your ability to see things only ghosts can see, like other ghosts" - set category = "Ghost" - ghostvision = !(ghostvision) - updateghostsight() - to_chat(src, "You [(ghostvision?"now":"no longer")] have ghost vision.") - -/mob/observer/ghost/verb/toggle_darkness() - set name = "Toggle Darkness" - set category = "Ghost" - seedarkness = !(seedarkness) - updateghostsight() - to_chat(src, "You [(seedarkness?"now":"no longer")] see darkness.") - -/mob/observer/ghost/proc/updateghostsight() - if (!seedarkness) - set_see_invisible(SEE_INVISIBLE_NOLIGHTING) - else - set_see_invisible(ghostvision ? SEE_INVISIBLE_OBSERVER : SEE_INVISIBLE_LIVING) - SSghost_images.queue_image_update(src) - -/mob/observer/ghost/proc/updateghostimages() - if (!client) - return - client.images -= ghost_sightless_images - client.images -= ghost_darkness_images - if(!seedarkness) - client.images |= ghost_sightless_images - if(ghostvision) - client.images |= ghost_darkness_images - else if(seedarkness && !ghostvision) - client.images |= ghost_sightless_images - client.images -= ghost_image //remove ourself - -/mob/observer/ghost/MayRespawn(var/feedback = 0, var/respawn_time = 0) - if(!client) - return 0 - if(mind && mind.current && mind.current.stat != DEAD && can_reenter_corpse == CORPSE_CAN_REENTER) - if(feedback) - to_chat(src, "Your non-dead body prevents you from respawning.") - return 0 - if(config.antag_hud_restricted && has_enabled_antagHUD == 1) - if(feedback) - to_chat(src, "antagHUD restrictions prevent you from respawning.") - return 0 - - var/timedifference = world.time - timeofdeath - if(!client.holder && respawn_time && timeofdeath && timedifference < respawn_time MINUTES) - var/timedifference_text = time2text(respawn_time MINUTES - timedifference,"mm:ss") - to_chat(src, "You must have been dead for [respawn_time] minute\s to respawn. You have [timedifference_text] left.") - return 0 - - return 1 - -/proc/isghostmind(var/datum/mind/player) - return player && !isnewplayer(player.current) && (!player.current || isghost(player.current) || (isliving(player.current) && player.current.stat == DEAD) || !player.current.client) - -/mob/proc/check_is_holy_turf(var/turf/T) - return 0 - -/mob/observer/ghost/check_is_holy_turf(var/turf/T) - if(shall_check_if_holy() && is_holy_turf(T)) - return TRUE - -/mob/observer/ghost/proc/shall_check_if_holy() - if(invisibility >= INVISIBILITY_OBSERVER) - return FALSE - if(check_rights(R_ADMIN|R_FUN, 0, src)) - return FALSE - return TRUE - -/mob/observer/ghost/proc/set_appearance(var/mob/target) - var/pre_alpha = alpha - var/pre_plane = plane - var/pre_layer = layer - var/pre_invis = invisibility - - appearance = target - appearance_flags |= initial(appearance_flags) - alpha = pre_alpha - plane = pre_plane - layer = pre_layer - set_invisibility(pre_invis) - ClearTransform() - - -/mob/observer/ghost/verb/respawn() - set name = "Respawn" - set category = "OOC" - - if (!(config.abandon_allowed)) - to_chat(usr, SPAN_WARNING("Respawn is disabled.")) - return - if (SSticker.mode) - if (SSticker.mode.deny_respawn) - to_chat(usr, SPAN_WARNING("Respawn is disabled for this roundtype.")) - return - else if (!MayRespawn(TRUE, config.respawn_delay)) - return - to_chat(usr, SPAN_NOTICE("You can respawn now, enjoy your new life!")) - to_chat(usr, SPAN_NOTICE("Make sure to play a different character, and please roleplay correctly!")) - announce_ghost_joinleave(client, 0) - - sound_to(src, sound(null)) - - var/mob/new_player/M = new /mob/new_player() - if (can_reenter_corpse != CORPSE_CAN_REENTER_AND_RESPAWN) - M.respawned_time = world.time - M.key = key - log_and_message_admins("has respawned.", M) diff --git a/code/modules/mob/observer/ghost/login.dm b/code/modules/mob/observer/ghost/login.dm deleted file mode 100644 index 5ac8d450d7a0d..0000000000000 --- a/code/modules/mob/observer/ghost/login.dm +++ /dev/null @@ -1,8 +0,0 @@ -/mob/observer/ghost/Login() - ..() - - if (ghost_image) - ghost_image.appearance = src - ghost_image.appearance_flags = DEFAULT_APPEARANCE_FLAGS | RESET_ALPHA - SSghost_images.queue_image_update(src) - change_light_colour(DARKTINT_GOOD) diff --git a/code/modules/mob/observer/ghost/logout.dm b/code/modules/mob/observer/ghost/logout.dm deleted file mode 100644 index 7c125cef367c1..0000000000000 --- a/code/modules/mob/observer/ghost/logout.dm +++ /dev/null @@ -1,5 +0,0 @@ -/mob/observer/ghost/Logout() - ..() - spawn(0) - if(src && !key) //we've transferred to another mob. This ghost should be deleted. - qdel(src) diff --git a/code/modules/mob/observer/ghost/say.dm b/code/modules/mob/observer/ghost/say.dm deleted file mode 100644 index f30f4a672c106..0000000000000 --- a/code/modules/mob/observer/ghost/say.dm +++ /dev/null @@ -1,2 +0,0 @@ -/mob/observer/ghost/say(var/message) - sanitize_and_communicate(/decl/communication_channel/dsay, client, message) diff --git a/code/modules/mob/observer/observer.dm b/code/modules/mob/observer/observer.dm deleted file mode 100644 index 003c6f42fbf95..0000000000000 --- a/code/modules/mob/observer/observer.dm +++ /dev/null @@ -1,84 +0,0 @@ -var/global/const/GHOST_IMAGE_NONE = 0 -var/global/const/GHOST_IMAGE_DARKNESS = 1 -var/global/const/GHOST_IMAGE_SIGHTLESS = 2 -var/global/const/GHOST_IMAGE_ALL = ~GHOST_IMAGE_NONE - -/mob/observer - density = FALSE - alpha = 127 - plane = OBSERVER_PLANE - invisibility = INVISIBILITY_OBSERVER - see_invisible = SEE_INVISIBLE_OBSERVER - sight = SEE_TURFS|SEE_MOBS|SEE_OBJS|SEE_SELF - simulated = FALSE - stat = DEAD - status_flags = GODMODE - var/ghost_image_flag = GHOST_IMAGE_DARKNESS - var/image/ghost_image = null //this mobs ghost image, for deleting and stuff - -/mob/observer/New() - ..() - ghost_image = image(src.icon,src) - ghost_image.plane = plane - ghost_image.layer = layer - ghost_image.appearance = src - ghost_image.appearance_flags = DEFAULT_APPEARANCE_FLAGS | RESET_ALPHA - if(ghost_image_flag & GHOST_IMAGE_DARKNESS) - ghost_darkness_images |= ghost_image //so ghosts can see the eye when they disable darkness - if(ghost_image_flag & GHOST_IMAGE_SIGHTLESS) - ghost_sightless_images |= ghost_image //so ghosts can see the eye when they disable ghost sight - SSghost_images.queue_global_image_update() - -/mob/observer/Destroy() - if (ghost_image) - ghost_darkness_images -= ghost_image - ghost_sightless_images -= ghost_image - qdel(ghost_image) - ghost_image = null - SSghost_images.queue_global_image_update() - . = ..() - -/mob/observer/check_airflow_movable() - return FALSE - -/mob/observer/CanPass() - return TRUE - -/mob/observer/dust() //observers can't be vaporised. - return - -/mob/observer/gib() //observers can't be gibbed. - return - -/mob/observer/is_blind() //Not blind either. - return - -/mob/observer/is_deaf() //Nor deaf. - return - -/mob/observer/set_stat() - stat = DEAD // They are also always dead - -/mob/observer/touch_map_edge() - if(z in GLOB.using_map.sealed_levels) - return - - var/new_x = x - var/new_y = y - - if(x <= TRANSITIONEDGE) - new_x = TRANSITIONEDGE + 1 - else if (x >= (world.maxx - TRANSITIONEDGE + 1)) - new_x = world.maxx - TRANSITIONEDGE - else if (y <= TRANSITIONEDGE) - new_y = TRANSITIONEDGE + 1 - else if (y >= (world.maxy - TRANSITIONEDGE + 1)) - new_y = world.maxy - TRANSITIONEDGE - - var/turf/T = locate(new_x, new_y, z) - if(T) - forceMove(T) - inertia_dir = 0 - throwing = null - to_chat(src, "You cannot move further in this direction.") - diff --git a/code/modules/mob/observer/virtual/_constants.dm b/code/modules/mob/observer/virtual/_constants.dm deleted file mode 100644 index 7d1b9eecf7f07..0000000000000 --- a/code/modules/mob/observer/virtual/_constants.dm +++ /dev/null @@ -1,4 +0,0 @@ -var/global/const/VIRTUAL_ABILITY_NONE = 0 -var/global/const/VIRTUAL_ABILITY_HEAR = 1 -var/global/const/VIRTUAL_ABILITY_SEE = 2 -var/global/const/VIRTUAL_ABILITY_ALL = (~VIRTUAL_ABILITY_NONE) diff --git a/code/modules/mob/observer/virtual/base.dm b/code/modules/mob/observer/virtual/base.dm deleted file mode 100644 index 2856ab71dbccc..0000000000000 --- a/code/modules/mob/observer/virtual/base.dm +++ /dev/null @@ -1,65 +0,0 @@ -var/global/list/all_virtual_listeners = list() - -/mob/observer/virtual - icon = 'icons/mob/virtual.dmi' - invisibility = INVISIBILITY_SYSTEM - see_in_dark = SEE_IN_DARK_DEFAULT - see_invisible = SEE_INVISIBLE_LIVING - sight = SEE_SELF - - virtual_mob = null - no_z_overlay = TRUE - - var/atom/movable/host - var/host_type = /atom/movable - var/abilities = VIRTUAL_ABILITY_HEAR|VIRTUAL_ABILITY_SEE - var/list/broadcast_methods - - var/static/list/overlay_icons - -/mob/observer/virtual/New(var/location, var/atom/movable/host) - ..() - if(!istype(host, host_type)) - CRASH("Received an unexpected host type. Expected [host_type], was [log_info_line(host)].") - src.host = host - GLOB.moved_event.register(host, src, /atom/movable/proc/move_to_turf_or_null) - - all_virtual_listeners += src - - update_icon() - -/mob/observer/virtual/Initialize() - . = ..() - STOP_PROCESSING_MOB(src) - -/mob/observer/virtual/Destroy() - GLOB.moved_event.unregister(host, src, /atom/movable/proc/move_to_turf_or_null) - all_virtual_listeners -= src - host = null - return ..() - -/mob/observer/virtual/on_update_icon() - if(!overlay_icons) - overlay_icons = list() - for(var/i_state in icon_states(icon)) - overlay_icons[i_state] = image(icon = icon, icon_state = i_state) - overlays.Cut() - - if(abilities & VIRTUAL_ABILITY_HEAR) - overlays += overlay_icons["hear"] - if(abilities & VIRTUAL_ABILITY_SEE) - overlays += overlay_icons["see"] - -/*********************** -* Virtual Mob Creation * -***********************/ -/atom/movable - var/mob/observer/virtual/virtual_mob - -/atom/movable/Initialize() - . = ..() - if(shall_have_virtual_mob()) - virtual_mob = new virtual_mob(get_turf(src), src) - -/atom/movable/proc/shall_have_virtual_mob() - return ispath(initial(virtual_mob)) diff --git a/code/modules/mob/observer/virtual/helpers.dm b/code/modules/mob/observer/virtual/helpers.dm deleted file mode 100644 index 7ef42be95acda..0000000000000 --- a/code/modules/mob/observer/virtual/helpers.dm +++ /dev/null @@ -1,106 +0,0 @@ -/* -* These calls could easily be setup to be a bunch of call()() with relevant procs and predicates but performance is a concern. -* BYOND is also a bit inflexible, as some predicates are of the sort /proc/name(host), others host.proc_name(), and some even do host.proc_name(parameter). -* Nothing that cannot be worked around, but it'd be a little messy. I miss C# lambdas... -*/ - -// Procs are arranged by "in range/hearers/viewers()" usage, as opposed to virtual mob hear/see abilities. -// Most of these procs can technically take any movable atom but unless they have a virtual mob the returned objects may not be the expected ones - -#define ACQUIRE_VIRTUAL_OR_TURF(A) A = (isvirtualmob(A) ? A : (((istype(A) && A.virtual_mob) ? A.virtual_mob : get_turf(A)))) ; if(!A) return -#define ACQUIRE_VIRTUAL_OR_RETURN(A) A = (isvirtualmob(A) ? A : (((istype(A) && A.virtual_mob) ? A.virtual_mob : null))) ; if(!A) return - -/**************** -* Range Helpers * -****************/ -/proc/clients_in_range(var/atom/movable/center_vmob) - . = list() - - ACQUIRE_VIRTUAL_OR_TURF(center_vmob) - for(var/mob/observer/virtual/v_mob in range(world.view, center_vmob)) - var/client/C = v_mob.get_client() - if(C) - . |= C - -/proc/hearers_in_range(var/atom/movable/center_vmob, var/hearing_range = world.view) - . = list() - - ACQUIRE_VIRTUAL_OR_TURF(center_vmob) - for(var/mob/observer/virtual/v_mob in range(hearing_range, center_vmob)) - if(v_mob.abilities & VIRTUAL_ABILITY_HEAR) - . |= v_mob.host - -/proc/viewers_in_range(var/atom/movable/center_vmob) - . = list() - - ACQUIRE_VIRTUAL_OR_TURF(center_vmob) - for(var/mob/observer/virtual/v_mob in range(world.view, center_vmob)) - if(v_mob.abilities & VIRTUAL_ABILITY_SEE) - . |= v_mob.host - -/*************** -* Hear Helpers * -***************/ -// A mob hears another mob if they have direct line of sight, ignoring turf luminosity. -// If there is an opaque object beteween the mobs then they cannot hear each other, even if their respective turfs can be seen. -// Thus, unlike viewing hearing is communicative. I.e. if Mob A can hear Mob B then Mob B can also hear Mob A. - -// Gets the hosts of all the virtual mobs that can hear the given movable atom (or rather, it's virtual mob or turf in that existence order) -/proc/all_hearers(var/atom/movable/heard_vmob, var/range = world.view) - . = list() - - ACQUIRE_VIRTUAL_OR_TURF(heard_vmob) - for(var/mob/observer/virtual/v_mob in hearers(range, heard_vmob)) - if(v_mob.abilities & VIRTUAL_ABILITY_HEAR) - . |= v_mob.host - -/*************** -* View Helpers * -***************/ -// A mob can see another mob if: -// * Within visual range, with the following differences for (N)PCs. -// * PCs: Target is within client.view range, with center originating from either the mob or client.eye depending on client.eye_perspective. -// * NPCs: Target is within world.view range, with center always originating from the mob. -// * Either of the following is true: -// * The target mob is in direct line of sight and not standing on a turf with luminosity = 0 unless the viewing mob is close enough for see_in_dark to also be in range -// * The viewing mob has the SEE_MOBS sight flag. - -// Gets the hosts of all virtual mobs that can see the given atom movable as well as its turf -/proc/all_viewers(var/mob/observer/virtual/viewed_atom) - . = list() - - viewed_atom = istype(viewed_atom) ? viewed_atom.host : viewed_atom - var/turf/T = get_turf(viewed_atom) - if(!T) - return - - for(var/mob/observer/virtual/seeing_v_mob in viewers(world.view, viewed_atom)) - if(!(seeing_v_mob.abilities & VIRTUAL_ABILITY_SEE)) - continue - var/atom/movable/host = seeing_v_mob.host - if(host.virtual_can_see_turf(T)) - . |= host - -// This proc returns all hosts of virtual mobs in the given atom's view range (using its turf), ignoring invisibility, VIRUAL_ABILITY_SEE, and most other restrictions. -// In most cases you actually want the all_* procs above. This helper was designed with LOOC in mind. -/proc/hosts_in_view_range(var/atom/movable/viewing_atom) - . = list() - - ACQUIRE_VIRTUAL_OR_TURF(viewing_atom) - // As per http://www.byond.com/docs/ref/info.html#/proc/view by using a non-mob/client this automatically skips the vast majority of sight checks - for(var/mob/observer/virtual/v_mob in viewers(world.view, get_turf(viewing_atom.loc))) - . |= v_mob.host - -/* - Misc. helper -*/ - -// Eye mobs technically see everything always, the owner just has an overlay applied, thus this helper -/atom/movable/proc/virtual_can_see_turf(var/turf/T) - return TRUE // We assume objects have already been filtered using viewers() or similar proc - -/mob/observer/eye/virtual_can_see_turf(var/turf/T) - return visualnet.is_turf_visible(T) - -#undef ACQUIRE_VIRTUAL_OR_TURF -#undef ACQUIRE_VIRTUAL_OR_RETURN diff --git a/code/modules/mob/observer/virtual/mob.dm b/code/modules/mob/observer/virtual/mob.dm deleted file mode 100644 index 46225d734614e..0000000000000 --- a/code/modules/mob/observer/virtual/mob.dm +++ /dev/null @@ -1,22 +0,0 @@ -/mob/observer/virtual/mob - host_type = /mob - -/mob/observer/virtual/mob/New(var/location, var/mob/host) - ..() - - GLOB.sight_set_event.register(host, src, /mob/observer/virtual/mob/proc/sync_sight) - GLOB.see_invisible_set_event.register(host, src, /mob/observer/virtual/mob/proc/sync_sight) - GLOB.see_in_dark_set_event.register(host, src, /mob/observer/virtual/mob/proc/sync_sight) - - sync_sight(host) - -/mob/observer/virtual/mob/Destroy() - GLOB.sight_set_event.unregister(host, src, /mob/observer/virtual/mob/proc/sync_sight) - GLOB.see_invisible_set_event.unregister(host, src, /mob/observer/virtual/mob/proc/sync_sight) - GLOB.see_in_dark_set_event.unregister(host, src, /mob/observer/virtual/mob/proc/sync_sight) - . = ..() - -/mob/observer/virtual/mob/proc/sync_sight(var/mob/mob_host) - sight = mob_host.sight - see_invisible = mob_host.see_invisible - see_in_dark = mob_host.see_in_dark diff --git a/code/modules/mob/say.dm b/code/modules/mob/say.dm deleted file mode 100644 index 8f2ec0ad4c806..0000000000000 --- a/code/modules/mob/say.dm +++ /dev/null @@ -1,118 +0,0 @@ -/mob/proc/say() - return - -/mob/verb/whisper() - set name = "Whisper" - set category = "IC" - return - -/mob/verb/say_verb(message as text) - set name = "Say" - set category = "IC" - remove_typing_indicator() - usr.say(message) - -/mob/verb/me_verb(message as text) - set name = "Me" - set category = "IC" - - message = sanitize(message) - - remove_typing_indicator() - if(use_me) - usr.emote("me",usr.emote_type,message) - else - usr.emote(message) - -/mob/proc/say_dead(var/message) - communicate(/decl/communication_channel/dsay, client, message) - -/mob/proc/say_understands(var/mob/other,var/datum/language/speaking = null) - - if (src.stat == 2) //Dead - return 1 - - //Universal speak makes everything understandable, for obvious reasons. - else if(src.universal_speak || src.universal_understand) - return 1 - - //Languages are handled after. - if (!speaking) - if(!other) - return 1 - if(other.universal_speak) - return 1 - if(isAI(src) && ispAI(other)) - return 1 - if (istype(other, src.type) || istype(src, other.type)) - return 1 - return 0 - - if(speaking.flags & INNATE) - return 1 - - //Language check. - for(var/datum/language/L in src.languages) - if(speaking.name == L.name && !(L.flags & BAD_SPEAKER)) //INF - return 1 - - return 0 - -/mob/proc/say_quote(var/message, var/datum/language/speaking = null) - var/ending = copytext_char(message, length(message) - 1) - if(speaking) - return speaking.get_spoken_verb(ending) - - var/verb = pick(speak_emote) - if(verb == "говорит") //a little bit of a hack, but we can't let speak_emote default to an empty list without breaking other things - if(ending == "!!") - verb = "кричит" - else if(copytext_char(ending, length(ending)) == "!") - verb = pick("восклицает") - else if(copytext_char(ending, length(ending)) == "?") - verb = "спрашивает" - return verb - -/mob/proc/get_ear() - // returns an atom representing a location on the map from which this - // mob can hear things - - // should be overloaded for all mobs whose "ear" is separate from their "mob" - - return get_turf(src) - -/mob/proc/say_test(var/text) - var/ending = copytext_char(text, length(text)) - if (ending == "?") - return "1" - else if (ending == "!") - return "2" - return "0" - -//parses the message mode code (e.g. :h, :w) from text, such as that supplied to say. -//returns the message mode string or null for no message mode. -//standard mode is the mode returned for the special ';' radio code. -/mob/proc/parse_message_mode(var/message, var/standard_mode="headset") - if(length(message) >= 1 && copytext_char(message,1,2) == get_prefix_key(/decl/prefix/radio_main_channel)) - return standard_mode - - if(length(message) >= 2) - var/channel_prefix = copytext_char(message, 1 ,3) - return department_radio_keys[channel_prefix] - - return null - -//parses the language code (e.g. :j) from text, such as that supplied to say. -//returns the language object only if the code corresponds to a language that src can speak, otherwise null. -/mob/proc/parse_language(var/message) - var/prefix = copytext_char(message,1,2) - if(length(message) >= 1 && prefix == get_prefix_key(/decl/prefix/audible_emote)) - return all_languages["Noise"] - - if(length(message) >= 2 && is_language_prefix(prefix)) - var/language_prefix = lowertext(copytext_char(message, 2 ,3)) - var/datum/language/L = language_keys[language_prefix] - if (can_speak(L)) - return L - - return null diff --git a/code/modules/mob/skills/README_skills.txt b/code/modules/mob/skills/README_skills.txt deleted file mode 100644 index cf68dab4a035c..0000000000000 --- a/code/modules/mob/skills/README_skills.txt +++ /dev/null @@ -1,54 +0,0 @@ -User's Guide to Skills - -1. How does the skill system work, and what are the relevant objects? - Every skill is defined via a /decl/hierarchy/skill/skill_category/skill_name in skill.dm. - These are initialized once and /decl/hierarchy/skill is stored in decls_repository. The actual skill instances are stored in GLOB.skills (this is a list). - Every mob has a variable mob.skillset of type datum/skillset (or a subtype of that). - The skillset contains all of the skill information for that mob, along with various procs for obtaining or manipulating it. - Using those procs, you will be able to extract skill values from the mob. These should be positive integers between SKILL_MIN and SKILL_MAX. - These values each have define corresponidng to them, starting with SKILL_. Use that define, not the number. - -2. Where do skills come from? - Most mobs (i.e. not player-controlled ones) will respond SKILL_DEFAULT when checked for skills. - Players set up their skill preferences on a per-job basis in the player setup screen, under occupations. See below for more. - At round start, these preferences are transferred over to the relevant mob. This is handled in the skillset.obtain_from_client proc. - If a player is an antag, this is bypassed. Modify the skillset.set_antag_skills proc to change the antag behavior. - When minds are transferred between mobs, the skillset is generally copied over to the new mob. - Silicon mobs do not inherit skills in this way. - -3. What do you do with skills? - The correct way of obtaining the value of a mob's skill is to use the get_skill_value proc on the mob. It takes a skill path, which should be called via a corresponding SKILL_ define. - Do not try to get the datum instance out of decls_repository; use the type path getter instead or else find it in GLOB.skills. - The values can be used directly to make skill checks. - Additional helper procs may be given to mobs to convert skill values into times, probabilities, or whatever in a reusable way. - Currently implemented examples: - skill_check(SKILL_PATH, SKILL_VALUE) returns 1 if the mob's skill is >= value. - skill_delay_mult(SKILL_PATH, factor) gives a generic way to modify times via skills. - do_skilled(base_delay, SKILL_PATH, atom/target, factor) is like do_after, but modifies the time by skill_delay_mult - skill_fail_chance(SKILL_PATH, fail_chance, no_more_fail, factor) modifies fail probabilities according to skill. - -4. What determines what skill options are available in player setup? How can you change them? - Skill setup works largely on a per-job basis, with some per-species and branch modifiers. - For each job, a minimum value can be assigned to any skill. To do this, add an entry of /decl/hierarchy/skill/skill_category/skill_name = min_value to that job datums's min_skill variable (this is a list). - This minimum value is given for free to the player, and does not use up allocation points. - For each job, a maximum value can also be assigned. Add a similar entry to the max_skills list. - For each job, a base number of free points can be assigned. This is given in the job datum's skill_points variable (should be a number). - Free point bonuses/penalties can be specified, for each species, as a function of a player's selected age. - This can be done by overwriting species datum's skills_from_age proc, which takes in the age and returns an integer (positive or negative) which will be added to all jobs' available skill points. - Free point bonuses/penalties can be specified, for each species, as a function of the job. - To do this, add the entry /datum/job/my_job = points_to_add to the species datum's job_skill_buffs variable (this is a list). Then points_to_add (positive or negative) will be added to that job's available skill points. - Generally, if the free point allocations or min/max values turn out to be negative or otherwise contradictory, this will not result in runtime errors, so make sure to test whether your changes work as intended. - -5. You want to make skill-related changes but are worried about whether they will break savefiles. - Savefiles are on a per-job basis. Only affected jobs will have their savefiles reset. - If a savefile represents a plausable skill point allocation, it will be imported; if not, a default skill allocation is used. - In particular, changes which increase the number of free skill points, decrease minimum allocations, or increase maximum allocations, will not break savefiles. - Changes which increase minimum allocations or decrease maximum allocations will not reset the entire allocation, but may leave extra unassigned points if the skill cap is reached. - Changes which decrease the number of free points (including from species/age buffs) may reset the entire job's allocation. - The size of the savefile roughly corresponds to the number of skills with nondefault allocations; this is only significant if many jobs have nondefault skill selections. - -6. You are an admin and need to bus skill stuff. - If you are antaging/unantaging someone via the traitor panel, this will usually change their skills. - To make sure they have the correct skills (as in their prefs), you should check that the role (top item) is correct, in addition to their antag status. - If you need to change their skill values directly, you can use VV on mob/skillset, in particular changing the values of the entries in skill_list. - There is a show skills admin verb, that displays skill values of any human mob (pick from list) in a similar way to the player Show Own Skills verb. \ No newline at end of file diff --git a/code/modules/mob/skills/antag_skill_setter.dm b/code/modules/mob/skills/antag_skill_setter.dm deleted file mode 100644 index 598b1d1c3ce89..0000000000000 --- a/code/modules/mob/skills/antag_skill_setter.dm +++ /dev/null @@ -1,44 +0,0 @@ -//A datum that performs antag-related skill selection functions. - -/datum/antag_skill_setter - var/nm_type //A nano_module with custom ui, if any. - var/list/base_skill_list = list() //Format: list(path = value). - var/default_value = SKILL_DEFAULT //If not in base_skill_list or added in another way, skill value will be this. - -/datum/antag_skill_setter/proc/initialize_skills(datum/skillset/skillset) - skillset.skill_list = base_skill_list.Copy() - skillset.default_value = default_value - QDEL_NULL_LIST(skillset.skill_buffs) - if(nm_type) - skillset.nm_type = nm_type - QDEL_NULL(skillset.NM) - skillset.on_antag_initialize() - -//This is the generic antag skill setter, used for most antag types. -/datum/antag_skill_setter/generic - nm_type = /datum/nano_module/skill_ui/antag - default_value = SKILL_BASIC - -/datum/antag_skill_setter/generic/initialize_skills(datum/skillset/skillset) - ..() - skillset.open_ui() - -//This will obtain skills from the job selection before giving additional buffs. -/datum/antag_skill_setter/station - nm_type = /datum/nano_module/skill_ui/antag/station - -/datum/antag_skill_setter/station/initialize_skills(datum/skillset/skillset) - ..() - if(skillset.owner) - var/client/my_client = skillset.owner.client - if(my_client && skillset.owner.mind) - var/datum/job/job = SSjobs.get_by_title(skillset.owner.mind.assigned_role) - skillset.obtain_from_client(job, my_client, 1) - skillset.open_ui() - -//This will obtain skills from the job selection before giving additional buffs. -/datum/antag_skill_setter/station/offstation - nm_type = /datum/nano_module/skill_ui/antag/station/offstation - -//Placeholder for ai; defaults to experienced in everything like usual. -/datum/antag_skill_setter/ai \ No newline at end of file diff --git a/code/modules/mob/skills/skill.dm b/code/modules/mob/skills/skill.dm deleted file mode 100644 index 53c18a1e1e14f..0000000000000 --- a/code/modules/mob/skills/skill.dm +++ /dev/null @@ -1,338 +0,0 @@ -GLOBAL_LIST_EMPTY(skills) - -/decl/hierarchy/skill - var/ID = "none" // ID of this skill. Needs to be unique. - name = "None" // Name of the skill. This is what the player sees. - hierarchy_type = /decl/hierarchy/skill // Don't mess with this without changing how Initialize works. - var/desc = "Placeholder skill" // Generic description of this skill. - - // Names for different skill values, in order from 1 up. - var/levels = list( "Unskilled" = "Unskilled Description", - "Basic" = "Basic Description", - "Trained" = "Trained Description", - "Experienced" = "Experienced Description", - "Master" = "Professional Description") - var/difficulty = SKILL_AVERAGE //Used to compute how expensive the skill is - var/default_max = SKILL_ADEPT //Makes the skill capped at this value in selection unless overriden at job level. - var/prerequisites // A list of skill prerequisites, if needed. - -/decl/hierarchy/skill/proc/get_cost(var/level) - switch(level) - if(SKILL_BASIC, SKILL_ADEPT) - return difficulty - if(SKILL_EXPERT, SKILL_PROF) - return 2*difficulty - else - return 0 - -/decl/hierarchy/skill/proc/update_special_effects(mob/mob, level) - -/decl/hierarchy/skill/Initialize() - . = ..() - if(is_hidden_category()) - if(!GLOB.skills.len) - for(var/decl/hierarchy/skill/C in children) - GLOB.skills += C.get_descendents() - else - CRASH("Warning: multiple instances of /decl/hierarchy/skill have been created!") - -/decl/hierarchy/skill/dd_SortValue() - return ID - -/decl/hierarchy/skill/organizational - name = "Organizational" - ID = "1" - difficulty = SKILL_EASY - default_max = SKILL_MAX - -/decl/hierarchy/skill/general - name = "General" - ID = "2" - difficulty = SKILL_EASY - default_max = SKILL_MAX - -/decl/hierarchy/skill/service - name = "Service" - ID = "service" - difficulty = SKILL_EASY - default_max = SKILL_MAX - -/decl/hierarchy/skill/security - name = "Security" - ID = "security" - -/decl/hierarchy/skill/engineering - name = "Engineering" - ID = "engineering" - -/decl/hierarchy/skill/research - name = "Research" - ID = "research" - -/decl/hierarchy/skill/medical - name = "Medical" - ID = "medical" - difficulty = SKILL_HARD - -// ONLY SKILL DEFINITIONS BELOW THIS LINE -// Category: Organizational - -/decl/hierarchy/skill/organizational/bureaucracy - ID = "bureaucracy" - name = "Bureaucracy" - desc = "Your ability to write and complete paperwork, navigate complex organiztions, and understand laws and regulations." - levels = list( "Unskilled" = "You can usually fill out basic paperwork, if with a few errors. You have a vague understanding of the law, gleaned mostly from the news and personal experience.", - "Basic" = "You are familiar with the paperwork needed to do your job, and can navigate it well. You have some understanding of the law as it applies to you and those around you.", - "Trained" = "You can navigate most paperwork thrown at you, even if you are unfamiliar with it. You have a good working understanding of the law and any regulations or procedures relevant to you.", - "Experienced" = "With your experience, you can easily create paperwork for any eventuality, and write reports which are clear and understandable. You have an excellent knowledge of the law, possibly including formal legal training.", - "Master" = "You can make paperwork dance to your bidding, and navigate the most byzantine bureaucratic structures with ease and familiarity. Your reports are works of literature. Your knowledge of the law is both broad and intimate, and you may be certified to practice law.") - -/decl/hierarchy/skill/organizational/finance - ID = "finance" - name = "Finance" - desc = "Your ability to manage money and investments." - levels = list( "Unskilled" = "Your understanding of money starts and ends with personal finance. While you are able to perform basic transactions, you get lost in the details, and can find yourself ripped off on occasion.
              - You get some starting money. Its amount increases with level.
              - You can use the verb \"Appraise\" to see the value of different objects.", - "Basic" = "You have some limited understanding of financial transactions, and will generally be able to keep accurate records. You have little experience with investment, and managing large sums of money will likely go poorly for you.", - "Trained" = "You are good at managing accounts, keeping records, and arranging transactions. You have some familiarity with mortgages, insurance, stocks, and bonds, but may be stumped when facing more complicated financial devices.", - "Experienced" = "With your experience, you are familiar with any financial entities you may run across, and are a shrewd judge of value. More often than not, investments you make will pan out well.", - "Master" = "You have an excellent knowledge of finance, will often make brilliant investments, and have an instinctive feel for interstellar economics. Financial instruments are weapons in your hands. You likely have professional experience in the finance industry.") - -// Category: General - -/decl/hierarchy/skill/general/EVA - ID = "EVA" - name = "Extra-vehicular activity" - desc = "This skill describes your skill and knowledge of space-suits and working in vacuum." - levels = list( "Unskilled" = "You have basic safety training common to people who work in space: You know how to put on and seal your internals, and you can probably struggle into a space suit if you really need to, though you'll be clumsy at it. You're still prone to mistakes that may leave you trying to breathe vacuum.
              - You can remove hardsuits. Its speed increases with level.
              - You will always get floored when you enter gravity area from space. This chance decreases with level.
              - You are likely to slip. This chance decreases with level.", - "Basic" = "You have had thorough basic training in EVA operations, and are unlikely to make novice mistakes. However, you have little experience working in vacuum.", - "Trained" = "You can comfortably use a space suit and do so regularly in the course of your work. Checking your internals is second nature to you, and you don't panic in an emergency.
              - You can fully operate jetpacks.", - "Experienced" = "You can use all kinds of space suits, including specialized versions. Your years of experience in EVA keep you from being disoriented in space, and you have experience using a jetpack to move around.
              - You cannot slip anymore.", - "Master" = "You are just as much at home in a vacuum as in atmosphere. You probably do your job almost entirely EVA.
              - You cannot get floored anymore.
              - You get bonus speed in zero-G.") - -/decl/hierarchy/skill/general/EVA/mech - ID = "exosuit" - name = "Exosuit Operation" - desc = "Allows you to operate exosuits well." - levels = list("Untrained" = "You are unfamiliar with exosuit controls, and if you attempt to use them you are liable to make mistakes.", - "Trained" = "You are proficient in exosuit operation and safety, and can use them without penalties.") - prerequisites = list(SKILL_EVA = SKILL_ADEPT) - default_max = SKILL_BASIC - difficulty = SKILL_AVERAGE - -/decl/hierarchy/skill/general/pilot - ID = "pilot" - name = "Piloting" - desc = "Describes your experience and understanding of piloting spacecraft, from small and short-range pods to corvette sized vessels." - levels = list( "Unskilled" = "You know what a spacecraft is, and you might have an abstract understanding of the differences between various ships. If your department is involved in the use of spacecraft, you know roughly what their capabilities are. You might be able to fly a spacecraft in a videogame. If you were to take the Helm of a smaller vessel, you might be able to move it with proper guidance.
              - Travel time between tranisition decreases with level.
              - You can fly ships but their movement might be randomized.
              - The speed of your ship hitting carps will increase with level.", - "Basic" = "You can pilot a small, short-range craft safely, but larger ships are out of your area of expertise. You are by no means an expert, and probably don't have much training. Skills of this level are typical for deck crew.
              - You can operate small shuttlecraft without error.
              - You can completely avoid meteors on slow speed while using tiny shuttlecrafts such as the GUP.", - "Trained" = "You are a trained pilot, and can safely operate anything from a small craft to a corvette. You can spend extended periods of time piloting a spacecraft, and you're versed in the abilities of different ships, and what makes them function. You can do basic maintenance on smaller vessels, and perform most basic maneuvers. You can use armed spacecraft. You can make basic calculations relating to piloting. Skills of this level are typical for newer pilots. You have probably received formal piloting training.
              - You can operate large ships without error.
              - You can mostly avoid meteors on slow speed using any shuttlecrafts.", - "Experienced" = "You are an experienced pilot, and can safely take the helm of many types of craft. You could probably live in a spacecraft, and you're very well versed in essentially everything related to space-faring vessels. Not only can you fly a ship, but you can perform difficult maneuvers, and make most calculations related to piloting a spacecraft. You can maintain a ship. Skills of this level are typical for very experienced pilots. You have received formal piloting training.
              - You can somewhat avoid meteors on normal speed while using tiny shuttlecrafts.", - "Master" = "Not only are you an exceptional pilot, but you have mastered peripheral functions such as stellar navigation and bluespace jump plotting. You have experience performing complex maneuvers, managing squadrons of small craft, and operating in hostile environments.
              - You can mostly avoid meteors on normal speed using any shuttlecrafts.
              - Less meteors will hit the ship while passing through meteor fields.") - difficulty = SKILL_AVERAGE - default_max = SKILL_ADEPT - -/decl/hierarchy/skill/general/hauling - ID = "hauling" - name = "Athletics" - desc = "Your ability to perform tasks requiring great strength, dexterity, or endurance." - levels = list( "Unskilled" = "You are not used to manual labor, tire easily, and are likely not in great shape. Extended heavy labor may be dangerous for you.
              - You can pull objects but start to generate Lactate after tiring out. Your strength increases with level.
              - You can throw objects. Their speed, thrown distance, and force increases with level.
              - You can sprint, the stamina consumption rate is lowered with each level.
              - You can leap by clicking on a distant target with grab intent, leap range is increased and chances of falling over are decreased with each level.", - "Basic" = "You have some familiarity with manual labor, and are in reasonable physical shape. Tasks requiring great dexterity or strength may still elude you.
              - You can throw \"huge\" items or normal-sized mobs without getting weakened.", - "Trained" = "You have sufficient strength and dexterity for more strenuous tasks, and can perform physical labor for longer periods without tiring.\nYou can use parkour!", - "Experienced" = "You likely have experience with heavy work in trying physical conditions, and are in excellent shape. You may visit the gym frequently.\nYou have mastered parkour perfectly.", - "Master" = "You are in excellent shape. You're well-adapted to performing heavy physical labor, and may have requested extra PT.") - -/decl/hierarchy/skill/general/computer - ID = "computer" - name = "Information Technology" - desc = "Describes your understanding of computers, software and communication. Not a requirement for using computers, but definitely helps. Used in telecommunications and programming of computers and AIs." - levels = list( "Unskilled" = "You know how to use the computers and communication devices that you grew up with. You can use a computer console, a handheld or wall-mounted radio, and your headset, as well as your PDA. You know what an AI is, but you may see them as either \"people made of silicon\" or \"only machines\"; you know they have to obey their laws, but you don't know much about how or why they work.", - "Basic" = "You know the basics of programming, but you're not very good at it and couldn't do it professionally. You have a pretty good idea of what makes AIs tick. You understand how information is stored in a computer, and you can fix simple computer problems. You're computer-literate, but you still make mistakes. If you tried to subvert the AI, you might make mistakes in wording your new laws.
              - The antagonist access decryption program has a chance to avoid tripping alarms and working more effectively. This increases with level.", - "Trained" = "At this level, you're probably working with computers on a daily basis. You understand and can repair the telecommunications network. Your understanding of AI programming and psychology lets you fix problems with the AIs or cyborgs--or create problems, if you so desire. You can program computers and AIs and change their laws effectively.
              - You can fully operate the Network Monitor, E-mail Administration, and AI Management Programs.", - "Experienced" = "You have years of experience with computer networks, AI systems, telecommunications, and sysadmin tasks. You know the systems used on a daily basis intimately, and can diagnose complex problems.
              - The antagonist dos program gives extra fake attacking nodes to the system log.
              - You can use the command line on modular computers (type \"man\" for a list).", - "Master" = "People are probably starting to wonder whether you might be a computer yourself. Computer code is your first language; you relate to AIs as easily as (probably more easily than) organics. You could build a telecommunications network from the ground up.") - -// Category: Service - -/decl/hierarchy/skill/service/botany - ID = "botany" - name = "Botany" - desc = "Describes how good a character is at growing and maintaining plants." - levels = list( "Unskilled" = "You know next to nothing about plants. While you can attempt to plant, weed, or harvest, you are just as likely to kill the plant instead.", - "Basic" = "You've done some gardening. You can water, weed, fertilize, plant, and harvest, and you can recognize and deal with pests. You may be a hobby gardener.
              - You can safely plant and weed normal plants.
              - You can tell weeds and pests apart from each other.", - "Trained" = "You are proficient at botany, and can grow plants for food or oxygen production. Your plants will generally survive and prosper. You know the basics of manipulating plant genes.
              - You can safely plant and weed exotic plants.
              - You can operate xenoflora machines. The sample's degradation decreases with skill level.", - "Experienced" = "You're a botanist or farmer, capable of running a facility's hydroponics farms or doing botanical research. You are adept at creating custom hybrids and modified strains.", - "Master" = "You're a specialized botanist. You can care for even the most exotic, fragile, or dangerous plants. You can use gene manipulation machinery with precision, and are often able to avoid the degradation of samples.") - -/decl/hierarchy/skill/service/cooking - ID = "cooking" - name = "Cooking" - desc = "Describes a character's skill at preparing meals and other consumable goods. This includes mixing alcoholic beverages." - levels = list( "Unskilled" = "You barely know anything about cooking, and stick to vending machines when you can. The microwave is a device of black magic to you, and you avoid it when possible.", - "Basic" = "You can make simple meals and do the cooking for your family. Things like spaghetti, grilled cheese, or simple mixed drinks are your usual fare.
              - You can safely use the blender.", - "Trained" = "You can make most meals while following instructions, and they generally turn out well. You have some experience with hosting, catering, and/or bartending.
              - You can fully operate the drink dispensers.", - "Experienced" = "You can cook professionally, keeping an entire crew fed easily. Your food is tasty and you don't have a problem with tricky or complicated dishes. You can be depended on to make just about any commonly-served drink.", - "Master" = "Not only are you good at cooking and mixing drinks, but you can manage a kitchen staff and cater for special events. You can safely prepare exotic foods and drinks that would be poisonous if prepared incorrectly.") - -// Category: Security - -/decl/hierarchy/skill/security/combat - ID = "combat" - name = "Close Combat" - desc = "This skill describes your training in hand-to-hand combat or melee weapon usage. While expertise in this area is rare in the era of firearms, experts still exist among athletes." - levels = list( "Unskilled" = "You can throw a punch or a kick, but it'll knock you off-balance. You're inexperienced and have probably never been in a serious hand-to-hand fight. In a fight, you might panic and run, grab whatever's nearby and blindly strike out with it, or (if the other guy is just as much of a beginner as you are) make a fool out of yourself.
              - You can disarm, grab, and hit. Their success chance depends on the fighters' skill difference.
              - The chance of falling over when tackled is reduced with level.", - "Basic" = "You either have some experience with fistfights, or you have some training in a martial art. You can handle yourself if you really have to, and if you're a security officer, can handle a stun baton at least well enough to get the handcuffs onto a criminal.", - "Trained" = "You have had close-combat training, and can easily defeat unskilled opponents. Close combat may not be your specialty, and you don't engage in it more than needed, but you know how to handle yourself in a fight.
              - You can parry with weapons. This increases with level.
              - You can do grab maneuvers (pinning, dislocating).
              - You can grab targets when leaping at them and not fall over, if your species is able to do so.", - "Experienced" = "You're good at hand-to-hand combat. You've trained explicitly in a martial art or as a close combatant as part of a military or police unit. You can use weaponry competently and you can think strategically and quickly in a melee. You're in good shape and you spend time training.", - "Master" = "You specialize in hand-to-hand combat. You're well-trained in a practical martial art, and in good shape. You spend a lot of time practicing. You can take on just about anyone, use just about any weapon, and usually come out on top. You may be a professional athlete or special forces member.") - -/decl/hierarchy/skill/security/combat/get_cost(var/level) - switch(level) - if(SKILL_BASIC) - return difficulty - if(SKILL_ADEPT, SKILL_EXPERT) - return 2*difficulty - if(SKILL_PROF) - return 4*difficulty - else - return 0 - -/decl/hierarchy/skill/security/weapons - ID = "weapons" - name = "Weapons Expertise" - desc = "This skill describes your expertise with and knowledge of weapons. A low level in this skill implies knowledge of simple weapons, for example flashes. A high level in this skill implies knowledge of complex weapons, such as unconfigured grenades, riot shields, pulse rifles or bombs. A low-medium level in this skill is typical for security officers, a high level of this skill is typical for special agents and soldiers." - levels = list( "Unskilled" = "You know how to recognize a weapon when you see one. You can point a gun and shoot it, though results vary wildly. You might forget the safety, you can't control burst recoil well, and you don't have trained reflexes for gun fighting.
              - You might fire your weapon randomly.", - "Basic" = "You know how to handle weapons safely, and you're comfortable using simple weapons. Your aim is decent and you can usually be trusted not to do anything stupid with a weapon you are familiar with, but your training isn't automatic yet and your performance will degrade in high-stress situations.
              - You can use firearms. Their accuracy and spread depend on your skill level.", - "Trained" = "You have had extensive weapons training, or have used weapons in combat. Your aim is better now. You are familiar with most types of weapons and can use them in a pinch. You have an understanding of tactics, and can be trusted to stay calm under fire. You may have military or police experience and you probably carry a weapon on the job.
              -You have a chance to automatically unsafety a gun when firing on harm intent.", - "Experienced" = "You've used firearms and other ranged weapons in high-stress situations, and your skills have become automatic. Your aim is good.
              -You will automatically unsafety a gun when firing it on harm intent.
              -You can perform tactical and speed reloads. The time taken decreases with level.", - "Master" = "You are an exceptional shot with a variety of weapons, from simple to exotic. You use a weapon as naturally as though it were a part of your own body. You may be a sniper or special forces operator of some kind.
              - You get extra accuracy for sniper rifles.
              - You automatically eject shells from bolt-action firearms.") - -/decl/hierarchy/skill/security/weapons/get_cost(var/level) - switch(level) - if(SKILL_BASIC) - return difficulty - if(SKILL_ADEPT) - return 2*difficulty - if(SKILL_EXPERT) - return 3*difficulty - if(SKILL_PROF) - return 4*difficulty - else - return 0 - -/decl/hierarchy/skill/security/forensics - ID = "forensics" - name = "Forensics" - desc = "Describes your skill at performing forensic examinations and identifying vital evidence. Does not cover analytical abilities, and as such isn't the only indicator for your investigation skill. Note that in order to perform autopsy, the surgery skill is also required." - levels = list( "Unskilled" = "You know that detectives solve crimes. You may have some idea that it's bad to contaminate a crime scene, but you're not too clear on the details.", - "Basic" = "You know how to avoid contaminating a crime scene. You know how to bag the evidence without contaminating it unduly.", - "Trained" = "You are trained in collecting forensic evidence - fibers, fingerprints, the works. You know how autopsies are done, and might've assisted performing one.
              - You can more easily detect fingerprints.
              - You no longer contaminate evidence.", - "Experienced" = "You're a pathologist, or detective. You've seen your share of bizarre cases, and spent a lot of time putting pieces of forensic puzzle together, so you're faster now.
              - You can notice additional details upon examining, such as fibers, partial prints, and gunshot residue.", - "Master" = "You're a big name in forensic science. You might be an investigator who cracked a famous case, or you published papers on new methods of forensics. Either way, if there's a forensic trail, you will find it, period.
              - You can notice traces of wiped off blood.") - - -/decl/hierarchy/skill/security/forensics/get_cost(var/level) - switch(level) - if(SKILL_BASIC, SKILL_ADEPT, SKILL_EXPERT) - return difficulty * 2 - if(SKILL_PROF) - return 3 * difficulty - else - return 0 - -// Category: Engineering - -/decl/hierarchy/skill/engineering/construction - ID = "construction" - name = "Construction" - desc = "Your ability to construct various buildings, such as walls, floors, tables and so on. Note that constructing devices such as APCs additionally requires the Electronics skill. A low level of this skill is typical for janitors, a high level of this skill is typical for engineers." - levels = list( "Unskilled" = "You can break furniture, disassemble chairs and tables, bash your way through a window, open a crate, or pry open an unpowered airlock. You can recognize and use basic hand tools and inflatable barriers, though not very well.
              - You can attempt to construct items above your skill level, success chance increases with level.", - "Basic" = "You can dismantle or build a wall or window, redecorate a room, and replace floor tiles and carpeting. You can safely use a welder without burning your eyes, and using hand tools is second nature to you.
              - You can construct items from Steel, Wood and Plastic.
              - You can examine certain circuit boards to learn more about the machines they're used to build.", - "Trained" = "You can build, repair, or dismantle most things, but will occasionally make mistakes and have things not come out the way you expected.
              - You can construct items from Bronze, Gold, Osmium, Plasteel, Platinum, Reinforced Glass, Sandstone, Silver, Deuterium, Metallic Hydrogen, Phoron, Phoron Glass, Tritium, and Uranium.
              - You can construct furnitures.
              - You can construct simple objects such as light fixtures, crude weapons, and wall-mounted frames.
              - You can safely use the plasmacutter to deconstruct structures.
              - You can examine machines to learn more about them.
              - You can examine machine circuit boards to see a list of parts needed to build that machine.", - "Experienced" = "You know how to seal a breach, rebuild broken piping, and repair major damage. You know the basics of structural engineering.
              - You can construct items from Osmium-Carbide Plasteel, Titanium, Diamond and make complex objects such as machine and weapon frames.", - "Master" = "You are a construction worker or engineer. You could pretty much rebuild the installation or ship from the ground up, given supplies, and you're efficient and skilled at repairing damage.") - difficulty = SKILL_EASY - -/decl/hierarchy/skill/engineering/electrical - ID = "electrical" - name = "Electrical Engineering" - desc = "This skill describes your knowledge of electronics and the underlying physics. A low level of this skill implies you know how to lay out wiring and configure powernets, a high level of this skill is required for working complex electronic devices such as circuits or bots." - levels = list( "Unskilled" = "You know that electrical wires are dangerous and getting shocked is bad; you can see and report electrical malfunctions such as broken wires or malfunctioning APCs. You can change a light bulb, and you know how to replace a battery or charge up the equipment you normally use.
              - Every time you open the hacking panel, wires are randomized.
              - Every time you pulse a wire, there is a chance you pulse a different one.
              - Every time you cut a wire, there is a chance you cut/mend extra ones.
              - You can misconnect remote signalling devices.", - "Basic" = "You can do basic wiring; you can lay cable for solars or the engine. You can repair broken wiring and build simple electrical equipment like light fixtures or APCs. You know the basics of circuits and understand how to protect yourself from electrical shock. You can probably hack a vending machine.
              - Every time you open the hacking panel, some wires might be duplicated.", - "Trained" = "You can repair and build electrical equipment and do so on a regular basis. You can troubleshoot an electrical system and monitor the installation power grid. You can probably hack an airlock.
              - You can safely hack machines.", - "Experienced" = "You can repair, build, and diagnose any electrical devices with ease. You know your way around APCs, SMES units, and monitoring software, and take apart or hack most objects.
              - You can safely place remote signaling devices.
              - You can examine one or two wires on the hacking panel.", - "Master" = "You are an electrical engineer or the equivalent. You can design, upgrade, and modify electrical equipment and you are good at maximizing the efficiency of your power network. You can hack anything on the installation you can deal with power outages and electrical problems easily and efficiently.
              - You can examine most wires on the hacking panel.") - -/decl/hierarchy/skill/engineering/atmos - ID = "atmos" - name = "Atmospherics" - desc = "Describes your knowledge of piping, air distribution and gas dynamics." - levels = list( "Unskilled" = "You know that the air monitors flash orange when the air is bad and red when it's deadly. You know that a flashing fire door means danger on the other side. You know that some gases are poisonous, that pressure has to be kept in a safe range, and that most creatures need oxygen to live. You can use a fire extinguisher or deploy an inflatable barrier.
              - RPD may give out random pipes, chance decreases with levels.
              - You cannot recompress pipes with the RPD.", - "Basic" = "You know how to read an air monitor, how to use an air pump, how to analyze the atmosphere in a space, and how to help seal a breach. You can lay piping and work with gas tanks and canisters. If you work with the engine, you can set up the cooling system. You can use a fire extinguisher easily and place inflatable barriers so that they allow convenient access and airtight breach containment.
              - You can recompress pipes with the RPD.", - "Trained" = "You can run the atmospherics system. You know how to monitor the air quality across the installation detect problems, and fix them. You're trained in dealing with fires, breaches, and gas leaks, and may have exosuit or fire gear training.
              - You can use the RPD safely.", - "Experienced" = "Your atmospherics experience lets you find, diagnose, and fix breaches efficiently. You can manage complex atmospherics systems without fear of making mistakes, and are proficient with all monitoring and pumping equipment at your disposal.
              - You can dispense a larger selection of pipes from the RPD.", - "Master" = "You are an atmospherics specialist. You monitor, modify, and optimize the installation atmospherics system, and you can quickly and easily deal with emergencies. You can modify atmospherics systems to do pretty much whatever you want them to. You can easily handle a fire or breach, and are proficient at securing an area and rescuing civilians, but you're equally likely to have simply prevented it from happening in the first place.") - -/decl/hierarchy/skill/engineering/engines - ID = "engines" - name = "Engines" - desc = "Describes your knowledge of the various engine types common on space stations, such as the PACMAN, singularity, supermatter or RUST engine." - levels = list( "Unskilled" = "You know that \"delamination\" is a bad thing and that you should stay away from the singularity. You know the engine provides power, but you're unclear on the specifics. If you were to try to set up the engine, you would need someone to talk you through every detail--and even then, you'd probably make deadly mistakes.
              - You can read the SM monitor readings with 40% error. This decreases with level.", - "Basic" = "You know the basic theoretical principles of engine operation. You can try to set up the engine by yourself, but you are likely to need some assistance and supervision, otherwise you are likely to make mistakes. You are fully capable of running a PACMAN-type generator.", - "Trained" = "You can set up the engine, and you probably won't botch it up too badly. You know how to protect yourself from radiation in the engine room. You can read the engine monitors and keep the engine going. An engine malfunction may stump you, but you can probably work out how to fix it... let's just hope you do so quickly enough to prevent serious damage.
              - You can fully read the SM monitor readings.", - "Experienced" = "You have years of experience with engines, and can set them up quickly and reliably. You're familiar with engine types other than the one you work with.
              - You can examine the SM directly for its integrity.", - "Master" = "Your engine is your baby and you know every minute detail of its workings. You can optimize the engine and you probably have your own favorite custom setup. You could build an engine from the ground up. When things go wrong, you know exactly what has happened and how to fix the problem. You can safely handle singularities and supermatter.
              - You can examine the SM directly for an approximate number of its EER.") - difficulty = SKILL_HARD - -// Category: Research - -/decl/hierarchy/skill/research/devices - ID = "devices" - name = "Complex Devices" - desc = "Describes the ability to assemble complex devices, such as computers, circuits, printers, robots or gas tank assemblies (bombs). Note that if a device requires electronics or programming, those skills are also required in addition to this skill." - levels = list( "Unskilled" = "You know how to use the technology that was present in whatever society you grew up in. You know how to tell when something is malfunctioning, but you have to call tech support to get it fixed.", - "Basic" = "You use and repair high-tech equipment in the course of your daily work. You can fix simple problems, and you know how to use a circuit printer or autolathe. You can build simple robots such as cleanbots and medibots.", - "Trained" = "You can build or repair an exosuit or cyborg chassis, use a protolathe and destructive analyzer, and build prosthetic limbs. You can safely transfer an MMI or posibrain into a cyborg chassis.
              - You can attach robotic limbs. Its speed increases with level.
              - You can perform cybernetics procedures if you have Trained Anatomy skill.", - "Experienced" = "You have years of experience building or reverse-engineering complex devices. Your use of the lathes and destructive analyzers is efficient and methodical. You can design contraptions to order, and likely sell those designs at a profit.", - "Master" = "You are an inventor or researcher. You can design, build, and modify equipment that most people don't even know exists. You are at home in the lab and the workshop and you've never met a gadget you couldn't take apart, put back together, and replicate.") - -/decl/hierarchy/skill/research/science - ID = "science" - name = "Science" - desc = "Your experience and knowledge with scientific methods and processes." - levels = list( "Unskilled" = "You know what science is and probably have a vague idea of the scientific method from your high school science classes.", - "Basic" = "You keep up with scientific discoveries. You know a little about most fields of research. You've learned basic laboratory skills. You may read about science as a hobby; or you may be working in a field related to science and have learned about science that way. You could design a simple experiment.
              - You can determine the presence of flora, fauna, and an atmosphere when scanning exoplanets.", - "Trained" = "You are a scientist, perhaps a graduate student or post-graduate researcher. You can design an experiment, analyze your results, publish your data, and integrate what you've learned with the research of other scientists. Your laboratory skills are reliable, and you know how to find information you need when you research a new scientific topic. You can dissect exotic xenofauna without many issues.
              - You can determine the composition of an atmosphere when scanning exoplanets.
              - You can determine the number of artificial structures when scanning exoplanets.
              - You can successfully perform surgery on slimes.", - "Experienced" = "You are a junior researcher. You can formulate your own questions, use the tools at hand to test your hypotheses, and investigate entirely new phenomena. You likely have a track record of success in publishing your conclusions and attracting funding.", - "Master" = "You are a professional researcher, and you have made multiple new discoveries in your field. Your experiments are well-designed. You are known as an authority in your specialty and your papers often appear in prestigious journals. You may be coordinating the research efforts of a team of scientists, and likely know how to make your findings appealing to investors.") - -// Category: Medical - -/decl/hierarchy/skill/medical/medical - ID = "medical" - name = "Medicine" - desc = "Covers an understanding of the human body and medicine. At a low level, this skill gives a basic understanding of applying common types of medicine, and a rough understanding of medical devices like the health analyzer. At a high level, this skill grants exact knowledge of all the medicine available on the installation, as well as the ability to use complex medical devices like the body scanner or mass spectrometer." - levels = list( "Unskilled" = "You know first aid, such as how to apply a bandage or ointment to an injury. You can use an autoinjector designed for civilian use, probably by reading the directions printed on it. You can tell when someone is badly hurt and needs a doctor; you can see whether someone has a badly broken bone, is having trouble breathing, or is unconscious. You may have trouble telling the difference between unconscious and dead at distance.
              - You can use first aid supplies found in kits and pouches, including autoinjectors.", - "Basic" = "You've taken a nursing or EMT course. You can stop bleeding, do CPR, apply a splint, take someone's pulse, apply trauma and burn treatments, and read a handheld health scanner. You probably know that Dylovene helps poisoning and Dexalin helps people with breathing problems; you can use a syringe or start an IV. You've been briefed on the symptoms of common emergencies like a punctured lung, appendicitis, alcohol poisoning, or broken bones, and though you can't treat them, you know that they need a doctor's attention. You can recognize most emergencies as emergencies and safely stabilize and transport a patient.
              - You can fully operate Defibrillators, Health Analyzers, IV drips, and Syringes.
              - You can comprehend most of a Body Scanner's readout.", - "Trained" = "You are an experienced EMT, an experienced nurse, or a medical resident. You know how to treat most illnesses and injuries, though exotic illnesses and unusual injuries may still stump you. You have probably begun to specialize in some sub-field of medicine. In emergencies, you can think fast enough to keep your patients alive, and even when you can't treat a patient, you know how to find someone who can. You can use a full-body scanner, and you know something's off about a patient with an alien parasite or cortical borer.
              - You can fully operate Sleepers and Body Scanners.
              - You can apply splints without failing.
              - You can perform simple surgery steps if you have Experienced Anatomy skill.", - "Experienced" = "You are a senior nurse or paramedic, or a practicing doctor. You know how to use all of the medical devices available to treat a patient. Your deep knowledge of the body and medications will let you diagnose and come up with a course of treatment for most ailments. You can perform a full-body scan thoroughly and find important information.
              - You can perform all surgery steps safely if you have Experienced Anatomy skill.", - "Master" = "You are an experienced doctor or an expert nurse or EMT. You've seen almost everything there is to see when it comes to injuries and illness and even when it comes to something you haven't seen, you can apply your wide knowledge base to put together a treatment. In a pinch, you can do just about any medicine-related task, but your specialty, whatever it may be, is where you really shine.") - -/decl/hierarchy/skill/medical/anatomy - ID = "anatomy" - name = "Anatomy" - desc = "Gives you a detailed insight of the human body. A high skill in this is required to perform surgery. This skill may also help in examining alien biology." - levels = list( "Unskilled" = "You know what organs, bones, and such are, and you know roughly where they are. You know that someone who's badly hurt or sick may need surgery.", - "Basic" = "You've taken an anatomy class and you've spent at least some time poking around inside actual people. You know where everything is, more or less. You could assist in surgery, if you have the required medical skills. If you have the forensics knowledge, you could perform an autopsy. If you really had to, you could probably perform basic surgery such as an appendectomy, but you're not yet a qualified surgeon and you really shouldn't--not unless it's an emergency. If you're a xenobiologist, you know how to take out slime cores.", - "Trained" = "You have some training in anatomy. Diagnosing broken bones, damaged ligaments, shrapnel wounds, and other trauma is straightforward for you. You can splint limbs with a good chance of success, operate a defibrillator competently, and perform CPR well. Surgery is still outside your training.
              - You can do surgery (requires Trained Medicine skill too) but you are very likely to fail at every step. Its speed increases with level.
              - You can perform cybernethics procedures if you have Trained Complex Devices skill.", - "Experienced" = "You're a surgical resident, or an experienced medical doctor. You can put together broken bones, fix a damaged lung, patch up a liver, or remove an appendix without problems. But tricky surgeries, with an unstable patient or delicate manipulation of vital organs like the heart and brain, are at the edge of your ability, and you prefer to leave them to specialized surgeons. You can recognize when someone's anatomy is noticeably unusual. You're trained in working with several species, but you're probably better at surgery on your own species.
              - You can do all surgery steps safely, if you have Experienced Medicine skill too.", - "Master" = "You are an experienced surgeon. You can handle anything that gets rolled, pushed, or dragged into the OR, and you can keep a patient alive and stable even if there's no one to assist you. You can handle severe trauma cases or multiple organ failure, repair brain damage, and perform heart surgery. By now, you've probably specialized in one field, where you may have made new contributions to surgical technique. You can detect even small variations in the anatomy of a patient--even a changeling probably wouldn't slip by your notice, provided you could get one on the operating table.
              - The penalty from operating on improper operating surfaces is reduced.") - -/decl/hierarchy/skill/medical/chemistry - ID = "chemistry" - name = "Chemistry" - desc = "Experience with mixing chemicals, and an understanding of what the effect will be. This doesn't cover an understanding of the effect of chemicals on the human body, as such the medical skill is also required for medical chemists." - levels = list( "Unskilled" = "You know that chemists work with chemicals; you know that they can make medicine or poison or useful chemicals. You probably know what an element is and have a vague idea of what a chemical reaction is from some chemistry class in your high school days.", - "Basic" = "You can make basic chemicals or medication--things like space cleaner or anti-toxin. You have some training in safety and you won't blow up the lab... probably.
              - You can safely use the industrial grinder but lose some ingredients. Its amount decreases with skill level.", - "Trained" = "You can accurately measure out reagents, grind powders, and perform chemical reactions. You may still lose some product on occasion, but are unlikely to endanger yourself or those around you.
              - You can fully operate the chem dispenser.", - "Experienced" = "You work as a chemist, or else you are a doctor with training in chemistry. If you are a research chemist, you can create most useful chemicals; if you are a pharmacist, you can make most medications. At this stage, you're working mostly by-the-book. You can weaponize your chemicals by making grenades, smoke bombs, and similar devices.
              - You can examine held containers for scannable reagents.", - "Master" = "You specialized in chemistry or pharmaceuticals; you are either a medical researcher or professional chemist. You can create custom mixes and make even the trickiest of medications easily. You understand how your pharmaceuticals interact with the bodies of your patients. You are probably the originator of at least one new chemical innovation.
              - You can examine held containers for all reagents.") diff --git a/code/modules/mob/skills/skill_buffs.dm b/code/modules/mob/skills/skill_buffs.dm deleted file mode 100644 index 18f538055c318..0000000000000 --- a/code/modules/mob/skills/skill_buffs.dm +++ /dev/null @@ -1,81 +0,0 @@ -//The base type is suitable for generic buffs not needing special treatment. -/datum/skill_buff - var/list/buffs //Format: list(skill_path = amount) - var/limit //How many buffs of this type a skillset can have. null = no limit - var/datum/skillset/skillset //The skillset to which this buff belongs. - -/datum/skill_buff/New(buff) - buffs = buff - ..() - -/datum/skill_buff/Destroy() - if(skillset) - LAZYREMOVE(skillset.skill_buffs, src) - skillset = null - . = ..() - -//Clamps the buff amounts so that the target stays between SKILL_MIN and SKILL_MAX in all skills. -/datum/skill_buff/proc/tailor_buff(mob/target) - if(!buffs) - return - var/list/temp_buffs = buffs.Copy() - for(var/skill_type in temp_buffs) - var/has_now = target.get_skill_value(skill_type) - var/current_buff = buffs[skill_type] - var/new_buff = clamp(has_now + current_buff, SKILL_MIN, SKILL_MAX) - has_now - new_buff ? (buffs[skill_type] = new_buff) : (buffs -= skill_type) - return length(buffs) - -/datum/skill_buff/proc/can_buff(mob/target) - if(!length(buffs) || !istype(target)) - return //what are we even buffing? - if(target.too_many_buffs(type)) - return - return 1 - -/datum/skill_buff/proc/remove() - var/datum/skillset/my_skillset = skillset - qdel(src) - if(my_skillset) - my_skillset.on_levels_change() - -/datum/skill_buff/proc/recalculate(to_buff) - //Here buff alreafy exists so only question is validity of new input - if(!length(to_buff)) - return - var/temp = buffs.Copy() - buffs = to_buff - //attempt to clamp - var/datum/skillset/my_skillset = skillset - if(my_skillset) - if(tailor_buff(my_skillset.owner)) - my_skillset.on_levels_change() - else buffs = temp //Return to old values. Something passed didn't make sense. - -//returns a list of buffs of the given type. -/mob/proc/fetch_buffs_of_type(buff_type, subtypes = 1) - . = list() - for(var/datum/skill_buff/buff in skillset.skill_buffs) - if(subtypes && istype(buff, buff_type)) - . += buff - else if(!subtypes && (buff.type == buff_type)) - . += buff - -/mob/proc/buff_skill(to_buff, duration, buff_type = /datum/skill_buff) - var/datum/skill_buff/buff = new buff_type(to_buff) - if(!buff.can_buff(src)) - return - if(!buff.tailor_buff(src)) - return //Turns out there's nothing to buff. - LAZYADD(skillset.skill_buffs, buff) - buff.skillset = skillset - skillset.on_levels_change() - if(duration) - addtimer(CALLBACK(buff, /datum/skill_buff/proc/remove), duration) - return buff - -//Takes a buff type or datum; typing is false here. -/mob/proc/too_many_buffs(datum/skill_buff/buff_type) - var/limit = initial(buff_type.limit) - if(limit && (length(fetch_buffs_of_type(buff_type, 0)) >= limit)) - return 1 \ No newline at end of file diff --git a/code/modules/mob/skills/skill_ui.dm b/code/modules/mob/skills/skill_ui.dm deleted file mode 100644 index 86f10316f6845..0000000000000 --- a/code/modules/mob/skills/skill_ui.dm +++ /dev/null @@ -1,328 +0,0 @@ -//Holders/managers for nano_ui for the skill panel. - -/datum/nano_module/skill_ui - var/datum/skillset/skillset - var/template = "skill_ui.tmpl" - var/hide_unskilled = FALSE - -/datum/nano_module/skill_ui/New(datum/host, topic_manager, datum/skillset/override) - skillset = override - if(!skillset && ismob(host)) - var/mob/M = host - skillset = M.skillset - if(skillset) - LAZYADD(skillset.nm_viewing, src) - ..() - -/datum/nano_module/skill_ui/Destroy() - if(skillset) - LAZYREMOVE(skillset.nm_viewing, src) - skillset = null - . = ..() - -/datum/nano_module/skill_ui/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1, var/datum/topic_state/state = GLOB.self_state) - if(!skillset) - return - var/list/data = skillset.get_nano_data(hide_unskilled) - data += get_data() - - ui = SSnano.try_update_ui(user, src, ui_key, ui, data, force_open) - if (!ui) - ui = new(user, src, ui_key, template, "Skills", 600, 900, src, state = state) - ui.set_initial_data(data) - ui.open() - -/datum/nano_module/skill_ui/Topic(href, href_list) - if(..()) - return 1 - if(!skillset || !skillset.owner) - return 1 // This probably means that we are being deleted but fielding badly timed user input or similar. - - if(href_list["toggle_hide_unskilled"]) - hide_unskilled = !hide_unskilled - return 1 - -/datum/nano_module/skill_ui/proc/get_data() - return list() - -/datum/skillset/proc/get_nano_data(var/hide_unskilled) - . = list() - .["name"] = owner.real_name - .["job"] = owner.mind && owner.mind.assigned_role - .["hide_unskilled"] = hide_unskilled - - var/list/skill_data = list() - var/decl/hierarchy/skill/skill = decls_repository.get_decl(/decl/hierarchy/skill) - for(var/decl/hierarchy/skill/V in skill.children) - var/list/skill_cat = list() - skill_cat["name"] = V.name - var/list/skills_in_cat = list() - for(var/decl/hierarchy/skill/S in V.children) - var/offset = S.prerequisites ? S.prerequisites[S.parent.type] - 1 : 0 - if(hide_unskilled && (get_value(S.type) + offset == SKILL_MIN)) - continue - skills_in_cat += list(get_nano_row(S)) - for(var/decl/hierarchy/skill/perk in S.children) - skills_in_cat += list(get_nano_row(perk)) - if(length(skills_in_cat)) - skill_cat["skills"] = skills_in_cat - skill_data += list(skill_cat) - .["skills_by_cat"] = skill_data - -/datum/skillset/proc/get_nano_row(var/decl/hierarchy/skill/S) - var/list/skill_item = list() - skill_item["name"] = S.name - var/value = get_value(S.type) - skill_item["val"] = value - skill_item["ref"] = "\ref[S.type]" - skill_item["available"] = check_prerequisites(S.type) - var/offset = S.prerequisites ? S.prerequisites[S.parent.type] - 1 : 0 - var/list/levels = list() - for(var/i in 1 to offset) - levels += list(list("blank" = 1)) - for(var/i in 1 to length(S.levels)) - var/list/level = list() - level["blank"] = 0 - level["val"] = i - level["name"] = S.levels[i] - level["selected"] = (i == value) - levels += list(level) - for(var/i in (length(levels) + 1) to SKILL_MAX) - levels += list(list("blank" = 1)) - skill_item["levels"] = levels - return skill_item - -/datum/skillset/proc/check_prerequisites(skill_type) - var/decl/hierarchy/skill/S = decls_repository.get_decl(skill_type) - if(!S.prerequisites) - return TRUE - for(var/prereq_type in S.prerequisites) - if(!(get_value(prereq_type) >= S.prerequisites[prereq_type])) - return FALSE - return TRUE - -/* -The generic antag version. -*/ -/datum/nano_module/skill_ui/antag - var/list/max_choices = list(0, 0, 4, 2, 1) - var/list/currently_selected - var/buff_type = /datum/skill_buff/antag - template = "skill_ui_antag.tmpl" - -/datum/nano_module/skill_ui/antag/get_data() - . = ..() - .["can_choose"] = can_choose() - var/list/selection_data = list() - var/decl/hierarchy/skill/skill = decls_repository.get_decl(/decl/hierarchy/skill) - for(var/i in 1 to length(max_choices)) - var/choices = max_choices[i] - if(!choices) - continue - var/list/level_data = list() - level_data["name"] = skill.levels[i] - level_data["level"] = i - var/selected = LAZYACCESS(currently_selected, i) - level_data["selected"] = list() - for(var/skill_type in selected) - var/decl/hierarchy/skill/S = skill_type // False type. - level_data["selected"] += list(list("name" = initial(S.name), "ref" = "\ref[skill_type]")) - level_data["remaining"] = choices - length(selected) - selection_data += list(level_data) - .["selection_data"] = selection_data - -/datum/nano_module/skill_ui/antag/Topic(href, href_list) - if(..()) - return 1 - if(!skillset || !skillset.owner) - return 1 // This probably means that we are being deleted but fielding badly timed user input or similar. - - if(href_list["add_skill"]) - if(!can_choose()) - return 1 - var/level = text2num(href_list["add_skill"]) - var/list/choices = list() - for(var/decl/hierarchy/skill/S in GLOB.skills) - if(can_select(S.type, level)) - choices[S.name] = S.type - var/choice = input(usr, "Which skill would you like to add?", "Add Skill") as null|anything in choices - if(!can_choose() || !choices[choice]) - return 1 - if(!can_select(choices[choice], level)) - return 1 - select(choices[choice], level) - skillset.refresh_uis() - return 1 - if(href_list["remove_skill"]) - if(!can_choose()) - return 1 - var/skill_path = locate(href_list["remove_skill"]) - deselect(skill_path) - skillset.refresh_uis() - return 1 - if(href_list["submit"]) - if(!can_choose()) - return 1 - if(alert(usr, "Are you sure you want to commit this selection? You won't be able to change it again.", "Warning", "Yes", "No")=="No") - return 1 - if(!can_choose()) - return 1 - commit() - return 1 - if(href_list["admin_reset"]) - if(usr.client) - usr.client.adminhelp("I am requesting an antag skill selection reset.") - return 1 - -/datum/nano_module/skill_ui/antag/proc/can_choose() - return !skillset.owner.too_many_buffs(buff_type) - -/datum/nano_module/skill_ui/antag/proc/can_select(skill_type, level) - var/remaining = LAZYACCESS(max_choices, level) - var/selected = LAZYACCESS(currently_selected, level) - - if(length(selected) >= remaining) - return - if(skill_type in selected) - return - if(skillset.get_value(skill_type) >= level) - return - var/decl/hierarchy/skill/S = decls_repository.get_decl(skill_type) - if(length(S.levels) < level) - return - if(S.prerequisites) - return // Can't select perks from here. - return 1 - -/datum/nano_module/skill_ui/antag/proc/select(skill_type, level) - if(!can_select(skill_type, level)) - return - deselect(skill_type) - LAZYINITLIST(currently_selected) - if(currently_selected.len < level) - currently_selected.len = level - var/selection = currently_selected[level] - LAZYADD(selection, skill_type) - currently_selected[level] = selection - -/datum/nano_module/skill_ui/antag/proc/deselect(skill_type) - for(var/i in 1 to length(currently_selected)) - var/list/selection = currently_selected[i] - LAZYREMOVE(selection, skill_type) // Can't send list[key] into the macro. - currently_selected[i] = selection - -/datum/nano_module/skill_ui/antag/proc/commit() - if(!skillset || !skillset.owner) - return - var/list/buff = list() - for(var/i in 1 to length(currently_selected)) - for(var/skill_type in currently_selected[i]) - buff[skill_type] = i - skillset.get_value(skill_type) - if(skillset.owner.buff_skill(buff, buff_type = buff_type)) - currently_selected = null - return 1 - -/datum/skill_buff/antag - limit = 1 -/* -Similar, but for station antags that have jobs. -*/ -/datum/nano_module/skill_ui/antag/station - max_choices = list(0, 0, 2, 1, 1) -/* -Similar, but for off-station jobs (Bearcat, Verne, survivor etc.). -*/ -/datum/nano_module/skill_ui/antag/station/offstation - max_choices = list(0, 2, 2, 1, 1) -/* -Admin version, with debugging options. -*/ -/datum/nano_module/skill_ui/admin - template = "skill_ui_admin.tmpl" - -/datum/nano_module/skill_ui/admin/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1, var/datum/topic_state/state = GLOB.admin_state) - ..() //Uses different default state. - -/datum/nano_module/skill_ui/admin/get_data() - . = ..() - .["antag_buff"] = length(skillset.owner.fetch_buffs_of_type(/datum/skill_buff/antag)) - .["antag"] = skillset.owner && skillset.owner.mind && player_is_antag(skillset.owner.mind) - -/datum/nano_module/skill_ui/admin/Topic(href, href_list) - if(..()) - return 1 - if(href_list["close"]) // This is called when the window is closed; we've signed up to get notified of it. - qdel(src) - return 1 - if(!isadmin(usr)) - return 1 - - if(href_list["reset_antag"]) - for(var/datum/skill_buff/buff in skillset.owner.fetch_buffs_of_type(/datum/skill_buff/antag)) - buff.remove() - log_and_message_admins("SKILLS: [key_name_admin(skillset.owner)] has been granted a reset of antag skills.") - return 1 - if(href_list["reset_buffs"]) - for(var/datum/skill_buff/buff in skillset.owner.fetch_buffs_of_type(/datum/skill_buff)) - buff.remove() - log_and_message_admins("SKILLS: All skill buffs have been removed from [key_name_admin(skillset.owner)].") - return 1 - if(href_list["reset_hard"]) - log_and_message_admins("SKILLS: The skillset of [key_name_admin(skillset.owner)] has been reset.") - skillset.owner.reset_skillset() // This will delete the NM and wipe all references. - return 1 - if(href_list["prefs"]) - var/my_client = skillset.owner.client - if(!my_client) - to_chat(usr, "Mob client not found.") - return 1 - var/datum/job/job = skillset.owner.mind && SSjobs.get_by_title(skillset.owner.mind.assigned_role) - if(!job) - to_chat(usr, "Valid job not found.") - return 1 - skillset.obtain_from_client(job, my_client) - log_and_message_admins("SKILLS: The job skills for [key_name_admin(skillset.owner)] have been imported.") - return 1 - if(href_list["antag"]) - var/datum/antagonist/antag = skillset.owner.mind && player_is_antag(skillset.owner.mind) - if(!antag) - to_chat(usr, "Mob lacks valid antag status.") - return 1 - if(!istype(antag.skill_setter)) - to_chat(usr, "Antag has no skill setter assigned.") - return 1 - antag.skill_setter.initialize_skills(skillset) - log_and_message_admins("SKILLS: The antag skills for [key_name_admin(skillset.owner)] have been re-initialized.") - return 1 - if(href_list["refresh"]) - skillset.refresh_uis() - return 1 - - if(href_list["value_hit"]) - var/skill_type = locate(href_list["skill"]) - if(!skill_type) - return 1 - var/new_val = sanitize_integer(text2num(href_list["value_hit"]), SKILL_MIN, SKILL_MAX, SKILL_MIN) - var/old_val = skillset.get_value(skill_type) - if(new_val == old_val) - return 1 - var/datum/skill_buff/admin/buff - var/buffs = skillset.owner.fetch_buffs_of_type(/datum/skill_buff/admin, 0) - if(length(buffs)) - buff = buffs[1] - if(buff) - buff.change_value(skill_type, new_val) - else - var/buff_list = list() - buff_list[skill_type] = new_val - old_val - skillset.owner.buff_skill(buff_list, buff_type = /datum/skill_buff/admin) - log_and_message_admins("SKILLS: The skill values of [key_name_admin(skillset.owner)] have been altered.") - return 1 - -/datum/skill_buff/admin - limit = 1 - -/datum/skill_buff/admin/proc/change_value(skill_type, new_value) - var/old_value = skillset.get_value(skill_type) - buffs[skill_type] = new_value - old_value + buffs[skill_type] - skillset.on_levels_change() diff --git a/code/modules/mob/skills/skill_verbs.dm b/code/modules/mob/skills/skill_verbs.dm deleted file mode 100644 index 46efd04bc859f..0000000000000 --- a/code/modules/mob/skills/skill_verbs.dm +++ /dev/null @@ -1,221 +0,0 @@ -//Skill-related mob verbs that require skill checks to be satisfied to be added. - -GLOBAL_LIST_INIT(skill_verbs, init_subtypes(/datum/skill_verb)) - -/datum/skillset/proc/fetch_verb_datum(given_type) - for(var/datum/skill_verb/SV in skill_verbs) - if(SV.type == given_type) - return SV - -/datum/skillset/proc/update_verbs() - for(var/datum/skill_verb/SV in skill_verbs) - SV.update_verb() - -/datum/skill_verb - var/datum/skillset/skillset //Owner, if any. - var/the_verb //The verb to keep track of. Should be a mob verb. - var/cooldown //How long the verb cools down for after use. null = has no cooldown. - var/cooling_down = 0 //Whether it's currently cooling down. - -/datum/skill_verb/Destroy() - skillset = null - . = ..() - -//Not whether it can be accessed/used; just whether the mob skillset should have this datum and check it when updating skill verbs. -/datum/skill_verb/proc/should_have_verb(datum/skillset/given_skillset) - return 1 - -/datum/skill_verb/proc/give_to_skillset(datum/skillset/given_skillset) - var/datum/skill_verb/new_verb = new type - new_verb.skillset = given_skillset - LAZYADD(given_skillset.skill_verbs, new_verb) - -//Updates whether or not the mob has access to this verb. -/datum/skill_verb/proc/update_verb() - if(!skillset || !skillset.owner) - return - . = should_see_verb() - . ? (skillset.owner.verbs |= the_verb) : (skillset.owner.verbs -= the_verb) - -/datum/skill_verb/proc/should_see_verb() - if(cooling_down) - return - return 1 - -/datum/skill_verb/proc/remove_cooldown() - cooling_down = 0 - update_verb() - -/datum/skill_verb/proc/set_cooldown() - if(!cooldown) - return - cooling_down = 1 - update_verb() - addtimer(CALLBACK(src, .proc/remove_cooldown), cooldown) -/* -The Instruct verb. buffs untrained -> basic and requires skill in the skill training as well as leadership. -Robots and antags can instruct. -*/ -/datum/skill_verb/instruct - the_verb = /mob/proc/instruct - cooldown = 15 MINUTES - -/datum/skill_verb/instruct/should_have_verb(datum/skillset/given_skillset) - if(!..()) - return - if(!isliving(given_skillset.owner)) - return - return 1 - -/datum/skill_verb/instruct/should_see_verb() - if(!..()) - return - for(var/decl/hierarchy/skill/S in GLOB.skills) - if(skillset.owner.skill_check(S.type, SKILL_EXPERT)) - return 1 - -/mob/proc/instruct(mob/living/carbon/human/target as mob in oview(2)) - set category = "IC" - set name = "Instruct" - set src = usr - - var/datum/skill_verb/instruct/SV = skillset.fetch_verb_datum(/datum/skill_verb/instruct) - if(!SV || !istype(target)) - return - if(src == target) - to_chat(src, "Cannot instruct yourself.") - return - if(incapacitated() || target.incapacitated()) - to_chat(src, "[incapacitated() ? "You are in no state to teach right now!" : "\the [target] is in no state to be taught right now!"]") - return - - if(target.too_many_buffs(/datum/skill_buff/instruct)) - to_chat(src, "\The [target] exhausted from all the training \he recieved.") - return - - var/options = list() - for(var/decl/hierarchy/skill/S in GLOB.skills) - if(!target.skill_check(S.type, SKILL_BASIC) && skill_check(S.type, SKILL_EXPERT)) - options[S.name] = S - if(!length(options)) - to_chat(src, "There is nothing you can teach \the [target].") - var/choice = input(src, "Select skill to instruct \the [target] in:", "Skill select") as null|anything in options - if(!(choice in options) || !(target in view(2))) - return - var/decl/hierarchy/skill/skill = options[choice] - - if(!do_skilled(6 SECONDS, skill.type, target, do_flags = DO_DEFAULT | DO_USER_UNIQUE_ACT | DO_PUBLIC_PROGRESS)) - return - if(incapacitated() || target.incapacitated()) - to_chat(src, "[incapacitated() ? "You are in no state to teach right now!" : "\the [target] is in no state to be taught right now!"]") - return - if(target.too_many_buffs(/datum/skill_buff/instruct)) - to_chat(src, "\The [target] exhausted from all the training \he recieved.") - return - if(target.skill_check(skill.type, SKILL_BASIC)) - to_chat(src, "\The [target] is too skilled to gain any benefit from a short lesson.") - return - if(!skill_check(skill.type, SKILL_EXPERT)) - return - - target.buff_skill(list(skill.type = 1), buff_type = /datum/skill_buff/instruct) - visible_message("\The [src] trained \the [target] in the basics of \the [skill.name].") - SV.set_cooldown() - -/datum/skill_buff/instruct - limit = 3 - -/datum/skill_buff/motivate/can_buff(mob/target) - if(!..()) - return - if(!ishuman(target)) - return - return 1 -/* -The Appraise verb. Used on objects to estimate their value. -*/ -/datum/skill_verb/appraise - the_verb = /mob/proc/appraise - -/datum/skill_verb/appraise/should_have_verb(datum/skillset/given_skillset) - if(!..()) - return - if(!isliving(given_skillset.owner)) - return - return 1 - -/datum/skill_verb/appraise/should_see_verb() - if(!..()) - return - if(!skillset.owner.skill_check(SKILL_FINANCE, SKILL_BASIC)) - return - return 1 - -/mob/proc/appraise(obj/item as obj in get_equipped_items(1)) - set category = "IC" - set name = "Appraise" - set src = usr - set popup_menu = 0 - - if(incapacitated() || !istype(item)) - return - var/value = get_value(item) - var/message - if(!value) - message = "\The [item] seems worthless." - else - var/multiple = round(log(10, value)) - if(multiple < 0) - message = "\The [item] seems worthless." - else - var/level = get_appraise_level(get_skill_value(SKILL_FINANCE)) - level *= 10 ** (max(multiple - 1, 0)) - var/low = level * round(value/level) //low and high bracket the value between multiples of level - var/high = low + level - if(!low && multiple >= 2) - low = 10 ** (multiple - 1) //Adjusts the lowball estimate away from 0 if the item has a high upper estimate. - message = "You appraise the item to be worth between [low] and [high] [GLOB.using_map.local_currency_name]." - to_chat(src, message) - -/proc/get_appraise_level(skill) - switch(skill) - if(SKILL_MAX) - return 5 - if(SKILL_EXPERT) - return 10 - if(SKILL_ADEPT) - return 20 - else - return 50 - -/datum/skill_verb/noirvision - the_verb = /mob/proc/noirvision - -/datum/skill_verb/noirvision/should_have_verb(datum/skillset/given_skillset) - if(!..()) - return - if(!isliving(given_skillset.owner)) - return - return 1 - -/datum/skill_verb/noirvision/should_see_verb() - if(!..()) - return - if(!skillset.owner.skill_check(SKILL_FORENSICS, SKILL_PROF)) - return - return 1 - -/mob/proc/noirvision() - set category = "IC" - set name = "Detective instinct" - set src = usr - set popup_menu = 0 - - if(incapacitated()) - return - - if(!remove_client_color(/datum/client_color/noir)) - to_chat(src, "You clear your mind and focus on the scene before you.") - add_client_color(/datum/client_color/noir) - else - to_chat(src, "You stop looking for clues.") diff --git a/code/modules/mob/skills/skillset.dm b/code/modules/mob/skills/skillset.dm deleted file mode 100644 index 1321acfd7d68a..0000000000000 --- a/code/modules/mob/skills/skillset.dm +++ /dev/null @@ -1,158 +0,0 @@ -//Holder for skill information for mobs. - -/datum/skillset - var/skill_list = list() - var/mob/owner - var/default_value = SKILL_DEFAULT - var/skills_transferable = TRUE - var/list/skill_buffs // A list of /datum/skill_buff being applied to the skillset. - var/list/skill_verbs // A list of skill-related verb datums. - var/nm_type = /datum/nano_module/skill_ui - var/datum/nano_module/skill_ui/NM - var/list/nm_viewing - -/datum/skillset/New(mob/mob) - owner = mob - for(var/datum/skill_verb/SV in GLOB.skill_verbs) - if(SV.should_have_verb(src)) - SV.give_to_skillset(src) - ..() - -/datum/skillset/Destroy() - owner = null - QDEL_NULL_LIST(skill_buffs) - QDEL_NULL_LIST(skill_verbs) - QDEL_NULL_LIST(nm_viewing) - QDEL_NULL(NM) - . = ..() - -/datum/skillset/proc/get_value(skill_path) - . = skill_list[skill_path] || default_value - for(var/datum/skill_buff/SB in skill_buffs) - . += SB.buffs[skill_path] - -/datum/skillset/proc/obtain_from_mob(mob/mob) - if(!istype(mob) || !skills_transferable || !mob.skillset?.skills_transferable) - return - skill_list = mob.skillset.skill_list - default_value = mob.skillset.default_value - skill_buffs = mob.skillset.skill_buffs - nm_type = mob.skillset.nm_type - QDEL_NULL(NM) //Clean all nano_modules for simplicity. - QDEL_NULL(mob.skillset.NM) - QDEL_NULL_LIST(nm_viewing) - QDEL_NULL_LIST(mob.skillset.nm_viewing) - on_levels_change() - -//Called when a player is added as an antag and the antag datum processes the skillset. -/datum/skillset/proc/on_antag_initialize() - on_levels_change() - -/datum/skillset/proc/on_levels_change() - update_verbs() - update_special_effects() - refresh_uis() - -/datum/skillset/proc/update_special_effects() - if(!owner) - return - for(var/decl/hierarchy/skill/skill in GLOB.skills) - skill.update_special_effects(owner, get_value(skill.type)) - -/datum/skillset/proc/obtain_from_client(datum/job/job, client/given_client, override = 0) - if(!skills_transferable) - return - if(!override && owner.mind && player_is_antag(owner.mind)) //Antags are dealt with at a different time. Note that this may be called before or after antag roles are assigned. - return - if(!given_client) - return - - var/allocation = given_client.prefs.skills_allocated[job] || list() - skill_list = list() - - for(var/decl/hierarchy/skill/S in GLOB.skills) - var/min = job ? given_client.prefs.get_min_skill(job, S) : SKILL_MIN - skill_list[S.type] = min + (allocation[S] || 0) - on_levels_change() - -/datum/skillset/proc/obtain_from_job(datum/job/job) - if(!job) - return - - skill_list = list() - - for(var/decl/hierarchy/skill/S in GLOB.skills) - skill_list[S.type] = job.get_min_skill(S) - on_levels_change() - -//Skill-related mob helper procs - -/mob/proc/get_skill_value(skill_path) - return skillset.get_value(skill_path) - -/mob/proc/reset_skillset() - qdel(skillset) - var/new_type = initial(skillset) - skillset = new new_type(src) - var/datum/job/job = mind && SSjobs.get_by_title(mind.assigned_role) - skillset.obtain_from_client(job, client) - -// Use to perform skill checks -/mob/proc/skill_check(skill_path, needed) - var/points = get_skill_value(skill_path) - return points >= needed - -//Passing a list in format of 'skill = level_needed' -/mob/proc/skill_check_multiple(skill_reqs) - for(var/skill in skill_reqs) - . = skill_check(skill, skill_reqs[skill]) - if(!.) - return - -/mob/proc/get_skill_difference(skill_path, mob/opponent) - return get_skill_value(skill_path) - opponent.get_skill_value(skill_path) - -// A generic way of modifying times via skill values -/mob/proc/skill_delay_mult(skill_path, factor = 0.3) - var/points = get_skill_value(skill_path) - switch(points) - if(SKILL_BASIC) - return max(0, 1 + 3*factor) - if(SKILL_NONE) - return max(0, 1 + 6*factor) - else - return max(0, 1 + (SKILL_DEFAULT - points) * factor) - -/mob/proc/do_skilled(base_delay, skill_path , atom/target = null, factor = 0.3, do_flags = DO_PUBLIC_UNIQUE) - return do_after(src, base_delay * skill_delay_mult(skill_path, factor), target, do_flags) - -// A generic way of modifying success probabilities via skill values. Higher factor means skills have more effect. fail_chance is the chance at SKILL_NONE. -/mob/proc/skill_fail_chance(skill_path, fail_chance, no_more_fail = SKILL_MAX, factor = 1) - var/points = get_skill_value(skill_path) - if(points >= no_more_fail) - return 0 - else - return fail_chance * 2 ** (factor*(SKILL_MIN - points)) - -// Simple prob using above -/mob/proc/skill_fail_prob(skill_path, fail_chance, no_more_fail = SKILL_MAX, factor = 1) - return prob(skill_fail_chance(skill_path, fail_chance, no_more_fail, factor )) - -// Show skills verb - -/mob/living/verb/show_skills() - set category = "IC" - set name = "Show Own Skills" - - skillset.open_ui() - -/datum/skillset/proc/open_ui() - if(!owner) - return - if(!NM) - NM = new nm_type(owner) - NM.ui_interact(owner) - -/datum/skillset/proc/refresh_uis() - for(var/nano_module in nm_viewing) - SSnano.update_uis(nano_module) diff --git a/code/modules/mob/skills/skillset_silicon.dm b/code/modules/mob/skills/skillset_silicon.dm deleted file mode 100644 index 793ffd1de0a3b..0000000000000 --- a/code/modules/mob/skills/skillset_silicon.dm +++ /dev/null @@ -1,20 +0,0 @@ -/datum/skillset/silicon - skills_transferable = FALSE - -/datum/skillset/silicon/robot - default_value = SKILL_MIN - -// better handling for hard resets -/mob/living/silicon/robot/reset_skillset() - ..() - if(module) - module.grant_skills(src) - -/datum/skillset/silicon/robot/on_antag_initialize() - var/mob/living/silicon/robot/robot = owner // It will have just reset our skillset, and we don't actually want that. - if(istype(robot) && robot.module) - robot.module.grant_skills(robot) - ..() - -/datum/skill_buff/robot - limit = 1 \ No newline at end of file diff --git a/code/modules/mob/transform_procs.dm b/code/modules/mob/transform_procs.dm deleted file mode 100644 index 9de3c391dca78..0000000000000 --- a/code/modules/mob/transform_procs.dm +++ /dev/null @@ -1,296 +0,0 @@ -/mob/living/carbon/human/proc/monkeyize() - if (HAS_TRANSFORMATION_MOVEMENT_HANDLER(src)) - return - for(var/obj/item/W in src) - if (W==w_uniform) // will be torn - continue - drop_from_inventory(W) - regenerate_icons() - ADD_TRANSFORMATION_MOVEMENT_HANDLER(src) - stunned = 1 - icon = null - set_invisibility(101) - for(var/t in organs) - qdel(t) - var/atom/movable/overlay/animation = new /atom/movable/overlay(src) - animation.icon_state = "blank" - animation.icon = 'icons/mob/mob.dmi' - flick("h2monkey", animation) - sleep(48) - //animation = null - - DEL_TRANSFORMATION_MOVEMENT_HANDLER(src) - stunned = 0 - UpdateLyingBuckledAndVerbStatus() - set_invisibility(initial(invisibility)) - - if(!species.primitive_form) //If the creature in question has no primitive set, this is going to be messy. - gib() - return - - for(var/obj/item/W in src) - drop_from_inventory(W) - set_species(species.primitive_form) - dna.SetSEState(GLOB.MONKEYBLOCK,1) - dna.SetSEValueRange(GLOB.MONKEYBLOCK,0xDAC, 0xFFF) - - to_chat(src, "You are now [species.name]. ") - qdel(animation) - - return src - -/mob/new_player/AIize() - spawning = 1 - return ..() - -/mob/living/carbon/human/AIize(move=1) // 'move' argument needs defining here too because BYOND is dumb - if (HAS_TRANSFORMATION_MOVEMENT_HANDLER(src)) - return - for(var/t in organs) - qdel(t) - QDEL_NULL_LIST(worn_underwear) - return ..(move) - -/mob/living/carbon/AIize() - if (HAS_TRANSFORMATION_MOVEMENT_HANDLER(src)) - return - for(var/obj/item/W in src) - drop_from_inventory(W) - ADD_TRANSFORMATION_MOVEMENT_HANDLER(src) - icon = null - set_invisibility(101) - return ..() - -/mob/proc/AIize(move=1) - if(client) - sound_to(src, sound(null, repeat = 0, wait = 0, volume = 85, channel = GLOB.lobby_sound_channel))// stop the jams for AIs - - - var/mob/living/silicon/ai/O = new (loc, GLOB.using_map.default_law_type,,1)//No MMI but safety is in effect. - O.set_invisibility(0) - O.aiRestorePowerRoutine = 0 - if(mind) - mind.transfer_to(O) - O.mind.original = O - var/datum/job/job = SSjobs.get_by_title(O.mind.assigned_role) - O.skillset.obtain_from_job(job) - else - O.key = key - - if(move) - var/obj/loc_landmark - for(var/obj/effect/landmark/start/sloc in landmarks_list) - if (sloc.name != "AI") - continue - if (locate(/mob/living) in sloc.loc) - continue - loc_landmark = sloc - if (!loc_landmark) - for(var/obj/effect/landmark/tripai in landmarks_list) - if (tripai.name == "tripai") - if((locate(/mob/living) in tripai.loc) || (locate(/obj/structure/AIcore) in tripai.loc)) - continue - loc_landmark = tripai - if (!loc_landmark) - to_chat(O, "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) - if (sloc.name == "AI") - loc_landmark = sloc - O.forceMove(loc_landmark.loc) - O.on_mob_init() - - O.add_ai_verbs() - - O.rename_self("ai",1) - spawn(0) // Mobs still instantly del themselves, thus we need to spawn or O will never be returned - qdel(src) - return O - -//human -> robot -/mob/living/carbon/human/proc/Robotize(var/supplied_robot_type = /mob/living/silicon/robot) - if (HAS_TRANSFORMATION_MOVEMENT_HANDLER(src)) - return - QDEL_NULL_LIST(worn_underwear) - for(var/obj/item/W in src) - drop_from_inventory(W) - regenerate_icons() - ADD_TRANSFORMATION_MOVEMENT_HANDLER(src) - icon = null - set_invisibility(101) - for(var/t in organs) - qdel(t) - - var/mob/living/silicon/robot/O = new supplied_robot_type( loc ) - - O.gender = gender - O.set_invisibility(0) - - if(mind) - mind.transfer_to(O) - if(O.mind && O.mind.assigned_role == "Robot") - O.mind.original = O - var/mmi_type = SSrobots.get_mmi_type_by_title(O.mind.role_alt_title ? O.mind.role_alt_title : O.mind.assigned_role) - if(mmi_type) - O.mmi = new mmi_type(O) - O.mmi.transfer_identity(src) - else - O.key = key - - O.dropInto(loc) - O.job = "Robot" - callHook("borgify", list(O)) - O.Namepick() - - qdel(src) // Queues us for a hard delete - return O - -/mob/living/carbon/human/proc/slimeize(adult as num, reproduce as num) - if (HAS_TRANSFORMATION_MOVEMENT_HANDLER(src)) - return - for(var/obj/item/W in src) - drop_from_inventory(W) - regenerate_icons() - ADD_TRANSFORMATION_MOVEMENT_HANDLER(src) - icon = null - set_invisibility(101) - for(var/t in organs) - qdel(t) - - var/mob/living/carbon/slime/new_slime - if(reproduce) - var/number = pick(14;2,3,4) //reproduce (has a small chance of producing 3 or 4 offspring) - var/list/babies = list() - for(var/i=1,i<=number,i++) - var/mob/living/carbon/slime/M = new/mob/living/carbon/slime(loc) - M.set_nutrition(round(nutrition/number)) - step_away(M,src) - babies += M - new_slime = pick(babies) - else - new_slime = new /mob/living/carbon/slime(loc) - if(adult) - new_slime.is_adult = 1 - else - new_slime.key = key - - to_chat(new_slime, "You are now a slime. Skreee!") - qdel(src) - return - -/mob/living/carbon/human/proc/corgize() - if (HAS_TRANSFORMATION_MOVEMENT_HANDLER(src)) - return - for(var/obj/item/W in src) - drop_from_inventory(W) - regenerate_icons() - ADD_TRANSFORMATION_MOVEMENT_HANDLER(src) - icon = null - set_invisibility(101) - for(var/t in organs) //this really should not be necessary - qdel(t) - - var/mob/living/simple_animal/passive/corgi/new_corgi = new /mob/living/simple_animal/passive/corgi (loc) - new_corgi.a_intent = I_HURT - new_corgi.key = key - - to_chat(new_corgi, "You are now a Corgi. Yap Yap!") - qdel(src) - return - -/mob/living/carbon/human/Animalize() - - var/list/mobtypes = typesof(/mob/living/simple_animal) - var/mobpath = input("Which type of mob should [src] turn into?", "Choose a type") in mobtypes - - if(!safe_animal(mobpath)) - to_chat(usr, "Sorry but this mob type is currently unavailable.") - return - - if(HAS_TRANSFORMATION_MOVEMENT_HANDLER(src)) - return - for(var/obj/item/W in src) - drop_from_inventory(W) - - regenerate_icons() - ADD_TRANSFORMATION_MOVEMENT_HANDLER(src) - icon = null - set_invisibility(101) - - for(var/t in organs) - qdel(t) - - var/mob/new_mob = new mobpath(src.loc) - - new_mob.key = key - new_mob.a_intent = I_HURT - - - to_chat(new_mob, "You suddenly feel more... animalistic.") - spawn() - qdel(src) - return - -/mob/proc/Animalize() - - var/list/mobtypes = typesof(/mob/living/simple_animal) - var/mobpath = input("Which type of mob should [src] turn into?", "Choose a type") in mobtypes - - if(!safe_animal(mobpath)) - to_chat(usr, "Sorry but this mob type is currently unavailable.") - return - - var/mob/new_mob = new mobpath(src.loc) - - new_mob.key = key - new_mob.a_intent = I_HURT - to_chat(new_mob, "You feel more... animalistic") - - qdel(src) - -/* Certain mob types have problems and should not be allowed to be controlled by players. - * - * This proc is here to force coders to manually place their mob in this list, hopefully tested. - * This also gives a place to explain -why- players shouldn't be turn into certain mobs and hopefully someone can fix them. - */ -/mob/proc/safe_animal(var/MP) - -//Bad mobs! - Remember to add a comment explaining what's wrong with the mob - if(!MP) - return 0 //Sanity, this should never happen. - - if(ispath(MP, /mob/living/simple_animal/construct/behemoth)) - return 0 //I think this may have been an unfinished WiP or something. These constructs should really have their own class simple_animal/construct/subtype - - if(ispath(MP, /mob/living/simple_animal/construct/armoured)) - return 0 //Verbs do not appear for players. These constructs should really have their own class simple_animal/construct/subtype - - if(ispath(MP, /mob/living/simple_animal/construct/wraith)) - return 0 //Verbs do not appear for players. These constructs should really have their own class simple_animal/construct/subtype - - if(ispath(MP, /mob/living/simple_animal/construct/builder)) - return 0 //Verbs do not appear for players. These constructs should really have their own class simple_animal/construct/subtype - -//Good mobs! - if(ispath(MP, /mob/living/simple_animal/passive/cat)) - return 1 - if(ispath(MP, /mob/living/simple_animal/passive/corgi)) - return 1 - if(ispath(MP, /mob/living/simple_animal/crab)) - return 1 - if(ispath(MP, /mob/living/simple_animal/hostile/carp)) - return 1 - if(ispath(MP, /mob/living/simple_animal/passive/mushroom)) - return 1 - if(ispath(MP, /mob/living/simple_animal/shade)) - return 1 - if(ispath(MP, /mob/living/simple_animal/passive/tomato)) - return 1 - if(ispath(MP, /mob/living/simple_animal/passive/mouse)) - return 1 //It is impossible to pull up the player panel for mice (Fixed! - Nodrak) - if(ispath(MP, /mob/living/simple_animal/hostile/bear)) - return 1 //Bears will auto-attack mobs, even if they're player controlled (Fixed! - Nodrak) - if(ispath(MP, /mob/living/simple_animal/hostile/retaliate/parrot)) - return 1 //Parrots are no longer unfinished! -Nodrak - - //Not in here? Must be untested! - return 0 diff --git a/code/modules/mob/typing_indicator.dm b/code/modules/mob/typing_indicator.dm deleted file mode 100644 index 060534bc47027..0000000000000 --- a/code/modules/mob/typing_indicator.dm +++ /dev/null @@ -1,66 +0,0 @@ -/*Typing indicators, when a mob uses the F3/F4 keys to bring the say/emote input boxes up this little buddy is -made and follows them around until they are done (or something bad happens), helps tell nearby people that 'hey! -I IS TYPIN'!' -*/ - -/mob - var/atom/movable/overlay/typing_indicator/typing_indicator = null - -/atom/movable/overlay/typing_indicator - follow_proc = /atom/movable/proc/move_to_turf_or_null - icon = 'icons/mob/talk.dmi' - icon_state = "typing" - plane = EFFECTS_ABOVE_LIGHTING_PLANE - layer = SPEECH_INDICATOR_LAYER - -/atom/movable/overlay/typing_indicator/Initialize() - . = ..() - if(!istype(master, /mob)) - crash_with("Master of typing_indicator has invalid type: [master.type].") - -/atom/movable/overlay/typing_indicator/Destroy() - var/mob/M = master - M.typing_indicator = null - . = ..() - -/atom/movable/overlay/typing_indicator/SetInitLoc() - forceMove(get_turf(master)) - -/mob/proc/create_typing_indicator() - if(client && !stat && get_preference_value(/datum/client_preference/show_typing_indicator) == GLOB.PREF_SHOW && !src.is_cloaked() && isturf(src.loc)) - if(!typing_indicator) - typing_indicator = new(src) - typing_indicator.set_invisibility(0) - -/mob/proc/remove_typing_indicator() // A bit excessive, but goes with the creation of the indicator I suppose - if(typing_indicator) - typing_indicator.set_invisibility(INVISIBILITY_MAXIMUM) - -/mob/set_stat(new_stat) - . = ..() - if(.) - remove_typing_indicator() - -/mob/Logout() - remove_typing_indicator() - . = ..() - -/mob/verb/say_wrapper() - set name = ".Say" - set hidden = 1 - - create_typing_indicator() - var/message = input("","say (text)") as text|null - remove_typing_indicator() - if(message) - say_verb(message) - -/mob/verb/me_wrapper() - set name = ".Me" - set hidden = 1 - - create_typing_indicator() - var/message = input("","me (text)") as text|null - remove_typing_indicator() - if(message) - me_verb(message) diff --git a/code/modules/mob/update_icons.dm b/code/modules/mob/update_icons.dm deleted file mode 100644 index d2b78624b7729..0000000000000 --- a/code/modules/mob/update_icons.dm +++ /dev/null @@ -1,65 +0,0 @@ -//Most of these are defined at this level to reduce on checks elsewhere in the code. -//Having them here also makes for a nice reference list of the various overlay-updating procs available - -/mob/proc/regenerate_icons() //TODO: phase this out completely if possible - return - -/mob/proc/update_icons() - return - -/mob/proc/update_hud() - return - -/mob/proc/update_inv_handcuffed() - return - -/mob/proc/update_inv_back() - return - -/mob/proc/update_inv_l_hand() - return - -/mob/proc/update_inv_r_hand() - return - -/mob/proc/update_inv_wear_mask() - return - -/mob/proc/update_inv_wear_suit() - return - -/mob/proc/update_inv_w_uniform() - return - -/mob/proc/update_inv_belt() - return - -/mob/proc/update_inv_head() - return - -/mob/proc/update_inv_gloves() - return - -/mob/proc/update_mutations() - return - -/mob/proc/update_inv_wear_id() - return - -/mob/proc/update_inv_shoes() - return - -/mob/proc/update_inv_glasses() - return - -/mob/proc/update_inv_s_store() - return - -/mob/proc/update_inv_pockets() - return - -/mob/proc/update_inv_ears() - return - -/mob/proc/update_targeted() - return diff --git a/code/modules/modular_computers/NTNet/NTNRC/conversation.dm b/code/modules/modular_computers/NTNet/NTNRC/conversation.dm deleted file mode 100644 index b4d775e66ba70..0000000000000 --- a/code/modules/modular_computers/NTNet/NTNRC/conversation.dm +++ /dev/null @@ -1,67 +0,0 @@ -var/global/ntnrc_uid = 0 - -/datum/ntnet_conversation - var/id = null - var/title = "Untitled Conversation" - var/datum/computer_file/program/chatclient/operator // "Administrator" of this channel. Creator starts as channel's operator, - var/list/messages = list() - var/list/clients = list() - var/password - var/source_z - -/datum/ntnet_conversation/New(var/_z) - source_z = _z - id = ntnrc_uid - ntnrc_uid++ - if(ntnet_global) - ntnet_global.chat_channels.Add(src) - ..() - -/datum/ntnet_conversation/proc/add_message(var/message, var/username) - message = "[stationtime2text()] [username]: [message]" - messages.Add(message) - trim_message_list() - -/datum/ntnet_conversation/proc/add_status_message(var/message) - messages.Add("[stationtime2text()] -!- [message]") - trim_message_list() - -/datum/ntnet_conversation/proc/trim_message_list() - if(messages.len <= 50) - return - messages.Cut(1, (messages.len-49)) - -/datum/ntnet_conversation/proc/add_client(var/datum/computer_file/program/chatclient/C) - if(!istype(C)) - return - clients.Add(C) - add_status_message("[C.username] has joined the channel.") - // No operator, so we assume the channel was empty. Assign this user as operator. - if(!operator) - changeop(C) - -/datum/ntnet_conversation/proc/remove_client(var/datum/computer_file/program/chatclient/C) - if(!istype(C) || !(C in clients)) - return - clients.Remove(C) - add_status_message("[C.username] has left the channel.") - - // Channel operator left, pick new operator - if(C == operator) - operator = null - if(clients.len) - var/datum/computer_file/program/chatclient/newop = pick(clients) - changeop(newop) - - -/datum/ntnet_conversation/proc/changeop(var/datum/computer_file/program/chatclient/newop) - if(istype(newop)) - operator = newop - add_status_message("Channel operator status transferred to [newop.username].") - -/datum/ntnet_conversation/proc/change_title(var/newtitle, var/datum/computer_file/program/chatclient/client) - if(operator != client) - return 0 // Not Authorised - - add_status_message("[client.username] has changed channel title from [title] to [newtitle]") - title = newtitle \ No newline at end of file diff --git a/code/modules/modular_computers/NTNet/NTNet.dm b/code/modules/modular_computers/NTNet/NTNet.dm deleted file mode 100644 index d02a5f6cfa42f..0000000000000 --- a/code/modules/modular_computers/NTNet/NTNet.dm +++ /dev/null @@ -1,287 +0,0 @@ -var/global/datum/ntnet/ntnet_global = new() - - -// This is the NTNet datum. There can be only one NTNet datum in game at once. Modular computers read data from this. -/datum/ntnet - var/list/relays = list() - var/list/logs = list() - var/list/available_station_software = list() - var/list/available_software_by_category = list() - var/list/available_antag_software = list() - var/list/available_news = list() - var/list/chat_channels = list() - var/list/fileservers = list() - /// Holds all the email accounts that exists. Hopefully won't exceed 999 - var/list/email_accounts = list() - /// A list containing one of each available report datums, used for the report editor program. - var/list/available_reports = list() - var/list/banned_nids = list() - /// A list of nid - os datum pairs. An OS in this list is not necessarily connected to NTNet or visible on it. - var/list/registered_nids = list() - /// Amount of log entries the system tries to keep in memory. Keep below 999 to prevent byond from acting weirdly. High values make displaying logs much laggier. - var/setting_maxlogcount = 100 - - /// Programs requiring NTNET_SOFTWAREDOWNLOAD won't work if this is set to FALSE and public-facing device they are connecting with is wireless. - var/setting_softwaredownload = TRUE - /// Programs requiring NTNET_PEERTOPEER won't work if this is set to FALSE and public-facing device they are connecting with is wireless. - var/setting_peertopeer = TRUE - /// Programs requiring NTNET_COMMUNICATION won't work if this is set to FALSE and public-facing device they are connecting with is wireless. - var/setting_communication = TRUE - /// Programs requiring NTNET_SYSTEMCONTROL won't work if this is set to FALSE and public-facing device they are connecting with is wireless. - var/setting_systemcontrol = TRUE - - /// Setting to TRUE will disable all wireless connections, independently off relays status. - var/setting_disabled = FALSE - - /// Whether the IDS warning system is enabled - var/intrusion_detection_enabled = TRUE - /// Set when there is an IDS warning due to malicious (antag) software. - var/intrusion_detection_alarm = FALSE - -// 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 SSmachines.machinery) - relays.Add(R) - R.NTNet = src - build_software_lists() - build_emails_list() - build_reports_list() - add_log("NTNet logging system activated.") - -/datum/ntnet/proc/add_log_with_ids_check(log_string, obj/item/stock_parts/computer/network_card/source = null, intrusion = TRUE) - if(intrusion_detection_enabled) - add_log("IDS NOTICE: " + log_string, source) - if (intrusion) - intrusion_detection_alarm = TRUE - -/// Simplified logging: Adds a log. log_string is mandatory parameter, source is optional. Returns TRUE on success. -/datum/ntnet/proc/add_log(log_string, obj/item/stock_parts/computer/network_card/source = null) - var/log_text = "[stationtime2text()] - " - if(source) - log_text += "[source.get_network_tag()] - " - else - log_text += "*SYSTEM* - " - log_text += log_string - logs.Add(log_text) - - if(logs.len > setting_maxlogcount) - // We have too many logs, remove the oldest entries until we get into the limit - for(var/L in logs) - if(logs.len > setting_maxlogcount) - logs.Remove(L) - else - break - - // Log entries are backed up on portable drives in every relay, if present. - for(var/obj/machinery/ntnet_relay/R in ntnet_global.relays) - var/obj/item/stock_parts/computer/hard_drive/portable/P = R.get_component_of_type(/obj/item/stock_parts/computer/hard_drive/portable) - if(istype(P)) - P.update_data_file("ntnet_log", "[log_text]\[br\]", /datum/computer_file/data/logfile) - return TRUE - -/datum/ntnet/proc/get_os_by_nid(NID) - return registered_nids["[NID]"] - -/datum/ntnet/proc/register(NID, datum/extension/interactive/ntos/os) - registered_nids["[NID]"] = os - -/datum/ntnet/proc/unregister(NID) - registered_nids -= "[NID]" - -/datum/ntnet/proc/check_banned(NID) - if(!relays || !relays.len) - return FALSE - - for(var/obj/machinery/ntnet_relay/R in relays) - if(R.operable()) - return (NID in banned_nids) - - return FALSE - -/// Checks whether NTNet operates. -/datum/ntnet/proc/check_function() - if(!relays || !relays.len) // No relays found. NTNet is down for wireless devices - return FALSE - - var/operating = FALSE - // Check all relays. If we have at least one working relay, network is up. - for(var/obj/machinery/ntnet_relay/R in relays) - if(R.operable()) - operating = TRUE - break - - if(setting_disabled) - return FALSE - return operating - -/// Checks whether NTNet allows a specific action over wireless connections -/datum/ntnet/proc/check_capability(specific_action) - switch(specific_action) - if(NTNET_SOFTWAREDOWNLOAD) - return setting_softwaredownload - if(NTNET_PEERTOPEER) - return setting_peertopeer - if(NTNET_COMMUNICATION) - return setting_communication - if(NTNET_SYSTEMCONTROL) - return setting_systemcontrol - return FALSE - -/// Builds lists that contain downloadable software. -/datum/ntnet/proc/build_software_lists() - available_station_software = list() - available_antag_software = list() - for(var/F in typesof(/datum/computer_file/program)) - var/datum/computer_file/program/prog = new F - // Invalid type (shouldn't be possible but just in case), invalid filetype (not executable program) or invalid filename (unset program) - if(!prog || !istype(prog) || prog.filename == "UnknownProgram" || prog.filetype != "PRG") - continue - // Check whether the program should be available for station/antag download, if yes, add it to lists. - if(prog.available_on_ntnet) - var/list/category_list = available_software_by_category[prog.category] - if(!category_list) - category_list = list() - available_software_by_category[prog.category] = category_list - ADD_SORTED(available_station_software, prog, /proc/cmp_program) - ADD_SORTED(category_list, prog, /proc/cmp_program) - if(prog.available_on_syndinet) - ADD_SORTED(available_antag_software, prog, /proc/cmp_program) - -/// Generates service email list. -/datum/ntnet/proc/build_emails_list() - for(var/F in subtypesof(/datum/computer_file/data/email_account/service)) - new F() - -/// Builds report list. -/datum/ntnet/proc/build_reports_list() - available_reports = list() - for(var/F in typesof(/datum/computer_file/report)) - var/datum/computer_file/report/type = F - if(initial(type.available_on_ntnet)) - available_reports += new type - -/datum/ntnet/proc/fetch_reports(access) - if(!access) - return available_reports - . = list() - for(var/datum/computer_file/report/report in available_reports) - if(report.verify_access_edit(access)) - . += report - -/// Attempts to find a downloadable file according to filename var -/datum/ntnet/proc/find_ntnet_file_by_name(filename) - for(var/datum/computer_file/program/P in available_station_software) - if(filename == P.filename) - return P - for(var/datum/computer_file/program/P in available_antag_software) - if(filename == P.filename) - return P - -/// Resets the IDS alarm -/datum/ntnet/proc/resetIDS() - intrusion_detection_alarm = 0 - add_log("-!- INTRUSION DETECTION ALARM RESET BY SYSTEM OPERATOR -!-") - -/// Toggle IDS on or off -/datum/ntnet/proc/toggleIDS() - resetIDS() - intrusion_detection_enabled = !intrusion_detection_enabled - add_log("Configuration Updated. Intrusion Detection [intrusion_detection_enabled ? "enabled" : "disabled"].") - -/// Removes all logs -/datum/ntnet/proc/purge_logs() - logs = list() - add_log("-!- LOGS DELETED BY SYSTEM OPERATOR -!-") - -/// Updates maximal amount of stored logs. Use this instead of setting the number, it performs required checks. Returns TRUE if number is updated. FALSE otherwise. -/datum/ntnet/proc/update_max_log_count(lognumber) - if(!lognumber) - return FALSE - // Trim the value if necessary - lognumber = clamp(lognumber, MIN_NTNET_LOGS, MAX_NTNET_LOGS) - setting_maxlogcount = lognumber - add_log("Configuration Updated. Now keeping [setting_maxlogcount] log entries in system memory.") - return TRUE - -/datum/ntnet/proc/toggle_function(function) - if(!function) - return - function = text2num(function) - switch(function) - if(NTNET_SOFTWAREDOWNLOAD) - setting_softwaredownload = !setting_softwaredownload - add_log("Configuration Updated. Wireless network firewall now [setting_softwaredownload ? "allows" : "disallows"] connection to software repositories.") - if(NTNET_PEERTOPEER) - setting_peertopeer = !setting_peertopeer - add_log("Configuration Updated. Wireless network firewall now [setting_peertopeer ? "allows" : "disallows"] peer to peer network traffic.") - if(NTNET_COMMUNICATION) - setting_communication = !setting_communication - add_log("Configuration Updated. Wireless network firewall now [setting_communication ? "allows" : "disallows"] instant messaging and similar communication services.") - if(NTNET_SYSTEMCONTROL) - setting_systemcontrol = !setting_systemcontrol - add_log("Configuration Updated. Wireless network firewall now [setting_systemcontrol ? "allows" : "disallows"] remote control of [station_name()]'s systems.") - -/// Returns email account matching login. Otherwise null -/datum/ntnet/proc/find_email_by_name(login) - for(var/datum/computer_file/data/email_account/A in ntnet_global.email_accounts) - if(A.login == login) - return A - -/// Used when a mob or robot is renamed. Not intended to be used by any ingame computer systems -/datum/ntnet/proc/rename_email(mob/user, old_login, desired_name, domain) - var/datum/computer_file/data/email_account/account = find_email_by_name(old_login) - var/new_login = sanitize_for_email(desired_name) - new_login += "@[domain]" - if(new_login == old_login) - return //If we aren't going to be changing the login, we quit silently. - if(find_email_by_name(new_login)) - to_chat(user, "Your email could not be updated: the new username is invalid.") - return - account.login = new_login - to_chat(user, "Your email account address has been changed to [new_login]. This information has also been placed into your notes.") - add_log("Email address changed for [user]: [old_login] changed to [new_login]") - if(user.mind) - user.mind.initial_email_login["login"] = new_login - user.StoreMemory("Your email account address has been changed to [new_login].", /decl/memory_options/system) - if(issilicon(user)) - var/mob/living/silicon/S = user - var/datum/nano_module/email_client/my_client = S.get_subsystem_from_path(/datum/nano_module/email_client) - if(my_client) - my_client.stored_login = new_login - -/// Used for initial email generation. Not intended to be used by any ingame computer systems -/datum/ntnet/proc/create_email(mob/user, desired_name, domain, assignment, desired_password) - desired_name = sanitize_for_email(desired_name) - var/login = "[desired_name]@[domain]" - // It is VERY unlikely that we'll have two players, in the same round, with the same name and branch, but still, this is here. - // If such conflict is encountered, a random number will be appended to the email address. If this fails too, no email account will be created. - if(find_email_by_name(login)) - login = "[desired_name][random_id(/datum/computer_file/data/email_account, 100, 999)]@[domain]" - // If even fallback login generation failed, just don't give them an email. The chance of this happening is astronomically low. - if(find_email_by_name(login)) - to_chat(user, "You were not assigned an email address.") - user.StoreMemory("You were not assigned an email address.", /decl/memory_options/system) - else - var/datum/computer_file/data/email_account/EA = new/datum/computer_file/data/email_account(login, user.real_name, assignment) - EA.password = desired_password ? desired_password : GenerateKey() - if(user.mind) - user.mind.initial_email_login["login"] = EA.login - user.mind.initial_email_login["password"] = EA.password - user.StoreMemory("Your email account address is [EA.login] and the password is [EA.password].", /decl/memory_options/system) - if(issilicon(user)) - var/mob/living/silicon/S = user - var/datum/nano_module/email_client/my_client = S.get_subsystem_from_path(/datum/nano_module/email_client) - if(my_client) - my_client.stored_login = EA.login - my_client.stored_password = EA.password - -/mob/proc/create_or_rename_email(newname, domain) - if(!mind) - return - var/old_email = mind.initial_email_login["login"] - if(!old_email) - ntnet_global.create_email(src, newname, domain) - else - ntnet_global.rename_email(src, old_email, newname, domain) diff --git a/code/modules/modular_computers/NTNet/NTNet_relay.dm b/code/modules/modular_computers/NTNet/NTNet_relay.dm deleted file mode 100644 index 3b101840e6852..0000000000000 --- a/code/modules/modular_computers/NTNet/NTNet_relay.dm +++ /dev/null @@ -1,125 +0,0 @@ -// Relays don't handle any actual communication. Global NTNet datum does that, relays only tell the datum if it should or shouldn't work. -/obj/machinery/ntnet_relay - name = "NTNet Quantum Relay" - desc = "A very complex router and transmitter capable of connecting electronic devices together. Looks fragile." - use_power = POWER_USE_ACTIVE - active_power_usage = 20000 //20kW, apropriate for machine that keeps massive cross-Zlevel wireless network operational. - idle_power_usage = 100 - icon_state = "bus" - anchored = TRUE - density = TRUE - construct_state = /decl/machine_construction/default/panel_closed - uncreated_component_parts = null - stat_immune = 0 - machine_name = "\improper NTNet quantum relay" - machine_desc = "Maintains a copy of proprietary software used to provide NTNet service to all valid devices in the region. Essentially a huge router." - /// Reference to NTNet. This is mostly for backwards reference and to allow varedit modifications from ingame. - var/datum/ntnet/NTNet = null - /// Set to FALSE if the relay was turned off - var/enabled = TRUE - /// Set to TRUE if the relay failed due to (D)DoS attack - var/dos_failure = FALSE - /// List of backwards reference for qdel() stuff - var/list/dos_sources = list() - - /// Amount of DoS "packets" in this relay's buffer. - var/dos_overload = 0 - /// Amount of DoS "packets" in buffer required to crash the relay. - var/dos_capacity = 500 - /// Amount of DoS "packets" dissipated over time. - var/dos_dissipate = 1 - -// TODO: Implement more logic here. For now it's only a placeholder. -/obj/machinery/ntnet_relay/operable() - if(!..(EMPED)) - return FALSE - if(dos_failure) - return FALSE - if(!enabled) - return FALSE - return TRUE - -/obj/machinery/ntnet_relay/on_update_icon() - if(operable()) - icon_state = "bus" - else - icon_state = "bus_off" - -/obj/machinery/ntnet_relay/Process() - if(operable()) - update_use_power(POWER_USE_ACTIVE) - else - update_use_power(POWER_USE_IDLE) - - if(dos_overload) - dos_overload = max(0, dos_overload - dos_dissipate) - - // If DoS traffic exceeded capacity, crash. - if((dos_overload > dos_capacity) && !dos_failure) - dos_failure = TRUE - update_icon() - ntnet_global.add_log("Quantum relay ([uid]) 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 = FALSE - update_icon() - ntnet_global.add_log("Quantum relay ([uid]) switched from overload recovery mode to normal operation mode.") - -/obj/machinery/ntnet_relay/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1, var/datum/topic_state/state = GLOB.default_state) - var/list/data = list() - data["enabled"] = enabled - data["dos_capacity"] = dos_capacity - data["dos_overload"] = dos_overload - data["dos_crashed"] = dos_failure - data["portable_drive"] = !!get_component_of_type(/obj/item/stock_parts/computer/hard_drive/portable) - - ui = SSnano.try_update_ui(user, src, ui_key, ui, data, force_open) - if (!ui) - ui = new(user, src, ui_key, "ntnet_relay.tmpl", "NTNet Quantum Relay", 500, 300, state = state) - ui.set_initial_data(data) - ui.open() - ui.set_auto_update(1) - -/obj/machinery/ntnet_relay/interface_interact(var/mob/living/user) - ui_interact(user) - return TRUE - -/obj/machinery/ntnet_relay/Topic(href, href_list) - if(..()) - return TOPIC_HANDLED - if(href_list["restart"]) - dos_overload = 0 - dos_failure = FALSE - update_icon() - ntnet_global.add_log("Quantum relay ([uid]) manually restarted from overload recovery mode to normal operation mode.") - return TOPIC_HANDLED - else if(href_list["toggle"]) - enabled = !enabled - ntnet_global.add_log("Quantum relay ([uid]) manually [enabled ? "enabled" : "disabled"].") - update_icon() - return TOPIC_HANDLED - else if(href_list["purge"]) - ntnet_global.banned_nids.Cut() - ntnet_global.add_log("Override: Network blacklist manually cleared from Quantum relay ([uid]).") - return TOPIC_HANDLED - else if(href_list["eject_drive"] && uninstall_component(/obj/item/stock_parts/computer/hard_drive/portable)) - visible_message("[icon2html(src, viewers(get_turf(src)))] [src] beeps and ejects its portable disk.") - -/obj/machinery/ntnet_relay/New() - uid = gl_uid - gl_uid++ - if(ntnet_global) - ntnet_global.relays.Add(src) - NTNet = ntnet_global - ntnet_global.add_log("New Quantum Relay ([uid]) 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 ([uid]) connection severed. Current amount of linked relays: [NTNet.relays.len]") - NTNet = null - for(var/datum/computer_file/program/ntnet_dos/D in dos_sources) - D.target = null - D.error = "Connection to quantum relay severed" - ..() \ No newline at end of file diff --git a/code/modules/modular_computers/NTNet/emails/email_account.dm b/code/modules/modular_computers/NTNet/emails/email_account.dm deleted file mode 100644 index a1dc5d914c18d..0000000000000 --- a/code/modules/modular_computers/NTNet/emails/email_account.dm +++ /dev/null @@ -1,113 +0,0 @@ -/datum/computer_file/data/email_account - var/list/inbox = list() - var/list/outbox = list() - var/list/spam = list() - var/list/deleted = list() - - var/login = "" - var/password = "" - /// Whether you can log in with this account. Set to FALSE for system accounts. - var/can_login = TRUE - /// Whether the account is banned by the SA. - var/suspended = FALSE - var/connected_clients = list() - - var/fullname = "N/A" - var/assignment = "N/A" - - var/notification_mute = FALSE - var/notification_sound = "*beep*" - -/datum/computer_file/data/email_account/calculate_size() - size = 1 - for(var/datum/computer_file/data/email_message/stored_message in all_emails()) - stored_message.calculate_size() - size += stored_message.size - -/datum/computer_file/data/email_account/New(_login, _fullname, _assignment) - password = GenerateKey() - if(_login) - login = _login - if(_fullname) - fullname = _fullname - if(_assignment) - assignment = _assignment - ADD_SORTED(ntnet_global.email_accounts, src, /proc/cmp_emails_asc) - ..() - -/datum/computer_file/data/email_account/Destroy() - ntnet_global.email_accounts.Remove(src) - . = ..() - -/datum/computer_file/data/email_account/proc/all_emails() - return (inbox | spam | deleted | outbox) - -/datum/computer_file/data/email_account/proc/send_mail(recipient_address, datum/computer_file/data/email_message/message, relayed = 0) - if(suspended) - return FALSE - - var/datum/computer_file/data/email_account/recipient - for(var/datum/computer_file/data/email_account/account in ntnet_global.email_accounts) - if(account.login == recipient_address) - recipient = account - break - - if(!istype(recipient)) - return FALSE - - if(!recipient.receive_mail(message, relayed)) - return FALSE - - outbox.Add(message) - ntnet_global.add_log_with_ids_check("EMAIL LOG: [login] -> [recipient.login] title: [message.title].", intrusion = FALSE) - return TRUE - -/datum/computer_file/data/email_account/proc/receive_mail(var/datum/computer_file/data/email_message/received_message, var/relayed) - received_message.set_timestamp() - if(!ntnet_global.intrusion_detection_enabled) - inbox.Add(received_message) - return TRUE - // Spam filters may occassionally let something through, or mark something as spam that isn't spam. - var/mark_spam = FALSE - if(received_message.spam) - if(prob(98)) - mark_spam = TRUE - else - if(prob(1)) - mark_spam = TRUE - - if(mark_spam) - spam.Add(received_message) - else - inbox.Add(received_message) - for(var/datum/nano_module/email_client/ec in connected_clients) - ec.mail_received(received_message) - return TRUE - -// Address namespace (@internal-services.net) for email addresses with special purpose only!. -/datum/computer_file/data/email_account/service - can_login = FALSE - -/datum/computer_file/data/email_account/service/broadcaster - login = EMAIL_BROADCAST - -/datum/computer_file/data/email_account/service/broadcaster/receive_mail(var/datum/computer_file/data/email_message/received_message, var/relayed) - if(suspended || !istype(received_message) || relayed) - return FALSE - // Possibly exploitable for user spamming so keep admins informed. - if(!received_message.spam) - log_and_message_admins("Broadcast email address used by [usr]. Message title: [received_message.title].") - - spawn(0) - for(var/datum/computer_file/data/email_account/email_account in ntnet_global.email_accounts) - var/datum/computer_file/data/email_message/new_message = received_message.clone() - send_mail(email_account.login, new_message, 1) - sleep(2) - - return TRUE - -/datum/computer_file/data/email_account/service/document - login = EMAIL_DOCUMENTS - -/datum/computer_file/data/email_account/service/sysadmin - login = EMAIL_SYSADMIN diff --git a/code/modules/modular_computers/NTNet/emails/email_message.dm b/code/modules/modular_computers/NTNet/emails/email_message.dm deleted file mode 100644 index 67d3eac019790..0000000000000 --- a/code/modules/modular_computers/NTNet/emails/email_message.dm +++ /dev/null @@ -1,30 +0,0 @@ -// Currently not actually represented in file systems, though the support for it is in place already. -/datum/computer_file/data/email_message - stored_data = "" - var/title = "" - var/source = "" - var/spam = FALSE - var/timestamp = "" - var/datum/computer_file/attachment = null - -/datum/computer_file/data/email_message/clone() - var/datum/computer_file/data/email_message/temp = ..() - temp.title = title - temp.source = source - temp.spam = spam - temp.timestamp = timestamp - if(attachment) - temp.attachment = attachment.clone() - return temp - -// Turns /email_message/ file into regular /data/ file. -/datum/computer_file/data/email_message/proc/export() - var/datum/computer_file/data/dat = new/datum/computer_file/data/text() - dat.stored_data = "Received from [source] at [timestamp]." - dat.stored_data += "\[b\][title]\[/b\]" - dat.stored_data += stored_data - dat.calculate_size() - return dat - -/datum/computer_file/data/email_message/proc/set_timestamp() - timestamp = stationtime2text() diff --git a/code/modules/modular_computers/_description.dm b/code/modules/modular_computers/_description.dm deleted file mode 100644 index 1eb9e23c9e24c..0000000000000 --- a/code/modules/modular_computers/_description.dm +++ /dev/null @@ -1,121 +0,0 @@ -/* -Program-based computers, designed to replace computer3 project and eventually most consoles on station - - -1. Basic information -Program based computers will allow you to do multiple things from single computer. Each computer will have programs, with more being downloadable from NTNet (stationwide network with wireless coverage) -if user has apropriate ID card access. It will be possible to hack the computer by using an emag on it - the emag will have to be completely new and will be consumed on use, but it will -lift ALL locks on ALL installed programs, and allow download of programs even if your ID doesn't have access to them. Computers will have hard drives that can store files. -Files can be programs (datum/computer_file/program/ subtype) or data files (datum/computer_file/data/ subtypes). Program for sending files will be available that will allow transfer via NTNet. -NTNet coverage will be limited to station's Z level, but better network card (=more expensive and higher power use) will allow usage everywhere. Hard drives will have limited capacity for files -which will be related to how good hard drive you buy when purchasing the laptop. For storing more files USB-style drives will be buildable with Protolathe in research. - -2. Available devices -CONSOLES -Consoles will come in various pre-fabricated loadouts, each loadout starting with certain set of programs (aka Engineering console, Medical console, etc.), of course, more software may be downloaded. -Consoles won't usually have integrated battery, but the possibility to install one will exist for critical applications. Consoles are considered hardwired into NTNet network which means they -will have working coverage on higher speed (Ethernet is faster than Wi-Fi) and won't require wireless coverage to exist. -LAPTOPS -Laptops are middle ground between actual portable devices and full consoles. They offer certain level of mobility, as they can be closed, moved somewhere else and then opened again. -Laptops will by default have internal battery to power them, and may be recharged with rechargers. However, laptops rely on wireless NTNet coverage. Laptop HDDs are also designed with power efficiency -in mind, which means they sacrifice some storage space for higher battery life. Laptops may be dispensed from computer vendor machine, and may be customised before vending. For people which don't -want to rely on internal battery, tesla link exists that connects to APC, if one exists. -TABLETS -Tablets are smallest available devices, designed with full mobility in mind. Tablets have only weak CPU which means the software they can run is somewhat limited. They are also designed with high -battery life in mind, which means the hardware focuses on power efficiency rather than high performance. This is most visible with hard drives which have quite small storage capacity. -Tablets can't be equipped with tesla link, which means they have to be recharged manually. - - -3. Computer Hardware -Computers will come with basic hardware installed, with upgrades being selectable when purchasing the device. -Hard Drive: Stores data, mandatory for the computer to work -Network Card: Connects to NTNet -Battery: Internal power source that ensures the computer operates when not connected to APC. -Extras (those won't be installed by default, but can be bought) -ID Card Slot: Required for HoP-style programs to work. Access for security record-style programs is read from ID of user [RFID?] without requiring this -APC Tesla Relay: Wirelessly powers the device from APC. Consoles have it by default. Laptops can buy it. -Disk Drive: Allows usage of portable data disks. -Nano Printer: Allows the computer to scan paper contents and save them to file, as well as recycle papers and print stuff on it. - -4. NTNet -NTNet is stationwide network that allows users to download programs needed for their work. It will be possible to send any files to other active computers using relevant program (NTN Transfer). -NTNet is under jurisdiction of both Engineering and Research. Engineering is responsible for any repairs if necessary and research is responsible for monitoring. It is similar to PDA messaging. -Operation requires functional "NTNet Relay" which is by default placed on tcommsat. If the relay is damaged NTNet will be offline until it is replaced. Multiple relays bring extra redundancy, -if one is destroyed the second will take over. If all relays are gone it stops working, simple as that. NTNet may be altered via administration console available to Chief Science Officer. It is -possible to enable/disable Software Downloading, P2P file transfers and Communication (IC version of IRC, PDA messages for more than two people) - -5. Software -Software would almost exclusively use NanoUI modules. Few exceptions are text editor (uses similar screen as TCS IDE used for editing and classic HTML for previewing as Nano looks differently) -and similar programs which for some reason require HTML UI. Most software will be highly dependent on NTNet to work as laptops are not physically connected to the station's network. -What i plan to add: - -Note: XXXXDB programs will use ingame_manuals to display basic help for players, similar to how books, etc. do - -Basic - Software in this bundle is automagically preinstalled in every new computer - NTN Transfer - Allows P2P transfer of files to other computers that run this. - Configurator - Allows configuration of computer's hardware, basically status screen. - File Browser - Allows you to browse all files stored on the computer. Allows renaming/deleting of files. - TXT Editor - Allows you editing data files in text editor mode. - NanoPrint - Allows you to operate NanoPrinter hardware to print text files. - NTNRC Chat - NTNet Relay Chat client. Allows PDA-messaging style messaging for more than two users. Person which created the conversation is Host and has administrative privilegies (kicking, etc.) - NTNet News - Allows reading news from newscaster network. - -Engineering - Requires "Engineering" access on ID card (ie. CE, Atmostech, Engineer) - Alarm Monitor - Allows monitoring alarms, same as the stationbound one. - Power Monitor - Power monitoring computer, connects to sensors in same way as regular one does. - Atmospheric Control - Allows access to the Atmospherics Monitor Console that operates air alarms. Requires extra access: "Atmospherics" - RCON Remote Control Console - Allows access to the RCON Remote Control Console. Requires extra access: "Power Equipment" - EngiDB - Allows accessing NTNet information repository for information about engineering-related things. - -Medical - Requires "Medbay" access on ID card (ie. CMO, Doctor,..) - Medical Records Uplink - Allows editing/reading of medical records. Printing requires NanoPrinter hardware. - MediDB - Allows accessing NTNet information repository for information about medical procedures - ChemDB - Requires extra access: "Chemistry" - Downloads basic information about recipes from NTNet - -Research - Requires "Research and Development" access on ID card (ie. RD, Roboticist, etc.) - Research Server Monitor - Allows monitoring of research levels on RnD servers. (read only) - Robotics Monitor Console - Allows monitoring of robots and exosuits. Lockdown/Self-Destruct options are unavailable [balance reasons for malf/traitor AIs]. Requires extra access: "Robotics" - NTNRC Administration Console - Allows administrative access to NTNRC. This includes bypassing any channel passwords and enabling "invisible" mode for spying on conversations. Requires extra access: "Chief Science Officer" - NTNet Administration Console - Allows remote configuration of NTNet Relay - CAUTION: If NTNet is turned off it won't be possible to turn it on again from the computer, as operation requires NTNet to work! Requires extra access: "Chief Science Officer" - NTNet Monitor - Allows monitoring of NTNet and it's various components, including simplified network logs and system status. - -Security - Requires "Security" access on ID card (ie. HOS, Security officer, Detective) - Security Records Uplink - Allows editing/reading of security records. Printing requires Nanoprinter hardware. - LawDB - Allows accessing NTNet information repository for security information (corporate regulations) - Camera Uplink - Allows viewing cameras around the station. - -Command - Requires "Bridge" access on ID card (all heads) - Alertcon Access - Allows changing of alert levels. Red requires activation from two computers with two IDs similar to how those wall mounted devices do. - Employment Records Access - Allows reading of employment records. Printing requires NanoPrinter hardware. - Communication Console - Allows sending emergency messages to Central. - Emergency Shuttle Control Console - Allows calling/recalling the emergency shuttle. - Shuttle Control Console - Allows control of various shuttles around the station (mining, research, engineering) - -*REDACTED* - Can be downloaded from SyndiCorp servers, only via emagged devices. These files are very large and limited to laptops/consoles only. - SYSCRACK - Allows cracking of secure network terminals, such as, NTNet administration. The sysadmin will probably notice this. - SYSOVERRIDE - Allows hacking into any device connected to NTNet. User will notice this and may stop the hack by disconnecting from NTNet first. After hacking various options exist, such as stealing/deleting files. - SYSKILL - Tricks NTNet to force-disconnect a device. The sysadmin will probably notice this. - SYSDOS - Launches a Denial of Service attack on NTNet relay. Can DoS only one relay at once. Requires NTNet connection. After some time the relay crashes until attack stops. The sysadmin will probably notice this. - AIHACK - Hacks an AI, allowing you to upload/remove/modify a law even without relevant circuit board. The AI is alerted once the hack starts, and it takes a while for it to complete. Does not work on AIs with zeroth law. - COREPURGE - Deletes all files on the hard drive, including the undeletable ones. Something like software self-destruct for computer. - -6. Security -Laptops will be password-lockable. If password is set a MD5 hash of it is stored and password is required every time you turn on the laptop. -Passwords may be decrypted by using special Decrypter (protolathable, RDs office starts with one) device that will slowly decrypt the password. -Decryption time would be length_of_password * 30 seconds, with maximum being 9 minutes (due to battery life limitations, which is 10+ min). -If decrypted the password is cleared, so you can keep using your favorite password without people ever actually revealing it (for meta prevention reasons mostly). -Emagged laptops will have option to enable "Safe Encryption". If safely encrypted laptop is decrypted it loses it's emag status and 50% of files is deleted (randomly selected). - -7. System Administrator -System Administrator will be new job under Research. It's main specifics will be maintaining of computer systems on station, espicially from software side. -From IC perspective they'd probably know how to build a console or something given they work with computers, but they are mostly programmers/network experts. -They will have office in research, which will probably replace (and contain) the server room and part of the toxins storage which is currently oversized. -They will have access to DOWNLOAD (not run) all programs that exist on NTNet. They'll have fairly good amount of available programs, most of them being -administrative consoles and other very useful things. They'll also be able to monitor NTNet. There will probably be one or two job slots. - -8. IDS -With addition of various antag programs, IDS(Intrusion Detection System) will be added to NTNet. This system can be turned on/off via administration console. -If enabled, this system automatically detects any abnormality and triggers a warning that's visible on the NTNet status screen, as well as generating a security log. -IDS can be disabled by simple on/off switch in the configuration. - -*/ \ No newline at end of file diff --git a/code/modules/modular_computers/computers/modular_computer/core.dm b/code/modules/modular_computers/computers/modular_computer/core.dm deleted file mode 100644 index 9ed6c082f0b07..0000000000000 --- a/code/modules/modular_computers/computers/modular_computer/core.dm +++ /dev/null @@ -1,148 +0,0 @@ -/obj/item/modular_computer/Process() - if(!enabled) // The computer is turned off - last_power_usage = 0 - return - - handle_power() // Handles all power interaction - - if(damage > broken_damage) - shutdown_computer() - return - - var/datum/extension/interactive/ntos/os = get_extension(src, /datum/extension/interactive/ntos) - if(os) - os.Process() - - var/static/list/beepsounds = list('sound/effects/compbeep1.ogg','sound/effects/compbeep2.ogg','sound/effects/compbeep3.ogg','sound/effects/compbeep4.ogg','sound/effects/compbeep5.ogg') - if(enabled && world.time > ambience_last_played + 60 SECONDS && prob(1)) - ambience_last_played = world.time - playsound(src.loc, pick(beepsounds),15,1,10, is_ambiance = 1) - -/obj/item/modular_computer/ui_interact(mob/user, ui_key = "main", datum/nanoui/ui = null, force_open = 1) - var/datum/extension/interactive/ntos/os = get_extension(src, /datum/extension/interactive/ntos) - if(os) - os.ui_interact(user) - -/// Used to perform preset-specific hardware changes. -/obj/item/modular_computer/proc/install_default_hardware() - return - -/// Used to install preset-specific programs -/obj/item/modular_computer/proc/install_default_programs() - return - -/obj/item/modular_computer/proc/install_default_programs_by_job(mob/living/carbon/human/H) - var/datum/job/jb = SSjobs.get_by_title(H.job) - if(!jb) return - for(var/prog_type in jb.software_on_spawn) - var/datum/computer_file/program/prog_file = prog_type - if(initial(prog_file.usage_flags) & hardware_flag) - prog_file = new prog_file - hard_drive.create_file(prog_file) - -/obj/item/modular_computer/Initialize() - START_PROCESSING(SSobj, src) - set_extension(src, /datum/extension/interactive/ntos/device) - - if(stores_pen && ispath(stored_pen)) - stored_pen = new stored_pen(src) - - install_default_hardware() - if(hard_drive) - install_default_programs() - if(scanner) - scanner.do_after_install(null, src) - update_icon() - update_verbs() - update_name() - . = ..() - -/obj/item/modular_computer/Destroy() - QDEL_NULL_LIST(terminals) - STOP_PROCESSING(SSobj, src) - if(istype(stored_pen)) - QDEL_NULL(stored_pen) - for(var/obj/item/stock_parts/computer/CH in src.get_all_components()) - uninstall_component(null, CH) - qdel(CH) - return ..() - -/obj/item/modular_computer/emag_act(remaining_charges, mob/user) - if(computer_emagged) - to_chat(user, "\The [src] was already emagged.") - return NO_EMAG_ACT - else - computer_emagged = TRUE - to_chat(user, "You emag \the [src]. It's screen briefly shows a \"OVERRIDE ACCEPTED: New software downloads available.\" message.") - return 1 - -/obj/item/modular_computer/on_update_icon() - icon_state = icon_state_unpowered - - overlays.Cut() - var/datum/extension/interactive/ntos/os = get_extension(src, /datum/extension/interactive/ntos) - if(os) - overlays += os.get_screen_overlay() - overlays += os.get_keyboard_overlay() - - if(enabled) - set_light(0.2, 0.1, light_strength) - else - set_light(0) - -/obj/item/modular_computer/proc/turn_on(mob/user) - if(bsod) - return - if(tesla_link) - tesla_link.enabled = TRUE - var/issynth = issilicon(user) // Robots and AIs get different activation messages. - if(damage > broken_damage) - if(issynth) - to_chat(user, "You send an activation signal to \the [src], but it responds with an error code. It must be damaged.") - else - to_chat(user, "You press the power button, but the computer fails to boot up, displaying variety of errors before shutting down again.") - return - if(processor_unit && (apc_power(0) || battery_power(0))) // Battery-run and charged or non-battery but powered by APC. - if(issynth) - to_chat(user, "You send an activation signal to \the [src], turning it on.") - else - to_chat(user, "You press the power button and start up \the [src].") - enable_computer(user) - - else // Unpowered - if(issynth) - to_chat(user, "You send an activation signal to \the [src] but it does not respond.") - else - to_chat(user, "You press the power button but \the [src] does not respond.") - -/obj/item/modular_computer/proc/shutdown_computer(loud = 1) - QDEL_NULL_LIST(terminals) - - if(loud) - visible_message("\The [src] shuts down.", range = 1) - - enabled = FALSE - var/datum/extension/interactive/ntos/os = get_extension(src, /datum/extension/interactive/ntos) - if(os) - os.system_shutdown() - -/obj/item/modular_computer/proc/enable_computer(mob/user = null) - enabled = TRUE - var/datum/extension/interactive/ntos/os = get_extension(src, /datum/extension/interactive/ntos) - if(os) - os.system_boot() - - update_icon() - - if(user) - ui_interact(user) - -/obj/item/modular_computer/GetIdCard() - if(card_slot && card_slot.can_broadcast && istype(card_slot.stored_card) && card_slot.check_functionality()) - return card_slot.stored_card - -/obj/item/modular_computer/proc/update_name() - -/obj/item/modular_computer/get_cell() - if(battery_module) - return battery_module.get_cell() diff --git a/code/modules/modular_computers/computers/modular_computer/damage.dm b/code/modules/modular_computers/computers/modular_computer/damage.dm deleted file mode 100644 index 9e3ac90aaf1ee..0000000000000 --- a/code/modules/modular_computers/computers/modular_computer/damage.dm +++ /dev/null @@ -1,59 +0,0 @@ -/obj/item/modular_computer/examine(mob/user) - . = ..() - if(damage > broken_damage) - to_chat(user, "It is heavily damaged!") - else if(damage) - to_chat(user, "It is damaged.") - -/obj/item/modular_computer/proc/break_apart() - visible_message("\The [src] breaks apart!") - var/turf/newloc = get_turf(src) - new /obj/item/stack/material/steel(newloc, round(steel_sheet_cost/2)) - for(var/obj/item/stock_parts/computer/H in get_all_components()) - uninstall_component(null, H) - H.forceMove(newloc) - if(prob(25)) - H.take_damage(rand(10,30)) - qdel(src) - -/obj/item/modular_computer/proc/take_damage(var/amount, var/component_probability, var/damage_casing = 1, var/randomize = 1) - if(!modifiable) - return - - if(randomize) - // 75%-125%, rand() works with integers, apparently. - amount *= (rand(75, 125) / 100.0) - amount = round(amount) - if(damage_casing) - damage += amount - damage = clamp(damage, 0, max_damage) - - if(component_probability) - for(var/obj/item/stock_parts/computer/H in get_all_components()) - if(prob(component_probability)) - H.take_damage(round(amount / 2)) - - if(damage >= max_damage) - break_apart() - -// Stronger explosions cause serious damage to internal components -// Minor explosions are mostly mitigitated by casing. -/obj/item/modular_computer/ex_act(var/severity) - take_damage(rand(100,200) / severity, 30 / severity) - -// EMPs are similar to explosions, but don't cause physical damage to the casing. Instead they screw up the components -/obj/item/modular_computer/emp_act(var/severity) - take_damage(rand(100,200) / severity, 50 / severity, 0) - ..() - -// "Stun" weapons can cause minor damage to components (short-circuits?) -// "Burn" damage is equally strong against internal components and exterior casing -// "Brute" damage mostly damages the casing. -/obj/item/modular_computer/bullet_act(var/obj/item/projectile/Proj) - switch(Proj.damage_type) - if (DAMAGE_BRUTE) - take_damage(Proj.damage, Proj.damage / 2) - if (DAMAGE_PAIN) - take_damage(Proj.damage, Proj.damage / 3, 0) - if (DAMAGE_BURN) - take_damage(Proj.damage, Proj.damage / 1.5) diff --git a/code/modules/modular_computers/computers/modular_computer/hardware.dm b/code/modules/modular_computers/computers/modular_computer/hardware.dm deleted file mode 100644 index 6fddadf438876..0000000000000 --- a/code/modules/modular_computers/computers/modular_computer/hardware.dm +++ /dev/null @@ -1,169 +0,0 @@ -// Attempts to install the hardware into apropriate slot. -/obj/item/modular_computer/proc/try_install_component(var/mob/living/user, var/obj/item/stock_parts/computer/H, var/found = 0) - if(!(H.usage_flags & hardware_flag)) - to_chat(user, "This computer isn't compatible with [H].") - return - - // "USB" flash drive. - if(istype(H, /obj/item/stock_parts/computer/hard_drive/portable)) - if(portable_drive) - to_chat(user, "This computer's portable drive slot is already occupied by \the [portable_drive].") - return - found = 1 - portable_drive = H - else if(istype(H, /obj/item/stock_parts/computer/hard_drive)) - if(hard_drive) - to_chat(user, "This computer's hard drive slot is already occupied by \the [hard_drive].") - return - found = 1 - hard_drive = H - else if(istype(H, /obj/item/stock_parts/computer/network_card)) - if(network_card) - to_chat(user, "This computer's network card slot is already occupied by \the [network_card].") - return - found = 1 - network_card = H - else if(istype(H, /obj/item/stock_parts/computer/nano_printer)) - if(nano_printer) - to_chat(user, "This computer's nano printer slot is already occupied by \the [nano_printer].") - return - found = 1 - nano_printer = H - else if(istype(H, /obj/item/stock_parts/computer/card_slot)) - if(card_slot) - to_chat(user, "This computer's card slot is already occupied by \the [card_slot].") - return - found = 1 - card_slot = H - else if(istype(H, /obj/item/stock_parts/computer/battery_module)) - if(battery_module) - to_chat(user, "This computer's battery slot is already occupied by \the [battery_module].") - return - found = 1 - battery_module = H - else if(istype(H, /obj/item/stock_parts/computer/processor_unit)) - if(processor_unit) - to_chat(user, "This computer's processor slot is already occupied by \the [processor_unit].") - return - found = 1 - processor_unit = H - else if(istype(H, /obj/item/stock_parts/computer/ai_slot)) - if(ai_slot) - to_chat(user, "This computer's intellicard slot is already occupied by \the [ai_slot].") - return - found = 1 - ai_slot = H - else if(istype(H, /obj/item/stock_parts/computer/tesla_link)) - if(tesla_link) - to_chat(user, "This computer's tesla link slot is already occupied by \the [tesla_link].") - return - found = 1 - tesla_link = H - else if(istype(H, /obj/item/stock_parts/computer/scanner)) - if(scanner) - to_chat(user, "This computer's scanner slot is already occupied by \the [scanner].") - return - found = 1 - scanner = H - scanner.do_after_install(user, src) - if(found && user.unEquip(H, src)) - to_chat(user, "You install \the [H] into \the [src]") - update_verbs() - -// Uninstalls component. Found and Critical vars may be passed by parent types, if they have additional hardware. -/obj/item/modular_computer/proc/uninstall_component(var/mob/living/user, var/obj/item/stock_parts/computer/H, var/found = 0, var/critical = 0) - if(portable_drive == H) - portable_drive = null - found = 1 - if(hard_drive == H) - hard_drive = null - found = 1 - critical = 1 - if(network_card == H) - network_card = null - found = 1 - if(nano_printer == H) - nano_printer = null - found = 1 - if(card_slot == H) - card_slot = null - found = 1 - if(battery_module == H) - battery_module = null - found = 1 - if(processor_unit == H) - processor_unit = null - found = 1 - critical = 1 - if(ai_slot == H) - ai_slot = null - found = 1 - if(tesla_link == H) - tesla_link = null - found = 1 - if(scanner == H) - scanner.do_before_uninstall() - scanner = null - found = 1 - if(found) - if(user) - to_chat(user, "You remove \the [H] from \the [src].") - user.put_in_hands(H) - else - H.dropInto(loc) - update_verbs() - if(critical && enabled) - if(user) - to_chat(user, "\The [src]'s screen freezes for few seconds and then displays an \"HARDWARE ERROR: Critical component disconnected. Please verify component connection and reboot the device. If the problem persists contact technical support for assistance.\" warning.") - shutdown_computer() - update_icon() - - -// Checks all hardware pieces to determine if name matches, if yes, returns the hardware piece, otherwise returns null -/obj/item/modular_computer/proc/find_hardware_by_name(var/name) - if(portable_drive && (portable_drive.name == name)) - return portable_drive - if(hard_drive && (hard_drive.name == name)) - return hard_drive - if(network_card && (network_card.name == name)) - return network_card - if(nano_printer && (nano_printer.name == name)) - return nano_printer - if(card_slot && (card_slot.name == name)) - return card_slot - if(battery_module && (battery_module.name == name)) - return battery_module - if(processor_unit && (processor_unit.name == name)) - return processor_unit - if(ai_slot && (ai_slot.name == name)) - return ai_slot - if(tesla_link && (tesla_link.name == name)) - return tesla_link - if(scanner && (scanner.name == name)) - return scanner - return null - -// Returns list of all components -/obj/item/modular_computer/proc/get_all_components() - var/list/all_components = list() - if(hard_drive) - all_components.Add(hard_drive) - if(network_card) - all_components.Add(network_card) - if(portable_drive) - all_components.Add(portable_drive) - if(nano_printer) - all_components.Add(nano_printer) - if(card_slot) - all_components.Add(card_slot) - if(battery_module) - all_components.Add(battery_module) - if(processor_unit) - all_components.Add(processor_unit) - if(ai_slot) - all_components.Add(ai_slot) - if(tesla_link) - all_components.Add(tesla_link) - if(scanner) - all_components.Add(scanner) - return all_components \ No newline at end of file diff --git a/code/modules/modular_computers/computers/modular_computer/interaction.dm b/code/modules/modular_computers/computers/modular_computer/interaction.dm deleted file mode 100644 index c02eb773f572a..0000000000000 --- a/code/modules/modular_computers/computers/modular_computer/interaction.dm +++ /dev/null @@ -1,242 +0,0 @@ -/obj/item/modular_computer/proc/update_verbs() - if(portable_drive) - verbs |= /obj/item/modular_computer/proc/eject_usb - else - verbs -= /obj/item/modular_computer/proc/eject_usb - - if(stores_pen && istype(stored_pen)) - verbs |= /obj/item/modular_computer/proc/remove_pen_verb - else - verbs -= /obj/item/modular_computer/proc/remove_pen_verb - - if(card_slot) - verbs |= /obj/item/stock_parts/computer/card_slot/proc/verb_eject_id - else - verbs -= /obj/item/stock_parts/computer/card_slot/proc/verb_eject_id - -// Forcibly shut down the device. To be used when something bugs out and the UI is nonfunctional. -/obj/item/modular_computer/verb/emergency_shutdown() - set name = "Forced Shutdown" - set category = "Object" - set src in view(1) - - if(usr.incapacitated() || !istype(usr, /mob/living)) - to_chat(usr, "You can't do that.") - return - - if(!Adjacent(usr)) - to_chat(usr, "You can't reach it.") - return - - if(enabled) - bsod = 1 - update_icon() - to_chat(usr, "You press a hard-reset button on \the [src]. It displays a brief debug screen before shutting down.") - shutdown_computer(FALSE) - spawn(2 SECONDS) - bsod = 0 - update_icon() - - -// Eject ID card from computer, if it has ID slot with card inside. -/obj/item/modular_computer/proc/eject_usb() - set name = "Eject Portable Storage" - set category = "Object" - set src in view(1) - - if(!CanPhysicallyInteract(usr)) - return - - if(!Adjacent(usr)) - to_chat(usr, "You can't reach it.") - return - - proc_eject_usb(usr) - update_verbs() - -/obj/item/modular_computer/proc/remove_pen_verb() - set name = "Remove Pen" - set category = "Object" - set src in view(1) - - remove_pen(usr) - -/obj/item/modular_computer/proc/remove_pen(mob/user) - - if(user.incapacitated() || !istype(user, /mob/living)) - to_chat(user, "You can't do that.") - return - - if(!Adjacent(user)) - to_chat(user, "You can't reach it.") - return - - if(istype(stored_pen)) - to_chat(user, "You remove [stored_pen] from [src].") - user.put_in_hands(stored_pen) // Silicons will drop it anyway. - stored_pen = null - update_verbs() - -/obj/item/modular_computer/proc/proc_eject_usb(mob/user) - if(!user) - user = usr - - if(!portable_drive) - to_chat(user, "There is no portable device connected to \the [src].") - return - - uninstall_component(user, portable_drive) - -/obj/item/modular_computer/attack_ghost(var/mob/observer/ghost/user) - if(enabled) - ui_interact(user) - else if(check_rights(R_ADMIN, 0, user)) - var/response = alert(user, "This computer is turned off. Would you like to turn it on?", "Admin Override", "Yes", "No") - if(response == "Yes") - turn_on(user) - -/obj/item/modular_computer/attack_ai(var/mob/user) - return attack_self(user) - -/obj/item/modular_computer/attack_hand(var/mob/user) - if(anchored) - return attack_self(user) - return ..() - -// On-click handling. Turns on the computer if it's off and opens the GUI. -/obj/item/modular_computer/attack_self(var/mob/user) - if(MUTATION_CLUMSY in user.mutations) - to_chat(user, SPAN_WARNING("You can't quite work out how to use [src].")) - return - if(enabled && screen_on) - ui_interact(user) - else if(!enabled && screen_on) - turn_on(user) - -/obj/item/modular_computer/attackby(var/obj/item/W as obj, var/mob/user as mob) - if(istype(W, /obj/item/card/id)) // ID Card, try to insert it. - var/obj/item/card/id/I = W - if(!card_slot) - to_chat(user, "You try to insert [I] into [src], but it does not have an ID card slot installed.") - return - - if(card_slot.insert_id(I, user)) - update_verbs() - return - - if(istype(W, /obj/item/pen) && stores_pen) - if(istype(stored_pen)) - to_chat(user, "There is already a pen in [src].") - return - if(!user.unEquip(W, src)) - return - stored_pen = W - update_verbs() - to_chat(user, "You insert [W] into [src].") - return - if(istype(W, /obj/item/paper)) - var/obj/item/paper/paper = W - if(scanner && paper.info) - scanner.do_on_attackby(user, W) - return - if(istype(W, /obj/item/paper) || istype(W, /obj/item/paper_bundle)) - if(nano_printer) - nano_printer.attackby(W, user) - if(istype(W, /obj/item/aicard)) - if(!ai_slot) - return - ai_slot.attackby(W, user) - - if(!modifiable) - return ..() - - if(istype(W, /obj/item/stock_parts/computer)) - var/obj/item/stock_parts/computer/C = W - if(C.hardware_size <= max_hardware_size) - try_install_component(user, C) - else - to_chat(user, "This component is too large for \the [src].") - if(isWrench(W)) - var/list/components = get_all_components() - if(components.len) - to_chat(user, "Remove all components from \the [src] before disassembling it.") - return - new /obj/item/stack/material/steel( get_turf(src.loc), steel_sheet_cost ) - src.visible_message("\The [src] has been disassembled by [user].") - qdel(src) - return - if(isWelder(W)) - var/obj/item/weldingtool/WT = W - if(!WT.isOn()) - to_chat(user, "\The [W] is off.") - return - - if(!damage) - to_chat(user, "\The [src] does not require repairs.") - return - - to_chat(user, "You begin repairing damage to \the [src]...") - if(WT.remove_fuel(round(damage/75)) && do_after(usr, damage/10, src, DO_PUBLIC_UNIQUE)) - damage = 0 - to_chat(user, "You repair \the [src].") - return - - if(isScrewdriver(W)) - var/list/all_components = get_all_components() - if(!all_components.len) - to_chat(user, "This device doesn't have any components installed.") - return - var/list/component_names = list() - for(var/obj/item/stock_parts/computer/H in all_components) - component_names.Add(H.name) - - var/choice = input(usr, "Which component do you want to uninstall?", "Computer maintenance", null) as null|anything in component_names - - if(!choice) - return - - if(!Adjacent(usr)) - return - - var/obj/item/stock_parts/computer/H = find_hardware_by_name(choice) - - if(!H) - return - - uninstall_component(user, H) - - return - - ..() - -/obj/item/modular_computer/examine(mob/user) - . = ..() - - if(enabled) - to_chat(user, "The time [stationtime2text()] is displayed in the corner of the screen.") - - if(card_slot && card_slot.stored_card) - to_chat(user, "[card_slot.stored_card] is inserted into it.") - -/obj/item/modular_computer/MouseDrop(var/atom/over_object) - var/mob/M = usr - if(!istype(over_object, /obj/screen) && CanMouseDrop(M)) - return attack_self(M) - -/obj/item/modular_computer/afterattack(atom/target, mob/user, proximity) - . = ..() - if(scanner) - scanner.do_on_afterattack(user, target, proximity) - -/obj/item/modular_computer/CtrlAltClick(mob/user) - if(!CanPhysicallyInteract(user)) - return 0 - var/datum/extension/interactive/ntos/os = get_extension(src, /datum/extension/interactive/ntos) - if(os) - os.open_terminal(user) - return 1 - -/obj/item/modular_computer/CouldUseTopic(var/mob/user) - ..() - if(LAZYLEN(interact_sounds) && CanPhysicallyInteract(user)) - playsound(src, pick(interact_sounds), interact_sound_volume) diff --git a/code/modules/modular_computers/computers/modular_computer/power.dm b/code/modules/modular_computers/computers/modular_computer/power.dm deleted file mode 100644 index a254d1ff52409..0000000000000 --- a/code/modules/modular_computers/computers/modular_computer/power.dm +++ /dev/null @@ -1,57 +0,0 @@ -/obj/item/modular_computer/proc/power_failure(malfunction = 0) - if(enabled) // Shut down the computer - visible_message("\The [src]'s screen flickers briefly and then goes dark.", range = 1) - var/datum/extension/interactive/ntos/os = get_extension(src, /datum/extension/interactive/ntos) - if(os) - os.event_powerfailure() - shutdown_computer(0) - -/// Tries to use power from battery. Passing false as a parameter results in this proc returning whether battery is functional or not. -/obj/item/modular_computer/proc/battery_power(power_usage = FALSE) - apc_powered = FALSE - if(!battery_module || !battery_module.check_functionality() || battery_module.battery.charge <= 0) - return FALSE - if(battery_module.battery.use(power_usage * CELLRATE) || ((power_usage == 0) && battery_module.battery.charge)) - return TRUE - return FALSE - -/// Tries to use power from APC, if present. -/obj/item/modular_computer/proc/apc_power(power_usage = 0) - apc_powered = TRUE - // Tesla link was originally limited to machinery only, but this probably works too, and the benefit of being able to power all devices from an APC outweights - // the possible minor performance loss. - if(!tesla_link || !tesla_link.check_functionality()) - return FALSE - var/area/A = get_area(src) - if(!istype(A) || !A.powered(EQUIP)) - return FALSE - - // At this point, we know that APC can power us for this tick. Check if we also need to charge our battery, and then actually use the power. - if(battery_module && (battery_module.battery.charge < battery_module.battery.maxcharge)) - power_usage += tesla_link.passive_charging_rate - battery_module.battery.give(tesla_link.passive_charging_rate * CELLRATE) - - A.use_power_oneoff(power_usage, EQUIP) - return TRUE - -/// Tries to use power in general (Abstraction) -/obj/item/modular_computer/proc/computer_use_power(power_usage = 0) - // First tries to charge from an APC, if APC is unavailable switches to battery power. If neither works the computer fails. - if(apc_power(power_usage)) - return TRUE - if(battery_power(power_usage)) - return TRUE - return FALSE - -/// Handles power-related things, such as battery interaction, recharging, shutdown when it's discharged -/obj/item/modular_computer/proc/handle_power() - var/power_usage = screen_on ? base_active_power_usage : base_idle_power_usage - if(enabled) - for(var/obj/item/stock_parts/computer/H in get_all_components()) - if(H.enabled) - power_usage += H.power_usage - last_power_usage = power_usage - - if(computer_use_power(power_usage)) - return - power_failure() \ No newline at end of file diff --git a/code/modules/modular_computers/computers/modular_computer/variables.dm b/code/modules/modular_computers/computers/modular_computer/variables.dm deleted file mode 100644 index 8196399b6036a..0000000000000 --- a/code/modules/modular_computers/computers/modular_computer/variables.dm +++ /dev/null @@ -1,57 +0,0 @@ -// This is the base type that handles everything. Subtypes can be easily created by tweaking variables in this file to your liking. - -/obj/item/modular_computer - name = "Modular Computer" - desc = "A modular computer. You shouldn't see this." - - var/enabled = 0 // Whether the computer is turned on. - var/screen_on = 1 // Whether the computer is active/opened/it's screen is on. - var/hardware_flag = 0 // A flag that describes this device type - var/last_power_usage = 0 // Last tick power usage of this computer - var/computer_emagged = FALSE // Whether the computer is emagged. - var/apc_powered = FALSE // Set automatically. Whether the computer used APC power last tick. - var/base_active_power_usage = 50 // Power usage when the computer is open (screen is active) and can be interacted with. Remember hardware can use power too. - var/base_idle_power_usage = 5 // Power usage when the computer is idle and screen is off (currently only applies to laptops) - var/bsod = FALSE // Error screen displayed - var/ambience_last_played // Last time sound was played - - // Modular computers can run on various devices. Each DEVICE (Laptop, Console, Tablet,..) - // must have it's own DMI file. Icon states must be called exactly the same in all files, but may look differently - // If you create a program which is limited to Laptops and Consoles you don't have to add it's icon_state overlay for Tablets too, for example. - - icon = null // This thing isn't meant to be used on it's own. Subtypes should supply their own icon. - icon_state = null - center_of_mass = null // No pixelshifting by placing on tables, etc. - randpixel = 0 // And no random pixelshifting on-creation either. - var/icon_state_unpowered = null // Icon state when the computer is turned off - var/max_hardware_size = 0 // Maximal hardware size. Currently, tablets have 1, laptops 2 and consoles 3. Limits what hardware types can be installed. - var/steel_sheet_cost = 5 // Amount of steel sheets refunded when disassembling an empty frame of this computer. - var/light_strength = 0 // Intensity of light this computer emits. Comparable to numbers light fixtures use. - - // Damage of the chassis. If the chassis takes too much damage it will break apart. - var/damage = 0 // Current damage level - var/broken_damage = 50 // Damage level at which the computer ceases to operate - var/max_damage = 100 // Damage level at which the computer breaks apart. - var/list/terminals // List of open terminal datums. - - // Important hardware (must be installed for computer to work) - var/obj/item/stock_parts/computer/processor_unit/processor_unit // CPU. Without it the computer won't run. Better CPUs can run more programs at once. - var/obj/item/stock_parts/computer/network_card/network_card // Network Card component of this computer. Allows connection to NTNet - var/obj/item/stock_parts/computer/hard_drive/hard_drive // Hard Drive component of this computer. Stores programs and files. - - // Optional hardware (improves functionality, but is not critical for computer to work in most cases) - var/obj/item/stock_parts/computer/battery_module/battery_module // An internal power source for this computer. Can be recharged. - var/obj/item/stock_parts/computer/card_slot/card_slot // ID Card slot component of this computer. Mostly for HoP modification console that needs ID slot for modification. - var/obj/item/stock_parts/computer/nano_printer/nano_printer // Nano Printer component of this computer, for your everyday paperwork needs. - var/obj/item/stock_parts/computer/hard_drive/portable/portable_drive // Portable data storage - var/obj/item/stock_parts/computer/ai_slot/ai_slot // AI slot, an intellicard housing that allows modifications of AIs. - var/obj/item/stock_parts/computer/tesla_link/tesla_link // Tesla Link, Allows remote charging from nearest APC. - var/obj/item/stock_parts/computer/scanner/scanner // One of several optional scanner attachments. - - var/modifiable = TRUE // can't be modified or damaged if false - - var/stores_pen = FALSE - var/obj/item/pen/stored_pen - - var/interact_sounds - var/interact_sound_volume = 40 \ No newline at end of file diff --git a/code/modules/modular_computers/computers/status_icons.dmi b/code/modules/modular_computers/computers/status_icons.dmi deleted file mode 100644 index 52127ec484268..0000000000000 Binary files a/code/modules/modular_computers/computers/status_icons.dmi and /dev/null differ diff --git a/code/modules/modular_computers/computers/subtypes/dev_console.dm b/code/modules/modular_computers/computers/subtypes/dev_console.dm deleted file mode 100644 index e26ac9596929e..0000000000000 --- a/code/modules/modular_computers/computers/subtypes/dev_console.dm +++ /dev/null @@ -1,140 +0,0 @@ -/obj/machinery/computer/modular - name = "console" - maximum_component_parts = list(/obj/item/stock_parts = 14) //There's a lot of stuff that goes in these - machine_name = "general-purpose computer motherboard" - machine_desc = "Used to build \"modular computers\" - stationary or portable devices that connect to NTNet and support a wide array of programs." - var/list/interact_sounds = list("keyboard", "keystroke") - var/obj/item/stock_parts/computer/hard_drive/portable/portable_drive - -/obj/machinery/computer/modular/Initialize() - set_extension(src, /datum/extension/interactive/ntos/console) - . = ..() - -/obj/machinery/computer/modular/Destroy() - QDEL_NULL(portable_drive) - var/datum/extension/interactive/ntos/os = get_extension(src, /datum/extension/interactive/ntos) - if(os) - os.system_shutdown() - . = ..() - -/obj/machinery/computer/modular/Process() - if(stat & NOPOWER) - return - var/datum/extension/interactive/ntos/os = get_extension(src, /datum/extension/interactive/ntos) - if(os) - os.Process() - -/obj/machinery/computer/modular/power_change() - . = ..() - if(. && (stat & NOPOWER)) - var/datum/extension/interactive/ntos/os = get_extension(src, /datum/extension/interactive/ntos) - if(os) - os.event_powerfailure() - os.system_shutdown() - -/obj/machinery/computer/modular/interface_interact(mob/user) - var/datum/extension/interactive/ntos/os = get_extension(src, /datum/extension/interactive/ntos) - if(os) - if(!os.on) - if(!CanInteract(user, DefaultTopicState())) - return FALSE // Do full interactivity check before state change. - os.system_boot() - - os.ui_interact(user) - return TRUE - -/obj/machinery/computer/modular/on_update_icon() - . = ..() - var/datum/extension/interactive/ntos/os = get_extension(src, /datum/extension/interactive/ntos) - if(os) - if(os.on) - set_light(light_max_bright_on, light_inner_range_on, light_outer_range_on, 2, light_color) - else - set_light(0) - -/obj/machinery/computer/modular/get_screen_overlay() - var/datum/extension/interactive/ntos/os = get_extension(src, /datum/extension/interactive/ntos) - if(os) - return os.get_screen_overlay() - -/obj/machinery/computer/modular/get_keyboard_overlay() - var/datum/extension/interactive/ntos/os = get_extension(src, /datum/extension/interactive/ntos) - if(os) - return os.get_keyboard_overlay() - -/obj/machinery/computer/modular/emag_act(var/remaining_charges, var/mob/user) - var/obj/item/stock_parts/circuitboard/modular_computer/MB = get_component_of_type(/obj/item/stock_parts/circuitboard/modular_computer) - return MB && MB.emag_act(remaining_charges, user) - -/obj/machinery/computer/modular/components_are_accessible(var/path) - . = ..() - if(.) - return - if(!ispath(path, /obj/item/stock_parts/computer)) - return FALSE - var/obj/item/stock_parts/computer/P = path - return initial(P.external_slot) - -/obj/machinery/computer/modular/attackby(obj/item/I, mob/user) - if(istype(I, /obj/item/stock_parts/computer/hard_drive/portable)) - if(portable_drive) - to_chat(user, SPAN_WARNING("There's already \a [portable_drive] plugged in.")) - return TRUE - else if(user.unEquip(I, src)) - portable_drive = I - verbs += /obj/machinery/computer/modular/proc/eject_usb - visible_message(SPAN_NOTICE("[user] plugs \the [I] into \the [src].")) - return TRUE - return ..() - -/obj/machinery/computer/modular/proc/eject_usb() - set name = "Eject Portable Storage" - set category = "Object" - set src in view(1) - - if(!CanPhysicallyInteract(usr)) - to_chat(usr, "You can't reach it.") - return - - if(ismob(usr)) - var/mob/user = usr - visible_message(SPAN_NOTICE("[user] ejects \the [portable_drive] from \the [src].")) - user.put_in_hands(portable_drive) - else - portable_drive.dropInto(loc) - portable_drive = null - verbs -= /obj/machinery/computer/modular/proc/eject_usb - -/obj/machinery/computer/modular/CouldUseTopic(var/mob/user) - ..() - if(LAZYLEN(interact_sounds) && CanPhysicallyInteract(user)) - playsound(src, pick(interact_sounds), 40) - -/obj/machinery/computer/modular/RefreshParts() - ..() - var/extra_power = 0 - for(var/obj/item/stock_parts/computer/part in component_parts) - if(part.enabled) - extra_power += part.power_usage - change_power_consumption(initial(active_power_usage) + extra_power, POWER_USE_ACTIVE) - -/obj/machinery/computer/modular/CtrlAltClick(mob/user) - if(!CanPhysicallyInteract(user)) - return 0 - var/datum/extension/interactive/ntos/os = get_extension(src, /datum/extension/interactive/ntos) - if(os) - os.open_terminal(user) - return 1 - -/obj/machinery/computer/modular/verb/emergency_shutdown() - set name = "Forced Shutdown" - set category = "Object" - set src in view(1) - - if(!CanPhysicallyInteract(usr)) - return - - var/datum/extension/interactive/ntos/os = get_extension(src, /datum/extension/interactive/ntos) - if(os && os.on) - to_chat(usr, "You press a hard-reset button on \the [src].") - os.system_shutdown() diff --git a/code/modules/modular_computers/computers/subtypes/dev_laptop.dm b/code/modules/modular_computers/computers/subtypes/dev_laptop.dm deleted file mode 100644 index 7e4fa5adb1961..0000000000000 --- a/code/modules/modular_computers/computers/subtypes/dev_laptop.dm +++ /dev/null @@ -1,45 +0,0 @@ -/obj/item/modular_computer/laptop - anchored = TRUE - name = "laptop computer" - desc = "A portable clamshell computer." - hardware_flag = PROGRAM_LAPTOP - icon_state_unpowered = "laptop-open" - icon = 'icons/obj/modular_laptop.dmi' - icon_state = "laptop-open" - w_class = ITEM_SIZE_NORMAL - base_idle_power_usage = 25 - base_active_power_usage = 200 - max_hardware_size = 2 - light_strength = 3 - max_damage = 200 - broken_damage = 100 - w_class = ITEM_SIZE_NORMAL - var/icon_state_closed = "laptop-closed" - interact_sounds = list("keyboard", "keystroke") - interact_sound_volume = 20 - -/obj/item/modular_computer/laptop/Initialize() - . = ..() - screen_on = anchored - -/obj/item/modular_computer/laptop/AltClick(var/mob/user) -// Prevents carrying of open laptops inhand. -// While they work inhand, i feel it'd make tablets lose some of their high-mobility advantage they have over laptops now. - if(!CanPhysicallyInteract(user)) - return - if(!isturf(loc)) - to_chat(usr, "\The [src] has to be on a stable surface first!") - return - anchored = !anchored - screen_on = anchored - update_icon() - -/obj/item/modular_computer/laptop/on_update_icon() - if(anchored) - ..() - else - overlays.Cut() - icon_state = icon_state_closed - -/obj/item/modular_computer/laptop/preset - anchored = FALSE \ No newline at end of file diff --git a/code/modules/modular_computers/computers/subtypes/dev_pda.dm b/code/modules/modular_computers/computers/subtypes/dev_pda.dm deleted file mode 100644 index 82eb3f3c0cc66..0000000000000 --- a/code/modules/modular_computers/computers/subtypes/dev_pda.dm +++ /dev/null @@ -1,126 +0,0 @@ -/obj/item/modular_computer/pda - name = "\improper PDA" - desc = "A very compact computer, designed to keep its user always connected." - icon = 'icons/obj/modular_pda.dmi' - icon_state = "pda" - icon_state_unpowered = "pda" - hardware_flag = PROGRAM_PDA - max_hardware_size = 1 - w_class = ITEM_SIZE_SMALL - light_strength = 2 - slot_flags = SLOT_ID | SLOT_BELT - stores_pen = TRUE - stored_pen = /obj/item/pen/retractable - interact_sounds = list('sound/machines/pda_click.ogg') - interact_sound_volume = 20 - -/obj/item/modular_computer/pda/Initialize() - . = ..() - enable_computer() - -/obj/item/modular_computer/pda/CtrlClick(mob/user) - if(!isturf(loc)) ///If we are dragging the PDA across the ground we don't want to remove the pen - remove_pen(user) - else - . = ..() - -/obj/item/modular_computer/pda/AltClick(var/mob/user) - if(!CanPhysicallyInteract(user)) - return - if(card_slot && istype(card_slot.stored_card)) - card_slot.eject_id(user) - else - ..() - -// PDA box -/obj/item/storage/box/PDAs - name = "box of spare PDAs" - desc = "A box of spare PDA microcomputers." - icon = 'icons/obj/pda.dmi' - icon_state = "pdabox" - -/obj/item/storage/box/PDAs/Initialize() - . = ..() - - new /obj/item/modular_computer/pda(src) - new /obj/item/modular_computer/pda(src) - new /obj/item/modular_computer/pda(src) - new /obj/item/modular_computer/pda(src) - new /obj/item/modular_computer/pda(src) - -// PDA types -/obj/item/modular_computer/pda/medical - icon_state = "pda-m" - icon_state_unpowered = "pda-m" - -/obj/item/modular_computer/pda/chemistry - icon_state = "pda-m" - icon_state_unpowered = "pda-m" - -/obj/item/modular_computer/pda/engineering - icon_state = "pda-e" - icon_state_unpowered = "pda-e" - -/obj/item/modular_computer/pda/security - icon_state = "pda-s" - icon_state_unpowered = "pda-s" - -/obj/item/modular_computer/pda/forensics - icon_state = "pda-s" - icon_state_unpowered = "pda-s" - -/obj/item/modular_computer/pda/science - icon_state = "pda-nt" - icon_state_unpowered = "pda-nt" - -/obj/item/modular_computer/pda/heads - name = "command PDA" - icon_state = "pda-h" - icon_state_unpowered = "pda-h" - -/obj/item/modular_computer/pda/heads/paperpusher - stored_pen = /obj/item/pen/fancy - -/obj/item/modular_computer/pda/heads/hop - icon_state = "pda-hop" - icon_state_unpowered = "pda-hop" - -/obj/item/modular_computer/pda/heads/hos - icon_state = "pda-hos" - icon_state_unpowered = "pda-hos" - -/obj/item/modular_computer/pda/heads/ce - icon_state = "pda-ce" - icon_state_unpowered = "pda-ce" - -/obj/item/modular_computer/pda/heads/cmo - icon_state = "pda-cmo" - icon_state_unpowered = "pda-cmo" - -/obj/item/modular_computer/pda/heads/rd - icon_state = "pda-rd" - icon_state_unpowered = "pda-rd" - -/obj/item/modular_computer/pda/captain - icon_state = "pda-c" - icon_state_unpowered = "pda-c" - -/obj/item/modular_computer/pda/ert - icon_state = "pda-h" - icon_state_unpowered = "pda-h" - -/obj/item/modular_computer/pda/cargo - icon_state = "pda-sup" - icon_state_unpowered = "pda-sup" - -/obj/item/modular_computer/pda/mining - icon_state = "pda-nt" - icon_state_unpowered = "pda-nt" - -/obj/item/modular_computer/pda/syndicate - icon_state = "pda-syn" - icon_state_unpowered = "pda-syn" - -/obj/item/modular_computer/pda/roboticist - icon_state = "pda-robot" - icon_state_unpowered = "pda-robot" \ No newline at end of file diff --git a/code/modules/modular_computers/computers/subtypes/dev_tablet.dm b/code/modules/modular_computers/computers/subtypes/dev_tablet.dm deleted file mode 100644 index aaa62f896db27..0000000000000 --- a/code/modules/modular_computers/computers/subtypes/dev_tablet.dm +++ /dev/null @@ -1,19 +0,0 @@ -/obj/item/modular_computer/tablet - name = "tablet computer" - desc = "A small, portable microcomputer." - icon = 'icons/obj/modular_tablet.dmi' - icon_state = "tablet" - icon_state_unpowered = "tablet" - - hardware_flag = PROGRAM_TABLET - max_hardware_size = 1 - w_class = ITEM_SIZE_SMALL - light_strength = 5 // same as PDAs - - interact_sounds = list('sound/machines/pda_click.ogg') - interact_sound_volume = 20 - -/obj/item/modular_computer/tablet/lease - desc = "A small, portable microcomputer. This one has a gold and blue stripe, and a serial number stamped into the case." - icon_state = "tabletsol" - icon_state_unpowered = "tabletsol" diff --git a/code/modules/modular_computers/computers/subtypes/dev_telescreen.dm b/code/modules/modular_computers/computers/subtypes/dev_telescreen.dm deleted file mode 100644 index 7689fb5fa47f9..0000000000000 --- a/code/modules/modular_computers/computers/subtypes/dev_telescreen.dm +++ /dev/null @@ -1,57 +0,0 @@ -/obj/item/modular_computer/telescreen - name = "telescreen" - desc = "A wall-mounted touchscreen computer." - icon = 'icons/obj/modular_telescreen.dmi' - icon_state = "telescreen" - icon_state_unpowered = "telescreen" - hardware_flag = PROGRAM_TELESCREEN - anchored = TRUE - density = FALSE - base_idle_power_usage = 75 - base_active_power_usage = 300 - max_hardware_size = 2 - steel_sheet_cost = 10 - light_strength = 4 - max_damage = 300 - broken_damage = 150 - w_class = ITEM_SIZE_HUGE - -/obj/item/modular_computer/telescreen/New() - ..() - // Allows us to create "north bump" "south bump" etc. named objects, for more comfortable mapping. - name = "telescreen" - -/obj/item/modular_computer/telescreen/attackby(var/obj/item/W as obj, var/mob/user as mob) - if(isCrowbar(W)) - if(anchored) - shutdown_computer() - anchored = FALSE - screen_on = FALSE - pixel_x = 0 - pixel_y = 0 - to_chat(user, "You unsecure \the [src].") - else - var/choice = input(user, "Where do you want to place \the [src]?", "Offset selection") in list("North", "South", "West", "East", "This tile", "Cancel") - var/valid = FALSE - switch(choice) - if("North") - valid = TRUE - pixel_y = 32 - if("South") - valid = TRUE - pixel_y = -32 - if("West") - valid = TRUE - pixel_x = -32 - if("East") - valid = TRUE - pixel_x = 32 - if("This tile") - valid = TRUE - - if(valid) - anchored = TRUE - screen_on = TRUE - to_chat(user, "You secure \the [src].") - return - ..() \ No newline at end of file diff --git a/code/modules/modular_computers/computers/subtypes/dev_wrist.dm b/code/modules/modular_computers/computers/subtypes/dev_wrist.dm deleted file mode 100644 index 335273811d1b2..0000000000000 --- a/code/modules/modular_computers/computers/subtypes/dev_wrist.dm +++ /dev/null @@ -1,180 +0,0 @@ -// from Infinity -/obj/item/modular_computer/pda/wrist - name = "wrist computer" - desc = "A wrist-mounted modular personal computer. Very stylish." - icon = 'icons/obj/wrist_computer.dmi' - icon_state = "wc_base" - color = COLOR_GUNMETAL - item_state_slots = list(slot_wear_id_str = "wc_base") - light_color = COLOR_GREEN_GRAY - var/stripe_color - - slot_flags = SLOT_ID | SLOT_BELT - - icon_state_unpowered = "wc_base" - item_icons = list(slot_wear_id_str = 'icons/mob/wrist_computer.dmi') - item_state = "wc_base" - - interact_sounds = list('sound/items/ui_pipboy_select.wav') - -/obj/item/modular_computer/pda/wrist/get_mob_overlay(var/mob/user_mob, var/slot) - var/image/ret = ..() - var/datum/extension/interactive/ntos/os = get_extension(src, /datum/extension/interactive/ntos) - if(slot == slot_wear_id_str) - if(enabled) - var/image/I = image(icon = ret.icon, icon_state = "wc_screen") - I.appearance_flags |= RESET_COLOR - I.color = (bsod || os.updating) ? "#0000ff" : "#00ff00" - ret.overlays.Add(I) - else - ret.overlays.Add(image(icon = ret.icon, icon_state = "wc_screen_off")) - if(stripe_color) - var/image/I = image(icon = ret.icon, icon_state = "wc_stripe") - I.appearance_flags |= RESET_COLOR - I.color = stripe_color - overlays.Add(I) - return ret - -/obj/item/modular_computer/pda/wrist/on_update_icon() - var/datum/extension/interactive/ntos/os = get_extension(src, /datum/extension/interactive/ntos) - icon_state = icon_state_unpowered - overlays.Cut() - - if(os) - var/image/_screen_overlay = os.get_screen_overlay() - // var/image/_keyboard_overlay = os.get_keyboard_overlay() - - _screen_overlay.appearance_flags |= RESET_COLOR - // _keyboard_overlay.appearance_flags |= RESET_COLOR - - overlays += _screen_overlay - // overlays += _keyboard_overlay - - if(enabled) - set_light(0.2, 0.1, light_strength, l_color = (bsod || os.updating) ? "#0000ff" : light_color) - else - set_light(0) - - if(stripe_color) - var/image/I = image(icon = icon, icon_state = "wc_stripe") - I.appearance_flags |= RESET_COLOR - I.color = stripe_color - overlays.Add(I) - - var/mob/living/carbon/human/H = loc - if(istype(H) && H.wear_id == src) - H.update_inv_wear_id() - -/obj/item/modular_computer/pda/wrist/AltClick(var/mob/user) - if(!CanPhysicallyInteract(user)) - return - if(card_slot?.stored_card) - card_slot.eject_id(user) - else - ..() - -/obj/item/modular_computer/pda/wrist/attack_hand(var/mob/user) - if(loc == user) - if(user.incapacitated() || user.restrained()) - return - var/mob/living/carbon/human/H = user - if(istype(H) && src == H.wear_id) - return attack_self(user) - return ..() - -/obj/item/modular_computer/pda/wrist/MouseDrop(var/obj/over_object) - if(ishuman(usr)) - if(loc != usr) return - if(usr.restrained() || usr.incapacitated()) return - if (!usr.unEquip(src)) return - usr.put_in_hands(src) - src.add_fingerprint(usr) - return - return ..() - -// wrist box -/obj/item/storage/box/wrist - name = "box of spare wrist computers" - desc = "A box of spare wrist microcomputers." - icon_state = "pda" - startswith = list(/obj/item/modular_computer/pda/wrist = 5) - -// wrist types - -/obj/item/modular_computer/pda/wrist/medical - color = COLOR_OFF_WHITE - stripe_color = COLOR_BLUE_GRAY - -/obj/item/modular_computer/pda/wrist/chemistry - color = COLOR_OFF_WHITE - stripe_color = COLOR_BLUE_GRAY - -/obj/item/modular_computer/pda/wrist/engineering - stripe_color = COLOR_ORANGE - -/obj/item/modular_computer/pda/wrist/security - stripe_color = COLOR_MAROON - -/obj/item/modular_computer/pda/wrist/forensics - stripe_color = COLOR_MAROON - -/obj/item/modular_computer/pda/wrist/science - stripe_color = COLOR_RESEARCH - -/obj/item/modular_computer/pda/wrist/heads - color = PIPE_COLOR_BLACK - stripe_color = COLOR_BLUE_GRAY - -/obj/item/modular_computer/pda/wrist/heads/paperpusher - stored_pen = /obj/item/pen/fancy - -/obj/item/modular_computer/pda/wrist/heads/hop - stripe_color = COLOR_SKY_BLUE - -/obj/item/modular_computer/pda/wrist/heads/hos - stripe_color = COLOR_MAROON - -/obj/item/modular_computer/pda/wrist/heads/ce - color = COLOR_OFF_WHITE - stripe_color = COLOR_ORANGE - -/obj/item/modular_computer/pda/wrist/heads/cmo - color = COLOR_OFF_WHITE - stripe_color = COLOR_BLUE_GRAY - -/obj/item/modular_computer/pda/wrist/heads/rd - stripe_color = COLOR_RESEARCH - -/obj/item/modular_computer/pda/wrist/captain - color = PIPE_COLOR_BLACK - stripe_color = COLOR_YELLOW - -/obj/item/modular_computer/pda/wrist/ert - color = PIPE_COLOR_BLACK - stripe_color = COLOR_YELLOW - -/obj/item/modular_computer/pda/wrist/cargo - stripe_color = COLOR_PALE_YELLOW - -/obj/item/modular_computer/pda/wrist/syndicate - color = PIPE_COLOR_BLACK - stripe_color = COLOR_MAROON - -/obj/item/modular_computer/pda/wrist/roboticist - stripe_color = COLOR_ORANGE - -/obj/item/modular_computer/pda/wrist/explorer - color = PIPE_COLOR_BLACK - stripe_color = COLOR_INDIGO - -/obj/item/modular_computer/pda/wrist/grey - color = COLOR_GRAY - -/obj/item/modular_computer/pda/wrist/lila - color = null - icon_state = "wrist-lila" - icon_state_unpowered = "wrist-lila" - -/obj/item/modular_computer/pda/wrist/lila/black - icon_state = "wrist-lila-black" - icon_state_unpowered = "wrist-lila-black" diff --git a/code/modules/modular_computers/computers/subtypes/preset_console.dm b/code/modules/modular_computers/computers/subtypes/preset_console.dm deleted file mode 100644 index 44d9f988279f9..0000000000000 --- a/code/modules/modular_computers/computers/subtypes/preset_console.dm +++ /dev/null @@ -1,173 +0,0 @@ -/obj/machinery/computer/modular/preset - var/list/default_software - var/datum/computer_file/program/autorun_program - base_type = /obj/machinery/computer/modular - -/obj/machinery/computer/modular/preset/full - uncreated_component_parts = list( - /obj/item/stock_parts/power/apc, - /obj/item/stock_parts/computer/card_slot, - /obj/item/stock_parts/computer/ai_slot - ) - -/obj/machinery/computer/modular/preset/aislot - uncreated_component_parts = list( - /obj/item/stock_parts/power/apc, - /obj/item/stock_parts/computer/ai_slot - ) - -/obj/machinery/computer/modular/preset/cardslot - uncreated_component_parts = list( - /obj/item/stock_parts/power/apc, - /obj/item/stock_parts/computer/card_slot - ) - -/obj/machinery/computer/modular/preset/Initialize() - . = ..() - var/datum/extension/interactive/ntos/os = get_extension(src, /datum/extension/interactive/ntos) - if(os) - for(var/program_type in default_software) - os.create_file(new program_type()) - if(autorun_program) - os.set_autorun(initial(autorun_program.filename)) - -/obj/machinery/computer/modular/preset/engineering - default_software = list( - /datum/computer_file/program/power_monitor, - /datum/computer_file/program/supermatter_monitor, - /datum/computer_file/program/alarm_monitor, - /datum/computer_file/program/atmos_control, - /datum/computer_file/program/rcon_console, - /datum/computer_file/program/camera_monitor, - /datum/computer_file/program/shields_monitor - ) - -/obj/machinery/computer/modular/preset/medical - default_software = list( - /datum/computer_file/program/suit_sensors, - /datum/computer_file/program/camera_monitor, - /datum/computer_file/program/records, - /datum/computer_file/program/wordprocessor - ) - autorun_program = /datum/computer_file/program/suit_sensors - -/obj/machinery/computer/modular/preset/aislot/research - default_software = list( - /datum/computer_file/program/ntnetmonitor, - /datum/computer_file/program/nttransfer, - /datum/computer_file/program/camera_monitor, - /datum/computer_file/program/aidiag, - /datum/computer_file/program/email_client, - /datum/computer_file/program/wordprocessor - ) - -/obj/machinery/computer/modular/preset/aislot/sysadmin - default_software = list( - /datum/computer_file/program/ntnetmonitor, - /datum/computer_file/program/nttransfer, - /datum/computer_file/program/camera_monitor, - /datum/computer_file/program/aidiag, - /datum/computer_file/program/email_client, - /datum/computer_file/program/email_administration, - /datum/computer_file/program/records, - /datum/computer_file/program/wordprocessor - ) - -/obj/machinery/computer/modular/preset/cardslot/command - default_software = list( - /datum/computer_file/program/comm, - /datum/computer_file/program/camera_monitor, - /datum/computer_file/program/email_client, - /datum/computer_file/program/records, - /datum/computer_file/program/docking, - /datum/computer_file/program/wordprocessor - ) - -/obj/machinery/computer/modular/preset/cardslot/command_sec - default_software = list( - /datum/computer_file/program/comm, - /datum/computer_file/program/camera_monitor, - /datum/computer_file/program/email_client, - /datum/computer_file/program/records, - /datum/computer_file/program/docking, - /datum/computer_file/program/wordprocessor, - /datum/computer_file/program/digitalwarrant, - /datum/computer_file/program/forceauthorization - ) - -/obj/machinery/computer/modular/preset/security - default_software = list( - /datum/computer_file/program/digitalwarrant, - /datum/computer_file/program/camera_monitor, - /datum/computer_file/program/records, - /datum/computer_file/program/forceauthorization, - /datum/computer_file/program/wordprocessor - ) - -/obj/machinery/computer/modular/preset/civilian - default_software = list( - /datum/computer_file/program/camera_monitor, - /datum/computer_file/program/records, - /datum/computer_file/program/email_client, - /datum/computer_file/program/supply, - /datum/computer_file/program/wordprocessor - ) - -/obj/machinery/computer/modular/preset/dock - default_software = list( - /datum/computer_file/program/reports, - /datum/computer_file/program/records, - /datum/computer_file/program/email_client, - /datum/computer_file/program/supply, - /datum/computer_file/program/docking - ) - -/obj/machinery/computer/modular/preset/supply_public - default_software = list( - /datum/computer_file/program/supply - ) - autorun_program = /datum/computer_file/program/supply - -/obj/machinery/computer/modular/preset/full/ert - default_software = list( - /datum/computer_file/program/nttransfer, - /datum/computer_file/program/camera_monitor/ert, - /datum/computer_file/program/email_client, - /datum/computer_file/program/alarm_monitor, - /datum/computer_file/program/comm, - /datum/computer_file/program/aidiag, - /datum/computer_file/program/records, - /datum/computer_file/program/wordprocessor - ) - -/obj/machinery/computer/modular/preset/full/merc - default_software = list( - /datum/computer_file/program/camera_monitor/hacked, - /datum/computer_file/program/alarm_monitor, - /datum/computer_file/program/aidiag - ) - -/obj/machinery/computer/modular/preset/full/merc/Initialize() - . = ..() - emag_act(INFINITY) - -/obj/machinery/computer/modular/preset/library - default_software = list( - /datum/computer_file/program/nttransfer, - /datum/computer_file/program/email_client, - /datum/computer_file/program/library, - /datum/computer_file/program/wordprocessor - ) - -/obj/machinery/computer/modular/preset/merchant - default_software = list( - /datum/computer_file/program/merchant, - /datum/computer_file/program/email_client, - /datum/computer_file/program/wordprocessor - ) - -/obj/machinery/computer/modular/preset/filemanager - default_software = list( - /datum/computer_file/program/wordprocessor - ) - autorun_program = /datum/computer_file/program/filemanager diff --git a/code/modules/modular_computers/computers/subtypes/preset_laptop.dm b/code/modules/modular_computers/computers/subtypes/preset_laptop.dm deleted file mode 100644 index fe9bf46e82749..0000000000000 --- a/code/modules/modular_computers/computers/subtypes/preset_laptop.dm +++ /dev/null @@ -1,61 +0,0 @@ -/obj/item/modular_computer/laptop/preset/custom_loadout/cheap/install_default_hardware() - ..() - processor_unit = new/obj/item/stock_parts/computer/processor_unit/small(src) - tesla_link = new/obj/item/stock_parts/computer/tesla_link(src) - hard_drive = new/obj/item/stock_parts/computer/hard_drive/(src) - network_card = new/obj/item/stock_parts/computer/network_card/(src) - nano_printer = new/obj/item/stock_parts/computer/nano_printer(src) - card_slot = new/obj/item/stock_parts/computer/card_slot(src) - battery_module = new/obj/item/stock_parts/computer/battery_module/advanced(src) - battery_module.charge_to_full() - -/obj/item/modular_computer/laptop/preset/custom_loadout/advanced/install_default_hardware() - ..() - processor_unit = new/obj/item/stock_parts/computer/processor_unit(src) - tesla_link = new/obj/item/stock_parts/computer/tesla_link(src) - hard_drive = new/obj/item/stock_parts/computer/hard_drive/advanced(src) - network_card = new/obj/item/stock_parts/computer/network_card/advanced(src) - nano_printer = new/obj/item/stock_parts/computer/nano_printer(src) - card_slot = new/obj/item/stock_parts/computer/card_slot(src) - battery_module = new/obj/item/stock_parts/computer/battery_module/advanced(src) - battery_module.charge_to_full() - -/obj/item/modular_computer/laptop/preset/custom_loadout/standard/install_default_hardware() - ..() - processor_unit = new/obj/item/stock_parts/computer/processor_unit(src) - tesla_link = new/obj/item/stock_parts/computer/tesla_link(src) - hard_drive = new/obj/item/stock_parts/computer/hard_drive/(src) - network_card = new/obj/item/stock_parts/computer/network_card/(src) - nano_printer = new/obj/item/stock_parts/computer/nano_printer(src) - card_slot = new/obj/item/stock_parts/computer/card_slot(src) - battery_module = new/obj/item/stock_parts/computer/battery_module/advanced(src) - battery_module.charge_to_full() - -/obj/item/modular_computer/laptop/preset/custom_loadout/install_default_programs() - ..() - var/mob/living/carbon/human/H = get_holder_of_type(src, /mob) - if(!istype(H)) return - install_default_programs_by_job(H) - var/datum/extension/interactive/ntos/os = get_extension(src, /datum/extension/interactive/ntos) - if(os) - os.create_file(new/datum/computer_file/program/wordprocessor()) - -//Map presets - -/obj/item/modular_computer/laptop/preset/records/install_default_hardware() - ..() - processor_unit = new/obj/item/stock_parts/computer/processor_unit/small(src) - tesla_link = new/obj/item/stock_parts/computer/tesla_link(src) - hard_drive = new/obj/item/stock_parts/computer/hard_drive/(src) - network_card = new/obj/item/stock_parts/computer/network_card/(src) - nano_printer = new/obj/item/stock_parts/computer/nano_printer(src) - battery_module = new/obj/item/stock_parts/computer/battery_module/nano(src) - battery_module.charge_to_full() - scanner = new /obj/item/stock_parts/computer/scanner/paper(src) - -/obj/item/modular_computer/laptop/preset/records/install_default_programs() - ..() - var/datum/extension/interactive/ntos/os = get_extension(src, /datum/extension/interactive/ntos) - if(os) - os.create_file(new /datum/computer_file/program/wordprocessor()) - os.create_file(new /datum/computer_file/program/records()) diff --git a/code/modules/modular_computers/computers/subtypes/preset_pda.dm b/code/modules/modular_computers/computers/subtypes/preset_pda.dm deleted file mode 100644 index 3e324a10357eb..0000000000000 --- a/code/modules/modular_computers/computers/subtypes/preset_pda.dm +++ /dev/null @@ -1,94 +0,0 @@ -/obj/item/modular_computer/pda/install_default_hardware() - ..() - processor_unit = new/obj/item/stock_parts/computer/processor_unit/small(src) - tesla_link = new/obj/item/stock_parts/computer/tesla_link(src) - hard_drive = new/obj/item/stock_parts/computer/hard_drive/small(src) - network_card = new/obj/item/stock_parts/computer/network_card/(src) - card_slot = new /obj/item/stock_parts/computer/card_slot/broadcaster(src) - battery_module = new/obj/item/stock_parts/computer/battery_module(src) - battery_module.charge_to_full() - -/obj/item/modular_computer/pda/install_default_programs() - ..() - var/datum/extension/interactive/ntos/os = get_extension(src, /datum/extension/interactive/ntos) - if(os) - os.create_file(new/datum/computer_file/program/email_client()) - os.create_file(new/datum/computer_file/program/crew_manifest()) - os.create_file(new/datum/computer_file/program/wordprocessor()) - os.create_file(new/datum/computer_file/program/records()) - os.create_file(new/datum/computer_file/program/newscast()) - if(prob(50)) //harmless tax software - os.create_file(new /datum/computer_file/program/uplink()) - os.set_autorun("emailc") - -/obj/item/modular_computer/pda/medical/install_default_hardware() - ..() - scanner = new /obj/item/stock_parts/computer/scanner/medical(src) - -/obj/item/modular_computer/pda/chemistry/install_default_hardware() - ..() - scanner = new /obj/item/stock_parts/computer/scanner/reagent(src) - -/obj/item/modular_computer/pda/engineering/install_default_hardware() - ..() - scanner = new /obj/item/stock_parts/computer/scanner/atmos(src) - -/obj/item/modular_computer/pda/science/install_default_hardware() - ..() - scanner = new /obj/item/stock_parts/computer/scanner/reagent(src) - -/obj/item/modular_computer/pda/forensics/install_default_hardware() - ..() - scanner = new /obj/item/stock_parts/computer/scanner/reagent(src) - -/obj/item/modular_computer/pda/heads/install_default_programs() - ..() - var/datum/extension/interactive/ntos/os = get_extension(src, /datum/extension/interactive/ntos) - if(os) - os.create_file(new/datum/computer_file/program/reports()) - -/obj/item/modular_computer/pda/heads/hop/install_default_hardware() - ..() - scanner = new /obj/item/stock_parts/computer/scanner/paper(src) - -/obj/item/modular_computer/pda/heads/hos/install_default_hardware() - ..() - scanner = new /obj/item/stock_parts/computer/scanner/paper(src) - -/obj/item/modular_computer/pda/heads/ce/install_default_hardware() - ..() - scanner = new /obj/item/stock_parts/computer/scanner/atmos(src) - -/obj/item/modular_computer/pda/heads/cmo/install_default_hardware() - ..() - scanner = new /obj/item/stock_parts/computer/scanner/medical(src) - -/obj/item/modular_computer/pda/heads/rd/install_default_hardware() - ..() - scanner = new /obj/item/stock_parts/computer/scanner/paper(src) - -/obj/item/modular_computer/pda/cargo/install_default_programs() - ..() - var/datum/extension/interactive/ntos/os = get_extension(src, /datum/extension/interactive/ntos) - if(os) - os.create_file(new/datum/computer_file/program/reports()) - -/obj/item/modular_computer/pda/cargo/install_default_hardware() - ..() - scanner = new /obj/item/stock_parts/computer/scanner/paper(src) - -/obj/item/modular_computer/pda/mining/install_default_hardware() - ..() - scanner = new /obj/item/stock_parts/computer/scanner/atmos(src) - -/obj/item/modular_computer/pda/explorer/install_default_hardware() - ..() - scanner = new /obj/item/stock_parts/computer/scanner/atmos(src) - -/obj/item/modular_computer/pda/captain/install_default_hardware() - ..() - scanner = new /obj/item/stock_parts/computer/scanner/paper(src) - -/obj/item/modular_computer/pda/roboticist/install_default_hardware() - ..() - scanner = new /obj/item/stock_parts/computer/scanner/robotic(src) diff --git a/code/modules/modular_computers/computers/subtypes/preset_tablet.dm b/code/modules/modular_computers/computers/subtypes/preset_tablet.dm deleted file mode 100644 index f39a11f5a7c8b..0000000000000 --- a/code/modules/modular_computers/computers/subtypes/preset_tablet.dm +++ /dev/null @@ -1,61 +0,0 @@ -/obj/item/modular_computer/tablet/preset/custom_loadout/cheap/install_default_hardware() - ..() - processor_unit = new/obj/item/stock_parts/computer/processor_unit/small(src) - tesla_link = new/obj/item/stock_parts/computer/tesla_link(src) - hard_drive = new/obj/item/stock_parts/computer/hard_drive/micro(src) - network_card = new/obj/item/stock_parts/computer/network_card(src) - battery_module = new/obj/item/stock_parts/computer/battery_module/nano(src) - battery_module.charge_to_full() - -/obj/item/modular_computer/tablet/preset/custom_loadout/advanced/install_default_hardware() - ..() - processor_unit = new/obj/item/stock_parts/computer/processor_unit/small(src) - tesla_link = new/obj/item/stock_parts/computer/tesla_link(src) - hard_drive = new/obj/item/stock_parts/computer/hard_drive/small(src) - network_card = new/obj/item/stock_parts/computer/network_card/advanced(src) - nano_printer = new/obj/item/stock_parts/computer/nano_printer(src) - card_slot = new/obj/item/stock_parts/computer/card_slot(src) - battery_module = new/obj/item/stock_parts/computer/battery_module(src) - battery_module.charge_to_full() - -/obj/item/modular_computer/tablet/preset/custom_loadout/standard/install_default_hardware() - ..() - processor_unit = new/obj/item/stock_parts/computer/processor_unit/small(src) - tesla_link = new/obj/item/stock_parts/computer/tesla_link(src) - hard_drive = new/obj/item/stock_parts/computer/hard_drive/small(src) - network_card = new/obj/item/stock_parts/computer/network_card(src) - battery_module = new/obj/item/stock_parts/computer/battery_module/micro(src) - battery_module.charge_to_full() - -/obj/item/modular_computer/tablet/preset/custom_loadout/install_default_programs() - ..() - var/mob/living/carbon/human/H = get_holder_of_type(src, /mob) - if(!istype(H)) return - install_default_programs_by_job(H) - var/datum/extension/interactive/ntos/os = get_extension(src, /datum/extension/interactive/ntos) - if(os) - os.create_file(new/datum/computer_file/program/wordprocessor()) - -//Map presets - -/obj/item/modular_computer/tablet/lease/preset/command/install_default_hardware() - ..() - processor_unit = new/obj/item/stock_parts/computer/processor_unit/small(src) - tesla_link = new/obj/item/stock_parts/computer/tesla_link(src) - hard_drive = new/obj/item/stock_parts/computer/hard_drive(src) - network_card = new/obj/item/stock_parts/computer/network_card/advanced(src) - nano_printer = new/obj/item/stock_parts/computer/nano_printer(src) - card_slot = new/obj/item/stock_parts/computer/card_slot(src) - battery_module = new/obj/item/stock_parts/computer/battery_module(src) - battery_module.charge_to_full() - scanner = new /obj/item/stock_parts/computer/scanner/paper(src) - -/obj/item/modular_computer/tablet/lease/preset/command/install_default_programs() - ..() - var/datum/extension/interactive/ntos/os = get_extension(src, /datum/extension/interactive/ntos) - if(os) - os.create_file(new/datum/computer_file/program/reports()) - os.create_file(new/datum/computer_file/program/camera_monitor()) - os.create_file(new/datum/computer_file/program/email_client()) - os.create_file(new/datum/computer_file/program/records()) - os.create_file(new/datum/computer_file/program/wordprocessor()) diff --git a/code/modules/modular_computers/computers/subtypes/preset_telescreen.dm b/code/modules/modular_computers/computers/subtypes/preset_telescreen.dm deleted file mode 100644 index ed5af15be94ac..0000000000000 --- a/code/modules/modular_computers/computers/subtypes/preset_telescreen.dm +++ /dev/null @@ -1,34 +0,0 @@ -/obj/item/modular_computer/telescreen/preset/install_default_hardware() - ..() - processor_unit = new/obj/item/stock_parts/computer/processor_unit(src) - tesla_link = new/obj/item/stock_parts/computer/tesla_link(src) - hard_drive = new/obj/item/stock_parts/computer/hard_drive(src) - network_card = new/obj/item/stock_parts/computer/network_card(src) - -/obj/item/modular_computer/telescreen/preset/generic/install_default_programs() - ..() - var/datum/extension/interactive/ntos/os = get_extension(src, /datum/extension/interactive/ntos) - if(os) - os.create_file(new/datum/computer_file/program/alarm_monitor()) - os.create_file(new/datum/computer_file/program/camera_monitor()) - os.set_autorun("cammon") - -/obj/item/modular_computer/telescreen/preset/medical/install_default_programs() - ..() - var/datum/extension/interactive/ntos/os = get_extension(src, /datum/extension/interactive/ntos) - if(os) - os.create_file(new/datum/computer_file/program/alarm_monitor()) - os.create_file(new/datum/computer_file/program/camera_monitor()) - os.create_file(new/datum/computer_file/program/records()) - os.create_file(new/datum/computer_file/program/suit_sensors()) - os.set_autorun("sensormonitor") - -/obj/item/modular_computer/telescreen/preset/engineering/install_default_programs() - ..() - var/datum/extension/interactive/ntos/os = get_extension(src, /datum/extension/interactive/ntos) - if(os) - os.create_file(new/datum/computer_file/program/alarm_monitor()) - os.create_file(new/datum/computer_file/program/camera_monitor()) - os.create_file(new/datum/computer_file/program/shields_monitor()) - os.create_file(new/datum/computer_file/program/supermatter_monitor()) - os.set_autorun("alarmmonitor") diff --git a/code/modules/modular_computers/file_system/computer_file.dm b/code/modules/modular_computers/file_system/computer_file.dm deleted file mode 100644 index 2e5cdb6d2d21f..0000000000000 --- a/code/modules/modular_computers/file_system/computer_file.dm +++ /dev/null @@ -1,51 +0,0 @@ -var/global/file_uid = 0 - -/datum/computer_file - /// Placeholder. Whitespace and most special characters are not allowed. - var/filename = "NewFile" - /// File full names are [filename].[filetype] so like NewFile.XXX in this case - var/filetype = "XXX" - /// File size in GQ. Integers only! - var/size = 1 - /// Holder that contains this file. - var/obj/item/stock_parts/computer/hard_drive/holder - /// Whether the file may be sent to someone via NTNet transfer, email or other means. - var/unsendable = FALSE - /// Whether the file may be deleted. Setting to TRUE prevents deletion/renaming/etc. - var/undeletable = FALSE - /// Whether the file is hidden from view in the OS - var/hidden = FALSE - /// Protects files that should never be edited by the user due to special properties. - var/read_only = FALSE - /// UID of this file - var/uid - /// Any metadata the file uses. - var/list/metadata - /// Paper type to use for printing - var/papertype = /obj/item/paper - -/datum/computer_file/New(list/md = null) - ..() - uid = file_uid - file_uid++ - if(islist(md)) - metadata = md.Copy() - -/datum/computer_file/Destroy() - . = ..() - if(!holder) - return - holder.remove_file(src) - -/// Returns independent copy of this file. -/datum/computer_file/proc/clone() - var/datum/computer_file/temp = new type - temp.unsendable = unsendable - temp.undeletable = undeletable - temp.hidden = hidden - temp.size = size - if(metadata) - temp.metadata = metadata.Copy() - temp.filename = filename - temp.filetype = filetype - return temp diff --git a/code/modules/modular_computers/file_system/data.dm b/code/modules/modular_computers/file_system/data.dm deleted file mode 100644 index 8787609c7e8ae..0000000000000 --- a/code/modules/modular_computers/file_system/data.dm +++ /dev/null @@ -1,68 +0,0 @@ -// /data/ files store data in string format. They don't contain other logic for now. -/datum/computer_file/data - filetype = "DAT" - - /// Stored data in string format. Do not modify directly. Changes to file should be made through OS functions. - var/stored_data = "" - /// How much text can be stored per GQ, in characters - var/block_size = 2000 - /// Whether the user will be reminded that the file probably shouldn't be edited. - var/do_not_edit = FALSE - -/datum/computer_file/data/clone() - var/datum/computer_file/data/temp = ..() - temp.stored_data = stored_data - return temp - -/// Calculates file size from amount of characters in saved string -/datum/computer_file/data/proc/calculate_size() - size = max(1, round(length(stored_data) / block_size)) - -/datum/computer_file/data/proc/generate_file_data(mob/user) - return digitalPencode2html(stored_data) - -/datum/computer_file/data/logfile - filetype = "LOG" - -/datum/computer_file/data/text - filetype = "TXT" - -/datum/computer_file/data/bodyscan - filetype = "BSC" - read_only = TRUE - papertype = /obj/item/paper/bodyscan - -/datum/computer_file/data/bodyscan/generate_file_data(mob/user) - return display_medical_data(metadata, user.get_skill_value(SKILL_MEDICAL), TRUE) - -/// Mapping tool - creates a named modular computer file in a computer's storage on late initialize. -/// Use this to do things like automatic records and blackboxes. Alternative for paper records. -/// Values can be in the editor for each map or as a subtype. -/// This is an obj because raw atoms can't be placed in DM or third-party mapping tools. -/obj/effect/computer_file_creator - name = "computer file creator" - desc = "This is a mapping tool used for installing text files onto a modular device when it's mapped on top of them. If you see it, it's bugged." - icon = 'icons/effects/landmarks.dmi' - icon_state = "x3" - anchored = TRUE - unacidable = TRUE - simulated = FALSE - invisibility = 101 - /// The name that the file will have once it's created. - var/file_name = "helloworld" - /// The contents of this file. Uses paper formatting. - var/file_info = "Hello World!" - -/obj/effect/computer_file_creator/Initialize() - . = ..() - return INITIALIZE_HINT_LATELOAD - -/obj/effect/computer_file_creator/LateInitialize() - var/turf/T = get_turf(src) - for (var/obj/O in T) - if (!istype(O, /obj/machinery/computer/modular) && !istype(O, /obj/item/modular_computer)) - continue - var/datum/extension/interactive/ntos/os = get_extension(O, /datum/extension/interactive/ntos) - if (os) - os.create_data_file(file_name, file_info, /datum/computer_file/data/text) - qdel(src) diff --git a/code/modules/modular_computers/file_system/manifest.dm b/code/modules/modular_computers/file_system/manifest.dm deleted file mode 100644 index 09568a7f0eb2b..0000000000000 --- a/code/modules/modular_computers/file_system/manifest.dm +++ /dev/null @@ -1,146 +0,0 @@ -// Generates a simple HTML crew manifest for use in various places -/proc/html_crew_manifest(var/monochrome, var/OOC) - var/list/dept_data = list( - list("names" = list(), "header" = "Heads of Staff", "flag" = COM), - list("names" = list(), "header" = "Command Support", "flag" = SPT), - list("names" = list(), "header" = "Research", "flag" = SCI), - list("names" = list(), "header" = "Security", "flag" = SEC), - list("names" = list(), "header" = "Medical", "flag" = MED), - list("names" = list(), "header" = "Engineering", "flag" = ENG), - list("names" = list(), "header" = "Supply", "flag" = SUP), - list("names" = list(), "header" = "Exploration", "flag" = EXP), - list("names" = list(), "header" = "Service", "flag" = SRV), - list("names" = list(), "header" = "Civilian", "flag" = CIV), - list("names" = list(), "header" = "Miscellaneous", "flag" = MSC), - list("names" = list(), "header" = "Silicon") - ) - var/list/misc //Special departments for easier access - var/list/bot - for(var/list/department in dept_data) - if(department["flag"] == MSC) - misc = department["names"] - if(isnull(department["flag"])) - bot = department["names"] - - var/list/isactive = new() - var/list/mil_ranks = list() // HTML to prepend to name - var/dat = {" - - - - "} - // sort mobs - for(var/datum/computer_file/report/crew_record/CR in GLOB.all_crew_records) - var/name = CR.get_formal_name() - var/rank = CR.get_job() - mil_ranks[name] = "" - - if(GLOB.using_map.flags & MAP_HAS_RANK) - var/datum/mil_branch/branch_obj = GLOB.mil_branches.get_branch(CR.get_branch()) - var/datum/mil_rank/rank_obj = GLOB.mil_branches.get_rank(CR.get_branch(), CR.get_rank()) - - if(branch_obj && rank_obj) - mil_ranks[name] = "[rank_obj.name_short] " - - if(OOC) - var/active = 0 - for(var/mob/M in GLOB.player_list) - var/mob_real_name = M.real_name - if(sanitize(mob_real_name) == CR.get_name() && M.client && M.client.inactivity <= 10 MINUTES) - active = 1 - break - isactive[name] = active ? "Active" : "Inactive" - else - isactive[name] = CR.get_status() - - var/datum/job/job = SSjobs.get_by_title(rank) - var/found_place = 0 - if(job) - for(var/list/department in dept_data) - var/list/names = department["names"] - if(job.department_flag & department["flag"]) - names[name] = rank - found_place = 1 - if(!found_place) - misc[name] = rank - - // Synthetics don't have actual records, so we will pull them from here. - for(var/mob/living/silicon/ai/ai in SSmobs.mob_list) - bot[ai.name] = "Artificial Intelligence" - - for(var/mob/living/silicon/robot/robot in SSmobs.mob_list) - // No combat/syndicate cyborgs, no drones. - if(robot.module && robot.module.hide_on_manifest) - continue - - bot[robot.name] = "[robot.modtype] [robot.braintype]" - - for(var/list/department in dept_data) - var/list/names = department["names"] - if(names.len > 0) - dat += "" - for(var/name in names) - dat += "" - - dat += "
              NamePositionActivity
              [department["header"]]
              [mil_ranks[name]][name][names[name]][isactive[name]]
              " - dat = replacetext_char(dat, "\n", "") // so it can be placed on paper correctly - dat = replacetext_char(dat, "\t", "") - return dat - -/proc/silicon_nano_crew_manifest(var/list/filter) - var/list/filtered_entries = list() - - for(var/mob/living/silicon/ai/ai in SSmobs.mob_list) - filtered_entries.Add(list(list( - "name" = ai.name, - "rank" = "Artificial Intelligence", - "status" = "" - ))) - for(var/mob/living/silicon/robot/robot in SSmobs.mob_list) - if(robot.module && robot.module.hide_on_manifest) - continue - filtered_entries.Add(list(list( - "name" = robot.name, - "rank" = "[robot.modtype] [robot.braintype]", - "status" = "" - ))) - return filtered_entries - -/proc/filtered_nano_crew_manifest(var/list/filter, var/blacklist = FALSE) - var/list/filtered_entries = list() - for(var/datum/computer_file/report/crew_record/CR in department_crew_manifest(filter, blacklist)) - filtered_entries.Add(list(list( - "name" = CR.get_name(), - "rank" = CR.get_job(), - "status" = CR.get_status(), - "branch" = CR.get_branch(), - "milrank" = CR.get_rank() - ))) - return filtered_entries - -/proc/nano_crew_manifest() - return list( - "heads" = filtered_nano_crew_manifest(SSjobs.titles_by_department(COM)), - "spt" = filtered_nano_crew_manifest(SSjobs.titles_by_department(SPT)), - "sci" = filtered_nano_crew_manifest(SSjobs.titles_by_department(SCI)), - "sec" = filtered_nano_crew_manifest(SSjobs.titles_by_department(SEC)), - "eng" = filtered_nano_crew_manifest(SSjobs.titles_by_department(ENG)), - "med" = filtered_nano_crew_manifest(SSjobs.titles_by_department(MED)), - "sup" = filtered_nano_crew_manifest(SSjobs.titles_by_department(SUP)), - "exp" = filtered_nano_crew_manifest(SSjobs.titles_by_department(EXP)), - "srv" = filtered_nano_crew_manifest(SSjobs.titles_by_department(SRV)), - "bot" = silicon_nano_crew_manifest(SSjobs.titles_by_department(MSC)), - "civ" = filtered_nano_crew_manifest(SSjobs.titles_by_department(CIV)) - ) - -/proc/flat_nano_crew_manifest() - . = list() - . += filtered_nano_crew_manifest(null, TRUE) - . += silicon_nano_crew_manifest(SSjobs.titles_by_department(MSC)) \ No newline at end of file diff --git a/code/modules/modular_computers/file_system/program.dm b/code/modules/modular_computers/file_system/program.dm deleted file mode 100644 index d096a6b3cedf1..0000000000000 --- a/code/modules/modular_computers/file_system/program.dm +++ /dev/null @@ -1,208 +0,0 @@ -// /program/ files are executable programs that do things. FILE NAME MUST BE UNIQUE IF YOU WANT THE PROGRAM TO BE DOWNLOADABLE FROM NTNET! -/datum/computer_file/program - filename = "UnknownProgram" - filetype = "PRG" - - /// List of required accesses to run/download the program. - var/required_access = null - /// Whether the program checks for required_access when run. - var/requires_access_to_run = TRUE - /// Whether the program checks for required_access when downloading. - var/requires_access_to_download = TRUE - - /// If the program uses NanoModule, put it here and it will be automagically opened. Otherwise implement ui_interact. - var/datum/nano_module/NM = null - /// Path to nanomodule, make sure to set this if implementing new program. - var/nanomodule_path = null - /// One of `PROGRAM_STATE_*` - specifies whether this program is running. - var/program_state = PROGRAM_STATE_KILLED - /// OS that this program is running on. - var/datum/extension/interactive/ntos/computer - - /// User-friendly name of this program. - var/filedesc = "Unknown Program" - /// Short description of this program's function. - var/extended_desc = "N/A" - /// Category that this program belongs to. - var/category = PROG_MISC - /// Bitflags (Any of `PROGRAM_*`) or PROGRAM_ALL - var/usage_flags = PROGRAM_ALL & ~PROGRAM_PDA - - /// Program-specific screen icon state. - var/program_icon_state = null - /// Program-specific keyboard icon state. - var/program_key_state = "standby_key" - /// Icon to use for program's link in main menu. - var/program_menu_icon = "newwin" - /// Example: "something.gif" - a header image that will be rendered in computer's UI when this program is running at background. Images are taken from /nano/images/status_icons. - var/ui_header = null - - /// Set to TRUE for program to require nonstop NTNet connection to run. If NTNet connection is lost program crashes. - var/requires_ntnet = FALSE - /// Optional, if above is set to TRUE, checks for specific function of NTNet (One of NTNET_*). - var/requires_ntnet_feature = 0 - /// Optional string that describes what NTNet server/system this program connects to. Used in default logging. - var/network_destination = null - - /// Whether the program can be downloaded from NTNet. Set to FALSE to disable. - var/available_on_ntnet = TRUE - /// Whether the program can be downloaded from SyndiNet (accessible via emagging the computer). Set to TRUE to enable. - var/available_on_syndinet = FALSE - /// Holder for skill value of current/recent operator for programs that tick. - var/operator_skill = SKILL_MIN - -/datum/computer_file/program/Destroy() - if(computer && computer.active_program == src) - computer.kill_program(src) - computer = null - . = ..() - -/datum/computer_file/program/nano_host() - return computer && computer.nano_host() - -/datum/computer_file/program/clone() - var/datum/computer_file/program/temp = ..() - temp.required_access = required_access - temp.nanomodule_path = nanomodule_path - temp.filedesc = filedesc - temp.program_icon_state = program_icon_state - temp.requires_ntnet = requires_ntnet - temp.requires_ntnet_feature = requires_ntnet_feature - temp.usage_flags = usage_flags - return temp - -/// Relays icon update to the computer. -/datum/computer_file/program/proc/update_computer_icon() - if(istype(computer)) - computer.update_host_icon() - return - -/datum/computer_file/program/proc/is_supported_by_hardware(var/hardware_flag) - if(!(hardware_flag & usage_flags)) - return FALSE - return TRUE - -/// Called by Process() on device that runs us, once every tick. Remember to call ..() if overriding -/datum/computer_file/program/proc/process_tick() - return - -/// Attempts to create a log in global ntnet datum. Returns TRUE on success, FALSE on fail. -/datum/computer_file/program/proc/generate_network_log(text) - if(computer) - return computer.add_log(text) - return FALSE - -/// Check if the user can run program. Only humans can operate computer. Automatically called in run_program(). User has to wear their ID or have it inhand for ID Scan to work. Can also be called manually, with optional parameter being access_to_check to scan the user's ID -/datum/computer_file/program/proc/can_run(mob/living/user, loud = FALSE, access_to_check) - if(!requires_access_to_run) - return TRUE - // Defaults to required_access - if(!access_to_check) - access_to_check = required_access - if(!access_to_check) // No required_access, allow it. - return TRUE - - // Admin override - allows operation of any computer as aghosted admin, as if you had any required access. - if(isghost(user) && check_rights(R_ADMIN, 0, user)) - return TRUE - - if(!istype(user)) - return FALSE - - var/obj/item/card/id/I = user.GetIdCard() - if(!I) - if(loud) - to_chat(user, "\The [computer] flashes an \"RFID Error - Unable to scan ID\" warning.") - return FALSE - - if(access_to_check in I.access) - return TRUE - else if(loud) - to_chat(user, "\The [computer] flashes an \"Access Denied\" warning.") - -/// This attempts to retrieve header data for NanoUIs. If implementing completely new device of different type than existing ones, always include the device here in this proc. This proc basically relays the request to whatever is running the program. -/datum/computer_file/program/proc/get_header_data() - if(computer) - return computer.get_header_data() - return list() - -/// When implementing new program based device, use this to run the program. May be overriden to add extra logic. Remember to include ..() call. -/datum/computer_file/program/proc/on_startup(mob/living/user, datum/extension/interactive/ntos/new_host) - program_state = PROGRAM_STATE_BACKGROUND - computer = new_host - if(nanomodule_path) - NM = new nanomodule_path(src, new /datum/topic_manager/program(src), src) - if(user) - NM.using_access = user.GetAccess() - if(requires_ntnet && network_destination) - generate_network_log("Connection opened to [network_destination].") - return TRUE - -/// Use this proc to kill the program. Designed to be implemented by each program if it requires on-quit logic, such as the NTNRC client. -/datum/computer_file/program/proc/on_shutdown(forced = 0) - program_state = PROGRAM_STATE_KILLED - if(requires_ntnet && network_destination) - generate_network_log("Connection to [network_destination] closed.") - if(NM) - qdel(NM) - NM = null - return TRUE - -/// This is called every tick when the program is enabled. Ensure you do parent call if you override it. If parent returns TRUE continue with UI initialisation. It returns FALSE if it can't run or if NanoModule was used instead. I suggest using NanoModules where applicable. -/datum/computer_file/program/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1) - if(program_state != PROGRAM_STATE_ACTIVE) // Our program was closed. Close the ui if it exists. - if(ui) - ui.close() - return computer.ui_interact(user) - if(istype(NM)) - NM.ui_interact(user, ui_key, null, force_open) - return FALSE - return TRUE - -/** - * CONVENTIONS, READ THIS WHEN CREATING NEW PROGRAM AND OVERRIDING THIS PROC: - * Topic calls are automatically forwarded from NanoModule this program contains. - * Calls beginning with "PRG_" are reserved for programs handling. - * Calls beginning with "PC_" are reserved for computer handling (by whatever runs the program) - * ALWAYS INCLUDE PARENT CALL ..() AT THE TOP OF THE PROC OR DIE IN FIRE. - * Return values should be one of TOPIC_* - */ -/datum/computer_file/program/Topic(href, href_list) - if(..()) - return TOPIC_HANDLED - if(computer) - return computer.Topic(href, href_list) - -/// Relays the call to nano module, if we have one -/datum/computer_file/program/proc/check_eye(var/mob/user) - if(NM) - return NM.check_eye(user) - else - return -1 - -/datum/nano_module/program - available_to_ai = FALSE - var/datum/computer_file/program/program = null // Program-Based computer program that runs this nano module. Defaults to null. - -/datum/nano_module/program/New(host, topic_manager, program) - ..() - src.program = program - -/datum/topic_manager/program - var/datum/program - -/datum/topic_manager/program/New(datum/program) - ..() - src.program = program - -/// Calls forwarded to PROGRAM itself should begin with "PRG_", calls forwarded to COMPUTER running the program should begin with "PC_" -/datum/topic_manager/program/Topic(href, href_list) - return program && program.Topic(href, href_list) - -/datum/computer_file/program/apply_visual(mob/M) - if(NM) - NM.apply_visual(M) - -/datum/computer_file/program/remove_visual(mob/M) - if(NM) - NM.remove_visual(M) diff --git a/code/modules/modular_computers/file_system/program_events.dm b/code/modules/modular_computers/file_system/program_events.dm deleted file mode 100644 index 330e391d9790a..0000000000000 --- a/code/modules/modular_computers/file_system/program_events.dm +++ /dev/null @@ -1,19 +0,0 @@ -// Events are sent to the program by the computer. -// Always include a parent call when overriding an event. - -/// Called when the ID card is removed from computer. ID is removed AFTER this proc. -/datum/computer_file/program/proc/event_idremoved(var/background) - -/// Called when the computer fails due to power loss. Override when program wants to specifically react to power loss. -/datum/computer_file/program/proc/event_powerfailure(var/background) - -/// Called when the network connectivity fails. Computer does necessary checks and only calls this when requires_ntnet_feature and similar variables are not met. -/datum/computer_file/program/proc/event_networkfailure(var/background) - if(!computer) - return - computer.kill_program_remote(src, TRUE) - if(background) - computer.visible_error("Network connectivity lost - process [filename].[filetype] (PID [rand(100,999)]) terminated.") - else - computer.visible_error("FATAL NETWORK ERROR - NTNet connection lost. Please try again later. If problem persists, please contact your system administrator.") - computer.update_host_icon() diff --git a/code/modules/modular_computers/file_system/programs/antagonist/access_decrypter.dm b/code/modules/modular_computers/file_system/programs/antagonist/access_decrypter.dm deleted file mode 100644 index dfe4ca3fb2eba..0000000000000 --- a/code/modules/modular_computers/file_system/programs/antagonist/access_decrypter.dm +++ /dev/null @@ -1,163 +0,0 @@ -/datum/computer_file/program/access_decrypter - filename = "nt_accrypt" - filedesc = "NTNet Access Decrypter" - program_icon_state = "hostile" - program_key_state = "security_key" - program_menu_icon = "unlocked" - extended_desc = "This highly advanced script can very slowly decrypt operational codes used in almost any network. These codes can be downloaded to an ID card to expand the available access. The system administrator will probably notice this." - size = 34 - requires_ntnet = TRUE - available_on_ntnet = FALSE - available_on_syndinet = TRUE - nanomodule_path = /datum/nano_module/program/access_decrypter - var/message = "" - var/running = FALSE - var/progress = 0 - var/target_progress = 300 - var/datum/access/target_access = null - var/list/restricted_access_codes = list(access_change_ids) // access codes that are not hackable due to balance reasons - var/list/skill_restricted_access_codes = list( - access_network = SKILL_EXPERT, - access_network_admin = SKILL_PROF - ) - -/datum/computer_file/program/access_decrypter/on_shutdown(var/forced) - reset() - ..(forced) - -/datum/computer_file/program/access_decrypter/proc/reset() - running = FALSE - message = "" - progress = 0 - -/datum/computer_file/program/access_decrypter/process_tick() - . = ..() - if(!running) - return - var/obj/item/stock_parts/computer/processor_unit/CPU = computer.get_component(PART_CPU) - var/obj/item/stock_parts/computer/card_slot/RFID = computer.get_component(PART_CARD) - if(!istype(CPU) || !CPU.check_functionality() || !istype(RFID) || !RFID.check_functionality()) - message = "A fatal hardware error has been detected." - return - if(!istype(RFID.stored_card)) - message = "RFID card has been removed from the device. Operation aborted." - return - - progress += get_speed() - - if(progress >= target_progress) - if(prob(20 * max(SKILL_ADEPT - operator_skill, 0))) // Oops - var/list/valid_access_values = get_all_station_access() - valid_access_values -= restricted_access_codes - valid_access_values -= RFID.stored_card.access - for(var/skill_access in skill_restricted_access_codes) - // Don't want to randomly assign an access that we wouldn't be able to decrypt normally - if(skill_restricted_access_codes[skill_access] && operator_skill < skill_restricted_access_codes[skill_access]) - valid_access_values -= skill_access - target_access = get_access_by_id(pick(valid_access_values)) - RFID.stored_card.access |= target_access.id - if (!prob(get_sneak_chance())) - ntnet_global.add_log_with_ids_check("Unauthorised access to primary keycode database - downloaded access codes for: [target_access.desc].", computer.get_component(PART_NETWORK)) - message = "Successfully decrypted and saved operational key codes. Downloaded access codes for: [target_access.desc]." - target_access = null - reset() - -/datum/computer_file/program/access_decrypter/Topic(href, href_list) - if(..()) - return TOPIC_HANDLED - operator_skill = usr.get_skill_value(SKILL_COMPUTER) - if(href_list["PRG_reset"]) - reset() - return TOPIC_HANDLED - if(href_list["PRG_execute"]) - if(running) - return TOPIC_HANDLED - var/obj/item/stock_parts/computer/processor_unit/CPU = computer.get_component(PART_CPU) - var/obj/item/stock_parts/computer/card_slot/RFID = computer.get_component(PART_CARD) - if(!istype(CPU) || !CPU.check_functionality() || !istype(RFID) || !RFID.check_functionality()) - message = "A fatal hardware error has been detected." - return - if(!istype(RFID.stored_card)) - message = "RFID card is not present in the device. Operation aborted." - return - - var/access = href_list["PRG_execute"] - var/obj/item/card/id/id_card = RFID.stored_card - if(access in id_card.access) - return TOPIC_HANDLED - if(access in restricted_access_codes) - return TOPIC_HANDLED - if(skill_restricted_access_codes[access] && operator_skill < skill_restricted_access_codes[access]) - return TOPIC_HANDLED - target_access = get_access_by_id(access) - if(!target_access) - return TOPIC_HANDLED - - running = TRUE - - if (!prob(get_sneak_chance())) - ntnet_global.add_log_with_ids_check("Unauthorised access attempt to primary keycode database.", computer.get_component(PART_NETWORK)) - return TOPIC_HANDLED - -/datum/computer_file/program/access_decrypter/proc/get_sneak_chance() - return max(operator_skill - SKILL_ADEPT, 0) * 30 - -/datum/computer_file/program/access_decrypter/proc/get_speed() - var/skill_speed_modifier = 1 + (operator_skill - SKILL_ADEPT)/(SKILL_MAX - SKILL_MIN) - var/obj/item/stock_parts/computer/processor_unit/CPU = computer.get_component(PART_CPU) - return CPU?.processing_power * skill_speed_modifier - -/datum/nano_module/program/access_decrypter - name = "NTNet Access Decrypter" - -/datum/nano_module/program/access_decrypter/ui_interact(mob/user, ui_key = "main", datum/nanoui/ui = null, force_open = 1, datum/topic_state/state = GLOB.default_state) - if(!ntnet_global) - return - var/datum/computer_file/program/access_decrypter/PRG = program - var/list/data = list() - if(!istype(PRG)) - return - data = PRG.get_header_data() - - var/obj/item/stock_parts/computer/card_slot/RFID = PRG.computer.get_component(PART_CARD) - if(PRG.message) - data["message"] = PRG.message - else if(PRG.running) - data["running"] = 1 - data["rate"] = PRG.get_speed() - - // Stolen from DOS traffic generator, generates strings of 1s and 0s - var/percentage = (PRG.progress / PRG.target_progress) * 100 - var/list/strings[0] - for(var/j, j<10, j++) - var/string = "" - for(var/i, i<20, i++) - string = "[string][prob(percentage)]" - strings.Add(string) - data["dos_strings"] = strings - else if(RFID && RFID.stored_card) - var/obj/item/card/id/id_card = RFID.stored_card - var/list/regions = list() - for(var/i = ACCESS_REGION_MIN; i <= ACCESS_REGION_MAX; i++) - var/list/accesses = list() - for(var/access in get_region_accesses(i)) - if (get_access_desc(access)) - accesses.Add(list(list( - "desc" = replacetext_char(get_access_desc(access), " ", " "), - "ref" = access, - "allowed" = (access in id_card.access) ? 1 : 0, - "blocked" = ((access in PRG.restricted_access_codes) || (PRG.skill_restricted_access_codes[access] && PRG.operator_skill < PRG.skill_restricted_access_codes[access])) ? 1 : 0 - ))) - - regions.Add(list(list( - "name" = get_region_accesses_name(i), - "accesses" = accesses))) - data["regions"] = regions - - ui = SSnano.try_update_ui(user, src, ui_key, ui, data, force_open) - if (!ui) - ui = new(user, src, ui_key, "access_decrypter.tmpl", "NTNet Access Decrypter", 550, 400, state = state) - ui.auto_update_layout = 1 - ui.set_initial_data(data) - ui.open() - ui.set_auto_update(1) diff --git a/code/modules/modular_computers/file_system/programs/antagonist/dos.dm b/code/modules/modular_computers/file_system/programs/antagonist/dos.dm deleted file mode 100644 index fc107c6dd6ffc..0000000000000 --- a/code/modules/modular_computers/file_system/programs/antagonist/dos.dm +++ /dev/null @@ -1,111 +0,0 @@ -/datum/computer_file/program/ntnet_dos - filename = "ntn_dos" - filedesc = "DoS Traffic Generator" - program_icon_state = "hostile" - program_key_state = "security_key" - program_menu_icon = "arrow-4-diag" - extended_desc = "This advanced script can perform denial of service attacks against NTNet quantum relays. The system administrator will probably notice this. Multiple devices can run this program together against same relay for increased effect" - size = 20 - requires_ntnet = TRUE - available_on_ntnet = FALSE - available_on_syndinet = TRUE - nanomodule_path = /datum/nano_module/program/computer_dos - var/obj/machinery/ntnet_relay/target = null - var/dos_speed = 0 - var/error = "" - var/executed = FALSE - -/datum/computer_file/program/ntnet_dos/process_tick() - dos_speed = computer.get_ntnet_speed(computer.get_ntnet_status()) * (NTNETSPEED_DOS_AMPLIFICATION + operator_skill - SKILL_BASIC) - if(target && executed) - target.dos_overload += dos_speed - if(!target.operable()) - target.dos_sources.Remove(src) - target = null - error = "Connection to destination relay lost." - -/datum/computer_file/program/ntnet_dos/on_shutdown(forced) - if(target) - target.dos_sources.Remove(src) - target = null - executed = FALSE - - ..(forced) - -/datum/nano_module/program/computer_dos - name = "DoS Traffic Generator" - -/datum/nano_module/program/computer_dos/ui_interact(mob/user, ui_key = "main", datum/nanoui/ui = null, force_open = 1, datum/topic_state/state = GLOB.default_state) - if(!ntnet_global) - return - var/datum/computer_file/program/ntnet_dos/PRG = program - var/list/data = list() - if(!istype(PRG)) - return - data = PRG.get_header_data() - - if(PRG.error) - data["error"] = PRG.error - else if(PRG.target && PRG.executed) - data["target"] = 1 - data["speed"] = PRG.dos_speed - - // This is mostly visual, generate some strings of 1s and 0s - // Probability of 1 is equal of completion percentage of DoS attack on this relay. - // Combined with UI updates this adds quite nice effect to the UI - var/percentage = PRG.target.dos_overload * 100 / PRG.target.dos_capacity - var/list/strings[0] - for(var/j, j<10, j++) - var/string = "" - for(var/i, i<20, i++) - string = "[string][prob(percentage)]" - strings.Add(string) - data["dos_strings"] = strings - else - var/list/relays[0] - for(var/obj/machinery/ntnet_relay/R in ntnet_global.relays) - relays.Add(R.uid) - data["relays"] = relays - data["focus"] = PRG.target ? PRG.target.uid : null - - ui = SSnano.try_update_ui(user, src, ui_key, ui, data, force_open) - if (!ui) - ui = new(user, src, ui_key, "ntnet_dos.tmpl", "DoS Traffic Generator", 400, 250, state = state) - ui.auto_update_layout = 1 - ui.set_initial_data(data) - ui.open() - ui.set_auto_update(1) - -/datum/computer_file/program/ntnet_dos/Topic(href, href_list) - if(..()) - return TOPIC_HANDLED - if(href_list["PRG_target_relay"]) - for(var/obj/machinery/ntnet_relay/R in ntnet_global.relays) - if("[R.uid]" == href_list["PRG_target_relay"]) - target = R - return TOPIC_HANDLED - if(href_list["PRG_reset"]) - if(target) - target.dos_sources.Remove(src) - target = null - executed = FALSE - error = "" - return TOPIC_HANDLED - if(href_list["PRG_execute"]) - if(!target) - return TOPIC_HANDLED - executed = TRUE - target.dos_sources.Add(src) - operator_skill = usr.get_skill_value(SKILL_COMPUTER) - - var/list/sources_to_show = list(computer.get_network_tag()) - var/extra_to_show = 2 * max(operator_skill - SKILL_ADEPT, 0) - if(extra_to_show) - for(var/i = 1, i <= extra_to_show, i++) - var/nid = pick(ntnet_global.registered_nids) - var/datum/extension/interactive/ntos/os = ntnet_global.registered_nids[nid] - if(os.get_ntnet_status()) - sources_to_show |= os.get_network_tag() - - ntnet_global.add_log_with_ids_check("Excess traffic flood targeting Quantum Relay ([target.uid]) detected from [length(sources_to_show)] device\s: [english_list(sources_to_show)]") - return TRUE diff --git a/code/modules/modular_computers/file_system/programs/antagonist/hacked_camera.dm b/code/modules/modular_computers/file_system/programs/antagonist/hacked_camera.dm deleted file mode 100644 index 869e748dd07b8..0000000000000 --- a/code/modules/modular_computers/file_system/programs/antagonist/hacked_camera.dm +++ /dev/null @@ -1,40 +0,0 @@ -/datum/computer_file/program/camera_monitor/hacked - filename = "camcrypt" - filedesc = "Camera Decryption Tool" - nanomodule_path = /datum/nano_module/camera_monitor/hacked - program_icon_state = "hostile" - program_key_state = "security_key" - program_menu_icon = "zoomin" - extended_desc = "This very advanced piece of software uses adaptive programming and large database of cipherkeys to bypass most encryptions used on camera networks. Be warned that system administrator may notice this." - size = 73 // Very large, a price for bypassing ID checks completely. - available_on_ntnet = FALSE - available_on_syndinet = TRUE - -/datum/computer_file/program/camera_monitor/hacked/process_tick() - ..() - if(program_state != PROGRAM_STATE_ACTIVE) // Background programs won't trigger alarms. - return - - var/datum/nano_module/camera_monitor/hacked/HNM = NM - - // The program is active and connected to one of the station's networks. Has a very small chance to trigger IDS alarm every tick. - if(HNM && HNM.current_network && (HNM.current_network in GLOB.using_map.station_networks) && prob((SKILL_MAX - operator_skill) * 0.05)) - ntnet_global.add_log_with_ids_check("Unauthorised access detected to camera network [HNM.current_network].", computer.get_component(PART_NETWORK)) - -/datum/computer_file/program/camera_monitor/hacked/ui_interact(mob/user) - operator_skill = user.get_skill_value(SKILL_COMPUTER) - . = ..() // Actual work done by nanomodule's parent. - -/datum/nano_module/camera_monitor/hacked - name = "Hacked Camera Monitoring Program" - available_to_ai = FALSE - -/datum/nano_module/camera_monitor/hacked/can_access_network(mob/user, network_access) - return TRUE - -// The hacked variant has access to all commonly used networks. -/datum/nano_module/camera_monitor/hacked/modify_networks_list(var/list/networks) - networks.Add(list(list("tag" = NETWORK_MERCENARY, "has_access" = 1))) - networks.Add(list(list("tag" = NETWORK_ERT, "has_access" = 1))) - networks.Add(list(list("tag" = NETWORK_CRESCENT, "has_access" = 1))) - return networks \ No newline at end of file diff --git a/code/modules/modular_computers/file_system/programs/antagonist/revelation.dm b/code/modules/modular_computers/file_system/programs/antagonist/revelation.dm deleted file mode 100644 index e96f07ce25238..0000000000000 --- a/code/modules/modular_computers/file_system/programs/antagonist/revelation.dm +++ /dev/null @@ -1,73 +0,0 @@ -/datum/computer_file/program/revelation - filename = "revelation" - filedesc = "Revelation" - program_icon_state = "hostile" - program_key_state = "security_key" - program_menu_icon = "home" - extended_desc = "This virus can destroy hard drive of system it is executed on. It may be obfuscated to look like another non-malicious program. Once armed, it will destroy the system upon next execution." - size = 13 - requires_ntnet = FALSE - available_on_ntnet = FALSE - available_on_syndinet = TRUE - nanomodule_path = /datum/nano_module/program/revelation - var/armed = FALSE - -/datum/computer_file/program/revelation/on_startup(mob/living/user, datum/extension/interactive/ntos/new_host) - . = ..(user, new_host) - if(armed) - activate() - -/datum/computer_file/program/revelation/proc/activate() - if(!computer) - return - - computer.visible_error("Hardware error: Voltage reaching unsafe leve-") - computer.system_shutdown() - computer.voltage_overload() - -/datum/computer_file/program/revelation/Topic(href, href_list) - if(..()) - return TOPIC_HANDLED - else if(href_list["PRG_arm"]) - armed = !armed - return TOPIC_HANDLED - else if(href_list["PRG_activate"]) - activate() - return TOPIC_HANDLED - else if(href_list["PRG_obfuscate"]) - var/mob/living/user = usr - var/newname = sanitize(input(user, "Enter new program name: ")) - if(newname && program_state == PROGRAM_STATE_ACTIVE) - filedesc = newname - if(ntnet_global) - for(var/datum/computer_file/program/P in ntnet_global.available_station_software) - if(filedesc == P.filedesc) - program_menu_icon = P.program_menu_icon - break - return TOPIC_HANDLED - -/datum/computer_file/program/revelation/clone() - var/datum/computer_file/program/revelation/temp = ..() - temp.armed = armed - return temp - -/datum/nano_module/program/revelation - name = "Revelation Virus" - -/datum/nano_module/program/revelation/ui_interact(mob/user, ui_key = "main", datum/nanoui/ui = null, force_open = 1, datum/topic_state/state = GLOB.default_state) - var/list/data = list() - var/datum/computer_file/program/revelation/PRG = program - if(!istype(PRG)) - return - - data = PRG.get_header_data() - - data["armed"] = PRG.armed - - ui = SSnano.try_update_ui(user, src, ui_key, ui, data, force_open) - if (!ui) - ui = new(user, src, ui_key, "revelation.tmpl", "Revelation Virus", 400, 250, state = state) - ui.auto_update_layout = 1 - ui.set_initial_data(data) - ui.open() - ui.set_auto_update(1) diff --git a/code/modules/modular_computers/file_system/programs/antagonist/uplink.dm b/code/modules/modular_computers/file_system/programs/antagonist/uplink.dm deleted file mode 100644 index 7264b17fdadf9..0000000000000 --- a/code/modules/modular_computers/file_system/programs/antagonist/uplink.dm +++ /dev/null @@ -1,42 +0,0 @@ -/datum/computer_file/program/uplink - filename = "taxquickly" - filedesc = "TaxQuickly 1.45b" - program_icon_state = "uplink" - extended_desc = "An online tax filing software. It is a few years out of date." - size = 0 // it is cloud based - requires_ntnet = FALSE - available_on_ntnet = FALSE - usage_flags = PROGRAM_PDA - nanomodule_path = /datum/nano_module/program/uplink - - var/password - var/authenticated = 0 - -/datum/computer_file/program/uplink/New(var/password) - src.password = password - -/datum/nano_module/program/uplink - name = "TaxQuickly 1.45b" - -/datum/nano_module/program/uplink/ui_interact(var/mob/user, var/ui_key = "main", datum/nanoui/ui = null, var/force_open = 1, var/master_ui = null, var/datum/topic_state/state = GLOB.default_state) - var/datum/computer_file/program/uplink/prog = program - var/obj/item/holder = program.computer.get_physical_host() - if(istype(holder) && holder.hidden_uplink && prog.password) - if(prog.authenticated) - if(!CanInteract(user, state)) - return - if(alert(user, "Resume or close and secure?", name, "Resume", "Close") == "Resume") - holder.hidden_uplink.trigger(user) - return - else - holder.hidden_uplink.toggle() - SSnano.close_user_uis(user, holder.hidden_uplink, "main") - //No return here. We want the proc to run the last two lines. - else if(holder.hidden_uplink.check_trigger(user, input(user, "Please enter your unique tax ID:", "Authentication"), prog.password)) - prog.authenticated = 1 - return - else - program.computer.show_error(user, "ID not found") - - prog.authenticated = 0 - program.computer.kill_program(program) diff --git a/code/modules/modular_computers/file_system/programs/command/card.dm b/code/modules/modular_computers/file_system/programs/command/card.dm deleted file mode 100644 index f6b0224f2e939..0000000000000 --- a/code/modules/modular_computers/file_system/programs/command/card.dm +++ /dev/null @@ -1,255 +0,0 @@ -/datum/computer_file/program/card_mod - filename = "cardmod" - filedesc = "ID card modification program" - nanomodule_path = /datum/nano_module/program/card_mod - program_icon_state = "id" - program_key_state = "id_key" - program_menu_icon = "key" - extended_desc = "Program for programming crew ID cards." - requires_ntnet = FALSE - size = 8 - category = PROG_COMMAND - -/datum/nano_module/program/card_mod - name = "ID card modification program" - var/mod_mode = 1 - var/is_centcom = 0 - var/show_assignments = 0 - -/datum/nano_module/program/card_mod/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1, var/datum/topic_state/state = GLOB.default_state) - var/list/data = host.initial_data() - var/obj/item/stock_parts/computer/card_slot/card_slot = program.computer.get_component(PART_CARD) - - data["src"] = "\ref[src]" - data["station_name"] = station_name() - data["manifest"] = html_crew_manifest() - data["assignments"] = show_assignments - data["have_id_slot"] = !!card_slot - data["have_printer"] = program.computer.has_component(PART_PRINTER) - data["authenticated"] = program.can_run(user) - if(!data["have_id_slot"] || !data["have_printer"]) - mod_mode = 0 //We can't modify IDs when there is no card reader - if(card_slot) - var/obj/item/card/id/id_card = card_slot.stored_card - data["has_id"] = !!id_card - data["id_account_number"] = id_card ? id_card.associated_account_number : null - data["id_email_login"] = id_card ? id_card.associated_email_login["login"] : null - data["id_email_password"] = id_card ? stars(id_card.associated_email_login["password"], 0) : null - data["id_rank"] = id_card && id_card.assignment ? id_card.assignment : "Unassigned" - data["id_owner"] = id_card && id_card.registered_name ? id_card.registered_name : "-----" - data["id_name"] = id_card ? id_card.name : "-----" - data["mmode"] = mod_mode - data["centcom_access"] = is_centcom - - data["command_jobs"] = format_jobs(SSjobs.titles_by_department(COM)) - data["support_jobs"] = format_jobs(SSjobs.titles_by_department(SPT)) - data["engineering_jobs"] = format_jobs(SSjobs.titles_by_department(ENG)) - data["medical_jobs"] = format_jobs(SSjobs.titles_by_department(MED)) - data["science_jobs"] = format_jobs(SSjobs.titles_by_department(SCI)) - data["security_jobs"] = format_jobs(SSjobs.titles_by_department(SEC)) - data["exploration_jobs"] = format_jobs(SSjobs.titles_by_department(EXP)) - data["service_jobs"] = format_jobs(SSjobs.titles_by_department(SRV)) - data["supply_jobs"] = format_jobs(SSjobs.titles_by_department(SUP)) - data["civilian_jobs"] = format_jobs(SSjobs.titles_by_department(CIV)) - data["centcom_jobs"] = format_jobs(get_all_centcom_jobs()) - - data["all_centcom_access"] = is_centcom ? get_accesses(1) : null - data["regions"] = get_accesses() - - if(card_slot && card_slot.stored_card) - var/obj/item/card/id/id_card = card_slot.stored_card - if(is_centcom) - var/list/all_centcom_access = list() - for(var/access in get_all_centcom_access()) - all_centcom_access.Add(list(list( - "desc" = replacetext_char(get_centcom_access_desc(access), " ", " "), - "ref" = access, - "allowed" = (access in id_card.access) ? 1 : 0))) - data["all_centcom_access"] = all_centcom_access - else - var/list/regions = list() - for(var/i = 1; i <= 8; i++) - var/list/accesses = list() - for(var/access in get_region_accesses(i)) - if (get_access_desc(access)) - accesses.Add(list(list( - "desc" = replacetext_char(get_access_desc(access), " ", " "), - "ref" = access, - "allowed" = (access in id_card.access) ? 1 : 0))) - - regions.Add(list(list( - "name" = get_region_accesses_name(i), - "accesses" = accesses))) - data["regions"] = regions - - ui = SSnano.try_update_ui(user, src, ui_key, ui, data, force_open) - if (!ui) - ui = new(user, src, ui_key, "identification_computer.tmpl", name, 600, 700, state = state) - ui.auto_update_layout = 1 - ui.set_initial_data(data) - ui.open() - -/datum/nano_module/program/card_mod/proc/format_jobs(list/jobs) - var/obj/item/card/id/id_card = program.computer.get_inserted_id() - var/list/formatted = list() - for(var/job in jobs) - formatted.Add(list(list( - "display_name" = replacetext_char(job, " ", " "), - "target_rank" = id_card && id_card.assignment ? id_card.assignment : "Unassigned", - "job" = job))) - - return formatted - -/datum/nano_module/program/card_mod/proc/get_accesses(var/is_centcom = 0) - return null - - -/datum/computer_file/program/card_mod/Topic(href, href_list) - if(..()) - return 1 - - var/mob/user = usr - var/obj/item/card/id/user_id_card = user?.GetIdCard() - var/obj/item/card/id/id_card = computer?.get_inserted_id() - var/datum/nano_module/program/card_mod/module = NM - - if (!user_id_card || !id_card || !module) - return - - switch(href_list["action"]) - if("switchm") - if(href_list["target"] == "mod") - module.mod_mode = 1 - else if (href_list["target"] == "manifest") - module.mod_mode = 0 - if("togglea") - if(module.show_assignments) - module.show_assignments = 0 - else - module.show_assignments = 1 - if("print") - if(!authorized(user_id_card)) - to_chat(usr, "Access denied.") - return - if(computer.has_component(PART_PRINTER)) //This option should never be called if there is no printer - if(module.mod_mode) - if(can_run(user, 1)) - var/contents = {"

              Access Report

              - Prepared By: [user_id_card.registered_name ? user_id_card.registered_name : "Unknown"]
              - For: [id_card.registered_name ? id_card.registered_name : "Unregistered"]
              -
              - Assignment: [id_card.assignment]
              - Account Number: #[id_card.associated_account_number]
              - Email account: [id_card.associated_email_login["login"]] - Email password: [stars(id_card.associated_email_login["password"], 0)] - Blood Type: [id_card.blood_type]

              - Access:
              - "} - - var/known_access_rights = get_access_ids(ACCESS_TYPE_STATION|ACCESS_TYPE_CENTCOM) - for(var/A in id_card.access) - if(A in known_access_rights) - contents += " [get_access_desc(A)]" - - if(!computer.print_paper(contents,"access report")) - to_chat(usr, "Hardware error: Printer was unable to print the file. It may be out of paper.") - return - else - var/contents = {"

              Crew Manifest

              -
              - [html_crew_manifest()] - "} - if(!computer.print_paper(contents, "crew manifest ([stationtime2text()])")) - to_chat(usr, "Hardware error: Printer was unable to print the file. It may be out of paper.") - return - if("eject") - var/obj/item/stock_parts/computer/card_slot/card_slot = computer.get_component(PART_CARD) - if(computer.get_inserted_id()) - card_slot.eject_id(user) - else - card_slot.insert_id(user.get_active_hand(), user) - if("terminate") - if(!authorized(user_id_card)) - to_chat(usr, "Access denied.") - return - if(computer && can_run(user, 1)) - id_card.assignment = "Terminated" - remove_nt_access(id_card) - callHook("terminate_employee", list(id_card)) - if("edit") - if(!authorized(user_id_card)) - to_chat(usr, "Access denied.") - return - if(computer && can_run(user, 1)) - if(href_list["name"]) - var/temp_name = sanitizeName(input("Enter name.", "Name", id_card.registered_name),allow_numbers=TRUE) - if(temp_name) - id_card.registered_name = temp_name - id_card.formal_name_suffix = initial(id_card.formal_name_suffix) - id_card.formal_name_prefix = initial(id_card.formal_name_prefix) - else - computer.show_error(usr, "Invalid name entered!") - else if(href_list["account"]) - var/account_num = text2num(input("Enter account number.", "Account", id_card.associated_account_number)) - id_card.associated_account_number = account_num - else if(href_list["elogin"]) - var/email_login = input("Enter email login.", "Email login", id_card.associated_email_login["login"]) - id_card.associated_email_login["login"] = email_login - else if(href_list["epswd"]) - var/email_password = input("Enter email password.", "Email password") - id_card.associated_email_login["password"] = email_password - if("assign") - if(!authorized(user_id_card)) - to_chat(usr, "Access denied.") - return - if(computer && can_run(user, 1) && id_card) - var/t1 = href_list["assign_target"] - if(t1 == "Custom") - var/temp_t = sanitize(input("Enter a custom job assignment.","Assignment", id_card.assignment), 45) - //let custom jobs function as an impromptu alt title, mainly for sechuds - if(temp_t) - id_card.assignment = temp_t - else - var/list/access = list() - if(module.is_centcom) - access = get_centcom_access(t1) - else - var/datum/job/jobdatum = SSjobs.get_by_title(t1) - if(!jobdatum) - to_chat(usr, "No log exists for this job: [t1]") - return - - access = jobdatum.get_access() - - remove_nt_access(id_card) - apply_access(id_card, access) - id_card.assignment = t1 - id_card.rank = t1 - - callHook("reassign_employee", list(id_card)) - if("access") - if(href_list["allowed"] && computer && can_run(user, 1) && id_card) - var/access_type = href_list["access_target"] - var/access_allowed = text2num(href_list["allowed"]) - if(access_type in get_access_ids(ACCESS_TYPE_STATION|ACCESS_TYPE_CENTCOM)) - for(var/access in user_id_card.access) - var/region_type = get_access_region_by_id(access_type) - if(access in GLOB.using_map.access_modify_region[region_type]) - id_card.access -= access_type - if(!access_allowed) - id_card.access += access_type - break - if(id_card) - id_card.SetName(text("[id_card.registered_name]'s ID Card ([id_card.assignment])")) - - SSnano.update_uis(NM) - return 1 - -/datum/computer_file/program/card_mod/proc/remove_nt_access(var/obj/item/card/id/id_card) - id_card.access -= get_access_ids(ACCESS_TYPE_STATION|ACCESS_TYPE_CENTCOM) - -/datum/computer_file/program/card_mod/proc/apply_access(var/obj/item/card/id/id_card, var/list/accesses) - id_card.access |= accesses - -/datum/computer_file/program/card_mod/proc/authorized(var/obj/item/card/id/id_card) - return id_card && (access_change_ids in id_card.access) \ No newline at end of file diff --git a/code/modules/modular_computers/file_system/programs/command/comm.dm b/code/modules/modular_computers/file_system/programs/command/comm.dm deleted file mode 100644 index 4c85b6119ca0e..0000000000000 --- a/code/modules/modular_computers/file_system/programs/command/comm.dm +++ /dev/null @@ -1,386 +0,0 @@ -#define STATE_DEFAULT 1 -#define STATE_MESSAGELIST 2 -#define STATE_VIEWMESSAGE 3 -#define STATE_STATUSDISPLAY 4 -#define STATE_ALERT_LEVEL 5 -/datum/computer_file/program/comm - filename = "comm" - filedesc = "Command and Communications Program" - program_icon_state = "comm" - program_key_state = "med_key" - program_menu_icon = "flag" - nanomodule_path = /datum/nano_module/program/comm - extended_desc = "Used to command and control. Can relay long-range communications. This program can not be run on tablet computers." - requires_ntnet = TRUE - size = 12 - usage_flags = PROGRAM_CONSOLE | PROGRAM_LAPTOP - network_destination = "long-range communication array" - category = PROG_COMMAND - var/datum/comm_message_listener/message_core = new - -/datum/computer_file/program/comm/clone() - var/datum/computer_file/program/comm/temp = ..() - temp.message_core.messages = null - temp.message_core.messages = message_core.messages.Copy() - return temp - -/datum/nano_module/program/comm - name = "Command and Communications Program" - available_to_ai = TRUE - var/current_status = STATE_DEFAULT - var/msg_line1 = "" - var/msg_line2 = "" - var/centcomm_message_cooldown = 0 - var/announcment_cooldown = 0 - var/datum/announcement/priority/crew_announcement = new - var/current_viewing_message_id = 0 - var/current_viewing_message = null - var/admin_access = list(access_bridge) - -/datum/nano_module/program/comm/New() - ..() - crew_announcement.newscast = 1 - -/datum/nano_module/program/comm/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1, var/datum/topic_state/state = GLOB.default_state) - - var/list/data = host.initial_data() - var/authenticated = check_access(user, admin_access) - - if(program && program.computer) - data["net_comms"] = program.computer.get_ntnet_capability(NTNET_COMMUNICATION) - data["net_syscont"] = program.computer.get_ntnet_capability(NTNET_SYSTEMCONTROL) - if(program.computer) - data["emagged"] = program.computer.emagged() - data["have_printer"] = program.computer.has_component(PART_PRINTER) - else - data["have_printer"] = 0 - else - data["emagged"] = 0 - data["net_comms"] = 1 - data["net_syscont"] = 1 - data["have_printer"] = 0 - - data["message_line1"] = msg_line1 - data["message_line2"] = msg_line2 - data["state"] = current_status - data["isAI"] = issilicon(usr) - data["boss_short"] = GLOB.using_map.boss_short - data["authenticated"] = authenticated - - var/decl/security_state/security_state = decls_repository.get_decl(GLOB.using_map.security_state) - data["current_security_level_ref"] = any2ref(security_state.current_security_level) - data["current_security_level_title"] = security_state.current_security_level.name - - data["cannot_change_security_level"] = !security_state.can_change_security_level() - data["current_security_level_is_high_security_level"] = security_state.current_security_level == security_state.high_security_level - var/list/security_levels = list() - for(var/decl/security_level/security_level in security_state.comm_console_security_levels) - var/list/security_setup = list() - security_setup["title"] = security_level.name - security_setup["ref"] = any2ref(security_level) - security_levels[++security_levels.len] = security_setup - data["security_levels"] = security_levels - - var/datum/comm_message_listener/l = obtain_message_listener() - data["messages"] = l.messages - data["message_deletion_allowed"] = l != global_message_listener - data["message_current_id"] = current_viewing_message_id - if(current_viewing_message) - data["message_current"] = current_viewing_message - - var/list/processed_evac_options = list() - if(!isnull(evacuation_controller)) - for (var/datum/evacuation_option/EO in evacuation_controller.available_evac_options()) - //if(EO.abandon_ship) EVACUATION, MAN!!! - // continue - var/list/option = list() - option["option_text"] = EO.option_text - option["option_target"] = EO.option_target - option["needs_syscontrol"] = EO.needs_syscontrol - option["silicon_allowed"] = EO.silicon_allowed - processed_evac_options[++processed_evac_options.len] = option - data["evac_options"] = processed_evac_options - - ui = SSnano.try_update_ui(user, src, ui_key, ui, data, force_open) - if(!ui) - ui = new(user, src, ui_key, "communication.tmpl", name, 550, 420, state = state) - ui.auto_update_layout = 1 - ui.set_initial_data(data) - ui.open() - -/datum/nano_module/program/comm/proc/is_authenticated(authenticated, var/mob/user) - if(program) - return program.can_run(user) - return TRUE - -/datum/nano_module/program/comm/proc/obtain_message_listener() - if(program) - var/datum/computer_file/program/comm/P = program - return P.message_core - return global_message_listener - -/datum/nano_module/program/comm/Topic(href, href_list) - if(..()) - return TOPIC_HANDLED - var/mob/user = usr - var/ntn_comm = (program && program.computer) ? program.computer.get_ntnet_capability(NTNET_COMMUNICATION) : TRUE - var/ntn_cont = (program && program.computer) ? program.computer.get_ntnet_capability(NTNET_SYSTEMCONTROL) : TRUE - var/datum/comm_message_listener/l = obtain_message_listener() - switch(href_list["action"]) - if("sw_menu") - . = TOPIC_HANDLED - current_status = text2num(href_list["target"]) - if("announce") - . = TOPIC_HANDLED - if(is_authenticated(user) && !issilicon(usr) && ntn_comm) - if(user) - var/obj/item/card/id/id_card = user.GetIdCard() - crew_announcement.announcer = GetNameAndAssignmentFromId(id_card) - else - crew_announcement.announcer = "Unknown" - if(announcment_cooldown) - to_chat(usr, "Please allow at least one minute to pass between announcements") - return - var/input = input(usr, "Please write a message to announce to the [station_name()].", "Priority Announcement") as null|message - if(!input || !can_still_topic()) - return - var/affected_zlevels = GetConnectedZlevels(get_host_z()) - crew_announcement.Announce(input, zlevels = affected_zlevels) - announcment_cooldown = 1 - spawn(600)//One minute cooldown - announcment_cooldown = 0 - if("message") - . = TOPIC_HANDLED - if(href_list["target"] == "emagged") - if(program) - if(is_authenticated(user) && program.computer.emagged() && !issilicon(usr) && ntn_comm) - if(centcomm_message_cooldown) - to_chat(usr, "Arrays recycling. Please stand by.") - SSnano.update_uis(src) - return - var/input = sanitize(input(usr, "Please choose a message to transmit to \[ABNORMAL ROUTING CORDINATES\] via quantum entanglement. Please be aware that this process is very expensive, and abuse will lead to... termination. Transmission does not guarantee a response. There is a 30 second delay before you may send another message, be clear, full and concise.", "To abort, send an empty message.", "") as null|text) - if(!input || !can_still_topic()) - return - Syndicate_announce(input, usr) - to_chat(usr, "Message transmitted.") - log_say("[key_name(usr)] has made an illegal announcement: [input]") - centcomm_message_cooldown = 1 - spawn(300)//30 second cooldown - centcomm_message_cooldown = 0 - else if(href_list["target"] == "regular") - if(is_authenticated(user) && !issilicon(usr) && ntn_comm) - if(centcomm_message_cooldown) - to_chat(usr, "Arrays recycling. Please stand by.") - SSnano.update_uis(src) - return - if(!is_relay_online())//Contact Centcom has a check, Syndie doesn't to allow for Traitor funs. - to_chat(usr, "No Emergency Bluespace Relay detected. Unable to transmit message.") - return - var/input = sanitize(input("Please choose a message to transmit to [GLOB.using_map.boss_short] via quantum entanglement. Please be aware that this process is very expensive, and abuse will lead to... termination. Transmission does not guarantee a response. There is a 30 second delay before you may send another message, be clear, full and concise.", "To abort, send an empty message.", "") as null|text) - if(!input || !can_still_topic()) - return - Centcomm_announce(input, usr) - to_chat(usr, "Message transmitted.") - log_say("[key_name(usr)] has made an IA [GLOB.using_map.boss_short] announcement: [input]") - centcomm_message_cooldown = 1 - spawn(300) //30 second cooldown - centcomm_message_cooldown = 0 - if("evac") - . = TOPIC_HANDLED - if(is_authenticated(user)) - var/datum/evacuation_option/selected_evac_option = evacuation_controller.evacuation_options[href_list["target"]] - if (isnull(selected_evac_option) || !istype(selected_evac_option)) - return - if (!selected_evac_option.silicon_allowed && issilicon(user)) - return - if (selected_evac_option.needs_syscontrol && !ntn_cont) - return - var/confirm = alert("Are you sure you want to [selected_evac_option.option_desc]?", name, "No", "Yes") - if (confirm == "Yes" && can_still_topic()) - evacuation_controller.handle_evac_option(selected_evac_option.option_target, user) - ntnet_global.add_log("***[program.computer.get_network_tag()] [selected_evac_option.option_desc]***") - if("setstatus") - . = TOPIC_HANDLED - if(is_authenticated(user) && ntn_cont) - switch(href_list["target"]) - if("line1") - var/linput = reject_bad_text(sanitize(input("Line 1", "Enter Message Text", msg_line1) as text|null, 40), 40) - if(can_still_topic()) - msg_line1 = linput - if("line2") - var/linput = reject_bad_text(sanitize(input("Line 2", "Enter Message Text", msg_line2) as text|null, 40), 40) - if(can_still_topic()) - msg_line2 = linput - if("message") - post_status("message", msg_line1, msg_line2) - if("image") - post_status("image", href_list["image"]) - else - post_status(href_list["target"]) - if("setalert") - . = TOPIC_HANDLED - if(is_authenticated(user) && !issilicon(usr) && ntn_cont && ntn_comm) - var/decl/security_state/security_state = decls_repository.get_decl(GLOB.using_map.security_state) - var/decl/security_level/target_level = locate(href_list["target"]) in security_state.comm_console_security_levels - if(target_level && security_state.can_switch_to(target_level)) - var/confirm = alert("Are you sure you want to change the alert level to [target_level.name]?", name, "No", "Yes") - if(confirm == "Yes" && can_still_topic()) - security_state.set_security_level(target_level) - else - to_chat(usr, "You press the button, but a red light flashes and nothing happens.") //This should never happen - - current_status = STATE_DEFAULT - if("viewmessage") - . = TOPIC_HANDLED - if(is_authenticated(user) && ntn_comm) - current_viewing_message_id = text2num(href_list["target"]) - for(var/list/m in l.messages) - if(m["id"] == current_viewing_message_id) - current_viewing_message = m - current_status = STATE_VIEWMESSAGE - if("delmessage") - . = TOPIC_HANDLED - if(is_authenticated(user) && ntn_comm && l != global_message_listener) - l.Remove(current_viewing_message) - current_status = STATE_MESSAGELIST - if("printmessage") - . = TOPIC_HANDLED - if(is_authenticated(user) && ntn_comm) - if(!program.computer.print_paper(current_viewing_message["contents"],current_viewing_message["title"])) - to_chat(usr, "Hardware Error: Printer was unable to print the selected file.") - if("request_synth") - var/confirm = alert("Вы уверены, что хотите сделать запрос на пробуждение Эксперементального Синтетика ЭКСО?", name, "Нет", "Да") - if(confirm == "Да") - to_chat(usr, "Консоль пиликает, посылая сигнал в систему криогенного хранения.") - if(GLOB.using_map.request_synth()) - to_chat(usr, "Консоль пиликает, подтверждая сигнал от системы криогенного хранения.") - else - to_chat(usr, "Консоль мигает красным, отклоняя ваш запрос в систему криогенного хранения. Синтетик ЭКСО уже производит процедуру пробуждения.") - if("unbolt_doors") - GLOB.using_map.unbolt_saferooms() - to_chat(usr, "The console beeps, confirming the signal was sent to have the saferooms unbolted.") - if("bolt_doors") - GLOB.using_map.bolt_saferooms() - to_chat(usr, "The console beeps, confirming the signal was sent to have the saferooms bolted.") - if("toggle_alert_border") - . = TOPIC_HANDLED - if(is_authenticated(user) && ntn_comm) - post_status("toggle_alert_border") - -#undef STATE_DEFAULT -#undef STATE_MESSAGELIST -#undef STATE_VIEWMESSAGE -#undef STATE_STATUSDISPLAY -#undef STATE_ALERT_LEVEL - -/* -General message handling stuff -*/ -var/global/list/comm_message_listeners = list() //We first have to initialize list then we can use it. -var/global/datum/comm_message_listener/global_message_listener = new //May be used by admins -var/global/last_message_id = 0 - -/proc/get_comm_message_id() - last_message_id = last_message_id + 1 - return last_message_id - -/proc/post_comm_message(var/message_title, var/message_text) - var/list/message = list() - message["id"] = get_comm_message_id() - message["title"] = message_title - message["contents"] = message_text - - for (var/datum/comm_message_listener/l in comm_message_listeners) - l.Add(message) - -/datum/comm_message_listener - var/list/messages - -/datum/comm_message_listener/New() - ..() - messages = list() - comm_message_listeners.Add(src) - -/datum/comm_message_listener/proc/Add(var/list/message) - messages[++messages.len] = message - -/datum/comm_message_listener/proc/Remove(var/list/message) - messages -= list(message) - -/proc/post_status(var/command, var/data1, var/data2) - - var/datum/radio_frequency/frequency = radio_controller.return_frequency(1435) - - if(!frequency) return - - var/datum/signal/status_signal = new - status_signal.transmission_method = 1 - status_signal.data["command"] = command - - switch(command) - if("message") - status_signal.data["msg1"] = data1 - status_signal.data["msg2"] = data2 - log_admin("STATUS: [key_name(usr)] set status screen message with: [data1] [data2]") - if("image") - status_signal.data["picture_state"] = data1 - if("toggle_alert_border") - status_signal.data["toggle_alert_border"] = TRUE - frequency.post_signal(signal = status_signal) - -/proc/cancel_call_proc(var/mob/user) - if (!evacuation_controller) - return - - if(evacuation_controller.cancel_evacuation()) - log_and_message_admins("has cancelled the evacuation.", user) - - return - - -/proc/is_relay_online() - for(var/obj/machinery/bluespacerelay/M in SSmachines.machinery) - if(M.stat == 0) - return 1 - return 0 - -/proc/call_shuttle_proc(var/mob/user, var/emergency) - if (!evacuation_controller) - return - - if(isnull(emergency)) - emergency = 1 - - if(!GLOB.universe.OnShuttleCall(usr)) - to_chat(user, "Cannot establish a bluespace connection.") - return - - if(GLOB.deathsquad.deployed) - to_chat(user, "[GLOB.using_map.boss_short] will not allow an evacuation to take place. Consider all contracts terminated.") - return - - if(evacuation_controller.deny) - to_chat(user, "An evacuation cannot be called at this time. Please try again later.") - return - - if(evacuation_controller.is_on_cooldown()) // Ten minute grace period to let the game get going without lolmetagaming. -- TLE - to_chat(user, evacuation_controller.get_cooldown_message()) - - if(evacuation_controller.is_evacuating()) - to_chat(user, "An evacuation is already underway.") - return - - if(evacuation_controller.call_evacuation(user, _emergency_evac = emergency)) - log_and_message_admins("[user? key_name(user) : "Autotransfer"] has called the shuttle.") - -/proc/init_autotransfer() - - if (!evacuation_controller) - return - - . = evacuation_controller.call_evacuation(null, _emergency_evac = FALSE, autotransfer = TRUE) - if(.) - //delay events in case of an autotransfer - var/delay = evacuation_controller.evac_arrival_time - world.time + (2 MINUTES) - SSevent.delay_events(EVENT_LEVEL_MODERATE, delay) - SSevent.delay_events(EVENT_LEVEL_MAJOR, delay) diff --git a/code/modules/modular_computers/file_system/programs/engineering/alarm_monitor.dm b/code/modules/modular_computers/file_system/programs/engineering/alarm_monitor.dm deleted file mode 100644 index 2c0b143f404e1..0000000000000 --- a/code/modules/modular_computers/file_system/programs/engineering/alarm_monitor.dm +++ /dev/null @@ -1,139 +0,0 @@ -/datum/computer_file/program/alarm_monitor - filename = "alarmmonitor" - filedesc = "Alarm Monitoring" - nanomodule_path = /datum/nano_module/alarm_monitor/engineering - ui_header = "alarm_green.gif" - program_icon_state = "alert-green" - program_key_state = "atmos_key" - program_menu_icon = "alert" - extended_desc = "This program provides visual interface for the alarm system." - requires_ntnet = TRUE - network_destination = "alarm monitoring network" - size = 5 - category = PROG_MONITOR - var/has_alert = 0 - -/datum/computer_file/program/alarm_monitor/process_tick() - ..() - var/datum/nano_module/alarm_monitor/NMA = NM - if(istype(NMA) && NMA.has_major_alarms()) - if(!has_alert) - program_icon_state = "alert-red" - ui_header = "alarm_red.gif" - update_computer_icon() - has_alert = 1 - else - if(has_alert) - program_icon_state = "alert-green" - ui_header = "alarm_green.gif" - update_computer_icon() - has_alert = 0 - return 1 - -/datum/nano_module/alarm_monitor - name = "Alarm monitor" - var/list_cameras = 0 // Whether or not to list camera references. A future goal would be to merge this with the enginering/security camera console. Currently really only for AI-use. - var/list/datum/alarm_handler/alarm_handlers // The particular list of alarm handlers this alarm monitor should present to the user. - available_to_ai = FALSE - -/datum/nano_module/alarm_monitor/New() - ..() - alarm_handlers = list() - -/datum/nano_module/alarm_monitor/all - available_to_ai = TRUE - -/datum/nano_module/alarm_monitor/all/New() - ..() - alarm_handlers = SSalarm.handlers - -/datum/nano_module/alarm_monitor/engineering/New() - ..() - alarm_handlers = list(GLOB.atmosphere_alarm, GLOB.camera_alarm, GLOB.fire_alarm, GLOB.power_alarm) - -/datum/nano_module/alarm_monitor/security/New() - ..() - alarm_handlers = list(GLOB.camera_alarm, GLOB.motion_alarm) - -/datum/nano_module/alarm_monitor/proc/register_alarm(var/object, var/procName) - for(var/datum/alarm_handler/AH in alarm_handlers) - AH.register_alarm(object, procName) - -/datum/nano_module/alarm_monitor/proc/unregister_alarm(var/object) - for(var/datum/alarm_handler/AH in alarm_handlers) - AH.unregister_alarm(object) - -/datum/nano_module/alarm_monitor/proc/all_alarms() - var/list/all_alarms = new() - for(var/datum/alarm_handler/AH in alarm_handlers) - all_alarms += AH.alarms(get_host_z()) - - return all_alarms - -/datum/nano_module/alarm_monitor/proc/major_alarms() - var/list/all_alarms = new() - for(var/datum/alarm_handler/AH in alarm_handlers) - all_alarms += AH.major_alarms(get_host_z()) - - return all_alarms - -// Modified version of above proc that uses slightly less resources, returns 1 if there is a major alarm, 0 otherwise. -/datum/nano_module/alarm_monitor/proc/has_major_alarms() - for(var/datum/alarm_handler/AH in alarm_handlers) - if(AH.has_major_alarms(get_host_z())) - return 1 - - return 0 - -/datum/nano_module/alarm_monitor/proc/minor_alarms() - var/list/all_alarms = new() - for(var/datum/alarm_handler/AH in alarm_handlers) - all_alarms += AH.minor_alarms(get_host_z()) - - return all_alarms - -/datum/nano_module/alarm_monitor/Topic(ref, href_list) - if(..()) - return 1 - if(href_list["switchTo"]) - var/obj/machinery/camera/C = locate(href_list["switchTo"]) in cameranet.cameras - if(!C) - return - - usr.switch_to_camera(C) - return 1 - -/datum/nano_module/alarm_monitor/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1, var/datum/topic_state/state = GLOB.default_state) - var/list/data = host.initial_data() - - var/categories[0] - for(var/datum/alarm_handler/AH in alarm_handlers) - categories[++categories.len] = list("category" = AH.category, "alarms" = list()) - for(var/datum/alarm/A in AH.major_alarms(get_host_z())) - - var/cameras[0] - var/lost_sources[0] - - if(isAI(user)) - for(var/obj/machinery/camera/C in A.cameras()) - cameras[++cameras.len] = C.nano_structure() - for(var/datum/alarm_source/AS in A.sources) - if(!AS.source) - lost_sources[++lost_sources.len] = AS.source_name - - categories[categories.len]["alarms"] += list(list( - "name" = sanitize(A.alarm_name()), - "origin_lost" = A.origin == null, - "has_cameras" = cameras.len, - "cameras" = cameras, - "lost_sources" = lost_sources.len ? sanitize(english_list(lost_sources, nothing_text = "", and_text = ", ")) : "")) - data["categories"] = categories - - ui = SSnano.try_update_ui(user, src, ui_key, ui, data, force_open) - if (!ui) - ui = new(user, src, ui_key, "alarm_monitor.tmpl", "Alarm Monitoring Console", 800, 800, state = state) - if(host.update_layout()) // This is necessary to ensure the status bar remains updated along with rest of the UI. - ui.auto_update_layout = 1 - ui.set_initial_data(data) - ui.open() - ui.set_auto_update(1) diff --git a/code/modules/modular_computers/file_system/programs/engineering/atmos_control.dm b/code/modules/modular_computers/file_system/programs/engineering/atmos_control.dm deleted file mode 100644 index 1f1d1bd0d22d1..0000000000000 --- a/code/modules/modular_computers/file_system/programs/engineering/atmos_control.dm +++ /dev/null @@ -1,107 +0,0 @@ -/datum/computer_file/program/atmos_control - filename = "atmoscontrol" - filedesc = "Atmosphere Control" - nanomodule_path = /datum/nano_module/atmos_control - program_icon_state = "atmos_control" - program_key_state = "atmos_key" - program_menu_icon = "shuffle" - extended_desc = "This program allows remote control of air alarms. This program can not be run on tablet computers." - required_access = access_atmospherics - requires_ntnet = TRUE - network_destination = "atmospheric control system" - requires_ntnet_feature = NTNET_SYSTEMCONTROL - usage_flags = PROGRAM_LAPTOP | PROGRAM_CONSOLE - category = PROG_ENG - size = 17 - -/datum/nano_module/atmos_control - name = "Atmospherics Control" - var/obj/access = new() - var/emagged = FALSE - var/ui_ref - var/list/monitored_alarms = list() - -/datum/nano_module/atmos_control/New(atmos_computer, var/list/req_access, monitored_alarm_ids) - ..() - - if(istype(req_access)) - access.req_access = req_access - else if(req_access) - log_debug("\The [src] was given an unepxected req_access: [req_access]") - - if(monitored_alarm_ids) - for(var/obj/machinery/alarm/alarm in SSmachines.machinery) - if(alarm.alarm_id && (alarm.alarm_id in monitored_alarm_ids)) - monitored_alarms += alarm - // machines may not yet be ordered at this point - monitored_alarms = dd_sortedObjectList(monitored_alarms) - -/datum/nano_module/atmos_control/Topic(href, href_list) - if(..()) - return 1 - - if(href_list["alarm"]) - if(ui_ref) - var/obj/machinery/alarm/alarm = locate(href_list["alarm"]) in (monitored_alarms.len ? monitored_alarms : SSmachines.machinery) - if(alarm) - var/datum/topic_state/TS = generate_state(alarm) - alarm.ui_interact(usr, master_ui = ui_ref, state = TS) - return 1 - -/datum/nano_module/atmos_control/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1, var/master_ui = null, var/datum/topic_state/state = GLOB.default_state) - var/list/data = host.initial_data() - var/alarms[0] - var/alarmsAlert[0] - var/alarmsDanger[0] - - // TODO: Move these to a cache, similar to cameras - for(var/obj/machinery/alarm/alarm in (monitored_alarms.len ? monitored_alarms : SSmachines.machinery)) - var/Z = get_host_z() - if ((!monitored_alarms.len) && (!Z || !AreConnectedZLevels(Z, alarm.z))) - continue - var/danger_level = max(alarm.danger_level, alarm.alarm_area.atmosalm) - if(danger_level == 2) - alarmsAlert[++alarmsAlert.len] = list("name" = sanitize(alarm.name), "ref"= "\ref[alarm]", "danger" = danger_level) - else if(danger_level == 1) - alarmsDanger[++alarmsDanger.len] = list("name" = sanitize(alarm.name), "ref"= "\ref[alarm]", "danger" = danger_level) - else - alarms[++alarms.len] = list("name" = sanitize(alarm.name), "ref"= "\ref[alarm]", "danger" = danger_level) - - data["alarms"] = sortByKey(alarms, "name") - data["alarmsAlert"] = sortByKey(alarmsAlert, "name") - data["alarmsDanger"] = sortByKey(alarmsDanger, "name") - - ui = SSnano.try_update_ui(user, src, ui_key, ui, data, force_open) - if(!ui) - ui = new(user, src, ui_key, "atmos_control.tmpl", src.name, 625, 625, state = state) - if(host.update_layout()) // This is necessary to ensure the status bar remains updated along with rest of the UI. - ui.auto_update_layout = 1 - ui.set_initial_data(data) - ui.open() - ui.set_auto_update(1) - ui_ref = ui - -/datum/nano_module/atmos_control/proc/generate_state(air_alarm) - var/datum/topic_state/air_alarm/state = new() - state.atmos_control = src - state.air_alarm = air_alarm - return state - -/datum/topic_state/air_alarm - var/datum/nano_module/atmos_control/atmos_control = null - var/obj/machinery/alarm/air_alarm = null - -/datum/topic_state/air_alarm/can_use_topic(var/src_object, var/mob/user) - if(alarm_has_access(user)) - return STATUS_INTERACTIVE - return STATUS_UPDATE - -/datum/topic_state/air_alarm/href_list(var/mob/user) - var/list/extra_href = list() - extra_href["remote_connection"] = 1 - extra_href["remote_access"] = alarm_has_access(user) - - return extra_href - -/datum/topic_state/air_alarm/proc/alarm_has_access(var/mob/user) - return user && (isAI(user) || atmos_control.access.allowed(user) || atmos_control.emagged || air_alarm.rcon_setting == RCON_YES || (air_alarm.alarm_area.atmosalm && air_alarm.rcon_setting == RCON_AUTO)) diff --git a/code/modules/modular_computers/file_system/programs/engineering/power_monitor.dm b/code/modules/modular_computers/file_system/programs/engineering/power_monitor.dm deleted file mode 100644 index d774a8b5b3e25..0000000000000 --- a/code/modules/modular_computers/file_system/programs/engineering/power_monitor.dm +++ /dev/null @@ -1,118 +0,0 @@ -/datum/computer_file/program/power_monitor - filename = "powermonitor" - filedesc = "Power Monitoring" - nanomodule_path = /datum/nano_module/power_monitor - program_icon_state = "power_monitor" - program_key_state = "power_key" - program_menu_icon = "battery-3" - extended_desc = "This program connects to sensors to provide information about electrical systems" - ui_header = "power_norm.gif" - required_access = access_engine - requires_ntnet = TRUE - network_destination = "power monitoring system" - size = 9 - category = PROG_ENG - var/has_alert = 0 - -/datum/computer_file/program/power_monitor/process_tick() - ..() - var/datum/nano_module/power_monitor/NMA = NM - if(istype(NMA) && NMA.has_alarm()) - if(!has_alert) - program_icon_state = "power_monitor_warn" - ui_header = "power_warn.gif" - update_computer_icon() - has_alert = 1 - else - if(has_alert) - program_icon_state = "power_monitor" - ui_header = "power_norm.gif" - update_computer_icon() - has_alert = 0 - -/datum/nano_module/power_monitor - name = "Power monitor" - var/list/grid_sensors - var/active_sensor = null //name_tag of the currently selected sensor - -/datum/nano_module/power_monitor/New() - ..() - refresh_sensors() - -/datum/nano_module/power_monitor/Destroy() - for(var/grid_sensor in grid_sensors) - remove_sensor(grid_sensor, FALSE) - grid_sensors = null - . = ..() - -// Checks whether there is an active alarm, if yes, returns 1, otherwise returns 0. -/datum/nano_module/power_monitor/proc/has_alarm() - for(var/obj/machinery/power/sensor/S in grid_sensors) - if(S.check_grid_warning()) - return 1 - return 0 - -// If PC is not null header template is loaded. Use PC.get_header_data() to get relevant nanoui data from it. All data entries begin with "PC_...." -// In future it may be expanded to other modular computer devices. -/datum/nano_module/power_monitor/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1, var/datum/topic_state/state = GLOB.default_state) - var/list/data = host.initial_data() - - var/list/sensors = list() - // Focus: If it remains null if no sensor is selected and UI will display sensor list, otherwise it will display sensor reading. - var/obj/machinery/power/sensor/focus = null - - // Build list of data from sensor readings. - for(var/obj/machinery/power/sensor/S in grid_sensors) - sensors.Add(list(list( - "name" = S.name_tag, - "alarm" = S.check_grid_warning() - ))) - if(S.name_tag == active_sensor) - focus = S - - data["all_sensors"] = sensors - if(focus) - data["focus"] = focus.return_reading_data() - - ui = SSnano.try_update_ui(user, src, ui_key, ui, data, force_open) - if (!ui) - ui = new(user, src, ui_key, "power_monitor.tmpl", "Power Monitoring Console", 800, 500, state = state) - if(host && host.update_layout()) // This is necessary to ensure the status bar remains updated along with rest of the UI. - ui.auto_update_layout = 1 - ui.set_initial_data(data) - ui.open() - ui.set_auto_update(1) - -// Refreshes list of active sensors kept on this computer. -/datum/nano_module/power_monitor/proc/refresh_sensors() - grid_sensors = list() - var/connected_z_levels = GetConnectedZlevels(get_host_z()) - for(var/obj/machinery/power/sensor/S in SSmachines.machinery) - if((S.long_range) || (S.loc.z in connected_z_levels)) // Consoles have range on their Z-Level. Sensors with long_range var will work between Z levels. - if(S.name_tag == "#UNKN#") // Default name. Shouldn't happen! - warning("Powernet sensor with unset ID Tag! [S.x]X [S.y]Y [S.z]Z") - else - grid_sensors += S - GLOB.destroyed_event.register(S, src, /datum/nano_module/power_monitor/proc/remove_sensor) - -/datum/nano_module/power_monitor/proc/remove_sensor(var/removed_sensor, var/update_ui = TRUE) - if(active_sensor == removed_sensor) - active_sensor = null - if(update_ui) - SSnano.update_uis(src) - grid_sensors -= removed_sensor - GLOB.destroyed_event.unregister(removed_sensor, src, /datum/nano_module/power_monitor/proc/remove_sensor) - -// Allows us to process UI clicks, which are relayed in form of hrefs. -/datum/nano_module/power_monitor/Topic(href, href_list) - if(..()) - return 1 - if( href_list["clear"] ) - active_sensor = null - . = 1 - if( href_list["refresh"] ) - refresh_sensors() - . = 1 - else if( href_list["setsensor"] ) - active_sensor = href_list["setsensor"] - . = 1 diff --git a/code/modules/modular_computers/file_system/programs/engineering/rcon_console.dm b/code/modules/modular_computers/file_system/programs/engineering/rcon_console.dm deleted file mode 100644 index 9e63dc46d25ff..0000000000000 --- a/code/modules/modular_computers/file_system/programs/engineering/rcon_console.dm +++ /dev/null @@ -1,134 +0,0 @@ -/datum/computer_file/program/rcon_console - filename = "rconconsole" - filedesc = "RCON Remote Control" - nanomodule_path = /datum/nano_module/rcon - program_icon_state = "generic" - program_key_state = "rd_key" - program_menu_icon = "power" - extended_desc = "This program allows remote control of power distribution systems. This program can not be run on tablet computers." - required_access = access_engine - requires_ntnet = TRUE - network_destination = "RCON remote control system" - requires_ntnet_feature = NTNET_SYSTEMCONTROL - usage_flags = PROGRAM_LAPTOP | PROGRAM_CONSOLE - size = 19 - category = PROG_ENG - -/datum/nano_module/rcon - name = "Power RCON" - var/list/known_SMESs = null - var/list/known_breakers = null - // Allows you to hide specific parts of the UI - var/hide_SMES = 0 - var/hide_SMES_details = 0 - var/hide_breakers = 0 - -/datum/nano_module/rcon/ui_interact(mob/user, ui_key = "rcon", datum/nanoui/ui=null, force_open=1, var/datum/topic_state/state = GLOB.default_state) - FindDevices() // Update our devices list - var/list/data = host.initial_data() - - // SMES DATA (simplified view) - var/list/smeslist[0] - for(var/obj/machinery/power/smes/buildable/SMES in known_SMESs) - smeslist.Add(list(list( - "charge" = round(SMES.Percentage()), - "input_set" = SMES.input_attempt, - "input_val" = round(SMES.input_level/1000, 0.1), - "input_load" = round(SMES.input_available/1000, 0.1), - "output_set" = SMES.output_attempt, - "output_val" = round(SMES.output_level/1000, 0.1), - "output_load" = round(SMES.output_used/1000, 0.1), - "RCON_tag" = SMES.RCon_tag - ))) - - data["smes_info"] = sortByKey(smeslist, "RCON_tag") - - // BREAKER DATA (simplified view) - var/list/breakerlist[0] - for(var/obj/machinery/power/breakerbox/BR in known_breakers) - breakerlist.Add(list(list( - "RCON_tag" = BR.RCon_tag, - "enabled" = BR.on - ))) - data["breaker_info"] = breakerlist - data["hide_smes"] = hide_SMES - data["hide_smes_details"] = hide_SMES_details - data["hide_breakers"] = hide_breakers - - ui = SSnano.try_update_ui(user, src, ui_key, ui, data, force_open) - if (!ui) - ui = new(user, src, ui_key, "rcon.tmpl", "RCON Console", 600, 400, state = state) - if(host.update_layout()) // This is necessary to ensure the status bar remains updated along with rest of the UI. - ui.auto_update_layout = 1 - ui.set_initial_data(data) - ui.open() - ui.set_auto_update(1) - -// Proc: Topic() -// Parameters: 2 (href, href_list - allows us to process UI clicks) -// Description: Allows us to process UI clicks, which are relayed in form of hrefs. -/datum/nano_module/rcon/Topic(href, href_list) - if(..()) - return - - if(href_list["smes_in_toggle"]) - var/obj/machinery/power/smes/buildable/SMES = GetSMESByTag(href_list["smes_in_toggle"]) - if(SMES) - SMES.toggle_input() - if(href_list["smes_out_toggle"]) - var/obj/machinery/power/smes/buildable/SMES = GetSMESByTag(href_list["smes_out_toggle"]) - if(SMES) - SMES.toggle_output() - if(href_list["smes_in_set"]) - var/obj/machinery/power/smes/buildable/SMES = GetSMESByTag(href_list["smes_in_set"]) - if(SMES) - var/inputset = (input(usr, "Enter new input level (0-[SMES.input_level_max/1000] kW)", "SMES Input Power Control", SMES.input_level/1000) as num) * 1000 - SMES.set_input(inputset) - if(href_list["smes_out_set"]) - var/obj/machinery/power/smes/buildable/SMES = GetSMESByTag(href_list["smes_out_set"]) - if(SMES) - var/outputset = (input(usr, "Enter new output level (0-[SMES.output_level_max/1000] kW)", "SMES Input Power Control", SMES.output_level/1000) as num) * 1000 - SMES.set_output(outputset) - - if(href_list["toggle_breaker"]) - var/obj/machinery/power/breakerbox/toggle = null - for(var/obj/machinery/power/breakerbox/breaker in known_breakers) - if(breaker.RCon_tag == href_list["toggle_breaker"]) - toggle = breaker - if(toggle) - if(toggle.update_locked) - to_chat(usr, "The breaker box was recently toggled. Please wait before toggling it again.") - else - toggle.auto_toggle() - if(href_list["hide_smes"]) - hide_SMES = !hide_SMES - if(href_list["hide_smes_details"]) - hide_SMES_details = !hide_SMES_details - if(href_list["hide_breakers"]) - hide_breakers = !hide_breakers - - -// Proc: GetSMESByTag() -// Parameters: 1 (tag - RCON tag of SMES we want to look up) -// Description: Looks up and returns SMES which has matching RCON tag -/datum/nano_module/rcon/proc/GetSMESByTag(var/tag) - if(!tag) - return - - for(var/obj/machinery/power/smes/buildable/S in known_SMESs) - if(S.RCon_tag == tag) - return S - -// Proc: FindDevices() -// Parameters: None -// Description: Refreshes local list of known devices. -/datum/nano_module/rcon/proc/FindDevices() - known_SMESs = new /list() - for(var/obj/machinery/power/smes/buildable/SMES in SSmachines.machinery) - if(AreConnectedZLevels(get_host_z(), get_z(SMES)) && SMES.RCon_tag && (SMES.RCon_tag != "NO_TAG") && SMES.RCon) - known_SMESs.Add(SMES) - - known_breakers = new /list() - for(var/obj/machinery/power/breakerbox/breaker in SSmachines.machinery) - if(AreConnectedZLevels(get_host_z(), get_z(breaker)) && breaker.RCon_tag != "NO_TAG") - known_breakers.Add(breaker) diff --git a/code/modules/modular_computers/file_system/programs/engineering/shields_monitor.dm b/code/modules/modular_computers/file_system/programs/engineering/shields_monitor.dm deleted file mode 100644 index c2ddddea258f7..0000000000000 --- a/code/modules/modular_computers/file_system/programs/engineering/shields_monitor.dm +++ /dev/null @@ -1,111 +0,0 @@ -/datum/computer_file/program/shields_monitor - filename = "shieldsmonitor" - filedesc = "Shield Generators Monitoring" - nanomodule_path = /datum/nano_module/shields_monitor - program_icon_state = "shield" - program_key_state = "generic_key" - program_menu_icon = "radio-on" - extended_desc = "This program connects to shield generators and monitors their statuses." - ui_header = "shield.gif" - requires_ntnet = TRUE - network_destination = "shields monitoring system" - size = 10 - category = PROG_ENG - -/datum/nano_module/shields_monitor - name = "Shields monitor" - var/obj/machinery/power/shield_generator/active = null - -/datum/nano_module/shields_monitor/Destroy() - . = ..() - deselect_shield() - -/datum/nano_module/shields_monitor/proc/get_shields() - var/list/shields = list() - var/connected_z_levels = GetConnectedZlevels(get_host_z()) - for(var/obj/machinery/power/shield_generator/S in SSmachines.machinery) - if(!(S.z in connected_z_levels)) - continue - shields.Add(S) - - if(!(active in shields)) - deselect_shield() - return shields - -/datum/nano_module/shields_monitor/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1, var/datum/topic_state/state = GLOB.default_state) - var/list/data = host.initial_data() - - if (active) - data["active"] = 1 - data["running"] = active.running - data["modes"] = active.get_flag_descriptions() - data["overloaded"] = active.overloaded - data["mitigation_max"] = active.mitigation_max - data["mitigation_physical"] = round(active.mitigation_physical, 0.1) - data["mitigation_em"] = round(active.mitigation_em, 0.1) - data["mitigation_heat"] = round(active.mitigation_heat, 0.1) - data["field_integrity"] = active.field_integrity() - data["max_energy"] = round(active.max_energy / 1000000, 0.1) - data["current_energy"] = round(active.current_energy / 1000000, 0.1) - if(data["max_energy"] > 0) - data["percentage_energy"] = round(data["current_energy"] / data["max_energy"] * 100) - else - data["percentage_energy"] = "ERR" - data["total_segments"] = active.field_segments ? active.field_segments.len : 0 - data["functional_segments"] = active.damaged_segments ? data["total_segments"] - active.damaged_segments.len : data["total_segments"] - data["field_radius"] = active.field_radius - data["input_cap_kw"] = round(active.input_cap / 1000) - data["upkeep_power_usage"] = round(active.upkeep_power_usage / 1000, 0.1) - data["power_usage"] = round(active.power_usage / 1000) - data["hacked"] = active.hacked - data["offline_for"] = active.offline_for * 2 - data["pos_x"] = active.x - data["pos_y"] = active.y - data["pos_z"] = active.z - else - data["active"] = null - var/list/shields = get_shields() - var/list/shields_info = list() - for(var/obj/machinery/power/shield_generator/S in shields) - var/area/A = get_area(S) - var/list/temp = list(list( - "shield_status" = S.running, - "shield_ref" = any2ref(S), - "area" = A.name)) - shields_info.Add(temp) - data["shields"] = shields_info - - ui = SSnano.try_update_ui(user, src, ui_key, ui, data, force_open) - if (!ui) - ui = new(user, src, ui_key, "shields_monitor.tmpl", "Shield Generators Monitoring", 400, 500, state = state) - if(host.update_layout()) - ui.auto_update_layout = 1 - ui.set_initial_data(data) - ui.open() - ui.set_auto_update(1) - -/datum/nano_module/shields_monitor/Topic(href, href_list) - if(..()) - return 1 - if( href_list["refresh"] ) - get_shields() - return 1 - if( href_list["return"] ) - deselect_shield() - return 1 - if( href_list["ref"] ) - var/list/shields = get_shields() - var/obj/machinery/power/shield_generator/S = locate(href_list["ref"]) in shields - if(S) - deselect_shield() - GLOB.destroyed_event.register(S, src, /datum/nano_module/shields_monitor/proc/deselect_shield) - active = S - return 1 - -/datum/nano_module/shields_monitor/proc/deselect_shield(var/source) - if(!active) - return - GLOB.destroyed_event.unregister(active, src) - active = null - if(source) // source is only set if called by the shield destroyed event, which is the only time we want to update the UI - SSnano.update_uis(src) \ No newline at end of file diff --git a/code/modules/modular_computers/file_system/programs/engineering/supermatter_monitor.dm b/code/modules/modular_computers/file_system/programs/engineering/supermatter_monitor.dm deleted file mode 100644 index 45eaeb90c08c3..0000000000000 --- a/code/modules/modular_computers/file_system/programs/engineering/supermatter_monitor.dm +++ /dev/null @@ -1,190 +0,0 @@ -#define SM_MONITOR_SCREEN_MAIN "main" -#define SM_MONITOR_SCREEN_THRESHHOLDS "threshholds" - - -/datum/computer_file/program/supermatter_monitor - filename = "supmon" - filedesc = "Supermatter Monitoring" - nanomodule_path = /datum/nano_module/supermatter_monitor - program_icon_state = "smmon_0" - program_key_state = "tech_key" - program_menu_icon = "notice" - extended_desc = "This program connects to specially calibrated supermatter sensors to provide information on the status of supermatter-based engines." - ui_header = "smmon_0.gif" - required_access = access_engine - requires_ntnet = TRUE - network_destination = "supermatter monitoring system" - size = 5 - category = PROG_ENG - var/last_status = 0 - -/datum/computer_file/program/supermatter_monitor/process_tick() - ..() - var/datum/nano_module/supermatter_monitor/NMS = NM - var/new_status = istype(NMS) ? NMS.get_status() : 0 - if(last_status != new_status) - last_status = new_status - ui_header = "smmon_[last_status].gif" - program_icon_state = "smmon_[last_status]" - update_computer_icon() - -/datum/nano_module/supermatter_monitor - name = "Supermatter monitor" - var/list/supermatters - var/obj/machinery/power/supermatter/active = null // Currently selected supermatter crystal. - var/screen = SM_MONITOR_SCREEN_MAIN // Which screen the monitor is currently on - -/datum/nano_module/supermatter_monitor/Destroy() - . = ..() - active = null - supermatters = null - -/datum/nano_module/supermatter_monitor/New() - ..() - refresh() - -// Refreshes list of active supermatter crystals -/datum/nano_module/supermatter_monitor/proc/refresh() - supermatters = list() - var/valid_z_levels = GetConnectedZlevels(get_host_z()) - for(var/obj/machinery/power/supermatter/S in SSmachines.machinery) - // Delaminating, not within coverage, not on a tile. - if(S.grav_pulling || S.exploded || !(S.z in valid_z_levels) || !isturf(S.loc)) - continue - supermatters.Add(S) - - if(!(active in supermatters)) - active = null - screen = initial(screen) - -/datum/nano_module/supermatter_monitor/proc/get_status() - . = SUPERMATTER_INACTIVE - for(var/obj/machinery/power/supermatter/S in supermatters) - . = max(., S.get_status()) - -/datum/nano_module/supermatter_monitor/proc/process_data_output(skill, value) - switch(skill) - if(SKILL_NONE) - return (0.6 + 0.8 * rand()) * value - if(SKILL_BASIC) - return (0.8 + 0.4 * rand()) * value - else - return value - -/datum/nano_module/supermatter_monitor/proc/get_threshhold_color(threshhold, value) - for (var/entry in active.threshholds) - if (entry["name"] != threshhold) - continue - if (entry["min_h"] >= 0 && value <= entry["min_h"]) - return "bad" - if (entry["min_l"] >= 0 && value <= entry["min_l"]) - return "average" - if (entry["max_h"] >= 0 && value >= entry["max_h"]) - return "bad" - if (entry["max_l"] >= 0 && value >= entry["max_l"]) - return "average" - return "good" - -/datum/nano_module/supermatter_monitor/proc/set_threshhold_value(threshhold, category, value) - for (var/entry in active.threshholds) - if (entry["name"] != threshhold) - continue - entry[category] = value - -/datum/nano_module/supermatter_monitor/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1, var/datum/topic_state/state = GLOB.default_state) - var/list/data = host.initial_data() - var/engine_skill = user.get_skill_value(SKILL_ENGINES) - - if(istype(active)) - var/turf/T = get_turf(active) - if(!T) - active = null - screen = initial(screen) - return - var/datum/gas_mixture/air = T.return_air() - if(!istype(air)) - active = null - screen = initial(screen) - return - - var/ambient_pressure = air.return_pressure() - var/epr = active.get_epr() - - data["active"] = 1 - data["screen"] = screen - data["threshholds"] = active.threshholds - data["SM_integrity"] = min(process_data_output(engine_skill, active.get_integrity()), 100) - data["SM_power"] = process_data_output(engine_skill, active.power) - data["SM_power_label"] = get_threshhold_color(SUPERMATTER_DATA_EER, active.power) - data["SM_ambienttemp"] = process_data_output(engine_skill, air.temperature) - data["SM_ambienttemp_label"] = get_threshhold_color(SUPERMATTER_DATA_TEMPERATURE, air.temperature) - data["SM_ambientpressure"] = process_data_output(engine_skill, ambient_pressure) - data["SM_ambientpressure_label"] = get_threshhold_color(SUPERMATTER_DATA_PRESSURE, ambient_pressure) - data["SM_EPR"] = process_data_output(engine_skill, epr) - data["SM_EPR_label"] = get_threshhold_color(SUPERMATTER_DATA_EPR, epr) - if(air.total_moles) - data["SM_gas_O2"] = round(100*air.gas[GAS_OXYGEN]/air.total_moles,0.01) - data["SM_gas_CO2"] = round(100*air.gas[GAS_CO2]/air.total_moles,0.01) - data["SM_gas_N2"] = round(100*air.gas[GAS_NITROGEN]/air.total_moles,0.01) - data["SM_gas_PH"] = round(100*air.gas[GAS_PHORON]/air.total_moles,0.01) - data["SM_gas_N2O"] = round(100*air.gas[GAS_N2O]/air.total_moles,0.01) - data["SM_gas_H2"] = round(100*air.gas[GAS_HYDROGEN]/air.total_moles,0.01) - else - data["SM_gas_O2"] = 0 - data["SM_gas_CO2"] = 0 - data["SM_gas_N2"] = 0 - data["SM_gas_PH"] = 0 - data["SM_gas_N2O"] = 0 - data["SM_gas_H2"] = 0 - else - var/list/SMS = list() - for(var/obj/machinery/power/supermatter/S in supermatters) - var/area/A = get_area(S) - if(!A) - continue - - SMS.Add(list(list( - "area_name" = A.name, - "integrity" = process_data_output(engine_skill, S.get_integrity()), - "uid" = S.uid - ))) - - data["active"] = 0 - data["supermatters"] = SMS - - ui = SSnano.try_update_ui(user, src, ui_key, ui, data, force_open) - if (!ui) - ui = new(user, src, ui_key, "supermatter_monitor.tmpl", "Supermatter Monitoring", 600, 400, state = state) - if(host.update_layout()) - ui.auto_update_layout = 1 - ui.set_initial_data(data) - ui.open() - ui.set_auto_update(1) - -/datum/nano_module/supermatter_monitor/Topic(href, href_list) - if(..()) - return 1 - if( href_list["clear"] ) - active = null - screen = initial(screen) - return 1 - if( href_list["refresh"] ) - refresh() - return 1 - if (href_list["screen_threshholds"]) - screen = SM_MONITOR_SCREEN_THRESHHOLDS - return 1 - if (href_list["screen_main"]) - screen = SM_MONITOR_SCREEN_MAIN - return 1 - if (href_list["set_threshhold"]) - var/new_value = input(usr, "Select a new threshhold, or set to -1 to disable:", "Threshhold", href_list["value"]) as null|num - if (new_value != null) - set_threshhold_value(href_list["threshhold"], href_list["category"], new_value) - return 1 - if( href_list["set"] ) - var/newuid = text2num(href_list["set"]) - for(var/obj/machinery/power/supermatter/S in supermatters) - if(S.uid == newuid) - active = S - return 1 diff --git a/code/modules/modular_computers/file_system/programs/generic/camera.dm b/code/modules/modular_computers/file_system/programs/generic/camera.dm deleted file mode 100644 index 4da7df3320525..0000000000000 --- a/code/modules/modular_computers/file_system/programs/generic/camera.dm +++ /dev/null @@ -1,196 +0,0 @@ -// Returns which access is relevant to passed network. Used by the program. -// A return value of 0 indicates no access reqirement -/proc/get_camera_access(var/network) - if(!network) - return 0 - . = GLOB.using_map.get_network_access(network) - if(.) - return - - switch(network) - if(NETWORK_ENGINEERING, NETWORK_ALARM_ATMOS, NETWORK_ALARM_CAMERA, NETWORK_ALARM_FIRE, NETWORK_ALARM_POWER) - return access_engine - if(NETWORK_ROBOTS) - return access_ai_upload - if(NETWORK_CRESCENT, NETWORK_ERT) - return access_cent_specops - if(NETWORK_MEDICAL) - return access_medical - if(NETWORK_MINE) - return access_mailsorting // Cargo office - all cargo staff should have access here. - if(NETWORK_RESEARCH) - return access_research - if(NETWORK_THUNDER) - return 0 - - return access_security // Default for all other networks - -/datum/computer_file/program/camera_monitor - filename = "cammon" - filedesc = "Camera Monitoring" - nanomodule_path = /datum/nano_module/camera_monitor - program_icon_state = "cameras" - program_key_state = "generic_key" - program_menu_icon = "search" - extended_desc = "This program allows remote access to the camera system. Some camera networks may have additional access requirements." - size = 12 - available_on_ntnet = TRUE - requires_ntnet = FALSE - category = PROG_MONITOR - -/datum/nano_module/camera_monitor - name = "Camera Monitoring program" - var/obj/machinery/camera/current_camera = null - var/current_network = null - -/datum/nano_module/camera_monitor/ui_interact(mob/user, ui_key = "main", datum/nanoui/ui = null, force_open = 1, state = GLOB.default_state) - var/list/data = host.initial_data() - - data["current_camera"] = current_camera ? current_camera.nano_structure() : null - data["current_network"] = current_network - - var/list/all_networks[0] - for(var/network in GLOB.using_map.station_networks) - all_networks.Add(list(list( - "tag" = network, - "has_access" = can_access_network(user, get_camera_access(network)) - ))) - - all_networks = modify_networks_list(all_networks) - - data["networks"] = all_networks - - if(current_network) - data["cameras"] = camera_repository.cameras_in_network(current_network) - - ui = SSnano.try_update_ui(user, src, ui_key, ui, data, force_open) - if (!ui) - ui = new(user, src, ui_key, "sec_camera.tmpl", "Camera Monitoring", 900, 800, state = state) - // ui.auto_update_layout = 1 // Disabled as with suit sensors monitor - breaks the UI map. Re-enable once it's fixed somehow. - - ui.add_template("mapContent", "sec_camera_map_content.tmpl") - ui.add_template("mapHeader", "sec_camera_map_header.tmpl") - ui.set_initial_data(data) - ui.open() - - user.machine = nano_host() - user.reset_view(current_camera) - -// Intended to be overriden by subtypes to manually add non-station networks to the list. -/datum/nano_module/camera_monitor/proc/modify_networks_list(var/list/networks) - return networks - -/datum/nano_module/camera_monitor/proc/can_access_network(var/mob/user, var/network_access) - // No access passed, or 0 which is considered no access requirement. Allow it. - if(!network_access) - return 1 - - return check_access(user, access_security) || check_access(user, network_access) - -/datum/nano_module/camera_monitor/Topic(href, href_list) - if(..()) - return 1 - - if(href_list["switch_camera"]) - var/obj/machinery/camera/C = locate(href_list["switch_camera"]) in cameranet.cameras - var/datum/extension/interactive/ntos/os = get_extension(nano_host(), /datum/extension/interactive/ntos) - if(!C) - return - if(!(current_network in C.network)) - return - if(!AreConnectedZLevels(get_z(C), get_z(host)) && !(get_z(C) in GLOB.using_map.admin_levels)) - to_chat(usr, "Unable to establish a connection.") - return - if (!os?.get_ntnet_status() && !C.is_helmet_cam) - to_chat(usr, "Unable to establish a connection.") - return - - switch_to_camera(usr, C) - return 1 - - else if(href_list["switch_network"]) - // Either security access, or access to the specific camera network's department is required in order to access the network. - if(can_access_network(usr, get_camera_access(href_list["switch_network"]))) - current_network = href_list["switch_network"] - else - to_chat(usr, "\The [nano_host()] shows an \"Network Access Denied\" error message.") - return 1 - - else if(href_list["reset"]) - reset_current() - usr.reset_view(current_camera) - return 1 - -/datum/nano_module/camera_monitor/proc/switch_to_camera(var/mob/user, var/obj/machinery/camera/C) - //don't need to check if the camera works for AI because the AI jumps to the camera location and doesn't actually look through cameras. - if(isAI(user)) - var/mob/living/silicon/ai/A = user - // Only allow non-carded AIs to view because the interaction with the eye gets all wonky otherwise. - if(!A.is_in_chassis()) - return 0 - - A.eyeobj.setLoc(get_turf(C)) - A.client.eye = A.eyeobj - return 1 - - set_current(C) - return 1 - -/datum/nano_module/camera_monitor/proc/set_current(var/obj/machinery/camera/C) - if(current_camera == C) - return - - if(current_camera) - reset_current() - - current_camera = C - if(current_camera) - var/mob/living/L = current_camera.loc - if(istype(L)) - L.tracking_initiated() - -/datum/nano_module/camera_monitor/proc/reset_current() - if(current_camera) - var/mob/living/L = current_camera.loc - if(istype(L)) - L.tracking_cancelled() - current_camera = null - -/datum/nano_module/camera_monitor/check_eye(var/mob/user as mob) - if(!current_camera) - return 0 - var/viewflag = current_camera.check_eye(user) - if ( viewflag < 0 ) //camera doesn't work - reset_current() - return viewflag - - -// ERT Variant of the program -/datum/computer_file/program/camera_monitor/ert - filename = "ntcammon" - filedesc = "Advanced Camera Monitoring" - extended_desc = "This program allows remote access to the camera system. Some camera networks may have additional access requirements. This version has an integrated database with additional encrypted keys." - size = 14 - nanomodule_path = /datum/nano_module/camera_monitor/ert - available_on_ntnet = FALSE - -/datum/nano_module/camera_monitor/ert - name = "Advanced Camera Monitoring Program" - available_to_ai = FALSE - -// The ERT variant has access to ERT and crescent cams, but still checks for accesses. ERT members should be able to use it. -/datum/nano_module/camera_monitor/ert/modify_networks_list(var/list/networks) - ..() - networks.Add(list(list("tag" = NETWORK_ERT, "has_access" = 1))) - networks.Add(list(list("tag" = NETWORK_CRESCENT, "has_access" = 1))) - return networks - -/datum/nano_module/camera_monitor/apply_visual(mob/M) - if(current_camera) - current_camera.apply_visual(M) - else - remove_visual(M) - -/datum/nano_module/camera_monitor/remove_visual(mob/M) - if(current_camera) - current_camera.remove_visual(M) diff --git a/code/modules/modular_computers/file_system/programs/generic/configurator.dm b/code/modules/modular_computers/file_system/programs/generic/configurator.dm deleted file mode 100644 index fe638434d9d43..0000000000000 --- a/code/modules/modular_computers/file_system/programs/generic/configurator.dm +++ /dev/null @@ -1,83 +0,0 @@ -// This is special hardware configuration program. -// It is to be used only with modular computers. -// It allows you to toggle components of your device. - -/datum/computer_file/program/computerconfig - filename = "compconfig" - filedesc = "Computer Configuration Tool" - extended_desc = "This program allows configuration of computer's hardware" - program_icon_state = "generic" - program_key_state = "generic_key" - program_menu_icon = "gear" - unsendable = 1 - undeletable = 1 - size = 4 - available_on_ntnet = FALSE - requires_ntnet = FALSE - nanomodule_path = /datum/nano_module/program/computer_configurator - usage_flags = PROGRAM_ALL - category = PROG_UTIL - -/datum/nano_module/program/computer_configurator - name = "NTOS Computer Configuration Tool" - -/datum/nano_module/program/computer_configurator/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1, var/datum/topic_state/state = GLOB.default_state) - var/list/data = list() - - data = program.get_header_data() - - data["disk_size"] = program.computer.max_disk_capacity() - data["disk_used"] = program.computer.used_disk_capacity() - data["power_usage"] = program.computer.get_power_usage() - var/obj/item/stock_parts/computer/battery_module/battery_module = program.computer.get_component(PART_BATTERY) - data["battery_exists"] = !!battery_module - if(battery_module) - data["battery_rating"] = battery_module.battery.maxcharge - data["battery_percent"] = round(battery_module.battery.percent()) - - // Configurable stuff - var/obj/item/stock_parts/computer/nano_printer/nano_printer = program.computer.get_component(/obj/item/stock_parts/computer/nano_printer) - data["print_language"] = nano_printer ? nano_printer.print_language : null - - var/list/all_entries[0] - var/list/hardware = program.computer.get_all_components() - for(var/obj/item/stock_parts/computer/H in hardware) - all_entries.Add(list(list( - "name" = H.name, - "desc" = H.desc, - "enabled" = H.enabled, - "critical" = H.critical, - "powerusage" = H.power_usage, - "ref" = "\ref[H]" - ))) - - data["hardware"] = all_entries - - data["receives_updates"] = program.computer.receives_updates - - ui = SSnano.try_update_ui(user, src, ui_key, ui, data, force_open) - if (!ui) - ui = new(user, src, ui_key, "laptop_configuration.tmpl", "NTOS Configuration Utility", 575, 700, state = state) - ui.auto_update_layout = 1 - ui.set_initial_data(data) - ui.open() - -/datum/nano_module/program/computer_configurator/Topic(href, href_list) - . = ..() - if (.) - return - - if (href_list["edit_language"]) - var/obj/item/stock_parts/computer/nano_printer/nano_printer = program.computer.get_component(/obj/item/stock_parts/computer/nano_printer) - if (!nano_printer) - to_chat(usr, SPAN_WARNING("No printer found, unable to update language.")) - return TOPIC_REFRESH - var/list/selectable_languages = list() - for (var/datum/language/L in usr.languages) - if (L.has_written_form) - selectable_languages += L - var/new_language = input(usr, "What language do you want to print in?", "Change language", nano_printer.print_language) as null|anything in selectable_languages - if (!new_language) - return TOPIC_HANDLED - nano_printer.print_language = new_language - return TOPIC_REFRESH diff --git a/code/modules/modular_computers/file_system/programs/generic/crew_manifest.dm b/code/modules/modular_computers/file_system/programs/generic/crew_manifest.dm deleted file mode 100644 index eb2d0bdcfa544..0000000000000 --- a/code/modules/modular_computers/file_system/programs/generic/crew_manifest.dm +++ /dev/null @@ -1,28 +0,0 @@ -/datum/computer_file/program/crew_manifest - filename = "crewmanifest" - filedesc = "Crew Manifest" - extended_desc = "This program allows access to the manifest of active crew." - program_icon_state = "generic" - program_key_state = "generic_key" - size = 4 - requires_ntnet = TRUE - available_on_ntnet = TRUE - nanomodule_path = /datum/nano_module/crew_manifest - usage_flags = PROGRAM_ALL - category = PROG_OFFICE - -/datum/nano_module/crew_manifest - name = "Crew Manifest" - -/datum/nano_module/crew_manifest/ui_interact(mob/user, ui_key = "main", datum/nanoui/ui = null, force_open = 1, state = GLOB.default_state) - var/list/data = host.initial_data() - - data["crew_manifest"] = html_crew_manifest(TRUE) - - ui = SSnano.try_update_ui(user, src, ui_key, ui, data, force_open) - if (!ui) - ui = new(user, src, ui_key, "crew_manifest.tmpl", name, 450, 600, state = state) - ui.auto_update_layout = 1 - ui.set_auto_update(1) - ui.set_initial_data(data) - ui.open() \ No newline at end of file diff --git a/code/modules/modular_computers/file_system/programs/generic/deck_management.dm b/code/modules/modular_computers/file_system/programs/generic/deck_management.dm deleted file mode 100644 index d3fd3971c709b..0000000000000 --- a/code/modules/modular_computers/file_system/programs/generic/deck_management.dm +++ /dev/null @@ -1,365 +0,0 @@ -#define DECK_HOME 1 -#define DECK_ALL_MISSIONS 2 -#define DECK_MISSION_DETAILS 3 -#define DECK_REPORT_EDIT 4 - -/datum/computer_file/program/deck_management - filename = "deckmngr" - filedesc = "Deck Management" - nanomodule_path = /datum/nano_module/deck_management - program_icon_state = "request" - program_key_state = "rd_key" - program_menu_icon = "clock" - extended_desc = "A tool for managing shuttles, filling out flight plans, and submitting flight-related paperwork." - size = 18 - available_on_ntnet = TRUE - requires_ntnet = TRUE - category = PROG_SUPPLY - -/datum/nano_module/deck_management - name = "Deck Management Program" - var/prog_state = DECK_HOME //Which menu we are in. - var/can_view_only = 0 //Whether we are in view-only mode for the report viewer. - var/datum/shuttle/selected_shuttle //Which shuttle is currently selected, if any. - var/datum/shuttle_mission/selected_mission //Which mission is selected. - var/datum/computer_file/report/selected_report //A report being viewed/edited. - var/list/report_prototypes = list() //Stores report prototypes to use for UI purposes. - var/datum/shuttle/prototype_shuttle //The shuttle for which the prototypes were built (to avoid excessive prototype rebuilding) - //The default access needed to properly use. Should be set in map files. - var/default_access = list(access_cargo, access_bridge) //The format is (needs one of list(these access constants or lists of access constants)) - -/datum/nano_module/deck_management/New() - ..() - for(var/shuttle in SSshuttle.shuttle_logs) //Registering to get shuttle updates. - var/datum/shuttle_log/my_log = SSshuttle.shuttle_logs[shuttle] - my_log.register(src) - -/datum/nano_module/deck_management/Destroy() - for(var/shuttle in SSshuttle.shuttle_logs) //Unregistering; important for garbage collection. - var/datum/shuttle_log/my_log = SSshuttle.shuttle_logs[shuttle] - my_log.unregister(src) - . = ..() - -/datum/nano_module/deck_management/ui_interact(mob/user, ui_key = "main", datum/nanoui/ui = null, force_open = 1, state = GLOB.default_state) - var/list/data = host.initial_data() - var/logs = SSshuttle.shuttle_logs - - data["prog_state"] = prog_state - data["default_access"] = get_default_access(user) - - switch(prog_state) - if(DECK_HOME) - var/shuttles = list() - for(var/datum/shuttle/shuttle in logs) - var/shuttle_data = list() - shuttle_data["name"] = shuttle.name - shuttle_data["access"] = get_shuttle_access(user, shuttle) - var/datum/shuttle_log/log = logs[shuttle] - if(log.current_mission) - shuttle_data["mission"] = 1 - shuttle_data["mission_name"] = log.current_mission.name - shuttle_data["mission_ID"] = log.current_mission.ID - var/datum/computer_file/report/flight_plan/plan = log.current_mission.flight_plan - shuttle_data["flight_plan"] = plan - switch(log.current_mission.stage) - if(SHUTTLE_MISSION_PLANNED) - shuttle_data["status"] = "Mission Preparing." - shuttle_data["departure"] = plan ? "[plan.planned_depart.get_value()] (PLANNED)" : "N/A" - if(SHUTTLE_MISSION_STARTED) - shuttle_data["status"] = "Mission Underway." - shuttle_data["departure"] = log.current_mission.depart_time - else - shuttle_data["mission"] = 0 - shuttles += list(shuttle_data)//Make a list of lists, don't flatten. - data["shuttles"] = shuttles - - if(DECK_ALL_MISSIONS) - if(!ensure_valid_shuttle()) - return - data["shuttle_access"] = get_shuttle_access(user, selected_shuttle) - data["shuttle_name"] = selected_shuttle.name - var/datum/shuttle_log/log = SSshuttle.shuttle_logs[selected_shuttle] - var/missions = list() - for(var/datum/shuttle_mission/M in log.missions) - missions += list(generate_mission_data(M)) - data["mission_data"] = missions - var/queued_missions = list() - for(var/datum/shuttle_mission/M in log.queued_missions) - queued_missions += list(generate_mission_data(M)) - data["queued_data"] = queued_missions - - if(DECK_MISSION_DETAILS) - if(!ensure_valid_mission()) - return - data["shuttle_access"] = get_shuttle_access(user, selected_shuttle) - data["shuttle_name"] = selected_shuttle.name - data["mission_data"] = generate_mission_data(selected_mission) - if(selected_mission.flight_plan) - data["flight_plan"] = selected_mission.flight_plan.generate_nano_data() - data["crew"] = selected_mission.flight_plan.manifest.get_value() - if(!(selected_mission.stage in list(SHUTTLE_MISSION_PLANNED, SHUTTLE_MISSION_QUEUED))) - var/other_reports = list() - for(var/i = 1, i <= length(report_prototypes), i++) - var/datum/computer_file/report/recipient/shuttle/report = report_prototypes[i] - var/L = list() - L["name"] = report.display_name() - L["index"] = i - L["exists"] = locate(report) in selected_mission.other_reports - L["access_edit"] = report.verify_access_edit(get_access(user)) - other_reports += list(L) - data["other_reports"] = other_reports - - if(DECK_REPORT_EDIT) - if(!ensure_valid_mission()) - return - if(!istype(selected_report)) - prog_state = DECK_MISSION_DETAILS - return - data["report_data"] = selected_report.generate_nano_data(get_access(user)) - data["shuttle_name"] = selected_shuttle.name - data["mission_data"] = generate_mission_data(selected_mission) - data["view_only"] = can_view_only - - ui = SSnano.try_update_ui(user, src, ui_key, ui, data, force_open) - if (!ui) - ui = new(user, src, ui_key, "deck_management.tmpl", name, 700, 800, state = state) - ui.auto_update_layout = 1 - ui.set_initial_data(data) - ui.open() - -//Checks that the selected shuttle is valid, and resets to home screen if not. -/datum/nano_module/deck_management/proc/ensure_valid_shuttle() - if(!(selected_shuttle in SSshuttle.shuttle_logs)) - selected_mission = null - selected_shuttle = null - prog_state = DECK_HOME - return 0 - return 1 - -//Same for mission, checks that the shuttle is valid first. -/datum/nano_module/deck_management/proc/ensure_valid_mission() - if(!ensure_valid_shuttle()) - return 0 - var/datum/shuttle_log/log = SSshuttle.shuttle_logs[selected_shuttle] - if(!(selected_mission in (log.missions + log.queued_missions)) || (selected_mission.shuttle_name != selected_shuttle.name)) - selected_mission = null - prog_state = DECK_ALL_MISSIONS - return 0 - return 1 - -/datum/nano_module/deck_management/proc/generate_mission_data(datum/shuttle_mission/mission) - var/mission_data = list() - mission_data["name"] = mission.name - mission_data["departure"] = mission.depart_time || "N/A" - mission_data["return_time"] = mission.return_time || "N/A" - switch(mission.stage) - if(SHUTTLE_MISSION_QUEUED) - mission_data["status"] = "Mission Scheduled." - if(SHUTTLE_MISSION_PLANNED) - mission_data["status"] = "Mission Preparing." - mission_data["departure"] = mission.flight_plan ? "[mission.flight_plan.planned_depart.get_value()] (PLANNED)" : "N/A" - if(SHUTTLE_MISSION_STARTED) - mission_data["status"] = "Mission Underway." - if(SHUTTLE_MISSION_FINISHED) - mission_data["status"] = "Mission Complete." - mission_data["ID"] = mission.ID - if(selected_shuttle) - var/datum/shuttle_log/my_log = SSshuttle.shuttle_logs[selected_shuttle] - if(my_log.current_mission == mission) - mission_data["is_current"] = 1 - if(mission in my_log.queued_missions) - mission_data["queued"] = 1 - return mission_data - -/datum/nano_module/deck_management/proc/get_default_access(mob/user) - for(var/access_pattern in default_access) - if(check_access(user, access_pattern)) - return 1 - -/datum/nano_module/deck_management/proc/get_shuttle_access(mob/user, datum/shuttle/shuttle) - return shuttle.logging_access ? (check_access(user, shuttle.logging_access) || check_access(user, access_bridge)) : 0 - -/datum/nano_module/deck_management/proc/set_shuttle(mob/user, shuttle_name, need_access = 1) - var/datum/shuttle/shuttle - if(!(shuttle = SSshuttle.shuttles[shuttle_name])) - return 0 - if(need_access && !get_shuttle_access(user, shuttle)) - return 0 - selected_shuttle = shuttle - if(!ensure_valid_shuttle()) - return 0 - if(selected_shuttle != prototype_shuttle) - prototype_shuttle = selected_shuttle - report_prototypes = list() - for(var/report_type in subtypesof(/datum/computer_file/report/recipient/shuttle)) - var/datum/computer_file/report/recipient/shuttle/new_report = new report_type - if(new_report.access_shuttle) - new_report.set_access(null, selected_shuttle.logging_access, override = 0) - report_prototypes += new_report - return 1 - -/datum/nano_module/deck_management/proc/set_mission(mission_ID) - var/datum/shuttle_log/my_log = SSshuttle.shuttle_logs[selected_shuttle] - var/datum/shuttle_mission/mission = my_log.mission_from_ID(mission_ID) - if(!mission) - return 0 - selected_mission = mission - return ensure_valid_mission() - -/datum/nano_module/deck_management/Topic(href, href_list) - var/mob/user = usr - if(..()) - return 1 - - if(!get_default_access(user)) - return 1 //No program access if you don't have the right access. - if(text2num(href_list["warning"])) //Gives the user a chance to avoid losing unsaved reports. - if(alert(user, "Are you sure you want to do this? Data may be lost.",, "Yes.", "No.") == "No.") - return 1 //If yes, proceed to the actual action instead. - - if(href_list["details"]) - var/shuttle_name = href_list["shuttle"] - var/mission_ID = text2num(href_list["mission"]) - if(set_shuttle(user, shuttle_name, 0) && set_mission(mission_ID)) - prog_state = DECK_MISSION_DETAILS - return 1 - if(href_list["history"]) - var/shuttle_name = href_list["history"] - if(set_shuttle(user, shuttle_name, 0)) - selected_mission = null - prog_state = DECK_ALL_MISSIONS - return 1 - if(href_list["new_mission"]) - var/shuttle_name = href_list["new_mission"] - if(!set_shuttle(user, shuttle_name, 1)) - return 1 - var/datum/shuttle_log/my_log = SSshuttle.shuttle_logs[selected_shuttle] - var/input = input(user, "Mission Name:", "Mission Creation") as null|text - selected_mission = my_log.create_mission(sanitize(input, 50)) - prog_state = DECK_MISSION_DETAILS - return 1 - if(href_list["modify"]) - var/shuttle_name = href_list["shuttle"] - var/mission_ID = text2num(href_list["mission"]) - var/function = href_list["modify"] - if(set_shuttle(user, shuttle_name, 1) && set_mission(mission_ID)) - var/datum/shuttle_log/my_log = SSshuttle.shuttle_logs[selected_shuttle] - switch(function) - if("rename") - var/input = input(user, "Mission Name:", "Rename Mission") as null|text - my_log.rename_mission(selected_mission, sanitize(input, 50)) - if("delete") - my_log.delete_mission(selected_mission) - if("move_up") - my_log.move_in_queue(selected_mission, 1) - if("move_down") - my_log.move_in_queue(selected_mission, -1) - return 1 - if(href_list["report"]) - var/shuttle_name = href_list["shuttle"] - var/mission_ID = text2num(href_list["mission"]) - if(set_shuttle(user, shuttle_name, 0) && set_mission(mission_ID)) - can_view_only = (href_list["view"] ? 1 : 0) - if(href_list["flight_plan"]) - prog_state = DECK_REPORT_EDIT - if(selected_mission.flight_plan) - selected_report = selected_mission.flight_plan.clone()//We always make a new one to buffer changes until submitted. - else - selected_report = new /datum/computer_file/report/flight_plan - selected_report.set_access(null, selected_shuttle.logging_access, override = 0) - else - if(selected_mission.stage in list(SHUTTLE_MISSION_PLANNED, SHUTTLE_MISSION_QUEUED)) - return 1 //Hold your horses until the mission is started on these reports. - var/index = text2num(href_list["index"]) - if(!index) - return 1 - var/datum/computer_file/report/prototype = LAZYACCESS(report_prototypes, index) - if (!prototype) - return 1 - prog_state = DECK_REPORT_EDIT - var/datum/computer_file/report/old_report = locate(prototype.type) in selected_mission.other_reports - if(old_report) - selected_report = old_report.clone() - else - var/datum/computer_file/report/recipient/shuttle/new_report = prototype.clone() - new_report.shuttle.set_value(selected_shuttle.name) - new_report.mission.set_value(selected_mission.name) - selected_report = new_report - return 1 - if(href_list["home"]) - selected_shuttle = null - selected_mission = null - selected_report = null - prog_state = DECK_HOME - return 1 - - if(href_list["edit"]) - if(!ensure_valid_mission() || !selected_report) - return 1 - var/field_ID = text2num(href_list["ID"]) - var/datum/report_field/field = selected_report.field_from_ID(field_ID) - if(!field || !field.verify_access_edit(get_access(user))) - return 1 - field.ask_value(user) //Handles the remaining IO. - return 1 - if(href_list["submit"]) - if(!ensure_valid_mission() || !selected_report) - return 1 - if(!selected_report.verify_access_edit(get_access(user))) - return 1 - var/datum/shuttle_log/my_log = SSshuttle.shuttle_logs[selected_shuttle] - if(my_log.submit_report(selected_mission, selected_report, user)) - selected_report = null - prog_state = DECK_MISSION_DETAILS - return 1 - if(href_list["discard"]) - if(!ensure_valid_mission() || !selected_report) - return 1 - qdel(selected_report) - prog_state = DECK_MISSION_DETAILS - return 1 - - if(href_list["summon_crew"]) - var/shuttle_name = href_list["shuttle"] - var/mission_ID = text2num(href_list["mission"]) - if(!set_shuttle(user, shuttle_name, 1) || !set_mission(mission_ID)) - return 1 - if(!selected_mission.flight_plan) - return 1 - var/crew = selected_mission.flight_plan.manifest.get_value(in_line = 1) - var/time = selected_mission.flight_plan.planned_depart.get_value() - if(!crew || !time) - to_chat(user, "Please fill in the crew manifest and departure time first.") - return 1 - var/place = selected_shuttle.name - if(alert(user, "Would you like to choose a custom gathering point, or just use [place]?", "Announcement Creation", "Default", "Custom") == "Custom") - var/list/areas = area_repository.get_areas_by_name() - var/area/A = input(user, "Pick a custom location from the list.", "Announcement Creation") as null|anything in areas - if(A) - place = A - if(alert(user, "This will make a radio announcement summoning all mission crew to the [place]. Are you sure you want to do this?",, "Yes.", "No.") == "No.") - return 1 - var/datum/shuttle_log/my_log = SSshuttle.shuttle_logs[selected_shuttle] - if(world.time - my_log.last_spam >= 1 MINUTE) //Slow down with that spam button - GLOB.global_announcer.autosay("The [selected_shuttle.name] is planning to depart on a mission promptly at [time]. The following crew members are to make their way to \the [place] immediately: [crew].", "Hangar Announcement System") - my_log.last_spam = world.time - else - to_chat(user, "It's too soon after the previous announcement!") - return 1 - if(href_list["email_crew"]) - var/shuttle_name = href_list["shuttle"] - var/mission_ID = text2num(href_list["mission"]) - if(!set_shuttle(user, shuttle_name, 1) || !set_mission(mission_ID)) - return 1 - if(!selected_mission.flight_plan) - return 1 - var/datum/report_field/people/manifest = selected_mission.flight_plan.manifest - if(!manifest.get_value()) - return 1 - manifest.send_email(user) - return 1 - -#undef DECK_HOME -#undef DECK_ALL_MISSIONS -#undef DECK_MISSION_DETAILS -#undef DECK_REPORT_EDIT \ No newline at end of file diff --git a/code/modules/modular_computers/file_system/programs/generic/docks.dm b/code/modules/modular_computers/file_system/programs/generic/docks.dm deleted file mode 100644 index ec263c8c0d28b..0000000000000 --- a/code/modules/modular_computers/file_system/programs/generic/docks.dm +++ /dev/null @@ -1,91 +0,0 @@ -/datum/computer_file/program/docking - filename = "docking" - filedesc = "Docking Control" - required_access = access_bridge - nanomodule_path = /datum/nano_module/docking - program_icon_state = "supply" - program_key_state = "rd_key" - program_menu_icon = "triangle-2-e-w" - extended_desc = "A management tool that lets you see the status of the docking ports." - size = 10 - usage_flags = PROGRAM_CONSOLE | PROGRAM_LAPTOP - available_on_ntnet = TRUE - requires_ntnet = TRUE - category = PROG_SUPPLY - -/datum/computer_file/program/docking/on_startup() - . = ..() - if(NM) - var/datum/nano_module/docking/NMD = NM - NMD.refresh_docks() - -/datum/nano_module/docking - name = "Docking Control program" - var/list/docking_controllers = list() //list of tags - -/datum/nano_module/docking/New(var/datum/host, var/topic_manager) - ..() - refresh_docks() - -/datum/nano_module/docking/proc/refresh_docks() - docking_controllers.Cut() - var/list/zlevels = GetConnectedZlevels(get_host_z()) - for(var/obj/machinery/embedded_controller/radio/airlock/docking_port/D in SSmachines.machinery) - if(D.z in zlevels) - var/shuttleside = 0 - for(var/sname in SSshuttle.shuttles) //do not touch shuttle-side ones - var/datum/shuttle/autodock/S = SSshuttle.shuttles[sname] - if(istype(S) && S.shuttle_docking_controller) - if(S.shuttle_docking_controller.id_tag == D.program.id_tag) - shuttleside = 1 - break - if(shuttleside) - continue - docking_controllers += D.program.id_tag - -/datum/nano_module/docking/ui_interact(mob/user, ui_key = "main", datum/nanoui/ui = null, force_open = 1, state = GLOB.default_state) - var/list/data = host.initial_data() - var/list/docks = list() - for(var/docktag in docking_controllers) - var/datum/computer/file/embedded_program/docking/P = SSshuttle.docking_registry[docktag] - if(P) - var/docking_attempt = P.tag_target && !P.dock_state - var/docked = P.tag_target && (P.dock_state == STATE_DOCKED) - docks.Add(list(list( - "tag"=P.id_tag, - "location" = P.get_name(), - "status" = capitalize(P.get_docking_status()), - "docking_attempt" = docking_attempt, - "docked" = docked, - "codes" = P.docking_codes ? P.docking_codes : "Unset" - ))) - data["docks"] = docks - ui = SSnano.try_update_ui(user, src, ui_key, ui, data, force_open) - if (!ui) - ui = new(user, src, ui_key, "docking.tmpl", name, 600, 450, state = state) - ui.set_auto_update(1) - ui.set_initial_data(data) - ui.open() - -/datum/nano_module/docking/Topic(href, href_list, state) - if(..()) - return 1 - if(istext(href_list["edit_code"])) - var/datum/computer/file/embedded_program/docking/P = SSshuttle.docking_registry[href_list["edit_code"]] - if(P) - var/newcode = input("Input new docking codes", "Docking codes", P.docking_codes) as text|null - if(!CanInteract(usr,state)) - return - if (newcode) - P.docking_codes = uppertext(newcode) - return 1 - if(istext(href_list["dock"])) - var/datum/computer/file/embedded_program/docking/P = SSshuttle.docking_registry[href_list["dock"]] - if(P) - P.receive_user_command("dock") - return 1 - if(istext(href_list["undock"])) - var/datum/computer/file/embedded_program/docking/P = SSshuttle.docking_registry[href_list["undock"]] - if(P) - P.receive_user_command("undock") - return 1 \ No newline at end of file diff --git a/code/modules/modular_computers/file_system/programs/generic/email_client.dm b/code/modules/modular_computers/file_system/programs/generic/email_client.dm deleted file mode 100644 index 9d56ff6e24032..0000000000000 --- a/code/modules/modular_computers/file_system/programs/generic/email_client.dm +++ /dev/null @@ -1,586 +0,0 @@ -/datum/computer_file/program/email_client - filename = "emailc" - filedesc = "Email Client" - extended_desc = "This program may be used to log in into your email account." - program_icon_state = "generic" - program_key_state = "generic_key" - program_menu_icon = "mail-closed" - size = 7 - requires_ntnet = TRUE - available_on_ntnet = TRUE - var/stored_login = "" - var/stored_password = "" - usage_flags = PROGRAM_ALL - category = PROG_OFFICE - - nanomodule_path = /datum/nano_module/email_client - -/datum/computer_file/program/email_client/on_shutdown() - // Persistency. Unless you log out, or unless your password changes, this will pre-fill the login data when restarting the program - if(NM) - var/datum/nano_module/email_client/NME = NM - if(NME.current_account) - stored_login = NME.stored_login - stored_password = NME.stored_password - NME.log_out() - else - stored_login = "" - stored_password = "" - . = ..() - -/datum/computer_file/program/email_client/on_startup() - . = ..() - if(NM) - var/datum/nano_module/email_client/NME = NM - NME.stored_login = stored_login - NME.stored_password = stored_password - NME.log_in() - NME.error = "" - NME.check_for_new_messages(TRUE) - -/datum/computer_file/program/email_client/proc/new_mail_notify(notification_sound) - computer.visible_notification(notification_sound) - computer.audible_notification("sound/machines/ping.ogg") - -/datum/computer_file/program/email_client/process_tick() - ..() - var/datum/nano_module/email_client/NME = NM - if(!istype(NME)) - return - NME.relayed_process(computer.get_ntnet_speed(computer.get_ntnet_status())) - - var/check_count = NME.check_for_new_messages() - if(check_count) - if(check_count == 2 && !NME.current_account.notification_mute) - new_mail_notify(NME.current_account.notification_sound) - ui_header = "ntnrc_new.gif" - else - ui_header = "ntnrc_idle.gif" - -/datum/nano_module/email_client - name = "Email Client" - var/stored_login = "" - var/stored_password = "" - var/error = "" - - var/msg_title = "" - var/msg_body = "" - var/msg_recipient = "" - var/datum/computer_file/msg_attachment = null - var/folder = "Inbox" - var/addressbook = FALSE - var/new_message = FALSE - - var/last_message_count = 0 // How many messages were there during last check. - var/read_message_count = 0 // How many messages were there when user has last accessed the UI. - - var/datum/computer_file/downloading = null - var/download_progress = 0 - var/download_speed = 0 - - var/datum/computer_file/data/email_account/current_account = null - var/datum/computer_file/data/email_message/current_message = null - -/datum/nano_module/email_client/proc/get_ntos() - var/datum/extension/interactive/ntos/os = get_extension(nano_host(), /datum/extension/interactive/ntos) - if(!istype(os)) - error = "Error accessing system. Are you using a functional and NTOSv2-compliant device?" - return - return os - -/datum/nano_module/email_client/proc/mail_received(datum/computer_file/data/email_message/received_message) - var/mob/living/L = get_holder_of_type(host, /mob/living) - if(L) - var/list/msg = list() - msg += "*--*\n" - msg += "New mail received from [received_message.source]:\n" - msg += "Subject: [received_message.title]\nMessage:\n[digitalPencode2html(received_message.stored_data)]\n" - if(received_message.attachment) - msg += "Attachment: [received_message.attachment.filename].[received_message.attachment.filetype] ([received_message.attachment.size]GQ)\n" - msg += "Reply\n" - msg += "*--*" - to_chat(L, jointext(msg, null)) - -/datum/nano_module/email_client/Destroy() - log_out() - . = ..() - -/datum/nano_module/email_client/proc/log_in() - var/list/id_login - var/atom/movable/A = nano_host() - var/obj/item/card/id/id = A.GetIdCard() - if(!id && ismob(A.loc)) - var/mob/M = A.loc - id = M.GetIdCard() - if(id) - id_login = id.associated_email_login.Copy() - - var/datum/computer_file/data/email_account/target - for(var/datum/computer_file/data/email_account/account in ntnet_global.email_accounts) - if(!account || !account.can_login) - continue - if(id_login && id_login["login"] == account.login) - target = account - break - if(stored_login && stored_login == account.login) - target = account - break - - if(!target) - error = "Invalid Login" - return FALSE - - if(target.suspended) - error = "This account has been suspended. Please contact the system administrator for assistance." - return FALSE - - var/use_pass - if(stored_password) - use_pass = stored_password - else if(id_login) - use_pass = id_login["password"] - - if(use_pass == target.password) - current_account = target - current_account.connected_clients |= src - return TRUE - else - error = "Invalid Password" - return FALSE - -/// Returns 0 if no new messages were received, 1 if there is an unread message but notification has already been sent, and 2 if there is a new message that appeared in this tick (and therefore notification should be sent by the program). -/datum/nano_module/email_client/proc/check_for_new_messages(messages_read = FALSE) - if(!current_account) - return 0 - - var/list/allmails = current_account.all_emails() - - if(allmails.len > last_message_count) - . = 2 - else if(allmails.len > read_message_count) - . = 1 - else - . = 0 - - last_message_count = allmails.len - if(messages_read) - read_message_count = allmails.len - - -/datum/nano_module/email_client/proc/log_out() - if(current_account) - current_account.connected_clients -= src - current_account = null - downloading = null - download_progress = 0 - last_message_count = 0 - read_message_count = 0 - -/datum/nano_module/email_client/ui_interact(mob/user, ui_key = "main", datum/nanoui/ui = null, force_open = 1, datum/topic_state/state = GLOB.default_state) - var/list/data = host.initial_data() - - // Password has been changed by other client connected to this email account - if(current_account) - if(current_account.password != stored_password) - if(!log_in()) - log_out() - error = "Invalid Password" - // Banned. - else if(current_account.suspended) - log_out() - error = "This account has been suspended. Please contact the system administrator for assistance." - - if(error) - data["error"] = error - else if(downloading) - data["downloading"] = TRUE - data["down_filename"] = "[downloading.filename].[downloading.filetype]" - data["down_progress"] = download_progress - data["down_size"] = downloading.size - data["down_speed"] = download_speed - - else if(istype(current_account)) - data["current_account"] = current_account.login - data["notification_mute"] = current_account.notification_mute - if(addressbook) - var/list/all_accounts = list() - for(var/datum/computer_file/data/email_account/account in ntnet_global.email_accounts) - if(!account.can_login) - continue - all_accounts.Add(list(list( - "name" = account.fullname, - "job" = account.assignment, - "login" = account.login - ))) - data["addressbook"] = TRUE - data["accounts"] = all_accounts - else if(new_message) - data["new_message"] = TRUE - data["msg_title"] = msg_title - data["msg_body"] = digitalPencode2html(msg_body) - data["msg_recipient"] = msg_recipient - if(msg_attachment) - data["msg_hasattachment"] = TRUE - data["msg_attachment_filename"] = "[msg_attachment.filename].[msg_attachment.filetype]" - data["msg_attachment_size"] = msg_attachment.size - else if (current_message) - data["cur_title"] = current_message.title - data["cur_body"] = digitalPencode2html(current_message.stored_data) - data["cur_timestamp"] = current_message.timestamp - data["cur_source"] = current_message.source - data["cur_uid"] = current_message.uid - if(istype(current_message.attachment)) - data["cur_hasattachment"] = TRUE - data["cur_attachment_filename"] = "[current_message.attachment.filename].[current_message.attachment.filetype]" - data["cur_attachment_size"] = current_message.attachment.size - else - data["label_inbox"] = "Inbox ([current_account.inbox.len])" - data["label_outbox"] = "Sent ([current_account.outbox.len])" - data["label_spam"] = "Spam ([current_account.spam.len])" - data["label_deleted"] = "Deleted ([current_account.deleted.len])" - var/list/message_source - if(folder == "Inbox") - message_source = current_account.inbox - else if(folder == "Sent") - message_source = current_account.outbox - else if(folder == "Spam") - message_source = current_account.spam - else if(folder == "Deleted") - message_source = current_account.deleted - - if(message_source) - data["folder"] = folder - var/list/all_messages = list() - for(var/datum/computer_file/data/email_message/message in message_source) - all_messages.Add(list(list( - "title" = message.title, - "body" = digitalPencode2html(message.stored_data), - "source" = message.source, - "timestamp" = message.timestamp, - "uid" = message.uid - ))) - data["messages"] = all_messages - data["messagecount"] = all_messages.len - else - data["stored_login"] = stored_login - data["stored_password"] = stars(stored_password, 0) - - ui = SSnano.try_update_ui(user, src, ui_key, ui, data, force_open) - if (!ui) - ui = new(user, src, ui_key, "email_client.tmpl", "Email Client", 600, 450, state = state) - if(host?.update_layout()) - ui.auto_update_layout = 1 - ui.set_auto_update(1) - ui.set_initial_data(data) - ui.open() - -/datum/nano_module/email_client/proc/find_message_by_fuid(fuid) - if(!istype(current_account)) - return - - // href_list works with strings, so this makes it a bit easier for us - if(istext(fuid)) - fuid = text2num(fuid) - - for(var/datum/computer_file/data/email_message/message in current_account.all_emails()) - if(message.uid == fuid) - return message - -/datum/nano_module/email_client/proc/clear_message() - new_message = FALSE - msg_title = "" - msg_body = "" - msg_recipient = "" - msg_attachment = null - current_message = null - -/datum/nano_module/email_client/proc/relayed_process(netspeed) - download_speed = netspeed - if(!downloading) - return - download_progress = min(download_progress + netspeed, downloading.size) - if(download_progress >= downloading.size) - var/datum/extension/interactive/ntos/os = get_ntos() - if(!os) - downloading = null - download_progress = 0 - return - - if(!os.create_file(downloading)) - error = "Internal I/O error when writing file, the hard drive may be full." - else - error = "File successfully downloaded to local device." - - downloading = null - download_progress = 0 - return - -/datum/nano_module/email_client/Topic(href, href_list) - if(..()) - return TOPIC_HANDLED - var/mob/living/user = usr - - if(href_list["open"]) - ui_interact() - - check_for_new_messages(TRUE) // Any actual interaction (button pressing) is considered as acknowledging received message, for the purpose of notification icons. - if(href_list["login"]) - log_in() - return TOPIC_HANDLED - - if(href_list["logout"]) - log_out() - return TOPIC_HANDLED - - if(href_list["reset"]) - error = "" - return TOPIC_HANDLED - - if(href_list["new_message"]) - new_message = TRUE - return TOPIC_HANDLED - - if(href_list["cancel"]) - if(addressbook) - addressbook = FALSE - else - clear_message() - return TOPIC_HANDLED - - if(href_list["addressbook"]) - addressbook = TRUE - return TOPIC_HANDLED - - if(href_list["set_recipient"]) - msg_recipient = sanitize(href_list["set_recipient"]) - addressbook = FALSE - return TOPIC_HANDLED - - if(href_list["edit_title"]) - var/newtitle = sanitize(input(user,"Enter title for your message:", "Message title", msg_title), 100) - if(newtitle) - msg_title = newtitle - return TOPIC_HANDLED - - // This uses similar editing mechanism as the FileManager program, therefore it supports various paper tags and remembers formatting. - if(href_list["edit_body"]) - var/oldtext = html_decode(msg_body) - oldtext = replacetext_char(oldtext, "\[br\]", "\n") - - var/newtext = sanitize(replacetext_char(input(usr, "Enter your message. You may use most tags from paper formatting", "Message Editor", oldtext) as message|null, "\n", "\[br\]"), 20000) - if(newtext) - msg_body = newtext - return TOPIC_HANDLED - - if(href_list["edit_recipient"]) - var/newrecipient = sanitize(input(user,"Enter recipient's email address:", "Recipient", msg_recipient), 100) - if(newrecipient) - msg_recipient = newrecipient - addressbook = FALSE - return TOPIC_HANDLED - - if(href_list["close_addressbook"]) - addressbook = FALSE - return TOPIC_HANDLED - - if(href_list["edit_login"]) - var/newlogin = sanitize(input(user,"Enter login", "Login", stored_login), 100) - if(newlogin) - stored_login = newlogin - return TOPIC_HANDLED - - if(href_list["edit_password"]) - var/newpass = sanitize(input(user,"Enter password", "Password"), 100) - if(newpass) - stored_password = newpass - return TOPIC_HANDLED - - if(href_list["delete"]) - if(!istype(current_account)) - return TOPIC_HANDLED - var/datum/computer_file/data/email_message/M = find_message_by_fuid(href_list["delete"]) - if(!istype(M)) - return TOPIC_HANDLED - if(folder == "Deleted") - current_account.deleted.Remove(M) - qdel(M) - else - current_account.deleted.Add(M) - current_account.inbox.Remove(M) - current_account.spam.Remove(M) - if(current_message == M) - current_message = null - return TOPIC_HANDLED - - if(href_list["send"]) - if(!current_account) - return TOPIC_HANDLED - if((msg_body == "") || (msg_recipient == "")) - error = "Error sending mail: Message body is empty!" - return TOPIC_HANDLED - if(!length(msg_title)) - msg_title = "No subject" - - var/datum/computer_file/data/email_message/message = new() - message.title = msg_title - message.stored_data = msg_body - message.source = current_account.login - message.attachment = msg_attachment - if(!current_account.send_mail(msg_recipient, message)) - error = "Error sending email: this address doesn't exist." - return TOPIC_HANDLED - else - error = "Email successfully sent." - clear_message() - return TOPIC_HANDLED - - if(href_list["set_folder"]) - folder = href_list["set_folder"] - return TOPIC_HANDLED - - if(href_list["reply"]) - var/datum/computer_file/data/email_message/M = find_message_by_fuid(href_list["reply"]) - if(!istype(M)) - return TOPIC_HANDLED - error = null - new_message = TRUE - msg_recipient = M.source - msg_title = "Re: [M.title]" - var/atom/movable/AM = host - if(istype(AM)) - if(ismob(AM.loc)) - ui_interact(AM.loc) - return TOPIC_HANDLED - - if(href_list["view"]) - var/datum/computer_file/data/email_message/M = find_message_by_fuid(href_list["view"]) - if(istype(M)) - current_message = M - return TOPIC_HANDLED - - if(href_list["changepassword"]) - var/oldpassword = sanitize(input(user,"Please enter your old password:", "Password Change"), 100) - if(!oldpassword) - return TOPIC_HANDLED - var/newpassword1 = sanitize(input(user,"Please enter your new password:", "Password Change"), 100) - if(!newpassword1) - return TOPIC_HANDLED - var/newpassword2 = sanitize(input(user,"Please re-enter your new password:", "Password Change"), 100) - if(!newpassword2) - return TOPIC_HANDLED - - if(!istype(current_account)) - error = "Please log in before proceeding." - return TOPIC_HANDLED - - if(current_account.password != oldpassword) - error = "Incorrect original password" - return TOPIC_HANDLED - - if(newpassword1 != newpassword2) - error = "The entered passwords do not match." - return TOPIC_HANDLED - - current_account.password = newpassword1 - stored_password = newpassword1 - error = "Your password has been successfully changed!" - return TOPIC_HANDLED - - if(href_list["set_notification"]) - var/new_notification = sanitize(input(user, "Enter your desired notification sound:", "Set Notification", current_account.notification_sound) as text|null) - if(new_notification && current_account) - current_account.notification_sound = new_notification - return TOPIC_HANDLED - - if(href_list["mute"]) - current_account.notification_mute = !current_account.notification_mute - return TOPIC_HANDLED - - // The following entries are Modular Computer framework only, and therefore won't do anything in other cases (like AI View) - - if(href_list["save"]) - // Fully dependant on modular computers here. - var/datum/extension/interactive/ntos/os = get_ntos() - if(!os) - return TOPIC_HANDLED - - var/filename = sanitize(input(user,"Please specify file name:", "Message export"), 100) - if(!filename) - return TOPIC_HANDLED - - os = get_ntos() - if(!os) - return TOPIC_HANDLED - - var/datum/computer_file/data/email_message/M = find_message_by_fuid(href_list["save"]) - var/datum/computer_file/data/mail = istype(M) ? M.export() : null - if(!istype(mail)) - return TOPIC_HANDLED - mail.filename = filename - - if(!os.create_file(mail)) - error = "Internal I/O error when writing file, the hard drive may be full." - else - error = "Email exported successfully" - return TOPIC_HANDLED - - if(href_list["addattachment"]) - var/datum/extension/interactive/ntos/os = get_ntos() - msg_attachment = null - if(!os) - return TOPIC_HANDLED - - var/list/filenames = list() - var/list/files_on_disk = os.get_all_files() - for(var/datum/computer_file/CF in files_on_disk) - if(CF.unsendable) - continue - filenames.Add(CF.filename) - - var/picked_file = input(user, "Please pick a file to send as attachment (max 32GQ)") as null|anything in filenames - if(!picked_file) - return TOPIC_HANDLED - - os = get_ntos() - if(!os) - return TOPIC_HANDLED - - for(var/datum/computer_file/CF in files_on_disk) - if(CF.unsendable) - continue - if(CF.filename == picked_file) - msg_attachment = CF.clone() - break - - if(!istype(msg_attachment)) - msg_attachment = null - error = "Unknown error when uploading attachment." - return TOPIC_HANDLED - - if(msg_attachment.size > 32) - error = "Error uploading attachment: File exceeds maximal permitted file size of 32GQ." - msg_attachment = null - else - error = "File [msg_attachment.filename].[msg_attachment.filetype] has been successfully uploaded." - return TOPIC_HANDLED - - if(href_list["downloadattachment"]) - var/datum/extension/interactive/ntos/os = get_ntos() - if(!os) - return TOPIC_HANDLED - - if(!current_account || !current_message || !current_message.attachment) - return TOPIC_HANDLED - - downloading = current_message.attachment.clone() - download_progress = 0 - return TOPIC_HANDLED - - if(href_list["canceldownload"]) - downloading = null - download_progress = 0 - return TOPIC_HANDLED - - if(href_list["remove_attachment"]) - msg_attachment = null - return TOPIC_HANDLED \ No newline at end of file diff --git a/code/modules/modular_computers/file_system/programs/generic/file_browser.dm b/code/modules/modular_computers/file_system/programs/generic/file_browser.dm deleted file mode 100644 index a611e838ae886..0000000000000 --- a/code/modules/modular_computers/file_system/programs/generic/file_browser.dm +++ /dev/null @@ -1,145 +0,0 @@ -/datum/computer_file/program/filemanager - filename = "filemanager" - filedesc = "NTOS File Manager" - extended_desc = "This program allows management of files." - program_icon_state = "generic" - program_key_state = "generic_key" - program_menu_icon = "folder-collapsed" - size = 8 - requires_ntnet = FALSE - available_on_ntnet = FALSE - undeletable = TRUE - nanomodule_path = /datum/nano_module/program/computer_filemanager - var/open_file - var/error - usage_flags = PROGRAM_ALL - category = PROG_UTIL - -/datum/computer_file/program/filemanager/Topic(href, href_list) - if(..()) - return TOPIC_HANDLED - - if(href_list["PRG_openfile"]) - . = TOPIC_HANDLED - open_file = href_list["PRG_openfile"] - if(href_list["PRG_newtextfile"]) - . = TOPIC_HANDLED - var/newname = sanitize(input(usr, "Enter file name or leave blank to cancel:", "File rename")) - if(!newname) - return - if(!computer.create_data_file(newname, file_type = /datum/computer_file/data/text)) - error = "File error: Unable to create file on disk." - return - if(href_list["PRG_deletefile"]) - . = TOPIC_HANDLED - computer.delete_file(href_list["PRG_deletefile"]) - if(href_list["PRG_clone"]) - . = TOPIC_HANDLED - computer.clone_file(href_list["PRG_clone"]) - if(href_list["PRG_rename"]) - . = TOPIC_HANDLED - var/newname = sanitize(input(usr, "Enter new file name:", "File rename", href_list["PRG_rename"])) - if(!newname) - return - if(!computer.rename_file(href_list["PRG_rename"], newname)) - error = "File error: Unable to rename file." - return - if(href_list["PRG_usbdeletefile"]) - . = TOPIC_HANDLED - computer.delete_file(href_list["PRG_usbdeletefile"], computer.get_component(PART_DRIVE)) - if(href_list["PRG_copytousb"]) - . = TOPIC_HANDLED - computer.copy_between_disks(href_list["PRG_copytousb"], computer.get_component(PART_HDD), computer.get_component(PART_DRIVE)) - if(href_list["PRG_copyfromusb"]) - . = TOPIC_HANDLED - computer.copy_between_disks(href_list["PRG_copyfromusb"], computer.get_component(PART_DRIVE), computer.get_component(PART_HDD)) - if(href_list["PRG_closefile"]) - . = TOPIC_HANDLED - open_file = null - error = null - if(href_list["PRG_edit"]) - . = TOPIC_HANDLED - if(!open_file) - return - var/datum/computer_file/data/F = computer.get_file(open_file) - if(!istype(F)) - return - if(F.do_not_edit && (alert("WARNING: This file is not compatible with editor. Editing it may result in permanently corrupted formatting or damaged data consistency. Edit anyway?", "Incompatible File", "No", "Yes") == "No")) - return - if(F.read_only) - error = "This file is read only. You cannot edit it." - return - - var/oldtext = html_decode(F.stored_data) - oldtext = replacetext_char(oldtext, "\[br\]", "\n") - - var/newtext = sanitize(replacetext_char(input(usr, "Editing file [open_file]. You may use most tags used in paper formatting:", "Text Editor", oldtext) as message|null, "\n", "\[br\]"), MAX_TEXTFILE_LENGTH) - if(!newtext) - return - - computer.update_data_file(F.filename, newtext, F.type, replace_content = TRUE) - if(href_list["PRG_printfile"]) - . = TOPIC_HANDLED - if(!open_file) - return - var/datum/computer_file/data/F = computer.get_file(open_file) - if(!istype(F)) - return - if(!computer.print_paper(F.generate_file_data(),F.filename,F.papertype, F.metadata)) - error = "Hardware error: Unable to print the file." - return - if(.) - SSnano.update_uis(NM) - -/datum/nano_module/program/computer_filemanager - name = "NTOS File Manager" - -/datum/nano_module/program/computer_filemanager/ui_interact(mob/user, ui_key = "main", datum/nanoui/ui = null, force_open = 1, datum/topic_state/state = GLOB.default_state) - var/list/data = host.initial_data() - var/datum/computer_file/program/filemanager/PRG - PRG = program - - if(PRG.error) - data["error"] = PRG.error - if(PRG.open_file) - if(!PRG.computer || !PRG.computer.has_component(PART_HDD)) - data["error"] = "I/O ERROR: Unable to access hard drive." - else - var/datum/computer_file/data/F = PRG.computer.get_file(PRG.open_file) - if(!istype(F)) - data["error"] = "I/O ERROR: Unable to open file." - else - data["filedata"] = F.generate_file_data(user) - data["filename"] = "[F.filename].[F.filetype]" - else - if(!PRG.computer || !PRG.computer.has_component(PART_HDD)) - data["error"] = "I/O ERROR: Unable to access hard drive." - else - var/list/files[0] - for(var/datum/computer_file/F in PRG.computer.get_all_files()) - files.Add(list(list( - "name" = F.filename, - "type" = F.filetype, - "size" = F.size, - "undeletable" = F.undeletable - ))) - data["files"] = files - var/obj/item/stock_parts/computer/hard_drive/portable/RHDD = PRG.computer.get_component(PART_DRIVE) - if(RHDD) - data["usbconnected"] = TRUE - var/list/usbfiles[0] - for(var/datum/computer_file/F in PRG.computer.get_all_files(disk = RHDD)) - usbfiles.Add(list(list( - "name" = F.filename, - "type" = F.filetype, - "size" = F.size, - "undeletable" = F.undeletable - ))) - data["usbfiles"] = usbfiles - - ui = SSnano.try_update_ui(user, src, ui_key, ui, data, force_open) - if (!ui) - ui = new(user, src, ui_key, "file_manager.tmpl", "NTOS File Manager", 600, 700, state = state) - ui.auto_update_layout = 1 - ui.set_initial_data(data) - ui.open() diff --git a/code/modules/modular_computers/file_system/programs/generic/game.dm b/code/modules/modular_computers/file_system/programs/generic/game.dm deleted file mode 100644 index bf3ee79378611..0000000000000 --- a/code/modules/modular_computers/file_system/programs/generic/game.dm +++ /dev/null @@ -1,153 +0,0 @@ -// This file is used as a reference for Modular Computers Development guide on the wiki. It contains a lot of excess comments, as it is intended as explanation -// for someone who may not be as experienced in coding. When making changes, please try to keep it this way. - -// An actual program definition. -/datum/computer_file/program/game - filename = "arcadec" // File name, as shown in the file browser program. - filedesc = "Unknown Game" // User-Friendly name. In this case, we will generate a random name in constructor. - program_icon_state = "game" // Icon state of this program's screen. - program_menu_icon = "script" - extended_desc = "Fun for the whole family! Probably not an AAA title, but at least you can download it on the corporate network.." // A nice description. - size = 5 // Size in GQ. Integers only. Smaller sizes should be used for utility/low use programs (like this one), while large sizes are for important programs. - requires_ntnet = FALSE // This particular program does not require NTNet network conectivity... - available_on_ntnet = TRUE // ... but we want it to be available for download. - nanomodule_path = /datum/nano_module/arcade_classic/ // Path of relevant nano module. The nano module is defined further in the file. - var/picked_enemy_name - usage_flags = PROGRAM_ALL - -// Blatantly stolen and shortened version from arcade machines. Generates a random enemy name -/datum/computer_file/program/game/proc/random_enemy_name() - var/name_part1 = pick("the Automatic ", "Farmer ", "Lord ", "Professor ", "the Cuban ", "the Evil ", "the Dread King ", "the Space ", "Lord ", "the Great ", "Duke ", "General ") - var/name_part2 = pick("Melonoid", "Murdertron", "Sorcerer", "Ruin", "Jeff", "Ectoplasm", "Crushulon", "Uhangoid", "Vhakoid", "Peteoid", "Slime", "Lizard Man", "Unicorn") - return "[name_part1] [name_part2]" - -// When the program is first created, we generate a new enemy name and name ourselves accordingly. -/datum/computer_file/program/game/New() - ..() - picked_enemy_name = random_enemy_name() - filedesc = "Defeat [picked_enemy_name]" - -// Important in order to ensure that copied versions will have the same enemy name. -/datum/computer_file/program/game/clone() - var/datum/computer_file/program/game/G = ..() - G.picked_enemy_name = picked_enemy_name - return G - -// When running the program, we also want to pass our enemy name to the nano module. -/datum/computer_file/program/game/on_startup() - . = ..() - if(. && NM) - var/datum/nano_module/arcade_classic/NMC = NM - NMC.enemy_name = picked_enemy_name - - -// Nano module the program uses. -// This can be either /datum/nano_module/ or /datum/nano_module/program. The latter is intended for nano modules that are suposed to be exclusively used with modular computers, -// and should generally not be used, as such nano modules are hard to use on other places. -/datum/nano_module/arcade_classic - name = "Classic Arcade" - var/player_mana // Various variables specific to the nano module. In this case, the nano module is a simple arcade game, so the variables store health and other stats. - var/player_health - var/enemy_mana - var/enemy_health - var/enemy_name = "Greytide Horde" - var/gameover - var/information - -/datum/nano_module/arcade_classic/New() - ..() - new_game() - -// ui_interact handles transfer of data to NanoUI. Keep in mind that data you pass from here is actually sent to the client. In other words, don't send anything you don't want a client -// to see, and don't send unnecessarily large amounts of data (due to laginess). -/datum/nano_module/arcade_classic/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1, var/datum/topic_state/state = GLOB.default_state) - var/list/data = host.initial_data() - - data["player_health"] = player_health - data["player_mana"] = player_mana - data["enemy_health"] = enemy_health - data["enemy_mana"] = enemy_mana - data["enemy_name"] = enemy_name - data["gameover"] = gameover - data["information"] = information - - ui = SSnano.try_update_ui(user, src, ui_key, ui, data, force_open) - if (!ui) - ui = new(user, src, ui_key, "arcade_classic.tmpl", "Defeat [enemy_name]", 500, 350, state = state) - if(host.update_layout()) - ui.auto_update_layout = 1 - ui.set_initial_data(data) - ui.open() - -// Three helper procs i've created. These are unique to this particular nano module. If you are creating your own nano module, you'll most likely create similar procs too. -/datum/nano_module/arcade_classic/proc/enemy_play() - if((enemy_mana < 5) && prob(60)) - var/steal = rand(2, 3) - player_mana -= steal - enemy_mana += steal - information += "[enemy_name] steals [steal] of your power!" - else if((enemy_health < 15) && (enemy_mana > 3) && prob(80)) - var/healamt = min(rand(3, 5), enemy_mana) - enemy_mana -= healamt - enemy_health += healamt - information += "[enemy_name] heals for [healamt] health!" - else - var/dam = rand(3,6) - player_health -= dam - information += "[enemy_name] attacks for [dam] damage!" - -/datum/nano_module/arcade_classic/proc/check_gameover() - if((player_health <= 0) || player_mana <= 0) - if(enemy_health <= 0) - information += "You have defeated [enemy_name], but you have died in the fight!" - else - information += "You have been defeated by [enemy_name]!" - gameover = 1 - return TRUE - else if(enemy_health <= 0) - gameover = 1 - information += "Congratulations! You have defeated [enemy_name]!" - return TRUE - return FALSE - -/datum/nano_module/arcade_classic/proc/new_game() - player_mana = 10 - player_health = 30 - enemy_mana = 20 - enemy_health = 45 - gameover = FALSE - information = "A new game has started!" - - - -/datum/nano_module/arcade_classic/Topic(href, href_list) - if(..()) // Always begin your Topic() calls with a parent call! - return 1 - if(href_list["new_game"]) - new_game() - return 1 // Returning 1 (TRUE) in Topic automatically handles UI updates. - if(gameover) // If the game has already ended, we don't want the following three topic calls to be processed at all. - return 1 // Instead of adding checks into each of those three, we can easily add this one check here to reduce on code copy-paste. - if(href_list["attack"]) - var/damage = rand(2, 6) - information = "You attack for [damage] damage." - enemy_health -= damage - enemy_play() - check_gameover() - return 1 - if(href_list["heal"]) - var/healfor = rand(6, 8) - var/cost = rand(1, 3) - information = "You heal yourself for [healfor] damage, using [cost] energy in the process." - player_health += healfor - player_mana -= cost - enemy_play() - check_gameover() - return 1 - if(href_list["regain_mana"]) - var/regen = rand(4, 7) - information = "You rest of a while, regaining [regen] energy." - player_mana += regen - enemy_play() - check_gameover() - return 1 \ No newline at end of file diff --git a/code/modules/modular_computers/file_system/programs/generic/library.dm b/code/modules/modular_computers/file_system/programs/generic/library.dm deleted file mode 100644 index 42e5549e0142c..0000000000000 --- a/code/modules/modular_computers/file_system/programs/generic/library.dm +++ /dev/null @@ -1,191 +0,0 @@ -/* -In reply to this set of comments on lib_machines.dm: -// TODO: Make this an actual /obj/machinery/computer that can be crafted from circuit boards and such -// It is August 22nd, 2012... This TODO has already been here for months.. I wonder how long it'll last before someone does something about it. - -The answer was five and a half years -ZeroBits -*/ - -/datum/computer_file/program/library - filename = "library" - filedesc = "Library" - extended_desc = "This program can be used to view e-books from an external archive." - program_icon_state = "word" - program_key_state = "atmos_key" - program_menu_icon = "note" - size = 6 - requires_ntnet = TRUE - available_on_ntnet = TRUE - - nanomodule_path = /datum/nano_module/library - -/datum/nano_module/library - name = "Library" - var/error_message = "" - var/current_book - var/obj/machinery/libraryscanner/scanner - var/sort_by = "id" - -/datum/nano_module/library/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1, var/datum/topic_state/state = GLOB.default_state) - var/list/data = host.initial_data() - - if(error_message) - data["error"] = error_message - else if(current_book) - data["current_book"] = current_book - else - var/list/all_entries[0] - establish_old_db_connection() - if(!dbcon_old.IsConnected()) - error_message = "Unable to contact External Archive. Please contact your system administrator for assistance." - else - var/DBQuery/query = dbcon_old.NewQuery("SELECT id, author, title, category FROM library ORDER BY "+sanitizeSQL(sort_by)) - query.Execute() - - while(query.NextRow()) - all_entries.Add(list(list( - "id" = query.item[1], - "author" = query.item[2], - "title" = query.item[3], - "category" = query.item[4] - ))) - data["book_list"] = all_entries - data["scanner"] = istype(scanner) - - ui = SSnano.try_update_ui(user, src, ui_key, ui, data, force_open) - if (!ui) - ui = new(user, src, ui_key, "library.tmpl", "Library Program", 575, 700, state = state) - ui.auto_update_layout = 1 - ui.set_initial_data(data) - ui.open() - -/datum/nano_module/library/Topic(href, href_list) - if(..()) - return 1 - if(href_list["viewbook"]) - view_book(href_list["viewbook"]) - return 1 - if(href_list["viewid"]) - view_book(sanitizeSQL(input("Enter USBN:") as num|null)) - return 1 - if(href_list["closebook"]) - current_book = null - return 1 - if(href_list["connectscanner"]) - if(!nano_host()) - return 1 - for(var/d in GLOB.cardinal) - var/obj/machinery/libraryscanner/scn = locate(/obj/machinery/libraryscanner, get_step(nano_host(), d)) - if(scn && scn.anchored) - scanner = scn - return 1 - if(href_list["uploadbook"]) - if(!scanner || !scanner.anchored) - scanner = null - error_message = "Hardware Error: No scanner detected. Unable to access cache." - return 1 - if(!scanner.cache) - error_message = "Interface Error: Scanner cache does not contain any data. Please scan a book." - return 1 - - var/obj/item/book/B = scanner.cache - - if(B.unique) - error_message = "Interface Error: Cached book is copy-protected." - return 1 - - B.SetName(input(usr, "Enter Book Title", "Title", B.name) as text|null) - B.author = input(usr, "Enter Author Name", "Author", B.author) as text|null - - if(!B.author) - B.author = "Anonymous" - else if(lowertext(B.author) == "edgar allen poe" || lowertext(B.author) == "edgar allan poe") - error_message = "User Error: Upload something original." - return 1 - - if(!B.title) - B.title = "Untitled" - - var/choice = input(usr, "Upload [B.name] by [B.author] to the External Archive?") in list("Yes", "No") - if(choice == "Yes") - establish_old_db_connection() - if(!dbcon_old.IsConnected()) - error_message = "Network Error: Connection to the Archive has been severed." - return 1 - - var/upload_category = input(usr, "Upload to which category?") in list("Fiction", "Non-Fiction", "Reference", "Religion") - - var/sqltitle = sanitizeSQL(B.name) - var/sqlauthor = sanitizeSQL(B.author) - var/sqlcontent = sanitizeSQL(B.dat) - var/sqlcategory = sanitizeSQL(upload_category) - var/DBQuery/query = dbcon_old.NewQuery("INSERT INTO library (author, title, content, category) VALUES ('[sqlauthor]', '[sqltitle]', '[sqlcontent]', '[sqlcategory]')") - if(!query.Execute()) - to_chat(usr, query.ErrorMsg()) - error_message = "Network Error: Unable to upload to the Archive. Contact your system Administrator for assistance." - return 1 - else - log_and_message_admins("has uploaded the book titled [B.name], [length(B.dat)] signs") - log_game("[usr.name]/[usr.key] has uploaded the book titled [B.name], [length(B.dat)] signs") - alert("Upload Complete.") - return 1 - - return 0 - - if(href_list["printbook"]) - if(!current_book) - error_message = "Software Error: Unable to print; book not found." - return 1 - - //PRINT TO BINDER - if(!nano_host()) - return 1 - for(var/d in GLOB.cardinal) - var/obj/machinery/bookbinder/bndr = locate(/obj/machinery/bookbinder, get_step(nano_host(), d)) - if(bndr && bndr.anchored) - var/obj/item/book/B = new(bndr.loc) - B.SetName(current_book["title"]) - B.title = current_book["title"] - B.author = current_book["author"] - B.dat = current_book["content"] - B.icon_state = "book[rand(1,7)]" - B.desc = current_book["author"]+", "+current_book["title"]+", "+"USBN "+current_book["id"] - bndr.visible_message("\The [bndr] whirs as it prints and binds a new book.") - return 1 - - //Regular printing - print_text("Author: [current_book["author"]]
              USBN: [current_book["id"]]

              [current_book["title"]]


              [current_book["content"]]", usr) - return 1 - if(href_list["sortby"]) - sort_by = href_list["sortby"] - return 1 - if(href_list["reseterror"]) - if(error_message) - current_book = null - scanner = null - sort_by = "id" - error_message = "" - return 1 - -/datum/nano_module/library/proc/view_book(var/id) - if(current_book || !id) - return 0 - - var/sqlid = sanitizeSQL(id) - establish_old_db_connection() - if(!dbcon_old.IsConnected()) - error_message = "Network Error: Connection to the Archive has been severed." - return 1 - - var/DBQuery/query = dbcon_old.NewQuery("SELECT * FROM library WHERE id=[sqlid]") - query.Execute() - - while(query.NextRow()) - current_book = list( - "id" = query.item[1], - "author" = query.item[2], - "title" = query.item[3], - "content" = query.item[4] - ) - break - return 1 \ No newline at end of file diff --git a/code/modules/modular_computers/file_system/programs/generic/news.dm b/code/modules/modular_computers/file_system/programs/generic/news.dm deleted file mode 100644 index eeff801e3eaac..0000000000000 --- a/code/modules/modular_computers/file_system/programs/generic/news.dm +++ /dev/null @@ -1,137 +0,0 @@ -#define NEWSCAST_HOME 1 -#define NEWSCAST_VIEW_CHANNEL 2 - -/datum/computer_file/program/newscast - filename = "newscast" - filedesc = "Newscast" - program_icon_state = "generic" - program_menu_icon = "image" - extended_desc = "A newsfeed browser that connects to standard channels, including personalized recommendations that you can't turn off! Requires a connection to NTNet." - size = 4 // Cloud-based, but requires the software to actually fetch the data - requires_ntnet = TRUE - available_on_ntnet = TRUE - usage_flags = PROGRAM_ALL - nanomodule_path = /datum/nano_module/program/newscast - -/datum/nano_module/program/newscast - name = "Newscast" - var/prog_state = NEWSCAST_HOME - var/notifs_enabled = TRUE - var/datum/feed_channel/active_channel - var/datum/feed_network/connected_group - -/datum/nano_module/program/newscast/proc/news_alert(announcement) - if (!notifs_enabled || !announcement) - return - program.computer.visible_notification(announcement) - program.computer.audible_notification("sound/machines/twobeep.ogg") - -/datum/nano_module/program/newscast/Destroy() - if (connected_group) - LAZYREMOVE(connected_group.news_programs, src) - . = ..() - -/datum/nano_module/program/newscast/Topic(href, href_list) - if(..()) - return TRUE - - if (href_list["view_channel"]) - // We cache a byond text ref of the selected channel, and use it here to get a proper DM pointer to that channel - var/datum/feed_channel/new_feed = locate(href_list["view_channel"]) in connected_group.network_channels - if (istype(new_feed)) - active_channel = new_feed // and then if it's valid, it becomes our new active channel - prog_state = NEWSCAST_VIEW_CHANNEL - return TRUE - - else if (href_list["view_photo"]) - var/datum/feed_message/story = locate(href_list["view_photo"]) in active_channel.messages - if (istype(story) && story.img) - send_rsc(usr, story.img, "tmp_photo.png") - var/output = "photo - [story.author]" - output += "" - output += "" - output += "" - show_browser(usr, output, "window=book; size=192x192]") - return TRUE - - else if (href_list["toggle_notifs"]) - notifs_enabled = !notifs_enabled - return TRUE - - else if (href_list["return_to_home"]) - active_channel = null - prog_state = NEWSCAST_HOME - return TRUE - - return FALSE - -/datum/nano_module/program/newscast/ui_interact(mob/user, ui_key = "main", datum/nanoui/ui = null, force_open = 1, state = GLOB.default_state) - var/list/data = host.initial_data() - - var/datum/computer_file/program/newscast/prog = program - var/turf/T = get_turf(prog.computer.get_physical_host()) - if (!connected_group) // Look for a network connected to these z-levels - for (var/datum/feed_network/G in news_network) - if (T.z in G.z_levels) - connected_group = G - LAZYADD(G.news_programs, src) - break - else if (!(T.z in connected_group.z_levels)) // Lose our tracked group if we leave the network range but still have a connection - prog.computer.visible_error("Newscaster connection lost. Attempting to re-establish.") - LAZYREMOVE(connected_group.news_programs, src) - connected_group = null - - if (!connected_group) // If we still fail to find a network, throw an error with no other data - data["has_network"] = FALSE - else // Otherwise, gather the data from the network - data["has_network"] = TRUE - data["notifs_enabled"] = notifs_enabled - data["prog_state"] = prog_state - data["time_blurb"] = "The date is [stationdate2text()] at [stationtime2text()]." - data["notifs_blurb"] = "New story notifications are [notifs_enabled ? "enabled" : "disabled"]." - data["dnotice_blurb"] = "

              CHANNEL LOCKED


              \ - This channel has been deemed as threatening to the welfare of the [station_name()], and marked with a [GLOB.using_map.company_name] D-Notice.

              \ - Stories may not be published or viewed while the D-Notice is in effect. For further information, please contact the network administrator or a security representative.
              " - - data["channels"] = list() - data["active_channels"] = list() // There will only ever be one active channel, but we use this for unified handling in nanoUI - for(var/datum/feed_channel/channel in connected_group.network_channels) - var/list/channel_data = list() - channel_data["name"] = channel.channel_name - channel_data["admin"] = channel.is_admin_channel - channel_data["censored"] = channel.censored - channel_data["author"] = channel.author - channel_data["ref"] = "\ref[channel]" - - data["channels"] += list(channel_data) - if (channel == active_channel) - data["active_channels"] += list(channel_data) - - if (active_channel) - var/datum/feed_channel/feed = active_channel - data["active_channel"] = feed - data["active_stories"] = list() - for (var/i = 1 to length(feed.messages)) - var/datum/feed_message/message = feed.messages[i] - var/list/story = list() - story["author"] = message.author - story["body"] = message.body - story["timestamp"] = message.time_stamp - story["has_photo"] = message.img != null - if (user && message.img) // user check here to avoid runtimes - var/resource_name = "newscaster_photo_[sanitize(feed.channel_name)]_[i].png" - send_asset(user.client, resource_name) - story["photo_dat"] = "
              " - story["story_ref"] = "\ref[message]" - data["active_stories"] += list(story) - - ui = SSnano.try_update_ui(user, src, ui_key, ui, data, force_open) - if (!ui) - ui = new(user, src, ui_key, "newscast.tmpl", name, 450, 600, state = state) - ui.auto_update_layout = 1 - ui.set_auto_update(1) - ui.set_initial_data(data) - ui.open() - -#undef NEWSCAST_HOME -#undef NEWSCAST_VIEW_CHANNEL \ No newline at end of file diff --git a/code/modules/modular_computers/file_system/programs/generic/ntdownloader.dm b/code/modules/modular_computers/file_system/programs/generic/ntdownloader.dm deleted file mode 100644 index 9c007bf437571..0000000000000 --- a/code/modules/modular_computers/file_system/programs/generic/ntdownloader.dm +++ /dev/null @@ -1,204 +0,0 @@ -/datum/computer_file/program/ntnetdownload - filename = "ntndownloader" - filedesc = "NTNet Software Download Tool" - program_icon_state = "generic" - program_key_state = "generic_key" - program_menu_icon = "arrowthickstop-1-s" - extended_desc = "This program allows downloads of software from official software repositories" - unsendable = TRUE - undeletable = TRUE - size = 4 - requires_ntnet = TRUE - requires_ntnet_feature = NTNET_SOFTWAREDOWNLOAD - available_on_ntnet = FALSE - nanomodule_path = /datum/nano_module/program/computer_ntnetdownload - ui_header = "downloader_finished.gif" - var/datum/computer_file/program/downloaded_file = null - var/hacked_download = FALSE - /// GQ of downloaded data. - var/download_completion = 0 - var/download_netspeed = 0 - var/downloaderror = "" - var/list/downloads_queue[0] - /// For logging, can be faked by antags. - var/file_info - var/server - usage_flags = PROGRAM_ALL - category = PROG_UTIL - -/datum/computer_file/program/ntnetdownload/on_shutdown() - ..() - downloaded_file = null - download_completion = 0 - download_netspeed = 0 - downloaderror = "" - ui_header = "downloader_finished.gif" - -/datum/computer_file/program/ntnetdownload/proc/begin_file_download(filename, skill) - if(downloaded_file) - return FALSE - - var/datum/computer_file/program/PRG = ntnet_global.find_ntnet_file_by_name(filename) - - if(!check_file_download(filename)) - return FALSE - - ui_header = "downloader_running.gif" - - hacked_download = (PRG in ntnet_global.available_antag_software) - file_info = hide_file_info(PRG) - generate_network_log("Began downloading file [file_info] from [server].") - downloaded_file = PRG.clone() - -/datum/computer_file/program/ntnetdownload/proc/check_file_download(filename) - //returns 1 if file can be downloaded, returns 0 if download prohibited - var/datum/computer_file/program/PRG = ntnet_global.find_ntnet_file_by_name(filename) - - if(!PRG || !istype(PRG)) - return FALSE - - // Attempting to download antag only program, but without having emagged computer. No. - if(PRG.available_on_syndinet && !computer.emagged()) - return FALSE - - if(!computer || !computer.try_create_file(PRG)) - return FALSE - - return TRUE - -/datum/computer_file/program/ntnetdownload/proc/hide_file_info(datum/computer_file/file, skill) - server = (file in ntnet_global.available_station_software) ? "NTNet Software Repository" : "unspecified server" - if(!hacked_download) - return "[file.filename].[file.filetype]" - var/stealth_chance = max(skill - SKILL_BASIC, 0) * 30 - if(!prob(stealth_chance)) - return "**ENCRYPTED**.[file.filetype]" - var/datum/computer_file/fake_file = pick(ntnet_global.available_station_software) - server = "NTNet Software Repository" - return "[fake_file.filename].[fake_file.filetype]" - -/datum/computer_file/program/ntnetdownload/proc/abort_file_download() - if(!downloaded_file) - return - generate_network_log("Aborted download of file [file_info].") - downloaded_file = null - download_completion = 0 - ui_header = "downloader_finished.gif" - -/datum/computer_file/program/ntnetdownload/proc/complete_file_download() - if(!downloaded_file) - return - generate_network_log("Completed download of file [file_info].") - if(!computer || !computer.create_file(downloaded_file)) - // The download failed - downloaderror = "I/O ERROR - Unable to save file. Check whether you have enough free space on your hard drive and whether your hard drive is properly connected. If the issue persists contact your system administrator for assistance." - downloaded_file = null - download_completion = 0 - ui_header = "downloader_finished.gif" - -/datum/computer_file/program/ntnetdownload/process_tick() - if(!downloaded_file) - return - if(download_completion >= downloaded_file.size) - complete_file_download() - if(downloads_queue.len > 0) - begin_file_download(downloads_queue[1], downloads_queue[downloads_queue[1]]) - downloads_queue.Remove(downloads_queue[1]) - - // Download speed according to connectivity state. NTNet server is assumed to be on unlimited speed so we're limited by our local connectivity - download_netspeed = computer.get_ntnet_speed(computer.get_ntnet_status()) - download_completion += download_netspeed - -/datum/computer_file/program/ntnetdownload/Topic(href, href_list) - if(..()) - return TOPIC_HANDLED - if(href_list["PRG_downloadfile"]) - if(!downloaded_file) - begin_file_download(href_list["PRG_downloadfile"], usr.get_skill_value(SKILL_COMPUTER)) - else if(check_file_download(href_list["PRG_downloadfile"]) && !downloads_queue.Find(href_list["PRG_downloadfile"]) && downloaded_file.filename != href_list["PRG_downloadfile"]) - downloads_queue[href_list["PRG_downloadfile"]] = usr.get_skill_value(SKILL_COMPUTER) - return TOPIC_HANDLED - if(href_list["PRG_removequeued"]) - downloads_queue.Remove(href_list["PRG_removequeued"]) - return TOPIC_HANDLED - if(href_list["PRG_reseterror"]) - if(downloaderror) - download_completion = 0 - download_netspeed = 0 - downloaded_file = null - downloaderror = "" - return TOPIC_HANDLED - return TOPIC_NOACTION - -/datum/nano_module/program/computer_ntnetdownload - name = "Network Downloader" - -/datum/nano_module/program/computer_ntnetdownload/ui_interact(mob/user, ui_key = "main", datum/nanoui/ui = null, force_open = 1, datum/topic_state/state = GLOB.default_state) - var/list/data = list() - var/datum/computer_file/program/ntnetdownload/prog = program - // For now limited to execution by the downloader program - if(!prog || !istype(prog)) - return - if(program) - data = program.get_header_data() - - // This IF cuts on data transferred to client, so i guess it's worth it. - if(prog.downloaderror) // Download errored. Wait until user resets the program. - data["error"] = prog.downloaderror - if(prog.downloaded_file) // Download running. Wait please.. - data["downloadname"] = prog.downloaded_file.filename - data["downloaddesc"] = prog.downloaded_file.filedesc - data["downloadsize"] = prog.downloaded_file.size - data["downloadspeed"] = prog.download_netspeed - data["downloadcompletion"] = round(prog.download_completion, 0.1) - - data["disk_size"] = program.computer.max_disk_capacity() - data["disk_used"] = program.computer.used_disk_capacity() - var/list/all_entries[0] - for(var/category in ntnet_global.available_software_by_category) - var/list/category_list[0] - for(var/datum/computer_file/program/P in ntnet_global.available_software_by_category[category]) - // Only those programs our user can run will show in the list - if(!P.can_run(user) && P.requires_access_to_download) - continue - if(!P.is_supported_by_hardware(program.computer.get_hardware_flag())) - continue - category_list.Add(list(list( - "filename" = P.filename, - "filedesc" = P.filedesc, - "fileinfo" = P.extended_desc, - "size" = P.size, - "icon" = P.program_menu_icon - ))) - if(category_list.len) - all_entries.Add(list(list("category"=category, "programs"=category_list))) - - data["hackedavailable"] = FALSE - if(prog.computer.emagged()) // If we are running on emagged computer we have access to some "bonus" software - var/list/hacked_programs[0] - for(var/datum/computer_file/program/P in ntnet_global.available_antag_software) - data["hackedavailable"] = TRUE - hacked_programs.Add(list(list( - "filename" = P.filename, - "filedesc" = P.filedesc, - "fileinfo" = P.extended_desc, - "size" = P.size, - "icon" = P.program_menu_icon - ))) - data["hacked_programs"] = hacked_programs - - data["downloadable_programs"] = all_entries - - if(prog.downloads_queue.len > 0) - var/list/queue = list() // Nanoui can't iterate through assotiative lists, so we have to do this - for(var/item in prog.downloads_queue) - queue += item - data["downloads_queue"] = queue - - ui = SSnano.try_update_ui(user, src, ui_key, ui, data, force_open) - if (!ui) - ui = new(user, src, ui_key, "ntnet_downloader.tmpl", "NTNet Download Program", 575, 700, state = state) - ui.auto_update_layout = 1 - ui.set_initial_data(data) - ui.open() - ui.set_auto_update(1) diff --git a/code/modules/modular_computers/file_system/programs/generic/ntnrc_client.dm b/code/modules/modular_computers/file_system/programs/generic/ntnrc_client.dm deleted file mode 100644 index 9da5fd3751bc5..0000000000000 --- a/code/modules/modular_computers/file_system/programs/generic/ntnrc_client.dm +++ /dev/null @@ -1,236 +0,0 @@ -/datum/computer_file/program/chatclient - filename = "ntnrc_client" - filedesc = "NTNet Relay Chat Client" - program_icon_state = "command" - program_key_state = "med_key" - program_menu_icon = "comment" - extended_desc = "This program allows communication over NTNRC network" - size = 8 - requires_ntnet = TRUE - requires_ntnet_feature = NTNET_COMMUNICATION - network_destination = "NTNRC server" - ui_header = "ntnrc_idle.gif" - available_on_ntnet = TRUE - nanomodule_path = /datum/nano_module/program/computer_chatclient - /// Used to generate the toolbar icon - var/last_message = null - var/username - var/datum/ntnet_conversation/channel = null - /// Channel operator mode - var/operator_mode = FALSE - /// Administrator mode (invisible to other users + bypasses passwords) - var/netadmin_mode = FALSE - usage_flags = PROGRAM_ALL - -/datum/computer_file/program/chatclient/New() - username = "DefaultUser[rand(100, 999)]" - -/datum/computer_file/program/chatclient/Topic(href, href_list) - if(..()) - return TOPIC_HANDLED - - if(href_list["PRG_speak"]) - . = TOPIC_HANDLED - if(!channel) - return TOPIC_HANDLED - var/mob/living/user = usr - var/message = sanitize(input(user, "Enter message or leave blank to cancel: "), 512) - if(!message || !channel) - return - channel.add_message(message, username) - - if(href_list["PRG_joinchannel"]) - . = TOPIC_HANDLED - var/datum/ntnet_conversation/C - for(var/datum/ntnet_conversation/chan in ntnet_global.chat_channels) - if(chan.id == text2num(href_list["PRG_joinchannel"])) - C = chan - break - - if(!C) - return TOPIC_HANDLED - - if(netadmin_mode) - channel = C // Bypasses normal leave/join and passwords. Technically makes the user invisible to others. - return TOPIC_HANDLED - - if(C.password) - var/mob/living/user = usr - var/password = sanitize(input(user,"Access Denied. Enter password:")) - if(C && (password == C.password)) - C.add_client(src) - channel = C - return TOPIC_HANDLED - C.add_client(src) - channel = C - if(href_list["PRG_leavechannel"]) - . = TOPIC_HANDLED - if(channel) - channel.remove_client(src) - channel = null - if(href_list["PRG_newchannel"]) - . = TOPIC_HANDLED - var/mob/living/user = usr - var/channel_title = sanitizeSafe(input(user,"Enter channel name or leave blank to cancel:"), 64) - if(!channel_title) - return - var/atom/A = computer.get_physical_host() - var/datum/ntnet_conversation/C = new/datum/ntnet_conversation(A.z) - C.add_client(src) - C.operator = src - channel = C - C.title = channel_title - if(href_list["PRG_toggleadmin"]) - . = TOPIC_HANDLED - if(netadmin_mode) - netadmin_mode = FALSE - if(channel) - channel.remove_client(src) // We shouldn't be in channel's user list, but just in case... - channel = null - return TOPIC_HANDLED - var/mob/living/user = usr - if(can_run(usr, TRUE, access_network_admin)) - 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") - if(channel) - channel.remove_client(src) - channel = null - else - return - netadmin_mode = TRUE - if(href_list["PRG_changename"]) - . = TOPIC_HANDLED - var/mob/living/user = usr - var/newname = sanitize(input(user,"Enter new nickname or leave blank to cancel:"), 20) - if(!newname) - return - if(channel) - channel.add_status_message("[username] is now known as [newname].") - username = newname - - if(href_list["PRG_savelog"]) - . = TOPIC_HANDLED - if(!channel) - return - var/mob/living/user = usr - var/filename = input(user,"Enter desired logfile name (.LOG) or leave blank to cancel:") - if(!filename || !channel) - return - - var/content = "\[b\]Logfile dump from NTNRC channel [channel.title]\[/b\]\[BR\]" - for(var/logstring in channel.messages) - content += "[logstring]\[BR\]" - content += "\[b\]Logfile dump completed.\[/b\]" - - if(!computer.create_data_file(filename, content, /datum/computer_file/data/logfile)) - computer.show_error(user, "I/O Error - Check hard drive and free space.") - if(href_list["PRG_renamechannel"]) - . = TOPIC_HANDLED - if(!operator_mode || !channel) - return - var/mob/living/user = usr - var/newname = sanitize(input(user, "Enter new channel name or leave blank to cancel:"), 64) - if(!newname || !channel) - return - channel.add_status_message("Channel renamed from [channel.title] to [newname] by operator.") - channel.title = newname - if(href_list["PRG_deletechannel"]) - . = TOPIC_HANDLED - if(channel && ((channel.operator == src) || netadmin_mode)) - qdel(channel) - channel = null - if(href_list["PRG_setpassword"]) - . = TOPIC_HANDLED - if(!channel || ((channel.operator != src) && !netadmin_mode)) - return - - var/mob/living/user = usr - var/newpassword = sanitize(input(user, "Enter new password for this channel. Leave blank to cancel, enter 'nopassword' to remove password completely:")) - if(!channel || !newpassword || ((channel.operator != src) && !netadmin_mode)) - return - - if(newpassword == "nopassword") - channel.password = "" - else - channel.password = newpassword - -/datum/computer_file/program/chatclient/process_tick() - ..() - var/atom/A = computer.get_physical_host() - if(channel && !(channel.source_z in GetConnectedZlevels(A.z))) - channel.remove_client(src) - channel = null - - if(program_state != PROGRAM_STATE_KILLED) - ui_header = "ntnrc_idle.gif" - if(channel) - // Remember the last message. If there is no message in the channel remember null. - last_message = channel.messages.len ? channel.messages[channel.messages.len - 1] : null - else - last_message = null - return - - if(channel && channel.messages && channel.messages.len) - ui_header = last_message == channel.messages[channel.messages.len - 1] ? "ntnrc_idle.gif" : "ntnrc_new.gif" - else - ui_header = "ntnrc_idle.gif" - -/datum/computer_file/program/chatclient/on_shutdown(forced = FALSE) - if(channel) - channel.remove_client(src) - channel = null - ..(forced) - -/datum/nano_module/program/computer_chatclient - name = "NTNet Relay Chat Client" - -/datum/nano_module/program/computer_chatclient/ui_interact(mob/user, ui_key = "main", datum/nanoui/ui = null, force_open = 1, datum/topic_state/state = GLOB.default_state) - if(!ntnet_global || !ntnet_global.chat_channels) - return - - var/list/data = list() - if(program) - data = program.get_header_data() - - var/datum/computer_file/program/chatclient/C = program - if(!istype(C)) - return - - data["adminmode"] = C.netadmin_mode - if(C.channel) - data["title"] = C.channel.title - var/list/messages[0] - for(var/M in C.channel.messages) - messages.Add(list(list( - "msg" = M - ))) - data["messages"] = messages - var/list/clients[0] - for(var/datum/computer_file/program/chatclient/cl in C.channel.clients) - clients.Add(list(list( - "name" = cl.username - ))) - data["clients"] = clients - C.operator_mode = (C.channel.operator == C) ? TRUE : FALSE - data["is_operator"] = C.operator_mode || C.netadmin_mode - - else // Channel selection screen - var/list/all_channels[0] - var/atom/A = C.computer.get_physical_host() - var/list/connected_zs = GetConnectedZlevels(A.z) - for(var/datum/ntnet_conversation/conv in ntnet_global.chat_channels) - if(conv && conv.title && (conv.source_z in connected_zs)) - all_channels.Add(list(list( - "chan" = conv.title, - "id" = conv.id - ))) - data["all_channels"] = all_channels - - ui = SSnano.try_update_ui(user, src, ui_key, ui, data, force_open) - if (!ui) - ui = new(user, src, ui_key, "ntnet_chat.tmpl", "NTNet Relay Chat Client", 575, 700, state = state) - ui.auto_update_layout = 1 - ui.set_initial_data(data) - ui.open() - ui.set_auto_update(1) diff --git a/code/modules/modular_computers/file_system/programs/generic/nttransfer.dm b/code/modules/modular_computers/file_system/programs/generic/nttransfer.dm deleted file mode 100644 index 8f93ce634b0b3..0000000000000 --- a/code/modules/modular_computers/file_system/programs/generic/nttransfer.dm +++ /dev/null @@ -1,207 +0,0 @@ -var/global/nttransfer_uid = 0 - -/datum/computer_file/program/nttransfer - filename = "nttransfer" - filedesc = "NTNet P2P Transfer Client" - extended_desc = "This program allows for simple file transfer via direct peer to peer connection." - program_icon_state = "comm_logs" - program_key_state = "generic_key" - program_menu_icon = "transferthick-e-w" - size = 7 - requires_ntnet = TRUE - requires_ntnet_feature = NTNET_PEERTOPEER - network_destination = "other device via P2P tunnel" - available_on_ntnet = TRUE - nanomodule_path = /datum/nano_module/program/computer_nttransfer - category = PROG_UTIL - - /// Error message - var/error = "" - /// Optional password to download the file. - var/server_password = "" - /// File which is provided to clients. - var/datum/computer_file/provided_file = null - /// File which is being downloaded - var/datum/computer_file/downloaded_file = null - /// List of connected clients. - var/list/connected_clients = list() - /// Client var, specifies who are we downloading from. - var/datum/computer_file/program/nttransfer/remote - /// Download progress in GQ - var/download_completion = 0 - /// Displayed in the UI, this is the actual transfer speed. - var/actual_netspeed = 0 - /// UID of this program - var/unique_token - /// Whether we show the program list and upload menu - var/upload_menu = FALSE - -/datum/computer_file/program/nttransfer/New() - unique_token = nttransfer_uid - nttransfer_uid++ - ..() - -/datum/computer_file/program/nttransfer/process_tick() - ..() - // Server mode - if(provided_file) - for(var/datum/computer_file/program/nttransfer/C in connected_clients) - // Transfer speed is limited by device which uses slower connectivity. - // We can have multiple clients downloading at same time, but let's assume we use some sort of multicast transfer - // so they can all run on same speed. - C.actual_netspeed = min(C.get_ntnet_speed(), get_ntnet_speed()) - C.download_completion += C.actual_netspeed - if(C.download_completion >= provided_file.size) - C.finish_download() - else if(downloaded_file) // Client mode - if(!remote) - crash_download("Connection to remote server lost") - -/// Returns the current ntnet speed of the computer the program is running on. NTTransfer needs to be able to get the speed from instances on other computers. -/datum/computer_file/program/nttransfer/proc/get_ntnet_speed() - if(computer) - return computer.get_ntnet_speed(computer.get_ntnet_status()) - return 0 - -/datum/computer_file/program/nttransfer/on_shutdown(forced = FALSE) - if(downloaded_file) // Client mode, clean up variables for next use - finalize_download() - - if(provided_file) // Server mode, disconnect all clients - for(var/datum/computer_file/program/nttransfer/P in connected_clients) - P.crash_download("Connection terminated by remote server") - downloaded_file = null - ..(forced) - -/// Finishes download and attempts to store the file on HDD -/datum/computer_file/program/nttransfer/proc/finish_download() - if(!computer || !computer.create_file(downloaded_file)) - error = "I/O Error: Unable to save file. Check your hard drive and try again." - finalize_download() - -/// Crashes the download and displays specific error message -/datum/computer_file/program/nttransfer/proc/crash_download(message) - error = message ? message : "An unknown error has occured during download" - finalize_download() - -/// Cleans up variables for next use -/datum/computer_file/program/nttransfer/proc/finalize_download() - if(remote) - remote.connected_clients.Remove(src) - downloaded_file = null - remote = null - download_completion = 0 - - -/datum/nano_module/program/computer_nttransfer - name = "NTNet P2P Transfer Client" - -/datum/nano_module/program/computer_nttransfer/ui_interact(mob/user, ui_key = "main", datum/nanoui/ui = null, force_open = 1, datum/topic_state/state = GLOB.default_state) - if(!program) - return - var/datum/computer_file/program/nttransfer/PRG = program - if(!istype(PRG)) - return - - var/list/data = program.get_header_data() - - if(PRG.error) - data["error"] = PRG.error - else if(PRG.downloaded_file) - data["downloading"] = TRUE - data["download_size"] = PRG.downloaded_file.size - data["download_progress"] = PRG.download_completion - data["download_netspeed"] = PRG.actual_netspeed - data["download_name"] = "[PRG.downloaded_file.filename].[PRG.downloaded_file.filetype]" - else if (PRG.provided_file) - data["uploading"] = TRUE - data["upload_uid"] = PRG.unique_token - data["upload_clients"] = PRG.connected_clients.len - data["upload_haspassword"] = PRG.server_password ? TRUE : FALSE - data["upload_filename"] = "[PRG.provided_file.filename].[PRG.provided_file.filetype]" - else if (PRG.upload_menu) - var/list/all_files[0] - for(var/datum/computer_file/F in PRG.computer.get_all_files()) - all_files.Add(list(list( - "uid" = F.uid, - "filename" = "[F.filename].[F.filetype]", - "size" = F.size - ))) - data["upload_filelist"] = all_files - else - var/list/all_servers[0] - for(var/datum/computer_file/program/nttransfer/P in ntnet_global.fileservers) - if(!P.provided_file) - continue - all_servers.Add(list(list( - "uid" = P.unique_token, - "filename" = "[P.provided_file.filename].[P.provided_file.filetype]", - "size" = P.provided_file.size, - "haspassword" = P.server_password ? TRUE : FALSE - ))) - data["servers"] = all_servers - - ui = SSnano.try_update_ui(user, src, ui_key, ui, data, force_open) - if (!ui) - ui = new(user, src, ui_key, "ntnet_transfer.tmpl", "NTNet P2P Transfer Client", 575, 700, state = state) - ui.auto_update_layout = 1 - ui.set_initial_data(data) - ui.open() - ui.set_auto_update(1) - -/datum/computer_file/program/nttransfer/Topic(href, href_list) - if(..()) - return TOPIC_HANDLED - if(href_list["PRG_downloadfile"]) - . = TOPIC_HANDLED - for(var/datum/computer_file/program/nttransfer/P in ntnet_global.fileservers) - if("[P.unique_token]" == href_list["PRG_downloadfile"]) - remote = P - break - if(!remote || !remote.provided_file) - return - if(remote.server_password) - var/pass = sanitize(input(usr, "Code 401 Unauthorized. Please enter password:", "Password required")) - if(pass != remote.server_password) - error = "Incorrect Password" - return - downloaded_file = remote.provided_file.clone() - remote.connected_clients.Add(src) - return - if(href_list["PRG_reset"]) - . = TOPIC_HANDLED - error = "" - upload_menu = FALSE - finalize_download() - if(src in ntnet_global.fileservers) - 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 - return - if(href_list["PRG_setpassword"]) - . = TOPIC_HANDLED - var/pass = sanitize(input(usr, "Enter new server password. Leave blank to cancel, input 'none' to disable password.", "Server security", "none")) - if(!pass) - return - if(pass == "none") - server_password = "" - return - server_password = pass - return - if(href_list["PRG_uploadfile"]) - . = TOPIC_HANDLED - for(var/datum/computer_file/F in computer.get_all_files()) - if("[F.uid]" == href_list["PRG_uploadfile"]) - if(F.unsendable) - error = "I/O Error: File locked." - return - provided_file = F - ntnet_global.fileservers.Add(src) - return - error = "I/O Error: Unable to locate file on hard drive." - return - if(href_list["PRG_uploadmenu"]) - upload_menu = TRUE - return TOPIC_HANDLED - return TOPIC_NOACTION diff --git a/code/modules/modular_computers/file_system/programs/generic/records.dm b/code/modules/modular_computers/file_system/programs/generic/records.dm deleted file mode 100644 index 68b9dea438d60..0000000000000 --- a/code/modules/modular_computers/file_system/programs/generic/records.dm +++ /dev/null @@ -1,141 +0,0 @@ -/datum/computer_file/program/records - filename = "crewrecords" - filedesc = "Crew Records" - extended_desc = "This program allows access to the crew's various records." - program_icon_state = "generic" - program_key_state = "generic_key" - size = 14 - requires_ntnet = TRUE - available_on_ntnet = TRUE - nanomodule_path = /datum/nano_module/records - usage_flags = PROGRAM_ALL - category = PROG_OFFICE - -/datum/nano_module/records - name = "Crew Records" - var/datum/computer_file/report/crew_record/active_record - var/message = null - -/datum/nano_module/records/ui_interact(mob/user, ui_key = "main", datum/nanoui/ui = null, force_open = 1, state = GLOB.default_state) - var/list/data = host.initial_data() - var/list/user_access = get_record_access(user) - - data["message"] = message - if(active_record) - send_rsc(user, active_record.photo_front, "front_[active_record.uid].png") - send_rsc(user, active_record.photo_side, "side_[active_record.uid].png") - data["pic_edit"] = check_access(user, access_bridge) || check_access(user, access_security) - data += active_record.generate_nano_data(user_access) - else - var/list/all_records = list() - - for(var/datum/computer_file/report/crew_record/R in GLOB.all_crew_records) - all_records.Add(list(list( - "name" = R.get_name(), - "rank" = R.get_job(), - "milrank" = R.get_rank(), - "id" = R.uid - ))) - data["all_records"] = all_records - data["creation"] = check_access(user, access_bridge) - data["dnasearch"] = check_access(user, access_medical) || check_access(user, access_forensics_lockers) - data["fingersearch"] = check_access(user, access_security) - - ui = SSnano.try_update_ui(user, src, ui_key, ui, data, force_open) - if (!ui) - ui = new(user, src, ui_key, "crew_records.tmpl", name, 700, 540, state = state) - ui.auto_update_layout = 1 - ui.set_initial_data(data) - ui.open() - - -/datum/nano_module/records/proc/get_record_access(var/mob/user) - var/list/user_access = using_access || user.GetAccess() - - var/obj/PC = nano_host() - var/datum/extension/interactive/ntos/os = get_extension(PC, /datum/extension/interactive/ntos) - if(os && os.emagged()) - user_access = user_access.Copy() - user_access |= access_syndicate - - return user_access - -/datum/nano_module/records/proc/edit_field(var/mob/user, var/field_ID) - var/datum/computer_file/report/crew_record/R = active_record - if(!R) - return - var/datum/report_field/F = R.field_from_ID(field_ID) - if(!F) - return - if(!F.verify_access_edit(get_record_access(user))) - to_chat(user, "\The [nano_host()] flashes an \"Access Denied\" warning.") - return - F.ask_value(user) - -/datum/nano_module/records/Topic(href, href_list) - if(..()) - return 1 - if(href_list["clear_active"]) - active_record = null - return 1 - if(href_list["clear_message"]) - message = null - return 1 - if(href_list["set_active"]) - var/ID = text2num(href_list["set_active"]) - for(var/datum/computer_file/report/crew_record/R in GLOB.all_crew_records) - if(R.uid == ID) - active_record = R - break - return 1 - if(href_list["new_record"]) - if(!check_access(usr, access_bridge)) - to_chat(usr, "Access Denied.") - return - active_record = new/datum/computer_file/report/crew_record() - GLOB.all_crew_records.Add(active_record) - return 1 - if(href_list["print_active"]) - if(!active_record) - return - print_text(record_to_html(active_record, get_record_access(usr)), usr) - return 1 - if(href_list["search"]) - var/field_name = href_list["search"] - var/search = sanitize(input("Enter the value for search for.") as null|text) - if(!search) - return - for(var/datum/computer_file/report/crew_record/R in GLOB.all_crew_records) - var/datum/report_field/field = R.field_from_name(field_name) - if(findtext(lowertext(field.get_value()), lowertext(search))) - active_record = R - return 1 - message = "Unable to find record containing '[search]'" - return 1 - - var/datum/computer_file/report/crew_record/R = active_record - if(!istype(R)) - return 1 - if(href_list["edit_photo_front"]) - var/photo = get_photo(usr) - if(photo && active_record) - active_record.photo_front = photo - return 1 - if(href_list["edit_photo_side"]) - var/photo = get_photo(usr) - if(photo && active_record) - active_record.photo_side = photo - return 1 - if(href_list["edit_field"]) - edit_field(usr, text2num(href_list["edit_field"])) - return 1 - -/datum/nano_module/records/proc/get_photo(var/mob/user) - if(istype(user.get_active_hand(), /obj/item/photo)) - var/obj/item/photo/photo = user.get_active_hand() - return photo.img - if(istype(user, /mob/living/silicon)) - var/mob/living/silicon/tempAI = usr - var/obj/item/photo/selection = tempAI.GetPicture() - if (selection) - return selection.img diff --git a/code/modules/modular_computers/file_system/programs/generic/reports.dm b/code/modules/modular_computers/file_system/programs/generic/reports.dm deleted file mode 100644 index 3cfe1bdb410e0..0000000000000 --- a/code/modules/modular_computers/file_system/programs/generic/reports.dm +++ /dev/null @@ -1,198 +0,0 @@ -#define REPORTS_VIEW 1 -#define REPORTS_DOWNLOAD 2 - -/datum/computer_file/program/reports - filename = "repview" - filedesc = "Report Editor" - nanomodule_path = /datum/nano_module/program/reports - extended_desc = "A general paperwork viewing and editing utility." - size = 2 - available_on_ntnet = TRUE - requires_ntnet = FALSE - usage_flags = PROGRAM_ALL - category = PROG_OFFICE - -/datum/nano_module/program/reports - name = "Report Editor" - - /// Whether we are in view-only mode. - var/can_view_only = FALSE - /// A report being viewed/edited. This is a temporary copy. - var/datum/computer_file/report/selected_report - /// The computer file currently open. - var/datum/computer_file/report/saved_report - var/prog_state = REPORTS_VIEW - -/datum/nano_module/program/reports/ui_interact(mob/user, ui_key = "main", datum/nanoui/ui = null, force_open = 1, state = GLOB.default_state) - var/list/data = host.initial_data() - data["prog_state"] = prog_state - switch(prog_state) - if(REPORTS_VIEW) - if(selected_report) - data["report_data"] = selected_report.generate_nano_data(get_access(user)) - data["view_only"] = can_view_only - data["printer"] = program.computer.has_component(PART_PRINTER) - if(REPORTS_DOWNLOAD) - var/list/L = list() - for(var/datum/computer_file/report/report in ntnet_global.fetch_reports(get_access(user))) - var/M = list() - M["name"] = report.display_name() - M["uid"] = report.uid - L += list(M) - data["reports"] = L - - ui = SSnano.try_update_ui(user, src, ui_key, ui, data, force_open) - if (!ui) - ui = new(user, src, ui_key, "reports.tmpl", name, 700, 800, state = state) - ui.auto_update_layout = 1 - ui.set_initial_data(data) - ui.open() - -/datum/nano_module/program/reports/proc/switch_state(new_state) - if(prog_state == new_state) - return - switch(new_state) - if(REPORTS_VIEW) - program.requires_ntnet_feature = null - program.requires_ntnet = FALSE - prog_state = REPORTS_VIEW - if(REPORTS_DOWNLOAD) - close_report() - program.requires_ntnet_feature = NTNET_SOFTWAREDOWNLOAD - program.requires_ntnet = TRUE - prog_state = REPORTS_DOWNLOAD - -/datum/nano_module/program/reports/proc/close_report() - QDEL_NULL(selected_report) - saved_report = null - -/datum/nano_module/program/reports/proc/save_report(mob/user, save_as) - if(!program.computer || !program.computer.has_component(PART_HDD)) - to_chat(user, "Unable to find hard drive.") - return - selected_report.rename_file() - if(!program.computer.create_file(selected_report)) - to_chat(user, "Error storing file. Please check your hard drive.") - return - saved_report = selected_report - selected_report = saved_report.clone() - to_chat(user, "The report has been saved as [saved_report.filename].[saved_report.filetype]") - -/datum/nano_module/program/reports/proc/load_report(mob/user) - if(!program.computer || !program.computer.has_component(PART_HDD)) - to_chat(user, "Unable to find hard drive.") - return - var/choices = list() - for(var/datum/computer_file/report/R in program.computer.get_all_files()) - choices["[R.filename].[R.filetype]"] = R - var/choice = input(user, "Which report would you like to load?", "Loading Report") as null|anything in choices - if(choice in choices) - var/datum/computer_file/report/chosen_report = choices[choice] - var/editing = alert(user, "Would you like to view or edit the report", "Loading Report", "View", "Edit") - if(editing == "View") - if(!chosen_report.verify_access(get_access(user))) - to_chat(user, "You lack access to view this report.") - return - can_view_only = TRUE - else - if(!chosen_report.verify_access_edit(get_access(user))) - to_chat(user, "You lack access to edit this report.") - return - can_view_only = FALSE - saved_report = chosen_report - selected_report = chosen_report.clone() - return - -/datum/nano_module/program/reports/Topic(href, href_list) - if(..()) - return TOPIC_HANDLED - var/mob/user = usr - - if(text2num(href_list["warning"])) //Gives the user a chance to avoid losing unsaved reports. - if(alert(user, "Are you sure you want to leave this page? Unsubmitted data will be lost.",, "Yes.", "No.") == "No.") - return TOPIC_HANDLED //If yes, proceed to the actual action instead. - - if(href_list["load"]) - if(selected_report || saved_report) - close_report() - load_report(user) - return TOPIC_HANDLED - if(href_list["save"]) - . = TOPIC_HANDLED - if(!selected_report) - return - if(!selected_report.verify_access(get_access(user))) - return - var/save_as = text2num(href_list["save_as"]) - save_report(user, save_as) - return - if(href_list["submit"]) - . = TOPIC_HANDLED - if(!selected_report) - return - if(!selected_report.verify_access_edit(get_access(user))) - return - if(selected_report.submit(user)) - to_chat(user, "The [src] has been submitted.") - if(alert(user, "Would you like to save a copy?","Save Report", "Yes.", "No.") == "Yes.") - save_report(user) - return - if(href_list["discard"]) - . = TOPIC_HANDLED - if(!selected_report) - return - close_report() - return - if(href_list["edit"]) - . = TOPIC_HANDLED - if(!selected_report) - return - var/field_ID = text2num(href_list["ID"]) - var/datum/report_field/field = selected_report.field_from_ID(field_ID) - if(!field || !field.verify_access_edit(get_access(user))) - return - field.ask_value(user) //Handles the remaining IO. - return - if(href_list["print"]) - . = TOPIC_HANDLED - if(!selected_report || !selected_report.verify_access(get_access(user))) - return - var/with_fields = text2num(href_list["print_mode"]) - var/text = selected_report.generate_pencode(get_access(user), with_fields) - if(!program.computer.print_paper(text, selected_report.display_name())) - to_chat(user, "Hardware error: Printer was unable to print the file. It may be out of paper.") - return - if(href_list["export"]) - . = TOPIC_HANDLED - if(!selected_report || !selected_report.verify_access(get_access(user))) - return - selected_report.rename_file() - var/datum/computer_file/data/text/file = new - file.filename = selected_report.filename - file.stored_data = selected_report.generate_pencode(get_access(user), no_html = TRUE) //TXT files can't have html; they use pencode only. - if(!program.computer.create_file(file)) - to_chat(user, "Error storing file. Please check your hard drive.") - else - to_chat(user, "The report has been exported as [file.filename].[file.filetype]") - return - - if(href_list["download"]) - switch_state(REPORTS_DOWNLOAD) - return TOPIC_HANDLED - if(href_list["get_report"]) - . = TOPIC_HANDLED - var/uid = text2num(href_list["report"]) - for(var/datum/computer_file/report/report in ntnet_global.fetch_reports(get_access(user))) - if(report.uid == uid) - selected_report = report.clone() - can_view_only = FALSE - switch_state(REPORTS_VIEW) - return - to_chat(user, "Network error: Selected report could not be downloaded. Check network functionality and credentials.") - return - if(href_list["home"]) - switch_state(REPORTS_VIEW) - return TOPIC_HANDLED - -#undef REPORTS_VIEW -#undef REPORTS_DOWNLOAD diff --git a/code/modules/modular_computers/file_system/programs/generic/scanner.dm b/code/modules/modular_computers/file_system/programs/generic/scanner.dm deleted file mode 100644 index 51f93f6c27e85..0000000000000 --- a/code/modules/modular_computers/file_system/programs/generic/scanner.dm +++ /dev/null @@ -1,120 +0,0 @@ -/datum/computer_file/program/scanner - filename = "scndvr" - filedesc = "Scanner" - extended_desc = "This program allows setting up and using an attached scanner module." - program_icon_state = "generic" - program_key_state = "generic_key" - size = 6 - requires_ntnet = FALSE - available_on_ntnet = TRUE - usage_flags = PROGRAM_ALL - nanomodule_path = /datum/nano_module/program/scanner - category = PROG_UTIL - - /// Whether or not the program is synched with the scanner module. - var/using_scanner = FALSE - /// Buffers scan output for saving/viewing. - var/data_buffer = "" - /// The type of file the data will be saved to. - var/scan_file_type = /datum/computer_file/data/text - var/list/metadata_buffer = list() - var/paper_type - -/datum/computer_file/program/scanner/proc/connect_scanner() - if(!computer) - return FALSE - var/obj/item/stock_parts/computer/scanner/scanner = computer.get_component(PART_SCANNER) - if(scanner && istype(src, scanner.driver_type)) - using_scanner = TRUE - scanner.driver = src - return TRUE - return FALSE - -/datum/computer_file/program/scanner/proc/disconnect_scanner() - using_scanner = FALSE - if(computer) - var/obj/item/stock_parts/computer/scanner/scanner = computer.get_component(PART_SCANNER) - if(scanner && (src == scanner.driver)) - scanner.driver = null - data_buffer = null - metadata_buffer.Cut() - return TRUE - -/datum/computer_file/program/scanner/proc/save_scan(name) - if(!data_buffer) - return FALSE - if(!computer.create_data_file(name, data_buffer, scan_file_type, metadata_buffer.Copy())) - return FALSE - return TRUE - -/datum/computer_file/program/scanner/proc/check_scanning() - if(!computer) - return FALSE - var/obj/item/stock_parts/computer/scanner/scanner = computer.get_component(PART_SCANNER) - if(!scanner) - return FALSE - if(!scanner.can_run_scan) - return FALSE - if(!scanner.check_functionality()) - return FALSE - if(!using_scanner) - return FALSE - if(src != scanner.driver) - return FALSE - return TRUE - -/datum/computer_file/program/scanner/Topic(href, href_list) - if(..()) - return TOPIC_HANDLED - - if(href_list["connect_scanner"]) - if(text2num(href_list["connect_scanner"])) - if(!connect_scanner()) - to_chat(usr, "Scanner installation failed.") - else - disconnect_scanner() - return TOPIC_HANDLED - - if(href_list["scan"]) - if(check_scanning()) - metadata_buffer.Cut() - var/obj/item/stock_parts/computer/scanner/scanner = computer.get_component(PART_SCANNER) - scanner.run_scan(usr, src) - return TOPIC_HANDLED - - if(href_list["save"]) - var/name = sanitize(input(usr, "Enter file name:", "Save As") as text|null) - if(!save_scan(name)) - to_chat(usr, "Scan save failed.") - return TOPIC_HANDLED - - if(.) - SSnano.update_uis(NM) - -/datum/nano_module/program/scanner - name = "Scanner" - -/datum/nano_module/program/scanner/ui_interact(mob/user, ui_key = "main", datum/nanoui/ui = null, force_open = 1, datum/topic_state/state = GLOB.default_state) - var/list/data = host.initial_data() - var/datum/computer_file/program/scanner/prog = program - if(!prog.computer) - return - var/obj/item/stock_parts/computer/scanner/scanner = prog.computer.get_component(PART_SCANNER) - if(scanner) - data["scanner_name"] = scanner.name - data["scanner_enabled"] = scanner.enabled - data["can_view_scan"] = scanner.can_view_scan - data["can_save_scan"] = (scanner.can_save_scan && prog.data_buffer) - data["using_scanner"] = prog.using_scanner - data["check_scanning"] = prog.check_scanning() - if(prog.metadata_buffer.len > 0 && prog.paper_type == /obj/item/paper/bodyscan) - data["data_buffer"] = display_medical_data(prog.metadata_buffer.Copy(), user.get_skill_value(SKILL_MEDICAL, TRUE)) - else - data["data_buffer"] = digitalPencode2html(prog.data_buffer) - - ui = SSnano.try_update_ui(user, src, ui_key, ui, data, force_open) - if (!ui) - ui = new(user, src, ui_key, "scanner.tmpl", name, 600, 700, state = state) - ui.auto_update_layout = 1 - ui.set_initial_data(data) - ui.open() \ No newline at end of file diff --git a/code/modules/modular_computers/file_system/programs/generic/supply.dm b/code/modules/modular_computers/file_system/programs/generic/supply.dm deleted file mode 100644 index 159e1be126452..0000000000000 --- a/code/modules/modular_computers/file_system/programs/generic/supply.dm +++ /dev/null @@ -1,400 +0,0 @@ -#define SUPPLY_LIST_ID_CART 1 -#define SUPPLY_LIST_ID_REQUEST 2 -#define SUPPLY_LIST_ID_DONE 3 - -/datum/computer_file/program/supply - filename = "supply" - filedesc = "Supply Management" - nanomodule_path = /datum/nano_module/supply - ui_header = null // Set when enabled by an admin user. - program_icon_state = "supply" - program_key_state = "rd_key" - program_menu_icon = "cart" - extended_desc = "A management tool that allows for ordering of various supplies through the facility's cargo system. Some features may require additional access." - size = 21 - available_on_ntnet = TRUE - requires_ntnet = TRUE - category = PROG_SUPPLY - -/datum/computer_file/program/supply/process_tick() - ..() - var/datum/nano_module/supply/SNM = NM - if(istype(SNM)) - SNM.emagged = computer.emagged() - if(SNM.notifications_enabled) - if(SSsupply.requestlist.len) - ui_header = "supply_new_order.gif" - else if(SSsupply.shoppinglist.len) - ui_header = "supply_awaiting_delivery.gif" - else - ui_header = "supply_idle.gif" - else if(ui_header) - ui_header = null - -/datum/nano_module/supply - name = "Supply Management program" - var/screen = 1 // 1: Ordering menu, 2: Statistics, 3: Shuttle control, 4: Orders menu - var/selected_category - var/list/category_names = list() - var/list/category_contents = list() - var/showing_contents_of_ref = null - var/list/contents_of_order = list() - var/emagged = FALSE // TODO: Implement synchronization with modular computer framework. - var/emagged_memory = FALSE // Keeps track if the program has to regenerate the catagories after an emag. - var/current_security_level - var/notifications_enabled = FALSE - var/admin_access = list(access_cargo, access_mailsorting) - -/datum/nano_module/supply/ui_interact(mob/user, ui_key = "main", datum/nanoui/ui = null, force_open = 1, state = GLOB.default_state) - var/list/data = host.initial_data() - var/is_admin = emagged || check_access(user, admin_access) - var/decl/security_state/security_state = decls_repository.get_decl(GLOB.using_map.security_state) - if(!LAZYLEN(category_names) || !LAZYLEN(category_contents) || current_security_level != security_state.current_security_level || emagged_memory != emagged ) - generate_categories() - current_security_level = security_state.current_security_level - emagged_memory = emagged - - data["is_admin"] = is_admin - if(is_admin) - data["shopping_cart_length"] = SSsupply.shoppinglist.len - data["request_length"] = SSsupply.requestlist.len - data["screen"] = screen - data["credits"] = "[SSsupply.points]" - data["currency"] = GLOB.using_map.supply_currency_name - data["currency_short"] = GLOB.using_map.supply_currency_name_short - switch(screen) - if(1)// Main ordering menu - data["categories"] = category_names - if(selected_category) - data["category"] = selected_category - data["possible_purchases"] = category_contents[selected_category] - if(showing_contents_of_ref) - data["showing_contents_of"] = showing_contents_of_ref - data["contents_of_order"] = contents_of_order - - if(2)// Statistics screen with credit overview - var/list/point_breakdown = list() - for(var/tag in SSsupply.point_source_descriptions) - var/entry = list() - entry["desc"] = SSsupply.point_source_descriptions[tag] - entry["points"] = SSsupply.point_sources[tag] || 0 - point_breakdown += list(entry) //Make a list of lists, don't flatten - data["point_breakdown"] = point_breakdown - data["can_print"] = can_print() - - if(3)// Shuttle monitoring and control - var/datum/shuttle/autodock/ferry/supply/shuttle = SSsupply.shuttle - data["shuttle_name"] = shuttle.name - if(istype(shuttle)) - data["shuttle_location"] = shuttle.at_station() ? GLOB.using_map.name : "Remote location" - else - data["shuttle_location"] = "No Connection" - data["shuttle_status"] = get_shuttle_status() - data["shuttle_can_control"] = shuttle.can_launch() - - - if(4)// Order processing - if(is_admin) // No bother sending all of this if the user can't see it. - var/list/cart[0] - var/list/requests[0] - var/list/done[0] - for(var/datum/supply_order/SO in SSsupply.shoppinglist) - cart.Add(order_to_nanoui(SO, SUPPLY_LIST_ID_CART)) - for(var/datum/supply_order/SO in SSsupply.requestlist) - requests.Add(order_to_nanoui(SO, SUPPLY_LIST_ID_REQUEST)) - for(var/datum/supply_order/SO in SSsupply.donelist) - done.Add(order_to_nanoui(SO, SUPPLY_LIST_ID_DONE)) - data["cart"] = cart - data["requests"] = requests - data["done"] = done - data["can_print"] = can_print() - data["is_NTOS"] = istype(nano_host(), /obj/item/modular_computer) // Can we even use notifications? - data["notifications_enabled"] = notifications_enabled - - ui = SSnano.try_update_ui(user, src, ui_key, ui, data, force_open) - if (!ui) - ui = new(user, src, ui_key, "supply.tmpl", name, 1050, 800, state = state) - ui.set_auto_update(1) - ui.set_initial_data(data) - ui.open() - -// Supply the order ID and where to look. This is just to reduce copypaste code. -/datum/nano_module/supply/proc/find_order_by_id(var/order_id, var/list/find_in) - for(var/datum/supply_order/SO in find_in) - if(SO.ordernum == order_id) - return SO - -/datum/nano_module/supply/Topic(href, href_list) - var/mob/user = usr - if(..()) - return 1 - - if(href_list["select_category"]) - clear_order_contents() - selected_category = href_list["select_category"] - return 1 - - if(href_list["set_screen"]) - clear_order_contents() - screen = text2num(href_list["set_screen"]) - return 1 - - if(href_list["show_contents"]) - generate_order_contents(href_list["show_contents"]) - - if(href_list["hide_contents"]) - clear_order_contents() - - if(href_list["order"]) - clear_order_contents() - var/decl/hierarchy/supply_pack/P = locate(href_list["order"]) in SSsupply.master_supply_list - if(!istype(P)) - return 1 - - if(P.hidden && !emagged) - return 1 - - var/reason = sanitize(input(user,"Reason:","Why do you require this item?","") as null|text,,0) - if(!reason) - return 1 - - var/idname = "*None Provided*" - var/idrank = "*None Provided*" - if(ishuman(user)) - var/mob/living/carbon/human/H = user - idname = H.get_authentification_name() - idrank = H.get_assignment() - else if(issilicon(user)) - idname = user.real_name - - SSsupply.ordernum++ - - var/datum/supply_order/O = new /datum/supply_order() - O.ordernum = SSsupply.ordernum - O.object = P - O.orderedby = idname - O.reason = reason - O.orderedrank = idrank - O.comment = "#[O.ordernum]" - SSsupply.requestlist += O - - if(can_print() && alert(user, "Would you like to print a confirmation receipt?", "Print receipt?", "Yes", "No") == "Yes") - print_order(O, user) - return 1 - - if(href_list["print_summary"]) - if(!can_print()) - return - print_summary(user) - - // Items requiring cargo access go below this entry. Other items go above. - if(!check_access(access_cargo)) - return 1 - - if(href_list["launch_shuttle"]) - var/datum/shuttle/autodock/ferry/supply/shuttle = SSsupply.shuttle - if(!shuttle) - to_chat(user, "Error connecting to the shuttle.") - return - if(shuttle.at_station()) - if (shuttle.forbidden_atoms_check()) - to_chat(usr, "For safety reasons the automated supply shuttle cannot transport live organisms, classified nuclear weaponry or homing beacons.") - else - shuttle.launch(user) - else - shuttle.launch(user) - var/datum/radio_frequency/frequency = radio_controller.return_frequency(1435) - if(!frequency) - return - - var/datum/signal/status_signal = new - status_signal.source = src - status_signal.transmission_method = 1 - status_signal.data["command"] = "supply" - frequency.post_signal(src, status_signal) - return 1 - - if(href_list["approve_order"]) - var/id = text2num(href_list["approve_order"]) - var/datum/supply_order/SO = find_order_by_id(id, SSsupply.requestlist) - if(SO) - if(SO.object.cost >= SSsupply.points) - to_chat(usr, "Not enough points to purchase \the [SO.object.name]!") - else - SSsupply.requestlist -= SO - SSsupply.shoppinglist += SO - SSsupply.points -= SO.object.cost - - else - to_chat(user, "Could not find order number [id] to approve.") - - return 1 - - if(href_list["deny_order"]) - var/id = text2num(href_list["deny_order"]) - var/datum/supply_order/SO = find_order_by_id(id, SSsupply.requestlist) - if(SO) - SSsupply.requestlist -= SO - else - to_chat(user, "Could not find order number [id] to deny.") - - return 1 - - if(href_list["cancel_order"]) - var/id = text2num(href_list["cancel_order"]) - var/datum/supply_order/SO = find_order_by_id(id, SSsupply.shoppinglist) - if(SO) - SSsupply.shoppinglist -= SO - SSsupply.points += SO.object.cost - else - to_chat(user, "Could not find order number [id] to cancel.") - - return 1 - - if(href_list["delete_order"]) - var/id = text2num(href_list["delete_order"]) - var/datum/supply_order/SO = find_order_by_id(id, SSsupply.donelist) - if(SO) - SSsupply.donelist -= SO - else - to_chat(user, "Could not find order number [id] to delete.") - - return 1 - - if(href_list["print_receipt"]) - if(!can_print()) - to_chat(user, "No printer connected to print receipts.") - return 1 - - var/id = text2num(href_list["print_receipt"]) - var/list_id = text2num(href_list["list_id"]) - var/list/list_to_search - switch(list_id) - if(SUPPLY_LIST_ID_CART) - list_to_search = SSsupply.shoppinglist - if(SUPPLY_LIST_ID_REQUEST) - list_to_search = SSsupply.requestlist - if(SUPPLY_LIST_ID_DONE) - list_to_search = SSsupply.donelist - else - to_chat(user, "Invalid list ID for order number [id]. Receipt not printed.") - return 1 - - var/datum/supply_order/SO = find_order_by_id(id, list_to_search) - if(SO) - print_order(SO, user) - else - to_chat(user, "Could not find order number [id] to print receipt.") - - return 1 - - if(href_list["toggle_notifications"]) - notifications_enabled = !notifications_enabled - return 1 - -/datum/nano_module/supply/proc/generate_categories() - category_names.Cut() - category_contents.Cut() - var/decl/hierarchy/supply_pack/root = decls_repository.get_decl(/decl/hierarchy/supply_pack) - for(var/decl/hierarchy/supply_pack/sp in root.children) - if(!sp.is_category()) - continue // No children - category_names.Add(sp.name) - var/list/category[0] - for(var/decl/hierarchy/supply_pack/spc in sp.get_descendents()) - if((spc.hidden || spc.contraband || !spc.sec_available()) && !emagged) - continue - category.Add(list(list( - "name" = spc.name, - "cost" = spc.cost, - "ref" = "\ref[spc]" - ))) - category_contents[sp.name] = category - -/datum/nano_module/supply/proc/generate_order_contents(var/order_ref) - var/decl/hierarchy/supply_pack/sp = locate(order_ref) in SSsupply.master_supply_list - if(!istype(sp)) - return FALSE - contents_of_order.Cut() - showing_contents_of_ref = order_ref - for(var/item_path in sp.contains) // Thanks to Lohikar for helping me with type paths - CarlenWhite - var/obj/item/stack/OB = item_path // Not always a stack, but will always have a name we can fetch. - var/name = initial(OB.name) - var/amount = sp.contains[item_path] || 1 // If it's just one item (has no number associated), fallback to 1. - if(ispath(item_path, /obj/item/stack)) // And if it is a stack, consider the amount - amount *= initial(OB.amount) - - - contents_of_order.Add(list(list( - "name" = name, - "amount" = amount - ))) - - if(sp.contains.len == 0) // Handles the case where sp.contains is empty, e.g. for livecargo - contents_of_order.Add(list(list( - "name" = sp.containername, - "amount" = 1 - ))) - - return TRUE - - -/datum/nano_module/supply/proc/clear_order_contents() - contents_of_order.Cut() - showing_contents_of_ref = null - -/datum/nano_module/supply/proc/get_shuttle_status() - var/datum/shuttle/autodock/ferry/supply/shuttle = SSsupply.shuttle - if(!istype(shuttle)) - return "No Connection" - - if(shuttle.has_arrive_time()) - return "In transit ([shuttle.eta_seconds()] s)" - - if (shuttle.can_launch()) - return "Docked" - return "Docking/Undocking" - -/datum/nano_module/supply/proc/order_to_nanoui(var/datum/supply_order/SO, var/list_id) - return list(list( - "id" = SO.ordernum, - "object" = SO.object.name, - "orderer" = SO.orderedby, - "cost" = SO.object.cost, - "reason" = SO.reason, - "list_id" = list_id - )) - -/datum/nano_module/supply/proc/can_print() - var/datum/extension/interactive/ntos/os = get_extension(nano_host(), /datum/extension/interactive/ntos) - if(os) - return os.has_component(PART_PRINTER) - return 0 - -/datum/nano_module/supply/proc/print_order(var/datum/supply_order/O, var/mob/user) - if(!O) - return - - var/t = "" - t += "

              [GLOB.using_map.station_name] Supply Requisition Reciept


              " - t += "INDEX: #[O.ordernum]
              " - t += "REQUESTED BY: [O.orderedby]
              " - t += "RANK: [O.orderedrank]
              " - t += "REASON: [O.reason]
              " - t += "SUPPLY CRATE TYPE: [O.object.name]
              " - t += "ACCESS RESTRICTION: [get_access_desc(O.object.access)]
              " - t += "CONTENTS:
              " - t += O.object.manifest - t += "
              " - print_text(t, user) - -/datum/nano_module/supply/proc/print_summary(var/mob/user) - var/t = "" - t += "

              [GLOB.using_map.station_name]
              [station_date]
              Export overview

              " - for(var/source in SSsupply.point_source_descriptions) - t += "[SSsupply.point_source_descriptions[source]]: [SSsupply.point_sources[source] || 0]
              " - print_text(t, user) - -#undef SUPPLY_LIST_ID_CART -#undef SUPPLY_LIST_ID_REQUEST -#undef SUPPLY_LIST_ID_DONE \ No newline at end of file diff --git a/code/modules/modular_computers/file_system/programs/generic/wordprocessor.dm b/code/modules/modular_computers/file_system/programs/generic/wordprocessor.dm deleted file mode 100644 index 18bc8bba05fbd..0000000000000 --- a/code/modules/modular_computers/file_system/programs/generic/wordprocessor.dm +++ /dev/null @@ -1,181 +0,0 @@ -/datum/computer_file/program/wordprocessor - filename = "wordprocessor" - filedesc = "NanoWord" - extended_desc = "This program allows the editing and preview of text documents." - program_icon_state = "word" - program_key_state = "atmos_key" - size = 4 - requires_ntnet = FALSE - available_on_ntnet = TRUE - nanomodule_path = /datum/nano_module/program/computer_wordprocessor - var/browsing = FALSE - var/open_file - var/loaded_data - var/error - var/is_edited - usage_flags = PROGRAM_ALL - category = PROG_OFFICE - -/datum/computer_file/program/wordprocessor/proc/open_file(filename) - var/datum/computer_file/data/F = computer.get_file(filename) - if(istype(F)) - open_file = F.filename - loaded_data = F.stored_data - is_edited = FALSE - return TRUE - return FALSE - -/datum/computer_file/program/wordprocessor/proc/create_file(filename, data = "") - . = computer.save_data_file(filename, data, /datum/computer_file/data/text) - if(.) - is_edited = FALSE - -/datum/computer_file/program/wordprocessor/proc/save_file(filename) - . = computer.save_data_file(filename, loaded_data, /datum/computer_file/data/text) - if(.) - is_edited = FALSE - -/datum/computer_file/program/wordprocessor/Topic(href, href_list) - if(..()) - return TOPIC_HANDLED - - if(href_list["PRG_txtrpeview"]) - show_browser(usr,"[open_file][digitalPencode2html(loaded_data)]", "window=[open_file]") - return TOPIC_HANDLED - - if(href_list["PRG_taghelp"]) - var/datum/codex_entry/entry = SScodex.get_codex_entry("pen") - if(entry) - SScodex.present_codex_entry(usr, entry) - return TOPIC_HANDLED - - if(href_list["PRG_closebrowser"]) - browsing = FALSE - return TOPIC_HANDLED - - if(href_list["PRG_backtomenu"]) - error = null - return TOPIC_HANDLED - - if(href_list["PRG_loadmenu"]) - browsing = TRUE - return TOPIC_HANDLED - - if(href_list["PRG_openfile"]) - . = TOPIC_HANDLED - if(is_edited) - if(alert("Would you like to save your changes first?",,"Yes","No") == "Yes") - if(!save_file(open_file)) - error = "I/O error: Unable to save file '[open_file]'." - browsing = FALSE - return - browsing = FALSE - if(!open_file(href_list["PRG_openfile"])) - error = "I/O error: Unable to open file '[href_list["PRG_openfile"]]'." - return - - if(href_list["PRG_newfile"]) - . = TOPIC_HANDLED - if(is_edited) - if(alert("Would you like to save your changes first?",,"Yes","No") == "Yes") - if(!save_file(open_file)) - error = "I/O error: Unable to save file '[open_file]'." - return - var/newname = sanitize(input(usr, "Enter file name:", "New File") as text|null) - if(!newname) - return - var/datum/computer_file/data/F = create_file(newname) - if(!istype(F)) - error = "I/O error: Unable to create file '[newname]'." - return - open_file = F.filename - loaded_data = "" - return - - if(href_list["PRG_saveasfile"]) - . = TOPIC_HANDLED - var/newname = sanitize(input(usr, "Enter file name:", "Save As") as text|null) - if(!newname) - return - var/datum/computer_file/data/F = create_file(newname, loaded_data) - if(!istype(F)) - error = "I/O error: Unable to create file '[newname]'." - return - open_file = F.filename - return - - if(href_list["PRG_savefile"]) - . = TOPIC_HANDLED - if(!open_file) - open_file = sanitize(input(usr, "Enter file name:", "Save As") as text|null) - if(!open_file) - return - if(!save_file(open_file)) - error = "I/O error: Unable to save file '[open_file]'." - return - - if(href_list["PRG_editfile"]) - var/oldtext = html_decode(loaded_data) - oldtext = replacetext_char(oldtext, "\[br\]", "\n") - - var/newtext = sanitize(replacetext_char(input(usr, "Editing file '[open_file]'. You may use most tags used in paper formatting:", "Text Editor", oldtext) as message|null, "\n", "\[br\]"), MAX_TEXTFILE_LENGTH) - if(!newtext) - return - loaded_data = newtext - is_edited = TRUE - return TOPIC_HANDLED - - if(href_list["PRG_printfile"]) - . = TOPIC_HANDLED - if(!computer.print_paper(digitalPencode2html(loaded_data))) - error = "Hardware error: Printer missing or out of paper." - return - -/datum/nano_module/program/computer_wordprocessor - name = "Word Processor" - -/datum/nano_module/program/computer_wordprocessor/ui_interact(mob/user, ui_key = "main", datum/nanoui/ui = null, force_open = 1, datum/topic_state/state = GLOB.default_state) - var/list/data = host.initial_data() - var/datum/computer_file/program/wordprocessor/PRG - PRG = program - - if(PRG.error) - data["error"] = PRG.error - if(PRG.browsing) - data["browsing"] = PRG.browsing - if(!PRG.computer || !PRG.computer.has_component(PART_HDD)) - data["error"] = "I/O ERROR: Unable to access hard drive." - else - var/list/files[0] - for(var/datum/computer_file/F in PRG.computer.get_all_files()) - if(F.filetype == "TXT") - files.Add(list(list( - "name" = F.filename, - "size" = F.size - ))) - data["files"] = files - - var/obj/item/stock_parts/computer/hard_drive/portable/RHDD = PRG.computer.get_component(PART_DRIVE) - if(RHDD) - data["usbconnected"] = TRUE - var/list/usbfiles[0] - for(var/datum/computer_file/F in PRG.computer.get_all_files(disk = RHDD)) - if(F.filetype == "TXT") - usbfiles.Add(list(list( - "name" = F.filename, - "size" = F.size, - ))) - data["usbfiles"] = usbfiles - else if(PRG.open_file) - data["filedata"] = digitalPencode2html(PRG.loaded_data) - data["filename"] = PRG.is_edited ? "[PRG.open_file]*" : PRG.open_file - else - data["filedata"] = digitalPencode2html(PRG.loaded_data) - data["filename"] = "UNNAMED" - - ui = SSnano.try_update_ui(user, src, ui_key, ui, data, force_open) - if (!ui) - ui = new(user, src, ui_key, "word_processor.tmpl", "Word Processor", 575, 700, state = state) - ui.auto_update_layout = 1 - ui.set_initial_data(data) - ui.open() diff --git a/code/modules/modular_computers/file_system/programs/medical/suit_sensors.dm b/code/modules/modular_computers/file_system/programs/medical/suit_sensors.dm deleted file mode 100644 index 6b131032a7556..0000000000000 --- a/code/modules/modular_computers/file_system/programs/medical/suit_sensors.dm +++ /dev/null @@ -1,71 +0,0 @@ -/datum/computer_file/program/suit_sensors - filename = "sensormonitor" - filedesc = "Suit Sensors Monitoring" - nanomodule_path = /datum/nano_module/crew_monitor - ui_header = "crew_green.gif" - program_icon_state = "crew" - program_key_state = "med_key" - program_menu_icon = "heart" - extended_desc = "This program connects to life signs monitoring system to provide basic information on crew health." - required_access = access_medical - requires_ntnet = TRUE - network_destination = "crew lifesigns monitoring system" - size = 11 - category = PROG_MONITOR - var/has_alert = FALSE - -/datum/computer_file/program/suit_sensors/process_tick() - ..() - - var/datum/nano_module/crew_monitor/NMC = NM - if(istype(NMC) && (NMC.has_alerts() != has_alert)) - if(!has_alert) - program_icon_state = "crew-red" - ui_header = "crew_red.gif" - else - program_icon_state = "crew" - ui_header = "crew_green.gif" - update_computer_icon() - has_alert = !has_alert - - return 1 - -/datum/nano_module/crew_monitor - name = "Crew monitor" - -/datum/nano_module/crew_monitor/proc/has_alerts() - for(var/z_level in GLOB.using_map.map_levels) - if (crew_repository.has_health_alert(z_level)) - return TRUE - return FALSE - -/datum/nano_module/crew_monitor/Topic(href, href_list) - if(..()) return 1 - - if(href_list["track"]) - if(isAI(usr)) - var/mob/living/silicon/ai/AI = usr - var/mob/living/carbon/human/H = locate(href_list["track"]) in SSmobs.mob_list - if(hassensorlevel(H, SUIT_SENSOR_TRACKING)) - AI.ai_actual_track(H) - return 1 - -/datum/nano_module/crew_monitor/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1, var/datum/topic_state/state = GLOB.default_state) - var/list/data = host.initial_data() - - data["isAI"] = isAI(user) - var/Z = get_host_z() - data["crewmembers"] = crew_repository.health_data(Z) - - ui = SSnano.try_update_ui(user, src, ui_key, ui, data, force_open) - if(!ui) - ui = new(user, src, ui_key, "crew_monitor.tmpl", "Crew Monitoring Computer", 1050, 800, state = state) - - // adding a template with the key "mapContent" enables the map ui functionality - ui.add_template("mapContent", "crew_monitor_map_content.tmpl") - // adding a template with the key "mapHeader" replaces the map header content - ui.add_template("mapHeader", "crew_monitor_map_header.tmpl") - - ui.set_initial_data(data) - ui.open() - ui.set_auto_update(1) diff --git a/code/modules/modular_computers/file_system/programs/research/ai_restorer.dm b/code/modules/modular_computers/file_system/programs/research/ai_restorer.dm deleted file mode 100644 index 482adcfdc8b57..0000000000000 --- a/code/modules/modular_computers/file_system/programs/research/ai_restorer.dm +++ /dev/null @@ -1,131 +0,0 @@ -/datum/computer_file/program/aidiag - filename = "aidiag" - filedesc = "AI Maintenance Utility" - program_icon_state = "generic" - program_key_state = "mining_key" - program_menu_icon = "person" - extended_desc = "This program is capable of reconstructing damaged AI systems. It can also be used to upload basic laws to the AI. Requires direct AI connection via inteliCard slot." - size = 12 - requires_ntnet = FALSE - required_access = access_bridge - requires_access_to_run = FALSE - available_on_ntnet = TRUE - nanomodule_path = /datum/nano_module/program/computer_aidiag - var/restoring = 0 - -/datum/computer_file/program/aidiag/proc/get_ai() - var/obj/item/stock_parts/computer/ai_slot/ai_slot = computer.get_component(PART_AI) - - if(ai_slot && ai_slot.check_functionality() && ai_slot.enabled && ai_slot.stored_card) - return ai_slot.stored_card.carded_ai - -/datum/computer_file/program/aidiag/Topic(href, href_list) - if(..()) - return 1 - - if(!usr.skill_check(SKILL_COMPUTER, SKILL_ADEPT)) - return 1 - - var/mob/living/silicon/ai/A = get_ai() - if(!A) - return 0 - if(href_list["PRG_beginReconstruction"]) - if((A.hardware_integrity() < 100) || (A.backup_capacitor() < 100)) - restoring = 1 - return 1 - - // Following actions can only be used by non-silicon users, as they involve manipulation of laws. - if(issilicon(usr)) - return 0 - if(href_list["PRG_purgeAiLaws"]) - A.laws.clear_zeroth_laws() - A.laws.clear_ion_laws() - A.laws.clear_inherent_laws() - A.laws.clear_supplied_laws() - to_chat(A, "All laws purged.") - return 1 - if(href_list["PRG_resetLaws"]) - A.laws.clear_ion_laws() - A.laws.clear_supplied_laws() - to_chat(A, "Non-core laws reset.") - return 1 - if(href_list["PRG_uploadDefault"]) - A.laws = new GLOB.using_map.default_law_type - to_chat(A, "All laws purged. Default lawset uploaded.") - return 1 - if(href_list["PRG_addCustomSuppliedLaw"]) - var/law_to_add = sanitize(input("Please enter a new law for the AI.", "Custom Law Entry")) - var/sector = input("Please enter the priority for your new law. Can only write to law sectors 15 and above.", "Law Priority (15+)") as num - sector = clamp(sector, MIN_SUPPLIED_LAW_NUMBER, MAX_SUPPLIED_LAW_NUMBER) - A.add_supplied_law(sector, law_to_add) - to_chat(A, "Custom law uploaded to sector [sector]: [law_to_add].") - return 1 - - -/datum/computer_file/program/aidiag/process_tick() - var/mob/living/silicon/ai/A = get_ai() - if(!A || !restoring) - restoring = 0 // If the AI was removed, stop the restoration sequence. - return - A.adjustFireLoss(-4) - A.adjustBruteLoss(-4) - A.adjustOxyLoss(-4) - A.updatehealth() - // If the AI is dead, revive it. - if (A.health >= -100 && A.stat == DEAD) - A.set_stat(CONSCIOUS) - A.lying = 0 - A.switch_from_dead_to_living_mob_list() - A.add_ai_verbs() - A.update_icon() - var/obj/item/aicard/AC = A.loc - if(AC) - AC.update_icon() - // Finished restoring - if((A.hardware_integrity() == 100) && (A.backup_capacitor() == 100)) - restoring = 0 - -/datum/nano_module/program/computer_aidiag - name = "AI Maintenance Utility" - -/datum/nano_module/program/computer_aidiag/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1, var/datum/topic_state/state = GLOB.default_state) - var/list/data = host.initial_data() - - data += "skill_fail" - if(!user.skill_check(SKILL_COMPUTER, SKILL_ADEPT)) - var/datum/extension/fake_data/fake_data = get_or_create_extension(src, /datum/extension/fake_data, 25) - data["skill_fail"] = fake_data.update_and_return_data() - data["terminal"] = !!program - - var/mob/living/silicon/ai/A - // A shortcut for getting the AI stored inside the computer. The program already does necessary checks. - if(program && istype(program, /datum/computer_file/program/aidiag)) - var/datum/computer_file/program/aidiag/AD = program - A = AD.get_ai() - - if(!A) - data["error"] = "No AI located" - else - data["ai_name"] = A.name - data["ai_integrity"] = A.hardware_integrity() - data["ai_capacitor"] = A.backup_capacitor() - data["ai_isdamaged"] = (A.hardware_integrity() < 100) || (A.backup_capacitor() < 100) - data["ai_isdead"] = (A.stat == DEAD) - - var/list/all_laws[0] - for(var/datum/ai_law/L in A.laws.all_laws()) - all_laws.Add(list(list( - "index" = L.index, - "text" = L.law - ))) - - data["ai_laws"] = all_laws - - ui = SSnano.try_update_ui(user, src, ui_key, ui, data, force_open) - if (!ui) - ui = new(user, src, ui_key, "aidiag.tmpl", "AI Maintenance Utility", 600, 400, state = state) - if(host.update_layout()) - ui.auto_update_layout = 1 - ui.set_initial_data(data) - ui.open() - ui.set_auto_update(1) \ No newline at end of file diff --git a/code/modules/modular_computers/file_system/programs/research/email_administration.dm b/code/modules/modular_computers/file_system/programs/research/email_administration.dm deleted file mode 100644 index 4ea24c83aa1cb..0000000000000 --- a/code/modules/modular_computers/file_system/programs/research/email_administration.dm +++ /dev/null @@ -1,163 +0,0 @@ -/datum/computer_file/program/email_administration - filename = "emailadmin" - filedesc = "Email Administration Utility" - extended_desc = "This program may be used to administrate NTNet's emailing service." - program_icon_state = "comm_monitor" - program_key_state = "generic_key" - program_menu_icon = "mail-open" - size = 12 - requires_ntnet = TRUE - available_on_ntnet = TRUE - nanomodule_path = /datum/nano_module/program/email_administration - required_access = access_network_admin - category = PROG_ADMIN - -/datum/nano_module/program/email_administration - name = "Email Administration" - available_to_ai = TRUE - var/datum/computer_file/data/email_account/current_account = null - var/datum/computer_file/data/email_message/current_message = null - var/error = "" - -/datum/nano_module/program/email_administration/proc/get_ntos() - var/datum/extension/interactive/ntos/os = get_extension(nano_host(), /datum/extension/interactive/ntos) - if(!istype(os)) - error = "Error accessing system. Are you using a functional and NTOSv2-compliant device?" - return - return os - -/datum/nano_module/program/email_administration/ui_interact(mob/user, ui_key = "main", datum/nanoui/ui = null, force_open = 1, datum/topic_state/state = GLOB.default_state) - var/list/data = host.initial_data() - - data += "skill_fail" - if(!user.skill_check(SKILL_COMPUTER, SKILL_BASIC)) - var/datum/extension/fake_data/fake_data = get_or_create_extension(src, /datum/extension/fake_data, 15) - data["skill_fail"] = fake_data.update_and_return_data() - data["terminal"] = !!program - - if(error) - data["error"] = error - else if(istype(current_message)) - data["msg_title"] = current_message.title - data["msg_body"] = digitalPencode2html(current_message.stored_data) - data["msg_timestamp"] = current_message.timestamp - data["msg_source"] = current_message.source - else if(istype(current_account)) - data["current_account"] = current_account.login - data["cur_suspended"] = current_account.suspended - var/list/all_messages = list() - for(var/datum/computer_file/data/email_message/message in (current_account.inbox | current_account.spam | current_account.deleted)) - all_messages.Add(list(list( - "title" = message.title, - "source" = message.source, - "timestamp" = message.timestamp, - "uid" = message.uid - ))) - data["messages"] = all_messages - data["messagecount"] = all_messages.len - else - var/list/all_accounts = list() - for(var/datum/computer_file/data/email_account/account in ntnet_global.email_accounts) - if(!account.can_login) - continue - all_accounts.Add(list(list( - "login" = account.login, - "uid" = account.uid - ))) - data["accounts"] = all_accounts - data["accountcount"] = all_accounts.len - - ui = SSnano.try_update_ui(user, src, ui_key, ui, data, force_open) - if (!ui) - ui = new(user, src, ui_key, "email_administration.tmpl", "Email Administration Utility", 600, 450, state = state) - if(host.update_layout()) - ui.auto_update_layout = 1 - ui.set_auto_update(1) - ui.set_initial_data(data) - ui.open() - - -/datum/nano_module/program/email_administration/Topic(href, href_list) - if(..()) - return TOPIC_HANDLED - - var/mob/user = usr - if(!istype(user)) - return TOPIC_HANDLED - - if(!user.skill_check(SKILL_COMPUTER, SKILL_BASIC)) - return TOPIC_HANDLED - - var/datum/extension/interactive/ntos/os = get_ntos() - if(!os) - return TOPIC_HANDLED - - // High security - can only be operated when the user has an ID with access on them. - var/obj/item/card/id/I = user.GetIdCard() - if(!istype(I) || !(access_network_admin in I.access)) - return TOPIC_HANDLED - - if(href_list["back"]) - if(error) - error = "" - else if(current_message) - current_message = null - else - current_account = null - return TOPIC_HANDLED - - if(href_list["ban"]) - if(!current_account) - return TOPIC_HANDLED - - current_account.suspended = !current_account.suspended - os.add_log("EMAIL LOG: SA-EDIT Account [current_account.login] has been [current_account.suspended ? "" : "un" ]suspended by SA [I.registered_name] ([I.assignment]).") - error = "Account [current_account.login] has been [current_account.suspended ? "" : "un" ]suspended." - return TOPIC_HANDLED - - if(href_list["changepass"]) - if(!current_account) - return TOPIC_HANDLED - - var/newpass = sanitize(input(user,"Enter new password for account [current_account.login]", "Password"), 100) - if(!newpass) - return TOPIC_HANDLED - current_account.password = newpass - os.add_log("EMAIL LOG: SA-EDIT Password for account [current_account.login] has been changed by SA [I.registered_name] ([I.assignment]).") - return TOPIC_HANDLED - - if(href_list["viewmail"]) - if(!current_account) - return TOPIC_HANDLED - - for(var/datum/computer_file/data/email_message/received_message in (current_account.inbox | current_account.spam | current_account.deleted)) - if(received_message.uid == text2num(href_list["viewmail"])) - current_message = received_message - break - return TOPIC_HANDLED - - if(href_list["viewaccount"]) - for(var/datum/computer_file/data/email_account/email_account in ntnet_global.email_accounts) - if(email_account.uid == text2num(href_list["viewaccount"])) - current_account = email_account - break - return TOPIC_HANDLED - - if(href_list["newaccount"]) - var/newdomain = sanitize(input(user,"Pick domain:", "Domain name") as null|anything in GLOB.using_map.usable_email_tlds) - if(!newdomain) - return TOPIC_HANDLED - var/newlogin = sanitize(input(user,"Pick account name (@[newdomain]):", "Account name"), 100) - if(!newlogin) - return TOPIC_HANDLED - - var/complete_login = "[newlogin]@[newdomain]" - if(ntnet_global.find_email_by_name(complete_login)) - error = "Error creating account: An account with same address already exists." - return TOPIC_HANDLED - - var/datum/computer_file/data/email_account/new_account = new/datum/computer_file/data/email_account() - new_account.login = complete_login - new_account.password = GenerateKey() - error = "Email [new_account.login] has been created, with generated password [new_account.password]" - return TOPIC_HANDLED diff --git a/code/modules/modular_computers/file_system/programs/research/ntmonitor.dm b/code/modules/modular_computers/file_system/programs/research/ntmonitor.dm deleted file mode 100644 index d7773552cb88f..0000000000000 --- a/code/modules/modular_computers/file_system/programs/research/ntmonitor.dm +++ /dev/null @@ -1,114 +0,0 @@ -/datum/computer_file/program/ntnetmonitor - filename = "ntmonitor" - filedesc = "NTNet Diagnostics and Monitoring" - program_icon_state = "comm_monitor" - program_key_state = "generic_key" - program_menu_icon = "wrench" - extended_desc = "This program monitors the local NTNet network, provides access to logging systems, and allows for configuration changes" - size = 12 - requires_ntnet = TRUE - required_access = access_network_admin - network_destination = "NTNet Statistics & Configuration" // This triggers logging when the program is opened and closed - available_on_ntnet = TRUE - nanomodule_path = /datum/nano_module/program/computer_ntnetmonitor - category = PROG_ADMIN - -/datum/nano_module/program/computer_ntnetmonitor - name = "NTNet Diagnostics and Monitoring" - available_to_ai = TRUE - -/datum/nano_module/program/computer_ntnetmonitor/ui_interact(mob/user, ui_key = "main", datum/nanoui/ui = null, force_open = 1, datum/topic_state/state = GLOB.default_state) - if(!ntnet_global) - return - var/list/data = host.initial_data() - - data += "skill_fail" - if(!user.skill_check(SKILL_COMPUTER, SKILL_BASIC)) - var/datum/extension/fake_data/fake_data = get_or_create_extension(src, /datum/extension/fake_data, 20) - data["skill_fail"] = fake_data.update_and_return_data() - data["terminal"] = !!program - - 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["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["ntnetlogs"] = ntnet_global.logs - data["ntnetmaxlogs"] = ntnet_global.setting_maxlogcount - - data["banned_nids"] = list(ntnet_global.banned_nids) - - ui = SSnano.try_update_ui(user, src, ui_key, ui, data, force_open) - if (!ui) - ui = new(user, src, ui_key, "ntnet_monitor.tmpl", "NTNet Diagnostics and Monitoring Tool", 575, 700, state = state) - if(host.update_layout()) - ui.auto_update_layout = 1 - ui.set_initial_data(data) - ui.open() - ui.set_auto_update(1) - -/datum/nano_module/program/computer_ntnetmonitor/Topic(href, href_list, state) - var/mob/user = usr - if(..()) - return TOPIC_HANDLED - - if(!user.skill_check(SKILL_COMPUTER, SKILL_BASIC)) - return TOPIC_HANDLED - - if(href_list["resetIDS"]) - if(ntnet_global) - ntnet_global.resetIDS() - return TOPIC_HANDLED - if(href_list["toggleIDS"]) - if(ntnet_global) - ntnet_global.toggleIDS() - return TOPIC_HANDLED - if(href_list["toggleWireless"]) - if(!ntnet_global) - return TOPIC_HANDLED - - // NTNet is disabled. Enabling can be done without user prompt - if(ntnet_global.setting_disabled) - ntnet_global.setting_disabled = FALSE - return TOPIC_HANDLED - - // 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) - if(!user) - return TOPIC_HANDLED - 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 = TRUE - return TOPIC_HANDLED - if(href_list["purgelogs"]) - if(ntnet_global) - ntnet_global.purge_logs() - return TOPIC_HANDLED - if(href_list["updatemaxlogs"]) - 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) - return TOPIC_HANDLED - if(href_list["toggle_function"]) - if(!ntnet_global) - return TOPIC_HANDLED - ntnet_global.toggle_function(href_list["toggle_function"]) - return TOPIC_HANDLED - if(href_list["ban_nid"]) - if(!ntnet_global) - return TOPIC_HANDLED - var/nid = input(user,"Enter NID of device which you want to block from the network:", "Enter NID") as null|num - if(nid && CanUseTopic(user, state)) - ntnet_global.banned_nids |= nid - return TOPIC_HANDLED - if(href_list["unban_nid"]) - if(!ntnet_global) - return TOPIC_HANDLED - var/nid = input(user,"Enter NID of device which you want to unblock from the network:", "Enter NID") as null|num - if(nid && CanUseTopic(user, state)) - ntnet_global.banned_nids -= nid - return TOPIC_HANDLED \ No newline at end of file diff --git a/code/modules/modular_computers/file_system/programs/security/digitalwarrant.dm b/code/modules/modular_computers/file_system/programs/security/digitalwarrant.dm deleted file mode 100644 index 0533518d31527..0000000000000 --- a/code/modules/modular_computers/file_system/programs/security/digitalwarrant.dm +++ /dev/null @@ -1,254 +0,0 @@ -LEGACY_RECORD_STRUCTURE(all_warrants, warrant) -/datum/computer_file/data/warrant - var/archived = FALSE - -/datum/computer_file/program/digitalwarrant - filename = "digitalwarrant" - filedesc = "Warrant Assistant" - extended_desc = "Official NTsec program for creation and handling of warrants." - size = 8 - program_icon_state = "warrant" - program_key_state = "security_key" - program_menu_icon = "star" - requires_ntnet = TRUE - available_on_ntnet = TRUE - required_access = access_security - nanomodule_path = /datum/nano_module/program/digitalwarrant - category = PROG_SEC - -/datum/nano_module/program/digitalwarrant - name = "Warrant Assistant" - var/datum/computer_file/data/warrant/activewarrant - -/datum/nano_module/program/digitalwarrant/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1, var/datum/topic_state/state = GLOB.default_state) - var/list/data = host.initial_data() - - if(activewarrant) - data["warrantname"] = activewarrant.fields["namewarrant"] - data["warrantjob"] = activewarrant.fields["jobwarrant"] - data["warrantcharges"] = activewarrant.fields["charges"] - data["warrantauth"] = activewarrant.fields["auth"] - data["warrantidauth"] = activewarrant.fields["idauth"] - data["type"] = activewarrant.fields["arrestsearch"] - else - var/list/arrestwarrants = list() - var/list/searchwarrants = list() - var/list/archivedwarrants = list() - for(var/datum/computer_file/data/warrant/W in GLOB.all_warrants) - var/charges = W.fields["charges"] - if(length(charges) > 50) - charges = copytext_char(charges, 1, 50) + "..." - var/warrant = list( - "warrantname" = W.fields["namewarrant"], - "charges" = charges, - "auth" = W.fields["auth"], - "id" = W.uid, - "arrestsearch" = W.fields["arrestsearch"], - "archived" = W.archived) - if (warrant["archived"]) - archivedwarrants.Add(list(warrant)) - else if(warrant["arrestsearch"] == "arrest") - arrestwarrants.Add(list(warrant)) - else - searchwarrants.Add(list(warrant)) - data["arrestwarrants"] = arrestwarrants.len ? arrestwarrants : null - data["searchwarrants"] = searchwarrants.len ? searchwarrants : null - data["archivedwarrants"] = archivedwarrants.len? archivedwarrants :null - - ui = SSnano.try_update_ui(user, src, ui_key, ui, data, force_open) - if (!ui) - ui = new(user, src, ui_key, "digitalwarrant.tmpl", name, 700, 450, state = state) - ui.auto_update_layout = 1 - ui.set_initial_data(data) - ui.open() - -/datum/nano_module/program/digitalwarrant/Topic(href, href_list) - if(..()) - return TRUE - - if(href_list["sw_menu"]) - activewarrant = null - - if(href_list["editwarrant"]) - . = TRUE - for(var/datum/computer_file/data/warrant/W in GLOB.all_warrants) - if(W.uid == text2num(href_list["editwarrant"])) - activewarrant = W - break - - // The following actions will only be possible if the user has an ID with security access equipped. This is in line with modular computer framework's authentication methods, - // which also use RFID scanning to allow or disallow access to some functions. Anyone can view warrants, editing requires ID. This also prevents situations where you show a tablet - // to someone who is to be arrested, which allows them to change the stuff there. - - var/mob/user = usr - if(!istype(user)) - return - var/obj/item/card/id/I = user.GetIdCard() - if(!istype(I) || !I.registered_name || !(access_security in I.access)) - to_chat(user, "Authentication error: Unable to locate ID with apropriate access to allow this operation.") - return - - if(href_list["sendtoarchive"]) - . = TRUE - for(var/datum/computer_file/data/warrant/W in GLOB.all_warrants) - if(W.uid == text2num(href_list["sendtoarchive"])) - W.archived = TRUE - break - - if(href_list["restore"]) - . = TRUE - for(var/datum/computer_file/data/warrant/W in GLOB.all_warrants) - if(W.uid == text2num(href_list["restore"])) - W.archived = FALSE - break - - if(href_list["addwarrant"]) - . = TRUE - var/datum/computer_file/data/warrant/W = new() - if(CanInteract(user, GLOB.default_state)) - W.fields["namewarrant"] = "Unknown" - W.fields["jobwarrant"] = "N/A" - W.fields["auth"] = "Unauthorized" - W.fields["idauth"] = "Unauthorized" - W.fields["access"] = list() - if(href_list["addwarrant"] == "arrest") - W.fields["charges"] = "No charges present" - W.fields["arrestsearch"] = "arrest" - if(href_list["addwarrant"] == "search") - W.fields["charges"] = "No reason given" - W.fields["arrestsearch"] = "search" - activewarrant = W - - if(href_list["savewarrant"]) - . = TRUE - if(!activewarrant) - return - broadcast_security_hud_message("\A [activewarrant.fields["arrestsearch"]] warrant for [activewarrant.fields["namewarrant"]] has been [(activewarrant in GLOB.all_warrants) ? "edited" : "uploaded"].", nano_host()) - GLOB.all_warrants |= activewarrant - activewarrant = null - - if(href_list["deletewarrant"]) - . = TRUE - if(!activewarrant) - for(var/datum/computer_file/data/warrant/W in GLOB.all_warrants) - if(W.uid == text2num(href_list["deletewarrant"])) - activewarrant = W - break - GLOB.all_warrants -= activewarrant - activewarrant = null - - if(href_list["printwarrant"]) - . = TRUE - if(!program.computer.has_component(PART_PRINTER)) - to_chat(src, SPAN_WARNING("Hardware Error: Printer not found.")) - return - if(!activewarrant) - var/puid = text2num(href_list["printwarrant"]) - for(var/datum/computer_file/data/warrant/W in GLOB.all_warrants) - if(W.uid == puid) - activewarrant = W - break - if(activewarrant) - program.computer.print_paper(warranttotext(activewarrant), capitalize(activewarrant.fields["arrestsearch"]) + " Warrant - " + activewarrant.fields["namewarrant"]) - else - to_chat(src, SPAN_WARNING("Internal error: Warrant not found.")) - - - if(href_list["editwarrantname"]) - . = TRUE - var/namelist = list() - for(var/datum/computer_file/report/crew_record/CR in GLOB.all_crew_records) - namelist += "[CR.get_name()] \[[CR.get_job()]\]" - var/new_person = sanitize(input(usr, "Please input name") as null|anything in namelist) - if(CanInteract(user, GLOB.default_state)) - if (!new_person || !activewarrant) - return - // string trickery to extract name & job - var/entry_components = splittext(new_person, " \[") - var/name = entry_components[1] - var/job = copytext_char(entry_components[2], 1, length(entry_components[2])) - activewarrant.fields["namewarrant"] = name - activewarrant.fields["jobwarrant"] = job - - if(href_list["editwarrantnamecustom"]) - . = TRUE - var/new_name = sanitize(input("Please input name") as null|text) - var/new_job = sanitize(input("Please input job") as null|text) - if(CanInteract(user, GLOB.default_state)) - if (!new_name || !new_job || !activewarrant) - return - activewarrant.fields["namewarrant"] = new_name - activewarrant.fields["jobwarrant"] = new_job - - if(href_list["editwarrantcharges"]) - . = TRUE - var/new_charges = sanitize(input("Please input charges", "Charges", activewarrant.fields["charges"]) as null|text) - if(CanInteract(user, GLOB.default_state)) - if (!new_charges || !activewarrant) - return - activewarrant.fields["charges"] = new_charges - - if(href_list["editwarrantauth"]) - . = TRUE - if(!activewarrant) - return - activewarrant.fields["auth"] = "[I.registered_name] - [I.assignment ? I.assignment : "(Unknown)"]" - - if(href_list["editwarrantidauth"]) - . = TRUE - if(!activewarrant) - return - // access-granting is only available for arrest warrants - if(activewarrant.fields["arrestsearch"] == "search") - return - if(!(access_change_ids in I.access)) - to_chat(user, "Authentication error: Unable to locate ID with appropriate access to allow this operation.") - return - - // only works if they are in the crew records with a valid job - var/datum/computer_file/report/crew_record/warrant_subject - var/datum/job/J = SSjobs.get_by_title(activewarrant.fields["jobwarrant"]) - if(!J) - to_chat(user, "Lookup error: Unable to locate specified job in access database.") - return - for(var/datum/computer_file/report/crew_record/CR in GLOB.all_crew_records) - if(CR.get_name() == activewarrant.fields["namewarrant"] && CR.get_job() == J.title) - warrant_subject = CR - - if(!warrant_subject) - to_chat(user, "Lookup error: Unable to locate specified personnel in crew records.") - return - - var/list/warrant_access = J.get_access() - // warrants can never grant command access - warrant_access.Remove(get_region_accesses(ACCESS_REGION_COMMAND)) - - activewarrant.fields["idauth"] = "[I.registered_name] - [I.assignment ? I.assignment : "(Unknown)"]" - activewarrant.fields["access"] = warrant_access - - if(href_list["back"]) - . = TRUE - activewarrant = null - - -//SEV Torch Arrest Warrant -//System: Geneva 291 -// -//Suspect Name: Joe Schmoe -//Suspect Job: Assistant -//Charges: Vandalism -// -//Authorized by: Notthe Capitano - Commanding Officer -//Access authorized by: Notthe Capitano - Commanding Officer -// -//(legal notice) -/datum/nano_module/program/digitalwarrant/proc/warranttotext(var/datum/computer_file/data/warrant/warrant) - . += "\[center]\[h3]" + GLOB.using_map.station_name + " " + capitalize(warrant.fields["arrestsearch"]) + " Warrant\[/center]\[/h3] \ - \[b]System: \[/b]" + GLOB.using_map.system_name - . += "\n\n\[b]Suspect Name: \[/b]" + warrant.fields["namewarrant"] - . += "\n\[b]Suspect Job: \[/b]" + warrant.fields["jobwarrant"] - . += "\n\[b]Charges: \[/b]" + warrant.fields["charges"] - . += "\n\n\[b]Authorized by: \[/b]" + warrant.fields["auth"] - . += "\n\[b]Access authorized by: \[/b]" + warrant.fields["idauth"] - . += "\n\n\[small]THIS WARRANT IS ONLY VALID WITH PROPER AUTHORIZATION FROM AN APPROPRIATE HEAD OF STAFF ONBOARD THE VESSEL OR AS EXCEPTED IN SOLGOV LAW. \ - THIS PAPER IS DESIGNED FOR RECORDKEEPING PURPOSES ONLY AND SHOULD NOT BE PRESENTED TO THE SUSPECT.\[/small]" diff --git a/code/modules/modular_computers/file_system/programs/security/forceauthorization.dm b/code/modules/modular_computers/file_system/programs/security/forceauthorization.dm deleted file mode 100644 index cb0470bc44daa..0000000000000 --- a/code/modules/modular_computers/file_system/programs/security/forceauthorization.dm +++ /dev/null @@ -1,66 +0,0 @@ -/datum/computer_file/program/forceauthorization - filename = "forceauthorization" - filedesc = "Use of Force Authorization Manager" - extended_desc = "Control console used to activate the NT1019 authorization chip." - size = 4 - usage_flags = PROGRAM_CONSOLE | PROGRAM_LAPTOP - program_icon_state = "security" - program_menu_icon = "locked" - requires_ntnet = TRUE - available_on_ntnet = TRUE - required_access = access_armory - nanomodule_path = /datum/nano_module/forceauthorization - category = PROG_SEC - -/datum/nano_module/forceauthorization - name = "Use of Force Authorization Manager" - -/datum/nano_module/forceauthorization/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1, var/datum/topic_state/state = GLOB.default_state) - var/list/data = host.initial_data() - - data["registered_guns"] = list() - data["unregistered_guns"] = list() - var/atom/movable/AM = nano_host() - if(!istype(AM)) - return - var/list/zlevels = GetConnectedZlevels(AM.z) - for(var/obj/item/gun/G in GLOB.secure_weapons) - var/out_of_range = FALSE - var/area_name = "OUT OF RANGE" - var/turf/T = get_turf(G) - if(!T || !(T.z in zlevels)) - out_of_range = TRUE - else - var/area/A = get_area(T) - area_name = sanitize(A.name) - - var/list/modes = list() - for(var/i = 1 to G.init_firemodes.len) - if(G.authorized_modes[i] == ALWAYS_AUTHORIZED) - continue - var/datum/firemode/firemode = G.firemodes[i] - modes += list(list("index" = i, "mode_name" = firemode.name, "authorized" = G.authorized_modes[i])) - - if(!isnull(G.registered_owner)) - data["registered_guns"] += list(list("name" = "[G]", "ref" = "\ref[G]", "owner" = G.registered_owner, "modes" = modes, "area" = area_name, "out_of_range" = out_of_range)) - else - data["unregistered_guns"] += list(list("name" = "[G]", "ref" = "\ref[G]", "modes" = modes, "area" = area_name, "out_of_range" = out_of_range)) - - ui = SSnano.try_update_ui(user, src, ui_key, ui, data, force_open) - if (!ui) - ui = new(user, src, ui_key, "forceauthorization.tmpl", name, 700, 450, state = state) - ui.auto_update_layout = 1 - ui.set_initial_data(data) - ui.open() - -/datum/nano_module/forceauthorization/Topic(href, href_list) - if(..()) - return TRUE - - if(href_list["gun"] && ("authorize" in href_list) && href_list["mode"]) - var/obj/item/gun/G = locate(href_list["gun"]) in GLOB.secure_weapons - var/do_authorize = text2num(href_list["authorize"]) - var/mode = text2num(href_list["mode"]) - return isnum(do_authorize) && isnum(mode) && G && G.authorize(mode, do_authorize) - - return FALSE diff --git a/code/modules/modular_computers/file_system/reports/crew_record.dm b/code/modules/modular_computers/file_system/reports/crew_record.dm deleted file mode 100644 index 039d9e86951b0..0000000000000 --- a/code/modules/modular_computers/file_system/reports/crew_record.dm +++ /dev/null @@ -1,263 +0,0 @@ -GLOBAL_LIST_EMPTY(all_crew_records) -GLOBAL_LIST_INIT(blood_types, list("A-", "A+", "B-", "B+", "AB-", "AB+", "O-", "O+")) -GLOBAL_LIST_INIT(physical_statuses, list("Active", "Disabled", "SSD", "Deceased", "MIA")) -GLOBAL_VAR_INIT(default_physical_status, "Active") -GLOBAL_LIST_INIT(security_statuses, list("None", "Released", "Parolled", "Incarcerated", "Arrest")) -GLOBAL_VAR_INIT(default_security_status, "None") -GLOBAL_VAR_INIT(arrest_security_status, "Arrest") - -// Kept as a computer file for possible future expansion into servers. -/datum/computer_file/report/crew_record - filetype = "CDB" - size = 2 - var/icon/photo_front = null - var/icon/photo_side = null - //More variables below. - -/datum/computer_file/report/crew_record/New() - ..() - load_from_mob(null) - -/datum/computer_file/report/crew_record/Destroy() - . = ..() - GLOB.all_crew_records.Remove(src) - -/datum/computer_file/report/crew_record/proc/load_from_mob(var/mob/living/carbon/human/H) - if(istype(H)) - photo_front = getFlatIcon(H, SOUTH, always_use_defdir = 1) - photo_side = getFlatIcon(H, WEST, always_use_defdir = 1) - else - var/mob/living/carbon/human/dummy = new() - photo_front = getFlatIcon(dummy, SOUTH, always_use_defdir = 1) - photo_side = getFlatIcon(dummy, WEST, always_use_defdir = 1) - qdel(dummy) - - // Add honorifics, etc. - var/formal_name = "Unset" - if(H) - formal_name = H.real_name - if(H.client && H.client.prefs) - for(var/culturetag in H.client.prefs.cultural_info) - var/decl/cultural_info/culture = SSculture.get_culture(H.client.prefs.cultural_info[culturetag]) - if(H.char_rank && H.char_rank.name_short) - formal_name = "[formal_name][culture.get_formal_name_suffix()]" - else - formal_name = "[culture.get_formal_name_prefix()][formal_name][culture.get_formal_name_suffix()]" - - // Generic record - set_name(H ? H.real_name : "Unset") - set_formal_name(formal_name) - set_job(H ? GetAssignment(H) : "Unset") - var/gender_term = "Unset" - if(H) - var/datum/gender/G = gender_datums[H.get_sex()] - if(G) - gender_term = gender2text(G.formal_term) - set_sex(gender_term) - set_age(H ? H.age : 30) - set_status(GLOB.default_physical_status) - set_species(H ? H.get_species() : SPECIES_HUMAN) - set_branch(H ? (H.char_branch && H.char_branch.name) : "None") - set_rank(H ? (H.char_rank && H.char_rank.name) : "None") - set_public_record(H && H.public_record && !jobban_isbanned(H, "Records") ? html_decode(H.public_record) : "No record supplied") - - // Medical record - set_bloodtype(H ? H.b_type : "Unset") - set_medRecord((H && H.med_record && !jobban_isbanned(H, "Records") ? html_decode(H.med_record) : "No record supplied")) - - if(H) - if(H.isSynthetic()) - var/organ_data = list("Fully synthetic body") - for(var/obj/item/organ/internal/augment/A in H.internal_organs) - organ_data += "installed augment - [A.name]" - if (LAZYLEN(organ_data)) - set_implants(jointext(organ_data, "\[*\]")) - else - var/organ_data = list("\[*\]") - for(var/obj/item/organ/external/E in H.organs) - if(BP_IS_ROBOTIC(E)) - organ_data += "[E.model ? "[E.model] " : null][E.name] prosthetic" - for(var/obj/item/organ/internal/I in H.internal_organs) - if(BP_IS_ASSISTED(I)) - organ_data += I.get_mechanical_assisted_descriptor() - else if (BP_IS_ROBOTIC(I)) - if (!istype(I, /obj/item/organ/internal/augment)) // Differentiate between augments and prosthetics - organ_data += "robotic [I.name] prosthetic" - else - organ_data += "installed augment - [I.name]" - set_implants(jointext(organ_data, "\[*\]")) - - // Security record - set_criminalStatus(GLOB.default_security_status) - set_dna(H ? H.dna.unique_enzymes : "") - set_fingerprint(H ? md5(H.dna.uni_identity) : "") - set_secRecord(H && H.sec_record && !jobban_isbanned(H, "Records") ? html_decode(H.sec_record) : "No record supplied") - - // Employment record - var/employment_record = "No record supplied" - if(H) - if(H.gen_record && !jobban_isbanned(H, "Records")) - employment_record = html_decode(H.gen_record) - if(H.client && H.client.prefs) - var/list/qualifications - for(var/culturetag in H.client.prefs.cultural_info) - var/decl/cultural_info/culture = SSculture.get_culture(H.client.prefs.cultural_info[culturetag]) - var/extra_note = culture.get_qualifications() - if(extra_note) - LAZYADD(qualifications, extra_note) - if(LAZYLEN(qualifications)) - employment_record = "[employment_record ? "[employment_record]\[br\]" : ""][jointext(qualifications, "\[br\]>")]" - set_emplRecord(employment_record) - - // Misc cultural info. - set_homeSystem(H ? html_decode(H.get_cultural_value(TAG_HOMEWORLD)) : "Unset") - set_religion(H ? html_decode(H.get_cultural_value(TAG_RELIGION)) : "Unset") - - if(H) - var/skills = list() - for(var/decl/hierarchy/skill/S in GLOB.skills) - var/level = H.get_skill_value(S.type) - if(level > SKILL_NONE) - skills += "[S.name], [S.levels[level]]" - - set_skillset(jointext(skills,"\n")) - - // Antag record - set_faction(H ? html_decode(H.get_cultural_value(TAG_FACTION)) : "Unset") - set_antagRecord(H && H.exploit_record && !jobban_isbanned(H, "Records") ? html_decode(H.exploit_record) : "") - -// Global methods -// Used by character creation to create a record for new arrivals. -/proc/CreateModularRecord(var/mob/living/carbon/human/H) - var/datum/computer_file/report/crew_record/CR = new/datum/computer_file/report/crew_record() - GLOB.all_crew_records.Add(CR) - CR.load_from_mob(H) - return CR - -// Gets crew records filtered by set of positions -/proc/department_crew_manifest(var/list/filter_positions, var/blacklist = FALSE) - var/list/matches = list() - for(var/datum/computer_file/report/crew_record/CR in GLOB.all_crew_records) - var/rank = CR.get_job() - if(blacklist) - if(!(rank in filter_positions)) - matches.Add(CR) - else - if(rank in filter_positions) - matches.Add(CR) - return matches - -// Simple record to HTML (for paper purposes) conversion. -// Not visually that nice, but it gets the work done, feel free to tweak it visually -/proc/record_to_html(var/datum/computer_file/report/crew_record/CR, var/access) - var/dat = "

              RECORD DATABASE DATA DUMP

              Generated on: [stationdate2text()] [stationtime2text()]
              ******************************
              " - dat += "" - for(var/datum/report_field/F in CR.fields) - if(F.verify_access(access)) - dat += "" - dat += "
              [F.display_name()]" - if(F.needs_big_box) - dat += "
              [F.get_value()]" - dat += "" - return dat - -/proc/get_crewmember_record(var/name) - name = sanitize(name) - for(var/datum/computer_file/report/crew_record/CR in GLOB.all_crew_records) - if(CR.get_name() == name) - return CR - return null - -/proc/GetAssignment(var/mob/living/carbon/human/H) - if(!H) - return "Unassigned" - if(!H.mind) - return H.job - if(H.mind.role_alt_title) - return H.mind.role_alt_title - return H.mind.assigned_role - -#define GETTER_SETTER(PATH, KEY) /datum/computer_file/report/crew_record/proc/get_##KEY(){var/datum/report_field/F = locate(/datum/report_field/##PATH/##KEY) in fields; if(F) return F.get_value()} \ -/datum/computer_file/report/crew_record/proc/set_##KEY(given_value){var/datum/report_field/F = locate(/datum/report_field/##PATH/##KEY) in fields; if(F) F.set_value(given_value)} -#define SETUP_FIELD(NAME, KEY, PATH, ACCESS, ACCESS_EDIT) GETTER_SETTER(PATH, KEY); /datum/report_field/##PATH/##KEY;\ -/datum/computer_file/report/crew_record/generate_fields(){..(); var/datum/report_field/##KEY = add_field(/datum/report_field/##PATH/##KEY, ##NAME);\ -KEY.set_access(ACCESS, ACCESS_EDIT || ACCESS || access_bridge)} - -// Fear not the preprocessor, for it is a friend. To add a field, use one of these, depending on value type and if you need special access to see it. -// It will also create getter/setter procs for record datum, named like /get_[key here]() /set_[key_here](value) e.g. get_name() set_name(value) -// Use getter setters to avoid errors caused by typoing the string key. -#define FIELD_SHORT(NAME, KEY, ACCESS, ACCESS_EDIT) SETUP_FIELD(NAME, KEY, simple_text/crew_record, ACCESS, ACCESS_EDIT) -#define FIELD_LONG(NAME, KEY, ACCESS, ACCESS_EDIT) SETUP_FIELD(NAME, KEY, pencode_text/crew_record, ACCESS, ACCESS_EDIT) -#define FIELD_NUM(NAME, KEY, ACCESS, ACCESS_EDIT) SETUP_FIELD(NAME, KEY, number/crew_record, ACCESS, ACCESS_EDIT) -#define FIELD_LIST(NAME, KEY, OPTIONS, ACCESS, ACCESS_EDIT) FIELD_LIST_EDIT(NAME, KEY, OPTIONS, ACCESS, ACCESS_EDIT) -#define FIELD_LIST_EDIT(NAME, KEY, OPTIONS, ACCESS, ACCESS_EDIT) SETUP_FIELD(NAME, KEY, options/crew_record, ACCESS, ACCESS_EDIT);\ -/datum/report_field/options/crew_record/##KEY/get_options(){return OPTIONS} - -// GENERIC RECORDS -FIELD_SHORT("Name", name, null, access_change_ids) -FIELD_SHORT("Formal Name", formal_name, null, access_change_ids) -FIELD_SHORT("Job", job, null, access_change_ids) -FIELD_LIST("Sex", sex, record_genders(), null, access_change_ids) -FIELD_NUM("Age", age, null, access_change_ids) -FIELD_LIST_EDIT("Status", status, GLOB.physical_statuses, null, access_medical) - -FIELD_SHORT("Species",species, null, access_change_ids) -FIELD_LIST("Branch", branch, record_branches(), null, access_change_ids) -FIELD_LIST("Rank", rank, record_ranks(), null, access_change_ids) -FIELD_SHORT("Religion", religion, access_chapel_office, access_change_ids) - -FIELD_LONG("General Notes (Public)", public_record, null, access_bridge) - -// MEDICAL RECORDS -FIELD_LIST("Blood Type", bloodtype, GLOB.blood_types, access_medical, access_medical) -FIELD_LONG("Medical Record", medRecord, access_medical, access_medical) -FIELD_LONG("Known Implants", implants, access_medical, access_medical) - -// SECURITY RECORDS -FIELD_LIST("Criminal Status", criminalStatus, GLOB.security_statuses, access_security, access_security) -FIELD_LONG("Security Record", secRecord, access_security, access_security) -FIELD_SHORT("DNA", dna, access_security, access_security) -FIELD_SHORT("Fingerprint", fingerprint, access_security, access_security) - -// EMPLOYMENT RECORDS -FIELD_LONG("Employment Record", emplRecord, access_bridge, access_bridge) -FIELD_SHORT("Home System", homeSystem, access_bridge, access_change_ids) -FIELD_LONG("Qualifications", skillset, access_bridge, access_bridge) - -// ANTAG RECORDS -FIELD_SHORT("Faction", faction, access_syndicate, access_syndicate) -FIELD_LONG("Exploitable Information", antagRecord, access_syndicate, access_syndicate) - -//Options builderes -/datum/report_field/options/crew_record/rank/proc/record_ranks() - var/datum/computer_file/report/crew_record/record = owner - var/datum/mil_branch/branch = GLOB.mil_branches.get_branch(record.get_branch()) - if(!branch) - return - . = list() - . |= "Unset" - for(var/rank in branch.ranks) - var/datum/mil_rank/RA = branch.ranks[rank] - . |= RA.name - -/datum/report_field/options/crew_record/sex/proc/record_genders() - . = list() - . |= "Unset" - for(var/thing in gender_datums) - var/datum/gender/G = gender_datums[thing] - . |= gender2text(G.formal_term) - -/datum/report_field/options/crew_record/branch/proc/record_branches() - . = list() - . |= "Unset" - for(var/B in GLOB.mil_branches.branches) - var/datum/mil_branch/BR = GLOB.mil_branches.branches[B] - . |= BR.name - -#undef GETTER_SETTER -#undef SETUP_FIELD -#undef FIELD_SHORT -#undef FIELD_LONG -#undef FIELD_NUM -#undef FIELD_LIST -#undef FIELD_LIST_EDIT diff --git a/code/modules/modular_computers/file_system/reports/deck_reports.dm b/code/modules/modular_computers/file_system/reports/deck_reports.dm deleted file mode 100644 index 917b79dd150c1..0000000000000 --- a/code/modules/modular_computers/file_system/reports/deck_reports.dm +++ /dev/null @@ -1,129 +0,0 @@ -//Reports for the deck management program. - -/datum/computer_file/report/flight_plan - form_name = "DC109" - title = "Flight Plan" - var/datum/report_field/people/leader //Give these a special name for easier access. - var/datum/report_field/people/manifest - var/datum/report_field/planned_depart - -/datum/computer_file/report/flight_plan/New() - ..() - set_access(null, access_bridge) - -/datum/computer_file/report/flight_plan/Destroy() - leader = null - manifest = null - planned_depart = null - return ..() - -/datum/computer_file/report/flight_plan/generate_fields() - add_field(/datum/report_field/text_label/instruction, "These fields are required:") - leader = add_field(/datum/report_field/people/from_manifest, "Leader", required = 1) - planned_depart = add_field(/datum/report_field/time, "Planned Departure", required = 1) - add_field(/datum/report_field/text_label/instruction, "These fields are optional:") - manifest = add_field(/datum/report_field/people/list_from_manifest, "Manifest") - add_field(/datum/report_field/pencode_text, "Objective") - add_field(/datum/report_field/time, "Expected Return/Contact Time") - add_field(/datum/report_field/simple_text, "Fuel Status") - -//These fields will be auto-set. -/datum/computer_file/report/recipient/shuttle - var/datum/report_field/shuttle - var/datum/report_field/mission - var/access_shuttle = 0 //Set to 1 to give the shuttle's logging access as an access_edit pattern. - -/datum/computer_file/report/recipient/shuttle/New() - ..() - set_access(null, access_bridge) - -/datum/computer_file/report/recipient/shuttle/Destroy() - shuttle = null - mission = null - return ..() - -/datum/computer_file/report/recipient/shuttle/generate_fields() - ..() - shuttle = add_field(/datum/report_field/simple_text, "Shuttle", required = 1) - shuttle.can_edit = 0 - mission = add_field(/datum/report_field/simple_text, "Mission", required = 1) - mission.can_edit = 0 - -/datum/computer_file/report/recipient/shuttle/damage - form_name = "DC243" - title = "Post-flight Damage Assessment" - -/datum/computer_file/report/recipient/shuttle/damage/New() - ..() - set_access(null, list(access_cargo, access_pilot), override = 0) - -/datum/computer_file/report/recipient/shuttle/damage/generate_fields() - ..() - add_field(/datum/report_field/text_label/instruction, "Assess the damage sustained by the shuttle and its flight readiness.") - add_field(/datum/report_field/pencode_text, "Shuttle state on arrival") - add_field(/datum/report_field/simple_text, "Flight readiness") - add_field(/datum/report_field/pencode_text, "Repairs required") - add_field(/datum/report_field/time, "Estimated completion time") - -/datum/computer_file/report/recipient/shuttle/fuel - form_name = "DC12" - title = "Post-flight Refueling Report" - -/datum/computer_file/report/recipient/shuttle/fuel/New() - ..() - set_access(null, list(access_cargo, access_pilot), override = 0) - -/datum/computer_file/report/recipient/shuttle/fuel/generate_fields() - ..() - add_field(/datum/report_field/simple_text, "Prior fuel level") - add_field(/datum/report_field/simple_text, "Current fuel level") - add_field(/datum/report_field/time, "Time of refueling") - add_field(/datum/report_field/pencode_text, "Additional notes") - -/datum/computer_file/report/recipient/shuttle/atmos - form_name = "DC245" - title = "Post-flight Atmospherics Assessment" - -/datum/computer_file/report/recipient/shuttle/atmos/New() - ..() - set_access(null, list(access_cargo, access_pilot), override = 0) - -/datum/computer_file/report/recipient/shuttle/atmos/generate_fields() - ..() - add_field(/datum/report_field/text_label/instruction, "Assess the state of the shuttle's atmospherics system.") - add_field(/datum/report_field/pencode_text, "State of atmospherics supplies") - add_field(/datum/report_field/time, "Estimated time of exhaustion") - add_field(/datum/report_field/simple_text, "Supplies required") - -/datum/computer_file/report/recipient/shuttle/gear - form_name = "DC248b" - title = "Post-flight Emergency Supply Inventory; Summary Version" - -/datum/computer_file/report/recipient/shuttle/gear/New() - ..() - set_access(null, list(access_cargo, access_pilot), override = 0) - -/datum/computer_file/report/recipient/shuttle/gear/generate_fields() - ..() - add_field(/datum/report_field/text_label/instruction, "Summarize the state of the shuttle's critical emergency supplies.") - add_field(/datum/report_field/pencode_text, "State of supplies on arrival") - add_field(/datum/report_field/pencode_text, "Supplies restocked") - add_field(/datum/report_field/time, "Time of restocking") - add_field(/datum/report_field/simple_text, "Flight readiness") - add_field(/datum/report_field/pencode_text, "Additional Notes") - -/datum/computer_file/report/recipient/shuttle/post_flight - form_name = "DC102" - title = "Standard Expedition Summary" - access_shuttle = 1 - -/datum/computer_file/report/recipient/shuttle/post_flight/generate_fields() - ..() - add_field(/datum/report_field/text_label/instruction, "Report on the expedition's findings, results, or outcomes.") - add_field(/datum/report_field/simple_text, "Locations visited") - add_field(/datum/report_field/simple_text, "General purpose of mission") - add_field(/datum/report_field/pencode_text, "Brief summary of activities") - add_field(/datum/report_field/pencode_text, "Crew status and casualties") - add_field(/datum/report_field/pencode_text, "Objects or materials returned") - add_field(/datum/report_field/pencode_text, "Recommended follow-up activities") - add_field(/datum/report_field/pencode_text, "Additional Notes") diff --git a/code/modules/modular_computers/file_system/reports/deck_reports_ru.dm b/code/modules/modular_computers/file_system/reports/deck_reports_ru.dm deleted file mode 100644 index 91b610a06d552..0000000000000 --- a/code/modules/modular_computers/file_system/reports/deck_reports_ru.dm +++ /dev/null @@ -1,110 +0,0 @@ -//Reports for the deck management program. - -/datum/computer_file/report/flight_plan - form_name = "DC109" - title = "Полётный план" - available_on_ntnet = FALSE - -/datum/computer_file/report/flight_plan/generate_fields() - add_field(/datum/report_field/text_label/instruction, "Эти поля являются обязательными к заполнению:") - leader = add_field(/datum/report_field/people/from_manifest, "Лидер", required = 1) - planned_depart = add_field(/datum/report_field/time, "Планируемое время отбытия", required = 1) - add_field(/datum/report_field/text_label/instruction, "Эти поля являются не обязательными к заполнению:") - manifest = add_field(/datum/report_field/people/list_from_manifest, "Манифест") - add_field(/datum/report_field/pencode_text, "Цель") - add_field(/datum/report_field/time, "Планируемое время прибытия/выхода на связь") - add_field(/datum/report_field/simple_text, "Количество топлива") - -/datum/computer_file/report/recipient/shuttle/generate_fields() - recipients = add_field(/datum/report_field/people/list_from_manifest, "Отправить копии") - shuttle = add_field(/datum/report_field/simple_text, "Шаттл", required = 1) - shuttle.can_edit = 0 - mission = add_field(/datum/report_field/simple_text, "Миссия", required = 1) - mission.can_edit = 0 - -/datum/computer_file/report/recipient/shuttle/damage - form_name = "DC243" - title = "После полётная проверка повреждений" - available_on_ntnet = FALSE - -/datum/computer_file/report/recipient/shuttle/damage/generate_fields() - recipients = add_field(/datum/report_field/people/list_from_manifest, "Отправить копии") - add_field(/datum/report_field/text_label/instruction, "Оцените ущерб, нанесенный шаттлу, и его готовность к полету.") - add_field(/datum/report_field/pencode_text, "Состояние шаттла по прибитию") - add_field(/datum/report_field/simple_text, "Готовность к полету") - add_field(/datum/report_field/pencode_text, "Необходимый ремонт") - add_field(/datum/report_field/time, "Планируемое время окончания ремонта") - shuttle = add_field(/datum/report_field/simple_text, "Шаттл", required = 1) - shuttle.can_edit = 0 - mission = add_field(/datum/report_field/simple_text, "Миссия", required = 1) - mission.can_edit = 0 - -/datum/computer_file/report/recipient/shuttle/fuel - form_name = "DC12" - title = "После-полётная проверка уровня топлива" - available_on_ntnet = FALSE - -/datum/computer_file/report/recipient/shuttle/fuel/generate_fields() - recipients = add_field(/datum/report_field/people/list_from_manifest, "Отправить копии") - add_field(/datum/report_field/simple_text, "Предыдущий уровень топлива") - add_field(/datum/report_field/simple_text, "Текущий уровень топлива") - add_field(/datum/report_field/time, "Время дозаправки") - add_field(/datum/report_field/pencode_text, "Дополнительные заметки") - shuttle = add_field(/datum/report_field/simple_text, "Шаттл", required = 1) - shuttle.can_edit = 0 - mission = add_field(/datum/report_field/simple_text, "Миссия", required = 1) - mission.can_edit = 0 - -/datum/computer_file/report/recipient/shuttle/atmos - form_name = "DC245" - title = "После-полётная проверка атмосферы" - available_on_ntnet = FALSE - -/datum/computer_file/report/recipient/shuttle/atmos/generate_fields() - recipients = add_field(/datum/report_field/people/list_from_manifest, "Отправить копии") - add_field(/datum/report_field/text_label/instruction, "Оцените состояние атмосферных систем шаттла.") - add_field(/datum/report_field/pencode_text, "Состояние атмосферных запасов") - add_field(/datum/report_field/time, "Планируемое время окончания запасов") - add_field(/datum/report_field/simple_text, "Необходимые запасы") - shuttle = add_field(/datum/report_field/simple_text, "Шаттл", required = 1) - shuttle.can_edit = 0 - mission = add_field(/datum/report_field/simple_text, "Миссия", required = 1) - mission.can_edit = 0 - -/datum/computer_file/report/recipient/shuttle/gear - form_name = "DC248b" - title = "После-полётная проверка запасов для чрезвычайных ситуаций" - available_on_ntnet = FALSE - -/datum/computer_file/report/recipient/shuttle/gear/generate_fields() - recipients = add_field(/datum/report_field/people/list_from_manifest, "Отправить копии") - add_field(/datum/report_field/text_label/instruction, "Оцените состояние запасов для чрезвычайных ситуаций шаттла.") - add_field(/datum/report_field/pencode_text, "Состояние запасов при прибытии") - add_field(/datum/report_field/pencode_text, "Пополненые запасы") - add_field(/datum/report_field/time, "Время пополнения запасов") - add_field(/datum/report_field/simple_text, "Готовность к полёту") - add_field(/datum/report_field/pencode_text, "Дополнительные заметки") - shuttle = add_field(/datum/report_field/simple_text, "Шаттл", required = 1) - shuttle.can_edit = 0 - mission = add_field(/datum/report_field/simple_text, "Миссия", required = 1) - mission.can_edit = 0 - -/datum/computer_file/report/recipient/shuttle/post_flight - form_name = "DC102" - title = "Стандартный отчёт экспедиции" - available_on_ntnet = FALSE - -/datum/computer_file/report/recipient/shuttle/post_flight/generate_fields() - recipients = add_field(/datum/report_field/people/list_from_manifest, "Отправить копии") - add_field(/datum/report_field/text_label/instruction, "Отчёт о находках, открытиях и результатах экспедиции.") - add_field(/datum/report_field/simple_text, "Посещённые локации") - add_field(/datum/report_field/simple_text, "Основная цель миссии") - add_field(/datum/report_field/pencode_text, "Общее заключение по экспедиции") - add_field(/datum/report_field/pencode_text, "Статус команды и потери") - add_field(/datum/report_field/pencode_text, "Возвращённые объекты или материалы") - add_field(/datum/report_field/pencode_text, "Рекомендуемые последующие мероприятия") - add_field(/datum/report_field/pencode_text, "Дополнительные заметки") - shuttle = add_field(/datum/report_field/simple_text, "Шаттл", required = 1) - shuttle.can_edit = 0 - mission = add_field(/datum/report_field/simple_text, "Миссия", required = 1) - mission.can_edit = 0 diff --git a/code/modules/modular_computers/file_system/reports/people.dm b/code/modules/modular_computers/file_system/reports/people.dm deleted file mode 100644 index 7f07ec8fb51b2..0000000000000 --- a/code/modules/modular_computers/file_system/reports/people.dm +++ /dev/null @@ -1,132 +0,0 @@ -//Field with people in it; has some communications procs available to it. -/datum/report_field/people/proc/send_email(mob/user) - if(!get_value()) - return //No one to send to anyway. - var/subject = sanitize(input(user, "Email Subject:", "Document Email", "Report Submission: [owner.display_name()]") as null|text) - var/body = sanitize(replacetext_char(input(user, "Email Body:", "Document Email", "Please see the attached document.") as null|message, "\n", "\[br\]"), MAX_PAPER_MESSAGE_LEN) - var/attach_report = (alert(user, "Do you wish to attach [owner.display_name()]?","Document Email", "Yes.", "No.") == "Yes.") ? 1 : 0 - if(alert(user, "Are you sure you want to send this email?","Document Email", "Yes.", "No.") == "No.") - return - var/datum/computer_file/data/text/report_file - if(attach_report) - var/list/user_access = list() - var/obj/item/card/id/I = user.GetIdCard() - if(I) - user_access |= I.access - report_file = new - report_file.stored_data = owner.generate_pencode(user_access, no_html = 1) //TXT files can't have html; they use pencode only. - report_file.filename = owner.filename - if(perform_send(subject, body, report_file)) - to_chat(user, "The email has been sent.") - -//Helper procs. -/datum/report_field/people/proc/perform_send(subject, body, attach_report) - return - -/datum/report_field/people/proc/send_to_recipient(subject, body, attach_report, recipient) - var/datum/computer_file/data/email_account/server = ntnet_global.find_email_by_name(EMAIL_DOCUMENTS) - var/datum/computer_file/data/email_message/message = new() - message.title = subject - message.stored_data = body - message.source = server.login - message.attachment = attach_report - server.send_mail(recipient, message) - -/datum/report_field/people/proc/format_output(name, rank, milrank) - . = list() - if(milrank) - . += milrank - . += name - if(rank) - . += "([rank])" - return jointext(., " ") - -//Lets you select one person on the manifest. -/datum/report_field/people/from_manifest - value = list() - -/datum/report_field/people/from_manifest/get_value() - return format_output(value["name"], value["rank"], value["milrank"]) - -/datum/report_field/people/from_manifest/set_value(given_value) - if(!given_value) - value = list() - if(!in_as_list(given_value, flat_nano_crew_manifest())) - return //Check for inclusion, but have to be careful when checking list equivalence. - value = given_value - -/datum/report_field/people/from_manifest/ask_value(mob/user) - var/list/full_manifest = flat_nano_crew_manifest() - var/list/formatted_manifest = list() - for(var/entry in full_manifest) - formatted_manifest[format_output(entry["name"], entry["rank"])] = entry - if (!length(formatted_manifest)) - alert(user, "There are no candidates to add from manifest.") // in case someone somehow deletes the entire crew record database. - else - var/input = input(user, "[display_name()]:", "Form Input", get_value()) as null|anything in formatted_manifest - set_value(formatted_manifest[input]) - -/datum/report_field/people/from_manifest/perform_send(subject, body, attach_report) - var/login = find_email(value["name"]) - send_to_recipient(subject, body, attach_report, login) - return 1 - -//Lets you select multiple people. -/datum/report_field/people/list_from_manifest - value = list() - needs_big_box = 1 - -/datum/report_field/people/list_from_manifest/get_value(in_line = 0) - var/dat = list() - for(var/entry in value) - var/milrank = entry["milrank"] - if(in_line && (GLOB.using_map.flags & MAP_HAS_RANK)) - var/datum/computer_file/report/crew_record/CR = get_crewmember_record(entry["name"]) - if(CR) - var/datum/mil_rank/rank_obj = GLOB.mil_branches.get_rank(CR.get_branch(), CR.get_rank()) - milrank = (rank_obj ? rank_obj.name_short : "") - dat += format_output(entry["name"], in_line ? null : entry["rank"], milrank) - return jointext(dat, in_line ? ", " : "
              ") - -/datum/report_field/people/list_from_manifest/set_value(given_value) - var/list/full_manifest = flat_nano_crew_manifest() - var/list/new_value = list() - if(!islist(given_value)) - return - for(var/entry in given_value) - if(!in_as_list(entry, full_manifest)) - return - if(in_as_list(entry, new_value)) - continue //ignore repeats - new_value += list(entry) - value = new_value - -/datum/report_field/people/list_from_manifest/ask_value(mob/user) - var/alert = alert(user, "Would you like to add or remove a name?", "Form Input", "Add", "Remove") - var/list/formatted_manifest = list() - switch(alert) - if("Add") - var/list/full_manifest = flat_nano_crew_manifest() - for(var/entry in full_manifest) - if(!in_as_list(entry, value)) //Only look at those not already selected. - formatted_manifest[format_output(entry["name"], entry["rank"])] = entry - if (!length(formatted_manifest)) - alert(user, "There are no remaining candidates to add from manifest.") - else - var/input = input(user, "Add to [display_name()]:", "Form Input", null) as null|anything in formatted_manifest - set_value(value + list(formatted_manifest[input])) - if("Remove") - for(var/entry in value) - formatted_manifest[format_output(entry["name"], entry["rank"])] = entry - if (!length(formatted_manifest)) - alert(user, "There are no remaining candidates to remove from manifest.") - else - var/input = input(user, "Remove from [display_name()]:", "Form Input", null) as null|anything in formatted_manifest - set_value(value - list(formatted_manifest[input])) - -//Batch-emails the list. -/datum/report_field/people/list_from_manifest/perform_send(subject, body, attach_report) - for(var/entry in value) - var/login = find_email(entry["name"]) - send_to_recipient(subject, body, attach_report, login) - return 1 \ No newline at end of file diff --git a/code/modules/modular_computers/file_system/reports/report.dm b/code/modules/modular_computers/file_system/reports/report.dm deleted file mode 100644 index e7eb7fb3a34ab..0000000000000 --- a/code/modules/modular_computers/file_system/reports/report.dm +++ /dev/null @@ -1,174 +0,0 @@ -/datum/computer_file/report - filename = "report" - filetype = "RPT" - - /// The name of this report type. - var/title = "Generic Report" - /// Form code, for maximum bureaucracy. - var/form_name = "AB1" - /// The name of the mob that made the report. - var/creator - /// Time submitted. - var/file_time - /// The access required to submit the report. See documentation below. - var/list/access_edit = list(list()) - /// The access required to view the report. - var/list/access = list(list()) - /// A list of fields the report comes with, in order that they should be displayed. - var/list/datum/report_field/fields = list() - /// Whether this report type should show up on NTNet. - var/available_on_ntnet = FALSE - /// Can be set to a pencode logo for use with some display methods. - var/logo - -/datum/computer_file/report/New() - ..() - generate_fields() - -/datum/computer_file/report/Destroy() - QDEL_NULL_LIST(fields) - . = ..() - -/** - * Access stuff. The report's access/access_edit should control whether it can be opened/submitted. - * For field editing or viewing, use the field's access/access_edit permission instead. - * The access system is based on "access patterns", lists of access values. - * A user needs all access values in a pattern to be granted access. - * A user needs to only match one of the potentially several stored access patterns to be granted access. - * You must have access to have edit access. - * - * This proc resets the access to the report, resulting in just one access pattern for access/edit. - * Arguments can be access values (numbers) or lists of access values. - * If null is passed to one of the arguments, that access type is left alone. Pass list() to reset to no access needed instead. - * The recursive option resets access to all fields in the report as well. - * If the override option is set to FALSE, the access supplied will instead be added as another access pattern, rather than resetting the access. - */ -/datum/computer_file/report/proc/set_access(access, access_edit, recursive = 1, override = 1) - if(access) - if(!islist(access)) - access = list(access) - override ? (src.access = list(access)) : (src.access += list(access)) //Note that this is a list of lists. - if(access_edit) - if(!islist(access_edit)) - access_edit = list(access_edit) - override ? (src.access_edit = list(access_edit)) : (src.access_edit += list(access_edit)) - if(recursive) - for(var/datum/report_field/field in fields) - field.set_access(access, access_edit, override) - -/// Strongly recommended to use these procs to check for access. They can take access values (numbers) or lists of values. -/datum/computer_file/report/proc/verify_access(given_access) - return has_access_pattern(access, given_access) - -/datum/computer_file/report/proc/verify_access_edit(given_access) - if(!verify_access(given_access)) - return //Need access for access_edit - return has_access_pattern(access_edit, given_access) - -/// Looking up fields. Names might not be unique unless you ensure otherwise. -/datum/computer_file/report/proc/field_from_ID(ID) - for(var/datum/report_field/field in fields) - if(field.ID == ID) - return field - -/datum/computer_file/report/proc/field_from_name(name) - for(var/datum/report_field/field in fields) - if(field.display_name() == name) - return field - -/// The place to enter fields for report subtypes, via add_field. -/datum/computer_file/report/proc/generate_fields() - return - -/datum/computer_file/report/proc/submit(mob/user) - if(!istype(user)) - return 0 - for(var/datum/report_field/field in fields) - if(field.required && !field.get_value()) - to_chat(user, "You are missing a required field!") - return 0 - creator = user.name - file_time = time_stamp() - rename_file(file_time) - return 1 - -/datum/computer_file/report/proc/rename_file(append) - append = append || time_stamp() - append = replacetext_char(append, ":", "_") - if(istype(holder, /obj/item/stock_parts/computer/hard_drive)) - holder.rename_file(src, "[form_name]_[append]") - else - filename = "[form_name]_[append]" - -/// Don't add fields except through this proc. -/datum/computer_file/report/proc/add_field(field_type, name, value = null, required = 0) - var/datum/report_field/field = new field_type(src) - field.name = name - if(value) - field.value = value - if(required) - field.required = 1 - field.ID = sequential_id(type) - fields += field - return field - -/datum/computer_file/report/clone() - var/datum/computer_file/report/temp = ..() - temp.title = title - temp.form_name = form_name - temp.creator = creator - temp.file_time = file_time - temp.access_edit = access_edit - temp.access = access - for(var/i = 1, i <= length(fields), i++) - var/datum/report_field/new_field = temp.fields[i] - new_field.copy_value(fields[i]) - return temp - -/datum/computer_file/report/proc/display_name() - return "Form [form_name]: [title]" - -/// If access is given, will include access information by performing checks against it. -/datum/computer_file/report/proc/generate_nano_data(list/given_access) - . = list() - .["name"] = display_name() - .["uid"] = uid - .["creator"] = creator - .["file_time"] = file_time - .["fields"] = list() - if(given_access) - .["access"] = verify_access(given_access) - .["access_edit"] = verify_access_edit(given_access) - for(var/datum/report_field/field in fields) - .["fields"] += list(field.generate_nano_data(given_access)) -/** - * This formats the report into pencode for use with paper and printing. Setting access to null will bypass access checks. - * with_fields will include a field link after the field value (useful to print fillable forms). - * no_html will strip any html, possibly killing useful formatting in the process. - */ -/datum/computer_file/report/proc/generate_pencode(access, with_fields, no_html) - . = list() - . += "\[center\][logo]\[/center\]" - . += "\[center\]\[h2\][display_name()]\[/h2\]\[/center\]" - . += "\[grid\]" - for(var/datum/report_field/F in fields) - . += F.generate_row_pencode(access, with_fields) - . += "\[/grid\]" - . = JOINTEXT(.) - if(no_html) - . = html2pencode(.) - -/// Recipient reports have a designated recipients field, for receiving submitted reports. -/datum/computer_file/report/recipient - var/datum/report_field/people/list_from_manifest/recipients - -/datum/computer_file/report/recipient/Destroy() - recipients = null - return ..() - -/datum/computer_file/report/recipient/generate_fields() - recipients = add_field(/datum/report_field/people/list_from_manifest, "Send Copies To") - -/datum/computer_file/report/recipient/submit(mob/user) - if((. = ..())) - recipients.send_email(user) diff --git a/code/modules/modular_computers/file_system/reports/report_field.dm b/code/modules/modular_computers/file_system/reports/report_field.dm deleted file mode 100644 index 2d8085e2510b6..0000000000000 --- a/code/modules/modular_computers/file_system/reports/report_field.dm +++ /dev/null @@ -1,194 +0,0 @@ -/datum/report_field - var/datum/computer_file/report/owner //The report to which this field belongs. - var/name = "generic field" //The name the field will be labeled with. - var/value //Only used internally. - var/can_edit = 1 //Whether the field gives the user the option to edit it. - var/required = 0 //Whether the field is required to submit the report. - var/ID //A unique (per report) id; don't set manually. - var/needs_big_box = 0 //Suggests that the output won't look good in-line. Useful in nanoui logic. - var/ignore_value = 0 //Suggests that the value should not be displayed. - var/list/access_edit = list(list()) //The access required to edit the field. - var/list/access = list(list()) //The access required to view the field. - -/datum/report_field/New(datum/computer_file/report/report) - owner = report - ..() - -/datum/report_field/Destroy() - owner = null - . = ..() - -//Access stuff. Can be given access constants or lists. See report access procs for documentation. -/datum/report_field/proc/set_access(access, access_edit, override = 1) - if(access) - if(!islist(access)) - access = list(access) - override ? (src.access = list(access)) : (src.access += list(access)) - if(access_edit) - if(!islist(access_edit)) - access_edit = list(access_edit) - override ? (src.access_edit = list(access_edit)) : (src.access_edit += list(access_edit)) - -/datum/report_field/proc/verify_access(given_access) - return has_access_pattern(access, given_access) - -/datum/report_field/proc/verify_access_edit(given_access) - if(!verify_access(given_access)) - return - return has_access_pattern(access_edit, given_access) - -//Assumes the old and new fields are of the same type. Override if the field stores information differently. -/datum/report_field/proc/copy_value(datum/report_field/old_field) - value = old_field.value - access = old_field.access - access_edit = old_field.access_edit - -//Gives the user prompts to fill out the field. -/datum/report_field/proc/ask_value(mob/user) - -//Sanitizes and sets the value from input. -/datum/report_field/proc/set_value(given_value) - value = given_value - -//Exports the contents of the field into html for viewing. -/datum/report_field/proc/get_value(in_line = 0) - return value - -//In case the name needs to be displayed dynamically. -/datum/report_field/proc/display_name() - return name - -/datum/report_field/proc/generate_row_pencode(access, with_fields) - if(!ignore_value) - . += "\[row\]\[cell\]\[b\][display_name()]:\[/b\]" - var/field = ((with_fields && can_edit) ? "\[field\]" : "" ) - if(!access || verify_access(access)) - . += (needs_big_box ? "\[/grid\][get_value()][field]\[grid\]" : "\[cell\][get_value()][field]") - else - . += "\[cell\]\[REDACTED\][field]" - else - . += "\[/grid\][display_name()]\[grid\]" - . = JOINTEXT(.) - -/datum/report_field/proc/generate_nano_data(list/given_access) - var/dat = list() - if(given_access) - dat["access"] = verify_access(given_access) - dat["access_edit"] = verify_access_edit(given_access) - dat["name"] = display_name() - dat["value"] = get_value() - dat["can_edit"] = can_edit - dat["needs_big_box"] = needs_big_box - dat["ignore_value"] = ignore_value - dat["ID"] = ID - return dat - -/* -Basic field subtypes. -*/ - -//For plain text without forms. -/datum/report_field/text_label - can_edit = 0 - ignore_value = 1 - -//For information between fields. -/datum/report_field/text_label/instruction/generate_row_pencode(access, with_fields) - return "\[small\]\[i\][display_name()]\[/i\]\[/small\]" - -/datum/report_field/text_label/instruction/generate_nano_data(list/given_access) - var/dat = ..() - dat["name"] = "
              [display_name()]
              " - return dat - -//For headers between fields. -/datum/report_field/text_label/header/generate_row_pencode(access, with_fields) - return "\[h3][display_name()]\[/h3]" - -/datum/report_field/text_label/header/generate_nano_data(list/given_access) - var/dat = ..() - dat["name"] = "

              [display_name()]

              " - return dat - -//Basic text field, for short strings. -/datum/report_field/simple_text - value = "" - -/datum/report_field/simple_text/set_value(given_value) - if(istext(given_value)) - value = sanitize(given_value) || "" - -/datum/report_field/simple_text/ask_value(mob/user) - var/input = input(user, "[display_name()]:", "Form Input", html_decode(get_value())) as null|text - set_value(input) - -//Inteded for sizable text blocks. -/datum/report_field/pencode_text - value = "" - needs_big_box = 1 - -/datum/report_field/pencode_text/get_value() - return digitalPencode2html(value) - -/datum/report_field/pencode_text/set_value(given_value) - if(istext(given_value)) - value = sanitize(replacetext_char(given_value, "\n", "\[br\]"), MAX_PAPER_MESSAGE_LEN) || "" - -/datum/report_field/pencode_text/ask_value(mob/user) - set_value(input(user, "[display_name()] (You may use HTML paper formatting tags):", "Form Input", replacetext_char(html_decode(value), "\[br\]", "\n")) as null|message) - -//Uses hh:mm format for times. -/datum/report_field/time - value = "00:00" - -/datum/report_field/time/set_value(given_value) - value = sanitize_time(given_value, value, "hh:mm") - -/datum/report_field/time/ask_value(mob/user) - set_value(input(user, "[display_name()] (time as hh:mm):", "Form Input", get_value()) as null|text) - -//Uses YYYY-MM-DD format for dates. -/datum/report_field/date/New() - ..() - value = stationdate2text() - -/datum/report_field/date/set_value(given_value) - value = sanitize_time(given_value, value, "YEAR-MM-DD") - -/datum/report_field/date/ask_value(mob/user) - set_value(input(user, "[display_name()] (date as YYYY-MM-DD):", "Form Input", get_value()) as null|text) - -//Will prompt for numbers. -/datum/report_field/number - value = 0 - -/datum/report_field/number/set_value(given_value) - if(isnum(given_value)) - value = given_value - -/datum/report_field/number/ask_value(mob/user) - set_value(input(user, "[display_name()]:", "Form Input", get_value()) as null|num) - -//Gives a list of choices to pick one from. -/datum/report_field/options/proc/get_options() - -/datum/report_field/options/set_value(given_value) - if(given_value in get_options()) - value = given_value - -/datum/report_field/options/ask_value(mob/user) - set_value(input(user, "[display_name()] (select one):", "Form Input", get_value()) as null|anything in get_options()) - -//Yes or no field. -/datum/report_field/options/yes_no - value = "No" - -/datum/report_field/options/yes_no/get_options() - return list("Yes", "No") - -//Signature field; ask_value will obtain the user's signature. -/datum/report_field/signature/get_value() - return "[value]" - -/datum/report_field/signature/ask_value(mob/user) - set_value((user && user.real_name) ? user.real_name : "Anonymous") \ No newline at end of file diff --git a/code/modules/modular_computers/file_system/reports/report_field_fix.dm b/code/modules/modular_computers/file_system/reports/report_field_fix.dm deleted file mode 100644 index 56cf9bf548950..0000000000000 --- a/code/modules/modular_computers/file_system/reports/report_field_fix.dm +++ /dev/null @@ -1,25 +0,0 @@ -/datum/report_field/time/copy_value(datum/report_field/old_field) - . = ..() - if(old_field.owner in ntnet_global.available_reports) - value = stationtime2text() - -/datum/report_field/options/yes_no/ask_value(mob/user) - if(value == "No") - set_value("Yes") - else - set_value("No") - -/datum/report_field/options/yes_no/generate_row_pencode(access, with_fields) - if(!ignore_value) - . += "\[row\]\[cell\]\[b\][display_name()]:\[/b\]" - var/field = ((with_fields && can_edit) ? "\[field\]" : "" ) - if(!access || verify_access(access)) - . += (needs_big_box ? "\[/grid\][get_value()=="No"?"[field]":"Yes"]\[grid\]" : "\[cell\][get_value()=="No"?"[field]":"Yes"]") - else - . += "\[cell\]\[REDACTED\][field]" - else - . += "\[/grid\][display_name()]\[grid\]" - . = JOINTEXT(.) - -/datum/report_field/text_label/instruction/generate_row_pencode(access, with_fields) - return "\[/grid\]\[small\]\[i\][display_name()]\[/i\]\[/small\]\[grid\]" diff --git a/code/modules/modular_computers/hardware/_hardware.dm b/code/modules/modular_computers/hardware/_hardware.dm deleted file mode 100644 index 12ff5f481a103..0000000000000 --- a/code/modules/modular_computers/hardware/_hardware.dm +++ /dev/null @@ -1,108 +0,0 @@ -/obj/item/stock_parts/computer - name = "Hardware" - desc = "Unknown Hardware." - icon = 'icons/obj/modular_components.dmi' - part_flags = PART_FLAG_HAND_REMOVE - - /// If the hardware uses extra power, change this. - var/power_usage = 0 - /// If the hardware is turned off set this to FALSE. - var/enabled = TRUE - /// Prevent disabling for important component, like the HDD. - var/critical = 1 - /// Limits which devices can contain this component. 1: All, 2: Laptops/Consoles, 3: Consoles only - var/hardware_size = 1 - /// Current damage level - var/damage = 0 - /// Maximum damage level. - var/max_damage = 100 - /// "Malfunction" threshold. When damage exceeds this value the hardware piece will semi-randomly fail and do !!FUN!! things - var/damage_malfunction = 20 - /// "Failure" threshold. When damage exceeds this value the hardware piece will not work at all. - var/damage_failure = 50 - /// Chance of malfunction when the component is damaged - var/malfunction_probability = 10 - var/usage_flags = PROGRAM_ALL - /// Whether attackby will be passed on it even with a closed panel - var/external_slot - -/obj/item/stock_parts/computer/attackby(obj/item/W as obj, mob/living/user as mob) - // Multitool. Runs diagnostics - if(isMultitool(W)) - to_chat(user, "***** DIAGNOSTICS REPORT *****") - to_chat(user, jointext(diagnostics(), "\n")) - to_chat(user, "******************************") - return TRUE - // Nanopaste. Repair all damage if present for a single unit. - var/obj/item/stack/S = W - if(istype(S, /obj/item/stack/nanopaste)) - if(!damage) - to_chat(user, "\The [src] doesn't seem to require repairs.") - return TRUE - if(S.use(1)) - to_chat(user, "You apply a bit of \the [W] to \the [src]. It immediately repairs all damage.") - damage = 0 - return TRUE - // Cable coil. Works as repair method, but will probably require multiple applications and more cable. - if(isCoil(S)) - if(!damage) - to_chat(user, "\The [src] doesn't seem to require repairs.") - return TRUE - if(S.use(1)) - to_chat(user, "You patch up \the [src] with a bit of \the [W].") - take_damage(-10) - return TRUE - return ..() - - -/// Returns a list of lines containing diagnostic information for display. -/obj/item/stock_parts/computer/proc/diagnostics() - return list("Hardware Integrity Test... (Corruption: [damage]/[max_damage]) [damage > damage_failure ? "FAIL" : damage > damage_malfunction ? "WARN" : "PASS"]") - -/obj/item/stock_parts/computer/Initialize() - . = ..() - w_class = hardware_size - -/obj/item/stock_parts/computer/Destroy() - if(istype(loc, /obj/item/modular_computer)) - var/obj/item/modular_computer/C = loc - C.uninstall_component(null, src) - return ..() - -/// Handles damage checks -/obj/item/stock_parts/computer/proc/check_functionality() - // Turned off - if(!enabled) - return FALSE - // Too damaged to work at all. - if(damage >= damage_failure) - return FALSE - // Still working. Well, sometimes... - if(damage >= damage_malfunction) - if(prob(malfunction_probability)) - return FALSE - // Good to go. - return TRUE - -/obj/item/stock_parts/computer/examine(mob/user) - . = ..() - if(damage > damage_failure) - to_chat(user, "It seems to be severely damaged!") - else if(damage > damage_malfunction) - to_chat(user, "It seems to be damaged!") - else if(damage) - to_chat(user, "It seems to be slightly damaged.") - -/// Damages the component. Contains necessary checks. Negative damage "heals" the component. -/obj/item/stock_parts/computer/proc/take_damage(var/amount) - damage += round(amount) // We want nice rounded numbers here. - damage = clamp(damage, 0, max_damage) // Clamp the value. - -/// Called when component is disabled/enabled by the OS -/obj/item/stock_parts/computer/proc/on_disable() -/obj/item/stock_parts/computer/proc/on_enable(var/datum/extension/interactive/ntos/os) - -/obj/item/stock_parts/computer/proc/update_power_usage() - var/datum/extension/interactive/ntos/os = get_extension(loc, /datum/extension/interactive/ntos) - if(os) - os.recalc_power_usage() diff --git a/code/modules/modular_computers/hardware/ai_slot.dm b/code/modules/modular_computers/hardware/ai_slot.dm deleted file mode 100644 index 85b9fdddeda30..0000000000000 --- a/code/modules/modular_computers/hardware/ai_slot.dm +++ /dev/null @@ -1,82 +0,0 @@ -/// A wrapper that allows the computer to contain an inteliCard. -/obj/item/stock_parts/computer/ai_slot - name = "inteliCard slot" - desc = "An IIS interlink with connection uplinks that allow the device to interface with most common inteliCard models. Too large to fit into tablets. Uses a lot of power when active." - icon_state = "aislot" - hardware_size = 1 - critical = FALSE - power_usage = 100 - origin_tech = list(TECH_POWER = 2, TECH_DATA = 3) - external_slot = TRUE - var/obj/item/aicard/stored_card - var/power_usage_idle = 100 - var/power_usage_occupied = 2 KILOWATTS - -/obj/item/stock_parts/computer/ai_slot/update_power_usage() - if(!stored_card || !stored_card.carded_ai) - power_usage = power_usage_idle - else - power_usage = power_usage_occupied - ..() - -/obj/item/stock_parts/computer/ai_slot/attackby(obj/item/W, mob/user) - if(..()) - return TRUE - if(istype(W, /obj/item/aicard)) - if(stored_card) - to_chat(user, "\The [src] is already occupied.") - return - if(!user.unEquip(W, src)) - return - do_insert_ai(user, W) - return TRUE - if(isScrewdriver(W) && stored_card) - to_chat(user, "You manually remove \the [stored_card] from \the [src].") - do_eject_ai(user) - return TRUE - -/obj/item/stock_parts/computer/ai_slot/Destroy() - if(stored_card) - do_eject_ai() - return ..() - -/obj/item/stock_parts/computer/ai_slot/verb/eject_ai(mob/user) - set name = "Eject AI" - set category = "Object" - set src in view(1) - - if(!user) - user = usr - - if(!CanPhysicallyInteract(user)) - to_chat(user, "You can't reach it.") - return - - var/obj/item/stock_parts/computer/ai_slot/device = src - if (!istype(device)) - device = locate() in src - - if(!device.stored_card) - to_chat(user, "There is no intellicard connected to \the [src].") - return - - device.do_eject_ai(user) - -/obj/item/stock_parts/computer/ai_slot/proc/do_eject_ai(mob/user) - if (stored_card) - stored_card.dropInto(get_turf(loc)) - stored_card = null - - loc.verbs -= /obj/item/stock_parts/computer/ai_slot/verb/eject_ai - - update_power_usage() - -/obj/item/stock_parts/computer/ai_slot/proc/do_insert_ai(mob/user, obj/item/aicard/card) - if (stored_card) - do_eject_ai(user) - stored_card = card - - if(isobj(loc)) - loc.verbs += /obj/item/stock_parts/computer/ai_slot/verb/eject_ai - - update_power_usage() diff --git a/code/modules/modular_computers/hardware/battery_module.dm b/code/modules/modular_computers/hardware/battery_module.dm deleted file mode 100644 index 71b9e7c26841c..0000000000000 --- a/code/modules/modular_computers/hardware/battery_module.dm +++ /dev/null @@ -1,86 +0,0 @@ -/** - * This device is wrapper for actual power cell. I have decided to not use power - * cells directly as even low-end cells available on station have tremendeous capacity - * in comparsion. Higher tier cells would provide your device with nearly infinite - * battery life, which is something i want to avoid. - */ -/obj/item/stock_parts/computer/battery_module - name = "standard battery" - desc = "A standard power cell, commonly seen in high-end portable microcomputers or low-end laptops. It's rating is 120 Wh." - icon_state = "battery_normal" - critical = TRUE - malfunction_probability = 1 - origin_tech = list(TECH_POWER = 1, TECH_ENGINEERING = 1) - var/battery_rating = 120 - var/obj/item/cell/battery = null - -/obj/item/stock_parts/computer/battery_module/advanced - name = "advanced battery" - desc = "An advanced power cell, often used in most laptops. It is too large to be fitted into smaller devices. It's rating is 650 Wh." - icon_state = "battery_advanced" - origin_tech = list(TECH_POWER = 2, TECH_ENGINEERING = 2) - hardware_size = 2 - battery_rating = 650 - -/obj/item/stock_parts/computer/battery_module/super - name = "super battery" - desc = "A very advanced power cell, often used in high-end devices, or as uninterruptable power supply for important consoles or servers. It's rating is 820 Wh." - icon_state = "battery_super" - origin_tech = list(TECH_POWER = 3, TECH_ENGINEERING = 3) - hardware_size = 2 - battery_rating = 820 - -/obj/item/stock_parts/computer/battery_module/ultra - name = "ultra battery" - desc = "A very advanced large power cell. It's often used as uninterruptable power supply for critical consoles or servers. It's rating is 1100 Wh." - icon_state = "battery_ultra" - origin_tech = list(TECH_POWER = 5, TECH_ENGINEERING = 4) - hardware_size = 3 - battery_rating = 1100 - -/obj/item/stock_parts/computer/battery_module/micro - name = "micro battery" - desc = "A small power cell, commonly seen in most portable microcomputers. It's rating is 80 Wh." - icon_state = "battery_micro" - origin_tech = list(TECH_POWER = 2, TECH_ENGINEERING = 2) - battery_rating = 80 - -/obj/item/stock_parts/computer/battery_module/nano - name = "nano battery" - desc = "A tiny power cell, commonly seen in low-end portable microcomputers. It's rating is 60 Wh." - icon_state = "battery_nano" - origin_tech = list(TECH_POWER = 1, TECH_ENGINEERING = 1) - battery_rating = 60 - -// This is not intended to be obtainable in-game. Intended for adminbus and debugging purposes. -/obj/item/stock_parts/computer/battery_module/lambda - name = "lambda coil" - desc = "A very complex power source compatible with various computers. It is capable of providing power for nearly unlimited duration." - icon_state = "battery_lambda" - hardware_size = 1 - battery_rating = 9000 - -/obj/item/stock_parts/computer/battery_module/lambda/Initialize() - . = ..() - battery = new/obj/item/cell/infinite(src) - -/obj/item/stock_parts/computer/battery_module/diagnostics() - . = ..() - . += "Internal battery charge: [battery.charge]/[battery.maxcharge] CU" - -/obj/item/stock_parts/computer/battery_module/Initialize() - . = ..() - battery = new/obj/item/cell/standard(src) - battery.maxcharge = battery_rating - battery.charge = 0 - -/obj/item/stock_parts/computer/battery_module/Destroy() - QDEL_NULL(battery) - return ..() - -/obj/item/stock_parts/computer/battery_module/proc/charge_to_full() - if(battery) - battery.charge = battery.maxcharge - -/obj/item/stock_parts/computer/battery_module/get_cell() - return battery diff --git a/code/modules/modular_computers/hardware/card_slot.dm b/code/modules/modular_computers/hardware/card_slot.dm deleted file mode 100644 index 87bbaaba4397d..0000000000000 --- a/code/modules/modular_computers/hardware/card_slot.dm +++ /dev/null @@ -1,123 +0,0 @@ -/obj/item/stock_parts/computer/card_slot - name = "RFID card slot" - desc = "Slot that allows this computer to write data on RFID cards. Necessary for some programs to run properly." - power_usage = 10 //W - critical = FALSE - icon_state = "cardreader" - hardware_size = 1 - origin_tech = list(TECH_DATA = 2) - usage_flags = PROGRAM_ALL & ~PROGRAM_PDA - external_slot = TRUE - var/can_write = TRUE - var/can_broadcast = FALSE - - var/obj/item/card/id/stored_card = null - -/obj/item/stock_parts/computer/card_slot/diagnostics() - . = ..() - . += "[name] status: [stored_card ? "Card Inserted" : "Card Not Present"]\n" - if(stored_card) - . += "Testing card read...\n" - if( damage >= damage_failure ) - . += "...FAILURE!\n" - else - var/read_string_stability - if(check_functionality()) - read_string_stability = 100 - else - read_string_stability = 100 - malfunction_probability - . += "Registered Name: [stars(stored_card.registered_name, read_string_stability)]\n" - . += "Registered Assignment: [stars(stored_card.assignment, read_string_stability)]\n" - . += "Registered Rank: [stars(stored_card.rank, read_string_stability)]\n" - . += "Access Addresses Enabled: \n" - var/list/access_list = stored_card.GetAccess() - if(!access_list) // "NONE" for empty list - . += "NONE" - else - var/list_of_accesses = list() - for(var/access_id in access_list) - if(check_functionality()) // Read the access, or show "RD_ERR" - var/datum/access/access_information = get_access_by_id(access_id) - var/access_type = access_information.access_type - if(access_type == ACCESS_TYPE_NONE || access_type == ACCESS_TYPE_SYNDICATE || access_type == ACCESS_TYPE_CENTCOM) // Don't elaborate on these access types. - list_of_accesses += "UNKNOWN" // "UNKNOWN" - else - list_of_accesses += uppertext(access_information.desc) - else - list_of_accesses += "RD_ERR" - . += jointext(list_of_accesses, ", ") + "\n" // Should append a proper, comma separated list. - -/obj/item/stock_parts/computer/card_slot/proc/verb_eject_id() - set name = "Remove ID" - set category = "Object" - set src in view(1) - - if(!CanPhysicallyInteract(usr)) - to_chat(usr, "You can't reach it.") - return - - var/obj/item/stock_parts/computer/card_slot/device = src - if (!istype(device)) - device = locate() in src - - if(!device.stored_card) - if(usr) - to_chat(usr, "There is no card in \the [src]") - return - - device.eject_id(usr) - -/obj/item/stock_parts/computer/card_slot/proc/eject_id(mob/user) - if(!stored_card) - return FALSE - - if(user) - to_chat(user, "You remove [stored_card] from [src].") - user.put_in_hands(stored_card) - else - dropInto(loc) - stored_card = null - - var/datum/extension/interactive/ntos/os = get_extension(loc, /datum/extension/interactive/ntos) - if(os) - os.event_idremoved() - loc.verbs -= /obj/item/stock_parts/computer/card_slot/proc/verb_eject_id - return TRUE - -/obj/item/stock_parts/computer/card_slot/proc/insert_id(obj/item/card/id/I, mob/user) - if(!istype(I)) - return FALSE - - if(stored_card) - to_chat(user, "You try to insert [I] into [src], but its ID card slot is occupied.") - return FALSE - - if(user && !user.unEquip(I, src)) - return FALSE - - stored_card = I - to_chat(user, "You insert [I] into [src].") - if(isobj(loc)) - loc.verbs |= /obj/item/stock_parts/computer/card_slot/proc/verb_eject_id - return TRUE - -/obj/item/stock_parts/computer/card_slot/attackby(obj/item/card/id/I, mob/living/user) - if(!istype(I)) - return ..() - insert_id(I, user) - return TRUE - -/obj/item/stock_parts/computer/card_slot/broadcaster // read only - name = "RFID card broadcaster" - desc = "Reads and broadcasts the RFID signal of an inserted card." - can_write = FALSE - can_broadcast = TRUE - - usage_flags = PROGRAM_PDA - -/obj/item/stock_parts/computer/card_slot/Destroy() - if (loc) - loc.verbs -= /obj/item/stock_parts/computer/card_slot/proc/verb_eject_id - if(stored_card) - QDEL_NULL(stored_card) - return ..() diff --git a/code/modules/modular_computers/hardware/hard_drive.dm b/code/modules/modular_computers/hardware/hard_drive.dm deleted file mode 100644 index bb427cebd1f17..0000000000000 --- a/code/modules/modular_computers/hardware/hard_drive.dm +++ /dev/null @@ -1,254 +0,0 @@ -/** - * Important! Avoid editing the content of file objects already saved on a disk, - * as this bypasses checks for anything that might prevent saving. Instead, - * clone the file, make the changes to the clone, and attempt to save the clone - * with the same filename using save_file(). Additional useful procs for data - * files in particular are also available. - */ -/obj/item/stock_parts/computer/hard_drive - name = "basic hard drive" - desc = "A small power efficient solid state drive, with 128GQ of storage capacity for use in basic computers where power efficiency is desired." - power_usage = 25 - icon_state = "hdd_normal" - hardware_size = 1 - origin_tech = list(TECH_DATA = 1, TECH_ENGINEERING = 1) - - var/max_capacity = 128 - var/used_capacity = 0 - /// List of stored files on this drive. DO NOT MODIFY DIRECTLY! - var/list/stored_files = list() - /// Whether drive is protected against changes - var/read_only = FALSE - -/obj/item/stock_parts/computer/hard_drive/advanced - name = "advanced hard drive" - desc = "A small hybrid hard drive with 256GQ of storage capacity for use in higher grade computers where balance between power efficiency and capacity is desired." - max_capacity = 256 - origin_tech = list(TECH_DATA = 2, TECH_ENGINEERING = 2) - power_usage = 50 - icon_state = "hdd_advanced" - hardware_size = 2 - -/obj/item/stock_parts/computer/hard_drive/super - name = "super hard drive" - desc = "A small hard drive with 512GQ of storage capacity for use in cluster storage solutions where capacity is more important than power efficiency." - max_capacity = 512 - origin_tech = list(TECH_DATA = 3, TECH_ENGINEERING = 3) - power_usage = 100 - icon_state = "hdd_super" - hardware_size = 2 - -/obj/item/stock_parts/computer/hard_drive/cluster - name = "cluster hard drive" - desc = "A large storage cluster consisting of multiple hard drives for usage in high capacity storage systems. Has capacity of 2048 GQ." - power_usage = 500 - origin_tech = list(TECH_DATA = 4, TECH_ENGINEERING = 4) - max_capacity = 2048 - icon_state = "hdd_cluster" - hardware_size = 3 - -/obj/item/stock_parts/computer/hard_drive/small - name = "small hard drive" - desc = "A small highly efficient solid state drive for portable devices." - power_usage = 10 - origin_tech = list(TECH_DATA = 2, TECH_ENGINEERING = 2) - max_capacity = 64 - icon_state = "hdd_small" - hardware_size = 1 - -/obj/item/stock_parts/computer/hard_drive/micro - name = "micro hard drive" - desc = "A small micro hard drive for portable devices." - power_usage = 2 - origin_tech = list(TECH_DATA = 1, TECH_ENGINEERING = 1) - max_capacity = 32 - icon_state = "hdd_micro" - hardware_size = 1 - -/obj/item/stock_parts/computer/hard_drive/Initialize() - . = ..() - install_default_programs() - recalculate_size() - -/obj/item/stock_parts/computer/hard_drive/diagnostics() - . = ..() - // 999 is a byond limit that is in place. It's unlikely someone will reach that many files anyway, since you would sooner run out of space. - . += "NT-NFS File Table Status: [stored_files.len]/999" - . += "Storage capacity: [used_capacity]/[max_capacity]GQ" - . += "Read-only mode: [(read_only ? "ON" : "OFF")]" - -/// Tries to find the file by filename. Returns null on failure -/obj/item/stock_parts/computer/hard_drive/proc/find_file_by_name(filename) - if(!filename) - return - if(!check_functionality()) - return - for(var/datum/computer_file/F in stored_files) - if(F.filename == filename) - return F - -/// Use this proc to add Data file to the drive. -/obj/item/stock_parts/computer/hard_drive/proc/create_data_file(filename, data, file_type = /datum/computer_file/data, list/metadata) - if(!filename) - return - - var/datum/computer_file/data/F = new file_type(md = metadata) - F.filename = filename - F.stored_data = data - F.calculate_size() - return create_file(F) - -/// Use this proc to save Data file to the drive. -/obj/item/stock_parts/computer/hard_drive/proc/save_data_file(filename, data, file_type = /datum/computer_file/data, list/metadata) - if(!filename) - return - - var/datum/computer_file/data/EF = find_file_by_name(filename) - if(!istype(EF)) - return create_data_file(filename, data, file_type, metadata) - - if(EF.read_only) - return - - EF = EF.clone() - EF.stored_data = data - EF.metadata = metadata && metadata.Copy() - EF.calculate_size() - return save_file(EF) - -/// Use this proc to add data to a Data file on the drive. Unlike using save_data_file directly, this enforces exact file type match with existing file -/obj/item/stock_parts/computer/hard_drive/proc/update_data_file(filename, new_data, file_type = /datum/computer_file/data, list/metadata, replace_content = FALSE) - if(!filename || !new_data) - return - - var/datum/computer_file/data/F = find_file_by_name(filename) - if(!istype(F, file_type)) - return create_data_file(filename, new_data, file_type, metadata) - else if(F.type != file_type) - return - else - return save_data_file(filename, (replace_content ? new_data : F.stored_data + new_data), file_type, metadata) - -/// Use this proc to add file to the drive. Contains necessary sanity checks. -/obj/item/stock_parts/computer/hard_drive/proc/create_file(datum/computer_file/F) - if(!try_create_file(F)) - return - F.holder = src - stored_files += F - recalculate_size() - return F - -/// Use this proc to add file or update it if it already exists. Contains necessary sanity checks. -/obj/item/stock_parts/computer/hard_drive/proc/save_file(datum/computer_file/F) - var/datum/computer_file/EF = find_file_by_name(F.filename) - if(!istype(EF)) - return create_file(F) - - if(!can_write_file(F)) - return - if(!can_store_file(F.size, EF.size)) - return - if(F in stored_files) - return - - EF.holder = null - stored_files -= EF - F.holder = src - stored_files += F - recalculate_size() - return F - -/// Use this proc to remove file from the drive. Contains necessary sanity checks. -/obj/item/stock_parts/computer/hard_drive/proc/remove_file(datum/computer_file/F) - . = FALSE - if(!can_write_file(F)) - return - if(!(F in stored_files)) - return - - F.holder = null - stored_files -= F - recalculate_size() - return TRUE - -/// Use this proc to rename file on the drive. Contains necessary sanity checks. -/obj/item/stock_parts/computer/hard_drive/proc/rename_file(datum/computer_file/F, filename_new) - . = FALSE - if(!can_write_file(F)) - return - if(!validate_name(filename_new)) - return - - var/datum/computer_file/EF = find_file_by_name(filename_new) - if(istype(EF)) - return - - F.filename = filename_new - return TRUE - -/// Use this proc to check if the file can be created. -/obj/item/stock_parts/computer/hard_drive/proc/try_create_file(datum/computer_file/F) - . = FALSE - if(!can_write_file(F)) - return - if(!can_store_file(F.size)) - return - if(!validate_name(F.filename)) - return - if(F in stored_files) - return - - var/datum/computer_file/EF = find_file_by_name(F.filename) - if(istype(EF)) - return - - return TRUE - -/// Loops through all stored files and recalculates used_capacity of this drive -/obj/item/stock_parts/computer/hard_drive/proc/recalculate_size() - var/total_size = 0 - for(var/datum/computer_file/F in stored_files) - total_size += F.size - used_capacity = total_size - -/// Checks whether there is space to store file on the hard drive. -/obj/item/stock_parts/computer/hard_drive/proc/can_store_file(size = 1, replaced_size = 0) - // In the unlikely event someone manages to create that many files. - // BYOND is acting weird with numbers above 999 in loops (infinite loop prevention) - if(stored_files.len >= 999) - return FALSE - if(used_capacity + size - replaced_size > max_capacity) - return FALSE - return TRUE - -/// Checks whether the file can be written to the drive. -/obj/item/stock_parts/computer/hard_drive/proc/can_write_file(datum/computer_file/F) - if(!istype(F)) - return FALSE - if(!check_functionality()) - return FALSE - if(read_only) - return FALSE - return TRUE - -/// Validates filename -/obj/item/stock_parts/computer/hard_drive/proc/validate_name(filename) - var/list/badchars = list("/","\\",":","*","?","\"","<",">","|","#",".",","," ") - for(var/char in badchars) - if(findtext(filename, char)) - return FALSE - return TRUE - -/obj/item/stock_parts/computer/hard_drive/check_functionality() - return (..() && stored_files) - -/// Installs default programs on the drive -/obj/item/stock_parts/computer/hard_drive/proc/install_default_programs() - create_file(new/datum/computer_file/program/computerconfig(src)) // Computer configuration utility, allows hardware control and displays more info than status bar - create_file(new/datum/computer_file/program/ntnetdownload(src)) // NTNet Downloader Utility, allows users to download more software from NTNet repository - create_file(new/datum/computer_file/program/filemanager(src)) // File manager, allows text editor functions and basic file manipulation. - -/obj/item/stock_parts/computer/hard_drive/Destroy() - stored_files = null - return ..() - diff --git a/code/modules/modular_computers/hardware/nano_printer.dm b/code/modules/modular_computers/hardware/nano_printer.dm deleted file mode 100644 index f76d19fb5eb45..0000000000000 --- a/code/modules/modular_computers/hardware/nano_printer.dm +++ /dev/null @@ -1,77 +0,0 @@ -/obj/item/stock_parts/computer/nano_printer - name = "nano printer" - desc = "Small integrated printer with paper recycling module." - power_usage = 50 - origin_tech = list(TECH_DATA = 2, TECH_ENGINEERING = 2) - critical = FALSE - icon_state = "printer" - hardware_size = 1 - var/stored_paper = 50 - var/max_paper = 50 - var/last_print - var/print_language = LANGUAGE_HUMAN_EURO - -/obj/item/stock_parts/computer/nano_printer/diagnostics() - . = ..() - . += "Paper buffer level: [stored_paper]/[max_paper]" - . += "Printer language: [print_language]" - -/obj/item/stock_parts/computer/nano_printer/proc/print_text(text_to_print, paper_title = null, paper_type = /obj/item/paper, list/md = null) - . = FALSE - if(printer_ready()) - last_print = world.time - // Damaged printer causes the resulting paper to be somewhat harder to read. - if(damage > damage_malfunction) - text_to_print = stars(text_to_print, 100-malfunction_probability) - var/turf/T = get_turf(src) - new paper_type(T, text_to_print, paper_title, md, print_language) - stored_paper-- - playsound(T, "sound/machines/dotprinter.ogg", 30) - T.visible_message("\The [src] prints out a paper.") - return TRUE - -/obj/item/stock_parts/computer/nano_printer/proc/printer_ready() - if(!stored_paper) - return FALSE - if(!enabled) - return FALSE - if(!check_functionality()) - return FALSE - if(world.time < last_print + 1 SECOND) - return FALSE - return TRUE - -/obj/item/stock_parts/computer/nano_printer/attackby(obj/item/W as obj, mob/user as mob) - if(istype(W, /obj/item/paper)) - if(stored_paper >= max_paper) - to_chat(user, "You try to add \the [W] into \the [src], but its paper bin is full.") - return - - to_chat(user, "You insert \the [W] into [src].") - qdel(W) - stored_paper++ - else if(istype(W, /obj/item/paper_bundle)) - var/obj/item/paper_bundle/B = W - var/num_of_pages_added = 0 - if(stored_paper >= max_paper) - to_chat(user, "You try to add \the [W] into \the [src], but its paper bin is full.") - return - for(var/obj/item/bundleitem in B) //loop through items in bundle - if(istype(bundleitem, /obj/item/paper)) //if item is paper (and not photo), add into the bin - B.pages.Remove(bundleitem) - qdel(bundleitem) - num_of_pages_added++ - stored_paper++ - if(stored_paper >= max_paper) //check if the printer is full yet - to_chat(user, "The printer has been filled to full capacity.") - break - if(B.pages.len == 0) //if all its papers have been put into the printer, delete bundle - qdel(W) - else if(B.pages.len == 1) //if only one item left, extract item and delete the one-item bundle - user.drop_from_inventory(B) - user.put_in_hands(B[1]) - qdel(B) - else //if at least two items remain, just update the bundle icon - B.update_icon() - to_chat(user, "You add [num_of_pages_added] papers from \the [W] into \the [src].") - return diff --git a/code/modules/modular_computers/hardware/network_card.dm b/code/modules/modular_computers/hardware/network_card.dm deleted file mode 100644 index 0ded7a947106c..0000000000000 --- a/code/modules/modular_computers/hardware/network_card.dm +++ /dev/null @@ -1,161 +0,0 @@ -var/global/ntnet_card_uid = 1 - -/obj/item/stock_parts/computer/network_card - name = "basic NTNet network card" - desc = "A basic network card for usage with standard NTNet frequencies." - power_usage = 50 - origin_tech = list(TECH_DATA = 2, TECH_ENGINEERING = 1) - critical = FALSE - icon_state = "netcard_basic" - hardware_size = 1 - malfunction_probability = 1 - - /// Identification ID. Technically MAC address of this device. Can't be changed by user. - var/identification_id = null - /// Identification string, technically nickname seen in the network. Can be set by user. - var/identification_string = "" - - /// Long-range cards have stronger connections, letting them reach relays from connected Z-levels. - var/long_range = 0 - /// Hard-wired, therefore always on, ignores NTNet wireless checks. - var/ethernet = 0 - /// If set, uses the value to funnel connections through another network card. - var/proxy_id - -/obj/item/stock_parts/computer/network_card/advanced - name = "advanced NTNet network card" - desc = "An advanced network card for usage with standard NTNet frequencies. It's transmitter is strong enough to connect even when far away." - long_range = 1 - origin_tech = list(TECH_DATA = 4, TECH_ENGINEERING = 2) - power_usage = 100 // Better range but higher power usage. - icon_state = "netcard_advanced" - hardware_size = 1 - -/obj/item/stock_parts/computer/network_card/wired - name = "wired NTNet network card" - desc = "An advanced network card for usage with standard NTNet frequencies. This one also supports wired connection." - ethernet = 1 - origin_tech = list(TECH_DATA = 5, TECH_ENGINEERING = 3) - power_usage = 100 // Better range but higher power usage. - icon_state = "netcard_ethernet" - hardware_size = 3 - -/obj/item/stock_parts/computer/network_card/diagnostics() - . = ..() - . += "NIX Unique ID: [identification_id]" - . += "NIX User Tag: [identification_string]" - . += "Supported protocols:" - . += "511.m SFS (Subspace) - Standard Frequency Spread" - if(long_range) - . += "511.n WFS/HB (Subspace) - Wide Frequency Spread/High Bandiwdth" - if(ethernet) - . += "OpenEth (Physical Connection) - Physical network connection port" - -/obj/item/stock_parts/computer/network_card/Initialize() - . = ..() - identification_id = ntnet_card_uid - ntnet_card_uid++ - -/obj/item/stock_parts/computer/network_card/Destroy() - ntnet_global.unregister(identification_id) - return ..() - -/obj/item/stock_parts/computer/network_card/proc/set_identification_string(identificator) - if(identificator && validate_identificator(identificator)) - identification_string = "[identificator]" - return TRUE - else if(!identificator) - identification_string = "" - return TRUE - else - return FALSE - -/// Validates identificator name -/obj/item/stock_parts/computer/network_card/proc/validate_identificator(identificator) - var/list/badchars = list("/","\\",":","*","?","\"","<",">","|","#",","," ") - for(var/char in badchars) - if(findtext(identificator, char)) - return FALSE - return TRUE - -/// Returns a list of all network cards this connection passes through before terminating. Argument is a safety parameter for internal calls. Don't use manually. -/obj/item/stock_parts/computer/network_card/proc/get_route(list/routed_through) - . = !isnull(routed_through) ? routed_through : list() - if((src in .)) - return - . += src - if(proxy_id) - var/datum/extension/interactive/ntos/comp = ntnet_global.get_os_by_nid(proxy_id) - if(comp && comp.on) - var/obj/item/stock_parts/computer/network_card/nc = comp.get_component(PART_NETWORK) - if(nc && nc.get_signal_direct()) - return nc.get_route(.) - -/obj/item/stock_parts/computer/network_card/proc/is_banned() - return ntnet_global.check_banned(identification_id) - -/// Returns the signal strength directly to NTNet for this card. 0 - No signal, 1 - Low signal, 2 - High signal. 3 - Wired Connection -/obj/item/stock_parts/computer/network_card/proc/get_signal_direct() - . = 0 - if(!check_functionality() || !ntnet_global || is_banned()) - return - if(!ntnet_global.check_function() && !ethernet) - return - var/strength = 1 - if(ethernet) - strength = 3 - else if(long_range) - strength = 2 - var/turf/T = get_turf(src) - if(!istype(T)) //no reception in nullspace - return - if(T.z in GLOB.using_map.station_levels) // Computer is on station. Low/High signal depending on what type of network card you have - . = strength - else if(T.z in GLOB.using_map.contact_levels) // Not on station, but close enough for radio signal to travel, or long cables in case of ethernet - . = strength - 1 - -/// Returns the resolved signal strength, accounting for proxies -/obj/item/stock_parts/computer/network_card/proc/get_signal(specific_action = 0) - var/list/cards = get_route() - for(var/i = cards.len; i > 0; i--) - var/obj/item/stock_parts/computer/network_card/nc = cards[i] - if(!nc) - return 0 - // Some extra checks for the last card in the chain - if(i == cards.len) - if(nc.proxy_id) // We have an unresolved proxy chain. No signal - return 0 - if(specific_action && ntnet_global && !ntnet_global.check_capability(specific_action)) - if(!nc.ethernet) // If capabilities are restricted for wireless connections, and public-facing network card is not ethernet, then no signal - return 0 - . = isnull(.) ? nc.get_signal_direct() : min(., nc.get_signal_direct()) - if(!.) // We don't need to continue if there is no signal - return - -/// Returns the actual string identifier of this network card -/obj/item/stock_parts/computer/network_card/proc/get_network_tag_direct() - return "[(identification_string ? identification_string : "Unidentified")] (NID [identification_id])" - -/// Returns the resolved string identifier of this network card -/obj/item/stock_parts/computer/network_card/proc/get_network_tag() - . = "Unable to resolve external NID" - var/list/cards = get_route() - var/obj/item/stock_parts/computer/network_card/last_card = cards[cards.len] - if(last_card && !last_card.proxy_id) - return last_card.get_network_tag_direct() - -/obj/item/stock_parts/computer/network_card/on_disable() - ntnet_global.unregister(identification_id) - -/obj/item/stock_parts/computer/network_card/on_enable(datum/extension/interactive/ntos/os) - ntnet_global.register(identification_id, os) - -/obj/item/stock_parts/computer/network_card/on_install(obj/machinery/machine) - ..() - var/datum/extension/interactive/ntos/os = get_extension(machine, /datum/extension/interactive/ntos) - if(os) - on_enable(os) - -/obj/item/stock_parts/computer/network_card/on_uninstall(obj/machinery/machine, temporary = FALSE) - ..() - on_disable() diff --git a/code/modules/modular_computers/hardware/portable_hard_drive.dm b/code/modules/modular_computers/hardware/portable_hard_drive.dm deleted file mode 100644 index 38221ca132f48..0000000000000 --- a/code/modules/modular_computers/hardware/portable_hard_drive.dm +++ /dev/null @@ -1,39 +0,0 @@ -/// These are basically USB data sticks and may be used to transfer files between devices -/obj/item/stock_parts/computer/hard_drive/portable - name = "basic data crystal" - desc = "Small crystal with imprinted photonic circuits that can be used to store data. Its capacity is 16 GQ." - power_usage = 10 - icon_state = "flashdrive_basic" - hardware_size = 1 - max_capacity = 16 - origin_tech = list(TECH_DATA = 1) - -/obj/item/stock_parts/computer/hard_drive/portable/advanced - name = "advanced data crystal" - desc = "Small crystal with imprinted high-density photonic circuits that can be used to store data. Its capacity is 64 GQ." - power_usage = 20 - icon_state = "flashdrive_advanced" - hardware_size = 1 - max_capacity = 64 - origin_tech = list(TECH_DATA = 2) - -/obj/item/stock_parts/computer/hard_drive/portable/super - name = "super data crystal" - desc = "Small crystal with imprinted ultra-density photonic circuits that can be used to store data. Its capacity is 256 GQ." - power_usage = 40 - icon_state = "flashdrive_super" - hardware_size = 1 - max_capacity = 256 - origin_tech = list(TECH_DATA = 4) - -/obj/item/stock_parts/computer/hard_drive/portable/install_default_programs() - return - -/// For idiot merchants who wipe the program from their console. -/obj/item/stock_parts/computer/hard_drive/portable/merchant - name = "merchant_list_1155_CRACKZ_1155_no_keygen_repack" - desc = "An obviously pirated copy of well-known trading software." - -/obj/item/stock_parts/computer/hard_drive/portable/merchant/install_default_programs() - create_file(new/datum/computer_file/program/merchant(src)) - read_only = TRUE // Need to write the program to the drive before we make it read-only diff --git a/code/modules/modular_computers/hardware/processor_unit.dm b/code/modules/modular_computers/hardware/processor_unit.dm deleted file mode 100644 index 26d4ef3395f74..0000000000000 --- a/code/modules/modular_computers/hardware/processor_unit.dm +++ /dev/null @@ -1,40 +0,0 @@ -/// CPU that allows the computer to run programs. Better CPUs are obtainable via research and can run more programs at once. -/obj/item/stock_parts/computer/processor_unit - name = "standard processor" - desc = "A standard CPU used in most computers. It can run up to three programs simultaneously." - icon_state = "cpu_normal" - hardware_size = 2 - power_usage = 100 - critical = TRUE - malfunction_probability = 1 - origin_tech = list(TECH_DATA = 3, TECH_ENGINEERING = 2) - - /// Used for DDoS speed calculations and determining how many simultaneous programs that can be run - var/processing_power = 2 - -/obj/item/stock_parts/computer/processor_unit/small - name = "standard microprocessor" - desc = "A standard miniaturised CPU used in portable devices. It can run up to two programs simultaneously." - icon_state = "cpu_small" - hardware_size = 1 - power_usage = 25 - processing_power = 1 - origin_tech = list(TECH_DATA = 2, TECH_ENGINEERING = 2) - -/obj/item/stock_parts/computer/processor_unit/photonic - name = "photonic processor" - desc = "An advanced experimental CPU that uses photonic core instead of regular circuitry. It is more power efficient than its elecron analog. It can run up to five programs simultaneously." - icon_state = "cpu_normal_photonic" - hardware_size = 2 - power_usage = 50 - processing_power = 4 - origin_tech = list(TECH_DATA = 5, TECH_ENGINEERING = 4) - -/obj/item/stock_parts/computer/processor_unit/photonic/small - name = "photonic microprocessor" - desc = "An advanced miniaturised CPU for use in portable devices. It uses photonic core instead of regular circuitry. It is more power efficient than its elecron analog. It can run up to three programs simultaneously." - icon_state = "cpu_small_photonic" - hardware_size = 1 - power_usage = 10 - processing_power = 2 - origin_tech = list(TECH_DATA = 4, TECH_ENGINEERING = 3) diff --git a/code/modules/modular_computers/hardware/scanners/scanner.dm b/code/modules/modular_computers/hardware/scanners/scanner.dm deleted file mode 100644 index 4f2403c2cb6dd..0000000000000 --- a/code/modules/modular_computers/hardware/scanners/scanner.dm +++ /dev/null @@ -1,91 +0,0 @@ -/// This is the generic parent class, which doesn't actually do anything. -/obj/item/stock_parts/computer/scanner - name = "scanner module" - desc = "A generic scanner module. This one doesn't seem to do anything." - power_usage = 50 - icon_state = "printer" - hardware_size = 1 - critical = FALSE - origin_tech = list(TECH_DATA = 2, TECH_ENGINEERING = 2) - - /// A program type that the scanner interfaces with and attempts to install on insertion. - var/datum/computer_file/program/scanner/driver_type = /datum/computer_file/program/scanner - /// A driver program which has been set up to interface with the scanner. - var/datum/computer_file/program/scanner/driver - /// Whether scans can be run from the program directly. - var/can_run_scan = FALSE - /// Whether the scan output can be viewed in the program. - var/can_view_scan = TRUE - /// Whether the scan output can be saved to disk. - var/can_save_scan = TRUE - -/obj/item/stock_parts/computer/scanner/Destroy() - do_before_uninstall() - . = ..() - -/obj/item/stock_parts/computer/scanner/proc/do_after_install(user, atom/device) - var/datum/extension/interactive/ntos/os = get_extension(device, /datum/extension/interactive/ntos) - if(!driver_type || !device || !os) - return FALSE - if(!os.has_component(PART_HDD)) - to_chat(user, "Driver installation for \the [src] failed: \the [device] lacks a hard drive.") - return FALSE - var/datum/computer_file/program/scanner/old_driver = os.get_file(initial(driver_type.filename)) - if(istype(old_driver)) - to_chat(user, "Drivers found on \the [device]; \the [src] has been installed.") - old_driver.connect_scanner() - return TRUE - var/datum/computer_file/program/scanner/driver_file = new driver_type - if(!os.save_file(driver_file)) - to_chat(user, "Driver installation for \the [src] failed: file could not be written to the hard drive.") - return FALSE - to_chat(user, "Driver software for \the [src] has been installed on \the [device].") - driver_file.computer = os - driver_file.connect_scanner() - return TRUE - -/obj/item/stock_parts/computer/scanner/proc/do_before_uninstall() - if(driver) - driver.disconnect_scanner() - if(driver) //In case the driver doesn't find it. - driver = null - -/obj/item/stock_parts/computer/scanner/proc/run_scan(mob/user, datum/computer_file/program/scanner/program) //For scans done from the software. - -/obj/item/stock_parts/computer/scanner/proc/do_on_afterattack(mob/user, atom/target, proximity) - -/obj/item/stock_parts/computer/scanner/attackby(obj/W, mob/living/user) - do_on_attackby(user, W) - // Nanopaste. Repair all damage if present for a single unit. - var/obj/item/stack/S = W - if (istype(S, /obj/item/stack/nanopaste)) - if (!damage) - to_chat(user, "\The [src] doesn't seem to require repairs.") - return TRUE - if (S.use(1)) - to_chat(user, "You apply a bit of \the [W] to \the [src]. It immediately repairs all damage.") - damage = 0 - return TRUE - // Cable coil. Works as repair method, but will probably require multiple applications and more cable. - if (isCoil(S)) - if (!damage) - to_chat(user, "\The [src] doesn't seem to require repairs.") - return TRUE - if (S.use(1)) - to_chat(user, "You patch up \the [src] with a bit of \the [W].") - take_damage(-10) - return TRUE - return ..() - -/obj/item/stock_parts/computer/scanner/proc/do_on_attackby(mob/user, atom/target) - -/obj/item/stock_parts/computer/scanner/proc/can_use_scanner(mob/user, atom/target, proximity = TRUE) - if(!check_functionality()) - return FALSE - if(user.incapacitated()) - return FALSE - if(!user.IsAdvancedToolUser()) - return FALSE - if(!proximity) - return FALSE - return TRUE diff --git a/code/modules/modular_computers/hardware/scanners/scanner_atmos.dm b/code/modules/modular_computers/hardware/scanners/scanner_atmos.dm deleted file mode 100644 index e2f9ce7f60f86..0000000000000 --- a/code/modules/modular_computers/hardware/scanners/scanner_atmos.dm +++ /dev/null @@ -1,42 +0,0 @@ -/obj/item/stock_parts/computer/scanner/atmos - name = "atmospheric scanner module" - desc = "An atmospheric scanner module. It can scan the surroundings and report the composition of gases." - can_run_scan = 1 - -/obj/item/stock_parts/computer/scanner/atmos/can_use_scanner(mob/user, atom/target, proximity = TRUE) - if(!..()) - return 0 - if(!target.simulated) - return 0 - return 1 - -/obj/item/stock_parts/computer/scanner/atmos/run_scan(mob/user, datum/computer_file/program/scanner/program) - program.data_buffer = html2pencode(scan_data(user, user.loc)) || program.data_buffer - -/obj/item/stock_parts/computer/scanner/atmos/do_on_afterattack(mob/user, atom/target, proximity) - if (!can_use_scanner(user, target, proximity)) - return - user.visible_message( - SPAN_NOTICE("\The [user] runs \the [src] over \the [target]."), - SPAN_NOTICE("You run \the [src] over \the [target]."), - range = 2 - ) - var/data = scan_data(user, target, proximity) - if (!data) - return - if (driver?.using_scanner) - driver.data_buffer = html2pencode(data) - SSnano.update_uis(driver.NM) - -/obj/item/stock_parts/computer/scanner/atmos/proc/scan_data(mob/user, atom/target, proximity = TRUE) - if(!can_use_scanner(user, target, proximity)) - return 0 - var/air_contents = target.return_air() - if(!air_contents) - return 0 - return atmosanalyzer_scan(target, air_contents) - -/obj/item/stock_parts/computer/scanner/atmos/can_use_scanner(mob/user, atom/target, proximity) - if (!isobj(target) && !isturf(target)) - return FALSE - return ..() diff --git a/code/modules/modular_computers/hardware/scanners/scanner_medical.dm b/code/modules/modular_computers/hardware/scanners/scanner_medical.dm deleted file mode 100644 index c78aeedc4b7e4..0000000000000 --- a/code/modules/modular_computers/hardware/scanners/scanner_medical.dm +++ /dev/null @@ -1,13 +0,0 @@ -/obj/item/stock_parts/computer/scanner/medical - name = "medical scanner module" - desc = "A medical scanner module. It can be used to scan patients and display medical information." - -/obj/item/stock_parts/computer/scanner/medical/do_on_afterattack(mob/user, atom/target, proximity) - if(!can_use_scanner(user, target, proximity)) - return - - var/dat = medical_scan_action(target, user, loc, 1) - - if(dat && driver && driver.using_scanner) - driver.data_buffer = html2pencode(dat) - SSnano.update_uis(driver.NM) diff --git a/code/modules/modular_computers/hardware/scanners/scanner_paper.dm b/code/modules/modular_computers/hardware/scanners/scanner_paper.dm deleted file mode 100644 index f36ee61be71af..0000000000000 --- a/code/modules/modular_computers/hardware/scanners/scanner_paper.dm +++ /dev/null @@ -1,36 +0,0 @@ -/obj/item/stock_parts/computer/scanner/paper - name = "paper scanner module" - desc = "A paper scanning module. It can scan writing and save it to a file." - external_slot = TRUE - -/obj/item/stock_parts/computer/scanner/paper/can_use_scanner(mob/user, obj/item/paper/target, proximity = TRUE) - if(!..()) - return 0 - if(!istype(target)) - return 0 - return 1 - -/obj/item/stock_parts/computer/scanner/paper/do_on_afterattack(mob/user, obj/item/paper/target, proximity) - if(!driver || !driver.using_scanner) - return - if(!can_use_scanner(user, target, proximity)) - return - var/data = html2pencode(target.info) - if(!data) - return - if(target.metadata) - driver.metadata_buffer = target.metadata.Copy() - driver.paper_type = target.type - - driver.scan_file_type = target.scan_file_type - - if(target.type == /obj/item/paper/bodyscan) - driver.data_buffer = display_medical_data(target.metadata.Copy(),user.get_skill_value(SKILL_MEDICAL), TRUE) - else - driver.data_buffer = data - - to_chat(user, "You scan \the [target] with [src].") - SSnano.update_uis(driver.NM) - -/obj/item/stock_parts/computer/scanner/paper/do_on_attackby(mob/user, atom/target) - do_on_afterattack(user, target, TRUE) \ No newline at end of file diff --git a/code/modules/modular_computers/hardware/scanners/scanner_reagent.dm b/code/modules/modular_computers/hardware/scanners/scanner_reagent.dm deleted file mode 100644 index fb70f5fd89598..0000000000000 --- a/code/modules/modular_computers/hardware/scanners/scanner_reagent.dm +++ /dev/null @@ -1,19 +0,0 @@ -/obj/item/stock_parts/computer/scanner/reagent - name = "reagent scanner module" - desc = "A reagent scanner module. It can scan and analyze various reagents." - -/obj/item/stock_parts/computer/scanner/reagent/can_use_scanner(mob/user, obj/target, proximity = TRUE) - if(!..(user, target, proximity)) - return 0 - if(!istype(target)) - return 0 - return 1 - -/obj/item/stock_parts/computer/scanner/reagent/do_on_afterattack(mob/user, obj/target, proximity) - if(!can_use_scanner(user, target, proximity)) - return - var/dat = reagent_scan_results(target) - if(driver && driver.using_scanner) - driver.data_buffer = jointext(dat, "\[br\]") - SSnano.update_uis(driver.NM) - to_chat(user, "[jointext(dat, "
              ")]
              ") \ No newline at end of file diff --git a/code/modules/modular_computers/hardware/scanners/scanner_robotic.dm b/code/modules/modular_computers/hardware/scanners/scanner_robotic.dm deleted file mode 100644 index ff531f94ea3ad..0000000000000 --- a/code/modules/modular_computers/hardware/scanners/scanner_robotic.dm +++ /dev/null @@ -1,13 +0,0 @@ -/obj/item/stock_parts/computer/scanner/robotic - name = "robotic scanner module" - desc = "A robotic scanner module. It is used to analyse the integrity of synthetic components." - -/obj/item/stock_parts/computer/scanner/robotic/do_on_afterattack(mob/user, atom/target, proximity) - if(!can_use_scanner(user, target, proximity)) - return - - var/scan_type = roboscan(target, user) - - if(scan_type && driver?.using_scanner) - driver.data_buffer = html2pencode(scan_type) - SSnano.update_uis(driver.NM) diff --git a/code/modules/modular_computers/hardware/tesla_link.dm b/code/modules/modular_computers/hardware/tesla_link.dm deleted file mode 100644 index fb0c780ab5423..0000000000000 --- a/code/modules/modular_computers/hardware/tesla_link.dm +++ /dev/null @@ -1,8 +0,0 @@ -/obj/item/stock_parts/computer/tesla_link - name = "tesla link" - desc = "An advanced tesla link that wirelessly recharges connected device from nearby area power controller." - critical = FALSE - icon_state = "teslalink" - hardware_size = 1 - origin_tech = list(TECH_DATA = 2, TECH_POWER = 3, TECH_ENGINEERING = 2) - var/passive_charging_rate = 250 diff --git a/code/modules/modular_computers/laptop_vendor.dm b/code/modules/modular_computers/laptop_vendor.dm deleted file mode 100644 index 4ad85f853e4f3..0000000000000 --- a/code/modules/modular_computers/laptop_vendor.dm +++ /dev/null @@ -1,324 +0,0 @@ -// A vendor machine for modular computer portable devices - Laptops and Tablets - -/obj/machinery/lapvend - name = "computer vendor" - desc = "A vending machine with a built-in microfabricator, capable of dispensing various computers." - icon = 'icons/obj/vending.dmi' - icon_state = "laptop" - layer = BELOW_OBJ_LAYER - anchored = TRUE - density = TRUE - - // The actual laptop/tablet - var/obj/item/modular_computer/laptop/fabricated_laptop = null - var/obj/item/modular_computer/tablet/fabricated_tablet = null - - // Utility vars - var/state = 0 // 0: Select device type, 1: Select loadout, 2: Payment, 3: Thankyou screen - var/devtype = 0 // 0: None(unselected), 1: Laptop, 2: Tablet - var/total_price = 0 // Price of currently vended device. - - // Device loadout - var/dev_cpu = 1 // 1: Default, 2: Upgraded - var/dev_battery = 1 // 1: Default, 2: Upgraded, 3: Advanced - var/dev_disk = 1 // 1: Default, 2: Upgraded, 3: Advanced - var/dev_netcard = 0 // 0: None, 1: Basic, 2: Long-Range - var/dev_tesla = 0 // 0: None, 1: Standard - var/dev_nanoprint = 0 // 0: None, 1: Standard - var/dev_card = 0 // 0: None, 1: Standard - var/dev_aislot = 0 // 0: None, 1: Standard - -/obj/machinery/lapvend/on_update_icon() - if(stat & BROKEN) - icon_state = "[initial(icon_state)]-broken" - else if(!(stat & NOPOWER)) - icon_state = initial(icon_state) - else - icon_state = "[initial(icon_state)]-off" - -// Removes all traces of old order and allows you to begin configuration from scratch. -/obj/machinery/lapvend/proc/reset_order() - state = 0 - devtype = 0 - if(fabricated_laptop) - qdel(fabricated_laptop) - fabricated_laptop = null - if(fabricated_tablet) - qdel(fabricated_tablet) - fabricated_tablet = null - dev_cpu = 1 - dev_battery = 1 - dev_disk = 1 - dev_netcard = 0 - dev_tesla = 0 - dev_nanoprint = 0 - dev_card = 0 - dev_aislot = 0 - -// Recalculates the price and optionally even fabricates the device. -/obj/machinery/lapvend/proc/fabricate_and_recalc_price(var/fabricate = 0) - total_price = 0 - if(devtype == 1) // Laptop, generally cheaper to make it accessible for most station roles - if(fabricate) - fabricated_laptop = new(src) - total_price = 99 - switch(dev_cpu) - if(1) - if(fabricate) - fabricated_laptop.processor_unit = new/obj/item/stock_parts/computer/processor_unit/small(fabricated_laptop) - if(2) - if(fabricate) - fabricated_laptop.processor_unit = new/obj/item/stock_parts/computer/processor_unit(fabricated_laptop) - total_price += 299 - switch(dev_battery) - if(1) // Basic(750C) - if(fabricate) - fabricated_laptop.battery_module = new/obj/item/stock_parts/computer/battery_module(fabricated_laptop) - if(2) // Upgraded(1100C) - if(fabricate) - fabricated_laptop.battery_module = new/obj/item/stock_parts/computer/battery_module/advanced(fabricated_laptop) - total_price += 199 - if(3) // Advanced(1500C) - if(fabricate) - fabricated_laptop.battery_module = new/obj/item/stock_parts/computer/battery_module/super(fabricated_laptop) - total_price += 499 - switch(dev_disk) - if(1) // Basic(128GQ) - if(fabricate) - fabricated_laptop.hard_drive = new/obj/item/stock_parts/computer/hard_drive(fabricated_laptop) - if(2) // Upgraded(256GQ) - if(fabricate) - fabricated_laptop.hard_drive = new/obj/item/stock_parts/computer/hard_drive/advanced(fabricated_laptop) - total_price += 99 - if(3) // Advanced(512GQ) - if(fabricate) - fabricated_laptop.hard_drive = new/obj/item/stock_parts/computer/hard_drive/super(fabricated_laptop) - total_price += 299 - switch(dev_netcard) - if(1) // Basic(Short-Range) - if(fabricate) - fabricated_laptop.network_card = new/obj/item/stock_parts/computer/network_card(fabricated_laptop) - total_price += 99 - if(2) // Advanced (Long Range) - if(fabricate) - fabricated_laptop.network_card = new/obj/item/stock_parts/computer/network_card/advanced(fabricated_laptop) - total_price += 299 - if(dev_tesla) - total_price += 399 - if(fabricate) - fabricated_laptop.tesla_link = new/obj/item/stock_parts/computer/tesla_link(fabricated_laptop) - if(dev_nanoprint) - total_price += 99 - if(fabricate) - fabricated_laptop.nano_printer = new/obj/item/stock_parts/computer/nano_printer(fabricated_laptop) - if(dev_card) - total_price += 199 - if(fabricate) - fabricated_laptop.card_slot = new/obj/item/stock_parts/computer/card_slot(fabricated_laptop) - if(dev_aislot) - total_price += 499 - if(fabricate) - fabricated_laptop.ai_slot = new/obj/item/stock_parts/computer/ai_slot(fabricated_laptop) - - return total_price - else if(devtype == 2) // Tablet, more expensive, not everyone could probably afford this. - if(fabricate) - fabricated_tablet = new(src) - fabricated_tablet.processor_unit = new/obj/item/stock_parts/computer/processor_unit/small(fabricated_tablet) - total_price = 199 - switch(dev_battery) - if(1) // Basic(300C) - if(fabricate) - fabricated_tablet.battery_module = new/obj/item/stock_parts/computer/battery_module/nano(fabricated_tablet) - if(2) // Upgraded(500C) - if(fabricate) - fabricated_tablet.battery_module = new/obj/item/stock_parts/computer/battery_module/micro(fabricated_tablet) - total_price += 199 - if(3) // Advanced(750C) - if(fabricate) - fabricated_tablet.battery_module = new/obj/item/stock_parts/computer/battery_module(fabricated_tablet) - total_price += 499 - switch(dev_disk) - if(1) // Basic(32GQ) - if(fabricate) - fabricated_tablet.hard_drive = new/obj/item/stock_parts/computer/hard_drive/micro(fabricated_tablet) - if(2) // Upgraded(64GQ) - if(fabricate) - fabricated_tablet.hard_drive = new/obj/item/stock_parts/computer/hard_drive/small(fabricated_tablet) - total_price += 99 - if(3) // Advanced(128GQ) - if(fabricate) - fabricated_tablet.hard_drive = new/obj/item/stock_parts/computer/hard_drive(fabricated_tablet) - total_price += 299 - switch(dev_netcard) - if(1) // Basic(Short-Range) - if(fabricate) - fabricated_tablet.network_card = new/obj/item/stock_parts/computer/network_card(fabricated_tablet) - total_price += 99 - if(2) // Advanced (Long Range) - if(fabricate) - fabricated_tablet.network_card = new/obj/item/stock_parts/computer/network_card/advanced(fabricated_tablet) - total_price += 299 - if(dev_nanoprint) - total_price += 99 - if(fabricate) - fabricated_tablet.nano_printer = new/obj/item/stock_parts/computer/nano_printer(fabricated_tablet) - if(dev_card) - total_price += 199 - if(fabricate) - fabricated_tablet.card_slot = new/obj/item/stock_parts/computer/card_slot(fabricated_tablet) - if(dev_tesla) - total_price += 399 - if(fabricate) - fabricated_tablet.tesla_link = new/obj/item/stock_parts/computer/tesla_link(fabricated_tablet) - if(dev_aislot) - total_price += 499 - if(fabricate) - fabricated_tablet.ai_slot = new/obj/item/stock_parts/computer/ai_slot(fabricated_tablet) - return total_price - return 0 - - - - - -/obj/machinery/lapvend/Topic(href, href_list) - if(..()) - return 1 - - if(href_list["pick_device"]) - if(state) // We've already picked a device type - return 0 - devtype = text2num(href_list["pick_device"]) - state = 1 - fabricate_and_recalc_price(0) - return 1 - if(href_list["clean_order"]) - reset_order() - return 1 - if((state != 1) && devtype) // Following IFs should only be usable when in the Select Loadout mode - return 0 - if(href_list["confirm_order"]) - state = 2 // Wait for ID swipe for payment processing - fabricate_and_recalc_price(0) - return 1 - if(href_list["hw_cpu"]) - dev_cpu = text2num(href_list["hw_cpu"]) - fabricate_and_recalc_price(0) - return 1 - if(href_list["hw_battery"]) - dev_battery = text2num(href_list["hw_battery"]) - fabricate_and_recalc_price(0) - return 1 - if(href_list["hw_disk"]) - dev_disk = text2num(href_list["hw_disk"]) - fabricate_and_recalc_price(0) - return 1 - if(href_list["hw_netcard"]) - dev_netcard = text2num(href_list["hw_netcard"]) - fabricate_and_recalc_price(0) - return 1 - if(href_list["hw_tesla"]) - dev_tesla = text2num(href_list["hw_tesla"]) - fabricate_and_recalc_price(0) - return 1 - if(href_list["hw_nanoprint"]) - dev_nanoprint = text2num(href_list["hw_nanoprint"]) - fabricate_and_recalc_price(0) - return 1 - if(href_list["hw_card"]) - dev_card = text2num(href_list["hw_card"]) - fabricate_and_recalc_price(0) - return 1 - if(href_list["hw_aislot"]) - dev_aislot = text2num(href_list["hw_aislot"]) - fabricate_and_recalc_price(0) - return 1 - return 0 - -/obj/machinery/lapvend/interface_interact(var/mob/user) - ui_interact(user) - return TRUE - -/obj/machinery/lapvend/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1) - if(stat & (BROKEN | NOPOWER | MAINT)) - if(ui) - ui.close() - return 0 - - var/list/data[0] - data["state"] = state - if(state == 1) - data["devtype"] = devtype - data["hw_battery"] = dev_battery - data["hw_disk"] = dev_disk - data["hw_netcard"] = dev_netcard - data["hw_tesla"] = dev_tesla - data["hw_nanoprint"] = dev_nanoprint - data["hw_card"] = dev_card - data["hw_cpu"] = dev_cpu - data["hw_aislot"] = dev_aislot - if(state == 1 || state == 2) - data["totalprice"] = total_price - - ui = SSnano.try_update_ui(user, src, ui_key, ui, data, force_open) - if (!ui) - ui = new(user, src, ui_key, "computer_fabricator.tmpl", "Personal Computer Vendor", 500, 400) - ui.set_initial_data(data) - ui.open() - ui.set_auto_update(1) - - -/obj/machinery/lapvend/attackby(obj/item/W as obj, mob/user as mob) - var/obj/item/card/id/I = W.GetIdCard() - // Awaiting payment state - if(state == 2) - if(process_payment(I,W)) - fabricate_and_recalc_price(1) - flick("laptop-vend", src) - if((devtype == 1) && fabricated_laptop) - if(fabricated_laptop.battery_module) - fabricated_laptop.battery_module.charge_to_full() - fabricated_laptop.forceMove(src.loc) - fabricated_laptop.screen_on = 0 - fabricated_laptop.anchored = FALSE - fabricated_laptop.update_icon() - fabricated_laptop.update_verbs() - fabricated_laptop = null - else if((devtype == 2) && fabricated_tablet) - if(fabricated_tablet.battery_module) - fabricated_tablet.battery_module.charge_to_full() - fabricated_tablet.forceMove(src.loc) - fabricated_tablet.update_verbs() - fabricated_tablet = null - ping("Enjoy your new product!") - state = 3 - return 1 - return 0 - return ..() - - -// Simplified payment processing, returns 1 on success. -/obj/machinery/lapvend/proc/process_payment(var/obj/item/card/id/I, var/obj/item/ID_container) - if(I==ID_container || ID_container == null) - visible_message("\The [usr] swipes \the [I] through \the [src].") - else - visible_message("\The [usr] swipes \the [ID_container] through \the [src].") - var/datum/money_account/customer_account = I ? get_account(I.associated_account_number) : null - if (!customer_account || customer_account.suspended) - ping("Connection error. Unable to connect to account.") - return 0 - - if(customer_account.security_level != 0) //If card requires pin authentication (ie seclevel 1 or 2) - var/attempt_pin = input("Enter pin code", "Vendor transaction") as num - customer_account = attempt_account_access(I.associated_account_number, attempt_pin, 2) - - if(!customer_account) - ping("Unable to access account: incorrect credentials.") - return 0 - - if(customer_account.withdraw(total_price, "Purchase of [(devtype == 1) ? "laptop computer" : "tablet microcomputer"].", "Computer Manufacturer (via [src.name])")) - return 1 - else - ping("Transaction failed! Please try again.") - return 0 \ No newline at end of file diff --git a/code/modules/modular_computers/ntos/components.dm b/code/modules/modular_computers/ntos/components.dm deleted file mode 100644 index 4ae6a08944da0..0000000000000 --- a/code/modules/modular_computers/ntos/components.dm +++ /dev/null @@ -1,118 +0,0 @@ -/datum/extension/interactive/ntos/proc/get_component(part_type) - return locate(part_type) in holder - -/datum/extension/interactive/ntos/proc/get_all_components() - . = list() - for(var/obj/item/stock_parts/P in holder) - . += P - -/datum/extension/interactive/ntos/proc/find_hardware_by_name(partname) - for(var/obj/item/stock_parts/P in holder) - if(findtext(P.name, partname)) - return P - -/datum/extension/interactive/ntos/proc/has_component(part_type) - return !!get_component(part_type) - -/datum/extension/interactive/ntos/proc/print_paper(content, title) - var/obj/item/stock_parts/computer/nano_printer/printer = get_component(PART_PRINTER) - if(printer) - return printer.print_text(content, title) - -/// Returns the network tag that other computers trying to reach it would see. -/datum/extension/interactive/ntos/proc/get_network_tag_incoming() - var/obj/item/stock_parts/computer/network_card/network_card = get_component(PART_NETWORK) - if(network_card) - return network_card.get_network_tag_direct() - return "N/A" - -/// Returns the network tag visible for the outgoing connections this computer makes. Value is cached until computer next runs Process() or is shut down. -/datum/extension/interactive/ntos/proc/get_network_tag() - if(isnull(network_tag)) - var/obj/item/stock_parts/computer/network_card/network_card = get_component(PART_NETWORK) - if(network_card) - network_tag = network_card.get_network_tag() - else - network_tag = "N/A" - return network_tag - -/// Returns the connection quality to NTNet for this computer for others trying to reach it. -/datum/extension/interactive/ntos/proc/get_ntnet_status_incoming() - if(!on) // No signal if the computer isn't on. - return 0 - var/obj/item/stock_parts/computer/network_card/network_card = get_component(PART_NETWORK) - if(network_card) - return network_card.get_signal_direct() - return 0 - -/// Returns the connection quality to NTNet for this computer when making outgoing connections. Value is cached until computer next runs Process() or is shut down. -/datum/extension/interactive/ntos/proc/get_ntnet_status() - if(!on) // No signal if the computer isn't on. - return 0 - if(isnull(ntnet_status)) - var/obj/item/stock_parts/computer/network_card/network_card = get_component(PART_NETWORK) - if(network_card) - ntnet_status = network_card.get_signal() - else - ntnet_status = 0 - return ntnet_status - -/// Returns TRUE if the connection supports a specific capability, otherwise FALSE -/datum/extension/interactive/ntos/proc/get_ntnet_capability(specific_action) - if(ntnet_global) - return TRUE - return FALSE - -/// Returns the current network speed in GQ/s for the specified connection quality -/datum/extension/interactive/ntos/proc/get_ntnet_speed(status) - . = 0 - switch(status) - if(1) - . = NTNETSPEED_LOWSIGNAL - if(2) - . = NTNETSPEED_HIGHSIGNAL - if(3) - . = NTNETSPEED_ETHERNET - -/datum/extension/interactive/ntos/proc/get_inserted_id() - var/obj/item/stock_parts/computer/card_slot/card_slot = get_component(PART_CARD) - if(card_slot) - return card_slot.stored_card - -/datum/extension/interactive/ntos/proc/max_disk_capacity(obj/item/stock_parts/computer/hard_drive/disk = get_component(PART_HDD)) - if(istype(disk)) - return disk.max_capacity - return 0 - -/datum/extension/interactive/ntos/proc/used_disk_capacity(obj/item/stock_parts/computer/hard_drive/disk = get_component(PART_HDD)) - if(istype(disk)) - return disk.used_capacity - return 0 - -/datum/extension/interactive/ntos/proc/get_hardware_flag() - return PROGRAM_ALL - -/// Overriden in device subtypes and used to display in configurator program. -/datum/extension/interactive/ntos/proc/get_power_usage() - return 0 - -/datum/extension/interactive/ntos/proc/recalc_power_usage() - -/datum/extension/interactive/ntos/proc/voltage_overload() - var/atom/A = holder - if(istype(A)) - var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread - s.set_up(10, 1, A.loc) - s.start() - - var/obj/item/stock_parts/computer/hard_drive = get_component(PART_HDD) - if(hard_drive) - qdel(hard_drive) - - var/obj/item/stock_parts/computer/battery_module = get_component(PART_BATTERY) - if(battery_module && prob(25)) - qdel(battery_module) - - var/obj/item/stock_parts/computer/tesla_link = get_component(PART_TESLA) - if(tesla_link && prob(50)) - qdel(tesla_link) diff --git a/code/modules/modular_computers/ntos/files.dm b/code/modules/modular_computers/ntos/files.dm deleted file mode 100644 index 4bcbec1d68e77..0000000000000 --- a/code/modules/modular_computers/ntos/files.dm +++ /dev/null @@ -1,104 +0,0 @@ -/// Return a list of all files, leaving out hidden files by default. -/datum/extension/interactive/ntos/proc/get_all_files(hidden = FALSE, obj/item/stock_parts/computer/hard_drive/disk = get_component(PART_HDD)) - . = list() - if(istype(disk)) - if(hidden) - return disk.stored_files - else - for(var/datum/computer_file/F in disk.stored_files) - if(!F.hidden) - . += F - -/// Attempt to get the specified file. Returns null on failure. -/datum/extension/interactive/ntos/proc/get_file(filename, obj/item/stock_parts/computer/hard_drive/disk = get_component(PART_HDD)) - if(istype(disk)) - return disk.find_file_by_name(filename) - -/// Attempts to create Data file. Returns file on success, otherwise null. -/datum/extension/interactive/ntos/proc/create_data_file(filename, data, file_type = /datum/computer_file/data, list/metadata, obj/item/stock_parts/computer/hard_drive/disk = get_component(PART_HDD)) - if(!istype(disk)) - return - return disk.create_data_file(filename, data, file_type, metadata) - -/// Attempts to save Data file, creating it if necessary. Returns file on success, otherwise null. -/datum/extension/interactive/ntos/proc/save_data_file(filename, data, file_type = /datum/computer_file/data, list/metadata, obj/item/stock_parts/computer/hard_drive/disk = get_component(PART_HDD)) - if(!istype(disk)) - return - return disk.save_data_file(filename, data, file_type, metadata) - -/// Adds date to a Data file, creating it if necessary. Enforces file type. Returns file on success, otherwise null. -/datum/extension/interactive/ntos/proc/update_data_file(filename, new_data, file_type = /datum/computer_file/data, list/metadata, replace_content = FALSE, obj/item/stock_parts/computer/hard_drive/disk = get_component(PART_HDD)) - if(!istype(disk)) - return - return disk.update_data_file(filename, new_data, file_type, metadata, replace_content) - -/// Attempts to save a file object. Returns file on success, otherwise null. -/datum/extension/interactive/ntos/proc/create_file(datum/computer_file/file, obj/item/stock_parts/computer/hard_drive/disk = get_component(PART_HDD)) - if(!istype(disk)) - return - return disk.create_file(file) - -/// Attempts to save a file object, replacing existing one with the same name if present. Returns file on success, otherwise null. -/datum/extension/interactive/ntos/proc/save_file(datum/computer_file/file, obj/item/stock_parts/computer/hard_drive/disk = get_component(PART_HDD)) - if(!istype(disk)) - return - return disk.save_file(file) - -/// Check if the file can be created. Returns TRUE if so, otherwise FALSE. -/datum/extension/interactive/ntos/proc/try_create_file(datum/computer_file/file, obj/item/stock_parts/computer/hard_drive/disk = get_component(PART_HDD)) - if(!istype(disk)) - return FALSE - return disk.try_create_file(file) - -/// Attempts to remove the specified file. Returns TRUE on success, otherwise FALSE. -/datum/extension/interactive/ntos/proc/delete_file(filename, obj/item/stock_parts/computer/hard_drive/disk = get_component(PART_HDD)) - if(!istype(disk)) - return FALSE - - var/datum/computer_file/F = disk.find_file_by_name(filename) - if(!istype(F) || F.undeletable) - return FALSE - - return disk.remove_file(F) - -/// Attempts to rename the specified file. Returns TRUE on success, otherwise FALSE. -/datum/extension/interactive/ntos/proc/rename_file(filename, filename_new, obj/item/stock_parts/computer/hard_drive/disk = get_component(PART_HDD)) - if(filename == filename_new) - return TRUE - - if(!istype(disk)) - return FALSE - - var/datum/computer_file/F = disk.find_file_by_name(filename) - if(!istype(F) || F.undeletable) - return FALSE - - return disk.rename_file(F, filename_new) - -/// Attempts to copy the specified file. Returns file on success, otherwise null. -/datum/extension/interactive/ntos/proc/clone_file(filename, obj/item/stock_parts/computer/hard_drive/disk = get_component(PART_HDD)) - return move_file(filename, "[filename]_copy", disk, disk, TRUE) - -/// Attempts to copy the specified file to another disk. Returns file on success, otherwise null. -/datum/extension/interactive/ntos/proc/copy_between_disks(filename, obj/item/stock_parts/computer/hard_drive/disk_from, obj/item/stock_parts/computer/hard_drive/disk_to) - return move_file(filename, filename, disk_from, disk_to, TRUE) - -/// Attempts to move or copy the specified file, potentially between disks, and renaming it in the process if necessary -/datum/extension/interactive/ntos/proc/move_file(filename, filename_new, obj/item/stock_parts/computer/hard_drive/disk_from, obj/item/stock_parts/computer/hard_drive/disk_to, copy = FALSE) - if(!istype(disk_from) || !istype(disk_to)) - return - - var/datum/computer_file/F = disk_from.find_file_by_name(filename) - if(!istype(F) || F.undeletable) - return - - if(disk_from == disk_to && F.filename == filename_new) - return F // We don't need to do anything - - var/datum/computer_file/FC = F.clone() - if(FC.filename != filename_new) - FC.filename = filename_new - FC = disk_to.create_file(FC) - if(FC && !copy) // Failure to remove the old file is not considered critical - disk_from.remove_file(F) - return FC \ No newline at end of file diff --git a/code/modules/modular_computers/ntos/ntos.dm b/code/modules/modular_computers/ntos/ntos.dm deleted file mode 100644 index 5fdec6fbb2864..0000000000000 --- a/code/modules/modular_computers/ntos/ntos.dm +++ /dev/null @@ -1,252 +0,0 @@ -/datum/extension/interactive/ntos - base_type = /datum/extension/interactive/ntos - expected_type = /atom/movable - flags = EXTENSION_FLAG_IMMEDIATE - - /// Whether the computer is turned on - var/on = FALSE - /// A currently active program running on the computer. - var/datum/computer_file/program/active_program = null - /// All programms currently running, background or active. - var/list/running_programs = list() - - /// dmi where the screen overlays are kept, defaults to holder's icon if unset - var/screen_icon_file - /// Icon state overlay when the computer is turned on, but no program is loaded that would override the screen. - var/menu_icon = "menu" - var/screensaver_icon = "standby" - - /// Cached NTNet status for outgoing connections to avoid checking entire proxy chain every time - var/ntnet_status - /// Cached NTNet network tag for outgoing connections to avoid checking entire proxy chain every time - var/network_tag - - // Used for deciding if various tray icons need to be updated - var/last_battery_percent - var/last_world_time - var/list/last_header_icons - - /// Pain and suffering. Sometimes computers are made to update, and you just have to sit through or risk damage by rebooting it - var/receives_updates = TRUE - var/updating = FALSE - var/updates = 0 - var/update_progress = 0 - var/update_postshutdown - - var/list/terminals - -/datum/extension/interactive/ntos/Destroy() - system_shutdown() - . = ..() - -/datum/extension/interactive/ntos/Process() - if(on && !host_status()) - system_shutdown() - if(!on) - return - - // Clear the cached values - ntnet_status = null - network_tag = null - - if(updating) - process_updates() - return - - for(var/datum/computer_file/program/P in running_programs) - if((P.requires_ntnet && !get_ntnet_status()) || (P.requires_ntnet_feature && !get_ntnet_capability(P.requires_ntnet_feature))) - P.event_networkfailure(P != active_program) - else - P.process_tick() - regular_ui_update() - -/// Returns the status of the physical device the system is running on. Overridden by device subtypes. -/datum/extension/interactive/ntos/proc/host_status() - return TRUE - -/// Handles all cleanup when the system is shut down. -/datum/extension/interactive/ntos/proc/system_shutdown() - for(var/datum/computer_file/program/P in running_programs) - kill_program(P, TRUE) - - var/obj/item/stock_parts/computer/network_card/network_card = get_component(PART_NETWORK) - if(network_card) - ntnet_global.unregister(network_card.identification_id) - - on = FALSE - ntnet_status = null - network_tag = null - - if(updating) - updating = FALSE - updates = 0 - update_progress = 0 - var/obj/item/stock_parts/computer/hard_drive/hard_drive = get_component(PART_HDD) - if(hard_drive) - if(prob(10)) - hard_drive.visible_message("[src] emits some ominous clicks.") - hard_drive.take_damage(hard_drive.damage_malfunction) - else if(prob(5)) - hard_drive.visible_message("[src] emits some ominous clicks.") - hard_drive.take_damage(hard_drive.damage_failure) - update_host_icon() - -/// Handles all setup when the system is booted up. -/datum/extension/interactive/ntos/proc/system_boot() - on = TRUE - - var/obj/item/stock_parts/computer/network_card/network_card = get_component(PART_NETWORK) - if(network_card) - ntnet_global.register(network_card.identification_id, src) - - var/datum/computer_file/data/autorun = get_file("autorun") - if(istype(autorun)) - run_program(autorun.stored_data) - - update_host_icon() - -/// Attempts to kill a program. Assumes that usr is directly accessing the device. -/datum/extension/interactive/ntos/proc/kill_program(datum/computer_file/program/P, forced = FALSE) - kill_program_remote(P, forced, usr) - -/// Attempts to kill a program. -/datum/extension/interactive/ntos/proc/kill_program_remote(datum/computer_file/program/P, forced = FALSE, mob/user = null) - if(!P) - return - P.on_shutdown(forced) - running_programs -= P - if(active_program == P) - active_program = null - if(ismob(user)) - ui_interact(user) // Re-open the UI on this computer. It should show the main screen now. - update_host_icon() - -/// Attempts to start the named program in the foreground. Assumes that usr is directly accessing the device. Returns the program on success, otherwise null. -/datum/extension/interactive/ntos/proc/run_program(filename) - var/mob/user = usr - var/datum/computer_file/program/P = run_program_remote(filename, user, 1) - if(!istype(P)) - return - - activate_program(P, user) - return P - -/// Attempts to start the named program in the background. Returns the program on success, otherwise null. -/datum/extension/interactive/ntos/proc/run_program_remote(filename, mob/user = null, loud = 0) - var/datum/computer_file/program/P = get_file(filename) - - if(!istype(P)) - loud && show_error(user, "I/O ERROR - Unable to run [filename]") - return - if(!P.is_supported_by_hardware(get_hardware_flag())) - loud && show_error(user, "Hardware Error - Incompatible software") - return - if(P.requires_ntnet && !get_ntnet_status(P.requires_ntnet_feature)) - loud && show_error(user, "Unable to establish a working network connection. Please try again later. If problem persists, please contact your system administrator.") - return - - if(P in running_programs) - return P - if(running_programs.len >= get_program_capacity()) - loud && show_error(user, "Kernel Error - Insufficient CPU resources available to allocate.") - return - if(!P.can_run(user, loud)) - return - - P.on_startup(user, src) - running_programs |= P - return P - -/// Make a program the currently active one if it is running. Returns the program on success, otherwise null. -/datum/extension/interactive/ntos/proc/activate_program(datum/computer_file/program/P, mob/user = null) - if(!istype(P)) - return - if((P in running_programs) && P != active_program && P.program_state != PROGRAM_STATE_KILLED) - minimize_program(user) - P.program_state = PROGRAM_STATE_ACTIVE - active_program = P - update_host_icon() - return P - -/// Minimize the currently active program. -/datum/extension/interactive/ntos/proc/minimize_program(mob/user = null) - if(!active_program) - return - active_program.program_state = PROGRAM_STATE_BACKGROUND // Should close any existing UIs - SSnano.close_uis(active_program.NM ? active_program.NM : active_program) - active_program = null - update_host_icon() - if(istype(user)) - ui_interact(user) // Re-open the UI on this computer. It should show the main screen now. - -/// Set a filename name that the system should attempt to run as a program when it boots up. Returns the autorun file on success, otherwise null. -/datum/extension/interactive/ntos/proc/set_autorun(filename) - if(!filename) - return delete_file("autorun") - return update_data_file("autorun", "[filename]", replace_content = TRUE) - -/// Returns the number number of programs this system can run at the same time. -/datum/extension/interactive/ntos/proc/get_program_capacity() - var/obj/item/stock_parts/computer/processor_unit/C = get_component(PART_CPU) - if(!istype(C)) - return 0 - return 1 + C.processing_power - -/// Adds an entry to the NTNet log with this computer's identity, if the computer has a connection. Returns TRUE on success, otherwise FALSE. -/datum/extension/interactive/ntos/proc/add_log(text) - if(!get_ntnet_status()) - return FALSE - return ntnet_global.add_log(text, get_component(PART_NETWORK)) - -/datum/extension/interactive/ntos/proc/get_physical_host() - var/atom/A = holder - if(istype(A)) - return A - -/datum/extension/interactive/ntos/proc/handle_updates(shutdown_after) - updating = TRUE - update_progress = 0 - update_postshutdown = shutdown_after - -/// Used by camera monitor program -/datum/extension/interactive/ntos/proc/check_eye(mob/user) - if(active_program) - return active_program.check_eye(user) - -/datum/extension/interactive/ntos/proc/process_updates() - if(update_progress < updates) - update_progress += rand(0, 2500) - return - - //It's done. - updating = FALSE - update_host_icon() - updates = 0 - update_progress = 0 - - if(update_postshutdown) - system_shutdown() - -/datum/extension/interactive/ntos/proc/event_powerfailure() - for(var/datum/computer_file/program/P in running_programs) - P.event_powerfailure(P != active_program) - -/datum/extension/interactive/ntos/proc/event_idremoved() - for(var/datum/computer_file/program/P in running_programs) - P.event_idremoved(P != active_program) - -/datum/extension/interactive/ntos/proc/has_terminal(mob/user) - for(var/datum/terminal/terminal in terminals) - if(terminal.get_user() == user) - return terminal - -/datum/extension/interactive/ntos/proc/open_terminal(mob/user) - if(!on) - return - if(has_terminal(user)) - return - LAZYADD(terminals, new /datum/terminal/(user, src)) - -/// Returns TRUE if the system is emagged, otherwise FALSE. Overriden by device subtypes. -/datum/extension/interactive/ntos/proc/emagged() - return FALSE diff --git a/code/modules/modular_computers/ntos/subtypes/console.dm b/code/modules/modular_computers/ntos/subtypes/console.dm deleted file mode 100644 index dbc1c7a9b66b7..0000000000000 --- a/code/modules/modular_computers/ntos/subtypes/console.dm +++ /dev/null @@ -1,62 +0,0 @@ -/datum/extension/interactive/ntos/console - expected_type = /obj/machinery - screen_icon_file = 'icons/obj/modular_console.dmi' - -/datum/extension/interactive/ntos/console/get_hardware_flag() - return PROGRAM_CONSOLE - -/datum/extension/interactive/ntos/console/get_component(var/part_type) - var/obj/machinery/M = holder - return M.get_component_of_type(part_type) - -/datum/extension/interactive/ntos/console/get_all_components() - var/obj/machinery/M = holder - return M.component_parts.Copy() - -/datum/extension/interactive/ntos/console/get_power_usage() - var/obj/machinery/M = holder - return M.get_power_usage() - -/datum/extension/interactive/ntos/console/recalc_power_usage() - var/obj/machinery/M = holder - M.RefreshParts() - -/datum/extension/interactive/ntos/console/emagged() - var/obj/machinery/M = holder - var/obj/item/stock_parts/circuitboard/modular_computer/MB = M.get_component_of_type(/obj/item/stock_parts/circuitboard/modular_computer) - return MB && MB.emagged - -/datum/extension/interactive/ntos/console/system_boot() - ..() - var/obj/machinery/M = holder - M.update_use_power(POWER_USE_ACTIVE) - -/datum/extension/interactive/ntos/console/system_shutdown() - ..() - var/obj/machinery/M = holder - M.update_use_power(POWER_USE_IDLE) - -/datum/extension/interactive/ntos/console/host_status() - var/obj/machinery/M = holder - return !(M.stat & NOPOWER) - -/datum/extension/interactive/ntos/console/extension_act(href, href_list, user) - . = ..() - var/obj/machinery/M = holder - if(istype(M) && M.clicksound && CanPhysicallyInteractWith(user, M)) - playsound(M, M.clicksound, 40) - -// Hack to make status bar work - -/obj/machinery/initial_data() - . = ..() - var/datum/extension/interactive/ntos/os = get_extension(src, /datum/extension/interactive/ntos) - if(os) - . += os.get_header_data() - -/obj/machinery/check_eye() - var/datum/extension/interactive/ntos/os = get_extension(src, /datum/extension/interactive/ntos) - if(os) - return os.check_eye() - else - return ..() \ No newline at end of file diff --git a/code/modules/modular_computers/ntos/subtypes/device.dm b/code/modules/modular_computers/ntos/subtypes/device.dm deleted file mode 100644 index 4a17d49d60cae..0000000000000 --- a/code/modules/modular_computers/ntos/subtypes/device.dm +++ /dev/null @@ -1,53 +0,0 @@ -/datum/extension/interactive/ntos/device - expected_type = /obj/item/modular_computer - -/datum/extension/interactive/ntos/device/host_status() - var/obj/item/modular_computer/C = holder - return C.enabled - -/datum/extension/interactive/ntos/device/get_hardware_flag() - var/obj/item/modular_computer/C = holder - return C.hardware_flag - -/datum/extension/interactive/ntos/device/get_power_usage() - var/obj/item/modular_computer/C = holder - return C.last_power_usage - -/datum/extension/interactive/ntos/device/recalc_power_usage() - var/obj/item/modular_computer/C = holder - C.handle_power() - -/datum/extension/interactive/ntos/device/emagged() - var/obj/item/modular_computer/C = holder - return C.computer_emagged - -/datum/extension/interactive/ntos/device/system_shutdown() - var/obj/item/modular_computer/C = holder - C.enabled = FALSE - ..() - -/datum/extension/interactive/ntos/device/system_boot() - var/obj/item/modular_computer/C = holder - C.enabled = TRUE - ..() - -/datum/extension/interactive/ntos/device/extension_act(href, href_list, user) - . = ..() - var/obj/item/modular_computer/C = holder - if(istype(C) && LAZYLEN(C.interact_sounds) && CanPhysicallyInteractWith(user, C)) - playsound(C, pick(C.interact_sounds), 40) - -// Hack to make status bar work - -/obj/item/modular_computer/initial_data() - . = ..() - var/datum/extension/interactive/ntos/os = get_extension(src, /datum/extension/interactive/ntos) - if(os) - . += os.get_header_data() - -/obj/item/modular_computer/check_eye() - var/datum/extension/interactive/ntos/os = get_extension(src, /datum/extension/interactive/ntos) - if(os) - return os.check_eye() - else - return ..() diff --git a/code/modules/modular_computers/ntos/ui.dm b/code/modules/modular_computers/ntos/ui.dm deleted file mode 100644 index 45106e8f4dbd8..0000000000000 --- a/code/modules/modular_computers/ntos/ui.dm +++ /dev/null @@ -1,224 +0,0 @@ -/// Operates NanoUI -/datum/extension/interactive/ntos/ui_interact(mob/user, ui_key = "main", datum/nanoui/ui = null, force_open = 1) - if(!on || !host_status()) - if(ui) - ui.close() - return 0 - // If we have an active program switch to it now. - if(active_program) - if(ui) // This is the main laptop screen. Since we are switching to program's UI close it for now. - ui.close() - active_program.ui_interact(user) - return - - // We are still here, that means there is no program loaded. Load the BIOS/ROM/OS/whatever you want to call it. - // This screen simply lists available programs and user may select them. - var/obj/item/stock_parts/computer/hard_drive/hard_drive = get_component(PART_HDD) - if(!hard_drive) - show_error(user, "DISK ERROR") - return // No HDD, Something is very broken. - - var/list/data = get_header_data() - - var/datum/computer_file/data/autorun = get_file("autorun") - var/list/programs = list() - for(var/datum/computer_file/program/P in get_all_files()) - var/list/program = list() - program["name"] = P.filename - program["desc"] = P.filedesc - program["icon"] = P.program_menu_icon - program["autorun"] = (istype(autorun) && (autorun.stored_data == P.filename)) ? 1 : 0 - if(P in running_programs) - program["running"] = 1 - programs.Add(list(program)) - - data["programs"] = programs - - data["updating"] = updating - data["update_progress"] = update_progress - data["updates"] = updates - - ui = SSnano.try_update_ui(user, src, ui_key, ui, data, force_open) - if (!ui) - ui = new(user, src, ui_key, "laptop_mainscreen.tmpl", "NTOS Main Menu ", 400, 500) - ui.auto_update_layout = 1 - ui.set_initial_data(data) - ui.open() - ui.set_auto_update(1) - -/datum/extension/interactive/ntos/extension_status(mob/user) - . = ..() - if(!on || !host_status()) - return STATUS_CLOSE - //There is no bypassing the update, mwhahaha - if(updating) - . = min(STATUS_UPDATE, .) - -/datum/extension/interactive/ntos/CanUseTopic(mob/user, state) - . = holder.CanUseTopic(user, state) - . = min(., extension_status(user)) - -/// Handles user's GUI input -/datum/extension/interactive/ntos/extension_act(href, href_list, user) - if( href_list["PC_exit"] ) - kill_program(active_program) - return TOPIC_HANDLED - if(href_list["PC_enable_component"] ) - var/obj/item/stock_parts/computer/H = locate(href_list["PC_enable_component"]) in holder - if(H && istype(H) && !H.enabled) - H.enabled = TRUE - H.on_enable(src) - return TOPIC_REFRESH - if(href_list["PC_disable_component"] ) - var/obj/item/stock_parts/computer/H = locate(href_list["PC_disable_component"]) in holder - if(H && istype(H) && H.enabled) - H.enabled = FALSE - H.on_disable() - return TOPIC_REFRESH - if( href_list["PC_enable_update"] ) - receives_updates = TRUE - return TOPIC_REFRESH - if( href_list["PC_disable_update"] ) - receives_updates = FALSE - return TOPIC_REFRESH - if( href_list["PC_shutdown"] ) - system_shutdown() - return TOPIC_HANDLED - if( href_list["PC_minimize"] ) - minimize_program(usr) - return TOPIC_HANDLED - - if( href_list["PC_killprogram"] ) - var/datum/computer_file/program/P = get_file(href_list["PC_killprogram"]) - - if(!istype(P) || P.program_state == PROGRAM_STATE_KILLED) - return TOPIC_HANDLED - - kill_program(P) - update_uis() - to_chat(usr, "Program [P.filename].[P.filetype] with PID [rand(100,999)] has been killed.") - return TOPIC_HANDLED - - if( href_list["PC_runprogram"] ) - run_program(href_list["PC_runprogram"]) - return TOPIC_HANDLED - - if( href_list["PC_setautorun"] ) - var/datum/computer_file/data/autorun = get_file("autorun") - if(istype(autorun) && autorun.stored_data == href_list["PC_setautorun"]) - set_autorun() - else - set_autorun(href_list["PC_setautorun"]) - return TOPIC_REFRESH - - if( href_list["PC_terminal"] ) - open_terminal(usr) - return TOPIC_HANDLED - -/datum/extension/interactive/ntos/proc/regular_ui_update() - var/ui_update_needed = FALSE - var/obj/item/stock_parts/computer/battery_module/battery_module = get_component(PART_BATTERY) - if(battery_module) - var/batery_percent = battery_module.battery.percent() - if(last_battery_percent != batery_percent) //Let's update UI on percent change - ui_update_needed = TRUE - last_battery_percent = batery_percent - - if(stationtime2text() != last_world_time) - last_world_time = stationtime2text() - ui_update_needed = TRUE - - var/list/current_header_icons = list() - for(var/datum/computer_file/program/P in running_programs) - if(!P.ui_header) - continue - current_header_icons[P.type] = P.ui_header - - if(!last_header_icons) - last_header_icons = current_header_icons - - else if(!listequal(last_header_icons, current_header_icons)) - last_header_icons = current_header_icons - ui_update_needed = TRUE - else - for(var/x in last_header_icons|current_header_icons) - if(last_header_icons[x]!=current_header_icons[x]) - last_header_icons = current_header_icons - ui_update_needed = TRUE - break - - if(ui_update_needed) - update_uis() - -/datum/extension/interactive/ntos/proc/update_uis() - if(active_program) //Should we update program ui or computer ui? - SSnano.update_uis(active_program) - if(active_program.NM) - SSnano.update_uis(active_program.NM) - -/// Function used by NanoUI's to obtain data for header. All relevant entries begin with "PC_" -/datum/extension/interactive/ntos/proc/get_header_data() - var/list/data = list() - - var/obj/item/stock_parts/computer/battery_module/battery_module = get_component(PART_BATTERY) - if(battery_module) - switch(battery_module.battery.percent()) - if(80 to 200) // 100 should be maximal but just in case.. - data["PC_batteryicon"] = "batt_100.gif" - if(60 to 80) - data["PC_batteryicon"] = "batt_80.gif" - if(40 to 60) - data["PC_batteryicon"] = "batt_60.gif" - if(20 to 40) - data["PC_batteryicon"] = "batt_40.gif" - if(5 to 20) - data["PC_batteryicon"] = "batt_20.gif" - else - data["PC_batteryicon"] = "batt_5.gif" - data["PC_batterypercent"] = "[round(battery_module.battery.percent())] %" - data["PC_showbatteryicon"] = TRUE - else - data["PC_batteryicon"] = "batt_5.gif" - data["PC_batterypercent"] = "N/C" - data["PC_showbatteryicon"] = battery_module ? TRUE : FALSE - - var/obj/item/stock_parts/computer/tesla_link/tesla_link = get_component(PART_TESLA) - if(tesla_link && tesla_link.enabled) - data["PC_apclinkicon"] = "charging.gif" - - var/obj/item/stock_parts/computer/network_card/network_card = get_component(PART_NETWORK) - if(network_card && network_card.is_banned()) - data["PC_ntneticon"] = "sig_warning.gif" - else - switch(get_ntnet_status()) - if(0) - data["PC_ntneticon"] = "sig_none.gif" - if(1) - data["PC_ntneticon"] = "sig_low.gif" - if(2) - data["PC_ntneticon"] = "sig_high.gif" - if(3) - data["PC_ntneticon"] = "sig_lan.gif" - - var/list/program_headers = list() - for(var/datum/computer_file/program/P in running_programs) - if(!P.ui_header) - continue - program_headers.Add(list(list( - "icon" = P.ui_header - ))) - data["PC_programheaders"] = program_headers - - data["PC_stationtime"] = stationtime2text() - data["PC_hasheader"] = !updating - data["PC_showexitprogram"] = active_program ? TRUE : FALSE // Hides "Exit Program" button on mainscreen - return data - -/datum/extension/interactive/ntos/initial_data() - return get_header_data() - -/datum/extension/interactive/ntos/update_layout() - return TRUE - -/datum/extension/interactive/ntos/nano_host() - return holder.nano_host() diff --git a/code/modules/modular_computers/ntos/visuals.dm b/code/modules/modular_computers/ntos/visuals.dm deleted file mode 100644 index e13295eb62b0e..0000000000000 --- a/code/modules/modular_computers/ntos/visuals.dm +++ /dev/null @@ -1,45 +0,0 @@ - -/datum/extension/interactive/ntos/proc/update_host_icon() - var/atom/A = holder - if(istype(A)) - A.update_icon() - -/datum/extension/interactive/ntos/proc/get_screen_overlay() - if(!on) - return image(screen_icon_file, screensaver_icon) - if(!screen_icon_file) - var/atom/A = holder - if(istype(A)) - screen_icon_file = A.icon - if(active_program) - return image(screen_icon_file, active_program.program_icon_state) - else - return image(screen_icon_file, menu_icon) - -/datum/extension/interactive/ntos/proc/get_keyboard_overlay() - if(!on) - return - if(!screen_icon_file) - var/atom/A = holder - if(istype(A)) - screen_icon_file = A.icon - if(active_program && active_program.program_key_state) - return image(screen_icon_file, active_program.program_key_state) - -/datum/extension/interactive/ntos/proc/visible_error(message) - var/atom/A = holder - if(istype(A)) - A.visible_message("\The [A]'s screen displays an error: \"[message]\"", range = 1) - -/datum/extension/interactive/ntos/proc/visible_notification(message) - var/atom/A = holder - if(istype(A)) - A.visible_message("\The [A] screen displays a notification: \"[message]\"", range = 1) - -/datum/extension/interactive/ntos/proc/audible_notification(notification) - var/atom/A = holder - if(istype(A)) - playsound(A, notification, 5, falloff = 1) - -/datum/extension/interactive/ntos/proc/show_error(user, message) - to_chat(user, "[message]") diff --git a/code/modules/modular_computers/terminal/commands/ban.dm b/code/modules/modular_computers/terminal/commands/ban.dm deleted file mode 100644 index 89dbfbe3b51de..0000000000000 --- a/code/modules/modular_computers/terminal/commands/ban.dm +++ /dev/null @@ -1,42 +0,0 @@ -/// Manages the NTNet banlist -/datum/terminal_command/banned - name = "banned" - man_entry = list( - "Format: banned \[-flag nid\]", - "Without options, list currently banned network ids.", - "With -b followed by nid (number), ban the network id.", - "With -u followed by nid (number), unban the network id.", - "NOTICE: Requires network operator access for viewing, and admin access for modification" - ) - pattern = "^banned" - req_access = list(list(access_network, access_network_admin)) - skill_needed = SKILL_ADEPT - -/datum/terminal_command/banned/proper_input_entered(text, mob/user, datum/terminal/terminal) - var/list/arguments = get_arguments(text) - if(isnull(arguments)) - return syntax_error() - if(!ntnet_global || !terminal.computer.get_ntnet_status()) - return network_error() - if(!arguments.len) - if (ntnet_global.banned_nids.len) - return list("[name]: The following network ids are banned:", jointext(ntnet_global.banned_nids, ", ")) - else - return "[name]: There are no banned network ids." - else if(arguments.len == 2) - if(!has_access(list(access_network_admin), user.GetAccess())) - return "[name]: ACCESS DENIED" - var/nid = text2num(arguments[2]) - if(arguments[1] == "-b") - if (nid && !(nid in ntnet_global.banned_nids)) - LAZYADD(ntnet_global.banned_nids, nid) - return "[name]: Network id '[nid]' banned." - else - return "[name]: Error; network id invalid or already banned." - else if(arguments[1] == "-u") - if (nid in ntnet_global.banned_nids) - ntnet_global.banned_nids -= nid - return "[name]: Network id '[nid]' unbanned." - else - return "[name]: Error; network id not found on list of banned ids." - return syntax_error() diff --git a/code/modules/modular_computers/terminal/commands/file.dm b/code/modules/modular_computers/terminal/commands/file.dm deleted file mode 100644 index 742a49b9a2867..0000000000000 --- a/code/modules/modular_computers/terminal/commands/file.dm +++ /dev/null @@ -1,105 +0,0 @@ -/// Terminal file management -/datum/terminal_command/file - name = "file" - man_entry = list( - "Format: file \[-flag filename \[filename2\]\]", - "Without options, list all files on storage devices.", - "With -h followed by filename, toggle the hidden flag on the file.", - "With -r followed by filename, remove the file.", - "With -m followed by filename and filename2, move or rename the file to the second filename", - "With -c followed by filename and filename2, copy the file to the second filename", - "If multiple storage devices are present, files on a specific device can be accessed by prefixing the filename with the device id. For example, the command 'file -m R:original C:result' would move a file with the name 'original' on the external storage device to the internal hard drive and rename it to 'result'. If no prefix is used, C: is assumed." - ) - pattern = "^file" - -/datum/terminal_command/file/proper_input_entered(text, mob/user, datum/terminal/terminal) - var/list/arguments = get_arguments(text) - if(isnull(arguments)) - return syntax_error() - var/list/drives = list( - "C" = terminal.computer.get_component(PART_HDD), - "R" = terminal.computer.get_component(PART_DRIVE) - ) - if(!istype(drives["C"], /obj/item/stock_parts/computer/hard_drive)) - return "[name]: Error; hard drive not found." - . = syntax_error() - // File list - if(!arguments.len) - . = list() - . += "[name]: Listing data storage content..." - . += output_file_list(drives, terminal.history_max_length - 5) - // Run command with one filename - else if(arguments.len == 2) - var/list/source = get_file_location(drives, arguments[2]) - if(!source) - return "[name]: Error; unable to resolve filename." - if(arguments[1] == "-h") - var/datum/computer_file/F = terminal.computer.get_file(source["name"], source["drive"]) - if(!istype(F)) - return "[name]: Error; could not find file '[source["name"]]'." - var/obj/item/stock_parts/computer/hard_drive/D = source["drive"] - if(D.read_only) - return "[name]: Error; could not modify attribute for file '[source["name"]]'." - F.hidden = F.hidden ? FALSE : TRUE - return "[name]: File '[source["name"]]' set to be [(F.hidden ? "in" : "")]visible."; - else if(arguments[1] == "-r") - if(!terminal.computer.delete_file(source["name"], source["drive"])) - return "[name]: Error; could not delete file '[source["name"]]'." - return "[name]: File deleted." - // Run command with two filenames - else if(arguments.len == 3) - var/list/source = get_file_location(drives, arguments[2]) - if(!source) - return "[name]: Error; unable to resolve filename." - var/list/destination = get_file_location(drives, arguments[3]) - if(!destination) - return "[name]: Error; unable to resolve filename2." - if(arguments[1] == "-m") - if(!terminal.computer.move_file(source["name"], destination["name"], source["drive"], destination["drive"])) - return "[name]: Error; could not move the file '[source["name"]]'." - return "[name]: File moved." - else if(arguments[1] == "-c") - if(!terminal.computer.move_file(source["name"], destination["name"], source["drive"], destination["drive"], TRUE)) - return "[name]: Error; could not copy the file '[source["name"]]'." - return "[name]: File copied." - -/datum/terminal_command/file/proc/output_file_list(list/drives, max_lines) - var/list/O = list() - for(var/did in drives) - var/obj/item/stock_parts/computer/hard_drive/D = drives[did] - if(!istype(D)) - continue - O += "" - O += "** Files on storage device [did]: ([D.used_capacity]GQ used out of [D.max_capacity]GQ) **" - O += "Flags Type Size Name" - // It's thematically appropriate for the command to bypass the abstraction - // of NTOS and access the hardware directly instead. - if(!D.stored_files.len) - O += "No files found on device." - else - var/i = 0 - for(var/datum/computer_file/F in D.stored_files) - if(O.len >= max_lines) // There's a line limit in the terminal, so if we approach it, break off and just list number of files on the drives. - O += ".. [(D.stored_files.len - i)] additional files." - break - var/flags = "+[(F.hidden ? "h" : "")][(F.read_only ? "r" : "rw")]" - O += "[flags] [F.filetype] [F.size]GQ [F.filename]" - i++ - return O - -/datum/terminal_command/file/proc/get_file_location(list/drives, text) - var/list/pieces = splittext(text, ":") - if(!pieces.len) - return - var/obj/item/stock_parts/computer/hard_drive/D - var/name - if(pieces.len == 1) - D = drives["C"] - name = pieces[1] - else if(pieces.len == 2) - D = drives[pieces[1]] - name = pieces[2] - else - return - if(name && istype(D)) - return list("name" = name, "drive" = D) diff --git a/code/modules/modular_computers/terminal/commands/hwinfo.dm b/code/modules/modular_computers/terminal/commands/hwinfo.dm deleted file mode 100644 index 3cc3ee2e128d2..0000000000000 --- a/code/modules/modular_computers/terminal/commands/hwinfo.dm +++ /dev/null @@ -1,30 +0,0 @@ -/// Show information about the hardware on the computer -/datum/terminal_command/hwinfo - name = "hwinfo" - man_entry = list( - "Format: hwinfo \[name\]", - "If no device specified, lists hardware.", - "If device is specified by name, runs diagnostic tests." - ) - pattern = "^hwinfo" - skill_needed = SKILL_ADEPT - -/datum/terminal_command/hwinfo/proper_input_entered(text, mob/user, datum/terminal/terminal) - var/command = copytext_char(text, 1, length(name) + 2) - if(command != name && command != "[name] ") - return syntax_error() - - var/argument = copytext_char(text, length(name) + 2, 0) - if(!argument) - . = list("[name]: Hardware Detected:") - for(var/obj/item/stock_parts/computer/ch in terminal.computer.get_all_components()) - . += ch.name - return - else - var/obj/item/stock_parts/computer/ch = terminal.computer.find_hardware_by_name(argument) - if(!ch) - return "[name]: No such hardware found." - . = list("[name]: Running diagnostic protocols...") - . += "Device type: [ch.name]" - . += ch.diagnostics() - return diff --git a/code/modules/modular_computers/terminal/commands/ifconfig.dm b/code/modules/modular_computers/terminal/commands/ifconfig.dm deleted file mode 100644 index 2601a57693601..0000000000000 --- a/code/modules/modular_computers/terminal/commands/ifconfig.dm +++ /dev/null @@ -1,43 +0,0 @@ -/// Shows information about the network card in the computer and active remote terminals -/datum/terminal_command/ifconfig - name = "ifconfig" - man_entry = list( - "Format: ifconfig \[identificator\]", - "If no identificator is specified, returns network adaptor information.", - "If identificator is specified, assign it to this interface.", - "Returns network adaptor information." - ) - pattern = "^ifconfig" - skill_needed = SKILL_EXPERT - -/datum/terminal_command/ifconfig/proper_input_entered(text, mob/user, datum/terminal/terminal) - var/command = copytext_char(text, 1, length(name) + 2) - if(command != name && command != "[name] ") - return syntax_error() - var/obj/item/stock_parts/computer/network_card/network_card = terminal.computer.get_component(PART_NETWORK) - if(!network_card) - return "[name]: No network adaptor found." - if(!network_card.check_functionality()) - return "[name]: Network adaptor not activated." - var/argument = copytext_char(text, length(name) + 2, 0) - if(!argument) - . = list( - "[name]: Resolving visible network id for outgoing connections...", - "Resolved tag - [network_card.get_network_tag()]", - "Actual tag - [network_card.get_network_tag_direct()]" - ) - if(terminal.computer.terminals) - var/list/remote_connections = list() - for(var/datum/terminal/remote/rt in terminal.computer.terminals) - var/obj/item/stock_parts/computer/network_card/origin_nc = rt.origin_computer.get_component(PART_NETWORK) - var/obj/item/stock_parts/computer/network_card/remote_nc = rt.computer.get_component(PART_NETWORK) - if(origin_nc && remote_nc) - remote_connections += "[origin_nc.get_network_tag()] -> [remote_nc.get_network_tag_direct()]" - if(remote_connections.len) - . += "" - . += "Active ssh sessions:" - . += remote_connections - return - else if (!network_card.set_identification_string(argument)) - return "[name]: Error; invalid identification string." - return "[name]: Identification string set to '[argument]'." diff --git a/code/modules/modular_computers/terminal/commands/locate.dm b/code/modules/modular_computers/terminal/commands/locate.dm deleted file mode 100644 index f8e6b2618eb3b..0000000000000 --- a/code/modules/modular_computers/terminal/commands/locate.dm +++ /dev/null @@ -1,28 +0,0 @@ -/// Get the location of targeted device -/datum/terminal_command/locate - name = "locate" - man_entry = list( - "Format: locate nid", - "Attempts to locate the device with the given nid by triangulating via relays.", - "NOTICE: Requires network operator or admin access. Use by non-admins is logged." - ) - pattern = "locate" - req_access = list(list(access_network, access_network_admin)) - skill_needed = SKILL_PROF - -/datum/terminal_command/locate/proper_input_entered(text, mob/user, datum/terminal/terminal) - var/list/arguments = get_arguments(text) - if(isnull(arguments) || arguments.len != 1) - return syntax_error() - if(!terminal.computer.get_ntnet_status()) - return network_error() - var/nid = text2num(arguments[1]) - if(!nid) - return "[name]: Error; invalid network id." - if(!has_access(list(access_network_admin), user.GetAccess())) - terminal.computer.add_log("'[name]' command executed against network id '[nid]'") - var/datum/extension/interactive/ntos/T = ntnet_global.get_os_by_nid(nid) - if(!istype(T) || !T.get_ntnet_status_incoming()) // Target device only need a direct connection to NTNet - return "[name]: Error; can not locate target device. Try ping for diagnostics." - var/area/A = get_area(T.get_physical_host()) - return "[name]: Searching ... estimated location: [(A ? sanitize(A.name) : "Unknown")]" diff --git a/code/modules/modular_computers/terminal/commands/lock.dm b/code/modules/modular_computers/terminal/commands/lock.dm deleted file mode 100644 index c2e86ebccbc7c..0000000000000 --- a/code/modules/modular_computers/terminal/commands/lock.dm +++ /dev/null @@ -1,42 +0,0 @@ -/// Toggles storage devices being read-only -/datum/terminal_command/lock - name = "lock" - man_entry = list( - "Format: lock \[did\]", - "Lists storage devices, or toggle read-only flag on storage device specified by device id.", - "For example, 'lock R' will toggle read-only mode on the device mounted on R:.", - "WARNING: All files on affected device will be read-only, and new files cannot be created." - ) - pattern = "^lock" - skill_needed = SKILL_ADEPT - -/datum/terminal_command/lock/proper_input_entered(text, mob/user, datum/terminal/terminal) - var/list/arguments = get_arguments(text) - if(isnull(arguments)) - return syntax_error() - var/list/drives = list( - "C" = terminal.computer.get_component(PART_HDD), - "R" = terminal.computer.get_component(PART_DRIVE) - ) - if(!istype(drives["C"], /obj/item/stock_parts/computer/hard_drive)) - return "[name]: Error; hard drive not found." - . = syntax_error() - var/obj/item/stock_parts/computer/hard_drive/D - if(!arguments.len) - . = list() - . += "[name]: Listing storage device status..." - for(var/did in drives) - D = drives[did] - if(!istype(D)) - continue - . += "" - . += "** Device mounted on device id [did]: **" - . += D.diagnostics() - else if(arguments.len == 1) - if(length(arguments[1]) != 1) - return - D = drives[arguments[1]] - if(!istype(D)) - return "[name]: Error; invalid device id."; - D.read_only = D.read_only ? FALSE : TRUE - return "[name]: Read-only mode on [arguments[1]] is now [D.read_only ? "enabled" : "disabled"]." diff --git a/code/modules/modular_computers/terminal/commands/log.dm b/code/modules/modular_computers/terminal/commands/log.dm deleted file mode 100644 index fc50407052ce0..0000000000000 --- a/code/modules/modular_computers/terminal/commands/log.dm +++ /dev/null @@ -1,30 +0,0 @@ -/// Emails the NTNet log to an email account -/datum/terminal_command/log - name = "log" - man_entry = list( - "Format: log email", - "Sends the content of the network log to the specified email address.", - "NOTICE: Requires network operator or admin access. Use by non-admins is logged." - ) - pattern = "^log" - req_access = list(list(access_network, access_network_admin)) - skill_needed = SKILL_EXPERT - -/datum/terminal_command/log/proper_input_entered(text, mob/user, datum/terminal/terminal) - var/argument = copytext_char(text, length(name) + 2, 0) - if(copytext_char(text, 1, length(name) + 2) != "[name] " || !argument) - return syntax_error() - if(!terminal.computer.get_ntnet_status()) - return network_error() - var/datum/computer_file/data/email_account/S = ntnet_global.find_email_by_name(EMAIL_SYSADMIN) - if(!istype(S)) - return "[name]: Error; unable to send email. [EMAIL_SYSADMIN] unavailable or missing." - var/datum/computer_file/data/email_message/M = new() - M.title = "!SENSITIVE! - NTNet System log backup" - M.stored_data = jointext(ntnet_global.logs, "
              ") - M.source = S.login - if(!S.send_mail(argument, M)) - return "[name]: Error; could not send email to '[argument]'." - if(!has_access(list(access_network_admin), user.GetAccess())) - terminal.computer.add_log("Network log sent to: [argument]") - return "[name]: Network log sent to [argument]." diff --git a/code/modules/modular_computers/terminal/commands/netscan.dm b/code/modules/modular_computers/terminal/commands/netscan.dm deleted file mode 100644 index a7870fe1f3206..0000000000000 --- a/code/modules/modular_computers/terminal/commands/netscan.dm +++ /dev/null @@ -1,19 +0,0 @@ -/// Scans the network for connected devices and returns their NIDs -/datum/terminal_command/netscan - name = "netscan" - man_entry = list( - "Format: netscan", - "Scans the local network for devices and returns their NIDs." - ) - pattern = "^netscan$" - skill_needed = SKILL_EXPERT - -/datum/terminal_command/netscan/proper_input_entered(text, mob/user, datum/terminal/terminal) - if (!ntnet_global || !terminal.computer.get_ntnet_status()) - return network_error() - . = list("Broadcast-pinging local network...") - for (var/nid in ntnet_global.registered_nids) - var/datum/extension/interactive/ntos/comp = ntnet_global.get_os_by_nid(nid) - if (comp && comp.get_ntnet_status_incoming()) - . += "NID [nid]" - . += "Found [length(.) - 1] responding devices." diff --git a/code/modules/modular_computers/terminal/commands/ping.dm b/code/modules/modular_computers/terminal/commands/ping.dm deleted file mode 100644 index 730b05221ddb9..0000000000000 --- a/code/modules/modular_computers/terminal/commands/ping.dm +++ /dev/null @@ -1,43 +0,0 @@ -/// Pings a remote device, showing the entire chain of proxy devices traversed to reach that device -/datum/terminal_command/ping - name = "ping" - man_entry = list( - "Format: ping \[nid\]", - "Checks connection to the given nid (number), or directly to NTNet relay if no nid is given." - ) - pattern = "^ping" - skill_needed = SKILL_ADEPT - -/datum/terminal_command/ping/proper_input_entered(text, mob/user, datum/terminal/terminal) - var/list/arguments = get_arguments(text) - if(isnull(arguments) || arguments.len > 1) - return syntax_error() - var/obj/item/stock_parts/computer/network_card/origin_nc = terminal.computer.get_component(PART_NETWORK) - if(!origin_nc || !origin_nc.check_functionality()) - return "[name]: Could not find valid network interface." - var/nid - if(arguments.len == 1) - nid = text2num(arguments[1]) - if(!nid) - return "[name]: Error; invalid network id." - - . = list("[name]: Establishing route to [(nid ? "NID [nid]" : "NTNet service provider")]") - var/list/route = origin_nc.get_route() - for(var/i = 1; i <= route.len; i++) - var/obj/item/stock_parts/computer/network_card/C = route[i] - if(!istype(C)) - . += "Error; connection aborted" - return - var/result = "proxy NID [C.proxy_id]... success." - if(i == route.len) - if(C.proxy_id) - result = "proxy NID [C.proxy_id]... failed. Target device not responding." - else - if(nid) - result = "target NID [nid]... failed. Target device not responding." - var/datum/extension/interactive/ntos/comp = ntnet_global.get_os_by_nid(nid) - if(comp && comp.get_ntnet_status_incoming()) - result = "target NID [nid]... success." - else - result = "NTNet service provider... success" - . += "NID [C.identification_id] connecting to [result]" diff --git a/code/modules/modular_computers/terminal/commands/prog.dm b/code/modules/modular_computers/terminal/commands/prog.dm deleted file mode 100644 index 89b5ab6a23e07..0000000000000 --- a/code/modules/modular_computers/terminal/commands/prog.dm +++ /dev/null @@ -1,72 +0,0 @@ -/// Shows and manipulates programs running on the computer -/datum/terminal_command/prog - name = "prog" - man_entry = list( - "Format: prog \[-flag pid|filename\]", - "Without options, list all programs currently running.", - "With -f followed by pid (number), toggle the program between running in foreground or background.", - "With -k and no further arguments, terminates all running programs.", - "With -k followed by pid (number), terminates the specified program.", - "With -x followed by filename, attempt to execute filename as a program.", - "With -a and no further arguments, clears the autorun setting.", - "With -a followed by filename, set autorun to use the specified filename.", - "NOTICE: Programs are executed using access credentials of the original terminal session." - ) - pattern = "^prog" - skill_needed = SKILL_ADEPT - -/datum/terminal_command/prog/proper_input_entered(text, mob/user, datum/terminal/terminal) - . = syntax_error() - var/list/arguments = get_arguments(text) - if(isnull(arguments)) - return - // Program list - if(!arguments.len) - . = list() - . += "[name]: Listing running programs..." - . += "PID Status Filename" - for(var/datum/computer_file/program/P in terminal.computer.running_programs) - if(P.program_state) - . += "[P.uid] - [(P.program_state == PROGRAM_STATE_ACTIVE ? "active" : "bckgrn")] - [P.filename]" - . += "" - // Run command with flag only - else if(arguments.len == 1) - if(arguments[1] == "-k") - for(var/datum/computer_file/program/P in terminal.computer.running_programs) - terminal.computer.kill_program_remote(P, 1) - return "[name]: All running programs terminated." - else if(arguments[1] == "-a") - if(!terminal.computer.set_autorun(null)) - return "[name]: Error; could not modify autorun data." - return "[name]: Autorun disabled" - // Run command on a pid or filename - else if(arguments.len == 2) - if(arguments[1] == "-f") - var/datum/computer_file/program/P = get_program_by_pid(arguments[2], terminal) - if(!istype(P)) - return "[name]: Error; invalid pid." - (P.program_state == PROGRAM_STATE_ACTIVE ? terminal.computer.minimize_program() : terminal.computer.activate_program(P)) - return "[name]: Program focus toggled." - else if(arguments[1] == "-k") - var/datum/computer_file/program/P = get_program_by_pid(arguments[2], terminal) - if(!istype(P)) - return "[name]: Error; invalid pid." - terminal.computer.kill_program_remote(P, 1) - return "[name]: Program [P.filename] terminated." - else if(arguments[1] == "-x") - var/datum/computer_file/program/P = terminal.computer.run_program_remote(arguments[2], user, 0) - if(!istype(P)) - return "[name]: Error; unable to execute program '[arguments[2]]'." - return "[name]: Program '[P.filename]' running with pid [P.uid]." - else if(arguments[1] == "-a") - if(!terminal.computer.set_autorun(arguments[2])) - return "[name]: Error; could not modify autorun data." - return "[name]: Autorun updated to '[arguments[2]]'" - -/datum/terminal_command/prog/proc/get_program_by_pid(pid, datum/terminal/terminal) - pid = text2num(pid) - if(!pid) - return - for(var/datum/computer_file/program/P in terminal.computer.running_programs) - if(P.uid == pid && P.program_state) - return P diff --git a/code/modules/modular_computers/terminal/commands/proxy.dm b/code/modules/modular_computers/terminal/commands/proxy.dm deleted file mode 100644 index 1e53cf1fc90c7..0000000000000 --- a/code/modules/modular_computers/terminal/commands/proxy.dm +++ /dev/null @@ -1,45 +0,0 @@ -/// Sets this computer up to use another as a proxy. If the proxy device also has a proxy itself set up, the last device in the chain is used. -/datum/terminal_command/proxy - name = "proxy" - man_entry = list( - "Format: proxy \[-s nid\]", - "Without options, displays the proxy state of network device.", - "With -s option and no further arguments, clears proxy settings.", - "With -s followed by nid (number), sets proxy to nid.", - "A set proxy will tunnel all network connections through the designated device.", - "It is recommended that the user ensure that the target device is accessible." - ) - pattern = "^proxy" - skill_needed = SKILL_EXPERT - -/datum/terminal_command/proxy/proper_input_entered(text, mob/user, datum/terminal/terminal) - var/list/arguments = get_arguments(text) - if(isnull(arguments)) - return syntax_error() - var/obj/item/stock_parts/computer/network_card/network_card = terminal.computer.get_component(PART_NETWORK) - if(!network_card || !network_card.check_functionality()) - return "[name]: Could not find valid network interface." - if(!arguments.len) - if(!network_card.proxy_id) - return "[name]: This device is not using a proxy." - return "[name]: This device is set to connect via proxy with NID '[network_card.proxy_id]'." - else if(arguments.len == 1 && arguments[1] == "-s") - if(!network_card.proxy_id) - return "[name]: Error; this device is not using a proxy." - network_card.proxy_id = null - return "[name]: Device proxy cleared." - else if(arguments.len == 2 && arguments[1] == "-s") - var/nid = text2num(arguments[2]) - if(!nid) - return "[name]: Error; invalid NID." - var/datum/extension/interactive/ntos/target = ntnet_global.get_os_by_nid(nid) - if(target == terminal.computer) - return "[name]: Error: cannot setup a device to be its own proxy." - if(!terminal.computer.get_ntnet_status_incoming() || !target || !target.get_ntnet_status_incoming()) // Both devices only need a direct connection to NTNet to set up - return "[name]: Error; cannot locate target device. Try ping for diagnostics." - var/log_entry = "([time_stamp()]) - Proxy routing request accepted from: [network_card.get_network_tag_direct()].\[br\]" - if(!target.update_data_file("proxy", log_entry, /datum/computer_file/data/logfile)) - return "[name]: Error; unable to save proxy registration on target device." - network_card.proxy_id = nid - return "[name]: Device proxy set to NID '[nid]'." - return syntax_error() diff --git a/code/modules/modular_computers/terminal/commands/purge.dm b/code/modules/modular_computers/terminal/commands/purge.dm deleted file mode 100644 index 943e2420f5f01..0000000000000 --- a/code/modules/modular_computers/terminal/commands/purge.dm +++ /dev/null @@ -1,19 +0,0 @@ -/// Purge NTNet log and reset intrusition alarm -/datum/terminal_command/purge - name = "purge" - man_entry = list( - "Format: purge", - "Purge network log and reset intrusion network alarm.", - "NOTICE: Requires network admin access." - ) - pattern = "^purge$" - req_access = list(access_network_admin) - skill_needed = SKILL_PROF - -/datum/terminal_command/purge/proper_input_entered(text, mob/user, datum/terminal/terminal) - if(!ntnet_global || !terminal.computer.get_ntnet_status()) - return network_error() - terminal.computer.add_log("Network packet sent to NTNet Statistics & Configuration") - ntnet_global.resetIDS() - ntnet_global.purge_logs() - return list("[name]: NTNet intrusion alarm and log purge complete.") diff --git a/code/modules/modular_computers/terminal/commands/relays.dm b/code/modules/modular_computers/terminal/commands/relays.dm deleted file mode 100644 index 50007d1ce20f6..0000000000000 --- a/code/modules/modular_computers/terminal/commands/relays.dm +++ /dev/null @@ -1,22 +0,0 @@ -/// Shows information about active NTNet relays -/datum/terminal_command/relays - name = "relays" - man_entry = list( - "Format: relays", - "Gives information about the active relays found on the network.", - "NOTICE: Requires network operator or admin access." - ) - pattern = "^relays$" - req_access = list(list(access_network, access_network_admin)) - skill_needed = SKILL_EXPERT - -/datum/terminal_command/relays/proper_input_entered(text, mob/user, datum/terminal/terminal) - . = list("[name]: Number of relays found: [ntnet_global.relays.len]") - for(var/obj/machinery/ntnet_relay/R in ntnet_global.relays) - . += "Quantum relay ([R.uid]) status: [(R.operable() ? "Reachable" : "Unreachable")]" - if(R.operable()) - if(!!R.get_component_of_type(/obj/item/stock_parts/computer/hard_drive/portable)) - . += "LOG BACKUP STORAGE DEVICE PRESENT" - var/area/A = get_area(R) - . += "Triangulating signal... estimated location: [(A ? sanitize(A.name) : "Unknown")]" - . += "" diff --git a/code/modules/modular_computers/terminal/commands/shutdown.dm b/code/modules/modular_computers/terminal/commands/shutdown.dm deleted file mode 100644 index ab09c12095e53..0000000000000 --- a/code/modules/modular_computers/terminal/commands/shutdown.dm +++ /dev/null @@ -1,13 +0,0 @@ -/// Shuts down the computer this terminal is running on -/datum/terminal_command/shutdown - name = "shutdown" - man_entry = list( - "Format: shutdown", - "Turns the system off immediately" - ) - pattern = "^shutdown$" - -/datum/terminal_command/shutdown/proper_input_entered(text, mob/user, datum/terminal/terminal) - terminal.computer.system_shutdown() - qdel(terminal) - return list() diff --git a/code/modules/modular_computers/terminal/commands/ssh.dm b/code/modules/modular_computers/terminal/commands/ssh.dm deleted file mode 100644 index 181c4089336d4..0000000000000 --- a/code/modules/modular_computers/terminal/commands/ssh.dm +++ /dev/null @@ -1,47 +0,0 @@ -// Creates a remote terminal on the targeted computer -/datum/terminal_command/ssh - name = "ssh" - man_entry = list( - "Format: ssh nid", - "Opens a remote terminal on the device corresponding to the specified nid (number).", - "NOTICE: Requires network admin access." - ) - pattern = "^ssh" - req_access = list(access_network_admin) - skill_needed = SKILL_EXPERT - -/datum/terminal_command/check_access(mob/user, datum/terminal/terminal) - if(terminal.computer.emagged() && !istype(terminal, /datum/terminal/remote)) - return TRUE // Helps let antags do hacker gimmicks without having to get universal network access first. - return ..() - -/datum/terminal_command/ssh/proper_input_entered(text, mob/user, datum/terminal/terminal) - if(istype(terminal, /datum/terminal/remote)) - return "[name]: Error; [name] is not supported on remote terminals." - var/list/arguments = get_arguments(text) - if(isnull(arguments) || arguments.len != 1) - return syntax_error() - if(!terminal.computer.get_ntnet_status()) - return network_error() - . = list() - if(terminal.computer.emagged()) - . += "CRYPTOGRAPHIC ATTACK PROTOCOL ENABLED" - var/nid = text2num(arguments[1]) - if(!nid) - . += "[name]: Error; invalid network id." - return - var/datum/extension/interactive/ntos/T = ntnet_global.get_os_by_nid(nid) - if(!istype(T) || !T.get_ntnet_status_incoming()) // Target device only need a direct connection to NTNet - . += "[name]: Error; cannot locate target device. Try ping for diagnostics." - return - if(T == terminal.computer) - . += "[name]: Error: cannot open remote terminal session on same device." - return - if(T.has_terminal(user)) - . += "[name]: Error; a remote terminal to this device is already active." - return - var/datum/terminal/remote/new_term = new (user, T, terminal.computer) - LAZYADD(T.terminals, new_term) - LAZYADD(terminal.computer.terminals, new_term) - . += "[name]: Connection established." - return \ No newline at end of file diff --git a/code/modules/modular_computers/terminal/commands/status.dm b/code/modules/modular_computers/terminal/commands/status.dm deleted file mode 100644 index c96e630626f56..0000000000000 --- a/code/modules/modular_computers/terminal/commands/status.dm +++ /dev/null @@ -1,20 +0,0 @@ -/// Shows status on NTNet -/datum/terminal_command/status - name = "status" - man_entry = list( - "Format: status", - "Reports network status information.", - "NOTICE: Requires network operator or admin access." - ) - pattern = "^status$" - req_access = list(list(access_network, access_network_admin)) - skill_needed = SKILL_EXPERT - -/datum/terminal_command/status/proper_input_entered(text, mob/user, datum/terminal/terminal) - if(!terminal.computer.get_ntnet_status()) - return network_error() - . = list() - . += "NTnet status: [ntnet_global.check_function() ? "ENABLED" : "DISABLED"]" - . += "Alarm status: [ntnet_global.intrusion_detection_enabled ? "ENABLED" : "DISABLED"]" - if(ntnet_global.intrusion_detection_alarm) - . += "NETWORK INCURSION DETECTED" diff --git a/code/modules/modular_computers/terminal/commands/sysnotify.dm b/code/modules/modular_computers/terminal/commands/sysnotify.dm deleted file mode 100644 index f02a3de5743f4..0000000000000 --- a/code/modules/modular_computers/terminal/commands/sysnotify.dm +++ /dev/null @@ -1,17 +0,0 @@ -/// Causes computer to play a sound and show a message to everyone around it -/datum/terminal_command/sysnotify - name = "sysnotify" - man_entry = list( - "Format: sysnotify message", - "Triggers a system notification showing the specified message, along with an audio alert." - ) - pattern = "^sysnotify" - skill_needed = SKILL_PROF - -/datum/terminal_command/sysnotify/proper_input_entered(text, mob/user, datum/terminal/terminal) - var/argument = copytext_char(text, length(name) + 2, 0) - if(copytext_char(text, 1, length(name) + 2) != "[name] " || !argument) - return syntax_error() - terminal.computer.audible_notification("sound/machines/ping.ogg") - terminal.computer.visible_notification(argument) - return list() diff --git a/code/modules/modular_computers/terminal/terminal.dm b/code/modules/modular_computers/terminal/terminal.dm deleted file mode 100644 index b92a8813f7e2b..0000000000000 --- a/code/modules/modular_computers/terminal/terminal.dm +++ /dev/null @@ -1,98 +0,0 @@ -/// System for a shitty terminal emulator. -/datum/terminal - var/name = "Terminal" - var/datum/browser/panel - var/list/history = list() - var/list/history_max_length = 50 - var/datum/extension/interactive/ntos/computer - -/datum/terminal/New(mob/user, datum/extension/interactive/ntos/computer) - ..() - src.computer = computer - if(user && can_use(user)) - show_terminal(user) - START_PROCESSING(SSprocessing, src) - -/datum/terminal/Destroy() - STOP_PROCESSING(SSprocessing, src) - if(computer && computer.terminals) - computer.terminals -= src - computer = null - if(panel) - panel.close() - QDEL_NULL(panel) - return ..() - -/datum/terminal/proc/can_use(mob/user) - if(!user) - return FALSE - if(!computer || !computer.on) - return FALSE - if(!CanInteractWith(user, computer, GLOB.default_state)) - return FALSE - return TRUE - -/datum/terminal/Process() - if(!can_use(get_user())) - qdel(src) - -/datum/terminal/proc/command_by_name(name) - for(var/command in GLOB.terminal_commands) - var/datum/terminal_command/command_datum = command - if(command_datum.name == name) - return command - -/datum/terminal/proc/get_user() - if(panel) - return panel.user - -/datum/terminal/proc/show_terminal(mob/user) - panel = new(user, "terminal-\ref[computer]", name, 800, 600, src) - update_content() - panel.open() - -/datum/terminal/proc/update_content() - var/list/content = history.Copy() - content += "
              " - content += "type `man` for a list of available commands." - panel.set_content(jointext(content, "
              ")) - -/datum/terminal/Topic(href, href_list) - if(..()) - return TOPIC_HANDLED - if(!can_use(usr) || href_list["close"]) - qdel(src) - return TOPIC_HANDLED - if(href_list["input"]) - var/input = sanitize(href_list["input"]) - history += "> [input]" - var/output = parse(input, usr) - if(QDELETED(src)) // Check for exit. - return TOPIC_HANDLED - history += output - if(length(history) > history_max_length) - history.Cut(1, length(history) - history_max_length + 1) - update_content() - panel.update() - return TOPIC_HANDLED - -/datum/terminal/proc/parse(text, mob/user) - if(user.skill_check(SKILL_COMPUTER, SKILL_BASIC)) - for(var/datum/terminal_command/command in GLOB.terminal_commands) - . = command.parse(text, user, src) - if(!isnull(.)) - return - else - . = skill_critical_fail(user) - if(!isnull(.)) // If it does something silently, we give generic text. - return - return "Command [text] not found." - -/datum/terminal/proc/skill_critical_fail(user) - var/list/candidates = list() - for(var/datum/terminal_skill_fail/scf in GLOB.terminal_fails) - if(scf.can_run(user, src)) - candidates[scf] = scf.weight - var/datum/terminal_skill_fail/chosen = pickweight(candidates) - if(istype(chosen)) - return chosen.execute(src) diff --git a/code/modules/modular_computers/terminal/terminal_commands.dm b/code/modules/modular_computers/terminal/terminal_commands.dm deleted file mode 100644 index 18d54d6cb602e..0000000000000 --- a/code/modules/modular_computers/terminal/terminal_commands.dm +++ /dev/null @@ -1,120 +0,0 @@ -/// To cut down on unneeded creation/deletion, these are global. -GLOBAL_LIST_INIT(terminal_commands, init_subtypes(/datum/terminal_command)) - -/datum/terminal_command - /// The name of the command. Used for display and also in syntax checking. - var/name - /// Shown when man name is entered. Can be a list of strings, which will then be shown on separate lines. - var/man_entry - /// Matched using regex against terminal input - var/pattern - /// Used in the regex - var/regex_flags - /// The actual regex, produced from above. - var/regex/regex - /// The skill which is checked - var/core_skill = SKILL_COMPUTER - /// How much skill the user needs to use this. This is not for critical failure effects at unskilled; those are handled globally. - var/skill_needed = SKILL_BASIC - /// Access needed, if any - var/req_access = list() - -/datum/terminal_command/New() - regex = new (pattern, regex_flags) - ..() - -/datum/terminal_command/proc/check_access(mob/user, datum/terminal/terminal) - return has_access(req_access, user.GetAccess()) - -/// null return: continue. "" return will break and show a blank line. Return list() to break and not show anything. -/datum/terminal_command/proc/parse(text, mob/user, datum/terminal/terminal) - if(!findtext(text, regex)) - return - if(!user.skill_check(core_skill, skill_needed)) - return skill_fail_message() - if(!check_access(user, terminal)) - return "[name]: ACCESS DENIED" - return proper_input_entered(text, user, terminal) - -/// Should not return null unless you want parser to continue. -/datum/terminal_command/proc/proper_input_entered(text, mob/user, datum/terminal/terminal) - return list() - -/datum/terminal_command/proc/skill_fail_message() - var/message = pick(list( - "Possible encoding mismatch detected.", - "Update packages found; download suggested.", - "No such option found.", - "Flag mismatch." - )) - return list("Command not understood.", message) - -/// Returns list of arguments (if any), or null on syntax error -/datum/terminal_command/proc/get_arguments(text) - var/list/arguments = splittext(text, " ") - if(!arguments.len || arguments[1] != name) - return - - if(arguments.len == 1) - return list() - arguments.Cut(1,2) - return arguments - -/datum/terminal_command/proc/syntax_error() - return "[name]: Error; invalid input. Enter 'man [name]' for syntax help." - -/datum/terminal_command/proc/network_error() - return "[name]: Error; unable to establish connection to NTNet. Check network hardware." - -/** Core commands are included here */ - -/datum/terminal_command/clear - name = "clear" - man_entry = list( - "Format: clear", - "Erases terminal output." - ) - pattern = "^clear$" - -/datum/terminal_command/clear/proper_input_entered(text, mob/user, datum/terminal/terminal) - terminal.history = list() - return list() - -/datum/terminal_command/exit - name = "exit" - man_entry = list( - "Format: exit", - "Exits terminal immediately." - ) - pattern = "^exit$" - -/datum/terminal_command/exit/proper_input_entered(text, mob/user, datum/terminal/terminal) - qdel(terminal) - return list() - -/datum/terminal_command/man - name = "man" - man_entry = list( - "Format: man \[command\]", - "Without command specified, shows list of available commands.", - "With command, provides instructions on command use." - ) - pattern = "^man" - -/datum/terminal_command/man/proper_input_entered(text, mob/user, datum/terminal/terminal) - var/list/arguments = get_arguments(text) - if(isnull(arguments)) - return syntax_error() - if(!arguments.len) - . = list("The following commands are available.", "Some may require additional access.") - for(var/command in GLOB.terminal_commands) - var/datum/terminal_command/command_datum = command - if(user.skill_check(command_datum.core_skill, command_datum.skill_needed)) - . += command_datum.name - return - else if(arguments.len == 1) - var/datum/terminal_command/command_datum = terminal.command_by_name(arguments[1]) - if(!command_datum) - return "[name]: Error; command '[arguments[1]]' not found." - return command_datum.man_entry - return syntax_error() diff --git a/code/modules/modular_computers/terminal/terminal_remote.dm b/code/modules/modular_computers/terminal/terminal_remote.dm deleted file mode 100644 index ac35e08e5c3ce..0000000000000 --- a/code/modules/modular_computers/terminal/terminal_remote.dm +++ /dev/null @@ -1,25 +0,0 @@ -/// The computer var is for the remote computer with these. -/datum/terminal/remote - name = "Remote Terminal" - var/datum/extension/interactive/ntos/origin_computer - -/datum/terminal/remote/New(mob/user, datum/extension/interactive/ntos/computer, datum/extension/interactive/ntos/origin) - origin_computer = origin - ..(user, computer) - -/datum/terminal/remote/Destroy() - if(origin_computer && origin_computer.terminals) - origin_computer.terminals -= src - origin_computer = null - return ..() - -/datum/terminal/remote/can_use(mob/user) - if(!user) - return FALSE - - if(!computer || !computer.get_ntnet_status_incoming() || !origin_computer.get_ntnet_status()) - return FALSE - if(!CanInteractWith(user, origin_computer, GLOB.default_state)) - return FALSE - - return TRUE diff --git a/code/modules/modular_computers/terminal/terminal_skill_fail.dm b/code/modules/modular_computers/terminal/terminal_skill_fail.dm deleted file mode 100644 index 779416b74ad9c..0000000000000 --- a/code/modules/modular_computers/terminal/terminal_skill_fail.dm +++ /dev/null @@ -1,148 +0,0 @@ -GLOBAL_LIST_INIT(terminal_fails, init_subtypes(/datum/terminal_skill_fail)) - -/datum/terminal_skill_fail - var/require_ntnet = FALSE - var/weight = 10 - var/message - -/// Returns TRUE if this skill failure can run, otherwise FALSE. -/datum/terminal_skill_fail/proc/can_run(mob/user, datum/terminal/terminal) - if (require_ntnet) - return !!terminal.computer.get_ntnet_status() - return TRUE - -/datum/terminal_skill_fail/proc/execute(datum/terminal/terminal) - return message - -/// General failure with no consequences. -/datum/terminal_skill_fail/error - weight = 50 - -/datum/terminal_skill_fail/error/execute(datum/terminal/terminal) - return pick(list( - "Invalid input.", - "Wrong command syntax.", - "Incomplete argument(s).", - "No file found by that name.", - "Non-existant storage device specified.", - "License key expired.", - "Running script... infinite loop detected; aborting.", - "ACCESS DENIED" - )) - -/// General fail with a chance of embarrasment. -/datum/terminal_skill_fail/sysnotify - weight = 20 - -/datum/terminal_skill_fail/sysnotify/execute(datum/terminal/terminal) - var/message = pick(list( - "Feline-like typing detected. Input ignored.", - "Search for 'how to computer' yielded 0 result(s).", - "!!!YOU ARE A WINNER!!! - Type your login on RealPrizeNet to claim reward!", - "All scheduled events have been purged from personal calendar.", - "Voice Recognition Interface unavailable to process commands. Please enter input instead of speaking to device.", - "Cannot access personal folder 'XXXAdult' in NTNet Nebula Storage; service unreachable.", - "Unable to send new friend request to user 'SsswoleUnathi99' while a request is already pending.", - "Hi! It looks like you are attempting to activate a \. Would you like help?" - )) - terminal.computer.audible_notification("sound/machines/ping.ogg") - terminal.computer.visible_notification(message) - return list() - -/datum/terminal_skill_fail/operator - require_ntnet = TRUE - message = "Accessing network operator resources!" - -/datum/terminal_skill_fail/operator/can_run(mob/user, datum/terminal/terminal) - if(!has_access(list(list(access_network, access_network_admin)), user.GetAccess())) - return - return ..() - -/datum/terminal_skill_fail/operator/access - message = "Attempting to brute force network admin credentials... unsuccesful. Attempt logged." - -/datum/terminal_skill_fail/operator/access/execute(datum/terminal/terminal) - ntnet_global.add_log_with_ids_check("Unauthorised access attempt to primary keycode database.", terminal.computer.get_component(PART_NETWORK)) - return ..() - -/datum/terminal_skill_fail/operator/dos - message = "Sending content of dev/random to relay... Connection denied due to excess traffic." - -/datum/terminal_skill_fail/operator/dos/execute(datum/terminal/terminal) - var/obj/machinery/ntnet_relay/R = pick(ntnet_global.relays) - if (!istype(R)) - return "Unable to locate Quantum Relay to attack." - ntnet_global.add_log_with_ids_check("Excess traffic flood targeting Quantum Relay ([R.uid]) detected from 1 device\s: [terminal.computer.get_network_tag()]") - return ..() - -/datum/terminal_skill_fail/operator/camera - message = "Accessing raw camera feed... unsuccesful. Attempt logged." - -/datum/terminal_skill_fail/operator/camera/execute(datum/terminal/terminal) - var/network = pick(GLOB.using_map.station_networks) - if (!network) - return "Unable to locate camera network to access." - ntnet_global.add_log_with_ids_check("Unauthorised access detected to camera network [network].", terminal.computer.get_component(PART_NETWORK)) - return ..() - -/datum/terminal_skill_fail/operator/email_logs - weight = 2 - message = "System log backup successful. Chosen method: email attachment. Recipients: all." - -/datum/terminal_skill_fail/operator/email_logs/execute(datum/terminal/terminal) - var/datum/computer_file/data/email_account/S = ntnet_global.find_email_by_name(EMAIL_SYSADMIN) - if(!istype(S)) - return list() - var/datum/computer_file/data/email_message/M = new() - M.title = "!SENSITIVE! - NTNet System log backup" - M.stored_data = jointext(ntnet_global.logs, "
              ") - M.source = S.login - if(!S.send_mail(EMAIL_BROADCAST, M)) - return list() - terminal.computer.add_log("Network log sent to: all") - return ..() - -/datum/terminal_skill_fail/admin - require_ntnet = TRUE - weight = 5 - message = "Updating admin privileges!" - -/datum/terminal_skill_fail/admin/can_run(mob/user, datum/terminal/terminal) - if(!has_access(list(access_network_admin), user.GetAccess())) - return - return ..() - -/datum/terminal_skill_fail/admin/random_ban - message = "Entered id successfully banned!" - -/datum/terminal_skill_fail/admin/random_ban/execute(datum/terminal/terminal) - var/id = pick(ntnet_global.registered_nids) - if (!id || (id in ntnet_global.banned_nids)) - return "Unable to locate network id to ban." - LAZYADD(ntnet_global.banned_nids, id) - return ..() - -/datum/terminal_skill_fail/admin/random_unban - message = "Entered id successfully unbanned!" - -/datum/terminal_skill_fail/admin/random_unban/execute(datum/terminal/terminal) - var/id = pick_n_take(ntnet_global.banned_nids) - if(!id) - return "Unable to locate network id to unban." - return ..() - -/datum/terminal_skill_fail/admin/purge - message = "Memory reclamation successful! Logs fully purged!" - -/datum/terminal_skill_fail/admin/purge/execute(datum/terminal/terminal) - terminal.computer.add_log("Network packet sent to NTNet Statistics & Configuration") - ntnet_global.purge_logs() - return ..() - -/datum/terminal_skill_fail/admin/alarm_reset - message = "Intrusion Detecton System state reset!" - -/datum/terminal_skill_fail/admin/alarm_reset/execute(datum/terminal/terminal) - terminal.computer.add_log("Network packet sent to NTNet Statistics & Configuration") - ntnet_global.resetIDS() - return ..() \ No newline at end of file diff --git a/code/modules/multiz/_stubs.dm b/code/modules/multiz/_stubs.dm deleted file mode 100644 index ce60b5c53972b..0000000000000 --- a/code/modules/multiz/_stubs.dm +++ /dev/null @@ -1,7 +0,0 @@ -/obj/effect/landmark/map_data - name = "Map Data" - desc = "An unknown location." - invisibility = 101 - - var/height = 1 ///< The number of Z-Levels in the map. - var/turf/edge_type ///< What the map edge should be formed with. (null = world.turf) diff --git a/code/modules/multiz/basic.dm b/code/modules/multiz/basic.dm deleted file mode 100644 index 3c31ec9532cd6..0000000000000 --- a/code/modules/multiz/basic.dm +++ /dev/null @@ -1,59 +0,0 @@ -// If you add a more comprehensive system, just untick this file. -var/global/list/z_levels = list()// Each bit re... haha just kidding this is a list of bools now - -// If the height is more than 1, we mark all contained levels as connected. -/obj/effect/landmark/map_data/New(turf/loc, _height) - ..() - if(!istype(loc)) // Using loc.z is safer when using the maploader and New. - return - if(_height) - height = _height - for(var/i = (loc.z - height + 1) to (loc.z-1)) - if (z_levels.len = world.maxz || z < 1 || z > z_levels.len) - return 0 - return z_levels[z] - -/proc/HasBelow(var/z) - if(z > world.maxz || z < 2 || (z-1) > z_levels.len) - return 0 - return z_levels[z-1] - -// Thankfully, no bitwise magic is needed here. -/proc/GetAbove(var/atom/atom) - var/turf/turf = get_turf(atom) - if(!turf) - return null - return HasAbove(turf.z) ? get_step(turf, UP) : null - -/proc/GetBelow(var/atom/atom) - var/turf/turf = get_turf(atom) - if(!turf) - return null - return HasBelow(turf.z) ? get_step(turf, DOWN) : null - -/proc/GetConnectedZlevels(z) - . = list(z) - for(var/level = z, HasBelow(level), level--) - . |= level-1 - for(var/level = z, HasAbove(level), level++) - . |= level+1 - -/proc/AreConnectedZLevels(var/zA, var/zB) - return zA == zB || (zB in GetConnectedZlevels(zA)) - -/proc/get_zstep(ref, dir) - if(dir == UP) - . = GetAbove(ref) - else if (dir == DOWN) - . = GetBelow(ref) - else - . = get_step(ref, dir) \ No newline at end of file diff --git a/code/modules/multiz/disabled.dm b/code/modules/multiz/disabled.dm deleted file mode 100644 index 5d5a8fc20865b..0000000000000 --- a/code/modules/multiz/disabled.dm +++ /dev/null @@ -1,11 +0,0 @@ -GLOBAL_VAR_CONST(HIGHEST_CONNECTABLE_ZLEVEL_INDEX, 0) - -/proc/HasAbove(var/z) - return 0 -/proc/HasBelow(var/z) - return 0 -// These give either the turf or null. -/proc/GetAbove(var/turf/turf) - return null -/proc/GetBelow(var/turf/turf) - return null diff --git a/code/modules/multiz/movement.dm b/code/modules/multiz/movement.dm deleted file mode 100644 index 42102e8a34227..0000000000000 --- a/code/modules/multiz/movement.dm +++ /dev/null @@ -1,362 +0,0 @@ -/mob/verb/up() - set name = "Move Upwards" - set category = "IC" - - move_up() - -/mob/verb/down() - set name = "Move Down" - set category = "IC" - - SelfMove(DOWN) - -/mob/proc/move_up() - SelfMove(UP) - -/mob/living/carbon/human/move_up() - var/turf/old_loc = loc - ..() - if(loc != old_loc) - return - - var/turf/simulated/open/O = GetAbove(src) - var/atom/climb_target - if(istype(O)) - for(var/turf/T in trange(1,O)) - if(!isopenspace(T) && T.is_floor()) - climb_target = T - else - for(var/obj/I in T) - if(I.obj_flags & OBJ_FLAG_NOFALL) - climb_target = I - break - if(climb_target) - break - - if(climb_target) - climb_up(climb_target) - -/mob/proc/zPull(direction) - //checks and handles pulled items across z levels - if(!pulling) - return 0 - - var/turf/start = pulling.loc - var/turf/destination = (direction == UP) ? GetAbove(pulling) : GetBelow(pulling) - - if(!start.CanZPass(pulling, direction)) - to_chat(src, "\The [start] blocked your pulled object!") - stop_pulling() - return 0 - - if(!destination.CanZPass(pulling, direction)) - to_chat(src, "The [pulling] you were pulling bumps up against \the [destination].") - stop_pulling() - return 0 - - for(var/atom/A in destination) - if(!A.CanMoveOnto(pulling, start, 1.5, direction)) - to_chat(src, "\The [A] blocks the [pulling] you were pulling.") - stop_pulling() - return 0 - - pulling.forceMove(destination) - return 1 - -/atom/proc/CanMoveOnto(atom/movable/mover, turf/target, height=1.5, direction = 0) - //Purpose: Determines if the object can move through this - //Uses regular limitations plus whatever we think is an exception for the purpose of - //moving up and down z levles - return CanPass(mover, target, height, 0) || (direction == DOWN && (atom_flags & ATOM_FLAG_CLIMBABLE)) - -/mob/proc/can_overcome_gravity() - return FALSE - -/mob/living/carbon/human/can_overcome_gravity() - //First do species check - if(species && species.can_overcome_gravity(src)) - return 1 - else - var/turf/T = loc - if(((T.height + T.get_fluid_depth()) >= FLUID_DEEP) || T.get_fluid_depth() >= FLUID_MAX_DEPTH) - return can_float() - - for(var/atom/a in src.loc) - if(a.atom_flags & ATOM_FLAG_CLIMBABLE) - return 1 - - //Last check, list of items that could plausibly be used to climb but aren't climbable themselves - var/list/objects_to_stand_on = list( - /obj/item/stool, - /obj/structure/bed, - ) - for(var/type in objects_to_stand_on) - if(locate(type) in src.loc) - return 1 - return 0 - -/mob/proc/can_ztravel() - return 0 - -/mob/living/carbon/human/can_ztravel() - if(Allow_Spacemove()) - return 1 - - if(Check_Shoegrip()) //scaling hull with magboots - for(var/turf/simulated/T in trange(1,src)) - if(T.density) - return 1 - -/mob/living/silicon/robot/can_ztravel() - if(Allow_Spacemove()) //Checks for active jetpack - return 1 - - for(var/turf/simulated/T in trange(1,src)) //Robots get "magboots" - if(T.density) - return 1 - -//FALLING STUFF - -//Holds fall checks that should not be overriden by children -/atom/movable/proc/fall(var/lastloc) - if(!isturf(loc)) - return - - var/turf/below = GetBelow(src) - if(!below) - return - - var/turf/T = loc - if(!T.CanZPass(src, DOWN) || !below.CanZPass(src, DOWN)) - return - - // No gravity in space, apparently. - var/area/area = get_area(src) - if(!area.has_gravity()) - return - - if(throwing) - return - - if(can_fall()) - begin_falling(lastloc, below) - -// We timer(0) here to let the current move operation complete before we start falling. fall() is normally called from -// Entered() which is part of Move(), by spawn()ing we let that complete. But we want to preserve if we were in client movement -// or normal movement so other move behavior can continue. -/atom/movable/proc/begin_falling(var/lastloc, var/below) - addtimer(CALLBACK(src, /atom/movable/proc/fall_callback, below), 0) - -/atom/movable/proc/fall_callback(var/turf/below) - var/mob/M = src - var/is_client_moving = (ismob(M) && M.moving) - if(is_client_moving) M.moving = 1 - handle_fall(below) - if(is_client_moving) M.moving = 0 - -//For children to override -/atom/movable/proc/can_fall(var/anchor_bypass = FALSE, var/turf/location_override = loc) - if(!simulated) - return FALSE - - if(anchored && !anchor_bypass) - return FALSE - - //Override will make checks from different location used for prediction - if(location_override) - for(var/obj/O in location_override) - if(O.obj_flags & OBJ_FLAG_NOFALL) - return FALSE - - var/turf/below = GetBelow(location_override) - for(var/atom/A in below) - if(!A.CanPass(src, location_override)) - return FALSE - - if(location_override.get_fluid_depth() >= FLUID_DEEP) - if(below == loc) //We are checking above, - if(!(below.get_fluid_depth() >= 0.95 * FLUID_MAX_DEPTH)) //No salmon skipping up a stream of falling water - return TRUE - return !can_float() - - return TRUE - -/obj/can_fall(var/anchor_bypass = FALSE, var/turf/location_override = loc) - return ..(anchor_fall) - -/obj/effect/can_fall(var/anchor_bypass = FALSE, var/turf/location_override = loc) - return FALSE - -/obj/effect/decal/cleanable/can_fall(var/anchor_bypass = FALSE, var/turf/location_override = loc) - return TRUE - -/obj/item/pipe/can_fall(var/anchor_bypass = FALSE, var/turf/location_override = loc) - var/turf/simulated/open/below = loc - below = below.below - - . = ..() - - if(anchored) - return FALSE - - if((locate(/obj/structure/disposalpipe/up) in below) || locate(/obj/machinery/atmospherics/pipe/zpipe/up) in below) - return FALSE - -/mob/living/carbon/human/can_fall(var/anchor_bypass = FALSE, var/turf/location_override = loc) - if(..()) - return species.can_fall(src) - -/atom/movable/proc/handle_fall(var/turf/landing) - forceMove(landing) - if(locate(/obj/structure/stairs) in landing) - return 1 - else if(landing.get_fluid_depth() >= FLUID_DEEP) - visible_message(SPAN_NOTICE("\The [src] falls into the water!"), SPAN_NOTICE("What a splash!")) - playsound(src, 'sound/effects/watersplash.ogg', 30, TRUE) - return 1 - else - handle_fall_effect(landing) - -/atom/movable/proc/handle_fall_effect(var/turf/landing) - if(istype(landing, /turf/simulated/open)) - visible_message("\The [src] falls through \the [landing]!", "You hear a whoosh of displaced air.") - else - visible_message("\The [src] slams into \the [landing]!", "You hear something slam into the deck.") - if(fall_damage()) - for(var/mob/living/M in landing.contents) - if(M == src) - continue - visible_message("\The [src] hits \the [M.name]!") - M.take_overall_damage(fall_damage()) - -/atom/movable/proc/fall_damage() - return 0 - -/obj/fall_damage() - if(w_class == ITEM_SIZE_TINY) - return 0 - if(w_class == ITEM_SIZE_NO_CONTAINER) - return 150 - return BASE_STORAGE_COST(w_class) - -/mob/living/carbon/human/handle_fall_effect(var/turf/landing) - if(species && species.handle_fall_special(src, landing)) - return - - ..() - var/min_damage = 7 - var/max_damage = 14 - apply_damage(rand(min_damage, max_damage), DAMAGE_BRUTE, BP_HEAD, armor_pen = 50) - apply_damage(rand(min_damage, max_damage), DAMAGE_BRUTE, BP_CHEST, armor_pen = 50) - apply_damage(rand(min_damage, max_damage), DAMAGE_BRUTE, BP_GROIN, armor_pen = 75) - apply_damage(rand(min_damage, max_damage), DAMAGE_BRUTE, BP_L_LEG, armor_pen = 100) - apply_damage(rand(min_damage, max_damage), DAMAGE_BRUTE, BP_R_LEG, armor_pen = 100) - apply_damage(rand(min_damage, max_damage), DAMAGE_BRUTE, BP_L_FOOT, armor_pen = 100) - apply_damage(rand(min_damage, max_damage), DAMAGE_BRUTE, BP_R_FOOT, armor_pen = 100) - apply_damage(rand(min_damage, max_damage), DAMAGE_BRUTE, BP_L_ARM, armor_pen = 75) - apply_damage(rand(min_damage, max_damage), DAMAGE_BRUTE, BP_R_ARM, armor_pen = 75) - weakened = max(weakened, 3) - if(prob(skill_fail_chance(SKILL_HAULING, 40, SKILL_EXPERT, 2))) - var/list/victims = list() - for(var/tag in list(BP_L_FOOT, BP_R_FOOT, BP_L_ARM, BP_R_ARM)) - var/obj/item/organ/external/E = get_organ(tag) - if(E && !E.is_stump() && !E.dislocated && !BP_IS_ROBOTIC(E)) - victims += E - if(victims.len) - var/obj/item/organ/external/victim = pick(victims) - victim.dislocate() - to_chat(src, "You feel a sickening pop as your [victim.joint] is wrenched out of the socket.") - updatehealth() - - -/mob/living/carbon/human/proc/climb_up(atom/A) - if(!isturf(loc) || !bound_overlay || bound_overlay.destruction_timer || is_physically_disabled()) // This destruction_timer check ideally wouldn't be required, but I'm not awake enough to refactor this to not need it. - return FALSE - - var/turf/T = get_turf(A) - var/turf/above = GetAbove(src) - if(above && T.Adjacent(bound_overlay) && above.CanZPass(src, UP)) //Certain structures will block passage from below, others not - var/area/location = get_area(loc) - if(location.has_gravity && !can_overcome_gravity()) - return FALSE - - visible_message("[src] starts climbing onto \the [A]!", "You start climbing onto \the [A]!") - if(do_after(src, 5 SECONDS, A, DO_PUBLIC_UNIQUE)) - visible_message("[src] climbs onto \the [A]!", "You climb onto \the [A]!") - src.Move(T) - else - visible_message("[src] gives up on trying to climb onto \the [A]!", "You give up on trying to climb onto \the [A]!") - return TRUE - -/atom/movable/proc/can_float() - return FALSE - -/mob/living/can_float() - return !is_physically_disabled() - -/mob/living/aquatic/can_float() - return TRUE - -/mob/living/carbon/human/can_float() - return species.can_float(src) - -/mob/living/silicon/can_float() - return FALSE //If they can fly otherwise it will be checked first - -/mob/living - var/atom/movable/z_observer/z_eye - -/atom/movable/z_observer - name = "" - simulated = FALSE - anchored = TRUE - mouse_opacity = FALSE - var/mob/living/owner - -/atom/movable/z_observer/Initialize(mapload, var/mob/living/user) - . = ..() - owner = user - follow() - GLOB.moved_event.register(owner, src, /atom/movable/z_observer/proc/follow) - -/atom/movable/z_observer/proc/follow() - -/atom/movable/z_observer/z_up/follow() - forceMove(get_step(owner, UP)) - if(isturf(src.loc)) - var/turf/T = src.loc - if(T.z_flags & ZM_MIMIC_BELOW) - return - owner.reset_view(null) - owner.z_eye = null - qdel(src) - -/atom/movable/z_observer/z_down/follow() - forceMove(get_step(owner, DOWN)) - var/turf/T = get_turf(owner) - if(T && (T.z_flags & ZM_MIMIC_BELOW)) - return - owner.reset_view(null) - owner.z_eye = null - qdel(src) - -/atom/movable/z_observer/Destroy() - GLOB.moved_event.unregister(owner, src, /atom/movable/z_observer/proc/follow) - owner = null - . = ..() - -/atom/movable/z_observer/can_fall() - return FALSE - -/atom/movable/z_observer/ex_act() - SHOULD_CALL_PARENT(FALSE) - return - -/atom/movable/z_observer/singularity_act() - return - -/atom/movable/z_observer/singularity_pull() - return - -/atom/movable/z_observer/singuloCanEat() - return diff --git a/code/modules/multiz/pipes.dm b/code/modules/multiz/pipes.dm deleted file mode 100644 index 2ee7b53e8aa5d..0000000000000 --- a/code/modules/multiz/pipes.dm +++ /dev/null @@ -1,216 +0,0 @@ -//////////////////////////// -// parent class for pipes // -//////////////////////////// -/obj/machinery/atmospherics/pipe/zpipe - icon = 'icons/obj/structures.dmi' - icon_state = "up" - - name = "upwards pipe" - desc = "A pipe segment to connect upwards." - - volume = 70 - - dir = SOUTH - initialize_directions = SOUTH - - var/minimum_temperature_difference = 300 - var/thermal_conductivity = 0 //WALL_HEAT_TRANSFER_COEFFICIENT No - - level = 1 - -/obj/machinery/atmospherics/pipe/zpipe/hide(var/i) - if(istype(loc, /turf/simulated)) - set_invisibility(i ? 101 : 0) - update_icon() - -/obj/machinery/atmospherics/pipe/zpipe/Process() - if(!parent) //This should cut back on the overhead calling build_network thousands of times per cycle - ..() - else - . = PROCESS_KILL - -/obj/machinery/atmospherics/pipe/zpipe/check_pressure(pressure) - var/datum/gas_mixture/environment = loc.return_air() - - var/pressure_difference = pressure - environment.return_pressure() - - if(pressure_difference > maximum_pressure) - burst() - - else if(pressure_difference > fatigue_pressure) - //TODO: leak to turf, doing pfshhhhh - if(prob(5)) - burst() - - else return 1 - -/obj/machinery/atmospherics/pipe/zpipe/proc/burst() - src.visible_message("\The [src] bursts!"); - playsound(src.loc, 'sound/effects/bang.ogg', 25, 1) - var/datum/effect/effect/system/smoke_spread/smoke = new - smoke.set_up(1,0, src.loc, 0) - smoke.start() - qdel(src) // NOT qdel. - -/obj/machinery/atmospherics/pipe/zpipe/Destroy() - if(node1) - node1.disconnect(src) - if(node2) - node2.disconnect(src) - . = ..() - -/obj/machinery/atmospherics/pipe/zpipe/pipeline_expansion() - return list(node1, node2) - -/obj/machinery/atmospherics/pipe/zpipe/on_update_icon() - return - -/obj/machinery/atmospherics/pipe/zpipe/disconnect(obj/machinery/atmospherics/reference) - if(reference == node1) - if(istype(node1, /obj/machinery/atmospherics/pipe)) - qdel(parent) - node1 = null - - if(reference == node2) - if(istype(node2, /obj/machinery/atmospherics/pipe)) - qdel(parent) - node2 = null - - return null -///////////////////////// -// the elusive up pipe // -///////////////////////// -/obj/machinery/atmospherics/pipe/zpipe/up - icon = 'icons/obj/structures.dmi' - icon_state = "up" - - name = "upwards pipe" - desc = "A pipe segment to connect upwards." - -/obj/machinery/atmospherics/pipe/zpipe/up/atmos_init() - ..() - var/node1_dir - - for(var/direction in GLOB.cardinal) - if(direction&initialize_directions) - if (!node1_dir) - node1_dir = direction - - for(var/obj/machinery/atmospherics/target in get_step(src,node1_dir)) - if(target.initialize_directions & get_dir(target,src)) - if (check_connect_types(target,src)) - node1 = target - break - - var/turf/above = GetAbove(src) - if(above) - for(var/obj/machinery/atmospherics/target in above) - if(target.initialize_directions && istype(target, /obj/machinery/atmospherics/pipe/zpipe/down)) - if (check_connect_types(target,src)) - node2 = target - break - - - var/turf/T = src.loc // hide if turf is not intact - hide(!T.is_plating()) - -/////////////////////// -// and the down pipe // -/////////////////////// - -/obj/machinery/atmospherics/pipe/zpipe/down - icon = 'icons/obj/structures.dmi' - icon_state = "down" - - name = "downwards pipe" - desc = "A pipe segment to connect downwards." - -/obj/machinery/atmospherics/pipe/zpipe/down/atmos_init() - ..() - var/node1_dir - - for(var/direction in GLOB.cardinal) - if(direction&initialize_directions) - if (!node1_dir) - node1_dir = direction - - for(var/obj/machinery/atmospherics/target in get_step(src,node1_dir)) - if(target.initialize_directions & get_dir(target,src)) - if (check_connect_types(target,src)) - node1 = target - break - - var/turf/below = GetBelow(src) - if(below) - for(var/obj/machinery/atmospherics/target in below) - if(target.initialize_directions && istype(target, /obj/machinery/atmospherics/pipe/zpipe/up)) - if (check_connect_types(target,src)) - node2 = target - break - - - var/turf/T = src.loc // hide if turf is not intact - hide(!T.is_plating()) - -/////////////////////// -// supply/scrubbers // -/////////////////////// - -/obj/machinery/atmospherics/pipe/zpipe/up/scrubbers - icon_state = "up-scrubbers" - name = "upwards scrubbers pipe" - desc = "A scrubbers pipe segment to connect upwards." - connect_types = CONNECT_TYPE_SCRUBBER - icon_connect_type = "-scrubbers" - color = PIPE_COLOR_RED - -/obj/machinery/atmospherics/pipe/zpipe/up/supply - icon_state = "up-supply" - name = "upwards supply pipe" - desc = "A supply pipe segment to connect upwards." - connect_types = CONNECT_TYPE_SUPPLY - icon_connect_type = "-supply" - color = PIPE_COLOR_BLUE - -/obj/machinery/atmospherics/pipe/zpipe/down/scrubbers - icon_state = "down-scrubbers" - name = "downwards scrubbers pipe" - desc = "A scrubbers pipe segment to connect downwards." - connect_types = CONNECT_TYPE_SCRUBBER - icon_connect_type = "-scrubbers" - color = PIPE_COLOR_RED - -/obj/machinery/atmospherics/pipe/zpipe/down/supply - icon_state = "down-supply" - name = "downwards supply pipe" - desc = "A supply pipe segment to connect downwards." - connect_types = CONNECT_TYPE_SUPPLY - icon_connect_type = "-supply" - color = PIPE_COLOR_BLUE - -// Colored misc. pipes -/obj/machinery/atmospherics/pipe/zpipe/up/cyan - color = PIPE_COLOR_CYAN -/obj/machinery/atmospherics/pipe/zpipe/down/cyan - color = PIPE_COLOR_CYAN - -/obj/machinery/atmospherics/pipe/zpipe/up/red - color = PIPE_COLOR_RED -/obj/machinery/atmospherics/pipe/zpipe/down/red - color = PIPE_COLOR_RED - -/obj/machinery/atmospherics/pipe/zpipe/up/fuel - name = "upwards fuel pipe" - color = PIPE_COLOR_ORANGE - maximum_pressure = 420*ONE_ATMOSPHERE - fatigue_pressure = 350*ONE_ATMOSPHERE - alert_pressure = 350*ONE_ATMOSPHERE - connect_types = CONNECT_TYPE_FUEL - -/obj/machinery/atmospherics/pipe/zpipe/down/fuel - name = "downwards fuel pipe" - color = PIPE_COLOR_ORANGE - maximum_pressure = 420*ONE_ATMOSPHERE - fatigue_pressure = 350*ONE_ATMOSPHERE - alert_pressure = 350*ONE_ATMOSPHERE - connect_types = CONNECT_TYPE_FUEL diff --git a/code/modules/multiz/structures.dm b/code/modules/multiz/structures.dm deleted file mode 100644 index b0ea614c3ba46..0000000000000 --- a/code/modules/multiz/structures.dm +++ /dev/null @@ -1,284 +0,0 @@ -////////////////////////////// -//Contents: Ladders, Stairs.// -////////////////////////////// - -/obj/structure/ladder - name = "ladder" - desc = "A ladder. You can climb it up and down." - icon_state = "ladder01" - icon = 'icons/obj/structures.dmi' - density = FALSE - opacity = 0 - anchored = TRUE - obj_flags = OBJ_FLAG_NOFALL - - var/allowed_directions = DOWN - var/obj/structure/ladder/target_up - var/obj/structure/ladder/target_down - - var/const/climb_time = 2 SECONDS - var/static/list/climbsounds = list('sound/effects/ladder.ogg','sound/effects/ladder2.ogg','sound/effects/ladder3.ogg','sound/effects/ladder4.ogg') - -/obj/structure/ladder/Initialize() - . = ..() - // the upper will connect to the lower - if(allowed_directions & DOWN) //we only want to do the top one, as it will initialize the ones before it. - for(var/obj/structure/ladder/L in GetBelow(src)) - if(L.allowed_directions & UP) - target_down = L - L.target_up = src - var/turf/T = get_turf(src) - T.ReplaceWithLattice() - return - update_icon() - - - set_extension(src, /datum/extension/turf_hand) - - -/obj/structure/ladder/Destroy() - if(target_down) - target_down.target_up = null - target_down = null - if(target_up) - target_up.target_down = null - target_up = null - return ..() - -/obj/structure/ladder/attackby(obj/item/I, mob/user) - climb(user, I) - -/turf/hitby(atom/movable/AM) - if(isobj(AM)) - var/obj/structure/ladder/L = locate() in contents - if(L) - L.hitby(AM) - return - ..() - -/obj/structure/ladder/hitby(obj/item/I) - if (istype(src, /obj/structure/ladder/up)) - return - var/area/room = get_area(src) - if(!room.has_gravity()) - return - var/atom/blocker - var/turf/landing = get_turf(target_down) - for(var/atom/A in landing) - if(!A.CanPass(I, I.loc, 1.5, 0)) - blocker = A - break - if(blocker) - visible_message(SPAN_WARNING("\The [I] fails to go down \the [src], blocked by the [blocker]!")) - else - visible_message(SPAN_WARNING("\The [I] goes down \the [src]!")) - I.forceMove(landing) - landing.visible_message(SPAN_WARNING("\The [I] falls from the top of \the [target_down]!")) - -/obj/structure/ladder/attack_hand(var/mob/M) - climb(M) - -/obj/structure/ladder/attack_ai(var/mob/M) - var/mob/living/silicon/ai/ai = M - if(!istype(ai)) - return - var/mob/observer/eye/AIeye = ai.eyeobj - if(istype(AIeye)) - instant_climb(AIeye) - -/obj/structure/ladder/attack_robot(var/mob/M) - climb(M) - -/obj/structure/ladder/proc/instant_climb(var/mob/M) - var/atom/target_ladder = getTargetLadder(M) - if(target_ladder) - M.dropInto(target_ladder.loc) - -/obj/structure/ladder/proc/climb(mob/M, obj/item/I = null) - if(!M.may_climb_ladders(src)) - return - - add_fingerprint(M) - var/obj/structure/ladder/target_ladder = getTargetLadder(M) - if(!target_ladder) - return - if(!M.Move(get_turf(src))) - to_chat(M, "You fail to reach \the [src].") - return - - for (var/obj/item/grab/G in M) - G.adjust_position() - - var/direction = target_ladder == target_up ? "up" : "down" - - M.visible_message("\The [M] begins climbing [direction] \the [src]!", - "You begin climbing [direction] \the [src]!", - "You hear the grunting and clanging of a metal ladder being used.") - - target_ladder.audible_message("You hear something coming [direction] \the [src]") - - if(do_after(M, climb_time, src, DO_PUBLIC_UNIQUE)) - climbLadder(M, target_ladder, I) - for (var/obj/item/grab/G in M) - G.adjust_position(force = 1) - -/obj/structure/ladder/attack_ghost(var/mob/M) - instant_climb(M) - -/obj/structure/ladder/proc/getTargetLadder(var/mob/M) - if((!target_up && !target_down) || (target_up && !istype(target_up.loc, /turf/simulated/open) || (target_down && !istype(target_down.loc, /turf)))) - to_chat(M, "\The [src] is incomplete and can't be climbed.") - return - if(target_down && target_up) - var/direction = alert(M,"Do you want to go up or down?", "Ladder", "Up", "Down", "Cancel") - - if(direction == "Cancel") - return - - if(!M.may_climb_ladders(src)) - return - - switch(direction) - if("Up") - return target_up - if("Down") - return target_down - else - return target_down || target_up - -/mob/proc/may_climb_ladders(var/ladder) - if(!Adjacent(ladder)) - to_chat(src, "You need to be next to \the [ladder] to start climbing.") - return FALSE - if(incapacitated()) - to_chat(src, "You are physically unable to climb \the [ladder].") - return FALSE - - var/carry_count = 0 - for(var/obj/item/grab/G in src) - if(!G.ladder_carry()) - to_chat(src, "You can't carry [G.affecting] up \the [ladder].") - return FALSE - else - carry_count++ - if(carry_count > 1) - to_chat(src, "You can't carry more than one person up \the [ladder].") - return FALSE - - return TRUE - -/mob/observer/ghost/may_climb_ladders(var/ladder) - return TRUE - -/obj/structure/ladder/proc/climbLadder(mob/user, target_ladder, obj/item/I = null) - var/turf/T = get_turf(target_ladder) - for(var/atom/A in T) - if(!A.CanPass(user, user.loc, 1.5, 0)) - to_chat(user, "\The [A] is blocking \the [src].") - - //We cannot use the ladder, but we probably can remove the obstruction - var/atom/movable/M = A - if(istype(M) && M.movable_flags & MOVABLE_FLAG_Z_INTERACT) - if(isnull(I)) - M.attack_hand(user) - else - M.attackby(I, user) - - return FALSE - - playsound(src, pick(climbsounds), 50) - playsound(target_ladder, pick(climbsounds), 50) - return user.Move(T) - -/obj/structure/ladder/CanPass(obj/mover, turf/source, height, airflow) - return airflow || !density - -/obj/structure/ladder/on_update_icon() - icon_state = "ladder[!!(allowed_directions & UP)][!!(allowed_directions & DOWN)]" - -/obj/structure/ladder/up - allowed_directions = UP - icon_state = "ladder10" - -/obj/structure/ladder/updown - allowed_directions = UP|DOWN - icon_state = "ladder11" - -/obj/structure/stairs - name = "stairs" - desc = "Stairs leading to another deck. Not too useful if the gravity goes out." - icon = 'icons/obj/stairs.dmi' - density = FALSE - opacity = 0 - anchored = TRUE - layer = RUNE_LAYER - -/obj/structure/stairs/Initialize() - for(var/turf/turf in locs) - var/turf/simulated/open/above = GetAbove(turf) - if(!above) - warning("Stair created without level above: ([loc.x], [loc.y], [loc.z])") - return INITIALIZE_HINT_QDEL - if(!istype(above)) - above.ChangeTurf(/turf/simulated/open) - . = ..() - -/obj/structure/stairs/CheckExit(atom/movable/mover as mob|obj, turf/target as turf) - if(get_dir(loc, target) == dir && upperStep(mover.loc)) - return FALSE - return ..() - -/obj/structure/stairs/Bumped(atom/movable/A) - var/turf/above = GetAbove(A) - if (above) - var/turf/target = get_step(above, dir) - var/turf/source = A.loc - if(above.CanZPass(source, UP) && target.Enter(A, src)) - A.forceMove(target) - if(isliving(A)) - var/mob/living/L = A - if(L.pulling) - L.pulling.forceMove(target) - if(ishuman(A)) - var/mob/living/carbon/human/H = A - if(H.has_footsteps()) - playsound(source, 'sound/effects/stairs_step.ogg', 50) - playsound(target, 'sound/effects/stairs_step.ogg', 50) - else - to_chat(A, "Something blocks the path.") - else - to_chat(A, SPAN_NOTICE("There is nothing of interest in this direction.")) - -/obj/structure/stairs/proc/upperStep(var/turf/T) - return (T == loc) - -/obj/structure/stairs/CanPass(obj/mover, turf/source, height, airflow) - return airflow || !density - -// type paths to make mapping easier. -/obj/structure/stairs/north - dir = NORTH - bound_height = 64 - bound_y = -32 - pixel_y = -32 - -/obj/structure/stairs/south - dir = SOUTH - bound_height = 64 - -/obj/structure/stairs/east - dir = EAST - bound_width = 64 - bound_x = -32 - pixel_x = -32 - -/obj/structure/stairs/west - dir = WEST - bound_width = 64 - -/obj/structure/stairs/short - bound_height = 32 - bound_width = 32 - -/obj/structure/stairs/short/west - dir = WEST diff --git a/code/modules/multiz/turf.dm b/code/modules/multiz/turf.dm deleted file mode 100644 index 18edef9debf7c..0000000000000 --- a/code/modules/multiz/turf.dm +++ /dev/null @@ -1,108 +0,0 @@ -/turf/proc/CanZPass(atom/A, direction) - if(z == A.z) //moving FROM this turf - return direction == UP //can't go below - else - if(direction == UP) //on a turf below, trying to enter - return 0 - if(direction == DOWN) //on a turf above, trying to enter - return !density - -/turf/simulated/open/CanZPass(atom/A, direction) - if(locate(/obj/structure/catwalk, src)) - if(z == A.z) - if(direction == DOWN) - return 0 - else if(direction == UP) - return 0 - return 1 - -/turf/space/CanZPass(atom/A, direction) - if(locate(/obj/structure/catwalk, src)) - if(z == A.z) - if(direction == DOWN) - return 0 - else if(direction == UP) - return 0 - return 1 - -/turf/simulated/open - name = "open space" - icon = 'icons/turf/space.dmi' - icon_state = "" - density = FALSE - pathweight = INFINITY //Seriously, don't try and path over this one numbnuts - - z_flags = ZM_MIMIC_DEFAULTS | ZM_MIMIC_OVERWRITE | ZM_MIMIC_NO_AO | ZM_ALLOW_ATMOS - -/turf/simulated/open/update_dirt() - return 0 - -/turf/simulated/open/Entered(var/atom/movable/mover, var/atom/oldloc) - ..() - mover.fall(oldloc) - -// Called when thrown object lands on this turf. -/turf/simulated/open/hitby(var/atom/movable/AM) - . = ..() - AM.fall() - - -// override to make sure nothing is hidden -/turf/simulated/open/levelupdate() - for(var/obj/O in src) - O.hide(0) - -/turf/simulated/open/examine(mob/user, distance, infix, suffix) - . = ..() - if(distance <= 2) - var/depth = 1 - for(var/T = GetBelow(src); isopenspace(T); T = GetBelow(T)) - depth += 1 - to_chat(user, "It is about [depth] level\s deep.") - -/turf/simulated/open/is_open() - return TRUE - -/turf/simulated/open/attackby(obj/item/C, mob/user) - if (istype(C, /obj/item/stack/material/rods)) - var/obj/structure/lattice/L = locate(/obj/structure/lattice, src) - if(L) - return L.attackby(C, user) - var/obj/item/stack/material/rods/R = C - if (R.use(1)) - to_chat(user, "You lay down the support lattice.") - playsound(src, 'sound/weapons/Genhit.ogg', 50, 1) - new /obj/structure/lattice(locate(src.x, src.y, src.z), R.material.name) - return - - if (istype(C, /obj/item/stack/tile)) - var/obj/structure/lattice/L = locate(/obj/structure/lattice, src) - if(L) - var/obj/item/stack/tile/floor/S = C - if (!S.use(1)) - return - qdel(L) - playsound(src, 'sound/weapons/Genhit.ogg', 50, 1) - ChangeTurf(/turf/simulated/floor/plating, keep_air = TRUE) - return - else - to_chat(user, "The plating is going to need some support.") - - //To lay cable. - if(isCoil(C)) - var/obj/item/stack/cable_coil/coil = C - coil.turf_place(src, user) - return - - for(var/atom/movable/M in below) - if(M.movable_flags & MOVABLE_FLAG_Z_INTERACT) - return M.attackby(C, user) - -/turf/simulated/open/attack_hand(mob/user) - for(var/atom/movable/M in below) - if(M.movable_flags & MOVABLE_FLAG_Z_INTERACT) - return M.attack_hand(user) - -//Most things use is_plating to test if there is a cover tile on top (like regular floors) -/turf/simulated/open/is_plating() - return 1 diff --git a/code/modules/multiz/zmimic/mimic_common.dm b/code/modules/multiz/zmimic/mimic_common.dm deleted file mode 100644 index 6f8b417a6ad18..0000000000000 --- a/code/modules/multiz/zmimic/mimic_common.dm +++ /dev/null @@ -1,18 +0,0 @@ -// Updates whatever openspace components may be mimicing us. On turfs this queues an openturf update on the above openturf, on movables this updates their bound movable (if present). Meaningless on any type other than `/turf` or `/atom/movable` (incl. children). -/atom/proc/update_above() - return - -/turf/proc/is_above_space() - var/turf/T = GetBelow(src) - while (T && (T.z_flags & ZM_MIMIC_BELOW)) - T = GetBelow(T) - return isspaceturf(T) - -/turf/update_icon() - ..() - if (above) - update_above() - -/atom/movable/update_icon() - ..() - UPDATE_OO_IF_PRESENT diff --git a/code/modules/multiz/zmimic/mimic_docs.dm b/code/modules/multiz/zmimic/mimic_docs.dm deleted file mode 100644 index be6ea015f1cf4..0000000000000 --- a/code/modules/multiz/zmimic/mimic_docs.dm +++ /dev/null @@ -1,51 +0,0 @@ -/* -Types: - openspace/multiplier -> shadows the below level, also copies lighting - openspace/mimic -> copies below movables - openspace/turf_proxy -> holds the appearance of the below turf for non-OVERWRITE Z-turfs - openspace/turf_mimic -> copies openspace/turf_proxy objects - -Public API: - Notifying Z-Mimic of icon updates: - - UPDATE_OO_IF_PRESENT - - valid on movables only - - if this movable is being copied, update the copies - - cheap (if this movable is not being mimiced, this is a null check) - - - atom/update_above() - - similar to UPDATE_OO_IF_PRESENT, but for both turfs and movables - - less cheap (pretty much just proc-call overhead) - - Checking state: - - TURF_IS_MIMICING(turf or any) - - value: bool - if the passed turf is z-mimic enabled - - - movable/get_above_oo() - - return: list of movables - - get a list of every openspace mimic that's copying this atom for things like animate() - - Changing state: - - turf/enable_zmimic(extra_flags = 0) - - return: bool - FALSE if this turf was already mimicing, TRUE otherwise - - Enables z-mimic for this turf, potentially adding extra z_flags. - - This will automatically queue the turf for update. - - - turf/disable_zmimic() - - return: bool - FALSE if this turf was not mimicing, TRUE otherwise - - Disables z-mimic for this turf. - - This will clean up associated mimic objects, but they may hang around for a few additional seconds. - - Vars: - - turf/z_flags - - bitfield - - ZM_MIMIC_BELOW: copy below atoms - - ZM_MIMIC_OVERWRITE: z-mimic can overwrite this turf's appearance - - ZM_ALLOW_LIGHTING: lighting should pass through this turf - - ZM_ALLOW_ATMOS: air should pass through this turf - - ZM_MIMIC_NO_AO: normal turf AO should be skipped, only do openspace AO (if your turf is not solid, you probably want this) - - ZM_NO_OCCLUDE: don't block clicking on below atoms if not OVERWRITE - - - movable/no_z_overlay - - bool - - Set this to TRUE if you want Z-Mimic to ignore this atom. Atoms with INVISIBLITY_ABSTRACT are automatically ignored; other invisibility values are inherited. -*/ diff --git a/code/modules/multiz/zmimic/mimic_movable.dm b/code/modules/multiz/zmimic/mimic_movable.dm deleted file mode 100644 index d6dd1e1b536cd..0000000000000 --- a/code/modules/multiz/zmimic/mimic_movable.dm +++ /dev/null @@ -1,240 +0,0 @@ -/atom/movable - /// The mimic (if any) that's *directly* copying us. - var/tmp/atom/movable/openspace/mimic/bound_overlay - /// If TRUE, this atom is ignored by Z-Mimic. - var/no_z_overlay - -/atom/movable/forceMove(atom/dest) - . = ..(dest) - if (. && bound_overlay) - // The overlay will handle cleaning itself up on non-openspace turfs. - if (isturf(dest)) - bound_overlay.forceMove(get_step(src, UP)) - if (dir != bound_overlay.dir) - bound_overlay.set_dir(dir) - else // Not a turf, so we need to destroy immediately instead of waiting for the destruction timer to proc. - qdel(bound_overlay) - -/atom/movable/Move() - . = ..() - if (. && bound_overlay) - bound_overlay.forceMove(get_step(src, UP)) - if (bound_overlay.dir != dir) - bound_overlay.set_dir(dir) - -/atom/movable/set_dir(ndir) - . = ..() - if (. && bound_overlay) - bound_overlay.set_dir(ndir) - -/atom/movable/update_above() - if (!bound_overlay || !isturf(loc)) - return - - var/turf/T = loc - - if (TURF_IS_MIMICING(T.above)) - SSzcopy.queued_overlays += bound_overlay - bound_overlay.queued += 1 - else - qdel(bound_overlay) - -// Grabs a list of every openspace object that's directly or indirectly mimicing this object. Returns an empty list if none found. -/atom/movable/proc/get_above_oo() - . = list() - var/atom/movable/curr = src - while (curr.bound_overlay) - . += curr.bound_overlay - curr = curr.bound_overlay - -// -- Openspace movables -- - -/atom/movable/openspace - name = "" - simulated = FALSE - anchored = TRUE - mouse_opacity = FALSE - -/atom/movable/openspace/can_fall() - return FALSE - -// No blowing up abstract objects. -/atom/movable/openspace/ex_act(ex_sev) - SHOULD_CALL_PARENT(FALSE) - return - -/atom/movable/openspace/singularity_act() - return - -/atom/movable/openspace/singularity_pull() - return - -/atom/movable/openspace/singuloCanEat() - return - -// -- MULTIPLIER / SHADOWER -- - -// Holder object used for dimming openspaces & copying lighting of below turf. -/atom/movable/openspace/multiplier - name = "openspace multiplier" - desc = "You shouldn't see this." - icon = 'icons/effects/lighting_overlay.dmi' - icon_state = "dark" - plane = OPENTURF_MAX_PLANE - layer = MIMICED_LIGHTING_LAYER - blend_mode = BLEND_MULTIPLY - color = list( - SHADOWER_DARKENING_FACTOR, 0, 0, - 0, SHADOWER_DARKENING_FACTOR, 0, - 0, 0, SHADOWER_DARKENING_FACTOR - ) - -/atom/movable/openspace/multiplier/Destroy() - var/turf/myturf = loc - if (istype(myturf)) - myturf.shadower = null - - return ..() - -/atom/movable/openspace/multiplier/proc/copy_lighting(atom/movable/lighting_overlay/LO) - appearance = LO - layer = MIMICED_LIGHTING_LAYER - plane = OPENTURF_MAX_PLANE - invisibility = 0 - blend_mode = BLEND_MULTIPLY - if (icon_state == null) - // We're using a color matrix, so just darken the colors across the board. - // Bay stores lights as inverted so the lighting PM can invert it for darksight, but - // we don't have a plane master, so invert it again. - var/list/c_list = color - c_list[CL_MATRIX_RR] *= -SHADOWER_DARKENING_FACTOR - c_list[CL_MATRIX_RG] *= -SHADOWER_DARKENING_FACTOR - c_list[CL_MATRIX_RB] *= -SHADOWER_DARKENING_FACTOR - c_list[CL_MATRIX_GR] *= -SHADOWER_DARKENING_FACTOR - c_list[CL_MATRIX_GG] *= -SHADOWER_DARKENING_FACTOR - c_list[CL_MATRIX_GB] *= -SHADOWER_DARKENING_FACTOR - c_list[CL_MATRIX_BR] *= -SHADOWER_DARKENING_FACTOR - c_list[CL_MATRIX_BG] *= -SHADOWER_DARKENING_FACTOR - c_list[CL_MATRIX_BB] *= -SHADOWER_DARKENING_FACTOR - c_list[CL_MATRIX_AR] *= -SHADOWER_DARKENING_FACTOR - c_list[CL_MATRIX_AG] *= -SHADOWER_DARKENING_FACTOR - c_list[CL_MATRIX_AB] *= -SHADOWER_DARKENING_FACTOR - color = c_list - else - // Not a color matrix, so we just ignore the lighting values. - icon_state = "dark" // this is actually just a white sprite, which is what this blending needs - color = list( - SHADOWER_DARKENING_FACTOR, 0, 0, - 0, SHADOWER_DARKENING_FACTOR, 0, - 0, 0, SHADOWER_DARKENING_FACTOR - ) - - var/turf/parent = loc - ASSERT(isturf(parent)) - if (LAZYLEN(parent.ao_overlays_mimic)) - overlays += parent.ao_overlays_mimic - - if (bound_overlay) - update_above() - -// -- OPENSPACE OVERLAY -- -// todo: rename - -// Object used to hold a mimiced atom's appearance. -/atom/movable/openspace/mimic - plane = OPENTURF_MAX_PLANE - var/atom/movable/associated_atom - var/depth - var/queued = 0 - var/destruction_timer - var/mimiced_type - var/original_z - var/override_depth - -/atom/movable/openspace/mimic/New() - atom_flags |= ATOM_FLAG_INITIALIZED - SSzcopy.openspace_overlays += 1 - -/atom/movable/openspace/mimic/Destroy() - SSzcopy.openspace_overlays -= 1 - - if (associated_atom) - associated_atom.bound_overlay = null - associated_atom = null - - if (destruction_timer) - deltimer(destruction_timer) - - return ..() - -/atom/movable/openspace/mimic/attackby(obj/item/W, mob/user) - to_chat(user, SPAN_NOTICE("\The [src] is too far away.")) - -/atom/movable/openspace/mimic/attack_hand(mob/user) - to_chat(user, SPAN_NOTICE("You cannot reach \the [src] from here.")) - -/atom/movable/openspace/mimic/examine(...) - SHOULD_CALL_PARENT(FALSE) - . = associated_atom.examine(arglist(args)) // just pass all the args to the copied atom - -/atom/movable/openspace/mimic/forceMove(turf/dest) - . = ..() - if (TURF_IS_MIMICING(dest)) - if (destruction_timer) - deltimer(destruction_timer) - destruction_timer = null - else if (!destruction_timer) - destruction_timer = addtimer(CALLBACK(src, /datum/.proc/qdel_self), 10 SECONDS, TIMER_STOPPABLE) - -// Called when the turf we're on is deleted/changed. -/atom/movable/openspace/mimic/proc/owning_turf_changed() - if (!destruction_timer) - destruction_timer = addtimer(CALLBACK(src, /datum/.proc/qdel_self), 10 SECONDS, TIMER_STOPPABLE) - -// -- TURF PROXY -- - -// This thing holds the mimic appearance for non-OVERWRITE turfs. -/atom/movable/openspace/turf_proxy - plane = OPENTURF_MAX_PLANE - mouse_opacity = 0 - no_z_overlay = TRUE // Only one of these should ever be visible at a time, the mimic logic will handle that. - -/atom/movable/openspace/turf_proxy/attackby(obj/item/W, mob/user) - loc.attackby(W, user) - -/atom/movable/openspace/turf_proxy/attack_hand(mob/user as mob) - loc.attack_hand(user) - -/atom/movable/openspace/turf_proxy/attack_generic(mob/user as mob) - loc.attack_generic(user) - -/atom/movable/openspace/turf_proxy/examine(mob/examiner) - SHOULD_CALL_PARENT(FALSE) - . = loc.examine(examiner) - - -// -- TURF MIMIC -- - -// A type for copying non-overwrite turfs' self-appearance. -/atom/movable/openspace/turf_mimic - plane = OPENTURF_MAX_PLANE // These *should* only ever be at the top? - mouse_opacity = 0 - var/turf/delegate - -/atom/movable/openspace/turf_mimic/Initialize(mapload, ...) - . = ..() - ASSERT(isturf(loc)) - delegate = loc:below - -/atom/movable/openspace/turf_mimic/attackby(obj/item/W, mob/user) - loc.attackby(W, user) - -/atom/movable/openspace/turf_mimic/attack_hand(mob/user as mob) - to_chat(user, SPAN_NOTICE("You cannot reach \the [src] from here.")) - -/atom/movable/openspace/turf_mimic/attack_generic(mob/user as mob) - to_chat(user, SPAN_NOTICE("You cannot reach \the [src] from here.")) - -/atom/movable/openspace/turf_mimic/examine(mob/examiner) - SHOULD_CALL_PARENT(FALSE) - . = delegate.examine(examiner) diff --git a/code/modules/multiz/zmimic/mimic_turf.dm b/code/modules/multiz/zmimic/mimic_turf.dm deleted file mode 100644 index 5dc53daada415..0000000000000 --- a/code/modules/multiz/zmimic/mimic_turf.dm +++ /dev/null @@ -1,91 +0,0 @@ -/// Reference to any open turf that might be above us to speed up atom Entered() updates. -/turf/var/tmp/turf/above -/turf/var/tmp/turf/below -/// If we're a non-overwrite z-turf, this holds the appearance of the bottom-most Z-turf in the z-stack. -/turf/var/tmp/atom/movable/openspace/turf_proxy/mimic_proxy -/// Overlay used to multiply color of all OO overlays at once. -/turf/var/tmp/atom/movable/openspace/multiplier/shadower -/// If this is a delegate (non-overwrite) Z-turf with a z-turf above, this is the delegate copy that's copying us. -/turf/var/tmp/atom/movable/openspace/turf_mimic/mimic_above_copy -/// If we're at the bottom of the stack, a proxy used to fake a below space turf. -/turf/var/tmp/atom/movable/openspace/turf_proxy/mimic_underlay -/// How many times this turf is currently queued - multiple queue occurrences are allowed to ensure update consistency. -/turf/var/tmp/z_queued = 0 -/// If this Z-turf leads to space, uninterrupted. -/turf/var/tmp/z_eventually_space = FALSE -/turf/var/z_flags = 0 - -// debug -/turf/var/tmp/z_depth -/turf/var/tmp/z_generation = 0 - -/turf/Entered(atom/movable/thing, turf/oldLoc) - . = ..() - if (thing.bound_overlay || thing.no_z_overlay || !TURF_IS_MIMICING(above)) - return - above.update_mimic() - -/turf/update_above() - if (TURF_IS_MIMICING(above)) - above.update_mimic() - -/turf/proc/update_mimic() - if (!(z_flags & ZM_MIMIC_BELOW)) - return - - z_queued += 1 - SSzcopy.queued_turfs += src - -/// Enables Z-mimic for a turf that didn't already have it enabled. -/turf/proc/enable_zmimic(additional_flags = 0) - if (z_flags & ZM_MIMIC_BELOW) - return FALSE - - z_flags |= ZM_MIMIC_BELOW | additional_flags - setup_zmimic(FALSE) - return TRUE - -/// Disables Z-mimic for a turf. -/turf/proc/disable_zmimic() - if (!(z_flags & ZM_MIMIC_BELOW)) - return FALSE - - z_flags &= ~ZM_MIMIC_BELOW - cleanup_zmimic() - return TRUE - -/// Sets up Z-mimic for this turf. You shouldn't call this directly 99% of the time. -/turf/proc/setup_zmimic(mapload) - if (shadower) - CRASH("Attempt to enable Z-mimic on already-enabled turf!") - shadower = new(src) - SSzcopy.openspace_turfs += 1 - var/turf/under = GetBelow(src) - if (under) - below = under - below.above = src - - if (!(z_flags & (ZM_MIMIC_OVERWRITE|ZM_NO_OCCLUDE)) && mouse_opacity) - mouse_opacity = 2 - - update_mimic(!mapload) // Only recursively update if the map isn't loading. - -/// Cleans up Z-mimic objects for this turf. You shouldn't call this directly 99% of the time. -/turf/proc/cleanup_zmimic() - SSzcopy.openspace_turfs -= 1 - // Don't remove ourselves from the queue, the subsystem will explode. We'll naturally fall out of the queue. - z_queued = 0 - - QDEL_NULL(shadower) - QDEL_NULL(mimic_above_copy) - QDEL_NULL(mimic_underlay) - - for (var/atom/movable/openspace/mimic/OO in src) - OO.owning_turf_changed() - - if (above) - above.update_mimic() - - if (below) - below.above = null - below = null diff --git a/code/modules/nano/interaction/admin.dm b/code/modules/nano/interaction/admin.dm deleted file mode 100644 index ce16f94ce910e..0000000000000 --- a/code/modules/nano/interaction/admin.dm +++ /dev/null @@ -1,7 +0,0 @@ -/* - This state checks that the user is an admin, end of story -*/ -GLOBAL_DATUM_INIT(admin_state, /datum/topic_state/admin_state, new) - -/datum/topic_state/admin_state/can_use_topic(var/src_object, var/mob/user) - return check_rights(R_ADMIN, 0, user) ? STATUS_INTERACTIVE : STATUS_CLOSE diff --git a/code/modules/nano/interaction/base.dm b/code/modules/nano/interaction/base.dm deleted file mode 100644 index 45072ba4b5049..0000000000000 --- a/code/modules/nano/interaction/base.dm +++ /dev/null @@ -1,48 +0,0 @@ -/datum/proc/nano_host() - return src - -/datum/proc/nano_container() - return src - -/datum/proc/CanUseTopic(var/mob/user, var/datum/topic_state/state = GLOB.default_state) - var/datum/src_object = nano_host() - return state.can_use_topic(src_object, user) - -/mob/CanUseTopic(mob/user, datum/topic_state/state, href_list) - if(href_list && href_list["flavor_more"]) - return STATUS_INTERACTIVE - return ..() - -/datum/proc/CanUseTopicPhysical(mob/user) - return CanUseTopic(user, GLOB.physical_state) - -/datum/topic_state - var/check_access = TRUE // Whether this topic state should bypass access checks or not. - -/datum/topic_state/proc/href_list(var/mob/user) - return list() - -/datum/topic_state/proc/can_use_topic(var/src_object, var/mob/user) - return STATUS_CLOSE - -/mob/proc/shared_nano_interaction() - if (src.stat || !client) - return STATUS_CLOSE // no updates, close the interface - else if (incapacitated()) - return STATUS_UPDATE // update only (orange visibility) - return STATUS_INTERACTIVE - -/mob/living/silicon/ai/shared_nano_interaction() - if(!has_power()) - return STATUS_CLOSE - if (check_unable(1, 0)) - return STATUS_CLOSE - return ..() - -/mob/living/silicon/robot/shared_nano_interaction() - . = STATUS_INTERACTIVE - if(!cell || cell.charge <= 0) - return STATUS_CLOSE - if(lockcharge) - . = STATUS_DISABLED - return min(., ..()) diff --git a/code/modules/nano/interaction/conscious.dm b/code/modules/nano/interaction/conscious.dm deleted file mode 100644 index 76a5d70a077d6..0000000000000 --- a/code/modules/nano/interaction/conscious.dm +++ /dev/null @@ -1,7 +0,0 @@ -/* - This state only checks if user is conscious. -*/ -GLOBAL_DATUM_INIT(conscious_state, /datum/topic_state/conscious_state, new) - -/datum/topic_state/conscious_state/can_use_topic(var/src_object, var/mob/user) - return user.stat == CONSCIOUS ? STATUS_INTERACTIVE : STATUS_CLOSE diff --git a/code/modules/nano/interaction/contained.dm b/code/modules/nano/interaction/contained.dm deleted file mode 100644 index ffa4f3762a94b..0000000000000 --- a/code/modules/nano/interaction/contained.dm +++ /dev/null @@ -1,18 +0,0 @@ -/* - This state checks if user is somewhere within src_object, as well as the default NanoUI interaction. -*/ -GLOBAL_DATUM_INIT(contained_state, /datum/topic_state/contained_state, new) - -/datum/topic_state/contained_state/can_use_topic(var/atom/src_object, var/mob/user) - if(!src_object.contains(user)) - return STATUS_CLOSE - - return user.shared_nano_interaction() - -/atom/proc/contains(var/atom/location) - if(!location) - return 0 - if(location == src) - return 1 - - return contains(location.loc) diff --git a/code/modules/nano/interaction/default.dm b/code/modules/nano/interaction/default.dm deleted file mode 100644 index 04905d0d83c32..0000000000000 --- a/code/modules/nano/interaction/default.dm +++ /dev/null @@ -1,97 +0,0 @@ -GLOBAL_DATUM_INIT(default_state, /datum/topic_state/default, new) - -/datum/topic_state/default/href_list(var/mob/user) - return list() - -/datum/topic_state/default/can_use_topic(var/src_object, var/mob/user) - return user.default_can_use_topic(src_object) - -/mob/proc/default_can_use_topic(var/src_object) - return STATUS_CLOSE // By default no mob can do anything with NanoUI - -/mob/observer/ghost/default_can_use_topic(var/src_object) - if(can_admin_interact()) - return STATUS_INTERACTIVE // Admins are more equal - if(!client || get_dist(src_object, src) > client.view) // Preventing ghosts from having a million windows open by limiting to objects in range - return STATUS_CLOSE - return STATUS_UPDATE // Ghosts can view updates - -/mob/living/silicon/pai/default_can_use_topic(var/src_object) - if((src_object == src || src_object == silicon_radio) && !stat) - return STATUS_INTERACTIVE - else - return ..() - -/mob/living/silicon/robot/default_can_use_topic(var/src_object) - . = shared_nano_interaction() - if(. <= STATUS_DISABLED) - return - - // robots can interact with things they can see within their view range - if((src_object in view(src)) && get_dist(src_object, src) <= src.client.view) - return STATUS_INTERACTIVE // interactive (green visibility) - return STATUS_DISABLED // no updates, completely disabled (red visibility) - -/mob/living/silicon/ai/default_can_use_topic(var/src_object) - . = shared_nano_interaction() - if(. != STATUS_INTERACTIVE) - return - - // Prevents the AI from using Topic on admin levels (by for example viewing through the court/thunderdome cameras) - // unless it's on the same level as the object it's interacting with. - var/turf/T = get_turf(src_object) - var/turf/A = get_turf(src) - if(!A || !T || !AreConnectedZLevels(A.z, T.z)) - return STATUS_CLOSE - - // If an object is in view then we can interact with it - if(src_object in view(client.view, src)) - return STATUS_INTERACTIVE - - // If we're installed in a chassi, rather than transfered to an inteliCard or other container, then check if we have camera view - if(is_in_chassis()) - //stop AIs from leaving windows open and using then after they lose vision - if(cameranet && !cameranet.is_turf_visible(get_turf(src_object))) - return STATUS_CLOSE - return STATUS_INTERACTIVE - else if(get_dist(src_object, src) <= client.view) // View does not return what one would expect while installed in an inteliCard - return STATUS_INTERACTIVE - - return STATUS_CLOSE - -//Some atoms such as vehicles might have special rules for how mobs inside them interact with NanoUI. -/atom/proc/contents_nano_distance(src_object, mob/living/user) - return user.shared_living_nano_distance(src_object) - -/mob/living/proc/shared_living_nano_distance(atom/movable/src_object) - if (!(src_object in view(4, src))) // If the src object is not visable, disable updates - return STATUS_CLOSE - - var/dist = get_dist(src_object, src) - if (dist <= 1) // interactive (green visibility) - // Checking adjacency even when distance is 0 because get_dist() doesn't include Z-level differences and - // the client might have its eye shifted up/down thus putting src_object in view. - return Adjacent(src_object) ? STATUS_INTERACTIVE : STATUS_UPDATE - else if (dist <= 2) - return STATUS_UPDATE // update only (orange visibility) - else if (dist <= 4) - return STATUS_DISABLED // no updates, completely disabled (red visibility) - return STATUS_CLOSE - -/mob/living/default_can_use_topic(var/src_object) - . = shared_nano_interaction(src_object) - if(. != STATUS_CLOSE) - if(loc) - . = min(., loc.contents_nano_distance(src_object, src)) - if(. == STATUS_INTERACTIVE) - return STATUS_UPDATE - -/mob/living/carbon/human/default_can_use_topic(var/src_object) - . = shared_nano_interaction(src_object) - if(. != STATUS_CLOSE) - if(loc) - . = min(., loc.contents_nano_distance(src_object, src)) - else - . = min(., shared_living_nano_distance(src_object)) - if(. == STATUS_UPDATE && (psi && !psi.suppressed && psi.get_rank(PSI_PSYCHOKINESIS) >= PSI_RANK_OPERANT)) - return STATUS_INTERACTIVE diff --git a/code/modules/nano/interaction/hands.dm b/code/modules/nano/interaction/hands.dm deleted file mode 100644 index 20d26bed1eaa4..0000000000000 --- a/code/modules/nano/interaction/hands.dm +++ /dev/null @@ -1,23 +0,0 @@ -/* - This state only checks if user is conscious. -*/ -GLOBAL_DATUM_INIT(hands_state, /datum/topic_state/hands, new) - -/datum/topic_state/hands/can_use_topic(src_object, mob/user) - . = user.shared_nano_interaction(src_object) - if(. > STATUS_CLOSE) - . = min(., user.hands_can_use_topic(src_object)) - -/mob/proc/hands_can_use_topic(src_object) - return STATUS_CLOSE - -/mob/living/hands_can_use_topic(src_object) - if(src_object in get_both_hands(src)) - return STATUS_INTERACTIVE - return STATUS_CLOSE - -/mob/living/silicon/robot/hands_can_use_topic(src_object) - for(var/obj/item/gripper/active_gripper in list(module_state_1, module_state_2, module_state_3)) - if(active_gripper.contains(src_object)) - return STATUS_INTERACTIVE - return STATUS_CLOSE diff --git a/code/modules/nano/interaction/interactive.dm b/code/modules/nano/interaction/interactive.dm deleted file mode 100644 index c546cf2346675..0000000000000 --- a/code/modules/nano/interaction/interactive.dm +++ /dev/null @@ -1,7 +0,0 @@ -/* - This state always returns STATUS_INTERACTIVE -*/ -GLOBAL_DATUM_INIT(interactive_state, /datum/topic_state/interactive, new) - -/datum/topic_state/interactive/can_use_topic(var/src_object, var/mob/user) - return STATUS_INTERACTIVE diff --git a/code/modules/nano/interaction/inventory.dm b/code/modules/nano/interaction/inventory.dm deleted file mode 100644 index b17c62a9bc8c0..0000000000000 --- a/code/modules/nano/interaction/inventory.dm +++ /dev/null @@ -1,10 +0,0 @@ -/* - This state checks that the src_object is somewhere in the user's first-level inventory (in hands, on ear, etc.), but not further down (such as in bags). -*/ -GLOBAL_DATUM_INIT(inventory_state, /datum/topic_state/inventory_state, new) - -/datum/topic_state/inventory_state/can_use_topic(var/src_object, var/mob/user) - if(!(src_object in user)) - return STATUS_CLOSE - - return user.shared_nano_interaction() diff --git a/code/modules/nano/interaction/inventory_deep.dm b/code/modules/nano/interaction/inventory_deep.dm deleted file mode 100644 index 1df42064882a9..0000000000000 --- a/code/modules/nano/interaction/inventory_deep.dm +++ /dev/null @@ -1,10 +0,0 @@ -/* - This state checks if src_object is contained anywhere in the user's inventory, including bags, etc. -*/ -GLOBAL_DATUM_INIT(deep_inventory_state, /datum/topic_state/deep_inventory_state, new) - -/datum/topic_state/deep_inventory_state/can_use_topic(var/src_object, var/mob/user) - if(!user.contains(src_object)) - return STATUS_CLOSE - - return user.shared_nano_interaction() diff --git a/code/modules/nano/interaction/mech.dm b/code/modules/nano/interaction/mech.dm deleted file mode 100644 index 1286d2d4adda5..0000000000000 --- a/code/modules/nano/interaction/mech.dm +++ /dev/null @@ -1,7 +0,0 @@ -GLOBAL_DATUM_INIT(mech_state, /datum/topic_state/physical/mech, new) - -/datum/topic_state/physical/mech/can_use_topic(var/mob/living/exosuit/src_object, var/mob/user) - if(istype(src_object)) - if((user in src_object.pilots) || (user == src_object)) - return ..() - return STATUS_CLOSE \ No newline at end of file diff --git a/code/modules/nano/interaction/outside.dm b/code/modules/nano/interaction/outside.dm deleted file mode 100644 index ddecbaffecf2e..0000000000000 --- a/code/modules/nano/interaction/outside.dm +++ /dev/null @@ -1,6 +0,0 @@ -GLOBAL_DATUM_INIT(outside_state, /datum/topic_state/default/outside, new) - -/datum/topic_state/default/outside/can_use_topic(var/src_object, var/mob/user) - if(user in src_object) - return STATUS_CLOSE - return ..() diff --git a/code/modules/nano/interaction/physical.dm b/code/modules/nano/interaction/physical.dm deleted file mode 100644 index e42de03a34b4c..0000000000000 --- a/code/modules/nano/interaction/physical.dm +++ /dev/null @@ -1,23 +0,0 @@ -GLOBAL_DATUM_INIT(physical_state, /datum/topic_state/physical, new) - -/datum/topic_state/physical/can_use_topic(var/src_object, var/mob/user) - . = user.shared_nano_interaction(src_object) - if(. > STATUS_CLOSE) - return min(., user.check_physical_distance(src_object)) - -/mob/proc/check_physical_distance(var/src_object) - return STATUS_CLOSE - -/mob/observer/ghost/check_physical_distance(var/src_object) - return default_can_use_topic(src_object) - -/mob/living/check_physical_distance(var/src_object) - return loc ? loc.contents_nano_distance(src_object, src) : shared_living_nano_distance(src_object) - -/mob/living/silicon/ai/check_physical_distance(var/src_object) - return max(STATUS_UPDATE, shared_living_nano_distance(src_object)) - -GLOBAL_DATUM_INIT(physical_no_access_state, /datum/topic_state/physical/no_access, new) - -/datum/topic_state/physical/no_access - check_access = FALSE \ No newline at end of file diff --git a/code/modules/nano/interaction/remote.dm b/code/modules/nano/interaction/remote.dm deleted file mode 100644 index 73644fa570705..0000000000000 --- a/code/modules/nano/interaction/remote.dm +++ /dev/null @@ -1,39 +0,0 @@ -/* - This state checks that user is capable, within range of the remoter, etc. and that src_object meets the basic requirements for interaction (being powered, non-broken, etc. - Whoever initializes this state is also responsible for deleting it properly. -*/ -/datum/topic_state/remote - var/datum/remoter - var/datum/remote_target - var/datum/topic_state/remoter_state - -/datum/topic_state/remote/New(var/remoter, var/remote_target, var/datum/topic_state/remoter_state = GLOB.default_state) - src.remoter = remoter - src.remote_target = remote_target - src.remoter_state = remoter_state - ..() - -/datum/topic_state/remote/Destroy() - src.remoter = null - src.remoter_state = null - - // Force an UI update before we go, ensuring that any windows we may have opened for the remote target closes. - SSnano.update_uis(remote_target.nano_container()) - remote_target = null - return ..() - -/datum/topic_state/remote/can_use_topic(var/datum/src_object, var/mob/user) - if(!(remoter && remoter_state)) // The remoter is gone, let us leave - return STATUS_CLOSE - - if(src_object != remote_target) - error("remote - Unexpected src_object: Expected '[remote_target]'/[remote_target.type], was '[src_object]'/[src_object.type]") - - // This checks if src_object is powered, etc. - // The interactive state is otherwise simplistic and only returns STATUS_INTERACTIVE and never checks distances, etc. - . = src_object.CanUseTopic(user, GLOB.interactive_state) - if(. == STATUS_CLOSE) - return - - // This is the (generally) heavy checking, making sure the user is capable, within range of the remoter source, etc. - return min(., remoter.CanUseTopic(user, remoter_state)) diff --git a/code/modules/nano/interaction/self.dm b/code/modules/nano/interaction/self.dm deleted file mode 100644 index 7080fa7b50a4c..0000000000000 --- a/code/modules/nano/interaction/self.dm +++ /dev/null @@ -1,15 +0,0 @@ -/* - This state checks that the src_object is the same the as user -*/ -GLOBAL_DATUM_INIT(self_state, /datum/topic_state/self_state, new) - -/datum/topic_state/self_state/can_use_topic(var/src_object, var/mob/user) - if(src_object != user) - return STATUS_CLOSE - return user.self_can_use_topic(src_object) - -/mob/proc/self_can_use_topic(var/src_object) - return shared_nano_interaction() - -/mob/observer/ghost/self_can_use_topic(var/src_object) - return STATUS_INTERACTIVE \ No newline at end of file diff --git a/code/modules/nano/interaction/view.dm b/code/modules/nano/interaction/view.dm deleted file mode 100644 index d32bb3e404d3c..0000000000000 --- a/code/modules/nano/interaction/view.dm +++ /dev/null @@ -1,26 +0,0 @@ -/* - This state checks that the src_object is in view of the user. -*/ -GLOBAL_DATUM_INIT(view_state, /datum/topic_state/view, new) - -/datum/topic_state/view/can_use_topic(src_object, mob/user) - return user.view_can_use_topic(src_object) - -/mob/proc/view_can_use_topic(src_object) - if(!client) - return STATUS_CLOSE - if(src_object in view(client.view, src)) - return shared_nano_interaction(src_object) - return STATUS_CLOSE - -/mob/observer/ghost/view_can_use_topic(var/src_object) - if(can_admin_interact()) - return STATUS_INTERACTIVE - return ..() - -/mob/living/silicon/ai/view_can_use_topic(src_object) - if(is_in_chassis()) - if(cameranet && !cameranet.is_turf_visible(get_turf(src_object))) - return STATUS_CLOSE - return shared_nano_interaction(src_object) - return ..() \ No newline at end of file diff --git a/code/modules/nano/interaction/zlevel.dm b/code/modules/nano/interaction/zlevel.dm deleted file mode 100644 index 9f2380e168816..0000000000000 --- a/code/modules/nano/interaction/zlevel.dm +++ /dev/null @@ -1,13 +0,0 @@ -/* - This state checks that the user is on the same Z-level as src_object -*/ - -GLOBAL_DATUM_INIT(z_state, /datum/topic_state/z_state, new) - -/datum/topic_state/z_state/can_use_topic(var/src_object, var/mob/user) - var/turf/turf_obj = get_turf(src_object) - var/turf/turf_usr = get_turf(user) - if(!turf_obj || !turf_usr) - return STATUS_CLOSE - - return turf_obj.z == turf_usr.z ? STATUS_INTERACTIVE : STATUS_CLOSE diff --git a/code/modules/nano/modules/human_appearance.dm b/code/modules/nano/modules/human_appearance.dm deleted file mode 100644 index 68391f5fefaff..0000000000000 --- a/code/modules/nano/modules/human_appearance.dm +++ /dev/null @@ -1,195 +0,0 @@ -/datum/nano_module/appearance_changer - name = "Appearance Editor" - available_to_ai = FALSE - var/flags - var/mob/living/carbon/human/owner - var/list/races - var/list/heads - var/list/faces - var/list/langs - - -/datum/nano_module/appearance_changer/Destroy() - owner = null - races = null - heads = null - faces = null - langs = null - . = ..() - - -/datum/nano_module/appearance_changer/New(mob/living/carbon/human/_owner, _flags, _races) - ..(_owner, null) - owner = _owner - flags = _flags - if (flags & APPEARANCE_RACE) - if (islist(_races)) - races = _races - else - races = owner.generate_valid_species(_races) - generate_data() - - -/datum/nano_module/appearance_changer/proc/generate_data() - heads = owner.generate_valid_hairstyles() - faces = owner.generate_valid_facial_hairstyles() - if (~flags & APPEARANCE_LANG_ANY_ORIGIN) - langs = owner.generate_valid_languages() - - -/datum/nano_module/appearance_changer/Topic(href, list/href_list, datum/topic_state/state = GLOB.default_state) - . = ..() - if (.) - return - if (QDELETED(owner)) - return - - if (href_list["race"] && (flags & APPEARANCE_RACE) && (!races || (href_list["race"] in races))) - owner.change_species(href_list["race"]) - generate_data() - return TRUE - - if (href_list["gender"] && (flags & APPEARANCE_GENDER) && (href_list["gender"] in owner.species.genders)) - owner.change_gender(href_list["gender"]) - generate_data() - return TRUE - - if (href_list["skin_tone"] && (flags & APPEARANCE_SKIN) && (owner.species.appearance_flags & HAS_A_SKIN_TONE)) - var/high = owner.species.max_skin_tone() - var/data = input(usr, "Skin Tone:\n1 (pale) ~ [high] (dark)", "Skin Tone", 35 - owner.skin_tone) as null | num - if (isnull(data) || !can_still_topic(state)) - return - data = 35 - max(min(round(data), high), 1) - return owner.change_skin_tone(data) - - if (href_list["skin_color"] && (flags & APPEARANCE_SKIN) && (owner.species.appearance_flags & HAS_SKIN_COLOR)) - var/color = owner.skin_color - var/data = input(usr, "Skin Color:", "Skin Color", color) as null | color - if (isnull(data) || !can_still_topic(state)) - return - color = rgb2num(data) - if (owner.change_skin_color(arglist(color))) - if (flags & APPEARANCE_DNA2) - owner.update_dna() - return TRUE - return - - if (href_list["hair"] && (flags & APPEARANCE_HEAD) && (href_list["hair"] in heads)) - if (owner.change_hair(href_list["hair"])) - if (flags & APPEARANCE_DNA2) - owner.update_dna() - return TRUE - return - - if (href_list["hair_color"] && (flags & APPEARANCE_HEAD_COLOR)) - var/color = owner.head_hair_color - var/data = input(usr, "Hair Color:", "Hair Color", color) as null | color - if (isnull(data) || !can_still_topic(state)) - return - color = rgb2num(data) - if (owner.change_hair_color(arglist(color))) - if (flags & APPEARANCE_DNA2) - owner.update_dna() - return TRUE - return - - if (href_list["facial_hair"] && (flags & APPEARANCE_FACE) && (href_list["facial_hair"] in faces)) - if (owner.change_facial_hair(href_list["facial_hair"])) - if (flags & APPEARANCE_DNA2) - owner.update_dna() - return TRUE - return - - if (href_list["facial_hair_color"] && (flags & APPEARANCE_FACE_COLOR)) - var/color = owner.facial_hair_color - var/data = input(usr, "Facial Hair Color:", "Facial Hair Color", color) as null | color - if (isnull(data) || !can_still_topic(state)) - return - color = rgb2num(data) - if (owner.change_facial_hair_color(arglist(color))) - if (flags & APPEARANCE_DNA2) - owner.update_dna() - return TRUE - return - - if (href_list["eye_color"] && (flags & APPEARANCE_EYES)) - var/color = owner.eye_color - var/data = input(usr, "Eye Color:", "Eye Color", color) as null | color - if (isnull(data) || !can_still_topic(state)) - return - color = rgb2num(data) - if (owner.change_eye_color(arglist(color))) - if (flags & APPEARANCE_DNA2) - owner.update_dna() - return TRUE - return - - if (href_list["language"] && (flags & APPEARANCE_LANG)) - if (href_list["language_mode"] == "add") - if ((~flags & APPEARANCE_LANG_ANY_NUMBER) && length(owner.languages) >= MAX_LANGUAGES) - return - if ((~flags & APPEARANCE_LANG_ANY_ORIGIN) && !(href_list["language"] in langs)) - return - if (owner.add_language(href_list["language"])) - return TRUE - return - else - owner.remove_language(href_list["language"]) - return TRUE - - -/datum/nano_module/appearance_changer/ui_interact(mob/user, ui_key = "main", datum/nanoui/ui, force_open = TRUE, datum/topic_state/state = GLOB.default_state) - if (QDELETED(owner) || !owner.species) - return - - var/list/data = host.initial_data() - - data["specimen"] = owner.species.name - data["gender"] = owner.gender - - data["change_skin_tone"] = (flags & APPEARANCE_SKIN) && (owner.species.appearance_flags & HAS_A_SKIN_TONE) - data["change_skin_color"] = (flags & APPEARANCE_SKIN) && (owner.species.appearance_flags & HAS_SKIN_COLOR) - data["change_eye_color"] = !!(flags & APPEARANCE_EYES) - data["change_hair_color"] = !!(flags & APPEARANCE_HEAD_COLOR) - data["change_facial_hair_color"] = !!(flags & APPEARANCE_FACE_COLOR) - - data["change_race"] = !!(flags & APPEARANCE_RACE) - if (data["change_race"]) - var/list/entries = (data["species"] = list()) - for (var/race_key in races) - entries += list(list("specimen" = race_key)) - - data["change_gender"] = !!(flags & APPEARANCE_GENDER) - if (data["change_gender"]) - var/list/entries = (data["genders"] = list()) - for (var/gender_key in owner.species.genders) - entries += list(list("gender_name" = gender2text(gender_key), "gender_key" = gender_key)) - - data["change_hair"] = !!(flags & APPEARANCE_HEAD) - if (data["change_hair"]) - var/list/entries = (data["hair_styles"] = list()) - for (var/head_key in heads) - entries += list(list("hairstyle" = head_key)) - data["hair_style"] = owner.head_hair_style - - data["change_facial_hair"] = !!(flags & APPEARANCE_FACE) - if (data["change_facial_hair"]) - var/list/entries = (data["facial_hair_styles"] = list()) - for (var/face_key in faces) - entries += list(list("facialhairstyle" = face_key)) - data["facial_hair_style"] = owner.facial_hair_style - - data["change_languages"] = !!(flags & APPEARANCE_LANG) - if (data["change_languages"]) - var/list/entries = (data["languages"] = list()) - var/lang_list = (flags & APPEARANCE_LANG_ANY_ORIGIN) ? all_languages : langs - for (var/lang_key in lang_list) - entries += list(list("language" = lang_key, "selected" = (lang_list[lang_key] in owner.languages))) - - ui = SSnano.try_update_ui(user, src, ui_key, ui, data, force_open) - if (ui) - return - ui = new(user, src, ui_key, "appearance_changer.tmpl", "[src]", 800, 450, state = state) - ui.set_initial_data(data) - ui.open() - ui.set_auto_update(TRUE) diff --git a/code/modules/nano/modules/law_manager.dm b/code/modules/nano/modules/law_manager.dm deleted file mode 100644 index df15956014cfd..0000000000000 --- a/code/modules/nano/modules/law_manager.dm +++ /dev/null @@ -1,219 +0,0 @@ -/datum/nano_module/law_manager - name = "Law manager" - var/ion_law = "IonLaw" - var/zeroth_law = "ZerothLaw" - var/inherent_law = "InherentLaw" - var/supplied_law = "SuppliedLaw" - var/supplied_law_position = MIN_SUPPLIED_LAW_NUMBER - - var/current_view = 0 - - var/static/list/datum/ai_laws/admin_laws - var/static/list/datum/ai_laws/player_laws - var/mob/living/silicon/owner = null - -/datum/nano_module/law_manager/New(var/mob/living/silicon/S) - ..() - owner = S - - if(!admin_laws) - admin_laws = new() - player_laws = new() - - init_subtypes(/datum/ai_laws, admin_laws) - admin_laws = dd_sortedObjectList(admin_laws) - - for(var/datum/ai_laws/laws in admin_laws) - if(laws.selectable) - player_laws += laws - -/datum/nano_module/law_manager/Topic(href, href_list) - if(..()) - return 1 - - if(href_list["set_view"]) - current_view = text2num(href_list["set_view"]) - return 1 - - if(href_list["law_channel"]) - if(href_list["law_channel"] in owner.law_channels()) - owner.lawchannel = href_list["law_channel"] - return 1 - - if(href_list["state_law"]) - var/datum/ai_law/AL = locate(href_list["ref"]) in owner.laws.all_laws() - if(AL) - var/state_law = text2num(href_list["state_law"]) - owner.laws.set_state_law(AL, state_law) - return 1 - - if(href_list["add_zeroth_law"]) - if(zeroth_law && isadmin(usr) && !owner.laws.zeroth_law) - owner.set_zeroth_law(zeroth_law) - return 1 - - if(href_list["add_ion_law"]) - if(ion_law && is_malf(usr)) - owner.add_ion_law(ion_law) - return 1 - - if(href_list["add_inherent_law"]) - if(inherent_law && is_malf(usr)) - owner.add_inherent_law(inherent_law) - return 1 - - if(href_list["add_supplied_law"]) - if(supplied_law && supplied_law_position >= 1 && MIN_SUPPLIED_LAW_NUMBER <= MAX_SUPPLIED_LAW_NUMBER && is_malf(usr)) - owner.add_supplied_law(supplied_law_position, supplied_law) - return 1 - - if(href_list["change_zeroth_law"]) - var/new_law = sanitize(input("Enter new law Zero. Leaving the field blank will cancel the edit.", "Edit Law", zeroth_law)) - if(new_law && new_law != zeroth_law && can_still_topic()) - zeroth_law = new_law - return 1 - - if(href_list["change_ion_law"]) - var/new_law = sanitize(input("Enter new ion law. Leaving the field blank will cancel the edit.", "Edit Law", ion_law)) - if(new_law && new_law != ion_law && can_still_topic()) - ion_law = new_law - return 1 - - if(href_list["change_inherent_law"]) - var/new_law = sanitize(input("Enter new inherent law. Leaving the field blank will cancel the edit.", "Edit Law", inherent_law)) - if(new_law && new_law != inherent_law && can_still_topic()) - inherent_law = new_law - return 1 - - if(href_list["change_supplied_law"]) - var/new_law = sanitize(input("Enter new supplied law. Leaving the field blank will cancel the edit.", "Edit Law", supplied_law)) - if(new_law && new_law != supplied_law && can_still_topic()) - supplied_law = new_law - return 1 - - if(href_list["change_supplied_law_position"]) - var/new_position = input(usr, "Enter new supplied law position between 1 and [MAX_SUPPLIED_LAW_NUMBER], inclusive. Inherent laws at the same index as a supplied law will not be stated.", "Law Position", supplied_law_position) as num|null - if(isnum(new_position) && can_still_topic()) - supplied_law_position = clamp(new_position, 1, MAX_SUPPLIED_LAW_NUMBER) - return 1 - - if(href_list["edit_law"]) - if(is_malf(usr)) - var/datum/ai_law/AL = locate(href_list["edit_law"]) in owner.laws.all_laws() - if(AL) - var/new_law = sanitize(input(usr, "Enter new law. Leaving the field blank will cancel the edit.", "Edit Law", AL.law)) - if(new_law && new_law != AL.law && is_malf(usr) && can_still_topic()) - log_and_message_admins("has changed a law of [owner] from '[AL.law]' to '[new_law]'") - AL.law = new_law - return 1 - - if(href_list["delete_law"]) - if(is_malf(usr)) - var/datum/ai_law/AL = locate(href_list["delete_law"]) in owner.laws.all_laws() - if(AL && is_malf(usr)) - owner.delete_law(AL) - return 1 - - if(href_list["state_laws"]) - owner.statelaws(owner.laws) - return 1 - - if(href_list["state_law_set"]) - var/datum/ai_laws/ALs = locate(href_list["state_law_set"]) in (isadmin(usr) ? admin_laws : player_laws) - if(ALs) - owner.statelaws(ALs) - return 1 - - if(href_list["transfer_laws"]) - if(is_malf(usr)) - var/datum/ai_laws/ALs = locate(href_list["transfer_laws"]) in (isadmin(usr) ? admin_laws : player_laws) - if(ALs) - log_and_message_admins("has transfered the [ALs.name] laws to [owner].") - ALs.sync(owner, 0) - current_view = 0 - return 1 - - if(href_list["notify_laws"]) - to_chat(owner, "Law Notice") - owner.laws.show_laws(owner) - if(isAI(owner)) - var/mob/living/silicon/ai/AI = owner - for(var/mob/living/silicon/robot/R in AI.connected_robots) - to_chat(R, "Law Notice") - R.laws.show_laws(R) - if(usr != owner) - to_chat(usr, "Laws displayed.") - return 1 - - return 0 - -/datum/nano_module/law_manager/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1, var/datum/topic_state/state = GLOB.default_state) - var/data[0] - owner.lawsync() - - data["ion_law_nr"] = ionnum() - data["ion_law"] = ion_law - data["zeroth_law"] = zeroth_law - data["inherent_law"] = inherent_law - data["supplied_law"] = supplied_law - data["supplied_law_position"] = supplied_law_position - - package_laws(data, "zeroth_laws", list(owner.laws.zeroth_law)) - package_laws(data, "ion_laws", owner.laws.ion_laws) - package_laws(data, "inherent_laws", owner.laws.inherent_laws) - package_laws(data, "supplied_laws", owner.laws.supplied_laws) - - data["isAI"] = isAI(owner) - data["isMalf"] = is_malf(user) - data["isSlaved"] = owner.is_slaved() - data["isAdmin"] = isadmin(user) - data["view"] = current_view - - var/channels[0] - for (var/ch_name in owner.law_channels()) - channels[++channels.len] = list("channel" = ch_name) - data["channel"] = owner.lawchannel - data["channels"] = channels - data["law_sets"] = package_multiple_laws(data["isAdmin"] ? admin_laws : player_laws) - - ui = SSnano.try_update_ui(user, src, ui_key, ui, data, force_open) - if (!ui) - ui = new(user, src, ui_key, "law_manager.tmpl", sanitize("[src] - [owner]"), 800, is_malf(user) ? 600 : 400, state = state) - ui.set_initial_data(data) - ui.open() - ui.set_auto_update(1) - -/datum/nano_module/law_manager/proc/package_laws(var/list/data, var/field, var/list/datum/ai_law/laws) - var/packaged_laws[0] - for(var/datum/ai_law/AL in laws) - packaged_laws[++packaged_laws.len] = list("law" = AL.law, "index" = AL.get_index(), "state" = owner.laws.get_state_law(AL), "ref" = "\ref[AL]") - data[field] = packaged_laws - data["has_[field]"] = packaged_laws.len - -/datum/nano_module/law_manager/proc/package_multiple_laws(var/list/datum/ai_laws/laws) - var/law_sets[0] - for(var/datum/ai_laws/ALs in laws) - var/packaged_laws[0] - package_laws(packaged_laws, "zeroth_laws", list(ALs.zeroth_law, ALs.zeroth_law_borg)) - package_laws(packaged_laws, "ion_laws", ALs.ion_laws) - package_laws(packaged_laws, "inherent_laws", ALs.inherent_laws) - package_laws(packaged_laws, "supplied_laws", ALs.supplied_laws) - law_sets[++law_sets.len] = list("name" = ALs.name, "header" = ALs.law_header, "ref" = "\ref[ALs]","laws" = packaged_laws) - - return law_sets - -/datum/nano_module/law_manager/proc/is_malf(var/mob/user) - return (isadmin(user) && !owner.is_slaved()) || owner.is_malf_or_traitor() - -/mob/living/silicon/proc/is_slaved() - return 0 - -/mob/living/silicon/robot/is_slaved() - return lawupdate && connected_ai ? sanitize(connected_ai.name) : null - -/datum/nano_module/law_manager/proc/sync_laws(var/mob/living/silicon/ai/AI) - if(!AI) - return - for(var/mob/living/silicon/robot/R in AI.connected_robots) - R.sync() - log_and_message_admins("has syncronized [AI]'s laws with its borgs.") diff --git a/code/modules/nano/modules/nano_module.dm b/code/modules/nano/modules/nano_module.dm deleted file mode 100644 index b544c18d8e5eb..0000000000000 --- a/code/modules/nano/modules/nano_module.dm +++ /dev/null @@ -1,63 +0,0 @@ -/datum/nano_module - var/name - var/datum/host - var/available_to_ai = TRUE - var/datum/topic_manager/topic_manager - var/list/using_access = list() - -/datum/nano_module/New(var/datum/host, var/topic_manager) - ..() - src.host = host.nano_host() - src.topic_manager = topic_manager - -/datum/nano_module/Destroy() - host = null - QDEL_NULL(topic_manager) - . = ..() - -/datum/nano_module/nano_host() - return host ? host : src - -/datum/nano_module/proc/can_still_topic(var/datum/topic_state/state = GLOB.default_state) - return CanUseTopic(usr, state) == STATUS_INTERACTIVE - -/datum/nano_module/proc/check_eye(var/mob/user) - return -1 - -//returns a list. -/datum/nano_module/proc/get_access(mob/user) - . = using_access - if(istype(user)) - var/obj/item/card/id/I = user.GetIdCard() - if(I) - . |= I.access - -/datum/nano_module/proc/check_access(var/mob/user, var/access) - if(!access) - return 1 - if(!islist(access)) - access = list(access) //listify a single access code. - if(has_access(access, using_access)) - return 1 //This is faster, and often enough. - return has_access(access, get_access(user)) //Also checks the mob's ID. - -/datum/nano_module/Topic(href, href_list) - if(topic_manager && topic_manager.Topic(href, href_list)) - return TRUE - . = ..() - -/datum/nano_module/proc/get_host_z() - return get_z(nano_host()) - -/datum/nano_module/proc/print_text(var/text, var/mob/user) - var/datum/extension/interactive/ntos/os = get_extension(nano_host(), /datum/extension/interactive/ntos) - if(os) - os.print_paper(text) - else - to_chat(user, "Error: Unable to detect compatible printer interface. Are you running NTOSv2 compatible system?") - -/datum/proc/initial_data() - return list() - -/datum/proc/update_layout() - return FALSE \ No newline at end of file diff --git a/code/modules/nano/nanoexternal.dm b/code/modules/nano/nanoexternal.dm deleted file mode 100644 index 9bccdd4f51886..0000000000000 --- a/code/modules/nano/nanoexternal.dm +++ /dev/null @@ -1,57 +0,0 @@ - // This file contains all Nano procs/definitions for external classes/objects - - /** - * Called when a Nano UI window is closed - * This is how Nano handles closed windows - * It must be a verb so that it can be called using winset - * - * @return nothing - */ -/client/verb/nanoclose(var/uiref as text) - set hidden = 1 // hide this verb from the user's panel - set name = "nanoclose" - - var/datum/nanoui/ui = locate(uiref) - - if (istype(ui)) - ui.close() - - if(ui.ref) - var/href = "close=1" - src.Topic(href, params2list(href), ui.ref) // this will direct to the atom's Topic() proc via client.Topic() - else if (ui.on_close_logic) - // no atomref specified (or not found) - // so just reset the user mob's machine var - if(src && src.mob) - src.mob.unset_machine() - - /** - * The ui_interact proc is used to open and update Nano UIs - * If ui_interact is not used then the UI will not update correctly - * ui_interact is currently defined for /atom/movable - * - * @param user /mob The mob who is interacting with this UI - * @param ui_key string A string key to use for this UI. Allows for multiple unique UIs on one obj/mob (defaut value "main") - * @param ui /datum/nanoui This parameter is passed by the nanoui process() proc when updating an open UI - * @param force_open boolean Force the UI to (re)open, even if it's already open - * - * @return nothing - */ -/datum/proc/ui_interact(mob/user, ui_key = "main", datum/nanoui/ui = null, force_open = 1, datum/nanoui/master_ui = null, datum/topic_state/state = GLOB.default_state) - return - - /** - * Data to be sent to the UI. - * This must be implemented for a UI to work. - * - * @param user /mob The mob who interacting with the UI - * @param ui_key string A string key to use for this UI. Allows for multiple unique UIs on one obj/mob (defaut value "main") - * - * @return data /list Data to be sent to the UI - **/ -/datum/proc/ui_data(mob/user, ui_key = "main") - return list() // Not implemented. - - -// Used by SSnano (/datum/controller/subsystem/processing/nano) to track UIs opened by this mob -/mob/var/list/open_uis diff --git a/code/modules/nano/nanomapgen.dm b/code/modules/nano/nanomapgen.dm deleted file mode 100644 index aad8065228653..0000000000000 --- a/code/modules/nano/nanomapgen.dm +++ /dev/null @@ -1,93 +0,0 @@ -// This file is a modified version of https://raw2.github.com/Baystation12/OldCode-BS12/master/code/TakePicture.dm - -#define NANOMAP_ICON_SIZE 4 -#define NANOMAP_MAX_ICON_DIMENSION 1024 - -#define NANOMAP_TILES_PER_IMAGE (NANOMAP_MAX_ICON_DIMENSION / NANOMAP_ICON_SIZE) - -#define NANOMAP_TERMINALERR 5 -#define NANOMAP_INPROGRESS 2 -#define NANOMAP_BADOUTPUT 2 -#define NANOMAP_SUCCESS 1 -#define NANOMAP_WATCHDOGSUCCESS 4 -#define NANOMAP_WATCHDOGTERMINATE 3 - - -//Call these procs to dump your world to a series of image files (!!) -//NOTE: Does not explicitly support non 32x32 icons or stuff with large pixel_* values, so don't blame me if it doesn't work perfectly - -/client/proc/nanomapgen_DumpImage() - set name = "Generate NanoUI Map" - set category = "Server" - - if (alert("Do you wish to generate a Z Level?", "Generate NanoUI Map", "Yes", "No") != "Yes") - return - - if(holder) - nanomapgen_DumpTile(1, 1, text2num(input(usr,"Enter the Z level to generate"))) - -/client/proc/nanomapgen_DumpTile(var/startX = 1, var/startY = 1, var/currentZ = 1, var/endX = -1, var/endY = -1) - - if (endX < 0 || endX > world.maxx) - endX = world.maxx - - if (endY < 0 || endY > world.maxy) - endY = world.maxy - - if (currentZ < 0 || currentZ > world.maxz) - to_chat(usr, "NanoMapGen: ERROR: currentZ ([currentZ]) must be between 1 and [world.maxz]") - - sleep(3) - return NANOMAP_TERMINALERR - - if (startX > endX) - to_chat(usr, "NanoMapGen: ERROR: startX ([startX]) cannot be greater than endX ([endX])") - - sleep(3) - return NANOMAP_TERMINALERR - - if (startY > endX) - to_chat(usr, "NanoMapGen: ERROR: startY ([startY]) cannot be greater than endY ([endY])") - sleep(3) - return NANOMAP_TERMINALERR - - var/icon/Tile = icon(file("nano/mapbase1024.png")) - if (Tile.Width() != NANOMAP_MAX_ICON_DIMENSION || Tile.Height() != NANOMAP_MAX_ICON_DIMENSION) - to_world_log("NanoMapGen: ERROR: BASE IMAGE DIMENSIONS ARE NOT [NANOMAP_MAX_ICON_DIMENSION]x[NANOMAP_MAX_ICON_DIMENSION]") - sleep(3) - return NANOMAP_TERMINALERR - - to_world_log("NanoMapGen: GENERATE MAP ([startX],[startY],[currentZ]) to ([endX],[endY],[currentZ])") - to_chat(usr, "NanoMapGen: GENERATE MAP ([startX],[startY],[currentZ]) to ([endX],[endY],[currentZ])") - - var/count = 0; - for(var/WorldX = startX, WorldX <= endX, WorldX++) - for(var/WorldY = startY, WorldY <= endY, WorldY++) - - var/atom/Turf = locate(WorldX, WorldY, currentZ) - - var/icon/TurfIcon = new(Turf.icon, Turf.icon_state, dir = Turf.dir) - TurfIcon.Scale(NANOMAP_ICON_SIZE, NANOMAP_ICON_SIZE) - - Tile.Blend(TurfIcon, ICON_OVERLAY, ((WorldX - 1) * NANOMAP_ICON_SIZE), ((WorldY - 1) * NANOMAP_ICON_SIZE)) - - count++ - - if (count % 8000 == 0) - to_world_log("NanoMapGen: [count] tiles done") - sleep(1) - - var/mapFilename = "new_[map_image_file_name(currentZ)]" - - to_world_log("NanoMapGen: sending [mapFilename] to client") - - show_browser(usr, Tile, "window=picture;file=[mapFilename];display=0") - - to_world_log("NanoMapGen: Done.") - - to_chat(usr, "NanoMapGen: Done. File [mapFilename] uploaded to your cache.") - - if (Tile.Width() != NANOMAP_MAX_ICON_DIMENSION || Tile.Height() != NANOMAP_MAX_ICON_DIMENSION) - return NANOMAP_BADOUTPUT - - return NANOMAP_SUCCESS diff --git a/code/modules/nano/nanoui.dm b/code/modules/nano/nanoui.dm deleted file mode 100644 index a1503b9efabd9..0000000000000 --- a/code/modules/nano/nanoui.dm +++ /dev/null @@ -1,557 +0,0 @@ -/********************************************************** -NANO UI FRAMEWORK - -nanoui class (or whatever Byond calls classes) - -nanoui is used to open and update nano browser uis -**********************************************************/ - -/datum/nanoui - // the user who opened this ui - var/mob/user - // the object this ui "belongs" to - var/datum/src_object - // the title of this ui - var/title - // the key of this ui, this is to allow multiple (different) uis for each src_object - var/ui_key - // window_id is used as the window name/identifier for browse and onclose - var/window_id - // the browser window width - var/width = 0 - // the browser window height - var/height = 0 - // whether to use extra logic when window closes - var/on_close_logic = 1 - // an extra ref to use when the window is closed, usually null - var/atom/ref = null - // options for modifying window behaviour - var/window_options = "focus=0;can_close=1;can_minimize=1;can_maximize=0;can_resize=1;titlebar=1;" // window option is set using window_id - // the list of stylesheets to apply to this ui - var/list/stylesheets = list() - // the list of javascript scripts to use for this ui - var/list/scripts = list() - // a list of templates which can be used with this ui - var/templates[0] - // the layout key for this ui (this is used on the frontend, leave it as "default" unless you know what you're doing) - var/layout_key = "default" - // optional layout key for additional ui header content to include - var/layout_header_key = "default_header" - // this sets whether to re-render the ui layout with each update (default 0, turning on will break the map ui if it's in use) - var/auto_update_layout = 0 - // this sets whether to re-render the ui content with each update (default 1) - var/auto_update_content = 1 - // the default state to use for this ui (this is used on the frontend, leave it as "default" unless you know what you're doing) - var/state_key = "default" - // show the map ui, this is used by the default layout - var/show_map = 0 - // the map z level to display - var/map_z_level = 1 - // initial data, containing the full data structure, must be sent to the ui (the data structure cannot be extended later on) - var/list/initial_data[0] - // set to 1 to update the ui automatically every master_controller tick - var/is_auto_updating = 0 - // the current status/visibility of the ui - var/status = STATUS_INTERACTIVE - - // Relationship between a master interface and its children. Used in update_status - var/datum/nanoui/master_ui - var/list/datum/nanoui/children = list() - var/datum/topic_state/state = null - - /** - * Create a new nanoui instance. - * - * @param nuser /mob The mob who has opened/owns this ui - * @param nsrc_object /obj|/mob The obj or mob which this ui belongs to - * @param nui_key string A string key to use for this ui. Allows for multiple unique uis on one src_oject - * @param ntemplate string The filename of the template file from /nano/templates (e.g. "my_template.tmpl") - * @param ntitle string The title of this ui - * @param nwidth int the width of the ui window - * @param nheight int the height of the ui window - * @param nref /atom A custom ref to use if "on_close_logic" is set to 1 - * - * @return /nanoui new nanoui object - */ -/datum/nanoui/New(nuser, nsrc_object, nui_key, ntemplate_filename, ntitle = 0, nwidth = 0, nheight = 0, var/atom/nref = null, var/datum/nanoui/master_ui = null, var/datum/topic_state/state = GLOB.default_state) - user = nuser - src_object = nsrc_object - ui_key = nui_key - window_id = "[ui_key]\ref[src_object]" - - src.master_ui = master_ui - if(master_ui) - master_ui.children += src - src.state = state - - // add the passed template filename as the "main" template, this is required - add_template("main", ntemplate_filename) - - if (ntitle) - title = sanitize(ntitle) - if (nwidth) - width = nwidth - if (nheight) - height = nheight - if (nref) - ref = nref - - add_common_assets() - var/datum/asset/assets = get_asset_datum(/datum/asset/nanoui) - assets.send(user, ntemplate_filename) - -//Do not qdel nanouis. Use close() instead. -/datum/nanoui/Destroy() - user = null - src_object = null - state = null - . = ..() - - /** - * Use this proc to add assets which are common to (and required by) all nano uis - * - * @return nothing - */ -/datum/nanoui/proc/add_common_assets() - add_script("libraries.min.js") // A JS file comprising of jQuery, doT.js and jQuery Timer libraries (compressed together) - add_script("nano_utility.js") // The NanoUtility JS, this is used to store utility functions. - add_script("nano_template.js") // The NanoTemplate JS, this is used to render templates. - add_script("nano_state_manager.js") // The NanoStateManager JS, it handles updates from the server and passes data to the current state - add_script("nano_state.js") // The NanoState JS, this is the base state which all states must inherit from - add_script("nano_state_default.js") // The NanoStateDefault JS, this is the "default" state (used by all UIs by default), which inherits from NanoState - add_script("nano_base_callbacks.js") // The NanoBaseCallbacks JS, this is used to set up (before and after update) callbacks which are common to all UIs - add_script("nano_base_helpers.js") // The NanoBaseHelpers JS, this is used to set up template helpers which are common to all UIs - add_stylesheet("shared.css") // this CSS sheet is common to all UIs - add_stylesheet("icons.css") // this CSS sheet is common to all UIs - - /** - * Set the current status (also known as visibility) of this ui. - * - * @param state int The status to set, see the defines at the top of this file - * @param push_update int (bool) Push an update to the ui to update it's status (an update is always sent if the status has changed to red (0)) - * - * @return nothing - */ -/datum/nanoui/proc/set_status(state, push_update) - if (state != status) // Only update if it is different - if (status == STATUS_DISABLED) - status = state - if (push_update) - update() - else - status = state - if (push_update || status == 0) - push_data(null, 1) // Update the UI, force the update in case the status is 0, data is null so that previous data is used - - /** - * Update the status (visibility) of this ui based on the user's status - * - * @param push_update int (bool) Push an update to the ui to update it's status. This is set to 0/false if an update is going to be pushed anyway (to avoid unnessary updates) - * - * @return 1 if closed, null otherwise. - */ -/datum/nanoui/proc/update_status(var/push_update = 0) - var/atom/host = src_object && src_object.nano_host() - if(!host) - close() - return 1 - var/new_status = host.CanUseTopic(user, state) - if(master_ui) - new_status = min(new_status, master_ui.status) - - if(new_status == STATUS_CLOSE) - close() - return 1 - set_status(new_status, push_update) - - /** - * Set the ui to auto update (every master_controller tick) - * - * @param state int (bool) Set auto update to 1 or 0 (true/false) - * - * @return nothing - */ -/datum/nanoui/proc/set_auto_update(nstate = 1) - is_auto_updating = nstate - - /** - * Set the initial data for the ui. This is vital as the data structure set here cannot be changed when pushing new updates. - * - * @param data /list The list of data for this ui - * - * @return nothing - */ -/datum/nanoui/proc/set_initial_data(list/data) - initial_data = data - - /** - * Get config data to sent to the ui. - * - * @return /list config data - */ -/datum/nanoui/proc/get_config_data() - var/name = "[src_object]" - name = sanitize(name) - var/list/config_data = list( - "title" = title, - "srcObject" = list("name" = name), - "stateKey" = state_key, - "status" = status, - "autoUpdateLayout" = auto_update_layout, - "autoUpdateContent" = auto_update_content, - "showMap" = show_map, - "mapName" = GLOB.using_map.path, - "mapZLevel" = map_z_level, - "mapZLevels" = GLOB.using_map.map_levels, - "user" = list("name" = user.name), - "currency" = GLOB.using_map.local_currency_name, - ) - return config_data - - /** - * Get data to sent to the ui. - * - * @param data /list The list of general data for this ui (can be null to use previous data sent) - * - * @return /list data to send to the ui - */ -/datum/nanoui/proc/get_send_data(var/list/data) - var/list/config_data = get_config_data() - - var/list/send_data = list("config" = config_data) - - if (!isnull(data)) - send_data["data"] = data - - return send_data - - /** - * Set the browser window options for this ui - * - * @param nwindow_options string The new window options - * - * @return nothing - */ -/datum/nanoui/proc/set_window_options(nwindow_options) - window_options = nwindow_options - - /** - * Add a CSS stylesheet to this UI - * These must be added before the UI has been opened, adding after that will have no effect - * - * @param file string The name of the CSS file from /nano/css (e.g. "my_style.css") - * - * @return nothing - */ -/datum/nanoui/proc/add_stylesheet(file) - stylesheets.Add(file) - - /** - * Add a JavsScript script to this UI - * These must be added before the UI has been opened, adding after that will have no effect - * - * @param file string The name of the JavaScript file from /nano/js (e.g. "my_script.js") - * - * @return nothing - */ -/datum/nanoui/proc/add_script(file) - scripts.Add(file) - - /** - * Add a template for this UI - * Templates are combined with the data sent to the UI to create the rendered view - * These must be added before the UI has been opened, adding after that will have no effect - * - * @param key string The key which is used to reference this template in the frontend - * @param filename string The name of the template file from /nano/templates (e.g. "my_template.tmpl") - * - * @return nothing - */ -/datum/nanoui/proc/add_template(key, filename) - templates[key] = filename - - /** - * Set the layout key for use in the frontend Javascript - * The layout key is the basic layout key for the page - * Two files are loaded on the client based on the layout key varable: - * -> a template in /nano/templates with the filename "layout_.tmpl - * -> a CSS stylesheet in /nano/css with the filename "layout_.css - * - * @param nlayout string The layout key to use - * - * @return nothing - */ -/datum/nanoui/proc/set_layout_key(nlayout_key) - layout_key = lowertext(nlayout_key) - - /** - * Set the ui to update the layout (re-render it) on each update, turning this on will break the map ui (if it's being used) - * - * @param state int (bool) Set update to 1 or 0 (true/false) (default 0) - * - * @return nothing - */ -/datum/nanoui/proc/set_auto_update_layout(nstate) - auto_update_layout = nstate - - /** - * Set the ui to update the main content (re-render it) on each update - * - * @param state int (bool) Set update to 1 or 0 (true/false) (default 1) - * - * @return nothing - */ -/datum/nanoui/proc/set_auto_update_content(nstate) - auto_update_content = nstate - - /** - * Set the state key for use in the frontend Javascript - * - * @param nstate_key string The key of the state to use - * - * @return nothing - */ -/datum/nanoui/proc/set_state_key(nstate_key) - state_key = nstate_key - - /** - * Toggle showing the map ui - * - * @param nstate_key boolean 1 to show map, 0 to hide (default is 0) - * - * @return nothing - */ -/datum/nanoui/proc/set_show_map(nstate) - show_map = nstate - - /** - * Toggle showing the map ui - * - * @param nstate_key boolean 1 to show map, 0 to hide (default is 0) - * - * @return nothing - */ -/datum/nanoui/proc/set_map_z_level(nz) - map_z_level = nz - - /** - * Set whether or not to use the "old" on close logic (mainly unset_machine()) - * - * @param state int (bool) Set on_close_logic to 1 or 0 (true/false) - * - * @return nothing - */ -/datum/nanoui/proc/use_on_close_logic(state) - on_close_logic = state - - /** - * Return the HTML for this UI - * - * @return string HTML for the UI - */ -/datum/nanoui/proc/get_html() - - // before the UI opens, add the layout files based on the layout key - add_stylesheet("layout_[layout_key].css") - add_template("layout", "layout_[layout_key].tmpl") - if (layout_header_key) - add_template("layoutHeader", "layout_[layout_header_key].tmpl") - - var/head_content = "" - - for (var/filename in scripts) - head_content += " " - - for (var/filename in stylesheets) - head_content += " " - - var/template_data_json = "{}" // An empty JSON object - if (templates.len > 0) - template_data_json = strip_improper(json_encode(templates)) - - var/list/send_data = get_send_data(initial_data) - var/initial_data_json = replacetext_char(replacetext_char(json_encode(send_data), """, "&#34;"), "'", "'") - initial_data_json = strip_improper(initial_data_json); - - var/url_parameters_json = json_encode(list("src" = "\ref[src]")) - - return {" - - - - - - - [head_content] - - -
              -
              - - - - "} - - /** - * Open this UI - * - * @return nothing - */ -/datum/nanoui/proc/open() - if(!user?.client) - return - - if(!src_object) - close() - - var/window_size = "" - if (width && height) - window_size = "size=[width]x[height];" - if(update_status(0)) - return // Will be closed by update_status(). - - show_browser(user, get_html(), "window=[window_id];[window_size][window_options]") - winset(user, "mapwindow.map", "focus=true") // return keyboard focus to map - on_close_winset() - //onclose(user, window_id) - SSnano.ui_opened(src) - - /** - * Reinitialise this UI, potentially with a different template and/or initial data - * - * @return nothing - */ -/datum/nanoui/proc/reinitialise(template, new_initial_data) - if(template) - add_template("main", template) - if(new_initial_data) - set_initial_data(new_initial_data) - open() - - /** - * Close this UI - * - * @return nothing - */ -/datum/nanoui/proc/close() - is_auto_updating = 0 - SSnano.ui_closed(src) - show_browser(user, null, "window=[window_id]") - for(var/datum/nanoui/child in children) - child.close() - children.Cut() - state = null - master_ui = null - qdel(src) - - /** - * Set the UI window to call the nanoclose verb when the window is closed - * This allows Nano to handle closed windows - * - * @return nothing - */ -/datum/nanoui/proc/on_close_winset() - if(!user.client) - return - var/params = "\ref[src]" - - spawn(2) - if(!user || !user.client) - return - winset(user, window_id, "on-close=\"nanoclose [params]\"") - - /** - * Push data to an already open UI window - * - * @return nothing - */ -/datum/nanoui/proc/push_data(data, force_push = 0) - if(update_status(0)) - return // Closed - if (status == STATUS_DISABLED && !force_push) - return // Cannot update UI, no visibility - - var/list/send_data = get_send_data(data) - -// to_chat(user, list2json_usecache(send_data))// used for debugging //NANO DEBUG HOOK - - to_target(user, output(list2params(list(strip_improper(json_encode(send_data)))),"[window_id].browser:receiveUpdateData")) - - /** - * This Topic() proc is called whenever a user clicks on a link within a Nano UI - * If the UI status is currently STATUS_INTERACTIVE then call the src_object Topic() - * If the src_object Topic() returns 1 (true) then update all UIs attached to src_object - * - * @return nothing - */ -/datum/nanoui/Topic(href, href_list) - update_status(0) // update the status - if (status != STATUS_INTERACTIVE || user != usr) // If UI is not interactive or usr calling Topic is not the UI user - return - - // This is used to toggle the nano map ui - var/map_update = 0 - if(href_list["showMap"]) - set_show_map(text2num(href_list["showMap"])) - map_update = 1 - - if(href_list["mapZLevel"]) - var/map_z = text2num(href_list["mapZLevel"]) - if(map_z in GLOB.using_map.map_levels) - set_map_z_level(map_z) - map_update = 1 - - if ((src_object && src_object.Topic(href, href_list, state)) || map_update) - SSnano.update_uis(src_object) // update all UIs attached to src_object - - /** - * Process this UI, updating the entire UI or just the status (aka visibility) - * - * @param update string For this UI to update - * - * @return nothing - */ -/datum/nanoui/proc/try_update(update = 0) - if (!src_object || !user) - close() - return - - if (status && (update || is_auto_updating)) - update() // Update the UI (update_status() is called whenever a UI is updated) - else - update_status(1) // Not updating UI, so lets check here if status has changed - - /** - * This Process proc is called by SSnano. - * Use try_update() to make manual updates. - */ -/datum/nanoui/Process() - try_update(0) - - /** - * Update the UI - * - * @return nothing - */ -/datum/nanoui/proc/update(var/force_open = 0) - src_object.ui_interact(user, ui_key, src, force_open, master_ui, state) diff --git a/code/modules/organs/_organ_setup.dm b/code/modules/organs/_organ_setup.dm deleted file mode 100644 index 07b678b892856..0000000000000 --- a/code/modules/organs/_organ_setup.dm +++ /dev/null @@ -1,6 +0,0 @@ -//These control the damage thresholds for the various ways of removing limbs -#define DROPLIMB_THRESHOLD_EDGE 5 -#define DROPLIMB_THRESHOLD_TEAROFF 1.5 -#define DROPLIMB_THRESHOLD_DESTROY 1 - -#define ORGAN_RECOVERY_THRESHOLD (5 MINUTES) \ No newline at end of file diff --git a/code/modules/organs/blood.dm b/code/modules/organs/blood.dm deleted file mode 100644 index 9c31282eb8293..0000000000000 --- a/code/modules/organs/blood.dm +++ /dev/null @@ -1,333 +0,0 @@ -/**************************************************** - BLOOD SYSTEM -****************************************************/ - -/mob/living/carbon/human/var/datum/reagents/vessel // Container for blood and BLOOD ONLY. Do not transfer other chems here. - -//Initializes blood vessels -/mob/living/carbon/human/proc/make_blood() - - if(vessel) - return - - vessel = new/datum/reagents(species.blood_volume, src) - - if(!should_have_organ(BP_HEART)) //We want the var for safety but we can do without the actual blood. - return - - vessel.add_reagent(/datum/reagent/blood,species.blood_volume) - fixblood() - -//Resets blood data -/mob/living/carbon/human/proc/fixblood() - for(var/datum/reagent/blood/B in vessel.reagent_list) - if(B.type == /datum/reagent/blood) - B.data = list( - "donor" = weakref(src), - "species" = species.name, - "blood_DNA" = dna.unique_enzymes, - "blood_colour" = species.get_blood_colour(src), - "blood_type" = dna.b_type, - "trace_chem" = null - ) - B.color = B.data["blood_colour"] - -//Makes a blood drop, leaking amt units of blood from the mob -/mob/living/carbon/human/proc/drip(var/amt, var/tar = src, var/ddir) - if(remove_blood(amt)) - if(bloodstr.total_volume && vessel.total_volume) - var/chem_share = round(0.3 * amt * (bloodstr.total_volume/vessel.total_volume), 0.01) - bloodstr.remove_any(chem_share * bloodstr.total_volume) - blood_splatter(tar, src, (ddir && ddir>0), spray_dir = ddir) - return amt - return 0 - -#define BLOOD_SPRAY_DISTANCE 2 -/mob/living/carbon/human/proc/blood_squirt(var/amt, var/turf/sprayloc) - if(amt <= 0 || !istype(sprayloc)) - return - var/spraydir = pick(GLOB.alldirs) - amt = Ceil(amt/BLOOD_SPRAY_DISTANCE) - var/bled = 0 - spawn(0) - for(var/i = 1 to BLOOD_SPRAY_DISTANCE) - sprayloc = get_step(sprayloc, spraydir) - if(!istype(sprayloc) || sprayloc.density) - break - var/hit_mob - for(var/thing in sprayloc) - var/atom/A = thing - if(!A.simulated) - continue - - if(ishuman(A)) - var/mob/living/carbon/human/H = A - if(!H.lying) - H.bloody_body(src) - H.bloody_hands(src) - var/blinding = FALSE - if(ran_zone() == BP_HEAD) - blinding = TRUE - for(var/obj/item/I in list(H.head, H.glasses, H.wear_mask)) - if(I && (I.body_parts_covered & EYES)) - blinding = FALSE - break - if(blinding) - H.eye_blurry = max(H.eye_blurry, 10) - H.eye_blind = max(H.eye_blind, 5) - to_chat(H, "You are blinded by a spray of blood!") - else - to_chat(H, "You are hit by a spray of blood!") - hit_mob = TRUE - - if(hit_mob || !A.CanPass(src, sprayloc)) - break - - drip(amt, sprayloc, spraydir) - bled += amt - if(hit_mob) break - sleep(1) - return bled -#undef BLOOD_SPRAY_DISTANCE - -/mob/living/carbon/human/proc/remove_blood(var/amt) - if(!should_have_organ(BP_HEART)) //TODO: Make drips come from the reagents instead. - return 0 - if(!amt) - return 0 - - amt *= ((src.mob_size/MOB_MEDIUM) ** 0.5) - - return vessel.remove_reagent(/datum/reagent/blood, amt) - -/**************************************************** - BLOOD TRANSFERS -****************************************************/ - -//Gets blood from mob to the container, preserving all data in it. -/mob/living/carbon/proc/take_blood(obj/item/reagent_containers/container, var/amount) - var/datum/reagent/blood/B = get_blood(container.reagents) - if(!B) - container.reagents.add_reagent(/datum/reagent/blood, amount, get_blood_data()) - else - B.sync_to(src) - B.volume += amount - return 1 - -//For humans, blood does not appear from blue, it comes from vessels. -/mob/living/carbon/human/take_blood(obj/item/reagent_containers/container, var/amount) - - if(!should_have_organ(BP_HEART)) - reagents.trans_to_obj(container, amount) - return 1 - - if(vessel.get_reagent_amount(/datum/reagent/blood) < amount) - return null - - //make sure virus/etc data is up to date - var/datum/reagent/blood/our = get_blood(vessel) - our.sync_to(src) - vessel.trans_to_holder(container.reagents,amount) - return 1 - -//Transfers blood from container ot vessels -/mob/living/carbon/proc/inject_blood(var/datum/reagent/blood/injected, var/amount) - if (!injected || !istype(injected)) - return - var/list/chems = list() - chems = injected.data["trace_chem"] - for(var/C in chems) - src.reagents.add_reagent(C, (text2num(chems[C]) / species.blood_volume) * amount)//adds trace chemicals to owner's blood - -//Transfers blood from reagents to vessel, respecting blood types compatability. -/mob/living/carbon/human/inject_blood(var/datum/reagent/blood/injected, var/amount) - if(!should_have_organ(BP_HEART)) - reagents.add_reagent(/datum/reagent/blood, amount, injected.data) - return - - if(blood_incompatible(injected.data["blood_type"], injected.data["species"])) - reagents.add_reagent(/datum/reagent/toxin, amount * 0.5) - else - vessel.add_reagent(/datum/reagent/blood, amount, injected.data) - ..() - -//Gets human's own blood. -/mob/living/carbon/proc/get_blood(datum/reagents/container) - var/datum/reagent/blood/res - if(container) - res = locate() in container.reagent_list //Grab some blood - if(res) // Make sure there's some blood at all - if(weakref && res.data["donor"] != weakref) //If it's not theirs, then we look for theirs - for(var/datum/reagent/blood/D in container.reagent_list) - if(weakref && D.data["donor"] != weakref) - return D - return res - -/mob/living/carbon/human/get_blood(datum/reagents/container) - . = ..(container || vessel) - -/mob/living/carbon/human/proc/blood_incompatible(blood_type, blood_species) - if(blood_species && species.name) - if(blood_species != species.name) - return 1 - - var/donor_antigen = copytext_char(blood_type, 1, length(blood_type)) - var/receiver_antigen = copytext_char(dna.b_type, 1, length(dna.b_type)) - var/donor_rh = (findtext(blood_type, "+") > 0) - var/receiver_rh = (findtext(dna.b_type, "+") > 0) - - if(donor_rh && !receiver_rh) return 1 - switch(receiver_antigen) - if("A") - if(donor_antigen != "A" && donor_antigen != "O") return 1 - if("B") - if(donor_antigen != "B" && donor_antigen != "O") return 1 - if("O") - if(donor_antigen != "O") return 1 - //AB is a universal receiver. - return 0 - -/mob/living/carbon/human/proc/regenerate_blood(var/amount) - amount *= (species.blood_volume / SPECIES_BLOOD_DEFAULT) - var/blood_volume_raw = vessel.get_reagent_amount(/datum/reagent/blood) - amount = max(0,min(amount, species.blood_volume - blood_volume_raw)) - if(amount) - vessel.add_reagent(/datum/reagent/blood, amount, get_blood_data()) - return amount - -/mob/living/carbon/proc/get_blood_data() - var/data = list() - data["donor"] = weakref(src) - data["blood_DNA"] = dna.unique_enzymes - data["blood_type"] = dna.b_type - data["species"] = species.name - data["has_oxy"] = species.blood_oxy - var/list/temp_chem = list() - for(var/datum/reagent/R in reagents.reagent_list) - temp_chem[R.type] = R.volume - data["trace_chem"] = temp_chem - data["dose_chem"] = chem_doses.Copy() - data["blood_colour"] = species.get_blood_colour(src) - return data - -/proc/blood_splatter(var/target,var/datum/reagent/blood/source,var/large,var/spray_dir) - - var/obj/effect/decal/cleanable/blood/B - var/decal_type = /obj/effect/decal/cleanable/blood/splatter - var/turf/T = get_turf(target) - - if(istype(source,/mob/living/carbon)) - var/mob/living/carbon/M = source - source = M.get_blood() - if(!istype(source)) - source = null - - // Are we dripping or splattering? - var/list/drips = list() - // Only a certain number of drips (or one large splatter) can be on a given turf. - for(var/obj/effect/decal/cleanable/blood/drip/drop in T) - drips |= drop.drips - qdel(drop) - if(!large && drips.len < 3) - decal_type = /obj/effect/decal/cleanable/blood/drip - - // Find a blood decal or create a new one. - if(T) - var/list/existing = filter_list(T.contents, decal_type) - if(length(existing) > 3) - B = pick(existing) - if(!B) - B = new decal_type(T) - - var/obj/effect/decal/cleanable/blood/drip/drop = B - if(istype(drop) && drips && drips.len && !large) - drop.overlays |= drips - drop.drips |= drips - - // If there's no data to copy, call it quits here. - if(!source) - return B - - // Update appearance. - if(source.data["blood_colour"]) - B.basecolor = source.data["blood_colour"] - B.update_icon() - if(spray_dir) - B.icon_state = "squirt" - B.dir = spray_dir - - // Update blood information. - if(source.data["blood_DNA"]) - B.blood_DNA = list() - if(source.data["blood_type"]) - B.blood_DNA[source.data["blood_DNA"]] = source.data["blood_type"] - else - B.blood_DNA[source.data["blood_DNA"]] = "O+" - - B.fluorescent = 0 - B.set_invisibility(0) - return B - -//Percentage of maximum blood volume. -/mob/living/carbon/human/proc/get_blood_volume() - return round((vessel.get_reagent_amount(/datum/reagent/blood)/species.blood_volume)*100) - -//Percentage of maximum blood volume, affected by the condition of circulation organs -/mob/living/carbon/human/proc/get_blood_circulation() - var/obj/item/organ/internal/heart/heart = internal_organs_by_name[BP_HEART] - var/blood_volume = get_blood_volume() - if(!heart) - return 0.25 * blood_volume - - var/recent_pump = LAZYACCESS(heart.external_pump, 1) > world.time - (20 SECONDS) - var/pulse_mod = 1 - if((status_flags & FAKEDEATH) || BP_IS_ROBOTIC(heart)) - pulse_mod = 1 - else - switch(heart.pulse) - if(PULSE_NONE) - if(recent_pump) - pulse_mod = LAZYACCESS(heart.external_pump, 2) - else - pulse_mod *= 0.25 - if(PULSE_SLOW) - pulse_mod *= 0.9 - if(PULSE_FAST) - pulse_mod *= 1.1 - if(PULSE_2FAST, PULSE_THREADY) - pulse_mod *= 1.25 - blood_volume *= pulse_mod - - var/min_efficiency = recent_pump ? 0.5 : 0.3 - blood_volume *= max(min_efficiency, (1-(heart.damage / heart.max_damage))) - - if(!heart.open && chem_effects[CE_BLOCKAGE]) - blood_volume *= max(0, 1-chem_effects[CE_BLOCKAGE]) - - return min(blood_volume, 100) - -//Whether the species needs blood to carry oxygen. Used in get_blood_oxygenation and may be expanded based on blood rather than species in the future. -/mob/living/carbon/human/proc/blood_carries_oxygen() - return species.blood_oxy - -//Percentage of maximum blood volume, affected by the condition of circulation organs, affected by the oxygen loss. What ultimately matters for brain -/mob/living/carbon/human/proc/get_blood_oxygenation() - var/blood_volume = get_blood_circulation() - if(blood_carries_oxygen()) - if(is_asystole()) // Heart is missing or isn't beating and we're not breathing (hardcrit) - return min(blood_volume, BLOOD_VOLUME_SURVIVE) - - if(!need_breathe()) - return blood_volume - else - blood_volume = 100 - - var/blood_volume_mod = max(0, 1 - getOxyLoss()/(species.total_health/2)) - var/oxygenated_mult = 0 - if(chem_effects[CE_OXYGENATED] == 1) // Dexalin. - oxygenated_mult = 0.5 - else if(chem_effects[CE_OXYGENATED] >= 2) // Dexplus. - oxygenated_mult = 0.8 - blood_volume_mod = blood_volume_mod + oxygenated_mult - (blood_volume_mod * oxygenated_mult) - blood_volume = blood_volume * blood_volume_mod - return min(blood_volume, 100) diff --git a/code/modules/organs/external/_external.dm b/code/modules/organs/external/_external.dm deleted file mode 100644 index 30c6a3fde74c8..0000000000000 --- a/code/modules/organs/external/_external.dm +++ /dev/null @@ -1,1407 +0,0 @@ -/**************************************************** - EXTERNAL ORGANS -****************************************************/ - -/obj/item/organ/external - name = "external" - min_broken_damage = 30 - dir = SOUTH - organ_tag = "limb" - appearance_flags = PIXEL_SCALE | LONG_GLIDE - - var/slowdown = 0 - - // Strings - var/broken_description // fracture string if any. - var/damage_state = "00" // Modifier used for generating the on-mob damage overlay for this limb. - - // Damage vars. - var/brute_dam = 0 // Actual current brute damage. - var/brute_ratio = 0 // Ratio of current brute damage to max damage. - var/burn_dam = 0 // Actual current burn damage. - var/burn_ratio = 0 // Ratio of current burn damage to max damage. - var/last_dam = -1 // used in healing/processing calculations. - var/pain = 0 // How much the limb hurts. - var/pain_disability_threshold // Point at which a limb becomes unusable due to pain. - - // A bitfield for a collection of limb behavior flags. - var/limb_flags = ORGAN_FLAG_CAN_AMPUTATE | ORGAN_FLAG_CAN_BREAK - - // Appearance vars. - var/icon_name = null // Icon state base. - var/body_part = null // Part flag - var/icon_position = 0 // Used in mob overlay layering calculations. - var/model // Used when caching robolimb icons. - var/force_icon // Used to force override of species-specific limb icons (for prosthetics). - var/icon/mob_icon // Cached icon for use in mob overlays. - var/skin_tone // Skin tone. - var/base_skin = "" // Skin base. - var/list/s_col // skin colour - var/s_col_blend = ICON_ADD // How the skin colour is applied. - var/list/h_col // hair colour - var/body_hair // Icon blend for body hair if any. - var/list/markings = list() // Markings (body_markings) to apply to the icon - - // Wound and structural data. - var/wound_update_accuracy = 1 // how often wounds should be updated, a higher number means less often - var/list/wounds // wound datum list. - var/number_wounds = 0 // number of wounds, which is NOT wounds.len! - var/obj/item/organ/external/parent // Master-limb. - var/list/children // Sub-limbs. - var/list/internal_organs = list() // Internal organs of this body part - var/list/implants = list() // Currently implanted objects. - var/base_miss_chance = 20 // Chance of missing. - var/genetic_degradation = 0 // Amount of current genetic damage. - - //Forensics stuff - var/list/autopsy_data = list() // Trauma data for forensics. - - // Joint/state stuff. - var/joint = "joint" // Descriptive string used in dislocation. - var/amputation_point // Descriptive string used in amputation. - var/dislocated = 0 // If you target a joint, you can dislocate the limb, causing temporary damage to the organ. - var/encased // Needs to be opened with a saw to access the organs. - var/artery_name = "artery" // Flavour text for cartoid artery, aorta, etc. - var/arterial_bleed_severity = 1 // Multiplier for bleeding in a limb. - var/tendon_name = "tendon" // Flavour text for Achilles tendon, etc. - var/cavity_name = "cavity" - - // Surgery vars. - var/cavity_max_w_class = ITEM_SIZE_TINY //this is increased if bigger organs spawn by default inside - var/hatch_state = 0 - var/stage = 0 - var/cavity = 0 - var/atom/movable/applied_pressure - var/atom/movable/splinted - - // HUD element variable, see organ_icon.dm get_damage_hud_image() - var/image/hud_damage_image - -/obj/item/organ/external/proc/get_fingerprint() - - if((limb_flags & ORGAN_FLAG_FINGERPRINT) && dna && !is_stump() && !BP_IS_ROBOTIC(src)) - return md5(dna.uni_identity) - - for(var/obj/item/organ/external/E in children) - var/print = E.get_fingerprint() - if(print) - return print - -/obj/item/organ/external/afterattack(atom/A, mob/user, proximity) - ..() - if(proximity && get_fingerprint()) - A.add_partial_print(get_fingerprint()) - -/obj/item/organ/external/New(var/mob/living/carbon/holder) - ..() - if(isnull(pain_disability_threshold)) - pain_disability_threshold = (max_damage * 0.75) - if(owner) - replaced(owner) - sync_colour_to_human(owner) - get_icon() - - slowdown = species.get_slowdown(owner) - -/obj/item/organ/external/Destroy() - - if(wounds) - for(var/datum/wound/wound in wounds) - qdel(wound) - - if(parent && parent.children) - parent.children -= src - parent = null - - if(children) - for(var/obj/item/organ/external/C in children) - qdel(C) - - if(internal_organs) - for(var/obj/item/organ/O in internal_organs) - qdel(O) - - applied_pressure = null - if(splinted && splinted.loc == src) - qdel(splinted) - splinted = null - - if(owner) - if(limb_flags & ORGAN_FLAG_CAN_GRASP) owner.grasp_limbs -= src - if(limb_flags & ORGAN_FLAG_CAN_STAND) owner.stance_limbs -= src - owner.organs -= src - owner.organs_by_name[organ_tag] = null - owner.organs_by_name -= organ_tag - while(null in owner.organs) - owner.organs -= null - - if(autopsy_data) autopsy_data.Cut() - - return ..() - -/obj/item/organ/external/set_dna(var/datum/dna/new_dna) - ..() - s_col_blend = species.limb_blend - base_skin = new_dna.base_skin - -/obj/item/organ/external/emp_act(severity) - - if(!BP_IS_ROBOTIC(src)) - return - - if(owner && BP_IS_CRYSTAL(src)) // Crystalline robotics == piezoelectrics. - owner.Weaken(4 - severity) - owner.confused = max(owner.confused, 6 - (severity * 2)) - return - - var/burn_damage = 0 - switch (severity) - if (EMP_ACT_HEAVY) - burn_damage = 30 - if (EMP_ACT_LIGHT) - burn_damage = 15 - if (3) - burn_damage = 7.5 -/*[INF] - var/mult = 1 + !!(BP_IS_ASSISTED(src)) // This macro returns (large) bitflags. - burn_damage *= mult/species.get_burn_mod(owner) //ignore burn mod for EMP damage -[/INF]*/ - var/power = 4 - severity //stupid reverse severity - for(var/obj/item/I in implants) - if(I.obj_flags & OBJ_FLAG_CONDUCTIBLE) - burn_damage += I.w_class * rand(power, 3*power) - - if(owner && burn_damage) - owner.custom_pain("Something inside your [src] burns a [severity < 2 ? "bit" : "lot"]!", power * 15) //robotic organs won't feel it anyway - take_external_damage(0, burn_damage, 0, used_weapon = "Hot metal") - - if(owner && limb_flags & ORGAN_FLAG_CAN_GRASP) - owner.grasp_damage_disarm(src) - - if(owner && limb_flags & ORGAN_FLAG_CAN_STAND) - owner.stance_damage_prone(src) - - ..() - -/obj/item/organ/external/attack_self(var/mob/user) - if((owner && loc == owner) || !contents.len) - return ..() - var/list/removable_objects = list() - for(var/obj/item/organ/external/E in (contents + src)) - if(!istype(E)) - continue - for(var/obj/item/I in E.contents) - if(istype(I,/obj/item/organ)) - continue - removable_objects |= I - if(removable_objects.len) - var/obj/item/I = pick(removable_objects) - I.forceMove(get_turf(user)) //just in case something was embedded that is not an item - if(istype(I)) - if(!(user.l_hand && user.r_hand)) - user.put_in_hands(I) - user.visible_message("\The [user] rips \the [I] out of \the [src]!") - return //no eating the limb until everything's been removed - return ..() - -/obj/item/organ/external/examine(mob/user, distance) - . = ..() - if(distance <= 1 || isghost(user)) - for(var/obj/item/I in contents) - if(istype(I, /obj/item/organ)) - continue - to_chat(user, "There is \a [I] sticking out of it.") - var/ouchies = get_wounds_desc() - if(ouchies != "nothing") - to_chat(user, "There is [ouchies] visible on it.") - - return - -/obj/item/organ/external/show_decay_status(mob/user) - ..(user) - for(var/obj/item/organ/external/child in children) - child.show_decay_status(user) - -/obj/item/organ/external/attackby(obj/item/W as obj, mob/user as mob) - switch(stage) - if(0) - if(W.sharp) - user.visible_message("[user] cuts [src] open with [W]!") - stage++ - return - if(1) - if(istype(W)) - user.visible_message("[user] cracks [src] open like an egg with [W]!") - stage++ - return - if(2) - if(W.sharp || istype(W,/obj/item/hemostat) || isWirecutter(W)) - var/list/organs = get_contents_recursive() - if(organs.len) - var/obj/item/removing = pick(organs) - var/obj/item/organ/external/current_child = removing.loc - - current_child.implants.Remove(removing) - current_child.internal_organs.Remove(removing) - - status |= ORGAN_CUT_AWAY - if(istype(removing, /obj/item/organ/internal/mmi_holder)) - var/obj/item/organ/internal/mmi_holder/O = removing - removing = O.transfer_and_delete() - - removing.forceMove(get_turf(user)) - - if(!(user.l_hand && user.r_hand)) - user.put_in_hands(removing) - user.visible_message("[user] extracts [removing] from [src] with [W]!") - else - user.visible_message("[user] fishes around fruitlessly in [src] with [W].") - return - ..() - - -/** - * Get a list of contents of this organ and all the child organs - */ -/obj/item/organ/external/proc/get_contents_recursive() - var/list/all_items = list() - - all_items.Add(implants) - all_items.Add(internal_organs) - - for(var/obj/item/organ/external/child in children) - all_items.Add(child.get_contents_recursive()) - - return all_items - -/obj/item/organ/external/proc/is_dislocated() - if(dislocated > 0) - return 1 - if(is_parent_dislocated()) - return 1//if any parent is dislocated, we are considered dislocated as well - return 0 - -/obj/item/organ/external/proc/is_parent_dislocated() - var/obj/item/organ/external/O = parent - while(O && O.dislocated != -1) - if(O.dislocated == 1) - return 1 - O = O.parent - return 0 - - -/obj/item/organ/external/proc/dislocate() - if(dislocated == -1) - return - - dislocated = 1 - if(owner) - owner.verbs |= /mob/living/carbon/human/proc/undislocate - -/obj/item/organ/external/proc/undislocate() - if(dislocated == -1) - return - - dislocated = 0 - if(owner) - owner.shock_stage += 20 - - //check to see if we still need the verb - for(var/obj/item/organ/external/limb in owner.organs) - if(limb.dislocated == 1) - return - owner.verbs -= /mob/living/carbon/human/proc/undislocate - -/obj/item/organ/external/update_health() - damage = min(max_damage, (brute_dam + burn_dam)) - return - - -/obj/item/organ/external/replaced(var/mob/living/carbon/human/target) - ..() - - if(istype(owner)) - - if(limb_flags & ORGAN_FLAG_CAN_GRASP) owner.grasp_limbs[src] = TRUE - if(limb_flags & ORGAN_FLAG_CAN_STAND) owner.stance_limbs[src] = TRUE - owner.organs_by_name[organ_tag] = src - owner.organs |= src - - for(var/obj/item/organ/organ in internal_organs) - organ.replaced(owner, src) - - for(var/obj/implant in implants) - implant.forceMove(owner) - - if(istype(implant, /obj/item/implant)) - var/obj/item/implant/imp_device = implant - - // we can't use implanted() here since it's often interactive - imp_device.imp_in = owner - imp_device.implanted = 1 - - for(var/obj/item/organ/external/organ in children) - organ.replaced(owner) - - if(!parent && parent_organ) - parent = owner.organs_by_name[src.parent_organ] - if(parent) - if(!parent.children) - parent.children = list() - parent.children.Add(src) - //Remove all stump wounds since limb is not missing anymore - for(var/datum/wound/lost_limb/W in parent.wounds) - qdel(W) - break - parent.update_damages() - -//Helper proc used by various tools for repairing robot limbs -/obj/item/organ/external/proc/robo_repair(var/repair_amount, var/damage_type, var/damage_desc, obj/item/tool, mob/living/user) - if((!BP_IS_ROBOTIC(src))) - return 0 - - var/damage_amount - switch(damage_type) - if (DAMAGE_BRUTE) - damage_amount = brute_dam - if (DAMAGE_BURN) - damage_amount = burn_dam - else return 0 - - if(!damage_amount) - if(src.hatch_state != HATCH_OPENED) - to_chat(user, "Nothing to fix!") - return 0 - - if(damage_amount >= ROBOLIMB_SELF_REPAIR_CAP) - to_chat(user, "The damage is far too severe to patch over externally.") - return 0 - - if(user == src.owner) - var/grasp - if(user.l_hand == tool && (src.body_part & (ARM_LEFT|HAND_LEFT))) - grasp = BP_L_HAND - else if(user.r_hand == tool && (src.body_part & (ARM_RIGHT|HAND_RIGHT))) - grasp = BP_R_HAND - - if(grasp) - to_chat(user, "You can't reach your [src.name] while holding [tool] in your [owner.get_bodypart_name(grasp)].") - return 0 - - user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN) - if(!do_after(user, 1 SECOND, owner, DO_SURGERY)) - return 0 - - switch(damage_type) - if (DAMAGE_BRUTE) - src.heal_damage(repair_amount, 0, 0, 1) - if (DAMAGE_BURN) - heal_damage(0, repair_amount, 0, 1) - owner.regenerate_icons() - if(user == src.owner) - user.visible_message("\The [user] patches [damage_desc] on \his [src.name] with [tool].") - else - user.visible_message("\The [user] patches [damage_desc] on [owner]'s [src.name] with [tool].") - - return 1 - - -/* -This function completely restores a damaged organ to perfect condition. -*/ -/obj/item/organ/external/rejuvenate(var/ignore_prosthetic_prefs) - damage_state = "00" - - status = 0 - brute_dam = 0 - burn_dam = 0 - germ_level = 0 - pain = 0 - genetic_degradation = 0 - for(var/datum/wound/wound in wounds) - qdel(wound) - number_wounds = 0 - - // handle internal organs - for(var/obj/item/organ/current_organ in internal_organs) - current_organ.rejuvenate(ignore_prosthetic_prefs) - - // remove embedded objects and drop them on the floor - for(var/obj/implanted_object in implants) - if(!istype(implanted_object,/obj/item/implant)) // We don't want to remove REAL implants. Just shrapnel etc. - implanted_object.forceMove(get_turf(src)) - implants -= implanted_object - - if(owner && !ignore_prosthetic_prefs) - if(owner.client && owner.client.prefs && owner.client.prefs.real_name == owner.real_name) - var/status = owner.client.prefs.organ_data[organ_tag] - if(status == "amputated") - remove_rejuv() - else if(status == "cyborg") - var/robodata = owner.client.prefs.rlimb_data[organ_tag] - if(robodata) - robotize(robodata) - else - robotize() - owner.updatehealth() - - if(!QDELETED(src) && species) - species.post_organ_rejuvenate(src, owner) - -/obj/item/organ/external/remove_rejuv() - if(owner) - owner.organs -= src - owner.organs_by_name[organ_tag] = null - owner.organs_by_name -= organ_tag - while(null in owner.organs) owner.organs -= null - if(LAZYLEN(children)) - for(var/obj/item/organ/external/E in children) - E.remove_rejuv() - children.Cut() - for(var/obj/item/organ/internal/I in internal_organs) - I.remove_rejuv() - ..() - -/obj/item/organ/external/proc/createwound(type = INJURY_TYPE_CUT, damage, surgical) - - if(damage <= 0) - return - - if(BP_IS_CRYSTAL(src) && (damage >= 15 || prob(1))) - type = INJURY_TYPE_SHATTER - playsound(loc, 'sound/effects/hit_on_shattered_glass.ogg', 40, 1) // Crash! - - //moved these before the open_wound check so that having many small wounds for example doesn't somehow protect you from taking internal damage (because of the return) - //Brute damage can possibly trigger an internal wound, too. - var/local_damage = brute_dam + burn_dam + damage - if (!surgical && (type in list(INJURY_TYPE_CUT, INJURY_TYPE_PIERCE, INJURY_TYPE_BRUISE)) && damage > 15 && local_damage > 30) - - var/internal_damage - if(prob(damage) && sever_artery()) - internal_damage = TRUE - if(prob(Ceil(damage/4)) && sever_tendon()) - internal_damage = TRUE - if(internal_damage) - owner.custom_pain("You feel something rip in your [name]!", 50, affecting = src) - - //Burn damage can cause fluid loss due to blistering and cook-off - if ((type in list(INJURY_TYPE_BURN, INJURY_TYPE_LASER)) && (damage > 5 || damage + burn_dam >= 15) && !BP_IS_ROBOTIC(src)) - var/fluid_loss_severity - switch(type) - if (INJURY_TYPE_BURN) - fluid_loss_severity = FLUIDLOSS_WIDE_BURN - if (INJURY_TYPE_LASER) - fluid_loss_severity = FLUIDLOSS_CONC_BURN - var/fluid_loss = (damage/(owner.maxHealth - config.health_threshold_dead)) * SPECIES_BLOOD_DEFAULT * fluid_loss_severity - owner.remove_blood(fluid_loss) - - // first check whether we can widen an existing wound - if(!surgical && LAZYLEN(wounds) && prob(max(50+(number_wounds-1)*10,90))) - if ((type == INJURY_TYPE_CUT || type == INJURY_TYPE_BRUISE) && damage >= 5) - //we need to make sure that the wound we are going to worsen is compatible with the type of damage... - var/list/compatible_wounds = list() - for (var/datum/wound/W in wounds) - if (W.can_worsen(type, damage)) - compatible_wounds += W - - if(compatible_wounds.len) - var/datum/wound/W = pick(compatible_wounds) - W.open_wound(damage) - if(prob(25)) - if(BP_IS_CRYSTAL(src)) - owner.visible_message("The cracks in \the [owner]'s [name] spread.",\ - "The cracks in your [name] spread.",\ - "You hear the cracking of crystal.") - else if(BP_IS_ROBOTIC(src)) - owner.visible_message("The damage to \the [owner]'s [name] worsens.",\ - "The damage to your [name] worsens.",\ - "You hear the screech of abused metal.") - else - owner.visible_message("The wound on \the [owner]'s [name] widens with a nasty ripping noise.",\ - "The wound on your [name] widens with a nasty ripping noise.",\ - "You hear a nasty ripping noise, as if flesh is being torn apart.") - return W - - //Creating wound - var/wound_type = get_wound_type(type, damage) - - if(wound_type) - var/datum/wound/W = new wound_type(damage, src) - - //Check whether we can add the wound to an existing wound - if(surgical) - W.autoheal_cutoff = 0 - else - for(var/datum/wound/other in wounds) - if(other.can_merge(W)) - other.merge_wound(W) - return - LAZYADD(wounds, W) - return W - -/**************************************************** - PROCESSING & UPDATING -****************************************************/ - -//external organs handle brokenness a bit differently when it comes to damage. -/obj/item/organ/external/is_broken() - return ((status & ORGAN_CUT_AWAY) || ((status & ORGAN_BROKEN) && !splinted)) - -//Determines if we even need to process this organ. -/obj/item/organ/external/proc/need_process() - if(get_pain()) - return 1 - if(status & (ORGAN_CUT_AWAY|ORGAN_BLEEDING|ORGAN_BROKEN|ORGAN_DEAD|ORGAN_MUTATED)) - return 1 - if((brute_dam || burn_dam) && !BP_IS_ROBOTIC(src)) //Robot limbs don't autoheal and thus don't need to process when damaged - return 1 - if(last_dam != brute_dam + burn_dam) // Process when we are fully healed up. - last_dam = brute_dam + burn_dam - return 1 - else - last_dam = brute_dam + burn_dam - if(germ_level) - return 1 - return 0 - -/obj/item/organ/external/Process() - if(owner) - - if(pain) - pain -= owner.lying ? 3 : 1 - if(pain<0) - pain = 0 - - // Process wounds, doing healing etc. Only do this every few ticks to save processing power - if(owner.life_tick % wound_update_accuracy == 0) - update_wounds() - - //Infections - update_germs() - else - pain = 0 - ..() - -//Updating germ levels. Handles organ germ levels and necrosis. -/* -The INFECTION_LEVEL values defined in setup.dm control the time it takes to reach the different -infection levels. Since infection growth is exponential, you can adjust the time it takes to get -from one germ_level to another using the rough formula: - -desired_germ_level = initial_germ_level*e^(desired_time_in_seconds/1000) - -So if I wanted it to take an average of 15 minutes to get from level one (100) to level two -I would set INFECTION_LEVEL_TWO to 100*e^(15*60/1000) = 245. Note that this is the average time, -the actual time is dependent on RNG. - -INFECTION_LEVEL_ONE below this germ level nothing happens, and the infection doesn't grow -INFECTION_LEVEL_TWO above this germ level the infection will start to spread to internal and adjacent organs and rest will be required to recover -INFECTION_LEVEL_THREE above this germ level the player will take additional toxin damage per second, and will die in minutes without - antitox. also, above this germ level you will need to overdose on spaceacillin and get rest to reduce the germ_level. - -Note that amputating the affected organ does in fact remove the infection from the player's body. -*/ -/obj/item/organ/external/proc/update_germs() - - if(BP_IS_ROBOTIC(src) || BP_IS_CRYSTAL(src) || (owner.species && owner.species.species_flags & SPECIES_FLAG_IS_PLANT)) //Robotic limbs shouldn't be infected, nor should nonexistant limbs. - germ_level = 0 - return - - if(owner.bodytemperature >= 170) //cryo stops germs from moving and doing their bad stuffs - //** Syncing germ levels with external wounds - handle_germ_sync() - - //** Handle antibiotics and curing infections - handle_antibiotics() - - //** Handle the effects of infections - handle_germ_effects() - -/obj/item/organ/external/proc/handle_germ_sync() - var/turf/simulated/T = get_turf(owner) - for(var/datum/wound/W in wounds) - //Open wounds can become infected - if(max(istype(T) && T.dirt*10, 2*owner.germ_level) > W.germ_level && W.infection_check()) - W.germ_level++ - - var/antibiotics = owner.chem_effects[CE_ANTIBIOTIC] - if (!antibiotics) - for(var/datum/wound/W in wounds) - //Infected wounds raise the organ's germ level - if (W.germ_level > germ_level || prob(min(W.germ_level, 30))) - germ_level++ - break //limit increase to a maximum of one per second - -/obj/item/organ/external/handle_germ_effects() - - if(germ_level < INFECTION_LEVEL_TWO) - return ..() - - var/antibiotics = owner.reagents.get_reagent_amount(/datum/reagent/spaceacillin) - - if(germ_level >= INFECTION_LEVEL_TWO) - //spread the infection to internal organs - var/obj/item/organ/target_organ = null //make internal organs become infected one at a time instead of all at once - for (var/obj/item/organ/I in internal_organs) - if (I.germ_level > 0 && I.germ_level < min(germ_level, INFECTION_LEVEL_TWO)) //once the organ reaches whatever we can give it, or level two, switch to a different one - if (!target_organ || I.germ_level > target_organ.germ_level) //choose the organ with the highest germ_level - target_organ = I - - if (!target_organ) - //figure out which organs we can spread germs to and pick one at random - var/list/candidate_organs = list() - for (var/obj/item/organ/I in internal_organs) - if (I.germ_level < germ_level) - candidate_organs |= I - if (candidate_organs.len) - target_organ = pick(candidate_organs) - - if (target_organ) - target_organ.germ_level++ - - //spread the infection to child and parent organs - if (children) - for (var/obj/item/organ/external/child in children) - if (child.germ_level < germ_level && !BP_IS_ROBOTIC(child)) - if (child.germ_level < INFECTION_LEVEL_ONE*2 || prob(30)) - child.germ_level++ - - if (parent) - if (parent.germ_level < germ_level && !BP_IS_ROBOTIC(parent)) - if (parent.germ_level < INFECTION_LEVEL_ONE*2 || prob(30)) - parent.germ_level++ - - if(germ_level >= INFECTION_LEVEL_THREE && antibiotics < REAGENTS_OVERDOSE) //overdosing is necessary to stop severe infections - if (!(status & ORGAN_DEAD)) - status |= ORGAN_DEAD - to_chat(owner, "You can't feel your [name] anymore...") - owner.update_body(1) - - germ_level++ - owner.adjustToxLoss(1) - -//Updating wounds. Handles wound natural I had some free spachealing, internal bleedings and infections -/obj/item/organ/external/proc/update_wounds() - - var/update_surgery - if(BP_IS_ROBOTIC(src) || BP_IS_CRYSTAL(src)) //Robotic limbs don't heal or get worse. - for(var/datum/wound/W in wounds) //Repaired wounds disappear though - if(W.damage <= 0) //and they disappear right away - qdel(W) //TODO: robot wounds for robot limbs - update_surgery = TRUE - if(owner && update_surgery) - owner.update_surgery() - return - - for(var/datum/wound/W in wounds) - // wounds can disappear after 10 minutes at the earliest - if(W.damage <= 0 && W.created + (10 MINUTES) <= world.time) - qdel(W) - update_surgery = TRUE - continue - // let the GC handle the deletion of the wound - - // slow healing - var/heal_amt = 0 - // if damage >= 50 AFTER treatment then it's probably too severe to heal within the timeframe of a round. - if (!owner.chem_effects[CE_TOXIN] && W.can_autoheal() && W.wound_damage() && brute_ratio < 0.5 && burn_ratio < 0.5) - heal_amt += 0.5 - - //we only update wounds once in [wound_update_accuracy] ticks so have to emulate realtime - heal_amt = heal_amt * wound_update_accuracy - //configurable regen speed woo, no-regen hardcore or instaheal hugbox, choose your destiny - heal_amt = heal_amt * config.organ_regeneration_multiplier - // amount of healing is spread over all the wounds - heal_amt = heal_amt / (LAZYLEN(wounds) + 1) - // making it look prettier on scanners - heal_amt = round(heal_amt,0.1) - var/dam_type = DAMAGE_BRUTE - if (W.damage_type == INJURY_TYPE_BURN) - dam_type = DAMAGE_BURN - if(owner.can_autoheal(dam_type)) - W.heal_damage(heal_amt) - - // sync the organ's damage with its wounds - update_damages() - if(owner) - if(update_surgery) - owner.update_surgery() - if (update_damstate()) - owner.UpdateDamageIcon(1) - -//Updates brute_damn and burn_damn from wound damages. Updates BLEEDING status. -/obj/item/organ/external/proc/update_damages() - number_wounds = 0 - brute_dam = 0 - burn_dam = 0 - status &= ~ORGAN_BLEEDING - var/clamped = 0 - - var/mob/living/carbon/human/H - if(istype(owner,/mob/living/carbon/human)) - H = owner - - //update damage counts - var/bleeds = (!BP_IS_ROBOTIC(src) && !BP_IS_CRYSTAL(src)) - for(var/datum/wound/W in wounds) - - if(W.damage <= 0) - qdel(W) - continue - - if (W.damage_type == INJURY_TYPE_BURN) - burn_dam += W.damage - else - brute_dam += W.damage - - if(bleeds && W.bleeding() && (H && H.should_have_organ(BP_HEART))) - W.bleed_timer-- - status |= ORGAN_BLEEDING - - clamped |= W.clamped - number_wounds += W.amount - - damage = brute_dam + burn_dam - update_damage_ratios() - -/obj/item/organ/external/proc/update_damage_ratios() - var/limb_loss_threshold = max_damage - brute_ratio = brute_dam / (limb_loss_threshold * 2) - burn_ratio = burn_dam / (limb_loss_threshold * 2) - -//Returns 1 if damage_state changed -/obj/item/organ/external/proc/update_damstate() - var/n_is = damage_state_text() - if (n_is != damage_state) - damage_state = n_is - return 1 - return 0 - -// new damage icon system -// returns just the brute/burn damage code -/obj/item/organ/external/proc/damage_state_text() - - var/tburn = 0 - var/tbrute = 0 - - if(burn_dam ==0) - tburn =0 - else if (burn_dam < (max_damage * 0.25 / 2)) - tburn = 1 - else if (burn_dam < (max_damage * 0.75 / 2)) - tburn = 2 - else - tburn = 3 - - if (brute_dam == 0) - tbrute = 0 - else if (brute_dam < (max_damage * 0.25 / 2)) - tbrute = 1 - else if (brute_dam < (max_damage * 0.75 / 2)) - tbrute = 2 - else - tbrute = 3 - return "[tbrute][tburn]" - -/**************************************************** - DISMEMBERMENT -****************************************************/ -/obj/item/organ/external/proc/get_droplimb_messages_for(var/droptype, var/clean) - - if(BP_IS_CRYSTAL(src)) - playsound(src, "shatter", 70, 1) - return list( - "\The [owner]'s [src.name] shatters into a thousand pieces!", - "Your [src.name] shatters into a thousand pieces!", - "You hear the sound of something shattering!" - ) - else - switch(droptype) - if(DROPLIMB_EDGE) - if(!clean) - var/gore_sound = "[BP_IS_ROBOTIC(src) ? "tortured metal" : "ripping tendons and flesh"]" - return list( - "\The [owner]'s [src.name] flies off in an arc!", - "Your [src.name] goes flying off!", - "You hear a terrible sound of [gore_sound]." - ) - if(DROPLIMB_BURN) - var/gore = "[BP_IS_ROBOTIC(src) ? "": " of burning flesh"]" - return list( - "\The [owner]'s [src.name] flashes away into ashes!", - "Your [src.name] flashes away into ashes!", - "You hear a crackling sound[gore]." - ) - if(DROPLIMB_BLUNT) - var/gore = "[BP_IS_ROBOTIC(src) ? "": " in shower of gore"]" - var/gore_sound = "[BP_IS_ROBOTIC(src) ? "rending sound of tortured metal" : "sickening splatter of gore"]" - return list( - "\The [owner]'s [src.name] explodes[gore]!", - "Your [src.name] explodes[gore]!", - "You hear the [gore_sound]." - ) - -//Handles dismemberment -/obj/item/organ/external/proc/droplimb(var/clean, var/disintegrate = DROPLIMB_EDGE, var/ignore_children, var/silent) - - if(!(limb_flags & ORGAN_FLAG_CAN_AMPUTATE) || !owner) - return - - if(BP_IS_CRYSTAL(src) || (disintegrate == DROPLIMB_EDGE && species.limbs_are_nonsolid)) - disintegrate = DROPLIMB_BLUNT //splut - - var/list/organ_msgs = get_droplimb_messages_for(disintegrate, clean) - if(LAZYLEN(organ_msgs) >= 3) - owner.visible_message("[organ_msgs[1]]", \ - "[organ_msgs[2]]", \ - "[organ_msgs[3]]") - - var/mob/living/carbon/human/victim = owner //Keep a reference for post-removed(). - var/obj/item/organ/external/original_parent = parent - - var/use_flesh_colour = species.get_flesh_colour(owner) - var/use_blood_colour = species.get_blood_colour(owner) - - add_pain(60) - if(!clean) - victim.shock_stage += min_broken_damage - - removed(null, ignore_children) - if(QDELETED(src)) - return - - if(original_parent) - var/datum/wound/lost_limb/W = new (src, disintegrate, clean) - var/obj/item/organ/external/damaged_organ = original_parent - if(!clean) - var/obj/item/organ/external/stump/stump = new (victim, 0, src) - stump.add_pain(max_damage) - damaged_organ = stump - if(disintegrate != DROPLIMB_BURN) - stump.sever_artery() - W.parent_organ = damaged_organ - LAZYADD(damaged_organ.wounds, W) - damaged_organ.update_damages() - - spawn(1) - victim.updatehealth() - victim.UpdateDamageIcon() - victim.regenerate_icons() - dir = 2 - - switch(disintegrate) - if(DROPLIMB_EDGE) - compile_icon() - add_blood(victim) - SetTransform(rotation = rand(180)) - forceMove(get_turf(src)) - if(!clean) - // Throw limb around. - if(src && istype(loc,/turf)) - throw_at(get_edge_target_turf(src,pick(GLOB.alldirs)),rand(1,3),30) - dir = 2 - // infinity code start - if(!clean) - playsound(victim, pick('sound/effects/gore/chop2.ogg', 'sound/effects/gore/chop3.ogg', 'sound/effects/gore/chop4.ogg'), 100, 0) - else - playsound(victim, 'sound/effects/gore/severed.ogg', 100, 0) - - if(victim.can_feel_pain() && prob(50)) - victim.agony_scream() - // infinity code end - if(DROPLIMB_BURN) - new /obj/effect/decal/cleanable/ash(get_turf(victim)) - for(var/obj/item/I in src) - if(I.w_class > ITEM_SIZE_SMALL && !istype(I,/obj/item/organ)) - I.dropInto(loc) - - if(victim.can_feel_pain() && prob(50)) // inf-dev - victim.agony_scream() - - qdel(src) - if(DROPLIMB_BLUNT) - var/obj/gore - if(BP_IS_CRYSTAL(src)) - gore = new /obj/item/material/shard(get_turf(victim), MATERIAL_CRYSTAL) - else if(BP_IS_ROBOTIC(src)) - gore = new /obj/effect/decal/cleanable/blood/gibs/robot(get_turf(victim)) - else - gore = new /obj/effect/decal/cleanable/blood/gibs(get_turf(victim)) - if(species) - var/obj/effect/decal/cleanable/blood/gibs/G = gore - G.fleshcolor = use_flesh_colour - G.basecolor = use_blood_colour - G.update_icon() - // infinity code start - playsound(victim, 'sound/effects/gore/chop6.ogg', 100 , 0)//Splat. - - if(victim.can_feel_pain() && prob(50)) - victim.agony_scream() - // infinity code end - gore.throw_at(get_edge_target_turf(src,pick(GLOB.alldirs)),rand(1,3),30) - - for(var/obj/item/organ/I in internal_organs) - I.removed() - if(!QDELETED(I) && isturf(loc)) - I.throw_at(get_edge_target_turf(src,pick(GLOB.alldirs)),rand(1,3),30) - - for(var/obj/item/I in src) - I.dropInto(loc) - I.throw_at(get_edge_target_turf(src,pick(GLOB.alldirs)),rand(1,3),30) - - qdel(src) - -/**************************************************** - HELPERS -****************************************************/ - -/obj/item/organ/external/proc/is_stump() - return 0 - -/obj/item/organ/external/proc/release_restraints(var/mob/living/carbon/human/holder) - if(!holder) - holder = owner - if(!holder) - return - if (holder.handcuffed && (body_part in list(ARM_LEFT, ARM_RIGHT, HAND_LEFT, HAND_RIGHT))) - holder.visible_message(\ - "\The [holder.handcuffed.name] falls off of [holder.name].",\ - "\The [holder.handcuffed.name] falls off you.") - holder.drop_from_inventory(holder.handcuffed) - -// checks if all wounds on the organ are bandaged -/obj/item/organ/external/proc/is_bandaged() - for(var/datum/wound/W in wounds) - if(!W.bandaged) - return 0 - return 1 - -// checks if all wounds on the organ are salved -/obj/item/organ/external/proc/is_salved() - for(var/datum/wound/W in wounds) - if(!W.salved) - return 0 - return 1 - -// checks if all wounds on the organ are disinfected -/obj/item/organ/external/proc/is_disinfected() - for(var/datum/wound/W in wounds) - if(!W.disinfected) - return 0 - return 1 - -/obj/item/organ/external/proc/bandage() - var/rval = 0 - status &= ~ORGAN_BLEEDING - for(var/datum/wound/W in wounds) - rval |= !W.bandaged - W.bandaged = 1 - if(rval) - owner.update_surgery() - return rval - -/obj/item/organ/external/proc/salve() - var/rval = 0 - for(var/datum/wound/W in wounds) - rval |= !W.salved - W.salved = 1 - return rval - -/obj/item/organ/external/proc/disinfect() - var/rval = 0 - for(var/datum/wound/W in wounds) - rval |= !W.disinfected - W.disinfected = 1 - W.germ_level = 0 - return rval - -/obj/item/organ/external/proc/clamp_organ() - var/rval = 0 - src.status &= ~ORGAN_BLEEDING - for(var/datum/wound/W in wounds) - rval |= !W.clamped - W.clamped = 1 - return rval - -/obj/item/organ/external/proc/clamped() - for(var/datum/wound/W in wounds) - if(W.clamped) - return 1 - -/obj/item/organ/external/proc/remove_clamps() - var/rval = 0 - for(var/datum/wound/W in wounds) - rval |= W.clamped - W.clamped = 0 - return rval - -// open incisions and expose implants -// this is the retract step of surgery -/obj/item/organ/external/proc/open_incision() - var/datum/wound/W = get_incision() - if(!W) return - W.open_wound(min(W.damage * 2, W.damage_list[1] - W.damage)) - - if(!encased) - for(var/obj/item/implant/I in implants) - I.exposed() - -/obj/item/organ/external/proc/fracture() - if(!config.bones_can_break) - return - if(BP_IS_ROBOTIC(src)) - return //ORGAN_BROKEN doesn't have the same meaning for robot limbs - if((status & ORGAN_BROKEN) || !(limb_flags & ORGAN_FLAG_CAN_BREAK)) - return - - if(owner) - owner.visible_message(\ - "You hear a loud cracking sound coming from \the [owner].",\ - "Something feels like it shattered in your [name]!",\ - "You hear a sickening crack.") - jostle_bone() - if(can_feel_pain()) - //INF owner.emote("scream") - owner.agony_scream() //INF - - playsound(src.loc, pick(GLOB.trauma_sound), 100, 1, -2) //INF -// playsound(src.loc, "fracture", 100, 1, -2) - status |= ORGAN_BROKEN - broken_description = pick("broken","fracture","hairline fracture") - - // Fractures have a chance of getting you out of restraints - if (prob(25)) - release_restraints() - - // This is mostly for the ninja suit to stop ninja being so crippled by breaks. - // TODO: consider moving this to a suit proc or process() or something during - // hardsuit rewrite. - if(!splinted && owner && istype(owner.wear_suit, /obj/item/clothing/suit/space/rig)) - var/obj/item/clothing/suit/space/rig/suit = owner.wear_suit - suit.handle_fracture(owner, src) - -/obj/item/organ/external/proc/mend_fracture() - if(BP_IS_ROBOTIC(src)) - return 0 //ORGAN_BROKEN doesn't have the same meaning for robot limbs - if(brute_dam > min_broken_damage * config.organ_health_multiplier) - return 0 //will just immediately fracture again - - status &= ~ORGAN_BROKEN - return 1 - -/obj/item/organ/external/proc/apply_splint(var/atom/movable/splint) - if(!splinted) - splinted = splint - if(!applied_pressure) - applied_pressure = splint - return 1 - return 0 - -/obj/item/organ/external/proc/remove_splint() - if(splinted) - if(splinted.loc == src) - splinted.dropInto(owner? owner.loc : src.loc) - if(applied_pressure == splinted) - applied_pressure = null - splinted = null - return 1 - return 0 - -/obj/item/organ/external/robotize(var/company, var/skip_prosthetics = 0, var/keep_organs = 0) - - if(BP_IS_ROBOTIC(src)) - return - - ..() - - - if(company) - var/datum/robolimb/R = all_robolimbs[company] - if(!istype(R) || (species && (species.name in R.species_cannot_use)) || \ - (species && !(species.get_bodytype(owner) in R.allowed_bodytypes)) || \ - (R.applies_to_part.len && !(organ_tag in R.applies_to_part))) - R = basic_robolimb - else - model = company - force_icon = R.icon - name = "robotic [initial(name)]" - desc = "[R.desc] It looks like it was produced by [R.company]." - - dislocated = -1 - remove_splint() - update_icon(1) - unmutate() - - slowdown = 0 - - for(var/obj/item/organ/external/T in children) - T.robotize(company, 1) - - if(owner) - - if(!skip_prosthetics) - owner.full_prosthetic = null // Will be rechecked next isSynthetic() call. - - if(!keep_organs) - for(var/obj/item/organ/thing in internal_organs) - if(istype(thing)) - if(thing.vital || BP_IS_ROBOTIC(thing)) - continue - internal_organs -= thing - owner.internal_organs_by_name[thing.organ_tag] = null - owner.internal_organs_by_name -= thing.organ_tag - owner.internal_organs.Remove(thing) - qdel(thing) - - while(null in owner.internal_organs) - owner.internal_organs -= null - - return 1 - -/obj/item/organ/external/proc/get_damage() //returns total damage - return (brute_dam+burn_dam) //could use max_damage? - -/obj/item/organ/external/proc/has_infected_wound() - for(var/datum/wound/W in wounds) - if(W.germ_level > INFECTION_LEVEL_ONE) - return 1 - return 0 - -/obj/item/organ/external/is_usable() - return ..() && !is_stump() && !(status & ORGAN_TENDON_CUT) && (!can_feel_pain() || get_pain() < pain_disability_threshold) && brute_ratio < 1 && burn_ratio < 1 - -/obj/item/organ/external/proc/is_malfunctioning() - return (BP_IS_ROBOTIC(src) && (brute_dam + burn_dam) >= 10 && prob(brute_dam + burn_dam)) - -/obj/item/organ/external/proc/embed(var/obj/item/W, var/silent = 0, var/supplied_message, var/datum/wound/supplied_wound) - if(!owner || loc != owner) - return - if(species.species_flags & SPECIES_FLAG_NO_EMBED) - return - if(!silent) - if(supplied_message) - owner.visible_message("[supplied_message]") - else - owner.visible_message("\The [W] sticks in the wound!") - - if(!supplied_wound) - for(var/datum/wound/wound in wounds) - if ((wound.damage_type == INJURY_TYPE_CUT || wound.damage_type == INJURY_TYPE_PIERCE) && wound.damage >= W.w_class * 5) - supplied_wound = wound - break - if(!supplied_wound) - supplied_wound = createwound(INJURY_TYPE_PIERCE, W.w_class * 5) - - if(!supplied_wound || (W in supplied_wound.embedded_objects)) // Just in case. - return - - LAZYADD(supplied_wound.embedded_objects, W) - implants += W - owner.embedded_flag = 1 - owner.verbs += /mob/proc/yank_out_object - W.add_blood(owner) - if(ismob(W.loc)) - var/mob/living/H = W.loc - H.drop_from_inventory(W) - W.forceMove(owner) - -/obj/item/organ/external/removed(var/mob/living/user, var/ignore_children = 0) - - if(!owner) - return - - if(limb_flags & ORGAN_FLAG_CAN_GRASP) owner.grasp_limbs -= src - if(limb_flags & ORGAN_FLAG_CAN_STAND) owner.stance_limbs -= src - - switch(body_part) - if(FOOT_LEFT, FOOT_RIGHT) - owner.drop_from_inventory(owner.shoes) - if(HAND_LEFT, HAND_RIGHT) - owner.drop_from_inventory(owner.gloves) - if(HEAD) - owner.drop_from_inventory(owner.glasses) - if(istype(owner.wear_suit,/obj/item/clothing/suit/space/void)) - var/obj/item/clothing/suit/space/void/S = owner.wear_suit - S.helmet = null - owner.head?.canremove = 1 - owner.drop_from_inventory(owner.head) - owner.drop_from_inventory(owner.l_ear) - owner.drop_from_inventory(owner.r_ear) - owner.drop_from_inventory(owner.wear_mask) - - var/mob/living/carbon/human/victim = owner - var/is_robotic = BP_IS_ROBOTIC(src) - - ..() - - victim.bad_external_organs -= src - - remove_splint() - for(var/atom/movable/implant in implants) - //large items and non-item objs fall to the floor, everything else stays - var/obj/item/I = implant - if(istype(I) && I.w_class < ITEM_SIZE_NORMAL) - implant.forceMove(src) - - // let actual implants still inside know they're no longer implanted - if(istype(I, /obj/item/implant)) - var/obj/item/implant/imp_device = I - imp_device.removed() - else - implants.Remove(implant) - implant.forceMove(get_turf(src)) - - // Attached organs also fly off. - if(!ignore_children) - for(var/obj/item/organ/external/O in children) - O.removed() - if(!QDELETED(O)) - O.forceMove(src) - - // if we didn't lose the organ we still want it as a child - children += O - O.parent = src - - // Grab all the internal giblets too. - for(var/obj/item/organ/organ in internal_organs) - organ.removed(user, 0, 0) // Organ stays inside and connected - if(!QDELETED(organ)) - organ.forceMove(src) - - // Remove parent references - if(parent) - parent.children -= src - parent = null - - if(!is_robotic) - status |= ORGAN_CUT_AWAY - - release_restraints(victim) - victim.organs -= src - victim.organs_by_name[organ_tag] = null // Remove from owner's vars. - victim.organs_by_name -= organ_tag - - //Robotic limbs explode if sabotaged. - if(is_robotic && (status & ORGAN_SABOTAGED)) - victim.visible_message( - "\The [victim]'s [src.name] explodes violently!",\ - "Your [src.name] explodes!",\ - "You hear an explosion!") - explosion(get_turf(owner),-1,-1,2,3) - var/datum/effect/effect/system/spark_spread/spark_system = new /datum/effect/effect/system/spark_spread() - spark_system.set_up(5, 0, victim) - spark_system.attach(owner) - spark_system.start() - spawn(10) - qdel(spark_system) - qdel(src) - else if(is_stump()) - qdel(src) - -/obj/item/organ/external/proc/disfigure(var/type = INJURY_TYPE_BRUISE) - if(status & ORGAN_DISFIGURED) - return - if(owner) - if (type == INJURY_TYPE_BRUISE) - owner.visible_message("You hear a sickening cracking sound coming from \the [owner]'s [name].", \ - "Your [name] becomes a mangled mess!", \ - "You hear a sickening crack.") - else if (type == INJURY_TYPE_BURN) - owner.visible_message("\The [owner]'s [name] melts away, turning into mangled mess!", \ - "Your [name] melts away!", \ - "You hear a sickening sizzle.") - status |= ORGAN_DISFIGURED - -/obj/item/organ/external/proc/get_incision(var/strict) - - var/datum/wound/incision - if(BP_IS_CRYSTAL(src)) - for(var/datum/wound/shatter/other in wounds) - if(!incision || incision.damage < other.damage) - incision = other - else - for(var/datum/wound/cut/W in wounds) - if(W.bandaged || W.current_stage > W.max_bleeding_stage) // Shit's unusable - continue - if(strict && !W.is_surgical()) //We don't need dirty ones - continue - if(!incision) - incision = W - continue - var/same = W.is_surgical() == incision.is_surgical() - if(same) //If they're both dirty or both are surgical, just get bigger one - if(W.damage > incision.damage) - incision = W - else if(W.is_surgical()) //otherwise surgical one takes priority - incision = W - return incision - -/obj/item/organ/external/proc/how_open() - . = 0 - var/datum/wound/incision = get_incision() - if(incision) - if(BP_IS_CRYSTAL(src)) - . = SURGERY_RETRACTED - if(encased && (status & ORGAN_BROKEN)) - . = SURGERY_ENCASED - else - var/smol_threshold = min_broken_damage * 0.4 - var/beeg_threshold = min_broken_damage * 0.6 - if(!incision.autoheal_cutoff == 0) //not clean incision - smol_threshold *= 1.5 - beeg_threshold = max(beeg_threshold, min(beeg_threshold * 1.5, incision.damage_list[1])) //wounds can't achieve bigger - if(incision.damage >= smol_threshold) //smol incision - . = SURGERY_OPEN - if(incision.damage >= beeg_threshold) //beeg incision - . = SURGERY_RETRACTED - if(. == SURGERY_RETRACTED && encased && (status & ORGAN_BROKEN)) - . = SURGERY_ENCASED - -/obj/item/organ/external/proc/jostle_bone(force) - if(!(status & ORGAN_BROKEN)) //intact bones stay still - return - if(brute_dam + force < min_broken_damage/5) //no papercuts moving bones - return - if(internal_organs.len && prob(brute_dam + force)) - owner.custom_pain("A piece of bone in your [encased ? encased : name] moves painfully!", 50, affecting = src) - var/obj/item/organ/internal/I = pick(internal_organs) - if (I) - I.take_internal_damage(rand(3,5)) - -/obj/item/organ/external/proc/jointlock(mob/attacker) - if(!can_feel_pain()) - return - - var/armor = 100 * owner.get_blocked_ratio(owner, DAMAGE_BRUTE, damage = 30) - if(armor < 70) - to_chat(owner, "You feel extreme pain!") - - var/max_halloss = round(owner.species.total_health * 0.8 * ((100 - armor) / 100)) //up to 80% of passing out, further reduced by armour - add_pain(clamp(0, max_halloss - owner.getHalLoss(), 30)) - -//Adds autopsy data for used_weapon. -/obj/item/organ/external/proc/add_autopsy_data(var/used_weapon, var/damage) - var/datum/autopsy_data/W = autopsy_data[used_weapon] - if(!W) - W = new() - W.weapon = used_weapon - autopsy_data[used_weapon] = W - - W.hits += 1 - W.damage += damage - W.time_inflicted = world.time - -/obj/item/organ/external/proc/has_genitals() - return !BP_IS_ROBOTIC(src) && species && species.sexybits_location == organ_tag - -// Added to the mob's move delay tally if this organ is being used to move with. -/obj/item/organ/external/proc/movement_delay(max_delay) - . = 0 - if(is_stump()) - . += max_delay - else if(splinted) - . += max_delay/8 - else if(status & ORGAN_BROKEN) - . += max_delay * 3/8 - else if(BP_IS_ROBOTIC(src)) - . += max_delay * CLAMP01(damage/max_damage) diff --git a/code/modules/organs/external/_external_damage.dm b/code/modules/organs/external/_external_damage.dm deleted file mode 100644 index 091e16b0a4b10..0000000000000 --- a/code/modules/organs/external/_external_damage.dm +++ /dev/null @@ -1,389 +0,0 @@ -/**************************************************** - DAMAGE PROCS -****************************************************/ - -/obj/item/organ/external/proc/is_damageable(var/additional_damage = 0) - //Continued damage to vital organs can kill you, and robot organs don't count towards total damage so no need to cap them. - return (BP_IS_ROBOTIC(src) || brute_dam + burn_dam + additional_damage < max_damage * 4) - -/obj/item/organ/external/take_general_damage(var/amount, var/silent = FALSE) - take_external_damage(amount) - -/obj/item/organ/external/proc/take_external_damage(brute, burn, damage_flags, used_weapon = null) - brute = round(brute * get_brute_mod(damage_flags), 0.1) - burn = round(burn * get_burn_mod(damage_flags), 0.1) - - if((brute <= 0) && (burn <= 0)) - return 0 - - var/sharp = (damage_flags & DAMAGE_FLAG_SHARP) - var/edge = (damage_flags & DAMAGE_FLAG_EDGE) - var/laser = (damage_flags & DAMAGE_FLAG_LASER) - var/blunt = !!(brute && !sharp && !edge) - - // Handle some status-based damage multipliers. - if(BP_IS_CRYSTAL(src) && burn && laser) - brute += burn // Stress fracturing from heat! - owner.bodytemperature += burn - burn = 0 - if(prob(25)) - owner.visible_message("\The [owner]'s crystalline [name] shines with absorbed energy!") - - if(used_weapon) - add_autopsy_data("[used_weapon]", brute + burn) - - var/spillover = 0 - var/pure_brute = brute - if(!is_damageable(brute + burn)) - spillover = brute_dam + burn_dam + brute - max_damage - if(spillover > 0) - brute = max(brute - spillover, 0) - else - spillover = brute_dam + burn_dam + brute + burn - max_damage - if(spillover > 0) - burn = max(burn - spillover, 0) - //If limb took enough damage, try to cut or tear it off - if(owner && loc == owner) - owner.updatehealth() //droplimb will call updatehealth() again if it does end up being called - if(!is_stump() && (limb_flags & ORGAN_FLAG_CAN_AMPUTATE) && config.limbs_can_break) - var/total_damage = brute_dam + burn_dam + brute + burn + spillover - var/threshold = max_damage * config.organ_health_multiplier - if(total_damage > threshold) - if(attempt_dismemberment(pure_brute, burn, sharp, edge, used_weapon, spillover, total_damage > threshold*6)) - return - - //blunt damage is gud at fracturing - if(brute_dam + brute > min_broken_damage && prob(brute_dam + brute * (1+blunt)) ) - fracture() - - // High brute damage or sharp objects may damage internal organs - if(LAZYLEN(internal_organs)) - if(damage_internal_organs(brute, burn, damage_flags)) - brute /= 2 - burn /= 2 - - if(status & ORGAN_BROKEN && brute) - jostle_bone(brute) - if(can_feel_pain() && prob(40)) - owner.emote("scream") //getting hit on broken hand hurts - - // If the limbs can break, make sure we don't exceed the maximum damage a limb can take before breaking - var/datum/wound/created_wound - var/block_cut = (species.species_flags & SPECIES_FLAG_NO_MINOR_CUT) && brute <= 15 - var/can_cut = !block_cut && !BP_IS_ROBOTIC(src) && (sharp || prob(brute)) - - if(brute) - var/to_create = INJURY_TYPE_BRUISE - if(can_cut) - to_create = INJURY_TYPE_CUT - //need to check sharp again here so that blunt damage that was strong enough to break skin doesn't give puncture wounds - if(sharp && !edge) - to_create = INJURY_TYPE_PIERCE - created_wound = createwound(to_create, brute) - - if(burn) - if(laser) - createwound(INJURY_TYPE_LASER, burn) - if(prob(40)) - owner.IgniteMob() - else - createwound(INJURY_TYPE_BURN, burn) - - //Initial pain spike - add_pain(0.6*burn + 0.4*brute) - - //Disturb treated burns - if(brute > 5) - var/disturbed = 0 - for(var/datum/wound/burn/W in wounds) - if((W.disinfected || W.salved) && prob(brute + W.damage)) - W.disinfected = 0 - W.salved = 0 - disturbed += W.damage - if(disturbed) - to_chat(owner,"Ow! Your burns were disturbed.") - add_pain(0.5*disturbed) - - //If there are still hurties to dispense - if (spillover) - owner.shock_stage += spillover * config.organ_damage_spillover_multiplier - - // sync the organ's damage with its wounds - update_damages() - owner.updatehealth() - if(status & ORGAN_BLEEDING) - owner.update_bandages() - - if(owner && update_damstate()) - owner.UpdateDamageIcon() - - if(created_wound && isobj(used_weapon)) - var/obj/O = used_weapon - O.after_wounding(src, created_wound) - - return created_wound - -/obj/item/organ/external/proc/damage_internal_organs(brute, burn, damage_flags) - if(!LAZYLEN(internal_organs)) - return FALSE - - var/laser = (damage_flags & DAMAGE_FLAG_LASER) - - var/damage_amt = brute - var/cur_damage = brute_dam - if(laser || BP_IS_ROBOTIC(src)) - damage_amt += burn - cur_damage += burn_dam - - if(!damage_amt) - return FALSE - - var/organ_damage_threshold = 10 - if(damage_flags & DAMAGE_FLAG_SHARP) - organ_damage_threshold *= 0.5 - if(laser) - organ_damage_threshold *= 2 - - if(!(cur_damage + damage_amt >= max_damage) && !(damage_amt >= organ_damage_threshold)) - return FALSE - - var/list/victims = list() - var/organ_hit_chance = 0 - for(var/obj/item/organ/internal/I in internal_organs) - if(I.damage < I.max_damage) - victims[I] = I.relative_size - organ_hit_chance += I.relative_size - - //No damageable organs - if(!length(victims)) - return FALSE - - organ_hit_chance += 5 * damage_amt/organ_damage_threshold - - if(encased && !(status & ORGAN_BROKEN)) //ribs protect - organ_hit_chance *= 0.6 - - organ_hit_chance = min(organ_hit_chance, 100) - if(prob(organ_hit_chance)) - var/obj/item/organ/internal/victim = pickweight(victims) - damage_amt -= max(damage_amt*victim.damage_reduction, 0) - victim.take_internal_damage(damage_amt) - return TRUE - -/obj/item/organ/external/heal_damage(brute, burn, internal = 0, robo_repair = 0) - if(BP_IS_ROBOTIC(src) && !robo_repair) - return - - //Heal damage on the individual wounds - for(var/datum/wound/W in wounds) - if(brute == 0 && burn == 0) - break - - // heal brute damage - if (W.damage_type == INJURY_TYPE_BURN) - burn = W.heal_damage(burn) - else - brute = W.heal_damage(brute) - - if(internal) - status &= ~ORGAN_BROKEN - - //Sync the organ's damage with its wounds - src.update_damages() - owner.updatehealth() - - return update_damstate() - -// Brute/burn -/obj/item/organ/external/proc/get_brute_damage() - return brute_dam - -/obj/item/organ/external/proc/get_burn_damage() - return burn_dam - -// Geneloss/cloneloss. -/obj/item/organ/external/proc/get_genetic_damage() - return ((species && (species.species_flags & SPECIES_FLAG_NO_SCAN)) || BP_IS_ROBOTIC(src)) ? 0 : genetic_degradation - -/obj/item/organ/external/proc/remove_genetic_damage(var/amount) - if((species.species_flags & SPECIES_FLAG_NO_SCAN) || BP_IS_ROBOTIC(src)) - genetic_degradation = 0 - status &= ~ORGAN_MUTATED - return - var/last_gene_dam = genetic_degradation - genetic_degradation = min(100,max(0,genetic_degradation - amount)) - if(genetic_degradation <= 30) - if(status & ORGAN_MUTATED) - unmutate() - to_chat(src, "Your [name] is shaped normally again.") - return -(genetic_degradation - last_gene_dam) - -/obj/item/organ/external/proc/add_genetic_damage(var/amount) - if((species.species_flags & SPECIES_FLAG_NO_SCAN) || BP_IS_ROBOTIC(src)) - genetic_degradation = 0 - status &= ~ORGAN_MUTATED - return - var/last_gene_dam = genetic_degradation - genetic_degradation = min(100,max(0,genetic_degradation + amount)) - if(genetic_degradation > 30) - if(!(status & ORGAN_MUTATED) && prob(genetic_degradation)) - mutate() - to_chat(owner, "Something is not right with your [name]...") - return (genetic_degradation - last_gene_dam) - -/obj/item/organ/external/proc/mutate() - if(BP_IS_ROBOTIC(src)) - return - src.status |= ORGAN_MUTATED - if(owner) owner.update_body() - -/obj/item/organ/external/proc/unmutate() - if(!BP_IS_DEFORMED(src) && !BP_IS_ROBOTIC(src)) - src.status &= ~ORGAN_MUTATED - if(owner) owner.update_body() - -// Pain/halloss -/obj/item/organ/external/proc/get_pain() - if(!can_feel_pain() || BP_IS_ROBOTIC(src)) - return 0 - var/lasting_pain = 0 - if(is_broken()) - lasting_pain += 10 - else if(is_dislocated()) - lasting_pain += 5 - var/tox_dam = 0 - for(var/obj/item/organ/internal/I in internal_organs) - tox_dam += I.getToxLoss() - return pain + lasting_pain + 0.7 * brute_dam + 0.8 * burn_dam + 0.3 * tox_dam + 0.5 * get_genetic_damage() - -/obj/item/organ/external/proc/remove_pain(var/amount) - if(!can_feel_pain()) - pain = 0 - return - var/last_pain = pain - pain = max(0,min(max_damage,pain-amount)) - return -(pain-last_pain) - -/obj/item/organ/external/proc/add_pain(var/amount) - if(!can_feel_pain()) - pain = 0 - return - var/last_pain = pain - if(owner) - amount -= (owner.chem_effects[CE_PAINKILLER]/3) - if(amount <= 0) - return - pain = max(0,min(max_damage,pain+amount)) - if(owner && ((amount > 15 && prob(20)) || (amount > 30 && prob(60)))) - // owner.emote("scream") - owner.agony_scream() // inf-dev - return pain-last_pain - -/obj/item/organ/external/proc/stun_act(var/stun_amount, var/agony_amount) - if(agony_amount && owner && can_feel_pain()) - agony_amount -= (owner.chem_effects[CE_PAINKILLER]/2)//painkillers does wonders! - agony_amount += get_pain() - if(agony_amount < 5) return - - if(limb_flags & ORGAN_FLAG_CAN_GRASP) - if(prob((agony_amount/max_damage)*100)) - owner.grasp_damage_disarm(src) - return 1 - - else if((limb_flags & ORGAN_FLAG_CAN_STAND)) - if(prob((agony_amount/max_damage)*100)) - owner.stance_damage_prone(src) - return 1 - - else if(agony_amount > 0.5 * max_damage) - owner.visible_message("[owner] reels in pain!") - if(agony_amount > max_damage) - owner.Weaken(4) - else - owner.Stun(4) - owner.drop_l_hand() - owner.drop_r_hand() - return 1 - -/obj/item/organ/external/proc/get_agony_multiplier() - return has_genitals() ? 1.5 : 1 - -/obj/item/organ/external/proc/sever_artery() - if(species && species.has_organ[BP_HEART]) - var/obj/item/organ/internal/heart/O = species.has_organ[BP_HEART] - if(!BP_IS_ROBOTIC(src) && !(status & ORGAN_ARTERY_CUT) && !initial(O.open)) - status |= ORGAN_ARTERY_CUT - return TRUE - return FALSE - -/obj/item/organ/external/proc/sever_tendon() - if((limb_flags & ORGAN_FLAG_HAS_TENDON) && !BP_IS_ROBOTIC(src) && !(status & ORGAN_TENDON_CUT)) - status |= ORGAN_TENDON_CUT - return TRUE - return FALSE - -/obj/item/organ/external/proc/get_brute_mod(var/damage_flags) - var/obj/item/organ/internal/augment/armor/A = owner && owner.internal_organs_by_name["[BP_CHEST]_aug_armor"] - var/B = 1 - if(A && istype(A)) - B = A.brute_mult - if(!BP_IS_ROBOTIC(src)) - B *= species.get_brute_mod(owner) - var/blunt = !(damage_flags & DAMAGE_FLAG_EDGE|DAMAGE_FLAG_SHARP) - if(blunt && BP_IS_BRITTLE(src)) - B *= 1.5 - if(BP_IS_CRYSTAL(src)) - B *= 0.8 - return B + (0.2 * burn_dam/max_damage) //burns make you take more brute damage - -/obj/item/organ/external/proc/get_burn_mod(var/damage_flags) - var/obj/item/organ/internal/augment/armor/A = owner && owner.internal_organs_by_name["[BP_CHEST]_aug_armor"] - var/B = 1 - if(A && istype(A)) - B = A.burn_mult - if(!BP_IS_ROBOTIC(src)) - B *= species.get_burn_mod(owner) - if(BP_IS_CRYSTAL(src)) - B *= 0.1 - return B - -//organs can come off in three cases -//1. If the damage source is edge_eligible and the brute damage dealt exceeds the edge threshold, then the organ is cut off. -//2. If the damage amount dealt exceeds the disintegrate threshold, the organ is completely obliterated. -//3. If the organ has already reached or would be put over it's max damage amount (currently redundant), -// and the brute damage dealt exceeds the tearoff threshold, the organ is torn off. -/obj/item/organ/external/proc/attempt_dismemberment(brute, burn, sharp, edge, used_weapon, spillover, force_droplimb) - //Check edge eligibility - var/edge_eligible = 0 - if(edge) - if(istype(used_weapon,/obj/item)) - var/obj/item/W = used_weapon - if(W.w_class >= w_class) - edge_eligible = 1 - else - edge_eligible = 1 - else if(sharp) - brute = 0.5 * brute - if(force_droplimb) - if(burn) - droplimb(0, DROPLIMB_BURN) - else if(brute) - droplimb(0, edge_eligible ? DROPLIMB_EDGE : DROPLIMB_BLUNT) - return TRUE - - if(edge_eligible && brute >= max_damage / DROPLIMB_THRESHOLD_EDGE) - if(prob(brute)) - droplimb(0, DROPLIMB_EDGE) - return TRUE - else if(burn >= max_damage / DROPLIMB_THRESHOLD_DESTROY) - if(prob(burn/3)) - droplimb(0, DROPLIMB_BURN) - return TRUE - else if(brute >= max_damage / DROPLIMB_THRESHOLD_DESTROY) - if(prob(brute)) - droplimb(0, DROPLIMB_BLUNT) - return TRUE - else if(brute >= max_damage / DROPLIMB_THRESHOLD_TEAROFF) - if(prob(brute/3)) - droplimb(0, DROPLIMB_EDGE) - return TRUE diff --git a/code/modules/organs/external/_external_icons.dm b/code/modules/organs/external/_external_icons.dm deleted file mode 100644 index 6dbe669127c41..0000000000000 --- a/code/modules/organs/external/_external_icons.dm +++ /dev/null @@ -1,218 +0,0 @@ -var/global/list/limb_icon_cache = list() - -/obj/item/organ/external/set_dir() - return - -/obj/item/organ/external/proc/compile_icon() - overlays.Cut() - // This is a kludge, only one icon has more than one generation of children though. - for(var/obj/item/organ/external/organ in contents) - if(organ.children && organ.children.len) - for(var/obj/item/organ/external/child in organ.children) - overlays += child.mob_icon - overlays += organ.mob_icon - -/obj/item/organ/external/proc/sync_colour_to_human(var/mob/living/carbon/human/human) - skin_tone = null - s_col = null - base_skin = "" - h_col = rgb2num(human.head_hair_color) - if(BP_IS_ROBOTIC(src) && !(human.species.appearance_flags & HAS_BASE_SKIN_COLOURS)) - var/datum/robolimb/franchise = all_robolimbs[model] - if(!(franchise && franchise.skintone)) - return - if(species && human.species && species.name != human.species.name) - return - if(!isnull(human.skin_tone) && (human.species.appearance_flags & HAS_A_SKIN_TONE)) - skin_tone = human.skin_tone - if(!isnull(human.base_skin) && (human.species.appearance_flags & HAS_BASE_SKIN_COLOURS)) - base_skin = human.base_skin - if(human.species.appearance_flags & HAS_SKIN_COLOR) - s_col = rgb2num(human.skin_color) - -/obj/item/organ/external/proc/sync_colour_to_dna() - skin_tone = null - s_col = null - base_skin = dna.base_skin - h_col = list(dna.GetUIValue(DNA_UI_HAIR_R),dna.GetUIValue(DNA_UI_HAIR_G),dna.GetUIValue(DNA_UI_HAIR_B)) - if(BP_IS_ROBOTIC(src)) - var/datum/robolimb/franchise = all_robolimbs[model] - if(!(franchise && franchise.skintone)) - return - if(!isnull(dna.GetUIValue(DNA_UI_SKIN_TONE)) && (species.appearance_flags & HAS_A_SKIN_TONE)) - skin_tone = dna.GetUIValue(DNA_UI_SKIN_TONE) - if(species.appearance_flags & HAS_SKIN_COLOR) - s_col = list(dna.GetUIValue(DNA_UI_SKIN_R), dna.GetUIValue(DNA_UI_SKIN_G), dna.GetUIValue(DNA_UI_SKIN_B)) - -/obj/item/organ/external/head/sync_colour_to_human(var/mob/living/carbon/human/human) - ..() - var/obj/item/organ/internal/eyes/eyes = owner.internal_organs_by_name[BP_EYES] - if(eyes) eyes.update_colour() - -/obj/item/organ/external/head/removed() - update_icon(1) - if(owner) - SetName("[owner.real_name]'s head") - addtimer(CALLBACK(owner, /mob/living/carbon/human/proc/update_hair), 1, TIMER_UNIQUE) - ..() - - var/list/sorted = list() - for(var/E in markings) - var/datum/sprite_accessory/marking/M = E - if (M.draw_target == MARKING_TARGET_SKIN) - var/color = markings[E] - var/state = M.icon_state - if (M.use_organ_tag) - state = "[state]-[organ_tag]" - var/icon/I = icon(M.icon, state) - I.Blend(color, M.blend) - icon_cache_key += "[M.name][color]" - ADD_SORTED(sorted, list(list(M.draw_order, I, M)), /proc/cmp_marking_order) - for (var/entry in sorted) - overlays |= entry[2] - mob_icon.Blend(entry[2], entry[3]["layer_blend"]) - -/obj/item/organ/external/var/icon_cache_key -/obj/item/organ/external/on_update_icon(var/regenerate = 0) - var/gender = "_m" - if(!(limb_flags & ORGAN_FLAG_GENDERED_ICON)) - gender = null - else if (dna && dna.GetUIState(DNA_UI_GENDER)) - gender = "_f" - else if(owner && owner.gender == FEMALE) - gender = "_f" - - icon_state = "[icon_name][gender]" - if(species.base_skin_colours && !isnull(species.base_skin_colours[base_skin])) - icon_state += species.base_skin_colours[base_skin] - - icon_cache_key = "[icon_state]_[species ? species.name : SPECIES_HUMAN]" - - if(force_icon) - icon = force_icon - else if (BP_IS_ROBOTIC(src)) - icon = 'icons/mob/human_races/cyberlimbs/robotic.dmi' - else if (!dna) - icon = 'icons/mob/human_races/species/human/body.dmi' - else if (status & ORGAN_MUTATED) - icon = species.deform - else if (owner && (MUTATION_SKELETON in owner.mutations)) - icon = 'icons/mob/human_races/species/human/skeleton.dmi' - else - icon = species.get_icobase(owner) - - mob_icon = apply_colouration(new/icon(icon, icon_state)) - - var/list/sorted = list() - for(var/E in markings) - var/datum/sprite_accessory/marking/M = E - if (M.draw_target == MARKING_TARGET_SKIN) - var/color = markings[E] - var/state = M.icon_state - if (M.use_organ_tag) - state = "[state]-[organ_tag]" - var/icon/I = icon(M.icon, state) - I.Blend(color, M.blend) - icon_cache_key += "[M.name][color]" - ADD_SORTED(sorted, list(list(M.draw_order, I, M)), /proc/cmp_marking_order) - for (var/entry in sorted) - overlays |= entry[2] - mob_icon.Blend(entry[2], entry[3]["layer_blend"]) - - if(body_hair && islist(h_col) && h_col.len >= 3) - var/cache_key = "[body_hair]-[icon_name]-[h_col[1]][h_col[2]][h_col[3]]" - if(!limb_icon_cache[cache_key]) - var/icon/I = icon(species.get_icobase(owner), "[icon_name]_[body_hair]") - I.Blend(rgb(h_col[1],h_col[2],h_col[3]), ICON_ADD) - limb_icon_cache[cache_key] = I - mob_icon.Blend(limb_icon_cache[cache_key], ICON_OVERLAY) - - if(model) - icon_cache_key += "_model_[model]" - dir = EAST - icon = mob_icon - -/obj/item/organ/external/proc/get_icon() - update_icon() - return mob_icon - -// Returns an image for use by the human health dolly HUD element. -// If the limb is in pain, it will be used as a minimum damage -// amount to represent the obfuscation of being in agonizing pain. - -// Global scope, used in code below. -var/global/list/flesh_hud_colours = list("#00ff00","#aaff00","#ffff00","#ffaa00","#ff0000","#aa0000","#660000") -var/global/list/robot_hud_colours = list("#ffffff","#cccccc","#aaaaaa","#888888","#666666","#444444","#222222","#000000") - -/obj/item/organ/external/proc/get_damage_hud_image() - - // Generate the greyscale base icon and cache it for later. - // icon_cache_key is set by any get_icon() calls that are made. - // This looks convoluted, but it's this way to avoid icon proc calls. - if(!hud_damage_image) - var/cache_key = "dambase-[icon_cache_key]" - if(!icon_cache_key || !limb_icon_cache[cache_key]) - limb_icon_cache[cache_key] = icon(get_icon(), null, SOUTH) - var/image/temp = image(limb_icon_cache[cache_key]) - if(species) - // Calculate the required colour matrix. - var/r = 0.30 * species.health_hud_intensity - var/g = 0.59 * species.health_hud_intensity - var/b = 0.11 * species.health_hud_intensity - temp.color = list(r, r, r, g, g, g, b, b, b) - temp.pixel_x = owner.default_pixel_x - temp.pixel_y = owner.default_pixel_y - hud_damage_image = image(null) - hud_damage_image.overlays += temp - - // Calculate the required color index. - var/dam_state = min(1,((brute_dam+burn_dam)/max(1,max_damage))) - var/min_dam_state = min(1,(get_pain()/max(1,max_damage))) - if(min_dam_state && dam_state < min_dam_state) - dam_state = min_dam_state - // Apply colour and return product. - var/list/hud_colours = !BP_IS_ROBOTIC(src) ? flesh_hud_colours : robot_hud_colours - hud_damage_image.color = hud_colours[max(1,min(Ceil(dam_state*hud_colours.len),hud_colours.len))] - return hud_damage_image - -/obj/item/organ/external/proc/apply_colouration(var/icon/applying) - - if(species.limbs_are_nonsolid) - applying.MapColors("#4d4d4d","#969696","#1c1c1c", "#000000") - if(species && species.get_bodytype(owner) != SPECIES_HUMAN) - applying.SetIntensity(1.5) - else - applying.SetIntensity(0.7) - applying += rgb(,,,180) // Makes the icon translucent, SO INTUITIVE TY BYOND - - else if(status & ORGAN_DEAD) - icon_cache_key += "_dead" - applying.ColorTone(rgb(10,50,0)) - applying.SetIntensity(0.7) - - if(skin_tone) - if(skin_tone >= 0) - applying.Blend(rgb(skin_tone, skin_tone, skin_tone), ICON_ADD) - else - applying.Blend(rgb(-skin_tone, -skin_tone, -skin_tone), ICON_SUBTRACT) - icon_cache_key += "_tone_[skin_tone]" - if(species.appearance_flags & HAS_SKIN_COLOR) - if(s_col && s_col.len >= 3) - applying.Blend(rgb(s_col[1], s_col[2], s_col[3]), s_col_blend) - icon_cache_key += "_color_[s_col[1]]_[s_col[2]]_[s_col[3]]_[s_col_blend]" - - return applying - -/obj/item/organ/external/proc/bandage_level() - if(damage_state_text() == "00") - return 0 - if(!is_bandaged()) - return 0 - if(burn_dam + brute_dam == 0) - . = 0 - else if (burn_dam + brute_dam < (max_damage * 0.25 / 2)) - . = 1 - else if (burn_dam + brute_dam < (max_damage * 0.75 / 2)) - . = 2 - else - . = 3 diff --git a/code/modules/organs/external/diagnostics.dm b/code/modules/organs/external/diagnostics.dm deleted file mode 100644 index dfdfe3a81c248..0000000000000 --- a/code/modules/organs/external/diagnostics.dm +++ /dev/null @@ -1,236 +0,0 @@ - -/obj/item/organ/external/proc/get_wounds_desc() - if(BP_IS_ROBOTIC(src)) - var/list/descriptors = list() - if(brute_dam) - switch(brute_dam) - if(0 to 20) - descriptors += "some dents" - if(21 to INFINITY) - descriptors += pick("a lot of dents","severe denting") - if(burn_dam) - switch(burn_dam) - if(0 to 20) - descriptors += "some burns" - if(21 to INFINITY) - descriptors += pick("a lot of burns","severe melting") - switch(hatch_state) - if(HATCH_UNSCREWED) - descriptors += "a closed but unsecured panel" - if(HATCH_OPENED) - descriptors += "an open panel" - - return english_list(descriptors) - - var/list/flavor_text = list() - if((status & ORGAN_CUT_AWAY) && !is_stump() && !(parent && parent.status & ORGAN_CUT_AWAY)) - flavor_text += "a tear at the [amputation_point] so severe that it hangs by a scrap of flesh" - - var/list/wound_descriptors = list() - for(var/datum/wound/W in wounds) - var/this_wound_desc = W.desc - if (W.damage_type == INJURY_TYPE_BURN && W.salved) - this_wound_desc = "salved [this_wound_desc]" - - if(W.bleeding()) - if(W.wound_damage() > W.bleed_threshold) - this_wound_desc = "bleeding [this_wound_desc]" - else - this_wound_desc = "bleeding [this_wound_desc]" - else if(W.bandaged) - this_wound_desc = "bandaged [this_wound_desc]" - - if(W.germ_level > 600) - this_wound_desc = "badly infected [this_wound_desc]" - else if(W.germ_level > 330) - this_wound_desc = "lightly infected [this_wound_desc]" - - if(wound_descriptors[this_wound_desc]) - wound_descriptors[this_wound_desc] += W.amount - else - wound_descriptors[this_wound_desc] = W.amount - - if(how_open() >= SURGERY_RETRACTED) - var/bone = encased ? encased : "bone" - if(status & ORGAN_BROKEN) - bone = "broken [bone]" - wound_descriptors["a [bone] exposed"] = 1 - - if(!encased || how_open() >= SURGERY_ENCASED) - var/list/bits = list() - for(var/obj/item/organ/internal/organ in internal_organs) - bits += organ.get_visible_state() - for(var/obj/item/implant in implants) - bits += implant.name - if(bits.len) - wound_descriptors["[english_list(bits)] visible in the wounds"] = 1 - - for(var/wound in wound_descriptors) - switch(wound_descriptors[wound]) - if(1) - flavor_text += "a [wound]" - if(2) - flavor_text += "a pair of [wound]s" - if(3 to 5) - flavor_text += "several [wound]s" - if(6 to INFINITY) - flavor_text += "a ton of [wound]\s" - - return english_list(flavor_text) - -/obj/item/organ/external/get_scan_results() - . = ..() - if(status & ORGAN_ARTERY_CUT) - . += "[capitalize(artery_name)] ruptured" - if(status & ORGAN_TENDON_CUT) - . += "Severed [tendon_name]" - if(dislocated >= 1) // non-magical constants when - . += "Dislocated" - if(splinted) - . += "Splinted" - if(status & ORGAN_BLEEDING) - . += "Bleeding" - if(status & ORGAN_BROKEN) - . += capitalize(broken_description) - if (implants && implants.len) - var/unknown_body = 0 - for(var/I in implants) - var/obj/item/implant/imp = I - if(istype(I,/obj/item/implant)) - if(imp.hidden) - continue - if (imp.known) - . += "[capitalize(imp.name)] implanted" - continue - unknown_body++ - if(unknown_body) - . += "Unknown body present" - for (var/obj/item/organ/internal/augment/aug in internal_organs) - if (aug.augment_flags & AUGMENT_SCANNABLE) - . += "[capitalize(aug.name)] implanted" - -/obj/item/organ/external/proc/inspect(mob/user) - if(is_stump()) - to_chat(user, "[owner] is missing that bodypart.") - return - - user.visible_message("[user] starts inspecting [owner]'s [name] carefully.") - if(LAZYLEN(wounds)) - to_chat(user, "You find [get_wounds_desc()]") - var/list/stuff = list() - for(var/datum/wound/wound in wounds) - if(LAZYLEN(wound.embedded_objects)) - stuff |= wound.embedded_objects - if(stuff.len) - to_chat(user, "There's [english_list(stuff)] sticking out of [owner]'s [name].") - else - to_chat(user, "You find no visible wounds.") - - to_chat(user, "Checking skin now...") - if(!do_after(user, 1 SECOND, owner, DO_DEFAULT | DO_USER_UNIQUE_ACT | DO_PUBLIC_PROGRESS)) - return - - var/list/badness = list() - var/list/symptoms = decls_repository.get_decls_of_subtype(/decl/diagnostic_sign) - for(var/S in symptoms) - var/decl/diagnostic_sign/sign = symptoms[S] - if(sign.manifested_in(src)) - badness += sign.get_description(user) - if(!badness.len) - to_chat(user, "[owner]'s skin is normal.") - else - to_chat(user, "[owner]'s skin is [english_list(badness)].") - - to_chat(user, "Checking bones now...") - if(!do_after(user, 1 SECOND, owner, DO_DEFAULT | DO_USER_UNIQUE_ACT | DO_PUBLIC_PROGRESS)) - return - - if(status & ORGAN_BROKEN) - to_chat(user, "The [encased ? encased : "bone in the [name]"] moves slightly when you poke it!") - owner.custom_pain("Your [name] hurts where it's poked.",40, affecting = src) - else - to_chat(user, "The [encased ? encased : "bones in the [name]"] seem to be fine.") - - for (var/obj/item/organ/internal/augment/A in internal_organs) // Locate any non-concealed augments - if (A.augment_flags & AUGMENT_INSPECTABLE) - to_chat(user, SPAN_WARNING("You feel a foreign object inside of \the [owner]'s [name]!")) - owner.custom_pain("Your [name] hurts as your [A.name] is jostled inside it.", 20, affecting = src) - break - if(status & ORGAN_TENDON_CUT) - to_chat(user, "The tendons in [name] are severed!") - if(dislocated >= 1) - to_chat(user, "The [joint] is dislocated!") - return 1 - -/obj/item/organ/external/listen() - var/list/sounds = list() - for(var/obj/item/organ/internal/I in internal_organs) - var/gutsound = I.listen() - if(gutsound) - sounds += gutsound - if(!sounds.len) - if(owner.pulse()) - sounds += "faint pulse" - return sounds - -/decl/diagnostic_sign - var/name = "Some symptom" - var/descriptor - var/explanation - var/hint_min_skill = SKILL_BASIC - -//Checks conditions for this sign to appear -/decl/diagnostic_sign/proc/manifested_in(obj/item/organ/external/victim) - -/decl/diagnostic_sign/proc/get_description(mob/user) - . = descriptor - if(user && user.skill_check(SKILL_MEDICAL, hint_min_skill)) - . += "(?)" - -/decl/diagnostic_sign/Topic(var/href, var/list/href_list) - . = ..() - if(.) - return - if(href_list["show_diagnostic_hint"]) - to_chat(usr, SPAN_NOTICE("[name] - [explanation]")) - return TOPIC_HANDLED - -/decl/diagnostic_sign/shock - name = "Clammy skin" - descriptor = "clammy and cool to the touch" - explanation = "Patient is in shock from severe pain." - -/decl/diagnostic_sign/shock/manifested_in(obj/item/organ/external/victim) - return victim.owner && victim.owner.shock_stage >= 30 - -/decl/diagnostic_sign/liver - name = "Jaundice" - descriptor = "jaundiced" - explanation = "Patient has internal organ damage." - -/decl/diagnostic_sign/liver/manifested_in(obj/item/organ/external/victim) - return victim.owner && victim.owner.getToxLoss() >= 25 - -/decl/diagnostic_sign/oxygenation - name = "Cyanosis" - descriptor = "turning blue" - explanation = "Patient has low blood oxygenation." - -/decl/diagnostic_sign/oxygenation/manifested_in(obj/item/organ/external/victim) - return victim.owner && victim.owner.get_blood_oxygenation() <= 50 - -/decl/diagnostic_sign/circulation - name = "Paleness" - descriptor = "very pale" - explanation = "Patient has issues with blood circulaion or volume." - -/decl/diagnostic_sign/circulation/manifested_in(obj/item/organ/external/victim) - return victim.owner && victim.owner.get_blood_circulation() <= 60 - -/decl/diagnostic_sign/gangrene - name = "Rot" - descriptor = "rotting" - explanation = "Patient has lost this bodypart to an irreversible bacterial infection." - -/decl/diagnostic_sign/gangrene/manifested_in(obj/item/organ/external/victim) - return victim.status & ORGAN_DEAD diff --git a/code/modules/organs/external/head.dm b/code/modules/organs/external/head.dm deleted file mode 100644 index c1d3f5c7267fa..0000000000000 --- a/code/modules/organs/external/head.dm +++ /dev/null @@ -1,200 +0,0 @@ -/obj/item/organ/external/head - organ_tag = BP_HEAD - icon_name = "head" - name = "head" - slot_flags = SLOT_BELT - max_damage = 75 - min_broken_damage = 35 - w_class = ITEM_SIZE_NORMAL - cavity_max_w_class = ITEM_SIZE_SMALL - body_part = HEAD - parent_organ = BP_CHEST - joint = "jaw" - amputation_point = "neck" - encased = "skull" - artery_name = "carotid artery" - cavity_name = "cranial" - - limb_flags = ORGAN_FLAG_CAN_AMPUTATE | ORGAN_FLAG_GENDERED_ICON | ORGAN_FLAG_HEALS_OVERKILL | ORGAN_FLAG_CAN_BREAK - - var/draw_eyes = TRUE - var/glowing_eyes = FALSE - var/can_intake_reagents = 1 - var/has_lips = 1 - var/forehead_graffiti - var/graffiti_style - -/obj/item/organ/external/head/proc/get_eye_overlay() - if(glowing_eyes) - var/obj/item/organ/internal/eyes/eyes = owner.internal_organs_by_name[owner.species.vision_organ ? owner.species.vision_organ : BP_EYES] - if(eyes) - return eyes.get_special_overlay() - -/obj/item/organ/external/head/proc/get_eyes() - var/obj/item/organ/internal/eyes/eyes = owner.internal_organs_by_name[owner.species.vision_organ ? owner.species.vision_organ : BP_EYES] - if(eyes) - return eyes.get_onhead_icon() - -/obj/item/organ/external/head/examine(mob/user) - . = ..() - - if(forehead_graffiti && graffiti_style) - to_chat(user, "It has \"[forehead_graffiti]\" written on it in [graffiti_style]!") - -/obj/item/organ/external/head/proc/write_on(var/mob/penman, var/style) - var/head_name = name - var/atom/target = src - if(owner) - head_name = "[owner]'s [name]" - target = owner - - if(forehead_graffiti) - to_chat(penman, "There is no room left to write on [head_name]!") - return - - var/graffiti = sanitizeSafe(input(penman, "Enter a message to write on [head_name]:") as text|null, MAX_NAME_LEN) - if(graffiti) - if(!target.Adjacent(penman)) - to_chat(penman, "[head_name] is too far away.") - return - - if(owner && owner.check_head_coverage()) - to_chat(penman, "[head_name] is covered up.") - return - - penman.visible_message("[penman] begins writing something on [head_name]!", "You begin writing something on [head_name].") - - if(do_after(penman, 3 SECONDS, target, DO_PUBLIC_UNIQUE)) - if(owner && owner.check_head_coverage()) - to_chat(penman, "[head_name] is covered up.") - return - - penman.visible_message("[penman] writes something on [head_name]!", "You write something on [head_name].") - forehead_graffiti = graffiti - graffiti_style = style - -/obj/item/organ/external/head/get_agony_multiplier() - return (owner && owner.headcheck(organ_tag)) ? 1.50 : 1 - -/obj/item/organ/external/head/robotize(var/company, var/skip_prosthetics, var/keep_organs) - if(company) - var/datum/robolimb/R = all_robolimbs[company] - if(R) - can_intake_reagents = R.can_eat - draw_eyes = R.has_eyes - . = ..(company, skip_prosthetics, 1) - has_lips = null - -/obj/item/organ/external/head/take_external_damage(brute, burn, damage_flags, used_weapon = null) - . = ..() - if (!(status & ORGAN_DISFIGURED)) - if (brute_dam > 40) - if (prob(50)) - disfigure(INJURY_TYPE_BRUISE) - if (burn_dam > 40) - disfigure(INJURY_TYPE_BURN) - -/obj/item/organ/external/head/on_update_icon() - - ..() - - if(owner) - // Base eye icon. - if(draw_eyes) - var/icon/I = get_eyes() - if(I) - overlays |= I - mob_icon.Blend(I, ICON_OVERLAY) - - // Floating eyes or other effects. - var/image/eye_glow = get_eye_overlay() - if(eye_glow) overlays |= eye_glow - - if(owner.makeup_style && !BP_IS_ROBOTIC(src) && (species && (species.appearance_flags & HAS_LIPS))) - var/icon/lip_icon = new/icon('icons/mob/human_races/species/human/lips.dmi', "lips_[owner.makeup_style]_s") - overlays |= lip_icon - mob_icon.Blend(lip_icon, ICON_OVERLAY) - - overlays |= get_hair_icon() - - return mob_icon - -/obj/item/organ/external/head/proc/get_hair_icon() - var/image/res = image(species.icon_template,"") - if(owner.facial_hair_style) - var/datum/sprite_accessory/facial_hair_style = GLOB.facial_hair_styles_list[owner.facial_hair_style] - if(facial_hair_style) - if(!facial_hair_style.species_allowed || (species.get_bodytype(owner) in facial_hair_style.species_allowed)) - if(!facial_hair_style.subspecies_allowed || (species.name in facial_hair_style.subspecies_allowed)) - var/icon/facial_s = new/icon("icon" = facial_hair_style.icon, "icon_state" = "[facial_hair_style.icon_state]_s") - if(facial_hair_style.do_coloration & DO_COLORATION_USER) - facial_s.Blend(owner.facial_hair_color, facial_hair_style.blend) - res.overlays |= facial_s - - if (owner.head_hair_style) - var/icon/HI - var/datum/sprite_accessory/hair/H = GLOB.hair_styles_list[owner.head_hair_style] - if ((owner.head?.flags_inv & BLOCKHEADHAIR) && !(H.flags & VERY_SHORT)) - H = GLOB.hair_styles_list["Short Hair"] - if (H) - if (!length(H.species_allowed) || (species.get_bodytype(owner) in H.species_allowed)) - if (!length(H.subspecies_allowed) || (species.name in H.subspecies_allowed)) - HI = icon(H.icon, "[H.icon_state]_s") - if ((H.do_coloration & DO_COLORATION_USER) && length(h_col) >= 3) - HI.Blend(rgb(h_col[1], h_col[2], h_col[3]), H.blend) - if (HI) - var/list/sorted_hair_markings = list() - for (var/E in markings) - var/datum/sprite_accessory/marking/M = E - if (M.draw_target == MARKING_TARGET_HAIR) - var/color = markings[E] - var/icon/I = icon(M.icon, M.icon_state) - I.Blend(HI, ICON_AND) - I.Blend(color, ICON_MULTIPLY) - ADD_SORTED(sorted_hair_markings, list(list(M.draw_order, I)), /proc/cmp_marking_order) - for (var/entry in sorted_hair_markings) - HI.Blend(entry[2], ICON_OVERLAY) - res.overlays |= HI - - var/list/sorted_head_markings = list() - for (var/E in markings) - var/datum/sprite_accessory/marking/M = E - if (M.draw_target == MARKING_TARGET_HEAD) - var/color = markings[E] - var/icon/I = icon(M.icon, M.icon_state) - if ((M.do_coloration & DO_COLORATION_AUTO) && owner.head_hair_style) - var/datum/sprite_accessory/hair/H = GLOB.hair_styles_list[owner.head_hair_style] - if ((~H.flags & HAIR_BALD) && (M.do_coloration & DO_COLORATION_HAIR) && length(h_col) >= 3) - I.MapColors( - 1,0,0,0, - 0,1,0,0, - 0,0,1,0, - 0,0,0,1, - h_col[1] / 255, h_col[2] / 255, h_col[3] / 255, 0 - ) - else if (M.do_coloration & DO_COLORATION_SKIN) - I.MapColors( - 1,0,0,0, - 0,1,0,0, - 0,0,1,0, - 0,0,0,1, - (200 + skin_tone) / 255, (150 + skin_tone) / 255, (123 + skin_tone) / 255, 0 - ) - else - var/list/rgb = rgb2num(color) - I.MapColors( - 1,0,0,0, - 0,1,0,0, - 0,0,1,0, - 0,0,0,1, - rgb[1] / 255, rgb[2] / 255, rgb[3] / 255, 0 - ) - icon_cache_key += "[M.name][color]" - ADD_SORTED(sorted_head_markings, list(list(M.draw_order, I)), /proc/cmp_marking_order) - for (var/entry in sorted_head_markings) - res.overlays |= entry[2] - - return res - -/obj/item/organ/external/head/no_eyes - draw_eyes = FALSE diff --git a/code/modules/organs/external/species/adherent.dm b/code/modules/organs/external/species/adherent.dm deleted file mode 100644 index 181191bb2b29b..0000000000000 --- a/code/modules/organs/external/species/adherent.dm +++ /dev/null @@ -1,121 +0,0 @@ -/obj/item/organ/external/chest/crystal - name = "tendril junction" - amputation_point = "axis" - joint = "central axis" - cavity_name = "core" - w_class = ITEM_SIZE_LARGE - body_part = LOWER_TORSO - parent_organ = BP_CHEST - dislocated = -1 - max_damage = 50 - min_broken_damage = 25 - arterial_bleed_severity = 0 - encased = "ceramic hull" - force_icon = 'icons/mob/human_races/species/adherent/body.dmi' - status = ORGAN_ROBOTIC - limb_flags = ORGAN_FLAG_CAN_BREAK | ORGAN_FLAG_HEALS_OVERKILL - -/obj/item/organ/external/groin/crystal - name = "trailing tendrils" - joint = "base" - arterial_bleed_severity = 0 - dislocated = -1 - max_damage = 50 - min_broken_damage = 25 - encased = "ceramic hull" - force_icon = 'icons/mob/human_races/species/adherent/body.dmi' - status = ORGAN_ROBOTIC - limb_flags = ORGAN_FLAG_CAN_AMPUTATE | ORGAN_FLAG_CAN_STAND | ORGAN_FLAG_CAN_BREAK - -/obj/item/organ/external/head/crystal - name = "chassis core" - amputation_point = "connector socket" - joint = "connector socket" - glowing_eyes = TRUE - arterial_bleed_severity = 0 - dislocated = -1 - max_damage = 50 - min_broken_damage = 25 - cavity_max_w_class = ITEM_SIZE_NORMAL // Apparently their brains change w_class to this. - encased = "ceramic hull" - force_icon = 'icons/mob/human_races/species/adherent/body.dmi' - status = ORGAN_ROBOTIC - limb_flags = ORGAN_FLAG_CAN_AMPUTATE | ORGAN_FLAG_HEALS_OVERKILL | ORGAN_FLAG_CAN_BREAK - -/obj/item/organ/external/arm/crystal - name = "left grasping tendril" - amputation_point = "midpoint" - joint = "base" - arterial_bleed_severity = 0 - dislocated = -1 - max_damage = 20 - min_broken_damage = 10 - force_icon = 'icons/mob/human_races/species/adherent/body.dmi' - status = ORGAN_ROBOTIC - limb_flags = ORGAN_FLAG_CAN_AMPUTATE | ORGAN_FLAG_CAN_GRASP | ORGAN_FLAG_CAN_STAND | ORGAN_FLAG_CAN_BREAK - -/obj/item/organ/external/arm/right/crystal - name = "right grasping tendril" - amputation_point = "midpoint" - joint = "base" - arterial_bleed_severity = 0 - dislocated = -1 - max_damage = 20 - min_broken_damage = 10 - force_icon = 'icons/mob/human_races/species/adherent/body.dmi' - status = ORGAN_ROBOTIC - limb_flags = ORGAN_FLAG_CAN_AMPUTATE | ORGAN_FLAG_CAN_GRASP | ORGAN_FLAG_CAN_STAND | ORGAN_FLAG_CAN_BREAK - -/obj/item/organ/external/hand/crystal - name = "left maniple tendril" - amputation_point = "midpoint" - joint = "base" - arterial_bleed_severity = 0 - dislocated = -1 - max_damage = 20 - min_broken_damage = 10 - force_icon = 'icons/mob/human_races/species/adherent/body.dmi' - status = ORGAN_ROBOTIC - limb_flags = ORGAN_FLAG_CAN_AMPUTATE | ORGAN_FLAG_CAN_GRASP | ORGAN_FLAG_CAN_STAND | ORGAN_FLAG_CAN_BREAK - -/obj/item/organ/external/hand/right/crystal - name = "right maniple tendril" - amputation_point = "midpoint" - joint = "base" - arterial_bleed_severity = 0 - dislocated = -1 - max_damage = 20 - min_broken_damage = 10 - force_icon = 'icons/mob/human_races/species/adherent/body.dmi' - status = ORGAN_ROBOTIC - limb_flags = ORGAN_FLAG_CAN_AMPUTATE | ORGAN_FLAG_CAN_GRASP | ORGAN_FLAG_CAN_STAND | ORGAN_FLAG_CAN_BREAK - -/obj/item/organ/external/tendril - name = "first tendril" - amputation_point = "midpoint" - joint = "base" - icon_name = "l_leg" - organ_tag = BP_L_LEG - parent_organ = BP_CHEST - arterial_bleed_severity = 0 - dislocated = -1 - max_damage = 20 - min_broken_damage = 10 - force_icon = 'icons/mob/human_races/species/adherent/body.dmi' - status = ORGAN_ROBOTIC - limb_flags = ORGAN_FLAG_CAN_AMPUTATE | ORGAN_FLAG_CAN_GRASP | ORGAN_FLAG_CAN_STAND | ORGAN_FLAG_CAN_BREAK - -/obj/item/organ/external/tendril/two - name = "second tendril" - icon_name = "r_leg" - organ_tag = BP_R_LEG - -/obj/item/organ/external/tendril/three - name = "third tendril" - icon_name = "l_foot" - organ_tag = BP_L_FOOT - -/obj/item/organ/external/tendril/four - name = "fourth tendril" - icon_name = "r_foot" - organ_tag = BP_R_FOOT \ No newline at end of file diff --git a/code/modules/organs/external/species/diona.dm b/code/modules/organs/external/species/diona.dm deleted file mode 100644 index 348e521ea3667..0000000000000 --- a/code/modules/organs/external/species/diona.dm +++ /dev/null @@ -1,150 +0,0 @@ -/obj/item/organ/external/diona - name = "tendril" - amputation_point = "branch" - joint = "structural ligament" - dislocated = -1 - limb_flags = ORGAN_FLAG_CAN_AMPUTATE - burn_ratio = 1.2 - -/obj/item/organ/external/diona/chest - name = "core trunk" - organ_tag = BP_CHEST - icon_name = "torso" - max_damage = 200 - min_broken_damage = 50 - w_class = ITEM_SIZE_HUGE - cavity_max_w_class = ITEM_SIZE_NORMAL - body_part = UPPER_TORSO - vital = 1 - parent_organ = null - limb_flags = ORGAN_FLAG_HEALS_OVERKILL - -/obj/item/organ/external/diona/groin - name = "fork" - organ_tag = BP_GROIN - icon_name = "groin" - max_damage = 100 - min_broken_damage = 50 - w_class = ITEM_SIZE_LARGE - cavity_max_w_class = ITEM_SIZE_SMALL - body_part = LOWER_TORSO - parent_organ = BP_CHEST - -/obj/item/organ/external/diona/arm - name = "left upper tendril" - organ_tag = BP_L_ARM - icon_name = "l_arm" - max_damage = 35 - min_broken_damage = 20 - w_class = ITEM_SIZE_NORMAL - body_part = ARM_LEFT - parent_organ = BP_CHEST - limb_flags = ORGAN_FLAG_CAN_AMPUTATE | ORGAN_FLAG_CAN_GRASP - -/obj/item/organ/external/diona/arm/right - name = "right upper tendril" - organ_tag = BP_R_ARM - icon_name = "r_arm" - body_part = ARM_RIGHT - -/obj/item/organ/external/diona/leg - name = "left lower tendril" - organ_tag = BP_L_LEG - icon_name = "l_leg" - max_damage = 35 - min_broken_damage = 20 - w_class = ITEM_SIZE_NORMAL - body_part = LEG_LEFT - icon_position = LEFT - parent_organ = BP_GROIN - limb_flags = ORGAN_FLAG_CAN_AMPUTATE | ORGAN_FLAG_CAN_STAND - -/obj/item/organ/external/diona/leg/right - name = "right lower tendril" - organ_tag = BP_R_LEG - icon_name = "r_leg" - body_part = LEG_RIGHT - icon_position = RIGHT - -/obj/item/organ/external/diona/foot - name = "left foot" - organ_tag = BP_L_FOOT - icon_name = "l_foot" - max_damage = 20 - min_broken_damage = 10 - w_class = ITEM_SIZE_SMALL - body_part = FOOT_LEFT - icon_position = LEFT - parent_organ = BP_L_LEG - limb_flags = ORGAN_FLAG_CAN_AMPUTATE | ORGAN_FLAG_CAN_STAND - -/obj/item/organ/external/diona/foot/right - name = "right foot" - organ_tag = BP_R_FOOT - icon_name = "r_foot" - body_part = FOOT_RIGHT - icon_position = RIGHT - parent_organ = BP_R_LEG - joint = "right ankle" - amputation_point = "right ankle" - -/obj/item/organ/external/diona/hand - name = "left grasper" - organ_tag = BP_L_HAND - icon_name = "l_hand" - max_damage = 30 - min_broken_damage = 15 - w_class = ITEM_SIZE_SMALL - body_part = HAND_LEFT - parent_organ = BP_L_ARM - limb_flags = ORGAN_FLAG_CAN_AMPUTATE | ORGAN_FLAG_CAN_GRASP - -/obj/item/organ/external/diona/hand/right - name = "right grasper" - organ_tag = BP_R_HAND - icon_name = "r_hand" - body_part = HAND_RIGHT - parent_organ = BP_R_ARM - -//DIONA ORGANS. -/obj/item/organ/external/diona/removed() - if(BP_IS_ROBOTIC(src)) - return ..() - var/mob/living/carbon/human/H = owner - ..() - if(!istype(H) || !length(H.organs)) - H.death() - if(prob(25)) - spawn_diona_nymph(get_turf(src)) - qdel(src) - -/obj/item/organ/external/head/diona - can_intake_reagents = 0 - max_damage = 50 - min_broken_damage = 25 - glowing_eyes = TRUE - limb_flags = ORGAN_FLAG_CAN_AMPUTATE - cavity_max_w_class = ITEM_SIZE_SMALL - var/eye_icon_location = 'icons/mob/human_races/species/diona/eyes.dmi' - -/obj/item/organ/external/head/diona/get_eye_overlay() - var/icon/I = get_eyes() - if(glowing_eyes) - var/image/eye_glow = image(I) - eye_glow.layer = EYE_GLOW_LAYER - eye_glow.plane = EFFECTS_ABOVE_LIGHTING_PLANE - return eye_glow - -/obj/item/organ/external/head/diona/get_eyes() - return icon(icon = eye_icon_location, icon_state = "") - -/obj/item/organ/external/head/diona/removed() - if(BP_IS_ROBOTIC(src)) - return ..() - var/mob/living/carbon/human/H = owner - ..() - if(!istype(H) || !length(H.organs)) - H.death() - if(prob(25)) - spawn_diona_nymph(get_turf(src)) - qdel(src) diff --git a/code/modules/organs/external/species/insectoid.dm b/code/modules/organs/external/species/insectoid.dm deleted file mode 100644 index 506338acd91eb..0000000000000 --- a/code/modules/organs/external/species/insectoid.dm +++ /dev/null @@ -1,54 +0,0 @@ -/obj/item/organ/external/arm/insectoid - name = "left forelimb" - amputation_point = "coxa" - icon_position = LEFT - encased = "carapace" - -/obj/item/organ/external/arm/right/insectoid - name = "right forelimb" - amputation_point = "coxa" - icon_position = RIGHT - encased = "carapace" - -/obj/item/organ/external/leg/insectoid - name = "left tail side" - icon_position = LEFT - encased = "carapace" - -/obj/item/organ/external/leg/right/insectoid - name = "right tail side" - encased = "carapace" - -/obj/item/organ/external/foot/insectoid - name = "left tail tip" - icon_position = LEFT - encased = "carapace" - -/obj/item/organ/external/foot/right/insectoid - name = "right tail tip" - icon_position = RIGHT - encased = "carapace" - -/obj/item/organ/external/hand/insectoid - name = "left grasper" - icon_position = LEFT - encased = "carapace" - -/obj/item/organ/external/hand/right/insectoid - name = "right grasper" - icon_position = RIGHT - encased = "carapace" - -/obj/item/organ/external/groin/insectoid - name = "abdomen" - icon_position = UNDER - encased = "carapace" - -/obj/item/organ/external/head/insectoid - name = "head" - has_lips = 0 - encased = "carapace" - -/obj/item/organ/external/chest/insectoid - name = "thorax" - encased = "carapace" diff --git a/code/modules/organs/external/species/nabber_camo.dm b/code/modules/organs/external/species/nabber_camo.dm deleted file mode 100644 index 6fd10f76c30f7..0000000000000 --- a/code/modules/organs/external/species/nabber_camo.dm +++ /dev/null @@ -1,22 +0,0 @@ -/obj/item/organ/external/groin/insectoid/nabber - name = "abdomen" - icon_position = UNDER - encased = "carapace" - action_button_name = "Toggle Active Camo" - cavity_max_w_class = ITEM_SIZE_LARGE - -/obj/item/organ/external/groin/insectoid/nabber/refresh_action_button() - . = ..() - if(.) - action.button_icon_state = "nabber-cloak-[owner && owner.is_cloaked_by(species) ? 1 : 0]" - if(action.button) action.button.UpdateIcon() - -/obj/item/organ/external/groin/insectoid/nabber/attack_self(var/mob/user) - . = ..() - if(.) - if(owner.is_cloaked_by(species)) - owner.remove_cloaking_source(species) - else - owner.add_cloaking_source(species) - owner.apply_effect(2, EFFECT_STUN, 0) - refresh_action_button() diff --git a/code/modules/organs/external/species/nabber_stance.dm b/code/modules/organs/external/species/nabber_stance.dm deleted file mode 100644 index e1c03a29f90a6..0000000000000 --- a/code/modules/organs/external/species/nabber_stance.dm +++ /dev/null @@ -1,22 +0,0 @@ -/obj/item/organ/external/head/insectoid/nabber - name = "head" - vital = 0 - action_button_name = "Switch Stance" // Basically just a wrapper for switch stance verb, since GAS use it more than normals. - limb_flags = ORGAN_FLAG_CAN_AMPUTATE | ORGAN_FLAG_GENDERED_ICON | ORGAN_FLAG_CAN_BREAK - -/obj/item/organ/external/head/insectoid/nabber/get_eye_overlay() - var/obj/item/organ/internal/eyes/eyes = owner.internal_organs_by_name[owner.species.vision_organ ? owner.species.vision_organ : BP_EYES] - if(eyes) - return eyes.get_special_overlay() - -/obj/item/organ/external/head/insectoid/nabber/refresh_action_button() - . = ..() - if(.) - action.button_icon_state = "nabber-stance-[owner && owner.pulling_punches ? 1 : 0]" - if(action.button) action.button.UpdateIcon() - -/obj/item/organ/external/head/insectoid/nabber/attack_self(var/mob/user) - . = ..() - if(.) - owner.pull_punches() - refresh_action_button() \ No newline at end of file diff --git a/code/modules/organs/external/species/nabber_threat.dm b/code/modules/organs/external/species/nabber_threat.dm deleted file mode 100644 index ed6b35dd6323c..0000000000000 --- a/code/modules/organs/external/species/nabber_threat.dm +++ /dev/null @@ -1,33 +0,0 @@ -/obj/item/organ/external/chest/insectoid/nabber - name = "thorax" - encased = "carapace" - action_button_name = "Perform Threat Display" - -/obj/item/organ/external/chest/insectoid/nabber/refresh_action_button() - . = ..() - if(.) - action.button_icon_state = "nabber-threat" - if(action.button) action.button.UpdateIcon() - -/obj/item/organ/external/chest/insectoid/nabber/attack_self(var/mob/user) - . = ..() - if(.) - if(owner.incapacitated()) - to_chat(owner, "You can't do a threat display in your current state.") - return - if(owner.skin_state == SKIN_NORMAL) - if(owner.pulling_punches) - to_chat(owner, "You must be in your hunting stance to do a threat display.") - else - var/message = alert(owner, "Would you like to show a scary message?",,"Cancel","Yes", "No") - if(message == "Cancel") - return - else if(message == "Yes") - owner.visible_message("[owner]'s skin shifts to a deep red colour with dark chevrons running down in an almost hypnotic \ - pattern. Standing tall, \he strikes, sharp spikes aimed at those threatening \him, claws whooshing through the air past them.") - playsound(owner.loc, 'sound/effects/angrybug.ogg', 60, 0) - owner.skin_state = SKIN_THREAT - owner.update_skin() - addtimer(CALLBACK(owner, /mob/living/carbon/human/proc/reset_skin), 10 SECONDS, TIMER_UNIQUE) - else if(owner.skin_state == SKIN_THREAT) - owner.reset_skin() diff --git a/code/modules/organs/external/species/prometheans.dm b/code/modules/organs/external/species/prometheans.dm deleted file mode 100644 index 4648938977c34..0000000000000 --- a/code/modules/organs/external/species/prometheans.dm +++ /dev/null @@ -1,37 +0,0 @@ -// Slime limbs. -/obj/item/organ/external/chest/unbreakable/slime - max_damage = 50 - limb_flags = ORGAN_FLAG_GENDERED_ICON - -/obj/item/organ/external/groin/unbreakable/slime - max_damage = 30 - limb_flags = ORGAN_FLAG_CAN_AMPUTATE | ORGAN_FLAG_GENDERED_ICON - -/obj/item/organ/external/arm/unbreakable/slime - max_damage = 15 - -/obj/item/organ/external/arm/right/unbreakable/slime - max_damage = 15 - -/obj/item/organ/external/leg/unbreakable/slime - max_damage = 15 - -/obj/item/organ/external/leg/right/unbreakable/slime - max_damage = 15 - -/obj/item/organ/external/foot/unbreakable/slime - max_damage = 5 - -/obj/item/organ/external/foot/right/unbreakable/slime - max_damage = 5 - -/obj/item/organ/external/hand/unbreakable/slime - max_damage = 5 - -/obj/item/organ/external/hand/right/unbreakable/slime - max_damage = 5 - -/obj/item/organ/external/head/unbreakable/slime - max_damage = 15 - draw_eyes = null - limb_flags = ORGAN_FLAG_CAN_AMPUTATE | ORGAN_FLAG_GENDERED_ICON diff --git a/code/modules/organs/external/species/vox.dm b/code/modules/organs/external/species/vox.dm deleted file mode 100644 index be4e503910a52..0000000000000 --- a/code/modules/organs/external/species/vox.dm +++ /dev/null @@ -1,2 +0,0 @@ -/obj/item/organ/external/groin/vox //vox have an extended ribcage for extra protection. - encased = "lower ribcage" \ No newline at end of file diff --git a/code/modules/organs/external/species/yeosa.dm b/code/modules/organs/external/species/yeosa.dm deleted file mode 100644 index 54cd221b20531..0000000000000 --- a/code/modules/organs/external/species/yeosa.dm +++ /dev/null @@ -1,2 +0,0 @@ -/obj/item/organ/external/head/yeosa - glowing_eyes = TRUE \ No newline at end of file diff --git a/code/modules/organs/external/standard.dm b/code/modules/organs/external/standard.dm deleted file mode 100644 index be8af71281da6..0000000000000 --- a/code/modules/organs/external/standard.dm +++ /dev/null @@ -1,158 +0,0 @@ -/**************************************************** - ORGAN DEFINES -****************************************************/ - -//Make sure that w_class is set as if the parent mob was medium sized! This is because w_class is adjusted automatically for mob_size in New() - -/obj/item/organ/external/chest - name = "upper body" - organ_tag = BP_CHEST - icon_name = "torso" - max_damage = 100 - min_broken_damage = 35 - w_class = ITEM_SIZE_HUGE //Used for dismembering thresholds, in addition to storage. Humans are w_class 6, so it makes sense that chest is w_class 5. - cavity_max_w_class = ITEM_SIZE_NORMAL - body_part = UPPER_TORSO - vital = 1 - amputation_point = "spine" - joint = "neck" - dislocated = -1 - parent_organ = null - encased = "ribcage" - artery_name = "aorta" - cavity_name = "thoracic" - limb_flags = ORGAN_FLAG_GENDERED_ICON | ORGAN_FLAG_HEALS_OVERKILL | ORGAN_FLAG_CAN_BREAK - can_be_printed = FALSE - -/obj/item/organ/external/chest/proc/get_current_skin() - return - -/obj/item/organ/external/chest/robotize() - if(..()) - // Give them a new cell. - var/obj/item/organ/internal/cell/C = owner.internal_organs_by_name[BP_CELL] - if(!istype(C)) - owner.internal_organs_by_name[BP_CELL] = new /obj/item/organ/internal/cell(owner,1) - -/obj/item/organ/external/get_scan_results() - . = ..() - var/obj/item/organ/internal/lungs/L = locate() in src - if( L && L.is_bruised()) - . += "Lung ruptured" - -/obj/item/organ/external/groin - name = "lower body" - organ_tag = BP_GROIN - icon_name = "groin" - max_damage = 100 - min_broken_damage = 35 - w_class = ITEM_SIZE_LARGE - cavity_max_w_class = ITEM_SIZE_SMALL - body_part = LOWER_TORSO - parent_organ = BP_CHEST - amputation_point = "lumbar" - joint = "hip" - dislocated = -1 - artery_name = "iliac artery" - cavity_name = "abdominal" - limb_flags = ORGAN_FLAG_CAN_AMPUTATE | ORGAN_FLAG_GENDERED_ICON | ORGAN_FLAG_CAN_BREAK - -/obj/item/organ/external/arm - organ_tag = BP_L_ARM - name = "left arm" - icon_name = "l_arm" - max_damage = 50 - min_broken_damage = 30 - w_class = ITEM_SIZE_NORMAL - body_part = ARM_LEFT - parent_organ = BP_CHEST - joint = "left elbow" - amputation_point = "left shoulder" - tendon_name = "palmaris longus tendon" - artery_name = "basilic vein" - arterial_bleed_severity = 0.75 - limb_flags = ORGAN_FLAG_CAN_AMPUTATE | ORGAN_FLAG_CAN_GRASP | ORGAN_FLAG_HAS_TENDON | ORGAN_FLAG_CAN_BREAK - -/obj/item/organ/external/arm/right - organ_tag = BP_R_ARM - name = "right arm" - icon_name = "r_arm" - body_part = ARM_RIGHT - joint = "right elbow" - amputation_point = "right shoulder" - -/obj/item/organ/external/leg - organ_tag = BP_L_LEG - name = "left leg" - icon_name = "l_leg" - max_damage = 50 - min_broken_damage = 30 - w_class = ITEM_SIZE_NORMAL - body_part = LEG_LEFT - icon_position = LEFT - parent_organ = BP_GROIN - joint = "left knee" - amputation_point = "left hip" - tendon_name = "cruciate ligament" - artery_name = "femoral artery" - arterial_bleed_severity = 0.75 - limb_flags = ORGAN_FLAG_CAN_AMPUTATE | ORGAN_FLAG_CAN_STAND | ORGAN_FLAG_HAS_TENDON | ORGAN_FLAG_CAN_BREAK - -/obj/item/organ/external/leg/right - organ_tag = BP_R_LEG - name = "right leg" - icon_name = "r_leg" - body_part = LEG_RIGHT - icon_position = RIGHT - joint = "right knee" - amputation_point = "right hip" - -/obj/item/organ/external/foot - organ_tag = BP_L_FOOT - name = "left foot" - icon_name = "l_foot" - max_damage = 30 - min_broken_damage = 15 - w_class = ITEM_SIZE_SMALL - body_part = FOOT_LEFT - icon_position = LEFT - parent_organ = BP_L_LEG - joint = "left ankle" - amputation_point = "left ankle" - tendon_name = "Achilles tendon" - arterial_bleed_severity = 0.5 - limb_flags = ORGAN_FLAG_CAN_AMPUTATE | ORGAN_FLAG_CAN_STAND | ORGAN_FLAG_HAS_TENDON | ORGAN_FLAG_CAN_BREAK - -/obj/item/organ/external/foot/right - organ_tag = BP_R_FOOT - name = "right foot" - icon_name = "r_foot" - body_part = FOOT_RIGHT - icon_position = RIGHT - parent_organ = BP_R_LEG - joint = "right ankle" - amputation_point = "right ankle" - -/obj/item/organ/external/hand - organ_tag = BP_L_HAND - name = "left hand" - icon_name = "l_hand" - max_damage = 30 - min_broken_damage = 15 - w_class = ITEM_SIZE_SMALL - body_part = HAND_LEFT - parent_organ = BP_L_ARM - joint = "left wrist" - amputation_point = "left wrist" - tendon_name = "carpal ligament" - arterial_bleed_severity = 0.5 - limb_flags = ORGAN_FLAG_CAN_AMPUTATE | ORGAN_FLAG_CAN_GRASP | ORGAN_FLAG_FINGERPRINT | ORGAN_FLAG_HAS_TENDON | ORGAN_FLAG_CAN_BREAK - -/obj/item/organ/external/hand/right - organ_tag = BP_R_HAND - name = "right hand" - icon_name = "r_hand" - body_part = HAND_RIGHT - parent_organ = BP_R_ARM - joint = "right wrist" - amputation_point = "right wrist" diff --git a/code/modules/organs/external/stump.dm b/code/modules/organs/external/stump.dm deleted file mode 100644 index 15abbdf5c9085..0000000000000 --- a/code/modules/organs/external/stump.dm +++ /dev/null @@ -1,25 +0,0 @@ -/obj/item/organ/external/stump - name = "limb stump" - icon_name = "" - dislocated = -1 - -/obj/item/organ/external/stump/New(var/mob/living/carbon/holder, var/internal, var/obj/item/organ/external/limb) - if(istype(limb)) - SetName("stump of \a [limb.name]") - organ_tag = limb.organ_tag - body_part = limb.body_part - amputation_point = limb.amputation_point - joint = limb.joint - parent_organ = limb.parent_organ - artery_name = "mangled [limb.artery_name]" - arterial_bleed_severity = limb.arterial_bleed_severity - ..(holder, internal) - if(istype(limb)) - max_damage = limb.max_damage - if(BP_IS_ROBOTIC(limb) && (!parent || BP_IS_ROBOTIC(parent))) - robotize() //if both limb and the parent are robotic, the stump is robotic too - if(BP_IS_CRYSTAL(limb) && (!parent || BP_IS_CRYSTAL(parent))) - status |= ORGAN_CRYSTAL // Likewise with crystalline limbs. - -/obj/item/organ/external/stump/is_stump() - return 1 diff --git a/code/modules/organs/external/unbreakable.dm b/code/modules/organs/external/unbreakable.dm deleted file mode 100644 index 19baf45330b36..0000000000000 --- a/code/modules/organs/external/unbreakable.dm +++ /dev/null @@ -1,55 +0,0 @@ -// Slime/xeno limbs. -/obj/item/organ/external/chest/unbreakable - dislocated = -1 - arterial_bleed_severity = 0 - limb_flags = 0 - -/obj/item/organ/external/groin/unbreakable - dislocated = -1 - arterial_bleed_severity = 0 - limb_flags = ORGAN_FLAG_CAN_AMPUTATE - -/obj/item/organ/external/arm/unbreakable - dislocated = -1 - arterial_bleed_severity = 0 - limb_flags = ORGAN_FLAG_CAN_AMPUTATE | ORGAN_FLAG_CAN_GRASP - -/obj/item/organ/external/arm/right/unbreakable - dislocated = -1 - arterial_bleed_severity = 0 - limb_flags = ORGAN_FLAG_CAN_AMPUTATE - -/obj/item/organ/external/leg/unbreakable - dislocated = -1 - arterial_bleed_severity = 0 - limb_flags = ORGAN_FLAG_CAN_AMPUTATE | ORGAN_FLAG_CAN_STAND - -/obj/item/organ/external/leg/right/unbreakable - dislocated = -1 - arterial_bleed_severity = 0 - limb_flags = ORGAN_FLAG_CAN_AMPUTATE - -/obj/item/organ/external/foot/unbreakable - dislocated = -1 - arterial_bleed_severity = 0 - limb_flags = ORGAN_FLAG_CAN_AMPUTATE | ORGAN_FLAG_CAN_STAND - -/obj/item/organ/external/foot/right/unbreakable - dislocated = -1 - arterial_bleed_severity = 0 - limb_flags = ORGAN_FLAG_CAN_AMPUTATE - -/obj/item/organ/external/hand/unbreakable - dislocated = -1 - arterial_bleed_severity = 0 - limb_flags = ORGAN_FLAG_CAN_AMPUTATE | ORGAN_FLAG_CAN_GRASP - -/obj/item/organ/external/hand/right/unbreakable - dislocated = -1 - arterial_bleed_severity = 0 - limb_flags = ORGAN_FLAG_CAN_AMPUTATE - -/obj/item/organ/external/head/unbreakable - dislocated = -1 - arterial_bleed_severity = 0 - limb_flags = ORGAN_FLAG_CAN_AMPUTATE diff --git a/code/modules/organs/external/wounds/wound.dm b/code/modules/organs/external/wounds/wound.dm deleted file mode 100644 index 3645fcc5d8086..0000000000000 --- a/code/modules/organs/external/wounds/wound.dm +++ /dev/null @@ -1,206 +0,0 @@ - -/**************************************************** - WOUNDS -****************************************************/ -/datum/wound - var/current_stage = 0 // number representing the current stage - var/desc = "wound" // description of the wound. default in case something borks - var/damage = 0 // amount of damage this wound causes - var/bleed_timer = 0 // ticks of bleeding left. - var/bleed_threshold = 30 // Above this amount wounds you will need to treat the wound to stop bleeding, regardless of bleed_timer - var/min_damage = 0 // amount of damage the current wound type requires(less means we need to apply the next healing stage) - var/bandaged = 0 // is the wound bandaged? - var/clamped = 0 // Similar to bandaged, but works differently - var/salved = 0 // is the wound salved? - var/disinfected = 0 // is the wound disinfected? - var/created = 0 - var/amount = 1 // number of wounds of this type - var/germ_level = 0 // amount of germs in the wound - var/obj/item/organ/external/parent_organ // the organ the wound is on, if on an organ - - /* These are defined by the wound type and should not be changed */ - var/list/stages // stages such as "cut", "deep cut", etc. - var/max_bleeding_stage = 0 // maximum stage at which bleeding should still happen. Beyond this stage bleeding is prevented. - /// String (One of `DAMAGE_TYPE_*`). The wound's injury type. - var/damage_type = INJURY_TYPE_CUT - var/autoheal_cutoff = 15 // the maximum amount of damage that this wound can have and still autoheal - - // helper lists - var/tmp/list/embedded_objects - var/tmp/list/desc_list = list() - var/tmp/list/damage_list = list() - -/datum/wound/New(var/damage, var/obj/item/organ/external/organ = null) - - created = world.time - - // reading from a list("stage" = damage) is pretty difficult, so build two separate - // lists from them instead - for(var/V in stages) - desc_list += V - damage_list += stages[V] - - src.damage = damage - - // initialize with the appropriate stage - src.init_stage(damage) - - bleed_timer += damage - - if(istype(organ)) - parent_organ = organ - -/datum/wound/Destroy() - if(parent_organ) - LAZYREMOVE(parent_organ.wounds, src) - parent_organ = null - LAZYCLEARLIST(embedded_objects) - . = ..() - -// returns 1 if there's a next stage, 0 otherwise -/datum/wound/proc/init_stage(var/initial_damage) - current_stage = stages.len - - while(src.current_stage > 1 && src.damage_list[current_stage-1] <= initial_damage / src.amount) - src.current_stage-- - - src.min_damage = damage_list[current_stage] - src.desc = desc_list[current_stage] - -// the amount of damage per wound -/datum/wound/proc/wound_damage() - return src.damage / src.amount - -/datum/wound/proc/can_autoheal() - if(LAZYLEN(embedded_objects)) - return 0 - return (wound_damage() <= autoheal_cutoff) ? 1 : is_treated() - -// checks whether the wound has been appropriately treated -/datum/wound/proc/is_treated() - if(!LAZYLEN(embedded_objects)) - switch(damage_type) - if (INJURY_TYPE_BRUISE, INJURY_TYPE_CUT, INJURY_TYPE_PIERCE) - return bandaged - if (INJURY_TYPE_BURN) - return salved - - // Checks whether other other can be merged into src. -/datum/wound/proc/can_merge(var/datum/wound/other) - if (other.type != src.type) return 0 - if (other.current_stage != src.current_stage) return 0 - if (other.damage_type != src.damage_type) return 0 - if (!(other.can_autoheal()) != !(src.can_autoheal())) return 0 - if (other.is_surgical() != src.is_surgical()) return 0 - if (!(other.bandaged) != !(src.bandaged)) return 0 - if (!(other.clamped) != !(src.clamped)) return 0 - if (!(other.salved) != !(src.salved)) return 0 - if (!(other.disinfected) != !(src.disinfected)) return 0 - if (other.parent_organ != parent_organ) return 0 - return 1 - -/datum/wound/proc/merge_wound(var/datum/wound/other) - if(LAZYLEN(other.embedded_objects)) - LAZYDISTINCTADD(src.embedded_objects, other.embedded_objects) - src.damage += other.damage - src.amount += other.amount - src.bleed_timer += other.bleed_timer - src.germ_level = max(src.germ_level, other.germ_level) - src.created = max(src.created, other.created) //take the newer created time - qdel(other) - -// checks if wound is considered open for external infections -// untreated cuts (and bleeding bruises) and burns are possibly infectable, chance higher if wound is bigger -/datum/wound/proc/infection_check() - if (damage < 10) //small cuts, tiny bruises, and moderate burns shouldn't be infectable. - return 0 - if (is_treated() && damage < 25) //anything less than a flesh wound (or equivalent) isn't infectable if treated properly - return 0 - if (disinfected) - germ_level = 0 //reset this, just in case - return 0 - - if (damage_type == INJURY_TYPE_BRUISE && !bleeding()) //bruises only infectable if bleeding - return 0 - - var/dam_coef = round(damage/10) - switch (damage_type) - if (INJURY_TYPE_BRUISE) - return prob(dam_coef*5) - if (INJURY_TYPE_BURN) - return prob(dam_coef*25) - if (INJURY_TYPE_CUT) - return prob(dam_coef*10) - - return 0 - -/datum/wound/proc/bandage() - bandaged = 1 - -/datum/wound/proc/salve() - salved = 1 - -/datum/wound/proc/disinfect() - disinfected = 1 - -// heal the given amount of damage, and if the given amount of damage was more -// than what needed to be healed, return how much heal was left -/datum/wound/proc/heal_damage(amount) - if(LAZYLEN(embedded_objects)) - return amount // heal nothing - if(parent_organ) - if (damage_type == INJURY_TYPE_BURN && !(parent_organ.burn_ratio < 1 || (parent_organ.limb_flags & ORGAN_FLAG_HEALS_OVERKILL))) - return amount //We don't want to heal wounds on irreparable organs. - else if(!(parent_organ.brute_ratio < 1 || (parent_organ.limb_flags & ORGAN_FLAG_HEALS_OVERKILL))) - return amount - - var/healed_damage = min(src.damage, amount) - amount -= healed_damage - src.damage -= healed_damage - - while(src.wound_damage() < damage_list[current_stage] && current_stage < src.desc_list.len) - current_stage++ - desc = desc_list[current_stage] - src.min_damage = damage_list[current_stage] - - // return amount of healing still leftover, can be used for other wounds - return amount - -// opens the wound again -/datum/wound/proc/open_wound(damage) - src.damage += damage - bleed_timer += damage - - while(src.current_stage > 1 && src.damage_list[current_stage-1] <= src.damage / src.amount) - src.current_stage-- - - src.desc = desc_list[current_stage] - src.min_damage = damage_list[current_stage] - -// returns whether this wound can absorb the given amount of damage. -// this will prevent large amounts of damage being trapped in less severe wound types -/datum/wound/proc/can_worsen(damage_type, damage) - if (src.damage_type != damage_type) - return 0 //incompatible damage types - - if (src.amount > 1) - return 0 //merged wounds cannot be worsened. - - //with 1.5*, a shallow cut will be able to carry at most 30 damage, - //37.5 for a deep cut - //52.5 for a flesh wound, etc. - var/max_wound_damage = 1.5*src.damage_list[1] - if (src.damage + damage > max_wound_damage) - return 0 - return 1 - -/datum/wound/proc/bleeding() - for(var/obj/item/thing in embedded_objects) - if(thing.w_class > ITEM_SIZE_SMALL) - return FALSE - if(bandaged || clamped) - return FALSE - return ((bleed_timer > 0 || wound_damage() > bleed_threshold) && current_stage <= max_bleeding_stage) - -/datum/wound/proc/is_surgical() - return 0 diff --git a/code/modules/organs/external/wounds/wound_types.dm b/code/modules/organs/external/wounds/wound_types.dm deleted file mode 100644 index aabfeff94a2ff..0000000000000 --- a/code/modules/organs/external/wounds/wound_types.dm +++ /dev/null @@ -1,341 +0,0 @@ -/** WOUND DEFINITIONS **/ -//Note that the MINIMUM damage before a wound can be applied should correspond to -//the damage amount for the stage with the same name as the wound. -//e.g. /datum/wound/cut/deep should only be applied for 15 damage and up, -//because in it's stages list, "deep cut" = 15. -/proc/get_wound_type(var/type, var/damage) - switch(type) - if (INJURY_TYPE_CUT) - switch(damage) - if(70 to INFINITY) - return /datum/wound/cut/massive - if(60 to 70) - return /datum/wound/cut/gaping_big - if(50 to 60) - return /datum/wound/cut/gaping - if(25 to 50) - return /datum/wound/cut/flesh - if(15 to 25) - return /datum/wound/cut/deep - if(0 to 15) - return /datum/wound/cut/small - if (INJURY_TYPE_PIERCE) - switch(damage) - if(60 to INFINITY) - return /datum/wound/puncture/massive - if(50 to 60) - return /datum/wound/puncture/gaping_big - if(30 to 50) - return /datum/wound/puncture/gaping - if(15 to 30) - return /datum/wound/puncture/flesh - if(0 to 15) - return /datum/wound/puncture/small - if (INJURY_TYPE_BRUISE) - return /datum/wound/bruise - if (INJURY_TYPE_BURN, INJURY_TYPE_LASER) - switch(damage) - if(50 to INFINITY) - return /datum/wound/burn/carbonised - if(40 to 50) - return /datum/wound/burn/deep - if(30 to 40) - return /datum/wound/burn/severe - if(15 to 30) - return /datum/wound/burn/large - if(0 to 15) - return /datum/wound/burn/moderate - if (INJURY_TYPE_SHATTER) - switch(damage) - if(50 to INFINITY) - return /datum/wound/shatter/smashed - if(40 to 50) - return /datum/wound/shatter/wide - if(30 to 40) - return /datum/wound/shatter/narrow - if(15 to 30) - return /datum/wound/shatter/cracked - if(0 to 15) - return /datum/wound/shatter/chipped - - return null //no wound - -/datum/wound/proc/close() - return - -/** CUTS **/ -/datum/wound/cut - bleed_threshold = 5 - damage_type = INJURY_TYPE_CUT - -/datum/wound/cut/bandage() - ..() - if(!autoheal_cutoff) - autoheal_cutoff = initial(autoheal_cutoff) - -/datum/wound/cut/is_surgical() - return autoheal_cutoff == 0 - -/datum/wound/cut/close() - current_stage = max_bleeding_stage + 1 - desc = desc_list[current_stage] - min_damage = damage_list[current_stage] - if(damage > min_damage) - heal_damage(damage-min_damage) - -/datum/wound/cut/small - // link wound descriptions to amounts of damage - // Minor cuts have max_bleeding_stage set to the stage that bears the wound type's name. - // The major cut types have the max_bleeding_stage set to the clot stage (which is accordingly given the "blood soaked" descriptor). - max_bleeding_stage = 3 - stages = list( - "ugly ripped cut" = 20, - "ripped cut" = 10, - "cut" = 5, - "healing cut" = 2, - "small scab" = 0 - ) - -/datum/wound/cut/deep - max_bleeding_stage = 3 - stages = list( - "ugly deep ripped cut" = 25, - "deep ripped cut" = 20, - "deep cut" = 15, - "clotted cut" = 8, - "scab" = 2, - "fresh skin" = 0 - ) - -/datum/wound/cut/flesh - max_bleeding_stage = 4 - stages = list( - "ugly ripped flesh wound" = 35, - "ugly flesh wound" = 30, - "flesh wound" = 25, - "blood soaked clot" = 15, - "large scab" = 5, - "fresh skin" = 0 - ) - -/datum/wound/cut/gaping - max_bleeding_stage = 3 - stages = list( - "gaping wound" = 50, - "large blood soaked clot" = 25, - "blood soaked clot" = 15, - "small angry scar" = 5, - "small straight scar" = 0 - ) - -/datum/wound/cut/gaping_big - max_bleeding_stage = 3 - stages = list( - "big gaping wound" = 60, - "healing gaping wound" = 40, - "large blood soaked clot" = 25, - "large angry scar" = 10, - "large straight scar" = 0 - ) - -/datum/wound/cut/massive - max_bleeding_stage = 3 - stages = list( - "massive wound" = 70, - "massive healing wound" = 50, - "massive blood soaked clot" = 25, - "massive angry scar" = 10, - "massive jagged scar" = 0 - ) - -/** PUNCTURES **/ -/datum/wound/puncture - bleed_threshold = 10 - damage_type = INJURY_TYPE_PIERCE - -/datum/wound/puncture/can_worsen(damage_type, damage) - return 0 //puncture wounds cannot be enlargened - -/datum/wound/puncture/small - max_bleeding_stage = 2 - stages = list( - "puncture" = 5, - "healing puncture" = 2, - "small scab" = 0 - ) - -/datum/wound/puncture/flesh - max_bleeding_stage = 2 - stages = list( - "puncture wound" = 15, - "blood soaked clot" = 5, - "large scab" = 2, - "small round scar" = 0 - ) - -/datum/wound/puncture/gaping - max_bleeding_stage = 3 - stages = list( - "gaping hole" = 30, - "large blood soaked clot" = 15, - "blood soaked clot" = 10, - "small angry scar" = 5, - "small round scar" = 0 - ) - -/datum/wound/puncture/gaping_big - max_bleeding_stage = 3 - stages = list( - "big gaping hole" = 50, - "healing gaping hole" = 20, - "large blood soaked clot" = 15, - "large angry scar" = 10, - "large round scar" = 0 - ) - -/datum/wound/puncture/massive - max_bleeding_stage = 3 - stages = list( - "massive wound" = 60, - "massive healing wound" = 30, - "massive blood soaked clot" = 25, - "massive angry scar" = 10, - "massive jagged scar" = 0 - ) - -/** BRUISES **/ -/datum/wound/bruise - stages = list( - "monumental bruise" = 80, - "huge bruise" = 50, - "large bruise" = 30, - "moderate bruise" = 20, - "small bruise" = 10, - "tiny bruise" = 5 - ) - - bleed_threshold = 20 - max_bleeding_stage = 3 //only large bruise and above can bleed. - autoheal_cutoff = 30 - damage_type = INJURY_TYPE_BRUISE - -/** BURNS **/ -/datum/wound/burn - damage_type = INJURY_TYPE_BURN - max_bleeding_stage = 0 - -/datum/wound/burn/bleeding() - return 0 - -/datum/wound/burn/moderate - stages = list( - "ripped burn" = 10, - "moderate burn" = 5, - "healing moderate burn" = 2, - "fresh skin" = 0 - ) - -/datum/wound/burn/large - stages = list( - "ripped large burn" = 20, - "large burn" = 15, - "healing large burn" = 5, - "fresh skin" = 0 - ) - -/datum/wound/burn/severe - stages = list( - "ripped severe burn" = 35, - "severe burn" = 30, - "healing severe burn" = 10, - "burn scar" = 0 - ) - -/datum/wound/burn/deep - stages = list( - "ripped deep burn" = 45, - "deep burn" = 40, - "healing deep burn" = 15, - "large burn scar" = 0 - ) - -/datum/wound/burn/carbonised - stages = list( - "carbonised area" = 50, - "healing carbonised area" = 20, - "massive burn scar" = 0 - ) - -/** EXTERNAL ORGAN LOSS **/ -/datum/wound/lost_limb - -/datum/wound/lost_limb/New(var/obj/item/organ/external/lost_limb, var/losstype, var/clean) - var/damage_amt = lost_limb.max_damage - if(clean) damage_amt /= 2 - - switch(losstype) - if(DROPLIMB_EDGE, DROPLIMB_BLUNT) - damage_type = INJURY_TYPE_CUT - if(BP_IS_ROBOTIC(lost_limb)) - max_bleeding_stage = -1 - bleed_threshold = INFINITY - stages = list("mangled robotic socket" = 0) - else if(BP_IS_CRYSTAL(lost_limb)) - max_bleeding_stage = -1 - bleed_threshold = INFINITY - stages = list("shattered stump" = 0) - else - max_bleeding_stage = 3 //clotted stump and above can bleed. - stages = list( - "ripped stump" = damage_amt*1.3, - "bloody stump" = damage_amt, - "clotted stump" = damage_amt*0.5, - "scarred stump" = 0 - ) - if(DROPLIMB_BURN) - damage_type = INJURY_TYPE_BURN - stages = list( - "mangled charred stump" = damage_amt*1.3, - "charred stump" = damage_amt, - "scarred stump" = damage_amt*0.5, - "scarred stump" = 0 - ) - - ..(damage_amt) - -/datum/wound/lost_limb/can_merge(var/datum/wound/other) - return 0 //cannot be merged - -/** CRYSTALLINE WOUNDS **/ -/datum/wound/shatter - bleed_threshold = INFINITY - damage_type = INJURY_TYPE_SHATTER - max_bleeding_stage = -1 - -/datum/wound/shatter/close() - damage = 0 - qdel(src) - -/datum/wound/shatter/bleeding() - return FALSE - -/datum/wound/shatter/can_autoheal() - return FALSE - -/datum/wound/shatter/infection_check() - return FALSE - -/datum/wound/shatter/smashed - stages = list("shattered hole" = 0) - -/datum/wound/shatter/wide - stages = list("gaping crack" = 0) - -/datum/wound/shatter/narrow - stages = list("wide crack" = 0) - -/datum/wound/shatter/cracked - stages = list("narrow crack" = 0) - -/datum/wound/shatter/chipped - stages = list("chip" = 0) diff --git a/code/modules/organs/internal/_internal.dm b/code/modules/organs/internal/_internal.dm deleted file mode 100644 index f459855ecef2f..0000000000000 --- a/code/modules/organs/internal/_internal.dm +++ /dev/null @@ -1,199 +0,0 @@ -/**************************************************** - INTERNAL ORGANS DEFINES -****************************************************/ -/obj/item/organ/internal - var/dead_icon // Icon to use when the organ has died. - var/surface_accessible = FALSE - var/relative_size = 25 // Relative size of the organ. Roughly % of space they take in the target projection :D - var/min_bruised_damage = 10 // Damage before considered bruised - var/damage_reduction = 0.5 //modifier for internal organ injury - -/obj/item/organ/internal/New(var/mob/living/carbon/holder) - if(max_damage) - min_bruised_damage = Floor(max_damage / 4) - ..() - if(istype(holder)) - holder.internal_organs |= src - - var/mob/living/carbon/human/H = holder - if(istype(H)) - var/obj/item/organ/external/E = H.get_organ(parent_organ) - if(!E) - CRASH("[src] spawned in [holder] without a parent organ: [parent_organ].") - E.internal_organs |= src - -/obj/item/organ/internal/Destroy() - if(owner) - owner.internal_organs.Remove(src) - owner.internal_organs_by_name[organ_tag] = null - owner.internal_organs_by_name -= organ_tag - while(null in owner.internal_organs) - owner.internal_organs -= null - var/obj/item/organ/external/E = owner.organs_by_name[parent_organ] - if(istype(E)) E.internal_organs -= src - return ..() - -/obj/item/organ/internal/set_dna(var/datum/dna/new_dna) - ..() - if(species && species.organs_icon) - icon = species.organs_icon - -//disconnected the organ from it's owner but does not remove it, instead it becomes an implant that can be removed with implant surgery -//TODO move this to organ/internal once the FPB port comes through -/obj/item/organ/proc/cut_away(var/mob/living/user) - var/obj/item/organ/external/parent = owner.get_organ(parent_organ) - if(istype(parent)) //TODO ensure that we don't have to check this. - removed(user, 0) - parent.implants += src - -/obj/item/organ/internal/removed(var/mob/living/user, var/drop_organ=1, var/detach=1) - if(owner) - owner.internal_organs_by_name[organ_tag] = null - owner.internal_organs_by_name -= organ_tag - owner.internal_organs_by_name -= null - owner.internal_organs -= src - - if(detach) - var/obj/item/organ/external/affected = owner.get_organ(parent_organ) - if(affected) - affected.internal_organs -= src - status |= ORGAN_CUT_AWAY - ..() - -/obj/item/organ/internal/replaced(var/mob/living/carbon/human/target, var/obj/item/organ/external/affected) - - if(!istype(target)) - return 0 - - if(status & ORGAN_CUT_AWAY) - return 0 //organs don't work very well in the body when they aren't properly attached - - // robotic organs emulate behavior of the equivalent flesh organ of the species - if(BP_IS_ROBOTIC(src) || !species) - species = target.species - - ..() - - STOP_PROCESSING(SSobj, src) - target.internal_organs |= src - affected.internal_organs |= src - target.internal_organs_by_name[organ_tag] = src - return 1 - -/obj/item/organ/internal/die() - ..() - if((status & ORGAN_DEAD) && dead_icon) - icon_state = dead_icon - -/obj/item/organ/internal/remove_rejuv() - if(owner) - owner.internal_organs -= src - owner.internal_organs_by_name[organ_tag] = null - owner.internal_organs_by_name -= organ_tag - while(null in owner.internal_organs) - owner.internal_organs -= null - var/obj/item/organ/external/E = owner.organs_by_name[parent_organ] - if(istype(E)) E.internal_organs -= src - ..() - -/obj/item/organ/internal/is_usable() - return ..() && !is_broken() - -/obj/item/organ/internal/robotize() - ..() - min_bruised_damage += 5 - min_broken_damage += 10 - -/obj/item/organ/internal/proc/getToxLoss() - if(BP_IS_ROBOTIC(src)) - return damage * 0.5 - return damage - -/obj/item/organ/internal/proc/bruise() - damage = max(damage, min_bruised_damage) - -/obj/item/organ/internal/proc/is_damaged() - return damage > 0 - -/obj/item/organ/internal/proc/is_bruised() - return damage >= min_bruised_damage - -/obj/item/organ/internal/proc/set_max_damage(var/ndamage) - max_damage = Floor(ndamage) - min_broken_damage = Floor(0.75 * max_damage) - min_bruised_damage = Floor(0.25 * max_damage) - -/obj/item/organ/internal/take_general_damage(var/amount, var/silent = FALSE) - take_internal_damage(amount, silent) - -/obj/item/organ/internal/proc/take_internal_damage(amount, var/silent=0) - if(BP_IS_ROBOTIC(src)) - damage = clamp(damage + (amount * 0.8), 0, max_damage) - else - damage = clamp(damage + amount, 0, max_damage) - - //only show this if the organ is not robotic - if(owner && can_feel_pain() && parent_organ && (amount > 5 || prob(10))) - var/obj/item/organ/external/parent = owner.get_organ(parent_organ) - if(parent && !silent) - var/degree = "" - if(is_bruised()) - degree = " a lot" - if(damage < 5) - degree = " a bit" - owner.custom_pain("Something inside your [parent.name] hurts[degree].", amount, affecting = parent) - -/obj/item/organ/internal/proc/get_visible_state() - if(damage > max_damage) - . = "bits and pieces of a destroyed " - else if(is_broken()) - . = "broken " - else if(is_bruised()) - . = "badly damaged " - else if(damage > 5) - . = "damaged " - if(status & ORGAN_DEAD) - if(can_recover()) - . = "decaying [.]" - else - . = "necrotic [.]" - . = "[.][name]" - -/obj/item/organ/internal/Process() - ..() - handle_regeneration() - -/obj/item/organ/internal/proc/handle_regeneration() - if(!damage || BP_IS_ROBOTIC(src) || !owner || owner.chem_effects[CE_TOXIN] || owner.is_asystole()) - return - if(damage < 0.1*max_damage) - heal_damage(0.1) - -/obj/item/organ/internal/proc/surgical_fix(mob/user) - if(damage > min_broken_damage) - var/scarring = damage/max_damage - scarring = 1 - 0.3 * scarring ** 2 // Between ~15 and 30 percent loss - var/new_max_dam = Floor(scarring * max_damage) - if(new_max_dam < max_damage) - to_chat(user, "Not every part of [src] could be saved, some dead tissue had to be removed, making it more suspectable to damage in the future.") - set_max_damage(new_max_dam) - heal_damage(damage) - -/obj/item/organ/internal/proc/get_scarring_level() - . = (initial(max_damage) - max_damage)/initial(max_damage) - -/obj/item/organ/internal/get_scan_results() - . = ..() - var/scar_level = get_scarring_level() - if(scar_level > 0.01) - . += "[get_wound_severity(get_scarring_level())] scarring" - -/obj/item/organ/internal/emp_act(severity) - if(!BP_IS_ROBOTIC(src)) - return - switch (severity) - if (EMP_ACT_HEAVY) - take_internal_damage(16) - if (EMP_ACT_LIGHT) - take_internal_damage(9) - ..() diff --git a/code/modules/organs/internal/appendix.dm b/code/modules/organs/internal/appendix.dm deleted file mode 100644 index 38495e7c9a84d..0000000000000 --- a/code/modules/organs/internal/appendix.dm +++ /dev/null @@ -1,44 +0,0 @@ -/obj/item/organ/internal/appendix - name = "appendix" - icon_state = "appendix" - parent_organ = BP_GROIN - organ_tag = BP_APPENDIX - var/inflamed = 0 - -/obj/item/organ/internal/appendix/on_update_icon() - ..() - if(inflamed) - icon_state = "appendixinflamed" - SetName("inflamed appendix") - -/obj/item/organ/internal/appendix/Process() - ..() - if(inflamed && owner) - inflamed++ - if(prob(5)) - if(owner.can_feel_pain()) - owner.custom_pain("You feel a stinging pain in your abdomen!") - if(owner.can_feel_pain()) - owner.visible_message("\The [owner] winces slightly.") - if(inflamed > 200) - if(prob(3)) - take_internal_damage(0.1) - if(owner.can_feel_pain()) - owner.visible_message("\The [owner] winces painfully.") - owner.adjustToxLoss(1) - if(inflamed > 400) - if(prob(1)) - germ_level += rand(2,6) - owner.vomit() - if(inflamed > 600) - if(prob(1)) - if(owner.can_feel_pain()) - owner.custom_pain("You feel a stinging pain in your abdomen!") - owner.Weaken(10) - - var/obj/item/organ/external/E = owner.get_organ(parent_organ) - E.sever_artery() - E.germ_level = max(INFECTION_LEVEL_TWO, E.germ_level) - owner.adjustToxLoss(25) - removed() - qdel(src) diff --git a/code/modules/organs/internal/brain.dm b/code/modules/organs/internal/brain.dm deleted file mode 100644 index 02e0bc1216362..0000000000000 --- a/code/modules/organs/internal/brain.dm +++ /dev/null @@ -1,263 +0,0 @@ -/obj/item/organ/internal/brain - name = "brain" - desc = "A piece of juicy meat found in a person's head." - organ_tag = BP_BRAIN - parent_organ = BP_HEAD - vital = 1 - icon_state = "brain2" - force = 1.0 - w_class = ITEM_SIZE_SMALL - throwforce = 1.0 - throw_speed = 3 - throw_range = 5 - origin_tech = list(TECH_BIO = 3) - attack_verb = list("attacked", "slapped", "whacked") - relative_size = 85 - damage_reduction = 0 - can_be_printed = FALSE - - var/can_use_mmi = TRUE - var/mob/living/carbon/brain/brainmob = null - var/const/damage_threshold_count = 10 - var/damage_threshold_value - var/healed_threshold = 1 - var/oxygen_reserve = 6 - -/obj/item/organ/internal/brain/robotize() - replace_self_with(/obj/item/organ/internal/posibrain) - -/obj/item/organ/internal/brain/mechassist() - replace_self_with(/obj/item/organ/internal/mmi_holder) - -/obj/item/organ/internal/brain/getToxLoss() - return 0 - -/obj/item/organ/internal/brain/proc/replace_self_with(replace_path) - var/mob/living/carbon/human/tmp_owner = owner - qdel(src) - if(tmp_owner) - tmp_owner.internal_organs_by_name[organ_tag] = new replace_path(tmp_owner, 1) - tmp_owner = null - -/obj/item/organ/internal/brain/robotize() - . = ..() - icon_state = "brain-prosthetic" - -/obj/item/organ/internal/brain/New(var/mob/living/carbon/holder) - ..() - if(species) - set_max_damage(species.total_health) - else - set_max_damage(200) - - spawn(5) - if(brainmob && brainmob.client) - brainmob.client.screen.len = null //clear the hud - -/obj/item/organ/internal/brain/set_max_damage(var/ndamage) - ..() - damage_threshold_value = round(max_damage / damage_threshold_count) - -/obj/item/organ/internal/brain/Destroy() - QDEL_NULL(brainmob) - . = ..() - -/obj/item/organ/internal/brain/proc/transfer_identity(var/mob/living/carbon/H) - - if(!brainmob) - brainmob = new(src) - brainmob.SetName(H.real_name) - brainmob.real_name = H.real_name - brainmob.dna = H.dna.Clone() - brainmob.timeofhostdeath = H.timeofdeath - - if(H.mind) - H.mind.transfer_to(brainmob) - - to_chat(brainmob, "You feel slightly disoriented. That's normal when you're just \a [initial(src.name)].") - callHook("debrain", list(brainmob)) - -/obj/item/organ/internal/brain/examine(mob/user) - . = ..() - if(brainmob && brainmob.client)//if thar be a brain inside... the brain. - to_chat(user, "You can feel the small spark of life still left in this one.") - else - to_chat(user, "This one seems particularly lifeless. Perhaps it will regain some of its luster later..") - -/obj/item/organ/internal/brain/removed(var/mob/living/user) - if(!istype(owner)) - return ..() - - if(name == initial(name)) - name = "\the [owner.real_name]'s [initial(name)]" - - var/mob/living/simple_animal/borer/borer = owner.has_brain_worms() - - if(borer) - borer.detatch() //Should remove borer if the brain is removed - RR - - transfer_identity(owner) - - ..() - -/obj/item/organ/internal/brain/replaced(var/mob/living/target) - - if(!..()) return 0 - - if(target.key) - target.ghostize() - - if(brainmob) - if(brainmob.mind) - brainmob.mind.transfer_to(target) - else - target.key = brainmob.key - - return 1 - -/obj/item/organ/internal/brain/can_recover() - return ~status & ORGAN_DEAD - -/obj/item/organ/internal/brain/proc/get_current_damage_threshold() - return round(damage / damage_threshold_value) - -/obj/item/organ/internal/brain/proc/past_damage_threshold(var/threshold) - return (get_current_damage_threshold() > threshold) - -/obj/item/organ/internal/brain/proc/handle_severe_brain_damage() - set waitfor = FALSE - healed_threshold = 0 - to_chat(owner, "Where am I...?") - sleep(5 SECONDS) - if (!owner || owner.stat == DEAD || (status & ORGAN_DEAD)) - return - to_chat(owner, "What's going on...?") - sleep(10 SECONDS) - if (!owner || owner.stat == DEAD || (status & ORGAN_DEAD)) - return - to_chat(owner, "What happened...?") - alert(owner, "You have taken massive brain damage! You will not be able to remember the events leading up to your injury.", "Brain Damaged") - if (owner.psi) - owner.psi.check_latency_trigger(20, "physical trauma") - -/obj/item/organ/internal/brain/Process() - if(owner) - if(damage > max_damage / 2 && healed_threshold) - handle_severe_brain_damage() - - if(damage < (max_damage / 4)) - healed_threshold = 1 - - handle_disabilities() - handle_damage_effects() - - // Brain damage from low oxygenation or lack of blood. - if(owner.should_have_organ(BP_HEART)) - - // No heart? You are going to have a very bad time. Not 100% lethal because heart transplants should be a thing. - var/blood_volume = owner.get_blood_oxygenation() - if(blood_volume < BLOOD_VOLUME_SURVIVE) - if(!owner.chem_effects[CE_STABLE] || prob(60)) - oxygen_reserve = max(0, oxygen_reserve-1) - else - oxygen_reserve = min(initial(oxygen_reserve), oxygen_reserve+1) - if(!oxygen_reserve) //(hardcrit) - owner.Paralyse(3) - var/can_heal = damage && damage < max_damage && (damage % damage_threshold_value || owner.chem_effects[CE_BRAIN_REGEN] || (!past_damage_threshold(3) && owner.chem_effects[CE_STABLE])) - var/damprob - //Effects of bloodloss - switch(blood_volume) - - if(BLOOD_VOLUME_SAFE to INFINITY) - if(can_heal) - damage = max(damage-1, 0) - if(BLOOD_VOLUME_OKAY to BLOOD_VOLUME_SAFE) - if(prob(1)) - to_chat(owner, "You feel [pick("dizzy","woozy","faint")]...") - damprob = owner.chem_effects[CE_STABLE] ? 30 : 60 - if(!past_damage_threshold(2) && prob(damprob)) - take_internal_damage(1) - if(BLOOD_VOLUME_BAD to BLOOD_VOLUME_OKAY) - owner.eye_blurry = max(owner.eye_blurry,6) - damprob = owner.chem_effects[CE_STABLE] ? 40 : 80 - if(!past_damage_threshold(4) && prob(damprob)) - take_internal_damage(1) - if(!owner.paralysis && prob(10)) - owner.Paralyse(rand(1,3)) - to_chat(owner, "You feel extremely [pick("dizzy","woozy","faint")]...") - if(BLOOD_VOLUME_SURVIVE to BLOOD_VOLUME_BAD) - owner.eye_blurry = max(owner.eye_blurry,6) - damprob = owner.chem_effects[CE_STABLE] ? 60 : 100 - if(!past_damage_threshold(6) && prob(damprob)) - take_internal_damage(1) - if(!owner.paralysis && prob(15)) - owner.Paralyse(3,5) - to_chat(owner, "You feel extremely [pick("dizzy","woozy","faint")]...") - if(-(INFINITY) to BLOOD_VOLUME_SURVIVE) // Also see heart.dm, being below this point puts you into cardiac arrest. - owner.eye_blurry = max(owner.eye_blurry,6) - damprob = owner.chem_effects[CE_STABLE] ? 80 : 100 - if(prob(damprob)) - take_internal_damage(1) - if(prob(damprob)) - take_internal_damage(1) - ..() - -/obj/item/organ/internal/brain/take_internal_damage(var/damageTaken, var/silent) - set waitfor = 0 - ..() - if(damageTaken >= 20 && damage >= (max_damage * 0.5)) //This probably won't be triggered by oxyloss or mercury. Probably. - var/damage_secondary = damageTaken * 0.20 - if (owner) - owner.flash_eyes() - owner.eye_blurry += damage_secondary - owner.confused += damage_secondary * 2 - owner.Paralyse(damage_secondary) - owner.Weaken(round(damageTaken, 1)) - if (prob(30)) - addtimer(CALLBACK(src, .proc/brain_damage_callback, damage), rand(6, 20) SECONDS, TIMER_UNIQUE) - -/obj/item/organ/internal/brain/proc/brain_damage_callback(var/damage) //Confuse them as a somewhat uncommon aftershock. Side note: Only here so a spawn isn't used. Also, for the sake of a unique timer. - if (!owner || owner.stat == DEAD || (status & ORGAN_DEAD)) - return - - to_chat(owner, "I can't remember which way is forward...") - owner.confused += damage - -/obj/item/organ/internal/brain/proc/handle_disabilities() - if(owner.stat) - return - if((owner.disabilities & EPILEPSY) && prob(1)) - owner.seizure() - else if((owner.disabilities & NERVOUS) && prob(10)) - owner.stuttering = max(10, owner.stuttering) - -/obj/item/organ/internal/brain/proc/handle_damage_effects() - if(owner.stat) - return - if(damage > 0 && prob(1)) - owner.custom_pain("Your head feels numb and painful.",10) - if(is_bruised() && prob(1) && owner.eye_blurry <= 0) - to_chat(owner, "It becomes hard to see for some reason.") - owner.eye_blurry = 10 - if(damage >= 0.5*max_damage && prob(1) && owner.get_active_hand()) - to_chat(owner, "Your hand won't respond properly, and you drop what you are holding!") - owner.unequip_item() - if(damage >= 0.6*max_damage) - owner.slurring = max(owner.slurring, 2) - if(is_broken()) - if(!owner.lying) - to_chat(owner, "You black out!") - owner.Paralyse(10) - -/obj/item/organ/internal/brain/surgical_fix(mob/user) - var/blood_volume = owner.get_blood_oxygenation() - if(blood_volume < BLOOD_VOLUME_BAD) - to_chat(user, SPAN_DANGER("Parts of [src] didn't survive the procedure due to lack of air supply!")) - set_max_damage(Floor(max_damage - 0.25*damage)) - heal_damage(damage) - -/obj/item/organ/internal/brain/get_scarring_level() - . = (species.total_health - max_damage)/species.total_health - -/obj/item/organ/internal/brain/get_mechanical_assisted_descriptor() - return "machine-interface [name]" diff --git a/code/modules/organs/internal/eyes.dm b/code/modules/organs/internal/eyes.dm deleted file mode 100644 index 1e039a7d69da6..0000000000000 --- a/code/modules/organs/internal/eyes.dm +++ /dev/null @@ -1,125 +0,0 @@ - -/obj/item/organ/internal/eyes - name = "eyeballs" - icon_state = "eyes" - gender = PLURAL - organ_tag = BP_EYES - parent_organ = BP_HEAD - surface_accessible = TRUE - relative_size = 5 - var/phoron_guard = 0 - var/list/eye_colour = list(0,0,0) - var/innate_flash_protection = FLASH_PROTECTION_NONE - max_damage = 45 - var/eye_icon = 'icons/mob/human_races/species/default_eyes.dmi' - var/apply_eye_colour = TRUE - var/tmp/last_cached_eye_colour - var/tmp/last_eye_cache_key - var/flash_mod - var/darksight_range - var/darksight_tint - -/obj/item/organ/internal/eyes/proc/get_eye_cache_key() - last_cached_eye_colour = rgb(eye_colour[1],eye_colour[2], eye_colour[3]) - last_eye_cache_key = "[type]-[eye_icon]-[last_cached_eye_colour]" - return last_eye_cache_key - -/obj/item/organ/internal/eyes/proc/get_onhead_icon() - var/cache_key = get_eye_cache_key() - if(!human_icon_cache[cache_key]) - var/icon/eyes_icon = icon(icon = eye_icon, icon_state = "") - if(apply_eye_colour) - eyes_icon.Blend(last_cached_eye_colour, ICON_ADD) - human_icon_cache[cache_key] = eyes_icon - return human_icon_cache[cache_key] - -/obj/item/organ/internal/eyes/proc/get_special_overlay() - var/icon/I = get_onhead_icon() - if(I) - var/cache_key = "[last_eye_cache_key]-glow" - if(!human_icon_cache[cache_key]) - var/image/eye_glow = image(I) - eye_glow.layer = EYE_GLOW_LAYER - eye_glow.plane = EFFECTS_ABOVE_LIGHTING_PLANE - human_icon_cache[cache_key] = eye_glow - return human_icon_cache[cache_key] - -/obj/item/organ/internal/eyes/proc/change_eye_color() - set name = "Change Eye Color" - set desc = "Changes your robotic eye color." - set category = "IC" - set src in usr - if (!owner || owner.incapacitated()) - return - var/new_eyes = input("Please select eye color.", "Eye Color", owner.eye_color) as color|null - if(new_eyes) - var/list/ergb = rgb2num(new_eyes) - if(do_after(owner, 1 SECOND, do_flags = DO_DEFAULT | DO_USER_UNIQUE_ACT) && owner.change_eye_color(ergb[1], ergb[2], ergb[3])) - update_colour() - // Finally, update the eye icon on the mob. - owner.regenerate_icons() - owner.visible_message(SPAN_NOTICE("\The [owner] changes their eye color."),SPAN_NOTICE("You change your eye color."),) - -/obj/item/organ/internal/eyes/replaced(var/mob/living/carbon/human/target) - - // Apply our eye colour to the target. - if(istype(target) && eye_colour) - target.eye_color = rgb(eye_colour[1], eye_colour[2], eye_colour[3]) - target.update_eyes() - ..() - -/obj/item/organ/internal/eyes/proc/update_colour() - if(!owner) - return - eye_colour = rgb2num(owner.eye_color) - -/obj/item/organ/internal/eyes/take_internal_damage(amount, var/silent=0) - var/oldbroken = is_broken() - . = ..() - if(is_broken() && !oldbroken && owner && !owner.stat) - to_chat(owner, "You go blind!") - -/obj/item/organ/internal/eyes/Process() //Eye damage replaces the old eye_stat var. - ..() - if(!owner) - return - if(is_bruised()) - owner.eye_blurry = 20 - if(is_broken()) - owner.eye_blind = 20 - -/obj/item/organ/internal/eyes/New() - ..() - flash_mod = species.flash_mod - darksight_range = species.darksight_range - darksight_tint = species.darksight_tint - -/obj/item/organ/internal/eyes/proc/get_total_protection(var/flash_protection = FLASH_PROTECTION_NONE) - return (flash_protection + innate_flash_protection) - -/obj/item/organ/internal/eyes/proc/additional_flash_effects(var/intensity) - return -1 - -/obj/item/organ/internal/eyes/robot - name = "optical sensor" - status = ORGAN_ROBOTIC - -/obj/item/organ/internal/eyes/robot/New() - ..() - robotize() - -/obj/item/organ/internal/eyes/robotize() - ..() - name = "optical sensor" - icon = 'icons/obj/robot_component.dmi' - icon_state = "camera" - dead_icon = "camera_broken" - verbs |= /obj/item/organ/internal/eyes/proc/change_eye_color - update_colour() - flash_mod = 1 - darksight_range = 2 - darksight_tint = DARKTINT_NONE - status = ORGAN_ROBOTIC - -/obj/item/organ/internal/eyes/get_mechanical_assisted_descriptor() - return "retinal overlayed [name]" diff --git a/code/modules/organs/internal/heart.dm b/code/modules/organs/internal/heart.dm deleted file mode 100644 index 532bbe677da9a..0000000000000 --- a/code/modules/organs/internal/heart.dm +++ /dev/null @@ -1,230 +0,0 @@ -/obj/item/organ/internal/heart - name = "heart" - icon_state = "heart-on" - organ_tag = "heart" - parent_organ = BP_CHEST - dead_icon = "heart-off" - var/pulse = PULSE_NORM - var/heartbeat = 0 - var/beat_sound = 'sound/effects/singlebeat.ogg' - var/tmp/next_blood_squirt = 0 - damage_reduction = 0.7 - relative_size = 5 - max_damage = 45 - var/open - var/list/external_pump - -/obj/item/organ/internal/heart/open - open = 1 - -/obj/item/organ/internal/heart/die() - if(dead_icon) - icon_state = dead_icon - ..() - -/obj/item/organ/internal/heart/robotize() - . = ..() - icon_state = "heart-prosthetic" - -/obj/item/organ/internal/heart/Process() - if(owner) - handle_pulse() - if(pulse) - handle_heartbeat() - if(pulse == PULSE_2FAST && prob(1)) - take_internal_damage(0.5) - if(pulse == PULSE_THREADY && prob(5)) - take_internal_damage(0.5) - handle_blood() - ..() - -/obj/item/organ/internal/heart/proc/handle_pulse() - if(BP_IS_ROBOTIC(src)) - pulse = PULSE_NONE //that's it, you're dead (or your metal heart is), nothing can influence your pulse - return - - // pulse mod starts out as just the chemical effect amount - var/pulse_mod = owner.chem_effects[CE_PULSE] - var/is_stable = owner.chem_effects[CE_STABLE] - - // If you have enough heart chemicals to be over 2, you're likely to take extra damage. - if(pulse_mod > 2 && !is_stable) - var/damage_chance = (pulse_mod - 2) ** 2 - if(prob(damage_chance)) - take_internal_damage(0.5) - - // Now pulse mod is impacted by shock stage and other things too - if(owner.shock_stage > 30) - pulse_mod++ - if(owner.shock_stage > 80) - pulse_mod++ - - var/oxy = owner.get_blood_oxygenation() - if(oxy < BLOOD_VOLUME_OKAY) //brain wants us to get MOAR OXY - pulse_mod++ - if(oxy < BLOOD_VOLUME_BAD) //MOAR - pulse_mod++ - - if(owner.status_flags & FAKEDEATH || owner.chem_effects[CE_NOPULSE]) - pulse = PULSE_NONE - return - - //If heart is stopped, it isn't going to restart itself randomly. - if(pulse == PULSE_NONE) - return - else //and if it's beating, let's see if it should - var/should_stop = prob(80) && owner.get_blood_circulation() < BLOOD_VOLUME_SURVIVE //cardiovascular shock, not enough liquid to pump - should_stop = should_stop || prob(max(0, owner.getBrainLoss() - owner.maxHealth * 0.75)) //brain failing to work heart properly - should_stop = should_stop || (prob(5) && pulse == PULSE_THREADY) //erratic heart patterns, usually caused by oxyloss - if(should_stop) // The heart has stopped due to going into traumatic or cardiovascular shock. - to_chat(owner, "Your heart has stopped!") - pulse = PULSE_NONE - return - - // Pulse normally shouldn't go above PULSE_2FAST, unless extreme amounts of bad stuff in blood - if (pulse_mod < 6) - pulse = clamp(PULSE_NORM + pulse_mod, PULSE_SLOW, PULSE_2FAST) - else - pulse = clamp(PULSE_NORM + pulse_mod, PULSE_SLOW, PULSE_THREADY) - - // If fibrillation, then it can be PULSE_THREADY - var/fibrillation = oxy <= BLOOD_VOLUME_SURVIVE || (prob(30) && owner.shock_stage > 120) - if(pulse && fibrillation) //I SAID MOAR OXYGEN - pulse = PULSE_THREADY - - // Stablising chemicals pull the heartbeat towards the center - if(pulse != PULSE_NORM && is_stable) - if(pulse > PULSE_NORM) - pulse-- - else - pulse++ - -/obj/item/organ/internal/heart/proc/handle_heartbeat() - if(pulse >= PULSE_2FAST || owner.shock_stage >= 10 || is_below_sound_pressure(get_turf(owner))) - //PULSE_THREADY - maximum value for pulse, currently it 5. - //High pulse value corresponds to a fast rate of heartbeat. - //Divided by 2, otherwise it is too slow. - var/rate = (PULSE_THREADY - pulse)/2 - if(owner.chem_effects[CE_PULSE] > 2) - heartbeat++ - - if(heartbeat >= rate) - heartbeat = 0 - sound_to(owner, sound(beat_sound,0,0,0,50)) - else - heartbeat++ - -/obj/item/organ/internal/heart/proc/handle_blood() - - if(!owner) - return - - //Dead or cryosleep people do not pump the blood. - if(!owner || owner.InStasis() || owner.stat == DEAD || owner.bodytemperature < 170) - return - - if(pulse != PULSE_NONE || BP_IS_ROBOTIC(src)) - //Bleeding out - var/blood_max = 0 - var/list/do_spray = list() - for(var/obj/item/organ/external/temp in owner.organs) - - if(BP_IS_ROBOTIC(temp)) - continue - - var/open_wound - if(temp.status & ORGAN_BLEEDING) - - for(var/datum/wound/W in temp.wounds) - - if (!open_wound && (W.damage_type == INJURY_TYPE_CUT || W.damage_type == INJURY_TYPE_PIERCE) && W.damage && !W.is_treated()) - open_wound = TRUE - - if(W.bleeding()) - if(temp.applied_pressure) - if(ishuman(temp.applied_pressure)) - var/mob/living/carbon/human/H = temp.applied_pressure - H.bloody_hands(src, 0) - //somehow you can apply pressure to every wound on the organ at the same time - //you're basically forced to do nothing at all, so let's make it pretty effective - var/min_eff_damage = max(0, W.damage - 10) / 6 //still want a little bit to drip out, for effect - blood_max += max(min_eff_damage, W.damage - 30) / 40 - else - blood_max += W.damage / 40 - - if(temp.status & ORGAN_ARTERY_CUT) - var/bleed_amount = Floor((owner.vessel.total_volume / (temp.applied_pressure || !open_wound ? 400 : 250))*temp.arterial_bleed_severity) - if(bleed_amount) - if(open_wound) - blood_max += bleed_amount - do_spray += "[temp.name]" - else - owner.vessel.remove_reagent(/datum/reagent/blood, bleed_amount) - - switch(pulse) - if(PULSE_SLOW) - blood_max *= 0.8 - if(PULSE_FAST) - blood_max *= 1.25 - if(PULSE_2FAST, PULSE_THREADY) - blood_max *= 1.5 - - if(CE_STABLE in owner.chem_effects) // inaprovaline - blood_max *= 0.8 - - if(world.time >= next_blood_squirt && istype(owner.loc, /turf) && do_spray.len) - var/spray_organ = pick(do_spray) - owner.visible_message( - SPAN_DANGER("Blood sprays out from \the [owner]'s [spray_organ]!"), - FONT_HUGE(SPAN_DANGER("Blood sprays out from your [spray_organ]!")) - ) - owner.Stun(1) - owner.eye_blurry = 2 - - playsound(owner, 'sound/effects/gore/blood_splat.ogg', 100, 0, -2) // from infinity - - //AB occurs every heartbeat, this only throttles the visible effect - next_blood_squirt = world.time + 80 - var/turf/sprayloc = get_turf(owner) - blood_max -= owner.drip(Ceil(blood_max/3), sprayloc) - if(blood_max > 0) - blood_max -= owner.blood_squirt(blood_max, sprayloc) - if(blood_max > 0) - owner.drip(blood_max, get_turf(owner)) - else - owner.drip(blood_max) - -/obj/item/organ/internal/heart/proc/is_working() - if(!is_usable()) - return FALSE - - return pulse > PULSE_NONE || BP_IS_ROBOTIC(src) || (owner.status_flags & FAKEDEATH) - -/obj/item/organ/internal/heart/listen() - if(BP_IS_ROBOTIC(src) && is_working()) - if(is_bruised()) - return "sputtering pump" - else - return "steady whirr of the pump" - - if(!pulse || (owner.status_flags & FAKEDEATH)) - return "no pulse" - - var/pulsesound = "normal" - if(is_bruised()) - pulsesound = "irregular" - - switch(pulse) - if(PULSE_SLOW) - pulsesound = "slow" - if(PULSE_FAST) - pulsesound = "fast" - if(PULSE_2FAST) - pulsesound = "very fast" - if(PULSE_THREADY) - pulsesound = "extremely fast and faint" - - . = "[pulsesound] pulse" - -/obj/item/organ/internal/heart/get_mechanical_assisted_descriptor() - return "pacemaker-assisted [name]" diff --git a/code/modules/organs/internal/kidneys.dm b/code/modules/organs/internal/kidneys.dm deleted file mode 100644 index a73b9bbc5cfa9..0000000000000 --- a/code/modules/organs/internal/kidneys.dm +++ /dev/null @@ -1,47 +0,0 @@ -/obj/item/organ/internal/kidneys - name = "kidneys" - icon_state = "kidneys" - gender = PLURAL - organ_tag = BP_KIDNEYS - parent_organ = BP_GROIN - min_bruised_damage = 25 - min_broken_damage = 45 - max_damage = 70 - relative_size = 10 - -/obj/item/organ/internal/kidneys/robotize() - . = ..() - icon_state = "kidneys-prosthetic" - -/obj/item/organ/internal/kidneys/Process() - ..() - - if(!owner) - return - - // Coffee is really bad for you with busted kidneys. - // This should probably be expanded in some way, but fucked if I know - // what else kidneys can process in our reagent list. - var/datum/reagent/coffee = locate(/datum/reagent/drink/coffee) in owner.reagents.reagent_list - if(coffee) - if(is_bruised()) - owner.adjustToxLoss(0.1) - else if(is_broken()) - owner.adjustToxLoss(0.3) - - if(is_bruised()) - if(prob(5) && reagents.get_reagent_amount(/datum/reagent/potassium) < 5) - reagents.add_reagent(/datum/reagent/potassium, REM*5) - if(is_broken()) - if(owner.reagents.get_reagent_amount(/datum/reagent/potassium) < 15) - owner.reagents.add_reagent(/datum/reagent/potassium, REM*2) - - //If your kidneys aren't working, your body's going to have a hard time cleaning your blood. - if(!owner.chem_effects[CE_ANTITOX]) - if(prob(33)) - if(is_broken()) - owner.adjustToxLoss(0.5) - if(status & ORGAN_DEAD) - owner.adjustToxLoss(1) - - diff --git a/code/modules/organs/internal/liver.dm b/code/modules/organs/internal/liver.dm deleted file mode 100644 index 3808f60cad609..0000000000000 --- a/code/modules/organs/internal/liver.dm +++ /dev/null @@ -1,73 +0,0 @@ - -/obj/item/organ/internal/liver - name = "liver" - icon_state = "liver" - w_class = ITEM_SIZE_SMALL - organ_tag = BP_LIVER - parent_organ = BP_GROIN - min_bruised_damage = 25 - min_broken_damage = 45 - max_damage = 70 - relative_size = 60 - -/obj/item/organ/internal/liver/robotize() - . = ..() - icon_state = "liver-prosthetic" - -/obj/item/organ/internal/liver/Process() - - ..() - if(!owner) - return - - if (germ_level > INFECTION_LEVEL_ONE) - if(prob(1)) - to_chat(owner, "Your skin itches.") - if (germ_level > INFECTION_LEVEL_TWO) - if(prob(1)) - spawn owner.vomit() - - //Detox can heal small amounts of damage - if (damage < max_damage && !owner.chem_effects[CE_TOXIN]) - heal_damage(0.2 * owner.chem_effects[CE_ANTITOX]) - - // Get the effectiveness of the liver. - var/filter_effect = 3 - if(is_bruised()) - filter_effect -= 1 - if(is_broken()) - filter_effect -= 2 - // Robotic organs filter better but don't get benefits from dylovene for filtering. - if(BP_IS_ROBOTIC(src)) - filter_effect += 1 - else if(owner.chem_effects[CE_ANTITOX]) - filter_effect += 1 - // If you're not filtering well, you're in trouble. Ammonia buildup to toxic levels and damage from alcohol - if(filter_effect < 2) - if(owner.chem_effects[CE_ALCOHOL]) - owner.adjustToxLoss(0.5 * max(2 - filter_effect, 0) * (owner.chem_effects[CE_ALCOHOL_TOXIC] + 0.5 * owner.chem_effects[CE_ALCOHOL])) - - if(owner.chem_effects[CE_ALCOHOL_TOXIC]) - take_internal_damage(owner.chem_effects[CE_ALCOHOL_TOXIC], prob(90)) // Chance to warn them - - // Heal a bit if needed and we're not busy. This allows recovery from low amounts of toxloss. - if(!owner.chem_effects[CE_ALCOHOL] && !owner.chem_effects[CE_TOXIN] && !owner.radiation && damage > 0) - if(damage < min_broken_damage) - heal_damage(0.2) - if(damage < min_bruised_damage) - heal_damage(0.3) - - //Blood regeneration if there is some space - owner.regenerate_blood(0.1 + owner.chem_effects[CE_BLOODRESTORE]) - - // Blood loss or liver damage make you lose nutriments - var/blood_volume = owner.get_blood_volume() - if(blood_volume < BLOOD_VOLUME_SAFE || is_bruised()) - if(owner.nutrition >= 300) - owner.adjust_nutrition(-10) - else if(owner.nutrition >= 200) - owner.adjust_nutrition(-3) - -//We got it covered in Process with more detailed thing -/obj/item/organ/internal/liver/handle_regeneration() - return \ No newline at end of file diff --git a/code/modules/organs/internal/lungs.dm b/code/modules/organs/internal/lungs.dm deleted file mode 100644 index f3f46223d601a..0000000000000 --- a/code/modules/organs/internal/lungs.dm +++ /dev/null @@ -1,325 +0,0 @@ -/obj/item/organ/internal/lungs - name = "lungs" - icon_state = "lungs" - gender = PLURAL - organ_tag = BP_LUNGS - parent_organ = BP_CHEST - w_class = ITEM_SIZE_NORMAL - min_bruised_damage = 25 - min_broken_damage = 45 - max_damage = 70 - relative_size = 60 - - var/active_breathing = 1 - var/has_gills = FALSE - var/breath_type - var/exhale_type - var/list/poison_types - - var/min_breath_pressure - var/last_int_pressure - var/last_ext_pressure - var/max_pressure_diff = 60 - - var/oxygen_deprivation = 0 - var/safe_exhaled_max = 6 - var/safe_toxins_max = 0.2 - var/SA_para_min = 1 - var/SA_sleep_min = 5 - var/breathing = 0 - var/last_successful_breath - var/breath_fail_ratio // How badly they failed a breath. Higher is worse. - -/obj/item/organ/internal/lungs/proc/can_drown() - return (is_broken() || !has_gills) - -/obj/item/organ/internal/lungs/proc/remove_oxygen_deprivation(var/amount) - var/last_suffocation = oxygen_deprivation - oxygen_deprivation = min(species.total_health,max(0,oxygen_deprivation - amount)) - return -(oxygen_deprivation - last_suffocation) - -/obj/item/organ/internal/lungs/proc/add_oxygen_deprivation(var/amount) - var/last_suffocation = oxygen_deprivation - oxygen_deprivation = min(species.total_health,max(0,oxygen_deprivation + amount)) - return (oxygen_deprivation - last_suffocation) - -// Returns a percentage value for use by GetOxyloss(). -/obj/item/organ/internal/lungs/proc/get_oxygen_deprivation() - if(status & ORGAN_DEAD) - return 100 - return round((oxygen_deprivation/species.total_health)*100) - -/obj/item/organ/internal/lungs/robotize() - . = ..() - icon_state = "lungs-prosthetic" - -/obj/item/organ/internal/lungs/set_dna(var/datum/dna/new_dna) - ..() - sync_breath_types() - max_pressure_diff = species.max_pressure_diff - -/obj/item/organ/internal/lungs/replaced() - ..() - sync_breath_types() - -/** - * Set these lungs' breath types based on the lungs' species - */ -/obj/item/organ/internal/lungs/proc/sync_breath_types() - min_breath_pressure = species.breath_pressure - breath_type = species.breath_type ? species.breath_type : GAS_OXYGEN - poison_types = species.poison_types ? species.poison_types : list(GAS_PHORON = TRUE) - exhale_type = species.exhale_type ? species.exhale_type : GAS_CO2 - -/obj/item/organ/internal/lungs/Process() - ..() - if(!owner) - return - - if (germ_level > INFECTION_LEVEL_ONE && active_breathing) - if(prob(5)) - owner.emote("cough") //respitory tract infection - - if(is_bruised() && !owner.is_asystole()) - if(prob(2)) - if(active_breathing) - owner.visible_message( - "\The [owner] coughs up blood!", - "You cough up blood!", - "You hear someone coughing!", - ) - else - var/obj/item/organ/parent = owner.get_organ(parent_organ) - owner.visible_message( - "blood drips from \the [owner]'s [parent.name]!", - ) - - owner.drip(1) - if(prob(4)) - if(active_breathing) - owner.visible_message( - "\The [owner] gasps for air!", - "You can't breathe!", - "You hear someone gasp for air!", - ) - else - to_chat(owner, "You're having trouble getting enough [breath_type]!") - - owner.losebreath = max(round(damage / 2), owner.losebreath) - -/obj/item/organ/internal/lungs/proc/rupture() - var/obj/item/organ/external/parent = owner.get_organ(parent_organ) - if(istype(parent)) - owner.custom_pain("You feel a stabbing pain in your [parent.name]!", 50, affecting = parent) - bruise() - -//exposure to extreme pressures can rupture lungs -/obj/item/organ/internal/lungs/proc/check_rupturing(breath_pressure) - if(isnull(last_int_pressure)) - last_int_pressure = breath_pressure - return - var/datum/gas_mixture/environment = loc.return_air_for_internal_lifeform() - var/ext_pressure = environment && environment.return_pressure() // May be null if, say, our owner is in nullspace - var/int_pressure_diff = abs(last_int_pressure - breath_pressure) - var/ext_pressure_diff = abs(last_ext_pressure - ext_pressure) * owner.get_pressure_weakness(ext_pressure) - if(int_pressure_diff > max_pressure_diff && ext_pressure_diff > max_pressure_diff) - var/lung_rupture_prob = BP_IS_ROBOTIC(src) ? prob(30) : prob(60) //Robotic lungs are less likely to rupture. - if(!is_bruised() && lung_rupture_prob) //only rupture if NOT already ruptured - rupture() - -/obj/item/organ/internal/lungs/proc/handle_breath(datum/gas_mixture/breath, var/forced) - - if(!owner) - return 1 - - if(!breath || (max_damage <= 0)) - breath_fail_ratio = 1 - handle_failed_breath() - return 1 - - var/breath_pressure = breath.return_pressure() - check_rupturing(breath_pressure) - - var/datum/gas_mixture/environment = loc.return_air_for_internal_lifeform() - last_ext_pressure = environment && environment.return_pressure() - last_int_pressure = breath_pressure - if(breath.total_moles == 0) - breath_fail_ratio = 1 - handle_failed_breath() - return 1 - - var/safe_pressure_min = min_breath_pressure // Minimum safe partial pressure of breathable gas in kPa - // Lung damage increases the minimum safe pressure. - safe_pressure_min *= 1 + rand(1,4) * damage/max_damage - - if(!forced && owner.chem_effects[CE_BREATHLOSS] && !owner.chem_effects[CE_STABLE]) //opiates are bad mmkay - safe_pressure_min *= 1 + rand(1,4) * owner.chem_effects[CE_BREATHLOSS] - - var/failed_inhale = 0 - var/failed_exhale = 0 - - var/inhaling = breath.gas[breath_type] - var/inhale_efficiency = min(round(((inhaling/breath.total_moles)*breath_pressure)/safe_pressure_min, 0.001), 3) - - // Not enough to breathe - if(inhale_efficiency < 1) - if(prob(20) && active_breathing) - if(inhale_efficiency < 0.8) - owner.emote("gasp") - else if(prob(20)) - to_chat(owner, SPAN_WARNING("It's hard to breathe...")) - breath_fail_ratio = 1 - inhale_efficiency - failed_inhale = 1 - else - breath_fail_ratio = 0 - - owner.oxygen_alert = failed_inhale * 2 - - var/inhaled_gas_used = inhaling / 4 - breath.adjust_gas(breath_type, -inhaled_gas_used, update = 0) //update afterwards - - owner.phoron_alert = 0 // Reset our toxins alert for now. - if(!failed_inhale) // Enough gas to tell we're being poisoned via chemical burns or whatever. - var/poison_total = 0 - if(poison_types) - for(var/gname in breath.gas) - if(poison_types[gname]) - poison_total += breath.gas[gname] - if(((poison_total/breath.total_moles)*breath_pressure) > safe_toxins_max) - owner.phoron_alert = 1 - - // Pass reagents from the gas into our body. - // Presumably if you breathe it you have a specialized metabolism for it, so we drop/ignore breath_type. Also avoids - // humans processing thousands of units of oxygen over the course of a round for the sole purpose of poisoning vox. - var/ratio = BP_IS_ROBOTIC(src)? 0.66 : 1 - for(var/gasname in breath.gas - breath_type) - var/breathed_product = gas_data.breathed_product[gasname] - if(breathed_product) - var/reagent_amount = breath.gas[gasname] * REAGENT_GAS_EXCHANGE_FACTOR * ratio - // Little bit of sanity so we aren't trying to add 0.0000000001 units of CO2, and so we don't end up with 99999 units of CO2. - if(reagent_amount >= 0.05) - owner.reagents.add_reagent(breathed_product, reagent_amount) - breath.adjust_gas(gasname, -breath.gas[gasname], update = 0) //update after - - // Moved after reagent injection so we don't instantly poison ourselves with CO2 or whatever. - if(exhale_type && (!istype(owner.wear_mask) || !(exhale_type in owner.wear_mask.filtered_gases))) - breath.adjust_gas_temp(exhale_type, inhaled_gas_used, owner.bodytemperature, update = 0) //update afterwards - - // Were we able to breathe? - var/failed_breath = failed_inhale || failed_exhale - if(!failed_breath) - last_successful_breath = world.time - owner.adjustOxyLoss(-5 * inhale_efficiency) - if(!BP_IS_ROBOTIC(src) && species.breathing_sound && is_below_sound_pressure(get_turf(owner))) - if(breathing || owner.shock_stage >= 10) - sound_to(owner, sound(species.breathing_sound,0,0,0,5)) - breathing = 0 - else - breathing = 1 - - handle_temperature_effects(breath) - breath.update_values() - - if(failed_breath) - handle_failed_breath() - else - owner.oxygen_alert = 0 - return failed_breath - -/obj/item/organ/internal/lungs/proc/handle_failed_breath() - if(prob(15) && !owner.nervous_system_failure()) - if(!owner.is_asystole()) - if(active_breathing) - owner.emote("gasp") - else - owner.emote(pick("shiver","twitch")) - - if(damage || owner.chem_effects[CE_BREATHLOSS] || world.time > last_successful_breath + 2 MINUTES) - owner.adjustOxyLoss(HUMAN_MAX_OXYLOSS*breath_fail_ratio) - - owner.oxygen_alert = max(owner.oxygen_alert, 2) - last_int_pressure = 0 - -/obj/item/organ/internal/lungs/proc/handle_temperature_effects(datum/gas_mixture/breath) - // Hot air hurts :( - if((breath.temperature < species.cold_level_1 || breath.temperature > species.heat_level_1) && !(MUTATION_COLD_RESISTANCE in owner.mutations)) - var/damage = 0 - if(breath.temperature <= species.cold_level_1) - if(prob(20)) - to_chat(owner, "You feel your face freezing and icicles forming in your lungs!") - switch(breath.temperature) - if(species.cold_level_3 to species.cold_level_2) - damage = COLD_GAS_DAMAGE_LEVEL_3 - if(species.cold_level_2 to species.cold_level_1) - damage = COLD_GAS_DAMAGE_LEVEL_2 - else - damage = COLD_GAS_DAMAGE_LEVEL_1 - - if(prob(20)) - owner.apply_damage(damage, DAMAGE_BURN, BP_HEAD, used_weapon = "Excessive Cold") - else - src.damage += damage - owner.fire_alert = 1 - else if(breath.temperature >= species.heat_level_1) - if(prob(20)) - to_chat(owner, "You feel your face burning and a searing heat in your lungs!") - - switch(breath.temperature) - if(species.heat_level_1 to species.heat_level_2) - damage = HEAT_GAS_DAMAGE_LEVEL_1 - if(species.heat_level_2 to species.heat_level_3) - damage = HEAT_GAS_DAMAGE_LEVEL_2 - else - damage = HEAT_GAS_DAMAGE_LEVEL_3 - - if(prob(20)) - owner.apply_damage(damage, DAMAGE_BURN, BP_HEAD, used_weapon = "Excessive Heat") - else - src.damage += damage - owner.fire_alert = 2 - - //breathing in hot/cold air also heats/cools you a bit - var/temp_adj = breath.temperature - owner.bodytemperature - if (temp_adj < 0) - temp_adj /= (BODYTEMP_COLD_DIVISOR * 5) //don't raise temperature as much as if we were directly exposed - else - temp_adj /= (BODYTEMP_HEAT_DIVISOR * 5) //don't raise temperature as much as if we were directly exposed - - var/relative_density = breath.total_moles / (MOLES_CELLSTANDARD * breath.volume/CELL_VOLUME) - temp_adj *= relative_density - - if (temp_adj > BODYTEMP_HEATING_MAX) temp_adj = BODYTEMP_HEATING_MAX - if (temp_adj < BODYTEMP_COOLING_MAX) temp_adj = BODYTEMP_COOLING_MAX -// log_debug("Breath: [breath.temperature], [src]: [bodytemperature], Adjusting: [temp_adj]") - owner.bodytemperature += temp_adj - - else if(breath.temperature >= species.heat_discomfort_level) - species.get_environment_discomfort(owner,"heat") - else if(breath.temperature <= species.cold_discomfort_level) - species.get_environment_discomfort(owner,"cold") - -/obj/item/organ/internal/lungs/listen() - if(owner.failed_last_breath || !active_breathing) - return "no respiration" - - if(BP_IS_ROBOTIC(src)) - if(is_bruised()) - return "malfunctioning fans" - else - return "air flowing" - - . = list() - if(is_bruised()) - . += "[pick("wheezing", "gurgling")] sounds" - - var/list/breathtype = list() - if(get_oxygen_deprivation() > 50) - breathtype += pick("straining","labored") - if(owner.shock_stage > 50) - breathtype += pick("shallow and rapid") - if(!breathtype.len) - breathtype += "healthy" - - . += "[english_list(breathtype)] breathing" - - return english_list(.) diff --git a/code/modules/organs/internal/species/adherent.dm b/code/modules/organs/internal/species/adherent.dm deleted file mode 100644 index be4127f8e39c6..0000000000000 --- a/code/modules/organs/internal/species/adherent.dm +++ /dev/null @@ -1,156 +0,0 @@ -#define PROTOCOL_ARTICLE "Protocol article [rand(100,999)]-[uppertext(pick(GLOB.full_alphabet))] subsection #[rand(10,99)]" - -/obj/item/organ/internal/brain/adherent - name = "mentality matrix" - desc = "The self-contained, self-supporting internal 'brain' of an Adherent unit." - icon = 'icons/mob/human_races/species/adherent/organs.dmi' - icon_state = "brain" - action_button_name = "Reset Ident" - var/next_rename - var/rename_delay = 15 MINUTES - -/obj/item/organ/internal/brain/adherent/refresh_action_button() - . = ..() - if(.) - action.button_icon_state = "adherent-brain" - if(action.button) action.button.UpdateIcon() - -/obj/item/organ/internal/brain/adherent/attack_self(var/mob/user) - . = ..() - if(.) - - var/regex/name_regex = regex("\[A-Z\]{2}-\[A-Z\]{1} \[0-9\]{4}") - name_regex.Find_char(owner.real_name) - - if(world.time < next_rename) - to_chat(owner, "[PROTOCOL_ARTICLE] forbids changing your ident again so soon.") - return - - var/res = name_regex.match - if(isnull(res)) - to_chat(user, "Nonstandard names are not subject to real-time modification under [PROTOCOL_ARTICLE].") - return - - var/newname = sanitizeSafe(input(user, "Enter a new ident.", "Reset Ident") as text, MAX_NAME_LEN) - if(newname) - var/confirm = input(user, "Are you sure you wish your name to become [newname] [res]?","Reset Ident") as anything in list("No", "Yes") - if(confirm == "Yes" && owner && user == owner && !owner.incapacitated() && world.time >= next_rename) - next_rename = world.time + rename_delay - owner.real_name = "[newname] [res]" - if(owner.mind) - owner.mind.name = owner.real_name - owner.SetName(owner.real_name) - to_chat(user, "You are now designated [owner.real_name].") - -/obj/item/organ/internal/powered - icon = 'icons/mob/human_races/species/adherent/organs.dmi' - var/maintenance_cost = 1 - var/base_action_state - var/active = FALSE - var/use_descriptor - -/obj/item/organ/internal/powered/Process() - . = ..() - if(owner) - var/obj/item/organ/internal/cell/cell = locate() in owner.internal_organs - if(active && !(cell && cell.use(maintenance_cost))) - active = FALSE - to_chat(owner, "Your [name] [gender == PLURAL ? "are" : "is"] out of power!") - refresh_action_button() - -/obj/item/organ/internal/powered/refresh_action_button() - . = ..() - if(.) - action.button_icon_state = "[base_action_state]-[active ? "on" : "off"]" - if(action.button) action.button.UpdateIcon() - -/obj/item/organ/internal/powered/attack_self(var/mob/user) - . = ..() - if(.) - sound_to(user, sound('sound/effects/ding2.ogg')) - if(is_broken()) - to_chat(owner, "\The [src] [gender == PLURAL ? "are" : "is"] too damaged to function.") - active = FALSE - else - active = !active - to_chat(owner, "You are [active ? "now" : "no longer"] using your [name] to [use_descriptor].") - refresh_action_button() - -/obj/item/organ/internal/powered/jets - name = "maneuvering jets" - desc = "Gas jets from a Adherent chassis." - action_button_name = "Toggle Maneuvering Pack" - use_descriptor = "adjust your vector" - organ_tag = BP_JETS - parent_organ = BP_CHEST - gender = PLURAL - icon_state = "jets" - base_action_state = "adherent-pack" - maintenance_cost = 2 - -/obj/item/organ/internal/powered/float - name = "levitation plate" - desc = "A broad, flat disc of exotic matter. Slick to the touch." - action_button_name = "Toggle Antigravity" - organ_tag = BP_FLOAT - parent_organ = BP_GROIN - icon_state = "float" - use_descriptor = "hover" - base_action_state = "adherent-float" - -/obj/item/organ/internal/powered/float/Process() - . = ..() - if(owner) - if(active) - owner.pass_flags |= PASS_FLAG_TABLE - if(owner.floatiness <= 5) - owner.make_floating(5) - else - owner.pass_flags &= ~PASS_FLAG_TABLE - -/obj/item/organ/internal/eyes/adherent - name = "receptor prism" - icon = 'icons/mob/human_races/species/adherent/organs.dmi' - eye_icon = 'icons/mob/human_races/species/adherent/eyes.dmi' - icon_state = "eyes" - status = ORGAN_ROBOTIC - phoron_guard = TRUE - innate_flash_protection = FLASH_PROTECTION_MAJOR - -/obj/item/organ/internal/eyes/adherent/Initialize() - . = ..() - verbs |= /obj/item/organ/internal/eyes/proc/change_eye_color - -/obj/item/organ/internal/cell/adherent - name = "piezoelectric core" - icon = 'icons/mob/human_races/species/adherent/organs.dmi' - icon_state = "cell" - -/obj/item/organ/internal/powered/cooling_fins - name = "cooling fins" - gender = PLURAL - desc = "A lacy filligree of heat-radiating fins." - action_button_name = "Toggle Cooling" - organ_tag = BP_COOLING_FINS - parent_organ = BP_GROIN - icon_state = "fins" - maintenance_cost = 0 - use_descriptor = "radiate heat" - base_action_state = "adherent-fins" - var/max_cooling = 10 - var/target_temp = T20C - -/obj/item/organ/internal/powered/cooling_fins/Process() - if(owner) - var/temp_diff = min(owner.bodytemperature - target_temp, max_cooling) - if(temp_diff >= 1) - maintenance_cost = max(temp_diff, 1) - . = ..() - if(active) - owner.bodytemperature -= temp_diff - else - maintenance_cost = 0 - else - . = ..() - -#undef PROTOCOL_ARTICLE \ No newline at end of file diff --git a/code/modules/organs/internal/species/blueforged.dm b/code/modules/organs/internal/species/blueforged.dm deleted file mode 100644 index f64984de9bda0..0000000000000 --- a/code/modules/organs/internal/species/blueforged.dm +++ /dev/null @@ -1,6 +0,0 @@ - -/obj/item/organ/internal/eyes/blueforged - name = "bluespace prism" - desc = "You can see an endless blue plane when looking through it. Your eyes tingle if you stare too hard." - icon = 'icons/mob/human_races/species/blueforged/organs.dmi' - eye_icon = 'icons/mob/human_races/species/blueforged/eyes.dmi' \ No newline at end of file diff --git a/code/modules/organs/internal/species/borer.dm b/code/modules/organs/internal/species/borer.dm deleted file mode 100644 index 098bcaec3ec21..0000000000000 --- a/code/modules/organs/internal/species/borer.dm +++ /dev/null @@ -1,45 +0,0 @@ -//CORTICAL BORER ORGANS. -/obj/item/organ/internal/borer - name = "cortical borer" - icon = 'icons/obj/objects.dmi' - icon_state = "borer" - organ_tag = BP_BRAIN - desc = "A disgusting space slug." - parent_organ = BP_HEAD - vital = 1 - var/list/chemical_types - -/obj/item/organ/internal/borer/Process() - - // Borer husks regenerate health, feel no pain, and are resistant to stuns and brainloss. - for(var/chem_name in chemical_types) - var/chem = chemical_types[chem_name] - if(owner.reagents.get_reagent_amount(chem) < 3) - owner.reagents.add_reagent(chem, 5) - - // They're also super gross and ooze ichor. - if(prob(5)) - var/mob/living/carbon/human/H = owner - if(!istype(H)) - return - - var/datum/reagent/blood/B = locate(/datum/reagent/blood) in H.vessel.reagent_list - blood_splatter(H,B,1) - var/obj/effect/decal/cleanable/blood/splatter/goo = locate() in get_turf(owner) - if(goo) - goo.SetName("husk ichor") - goo.desc = "A thick goo that reeks of decay." - goo.basecolor = "#412464" - goo.update_icon() - -/obj/item/organ/internal/borer/removed(var/mob/living/user) - - ..() - - var/mob/living/simple_animal/borer/B = owner.has_brain_worms() - if(B) - B.leave_host() - B.ckey = owner.ckey - - spawn(0) - qdel(src) diff --git a/code/modules/organs/internal/species/diona.dm b/code/modules/organs/internal/species/diona.dm deleted file mode 100644 index 3d8dc8a30bc65..0000000000000 --- a/code/modules/organs/internal/species/diona.dm +++ /dev/null @@ -1,81 +0,0 @@ -/obj/item/organ/internal/diona - name = "diona nymph" - icon = 'icons/obj/objects.dmi' - icon_state = "nymph" - organ_tag = "special" // Turns into a nymph instantly, no transplanting possible. - -/obj/item/organ/internal/diona/removed(var/mob/living/user, var/skip_nymph) - if(BP_IS_ROBOTIC(src)) - return ..() - var/mob/living/carbon/human/H = owner - ..() - if(istype(H) && !LAZYLEN(H.organs)) - H.death() - if(prob(25) && !skip_nymph) - spawn_diona_nymph(get_turf(src)) - qdel(src) - -/obj/item/organ/internal/diona/Process() - return PROCESS_KILL - -/obj/item/organ/internal/diona/strata - name = "neural strata" - parent_organ = BP_CHEST - organ_tag = "neural strata" - - -/obj/item/organ/internal/diona/bladder - name = "gas bladder" - parent_organ = BP_HEAD - organ_tag = "gas bladder" - -/obj/item/organ/internal/diona/polyp - name = "polyp segment" - parent_organ = BP_GROIN - organ_tag = "polyp segment" - -/obj/item/organ/internal/diona/ligament - name = "anchoring ligament" - parent_organ = BP_GROIN - organ_tag = "anchoring ligament" - -/obj/item/organ/internal/diona/node - name = "receptor node" - parent_organ = BP_HEAD - -/obj/item/organ/internal/diona/nutrients - name = BP_NUTRIENT - parent_organ = BP_CHEST - -// These are different to the standard diona organs as they have a purpose in other -// species (absorbing radiation and light respectively) -/obj/item/organ/internal/diona/nutrients - name = BP_NUTRIENT - parent_organ = BP_CHEST - organ_tag = BP_NUTRIENT - icon = 'icons/obj/alien.dmi' - icon_state = "claw" - -/obj/item/organ/internal/diona/nutrients/removed(var/mob/user) - return ..(user, 1) - -/obj/item/organ/internal/diona/node - name = "response node" - parent_organ = BP_HEAD - organ_tag = "response node" - icon = 'icons/obj/alien.dmi' - icon_state = "claw" - -/obj/item/organ/internal/diona/node/Process() - ..() - if(is_broken() || !owner) - return - var/light_amount = 0 //how much light there is in the place, affects receiving nutrition and healing - if(isturf(owner.loc)) //else, there's considered to be no light - var/turf/T = owner.loc - light_amount = T.get_lumcount() * 10 - owner.set_nutrition(clamp(owner.nutrition + light_amount, 0, 550)) - owner.shock_stage -= light_amount - -/obj/item/organ/internal/diona/node/removed(var/mob/user) - return ..(user, 1) diff --git a/code/modules/organs/internal/species/fbp.dm b/code/modules/organs/internal/species/fbp.dm deleted file mode 100644 index 1349c9e1f8cae..0000000000000 --- a/code/modules/organs/internal/species/fbp.dm +++ /dev/null @@ -1,172 +0,0 @@ -/obj/item/organ/internal/cell - name = "microbattery" - desc = "A small, powerful cell for use in fully prosthetic bodies." - icon_state = "cell" - dead_icon = "cell_bork" - organ_tag = BP_CELL - parent_organ = BP_CHEST - status = ORGAN_ROBOTIC - vital = 1 - var/open - var/obj/item/cell/cell = /obj/item/cell/hyper - //at 0.8 completely depleted after 60ish minutes of constant walking or 130 minutes of standing still - var/servo_cost = 0.8 - -/obj/item/organ/internal/cell/New() - robotize() - if(ispath(cell)) - cell = new cell(src) - ..() - -/obj/item/organ/internal/cell/proc/percent() - if(!cell) - return 0 - return get_charge()/cell.maxcharge * 100 - -/obj/item/organ/internal/cell/proc/get_charge() - if(!cell) - return 0 - if(status & ORGAN_DEAD) - return 0 - return round(cell.charge*(1 - damage/max_damage)) - -/obj/item/organ/internal/cell/proc/checked_use(var/amount) - if(!is_usable()) - return FALSE - return cell && cell.checked_use(amount) - -/obj/item/organ/internal/cell/proc/use(var/amount) - if(!is_usable()) - return 0 - return cell && cell.use(amount) - -/obj/item/organ/internal/cell/proc/get_power_drain() - var/damage_factor = 1 + 10 * damage/max_damage - return servo_cost * damage_factor - -/obj/item/organ/internal/cell/Process() - ..() - if(!owner) - return - if(owner.stat == DEAD) //not a drain anymore - return - var/cost = get_power_drain() - if(world.time - owner.l_move_time < 15) - cost *= 2 - if(!checked_use(cost) && owner.isSynthetic()) - if(!owner.lying && !owner.buckled) - to_chat(owner, "You don't have enough energy to function!") - owner.Paralyse(3) - -/obj/item/organ/internal/cell/emp_act(severity) - ..() - if(cell) - cell.emp_act(severity) - -/obj/item/organ/internal/cell/attackby(obj/item/W, mob/user) - if(isScrewdriver(W)) - if(open) - open = 0 - to_chat(user, "You screw the battery panel in place.") - else - open = 1 - to_chat(user, "You unscrew the battery panel.") - - if(isCrowbar(W)) - if(open) - if(cell) - user.put_in_hands(cell) - to_chat(user, "You remove \the [cell] from \the [src].") - cell = null - - if (istype(W, /obj/item/cell)) - if(open) - if(cell) - to_chat(user, "There is a power cell already installed.") - else if(user.unEquip(W, src)) - cell = W - to_chat(user, "You insert \the [cell].") - -/obj/item/organ/internal/cell/replaced() - ..() - // This is very ghetto way of rebooting an IPC. TODO better way. - if(owner && owner.stat == DEAD) - owner.set_stat(CONSCIOUS) - owner.visible_message("\The [owner] twitches visibly!") - -/obj/item/organ/internal/cell/listen() - if(get_charge()) - return "faint hum of the power bank" - -// Used for an MMI or posibrain being installed into a human. -/obj/item/organ/internal/mmi_holder - name = "brain interface" - icon_state = "mmi-empty" - organ_tag = BP_BRAIN - parent_organ = BP_HEAD - vital = 1 - var/obj/item/device/mmi/stored_mmi - var/datum/mind/persistantMind //Mind that the organ will hold on to after being removed, used for transfer_and_delete - var/ownerckey // used in the event the owner is out of body - -/obj/item/organ/internal/mmi_holder/Destroy() - stored_mmi = null - return ..() - -/obj/item/organ/internal/mmi_holder/New(var/mob/living/carbon/human/new_owner, var/internal) - ..(new_owner, internal) - if(!stored_mmi) - stored_mmi = new(src) - sleep(-1) - update_from_mmi() - persistantMind = owner.mind - ownerckey = owner.ckey - -/obj/item/organ/internal/mmi_holder/proc/update_from_mmi() - - if(!stored_mmi.brainmob) - stored_mmi.brainmob = new(stored_mmi) - stored_mmi.brainobj = new(stored_mmi) - stored_mmi.brainmob.container = stored_mmi - stored_mmi.brainmob.real_name = owner.real_name - stored_mmi.brainmob.SetName(stored_mmi.brainmob.real_name) - stored_mmi.SetName("[initial(stored_mmi.name)] ([owner.real_name])") - - if(!owner) return - - name = stored_mmi.name - desc = stored_mmi.desc - icon = stored_mmi.icon - - stored_mmi.update_icon() - icon_state = stored_mmi.icon_state - - if(owner && owner.stat == DEAD) - owner.set_stat(CONSCIOUS) - owner.switch_from_dead_to_living_mob_list() - owner.visible_message("\The [owner] twitches visibly!") - -/obj/item/organ/internal/mmi_holder/cut_away(var/mob/living/user) - var/obj/item/organ/external/parent = owner.get_organ(parent_organ) - if(istype(parent)) - removed(user, 0) - parent.implants += transfer_and_delete() - -/obj/item/organ/internal/mmi_holder/removed() - if(owner && owner.mind) - persistantMind = owner.mind - if(owner.ckey) - ownerckey = owner.ckey - ..() - -/obj/item/organ/internal/mmi_holder/proc/transfer_and_delete() - if(stored_mmi) - . = stored_mmi - stored_mmi.forceMove(src.loc) - if(persistantMind) - persistantMind.transfer_to(stored_mmi.brainmob) - else - var/response = input(find_dead_player(ownerckey, 1), "Your [initial(stored_mmi.name)] has been removed from your body. Do you wish to return to life?", "Robotic Rebirth") as anything in list("Yes", "No") - if(response == "Yes") - persistantMind.transfer_to(stored_mmi.brainmob) - qdel(src) \ No newline at end of file diff --git a/code/modules/organs/internal/species/gills.dm b/code/modules/organs/internal/species/gills.dm deleted file mode 100644 index ace2ec829a8b1..0000000000000 --- a/code/modules/organs/internal/species/gills.dm +++ /dev/null @@ -1,2 +0,0 @@ -/obj/item/organ/internal/lungs/gills - has_gills = TRUE \ No newline at end of file diff --git a/code/modules/organs/internal/species/golem.dm b/code/modules/organs/internal/species/golem.dm deleted file mode 100644 index 93e368c2e6467..0000000000000 --- a/code/modules/organs/internal/species/golem.dm +++ /dev/null @@ -1,8 +0,0 @@ -/obj/item/organ/internal/brain/golem - name = "chem" - desc = "A tightly furled roll of paper, covered with indecipherable runes." - icon = 'icons/obj/wizard.dmi' - icon_state = "scroll" - -/obj/item/organ/internal/brain/golem/can_recover() - return 0 diff --git a/code/modules/organs/internal/species/insectoid.dm b/code/modules/organs/internal/species/insectoid.dm deleted file mode 100644 index 18e3d94f290f5..0000000000000 --- a/code/modules/organs/internal/species/insectoid.dm +++ /dev/null @@ -1,25 +0,0 @@ -/obj/item/organ/internal/heart/insectoid - name = "hemolymph pump" - -/obj/item/organ/internal/stomach/insectoid - name = "digestive sac" - -/obj/item/organ/internal/lungs/insectoid - name = "spiracle junction" - icon_state = "trach" - gender = NEUTER - -/obj/item/organ/internal/liver/insectoid - name = "primary filters" - gender = PLURAL - -/obj/item/organ/internal/kidneys/insectoid - name = "secondary filters" - -/obj/item/organ/internal/brain/insectoid - name = "ganglial junction" - icon_state = "brain-distributed" - -/obj/item/organ/internal/eyes/insectoid - name = "compound ocelli" - icon_state = "eyes-compound" \ No newline at end of file diff --git a/code/modules/organs/internal/species/ipc.dm b/code/modules/organs/internal/species/ipc.dm deleted file mode 100644 index 2e7728cc001da..0000000000000 --- a/code/modules/organs/internal/species/ipc.dm +++ /dev/null @@ -1,333 +0,0 @@ -/obj/item/organ/internal/posibrain - name = "positronic brain" - desc = "A cube of shining metal, four inches to a side and covered in shallow grooves." - icon = 'icons/obj/assemblies.dmi' - icon_state = "posibrain" - organ_tag = BP_POSIBRAIN - parent_organ = BP_CHEST - status = ORGAN_ROBOTIC - vital = 0 - force = 1.0 - w_class = ITEM_SIZE_NORMAL - throwforce = 1.0 - throw_speed = 3 - throw_range = 5 - origin_tech = list(TECH_ENGINEERING = 4, TECH_MATERIAL = 4, TECH_BLUESPACE = 2, TECH_DATA = 4) - attack_verb = list("attacked", "slapped", "whacked") - max_damage = 90 - min_bruised_damage = 30 - min_broken_damage = 60 - relative_size = 60 - - var/mob/living/silicon/sil_brainmob/brainmob = null - - var/searching = TIMER_ID_NULL - var/last_search = 0 - - req_access = list(access_robotics) - - var/list/shackled_verbs = list( - /obj/item/organ/internal/posibrain/proc/show_laws_brain, - /obj/item/organ/internal/posibrain/proc/brain_checklaws - ) - var/shackle = 0 - -/obj/item/organ/internal/posibrain/New(var/mob/living/carbon/H) - ..() - if(!brainmob && H) - init(H) - robotize() - unshackle() - update_icon() - if (!is_processing) - START_PROCESSING(SSobj, src) - -/obj/item/organ/internal/posibrain/proc/init(var/mob/living/carbon/H) - brainmob = new(src) - - if(istype(H)) - brainmob.SetName(H.real_name) - brainmob.real_name = H.real_name - brainmob.dna = H.dna.Clone() - brainmob.add_language(LANGUAGE_EAL) - -/obj/item/organ/internal/posibrain/Destroy() - QDEL_NULL(brainmob) - return ..() - -/obj/item/organ/internal/posibrain/attack_self(mob/user) - if (!user.IsAdvancedToolUser()) - return - if (user.skill_check(SKILL_DEVICES, SKILL_ADEPT)) - if (status & ORGAN_DEAD || !brainmob) - to_chat(user, SPAN_WARNING("\The [src] is ruined; it will never turn on again.")) - return - if (damage) - to_chat(user, SPAN_WARNING("\The [src] is damaged and requires repair first.")) - return - if (searching != TIMER_ID_NULL) - visible_message("\The [user] flicks the activation switch on \the [src]. The lights go dark.", range = 3) - cancel_search() - return - start_search(user) - else - if ((status & ORGAN_DEAD) || !brainmob || damage || (searching != TIMER_ID_NULL)) - to_chat(user, SPAN_WARNING("\The [src] doesn't respond to your pokes and prods.")) - return - start_search(user) - -/obj/item/organ/internal/posibrain/proc/start_search(mob/user) - if (!brainmob) - return - if (user) - if ((world.time - last_search) < (30 SECONDS)) - to_chat(user, SPAN_WARNING("\The [src] doesn't react; wait a few seconds before trying again.")) - return - last_search = world.time - if (brainmob && brainmob.key) - var/murder = alert(user, "\The [src] already has a mind! Are you sure? This is probably murder.", "Commit Robocide?", "Yes", "No") - if (murder == "No") - return - visible_message("\The [user] flicks the activation switch on \the [src].", range = 3) - var/has_mind = brainmob && brainmob.key && brainmob.mind - var/protected = has_mind && brainmob.mind.special_role - if (has_mind) - var/actor = user ? "\The [user]" : "Your brain" - var/sneaky = protected ? "However, you are beyond such things." : "This might be the end!" - to_chat(brainmob, SPAN_WARNING("[actor] is trying to overwrite you! [sneaky]")) - if (!protected) - var/datum/ghosttrap/T = get_ghost_trap("positronic brain") - T.request_player(brainmob, "Someone is requesting a personality for a positronic brain.", 60 SECONDS) - searching = addtimer(CALLBACK(src, .proc/cancel_search), 60 SECONDS, TIMER_UNIQUE | TIMER_STOPPABLE) - icon_state = "posibrain-searching" - -/obj/item/organ/internal/posibrain/proc/cancel_search() - visible_message(SPAN_ITALIC("\The [src] buzzes quietly and returns to an idle state."), range = 3) - if (searching != TIMER_ID_NULL) - deltimer(searching) - searching = TIMER_ID_NULL - if (brainmob && brainmob.key) - if (brainmob.mind && brainmob.mind.special_role) - var/sneaky = sanitizeSafe(input(brainmob, "You're safe. Pick a new name as cover? Leave blank to skip.", "Get Sneaky?", brainmob.real_name) as text, MAX_NAME_LEN) - if (sneaky) - brainmob.real_name = sneaky - brainmob.SetName(brainmob.real_name) - UpdateNames() - else - to_chat(brainmob, SPAN_NOTICE("You're safe! Your brain didn't manage to replace you. This time.")) - else - icon_state = "posibrain" - update_icon() - -/obj/item/organ/internal/posibrain/attack_ghost(mob/observer/ghost/user) - if (searching == TIMER_ID_NULL) - return - if (!brainmob) - return - if (brainmob.mind && brainmob.mind.special_role) - return - var/datum/ghosttrap/T = get_ghost_trap("positronic brain") - if (!T.assess_candidate(user)) - return - var/possess = alert(user, "Do you wish to become \the [src]?", "Become [src]?", "Yes", "No") - if (possess != "Yes") - return - if (brainmob.key) - to_chat(brainmob, SPAN_DANGER("Your thoughts shatter into nothingness, quickly subsumed by a new identity. \"You\" have died.")) - var/mob/observer/ghost/G = brainmob.ghostize(FALSE) - G.timeofdeath = world.time - T.transfer_personality(user, brainmob) - -/obj/item/organ/internal/posibrain/examine(mob/user, distance) - . = ..() - if (distance > 3) - return - var/msg = "" - if (isghost(user) || user.skill_check(SKILL_DEVICES, SKILL_ADEPT)) - if ((status & ORGAN_DEAD) || damage) - if ((status & ORGAN_DEAD)) - msg += SPAN_ITALIC("It is ruined and lifeless, damaged beyond hope of recovery.") - else if (damage > min_broken_damage) - msg += SPAN_ITALIC("It is seriously damaged and requires repair to work properly.") - else if (damage > min_bruised_damage) - msg += SPAN_ITALIC("It has taken some damage and is in need of repair.") - else - msg += SPAN_ITALIC("It has superficial wear and should work normally.") - if (!(status & ORGAN_DEAD)) - if (msg) - msg += "\n" - if (brainmob && brainmob.key) - msg += SPAN_ITALIC("It blinks with activity.") - if (brainmob.stat || !brainmob.client) - msg += SPAN_ITALIC(" The responsiveness fault indicator is lit.") - else if (damage) - msg += SPAN_ITALIC("The red integrity fault indicator pulses slowly.") - else - msg += SPAN_ITALIC("The golden ready indicator [searching != TIMER_ID_NULL ? "flickers quickly as it tries to generate a personality" : "pulses lazily"].") - else - if ((status & ORGAN_DEAD) || damage > min_broken_damage) - msg += SPAN_ITALIC("It looks wrecked.") - else if (damage > min_bruised_damage) - msg += SPAN_ITALIC("It looks damaged.") - if (!(status & ORGAN_DEAD)) - if (msg) - msg += "\n" - if (brainmob && brainmob.key) - msg += SPAN_ITALIC("Little lights flicker on its surface.") - else - if (damage) - msg += SPAN_ITALIC("A lone red light pulses malevolently on its surface.") - else - msg += SPAN_ITALIC("A lone golden light [searching != TIMER_ID_NULL ? "flickers quickly" : "pulses lazily"].") - if (msg) - to_chat(user, msg) - -/obj/item/organ/internal/posibrain/emp_act(severity) - damage += rand(15 - severity * 5, 20 - severity * 5) - ..() - -/obj/item/organ/internal/posibrain/proc/PickName() - src.brainmob.SetName("[pick(list("PBU","HIU","SINA","ARMA","OSI"))]-[random_id(type,100,999)]") - src.brainmob.real_name = src.brainmob.name - -/obj/item/organ/internal/posibrain/proc/shackle(var/given_lawset) - if(given_lawset) - brainmob.laws = given_lawset - shackle = 1 - verbs |= shackled_verbs - update_icon() - return 1 - -/obj/item/organ/internal/posibrain/proc/unshackle() - shackle = 0 - verbs -= shackled_verbs - update_icon() - -/obj/item/organ/internal/posibrain/on_update_icon() - if(src.brainmob && src.brainmob.key) - icon_state = "posibrain-occupied" - else - icon_state = "posibrain" - - overlays.Cut() - if(shackle) - overlays |= image('icons/obj/assemblies.dmi', "posibrain-shackles") - -/obj/item/organ/internal/posibrain/proc/transfer_identity(var/mob/living/carbon/H) - if(H && H.mind) - brainmob.set_stat(CONSCIOUS) - H.mind.transfer_to(brainmob) - brainmob.SetName(H.real_name) - brainmob.real_name = H.real_name - brainmob.dna = H.dna.Clone() - brainmob.show_laws(brainmob) - - update_icon() - - to_chat(brainmob, "You feel slightly disoriented. That's normal when you're just \a [initial(src.name)].") - callHook("debrain", list(brainmob)) - -/obj/item/organ/internal/posibrain/Process() - handle_damage_effects() - ..() - -/obj/item/organ/internal/posibrain/proc/handle_damage_effects() - if (!owner || owner.stat) - return - if (damage > min_bruised_damage) - if (prob(1) && owner.confused < 1) - to_chat(owner, SPAN_WARNING("Your comprehension of spacial positioning goes temporarily awry.")) - owner.confused += 3 - if (prob(1) && owner.eye_blurry < 1) - to_chat(owner, SPAN_WARNING("Your optical interpretations become transiently erratic.")) - owner.eye_blurry += 6 - if (prob(1) && owner.ear_deaf < 1) - to_chat(owner, SPAN_WARNING("Your capacity to differentiate audio signals briefly fails you.")) - owner.ear_deaf += 6 - if (prob(1) && owner.slurring < 1) - to_chat(owner, SPAN_WARNING("Your ability to form coherent speech struggles to keep up.")) - owner.slurring += 6 - if (damage > min_broken_damage) - if (prob(2)) - if (prob(15) && owner.sleeping < 1) - owner.visible_message(SPAN_ITALIC("\The [owner] suddenly halts all activity.")) - owner.sleeping += 10 - else if (owner.anchored || isspace(get_turf(owner))) - owner.visible_message(SPAN_ITALIC("\The [owner] seizes and twitches!")) - owner.Stun(2) - else - owner.visible_message(SPAN_ITALIC("\The [owner] seizes and clatters down in a heap!"), null, pick("Clang!", "Crash!", "Clunk!")) - owner.Weaken(2) - if (prob(2)) - var/obj/item/organ/internal/cell/C = owner.internal_organs_by_name[BP_CELL] - if (C && C.get_charge() > 25) - C.use(25) - to_chat(owner, SPAN_WARNING("Your chassis power routine fluctuates wildly.")) - var/datum/effect/effect/system/spark_spread/S = new - S.set_up(2, 0, loc) - S.start() - - -/obj/item/organ/internal/posibrain/removed(var/mob/living/user) - if(!istype(owner)) - return ..() - UpdateNames() - transfer_identity(owner) - ..() - if (!is_processing && !(status & ORGAN_DEAD)) - START_PROCESSING(SSobj, src) - -/obj/item/organ/internal/posibrain/proc/UpdateNames() - var/new_name = owner ? owner.real_name : (brainmob ? brainmob.real_name : "") - if (new_name) - if (brainmob) - brainmob.SetName(new_name) - SetName("\the [new_name]'s [initial(name)]") - return - SetName("\the [initial(name)]") - -/obj/item/organ/internal/posibrain/replaced(var/mob/living/target) - - if(!..()) return 0 - - if(target.key) - target.ghostize() - - if(brainmob) - if(brainmob.mind) - brainmob.mind.transfer_to(target) - else - target.key = brainmob.key - - return 1 - -/obj/item/organ/internal/posibrain/die() - damage = max_damage - status |= ORGAN_DEAD - STOP_PROCESSING(SSobj, src) - death_time = world.time - var/mob/self = owner || brainmob - if (self && self.mind) - self.visible_message("\The [self] unceremoniously falls lifeless.") - var/mob/observer/ghost/G = self.ghostize(FALSE) - G.timeofdeath = world.time - -/* - This is for law stuff directly. This is how a human mob will be able to communicate with the posi_brainmob in the - posibrain organ for laws when the posibrain organ is shackled. -*/ -/obj/item/organ/internal/posibrain/proc/show_laws_brain() - set category = "Shackle" - set name = "Show Laws" - set src in usr - - brainmob.show_laws(owner) - -/obj/item/organ/internal/posibrain/proc/brain_checklaws() - set category = "Shackle" - set name = "State Laws" - set src in usr - - - brainmob.open_subsystem(/datum/nano_module/law_manager, usr) - \ No newline at end of file diff --git a/code/modules/organs/internal/species/nabber.dm b/code/modules/organs/internal/species/nabber.dm deleted file mode 100644 index fad944638949b..0000000000000 --- a/code/modules/organs/internal/species/nabber.dm +++ /dev/null @@ -1,207 +0,0 @@ -/obj/item/organ/internal/voicebox/nabber - name = "vocal synthesiser" - assists_languages = list(LANGUAGE_HUMAN_RUSSIAN, LANGUAGE_GUTTER, LANGUAGE_HUMAN_EURO, LANGUAGE_EAL) - -/obj/item/organ/internal/voicebox/nabber/Initialize() - . = ..() - robotize() - -/obj/item/organ/internal/eyes/insectoid/nabber - name = "compound eyes" - innate_flash_protection = FLASH_PROTECTION_VULNERABLE - phoron_guard = 1 - action_button_name = "Toggle Eye Shields" - eye_icon = 'icons/mob/human_races/species/nabber/eyes.dmi' - var/eyes_shielded - -/obj/item/organ/internal/eyes/insectoid/msq - name = "compound eyes" - eye_icon = 'icons/mob/human_races/species/nabber/msq/eyes.dmi' - -/obj/item/organ/internal/eyes/insectoid/nabber/get_special_overlay() - var/icon/I = get_onhead_icon() - if(I) - var/image/eye_overlay = image(I) - if(owner && owner.is_cloaked()) - eye_overlay.alpha = 100 - if(eyes_shielded) - eye_overlay.color = "#aaaaaa" - return eye_overlay - -/obj/item/organ/internal/eyes/insectoid/nabber/additional_flash_effects(var/intensity) - if(!eyes_shielded) - take_internal_damage(max(0, 4 * (intensity))) - return 1 - else - return -1 - -/obj/item/organ/internal/eyes/insectoid/nabber/refresh_action_button() - . = ..() - if(.) - action.button_icon_state = "nabber-shield-[eyes_shielded ? 1 : 0]" - if(action.button) action.button.UpdateIcon() - -/obj/item/organ/internal/eyes/insectoid/nabber/attack_self(var/mob/user) - . = ..() - if(.) - eyes_shielded = !eyes_shielded - if(eyes_shielded) - to_chat(owner, "Nearly opaque lenses slide down to shield your eyes.") - innate_flash_protection = FLASH_PROTECTION_MAJOR - owner.overlay_fullscreen("eyeshield", /obj/screen/fullscreen/blind) - owner.update_icons() - else - to_chat(owner, "Your protective lenses retract out of the way.") - innate_flash_protection = FLASH_PROTECTION_VULNERABLE - addtimer(CALLBACK(src, .proc/remove_shield), 1 SECONDS) - owner.update_icons() - refresh_action_button() - -/obj/item/organ/internal/eyes/insectoid/nabber/proc/remove_shield() - owner.clear_fullscreen("eyeshield") - -/obj/item/organ/internal/eyes/nabber/New(var/mob/living/carbon/holder) - . = ..() - if(dna) - color = rgb(dna.GetUIValue(DNA_UI_EYES_R), dna.GetUIValue(DNA_UI_EYES_G), dna.GetUIValue(DNA_UI_EYES_B)) - -/obj/item/organ/internal/eyes/insectoid/nabber/set_dna(var/datum/dna/new_dna) - . = ..() - color = rgb(new_dna.GetUIValue(DNA_UI_EYES_R), new_dna.GetUIValue(DNA_UI_EYES_G), new_dna.GetUIValue(DNA_UI_EYES_B)) - -/obj/item/organ/internal/phoron - name = "phoron storage" - icon_state = "stomach" - color = "#ed81f1" - organ_tag = BP_PHORON - parent_organ = BP_CHEST - can_be_printed = FALSE - var/dexalin_level = 10 - var/phoron_level = 5 - var/raw_amount = 0.1 - -/obj/item/organ/internal/phoron/Process() - if(owner) - var/amount = raw_amount - if(is_broken()) - amount *= 0.5 - else if(is_bruised()) - amount *= 0.8 - - var/phoron_volume_raw = owner.reagents.get_reagent_amount(/datum/reagent/toxin/phoron) - - if(phoron_volume_raw < phoron_level || !phoron_volume_raw) - owner.reagents.add_reagent(/datum/reagent/toxin/phoron, amount) - ..() - -/obj/item/organ/internal/phoron/can_recover() - return TRUE - -/obj/item/organ/internal/liver/insectoid/nabber - name = "toxin filter" - color = "#66ff99" - organ_tag = BP_LIVER - parent_organ = BP_CHEST - -/obj/item/organ/internal/acetone - name = "acetone reactor" - icon_state = "vox lung" - color = "#ff6699" - organ_tag = BP_ACETONE - parent_organ = BP_GROIN - var/dexalin_level = 12 - var/acetone_level = 20 - var/raw_amount = 0.8 - -/obj/item/organ/internal/acetone/Process() - ..() - if(!owner) - return - - var/blood_level = owner.get_blood_circulation() - var/amount = raw_amount * (blood_level / 100) - if(is_broken()) - amount *= 0.5 - else if(is_bruised()) - amount *= 0.8 - - // If there's barely any blood, can't properly make dexalin - if(blood_level < BLOOD_VOLUME_SURVIVE && prob(50)) - return - - var/dexalin_volume_raw = owner.reagents.get_reagent_amount(/datum/reagent/dexalin) - var/acetone_volume_raw = owner.reagents.get_reagent_amount(/datum/reagent/acetone) - var/breath_fail_ratio = 1 - var/obj/item/organ/internal/lungs/insectoid/nabber/totally_not_lungs_I_swear = owner.internal_organs_by_name[BP_TRACH] - if(totally_not_lungs_I_swear) - breath_fail_ratio = totally_not_lungs_I_swear.breath_fail_ratio - if((dexalin_volume_raw < dexalin_level * (blood_level / 100) || !dexalin_volume_raw) && (acetone_volume_raw < acetone_level || !acetone_volume_raw) && breath_fail_ratio < 0.25) - owner.reagents.add_reagent(/datum/reagent/acetone, amount) - -// These are not actually lungs and shouldn't be thought of as such despite the claims of the parent. -/obj/item/organ/internal/lungs/insectoid/nabber - name = "tracheae" - gender = PLURAL - organ_tag = BP_TRACH - parent_organ = BP_GROIN - active_breathing = 0 - safe_toxins_max = 10 - -/obj/item/organ/internal/lungs/insectoid/nabber/rupture() - to_chat(owner, "You feel air rushing through your trachea!") - -/obj/item/organ/internal/lungs/insectoid/nabber/handle_failed_breath() - var/mob/living/carbon/human/H = owner - - H.adjustOxyLoss(-(HUMAN_MAX_OXYLOSS * owner.chem_effects[CE_OXYGENATED])) - - if(breath_fail_ratio < 0.25 && owner.chem_effects[CE_OXYGENATED]) - H.oxygen_alert = 0 - if(breath_fail_ratio >= 0.25 && (damage || world.time > last_successful_breath + 2 MINUTES)) - H.adjustOxyLoss(HUMAN_MAX_OXYLOSS * breath_fail_ratio) - if(owner.chem_effects[CE_OXYGENATED]) - H.oxygen_alert = 1 - else - H.oxygen_alert = 2 - -/obj/item/organ/internal/brain/insectoid/nabber - var/lowblood_tally = 0 - name = "distributed nervous system" - parent_organ = BP_CHEST - -/obj/item/organ/internal/brain/insectoid/nabber/Process() - if(!owner || !owner.should_have_organ(BP_HEART)) - return - - var/blood_volume = owner.get_blood_circulation() - - //Effects of bloodloss - switch(blood_volume) - if (BLOOD_VOLUME_FULL) - lowblood_tally = 0 - if(BLOOD_VOLUME_OKAY to BLOOD_VOLUME_SAFE) - lowblood_tally = 2 - if(prob(1)) - to_chat(owner, "You're finding it difficult to move.") - if(BLOOD_VOLUME_BAD to BLOOD_VOLUME_OKAY) - lowblood_tally = 4 - if(prob(1)) - to_chat(owner, "Moving has become very difficult.") - if(BLOOD_VOLUME_SURVIVE to BLOOD_VOLUME_BAD) - lowblood_tally = 6 - if(prob(15)) - to_chat(owner, "You're almost unable to move!") - if(!owner.pulling_punches) - var/datum/species/nabber/nab = species - nab.arm_swap(owner, TRUE) - if(-(INFINITY) to BLOOD_VOLUME_SURVIVE) - lowblood_tally = 10 - if(prob(30) && !owner.pulling_punches) - var/datum/species/nabber/nab = species - nab.arm_swap(owner, TRUE) - if(prob(10)) - to_chat(owner, "Your body is barely functioning and is starting to shut down.") - owner.Paralyse(1) - var/obj/item/organ/internal/I = pick(owner.internal_organs) - I.take_internal_damage(5) - ..() diff --git a/code/modules/organs/internal/species/promethean.dm b/code/modules/organs/internal/species/promethean.dm deleted file mode 100644 index 0eabaec545b77..0000000000000 --- a/code/modules/organs/internal/species/promethean.dm +++ /dev/null @@ -1,8 +0,0 @@ -/obj/item/organ/internal/brain/slime - name = "slime core" - desc = "A complex, organic knot of jelly and crystalline particles." - icon = 'icons/mob/simple_animal/slimes.dmi' - icon_state = "green slime extract" - -/obj/item/organ/internal/brain/slime/can_recover() - return 0 diff --git a/code/modules/organs/internal/species/skrell.dm b/code/modules/organs/internal/species/skrell.dm deleted file mode 100644 index 282cc22efd88d..0000000000000 --- a/code/modules/organs/internal/species/skrell.dm +++ /dev/null @@ -1,6 +0,0 @@ -/obj/item/organ/internal/eyes/skrell - name = "amphibian eyes" - desc = "Large black orbs, belonging to some sort of giant frog by looks of it." - icon = 'icons/mob/human_races/species/skrell/organs.dmi' - eye_icon = 'icons/mob/human_races/species/skrell/eyes.dmi' - apply_eye_colour = FALSE \ No newline at end of file diff --git a/code/modules/organs/internal/species/starborn.dm b/code/modules/organs/internal/species/starborn.dm deleted file mode 100644 index 2c28f497555e2..0000000000000 --- a/code/modules/organs/internal/species/starborn.dm +++ /dev/null @@ -1,5 +0,0 @@ -/obj/item/organ/internal/brain/starlight - name = "essence of fire" - desc = "A fancy name for ash. Still, it does look a bit different from the regular stuff." - icon = 'icons/obj/objects.dmi' - icon_state = "ash" \ No newline at end of file diff --git a/code/modules/organs/internal/species/unathi.dm b/code/modules/organs/internal/species/unathi.dm deleted file mode 100644 index 991b8e5b5a684..0000000000000 --- a/code/modules/organs/internal/species/unathi.dm +++ /dev/null @@ -1,8 +0,0 @@ -/obj/item/organ/internal/eyes/unathi - name = "reptilian eyes" - desc = "Eyes belonging to a big lizard. They seem to be staring right at you no matter where you look from." - icon = 'icons/mob/human_races/species/unathi/organs.dmi' - eye_icon = 'icons/mob/human_races/species/unathi/eyes.dmi' - -/obj/item/organ/internal/brain/unathi - can_use_mmi = FALSE \ No newline at end of file diff --git a/code/modules/organs/internal/species/vox.dm b/code/modules/organs/internal/species/vox.dm deleted file mode 100644 index 6bee41455d09a..0000000000000 --- a/code/modules/organs/internal/species/vox.dm +++ /dev/null @@ -1,257 +0,0 @@ -//vox got different organs within. This will also help with regular surgeons knowing the organs within an alien as alien as vox. -/obj/item/organ/internal/heart/vox - icon_state = "vox heart" - dead_icon = null - parent_organ = BP_GROIN - -/obj/item/organ/internal/lungs/vox - name = "air capillary sack" //Like birds, Vox absorb gas via air capillaries. - icon_state = "vox lung" - -/obj/item/organ/internal/kidneys/vox - name = "filtration bladder" - icon_state = "lungs" //wow are vox kidneys fat. - color = "#99ccff" - parent_organ = BP_CHEST - -/obj/item/organ/internal/liver/vox - name = "waste tract" - parent_organ = BP_CHEST - color = "#0033cc" - -/obj/item/organ/internal/eyes/vox - eye_icon = 'icons/mob/human_races/species/vox/eyes.dmi' - color = "#0033cc" - -/obj/item/organ/internal/eyes/vox/armalis - eye_icon = 'icons/mob/human_races/species/vox/armalis_eyes.dmi' - color = "#0033cc" - -/obj/item/organ/internal/stomach/vox - name = "gizzard" - color = "#0033cc" - var/static/list/gains_nutriment_from_inedible_reagents = list( - /datum/reagent/woodpulp = 3, - /datum/reagent/ultraglue = 1, - /datum/reagent/coolant = 1, - /datum/reagent/oil = 1, - /datum/reagent/space_cleaner = 1, - /datum/reagent/napalm = 1, - /datum/reagent/napalm/b = 1, - /datum/reagent/thermite = 1, - /datum/reagent/foaming_agent = 1, - /datum/reagent/surfactant = 1, - /datum/reagent/paint = 1 - ) - var/static/list/can_digest_matter = list( - MATERIAL_WOOD = TRUE, - MATERIAL_MAHOGANY = TRUE, - MATERIAL_MAPLE = TRUE, - MATERIAL_EBONY = TRUE, - MATERIAL_WALNUT = TRUE, - MATERIAL_LEATHER_GENERIC = TRUE, - MATERIAL_PLASTIC = TRUE, - MATERIAL_CARDBOARD = TRUE, - MATERIAL_CLOTH = TRUE, - MATERIAL_WASTE = TRUE, - MATERIAL_ROCK_SALT = TRUE - ) - var/static/list/can_process_matter = list( - MATERIAL_STEEL = TRUE, - MATERIAL_GLASS = TRUE, - MATERIAL_GOLD = TRUE, - MATERIAL_SILVER = TRUE, - MATERIAL_DIAMOND = TRUE, - MATERIAL_URANIUM = TRUE, - MATERIAL_SANDSTONE = TRUE, - MATERIAL_IRON = TRUE, - MATERIAL_PLATINUM = TRUE, - MATERIAL_BRONZE = TRUE, - MATERIAL_MARBLE = TRUE, - MATERIAL_TITANIUM = TRUE, - MATERIAL_OSMIUM = TRUE, - MATERIAL_SAND = TRUE, - MATERIAL_GRAPHITE = TRUE, - MATERIAL_PITCHBLENDE = TRUE, - MATERIAL_HEMATITE = TRUE, - MATERIAL_QUARTZ = TRUE, - MATERIAL_PYRITE = TRUE, - MATERIAL_SPODUMENE = TRUE, - MATERIAL_CINNABAR = TRUE, - MATERIAL_PHOSPHORITE = TRUE, - MATERIAL_POTASH = TRUE, - MATERIAL_BAUXITE = TRUE, - MATERIAL_COPPER = TRUE, - MATERIAL_ALUMINIUM = TRUE, - MATERIAL_RUTILE = TRUE - ) - var/list/stored_matter = list() - -/obj/item/organ/internal/stomach/vox/Process() - . = ..() - if(is_usable()) - - // Handle some post-metabolism reagent processing for generally inedible foods. - if(ingested.total_volume > 0) - for(var/datum/reagent/R in ingested.reagent_list) - var/inedible_nutriment_amount = gains_nutriment_from_inedible_reagents[R.type] - if(inedible_nutriment_amount > 0) - owner.adjust_nutrition(inedible_nutriment_amount) - - // Do we have any objects to digest? - var/list/check_materials - var/updated_stacks - for(var/obj/item/food in contents) - for(var/mat in food.matter) - if(!can_digest_matter[mat] && !can_process_matter[mat]) - continue - - // Grab a chunk out of the object. - var/digested = min(food.matter[mat], rand(200,500)) - food.matter[mat] -= digested - digested *= 0.75 - if(food.matter[mat] <= 0) - food.matter -= mat - if(!food.matter.len) - qdel(food) - - // Process it. - if(can_digest_matter[mat]) - owner.adjust_nutrition(max(1, Floor(digested/100))) - updated_stacks = TRUE - else if(can_process_matter[mat]) - LAZYDISTINCTADD(check_materials, mat) - stored_matter[mat] += digested - - // Convert stored matter into sheets. - for(var/mat in check_materials) - var/material/M = SSmaterials.get_material_by_name(mat) - if(M && M.stack_type && stored_matter[mat] >= M.units_per_sheet) - - // Remove as many sheets as possible from the gizzard. - var/sheets = Floor(stored_matter[mat]/M.units_per_sheet) - stored_matter[mat] -= M.units_per_sheet * sheets - if(stored_matter[mat] <= 0) - stored_matter -= mat - - // Merge them into other stacks. - for(var/obj/item/stack/material/mat_stack in contents) - if(mat_stack.material == M && mat_stack.amount < mat_stack.max_amount) - var/taking_sheets = min(sheets, mat_stack.max_amount - mat_stack.amount) - mat_stack.set_amount(mat_stack.amount + taking_sheets) - sheets -= taking_sheets - updated_stacks = TRUE - - // Create new stacks if needed. - while(sheets > 0) - var/obj/item/stack/material/mat_stack = new M.stack_type(src) - var/taking_sheets = min(sheets, mat_stack.max_amount) - mat_stack.set_amount(mat_stack.amount + taking_sheets) - sheets -= taking_sheets - updated_stacks = TRUE - - if(updated_stacks && prob(5)) - to_chat(owner, SPAN_NOTICE("Your [name] churns as it digests some material into a usable form.")) - -/obj/item/organ/internal/hindtongue - name = "hindtongue" - desc = "Some kind of severed bird tongue." - parent_organ = BP_HEAD - icon_state = "hindtongue" - organ_tag = BP_HINDTONGUE - -/obj/item/organ/internal/voxstack - name = "cortical stack" - parent_organ = BP_HEAD - icon_state = "cortical-stack" - organ_tag = BP_STACK - status = ORGAN_ROBOTIC - vital = 1 - origin_tech = list(TECH_BIO = 4, TECH_MATERIAL = 4, TECH_MAGNET = 2, TECH_DATA = 3) - relative_size = 10 - var/invasive = 1 - - var/ownerckey - var/default_language - var/list/languages = list() - var/datum/mind/backup - var/prompting = FALSE // Are we waiting for a user prompt? - -/obj/item/organ/internal/voxstack/New() - ..() - do_backup() - robotize() - -/obj/item/organ/internal/voxstack/examine(mob/user) - . = ..() - - var/user_vox = user.is_species(SPECIES_VOX) || user.is_species(SPECIES_VOX_ARMALIS) - if (istype(backup)) - var/owner_viable = find_dead_player(ownerckey, TRUE) - if (user_vox) - to_chat(user, SPAN_NOTICE("The integrity light on [src] blinks [owner_viable ? "rapidly. It can be implanted." : "slowly. It is dormant."]")) - else - to_chat(user, SPAN_NOTICE("A light on [src] blinks [owner_viable ? "rapidly" : "slowly"].")) - else if (user_vox) - to_chat(user, SPAN_NOTICE("The integrity light on [src] is off. It is empty and lifeless.")) - -/obj/item/organ/internal/voxstack/emp_act() - return - -/obj/item/organ/internal/voxstack/getToxLoss() - return 0 - -/obj/item/organ/internal/voxstack/proc/do_backup() - if(owner && owner.stat != DEAD && !is_broken() && owner.mind) - languages = owner.languages.Copy() - backup = owner.mind - default_language = owner.default_language - if(owner.ckey) - ownerckey = owner.ckey - -/obj/item/organ/internal/voxstack/proc/backup_inviable() - return (!istype(backup) || backup == owner.mind || (backup.current && backup.current.stat != DEAD)) - -/obj/item/organ/internal/voxstack/replaced() - if(!..()) return 0 - if(prompting) // Don't spam the player with twenty dialogs because someone doesn't know what they're doing or panicking. - return 0 - if(owner && !backup_inviable()) - var/current_owner = owner - prompting = TRUE - var/response = alert(find_dead_player(ownerckey, 1), "Your neural backup has been placed into a new body. Do you wish to return to life as the mind of [backup.name]?", "Resleeving", "Yes", "No") - prompting = FALSE - if(src && response == "Yes" && owner == current_owner) - overwrite() - sleep(-1) - do_backup() - - return 1 - -/obj/item/organ/internal/voxstack/removed() - var/obj/item/organ/external/head = owner.get_organ(parent_organ) - owner.visible_message(SPAN_DANGER("\The [src] rips gaping holes in \the [owner]'s [head.name] as it is torn loose!")) - head.take_external_damage(rand(15,20)) - for(var/obj/item/organ/internal/O in head.contents) - O.take_internal_damage(rand(30,70)) - do_backup() - ..() - -/obj/item/organ/internal/voxstack/proc/overwrite() - if(owner.mind && owner.ckey) //Someone is already in this body! - if(owner.mind == backup) // Oh, it's the same mind in the backup. Someone must've spammed the 'Start Procedure' button in a panic. - return - owner.visible_message(SPAN_DANGER("\The [owner] spasms violently!")) - owner.ghostize() - backup.active = 1 - backup.transfer_to(owner) - if (default_language) - owner.default_language = default_language - owner.languages = languages.Copy() - to_chat(owner, SPAN_NOTICE("Consciousness slowly creeps over you as your new body awakens.")) - -/datum/species/vox/handle_death(var/mob/living/carbon/human/H) - ..() - var/obj/item/organ/internal/voxstack/stack = H.get_organ(BP_STACK) - if (stack) - stack.do_backup() diff --git a/code/modules/organs/internal/stomach.dm b/code/modules/organs/internal/stomach.dm deleted file mode 100644 index 6becb16e6fa0b..0000000000000 --- a/code/modules/organs/internal/stomach.dm +++ /dev/null @@ -1,142 +0,0 @@ -#define PUKE_ACTION_NAME "Empty Stomach" - -/obj/item/organ/internal/stomach - name = "stomach" - desc = "Gross. This is hard to stomach." - icon_state = "stomach" - dead_icon = "stomach" - organ_tag = BP_STOMACH - parent_organ = BP_GROIN - var/stomach_capacity - var/datum/reagents/metabolism/ingested - var/next_cramp = 0 - -/obj/item/organ/internal/stomach/Destroy() - QDEL_NULL(ingested) - . = ..() - -/obj/item/organ/internal/stomach/New() - ..() - ingested = new/datum/reagents/metabolism(240, owner, CHEM_INGEST) - if(!ingested.my_atom) - ingested.my_atom = src - if(species.gluttonous) - action_button_name = PUKE_ACTION_NAME - -/obj/item/organ/internal/stomach/removed() - . = ..() - ingested.my_atom = src - ingested.parent = null - -/obj/item/organ/internal/stomach/replaced() - . = ..() - ingested.my_atom = owner - ingested.parent = owner - -/obj/item/organ/internal/stomach/robotize() - . = ..() - icon_state = "stomach-prosthetic" - -/obj/item/organ/internal/stomach/proc/can_eat_atom(var/atom/movable/food) - return !isnull(get_devour_time(food)) - -/obj/item/organ/internal/stomach/proc/is_full(var/atom/movable/food) - var/total = Floor(ingested.total_volume / 10) - for(var/a in contents + food) - if(ismob(a)) - var/mob/M = a - total += M.mob_size - else if(isobj(a)) - var/obj/item/I = a - total += I.get_storage_cost() - else - continue - if(total > species.stomach_capacity) - return TRUE - return FALSE - -/obj/item/organ/internal/stomach/proc/get_devour_time(var/atom/movable/food) - if(iscarbon(food) || isanimal(food)) - var/mob/living/L = food - if((species.gluttonous & GLUT_TINY) && (L.mob_size <= MOB_TINY) && !ishuman(food)) // Anything MOB_TINY or smaller - return DEVOUR_SLOW - else if((species.gluttonous & GLUT_SMALLER) && owner.mob_size > L.mob_size) // Anything we're larger than - return DEVOUR_SLOW - else if(species.gluttonous & GLUT_ANYTHING) // Eat anything ever - return DEVOUR_FAST - else if(istype(food, /obj/item) && !istype(food, /obj/item/holder)) //Don't eat holders. They are special. - var/obj/item/I = food - var/cost = I.get_storage_cost() - if(cost != ITEM_SIZE_NO_CONTAINER) - if((species.gluttonous & GLUT_ITEM_TINY) && cost < 4) - return DEVOUR_SLOW - else if((species.gluttonous & GLUT_ITEM_NORMAL) && cost <= 4) - return DEVOUR_SLOW - else if(species.gluttonous & GLUT_ITEM_ANYTHING) - return DEVOUR_FAST - -/obj/item/organ/internal/stomach/refresh_action_button() - . = ..() - if(.) - action.button_icon_state = "puke" - if(action.button) action.button.UpdateIcon() - -/obj/item/organ/internal/stomach/attack_self(mob/user) - . = ..() - if(. && action_button_name == PUKE_ACTION_NAME && owner && !owner.incapacitated()) - owner.empty_stomach() - refresh_action_button() - -/obj/item/organ/internal/stomach/return_air() - return null - -// This call needs to be split out to make sure that all the ingested things are metabolised -// before the process call is made on any of the other organs -/obj/item/organ/internal/stomach/proc/metabolize() - if(is_usable()) - ingested.metabolize() - -#define STOMACH_VOLUME 65 - -/obj/item/organ/internal/stomach/Process() - ..() - - if(owner) - var/functioning = is_usable() - if(damage >= min_bruised_damage && prob((damage / max_damage) * 100)) - functioning = FALSE - - if(functioning) - for(var/mob/living/M in contents) - if(M.stat == DEAD) - qdel(M) - continue - - M.adjustBruteLoss(3) - M.adjustFireLoss(3) - M.adjustToxLoss(3) - - var/digestion_product = M.get_digestion_product() - if(digestion_product) - ingested.add_reagent(digestion_product, rand(1,3)) - - else if(world.time >= next_cramp) - next_cramp = world.time + rand(200,800) - owner.custom_pain("Your stomach cramps agonizingly!",1) - - var/alcohol_volume = ingested.get_reagent_amount(/datum/reagent/ethanol) - - var/alcohol_threshold_met = alcohol_volume > STOMACH_VOLUME / 2 - if(alcohol_threshold_met && (owner.disabilities & EPILEPSY) && prob(20)) - owner.seizure() - - // Alcohol counts as double volume for the purposes of vomit probability - var/effective_volume = ingested.total_volume + alcohol_volume - - // Just over the limit, the probability will be low. It rises a lot such that at double ingested it's 64% chance. - var/vomit_probability = (effective_volume / STOMACH_VOLUME) ** 6 - if(prob(vomit_probability)) - owner.vomit() - -#undef STOMACH_VOLUME -#undef PUKE_ACTION_NAME diff --git a/code/modules/organs/internal/voice.dm b/code/modules/organs/internal/voice.dm deleted file mode 100644 index 2cffd4126b0dd..0000000000000 --- a/code/modules/organs/internal/voice.dm +++ /dev/null @@ -1,18 +0,0 @@ -/obj/item/organ/internal/voicebox - name = "vocal chords" - icon_state = "voicebox" - parent_organ = BP_CHEST - organ_tag = BP_VOICE - var/list/assists_languages - -/obj/item/organ/internal/voicebox/Initialize() - . = ..() - var/list/language_datums = list() - if(LAZYLEN(assists_languages)) - for(var/L in assists_languages) - var/lang = all_languages[L] - if(lang) language_datums[lang] = TRUE - assists_languages = language_datums - -/obj/item/organ/internal/voicebox/get_mechanical_assisted_descriptor() - return "surgically altered [name]" diff --git a/code/modules/organs/organ.dm b/code/modules/organs/organ.dm deleted file mode 100644 index ab1260449743e..0000000000000 --- a/code/modules/organs/organ.dm +++ /dev/null @@ -1,397 +0,0 @@ -var/global/list/organ_cache = list() - -/obj/item/organ - name = "organ" - icon = 'icons/obj/surgery.dmi' - germ_level = 0 - w_class = ITEM_SIZE_TINY - default_action_type = /datum/action/item_action/organ - - // Strings. - var/organ_tag = "organ" // Unique identifier. - var/parent_organ = BP_CHEST // Organ holding this object. - - // Status tracking. - var/status = 0 // Various status flags (such as robotic) - var/vital // Lose a vital limb, die immediately. - - // Reference data. - var/mob/living/carbon/human/owner // Current mob owning the organ. - var/datum/dna/dna // Original DNA. - var/datum/species/species // Original species. - - // Damage vars. - var/damage = 0 // Current damage to the organ - var/min_broken_damage = 30 // Damage before becoming broken - var/max_damage = 30 // Damage cap - var/rejecting // Is this organ already being rejected? - - var/death_time - - // Bioprinter stats - var/can_be_printed = TRUE - var/print_cost - -/obj/item/organ/Destroy() - owner = null - dna = null - return ..() - -/obj/item/organ/proc/refresh_action_button() - return action - -/obj/item/organ/attack_self(var/mob/user) - return (owner && loc == owner && owner == user) - -/obj/item/organ/proc/update_health() - return - -/obj/item/organ/proc/is_broken() - return (damage >= min_broken_damage || (status & ORGAN_CUT_AWAY) || (status & ORGAN_BROKEN)) - -//Second argument may be a dna datum; if null will be set to holder's dna. -/obj/item/organ/New(var/mob/living/carbon/holder, var/datum/dna/given_dna) - ..(holder) - if(!istype(given_dna)) - given_dna = null - - if(max_damage) - min_broken_damage = Floor(max_damage / 2) - else - max_damage = min_broken_damage * 2 - - if(istype(holder)) - owner = holder - if(!given_dna && holder.dna) - given_dna = holder.dna - else - log_debug("[src] spawned in [holder] without a proper DNA.") - - if (given_dna) - set_dna(given_dna) - if (!species) - species = all_species[SPECIES_HUMAN] - species.resize_organ(src) - - create_reagents(5 * (w_class-1)**2) - reagents.add_reagent(/datum/reagent/nutriment/protein, reagents.maximum_volume) - - update_icon() - -/obj/item/organ/proc/set_dna(var/datum/dna/new_dna) - if(new_dna) - dna = new_dna.Clone() - if(!blood_DNA) - blood_DNA = list() - blood_DNA.Cut() - blood_DNA[dna.unique_enzymes] = dna.b_type - species = all_species[dna.species] - if (!species) - crash_with("Invalid DNA species. Expected a valid species name as string, was: [log_info_line(dna.species)]") - -/obj/item/organ/proc/die() - damage = max_damage - status |= ORGAN_DEAD - STOP_PROCESSING(SSobj, src) - death_time = world.time - if(owner && vital) - owner.death() - -/obj/item/organ/Process() - - if(loc != owner) - owner = null - - //dead already, no need for more processing - if(status & ORGAN_DEAD) - return - - //check if we've hit max_damage - if(damage >= max_damage) - die() - return - - //Process infections - if (BP_IS_ROBOTIC(src) || (owner && owner.species && (owner.species.species_flags & SPECIES_FLAG_IS_PLANT))) - germ_level = 0 - return - - // Don't process if we're in a freezer, an MMI or a stasis bag.or a freezer or something I dunno - if(is_preserved()) - return - - if(!owner && reagents) - var/datum/reagent/blood/B = locate(/datum/reagent/blood) in reagents.reagent_list - if(B && prob(40)) - reagents.remove_reagent(/datum/reagent/blood,0.1) - blood_splatter(src,B,1) - if(config.organs_decay) - take_general_damage(rand(1,3)) - germ_level += rand(2,6) - if(germ_level >= INFECTION_LEVEL_TWO) - germ_level += rand(2,6) - if(germ_level >= INFECTION_LEVEL_THREE) - die() - - else if(owner && owner.bodytemperature >= 170) //cryo stops germs from moving and doing their bad stuffs - //** Handle antibiotics and curing infections - handle_antibiotics() - handle_rejection() - handle_germ_effects() - -/obj/item/organ/proc/is_preserved() - if(istype(loc,/obj/item/organ)) - var/obj/item/organ/O = loc - return O.is_preserved() - else - return (istype(loc,/obj/item/device/mmi) || istype(loc,/obj/structure/closet/body_bag/cryobag) || istype(loc,/obj/structure/closet/crate/freezer) || istype(loc,/obj/item/storage/box/freezer)) - -/obj/item/organ/examine(mob/user) - . = ..(user) - show_decay_status(user) - -/obj/item/organ/proc/show_decay_status(mob/user) - if(status & ORGAN_DEAD) - to_chat(user, "The decay has set into \the [src].") - -/obj/item/organ/proc/handle_germ_effects() - //** Handle the effects of infections - var/virus_immunity = owner.virus_immunity() //reduces the amount of times we need to call this proc - var/antibiotics = owner.reagents.get_reagent_amount(/datum/reagent/spaceacillin) - - if (germ_level > 0 && germ_level < INFECTION_LEVEL_ONE/2 && prob(virus_immunity*0.3)) - germ_level-- - - if (germ_level >= INFECTION_LEVEL_ONE/2) - //aiming for germ level to go from ambient to INFECTION_LEVEL_TWO in an average of 15 minutes, when immunity is full. - if(antibiotics < 5 && prob(round(germ_level/6 * owner.immunity_weakness() * 0.01))) - if(virus_immunity > 0) - germ_level += clamp(round(1/virus_immunity), 1, 10) // Immunity starts at 100. This doubles infection rate at 50% immunity. Rounded to nearest whole. - else // Will only trigger if immunity has hit zero. Once it does, 10x infection rate. - germ_level += 10 - - if(germ_level >= INFECTION_LEVEL_ONE) - var/fever_temperature = (owner.species.heat_level_1 - owner.species.body_temperature - 5)* min(germ_level/INFECTION_LEVEL_TWO, 1) + owner.species.body_temperature - owner.bodytemperature += clamp((fever_temperature - T20C)/BODYTEMP_COLD_DIVISOR + 1, 0, fever_temperature - owner.bodytemperature) - - if (germ_level >= INFECTION_LEVEL_TWO) - var/obj/item/organ/external/parent = owner.get_organ(parent_organ) - //spread germs - if (antibiotics < 5 && parent.germ_level < germ_level && ( parent.germ_level < INFECTION_LEVEL_ONE*2 || prob(owner.immunity_weakness() * 0.3) )) - parent.germ_level++ - - if (prob(3)) //about once every 30 seconds - take_general_damage(1,silent=prob(30)) - -/obj/item/organ/proc/handle_rejection() - // Process unsuitable transplants. TODO: consider some kind of - // immunosuppressant that changes transplant data to make it match. - if(owner.virus_immunity() < 10) //for now just having shit immunity will suppress it - return - if(BP_IS_ROBOTIC(src)) - return - if(dna) - if(!rejecting) - if(owner.blood_incompatible(dna.b_type, species)) - rejecting = 1 - else - rejecting++ //Rejection severity increases over time. - if(rejecting % 10 == 0) //Only fire every ten rejection ticks. - switch(rejecting) - if(1 to 50) - germ_level++ - if(51 to 200) - germ_level += rand(1,2) - if(201 to 500) - germ_level += rand(2,3) - if(501 to INFINITY) - germ_level += rand(3,5) - owner.reagents.add_reagent(/datum/reagent/toxin, rand(1,2)) - -/obj/item/organ/proc/receive_chem(chemical as obj) - return 0 - -/obj/item/organ/proc/remove_rejuv() - qdel(src) - -/obj/item/organ/proc/rejuvenate(var/ignore_prosthetic_prefs) - damage = 0 - status = initial(status) - if(!ignore_prosthetic_prefs && owner && owner.client && owner.client.prefs && owner.client.prefs.real_name == owner.real_name) - var/status = owner.client.prefs.organ_data[organ_tag] - if(status == "assisted") - mechassist() - else if(status == "mechanical") - robotize() - if(species) - species.post_organ_rejuvenate(src, owner) - -//Germs -/obj/item/organ/proc/handle_antibiotics() - if(!owner || !germ_level) - return - - var/antibiotics = owner.chem_effects[CE_ANTIBIOTIC] - if (!antibiotics) - return - - if (germ_level < INFECTION_LEVEL_ONE) - germ_level = 0 //cure instantly - else if (germ_level < INFECTION_LEVEL_TWO) - germ_level -= 5 //at germ_level == 500, this should cure the infection in 5 minutes - else - germ_level -= 3 //at germ_level == 1000, this will cure the infection in 10 minutes - if(owner && owner.lying) - germ_level -= 2 - germ_level = max(0, germ_level) - -/obj/item/organ/proc/take_general_damage(var/amount, var/silent = FALSE) - CRASH("Not Implemented") - -/obj/item/organ/proc/heal_damage(amount) - if (can_recover()) - damage = clamp(damage - round(amount, 0.1), 0, max_damage) - - -/obj/item/organ/proc/robotize() //Being used to make robutt hearts, etc - status = ORGAN_ROBOTIC - -/obj/item/organ/proc/mechassist() //Used to add things like pacemakers, etc - status = ORGAN_ASSISTED - -/** - * Remove an organ - * - * drop_organ - if true, organ will be dropped at the loc of its former owner - * - * Also, Observer Pattern Implementation: Dismembered Handling occurs here. - */ -/obj/item/organ/proc/removed(var/mob/living/user, var/drop_organ=1) - - if(!istype(owner)) - return - GLOB.dismembered_event.raise_event(owner, src) - - action_button_name = null - - if(drop_organ) - dropInto(owner.loc) - - START_PROCESSING(SSobj, src) - rejecting = null - if(!BP_IS_ROBOTIC(src)) - var/datum/reagent/blood/organ_blood = locate(/datum/reagent/blood) in reagents.reagent_list //TODO fix this and all other occurences of locate(/datum/reagent/blood) horror - if(!organ_blood || !organ_blood.data["blood_DNA"]) - owner.vessel.trans_to(src, 5, 1, 1) - - if(owner && vital) - if(user) - admin_attack_log(user, owner, "Removed a vital organ ([src]).", "Had a vital organ ([src]) removed.", "removed a vital organ ([src]) from") - owner.death() - - owner = null - -/obj/item/organ/proc/replaced(var/mob/living/carbon/human/target, var/obj/item/organ/external/affected) - owner = target - action_button_name = initial(action_button_name) - forceMove(owner) //just in case - if(BP_IS_ROBOTIC(src)) - set_dna(owner.dna) - return 1 - -/obj/item/organ/attack(var/mob/target, var/mob/user) - - if(status & ORGAN_ROBOTIC || !istype(target) || !istype(user) || (user != target && user.a_intent == I_HELP)) - return ..() - - if(alert("Do you really want to use this organ as food? It will be useless for anything else afterwards.",,"Ew, no.","Bon appetit!") == "Ew, no.") - to_chat(user, "You successfully repress your cannibalistic tendencies.") - return - if(!user.unEquip(src)) - return - var/obj/item/reagent_containers/food/snacks/organ/O = new(get_turf(src)) - O.SetName(name) - O.appearance = src - if(reagents && reagents.total_volume) - reagents.trans_to(O, reagents.total_volume) - transfer_fingerprints_to(O) - user.put_in_active_hand(O) - qdel(src) - target.attackby(O, user) - -/obj/item/organ/proc/can_feel_pain() - return (!BP_IS_ROBOTIC(src) && (!species || !(species.species_flags & SPECIES_FLAG_NO_PAIN))) - -/obj/item/organ/proc/is_usable() - return !(status & (ORGAN_CUT_AWAY|ORGAN_MUTATED|ORGAN_DEAD)) - -/obj/item/organ/proc/can_recover() - return (max_damage > 0) && !(status & ORGAN_DEAD) || death_time >= world.time - ORGAN_RECOVERY_THRESHOLD - -/obj/item/organ/proc/get_scan_results(var/tag = FALSE) - . = list() - if(BP_IS_CRYSTAL(src)) - . += tag ? "Crystalline" : "Crystalline" - else if(BP_IS_ASSISTED(src)) - . += tag ? "Assisted" : "Assisted" - else if(BP_IS_ROBOTIC(src)) - . += tag ? "Mechanical" : "Mechanical" - if(status & ORGAN_CUT_AWAY) - . += tag ? "Severed" : "Severed" - if(status & ORGAN_MUTATED) - . += tag ? "Genetic Deformation" : "Genetic Deformation" - if(status & ORGAN_DEAD) - if(can_recover()) - . += tag ? "Decaying" : "Decaying" - else - . += tag ? "Necrotic" : "Necrotic" - if(BP_IS_BRITTLE(src)) - . += tag ? "Brittle" : "Brittle" - - switch (germ_level) - if (INFECTION_LEVEL_ONE to INFECTION_LEVEL_ONE + ((INFECTION_LEVEL_TWO - INFECTION_LEVEL_ONE) / 3)) - . += "Mild Infection" - if (INFECTION_LEVEL_ONE + ((INFECTION_LEVEL_TWO - INFECTION_LEVEL_ONE) / 3) to INFECTION_LEVEL_ONE + (2 * (INFECTION_LEVEL_TWO - INFECTION_LEVEL_ONE) / 3)) - . += "Mild Infection+" - if (INFECTION_LEVEL_ONE + (2 * (INFECTION_LEVEL_TWO - INFECTION_LEVEL_ONE) / 3) to INFECTION_LEVEL_TWO) - . += "Mild Infection++" - if (INFECTION_LEVEL_TWO to INFECTION_LEVEL_TWO + ((INFECTION_LEVEL_THREE - INFECTION_LEVEL_THREE) / 3)) - if(tag) - . += "Acute Infection" - else - . += "Acute Infection" - if (INFECTION_LEVEL_TWO + ((INFECTION_LEVEL_THREE - INFECTION_LEVEL_THREE) / 3) to INFECTION_LEVEL_TWO + (2 * (INFECTION_LEVEL_THREE - INFECTION_LEVEL_TWO) / 3)) - if(tag) - . += "Acute Infection+" - else - . += "Acute Infection+" - if (INFECTION_LEVEL_TWO + (2 * (INFECTION_LEVEL_THREE - INFECTION_LEVEL_TWO) / 3) to INFECTION_LEVEL_THREE) - if(tag) - . += "Acute Infection++" - else - . += "Acute Infection++" - if (INFECTION_LEVEL_THREE to INFINITY) - if(tag) - . += "Septic" - else - . += "Septic" - if(rejecting) - if(tag) - . += "Genetic Rejection" - else - . += "Genetic Rejection" - -//used by stethoscope -/obj/item/organ/proc/listen() - return - -/obj/item/organ/proc/get_mechanical_assisted_descriptor() - return "mechanically-assisted [name]" - - -/** -* Pre-surgery modification of the organ if it has status|ORGAN_CONFIGURE -* Halts surgery if the return value is truthy -*/ -/obj/item/organ/proc/surgery_configure(mob/living/user, mob/living/carbon/human/target, obj/item/organ/parent, obj/item/tool, decl/surgery_step/action) - return diff --git a/code/modules/organs/pain.dm b/code/modules/organs/pain.dm deleted file mode 100644 index f8bac9065f256..0000000000000 --- a/code/modules/organs/pain.dm +++ /dev/null @@ -1,115 +0,0 @@ -/mob/proc/flash_pain(var/target) - if(pain) - animate(pain, alpha = target, time = 15, easing = ELASTIC_EASING) - animate(pain, alpha = 0, time = 20) - -/mob/var/last_pain_message -/mob/var/next_pain_time = 0 - -// message is the custom message to be displayed -// power decides how much painkillers will stop the message -// force means it ignores anti-spam timer -/mob/living/carbon/proc/custom_pain(var/message, var/power, var/force, var/obj/item/organ/external/affecting, var/nohalloss) - if(!message || stat || !can_feel_pain() || chem_effects[CE_PAINKILLER] > power) - return 0 - - power -= chem_effects[CE_PAINKILLER]/2 //Take the edge off. - - // Excessive halloss is horrible, just give them enough to make it visible. - if(!nohalloss && power) - if(affecting) - affecting.add_pain(Ceil(power/2)) - else - adjustHalLoss(Ceil(power/2)) - - flash_pain(min(round(2*power)+55, 255)) - - // Anti message spam checks - if(force || (message != last_pain_message) || (world.time >= next_pain_time)) - last_pain_message = message - custom_pain_emote(message, power) - - next_pain_time = world.time + (100-power) - - -/// Handles displaying emotes for `custom_pain()`. Separated into its own proc to account for subtype overrides. -/mob/living/carbon/proc/custom_pain_emote(message, power) - if(power >= 70) - to_chat(src, "[message]") - else if(power >= 40) - to_chat(src, "[message]") - else if(power >= 10) - to_chat(src, "[message]") - else - to_chat(src, "[message]") - - -// Separated out as only human subtypes define `species` -/mob/living/carbon/human/custom_pain_emote(message, power) - . = ..() - var/force_emote = species.get_pain_emote(src, power) - if(force_emote && prob(power)) - var/decl/emote/use_emote = usable_emotes[force_emote] - if(!(use_emote.message_type == AUDIBLE_MESSAGE && silent)) - emote(force_emote) - - -/mob/living/carbon/human/proc/handle_pain() - if(stat) - return - if(!can_feel_pain()) - return - if(world.time < next_pain_time) - return - var/maxdam = 0 - var/obj/item/organ/external/damaged_organ = null - for(var/obj/item/organ/external/E in organs) - if(!E.can_feel_pain()) continue - var/dam = E.get_damage() - // make the choice of the organ depend on damage, - // but also sometimes use one of the less damaged ones - if(dam > maxdam && (maxdam == 0 || prob(70)) ) - damaged_organ = E - maxdam = dam - if(damaged_organ && chem_effects[CE_PAINKILLER] < maxdam) - if(maxdam > 10 && paralysis) - paralysis = max(0, paralysis - round(maxdam/10)) - if(maxdam > 50 && prob(maxdam / 5)) - unequip_item() - var/burning = damaged_organ.burn_dam > damaged_organ.brute_dam - var/msg - switch(maxdam) - if(1 to 10) - msg = "Your [damaged_organ.name] [burning ? "burns" : "hurts"]." - if(11 to 90) - msg = "Your [damaged_organ.name] [burning ? "burns" : "hurts"] badly!" - if(91 to 10000) - msg = "OH GOD! Your [damaged_organ.name] is [burning ? "on fire" : "hurting terribly"]!" - custom_pain(msg, maxdam, prob(10), damaged_organ, TRUE) - // Damage to internal organs hurts a lot. - for(var/obj/item/organ/internal/I in internal_organs) - if(prob(1) && !((I.status & ORGAN_DEAD) || BP_IS_ROBOTIC(I)) && I.damage > 5) - var/obj/item/organ/external/parent = get_organ(I.parent_organ) - var/pain = 10 - var/message = "You feel a dull pain in your [parent.name]" - if(I.is_bruised()) - pain = 25 - message = "You feel a pain in your [parent.name]" - if(I.is_broken()) - pain = 50 - message = "You feel a sharp pain in your [parent.name]" - src.custom_pain(message, pain, affecting = parent) - - - if(prob(1)) - switch(getToxLoss()) - if(5 to 17) - custom_pain("Your body stings slightly.", getToxLoss()) - if(17 to 35) - custom_pain("Your body stings.", getToxLoss()) - if(35 to 60) - custom_pain("Your body stings strongly.", getToxLoss()) - if(60 to 100) - custom_pain("Your whole body hurts badly.", getToxLoss()) - if(100 to INFINITY) - custom_pain("Your body aches all over, it's driving you mad.", getToxLoss()) diff --git a/code/modules/organs/robolimbs.dm b/code/modules/organs/robolimbs.dm deleted file mode 100644 index c437203fcec85..0000000000000 --- a/code/modules/organs/robolimbs.dm +++ /dev/null @@ -1,232 +0,0 @@ -var/global/list/all_robolimbs = list() -var/global/list/chargen_robolimbs = list() -var/global/datum/robolimb/basic_robolimb - -/proc/populate_robolimb_list() - basic_robolimb = new() - for(var/limb_type in typesof(/datum/robolimb)) - var/datum/robolimb/R = new limb_type() - all_robolimbs[R.company] = R - if(!R.unavailable_at_chargen) - chargen_robolimbs[R.company] = R - - -/datum/robolimb - var/company = "Unbranded" // Shown when selecting the limb. - var/desc = "A generic unbranded robotic prosthesis." // Seen when examining a limb. - var/icon = 'icons/mob/human_races/cyberlimbs/robotic.dmi' // Icon base to draw from. - var/unavailable_at_chargen // If set, not available at chargen. - var/unavailable_at_fab // If set, cannot be fabricated. - var/can_eat - var/has_eyes = TRUE - var/can_feel_pain - var/skintone - var/list/species_cannot_use = list() - var/list/restricted_to = list() - var/list/applies_to_part = list() //TODO. - var/list/allowed_bodytypes = list(SPECIES_HUMAN, SPECIES_IPC, SPECIES_SKRELL, SPECIES_UNATHI) - -/datum/robolimb/bishop - company = "Bishop" - desc = "This limb has a white polymer casing with blue holo-displays." - icon = 'icons/mob/human_races/cyberlimbs/bishop/bishop_main.dmi' - unavailable_at_fab = 1 - -/datum/robolimb/bishop/rook - company = "Bishop Rook" - desc = "This limb has a polished metallic casing and a holographic face emitter." - icon = 'icons/mob/human_races/cyberlimbs/bishop/bishop_rook.dmi' - has_eyes = FALSE - unavailable_at_fab = 1 - -/datum/robolimb/bishop/alt - company = "Bishop Alt." - icon = 'icons/mob/human_races/cyberlimbs/bishop/bishop_alt.dmi' - applies_to_part = list(BP_HEAD) - unavailable_at_fab = 1 - -/datum/robolimb/bishop/alt/monitor - company = "Bishop Monitor." - icon = 'icons/mob/human_races/cyberlimbs/bishop/bishop_monitor.dmi' - allowed_bodytypes = list(SPECIES_IPC) - unavailable_at_fab = 1 - -/datum/robolimb/hephaestus - company = "Hephaestus Industries" - desc = "This limb has a militaristic black and green casing with gold stripes." - icon = 'icons/mob/human_races/cyberlimbs/hephaestus/hephaestus_main.dmi' - unavailable_at_fab = 1 - -/datum/robolimb/hephaestus/alt - company = "Hephaestus Alt." - icon = 'icons/mob/human_races/cyberlimbs/hephaestus/hephaestus_alt.dmi' - applies_to_part = list(BP_HEAD) - unavailable_at_fab = 1 - -/datum/robolimb/hephaestus/titan - company = "Hephaestus Titan" - desc = "This limb has a casing of an olive drab finish, providing a reinforced housing look." - icon = 'icons/mob/human_races/cyberlimbs/hephaestus/hephaestus_titan.dmi' - has_eyes = FALSE - unavailable_at_fab = 1 - -/datum/robolimb/hephaestus/alt/monitor - company = "Hephaestus Monitor." - icon = 'icons/mob/human_races/cyberlimbs/hephaestus/hephaestus_monitor.dmi' - allowed_bodytypes = list(SPECIES_IPC) - can_eat = null - unavailable_at_fab = 1 - -/datum/robolimb/zenghu - company = "Zeng-Hu" - desc = "This limb has a rubbery fleshtone covering with visible seams." - icon = 'icons/mob/human_races/cyberlimbs/zenghu/zenghu_main.dmi' - can_eat = 1 - unavailable_at_fab = 1 - allowed_bodytypes = list(SPECIES_HUMAN,SPECIES_IPC) - -/datum/robolimb/zenghu/spirit - company = "Zeng-Hu Spirit" - desc = "This limb has a sleek black and white polymer finish." - icon = 'icons/mob/human_races/cyberlimbs/zenghu/zenghu_spirit.dmi' - unavailable_at_fab = 1 - -/datum/robolimb/xion - company = "Xion" - desc = "This limb has a minimalist black and red casing." - icon = 'icons/mob/human_races/cyberlimbs/xion/xion_main.dmi' - -/datum/robolimb/xion/econo - company = "Xion Econ" - desc = "This skeletal mechanical limb has a minimalist black and red casing." - icon = 'icons/mob/human_races/cyberlimbs/xion/xion_econo.dmi' - unavailable_at_fab = 1 - -/datum/robolimb/xion/alt - company = "Xion Alt." - icon = 'icons/mob/human_races/cyberlimbs/xion/xion_alt.dmi' - applies_to_part = list(BP_HEAD) - unavailable_at_fab = 1 - -/datum/robolimb/xion/alt/monitor - company = "Xion Monitor." - icon = 'icons/mob/human_races/cyberlimbs/xion/xion_monitor.dmi' - allowed_bodytypes = list(SPECIES_IPC) - can_eat = null - unavailable_at_fab = 1 - -/datum/robolimb/nanotrasen - company = "NanoTrasen" - desc = "This limb is made from a cheap polymer." - icon = 'icons/mob/human_races/cyberlimbs/nanotrasen/nanotrasen_main.dmi' - -/datum/robolimb/wardtakahashi - company = "Ward-Takahashi" - desc = "This limb features sleek black and white polymers." - icon = 'icons/mob/human_races/cyberlimbs/wardtakahashi/wardtakahashi_main.dmi' - can_eat = 1 - unavailable_at_fab = 1 - -/datum/robolimb/economy - company = "Ward-Takahashi Econ." - desc = "A simple robotic limb with retro design. Seems rather stiff." - icon = 'icons/mob/human_races/cyberlimbs/wardtakahashi/wardtakahashi_economy.dmi' - -/datum/robolimb/wardtakahashi/alt - company = "Ward-Takahashi Alt." - icon = 'icons/mob/human_races/cyberlimbs/wardtakahashi/wardtakahashi_alt.dmi' - applies_to_part = list(BP_HEAD) - unavailable_at_fab = 1 - -/datum/robolimb/wardtakahashi/alt/monitor - company = "Ward-Takahashi Monitor." - icon = 'icons/mob/human_races/cyberlimbs/wardtakahashi/wardtakahashi_monitor.dmi' - allowed_bodytypes = list(SPECIES_IPC) - can_eat = null - unavailable_at_fab = 1 - -/datum/robolimb/morpheus - company = "Morpheus" - desc = "This limb is simple and functional; no effort has been made to make it look human." - icon = 'icons/mob/human_races/cyberlimbs/morpheus/morpheus_main.dmi' - unavailable_at_fab = 1 - -/datum/robolimb/morpheus/alt - company = "Morpheus Atlantis" - icon = 'icons/mob/human_races/cyberlimbs/morpheus/morpheus_atlantis.dmi' - applies_to_part = list(BP_HEAD) - unavailable_at_fab = 1 - -/datum/robolimb/morpheus/alt/blitz - company = "Morpheus Blitz" - icon = 'icons/mob/human_races/cyberlimbs/morpheus/morpheus_blitz.dmi' - applies_to_part = list(BP_HEAD) - has_eyes = FALSE - unavailable_at_fab = 1 - -/datum/robolimb/morpheus/alt/airborne - company = "Morpheus Airborne" - icon = 'icons/mob/human_races/cyberlimbs/morpheus/morpheus_airborne.dmi' - applies_to_part = list(BP_HEAD) - has_eyes = FALSE - unavailable_at_fab = 1 - -/datum/robolimb/morpheus/alt/prime - company = "Morpheus Prime" - icon = 'icons/mob/human_races/cyberlimbs/morpheus/morpheus_prime.dmi' - applies_to_part = list(BP_HEAD) - has_eyes = FALSE - unavailable_at_fab = 1 - -/datum/robolimb/mantis - company = "Morpheus Mantis" - desc = "This limb has a casing of sleek black metal and repulsive insectile design." - icon = 'icons/mob/human_races/cyberlimbs/morpheus/morpheus_mantis.dmi' - unavailable_at_fab = 1 - has_eyes = FALSE - -/datum/robolimb/morpheus/monitor - company = "Morpheus Monitor." - icon = 'icons/mob/human_races/cyberlimbs/morpheus/morpheus_monitor.dmi' - applies_to_part = list(BP_HEAD) - unavailable_at_fab = 1 - has_eyes = FALSE - allowed_bodytypes = list(SPECIES_IPC) - -/datum/robolimb/veymed - company = "Vey-Med" - desc = "This high quality limb is nearly indistinguishable from an organic one." - icon = 'icons/mob/human_races/cyberlimbs/veymed/veymed_main.dmi' - can_eat = 1 - skintone = 1 - unavailable_at_fab = 1 - species_cannot_use = list(SPECIES_IPC) - -/datum/robolimb/shellguard - company = "Shellguard" - desc = "This limb has a sturdy and heavy build to it." - icon = 'icons/mob/human_races/cyberlimbs/shellguard/shellguard_main.dmi' - -/datum/robolimb/shellguard/alt - company = "Shellguard Alt." - icon = 'icons/mob/human_races/cyberlimbs/shellguard/shellguard_alt.dmi' - applies_to_part = list(BP_HEAD) - unavailable_at_fab = 1 - -/datum/robolimb/shellguard/alt/monitor - company = "Shellguard Monitor." - icon = 'icons/mob/human_races/cyberlimbs/shellguard/shellguard_monitor.dmi' - applies_to_part = list(BP_HEAD) - unavailable_at_fab = 1 - allowed_bodytypes = list(SPECIES_IPC) - -/datum/robolimb/vox - company = "Arkmade" - icon = 'icons/mob/human_races/cyberlimbs/vox/primalis.dmi' - unavailable_at_fab = 1 - allowed_bodytypes = list(SPECIES_VOX) - species_cannot_use = list(SPECIES_VOX_ARMALIS) - -/datum/robolimb/vox/crap - company = "Improvised" - icon = 'icons/mob/human_races/cyberlimbs/vox/improvised.dmi' diff --git a/code/modules/overmap/README.dm b/code/modules/overmap/README.dm deleted file mode 100644 index 97d8272ccf4bf..0000000000000 --- a/code/modules/overmap/README.dm +++ /dev/null @@ -1,87 +0,0 @@ -/* -The overmap system allows adding new maps to the big 'galaxy' map. -There's overmap zlevel, that looks like a map. On it, token objects (overmap objects) are moved, representing ship movement etc. -No actual turfs are moved, you would need exploration shuttles or teleports to move atoms between different sectors/ships. -Unless stated otherwise, you just need to place any of things below somewhere on the map and they'll handle the rest. - -************************************************************* -# How to make new sector -************************************************************* -0. Map whatever. -1. Make /obj/effect/overmap/visitable/sector/[whatever] - If you want explorations shuttles be able to dock here, remember to set waypoints lists -2. Put /obj/effect/overmap/visitable/sector/[whatever] on the map. Even if it's multiz, only one is needed, on any z. -3. Done. - -************************************************************* -# How to make new ship -************************************************************* -0. Map whatever. -1. Make /obj/effect/overmap/visitable/ship/[whatever] - If you want explorations shuttles be able to dock here, remember to set waypoints lists -2. Put /obj/effect/overmap/visitable/ship/[whatever] on the map. If it's multiz, only one is needed, on any z. -3. Put Helm Console anywhere on the map. -4. Put Engines Control Console anywhere on the map. -5. Put some engines hooked up to gas supply anywhere on the map. -6. Done. - -************************************************************* -# Overmap object -************************************************************* -/obj/effect/overmap/visitable -### WHAT IT DOES -Lets overmap know this place should be represented on the map as a sector/ship. -If this zlevel (or any of connected ones for multiz) doesn't have this object, you won't be able to travel there by ovemap means. -### HOW TO USE -1. Create subtype for your ship/sector. Use /ship one for ships. -2. Put it anywhere on the ship/sector map. It will do the rest on its own during init. -If your thing is multiz, only one is needed per multiz sector/ship. - -If it's player's main base (e.g Exodus), set 'base' var to 1, so it adds itself to station_levels list. -If this place cannot be reached or left with EVA, set 'in_space' var to 0 -If you want exploration shuttles (look below) to be able to dock here, set up waypoints lists. -generic_waypoints is list of landmark_tags of waypoints any shttle should be able to visit. -restricted_waypoints is list of 'shuttle name = list(landmark_tags)' pairs for waypoints only those shuttles can visit - -************************************************************* -# Helm console -************************************************************* -/obj/machinery/computer/ship/helm -### WHAT IT DOES -Lets you steer ship around on overmap. -Lets you use autopilot. -### HOW TO USE -Just place it anywhere on the ship. - -************************************************************* -# Engines control console -************************************************************* -/obj/machinery/computer/ship/engines -### WHAT IT DOES -Lets use set thrust limits for engines of your ship. -Lets you shutdown/restart the engines. -Lets you check status of engines. -### HOW TO USE -Just place it anywhere on the ship. - -************************************************************* -# Thermal engines -************************************************************* -/obj/machinery/atmospherics/unary/engine -### WHAT IT DOES -Lets your ship move on the map at all. -### HOW TO USE -Put them on map, hook up to pipes with any gas. Heavier gas (CO2/plasma) + More pressure = more thrust. - -************************************************************* -# Exploration shuttle terminal -************************************************************* -/obj/machinery/computer/shuttle_control/explore -### WHAT IT DOES -Lets you control shuttles that can change destinations and visit other sectors/ships. -### HOW TO USE -1. Define starting shuttle landmark. -2. Define a /datum/shuttle/autodock/overmap for your shuttle. Same as normal shuttle, aside from 'range' var - how many squares on overmap it can travel on its own. -3. Place console anywhere on the ship/sector. Set shuttle_tag to shuttle's name. -4. Use. You can select destinations if you're in range (on same tile by defualt) on the map and sector has waypoints lists defined -*/ \ No newline at end of file diff --git a/code/modules/overmap/_defines.dm b/code/modules/overmap/_defines.dm deleted file mode 100644 index 8eb5acec35cd9..0000000000000 --- a/code/modules/overmap/_defines.dm +++ /dev/null @@ -1,84 +0,0 @@ -//How far from the edge of overmap zlevel could randomly placed objects spawn -#define OVERMAP_EDGE 2 -//Dimension of overmap (squares 4 lyfe) -var/global/list/map_sectors = list() - -/area/overmap - name = "System Map" - icon_state = "start" - requires_power = 0 - base_turf = /turf/unsimulated/map - -/turf/unsimulated/map - icon = 'icons/turf/space.dmi' - icon_state = "map" - permit_ao = FALSE - -/turf/unsimulated/map/edge - opacity = 1 - density = TRUE - -/turf/unsimulated/map/New() - ..() - name = "[x]-[y]" - var/list/numbers = list() - - if(x == 1 || x == GLOB.using_map.overmap_size) - numbers += list("[round(y/10)]","[round(y%10)]") - if(y == 1 || y == GLOB.using_map.overmap_size) - numbers += "-" - if(y == 1 || y == GLOB.using_map.overmap_size) - numbers += list("[round(x/10)]","[round(x%10)]") - - for(var/i = 1 to numbers.len) - var/image/I = image('icons/effects/numbers.dmi',numbers[i]) - I.pixel_x = 5*i - 2 - I.pixel_y = world.icon_size/2 - 3 - if(y == 1) - I.pixel_y = 3 - I.pixel_x = 5*i + 4 - if(y == GLOB.using_map.overmap_size) - I.pixel_y = world.icon_size - 9 - I.pixel_x = 5*i + 4 - if(x == 1) - I.pixel_x = 5*i - 2 - if(x == GLOB.using_map.overmap_size) - I.pixel_x = 5*i + 2 - overlays += I - -//list used to track which zlevels are being 'moved' by the proc below -var/global/list/moving_levels = list() -//Proc to 'move' stars in spess -//yes it looks ugly, but it should only fire when state actually change. -//null direction stops movement -/proc/toggle_move_stars(zlevel, direction) - if(!zlevel) - return - - var/gen_dir = null - if(direction & (NORTH|SOUTH)) - gen_dir += "ns" - else if(direction & (EAST|WEST)) - gen_dir += "ew" - if(!direction) - gen_dir = null - - if (moving_levels["[zlevel]"] != gen_dir) - moving_levels["[zlevel]"] = gen_dir - - var/list/spaceturfs = block(locate(1, 1, zlevel), locate(world.maxx, world.maxy, zlevel)) - for(var/turf/space/T in spaceturfs) - if(!gen_dir) - T.icon_state = "white" - else - T.icon_state = "speedspace_[gen_dir]_[rand(1,15)]" - for(var/atom/movable/AM in T) - if (AM.simulated && !AM.anchored) - AM.throw_at(get_step(T,reverse_direction(direction)), 5, 1) - CHECK_TICK - CHECK_TICK - -/proc/is_edge_turf(turf/T) //borrowed from random_map.dm:45 - var/area/A = get_area(T) - var/list/dimensions = A.get_dimensions() - return T.x <= TRANSITIONEDGE || T.x >= (dimensions["x"] - TRANSITIONEDGE + 1) || T.y <= TRANSITIONEDGE || T.y >= (dimensions["y"] - TRANSITIONEDGE + 1) \ No newline at end of file diff --git a/code/modules/overmap/disperser/disperser.dm b/code/modules/overmap/disperser/disperser.dm deleted file mode 100644 index 510d425b6cc86..0000000000000 --- a/code/modules/overmap/disperser/disperser.dm +++ /dev/null @@ -1,46 +0,0 @@ -//Most interesting stuff happens in disperser_fire.dm -//This is just basic construction and deconstruction and the like - -/obj/machinery/disperser - icon = 'icons/obj/disperser.dmi' - density = TRUE - anchored = TRUE - construct_state = /decl/machine_construction/default/panel_closed - -/obj/machinery/disperser/examine(mob/user) - . = ..() - if(panel_open) - to_chat(user, "The maintenance panel is open.") - -/obj/machinery/disperser/attackby(obj/item/I, mob/user) - if(isWrench(I)) - if(panel_open) - user.visible_message("\The [user] rotates \the [src] with \the [I].", "You rotate \the [src] with \the [I].") - set_dir(turn(dir, 90)) - playsound(src, 'sound/items/jaws_pry.ogg', 50, 1) - else - to_chat(user,"The maintenance panel must be screwed open for this!") - else - return ..() - -/obj/machinery/disperser/front - name = "obstruction field disperser beam generator" - desc = "A complex machine which shoots concentrated material beams.\ -
              A sign on it reads: STAY CLEAR! DO NOT BLOCK!" - icon_state = "front" - -/obj/machinery/disperser/middle - name = "obstruction field disperser fusor" - desc = "A complex machine which transmits immense amount of data \ - from the material deconstructor to the particle beam generator.\ -
              A sign on it reads: EXPLOSIVE! DO NOT OVERHEAT!" - icon_state = "middle" - maximum_component_parts = list(/obj/item/stock_parts = 15) - -/obj/machinery/disperser/back - name = "obstruction field disperser material deconstructor" - desc = "A prototype machine which can deconstruct materials atom by atom.\ -
              A sign on it reads: KEEP AWAY FROM LIVING MATERIAL!" - icon_state = "back" - density = FALSE - layer = ABOVE_HUMAN_LAYER //So the charges go inside us. \ No newline at end of file diff --git a/code/modules/overmap/disperser/disperser_charge.dm b/code/modules/overmap/disperser/disperser_charge.dm deleted file mode 100644 index 516ba6a15bf95..0000000000000 --- a/code/modules/overmap/disperser/disperser_charge.dm +++ /dev/null @@ -1,64 +0,0 @@ -/obj/structure/ship_munition/disperser_charge - name = "unknown disperser charge" - desc = "A charge to power the obstruction field disperser with. It looks impossibly round and shiny. This charge does not have a defined purpose." - icon_state = "slug" - atom_flags = ATOM_FLAG_NO_TEMP_CHANGE | ATOM_FLAG_CLIMBABLE - var/chargetype - var/chargedesc - -/obj/structure/ship_munition/disperser_charge/proc/fire(turf/target, strength, range) - CRASH("OFD charge firing logic not set!") - -/obj/structure/ship_munition/disperser_charge/fire - name = "FR1-ENFER charge" - color = "#b95a00" - desc = "A charge to power the obstruction field disperser with. It looks impossibly round and shiny. This charge is designed to release a localised fire on impact." - chargetype = OVERMAP_WEAKNESS_FIRE - chargedesc = "ENFER" - -/obj/structure/ship_munition/disperser_charge/fire/fire(turf/target, strength, range) - for(var/turf/T in range(range, target)) - var/obj/effect/fake_fire/bluespace/disperserf = new(T) - disperserf.lifetime = strength * 20 - -/obj/effect/fake_fire/bluespace - name = "bluespace fire" - color = COLOR_BLUE - pressure = 1500 - - -/obj/structure/ship_munition/disperser_charge/emp - name = "EM2-QUASAR charge" - color = "#6a97b0" - desc = "A charge to power the obstruction field disperser with. It looks impossibly round and shiny. This charge is designed to release a blast of electromagnetic pulse on impact." - chargetype = OVERMAP_WEAKNESS_EMP - chargedesc = "QUASAR" - -/obj/structure/ship_munition/disperser_charge/emp/fire(turf/target, strength, range) - empulse(target, strength * range / 3, strength * range) - -/obj/structure/ship_munition/disperser_charge/mining - name = "MN3-BERGBAU charge" - color = "#cfcf55" - desc = "A charge to power the obstruction field disperser with. It looks impossibly round and shiny. This charge is designed to mine ores on impact." - chargetype = OVERMAP_WEAKNESS_MINING - chargedesc = "BERGBAU" - -/obj/structure/ship_munition/disperser_charge/mining/fire(turf/target, strength, range) - var/list/victims = range(range * 3, target) - for(var/turf/simulated/mineral/M in victims) - if(prob(strength * 100 / 6)) //6 instead of 5 so there are always leftovers - M.GetDrilled(TRUE) //no artifacts survive this - for(var/mob/living/L in victims) - to_chat(L, SPAN_DANGER("You feel an incredible force ripping and tearing at you.")) - L.ex_act(EX_ACT_LIGHT) //no artif- I mean idiot/unfortunate bystanders survive this... much - -/obj/structure/ship_munition/disperser_charge/explosive - name = "XP4-INDARRA charge" - color = "#aa5f61" - desc = "A charge to power the obstruction field disperser with. It looks impossibly round and shiny. This charge is designed to explode on impact." - chargetype = OVERMAP_WEAKNESS_EXPLOSIVE - chargedesc = "INDARRA" - -/obj/structure/ship_munition/disperser_charge/explosive/fire(turf/target, strength, range) - explosion(target,max(1,strength * range / 10),strength * range / 7.5,strength * range / 5) diff --git a/code/modules/overmap/disperser/disperser_circuit.dm b/code/modules/overmap/disperser/disperser_circuit.dm deleted file mode 100644 index 53b4e3d007120..0000000000000 --- a/code/modules/overmap/disperser/disperser_circuit.dm +++ /dev/null @@ -1,31 +0,0 @@ -/obj/item/stock_parts/circuitboard/disperser - name = T_BOARD("obstruction field disperser control") - build_path = /obj/machinery/computer/ship/disperser - origin_tech = list(TECH_ENGINEERING = 2, TECH_COMBAT = 2, TECH_BLUESPACE = 2) - -/obj/item/stock_parts/circuitboard/disperserfront - name = T_BOARD("obstruction field disperser beam generator") - build_path = /obj/machinery/disperser/front - board_type = "machine" - origin_tech = list(TECH_ENGINEERING = 2, TECH_COMBAT = 2, TECH_BLUESPACE = 2) - req_components = list ( - /obj/item/stock_parts/manipulator/pico = 5 - ) - -/obj/item/stock_parts/circuitboard/dispersermiddle - name = T_BOARD("obstruction field disperser fusor") - build_path = /obj/machinery/disperser/middle - board_type = "machine" - origin_tech = list(TECH_ENGINEERING = 2, TECH_COMBAT = 2, TECH_BLUESPACE = 2) - req_components = list ( - /obj/item/stock_parts/subspace/crystal = 10 - ) - -/obj/item/stock_parts/circuitboard/disperserback - name = T_BOARD("obstruction field disperser material deconstructor") - build_path = /obj/machinery/disperser/back - board_type = "machine" - origin_tech = list(TECH_ENGINEERING = 2, TECH_COMBAT = 2, TECH_BLUESPACE = 2) - req_components = list ( - /obj/item/stock_parts/capacitor/super = 5 - ) \ No newline at end of file diff --git a/code/modules/overmap/disperser/disperser_console.dm b/code/modules/overmap/disperser/disperser_console.dm deleted file mode 100644 index 9b0d18327cba7..0000000000000 --- a/code/modules/overmap/disperser/disperser_console.dm +++ /dev/null @@ -1,200 +0,0 @@ -//Amazing disperser from Bxil(tm). Some icons, sounds, and some code shamelessly stolen from ParadiseSS13. - -/obj/machinery/computer/ship/disperser - name = "obstruction field disperser control" - icon = 'icons/obj/computer.dmi' - icon_state = "computer" - - core_skill = SKILL_PILOT - var/skill_offset = SKILL_ADEPT - 1 //After which skill level it starts to matter. -1, because we have to index from zero - - icon_keyboard = "rd_key" - icon_screen = "teleport" - - var/obj/machinery/disperser/front/front - var/obj/machinery/disperser/middle/middle - var/obj/machinery/disperser/back/back - var/const/link_range = 10 //How far can the above stuff be maximum before we start complaining - - var/overmapdir = 0 - - var/caldigit = 4 //number of digits that needs calibration - var/list/calibration //what it is - var/list/calexpected //what is should be - - var/range = 1 //range of the explosion - var/strength = 1 //strength of the explosion - var/next_shot = 0 //round time where the next shot can start from - var/const/coolinterval = 2 MINUTES //time to wait between safe shots in deciseconds - -/obj/machinery/computer/ship/disperser/Initialize() - . = ..() - link_parts() - reset_calibration() - -/obj/machinery/computer/ship/disperser/Destroy() - release_links() - . = ..() - -/obj/machinery/computer/ship/disperser/proc/link_parts() - if(is_valid_setup()) - return TRUE - - for(var/obj/machinery/disperser/front/F in SSmachines.machinery) - if(get_dist(src, F) >= link_range) - continue - var/backwards = turn(F.dir, 180) - var/obj/machinery/disperser/middle/M = locate() in get_step(F, backwards) - if(!M || get_dist(src, M) >= link_range) - continue - var/obj/machinery/disperser/back/B = locate() in get_step(M, backwards) - if(!B || get_dist(src, B) >= link_range) - continue - front = F - middle = M - back = B - if(is_valid_setup()) - GLOB.destroyed_event.register(F, src, .proc/release_links) - GLOB.destroyed_event.register(M, src, .proc/release_links) - GLOB.destroyed_event.register(B, src, .proc/release_links) - return TRUE - return FALSE - -/obj/machinery/computer/ship/disperser/proc/is_valid_setup() - if(front && middle && back) - var/everything_in_range = (get_dist(src, front) < link_range) && (get_dist(src, middle) < link_range) && (get_dist(src, back) < link_range) - var/everything_in_order = (middle.Adjacent(front) && middle.Adjacent(back)) && (front.dir == middle.dir && middle.dir == back.dir) - return everything_in_order && everything_in_range - return FALSE - -/obj/machinery/computer/ship/disperser/proc/release_links() - GLOB.destroyed_event.unregister(front, src, .proc/release_links) - GLOB.destroyed_event.unregister(middle, src, .proc/release_links) - GLOB.destroyed_event.unregister(back, src, .proc/release_links) - front = null - middle = null - back = null - -/obj/machinery/computer/ship/disperser/proc/get_calibration() - var/list/calresult[caldigit] - for(var/i = 1 to caldigit) - if(calibration[i] == calexpected[i]) - calresult[i] = 2 - else if(calibration[i] in calexpected) - calresult[i] = 1 - else - calresult[i] = 0 - return calresult - -/obj/machinery/computer/ship/disperser/proc/reset_calibration() - calexpected = new /list(caldigit) - calibration = new /list(caldigit) - for(var/i = 1 to caldigit) - calexpected[i] = rand(0,9) - calibration[i] = 0 - -/obj/machinery/computer/ship/disperser/proc/cal_accuracy() - var/top = 0 - var/divisor = caldigit * 2 //maximum possible value, aka 100% accuracy - for(var/i in get_calibration()) - top += i - return round(top * 100 / divisor) - -/obj/machinery/computer/ship/disperser/proc/get_next_shot_seconds() - return max(0, (next_shot - world.time) / 10) - -/obj/machinery/computer/ship/disperser/proc/cool_failchance() - return get_next_shot_seconds() * 1000 / coolinterval - -/obj/machinery/computer/ship/disperser/proc/get_charge_type() - var/obj/structure/ship_munition/disperser_charge/B = locate() in get_turf(back) - if(B) - return B.chargetype - var/obj/structure/closet/C = locate() in get_turf(back) - if(C) - return OVERMAP_WEAKNESS_DROPPOD - return OVERMAP_WEAKNESS_NONE - -/obj/machinery/computer/ship/disperser/proc/get_charge() - var/obj/structure/ship_munition/disperser_charge/B = locate() in get_turf(back) - if(B) - return B - - var/obj/structure/closet/C = locate() in get_turf(back) - return C - -/obj/machinery/computer/ship/disperser/ui_interact(mob/user, ui_key = "main", datum/nanoui/ui = null, force_open = TRUE) - if(!linked) - display_reconnect_dialog(user, "disperser synchronization") - return - - var/data[0] - - if (!link_parts()) - data["faillink"] = TRUE - else - data["calibration"] = calibration - data["overmapdir"] = overmapdir - data["cal_accuracy"] = cal_accuracy() - data["strength"] = strength - data["range"] = range - data["next_shot"] = round(get_next_shot_seconds()) - data["nopower"] = !data["faillink"] && (!front.powered() || !middle.powered() || !back.powered()) - data["skill"] = user.get_skill_value(core_skill) > skill_offset - - var/charge = SPAN_BOLD("UNKNOWN ERROR") - switch(get_charge_type()) - if(OVERMAP_WEAKNESS_NONE) - charge = "[SPAN_BOLD("ERROR")]: No valid charge detected." - if(OVERMAP_WEAKNESS_DROPPOD) - charge = "HERMES" - else - var/obj/structure/ship_munition/disperser_charge/B = get_charge() - charge = B.chargedesc - data["chargeload"] = charge - - ui = SSnano.try_update_ui(user, src, ui_key, ui, data, force_open) - if (!ui) - ui = new(user, src, ui_key, "disperser.tmpl", "[linked.name] obstruction field disperser control", 400, 550) - ui.set_initial_data(data) - ui.open() - ui.set_auto_update(1) - -/obj/machinery/computer/ship/disperser/OnTopic(mob/user, list/href_list, state) - . = ..() - if(.) - return - - if(!linked) - return TOPIC_HANDLED - - if (href_list["choose"]) - overmapdir = sanitize_integer(text2num(href_list["choose"]), 0, 9, 0) - reset_calibration() - - if(href_list["calibration"]) - var/input = input("0-9", "disperser calibration", 0) as num|null - if(!isnull(input)) //can be zero so we explicitly check for null - var/calnum = sanitize_integer(text2num(href_list["calibration"]), 0, caldigit)//sanitiiiiize - calibration[calnum + 1] = sanitize_integer(input, 0, 9, 0)//must add 1 because nanoui indexes from 0 - - if(href_list["skill_calibration"]) - for(var/i = 1 to min(caldigit, user.get_skill_value(core_skill) - skill_offset)) - calibration[i] = calexpected[i] - - if(href_list["strength"]) - var/input = input("1-5", "disperser strength", 1) as num|null - if(input && CanInteract(user, state)) - strength = sanitize_integer(input, 1, 5, 1) - middle.idle_power_usage = strength * range * 100 - - if(href_list["range"]) - var/input = input("1-5", "disperser radius", 1) as num|null - if(input && CanInteract(user, state)) - range = sanitize_integer(input, 1, 5, 1) - middle.idle_power_usage = strength * range * 100 - - if(href_list["fire"]) - fire(user) - - return TOPIC_REFRESH diff --git a/code/modules/overmap/disperser/disperser_fire.dm b/code/modules/overmap/disperser/disperser_fire.dm deleted file mode 100644 index 415f042d5ed9d..0000000000000 --- a/code/modules/overmap/disperser/disperser_fire.dm +++ /dev/null @@ -1,179 +0,0 @@ -#define QUICK_TO_STANDING 5 //How much time after standing still after running we will use STANDING_FALL_PROB instead of RUNNING_FALL_PROB -#define DELIBERATE_TO_STANDING 3 //How much time after standing still after walking we will use STANDING_FALL_PROB instead of WALKING_FALL_PROB -#define RUNNING_FALL_PROB 75 -#define WALKING_FALL_PROB 50 -#define STANDING_FALL_PROB 20 - - -/obj/machinery/computer/ship/disperser/proc/fire(mob/user) - log_and_message_admins("attempted to launch a disperser beam.") - if(!link_parts()) - return FALSE //no disperser, no service - if(!front.powered() || !middle.powered() || !back.powered()) - return FALSE //no power, no boom boom - var/chargetype = get_charge_type() - if(chargetype <= 0) - return FALSE //no dear, you cannot fire the captain out of a cannon... unless you put him in a box of course - - var/atom/movable/atomcharge = get_charge() - - var/turf/start = front - var/direction = front.dir - - var/distance = 0 - for(var/turf/T in getline(get_step(front,front.dir),get_target_turf(start, direction))) - distance++ - if(T.density) - if(distance < 7) - explosion(T,1,2,3) - continue - else - T.ex_act(EX_ACT_DEVASTATING) - for(var/atom/A in T) - if(A.density) - if(distance < 7) - explosion(A,1,2,3) - break - else - A.ex_act(EX_ACT_DEVASTATING) - - var/list/relevant_z = GetConnectedZlevels(start.z) - for(var/mob/M in GLOB.player_list) - var/turf/T = get_turf(M) - if(!T || !(T.z in relevant_z)) - continue - shake_camera(M, 25) - if(!isdeaf(M)) - sound_to(M, sound('sound/effects/explosionfar.ogg', volume=10)) - - if(M.can_be_floored()) - var/shouldstumble = FALSE - var/sincelastmove = world.time - M.l_move_time - - if(sincelastmove > QUICK_TO_STANDING SECONDS) //We are standing still - shouldstumble = prob(STANDING_FALL_PROB) - else if(sincelastmove > DELIBERATE_TO_STANDING) //We are either standing still after running or standing still after walking/creeping - shouldstumble = MOVING_QUICKLY(M) ? prob(RUNNING_FALL_PROB) : prob(STANDING_FALL_PROB) - else //We are either currently running or currently walking/creeping - shouldstumble = MOVING_QUICKLY(M) ? prob(RUNNING_FALL_PROB) : prob(WALKING_FALL_PROB) - - if(shouldstumble) - to_chat(M, SPAN_DANGER("You stumble onto the floor from the shaking!")) - M.AdjustStunned(2) - M.AdjustWeakened(2) - - if(front) //Meanwhile front might have exploded - front.layer = ABOVE_OBJ_LAYER //So the beam goes below us. Looks a lot better - playsound(start, 'sound/machines/disperser_fire.ogg', 100, 1) - handle_beam(start, direction) - handle_overbeam() - - if (chargetype != OVERMAP_WEAKNESS_DROPPOD) - qdel(atomcharge) - - //Some moron disregarded the cooldown warning. Let's blow in their face. - if(prob(cool_failchance())) - explosion(middle,rand(1,2),rand(2,3),rand(3,4)) - next_shot = coolinterval + world.time - - //Success, but we missed. - if(prob(100 - cal_accuracy())) - if(chargetype == OVERMAP_WEAKNESS_DROPPOD) - atomcharge.forceMove(locate(rand(1,world.maxx),rand(1,world.maxy), GLOB.using_map.get_empty_zlevel())) //Remove it in case it's a droppod. - return TRUE - - reset_calibration() - - var/turf/overmaptarget = get_step(linked, overmapdir) - var/list/candidates = list() - - //Prioritize events. Thus you can hide in meteor showers in exchange for protection from the disperser. - for(var/obj/effect/overmap/event/O in overmaptarget) - candidates += O - //Next we see if there are any ships around. Logically they are between us and the sector if one exists. - if(!length(candidates)) - for(var/obj/effect/overmap/visitable/ship/S in overmaptarget) - if(S == linked) - continue //Why are you shooting yourself? - candidates += S - - //No events, no ships, the last thing to check is a sector. - if(!length(candidates)) - for(var/obj/effect/overmap/O in overmaptarget) - if(O == linked) - continue //Why are you shooting yourself? - candidates += O - - //Way to waste a charge - if(!length(candidates)) - return TRUE - - var/obj/effect/overmap/finaltarget = pick(candidates) - log_and_message_admins("A type [chargetype] disperser beam was launched at [finaltarget].", location=finaltarget) - - //Deletion of the overmap effect and the actual event trigger. Bye bye pesky meteors. - if(istype(finaltarget, /obj/effect/overmap/event)) - fire_at_event(finaltarget, chargetype) - qdel(atomcharge) - //After this point ships act basically as sectors so we stop taking care of differences - else - fire_at_sector(finaltarget, atomcharge, chargetype) - return TRUE - -/obj/machinery/computer/ship/disperser/proc/fire_at_event(obj/effect/overmap/event/finaltarget, chargetype) - if(chargetype & finaltarget.weaknesses) - var/turf/T = finaltarget.loc - qdel(finaltarget) - overmap_event_handler.update_hazards(T) - -/obj/machinery/computer/ship/disperser/proc/fire_at_sector(obj/effect/overmap/visitable/finaltarget, obj/structure/ship_munition/disperser_charge/charge, chargetype) - var/list/targetareas = finaltarget.get_areas() - targetareas -= locate(/area/space) - if (!length(targetareas)) - qdel(charge) - return - var/area/finalarea = pick(targetareas) - var/turf/targetturf = pick_area_turf(finalarea.type, list(/proc/is_not_space_turf)) - - log_and_message_admins("Disperser beam hit sector at [get_area(targetturf)].", location=targetturf) - if(chargetype == OVERMAP_WEAKNESS_DROPPOD) - if(targetturf.density) - targetturf.ex_act(EX_ACT_DEVASTATING) - for(var/atom/A in targetturf) - A.ex_act(EX_ACT_LIGHT) - charge.forceMove(targetturf) - //The disperser is not a taxi - for(var/mob/living/L in charge) - to_chat(L, SPAN_DANGER("Your body shakes violently, immense and agonising forces tearing it apart.")) - L.forceMove(targetturf) - L.ex_act(EX_ACT_DEVASTATING) - else - charge.fire(targetturf, strength, range) - qdel(charge) - -/obj/machinery/computer/ship/disperser/proc/handle_beam(turf/start, direction) - set waitfor = FALSE - start.Beam(get_target_turf(start, direction), "disperser_beam", time = 50, maxdistance = world.maxx) - if(front) - front.layer = initial(front.layer) - -/obj/machinery/computer/ship/disperser/proc/handle_overbeam() - set waitfor = FALSE - linked.Beam(get_step(linked, overmapdir), "disperser_beam", time = 150, maxdistance = world.maxx) - -/obj/machinery/computer/ship/disperser/proc/get_target_turf(turf/start, direction) - switch(direction) - if(NORTH) - return locate(start.x,world.maxy,start.z) - if(SOUTH) - return locate(start.x,1,start.z) - if(WEST) - return locate(1,start.y,start.z) - if(EAST) - return locate(world.maxx,start.y,start.z) - -#undef QUICK_TO_STANDING -#undef DELIBERATE_TO_STANDING -#undef RUNNING_FALL_PROB -#undef WALKING_FALL_PROB -#undef STANDING_FALL_PROB diff --git a/code/modules/overmap/events/event.dm b/code/modules/overmap/events/event.dm deleted file mode 100644 index 74206e23a6f13..0000000000000 --- a/code/modules/overmap/events/event.dm +++ /dev/null @@ -1,312 +0,0 @@ -var/global/decl/overmap_event_handler/overmap_event_handler = new() - -/decl/overmap_event_handler - var/list/hazard_by_turf - var/list/ship_events - -/decl/overmap_event_handler/New() - ..() - hazard_by_turf = list() - ship_events = list() - -/decl/overmap_event_handler/proc/create_events(var/z_level, var/overmap_size, var/number_of_events) - // Acquire the list of not-yet utilized overmap turfs on this Z-level - var/list/candidate_turfs = block(locate(OVERMAP_EDGE, OVERMAP_EDGE, z_level),locate(overmap_size - OVERMAP_EDGE, overmap_size - OVERMAP_EDGE,z_level)) - candidate_turfs = where(candidate_turfs, /proc/can_not_locate, /obj/effect/overmap/visitable) - - for(var/i = 1 to number_of_events) - if(!candidate_turfs.len) - break - var/overmap_event_type = pick(subtypesof(/datum/overmap_event)) - var/datum/overmap_event/datum_spawn = new overmap_event_type - - var/list/event_turfs = acquire_event_turfs(datum_spawn.count, datum_spawn.radius, candidate_turfs, datum_spawn.continuous) - candidate_turfs -= event_turfs - - for(var/event_turf in event_turfs) - var/type = pick(datum_spawn.hazards) - new type(event_turf) - - qdel(datum_spawn)//idk help how do I do this better? - -/decl/overmap_event_handler/proc/acquire_event_turfs(var/number_of_turfs, var/distance_from_origin, var/list/candidate_turfs, var/continuous = TRUE) - number_of_turfs = min(number_of_turfs, candidate_turfs.len) - candidate_turfs = candidate_turfs.Copy() // Not this proc's responsibility to adjust the given lists - - var/origin_turf = pick(candidate_turfs) - var/list/selected_turfs = list(origin_turf) - var/list/selection_turfs = list(origin_turf) - candidate_turfs -= origin_turf - - while(selection_turfs.len && selected_turfs.len < number_of_turfs) - var/selection_turf = pick(selection_turfs) - var/random_neighbour = get_random_neighbour(selection_turf, candidate_turfs, continuous, distance_from_origin) - - if(random_neighbour) - candidate_turfs -= random_neighbour - selected_turfs += random_neighbour - if(get_dist(origin_turf, random_neighbour) < distance_from_origin) - selection_turfs += random_neighbour - else - selection_turfs -= selection_turf - - return selected_turfs - -/decl/overmap_event_handler/proc/get_random_neighbour(var/turf/origin_turf, var/list/candidate_turfs, var/continuous = TRUE, var/range) - var/fitting_turfs - if(continuous) - fitting_turfs = origin_turf.CardinalTurfs(FALSE) - else - fitting_turfs = trange(range, origin_turf) - fitting_turfs = shuffle(fitting_turfs) - for(var/turf/T in fitting_turfs) - if(T in candidate_turfs) - return T - -/decl/overmap_event_handler/proc/start_hazard(var/obj/effect/overmap/visitable/ship/ship, var/obj/effect/overmap/event/hazard)//make these accept both hazards or events - if(!(ship in ship_events)) - ship_events += ship - - for(var/event_type in hazard.events) - if(is_event_active(ship,event_type, hazard.difficulty))//event's already active, don't bother - continue - var/datum/event_meta/EM = new(hazard.difficulty, "Overmap event - [hazard.name]", event_type, add_to_queue = FALSE, is_one_shot = TRUE) - var/datum/event/E = new event_type(EM) - E.startWhen = 0 - E.endWhen = INFINITY - E.affecting_z = ship.map_z - if("victim" in E.vars)//for meteors and other overmap events that uses ships//might need a better solution - E.vars["victim"] = ship - LAZYADD(ship_events[ship], E) - -/decl/overmap_event_handler/proc/stop_hazard(var/obj/effect/overmap/visitable/ship/ship, var/obj/effect/overmap/event/hazard) - for(var/event_type in hazard.events) - var/datum/event/E = is_event_active(ship,event_type,hazard.difficulty) - if(E) - E.kill() - LAZYREMOVE(ship_events[ship], E) - -/decl/overmap_event_handler/proc/is_event_active(var/ship, var/event_type, var/severity) - if(!ship_events[ship]) return - for(var/datum/event/E in ship_events[ship]) - if(E.type == event_type && E.severity == severity) - return E - -/decl/overmap_event_handler/proc/on_turf_entered(var/turf/new_loc, var/obj/effect/overmap/visitable/ship/ship, var/old_loc) - if(!istype(ship)) - return - if(new_loc == old_loc) - return - - for(var/obj/effect/overmap/event/E in hazard_by_turf[new_loc]) - start_hazard(ship, E) - -/decl/overmap_event_handler/proc/on_turf_exited(var/turf/old_loc, var/obj/effect/overmap/visitable/ship/ship, var/new_loc) - if(!istype(ship)) - return - if(new_loc == old_loc) - return - - for(var/obj/effect/overmap/event/E in hazard_by_turf[old_loc]) - if(is_event_included(hazard_by_turf[new_loc],E)) - continue - stop_hazard(ship,E) - -/decl/overmap_event_handler/proc/update_hazards(var/turf/T)//catch all updater - if(!istype(T)) - return - - var/list/active_hazards = list() - for(var/obj/effect/overmap/event/E in T) - if(is_event_included(active_hazards, E, TRUE)) - continue - active_hazards += E - - if(!active_hazards.len) - hazard_by_turf -= T - GLOB.entered_event.unregister(T, src, /decl/overmap_event_handler/proc/on_turf_entered) - GLOB.exited_event.unregister(T, src, /decl/overmap_event_handler/proc/on_turf_exited) - else - hazard_by_turf |= T - hazard_by_turf[T] = active_hazards - GLOB.entered_event.register(T, src,/decl/overmap_event_handler/proc/on_turf_entered) - GLOB.exited_event.register(T, src, /decl/overmap_event_handler/proc/on_turf_exited) - - for(var/obj/effect/overmap/visitable/ship/ship in T) - for(var/datum/event/E in ship_events[ship]) - if(is_event_in_turf(E,T)) - continue - E.kill() - LAZYREMOVE(ship_events[ship], E) - - for(var/obj/effect/overmap/event/E in active_hazards) - start_hazard(ship,E) - -/decl/overmap_event_handler/proc/is_event_in_turf(var/datum/event/E, var/turf/T) - for(var/obj/effect/overmap/event/hazard in hazard_by_turf[T]) - if(E in hazard.events && E.severity == hazard.difficulty) - return TRUE - -/decl/overmap_event_handler/proc/is_event_included(var/list/hazards, var/obj/effect/overmap/event/E, var/equal_or_better)//this proc is only used so it can break out of 2 loops cleanly - for(var/obj/effect/overmap/event/A in hazards) - if(istype(A,E.type) || istype(E,A.type)) - if(same_entries(A.events, E.events)) - if(equal_or_better) - if(A.difficulty >= E.difficulty) - return TRUE - else - hazards -= A - else - if(A.difficulty == E.difficulty) - return TRUE - -// We don't subtype /obj/effect/overmap/visitable because that'll create sections one can travel to -// And with them "existing" on the overmap Z-level things quickly get odd. -/obj/effect/overmap/event - name = "event" - icon = 'icons/obj/overmap.dmi' - icon_state = "event" - opacity = 1 - color = "#880000" - var/list/events - var/list/event_icon_states - var/difficulty = EVENT_LEVEL_MODERATE - var/weaknesses //if the BSA can destroy them and with what - var/list/victims //basically cached events on which Z level - -/obj/effect/overmap/event/Initialize() - . = ..() - icon_state = pick(event_icon_states) - overmap_event_handler.update_hazards(loc) - -/obj/effect/overmap/event/Move() - var/turf/old_loc = loc - . = ..() - if(.) - overmap_event_handler.update_hazards(old_loc) - overmap_event_handler.update_hazards(loc) - -/obj/effect/overmap/event/forceMove(atom/destination) - var/old_loc = loc - . = ..() - if(.) - overmap_event_handler.update_hazards(old_loc) - overmap_event_handler.update_hazards(loc) - -/obj/effect/overmap/event/Destroy()//takes a look at this one as well, make sure everything is A-OK - var/turf/T = loc - . = ..() - overmap_event_handler.update_hazards(T) - -/obj/effect/overmap/event/meteor - name = "asteroid field" - events = list(/datum/event/meteor_wave/overmap) - event_icon_states = list("meteor1", "meteor2", "meteor3", "meteor4") - difficulty = EVENT_LEVEL_MAJOR - weaknesses = OVERMAP_WEAKNESS_MINING | OVERMAP_WEAKNESS_EXPLOSIVE - color = "#a08444" - -/obj/effect/overmap/event/electric - name = "electrical storm" - events = list(/datum/event/electrical_storm) - opacity = 0 - event_icon_states = list("electrical1", "electrical2", "electrical3", "electrical4") - difficulty = EVENT_LEVEL_MAJOR - weaknesses = OVERMAP_WEAKNESS_EMP - color = "#e8e85c" - -/obj/effect/overmap/event/dust - name = "dust cloud" - events = list(/datum/event/dust) - event_icon_states = list("dust1", "dust2", "dust3", "dust4") - weaknesses = OVERMAP_WEAKNESS_MINING | OVERMAP_WEAKNESS_EXPLOSIVE | OVERMAP_WEAKNESS_FIRE - color = "#6c6c6c" - -/obj/effect/overmap/event/ion - name = "ion cloud" - events = list(/datum/event/ionstorm, /datum/event/computer_damage) - opacity = 0 - event_icon_states = list("ion1", "ion2", "ion3", "ion4") - difficulty = EVENT_LEVEL_MAJOR - weaknesses = OVERMAP_WEAKNESS_EMP - color = "#7cb4d4" - -/obj/effect/overmap/event/carp - name = "carp shoal" - events = list(/datum/event/carp_migration/overmap) - opacity = 0 - difficulty = EVENT_LEVEL_MODERATE - event_icon_states = list("carp1", "carp2") - weaknesses = OVERMAP_WEAKNESS_EXPLOSIVE | OVERMAP_WEAKNESS_FIRE - color = "#783ca4" - -/obj/effect/overmap/event/carp/major - name = "carp school" - difficulty = EVENT_LEVEL_MAJOR - event_icon_states = list("carp3", "carp4") - - -/obj/effect/overmap/event/gravity - name = "dark matter influx" - weaknesses = OVERMAP_WEAKNESS_EXPLOSIVE - events = list(/datum/event/gravity) - event_icon_states = list("grav1", "grav2", "grav3", "grav4") - opacity = 0 - color = "#321945" - -//These now are basically only used to spawn hazards. Will be useful when we need to spawn group of moving hazards -/datum/overmap_event - var/name = "map event" - var/radius = 2 - var/count = 6 - var/hazards - var/opacity = 1 - var/continuous = TRUE //if it should form continous blob, or can have gaps - -/datum/overmap_event/meteor - name = "asteroid field" - count = 15 - radius = 4 - continuous = FALSE - hazards = /obj/effect/overmap/event/meteor - -/datum/overmap_event/electric - name = "electrical storm" - count = 11 - radius = 3 - opacity = 0 - hazards = /obj/effect/overmap/event/electric - -/datum/overmap_event/dust - name = "dust cloud" - count = 16 - radius = 4 - hazards = /obj/effect/overmap/event/dust - -/datum/overmap_event/ion - name = "ion cloud" - count = 8 - radius = 3 - opacity = 0 - hazards = /obj/effect/overmap/event/ion - -/datum/overmap_event/carp - name = "carp shoal" - count = 8 - radius = 3 - opacity = 0 - continuous = FALSE - hazards = /obj/effect/overmap/event/carp - -/datum/overmap_event/carp/major - name = "carp school" - count = 5 - radius = 4 - hazards = /obj/effect/overmap/event/carp/major - -/datum/overmap_event/gravity - name = "dark matter influx" - count = 12 - radius = 4 - opacity = 0 - hazards = /obj/effect/overmap/event/gravity \ No newline at end of file diff --git a/code/modules/overmap/exoplanets/_exoplanet.dm b/code/modules/overmap/exoplanets/_exoplanet.dm deleted file mode 100644 index 4d9aad9590e98..0000000000000 --- a/code/modules/overmap/exoplanets/_exoplanet.dm +++ /dev/null @@ -1,318 +0,0 @@ -GLOBAL_VAR(planet_repopulation_disabled) - -/obj/effect/overmap/visitable/sector/exoplanet - name = "exoplanet" - icon_state = "globe" - in_space = FALSE - var/area/planetary_area - var/list/seeds = list() - var/list/fauna_types = list() // possible types of mobs to spawn - var/list/megafauna_types = list() // possibble types of megafauna to spawn - var/list/animals = list() - var/max_animal_count - var/datum/gas_mixture/atmosphere - var/list/breathgas = list() //list of gases animals/plants require to survive - var/badgas //id of gas that is toxic to life here - - var/lightlevel = 0 //This default makes turfs not generate light. Adjust to have exoplanents be lit. - var/night = TRUE - var/daycycle //How often do we change day and night - var/daycolumn = 0 //Which column's light needs to be updated next? - var/daycycle_column_delay = 10 SECONDS - - var/maxx - var/maxy - var/landmark_type = /obj/effect/shuttle_landmark/automatic - - var/list/rock_colors = list(COLOR_ASTEROID_ROCK) - var/list/plant_colors = list("RANDOM") - var/grass_color - var/surface_color = COLOR_ASTEROID_ROCK - var/water_color = "#436499" - var/image/skybox_image - - var/list/actors = list() //things that appear in engravings on xenoarch finds. - var/list/species = list() //list of names to use for simple animals - - var/flora_diversity = 4 // max number of different seeds growing here - var/has_trees = TRUE // if large flora should be generated - var/list/small_flora_types = list() // seeds of 'small' flora - var/list/big_flora_types = list() // seeds of tree-tier flora - - var/repopulating = FALSE - var/repopulate_types = list() // animals which have died that may come back - - var/list/possible_themes = list( - /datum/exoplanet_theme = 45, - /datum/exoplanet_theme/mountains = 65, - /datum/exoplanet_theme/radiation_bombing = 10, - /datum/exoplanet_theme/ruined_city = 5, - /datum/exoplanet_theme/robotic_guardians = 10 - ) - var/list/themes = list() - - var/list/map_generators = list() - - //Flags deciding what features to pick - var/ruin_tags_whitelist - var/ruin_tags_blacklist - var/features_budget = 5 - var/list/possible_features = list() - var/list/spawned_features - - //Either a type or a list of types and weights. You must include all types if it's a list - var/list/habitability_distribution = list( - HABITABILITY_IDEAL = 10, - HABITABILITY_OKAY = 40, - HABITABILITY_BAD = 50 - ) - var/habitability_class - -/obj/effect/overmap/visitable/sector/exoplanet/proc/generate_habitability() - if (isnum(habitability_distribution)) - habitability_class = habitability_distribution - else - habitability_class = pickweight_index(habitability_distribution) - -/obj/effect/overmap/visitable/sector/exoplanet/New(nloc, max_x, max_y) - if (!GLOB.using_map.use_overmap) - return - - maxx = max_x ? max_x : world.maxx - maxy = max_y ? max_y : world.maxy - - var/planet_name = generate_planet_name() - name = "[planet_name], \a [name]" - - planetary_area = new planetary_area() - GLOB.using_map.area_purity_test_exempt_areas += planetary_area.type - planetary_area.name = "Surface of [planet_name]" - - INCREMENT_WORLD_Z_SIZE - forceMove(locate(1,1,world.maxz)) - - if (LAZYLEN(possible_themes)) - var/datum/exoplanet_theme/T = pick(possible_themes) - themes += new T - possible_themes -= T - - for (var/datum/exoplanet_theme/T in themes) - if (T.ruin_tags_whitelist) - ruin_tags_whitelist |= T.ruin_tags_whitelist - if (T.ruin_tags_blacklist) - ruin_tags_blacklist |= T.ruin_tags_blacklist - - for (var/T in subtypesof(/datum/map_template/ruin/exoplanet)) - var/datum/map_template/ruin/exoplanet/ruin = T - if (initial(ruin.template_flags) & TEMPLATE_FLAG_RUIN_STARTS_DISALLOWED) - continue - if (ruin_tags_whitelist && !(ruin_tags_whitelist & initial(ruin.ruin_tags))) - continue - if (ruin_tags_blacklist & initial(ruin.ruin_tags)) - continue - possible_features += new ruin - ..() - -/obj/effect/overmap/visitable/sector/exoplanet/proc/build_level() - generate_habitability() - generate_atmosphere() - for (var/datum/exoplanet_theme/T in themes) - T.adjust_atmosphere(src) - generate_flora() - generate_map() - generate_features() - for (var/datum/exoplanet_theme/T in themes) - T.after_map_generation(src) - generate_landing(2) - update_biome() - generate_daycycle() - generate_planet_image() - START_PROCESSING(SSobj, src) - -//attempt at more consistent history generation for xenoarch finds. -/obj/effect/overmap/visitable/sector/exoplanet/proc/get_engravings() - if (!actors.len) - actors += pick("alien humanoid","an amorphic blob","a short, hairy being","a rodent-like creature","a robot","a primate","a reptilian alien","an unidentifiable object","a statue","a starship","unusual devices","a structure") - actors += pick("alien humanoids","amorphic blobs","short, hairy beings","rodent-like creatures","robots","primates","reptilian aliens") - - var/engravings = "[actors[1]] \ - [pick("surrounded by","being held aloft by","being struck by","being examined by","communicating with")] \ - [actors[2]]" - if (prob(50)) - engravings += ", [pick("they seem to be enjoying themselves","they seem extremely angry","they look pensive","they are making gestures of supplication","the scene is one of subtle horror","the scene conveys a sense of desperation","the scene is completely bizarre")]" - engravings += "." - return engravings - -/obj/effect/overmap/visitable/sector/exoplanet/Process(wait, tick) - if (animals.len < 0.5*max_animal_count && !repopulating) - repopulating = TRUE - max_animal_count = round(max_animal_count * 0.5) - - for (var/zlevel in map_z) - if (repopulating && !GLOB.planet_repopulation_disabled) - handle_repopulation() - - if (!atmosphere) - continue - - var/zone/Z - for (var/i = 1 to maxx) - var/turf/simulated/T = locate(i, 2, zlevel) - if (istype(T) && T.zone && T.zone.contents.len > (maxx*maxy*0.25)) //if it's a zone quarter of zlevel, good enough odds it's planetary main one - Z = T.zone - break - if (Z && !Z.fire_tiles.len && !atmosphere.compare(Z.air)) //let fire die out first if there is one - var/datum/gas_mixture/daddy = new() //make a fake 'planet' zone gas - daddy.copy_from(atmosphere) - daddy.group_multiplier = Z.air.group_multiplier - Z.air.equalize(daddy) - - if (daycycle) - if (tick % round(daycycle / wait) == 0) - night = !night - daycolumn = 1 - if (daycolumn && tick % round(daycycle_column_delay / wait) == 0) - update_daynight() - -/obj/effect/overmap/visitable/sector/exoplanet/proc/update_daynight() - var/light = 0.1 - if (!night) - light = lightlevel - for (var/turf/simulated/floor/exoplanet/T in block(locate(daycolumn,1,min(map_z)),locate(daycolumn,maxy,max(map_z)))) - T.set_light(light, 0.1, 2) - daycolumn++ - if (daycolumn > maxx) - daycolumn = 0 - -/obj/effect/overmap/visitable/sector/exoplanet/proc/generate_map() - var/list/grasscolors = plant_colors.Copy() - grasscolors -= "RANDOM" - if (length(grasscolors)) - grass_color = pick(grasscolors) - - for (var/datum/exoplanet_theme/T in themes) - T.before_map_generation(src) - for (var/zlevel in map_z) - var/list/edges - edges += block(locate(1, 1, zlevel), locate(TRANSITIONEDGE, maxy, zlevel)) - edges |= block(locate(maxx-TRANSITIONEDGE, 1, zlevel),locate(maxx, maxy, zlevel)) - edges |= block(locate(1, 1, zlevel), locate(maxx, TRANSITIONEDGE, zlevel)) - edges |= block(locate(1, maxy-TRANSITIONEDGE, zlevel),locate(maxx, maxy, zlevel)) - for (var/turf/T in edges) - T.ChangeTurf(/turf/simulated/planet_edge) - var/padding = TRANSITIONEDGE - for (var/map_type in map_generators) - if (ispath(map_type, /datum/random_map/noise/exoplanet)) - new map_type(null,padding,padding,zlevel,maxx-padding,maxy-padding,0,1,1,planetary_area, plant_colors) - else - new map_type(null,1,1,zlevel,maxx,maxy,0,1,1,planetary_area) - -/obj/effect/overmap/visitable/sector/exoplanet/proc/generate_features() - spawned_features = seedRuins(map_z, features_budget, possible_features, /area/exoplanet, maxx, maxy) - -/obj/effect/overmap/visitable/sector/exoplanet/proc/update_biome() - for (var/datum/seed/S in seeds) - adapt_seed(S) - - for (var/mob/living/simple_animal/A in animals) - adapt_animal(A) - -/obj/effect/overmap/visitable/sector/exoplanet/proc/generate_daycycle() - if (lightlevel) - night = FALSE //we start with a day if we have light. - - //When you set daycycle ensure that the minimum is larger than [maxx * daycycle_column_delay]. - //Otherwise the right side of the exoplanet can get stuck in a forever day. - daycycle = rand(10 MINUTES, 40 MINUTES) - -/obj/effect/landmark/exoplanet_spawn/Initialize() - ..() - return INITIALIZE_HINT_LATELOAD - -/obj/effect/landmark/exoplanet_spawn/LateInitialize() - . = ..() - var/obj/effect/overmap/visitable/sector/exoplanet/E = map_sectors["[z]"] - if (istype(E)) - do_spawn(E) - -//Tries to generate num landmarks, but avoids repeats. -/obj/effect/overmap/visitable/sector/exoplanet/proc/generate_landing(num = 1) - var/places = list() - var/attempts = 30*num - var/new_type = landmark_type - while(num) - attempts-- - var/turf/T = locate(rand(TRANSITIONEDGE + LANDING_ZONE_RADIUS, maxx - TRANSITIONEDGE - LANDING_ZONE_RADIUS), rand(TRANSITIONEDGE + LANDING_ZONE_RADIUS, maxy - TRANSITIONEDGE - LANDING_ZONE_RADIUS),map_z[map_z.len]) - if (!T || (T in places)) // Two landmarks on one turf is forbidden as the landmark code doesn't work with it. - continue - if (attempts >= 0) // While we have the patience, try to find better spawn points. If out of patience, put them down wherever, so long as there are no repeats. - var/valid = TRUE - var/list/block_to_check = block(locate(T.x - LANDING_ZONE_RADIUS, T.y - LANDING_ZONE_RADIUS, T.z), locate(T.x + LANDING_ZONE_RADIUS, T.y + LANDING_ZONE_RADIUS, T.z)) - for (var/turf/check in block_to_check) - if (!istype(get_area(check), /area/exoplanet) || check.turf_flags & TURF_FLAG_NORUINS) - valid = FALSE - break - if (attempts >= 10) - if (check_collision(T.loc, block_to_check)) //While we have lots of patience, ensure landability - valid = FALSE - else //Running out of patience, but would rather not clear ruins, so switch to clearing landmarks and bypass landability check - new_type = /obj/effect/shuttle_landmark/automatic/clearing - - if (!valid) - continue - - num-- - places += T - new new_type(T) - -/obj/effect/overmap/visitable/sector/exoplanet/get_scan_data(mob/user) - . = ..() - var/list/extra_data = list("
              ") - if (atmosphere) - if (user.skill_check(SKILL_SCIENCE, SKILL_ADEPT)) - var/list/gases = list() - for (var/g in atmosphere.gas) - if (atmosphere.gas[g] > atmosphere.total_moles * 0.05) - gases += gas_data.name[g] - extra_data += "Atmosphere composition: [english_list(gases)]" - var/inaccuracy = rand(8,12)/10 - extra_data += "Atmosphere pressure [atmosphere.return_pressure()*inaccuracy] kPa, temperature [atmosphere.temperature*inaccuracy] K" - else if (user.skill_check(SKILL_SCIENCE, SKILL_BASIC)) - extra_data += "Atmosphere present" - extra_data += "
              " - - if (seeds.len && user.skill_check(SKILL_SCIENCE, SKILL_BASIC)) - extra_data += "Xenoflora detected" - - if (animals.len && user.skill_check(SKILL_SCIENCE, SKILL_BASIC)) - extra_data += "Life traces detected" - - if (LAZYLEN(spawned_features) && user.skill_check(SKILL_SCIENCE, SKILL_ADEPT)) - var/ruin_num = 0 - for (var/datum/map_template/ruin/exoplanet/R in spawned_features) - if (!(R.ruin_tags & RUIN_NATURAL)) - ruin_num++ - if (ruin_num) - extra_data += "
              [ruin_num] possible artificial structure\s detected." - - for (var/datum/exoplanet_theme/T in themes) - if (T.get_sensor_data()) - extra_data += T.get_sensor_data() - . += jointext(extra_data, "
              ") - -/obj/effect/overmap/visitable/sector/exoplanet/proc/get_surface_color() - return surface_color - -/area/exoplanet - name = "\improper Planetary surface" - ambience = list( - 'sound/effects/wind/wind_2_1.ogg', - 'sound/effects/wind/wind_2_2.ogg', - 'sound/effects/wind/wind_3_1.ogg', - 'sound/effects/wind/wind_4_1.ogg', - 'sound/effects/wind/wind_4_2.ogg', - 'sound/effects/wind/wind_5_1.ogg' - ) - always_unpowered = TRUE - area_flags = AREA_FLAG_EXTERNAL - planetary_surface = TRUE diff --git a/code/modules/overmap/exoplanets/exoplanet_atmosphere.dm b/code/modules/overmap/exoplanets/exoplanet_atmosphere.dm deleted file mode 100644 index 6b474860bf83e..0000000000000 --- a/code/modules/overmap/exoplanets/exoplanet_atmosphere.dm +++ /dev/null @@ -1,52 +0,0 @@ -/obj/effect/overmap/visitable/sector/exoplanet/proc/generate_atmosphere() - atmosphere = new - if (habitability_class == HABITABILITY_IDEAL) - atmosphere.adjust_gas(GAS_OXYGEN, MOLES_O2STANDARD, 0) - atmosphere.adjust_gas(GAS_NITROGEN, MOLES_N2STANDARD) - else //let the fuckery commence - var/list/newgases = gas_data.gases.Copy() - if (prob(90)) //all phoron planet should be rare - newgases -= GAS_PHORON - if (prob(50)) //alium gas should be slightly less common than mundane shit - newgases -= GAS_ALIEN - newgases -= GAS_STEAM - - var/total_moles = MOLES_CELLSTANDARD * rand(80,120)/100 - var/badflag = 0 - - //Breathable planet - if (habitability_class == HABITABILITY_OKAY) - atmosphere.gas[GAS_OXYGEN] += MOLES_O2STANDARD - total_moles -= MOLES_O2STANDARD - badflag = XGM_GAS_FUEL|XGM_GAS_CONTAMINANT - - var/gasnum = rand(1,4) - var/i = 1 - var/sanity = prob(99.9) - while (i <= gasnum && total_moles && newgases.len) - if (badflag && sanity) - for(var/g in newgases) - if (gas_data.flags[g] & badflag) - newgases -= g - var/ng = pick_n_take(newgases) //pick a gas - if (sanity) //make sure atmosphere is not flammable... always - if (gas_data.flags[ng] & XGM_GAS_OXIDIZER) - badflag |= XGM_GAS_FUEL - if (gas_data.flags[ng] & XGM_GAS_FUEL) - badflag |= XGM_GAS_OXIDIZER - sanity = 0 - - var/part = total_moles * rand(3,80)/100 //allocate percentage to it - if (i == gasnum || !newgases.len) //if it's last gas, let it have all remaining moles - part = total_moles - atmosphere.gas[ng] += part - total_moles = max(total_moles - part, 0) - i++ - -/obj/effect/overmap/visitable/sector/exoplanet/proc/get_atmosphere_color() - var/list/colors = list() - for (var/g in atmosphere.gas) - if (gas_data.tile_overlay_color[g]) - colors += gas_data.tile_overlay_color[g] - if (colors.len) - return MixColors(colors) \ No newline at end of file diff --git a/code/modules/overmap/exoplanets/exoplanet_fauna.dm b/code/modules/overmap/exoplanets/exoplanet_fauna.dm deleted file mode 100644 index c7dff9fd008c1..0000000000000 --- a/code/modules/overmap/exoplanets/exoplanet_fauna.dm +++ /dev/null @@ -1,92 +0,0 @@ -/obj/effect/overmap/visitable/sector/exoplanet/proc/adapt_animal(mob/living/simple_animal/A, setname = TRUE) - if (setname) - if (species[A.type]) - A.SetName(species[A.type]) - A.real_name = species[A.type] - else - A.SetName("alien creature") - A.real_name = "alien creature" - A.verbs |= /mob/living/simple_animal/proc/name_species - if (atmosphere) - //Set up gases for living things - if (!LAZYLEN(breathgas)) - var/list/goodgases = gas_data.gases.Copy() - var/gasnum = min(rand(1,3), goodgases.len) - for (var/i = 1 to gasnum) - var/gas = pick(goodgases) - breathgas[gas] = round(0.4*goodgases[gas], 0.1) - goodgases -= gas - if (!badgas) - var/list/badgases = gas_data.gases.Copy() - badgases -= atmosphere.gas - badgas = pick(badgases) - - A.minbodytemp = atmosphere.temperature - 20 - A.maxbodytemp = atmosphere.temperature + 30 - A.bodytemperature = (A.maxbodytemp+A.minbodytemp)/2 - if (A.min_gas) - A.min_gas = breathgas.Copy() - if (A.max_gas) - A.max_gas = list() - A.max_gas[badgas] = 5 - else - A.min_gas = null - A.max_gas = null - -/obj/effect/overmap/visitable/sector/exoplanet/proc/remove_animal(mob/M) - animals -= M - GLOB.death_event.unregister(M, src) - GLOB.destroyed_event.unregister(M, src) - repopulate_types |= M.type - -/obj/effect/overmap/visitable/sector/exoplanet/proc/handle_repopulation() - for (var/i = 1 to round(max_animal_count - animals.len)) - if (prob(10)) - var/turf/simulated/T = pick_area_turf(planetary_area, list(/proc/not_turf_contains_dense_objects)) - var/mob_type = pick(repopulate_types) - var/mob/S = new mob_type(T) - track_animal(S) - adapt_animal(S) - if (animals.len >= max_animal_count) - repopulating = 0 - -/obj/effect/overmap/visitable/sector/exoplanet/proc/track_animal(mob/A) - animals += A - GLOB.death_event.register(A, src, /obj/effect/overmap/visitable/sector/exoplanet/proc/remove_animal) - GLOB.destroyed_event.register(A, src, /obj/effect/overmap/visitable/sector/exoplanet/proc/remove_animal) - -/obj/effect/overmap/visitable/sector/exoplanet/proc/get_random_species_name() - return pick("nol","shan","can","fel","xor")+pick("a","e","o","t","ar")+pick("ian","oid","ac","ese","inian","rd") - -/obj/effect/overmap/visitable/sector/exoplanet/proc/rename_species(var/species_type, var/newname, var/force = FALSE) - if (species[species_type] && !force) - return FALSE - - species[species_type] = newname - log_and_message_admins("renamed [species_type] to [newname]") - for (var/mob/living/simple_animal/A in animals) - if (istype(A,species_type)) - A.SetName(newname) - A.real_name = newname - A.verbs -= /mob/living/simple_animal/proc/name_species - return TRUE - -/obj/effect/landmark/exoplanet_spawn - name = "spawn exoplanet animal" - -/obj/effect/landmark/exoplanet_spawn/proc/do_spawn(obj/effect/overmap/visitable/sector/exoplanet/planet) - if (LAZYLEN(planet.fauna_types)) - var/beastie = pick(planet.fauna_types) - var/mob/M = new beastie(get_turf(src)) - planet.adapt_animal(M) - planet.track_animal(M) - -/obj/effect/landmark/exoplanet_spawn/megafauna - name = "spawn exoplanet megafauna" - -/obj/effect/landmark/exoplanet_spawn/megafauna/do_spawn(obj/effect/overmap/visitable/sector/exoplanet/planet) - if (LAZYLEN(planet.megafauna_types)) - var/beastie = pick(planet.megafauna_types) - var/mob/M = new beastie(get_turf(src)) - planet.adapt_animal(M) - planet.track_animal(M) diff --git a/code/modules/overmap/exoplanets/exoplanet_flora.dm b/code/modules/overmap/exoplanets/exoplanet_flora.dm deleted file mode 100644 index cfade86c968d4..0000000000000 --- a/code/modules/overmap/exoplanets/exoplanet_flora.dm +++ /dev/null @@ -1,69 +0,0 @@ -/obj/effect/overmap/visitable/sector/exoplanet/proc/generate_flora() - for (var/i = 1 to flora_diversity) - var/datum/seed/S = new() - S.randomize() - var/planticon = "alien[rand(1,4)]" - S.set_trait(TRAIT_PRODUCT_ICON,planticon) - S.set_trait(TRAIT_PLANT_ICON,planticon) - var/color = pick(plant_colors) - if (color == "RANDOM") - color = get_random_colour(0,75,190) - S.set_trait(TRAIT_PLANT_COLOUR,color) - var/carnivore_prob = rand(100) - if (carnivore_prob < 10) - S.set_trait(TRAIT_CARNIVOROUS,2) - S.set_trait(TRAIT_SPREAD,1) - else if (carnivore_prob < 20) - S.set_trait(TRAIT_CARNIVOROUS,1) - small_flora_types += S - if (has_trees) - var/tree_diversity = max(1,flora_diversity/2) - for (var/i = 1 to tree_diversity) - var/datum/seed/S = new() - S.randomize() - S.set_trait(TRAIT_PRODUCT_ICON,"alien[rand(1,5)]") - S.set_trait(TRAIT_PLANT_ICON,"tree") - S.set_trait(TRAIT_SPREAD,0) - S.set_trait(TRAIT_HARVEST_REPEAT,1) - S.set_trait(TRAIT_LARGE,1) - var/color = pick(plant_colors) - if (color == "RANDOM") - color = get_random_colour(0,75,190) - S.set_trait(TRAIT_LEAVES_COLOUR,color) - S.chems[/datum/reagent/woodpulp] = 1 - big_flora_types += S - -/obj/effect/overmap/visitable/sector/exoplanet/proc/adapt_seed(datum/seed/S) - S.set_trait(TRAIT_IDEAL_HEAT, atmosphere.temperature + rand(-5,5),800,70) - S.set_trait(TRAIT_HEAT_TOLERANCE, S.get_trait(TRAIT_HEAT_TOLERANCE) + rand(-5,5),800,70) - S.set_trait(TRAIT_LOWKPA_TOLERANCE, atmosphere.return_pressure() + rand(-5,-50),80,0) - S.set_trait(TRAIT_HIGHKPA_TOLERANCE, atmosphere.return_pressure() + rand(5,50),500,110) - if (S.exude_gasses) - S.exude_gasses -= badgas - if (atmosphere) - if (S.consume_gasses) - S.consume_gasses = list(pick(atmosphere.gas)) // ensure that if the plant consumes a gas, the atmosphere will have it - for (var/g in atmosphere.gas) - if (gas_data.flags[g] & XGM_GAS_CONTAMINANT) - S.set_trait(TRAIT_TOXINS_TOLERANCE, rand(10,15)) - if (prob(50)) - var/chem_type = SSchemistry.get_random_chem(TRUE, atmosphere ? atmosphere.temperature : T0C) - if (chem_type) - var/nutriment = S.chems[/datum/reagent/nutriment] - S.chems.Cut() - S.chems[/datum/reagent/nutriment] = nutriment - S.chems[chem_type] = list(rand(1,10),rand(10,20)) - -/obj/effect/landmark/exoplanet_spawn/plant - name = "spawn exoplanet plant" - -/obj/effect/landmark/exoplanet_spawn/plant/do_spawn(var/obj/effect/overmap/visitable/sector/exoplanet/planet) - if (LAZYLEN(planet.small_flora_types)) - new /obj/machinery/portable_atmospherics/hydroponics/soil/invisible(get_turf(src), pick(planet.small_flora_types), 1) - -/obj/effect/landmark/exoplanet_spawn/large_plant - name = "spawn exoplanet large plant" - -/obj/effect/landmark/exoplanet_spawn/large_plant/do_spawn(var/obj/effect/overmap/visitable/sector/exoplanet/planet) - if (LAZYLEN(planet.big_flora_types)) - new /obj/machinery/portable_atmospherics/hydroponics/soil/invisible(get_turf(src), pick(planet.big_flora_types), 1) \ No newline at end of file diff --git a/code/modules/overmap/exoplanets/exoplanet_skybox.dm b/code/modules/overmap/exoplanets/exoplanet_skybox.dm deleted file mode 100644 index bf277f38b25bb..0000000000000 --- a/code/modules/overmap/exoplanets/exoplanet_skybox.dm +++ /dev/null @@ -1,59 +0,0 @@ -/obj/effect/overmap/visitable/sector/exoplanet/get_skybox_representation() - return skybox_image - -/obj/effect/overmap/visitable/sector/exoplanet/proc/get_base_image() - var/image/base = image('icons/skybox/planet.dmi', "base") - base.color = get_surface_color() - return base - -/obj/effect/overmap/visitable/sector/exoplanet/proc/generate_planet_image() - skybox_image = image('icons/skybox/planet.dmi', "") - - skybox_image.overlays += get_base_image() - - for (var/datum/exoplanet_theme/theme in themes) - skybox_image.overlays += theme.get_planet_image_extra() - - if (water_color) //TODO: move water levels out of randommap into exoplanet - var/image/water = image('icons/skybox/planet.dmi', "water") - water.color = water_color - water.appearance_flags = DEFAULT_APPEARANCE_FLAGS | PIXEL_SCALE - water.SetTransform(rotation = rand(0, 360)) - skybox_image.overlays += water - - if (atmosphere && atmosphere.return_pressure() > SOUND_MINIMUM_PRESSURE) - - var/atmo_color = get_atmosphere_color() - if (!atmo_color) - atmo_color = COLOR_WHITE - - var/image/clouds = image('icons/skybox/planet.dmi', "weak_clouds") - - if (water_color) - clouds.overlays += image('icons/skybox/planet.dmi', "clouds") - - clouds.color = atmo_color - skybox_image.overlays += clouds - - var/image/atmo = image('icons/skybox/planet.dmi', "atmoring") - skybox_image.underlays += atmo - - var/image/shadow = image('icons/skybox/planet.dmi', "shadow") - shadow.blend_mode = BLEND_MULTIPLY - skybox_image.overlays += shadow - - var/image/light = image('icons/skybox/planet.dmi', "lightrim") - skybox_image.overlays += light - - if (prob(20)) - var/image/rings = image('icons/skybox/planet_rings.dmi') - rings.icon_state = pick("sparse", "dense") - rings.color = pick("#f0fcff", "#dcc4ad", "#d1dcad", "#adb8dc") - rings.pixel_x = -128 - rings.pixel_y = -128 - skybox_image.overlays += rings - - skybox_image.pixel_x = rand(0,64) - skybox_image.pixel_y = rand(128,256) - skybox_image.appearance_flags = DEFAULT_APPEARANCE_FLAGS | RESET_COLOR - skybox_image.blend_mode = BLEND_OVERLAY diff --git a/code/modules/overmap/exoplanets/planet_themes/_planet_theme.dm b/code/modules/overmap/exoplanets/planet_themes/_planet_theme.dm deleted file mode 100644 index 652ebe6443029..0000000000000 --- a/code/modules/overmap/exoplanets/planet_themes/_planet_theme.dm +++ /dev/null @@ -1,20 +0,0 @@ -/datum/exoplanet_theme - var/name = "Nothing Special" - var/ruin_tags_whitelist - var/ruin_tags_blacklist - var/list/sub_themes = list() // other themes that work in tandem - -// Called by exoplanet datum before applying its map generators -/datum/exoplanet_theme/proc/before_map_generation(obj/effect/overmap/visitable/sector/exoplanet/E) - -// Called by exoplanet datum after applying its map generators and spawning ruins -/datum/exoplanet_theme/proc/after_map_generation(obj/effect/overmap/visitable/sector/exoplanet/E) - -/datum/exoplanet_theme/proc/adjust_atmosphere(obj/effect/overmap/visitable/sector/exoplanet/E) - -/datum/exoplanet_theme/proc/get_planet_image_extra() - -/datum/exoplanet_theme/proc/get_sensor_data() - return "No significant terrain features detected." - -/datum/exoplanet_theme/proc/adapt_animal(obj/effect/overmap/visitable/sector/exoplanet/E, mob/A) diff --git a/code/modules/overmap/exoplanets/planet_themes/mountains.dm b/code/modules/overmap/exoplanets/planet_themes/mountains.dm deleted file mode 100644 index 3e5880e48576c..0000000000000 --- a/code/modules/overmap/exoplanets/planet_themes/mountains.dm +++ /dev/null @@ -1,38 +0,0 @@ -/datum/exoplanet_theme/mountains - name = "Mountains" - var/rock_color - -/datum/exoplanet_theme/mountains/get_sensor_data() - return "Extensive cave systems and mountain regions detected." - -/datum/exoplanet_theme/mountains/before_map_generation(obj/effect/overmap/visitable/sector/exoplanet/E) - rock_color = pick(E.rock_colors) - for(var/zlevel in E.map_z) - new /datum/random_map/automata/cave_system/mountains(null,TRANSITIONEDGE,TRANSITIONEDGE,zlevel,E.maxx-TRANSITIONEDGE,E.maxy-TRANSITIONEDGE,0,1,1, E.planetary_area, rock_color) - -/datum/exoplanet_theme/mountains/get_planet_image_extra() - var/image/res = image('icons/skybox/planet.dmi', "mountains") - res.color = rock_color - return res - -/datum/random_map/automata/cave_system/mountains - iterations = 2 - descriptor = "space mountains" - wall_type = /turf/simulated/mineral - cell_threshold = 6 - target_turf_type = null - floor_type = null - var/rock_color - -/datum/random_map/automata/cave_system/mountains/New(seed, tx, ty, tz, tlx, tly, do_not_apply, do_not_announce, never_be_priority = 0, used_area, _rock_color) - if (_rock_color) - rock_color = _rock_color - if (target_turf_type == null) - target_turf_type = world.turf - if (floor_type == null) - floor_type = world.turf - ..() - -/datum/random_map/automata/cave_system/mountains/get_additional_spawns(value, turf/simulated/mineral/T) - if (istype(T)) - T.queue_icon_update() diff --git a/code/modules/overmap/exoplanets/planet_themes/radiation_bombing.dm b/code/modules/overmap/exoplanets/planet_themes/radiation_bombing.dm deleted file mode 100644 index c6323a782aa0c..0000000000000 --- a/code/modules/overmap/exoplanets/planet_themes/radiation_bombing.dm +++ /dev/null @@ -1,29 +0,0 @@ -/datum/exoplanet_theme/radiation_bombing - name = "Radiation Bombardment" - ruin_tags_blacklist = RUIN_HUMAN - -/datum/exoplanet_theme/radiation_bombing/adjust_atmosphere(obj/effect/overmap/visitable/sector/exoplanet/E) - if (E.atmosphere) - E.atmosphere.temperature += rand(20, 100) - E.atmosphere.update_values() - -/datum/exoplanet_theme/radiation_bombing/get_sensor_data() - return "Hotspots of radiation detected." - -/datum/exoplanet_theme/radiation_bombing/after_map_generation(obj/effect/overmap/visitable/sector/exoplanet/E) - var/radiation_power = rand(10, 37.5) - var/num_craters = round(min(0.04, rand()) * 0.02 * E.maxx * E.maxy) - for (var/i = 1 to num_craters) - var/turf/simulated/T = pick_area_turf(E.planetary_area, list(/proc/not_turf_contains_dense_objects)) - if (!T) // ran out of space somehow - return - new/obj/structure/rubble/war(T) - var/datum/radiation_source/S = new(T, radiation_power, FALSE) - S.range = 4 - SSradiation.add_source(S) - T.set_light(0.4, 1, 2, l_color = PIPE_COLOR_GREEN) - for (var/turf/simulated/floor/exoplanet/crater in circlerangeturfs(T, 3)) - if (prob(10)) - new/obj/item/remains/xeno/charred(crater) - crater.melt() - crater.update_icon() diff --git a/code/modules/overmap/exoplanets/planet_themes/robotic_guardians.dm b/code/modules/overmap/exoplanets/planet_themes/robotic_guardians.dm deleted file mode 100644 index 5ef9a3212169f..0000000000000 --- a/code/modules/overmap/exoplanets/planet_themes/robotic_guardians.dm +++ /dev/null @@ -1,23 +0,0 @@ -/datum/exoplanet_theme/robotic_guardians - name = "Robotic Guardians" - var/list/guardian_types = list( - /mob/living/simple_animal/hostile/hivebot, - /mob/living/simple_animal/hostile/hivebot/range, - /mob/living/simple_animal/hostile/viscerator/hive - ) - var/list/mega_guardian_types = list( - /mob/living/simple_animal/hostile/hivebot/mega - ) - -/datum/exoplanet_theme/robotic_guardians/before_map_generation(obj/effect/overmap/visitable/sector/exoplanet/E) - E.ruin_tags_whitelist |= RUIN_ALIEN - E.fauna_types |= guardian_types - E.megafauna_types |= mega_guardian_types - -/datum/exoplanet_theme/robotic_guardians/adapt_animal(obj/effect/overmap/visitable/sector/exoplanet/E, mob/A) - // Stopping robots from fighting each other - if (is_type_in_list(A, guardian_types | mega_guardian_types)) - A.faction = "Ancient Guardian" - -/datum/exoplanet_theme/robotic_guardians/get_sensor_data() - return "Movement without corresponding lifesigns detected on the surface." \ No newline at end of file diff --git a/code/modules/overmap/exoplanets/planet_themes/ruined_city.dm b/code/modules/overmap/exoplanets/planet_themes/ruined_city.dm deleted file mode 100644 index f1a63cd5f712a..0000000000000 --- a/code/modules/overmap/exoplanets/planet_themes/ruined_city.dm +++ /dev/null @@ -1,219 +0,0 @@ - -#define FLOOR_VALUE 0 -#define WALL_VALUE 1 -#define DOOR_VALUE 3 -#define ROAD_VALUE 10 -#define ARTIFACT_VALUE 11 - -#define TRANSLATE_COORD(X,Y) ((((Y) - 1) * limit_x) + (X)) - -/datum/exoplanet_theme/ruined_city - name = "Ruined City" - ruin_tags_whitelist = RUIN_ALIEN|RUIN_NATURAL|RUIN_WRECK - sub_themes = list(/datum/exoplanet_theme/robotic_guardians) - var/spooky_ambience = list( - 'sound/ambience/ominous1.ogg', - 'sound/ambience/ominous2.ogg', - 'sound/ambience/ominous3.ogg' - ) - -/datum/exoplanet_theme/ruined_city/before_map_generation(obj/effect/overmap/visitable/sector/exoplanet/E) - E.ruin_tags_whitelist |= RUIN_ALIEN - for (var/zlevel in E.map_z) - new /datum/random_map/city(null,1,1,zlevel,E.maxx,E.maxy,0,1,1, E.planetary_area) - - if (prob(50)) - E.lightlevel = rand(5,10)/10 //deserts are usually :lit: - - if (prob(50)) - var/datum/exoplanet_theme/robotic_guardians/T = new /datum/exoplanet_theme/robotic_guardians - E.themes += T - E.possible_themes -= /datum/exoplanet_theme/robotic_guardians - - T.before_map_generation(E) - -/datum/exoplanet_theme/ruined_city/after_map_generation(obj/effect/overmap/visitable/sector/exoplanet/E) - var/area/A = E.planetary_area - LAZYDISTINCTADD(A.ambience, spooky_ambience) - -/datum/exoplanet_theme/ruined_city/get_sensor_data() - return "Extensive artificial structures detected on the surface." - -/datum/exoplanet_theme/ruined_city/get_planet_image_extra() - return image('icons/skybox/planet.dmi', "ruins") - -/datum/random_map/city - descriptor = "ruined city" - initial_wall_cell = 0 - initial_cell_char = -1 - var/max_building_size = 11 //Size of buildings in tiles. Must be odd number for building generation to work properly. - var/buildings_number = 4 //Buildings per block - var/list/blocks_x = list(TRANSITIONEDGE + 1) //coordinates for start of blocs - var/list/blocks_y = list(TRANSITIONEDGE + 1) - var/list/building_types = list( - /datum/random_map/maze/concrete = 90, - /datum/random_map/maze/lab - ) - var/list/building_maps - -/datum/random_map/city/generate_map() - var/block_size = buildings_number * max_building_size + 2 - var/num_blocks_x = round((limit_x - 2*TRANSITIONEDGE)/block_size) - var/num_blocks_y = round((limit_y - 2*TRANSITIONEDGE)/block_size) - - //Get blocks borders coordinates - for (var/i = 1 to num_blocks_x) - blocks_x += blocks_x[i] + block_size + 1 - for (var/i = 1 to num_blocks_y) - blocks_y += blocks_x[i] + block_size + 1 - blocks_x += limit_x - TRANSITIONEDGE - 1 - blocks_y += limit_y - TRANSITIONEDGE - 1 - - //Draw roads - for (var/x in blocks_x) - for (var/y = 1 to limit_y) - map[TRANSLATE_COORD(x-1,y)] = ROAD_VALUE - map[TRANSLATE_COORD(x,y)] = ROAD_VALUE - map[TRANSLATE_COORD(x+1,y)] = ROAD_VALUE - for (var/y in blocks_y) - for (var/x = 1 to limit_x) - map[TRANSLATE_COORD(x,y-1)] = ROAD_VALUE - map[TRANSLATE_COORD(x,y)] = ROAD_VALUE - map[TRANSLATE_COORD(x,y+1)] = ROAD_VALUE - - //Place buildings - for (var/i = 1 to blocks_x.len - 1) - for (var/j = 1 to blocks_y.len - 1) - for (var/k = 0 to buildings_number - 1) - for (var/l = 0 to buildings_number - 1) - var/building_x = blocks_x[i] + 2 + max_building_size * k - var/building_y = blocks_y[j] + 2 + max_building_size * l - var/building_size_x = pick(7,9,9,11,11,11) - var/building_size_y = pick(7,9,9,11,11,11) - if (building_x + building_size_x >= limit_x - TRANSITIONEDGE) - continue - if (building_y + building_size_y >= limit_y - TRANSITIONEDGE) - continue - var/building_type = pickweight(building_types) - var/datum/random_map/building = new building_type(null, building_x, building_y, origin_z, building_size_x, building_size_y, 1, 1, 1, use_area) - LAZYADD(building_maps, building) // They're applied later to let buildings handle their own shit - return 1 - -/datum/random_map/city/get_appropriate_path(var/value) - if (value == ROAD_VALUE) - return /turf/simulated/floor/exoplanet/concrete/reinforced/road - -/datum/random_map/city/apply_to_map() - ..() - for (var/datum/random_map/building in building_maps) - building.apply_to_map() - -// Buildings - -//Generic ruin -/datum/random_map/maze/concrete - wall_type = /turf/simulated/wall/concrete - floor_type = /turf/simulated/floor/exoplanet/concrete/reinforced - preserve_map = 0 - -/datum/random_map/maze/concrete/get_appropriate_path(var/value) - if (value == WALL_VALUE) - if (prob(80)) - return /turf/simulated/wall/concrete - else - return /turf/simulated/floor/exoplanet/concrete/reinforced - return ..() - -/datum/random_map/maze/concrete/get_additional_spawns(var/value, var/turf/simulated/floor/T) - if (!istype(T)) - return - if (prob(10)) - new/obj/item/remains/xeno/charred(T) - if ((T.broken && prob(80)) || prob(10)) - new/obj/structure/rubble/house(T) - -//Artifact containment lab -/turf/simulated/wall/containment - paint_color = COLOR_GRAY20 - -/turf/simulated/wall/containment/New(var/newloc) - ..(newloc,MATERIAL_CONCRETE, MATERIAL_ALIENALLOY) - -/datum/random_map/maze/lab - wall_type = /turf/simulated/wall/containment - floor_type = /turf/simulated/floor/fixed/alium/airless - preserve_map = 0 - var/artifacts_to_spawn = 1 - -/datum/random_map/maze/lab/New(var/seed, var/tx, var/ty, var/tz, var/tlx, var/tly, var/do_not_apply, var/do_not_announce, var/never_be_priority = 0) - if (prob(10)) - artifacts_to_spawn = rand(2,3) - ..() - -/datum/random_map/maze/lab/generate_map() - ..() - for (var/x in 1 to limit_x - 1) - for (var/y in 1 to limit_y - 1) - var/value = map[get_map_cell(x,y)] - if (value != FLOOR_VALUE) - continue - var/list/neighbors = list() - for (var/offset in list(list(0,1), list(0,-1), list(1,0), list(-1,0))) - var/char = map[get_map_cell(x + offset[1], y + offset[2])] - if (char == FLOOR_VALUE || char == DOOR_VALUE) - neighbors.Add(get_map_cell(x + offset[1], y + offset[2])) - if (length(neighbors) > 1) - continue - - map[neighbors[1]] = DOOR_VALUE - if (artifacts_to_spawn) - map[get_map_cell(x,y)] = ARTIFACT_VALUE - artifacts_to_spawn-- - var/entrance_x = pick(rand(2,limit_x-1), 1, limit_x) - var/entrance_y = pick(1, limit_y) - if (entrance_x == 1 || entrance_x == limit_x) - entrance_y = rand(2,limit_y-1) - map[get_map_cell(entrance_x,entrance_y)] = DOOR_VALUE - -/datum/random_map/maze/lab/get_appropriate_path(var/value) - if (value == ARTIFACT_VALUE) - return floor_type - if (value == DOOR_VALUE) - return floor_type - . = ..() - -/datum/random_map/maze/lab/get_additional_spawns(var/value, var/turf/simulated/floor/T) - if (!istype(T)) - return - - if (value == DOOR_VALUE) - new/obj/machinery/door/airlock/alien(T) - return - - if (value == ARTIFACT_VALUE) - var/datum/artifact_find/A = new() - new A.artifact_find_type(T) - qdel(A) - return - - if (value == FLOOR_VALUE) - if (prob(20)) - new/obj/structure/rubble/lab(T) - if (prob(20)) - new/obj/item/remains/xeno/charred(T) - - -#undef TRANSLATE_COORD - -/turf/simulated/floor/exoplanet/concrete/reinforced - name = "reinforced concrete" - desc = "Stone-like artificial material. It has been reinforced with an unknown compound." - icon_state = "hexacrete" - -/turf/simulated/floor/exoplanet/concrete/reinforced/road - icon_state = "hexacrete_dark" - -/turf/simulated/floor/exoplanet/concrete/reinforced/damaged - broken = TRUE -/obj/item/remains/xeno/charred - color = COLOR_DARK_GRAY diff --git a/code/modules/overmap/exoplanets/planet_types/barren.dm b/code/modules/overmap/exoplanets/planet_types/barren.dm deleted file mode 100644 index 2eb3a332bf966..0000000000000 --- a/code/modules/overmap/exoplanets/planet_types/barren.dm +++ /dev/null @@ -1,50 +0,0 @@ -/obj/effect/overmap/visitable/sector/exoplanet/barren - name = "barren exoplanet" - desc = "An exoplanet that couldn't hold its atmosphere." - color = "#6c6c6c" - planetary_area = /area/exoplanet/barren - rock_colors = list(COLOR_BEIGE, COLOR_GRAY80, COLOR_BROWN) - possible_themes = list(/datum/exoplanet_theme/mountains) - map_generators = list(/datum/random_map/noise/exoplanet/barren, /datum/random_map/noise/ore/rich) - ruin_tags_blacklist = RUIN_HABITAT|RUIN_WATER - features_budget = 6 - surface_color = "#807d7a" - water_color = null - habitability_distribution = HABITABILITY_BAD - has_trees = FALSE - -/obj/effect/overmap/visitable/sector/exoplanet/barren/generate_atmosphere() - ..() - atmosphere.remove_ratio(0.9) - -/obj/effect/overmap/visitable/sector/exoplanet/barren/generate_flora() - if(prob(10)) - flora_diversity = 1 - ..() - -/datum/random_map/noise/exoplanet/barren - descriptor = "barren exoplanet" - smoothing_iterations = 4 - land_type = /turf/simulated/floor/exoplanet/barren - flora_prob = 0.1 - large_flora_prob = 0 - fauna_prob = 0 - -/turf/simulated/floor/exoplanet/barren - name = "ground" - icon = 'icons/turf/flooring/asteroid.dmi' - icon_state = "asteroid" - -/turf/simulated/floor/exoplanet/barren/on_update_icon() - overlays.Cut() - if(prob(20)) - overlays += image('icons/turf/flooring/decals.dmi', "asteroid[rand(0,9)]") - -/turf/simulated/floor/exoplanet/barren/Initialize() - . = ..() - update_icon() - -/area/exoplanet/barren - name = "\improper Planetary surface" - ambience = list('sound/effects/wind/wind_2_1.ogg','sound/effects/wind/wind_2_2.ogg','sound/effects/wind/wind_3_1.ogg','sound/effects/wind/wind_4_1.ogg','sound/effects/wind/wind_4_2.ogg','sound/effects/wind/wind_5_1.ogg') - base_turf = /turf/simulated/floor/exoplanet/barren diff --git a/code/modules/overmap/exoplanets/planet_types/chlorine.dm b/code/modules/overmap/exoplanets/planet_types/chlorine.dm deleted file mode 100644 index b0d7e42975f66..0000000000000 --- a/code/modules/overmap/exoplanets/planet_types/chlorine.dm +++ /dev/null @@ -1,68 +0,0 @@ -/obj/effect/overmap/visitable/sector/exoplanet/chlorine - name = "chlorine exoplanet" - desc = "An exoplanet with a chlorine based ecosystem. Large quantities of liquid chlorine are present." - color = "#c9df9f" - planetary_area = /area/exoplanet/chlorine - rock_colors = list(COLOR_GRAY80, COLOR_PALE_GREEN_GRAY, COLOR_PALE_BTL_GREEN) - plant_colors = list("#eba487", "#ceeb87", "#eb879c", "#ebd687", "#f6d6c9", "#f2b3e0") - map_generators = list(/datum/random_map/noise/exoplanet/chlorine, /datum/random_map/noise/ore/poor) - ruin_tags_blacklist = RUIN_HABITAT|RUIN_WATER - surface_color = "#a3b879" - water_color = COLOR_BOTTLE_GREEN - habitability_distribution = HABITABILITY_BAD - has_trees = FALSE - flora_diversity = 5 - fauna_types = list(/mob/living/simple_animal/thinbug, /mob/living/simple_animal/hostile/retaliate/beast/samak/alt, /mob/living/simple_animal/yithian, /mob/living/simple_animal/tindalos, /mob/living/simple_animal/hostile/retaliate/jelly) - megafauna_types = list(/mob/living/simple_animal/hostile/retaliate/jelly/mega) - -/obj/effect/overmap/visitable/sector/exoplanet/chlorine/get_atmosphere_color() - return "#e5f2bd" - -/obj/effect/overmap/visitable/sector/exoplanet/chlorine/generate_map() - if(prob(50)) - lightlevel = rand(7,10)/10 //It could be night. - else - lightlevel = 0.1 - ..() - -/obj/effect/overmap/visitable/sector/exoplanet/chlorine/generate_atmosphere() - ..() - if(atmosphere) - atmosphere.adjust_gas(GAS_CHLORINE, MOLES_O2STANDARD) - atmosphere.temperature = T100C - rand(0, 100) - atmosphere.update_values() - -/datum/random_map/noise/exoplanet/chlorine - descriptor = "chlorine exoplanet" - smoothing_iterations = 3 - land_type = /turf/simulated/floor/exoplanet/chlorine_sand - water_type = /turf/simulated/floor/exoplanet/water/shallow/chlorine_liquid - water_level_min = 2 - water_level_max = 3 - fauna_prob = 2 - flora_prob = 5 - large_flora_prob = 0 - -/area/exoplanet/chlorine - ambience = list('sound/effects/wind/desert0.ogg','sound/effects/wind/desert1.ogg','sound/effects/wind/desert2.ogg','sound/effects/wind/desert3.ogg','sound/effects/wind/desert4.ogg','sound/effects/wind/desert5.ogg') - base_turf = /turf/simulated/floor/exoplanet/chlorine_sand - -/turf/simulated/floor/exoplanet/water/shallow/chlorine_liquid - name = "chlorine marsh" - icon = 'icons/turf/chlorine.dmi' - icon_state = "chlorine_liquid" - desc = "A pool of noxious liquid chlorine. It's full of silt and plant matter." - dirt_color = "#d2e0b7" - reagent_type = /datum/reagent/toxin/chlorine - -/turf/simulated/floor/exoplanet/chlorine_sand - name = "chlorinated sand" - icon = 'icons/turf/chlorine.dmi' - icon_state = "chlorine_sand1" - desc = "Sand that has been heavily contaminated by chlorine." - dirt_color = "#d2e0b7" - footstep_type = /decl/footsteps/sand - -/turf/simulated/floor/exoplanet/chlorine_sand/New() - icon_state = "chlorine_sand[rand(0,11)]" - ..() diff --git a/code/modules/overmap/exoplanets/planet_types/desert.dm b/code/modules/overmap/exoplanets/planet_types/desert.dm deleted file mode 100644 index 9ef0360782da4..0000000000000 --- a/code/modules/overmap/exoplanets/planet_types/desert.dm +++ /dev/null @@ -1,155 +0,0 @@ -/obj/effect/overmap/visitable/sector/exoplanet/desert - name = "desert exoplanet" - desc = "An arid exoplanet with sparse biological resources but rich mineral deposits underground." - color = "#a08444" - planetary_area = /area/exoplanet/desert - rock_colors = list(COLOR_BEIGE, COLOR_PALE_YELLOW, COLOR_GRAY80, COLOR_BROWN) - plant_colors = list("#efdd6f","#7b4a12","#e49135","#ba6222","#5c755e","#420d22") - map_generators = list(/datum/random_map/noise/exoplanet/desert, /datum/random_map/noise/ore/rich) - surface_color = "#d6cca4" - water_color = null - habitability_distribution = list(HABITABILITY_IDEAL = 30, HABITABILITY_OKAY = 50, HABITABILITY_BAD = 10) - has_trees = FALSE - flora_diversity = 4 - fauna_types = list(/mob/living/simple_animal/thinbug, /mob/living/simple_animal/tindalos, /mob/living/simple_animal/hostile/voxslug, /mob/living/simple_animal/hostile/retaliate/beast/antlion) - megafauna_types = list(/mob/living/simple_animal/hostile/retaliate/beast/antlion/mega) - -/obj/effect/overmap/visitable/sector/exoplanet/desert/generate_map() - if(prob(70)) - lightlevel = rand(5,10)/10 //deserts are usually :lit: - ..() - -/obj/effect/overmap/visitable/sector/exoplanet/desert/generate_atmosphere() - ..() - if(atmosphere) - var/limit = 1000 - if(habitability_class <= HABITABILITY_OKAY) - var/datum/species/human/H = /datum/species/human - limit = initial(H.heat_level_1) - rand(1,10) - atmosphere.temperature = min(T20C + rand(20, 100), limit) - atmosphere.update_values() - -/obj/effect/overmap/visitable/sector/exoplanet/desert/adapt_seed(var/datum/seed/S) - ..() - if(prob(90)) - S.set_trait(TRAIT_REQUIRES_WATER,0) - else - S.set_trait(TRAIT_REQUIRES_WATER,1) - S.set_trait(TRAIT_WATER_CONSUMPTION,1) - if(prob(75)) - S.set_trait(TRAIT_STINGS,1) - if(prob(75)) - S.set_trait(TRAIT_CARNIVOROUS,2) - S.set_trait(TRAIT_SPREAD,0) - -/datum/random_map/noise/exoplanet/desert - descriptor = "desert exoplanet" - smoothing_iterations = 4 - land_type = /turf/simulated/floor/exoplanet/desert - - flora_prob = 5 - large_flora_prob = 0 - -/datum/random_map/noise/exoplanet/desert/get_additional_spawns(var/value, var/turf/T) - ..() - var/v = noise2value(value) - if(v > 6 && prob(2)) - new/obj/effect/quicksand(T) - -/area/exoplanet/desert - ambience = list('sound/effects/wind/desert0.ogg','sound/effects/wind/desert1.ogg','sound/effects/wind/desert2.ogg','sound/effects/wind/desert3.ogg','sound/effects/wind/desert4.ogg','sound/effects/wind/desert5.ogg') - base_turf = /turf/simulated/floor/exoplanet/desert - -/obj/effect/quicksand - name = "quicksand" - desc = "There is no candy at the bottom." - icon = 'icons/obj/quicksand.dmi' - icon_state = "intact0" - density = FALSE - anchored = TRUE - can_buckle = TRUE - buckle_dir = SOUTH - var/exposed = FALSE - var/busy - -/obj/effect/quicksand/Initialize() - . = ..() - var/turf/T = get_turf(src) - appearance = T.appearance - -/obj/effect/quicksand/user_unbuckle_mob(mob/user) - if(buckled_mob && !user.stat && !user.restrained()) - if(busy) - to_chat(user, SPAN_NOTICE("\The [buckled_mob] is already getting out, be patient.")) - return - var/delay = 6 SECONDS - if(user == buckled_mob) - delay *=2 - user.visible_message( - SPAN_NOTICE("\The [user] tries to climb out of \the [src]."), - SPAN_NOTICE("You begin to pull yourself out of \the [src]."), - SPAN_NOTICE("You hear water sloshing.") - ) - else - user.visible_message( - SPAN_NOTICE("\The [user] begins pulling \the [buckled_mob] out of \the [src]."), - SPAN_NOTICE("You begin to pull \the [buckled_mob] out of \the [src]."), - SPAN_NOTICE("You hear water sloshing.") - ) - busy = TRUE - if(do_after(user, delay, src, DO_PUBLIC_UNIQUE)) - busy = FALSE - if(user == buckled_mob) - if(prob(80)) - to_chat(user, SPAN_WARNING("You slip and fail to get out!")) - return - user.visible_message(SPAN_NOTICE("\The [buckled_mob] pulls himself out of \the [src].")) - else - user.visible_message(SPAN_NOTICE("\The [buckled_mob] has been freed from \the [src] by \the [user].")) - unbuckle_mob() - else - busy = FALSE - to_chat(user, SPAN_WARNING("You slip and fail to get out!")) - return - -/obj/effect/quicksand/unbuckle_mob() - ..() - update_icon() - -/obj/effect/quicksand/buckle_mob(var/mob/L) - ..() - update_icon() - -/obj/effect/quicksand/on_update_icon() - if(!exposed) - return - icon_state = "open" - overlays.Cut() - if(buckled_mob) - overlays += image(icon,icon_state="overlay",layer=ABOVE_HUMAN_LAYER) - -/obj/effect/quicksand/proc/expose() - if(exposed) - return - visible_message(SPAN_WARNING("The upper crust breaks, exposing the treacherous quicksand underneath!")) - SetName(initial(name)) - desc = initial(desc) - icon = initial(icon) - exposed = 1 - update_icon() - -/obj/effect/quicksand/attackby(obj/item/W, mob/user) - if(!exposed && W.force) - expose() - else - ..() - -/obj/effect/quicksand/Crossed(var/atom/movable/AM) - if(isliving(AM)) - var/mob/living/L = AM - if(L.throwing || L.can_overcome_gravity()) - return - buckle_mob(L) - if(!exposed) - expose() - to_chat(L, SPAN_DANGER("You fall into \the [src]!")) diff --git a/code/modules/overmap/exoplanets/planet_types/grass.dm b/code/modules/overmap/exoplanets/planet_types/grass.dm deleted file mode 100644 index df8138caacac1..0000000000000 --- a/code/modules/overmap/exoplanets/planet_types/grass.dm +++ /dev/null @@ -1,110 +0,0 @@ -/obj/effect/overmap/visitable/sector/exoplanet/grass - name = "lush exoplanet" - desc = "Planet with abundant flora and fauna." - color = "#407c40" - planetary_area = /area/exoplanet/grass - rock_colors = list(COLOR_ASTEROID_ROCK, COLOR_GRAY80, COLOR_BROWN) - plant_colors = list("#0e1e14","#1a3e38","#5a7467","#9eab88","#6e7248", "RANDOM") - map_generators = list(/datum/random_map/noise/exoplanet/grass) - habitability_distribution = list(HABITABILITY_IDEAL = 70, HABITABILITY_OKAY = 20, HABITABILITY_BAD = 5) - has_trees = TRUE - flora_diversity = 7 - fauna_types = list(/mob/living/simple_animal/yithian, /mob/living/simple_animal/tindalos, /mob/living/simple_animal/hostile/retaliate/jelly) - megafauna_types = list(/mob/living/simple_animal/hostile/retaliate/parrot/space/megafauna, /mob/living/simple_animal/hostile/retaliate/goose/dire) - -/obj/effect/overmap/visitable/sector/exoplanet/grass/generate_map() - if(prob(40)) - lightlevel = rand(1,7)/10 //give a chance of twilight jungle - ..() - -/obj/effect/overmap/visitable/sector/exoplanet/grass/generate_atmosphere() - ..() - if(atmosphere) - atmosphere.temperature = T20C + rand(10, 30) - atmosphere.update_values() - -/obj/effect/overmap/visitable/sector/exoplanet/grass/get_surface_color() - return grass_color - -/obj/effect/overmap/visitable/sector/exoplanet/grass/adapt_seed(var/datum/seed/S) - ..() - var/carnivore_prob = rand(100) - if(carnivore_prob < 30) - S.set_trait(TRAIT_CARNIVOROUS,2) - if(prob(75)) - S.get_trait(TRAIT_STINGS, 1) - else if(carnivore_prob < 60) - S.set_trait(TRAIT_CARNIVOROUS,1) - if(prob(50)) - S.get_trait(TRAIT_STINGS) - if(prob(15) || (S.get_trait(TRAIT_CARNIVOROUS) && prob(40))) - S.set_trait(TRAIT_BIOLUM,1) - S.set_trait(TRAIT_BIOLUM_COLOUR,get_random_colour(0,75,190)) - - if(prob(30)) - S.set_trait(TRAIT_PARASITE,1) - if(!S.get_trait(TRAIT_LARGE)) - var/vine_prob = rand(100) - if(vine_prob < 15) - S.set_trait(TRAIT_SPREAD,2) - else if(vine_prob < 30) - S.set_trait(TRAIT_SPREAD,1) - -/area/exoplanet/grass - base_turf = /turf/simulated/floor/exoplanet/grass - ambience = list('sound/effects/wind/wind_2_1.ogg','sound/effects/wind/wind_2_2.ogg','sound/effects/wind/wind_3_1.ogg','sound/effects/wind/wind_4_1.ogg','sound/ambience/eeriejungle2.ogg','sound/ambience/eeriejungle1.ogg') - forced_ambience = list( - 'sound/ambience/jungle.ogg' - ) - - -/datum/random_map/noise/exoplanet/grass - descriptor = "grass exoplanet" - smoothing_iterations = 2 - land_type = /turf/simulated/floor/exoplanet/grass - water_type = /turf/simulated/floor/exoplanet/water/shallow - - flora_prob = 10 - grass_prob = 50 - large_flora_prob = 30 - -/obj/effect/overmap/visitable/sector/exoplanet/grass/terraformed - name = "life seeded exoplanet" - desc = "Planet with abundant flora and fauna. Shows signs of human terraformation." - color = "#58aa8b" - planetary_area = /area/exoplanet/grass - rock_colors = list(COLOR_ASTEROID_ROCK, COLOR_GRAY80, COLOR_BROWN) - plant_colors = list("#2f573e","#24574e","#6e9280","#9eab88","#868b58", "#84be7c", "RANDOM") - map_generators = list(/datum/random_map/noise/exoplanet/grass/terraformed) - lightlevel = 0.5 - has_trees = TRUE - flora_diversity = 8 - fauna_types = list(/mob/living/simple_animal/passive/cat, /mob/living/simple_animal/passive/chicken, /mob/living/simple_animal/passive/mouse, /mob/living/simple_animal/passive/opossum, /mob/living/simple_animal/hostile/retaliate/goat, /mob/living/simple_animal/hostile/retaliate/goose, /mob/living/simple_animal/passive/cow) - megafauna_types = list(/mob/living/simple_animal/hostile/retaliate/parrot/space/megafauna, /mob/living/simple_animal/hostile/retaliate/goose/dire) - - //Animals being named alien creature is a bit odd as these would just be earth transplants - species = list( /mob/living/simple_animal/passive/cat = "wild cat", - /mob/living/simple_animal/passive/chicken = "wild chicken", - /mob/living/simple_animal/passive/mouse = "mouse", - /mob/living/simple_animal/passive/opossum = "opossum", - /mob/living/simple_animal/hostile/retaliate/goat = "wild goat", - /mob/living/simple_animal/hostile/retaliate/goose = "goose", - /mob/living/simple_animal/passive/cow = "wild cow") - -/obj/effect/overmap/visitable/sector/exoplanet/grass/terraformed/generate_habitability() - habitability_class = HABITABILITY_IDEAL - -/obj/effect/overmap/visitable/sector/exoplanet/grass/terraformed/generate_atmosphere() - ..() - if(atmosphere) - atmosphere.temperature = T0C + rand(0, 50) - atmosphere.update_values() - -/obj/effect/overmap/visitable/sector/exoplanet/grass/generate_map() - lightlevel = rand(0.7,0.9)/10 - ..() - -/datum/random_map/noise/exoplanet/grass/terraformed - descriptor = "terraformed grass exoplanet" - flora_prob = 15 - large_flora_prob = 30 diff --git a/code/modules/overmap/exoplanets/planet_types/shrouded.dm b/code/modules/overmap/exoplanets/planet_types/shrouded.dm deleted file mode 100644 index b733b57e06906..0000000000000 --- a/code/modules/overmap/exoplanets/planet_types/shrouded.dm +++ /dev/null @@ -1,73 +0,0 @@ -/obj/effect/overmap/visitable/sector/exoplanet/shrouded - name = "shrouded exoplanet" - desc = "An exoplanet shrouded in a perpetual storm of bizzare, light absorbing particles." - color = "#783ca4" - planetary_area = /area/exoplanet/shrouded - rock_colors = list(COLOR_INDIGO, COLOR_DARK_BLUE_GRAY, COLOR_NAVY_BLUE) - plant_colors = list("#3c5434", "#2f6655", "#0e703f", "#495139", "#394c66", "#1a3b77", "#3e3166", "#52457c", "#402d56", "#580d6d") - map_generators = list(/datum/random_map/noise/exoplanet/shrouded, /datum/random_map/noise/ore/poor) - ruin_tags_blacklist = RUIN_HABITAT - lightlevel = -0.15 - surface_color = "#3e3960" - water_color = "#2b2840" - has_trees = TRUE - flora_diversity = 4 - fauna_types = list(/mob/living/simple_animal/hostile/retaliate/royalcrab, - /mob/living/simple_animal/hostile/retaliate/jelly/alt, - /mob/living/simple_animal/hostile/retaliate/beast/shantak/alt, - /mob/living/simple_animal/hostile/leech) - - -/obj/effect/overmap/visitable/sector/exoplanet/shrouded/generate_atmosphere() - ..() - if(atmosphere) - atmosphere.temperature = T20C - rand(10, 20) - atmosphere.update_values() - -/obj/effect/overmap/visitable/sector/exoplanet/shrouded/get_atmosphere_color() - return COLOR_BLACK - -/datum/random_map/noise/exoplanet/shrouded - descriptor = "shrouded exoplanet" - smoothing_iterations = 2 - flora_prob = 5 - large_flora_prob = 20 - megafauna_spawn_prob = 2 //Remember to change this if more types are added. - water_level_max = 3 - water_level_min = 2 - land_type = /turf/simulated/floor/exoplanet/shrouded - water_type = /turf/simulated/floor/exoplanet/water/shallow/tar - -/datum/random_map/noise/exoplanet/shrouded/get_additional_spawns(value, turf/T) - ..() - - if(prob(0.1)) - new/obj/structure/leech_spawner(T) - -/area/exoplanet/shrouded - forced_ambience = list("sound/ambience/spookyspace1.ogg", "sound/ambience/spookyspace2.ogg") - base_turf = /turf/simulated/floor/exoplanet/shrouded - -/turf/simulated/floor/exoplanet/water/shallow/tar - name = "tar" - icon = 'icons/turf/shrouded.dmi' - icon_state = "shrouded_tar" - desc = "A pool of viscous and sticky tar." - movement_delay = 12 - reagent_type = /datum/reagent/toxin/tar - dirt_color = "#3e3960" - -/turf/simulated/floor/exoplanet/water/shallow/tar/get_footstep_sound(mob/caller) - return get_footstep(/decl/footsteps/water, caller) - - -/turf/simulated/floor/exoplanet/shrouded - name = "packed sand" - icon = 'icons/turf/shrouded.dmi' - icon_state = "shrouded" - desc = "Sand that has been packed in to solid earth." - dirt_color = "#3e3960" - -/turf/simulated/floor/exoplanet/shrouded/New() - icon_state = "shrouded[rand(0,8)]" - ..() diff --git a/code/modules/overmap/exoplanets/planet_types/snow.dm b/code/modules/overmap/exoplanets/planet_types/snow.dm deleted file mode 100644 index 0c12acbf0c14c..0000000000000 --- a/code/modules/overmap/exoplanets/planet_types/snow.dm +++ /dev/null @@ -1,38 +0,0 @@ -/obj/effect/overmap/visitable/sector/exoplanet/snow - name = "snow exoplanet" - desc = "Cold planet with limited plant life." - color = "#dcdcdc" - planetary_area = /area/exoplanet/snow - rock_colors = list(COLOR_DARK_BLUE_GRAY, COLOR_GUNMETAL, COLOR_GRAY80, COLOR_DARK_GRAY) - plant_colors = list("#d0fef5","#93e1d8","#93e1d8", "#b2abbf", "#3590f3", "#4b4e6d") - map_generators = list(/datum/random_map/noise/exoplanet/snow, /datum/random_map/noise/ore/poor) - surface_color = "#e8faff" - water_color = "#b5dfeb" - habitability_distribution = list(HABITABILITY_IDEAL = 30, HABITABILITY_OKAY = 50, HABITABILITY_BAD = 10) - has_trees = TRUE - flora_diversity = 4 - fauna_types = list(/mob/living/simple_animal/hostile/retaliate/beast/samak, /mob/living/simple_animal/hostile/retaliate/beast/diyaab, /mob/living/simple_animal/hostile/retaliate/beast/shantak) - megafauna_types = list(/mob/living/simple_animal/hostile/retaliate/giant_crab) - -/obj/effect/overmap/visitable/sector/exoplanet/snow/generate_atmosphere() - ..() - if(atmosphere) - var/limit = 0 - if(habitability_class <= HABITABILITY_OKAY) - var/datum/species/human/H = /datum/species/human - limit = initial(H.cold_level_1) + rand(1,10) - atmosphere.temperature = max(T0C - rand(10, 100), limit) - atmosphere.update_values() - -/datum/random_map/noise/exoplanet/snow - descriptor = "snow exoplanet" - smoothing_iterations = 1 - flora_prob = 5 - large_flora_prob = 10 - water_level_max = 3 - land_type = /turf/simulated/floor/exoplanet/snow - water_type = /turf/simulated/floor/exoplanet/ice - -/area/exoplanet/snow - ambience = list('sound/effects/wind/tundra0.ogg','sound/effects/wind/tundra1.ogg','sound/effects/wind/tundra2.ogg','sound/effects/wind/spooky0.ogg','sound/effects/wind/spooky1.ogg') - base_turf = /turf/simulated/floor/exoplanet/snow diff --git a/code/modules/overmap/exoplanets/planet_types/volcanic.dm b/code/modules/overmap/exoplanets/planet_types/volcanic.dm deleted file mode 100644 index 75649ac16a65e..0000000000000 --- a/code/modules/overmap/exoplanets/planet_types/volcanic.dm +++ /dev/null @@ -1,153 +0,0 @@ -/obj/effect/overmap/visitable/sector/exoplanet/volcanic - name = "volcanic exoplanet" - desc = "A tectonically unstable planet, extremely rich in minerals." - color = "#9c2020" - planetary_area = /area/exoplanet/volcanic - rock_colors = list(COLOR_DARK_GRAY) - plant_colors = list("#a23c05","#3f1f0d","#662929","#ba6222","#7a5b3a","#120309") - possible_themes = list() - map_generators = list(/datum/random_map/automata/cave_system/mountains/volcanic, /datum/random_map/noise/exoplanet/volcanic, /datum/random_map/noise/ore/filthy_rich) - ruin_tags_blacklist = RUIN_HABITAT|RUIN_WATER - surface_color = "#261e19" - water_color = "#c74d00" - habitability_distribution = HABITABILITY_BAD - has_trees = FALSE - flora_diversity = 3 - fauna_types = list(/mob/living/simple_animal/thinbug, /mob/living/simple_animal/hostile/retaliate/beast/shantak/lava, /mob/living/simple_animal/hostile/retaliate/beast/charbaby) - megafauna_types = list(/mob/living/simple_animal/hostile/drake) - -/obj/effect/overmap/visitable/sector/exoplanet/volcanic/get_atmosphere_color() - return COLOR_GRAY20 - -/obj/effect/overmap/visitable/sector/exoplanet/volcanic/generate_atmosphere() - ..() - if(atmosphere) - atmosphere.temperature = T20C + rand(220, 800) - atmosphere.update_values() - -/obj/effect/overmap/visitable/sector/exoplanet/volcanic/adapt_seed(var/datum/seed/S) - ..() - S.set_trait(TRAIT_REQUIRES_WATER,0) - S.set_trait(TRAIT_HEAT_TOLERANCE, 1000 + S.get_trait(TRAIT_HEAT_TOLERANCE)) - -/obj/effect/overmap/visitable/sector/exoplanet/volcanic/adapt_animal(var/mob/living/simple_animal/A) - ..() - A.heat_damage_per_tick = 0 //animals not hot, no burning in lava - -/datum/random_map/noise/exoplanet/volcanic - descriptor = "volcanic exoplanet" - smoothing_iterations = 5 - land_type = /turf/simulated/floor/exoplanet/volcanic - water_type = /turf/simulated/floor/exoplanet/lava - water_level_min = 5 - water_level_max = 6 - - fauna_prob = 1 - flora_prob = 3 - large_flora_prob = 0 - -//Squashing most of 1 tile lava puddles -/datum/random_map/noise/exoplanet/volcanic/cleanup() - for(var/x = 1, x <= limit_x, x++) - for(var/y = 1, y <= limit_y, y++) - var/current_cell = get_map_cell(x,y) - if(noise2value(map[current_cell]) < water_level) - continue - var/frendos - for(var/dx in list(-1,0,1)) - for(var/dy in list(-1,0,1)) - var/tmp_cell = get_map_cell(x+dx,y+dy) - if(tmp_cell && tmp_cell != current_cell && noise2value(map[tmp_cell]) >= water_level) - frendos = 1 - break - if(!frendos) - map[current_cell] = 1 - -/area/exoplanet/volcanic - forced_ambience = list('sound/ambience/magma.ogg') - base_turf = /turf/simulated/floor/exoplanet/volcanic - -/turf/simulated/floor/exoplanet/volcanic - name = "volcanic floor" - icon = 'icons/turf/flooring/lava.dmi' - icon_state = "cold" - dirt_color = COLOR_GRAY20 - -/datum/random_map/automata/cave_system/mountains/volcanic - iterations = 2 - descriptor = "space volcanic mountains" - wall_type = /turf/simulated/mineral/volcanic - mineral_turf = /turf/simulated/mineral/random/volcanic - rock_color = COLOR_DARK_GRAY - -/datum/random_map/automata/cave_system/mountains/volcanic/get_additional_spawns(value, var/turf/simulated/mineral/T) - ..() - if(use_area && istype(T)) - T.mined_turf = prob(90) ? use_area.base_turf : /turf/simulated/floor/exoplanet/lava - -/turf/simulated/floor/exoplanet/lava - name = "lava" - icon = 'icons/turf/flooring/lava.dmi' - icon_state = "lava" - movement_delay = 4 - dirt_color = COLOR_GRAY20 - turf_flags = TURF_DISALLOW_BLOB - var/list/victims - -/turf/simulated/floor/exoplanet/lava/on_update_icon() - return - -/turf/simulated/floor/exoplanet/lava/Initialize() - . = ..() - set_light(0.95, 0.5, 2, l_color = COLOR_ORANGE) - -/turf/simulated/floor/exoplanet/lava/Destroy() - STOP_PROCESSING(SSobj, src) - . = ..() - -/turf/simulated/floor/exoplanet/lava/Entered(atom/movable/AM) - ..() - if(locate(/obj/structure/catwalk) in src) - return - var/mob/living/L = AM - if (istype(L) && L.can_overcome_gravity()) - return - if(AM.is_burnable()) - LAZYADD(victims, weakref(AM)) - START_PROCESSING(SSobj, src) - -/turf/simulated/floor/exoplanet/lava/Exited(atom/movable/AM) - . = ..() - LAZYREMOVE(victims, weakref(AM)) - -/turf/simulated/floor/exoplanet/lava/Process() - if(locate(/obj/structure/catwalk) in src) - victims = null - return PROCESS_KILL - for(var/weakref/W in victims) - var/atom/movable/AM = W.resolve() - if (AM == null || get_turf(AM) != src || AM.is_burnable() == FALSE) - victims -= W - continue - var/datum/gas_mixture/environment = return_air() - var/pressure = environment.return_pressure() - var/destroyed = AM.lava_act(environment, 5000 + environment.temperature, pressure) - if(destroyed == TRUE) - victims -= W - if(!LAZYLEN(victims)) - return PROCESS_KILL - -/turf/simulated/floor/exoplanet/lava/get_footstep_sound(var/mob/caller) - return get_footstep(/decl/footsteps/lava, caller) - -/turf/simulated/mineral/volcanic - name = "volcanic rock" - color = COLOR_DARK_GRAY - -/turf/simulated/mineral/random/volcanic - name = "volcanic rock" - color = COLOR_DARK_GRAY - -/turf/simulated/mineral/random/high_chance/volcanic - name = "volcanic rock" - color = COLOR_DARK_GRAY diff --git a/code/modules/overmap/exoplanets/random_map.dm b/code/modules/overmap/exoplanets/random_map.dm deleted file mode 100644 index 58765e155c47a..0000000000000 --- a/code/modules/overmap/exoplanets/random_map.dm +++ /dev/null @@ -1,120 +0,0 @@ -#define COAST_VALUE cell_range + 1 -/datum/random_map/noise/exoplanet - descriptor = "exoplanet" - smoothing_iterations = 1 - smooth_single_tiles = 1 - - var/water_level - var/water_level_min = 0 - var/water_level_max = 5 - var/land_type = /turf/simulated/floor - var/water_type - var/coast_type - - //intended x*y size, used to adjust spawn probs - var/intended_x = 150 - var/intended_y = 150 - var/large_flora_prob = 30 - var/flora_prob = 10 - var/fauna_prob = 2 - var/grass_prob - var/megafauna_spawn_prob = 0.5 //chance that a given fauna mob will instead be a megafauna - - var/list/plantcolors = list("RANDOM") - var/list/grass_cache - -/datum/random_map/noise/exoplanet/New(seed, tx, ty, tz, tlx, tly, do_not_apply, do_not_announce, never_be_priority = 0, used_area, list/_plant_colors) - if (target_turf_type == null) - target_turf_type = world.turf - water_level = rand(water_level_min,water_level_max) - //automagically adjust probs for bigger maps to help with lag - if (isnull(grass_prob)) grass_prob = flora_prob * 2 - var/size_mod = intended_x / tlx * intended_y / tly - flora_prob *= size_mod - large_flora_prob *= size_mod - fauna_prob *= size_mod - if (_plant_colors) - plantcolors = _plant_colors - ..() - - GLOB.using_map.base_turf_by_z[num2text(tz)] = land_type - -/datum/random_map/noise/exoplanet/get_map_char(var/value) - if (water_type && noise2value(value) < water_level) - return "~" - return "[noise2value(value)]" - -/datum/random_map/noise/exoplanet/get_appropriate_path(value) - if (water_type && noise2value(value) < water_level) - return water_type - else - if (coast_type && value == COAST_VALUE) - return coast_type - return land_type - -/datum/random_map/noise/exoplanet/get_additional_spawns(value, turf/T) - if (T.is_wall()) - return - var/parsed_value = noise2value(value) - switch(parsed_value) - if (2 to 3) - if (prob(fauna_prob)) - spawn_fauna(T) - if (5 to 6) - if (grass_prob > 10 && prob(grass_prob)) - spawn_grass(T) - if (prob(flora_prob/3)) - spawn_flora(T) - if (7 to 9) - if (grass_prob > 1 && prob(grass_prob * 3)) - spawn_grass(T) - if (prob(flora_prob)) - spawn_flora(T) - else if (prob(large_flora_prob)) - spawn_flora(T, 1) - -/datum/random_map/noise/exoplanet/proc/spawn_fauna(turf/T) - if (prob(megafauna_spawn_prob)) - new /obj/effect/landmark/exoplanet_spawn/megafauna(T) - else - new /obj/effect/landmark/exoplanet_spawn(T) - -/datum/random_map/noise/exoplanet/proc/get_grass_overlay() - var/grass_num = "[rand(1,6)]" - if (!LAZYACCESS(grass_cache, grass_num)) - var/color = pick(plantcolors) - if (color == "RANDOM") - color = get_random_colour(0,75,190) - var/image/grass = overlay_image('icons/obj/flora/greygrass.dmi', "grass_[grass_num]", color, RESET_COLOR) - grass.underlays += overlay_image('icons/obj/flora/greygrass.dmi', "grass_[grass_num]_shadow", null, RESET_COLOR) - LAZYSET(grass_cache, grass_num, grass) - return grass_cache[grass_num] - -/datum/random_map/noise/exoplanet/proc/spawn_flora(turf/T, big) - if (big) - new /obj/effect/landmark/exoplanet_spawn/large_plant(T) - for(var/turf/neighbor in RANGE_TURFS(T, 1)) - spawn_grass(neighbor) - else - new /obj/effect/landmark/exoplanet_spawn/plant(T) - spawn_grass(T) - -/datum/random_map/noise/exoplanet/proc/spawn_grass(turf/T) - if (istype(T, water_type)) - return - if (locate(/obj/effect/floor_decal) in T) - return - new /obj/effect/floor_decal(T, null, null, get_grass_overlay()) - -/datum/random_map/noise/exoplanet/cleanup() - ..() - if (!water_type || !water_level || !coast_type) - return - for(var/x in 1 to limit_x - 1) - for(var/y in 1 to limit_y - 1) - var/mapcell = get_map_cell(x,y) - if (noise2value(map[mapcell]) < water_level) - var/neighbors = get_neighbors(x, y, TRUE) - for(var/cell in neighbors) - if (noise2value(map[cell]) >= water_level) - map[cell] = COAST_VALUE diff --git a/code/modules/overmap/exoplanets/theme.dm b/code/modules/overmap/exoplanets/theme.dm deleted file mode 100644 index e69de29bb2d1d..0000000000000 diff --git a/code/modules/overmap/exoplanets/turfs.dm b/code/modules/overmap/exoplanets/turfs.dm deleted file mode 100644 index 78440dd62a9a3..0000000000000 --- a/code/modules/overmap/exoplanets/turfs.dm +++ /dev/null @@ -1,258 +0,0 @@ -/turf/simulated/floor/exoplanet - name = "space land" - icon = 'icons/turf/desert.dmi' - icon_state = "desert" - footstep_type = /decl/footsteps/asteroid - var/diggable = 1 - var/dirt_color = "#7c5e42" - -/turf/simulated/floor/exoplanet/can_engrave() - return FALSE - -/turf/simulated/floor/exoplanet/New() - if(GLOB.using_map.use_overmap) - var/obj/effect/overmap/visitable/sector/exoplanet/E = map_sectors["[z]"] - if(istype(E)) - if(E.atmosphere) - initial_gas = E.atmosphere.gas.Copy() - temperature = E.atmosphere.temperature - else - initial_gas = list() - temperature = T0C - //Must be done here, as light data is not fully carried over by ChangeTurf (but overlays are). - set_light(E.lightlevel, 0.1, 2) - if(E.planetary_area && istype(loc, world.area)) - ChangeArea(src, E.planetary_area) - ..() - -/turf/simulated/floor/exoplanet/attackby(obj/item/C, mob/user) - if(diggable && istype(C,/obj/item/shovel)) - visible_message("\The [user] starts digging \the [src]") - if(do_after(user, 5 SECONDS, src, DO_PUBLIC_UNIQUE)) - to_chat(user,"You dig a deep pit.") - new /obj/structure/pit(src) - diggable = 0 - else - to_chat(user,"You stop shoveling.") - else if(istype(C, /obj/item/stack/tile)) - var/obj/item/stack/tile/T = C - if(T.use(1)) - playsound(src, 'sound/items/Deconstruct.ogg', 80, 1) - ChangeTurf(/turf/simulated/floor, FALSE, FALSE, TRUE) - else if (isCrowbar(C) || isWelder(C) || istype(C, /obj/item/gun/energy/plasmacutter)) - return - else - ..() - -/turf/simulated/floor/exoplanet/ex_act(severity) - switch(severity) - if(EX_ACT_DEVASTATING) - ChangeTurf(get_base_turf_by_area(src)) - if(EX_ACT_HEAVY) - if(prob(40)) - ChangeTurf(get_base_turf_by_area(src)) - -/turf/simulated/floor/exoplanet/Initialize() - . = ..() - update_icon(1) - -/turf/simulated/floor/exoplanet/on_update_icon(var/update_neighbors) - overlays.Cut() - if(LAZYLEN(decals)) - overlays += decals - for(var/direction in GLOB.cardinal) - var/turf/turf_to_check = get_step(src,direction) - if(!istype(turf_to_check, type)) - var/image/rock_side = image(icon, "edge[pick(0,1,2)]", dir = turn(direction, 180)) - rock_side.plating_decal_layerise() - switch(direction) - if(NORTH) - rock_side.pixel_y += world.icon_size - if(SOUTH) - rock_side.pixel_y -= world.icon_size - if(EAST) - rock_side.pixel_x += world.icon_size - if(WEST) - rock_side.pixel_x -= world.icon_size - overlays += rock_side - else if(update_neighbors) - turf_to_check.update_icon() - -//WAter -/turf/simulated/floor/exoplanet/water/on_update_icon() - return - -/turf/simulated/floor/exoplanet/water/is_flooded(lying_mob, absolute) - . = absolute ? ..() : lying_mob - -/turf/simulated/floor/exoplanet/water/shallow - name = "shallow water" - icon = 'icons/misc/beach.dmi' - icon_state = "seashallow" - movement_delay = 2 - footstep_type = /decl/footsteps/water - var/reagent_type = /datum/reagent/water - -/turf/simulated/floor/exoplanet/water/shallow/attackby(obj/item/O, var/mob/living/user) - var/obj/item/reagent_containers/RG = O - if (reagent_type && istype(RG) && RG.is_open_container() && RG.reagents) - RG.reagents.add_reagent(reagent_type, min(RG.volume - RG.reagents.total_volume, RG.amount_per_transfer_from_this)) - user.visible_message("[user] fills \the [RG] from \the [src].","You fill \the [RG] from \the [src].") - else - return ..() - -//Ice -/turf/simulated/floor/exoplanet/ice - name = "ice" - icon = 'icons/turf/snow.dmi' - icon_state = "ice" - -/turf/simulated/floor/exoplanet/ice/on_update_icon() - return - -//Snow -/turf/simulated/floor/exoplanet/snow - name = "snow" - icon = 'icons/turf/snow.dmi' - icon_state = "snow" - dirt_color = "#e3e7e8" - footstep_type = /decl/footsteps/snow - -/turf/simulated/floor/exoplanet/snow/Initialize() - . = ..() - icon_state = pick("snow[rand(1,12)]","snow0") - -/turf/simulated/floor/exoplanet/snow/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume) - melt() - -/turf/simulated/floor/exoplanet/snow/melt() - SetName("permafrost") - icon_state = "permafrost" - footstep_type = /decl/footsteps/asteroid - -//Grass -/turf/simulated/floor/exoplanet/grass - name = "grass" - icon = 'icons/turf/jungle.dmi' - icon_state = "greygrass" - color = "#799c4b" - footstep_type = /decl/footsteps/grass - -/turf/simulated/floor/exoplanet/grass/Initialize() - . = ..() - if(GLOB.using_map.use_overmap) - var/obj/effect/overmap/visitable/sector/exoplanet/E = map_sectors["[z]"] - if(istype(E) && E.grass_color) - color = E.grass_color - if(!resources) - resources = list() - if(prob(70)) - resources[MATERIAL_GRAPHITE] = rand(3,5) - if(prob(5)) - resources[MATERIAL_URANIUM] = rand(1,3) - if(prob(2)) - resources[MATERIAL_DIAMOND] = 1 - -/turf/simulated/floor/exoplanet/grass/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume) - if((temperature > T0C + 200 && prob(5)) || temperature > T0C + 1000) - melt() - -/turf/simulated/floor/exoplanet/grass/melt() - SetName("scorched ground") - icon_state = "scorched" - footstep_type = /decl/footsteps/asteroid - color = null - -//Sand -/turf/simulated/floor/exoplanet/desert - name = "sand" - desc = "It's coarse and gets everywhere." - dirt_color = "#ae9e66" - footstep_type = /decl/footsteps/sand - -/turf/simulated/floor/exoplanet/desert/Initialize() - . = ..() - icon_state = "desert[rand(0,5)]" - -/turf/simulated/floor/exoplanet/desert/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume) - if((temperature > T0C + 1700 && prob(5)) || temperature > T0C + 3000) - melt() - -/turf/simulated/floor/exoplanet/desert/melt() - SetName("molten silica") - desc = "A glassed patch of sand." - icon_state = "sandglass" - diggable = 0 - -//Concrete -/turf/simulated/floor/exoplanet/concrete - name = "concrete" - desc = "Stone-like artificial material." - icon = 'icons/turf/flooring/misc.dmi' - icon_state = "concrete" - - -//Special world edge turf - -/turf/simulated/planet_edge - name = "world's edge" - desc = "Government didn't want you to see this!" - density = TRUE - blocks_air = TRUE - dynamic_lighting = FALSE - icon = null - icon_state = null - -/turf/simulated/planet_edge/Initialize() - . = ..() - var/obj/effect/overmap/visitable/sector/exoplanet/E = map_sectors["[z]"] - if(!istype(E)) - return - var/nx = x - if (x <= TRANSITIONEDGE) - nx = x + (E.maxx - 2*TRANSITIONEDGE) - 1 - else if (x >= (E.maxx - TRANSITIONEDGE)) - nx = x - (E.maxx - 2*TRANSITIONEDGE) + 1 - - var/ny = y - if(y <= TRANSITIONEDGE) - ny = y + (E.maxy - 2*TRANSITIONEDGE) - 1 - else if (y >= (E.maxy - TRANSITIONEDGE)) - ny = y - (E.maxy - 2*TRANSITIONEDGE) + 1 - - var/turf/NT = locate(nx, ny, z) - if(NT) - vis_contents = list(NT) - - //Need to put a mouse-opaque overlay there to prevent people turning/shooting towards ACTUAL location of vis_content things - var/obj/effect/overlay/O = new(src) - O.mouse_opacity = 2 - O.name = "distant terrain" - O.desc = "You need to come over there to take a better look." - -/turf/simulated/planet_edge/Bumped(atom/movable/A) - . = ..() - var/obj/effect/overmap/visitable/sector/exoplanet/E = map_sectors["[z]"] - if(!istype(E)) - return - if(E.planetary_area && istype(loc, world.area)) - ChangeArea(src, E.planetary_area) - var/new_x = A.x - var/new_y = A.y - if(x <= TRANSITIONEDGE) - new_x = E.maxx - TRANSITIONEDGE - 1 - else if (x >= (E.maxx - TRANSITIONEDGE)) - new_x = TRANSITIONEDGE + 1 - else if (y <= TRANSITIONEDGE) - new_y = E.maxy - TRANSITIONEDGE - 1 - else if (y >= (E.maxy - TRANSITIONEDGE)) - new_y = TRANSITIONEDGE + 1 - - var/turf/T = locate(new_x, new_y, A.z) - if(T && !T.density) - A.forceMove(T) - if(isliving(A)) - var/mob/living/L = A - if(L.pulling) - var/atom/movable/AM = L.pulling - AM.forceMove(T) diff --git a/code/modules/overmap/overmap_object.dm b/code/modules/overmap/overmap_object.dm deleted file mode 100644 index 225b3f0da5af6..0000000000000 --- a/code/modules/overmap/overmap_object.dm +++ /dev/null @@ -1,56 +0,0 @@ -/obj/effect/overmap - name = "map object" - icon = 'icons/obj/overmap.dmi' - icon_state = "object" - color = "#fffffe" - - var/known = TRUE //shows up on nav computers automatically - var/scannable //if set to TRUE will show up on ship sensors for detailed scans - -//Overlay of how this object should look on other skyboxes -/obj/effect/overmap/proc/get_skybox_representation() - return - -/obj/effect/overmap/proc/get_scan_data(mob/user) - return desc - -/obj/effect/overmap/Initialize() - . = ..() - if(!GLOB.using_map.use_overmap) - return INITIALIZE_HINT_QDEL - - if(known) - layer = ABOVE_LIGHTING_LAYER - plane = EFFECTS_ABOVE_LIGHTING_PLANE - - update_icon() - -/obj/effect/overmap/Crossed(var/obj/effect/overmap/visitable/other) - if(istype(other)) - for(var/obj/effect/overmap/visitable/O in loc) - SSskybox.rebuild_skyboxes(O.map_z) - -/obj/effect/overmap/Uncrossed(var/obj/effect/overmap/visitable/other) - if(istype(other)) - SSskybox.rebuild_skyboxes(other.map_z) - for(var/obj/effect/overmap/visitable/O in loc) - SSskybox.rebuild_skyboxes(O.map_z) - -/obj/effect/overmap/on_update_icon() - filters = filter(type="drop_shadow", color = color + "F0", size = 2, offset = 1,x = 0, y = 0) - - -/** - * Flags the effect as `known` and runs relevant update procs. Intended for admin event usage. - */ -/obj/effect/overmap/proc/make_known(notify = FALSE) - if (!known) - known = TRUE - update_known_connections(notify) - - -/** - * Runs any relevant code needed for updating anything connected to known overmap effects, such as helms. - */ -/obj/effect/overmap/proc/update_known_connections(notify = FALSE) - return diff --git a/code/modules/overmap/overmap_shuttle.dm b/code/modules/overmap/overmap_shuttle.dm deleted file mode 100644 index 48f1b0b2e1bb5..0000000000000 --- a/code/modules/overmap/overmap_shuttle.dm +++ /dev/null @@ -1,170 +0,0 @@ -#define waypoint_sector(waypoint) map_sectors["[waypoint.z]"] - -/datum/shuttle/autodock/overmap - warmup_time = 10 - - var/range = 0 //how many overmap tiles can shuttle go, for picking destinations and returning. - var/fuel_consumption = 0 //Amount of moles of gas consumed per trip; If zero, then shuttle is magic and does not need fuel - var/list/obj/structure/fuel_port/fuel_ports //the fuel ports of the shuttle (but usually just one) - - category = /datum/shuttle/autodock/overmap - var/skill_needed = SKILL_BASIC - var/operator_skill = SKILL_MIN - -/datum/shuttle/autodock/overmap/New(var/_name, var/obj/effect/shuttle_landmark/start_waypoint) - ..(_name, start_waypoint) - refresh_fuel_ports_list() - -/datum/shuttle/autodock/overmap/proc/refresh_fuel_ports_list() //loop through all - fuel_ports = list() - for(var/area/A in shuttle_area) - for(var/obj/structure/fuel_port/fuel_port_in_area in A) - fuel_port_in_area.parent_shuttle = src - fuel_ports += fuel_port_in_area - -/datum/shuttle/autodock/overmap/fuel_check() - if(!src.try_consume_fuel()) //insufficient fuel - for(var/area/A in shuttle_area) - for(var/mob/living/M in A) - M.show_message("You hear the shuttle engines sputter... perhaps it doesn't have enough fuel?", AUDIBLE_MESSAGE, - "The shuttle shakes but fails to take off.", VISIBLE_MESSAGE) - return 0 //failure! - return 1 //success, continue with launch - -/datum/shuttle/autodock/overmap/proc/can_go() - if(!next_location) - return FALSE - if(moving_status == SHUTTLE_INTRANSIT) - return FALSE //already going somewhere, current_location may be an intransit location instead of in a sector - return get_dist(waypoint_sector(current_location), waypoint_sector(next_location)) <= range - -/datum/shuttle/autodock/overmap/can_launch() - return ..() && can_go() - -/datum/shuttle/autodock/overmap/can_force() - return ..() && can_go() - -/datum/shuttle/autodock/overmap/get_travel_time() - var/distance_mod = get_dist(waypoint_sector(current_location),waypoint_sector(next_location)) - var/skill_mod = 0.2*(skill_needed - operator_skill) - return move_time * (1 + distance_mod + skill_mod) - -/datum/shuttle/autodock/overmap/process_launch() - if(prob(10*max(0, skill_needed - operator_skill))) - var/places = get_possible_destinations() - var/place = pick(places) - set_destination(places[place]) - ..() - -/datum/shuttle/autodock/overmap/proc/set_destination(var/obj/effect/shuttle_landmark/A) - if(A != current_location) - next_location = A - -/datum/shuttle/autodock/overmap/proc/get_possible_destinations() - var/list/res = list() - for (var/obj/effect/overmap/visitable/S in range(get_turf(waypoint_sector(current_location)), range)) - var/list/waypoints = S.get_waypoints(name) - for(var/obj/effect/shuttle_landmark/LZ in waypoints) - if(LZ.is_valid(src)) - res["[waypoints[LZ]] - [LZ.name]"] = LZ - return res - -/datum/shuttle/autodock/overmap/get_location_name() - if(moving_status == SHUTTLE_INTRANSIT) - return "In transit" - return "[waypoint_sector(current_location)] - [current_location]" - -/datum/shuttle/autodock/overmap/get_destination_name() - if(!next_location) - return "None" - return "[waypoint_sector(next_location)] - [next_location]" - -/datum/shuttle/autodock/overmap/proc/try_consume_fuel() //returns 1 if successful, returns 0 if error (like insufficient fuel) - if(!fuel_consumption) - return 1 //shuttles with zero fuel consumption are magic and can always launch - if(!fuel_ports.len) - return 0 //Nowhere to get fuel from - var/list/obj/item/tank/fuel_tanks = list() - for(var/obj/structure/FP in fuel_ports) //loop through fuel ports and assemble list of all fuel tanks - var/obj/item/tank/FT = locate() in FP - if(FT) - fuel_tanks += FT - if(!fuel_tanks.len) - return 0 //can't launch if you have no fuel TANKS in the ports - var/total_flammable_gas_moles = 0 - for(var/obj/item/tank/FT in fuel_tanks) - total_flammable_gas_moles += FT.air_contents.get_by_flag(XGM_GAS_FUEL) - if(total_flammable_gas_moles < fuel_consumption) //not enough fuel - return 0 - // We are going to succeed if we got to here, so start consuming that fuel - var/fuel_to_consume = fuel_consumption - for(var/obj/item/tank/FT in fuel_tanks) //loop through tanks, consume their fuel one by one - var/fuel_available = FT.air_contents.get_by_flag(XGM_GAS_FUEL) - if(!fuel_available) // Didn't even have fuel. - continue - if(fuel_available >= fuel_to_consume) - FT.remove_air_by_flag(XGM_GAS_FUEL, fuel_to_consume) - return 1 //ALL REQUIRED FUEL HAS BEEN CONSUMED, GO FOR LAUNCH! - else //this tank doesn't have enough to launch shuttle by itself, so remove all its fuel, then continue loop - fuel_to_consume -= fuel_available - FT.remove_air_by_flag(XGM_GAS_FUEL, fuel_available) - -/obj/structure/fuel_port - name = "fuel port" - desc = "The fuel input port of the shuttle. Holds one fuel tank. Use a crowbar to open and close it." - icon = 'icons/turf/shuttle.dmi' - icon_state = "fuel_port" - density = FALSE - anchored = TRUE - var/icon_closed = "fuel_port" - var/icon_empty = "fuel_port_empty" - var/icon_full = "fuel_port_full" - var/opened = 0 - var/parent_shuttle - -/obj/structure/fuel_port/Initialize() - . = ..() - new /obj/item/tank/hydrogen(src) - -/obj/structure/fuel_port/attack_hand(mob/user as mob) - if(!opened) - to_chat(user, "The door is secured tightly. You'll need a crowbar to open it.") - return - else if(contents.len > 0) - user.put_in_hands(contents[1]) - update_icon() - -/obj/structure/fuel_port/on_update_icon() - if(opened) - if(contents.len > 0) - icon_state = icon_full - else - icon_state = icon_empty - else - icon_state = icon_closed - -/obj/structure/fuel_port/attackby(obj/item/W as obj, mob/user as mob) - if(isCrowbar(W)) - if(opened) - to_chat(user, "You tightly shut \the [src] door.") - playsound(src.loc, 'sound/effects/locker_close.ogg', 25, 0, -3) - opened = 0 - else - to_chat(user, "You open up \the [src] door.") - playsound(src.loc, 'sound/effects/locker_open.ogg', 15, 1, -3) - opened = 1 - else if(istype(W,/obj/item/tank)) - if(!opened) - to_chat(user, "\The [src] door is still closed!") - return - if(contents.len == 0) - user.unEquip(W, src) - update_icon() - -/obj/structure/fuel_port/attack_robot(mob/user) - if (Adjacent(user)) - attack_hand(user) - -// Walls hide stuff inside them, but we want to be visible. -/obj/structure/fuel_port/hide() - return diff --git a/code/modules/overmap/sectors.dm b/code/modules/overmap/sectors.dm deleted file mode 100644 index 74222431e4f45..0000000000000 --- a/code/modules/overmap/sectors.dm +++ /dev/null @@ -1,164 +0,0 @@ -//=================================================================================== -//Overmap object representing zlevel(s) -//=================================================================================== -/obj/effect/overmap/visitable - name = "map object" - scannable = TRUE - - var/list/map_z = list() - - var/list/initial_generic_waypoints //store landmark_tag of landmarks that should be added to the actual lists below on init. - var/list/initial_restricted_waypoints //For use with non-automatic landmarks (automatic ones add themselves). - - var/list/generic_waypoints = list() //waypoints that any shuttle can use - var/list/restricted_waypoints = list() //waypoints for specific shuttles - var/docking_codes - - var/start_x //Coordinates for self placing - var/start_y //will use random values if unset - - var/base = 0 //starting sector, counts as station_levels - var/in_space = TRUE //can be accessed via lucky EVA - - var/hide_from_reports = FALSE - - /// null | num | list. If a num or a (num, num) list, the radius or random bounds for placing this sector near the main map's overmap icon. - var/list/place_near_main - -/obj/effect/overmap/visitable/Initialize() - . = ..() - if(. == INITIALIZE_HINT_QDEL) - return - - find_z_levels() // This populates map_z and assigns z levels to the ship. - register_z_levels() // This makes external calls to update global z level information. - - if(!GLOB.using_map.overmap_z) - build_overmap() - - var/map_low = OVERMAP_EDGE - var/map_high = GLOB.using_map.overmap_size - OVERMAP_EDGE - var/turf/home - if (place_near_main) - var/obj/effect/overmap/visitable/main = map_sectors["1"] - if (islist(place_near_main)) - place_near_main = Roundm(Frand(place_near_main[1], place_near_main[2]), 0.1) - home = CircularRandomTurfAround(main, abs(place_near_main), map_low, map_low, map_high, map_high) - log_debug("place_near_main moving [src] near [main] ([main.x],[main.y]) with radius [place_near_main], got ([home.x],[home.y])") - else - start_x = start_x || rand(map_low, map_high) - start_y = start_y || rand(map_low, map_high) - home = locate(start_x, start_y, GLOB.using_map.overmap_z) - forceMove(home) - - for(var/obj/effect/overmap/event/E in loc) - qdel(E) - - docking_codes = "[ascii2text(rand(65,90))][ascii2text(rand(65,90))][ascii2text(rand(65,90))][ascii2text(rand(65,90))]" - - testing("Located sector \"[name]\" at [start_x],[start_y], containing Z [english_list(map_z)]") - - LAZYADD(SSshuttle.sectors_to_initialize, src) //Queued for further init. Will populate the waypoint lists; waypoints not spawned yet will be added in as they spawn. - SSshuttle.clear_init_queue() - -//This is called later in the init order by SSshuttle to populate sector objects. Importantly for subtypes, shuttles will be created by then. -/obj/effect/overmap/visitable/proc/populate_sector_objects() - -/obj/effect/overmap/visitable/proc/get_areas() - return get_filtered_areas(list(/proc/area_belongs_to_zlevels = map_z)) - -/obj/effect/overmap/visitable/proc/find_z_levels() - map_z = GetConnectedZlevels(z) - -/obj/effect/overmap/visitable/proc/register_z_levels() - for(var/zlevel in map_z) - map_sectors["[zlevel]"] = src - - GLOB.using_map.player_levels |= map_z - if(!in_space) - GLOB.using_map.sealed_levels |= map_z - if(base) - GLOB.using_map.station_levels |= map_z - GLOB.using_map.contact_levels |= map_z - GLOB.using_map.map_levels |= map_z - -//Helper for init. -/obj/effect/overmap/visitable/proc/check_ownership(obj/object) - if((object.z in map_z) && !(get_area(object) in SSshuttle.shuttle_areas)) - return 1 - -//If shuttle_name is false, will add to generic waypoints; otherwise will add to restricted. Does not do checks. -/obj/effect/overmap/visitable/proc/add_landmark(obj/effect/shuttle_landmark/landmark, shuttle_name) - landmark.sector_set(src, shuttle_name) - if(shuttle_name) - LAZYADD(restricted_waypoints[shuttle_name], landmark) - else - generic_waypoints += landmark - -/obj/effect/overmap/visitable/proc/remove_landmark(obj/effect/shuttle_landmark/landmark, shuttle_name) - if(shuttle_name) - var/list/shuttles = restricted_waypoints[shuttle_name] - LAZYREMOVE(shuttles, landmark) - else - generic_waypoints -= landmark - -/obj/effect/overmap/visitable/proc/get_waypoints(var/shuttle_name) - . = list() - for(var/obj/effect/overmap/visitable/contained in src) - . += contained.get_waypoints(shuttle_name) - for(var/thing in generic_waypoints) - .[thing] = name - if(shuttle_name in restricted_waypoints) - for(var/thing in restricted_waypoints[shuttle_name]) - .[thing] = name - -/obj/effect/overmap/visitable/proc/generate_skybox() - return - -/obj/effect/overmap/visitable/sector - name = "generic sector" - desc = "Sector with some stuff in it." - icon_state = "sector" - anchored = TRUE - - -/obj/effect/overmap/visitable/sector/Initialize() - . = ..() - - if(known) - update_known_connections(TRUE) - - -/obj/effect/overmap/visitable/sector/update_known_connections(notify = FALSE) - . = ..() - - for(var/obj/machinery/computer/ship/helm/H in SSmachines.machinery) - H.add_known_sector(src, notify) - - -// Because of the way these are spawned, they will potentially have their invisibility adjusted by the turfs they are mapped on -// prior to being moved to the overmap. This blocks that. Use set_invisibility to adjust invisibility as needed instead. -/obj/effect/overmap/visitable/sector/hide() - -/proc/build_overmap() - if(!GLOB.using_map.use_overmap) - return 1 - - testing("Building overmap...") - INCREMENT_WORLD_Z_SIZE - GLOB.using_map.overmap_z = world.maxz - - testing("Putting overmap on [GLOB.using_map.overmap_z]") - var/area/overmap/A = new - for (var/square in block(locate(1,1,GLOB.using_map.overmap_z), locate(GLOB.using_map.overmap_size,GLOB.using_map.overmap_size,GLOB.using_map.overmap_z))) - var/turf/T = square - if(T.x == GLOB.using_map.overmap_size || T.y == GLOB.using_map.overmap_size) - T = T.ChangeTurf(/turf/unsimulated/map/edge) - else - T = T.ChangeTurf(/turf/unsimulated/map) - ChangeArea(T, A) - - GLOB.using_map.sealed_levels |= GLOB.using_map.overmap_z - - testing("Overmap build complete.") - return 1 diff --git a/code/modules/overmap/ships/computers/engine_control.dm b/code/modules/overmap/ships/computers/engine_control.dm deleted file mode 100644 index c250d6c09ae8a..0000000000000 --- a/code/modules/overmap/ships/computers/engine_control.dm +++ /dev/null @@ -1,97 +0,0 @@ -//Engine control and monitoring console - -/obj/machinery/computer/ship/engines - name = "engine control console" - icon_keyboard = "tech_key" - icon_screen = "engines" - machine_name = "engine control console" - machine_desc = "Allows remote control of a spacecraft's gas thrusters, and displays information about remaining fuel." - var/display_state = "status" - -/obj/machinery/computer/ship/engines/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1) - if(!linked) - display_reconnect_dialog(user, "ship control systems") - return - - var/data[0] - data["state"] = display_state - data["global_state"] = linked.engines_state - data["global_limit"] = round(linked.thrust_limit*100) - var/total_thrust = 0 - - var/list/enginfo[0] - for(var/datum/ship_engine/E in linked.engines) - var/list/rdata[0] - rdata["eng_type"] = E.name - rdata["eng_on"] = E.is_on() - rdata["eng_thrust"] = E.get_thrust() - rdata["eng_thrust_limiter"] = round(E.get_thrust_limit()*100) - rdata["eng_status"] = E.get_status() - rdata["eng_reference"] = "\ref[E]" - total_thrust += E.get_thrust() - enginfo.Add(list(rdata)) - - data["engines_info"] = enginfo - data["total_thrust"] = total_thrust - - ui = SSnano.try_update_ui(user, src, ui_key, ui, data, force_open) - if (!ui) - ui = new(user, src, ui_key, "engines_control.tmpl", "[linked.name] Engines Control", 390, 530) - ui.set_initial_data(data) - ui.open() - ui.set_auto_update(1) - -/obj/machinery/computer/ship/engines/OnTopic(var/mob/user, var/list/href_list, state) - if(..()) - return ..() - - if(href_list["state"]) - display_state = href_list["state"] - return TOPIC_REFRESH - - if(href_list["global_toggle"]) - linked.engines_state = !linked.engines_state - for(var/datum/ship_engine/E in linked.engines) - if(linked.engines_state == !E.is_on()) - E.toggle() - return TOPIC_REFRESH - - if(href_list["set_global_limit"]) - var/newlim = input("Input new thrust limit (0..100%)", "Thrust limit", linked.thrust_limit*100) as num - if(!CanInteract(user, state)) - return TOPIC_NOACTION - linked.thrust_limit = clamp(newlim/100, 0, 1) - for(var/datum/ship_engine/E in linked.engines) - E.set_thrust_limit(linked.thrust_limit) - return TOPIC_REFRESH - - if(href_list["global_limit"]) - linked.thrust_limit = clamp(linked.thrust_limit + text2num(href_list["global_limit"]), 0, 1) - for(var/datum/ship_engine/E in linked.engines) - E.set_thrust_limit(linked.thrust_limit) - return TOPIC_REFRESH - - if(href_list["engine"]) - if(href_list["set_limit"]) - var/datum/ship_engine/E = locate(href_list["engine"]) - var/newlim = input("Input new thrust limit (0..100)", "Thrust limit", E.get_thrust_limit()) as num - if(!CanInteract(user, state)) - return - var/limit = clamp(newlim/100, 0, 1) - if(istype(E)) - E.set_thrust_limit(limit) - return TOPIC_REFRESH - if(href_list["limit"]) - var/datum/ship_engine/E = locate(href_list["engine"]) - var/limit = clamp(E.get_thrust_limit() + text2num(href_list["limit"]), 0, 1) - if(istype(E)) - E.set_thrust_limit(limit) - return TOPIC_REFRESH - - if(href_list["toggle"]) - var/datum/ship_engine/E = locate(href_list["engine"]) - if(istype(E)) - E.toggle() - return TOPIC_REFRESH - return TOPIC_REFRESH - return TOPIC_NOACTION \ No newline at end of file diff --git a/code/modules/overmap/ships/computers/helm.dm b/code/modules/overmap/ships/computers/helm.dm deleted file mode 100644 index 8ccbe3013c90a..0000000000000 --- a/code/modules/overmap/ships/computers/helm.dm +++ /dev/null @@ -1,392 +0,0 @@ -LEGACY_RECORD_STRUCTURE(all_waypoints, waypoint) - -/obj/machinery/computer/ship/helm - name = "helm control console" - icon_keyboard = "teleport_key" - icon_screen = "helm" - light_color = "#7faaff" - core_skill = SKILL_PILOT - silicon_restriction = STATUS_UPDATE - machine_name = "helm control console" - machine_desc = "A navigation system used to control spacecraft big and small, allowing for configuration of heading and autopilot as well as providing navigational data." - var/autopilot = 0 - var/list/known_sectors = list() - var/dx //desitnation - var/dy //coordinates - var/speedlimit = 1/(20 SECONDS) //top speed for autopilot, 5 - var/accellimit = 0.001 //manual limiter for acceleration - /// The mob currently operating the helm - The last one to click one of the movement buttons and be on the overmap screen. Set to `null` for autopilot or when the mob isn't in range. - var/mob/current_operator - - -/obj/machinery/computer/ship/helm/Initialize() - . = ..() - get_known_sectors() - -/obj/machinery/computer/ship/helm/proc/get_known_sectors() - var/area/overmap/map = locate() in world - for(var/obj/effect/overmap/visitable/sector/S in map) - if (S.known) - add_known_sector(S) - -/obj/machinery/computer/ship/helm/proc/add_known_sector(obj/effect/overmap/visitable/sector/S, notify = FALSE) - var/datum/computer_file/data/waypoint/R = new() - R.fields["name"] = S.name - R.fields["x"] = S.x - R.fields["y"] = S.y - known_sectors[S.name] = R - - if (notify) - audible_message(SPAN_NOTICE("\The [src] pings with a new known sector: [S] at coordinates [S.x] by [S.y].")) - -/obj/machinery/computer/ship/helm/Process() - ..() - - if (current_operator) - if (!linked) - to_chat(current_operator, SPAN_DANGER("\The [src]'s controls lock up with an error flashing across the screen: Connection to vessel lost!")) - set_operator(null, TRUE) - else if (!Adjacent(current_operator) || CanUseTopic(current_operator) != STATUS_INTERACTIVE || !viewing_overmap(current_operator)) - set_operator(null) - - if (autopilot && dx && dy) - var/turf/T = locate(dx,dy,GLOB.using_map.overmap_z) - if(linked.loc == T) - if(linked.is_still()) - autopilot = 0 - else - linked.decelerate(accellimit) - else - var/brake_path = linked.get_brake_path() / HALF_UNIT_DIAGONAL //get_dist is steps, not hypotenuse - var/direction = get_dir(linked.loc, T) - var/acceleration = min(linked.get_acceleration(), accellimit) - var/speed = linked.get_speed() - var/heading = linked.get_heading() - - // Destination is current grid or speedlimit is exceeded - if ((get_dist(linked.loc, T) <= brake_path) || speed > speedlimit) - linked.decelerate(accellimit) - // Heading does not match direction - else if (heading & ~direction) - linked.accelerate(turn(heading & ~direction, 180), accellimit) - // All other cases, move toward direction - else if (speed + acceleration <= speedlimit) - linked.accelerate(direction, accellimit) - - if (current_operator) - to_chat(current_operator, SPAN_DANGER("\The [src]'s autopilot is active and wrests control from you!")) - set_operator(null, TRUE, TRUE) - - return - -/obj/machinery/computer/ship/helm/relaymove(var/mob/user, direction) - if(viewing_overmap(user) && linked) - if(prob(user.skill_fail_chance(SKILL_PILOT, 50, linked.skill_needed, factor = 1))) - direction = turn(direction,pick(90,-90)) - linked.relaymove(user, direction, accellimit) - set_operator(user) - return 1 - -/obj/machinery/computer/ship/helm/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1) - var/data[0] - - if(!linked) - display_reconnect_dialog(user, "helm") - else - var/turf/T = get_turf(linked) - var/obj/effect/overmap/visitable/sector/current_sector = locate() in T - - var/mob/living/silicon/silicon = user - data["viewing_silicon"] = ismachinerestricted(silicon) - - data["sector"] = current_sector ? current_sector.name : "Deep Space" - data["sector_info"] = current_sector ? current_sector.desc : "Not Available" - data["landed"] = linked.get_landed_info() - data["s_x"] = linked.x - data["s_y"] = linked.y - data["dest"] = dy && dx - data["d_x"] = dx - data["d_y"] = dy - data["speedlimit"] = speedlimit ? speedlimit*1000 : "Halted" - data["accel"] = min(round(linked.get_acceleration()*1000, 0.01),accellimit*1000) - data["heading"] = linked.get_heading_angle() ? linked.get_heading_angle() : 0 - data["autopilot"] = autopilot - data["manual_control"] = viewing_overmap(user) - data["canburn"] = linked.can_burn() - data["accellimit"] = accellimit*1000 - - var/speed = round(linked.get_speed()*1000, 0.01) - if(linked.get_speed() < SHIP_SPEED_SLOW) - speed = "[speed]" - if(linked.get_speed() > SHIP_SPEED_FAST) - speed = "[speed]" - data["speed"] = speed - - if(linked.get_speed()) - data["ETAnext"] = "[round(linked.ETA()/10)] seconds" - else - data["ETAnext"] = "N/A" - - var/list/locations[0] - for (var/key in known_sectors) - var/datum/computer_file/data/waypoint/R = known_sectors[key] - var/list/rdata[0] - rdata["name"] = R.fields["name"] - rdata["x"] = R.fields["x"] - rdata["y"] = R.fields["y"] - rdata["reference"] = "\ref[R]" - locations.Add(list(rdata)) - - data["locations"] = locations - - ui = SSnano.try_update_ui(user, src, ui_key, ui, data, force_open) - if (!ui) - ui = new(user, src, ui_key, "helm.tmpl", "[linked.name] Helm Control", 565, 545) - ui.set_initial_data(data) - ui.open() - ui.set_auto_update(1) - -/obj/machinery/computer/ship/helm/OnTopic(var/mob/user, var/list/href_list, state) - if(..()) - return TOPIC_HANDLED - - if(!linked) - return TOPIC_HANDLED - - if (href_list["add"]) - var/datum/computer_file/data/waypoint/R = new() - var/sec_name = input("Input naviation entry name", "New navigation entry", "Sector #[known_sectors.len]") as text - if(!CanInteract(user,state)) - return TOPIC_NOACTION - if(!sec_name) - sec_name = "Sector #[known_sectors.len]" - R.fields["name"] = sec_name - if(sec_name in known_sectors) - to_chat(user, "Sector with that name already exists, please input a different name.") - return TOPIC_REFRESH - switch(href_list["add"]) - if("current") - R.fields["x"] = linked.x - R.fields["y"] = linked.y - if("new") - var/newx = input("Input new entry x coordinate", "Coordinate input", linked.x) as num - if(!CanInteract(user,state)) - return TOPIC_REFRESH - var/newy = input("Input new entry y coordinate", "Coordinate input", linked.y) as num - if(!CanInteract(user,state)) - return TOPIC_NOACTION - R.fields["x"] = clamp(newx, 1, world.maxx) - R.fields["y"] = clamp(newy, 1, world.maxy) - known_sectors[sec_name] = R - - if (href_list["remove"]) - var/datum/computer_file/data/waypoint/R = locate(href_list["remove"]) - if(R) - known_sectors.Remove(R.fields["name"]) - qdel(R) - - if (href_list["setx"]) - var/newx = input("Input new destiniation x coordinate", "Coordinate input", dx) as num|null - if(!CanInteract(user,state)) - return - if (newx) - dx = clamp(newx, 1, world.maxx) - - if (href_list["sety"]) - var/newy = input("Input new destiniation y coordinate", "Coordinate input", dy) as num|null - if(!CanInteract(user,state)) - return - if (newy) - dy = clamp(newy, 1, world.maxy) - - if (href_list["x"] && href_list["y"]) - dx = text2num(href_list["x"]) - dy = text2num(href_list["y"]) - - if (href_list["reset"]) - dx = 0 - dy = 0 - - if (href_list["speedlimit"]) - var/newlimit = input("Autopilot Speed Limit (0 ~ [round(linked.max_autopilot * 1000, 0.1)])", "Autopilot speed limit", speedlimit * 1000) as num|null - if (!isnull(newlimit)) - speedlimit = round(clamp(newlimit, 0, linked.max_autopilot * 1000), 0.1) * 0.001 - - if (href_list["accellimit"]) - var/newlimit = input("Input new acceleration limit (0 ~ 10)", "Acceleration limit", accellimit * 1000) as num|null - if (!isnull(newlimit)) - accellimit = round(clamp(newlimit, 0, 10)) * 0.001 - - if (href_list["move"]) - var/ndir = text2num(href_list["move"]) - if(prob(user.skill_fail_chance(SKILL_PILOT, 50, linked.skill_needed, factor = 1))) - ndir = turn(ndir,pick(90,-90)) - linked.relaymove(user, ndir, accellimit) - - if (href_list["brake"]) - linked.decelerate(accellimit) - - if (href_list["apilot"]) - autopilot = !autopilot - if (autopilot) - set_operator(null, autopilot = TRUE) - else if (viewing_overmap(user)) - set_operator(user) - - if (href_list["manual"]) - viewing_overmap(user) ? unlook(user) : look(user) - - add_fingerprint(user) - updateUsrDialog() - - -/obj/machinery/computer/ship/helm/unlook(mob/user) - . = ..() - if (current_operator == user) - if (user.client) - user.client.pixel_x = 0 - user.client.pixel_y = 0 - set_operator(null) - - -/obj/machinery/computer/ship/helm/look(mob/user) - . = ..() - if (!autopilot) - set_operator(user) - - -/** - * Updates `current_operator` to the new user, or `null` and ejects the old operator from the overmap view - Only one person on a helm at a time! - * Will call `display_operator_change_message()` if `silent` is `FALSE`. - * `autopilot` will prevent ejection from the overmap (You want to monitor your autopilot right?) and by passed on to `display_operator_change_message()`. - * Skips ghosts and observers to prevent accidental external influencing of flight. - */ -/obj/machinery/computer/ship/helm/proc/set_operator(mob/user, silent, autopilot) - if (isobserver(user) || user == current_operator) - return - - var/mob/old_operator = current_operator - current_operator = user - linked.update_operator_skill(current_operator) - if (!autopilot && old_operator && viewing_overmap(old_operator)) - unlook(old_operator) - - if (!silent) - display_operator_change_message(old_operator, current_operator, autopilot) - - -/** - * Displays visible messages indicating a change in operator. - * `autopilot` will affect the displayed message. - */ -/obj/machinery/computer/ship/helm/proc/display_operator_change_message(mob/old_operator, mob/new_operator, autopilot) - if (!old_operator) - new_operator.visible_message( - SPAN_NOTICE("\The [new_operator] takes \the [src]'s controls."), - SPAN_NOTICE("You take \the [src]'s controls.") - ) - else if (!new_operator) - if (autopilot) - old_operator.visible_message( - SPAN_NOTICE("\The [old_operator] engages \the [src]'s autopilot and releases the controls."), - SPAN_NOTICE("You engage \the [src]'s autopilot and release the controls.") - ) - else - old_operator.visible_message( - SPAN_WARNING("\The [old_operator] releases \the [src]'s controls."), - SPAN_WARNING("You release \the [src]'s controls.") - ) - else - old_operator.visible_message( - SPAN_WARNING("\The [new_operator] takes \the [src]'s controls from \the [old_operator]."), - SPAN_DANGER("\The [new_operator] takes \the [src]'s controls from you!") - ) - - -/obj/machinery/computer/ship/helm/emag_act(remaining_charges, mob/user, emag_source) - if (user) - var/user_message = "You swipe \the [emag_source] against \the [src]," - if (emagged) - user_message = SPAN_WARNING("[user_message] achieving nothing new.") - else - user_message = SPAN_NOTICE("[user_message] frying the access locks.") - user.visible_message( - SPAN_ITALIC("\The [user] swipes \an [emag_source] against \the [src]."), - user_message, - range = 5 - ) - if (emagged) - return - emagged = TRUE - if (req_access) - req_access.Cut() - return 1 - - -/obj/machinery/computer/ship/navigation - name = "navigation console" - icon_keyboard = "generic_key" - icon_screen = "helm" - silicon_restriction = STATUS_UPDATE - machine_name = "navigation console" - machine_desc = "Used to view a sensor-assisted readout of the current sector and its surrounding areas." - -/obj/machinery/computer/ship/navigation/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1) - if(!linked) - display_reconnect_dialog(user, "Navigation") - return - - var/data[0] - - - var/turf/T = get_turf(linked) - var/obj/effect/overmap/visitable/sector/current_sector = locate() in T - - var/mob/living/silicon/silicon = user - data["viewing_silicon"] = ismachinerestricted(silicon) - - data["sector"] = current_sector ? current_sector.name : "Deep Space" - data["sector_info"] = current_sector ? current_sector.desc : "Not Available" - data["s_x"] = linked.x - data["s_y"] = linked.y - data["speed"] = round(linked.get_speed()*1000, 0.01) - data["accel"] = round(linked.get_acceleration()*1000, 0.01) - data["heading"] = linked.get_heading_angle() ? linked.get_heading_angle() : 0 - data["viewing"] = viewing_overmap(user) - - if(linked.get_speed()) - data["ETAnext"] = "[round(linked.ETA()/10)] seconds" - else - data["ETAnext"] = "N/A" - - ui = SSnano.try_update_ui(user, src, ui_key, ui, data, force_open) - if (!ui) - ui = new(user, src, ui_key, "nav.tmpl", "[linked.name] Navigation Screen", 380, 530) - ui.set_initial_data(data) - ui.open() - ui.set_auto_update(1) - -/obj/machinery/computer/ship/navigation/OnTopic(var/mob/user, var/list/href_list) - if(..()) - return TOPIC_HANDLED - - if (!linked) - return TOPIC_NOACTION - - if (href_list["viewing"]) - viewing_overmap(user) ? unlook(user) : look(user) - return TOPIC_REFRESH - -/obj/machinery/computer/ship/navigation/telescreen //little hacky but it's only used on one ship so it should be okay - icon_state = "tele_nav" - density = FALSE - machine_name = "navigation telescreen" - machine_desc = "A compact, slimmed-down version of the navigation console." - -/obj/machinery/computer/ship/navigation/telescreen/on_update_icon() - if(reason_broken & MACHINE_BROKEN_NO_PARTS || stat & NOPOWER || stat & BROKEN) - icon_state = "tele_off" - set_light(0) - else - icon_state = "tele_nav" - set_light(light_max_bright_on, light_inner_range_on, light_outer_range_on, 2, light_color) diff --git a/code/modules/overmap/ships/computers/sensors.dm b/code/modules/overmap/ships/computers/sensors.dm deleted file mode 100644 index cd1f602029010..0000000000000 --- a/code/modules/overmap/ships/computers/sensors.dm +++ /dev/null @@ -1,236 +0,0 @@ -/obj/machinery/computer/ship/sensors - name = "sensors console" - icon_keyboard = "teleport_key" - icon_screen = "teleport" - light_color = "#77fff8" - extra_view = 4 - silicon_restriction = STATUS_UPDATE - machine_name = "sensors console" - machine_desc = "Used to activate, monitor, and configure a spaceship's sensors. Higher range means higher temperature; dangerously high temperatures may fry the delicate equipment." - var/obj/machinery/shipsensors/sensors - var/print_language = LANGUAGE_HUMAN_EURO - -/obj/machinery/computer/ship/sensors/spacer - construct_state = /decl/machine_construction/default/panel_closed/computer/no_deconstruct - base_type = /obj/machinery/computer/ship/sensors - print_language = LANGUAGE_SPACER - -/obj/machinery/computer/ship/sensors/attempt_hook_up(obj/effect/overmap/visitable/ship/sector) - if(!(. = ..())) - return - find_sensors() - -/obj/machinery/computer/ship/sensors/proc/find_sensors() - if(!linked) - return - for(var/obj/machinery/shipsensors/S in SSmachines.machinery) - if(linked.check_ownership(S)) - sensors = S - break - -/obj/machinery/computer/ship/sensors/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1) - if(!linked) - display_reconnect_dialog(user, "sensors") - return - - var/data[0] - - data["viewing"] = viewing_overmap(user) - var/mob/living/silicon/silicon = user - data["viewing_silicon"] = ismachinerestricted(silicon) - if(sensors) - data["on"] = sensors.use_power - data["range"] = sensors.range - data["health"] = sensors.health - data["max_health"] = sensors.max_health - data["heat"] = sensors.heat - data["critical_heat"] = sensors.critical_heat - if(sensors.health == 0) - data["status"] = "DESTROYED" - else if(!sensors.powered()) - data["status"] = "NO POWER" - else if(!sensors.in_vacuum()) - data["status"] = "VACUUM SEAL BROKEN" - else - data["status"] = "OK" - var/list/contacts = list() - for(var/obj/effect/overmap/O in view(7,linked)) - if(linked == O) - continue - if(!O.scannable) - continue - var/bearing = round(90 - Atan2(O.x - linked.x, O.y - linked.y),5) - if(bearing < 0) - bearing += 360 - contacts.Add(list(list("name"=O.name, "ref"="\ref[O]", "bearing"=bearing))) - if(contacts.len) - data["contacts"] = contacts - else - data["status"] = "MISSING" - data["range"] = "N/A" - data["on"] = 0 - - ui = SSnano.try_update_ui(user, src, ui_key, ui, data, force_open) - if (!ui) - ui = new(user, src, ui_key, "shipsensors.tmpl", "[linked.name] Sensors Control", 420, 530, src) - ui.set_initial_data(data) - ui.open() - ui.set_auto_update(1) - -/obj/machinery/computer/ship/sensors/OnTopic(var/mob/user, var/list/href_list, state) - if(..()) - return TOPIC_HANDLED - - if (!linked) - return TOPIC_NOACTION - - if (href_list["viewing"]) - if(user) - viewing_overmap(user) ? unlook(user) : look(user) - return TOPIC_REFRESH - - if (href_list["link"]) - find_sensors() - return TOPIC_REFRESH - - if(sensors) - if (href_list["range"]) - var/nrange = input("Set new sensors range", "Sensor range", sensors.range) as num|null - if(!CanInteract(user,state)) - return TOPIC_NOACTION - if (nrange) - sensors.set_range(clamp(nrange, 1, world.view)) - return TOPIC_REFRESH - if (href_list["toggle"]) - sensors.toggle() - return TOPIC_REFRESH - - if (href_list["scan"]) - var/obj/effect/overmap/O = locate(href_list["scan"]) - if(istype(O) && !QDELETED(O) && (O in view(7,linked))) - playsound(loc, "sound/machines/dotprinter.ogg", 30, 1) - new/obj/item/paper/(get_turf(src), O.get_scan_data(user), "paper (Sensor Scan - [O])", L = print_language) - return TOPIC_HANDLED - -/obj/machinery/computer/ship/sensors/Process() - ..() - if(!linked) - return - if(sensors && sensors.use_power && sensors.powered()) - var/sensor_range = round(sensors.range*1.5) + 1 - linked.set_light(1, sensor_range, sensor_range+1) - else - linked.set_light(0) - -/obj/machinery/shipsensors - name = "sensors suite" - desc = "Long range gravity scanner with various other sensors, used to detect irregularities in surrounding space. Can only run in vacuum to protect delicate quantum BS elements." - icon = 'icons/obj/stationobjs.dmi' - icon_state = "sensors" - anchored = TRUE - var/max_health = 200 - var/health = 200 - var/critical_heat = 50 // sparks and takes damage when active & above this heat - var/heat_reduction = 1.5 // mitigates this much heat per tick - var/heat = 0 - var/range = 1 - idle_power_usage = 5000 - -/obj/machinery/shipsensors/attackby(obj/item/W, mob/user) - var/damage = max_health - health - if(damage && isWelder(W)) - - var/obj/item/weldingtool/WT = W - - if(!WT.isOn()) - return - - if(WT.remove_fuel(0,user)) - to_chat(user, "You start repairing the damage to [src].") - playsound(src, 'sound/items/Welder.ogg', 100, 1) - if(do_after(user, max(5, damage / 5), src, DO_PUBLIC_UNIQUE) && WT && WT.isOn()) - to_chat(user, "You finish repairing the damage to [src].") - take_damage(-damage) - else - to_chat(user, "You need more welding fuel to complete this task.") - return - return - ..() - -/obj/machinery/shipsensors/proc/in_vacuum() - var/turf/T=get_turf(src) - if(istype(T)) - var/datum/gas_mixture/environment = T.return_air() - if(environment && environment.return_pressure() > MINIMUM_PRESSURE_DIFFERENCE_TO_SUSPEND) - return 0 - return 1 - -/obj/machinery/shipsensors/on_update_icon() - if(use_power) - icon_state = "sensors" - else - icon_state = "sensors_off" - -/obj/machinery/shipsensors/examine(mob/user) - . = ..() - if(health <= 0) - to_chat(user, "\The [src] is wrecked.") - else if(health < max_health * 0.25) - to_chat(user, "\The [src] looks like it's about to break!") - else if(health < max_health * 0.5) - to_chat(user, "\The [src] looks seriously damaged!") - else if(health < max_health * 0.75) - to_chat(user, "\The [src] shows signs of damage!") - -/obj/machinery/shipsensors/bullet_act(var/obj/item/projectile/Proj) - take_damage(Proj.get_structure_damage()) - ..() - -/obj/machinery/shipsensors/proc/toggle() - if(!use_power && (health == 0 || !in_vacuum())) - return // No turning on if broken or misplaced. - if(!use_power) //need some juice to kickstart - use_power_oneoff(idle_power_usage*5) - update_use_power(!use_power) - queue_icon_update() - -/obj/machinery/shipsensors/Process() - if(use_power) //can't run in non-vacuum - if(!in_vacuum()) - toggle() - if(heat > critical_heat) - src.visible_message("\The [src] violently spews out sparks!") - var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread - s.set_up(3, 1, src) - s.start() - - take_damage(rand(10,50)) - toggle() - heat += idle_power_usage/15000 - - if (heat > 0) - heat = max(0, heat - heat_reduction) - -/obj/machinery/shipsensors/power_change() - . = ..() - if(use_power && !powered()) - toggle() - -/obj/machinery/shipsensors/proc/set_range(nrange) - range = nrange - change_power_consumption(1500 * (range**2), POWER_USE_IDLE) //Exponential increase, also affects speed of overheating - -/obj/machinery/shipsensors/emp_act(severity) - if(use_power) - take_damage(20/severity) - toggle() - ..() - -/obj/machinery/shipsensors/proc/take_damage(value) - health = min(max(health - value, 0),max_health) - if(use_power && health == 0) - toggle() - -/obj/machinery/shipsensors/weak - heat_reduction = 0.2 - desc = "Miniturized gravity scanner with various other sensors, used to detect irregularities in surrounding space. Can only run in vacuum to protect delicate quantum BS elements." diff --git a/code/modules/overmap/ships/computers/ship.dm b/code/modules/overmap/ships/computers/ship.dm deleted file mode 100644 index 4da137b7720de..0000000000000 --- a/code/modules/overmap/ships/computers/ship.dm +++ /dev/null @@ -1,108 +0,0 @@ -/* -While these computers can be placed anywhere, they will only function if placed on either a non-space, non-shuttle turf -with an /obj/effect/overmap/visitable/ship present elsewhere on that z level, or else placed in a shuttle area with an /obj/effect/overmap/visitable/ship -somewhere on that shuttle. Subtypes of these can be then used to perform ship overmap movement functions. -*/ -/obj/machinery/computer/ship - var/obj/effect/overmap/visitable/ship/linked - var/list/viewers // Weakrefs to mobs in direct-view mode. - var/extra_view = 0 // how much the view is increased by when the mob is in overmap mode. - -// A late init operation called in SSshuttle, used to attach the thing to the right ship. -/obj/machinery/computer/ship/proc/attempt_hook_up(obj/effect/overmap/visitable/ship/sector) - if(!istype(sector)) - return - if(sector.check_ownership(src)) - linked = sector - LAZYSET(linked.consoles, src, TRUE) - return 1 - -/obj/machinery/computer/ship/Destroy() - if(linked) - LAZYREMOVE(linked.consoles, src) - . = ..() - -/obj/machinery/computer/ship/proc/sync_linked() - var/obj/effect/overmap/visitable/ship/sector = map_sectors["[z]"] - if(!sector) - return - return attempt_hook_up_recursive(sector) - -/obj/machinery/computer/ship/proc/attempt_hook_up_recursive(obj/effect/overmap/visitable/ship/sector) - if(attempt_hook_up(sector)) - return sector - for(var/obj/effect/overmap/visitable/ship/candidate in sector) - if((. = .(candidate))) - return - -/obj/machinery/computer/ship/proc/display_reconnect_dialog(var/mob/user, var/flavor) - var/datum/browser/popup = new (user, "[src]", "[src]") - popup.set_content("
              Error
              Unable to connect to [flavor].
              Reconnect
              ") - popup.open() - -/obj/machinery/computer/ship/interface_interact(var/mob/user) - ui_interact(user) - return TRUE - -/obj/machinery/computer/ship/OnTopic(var/mob/user, var/list/href_list) - if(..()) - return TOPIC_HANDLED - if(href_list["sync"]) - sync_linked() - return TOPIC_REFRESH - if(href_list["close"]) - unlook(user) - user.unset_machine() - return TOPIC_HANDLED - return TOPIC_NOACTION - -// Management of mob view displacement. look to shift view to the ship on the overmap; unlook to shift back. - -/obj/machinery/computer/ship/on_user_login(mob/M) - unlook(M) - -/obj/machinery/computer/ship/proc/look(var/mob/user) - if(linked) - user.reset_view(linked) - if(user.client) - user.client.view = world.view + extra_view - GLOB.moved_event.register(user, src, /obj/machinery/computer/ship/proc/unlook) - if (!isghost(user)) - GLOB.stat_set_event.register(user, src, /obj/machinery/computer/ship/proc/unlook) - LAZYDISTINCTADD(viewers, weakref(user)) - -/obj/machinery/computer/ship/proc/unlook(var/mob/user) - user.reset_view(null, FALSE) - if(user.client) - user.client.view = world.view - GLOB.moved_event.unregister(user, src, /obj/machinery/computer/ship/proc/unlook) - GLOB.stat_set_event.unregister(user, src, /obj/machinery/computer/ship/proc/unlook) - LAZYREMOVE(viewers, weakref(user)) - -/obj/machinery/computer/ship/proc/viewing_overmap(mob/user) - return (weakref(user) in viewers) - -/obj/machinery/computer/ship/CouldNotUseTopic(mob/user) - . = ..() - unlook(user) - -/obj/machinery/computer/ship/CouldUseTopic(mob/user) - . = ..() - if(viewing_overmap(user)) - look(user) - -/obj/machinery/computer/ship/check_eye(var/mob/user) - if (!get_dist(user, src) > 1 || user.blinded || !linked ) - unlook(user) - return -1 - else - return 0 - -/obj/machinery/computer/ship/sensors/Destroy() - sensors = null - if(LAZYLEN(viewers)) - for(var/weakref/W in viewers) - var/M = W.resolve() - if(M) - unlook(M) - . = ..() diff --git a/code/modules/overmap/ships/computers/shuttle.dm b/code/modules/overmap/ships/computers/shuttle.dm deleted file mode 100644 index e6ae6c782f3ac..0000000000000 --- a/code/modules/overmap/ships/computers/shuttle.dm +++ /dev/null @@ -1,52 +0,0 @@ -//Shuttle controller computer for shuttles going between sectors -/obj/machinery/computer/shuttle_control/explore - name = "general shuttle control console" - ui_template = "shuttle_control_console_exploration.tmpl" - base_type = /obj/machinery/computer/shuttle_control/explore - machine_name = "long range shuttle console" - machine_desc = "Used to control spacecraft that are designed to move between local sectors in open space." - -/obj/machinery/computer/shuttle_control/explore/get_ui_data(var/datum/shuttle/autodock/overmap/shuttle) - . = ..() - if(istype(shuttle)) - var/total_gas = 0 - for(var/obj/structure/fuel_port/FP in shuttle.fuel_ports) //loop through fuel ports - var/obj/item/tank/fuel_tank = locate() in FP - if(fuel_tank) - total_gas += fuel_tank.air_contents.total_moles - - var/fuel_span = "good" - if(total_gas < shuttle.fuel_consumption * 2) - fuel_span = "bad" - - . += list( - "destination_name" = shuttle.get_destination_name(), - "can_pick" = shuttle.moving_status == SHUTTLE_IDLE, - "fuel_usage" = shuttle.fuel_consumption * 100, - "remaining_fuel" = round(total_gas, 0.01) * 100, - "fuel_span" = fuel_span - ) - -/obj/machinery/computer/shuttle_control/explore/handle_topic_href(var/datum/shuttle/autodock/overmap/shuttle, var/list/href_list) - if (!shuttle) - crash_with("Shuttle controller tried to handle topic with no shuttle provided.") - to_chat(usr, SPAN_DEBUG("Shuttle controller tried to handle topic with no shuttle provided. This is a bug and should be reported immediately, something's probably horribly broken.")) - return TOPIC_HANDLED - if(ismob(usr)) - var/mob/user = usr - shuttle.operator_skill = user.get_skill_value(SKILL_PILOT) - - if((. = ..()) != null) - return - - if(href_list["pick"]) - var/list/possible_d = shuttle.get_possible_destinations() - var/D - if(possible_d.len) - D = input("Choose shuttle destination", "Shuttle Destination") as null|anything in possible_d - else - to_chat(usr,"No valid landing sites in range.") - possible_d = shuttle.get_possible_destinations() - if(CanInteract(usr, GLOB.default_state) && (D in possible_d)) - shuttle.set_destination(possible_d[D]) - return TOPIC_REFRESH diff --git a/code/modules/overmap/ships/engines/engine.dm b/code/modules/overmap/ships/engines/engine.dm deleted file mode 100644 index 86d3d6218ac5f..0000000000000 --- a/code/modules/overmap/ships/engines/engine.dm +++ /dev/null @@ -1,45 +0,0 @@ -//Engine component object - -var/global/list/ship_engines = list() -/datum/ship_engine - var/name = "ship engine" - var/obj/machinery/holder //actual engine object - -/datum/ship_engine/New(var/obj/machinery/_holder) - ..() - holder = _holder - ship_engines += src - -/datum/ship_engine/proc/can_burn() - return 0 - -//Tries to fire the engine. Returns thrust -/datum/ship_engine/proc/burn() - return 0 - -//Returns status string for this engine -/datum/ship_engine/proc/get_status() - return "All systems nominal" - -/datum/ship_engine/proc/get_thrust() - return 1 - -//Sets thrust limiter, a number between 0 and 1 -/datum/ship_engine/proc/set_thrust_limit(var/new_limit) - return 1 - -/datum/ship_engine/proc/get_thrust_limit() - return 1 - -/datum/ship_engine/proc/is_on() - return 1 - -/datum/ship_engine/proc/toggle() - return 1 - -/datum/ship_engine/Destroy() - ship_engines -= src - for(var/obj/effect/overmap/visitable/ship/S in SSshuttle.ships) - S.engines -= src - holder = null - . = ..() \ No newline at end of file diff --git a/code/modules/overmap/ships/engines/gas_thruster.dm b/code/modules/overmap/ships/engines/gas_thruster.dm deleted file mode 100644 index f4ccf32e9aab0..0000000000000 --- a/code/modules/overmap/ships/engines/gas_thruster.dm +++ /dev/null @@ -1,229 +0,0 @@ -//Gas nozzle engine -/datum/ship_engine/gas_thruster - name = "gas thruster" - var/obj/machinery/atmospherics/unary/engine/nozzle - -/datum/ship_engine/gas_thruster/New(var/obj/machinery/_holder) - ..() - nozzle = _holder - -/datum/ship_engine/gas_thruster/Destroy() - nozzle = null - . = ..() - -/datum/ship_engine/gas_thruster/get_status() - return nozzle.get_status() - -/datum/ship_engine/gas_thruster/get_thrust() - return nozzle.get_thrust() - -/datum/ship_engine/gas_thruster/burn() - return nozzle.burn() - -/datum/ship_engine/gas_thruster/set_thrust_limit(var/new_limit) - nozzle.thrust_limit = new_limit - -/datum/ship_engine/gas_thruster/get_thrust_limit() - return nozzle.thrust_limit - -/datum/ship_engine/gas_thruster/is_on() - if(nozzle.use_power && nozzle.operable()) - if(nozzle.next_on > world.time) - return -1 - else - return 1 - return 0 - -/datum/ship_engine/gas_thruster/toggle() - if(nozzle.use_power) - nozzle.update_use_power(POWER_USE_OFF) - else - if(nozzle.blockage) - if(nozzle.check_blockage()) - return - nozzle.update_use_power(POWER_USE_IDLE) - if(nozzle.stat & NOPOWER)//try again - nozzle.power_change() - if(nozzle.is_on())//if everything is in working order, start booting! - nozzle.next_on = world.time + nozzle.boot_time - -/datum/ship_engine/gas_thruster/can_burn() - return nozzle.is_on() && nozzle.check_fuel() - -//Actual thermal nozzle engine object - -/obj/machinery/atmospherics/unary/engine - name = "rocket nozzle" - desc = "Simple rocket nozzle, expelling gas at hypersonic velocities to propell the ship." - icon = 'icons/obj/ship_engine.dmi' - icon_state = "nozzle" - opacity = 1 - density = TRUE - atmos_canpass = CANPASS_NEVER - connect_types = CONNECT_TYPE_REGULAR|CONNECT_TYPE_FUEL - - construct_state = /decl/machine_construction/default/panel_closed - maximum_component_parts = list(/obj/item/stock_parts = 6)//don't want too many, let upgraded component shine - uncreated_component_parts = list(/obj/item/stock_parts/power/apc/buildable = 1) - - use_power = POWER_USE_OFF - power_channel = EQUIP - idle_power_usage = 21600 //6 Wh per tick for default 2 capacitor. Gives them a reason to turn it off, really to nerf backup battery - - machine_name = "gas thruster" - machine_desc = "A heavy-duty spaceship thruster that throws gas out of its nozzle to allow propulsion." - - var/datum/ship_engine/gas_thruster/controller - var/thrust_limit = 1 //Value between 1 and 0 to limit the resulting thrust - var/moles_per_burn = 5.0 - var/charge_per_burn = 36000 //10Wh for default 2 capacitor, chews through that battery power! Makes a trade off of fuel efficient vs energy efficient - var/boot_time = 35 - var/next_on - var/blockage - -/obj/machinery/atmospherics/unary/engine/CanPass(atom/movable/mover, turf/target, height=0, air_group=0) - return 0 - -/obj/machinery/atmospherics/unary/engine/Initialize() - . = ..() - controller = new(src) - update_nearby_tiles(need_rebuild=1) - - for(var/ship in SSshuttle.ships) - var/obj/effect/overmap/visitable/ship/S = ship - if(S.check_ownership(src)) - S.engines |= controller - if(dir != S.fore_dir) - set_broken(TRUE) - break - -/obj/machinery/atmospherics/unary/engine/Destroy() - QDEL_NULL(controller) - update_nearby_tiles() - . = ..() - -/obj/machinery/atmospherics/unary/engine/on_update_icon() - overlays.Cut() - if(is_on()) - overlays += image_repository.overlay_image(icon, "nozzle_idle", plane = EFFECTS_ABOVE_LIGHTING_PLANE, layer = ABOVE_LIGHTING_LAYER) - -/obj/machinery/atmospherics/unary/engine/proc/get_status() - . = list() - .+= "Location: [get_area(src)]." - if(stat & NOPOWER) - .+= "Insufficient power to operate." - if(!check_fuel()) - .+= "Insufficient fuel for a burn." - if(stat & BROKEN) - .+= "Inoperable engine configuration." - if(blockage) - .+= "Obstruction of airflow detected." - - .+= "Propellant total mass: [round(air_contents.get_mass(),0.01)] kg." - .+= "Propellant used per burn: [round(air_contents.specific_mass() * moles_per_burn * thrust_limit,0.01)] kg." - .+= "Propellant pressure: [round(air_contents.return_pressure()/1000,0.1)] MPa." - . = jointext(.,"
              ") - -/obj/machinery/atmospherics/unary/engine/power_change() - . = ..() - if(stat & NOPOWER) - update_use_power(POWER_USE_OFF) - -/obj/machinery/atmospherics/unary/engine/update_use_power() - . = ..() - update_icon() - -/obj/machinery/atmospherics/unary/engine/proc/is_on() - return use_power && operable() && (next_on < world.time) - -/obj/machinery/atmospherics/unary/engine/proc/check_fuel() - return air_contents.total_moles > moles_per_burn * thrust_limit - -/obj/machinery/atmospherics/unary/engine/proc/get_thrust() - if(!is_on() || !check_fuel()) - return 0 - var/used_part = moles_per_burn/air_contents.get_total_moles() * thrust_limit - . = calculate_thrust(air_contents, used_part) - return - -/obj/machinery/atmospherics/unary/engine/proc/check_blockage() - blockage = FALSE - var/exhaust_dir = reverse_direction(dir) - var/turf/A = get_step(src, exhaust_dir) - var/turf/B = A - while(isturf(A) && !(isspace(A) || isopenspace(A))) - if((B.c_airblock(A)) & AIR_BLOCKED) - blockage = TRUE - break - B = A - A = get_step(A, exhaust_dir) - return blockage - -/obj/machinery/atmospherics/unary/engine/proc/burn() - if(!is_on()) - return 0 - if(!check_fuel() || (0 < use_power_oneoff(charge_per_burn)) || check_blockage()) - audible_message(src,"[src] coughs once and goes silent!") - update_use_power(POWER_USE_OFF) - return 0 - - var/datum/gas_mixture/removed = air_contents.remove(moles_per_burn * thrust_limit) - if(!removed) - return 0 - . = calculate_thrust(removed) - playsound(loc, 'sound/machines/thruster.ogg', 100 * thrust_limit, 0, world.view * 4, 0.1) - if(network) - network.update = 1 - - var/exhaust_dir = reverse_direction(dir) - var/turf/T = get_step(src,exhaust_dir) - if(T) - T.assume_air(removed) - new/obj/effect/engine_exhaust(T, dir) - -/obj/machinery/atmospherics/unary/engine/proc/calculate_thrust(datum/gas_mixture/propellant, used_part = 1) - return round(sqrt(propellant.get_mass() * used_part * air_contents.return_pressure()/100),0.1) - -/obj/machinery/atmospherics/unary/engine/RefreshParts() - ..() - //allows them to upgrade the max limit of fuel intake (which only gives diminishing returns) for increase in max thrust but massive reduction in fuel economy - var/bin_upgrade = 0.5 * clamp(total_component_rating_of_type(/obj/item/stock_parts/matter_bin), 0, 0.6)//5 litre per rank - moles_per_burn = bin_upgrade ? initial(moles_per_burn) + bin_upgrade : 0.5 //Penalty missing part: 10% fuel use, no thrust - boot_time = bin_upgrade ? initial(boot_time) - bin_upgrade : initial(boot_time) * 2 - //energy cost - thb all of this is to limit the use of back up batteries - var/energy_upgrade = clamp(total_component_rating_of_type(/obj/item/stock_parts/capacitor), 0.1, 6) - charge_per_burn = initial(charge_per_burn) / energy_upgrade - change_power_consumption(initial(idle_power_usage) / energy_upgrade, POWER_USE_IDLE) - -//Exhaust effect -/obj/effect/engine_exhaust - name = "engine exhaust" - icon = 'icons/obj/ship_engine.dmi' - icon_state = "nozzle_burn" - light_color = "#00a2ff" - anchored = TRUE - -/obj/effect/engine_exhaust/New(turf/nloc, ndir) - ..(nloc) - nloc.hotspot_expose(1000,125) - set_light(0.5, 1, 4) - set_dir(ndir) - spawn(20) - qdel(src) - -/obj/item/stock_parts/circuitboard/unary_atmos/engine//why don't we move this elsewhere? - name = T_BOARD("gas thruster") - icon_state = "mcontroller" - build_path = /obj/machinery/atmospherics/unary/engine - origin_tech = list(TECH_POWER = 1, TECH_ENGINEERING = 2) - req_components = list( - /obj/item/stack/cable_coil = 30, - /obj/item/pipe = 2) - additional_spawn_components = list( - /obj/item/stock_parts/matter_bin = 1, - /obj/item/stock_parts/capacitor = 2) - -/obj/machinery/atmospherics/unary/engine/terminal - base_type = /obj/machinery/atmospherics/unary/engine - stock_part_presets = list(/decl/stock_part_preset/terminal_setup) - uncreated_component_parts = list(/obj/item/stock_parts/power/terminal/buildable = 1) diff --git a/code/modules/overmap/ships/engines/ion_thruster.dm b/code/modules/overmap/ships/engines/ion_thruster.dm deleted file mode 100644 index 612011f406854..0000000000000 --- a/code/modules/overmap/ships/engines/ion_thruster.dm +++ /dev/null @@ -1,86 +0,0 @@ -/datum/ship_engine/ion - name = "ion thruster" - var/obj/machinery/ion_engine/thruster - -/datum/ship_engine/ion/New(var/obj/machinery/_holder) - ..() - thruster = _holder - -/datum/ship_engine/ion/Destroy() - thruster = null - . = ..() - -/datum/ship_engine/ion/get_status() - return thruster.get_status() - -/datum/ship_engine/ion/get_thrust() - return thruster.get_thrust() - -/datum/ship_engine/ion/burn() - return thruster.burn() - -/datum/ship_engine/ion/set_thrust_limit(var/new_limit) - thruster.thrust_limit = new_limit - -/datum/ship_engine/ion/get_thrust_limit() - return thruster.thrust_limit - -/datum/ship_engine/ion/is_on() - return thruster.on && thruster.powered() - -/datum/ship_engine/ion/toggle() - thruster.on = !thruster.on - -/datum/ship_engine/ion/can_burn() - return thruster.on && thruster.powered() - -/obj/machinery/ion_engine - name = "ion propulsion device" - desc = "An advanced ion propulsion device, using energy and minutes amount of gas to generate thrust." - icon = 'icons/obj/ship_engine.dmi' - icon_state = "nozzle" - power_channel = ENVIRON - idle_power_usage = 100 - anchored = TRUE - construct_state = /decl/machine_construction/default/panel_closed - var/datum/ship_engine/ion/controller - var/thrust_limit = 1 - var/on = 1 - var/burn_cost = 750 - var/generated_thrust = 2.5 - -/obj/machinery/ion_engine/Initialize() - . = ..() - controller = new(src) - -/obj/machinery/ion_engine/Destroy() - QDEL_NULL(controller) - . = ..() - -/obj/machinery/ion_engine/proc/get_status() - . = list() - .+= "Location: [get_area(src)]." - if(!powered()) - .+= "Insufficient power to operate." - - . = jointext(.,"
              ") - -/obj/machinery/ion_engine/proc/burn() - if(!on && !powered()) - return 0 - use_power_oneoff(burn_cost) - . = thrust_limit * generated_thrust - -/obj/machinery/ion_engine/proc/get_thrust() - return thrust_limit * generated_thrust * on - -/obj/item/stock_parts/circuitboard/engine/ion - name = T_BOARD("ion propulsion device") - board_type = "machine" - icon_state = "mcontroller" - build_path = /obj/machinery/ion_engine - origin_tech = list(TECH_POWER = 1, TECH_ENGINEERING = 2) - req_components = list( - /obj/item/stack/cable_coil = 2, - /obj/item/stock_parts/matter_bin = 1, - /obj/item/stock_parts/capacitor = 2) \ No newline at end of file diff --git a/code/modules/overmap/ships/landable.dm b/code/modules/overmap/ships/landable.dm deleted file mode 100644 index 7a4abc6c2db26..0000000000000 --- a/code/modules/overmap/ships/landable.dm +++ /dev/null @@ -1,170 +0,0 @@ -// These come with shuttle functionality. Need to be assigned a (unique) shuttle datum name. -// Mapping location doesn't matter, so long as on a map loaded at the same time as the shuttle areas. -// Multiz shuttles currently not supported. Non-autodock shuttles currently not supported. - -/obj/effect/overmap/visitable/ship/landable - var/shuttle // Name of associated shuttle. Must be autodock. - var/obj/effect/shuttle_landmark/ship/landmark // Record our open space landmark for easy reference. - var/multiz = 0 // Index of multi-z levels, starts at 0 - var/status = SHIP_STATUS_LANDED - icon_state = "shuttle" - moving_state = "shuttle_moving" - -/obj/effect/overmap/visitable/ship/landable/Destroy() - GLOB.shuttle_moved_event.unregister(SSshuttle.shuttles[shuttle], src) - return ..() - -/obj/effect/overmap/visitable/ship/landable/can_burn() - if(status != SHIP_STATUS_OVERMAP) - return 0 - return ..() - -/obj/effect/overmap/visitable/ship/landable/burn() - if(status != SHIP_STATUS_OVERMAP) - return 0 - return ..() - -/obj/effect/overmap/visitable/ship/landable/check_ownership(obj/object) - var/datum/shuttle/shuttle_datum = SSshuttle.shuttles[shuttle] - if(!shuttle_datum) - return - var/list/areas = shuttle_datum.find_childfree_areas() - if(get_area(object) in areas) - return 1 - -// We autobuild our z levels. -/obj/effect/overmap/visitable/ship/landable/find_z_levels() - for(var/i = 0 to multiz) - INCREMENT_WORLD_Z_SIZE - map_z += world.maxz - - var/turf/center_loc = locate(round(world.maxx/2), round(world.maxy/2), world.maxz) - landmark = new (center_loc, shuttle) - add_landmark(landmark, shuttle) - - var/visitor_dir = fore_dir - for(var/landmark_name in list("FORE", "PORT", "AFT", "STARBOARD")) - var/turf/visitor_turf = get_ranged_target_turf(center_loc, visitor_dir, round(min(world.maxx/4, world.maxy/4))) - var/obj/effect/shuttle_landmark/visiting_shuttle/visitor_landmark = new (visitor_turf, landmark, landmark_name) - add_landmark(visitor_landmark) - visitor_dir = turn(visitor_dir, 90) - - if(multiz) - new /obj/effect/landmark/map_data(center_loc, (multiz + 1)) - -/obj/effect/overmap/visitable/ship/landable/get_areas() - var/datum/shuttle/shuttle_datum = SSshuttle.shuttles[shuttle] - if(!shuttle_datum) - return list() - return shuttle_datum.find_childfree_areas() - -/obj/effect/overmap/visitable/ship/landable/populate_sector_objects() - ..() - var/datum/shuttle/shuttle_datum = SSshuttle.shuttles[shuttle] - GLOB.shuttle_moved_event.register(shuttle_datum, src, .proc/on_shuttle_jump) - on_landing(landmark, shuttle_datum.current_location) // We "land" at round start to properly place ourselves on the overmap. - -/obj/effect/shuttle_landmark/ship - name = "Open Space" - landmark_tag = "ship" - flags = SLANDMARK_FLAG_AUTOSET | SLANDMARK_FLAG_ZERO_G - var/shuttle_name - var/list/visitors // landmark -> visiting shuttle stationed there - -/obj/effect/shuttle_landmark/ship/Initialize(mapload, shuttle_name) - landmark_tag += "_[shuttle_name]" - src.shuttle_name = shuttle_name - . = ..() - -/obj/effect/shuttle_landmark/ship/Destroy() - var/obj/effect/overmap/visitable/ship/landable/ship = map_sectors["[z]"] - if(istype(ship) && ship.landmark == src) - ship.landmark = null - . = ..() - -/obj/effect/shuttle_landmark/ship/cannot_depart(datum/shuttle/shuttle) - if(LAZYLEN(visitors)) - return "Grappled by other shuttle; cannot manouver." - -/obj/effect/shuttle_landmark/visiting_shuttle - flags = SLANDMARK_FLAG_AUTOSET | SLANDMARK_FLAG_ZERO_G - var/obj/effect/shuttle_landmark/ship/core_landmark - -/obj/effect/shuttle_landmark/visiting_shuttle/Initialize(mapload, obj/effect/shuttle_landmark/ship/master, _name) - core_landmark = master - SetName(_name) - landmark_tag = master.shuttle_name + _name - GLOB.destroyed_event.register(master, src, /datum/proc/qdel_self) - . = ..() - -/obj/effect/shuttle_landmark/visiting_shuttle/Destroy() - GLOB.destroyed_event.unregister(core_landmark, src) - LAZYREMOVE(core_landmark.visitors, src) - core_landmark = null - . = ..() - -/obj/effect/shuttle_landmark/visiting_shuttle/is_valid(datum/shuttle/shuttle) - . = ..() - if(!.) - return - var/datum/shuttle/boss_shuttle = SSshuttle.shuttles[core_landmark.shuttle_name] - if(boss_shuttle.current_location != core_landmark) - return FALSE // Only available when our governing shuttle is in space. - if(shuttle == boss_shuttle) // Boss shuttle only lands on main landmark - return FALSE - -/obj/effect/shuttle_landmark/visiting_shuttle/shuttle_arrived(datum/shuttle/shuttle) - LAZYSET(core_landmark.visitors, src, shuttle) - GLOB.shuttle_moved_event.register(shuttle, src, .proc/shuttle_left) - -/obj/effect/shuttle_landmark/visiting_shuttle/proc/shuttle_left(datum/shuttle/shuttle, obj/effect/shuttle_landmark/old_landmark, obj/effect/shuttle_landmark/new_landmark) - if(old_landmark == src) - GLOB.shuttle_moved_event.unregister(shuttle, src) - LAZYREMOVE(core_landmark.visitors, src) - -/obj/effect/overmap/visitable/ship/landable/proc/on_shuttle_jump(datum/shuttle/given_shuttle, obj/effect/shuttle_landmark/from, obj/effect/shuttle_landmark/into) - if(given_shuttle != SSshuttle.shuttles[shuttle]) - return - var/datum/shuttle/autodock/auto = given_shuttle - if(into == auto.landmark_transition) - status = SHIP_STATUS_TRANSIT - on_takeoff(from, into) - return - if(into == landmark) - status = SHIP_STATUS_OVERMAP - on_takeoff(from, into) - return - status = SHIP_STATUS_LANDED - on_landing(from, into) - -/obj/effect/overmap/visitable/ship/landable/proc/on_landing(obj/effect/shuttle_landmark/from, obj/effect/shuttle_landmark/into) - var/obj/effect/overmap/visitable/target = map_sectors["[into.z]"] - var/datum/shuttle/shuttle_datum = SSshuttle.shuttles[shuttle] - if(into.landmark_tag == shuttle_datum.motherdock) // If our motherdock is a landable ship, it won't be found properly here so we need to find it manually. - for(var/obj/effect/overmap/visitable/ship/landable/landable in SSshuttle.ships) - if(landable.shuttle == shuttle_datum.mothershuttle) - target = landable - break - if(!target || target == src) - return - forceMove(target) - halt() - -/obj/effect/overmap/visitable/ship/landable/proc/on_takeoff(obj/effect/shuttle_landmark/from, obj/effect/shuttle_landmark/into) - if(!isturf(loc)) - forceMove(get_turf(loc)) - unhalt() - -/obj/effect/overmap/visitable/ship/landable/get_landed_info() - switch(status) - if(SHIP_STATUS_LANDED) - var/obj/effect/overmap/visitable/location = loc - if(istype(loc, /obj/effect/overmap/visitable/sector)) - return "Landed on \the [location.name]. Use secondary thrust to get clear before activating primary engines." - if(istype(loc, /obj/effect/overmap/visitable/ship)) - return "Docked with \the [location.name]. Use secondary thrust to get clear before activating primary engines." - return "Docked with an unknown object." - if(SHIP_STATUS_TRANSIT) - return "Maneuvering under secondary thrust." - if(SHIP_STATUS_OVERMAP) - return "In open space." \ No newline at end of file diff --git a/code/modules/overmap/ships/ship.dm b/code/modules/overmap/ships/ship.dm deleted file mode 100644 index 39ad86ab243b2..0000000000000 --- a/code/modules/overmap/ships/ship.dm +++ /dev/null @@ -1,273 +0,0 @@ -var/global/const/OVERMAP_SPEED_CONSTANT = (1 SECOND) -#define SHIP_MOVE_RESOLUTION 0.00001 -#define MOVING(speed) abs(speed) >= min_speed -#define SANITIZE_SPEED(speed) SIGN(speed) * clamp(abs(speed), 0, max_speed) -#define CHANGE_SPEED_BY(speed_var, v_diff) \ - v_diff = SANITIZE_SPEED(v_diff);\ - if(!MOVING(speed_var + v_diff)) \ - {speed_var = 0};\ - else \ - {speed_var = SANITIZE_SPEED((speed_var + v_diff)/(1 + speed_var*v_diff/(max_speed ** 2)))} -// Uses Lorentzian dynamics to avoid going too fast. - -/obj/effect/overmap/visitable/ship - name = "generic ship" - desc = "Space faring vessel." - icon_state = "ship" - var/moving_state = "ship_moving" - var/list/consoles - - var/vessel_mass = 10000 // tonnes, arbitrary number, affects acceleration provided by engines - var/vessel_size = SHIP_SIZE_LARGE // arbitrary number, affects how likely are we to evade meteors - var/max_speed = 1/(1 SECOND) // "speed of light" for the ship, in turfs/tick. - var/min_speed = 1/(2 MINUTES) // Below this, we round speed to 0 to avoid math errors. - var/max_autopilot = 1 / (10 SECONDS) // The maximum speed any attached helm can try to autopilot at. - - var/list/speed = list(0,0) // speed in x,y direction - var/list/position = list(0,0) // position within a tile. - var/last_burn = 0 // worldtime when ship last acceleated - var/burn_delay = 1 SECOND // how often ship can do burns - var/fore_dir = NORTH // what dir ship flies towards for purpose of moving stars effect procs - - var/list/engines = list() - var/engines_state = 0 //global on/off toggle for all engines - var/thrust_limit = 1 //global thrust limit for all engines, 0..1 - var/halted = 0 //admin halt or other stop. - var/skill_needed = SKILL_ADEPT //piloting skill needed to steer it without going in random dir - var/operator_skill - -/obj/effect/overmap/visitable/ship/Initialize() - . = ..() - glide_size = world.icon_size - min_speed = round(min_speed, SHIP_MOVE_RESOLUTION) - max_speed = round(max_speed, SHIP_MOVE_RESOLUTION) - SSshuttle.ships += src - START_PROCESSING(SSobj, src) - -/obj/effect/overmap/visitable/ship/Destroy() - STOP_PROCESSING(SSobj, src) - SSshuttle.ships -= src - if(LAZYLEN(consoles)) - for(var/obj/machinery/computer/ship/machine in consoles) - if(machine.linked == src) - machine.linked = null - consoles = null - . = ..() - -/obj/effect/overmap/visitable/ship/relaymove(mob/user, direction, accel_limit) - accelerate(direction, accel_limit) - update_operator_skill(user) - - -/** - * Updates `operator_skill` to match the current user's skill level, or to null if no user is provided. - * Will skip observers to avoid allowing unintended external influences on flight. - */ -/obj/effect/overmap/visitable/ship/proc/update_operator_skill(mob/user) - if (isobserver(user)) - return - operator_skill = user?.get_skill_value(SKILL_PILOT) - - -/obj/effect/overmap/visitable/ship/proc/is_still() - return !MOVING(speed[1]) && !MOVING(speed[2]) - -/obj/effect/overmap/visitable/ship/get_scan_data(mob/user) - . = ..() - if(!is_still()) - . += "
              Heading: [get_heading_angle()], speed [get_speed() * 1000]" - -//Projected acceleration based on information from engines -/obj/effect/overmap/visitable/ship/proc/get_acceleration() - return round(get_total_thrust()/get_vessel_mass(), SHIP_MOVE_RESOLUTION) - -//Does actual burn and returns the resulting acceleration -/obj/effect/overmap/visitable/ship/proc/get_burn_acceleration() - return round(burn() / get_vessel_mass(), SHIP_MOVE_RESOLUTION) - -/obj/effect/overmap/visitable/ship/proc/get_vessel_mass() - . = vessel_mass - for(var/obj/effect/overmap/visitable/ship/ship in src) - . += ship.get_vessel_mass() - -/obj/effect/overmap/visitable/ship/proc/get_speed() - return round(sqrt(speed[1] ** 2 + speed[2] ** 2), SHIP_MOVE_RESOLUTION) - -/obj/effect/overmap/visitable/ship/proc/get_heading() - var/res = 0 - if(MOVING(speed[1])) - if(speed[1] > 0) - res |= EAST - else - res |= WEST - if(MOVING(speed[2])) - if(speed[2] > 0) - res |= NORTH - else - res |= SOUTH - return res - -/obj/effect/overmap/visitable/ship/proc/get_heading_angle() - var/res = 0 - if (MOVING(speed[1]) || MOVING(speed[2])) - res = (round(Atan2(speed[1], -speed[2])) + 450)%360 - return res - -/obj/effect/overmap/visitable/ship/proc/adjust_speed(n_x, n_y) - CHANGE_SPEED_BY(speed[1], n_x) - CHANGE_SPEED_BY(speed[2], n_y) - for(var/zz in map_z) - if(is_still()) - toggle_move_stars(zz) - else - toggle_move_stars(zz, fore_dir) - update_icon() - -/obj/effect/overmap/visitable/ship/proc/get_brake_path() - if(!get_acceleration()) - return INFINITY - if(is_still()) - return 0 - if(!burn_delay) - return 0 - if(!get_speed()) - return 0 - var/num_burns = get_speed()/get_acceleration() + 2 //some padding in case acceleration drops form fuel usage - var/burns_per_grid = 1/ (burn_delay * get_speed()) - return round(num_burns/burns_per_grid) - -/obj/effect/overmap/visitable/ship/proc/decelerate(accel_limit) - if ((!speed[1] && !speed[2]) || !can_burn()) - return - last_burn = world.time - var/delta = accel_limit ? min(get_burn_acceleration(), accel_limit) : get_burn_acceleration() - var/mag = sqrt(speed[1] ** 2 + speed[2] ** 2) - if (delta >= mag) - adjust_speed(-speed[1], -speed[2]) - else - adjust_speed(-(speed[1] * delta) / mag, -(speed[2] * delta) / mag) - -/obj/effect/overmap/visitable/ship/proc/accelerate(direction, accel_limit) - if (!direction || !can_burn()) - return - last_burn = world.time - var/delta = accel_limit ? min(get_burn_acceleration(), accel_limit) : get_burn_acceleration() - var/dx = (direction & EAST) ? 1 : ((direction & WEST) ? -1 : 0) - var/dy = (direction & NORTH) ? 1 : ((direction & SOUTH) ? -1 : 0) - if (dx && dy) - dx *= 0.5 - dy *= 0.5 - adjust_speed(delta * dx, delta * dy) - -/obj/effect/overmap/visitable/ship/Process() - if(!halted && !is_still()) - var/list/deltas = list(0,0) - for(var/i = 1 to 2) - if(MOVING(speed[i])) - position[i] += speed[i] * OVERMAP_SPEED_CONSTANT - if(position[i] < 0) - deltas[i] = Ceil(position[i]) - else if(position[i] > 0) - deltas[i] = Floor(position[i]) - if(deltas[i] != 0) - position[i] -= deltas[i] - position[i] += (deltas[i] > 0) ? -1 : 1 - - update_icon() - var/turf/newloc = locate(x + deltas[1], y + deltas[2], z) - if(newloc && loc != newloc) - Move(newloc) - handle_wraparound() - -/obj/effect/overmap/visitable/ship/on_update_icon() - pixel_x = position[1] * (world.icon_size/2) - pixel_y = position[2] * (world.icon_size/2) - if(!is_still()) - icon_state = moving_state - dir = get_heading() - else - icon_state = initial(icon_state) - for(var/obj/machinery/computer/ship/machine in consoles) - if(machine.z in map_z) - for(var/weakref/W in machine.viewers) - var/mob/M = W.resolve() - if(istype(M) && M.client) - M.client.pixel_x = pixel_x - M.client.pixel_y = pixel_y - ..() - -/obj/effect/overmap/visitable/ship/proc/burn() - for(var/datum/ship_engine/E in engines) - . += E.burn() - -/obj/effect/overmap/visitable/ship/proc/get_total_thrust() - for(var/datum/ship_engine/E in engines) - . += E.get_thrust() - -/obj/effect/overmap/visitable/ship/proc/can_burn() - if(halted) - return 0 - if (world.time < last_burn + burn_delay) - return 0 - for(var/datum/ship_engine/E in engines) - . |= E.can_burn() - -//deciseconds to next step -/obj/effect/overmap/visitable/ship/proc/ETA() - . = INFINITY - for(var/i = 1 to 2) - if(MOVING(speed[i])) - . = min(., ((speed[i] > 0 ? 1 : -1) - position[i]) / speed[i]) - . = max(Ceil(.),0) - -/obj/effect/overmap/visitable/ship/proc/handle_wraparound() - var/nx = x - var/ny = y - var/low_edge = 1 - var/high_edge = GLOB.using_map.overmap_size - 1 - - if((dir & WEST) && x == low_edge) - nx = high_edge - else if((dir & EAST) && x == high_edge) - nx = low_edge - if((dir & SOUTH) && y == low_edge) - ny = high_edge - else if((dir & NORTH) && y == high_edge) - ny = low_edge - if((x == nx) && (y == ny)) - return //we're not flying off anywhere - - var/turf/T = locate(nx,ny,z) - if(T) - forceMove(T) - -/obj/effect/overmap/visitable/ship/proc/halt() - adjust_speed(-speed[1], -speed[2]) - halted = 1 - -/obj/effect/overmap/visitable/ship/proc/unhalt() - if(!SSshuttle.overmap_halted) - halted = 0 - -/obj/effect/overmap/visitable/ship/Bump(var/atom/A) - if(istype(A,/turf/unsimulated/map/edge)) - handle_wraparound() - ..() - -/obj/effect/overmap/visitable/ship/proc/get_helm_skill()//delete this mover operator skill to overmap obj - return operator_skill - -/obj/effect/overmap/visitable/ship/populate_sector_objects() - ..() - for(var/obj/machinery/computer/ship/S in SSmachines.machinery) - S.attempt_hook_up(src) - for(var/datum/ship_engine/E in ship_engines) - if(check_ownership(E.holder)) - engines |= E - -/obj/effect/overmap/visitable/ship/proc/get_landed_info() - return "This ship cannot land." - -#undef MOVING -#undef SANITIZE_SPEED -#undef CHANGE_SPEED_BY diff --git a/code/modules/overmap/spacetravel.dm b/code/modules/overmap/spacetravel.dm deleted file mode 100644 index 8f790a129619e..0000000000000 --- a/code/modules/overmap/spacetravel.dm +++ /dev/null @@ -1,126 +0,0 @@ -//list used to cache empty zlevels to avoid needless map bloat -var/global/list/cached_space = list() - -//Space stragglers go here - -/obj/effect/overmap/visitable/sector/temporary - name = "Deep Space" - invisibility = 101 - known = FALSE - -/obj/effect/overmap/visitable/sector/temporary/New(var/nx, var/ny, var/nz) - map_z += nz - testing("Temporary sector at zlevel [nz] was created.") - register(nx, ny) - -/obj/effect/overmap/visitable/sector/temporary/Destroy() - unregister() - testing("Temporary sector at [x],[y] was deleted. zlevel [map_z[1]] is no longer accessible.") - return ..() - -/obj/effect/overmap/visitable/sector/temporary/proc/register(var/nx, var/ny) - forceMove(locate(nx, ny, GLOB.using_map.overmap_z)) - map_sectors["[map_z[1]]"] = src - testing("Temporary sector at zlevel [map_z[1]] moved to coordinates [x],[y]") - -/obj/effect/overmap/visitable/sector/temporary/proc/unregister() - // Note that any structures left in the zlevel will remain there, and may later turn up at completely different - // coordinates if this temporary sector is recycled. Perhaps everything remaining in the zlevel should be destroyed? - testing("Caching temporary sector for future use, corresponding zlevel is [map_z[1]], previous coordinates were [x],[y]") - map_sectors.Remove(src) - src.forceMove(null) - cached_space += src - -/obj/effect/overmap/visitable/sector/temporary/proc/can_die(var/mob/observer) - testing("Checking if sector at [map_z[1]] can die.") - for(var/mob/M in GLOB.player_list) - if(M != observer && (M.z in map_z)) - testing("There are people on it.") - return 0 - return 1 - -/proc/get_deepspace(x,y) - var/turf/map = locate(x,y,GLOB.using_map.overmap_z) - var/obj/effect/overmap/visitable/sector/temporary/res - for(var/obj/effect/overmap/visitable/sector/temporary/O in map) - res = O - break - if(istype(res)) - return res - else if(cached_space.len) - res = cached_space[cached_space.len] - cached_space -= res - res.register(x, y) - return res - else - return new /obj/effect/overmap/visitable/sector/temporary(x, y, ++world.maxz) - -/atom/movable/proc/lost_in_space() - for(var/atom/movable/AM in contents) - if(!AM.lost_in_space()) - return FALSE - return TRUE - -/mob/lost_in_space() - return isnull(client) - -/mob/living/carbon/human/lost_in_space() - return isnull(client) && !last_ckey && stat == DEAD - -/proc/overmap_spacetravel(var/turf/space/T, var/atom/movable/A) - if (!T || !A) - return - - var/obj/effect/overmap/visitable/M = map_sectors["[T.z]"] - if (!M) - return - - if(A.lost_in_space()) - if(!QDELETED(A)) - qdel(A) - return - - var/nx = 1 - var/ny = 1 - var/nz = 1 - - if(T.x <= TRANSITIONEDGE) - nx = world.maxx - TRANSITIONEDGE - 2 - ny = rand(TRANSITIONEDGE + 2, world.maxy - TRANSITIONEDGE - 2) - - else if (A.x >= (world.maxx - TRANSITIONEDGE - 1)) - nx = TRANSITIONEDGE + 2 - ny = rand(TRANSITIONEDGE + 2, world.maxy - TRANSITIONEDGE - 2) - - else if (T.y <= TRANSITIONEDGE) - ny = world.maxy - TRANSITIONEDGE -2 - nx = rand(TRANSITIONEDGE + 2, world.maxx - TRANSITIONEDGE - 2) - - else if (A.y >= (world.maxy - TRANSITIONEDGE - 1)) - ny = TRANSITIONEDGE + 2 - nx = rand(TRANSITIONEDGE + 2, world.maxx - TRANSITIONEDGE - 2) - - testing("[A] spacemoving from [M] ([M.x], [M.y]).") - - var/turf/map = locate(M.x,M.y,GLOB.using_map.overmap_z) - var/obj/effect/overmap/visitable/TM - for(var/obj/effect/overmap/visitable/O in map) - if(O != M && O.in_space && prob(50)) - TM = O - break - if(!TM) - TM = get_deepspace(M.x,M.y) - nz = pick(TM.map_z) - - var/turf/dest = locate(nx,ny,nz) - if(dest) - A.forceMove(dest) - if(ismob(A)) - var/mob/D = A - if(D.pulling) - D.pulling.forceMove(dest) - - if(istype(M, /obj/effect/overmap/visitable/sector/temporary)) - var/obj/effect/overmap/visitable/sector/temporary/source = M - if (source != TM && source.can_die()) - source.unregister() diff --git a/code/modules/paperwork/adminpaper.dm b/code/modules/paperwork/adminpaper.dm deleted file mode 100644 index 8531a0232f719..0000000000000 --- a/code/modules/paperwork/adminpaper.dm +++ /dev/null @@ -1,168 +0,0 @@ -//Adminpaper - it's like paper, but more adminny! -/obj/item/paper/admin - name = "administrative paper" - desc = "If you see this, something has gone horribly wrong." - var/datum/admins/admindatum = null - - var/interactions = null - var/isCrayon = 0 - var/origin = null - var/mob/sender = null - /// List (`/obj/machinery/photocopier/faxmachine`). List of fax machines matching the paper's target department. - var/list/destinations = list() - /// String. The paper's target department. - var/department = null - - var/header = null - var/headerOn = TRUE - - var/footer = null - var/footerOn = FALSE - - var/logo_list = list("sollogo.png","eclogo.png","fleetlogo.png","armylogo.png","exologo.png","ntlogo.png","daislogo.png","xynlogo.png","terralogo.png", "sfplogo.png", "torchlogo.png") - var/logo = "" - - var/unformatedText = "" - -/obj/item/paper/admin/New() - ..() - generateInteractions() - - -/obj/item/paper/admin/proc/generateInteractions() - //clear first - interactions = null - - //Snapshot is crazy and likes putting each topic hyperlink on a seperate line from any other tags so it's nice and clean. - interactions += "
              The fax will transmit everything above this line
              " - interactions += "Send fax " - interactions += "Pen mode: [isCrayon ? "Crayon" : "Pen"] " - interactions += "Cancel fax " - interactions += "
              " - interactions += "Change logo " - interactions += "Change language ([language]) " - interactions += "Toggle Header " - interactions += "Toggle Footer " - interactions += "Clear page " - interactions += "
              " - -/obj/item/paper/admin/proc/generateHeader() - var/originhash = md5("[origin]") - var/challengehash = copytext_char(md5("[game_id]"),1,10) // changed to a hash of the game ID so it's more consistant but changes every round. - var/text = null - //TODO change logo based on who you're contacting. - text = "

              " - text += "[origin] Quantum Uplink Signed Message
              " - text += "Encryption key: [originhash]
              " - text += "Challenge: [challengehash]

              " - - header = text - -/obj/item/paper/admin/proc/generateFooter() - var/text = null - - text = "
              " - text += "This transmission is intended only for the addressee and may contain confidential information. Any unauthorized disclosure is strictly prohibited.

              " - text += "If this transmission is recieved in error, please notify both the sender and the office of [GLOB.using_map.boss_name] Internal Affairs immediately so that corrective action may be taken." - text += "Failure to comply is a breach of regulation and may be prosecuted to the fullest extent of the law, where applicable." - text += "
              " - - footer = text - - -/obj/item/paper/admin/proc/adminbrowse() - updateinfolinks() - generateHeader() - generateFooter() - updateDisplay() - -/obj/item/paper/admin/proc/updateDisplay() - show_browser(usr, "[name][headerOn ? header : ""][info_links][stamps][footerOn ? footer : ""][interactions]", "window=[name];can_close=0") - - - -/obj/item/paper/admin/Topic(href, href_list) - if(href_list["write"]) - var/id = href_list["write"] - - var/t = sanitize(input("Enter what you want to write:", "Write", unformatedText, null) as message, MAX_PAPER_MESSAGE_LEN, extra = 0) - - if(!t) - return - - var last_fields_value = fields - - unformatedText = t - - //t = html_encode(t) - t = replacetext_char(t, "\n", "
              ") - t = parsepencode(t, null, null, isCrayon, null, TRUE) // Encode everything from pencode to html - - - if(fields > 50)//large amount of fields creates a heavy load on the server, see updateinfolinks() and addtofield() - to_chat(usr, "Too many fields. Sorry, you can't do this.") - fields = last_fields_value - return - - if(id!="end") - addtofield(text2num(id), t) // He wants to edit a field, let him. - else - info = t // set the file to the new text - updateinfolinks() - - //manualy set freespace - free_space = MAX_PAPER_MESSAGE_LEN - length(strip_html_properly(t)) - - updateDisplay() - - update_icon() - return - - if(href_list["confirm"]) - switch(alert("Are you sure you want to send the fax as is?",, "Yes", "No")) - if("Yes") - if(headerOn) - info = header + info - if(footerOn) - info += footer - updateinfolinks() - close_browser(usr, "window=[name]") - admindatum.faxCallback(src) - return - - if(href_list["penmode"]) - isCrayon = !isCrayon - generateInteractions() - updateDisplay() - return - - if(href_list["cancel"]) - close_browser(usr, "window=[name]") - qdel(src) - return - - if(href_list["clear"]) - clearpaper() - updateDisplay() - return - - if(href_list["toggleheader"]) - headerOn = !headerOn - updateDisplay() - return - - if(href_list["togglefooter"]) - footerOn = !footerOn - updateDisplay() - return - - if(href_list["changelogo"]) - logo = input(usr, "What logo?", "Choose a logo", "") as null|anything in (logo_list) - generateHeader() - updateDisplay() - return - - if (href_list["changelanguage"]) - choose_language(usr, TRUE) - updateDisplay() - return diff --git a/code/modules/paperwork/bodyscan_paper.dm b/code/modules/paperwork/bodyscan_paper.dm deleted file mode 100644 index b6fd84bc3edd1..0000000000000 --- a/code/modules/paperwork/bodyscan_paper.dm +++ /dev/null @@ -1,11 +0,0 @@ -/obj/item/paper/bodyscan - color = COLOR_OFF_WHITE - scan_file_type = /datum/computer_file/data/bodyscan - -/obj/item/paper/bodyscan/examine(mob/user) - set_content(display_medical_data(metadata, user.get_skill_value(SKILL_MEDICAL), TRUE)) - . = ..() - -/obj/item/paper/bodyscan/show_info(var/mob/user) - set_content(display_medical_data(metadata, user.get_skill_value(SKILL_MEDICAL), TRUE)) - . = ..() \ No newline at end of file diff --git a/code/modules/paperwork/carbonpaper.dm b/code/modules/paperwork/carbonpaper.dm deleted file mode 100644 index 6564f5b827358..0000000000000 --- a/code/modules/paperwork/carbonpaper.dm +++ /dev/null @@ -1,53 +0,0 @@ -/obj/item/paper/carbon - name = "sheet of paper" - icon_state = "paper_stack" - item_state = "paper" - var/copied = 0 - var/iscopy = 0 - - -/obj/item/paper/carbon/on_update_icon() - if(iscopy) - if(info) - icon_state = "cpaper_words" - return - icon_state = "cpaper" - else if (copied) - if(info) - icon_state = "paper_words" - return - icon_state = "paper" - else - if(info) - icon_state = "paper_stack_words" - return - icon_state = "paper_stack" - - - -/obj/item/paper/carbon/verb/removecopy() - set name = "Remove carbon-copy" - set category = "Object" - set src in usr - - if (copied == 0) - var/obj/item/paper/carbon/c = src - var/copycontents = c.info - var/obj/item/paper/carbon/copy = new /obj/item/paper/carbon (usr.loc) - copy.language = language - // - if(info) - copycontents = replacetext_char(copycontents, "" - copy.SetName("Copy - " + c.name) - copy.fields = c.fields - copy.updateinfolinks() - to_chat(usr, "You tear off the carbon-copy!") - c.copied = 1 - copy.iscopy = 1 - copy.update_icon() - c.update_icon() - else - to_chat(usr, "There are no more carbon copies attached to this paper!") diff --git a/code/modules/paperwork/clipboard.dm b/code/modules/paperwork/clipboard.dm deleted file mode 100644 index 7a4805613a38e..0000000000000 --- a/code/modules/paperwork/clipboard.dm +++ /dev/null @@ -1,195 +0,0 @@ -/obj/item/material/clipboard - name = "clipboard" - desc = "It's a board with a clip used to organise papers." - icon = 'icons/obj/bureaucracy.dmi' - icon_state = "clipboard" - item_state = "clipboard" - throwforce = 0 - w_class = ITEM_SIZE_SMALL - throw_speed = 3 - throw_range = 10 - var/obj/item/pen/haspen //The stored pen. - var/obj/item/toppaper //The topmost piece of paper. - slot_flags = SLOT_BELT - default_material = MATERIAL_WOOD - applies_material_name = FALSE - matter = list(MATERIAL_WOOD = 70) - -/obj/item/material/clipboard/New(newloc, material_key) - ..() - update_icon() - if(material) - desc = initial(desc) - desc += " It's made of [material.use_name]." - -/obj/item/material/clipboard/MouseDrop(obj/over_object as obj) //Quick clipboard fix. -Agouri - if(ishuman(usr)) - var/mob/M = usr - if(!(istype(over_object, /obj/screen) )) - return ..() - - if(!M.restrained() && !M.stat) - switch(over_object.name) - if("r_hand") - if(M.unEquip(src)) - M.put_in_r_hand(src) - if("l_hand") - if(M.unEquip(src)) - M.put_in_l_hand(src) - - add_fingerprint(usr) - return - -/obj/item/material/clipboard/on_update_icon() - ..() - if(toppaper) - overlays += overlay_image(toppaper.icon, toppaper.icon_state, flags=RESET_COLOR) - overlays += toppaper.overlays - if(haspen) - overlays += overlay_image(icon, "clipboard_pen", flags=RESET_COLOR) - overlays += overlay_image(icon, "clipboard_over", flags=RESET_COLOR) - return - -/obj/item/material/clipboard/attackby(obj/item/W as obj, mob/user as mob) - - if(istype(W, /obj/item/paper) || istype(W, /obj/item/photo)) - if(!user.unEquip(W, src)) - return - if(istype(W, /obj/item/paper)) - toppaper = W - to_chat(user, "You clip the [W] onto \the [src].") - update_icon() - - else if(istype(toppaper) && istype(W, /obj/item/pen)) - toppaper.attackby(W, usr) - update_icon() - - return - -/obj/item/material/clipboard/attack_self(mob/user as mob) - var/dat = "Clipboard" - if(haspen) - dat += "Remove Pen

              " - else - dat += "Add Pen

              " - - //The topmost paper. I don't think there's any way to organise contents in byond, so this is what we're stuck with. -Pete - if(toppaper) - var/obj/item/paper/P = toppaper - dat += "Write Remove Rename - [P.name]

              " - - for(var/obj/item/paper/P in src) - if(P==toppaper) - continue - dat += "Remove Rename - [P.name]
              " - for(var/obj/item/photo/Ph in src) - dat += "Remove Rename - [Ph.name]
              " - - show_browser(user, dat, "window=clipboard") - onclose(user, "clipboard") - add_fingerprint(usr) - return - -/obj/item/material/clipboard/Topic(href, href_list) - ..() - if((usr.stat || usr.restrained())) - return - - if(src.loc == usr) - - if(href_list["pen"]) - if(istype(haspen) && (haspen.loc == src)) - usr.put_in_hands(haspen) - haspen = null - - else if(href_list["addpen"]) - if(!haspen) - var/obj/item/pen/W = usr.get_active_hand() - if(istype(W, /obj/item/pen)) - if(!usr.unEquip(W, src)) - return - haspen = W - to_chat(usr, "You slot the pen into \the [src].") - - else if(href_list["write"]) - var/obj/item/P = locate(href_list["write"]) - - if(P && (P.loc == src) && istype(P, /obj/item/paper) && (P == toppaper) ) - - var/obj/item/I = usr.get_active_hand() - - if(istype(I, /obj/item/pen)) - - P.attackby(I, usr) - - else if(href_list["remove"]) - var/obj/item/P = locate(href_list["remove"]) - - if(P && (P.loc == src) && (istype(P, /obj/item/paper) || istype(P, /obj/item/photo)) ) - usr.put_in_hands(P) - if(P == toppaper) - toppaper = null - var/obj/item/paper/newtop = locate(/obj/item/paper) in src - if(newtop && (newtop != P)) - toppaper = newtop - else - toppaper = null - - else if(href_list["rename"]) - var/obj/item/O = locate(href_list["rename"]) - - if(O && (O.loc == src)) - if(istype(O, /obj/item/paper)) - var/obj/item/paper/to_rename = O - to_rename.rename() - - else if(istype(O, /obj/item/photo)) - var/obj/item/photo/to_rename = O - to_rename.rename() - - else if(href_list["read"]) - var/obj/item/paper/P = locate(href_list["read"]) - - if(P && (P.loc == src) && istype(P, /obj/item/paper) ) - - if(!(istype(usr, /mob/living/carbon/human) || isghost(usr) || istype(usr, /mob/living/silicon))) - show_browser(usr, "[P.name][stars(P.info)][P.stamps]", "window=[P.name]") - onclose(usr, "[P.name]") - else - show_browser(usr, "[P.name][P.info][P.stamps]", "window=[P.name]") - onclose(usr, "[P.name]") - - else if(href_list["look"]) - var/obj/item/photo/P = locate(href_list["look"]) - if(P && (P.loc == src) && istype(P, /obj/item/photo) ) - P.show(usr) - - else if(href_list["top"]) // currently unused - var/obj/item/P = locate(href_list["top"]) - if(P && (P.loc == src) && istype(P, /obj/item/paper) ) - toppaper = P - to_chat(usr, "You move [P.name] to the top.") - - //Update everything - attack_self(usr) - update_icon() - return - -/obj/item/material/clipboard/ebony - default_material = MATERIAL_EBONY - -/obj/item/material/clipboard/steel - default_material = MATERIAL_STEEL - matter = list(MATERIAL_STEEL = 70) - -/obj/item/material/clipboard/aluminium - default_material = MATERIAL_ALUMINIUM - matter = list(MATERIAL_ALUMINIUM = 70) - -/obj/item/material/clipboard/glass - default_material = MATERIAL_GLASS - matter = list(MATERIAL_GLASS = 70) - -/obj/item/material/clipboard/plastic - default_material = MATERIAL_PLASTIC - matter = list(MATERIAL_PLASTIC = 70) \ No newline at end of file diff --git a/code/modules/paperwork/faxmachine.dm b/code/modules/paperwork/faxmachine.dm deleted file mode 100644 index 5c39dfe132477..0000000000000 --- a/code/modules/paperwork/faxmachine.dm +++ /dev/null @@ -1,288 +0,0 @@ -GLOBAL_LIST_EMPTY(allfaxes) -GLOBAL_LIST_EMPTY(alldepartments) - -GLOBAL_LIST_EMPTY(adminfaxes) //cache for faxes that have been sent to admins -GLOBAL_LIST_EMPTY(admin_departments) - -/obj/machinery/photocopier/faxmachine - name = "fax machine" - icon = 'icons/obj/bureaucracy.dmi' - icon_state = "fax" - insert_anim = "faxsend" - var/send_access = list() - - idle_power_usage = 30 - active_power_usage = 200 - - var/obj/item/card/id/scan = null // identification - var/authenticated = 0 - var/department = null // our department - var/destination = null // the department we're sending to - -/obj/machinery/photocopier/faxmachine/Initialize() - . = ..() - - if (!length(GLOB.admin_departments)) - if (length(GLOB.using_map?.map_admin_faxes)) - GLOB.admin_departments = GLOB.using_map.map_admin_faxes.Copy() - else - GLOB.admin_departments = list("[station_name()] Head Office", "[station_name()] Supply") - - if (!destination) - if (length(GLOB.admin_departments)) - destination = GLOB.admin_departments[1] - else if (length(GLOB.alldepartments)) - destination = pick(GLOB.alldepartments) - - GLOB.allfaxes += src - - if (department && !(("[department]" in GLOB.alldepartments) || ("[department]" in GLOB.admin_departments))) - GLOB.alldepartments |= department - -/obj/machinery/photocopier/faxmachine/attackby(obj/item/O as obj, mob/user as mob) - if(istype(O, /obj/item/paper)) - var/obj/item/paper/P = O - if(!P.readable) - to_chat(user, SPAN_NOTICE("\The [src] beeps. Error, invalid document detected.")) - return - if(istype(O, /obj/item/card/id)) - if(!user.unEquip(O, src)) - return - scan = O - to_chat(user, "You insert \the [O] into \the [src].") - if (isMultitool(O)) - to_chat(user, SPAN_NOTICE("\The [src]'s department tag is set to [department].")) - if (!emagged) - to_chat(user, SPAN_WARNING("\The [src]'s department configuration is vendor locked.")) - return - var/list/option_list = GLOB.alldepartments.Copy() + GLOB.admin_departments.Copy() + "(Custom)" + "(Cancel)" - var/new_department = input(user, "Which department do you want to tag this fax machine as? Choose '(Custom)' to enter a custom department or '(Cancel) to cancel.", "Fax Machine Department Tag") as null|anything in option_list - if (!new_department || new_department == department || new_department == "(Cancel)" || !CanUseTopic(user) || !Adjacent(user)) - return - if (new_department == "(Custom)") - new_department = input(user, "Which department do you want to tag this fax machine as?", "Fax Machine Department Tag", department) as text|null - if (!new_department || new_department == department || !CanUseTopic(user) || !Adjacent(user)) - return - if (new_department == "Unknown" || new_department == "(Custom)" || new_department == "(Cancel)") - to_chat(user, SPAN_WARNING("Invalid department tag selected.")) - return - department = new_department - to_chat(user, SPAN_NOTICE("You reconfigure \the [src]'s department tag to [department].")) - else - ..() - -/obj/machinery/photocopier/faxmachine/get_mechanics_info() - . = "

              The fax machine can be used to transmit paper faxes to other fax machines on the map, or to off-ship organizations handled by server administration. To use the fax machine, you'll need to insert both a paper and your ID card, authenticate, select a destination, the transmit the fax.

              " - . += "

              You can also fax paper bundles, including photos, using this machine.

              " - . += "

              You can check the machine's department origin tag using a multitool.

              " - . += ..() - -/obj/machinery/photocopier/faxmachine/get_antag_info() - . = "

              If emagged with a cryptographic sequencer, the fax machine can then have it's origin department tag changed using a multitool. This allows you to send faxes pretending to be from somewhere else on the ship, or even an off-ship origin like EXCOMM.

              " - . += "

              NOTE: Any new department tags created in this way that do not already exist in the list of targets cannot receive faxes, as this does not add new departments to the list of valid fax targets.

              " - . += ..() - -/obj/machinery/photocopier/faxmachine/emag_act(remaining_charges, mob/user, emag_source) - if (emagged) - to_chat(user, SPAN_WARNING("\The [src]'s systems have already been hacked.")) - return - to_chat(user, SPAN_NOTICE("You unlock \the [src]'s department tagger. You can now modify it's department tag to disguise faxes as being from another department or even off-ship using a multitool.")) - emagged = TRUE - return TRUE - -/obj/machinery/photocopier/faxmachine/interface_interact(mob/user) - interact(user) - return TRUE - -/obj/machinery/photocopier/faxmachine/interact(mob/user) - user.set_machine(src) - - var/dat = "Fax Machine ([department])
              " - - var/scan_name - if(scan) - scan_name = scan.name - else - scan_name = "--------" - - dat += "Confirm Identity: [scan_name]
              " - - if(authenticated) - dat += "{Log Out}" - else - dat += "{Log In}" - - dat += "
              " - - if(authenticated) - dat += "Logged in to: [GLOB.using_map.boss_name] Quantum Entanglement Network

              " - - if(copyitem) - dat += "Remove Item

              " - dat += "Send
              " - dat += "Currently sending: [copyitem.name]
              " - dat += "Sending to: [destination ? destination : "Nobody"]
              " - - else - dat += "Please insert paper to send via secure connection.

              " - - else - dat += "Proper authentication is required to use this device.

              " - - if(copyitem) - dat += "Remove Item
              " - - show_browser(user, dat, "window=copier") - onclose(user, "copier") - return - -/obj/machinery/photocopier/faxmachine/OnTopic(mob/user, href_list, state) - if(href_list["send"]) - if(copyitem) - if (destination in GLOB.admin_departments) - send_admin_fax(user, destination) - else - sendfax(destination) - return TOPIC_REFRESH - - if(href_list["remove"]) - OnRemove(user) - return TOPIC_REFRESH - - if(href_list["scan"]) - if (scan) - if(ishuman(user)) - user.put_in_hands(scan) - else - scan.dropInto(loc) - scan = null - else - var/obj/item/I = user.get_active_hand() - if (istype(I, /obj/item/card/id) && user.unEquip(I, src)) - scan = I - authenticated = 0 - return TOPIC_REFRESH - - if(href_list["dept"]) - var/desired_destination = input(user, "Which department?", "Choose a department", "") as null|anything in (GLOB.alldepartments + GLOB.admin_departments) - if(desired_destination && CanInteract(user, state)) - destination = desired_destination - return TOPIC_REFRESH - - if(href_list["auth"]) - if ( (!( authenticated ) && (scan)) ) - if (has_access(send_access, scan.GetAccess())) - authenticated = 1 - return TOPIC_REFRESH - - if(href_list["logout"]) - authenticated = 0 - return TOPIC_REFRESH - -/obj/machinery/photocopier/faxmachine/proc/sendfax(var/destination) - if(stat & (BROKEN|NOPOWER)) - return - - use_power_oneoff(200) - - var/success = send_fax_loop(copyitem, destination, department) - - if (success) - visible_message("[src] beeps, \"Message transmitted successfully.\"") - else - visible_message("[src] beeps, \"Error transmitting message.\"") - - -/// Whether or not the fax machine is in a state capable of receiving faxes. Returns boolean. -/obj/machinery/photocopier/faxmachine/proc/can_receive_fax() - if (inoperable()) - return FALSE - if (!department) - return FALSE - return TRUE - - -/obj/machinery/photocopier/faxmachine/proc/recievefax(obj/item/incoming, origin_department = "Unknown") - set waitfor = FALSE - - flick("faxreceive", src) - playsound(loc, "sound/machines/dotprinter.ogg", 50, 1) - visible_message(SPAN_NOTICE("\The [src] pings, \"New fax received from [origin_department].\"")) - - // give the sprite some time to flick - sleep(20) - - if (istype(incoming, /obj/item/paper)) - var/obj/item/paper/newcopy = copy(incoming, FALSE) - newcopy.SetName("[origin_department] - [newcopy.name]") - else if (istype(incoming, /obj/item/paper)) - var/obj/item/paper/newcopy = photocopy(incoming, FALSE) - newcopy.SetName("[origin_department] - [newcopy.name]") - else if (istype(incoming, /obj/item/paper_bundle)) - var/obj/item/paper_bundle/newcopy = bundlecopy(incoming, FALSE) - newcopy.SetName("[origin_department] - [newcopy.name]") - else - return - - use_power_oneoff(active_power_usage) - return - -/obj/machinery/photocopier/faxmachine/proc/send_admin_fax(var/mob/sender, var/destination) - if(stat & (BROKEN|NOPOWER)) - return - - use_power_oneoff(200) - - //recieved copies should not use toner since it's being used by admins only. - var/obj/item/rcvdcopy - if (istype(copyitem, /obj/item/paper)) - rcvdcopy = copy(copyitem, FALSE) - else if (istype(copyitem, /obj/item/photo)) - rcvdcopy = photocopy(copyitem, FALSE) - else if (istype(copyitem, /obj/item/paper_bundle)) - rcvdcopy = bundlecopy(copyitem, FALSE) - else - visible_message("[src] beeps, \"Error transmitting message.\"") - return - - rcvdcopy.forceMove(null) //hopefully this shouldn't cause trouble - GLOB.adminfaxes += rcvdcopy - - var/mob/intercepted = check_for_interception() - - fax2TGS(rcvdcopy, department, destination, key_name(sender.client), intercepted) // Proxima - message_admins(sender, "[uppertext(destination)] FAX[intercepted ? "(Intercepted by [intercepted])" : null]", rcvdcopy, destination ? destination : "UNKNOWN") - send_fax_loop(copyitem, destination, department) // Forward to any listening fax machines - visible_message("[src] beeps, \"Message transmitted successfully.\"") - - -/obj/machinery/photocopier/faxmachine/proc/message_admins(mob/sender, faxname, obj/item/sent, reply_type) - var/msg = "[faxname]: [get_options_bar(sender, 2,1,1)]" - msg += "(TAKE) (REPLY): " - msg += "Receiving '[sent.name]' via secure connection ... view message" - - for(var/client/C as anything in GLOB.admins) - if(check_rights((R_ADMIN|R_MOD),0,C)) - to_chat(C, msg) - sound_to(C, 'sound/machines/dotprinter.ogg') - - -/// Retrieves a list of all fax machines matching the given department tag. -/proc/get_fax_machines_by_department(department) - if (!department) - department = "Unknown" - var/list/faxes = list() - for (var/obj/machinery/photocopier/faxmachine/fax in GLOB.allfaxes) - if (fax.department == department) - faxes += fax - return faxes - - -/// Handles the loop of sending a fax to all machines matching the department tag. Returns `TRUE` if at least one fax machine successfully received the fax. Does not include sending faxes to admins. -/proc/send_fax_loop(copyitem, department, origin = "Unknown") - var/success = FALSE - for (var/obj/machinery/photocopier/faxmachine/fax in get_fax_machines_by_department(department)) - if (fax.department == department && fax.can_receive_fax()) - success = TRUE - fax.recievefax(copyitem, origin) - return success diff --git a/code/modules/paperwork/filingcabinet.dm b/code/modules/paperwork/filingcabinet.dm deleted file mode 100644 index 5d3a669fd4952..0000000000000 --- a/code/modules/paperwork/filingcabinet.dm +++ /dev/null @@ -1,81 +0,0 @@ -/* Filing cabinets! - * Contains: - * Filing Cabinets - * Security Record Cabinets - * Medical Record Cabinets - */ - -/* - * Filing Cabinets - */ -/obj/structure/filingcabinet - name = "filing cabinet" - desc = "A large cabinet with drawers." - icon = 'icons/obj/bureaucracy.dmi' - icon_state = "filingcabinet" - density = TRUE - anchored = TRUE - atom_flags = ATOM_FLAG_NO_TEMP_CHANGE | ATOM_FLAG_CLIMBABLE - obj_flags = OBJ_FLAG_ANCHORABLE - var/list/can_hold = list( - /obj/item/paper, - /obj/item/folder, - /obj/item/photo, - /obj/item/paper_bundle, - /obj/item/sample) - -/obj/structure/filingcabinet/chestdrawer - name = "chest drawer" - icon_state = "chestdrawer" - -/obj/structure/filingcabinet/wallcabinet - name = "wall-mounted filing cabinet" - desc = "A filing cabinet installed into a cavity in the wall to save space. Wow!" - icon_state = "wallcabinet" - density = FALSE - obj_flags = 0 - - -/obj/structure/filingcabinet/filingcabinet //not changing the path to avoid unecessary map issues, but please don't name stuff like this in the future -Pete - icon_state = "tallcabinet" - - -/obj/structure/filingcabinet/Initialize() - for(var/obj/item/I in loc) - if(is_type_in_list(I, can_hold)) - I.forceMove(src) - . = ..() - -/obj/structure/filingcabinet/attackby(obj/item/P as obj, mob/user as mob) - if(is_type_in_list(P, can_hold)) - if(!user.unEquip(P, src)) - return - add_fingerprint(user) - to_chat(user, "You put [P] in [src].") - flick("[initial(icon_state)]-open",src) - updateUsrDialog() - else - ..() - -/obj/structure/filingcabinet/attack_hand(mob/user as mob) - if(contents.len <= 0) - to_chat(user, "\The [src] is empty.") - return - - user.set_machine(src) - var/dat = list("
              ") - for(var/obj/item/P in src) - dat += "" - dat += "
              [P.name]
              " - show_browser(user, "[name][jointext(dat,null)]", "window=filingcabinet;size=350x300") - -/obj/structure/filingcabinet/Topic(href, href_list) - if(href_list["retrieve"]) - show_browser(usr, "", "window=filingcabinet") // Close the menu - - //var/retrieveindex = text2num(href_list["retrieve"]) - var/obj/item/P = locate(href_list["retrieve"])//contents[retrieveindex] - if(istype(P) && (P.loc == src) && src.Adjacent(usr)) - usr.put_in_hands(P) - updateUsrDialog() - flick("[initial(icon_state)]-open",src) diff --git a/code/modules/paperwork/folders.dm b/code/modules/paperwork/folders.dm deleted file mode 100644 index ab18e6b363a42..0000000000000 --- a/code/modules/paperwork/folders.dm +++ /dev/null @@ -1,146 +0,0 @@ -/obj/item/folder - name = "folder" - desc = "A folder." - icon = 'icons/obj/bureaucracy.dmi' - icon_state = "folder" - w_class = ITEM_SIZE_SMALL - -/obj/item/folder/blue - desc = "A blue folder." - icon_state = "folder_blue" - -/obj/item/folder/red - desc = "A red folder." - icon_state = "folder_red" - -/obj/item/folder/yellow - desc = "A yellow folder." - icon_state = "folder_yellow" - -/obj/item/folder/white - desc = "A white folder." - icon_state = "folder_white" - -/obj/item/folder/nt - desc = "A corporate folder." - icon_state = "folder_nt" - -/obj/item/folder/on_update_icon() - overlays.Cut() - if(contents.len) - overlays += "folder_paper" - return - -/obj/item/folder/attackby(obj/item/W as obj, mob/user as mob) - if(istype(W, /obj/item/paper) || istype(W, /obj/item/photo) || istype(W, /obj/item/paper_bundle)) - if(!user.unEquip(W, src)) - return - to_chat(user, "You put the [W] into \the [src].") - update_icon() - else if(istype(W, /obj/item/pen)) - var/n_name = sanitizeSafe(input(usr, "What would you like to label the folder?", "Folder Labelling", null) as text, MAX_NAME_LEN) - if((loc == usr && usr.stat == 0)) - SetName("folder[(n_name ? text("- '[n_name]'") : null)]") - return - -/obj/item/folder/attack_self(mob/user as mob) - var/dat = "[name]" - for(var/obj/item/paper/P in src) - dat += "Remove Rename - [P.name]
              " - for(var/obj/item/photo/Ph in src) - dat += "Remove Rename - [Ph.name]
              " - for(var/obj/item/paper_bundle/Pb in src) - dat += "Remove Rename - [Pb.name]
              " - show_browser(user, dat, "window=folder") - onclose(user, "folder") - add_fingerprint(usr) - return - -/obj/item/folder/Topic(href, href_list) - ..() - if((usr.stat || usr.restrained())) - return - - if(src.loc == usr) - - if(href_list["remove"]) - var/obj/item/P = locate(href_list["remove"]) - if(P && (P.loc == src) && istype(P)) - usr.put_in_hands(P) - - else if(href_list["read"]) - var/obj/item/paper/P = locate(href_list["read"]) - if(P && (P.loc == src) && istype(P)) - if(!(istype(usr, /mob/living/carbon/human) || isghost(usr) || istype(usr, /mob/living/silicon))) - show_browser(usr, "[P.name][stars(P.show_info(usr))][P.stamps]", "window=[P.name]") - onclose(usr, "[P.name]") - else - show_browser(usr, "[P.name][P.show_info(usr)][P.stamps]", "window=[P.name]") - onclose(usr, "[P.name]") - else if(href_list["look"]) - var/obj/item/photo/P = locate(href_list["look"]) - if(P && (P.loc == src) && istype(P)) - P.show(usr) - else if(href_list["browse"]) - var/obj/item/paper_bundle/P = locate(href_list["browse"]) - if(P && (P.loc == src) && istype(P)) - P.attack_self(usr) - onclose(usr, "[P.name]") - else if(href_list["rename"]) - var/obj/item/O = locate(href_list["rename"]) - - if(O && (O.loc == src)) - if(istype(O, /obj/item/paper)) - var/obj/item/paper/to_rename = O - to_rename.rename() - - else if(istype(O, /obj/item/photo)) - var/obj/item/photo/to_rename = O - to_rename.rename() - - else if(istype(O, /obj/item/paper_bundle)) - var/obj/item/paper_bundle/to_rename = O - to_rename.rename() - - //Update everything - attack_self(usr) - update_icon() - return - -/obj/item/folder/envelope - name = "envelope" - desc = "A thick envelope. You can't see what's inside." - icon_state = "envelope_sealed" - var/sealed = 1 - -/obj/item/folder/envelope/on_update_icon() - if(sealed) - icon_state = "envelope_sealed" - else - icon_state = "envelope[contents.len > 0]" - -/obj/item/folder/envelope/examine(mob/user) - . = ..() - to_chat(user, "The seal is [sealed ? "intact" : "broken"].") - -/obj/item/folder/envelope/proc/sealcheck(user) - var/ripperoni = alert("Are you sure you want to break the seal on \the [src]?", "Confirmation","Yes", "No") - if(ripperoni == "Yes") - visible_message("[user] breaks the seal on \the [src], and opens it.") - sealed = 0 - update_icon() - return 1 - -/obj/item/folder/envelope/attack_self(mob/user as mob) - if(sealed) - sealcheck(user) - return - else - ..() - -/obj/item/folder/envelope/attackby(obj/item/W as obj, mob/user as mob) - if(sealed) - sealcheck(user) - return - else - ..() diff --git a/code/modules/paperwork/handlabeler.dm b/code/modules/paperwork/handlabeler.dm deleted file mode 100644 index c0f2784f4fdba..0000000000000 --- a/code/modules/paperwork/handlabeler.dm +++ /dev/null @@ -1,66 +0,0 @@ -/obj/item/hand_labeler - name = "hand labeler" - icon = 'icons/obj/bureaucracy.dmi' - icon_state = "labeler0" - item_state = "flight" - var/label = null - var/labels_left = 30 - var/mode = 0 //off or on. - matter = list(MATERIAL_PLASTIC = 100) - -/obj/item/hand_labeler/attack() - return - -/obj/item/hand_labeler/afterattack(atom/A, mob/user as mob, proximity) - if(!proximity) - return - if(!mode) //if it's off, give up. - return - if(A == loc) // if placing the labeller into something (e.g. backpack) - return // don't set a label - - if(!labels_left) - to_chat(user, "No labels left.") - return - if(!label || !length(label)) - to_chat(user, "No label text set.") - return - if(has_extension(A, /datum/extension/labels)) - var/datum/extension/labels/L = get_extension(A, /datum/extension/labels) - if(!L.CanAttachLabel(user, label)) - return - A.attach_label(user, src, label) - -/atom/proc/attach_label(var/user, var/atom/labeler, var/label_text) - to_chat(user, "The label refuses to stick to [name].") - -/mob/observer/attach_label(var/user, var/atom/labeler, var/label_text) - to_chat(user, "\The [labeler] passes through \the [src].") - -/obj/machinery/portable_atmospherics/hydroponics/attach_label(var/user) - if(!mechanical) - to_chat(user, "How are you going to label that?") - return - ..() - update_icon() - -/obj/attach_label(var/user, var/atom/labeler, var/label_text) - if(!simulated) - return - var/datum/extension/labels/L = get_or_create_extension(src, /datum/extension/labels) - L.AttachLabel(user, label_text) - -/obj/item/hand_labeler/attack_self(mob/user as mob) - mode = !mode - icon_state = "labeler[mode]" - if(mode) - to_chat(user, "You turn on \the [src].") - //Now let them chose the text. - var/str = sanitizeSafe(input(user,"Label text?","Set label",""), MAX_LNAME_LEN) - if(!str || !length(str)) - to_chat(user, "Invalid text.") - return - label = str - to_chat(user, "You set the text to '[str]'.") - else - to_chat(user, "You turn off \the [src].") diff --git a/code/modules/paperwork/paper.dm b/code/modules/paperwork/paper.dm deleted file mode 100644 index cc6ad695583c5..0000000000000 --- a/code/modules/paperwork/paper.dm +++ /dev/null @@ -1,622 +0,0 @@ -// large amount of fields creates a heavy load on the server, see updateinfolinks() and addtofield() -#define MAX_FIELDS 50 - -#define PAPER_CAMERA_DISTANCE 2 -#define PAPER_EYEBALL_DISTANCE 3 - -#define PAPER_META(message) "

              [message]

              " -#define PAPER_META_BAD(message) "

              [message]

              " - -/* - * Paper - * also scraps of paper - */ - -/obj/item/paper - name = "sheet of paper" - gender = NEUTER - icon = 'icons/obj/bureaucracy.dmi' - icon_state = "paper" - item_state = "paper" - randpixel = 8 - throwforce = 0 - w_class = ITEM_SIZE_TINY - throw_range = 1 - throw_speed = 1 - layer = ABOVE_OBJ_LAYER - slot_flags = SLOT_HEAD - body_parts_covered = HEAD - attack_verb = list("bapped") - - var/info //What's actually written on the paper. - var/info_links //A different version of the paper which includes html links at fields and EOF - var/stamps //The (text for the) stamps on the paper. - var/fields //Amount of user created fields - var/free_space = MAX_PAPER_MESSAGE_LEN - var/list/stamped - var/list/ico[0] //Icons and - var/list/offset_x[0] //offsets stored for later - var/list/offset_y[0] //usage by the photocopier - var/spam_flag = 0 - var/last_modified_ckey - var/age = 0 - var/list/metadata - var/readable = TRUE //Paper will not be able to be written on and will not bring up a window upon examine if FALSE - var/is_memo = FALSE //If TRUE, paper will act the same as readable = FALSE, but will also be unrenameable. - var/datum/language/language = LANGUAGE_HUMAN_EURO // Language the paper was written in. Editable by users up until something's actually written - - var/const/deffont = "Verdana" - var/const/signfont = "Brush Script MT" - var/const/crayonfont = "Comic Sans MS" - var/const/fancyfont = "Garamond" - - var/scan_file_type = /datum/computer_file/data/text - -/obj/item/paper/New(loc, text, title, list/md = null, datum/language/L = null) - ..(loc) - set_content(text ? text : info, title) - metadata = md - - if (L) - language = L - var/old_language = language - if (!set_language(language, TRUE)) - log_debug("[src] ([type]) initialized with invalid or missing language `[old_language]` defined.") - set_language(LANGUAGE_HUMAN_EURO, TRUE) - -/obj/item/paper/proc/set_content(text, title, parse_pencode = TRUE) - if(title) - SetName(title) - info = parse_pencode ? parsepencode(text) : text - update_icon() - update_space(info) - updateinfolinks() - -/obj/item/paper/proc/set_language(datum/language/new_language, force = FALSE) - if (!new_language || (info && !force)) - return FALSE - - if (!istype(new_language)) - new_language = global.all_languages[new_language] - if (!istype(new_language)) - return FALSE - - language = new_language - return TRUE - -/obj/item/paper/on_update_icon() - if(icon_state == "paper_talisman" || is_memo) - return - else if(info) - icon_state = "paper_words" - else - icon_state = "paper" - -/obj/item/paper/proc/update_space(var/new_text) - if(new_text) - free_space -= length(strip_html_properly(new_text)) - -/obj/item/paper/examine(mob/user, distance) - . = ..() - if(!is_memo && name != "sheet of paper") - to_chat(user, "It's titled '[name]'.") - if(distance <= 1) - show_content(usr) - else - to_chat(user, "You have to go closer if you want to read it.") - -/obj/item/paper/verb/user_set_language() - set name = "Set writing language" - set category = "Object" - set src in usr - - choose_language(usr) - -/obj/item/paper/proc/choose_language(mob/user, admin_force = FALSE) - if (info) - to_chat(user, SPAN_WARNING("\The [src] already has writing on it and cannot have its language changed.")) - return - if (!admin_force && !user.languages.len) - to_chat(user, SPAN_WARNING("You don't know any languages to choose from.")) - return - - var/list/selectable_languages = list() - if (admin_force) - for (var/key in global.all_languages) - var/datum/language/L = global.all_languages[key] - if (L.has_written_form) - selectable_languages += L - else - for (var/datum/language/L in user.languages) - if (L.has_written_form) - selectable_languages += L - - var/new_language = input(user, "What language do you want to write in?", "Change language", language) as null|anything in selectable_languages - if (!new_language || new_language == language) - to_chat(user, SPAN_NOTICE("You decide to leave the language as [language.name].")) - return - if (!admin_force && !Adjacent(user) && !CanInteract(user, GLOB.deep_inventory_state)) - to_chat(user, SPAN_WARNING("You must remain next to or continue holding \the [src] to do that.")) - return - set_language(new_language) - - -/obj/item/paper/proc/show_content(mob/user, force, editable) - if (!readable || is_memo) - return - if (isclient(user)) - var/client/C = user - user = C.mob - if (!user) - return - var/can_read = force || isghost(user) - if (!can_read) - can_read = isAI(user) - if (can_read) - var/mob/living/silicon/ai/AI = user - can_read = get_dist(src, AI.camera) < PAPER_CAMERA_DISTANCE - else - can_read = ishuman(user) || issilicon(user) - if (can_read) - can_read = get_dist(src, user) < PAPER_EYEBALL_DISTANCE - var/html = "[name]" - if (!can_read) - html += PAPER_META_BAD("The paper is too far away or you can't read.") - html += "
              " - var/has_content = length(info) - var/has_language = force || (language in user.languages) - if (has_content && !has_language && !isghost(user)) - html += PAPER_META_BAD("The paper is written in a language you don't understand.") - html += "
              " + language.scramble(info) - else if (editable) - if (has_content) - html += PAPER_META("The paper is written in [language.name].") - html += "
              " + info_links - else if (force || length(user.languages)) - if (!has_language) - language = user.languages[1] - html += PAPER_META("You are writing in [language.name].") - html += "
              " + info_links - else - html += PAPER_META_BAD("You can't write without knowing a language.") - else if (has_content) - html += PAPER_META("The paper is written in [language.name].") - html += "
              " + info - html += "[stamps]" - show_browser(user, html, "window=[name]") - onclose(user, "[name]") - - -/obj/item/paper/verb/rename() - set name = "Rename paper" - set category = "Object" - set src in usr - - if((MUTATION_CLUMSY in usr.mutations) && prob(50)) - to_chat(usr, "You cut yourself on the paper.") - return - else if(is_memo) - to_chat(usr, SPAN_NOTICE("You decide not to alter the name of \the [src].")) - return - var/n_name = sanitizeSafe(input(usr, "What would you like to label the paper?", "Paper Labelling", null) as text, MAX_NAME_LEN) - - // We check loc one level up, so we can rename in clipboards and such. See also: /obj/item/photo/rename() - if(!n_name || !CanInteract(usr, GLOB.deep_inventory_state)) - return - SetName(n_name) - add_fingerprint(usr) - -/obj/item/paper/attack_self(mob/living/user as mob) - if(user.a_intent == I_HURT) - if(icon_state == "scrap") - user.show_message("\The [src] is already crumpled.") - return - //crumple dat paper - info = stars(info,85) - user.visible_message("\The [user] crumples \the [src] into a ball!") - icon_state = "scrap" - return - user.examinate(src) - -/obj/item/paper/attack_ai(var/mob/living/silicon/ai/user) - show_content(user) - -/obj/item/paper/attack(mob/living/carbon/M as mob, mob/living/carbon/user as mob) - if(user.zone_sel.selecting == BP_EYES) - user.visible_message("You show the paper to [M]. ", \ - " [user] holds up a paper and shows it to [M]. ") - M.examinate(src) - - else if(user.zone_sel.selecting == BP_MOUTH) // lipstick wiping - if(ishuman(M)) - var/mob/living/carbon/human/H = M - if(H == user) - to_chat(user, "You wipe off the lipstick with [src].") - H.makeup_style = null - H.update_body() - else - user.visible_message("[user] begins to wipe [H]'s lipstick off with \the [src].", \ - "You begin to wipe off [H]'s lipstick.") - if(do_after(user, 2 SECONDS, H, (DO_DEFAULT | DO_USER_UNIQUE_ACT | DO_PUBLIC_PROGRESS) & ~DO_BOTH_CAN_TURN)) - user.visible_message("[user] wipes [H]'s lipstick off with \the [src].", \ - "You wipe off [H]'s lipstick.") - H.makeup_style = null - H.update_body() - -/obj/item/paper/proc/addtofield(var/id, var/text, var/links = 0) - var/locid = 0 - var/laststart = 1 - var/textindex = 1 - while(locid < MAX_FIELDS) - var/istart = 0 - if(links) - istart = findtext_char(info_links, "", laststart) - else - istart = findtext_char(info, "", laststart) - - if(istart==0) - return // No field found with matching id - - laststart = istart+1 - locid++ - if(locid == id) - var/iend = 1 - if(links) - iend = findtext_char(info_links, "", istart) - else - iend = findtext_char(info, "", istart) - - textindex = iend - break - - if(links) - var/before = copytext_char(info_links, 1, textindex) - var/after = copytext_char(info_links, textindex) - info_links = before + text + after - else - var/before = copytext_char(info, 1, textindex) - var/after = copytext_char(info, textindex) - info = before + text + after - updateinfolinks() - -/obj/item/paper/proc/updateinfolinks() - info_links = info - var/i = 0 - for(i=1,i<=fields,i++) - addtofield(i, "write", 1) - info_links = info_links + "write" - - -/obj/item/paper/proc/clearpaper() - info = null - stamps = null - free_space = MAX_PAPER_MESSAGE_LEN - stamped = list() - overlays.Cut() - updateinfolinks() - update_icon() - -/obj/item/paper/proc/get_signature(var/obj/item/pen/P, mob/user as mob) - if(P && istype(P, /obj/item/pen)) - return P.get_signature(user) - return (user && user.real_name) ? user.real_name : "Anonymous" - -/obj/item/paper/proc/parsepencode(t, obj/item/pen/P, mob/user, iscrayon, isfancy, isadmin) - if(length(t) == 0) - return "" - - if (isadmin) //TODO: let admins sign things again - t = replacetext_char(t, "\[sign\]", "") - - if (findtext(t, "\[sign\]")) - t = replacetext_char(t, "\[sign\]", "[get_signature(P, user)]") - - if(iscrayon) // If it is a crayon, and he still tries to use these, make them empty! - t = replacetext_char(t, "\[*\]", "") - t = replacetext_char(t, "\[hr\]", "") - t = replacetext_char(t, "\[small\]", "") - t = replacetext_char(t, "\[/small\]", "") - t = replacetext_char(t, "\[list\]", "") - t = replacetext_char(t, "\[/list\]", "") - t = replacetext_char(t, "\[table\]", "") - t = replacetext_char(t, "\[/table\]", "") - t = replacetext_char(t, "\[row\]", "") - t = replacetext_char(t, "\[cell\]", "") - t = replacetext_char(t, "\[logo\]", "") - - if(iscrayon) - t = "[t]" - else if(isfancy) - t = "[t]" - else - t = "[t]" - - t = pencode2html(t) - - //Count the fields - var/laststart = 1 - while(fields < MAX_FIELDS) - var/i = findtext(t, "", laststart) // - if(i==0) - break - laststart = i+1 - fields++ - - return t - - -/obj/item/paper/proc/burnpaper(obj/item/flame/P, mob/user) - var/class = "warning" - - if(P.lit && !user.restrained()) - if(istype(P, /obj/item/flame/lighter/zippo)) - class = "rose" - - user.visible_message("[user] holds \the [P] up to \the [src], it looks like \he's trying to burn it!", \ - "You hold \the [P] up to \the [src], burning it slowly.") - - spawn(20) - if(get_dist(src, user) < 2 && user.get_active_hand() == P && P.lit) - user.visible_message("[user] burns right through \the [src], turning it to ash. It flutters through the air before settling on the floor in a heap.", \ - "You burn right through \the [src], turning it to ash. It flutters through the air before settling on the floor in a heap.") - - new /obj/effect/decal/cleanable/ash(get_turf(src)) - qdel(src) - - else - to_chat(user, "You must hold \the [P] steady to burn \the [src].") - - -/obj/item/paper/Topic(href, href_list) - ..() - if(!usr || (usr.stat || usr.restrained())) - return - - if (href_list["change_language"]) - choose_language(usr) - show_content(usr, editable = TRUE) - return - - if(href_list["write"]) - var/id = href_list["write"] - //var/t = strip_html_simple(input(usr, "What text do you wish to add to " + (id=="end" ? "the end of the paper" : "field "+id) + "?", "[name]", null),8192) as message - - if(free_space <= 0) - to_chat(usr, "There isn't enough space left on \the [src] to write anything.") - return - - var/obj/item/I = usr.get_active_hand() // Check to see if he still got that darn pen, also check what type of pen - var/iscrayon = 0 - var/isfancy = 0 - if(!istype(I, /obj/item/pen)) - if(usr.back && istype(usr.back,/obj/item/rig)) - var/obj/item/rig/r = usr.back - var/obj/item/rig_module/device/pen/m = locate(/obj/item/rig_module/device/pen) in r.installed_modules - if(!r.offline && m) - I = m.device - else - return - else - return - - var/obj/item/pen/P = I - if(!P.active) - P.toggle() - - if(P.iscrayon) - iscrayon = TRUE - - if(P.isfancy) - isfancy = TRUE - - var/t = sanitize(input("Enter what you want to write:", "Write", null, null) as message, free_space, extra = 0, trim = 0) - - if(!t) - return - - // if paper is not in usr, then it must be near them, or in a clipboard or folder, which must be in or near usr - if(src.loc != usr && !src.Adjacent(usr) && !((istype(src.loc, /obj/item/material/clipboard) || istype(src.loc, /obj/item/folder)) && (src.loc.loc == usr || src.loc.Adjacent(usr)) ) ) - return - - var/last_fields_value = fields - - t = parsepencode(t, I, usr, iscrayon, isfancy) // Encode everything from pencode to html - - - if(fields > MAX_FIELDS) - to_chat(usr, "Too many fields. Sorry, you can't do this.") - fields = last_fields_value - return - - if(id!="end") - addtofield(text2num(id), t) // He wants to edit a field, let him. - else - info += t // Oh, he wants to edit to the end of the file, let him. - updateinfolinks() - - last_modified_ckey = usr.ckey - - update_space(t) - - show_content(usr, editable = TRUE) - - playsound(src, pick('sound/effects/pen1.ogg','sound/effects/pen2.ogg'), 10) - update_icon() - - -/obj/item/paper/attackby(obj/item/P as obj, mob/user as mob) - ..() - var/clown = 0 - if(user.mind && (user.mind.assigned_role == "Clown")) - clown = 1 - - if(istype(P, /obj/item/tape_roll)) - var/obj/item/tape_roll/tape = P - tape.stick(src, user) - return - - if(istype(P, /obj/item/paper) || istype(P, /obj/item/photo)) - if(!can_bundle()) - return - var/obj/item/paper/other = P - if(istype(other) && !other.can_bundle()) - return - if (istype(P, /obj/item/paper/carbon)) - var/obj/item/paper/carbon/C = P - if (!C.iscopy && !C.copied) - to_chat(user, "Take off the carbon copy first.") - add_fingerprint(user) - return - var/obj/item/paper_bundle/B = new(src.loc) - if (name != "paper") - B.SetName(name) - else if (P.name != "paper" && P.name != "photo") - B.SetName(P.name) - - if(!user.unEquip(P, B) || !user.unEquip(src, B)) - return - user.put_in_hands(B) - - to_chat(user, "You clip the [P.name] to [(src.name == "paper") ? "the paper" : src.name].") - - B.pages.Add(src) - B.pages.Add(P) - B.update_icon() - - else if(istype(P, /obj/item/pen)) - if(icon_state == "scrap") - to_chat(usr, "\The [src] is too crumpled to write on.") - return - - var/obj/item/pen/robopen/RP = P - if ( istype(RP) && RP.mode == 2 ) - RP.RenamePaper(user,src) - else - show_content(user, editable = TRUE) - return - - else if(istype(P, /obj/item/stamp) || istype(P, /obj/item/clothing/ring/seal)) - if((!in_range(src, usr) && loc != user && !( istype(loc, /obj/item/material/clipboard) ) && loc.loc != user && user.get_active_hand() != P)) - return - - stamps += (stamps=="" ? "
              " : "
              ") + "This paper has been stamped with the [P.name]." - - var/image/stampoverlay = image('icons/obj/bureaucracy.dmi') - var/x - var/y - if(istype(P, /obj/item/stamp/captain) || istype(P, /obj/item/stamp/boss)) - x = rand(-2, 0) - y = rand(-1, 2) - else - x = rand(-2, 2) - y = rand(-3, 2) - offset_x += x - offset_y += y - stampoverlay.pixel_x = x - stampoverlay.pixel_y = y - - if(istype(P, /obj/item/stamp/clown)) - if(!clown) - to_chat(user, "You are totally unable to use the stamp. HONK!") - return - - if(!ico) - ico = new - ico += "paper_[P.icon_state]" - stampoverlay.icon_state = "paper_[P.icon_state]" - - if(!stamped) - stamped = new - stamped += P.type - overlays += stampoverlay - - playsound(src, 'sound/effects/stamp.ogg', 50, 1) - to_chat(user, "You stamp the paper with your [P.name].") - - else if(istype(P, /obj/item/flame)) - burnpaper(P, user) - - else if(istype(P, /obj/item/paper_bundle)) - if(!can_bundle()) - return - var/obj/item/paper_bundle/attacking_bundle = P - attacking_bundle.insert_sheet_at(user, (attacking_bundle.pages.len)+1, src) - attacking_bundle.update_icon() - - add_fingerprint(user) - -/obj/item/paper/proc/can_bundle() - return TRUE - -/obj/item/paper/proc/show_info(var/mob/user) - return info - - -//For supply. -/obj/item/paper/manifest - name = "supply manifest" - var/is_copy = 1 -/* - * Premade paper - */ -/obj/item/paper/spacer - language = LANGUAGE_SPACER - -/obj/item/paper/Court - name = "Judgement" - info = "For crimes as specified, the offender is sentenced to:
              \n
              \n" - -/obj/item/paper/crumpled - name = "paper scrap" - icon_state = "scrap" - -/obj/item/paper/crumpled/on_update_icon() - return - -/obj/item/paper/crumpled/bloody - icon_state = "scrap_bloodied" - -/obj/item/paper/exodus_armory - name = "armory inventory" - info = "
              \[logo]
              NSS Exodus

              Armoury Inventory - Revision

              Armoury
              \[*]Deployable barriers: 4\[*]Biohazard suit(s): 1\[*]Biohazard hood(s): 1\[*]Face Mask(s): 1\[*]Extended-capacity emergency oxygen tank(s): 1\[*]Bomb suit(s): 1\[*]Bomb hood(s): 1\[*]Security officer's jumpsuit(s): 1\[*]Brown shoes: 1\[*]Handcuff(s): 14\[*]R.O.B.U.S.T. cartridges: 7\[*]Flash(s): 4\[*]Can(s) of pepperspray: 4\[*]Gas mask(s): 6
              Secure Armoury
              \[*]LAEP90 Perun energy guns: 4\[*]Stun Revolver(s): 1\[*]Electrolaser(s): 4\[*]Stun baton(s): 4\[*]Airlock Brace: 3\[*]Maintenance Jack: 1\[*]Stab Vest(s): 3\[*]Riot helmet(s): 3\[*]Riot shield(s): 3\[*]Corporate security heavy armoured vest(s): 4\[*]NanoTrasen helmet(s): 4\[*]Portable flasher(s): 3\[*]Tracking implant(s): 4\[*]Chemical implant(s): 5\[*]Implanter(s): 2\[*]Implant pad(s): 2\[*]Locator(s): 1
              Tactical Equipment
              \[*]Implanter: 1\[*]Death Alarm implant(s): 7\[*]Security radio headset(s): 4\[*]Ablative vest(s): 2\[*]Ablative helmet(s): 2\[*]Ballistic vest(s): 2\[*]Ballistic helmet(s): 2\[*]Tear Gas Grenade(s): 7\[*]Flashbang(s): 7\[*]Beanbag Shell(s): 7\[*]Stun Shell(s): 7\[*]Illumination Shell(s): 7\[*]W-T Remmington 29x shotgun(s): 2\[*]NT Mk60 EW Halicon ion rifle(s): 2\[*]Hephaestus Industries G40E laser carbine(s): 4\[*]Flare(s): 4
              Warden (print):Signature:
              " - -/obj/item/paper/exodus_cmo - name = "outgoing CMO's notes" - info = "
              To the incoming CMO of Exodus:


              I wish you and your crew well. Do take note:


              The Medical Emergency Red Phone system has proven itself well. Take care to keep the phones in their designated places as they have been optimised for broadcast. The two handheld green radios (I have left one in this office, and one near the Emergency Entrance) are free to be used. The system has proven effective at alerting Medbay of important details, especially during power outages.

              I think I may have left the toilet cubicle doors shut. It might be a good idea to open them so the staff and patients know they are not engaged.

              The new syringe gun has been stored in secondary storage. I tend to prefer it stored in my office, but 'guidelines' are 'guidelines'.

              Also in secondary storage is the grenade equipment crate. I've just realised I've left it open - you may wish to shut it.

              There were a few problems with their installation, but the Medbay Quarantine shutters should now be working again - they lock down the Emergency and Main entrances to prevent travel in and out. Pray you shan't have to use them.

              The new version of the Medical Diagnostics Manual arrived. I distributed them to the shelf in the staff break room, and one on the table in the corner of this room.

              The exam/triage room has the walking canes in it. I'm not sure why we'd need them - but there you have it.

              Emergency Cryo bags are beside the emergency entrance, along with a kit.

              Spare paper cups for the reception are on the left side of the reception desk.

              I've fed Runtime. She should be fine.


              That should be all. Good luck!
              " - -/obj/item/paper/exodus_bartender - name = "shotgun permit" - info = "This permit signifies that the Bartender is permitted to posess this firearm in the bar, and ONLY the bar. Failure to adhere to this permit will result in confiscation of the weapon and possibly arrest." - -/obj/item/paper/exodus_holodeck - name = "holodeck disclaimer" - info = "Bruises sustained in the holodeck can be healed simply by sleeping." - -/obj/item/paper/workvisa - name = "Sol Work Visa" - info = "
              Work Visa of the Sol Central Government



              Issued on behalf of the Secretary-General.


              This paper hereby permits the carrier to travel unhindered through Sol territories, colonies, and space for the purpose of work and labor." - desc = "A flimsy piece of laminated cardboard issued by the Sol Central Government." - -/obj/item/paper/workvisa/New() - ..() - icon_state = "workvisa" //Has to be here or it'll assume default paper sprites. - -/obj/item/paper/travelvisa - name = "Sol Travel Visa" - info = "
              Travel Visa of the Sol Central Government



              Issued on behalf of the Secretary-General.


              This paper hereby permits the carrier to travel unhindered through Sol territories, colonies, and space for the purpose of pleasure and recreation." - desc = "A flimsy piece of laminated cardboard issued by the Sol Central Government." - -/obj/item/paper/travelvisa/New() - ..() - icon_state = "travelvisa" - -/obj/item/paper/aromatherapy_disclaimer - name = "aromatherapy disclaimer" - info = "The manufacturer and the retailer make no claims of the contained products' effacy.

              Use at your own risk." - - -#undef PAPER_CAMERA_DISTANCE -#undef PAPER_EYEBALL_DISTANCE - -#undef PAPER_META -#undef PAPER_META_BAD diff --git a/code/modules/paperwork/paper_bundle.dm b/code/modules/paperwork/paper_bundle.dm deleted file mode 100644 index 119dea468aba2..0000000000000 --- a/code/modules/paperwork/paper_bundle.dm +++ /dev/null @@ -1,239 +0,0 @@ -/obj/item/paper_bundle - name = "paper bundle" - gender = NEUTER - icon = 'icons/obj/bureaucracy.dmi' - icon_state = "paper" - item_state = "paper" - randpixel = 8 - throwforce = 0 - w_class = ITEM_SIZE_SMALL - throw_range = 2 - throw_speed = 1 - layer = ABOVE_OBJ_LAYER - attack_verb = list("bapped") - var/page = 1 // current page - var/list/pages = list() // Ordered list of pages as they are to be displayed. Can be different order than src.contents. - - -/obj/item/paper_bundle/attackby(obj/item/W as obj, mob/user as mob) - ..() - if(!istype(W)) - return - var/obj/item/paper/paper = W - if(istype(paper) && !paper.can_bundle()) - return //non-paper or bundlable paper only - if (istype(W, /obj/item/paper/carbon)) - var/obj/item/paper/carbon/C = W - if (!C.iscopy && !C.copied) - to_chat(user, "Take off the carbon copy first.") - add_fingerprint(user) - return - // adding sheets - if(istype(W, /obj/item/paper) || istype(W, /obj/item/photo)) - insert_sheet_at(user, pages.len+1, W) - - // burning - else if(istype(W, /obj/item/flame)) - burnpaper(W, user) - - // merging bundles - else if(istype(W, /obj/item/paper_bundle)) - for(var/obj/O in W) - O.forceMove(src) - O.add_fingerprint(user) - pages.Add(O) - - to_chat(user, "You add \the [W.name] to [(src.name == "paper bundle") ? "the paper bundle" : src.name].") - qdel(W) - else - if(istype(W, /obj/item/tape_roll)) - return 0 - if(istype(W, /obj/item/pen)) - show_browser(user, "", "window=[name]") //Closes the dialog - var/obj/P = pages[page] - P.attackby(W, user) - - update_icon() - attack_self(user) //Update the browsed page. - add_fingerprint(user) - return - -/obj/item/paper_bundle/proc/insert_sheet_at(mob/user, var/index, obj/item/sheet) - if (!user.unEquip(sheet, src)) - return - var/bundle_name = "paper bundle" - var/sheet_name = istype(sheet, /obj/item/photo) ? "photo" : "sheet of paper" - bundle_name = (bundle_name == name) ? "the [bundle_name]" : name - sheet_name = (sheet_name == sheet.name) ? "the [sheet_name]" : sheet.name - - to_chat(user, "You add [sheet_name] to [bundle_name].") - pages.Insert(index, sheet) - if(index <= page) - page++ - -/obj/item/paper_bundle/proc/burnpaper(obj/item/flame/P, mob/user) - var/class = "warning" - - if(P.lit && !user.restrained()) - if(istype(P, /obj/item/flame/lighter/zippo)) - class = "rose>" - - user.visible_message("[user] holds \the [P] up to \the [src], it looks like \he's trying to burn it!", \ - "You hold \the [P] up to \the [src], burning it slowly.") - - spawn(20) - if(get_dist(src, user) < 2 && user.get_active_hand() == P && P.lit) - user.visible_message("[user] burns right through \the [src], turning it to ash. It flutters through the air before settling on the floor in a heap.", \ - "You burn right through \the [src], turning it to ash. It flutters through the air before settling on the floor in a heap.") - - if(user.get_inactive_hand() == src) - user.drop_from_inventory(src) - - new /obj/effect/decal/cleanable/ash(src.loc) - qdel(src) - - else - to_chat(user, "You must hold \the [P] steady to burn \the [src].") - -/obj/item/paper_bundle/examine(mob/user, distance) - . = ..() - if(distance <= 1) - src.show_content(user) - else - to_chat(user, "It is too far away.") - -/obj/item/paper_bundle/proc/show_content(mob/user as mob) - var/dat - var/obj/item/W = pages[page] - - // first - if(page == 1) - dat+= "" - dat+= "" - dat+= "

              " - // last - else if(page == pages.len) - dat+= "" - dat+= "" - dat+= "

              " - // middle pages - else - dat+= "" - dat+= "" - dat+= "

              " - - if(istype(pages[page], /obj/item/paper)) - var/obj/item/paper/P = W - dat+= "[P.name][P.show_info(user)][P.stamps]" - show_browser(user, dat, "window=[name]") - else if(istype(pages[page], /obj/item/photo)) - var/obj/item/photo/P = W - dat += "[P.name]" - dat += "
              Written on the back:
              [P.scribble]" : null ]" - send_rsc(user, P.img, "tmp_photo.png") - show_browser(user, JOINTEXT(dat), "window=[name]") - -/obj/item/paper_bundle/attack_self(mob/user as mob) - src.show_content(user) - add_fingerprint(user) - update_icon() - return - -/obj/item/paper_bundle/Topic(href, href_list) - if(..()) - return 1 - if((src in usr.contents) || (istype(src.loc, /obj/item/folder) && (src.loc in usr.contents))) - usr.set_machine(src) - var/obj/item/in_hand = usr.get_active_hand() - if(href_list["next_page"]) - if(in_hand && (istype(in_hand, /obj/item/paper) || istype(in_hand, /obj/item/photo))) - insert_sheet_at(usr, page+1, in_hand) - else if(page != pages.len) - page++ - playsound(src.loc, "pageturn", 50, 1) - if(href_list["prev_page"]) - if(in_hand && (istype(in_hand, /obj/item/paper) || istype(in_hand, /obj/item/photo))) - insert_sheet_at(usr, page, in_hand) - else if(page > 1) - page-- - playsound(src.loc, "pageturn", 50, 1) - if(href_list["remove"]) - var/obj/item/W = pages[page] - usr.put_in_hands(W) - pages.Remove(pages[page]) - - to_chat(usr, "You remove the [W.name] from the bundle.") - - if(pages.len <= 1) - var/obj/item/paper/P = src[1] - usr.drop_from_inventory(src) - usr.put_in_hands(P) - qdel(src) - - return - - if(page > pages.len) - page = pages.len - - update_icon() - - src.attack_self(usr) - updateUsrDialog() - else - to_chat(usr, "You need to hold it in hands!") - -/obj/item/paper_bundle/verb/rename() - set name = "Rename bundle" - set category = "Object" - set src in usr - - var/n_name = sanitizeSafe(input(usr, "What would you like to label the bundle?", "Bundle Labelling", null) as text, MAX_NAME_LEN) - if((loc == usr || loc.loc && loc.loc == usr) && usr.stat == 0) - SetName("[(n_name ? text("[n_name]") : "paper")]") - add_fingerprint(usr) - return - - -/obj/item/paper_bundle/verb/remove_all() - set name = "Loose bundle" - set category = "Object" - set src in usr - - to_chat(usr, "You loosen the bundle.") - for(var/obj/O in src) - O.dropInto(usr.loc) - O.reset_plane_and_layer() - O.add_fingerprint(usr) - qdel(src) - - -/obj/item/paper_bundle/on_update_icon() - var/obj/item/paper/P = pages[1] - icon_state = P.icon_state - overlays = P.overlays - underlays.Cut() - var/i = 0 - var/photo - for(var/obj/O in src) - var/image/img = image('icons/obj/bureaucracy.dmi') - if(istype(O, /obj/item/paper)) - img.icon_state = O.icon_state - img.pixel_x -= min(1*i, 2) - img.pixel_y -= min(1*i, 2) - pixel_x = min(0.5*i, 1) - pixel_y = min( 1*i, 2) - underlays += img - i++ - else if(istype(O, /obj/item/photo)) - var/obj/item/photo/Ph = O - img = Ph.tiny - photo = 1 - overlays += img - if(i>1) - desc = "[i] papers clipped to each other." - else - desc = "A single sheet of paper." - if(photo) - desc += "\nThere is a photo attached to it." - overlays += image('icons/obj/bureaucracy.dmi', "clip") - return diff --git a/code/modules/paperwork/paper_sticky.dm b/code/modules/paperwork/paper_sticky.dm deleted file mode 100644 index 056bab3182fc3..0000000000000 --- a/code/modules/paperwork/paper_sticky.dm +++ /dev/null @@ -1,139 +0,0 @@ -/obj/item/sticky_pad - name = "sticky note pad" - desc = "A pad of densely packed sticky notes." - color = COLOR_YELLOW - icon = 'icons/obj/stickynotes.dmi' - icon_state = "pad_full" - item_state = "paper" - w_class = ITEM_SIZE_SMALL - - var/papers = 50 - var/written_text - var/written_by - var/paper_type = /obj/item/paper/sticky - -/obj/item/sticky_pad/on_update_icon() - if(papers <= 15) - icon_state = "pad_empty" - else if(papers <= 50) - icon_state = "pad_used" - else - icon_state = "pad_full" - if(written_text) - icon_state = "[icon_state]_writing" - -/obj/item/sticky_pad/attackby(var/obj/item/thing, var/mob/user) - if(istype(thing, /obj/item/pen)) - - if(jobban_isbanned(user, "Graffiti")) - to_chat(user, SPAN_WARNING("You are banned from leaving persistent information across rounds.")) - return - - var/writing_space = MAX_MESSAGE_LEN - length(written_text) - if(writing_space <= 0) - to_chat(user, SPAN_WARNING("There is no room left on \the [src].")) - return - var/text = sanitizeSafe(input("What would you like to write?") as text, writing_space) - if(!text || thing.loc != user || (!Adjacent(user) && loc != user) || user.incapacitated()) - return - user.visible_message(SPAN_NOTICE("\The [user] jots a note down on \the [src].")) - written_by = user.ckey - if(written_text) - written_text = "[written_text] [text]" - else - written_text = text - update_icon() - return - ..() - -/obj/item/sticky_pad/examine(mob/user) - . = ..() - to_chat(user, SPAN_NOTICE("It has [papers] sticky note\s left.")) - to_chat(user, SPAN_NOTICE("You can click it on grab intent to pick it up.")) - -/obj/item/sticky_pad/attack_hand(var/mob/user) - if(user.a_intent == I_GRAB) - ..() - else - var/obj/item/paper/paper = new paper_type(get_turf(src)) - paper.set_content(written_text, "sticky note") - paper.last_modified_ckey = written_by - paper.color = color - written_text = null - user.put_in_hands(paper) - to_chat(user, SPAN_NOTICE("You pull \the [paper] off \the [src].")) - papers-- - if(papers <= 0) - qdel(src) - else - update_icon() - -/obj/item/sticky_pad/random/Initialize() - . = ..() - color = pick(COLOR_YELLOW, COLOR_LIME, COLOR_CYAN, COLOR_ORANGE, COLOR_PINK) - -/obj/item/paper/sticky - name = "sticky note" - desc = "Note to self: buy more sticky notes." - icon = 'icons/obj/stickynotes.dmi' - color = COLOR_YELLOW - slot_flags = 0 - -/obj/item/paper/sticky/Initialize() - . = ..() - GLOB.moved_event.register(src, src, /obj/item/paper/sticky/proc/reset_persistence_tracking) - -/obj/item/paper/sticky/proc/reset_persistence_tracking() - SSpersistence.forget_value(src, /datum/persistent/paper/sticky) - pixel_x = 0 - pixel_y = 0 - -/obj/item/paper/sticky/Destroy() - reset_persistence_tracking() - GLOB.moved_event.unregister(src, src) - . = ..() - -/obj/item/paper/sticky/on_update_icon() - if(icon_state != "scrap") - icon_state = info ? "paper_words" : "paper" - -// Copied from duct tape. -/obj/item/paper/sticky/attack_hand() - . = ..() - if(!istype(loc, /turf)) - reset_persistence_tracking() - -/obj/item/paper/sticky/can_bundle() - return FALSE // Would otherwise lead to buggy interaction - -/obj/item/paper/sticky/afterattack(var/A, var/mob/user, var/flag, var/params) - - if(!in_range(user, A) || istype(A, /obj/machinery/door) || istype(A, /obj/item/storage) || icon_state == "scrap") - return - - var/turf/target_turf = get_turf(A) - var/turf/source_turf = get_turf(user) - - var/dir_offset = 0 - if(target_turf != source_turf) - dir_offset = get_dir(source_turf, target_turf) - if(!(dir_offset in GLOB.cardinal)) - to_chat(user, SPAN_WARNING("You cannot reach that from here.")) - return - - if(user.unEquip(src, source_turf)) - SSpersistence.track_value(src, /datum/persistent/paper/sticky) - if(params) - var/list/mouse_control = params2list(params) - if(mouse_control["icon-x"]) - pixel_x = text2num(mouse_control["icon-x"]) - 16 - if(dir_offset & EAST) - pixel_x += 32 - else if(dir_offset & WEST) - pixel_x -= 32 - if(mouse_control["icon-y"]) - pixel_y = text2num(mouse_control["icon-y"]) - 16 - if(dir_offset & NORTH) - pixel_y += 32 - else if(dir_offset & SOUTH) - pixel_y -= 32 diff --git a/code/modules/paperwork/paperbin.dm b/code/modules/paperwork/paperbin.dm deleted file mode 100644 index 6d75fa5de5ebd..0000000000000 --- a/code/modules/paperwork/paperbin.dm +++ /dev/null @@ -1,110 +0,0 @@ -/obj/item/paper_bin - name = "paper bin" - icon = 'icons/obj/bureaucracy.dmi' - icon_state = "paper_bin1" - item_state = "sheet-metal" - randpixel = 0 - throwforce = 1 - w_class = ITEM_SIZE_NORMAL - throw_speed = 3 - throw_range = 7 - layer = BELOW_OBJ_LAYER - var/amount = 30 //How much paper is in the bin. - var/list/papers = new/list() //List of papers put in the bin for reference. - - -/obj/item/paper_bin/MouseDrop(mob/user as mob) - if((user == usr && (!( usr.restrained() ) && (!( usr.stat ) && (usr.contents.Find(src) || in_range(src, usr)))))) - if(!istype(usr, /mob/living/carbon/slime) && !istype(usr, /mob/living/simple_animal)) - if( !usr.get_active_hand() ) //if active hand is empty - var/mob/living/carbon/human/H = user - var/obj/item/organ/external/temp = H.organs_by_name[BP_R_HAND] - - if (H.hand) - temp = H.organs_by_name[BP_L_HAND] - if(temp && !temp.is_usable()) - to_chat(user, "You try to move your [temp.name], but cannot!") - return - - to_chat(user, "You pick up the [src].") - user.put_in_hands(src) - - return - -/obj/item/paper_bin/attack_hand(mob/user as mob) - if(ishuman(user)) - var/mob/living/carbon/human/H = user - var/obj/item/organ/external/temp = H.organs_by_name[BP_R_HAND] - if (H.hand) - temp = H.organs_by_name[BP_L_HAND] - if(temp && !temp.is_usable()) - to_chat(user, "You try to move your [temp.name], but cannot!") - return - var/response = "" - if(!papers.len > 0) - response = alert(user, "Do you take regular paper, or Carbon copy paper?", "Paper type request", "Regular", "Carbon-Copy", "Cancel") - if (response != "Regular" && response != "Carbon-Copy") - add_fingerprint(user) - return - if(amount >= 1) - amount-- - if(amount==0) - update_icon() - - var/obj/item/paper/P - if(papers.len > 0) //If there's any custom paper on the stack, use that instead of creating a new paper. - P = papers[papers.len] - papers.Remove(P) - else - if(response == "Regular") - P = new /obj/item/paper - else if (response == "Carbon-Copy") - P = new /obj/item/paper/carbon - user.put_in_hands(P) - to_chat(user, "You take [P] out of the [src].") - else - to_chat(user, "[src] is empty!") - - add_fingerprint(user) - return - - -/obj/item/paper_bin/attackby(obj/item/i as obj, mob/user as mob) - if(istype(i, /obj/item/paper)) - if(!user.unEquip(i, src)) - return - to_chat(user, "You put [i] in [src].") - papers.Add(i) - update_icon() - amount++ - else if(istype(i, /obj/item/paper_bundle)) - to_chat(user, "You loosen \the [i] and add its papers into \the [src].") - var/was_there_a_photo = 0 - for(var/obj/item/bundleitem in i) //loop through items in bundle - if(istype(bundleitem, /obj/item/paper)) //if item is paper, add into the bin - papers.Add(bundleitem) - update_icon() - amount++ - else if(istype(bundleitem, /obj/item/photo)) //if item is photo, drop it on the ground - was_there_a_photo = 1 - bundleitem.dropInto(user.loc) - bundleitem.reset_plane_and_layer() - qdel(i) - if(was_there_a_photo) - to_chat(user, "The photo cannot go into \the [src].") - - -/obj/item/paper_bin/examine(mob/user, distance) - . = ..() - if(distance <= 1) - if(amount) - to_chat(user, "There " + (amount > 1 ? "are [amount] papers" : "is one paper") + " in the bin.") - else - to_chat(user, "There are no papers in the bin.") - - -/obj/item/paper_bin/on_update_icon() - if(amount < 1) - icon_state = "paper_bin0" - else - icon_state = "paper_bin1" diff --git a/code/modules/paperwork/papershredder.dm b/code/modules/paperwork/papershredder.dm deleted file mode 100644 index 4fd7813515719..0000000000000 --- a/code/modules/paperwork/papershredder.dm +++ /dev/null @@ -1,146 +0,0 @@ -/obj/machinery/papershredder - name = "paper shredder" - desc = "For those documents you don't want seen." - icon = 'icons/obj/bureaucracy.dmi' - icon_state = "papershredder0" - density = TRUE - anchored = TRUE - atom_flags = ATOM_FLAG_NO_TEMP_CHANGE | ATOM_FLAG_CLIMBABLE - obj_flags = OBJ_FLAG_ANCHORABLE - var/max_paper = 10 - var/paperamount = 0 - - var/list/shred_amounts = list( - /obj/item/photo = 1, - /obj/item/shreddedp = 1, - /obj/item/paper = 1, - /obj/item/newspaper = 3, - /obj/item/card/id = 3, - /obj/item/paper_bundle = 3, - /obj/item/sample/print = 1 - ) - -/obj/machinery/papershredder/attackby(var/obj/item/W, var/mob/user) - - if(istype(W, /obj/item/storage)) - empty_bin(user, W) - return - else - var/paper_result - for(var/shred_type in shred_amounts) - if(istype(W, shred_type)) - paper_result = shred_amounts[shred_type] - if(paper_result) - if(paperamount == max_paper) - to_chat(user, "\The [src] is full; please empty it before you continue.") - return - paperamount += paper_result - qdel(W) - playsound(src.loc, 'sound/items/pshred.ogg', 75, 1) - if(paperamount > max_paper) - to_chat(user, "\The [src] was too full, and shredded paper goes everywhere!") - for(var/i=(paperamount-max_paper);i>0;i--) - var/obj/item/shreddedp/SP = get_shredded_paper() - SP.dropInto(loc) - SP.throw_at(get_edge_target_turf(src,pick(GLOB.alldirs)),1,5) - paperamount = max_paper - update_icon() - return - ..() - return - -/obj/machinery/papershredder/verb/empty_contents() - set name = "Empty bin" - set category = "Object" - set src in range(1) - - if(usr.stat || usr.restrained() || usr.weakened || usr.paralysis || usr.lying || usr.stunned) - return - - if(!paperamount) - to_chat(usr, "\The [src] is empty.") - return - - empty_bin(usr) - -/obj/machinery/papershredder/proc/empty_bin(var/mob/living/user, var/obj/item/storage/empty_into) - - if(empty_into) // If the user tries to empty the bin into something - - if(paperamount == 0) // Can't empty what is already empty - to_chat(user, "\The [src] is empty.") - return - - if(empty_into && !istype(empty_into)) // Make sure we can store paper in the thing - to_chat(user, "You cannot put shredded paper into the [empty_into].") - return - - // Move papers one by one as they fit; stop when we are empty or can't fit any more - while(paperamount > 0) - - var/obj/item/shred_temp = get_shredded_paper() - - if(empty_into.can_be_inserted(shred_temp, user, 0)) - empty_into.handle_item_insertion(shred_temp) - else - qdel(shred_temp) - paperamount++ - break - - // Report on how we did - if(paperamount == 0) - to_chat(user, "You empty \the [src] into \the [empty_into].") - if(paperamount > 0) - to_chat(user, "\The [empty_into] will not fit any more shredded paper.") - - else // Just dump the paper out on the floor - while(paperamount > 0) - get_shredded_paper() - - update_icon() - -/obj/machinery/papershredder/proc/get_shredded_paper() - if(paperamount) - paperamount-- - return new /obj/item/shreddedp(get_turf(src)) - -/obj/machinery/papershredder/on_update_icon() - icon_state = "papershredder[max(0,min(5,Floor(paperamount/2)))]" - -/obj/item/shreddedp/attackby(var/obj/item/W as obj, var/mob/user) - if(istype(W, /obj/item/flame/lighter)) - burnpaper(W, user) - else - ..() - -/obj/item/shreddedp/proc/burnpaper(var/obj/item/flame/lighter/P, var/mob/user) - if(user.restrained()) - return - if(!P.lit) - to_chat(user, "\The [P] is not lit.") - return - user.visible_message("\The [user] holds \the [P] up to \the [src]. It looks like \he's trying to burn it!", \ - "You hold \the [P] up to \the [src], burning it slowly.") - if(!do_after(user, 2 SECONDS, src, DO_PUBLIC_UNIQUE)) - return - user.visible_message("\The [user] burns right through \the [src], turning it to ash. It flutters through the air before settling on the floor in a heap.", \ - "You burn right through \the [src], turning it to ash. It flutters through the air before settling on the floor in a heap.") - FireBurn() - -/obj/item/shreddedp/proc/FireBurn() - new /obj/effect/decal/cleanable/ash(get_turf(src)) - qdel(src) - -/obj/item/shreddedp - name = "shredded paper" - icon = 'icons/obj/bureaucracy.dmi' - icon_state = "shredp" - randpixel = 5 - throwforce = 0 - w_class = ITEM_SIZE_TINY - throw_range = 3 - throw_speed = 1 - -/obj/item/shreddedp/New() - ..() - if(prob(65)) color = pick("#bababa","#7f7f7f") diff --git a/code/modules/paperwork/pen/chameleon_pen.dm b/code/modules/paperwork/pen/chameleon_pen.dm deleted file mode 100644 index bd6971b6459cc..0000000000000 --- a/code/modules/paperwork/pen/chameleon_pen.dm +++ /dev/null @@ -1,60 +0,0 @@ -/obj/item/pen/chameleon - var/signature = "" - -/obj/item/pen/chameleon/attack_self(mob/user as mob) - /* - // Limit signatures to official crew members - var/personnel_list[] = list() - for(var/datum/data/record/t in data_core.locked) //Look in data core locked. - personnel_list.Add(t.fields["name"]) - personnel_list.Add("Anonymous") - - var/new_signature = input("Enter new signature pattern.", "New Signature") as null|anything in personnel_list - if(new_signature) - signature = new_signature - */ - signature = sanitize(input("Enter new signature. Leave blank for 'Anonymous'", "New Signature", signature)) - -/obj/item/pen/proc/get_signature(var/mob/user) - return (user && user.real_name) ? user.real_name : "Anonymous" - -/obj/item/pen/chameleon/get_signature(var/mob/user) - return signature ? signature : "Anonymous" - -/obj/item/pen/chameleon/verb/set_colour() - set name = "Change Pen Colour" - set category = "Object" - - var/list/possible_colours = list ("Yellow", "Green", "Pink", "Blue", "Orange", "Cyan", "Red", "Invisible", "Black") - var/selected_type = input("Pick new colour.", "Pen Colour", null, null) as null|anything in possible_colours - - if(selected_type) - switch(selected_type) - if("Yellow") - colour = COLOR_YELLOW - color_description = "yellow ink" - if("Green") - colour = COLOR_LIME - color_description = "green ink" - if("Pink") - colour = COLOR_PINK - color_description = "pink ink" - if("Blue") - colour = COLOR_BLUE - color_description = "blue ink" - if("Orange") - colour = COLOR_ORANGE - color_description = "orange ink" - if("Cyan") - colour = COLOR_CYAN - color_description = "cyan ink" - if("Red") - colour = COLOR_RED - color_description = "red ink" - if("Invisible") - colour = COLOR_WHITE - color_description = "transluscent ink" - else - colour = COLOR_BLACK - color_description = "black ink" - to_chat(usr, "You select the [lowertext(selected_type)] ink container.") \ No newline at end of file diff --git a/code/modules/paperwork/pen/crayon.dm b/code/modules/paperwork/pen/crayon.dm deleted file mode 100644 index 502c239e38b40..0000000000000 --- a/code/modules/paperwork/pen/crayon.dm +++ /dev/null @@ -1,22 +0,0 @@ -/obj/item/pen/crayon - name = "crayon" - desc = "A colourful crayon. Please refrain from eating it or putting it in your nose." - icon = 'icons/obj/crayons.dmi' - icon_state = "crayonred" - w_class = ITEM_SIZE_TINY - attack_verb = list("attacked", "coloured") - colour = "#ff0000" //RGB - color_description = "red crayon" - iscrayon = TRUE - - var/shadeColour = "#220000" //RGB - var/uses = 30 //0 for unlimited uses - var/instant = 0 - var/colourName = "red" //for updateIcon purposes - var/crayon_reagent = /datum/reagent/crayon_dust - -/obj/item/pen/crayon/Initialize() - name = "[colourName] crayon" - . = ..() - create_reagents(10) - reagents.add_reagent(crayon_reagent, 10) diff --git a/code/modules/paperwork/pen/fancy.dm b/code/modules/paperwork/pen/fancy.dm deleted file mode 100644 index 60d6c6d90693d..0000000000000 --- a/code/modules/paperwork/pen/fancy.dm +++ /dev/null @@ -1,13 +0,0 @@ -/obj/item/pen/fancy - name = "fancy pen" - desc = "A high quality traditional fountain pen with an internal reservoir and an extra fine gold-platinum nib. Guaranteed never to leak." - icon_state = "fancy" - throwforce = 1 //pointy - colour = "#1c1713" //dark ashy brownish - matter = list(MATERIAL_STEEL = 15) - isfancy = TRUE - -/obj/item/pen/fancy/quill - name = "dire goose quill" - desc = "A quill fashioned from a feather of the dire goose makes an excellent writing instrument, as well as a valuable trophy." - matter = null \ No newline at end of file diff --git a/code/modules/paperwork/pen/multi_pen.dm b/code/modules/paperwork/pen/multi_pen.dm deleted file mode 100644 index 34ae66ad5e6b9..0000000000000 --- a/code/modules/paperwork/pen/multi_pen.dm +++ /dev/null @@ -1,20 +0,0 @@ -/obj/item/pen/multi - name = "multicoloured pen" - desc = "It's a pen with multiple colors of ink!" - var/selectedColor = 1 - var/colors = list("black","blue","red","green") - var/color_descriptions = list("black ink", "blue ink", "red ink", "green ink") - -/obj/item/pen/multi/attack_self(mob/user) - if(++selectedColor > length(colors)) - selectedColor = 1 - - colour = colors[selectedColor] - color_description = color_descriptions[selectedColor] - - if(colour == "black") - icon_state = "pen" - else - icon_state = "pen_[colour]" - - to_chat(user, "Changed color to '[colour].'") \ No newline at end of file diff --git a/code/modules/paperwork/pen/pen.dm b/code/modules/paperwork/pen/pen.dm deleted file mode 100644 index 554cb71149e1d..0000000000000 --- a/code/modules/paperwork/pen/pen.dm +++ /dev/null @@ -1,62 +0,0 @@ -/obj/item/pen - desc = "It's a normal black ink pen." - name = "pen" - icon = 'icons/obj/bureaucracy.dmi' - icon_state = "pen" - item_state = "pen" - slot_flags = SLOT_BELT | SLOT_EARS - throwforce = 0 - w_class = ITEM_SIZE_TINY - throw_speed = 7 - throw_range = 15 - matter = list(MATERIAL_PLASTIC = 10) - var/colour = "black" //what colour the ink is! - var/color_description = "black ink" - - var/active = TRUE - var/iscrayon = FALSE - var/isfancy = FALSE - -/obj/item/pen/blue - name = "blue pen" - desc = "It's a normal blue ink pen." - icon_state = "pen_blue" - colour = "blue" - color_description = "blue ink" - -/obj/item/pen/red - name = "red pen" - desc = "It's a normal red ink pen." - icon_state = "pen_red" - colour = "red" - color_description = "red ink" - -/obj/item/pen/green - name = "green pen" - desc = "It's a normal green ink pen." - icon_state = "pen_green" - colour = "green" - -/obj/item/pen/invisible - desc = "It's an invisble pen marker." - icon_state = "pen" - colour = "white" - color_description = "transluscent ink" - -/obj/item/pen/attack(atom/A, mob/user, target_zone) - if(ismob(A)) - var/mob/M = A - if(ishuman(A) && user.a_intent == I_HELP && target_zone == BP_HEAD) - var/mob/living/carbon/human/H = M - var/obj/item/organ/external/head/head = H.organs_by_name[BP_HEAD] - if(istype(head)) - head.write_on(user, color_description) - else - to_chat(user, SPAN_WARNING("You stab [M] with \the [src].")) - admin_attack_log(user, M, "Stabbed using \a [src]", "Was stabbed with \a [src]", "used \a [src] to stab") - else if(istype(A, /obj/item/organ/external/head)) - var/obj/item/organ/external/head/head = A - head.write_on(user, color_description) - -/obj/item/pen/proc/toggle() - return \ No newline at end of file diff --git a/code/modules/paperwork/pen/reagent_pen.dm b/code/modules/paperwork/pen/reagent_pen.dm deleted file mode 100644 index 5a65cbed5bb2b..0000000000000 --- a/code/modules/paperwork/pen/reagent_pen.dm +++ /dev/null @@ -1,42 +0,0 @@ -/obj/item/pen/reagent - atom_flags = ATOM_FLAG_OPEN_CONTAINER - origin_tech = list(TECH_MATERIAL = 2, TECH_ESOTERIC = 5) - -/obj/item/pen/reagent/New() - ..() - create_reagents(30) - -/obj/item/pen/reagent/attack(mob/living/M, mob/user, var/target_zone) - - if(!istype(M)) - return - - . = ..() - - var/allow = M.can_inject(user, target_zone) - if(allow) - if (allow == INJECTION_PORT) - if(M != user) - to_chat(user, SPAN_WARNING("You begin hunting for an injection port on \the [M]'s suit!")) - else - to_chat(user, SPAN_NOTICE("You begin hunting for an injection port on your suit.")) - if(!user.do_skilled(INJECTION_PORT_DELAY, SKILL_MEDICAL, M, do_flags = DO_MEDICAL)) - return - if(reagents.total_volume) - if(M.reagents) - var/should_admin_log = reagents.should_admin_log() - var/contained_reagents = reagents.get_reagents() - var/trans = reagents.trans_to_mob(M, 30, CHEM_BLOOD) - if (should_admin_log) - admin_inject_log(user, M, src, contained_reagents, trans) - -/* - * Sleepy Pens - */ -/obj/item/pen/reagent/sleepy - desc = "It's a black ink pen with a sharp point and a carefully engraved \"Waffle Co.\"." - origin_tech = list(TECH_MATERIAL = 2, TECH_ESOTERIC = 5) - -/obj/item/pen/reagent/sleepy/New() - ..() - reagents.add_reagent(/datum/reagent/vecuronium_bromide, 15) diff --git a/code/modules/paperwork/pen/retractable_pen.dm b/code/modules/paperwork/pen/retractable_pen.dm deleted file mode 100644 index 9794cefb562ce..0000000000000 --- a/code/modules/paperwork/pen/retractable_pen.dm +++ /dev/null @@ -1,46 +0,0 @@ -/obj/item/pen/retractable - desc = "It's a retractable pen." - icon_state = "pen" //for map visibility - active = FALSE - var/base_state = "ret_black" - -/obj/item/pen/retractable/blue - icon_state = "pen_blue" - colour = "blue" - color_description = "blue ink" - base_state = "ret_blue" - -/obj/item/pen/retractable/red - icon_state = "pen_red" - colour = "red" - color_description = "red ink" - base_state = "ret_blue" - -/obj/item/pen/retractable/green - icon_state = "pen_green" - colour = "green" - color_description = "green ink" - base_state = "ret_green" - -/obj/item/pen/retractable/Initialize() - . = ..() - desc = "It's a retractable [color_description] pen." - -/obj/item/pen/retractable/on_update_icon() - if(active) - icon_state = "[base_state]-a" - else - icon_state = "[base_state]" - -/obj/item/pen/retractable/attack(atom/A, mob/user, target_zone) - if(!active) - toggle() - ..() - -/obj/item/pen/retractable/attack_self(mob/user) - toggle() - -/obj/item/pen/retractable/toggle() - active = !active - playsound(src, 'sound/items/penclick.ogg', 5, 0, -4) - update_icon() \ No newline at end of file diff --git a/code/modules/paperwork/photocopier.dm b/code/modules/paperwork/photocopier.dm deleted file mode 100644 index 9149584e12957..0000000000000 --- a/code/modules/paperwork/photocopier.dm +++ /dev/null @@ -1,238 +0,0 @@ -/obj/machinery/photocopier - name = "photocopier" - icon = 'icons/obj/bureaucracy.dmi' - icon_state = "photocopier" - var/insert_anim = "photocopier_animation" - anchored = TRUE - density = TRUE - idle_power_usage = 30 - active_power_usage = 200 - power_channel = EQUIP - atom_flags = ATOM_FLAG_NO_TEMP_CHANGE | ATOM_FLAG_CLIMBABLE - obj_flags = OBJ_FLAG_ANCHORABLE - var/obj/item/copyitem = null //what's in the copier! - var/copies = 1 //how many copies to print! - var/toner = 30 //how much toner is left! woooooo~ - var/maxcopies = 10 //how many copies can be copied at once- idea shamelessly stolen from bs12's copier! - -/obj/machinery/photocopier/interface_interact(mob/user) - interact(user) - return TRUE - -/obj/machinery/photocopier/interact(mob/user) - user.set_machine(src) - - var/dat = "Photocopier

              " - if(copyitem) - dat += "Remove Item
              " - if(toner) - dat += "Copy
              " - dat += "Printing: [copies] copies." - dat += "- " - dat += "+

              " - else if(toner) - dat += "Please insert something to copy.

              " - if(istype(user,/mob/living/silicon)) - dat += "Print photo from database

              " - dat += "Current toner level: [toner]" - if(!toner) - dat +="
              Please insert a new toner cartridge!" - show_browser(user, dat, "window=copier") - onclose(user, "copier") - return - -/obj/machinery/photocopier/OnTopic(user, href_list, state) - if(href_list["copy"]) - for(var/i = 0, i < copies, i++) - if(toner <= 0) - break - if (istype(copyitem, /obj/item/paper)) - copy(copyitem, 1) - sleep(15) - else if (istype(copyitem, /obj/item/photo)) - photocopy(copyitem) - sleep(15) - else if (istype(copyitem, /obj/item/paper_bundle)) - var/obj/item/paper_bundle/B = bundlecopy(copyitem) - sleep(15*B.pages.len) - else - to_chat(user, "\The [copyitem] can't be copied by \the [src].") - break - - use_power_oneoff(active_power_usage) - return TOPIC_REFRESH - - if(href_list["remove"]) - OnRemove(user) - return TOPIC_REFRESH - - if(href_list["min"]) - if(copies > 1) - copies-- - return TOPIC_REFRESH - - else if(href_list["add"]) - if(copies < maxcopies) - copies++ - return TOPIC_REFRESH - - if(href_list["aipic"]) - if(!istype(user,/mob/living/silicon)) return - - if(toner >= 5) - var/mob/living/silicon/tempAI = user - var/obj/item/device/camera/siliconcam/camera = tempAI.silicon_camera - - if(!camera) - return - var/obj/item/photo/selection = camera.selectpicture() - if (!selection) - return - - var/obj/item/photo/p = photocopy(selection) - if (p.desc == "") - p.desc += "Copied by [tempAI.name]" - else - p.desc += " - Copied by [tempAI.name]" - toner -= 5 - sleep(15) - return TOPIC_REFRESH - -/obj/machinery/photocopier/proc/OnRemove(mob/user) - if(copyitem) - user.put_in_hands(copyitem) - to_chat(user, "You take \the [copyitem] out of \the [src].") - copyitem = null - -/obj/machinery/photocopier/attackby(obj/item/O as obj, mob/user as mob) - if(istype(O, /obj/item/paper) || istype(O, /obj/item/photo) || istype(O, /obj/item/paper_bundle)) - if(!copyitem) - if(!user.unEquip(O, src)) - return - copyitem = O - to_chat(user, "You insert \the [O] into \the [src].") - flick(insert_anim, src) - updateUsrDialog() - else - to_chat(user, "There is already something in \the [src].") - else if(istype(O, /obj/item/device/toner)) - if(toner <= 10) //allow replacing when low toner is affecting the print darkness - if(!user.unEquip(O, src)) - return - to_chat(user, "You insert the toner cartridge into \the [src].") - var/obj/item/device/toner/T = O - toner += T.toner_amount - qdel(O) - updateUsrDialog() - else - to_chat(user, "This cartridge is not yet ready for replacement! Use up the rest of the toner.") - else ..() - -/obj/machinery/photocopier/ex_act(severity) - switch(severity) - if(EX_ACT_DEVASTATING) - qdel(src) - if(EX_ACT_HEAVY) - if(prob(50)) - qdel(src) - else - if(toner > 0) - new /obj/effect/decal/cleanable/blood/oil(get_turf(src)) - toner = 0 - else - if(prob(50)) - if(toner > 0) - new /obj/effect/decal/cleanable/blood/oil(get_turf(src)) - toner = 0 - return - -/obj/machinery/photocopier/proc/copy(obj/item/paper/copy, need_toner = TRUE, copy_admin = FALSE) - var/copy_type = copy.type - if (istype(copy, /obj/item/paper/admin) && !copy_admin) // Edge case for admin faxes so that they don't show the editing form - copy_type = /obj/item/paper - - var/obj/item/paper/c = new copy_type(loc, copy.text, copy.name, copy.metadata ) - - c.color = COLOR_WHITE - - if(toner > 10) //lots of toner, make it dark - c.info = "" - else //no toner? shitty copies for you! - c.info = "" - var/copied = copy.info - copied = replacetext_char(copied, ""// - c.SetName(copy.name) // -- Doohl - c.fields = copy.fields - c.stamps = copy.stamps - c.stamped = copy.stamped - c.ico = copy.ico - c.offset_x = copy.offset_x - c.offset_y = copy.offset_y - var/list/temp_overlays = copy.overlays //Iterates through stamps - var/image/img //and puts a matching - for (var/j = 1, j <= min(temp_overlays.len, copy.ico.len), j++) //gray overlay onto the copy - if (findtext(copy.ico[j], "cap") || findtext(copy.ico[j], "cent")) - img = image('icons/obj/bureaucracy.dmi', "paper_stamp-circle") - else if (findtext(copy.ico[j], "deny")) - img = image('icons/obj/bureaucracy.dmi', "paper_stamp-x") - else - img = image('icons/obj/bureaucracy.dmi', "paper_stamp-dots") - img.pixel_x = copy.offset_x[j] - img.pixel_y = copy.offset_y[j] - c.overlays += img - c.updateinfolinks() - if(need_toner) - toner-- - if(toner == 0) - visible_message("A red light on \the [src] flashes, indicating that it is out of toner.") - c.update_icon() - return c - -/obj/machinery/photocopier/proc/photocopy(var/obj/item/photo/photocopy, var/need_toner=1) - var/obj/item/photo/p = photocopy.copy() - p.dropInto(loc) - - if(toner > 10) //plenty of toner, go straight greyscale - p.img.MapColors(rgb(77,77,77), rgb(150,150,150), rgb(28,28,28), rgb(0,0,0))//I'm not sure how expensive this is, but given the many limitations of photocopying, it shouldn't be an issue. - p.update_icon() - else //not much toner left, lighten the photo - p.img.MapColors(rgb(77,77,77), rgb(150,150,150), rgb(28,28,28), rgb(100,100,100)) - p.update_icon() - if(need_toner) - toner -= 5 //photos use a lot of ink! - if(toner < 0) - toner = 0 - visible_message("A red light on \the [src] flashes, indicating that it is out of toner.") - - return p - -//If need_toner is 0, the copies will still be lightened when low on toner, however it will not be prevented from printing. TODO: Implement print queues for fax machines and get rid of need_toner -/obj/machinery/photocopier/proc/bundlecopy(var/obj/item/paper_bundle/bundle, var/need_toner=1) - var/obj/item/paper_bundle/p = new /obj/item/paper_bundle (src) - for(var/obj/item/W in bundle.pages) - if(toner <= 0 && need_toner) - toner = 0 - visible_message("A red light on \the [src] flashes, indicating that it is out of toner.") - break - - if(istype(W, /obj/item/paper)) - W = copy(W) - else if(istype(W, /obj/item/photo)) - W = photocopy(W) - W.forceMove(p) - p.pages += W - - p.dropInto(loc) - p.update_icon() - p.icon_state = "paper_words" - p.SetName(bundle.name) - return p - -/obj/item/device/toner - name = "toner cartridge" - icon = 'icons/obj/toner_cartridge.dmi' - icon_state = "tonercartridge" - var/toner_amount = 30 diff --git a/code/modules/paperwork/photography.dm b/code/modules/paperwork/photography.dm deleted file mode 100644 index 1a7da230afff9..0000000000000 --- a/code/modules/paperwork/photography.dm +++ /dev/null @@ -1,292 +0,0 @@ -/* Photography! - * Contains: - * Camera - * Camera Film - * Photos - * Photo Albums - */ - -/******* -* film * -*******/ -/obj/item/device/camera_film - name = "film cartridge" - icon = 'icons/obj/photography.dmi' - desc = "A camera film cartridge. Insert it into a camera to reload it." - icon_state = "film" - item_state = "electropack" - w_class = ITEM_SIZE_TINY - - -/******** -* photo * -********/ -var/global/photo_count = 0 - -/obj/item/photo - name = "photo" - icon = 'icons/obj/photography.dmi' - icon_state = "photo" - item_state = "paper" - randpixel = 10 - w_class = ITEM_SIZE_TINY - var/id - var/icon/img //Big photo image - var/scribble //Scribble on the back. - var/image/tiny - var/photo_size = 3 - -/obj/item/photo/New() - id = photo_count++ - -/obj/item/photo/attack_self(mob/user as mob) - user.examinate(src) - -/obj/item/photo/on_update_icon() - overlays.Cut() - var/scale = 8/(photo_size*32) - var/image/small_img = image(img) - small_img.SetTransform(scale = scale) - small_img.pixel_x = -32*(photo_size-1)/2 - 3 - small_img.pixel_y = -32*(photo_size-1)/2 - overlays |= small_img - - tiny = image(img) - tiny.SetTransform(scale = 0.5 * scale) - tiny.underlays += image('icons/obj/bureaucracy.dmi',"photo") - tiny.pixel_x = -32*(photo_size-1)/2 - 3 - tiny.pixel_y = -32*(photo_size-1)/2 + 3 - -/obj/item/photo/attackby(obj/item/P as obj, mob/user as mob) - if(istype(P, /obj/item/pen)) - var/txt = sanitize(input(user, "What would you like to write on the back?", "Photo Writing", null) as text, 128) - if(loc == user && user.stat == 0) - scribble = txt - ..() - -/obj/item/photo/examine(mob/user, distance) - . = TRUE - if(!img) - return - if(distance <= 1) - show(user) - to_chat(user, desc) - else - to_chat(user, "It is too far away.") - -/obj/item/photo/proc/show(mob/user as mob) - send_rsc(user, img, "tmp_photo_[id].png") - var/output = "[name]" - output += "" - output += "" - output += "[scribble ? "
              Written on the back:
              [scribble]" : ""]" - output += "" - show_browser(user, output, "window=book;size=[64*photo_size]x[scribble ? 400 : 64*photo_size]") - onclose(user, "[name]") - return - -/obj/item/photo/verb/rename() - set name = "Rename photo" - set category = "Object" - set src in usr - - var/n_name = sanitizeSafe(input(usr, "What would you like to label the photo?", "Photo Labelling", null) as text, MAX_NAME_LEN) - //loc.loc check is for making possible renaming photos in clipboards - if(!n_name || !CanInteract(usr, GLOB.deep_inventory_state)) - return - SetName("[(n_name ? text("[n_name]") : "photo")]") - add_fingerprint(usr) - return - - -/************** -* photo album * -**************/ -/obj/item/storage/photo_album - name = "Photo album" - icon = 'icons/obj/photography.dmi' - icon_state = "album" - item_state = "briefcase" - w_class = ITEM_SIZE_NORMAL //same as book - storage_slots = DEFAULT_BOX_STORAGE //yes, that's storage_slots. Photos are w_class 1 so this has as many slots equal to the number of photos you could put in a box - can_hold = list(/obj/item/photo) - -/obj/item/storage/photo_album/MouseDrop(obj/over_object as obj) - - if((istype(usr, /mob/living/carbon/human))) - var/mob/M = usr - if(!( istype(over_object, /obj/screen) )) - return ..() - playsound(loc, "rustle", 50, 1, -5) - if((!( M.restrained() ) && !( M.stat ) && M.back == src)) - switch(over_object.name) - if("r_hand") - if(M.unEquip(src)) - M.put_in_r_hand(src) - if("l_hand") - if(M.unEquip(src)) - M.put_in_l_hand(src) - add_fingerprint(usr) - return - if(over_object == usr && in_range(src, usr) || usr.contents.Find(src)) - if(usr.s_active) - usr.s_active.close(usr) - show_to(usr) - return - return - -/********* -* camera * -*********/ -/obj/item/device/camera - name = "camera" - icon = 'icons/obj/photography.dmi' - desc = "A polaroid camera." - icon_state = "camera" - item_state = "electropack" - w_class = ITEM_SIZE_SMALL - obj_flags = OBJ_FLAG_CONDUCTIBLE - slot_flags = SLOT_BELT - matter = list(MATERIAL_ALUMINIUM = 1000, MATERIAL_PLASTIC = 750) - var/pictures_max = 10 - var/pictures_left = 10 - var/on = 1 - var/icon_on = "camera" - var/icon_off = "camera_off" - var/size = 3 -/obj/item/device/camera/on_update_icon() - var/datum/extension/base_icon_state/bis = get_extension(src, /datum/extension/base_icon_state) - if(on) - icon_state = "[bis.base_icon_state]" - else - icon_state = "[bis.base_icon_state]_off" -/obj/item/device/camera/Initialize() - set_extension(src, /datum/extension/base_icon_state, icon_state) - update_icon() - . = ..() - -/obj/item/device/camera/verb/change_size() - set name = "Set Photo Focus" - set category = "Object" - var/nsize = input("Photo Size","Pick a size of resulting photo.") as null|anything in list(1,3,5,7) - if(nsize) - size = nsize - to_chat(usr, "Camera will now take [size]x[size] photos.") - -/obj/item/device/camera/attack(mob/living/carbon/human/M as mob, mob/user as mob) - return - -/obj/item/device/camera/attack_self(mob/user as mob) - on = !on - update_icon() - to_chat(user, "You switch the camera [on ? "on" : "off"].") - return - -/obj/item/device/camera/attackby(obj/item/I as obj, mob/user as mob) - if(istype(I, /obj/item/device/camera_film)) - if(pictures_left) - to_chat(user, "[src] still has some film in it!") - return - to_chat(user, "You insert [I] into [src].") - qdel(I) - pictures_left = pictures_max - return - ..() - - -/obj/item/device/camera/proc/get_mobs(turf/the_turf as turf) - var/mob_detail - for(var/mob/living/carbon/A in the_turf) - if(A.invisibility) continue - var/holding = null - if(A.l_hand || A.r_hand) - if(A.l_hand) holding = "They are holding \a [A.l_hand]" - if(A.r_hand) - if(holding) - holding += " and \a [A.r_hand]" - else - holding = "They are holding \a [A.r_hand]" - - if(!mob_detail) - mob_detail = "You can see [A] on the photo[(A.health / A.maxHealth) < 0.75 ? " - [A] looks hurt":""].[holding ? " [holding]":"."]. " - else - mob_detail += "You can also see [A] on the photo[(A.health / A.maxHealth)< 0.75 ? " - [A] looks hurt":""].[holding ? " [holding]":"."]." - return mob_detail - -/obj/item/device/camera/afterattack(atom/target as mob|obj|turf|area, mob/user as mob, flag) - if(!on || !pictures_left || ismob(target.loc)) return - captureimage(target, user, flag) - - playsound(loc, pick('sound/items/polaroid1.ogg', 'sound/items/polaroid2.ogg'), 75, 1, -3) - - pictures_left-- - to_chat(user, "[pictures_left] photos left.") - - on = 0 - update_icon() - -/obj/item/device/camera/examine(mob/user) - . = ..() - to_chat(user, "It has [pictures_left] photo\s left.") - -//Proc for capturing check -/mob/living/proc/can_capture_turf(turf/T) - var/viewer = src - if(src.client) //To make shooting through security cameras possible - viewer = src.client.eye - var/can_see = (T in view(viewer)) - return can_see - -/obj/item/device/camera/proc/captureimage(atom/target, mob/living/user, flag) - var/x_c = target.x - (size-1)/2 - var/y_c = target.y + (size-1)/2 - var/z_c = target.z - var/mobs = "" - for(var/i = 1 to size) - for(var/j = 1 to size) - var/turf/T = locate(x_c, y_c, z_c) - if(user.can_capture_turf(T)) - mobs += get_mobs(T) - x_c++ - y_c-- - x_c = x_c - size - - var/obj/item/photo/p = createpicture(target, user, mobs, flag) - printpicture(user, p) - -/obj/item/device/camera/proc/createpicture(atom/target, mob/user, mobs, flag) - var/x_c = target.x - (size-1)/2 - var/y_c = target.y - (size-1)/2 - var/z_c = target.z - var/icon/photoimage = generate_image(x_c, y_c, z_c, size, CAPTURE_MODE_REGULAR, user, 0) - - var/obj/item/photo/p = new() - p.img = photoimage - p.desc = mobs - p.photo_size = size - p.update_icon() - - return p - -/obj/item/device/camera/proc/printpicture(mob/user, obj/item/photo/p) - if(!user.put_in_inactive_hand(p)) - p.dropInto(loc) - -/obj/item/photo/proc/copy(var/copy_id = 0) - var/obj/item/photo/p = new/obj/item/photo() - - p.SetName(name) // Do this first, manually, to make sure listeners are alerted properly. - p.appearance = appearance - - p.tiny = new - p.tiny.appearance = tiny.appearance - p.img = icon(img) - - p.photo_size = photo_size - p.scribble = scribble - p.desc = desc // Proxima - - if(copy_id) - p.id = id - - return p diff --git a/code/modules/paperwork/silicon_photography.dm b/code/modules/paperwork/silicon_photography.dm deleted file mode 100644 index 0129df3b24d16..0000000000000 --- a/code/modules/paperwork/silicon_photography.dm +++ /dev/null @@ -1,156 +0,0 @@ -/************** -* AI-specific * -**************/ -/obj/item/device/camera/siliconcam - var/in_camera_mode = 0 - var/photos_taken = 0 - var/list/obj/item/photo/aipictures = list() - -/obj/item/device/camera/siliconcam/ai_camera //camera AI can take pictures with - name = "AI photo camera" - -/obj/item/device/camera/siliconcam/robot_camera //camera cyborgs can take pictures with - name = "Cyborg photo camera" - -/obj/item/device/camera/siliconcam/drone_camera //currently doesn't offer the verbs, thus cannot be used - name = "Drone photo camera" - -/obj/item/device/camera/siliconcam/proc/injectaialbum(obj/item/photo/p, var/sufix = "") //stores image information to a list similar to that of the datacore - p.forceMove(src) - photos_taken++ - p.SetName("Image [photos_taken][sufix]") - aipictures += p - -/obj/item/device/camera/siliconcam/proc/injectmasteralbum(obj/item/photo/p) //stores image information to a list similar to that of the datacore - var/mob/living/silicon/robot/C = usr - if(C.connected_ai) - C.connected_ai.silicon_camera.injectaialbum(p.copy(1), " (synced from [C.name])") - to_chat(C.connected_ai, "Image uploaded by [C.name]") - to_chat(usr, "Image synced to remote database, and can be printed from any photocopier.")//feedback to the Cyborg player that the picture was taken - else - to_chat(usr, "Image recorded, and can be printed from any photocopier.") - // Always save locally - injectaialbum(p) - -/obj/item/device/camera/siliconcam/proc/selectpicture(obj/item/device/camera/siliconcam/cam) - if(!cam) - cam = getsource() - - var/list/nametemp = list() - var/find - if(cam.aipictures.len == 0) - to_chat(usr, "No images saved") - return - for(var/obj/item/photo/t in cam.aipictures) - nametemp += t.name - find = input("Select image (numbered in order taken)") as null|anything in nametemp - if(!find) - return - - for(var/obj/item/photo/q in cam.aipictures) - if(q.name == find) - return q - -/obj/item/device/camera/siliconcam/proc/viewpictures() - var/obj/item/photo/selection = selectpicture() - - if(!selection) - return - - selection.show(usr) - to_chat(usr, selection.desc) -/obj/item/device/camera/siliconcam/proc/deletepicture(obj/item/device/camera/siliconcam/cam) - var/selection = selectpicture(cam) - - if(!selection) - return - - aipictures -= selection - to_chat(usr, "Local image deleted") -//Capture Proc for AI / Robot -/mob/living/silicon/ai/can_capture_turf(turf/T) - var/mob/living/silicon/ai = src - return ai.TurfAdjacent(T) - -/obj/item/device/camera/siliconcam/proc/toggle_camera_mode() - if(in_camera_mode) - camera_mode_off() - else - camera_mode_on() - -/obj/item/device/camera/siliconcam/proc/camera_mode_off() - src.in_camera_mode = 0 - to_chat(usr, "Camera Mode deactivated") -/obj/item/device/camera/siliconcam/proc/camera_mode_on() - src.in_camera_mode = 1 - to_chat(usr, "Camera Mode activated") -/obj/item/device/camera/siliconcam/ai_camera/printpicture(mob/user, obj/item/photo/p) - injectaialbum(p) - to_chat(usr, "Image recorded") -/obj/item/device/camera/siliconcam/robot_camera/printpicture(mob/user, obj/item/photo/p) - injectmasteralbum(p) - -/obj/item/device/camera/siliconcam/ai_camera/verb/take_image() - set category = "Silicon Commands" - set name = "Take Image" - set desc = "Takes an image" - set src in usr - - toggle_camera_mode() - -/obj/item/device/camera/siliconcam/ai_camera/verb/view_images() - set category = "Silicon Commands" - set name = "View Images" - set desc = "View images" - set src in usr - - viewpictures() - -/obj/item/device/camera/siliconcam/ai_camera/verb/delete_images() - set category = "Silicon Commands" - set name = "Delete Image" - set desc = "Delete image" - set src in usr - - deletepicture() - -/obj/item/device/camera/siliconcam/robot_camera/verb/take_image() - set category ="Silicon Commands" - set name = "Take Image" - set desc = "Takes an image" - set src in usr - - toggle_camera_mode() - -/obj/item/device/camera/siliconcam/robot_camera/verb/view_images() - set category ="Silicon Commands" - set name = "View Images" - set desc = "View images" - set src in usr - - viewpictures() - -/obj/item/device/camera/siliconcam/robot_camera/verb/delete_images() - set category = "Silicon Commands" - set name = "Delete Image" - set desc = "Delete a local image" - set src in usr - - deletepicture(src) - -/obj/item/device/camera/siliconcam/proc/getsource() - if(istype(src.loc, /mob/living/silicon/ai)) - return src - - var/mob/living/silicon/robot/C = usr - var/obj/item/device/camera/siliconcam/Cinfo - if(C.connected_ai) - Cinfo = C.connected_ai.silicon_camera - else - Cinfo = src - return Cinfo - -/mob/living/silicon/proc/GetPicture() - if(!silicon_camera) - return - return silicon_camera.selectpicture() diff --git a/code/modules/paperwork/stamps.dm b/code/modules/paperwork/stamps.dm deleted file mode 100644 index 9349644d416a5..0000000000000 --- a/code/modules/paperwork/stamps.dm +++ /dev/null @@ -1,71 +0,0 @@ -/obj/item/stamp - name = "rubber stamp" - desc = "A rubber stamp for stamping important documents." - icon = 'icons/obj/bureaucracy.dmi' - icon_state = "stamp-deckchief" - item_state = "stamp" - throwforce = 0 - w_class = ITEM_SIZE_TINY - throw_speed = 7 - throw_range = 15 - matter = list(MATERIAL_STEEL = 60) - attack_verb = list("stamped") - -/obj/item/stamp/captain - name = "captain's rubber stamp" - icon_state = "stamp-cap" - -/obj/item/stamp/ce - name = "chief engineer's rubber stamp" - icon_state = "stamp-ce" - -/obj/item/stamp/rd - name = "chief science officer's rubber stamp" - icon_state = "stamp-rd" - -/obj/item/stamp/cmo - name = "chief medical officer's rubber stamp" - icon_state = "stamp-cmo" - -/obj/item/stamp/denied - name = "\improper DENIED rubber stamp" - icon_state = "stamp-deny" - -/obj/item/stamp/clown - name = "clown's rubber stamp" - icon_state = "stamp-clown" - -/obj/item/stamp/boss - name = "boss' rubber stamp" - icon_state = "stamp-boss" - -/obj/item/stamp/boss/Initialize() - name = "[GLOB.using_map.boss_name]'s' rubber stamp" - . = ..() - -/obj/item/stamp/cargo - name = "cargo rubber stamp" - icon_state = "stamp-cargo" - -// Syndicate stamp to forge documents. -/obj/item/stamp/chameleon/attack_self(mob/user as mob) - - var/list/stamp_types = typesof(/obj/item/stamp) - src.type // Get all stamp types except our own - var/list/stamps = list() - - // Generate them into a list - for(var/stamp_type in stamp_types) - var/obj/item/stamp/S = new stamp_type - stamps[capitalize(S.name)] = S - - var/list/show_stamps = list("EXIT" = null) + sortList(stamps) // the list that will be shown to the user to pick from - - var/input_stamp = input(user, "Choose a stamp to disguise as.", "Choose a stamp.") in show_stamps - - if(user && (src in user.contents)) - - var/obj/item/stamp/chosen_stamp = stamps[capitalize(input_stamp)] - - if(chosen_stamp) - SetName(chosen_stamp.name) - icon_state = chosen_stamp.icon_state diff --git a/code/modules/parkour/human.dm b/code/modules/parkour/human.dm deleted file mode 100644 index ea18a2ea2a9f5..0000000000000 --- a/code/modules/parkour/human.dm +++ /dev/null @@ -1,46 +0,0 @@ -/mob/living/carbon/human - var/is_parkourmode = FALSE - var/parkourthrought = FALSE - var/obj/screen/parkour/parkour - -/mob/living/carbon/human/proc/do_parkour(var/turf/target) - var/old_pass_flags = src.pass_flags - src.pass_flags |= PASS_FLAG_TABLE - jump_layer_shift() - animate(src, pixel_z = 16, time = 3, easing = SINE_EASING | EASE_IN) - animate(pixel_z = default_pixel_z, time = 3, easing = SINE_EASING | EASE_OUT) - var/yo = abs(round(target.y - loc.y, 1)) - var/xo = abs(round(target.x - loc.x, 1)) - - src.throw_at(target, min(max(yo, xo), 5), 1, src, FALSE, CALLBACK(src, /mob/living/carbon/human/proc/end_parkour, target, old_pass_flags)) - addtimer(CALLBACK(src, /mob/living/proc/jump_layer_shift_end), 4.5) - -/mob/living/carbon/human/proc/end_parkour(var/atom/target, var/pass_flag) - src.pass_flags = pass_flag - -/obj/screen/parkour - name = "parkour" - desc = "LMB - Turn on/off parkour mode\nALT + LMB - Turn on/off jump throught mode" - icon = 'icons/mob/screen1_White.dmi' - icon_state = "parkour0" - var/image/passthrought - -/obj/screen/parkour/Click(var/location, var/control, var/params) - var/mob/living/carbon/human/user = usr - var/list/p = params2list(params) - - if(p["alt"] && user.skill_check(SKILL_HAULING, SKILL_EXPERT)) - user.parkourthrought = !user.parkourthrought - if(user.parkourthrought) - overlays += passthrought - else - overlays -= passthrought - to_chat(user, SPAN_INFO(user.parkourthrought ? "Now you will jump throw objects." : "Now you will jump on the objects.")) - - else if (!p["shift"] && user.skill_check(SKILL_HAULING, SKILL_ADEPT)) - user.is_parkourmode = !user.is_parkourmode - icon_state = "parkour[user.is_parkourmode]" - to_chat(user, SPAN_INFO(user.is_parkourmode ? "Now you will parkour. Yay!" : "You are no longer parkour now.")) - - else - to_chat(user, SPAN_WARNING("You don't have enough skill!")) diff --git a/code/modules/parkour/obj.dm b/code/modules/parkour/obj.dm deleted file mode 100644 index afa4fbb83efe7..0000000000000 --- a/code/modules/parkour/obj.dm +++ /dev/null @@ -1,69 +0,0 @@ -#define PARKOUR_TABLE_STAMINA_LOSS -4 -#define PARKOUR_LOWWALL_STAMINA_LOSS -5 -#define PARKOUR_RAILING_STAMINA_LOSS -2 - -#define PARKOUR_DOBITFLAGS DO_TARGET_UNIQUE_ACT | DO_USER_CAN_MOVE - -#define PARKOUR_MSGLIST list(SPAN_INFO("USR do amazing flip throw OBJ!"), SPAN_INFO("USR perfectly jump throw OBJ!")) - -/obj/structure/table/Bumped(atom/A) - . = ..() - - if(!ishuman(A)) - return - var/mob/living/carbon/human/H = A - if(H.is_parkourmode && istype(H.move_intent, /decl/move_intent/run)) - var/turf/place = get_turf(src.loc) - if(H.parkourthrought) - while(locate(/obj/structure/table) in place) - var/turf/next_place = get_step(place, H.dir) - if (next_place.density || next_place.turf_is_crowded(H)) - break - place = next_place - - if(!do_after(H, 8, src, PARKOUR_DOBITFLAGS)) - return - H.adjust_stamina(PARKOUR_TABLE_STAMINA_LOSS) - H.do_parkour(place) - visible_message(replacetext(replacetext(pick(PARKOUR_MSGLIST), "OBJ", src), "USR", H)) - add_fingerprint(H) - -/obj/structure/wall_frame/Bumped(atom/A) - . = ..() - - if(!ishuman(A)) - return - var/mob/living/carbon/human/H = A - - for(var/obj/structure/S in loc) - if(istype(S, /obj/structure/window)) - return - else if(istype(S, /obj/structure/grille)) - return - - if(H.is_parkourmode && istype(H.move_intent, /decl/move_intent/run)) - var/turf/place = H.parkourthrought ? get_step(src.loc, H.dir) : get_turf(src.loc) - if(!do_after(H, 12, src, PARKOUR_DOBITFLAGS)) - return - H.adjust_stamina(PARKOUR_LOWWALL_STAMINA_LOSS) - H.do_parkour(place) - visible_message(replacetext(replacetext(pick(PARKOUR_MSGLIST), "OBJ", src), "USR", H)) - add_fingerprint(H) - -/obj/structure/railing/Bumped(atom/A) - . = ..() - - if(!ishuman(A)) - return - var/mob/living/carbon/human/H = A - var/turf/T = get_step(H, H.dir) - if (T.density || T.turf_is_crowded(H)) - return - - if(!(H.is_parkourmode && istype(H.move_intent, /decl/move_intent/run) && do_after(H, 5, src, PARKOUR_DOBITFLAGS))) - return - - H.adjust_stamina(PARKOUR_RAILING_STAMINA_LOSS) - H.do_parkour(T) - visible_message(replacetext(replacetext(pick(PARKOUR_MSGLIST), "OBJ", src), "USR", H)) - add_fingerprint(H) diff --git a/code/modules/persistence/filth.dm b/code/modules/persistence/filth.dm deleted file mode 100644 index 2bce08e433183..0000000000000 --- a/code/modules/persistence/filth.dm +++ /dev/null @@ -1,13 +0,0 @@ -/obj/effect/decal/cleanable/filth - name = "filth" - desc = "Disgusting. Someone from last shift didn't do their job properly." - icon = 'icons/effects/blood.dmi' - icon_state = "mfloor1" - random_icon_states = list("mfloor1", "mfloor2", "mfloor3", "mfloor4", "mfloor5", "mfloor6", "mfloor7") - color = "#464f33" - persistent = TRUE - anchored = TRUE - -/obj/effect/decal/cleanable/filth/Initialize() - . = ..() - alpha = rand(180,220) diff --git a/code/modules/persistence/graffiti.dm b/code/modules/persistence/graffiti.dm deleted file mode 100644 index f6274f91842db..0000000000000 --- a/code/modules/persistence/graffiti.dm +++ /dev/null @@ -1,64 +0,0 @@ -/obj/effect/decal/writing - name = "graffiti" - icon_state = "writing1" - icon = 'icons/effects/writing.dmi' - desc = "It looks like someone has scratched something here." - gender = PLURAL - blend_mode = BLEND_MULTIPLY - color = "#000000" - alpha = 120 - anchored = TRUE - - var/message - var/graffiti_age = 0 - var/author = "unknown" - -/obj/effect/decal/writing/New(var/newloc, var/_age, var/_message, var/_author) - ..(newloc) - if(!isnull(_age)) - graffiti_age = _age - message = _message - if(!isnull(author)) - author = _author - -/obj/effect/decal/writing/Initialize() - var/list/random_icon_states = icon_states(icon) - for(var/obj/effect/decal/writing/W in loc) - random_icon_states.Remove(W.icon_state) - if(random_icon_states.len) - icon_state = pick(random_icon_states) - SSpersistence.track_value(src, /datum/persistent/graffiti) - . = ..() - -/obj/effect/decal/writing/Destroy() - SSpersistence.forget_value(src, /datum/persistent/graffiti) - . = ..() - -/obj/effect/decal/writing/examine(mob/user) - . = ..(user) - to_chat(user, "It reads \"[message]\".") - -/obj/effect/decal/writing/attackby(var/obj/item/thing, var/mob/user) - if(isWelder(thing)) - var/obj/item/weldingtool/welder = thing - if(welder.isOn() && welder.remove_fuel(0,user) && do_after(user, 0.5 SECONDS, src, DO_PUBLIC_UNIQUE) && !QDELETED(src)) - playsound(src.loc, 'sound/items/Welder2.ogg', 50, 1) - user.visible_message("\The [user] clears away some graffiti.") - qdel(src) - else if(thing.sharp) - - if(jobban_isbanned(user, "Graffiti")) - to_chat(user, SPAN_WARNING("You are banned from leaving persistent information across rounds.")) - return - - var/_message = sanitize(input("Enter an additional message to engrave.", "Graffiti") as null|text, trim = TRUE) - if(_message && loc && user && !user.incapacitated() && user.Adjacent(loc) && thing.loc == user) - user.visible_message("\The [user] begins carving something into \the [loc].") - if(do_after(user, max(2 SECONDS, length(_message)), src, DO_PUBLIC_UNIQUE) && loc) - user.visible_message("\The [user] carves some graffiti into \the [loc].") - message = "[message] [_message]" - author = user.ckey - if(lowertext(message) == "elbereth") - to_chat(user, "You feel much safer.") - else - . = ..() diff --git a/code/modules/persistence/noticeboards.dm b/code/modules/persistence/noticeboards.dm deleted file mode 100644 index a33ab56b41d7d..0000000000000 --- a/code/modules/persistence/noticeboards.dm +++ /dev/null @@ -1,222 +0,0 @@ -/obj/structure/noticeboard - name = "notice board" - desc = "A board for pinning important notices upon." - icon = 'icons/obj/stationobjs.dmi' - icon_state = "nboard00" - density = FALSE - anchored = TRUE - layer = ABOVE_WINDOW_LAYER - var/list/notices - var/base_icon_state = "nboard0" - var/const/max_notices = 5 - -/obj/structure/noticeboard/Initialize() - - . = ..() - - // Grab any mapped notices. - notices = list() - for(var/obj/item/paper/note in get_turf(src)) - note.forceMove(src) - LAZYADD(notices, note) - if(LAZYLEN(notices) >= max_notices) - break - - // Automatically place noticeboards that aren't mapped to specific positions. - if(pixel_x == 0 && pixel_y == 0) - - var/turf/here = get_turf(src) - var/placing = 0 - for(var/checkdir in GLOB.cardinal) - var/turf/T = get_step(here, checkdir) - if(T.density) - placing = checkdir - break - for(var/thing in T) - var/atom/A = thing - if(A.simulated && !A.CanPass(src, T)) - placing = checkdir - break - - switch(placing) - if(NORTH) - pixel_x = 0 - pixel_y = 32 - if(SOUTH) - pixel_x = 0 - pixel_y = -32 - if(EAST) - pixel_x = 32 - pixel_y = 0 - if(WEST) - pixel_x = -32 - pixel_y = 0 - - update_icon() - -/obj/structure/noticeboard/proc/add_paper(var/atom/movable/paper, var/skip_icon_update) - if(istype(paper)) - LAZYDISTINCTADD(notices, paper) - paper.forceMove(src) - if(!skip_icon_update) - update_icon() - -/obj/structure/noticeboard/proc/remove_paper(var/atom/movable/paper, var/skip_icon_update) - if(istype(paper) && paper.loc == src) - paper.dropInto(loc) - LAZYREMOVE(notices, paper) - SSpersistence.forget_value(paper, /datum/persistent/paper) - if(!skip_icon_update) - update_icon() - -/obj/structure/noticeboard/proc/dismantle() - for(var/thing in notices) - remove_paper(thing, skip_icon_update = TRUE) - new /obj/item/stack/material(get_turf(src), 10, MATERIAL_WOOD) - qdel(src) - -/obj/structure/noticeboard/Destroy() - QDEL_NULL_LIST(notices) - . = ..() - -/obj/structure/noticeboard/ex_act(var/severity) - dismantle() - -/obj/structure/noticeboard/on_update_icon() - icon_state = "[base_icon_state][LAZYLEN(notices)]" - -/obj/structure/noticeboard/attackby(var/obj/item/thing, var/mob/user) - if(isScrewdriver(thing)) - var/choice = input("Which direction do you wish to place the noticeboard?", "Noticeboard Offset") as null|anything in list("North", "South", "East", "West") - if(choice && Adjacent(user) && thing.loc == user && !user.incapacitated()) - playsound(loc, 'sound/items/Screwdriver.ogg', 50, 1) - switch(choice) - if("North") - pixel_x = 0 - pixel_y = 32 - if("South") - pixel_x = 0 - pixel_y = -32 - if("East") - pixel_x = 32 - pixel_y = 0 - if("West") - pixel_x = -32 - pixel_y = 0 - return - else if(isWrench(thing)) - visible_message(SPAN_WARNING("\The [user] begins dismantling \the [src].")) - playsound(loc, 'sound/items/Ratchet.ogg', 50, 1) - if(do_after(user, 5 SECONDS, src, DO_PUBLIC_UNIQUE)) - visible_message(SPAN_DANGER("\The [user] has dismantled \the [src]!")) - dismantle() - return - else if(istype(thing, /obj/item/paper) || istype(thing, /obj/item/photo)) - if(jobban_isbanned(user, "Graffiti")) - to_chat(user, SPAN_WARNING("You are banned from leaving persistent information across rounds.")) - else - if(LAZYLEN(notices) < max_notices && user.unEquip(thing, src)) - add_fingerprint(user) - add_paper(thing) - to_chat(user, SPAN_NOTICE("You pin \the [thing] to \the [src].")) - SSpersistence.track_value(thing, /datum/persistent/paper) - else - to_chat(user, SPAN_WARNING("You hesitate, certain \the [thing] will not be seen among the many others already attached to \the [src].")) - return - ..() - -/obj/structure/noticeboard/attack_ai(var/mob/user) - examine(user) - -/obj/structure/noticeboard/attack_hand(var/mob/user) - examine(user) - -/obj/structure/noticeboard/examine(mob/user) - . = ..() - var/list/dat = list("") - for(var/thing in notices) - LAZYADD(dat, "") - var/datum/browser/popup = new(user, "noticeboard-\ref[src]", "Noticeboard") - popup.set_content(jointext(dat, null)) - popup.open() - -/obj/structure/noticeboard/OnTopic(var/mob/user, var/list/href_list) - - if(href_list["read"]) - var/obj/item/paper/P = locate(href_list["read"]) - if(P && P.loc == src) - P.show_content(user) - . = TOPIC_HANDLED - - if(href_list["look"]) - var/obj/item/photo/P = locate(href_list["look"]) - if(P && P.loc == src) - P.show(user) - . = TOPIC_HANDLED - - if(href_list["remove"]) - remove_paper(locate(href_list["remove"])) - add_fingerprint(user) - . = TOPIC_REFRESH - - if(href_list["write"]) - var/obj/item/P = locate(href_list["write"]) - if(!P) - return - var/obj/item/pen/pen = user.r_hand - if(!istype(pen)) - pen = user.l_hand - if(istype(pen)) - add_fingerprint(user) - P.attackby(pen, user) - else - to_chat(user, SPAN_WARNING("You need a pen to write on \the [P].")) - . = TOPIC_REFRESH - - if(. == TOPIC_REFRESH) - interact(user) - -/obj/structure/noticeboard/anomaly - icon_state = "nboard05" - -/obj/structure/noticeboard/anomaly/Initialize() - . = ..() - var/obj/item/paper/P = new() - P.SetName("Memo RE: proper analysis procedure") - P.info = "
              We keep test dummies in pens here for a reason, so standard procedure should be to activate newfound alien artifacts and place the two in close proximity. Promising items I might even approve monkey testing on." - P.stamped = list(/obj/item/stamp/rd) - P.overlays = list("paper_stamped_rd") - add_paper(P, skip_icon_update = TRUE) - - P = new() - P.SetName("Memo RE: materials gathering") - P.info = "Corasang,
              the hands-on approach to gathering our samples may very well be slow at times, but it's safer than allowing the blundering miners to roll willy-nilly over our dig sites in their mechs, destroying everything in the process. And don't forget the escavation tools on your way out there!
              - R.W" - P.stamped = list(/obj/item/stamp/rd) - P.overlays = list("paper_stamped_rd") - add_paper(P, skip_icon_update = TRUE) - - P = new() - P.SetName("Memo RE: ethical quandaries") - P.info = "Darion-

              I don't care what his rank is, our business is that of science and knowledge - questions of moral application do not come into this. Sure, so there are those who would employ the energy-wave particles my modified device has managed to abscond for their own personal gain, but I can hardly see the practical benefits of some of these artifacts our benefactors left behind. Ward--" - P.stamped = list(/obj/item/stamp/rd) - P.overlays = list("paper_stamped_rd") - add_paper(P, skip_icon_update = TRUE) - - P = new() - P.SetName("READ ME! Before you people destroy any more samples") - P.info = "how many times do i have to tell you people, these xeno-arch samples are del-i-cate, and should be handled so! careful application of a focussed, concentrated heat or some corrosive liquids should clear away the extraneous carbon matter, while application of an energy beam will most decidedly destroy it entirely - like someone did to the chemical dispenser! W, the one who signs your paychecks" - P.stamped = list(/obj/item/stamp/rd) - P.overlays = list("paper_stamped_rd") - add_paper(P, skip_icon_update = TRUE) - - P = new() - P.SetName("Reminder regarding the anomalous material suits") - P.info = "Do you people think the anomaly suits are cheap to come by? I'm about a hair trigger away from instituting a log book for the damn things. Only wear them if you're going out for a dig, and for god's sake don't go tramping around in them unless you're field testing something, R" - P.stamped = list(/obj/item/stamp/rd) - P.overlays = list("paper_stamped_rd") - add_paper(P) diff --git a/code/modules/persistence/persistence_datum.dm b/code/modules/persistence/persistence_datum.dm deleted file mode 100644 index dd1e2e2b13b95..0000000000000 --- a/code/modules/persistence/persistence_datum.dm +++ /dev/null @@ -1,140 +0,0 @@ -// This is a set of datums instantiated by SSpersistence. -// They basically just handle loading, processing and saving specific forms -// of persistent data like graffiti and round to round filth. - -/datum/persistent - var/name // Unique descriptive name. Used for generating filename. - var/filename // Set at runtime. Full path and .json extension for loading saved data. - var/entries_expire_at // Entries are removed if they are older than this number of rounds. - var/entries_decay_at // Entries begin to decay if they are older than this number of rounds (if applicable). - var/entry_decay_weight = 0.5 // A modifier for the rapidity of decay. - var/has_admin_data // If set, shows up on the admin persistence panel. - -/datum/persistent/New() - SetFilename() - ..() - -/datum/persistent/proc/SetFilename() - if(name) - filename = "data/persistent/[lowertext(GLOB.using_map.name)]-[lowertext(name)].json" - if(!isnull(entries_decay_at) && !isnull(entries_expire_at)) - entries_decay_at = Floor(entries_expire_at * entries_decay_at) - -/datum/persistent/proc/GetValidTurf(var/turf/T, var/list/tokens) - if(T && CheckTurfContents(T, tokens)) - return T - -/datum/persistent/proc/CheckTurfContents(var/turf/T, var/list/tokens) - return TRUE - -/datum/persistent/proc/CheckTokenSanity(var/list/tokens) - return ( \ - !isnull(tokens["x"]) && \ - !isnull(tokens["y"]) && \ - !isnull(tokens["z"]) && \ - !isnull(tokens["age"]) && \ - tokens["age"] <= entries_expire_at \ - ) - -/datum/persistent/proc/CreateEntryInstance(var/turf/creating, var/list/tokens) - return - -/datum/persistent/proc/ProcessAndApplyTokens(var/list/tokens) - - // If it's old enough we start to trim down any textual information and scramble strings. - if(tokens["message"] && !isnull(entries_decay_at) && !isnull(entry_decay_weight)) - var/_n = tokens["age"] - var/_message = tokens["message"] - if(_n >= entries_decay_at) - var/decayed_message = "" - for(var/i = 1 to length(_message)) - var/char = copytext_char(_message, i, i + 1) - if(prob(round(_n * entry_decay_weight))) - if(prob(99)) - decayed_message += pick(".",",","-","'","\\","/","\"",":",";") - else - decayed_message += char - _message = decayed_message - if(length(_message)) - tokens["message"] = _message - else - return - - var/_z = tokens["z"] - if(_z in GLOB.using_map.station_levels) - . = GetValidTurf(locate(tokens["x"], tokens["y"], _z), tokens) - if(.) - CreateEntryInstance(., tokens) - -/datum/persistent/proc/IsValidEntry(var/atom/entry) - if(!istype(entry)) - return FALSE - if(GetEntryAge(entry) >= entries_expire_at) - return FALSE - var/turf/T = get_turf(entry) - if(!T || !(T.z in GLOB.using_map.station_levels) ) - return FALSE - var/area/A = get_area(T) - if(!A || (A.area_flags & AREA_FLAG_IS_NOT_PERSISTENT)) - return FALSE - return TRUE - -/datum/persistent/proc/GetEntryAge(var/atom/entry) - return 0 - -/datum/persistent/proc/CompileEntry(var/atom/entry) - var/turf/T = get_turf(entry) - . = list() - .["x"] = T.x - .["y"] = T.y - .["z"] = T.z - .["age"] = GetEntryAge(entry) - -/datum/persistent/proc/FinalizeTokens(var/list/tokens) - . = tokens - -/datum/persistent/proc/Initialize() - if(fexists(filename)) - var/list/token_sets = json_decode(file2text(filename)) - for(var/tokens in token_sets) - tokens = FinalizeTokens(tokens) - if(CheckTokenSanity(tokens)) - ProcessAndApplyTokens(tokens) - -/datum/persistent/proc/Shutdown() - var/list/entries = list() - for(var/thing in SSpersistence.tracking_values[type]) - if(IsValidEntry(thing)) - entries += list(CompileEntry(thing)) - if(fexists(filename)) - fdel(filename) - to_file(file(filename), json_encode(entries)) - -/datum/persistent/proc/RemoveValue(var/atom/value) - qdel(value) - -/datum/persistent/proc/GetAdminSummary(var/mob/user, var/can_modify) - . = list("") - . += "" - for(var/thing in SSpersistence.tracking_values[type]) - . += "[GetAdminDataStringFor(thing, can_modify, user)]" - . += "" - -/datum/persistent/proc/GetAdminDataStringFor(var/thing, var/can_modify, var/mob/user) - if(can_modify) - . = "" - else - . = "" - -/datum/persistent/Topic(var/href, var/href_list) - . = ..() - if(!.) - if(href_list["remove_entry"]) - var/datum/value = locate(href_list["remove_entry"]) - if(istype(value)) - RemoveValue(value) - . = TRUE - if(.) - var/mob/user = locate(href_list["caller"]) - if(user) - SSpersistence.show_info(user) diff --git a/code/modules/persistence/persistence_datum_filth.dm b/code/modules/persistence/persistence_datum_filth.dm deleted file mode 100644 index 5348f16c212b3..0000000000000 --- a/code/modules/persistence/persistence_datum_filth.dm +++ /dev/null @@ -1,34 +0,0 @@ -/datum/persistent/filth - name = "filth" - entries_expire_at = 5 - -/datum/persistent/filth/IsValidEntry(var/atom/entry) - . = ..() && entry.invisibility == 0 - -/datum/persistent/filth/CheckTokenSanity(var/list/tokens) - return ..() && ispath(tokens["path"]) - -/datum/persistent/filth/CheckTurfContents(var/turf/T, var/list/tokens) - return !(locate(tokens["path"]) in T) - -/datum/persistent/filth/FinalizeTokens(var/list/tokens) - . = ..() - if(.["path"] && !ispath(.["path"])) - .["path"] = text2path(.["path"]) - . = tokens - -/datum/persistent/filth/CreateEntryInstance(var/turf/creating, var/list/tokens) - var/_path = tokens["path"] - new _path(creating, tokens["age"]+1) - -/datum/persistent/filth/GetEntryAge(var/atom/entry) - var/obj/effect/decal/cleanable/filth = entry - return filth.age - -/datum/persistent/filth/proc/GetEntryPath(var/atom/entry) - var/obj/effect/decal/cleanable/filth = entry - return filth.generic_filth ? /obj/effect/decal/cleanable/filth : filth.type - -/datum/persistent/filth/CompileEntry(var/atom/entry) - . = ..() - .["path"] = "[GetEntryPath(entry)]" diff --git a/code/modules/persistence/persistence_datum_filth_trash.dm b/code/modules/persistence/persistence_datum_filth_trash.dm deleted file mode 100644 index 98ed1245cf5f9..0000000000000 --- a/code/modules/persistence/persistence_datum_filth_trash.dm +++ /dev/null @@ -1,17 +0,0 @@ -/datum/persistent/filth/trash - name = "trash" - -/datum/persistent/filth/trash/CheckTurfContents(var/turf/T, var/list/tokens) - var/too_much_trash = 0 - for(var/obj/item/trash/trash in T) - too_much_trash++ - if(too_much_trash >= 5) - return FALSE - return TRUE - -/datum/persistent/filth/trash/GetEntryAge(var/atom/entry) - var/obj/item/trash/trash = entry - return trash.age - -/datum/persistent/filth/trash/GetEntryPath(var/atom/entry) - return entry.type diff --git a/code/modules/persistence/persistence_datum_graffiti.dm b/code/modules/persistence/persistence_datum_graffiti.dm deleted file mode 100644 index bac393d66d0dd..0000000000000 --- a/code/modules/persistence/persistence_datum_graffiti.dm +++ /dev/null @@ -1,43 +0,0 @@ -/datum/persistent/graffiti - name = "graffiti" - entries_expire_at = 50 - has_admin_data = TRUE - -/datum/persistent/graffiti/GetValidTurf(var/turf/T, var/list/tokens) - var/turf/checking_turf = ..() - if(istype(checking_turf) && checking_turf.can_engrave()) - return checking_turf - -/datum/persistent/graffiti/CheckTurfContents(var/turf/T, var/list/tokens) - var/too_much_graffiti = 0 - for(var/obj/effect/decal/writing/W in .) - too_much_graffiti++ - if(too_much_graffiti >= 5) - return FALSE - return TRUE - -/datum/persistent/graffiti/CreateEntryInstance(var/turf/creating, var/list/tokens) - new /obj/effect/decal/writing(creating, tokens["age"]+1, tokens["message"], tokens["author"]) - -/datum/persistent/graffiti/IsValidEntry(var/atom/entry) - . = ..() - if(.) - var/turf/T = entry.loc - . = T.can_engrave() - -/datum/persistent/graffiti/GetEntryAge(var/atom/entry) - var/obj/effect/decal/writing/save_graffiti = entry - return save_graffiti.graffiti_age - -/datum/persistent/graffiti/CompileEntry(var/atom/entry, var/write_file) - . = ..() - var/obj/effect/decal/writing/save_graffiti = entry - .["author"] = save_graffiti.author || "unknown" - .["message"] = save_graffiti.message - -/datum/persistent/graffiti/GetAdminDataStringFor(var/thing, var/can_modify, var/mob/user) - var/obj/effect/decal/writing/save_graffiti = thing - if(can_modify) - . = "" - else - . = "" diff --git a/code/modules/persistence/persistence_datum_paper.dm b/code/modules/persistence/persistence_datum_paper.dm deleted file mode 100644 index 3c98e5d48ca05..0000000000000 --- a/code/modules/persistence/persistence_datum_paper.dm +++ /dev/null @@ -1,47 +0,0 @@ -/datum/persistent/paper - name = "paper" - entries_expire_at = 50 - has_admin_data = TRUE - var/paper_type = /obj/item/paper - var/requires_noticeboard = TRUE - -/datum/persistent/paper/CheckTurfContents(var/turf/T, var/list/tokens) - if(requires_noticeboard && !(locate(/obj/structure/noticeboard) in T)) - new /obj/structure/noticeboard(T) - . = ..() - -/datum/persistent/paper/CreateEntryInstance(var/turf/creating, var/list/tokens) - var/obj/structure/noticeboard/board = locate() in creating - if(requires_noticeboard && LAZYLEN(board.notices) >= board.max_notices) - return - var/obj/item/paper/paper = new paper_type(creating) - paper.set_content(tokens["message"], tokens["title"]) - paper.last_modified_ckey = tokens["author"] - if(requires_noticeboard) - board.add_paper(paper) - SSpersistence.track_value(paper, type) - return paper - -/datum/persistent/paper/GetEntryAge(var/atom/entry) - var/obj/item/paper/paper = entry - return paper.age - -/datum/persistent/paper/CompileEntry(var/atom/entry, var/write_file) - . = ..() - var/obj/item/paper/paper = entry - .["author"] = paper.last_modified_ckey || "unknown" - .["message"] = paper.info || "" - .["title"] = paper.name || "paper" - -/datum/persistent/paper/GetAdminDataStringFor(var/thing, var/can_modify, var/mob/user) - var/obj/item/paper/paper = thing - if(can_modify) - . = "" - else - . = "" - -/datum/persistent/paper/RemoveValue(var/atom/value) - var/obj/structure/noticeboard/board = value.loc - if(istype(board)) - board.remove_paper(value) - qdel(value) diff --git a/code/modules/persistence/persistence_datum_paper_sticky.dm b/code/modules/persistence/persistence_datum_paper_sticky.dm deleted file mode 100644 index 3a45d457a5324..0000000000000 --- a/code/modules/persistence/persistence_datum_paper_sticky.dm +++ /dev/null @@ -1,19 +0,0 @@ -/datum/persistent/paper/sticky - name = "stickynotes" - paper_type = /obj/item/paper/sticky - requires_noticeboard = FALSE - -/datum/persistent/paper/sticky/CreateEntryInstance(var/turf/creating, var/list/tokens) - var/atom/paper = ..() - if(paper) - paper.pixel_x = tokens["offset_x"] - paper.pixel_y = tokens["offset_y"] - paper.color = tokens["color"] - return paper - -/datum/persistent/paper/sticky/CompileEntry(var/atom/entry, var/write_file) - . = ..() - var/obj/item/paper/sticky/paper = entry - .["offset_x"] = paper.pixel_x - .["offset_y"] = paper.pixel_y - .["color"] = paper.color diff --git a/code/modules/pointdefense/pointdefense.dm b/code/modules/pointdefense/pointdefense.dm deleted file mode 100644 index df173c52acddf..0000000000000 --- a/code/modules/pointdefense/pointdefense.dm +++ /dev/null @@ -1,263 +0,0 @@ -//Point defense -/obj/machinery/pointdefense_control - name = "fire assist mainframe" - desc = "A specialized computer designed to synchronize a variety of weapon systems and a vessel's astronav data." - icon = 'icons/obj/artillery.dmi' - icon_state = "control" - var/ui_template = "pointdefense_control.tmpl" - var/initial_id_tag - density = TRUE - anchored = TRUE - base_type = /obj/machinery/pointdefense_control - construct_state = /decl/machine_construction/default/panel_closed - var/list/targets = list() - atom_flags = ATOM_FLAG_NO_TEMP_CHANGE | ATOM_FLAG_CLIMBABLE - machine_name = "fire assist mainframe" - machine_desc = "A control computer used to synchronize point defense batteries." - -/obj/machinery/pointdefense_control/Initialize() - . = ..() - set_extension(src, /datum/extension/local_network_member/multilevel) - if(initial_id_tag) - var/datum/extension/local_network_member/pointdefense = get_extension(src, /datum/extension/local_network_member) - pointdefense.set_tag(null, initial_id_tag) - //No more than 1 controller please. - var/datum/local_network/lan = pointdefense.get_local_network() - if(lan) - var/list/pointdefense_controllers = lan.get_devices(/obj/machinery/pointdefense_control) - if(pointdefense_controllers.len > 1) - lan.remove_device(src) - -/obj/machinery/pointdefense_control/ui_interact(var/mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1) - if(ui_template) - var/list/data = build_ui_data() - ui = SSnano.try_update_ui(user, src, ui_key, ui, data, force_open) - if (!ui) - ui = new(user, src, ui_key, ui_template, name, 400, 600) - ui.set_initial_data(data) - ui.open() - ui.set_auto_update(1) - -/obj/machinery/pointdefense_control/interface_interact(var/mob/user) - ui_interact(user) - return TRUE - -/obj/machinery/pointdefense_control/OnTopic(var/mob/user, var/href_list, var/datum/topic_state/state) - - if(href_list["toggle_active"]) - var/obj/machinery/pointdefense/PD = locate(href_list["toggle_active"]) - if(!istype(PD)) - return TOPIC_NOACTION - - var/datum/extension/local_network_member/pointdefense = get_extension(src, /datum/extension/local_network_member) - var/datum/local_network/lan = pointdefense.get_local_network() - if(!lan || !lan.is_connected(PD)) - return TOPIC_NOACTION - - if(!PD.Activate()) //Startup() whilst the device is active will return null. - PD.Deactivate() - return TOPIC_REFRESH - -/obj/machinery/pointdefense_control/proc/build_ui_data() - var/datum/extension/local_network_member/pointdefense = get_extension(src, /datum/extension/local_network_member) - var/datum/local_network/lan = pointdefense.get_local_network() - var/list/data = list() - data["id"] = lan ? lan.id_tag : "unset" - data["name"] = name - var/list/turrets = list() - if(lan) - var/list/pointdefense_turrets = lan.get_devices(/obj/machinery/pointdefense) - for(var/i = 1 to LAZYLEN(pointdefense_turrets)) - var/list/turret = list() - var/obj/machinery/pointdefense/PD = pointdefense_turrets[i] - turret["id"] = "#[i]" - turret["ref"] = "\ref[PD]" - turret["active"] = PD.active - turret["effective_range"] = PD.active ? "[PD.kill_range] meter\s" : "OFFLINE." - turret["reaction_wheel_delay"] = PD.active ? "[(PD.rotation_speed / (1 SECONDS))] second\s" : "OFFLINE." - turret["recharge_time"] = PD.active ? "[(PD.charge_cooldown / (1 SECONDS))] second\s" : "OFFLINE." - - turrets += list(turret) - - data["turrets"] = turrets - return data - -/obj/machinery/pointdefense_control/attackby(var/obj/item/thing, var/mob/user) - if(isMultitool(thing)) - var/datum/extension/local_network_member/pointdefense = get_extension(src, /datum/extension/local_network_member) - pointdefense.get_new_tag(user) - //Check if there is more than 1 controller - var/datum/local_network/lan = pointdefense.get_local_network() - if(lan) - var/list/pointdefense_controllers = lan.get_devices(/obj/machinery/pointdefense_control) - if(pointdefense_controllers && pointdefense_controllers.len > 1) - lan.remove_device(src) - return - else - return ..() - -/obj/machinery/pointdefense - name = "\improper point defense battery" - icon = 'icons/obj/artillery.dmi' - icon_state = "pointdefense" - desc = "A Kuiper pattern anti-meteor battery. Capable of destroying most threats in a single salvo." - density = TRUE - anchored = TRUE - atom_flags = ATOM_FLAG_NO_TEMP_CHANGE | ATOM_FLAG_CLIMBABLE - idle_power_usage = 0.1 KILOWATTS - construct_state = /decl/machine_construction/default/panel_closed - maximum_component_parts = list(/obj/item/stock_parts = 10) //null - no max. list(type part = number max). - base_type = /obj/machinery/pointdefense - stock_part_presets = list(/decl/stock_part_preset/terminal_setup) - uncreated_component_parts = null - appearance_flags = DEFAULT_APPEARANCE_FLAGS | PIXEL_SCALE - machine_name = "point defense battery" - machine_desc = "A mounted turret that locks onto and destroys incoming meteors. Aim away from vessel." - var/active = TRUE - var/charge_cooldown = 1 SECOND //time between it can fire at different targets - var/last_shot = 0 - var/kill_range = 18 - var/rotation_speed = 0.25 SECONDS //How quickly we turn to face threats - var/engaging = FALSE - var/initial_id_tag - -/obj/machinery/pointdefense/Initialize() - . = ..() - set_extension(src, /datum/extension/local_network_member/multilevel) - if(initial_id_tag) - var/datum/extension/local_network_member/pointdefense = get_extension(src, /datum/extension/local_network_member) - pointdefense.set_tag(null, initial_id_tag) - -/obj/machinery/pointdefense/attackby(var/obj/item/thing, var/mob/user) - if(isMultitool(thing)) - var/datum/extension/local_network_member/pointdefense = get_extension(src, /datum/extension/local_network_member) - pointdefense.get_new_tag(user) - -//Guns cannot shoot through hull or generally dense turfs. -/obj/machinery/pointdefense/proc/space_los(meteor) - for(var/turf/T in getline(src,meteor)) - if(T.density) - return FALSE - return TRUE - -/obj/machinery/pointdefense/proc/Shoot(var/weakref/target) - var/obj/effect/meteor/M = target.resolve() - if(!istype(M)) - return - engaging = TRUE - addtimer(CALLBACK(src, .proc/finish_shot, target), rotation_speed) - var/Angle = round(Get_Angle(src, M)) - animate( - src, - transform = matrix().Update(rotation = Angle), - rotation_speed, - easing = SINE_EASING - ) - - set_dir(transform.get_angle() > 0 ? NORTH : SOUTH) - -/obj/machinery/pointdefense/proc/finish_shot(var/weakref/target) - //Cleanup from list - var/datum/extension/local_network_member/pointdefense = get_extension(src, /datum/extension/local_network_member) - var/datum/local_network/lan = pointdefense.get_local_network() - var/obj/machinery/pointdefense_control/PC = null - if(lan) - var/list/pointdefense_controllers = lan.get_devices(/obj/machinery/pointdefense_control) - PC = pointdefense_controllers[1] - if(istype(PC)) - PC.targets -= target - - - engaging = FALSE - last_shot = world.time - var/obj/effect/meteor/M = target.resolve() - if(!istype(M)) - return - //We throw a laser but it doesnt have to hit for meteor to explode - var/obj/item/projectile/beam/pointdefense/beam = new (get_turf(src)) - playsound(src, 'sound/effects/heavy_cannon_blast.ogg', 75, 1) - use_power_oneoff(idle_power_usage * 10) - beam.launch(M.loc) - M.make_debris() - qdel(M) - -/obj/machinery/pointdefense/Process() - ..() - if(stat & (NOPOWER|BROKEN)) - return - if(!active) - return - var/desiredir = transform.get_angle() > 0 ? NORTH : SOUTH - if(dir != desiredir) - set_dir(desiredir) - if(engaging || ((world.time - last_shot) < charge_cooldown)) - return - - if(GLOB.meteor_list.len == 0) - return - var/datum/extension/local_network_member/pointdefense = get_extension(src, /datum/extension/local_network_member) - var/datum/local_network/lan = pointdefense.get_local_network() - var/obj/machinery/pointdefense_control/PC = null - if(lan) - var/list/pointdefense_controllers = lan.get_devices(/obj/machinery/pointdefense_control) - if(pointdefense_controllers) - PC = LAZYACCESS(pointdefense_controllers, 1) - if(!istype(PC)) - return - - for(var/obj/effect/meteor/M in GLOB.meteor_list) - var/already_targeted = FALSE - for(var/weakref/WR in PC.targets) - var/obj/effect/meteor/m = WR.resolve() - if(m == M) - already_targeted = TRUE - break - if(!istype(m)) - PC.targets -= WR - - if(already_targeted) - continue - - if(!(M.z in GetConnectedZlevels(z))) - continue - if(get_dist(M, src) > kill_range) - continue - - if (!can_see(src, M, kill_range)) - continue - - if(!emagged && space_los(M)) - var/weakref/target = weakref(M) - PC.targets +=target - Shoot(target) - return - -/obj/machinery/pointdefense/RefreshParts() - . = ..() - // Calculates an average rating of components that affect shooting rate - var/shootrate_divisor = total_component_rating_of_type(/obj/item/stock_parts/capacitor) - - charge_cooldown = 2 SECONDS / (shootrate_divisor ? shootrate_divisor : 1) - - //Calculate max shooting range - var/killrange_multiplier = total_component_rating_of_type(/obj/item/stock_parts/capacitor) - killrange_multiplier += 1.5 * total_component_rating_of_type(/obj/item/stock_parts/scanning_module) - - kill_range = 10 + 4 * killrange_multiplier - - var/rotation_divisor = total_component_rating_of_type(/obj/item/stock_parts/manipulator) - rotation_speed = 0.5 SECONDS / (rotation_divisor ? rotation_divisor : 1) - -/obj/machinery/pointdefense/proc/Activate() - if(active) - return FALSE - - active = TRUE - return TRUE - -/obj/machinery/pointdefense/proc/Deactivate() - if(!active) - return FALSE - playsound(src, 'sound/machines/apc_nopower.ogg', 50, 0) - active = FALSE - return TRUE diff --git a/code/modules/power/apc.dm b/code/modules/power/apc.dm deleted file mode 100644 index 5d6e5e5c4fc68..0000000000000 --- a/code/modules/power/apc.dm +++ /dev/null @@ -1,1178 +0,0 @@ - - -// The Area Power Controller (APC) -// Controls and provides power to most electronics in an area -// Only one required per area -// Requires a wire connection to a power network through a terminal -// Generates a terminal based on the direction of the APC on spawn - -// There are three different power channels, lighting, equipment, and enviroment -// Each may have one of the following states - -#define POWERCHAN_OFF 0 // Power channel is off -#define POWERCHAN_OFF_TEMP 1 // Power channel is off until there is power -#define POWERCHAN_OFF_AUTO 2 // Power channel is off until power passes a threshold -#define POWERCHAN_ON 3 // Power channel is on until there is no power -#define POWERCHAN_ON_AUTO 4 // Power channel is on until power drops below a threshold - -// Power channels set to Auto change when power levels rise or drop below a threshold - -#define AUTO_THRESHOLD_LIGHTING 50 -#define AUTO_THRESHOLD_EQUIPMENT 25 -// The ENVIRON channel stays on as long as possible, and doesn't have a threshold - -#define CRITICAL_APC_EMP_PROTECTION 10 // EMP effect duration is divided by this number if the APC has "critical" flag -#define APC_UPDATE_ICON_COOLDOWN 100 // Time between automatically updating the icon (10 seconds) - -// Used to check whether or not to update the icon_state -#define UPDATE_CELL_IN 1 -#define UPDATE_OPENED1 2 -#define UPDATE_OPENED2 4 -#define UPDATE_MAINT 8 -#define UPDATE_BROKE 16 -#define UPDATE_BLUESCREEN 32 -#define UPDATE_WIREEXP 64 -#define UPDATE_ALLGOOD 128 - -// Used to check whether or not to update the overlay -#define APC_UPOVERLAY_CHARGEING0 1 -#define APC_UPOVERLAY_CHARGEING1 2 -#define APC_UPOVERLAY_CHARGEING2 4 -#define APC_UPOVERLAY_LOCKED 8 -#define APC_UPOVERLAY_OPERATING 16 - -// Various APC types -/obj/machinery/power/apc/inactive - lighting = 0 - equipment = 0 - environ = 0 - locked = 0 - coverlocked = 0 - -/obj/machinery/power/apc/critical - is_critical = 1 - -/obj/machinery/power/apc/high - cell_type = /obj/item/cell/high - -/obj/machinery/power/apc/high/inactive - cell_type = /obj/item/cell/high - lighting = 0 - equipment = 0 - environ = 0 - locked = 0 - coverlocked = 0 - -/obj/machinery/power/apc/super - cell_type = /obj/item/cell/super - -/obj/machinery/power/apc/super/critical - is_critical = 1 - -/obj/machinery/power/apc/hyper - cell_type = /obj/item/cell/hyper - -// Main APC code -/obj/machinery/power/apc - name = "area power controller" - desc = "A control terminal for the area electrical systems." - - icon_state = "apc0" - icon = 'icons/obj/apc.dmi' - anchored = TRUE - use_power = POWER_USE_IDLE // Has custom handling here. - power_channel = LOCAL // Do not manipulate this; you don't want to power the APC off itself. - interact_offline = TRUE // Can use UI even if unpowered - uncreated_component_parts = list( - /obj/item/stock_parts/power/terminal, - /obj/item/stock_parts/power/apc, - /obj/item/stock_parts/power/battery - ) - req_access = list(access_engine_equip) - clicksound = "switch" - layer = ABOVE_WINDOW_LAYER - var/needs_powerdown_sound - var/area/area - var/areastring = null - var/cell_type = /obj/item/cell/standard - var/opened = 0 //0=closed, 1=opened, 2=cover removed - var/shorted = 0 - var/lighting = POWERCHAN_ON_AUTO - var/equipment = POWERCHAN_ON_AUTO - var/environ = POWERCHAN_ON_AUTO - var/operating = 1 // Bool for main toggle. - var/charging = 0 // Whether or not it's charging. 0 - not charging but not full, 1 - charging, 2 - full - var/chargemode = 1 // Whether charging is toggled on or off. - var/locked = 1 - var/coverlocked = 1 // Whether you can crowbar off the cover or need to swipe ID first. - var/aidisabled = 0 - var/lastused_light = 0 // Internal stuff for UI and bookkeeping; can read off values but don't modify. - var/lastused_equip = 0 - var/lastused_environ = 0 - var/lastused_charging = 0 // Not an actual channel, and not summed into total. How much battery was recharged, if any, last tick. - var/lastused_total = 0 - var/main_status = 0 // UI var for whether we are getting external power. 0 = no external power at all, 1 = some, but not enough, 2 = getting enough. - var/mob/living/silicon/ai/hacker = null // Malfunction var. If set AI hacked the APC and has full control. - var/wiresexposed = FALSE // whether you can access the wires for hacking or not. - powernet = 0 // set so that APCs aren't found as powernet nodes //Hackish, Horrible, was like this before I changed it :( - var/debug= 0 // Legacy debug toggle, left in for admin use. - var/autoflag= 0 // 0 = off, 1= eqp and lights off, 2 = eqp off, 3 = all on. - var/has_electronics = 0 // 0 - none, 1 - plugged in, 2 - secured by screwdriver - var/beenhit = 0 // used for counting how many times it has been hit, used for Aliens at the moment - var/longtermpower = 10 // Counter to smooth out power state changes; do not modify. - wires = /datum/wires/apc - var/update_state = -1 - var/update_overlay = -1 - var/list/update_overlay_chan // Used to determine if there is a change in channels - var/is_critical = 0 - var/static/status_overlays = 0 - var/failure_timer = 0 // Cooldown thing for apc outage event - var/emp_hardened = 0 - var/static/list/status_overlays_lock - var/static/list/status_overlays_charging - var/static/list/status_overlays_equipment - var/static/list/status_overlays_lighting - var/static/list/status_overlays_environ - var/autoname = 1 - -/obj/machinery/power/apc/updateDialog() - if (stat & (BROKEN|MAINT)) - return - ..() - -/obj/machinery/power/apc/connect_to_network() - //Override because the APC does not directly connect to the network; it goes through a terminal. - //The terminal is what the power computer looks for anyway. - var/obj/machinery/power/terminal/terminal = terminal() - if(terminal) - terminal.connect_to_network() - -/obj/machinery/power/apc/drain_power(var/drain_check, var/surge, var/amount = 0) - - if(drain_check) - return 1 - - // Prevents APCs from being stuck on 0% cell charge while reporting "Fully Charged" status. - charging = 0 - - // If the APC's interface is locked, limit the charge rate to 25%. - if(locked) - amount /= 4 - - return amount - use_power_oneoff(amount, LOCAL) - -/obj/machinery/power/apc/Initialize(mapload, var/ndir, var/populate_parts = TRUE, var/building=0) - // offset 22 pixels in direction of dir - // this allows the APC to be embedded in a wall, yet still inside an area - if (building) - set_dir(ndir) - - if(areastring) - area = get_area_name(areastring) - else - var/area/A = get_area(src) - //if area isn't specified use current - area = A - if(autoname) - SetName("\improper [area.name] APC") - area.apc = src - - . = ..() - - if (building==0) - init_round_start() - else - opened = 1 - operating = 0 - stat |= MAINT - queue_icon_update() - - if(operating) - force_update_channels() - power_change() - -/obj/machinery/power/apc/Destroy() - src.update() - area.apc = null - area.power_light = 0 - area.power_equip = 0 - area.power_environ = 0 - area.power_change() - - // Malf AI, removes the APC from AI's hacked APCs list. - if((hacker) && (hacker.hacked_apcs) && (src in hacker.hacked_apcs)) - hacker.hacked_apcs -= src - - return ..() - -/obj/machinery/power/apc/get_req_access() - if(!locked) - return list() - return ..() - -/obj/machinery/power/apc/proc/energy_fail(var/duration) - if(emp_hardened) - return - failure_timer = max(failure_timer, round(duration)) - if(needs_powerdown_sound) - playsound(src, 'sound/machines/apc_nopower.ogg', 75, 0) - - update() - queue_icon_update() - - -/obj/machinery/power/apc/proc/init_round_start() - has_electronics = 2 //installed and secured - - var/obj/item/stock_parts/power/battery/bat = get_component_of_type(/obj/item/stock_parts/power/battery) - bat.add_cell(src, new cell_type(bat)) - var/obj/item/stock_parts/power/terminal/term = get_component_of_type(/obj/item/stock_parts/power/terminal) - term.make_terminal(src) - - queue_icon_update() - -/obj/machinery/power/apc/proc/terminal() - var/obj/item/stock_parts/power/terminal/term = get_component_of_type(/obj/item/stock_parts/power/terminal) - return term && term.terminal - -/obj/machinery/power/apc/examine(mob/user, distance) - . = ..() - if(distance <= 1) - if(stat & BROKEN) - to_chat(user, "Looks broken.") - return - var/terminal = terminal() - if(opened) - if(has_electronics && terminal) - to_chat(user, "The cover is [opened==2?"removed":"open"] and the power cell is [ get_cell() ? "installed" : "missing"].") - else if (!has_electronics && terminal) - to_chat(user, "There are some wires but no any electronics.") - else if (has_electronics && !terminal) - to_chat(user, "Electronics installed but not wired.") - else /* if (!has_electronics && !terminal) */ - to_chat(user, "There is no electronics nor connected wires.") - - else - if (stat & MAINT) - to_chat(user, "The cover is closed. Something wrong with it: it doesn't work.") - else if (hacker && !hacker.hacked_apcs_hidden) - to_chat(user, "The cover is locked.") - else - to_chat(user, "The cover is closed.") - - -// update the APC icon to show the three base states -// also add overlays for indicator lights -/obj/machinery/power/apc/on_update_icon() - if (!status_overlays) - status_overlays = 1 - status_overlays_lock = new - status_overlays_charging = new - status_overlays_equipment = new - status_overlays_lighting = new - status_overlays_environ = new - - status_overlays_lock.len = 2 - status_overlays_charging.len = 3 - status_overlays_equipment.len = 5 - status_overlays_lighting.len = 5 - status_overlays_environ.len = 5 - - status_overlays_lock[1] = image(icon, "apcox-0") // 0=blue 1=red - status_overlays_lock[2] = image(icon, "apcox-1") - - status_overlays_charging[1] = image(icon, "apco3-0") - status_overlays_charging[2] = image(icon, "apco3-1") - status_overlays_charging[3] = image(icon, "apco3-2") - - var/list/channel_overlays = list(status_overlays_equipment, status_overlays_lighting, status_overlays_environ) - var/channel = 0 - for(var/list/channel_leds in channel_overlays) - channel_leds[POWERCHAN_OFF + 1] = overlay_image(icon,"apco[channel]",COLOR_RED) - channel_leds[POWERCHAN_OFF_TEMP + 1] = overlay_image(icon,"apco[channel]",COLOR_ORANGE) - channel_leds[POWERCHAN_OFF_AUTO + 1] = overlay_image(icon,"apco[channel]",COLOR_ORANGE) - channel_leds[POWERCHAN_ON + 1] = overlay_image(icon,"apco[channel]",COLOR_LIME) - channel_leds[POWERCHAN_ON_AUTO + 1] = overlay_image(icon,"apco[channel]",COLOR_BLUE) - channel++ - - if(update_state < 0) - pixel_x = 0 - pixel_y = 0 - var/turf/T = get_step(get_turf(src), dir) - if(istype(T) && T.density) - if(dir == SOUTH) - pixel_y = -22 - else if(dir == NORTH) - pixel_y = 22 - else if(dir == EAST) - pixel_x = 22 - else if(dir == WEST) - pixel_x = -22 - - var/update = check_updates() //returns 0 if no need to update icons. - // 1 if we need to update the icon_state - // 2 if we need to update the overlays - - if(!update) - return - - if(update & 1) // Updating the icon state - if(update_state & UPDATE_ALLGOOD) - icon_state = "apc0" - else if(update_state & (UPDATE_OPENED1|UPDATE_OPENED2)) - var/basestate = "apc[ get_cell() ? "2" : "1" ]" - if(update_state & UPDATE_OPENED1) - if(update_state & (UPDATE_MAINT|UPDATE_BROKE)) - icon_state = "apcmaint" //disabled APC cannot hold cell - else - icon_state = basestate - else if(update_state & UPDATE_OPENED2) - icon_state = "[basestate]-nocover" - else if(update_state & UPDATE_BROKE) - icon_state = "apc-b" - else if(update_state & UPDATE_BLUESCREEN) - icon_state = "apcemag" - else if(update_state & UPDATE_WIREEXP) - icon_state = "apcewires" - - if(!(update_state & UPDATE_ALLGOOD)) - if(overlays.len) - overlays.Cut() - return - - if(update & 2) - if(overlays.len) - overlays.Cut() - if(!(stat & (BROKEN|MAINT)) && update_state & UPDATE_ALLGOOD) - overlays += status_overlays_lock[locked+1] - overlays += status_overlays_charging[charging+1] - if(operating) - overlays += status_overlays_equipment[equipment+1] - overlays += status_overlays_lighting[lighting+1] - overlays += status_overlays_environ[environ+1] - - if(update & 3) - if(update_state & (UPDATE_OPENED1|UPDATE_OPENED2|UPDATE_BROKE)) - set_light(0) - else if(update_state & UPDATE_BLUESCREEN) - set_light(0.8, 0.1, 1, 2, "#00ecff") - else if(!(stat & (BROKEN|MAINT)) && update_state & UPDATE_ALLGOOD) - var/color - switch(charging) - if(0) - color = "#f86060" - if(1) - color = "#a8b0f8" - if(2) - color = "#82ff4c" - set_light(0.8, 0.1, 1, l_color = color) - else - set_light(0) - -/obj/machinery/power/apc/proc/check_updates() - if(!update_overlay_chan) - update_overlay_chan = new/list() - var/last_update_state = update_state - var/last_update_overlay = update_overlay - var/list/last_update_overlay_chan = update_overlay_chan.Copy() - update_state = 0 - update_overlay = 0 - if(get_cell()) - update_state |= UPDATE_CELL_IN - if(stat & BROKEN) - update_state |= UPDATE_BROKE - if(stat & MAINT) - update_state |= UPDATE_MAINT - if(opened) - if(opened==1) - update_state |= UPDATE_OPENED1 - if(opened==2) - update_state |= UPDATE_OPENED2 - else if(emagged || (hacker && !hacker.hacked_apcs_hidden) || failure_timer) - update_state |= UPDATE_BLUESCREEN - else if(wiresexposed) - update_state |= UPDATE_WIREEXP - if(update_state <= 1) - update_state |= UPDATE_ALLGOOD - - if(operating) - update_overlay |= APC_UPOVERLAY_OPERATING - - if(update_state & UPDATE_ALLGOOD) - if(locked) - update_overlay |= APC_UPOVERLAY_LOCKED - - if(!charging) - update_overlay |= APC_UPOVERLAY_CHARGEING0 - else if(charging == 1) - update_overlay |= APC_UPOVERLAY_CHARGEING1 - else if(charging == 2) - update_overlay |= APC_UPOVERLAY_CHARGEING2 - - - update_overlay_chan["Equipment"] = equipment - update_overlay_chan["Lighting"] = lighting - update_overlay_chan["Enviroment"] = environ - - - var/results = 0 - if(last_update_state == update_state && last_update_overlay == update_overlay && last_update_overlay_chan == update_overlay_chan) - return 0 - if(last_update_state != update_state) - results += 1 - if(last_update_overlay != update_overlay || last_update_overlay_chan != update_overlay_chan) - results += 2 - return results - -/obj/machinery/power/apc/components_are_accessible(var/path) - . = opened - if(ispath(path, /obj/item/stock_parts/power/terminal)) - . = min(., (has_electronics != 2)) - -//attack with an item - open/close cover, insert cell, or (un)lock interface - -/obj/machinery/power/apc/attackby(obj/item/W, mob/user) - if (istype(user, /mob/living/silicon) && get_dist(src,user)>1) - return attack_robot(user) - if(istype(W, /obj/item/inducer)) - return FALSE // inducer.dm afterattack handles this - - if(isCrowbar(W) && user.a_intent != I_HURT)//bypass when on harm intend to actually make use of the cover hammer off check further down. - if(opened) // Closes or removes board. - if (has_electronics == 1) - if (terminal()) - to_chat(user, SPAN_WARNING("Disconnect the wires first.")) - return TRUE - playsound(src.loc, 'sound/items/Crowbar.ogg', 50, 1) - to_chat(user, "You are trying to remove the power control board...")//lpeters - fixed grammar issues - - if(do_after(user, 5 SECONDS, src, DO_PUBLIC_UNIQUE) && opened && (has_electronics == 1) && !terminal()) // redo all checks. - has_electronics = 0 - if ((stat & BROKEN)) - user.visible_message(\ - SPAN_WARNING("\The [user] has broken the power control board inside \the [src]!"),\ - SPAN_NOTICE("You break the charred power control board and remove the remains."),\ - "You hear a crack!") - else - user.visible_message(\ - SPAN_WARNING("\The [user] has removed the power control board from \the [src]!"),\ - SPAN_NOTICE("You remove the power control board.")) - new /obj/item/module/power_control(loc) - return TRUE - - else if (opened != 2) //cover isn't removed - opened = 0 // Closes panel. - user.visible_message(SPAN_NOTICE("\The [user] pries the cover shut on \the [src]."), SPAN_NOTICE("You pry the cover shut.")) - update_icon() - return TRUE - - if((stat & BROKEN) || (hacker && !hacker.hacked_apcs_hidden)) - to_chat(user, SPAN_WARNING("The cover appears broken or stuck.")) - return TRUE - if(coverlocked && !(stat & MAINT)) - to_chat(user, SPAN_WARNING("The cover is locked and cannot be opened.")) - return TRUE - opened = 1 - user.visible_message(SPAN_NOTICE("\The [user] pries the cover open on \the [src]."), SPAN_NOTICE("You pry the cover open.")) - update_icon() - return TRUE - - // Exposes wires for hacking and attaches/detaches the circuit. - if(isScrewdriver(W)) - if(opened) - if (get_cell()) - to_chat(user, SPAN_WARNING("Either close the cover or remove the cell first.")) - return TRUE - switch(has_electronics) - if(1) - if(!terminal()) - to_chat(user, SPAN_WARNING("You must attach a wire connection first!")) - return TRUE - has_electronics = 2 - stat &= ~MAINT - playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1) - to_chat(user, "You screw the circuit electronics into place.") - update_icon() - if(2) - has_electronics = 1 - stat |= MAINT - playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1) - to_chat(user, "You unfasten the electronics.") - update_icon() - if(0) - to_chat(user, SPAN_WARNING("There is no power control board to secure!")) - return TRUE - // Otherwise, if not opened, expose the wires. - wiresexposed = !wiresexposed - to_chat(user, "The wires have been [wiresexposed ? "exposed" : "unexposed"]") - update_icon() - return TRUE - - // trying to unlock the interface with an ID card - if (istype(W, /obj/item/card/id)||istype(W, /obj/item/modular_computer)) - if(emagged) - to_chat(user, "The interface is broken.") - else if(opened) - to_chat(user, "You must close the cover to swipe an ID card.") - else if(wiresexposed) - to_chat(user, "You must close the panel") - else if(stat & (BROKEN|MAINT)) - to_chat(user, "Nothing happens.") - else if(hacker && !hacker.hacked_apcs_hidden) - to_chat(user, "Access denied.") - else - if(has_access(req_access, user.GetAccess()) && !isWireCut(APC_WIRE_IDSCAN)) - locked = !locked - to_chat(user, "You [ locked ? "lock" : "unlock"] the APC interface.") - update_icon() - else - to_chat(user, SPAN_WARNING("Access denied.")) - return TRUE - - // Inserting board. - if(istype(W, /obj/item/module/power_control)) - if(stat & BROKEN) - to_chat(user, SPAN_WARNING("You cannot put the board inside, the frame is damaged.")) - return TRUE - if(!opened) - to_chat(user, SPAN_WARNING("You must first open the cover.")) - return TRUE - if(has_electronics != 0) - to_chat(user, SPAN_WARNING("There is already a power control board inside.")) - return TRUE - user.visible_message(SPAN_WARNING("\The [user] inserts the power control board into \the [src]."), \ - "You start to insert the power control board into the frame...") - playsound(src.loc, 'sound/items/Deconstruct.ogg', 50, 1) - if(do_after(user, 1 SECOND, src, DO_PUBLIC_UNIQUE) && has_electronics == 0 && opened && !(stat & BROKEN)) - has_electronics = 1 - reboot() //completely new electronics - to_chat(user, SPAN_NOTICE("You place the power control board inside the frame.")) - qdel(W) - - // Deconstruction - if(isWelder(W)) - if(!opened) - to_chat(user, SPAN_WARNING("You must first open the cover.")) - return TRUE - if(has_electronics != 0) - to_chat(user, SPAN_WARNING("You must first remove the power control board inside.")) - return TRUE - if(terminal()) - to_chat(user, SPAN_WARNING("The wire connection is in the way.")) - return TRUE - var/obj/item/weldingtool/WT = W - if (WT.get_fuel() < 3) - to_chat(user, SPAN_WARNING("You need more welding fuel to complete this task.")) - return - user.visible_message(SPAN_WARNING("\The [user] begins to weld \the [src]."), \ - "You start welding the APC frame...", \ - "You hear welding.") - playsound(src.loc, 'sound/items/Welder.ogg', 50, 1) - if(do_after(user, 5 SECONDS, src, DO_PUBLIC_UNIQUE) && opened && has_electronics == 0 && !terminal()) - if(!WT.remove_fuel(3, user)) - return TRUE - if (emagged || (stat & BROKEN) || opened==2) - new /obj/item/stack/material/steel(loc) - user.visible_message(\ - SPAN_WARNING("\The [src] has been cut apart by \the [user] with \the [WT]."),\ - SPAN_NOTICE("You disassembled the broken APC frame."),\ - "You hear welding.") - else - new /obj/item/frame/apc(loc) - user.visible_message(\ - SPAN_WARNING("\The [src] has been cut from the wall by \the [user] with \the [WT]."),\ - SPAN_NOTICE("You cut the APC frame from the wall."),\ - "You hear welding.") - qdel(src) - return TRUE - - // Panel and frame repair. - if (istype(W, /obj/item/frame/apc)) - if(!opened) - to_chat(user, SPAN_WARNING("You must first open the cover.")) - return TRUE - if(emagged) - emagged = FALSE - if(opened==2) - opened = 1 - user.visible_message(\ - "[user.name] has replaced the damaged APC frontal panel with a new one.",\ - "You replace the damaged APC frontal panel with a new one.") - qdel(W) - update_icon() - return TRUE - - if((stat & BROKEN) || (hacker && !hacker.hacked_apcs_hidden)) - if (has_electronics) - to_chat(user, "You cannot repair this APC until you remove the electronics still inside.") - return TRUE - - user.visible_message("[user.name] replaces the damaged APC frame with a new one.",\ - "You begin to replace the damaged APC frame...") - if(do_after(user, 5 SECONDS, src, DO_PUBLIC_UNIQUE) && opened && !has_electronics && ((stat & BROKEN) || (hacker && !hacker.hacked_apcs_hidden))) - user.visible_message(\ - "[user.name] has replaced the damaged APC frame with new one.",\ - "You replace the damaged APC frame with new one.") - qdel(W) - set_broken(FALSE) - // Malf AI, removes the APC from AI's hacked APCs list. - if(hacker && hacker.hacked_apcs && (src in hacker.hacked_apcs)) - hacker.hacked_apcs -= src - hacker = null - if (opened==2) - opened = 1 - queue_icon_update() - - if((. = ..())) // Further interactions are low priority attack stuff. - return - - if (((stat & BROKEN) || (hacker && !hacker.hacked_apcs_hidden)) \ - && !opened \ - && W.force >= 5 \ - && W.w_class >= 3.0 \ - && prob(W.force) ) - opened = 2 - user.visible_message("The APC cover was knocked down with the [W.name] by [user.name]!", \ - "You knock down the APC cover with your [W.name]!", \ - "You hear a bang") - update_icon() - else - if (istype(user, /mob/living/silicon)) - return attack_robot(user) - if (!opened && wiresexposed && (isMultitool(W) || isWirecutter(W) || istype(W, /obj/item/device/assembly/signaler))) - return wires.Interact(user) - - user.visible_message("The [src.name] has been hit with the [W.name] by [user.name]!", \ - "You hit the [src.name] with your [W.name]!", \ - "You hear a bang") - if(W.force >= 5 && W.w_class >= ITEM_SIZE_NORMAL && prob(W.force)) - var/roulette = rand(1,100) - switch(roulette) - if(1 to 10) - locked = FALSE - to_chat(user, "You manage to disable the lock on \the [src]!") - if(50 to 70) - to_chat(user, "You manage to bash the lid open!") - opened = 1 - if(90 to 100) - to_chat(user, "There's a nasty sound and \the [src] goes cold...") - set_broken(TRUE) - queue_icon_update() - playsound(get_turf(src), 'sound/weapons/smash.ogg', 75, 1) - -// attack with hand - remove cell (if cover open) or interact with the APC - -/obj/machinery/power/apc/emag_act(var/remaining_charges, var/mob/user) - if (!(emagged || (hacker && !hacker.hacked_apcs_hidden))) // trying to unlock with an emag card - if(opened) - to_chat(user, "You must close the cover to swipe an ID card.") - else if(wiresexposed) - to_chat(user, "You must close the panel first") - else if(stat & (BROKEN|MAINT)) - to_chat(user, "Nothing happens.") - else - flick("apc-spark", src) - if (do_after(user,6,src)) - if(prob(50)) - emagged = TRUE - req_access.Cut() - locked = 0 - to_chat(user, "You emag the APC interface.") - update_icon() - else - to_chat(user, "You fail to [ locked ? "unlock" : "lock"] the APC interface.") - return 1 - -/obj/machinery/power/apc/CanUseTopicPhysical(var/mob/user) - return GLOB.physical_state.can_use_topic(nano_host(), user) - -/obj/machinery/power/apc/physical_attack_hand(mob/user) - //Human mob special interaction goes here. - if(istype(user,/mob/living/carbon/human)) - var/mob/living/carbon/human/H = user - - if(H.species.can_shred(H)) - user.visible_message("\The [user] slashes at \the [src]!", "You slash at \the [src]!") - playsound(src.loc, 'sound/weapons/slash.ogg', 100, 1) - - var/allcut = wires.IsAllCut() - - if(beenhit >= pick(3, 4) && !wiresexposed) - wiresexposed = TRUE - src.update_icon() - src.visible_message("\The The [src]'s cover flies open, exposing the wires!") - - else if(wiresexposed && allcut == 0) - wires.CutAll() - src.update_icon() - src.visible_message("\The [src]'s wires are shredded!") - else - beenhit += 1 - return TRUE - -/obj/machinery/power/apc/interface_interact(mob/user) - ui_interact(user) - return TRUE - -/obj/machinery/power/apc/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1) - if(!user) - return - var/obj/item/cell/cell = get_cell() - - var/list/data = list( - "pChan_Off" = POWERCHAN_OFF, - "pChan_Off_T" = POWERCHAN_OFF_TEMP, - "pChan_Off_A" = POWERCHAN_OFF_AUTO, - "pChan_On" = POWERCHAN_ON, - "pChan_On_A" = POWERCHAN_ON_AUTO, - "locked" = (locked && !emagged) ? 1 : 0, - "isOperating" = operating, - "externalPower" = main_status, - "powerCellStatus" = cell ? cell.percent() : null, - "chargeMode" = chargemode, - "chargingStatus" = charging, - "totalLoad" = round(lastused_total), - "totalCharging" = round(lastused_charging), - "coverLocked" = coverlocked, - "failTime" = failure_timer * 2, - "siliconUser" = istype(user, /mob/living/silicon), - "powerChannels" = list( - list( - "title" = "Equipment", - "powerLoad" = lastused_equip, - "status" = equipment, - "topicParams" = list( - "auto" = list("eqp" = 2), - "on" = list("eqp" = 1), - "off" = list("eqp" = 0) - ) - ), - list( - "title" = "Lighting", - "powerLoad" = round(lastused_light), - "status" = lighting, - "topicParams" = list( - "auto" = list("lgt" = 2), - "on" = list("lgt" = 1), - "off" = list("lgt" = 0) - ) - ), - list( - "title" = "Environment", - "powerLoad" = round(lastused_environ), - "status" = environ, - "topicParams" = list( - "auto" = list("env" = 2), - "on" = list("env" = 1), - "off" = list("env" = 0) - ) - ) - ) - ) - - // update the ui if it exists, returns null if no ui is passed/found - ui = SSnano.try_update_ui(user, src, ui_key, ui, data, force_open) - if (!ui) - // the ui does not exist, so we'll create a new() one - // for a list of parameters and their descriptions see the code docs in \code\modules\nano\nanoui.dm - ui = new(user, src, ui_key, "apc.tmpl", "[area.name] - APC", 520, data["siliconUser"] ? 465 : 440) - // when the ui is first opened this is the data it will use - ui.set_initial_data(data) - // open the new ui window - ui.open() - // auto update every Master Controller tick - ui.set_auto_update(1) - -/obj/machinery/power/apc/proc/report() - var/obj/item/cell/cell = get_cell() - return "[area.name] : [equipment]/[lighting]/[environ] ([lastused_equip+lastused_light+lastused_environ]) : [cell? cell.percent() : "N/C"] ([charging])" - -/obj/machinery/power/apc/proc/update() - if(operating && !shorted && !failure_timer) - - //prevent unnecessary updates to emergency lighting - var/new_power_light = (lighting >= POWERCHAN_ON) - if(area.power_light != new_power_light) - area.power_light = new_power_light - area.set_emergency_lighting(lighting == POWERCHAN_OFF_AUTO) //if lights go auto-off, emergency lights go on - - area.power_equip = (equipment >= POWERCHAN_ON) - area.power_environ = (environ >= POWERCHAN_ON) - else - area.power_light = 0 - area.power_equip = 0 - area.power_environ = 0 - - area.power_change() - - var/obj/item/cell/cell = get_cell() - if(!cell || cell.charge <= 0) - if(needs_powerdown_sound) - playsound(src, 'sound/machines/apc_nopower.ogg', 75, 0) - needs_powerdown_sound = FALSE - else - needs_powerdown_sound = TRUE - -/obj/machinery/power/apc/proc/isWireCut(var/wireIndex) - return wires.IsIndexCut(wireIndex) - - -/obj/machinery/power/apc/CanUseTopic(mob/user, datum/topic_state/state) - if(user.lying) - to_chat(user, "You must stand to use [src]!") - return STATUS_CLOSE - if(istype(user, /mob/living/silicon)) - var/permit = 0 // Malfunction variable. If AI hacks APC it can control it even without AI control wire. - var/mob/living/silicon/ai/AI = user - var/mob/living/silicon/robot/robot = user - if(hacker && !hacker.hacked_apcs_hidden) - if(hacker == AI) - permit = 1 - else if(istype(robot) && robot.connected_ai && robot.connected_ai == hacker) // Cyborgs can use APCs hacked by their AI - permit = 1 - - if(aidisabled && !permit) - return STATUS_CLOSE - . = ..() - if(user.restrained()) - to_chat(user, "You must have free hands to use [src].") - . = min(., STATUS_UPDATE) - -/obj/machinery/power/apc/Topic(href, href_list) - if(..()) - return 1 - - if(!istype(usr, /mob/living/silicon) && (locked && !emagged)) - // Shouldn't happen, this is here to prevent href exploits - to_chat(usr, "You must unlock the panel to use this!") - return 1 - - if (href_list["lock"]) - coverlocked = !coverlocked - - else if( href_list["reboot"] ) - failure_timer = 0 - update_icon() - update() - - else if (href_list["breaker"]) - toggle_breaker() - - else if (href_list["cmode"]) - set_chargemode(!chargemode) - if(!chargemode) - charging = 0 - update_icon() - - else if (href_list["eqp"]) - var/val = text2num(href_list["eqp"]) - equipment = setsubsystem(val) - force_update_channels() - - else if (href_list["lgt"]) - var/val = text2num(href_list["lgt"]) - lighting = setsubsystem(val) - force_update_channels() - - else if (href_list["env"]) - var/val = text2num(href_list["env"]) - environ = setsubsystem(val) - force_update_channels() - - else if (href_list["overload"]) - if(istype(usr, /mob/living/silicon)) - src.overload_lighting() - - else if (href_list["toggleaccess"]) - if(istype(usr, /mob/living/silicon)) - if(emagged || (stat & (BROKEN|MAINT))) - to_chat(usr, "The APC does not respond to the command.") - else - locked = !locked - update_icon() - - return 0 - -/obj/machinery/power/apc/proc/force_update_channels() - autoflag = -1 // This clears state, forcing a full recalculation - update_channels(TRUE) - update() - queue_icon_update() - -/obj/machinery/power/apc/proc/toggle_breaker() - operating = !operating - force_update_channels() - -/obj/machinery/power/apc/get_power_usage() - if(autoflag) - return lastused_total // If not, we need to do something more sophisticated: compute how much power we would need in order to come back online. - . = 0 - if(autoset(lighting, 2) >= POWERCHAN_ON) - . += area.usage(LIGHT) - if(autoset(equipment, 2) >= POWERCHAN_ON) - . += area.usage(EQUIP) - if(autoset(environ, 1) >= POWERCHAN_ON) - . += area.usage(EQUIP) - -/obj/machinery/power/apc/Process() - if(!area.requires_power) - return PROCESS_KILL - - if(stat & (BROKEN|MAINT)) - return - - if(failure_timer) - failure_timer-- - if(!failure_timer) - update() - queue_icon_update() - else - return - - lastused_light = (lighting >= POWERCHAN_ON) ? area.usage(LIGHT) : 0 - lastused_equip = (equipment >= POWERCHAN_ON) ? area.usage(EQUIP) : 0 - lastused_environ = (environ >= POWERCHAN_ON) ? area.usage(ENVIRON) : 0 - area.clear_usage() - - lastused_total = lastused_light + lastused_equip + lastused_environ - - //store states to update icon if any change - var/last_lt = lighting - var/last_eq = equipment - var/last_en = environ - var/last_ch = charging - - var/obj/machinery/power/terminal/terminal = terminal() - var/avail = (terminal && terminal.avail()) || 0 - var/excess = (terminal && terminal.surplus()) || 0 - - if(!avail) - main_status = 0 - else if(excess < 0) - main_status = 1 - else - main_status = 2 - - var/obj/item/cell/cell = get_cell() - if(!cell || shorted) // We aren't going to be doing any power processing in this case. - charging = 0 - else - ..() // Actual processing happens in here. - - if(debug) - log_debug("Status: [main_status] - Excess: [excess] - Last Equip: [lastused_equip] - Last Light: [lastused_light] - Longterm: [longtermpower]") - - //update state - var/obj/item/stock_parts/power/battery/power = get_component_of_type(/obj/item/stock_parts/power/battery) - lastused_charging = max(power && power.cell && (power.cell.charge - power.last_cell_charge) * CELLRATE, 0) - charging = lastused_charging ? 1 : 0 - if(cell.fully_charged()) - charging = 2 - - if(stat & NOPOWER) - power_change() // We are the ones responsible for triggering listeners once power returns, so we run this to detect possible changes. - - // Set channels depending on how much charge we have left - update_channels() - - // update icon & area power if anything changed - if(last_lt != lighting || last_eq != equipment || last_en != environ) - queue_icon_update() - update() - else if (last_ch != charging) - queue_icon_update() - -/obj/machinery/power/apc/proc/update_channels(suppress_alarms = FALSE) - // Allow the APC to operate as normal if the cell can charge - if(charging && longtermpower < 10) - longtermpower += 1 - else if(longtermpower > -10) - longtermpower -= 2 - var/obj/item/cell/cell = get_cell() - var/percent = cell && cell.percent() - - if(!cell || shorted || (stat & NOPOWER) || !operating) - if(autoflag != 0) - equipment = autoset(equipment, 0) - lighting = autoset(lighting, 0) - environ = autoset(environ, 0) - if(!suppress_alarms) - GLOB.power_alarm.triggerAlarm(loc, src) - autoflag = 0 - else if((percent > AUTO_THRESHOLD_LIGHTING) || longtermpower >= 0) // Put most likely at the top so we don't check it last, effeciency 101 - if(autoflag != 3) - equipment = autoset(equipment, 1) - lighting = autoset(lighting, 1) - environ = autoset(environ, 1) - autoflag = 3 - GLOB.power_alarm.clearAlarm(loc, src) - else if((percent <= AUTO_THRESHOLD_LIGHTING) && (percent > AUTO_THRESHOLD_EQUIPMENT) && longtermpower < 0) // <50%, turn off lighting - if(autoflag != 2) - equipment = autoset(equipment, 1) - lighting = autoset(lighting, 2) - environ = autoset(environ, 1) - if(!suppress_alarms) - GLOB.power_alarm.triggerAlarm(loc, src) - autoflag = 2 - else if(percent <= AUTO_THRESHOLD_EQUIPMENT) // <25%, turn off lighting & equipment - if(autoflag != 1) - equipment = autoset(equipment, 2) - lighting = autoset(lighting, 2) - environ = autoset(environ, 1) - if(!suppress_alarms) - GLOB.power_alarm.triggerAlarm(loc, src) - autoflag = 1 - -// val 0=off, 1=off(auto) 2=on 3=on(auto) -// on 0=off, 1=on, 2=autooff -// defines a state machine, returns the new state -/obj/machinery/power/apc/proc/autoset(var/cur_state, var/on) - //autoset will never turn on a channel set to off - switch(cur_state) - if(POWERCHAN_OFF_TEMP) - if(on == 1 || on == 2) - return POWERCHAN_ON - if(POWERCHAN_OFF_AUTO) - if(on == 1) - return POWERCHAN_ON_AUTO - if(POWERCHAN_ON) - if(on == 0) - return POWERCHAN_OFF_TEMP - if(POWERCHAN_ON_AUTO) - if(on == 0 || on == 2) - return POWERCHAN_OFF_AUTO - - return cur_state //leave unchanged - - -// damage and destruction acts -/obj/machinery/power/apc/emp_act(severity) - if(emp_hardened) - return - var/obj/item/cell/cell = get_cell() - // Fail for 8-12 minutes (divided by severity) - // Division by 2 is required, because machinery ticks are every two seconds. Without it we would fail for 16-24 minutes. - if(is_critical) - // Critical APCs are considered EMP shielded and will be offline only for about half minute. Prevents AIs being one-shot disabled by EMP strike. - // Critical APCs are also more resilient to cell corruption/power drain. - energy_fail(rand(240, 360) / severity / CRITICAL_APC_EMP_PROTECTION) - if(cell) - cell.emp_act(severity+2) - else - // Regular APCs fail for normal time. - energy_fail(rand(240, 360) / severity) - if(cell) - cell.emp_act(severity+1) - - update_icon() - ..() - -/obj/machinery/power/apc/ex_act(severity) - var/obj/item/cell/C = get_cell() - switch(severity) - if(EX_ACT_DEVASTATING) - qdel(src) - if (C) - C.ex_act(EX_ACT_DEVASTATING) // more lags woohoo - return - if(EX_ACT_HEAVY) - if (prob(50)) - set_broken(TRUE) - if (C && prob(50)) - C.ex_act(EX_ACT_HEAVY) - if(EX_ACT_LIGHT) - if (prob(25)) - set_broken(TRUE) - if (C && prob(25)) - C.ex_act(EX_ACT_LIGHT) - -/obj/machinery/power/apc/set_broken(new_state) - if(!new_state || (stat & BROKEN)) - return ..() - visible_message("[src]'s screen flickers with warnings briefly!") - GLOB.power_alarm.triggerAlarm(loc, src) - spawn(rand(2,5)) - ..() - visible_message("[src]'s screen suddenly explodes in rain of sparks and small debris!") - operating = 0 - update() - return TRUE - -/obj/machinery/power/apc/proc/reboot() - //reset various counters so that process() will start fresh - charging = initial(charging) - autoflag = initial(autoflag) - longtermpower = initial(longtermpower) - failure_timer = initial(failure_timer) - - //start with main breaker off, chargemode in the default state and all channels on auto upon reboot - operating = 0 - - set_chargemode(initial(chargemode)) - GLOB.power_alarm.clearAlarm(loc, src) - - lighting = POWERCHAN_ON_AUTO - equipment = POWERCHAN_ON_AUTO - environ = POWERCHAN_ON_AUTO - - force_update_channels() - -/obj/machinery/power/apc/proc/set_chargemode(new_mode) - chargemode = new_mode - var/obj/item/stock_parts/power/battery/power = get_component_of_type(/obj/item/stock_parts/power/battery) - if(power) - power.can_charge = chargemode - power.charge_wait_counter = initial(power.charge_wait_counter) - -// overload the lights in this APC area -/obj/machinery/power/apc/proc/overload_lighting(var/chance = 100) - if(/* !get_connection() || */ !operating || shorted) - return - var/amount = use_power_oneoff(20, LOCAL) - if(amount <= 0) - spawn(0) - for(var/obj/machinery/light/L in area) - if(prob(chance)) - L.on = 1 - L.broken() - sleep(1) - -/obj/machinery/power/apc/proc/setsubsystem(val) - switch(val) - if(2) - return POWERCHAN_OFF_AUTO - if(1) - return POWERCHAN_OFF_TEMP - else - return POWERCHAN_OFF - -// Malfunction: Transfers APC under AI's control -/obj/machinery/power/apc/proc/ai_hack(var/mob/living/silicon/ai/A = null) - if(!A || !A.hacked_apcs || hacker || aidisabled || A.stat == DEAD) - return 0 - src.hacker = A - A.hacked_apcs += src - locked = 1 - update_icon() - return 1 - -/obj/item/module/power_control - name = "power control module" - desc = "Heavy-duty switching circuits for power control." - icon = 'icons/obj/module.dmi' - icon_state = "power_mod" - item_state = "electronic" - matter = list(MATERIAL_STEEL = 50, MATERIAL_GLASS = 50) - w_class = ITEM_SIZE_SMALL - obj_flags = OBJ_FLAG_CONDUCTIBLE - -/obj/machinery/power/apc/malf_upgrade(var/mob/living/silicon/ai/user) - ..() - malf_upgraded = 1 - emp_hardened = 1 - to_chat(user, "\The [src] has been upgraded. It is now protected against EM pulses.") - return 1 - - - -#undef APC_UPDATE_ICON_COOLDOWN diff --git a/code/modules/power/batteryrack.dm b/code/modules/power/batteryrack.dm deleted file mode 100644 index 702ff2d124d47..0000000000000 --- a/code/modules/power/batteryrack.dm +++ /dev/null @@ -1,291 +0,0 @@ -// Cell rack PSU, similar to SMES, but uses power cells to store power. -// Lacks detailed control of input/output values, and has generally much worse capacity. -#define PSU_OFFLINE 0 -#define PSU_OUTPUT 1 -#define PSU_INPUT 2 -#define PSU_AUTO 3 - -#define PSU_MAXCELLS 9 // Capped to 9 cells due to sprite limitation - -/obj/machinery/power/smes/batteryrack - name = "power cell rack PSU" - desc = "A rack of power cells working as a PSU." - icon = 'icons/obj/cellrack.dmi' - icon_state = "rack" - capacity = 0 - charge = 0 - should_be_mapped = 1 - base_type = /obj/machinery/power/smes/batteryrack - maximum_component_parts = list(/obj/item/stock_parts = 15) - - machine_name = "battery rack PSU" - machine_desc = "A very simple power storage solution: several power cells on a rack. About as basic as you can get." - - var/max_transfer_rate = 0 // Maximal input/output rate. Determined by used capacitors when building the device. - var/mode = PSU_OFFLINE // Current inputting/outputting mode - var/list/internal_cells = list() // Cells stored in this PSU - var/max_cells = 3 // Maximal amount of stored cells at once. Capped at 9. - var/previous_charge = 0 // Charge previous tick. - var/equalise = 0 // If true try to equalise charge between cells - var/icon_update = 0 // Timer in ticks for icon update. - var/ui_tick = 0 - -/obj/machinery/power/smes/batteryrack/RefreshParts() - var/capacitor_efficiency = clamp(total_component_rating_of_type(/obj/item/stock_parts/capacitor), 0, 10) - var/maxcells = 3 * total_component_rating_of_type(/obj/item/stock_parts/matter_bin) - - max_transfer_rate = 10000 * capacitor_efficiency // 30kw - 90kw depending on used capacitors. - max_cells = min(PSU_MAXCELLS, maxcells) - input_level = max_transfer_rate - output_level = max_transfer_rate - ..() - -/obj/machinery/power/smes/batteryrack/Destroy() - for(var/obj/item/cell/C in internal_cells) - qdel(C) - internal_cells = null - return ..() - -/obj/machinery/power/smes/batteryrack/on_update_icon() - overlays.Cut() - icon_update = 0 - - var/cellcount = 0 - var/charge_level = clamp(round(Percentage() / 12), 0, 7) - - - overlays += "charge[charge_level]" - - if(!panel_open) - icon_state = "rack-closed" - else - icon_state = "rack" - for(var/obj/item/cell/C as anything in internal_cells) - if (++cellcount > max_cells) - break - overlays += "cell[cellcount]" - if(C.fully_charged()) - overlays += "cell[cellcount]f" - else if(!C.charge) - overlays += "cell[cellcount]e" - -// Recalculate maxcharge and similar variables. -/obj/machinery/power/smes/batteryrack/proc/update_maxcharge() - var/newmaxcharge = 0 - for(var/obj/item/cell/C in internal_cells) - newmaxcharge += C.maxcharge - - capacity = newmaxcharge - charge = clamp(charge, 0, newmaxcharge) - - -// Sets input/output depending on our "mode" var. -/obj/machinery/power/smes/batteryrack/proc/update_io(var/newmode) - mode = newmode - switch(mode) - if(PSU_OFFLINE) - input_attempt = 0 - output_attempt = 0 - if(PSU_INPUT) - input_attempt = 1 - output_attempt = 0 - if(PSU_OUTPUT) - input_attempt = 0 - output_attempt = 1 - if(PSU_AUTO) - input_attempt = 1 - output_attempt = 1 - -// Store charge in the power cells, instead of using the charge var. Amount is in joules. -/obj/machinery/power/smes/batteryrack/add_charge(var/amount) - amount *= CELLRATE // Convert to CELLRATE first. - if(equalise) - // Now try to get least charged cell and use the power from it. - var/obj/item/cell/CL = get_least_charged_cell() - if(!CL) - return //no cells - amount -= CL.give(amount) - if(!amount) - return - // We're still here, so it means the least charged cell was full OR we don't care about equalising the charge. Give power to other cells instead. - for(var/obj/item/cell/C in internal_cells) - amount -= C.give(amount) - // No more power to input so return. - if(!amount) - return - - -/obj/machinery/power/smes/batteryrack/remove_charge(var/amount) - amount *= CELLRATE // Convert to CELLRATE first. - if(equalise) - // Now try to get most charged cell and use the power from it. - var/obj/item/cell/CL = get_most_charged_cell() - amount -= CL.use(amount) - if(!amount) - return - // We're still here, so it means the most charged cell didn't have enough power OR we don't care about equalising the charge. Use power from other cells instead. - for(var/obj/item/cell/C in internal_cells) - amount -= C.use(amount) - // No more power to output so return. - if(!amount) - return - -// Helper procs to get most/least charged cells. -/obj/machinery/power/smes/batteryrack/proc/get_most_charged_cell() - var/obj/item/cell/CL = null - for(var/obj/item/cell/C in internal_cells) - if(CL == null) - CL = C - else if(CL.percent() < C.percent()) - CL = C - return CL -/obj/machinery/power/smes/batteryrack/proc/get_least_charged_cell() - var/obj/item/cell/CL = null - for(var/obj/item/cell/C in internal_cells) - if(CL == null) - CL = C - else if(CL.percent() > C.percent()) - CL = C - return CL - -/obj/machinery/power/smes/batteryrack/proc/insert_cell(var/obj/item/cell/C, var/mob/user) - if(!istype(C)) - return 0 - - if(internal_cells.len >= max_cells) - return 0 - if(user && !user.unEquip(C)) - return 0 - internal_cells.Add(C) - C.forceMove(src) - RefreshParts() - update_maxcharge() - update_icon() - return 1 - - -/obj/machinery/power/smes/batteryrack/Process() - charge = 0 - for(var/obj/item/cell/C in internal_cells) - charge += C.charge - - ..() - ui_tick = !ui_tick - icon_update++ - - // Don't update icon too much, prevents unnecessary processing. - if(icon_update >= 10) - update_icon() - // Try to balance charge between stored cells. Capped at max_transfer_rate per tick. - // Take power from most charged cell, and give it to least charged cell. - if(equalise) - var/obj/item/cell/least = get_least_charged_cell() - var/obj/item/cell/most = get_most_charged_cell() - // Don't bother equalising charge between two same cells. Also ensure we don't get NULLs or wrong types. Don't bother equalising when difference between charges is tiny. - if(!least || !most || least.percent() == most.percent()) - return - var/percentdiff = (most.percent() - least.percent()) / 2 // Transfer only 50% of power. The reason is that it could lead to situations where least and most charged cells would "swap places" (45->50% and 50%->45%) - var/celldiff - // Take amount of power to transfer from the cell with smaller maxcharge - if(most.maxcharge > least.maxcharge) - celldiff = (least.maxcharge / 100) * percentdiff - else - celldiff = (most.maxcharge / 100) * percentdiff - celldiff = clamp(celldiff, 0, max_transfer_rate * CELLRATE) - // Ensure we don't transfer more energy than the most charged cell has, and that the least charged cell can input. - celldiff = min(min(celldiff, most.charge), least.maxcharge - least.charge) - least.give(most.use(celldiff)) - -/obj/machinery/power/smes/batteryrack/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1) - var/data[0] - - data["mode"] = mode - data["transfer_max"] = max_transfer_rate - data["output_load"] = round(output_used) - data["input_load"] = round(input_available) - data["equalise"] = equalise - data["blink_tick"] = ui_tick - data["cells_max"] = max_cells - data["cells_cur"] = internal_cells.len - var/list/cells = list() - var/cell_index = 1 - for(var/obj/item/cell/C in internal_cells) - var/list/cell[0] - cell["slot"] = cell_index - cell["used"] = 1 - cell["percentage"] = round(C.percent(), 0.01) - cell_index++ - cells += list(cell) - while(cell_index <= PSU_MAXCELLS) - var/list/cell[0] - cell["slot"] = cell_index - cell["used"] = 0 - cell_index++ - cells += list(cell) - data["cells_list"] = cells - - ui = SSnano.try_update_ui(user, src, ui_key, ui, data, force_open) - if (!ui) - ui = new(user, src, ui_key, "psu.tmpl", "Cell Rack PSU", 500, 430) - ui.set_initial_data(data) - ui.open() - ui.set_auto_update(1) - -/obj/machinery/power/smes/batteryrack/dismantle() - for(var/obj/item/cell/C in internal_cells) - C.dropInto(loc) - internal_cells -= C - return ..() - -/obj/machinery/power/smes/batteryrack/attackby(var/obj/item/W as obj, var/mob/user as mob) - if(..()) - return TRUE - if(istype(W, /obj/item/cell)) // ID Card, try to insert it. - if(insert_cell(W, user)) - to_chat(user, "You insert \the [W] into \the [src].") - else - to_chat(user, "\The [src] has no empty slot for \the [W]") - -/obj/machinery/power/smes/batteryrack/interface_interact(var/mob/user) - ui_interact(user) - return TRUE - -/obj/machinery/power/smes/batteryrack/inputting() - return - -/obj/machinery/power/smes/batteryrack/outputting() - return - -/obj/machinery/power/smes/batteryrack/Topic(href, href_list) - // ..() would respond to those topic calls, but we don't want to use them at all. - // Calls to these shouldn't occur anyway, due to usage of different nanoUI, but - // it's here in case someone decides to try hrefhacking/modified templates. - if(href_list["input"] || href_list["output"]) - return 1 - - if(..()) - return 1 - if( href_list["disable"] ) - update_io(0) - return 1 - else if( href_list["enable"] ) - update_io(clamp(text2num(href_list["enable"]), 1, 3)) - return 1 - else if( href_list["equaliseon"] ) - equalise = 1 - return 1 - else if( href_list["equaliseoff"] ) - equalise = 0 - return 1 - else if( href_list["ejectcell"] ) - var/slot_number = text2num(href_list["ejectcell"]) - if(slot_number != clamp(round(slot_number), 1, length(internal_cells))) - return 1 - var/obj/item/cell/C = internal_cells[slot_number] - - C.dropInto(loc) - internal_cells -= C - update_icon() - RefreshParts() - update_maxcharge() - return 1 diff --git a/code/modules/power/breaker_box.dm b/code/modules/power/breaker_box.dm deleted file mode 100644 index 6cad911fbb25c..0000000000000 --- a/code/modules/power/breaker_box.dm +++ /dev/null @@ -1,136 +0,0 @@ -// Updated version of old powerswitch by Atlantis -// Has better texture, and is now considered electronic device -// AI has ability to toggle it in 5 seconds -// Humans need 30 seconds (AI is faster when it comes to complex electronics) -// Used for advanced grid control (read: Substations) - -/obj/machinery/power/breakerbox - name = "Breaker Box" - icon = 'icons/obj/power.dmi' - icon_state = "bbox_off" - //directwired = 0 - var/icon_state_on = "bbox_on" - var/icon_state_off = "bbox_off" - density = TRUE - anchored = TRUE - var/on = 0 - var/busy = 0 - var/directions = list(1,2,4,8,5,6,9,10) - var/RCon_tag = "NO_TAG" - var/update_locked = 0 - -/obj/machinery/power/breakerbox/Destroy() - ..() - for(var/datum/nano_module/rcon/R in world) - R.FindDevices() - -/obj/machinery/power/breakerbox/activated - icon_state = "bbox_on" - - // Enabled on server startup. Used in substations to keep them in bypass mode. -/obj/machinery/power/breakerbox/activated/Initialize() - set_state(1) - . = ..() - -/obj/machinery/power/breakerbox/examine(mob/user) - . = ..() - to_chat(user, "Large machine with heavy duty switching circuits used for advanced grid control") - if(on) - to_chat(user, "It seems to be online.") - else - to_chat(user, "It seems to be offline.") - -/obj/machinery/power/breakerbox/attack_ai(mob/user) - if(update_locked) - to_chat(user, "System locked. Please try again later.") - return - - if(busy) - to_chat(user, "System is busy. Please wait until current operation is finished before changing power settings.") - return - - busy = 1 - to_chat(user, "Updating power settings..") - if(do_after(user, 5 SECONDS, src)) - set_state(!on) - to_chat(user, "Update Completed. New setting:[on ? "on": "off"]") - update_locked = 1 - spawn(600) - update_locked = 0 - busy = 0 - - -/obj/machinery/power/breakerbox/physical_attack_hand(mob/user) - if(update_locked) - to_chat(user, "System locked. Please try again later.") - return TRUE - - if(busy) - to_chat(user, "System is busy. Please wait until current operation is finished before changing power settings.") - return TRUE - - busy = 1 - for(var/mob/O in viewers(user)) - O.show_message(text("\The [user] started reprogramming \the [src]!"), 1) - - if(do_after(user, 5 SECONDS, src, DO_PUBLIC_UNIQUE)) - set_state(!on) - user.visible_message(\ - "[user.name] [on ? "enabled" : "disabled"] the breaker box!",\ - "You [on ? "enabled" : "disabled"] the breaker box!") - update_locked = 1 - spawn(600) - update_locked = 0 - busy = 0 - return TRUE - -/obj/machinery/power/breakerbox/attackby(var/obj/item/W as obj, var/mob/user as mob) - if(isMultitool(W)) - var/newtag = input(user, "Enter new RCON tag. Use \"NO_TAG\" to disable RCON or leave empty to cancel.", "SMES RCON system") as text - if(newtag) - RCon_tag = newtag - to_chat(user, "You changed the RCON tag to: [newtag]") - - - - - -/obj/machinery/power/breakerbox/proc/set_state(var/state) - on = state - if(on) - icon_state = icon_state_on - var/list/connection_dirs = list() - for(var/direction in directions) - for(var/obj/structure/cable/C in get_step(src,direction)) - if(C.d1 == turn(direction, 180) || C.d2 == turn(direction, 180)) - connection_dirs += direction - break - - for(var/direction in connection_dirs) - var/obj/structure/cable/C = new/obj/structure/cable(src.loc) - C.d1 = 0 - C.d2 = direction - C.icon_state = "[C.d1]-[C.d2]" - C.breaker_box = src - - var/datum/powernet/PN = new() - PN.add_cable(C) - - C.mergeConnectedNetworks(C.d2) - C.mergeConnectedNetworksOnTurf() - - if(C.d2 & (C.d2 - 1))// if the cable is layed diagonally, check the others 2 possible directions - C.mergeDiagonalsNetworks(C.d2) - - else - icon_state = icon_state_off - for(var/obj/structure/cable/C in src.loc) - qdel(C) - -// Used by RCON to toggle the breaker box. -/obj/machinery/power/breakerbox/proc/auto_toggle() - if(!update_locked) - set_state(!on) - update_locked = 1 - spawn(600) - update_locked = 0 diff --git a/code/modules/power/cable.dm b/code/modules/power/cable.dm deleted file mode 100644 index 6309701c929ed..0000000000000 --- a/code/modules/power/cable.dm +++ /dev/null @@ -1,874 +0,0 @@ -/////////////////////////////// -//CABLE STRUCTURE -/////////////////////////////// - - -//////////////////////////////// -// Definitions -//////////////////////////////// - -/* Cable directions (d1 and d2) - - -> 9 1 5 -> \ | / -> 8 - 0 - 4 -> / | \ -> 10 2 6 - -If d1 = 0 and d2 = 0, there's no cable -If d1 = 0 and d2 = dir, it's a O-X cable, getting from the center of the tile to dir (knot cable) -If d1 = dir1 and d2 = dir2, it's a full X-X cable, getting from dir1 to dir2 -By design, d1 is the smallest direction and d2 is the highest -*/ - -/obj/structure/cable - level = 1 - anchored = TRUE - var/datum/powernet/powernet - name = "power cable" - desc = "A flexible superconducting cable for heavy-duty power transfer." - icon = 'icons/obj/power_cond_white.dmi' - icon_state = "0-1" - var/d1 = 0 - var/d2 = 1 - - layer = EXPOSED_WIRE_LAYER - - color = COLOR_MAROON - var/obj/machinery/power/breakerbox/breaker_box - - -/obj/structure/cable/drain_power(var/drain_check, var/surge, var/amount = 0) - - if(drain_check) - return 1 - - var/datum/powernet/PN = get_powernet() - if(!PN) return 0 - - return PN.draw_power(amount) - -/obj/structure/cable/yellow - color = COLOR_AMBER - -/obj/structure/cable/green - color = COLOR_GREEN - -/obj/structure/cable/blue - color = COLOR_CYAN_BLUE - -/obj/structure/cable/pink - color = COLOR_PURPLE - -/obj/structure/cable/orange - color = COLOR_ORANGE - -/obj/structure/cable/cyan - color = COLOR_SKY_BLUE - -/obj/structure/cable/white - color = COLOR_SILVER - -/obj/structure/cable/New() - ..() - - // ensure d1 & d2 reflect the icon_state for entering and exiting cable - - var/dash = findtext(icon_state, "-") - - d1 = text2num( copytext_char( icon_state, 1, dash ) ) - - d2 = text2num( copytext_char( icon_state, dash+1 ) ) - - // hide the cable - var/turf/T = src.loc - if (level == 1) - var/hideme = !T.is_plating() && !T.is_open() - hide(hideme) - - GLOB.cable_list += src //add it to the global cable list - - -/obj/structure/cable/Destroy() // called when a cable is deleted - if(powernet) - cut_cable_from_powernet() // update the powernets - GLOB.cable_list -= src // remove it from global cable list - . = ..() // then go ahead and delete the cable - - -// Ghost examining the cable -> tells him the power -/obj/structure/cable/attack_ghost(mob/user) - if(user.client && user.client.inquisitive_ghost) - user.examinate(src) - // following code taken from attackby (multitool) - if(powernet && (powernet.avail > 0)) - to_chat(user, SPAN_WARNING("[get_wattage()] in power network.")) - else - to_chat(user, SPAN_WARNING("The cable is not powered.")) - return - -/////////////////////////////////// -// General procedures -/////////////////////////////////// - -/obj/structure/cable/proc/get_wattage() - if(powernet.avail >= 1000000000) - return "[round(powernet.avail/1000000, 0.01)] MW" - if(powernet.avail >= 1000000) - return "[round(powernet.avail/1000, 0.01)] kW" - return "[round(powernet.avail)] W" - -//If underfloor, hide the cable -/obj/structure/cable/hide(var/i) - if(istype(loc, /turf)) - set_invisibility(i ? 101 : 0) - update_icon() - -/obj/structure/cable/hides_under_flooring() - return 1 - -/obj/structure/cable/on_update_icon() - icon_state = "[d1]-[d2]" - alpha = invisibility ? 127 : 255 - -// returns the powernet this cable belongs to -/obj/structure/cable/proc/get_powernet() //TODO: remove this as it is obsolete - return powernet - -// Items usable on a cable : -// - Wirecutters : cut it duh ! -// - Cable coil : merge cables -// - Multitool : get the power currently passing through the cable -// - -/obj/structure/cable/attackby(obj/item/W, mob/user) - var/turf/T = get_turf(src) - //sanity checking - if(!isturf(T)) - return - - if(istype(T, /turf/simulated/floor) && !T.is_plating()) - return - - if(get_dist(T, user) > 1) // make sure it's close enough - to_chat(user, SPAN_WARNING("You can't lay cable at a place that far away.")) - return - - // handle catwalks and plated catwalks - var/obj/structure/catwalk/cwalk = locate(/obj/structure/catwalk, T) - if(cwalk) - if(cwalk.plated_tile && !cwalk.hatch_open) - to_chat(user, SPAN_WARNING("Open the catwalk hatch first.")) - return - else if(!cwalk.plated_tile) - to_chat(user, SPAN_WARNING("The catwalk is blocking the cable.")) - return - - if(isWirecutter(W)) - cut_wire(W, user) - - else if(isCoil(W)) - var/obj/item/stack/cable_coil/coil = W - if (coil.get_amount() < 1) - to_chat(user, "Not enough cable") - return - coil.cable_join(src, user) - - else if(isMultitool(W)) - - if(powernet && (powernet.avail > 0)) // is it powered? - to_chat(user, SPAN_WARNING("[get_wattage()] in power network.")) - - else - to_chat(user, SPAN_WARNING("The cable is not powered.")) - - shock(user, 5, 0.2) - - - else if(W.edge) - - var/delay_holder - - if(W.force < 5) - visible_message(SPAN_WARNING("[user] starts sawing away roughly at the cable with \the [W].")) - delay_holder = 8 SECONDS - else - visible_message(SPAN_WARNING("[user] begins to cut through the cable with \the [W].")) - delay_holder = 3 SECONDS - - if(user.do_skilled(delay_holder, SKILL_ELECTRICAL, src)) - cut_wire(W, user) - if(W.obj_flags & OBJ_FLAG_CONDUCTIBLE) - shock(user, 66, 0.7) - else - visible_message(SPAN_WARNING("[user] stops cutting before any damage is done.")) - - src.add_fingerprint(user) - -/obj/structure/cable/proc/cut_wire(obj/item/W, mob/user) - var/turf/T = get_turf(src) - - if(d1 == UP || d2 == UP) - to_chat(user, SPAN_WARNING("You must cut this cable from above.")) - return - - if(breaker_box) - to_chat(user, SPAN_WARNING("This cable is connected to a nearby breaker box. Use the breaker box to interact with it.")) - return - - if (shock(user, 50)) - return - - new/obj/item/stack/cable_coil(T, (src.d1 ? 2 : 1), color) - - visible_message(SPAN_WARNING("[user] cuts the cable.")) - - if(HasBelow(z)) - for(var/turf/turf in GetBelow(src)) - for(var/obj/structure/cable/c in turf) - if(c.d1 == UP || c.d2 == UP) - qdel(c) - - investigate_log("was cut by [key_name(usr, usr.client)] in [user.loc.loc]","wires") - - qdel(src) - -// shock the user with probability prb -/obj/structure/cable/proc/shock(mob/user, prb, var/siemens_coeff = 1.0) - if(!prob(prb)) - return 0 - if (electrocute_mob(user, powernet, src, siemens_coeff)) - var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread - s.set_up(5, 1, src) - s.start() - if(usr.stunned) - return 1 - return 0 - -//explosion handling -/obj/structure/cable/ex_act(severity) - switch(severity) - if(EX_ACT_DEVASTATING) - qdel(src) - if(EX_ACT_HEAVY) - if (prob(50)) - new/obj/item/stack/cable_coil(src.loc, src.d1 ? 2 : 1, color) - qdel(src) - - if(EX_ACT_LIGHT) - if (prob(25)) - new/obj/item/stack/cable_coil(src.loc, src.d1 ? 2 : 1, color) - qdel(src) - -/obj/structure/cable/proc/cableColor(var/colorC) - var/color_n = "#dd0000" - if(colorC) - color_n = colorC - color = color_n - -///////////////////////////////////////////////// -// Cable laying helpers -//////////////////////////////////////////////// - -//handles merging diagonally matching cables -//for info : direction^3 is flipping horizontally, direction^12 is flipping vertically -/obj/structure/cable/proc/mergeDiagonalsNetworks(var/direction) - - //search for and merge diagonally matching cables from the first direction component (north/south) - var/turf/T = get_step(src, direction&3)//go north/south - - for(var/obj/structure/cable/C in T) - - if(!C) - continue - - if(src == C) - continue - - if(C.d1 == (direction^3) || C.d2 == (direction^3)) //we've got a diagonally matching cable - if(!C.powernet) //if the matching cable somehow got no powernet, make him one (should not happen for cables) - var/datum/powernet/newPN = new() - newPN.add_cable(C) - - if(powernet) //if we already have a powernet, then merge the two powernets - merge_powernets(powernet,C.powernet) - else - C.powernet.add_cable(src) //else, we simply connect to the matching cable powernet - - //the same from the second direction component (east/west) - T = get_step(src, direction&12)//go east/west - - for(var/obj/structure/cable/C in T) - - if(!C) - continue - - if(src == C) - continue - if(C.d1 == (direction^12) || C.d2 == (direction^12)) //we've got a diagonally matching cable - if(!C.powernet) //if the matching cable somehow got no powernet, make him one (should not happen for cables) - var/datum/powernet/newPN = new() - newPN.add_cable(C) - - if(powernet) //if we already have a powernet, then merge the two powernets - merge_powernets(powernet,C.powernet) - else - C.powernet.add_cable(src) //else, we simply connect to the matching cable powernet - -// merge with the powernets of power objects in the given direction -/obj/structure/cable/proc/mergeConnectedNetworks(var/direction) - - var/fdir = direction ? GLOB.reverse_dir[direction] : 0 //flip the direction, to match with the source position on its turf - - if(!(d1 == direction || d2 == direction)) //if the cable is not pointed in this direction, do nothing - return - - var/turf/TB = get_zstep(src, direction) - - for(var/obj/structure/cable/C in TB) - - if(!C) - continue - - if(src == C) - continue - - if(C.d1 == fdir || C.d2 == fdir) //we've got a matching cable in the neighbor turf - if(!C.powernet) //if the matching cable somehow got no powernet, make him one (should not happen for cables) - var/datum/powernet/newPN = new() - newPN.add_cable(C) - - if(powernet) //if we already have a powernet, then merge the two powernets - merge_powernets(powernet,C.powernet) - else - C.powernet.add_cable(src) //else, we simply connect to the matching cable powernet - -// merge with the powernets of power objects in the source turf -/obj/structure/cable/proc/mergeConnectedNetworksOnTurf() - var/list/to_connect = list() - - if(!powernet) //if we somehow have no powernet, make one (should not happen for cables) - var/datum/powernet/newPN = new() - newPN.add_cable(src) - - //first let's add turf cables to our powernet - //then we'll connect machines on turf with a node cable is present - for(var/AM in loc) - if(istype(AM,/obj/structure/cable)) - var/obj/structure/cable/C = AM - if(C.d1 == d1 || C.d2 == d1 || C.d1 == d2 || C.d2 == d2) //only connected if they have a common direction - if(C.powernet == powernet) continue - if(C.powernet) - merge_powernets(powernet, C.powernet) - else - powernet.add_cable(C) //the cable was powernetless, let's just add it to our powernet - - else if(istype(AM,/obj/machinery/power/apc)) - var/obj/machinery/power/apc/N = AM - var/obj/machinery/power/terminal/terminal = N.terminal() - if(!terminal) continue // APC are connected through their terminal - - if(terminal.powernet == powernet) - continue - - to_connect += terminal //we'll connect the machines after all cables are merged - - else if(istype(AM,/obj/machinery/power)) //other power machines - var/obj/machinery/power/M = AM - - if(M.powernet == powernet) - continue - - to_connect += M //we'll connect the machines after all cables are merged - - //now that cables are done, let's connect found machines - for(var/obj/machinery/power/PM in to_connect) - if(!PM.connect_to_network()) - PM.disconnect_from_network() //if we somehow can't connect the machine to the new powernet, remove it from the old nonetheless - -////////////////////////////////////////////// -// Powernets handling helpers -////////////////////////////////////////////// - -//if powernetless_only = 1, will only get connections without powernet -/obj/structure/cable/proc/get_connections(var/powernetless_only = 0) - . = list() // this will be a list of all connected power objects - var/turf/T - - // Handle standard cables in adjacent turfs - for(var/cable_dir in list(d1, d2)) - if(cable_dir == 0) - continue - var/reverse = GLOB.reverse_dir[cable_dir] - T = get_zstep(src, cable_dir) - if(T) - for(var/obj/structure/cable/C in T) - if(C.d1 == reverse || C.d2 == reverse) - . += C - if(cable_dir & (cable_dir - 1)) // Diagonal, check for /\/\/\ style cables along cardinal directions - for(var/pair in list(NORTH|SOUTH, EAST|WEST)) - T = get_step(src, cable_dir & pair) - if(T) - var/req_dir = cable_dir ^ pair - for(var/obj/structure/cable/C in T) - if(C.d1 == req_dir || C.d2 == req_dir) - . += C - - // Handle cables on the same turf as us - for(var/obj/structure/cable/C in loc) - if(C.d1 == d1 || C.d2 == d1 || C.d1 == d2 || C.d2 == d2) // if either of C's d1 and d2 match either of ours - . += C - - if(d1 == 0) - for(var/obj/machinery/power/P in loc) - if(P.powernet == 0) continue // exclude APCs with powernet=0 - if(!powernetless_only || !P.powernet) - . += P - - // if the caller asked for powernetless cables only, dump the ones with powernets - if(powernetless_only) - for(var/obj/structure/cable/C in .) - if(C.powernet) - . -= C - -//should be called after placing a cable which extends another cable, creating a "smooth" cable that no longer terminates in the centre of a turf. -//needed as this can, unlike other placements, disconnect cables -/obj/structure/cable/proc/denode() - var/turf/T1 = loc - if(!T1) return - - var/list/powerlist = power_list(T1,src,0,0) //find the other cables that ended in the centre of the turf, with or without a powernet - if(powerlist.len>0) - var/datum/powernet/PN = new() - propagate_network(powerlist[1],PN) //propagates the new powernet beginning at the source cable - - if(PN.is_empty()) //can happen with machines made nodeless when smoothing cables - qdel(PN) - -// cut the cable's powernet at this cable and updates the powergrid -/obj/structure/cable/proc/cut_cable_from_powernet() - var/turf/T1 = loc - var/list/P_list - if(!T1) return - if(d1) - T1 = get_step(T1, d1) - P_list = power_list(T1, src, turn(d1,180),0,cable_only = 1) // what adjacently joins on to cut cable... - - P_list += power_list(loc, src, d1, 0, cable_only = 1)//... and on turf - - - if(P_list.len == 0)//if nothing in both list, then the cable was a lone cable, just delete it and its powernet - powernet.remove_cable(src) - - for(var/obj/machinery/power/P in T1)//check if it was powering a machine - if(!P.connect_to_network()) //can't find a node cable on a the turf to connect to - P.disconnect_from_network() //remove from current network (and delete powernet) - return - - // remove the cut cable from its turf and powernet, so that it doesn't get count in propagate_network worklist - forceMove(null) - powernet.remove_cable(src) //remove the cut cable from its powernet - - var/datum/powernet/newPN = new()// creates a new powernet... - propagate_network(P_list[1], newPN)//... and propagates it to the other side of the cable - - // Disconnect machines connected to nodes - if(d1 == 0) // if we cut a node (O-X) cable - for(var/obj/machinery/power/P in T1) - if(!P.connect_to_network()) //can't find a node cable on a the turf to connect to - P.disconnect_from_network() //remove from current network - - powernet = null // And finally null the powernet var. - -/////////////////////////////////////////////// -// The cable coil object, used for laying cable -/////////////////////////////////////////////// - -//////////////////////////////// -// Definitions -//////////////////////////////// - -#define MAXCOIL 30 - -/obj/item/stack/cable_coil - name = "multipurpose cable coil" - icon = 'icons/obj/power.dmi' - icon_state = "coil" - randpixel = 2 - amount = MAXCOIL - max_amount = MAXCOIL - color = COLOR_MAROON - desc = "A coil of wiring, used for delicate electronics and basic power transfer." - throwforce = 0 - w_class = ITEM_SIZE_NORMAL - throw_speed = 2 - throw_range = 5 - matter = list(MATERIAL_STEEL = 50, MATERIAL_GLASS = 20, MATERIAL_PLASTIC = 20) - obj_flags = OBJ_FLAG_CONDUCTIBLE - slot_flags = SLOT_BELT - item_state = "coil" - attack_verb = list("whipped", "lashed", "disciplined", "flogged") - stacktype = /obj/item/stack/cable_coil - singular_name = "length" - plural_name = "lengths" - -/obj/item/stack/cable_coil/single - amount = 1 - -/obj/item/stack/cable_coil/single/New(var/loc, var/length = 1, var/param_color = null) - ..(loc, length, param_color) - -/obj/item/stack/cable_coil/cyborg - name = "cable coil synthesizer" - desc = "A device that makes cable." - gender = NEUTER - matter = null - uses_charge = 1 - charge_costs = list(1) - -/obj/item/stack/cable_coil/New(loc, length = MAXCOIL, var/param_color = null) - ..() - src.amount = length - if (param_color) // It should be red by default, so only recolor it if parameter was specified. - color = param_color - update_icon() - update_wclass() - -/////////////////////////////////// -// General procedures -/////////////////////////////////// - -//you can use wires to heal robotics -/obj/item/stack/cable_coil/attack(var/atom/A, var/mob/living/user, var/def_zone) - if(ishuman(A) && user.a_intent == I_HELP) - var/mob/living/carbon/human/H = A - var/obj/item/organ/external/S = H.organs_by_name[user.zone_sel.selecting] - - if (!S) return - if(!BP_IS_ROBOTIC(S) || user.a_intent != I_HELP) - return ..() - - if(BP_IS_BRITTLE(S)) - to_chat(user, SPAN_WARNING("\The [H]'s [S.name] is hard and brittle - \the [src] cannot repair it.")) - return 1 - - var/use_amt = min(src.amount, Ceil(S.burn_dam/3), 5) - if(can_use(use_amt)) - if(S.robo_repair(3 * use_amt, DAMAGE_BURN, "some damaged wiring", src, user)) - src.use(use_amt) - return - return ..() - - -/obj/item/stack/cable_coil/on_update_icon() - if (!color) - color = GLOB.possible_cable_colours[pick(GLOB.possible_cable_colours)] - if(amount == 1) - icon_state = "coil1" - SetName("cable piece") - else if(amount == 2) - icon_state = "coil2" - SetName("cable piece") - else if(amount > 2 && amount != max_amount) - icon_state = "coil" - SetName(initial(name)) - else - icon_state = "coil-max" - SetName(initial(name)) - -/obj/item/stack/cable_coil/proc/set_cable_color(var/selected_color, var/user) - if(!selected_color) - return - - var/final_color = GLOB.possible_cable_colours[selected_color] - if(!final_color) - selected_color = "Red" - final_color = GLOB.possible_cable_colours[selected_color] - color = final_color - to_chat(user, SPAN_NOTICE("You change \the [src]'s color to [lowertext(selected_color)].")) - -/obj/item/stack/cable_coil/proc/update_wclass() - if(amount == 1) - w_class = ITEM_SIZE_TINY - else - w_class = ITEM_SIZE_SMALL - -/obj/item/stack/cable_coil/verb/make_restraint() - set name = "Make Cable Restraints" - set category = "Object" - var/mob/M = usr - - if(ishuman(M) && !M.incapacitated()) - if(!istype(usr.loc,/turf)) return - if(!src.use(15)) - to_chat(usr, SPAN_WARNING("You need at least 15 lengths to make restraints!")) - return - var/obj/item/handcuffs/cable/B = new /obj/item/handcuffs/cable(usr.loc) - B.color = color - to_chat(usr, SPAN_NOTICE("You wind some cable together to make some restraints.")) - else - to_chat(usr, SPAN_NOTICE("You cannot do that.")) - -/obj/item/stack/cable_coil/cyborg/verb/set_colour() - set name = "Change Colour" - set category = "Object" - - var/selected_type = input("Pick new colour.", "Cable Colour", null, null) as null|anything in GLOB.possible_cable_colours - set_cable_color(selected_type, usr) - -// Items usable on a cable coil : -// - Wirecutters : cut them duh ! -// - Cable coil : merge cables -/obj/item/stack/cable_coil/proc/can_merge(var/obj/item/stack/cable_coil/C) - return color == C.color - -/obj/item/stack/cable_coil/cyborg/can_merge() - return 1 - -/obj/item/stack/cable_coil/transfer_to(obj/item/stack/cable_coil/S) - if(!istype(S)) - return 0 - if(!(can_merge(S) || S.can_merge(src))) - return 0 - - return ..() - -/////////////////////////////////////////////// -// Cable laying procedures -////////////////////////////////////////////// - -// called when cable_coil is clicked on a turf (special exception made for space & open space) -/obj/item/stack/cable_coil/proc/turf_place(turf/F, mob/user) - // all four of these checks should already be handeled by the attackby behavior and behavior of the cable coil object, but just in case I kept them here - if(!isturf(user.loc)) - return - - if(get_amount() < 1) // Out of cable (should never happen) - to_chat(user, SPAN_WARNING("There is no cable left.")) - return - - if(get_dist(F,user) > 1) // Too far (also should never happen unless fuckery) - to_chat(user, SPAN_WARNING("You can't lay cable at a place that far away.")) - return - - if(istype(F, /turf/simulated/floor) && !F.is_plating()) // Making sure it's not a floor tile - to_chat(user, SPAN_WARNING("Remove the tiling first.")) - return - // end of hopefully unnecessary checks - - // catwalk handling - var/obj/structure/catwalk/cwalk = locate(/obj/structure/catwalk, F) - if(cwalk) - if(cwalk.plated_tile && !cwalk.hatch_open) - to_chat(user, SPAN_WARNING("Open the catwalk hatch first.")) - return - else if(!cwalk.plated_tile) - to_chat(user, SPAN_WARNING("You can't reach underneath the catwalk.")) - return - - // Check if the player is clicking an open space - var/end_dir = 0 - if(istype(F, /turf/simulated/open) && !locate(/obj/structure/lattice, F)) - if(!can_use(2)) - to_chat(user, SPAN_WARNING("You don't have enough cable to hang a wire down.")) - return - end_dir = DOWN - - var/dirn - if(user.loc == F) - dirn = user.dir // if laying on the tile we're on, lay in the direction we're facing - else - dirn = get_dir(F, user) - - for(var/obj/structure/cable/LC in F) - if((LC.d1 == dirn && LC.d2 == end_dir ) || ( LC.d2 == dirn && LC.d1 == end_dir)) - to_chat(user, SPAN_WARNING("There's already a cable at that position.")) - return - - put_cable(F, user, end_dir, dirn) - if(end_dir == DOWN) - put_cable(GetBelow(F), user, UP, 0) - -// called when cable_coil is click on an installed obj/cable -// or click on a turf that already contains a "node" cable -/obj/item/stack/cable_coil/proc/cable_join(obj/structure/cable/C, mob/user) - var/turf/U = user.loc - var/turf/T = C.loc - // making sure the player is not in an invalid place - if(!isturf(U)) - return - - if(U == T) //if clicked on the turf we're standing on, try to put a cable in the direction we're facing - turf_place(T,user) - return - - var/dirn = get_dir(C, user) - - // one end of the clicked cable is pointing towards us - if(C.d1 == dirn || C.d2 == dirn) - if(istype(U, /turf/simulated/floor) && !U.is_plating()) // make sure we aren't placing cable connections under floors - to_chat(user, SPAN_WARNING("Remove the tiling first.")) - return - // make sure we aren't placing cable connections in open space (both kinds) with no support - else if((istype(U, /turf/space) || istype(U, /turf/simulated/open)) && !locate(/obj/structure/lattice, U)) - to_chat(user, SPAN_WARNING("The cable connection needs something to be secured to.")) - return - else - // cable is pointing at us, we're standing on an open tile - // so create a stub pointing at the clicked cable on our tile - var/fdirn = turn(dirn, 180) // the opposite direction - - for(var/obj/structure/cable/LC in U) // check to make sure there's not a cable there already - if(LC.d1 == fdirn || LC.d2 == fdirn) - to_chat(user, SPAN_WARNING("There's already a cable at that position.")) - return - put_cable(U,user,0,fdirn) - return - - // exisiting cable doesn't point at our position, so see if it's a stub - else if(C.d1 == 0) - // if so, make it a full cable pointing from it's old direction to our dirn - var/nd1 = C.d2 // these will be the new directions - var/nd2 = dirn - - - if(nd1 > nd2) // swap directions to match icons/states - nd1 = dirn - nd2 = C.d2 - - - for(var/obj/structure/cable/LC in T) // check to make sure there's no matching cable - if(LC == C) // skip the cable we're interacting with - continue - if((LC.d1 == nd1 && LC.d2 == nd2) || (LC.d1 == nd2 && LC.d2 == nd1) ) // make sure no cable matches either direction - to_chat(user, SPAN_WARNING("There's already a cable at that position.")) - return - - - C.cableColor(color) - - C.d1 = nd1 - C.d2 = nd2 - - C.add_fingerprint() - C.update_icon() - - - C.mergeConnectedNetworks(C.d1) //merge the powernets... - C.mergeConnectedNetworks(C.d2) //...in the two new cable directions - C.mergeConnectedNetworksOnTurf() - - if(C.d1 & (C.d1 - 1))// if the cable is layed diagonally, check the others 2 possible directions - C.mergeDiagonalsNetworks(C.d1) - - if(C.d2 & (C.d2 - 1))// if the cable is layed diagonally, check the others 2 possible directions - C.mergeDiagonalsNetworks(C.d2) - - use(1) - - if (C.shock(user, 50)) - if (prob(50)) //fail - new/obj/item/stack/cable_coil(C.loc, 2, C.color) - qdel(C) - return - - C.denode()// this call may have disconnected some cables that terminated on the centre of the turf, if so split the powernets. - return - -/obj/item/stack/cable_coil/proc/put_cable(turf/F, mob/user, d1, d2) - if(!istype(F)) - return - - var/obj/structure/cable/C = new(F) - C.cableColor(color) - C.d1 = d1 - C.d2 = d2 - C.add_fingerprint(user) - C.update_icon() - - //create a new powernet with the cable, if needed it will be merged later - var/datum/powernet/PN = new() - PN.add_cable(C) - - C.mergeConnectedNetworks(C.d1) //merge the powernets... - C.mergeConnectedNetworks(C.d2) //...in the two new cable directions - C.mergeConnectedNetworksOnTurf() - - if(C.d1 & (C.d1 - 1))// if the cable is layed diagonally, check the others 2 possible directions - C.mergeDiagonalsNetworks(C.d1) - - if(C.d2 & (C.d2 - 1))// if the cable is layed diagonally, check the others 2 possible directions - C.mergeDiagonalsNetworks(C.d2) - - use(1) - if (C.shock(user, 50)) - if (prob(50)) //fail - new/obj/item/stack/cable_coil(C.loc, 1, C.color) - qdel(C) - -////////////////////////////// -// Misc. -///////////////////////////// - -/obj/item/stack/cable_coil/cut - item_state = "coil2" - -/obj/item/stack/cable_coil/cut/New(loc) - ..() - src.amount = rand(1,2) - update_icon() - update_wclass() - -/obj/item/stack/cable_coil/yellow - color = COLOR_AMBER - -/obj/item/stack/cable_coil/blue - color = COLOR_CYAN_BLUE - -/obj/item/stack/cable_coil/green - color = COLOR_GREEN - -/obj/item/stack/cable_coil/pink - color = COLOR_PURPLE - -/obj/item/stack/cable_coil/orange - color = COLOR_ORANGE - -/obj/item/stack/cable_coil/cyan - color = COLOR_SKY_BLUE - -/obj/item/stack/cable_coil/white - color = COLOR_SILVER - -/obj/item/stack/cable_coil/random/New() - color = GLOB.possible_cable_colours[pick(GLOB.possible_cable_colours)] - ..() - -// Produces cable coil from a rig power cell. -/obj/item/stack/cable_coil/fabricator - name = "cable fabricator" - var/cost_per_cable = 10 - -/obj/item/stack/cable_coil/fabricator/split(var/tamount, var/force=FALSE) - return - -/obj/item/stack/cable_coil/fabricator/get_cell() - if(istype(loc, /obj/item/rig_module)) - var/obj/item/rig_module/module = loc - return module.get_cell() - if(istype(loc, /mob/living/silicon/robot)) - var/mob/living/silicon/robot/R = loc - return R.get_cell() - -/obj/item/stack/cable_coil/fabricator/use(var/used) - var/obj/item/cell/cell = get_cell() - if(cell) cell.use(used * cost_per_cable) - -/obj/item/stack/cable_coil/fabricator/get_amount() - var/obj/item/cell/cell = get_cell() - . = (cell ? Floor(cell.charge / cost_per_cable) : 0) - -/obj/item/stack/cable_coil/fabricator/get_max_amount() - var/obj/item/cell/cell = get_cell() - . = (cell ? Floor(cell.maxcharge / cost_per_cable) : 0) diff --git a/code/modules/power/cable_logic.dm b/code/modules/power/cable_logic.dm deleted file mode 100644 index 3b5b67a3ea4f1..0000000000000 --- a/code/modules/power/cable_logic.dm +++ /dev/null @@ -1,292 +0,0 @@ -#define LOGIC_HIGH 5 - -//Indicators only have one input and no outputs -/obj/machinery/logic/indicator - //Input is searched from the 'dir' direction - var/obj/structure/cable/input - -/obj/machinery/logic/indicator/process() - if(input) - return 1 - - - if(!input) - var/turf/T = get_step(src, dir) - if(T) - var/inv_dir = turn(dir, 180) - for(var/obj/structure/cable/C in T) - if(C.d1 == inv_dir || C.d2 == inv_dir) - input = C - return 1 - - return 0 //If it gets to here, it means no suitable wire to link to was found. - -/obj/machinery/logic/indicator/bulb - icon = 'icons/obj/lighting.dmi' - icon_state = "bulb0" - -/obj/machinery/logic/indicator/bulb/process() - if(!..()) //Parent proc checks if input1 exists. - return - - var/datum/powernet/pn_input = input.powernet - if(!pn_input) - return - - if(pn_input.avail >= LOGIC_HIGH) - icon_state = "bulb1" - else - icon_state = "bulb0" - - - - -//Sensors only have one output and no inputs -/obj/machinery/logic/sensor - //Output is searched from the 'dir' direction - var/obj/structure/cable/output - -/obj/machinery/logic/sensor/process() - if(output) - return 1 - - if(!output) - var/turf/T = get_step(src, dir) - if(T) - var/inv_dir = turn(dir, 180) - for(var/obj/structure/cable/C in T) - if(C.d1 == inv_dir || C.d2 == inv_dir) - output = C - return 1 - - return 0 //If it gets to here, it means no suitable wire to link to was found. - -//Constant high generator. This will continue to send a signal of LOGIC_HIGH as long as it exists. -/obj/machinery/logic/sensor/constant_high - icon = 'icons/obj/atmospherics/outlet_injector.dmi' - icon_state = "off" - -/obj/machinery/logic/sensor/constant_high/process() - if(!..()) //Parent proc checks if input1 exists. - return - - var/datum/powernet/pn_output = output.powernet - if(!pn_output) - return - - pn_output.newavail = max(pn_output.avail, LOGIC_HIGH) - - - - -//ONE INPUT logic elements have one input and one output -/obj/machinery/logic/oneinput - var/dir_input = 2 - var/dir_output = 1 - var/obj/structure/cable/input - var/obj/structure/cable/output - icon = 'icons/atmos/heat.dmi' - icon_state = "intact" - -/obj/machinery/logic/oneinput/process() - if(input && output) - return 1 - - if(!dir_input || !dir_output) - return 0 - - if(!input) - var/turf/T = get_step(src, dir_input) - if(T) - var/inv_dir = turn(dir_input, 180) - for(var/obj/structure/cable/C in T) - if(C.d1 == inv_dir || C.d2 == inv_dir) - input = C - - if(!output) - var/turf/T = get_step(src, dir_output) - if(T) - var/inv_dir = turn(dir_output, 180) - for(var/obj/structure/cable/C in T) - if(C.d1 == inv_dir || C.d2 == inv_dir) - output = C - - return 0 //On the process() call, where everything is still being searched for, it returns 0. It will return 1 on the next process() call. - -//NOT GATE -/obj/machinery/logic/oneinput/not/process() - if(!..()) //Parent proc checks if input1, input2 and output exist. - return - - var/datum/powernet/pn_input = input.powernet - - if(!pn_input) - return - - var/datum/powernet/pn_output = output.powernet - if(!pn_output) - return - - if( !(pn_input.avail >= LOGIC_HIGH)) - pn_output.newavail = max(pn_output.avail, LOGIC_HIGH) //Set the output avilable power to 5 or whatever it was before. - else - pn_output.draw_power(LOGIC_HIGH) //Otherwise increase the load to 5 - - - - - - - - - -//TWO INPUT logic elements have two inputs and one output -/obj/machinery/logic/twoinput - var/dir_input1 = 2 - var/dir_input2 = 8 - var/dir_output = 1 - var/obj/structure/cable/input1 - var/obj/structure/cable/input2 - var/obj/structure/cable/output - icon = 'icons/obj/atmospherics/mixer.dmi' - icon_state = "intact_off" - -/obj/machinery/logic/twoinput/process() - if(input1 && input2 && output) - return 1 - - if(!dir_input1 || !dir_input2 || !dir_output) - return 0 - - if(!input1) - var/turf/T = get_step(src, dir_input1) - if(T) - var/inv_dir = turn(dir_input1, 180) - for(var/obj/structure/cable/C in T) - if(C.d1 == inv_dir || C.d2 == inv_dir) - input1 = C - - if(!input2) - var/turf/T = get_step(src, dir_input2) - if(T) - var/inv_dir = turn(dir_input2, 180) - for(var/obj/structure/cable/C in T) - if(C.d1 == inv_dir || C.d2 == inv_dir) - input2 = C - - if(!output) - var/turf/T = get_step(src, dir_output) - if(T) - var/inv_dir = turn(dir_output, 180) - for(var/obj/structure/cable/C in T) - if(C.d1 == inv_dir || C.d2 == inv_dir) - output = C - - return 0 //On the process() call, where everything is still being searched for, it returns 0. It will return 1 on the next process() call. - -//AND GATE -/obj/machinery/logic/twoinput/and/process() - if(!..()) //Parent proc checks if input1, input2 and output exist. - return - - var/datum/powernet/pn_input1 = input1.powernet - var/datum/powernet/pn_input2 = input2.powernet - - if(!pn_input1 || !pn_input2) - return - - var/datum/powernet/pn_output = output.powernet - if(!pn_output) - return - - if( (pn_input1.avail >= LOGIC_HIGH) && (pn_input2.avail >= LOGIC_HIGH) ) - pn_output.newavail = max(pn_output.avail, LOGIC_HIGH) //Set the output avilable power to 5 or whatever it was before. - else - pn_output.draw_power(LOGIC_HIGH) //Otherwise increase the load to 5 - -//OR GATE -/obj/machinery/logic/twoinput/or/process() - if(!..()) //Parent proc checks if input1, input2 and output exist. - return - - var/datum/powernet/pn_input1 = input1.powernet - var/datum/powernet/pn_input2 = input2.powernet - - if(!pn_input1 || !pn_input2) - return - - var/datum/powernet/pn_output = output.powernet - if(!pn_output) - return - - if( (pn_input1.avail >= LOGIC_HIGH) || (pn_input2.avail >= LOGIC_HIGH) ) - pn_output.newavail = max(pn_output.avail, LOGIC_HIGH) //Set the output avilable power to 5 or whatever it was before. - else - pn_output.draw_power(LOGIC_HIGH) //Otherwise increase the load to 5 - -//XOR GATE -/obj/machinery/logic/twoinput/xor/process() - if(!..()) //Parent proc checks if input1, input2 and output exist. - return - - var/datum/powernet/pn_input1 = input1.powernet - var/datum/powernet/pn_input2 = input2.powernet - - if(!pn_input1 || !pn_input2) - return - - var/datum/powernet/pn_output = output.powernet - if(!pn_output) - return - - if( (pn_input1.avail >= LOGIC_HIGH) != (pn_input2.avail >= LOGIC_HIGH) ) - pn_output.newavail = max(pn_output.avail, LOGIC_HIGH) //Set the output avilable power to 5 or whatever it was before. - else - pn_output.draw_power(LOGIC_HIGH) //Otherwise increase the load to 5 - -//XNOR GATE (EQUIVALENCE) -/obj/machinery/logic/twoinput/xnor/process() - if(!..()) //Parent proc checks if input1, input2 and output exist. - return - - var/datum/powernet/pn_input1 = input1.powernet - var/datum/powernet/pn_input2 = input2.powernet - - if(!pn_input1 || !pn_input2) - return - - var/datum/powernet/pn_output = output.powernet - if(!pn_output) - return - - if( (pn_input1.avail >= LOGIC_HIGH) == (pn_input2.avail >= LOGIC_HIGH) ) - pn_output.newavail = max(pn_output.avail, LOGIC_HIGH) //Set the output avilable power to 5 or whatever it was before. - else - pn_output.draw_power(LOGIC_HIGH) //Otherwise increase the load to 5 - -#define RELAY_POWER_TRANSFER 2000 //How much power a relay transfers through. - -//RELAY - input1 governs the flow from input2 to output -/obj/machinery/logic/twoinput/relay/process() - if(!..()) //Parent proc checks if input1, input2 and output exist. - return - - var/datum/powernet/pn_input1 = input1.powernet - - if(!pn_input1) - return - - if( pn_input1.avail >= LOGIC_HIGH ) - var/datum/powernet/pn_input2 = input2.powernet - var/datum/powernet/pn_output = output.powernet - - if(!pn_output) - return - - if(pn_input2.avail >= RELAY_POWER_TRANSFER) - pn_input2.draw_power(RELAY_POWER_TRANSFER) - pn_output.newavail += RELAY_POWER_TRANSFER - - -#undef RELAY_POWER_TRANSFER -#undef LOGIC_HIGH \ No newline at end of file diff --git a/code/modules/power/cell.dm b/code/modules/power/cell.dm deleted file mode 100644 index 7b01dd5e63d2a..0000000000000 --- a/code/modules/power/cell.dm +++ /dev/null @@ -1,239 +0,0 @@ -// Power Cells -/obj/item/cell - name = "power cell" - desc = "A rechargable electrochemical power cell." - icon = 'icons/obj/power.dmi' - icon_state = "cell" - item_state = "cell" - origin_tech = list(TECH_POWER = 1) - force = 5.0 - throwforce = 5.0 - throw_speed = 3 - throw_range = 5 - w_class = ITEM_SIZE_NORMAL - var/charge // Current charge - var/maxcharge = 1000 // Capacity in Wh - var/overlay_state - matter = list(MATERIAL_STEEL = 700, MATERIAL_GLASS = 50, MATERIAL_PLASTIC = 20) - -/obj/item/cell/Initialize() - . = ..() - if(type == /obj/item/cell) - crash_with("Invalid use of cell base type") - return INITIALIZE_HINT_QDEL - if(isnull(charge)) - charge = maxcharge - update_icon() - -/obj/item/cell/drain_power(var/drain_check, var/surge, var/power = 0) - - if(drain_check) - return 1 - - if(charge <= 0) - return 0 - - var/cell_amt = power * CELLRATE - - return use(cell_amt) / CELLRATE - -/obj/item/cell/on_update_icon() - - var/new_overlay_state = null - switch(percent()) - if(95 to 100) - new_overlay_state = "cell-o2" - if(25 to 95) - new_overlay_state = "cell-o1" - if(0.05 to 25) - new_overlay_state = "cell-o0" - - if(new_overlay_state != overlay_state) - overlay_state = new_overlay_state - overlays.Cut() - if(overlay_state) - overlays += image('icons/obj/power.dmi', overlay_state) - -/obj/item/cell/proc/percent() // return % charge of cell - return maxcharge && (100.0*charge/maxcharge) - -/obj/item/cell/proc/fully_charged() - return (charge == maxcharge) - -// checks if the power cell is able to provide the specified amount of charge -/obj/item/cell/proc/check_charge(var/amount) - return (charge >= amount) - -// use power from a cell, returns the amount actually used -/obj/item/cell/proc/use(var/amount) - var/used = min(charge, amount) - charge -= used - update_icon() - return used - -// Checks if the specified amount can be provided. If it can, it removes the amount -// from the cell and returns 1. Otherwise does nothing and returns 0. -/obj/item/cell/proc/checked_use(var/amount) - if(!check_charge(amount)) - return 0 - use(amount) - return 1 - -/obj/item/cell/proc/give(var/amount) - var/amount_used = min(maxcharge-charge,amount) - charge += amount_used - update_icon() - return amount_used - -/obj/item/cell/examine(mob/user) - . = ..() - to_chat(user, "The label states it's capacity is [maxcharge] Wh") - to_chat(user, "The charge meter reads [round(src.percent(), 0.1)]%") - -/obj/item/cell/emp_act(severity) - //remove this once emp changes on dev are merged in - if(isrobot(loc)) - var/mob/living/silicon/robot/R = loc - severity *= R.cell_emp_mult - - // Lose 1/2, 1/4, 1/6 of the current charge per hit or 1/4, 1/8, 1/12 of the max charge per hit, whichever is highest - charge -= max(charge / (2 * severity), maxcharge/(4 * severity)) - if (charge < 0) - charge = 0 - ..() - - -/obj/item/cell/proc/get_electrocute_damage() - switch (charge) - if (1000000 to INFINITY) - return min(rand(50,160),rand(50,160)) - if (200000 to 1000000-1) - return min(rand(25,80),rand(25,80)) - if (100000 to 200000-1)//Ave powernet - return min(rand(20,60),rand(20,60)) - if (50000 to 100000-1) - return min(rand(15,40),rand(15,40)) - if (1000 to 50000-1) - return min(rand(10,20),rand(10,20)) - else - return 0 - -/obj/item/cell/get_cell() - return src //no shit Sherlock - -// SUBTYPES BELOW - -// Smaller variant, used by energy guns and similar small devices. -/obj/item/cell/device - name = "device power cell" - desc = "A small power cell designed to power handheld devices." - icon_state = "device" - w_class = ITEM_SIZE_SMALL - force = 0 - throw_speed = 5 - throw_range = 7 - maxcharge = 100 - matter = list(MATERIAL_STEEL = 70, MATERIAL_GLASS = 5) - -/obj/item/cell/device/Initialize() - . = ..() - if (type == /obj/item/cell/device) - return INITIALIZE_HINT_QDEL - -/obj/item/cell/device/variable/Initialize(mapload, charge_amount) - maxcharge = charge_amount - return ..(mapload) - -/obj/item/cell/device/standard - name = "standard device power cell" - maxcharge = 25 - -/obj/item/cell/device/high - name = "advanced device power cell" - desc = "A small power cell designed to power more energy-demanding devices." - icon_state = "hdevice" - maxcharge = 100 - matter = list(MATERIAL_STEEL = 70, MATERIAL_GLASS = 6) - -/obj/item/cell/crap - name = "old power cell" - desc = "A cheap old power cell. It's probably been in use for quite some time now." - origin_tech = list(TECH_POWER = 0) - maxcharge = 100 - matter = list(MATERIAL_STEEL = 700, MATERIAL_GLASS = 40, MATERIAL_PLASTIC = 20) - -/obj/item/cell/crap/empty - charge = 0 - -/obj/item/cell/standard - name = "standard power cell" - desc = "A standard and relatively cheap power cell, commonly used." - origin_tech = list(TECH_POWER = 0) - maxcharge = 500 - matter = list(MATERIAL_STEEL = 700, MATERIAL_GLASS = 40, MATERIAL_PLASTIC = 20) - -/obj/item/cell/high - name = "advanced power cell" - desc = "An advanced high-grade power cell, for use in important systems." - origin_tech = list(TECH_POWER = 2) - icon_state = "hcell" - maxcharge = 1000 - matter = list(MATERIAL_STEEL = 700, MATERIAL_GLASS = 60, MATERIAL_PLASTIC = 20) - -/obj/item/cell/high/empty - charge = 0 - -/obj/item/cell/super - name = "enhanced power cell" - desc = "A very advanced power cell with increased energy density, for use in critical applications." - origin_tech = list(TECH_POWER = 5) - icon_state = "scell" - maxcharge = 2000 - matter = list(MATERIAL_STEEL = 700, MATERIAL_GLASS = 70, MATERIAL_ALUMINIUM = 20) - -/obj/item/cell/super/empty - charge = 0 - -/obj/item/cell/hyper - name = "superior power cell" - desc = "Pinnacle of power storage technology, this very expensive power cell provides the best energy density reachable with conventional electrochemical cells." - origin_tech = list(TECH_POWER = 6) - icon_state = "hpcell" - maxcharge = 3000 - matter = list(MATERIAL_STEEL = 700, MATERIAL_GLASS = 80, MATERIAL_ALUMINIUM = 20) - -/obj/item/cell/hyper/empty - charge = 0 - -/obj/item/cell/infinite - name = "experimental power cell" - desc = "This special experimental power cell has both very large capacity, and ability to recharge itself by draining power from contained bluespace pocket." - icon_state = "icell" - origin_tech = null - maxcharge = 3000 - matter = list(MATERIAL_STEEL = 700, MATERIAL_GLASS = 80, MATERIAL_ALUMINIUM = 20) - -/obj/item/cell/infinite/check_charge() - return 1 - -/obj/item/cell/infinite/use(amount) - return amount - - -/obj/item/cell/potato - name = "potato battery" - desc = "A rechargable starch based power cell." - origin_tech = list(TECH_POWER = 1) - icon = 'icons/obj/power.dmi' //'icons/obj/harvest.dmi' - icon_state = "potato_cell" //"potato_battery" - maxcharge = 20 - - -/obj/item/cell/slime - name = "charged slime core" - desc = "A yellow slime core infused with phoron, it crackles with power." - origin_tech = list(TECH_POWER = 2, TECH_BIO = 4) - icon = 'icons/mob/simple_animal/slimes.dmi' //'icons/obj/harvest.dmi' - icon_state = "yellow slime extract" //"potato_battery" - maxcharge = 200 - matter = null diff --git a/code/modules/power/debug_items.dm b/code/modules/power/debug_items.dm deleted file mode 100644 index 8203af0e3a504..0000000000000 --- a/code/modules/power/debug_items.dm +++ /dev/null @@ -1,65 +0,0 @@ -/obj/machinery/power/debug_items - icon = 'icons/obj/power.dmi' - icon_state = "tracker" - anchored = TRUE - density = TRUE - var/show_extended_information = 1 // Set to 0 to disable extra information on examining (for example, when used on admin events) - -/obj/machinery/power/debug_items/examine(mob/user) - . = ..() - if(show_extended_information) - show_info(user) - -/obj/machinery/power/debug_items/proc/show_info(var/mob/user) - if(!powernet) - to_chat(user, "This device is not connected to a powernet") - return - - to_chat(user, "Connected to powernet: [powernet]") - to_chat(user, "Available power: [num2text(powernet.avail, 20)] W") - to_chat(user, "Load: [num2text(powernet.viewload, 20)] W") - to_chat(user, "Has alert: [powernet.problem ? "YES" : "NO"]") - to_chat(user, "Cables: [powernet.cables.len]") - to_chat(user, "Nodes: [powernet.nodes.len]") - - -// An infinite power generator. Adds energy to connected cable. -/obj/machinery/power/debug_items/infinite_generator - name = "Fractal Energy Reactor" - desc = "An experimental power generator." - var/power_generation_rate = 1000000 - -/obj/machinery/power/debug_items/infinite_generator/Process() - add_avail(power_generation_rate) - -/obj/machinery/power/debug_items/infinite_generator/show_info(var/mob/user) - ..() - to_chat(user, "Generator is providing [num2text(power_generation_rate, 20)] W") - - -// A cable powersink, without the explosion/network alarms normal powersink causes. -/obj/machinery/power/debug_items/infinite_cable_powersink - name = "Null Point Core" - desc = "An experimental device that disperses energy, used for grid testing purposes." - var/power_usage_rate = 0 - var/last_used = 0 - -/obj/machinery/power/debug_items/infinite_cable_powersink/Process() - last_used = draw_power(power_usage_rate) - -/obj/machinery/power/debug_items/infinite_cable_powersink/show_info(var/mob/user) - ..() - to_chat(user, "Power sink is demanding [num2text(power_usage_rate, 20)] W") - to_chat(user, "[num2text(last_used, 20)] W was actually used last tick") - - -/obj/machinery/power/debug_items/infinite_apc_powersink - name = "APC Dummy Load" - desc = "A dummy load that connects to an APC, used for load testing purposes." - use_power = POWER_USE_ACTIVE - active_power_usage = 0 - -/obj/machinery/power/debug_items/infinite_apc_powersink/show_info(var/mob/user) - ..() - to_chat(user, "Dummy load is using [num2text(active_power_usage, 20)] W") - to_chat(user, "Powered: [powered() ? "YES" : "NO"]") diff --git a/code/modules/power/fusion/_setup.dm b/code/modules/power/fusion/_setup.dm deleted file mode 100644 index 5e98798ba8fb1..0000000000000 --- a/code/modules/power/fusion/_setup.dm +++ /dev/null @@ -1,80 +0,0 @@ -#define SETUP_OK 1 // All good -#define SETUP_WARNING 2 // Something that shouldn't happen happened, but it's not critical so we will continue -#define SETUP_ERROR 3 // Something bad happened, and it's important so we won't continue setup. -#define SETUP_DELAYED 4 // Wait for other things first. - -/datum/admins/proc/setup_fusion() - set category = "Debug" - set name = "Setup Fusion Core" - set desc = "Allows you to start the R-UST engine." - - if (!istype(src,/datum/admins)) - src = usr.client.holder - if (!istype(src,/datum/admins)) - to_chat(usr, "Error: you are not an admin!") - return - - if(!(locate(/obj/machinery/power/fusion_core/mapped) in world)) - to_chat(usr, "This map is not appropriate for this verb.") - return - - var/response = input(usr, "Are you sure?", "Engine setup") as null|anything in list("No", "Yes") - if(!response || response == "No") - return - - var/errors = 0 - var/warnings = 0 - var/success = 0 - - log_and_message_admins("## FUSION CORE SETUP - Setup initiated by [usr].") - - for(var/obj/machinery/fusion_fuel_injector/mapped/injector in SSmachines.machinery) - injector.cur_assembly = new /obj/item/fuel_assembly/deuterium(injector) - injector.BeginInjecting() - - var/obj/machinery/power/fusion_core/mapped/core = locate() in SSmachines.machinery - if(core.jumpstart(15000)) - var/list/delayed_objects = list() - - // SETUP PHASE - for(var/obj/effect/engine_setup/S in world) - var/result = S.activate(0) - switch(result) - if(SETUP_OK) - success++ - continue - if(SETUP_WARNING) - warnings++ - continue - if(SETUP_ERROR) - errors++ - log_and_message_admins("## FUSION CORE SETUP - Error encountered! Aborting.") - break - if(SETUP_DELAYED) - delayed_objects.Add(S) - continue - - if(!errors) - for(var/obj/effect/engine_setup/S in delayed_objects) - var/result = S.activate(1) - switch(result) - if(SETUP_OK) - success++ - continue - if(SETUP_WARNING) - warnings++ - continue - if(SETUP_ERROR) - errors++ - log_and_message_admins("## FUSION CORE SETUP - Error encountered! Aborting.") - break - else - log_and_message_admins("## FUSION CORE SETUP - Error encountered! Aborting.") - errors++ - - log_and_message_admins("## FUSION CORE SETUP - Setup completed with [errors] errors, [warnings] warnings and [success] successful steps.") - -#undef SETUP_OK -#undef SETUP_WARNING -#undef SETUP_ERROR -#undef SETUP_DELAYED \ No newline at end of file diff --git a/code/modules/power/fusion/consoles/_consoles.dm b/code/modules/power/fusion/consoles/_consoles.dm deleted file mode 100644 index 2a6331c1c731b..0000000000000 --- a/code/modules/power/fusion/consoles/_consoles.dm +++ /dev/null @@ -1,49 +0,0 @@ -/obj/machinery/computer/fusion - icon_keyboard = "power_key" - icon_screen = "rust_screen" - light_color = COLOR_ORANGE - idle_power_usage = 250 - active_power_usage = 500 - var/ui_template - var/initial_id_tag - -/obj/machinery/computer/fusion/Initialize() - set_extension(src, /datum/extension/local_network_member) - if(initial_id_tag) - var/datum/extension/local_network_member/fusion = get_extension(src, /datum/extension/local_network_member) - fusion.set_tag(null, initial_id_tag) - . = ..() - -/obj/machinery/computer/fusion/proc/get_local_network() - var/datum/extension/local_network_member/fusion = get_extension(src, /datum/extension/local_network_member) - return fusion.get_local_network() - -/obj/machinery/computer/fusion/attackby(var/obj/item/thing, var/mob/user) - if(isMultitool(thing)) - var/datum/extension/local_network_member/fusion = get_extension(src, /datum/extension/local_network_member) - fusion.get_new_tag(user) - return - else - return ..() - -/obj/machinery/computer/fusion/interface_interact(var/mob/user) - ui_interact(user) - return TRUE - -/obj/machinery/computer/fusion/proc/build_ui_data() - var/datum/extension/local_network_member/fusion = get_extension(src, /datum/extension/local_network_member) - var/datum/local_network/lan = fusion.get_local_network() - var/list/data = list() - data["id"] = lan ? lan.id_tag : "unset" - data["name"] = name - . = data - -/obj/machinery/computer/fusion/ui_interact(var/mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1) - if(ui_template) - var/list/data = build_ui_data() - ui = SSnano.try_update_ui(user, src, ui_key, ui, data, force_open) - if (!ui) - ui = new(user, src, ui_key, ui_template, name, 400, 600) - ui.set_initial_data(data) - ui.open() - ui.set_auto_update(1) \ No newline at end of file diff --git a/code/modules/power/fusion/consoles/core_control.dm b/code/modules/power/fusion/consoles/core_control.dm deleted file mode 100644 index e56a76dc78223..0000000000000 --- a/code/modules/power/fusion/consoles/core_control.dm +++ /dev/null @@ -1,63 +0,0 @@ -/obj/machinery/computer/fusion/core_control - name = "\improper R-UST Mk. 8 core control" - ui_template = "fusion_core_control.tmpl" - -/obj/machinery/computer/fusion/core_control/OnTopic(var/mob/user, var/href_list, var/datum/topic_state/state) - - if(href_list["toggle_active"] || href_list["str"]) - var/obj/machinery/power/fusion_core/C = locate(href_list["machine"]) - if(!istype(C)) - return TOPIC_NOACTION - - var/datum/local_network/lan = get_local_network() - if(!lan || !lan.is_connected(C)) - return TOPIC_NOACTION - - if(!C.check_core_status()) - return TOPIC_NOACTION - - if(href_list["toggle_active"]) - if(!C.Startup()) //Startup() whilst the device is active will return null. - if(!C.owned_field.is_shutdown_safe()) - if(alert(user, "Shutting down this fusion core without proper safety procedures will cause serious damage, do you wish to continue?", "Shut Down?", "Yes", "No") == "No") - return TOPIC_NOACTION - C.Shutdown() - return TOPIC_REFRESH - - if(href_list["str"] && C) - var/val = text2num(href_list["str"]) - if(!val) //Value is 0, which is manual entering. - C.set_strength(input("Enter the new field power density (W.m^-3)", "Fusion Control", C.field_strength) as num) - else - C.set_strength(C.field_strength + val) - return TOPIC_REFRESH - -/obj/machinery/computer/fusion/core_control/build_ui_data() - . = ..() - var/datum/extension/local_network_member/fusion = get_extension(src, /datum/extension/local_network_member) - var/datum/local_network/lan = fusion.get_local_network() - var/list/cores = list() - if(lan) - var/list/fusion_cores = lan.get_devices(/obj/machinery/power/fusion_core) - for(var/i = 1 to LAZYLEN(fusion_cores)) - var/list/core = list() - var/obj/machinery/power/fusion_core/C = fusion_cores[i] - core["id"] = "#[i]" - core["ref"] = "\ref[C]" - core["field"] = !isnull(C.owned_field) - core["power"] = "[C.field_strength/10.0] tesla" - core["size"] = C.owned_field ? "[C.owned_field.size] meter\s" : "Field offline." - core["instability"] = C.owned_field ? "[C.owned_field.percent_unstable * 100]%" : "Field offline." - core["temperature"] = C.owned_field ? "[C.owned_field.plasma_temperature + 295]K" : "Field offline." - core["powerstatus"] = "[C.avail()]/[C.active_power_usage] W" - var/fuel_string = "
              [thing]") - if(istype(thing, /obj/item/paper)) - LAZYADD(dat, "ReadWrite") - else if(istype(thing, /obj/item/photo)) - LAZYADD(dat, "Look") - LAZYADD(dat, "Remove
              [capitalize(name)]


              [thing]Destroy[thing][save_graffiti.message][save_graffiti.author]Destroy[save_graffiti.message][save_graffiti.author][paper.info][paper.name][paper.last_modified_ckey]Destroy[paper.info][paper.name][paper.last_modified_ckey]
              " - if(C.owned_field && LAZYLEN(C.owned_field.reactants)) - for(var/reactant in C.owned_field.reactants) - fuel_string += "" - else - fuel_string += "" - fuel_string += "
              [reactant][C.owned_field.reactants[reactant]]
              Nothing.
              " - core["fuel"] = fuel_string - - cores += list(core) - .["cores"] = cores diff --git a/code/modules/power/fusion/consoles/gyrotron_control.dm b/code/modules/power/fusion/consoles/gyrotron_control.dm deleted file mode 100644 index d27837b2b2765..0000000000000 --- a/code/modules/power/fusion/consoles/gyrotron_control.dm +++ /dev/null @@ -1,63 +0,0 @@ -/obj/machinery/computer/fusion/gyrotron - name = "gyrotron control console" - icon_keyboard = "med_key" - icon_screen = "gyrotron_screen" - light_color = COLOR_BLUE - ui_template = "fusion_gyrotron_control.tmpl" - -/obj/machinery/computer/fusion/gyrotron/OnTopic(var/mob/user, var/href_list, var/datum/topic_state/state) - - if(href_list["modifypower"] || href_list["modifyrate"] || href_list["toggle"]) - - var/obj/machinery/power/emitter/gyrotron/G = locate(href_list["machine"]) - if(!istype(G)) - return TOPIC_NOACTION - - var/datum/local_network/lan = get_local_network() - var/list/gyrotrons = lan.get_devices(/obj/machinery/power/emitter/gyrotron) - if(!lan || !gyrotrons || !gyrotrons[G]) - return TOPIC_NOACTION - - if(href_list["modifypower"]) - var/new_val = input("Enter new emission power level (1 - 50)", "Modifying power level", G.mega_energy) as num - if(!istype(G)) - return TOPIC_NOACTION - if(!new_val) - to_chat(user, SPAN_WARNING("That's not a valid number.")) - return TOPIC_NOACTION - G.mega_energy = clamp(new_val, 1, 50) - G.change_power_consumption(G.mega_energy * 1500, POWER_USE_ACTIVE) - return TOPIC_REFRESH - - if(href_list["modifyrate"]) - var/new_val = input("Enter new emission delay between 2 and 10 seconds.", "Modifying emission rate", G.rate) as num - if(!istype(G)) - return TOPIC_NOACTION - if(!new_val) - to_chat(user, SPAN_WARNING("That's not a valid number.")) - return TOPIC_NOACTION - G.rate = clamp(new_val, 2, 10) - return TOPIC_REFRESH - - if(href_list["toggle"]) - G.activate(user) - return TOPIC_REFRESH - -/obj/machinery/computer/fusion/gyrotron/build_ui_data() - . = ..() - var/datum/extension/local_network_member/fusion = get_extension(src, /datum/extension/local_network_member) - var/datum/local_network/lan = fusion.get_local_network() - var/list/gyrotrons = list() - if(lan && gyrotrons) - var/list/lan_gyrotrons = lan.get_devices(/obj/machinery/power/emitter/gyrotron) - for(var/i = 1 to LAZYLEN(lan_gyrotrons)) - var/list/gyrotron = list() - var/obj/machinery/power/emitter/gyrotron/G = lan_gyrotrons[i] - gyrotron["id"] = "#[i]" - gyrotron["ref"] = "\ref[G]" - gyrotron["active"] = G.active - gyrotron["firedelay"] = G.rate - gyrotron["energy"] = G.mega_energy - gyrotrons += list(gyrotron) - .["gyrotrons"] = gyrotrons - diff --git a/code/modules/power/fusion/consoles/injector_control.dm b/code/modules/power/fusion/consoles/injector_control.dm deleted file mode 100644 index b8eb62e7f7ef4..0000000000000 --- a/code/modules/power/fusion/consoles/injector_control.dm +++ /dev/null @@ -1,74 +0,0 @@ -/obj/machinery/computer/fusion/fuel_control - name = "fuel injection control computer" - icon_keyboard = "rd_key" - icon_screen = "fuel_screen" - ui_template = "fusion_injector_control.tmpl" - -/obj/machinery/computer/fusion/fuel_control/OnTopic(var/mob/user, var/href_list, var/datum/topic_state/state) - var/datum/local_network/lan = get_local_network() - var/list/fuel_injectors = lan.get_devices(/obj/machinery/fusion_fuel_injector) - - if(href_list["global_toggle"]) - if(!lan || !fuel_injectors) - return TOPIC_NOACTION - - for(var/obj/machinery/fusion_fuel_injector/F in fuel_injectors) - if(F.injecting) - F.StopInjecting() - else - F.BeginInjecting() - return TOPIC_REFRESH - - if(href_list["global_rate"]) - if(!lan || !fuel_injectors) - return TOPIC_NOACTION - var/new_injection_rate = input("Enter a new injection rate between 1 and 100. This will affect all injectors!", "Modifying injection rate") as null|num - var/new_injection_clamped = clamp(new_injection_rate, 1, 100) / 100 - if(!new_injection_rate) - return TOPIC_NOACTION - if(!CanInteract(user,state)) - return TOPIC_NOACTION - for(var/obj/machinery/fusion_fuel_injector/F as anything in fuel_injectors) - F.injection_rate = new_injection_clamped - return TOPIC_REFRESH - - if(href_list["toggle_injecting"] || href_list["injection_rate"]) - var/obj/machinery/fusion_fuel_injector/I = locate((href_list["toggle_injecting"] || href_list["machine"])) - if(!istype(I) || !lan || !fuel_injectors || !fuel_injectors[I]) - return TOPIC_NOACTION - - if(href_list["toggle_injecting"]) - if(I.injecting) - I.StopInjecting() - else - I.BeginInjecting() - - if(href_list["injection_rate"]) - var/new_injection_rate = input("Enter a new injection rate between 1 and 100.", "Modifying injection rate", I.injection_rate) as null|num - if(!istype(I)) - return TOPIC_NOACTION - if(!new_injection_rate) - return TOPIC_NOACTION - if(!CanInteract(user,state)) - return TOPIC_NOACTION - I.injection_rate = clamp(new_injection_rate, 1, 100) / 100 - return TOPIC_REFRESH - -/obj/machinery/computer/fusion/fuel_control/build_ui_data() - . = ..() - var/datum/extension/local_network_member/fusion = get_extension(src, /datum/extension/local_network_member) - var/datum/local_network/lan = fusion.get_local_network() - var/list/injectors = list() - if(lan) - var/list/fuel_injectors = lan.get_devices(/obj/machinery/fusion_fuel_injector) - for(var/i = 1 to LAZYLEN(fuel_injectors)) - var/list/injector = list() - var/obj/machinery/fusion_fuel_injector/I = fuel_injectors[i] - injector["id"] = "#[i]" - injector["ref"] = "\ref[I]" - injector["injecting"] = I.injecting - injector["fueltype"] = "[I.cur_assembly ? I.cur_assembly.fuel_type : "No Fuel Inserted"]" - injector["depletion"] = "[I.cur_assembly ? (I.cur_assembly.percent_depleted * 100) : 100]%" - injector["injection_rate"] = "[I.injection_rate * 100]%" - injectors += list(injector) - .["injectors"] = injectors diff --git a/code/modules/power/fusion/core/_core.dm b/code/modules/power/fusion/core/_core.dm deleted file mode 100644 index 1031b4d39e5c9..0000000000000 --- a/code/modules/power/fusion/core/_core.dm +++ /dev/null @@ -1,130 +0,0 @@ -#define MAX_FIELD_STR 10000 -#define MIN_FIELD_STR 1 - -/obj/machinery/power/fusion_core - name = "\improper R-UST Mk. 8 Tokamak core" - desc = "An enormous solenoid for generating extremely high power electromagnetic fields. It includes a kinetic energy harvester." - icon = 'icons/obj/machines/power/fusion_core.dmi' - icon_state = "core0" - layer = ABOVE_HUMAN_LAYER - density = TRUE - use_power = POWER_USE_IDLE - idle_power_usage = 50 - active_power_usage = 500 //multiplied by field strength - anchored = FALSE - construct_state = /decl/machine_construction/default/panel_closed - uncreated_component_parts = null - stat_immune = 0 - base_type = /obj/machinery/power/fusion_core - - var/obj/effect/fusion_em_field/owned_field - var/field_strength = 1//0.01 - var/initial_id_tag - -/obj/machinery/power/fusion_core/mapped - anchored = TRUE - -/obj/machinery/power/fusion_core/Initialize() - . = ..() - connect_to_network() - set_extension(src, /datum/extension/local_network_member) - if(initial_id_tag) - var/datum/extension/local_network_member/fusion = get_extension(src, /datum/extension/local_network_member) - fusion.set_tag(null, initial_id_tag) - -/obj/machinery/power/fusion_core/Process() - if((stat & BROKEN) || !powernet || !owned_field) - Shutdown() - -/obj/machinery/power/fusion_core/Topic(href, href_list) - if(..()) - return 1 - if(href_list["str"]) - var/dif = text2num(href_list["str"]) - field_strength = min(max(field_strength + dif, MIN_FIELD_STR), MAX_FIELD_STR) - change_power_consumption(500 * field_strength, POWER_USE_ACTIVE) - if(owned_field) - owned_field.ChangeFieldStrength(field_strength) - -/obj/machinery/power/fusion_core/proc/Startup() - if(owned_field) - return - owned_field = new(loc, src) - owned_field.ChangeFieldStrength(field_strength) - icon_state = "core1" - update_use_power(POWER_USE_ACTIVE) - . = 1 - -/obj/machinery/power/fusion_core/proc/Shutdown(var/force_rupture) - if(owned_field) - icon_state = "core0" - if(force_rupture || owned_field.plasma_temperature > 1000) - owned_field.Rupture() - else - owned_field.RadiateAll() - qdel(owned_field) - owned_field = null - update_use_power(POWER_USE_IDLE) - -/obj/machinery/power/fusion_core/proc/AddParticles(var/name, var/quantity = 1) - if(owned_field) - owned_field.AddParticles(name, quantity) - . = 1 - -/obj/machinery/power/fusion_core/bullet_act(var/obj/item/projectile/Proj) - if(owned_field) - . = owned_field.bullet_act(Proj) - -/obj/machinery/power/fusion_core/proc/set_strength(var/value) - value = clamp(value, MIN_FIELD_STR, MAX_FIELD_STR) - field_strength = value - change_power_consumption(5 * value, POWER_USE_ACTIVE) - if(owned_field) - owned_field.ChangeFieldStrength(value) - -/obj/machinery/power/fusion_core/physical_attack_hand(var/mob/user) - visible_message("\The [user] hugs \the [src] to make it feel better!") - if(owned_field) - Shutdown() - return TRUE - -/obj/machinery/power/fusion_core/attackby(var/obj/item/W, var/mob/user) - - if(owned_field) - to_chat(user,"Shut \the [src] off first!") - return - - if(isMultitool(W)) - var/datum/extension/local_network_member/fusion = get_extension(src, /datum/extension/local_network_member) - fusion.get_new_tag(user) - return - - else if(isWrench(W)) - anchored = !anchored - playsound(src.loc, 'sound/items/Ratchet.ogg', 75, 1) - if(anchored) - user.visible_message("[user.name] secures [src.name] to the floor.", \ - "You secure the [src.name] to the floor.", \ - "You hear a ratchet") - else - user.visible_message("[user.name] unsecures [src.name] from the floor.", \ - "You unsecure the [src.name] from the floor.", \ - "You hear a ratchet") - return - - return ..() - -/obj/machinery/power/fusion_core/proc/jumpstart(var/field_temperature) - field_strength = 501 // Generally a good size. - Startup() - if(!owned_field) - return FALSE - owned_field.plasma_temperature = field_temperature - return TRUE - -/obj/machinery/power/fusion_core/proc/check_core_status() - if(stat & BROKEN) - return FALSE - if(idle_power_usage > avail()) - return FALSE - . = TRUE diff --git a/code/modules/power/fusion/core/core_field.dm b/code/modules/power/fusion/core/core_field.dm deleted file mode 100644 index c0377a79d9dc0..0000000000000 --- a/code/modules/power/fusion/core/core_field.dm +++ /dev/null @@ -1,541 +0,0 @@ -#define FUSION_ENERGY_PER_K 20 -#define FUSION_INSTABILITY_DIVISOR 50000 -#define FUSION_RUPTURE_THRESHOLD 10000 -#define FUSION_REACTANT_CAP 10000 - -/obj/effect/fusion_em_field - name = "electromagnetic field" - desc = "A coruscating, barely visible field of energy. It is shaped like a slightly flattened torus." - alpha = 30 - layer = 4 - light_color = COLOR_RED - - plane = EFFECTS_ABOVE_LIGHTING_PLANE - - var/size = 1 - var/energy = 0 - var/plasma_temperature = 0 - var/radiation = 0 - var/field_strength = 0.01 - var/tick_instability = 0 - var/percent_unstable = 0 - - var/obj/machinery/power/fusion_core/owned_core - var/list/reactants = list() - var/list/particle_catchers = list() - - var/list/ignore_types = list( - /obj/item/projectile, - /obj/effect, - /obj/structure/cable, - /obj/machinery/atmospherics, - /obj/machinery/air_sensor - ) - - var/light_min_range = 2 - var/light_min_power = 0.2 - var/light_max_range = 18 - var/light_max_power = 1 - - var/last_range - var/last_power - - var/last_reactants = 0 - - particles = new/particles/fusion - - var/animating_ripple = FALSE - -/obj/effect/fusion_em_field/proc/UpdateVisuals() - //Take the particle system and edit it - - //size - var/radius = ((size-1) / 2) * WORLD_ICON_SIZE - - particles.position = generator("circle", radius - size, radius + size, NORMAL_RAND) - - //Radiation affects drift - var/radiationfactor = clamp((radiation * 0.001), 0, 0.5) - particles.drift = generator("circle", (0.2 + radiationfactor), NORMAL_RAND) - - particles.spawning = last_reactants * 0.9 + Interpolate(0, 200, clamp(plasma_temperature / 70000, 0, 1)) - - -/obj/effect/fusion_em_field/New(loc, var/obj/machinery/power/fusion_core/new_owned_core) - ..() - - filters = list(filter(type = "ripple", size = 4, "radius" = 1, "falloff" = 1) - , filter(type="outline", size = 2, color = COLOR_RED) - , filter(type="bloom", size=3, offset = 0.5, alpha = 235)) - - set_light(light_min_power, light_min_range / 10, light_min_range) - last_range = light_min_range - last_power = light_min_power - - owned_core = new_owned_core - if(!owned_core) - qdel(src) - return - - particles.spawning = 0 //Turn off particles until something calls for it - - //create the gimmicky things to handle field collisions - var/obj/effect/fusion_particle_catcher/catcher - - catcher = new (locate(src.x,src.y,src.z)) - catcher.parent = src - catcher.SetSize(1) - particle_catchers.Add(catcher) - - for(var/iter=1,iter<=6,iter++) - catcher = new (locate(src.x-iter,src.y,src.z)) - catcher.parent = src - catcher.SetSize((iter*2)+1) - particle_catchers.Add(catcher) - - catcher = new (locate(src.x+iter,src.y,src.z)) - catcher.parent = src - catcher.SetSize((iter*2)+1) - particle_catchers.Add(catcher) - - catcher = new (locate(src.x,src.y+iter,src.z)) - catcher.parent = src - catcher.SetSize((iter*2)+1) - particle_catchers.Add(catcher) - - catcher = new (locate(src.x,src.y-iter,src.z)) - catcher.parent = src - catcher.SetSize((iter*2)+1) - particle_catchers.Add(catcher) - - START_PROCESSING(SSobj, src) - -/obj/effect/fusion_em_field/Initialize() - . = ..() - addtimer(CALLBACK(src, .proc/update_light_colors), 10 SECONDS, TIMER_LOOP) - -/obj/effect/fusion_em_field/proc/update_light_colors() - var/use_range - var/use_power - switch (plasma_temperature) - if (-INFINITY to 1000) - light_color = COLOR_RED - use_range = light_min_range - use_power = light_min_power - alpha = 30 - if (100000 to INFINITY) - light_color = COLOR_VIOLET - use_range = light_max_range - use_power = light_max_power - alpha = 230 - else - var/temp_mod = ((plasma_temperature-5000)/20000) - use_range = light_min_range + Ceil((light_max_range-light_min_range)*temp_mod) - use_power = light_min_power + Ceil((light_max_power-light_min_power)*temp_mod) - switch (plasma_temperature) - if (1000 to 6000) - light_color = COLOR_ORANGE - alpha = 50 - if (6000 to 20000) - light_color = COLOR_YELLOW - alpha = 80 - if (20000 to 50000) - light_color = COLOR_GREEN - alpha = 120 - if (50000 to 70000) - light_color = COLOR_CYAN - alpha = 160 - if (70000 to 100000) - light_color = COLOR_BLUE - alpha = 200 - - if (last_range != use_range || last_power != use_power || color != light_color) - set_light(min(use_power, 1), use_range / 6, use_range) //cap first arg at 1 to avoid breaking lighting stuff. - last_range = use_range - last_power = use_power - //Temperature based color - particles.gradient = list(0, COLOR_WHITE, 0.85, light_color) - UNLINT(var/dm_filter/outline = filters[2]) - UNLINT(outline.color = light_color) - UNLINT(var/dm_filter/bloom = filters[3]) - UNLINT(bloom.alpha = alpha) - -/obj/effect/fusion_em_field/Process() - //make sure the field generator is still intact - if(QDELETED(owned_core)) - qdel(src) - return - - // Take some gas up from our environment. - var/added_particles = FALSE - var/datum/gas_mixture/uptake_gas = owned_core.loc.return_air() - if(uptake_gas) - uptake_gas = uptake_gas.remove_by_flag(XGM_GAS_FUSION_FUEL, rand(50,100)) - if(uptake_gas && uptake_gas.total_moles) - for(var/gasname in uptake_gas.gas) - if(uptake_gas.gas[gasname]*10 > reactants[gasname]) - AddParticles(gasname, uptake_gas.gas[gasname]*10) - uptake_gas.adjust_gas(gasname, -(uptake_gas.gas[gasname]), update=FALSE) - added_particles = TRUE - if(added_particles) - uptake_gas.update_values() - - //let the particles inside the field react - React() - - // Dump power to our powernet. - owned_core.add_avail(FUSION_ENERGY_PER_K * plasma_temperature) - - // Energy decay. - if(plasma_temperature >= 1) - var/lost = plasma_temperature*0.01 - radiation += lost - plasma_temperature -= lost - - //handle some reactants formatting - for(var/reactant in reactants) - var/amount = reactants[reactant] - if(amount < 1) - reactants.Remove(reactant) - else if(amount >= FUSION_REACTANT_CAP) - var/radiate = rand(3 * amount / 4, amount / 4) - reactants[reactant] -= radiate - radiation += radiate - - check_instability() - Radiate() - if(radiation) - SSradiation.radiate(src, round(radiation*0.001)) - return 1 - -/obj/effect/fusion_em_field/proc/check_instability() - if(tick_instability > 0) - percent_unstable += (tick_instability*size)/FUSION_INSTABILITY_DIVISOR - tick_instability = 0 - UpdateVisuals() - else - if(percent_unstable < 0) - percent_unstable = 0 - else - if(percent_unstable > 1) - percent_unstable = 1 - if(percent_unstable > 0) - percent_unstable = max(0, percent_unstable-rand(0.01,0.03)) - UpdateVisuals() - - if(percent_unstable >= 1) - owned_core.Shutdown(force_rupture=1) - else - if(percent_unstable > 0.5 && prob(percent_unstable*100)) - var/ripple_radius = (((size-1) / 2) * WORLD_ICON_SIZE) + WORLD_ICON_SIZE - var/wave_size = 4 - if(plasma_temperature < FUSION_RUPTURE_THRESHOLD) - visible_message("\The [src] ripples uneasily, like a disturbed pond.") - else - var/flare - var/fuel_loss - var/rupture - if(percent_unstable < 0.7) - visible_message("\The [src] ripples uneasily, like a disturbed pond.") - fuel_loss = prob(5) - else if(percent_unstable < 0.9) - visible_message("\The [src] undulates violently, shedding plumes of plasma!") - flare = prob(50) - fuel_loss = prob(20) - rupture = prob(5) - wave_size += 2 - else - visible_message("\The [src] is wracked by a series of horrendous distortions, buckling and twisting like a living thing!") - flare = 1 - fuel_loss = prob(50) - rupture = prob(25) - wave_size += 4 - - if(rupture) - owned_core.Shutdown(force_rupture=1) - else - var/lost_plasma = (plasma_temperature*percent_unstable) - radiation += lost_plasma - if(flare) - radiation += plasma_temperature/2 - wave_size += 6 - plasma_temperature -= lost_plasma - - if(fuel_loss) - for(var/particle in reactants) - var/lost_fuel = reactants[particle]*percent_unstable - radiation += lost_fuel - reactants[particle] -= lost_fuel - if(reactants[particle] <= 0) - reactants.Remove(particle) - Radiate() - Ripple(wave_size, ripple_radius) - return - -/obj/effect/fusion_em_field/proc/Ripple(_size, _radius) - if(!animating_ripple) - UNLINT(var/dm_filter/ripple = filters[1]) - UNLINT(ripple.size = _size) - animate(filters[1], time = 0, loop = 1, radius = 0, flags=ANIMATION_PARALLEL) - animate(time = 2 SECONDS, radius = _radius) - animating_ripple = TRUE - addtimer(CALLBACK(src, .proc/ResetRipple), 2 SECONDS, TIMER_CLIENT_TIME) - -/obj/effect/fusion_em_field/proc/ResetRipple() - animating_ripple = FALSE - -/obj/effect/fusion_em_field/proc/is_shutdown_safe() - return plasma_temperature < 1000 - -/obj/effect/fusion_em_field/proc/Rupture() - visible_message("\The [src] shudders like a dying animal before flaring to eye-searing brightness and rupturing!") - set_light(1, 0.1, 15, 2, "#ccccff") - empulse(get_turf(src), Ceil(plasma_temperature/1000), Ceil(plasma_temperature/300)) - sleep(5) - RadiateAll() - explosion(get_turf(owned_core),-1,-1,8,10) // Blow out all the windows. - return - -/obj/effect/fusion_em_field/proc/ChangeFieldStrength(var/new_strength) - var/calc_size = 1 - if(new_strength <= 50) - calc_size = 1 - else if(new_strength <= 200) - calc_size = 3 - else if(new_strength <= 500) - calc_size = 5 - else if(new_strength <= 1000) - calc_size = 7 - else if(new_strength <= 2000) - calc_size = 9 - else if(new_strength <= 5000) - calc_size = 11 - else - calc_size = 13 - field_strength = new_strength - change_size(calc_size) - -/obj/effect/fusion_em_field/proc/AddEnergy(var/a_energy, var/a_plasma_temperature) - energy += a_energy - plasma_temperature += a_plasma_temperature - if(a_energy && percent_unstable > 0) - percent_unstable -= a_energy/10000 - if(percent_unstable < 0) - percent_unstable = 0 - while(energy >= 100) - energy -= 100 - plasma_temperature += 1 - UpdateVisuals() - -/obj/effect/fusion_em_field/proc/AddParticles(var/name, var/quantity = 1) - if(name in reactants) - reactants[name] += quantity - else if(name != "proton" && name != "electron" && name != "neutron") - reactants.Add(name) - reactants[name] = quantity - UpdateVisuals() - -/obj/effect/fusion_em_field/proc/RadiateAll(var/ratio_lost = 1) - - // Create our plasma field and dump it into our environment. - var/turf/T = get_turf(src) - if(istype(T)) - var/datum/gas_mixture/plasma - for(var/reactant in reactants) - if(!gas_data.name[reactant]) - continue - if(!plasma) - plasma = new - plasma.adjust_gas(reactant, max(1,round(reactants[reactant]*0.1)), 0) // *0.1 to compensate for *10 when uptaking gas. - if(!plasma) - return - plasma.temperature = (plasma_temperature/2) - plasma.update_values() - T.assume_air(plasma) - T.hotspot_expose(plasma_temperature) - plasma = null - - // Radiate all our unspent fuel and energy. - for(var/particle in reactants) - radiation += reactants[particle] - reactants.Remove(particle) - radiation += plasma_temperature/2 - plasma_temperature = 0 - - SSradiation.radiate(src, round(radiation*0.001)) - Radiate() - -/obj/effect/fusion_em_field/proc/Radiate() - if(istype(loc, /turf)) - var/empsev = max(1, min(3, Ceil(size/2))) - for(var/atom/movable/AM in range(max(1,Floor(size/2)), loc)) - - if(AM == src || AM == owned_core || !AM.simulated) - continue - - var/skip_obstacle - for(var/ignore_path in ignore_types) - if(istype(AM, ignore_path)) - skip_obstacle = TRUE - break - if(skip_obstacle) - continue - - AM.visible_message("The field buckles visibly around \the [AM]!") - tick_instability += rand(30,50) - AM.emp_act(empsev) - - if(owned_core && owned_core.loc) - var/datum/gas_mixture/environment = owned_core.loc.return_air() - if(environment && environment.temperature < (T0C+1000)) // Putting an upper bound on it to stop it being used in a TEG. - environment.add_thermal_energy(plasma_temperature*20000) - radiation = 0 - -/obj/effect/fusion_em_field/proc/change_size(var/newsize = 1) - var/changed = 0 - if( ((newsize-1)%2==0) && (newsize<=13) ) - size = newsize - changed = newsize - UpdateVisuals() - - for(var/obj/effect/fusion_particle_catcher/catcher in particle_catchers) - catcher.UpdateSize() - return changed - -//the !!fun!! part -/obj/effect/fusion_em_field/proc/React() - //loop through the reactants in random order - var/list/react_pool = reactants.Copy() - last_reactants = 0 - - //cant have any reactions if there aren't any reactants present - if(react_pool.len) - //determine a random amount to actually react this cycle, and remove it from the standard pool - //this is a hack, and quite nonrealistic :( - for(var/reactant in react_pool) - react_pool[reactant] = rand(Floor(react_pool[reactant]/2),react_pool[reactant]) - reactants[reactant] -= react_pool[reactant] - if(!react_pool[reactant]) - react_pool -= reactant - - //loop through all the reacting reagents, picking out random reactions for them - var/list/produced_reactants = new/list - var/list/p_react_pool = react_pool.Copy() - while(p_react_pool.len) - //pick one of the unprocessed reacting reagents randomly - var/cur_p_react = pick(p_react_pool) - p_react_pool.Remove(cur_p_react) - - //grab all the possible reactants to have a reaction with - var/list/possible_s_reacts = react_pool.Copy() - //if there is only one of a particular reactant, then it can not react with itself so remove it - possible_s_reacts[cur_p_react] -= 1 - if(possible_s_reacts[cur_p_react] < 1) - possible_s_reacts.Remove(cur_p_react) - - //loop through and work out all the possible reactions - var/list/possible_reactions - for(var/cur_s_react in possible_s_reacts) - if(possible_s_reacts[cur_s_react] < 1) - continue - var/decl/fusion_reaction/cur_reaction = get_fusion_reaction(cur_p_react, cur_s_react) - if(cur_reaction && plasma_temperature >= cur_reaction.minimum_energy_level) - LAZYDISTINCTADD(possible_reactions, cur_reaction) - - //if there are no possible reactions here, abandon this primary reactant and move on - if(!LAZYLEN(possible_reactions)) - continue - - /// Sort based on reaction priority to avoid deut-deut eating all the deut before deut-trit can run etc. - sortTim(possible_reactions, /proc/cmp_fusion_reaction_des) - - //split up the reacting atoms between the possible reactions - while(possible_reactions.len) - var/decl/fusion_reaction/cur_reaction = possible_reactions[1] - possible_reactions.Remove(cur_reaction) - - //set the randmax to be the lower of the two involved reactants - var/max_num_reactants = react_pool[cur_reaction.p_react] > react_pool[cur_reaction.s_react] ? \ - react_pool[cur_reaction.s_react] : react_pool[cur_reaction.p_react] - if(max_num_reactants < 1) - continue - - //make sure we have enough energy - if(plasma_temperature < cur_reaction.minimum_reaction_temperature) - continue - - if(plasma_temperature < max_num_reactants * cur_reaction.energy_consumption) - max_num_reactants = round(plasma_temperature / cur_reaction.energy_consumption) - if(max_num_reactants < 1) - continue - - //randomly determined amount to react - var/amount_reacting = rand(1, max_num_reactants) - - //removing the reacting substances from the list of substances that are primed to react this cycle - //if there aren't enough of that substance (there should be) then modify the reactant amounts accordingly - if( react_pool[cur_reaction.p_react] - amount_reacting >= 0 ) - react_pool[cur_reaction.p_react] -= amount_reacting - else - amount_reacting = react_pool[cur_reaction.p_react] - react_pool[cur_reaction.p_react] = 0 - //same again for secondary reactant - if(react_pool[cur_reaction.s_react] - amount_reacting >= 0 ) - react_pool[cur_reaction.s_react] -= amount_reacting - else - react_pool[cur_reaction.p_react] += amount_reacting - react_pool[cur_reaction.p_react] - amount_reacting = react_pool[cur_reaction.s_react] - react_pool[cur_reaction.s_react] = 0 - - plasma_temperature -= max_num_reactants * cur_reaction.energy_consumption // Remove the consumed energy. - plasma_temperature += max_num_reactants * cur_reaction.energy_production // Add any produced energy. - radiation += max_num_reactants * cur_reaction.radiation // Add any produced radiation. - tick_instability += max_num_reactants * cur_reaction.instability - last_reactants += amount_reacting - - // Create the reaction products. - for(var/reactant in cur_reaction.products) - var/success = 0 - for(var/check_reactant in produced_reactants) - if(check_reactant == reactant) - produced_reactants[reactant] += cur_reaction.products[reactant] * amount_reacting - success = 1 - break - if(!success) - produced_reactants[reactant] = cur_reaction.products[reactant] * amount_reacting - - // Handle anything special. If this proc returns true, abort the current reaction. - if(cur_reaction.handle_reaction_special(src)) - return - - // This reaction is done, and can't be repeated this sub-cycle. - possible_reactions.Remove(cur_reaction.s_react) - - // Loop through the newly produced reactants and add them to the pool. - for(var/reactant in produced_reactants) - AddParticles(reactant, produced_reactants[reactant]) - - // Check whether there are reactants left, and add them back to the pool. - for(var/reactant in react_pool) - AddParticles(reactant, react_pool[reactant]) - - UpdateVisuals() - -/obj/effect/fusion_em_field/Destroy() - set_light(0) - RadiateAll() - QDEL_NULL_LIST(particle_catchers) - if(owned_core) - owned_core.owned_field = null - owned_core = null - STOP_PROCESSING(SSobj, src) - . = ..() - -/obj/effect/fusion_em_field/bullet_act(var/obj/item/projectile/Proj) - AddEnergy(Proj.damage) - update_icon() - return 0 - -#undef FUSION_INSTABILITY_DIVISOR -#undef FUSION_RUPTURE_THRESHOLD -#undef FUSION_REACTANT_CAP diff --git a/code/modules/power/fusion/fuel_assembly/fuel_assembly.dm b/code/modules/power/fusion/fuel_assembly/fuel_assembly.dm deleted file mode 100644 index 4116b8699df57..0000000000000 --- a/code/modules/power/fusion/fuel_assembly/fuel_assembly.dm +++ /dev/null @@ -1,77 +0,0 @@ -/obj/item/fuel_assembly - name = "fuel rod assembly" - icon = 'icons/obj/machines/power/fusion.dmi' - icon_state = "fuel_assembly" - layer = 4 - - var/material_name - var/percent_depleted = 1 - var/list/rod_quantities = list() - var/fuel_type = "composite" - var/fuel_colour - var/radioactivity = 0 - var/initial_amount - -/obj/item/fuel_assembly/New(var/newloc, var/_material, var/_colour) - fuel_type = _material - fuel_colour = _colour - ..(newloc) - -/obj/item/fuel_assembly/Initialize() - . = ..() - - if(ispath(fuel_type, /datum/reagent)) - var/datum/reagent/R = fuel_type - fuel_type = lowertext(initial(R.name)) - fuel_colour = initial(R.color) - initial_amount = 50000 - - var/material/material = SSmaterials.get_material_by_name(fuel_type) - if(istype(material)) - initial_amount = material.units_per_sheet * 5 // Fuel compressor eats 5 sheets. - SetName("[material.use_name] fuel rod assembly") - desc = "A fuel rod for a fusion reactor. This one is made from [material.use_name]." - fuel_colour = material.icon_colour - fuel_type = material.use_name - if(material.radioactivity) - radioactivity = material.radioactivity - desc += " It is warm to the touch." - START_PROCESSING(SSobj, src) - if(material.luminescence) - set_light(material.luminescence, material.luminescence, material.icon_colour) - else - SetName("[fuel_type] fuel rod assembly") - desc = "A fuel rod for a fusion reactor. This one is made from [fuel_type]." - - icon_state = "blank" - var/image/I = image(icon, "fuel_assembly") - I.color = fuel_colour - overlays += list(I, image(icon, "fuel_assembly_bracket")) - rod_quantities[fuel_type] = initial_amount - -/obj/item/fuel_assembly/Process() - if(!radioactivity) - return PROCESS_KILL - - if(istype(loc, /turf)) - SSradiation.radiate(src, max(1,Ceil(radioactivity/15))) - -/obj/item/fuel_assembly/Destroy() - STOP_PROCESSING(SSobj, src) - return ..() - -// Mapper shorthand. -/obj/item/fuel_assembly/deuterium/New(var/newloc) - ..(newloc, MATERIAL_DEUTERIUM) - -/obj/item/fuel_assembly/tritium/New(var/newloc) - ..(newloc, MATERIAL_TRITIUM) - -/obj/item/fuel_assembly/phoron/New(var/newloc) - ..(newloc, MATERIAL_PHORON) - -/obj/item/fuel_assembly/supermatter/New(var/newloc) - ..(newloc, MATERIAL_SUPERMATTER) - -/obj/item/fuel_assembly/hydrogen/New(var/newloc) - ..(newloc, MATERIAL_HYDROGEN) \ No newline at end of file diff --git a/code/modules/power/fusion/fuel_assembly/fuel_compressor.dm b/code/modules/power/fusion/fuel_assembly/fuel_compressor.dm deleted file mode 100644 index 1831eaf1108a6..0000000000000 --- a/code/modules/power/fusion/fuel_assembly/fuel_compressor.dm +++ /dev/null @@ -1,56 +0,0 @@ -// 5 sheets == ~12500 matter units == ~100u reagents -// Try to avoid letting people produce more material -// with the kinetic harvester than they put into the -// field in the first place. - -/obj/machinery/fusion_fuel_compressor - name = "fuel compressor" - icon = 'icons/obj/machines/power/fusion.dmi' - icon_state = "fuel_compressor1" - density = TRUE - anchored = TRUE - layer = 4 - construct_state = /decl/machine_construction/default/panel_closed - -/obj/machinery/fusion_fuel_compressor/MouseDrop_T(var/atom/movable/target, var/mob/user) - if(user.incapacitated() || !user.Adjacent(src)) - return - return do_fuel_compression(target, user) - -/obj/machinery/fusion_fuel_compressor/attackby(var/obj/item/thing, var/mob/user) - return do_fuel_compression(thing, user) || ..() - -/obj/machinery/fusion_fuel_compressor/proc/do_fuel_compression(var/obj/item/thing, var/mob/user) - if(istype(thing) && thing.reagents && thing.reagents.total_volume && thing.is_open_container()) - if(thing.reagents.reagent_list.len > 1) - to_chat(user, "The contents of \the [thing] are impure and cannot be used as fuel.") - return 1 - if(thing.reagents.total_volume < 100) - to_chat(user, "You need at least one hundred units of material to form a fuel rod.") - return 1 - var/datum/reagent/R = thing.reagents.reagent_list[1] - visible_message("\The [src] compresses the contents of \the [thing] into a new fuel assembly.") - var/obj/item/fuel_assembly/F = new(get_turf(src), R.type, R.color) - thing.reagents.remove_reagent(R.type, 100) - user.put_in_hands(F) - return 1 - else if(istype(thing, /obj/machinery/power/supermatter/shard)) - var/obj/item/fuel_assembly/F = new(get_turf(src), MATERIAL_SUPERMATTER) - visible_message("\The [src] compresses the \[thing] into a new fuel assembly.") - qdel(thing) - user.put_in_hands(F) - return 1 - else if(istype(thing, /obj/item/stack/material)) - var/obj/item/stack/material/M = thing - var/material/mat = M.get_material() - if(!mat.is_fusion_fuel) - to_chat(user, "It would be pointless to make a fuel rod out of [mat.use_name].") - return - if(!M.use(5)) - to_chat(user, "You need at least five [mat.sheet_plural_name] to make a fuel rod.") - return - var/obj/item/fuel_assembly/F = new(get_turf(src), mat.name) - visible_message("\The [src] compresses the [mat.use_name] into a new fuel assembly.") - user.put_in_hands(F) - return 1 - return 0 diff --git a/code/modules/power/fusion/fuel_assembly/fuel_injector.dm b/code/modules/power/fusion/fuel_assembly/fuel_injector.dm deleted file mode 100644 index 5b7746aac3af0..0000000000000 --- a/code/modules/power/fusion/fuel_assembly/fuel_injector.dm +++ /dev/null @@ -1,150 +0,0 @@ -/obj/machinery/fusion_fuel_injector - name = "fuel injector" - icon = 'icons/obj/machines/power/fusion.dmi' - icon_state = "injector0" - density = TRUE - anchored = FALSE - req_access = list(access_engine) - idle_power_usage = 10 - active_power_usage = 500 - construct_state = /decl/machine_construction/default/panel_closed - uncreated_component_parts = null - stat_immune = 0 - base_type = /obj/machinery/fusion_fuel_injector - - var/fuel_usage = 0.001 - var/initial_id_tag - var/injecting = 0 - var/obj/item/fuel_assembly/cur_assembly - var/injection_rate = 1 - -/obj/machinery/fusion_fuel_injector/Initialize() - set_extension(src, /datum/extension/local_network_member) - if(initial_id_tag) - var/datum/extension/local_network_member/fusion = get_extension(src, /datum/extension/local_network_member) - fusion.set_tag(null, initial_id_tag) - . = ..() - -/obj/machinery/fusion_fuel_injector/Destroy() - if(cur_assembly) - cur_assembly.dropInto(loc) - cur_assembly = null - . = ..() - -/obj/machinery/fusion_fuel_injector/mapped - anchored = TRUE - -/obj/machinery/fusion_fuel_injector/Process() - if(injecting) - if(stat & (BROKEN|NOPOWER)) - StopInjecting() - else - Inject() - -/obj/machinery/fusion_fuel_injector/attackby(obj/item/W, mob/user) - - if(isMultitool(W)) - var/datum/extension/local_network_member/lanm = get_extension(src, /datum/extension/local_network_member) - lanm.set_tag(null, initial_id_tag) - return - - if(istype(W, /obj/item/fuel_assembly)) - - if(injecting) - to_chat(user, "Shut \the [src] off before playing with the fuel rod!") - return - if(!user.unEquip(W, src)) - return - if(cur_assembly) - visible_message("\The [user] swaps \the [src]'s [cur_assembly] for \a [W].") - else - visible_message("\The [user] inserts \a [W] into \the [src].") - if(cur_assembly) - cur_assembly.dropInto(loc) - user.put_in_hands(cur_assembly) - cur_assembly = W - return - - if(isWrench(W)) - if(injecting) - to_chat(user, "Shut \the [src] off first!") - return - anchored = !anchored - playsound(src.loc, 'sound/items/Ratchet.ogg', 75, 1) - if(anchored) - user.visible_message("\The [user] secures \the [src] to the floor.") - else - user.visible_message("\The [user] unsecures \the [src] from the floor.") - return - - return ..() - -/obj/machinery/fusion_fuel_injector/physical_attack_hand(mob/user) - if(injecting) - to_chat(user, "Shut \the [src] off before playing with the fuel rod!") - return TRUE - - if(cur_assembly) - cur_assembly.dropInto(loc) - user.put_in_hands(cur_assembly) - visible_message("\The [user] removes \the [cur_assembly] from \the [src].") - cur_assembly = null - return TRUE - else - to_chat(user, "There is no fuel rod in \the [src].") - return TRUE - -/obj/machinery/fusion_fuel_injector/proc/BeginInjecting() - if(!injecting && cur_assembly) - icon_state = "injector1" - injecting = 1 - update_use_power(POWER_USE_IDLE) - -/obj/machinery/fusion_fuel_injector/proc/StopInjecting() - if(injecting) - injecting = 0 - icon_state = "injector0" - update_use_power(POWER_USE_OFF) - -/obj/machinery/fusion_fuel_injector/proc/Inject() - if(!injecting) - return - if(cur_assembly) - var/amount_left = 0 - for(var/reagent in cur_assembly.rod_quantities) - if(cur_assembly.rod_quantities[reagent] > 0) - var/amount = cur_assembly.rod_quantities[reagent] * fuel_usage * injection_rate - if(amount < 1) - amount = 1 - var/obj/effect/accelerated_particle/A = new/obj/effect/accelerated_particle(get_turf(src), dir) - A.particle_type = reagent - A.additional_particles = amount - A.move(1) - if(cur_assembly) - cur_assembly.rod_quantities[reagent] -= amount - amount_left += cur_assembly.rod_quantities[reagent] - if(cur_assembly) - cur_assembly.percent_depleted = amount_left / cur_assembly.initial_amount - flick("injector-emitting",src) - else - StopInjecting() - -/obj/machinery/fusion_fuel_injector/verb/rotate_clock() - set category = "Object" - set name = "Rotate Generator (Clockwise)" - set src in view(1) - - if (usr.incapacitated() || usr.restrained() || anchored) - return - - src.dir = turn(src.dir, -90) - -/obj/machinery/fusion_fuel_injector/verb/rotate_anticlock() - set category = "Object" - set name = "Rotate Generator (Counter-clockwise)" - set src in view(1) - - if (usr.incapacitated() || usr.restrained() || anchored) - return - - src.dir = turn(src.dir, 90) \ No newline at end of file diff --git a/code/modules/power/fusion/fusion_circuits.dm b/code/modules/power/fusion/fusion_circuits.dm deleted file mode 100644 index 0b1abe1566c3d..0000000000000 --- a/code/modules/power/fusion/fusion_circuits.dm +++ /dev/null @@ -1,124 +0,0 @@ -/obj/item/stock_parts/circuitboard/fusion/core_control - name = T_BOARD("fusion core controller") - build_path = /obj/machinery/computer/fusion/core_control - origin_tech = list(TECH_DATA = 4, TECH_ENGINEERING = 4) - -/obj/item/stock_parts/circuitboard/kinetic_harvester - name = T_BOARD("kinetic harvester") - build_path = /obj/machinery/kinetic_harvester - board_type = "machine" - origin_tech = list(TECH_DATA = 4, TECH_ENGINEERING = 4, TECH_MATERIAL = 4) - req_components = list( - /obj/item/stock_parts/manipulator/pico = 2, - /obj/item/stock_parts/matter_bin/super = 1, - /obj/item/stock_parts/console_screen = 1, - /obj/item/stack/cable_coil = 5 - ) - -/obj/item/stock_parts/circuitboard/fusion_fuel_compressor - name = T_BOARD("fusion fuel compressor") - build_path = /obj/machinery/fusion_fuel_compressor - board_type = "machine" - origin_tech = list(TECH_POWER = 3, TECH_ENGINEERING = 4, TECH_MATERIAL = 4) - req_components = list( - /obj/item/stock_parts/manipulator/pico = 2, - /obj/item/stock_parts/matter_bin/super = 2, - /obj/item/stock_parts/console_screen = 1, - /obj/item/stack/cable_coil = 5 - ) - -/obj/item/stock_parts/circuitboard/fusion_fuel_control - name = T_BOARD("fusion fuel controller") - build_path = /obj/machinery/computer/fusion/fuel_control - origin_tech = list(TECH_DATA = 4, TECH_ENGINEERING = 4) - -/obj/item/stock_parts/circuitboard/gyrotron_control - name = T_BOARD("gyrotron controller") - build_path = /obj/machinery/computer/fusion/gyrotron - origin_tech = list(TECH_DATA = 4, TECH_ENGINEERING = 4) - -/obj/item/stock_parts/circuitboard/fusion_core - name = T_BOARD("fusion core") - build_path = /obj/machinery/power/fusion_core - board_type = "machine" - origin_tech = list(TECH_BLUESPACE = 2, TECH_MAGNET = 4, TECH_POWER = 4) - req_components = list( - /obj/item/stock_parts/manipulator/pico = 2, - /obj/item/stock_parts/micro_laser/ultra = 1, - /obj/item/stock_parts/subspace/crystal = 1, - /obj/item/stock_parts/console_screen = 1, - /obj/item/stack/cable_coil = 5 - ) - -/obj/item/stock_parts/circuitboard/fusion_injector - name = T_BOARD("fusion fuel injector") - build_path = /obj/machinery/fusion_fuel_injector - board_type = "machine" - origin_tech = list(TECH_POWER = 3, TECH_ENGINEERING = 4, TECH_MATERIAL = 4) - req_components = list( - /obj/item/stock_parts/manipulator/pico = 2, - /obj/item/stock_parts/scanning_module/phasic = 1, - /obj/item/stock_parts/matter_bin/super = 1, - /obj/item/stock_parts/console_screen = 1, - /obj/item/stack/cable_coil = 5 - ) - -/obj/item/stock_parts/circuitboard/gyrotron - name = T_BOARD("gyrotron") - build_path = /obj/machinery/power/emitter/gyrotron - board_type = "machine" - origin_tech = list(TECH_POWER = 4, TECH_ENGINEERING = 4) - req_components = list( - /obj/item/stack/cable_coil = 20, - /obj/item/stock_parts/micro_laser/ultra = 2 - ) - -/datum/design/circuit/fusion - name = "fusion core control console" - id = "fusion_core_control" - build_path = /obj/item/stock_parts/circuitboard/fusion/core_control - sort_string = "LAAAD" - req_tech = list(TECH_POWER = 3, TECH_ENGINEERING = 3, TECH_MATERIAL = 3) - -/datum/design/circuit/fusion/fuel_compressor - name = "fusion fuel compressor" - id = "fusion_fuel_compressor" - build_path = /obj/item/stock_parts/circuitboard/fusion_fuel_compressor - sort_string = "LAAAE" - -/datum/design/circuit/fusion/fuel_control - name = "fusion fuel control console" - id = "fusion_fuel_control" - build_path = /obj/item/stock_parts/circuitboard/fusion_fuel_control - sort_string = "LAAAF" - -/datum/design/circuit/fusion/gyrotron_control - name = "gyrotron control console" - id = "gyrotron_control" - build_path = /obj/item/stock_parts/circuitboard/gyrotron_control - sort_string = "LAAAG" - -/datum/design/circuit/fusion/core - name = "fusion core" - id = "fusion_core" - build_path = /obj/item/stock_parts/circuitboard/fusion_core - sort_string = "LAAAH" - -/datum/design/circuit/fusion/injector - name = "fusion fuel injector" - id = "fusion_injector" - build_path = /obj/item/stock_parts/circuitboard/fusion_injector - sort_string = "LAAAI" - -/datum/design/circuit/fusion/kinetic_harvester - name = "fusion toroid kinetic harvester" - id = "fusion_kinetic_harvester" - build_path = /obj/item/stock_parts/circuitboard/kinetic_harvester - sort_string = "LAAAJ" - req_tech = list(TECH_DATA = 4, TECH_ENGINEERING = 4, TECH_MATERIAL = 4) - -/datum/design/circuit/fusion/gyrotron - name = "gyrotron" - id = "gyrotron" - build_path = /obj/item/stock_parts/circuitboard/gyrotron - sort_string = "LAAAK" \ No newline at end of file diff --git a/code/modules/power/fusion/fusion_particle_catcher.dm b/code/modules/power/fusion/fusion_particle_catcher.dm deleted file mode 100644 index de4f3e2a11235..0000000000000 --- a/code/modules/power/fusion/fusion_particle_catcher.dm +++ /dev/null @@ -1,40 +0,0 @@ -/obj/effect/fusion_particle_catcher - icon = 'icons/effects/effects.dmi' - density = TRUE - anchored = TRUE - invisibility = 101 - light_color = COLOR_BLUE - var/obj/effect/fusion_em_field/parent - var/mysize = 0 - -/obj/effect/fusion_particle_catcher/Destroy() - . =..() - parent.particle_catchers -= src - parent = null - -/obj/effect/fusion_particle_catcher/proc/SetSize(var/newsize) - name = "collector [newsize]" - mysize = newsize - UpdateSize() - -/obj/effect/fusion_particle_catcher/proc/AddParticles(var/name, var/quantity = 1) - if(parent && parent.size >= mysize) - parent.AddParticles(name, quantity) - return 1 - return 0 - -/obj/effect/fusion_particle_catcher/proc/UpdateSize() - if(parent.size >= mysize) - set_density(1) - SetName("collector [mysize] ON") - else - set_density(0) - SetName("collector [mysize] OFF") - -/obj/effect/fusion_particle_catcher/bullet_act(var/obj/item/projectile/Proj) - parent.AddEnergy(Proj.damage) - update_icon() - return 0 - -/obj/effect/fusion_particle_catcher/CanPass(var/atom/movable/mover, var/turf/target, var/height=0, var/air_group=0) - return ismob(mover) diff --git a/code/modules/power/fusion/fusion_reactions.dm b/code/modules/power/fusion/fusion_reactions.dm deleted file mode 100644 index bb9b97d53a5f1..0000000000000 --- a/code/modules/power/fusion/fusion_reactions.dm +++ /dev/null @@ -1,168 +0,0 @@ -var/global/list/fusion_reactions - -/decl/fusion_reaction - var/p_react = "" // Primary reactant. - var/s_react = "" // Secondary reactant. - var/minimum_energy_level = 1 - var/energy_consumption = 0 - var/energy_production = 0 - var/radiation = 0 - var/instability = 0 - var/list/products = list() - var/minimum_reaction_temperature = 100 - var/priority = 100 - -/decl/fusion_reaction/proc/handle_reaction_special(var/obj/effect/fusion_em_field/holder) - return 0 - -/proc/get_fusion_reaction(var/p_react, var/s_react, var/m_energy) - if(!fusion_reactions) - fusion_reactions = list() - for(var/rtype in typesof(/decl/fusion_reaction) - /decl/fusion_reaction) - var/decl/fusion_reaction/cur_reaction = new rtype() - if(!fusion_reactions[cur_reaction.p_react]) - fusion_reactions[cur_reaction.p_react] = list() - fusion_reactions[cur_reaction.p_react][cur_reaction.s_react] = cur_reaction - if(!fusion_reactions[cur_reaction.s_react]) - fusion_reactions[cur_reaction.s_react] = list() - fusion_reactions[cur_reaction.s_react][cur_reaction.p_react] = cur_reaction - - if(fusion_reactions.Find(p_react)) - var/list/secondary_reactions = fusion_reactions[p_react] - if(secondary_reactions.Find(s_react)) - return fusion_reactions[p_react][s_react] - -// Material fuels -// deuterium -// tritium -// phoron -// supermatter - -// Gaseous/reagent fuels -// hydrogen -// helium -// lithium -// boron - -// Basic power production reactions. -// This is not necessarily realistic, but it makes a basic failure more spectacular. -/decl/fusion_reaction/hydrogen_hydrogen - p_react = GAS_HYDROGEN - s_react = GAS_HYDROGEN - energy_consumption = 1 - energy_production = 2 - products = list(GAS_HELIUM = 1) - priority = 10 - -/decl/fusion_reaction/deuterium_deuterium - p_react = GAS_DEUTERIUM - s_react = GAS_DEUTERIUM - energy_consumption = 1 - energy_production = 2 - priority = 0 - -// Advanced production reactions (todo) -/decl/fusion_reaction/deuterium_helium - p_react = GAS_DEUTERIUM - s_react = GAS_HELIUM - energy_consumption = 1 - energy_production = 5 - radiation = 2 - -/decl/fusion_reaction/deuterium_tritium - p_react = GAS_DEUTERIUM - s_react = GAS_TRITIUM - energy_consumption = 1 - energy_production = 1 - products = list(GAS_HELIUM = 1) - instability = 0.5 - radiation = 3 - -/decl/fusion_reaction/deuterium_lithium - p_react = GAS_DEUTERIUM - s_react = "lithium" - energy_consumption = 2 - energy_production = 0 - radiation = 3 - products = list(GAS_TRITIUM= 1) - instability = 1 - -// Unideal/material production reactions -/decl/fusion_reaction/oxygen_oxygen - p_react = GAS_OXYGEN - s_react = GAS_OXYGEN - energy_consumption = 10 - energy_production = 0 - instability = 5 - radiation = 5 - products = list("silicon"= 1) - -/decl/fusion_reaction/iron_iron - p_react = "iron" - s_react = "iron" - products = list("silver" = 10, "gold" = 10, "platinum" = 10) // Not realistic but w/e - energy_consumption = 10 - energy_production = 0 - instability = 2 - minimum_reaction_temperature = 10000 - -/decl/fusion_reaction/phoron_hydrogen - p_react = GAS_HYDROGEN - s_react = GAS_PHORON - energy_consumption = 10 - energy_production = 0 - instability = 5 - products = list("mhydrogen" = 1) - minimum_reaction_temperature = 8000 - -// VERY UNIDEAL REACTIONS. -/decl/fusion_reaction/phoron_supermatter - p_react = "supermatter" - s_react = GAS_PHORON - energy_consumption = 0 - energy_production = 5 - radiation = 40 - instability = 20 - -/decl/fusion_reaction/phoron_supermatter/handle_reaction_special(var/obj/effect/fusion_em_field/holder) - - wormhole_event(GetConnectedZlevels(holder)) - - var/turf/origin = get_turf(holder) - holder.Rupture() - qdel(holder) - var/radiation_level = rand(100, 200) - - // Copied from the SM for proof of concept. //Not any more --Cirra //Use the whole z proc --Leshana - SSradiation.z_radiate(locate(1, 1, holder.z), radiation_level, 1) - - for(var/mob/living/mob in GLOB.living_mob_list_) - var/turf/T = get_turf(mob) - if(T && (holder.z == T.z)) - if(istype(mob, /mob/living/carbon/human)) - var/mob/living/carbon/human/H = mob - H.hallucination(rand(100,150), 51) - - for(var/obj/machinery/fusion_fuel_injector/I in range(world.view, origin)) - if(I.cur_assembly && I.cur_assembly.fuel_type == MATERIAL_SUPERMATTER) - explosion(get_turf(I), 1, 2, 3) - spawn(5) - if(I && I.loc) - qdel(I) - - sleep(5) - explosion(origin, 1, 2, 5) - - return 1 - - -// High end reactions. -/decl/fusion_reaction/boron_hydrogen - p_react = GAS_BORON - s_react = GAS_HYDROGEN - minimum_energy_level = 15000 - energy_consumption = 3 - energy_production = 12 - radiation = 3 - instability = 2.5 - products = list(GAS_HELIUM = 1) diff --git a/code/modules/power/fusion/gyrotron/gyrotron.dm b/code/modules/power/fusion/gyrotron/gyrotron.dm deleted file mode 100644 index 0cf1905238a1d..0000000000000 --- a/code/modules/power/fusion/gyrotron/gyrotron.dm +++ /dev/null @@ -1,63 +0,0 @@ -#define GYRO_POWER 25000 - -/obj/machinery/power/emitter/gyrotron - name = "gyrotron" - icon = 'icons/obj/machines/power/fusion.dmi' - desc = "A heavy-duty, highly configurable industrial gyrotron suited for powering fusion reactors." - icon_state = "emitter-off" - req_lock_access = list(access_engine) - use_power = POWER_USE_IDLE - active_power_usage = GYRO_POWER - - var/initial_id_tag - var/rate = 3 - var/mega_energy = 1 - - construct_state = /decl/machine_construction/default/panel_closed - uncreated_component_parts = list( - /obj/item/stock_parts/radio/receiver, - ) - stat_immune = 0 - base_type = /obj/machinery/power/emitter/gyrotron - -/obj/machinery/power/emitter/gyrotron/anchored - anchored = TRUE - state = EMITTER_WELDED - -/obj/machinery/power/emitter/gyrotron/Initialize() - set_extension(src, /datum/extension/local_network_member) - if(initial_id_tag) - var/datum/extension/local_network_member/fusion = get_extension(src, /datum/extension/local_network_member) - fusion.set_tag(null, initial_id_tag) - change_power_consumption(mega_energy * GYRO_POWER, POWER_USE_ACTIVE) - . = ..() - -/obj/machinery/power/emitter/gyrotron/Process() - change_power_consumption(mega_energy * GYRO_POWER, POWER_USE_ACTIVE) - . = ..() - -/obj/machinery/power/emitter/gyrotron/get_rand_burst_delay() - return rate * 10 - -/obj/machinery/power/emitter/gyrotron/get_burst_delay() - return rate * 10 - -/obj/machinery/power/emitter/gyrotron/get_emitter_beam() - var/obj/item/projectile/beam/emitter/E = ..() - E.damage = mega_energy * 50 - return E - -/obj/machinery/power/emitter/gyrotron/on_update_icon() - if (active && powernet && avail(active_power_usage)) - icon_state = "emitter-on" - else - icon_state = "emitter-off" - -/obj/machinery/power/emitter/gyrotron/attackby(var/obj/item/W, var/mob/user) - if(isMultitool(W)) - var/datum/extension/local_network_member/fusion = get_extension(src, /datum/extension/local_network_member) - fusion.get_new_tag(user) - return - return ..() - -#undef GYRO_POWER diff --git a/code/modules/power/fusion/kinetic_harvester.dm b/code/modules/power/fusion/kinetic_harvester.dm deleted file mode 100644 index e1b54870dfeb7..0000000000000 --- a/code/modules/power/fusion/kinetic_harvester.dm +++ /dev/null @@ -1,131 +0,0 @@ -/obj/machinery/kinetic_harvester - name = "kinetic harvester" - desc = "A complicated mechanism for harvesting rapidly moving particles from a fusion toroid and condensing them into a usable form." - density = TRUE - anchored = TRUE - use_power = POWER_USE_IDLE - icon = 'icons/obj/kinetic_harvester.dmi' - icon_state = "off" - var/initial_id_tag - var/list/stored = list() - var/list/harvesting = list() - var/obj/machinery/power/fusion_core/harvest_from - construct_state = /decl/machine_construction/default/panel_closed - uncreated_component_parts = null - stat_immune = 0 - -/obj/machinery/kinetic_harvester/Initialize() - set_extension(src, /datum/extension/local_network_member) - if(initial_id_tag) - var/datum/extension/local_network_member/lanm = get_extension(src, /datum/extension/local_network_member) - lanm.set_tag(null, initial_id_tag) - find_core() - queue_icon_update() - . = ..() - -/obj/machinery/kinetic_harvester/interface_interact(mob/user) - ui_interact(user) - return TRUE - -/obj/machinery/kinetic_harvester/attackby(var/obj/item/thing, var/mob/user) - if(isMultitool(thing)) - var/datum/extension/local_network_member/lanm = get_extension(src, /datum/extension/local_network_member) - if(lanm.get_new_tag(user)) - find_core() - return - return ..() - -/obj/machinery/kinetic_harvester/proc/find_core() - harvest_from = null - var/datum/extension/local_network_member/lanm = get_extension(src, /datum/extension/local_network_member) - var/datum/local_network/lan = lanm.get_local_network() - - if(lan) - var/list/fusion_cores = lan.get_devices(/obj/machinery/power/fusion_core) - if(fusion_cores && fusion_cores.len) - harvest_from = fusion_cores[1] - return harvest_from - -/obj/machinery/kinetic_harvester/ui_interact(var/mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1) - - if(!harvest_from && !find_core()) - to_chat(user, SPAN_WARNING("This machine cannot locate a fusion core. Please ensure the machine is correctly configured to share a fusion plant network.")) - return - - var/datum/extension/local_network_member/fusion = get_extension(src, /datum/extension/local_network_member) - var/datum/local_network/plant = fusion.get_local_network() - var/list/data = list() - - data["id"] = plant ? plant.id_tag : "unset" - data["status"] = (use_power >= POWER_USE_ACTIVE) - data["materials"] = list() - for(var/mat in stored) - var/material/material = SSmaterials.get_material_by_name(mat) - if(material) - var/sheets = Floor(stored[mat]/(material.units_per_sheet * 1.5)) - data["materials"] += list(list("material" = mat, "rawamount" = stored[mat], "amount" = sheets, "harvest" = harvesting[mat])) - - ui = SSnano.try_update_ui(user, src, ui_key, ui, data, force_open) - if (!ui) - ui = new(user, src, ui_key, "kinetic_harvester.tmpl", name, 400, 600) - ui.set_initial_data(data) - ui.open() - ui.set_auto_update(1) - -/obj/machinery/kinetic_harvester/Process() - if(harvest_from && get_dist(src, harvest_from) > 10) - harvest_from = null - - if(use_power >= POWER_USE_ACTIVE) - if(harvest_from && harvest_from.owned_field) - for(var/mat in harvest_from.owned_field.reactants) - if(SSmaterials.materials_by_name[mat] && !stored[mat]) - stored[mat] = 0 - for(var/mat in harvesting) - if(!SSmaterials.materials_by_name[mat] || !harvest_from.owned_field.reactants[mat]) - harvesting -= mat - else - var/harvest = min(harvest_from.owned_field.reactants[mat], rand(100,200)) - harvest_from.owned_field.reactants[mat] -= harvest - if(harvest_from.owned_field.reactants[mat] <= 0) - harvest_from.owned_field.reactants -= mat - stored[mat] += harvest - else - harvesting.Cut() - -/obj/machinery/kinetic_harvester/on_update_icon() - if(stat & (BROKEN|NOPOWER)) - icon_state = "broken" - else if(use_power >= POWER_USE_ACTIVE) - icon_state = "on" - else - icon_state = "off" - -/obj/machinery/kinetic_harvester/OnTopic(var/mob/user, var/href_list, var/datum/topic_state/state) - if(href_list["remove_mat"]) - var/mat = href_list["remove_mat"] - var/material/material = SSmaterials.get_material_by_name(mat) - if(material) - var/sheet_cost = (material.units_per_sheet * 1.5) - var/sheets = Floor(stored[mat]/sheet_cost) - if(sheets > 0) - material.place_sheet(loc, sheets) - stored[mat] -= sheets * sheet_cost - if(stored[mat] <= 0) - stored -= mat - return TOPIC_REFRESH - - if(href_list["toggle_power"]) - use_power = (use_power >= POWER_USE_ACTIVE ? POWER_USE_IDLE : POWER_USE_ACTIVE) - queue_icon_update() - return TOPIC_REFRESH - - if(href_list["toggle_harvest"]) - var/mat = href_list["toggle_harvest"] - if(harvesting[mat]) - harvesting -= mat - else - harvesting[mat] = TRUE - if(!(mat in stored)) - stored[mat] = 0 - return TOPIC_REFRESH diff --git a/code/modules/power/generator.dm b/code/modules/power/generator.dm deleted file mode 100644 index b5ff9f6868dfa..0000000000000 --- a/code/modules/power/generator.dm +++ /dev/null @@ -1,253 +0,0 @@ -/obj/machinery/power/generator - name = "thermoelectric generator" - desc = "It's a high efficiency thermoelectric generator." - icon_state = "teg-unassembled" - density = TRUE - anchored = FALSE - - use_power = POWER_USE_IDLE - idle_power_usage = 100 //Watts, I hope. Just enough to do the computer and display things. - - var/max_power = 500000 - var/thermal_efficiency = 0.65 - - var/obj/machinery/atmospherics/binary/circulator/circ1 - var/obj/machinery/atmospherics/binary/circulator/circ2 - - var/last_circ1_gen = 0 - var/last_circ2_gen = 0 - var/last_thermal_gen = 0 - var/stored_energy = 0 - var/lastgen1 = 0 - var/lastgen2 = 0 - var/effective_gen = 0 - var/lastgenlev = 0 - -/obj/machinery/power/generator/New() - ..() - desc = initial(desc) + " Rated for [round(max_power/1000)] kW." - spawn(1) - reconnect() - -//generators connect in dir and reverse_dir(dir) directions -//mnemonic to determine circulator/generator directions: the cirulators orbit clockwise around the generator -//so a circulator to the NORTH of the generator connects first to the EAST, then to the WEST -//and a circulator to the WEST of the generator connects first to the NORTH, then to the SOUTH -//note that the circulator's outlet dir is it's always facing dir, and it's inlet is always the reverse -/obj/machinery/power/generator/proc/reconnect() - if(circ1) - circ1.temperature_overlay = null - if(circ2) - circ2.temperature_overlay = null - circ1 = null - circ2 = null - if(src.loc && anchored) - if(src.dir & (EAST|WEST)) - circ1 = locate(/obj/machinery/atmospherics/binary/circulator) in get_step(src,WEST) - circ2 = locate(/obj/machinery/atmospherics/binary/circulator) in get_step(src,EAST) - - if(circ1 && circ2) - if(circ1.dir != NORTH || circ2.dir != SOUTH) - circ1 = null - circ2 = null - - else if(src.dir & (NORTH|SOUTH)) - circ1 = locate(/obj/machinery/atmospherics/binary/circulator) in get_step(src,NORTH) - circ2 = locate(/obj/machinery/atmospherics/binary/circulator) in get_step(src,SOUTH) - - if(circ1 && circ2 && (circ1.dir != EAST || circ2.dir != WEST)) - circ1 = null - circ2 = null - update_icon() - -/obj/machinery/power/generator/on_update_icon() - icon_state = anchored ? "teg-assembled" : "teg-unassembled" - overlays.Cut() - if (circ1) - circ1.temperature_overlay = null - if (circ2) - circ2.temperature_overlay = null - if (stat & (NOPOWER|BROKEN)) - return 1 - else - if (lastgenlev != 0) - overlays += image('icons/obj/power.dmi', "teg-op[lastgenlev]") - if (circ1 && circ2) - var/extreme = (lastgenlev > 9) ? "ex" : "" - if (circ1.last_temperature < circ2.last_temperature) - circ1.temperature_overlay = "circ-[extreme]cold" - circ2.temperature_overlay = "circ-[extreme]hot" - else - circ1.temperature_overlay = "circ-[extreme]hot" - circ2.temperature_overlay = "circ-[extreme]cold" - return 1 - -/obj/machinery/power/generator/Process() - if(!circ1 || !circ2 || !anchored || stat & (BROKEN|NOPOWER)) - stored_energy = 0 - return - - updateDialog() - - var/datum/gas_mixture/air1 = circ1.return_transfer_air() - var/datum/gas_mixture/air2 = circ2.return_transfer_air() - - lastgen2 = lastgen1 - lastgen1 = 0 - last_thermal_gen = 0 - last_circ1_gen = 0 - last_circ2_gen = 0 - - if(air1 && air2) - var/air1_heat_capacity = air1.heat_capacity() - var/air2_heat_capacity = air2.heat_capacity() - var/delta_temperature = abs(air2.temperature - air1.temperature) - - if(delta_temperature > 0 && air1_heat_capacity > 0 && air2_heat_capacity > 0) - var/energy_transfer = delta_temperature*air2_heat_capacity*air1_heat_capacity/(air2_heat_capacity+air1_heat_capacity) - var/heat = energy_transfer*(1-thermal_efficiency) - last_thermal_gen = energy_transfer*thermal_efficiency - - if(air2.temperature > air1.temperature) - air2.temperature = air2.temperature - energy_transfer/air2_heat_capacity - air1.temperature = air1.temperature + heat/air1_heat_capacity - else - air2.temperature = air2.temperature + heat/air2_heat_capacity - air1.temperature = air1.temperature - energy_transfer/air1_heat_capacity - playsound(src.loc, 'sound/effects/beam.ogg', 25, 0, 10, is_ambiance = 1) - - //Transfer the air - if (air1) - circ1.air2.merge(air1) - if (air2) - circ2.air2.merge(air2) - - //Update the gas networks - if(circ1.network2) - circ1.network2.update = 1 - if(circ2.network2) - circ2.network2.update = 1 - - //Exceeding maximum power leads to some power loss - if(effective_gen > max_power && prob(5)) - var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread - s.set_up(3, 1, src) - s.start() - stored_energy *= 0.5 - if (powernet) - powernet.apcs_overload(0, 2, 5) - - //Power - last_circ1_gen = circ1.return_stored_energy() - last_circ2_gen = circ2.return_stored_energy() - stored_energy += last_thermal_gen + last_circ1_gen + last_circ2_gen - lastgen1 = stored_energy*0.4 //smoothened power generation to prevent slingshotting as pressure is equalized, then restored by pumps - stored_energy -= lastgen1 - effective_gen = (lastgen1 + lastgen2) / 2 - - // update icon overlays and power usage only when necessary - var/genlev = max(0, min( round(11*effective_gen / max_power), 11)) - if(effective_gen > 100 && genlev == 0) - genlev = 1 - if(genlev != lastgenlev) - lastgenlev = genlev - update_icon() - add_avail(effective_gen) - -/obj/machinery/power/generator/attackby(obj/item/W as obj, mob/user as mob) - if(isWrench(W)) - playsound(src.loc, 'sound/items/Ratchet.ogg', 75, 1) - anchored = !anchored - user.visible_message("[user.name] [anchored ? "secures" : "unsecures"] the bolts holding [src.name] to the floor.", \ - "You [anchored ? "secure" : "unsecure"] the bolts holding [src] to the floor.", \ - "You hear a ratchet") - update_use_power(anchored) - if(anchored) // Powernet connection stuff. - connect_to_network() - else - disconnect_from_network() - reconnect() - else - ..() - -/obj/machinery/power/generator/CanUseTopic(mob/user) - if(!anchored) - return STATUS_CLOSE - return ..() - -/obj/machinery/power/generator/interface_interact(mob/user) - if(!circ1 || !circ2) //Just incase the middle part of the TEG was not wrenched last. - reconnect() - ui_interact(user) - return TRUE - -/obj/machinery/power/generator/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1) - // this is the data which will be sent to the ui - var/vertical = 0 - if (dir == NORTH || dir == SOUTH) - vertical = 1 - - var/data[0] - data["totalOutput"] = effective_gen/1000 - data["maxTotalOutput"] = max_power/1000 - data["thermalOutput"] = last_thermal_gen/1000 - data["circConnected"] = 0 - - if(circ1) - //The one on the left (or top) - data["primaryDir"] = vertical ? "top" : "left" - data["primaryOutput"] = last_circ1_gen/1000 - data["primaryFlowCapacity"] = circ1.volume_capacity_used*100 - data["primaryInletPressure"] = circ1.air1.return_pressure() - data["primaryInletTemperature"] = circ1.air1.temperature - data["primaryOutletPressure"] = circ1.air2.return_pressure() - data["primaryOutletTemperature"] = circ1.air2.temperature - - if(circ2) - //Now for the one on the right (or bottom) - data["secondaryDir"] = vertical ? "bottom" : "right" - data["secondaryOutput"] = last_circ2_gen/1000 - data["secondaryFlowCapacity"] = circ2.volume_capacity_used*100 - data["secondaryInletPressure"] = circ2.air1.return_pressure() - data["secondaryInletTemperature"] = circ2.air1.temperature - data["secondaryOutletPressure"] = circ2.air2.return_pressure() - data["secondaryOutletTemperature"] = circ2.air2.temperature - - if(circ1 && circ2) - data["circConnected"] = 1 - else - data["circConnected"] = 0 - - - // update the ui if it exists, returns null if no ui is passed/found - ui = SSnano.try_update_ui(user, src, ui_key, ui, data, force_open) - if(!ui) - // the ui does not exist, so we'll create a new() one - // for a list of parameters and their descriptions see the code docs in \code\modules\nano\nanoui.dm - ui = new(user, src, ui_key, "generator.tmpl", "Thermoelectric Generator", 450, 500) - // when the ui is first opened this is the data it will use - ui.set_initial_data(data) - // open the new ui window - ui.open() - // auto update every Master Controller tick - ui.set_auto_update(1) - -/obj/machinery/power/generator/verb/rotate_clock() - set category = "Object" - set name = "Rotate Generator (Clockwise)" - set src in view(1) - - if (usr.stat || usr.restrained() || anchored) - return - - src.set_dir(turn(src.dir, 90)) - -/obj/machinery/power/generator/verb/rotate_anticlock() - set category = "Object" - set name = "Rotate Generator (Counterclockwise)" - set src in view(1) - - if (usr.stat || usr.restrained() || anchored) - return - - src.set_dir(turn(src.dir, -90)) diff --git a/code/modules/power/gravitygenerator.dm b/code/modules/power/gravitygenerator.dm deleted file mode 100644 index 8d0a27a653c17..0000000000000 --- a/code/modules/power/gravitygenerator.dm +++ /dev/null @@ -1,110 +0,0 @@ -// It.. uses a lot of power. Everything under power is engineering stuff, at least. - -/obj/machinery/computer/gravity_control_computer - name = "Gravity Generator Control" - desc = "A computer to control a local gravity generator. Qualified personnel only." - icon = 'icons/obj/computer.dmi' - icon_state = "airtunnel0e" - anchored = TRUE - density = TRUE - var/obj/machinery/gravity_generator/gravity_generator - -/obj/machinery/gravity_generator - name = "Gravitational Generator" - desc = "A device which produces a gravaton field when set up." - icon = 'icons/obj/singularity.dmi' - icon_state = "TheSingGen" - anchored = TRUE - density = TRUE - idle_power_usage = 200 - active_power_usage = 1000 - var/on = 1 - var/list/localareas = list() - var/effectiverange = 25 - - // Borrows code from cloning computer -/obj/machinery/computer/gravity_control_computer/Initialize() - . = ..() - updatemodules() - -/obj/machinery/gravity_generator/Initialize() - . = ..() - locatelocalareas() - -/obj/machinery/computer/gravity_control_computer/proc/updatemodules() - for(dir in list(NORTH,EAST,SOUTH,WEST)) - gravity_generator = locate(/obj/machinery/gravity_generator, get_step(src, dir)) - if (gravity_generator) - return - -/obj/machinery/gravity_generator/proc/locatelocalareas() - for(var/area/A in range(src,effectiverange)) - if(istype(A,/area/space)) - continue // No (de)gravitizing space. - localareas |= A - -/obj/machinery/computer/gravity_control_computer/interface_interact(mob/user) - interact(user) - return TRUE - -/obj/machinery/computer/gravity_control_computer/interact(mob/user) - user.set_machine(src) - - updatemodules() - - var/dat = "

              Generator Control System

              " - //dat += "Refresh" - if(gravity_generator) - if(gravity_generator.on) - dat += "
              Gravity Status: ON

              " - else - dat += "
              Gravity Status: OFF

              " - - dat += "
              Currently Supplying Gravitons To:
              " - - for(var/area/A in gravity_generator.localareas) - if(A.has_gravity && gravity_generator.on) - dat += "[A]
              " - - else if (A.has_gravity) - dat += "[A]
              " - - else - dat += "[A]
              " - - dat += "
              Maintainence Functions:
              " - if(gravity_generator.on) - dat += " TURN GRAVITY GENERATOR OFF. " - else - dat += " TURN GRAVITY GENERATOR ON. " - - else - dat += "No local gravity generator detected!" - - show_browser(user, dat, "window=gravgen") - onclose(user, "gravgen") - - -/obj/machinery/computer/gravity_control_computer/Topic(href, href_list) - set background = 1 - if((. = ..())) - close_browser(usr, "window=air_alarm") - return - - if(href_list["gentoggle"]) - if(gravity_generator.on) - gravity_generator.on = 0 - - for(var/area/A in gravity_generator.localareas) - var/obj/machinery/gravity_generator/G - for(G in SSmachines.machinery) - if((A in G.localareas) && (G.on)) - break - if(!G) - A.gravitychange(0) - else - for(var/area/A in gravity_generator.localareas) - gravity_generator.on = 1 - A.gravitychange(1) - - src.updateUsrDialog() diff --git a/code/modules/power/lighting.dm b/code/modules/power/lighting.dm deleted file mode 100644 index 2ea31f9bdede8..0000000000000 --- a/code/modules/power/lighting.dm +++ /dev/null @@ -1,930 +0,0 @@ -// The lighting system -// -// consists of light fixtures (/obj/machinery/light) and light tube/bulb items (/obj/item/light) - - -// status values shared between lighting fixtures and items -#define LIGHT_STAGE_EMPTY 1 -#define LIGHT_STAGE_WIRED 2 -#define LIGHT_STAGE_COMPLETE 3 - -#define LIGHT_BULB_TEMPERATURE 400 //K - used value for a 60W bulb -#define LIGHTING_POWER_FACTOR 5 //5W per luminosity * range - - -#define LIGHTMODE_EMERGENCY "emergency_lighting" -#define LIGHTMODE_READY "ready" - -#define LIGHT_PHORON_EXPLODE_THRESHOLD 5 // This many units of phoron have to be in the bulb for it to explode - - -// Light frames! The unfinished form of a light fixture. -/obj/machinery/light_construct - name = "light fixture frame" - desc = "A light fixture under construction." - icon = 'icons/obj/lighting.dmi' - icon_state = "tube-construct-stage1" - anchored = TRUE - layer = ABOVE_HUMAN_LAYER - - /// The light fixture's construction state. One of `LIGHT_STAGE_*`. - var/stage = LIGHT_STAGE_EMPTY - /// The final light machine to create when construction is finished. Should be `/obj/machinery/light` or a subtype thereof. - var/fixture_type = /obj/machinery/light - /// Number of metal sheets created when dismantled. - var/sheets_refunded = 2 - -/obj/machinery/light_construct/New(atom/newloc, newdir, atom/fixture = null) - ..(newloc) - - if(newdir) - set_dir(newdir) - - if(istype(fixture)) - if(istype(fixture, /obj/machinery/light)) - fixture_type = fixture.type - fixture.transfer_fingerprints_to(src) - - update_icon() - -/obj/machinery/light_construct/on_update_icon() - switch(stage) - if(LIGHT_STAGE_EMPTY) icon_state = "tube-construct-stage1" - if(LIGHT_STAGE_WIRED) icon_state = "tube-construct-stage2" - if(LIGHT_STAGE_COMPLETE) icon_state = "tube-empty" - -/obj/machinery/light_construct/examine(mob/user, distance) - . = ..() - if(distance > 2) - return - - switch(stage) - if(LIGHT_STAGE_EMPTY) to_chat(user, "It's an empty frame.") - if(LIGHT_STAGE_WIRED) to_chat(user, "It's wired.") - if(LIGHT_STAGE_COMPLETE) to_chat(user, "The casing is closed.") - -/obj/machinery/light_construct/attackby(obj/item/W, mob/living/user) - add_fingerprint(user) - if(isWrench(W)) - - switch(stage) - if (LIGHT_STAGE_EMPTY) - playsound(loc, 'sound/items/Ratchet.ogg', 50, TRUE) - to_chat(user, SPAN_NOTICE("You begin deconstructing \the [src].")) - if (!user.do_skilled(3 SECONDS, SKILL_CONSTRUCTION, src)) - return - new /obj/item/stack/material/steel( get_turf(loc), sheets_refunded ) - user.visible_message( - SPAN_NOTICE("\The [user] deconstructs \the [src]."), - SPAN_NOTICE("You deconstruct \the [src]!"), - SPAN_ITALIC("You hear ratcheting and metal scraping.") - ) - playsound(loc, 'sound/items/Deconstruct.ogg', 75, TRUE) - qdel(src) - return - - if (LIGHT_STAGE_WIRED) - to_chat(user, SPAN_WARNING("You have to remove the wires first.")) - return - - if (LIGHT_STAGE_COMPLETE) - to_chat(user, SPAN_WARNING("You have to unscrew the case first.")) - return - - if(isWirecutter(W)) - if (stage != LIGHT_STAGE_WIRED) - return - stage = LIGHT_STAGE_EMPTY - update_icon() - new /obj/item/stack/cable_coil(get_turf(loc), 1, "red") - user.visible_message( - SPAN_NOTICE("\The [user] cuts the wires from \the [src]."), - SPAN_NOTICE("You cut \the [src]'s wires and remove them from the frame'."), - SPAN_ITALIC("You hear snipping and cables being cut.") - ) - playsound(loc, 'sound/items/Wirecutter.ogg', 50, TRUE) - return - - if(istype(W, /obj/item/stack/cable_coil)) - if (stage != LIGHT_STAGE_EMPTY) - return - var/obj/item/stack/cable_coil/coil = W - if (coil.use(1)) - stage = LIGHT_STAGE_WIRED - update_icon() - user.visible_message( - SPAN_NOTICE("\The [user] adds wires to \the [src]."), - SPAN_NOTICE("You add wires to \the [src].") - ) - playsound(loc, 'sound/items/Deconstruct.ogg', 50, TRUE) - return - - if(isScrewdriver(W)) - if (stage == LIGHT_STAGE_WIRED) - stage = LIGHT_STAGE_COMPLETE - update_icon() - user.visible_message( - SPAN_NOTICE("\The [user] closes \the [src]'s casing."), - SPAN_NOTICE("You close \the [src]'s casing."), - SPAN_ITALIC("You hear screws being tightened.") - ) - playsound(loc, 'sound/items/Screwdriver.ogg', 50, TRUE) - - var/obj/machinery/light/newlight = new fixture_type(loc, src) - newlight.set_dir(dir) - - transfer_fingerprints_to(newlight) - qdel(src) - return - ..() - -/obj/machinery/light_construct/small - name = "small light fixture frame" - desc = "A small light fixture under construction." - icon_state = "bulb-construct-stage1" - fixture_type = /obj/machinery/light/small - sheets_refunded = 1 - -/obj/machinery/light_construct/small/on_update_icon() - switch(stage) - if(LIGHT_STAGE_EMPTY) icon_state = "bulb-construct-stage1" - if(LIGHT_STAGE_WIRED) icon_state = "bulb-construct-stage2" - if(LIGHT_STAGE_COMPLETE) icon_state = "bulb-empty" - -/obj/machinery/light_construct/spot - name = "large light fixture frame" - desc = "A large light fixture under construction." - fixture_type = /obj/machinery/light/spot - sheets_refunded = 3 - -// the standard tube light fixture -/obj/machinery/light - name = "light fixture" - icon = 'icons/obj/lighting.dmi' - /// Base description and `icon_state`. - var/base_state = "tube" - icon_state = "tube_map" - desc = "A lighting fixture." - anchored = TRUE - layer = ABOVE_HUMAN_LAYER - use_power = POWER_USE_ACTIVE - idle_power_usage = 2 - active_power_usage = 20 - power_channel = LIGHT //Lights are calc'd via area so they don't need to be in the machine list - - /// Whether or not the light is turned on. - var/on = TRUE - /// Whether or not the light is currently flickering. - var/flickering = FALSE - /// Type path of the light bulb item. Used for initialization and to determine what bulbs fit. - var/light_type = /obj/item/light/tube - /// Type path for the machine to create when dismantled. Should be `/obj/machinery/light_construct` or a subtype. - var/construct_type = /obj/machinery/light_construct - - /// `spark_spread` effect datum. - var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread - - /// The installed light bolb. - var/obj/item/light/lightbulb - - /// The light's current lighting mode. One of `LIGHTMODE_*`. - var/current_mode = null - -/obj/machinery/light/get_color() - return lightbulb ? lightbulb.get_color() : null - -/obj/machinery/light/set_color(color) - if (!lightbulb) - return - lightbulb.set_color(color) - queue_icon_update() - -// the smaller bulb light fixture -/obj/machinery/light/small - icon_state = "bulb_map" - base_state = "bulb" - desc = "A small lighting fixture." - light_type = /obj/item/light/bulb - construct_type = /obj/machinery/light_construct/small - -/obj/machinery/light/small/emergency - light_type = /obj/item/light/bulb/red - -/obj/machinery/light/small/red - light_type = /obj/item/light/bulb/red - -/obj/machinery/light/spot - name = "spotlight" - desc = "A more robust socket for light tubes that demand more power." - light_type = /obj/item/light/tube/large - construct_type = /obj/machinery/light_construct/spot - -// create a new lighting fixture -/obj/machinery/light/Initialize(mapload, obj/machinery/light_construct/construct = null) - . = ..(mapload) - - s.set_up(1, 1, src) - - if(construct) - construct_type = construct.type - construct.transfer_fingerprints_to(src) - set_dir(construct.dir) - else - var/light_color = get_color_from_area() - lightbulb = new light_type(src, light_color) - if(prob(lightbulb.broken_chance)) - broken(TRUE) - - on = powered() - update_icon(FALSE) - -/// Fetches the light's color based on area flags. Used for Init and for smartly installing new bulbs during runtime (See light replacers). -/obj/machinery/light/proc/get_color_from_area() - var/light_color = null - var/area/A = get_area(src) - switch (A.lighting_tone) - if (AREA_LIGHTING_WHITE) - light_color = LIGHT_COLOUR_WHITE - if (AREA_LIGHTING_WARM) - light_color = LIGHT_COLOUR_WARM - if (AREA_LIGHTING_COOL) - light_color = LIGHT_COLOUR_COOL - return light_color - -/obj/machinery/light/Destroy() - QDEL_NULL(lightbulb) - QDEL_NULL(s) - . = ..() - -/obj/machinery/light/on_update_icon(trigger = TRUE) - overlays.Cut() - icon_state = "[base_state]_empty" //Never use the initial state. That'll just reset it to the mapping icon. - atom_flags = atom_flags & ~ATOM_FLAG_CAN_BE_PAINTED - pixel_y = 0 - pixel_x = 0 - var/turf/T = get_step(get_turf(src), dir) - if(istype(T) && T.density) - if(dir == NORTH) - pixel_y = 21 - else if(dir == EAST) - pixel_x = 10 - else if(dir == WEST) - pixel_x = -10 - - var/_state - switch(get_status()) // set icon_states - if(LIGHT_OK) - _state = "[base_state][on]" - atom_flags |= ATOM_FLAG_CAN_BE_PAINTED - if(LIGHT_EMPTY) - on = FALSE - if(LIGHT_BURNED) - _state = "[base_state]_burned" - on = FALSE - if(LIGHT_BROKEN) - _state = "[base_state]_broken" - on = FALSE - - if(istype(lightbulb, /obj/item/light)) - var/image/I = image(icon, src, _state) - I.color = get_mode_color() - if (on) - I.plane = EFFECTS_ABOVE_LIGHTING_PLANE - I.layer = ABOVE_LIGHTING_LAYER - overlays += I - - if(on) - - update_use_power(POWER_USE_ACTIVE) - - var/changed = FALSE - if(current_mode && (current_mode in lightbulb.lighting_modes)) - changed = set_light(arglist(lightbulb.lighting_modes[current_mode])) - else - changed = set_light(lightbulb.b_max_bright, lightbulb.b_inner_range, lightbulb.b_outer_range, lightbulb.b_curve, lightbulb.b_colour) - - if(trigger && changed && get_status() == LIGHT_OK) - switch_check() - else - update_use_power(POWER_USE_OFF) - set_light(0) - change_power_consumption((light_outer_range * light_max_bright) * LIGHTING_POWER_FACTOR, POWER_USE_ACTIVE) - -/// Returns `lightbulb.status`. -/obj/machinery/light/proc/get_status() - if(!lightbulb) - return LIGHT_EMPTY - else - return lightbulb.status - -/// Calls `lightbulb.switch_on()` and updates the lighting and icon accordingly. -/obj/machinery/light/proc/switch_check() - lightbulb.switch_on() - if(get_status() != LIGHT_OK) - set_light(0) - update_icon() - -/obj/machinery/light/attack_generic(mob/user, damage) - if(!damage) - return - var/status = get_status() - if(status == LIGHT_EMPTY || status == LIGHT_BROKEN) - to_chat(user, SPAN_WARNING("You can't do anything with \the [src].")) - return - if(!(status == LIGHT_OK || status == LIGHT_BURNED)) - return - user.visible_message( - SPAN_WARNING("\The [user] smashes \the [src]!"), - SPAN_WARNING("You smash \the [src]!") - ) - attack_animation(user) - broken() - return TRUE - -/// Set's the lights `current_mode`. `new_mode` should be one of `LIGHTMODE_*`. -/obj/machinery/light/proc/set_mode(new_mode) - if(current_mode != new_mode) - current_mode = new_mode - update_icon(FALSE) - -/// Return's the current mode's `l_color` value or, if there is no `current_mode`, the lightbulb's color. -/obj/machinery/light/proc/get_mode_color() - if (current_mode && (current_mode in lightbulb.lighting_modes)) - return lightbulb.lighting_modes[current_mode]["l_color"] - else if (lightbulb) - return lightbulb.b_colour - else - return null - -/// Toggles the light's emergency lighting mode (`LIGHTMODE_EMERGENCY`). -/obj/machinery/light/proc/set_emergency_lighting(enable) - if(!lightbulb) - return - - if(enable) - if(LIGHTMODE_EMERGENCY in lightbulb.lighting_modes) - set_mode(LIGHTMODE_EMERGENCY) - update_power_channel(ENVIRON) - else - if(current_mode == LIGHTMODE_EMERGENCY) - set_mode(null) - update_power_channel(initial(power_channel)) - -/// Sets the light's `on` state, if there's a functional light bulb installed. -/obj/machinery/light/proc/seton(state) - on = (state && get_status() == LIGHT_OK) - queue_icon_update() - -/obj/machinery/light/examine(mob/user) - . = ..() - var/fitting = get_fitting_name() - switch(get_status()) - if(LIGHT_OK) - to_chat(user, "It is turned [on? "on" : "off"].") - if(LIGHT_EMPTY) - to_chat(user, "The [fitting] has been removed.") - if(LIGHT_BURNED) - to_chat(user, "The [fitting] is burnt out.") - if(LIGHT_BROKEN) - to_chat(user, "The [fitting] has been smashed.") - -/// Fetches the name of `light_type`. -/obj/machinery/light/proc/get_fitting_name() - var/obj/item/light/L = light_type - return initial(L.name) - -/// Attempts to insert a given light bulb. Called by `attackby()`. -/obj/machinery/light/proc/insert_bulb(obj/item/light/L) - L.forceMove(src) - lightbulb = L - - seton(powered()) - update_icon() - -/// Attempts to remove an installed light bulb. Called by `attack_hand()`. -/obj/machinery/light/proc/remove_bulb() - . = lightbulb - lightbulb.dropInto(loc) - lightbulb.update_icon() - lightbulb = null - seton(FALSE) - update_icon() - -/obj/machinery/light/attackby(obj/item/W, mob/user) - - // attempt to insert light - if(istype(W, /obj/item/light)) - if(lightbulb) - to_chat(user, SPAN_WARNING("There is a [get_fitting_name()] already inserted.")) - return - if(!istype(W, light_type)) - to_chat(user, SPAN_WARNING("This type of light requires a [get_fitting_name()].")) - return - if(!user.unEquip(W, src)) - return - user.visible_message( - SPAN_NOTICE("\The [user] inserts \a [W] into \the [src]."), - SPAN_NOTICE("You insert \the [W] into \the [src]."), - SPAN_ITALIC("You hear something being screwed in.") - ) - insert_bulb(W) - add_fingerprint(user) - - // attempt to break the light - else if(lightbulb && (lightbulb.status != LIGHT_BROKEN) && user.a_intent != I_HELP) - if(prob(1 + W.force * 5)) - user.visible_message( - SPAN_WARNING("\The [user] smashes \the [src]!"), - SPAN_WARNING("You smash \the [src]!"), - SPAN_WARNING("You hear a small glass object shatter.") - ) - if(on && (W.obj_flags & OBJ_FLAG_CONDUCTIBLE)) - if (prob(12)) - electrocute_mob(user, get_area(src), src, 0.3) - broken() - - else - user.visible_message( - SPAN_WARNING("\The [user] hits \the [src]!"), - SPAN_WARNING("You hit \the [src]!"), - SPAN_WARNING("You hear glass cracking.") - ) - playsound(loc, "glasscrack", 40, TRUE) - attack_animation(user) - - // attempt to stick weapon into light socket - else if(!lightbulb) - if(istype(W, /obj/item/screwdriver)) //If it's a screwdriver open it. - playsound(loc, 'sound/items/Screwdriver.ogg', 50, TRUE) - user.visible_message( - SPAN_NOTICE("\The [user] opens \the [src]'s casing."), - SPAN_NOTICE("You open up \the [src]'s casing."), - SPAN_ITALIC("You hear screws being loosened.") - ) - var/obj/machinery/light_construct/C = new construct_type(loc, dir, src) - C.stage = LIGHT_STAGE_WIRED - C.update_icon() - qdel(src) - return - - user.visible_message( - SPAN_WARNING("\The [user] shoves \a [W] into \the [src]!"), - SPAN_DANGER("You stick \the [W] into \the [src]!") - ) - if(powered() && (W.obj_flags & OBJ_FLAG_CONDUCTIBLE)) - var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread - s.set_up(3, 1, src) - s.start() - if (prob(75)) - electrocute_mob(user, get_area(src), src, rand(0.7,1.0)) - - -// returns whether this light has power -// true if area has power and lightswitch is on -/obj/machinery/light/powered() - var/area/A = get_area(src) - return A && A.lightswitch && ..(power_channel) - -/// Causes the light to start flickering. -/obj/machinery/light/proc/flicker(amount = rand(10, 20)) - if(flickering) return - flickering = TRUE - spawn(0) - if(on && get_status() == LIGHT_OK) - for(var/i = 0; i < amount; i++) - if(get_status() != LIGHT_OK) break - on = !on - update_icon(FALSE) - sleep(rand(5, 15)) - on = (get_status() == LIGHT_OK) - update_icon(0) - flickering = FALSE - -// ai attack - make lights flicker, because why not - -/obj/machinery/light/attack_ai(mob/user) - to_chat(user, SPAN_NOTICE("You cause \the [src] to flick on and off.")) - flicker(1) - -// attack with hand - remove tube/bulb -// if hands aren't protected and the light is on, burn the player -/obj/machinery/light/physical_attack_hand(mob/living/user) - if(!lightbulb) - to_chat(user, SPAN_WARNING("There is no [get_fitting_name()] in this light.")) - return TRUE - - if(istype(user,/mob/living/carbon/human)) - var/mob/living/carbon/human/H = user - if(H.species.can_shred(H)) - H.visible_message( - SPAN_WARNING("\The [user] shreds \the [src]!"), - SPAN_WARNING("You shred \the [src]!"), - SPAN_WARNING("You hear glass shattering!")) - broken() - return TRUE - - // make it burn hands if not wearing fire-insulated gloves - if(on) - var/prot = FALSE - var/mob/living/carbon/human/H = user - - if(istype(H)) - if(H.gloves) - var/obj/item/clothing/gloves/G = H.gloves - if(G.max_heat_protection_temperature) - if(G.max_heat_protection_temperature > LIGHT_BULB_TEMPERATURE) - prot = TRUE - else - prot = TRUE - - if(prot || (MUTATION_COLD_RESISTANCE in user.mutations)) - to_chat(user, SPAN_NOTICE("You remove the [get_fitting_name()].")) - else if(istype(user) && user.psi && !user.psi.suppressed && user.psi.get_rank(PSI_PSYCHOKINESIS) >= PSI_RANK_OPERANT) - to_chat(user, SPAN_NOTICE("You telekinetically remove the [get_fitting_name()].")) - else if(user.a_intent != I_HELP) - var/obj/item/organ/external/hand = H.organs_by_name[user.hand ? BP_L_HAND : BP_R_HAND] - if(hand && hand.is_usable() && !hand.can_feel_pain()) - user.apply_damage(3, DAMAGE_BURN, user.hand ? BP_L_HAND : BP_R_HAND, used_weapon = src) - user.visible_message( - SPAN_WARNING("\The [user]'s [hand] burns and sizzles as \he touches the hot [get_fitting_name()]."), - SPAN_WARNING("Your [hand.name] burns and sizzles as you remove the hot [get_fitting_name()].") - ) - else - to_chat(user, SPAN_WARNING("You try to remove the [get_fitting_name()], but it's too hot and you don't want to burn your hand.")) - return TRUE - else - to_chat(user, SPAN_NOTICE("You remove the [get_fitting_name()].")) - - // create a light tube/bulb item and put it in the user's hand - user.put_in_active_hand(remove_bulb()) //puts it in our active hand - return TRUE - -// ghost attack - make lights flicker like an AI, but even spookier! -/obj/machinery/light/attack_ghost(mob/user) - if(round_is_spooky()) - flicker(rand(2,5)) - else return ..() - -/// Break the light and make sparks if it was on. -/obj/machinery/light/proc/broken(skip_sound_and_sparks = FALSE) - if(!lightbulb) - return - - if(!skip_sound_and_sparks) - if(lightbulb && !(lightbulb.status == LIGHT_BROKEN)) - playsound(loc, 'sound/effects/Glasshit.ogg', 50, TRUE) - if(on) - s.set_up(3, 1, src) - s.start() - lightbulb.set_status(LIGHT_BROKEN) - update_icon() - -/// Fixes a broken light. -/obj/machinery/light/proc/fix() - if(get_status() == LIGHT_OK || !lightbulb) - return - lightbulb.set_status(LIGHT_OK) - seton(TRUE) - update_icon() - -// destroy the whole light fixture or just shatter it -/obj/machinery/light/ex_act(severity) - switch(severity) - if(EX_ACT_DEVASTATING) - qdel(src) - return - if(EX_ACT_HEAVY) - if (prob(75)) - broken() - if(EX_ACT_LIGHT) - if (prob(50)) - broken() - -/obj/machinery/light/power_change() - seton(powered()) - -/obj/machinery/light/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume) - if(prob(max(0, exposed_temperature - 673))) //0% at <400C, 100% at >500C - broken() - -/obj/machinery/light/small/readylight - light_type = /obj/item/light/bulb/red/readylight - /// Whether or not the light's 'ready' state is enabled. - var/state = FALSE - -/// Sets the lights `state` and updates the light mode accordingly. -/obj/machinery/light/small/readylight/proc/set_state(new_state) - state = new_state - if(state) - set_mode(LIGHTMODE_READY) - else - set_mode(null) - -/obj/machinery/light/navigation - name = "navigation light" - desc = "A periodically flashing light." - icon = 'icons/obj/lighting_nav.dmi' - icon_state = "nav10" - base_state = "nav1" - light_type = /obj/item/light/tube/large - on = TRUE - -/obj/machinery/light/navigation/delay2 - icon_state = "nav20" - base_state = "nav2" -/obj/machinery/light/navigation/delay3 - icon_state = "nav30" - base_state = "nav3" -/obj/machinery/light/navigation/delay4 - icon_state = "nav40" - base_state = "nav4" -/obj/machinery/light/navigation/delay5 - icon_state = "nav50" - base_state = "nav5" - -/obj/machinery/light/navigation/powered() - return TRUE - - -// the light item -// can be tube or bulb subtypes -// will fit into empty /obj/machinery/light of the corresponding type -/obj/item/light - icon = 'icons/obj/lighting.dmi' - force = 2 - throwforce = 5 - w_class = ITEM_SIZE_TINY - /// The light bulb's status. One of `LIGHT_*`. - var/status = EMPTY_BITFIELD - /// Base `icon_state`. - var/base_state - /// Number of times the light bulb has been switched on. Used to 'burn out' the bulb if switched too often. - var/switchcount = 0 - matter = list(MATERIAL_STEEL = 60) - /// Probability the light bulb spawns broken. - var/broken_chance = 2 - atom_flags = ATOM_FLAG_NO_TEMP_CHANGE | ATOM_FLAG_CAN_BE_PAINTED - - /// Lighting `max_bright` value when turned on. - var/b_max_bright = 0.9 - /// Lighting `inner_range` value when turned on. - var/b_inner_range = 1 - /// Lighting `outer_range` value when turned on - var/b_outer_range = 5 - /// Lighting `curve` value when turned on. - var/b_curve = 2 - /// Lighting `colour` value when turned on. - var/b_colour = LIGHT_COLOUR_WARM - - /** - * List of lists. Alternative lighting modes the bulb supports. Entry index should be the `LIGHTMODE_*` type supported, and the value should be a list of `l_*` lighting values to be applied when the mode is enabled. - * - * Example: `LIGHTMODE_EMERGENCY = list(l_outer_range = 4, l_max_bright = 1, l_color = LIGHT_COLOUR_E_RED)` - */ - var/list/lighting_modes = list() - - /// Sound file to play when the light is turned on. - var/sound_on - /// Whether or not to randomly select a lighting color from `random_tone_options` on init. - var/random_tone = TRUE - /// List of colors to pick from on init if `random_tone` is set. - var/list/random_tone_options = LIGHT_STANDARD_COLORS - -/obj/item/light/Initialize(mapload, light_color) - . = ..() - if (light_color) - set_color(light_color) - else if (random_tone) - set_color(pick(random_tone_options)) - -/obj/item/light/examine(mob/user) - . = ..() - if (reagents?.total_volume && Adjacent(user)) - to_chat(user, SPAN_WARNING("There's some sort of fluid inside \the [src].")) - -/obj/item/light/get_color() - return b_colour - -/obj/item/light/set_color(color) - b_colour = isnull(color) ? LIGHT_COLOUR_WHITE : color - update_icon() - -/obj/item/light/tube - name = "light tube" - desc = "A replacement light tube." - icon_state = "ltube" - base_state = "ltube" - item_state = "c_tube" - matter = list(MATERIAL_GLASS = 100, MATERIAL_ALUMINIUM = 20) - - b_outer_range = 5 - lighting_modes = list( - LIGHTMODE_EMERGENCY = list(l_outer_range = 4, l_max_bright = 1, l_color = LIGHT_COLOUR_E_RED), - ) - sound_on = 'sound/machines/lightson.ogg' - -/obj/item/light/tube/warm - name = "light tube (warm)" - desc = "A replacement light tube. This one provides soft, warm lighting." - b_colour = LIGHT_COLOUR_WARM - -/obj/item/light/tube/cool - name = "light tube (cool)" - desc = "A replacement light tube. This one provides crisp, cool lighting." - b_colour = LIGHT_COLOUR_COOL - -/obj/item/light/tube/white - name = "light tube (white)" - desc = "A replacement light tube. This one provides clean, white lighting." - b_colour = LIGHT_COLOUR_WHITE - -/obj/item/light/tube/party/Initialize() //Randomly colored light tubes. Mostly for testing, but maybe someone will find a use for them. - . = ..() - b_colour = rgb(pick(0,255), pick(0,255), pick(0,255)) - -/obj/item/light/tube/large - w_class = ITEM_SIZE_SMALL - name = "large light tube" - b_max_bright = 0.95 - b_inner_range = 2 - b_outer_range = 8 - b_curve = 2.5 - -/obj/item/light/tube/large/warm - name = "large light tube (warm)" - desc = "A replacement light tube. This one provides soft, warm lighting." - b_colour = LIGHT_COLOUR_WARM - -/obj/item/light/tube/large/cool - name = "large light tube (cool)" - desc = "A replacement light tube. This one provides crisp, cool lighting." - b_colour = LIGHT_COLOUR_COOL - -/obj/item/light/tube/large/white - name = "large light tube (white)" - desc = "A replacement light tube. This one provides clean, white lighting." - b_colour = LIGHT_COLOUR_WHITE - -/obj/item/light/tube/large/party/Initialize() //Randomly colored light tubes. Mostly for testing, but maybe someone will find a use for them. - . = ..() - b_colour = rgb(pick(0,255), pick(0,255), pick(0,255)) - -/obj/item/light/bulb - name = "light bulb" - desc = "A replacement light bulb." - icon_state = "lbulb" - base_state = "lbulb" - item_state = "contvapour" - broken_chance = 3 - matter = list(MATERIAL_GLASS = 100) - - b_max_bright = 0.6 - b_inner_range = 0.1 - b_outer_range = 4 - b_curve = 3 - lighting_modes = list( - LIGHTMODE_EMERGENCY = list(l_outer_range = 3, l_max_bright = 1, l_color = LIGHT_COLOUR_E_RED) - ) - -/obj/item/light/bulb/warm - name = "light bulb (warm)" - desc = "A replacement light bulb. This one provides soft, warm lighting." - b_colour = LIGHT_COLOUR_WARM - -/obj/item/light/bulb/cool - name = "light bulb (cool)" - desc = "A replacement light bulb. This one provides crisp, cool lighting." - b_colour = LIGHT_COLOUR_COOL - -/obj/item/light/bulb/white - name = "light bulb (white)" - desc = "A replacement light bulb. This one provides clean, white lighting." - b_colour = LIGHT_COLOUR_WHITE - -/obj/item/light/bulb/red - color = LIGHT_COLOUR_E_RED - b_colour = LIGHT_COLOUR_E_RED - random_tone = FALSE - -/obj/item/light/bulb/red/readylight - lighting_modes = list( - LIGHTMODE_READY = list(l_outer_range = 5, l_max_bright = 1, l_color = LIGHT_COLOUR_READY) - ) - -/obj/item/light/throw_impact(atom/hit_atom) - ..() - shatter() - -/obj/item/light/bulb/fire - name = "fire bulb" - desc = "A replacement fire bulb." - icon_state = "fbulb" - base_state = "fbulb" - item_state = "egg4" - matter = list(MATERIAL_GLASS = 100) - -// update the icon state and description of the light -/obj/item/light/on_update_icon() - color = b_colour - var/broken - switch(status) - if(LIGHT_OK) - icon_state = base_state - desc = "A replacement [name]." - if(LIGHT_BURNED) - icon_state = "[base_state]_burned" - desc = "A burnt-out [name]." - if(LIGHT_BROKEN) - icon_state = "[base_state]_broken" - desc = "A broken [name]." - broken = TRUE - var/image/I = image(icon, src, "[base_state]_attachment[broken ? "_broken" : ""]") - I.color = null - overlays += I - -/obj/item/light/New(atom/newloc, obj/machinery/light/fixture = null) - ..() - update_icon() - -// if a syringe, can inject phoron to make it explode -/obj/item/light/attackby(obj/item/I, mob/user) - if(istype(I, /obj/item/reagent_containers/syringe) && status == LIGHT_OK) - var/obj/item/reagent_containers/syringe/S = I - - if(S.reagents.total_volume) - if (!reagents) - create_reagents(5) - S.reagents.trans_to_obj(src, 5) - to_chat(user, SPAN_WARNING("You inject the solution into \the [src].")) - if (reagents.get_reagent_amount(/datum/reagent/toxin/phoron) >= LIGHT_PHORON_EXPLODE_THRESHOLD) - log_and_message_admins("injected a light with phoron, rigging it to explode.", user) - return - else - to_chat(user, SPAN_WARNING("\The [src] is already filled with fluid!")) - . = ..() - -// shatter light, unless it was an attempt to put it in a light socket -// now only shatter if the intent was harm -/obj/item/light/afterattack(atom/target, mob/user, proximity) - if(!proximity) - return - if(istype(target, /obj/machinery/light)) - return - if(user.a_intent != I_HURT) - return - - shatter() - -/// Handles updating the light's `status`. -/obj/item/light/proc/set_status(new_status) - if (status == new_status) - return - status = new_status - switch (status) - if (LIGHT_BROKEN) - force = 5 - sharp = TRUE - update_icon() - -/// Handles shattering the light bulb under certain conditions, such as impacts or damage. -/obj/item/light/proc/shatter() - if(status == LIGHT_OK || status == LIGHT_BURNED) - visible_message( - SPAN_WARNING("\The [src] shatters!"), - SPAN_WARNING("You hear a small glass object shatter.") - ) - set_status(LIGHT_BROKEN) - playsound(loc, "glasscrack", 75, TRUE) - -/// Handles switching the light bulb on. -/obj/item/light/proc/switch_on() - switchcount++ - if(reagents) - if (reagents.get_reagent_amount(/datum/reagent/toxin/phoron) >= LIGHT_PHORON_EXPLODE_THRESHOLD) - visible_message( - SPAN_DANGER("\The [src] flares brilliantly!"), - SPAN_DANGER("You hear a loud crack!") - ) - log_and_message_admins("Rigged light explosion, last touched by [fingerprintslast]") - var/turf/T = get_turf(loc) - set_status(LIGHT_BROKEN) - addtimer(CALLBACK(src, .proc/explosion, T, 0, 0, 3, 5), 2) - else - visible_message(SPAN_WARNING("\The [src] short-circuits as something burns out its filament!")) - set_status(LIGHT_BURNED) - if (sound_on) - playsound(src, sound_on, 100) - else if(prob(min(60, switchcount*switchcount*0.01))) - set_status(LIGHT_BURNED) - else if(sound_on) - playsound(src, sound_on, 75) - return status - -/obj/machinery/light/do_simple_ranged_interaction(mob/user) - if(lightbulb) - remove_bulb() - return TRUE - -#undef LIGHT_STAGE_COMPLETE -#undef LIGHT_STAGE_WIRED -#undef LIGHT_STAGE_EMPTY diff --git a/code/modules/power/port_gen.dm b/code/modules/power/port_gen.dm deleted file mode 100644 index 38125dc727b8f..0000000000000 --- a/code/modules/power/port_gen.dm +++ /dev/null @@ -1,557 +0,0 @@ -//Baseline portable generator. Has all the default handling. Not intended to be used on it's own (since it generates unlimited power). -/obj/machinery/power/port_gen - name = "Placeholder Generator" //seriously, don't use this. It can't be anchored without VV magic. - desc = "A portable generator for emergency backup power." - icon = 'icons/obj/power.dmi' - icon_state = "portgen0" - density = TRUE - anchored = FALSE - interact_offline = TRUE - - machine_name = "portable generator" - machine_desc = "A portable generator often used for backup power." - - var/active = 0 - var/power_gen = 5000 - var/recent_fault = 0 - var/power_output = 1 - atom_flags = ATOM_FLAG_CLIMBABLE - var/datum/sound_token/sound_token - var/sound_id - var/working_sound - -/obj/machinery/power/port_gen/proc/IsBroken() - return (stat & (BROKEN|EMPED)) - -/obj/machinery/power/port_gen/proc/HasFuel() //Placeholder for fuel check. - return 1 - -/obj/machinery/power/port_gen/proc/UseFuel() //Placeholder for fuel use. - return - -/obj/machinery/power/port_gen/proc/DropFuel() - return - -/obj/machinery/power/port_gen/proc/handleInactive() - return - -/obj/machinery/power/port_gen/proc/update_sound() - if(!working_sound) - return - if(!sound_id) - sound_id = "[type]_[sequential_id(/obj/machinery/power/port_gen)]" - if(active && HasFuel() && !IsBroken()) - var/volume = 10 + 15*power_output - if(!sound_token) - sound_token = GLOB.sound_player.PlayLoopingSound(src, sound_id, working_sound, volume = volume) - sound_token.SetVolume(volume) - else if(sound_token) - QDEL_NULL(sound_token) - - -/obj/machinery/power/port_gen/Process() - ..() - if(active && HasFuel() && !IsBroken() && anchored && powernet) - add_avail(power_gen * power_output) - UseFuel() - src.updateDialog() - else - active = 0 - handleInactive() - update_icon() - update_sound() - -/obj/machinery/power/port_gen/on_update_icon() - if(!active) - icon_state = initial(icon_state) - return 1 - else - icon_state = "[initial(icon_state)]on" - -/obj/machinery/power/port_gen/CanUseTopic(mob/user) - if(!anchored) - to_chat(user, "The generator needs to be secured first.") - return STATUS_CLOSE - return ..() - -/obj/machinery/power/port_gen/examine(mob/user, distance) - . = ..() - if(distance > 1) - return - if(active) - to_chat(usr, "The generator is on.") - else - to_chat(usr, "The generator is off.") -/obj/machinery/power/port_gen/emp_act(severity) - if(!active) - return - var/duration - switch(severity) - if(EMP_ACT_HEAVY) - stat &= BROKEN - if(prob(75)) explode() - else duration = 10 MINUTES - if(EMP_ACT_LIGHT) - if(prob(25)) stat &= BROKEN - if(prob(10)) explode() - else duration = 30 SECONDS - - if(duration) - stat |= EMPED - addtimer(CALLBACK(src, .proc/resolve_emp_timer), duration) - -/obj/machinery/power/port_gen/proc/resolve_emp_timer() - stat &= ~EMPED - -/obj/machinery/power/port_gen/proc/explode() - explosion(src.loc, -1, 3, 5, -1) - qdel(src) - -#define TEMPERATURE_DIVISOR 40 -#define TEMPERATURE_CHANGE_MAX 20 - -//A power generator that runs on solid plasma sheets. -/obj/machinery/power/port_gen/pacman - name = "\improper P.A.C.M.A.N.-type Portable Generator" - desc = "A power generator that runs on solid phoron sheets. Rated for 80 kW max safe output." - - machine_name = "\improper PACMAN-type generator" - machine_desc = "A portable generator often used for backup power or running small spacecraft. Runs on solid phoron sheets; rated for 80 kW max safe output." - - var/sheet_name = "Phoron Sheets" - var/sheet_path = /obj/item/stack/material/phoron - - /* - These values were chosen so that the generator can run safely up to 80 kW - A full 50 phoron sheet stack should last 20 minutes at power_output = 4 - temperature_gain and max_temperature are set so that the max safe power level is 4. - Setting to 5 or higher can only be done temporarily before the generator overheats. - */ - power_gen = 20000 //Watts output per power_output level - working_sound = 'sound/machines/engine.ogg' - construct_state = /decl/machine_construction/default/panel_closed - uncreated_component_parts = null - stat_immune = 0 - var/max_power_output = 5 //The maximum power setting without emagging. - var/max_safe_output = 4 // For UI use, maximal output that won't cause overheat. - var/time_per_sheet = 96 //fuel efficiency - how long 1 sheet lasts at power level 1 - var/max_sheets = 100 //max capacity of the hopper - var/max_temperature = 300 //max temperature before overheating increases - var/temperature_gain = 50 //how much the temperature increases per power output level, in degrees per level - - var/sheets = 0 //How many sheets of material are loaded in the generator - var/sheet_left = 0 //How much is left of the current sheet - var/operating_temperature = 0 //The current temperature - var/overheating = 0 //if this gets high enough the generator explodes - var/max_overheat = 150 - -/obj/machinery/power/port_gen/pacman/Initialize() - . = ..() - if(anchored) - connect_to_network() - -/obj/machinery/power/port_gen/pacman/Destroy() - DropFuel() - return ..() - -/obj/machinery/power/port_gen/pacman/RefreshParts() - var/temp_rating = total_component_rating_of_type(/obj/item/stock_parts/micro_laser) - temp_rating += total_component_rating_of_type(/obj/item/stock_parts/capacitor) - - max_sheets = 50 * clamp(total_component_rating_of_type(/obj/item/stock_parts/matter_bin), 0, 5) ** 2 - - power_gen = round(initial(power_gen) * clamp(temp_rating, 0, 20) / 2) - ..() - -/obj/machinery/power/port_gen/pacman/examine(mob/user) - . = ..(user) - to_chat(user, "\The [src] appears to be producing [power_gen*power_output] W.") - to_chat(user, "There [sheets == 1 ? "is" : "are"] [sheets] sheet\s left in the hopper.") - if(IsBroken()) to_chat(user, "\The [src] seems to have broken down.") - if(overheating) to_chat(user, "\The [src] is overheating!") - -/obj/machinery/power/port_gen/pacman/proc/process_exhaust() - var/datum/gas_mixture/environment = loc?.return_air() - if(environment) - environment.adjust_gas(GAS_CO, 0.05*power_output) - -/obj/machinery/power/port_gen/pacman/HasFuel() - var/needed_sheets = power_output / time_per_sheet - if(sheets >= needed_sheets - sheet_left) - return 1 - return 0 - -//Removes one stack's worth of material from the generator. -/obj/machinery/power/port_gen/pacman/DropFuel() - if(sheets) - var/obj/item/stack/material/S = new sheet_path(loc) - var/amount = min(sheets, S.max_amount) - S.amount = amount - sheets -= amount - -/obj/machinery/power/port_gen/pacman/UseFuel() - - //how much material are we using this iteration? - var/needed_sheets = power_output / time_per_sheet - - //HasFuel() should guarantee us that there is enough fuel left, so no need to check that - //the only thing we need to worry about is if we are going to rollover to the next sheet - if (needed_sheets > sheet_left) - sheets-- - sheet_left = (1 + sheet_left) - needed_sheets - else - sheet_left -= needed_sheets - - //calculate the "target" temperature range - //This should probably depend on the external temperature somehow, but whatever. - var/lower_limit = 56 + power_output * temperature_gain - var/upper_limit = 76 + power_output * temperature_gain - /* - Hot or cold environments can affect the equilibrium temperature - The lower the pressure the less effect it has. I guess it cools using a radiator or something when in vacuum. - Gives traitors more opportunities to sabotage the generator or allows enterprising engineers to build additional - cooling in order to get more power out. - */ - var/datum/gas_mixture/environment = loc.return_air() - if (environment) - var/outer_temp = 0.1 * operating_temperature + T0C - if(outer_temp > environment.temperature) //sharing the heat - var/heat_transfer = environment.get_thermal_energy_change(outer_temp) - if(heat_transfer > 1) - var/heating_power = 0.1 * power_gen * power_output - heat_transfer = min(heat_transfer, heating_power) - environment.add_thermal_energy(heat_transfer) - - var/ratio = min(environment.return_pressure()/ONE_ATMOSPHERE, 1) - var/ambient = environment.temperature - T20C - lower_limit += ambient*ratio - upper_limit += ambient*ratio - - var/average = (upper_limit + lower_limit)/2 - - //calculate the temperature increase - var/bias = clamp(round((average - operating_temperature)/TEMPERATURE_DIVISOR, 1), -TEMPERATURE_CHANGE_MAX, TEMPERATURE_CHANGE_MAX) - operating_temperature += bias + rand(-7, 7) - - if (operating_temperature > max_temperature) - overheat() - else if (overheating > 0) - overheating-- - process_exhaust() - -/obj/machinery/power/port_gen/pacman/handleInactive() - var/cooling_temperature = 20 - var/datum/gas_mixture/environment = loc.return_air() - if (environment) - var/ratio = min(environment.return_pressure()/ONE_ATMOSPHERE, 1) - var/ambient = environment.temperature - T20C - cooling_temperature += ambient*ratio - - if (operating_temperature > cooling_temperature) - var/temp_loss = (operating_temperature - cooling_temperature)/TEMPERATURE_DIVISOR - temp_loss = clamp(round(temp_loss, 1), 2, TEMPERATURE_CHANGE_MAX) - operating_temperature = max(operating_temperature - temp_loss, cooling_temperature) - src.updateDialog() - - if(overheating) - overheating-- - -/obj/machinery/power/port_gen/pacman/proc/overheat() - overheating++ - if (overheating > max_overheat) - explode() - -/obj/machinery/power/port_gen/pacman/explode() - //Vapourize all the phoron - //When ground up in a grinder, 1 sheet produces 20 u of phoron -- Chemistry-Machinery.dm - //1 mol = 10 u? I dunno. 1 mol of carbon is definitely bigger than a pill - var/phoron = (sheets+sheet_left)*20 - var/datum/gas_mixture/environment = loc.return_air() - if (environment) - environment.adjust_gas_temp(GAS_PHORON, phoron/10, operating_temperature + T0C) - - sheets = 0 - sheet_left = 0 - ..() - -/obj/machinery/power/port_gen/pacman/emag_act(var/remaining_charges, var/mob/user) - if (active && prob(25)) - explode() //if they're foolish enough to emag while it's running - - if (!emagged) - emagged = TRUE - return 1 - -/obj/machinery/power/port_gen/pacman/components_are_accessible(path) - return !active && ..() - -/obj/machinery/power/port_gen/pacman/cannot_transition_to(state_path, mob/user) - if(active) - return SPAN_WARNING("You cannot do this while \the [src] is running!") - return ..() - -/obj/machinery/power/port_gen/pacman/attackby(var/obj/item/O as obj, var/mob/user as mob) - if(istype(O, sheet_path)) - var/obj/item/stack/addstack = O - var/amount = min((max_sheets - sheets), addstack.amount) - if(amount < 1) - to_chat(user, "The [src.name] is full!") - return - to_chat(user, "You add [amount] sheet\s to the [src.name].") - sheets += amount - addstack.use(amount) - updateUsrDialog() - return - if(isWrench(O) && !active) - if(!anchored) - connect_to_network() - to_chat(user, "You secure the generator to the floor.") - else - disconnect_from_network() - to_chat(user, "You unsecure the generator from the floor.") - - playsound(src.loc, 'sound/items/Deconstruct.ogg', 50, 1) - anchored = !anchored - return component_attackby(O, user) - -/obj/machinery/power/port_gen/pacman/dismantle() - while (sheets > 0) - DropFuel() - . = ..() - -/obj/machinery/power/port_gen/pacman/interface_interact(mob/user) - ui_interact(user) - return TRUE - -/obj/machinery/power/port_gen/pacman/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1) - if(IsBroken()) - return - - var/data[0] - data["active"] = active - if(istype(user, /mob/living/silicon/ai)) - data["is_ai"] = 1 - else if(istype(user, /mob/living/silicon/robot) && !Adjacent(user)) - data["is_ai"] = 1 - else - data["is_ai"] = 0 - data["output_set"] = power_output - data["output_max"] = max_power_output - data["output_safe"] = max_safe_output - data["output_watts"] = power_output * power_gen - data["temperature_current"] = src.operating_temperature - data["temperature_max"] = src.max_temperature - if(overheating) - data["temperature_overheat"] = ((overheating / max_overheat) * 100) // Overheat percentage. Generator explodes at 100% - else - data["temperature_overheat"] = 0 - // 1 sheet = 1000cm3? - data["fuel_stored"] = round((sheets * 1000) + (sheet_left * 1000)) - data["fuel_capacity"] = round(max_sheets * 1000, 0.1) - data["fuel_usage"] = active ? round((power_output / time_per_sheet) * 1000) : 0 - data["fuel_type"] = sheet_name - data["uses_coolant"] = !!reagents - data["coolant_stored"] = reagents?.total_volume - data["coolant_capacity"] = reagents?.maximum_volume - - - - ui = SSnano.try_update_ui(user, src, ui_key, ui, data, force_open) - if (!ui) - ui = new(user, src, ui_key, "pacman.tmpl", src.name, 500, 560) - ui.set_initial_data(data) - ui.open() - ui.set_auto_update(1) - - -/* -/obj/machinery/power/port_gen/pacman/interact(mob/user) - if (get_dist(src, user) > 1 ) - if (!istype(user, /mob/living/silicon/ai)) - user.unset_machine() - close_browser(user, "window=port_gen") - return - - user.set_machine(src) - - var/dat = text("[name]
              ") - if (active) - dat += text("Generator: On
              ") - else - dat += text("Generator: Off
              ") - dat += text("[capitalize(sheet_name)]: [sheets] - Eject
              ") - var/stack_percent = round(sheet_left * 100, 1) - dat += text("Current stack: [stack_percent]%
              ") - dat += text("Power output: - [power_gen * power_output] Watts+
              ") - dat += text("Power current: [(powernet == null ? "Unconnected" : "[avail()]")]
              ") - - var/tempstr = "Temperature: [temperature]°C
              " - dat += (overheating)? "[tempstr]" : tempstr - dat += "
              Close" - show_browser(user, "[dat]", "window=port_gen") - onclose(user, "port_gen") -*/ - -/obj/machinery/power/port_gen/pacman/Topic(href, href_list) - if(..()) - return - - src.add_fingerprint(usr) - if(href_list["action"]) - if(href_list["action"] == "enable") - if(!active && HasFuel() && !IsBroken()) - active = 1 - update_icon() - if(href_list["action"] == "disable") - if (active) - active = 0 - update_icon() - if(href_list["action"] == "eject") - if(!active) - DropFuel() - if(href_list["action"] == "lower_power") - if (power_output > 1) - power_output-- - if (href_list["action"] == "higher_power") - if (power_output < max_power_output || (emagged && power_output < round(max_power_output*2.5))) - power_output++ - -/obj/machinery/power/port_gen/pacman/super - name = "S.U.P.E.R.P.A.C.M.A.N.-type Portable Generator" - desc = "A power generator that utilizes uranium sheets as fuel. Can run for much longer than the standard PACMAN type generators. Rated for 80 kW max safe output." - icon_state = "portgen1" - sheet_path = /obj/item/stack/material/uranium - sheet_name = "Uranium Sheets" - time_per_sheet = 576 //same power output, but a 50 sheet stack will last 2 hours at max safe power - machine_name = "\improper SUPERPACMAN-type generator" - machine_desc = "A portable generator used for providing backup power for extended periods. Efficiently runs on uranium sheets; rated for 80 kW max safe output." - var/rad_power = 4 - -//nuclear energy is green energy! -/obj/machinery/power/port_gen/pacman/super/process_exhaust() - return - -/obj/machinery/power/port_gen/pacman/super/UseFuel() - //produces a tiny amount of radiation when in use - if (prob(rad_power*power_output)) - SSradiation.radiate(src, 2*rad_power) - ..() - -/obj/machinery/power/port_gen/pacman/super/on_update_icon() - if(..()) - set_light(0) - return 1 - overlays.Cut() - if(power_output >= max_safe_output) - var/image/I = image(icon,"[initial(icon_state)]rad") - I.blend_mode = BLEND_ADD - I.alpha = round(255*power_output/max_power_output) - overlays += I - set_light(0.7, 0.1, rad_power + power_output - max_safe_output, 2, "#3b97ca") - else - set_light(0) - - -/obj/machinery/power/port_gen/pacman/super/explode() - //a nice burst of radiation - var/rads = rad_power*25 + (sheets + sheet_left)*1.5 - SSradiation.radiate(src, (max(40, rads))) - - explosion(src.loc, rad_power+1, rad_power+1, rad_power*2, 3) - qdel(src) - -/obj/machinery/power/port_gen/pacman/super/potato - name = "nuclear reactor" - desc = "PTTO-3, an industrial all-in-one nuclear power plant by Neo-Chernobyl GmbH. It uses uranium and vodka as a fuel source. Rated for 150 kW max safe output." - power_gen = 30000 //Watts output per power_output level - icon_state = "potato" - max_safe_output = 4 - max_power_output = 8 //The maximum power setting without emagging. - temperature_gain = 80 //how much the temperature increases per power output level, in degrees per level - max_temperature = 450 - time_per_sheet = 400 - rad_power = 12 - atom_flags = ATOM_FLAG_OPEN_CONTAINER - anchored = TRUE - machine_name = "\improper PTTO-3 nuclear generator" - machine_desc = "This nuclear generator uses a combination of uranium and, strangely, vodka. Rated for 150 kW max safe output." - var/coolant_volume = 120 - var/coolant_use = 1 - var/coolant_reagent = /datum/reagent/ethanol/vodka - -/obj/machinery/power/port_gen/pacman/super/potato/New() - create_reagents(coolant_volume) - ..() - -/obj/machinery/power/port_gen/pacman/super/potato/examine(mob/user) - . = ..() - to_chat(user, "Auxilary tank shows [reagents.total_volume]u of liquid in it.") - -/obj/machinery/power/port_gen/pacman/super/potato/UseFuel() - if(reagents.has_reagent(coolant_reagent)) - rad_power = 4 - temperature_gain = 60 - reagents.remove_any(coolant_use) - if(prob(2)) - audible_message("[src] churns happily") - else - rad_power = initial(rad_power) - temperature_gain = initial(temperature_gain) - ..() - -/obj/machinery/power/port_gen/pacman/super/potato/on_update_icon() - if(..()) - return 1 - if(power_output > max_safe_output) - icon_state = "potatodanger" - -/obj/machinery/power/port_gen/pacman/super/potato/attackby(var/obj/item/O, var/mob/user) - if(istype(O, /obj/item/reagent_containers)) - var/obj/item/reagent_containers/R = O - if(R.standard_pour_into(src,user)) - if(reagents.has_reagent("vodka")) - audible_message("[src] blips happily") - playsound(get_turf(src),'sound/machines/synth_yes.ogg', 50, 0) - else - audible_message("[src] blips in disappointment") - playsound(get_turf(src), 'sound/machines/synth_no.ogg', 50, 0) - return - ..() - -/obj/machinery/power/port_gen/pacman/super/potato/reactor - name = "nuclear reactor" - desc = "ICRER-2, an industrial-yet-compact nuclear fusion reactor powered by sheets of uranium and liquid coolant. Rated for 180 KW maximum safe output on a full coolant tank for one hour. Exceeding this is likely to result in nuclear detonation and is not recommended." - icon_state = "potato" - max_safe_output = 5 - max_power_output = 8 - temperature_gain = 70 - max_temperature = 500 - rad_power = 8 - coolant_use = 0.2 - coolant_volume = 360 - coolant_reagent = /datum/reagent/coolant - machine_name = "\improper ICRER-2 nuclear generator" - machine_desc = "A standard nuclear generator that produces a respectable amount of power by processing uranium and industrial coolant. Rated for 180 kW max safe output." - -/obj/machinery/power/port_gen/pacman/mrs - name = "M.R.S.P.A.C.M.A.N.-type Portable Generator" - desc = "An advanced power generator that runs on tritium. Rated for 200 kW maximum safe output!" - icon_state = "portgen2" - sheet_path = /obj/item/stack/material/tritium - sheet_name = "Tritium Fuel Sheets" - - //I don't think tritium has any other use, so we might as well make this rewarding for players - //max safe power output (power level = 8) is 200 kW and lasts for 1 hour - 3 or 4 of these could power the station - power_gen = 25000 //watts - max_power_output = 10 - max_safe_output = 8 - time_per_sheet = 576 - max_temperature = 800 - temperature_gain = 90 - machine_name = "\improper MRSPACMAN-type generator" - machine_desc = "A powerful and reliable backup generator that provides a hefty amount of electricity from tritium sheets. Rated for 200 kW max safe output." - -/obj/machinery/power/port_gen/pacman/mrs/explode() - //no special effects, but the explosion is pretty big (same as a supermatter shard). - explosion(src.loc, 3, 6, 12, 16, 1) - qdel(src) diff --git a/code/modules/power/power.dm b/code/modules/power/power.dm deleted file mode 100644 index b5f0c8f61b7e1..0000000000000 --- a/code/modules/power/power.dm +++ /dev/null @@ -1,323 +0,0 @@ -////////////////////////////// -// POWER MACHINERY BASE CLASS -////////////////////////////// - -///////////////////////////// -// Definitions -///////////////////////////// - -/obj/machinery/power - name = null - icon = 'icons/obj/power.dmi' - anchored = TRUE - var/datum/powernet/powernet = null - use_power = POWER_USE_OFF - idle_power_usage = 0 - active_power_usage = 0 - -/obj/machinery/power/Initialize() - . = ..() - connect_to_network() - -/obj/machinery/power/Destroy() - disconnect_from_network() - . = ..() - -/////////////////////////////// -// General procedures -////////////////////////////// - - -/obj/machinery/power/powered() - if(use_power) - return ..() - return 1 //doesn't require an external power source - -// common helper procs for all power machines -/obj/machinery/power/drain_power(var/drain_check, var/surge, var/amount = 0) - if(drain_check) - return 1 - - if(powernet && powernet.avail) - powernet.trigger_warning() - return powernet.draw_power(amount) - -/obj/machinery/power/proc/add_avail(var/amount) - if(powernet) - powernet.newavail += amount - return 1 - return 0 - -/obj/machinery/power/proc/draw_power(var/amount) - if(powernet) - return powernet.draw_power(amount) - return 0 - -/obj/machinery/power/proc/surplus() - if(powernet) - return powernet.avail-powernet.load - else - return 0 - -/obj/machinery/power/proc/avail() - if(powernet) - return powernet.avail - else - return 0 - -// connect the machine to a powernet if a node cable is present on the turf -/obj/machinery/power/proc/connect_to_network() - var/turf/T = src.loc - if(!T || !istype(T)) - return 0 - - 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) - return 0 - - C.powernet.add_machine(src) - return 1 - -// remove and disconnect the machine from its current powernet -/obj/machinery/power/proc/disconnect_from_network() - if(!powernet) - return 0 - powernet.remove_machine(src) - return 1 - -// attach a wire to a power machine - leads from the turf you are standing on -//almost never called, overwritten by all power machines but terminal and generator -/obj/machinery/power/attackby(obj/item/W, mob/user) - if((. = ..())) - return - - if(isCoil(W)) - - var/obj/item/stack/cable_coil/coil = W - - var/turf/T = user.loc - - if(!T.is_plating() || !istype(T, /turf/simulated/floor)) - return - - if(get_dist(src, user) > 1) - return - - coil.turf_place(T, user) - return TRUE - -/////////////////////////////////////////// -// Powernet handling helpers -////////////////////////////////////////// - -//returns all the cables WITHOUT a powernet in neighbors turfs, -//pointing towards the turf the machine is located at -/obj/machinery/power/proc/get_connections() - - . = list() - - var/cdir - var/turf/T - - for(var/card in GLOB.cardinal) - T = get_step(loc,card) - cdir = get_dir(T,loc) - - for(var/obj/structure/cable/C in T) - if(C.powernet) continue - if(C.d1 == cdir || C.d2 == cdir) - . += C - return . - -//returns all the cables in neighbors turfs, -//pointing towards the turf the machine is located at -/obj/machinery/power/proc/get_marked_connections() - - . = list() - - var/cdir - var/turf/T - - for(var/card in GLOB.cardinal) - T = get_step(loc,card) - cdir = get_dir(T,loc) - - for(var/obj/structure/cable/C in T) - if(C.d1 == cdir || C.d2 == cdir) - . += C - return . - -//returns all the NODES (O-X) cables WITHOUT a powernet in the turf the machine is located at -/obj/machinery/power/proc/get_indirect_connections() - . = list() - for(var/obj/structure/cable/C in loc) - if(C.powernet) continue - if(C.d1 == 0) // the cable is a node cable - . += C - return . - -/////////////////////////////////////////// -// GLOBAL PROCS for powernets handling -////////////////////////////////////////// - - -// returns a list of all power-related objects (nodes, cable, junctions) in turf, -// excluding source, that match the direction d -// if unmarked==1, only return those with no powernet -/proc/power_list(var/turf/T, var/source, var/d, var/unmarked=0, var/cable_only = 0) - . = list() - - var/reverse = d ? GLOB.reverse_dir[d] : 0 - for(var/AM in T) - if(AM == source) continue //we don't want to return source - - if(!cable_only && istype(AM,/obj/machinery/power)) - var/obj/machinery/power/P = AM - if(P.powernet == 0) continue // exclude APCs which have powernet=0 - - if(!unmarked || !P.powernet) //if unmarked=1 we only return things with no powernet - if(d == 0) - . += P - - else if(istype(AM,/obj/structure/cable)) - var/obj/structure/cable/C = AM - - if(!unmarked || !C.powernet) - if(C.d1 == d || C.d2 == d || C.d1 == reverse || C.d2 == reverse ) - . += C - return . - -//remove the old powernet and replace it with a new one throughout the network. -/proc/propagate_network(var/obj/O, var/datum/powernet/PN) - //to_world_log("propagating new network") - var/list/worklist = list() - var/list/found_machines = list() - var/index = 1 - var/obj/P = null - - worklist+=O //start propagating from the passed object - - while(index<=worklist.len) //until we've exhausted all power objects - P = worklist[index] //get the next power object found - index++ - - if( istype(P,/obj/structure/cable)) - var/obj/structure/cable/C = P - if(C.powernet != PN) //add it to the powernet, if it isn't already there - PN.add_cable(C) - worklist |= C.get_connections() //get adjacents power objects, with or without a powernet - - else if(P.anchored && istype(P,/obj/machinery/power)) - var/obj/machinery/power/M = P - found_machines |= M //we wait until the powernet is fully propagates to connect the machines - - else - continue - - //now that the powernet is set, connect found machines to it - for(var/obj/machinery/power/PM in found_machines) - if(!PM.connect_to_network()) //couldn't find a node on its turf... - PM.disconnect_from_network() //... so disconnect if already on a powernet - - -//Merge two powernets, the bigger (in cable length term) absorbing the other -/proc/merge_powernets(var/datum/powernet/net1, var/datum/powernet/net2) - if(!net1 || !net2) //if one of the powernet doesn't exist, return - return - - if(net1 == net2) //don't merge same powernets - return - - //We assume net1 is larger. If net2 is in fact larger we are just going to make them switch places to reduce on code. - if(net1.cables.len < net2.cables.len) //net2 is larger than net1. Let's switch them around - var/temp = net1 - net1 = net2 - net2 = temp - - //merge net2 into net1 - for(var/obj/structure/cable/Cable in net2.cables) //merge cables - net1.add_cable(Cable) - - if(!net2) return net1 - - for(var/obj/machinery/power/Node in net2.nodes) //merge power machines - if(!Node.connect_to_network()) - Node.disconnect_from_network() //if somehow we can't connect the machine to the new powernet, disconnect it from the old nonetheless - - return net1 - -//Determines how strong could be shock, deals damage to mob, uses power. -//M is a mob who touched wire/whatever -//power_source is a source of electricity, can be powercell, area, apc, cable, powernet or null -//source is an object caused electrocuting (airlock, grille, etc) -//No animations will be performed by this proc. -/proc/electrocute_mob(mob/living/carbon/M as mob, var/power_source, var/obj/source, var/siemens_coeff = 1.0) - var/area/source_area - if(istype(power_source,/area)) - source_area = power_source - power_source = source_area.get_apc() - if(istype(power_source,/obj/structure/cable)) - var/obj/structure/cable/Cable = power_source - power_source = Cable.powernet - - var/datum/powernet/PN - var/obj/item/cell/cell - - if(istype(power_source,/datum/powernet)) - PN = power_source - else if(istype(power_source,/obj/item/cell)) - cell = power_source - else if(istype(power_source,/obj/machinery/power/apc)) - var/obj/machinery/power/apc/apc = power_source - cell = apc.get_cell() - var/obj/machinery/power/terminal/term = apc.terminal() - if (term) - PN = term.powernet - else if (!power_source) - return 0 - else - log_admin("ERROR: /proc/electrocute_mob([M], [power_source], [source]): wrong power_source") - return 0 - //Triggers powernet warning, but only for 5 ticks (if applicable) - //If following checks determine user is protected we won't alarm for long. - if(PN) - PN.trigger_warning(5) - if(istype(M,/mob/living/carbon/human)) - var/mob/living/carbon/human/H = M - if(H.species.siemens_coefficient <= 0) - return - if(H.gloves) - var/obj/item/clothing/gloves/G = H.gloves - if(G.siemens_coefficient == 0) return 0 //to avoid spamming with insulated glvoes on - - //Checks again. If we are still here subject will be shocked, trigger standard 20 tick warning - //Since this one is longer it will override the original one. - if(PN) - PN.trigger_warning() - - if (!cell && !PN) - return 0 - var/PN_damage = 0 - var/cell_damage = 0 - if (PN) - PN_damage = PN.get_electrocute_damage() - if (cell) - cell_damage = cell.get_electrocute_damage() - var/shock_damage = 0 - if (PN_damage>=cell_damage) - power_source = PN - shock_damage = PN_damage - else - power_source = cell - shock_damage = cell_damage - var/drained_hp = M.electrocute_act(shock_damage, source, siemens_coeff) //zzzzzzap! - var/drained_energy = drained_hp*20 - - if (source_area) - source_area.use_power_oneoff(drained_energy/CELLRATE) - else if (istype(power_source,/datum/powernet)) - var/drained_power = drained_energy/CELLRATE - drained_power = PN.draw_power(drained_power) - else if (istype(power_source, /obj/item/cell)) - cell.use(drained_energy) - return drained_energy diff --git a/code/modules/power/powernet.dm b/code/modules/power/powernet.dm deleted file mode 100644 index ae78572d33aee..0000000000000 --- a/code/modules/power/powernet.dm +++ /dev/null @@ -1,205 +0,0 @@ -/datum/powernet - var/list/cables = list() // all cables & junctions - var/list/nodes = list() // all connected machines - - var/load = 0 // the current load on the powernet, increased by each machine at processing - var/newavail = 0 // what available power was gathered last tick, then becomes... - var/avail = 0 //...the current available power in the powernet - var/viewload = 0 // the load as it appears on the power console (gradually updated) - var/number = 0 // Unused //TODEL - - var/smes_demand = 0 // Amount of power demanded by all SMESs from this network. Needed for load balancing. - var/list/inputting = list() // List of SMESs that are demanding power from this network. Needed for load balancing. - - var/smes_avail = 0 // Amount of power (avail) from SMESes. Used by SMES load balancing - var/smes_newavail = 0 // As above, just for newavail - - var/perapc = 0 // per-apc avilability - var/perapc_excess = 0 - var/netexcess = 0 // excess power on the powernet (typically avail-load) - - var/problem = 0 // If this is not 0 there is some sort of issue in the powernet. Monitors will display warnings. - -/datum/powernet/New() - START_PROCESSING_POWERNET(src) - ..() - -/datum/powernet/Destroy() - for(var/obj/structure/cable/C in cables) - cables -= C - C.powernet = null - for(var/obj/machinery/power/M in nodes) - nodes -= M - M.powernet = null - STOP_PROCESSING_POWERNET(src) - return ..() - -//Returns the amount of excess power (before refunding to SMESs) from last tick. -//This is for machines that might adjust their power consumption using this data. -/datum/powernet/proc/last_surplus() - return max(avail - load, 0) - -/datum/powernet/proc/draw_power(var/amount) - var/draw = clamp(amount, 0, avail - load) - load += draw - return draw - -/datum/powernet/proc/is_empty() - return !cables.len && !nodes.len - -//remove a cable from the current powernet -//if the powernet is then empty, delete it -//Warning : this proc DON'T check if the cable exists -/datum/powernet/proc/remove_cable(var/obj/structure/cable/C) - cables -= C - C.powernet = null - if(is_empty())//the powernet is now empty... - qdel(src)///... delete it - -//add a cable to the current powernet -//Warning : this proc DON'T check if the cable exists -/datum/powernet/proc/add_cable(var/obj/structure/cable/C) - if(C.powernet)// if C already has a powernet... - if(C.powernet == src) - return - else - C.powernet.remove_cable(C) //..remove it - C.powernet = src - cables +=C - -//remove a power machine from the current powernet -//if the powernet is then empty, delete it -//Warning : this proc DON'T check if the machine exists -/datum/powernet/proc/remove_machine(var/obj/machinery/power/M) - nodes -=M - M.powernet = null - if(is_empty())//the powernet is now empty... - qdel(src)///... delete it - qdel - - -//add a power machine to the current powernet -//Warning : this proc DON'T check if the machine exists -/datum/powernet/proc/add_machine(var/obj/machinery/power/M) - if(M.powernet)// if M already has a powernet... - if(M.powernet == src) - return - else - M.disconnect_from_network()//..remove it - M.powernet = src - nodes[M] = M - -// Triggers warning for certain amount of ticks -/datum/powernet/proc/trigger_warning(var/duration_ticks = 20) - problem = max(duration_ticks, problem) - - -//handles the power changes in the powernet -//called every ticks by the powernet controller -/datum/powernet/proc/reset() - var/numapc = 0 - - if(problem > 0) - problem = max(problem - 1, 0) - - if(nodes && nodes.len) // Added to fix a bad list bug -- TLE - for(var/obj/machinery/power/terminal/term in nodes) - if( istype( term.master_machine(), /obj/machinery/power/apc ) ) - numapc++ - - netexcess = avail - load - - if(numapc) - //very simple load balancing. If there was a net excess this tick then it must have been that some APCs used less than perapc, since perapc*numapc = avail - //Therefore we can raise the amount of power rationed out to APCs on the assumption that those APCs that used less than perapc will continue to do so. - //If that assumption fails, then some APCs will miss out on power next tick, however it will be rebalanced for the tick after. - if (netexcess >= 0) - perapc_excess += min(netexcess/numapc, (avail - perapc) - perapc_excess) - else - perapc_excess = 0 - - perapc = avail/numapc + perapc_excess - - // At this point, all other machines have finished using power. Anything left over may be used up to charge SMESs. - if(inputting.len && smes_demand) - var/smes_input_percentage = clamp((netexcess / smes_demand) * 100, 0, 100) - for(var/obj/machinery/power/smes/S in inputting) - S.input_power(smes_input_percentage) - - netexcess = avail - load - - if(netexcess) - var/perc = get_percent_load(1) - for(var/obj/machinery/power/smes/S in nodes) - S.restore(perc) - - //updates the viewed load (as seen on power computers) - viewload = round(load) - - //reset the powernet - load = 0 - avail = newavail - smes_avail = smes_newavail - inputting.Cut() - smes_demand = 0 - newavail = 0 - smes_newavail = 0 - -/datum/powernet/proc/get_percent_load(var/smes_only = 0) - if(smes_only) - var/smes_used = load - (avail - smes_avail) // SMESs are always last to provide power - if(!smes_used || smes_used < 0 || !smes_avail) // SMES power isn't available or being used at all, SMES load is therefore 0% - return 0 - return clamp((smes_used / smes_avail) * 100, 0, 100) // Otherwise return percentage load of SMESs. - else - if(!load) - return 0 - return clamp((avail / load) * 100, 0, 100) - -/datum/powernet/proc/get_electrocute_damage() - switch(avail) - if (1000000 to INFINITY) - return min(rand(50,160),rand(50,160)) - if (200000 to 1000000) - return min(rand(25,80),rand(25,80)) - if (100000 to 200000)//Ave powernet - return min(rand(20,60),rand(20,60)) - if (50000 to 100000) - return min(rand(15,40),rand(15,40)) - if (1000 to 50000) - return min(rand(10,20),rand(10,20)) - else - return 0 - -// Proc: apcs_overload() -// Parameters: 3 (failure_chance - chance to actually break the APC, overload_chance - Chance of breaking lights, reboot_chance - Chance of temporarily disabling the APC) -// Description: Damages output powernet by power surge. Destroys few APCs and lights, depending on parameters. -/datum/powernet/proc/apcs_overload(var/failure_chance, var/overload_chance, var/reboot_chance) - for(var/obj/machinery/power/terminal/T in nodes) - var/obj/machinery/power/apc/A = T.master_machine() - if(istype(A)) - if (prob(failure_chance)) - A.set_broken(TRUE) - if (prob(overload_chance)) - A.overload_lighting() - if(prob(reboot_chance)) - A.energy_fail(rand(30,60)) - -//////////////////////////////////////////////// -// Misc. -/////////////////////////////////////////////// - - -// return a knot cable (O-X) if one is present in the turf -// null if there's none -/turf/proc/get_cable_node() - if(!istype(src, /turf/simulated)) - return null - for(var/obj/structure/cable/C in src) - if(C.d1 == 0) - return C - return null - - -/// Returns instance of `/obj/machinery/apc` or `null`. The area's APC, if defined and present. -/area/proc/get_apc() - return apc diff --git a/code/modules/power/sensors/powernet_sensor.dm b/code/modules/power/sensors/powernet_sensor.dm deleted file mode 100644 index be8c651337675..0000000000000 --- a/code/modules/power/sensors/powernet_sensor.dm +++ /dev/null @@ -1,185 +0,0 @@ -// POWERNET SENSOR -// -// Last Change 31.12.2014 by Atlantis -// -// Powernet sensors are devices which relay information about connected powernet. This information may be relayed -// via two procs. Proc return_reading_text will return fully HTML styled string which contains all information. This -// may be used in PDAs or similar applications. Second proc, return_reading_data will return list containing needed data. -// This is used in NanoUI, for example. - -/obj/machinery/power/sensor - name = "Powernet Sensor" - desc = "Small machine which transmits data about specific powernet." - anchored = TRUE - density = FALSE - level = 1 - icon = 'icons/obj/objects.dmi' - icon_state = "floor_beacon" // If anyone wants to make better sprite, feel free to do so without asking me. - - var/name_tag = "#UNKN#" // ID tag displayed in list of powernet sensors. Each sensor should have it's own tag! - var/long_range = 0 // If 1, sensor reading will show on all computers, regardless of Zlevel - -// Proc: New() -// Parameters: None -// Description: Automatically assigns name according to ID tag. -/obj/machinery/power/sensor/New() - ..() - auto_set_name() - -// Proc: auto_set_name() -// Parameters: None -// Description: Sets name of this sensor according to the ID tag. -/obj/machinery/power/sensor/proc/auto_set_name() - name = "[name_tag] - Powernet Sensor" - -// Proc: check_grid_warning() -// Parameters: None -// Description: Checks connected powernet for warnings. If warning is found returns 1 -/obj/machinery/power/sensor/proc/check_grid_warning() - connect_to_network() - if(powernet) - if(powernet.problem) - return 1 - return 0 - -// Proc: reading_to_text() -// Parameters: 1 (amount - Power in Watts to be converted to W, kW or MW) -// Description: Helper proc that converts reading in Watts to kW or MW (returns string version of amount parameter) -/obj/machinery/power/sensor/proc/reading_to_text(var/amount = 0) - var/units = "" - // 10kW and less - Watts - if(amount < 10000) - units = "W" - // 10MW and less - KiloWatts - else if(amount < 10000000) - units = "kW" - amount = (round(amount/100) / 10) - // More than 10MW - MegaWatts - else - units = "MW" - amount = (round(amount/10000) / 100) - if (units == "W") - return "[amount] W" - else - return "~[amount] [units]" //kW and MW are only approximate readings, therefore add "~" - -// Proc: find_apcs() -// Parameters: None -// Description: Searches powernet for APCs and returns them in a list. -/obj/machinery/power/sensor/proc/find_apcs() - if(!powernet) - return - - var/list/L = list() - for(var/obj/machinery/power/terminal/term in powernet.nodes) - var/obj/machinery/power/apc/A = term.master_machine() - if(istype(A)) - L += A - - return L - - -// Proc: return_reading_text() -// Parameters: None -// Description: Generates string which contains HTML table with reading data. -/obj/machinery/power/sensor/proc/return_reading_text() - // No powernet. Try to connect to one first. - if(!powernet) - connect_to_network() - var/out = "" - if(!powernet) // No powernet. - out = "# SYSTEM ERROR - NO POWERNET #" - return out - - - var/list/L = find_apcs() - var/total_apc_load = 0 - if(L.len <= 0) // No APCs found. - out = "No APCs located in connected powernet!" - else // APCs found. Create very ugly (but working!) HTML table. - - out += "
              NameEQUIPLIGHTENVIRONCELLLOAD" - - // These lists are used as replacement for number based APC settings - var/list/S = list("M-OFF","A-OFF","M-ON", "A-ON") - var/list/chg = list("N","C","F") - - // Split to multiple lines to make it more readable - for(var/obj/machinery/power/apc/A in L) - out += "
              \The [A.area]" // Add area name - out += "[S[A.equipment+1]][S[A.lighting+1]][S[A.environ+1]]" // Show status of channels - var/obj/item/cell/cell = A.get_cell() - if(cell) - out += "[round(cell.percent())]% - [chg[A.charging+1]]" - else - out += "NO CELL" - var/load = A.lastused_total // Load. - total_apc_load += load - load = reading_to_text(load) - out += "[load]" - - out += "
              TOTAL AVAILABLE: [reading_to_text(powernet.avail)]" - out += "
              APC LOAD: [reading_to_text(total_apc_load)]" - out += "
              OTHER LOAD: [reading_to_text(max(powernet.load - total_apc_load, 0))]" - out += "
              TOTAL GRID LOAD: [reading_to_text(powernet.viewload)] ([round((powernet.load / powernet.avail) * 100)]%)" - - if(powernet.problem) - out += "
              WARNING: Abnormal grid activity detected!" - return out - -// Proc: return_reading_data() -// Parameters: None -// Description: Generates list containing all powernet data. Optimised for usage with NanoUI -/obj/machinery/power/sensor/proc/return_reading_data() - // No powernet. Try to connect to one first. - if(!powernet) - connect_to_network() - var/list/data = list() - data["name"] = name_tag - if(!powernet) - data["error"] = "# SYSTEM ERROR - NO POWERNET #" - data["alarm"] = 0 // Runtime Prevention - return data - - var/list/L = find_apcs() - var/total_apc_load = 0 - var/list/APC_data = list() - if(L.len > 0) - // These lists are used as replacement for number based APC settings - var/list/S = list("M-OFF", "DC-OFF","A-OFF","M-ON", "A-ON") - var/list/chg = list("N","C","F") - - for(var/obj/machinery/power/apc/A in L) - var/list/APC_entry = list() - // Channel Statuses - APC_entry["s_equipment"] = S[A.equipment+1] - APC_entry["s_lighting"] = S[A.lighting+1] - APC_entry["s_environment"] = S[A.environ+1] - // Cell Status - var/obj/item/cell/cell = A.get_cell() - APC_entry["cell_charge"] = cell ? round(cell.percent()) : "NO CELL" - APC_entry["cell_status"] = cell ? chg[A.charging+1] : "N" - // Other info - APC_entry["total_load"] = reading_to_text(A.lastused_total) - APC_entry["name"] = A.area.name - // Add data into main list of APC data. - APC_data += list(APC_entry) - // Add load of this APC to total APC load calculation - total_apc_load += A.lastused_total - data["apc_data"] = APC_data - data["total_avail"] = reading_to_text(max(powernet.avail, 0)) - data["total_used_apc"] = reading_to_text(max(total_apc_load, 0)) - data["total_used_other"] = reading_to_text(max(powernet.viewload - total_apc_load, 0)) - data["total_used_all"] = reading_to_text(max(powernet.viewload, 0)) - // Prevents runtimes when avail is 0 (division by zero) - if(powernet.avail) - data["load_percentage"] = round((powernet.viewload / powernet.avail) * 100) - else - data["load_percentage"] = 100 - data["alarm"] = powernet.problem ? 1 : 0 - return data - - - - - diff --git a/code/modules/power/sensors/sensor_monitoring.dm b/code/modules/power/sensors/sensor_monitoring.dm deleted file mode 100644 index 333034bc543d7..0000000000000 --- a/code/modules/power/sensors/sensor_monitoring.dm +++ /dev/null @@ -1,64 +0,0 @@ -// POWERNET SENSOR MONITORING CONSOLE -// Connects to powernet sensors and loads data from them. Shows this data to the user. -// Newly supports NanoUI. - - -/obj/machinery/computer/power_monitor - name = "Power Monitoring Console" - desc = "Computer designed to remotely monitor power levels." - icon = 'icons/obj/computer.dmi' - icon_keyboard = "power_key" - icon_screen = "power" - light_color = "#ffcc33" - machine_name = "power monitoring console" - machine_desc = "Allows for a detailed and thorough readout of the area's power generation and consumption, listed by area." - - //computer stuff - density = TRUE - anchored = TRUE - var/alerting = 0 - idle_power_usage = 300 - active_power_usage = 300 - var/datum/nano_module/power_monitor/power_monitor - -// Checks the sensors for alerts. If change (alerts cleared or detected) occurs, calls for icon update. -/obj/machinery/computer/power_monitor/Process() - var/alert = check_warnings() - if(alert != alerting) - alerting = !alerting - update_icon() - -// Updates icon of this computer according to current status. -/obj/machinery/computer/power_monitor/on_update_icon() - if(stat & BROKEN) - icon_state = "powerb" - return - if(stat & NOPOWER) - icon_state = "power0" - return - if(alerting) - icon_state = "power_alert" - return - icon_state = "power" - -// On creation automatically connects to active sensors. This is delayed to ensure sensors already exist. -/obj/machinery/computer/power_monitor/New() - ..() - power_monitor = new(src) - -// On user click opens the UI of this computer. -/obj/machinery/computer/power_monitor/interface_interact(mob/user) - ui_interact(user) - return TRUE - -// Uses dark magic to operate the NanoUI of this computer. -/obj/machinery/computer/power_monitor/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1) - power_monitor.ui_interact(user, ui_key, ui, force_open) - - -// Verifies if any warnings were registered by connected sensors. -/obj/machinery/computer/power_monitor/proc/check_warnings() - for(var/obj/machinery/power/sensor/S in power_monitor.grid_sensors) - if(S.check_grid_warning()) - return 1 - return 0 diff --git a/code/modules/power/singularity/act.dm b/code/modules/power/singularity/act.dm deleted file mode 100644 index 90052e4d246f7..0000000000000 --- a/code/modules/power/singularity/act.dm +++ /dev/null @@ -1,103 +0,0 @@ -#define I_SINGULO "singulo" - -/atom/proc/singularity_act() - return - -/atom/proc/singularity_pull(S, current_size) - return - -/mob/living/singularity_act() - investigate_log("has been consumed by a singularity", I_SINGULO) - gib() - return 20 - -/mob/living/singularity_pull(S, current_size) - step_towards(src, S) - apply_damage(current_size * 3, DAMAGE_RADIATION, damage_flags = DAMAGE_FLAG_DISPERSED) - -/mob/living/carbon/human/singularity_pull(S, current_size) - if(current_size >= STAGE_THREE) - var/list/handlist = list(l_hand, r_hand) - for(var/obj/item/hand in handlist) - if(prob(current_size*5) && hand.w_class >= ((11-current_size)/2) && unEquip(hand)) - step_towards(hand, S) - to_chat(src, "\The [S] pulls \the [hand] from your grip!") - if(!lying && (!shoes || !(shoes.item_flags & ITEM_FLAG_NOSLIP)) && (!species || !(species.check_no_slip(src))) && prob(current_size*5)) - to_chat(src, "A strong gravitational force slams you to the ground!") - Weaken(current_size) - ..() - -/obj/singularity_act() - if(simulated) - ex_act(EX_ACT_DEVASTATING) - if(src) - qdel(src) - return 2 - -/obj/singularity_pull(S, current_size) - if(simulated && !anchored) - step_towards(src, S) - -/obj/effect/beam/singularity_pull() - return - -/obj/effect/overlay/singularity_pull() - return - -/obj/item/singularity_pull(S, current_size) - set waitfor = 0 - if(anchored) - return - sleep(0) //this is needed or multiple items will be thrown sequentially and not simultaneously - if(current_size >= STAGE_FOUR) - //throw_at(S, 14, 3) - step_towards(src,S) - sleep(1) - step_towards(src,S) - else if(current_size > STAGE_ONE) - step_towards(src,S) - else ..() - -/obj/machinery/atmospherics/pipe/singularity_pull() - return - -/obj/machinery/power/supermatter/shard/singularity_act() - qdel(src) - return 5000 - -/obj/machinery/power/supermatter/singularity_act() - qdel(src) - return 50000 - -/obj/item/projectile/beam/emitter/singularity_pull() - return - -/obj/item/storage/backpack/holding/singularity_act(S, current_size) - var/dist = max((current_size - 2), 1) - explosion(src.loc,(dist),(dist*2),(dist*4)) - return 1000 - -/turf/singularity_act(S, current_size) - if(!is_plating()) - for(var/obj/O in contents) - if(O.level != 1) - continue - if(O.invisibility == 101) - O.singularity_act(src, current_size) - ChangeTurf(get_base_turf_by_area(src)) - return 2 - -/turf/space/singularity_act() - return - -/******************* -* Nar-Sie Act/Pull * -*******************/ -/atom/proc/singuloCanEat() - return 1 - -/mob/observer/singuloCanEat() - return 0 - -/mob/new_player/singuloCanEat() - return 0 diff --git a/code/modules/power/singularity/collector.dm b/code/modules/power/singularity/collector.dm deleted file mode 100644 index 525a6c080fccc..0000000000000 --- a/code/modules/power/singularity/collector.dm +++ /dev/null @@ -1,223 +0,0 @@ -//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:33 -var/global/list/rad_collectors = list() - -/obj/machinery/power/rad_collector - name = "radiation collector array" - desc = "A device which uses radiation and phoron to produce power." - icon = 'icons/obj/machines/rad_collector.dmi' - icon_state = "ca" - anchored = FALSE - density = TRUE - req_access = list(access_engine_equip) - var/obj/item/tank/phoron/P = null - - var/health = 100 - var/max_safe_temp = 1000 + T0C - var/melted - - var/last_power = 0 - var/last_power_new = 0 - var/active = 0 - var/locked = 0 - var/drainratio = 1 - - var/last_rads - var/max_rads = 250 // rad collector will reach max power output at this value, and break at twice this value - var/max_power = 5e5 - var/pulse_coeff = 20 - var/end_time = 0 - var/alert_delay = 10 SECONDS - -/obj/machinery/power/rad_collector/New() - ..() - rad_collectors += src - -/obj/machinery/power/rad_collector/Destroy() - rad_collectors -= src - . = ..() - -/obj/machinery/power/rad_collector/Process() - if((stat & BROKEN) || melted) - return - var/turf/T = get_turf(src) - if(T) - var/datum/gas_mixture/our_turfs_air = T.return_air() - if(our_turfs_air.temperature > max_safe_temp) - health -= ((our_turfs_air.temperature - max_safe_temp) / 10) - if(health <= 0) - collector_break() - - //so that we don't zero out the meter if the SM is processed first. - last_power = last_power_new - last_power_new = 0 - last_rads = SSradiation.get_rads_at_turf(get_turf(src)) - if(P && active) - if(last_rads > max_rads*2) - collector_break() - if(last_rads) - if(last_rads > max_rads) - if(world.time > end_time) - end_time = world.time + alert_delay - visible_message("[icon2html(src, viewers(get_turf(src)))] \the [src] beeps loudly as the radiation reaches dangerous levels, indicating imminent damage.") - playsound(src, 'sound/effects/screech.ogg', 100, 1, 1) - receive_pulse(12.5*(last_rads/max_rads)/(0.3+(last_rads/max_rads))) - - if(P) - if(P.air_contents.gas[GAS_PHORON] == 0) - investigate_log("out of fuel.","singulo") - eject() - else - P.air_adjust_gas(GAS_PHORON, -0.01*drainratio*min(last_rads,max_rads)/max_rads) //fuel cost increases linearly with incoming radiation - -/obj/machinery/power/rad_collector/CanUseTopic(mob/user) - if(!anchored) - return STATUS_CLOSE - return ..() - -/obj/machinery/power/rad_collector/interface_interact(mob/user) - if(!CanInteract(user, DefaultTopicState())) - return FALSE - . = TRUE - if((stat & BROKEN) || melted) - to_chat(user, "The [src] is completely destroyed!") - if(!src.locked) - toggle_power() - user.visible_message("[user.name] turns the [src.name] [active? "on":"off"].", \ - "You turn the [src.name] [active? "on":"off"].") - investigate_log("turned [active?"on":"off"] by [user.key]. [P?"Fuel: [round(P.air_contents.gas[GAS_PHORON]/0.29)]%":"It is empty"].","singulo") - else - to_chat(user, "The controls are locked!") - -/obj/machinery/power/rad_collector/attackby(obj/item/W, mob/user) - if(istype(W, /obj/item/tank/phoron)) - if(!src.anchored) - to_chat(user, "The [src] needs to be secured to the floor first.") - return 1 - if(src.P) - to_chat(user, "There's already a phoron tank loaded.") - return 1 - if(!user.unEquip(W, src)) - return - src.P = W - update_icon() - return 1 - else if(isCrowbar(W)) - if(P && !src.locked) - eject() - return 1 - else if(isWrench(W)) - if(P) - to_chat(user, "Remove the phoron tank first.") - return 1 - for(var/obj/machinery/power/rad_collector/R in get_turf(src)) - if(R != src) - to_chat(user, "You cannot install more than one collector on the same spot.") - return 1 - playsound(src.loc, 'sound/items/Ratchet.ogg', 75, 1) - src.anchored = !src.anchored - user.visible_message("[user.name] [anchored? "secures":"unsecures"] the [src.name].", \ - "You [anchored? "secure":"undo"] the external bolts.", \ - "You hear a ratchet") - if(anchored && !(stat & BROKEN)) - connect_to_network() - else - disconnect_from_network() - return 1 - else if(istype(W, /obj/item/card/id)||istype(W, /obj/item/modular_computer)) - if (src.allowed(user)) - if(active) - src.locked = !src.locked - to_chat(user, "The controls are now [src.locked ? "locked." : "unlocked."]") - else - src.locked = 0 //just in case it somehow gets locked - to_chat(user, "The controls can only be locked when the [src] is active") - else - to_chat(user, "Access denied!") - return 1 - return ..() - -/obj/machinery/power/rad_collector/examine(mob/user, distance) - . = ..() - if (distance <= 3 && !(stat & BROKEN)) - to_chat(user, "The meter indicates that \the [src] is collecting [last_power] W.") - return 1 - -/obj/machinery/power/rad_collector/ex_act(severity) - switch(severity) - if(EX_ACT_HEAVY, EX_ACT_LIGHT) - eject() - return ..() - -/obj/machinery/power/rad_collector/proc/collector_break() - if(P && P.air_contents) - var/turf/T = get_turf(src) - if(T) - T.assume_air(P.air_contents) - audible_message(SPAN_DANGER("\The [P] detonates, sending shrapnel flying!")) - fragmentate(T, 2, 4, list(/obj/item/projectile/bullet/pellet/fragment/tank/small = 3, /obj/item/projectile/bullet/pellet/fragment/tank = 1)) - explosion(T, -1, -1, 0) - QDEL_NULL(P) - disconnect_from_network() - stat |= BROKEN - melted = TRUE - anchored = FALSE - active = FALSE - desc += " This one is destroyed beyond repair." - update_icon() - -/obj/machinery/power/rad_collector/return_air() - if(P) - return P.return_air() - -/obj/machinery/power/rad_collector/proc/eject() - locked = 0 - var/obj/item/tank/phoron/Z = src.P - if (!Z) - return - Z.dropInto(loc) - Z.reset_plane_and_layer() - src.P = null - if(active) - toggle_power() - else - update_icon() - -/obj/machinery/power/rad_collector/proc/receive_pulse(var/pulse_strength) - if(P && active) - var/power_produced = 0 - power_produced = min(100*P.air_contents.gas[GAS_PHORON]*pulse_strength*pulse_coeff,max_power) - add_avail(power_produced) - last_power_new = power_produced - return - return - - -/obj/machinery/power/rad_collector/on_update_icon() - if(melted) - icon_state = "ca_melt" - else if(active) - icon_state = "ca_on" - else - icon_state = "ca" - - overlays.Cut() - underlays.Cut() - - if(P) - overlays += image(icon, "ptank") - underlays += image(icon, "ca_filling") - underlays += image(icon, "ca_inside") - if(stat & (NOPOWER|BROKEN)) - return - if(active) - var/rad_power = round(min(100 * last_rads / max_rads, 100), 20) - overlays += image(icon, "rads_[rad_power]") - overlays += image(icon, "on") - -/obj/machinery/power/rad_collector/toggle_power() - active = !active - if(active) - flick("ca_active", src) - else - flick("ca_deactive", src) - update_icon() diff --git a/code/modules/power/singularity/containment_field.dm b/code/modules/power/singularity/containment_field.dm deleted file mode 100644 index f2e083eea21f6..0000000000000 --- a/code/modules/power/singularity/containment_field.dm +++ /dev/null @@ -1,67 +0,0 @@ -//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:33 - -/obj/machinery/containment_field - name = "Containment Field" - desc = "An energy field." - icon = 'icons/obj/singularity.dmi' - icon_state = "Contain_F" - anchored = TRUE - density = FALSE - unacidable = TRUE - use_power = POWER_USE_OFF - uncreated_component_parts = null - light_outer_range = 4 - movable_flags = MOVABLE_FLAG_PROXMOVE - var/obj/machinery/field_generator/FG1 = null - var/obj/machinery/field_generator/FG2 = null - var/hasShocked = 0 //Used to add a delay between shocks. In some cases this used to crash servers by spawning hundreds of sparks every second. - -/obj/machinery/containment_field/Destroy() - if(FG1 && !FG1.clean_up) - FG1.cleanup() - if(FG2 && !FG2.clean_up) - FG2.cleanup() - . = ..() - -/obj/machinery/containment_field/physical_attack_hand(mob/user) - return shock(user) - -/obj/machinery/containment_field/ex_act(severity) - return 0 - -/obj/machinery/containment_field/HasProximity(atom/movable/AM as mob|obj) - if(istype(AM,/mob/living/silicon) && prob(40)) - shock(AM) - return 1 - if(istype(AM,/mob/living/carbon) && prob(50)) - shock(AM) - return 1 - return 0 - - - -/obj/machinery/containment_field/shock(mob/living/user as mob) - if(hasShocked) - return 0 - if(!FG1 || !FG2) - qdel(src) - return 0 - if(isliving(user)) - hasShocked = 1 - var/shock_damage = min(rand(30,40),rand(30,40)) - user.electrocute_act(shock_damage, src) - - var/atom/target = get_edge_target_turf(user, get_dir(src, get_step_away(user, src))) - user.throw_at(target, 200, 4) - - sleep(20) - - hasShocked = 0 - return TRUE - -/obj/machinery/containment_field/proc/set_master(var/master1,var/master2) - if(!master1 || !master2) - return 0 - FG1 = master1 - FG2 = master2 - return 1 diff --git a/code/modules/power/singularity/emitter.dm b/code/modules/power/singularity/emitter.dm deleted file mode 100644 index e689a998f749e..0000000000000 --- a/code/modules/power/singularity/emitter.dm +++ /dev/null @@ -1,335 +0,0 @@ -#define EMITTER_DAMAGE_POWER_TRANSFER 450 //used to transfer power to containment field generators - -/obj/machinery/power/emitter - name = "emitter" - desc = "A massive, heavy-duty industrial laser. This design is a fixed installation, capable of shooting in only one direction." - icon = 'icons/obj/singularity.dmi' - icon_state = "emitter" - anchored = FALSE - density = TRUE - active_power_usage = 100 KILOWATTS - obj_flags = OBJ_FLAG_ROTATABLE - - /// Access required to lock or unlock the emitter. Separate variable to prevent `req_access` from blocking use of the emitter while unlocked. - var/list/req_lock_access = list(access_engine_equip) - var/efficiency = 0.3 // Energy efficiency. 30% at this time, so 100kW load means 30kW laser pulses. - var/active = FALSE - var/powered = FALSE - var/fire_delay = 10 SECONDS - var/max_burst_delay = 10 SECONDS - var/min_burst_delay = 2 SECONDS - var/burst_shots = 3 - var/last_shot = 0 - var/shot_number = 0 - var/state = EMITTER_LOOSE - var/locked = FALSE - core_skill = SKILL_ENGINES - - uncreated_component_parts = list( - /obj/item/stock_parts/radio/receiver, - /obj/item/stock_parts/power/apc - ) - public_variables = list( - /decl/public_access/public_variable/emitter_active, - /decl/public_access/public_variable/emitter_locked - ) - public_methods = list( - /decl/public_access/public_method/toggle_emitter - ) - stock_part_presets = list(/decl/stock_part_preset/radio/receiver/emitter = 1) - -/obj/machinery/power/emitter/anchored - anchored = TRUE - state = EMITTER_WELDED - -/obj/machinery/power/emitter/anchored/on - active = TRUE - powered = TRUE - -/obj/machinery/power/emitter/Initialize() - . = ..() - if (state == EMITTER_WELDED && anchored) - connect_to_network() - -/obj/machinery/power/emitter/Destroy() - log_and_message_admins("deleted \the [src]") - investigate_log("deleted at ([x],[y],[z])","singulo") - return ..() - -/obj/machinery/power/emitter/examine(mob/user) - . = ..() - var/is_observer = isobserver(user) - if (user.Adjacent(src) || is_observer) - var/state_message = "It is unsecured." - switch (state) - if (EMITTER_WRENCHED) - state_message = "It is bolted to the floor, but lacks securing welds." - if (EMITTER_WELDED) - state_message = "It is firmly secured in place." - to_chat(user, SPAN_NOTICE(state_message)) - if (emagged && (user.skill_check(core_skill, SKILL_ADEPT) || is_observer)) - to_chat(user, SPAN_WARNING("Its control locks have been fried.")) - -/obj/machinery/power/emitter/on_update_icon() - if (active && powernet && avail(active_power_usage)) - icon_state = "emitter_+a" - else - icon_state = "emitter" - -/obj/machinery/power/emitter/interface_interact(mob/user) - if (!CanInteract(user, DefaultTopicState())) - return FALSE - activate(user) - return TRUE - -/obj/machinery/power/emitter/proc/activate(mob/user as mob) - if (!istype(user)) - user = null // safety, as the proc is publicly available. - - if (state == EMITTER_WELDED) - if (!powernet) - to_chat(user, SPAN_WARNING("You try to turn on \the [src], but it doesn't seem to be receiving power.")) - return TRUE - if (!locked) - var/area/A = get_area(src) - if (active) - active = FALSE - if (user?.Adjacent(src)) - user.visible_message( - SPAN_NOTICE("\The [user] turns off \the [src]."), - SPAN_NOTICE("You power down \the [src]."), - SPAN_ITALIC("You hear a switch being flicked.") - ) - else - visible_message(SPAN_NOTICE("\The [src] turns off.")) - playsound(src, "switch", 50) - log_and_message_admins("turned off \the [src] in [A.name]", user, src) - investigate_log("turned off by [key_name_admin(user || usr)] in [A.name]","singulo") - else - active = TRUE - if (user) - operator_skill = user.get_skill_value(core_skill) - if (user?.Adjacent(src)) - user.visible_message( - SPAN_NOTICE("\The [user] turns on \the [src]."), - SPAN_NOTICE("You configure \the [src] and turn it on."), // Mention configuration to allude to operator skill playing into efficiency - SPAN_ITALIC("You hear a switch being flicked.") - ) - else - visible_message(SPAN_NOTICE("\The [src] turns on.")) - playsound(src, "switch", 50) - update_efficiency() - shot_number = 0 - fire_delay = get_initial_fire_delay() - log_and_message_admins("turned on \the [src] in [A.name]", user, src) - investigate_log("turned on by [key_name_admin(user || usr)] in [A.name]","singulo") - update_icon() - else - to_chat(user, SPAN_WARNING("The controls are locked!")) - else - to_chat(user, SPAN_WARNING("\The [src] needs to be firmly secured to the floor first.")) - return TRUE - -/obj/machinery/power/emitter/proc/update_efficiency() - efficiency = initial(efficiency) - if (!operator_skill) - return - var/skill_modifier = 0.8 * (SKILL_MAX - operator_skill)/(SKILL_MAX - SKILL_MIN) //How much randomness is added - efficiency *= 1 + (rand() - 1) * skill_modifier //subtract off between 0.8 and 0, depending on skill and luck. - -/obj/machinery/power/emitter/emp_act(var/severity) - return - -/obj/machinery/power/emitter/Process() - if (stat & (BROKEN)) - return - if (state != EMITTER_WELDED || (!powernet && active_power_usage)) - active = FALSE - update_icon() - return - if (((last_shot + fire_delay) <= world.time) && active) - - var/actual_load = draw_power(active_power_usage) - if (actual_load >= active_power_usage) // does the laser have enough power to shoot? - if (!powered) - powered = TRUE - update_icon() - visible_message(SPAN_WARNING("\The [src] powers up!")) - investigate_log("regained power and turned on","singulo") - else - if (powered) - powered = FALSE - update_icon() - visible_message(SPAN_WARNING("\The [src] powers down!")) - investigate_log("lost power and turned off","singulo") - return - - last_shot = world.time - if (shot_number < burst_shots) - fire_delay = get_burst_delay() - shot_number++ - else - fire_delay = get_rand_burst_delay() - shot_number = 0 - - //need to calculate the power per shot as the emitter doesn't fire continuously. - var/burst_time = (min_burst_delay + max_burst_delay) / 2 + 2 * (burst_shots - 1) - var/power_per_shot = (active_power_usage * efficiency) * (burst_time / 10) / burst_shots - - if (prob(35)) - var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread - s.set_up(5, 1, src) - s.start() - - var/obj/item/projectile/beam/emitter/A = get_emitter_beam() - playsound(loc, A.fire_sound, 25, TRUE) - A.damage = round (power_per_shot / EMITTER_DAMAGE_POWER_TRANSFER) - A.launch( get_step(loc, dir) ) - -/obj/machinery/power/emitter/attackby(obj/item/W, mob/user) - - if (isWrench(W)) - if (active) - to_chat(user, SPAN_WARNING("Turn \the [src] off first.")) - return - switch(state) - if (EMITTER_LOOSE) - state = EMITTER_WRENCHED - playsound(loc, 'sound/items/Ratchet.ogg', 75, TRUE) - user.visible_message( - SPAN_NOTICE("\The [user] secures \the [src] to the floor."), - SPAN_NOTICE("You drop the external reinforcing bolts and secure them to the floor."), - SPAN_ITALIC("You hear ratcheting.") - ) - anchored = TRUE - if (EMITTER_WRENCHED) - state = EMITTER_LOOSE - playsound(loc, 'sound/items/Ratchet.ogg', 75, TRUE) - user.visible_message( - SPAN_NOTICE("\The [user] unsecures \the [src] from the floor."), - SPAN_NOTICE("You undo the external reinforcing bolts."), - SPAN_ITALIC("You hear ratcheting.") - ) - anchored = FALSE - if (EMITTER_WELDED) - to_chat(user, SPAN_WARNING("\The [src] needs to be unwelded from the floor before you raise its bolts.")) - return - - if (isWelder(W)) - var/obj/item/weldingtool/WT = W - if (active) - to_chat(user, SPAN_WARNING("Turn \the [src] off first.")) - return - switch(state) - if (EMITTER_LOOSE) - to_chat(user, SPAN_WARNING("\The [src] needs to be wrenched to the floor.")) - if (EMITTER_WRENCHED) - if (WT.remove_fuel(0, user)) - playsound(loc, 'sound/items/Welder.ogg', 50, TRUE) - user.visible_message( - SPAN_NOTICE("\The [user] starts to weld \the [src] to the floor."), - SPAN_NOTICE("You start to weld \the [src] to the floor."), - SPAN_ITALIC("You hear welding.") - ) - if (do_after(user, 2 SECONDS, src, DO_PUBLIC_UNIQUE)) - if (!WT.isOn()) - return - state = EMITTER_WELDED - playsound(loc, 'sound/items/Welder2.ogg', 50, TRUE) - user.visible_message( - SPAN_NOTICE("\The [user] welds \the [src] to the floor."), - SPAN_NOTICE("You weld the base of \the [src] to the floor, securing it in place."), - SPAN_ITALIC("You hear welding.") - ) - connect_to_network() - else - to_chat(user, SPAN_WARNING("You need more welding fuel to complete this task.")) - if (EMITTER_WELDED) - if (WT.remove_fuel(0, user)) - playsound(loc, 'sound/items/Welder.ogg', 50, TRUE) - user.visible_message( - SPAN_NOTICE("\The [user] starts to cut \the [src] free from the floor."), - SPAN_NOTICE("You start to cut \the [src] free from the floor."), - SPAN_ITALIC("You hear welding.") - ) - if (do_after(user, 2 SECONDS, src, DO_PUBLIC_UNIQUE)) - if (!WT.isOn()) - return - state = EMITTER_WRENCHED - playsound(loc, 'sound/items/Welder2.ogg', 50, TRUE) - user.visible_message( - SPAN_NOTICE("\The [user] cuts \the [src] free from the floor."), - SPAN_NOTICE("You cut \the [src] free from the floor."), - SPAN_ITALIC("You hear welding.") - ) - disconnect_from_network() - else - to_chat(user, SPAN_WARNING("You need more welding fuel to complete this task.")) - return - - if (istype(W, /obj/item/card/id) || istype(W, /obj/item/modular_computer)) - if (emagged) - to_chat(user, SPAN_WARNING("The control lock seems to be broken.")) - return - if (has_access(req_lock_access, W.GetAccess())) - locked = !locked - user.visible_message( - SPAN_NOTICE("\The [user] [locked ? "locks" : "unlocks"] \the [src]'s controls."), - SPAN_NOTICE("You [locked ? "lock" : "unlock"] the controls.") - ) - else - to_chat(user, SPAN_WARNING("\The [src]'s controls flash an 'Access denied' warning.")) - return - ..() - return - -/obj/machinery/power/emitter/emag_act(var/remaining_charges, var/mob/user) - if (!emagged) - locked = FALSE - emagged = TRUE - req_access.Cut() - req_lock_access.Cut() - user.visible_message(SPAN_WARNING("\The [user] messes with \the [src]'s controls."), SPAN_WARNING("You short out the control lock.")) - user.playsound_local(loc, "sparks", 50, TRUE) - return TRUE - -/obj/machinery/power/emitter/proc/get_initial_fire_delay() - return 10 SECONDS - -/obj/machinery/power/emitter/proc/get_rand_burst_delay() - return rand(min_burst_delay, max_burst_delay) - -/obj/machinery/power/emitter/proc/get_burst_delay() - return 0.2 SECONDS // This value doesn't really affect normal emitters, but *does* affect subtypes like the gyrotron that can have very long delays - -/obj/machinery/power/emitter/proc/get_emitter_beam() - return new /obj/item/projectile/beam/emitter(get_turf(src)) - -/decl/public_access/public_method/toggle_emitter - name = "toggle emitter" - desc = "Toggles whether or not the emitter is active. It must be unlocked to work." - call_proc = /obj/machinery/power/emitter/proc/activate - -/decl/public_access/public_variable/emitter_active - expected_type = /obj/machinery/power/emitter - name = "emitter active" - desc = "Whether or not the emitter is firing." - can_write = FALSE - has_updates = FALSE - -/decl/public_access/public_variable/emitter_active/access_var(obj/machinery/power/emitter/emitter) - return emitter.active - -/decl/public_access/public_variable/emitter_locked - expected_type = /obj/machinery/power/emitter - name = "emitter locked" - desc = "Whether or not the emitter is locked. Being locked prevents one from changing the active state." - can_write = FALSE - has_updates = FALSE - -/decl/public_access/public_variable/emitter_locked/access_var(obj/machinery/power/emitter/emitter) - return emitter.locked - -/decl/stock_part_preset/radio/receiver/emitter - frequency = BUTTON_FREQ - receive_and_call = list("button_active" = /decl/public_access/public_method/toggle_emitter) diff --git a/code/modules/power/singularity/field_generator.dm b/code/modules/power/singularity/field_generator.dm deleted file mode 100644 index 8b78c6bf291c4..0000000000000 --- a/code/modules/power/singularity/field_generator.dm +++ /dev/null @@ -1,339 +0,0 @@ -//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:33 - - -/* -field_generator power level display - The icon used for the field_generator need to have 'num_power_levels' number of icon states - named 'Field_Gen +p[num]' where 'num' ranges from 1 to 'num_power_levels' - - The power level is displayed using overlays. The current displayed power level is stored in 'powerlevel'. - The overlay in use and the powerlevel variable must be kept in sync. A powerlevel equal to 0 means that - no power level overlay is currently in the overlays list. - -Aygar -*/ - -#define field_generator_max_power 250000 -/obj/machinery/field_generator - name = "Field Generator" - desc = "A large thermal battery that projects a high amount of energy when powered." - icon = 'icons/obj/machines/field_generator.dmi' - icon_state = "Field_Gen" - anchored = FALSE - density = TRUE - use_power = POWER_USE_OFF - var/const/num_power_levels = 6 // Total number of power level icon has - var/Varedit_start = 0 - var/Varpower = 0 - var/active = 0 - var/power = 30000 // Current amount of power - var/state = 0 - var/warming_up = 0 - var/list/obj/machinery/containment_field/fields - var/list/obj/machinery/field_generator/connected_gens - var/clean_up = 0 - - //If keeping field generators powered is hard then increase the emitter active power usage. - var/gen_power_draw = 5500 //power needed per generator - var/field_power_draw = 2000 //power needed per field object - - -/obj/machinery/field_generator/on_update_icon() - overlays.Cut() - if(!active) - if(warming_up) - overlays += "+a[warming_up]" - if(fields.len) - overlays += "+on" - // Power level indicator - // Scale % power to % num_power_levels and truncate value - var/level = round(num_power_levels * power / field_generator_max_power) - // Clamp between 0 and num_power_levels for out of range power values - level = clamp(level, 0, num_power_levels) - if(level) - overlays += "+p[level]" - - return - - -/obj/machinery/field_generator/New() - ..() - fields = list() - connected_gens = list() - -/obj/machinery/field_generator/Process() - if(Varedit_start == 1) - if(active == 0) - active = 1 - state = 2 - power = field_generator_max_power - anchored = TRUE - warming_up = 3 - start_fields() - update_icon() - Varedit_start = 0 - - if(src.active == 2) - calc_power() - update_icon() - - -/obj/machinery/field_generator/physical_attack_hand(mob/user) - if(state == 2) - if(get_dist(src, user) <= 1)//Need to actually touch the thing to turn it on - if(src.active >= 1) - to_chat(user, "You are unable to turn off the [src.name] once it is online.") - return TRUE - else - user.visible_message("[user.name] turns on the [src.name]", \ - "You turn on the [src.name].", \ - "You hear heavy droning") - turn_on() - investigate_log("activated by [user.key].","singulo") - - src.add_fingerprint(user) - return TRUE - else - to_chat(user, "The [src] needs to be firmly secured to the floor first.") - return TRUE - -/obj/machinery/field_generator/attackby(obj/item/W, mob/user) - if(active) - to_chat(user, "The [src] needs to be off.") - return - else if(isWrench(W)) - switch(state) - if(0) - state = 1 - playsound(src.loc, 'sound/items/Ratchet.ogg', 75, 1) - user.visible_message("[user.name] secures [src.name] to the floor.", \ - "You secure the external reinforcing bolts to the floor.", \ - "You hear ratchet") - src.anchored = TRUE - if(1) - state = 0 - playsound(src.loc, 'sound/items/Ratchet.ogg', 75, 1) - user.visible_message("[user.name] unsecures [src.name] reinforcing bolts from the floor.", \ - "You undo the external reinforcing bolts.", \ - "You hear ratchet") - src.anchored = FALSE - if(2) - to_chat(user, " The [src.name] needs to be unwelded from the floor.") - return - else if(isWelder(W)) - var/obj/item/weldingtool/WT = W - switch(state) - if(0) - to_chat(user, "The [src.name] needs to be wrenched to the floor.") - return - if(1) - if (WT.remove_fuel(0,user)) - playsound(src.loc, 'sound/items/Welder2.ogg', 50, 1) - user.visible_message("[user.name] starts to weld the [src.name] to the floor.", \ - "You start to weld the [src] to the floor.", \ - "You hear welding") - if (do_after(user, 2 SECONDS, src, DO_PUBLIC_UNIQUE)) - if(!src || !WT.isOn()) return - state = 2 - to_chat(user, "You weld the field generator to the floor.") - else - return - if(2) - if (WT.remove_fuel(0,user)) - playsound(src.loc, 'sound/items/Welder2.ogg', 50, 1) - user.visible_message("[user.name] starts to cut the [src.name] free from the floor.", \ - "You start to cut the [src] free from the floor.", \ - "You hear welding") - if (do_after(user, 2 SECONDS, src, DO_PUBLIC_UNIQUE)) - if(!src || !WT.isOn()) return - state = 1 - to_chat(user, "You cut the [src] free from the floor.") - else - return - else - ..() - return - - -/obj/machinery/field_generator/emp_act() - return - -/obj/machinery/field_generator/bullet_act(var/obj/item/projectile/Proj) - if(istype(Proj, /obj/item/projectile/beam)) - power += Proj.damage * EMITTER_DAMAGE_POWER_TRANSFER - update_icon() - return 0 - - -/obj/machinery/field_generator/Destroy() - src.cleanup() - . = ..() - - - -/obj/machinery/field_generator/proc/turn_off() - active = 0 - spawn(1) - src.cleanup() - update_icon() - -/obj/machinery/field_generator/proc/turn_on() - active = 1 - warming_up = 1 - spawn(1) - while (warming_up<3 && active) - sleep(50) - warming_up++ - update_icon() - if(warming_up >= 3) - start_fields() - update_icon() - - -/obj/machinery/field_generator/proc/calc_power() - if(Varpower) - return 1 - - update_icon() - if(src.power > field_generator_max_power) - src.power = field_generator_max_power - - var/power_draw = gen_power_draw - for(var/obj/machinery/field_generator/FG in connected_gens) - if (!isnull(FG)) - power_draw += gen_power_draw - for (var/obj/machinery/containment_field/F in fields) - if (!isnull(F)) - power_draw += field_power_draw - power_draw /= 2 //because this will be mirrored for both generators - if(draw_power(round(power_draw)) >= power_draw) - return 1 - else - for(var/mob/M in viewers(src)) - M.show_message("\The [src] shuts down!") - turn_off() - investigate_log("ran out of power and deactivated","singulo") - src.power = 0 - return 0 - -//Tries to draw the needed power from our own power reserve, or connected generators if we can. Returns the amount of power we were able to get. -/obj/machinery/field_generator/proc/draw_power(var/draw = 0, var/list/flood_list = list()) - flood_list += src - - if(src.power >= draw)//We have enough power - src.power -= draw - return draw - - //Need more power - var/actual_draw = src.power //already checked that power < draw - src.power = 0 - - for(var/obj/machinery/field_generator/FG in connected_gens) - if (FG in flood_list) - continue - actual_draw += FG.draw_power(draw - actual_draw, flood_list) //since the flood list reference is shared this actually works. - if (actual_draw >= draw) - return actual_draw - - return actual_draw - -/obj/machinery/field_generator/proc/start_fields() - if(!src.state == 2 || !anchored) - turn_off() - return - spawn(1) - setup_field(1) - spawn(2) - setup_field(2) - spawn(3) - setup_field(4) - spawn(4) - setup_field(8) - src.active = 2 - - -/obj/machinery/field_generator/proc/setup_field(var/NSEW) - var/turf/T = src.loc - var/obj/machinery/field_generator/G - var/steps = 0 - if(!NSEW)//Make sure its ran right - return - for(var/dist = 0, dist <= 9, dist += 1) // checks out to 8 tiles away for another generator - T = get_step(T, NSEW) - if(T.density)//We can't shoot a field though this - return 0 - for(var/atom/A in T.contents) - if(ismob(A)) - continue - if(!istype(A,/obj/machinery/field_generator)) - if((istype(A,/obj/machinery/door)||istype(A,/obj/machinery/the_singularitygen))&&(A.density)) - return 0 - steps += 1 - G = locate(/obj/machinery/field_generator) in T - if(!isnull(G)) - steps -= 1 - if(!G.active) - return 0 - break - if(isnull(G)) - return - T = get_turf(src) - for(var/dist = 0, dist < steps, dist += 1) // creates each field tile - var/field_dir = get_dir(T,get_step(G.loc, NSEW)) - T = get_step(T, NSEW) - if(!locate(/obj/machinery/containment_field) in T) - var/obj/machinery/containment_field/CF = new/obj/machinery/containment_field() - CF.set_master(src,G) - fields += CF - G.fields += CF - CF.forceMove(T) - CF.set_dir(field_dir) - var/listcheck = 0 - for(var/obj/machinery/field_generator/FG in connected_gens) - if (isnull(FG)) - continue - if(FG == G) - listcheck = 1 - break - if(!listcheck) - connected_gens.Add(G) - listcheck = 0 - for(var/obj/machinery/field_generator/FG2 in G.connected_gens) - if (isnull(FG2)) - continue - if(FG2 == src) - listcheck = 1 - break - if(!listcheck) - G.connected_gens.Add(src) - - -/obj/machinery/field_generator/proc/cleanup() - clean_up = 1 - for (var/obj/machinery/containment_field/F in fields) - if (QDELETED(F)) - continue - qdel(F) - fields = list() - for(var/obj/machinery/field_generator/FG in connected_gens) - if (QDELETED(FG)) - continue - FG.connected_gens.Remove(src) - if(!FG.clean_up)//Makes the other gens clean up as well - FG.cleanup() - connected_gens.Remove(FG) - connected_gens = list() - clean_up = 0 - update_icon() - - //This is here to help fight the "hurr durr, release singulo cos nobody will notice before the - //singulo eats the evidence". It's not fool-proof but better than nothing. - //I want to avoid using global variables. - spawn(1) - var/temp = 1 //stops spam - for(var/obj/singularity/O in SSmachines.machinery) - if(O.last_warning && temp) - if((world.time - O.last_warning) > 50) //to stop message-spam - temp = 0 - message_admins("A singulo exists and a containment field has failed.",1) - investigate_log("has failed whilst a singulo exists.","singulo") - O.last_warning = world.time diff --git a/code/modules/power/singularity/generator.dm b/code/modules/power/singularity/generator.dm deleted file mode 100644 index 68723b87e918b..0000000000000 --- a/code/modules/power/singularity/generator.dm +++ /dev/null @@ -1,31 +0,0 @@ -/////SINGULARITY SPAWNER -/obj/machinery/the_singularitygen - name = "Gravitational Singularity Generator" - desc = "An Odd Device which produces a Gravitational Singularity when set up." - icon = 'icons/obj/singularity.dmi' - icon_state = "TheSingGen" - anchored = FALSE - density = TRUE - use_power = POWER_USE_OFF - var/energy = 0 - -/obj/machinery/the_singularitygen/Process() - var/turf/T = get_turf(src) - if(src.energy >= 200) - new /obj/singularity/(T, 50) - if(src) qdel(src) - -/obj/machinery/the_singularitygen/attackby(obj/item/W, mob/user) - if(istype(W, /obj/item/wrench)) - anchored = !anchored - playsound(src.loc, 'sound/items/Ratchet.ogg', 75, 1) - if(anchored) - user.visible_message("[user.name] secures [src.name] to the floor.", \ - "You secure the [src.name] to the floor.", \ - "You hear a ratchet") - else - user.visible_message("[user.name] unsecures [src.name] from the floor.", \ - "You unsecure the [src.name] from the floor.", \ - "You hear a ratchet") - return - return ..() diff --git a/code/modules/power/singularity/particle_accelerator/particle.dm b/code/modules/power/singularity/particle_accelerator/particle.dm deleted file mode 100644 index 2a56ef3873e93..0000000000000 --- a/code/modules/power/singularity/particle_accelerator/particle.dm +++ /dev/null @@ -1,97 +0,0 @@ -/obj/effect/accelerated_particle - name = "Accelerated Particles" - desc = "Small things moving very fast." - icon = 'icons/obj/machines/particle_accelerator2.dmi' - icon_state = "particle" - anchored = TRUE - density = TRUE - var/movement_range = 10 - var/energy = 10 //energy in eV - var/mega_energy = 0 //energy in MeV - var/particle_type - var/additional_particles = 0 - var/turf/target - var/turf/source - var/movetotarget = TRUE - var/active = FALSE - -/obj/effect/accelerated_particle/Initialize(maploading, dir = 2) - . = ..() - set_dir(dir) - if(movement_range > 20) - movement_range = 20 - active = TRUE - move(1) - -/obj/effect/accelerated_particle/Bump(atom/A) - if (!active) - return - if (A) - if(ismob(A)) - toxmob(A) - if((istype(A,/obj/machinery/the_singularitygen))||(istype(A,/obj/singularity))) - A:energy += energy - else if(istype(A,/obj/machinery/power/fusion_core)) - var/obj/machinery/power/fusion_core/collided_core = A - if(particle_type && particle_type != "neutron") - if(collided_core.AddParticles(particle_type, 1 + additional_particles)) - collided_core.owned_field.plasma_temperature += mega_energy - collided_core.owned_field.energy += energy - qdel(src) - else if(istype(A, /obj/effect/fusion_particle_catcher)) - var/obj/effect/fusion_particle_catcher/PC = A - if(particle_type && particle_type != "neutron") - if(PC.parent.owned_core.AddParticles(particle_type, 1 + additional_particles)) - PC.parent.plasma_temperature += mega_energy - PC.parent.energy += energy - qdel(src) - -/obj/effect/accelerated_particle/Bumped(atom/A) - if (!active) - return - if(ismob(A)) - Bump(A) - -/obj/effect/accelerated_particle/ex_act(severity) - if (!active) - return - qdel(src) - -/obj/effect/accelerated_particle/proc/toxmob(var/mob/living/M) - if (!active) - return - var/radiation = (energy*2) - M.apply_damage((radiation*3), DAMAGE_RADIATION, damage_flags = DAMAGE_FLAG_DISPERSED) - M.updatehealth() - -/obj/effect/accelerated_particle/proc/move(var/lag) - set waitfor = FALSE - if(QDELETED(src)) - return - if (!active) - return - var/destination - if(target) - destination = movetotarget ? get_step_towards(src, target) : get_step_away(src, source) - else - destination = get_step(src, dir) - if(!step_towards(src, destination)) - if(QDELETED(src)) - return - forceMove(destination) - if(target && movetotarget && (get_dist(src,target) < 1)) - movetotarget = FALSE - movement_range-- - if(movement_range <= 0) - qdel(src) - return - sleep(lag) - move(lag) - -/obj/effect/accelerated_particle/weak - movement_range = 8 - energy = 5 - -/obj/effect/accelerated_particle/strong - movement_range = 15 - energy = 15 diff --git a/code/modules/power/singularity/particle_accelerator/particle_accelerator.dm b/code/modules/power/singularity/particle_accelerator/particle_accelerator.dm deleted file mode 100644 index a46009bd42eef..0000000000000 --- a/code/modules/power/singularity/particle_accelerator/particle_accelerator.dm +++ /dev/null @@ -1,343 +0,0 @@ -//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:33 - -/*Composed of 7 parts -3 Particle emitters -emit_particle() - -1 power box -the only part of this thing that uses power, can hack to mess with the pa/make it better. -Lies, only the control computer draws power. - -1 fuel chamber -contains procs for mixing gas and whatever other fuel it uses -mix_gas() - -1 gas holder WIP -acts like a tank valve on the ground that you wrench gas tanks onto -extract_gas() -return_gas() -attach_tank() -remove_tank() -get_available_mix() - -1 End Cap - -1 Control computer -interface for the pa, acts like a computer with an html menu for diff parts and a status report -all other parts contain only a ref to this -a /machine, tells the others to do work -contains ref for all parts -process() -check_build() - -Setup map - |EC| -CC|FC| - |PB| -PE|PE|PE - - -Icon Addemdum -Icon system is much more robust, and the icons are all variable based. -Each part has a reference string, powered, strength, and contruction values. -Using this the update_icon() proc is simplified a bit (using for absolutely was problematic with naming), -so the icon_state comes out be: -"[reference][strength]", with a switch controlling construction_states and ensuring that it doesn't -power on while being contructed, and all these variables are set by the computer through it's scan list -Essential order of the icons: -Standard - [reference] -Wrenched - [reference] -Wired - [reference]w -Closed - [reference]c -Powered - [reference]p[strength] -Strength being set by the computer and a null strength (Computer is powered off or inactive) returns a 'null', counting as empty -So, hopefully this is helpful if any more icons are to be added/changed/wondering what the hell is going on here - -*/ - -/obj/structure/particle_accelerator - name = "Particle Accelerator" - desc = "Part of a Particle Accelerator." - icon = 'icons/obj/machines/particle_accelerator2.dmi' - icon_state = "none" - anchored = FALSE - density = TRUE - obj_flags = OBJ_FLAG_ROTATABLE - - var/obj/machinery/particle_accelerator/control_box/master = null - var/construction_state = 0 - var/reference = null - var/powered = 0 - var/strength = null - var/desc_holder = null - -/obj/structure/particle_accelerator/Destroy() - construction_state = 0 - if(master) - master.part_scan() - . = ..() - -/obj/structure/particle_accelerator/end_cap - name = "Alpha Particle Generation Array" - desc_holder = "This is where Alpha particles are generated from \[REDACTED\]" - icon_state = "end_cap" - reference = "end_cap" - -/obj/structure/particle_accelerator/on_update_icon() - ..() - return - -/obj/structure/particle_accelerator/examine(mob/user) - . = ..() - switch(construction_state) - if(0) - to_chat(user, "Looks like it's not attached to the flooring") - if(1) - to_chat(user, "It is missing some cables") - if(2) - to_chat(user, "The panel is open") - if(3) - if(powered) - to_chat(user, desc_holder) - else - to_chat(user, "\The [src] is assembled") - - -/obj/structure/particle_accelerator/attackby(obj/item/I, mob/user) - if (I?.istool()) - if (process_tool_hit(I, user)) - return - ..() - - -/obj/structure/particle_accelerator/Move() - ..() - if(master && master.active) - master.toggle_power() - investigate_log("was moved whilst active; it powered down.","singulo") - -/obj/structure/particle_accelerator/ex_act(severity) - switch(severity) - if(EX_ACT_DEVASTATING) - qdel(src) - return - if(EX_ACT_HEAVY) - if (prob(50)) - qdel(src) - return - if(EX_ACT_LIGHT) - if (prob(25)) - qdel(src) - return - else - return - -/obj/structure/particle_accelerator/on_update_icon() - switch(construction_state) - if(0,1) - icon_state="[reference]" - if(2) - icon_state="[reference]w" - if(3) - if(powered) - icon_state="[reference]p[strength]" - else - icon_state="[reference]c" - return - -/obj/structure/particle_accelerator/proc/update_state() - if(master) - master.update_state() - return 0 - - -/obj/structure/particle_accelerator/proc/report_ready(var/obj/O) - if(O && (O == master)) - if(construction_state >= 3) - return 1 - return 0 - - -/obj/structure/particle_accelerator/proc/report_master() - if(master) - return master - return 0 - - -/obj/structure/particle_accelerator/proc/connect_master(var/obj/O) - if(O && istype(O,/obj/machinery/particle_accelerator/control_box)) - if(O.dir == src.dir) - master = O - return 1 - return 0 - - -/obj/structure/particle_accelerator/proc/process_tool_hit(var/obj/O, var/mob/user) - if(!(O) || !(user)) - return 0 - if(!ismob(user) || !isobj(O)) - return 0 - var/temp_state = src.construction_state - - switch(src.construction_state)//TODO:Might be more interesting to have it need several parts rather than a single list of steps - if(0) - if(isWrench(O)) - playsound(src.loc, 'sound/items/Ratchet.ogg', 75, 1) - src.anchored = TRUE - user.visible_message("[user.name] secures the [src.name] to the floor.", \ - "You secure the external bolts.") - temp_state++ - if(1) - if(isWrench(O)) - playsound(src.loc, 'sound/items/Ratchet.ogg', 75, 1) - src.anchored = FALSE - user.visible_message("[user.name] detaches the [src.name] from the floor.", \ - "You remove the external bolts.") - temp_state-- - else if(isCoil(O)) - if(O:use(1,user)) - user.visible_message("[user.name] adds wires to the [src.name].", \ - "You add some wires.") - temp_state++ - if(2) - if(isWirecutter(O))//TODO:Shock user if its on? - user.visible_message("[user.name] removes some wires from the [src.name].", \ - "You remove some wires.") - temp_state-- - else if(isScrewdriver(O)) - user.visible_message("[user.name] closes the [src.name]'s access panel.", \ - "You close the access panel.") - temp_state++ - if(3) - if(isScrewdriver(O)) - user.visible_message("[user.name] opens the [src.name]'s access panel.", \ - "You open the access panel.") - temp_state-- - if(temp_state == src.construction_state)//Nothing changed - return 0 - else - src.construction_state = temp_state - if(src.construction_state < 3)//Was taken apart, update state - update_state() - update_icon() - return 1 - - - -/obj/machinery/particle_accelerator - name = "Particle Accelerator" - desc = "Part of a Particle Accelerator." - icon = 'icons/obj/machines/particle_accelerator2.dmi' - icon_state = "none" - anchored = FALSE - density = TRUE - use_power = POWER_USE_OFF - idle_power_usage = 0 - active_power_usage = 0 - var/construction_state = 0 - var/active = 0 - var/reference = null - var/powered = null - var/strength = 0 - var/desc_holder = null - -/obj/machinery/particle_accelerator/on_update_icon() - return - -/obj/machinery/particle_accelerator/examine(mob/user) - . = ..() - switch(construction_state) - if(0) - to_chat(user, "Looks like it's not attached to the flooring") - if(1) - to_chat(user, "It is missing some cables") - if(2) - to_chat(user, "The panel is open") - if(3) - if(powered) - to_chat(user, desc_holder) - else - to_chat(user, "\The [src] is assembled") - - -/obj/machinery/particle_accelerator/attackby(obj/item/I, mob/user) - if (I?.istool()) - if (process_tool_hit(I, user)) - return - ..() - - -/obj/machinery/particle_accelerator/ex_act(severity) - switch(severity) - if(EX_ACT_DEVASTATING) - qdel(src) - return - if(EX_ACT_HEAVY) - if (prob(50)) - qdel(src) - return - if(EX_ACT_LIGHT) - if (prob(25)) - qdel(src) - return - else - return - - -/obj/machinery/particle_accelerator/proc/update_state() - return 0 - - -/obj/machinery/particle_accelerator/proc/process_tool_hit(var/obj/O, var/mob/user) - if(!(O) || !(user)) - return 0 - if(!ismob(user) || !isobj(O)) - return 0 - var/temp_state = src.construction_state - switch(src.construction_state)//TODO:Might be more interesting to have it need several parts rather than a single list of steps - if(0) - if(isWrench(O)) - playsound(src.loc, 'sound/items/Ratchet.ogg', 75, 1) - src.anchored = TRUE - user.visible_message("[user.name] secures the [src.name] to the floor.", \ - "You secure the external bolts.") - temp_state++ - if(1) - if(isWrench(O)) - playsound(src.loc, 'sound/items/Ratchet.ogg', 75, 1) - src.anchored = FALSE - user.visible_message("[user.name] detaches the [src.name] from the floor.", \ - "You remove the external bolts.") - temp_state-- - else if(isCoil(O)) - if(O:use(1)) - user.visible_message("[user.name] adds wires to the [src.name].", \ - "You add some wires.") - temp_state++ - if(2) - if(isWirecutter(O))//TODO:Shock user if its on? - user.visible_message("[user.name] removes some wires from the [src.name].", \ - "You remove some wires.") - temp_state-- - else if(isScrewdriver(O)) - user.visible_message("[user.name] closes the [src.name]'s access panel.", \ - "You close the access panel.") - temp_state++ - if(3) - if(isScrewdriver(O)) - user.visible_message("[user.name] opens the [src.name]'s access panel.", \ - "You open the access panel.") - temp_state-- - active = 0 - if(temp_state == src.construction_state)//Nothing changed - return 0 - else - if(src.construction_state < 3)//Was taken apart, update state - update_state() - if(use_power) - update_use_power(POWER_USE_OFF) - src.construction_state = temp_state - if(src.construction_state >= 3) - update_use_power(POWER_USE_IDLE) - update_icon() - return 1 diff --git a/code/modules/power/singularity/particle_accelerator/particle_chamber.dm b/code/modules/power/singularity/particle_accelerator/particle_chamber.dm deleted file mode 100644 index 7a9400f5acc5f..0000000000000 --- a/code/modules/power/singularity/particle_accelerator/particle_chamber.dm +++ /dev/null @@ -1,10 +0,0 @@ -/obj/structure/particle_accelerator/fuel_chamber - name = "EM Acceleration Chamber" - desc_holder = "This is where the Alpha particles are accelerated to radical speeds." - icon = 'icons/obj/machines/particle_accelerator2.dmi' - icon_state = "fuel_chamber" - reference = "fuel_chamber" - -/obj/structure/particle_accelerator/fuel_chamber/on_update_icon() - ..() - return \ No newline at end of file diff --git a/code/modules/power/singularity/particle_accelerator/particle_control.dm b/code/modules/power/singularity/particle_accelerator/particle_control.dm deleted file mode 100644 index 55e4e9aeedc4c..0000000000000 --- a/code/modules/power/singularity/particle_accelerator/particle_control.dm +++ /dev/null @@ -1,254 +0,0 @@ -//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:33 - -/obj/machinery/particle_accelerator/control_box - name = "Particle Accelerator Control Computer" - desc = "This controls the density of the particles." - icon = 'icons/obj/machines/particle_accelerator2.dmi' - icon_state = "control_box" - reference = "control_box" - anchored = FALSE - density = TRUE - idle_power_usage = 500 - active_power_usage = 70000 //70 kW per unit of strength - construction_state = 0 - active = 0 - dir = 1 - var/strength_upper_limit = 2 - var/interface_control = 1 - var/list/obj/structure/particle_accelerator/connected_parts - var/assembled = 0 - var/parts = null - wires = /datum/wires/particle_acc/control_box - -/obj/machinery/particle_accelerator/control_box/Initialize() - . = ..() - connected_parts = list() - change_power_consumption(initial(active_power_usage) * (strength + 1), POWER_USE_ACTIVE) - -/obj/machinery/particle_accelerator/control_box/Destroy() - if(active) - toggle_power() - return ..() - -/obj/machinery/particle_accelerator/control_box/interface_interact(mob/user) - if(construction_state >= 3) - interact(user) - return TRUE - -/obj/machinery/particle_accelerator/control_box/update_state() - if(construction_state < 3) - update_use_power(POWER_USE_OFF) - assembled = 0 - active = 0 - for(var/obj/structure/particle_accelerator/part in connected_parts) - part.strength = null - part.powered = 0 - part.update_icon() - connected_parts = list() - return - if(!part_scan()) - update_use_power(POWER_USE_IDLE) - active = 0 - connected_parts = list() - - return - -/obj/machinery/particle_accelerator/control_box/on_update_icon() - if(active) - icon_state = "[reference]p1" - else - if(use_power) - if(assembled) - icon_state = "[reference]p" - else - icon_state = "u[reference]p" - else - switch(construction_state) - if(0) - icon_state = "[reference]" - if(1) - icon_state = "[reference]" - if(2) - icon_state = "[reference]w" - else - icon_state = "[reference]c" - return - -/obj/machinery/particle_accelerator/control_box/Topic(href, href_list) - ..() - //Ignore input if we are broken, !silicon guy can't touch us, or nonai controlling from super far away - if(stat & (BROKEN|NOPOWER) || (get_dist(src, usr) > 1 && !istype(usr, /mob/living/silicon)) || (get_dist(src, usr) > 8 && !istype(usr, /mob/living/silicon/ai))) - usr.unset_machine() - close_browser(usr, "window=pacontrol") - return - - if( href_list["close"] ) - close_browser(usr, "window=pacontrol") - usr.unset_machine() - return - - if(href_list["togglep"]) - if(!wires.IsIndexCut(PARTICLE_TOGGLE_WIRE)) - src.toggle_power() - else if(href_list["scan"]) - src.part_scan() - - else if(href_list["strengthup"]) - if(!wires.IsIndexCut(PARTICLE_STRENGTH_WIRE)) - add_strength() - - else if(href_list["strengthdown"]) - if(!wires.IsIndexCut(PARTICLE_STRENGTH_WIRE)) - remove_strength() - - src.updateDialog() - src.update_icon() - return - -/obj/machinery/particle_accelerator/control_box/proc/strength_change() - for(var/obj/structure/particle_accelerator/part in connected_parts) - part.strength = strength - part.update_icon() - -/obj/machinery/particle_accelerator/control_box/proc/add_strength(var/s) - if(assembled) - strength++ - if(strength > strength_upper_limit) - strength = strength_upper_limit - else - message_admins("PA Control Computer increased to [strength] by [key_name(usr, usr.client)](?) in ([x],[y],[z] - JMP)",0,1) - log_game("PA Control Computer increased to [strength] by [usr.ckey]([usr]) in ([x],[y],[z])") - investigate_log("increased to [strength] by [usr.key]","singulo") - strength_change() - -/obj/machinery/particle_accelerator/control_box/proc/remove_strength(var/s) - if(assembled) - strength-- - if(strength < 0) - strength = 0 - else - message_admins("PA Control Computer decreased to [strength] by [key_name(usr, usr.client)](?) in ([x],[y],[z] - JMP)",0,1) - log_game("PA Control Computer decreased to [strength] by [usr.ckey]([usr]) in ([x],[y],[z])") - investigate_log("decreased to [strength] by [usr.key]","singulo") - strength_change() - -/obj/machinery/particle_accelerator/control_box/power_change() - . = ..() - if(stat & NOPOWER) - active = 0 - update_use_power(POWER_USE_OFF) - else if(!stat && construction_state == 3) - update_use_power(POWER_USE_IDLE) - -/obj/machinery/particle_accelerator/control_box/Process() - if(src.active) - //a part is missing! - if( length(connected_parts) < 6 ) - investigate_log("lost a connected part; It powered down.","singulo") - src.toggle_power() - return - //emit some particles - for(var/obj/structure/particle_accelerator/particle_emitter/PE in connected_parts) - if(PE) - PE.emit_particle(src.strength) - return - - -/obj/machinery/particle_accelerator/control_box/proc/part_scan() - for(var/obj/structure/particle_accelerator/fuel_chamber/F in orange(1,src)) - src.set_dir(F.dir) - connected_parts = list() - var/tally = 0 - var/ldir = turn(dir,-90) - var/rdir = turn(dir,90) - var/odir = turn(dir,180) - var/turf/T = src.loc - T = get_step(T,rdir) - if(check_part(T,/obj/structure/particle_accelerator/fuel_chamber)) - tally++ - T = get_step(T,odir) - if(check_part(T,/obj/structure/particle_accelerator/end_cap)) - tally++ - T = get_step(T,dir) - T = get_step(T,dir) - if(check_part(T,/obj/structure/particle_accelerator/power_box)) - tally++ - T = get_step(T,dir) - if(check_part(T,/obj/structure/particle_accelerator/particle_emitter/center)) - tally++ - T = get_step(T,ldir) - if(check_part(T,/obj/structure/particle_accelerator/particle_emitter/left)) - tally++ - T = get_step(T,rdir) - T = get_step(T,rdir) - if(check_part(T,/obj/structure/particle_accelerator/particle_emitter/right)) - tally++ - if(tally >= 6) - assembled = 1 - return 1 - else - assembled = 0 - return 0 - - -/obj/machinery/particle_accelerator/control_box/proc/check_part(var/turf/T, var/type) - if(!(T)||!(type)) - return 0 - var/obj/structure/particle_accelerator/PA = locate(/obj/structure/particle_accelerator) in T - if(istype(PA, type)) - if(PA.connect_master(src)) - if(PA.report_ready(src)) - src.connected_parts.Add(PA) - return 1 - return 0 - - -/obj/machinery/particle_accelerator/control_box/toggle_power() - src.active = !src.active - investigate_log("turned [active?"ON":"OFF"] by [usr ? usr.key : "outside forces"]","singulo") - message_admins("PA Control Computer turned [active ?"ON":"OFF"] by [key_name(usr, usr.client)](?) in ([x],[y],[z] - JMP)",0,1) - log_game("PA Control Computer turned [active ?"ON":"OFF"] by [usr.ckey]([usr]) in ([x],[y],[z])") - if(src.active) - update_use_power(POWER_USE_ACTIVE) - for(var/obj/structure/particle_accelerator/part in connected_parts) - part.strength = src.strength - part.powered = 1 - part.update_icon() - else - update_use_power(POWER_USE_IDLE) - for(var/obj/structure/particle_accelerator/part in connected_parts) - part.strength = null - part.powered = 0 - part.update_icon() - return 1 - - -/obj/machinery/particle_accelerator/control_box/interact(mob/user) - if((get_dist(src, user) > 1) || (stat & (BROKEN|NOPOWER))) - if(!istype(user, /mob/living/silicon)) - user.unset_machine() - close_browser(user, "window=pacontrol") - return - user.set_machine(src) - - var/dat = "" - dat += "Particle Accelerator Control Panel
              " - dat += "Close

              " - dat += "Status:
              " - if(!assembled) - dat += "Unable to detect all parts!
              " - dat += "Run Scan

              " - else - dat += "All parts in place.

              " - dat += "Power:" - if(active) - dat += "On
              " - else - dat += "Off
              " - dat += "Toggle Power

              " - dat += "Particle Strength: [src.strength] " - dat += "--|++

              " - - show_browser(user, dat, "window=pacontrol;size=420x500") - onclose(user, "pacontrol") - return diff --git a/code/modules/power/singularity/particle_accelerator/particle_emitter.dm b/code/modules/power/singularity/particle_accelerator/particle_emitter.dm deleted file mode 100644 index eba322bb19fbd..0000000000000 --- a/code/modules/power/singularity/particle_accelerator/particle_emitter.dm +++ /dev/null @@ -1,45 +0,0 @@ -//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:33 - -/obj/structure/particle_accelerator/particle_emitter - name = "EM Containment Grid" - desc_holder = "This launchs the Alpha particles, might not want to stand near this end." - icon = 'icons/obj/machines/particle_accelerator2.dmi' - icon_state = "none" - var/fire_delay = 50 - var/last_shot = 0 - -/obj/structure/particle_accelerator/particle_emitter/center - icon_state = "emitter_center" - reference = "emitter_center" - -/obj/structure/particle_accelerator/particle_emitter/left - icon_state = "emitter_left" - reference = "emitter_left" - -/obj/structure/particle_accelerator/particle_emitter/right - icon_state = "emitter_right" - reference = "emitter_right" - -/obj/structure/particle_accelerator/particle_emitter/proc/set_delay(var/delay) - if(delay && delay >= 0) - src.fire_delay = delay - return 1 - return 0 - - -/obj/structure/particle_accelerator/particle_emitter/proc/emit_particle(var/strength = 0) - if((src.last_shot + src.fire_delay) <= world.time) - src.last_shot = world.time - var/obj/effect/accelerated_particle/A = null - var/turf/T = get_step(src,dir) - switch(strength) - if(0) - A = new/obj/effect/accelerated_particle/weak(T, dir) - if(1) - A = new/obj/effect/accelerated_particle(T, dir) - if(2) - A = new/obj/effect/accelerated_particle/strong(T, dir) - if(A) - A.set_dir(src.dir) - return 1 - return 0 diff --git a/code/modules/power/singularity/particle_accelerator/particle_power.dm b/code/modules/power/singularity/particle_accelerator/particle_power.dm deleted file mode 100644 index a7d5c5da96900..0000000000000 --- a/code/modules/power/singularity/particle_accelerator/particle_power.dm +++ /dev/null @@ -1,10 +0,0 @@ -/obj/structure/particle_accelerator/power_box - name = "Particle Focusing EM Lens" - desc_holder = "This uses electromagnetic waves to focus the Alpha-Particles." - icon = 'icons/obj/machines/particle_accelerator2.dmi' - icon_state = "power_box" - reference = "power_box" - -/obj/structure/particle_accelerator/power_box/on_update_icon() - ..() - return diff --git a/code/modules/power/singularity/singularity.dm b/code/modules/power/singularity/singularity.dm deleted file mode 100644 index f5b01ed763a84..0000000000000 --- a/code/modules/power/singularity/singularity.dm +++ /dev/null @@ -1,487 +0,0 @@ -//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:33 - -/obj/singularity - name = "gravitational singularity" - desc = "A gravitational singularity." - icon = 'icons/obj/singularity.dmi' - icon_state = "singularity_s1" - anchored = TRUE - density = TRUE - layer = SINGULARITY_LAYER - light_outer_range = 6 - unacidable = TRUE - - var/current_size = 1 - var/allowed_size = 1 - var/contained = 1 //Are we going to move around? - var/energy = 100 //How strong are we? - var/dissipate = 1 //Do we lose energy over time? - var/dissipate_delay = 10 - var/dissipate_track = 0 - var/dissipate_strength = 1 //How much energy do we lose? - var/move_self = 1 //Do we move on our own? - var/grav_pull = 4 //How many tiles out do we pull? - var/consume_range = 0 //How many tiles out do we eat. - var/event_chance = 15 //Prob for event each tick. - var/target = null //Its target. Moves towards the target if it has one. - var/last_failed_movement = 0 //Will not move in the same dir if it couldn't before, will help with the getting stuck on fields thing. - var/last_warning - - var/chained = 0//Adminbus chain-grab - -/obj/singularity/New(loc, var/starting_energy = 50, var/temp = 0) - //CARN: admin-alert for chuckle-fuckery. - admin_investigate_setup() - energy = starting_energy - - if (temp) - addtimer(CALLBACK(null, /proc/qdel, src), temp) - - ..() - START_PROCESSING(SSobj, src) - for(var/obj/machinery/power/singularity_beacon/singubeacon in SSmachines.machinery) - if(singubeacon.active) - target = singubeacon - break - -/obj/singularity/Destroy() - STOP_PROCESSING(SSobj, src) - . = ..() - -/obj/singularity/attack_hand(mob/user as mob) - consume(user) - return 1 - -/obj/singularity/ex_act(severity) - if(current_size == STAGE_SUPER)//IT'S UNSTOPPABLE - return - switch(severity) - if(EX_ACT_DEVASTATING) - if(prob(25)) - investigate_log("has been destroyed by an explosion.", I_SINGULO) - qdel(src) - return - else - energy += 50 - if(EX_ACT_HEAVY to EX_ACT_LIGHT) - energy += round((rand(20,60)/2),1) - return - -/obj/singularity/bullet_act(obj/item/projectile/P) - return 0 //Will there be an impact? Who knows. Will we see it? No. - -/obj/singularity/Bump(atom/A) - consume(A) - -/obj/singularity/Bumped(atom/A) - consume(A) - -/obj/singularity/Process() - eat() - dissipate() - check_energy() - - if (current_size >= STAGE_TWO) - move() - pulse() - - if (prob(event_chance)) //Chance for it to run a special event TODO: Come up with one or two more that fit. - event() - -/obj/singularity/attack_ai() //To prevent ais from gibbing themselves when they click on one. - return - -/obj/singularity/proc/admin_investigate_setup() - last_warning = world.time - var/count = locate(/obj/machinery/containment_field) in orange(30, src) - - if (!count) - message_admins("A singulo has been created without containment fields active ([x], [y], [z] - JMP).") - - investigate_log("was created. [count ? "" : "No containment fields were active."]", I_SINGULO) - -/obj/singularity/proc/dissipate() - if (!dissipate) - return - - if(dissipate_track >= dissipate_delay) - energy -= dissipate_strength - dissipate_track = 0 - else - dissipate_track++ - -/obj/singularity/proc/expand(var/force_size = 0, var/growing = 1) - if(current_size == STAGE_SUPER)//if this is happening, this is an error - message_admins("expand() was called on a super singulo. This should not happen. Contact a coder immediately!") - return - var/temp_allowed_size = allowed_size - - if (force_size) - temp_allowed_size = force_size - - switch (temp_allowed_size) - if (STAGE_ONE) - SetName("gravitational singularity") - desc = "A gravitational singularity." - current_size = STAGE_ONE - icon = 'icons/obj/singularity.dmi' - icon_state = "singularity_s1" - pixel_x = 0 - pixel_y = 0 - grav_pull = 4 - consume_range = 0 - dissipate_delay = 10 - dissipate_track = 0 - dissipate_strength = 1 - overlays.Cut() - if(chained) - overlays = list("chain_s1") - visible_message("The singularity has shrunk to a rather pitiful size.") - if (STAGE_TWO) //1 to 3 does not check for the turfs if you put the gens right next to a 1x1 then its going to eat them. - SetName("gravitational singularity") - desc = "A gravitational singularity." - current_size = STAGE_TWO - icon = 'icons/effects/96x96.dmi' - icon_state = "singularity_s3" - pixel_x = -32 - pixel_y = -32 - grav_pull = 6 - consume_range = 1 - dissipate_delay = 5 - dissipate_track = 0 - dissipate_strength = 5 - overlays.Cut() - if(chained) - overlays = list("chain_s3") - if(growing) - visible_message("The singularity noticeably grows in size.") - else - visible_message("The singularity has shrunk to a less powerful size.") - if (STAGE_THREE) - if ((check_turfs_in(1, 2)) && (check_turfs_in(2, 2)) && (check_turfs_in(4, 2)) && (check_turfs_in(8, 2))) - SetName("gravitational singularity") - desc = "A gravitational singularity." - current_size = STAGE_THREE - icon = 'icons/effects/160x160.dmi' - icon_state = "singularity_s5" - pixel_x = -64 - pixel_y = -64 - grav_pull = 8 - consume_range = 2 - dissipate_delay = 4 - dissipate_track = 0 - dissipate_strength = 20 - overlays.Cut() - if(chained) - overlays = list("chain_s5") - if(growing) - visible_message("The singularity expands to a reasonable size.") - else - visible_message("The singularity has returned to a safe size.") - if(STAGE_FOUR) - if ((check_turfs_in(1, 3)) && (check_turfs_in(2, 3)) && (check_turfs_in(4, 3)) && (check_turfs_in(8, 3))) - SetName("gravitational singularity") - desc = "A gravitational singularity." - current_size = STAGE_FOUR - icon = 'icons/effects/224x224.dmi' - icon_state = "singularity_s7" - pixel_x = -96 - pixel_y = -96 - grav_pull = 10 - consume_range = 3 - dissipate_delay = 10 - dissipate_track = 0 - dissipate_strength = 10 - overlays.Cut() - if(chained) - overlays = list("chain_s7") - if(growing) - visible_message("The singularity expands to a dangerous size.") - else - visible_message("Miraculously, the singularity reduces in size, and can be contained.") - if(STAGE_FIVE) //This one also lacks a check for gens because it eats everything. - SetName("gravitational singularity") - desc = "A gravitational singularity." - current_size = STAGE_FIVE - icon = 'icons/effects/288x288.dmi' - icon_state = "singularity_s9" - pixel_x = -128 - pixel_y = -128 - grav_pull = 10 - consume_range = 4 - dissipate = 0 //It can't go smaller due to e loss. - overlays.Cut() - if(chained) - overlays = list("chain_s9") - if(growing) - visible_message("The singularity has grown out of control!") - else - visible_message("The singularity miraculously reduces in size and loses its supermatter properties.") - if(STAGE_SUPER)//SUPERSINGULO - SetName("super gravitational singularity") - desc = "A gravitational singularity with the properties of supermatter. It has the power to destroy worlds." - current_size = STAGE_SUPER - icon = 'icons/effects/352x352.dmi' - icon_state = "singularity_s11"//uh, whoever drew that, you know that black holes are supposed to look dark right? What's this, the clown's singulo? - pixel_x = -160 - pixel_y = -160 - grav_pull = 16 - consume_range = 5 - dissipate = 0 //It can't go smaller due to e loss - event_chance = 25 //Events will fire off more often. - if(chained) - overlays = list("chain_s9") - visible_message("You witness the creation of a destructive force that cannot possibly be stopped by human hands.") - - if (current_size == allowed_size) - investigate_log("grew to size [current_size].", I_SINGULO) - return 1 - else if (current_size < (--temp_allowed_size) && current_size != STAGE_SUPER) - expand(temp_allowed_size) - else - return 0 - -/obj/singularity/proc/check_energy() - if (energy <= 0) - investigate_log("collapsed.", I_SINGULO) - qdel(src) - return 0 - - switch (energy) //Some of these numbers might need to be changed up later -Mport. - if (1 to 199) - allowed_size = STAGE_ONE - if (200 to 499) - allowed_size = STAGE_TWO - if (500 to 999) - allowed_size = STAGE_THREE - if (1000 to 1999) - allowed_size = STAGE_FOUR - if(2000 to 49999) - allowed_size = STAGE_FIVE - if(50000 to INFINITY) - allowed_size = STAGE_SUPER - - if (current_size != allowed_size && current_size != STAGE_SUPER) - expand(null, current_size < allowed_size) - return 1 - -/obj/singularity/proc/eat() - for(var/atom/X in orange(grav_pull, src)) - var/dist = get_dist(X, src) - var/obj/singularity/S = src - if(!istype(src)) - return - if(dist > consume_range) - X.singularity_pull(S, current_size) - else if(dist <= consume_range) - consume(X) - - //for (var/turf/T in trange(grav_pull, src)) //TODO: Create a similar trange for orange to prevent snowflake of self check. - // consume(T) - - return - -/obj/singularity/proc/consume(const/atom/A) - src.energy += A.singularity_act(src, current_size) - return - -/obj/singularity/proc/move(var/force_move = 0) - if(!move_self) - return 0 - - var/movement_dir = pick(GLOB.alldirs - last_failed_movement) - - if(force_move) - movement_dir = force_move - - if(target && prob(60)) - movement_dir = get_dir(src,target) //moves to a singulo beacon, if there is one - - if(current_size >= 9)//The superlarge one does not care about things in its way - spawn(0) - step(src, movement_dir) - spawn(1) - step(src, movement_dir) - return 1 - else if(check_turfs_in(movement_dir)) - last_failed_movement = 0 // Reset this because we moved - spawn(0) - step(src, movement_dir) - return 1 - else - last_failed_movement = movement_dir - return 0 - -/obj/singularity/proc/check_turfs_in(var/direction = 0, var/step = 0) - if(!direction) - return 0 - var/steps = 0 - if(!step) - switch(current_size) - if(1) - steps = 1 - if(3) - steps = 3//Yes this is right - if(5) - steps = 3 - if(7) - steps = 4 - if(9) - steps = 5 - if(11) - steps = 6 - else - steps = step - var/list/turfs = list() - var/turf/T = src.loc - for(var/i = 1 to steps) - T = get_step(T,direction) - if(!isturf(T)) - return 0 - turfs.Add(T) - var/dir2 = 0 - var/dir3 = 0 - switch(direction) - if(NORTH, SOUTH) - dir2 = 4 - dir3 = 8 - if(EAST, WEST) - dir2 = 1 - dir3 = 2 - var/turf/T2 = T - for(var/j = 1 to steps) - T2 = get_step(T2,dir2) - if(!isturf(T2)) - return 0 - turfs.Add(T2) - for(var/k = 1 to steps) - T = get_step(T,dir3) - if(!isturf(T)) - return 0 - turfs.Add(T) - for(var/turf/T3 in turfs) - if(isnull(T3)) - continue - if(!can_move(T3)) - return 0 - return 1 - -/obj/singularity/proc/can_move(const/turf/T) - if (!isturf(T)) - return 0 - - if ((locate(/obj/machinery/containment_field) in T) || (locate(/obj/machinery/shieldwall) in T)) - return 0 - else if (locate(/obj/machinery/field_generator) in T) - var/obj/machinery/field_generator/G = locate(/obj/machinery/field_generator) in T - - if (G && G.active) - return 0 - else if (locate(/obj/machinery/shieldwallgen) in T) - var/obj/machinery/shieldwallgen/S = locate(/obj/machinery/shieldwallgen) in T - - if (S && S.active) - return 0 - return 1 - -/obj/singularity/proc/event() - var/numb = pick(1, 2, 3, 4, 5, 6) - - switch (numb) - if (1) //EMP. - emp_area() - if (2, 3) //Tox damage all carbon mobs in area. - toxmob() - if (4) //Stun mobs who lack optic scanners. - mezzer() - else - return 0 - if(current_size == 11) - smwave() - return 1 - - -/obj/singularity/proc/toxmob() - var/toxrange = 10 - var/toxdamage = 4 - var/radiation = 15 - if (src.energy>200) - toxdamage = round(((src.energy-150)/50)*4,1) - radiation = round(((src.energy-150)/50)*5,1) - SSradiation.radiate(src, radiation) //Always radiate at max, so a decent dose of radiation is applied - for(var/mob/living/M in view(toxrange, src.loc)) - if(M.status_flags & GODMODE) - continue - M.apply_damage(toxdamage, DAMAGE_TOXIN, null, damage_flags = DAMAGE_FLAG_DISPERSED) - -/obj/singularity/proc/mezzer() - for(var/mob/living/carbon/M in oviewers(8, src)) - if(istype(M, /mob/living/carbon/brain)) //Ignore brains - continue - if(M.status_flags & GODMODE) - continue - if(M.stat == CONSCIOUS) - if (istype(M,/mob/living/carbon/human)) - var/mob/living/carbon/human/H = M - if(istype(H.glasses,/obj/item/clothing/glasses/meson) && current_size != 11) - to_chat(H, "You look directly into The [src.name], good thing you had your protective eyewear on!") - return - else - to_chat(H, "You look directly into The [src.name], but your eyewear does absolutely nothing to protect you from it!") - to_chat(M, "You look directly into The [src.name] and feel [current_size == 11 ? "helpless" : "weak"].") - M.apply_effect(3, EFFECT_STUN) - for(var/mob/O in viewers(M, null)) - O.show_message(text("[] stares blankly at The []!", M, src), 1) - -/obj/singularity/proc/emp_area() - if(current_size != 11) - empulse(src, 8, 10) - else - empulse(src, 12, 16) - -/obj/singularity/proc/smwave() - for(var/mob/living/M in view(10, src.loc)) - if(prob(67)) - to_chat(M, "You hear an unearthly ringing, then what sounds like a shrilling kettle as you are washed with a wave of heat.") - to_chat(M, "Miraculously, it fails to kill you.") - else - to_chat(M, "You hear an unearthly ringing, then what sounds like a shrilling kettle as you are washed with a wave of heat.") - to_chat(M, "You don't even have a moment to react as you are reduced to ashes by the intense radiation.") - M.dust() - SSradiation.radiate(src, rand(energy)) - return - -/obj/singularity/proc/pulse() - for(var/obj/machinery/power/rad_collector/R in rad_collectors) - if (get_dist(R, src) <= 15) //Better than using orange() every process. - R.receive_pulse(energy) - -/obj/singularity/proc/on_capture() - chained = 1 - overlays.Cut() - move_self = 0 - switch (current_size) - if(1) - overlays += image('icons/obj/singularity.dmi',"chain_s1") - if(3) - overlays += image('icons/effects/96x96.dmi',"chain_s3") - if(5) - overlays += image('icons/effects/160x160.dmi',"chain_s5") - if(7) - overlays += image('icons/effects/224x224.dmi',"chain_s7") - if(9) - overlays += image('icons/effects/288x288.dmi',"chain_s9") - -/obj/singularity/proc/on_release() - chained = 0 - overlays.Cut() - move_self = 1 - -/obj/singularity/singularity_act(S, size) - if(current_size <= size) - var/gain = (energy/2) - var/dist = max((current_size - 2), 1) - explosion(src.loc,(dist),(dist*2),(dist*4)) - spawn(0) - qdel(src) - return gain diff --git a/code/modules/power/smes.dm b/code/modules/power/smes.dm deleted file mode 100644 index 4aaa8ff9ab6fa..0000000000000 --- a/code/modules/power/smes.dm +++ /dev/null @@ -1,407 +0,0 @@ -// the SMES -// stores power - -#define SMESMAXCHARGELEVEL 250000 -#define SMESMAXOUTPUT 250000 - -/obj/machinery/power/smes - name = "power storage unit" - desc = "A high-capacity superconducting magnetic energy storage (SMES) unit." - icon_state = "smes" - density = TRUE - anchored = TRUE - clicksound = "switch" - core_skill = SKILL_ELECTRICAL - power_channel = LOCAL // Draws power from direct connections to powernets. - construct_state = /decl/machine_construction/default/panel_closed - uncreated_component_parts = null - stat_immune = 0 - stat = BROKEN // Should be removed if the terminals initialize fully. - reason_broken = MACHINE_BROKEN_GENERIC - - machine_name = "superconductive magnetic energy storage" - machine_desc = "The SMES is effectively a giant battery. It stores vast quantities of power for later use, and can be remotely controlled using the RCON system." - - var/capacity = 5e6 // maximum charge - var/charge = 1e6 // actual charge - var/overlay_icon = 'icons/obj/power.dmi' - var/input_attempt = 0 // 1 = attempting to charge, 0 = not attempting to charge - var/inputting = 0 // 1 = actually inputting, 0 = not inputting - var/input_level = 50000 // amount of power the SMES attempts to charge by - var/input_level_max = 200000 // cap on input_level - var/input_available = 0 // amount of charge available from input last tick - - var/output_attempt = 0 // 1 = attempting to output, 0 = not attempting to output - var/outputting = 0 // 1 = actually outputting, 0 = not outputting - var/output_level = 50000 // amount of power the SMES attempts to output - var/output_level_max = 200000 // cap on output_level - var/output_used = 0 // amount of power actually outputted. may be less than output_level if the powernet returns excess power - - //Holders for powerout event. - //var/last_output_attempt = 0 - //var/last_input_attempt = 0 - //var/last_charge = 0 - - //For icon overlay updates - var/last_disp - var/last_chrg - var/last_onln - - var/damage = 0 - var/maxdamage = 500 // Relatively resilient, given how expensive it is, but once destroyed produces small explosion. - - var/input_cut = 0 - var/input_pulsed = 0 - var/output_cut = 0 - var/output_pulsed = 0 - var/failure_timer = 0 // Set by gridcheck event, temporarily disables the SMES. - var/target_load = 0 - var/name_tag = null - var/num_terminals = 0 // internal bookkeeping for number of connected terminals - var/should_be_mapped = 0 // If this is set to 0 it will send out warning on New() - -/obj/machinery/power/smes/drain_power(var/drain_check, var/surge, var/amount = 0) - - if(drain_check) - return 1 - - var/smes_amt = min((amount * CELLRATE), charge) - charge -= smes_amt - return smes_amt / CELLRATE - - -/obj/machinery/power/smes/New() - ..() - if(!should_be_mapped) - warning("Non-buildable or Non-magical SMES at [src.x]X [src.y]Y [src.z]Z") - -/obj/machinery/power/smes/Initialize() - . = ..() - update_icon() - -/obj/machinery/power/smes/populate_parts() - for(var/d in GLOB.cardinal) - var/obj/item/stock_parts/power/terminal/part = install_component(/obj/item/stock_parts/power/terminal, refresh_parts = FALSE) - part.terminal_dir = d - var/turf/T = get_step(src, d) - for(var/obj/machinery/power/terminal/term in T) - if(term.dir == turn(d, 180) && !term.master) - part.set_terminal(src, term) - term.connect_to_network() - ..() - -/obj/machinery/power/smes/add_avail(var/amount) - if(..(amount)) - powernet.smes_newavail += amount - return 1 - return 0 - -/obj/machinery/power/smes/on_update_icon() - overlays.Cut() - if(stat & BROKEN) return - - overlays += image(overlay_icon, "smes-op[outputting]") - - if(inputting == 2) - overlays += image(overlay_icon, "smes-oc2") - else if (inputting == 1) - overlays += image(overlay_icon, "smes-oc1") - else if (input_attempt) - overlays += image(overlay_icon, "smes-oc0") - - var/clevel = chargedisplay() - if(clevel) - var/image/I = image(overlay_icon, "smes-og[clevel]") - I.plane = EFFECTS_ABOVE_LIGHTING_PLANE - I.layer = ABOVE_LIGHTING_LAYER - overlays += I - set_light(0.4, 1.2, 4, 10) - - if(outputting == 2) - overlays += image(overlay_icon, "smes-op2") - else if (outputting == 1) - overlays += image(overlay_icon, "smes-op1") - else - overlays += image(overlay_icon, "smes-op0") - - if(panel_open) - overlays += image(overlay_icon, "smes-panel") - - -/obj/machinery/power/smes/proc/chargedisplay() - return round(5.5*charge/(capacity ? capacity : 5e6)) - -/obj/machinery/power/smes/proc/input_power(var/percentage) - var/to_input = target_load * (percentage/100) - to_input = clamp(to_input, 0, target_load) - input_available = 0 - if(percentage == 100) - inputting = 2 - else if(percentage) - inputting = 1 - // else inputting = 0, as set in process() - - for(var/obj/item/stock_parts/power/terminal/term in power_components) - var/inputted = term.use_power_oneoff(src, to_input, power_channel) - add_charge(inputted) - input_available += inputted - -// Mostly in place due to child types that may store power in other way (PSUs) -/obj/machinery/power/smes/proc/add_charge(var/amount) - charge += amount*CELLRATE - -/obj/machinery/power/smes/proc/remove_charge(var/amount) - charge -= amount*CELLRATE - -/obj/machinery/power/smes/component_stat_change(var/obj/item/stock_parts/power/terminal/part, old_stat, flag) - if(istype(part) && flag == PART_STAT_CONNECTED) - if(old_stat & flag) - num_terminals-- - else - num_terminals++ - set_broken(!num_terminals) - -/obj/machinery/power/smes/Process() - if(stat & BROKEN) return - if(failure_timer) // Disabled by gridcheck. - failure_timer-- - return - - // only update icon if state changed - if(last_disp != chargedisplay() || last_chrg != inputting || last_onln != outputting) - update_icon() - - //store machine state to see if we need to update the icon overlays - last_disp = chargedisplay() - last_chrg = inputting - last_onln = outputting - - input_available = 0 - //inputting - if(input_attempt && (!input_pulsed && !input_cut)) - target_load = min((capacity-charge)/CELLRATE, input_level) // Amount we will request from the powernet. - var/is_input_available = FALSE - for(var/obj/item/stock_parts/power/terminal/term in power_components) - if(!term.terminal || !term.terminal.powernet) - continue - is_input_available = TRUE - term.terminal.powernet.smes_demand += target_load - term.terminal.powernet.inputting.Add(src) - if(!is_input_available) - target_load = 0 // We won't input any power without powernet connection. - inputting = 0 - - output_used = 0 - //outputting - if(output_attempt && (!output_pulsed && !output_cut) && powernet && charge) - output_used = min( charge/CELLRATE, output_level) //limit output to that stored - remove_charge(output_used) // reduce the storage (may be recovered in /restore() if excessive) - add_avail(output_used) // add output to powernet (smes side) - outputting = 2 - else if(!powernet || !charge) - outputting = 1 - else - outputting = 0 - -// called after all power processes are finished -// restores charge level to smes if there was excess this ptick -/obj/machinery/power/smes/proc/restore(var/percent_load) - if(stat & BROKEN) - return - - if(!outputting) - output_used = 0 - return - - var/total_restore = output_used * (percent_load / 100) // First calculate amount of power used from our output - total_restore = clamp(total_restore, 0, output_used) // Now clamp the value between 0 and actual output, just for clarity. - total_restore = output_used - total_restore // And, at last, subtract used power from outputted power, to get amount of power we will give back to the SMES. - - // now recharge this amount - - var/clev = chargedisplay() - - add_charge(total_restore) // restore unused power - powernet.netexcess -= total_restore // remove the excess from the powernet, so later SMESes don't try to use it - - output_used -= total_restore - - if(clev != chargedisplay() ) //if needed updates the icons overlay - update_icon() - return - -/obj/machinery/power/smes/draw_power(var/amount) - return amount - use_power_oneoff(amount) - -/obj/machinery/power/smes/interface_interact(mob/user) - ui_interact(user) - return TRUE - -/obj/machinery/power/smes/attackby(var/obj/item/W as obj, var/mob/user as mob) - if(component_attackby(W, user)) - return TRUE - - if (!panel_open) - to_chat(user, "You need to open the access hatch on \the [src] first!") - return TRUE - - if(isWelder(W)) - var/obj/item/weldingtool/WT = W - if(!WT.isOn()) - to_chat(user, "Turn on \the [WT] first!") - return TRUE - if(!damage) - to_chat(user, "\The [src] is already fully repaired.") - return TRUE - if(WT.remove_fuel(0,user) && do_after(user, damage, src, DO_PUBLIC_UNIQUE)) - to_chat(user, "You repair all structural damage to \the [src]") - damage = 0 - return TRUE - -/obj/machinery/power/smes/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1) - // this is the data which will be sent to the ui - var/data[0] - data["nameTag"] = name_tag - data["storedCapacity"] = Percentage() - data["storedCapacityAbs"] = round(charge/1000, 0.1) - data["storedCapacityMax"] = round(capacity/1000, 0.1) - data["charging"] = inputting - data["chargeMode"] = input_attempt - data["chargeLevel"] = round(input_level/1000, 0.1) - data["chargeMax"] = round(input_level_max/1000) - data["chargeLoad"] = round(input_available/1000, 0.1) - data["outputOnline"] = output_attempt - data["outputLevel"] = round(output_level/1000, 0.1) - data["outputMax"] = round(output_level_max/1000) - data["outputLoad"] = round(output_used/1000, 0.1) - data["failTime"] = failure_timer * 2 - data["outputting"] = outputting - - - // update the ui if it exists, returns null if no ui is passed/found - ui = SSnano.try_update_ui(user, src, ui_key, ui, data, force_open) - if (!ui) - // the ui does not exist, so we'll create a new() one - // for a list of parameters and their descriptions see the code docs in \code\modules\nano\nanoui.dm - ui = new(user, src, ui_key, "smes.tmpl", "SMES Unit", 540, 380) - // when the ui is first opened this is the data it will use - ui.set_initial_data(data) - // open the new ui window - ui.open() - // auto update every Master Controller tick - ui.set_auto_update(1) - -/obj/machinery/power/smes/proc/Percentage() - if(!capacity) - return 0 - return round(100.0*charge/capacity, 0.1) - -/obj/machinery/power/smes/Topic(href, href_list) - if(..()) - return 1 - - if( href_list["cmode"] ) - inputting(!input_attempt) - update_icon() - return 1 - else if( href_list["online"] ) - outputting(!output_attempt) - update_icon() - return 1 - else if( href_list["reboot"] ) - failure_timer = 0 - update_icon() - return 1 - else if( href_list["input"] ) - switch( href_list["input"] ) - if("min") - input_level = 0 - if("max") - input_level = input_level_max - if("set") - input_level = (input(usr, "Enter new input level (0-[input_level_max/1000] kW)", "SMES Input Power Control", input_level/1000) as num) * 1000 - input_level = max(0, min(input_level_max, input_level)) // clamp to range - return 1 - else if( href_list["output"] ) - switch( href_list["output"] ) - if("min") - output_level = 0 - if("max") - output_level = output_level_max - if("set") - output_level = (input(usr, "Enter new output level (0-[output_level_max/1000] kW)", "SMES Output Power Control", output_level/1000) as num) * 1000 - output_level = max(0, min(output_level_max, output_level)) // clamp to range - return 1 - - -/obj/machinery/power/smes/proc/energy_fail(var/duration) - failure_timer = max(failure_timer, duration) - -/obj/machinery/power/smes/proc/inputting(var/do_input) - input_attempt = do_input - if(!input_attempt) - inputting = 0 - -/obj/machinery/power/smes/proc/outputting(var/do_output) - output_attempt = do_output - if(!output_attempt) - outputting = 0 - -/obj/machinery/power/smes/proc/take_damage(var/amount) - amount = max(0, round(amount)) - damage += amount - if(damage > maxdamage) - visible_message("\The [src] explodes in large rain of sparks and smoke!") - // Depending on stored charge percentage cause damage. - switch(Percentage()) - if(75 to INFINITY) - explosion(get_turf(src), 1, 2, 4) - if(40 to 74) - explosion(get_turf(src), 0, 2, 3) - if(5 to 39) - explosion(get_turf(src), 0, 1, 2) - qdel(src) // Either way we want to ensure the SMES is deleted. - -/obj/machinery/power/smes/emp_act(severity) - if(!num_terminals) - inputting(0) - outputting(0) - else if(prob(50)) - inputting(rand(0,1)) - outputting(rand(0,1)) - if(prob(50)) - output_level = rand(0, output_level_max) - input_level = rand(0, input_level_max) - if(prob(50)) - charge -= 1e6/severity - if (charge < 0) - charge = 0 - if(prob(50)) - energy_fail(rand(0 + (severity * 30),30 + (severity * 30))) - update_icon() - ..() - -/obj/machinery/power/smes/bullet_act(var/obj/item/projectile/Proj) - if (Proj.damage_type == DAMAGE_BRUTE || Proj.damage_type == DAMAGE_BURN) - take_damage(Proj.damage) - -/obj/machinery/power/smes/ex_act(var/severity) - // Two strong explosions will destroy a SMES. - // Given the SMES creates another explosion on it's destruction it sounds fairly reasonable. - take_damage(250 / severity) - -/obj/machinery/power/smes/examine(mob/user) - . = ..() - to_chat(user, "The service hatch is [panel_open ? "open" : "closed"].") - if(!damage) - return - var/damage_percentage = round((damage / maxdamage) * 100) - switch(damage_percentage) - if(75 to INFINITY) - to_chat(user, "It's casing is severely damaged, and sparking circuitry may be seen through the holes!") - if(50 to 74) - to_chat(user, "It's casing is considerably damaged, and some of the internal circuits appear to be exposed!") - if(25 to 49) - to_chat(user, "It's casing is quite seriously damaged.") - if(0 to 24) - to_chat(user, "It's casing has some minor damage.") diff --git a/code/modules/power/smes_construction.dm b/code/modules/power/smes_construction.dm deleted file mode 100644 index 806313f2fb24c..0000000000000 --- a/code/modules/power/smes_construction.dm +++ /dev/null @@ -1,382 +0,0 @@ -// BUILDABLE SMES(Superconducting Magnetic Energy Storage) UNIT -// -// Last Change 1.1.2015 by Atlantis - Happy New Year! -// -// This is subtype of SMES that should be normally used. It can be constructed, deconstructed and hacked. -// It also supports RCON System which allows you to operate it remotely, if properly set. - -//MAGNETIC COILS - These things actually store and transmit power within the SMES. Different types have different -/obj/item/stock_parts/smes_coil - name = "superconductive magnetic coil" - desc = "Standard superconductive magnetic coil with average capacity and I/O rating." - icon = 'icons/obj/stock_parts.dmi' - icon_state = "smes_coil" - w_class = ITEM_SIZE_LARGE // It's LARGE (backpack size) - origin_tech = list(TECH_MATERIAL = 7, TECH_POWER = 7, TECH_ENGINEERING = 5) - base_type = /obj/item/stock_parts/smes_coil - part_flags = PART_FLAG_HAND_REMOVE - var/ChargeCapacity = 50 KILOWATTS - var/IOCapacity = 250 KILOWATTS - -// 20% Charge Capacity, 60% I/O Capacity. Used for substation/outpost SMESs. -/obj/item/stock_parts/smes_coil/weak - name = "basic superconductive magnetic coil" - desc = "Cheaper model of standard superconductive magnetic coil. It's capacity and I/O rating are considerably lower." - icon_state = "smes_coil_weak" - ChargeCapacity = 10 KILOWATTS - IOCapacity = 150 KILOWATTS - -// 500% Charge Capacity, 40% I/O Capacity. Holds a lot of energy, but charges slowly if not combined with other coils. Ideal for backup storage. -/obj/item/stock_parts/smes_coil/super_capacity - name = "superconductive capacitance coil" - desc = "Specialised version of standard superconductive magnetic coil. This one has significantly stronger containment field, allowing for significantly larger power storage. It's IO rating is much lower, however." - icon_state = "smes_coil_capacitance" - ChargeCapacity = 250 KILOWATTS - IOCapacity = 100 KILOWATTS - -// 40% Charge Capacity, 500% I/O Capacity. Technically turns SMES into large super capacitor. Ideal for shields. -/obj/item/stock_parts/smes_coil/super_io - name = "superconductive transmission coil" - desc = "Specialised version of standard superconductive magnetic coil. While this one won't store almost any power, it rapidly transfers current, making it useful in systems which require large throughput." - icon_state = "smes_coil_transmission" - ChargeCapacity = 20 KILOWATTS - IOCapacity = 1.25 MEGAWATTS - -// A superpowered coil to be used on event SMES units, away sites that run lots of power, and maybe as a rare merchant item. -/obj/item/stock_parts/smes_coil/advanced - name = "advanced magnetic coil" - desc = " An advanced magnetic coil made from rare materials. Can store and transfer more power than any previous designs." - ChargeCapacity = 500 KILOWATTS - IOCapacity = 2.5 MEGAWATTS - - -// DEPRECATED -// These are used on individual outposts as backup should power line be cut, or engineering outpost lost power. -// 1M Charge, 150K I/O -/obj/machinery/power/smes/buildable/outpost_substation - uncreated_component_parts = list(/obj/item/stock_parts/smes_coil/weak = 1) - -// This one is pre-installed on engineering shuttle. Allows rapid charging/discharging for easier transport of power to outpost -// 11M Charge, 2.5M I/O -/obj/machinery/power/smes/buildable/power_shuttle - uncreated_component_parts = list( - /obj/item/stock_parts/smes_coil/super_io = 2, - /obj/item/stock_parts/smes_coil = 1) - -// END SMES SUBTYPES - -// SMES itself -/obj/machinery/power/smes/buildable - var/safeties_enabled = 1 // If 0 modifications can be done without discharging the SMES, at risk of critical failure. - var/failing = 0 // If 1 critical failure has occured and SMES explosion is imminent. - wires = /datum/wires/smes - var/grounding = 1 // Cut to quickly discharge, at cost of "minor" electrical issues in output powernet. - var/RCon = 1 // Cut to disable AI and remote control. - var/RCon_tag = "NO_TAG" // RCON tag, change to show it on SMES Remote control console. - var/emp_proof = 0 // Whether the SMES is EMP proof - - charge = 0 - should_be_mapped = 1 - base_type = /obj/machinery/power/smes/buildable - maximum_component_parts = list(/obj/item/stock_parts/smes_coil = 6, /obj/item/stock_parts = 15) - interact_offline = TRUE - -/obj/machinery/power/smes/buildable/malf_upgrade(var/mob/living/silicon/ai/user) - ..() - malf_upgraded = 1 - emp_proof = 1 - RefreshParts() - to_chat(user, "\The [src] has been upgraded. It's transfer rate and capacity has increased, and it is now resistant against EM pulses.") - return 1 - - -/obj/machinery/power/smes/buildable/max_cap_in_out/Initialize() - . = ..() - charge = capacity - input_attempt = TRUE - output_attempt = TRUE - input_level = input_level_max - output_level = output_level_max - - -/obj/machinery/power/smes/buildable/Destroy() - for(var/datum/nano_module/rcon/R in world) - R.FindDevices() - return ..() - -// Proc: process() -// Parameters: None -// Description: Uses parent process, but if grounding wire is cut causes sparks to fly around. -// This also causes the SMES to quickly discharge, and has small chance of damaging output APCs. -/obj/machinery/power/smes/buildable/Process() - if(!grounding && (Percentage() > 5)) - var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread - s.set_up(5, 1, src) - s.start() - charge -= (output_level_max * CELLRATE) - if(powernet && prob(1)) // Small chance of overload occuring since grounding is disabled. - powernet.apcs_overload(5,10,20) - - ..() - -// Proc: attack_ai() -// Parameters: None -// Description: AI requires the RCON wire to be intact to operate the SMES. -/obj/machinery/power/smes/buildable/attack_ai(mob/user) - if(RCon) - ..() - else // RCON wire cut - to_chat(user, "Connection error: Destination Unreachable.") - -// Proc: recalc_coils() -// Parameters: None -// Description: Updates properties (IO, capacity, etc.) of this SMES by checking internal components. -/obj/machinery/power/smes/buildable/RefreshParts() - ..() - capacity = 0 - input_level_max = 0 - output_level_max = 0 - for(var/obj/item/stock_parts/smes_coil/C in component_parts) - capacity += C.ChargeCapacity - input_level_max += C.IOCapacity - output_level_max += C.IOCapacity - if(malf_upgraded) - capacity *= 1.2 - input_level_max *= 2 - output_level_max *= 2 - charge = clamp(charge, 0, capacity) - -// Proc: total_system_failure() -// Parameters: 2 (intensity - how strong the failure is, user - person which caused the failure) -// Description: Checks the sensors for alerts. If change (alerts cleared or detected) occurs, calls for icon update. -/obj/machinery/power/smes/buildable/proc/total_system_failure(var/intensity = 0, var/mob/user as mob) - // SMESs store very large amount of power. If someone screws up (ie: Disables safeties and attempts to modify the SMES) very bad things happen. - // Bad things are based on charge percentage. - // Possible effects: - // Sparks - Lets out few sparks, mostly fire hazard if phoron present. Otherwise purely aesthetic. - // Shock - Depending on intensity harms the user. Insultated Gloves protect against weaker shocks, but strong shock bypasses them. - // EMP Pulse - Lets out EMP pulse discharge which screws up nearby electronics. - // Light Overload - X% chance to overload each lighting circuit in connected powernet. APC based. - // APC Failure - X% chance to destroy APC causing very weak explosion too. Won't cause hull breach or serious harm. - // SMES Explosion - X% chance to destroy the SMES, in moderate explosion. May cause small hull breach. - - if (!intensity) - return - - var/mob/living/carbon/human/h_user = null - if (!istype(user, /mob/living/carbon/human)) - return - else - h_user = user - - - // Preparations - var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread - // Check if user has protected gloves. - var/user_protected = 0 - if(h_user.gloves) - var/obj/item/clothing/gloves/G = h_user.gloves - if(G.siemens_coefficient == 0) - user_protected = 1 - log_and_message_admins("SMES FAILURE: [src.x]X [src.y]Y [src.z]Z User: [usr.ckey], Intensity: [intensity]/100 - JMP") - - - switch (intensity) - if (0 to 15) - // Small overcharge - // Sparks, Weak shock - s.set_up(2, 1, src) - s.start() - if(user_protected && prob(80)) - to_chat(h_user, SPAN_WARNING("Small electrical arc almost burns your hand. Luckily you had your gloves on!")) - else - to_chat(h_user, SPAN_DANGER("Small electrical arc sparks and burns your hand as you touch the [src]!")) - h_user.electrocute_act(rand(5,20), src, def_zone = h_user.hand ? BP_L_HAND : BP_R_HAND)//corrected to counter act armor and stuff - charge = 0 - - if (16 to 35) - // Medium overcharge - // Sparks, Medium shock, Weak EMP - s.set_up(4,1,src) - s.start() - if (user_protected && prob(25)) - to_chat(h_user, SPAN_WARNING("Medium electrical arc sparks and almost burns your hand. Luckily you had your gloves on!")) - else - to_chat(h_user, SPAN_DANGER("Medium electrical sparks as you touch the [src], severely burning your hand!")) - h_user.electrocute_act(rand(15,35), src, def_zone = h_user.hand ? BP_L_HAND : BP_R_HAND) - spawn(0) - empulse(src.loc, 2, 4) - if(powernet) - powernet.apcs_overload(0, 5, 10) - charge = 0 - - if (36 to 60) - // Strong overcharge - // Sparks, Strong shock, Strong EMP, 10% light overload. 1% APC failure - s.set_up(7,1,src) - s.start() - if (user_protected) - to_chat(h_user, SPAN_DANGER("Strong electrical arc sparks between you and [src], ignoring your gloves and burning your hand!")) - h_user.electrocute_act(rand(30,60), src, def_zone = h_user.hand ? BP_L_HAND : BP_R_HAND) - h_user.Paralyse(3) - else - to_chat(h_user, SPAN_DANGER("Strong electrical arc sparks between you and [src], knocking you out for a while!")) - h_user.electrocute_act(rand(40,80), src, def_zone = ran_zone(null)) - h_user.Paralyse(6) - spawn(0) - empulse(src.loc, 8, 16) - charge = 0 - if(powernet) - powernet.apcs_overload(1, 10, 20) - energy_fail(10) - src.ping("Caution. Output regulators malfunction. Uncontrolled discharge detected.") - - if (61 to INFINITY) - // Massive overcharge - // Sparks, Near - instantkill shock, Strong EMP, 25% light overload, 5% APC failure. 50% of SMES explosion. This is bad. - s.set_up(10,1,src) - s.start() - to_chat(h_user, SPAN_WARNING("Massive electrical arc sparks between you and [src].
              Last thing you can think about is \"Oh shit...\"")) - // Remember, we have few gigajoules of electricity here.. Turn them into crispy toast. - h_user.electrocute_act(rand(170,210), src, def_zone = ran_zone(null)) - h_user.Paralyse(8) - spawn(0) - empulse(src.loc, 32, 64) - charge = 0 - if(powernet) - powernet.apcs_overload(5, 25, 100) - energy_fail(30) - src.ping("Caution. Output regulators malfunction. Significant uncontrolled discharge detected.") - - if (prob(50)) - // Added admin-notifications so they can stop it when griffed. - log_and_message_admins("SMES explosion imminent.") - src.ping("DANGER! Magnetic containment field unstable! Containment field failure imminent!") - failing = 1 - // 30 - 60 seconds and then BAM! - spawn(rand(300,600)) - if(!failing) // Admin can manually set this var back to 0 to stop overload, for use when griffed. - update_icon() - src.ping("Magnetic containment stabilised.") - return - src.ping("DANGER! Magnetic containment field failure in 3 ... 2 ... 1 ...") - explosion(src.loc,1,2,4,8) - // Not sure if this is necessary, but just in case the SMES *somehow* survived.. - qdel(src) - -/obj/machinery/power/smes/buildable/proc/check_total_system_failure(var/mob/user) - // Probability of failure if safety circuit is disabled (in %) - var/failure_probability = capacity ? round((charge / capacity) * 100) : 0 - - // If failure probability is below 5% it's usually safe to do modifications - if (failure_probability < 5) - failure_probability = 0 - - if (failure_probability && prob(failure_probability * (1.5 - (user.get_skill_value(core_skill) - SKILL_MIN)/(SKILL_MAX - SKILL_MIN))))// 0.5 - 1.5, step of 0.25 - total_system_failure(failure_probability, user) - return TRUE - -// Proc: update_icon() -// Parameters: None -// Description: Allows us to use special icon overlay for critical SMESs -/obj/machinery/power/smes/buildable/on_update_icon() - if (failing) - overlays.Cut() - overlays += image('icons/obj/power.dmi', "smes-crit") - else - ..() - -/obj/machinery/power/smes/buildable/cannot_transition_to(state_path, mob/user) - if(failing) - return SPAN_WARNING("\The [src]'s screen is flashing with alerts. It seems to be overloaded! Touching it now is probably not a good idea.") - - if(state_path == /decl/machine_construction/default/deconstructed) - if(charge > (capacity/100) && safeties_enabled) - return SPAN_WARNING("\The [src]'s safety circuit is preventing modifications while it's charged!") - if(output_attempt || input_attempt) - return SPAN_WARNING("Turn \the [src] off first!") - if(!(stat & BROKEN)) - return SPAN_WARNING("You have to disassemble the terminal[num_terminals > 1 ? "s" : ""] first!") - if(user) - if(!do_after(user, 5 SECONDS * number_of_components(/obj/item/stock_parts/smes_coil), src, DO_PUBLIC_UNIQUE) && isCrowbar(user.get_active_hand())) - return MCS_BLOCK - if(check_total_system_failure(user)) - return MCS_BLOCK - return ..() - -/obj/machinery/power/smes/buildable/can_add_component(obj/item/stock_parts/component, mob/user) - if(charge > (capacity/100) && safeties_enabled) - to_chat(user, SPAN_WARNING("\The [src]'s safety circuit is preventing modifications while it's charged!")) - return FALSE - . = ..() - if(!.) - return - if(istype(component,/obj/item/stock_parts/smes_coil)) - if(output_attempt || input_attempt) - to_chat(user, SPAN_WARNING("Turn \the [src] off first!")) - return FALSE - if(!do_after(user, 5 SECONDS, src, DO_PUBLIC_UNIQUE) || check_total_system_failure(user)) - return FALSE - -/obj/machinery/power/smes/buildable/remove_part_and_give_to_user(path, mob/user) - if(charge > (capacity/100) && safeties_enabled) - to_chat(user, SPAN_WARNING("\The [src]'s safety circuit is preventing modifications while it's charged!")) - return - if(ispath(path,/obj/item/stock_parts/smes_coil)) - if(output_attempt || input_attempt) - to_chat(user, SPAN_WARNING("Turn \the [src] off first!")) - return - if(!do_after(user, 5 SECONDS, src, DO_PUBLIC_UNIQUE) || check_total_system_failure(user)) - return - ..() - -// Proc: attackby() -// Parameters: 2 (W - object that was used on this machine, user - person which used the object) -// Description: Handles tool interaction. Allows deconstruction/upgrading/fixing. -/obj/machinery/power/smes/buildable/attackby(var/obj/item/W as obj, var/mob/user as mob) - // No more disassembling of overloaded SMESs. You broke it, now enjoy the consequences. - if (failing) - to_chat(user, "\The [src]'s screen is flashing with alerts. It seems to be overloaded! Touching it now is probably not a good idea.") - return - - if (!..()) - - // Multitool - change RCON tag - if(isMultitool(W)) - var/newtag = input(user, "Enter new RCON tag. Use \"NO_TAG\" to disable RCON or leave empty to cancel.", "SMES RCON system") as text - if(newtag) - RCon_tag = newtag - to_chat(user, "You changed the RCON tag to: [newtag]") - -// Proc: toggle_input() -// Parameters: None -// Description: Switches the input on/off depending on previous setting -/obj/machinery/power/smes/buildable/proc/toggle_input() - inputting(!input_attempt) - update_icon() - -// Proc: toggle_output() -// Parameters: None -// Description: Switches the output on/off depending on previous setting -/obj/machinery/power/smes/buildable/proc/toggle_output() - outputting(!output_attempt) - update_icon() - -// Proc: set_input() -// Parameters: 1 (new_input - New input value in Watts) -// Description: Sets input setting on this SMES. Trims it if limits are exceeded. -/obj/machinery/power/smes/buildable/proc/set_input(var/new_input = 0) - input_level = clamp(new_input, 0, input_level_max) - update_icon() - -// Proc: set_output() -// Parameters: 1 (new_output - New output value in Watts) -// Description: Sets output setting on this SMES. Trims it if limits are exceeded. -/obj/machinery/power/smes/buildable/proc/set_output(var/new_output = 0) - output_level = clamp(new_output, 0, output_level_max) - update_icon() - -/obj/machinery/power/smes/buildable/emp_act(var/severity) - if(emp_proof) - return - ..(severity) diff --git a/code/modules/power/smes_presets.dm b/code/modules/power/smes_presets.dm deleted file mode 100644 index 4ece2b391de2d..0000000000000 --- a/code/modules/power/smes_presets.dm +++ /dev/null @@ -1,35 +0,0 @@ -/obj/machinery/power/smes/buildable/preset - var/_fully_charged = FALSE - var/_input_maxed = FALSE - var/_input_on = FALSE - var/_output_maxed = FALSE - var/_output_on = FALSE - -/obj/machinery/power/smes/buildable/preset/on_full - _fully_charged = TRUE - _input_maxed = TRUE - _input_on = TRUE - _output_maxed = TRUE - _output_on = TRUE - -/obj/machinery/power/smes/buildable/preset/Initialize() - . = ..() - if(_input_maxed) - input_level = input_level_max - if(_output_maxed) - output_level = output_level_max - input_attempt = _input_on - output_attempt = _output_on - if(_fully_charged) - charge = capacity - -/obj/machinery/power/smes/buildable/preset/admin - uncreated_component_parts = list( - /obj/item/stock_parts/smes_coil/advanced = 4 - ) - _input_maxed = TRUE - _output_maxed = TRUE - _input_on = TRUE - _output_on = TRUE - _fully_charged = TRUE - diff --git a/code/modules/power/solar.dm b/code/modules/power/solar.dm deleted file mode 100644 index 8a47d253f13a3..0000000000000 --- a/code/modules/power/solar.dm +++ /dev/null @@ -1,514 +0,0 @@ -#define SOLAR_MAX_DIST 40 - -var/global/solar_gen_rate = 1500 - -/obj/machinery/power/solar - name = "solar panel" - desc = "A solar electrical generator." - icon = 'icons/obj/power.dmi' - icon_state = "sp_base" - anchored = TRUE - density = TRUE - idle_power_usage = 0 - active_power_usage = 0 - var/id = 0 - var/health = 10 - var/obscured = 0 - var/sunfrac = 0 - var/efficiency = 1 - var/adir = SOUTH // actual dir - var/ndir = SOUTH // target dir - var/turn_angle = 0 - var/obj/machinery/power/solar_control/control = null - -/obj/machinery/power/solar/improved - name = "improved solar panel" - efficiency = 2 - -/obj/machinery/power/solar/drain_power() - return -1 - -/obj/machinery/power/solar/New(var/turf/loc, var/obj/item/solar_assembly/S) - ..(loc) - Make(S) - connect_to_network() - -/obj/machinery/power/solar/Destroy() - unset_control() //remove from control computer - ..() - -//set the control of the panel to a given computer if closer than SOLAR_MAX_DIST -/obj/machinery/power/solar/proc/set_control(var/obj/machinery/power/solar_control/SC) - if(SC && (get_dist(src, SC) > SOLAR_MAX_DIST)) - return 0 - control = SC - return 1 - -//set the control of the panel to null and removes it from the control list of the previous control computer if needed -/obj/machinery/power/solar/proc/unset_control() - if(control) - control.connected_panels.Remove(src) - control = null - -/obj/machinery/power/solar/proc/Make(var/obj/item/solar_assembly/S) - if(!S) - S = new /obj/item/solar_assembly(src) - S.glass_type = /obj/item/stack/material/glass - S.anchored = TRUE - S.forceMove(src) - if(S.glass_type == /obj/item/stack/material/glass/reinforced) //if the panel is in reinforced glass - health *= 2 //this need to be placed here, because panels already on the map don't have an assembly linked to - update_icon() - - - -/obj/machinery/power/solar/attackby(obj/item/W, mob/user) - - if(isCrowbar(W)) - playsound(src.loc, 'sound/machines/click.ogg', 50, 1) - user.visible_message("[user] begins to take the glass off the solar panel.") - if(do_after(user, 5 SECONDS, src, DO_PUBLIC_UNIQUE)) - var/obj/item/solar_assembly/S = locate() in src - if(S) - S.dropInto(loc) - S.give_glass() - playsound(src.loc, 'sound/items/Deconstruct.ogg', 50, 1) - user.visible_message("[user] takes the glass off the solar panel.") - qdel(src) - return - else if (W) - src.add_fingerprint(user) - src.health -= W.force - src.healthcheck() - ..() - -/obj/machinery/power/solar/proc/healthcheck() - if (src.health <= 0) - if(!(stat & BROKEN)) - set_broken(TRUE) - -/obj/machinery/power/solar/on_update_icon() - ..() - overlays.Cut() - if(stat & BROKEN) - overlays += image('icons/obj/power.dmi', icon_state = "solar_panel-b", layer = ABOVE_HUMAN_LAYER) - else - overlays += image('icons/obj/power.dmi', icon_state = "solar_panel", layer = ABOVE_HUMAN_LAYER) - src.set_dir(angle2dir(adir)) - return - -//calculates the fraction of the sunlight that the panel receives -/obj/machinery/power/solar/proc/update_solar_exposure() - if(obscured) - sunfrac = 0 - return - - //find the smaller angle between the direction the panel is facing and the direction of the sun (the sign is not important here) - var/p_angle = min(abs(adir - GLOB.sun_angle), 360 - abs(adir - GLOB.sun_angle)) - - if(p_angle > 90) // if facing more than 90deg from sun, zero output - sunfrac = 0 - return - - sunfrac = cos(p_angle) ** 2 - //isn't the power received from the incoming light proportional to cos(p_angle) (Lambert's cosine law) rather than cos(p_angle)^2 ? - -/obj/machinery/power/solar/Process() - if(stat & BROKEN) - return - if(!control) //if there's no sun or the panel is not linked to a solar control computer, no need to proceed - return - - if(powernet) - if(powernet == control.powernet)//check if the panel is still connected to the computer - if(obscured) //get no light from the sun, so don't generate power - return - var/sgen = solar_gen_rate * sunfrac * efficiency - add_avail(sgen) - control.gen += sgen - else //if we're no longer on the same powernet, remove from control computer - unset_control() - -/obj/machinery/power/solar/set_broken(new_state) - . = ..() - if(. && new_state) - health = 0 - new /obj/item/material/shard(src.loc) - new /obj/item/material/shard(src.loc) - var/obj/item/solar_assembly/S = locate() in src - S.glass_type = null - unset_control() - -/obj/machinery/power/solar/ex_act(severity) - switch(severity) - if(EX_ACT_DEVASTATING) - if(prob(15)) - new /obj/item/material/shard( src.loc ) - qdel(src) - return - - if(EX_ACT_HEAVY) - if (prob(25)) - new /obj/item/material/shard( src.loc ) - qdel(src) - return - - if (prob(50)) - set_broken(TRUE) - - if(EX_ACT_LIGHT) - if (prob(25)) - set_broken(TRUE) - return - - -/obj/machinery/power/solar/fake/New(var/turf/loc, var/obj/item/solar_assembly/S) - ..(loc, S, 0) - -/obj/machinery/power/solar/fake/Process() - return PROCESS_KILL - -//trace towards sun to see if we're in shadow -/obj/machinery/power/solar/proc/occlusion() - - var/steps = 20 // 20 steps is enough - var/ax = x // start at the solar panel - var/ay = y - var/turf/T = null - - // On planets, we take fewer steps because the light is mostly up - // Also, many planets barely have any spots with enough clear space around - if(GLOB.using_map.use_overmap) - var/obj/effect/overmap/visitable/sector/exoplanet/E = map_sectors["[z]"] - if(istype(E)) - steps = 5 - - for(var/i = 1 to steps) - ax += GLOB.sun_dx - ay += GLOB.sun_dy - - T = locate( round(ax,0.5),round(ay,0.5),z) - - if(!T || T.x == 1 || T.x==world.maxx || T.y==1 || T.y==world.maxy) // not obscured if we reach the edge - break - - if(T.opacity) // if we hit a solid turf, panel is obscured - obscured = 1 - return - - obscured = 0 // if hit the edge or stepped max times, not obscured - update_solar_exposure() - - -// -// Solar Assembly - For construction of solar arrays. -// - -/obj/item/solar_assembly - name = "solar panel assembly" - desc = "A solar panel assembly kit, allows constructions of a solar panel, or with a tracking circuit board, a solar tracker." - icon = 'icons/obj/power.dmi' - icon_state = "sp_base" - item_state = "electropack" - w_class = ITEM_SIZE_HUGE // Pretty big! - anchored = FALSE - var/tracker = 0 - var/glass_type = null - -/obj/item/solar_assembly/attack_hand(var/mob/user) - if(!anchored && isturf(loc)) // You can't pick it up - ..() - -// Give back the glass type we were supplied with -/obj/item/solar_assembly/proc/give_glass() - if(glass_type) - var/obj/item/stack/material/S = new glass_type(src.loc) - S.amount = 2 - glass_type = null - - -/obj/item/solar_assembly/attackby(var/obj/item/W, var/mob/user) - - if(!anchored && isturf(loc)) - if(isWrench(W)) - anchored = TRUE - pixel_x = 0 - pixel_y = 0 - pixel_z = 0 - user.visible_message("[user] wrenches the solar assembly into place.") - playsound(src.loc, 'sound/items/Ratchet.ogg', 75, 1) - return 1 - else - if(isWrench(W)) - anchored = FALSE - user.visible_message("[user] unwrenches the solar assembly from it's place.") - playsound(src.loc, 'sound/items/Ratchet.ogg', 75, 1) - return 1 - - if(istype(W, /obj/item/stack/material) && W.get_material_name() == MATERIAL_GLASS) - var/obj/item/stack/material/S = W - if(S.use(2)) - glass_type = W.type - playsound(src.loc, 'sound/machines/click.ogg', 50, 1) - user.visible_message("[user] places the glass on the solar assembly.") - if(tracker) - new /obj/machinery/power/tracker(get_turf(src), src) - else - new /obj/machinery/power/solar(get_turf(src), src) - else - to_chat(user, "You need two sheets of glass to put them into a solar panel.") - return - return 1 - - if(!tracker) - if(istype(W, /obj/item/tracker_electronics)) - tracker = 1 - qdel(W) - user.visible_message("[user] inserts the electronics into the solar assembly.") - return 1 - else - if(isCrowbar(W)) - new /obj/item/tracker_electronics(src.loc) - tracker = 0 - user.visible_message("[user] takes out the electronics from the solar assembly.") - return 1 - ..() - -// -// Solar Control Computer -// - -/obj/machinery/power/solar_control - name = "solar panel control" - desc = "A controller for solar panel arrays." - icon = 'icons/obj/computer.dmi' - icon_state = "solar" - anchored = TRUE - density = TRUE - use_power = POWER_USE_IDLE - idle_power_usage = 250 - construct_state = /decl/machine_construction/default/panel_closed/computer - base_type = /obj/machinery/power/solar_control - frame_type = /obj/machinery/constructable_frame/computerframe - machine_name = "solar control console" - machine_desc = "Tracks all solar devices connected on the same powernet, and allows the user to rotate them to track the sun." - var/id = 0 - var/cdir = 0 - var/targetdir = 0 // target angle in manual tracking (since it updates every game minute) - var/gen = 0 - var/lastgen = 0 - var/track = 0 // 0= off 1=timed 2=auto (tracker) - var/trackrate = 600 // 300-900 seconds - var/nexttime = 0 // time for a panel to rotate of 1° in manual tracking - var/obj/machinery/power/tracker/connected_tracker = null - var/list/connected_panels = list() - -/obj/machinery/power/solar_control/drain_power() - return -1 - -/obj/machinery/power/solar_control/Destroy() - for(var/obj/machinery/power/solar/M in connected_panels) - M.unset_control() - if(connected_tracker) - connected_tracker.unset_control() - ..() - -/obj/machinery/power/solar_control/disconnect_from_network() - ..() - GLOB.solar_controllers -= src - -/obj/machinery/power/solar_control/connect_to_network() - var/to_return = ..() - if(powernet) //if connected and not already in solar_list... - GLOB.solar_controllers |= src - return to_return - -//search for unconnected panels and trackers in the computer powernet and connect them -/obj/machinery/power/solar_control/proc/search_for_connected() - if(powernet) - for(var/obj/machinery/power/M in powernet.nodes) - if(istype(M, /obj/machinery/power/solar)) - var/obj/machinery/power/solar/S = M - if(!S.control) //i.e unconnected - if(S.set_control(src)) - connected_panels |= S - else if(istype(M, /obj/machinery/power/tracker)) - if(!connected_tracker) //if there's already a tracker connected to the computer don't add another - var/obj/machinery/power/tracker/T = M - if(!T.control) //i.e unconnected - if(T.set_control(src)) - connected_tracker = T - -//called by the sun controller, update the facing angle (either manually or via tracking) and rotates the panels accordingly -/obj/machinery/power/solar_control/proc/update() - if(stat & (NOPOWER | BROKEN)) - return - - switch(track) - if(1) - if(trackrate) //we're manual tracking. If we set a rotation speed... - cdir = targetdir //...the current direction is the targetted one (and rotates panels to it) - if(2) // auto-tracking - if(connected_tracker) - connected_tracker.set_angle(GLOB.sun_angle) - - set_panels(cdir) - updateDialog() - -/obj/machinery/power/solar_control/Initialize() - . = ..() - if(!connect_to_network()) return - set_panels(cdir) - -/obj/machinery/power/solar_control/on_update_icon() - if(stat & BROKEN) - icon_state = "broken" - overlays.Cut() - return - if(stat & NOPOWER) - icon_state = "c_unpowered" - overlays.Cut() - return - icon_state = "solar" - overlays.Cut() - if(cdir > -1) - overlays += image('icons/obj/computer.dmi', "solcon-o", ABOVE_OBJ_LAYER, angle2dir(cdir)) - return - -/obj/machinery/power/solar_control/interface_interact(mob/user) - interact(user) - return TRUE - -/obj/machinery/power/solar_control/interact(mob/user) - - var/t = "Generated power : [round(lastgen)] W
              " - t += "Star Orientation: [GLOB.sun_angle]° ([angle2text(GLOB.sun_angle)])
              " - t += "Array Orientation: [rate_control(src,"cdir","[cdir]°",1,15)] ([angle2text(cdir)])
              " - t += "Tracking:
              " - switch(track) - if(0) - t += "Off Timed Auto
              " - if(1) - t += "Off Timed Auto
              " - if(2) - t += "Off Timed Auto
              " - - t += "Tracking Rate: [rate_control(src,"tdir","[trackrate] deg/h ([trackrate<0 ? "CCW" : "CW"])",1,30,180)]

              " - - t += "Connected devices:
              " - - t += "Search for devices
              " - t += "Solar panels : [connected_panels.len] connected
              " - t += "Solar tracker : [connected_tracker ? "Found" : "Not found"]

              " - - t += "Close" - - var/datum/browser/popup = new(user, "solar", name) - popup.set_content(t) - popup.open() - -/obj/machinery/power/solar_control/Process() - lastgen = gen - gen = 0 - - if(stat & (NOPOWER | BROKEN)) - return - - if(connected_tracker) //NOTE : handled here so that we don't add trackers to the processing list - if(connected_tracker.powernet != powernet) - connected_tracker.unset_control() - - if(track==1 && trackrate) //manual tracking and set a rotation speed - if(nexttime <= world.time) //every time we need to increase/decrease the angle by 1°... - targetdir = (targetdir + trackrate/abs(trackrate) + 360) % 360 //... do it - nexttime += 36000/abs(trackrate) //reset the counter for the next 1° - - updateDialog() - -/obj/machinery/power/solar_control/Topic(href, href_list) - if(..()) - close_browser(usr, "window=solcon") - usr.unset_machine() - return 0 - if(href_list["close"] ) - close_browser(usr, "window=solcon") - usr.unset_machine() - return 0 - - if(href_list["rate control"]) - if(href_list["cdir"]) - src.cdir = dd_range(0,359,(360+src.cdir+text2num(href_list["cdir"]))%360) - src.targetdir = src.cdir - if(track == 2) //manual update, so losing auto-tracking - track = 0 - spawn(1) - set_panels(cdir) - if(href_list["tdir"]) - src.trackrate = dd_range(-7200,7200,src.trackrate+text2num(href_list["tdir"])) - if(src.trackrate) nexttime = world.time + 36000/abs(trackrate) - - if(href_list["track"]) - track = text2num(href_list["track"]) - if(track == 2) - if(connected_tracker) - connected_tracker.set_angle(GLOB.sun_angle) - set_panels(cdir) - else if (track == 1) //begin manual tracking - src.targetdir = src.cdir - if(src.trackrate) nexttime = world.time + 36000/abs(trackrate) - set_panels(targetdir) - - if(href_list["search_connected"]) - src.search_for_connected() - if(connected_tracker && track == 2) - connected_tracker.set_angle(GLOB.sun_angle) - src.set_panels(cdir) - - interact(usr) - return 1 - -//rotates the panel to the passed angle -/obj/machinery/power/solar_control/proc/set_panels(var/cdir) - for(var/obj/machinery/power/solar/S in connected_panels) - S.adir = cdir //instantly rotates the panel - S.occlusion()//and - S.update_icon() //update it - update_icon() - -/obj/machinery/power/solar_control/ex_act(severity) - switch(severity) - if(1.0) - //SN src = null - qdel(src) - return - if(2.0) - if (prob(50)) - set_broken(TRUE) - if(3.0) - if (prob(25)) - set_broken(TRUE) - -// Used for mapping in solar array which automatically starts itself (telecomms, for example) -/obj/machinery/power/solar_control/autostart - track = 2 // Auto tracking mode - -/obj/machinery/power/solar_control/autostart/Initialize() - search_for_connected() - if(connected_tracker && track == 2) - connected_tracker.set_angle(GLOB.sun_angle) - set_panels(cdir) - . = ..() - -// -// MISC -// - -/obj/item/paper/solar - name = "paper- 'Going green! Setup your own solar array instructions.'" - info = "

              Welcome

              At greencorps we love the environment, and space. With this package you are able to help mother nature and produce energy without any usage of fossil fuel or phoron! Singularity energy is dangerous while solar energy is safe, which is why it's better. Now here is how you setup your own solar array.

              You can make a solar panel by wrenching the solar assembly onto a cable node. Adding a glass panel, reinforced or regular glass will do, will finish the construction of your solar panel. It is that easy!

              Now after setting up 19 more of these solar panels you will want to create a solar tracker to keep track of our mother nature's gift, the sun. These are the same steps as before except you insert the tracker equipment circuit into the assembly before performing the final step of adding the glass. You now have a tracker! Now the last step is to add a computer to calculate the sun's movements and to send commands to the solar panels to change direction with the sun. Setting up the solar computer is the same as setting up any computer, so you should have no trouble in doing that. You do need to put a wire node under the computer, and the wire needs to be connected to the tracker.

              Congratulations, you should have a working solar array. If you are having trouble, here are some tips. Make sure all solar equipment are on a cable node, even the computer. You can always deconstruct your creations if you make a mistake.

              That's all to it, be safe, be green!

              " - -/proc/rate_control(var/S, var/V, var/C, var/Min=1, var/Max=5, var/Limit=null) //How not to name vars - var/href = "-[href]=-[Min]'>- [(C?C : 0)] [href]=[Min]'>+[href]=[Max]'>+" - if(Limit) return "[href]=-[Limit]'>-"+rate+"[href]=[Limit]'>+" - return rate diff --git a/code/modules/power/terminal.dm b/code/modules/power/terminal.dm deleted file mode 100644 index 5897918bcac0e..0000000000000 --- a/code/modules/power/terminal.dm +++ /dev/null @@ -1,42 +0,0 @@ -// the underfloor wiring terminal for the APC -// autogenerated when an APC is placed -// all conduit connects go to this object instead of the APC -// using this solves the problem of having the APC in a wall yet also inside an area - -/obj/machinery/power/terminal - name = "terminal" - icon_state = "term" - desc = "It's an underfloor wiring terminal for power equipment." - level = 1 - layer = EXPOSED_WIRE_TERMINAL_LAYER - var/obj/item/stock_parts/power/terminal/master - anchored = TRUE - -/obj/machinery/power/terminal/New() - ..() - var/turf/T = src.loc - if(level==1) hide(!T.is_plating()) - return - -/obj/machinery/power/terminal/proc/master_machine() - var/obj/machinery/machine = master && master.loc - if(istype(machine)) - return machine - -/obj/machinery/power/terminal/hide(var/do_hide) - if(do_hide && level == 1) - layer = WIRE_TERMINAL_LAYER - else - reset_plane_and_layer() - -/obj/machinery/power/terminal/connect_to_network() - . = ..() - var/obj/machinery/machine = master_machine() - if(machine) - machine.power_change() - -/obj/machinery/power/terminal/disconnect_from_network() - . = ..() - var/obj/machinery/machine = master_machine() - if(machine) - machine.power_change() diff --git a/code/modules/power/tracker.dm b/code/modules/power/tracker.dm deleted file mode 100644 index e4fa0dfc048a9..0000000000000 --- a/code/modules/power/tracker.dm +++ /dev/null @@ -1,82 +0,0 @@ -//Solar tracker - -//Machine that tracks the sun and reports it's direction to the solar controllers -//As long as this is working, solar panels on same powernet will track automatically - -/obj/machinery/power/tracker - name = "solar tracker" - desc = "A solar directional tracker." - icon = 'icons/obj/power.dmi' - icon_state = "tracker" - anchored = TRUE - density = TRUE - - var/id = 0 - var/sun_angle = 0 // sun angle as set by sun datum - var/obj/machinery/power/solar_control/control = null - -/obj/machinery/power/tracker/New(var/turf/loc, var/obj/item/solar_assembly/S) - ..(loc) - Make(S) - connect_to_network() - -/obj/machinery/power/tracker/Destroy() - unset_control() //remove from control computer - ..() - -//set the control of the tracker to a given computer if closer than SOLAR_MAX_DIST -/obj/machinery/power/tracker/proc/set_control(var/obj/machinery/power/solar_control/SC) - if(SC && (get_dist(src, SC) > SOLAR_MAX_DIST)) - return 0 - control = SC - return 1 - -//set the control of the tracker to null and removes it from the previous control computer if needed -/obj/machinery/power/tracker/proc/unset_control() - if(control) - control.connected_tracker = null - control = null - -/obj/machinery/power/tracker/proc/Make(var/obj/item/solar_assembly/S) - if(!S) - S = new /obj/item/solar_assembly(src) - S.glass_type = /obj/item/stack/material/glass - S.tracker = 1 - S.anchored = TRUE - S.forceMove(src) - update_icon() - -//updates the tracker icon and the facing angle for the control computer -/obj/machinery/power/tracker/proc/set_angle(var/angle) - sun_angle = angle - - //set icon dir to show sun illumination - set_dir(turn(NORTH, -angle - 22.5)) // 22.5 deg bias ensures, e.g. 67.5-112.5 is EAST - - if(powernet && (powernet == control.powernet)) //update if we're still in the same powernet - control.cdir = angle - -/obj/machinery/power/tracker/attackby(var/obj/item/W, var/mob/user) - - if(isCrowbar(W)) - playsound(src.loc, 'sound/machines/click.ogg', 50, 1) - user.visible_message("[user] begins to take the glass off the solar tracker.") - if(do_after(user, 5 SECONDS, src, DO_PUBLIC_UNIQUE)) - var/obj/item/solar_assembly/S = locate() in src - if(S) - S.dropInto(loc) - S.give_glass() - playsound(src.loc, 'sound/items/Deconstruct.ogg', 50, 1) - user.visible_message("[user] takes the glass off the tracker.") - qdel(src) - return - ..() - -// Tracker Electronic - -/obj/item/tracker_electronics - - name = "tracker electronics" - icon = 'icons/obj/doors/door_assembly.dmi' - icon_state = "door_electronics" - w_class = ITEM_SIZE_SMALL diff --git a/code/modules/power/turbine.dm b/code/modules/power/turbine.dm deleted file mode 100644 index 4c803fa682f6a..0000000000000 --- a/code/modules/power/turbine.dm +++ /dev/null @@ -1,266 +0,0 @@ -/obj/machinery/compressor - name = "compressor" - desc = "The compressor stage of a gas turbine generator." - icon = 'icons/obj/pipes.dmi' - icon_state = "compressor" - anchored = TRUE - density = TRUE - machine_name = "turbine control console" - machine_desc = "Used to monitor, operate, and configure a connected gas turbine." - var/obj/machinery/power/turbine/turbine - var/datum/gas_mixture/gas_contained - var/turf/simulated/inturf - var/starter = 0 - var/rpm = 0 - var/rpmtarget = 0 - var/capacity = 1e6 - var/comp_id = 0 - -/obj/machinery/power/turbine - name = "gas turbine generator" - desc = "A gas turbine used for backup power generation." - icon = 'icons/obj/pipes.dmi' - icon_state = "turbine" - anchored = TRUE - density = TRUE - var/obj/machinery/compressor/compressor - var/turf/simulated/outturf - var/lastgen - -/obj/machinery/computer/turbine_computer - name = "Gas turbine control computer" - desc = "A computer to remotely control a gas turbine." - icon = 'icons/obj/computer.dmi' - icon_keyboard = "tech_key" - icon_screen = "turbinecomp" - anchored = TRUE - density = TRUE - var/obj/machinery/compressor/compressor - var/list/obj/machinery/door/blast/doors - var/door_status = 0 - -// the inlet stage of the gas turbine electricity generator - -/obj/machinery/compressor/Initialize() - . = ..() - gas_contained = new - inturf = get_step(src, dir) - turbine = locate() in get_step(src, get_dir(inturf, src)) - if(!turbine) - set_broken(TRUE) - else - turbine.compressor = src - -/obj/machinery/compressor/Destroy() - if(turbine) - turbine.compressor = null - turbine.set_broken(TRUE) - turbine = null - QDEL_NULL(gas_contained) - return ..() - -#define COMPFRICTION 5e5 -#define COMPSTARTERLOAD 2800 - -/obj/machinery/compressor/Process() - if(!starter) - return - overlays.Cut() - if(stat & BROKEN) - return - rpm = 0.9* rpm + 0.1 * rpmtarget - var/datum/gas_mixture/environment = inturf.return_air() - var/transfer_moles = environment.total_moles / 10 - //var/transfer_moles = rpm/10000*capacity - var/datum/gas_mixture/removed = inturf.remove_air(transfer_moles) - gas_contained.merge(removed) - - rpm = max(0, rpm - (rpm*rpm)/COMPFRICTION) - - - if(starter && !(stat & NOPOWER)) - use_power_oneoff(2800) - if(rpm<1000) - rpmtarget = 1000 - else - if(rpm<1000) - rpmtarget = 0 - - - - if(rpm>50000) - overlays += image('icons/obj/pipes.dmi', "comp-o4", FLY_LAYER) - else if(rpm>10000) - overlays += image('icons/obj/pipes.dmi', "comp-o3", FLY_LAYER) - else if(rpm>2000) - overlays += image('icons/obj/pipes.dmi', "comp-o2", FLY_LAYER) - else if(rpm>500) - overlays += image('icons/obj/pipes.dmi', "comp-o1", FLY_LAYER) - //TODO: DEFERRED - -/obj/machinery/power/turbine/Initialize() - ..() - outturf = get_step(src, dir) - return INITIALIZE_HINT_LATELOAD - -/obj/machinery/power/turbine/LateInitialize() - ..() - if(!compressor) // It should have found us and subscribed. - set_broken(TRUE) - -/obj/machinery/power/turbine/Destroy() - if(compressor) - compressor.turbine = null - compressor.set_broken(TRUE) - compressor = null - return ..() - -#define TURBPRES 9000000 -#define TURBGENQ 20000 -#define TURBGENG 0.8 - -/obj/machinery/power/turbine/Process() - if(!compressor.starter) - return - overlays.Cut() - if(stat & BROKEN) - return - lastgen = ((compressor.rpm / TURBGENQ)**TURBGENG) *TURBGENQ - - add_avail(lastgen) - var/newrpm = ((compressor.gas_contained.temperature) * compressor.gas_contained.total_moles)/4 - newrpm = max(0, newrpm) - - if(!compressor.starter || newrpm > 1000) - compressor.rpmtarget = newrpm - - if(compressor.gas_contained.total_moles>0) - var/oamount = min(compressor.gas_contained.total_moles, (compressor.rpm+100)/35000*compressor.capacity) - var/datum/gas_mixture/removed = compressor.gas_contained.remove(oamount) - outturf.assume_air(removed) - - if(lastgen > 100) - overlays += image('icons/obj/pipes.dmi', "turb-o", FLY_LAYER) - - - for(var/mob/M in viewers(1, src)) - if ((M.client && M.machine == src)) - src.interact(M) - AutoUpdateAI(src) - -/obj/machinery/power/turbine/interact(mob/user) - - if ( (get_dist(src, user) > 1 ) || (stat & (NOPOWER|BROKEN)) && (!istype(user, /mob/living/silicon/ai)) ) - user.machine = null - close_browser(user, "window=turbine") - return - - user.machine = src - - var/t = "Gas Turbine Generator
              "
              -
              -	t += "Generated power : [round(lastgen)] W

              " - - t += "Turbine: [round(compressor.rpm)] RPM
              " - - t += "Starter: [ compressor.starter ? "Off On" : "Off On"]" - - t += "

              Close" - - t += "
              " - show_browser(user, t, "window=turbine") - onclose(user, "turbine") - - return - -/obj/machinery/power/turbine/CanUseTopic(var/mob/user, href_list) - if(!user.IsAdvancedToolUser()) - to_chat(user, FEEDBACK_YOU_LACK_DEXTERITY) - return min(..(), STATUS_UPDATE) - return ..() - -/obj/machinery/power/turbine/OnTopic(user, href_list) - if(href_list["close"]) - close_browser(usr, "window=turbine") - return TOPIC_HANDLED - - if(href_list["str"]) - compressor.starter = !compressor.starter - . = TOPIC_REFRESH - - if(. == TOPIC_REFRESH) - interact(user) - - -///////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -///////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - - - -/obj/machinery/computer/turbine_computer/Initialize() - . = ..() - for(var/obj/machinery/compressor/C in SSmachines.machinery) - if(id_tag == C.comp_id) - compressor = C - doors = new /list() - for(var/obj/machinery/door/blast/P in SSmachines.machinery) - if(P.id_tag == id_tag) - doors += P - -/obj/machinery/computer/turbine_computer/Destroy() - doors.Cut() - compressor = null - return ..() - -/obj/machinery/computer/turbine_computer/interface_interact(mob/user) - interact(user) - return TRUE - -/obj/machinery/computer/turbine_computer/interact(var/mob/user) - user.machine = src - var/dat - if(src.compressor) - dat += {"
              Gas turbine remote control system
              - \nTurbine status: [ src.compressor.starter ? "Off On" : "Off On"] - \n
              - \nTurbine speed: [src.compressor.rpm]rpm
              - \nPower currently being generated: [src.compressor.turbine.lastgen]W
              - \nInternal gas temperature: [src.compressor.gas_contained.temperature]K
              - \nVent doors: [ src.door_status ? "Closed Open" : "Closed Open"] - \n
              View - \n
              Close - \n
              - \n"} - else - dat += "No compatible attached compressor found." - - show_browser(user, dat, "window=computer;size=400x500") - onclose(user, "computer") - return - - - -/obj/machinery/computer/turbine_computer/OnTopic(user, href_list) - if( href_list["view"] ) - usr.client.eye = src.compressor - . = TOPIC_HANDLED - else if( href_list["str"] ) - src.compressor.starter = !src.compressor.starter - . = TOPIC_REFRESH - else if (href_list["doors"]) - for(var/obj/machinery/door/blast/D in src.doors) - if (door_status == 0) - spawn( 0 ) - D.open() - door_status = 1 - else - spawn( 0 ) - D.close() - door_status = 0 - . = TOPIC_REFRESH - else if( href_list["close"] ) - close_browser(user, "window=computer") - return TOPIC_HANDLED - - if(. == TOPIC_REFRESH) - interact(user) diff --git a/code/modules/projectiles/ammunition.dm b/code/modules/projectiles/ammunition.dm deleted file mode 100644 index b7c6dfc964475..0000000000000 --- a/code/modules/projectiles/ammunition.dm +++ /dev/null @@ -1,219 +0,0 @@ -/obj/item/ammo_casing - name = "bullet casing" - desc = "A bullet casing." - icon = 'icons/obj/ammo.dmi' - icon_state = "pistolcasing" - randpixel = 10 - obj_flags = OBJ_FLAG_CONDUCTIBLE - slot_flags = SLOT_BELT | SLOT_EARS - throwforce = 1 - w_class = ITEM_SIZE_TINY - - var/leaves_residue = TRUE - var/caliber = "" //Which kind of guns it can be loaded into - var/projectile_type //The bullet type to create when New() is called - var/obj/item/projectile/BB = null //The loaded bullet - make it so that the projectiles are created only when needed? - var/spent_icon = "pistolcasing-spent" - var/fall_sounds = list('sound/weapons/guns/casingfall1.ogg','sound/weapons/guns/casingfall2.ogg','sound/weapons/guns/casingfall3.ogg') - -/obj/item/ammo_casing/Initialize() - if(ispath(projectile_type)) - BB = new projectile_type(src) - if(randpixel) - pixel_x = rand(-randpixel, randpixel) - pixel_y = rand(-randpixel, randpixel) - . = ..() - -//removes the projectile from the ammo casing -/obj/item/ammo_casing/proc/expend() - . = BB - BB = null - set_dir(pick(GLOB.alldirs)) //spin spent casings - - // Aurora forensics port, gunpowder residue. - if(leaves_residue) - leave_residue() - - update_icon() - -/obj/item/ammo_casing/proc/leave_residue() - var/mob/living/carbon/human/H = get_holder_of_type(src, /mob/living/carbon/human) - var/obj/item/gun/G = get_holder_of_type(src, /obj/item/gun) - put_residue_on(G) - if(H) - var/zone - if(H.l_hand == G) - zone = BP_L_HAND - else if(H.r_hand == G) - zone = BP_R_HAND - if(zone) - var/target = H.get_covering_equipped_item_by_zone(zone) - if(!target) - target = H.get_organ(zone) - put_residue_on(target) - if(prob(30)) - put_residue_on(get_turf(src)) - -/obj/item/ammo_casing/proc/put_residue_on(atom/A) - if(A) - LAZYDISTINCTADD(A.gunshot_residue, caliber) - -/obj/item/ammo_casing/attackby(obj/item/W as obj, mob/user as mob) - if(isScrewdriver(W)) - if(!BB) - to_chat(user, "There is no bullet in the casing to inscribe anything into.") - return - - var/tmp_label = "" - var/label_text = sanitizeSafe(input(user, "Inscribe some text into \the [initial(BB.name)]","Inscription",tmp_label), MAX_NAME_LEN) - if(length(label_text) > 20) - to_chat(user, "The inscription can be at most 20 characters long.") - else if(!label_text) - to_chat(user, "You scratch the inscription off of [initial(BB)].") - BB.SetName(initial(BB.name)) - else - to_chat(user, "You inscribe \"[label_text]\" into \the [initial(BB.name)].") - BB.SetName("[initial(BB.name)] (\"[label_text]\")") - else ..() - -/obj/item/ammo_casing/on_update_icon() - if(spent_icon && !BB) - icon_state = spent_icon - -/obj/item/ammo_casing/examine(mob/user) - . = ..() - if(caliber) - to_chat(user, "Its caliber is [caliber].") - if (!BB) - to_chat(user, "This one is spent.") - -//An item that holds casings and can be used to put them inside guns -/obj/item/ammo_magazine - name = "magazine" - desc = "A magazine for some kind of gun." - icon_state = "357" - icon = 'icons/obj/ammo.dmi' - obj_flags = OBJ_FLAG_CONDUCTIBLE - slot_flags = SLOT_BELT - item_state = "syringe_kit" - matter = list(MATERIAL_STEEL = 500) - throwforce = 5 - w_class = ITEM_SIZE_SMALL - throw_speed = 4 - throw_range = 10 - - var/list/stored_ammo = list() - var/mag_type = SPEEDLOADER //ammo_magazines can only be used with compatible guns. This is not a bitflag, the load_method var on guns is. - var/caliber = "357" - var/max_ammo = 7 - - var/ammo_type = /obj/item/ammo_casing //ammo type that is initially loaded - var/initial_ammo = null - - var/multiple_sprites = 0 - var/list/labels //If something should be added to name on spawn aside from caliber - //because BYOND doesn't support numbers as keys in associative lists - var/list/icon_keys = list() //keys - var/list/ammo_states = list() //values - -/obj/item/ammo_magazine/box - w_class = ITEM_SIZE_NORMAL - -/obj/item/ammo_magazine/Initialize() - . = ..() - if(multiple_sprites) - initialize_magazine_icondata(src) - - if(isnull(initial_ammo)) - initial_ammo = max_ammo - - if(initial_ammo) - for(var/i in 1 to initial_ammo) - stored_ammo += new ammo_type(src) - if(caliber) - LAZYINSERT(labels, caliber, 1) - if(LAZYLEN(labels)) - SetName("[name] ([english_list(labels, and_text = ", ")])") - update_icon() - -/obj/item/ammo_magazine/attackby(obj/item/W as obj, mob/user as mob) - if(istype(W, /obj/item/ammo_casing)) - var/obj/item/ammo_casing/C = W - if(C.caliber != caliber) - to_chat(user, "[C] does not fit into [src].") - return - if(stored_ammo.len >= max_ammo) - to_chat(user, "[src] is full!") - return - if(!user.unEquip(C, src)) - return - stored_ammo.Add(C) - update_icon() - else ..() - -/obj/item/ammo_magazine/attack_self(mob/user) - if(!stored_ammo.len) - to_chat(user, "[src] is already empty!") - return - to_chat(user, "You empty [src].") - for(var/obj/item/ammo_casing/C in stored_ammo) - C.forceMove(user.loc) - C.set_dir(pick(GLOB.alldirs)) - stored_ammo.Cut() - update_icon() - - -/obj/item/ammo_magazine/attack_hand(mob/user) - if(user.get_inactive_hand() == src) - if(!stored_ammo.len) - to_chat(user, "[src] is already empty!") - else - var/obj/item/ammo_casing/C = stored_ammo[stored_ammo.len] - stored_ammo-=C - user.put_in_hands(C) - user.visible_message("\The [user] removes \a [C] from [src].", "You remove \a [C] from [src].") - update_icon() - else - ..() - return - -/obj/item/ammo_magazine/on_update_icon() - if(multiple_sprites) - //find the lowest key greater than or equal to stored_ammo.len - var/new_state = null - for(var/idx in 1 to icon_keys.len) - var/ammo_count = icon_keys[idx] - if (ammo_count >= stored_ammo.len) - new_state = ammo_states[idx] - break - icon_state = (new_state)? new_state : initial(icon_state) - -/obj/item/ammo_magazine/examine(mob/user) - . = ..() - to_chat(user, "There [(stored_ammo.len == 1)? "is" : "are"] [stored_ammo.len] round\s left!") - -//magazine icon state caching -var/global/list/magazine_icondata_keys = list() -var/global/list/magazine_icondata_states = list() - -/proc/initialize_magazine_icondata(var/obj/item/ammo_magazine/M) - var/typestr = "[M.type]" - if(!(typestr in magazine_icondata_keys) || !(typestr in magazine_icondata_states)) - magazine_icondata_cache_add(M) - - M.icon_keys = magazine_icondata_keys[typestr] - M.ammo_states = magazine_icondata_states[typestr] - -/proc/magazine_icondata_cache_add(var/obj/item/ammo_magazine/M) - var/list/icon_keys = list() - var/list/ammo_states = list() - var/list/states = icon_states(M.icon) - for(var/i = 0, i <= M.max_ammo, i++) - var/ammo_state = "[M.icon_state]-[i]" - if(ammo_state in states) - icon_keys += i - ammo_states += ammo_state - - magazine_icondata_keys["[M.type]"] = icon_keys - magazine_icondata_states["[M.type]"] = ammo_states - diff --git a/code/modules/projectiles/ammunition/boxes.dm b/code/modules/projectiles/ammunition/boxes.dm deleted file mode 100644 index f50d7448f6b98..0000000000000 --- a/code/modules/projectiles/ammunition/boxes.dm +++ /dev/null @@ -1,360 +0,0 @@ -/obj/item/ammo_magazine/speedloader - name = "speed loader" - desc = "A speed loader for revolvers." - icon_state = "spdloader" - caliber = CALIBER_PISTOL - ammo_type = /obj/item/ammo_casing/pistol - matter = list(MATERIAL_STEEL = 1260) - max_ammo = 6 - multiple_sprites = 1 - -/obj/item/ammo_magazine/speedloader/rubber - labels = list("rubber") - ammo_type = /obj/item/ammo_casing/pistol/rubber - -/obj/item/ammo_magazine/speedloader/magnum - icon_state = "spdloader_magnum" - caliber = CALIBER_PISTOL_MAGNUM - ammo_type = /obj/item/ammo_casing/pistol/magnum - matter = list(MATERIAL_STEEL = 1440) - max_ammo = 6 - multiple_sprites = 1 - -/obj/item/ammo_magazine/speedloader/magnum/rubber - ammo_type = /obj/item/ammo_casing/pistol/magnum/rubber - -/obj/item/ammo_magazine/speedloader/small - name = "speed loader" - icon_state = "spdloader_small" - caliber = CALIBER_PISTOL_SMALL - ammo_type = /obj/item/ammo_casing/pistol/small - matter = list(MATERIAL_STEEL = 1060) - max_ammo = 6 - multiple_sprites = 1 - -/obj/item/ammo_magazine/speedloader/small/rubber - ammo_type = /obj/item/ammo_casing/pistol/small/rubber - -/obj/item/ammo_magazine/speedloader/pclip - name = "magnum pistol stripper clip" - desc = "A stripper clip for pistol magnum caliber weapons." - icon_state = "pclip" - caliber = CALIBER_PISTOL_MAGNUM - ammo_type = /obj/item/ammo_casing/pistol/magnum - matter = list(MATERIAL_STEEL = 1300) - max_ammo = 5 - multiple_sprites = 1 - -/obj/item/ammo_magazine/speedloader/hpclip - name = "holdout pistol stripper clip" - desc = "A stripper clip for pistol holdout caliber weapons." - icon_state = "hpclip" - caliber = CALIBER_PISTOL_SMALL - ammo_type = /obj/item/ammo_casing/pistol/small - matter = list(MATERIAL_STEEL = 1800) - max_ammo = 10 - multiple_sprites = TRUE - -/obj/item/ammo_magazine/speedloader/clip - name = "rifle stripper clip" - desc = "A stripper clip for rifle caliber weapons." - icon_state = "clip" - caliber = CALIBER_RIFLE - ammo_type = /obj/item/ammo_casing/rifle - matter = list(MATERIAL_STEEL = 1800) - max_ammo = 5 - multiple_sprites = 1 - -/obj/item/ammo_magazine/shotholder - name = "shotgun slug holder" - desc = "A convenient pouch that holds 12 gauge shells." - icon_state = "shotholder" - caliber = CALIBER_SHOTGUN - ammo_type = /obj/item/ammo_casing/shotgun - matter = list(MATERIAL_STEEL = 1440) - max_ammo = 4 - multiple_sprites = 1 - var/marking_color - -/obj/item/ammo_magazine/shotholder/on_update_icon() - ..() - overlays.Cut() - if(marking_color) - var/image/I = image(icon, "shotholder-marking") - I.color = marking_color - overlays += I - -/obj/item/ammo_magazine/shotholder/attack_hand(mob/user) - if((user.a_intent == I_HURT) && (stored_ammo.len)) - var/obj/item/ammo_casing/C = stored_ammo[stored_ammo.len] - stored_ammo-=C - user.put_in_hands(C) - user.visible_message("\The [user] removes \a [C] from [src].", "You remove \a [C] from [src].") - update_icon() - else - ..() - -/obj/item/ammo_magazine/shotholder/shell - name = "shotgun shell holder" - ammo_type = /obj/item/ammo_casing/shotgun/pellet - marking_color = COLOR_RED_GRAY - -/obj/item/ammo_magazine/shotholder/flechette - name = "flechette shell holder" - ammo_type = /obj/item/ammo_casing/shotgun/flechette - marking_color = COLOR_BLUE - -/obj/item/ammo_magazine/shotholder/beanbag - name = "beanbag shell holder" - ammo_type = /obj/item/ammo_casing/shotgun/beanbag - matter = list(MATERIAL_STEEL = 720) - marking_color = COLOR_PAKISTAN_GREEN - -/obj/item/ammo_magazine/shotholder/flash - name = "illumination shell holder" - ammo_type = /obj/item/ammo_casing/shotgun/flash - matter = list(MATERIAL_STEEL = 360, MATERIAL_GLASS = 360) - marking_color = COLOR_PALE_YELLOW - -/obj/item/ammo_magazine/shotholder/stun - name = "stun shell holder" - ammo_type = /obj/item/ammo_casing/shotgun/stunshell - matter = list(MATERIAL_STEEL = 1440, MATERIAL_GLASS = 2880) - marking_color = COLOR_MUZZLE_FLASH - -/obj/item/ammo_magazine/shotholder/empty - name = "shotgun ammunition holder" - matter = list(MATERIAL_STEEL = 250) - initial_ammo = 0 - -/obj/item/ammo_magazine/machine_pistol - name = "stick magazine" - icon_state = "machine_pistol" - mag_type = MAGAZINE - ammo_type = /obj/item/ammo_casing/pistol - matter = list(MATERIAL_STEEL = 1200) - caliber = CALIBER_PISTOL - max_ammo = 16 - multiple_sprites = 1 - -/obj/item/ammo_magazine/machine_pistol/empty - initial_ammo = 0 - -/obj/item/ammo_magazine/smg_top - name = "top mounted magazine" - icon_state = "smg_top" - mag_type = MAGAZINE - ammo_type = /obj/item/ammo_casing/pistol/small - matter = list(MATERIAL_STEEL = 1200) - caliber = CALIBER_PISTOL_SMALL - max_ammo = 20 - multiple_sprites = 1 - -/obj/item/ammo_magazine/smg_top/empty - initial_ammo = 0 - -/obj/item/ammo_magazine/smg_top/rubber - labels = list("rubber") - ammo_type = /obj/item/ammo_casing/pistol/small/rubber - -/obj/item/ammo_magazine/smg_top/practice - labels = list("practice") - ammo_type = /obj/item/ammo_casing/pistol/small/practice - -/obj/item/ammo_magazine/smg - name = "box magazine" - icon_state = "smg" - origin_tech = list(TECH_COMBAT = 2) - mag_type = MAGAZINE - caliber = CALIBER_PISTOL - matter = list(MATERIAL_STEEL = 1500) - ammo_type = /obj/item/ammo_casing/pistol - max_ammo = 20 - multiple_sprites = 1 - -/obj/item/ammo_magazine/smg/empty - initial_ammo = 0 - -/obj/item/ammo_magazine/pistol - name = "pistol magazine" - icon_state = "pistol_mag" - origin_tech = list(TECH_COMBAT = 2) - mag_type = MAGAZINE - caliber = CALIBER_PISTOL - matter = list(MATERIAL_STEEL = 750) - ammo_type = /obj/item/ammo_casing/pistol - max_ammo = 10 - multiple_sprites = 1 - -/obj/item/ammo_magazine/pistol/empty - initial_ammo = 0 - -/obj/item/ammo_magazine/pistol/rubber - labels = list("rubber") - ammo_type = /obj/item/ammo_casing/pistol/rubber - -/obj/item/ammo_magazine/pistol/double - name = "doublestack pistol magazine" - icon_state = "pistol_mag" - matter = list(MATERIAL_STEEL = 1050) - max_ammo = 15 - -/obj/item/ammo_magazine/pistol/double/rubber - labels = list("rubber") - ammo_type = /obj/item/ammo_casing/pistol/rubber - -/obj/item/ammo_magazine/pistol/double/practice - labels = list("practice") - ammo_type = /obj/item/ammo_casing/pistol/practice - -/obj/item/ammo_magazine/pistol/small - icon_state = "holdout" - matter = list(MATERIAL_STEEL = 480) - caliber = CALIBER_PISTOL_SMALL - ammo_type = /obj/item/ammo_casing/pistol/small - max_ammo = 8 - -/obj/item/ammo_magazine/pistol/small/empty - initial_ammo = 0 - -/obj/item/ammo_magazine/magnum - name = "magazine" - icon_state = "magnum" - origin_tech = list(TECH_COMBAT = 2) - mag_type = MAGAZINE - caliber = CALIBER_PISTOL_MAGNUM - matter = list(MATERIAL_STEEL = 1680) - ammo_type = /obj/item/ammo_casing/pistol/magnum - max_ammo = 7 - multiple_sprites = 1 - -/obj/item/ammo_magazine/magnum/empty - initial_ammo = 0 - -/obj/item/ammo_magazine/box/smallpistol - name = "ammunition box" - icon_state = "smallpistol" - origin_tech = list(TECH_COMBAT = 2) - matter = list(MATERIAL_STEEL = 1800) - caliber = CALIBER_PISTOL_SMALL - ammo_type = /obj/item/ammo_casing/pistol/small - max_ammo = 30 - -/obj/item/ammo_magazine/box/pistol - name = "ammunition box" - icon_state = "smallpistol" - origin_tech = list(TECH_COMBAT = 2) - caliber = CALIBER_PISTOL - matter = list(MATERIAL_STEEL = 2250) - ammo_type = /obj/item/ammo_casing/pistol - max_ammo = 30 - -/obj/item/ammo_magazine/box/pistol/empty - initial_ammo = 0 - -/obj/item/ammo_magazine/pistol/throwback - name = "pistol magazine" - caliber = CALIBER_PISTOL_ANTIQUE - ammo_type = /obj/item/ammo_casing/pistol/throwback - -/obj/item/ammo_magazine/box/emp/pistol - name = "ammunition box" - desc = "A box containing loose rounds of standard EMP ammo." - labels = list("haywire") - ammo_type = /obj/item/ammo_casing/pistol/emp - caliber = CALIBER_PISTOL - max_ammo = 15 - -/obj/item/ammo_magazine/box/emp/smallpistol - name = "ammunition box" - desc = "A box containing loose rounds of small EMP ammo." - labels = list("haywire") - ammo_type = /obj/item/ammo_casing/pistol/small/emp - caliber = CALIBER_PISTOL_SMALL - max_ammo = 8 - -/obj/item/ammo_magazine/proto_smg - name = "submachine gun magazine" - icon_state = CALIBER_PISTOL_FLECHETTE - origin_tech = list(TECH_COMBAT = 4) - mag_type = MAGAZINE - caliber = CALIBER_PISTOL_FLECHETTE - matter = list(MATERIAL_STEEL = 2000) - ammo_type = /obj/item/ammo_casing/flechette - max_ammo = 40 - multiple_sprites = 1 - -/obj/item/ammo_magazine/gyrojet - name = "microrocket magazine" - icon_state = "gyrojet" - mag_type = MAGAZINE - caliber = CALIBER_GYROJET - ammo_type = /obj/item/ammo_casing/gyrojet - multiple_sprites = 1 - max_ammo = 4 - -/obj/item/ammo_magazine/gyrojet/empty - initial_ammo = 0 - -/obj/item/ammo_magazine/box/machinegun - name = "magazine box" - icon_state = "machinegun" - origin_tech = list(TECH_COMBAT = 2) - mag_type = MAGAZINE - caliber = CALIBER_RIFLE - matter = list(MATERIAL_STEEL = 4500) - ammo_type = /obj/item/ammo_casing/rifle - max_ammo = 80 - multiple_sprites = 1 - -/obj/item/ammo_magazine/box/machinegun/empty - initial_ammo = 0 - -/obj/item/ammo_magazine/rifle - name = "assault rifle magazine" - icon_state = "assault_rifle" - mag_type = MAGAZINE - caliber = CALIBER_RIFLE - matter = list(MATERIAL_STEEL = 1800) - ammo_type = /obj/item/ammo_casing/rifle - max_ammo = 40 - multiple_sprites = 1 - -/obj/item/ammo_magazine/mil_rifle - name = "assault rifle magazine" - icon_state = "bullup" - origin_tech = list(TECH_COMBAT = 2) - mag_type = MAGAZINE - caliber = CALIBER_RIFLE_MILITARY - matter = list(MATERIAL_STEEL = 1800) - ammo_type = /obj/item/ammo_casing/rifle/military - max_ammo = 30 //if we lived in a world where normal mags had 30 rounds, this would be a 20 round mag - multiple_sprites = 1 - -/obj/item/ammo_magazine/mil_rifle/empty - initial_ammo = 0 - -/obj/item/ammo_magazine/mil_rifle/practice - labels = list("practice") - ammo_type = /obj/item/ammo_casing/rifle/military/practice - -/obj/item/ammo_magazine/caps - name = "speed loader" - desc = "A cheap plastic speed loader for some kind of revolver." - icon_state = "T38" - caliber = CALIBER_CAPS - ammo_type = /obj/item/ammo_casing/cap - matter = list(MATERIAL_STEEL = 600) - max_ammo = 7 - multiple_sprites = 1 - -/obj/item/ammo_magazine/iclipr - name = "internal rifle magazine" - desc = "An internal clip for rifle caliber weapons." - icon_state = "iclipr" - caliber = CALIBER_RIFLE - mag_type = MAGAZINE - ammo_type = /obj/item/ammo_casing/rifle - matter = list(MATERIAL_STEEL = 1500) - max_ammo = 8 - multiple_sprites = TRUE diff --git a/code/modules/projectiles/ammunition/bullets.dm b/code/modules/projectiles/ammunition/bullets.dm deleted file mode 100644 index 1885c0cf12203..0000000000000 --- a/code/modules/projectiles/ammunition/bullets.dm +++ /dev/null @@ -1,205 +0,0 @@ - -/obj/item/ammo_casing/pistol - desc = "A pistol bullet casing." - caliber = CALIBER_PISTOL - projectile_type = /obj/item/projectile/bullet/pistol - icon_state = "pistolcasing" - spent_icon = "pistolcasing-spent" - -/obj/item/ammo_casing/pistol/rubber - desc = "A rubber pistol bullet casing." - projectile_type = /obj/item/projectile/bullet/pistol/rubber - icon_state = "pistolcasing_r" - -/obj/item/ammo_casing/pistol/practice - desc = "A practice pistol bullet casing." - projectile_type = /obj/item/projectile/bullet/pistol/practice - icon_state = "pistolcasing_p" - -/obj/item/ammo_casing/pistol/small - desc = "A small pistol bullet casing." - caliber = CALIBER_PISTOL_SMALL - projectile_type = /obj/item/projectile/bullet/pistol/holdout - icon_state = "smallcasing" - spent_icon = "smallcasing-spent" - -/obj/item/ammo_casing/pistol/small/rubber - desc = "A small pistol rubber bullet casing." - projectile_type = /obj/item/projectile/bullet/pistol/rubber/holdout - icon_state = "pistolcasing_r" - -/obj/item/ammo_casing/pistol/small/practice - desc = "A small pistol practice bullet casing." - projectile_type = /obj/item/projectile/bullet/pistol/practice - icon_state = "pistolcasing_p" - -/obj/item/ammo_casing/pistol/magnum - desc = "A high-power pistol bullet casing." - caliber = CALIBER_PISTOL_MAGNUM - projectile_type = /obj/item/projectile/bullet/pistol/strong - icon_state = "magnumcasing" - spent_icon = "magnumcasing-spent" - -/obj/item/ammo_casing/pistol/magnum/rubber - desc = "A high-power pistol rubber bullet casing." - projectile_type = /obj/item/projectile/bullet/pistol/strong/rubber - -/obj/item/ammo_casing/pistol/throwback - desc = "An antique pistol bullet casing. Somewhere between 9 and 11 mm in caliber." - caliber = CALIBER_PISTOL_ANTIQUE - -/obj/item/ammo_casing/gyrojet - desc = "A minirocket casing." - caliber = CALIBER_GYROJET - projectile_type = /obj/item/projectile/bullet/gyro - icon_state = "lcasing" - spent_icon = "lcasing-spent" - -/obj/item/ammo_casing/flechette - desc = "A flechette casing." - caliber = CALIBER_PISTOL_FLECHETTE - projectile_type = /obj/item/projectile/bullet/flechette - icon_state = "flechette-casing" - spent_icon = "flechette-casing-spent" - -/obj/item/ammo_casing/shotgun - name = "shotgun slug" - desc = "A shotgun slug." - icon_state = "slshell" - spent_icon = "slshell-spent" - caliber = CALIBER_SHOTGUN - projectile_type = /obj/item/projectile/bullet/shotgun - matter = list(MATERIAL_STEEL = 360) - fall_sounds = list('sound/weapons/guns/shotgun_fall.ogg') - -/obj/item/ammo_casing/shotgun/pellet - name = "shotgun shell" - desc = "A shotshell." - icon_state = "gshell" - spent_icon = "gshell-spent" - projectile_type = /obj/item/projectile/bullet/pellet/shotgun - matter = list(MATERIAL_STEEL = 360) - -/obj/item/ammo_casing/shotgun/flechette - name = "flechette shell" - desc = "A flechette shell." - projectile_type = /obj/item/projectile/bullet/pellet/shotgun/flechette - matter = list(MATERIAL_STEEL = 360) - -/obj/item/ammo_casing/shotgun/blank - name = "shotgun shell" - desc = "A blank shell." - icon_state = "blshell" - spent_icon = "blshell-spent" - projectile_type = /obj/item/projectile/bullet/blank - matter = list(MATERIAL_STEEL = 90) - -/obj/item/ammo_casing/shotgun/practice - name = "shotgun shell" - desc = "A practice shell." - icon_state = "pshell" - spent_icon = "pshell-spent" - projectile_type = /obj/item/projectile/bullet/shotgun/practice - matter = list(MATERIAL_STEEL = 90) - -/obj/item/ammo_casing/shotgun/beanbag - name = "beanbag shell" - desc = "A beanbag shell." - icon_state = "bshell" - spent_icon = "bshell-spent" - projectile_type = /obj/item/projectile/bullet/shotgun/beanbag - matter = list(MATERIAL_STEEL = 180) - -//Can stun in one hit if aimed at the head, but -//is blocked by clothing that stops tasers and is vulnerable to EMP -/obj/item/ammo_casing/shotgun/stunshell - name = "stun shell" - desc = "An energy stun cartridge." - icon_state = "stunshell" - spent_icon = "stunshell-spent" - projectile_type = /obj/item/projectile/energy/electrode/stunshot - leaves_residue = FALSE - matter = list(MATERIAL_STEEL = 360, MATERIAL_GLASS = 720) - -/obj/item/ammo_casing/shotgun/stunshell/emp_act(severity) - if(prob(100/severity)) BB = null - update_icon() - ..() - -//Does not stun, only blinds, but has area of effect. -/obj/item/ammo_casing/shotgun/flash - name = "flash shell" - desc = "A chemical shell used to signal distress or provide illumination." - icon_state = "fshell" - spent_icon = "fshell-spent" - projectile_type = /obj/item/projectile/energy/flash/flare - matter = list(MATERIAL_STEEL = 90, MATERIAL_GLASS = 90) - -/obj/item/ammo_casing/rifle - desc = "A rifle bullet casing." - caliber = CALIBER_RIFLE - projectile_type = /obj/item/projectile/bullet/rifle - icon_state = "riflecasing" - spent_icon = "riflecasing-spent" - -/obj/item/ammo_casing/shell - name = "shell casing" - desc = "An antimaterial shell casing." - icon_state = "lcasing" - spent_icon = "lcasing-spent" - caliber = CALIBER_ANTIMATERIAL - projectile_type = /obj/item/projectile/bullet/rifle/shell - matter = list(MATERIAL_STEEL = 1250) - -/obj/item/ammo_casing/shell/apds - name = "\improper APDS shell casing" - desc = "An Armour Piercing Discarding Sabot shell." - projectile_type = /obj/item/projectile/bullet/rifle/shell/apds - -/obj/item/ammo_casing/rifle/military - desc = "A military rifle bullet casing." - caliber = CALIBER_RIFLE_MILITARY - projectile_type = /obj/item/projectile/bullet/rifle/military - icon_state = "rifle_mil" - spent_icon = "rifle_mil-spent" - -/obj/item/ammo_casing/rifle/military/practice - desc = "A military rifle practice bullet casing." - projectile_type = /obj/item/projectile/bullet/rifle/military/practice - icon_state = "rifle_mil_p" - -/obj/item/ammo_casing/rocket - name = "rocket shell" - desc = "A high explosive designed to be fired from a launcher." - icon_state = "rocketshell" - projectile_type = /obj/item/missile - caliber = "rocket" - -/obj/item/ammo_casing/cap - name = "cap" - desc = "A cap for children toys." - caliber = CALIBER_CAPS - color = "#ff0000" - projectile_type = /obj/item/projectile/bullet/pistol/cap - -// EMP ammo. -/obj/item/ammo_casing/pistol/emp - name = "haywire round" - desc = "A pistol bullet casing fitted with a single-use ion pulse generator." - projectile_type = /obj/item/projectile/ion/small - icon_state = "pistolcasing_h" - matter = list(MATERIAL_STEEL = 130, MATERIAL_URANIUM = 100) - -/obj/item/ammo_casing/pistol/small/emp - name = "small haywire round" - desc = "A small bullet casing fitted with a single-use ion pulse generator." - projectile_type = /obj/item/projectile/ion/tiny - icon_state = "smallcasing_h" - -/obj/item/ammo_casing/shotgun/emp - name = "haywire slug" - desc = "A 12-gauge shotgun slug fitted with a single-use ion pulse generator." - icon_state = "empshell" - spent_icon = "empshell-spent" - projectile_type = /obj/item/projectile/ion - matter = list(MATERIAL_STEEL = 260, MATERIAL_URANIUM = 200) diff --git a/code/modules/projectiles/ammunition/magnetic.dm b/code/modules/projectiles/ammunition/magnetic.dm deleted file mode 100644 index ce789c89690a6..0000000000000 --- a/code/modules/projectiles/ammunition/magnetic.dm +++ /dev/null @@ -1,30 +0,0 @@ -/obj/item/magnetic_ammo - name = "flechette magazine" - desc = "A magazine containing steel flechettes." - icon = 'icons/obj/ammo.dmi' - icon_state = "assault_rifle" - var/projectile_type = /obj/item/projectile/bullet/magnetic/flechette - var/projectile_name = "flechette" - var/basetype = /obj/item/magnetic_ammo - w_class = ITEM_SIZE_SMALL - matter = list(MATERIAL_STEEL = 1800) - origin_tech = list(TECH_COMBAT = 1) - var/remaining = 9 - -/obj/item/magnetic_ammo/examine(mob/user) - . = ..() - to_chat(user, "There [(remaining == 1)? "is" : "are"] [remaining] [projectile_name]\s left!") - -/obj/item/magnetic_ammo/skrell - name = "flechette cylinder" - desc = "A magazine containing flechettes, the design harkening back to cylinders on revolvers." - icon = 'icons/obj/guns/skrell_rifle.dmi' - icon_state = "skrell_magazine" - projectile_type = /obj/item/projectile/bullet/magnetic/flechette - projectile_name = "slug" - basetype = /obj/item/magnetic_ammo/skrell - -/obj/item/magnetic_ammo/skrell/slug - name = "slug cylinder" - desc = "A magazine containing slugs, the design harkening back to cylinders on revolvers." - projectile_type = /obj/item/projectile/bullet/magnetic/slug \ No newline at end of file diff --git a/code/modules/projectiles/effects.dm b/code/modules/projectiles/effects.dm deleted file mode 100644 index 63f271a6247d3..0000000000000 --- a/code/modules/projectiles/effects.dm +++ /dev/null @@ -1,274 +0,0 @@ -/obj/effect/projectile - icon = 'icons/effects/projectiles.dmi' - icon_state = "bolt" - plane = EFFECTS_ABOVE_LIGHTING_PLANE - layer = BEAM_PROJECTILE_LAYER //Muzzle flashes would be above the lighting plane anyways. - //Standard compiletime light vars aren't working here, so we've made some of our own. - light_outer_range = 2 - light_max_bright = 1 - light_color = "#ff00dc" - - mouse_opacity = 0 - - -//---------------------------- -// Laser beam -//---------------------------- -/obj/effect/projectile/laser - light_color = COLOR_RED_LIGHT - -/obj/effect/projectile/laser/tracer - icon_state = "beam" - -/obj/effect/projectile/laser/muzzle - icon_state = "muzzle_laser" - -/obj/effect/projectile/laser/impact - icon_state = "impact_laser" - -//---------------------------- -// Blue laser beam -//---------------------------- -/obj/effect/projectile/laser/blue - light_color = COLOR_BLUE_LIGHT - -/obj/effect/projectile/laser/blue/tracer - icon_state = "beam_blue" - -/obj/effect/projectile/laser/blue/muzzle - icon_state = "muzzle_blue" - -/obj/effect/projectile/laser/blue/impact - icon_state = "impact_blue" - -//---------------------------- -// Omni laser beam -//---------------------------- -/obj/effect/projectile/laser/omni - light_color = COLOR_LUMINOL - -/obj/effect/projectile/laser/omni/tracer - icon_state = "beam_omni" - -/obj/effect/projectile/laser/omni/muzzle - icon_state = "muzzle_omni" - -/obj/effect/projectile/laser/omni/impact - icon_state = "impact_omni" - -//---------------------------- -// Xray laser beam -//---------------------------- -/obj/effect/projectile/laser/xray - light_color = "#00cc00" - -/obj/effect/projectile/laser/xray/tracer - icon_state = "xray" - -/obj/effect/projectile/laser/xray/muzzle - icon_state = "muzzle_xray" - -/obj/effect/projectile/laser/xray/impact - icon_state = "impact_xray" - -//---------------------------- -// Heavy laser beam -//---------------------------- -/obj/effect/projectile/laser/heavy - light_max_bright = 1 - -/obj/effect/projectile/laser/heavy/tracer - icon_state = "beam_heavy" - -/obj/effect/projectile/laser/heavy/muzzle - icon_state = "muzzle_beam_heavy" - -/obj/effect/projectile/laser/heavy/impact - icon_state = "impact_beam_heavy" - -//---------------------------- -// Pulse laser beam -//---------------------------- -/obj/effect/projectile/laser/pulse - light_max_bright = 1 - light_color = COLOR_DEEP_SKY_BLUE - -/obj/effect/projectile/laser/pulse/tracer - icon_state = "u_laser" - - -/obj/effect/projectile/laser/pulse/muzzle - icon_state = "muzzle_u_laser" - -/obj/effect/projectile/laser/pulse/impact - icon_state = "impact_u_laser" - -//---------------------------- -// Skrell laser beam -//---------------------------- -/obj/effect/projectile/laser/pulse/skrell - light_max_bright = 1 - light_color = "#4c00ff" - -/obj/effect/projectile/laser/pulse/skrell/tracer - icon_state = "pu_laser" - -/obj/effect/projectile/laser/pulse/skrell/muzzle - icon_state = "muzzle_pu_laser" - -/obj/effect/projectile/laser/pulse/skrell/impact - icon_state = "impact_pu_laser" - -//---------------------------- -// Pulse muzzle effect only -//---------------------------- -/obj/effect/projectile/pulse/muzzle - icon_state = "muzzle_pulse" - light_max_bright = 1 - light_color = COLOR_DEEP_SKY_BLUE - -//---------------------------- -// Treye beam -//---------------------------- -/obj/effect/projectile/trilaser - light_color = COLOR_LUMINOL - -/obj/effect/projectile/trilaser/tracer - icon_state = "plasmacutter" - -/obj/effect/projectile/trilaser/muzzle - icon_state = "muzzle_plasmacutter" - -/obj/effect/projectile/trilaser/impact - icon_state = "impact_plasmacutter" - -//---------------------------- -// Emitter beam -//---------------------------- -/obj/effect/projectile/laser/emitter - light_max_bright = 1 - light_color = "#00cc00" - -/obj/effect/projectile/laser/emitter/tracer - icon_state = "emitter" - -/obj/effect/projectile/laser/emitter/muzzle - icon_state = "muzzle_emitter" - -/obj/effect/projectile/laser/emitter/impact - icon_state = "impact_emitter" - -//---------------------------- -// Stun beam -//---------------------------- -/obj/effect/projectile/stun - light_color = COLOR_YELLOW - -/obj/effect/projectile/stun/tracer - icon_state = "stun" - -/obj/effect/projectile/stun/muzzle - icon_state = "muzzle_stun" - -/obj/effect/projectile/stun/impact - icon_state = "impact_stun" - -//---------------------------- -// Bullet -//---------------------------- -/obj/effect/projectile/bullet/muzzle - icon_state = "muzzle_bullet" - light_outer_range = 5 - light_max_bright = 1 - light_color = COLOR_MUZZLE_FLASH - -//---------------------------- -// confuse ray -//---------------------------- -/obj/effect/projectile/confuseray - light_color = COLOR_GREEN_GRAY - -/obj/effect/projectile/confuseray/tracer - icon_state = "beam_grass" - -/obj/effect/projectile/confuseray/muzzle - icon_state = "muzzle_grass" - -/obj/effect/projectile/confuseray/impact - icon_state = "impact_grass" - -//---------------------------- -// Particle beam -//---------------------------- -/obj/effect/projectile/laser_particle - light_color = COLOR_CYAN - -/obj/effect/projectile/laser_particle/tracer - icon_state = "beam_particle" - -/obj/effect/projectile/laser_particle/muzzle - icon_state = "muzzle_particle" - -/obj/effect/projectile/laser_particle/impact - icon_state = "impact_particle" - -//---------------------------- -// Dark matter -//---------------------------- -/obj/effect/projectile/darkmatter - light_color = COLOR_PURPLE - -/obj/effect/projectile/darkmatter/tracer - icon_state = "beam_darkb" - -/obj/effect/projectile/darkmatter/muzzle - icon_state = "muzzle_darkb" - -/obj/effect/projectile/darkmatter/impact - icon_state = "impact_darkb" - - //---------------------------- -// Dark matter stun -//---------------------------- -/obj/effect/projectile/stun/darkmatter - light_color = COLOR_PURPLE - -/obj/effect/projectile/stun/darkmatter/tracer - icon_state = "beam_darkt" - -/obj/effect/projectile/stun/darkmatter/muzzle - icon_state = "muzzle_darkt" - -/obj/effect/projectile/stun/darkmatter/impact - icon_state = "impact_darkt" - -//---------------------------- -// Point defense -//---------------------------- -/obj/effect/projectile/pointdefense - light_color = COLOR_GOLD - light_max_bright = 1 - -/obj/effect/projectile/pointdefense/tracer - icon_state = "beam_pointdef_d" - -/obj/effect/projectile/pointdefense/muzzle - icon_state = "muzzle_pointdef_d" - -/obj/effect/projectile/pointdefense/impact - icon_state = "impact_pointdef_d" - -//---------------------------- -// incendiary laser -//---------------------------- -/obj/effect/projectile/incen - light_color = COLOR_PALE_ORANGE - -/obj/effect/projectile/incen/tracer - icon_state = "beam_incen" - -/obj/effect/projectile/incen/muzzle - icon_state = "muzzle_incen" - -/obj/effect/projectile/incen/impact - icon_state = "impact_incen" \ No newline at end of file diff --git a/code/modules/projectiles/gun.dm b/code/modules/projectiles/gun.dm deleted file mode 100644 index b9c0f63065821..0000000000000 --- a/code/modules/projectiles/gun.dm +++ /dev/null @@ -1,738 +0,0 @@ -/* - Defines a firing mode for a gun. - - A firemode is created from a list of fire mode settings. Each setting modifies the value of the gun var with the same name. - If the fire mode value for a setting is null, it will be replaced with the initial value of that gun's variable when the firemode is created. - Obviously not compatible with variables that take a null value. If a setting is not present, then the corresponding var will not be modified. -*/ -/datum/firemode - var/name = "default" - var/desc = "The default firemode" - var/list/settings = list() - var/obj/item/gun/gun = null - -/datum/firemode/New(obj/item/gun/_gun, list/properties = null) - ..() - if(!properties || !properties.len) return - - gun = _gun - for(var/propname in properties) - var/propvalue = properties[propname] - if(propname == "mode_name") - name = propvalue - else if(propname == "mode_desc") - desc = propvalue - else if(isnull(propvalue)) - settings[propname] = gun.vars[propname] //better than initial() as it handles list vars like dispersion - else - settings[propname] = propvalue - -/datum/firemode/Destroy() - gun = null - return ..() - -/datum/firemode/proc/apply_to(obj/item/gun/_gun) - gun = _gun - - for(var/propname in settings) - if(propname in gun.vars) - gun.vars[propname] = settings[propname] - - // Apply gunmods effects that have been erased by the previous line - -//Called whenever the firemode is switched to, or the gun is picked up while its active -/datum/firemode/proc/update() - return - - -//Parent gun type. Guns are weapons that can be aimed at mobs and act over a distance -/obj/item/gun - name = "gun" - desc = "Its a gun. It's pretty terrible, though." - icon = 'icons/obj/guns/gui.dmi' - item_icons = list( - slot_l_hand_str = 'icons/mob/onmob/items/lefthand_guns.dmi', - slot_r_hand_str = 'icons/mob/onmob/items/righthand_guns.dmi', - ) - item_state = "gun" - obj_flags = OBJ_FLAG_CONDUCTIBLE - slot_flags = SLOT_BELT|SLOT_HOLSTER - matter = list(MATERIAL_STEEL = 2000) - w_class = ITEM_SIZE_NORMAL - throwforce = 5 - throw_speed = 4 - throw_range = 5 - force = 5 - origin_tech = list(TECH_COMBAT = 1) - attack_verb = list("struck", "hit", "bashed") - zoomdevicename = "scope" - waterproof = FALSE - - var/burst = 1 - var/can_autofire = FALSE - var/fire_delay = 6 //delay after shooting before the gun can be used again. Cannot be less than [burst_delay+1] - var/burst_delay = 2 //delay between shots, if firing in bursts - var/move_delay = 1 - var/fire_sound = 'sound/weapons/gunshot/gunshot.ogg' - var/fire_sound_text = "gunshot" - var/fire_anim = null - var/screen_shake = 0 //shouldn't be greater than 2 unless zoomed - var/silenced = FALSE - var/accuracy = 0 //accuracy is measured in tiles. +1 accuracy means that everything is effectively one tile closer for the purpose of miss chance, -1 means the opposite. launchers are not supported, at the moment. - var/accuracy_power = 5 //increase of to-hit chance per 1 point of accuracy - var/bulk = 0 //how unwieldy this weapon for its size, affects accuracy when fired without aiming - var/last_handled //time when hand gun's in became active, for purposes of aiming bonuses - var/scoped_accuracy = null //accuracy used when zoomed in a scope - var/scope_zoom = 0 - var/projectile_color - var/list/burst_accuracy = list(0) //allows for different accuracies for each shot in a burst. Applied on top of accuracy - // var/list/dispersion = list(0) - var/one_hand_penalty - var/wielded_item_state - var/combustion //whether it creates hotspot when fired - var/init_offset = 0 - var/recoil_buildup = 2 - - var/next_fire_time = 0 - - var/sel_mode = 1 //index of the currently selected mode - var/list/firemodes = list() - var/list/init_firemodes = list() - var/selector_sound = 'sound/weapons/guns/selector.ogg' - - //aiming system stuff - var/keep_aim = 1 //1 for keep shooting until aim is lowered - //0 for one bullet after tarrget moves and aim is lowered - var/multi_aim = 0 //Used to determine if you can target multiple people. - var/aim_tag = 0 // for automatic shit - var/tmp/list/mob/living/aim_targets //List of who yer targeting. - var/tmp/mob/living/last_moved_mob //Used to fire faster at more than one person. - var/tmp/told_cant_shoot = 0 //So that it doesn't spam them with the fact they cannot hit them. - var/tmp/lock_time = -100 - var/tmp/last_safety_check = -INFINITY - var/safety_state = 1 - var/has_safety = TRUE - var/safety_icon //overlay to apply to gun based on safety state, if any - -/obj/item/gun/Initialize() - . = ..() - - initialize_firemodes() - - if(firemodes.len) - set_firemode(sel_mode) - - if(isnull(scoped_accuracy)) - scoped_accuracy = accuracy - - if(scope_zoom) - verbs += /obj/item/gun/proc/scope - -/obj/item/gun/update_twohanding() - if(one_hand_penalty) - update_icon() // In case item_state is set somewhere else. - ..() - -/obj/item/gun/projectile/proc/get_ammo() - var/bullets = 0 - if(loaded) - bullets += loaded.len - if(ammo_magazine && ammo_magazine.stored_ammo) - bullets += ammo_magazine.stored_ammo.len - if(chambered) - bullets += 1 - return bullets - -/obj/item/gun/on_update_icon() - var/mob/living/M = loc - overlays.Cut() - if(istype(M)) - if(wielded_item_state) - if(M.can_wield_item(src) && src.is_held_twohanded(M)) - item_state_slots[slot_l_hand_str] = wielded_item_state - item_state_slots[slot_r_hand_str] = wielded_item_state - else - item_state_slots[slot_l_hand_str] = initial(item_state) - item_state_slots[slot_r_hand_str] = initial(item_state) - if(M.skill_check(SKILL_WEAPONS,SKILL_BASIC)) - overlays += image('icons/obj/guns/gui.dmi',"safety[safety()]") - if(safety_icon) - overlays += image(icon,"[safety_icon][safety()]") - -//Checks whether a given mob can use the gun -//Any checks that shouldn't result in handle_click_empty() being called if they fail should go here. -//Otherwise, if you want handle_click_empty() to be called, check in consume_next_projectile() and return null there. -/obj/item/gun/proc/special_check(var/mob/user) - - if(!istype(user, /mob/living)) - return 0 - if(!user.IsAdvancedToolUser()) - return 0 - - var/mob/living/M = user - if(!safety() && world.time > last_safety_check + 5 MINUTES && !user.skill_check(SKILL_WEAPONS, SKILL_BASIC)) - if(prob(30)) - toggle_safety() - return 1 - if(MUTATION_HULK in M.mutations) - to_chat(M, "Your fingers are much too large for the trigger guard!") - return 0 - if((MUTATION_CLUMSY in M.mutations) && prob(40)) //Clumsy handling - var/obj/P = consume_next_projectile() - if(P) - if(process_projectile(P, user, user, pick(BP_L_FOOT, BP_R_FOOT))) - handle_post_fire(user, user) - user.visible_message( - "\The [user] shoots \himself in the foot with \the [src]!", - "You shoot yourself in the foot with \the [src]!" - ) - M.unequip_item() - else - handle_click_empty(user) - return 0 - return 1 - -/obj/item/gun/emp_act(severity) - for(var/obj/O in contents) - O.emp_act(severity) - ..() - -/obj/item/gun/afterattack(atom/A, mob/living/user, adjacent, params) - if(adjacent) return //A is adjacent, is the user, or is on the user's person - - if(!user.aiming) - user.aiming = new(user) - - if(user && user.client && user.aiming && user.aiming.active && user.aiming.aiming_at != A) - PreFire(A,user,params) //They're using the new gun system, locate what they're aiming at. - return - - Fire(A,user,params) //Otherwise, fire normally. - -/obj/item/gun/attack(atom/A, mob/living/user, def_zone) - var/suicide - if (user == A) - suicide = TRUE - if (user.zone_sel.selecting == BP_MOUTH && (!user.aiming || !user.aiming.active)) - user.toggle_gun_mode() - if (user.aiming && user.aiming.active) //if aim mode, don't pistol whip - even on harm intent - if (user.aiming.aiming_at != A) - var/checkperm - if (suicide) - if (!(user.aiming.target_permissions & TARGET_CAN_CLICK)) - user.aiming.toggle_permission(TARGET_CAN_CLICK, TRUE) - checkperm = TRUE - PreFire(A, user) - if (checkperm) - addtimer(CALLBACK(user.aiming, /obj/aiming_overlay/proc/toggle_permission, TARGET_CAN_CLICK, TRUE), 1) - else - if (suicide && user.zone_sel.selecting == BP_MOUTH && istype(user, /mob/living/carbon/human)) - handle_suicide(user) - else - Fire(A, user, pointblank=1) - else if (user.a_intent == I_HURT) //point blank shooting - Fire(A, user, pointblank=1) - else - return ..() //Pistolwhippin' - -/obj/item/gun/proc/Fire(atom/target, mob/living/user, clickparams, pointblank=0, reflex=0) - if(!user || !target) return - if(target.z != user.z) return - - add_fingerprint(user) - - if(world.time < next_fire_time) - if (world.time % 3) //to prevent spam - to_chat(user, "[src] is not ready to fire again!") - return - - if((!waterproof && submerged()) || !special_check(user)) - return - - if(safety()) - if(user.a_intent == I_HURT && !user.skill_fail_prob(SKILL_WEAPONS, 100, SKILL_EXPERT, 0.5)) //reflex un-safeying - toggle_safety(user) - else - handle_click_safety(user) - return - - - last_safety_check = world.time - var/shoot_time = (burst - 1)* burst_delay - user.setClickCooldown(shoot_time) //no clicking on things while shooting - // user.SetMoveCooldown(shoot_time) //no moving while shooting either - next_fire_time = world.time + shoot_time - - var/held_twohanded = (user.can_wield_item(src) && src.is_held_twohanded(user)) - - //actually attempt to shoot - var/turf/targloc = get_turf(target) //cache this in case target gets deleted during shooting, e.g. if it was a securitron that got destroyed. - for(var/i in 1 to burst) - if(src.loc != user) - break - var/obj/projectile = consume_next_projectile(user) - if(!projectile) - handle_click_empty(user) - break - - process_accuracy(projectile, user, target, i, held_twohanded) - - if(pointblank) - process_point_blank(projectile, user, target) - if(projectile_color) - projectile.icon = get_proj_icon_by_color(projectile, projectile_color) - if(istype(projectile, /obj/item/projectile)) - var/obj/item/projectile/P = projectile - P.proj_color = projectile_color - if(process_projectile(projectile, user, target, user.zone_sel?.selecting, clickparams)) - handle_post_fire(user, target, pointblank, reflex) - update_icon() - - if(i < burst) - sleep(burst_delay) - - if(!(target && target.loc)) - target = targloc - pointblank = 0 - - //update timing - user.setClickCooldown(DEFAULT_QUICK_COOLDOWN) - user.SetMoveCooldown(move_delay) - next_fire_time = world.time + fire_delay - -//obtains the next projectile to fire -/obj/item/gun/proc/consume_next_projectile() - return null - -//used by aiming code -/obj/item/gun/proc/can_hit(atom/target as mob, var/mob/living/user as mob) - if(!special_check(user)) - return 2 - //just assume we can shoot through glass and stuff. No big deal, the player can just choose to not target someone - //on the other side of a window if it makes a difference. Or if they run behind a window, too bad. - return check_trajectory(target, user) - -//called if there was no projectile to shoot -/obj/item/gun/proc/handle_click_empty(mob/user) - if (user) - user.visible_message("*click click*", "*click*") - else - src.visible_message("*click click*") - playsound(src.loc, 'sound/weapons/empty.ogg', 100, 1) - update_firemode() - -/obj/item/gun/proc/handle_click_safety(mob/user) - user.visible_message(SPAN_WARNING("[user] squeezes the trigger of \the [src] but it doesn't move!"), SPAN_WARNING("You squeeze the trigger but it doesn't move!"), range = 3) - -//called after successfully firing -/obj/item/gun/proc/handle_post_fire(mob/living/user, atom/target, var/pointblank=0, var/reflex=0) - if(fire_anim) - flick(fire_anim, src) - - if (user) - var/user_message = SPAN_WARNING("You fire \the [src][pointblank ? " point blank":""] at \the [target][reflex ? " by reflex" : ""]!") - if (silenced) - to_chat(user, user_message) - else - user.visible_message( - SPAN_DANGER("\The [user] fires \the [src][pointblank ? " point blank":""] at \the [target][reflex ? " by reflex" : ""]!"), - user_message, - SPAN_DANGER("You hear a [fire_sound_text]!") - ) - - if (pointblank) - admin_attack_log(user, target, - "shot point blank with \a [type]", - "shot point blank with \a [type]", - "shot point blank (\a [type])" - ) - - var/is_twohanded = (user.can_wield_item(src) && src.is_held_twohanded(user)) - if(one_hand_penalty) - if(!is_twohanded) - switch(one_hand_penalty) - if(4 to 6) - if(prob(50)) //don't need to tell them every single time - to_chat(user, "Your aim wavers slightly.") - if(6 to 8) - to_chat(user, "You have trouble keeping \the [src] on target with just one hand.") - if(8 to INFINITY) - to_chat(user, "You struggle to keep \the [src] on target with just one hand!") - - if(screen_shake) - var/sv = user.get_skill_value(SKILL_WEAPONS) - var/skill_mod = (2-sv)*0.2 - var/sh = max(screen_shake/2+skill_mod, 0) - spawn() - shake_camera(user, screen_shake, sh, 0.5) - if (prob(40) && !user.skill_check(SKILL_WEAPONS, SKILL_BASIC) && screen_shake >= 2 || \ - !user.skill_check(SKILL_WEAPONS, SKILL_ADEPT) && !is_twohanded) - user.visible_message(SPAN_WARNING("The [user] couldn't handle recoil and dropped their weapon!")) - user.drop_from_inventory(src) - - if(combustion) - var/turf/curloc = get_turf(src) - if(curloc) - curloc.hotspot_expose(700, 5) - - if(istype(user,/mob/living/carbon/human) && user.is_cloaked()) //shooting will disable a rig cloaking device - var/mob/living/carbon/human/H = user - if(istype(H.back,/obj/item/rig)) - var/obj/item/rig/R = H.back - for(var/obj/item/rig_module/stealth_field/S in R.installed_modules) - S.deactivate() - - user.handle_recoil(src) - update_icon() - - -/obj/item/gun/proc/process_point_blank(obj/projectile, mob/user, atom/target) - var/obj/item/projectile/P = projectile - if(!istype(P)) - return //default behaviour only applies to true projectiles - - //default point blank multiplier - var/max_mult = 1 - - //determine multiplier due to the target being grabbed - if(isliving(target)) - var/mob/living/L = target - if(L.incapacitated()) - max_mult = 1.2 - for(var/obj/item/grab/G in L.grabbed_by) - max_mult = max(max_mult, G.point_blank_mult()) - P.damage *= max_mult - -/obj/item/gun/proc/process_accuracy(obj/projectile, mob/living/user, atom/target, var/burst, var/held_twohanded) - var/obj/item/projectile/P = projectile - if(!istype(P)) - return //default behaviour only applies to true projectiles - - var/acc_mod = 0 - var/stood_still = last_handled - //Not keeping gun active will throw off aim (for non-Masters) - if(user.skill_check(SKILL_WEAPONS, SKILL_PROF)) - stood_still = min(user.l_move_time, last_handled) - else - stood_still = max(user.l_move_time, last_handled) - - stood_still = max(0,round((world.time - stood_still)/10) - 1) - if(stood_still) - acc_mod += min(max(3, accuracy), stood_still) - else - acc_mod -= w_class - ITEM_SIZE_NORMAL - acc_mod -= bulk - - if(one_hand_penalty >= 4 && !held_twohanded) - acc_mod -= one_hand_penalty/2 - - if(burst > 1 && !user.skill_check(SKILL_WEAPONS, SKILL_ADEPT)) - acc_mod -= 1 - - if (aim_targets && (target in aim_targets)) - acc_mod += 2 - - acc_mod += user.ranged_accuracy_mods() - acc_mod += accuracy - P.hitchance_mod = accuracy_power*acc_mod - -//does the actual launching of the projectile -/obj/item/gun/proc/process_projectile(obj/projectile, mob/living/user, atom/target, var/target_zone, var/params=null) - var/obj/item/projectile/P = projectile - if(!istype(P)) - return 0 //default behaviour only applies to true projectiles - - if(params) - P.set_clickpoint(params) - - var/offset - if(user.recoil) - offset += user.recoil - - if(istype(user, /mob/living/carbon/human)) - var/mob/living/carbon/human/mob = user - if(mob.shock_stage > 120) - offset += 2 - else if(mob.shock_stage > 70) - offset += 1 - - offset = min(offset, MAX_ACCURACY_OFFSET) - offset = rand(-offset, offset) - - - var/launched = !P.launch_from_gun(target, user, src, target_zone, angle_offset = offset) - - if(launched) - play_fire_sound(user,P) - - return launched - -/obj/item/gun/proc/play_fire_sound(var/mob/user, var/obj/item/projectile/P) - var/shot_sound = (istype(P) && P.fire_sound)? P.fire_sound : fire_sound - if(silenced) - playsound(user, shot_sound, 10, 1) - else - playsound(user, shot_sound, 50, 1) - -//Suicide handling. -/obj/item/gun/proc/handle_suicide(mob/living/user) - var/mob/living/carbon/human/M = user - if ((!waterproof && submerged()) || !special_check(M)) - return - if (world.time < next_fire_time) - if (world.time % 3) - to_chat(M, SPAN_WARNING("\The [src] is not ready to fire again!")) - return - M.setClickCooldown((burst - 1) * burst_delay) - next_fire_time = world.time + max(burst_delay + 1, fire_delay) - if (safety()) - handle_click_safety(M) - return - - last_safety_check = world.time - admin_attacker_log(M, "is trying to commit suicide with \a [src]") - user.visible_message(M, SPAN_WARNING("\The [M] pulls the trigger.")) - to_chat(M, SPAN_NOTICE("You feel \the [src] go off...")) - - var/obj/item/organ/brain = M.internal_organs_by_name[BP_BRAIN] || M.internal_organs_by_name[BP_POSIBRAIN] - var/bodypart = brain.parent_organ - if (brain.parent_organ == BP_HEAD) - bodypart = BP_MOUTH - var/obj/item/blocked = M.get_clothing_coverage(bodypart) - - for (var/i = 1 to burst) - var/obj/item/projectile/in_chamber = consume_next_projectile() - if (!in_chamber) - handle_click_empty(M) - break - play_fire_sound(M, in_chamber) - - if (in_chamber.damage_type != DAMAGE_PAIN) - in_chamber.on_hit(M, 0, brain.parent_organ) - if (istype(in_chamber, /obj/item/projectile/ion)) - in_chamber.on_impact(M) - if (in_chamber.damage != 0) - M.apply_damage(in_chamber.damage * 2, in_chamber.damage_type, brain.parent_organ, in_chamber.damage_flags(), used_weapon = "Point blank shot in the mouth with \a [in_chamber]") - var/dmgmultiplier - if (prob (95)) - dmgmultiplier = rand(30, 50) / 10 - else - dmgmultiplier = 0.5 - if (blocked) - to_chat(M, SPAN_WARNING("A clear shot to your [bodypart] is blocked by the [blocked], significantly reducing damage to \the [brain.name]!")) - dmgmultiplier = dmgmultiplier/5 - if (istype(brain, /obj/item/organ/internal/brain)) - var/obj/item/organ/internal/brain/notposi = brain - notposi.take_internal_damage(in_chamber.damage*dmgmultiplier, 0) - else - brain.damage = brain.damage + (in_chamber.damage*dmgmultiplier) - else - M.apply_effect(110, EFFECT_PAIN, 0) - qdel(in_chamber) - update_icon() - if (i < burst) - sleep(burst_delay) - - var/delay = max(burst_delay+1, fire_delay) - M.setClickCooldown(min(delay, DEFAULT_QUICK_COOLDOWN)) - next_fire_time = world.time + delay - if (brain.damage > brain.max_damage) - brain.die() - -/obj/item/gun/proc/scope() - set category = "Object" - set name = "Use Scope" - set popup_menu = 1 - - toggle_scope(usr, scope_zoom) - -/obj/item/gun/proc/toggle_scope(mob/user, var/zoom_amount=2.0) - //looking through a scope limits your periphereal vision - //still, increase the view size by a tiny amount so that sniping isn't too restricted to NSEW - var/zoom_offset = round(world.view * zoom_amount) - var/view_size = round(world.view + zoom_amount) - - if(zoom) - unzoom(user) - return - - zoom(user, zoom_offset, view_size) - if(zoom) - accuracy = scoped_accuracy - if(user.skill_check(SKILL_WEAPONS, SKILL_PROF)) - accuracy += 2 - if(screen_shake) - screen_shake = round(screen_shake*zoom_amount+1) //screen shake is worse when looking through a scope - -//make sure accuracy and screen_shake are reset regardless of how the item is unzoomed. -/obj/item/gun/zoom() - ..() - if(!zoom) - accuracy = initial(accuracy) - screen_shake = initial(screen_shake) - -/obj/item/gun/examine(mob/user) - . = ..() - if(user.skill_check(SKILL_WEAPONS, SKILL_BASIC)) - if(firemodes.len > 1) - var/datum/firemode/current_mode = firemodes[sel_mode] - to_chat(user, "The fire selector is set to [current_mode.name].") - if(has_safety) - to_chat(user, "The safety is [safety() ? "on" : "off"].") - last_safety_check = world.time - -/obj/item/gun/proc/switch_firemodes() - if(firemodes.len <= 1) - return null - update_firemode(FALSE) - var/sel = get_next_firemode() - if(sel) - playsound(loc, selector_sound, 50, 1) - sel_mode = sel - return set_firemode(sel_mode) - -/obj/item/gun/proc/get_next_firemode() - if(firemodes.len <= 1) - return null - . = sel_mode + 1 - if(. > firemodes.len) - . = 1 - -/obj/item/gun/proc/set_firemode(index) - refresh_upgrades() - if(index > firemodes.len) - index = 1 - var/datum/firemode/new_mode = firemodes[sel_mode] - new_mode.apply_to(src) - new_mode.update() - return new_mode - -/obj/item/gun/proc/add_firemode(list/firemode) - //If this var is set, it means spawn a specific subclass of firemode - if (firemode["mode_type"]) - var/newtype = firemode["mode_type"] - firemodes.Add(new newtype(src, firemode)) - else - firemodes.Add(new /datum/firemode(src, firemode)) - -/obj/item/gun/proc/very_unsafe_set_firemode(index) - if(index > firemodes.len) - index = 1 - var/datum/firemode/new_mode = firemodes[sel_mode] - new_mode.apply_to(src) - new_mode.update() - return new_mode - -/obj/item/gun/proc/update_firemode(force_state = null) - if (sel_mode && firemodes && firemodes.len) - var/datum/firemode/new_mode = firemodes[sel_mode] - new_mode.update(force_state) - -/obj/item/gun/refresh_upgrades() - fire_delay = initial(fire_delay) - move_delay = initial(move_delay) - silenced = initial(silenced) - fire_sound = initial(fire_sound) - force = initial(force) - armor_penetration = initial(armor_penetration) - sharp = initial(sharp) - attack_verb = list() - one_hand_penalty = initial(one_hand_penalty) - initialize_firemodes() - - if(firemodes.len) - very_unsafe_set_firemode(sel_mode) // Reset the firemode so it gets the new changes - -/obj/item/gun/proc/initialize_firemodes() - QDEL_CLEAR_LIST(firemodes) - - for(var/i in 1 to init_firemodes.len) - var/list/L = init_firemodes[i] - add_firemode(L) - -/obj/item/gun/pickup(mob/user) - .=..() - update_firemode() - -/obj/item/gun/dropped(mob/user) - .=..() - check_accidents(user) - update_icon() - update_firemode(FALSE) - -/obj/item/gun/swapped_from() - .=..() - update_firemode(FALSE) - -/obj/item/gun/swapped_to() - .=..() - update_firemode() - - -/obj/item/gun/attack_self(mob/user) - var/datum/firemode/new_mode = switch_firemodes(user) - if(prob(20) && !user.skill_check(SKILL_WEAPONS, SKILL_BASIC)) - new_mode = switch_firemodes(user) - if(new_mode) - to_chat(user, "\The [src] is now set to [new_mode.name].") - -/obj/item/gun/proc/toggle_safety(var/mob/user) - if (user?.is_physically_disabled()) - return - - safety_state = !safety_state - update_icon() - if(user) - user.visible_message(SPAN_WARNING("[user] switches the safety of \the [src] [safety_state ? "on" : "off"]."), SPAN_NOTICE("You switch the safety of \the [src] [safety_state ? "on" : "off"]."), range = 3) - last_safety_check = world.time - playsound(src, 'sound/weapons/flipblade.ogg', 15, 1) - -/obj/item/gun/verb/toggle_safety_verb() - set src in usr - set category = "Object" - set name = "Toggle Gun Safety" - if(usr == loc) - toggle_safety(usr) - -/obj/item/gun/CtrlClick(var/mob/user) - if(loc == user) - toggle_safety(user) - return TRUE - . = ..() - -/obj/item/gun/proc/safety() - update_firemode() - return has_safety && safety_state - -/obj/item/gun/equipped() - . = ..() - update_icon() - last_handled = world.time - if(!is_held()) - update_firemode(FALSE) - -/obj/item/gun/on_active_hand() - last_handled = world.time - -/obj/item/gun/on_disarm_attempt(mob/target, mob/attacker) - var/list/turfs = list() - for(var/turf/T in view()) - turfs += T - if(turfs.len) - var/turf/shoot_to = pick(turfs) - target.visible_message("\The [src] goes off during the struggle!") - afterattack(shoot_to,target) - return 1 - -/obj/item/gun/proc/can_autofire() - return (can_autofire && world.time >= next_fire_time) - -/obj/item/gun/proc/check_accidents(mob/living/user, message = "[user] fumbles with the [src] and it goes off!",skill_path = SKILL_WEAPONS, fail_chance = 20, no_more_fail = SKILL_EXPERT, factor = 2) - if(istype(user)) - if(!safety() && user.skill_fail_prob(skill_path, fail_chance, no_more_fail, factor) && special_check(user)) - user.visible_message(SPAN_WARNING(message)) - var/list/targets = list(user) - targets += trange(2, get_turf(src)) - var/picked = pick(targets) - afterattack(picked, user) - return 1 diff --git a/code/modules/projectiles/guns/energy.dm b/code/modules/projectiles/guns/energy.dm deleted file mode 100644 index c87ede57fa866..0000000000000 --- a/code/modules/projectiles/guns/energy.dm +++ /dev/null @@ -1,189 +0,0 @@ -/obj/item/cell/guncell - w_class = ITEM_SIZE_SMALL - name = "Small battery" - icon = 'proxima/icons/obj/guns/guncells.dmi' - -/obj/item/cell/guncell/on_update_icon() - - var/new_overlay_state = null - switch(percent()) - if(70 to 100) - new_overlay_state = "b_70+" - if(35 to 69) - new_overlay_state = "b_35+" - if(0.05 to 34) - new_overlay_state = "b_0+" - - if(new_overlay_state != overlay_state) - overlay_state = new_overlay_state - overlays.Cut() - if(overlay_state) - overlays += image(icon, overlay_state) - -/obj/item/cell/guncell/small - name = "Small weapon battery" - desc = "A small battery for energy guns. Rated for 200Wh." - charge = 200 // base 10 shots - maxcharge = 200 - icon_state = "b_1" - -/obj/item/cell/guncell/medium - name = "Medium weapon battery" - desc = "A medium battery for energy guns. Rated for 300Wh." - charge = 300 // base 15 shots - maxcharge = 300 - icon_state = "b_2" - -/obj/item/cell/guncell/large - name = "Large weapon battery" - desc = "A large battery for energy guns. Rated for 400Wh." - charge = 400 // base 20 shots - maxcharge = 400 - icon_state = "b_3" - -/obj/item/cell/guncell/megalarge - name = "Very-Large weapon battery" - desc = "A very large battery for energy guns. Rated for 500Wh." - charge = 500 // base 25 shots - maxcharge = 500 - icon_state = "b_4" - -/obj/item/cell/guncell/huge - name = "Huge weapon battery" - desc = "A huge battery for energy guns. Rated for 600Wh." - charge = 600 // base 30 shots - maxcharge = 600 - icon_state = "b_5" - -/obj/item/gun/energy - name = "energy gun" - desc = "A basic energy-based gun." - icon = 'icons/obj/guns/basic_energy.dmi' - icon_state = "energy" - fire_sound = 'sound/weapons/Taser.ogg' - fire_sound_text = "laser blast" - accuracy = 1 - accuracy_power = 6 - - var/obj/item/cell/guncell/power_supply //What type of power cell this uses - var/charge_cost = 20 //How much energy is needed to fire. - var/max_shots = 10 //Determines the capacity of the weapon's power cell. Specifying a cell_type overrides this value. - var/cell_type = null - var/projectile_type = /obj/item/projectile/beam/practice - var/modifystate - var/battery_changable = FALSE - var/battery_type = /obj/item/cell/guncell - var/charge_meter = 1 //if set, the icon state will be chosen based on the current charge - - //self-recharging - var/self_recharge = 0 //if set, the weapon will recharge itself - var/use_external_power = 0 //if set, the weapon will look for an external power source to draw from, otherwise it recharges magically - var/recharge_time = 4 - var/charge_tick = 0 - -/obj/item/gun/energy/switch_firemodes() - . = ..() - if(.) - update_icon() - -/obj/item/gun/energy/emp_act(severity) - ..() - update_icon() - -/obj/item/gun/energy/attackby(obj/item/W, mob/living/user) - if(istype(W, battery_type)) - if(power_supply) - to_chat(usr, SPAN_WARNING("[src] is already loaded.")) - return - - if(insert_item(W, user)) - power_supply = W - update_icon() - . = ..() - -/obj/item/gun/energy/MouseDrop(atom/over_object) - if(!battery_changable) - to_chat(usr, SPAN_WARNING("[src] is a disposable, its batteries cannot be removed!.")) - else if(self_recharge) - to_chat(usr, SPAN_WARNING("[src] is a self-charging gun, its batteries cannot be removed!.")) - else if((src.loc == usr) && istype(over_object, /obj/screen) && (over_object.name in list(BP_R_HAND, BP_L_HAND)) && eject_item(power_supply, usr)) - power_supply = null - update_icon() - -/obj/item/gun/energy/Initialize() - . = ..() - if(cell_type) - power_supply = new cell_type(src) - else - power_supply = new /obj/item/cell/guncell/medium(src) - if(self_recharge) - START_PROCESSING(SSobj, src) - update_icon() - -/obj/item/gun/energy/Destroy() - if(self_recharge) - STOP_PROCESSING(SSobj, src) - return ..() - -/obj/item/gun/energy/get_cell() - return power_supply - -/obj/item/gun/energy/Process() - if(self_recharge) //Every [recharge_time] ticks, recharge a shot for the cyborg - charge_tick++ - if(charge_tick < recharge_time) return 0 - charge_tick = 0 - - if(!power_supply || power_supply.charge >= power_supply.maxcharge) - return 0 // check if we actually need to recharge - - if(use_external_power) - var/obj/item/cell/external = get_external_power_supply() - if(!external || !external.use(charge_cost)) //Take power from the borg... - return 0 - - power_supply.give(charge_cost) //... to recharge the shot - update_icon() - return 1 - -/obj/item/gun/energy/consume_next_projectile() - if(!power_supply) return null - if(!ispath(projectile_type)) return null - if(!power_supply.checked_use(charge_cost)) return null - return new projectile_type(src) - -/obj/item/gun/energy/proc/get_external_power_supply() - if(isrobot(loc) || istype(loc, /obj/item/rig_module) || istype(loc, /obj/item/mech_equipment)) - return loc.get_cell() - -/obj/item/gun/energy/examine(mob/user) - . = ..(user) - if(!power_supply) - to_chat(user, "Seems like it's dead.") - return - if (charge_cost == 0) - to_chat(user, "This gun seems to have an unlimited number of shots.") - else - var/shots_remaining = round(power_supply.charge / charge_cost) - to_chat(user, "Has [shots_remaining] shot\s remaining.") - -/obj/item/gun/energy/on_update_icon() - ..() - if(charge_meter) - var/ratio = 0 - if(power_supply) - ratio = power_supply.percent() - if(power_supply.charge < charge_cost) - ratio = 0 - else - ratio = clamp(round(ratio, 25), 25, 100) - else - ratio = 0 - //make sure that rounding down will not give us the empty state even if we have charge for a shot left. - // Also make sure cells adminbussed with higher-than-max charge don't break sprites - - if(modifystate) - icon_state = "[modifystate][ratio]" - else - icon_state = "[initial(icon_state)][ratio]" - update_held_icon() diff --git a/code/modules/projectiles/guns/energy/laser.dm b/code/modules/projectiles/guns/energy/laser.dm deleted file mode 100644 index 3a83f4244e09a..0000000000000 --- a/code/modules/projectiles/guns/energy/laser.dm +++ /dev/null @@ -1,187 +0,0 @@ -/obj/item/gun/energy/laser - name = "laser carbine" - desc = "A Hephaestus Industries G40E carbine, designed to kill with concentrated energy blasts." - icon = 'icons/obj/guns/laser_carbine.dmi' - icon_state = "laser" - item_state = "laser" - slot_flags = SLOT_BELT|SLOT_BACK - w_class = ITEM_SIZE_LARGE - force = 10 - one_hand_penalty = 2 - bulk = GUN_BULK_RIFLE - origin_tech = list(TECH_COMBAT = 3, TECH_MAGNET = 2) - matter = list(MATERIAL_STEEL = 2000) - projectile_type = /obj/item/projectile/beam/midlaser - wielded_item_state = "laser-wielded" - -/obj/item/gun/energy/laser/mounted - self_recharge = 1 - use_external_power = 1 - one_hand_penalty = 0 //just in case - has_safety = FALSE - -/obj/item/gun/energy/laser/practice - name = "practice laser carbine" - desc = "A modified version of the HI G40E, this one fires less concentrated energy bolts designed for target practice." - icon_state = "laserp" - projectile_type = /obj/item/projectile/beam/practice - charge_cost = 10 //How much energy is needed to fire. - -/obj/item/gun/energy/laser/practice/proc/hacked() - return projectile_type != /obj/item/projectile/beam/practice - -/obj/item/gun/energy/laser/practice/emag_act(var/remaining_charges, var/mob/user, var/emag_source) - if(hacked()) - return NO_EMAG_ACT - to_chat(user, "You disable the safeties on [src] and crank the output to the lethal levels.") - desc += " Its safeties are disabled and output is set to dangerous levels." - projectile_type = /obj/item/projectile/beam/midlaser - charge_cost = 20 - max_shots = rand(3,6) //will melt down after those - return 1 - -/obj/item/gun/energy/laser/practice/handle_post_fire(mob/user, atom/target, var/pointblank=0, var/reflex=0) - ..() - if(hacked()) - max_shots-- - if(!max_shots) //uh hoh gig is up - to_chat(user, "\The [src] sizzles in your hands, acrid smoke rising from the firing end!") - desc += " The optical pathway is melted and useless." - projectile_type = null - -/obj/item/gun/energy/retro - name = "retro laser" - icon = 'icons/obj/guns/retro_laser.dmi' - icon_state = "retro" - item_state = "retro" - desc = "An older model of the basic lasergun. Nevertheless, it is still quite deadly and easy to maintain, making it a favorite amongst pirates and other outlaws." - slot_flags = SLOT_BELT|SLOT_HOLSTER - w_class = ITEM_SIZE_NORMAL - projectile_type = /obj/item/projectile/beam - fire_delay = 15 //old technology, and a pistol - -/obj/item/gun/energy/captain - name = "antique laser gun" - icon = 'icons/obj/guns/caplaser.dmi' - icon_state = "caplaser" - item_state = "caplaser" - desc = "A rare weapon, handcrafted by a now defunct specialty manufacturer on Luna for a small fortune. It's certainly aged well." - force = 5 - slot_flags = SLOT_BELT //too unusually shaped to fit in a holster - w_class = ITEM_SIZE_NORMAL - projectile_type = /obj/item/projectile/beam - origin_tech = null - max_shots = 5 //to compensate a bit for self-recharging - one_hand_penalty = 1 //a little bulky - self_recharge = 1 - -/obj/item/gun/energy/lasercannon - name = "laser cannon" - desc = "With the laser cannon, the lasing medium is enclosed in a tube lined with uranium-235 and subjected to high neutron flux in a nuclear reactor core. This incredible technology may help YOU achieve high excitation rates with small laser volumes!" - icon_state = "lasercannon" - icon = 'icons/obj/guns/laser_cannon.dmi' - item_state = null - origin_tech = list(TECH_COMBAT = 4, TECH_MATERIAL = 3, TECH_POWER = 3) - slot_flags = SLOT_BELT|SLOT_BACK - one_hand_penalty = 6 //large and heavy - w_class = ITEM_SIZE_HUGE - projectile_type = /obj/item/projectile/beam/heavylaser - charge_cost = 40 - max_shots = 6 - accuracy = 2 - fire_delay = 20 - wielded_item_state = "gun_wielded" - -/obj/item/gun/energy/lasercannon/mounted - name = "mounted laser cannon" - self_recharge = 1 - use_external_power = 1 - recharge_time = 10 - accuracy = 0 //mounted laser cannons don't need any help, thanks - one_hand_penalty = 0 - has_safety = FALSE - -/obj/item/gun/energy/xray - name = "x-ray laser carbine" - desc = "A high-power laser gun capable of emitting concentrated x-ray blasts, that are able to penetrate laser-resistant armor much more readily than standard photonic beams." - icon = 'icons/obj/guns/xray.dmi' - icon_state = "xray" - item_state = "xray" - slot_flags = SLOT_BELT|SLOT_BACK - origin_tech = list(TECH_COMBAT = 5, TECH_MATERIAL = 3, TECH_MAGNET = 2, TECH_ESOTERIC = 2) - projectile_type = /obj/item/projectile/beam/xray/midlaser - one_hand_penalty = 2 - w_class = ITEM_SIZE_LARGE - charge_cost = 15 - max_shots = 10 - wielded_item_state = "gun_wielded" - combustion = 0 - -/obj/item/gun/energy/xray/pistol - name = "x-ray laser gun" - icon = 'icons/obj/guns/xray_pistol.dmi' - icon_state = "oldxray" - item_state = "oldxray" - slot_flags = SLOT_BELT|SLOT_HOLSTER - origin_tech = list(TECH_COMBAT = 4, TECH_MATERIAL = 3, TECH_MAGNET = 2, TECH_ESOTERIC = 2) - projectile_type = /obj/item/projectile/beam/xray - one_hand_penalty = 1 - w_class = ITEM_SIZE_NORMAL - fire_delay = 10 - -/obj/item/gun/energy/sniperrifle - name = "marksman energy rifle" - desc = "The HI DMR 9E is an older design of Hephaestus Industries. A designated marksman rifle capable of shooting powerful ionized beams, this is a weapon to kill from a distance." - icon = 'icons/obj/guns/laser_sniper.dmi' - icon_state = "sniper" - item_state = "laser" - origin_tech = list(TECH_COMBAT = 6, TECH_MATERIAL = 5, TECH_POWER = 4) - projectile_type = /obj/item/projectile/beam/sniper - one_hand_penalty = 5 // The weapon itself is heavy, and the long barrel makes it hard to hold steady with just one hand. - slot_flags = SLOT_BACK - charge_cost = 40 - max_shots = 8 - fire_delay = 35 - force = 10 - w_class = ITEM_SIZE_HUGE - accuracy = -2 //shooting at the hip - scoped_accuracy = 9 - scope_zoom = 2 - wielded_item_state = "gun_wielded" - -/obj/item/gun/energy/sniperrifle/on_update_icon() - ..() - item_state_slots[slot_back_str] = icon_state //so that the on-back overlay uses the different charged states - -////////Laser Tag//////////////////// - -/obj/item/gun/energy/lasertag - name = "laser tag gun" - icon = 'icons/obj/guns/lasertag.dmi' - icon_state = "bluetag" - item_state = "laser" - desc = "Standard issue weapon of the Imperial Guard." - origin_tech = list(TECH_COMBAT = 1, TECH_MAGNET = 2) - self_recharge = 1 - matter = list(MATERIAL_STEEL = 2000) - projectile_type = /obj/item/projectile/beam/lastertag/blue - var/required_vest - -/obj/item/gun/energy/lasertag/special_check(var/mob/living/carbon/human/M) - if(ishuman(M)) - if(!istype(M.wear_suit, required_vest)) - to_chat(M, "You need to be wearing your laser tag vest!") - return 0 - return ..() - -/obj/item/gun/energy/lasertag/blue - icon_state = "bluetag" - item_state = "bluetag" - projectile_type = /obj/item/projectile/beam/lastertag/blue - required_vest = /obj/item/clothing/suit/bluetag - -/obj/item/gun/energy/lasertag/red - icon_state = "redtag" - item_state = "redtag" - projectile_type = /obj/item/projectile/beam/lastertag/red - required_vest = /obj/item/clothing/suit/redtag diff --git a/code/modules/projectiles/guns/energy/nuclear.dm b/code/modules/projectiles/guns/energy/nuclear.dm deleted file mode 100644 index de38d96084ab3..0000000000000 --- a/code/modules/projectiles/guns/energy/nuclear.dm +++ /dev/null @@ -1,129 +0,0 @@ -/obj/item/gun/energy/gun - name = "energy gun" - desc = "Another bestseller of Lawson Arms and the FTU, the LAEP90 Perun is a versatile energy based sidearm, capable of switching between low, medium and high power projectile settings. In other words: stun, shock or kill." - icon = 'icons/obj/guns/energy_gun.dmi' - icon_state = "energystun100" - item_state = null //so the human update icon uses the icon_state instead. - max_shots = 10 - fire_delay = 10 // To balance for the fact that it is a pistol and can be used one-handed without penalty - - projectile_type = /obj/item/projectile/beam/stun - origin_tech = list(TECH_COMBAT = 3, TECH_MAGNET = 2) - modifystate = "energystun" - - init_firemodes = list( - list(mode_name="stun", projectile_type=/obj/item/projectile/beam/stun, modifystate="energystun"), - list(mode_name="shock", projectile_type=/obj/item/projectile/beam/stun/shock, modifystate="energyshock"), - list(mode_name="kill", projectile_type=/obj/item/projectile/beam, modifystate="energykill"), - ) - -/obj/item/gun/energy/gun/skrell - name = "skrellian handgun" - desc = "A common Skrellian side-arm, the Xuxquu*'Voom-5, or XV-5, is a more traditional energy weapon, tuned to dispense beams in three different wavelengths." - w_class = ITEM_SIZE_NORMAL - slot_flags = SLOT_BELT|SLOT_HOLSTER - icon = 'icons/obj/guns/skrell_pistol.dmi' - icon_state = "skrell_pistol_stun_100" - max_shots = 10 - fire_delay = 6 - one_hand_penalty = 1 - self_recharge = 1 - - projectile_type = /obj/item/projectile/beam/stun - origin_tech = list(TECH_COMBAT = 3, TECH_MATERIAL = 5, TECH_POWER = 3) - modifystate = "skrell_pistol_stun" - - init_firemodes = list( - list(mode_name="stun", projectile_type=/obj/item/projectile/beam/stun, modifystate="skrell_pistol_stun"), - list(mode_name="shock", projectile_type=/obj/item/projectile/beam/stun/shock, modifystate="skrell_pistol_shock"), - list(mode_name="kill", projectile_type=/obj/item/projectile/beam, modifystate="skrell_pistol_kill"), - ) - -/obj/item/gun/energy/gun/small - name = "small energy gun" - desc = "A smaller model of the versatile LAEP90 Perun, the LAEP90-C packs considerable utility in a smaller package. Best used in situations where full-sized sidearms are inappropriate." - icon = 'icons/obj/guns/small_egun.dmi' - icon_state = "smallgunstun" - max_shots = 6 - w_class = ITEM_SIZE_SMALL - force = 2 //it's the size of a car key, what did you expect? - modifystate = "smallgunstun" - - init_firemodes = list( - list(mode_name="stun", projectile_type=/obj/item/projectile/beam/stun, modifystate="smallgunstun"), - list(mode_name="shock", projectile_type=/obj/item/projectile/beam/stun/shock, modifystate="smallgunshock"), - list(mode_name="kill", projectile_type=/obj/item/projectile/beam/smalllaser, modifystate="smallgunkill"), - ) - -/obj/item/gun/energy/gun/mounted - name = "mounted energy gun" - self_recharge = 1 - use_external_power = 1 - has_safety = FALSE - -/obj/item/gun/energy/gun/nuclear - name = "advanced energy gun" - desc = "An energy gun with an experimental miniaturized reactor." - icon = 'icons/obj/guns/adv_egun.dmi' - icon_state = "nucgun" - origin_tech = list(TECH_COMBAT = 3, TECH_MATERIAL = 5, TECH_POWER = 3) - slot_flags = SLOT_BELT - w_class = ITEM_SIZE_LARGE - force = 8 //looks heavier than a pistol - self_recharge = 1 - modifystate = null - one_hand_penalty = 1 //bulkier than an e-gun, but not quite the size of a carbine - - init_firemodes = list( - list(mode_name="stun", projectile_type=/obj/item/projectile/beam/stun), - list(mode_name="shock", projectile_type=/obj/item/projectile/beam/stun/shock), - list(mode_name="kill", projectile_type=/obj/item/projectile/beam), - ) - - var/fail_counter = 0 - -//override for failcheck behaviour -/obj/item/gun/energy/gun/nuclear/Process() - if(fail_counter > 0) - SSradiation.radiate(src, (fail_counter * 2)) - fail_counter-- - - return ..() - -/obj/item/gun/energy/gun/nuclear/emp_act(severity) - ..() - switch(severity) - if(EMP_ACT_HEAVY) - fail_counter = max(fail_counter, 30) - visible_message("\The [src]'s reactor overloads!") - if(EMP_ACT_LIGHT) - fail_counter = max(fail_counter, 10) - if(ismob(loc)) - to_chat(loc, "\The [src] feels pleasantly warm.") - -/obj/item/gun/energy/gun/nuclear/proc/get_charge_overlay() - var/ratio = power_supply.percent() - ratio = round(ratio, 25) - return "nucgun-[ratio]" - -/obj/item/gun/energy/gun/nuclear/proc/get_reactor_overlay() - if(fail_counter) - return "nucgun-medium" - if (power_supply.percent() <= 50) - return "nucgun-light" - return "nucgun-clean" - -/obj/item/gun/energy/gun/nuclear/proc/get_mode_overlay() - var/datum/firemode/current_mode = firemodes[sel_mode] - switch(current_mode.name) - if("stun") return "nucgun-stun" - if("kill") return "nucgun-kill" - -/obj/item/gun/energy/gun/nuclear/on_update_icon() - var/list/new_overlays = list() - - new_overlays += get_charge_overlay() - new_overlays += get_reactor_overlay() - new_overlays += get_mode_overlay() - - overlays = new_overlays diff --git a/code/modules/projectiles/guns/energy/pulse.dm b/code/modules/projectiles/guns/energy/pulse.dm deleted file mode 100644 index e454fb093f9af..0000000000000 --- a/code/modules/projectiles/guns/energy/pulse.dm +++ /dev/null @@ -1,92 +0,0 @@ -/obj/item/gun/energy/pulse_rifle - name = "pulse rifle" - desc = "A weapon that uses advanced pulse-based beam generation technology to emit powerful laser blasts. Because of its complexity and cost, it is rarely seen in use except by specialists." - icon = 'icons/obj/guns/pulse_rifle.dmi' - icon_state = "pulse" - item_state = "pulse" - slot_flags = SLOT_BACK - force = 12 - projectile_type = /obj/item/projectile/beam/pulse/heavy - max_shots = 36 - w_class = ITEM_SIZE_HUGE - one_hand_penalty= 6 - multi_aim = 1 - burst_delay = 3 - burst = 3 - move_delay = 4 - accuracy = 1 - wielded_item_state = "gun_wielded" - bulk = GUN_BULK_RIFLE - -/obj/item/gun/energy/pulse_rifle/carbine - name = "pulse carbine" - desc = "A weapon that uses advanced pulse-based beam generation technology to emit powerful laser blasts. Less bulky than the full-sized rifle." - icon = 'icons/obj/guns/pulse_carbine.dmi' - icon_state = "pulse_carbine" - slot_flags = SLOT_BACK|SLOT_BELT - force = 8 - projectile_type = /obj/item/projectile/beam/pulse/mid - max_shots = 24 - w_class = ITEM_SIZE_LARGE - one_hand_penalty= 3 - burst_delay = 2 - move_delay = 2 - bulk = GUN_BULK_RIFLE - 3 - accuracy = 0 - -/obj/item/gun/energy/pulse_rifle/pistol - name = "pulse pistol" - desc = "A weapon that uses advanced pulse-based beam generation technology to emit powerful laser blasts. Even smaller than the carbine." - icon = 'icons/obj/guns/pulse_pistol.dmi' - icon_state = "pulse_pistol" - slot_flags = SLOT_BELT|SLOT_HOLSTER - force = 6 - projectile_type = /obj/item/projectile/beam/pulse - max_shots = 21 - w_class = ITEM_SIZE_NORMAL - one_hand_penalty=1 //a bit heavy - burst_delay = 1 - move_delay = 1 - wielded_item_state = null - bulk = 0 - accuracy = 0 - -/obj/item/gun/energy/pulse_rifle/mounted - self_recharge = 1 - use_external_power = 1 - has_safety = FALSE - -/obj/item/gun/energy/pulse_rifle/destroyer - name = "pulse destroyer" - desc = "A heavy-duty, pulse-based energy weapon. Because of its complexity and cost, it is rarely seen in use except by specialists." - cell_type = /obj/item/cell/super - fire_delay = 25 - projectile_type=/obj/item/projectile/beam/pulse/destroy - charge_cost= 40 - -/obj/item/gun/energy/pulse_rifle/destroyer/attack_self(mob/living/user as mob) - to_chat(user, "[src.name] has three settings, and they are all DESTROY.") - -/obj/item/gun/energy/pulse_rifle/skrell - name = "skrellian carbine" - icon = 'icons/obj/guns/skrell_carbine.dmi' - icon_state = "skrell_carbine" - item_state = "skrell_carbine" - slot_flags = SLOT_BACK|SLOT_BELT - desc = "The Vuu'Xqu*ix T-3, known as 'VT-3' by SolGov. Rarely seen out in the wild by anyone outside of a Skrellian SDTF." - cell_type = /obj/item/cell/high - self_recharge = 1 - move_delay = 2 - projectile_type=/obj/item/projectile/beam/pulse/skrell/single - charge_cost=120 - one_hand_penalty = 3 - burst=1 - burst_delay=null - wielded_item_state = "skrell_carbine-wielded" - accuracy = 1 - - init_firemodes = list( - list(mode_name="single", projectile_type=/obj/item/projectile/beam/pulse/skrell/single, charge_cost=120, burst=1, burst_delay=null), - list(mode_name="heavy", projectile_type=/obj/item/projectile/beam/pulse/skrell/heavy, charge_cost=55, burst=2, burst_delay=3), - list(mode_name="light", projectile_type=/obj/item/projectile/beam/pulse/skrell, charge_cost=40, burst=3, burst_delay=2) - ) diff --git a/code/modules/projectiles/guns/energy/secure.dm b/code/modules/projectiles/guns/energy/secure.dm deleted file mode 100644 index d4603147a40fb..0000000000000 --- a/code/modules/projectiles/guns/energy/secure.dm +++ /dev/null @@ -1,80 +0,0 @@ -/obj/item/gun/energy/gun/small/secure - name = "compact smartgun" - desc = "Combining the two LAEP90 variants, the secure and compact LAEP90-CS is the next best thing to keeping your security forces on a literal leash." - icon = 'icons/obj/guns/small_egun_secure.dmi' - item_icons = list( - slot_l_hand_str = 'icons/mob/onmob/items/lefthand_guns_secure.dmi', - slot_r_hand_str = 'icons/mob/onmob/items/righthand_guns_secure.dmi', - ) - req_access = list(list(access_brig, access_bridge)) - authorized_modes = list(ALWAYS_AUTHORIZED, AUTHORIZED) - -/obj/item/gun/energy/stunrevolver/secure - name = "smart stun revolver" - desc = "This A&M X6 is fitted with an NT1019 chip which allows remote authorization of weapon functionality. It has an SCG emblem on the grip." - icon = 'icons/obj/guns/stunrevolver_secure.dmi' - icon_state = "revolverstun100" - modifystate= "revolverstun" - item_icons = list( - slot_l_hand_str = 'icons/mob/onmob/items/lefthand_guns_secure.dmi', - slot_r_hand_str = 'icons/mob/onmob/items/righthand_guns_secure.dmi', - ) - item_state = null - req_access = list(list(access_brig, access_bridge)) - -/obj/item/gun/energy/gun/secure - name = "smartgun" - desc = "A more secure LAEP90, the LAEP90-S is designed to please paranoid constituents. Body cam not included." - icon = 'icons/obj/guns/energy_gun_secure.dmi' - item_icons = list( - slot_l_hand_str = 'icons/mob/onmob/items/lefthand_guns_secure.dmi', - slot_r_hand_str = 'icons/mob/onmob/items/righthand_guns_secure.dmi', - ) - item_state = null //so the human update icon uses the icon_state instead. - req_access = list(list(access_brig, access_bridge)) - authorized_modes = list(ALWAYS_AUTHORIZED, AUTHORIZED) - -/obj/item/gun/energy/gun/secure/preauthorized - authorized_modes = list(ALWAYS_AUTHORIZED, AUTHORIZED, AUTHORIZED) - -/obj/item/gun/energy/revolver/secure - name = "smart service revolver" - desc = "The LAER680-S, a standard issue service revolver commonly used by higher ranking offcers among the SCG. Fitted with an NT1019 chip which allows remote authorization of the weapon's functionality." - icon = 'icons/obj/guns/energy_revolver.dmi' - icon_state = "energyrevolverstun100" - item_icons = list( - slot_l_hand_str = 'icons/mob/onmob/items/lefthand_guns_secure.dmi', - slot_r_hand_str = 'icons/mob/onmob/items/righthand_guns_secure.dmi', - ) - modifystate = "energyrevolverstun" - item_state = null - init_firemodes = list( - list(mode_name="stun", projectile_type=/obj/item/projectile/beam/stun, modifystate="energyrevolverstun"), - list(mode_name="shock", projectile_type=/obj/item/projectile/beam/stun/shock, modifystate="energyrevolvershock"), - list(mode_name="kill", projectile_type=/obj/item/projectile/beam, modifystate="energyrevolverkill"), - ) - req_access = list(list(access_brig, access_heads)) - authorized_modes = list(ALWAYS_AUTHORIZED, AUTHORIZED) - -/obj/item/gun/energy/gun/secure/mounted - name = "robot energy gun" - desc = "A robot-mounted equivalent of the LAEP90-S, which is always registered to its owner." - self_recharge = 1 - use_external_power = 1 - one_hand_penalty = 0 - has_safety = FALSE - item_flags = ITEM_FLAG_INVALID_FOR_CHAMELEON - -/obj/item/gun/energy/gun/secure/mounted/Initialize() - var/mob/borg = get_holder_of_type(src, /mob/living/silicon/robot) - if(!borg) - CRASH("Invalid spawn location.") - registered_owner = borg.name - GLOB.secure_weapons |= src - . = ..() - -/obj/item/gun/energy/laser/secure - name = "laser carbine" - desc = "A Hephaestus Industries G40E carbine, designed to kill with concentrated energy blasts. Fitted with an NT1019 chip to make sure killcount is tracked appropriately." - icon_state = "lasersec" - req_access = list(list(access_brig, access_bridge)) diff --git a/code/modules/projectiles/guns/energy/special.dm b/code/modules/projectiles/guns/energy/special.dm deleted file mode 100644 index 1d50c4038a5f9..0000000000000 --- a/code/modules/projectiles/guns/energy/special.dm +++ /dev/null @@ -1,197 +0,0 @@ -/obj/item/gun/energy/ionrifle - name = "ion rifle" - desc = "The NT Mk60 EW Halicon is a man portable anti-armor weapon designed to disable mechanical threats, produced by NT. Not the best of its type." - icon = 'icons/obj/guns/ion_rifle.dmi' - icon_state = "ionrifle" - item_state = "ionrifle" - origin_tech = list(TECH_COMBAT = 2, TECH_MAGNET = 4) - w_class = ITEM_SIZE_HUGE - force = 10 - obj_flags = OBJ_FLAG_CONDUCTIBLE - slot_flags = SLOT_BACK - one_hand_penalty = 4 - charge_cost = 60 - max_shots = 5 - fire_delay = 60 - projectile_type = /obj/item/projectile/ion - wielded_item_state = "ionrifle-wielded" - combustion = 0 - -/obj/item/gun/energy/ionrifle/small - name = "ion pistol" - desc = "The NT Mk72 EW Preston is a personal defense weapon designed to disable mechanical threats." - icon = 'icons/obj/guns/ion_pistol.dmi' - icon_state = "ionpistol" - item_state = "ionpistol" - origin_tech = list(TECH_COMBAT = 2, TECH_MAGNET = 4) - w_class = ITEM_SIZE_NORMAL - force = 5 - slot_flags = SLOT_BELT|SLOT_HOLSTER - one_hand_penalty = 0 - charge_cost = 40 - max_shots = 3 - projectile_type = /obj/item/projectile/ion/small - -/obj/item/gun/energy/decloner - name = "biological demolecularisor" - desc = "A gun that discharges high amounts of controlled radiation to slowly break a target into component elements." - icon = 'icons/obj/guns/decloner.dmi' - icon_state = "decloner" - item_state = "decloner" - origin_tech = list(TECH_COMBAT = 5, TECH_MATERIAL = 4, TECH_POWER = 3) - max_shots = 10 - projectile_type = /obj/item/projectile/energy/declone - combustion = 0 - -/obj/item/gun/energy/floragun - name = "floral somatoray" - desc = "A tool that discharges controlled radiation which induces mutation in plant cells." - icon = 'icons/obj/guns/floral.dmi' - icon_state = "floramut100" - item_state = "floramut" - charge_cost = 10 - max_shots = 10 - projectile_type = /obj/item/projectile/energy/floramut - origin_tech = list(TECH_MATERIAL = 2, TECH_BIO = 3, TECH_POWER = 3) - modifystate = "floramut" - self_recharge = 1 - var/decl/plantgene/gene = null - combustion = 0 - - init_firemodes = list( - list(mode_name="induce mutations", projectile_type=/obj/item/projectile/energy/floramut, modifystate="floramut"), - list(mode_name="increase yield", projectile_type=/obj/item/projectile/energy/florayield, modifystate="florayield"), - list(mode_name="induce specific mutations", projectile_type=/obj/item/projectile/energy/floramut/gene, modifystate="floramut"), - ) - -/obj/item/gun/energy/floragun/resolve_attackby(atom/A) - if(istype(A,/obj/machinery/portable_atmospherics/hydroponics)) - return FALSE // do afterattack, i.e. fire, at pointblank at trays. - return ..() - -/obj/item/gun/energy/floragun/afterattack(obj/target, mob/user, adjacent_flag) - //allow shooting into adjacent hydrotrays regardless of intent - if(adjacent_flag && istype(target,/obj/machinery/portable_atmospherics/hydroponics)) - user.visible_message("\The [user] fires \the [src] into \the [target]!") - Fire(target,user) - return - ..() - -/obj/item/gun/energy/floragun/verb/select_gene() - set name = "Select Gene" - set category = "Object" - set src in view(1) - - var/genemask = input("Choose a gene to modify.") as null|anything in SSplants.plant_gene_datums - - if(!genemask) - return - - gene = SSplants.plant_gene_datums[genemask] - - to_chat(usr, "You set the [src]'s targeted genetic area to [genemask].") - - return - -/obj/item/gun/energy/floragun/consume_next_projectile() - . = ..() - var/obj/item/projectile/energy/floramut/gene/G = . - if(istype(G)) - G.gene = gene - -/obj/item/gun/energy/meteorgun - name = "meteor gun" - desc = "For the love of god, make sure you're aiming this the right way!" - icon = 'icons/obj/guns/launchers.dmi' - icon_state = "riotgun" - item_state = "c20r" - slot_flags = SLOT_BELT|SLOT_BACK - w_class = ITEM_SIZE_HUGE - projectile_type = /obj/item/projectile/meteor - cell_type = /obj/item/cell/potato - self_recharge = 1 - recharge_time = 5 //Time it takes for shots to recharge (in ticks) - charge_meter = 0 - combustion = 0 - -/obj/item/gun/energy/meteorgun/pen - name = "meteor pen" - desc = "The pen is mightier than the sword." - icon = 'icons/obj/bureaucracy.dmi' - icon_state = "pen" - item_state = "pen" - w_class = ITEM_SIZE_TINY - slot_flags = SLOT_BELT - -/obj/item/gun/energy/mindflayer - name = "mind flayer" - desc = "A custom-built weapon of some kind." - icon = 'icons/obj/guns/xray.dmi' - icon_state = "xray" - origin_tech = list(TECH_COMBAT = 5, TECH_MAGNET = 4) - projectile_type = /obj/item/projectile/beam/mindflayer - -/obj/item/gun/energy/toxgun - name = "phoron pistol" - desc = "A specialized firearm designed to fire lethal bolts of phoron." - icon = 'icons/obj/guns/toxgun.dmi' - icon_state = "toxgun" - w_class = ITEM_SIZE_NORMAL - origin_tech = list(TECH_COMBAT = 5, TECH_PHORON = 4) - projectile_type = /obj/item/projectile/energy/phoron - -/obj/item/gun/energy/plasmacutter - name = "plasma cutter" - desc = "A mining tool capable of expelling concentrated plasma bursts. You could use it to cut limbs off of xenos! Or, you know, mine stuff." - charge_meter = 0 - icon = 'icons/obj/guns/plasmacutter.dmi' - icon_state = "plasmacutter" - item_state = "plasmacutter" - fire_sound = 'sound/weapons/plasma_cutter.ogg' - slot_flags = SLOT_BELT|SLOT_BACK - w_class = ITEM_SIZE_NORMAL - force = 8 - origin_tech = list(TECH_MATERIAL = 4, TECH_PHORON = 4, TECH_ENGINEERING = 6, TECH_COMBAT = 3) - matter = list(MATERIAL_STEEL = 4000) - projectile_type = /obj/item/projectile/beam/plasmacutter - max_shots = 10 - self_recharge = 1 - var/datum/effect/effect/system/spark_spread/spark_system - -/obj/item/gun/energy/plasmacutter/mounted - name = "mounted plasma cutter" - use_external_power = 1 - max_shots = 4 - has_safety = FALSE - -/obj/item/gun/energy/plasmacutter/Initialize() - . = ..() - spark_system = new /datum/effect/effect/system/spark_spread - spark_system.set_up(5, 0, src) - spark_system.attach(src) - -/obj/item/gun/energy/plasmacutter/Destroy() - QDEL_NULL(spark_system) - return ..() - -/obj/item/gun/energy/plasmacutter/proc/slice(var/mob/M = null) - if(!safety()) - if(M) - M.welding_eyecheck()//Welding tool eye check - if(check_accidents(M, "[M] loses grip on [src] from its sudden recoil!",SKILL_CONSTRUCTION, 60, SKILL_ADEPT)) - return 0 - spark_system.start() - return 1 - handle_click_empty(M) - return 0 - -/obj/item/gun/energy/incendiary_laser - name = "dispersive blaster" - desc = "The A&M 'Shayatin' was the first of a class of dispersive laser weapons which, instead of firing a focused beam, scan over a target rapidly with the goal of setting it ablaze." - icon = 'icons/obj/guns/incendiary_laser.dmi' - icon_state = "incen" - item_state = "incen" - origin_tech = list(TECH_COMBAT = 7, TECH_MAGNET = 4, TECH_ESOTERIC = 4) - matter = list(MATERIAL_ALUMINIUM = 1000, MATERIAL_PLASTIC = 500, MATERIAL_DIAMOND = 500) - projectile_type = /obj/item/projectile/beam/incendiary_laser - max_shots = 4 diff --git a/code/modules/projectiles/guns/energy/staves.dm b/code/modules/projectiles/guns/energy/staves.dm deleted file mode 100644 index b6259569fb860..0000000000000 --- a/code/modules/projectiles/guns/energy/staves.dm +++ /dev/null @@ -1,48 +0,0 @@ -/obj/item/gun/energy/staff - name = "staff of change" - desc = "An artefact that spits bolts of coruscating energy which cause the target's very form to reshape itself." - icon = 'icons/obj/guns/staff.dmi' - item_icons = null - icon_state = "staffofchange" - item_state = "staffofchange" - fire_sound = 'sound/weapons/emitter.ogg' - obj_flags = OBJ_FLAG_CONDUCTIBLE - slot_flags = SLOT_BELT|SLOT_BACK - w_class = ITEM_SIZE_LARGE - max_shots = 5 - projectile_type = /obj/item/projectile/change - origin_tech = null - self_recharge = 1 - charge_meter = 0 - var/required_antag_type = MODE_WIZARD - -/obj/item/gun/energy/staff/special_check(var/mob/user) - if(required_antag_type) - var/datum/antagonist/antag = get_antag_data(required_antag_type) - if(user.mind && !antag.is_antagonist(user.mind)) - to_chat(usr, "You focus your mind on \the [src], but nothing happens!") - return 0 - - return ..() - -/obj/item/gun/energy/staff/handle_click_empty(mob/user = null) - if (user) - user.visible_message("*fizzle*", "*fizzle*") - else - src.visible_message("*fizzle*") - playsound(src.loc, 'sound/effects/sparks1.ogg', 100, 1) - -/obj/item/gun/energy/staff/animate - name = "staff of animation" - desc = "An artefact that spits bolts of life-force which causes objects which are hit by it to animate and come to life! This magic doesn't affect machines." - max_shots = 5 - recharge_time = 5 SECONDS - projectile_type = /obj/item/projectile/animate - -/obj/item/gun/energy/staff/focus - name = "mental focus" - desc = "An artefact that channels the will of the user into destructive bolts of force. If you aren't careful with it, you might poke someone's brain out." - icon = 'icons/obj/wizard.dmi' - icon_state = "focus" - item_state = "focus" - projectile_type = /obj/item/projectile/forcebolt diff --git a/code/modules/projectiles/guns/energy/stun.dm b/code/modules/projectiles/guns/energy/stun.dm deleted file mode 100644 index 7346ac8c06178..0000000000000 --- a/code/modules/projectiles/guns/energy/stun.dm +++ /dev/null @@ -1,133 +0,0 @@ -/obj/item/gun/energy/taser - name = "electrolaser" - desc = "The NT Mk30 NL is a small, low capacity gun used for non-lethal takedowns. Produced by NT, it's actually a licensed version of a W-T design. It can switch between high and low intensity stun shots." - icon = 'icons/obj/guns/taser.dmi' - icon_state = "taser" - item_state = null //so the human update icon uses the icon_state instead. - max_shots = 5 - projectile_type = /obj/item/projectile/beam/stun - combustion = 0 - - init_firemodes = list( - list(mode_name="stun", projectile_type=/obj/item/projectile/beam/stun), - list(mode_name="shock", projectile_type=/obj/item/projectile/beam/stun/shock), - ) - -/obj/item/gun/energy/taser/carbine - name = "electrolaser carbine" - desc = "The NT Mk44 NL is a high capacity gun used for non-lethal takedowns. It can switch between high and low intensity stun shots." - icon = 'icons/obj/guns/taser_carbine.dmi' - icon_state = "tasercarbine" - w_class = ITEM_SIZE_LARGE - slot_flags = SLOT_BELT|SLOT_BACK - one_hand_penalty = 3 - origin_tech = list(TECH_COMBAT = 4, TECH_MATERIAL = 3, TECH_POWER = 3) - force = 8 - max_shots = 12 - accuracy = 1 - projectile_type = /obj/item/projectile/beam/stun/heavy - wielded_item_state = "tasercarbine-wielded" - - init_firemodes = list( - list(mode_name="stun", projectile_type=/obj/item/projectile/beam/stun/heavy), - list(mode_name="shock", projectile_type=/obj/item/projectile/beam/stun/shock/heavy), - ) - -/obj/item/gun/energy/taser/mounted - name = "mounted electrolaser" - self_recharge = 1 - use_external_power = 1 - has_safety = FALSE - -/obj/item/gun/energy/taser/mounted/cyborg - name = "electrolaser" - max_shots = 6 - recharge_time = 10 //Time it takes for shots to recharge (in ticks) - - -/obj/item/gun/energy/stunrevolver - name = "stun revolver" - desc = "An A&M X6 Zeus. Designed by al-Maliki & Mosley, but produced under the wing of the Free Trade Union. Industry spies have been trying to get a hold of the blueprints for half a decade." - icon = 'icons/obj/guns/stunrevolver.dmi' - icon_state = "stunrevolver" - item_state = "stunrevolver" - origin_tech = list(TECH_COMBAT = 3, TECH_MATERIAL = 3, TECH_POWER = 2) - projectile_type = /obj/item/projectile/energy/electrode - max_shots = 6 - combustion = 0 - -/obj/item/gun/energy/stunrevolver/rifle - name = "stun rifle" - desc = "An A&M X10 Thor. A vastly oversized variant of the A&M X6 Zeus. Fires overcharged electrodes to obliterate pain receptors without harming them too much." - icon = 'icons/obj/guns/stunrifle.dmi' - icon_state = "stunrifle" - item_state = "stunrifle" - w_class = ITEM_SIZE_HUGE - slot_flags = SLOT_BACK - one_hand_penalty = 6 - origin_tech = list(TECH_COMBAT = 4, TECH_MATERIAL = 3, TECH_POWER = 3) - force = 10 - max_shots = 10 - accuracy = 1 - projectile_type = /obj/item/projectile/energy/electrode/stunshot - wielded_item_state = "stunrifle-wielded" - -/obj/item/gun/energy/crossbow - name = "mini energy-crossbow" - desc = "A weapon favored by many mercenary stealth specialists." - icon = 'icons/obj/guns/energy_crossbow.dmi' - icon_state = "crossbow" - w_class = ITEM_SIZE_NORMAL - item_state = "crossbow" - origin_tech = list(TECH_COMBAT = 2, TECH_MAGNET = 2, TECH_ESOTERIC = 5) - matter = list(MATERIAL_STEEL = 2000) - slot_flags = SLOT_BELT - silenced = TRUE - fire_sound = 'sound/weapons/Genhit.ogg' - projectile_type = /obj/item/projectile/energy/bolt - max_shots = 8 - self_recharge = 1 - charge_meter = 0 - combustion = 0 - -/obj/item/gun/energy/crossbow/ninja - name = "energy dart thrower" - projectile_type = /obj/item/projectile/energy/dart - max_shots = 5 - -/obj/item/gun/energy/crossbow/ninja/mounted - use_external_power = 1 - has_safety = FALSE - -/obj/item/gun/energy/crossbow/largecrossbow - name = "energy crossbow" - desc = "A weapon favored by mercenary infiltration teams." - w_class = ITEM_SIZE_LARGE - force = 10 - one_hand_penalty = 1 - matter = list(MATERIAL_STEEL = 200000) - projectile_type = /obj/item/projectile/energy/bolt/large - -/obj/item/gun/energy/plasmastun - name = "plasma pulse projector" - desc = "The Mars Military Industries MA21 Selkie is a weapon that uses a laser pulse to ionise the local atmosphere, creating a disorienting pulse of plasma and deafening shockwave as the wave expands." - icon = 'icons/obj/guns/plasma_stun.dmi' - icon_state = "plasma_stun" - item_state = "plasma_stun" - origin_tech = list(TECH_COMBAT = 2, TECH_MATERIAL = 2, TECH_POWER = 3) - fire_delay = 20 - max_shots = 4 - projectile_type = /obj/item/projectile/energy/plasmastun - combustion = 0 - -/obj/item/gun/energy/confuseray - name = "disorientator" - desc = "The W-T Mk. 4 Disorientator is a small, low capacity, and short-ranged energy projector intended for personal defense with minimal risk of permanent damage or cross-fire." - icon = 'icons/obj/guns/confuseray.dmi' - icon_state = "confuseray" - safety_icon = "safety" - origin_tech = list(TECH_COMBAT = 2, TECH_MATERIAL = 2, TECH_POWER = 2) - w_class = ITEM_SIZE_SMALL - max_shots = 4 - projectile_type = /obj/item/projectile/beam/confuseray - combustion = 0 diff --git a/code/modules/projectiles/guns/energy/vox.dm b/code/modules/projectiles/guns/energy/vox.dm deleted file mode 100644 index b191bf8042ad1..0000000000000 --- a/code/modules/projectiles/guns/energy/vox.dm +++ /dev/null @@ -1,64 +0,0 @@ -/datum/extension/voxform - base_type = /datum/extension/voxform - -/datum/extension/voxform/proc/check_held_user(var/mob/living/carbon/human/user, var/atom/movable/thing) - if(!istype(user)) - return FALSE - if(user.species.get_bodytype(user) != SPECIES_VOX && user.species.get_bodytype(user) != SPECIES_VOX_ARMALIS && user.unEquip(thing)) - to_chat(user, SPAN_WARNING("\The [thing] hisses and wriggles out of your grasp!")) - playsound(user, 'sound/voice/BugHiss.ogg', 50, 1) - return FALSE - return TRUE - -/obj/item/gun/special_check(var/mob/living/carbon/human/user) - . = ..() - if(!QDELETED(src) && src.loc == user && has_extension(src, /datum/extension/voxform)) - var/datum/extension/voxform/voxform = get_extension(src, /datum/extension/voxform) - . = voxform.check_held_user(user, src) - -/* - * Vox Darkmatter Cannon - */ -/obj/item/gun/energy/darkmatter - name = "flux cannon" - desc = "A vicious beam weapon that crushes targets with dark-matter gravity pulses. Parts of it twitch and writhe, as if alive." - icon = 'icons/obj/guns/darkcannon.dmi' - icon_state = "darkcannon" - item_state = "darkcannon" - w_class = ITEM_SIZE_LARGE - projectile_type = /obj/item/projectile/beam/stun/darkmatter - one_hand_penalty = 2 //a little bulky - self_recharge = 1 - init_firemodes = list( - list(mode_name="stunning", burst=1, fire_delay=null, move_delay=null, projectile_type=/obj/item/projectile/beam/stun/darkmatter, charge_cost = 50), - list(mode_name="focused", burst=1, fire_delay=null, move_delay=null, projectile_type=/obj/item/projectile/beam/darkmatter, charge_cost = 75), - list(mode_name="scatter burst", burst=8, fire_delay=null, move_delay=4, projectile_type=/obj/item/projectile/energy/darkmatter, charge_cost = 10), - ) - -/obj/item/gun/energy/darkmatter/Initialize() - . = ..() - set_extension(src, /datum/extension/voxform) - -/* - * Vox Sonic Cannon - */ -/obj/item/gun/energy/sonic - name = "soundcannon" - desc = "A vicious sonic weapon of alien manufacture. Parts of it quiver gelatinously, as though the insectile-looking thing is alive." - icon = 'icons/obj/guns/noise.dmi' - icon_state = "noise" - item_state = "noise" - w_class = ITEM_SIZE_LARGE - one_hand_penalty = 1 - self_recharge = 1 - recharge_time = 10 - fire_delay = 15 - projectile_type=/obj/item/projectile/energy/plasmastun/sonic/weak - init_firemodes = list( - list(mode_name="normal", projectile_type=/obj/item/projectile/energy/plasmastun/sonic/weak, charge_cost = 50), - list(mode_name="overcharge", projectile_type=/obj/item/projectile/energy/plasmastun/sonic/strong, charge_cost = 200), - ) - -/obj/item/gun/energy/sonic/Initialize() - . = ..() - set_extension(src, /datum/extension/voxform) diff --git a/code/modules/projectiles/guns/launcher.dm b/code/modules/projectiles/guns/launcher.dm deleted file mode 100644 index 93819fbee569c..0000000000000 --- a/code/modules/projectiles/guns/launcher.dm +++ /dev/null @@ -1,31 +0,0 @@ -/obj/item/gun/launcher - name = "launcher" - desc = "A device that launches things." - icon = 'icons/obj/guns/launchers.dmi' - icon_state = "riotgun" - w_class = ITEM_SIZE_HUGE - obj_flags = OBJ_FLAG_CONDUCTIBLE - slot_flags = SLOT_BACK - - var/release_force = 0 - var/throw_distance = 10 - fire_sound_text = "a launcher firing" - -//This normally uses a proc on projectiles and our ammo is not strictly speaking a projectile. -/obj/item/gun/launcher/can_hit(var/mob/living/target as mob, var/mob/living/user as mob) - return 1 - -//Override this to avoid a runtime with suicide handling. -/obj/item/gun/launcher/handle_suicide(mob/living/user) - to_chat(user, "Shooting yourself with \a [src] is pretty tricky. You can't seem to manage it.") - return - -/obj/item/gun/launcher/proc/update_release_force(obj/item/projectile) - return 0 - -/obj/item/gun/launcher/process_projectile(obj/item/projectile, mob/user, atom/target, var/target_zone, var/params=null, var/pointblank=0, var/reflex=0) - update_release_force(projectile) - projectile.dropInto(user.loc) - projectile.throw_at(target, throw_distance, release_force, user) - play_fire_sound(user,projectile) - return 1 diff --git a/code/modules/projectiles/guns/launcher/alien.dm b/code/modules/projectiles/guns/launcher/alien.dm deleted file mode 100644 index e63e0089569e2..0000000000000 --- a/code/modules/projectiles/guns/launcher/alien.dm +++ /dev/null @@ -1,55 +0,0 @@ -/obj/item/gun/launcher/alien - var/last_regen = 0 - var/ammo_gen_time = 100 - var/max_ammo = 3 - var/ammo = 3 - var/ammo_type - var/ammo_name - -/obj/item/gun/launcher/alien/Initialize() - . = ..() - START_PROCESSING(SSobj, src) - last_regen = world.time - -/obj/item/gun/launcher/alien/Destroy() - STOP_PROCESSING(SSobj, src) - return ..() - -/obj/item/gun/launcher/alien/Process() - if(ammo < max_ammo && world.time > last_regen + ammo_gen_time) - ammo++ - last_regen = world.time - update_icon() - -/obj/item/gun/launcher/alien/examine(mob/user) - . = ..() - to_chat(user, "It has [ammo] [ammo_name]\s remaining.") - -/obj/item/gun/launcher/alien/consume_next_projectile() - if(ammo < 1) return null - if(ammo == max_ammo) //stops people from buffering a reload (gaining effectively +1 to the clip) - last_regen = world.time - ammo-- - return new ammo_type - -/obj/item/gun/launcher/alien/Initialize() - . = ..() - set_extension(src, /datum/extension/voxform) - -//Vox pinning weapon. -/obj/item/gun/launcher/alien/spikethrower - - name = "spike thrower" - desc = "A vicious alien projectile weapon. Parts of it quiver gelatinously, as though the thing is insectile and alive." - w_class = ITEM_SIZE_LARGE - ammo_name = "spike" - ammo_type = /obj/item/spike - release_force = 30 - icon = 'icons/obj/guns/spikethrower.dmi' - icon_state = "spikethrower3" - item_state = "spikethrower" - fire_sound_text = "a strange noise" - fire_sound = 'sound/weapons/spike.ogg' - -/obj/item/gun/launcher/alien/spikethrower/on_update_icon() - icon_state = "spikethrower[ammo]" \ No newline at end of file diff --git a/code/modules/projectiles/guns/launcher/crossbow.dm b/code/modules/projectiles/guns/launcher/crossbow.dm deleted file mode 100644 index adbd5dd994b24..0000000000000 --- a/code/modules/projectiles/guns/launcher/crossbow.dm +++ /dev/null @@ -1,295 +0,0 @@ -//AMMUNITION - -/obj/item/arrow - name = "bolt" - desc = "It's got a tip for you - get the point?" - icon = 'icons/obj/weapons/other.dmi' - icon_state = "bolt" - item_state = "bolt" - throwforce = 8 - w_class = ITEM_SIZE_NORMAL - sharp = TRUE - lock_picking_level = 3 - -/obj/item/arrow/proc/removed() //Helper for metal rods falling apart. - return - -/obj/item/spike - name = "alloy spike" - desc = "It's about a foot of weird silver metal with a wicked point." - sharp = TRUE - throwforce = 5 - w_class = ITEM_SIZE_SMALL - icon = 'icons/obj/weapons/other.dmi' - icon_state = "metal-rod" - item_state = "bolt" - -/obj/item/arrow/quill - name = "vox quill" - desc = "A wickedly barbed quill from some bizarre animal." - icon_state = "quill" - item_state = "quill" - throwforce = 5 - -/obj/item/arrow/rod - name = "metal rod" - desc = "Don't cry for me, Orithena." - icon_state = "metal-rod" - -/obj/item/arrow/rod/removed(mob/user) - if(throwforce == 15) // The rod has been superheated - we don't want it to be useable when removed from the bow. - to_chat(user, "[src] shatters into a scattering of overstressed metal shards as it leaves the crossbow.") - var/obj/item/material/shard/shrapnel/steel/shrapnel = new - shrapnel.dropInto(loc) - qdel(src) - -/obj/item/gun/launcher/crossbow - name = "powered crossbow" - desc = "A modern twist on an old classic. Pick up that can." - icon = 'icons/obj/guns/crossbow.dmi' - icon_state = "crossbow" - item_state = "crossbow-solid" - fire_sound = 'sound/weapons/punchmiss.ogg' // TODO: Decent THWOK noise. - fire_sound_text = "a solid thunk" - fire_delay = 25 - slot_flags = SLOT_BACK - has_safety = FALSE - - var/obj/item/bolt - var/tension = 0 // Current draw on the bow. - var/max_tension = 3 // Highest possible tension. - var/release_speed = 10 // Speed per unit of tension. - var/obj/item/cell/cell = null // Used for firing superheated rods. - var/current_user // Used to check if the crossbow has changed hands since being drawn. - var/draw_time = 20 // Time needed to draw the bow back by one "tension" - -/obj/item/gun/launcher/crossbow/toggle_safety(var/mob/user) - to_chat(user, "There's no safety on \the [src]!") - -/obj/item/gun/launcher/crossbow/update_release_force() - release_force = tension*release_speed - -/obj/item/gun/launcher/crossbow/consume_next_projectile(mob/user=null) - if(tension <= 0) - to_chat(user, "\The [src] is not drawn back!") - return null - return bolt - -/obj/item/gun/launcher/crossbow/handle_post_fire(mob/user, atom/target) - bolt = null - tension = 0 - update_icon() - ..() - -/obj/item/gun/launcher/crossbow/attack_self(mob/living/user as mob) - if(tension) - if(bolt) - user.visible_message("[user] relaxes the tension on [src]'s string and removes [bolt].","You relax the tension on [src]'s string and remove [bolt].") - bolt.dropInto(loc) - var/obj/item/arrow/A = bolt - bolt = null - A.removed(user) - else - user.visible_message("[user] relaxes the tension on [src]'s string.","You relax the tension on [src]'s string.") - tension = 0 - update_icon() - else - draw(user) - -/obj/item/gun/launcher/crossbow/proc/draw(var/mob/user as mob) - - if(!bolt) - to_chat(user, "You don't have anything nocked to [src].") - return - - if(user.restrained()) - return - - current_user = user - user.visible_message("[user] begins to draw back the string of [src].","You begin to draw back the string of [src].") - tension = 1 - - while(bolt && tension && loc == current_user) - if(!do_after(user, draw_time, src, DO_PUBLIC_UNIQUE)) //crossbow strings don't just magically pull back on their own. - user.visible_message("[usr] stops drawing and relaxes the string of [src].","You stop drawing back and relax the string of [src].") - tension = 0 - update_icon() - return - - //double check that the user hasn't removed the bolt in the meantime - if(!(bolt && tension && loc == current_user)) - return - - tension++ - update_icon() - - if(tension >= max_tension) - tension = max_tension - to_chat(usr, "[src] clunks as you draw the string to its maximum tension!") - return - - user.visible_message("[usr] draws back the string of [src]!","You continue drawing back the string of [src]!") - -/obj/item/gun/launcher/crossbow/proc/increase_tension(var/mob/user as mob) - - if(!bolt || !tension || current_user != user) //Arrow has been fired, bow has been relaxed or user has changed. - return - - -/obj/item/gun/launcher/crossbow/attackby(obj/item/W, mob/user) - - if(istype(W, /obj/item/rcd)) - var/obj/item/rcd/rcd = W - if(rcd.crafting && user.unEquip(rcd) && user.unEquip(src)) - new /obj/item/gun/launcher/crossbow/rapidcrossbowdevice(get_turf(src)) - qdel(rcd) - qdel_self() - else - to_chat(user, SPAN_WARNING("\The [rcd] is not prepared for installation in \the [src].")) - return - - if(!bolt) - if (istype(W,/obj/item/arrow) && user.unEquip(W, src)) - bolt = W - user.visible_message("[user] slides [bolt] into [src].","You slide [bolt] into [src].") - update_icon() - return - else if(istype(W,/obj/item/stack/material/rods)) - var/obj/item/stack/material/rods/R = W - if (R.use(1)) - bolt = new /obj/item/arrow/rod(src) - bolt.fingerprintslast = src.fingerprintslast - update_icon() - user.visible_message("[user] jams [bolt] into [src].","You jam [bolt] into [src].") - superheat_rod(user) - return - - if(istype(W, /obj/item/cell)) - if(!cell) - if(!user.unEquip(W, src)) - return - cell = W - to_chat(user, "You jam [cell] into [src] and wire it to the firing coil.") - superheat_rod(user) - else - to_chat(user, "[src] already has a cell installed.") - - else if(isScrewdriver(W)) - if(cell) - var/obj/item/C = cell - C.dropInto(user.loc) - to_chat(user, "You jimmy [cell] out of [src] with [W].") - cell = null - else - to_chat(user, "[src] doesn't have a cell installed.") - - else - ..() - -/obj/item/gun/launcher/crossbow/proc/superheat_rod(var/mob/user) - if(!user || !cell || !bolt) return - if(cell.charge < 500) return - if(bolt.throwforce >= 15) return - if(!istype(bolt,/obj/item/arrow/rod)) return - - to_chat(user, "[bolt] plinks and crackles as it begins to glow red-hot.") - bolt.throwforce = 15 - bolt.icon_state = "metal-rod-superheated" - cell.use(500) - -/obj/item/gun/launcher/crossbow/on_update_icon() - if(tension > 1) - icon_state = "crossbow-drawn" - else if(bolt) - icon_state = "crossbow-nocked" - else - icon_state = "crossbow" - -/*//////////////////////////// -// Rapid Crossbow Device // -*///////////////////////////// - -/obj/item/arrow/rapidcrossbowdevice - name = "flashforged bolt" - desc = "The ultimate ghetto deconstruction implement." - throwforce = 4 - -/obj/item/gun/launcher/crossbow/rapidcrossbowdevice - name = "rapid crossbow device" - desc = "A hacked RCD turns an innocent construction tool into the penultimate deconstruction tool. Flashforges bolts using matter units when the string is drawn back." - icon_state = "rxb" - slot_flags = null - draw_time = 10 - var/stored_matter = 0 - var/max_stored_matter = 120 - var/boltcost = 30 - -/obj/item/gun/launcher/crossbow/rapidcrossbowdevice/proc/generate_bolt(var/mob/user) - if(stored_matter >= boltcost && !bolt) - bolt = new/obj/item/arrow/rapidcrossbowdevice(src) - stored_matter -= boltcost - to_chat(user, "The RCD flashforges a new bolt!") - queue_icon_update() - else - to_chat(user, "The \'Low Ammo\' light on the device blinks yellow.") - flick("[icon_state]-empty", src) - - -/obj/item/gun/launcher/crossbow/rapidcrossbowdevice/attack_self(mob/living/user as mob) - if(tension) - user.visible_message("[user] relaxes the tension on [src]'s string.","You relax the tension on [src]'s string.") - tension = 0 - update_icon() - else - generate_bolt(user) - draw(user) - -/obj/item/gun/launcher/crossbow/rapidcrossbowdevice/attackby(obj/item/W, mob/user) - if(istype(W, /obj/item/rcd_ammo)) - var/obj/item/rcd_ammo/cartridge = W - if(stored_matter >= max_stored_matter) - to_chat(user, "The RCD is at maximum capacity.") - return - var/matter_exchange = min(cartridge.remaining,max_stored_matter - stored_matter) - stored_matter += matter_exchange - cartridge.remaining -= matter_exchange - if(cartridge.remaining <= 0) - qdel(W) - cartridge.matter = list(MATERIAL_STEEL = 500 * cartridge.remaining,MATERIAL_GLASS = 250 * cartridge.remaining) - playsound(src.loc, 'sound/machines/click.ogg', 50, 1) - to_chat(user, "The RCD now holds [stored_matter]/[max_stored_matter] matter-units.") - update_icon() - - if(istype(W, /obj/item/arrow/rapidcrossbowdevice)) - var/obj/item/arrow/rapidcrossbowdevice/A = W - if((stored_matter + 10) > max_stored_matter) - to_chat(user, "Unable to reclaim flashforged bolt. The RCD can't hold that many additional matter-units.") - return - stored_matter += 10 - qdel(A) - playsound(src.loc, 'sound/machines/click.ogg', 50, 1) - to_chat(user, "Flashforged bolt reclaimed. The RCD now holds [stored_matter]/[max_stored_matter] matter-units.") - update_icon() - -/obj/item/gun/launcher/crossbow/rapidcrossbowdevice/on_update_icon() - overlays.Cut() - - if(bolt) - overlays += "rxb-bolt" - - var/ratio = 0 - if(stored_matter < boltcost) - ratio = 0 - else - ratio = stored_matter / max_stored_matter - ratio = max(round(ratio, 0.25) * 100, 25) - overlays += "rxb-[ratio]" - - if(tension > 1) - icon_state = "rxb-drawn" - else - icon_state = "rxb" - -/obj/item/gun/launcher/crossbow/rapidcrossbowdevice/examine(mob/user) - . = ..() - to_chat(user, "It currently holds [stored_matter]/[max_stored_matter] matter-units.") diff --git a/code/modules/projectiles/guns/launcher/foam_gun.dm b/code/modules/projectiles/guns/launcher/foam_gun.dm deleted file mode 100644 index 4fb81e0aea839..0000000000000 --- a/code/modules/projectiles/guns/launcher/foam_gun.dm +++ /dev/null @@ -1,139 +0,0 @@ -/obj/item/gun/launcher/foam - name = "foam blaster" - desc = "The classic Jorf blaster!" - icon = 'icons/obj/guns/foam.dmi' - icon_state = "blaster" - item_state = "foam_gun" - force = 1 - w_class = ITEM_SIZE_SMALL - obj_flags = null - slot_flags = SLOT_BELT | SLOT_HOLSTER - release_force = 1.5 - throw_distance = 6 - accuracy = 1 - one_hand_penalty = 0 - fire_sound = 'sound/weapons/foamblaster.ogg' - fire_sound_text = "a pleasing 'pomp'" - matter = list(MATERIAL_PLASTIC = 200) - - var/max_darts = 1 - var/list/darts = new/list() - -/obj/item/gun/launcher/foam/attackby(obj/item/I, mob/user) - if(istype(I, /obj/item/foam_dart)) - if(darts.len < max_darts) - if(!user.unEquip(I, src)) - return - darts += I - to_chat(user, SPAN_NOTICE("You slot \the [I] into \the [src].")) - else - to_chat(user, SPAN_WARNING("\The [src] can hold no more darts.")) - -/obj/item/gun/launcher/foam/consume_next_projectile() - if(darts.len) - var/obj/item/I = darts[1] - darts -= I - return I - return null - -/obj/item/gun/launcher/foam/CtrlAltClick(mob/user) - if(darts.len && src.loc == user) - to_chat(user, "You empty \the [src].") - for(var/obj/item/foam_dart/D in darts) - darts -= D - D.dropInto(user.loc) - D.mix_up() - return 1 - return 0 - -/obj/item/gun/launcher/foam/burst - name = "foam machine pistol" - desc = "The Jorf Outlander, a machine pistol blaster, fires two darts in rapid succession. Holds 4 darts." - icon_state = "pistol" - w_class = ITEM_SIZE_NORMAL - burst = 2 - fire_delay = 12 - one_hand_penalty = 1 - max_darts = 4 - -/obj/item/gun/launcher/foam/revolver - name = "foam revolver" - desc = "The Jorf Desperado is a revolver blaster, with a hammer action so you can fan the hammer like a real desperado! It holds 6 darts." - icon_state = "revolver" - w_class = ITEM_SIZE_NORMAL - fire_delay = 4 - one_hand_penalty = 1 - max_darts = 6 - -/obj/item/gun/launcher/foam/revolver/tampered - release_force = 3 - throw_distance = 12 - -/obj/item/gun/launcher/foam/revolver/tampered/examine(mob/user, distance) - . = ..() - if(distance <= 1) - to_chat(user, "The hammer is a lot more resistant than you'd expect.") - -//the projectile -/obj/item/foam_dart - name = "foam dart" - desc = "An offical Jorf brand foam dart, for use only with offical Jorf brand foam dart launching products." - icon = 'icons/obj/guns/foam.dmi' - icon_state = "dart" - w_class = ITEM_SIZE_TINY - force = 0 - randpixel = 10 - throwforce = 0 - throw_range = 3 - does_spin = FALSE - -/obj/item/foam_dart/Initialize() - mix_up() - . = ..() - -/obj/item/foam_dart/proc/mix_up() - pixel_x = rand(-randpixel, randpixel) - pixel_y = rand(-randpixel, randpixel) - set_dir(pick(GLOB.alldirs)) - -/obj/item/foam_dart/tampered - throwforce = 4 - -/obj/item/foam_dart/tampered/examine(mob/user, distance) - . = ..() - if(distance <= 1) - to_chat(user, SPAN_WARNING("Closer inspection reveals some weights in the rubber dome.")) - -//boxes of the projectile -/obj/item/storage/box/foam_darts - name = "box of foam darts" - desc = "It's a box of offical Jorf brand foam darts, for use only with offical Jorf brand products." - icon = 'icons/obj/guns/foam.dmi' - icon_state = "dart_box" - startswith = list(/obj/item/foam_dart = 14) - -//preset boxes -/obj/item/storage/box/large/foam_gun - name = "\improper Jorf blaster set" - desc = "It's an official Jorf brand blaster, with three official Jorf brand darts!" - icon = 'icons/obj/guns/foam.dmi' - icon_state = "blaster_box" - startswith = list(/obj/item/gun/launcher/foam, - /obj/item/foam_dart = 3) - -/obj/item/storage/box/large/foam_gun/burst - name = "\improper Jorf Outlander set" - desc = "It's an official Jorf brand Outlander, with six official Jorf brand darts!" - startswith = list(/obj/item/gun/launcher/foam/burst, - /obj/item/foam_dart = 6) - -/obj/item/storage/box/large/foam_gun/revolver - name = "\improper Jorf Desperado set" - desc = "It's an official Jorf brand Desperado, with eight official Jorf brand darts!" - startswith = list(/obj/item/gun/launcher/foam/revolver, - /obj/item/foam_dart = 8) - -/obj/item/storage/box/large/foam_gun/revolver/tampered - desc = "It's a Jorf brand Desperado, with fourteen Jorf brand darts!" - startswith = list(/obj/item/gun/launcher/foam/revolver/tampered, - /obj/item/foam_dart/tampered = 14) \ No newline at end of file diff --git a/code/modules/projectiles/guns/launcher/grenade_launcher.dm b/code/modules/projectiles/guns/launcher/grenade_launcher.dm deleted file mode 100644 index 4c3a8bdc5e763..0000000000000 --- a/code/modules/projectiles/guns/launcher/grenade_launcher.dm +++ /dev/null @@ -1,160 +0,0 @@ -/obj/item/gun/launcher/grenade - name = "grenade launcher" - desc = "A bulky pump-action grenade launcher. Holds up to 6 grenades in a revolving magazine." - icon_state = "riotgun" - item_state = "riotgun" - origin_tech = list(TECH_COMBAT = 2, TECH_MATERIAL = 3) - w_class = ITEM_SIZE_HUGE - force = 10 - - fire_sound = 'sound/weapons/empty.ogg' - fire_sound_text = "a metallic thunk" - screen_shake = 0 - throw_distance = 7 - release_force = 5 - combustion = 1 - - var/obj/item/grenade/chambered - var/list/grenades = new/list() - var/max_grenades = 5 //holds this + one in the chamber - var/whitelisted_grenades = list( - /obj/item/grenade/frag/shell) - - var/blacklisted_grenades = list( - /obj/item/grenade/flashbang/clusterbang, - /obj/item/grenade/frag) - - matter = list(MATERIAL_STEEL = 2000) - -//revolves the magazine, allowing players to choose between multiple grenade types -/obj/item/gun/launcher/grenade/proc/pump(mob/M as mob) - playsound(M, 'sound/weapons/shotgunpump.ogg', 60, 1) - - var/obj/item/grenade/next - if(grenades.len) - next = grenades[1] //get this first, so that the chambered grenade can still be removed if the grenades list is empty - if(chambered) - grenades += chambered //rotate the revolving magazine - chambered = null - if(next) - grenades -= next //Remove grenade from loaded list. - chambered = next - to_chat(M, "You pump [src], loading \a [next] into the chamber.") - else - to_chat(M, "You pump [src], but the magazine is empty.") - update_icon() - -/obj/item/gun/launcher/grenade/examine(mob/user, distance) - . = ..() - if(distance <= 2) - var/grenade_count = grenades.len + (chambered? 1 : 0) - to_chat(user, "Has [grenade_count] grenade\s remaining.") - if(chambered) - to_chat(user, "\A [chambered] is chambered.") - -/obj/item/gun/launcher/grenade/proc/load(obj/item/grenade/G, mob/user) - if(!can_load_grenade_type(G, user)) - return - - if(grenades.len >= max_grenades) - to_chat(user, "\The [src] is full.") - return - if(!user.unEquip(G, src)) - return - grenades.Insert(1, G) //add to the head of the list, so that it is loaded on the next pump - user.visible_message("\The [user] inserts \a [G] into \the [src].", "You insert \a [G] into \the [src].") - -/obj/item/gun/launcher/grenade/proc/unload(mob/user) - if(grenades.len) - var/obj/item/grenade/G = grenades[grenades.len] - grenades.len-- - user.put_in_hands(G) - user.visible_message("\The [user] removes \a [G] from [src].", "You remove \a [G] from \the [src].") - else - to_chat(user, "\The [src] is empty.") - -/obj/item/gun/launcher/grenade/attack_self(mob/user) - pump(user) - -/obj/item/gun/launcher/grenade/attackby(obj/item/I, mob/user) - if((istype(I, /obj/item/grenade))) - load(I, user) - else - ..() - -/obj/item/gun/launcher/grenade/attack_hand(mob/user) - if(user.get_inactive_hand() == src) - unload(user) - else - ..() - -/obj/item/gun/launcher/grenade/consume_next_projectile() - if(chambered) - chambered.det_time = 10 - chambered.activate(null) - return chambered - -/obj/item/gun/launcher/grenade/handle_post_fire(mob/user) - log_and_message_admins("fired a grenade ([chambered.name]) from a grenade launcher.") - - chambered = null - ..() - -/obj/item/gun/launcher/grenade/proc/can_load_grenade_type(obj/item/grenade/G, mob/user) - if(is_type_in_list(G, blacklisted_grenades) && ! is_type_in_list(G, whitelisted_grenades)) - to_chat(user, "\The [G] doesn't seem to fit in \the [src]!") - return FALSE - return TRUE - -// For uplink purchase, comes loaded with a random assortment of grenades -/obj/item/gun/launcher/grenade/loaded/Initialize() - . = ..() - - var/list/grenade_types = list( - /obj/item/grenade/anti_photon = 2, - /obj/item/grenade/smokebomb = 2, - /obj/item/grenade/chem_grenade/teargas = 2, - /obj/item/grenade/flashbang = 3, - /obj/item/grenade/empgrenade = 3, - /obj/item/grenade/frag/shell = 1, - ) - - var/grenade_type = pickweight(grenade_types) - chambered = new grenade_type(src) - for(var/i in 1 to max_grenades) - grenade_type = pickweight(grenade_types) - grenades += new grenade_type(src) - -//Underslung grenade launcher to be used with the Z8 -/obj/item/gun/launcher/grenade/underslung - name = "underslung grenade launcher" - desc = "Not much more than a tube and a firing mechanism, this grenade launcher is designed to be fitted to a rifle." - w_class = ITEM_SIZE_NORMAL - force = 5 - has_safety = FALSE - safety_state = 0 - max_grenades = 0 - -/obj/item/gun/launcher/grenade/underslung/attack_self() - return - -//load and unload directly into chambered -/obj/item/gun/launcher/grenade/underslung/load(obj/item/grenade/G, mob/user) - if(!can_load_grenade_type(G, user)) - return - - if(chambered) - to_chat(user, "\The [src] is already loaded.") - return - if(!user.unEquip(G, src)) - return - chambered = G - user.visible_message("\The [user] load \a [G] into \the [src].", "You load \a [G] into \the [src].") - -/obj/item/gun/launcher/grenade/underslung/unload(mob/user) - if(chambered) - user.put_in_hands(chambered) - user.visible_message("\The [user] removes \a [chambered] from \the[src].", "You remove \a [chambered] from \the [src].") - chambered = null - else - to_chat(user, "\The [src] is empty.") diff --git a/code/modules/projectiles/guns/launcher/money_cannon.dm b/code/modules/projectiles/guns/launcher/money_cannon.dm deleted file mode 100644 index a59e3b706493c..0000000000000 --- a/code/modules/projectiles/guns/launcher/money_cannon.dm +++ /dev/null @@ -1,192 +0,0 @@ -/obj/item/gun/launcher/money - name = "money cannon" - desc = "A blocky, plastic novelty launcher that claims to be able to shoot money at considerable velocities." - icon_state = "money_launcher" - item_state = "money_launcher" - origin_tech = list(TECH_COMBAT = 1, TECH_MATERIAL = 1) - slot_flags = SLOT_BELT - w_class = ITEM_SIZE_SMALL - release_force = 80 - fire_sound_text = "a whoosh and a crisp, papery rustle" - fire_delay = 1 - fire_sound = 'sound/weapons/gunshot/money_launcher.ogg' - var/emagged = FALSE - var/max_capacity = 2000 - - var/receptacle_value = 0 - var/dispensing = 20 - -/obj/item/gun/launcher/money/hacked - emagged = TRUE - -/obj/item/gun/launcher/money/proc/vomit_cash(var/mob/vomit_onto, var/projectile_vomit) - var/bundle_worth = Floor(receptacle_value / 10) - if(bundle_worth > max_capacity / 10) - bundle_worth = max_capacity / 10 - log_warning("[src] has more than [max_capacity] currency loaded!") - var/turf/T = get_turf(vomit_onto) - for(var/i = 1 to 10) - var/nv = bundle_worth - if (i <= (receptacle_value - 10 * bundle_worth)) - nv++ - if (!nv) - break - var/obj/item/spacecash/bundle/bling = new(T) - bling.worth = nv - bling.update_icon() - if(projectile_vomit) - for(var/j = 1, j <= rand(2, 4), j++) - step(bling, pick(GLOB.cardinal)) - - if(projectile_vomit) - vomit_onto.AdjustStunned(3) - vomit_onto.AdjustWeakened(3) - vomit_onto.visible_message("\The [vomit_onto] blasts themselves full in the face with \the [src]!") - playsound(T, "sound/weapons/gunshot/money_launcher_jackpot.ogg", 100, 1) - else - vomit_onto.visible_message("\The [vomit_onto] ejects a few [GLOB.using_map.local_currency_name] into their face.") - playsound(T, 'sound/weapons/gunshot/money_launcher.ogg', 100, 1) - - receptacle_value = 0 - -/obj/item/gun/launcher/money/proc/make_it_rain(var/mob/user) - vomit_cash(user, receptacle_value >= 10) - -/obj/item/gun/launcher/money/update_release_force() - if(!emagged) - release_force = 0 - return - - // Must launch at least 100 thaler to incur damage. - release_force = dispensing / 100 - -/obj/item/gun/launcher/money/proc/unload_receptacle(mob/user) - if(receptacle_value < 1) - to_chat(user, "There's no money in [src].") - return - - var/obj/item/spacecash/bling = new /obj/item/spacecash/bundle() - bling.worth = receptacle_value - bling.update_icon() - user.put_in_hands(bling) - to_chat(user, "You eject [receptacle_value] [GLOB.using_map.local_currency_name_singular] from [src]'s receptacle.") - receptacle_value = 0 - -/obj/item/gun/launcher/money/proc/absorb_cash(var/obj/item/spacecash/bling, mob/user) - if(!istype(bling) || !bling.worth || bling.worth < 1) - to_chat(user, "[src] refuses to pick up [bling].") - return - if(receptacle_value >= max_capacity) - to_chat(user, SPAN_WARNING("There's no space in the receptacle for [bling].")) - return - else if (receptacle_value && receptacle_value + bling.worth >= max_capacity) //If we have enough money to fill it to capacity - bling.worth -= max_capacity - receptacle_value - receptacle_value = max_capacity - to_chat(user, SPAN_NOTICE("You load [src] to capacity with [bling].")) - if(!bling.worth) - qdel(bling) - else - bling.update_icon() - return - receptacle_value += bling.worth - to_chat(user, "You load [bling] into [src].") - qdel(bling) - -/obj/item/gun/launcher/money/consume_next_projectile(mob/user=null) - if(!receptacle_value || receptacle_value < 1) - return null - - var/obj/item/spacecash/bling = new /obj/item/spacecash/bundle() - if(receptacle_value >= dispensing) - bling.worth = dispensing - receptacle_value -= dispensing - else - bling.worth = receptacle_value - receptacle_value = 0 - - bling.update_icon() - update_release_force(bling.worth) - if(release_force >= 1) - var/datum/effect/effect/system/spark_spread/s = new() - s.set_up(3, 1, src) - s.start() - - return bling - -/obj/item/gun/launcher/money/attack_self(mob/user as mob) - var/disp_amount = min(input(user, "How many [GLOB.using_map.local_currency_name_singular] do you want to dispense at a time? (0 to [src.receptacle_value])", "Money Cannon Settings", 20) as num, receptacle_value) - - if (disp_amount < 1) - to_chat(user, "You have to dispense at least one [GLOB.using_map.local_currency_name_singular] at a time!") - return - - src.dispensing = disp_amount - to_chat(user, "You set [src] to dispense [dispensing] [GLOB.using_map.local_currency_name_singular] at a time.") - -/obj/item/gun/launcher/money/attack_hand(mob/user as mob) - if(user.get_inactive_hand() == src) - unload_receptacle(user) - else - return ..() - -/obj/item/gun/launcher/money/attackby(obj/item/W as obj, mob/user as mob) - if(istype(W, /obj/item/spacecash)) - var/obj/item/spacecash/bling = W - if(bling.worth < 1) - to_chat(user, "You can't seem to get the bills to slide into the receptacle.") - return - if(receptacle_value >= max_capacity) - to_chat(user, SPAN_WARNING("There's no space in the receptacle for [bling].")) - return - else if (receptacle_value && receptacle_value + bling.worth > max_capacity) //If we have enough money to fill it to capacity - bling.worth -= max_capacity - receptacle_value - receptacle_value = max_capacity - to_chat(user, SPAN_NOTICE("You load [src] to capacity with [bling].")) - if(!bling.worth) - qdel(bling) - else - bling.update_icon() - return - receptacle_value += bling.worth - to_chat(user, "You slide [bling.worth] [GLOB.using_map.local_currency_name_singular] into [src]'s receptacle.") - qdel(bling) - - else - to_chat(user, "That's not going to fit in there.") - -/obj/item/gun/launcher/money/examine(mob/user) - . = ..(user) - to_chat(user, "It is configured to dispense [dispensing] [GLOB.using_map.local_currency_name_singular] at a time.") - - if(receptacle_value >= 1) - to_chat(user, "The receptacle is loaded with [receptacle_value] [GLOB.using_map.local_currency_name_singular].") - - else - to_chat(user, "The receptacle is empty.") - - if(emagged) - to_chat(user, "Its motors are severely overloaded.") - -/obj/item/gun/launcher/money/handle_suicide(mob/living/user) - if(!ishuman(user)) - return - - var/mob/living/carbon/human/M = user - M.visible_message("[user] sticks [src] in their mouth, ready to pull the trigger...") - - if(!do_after(user, 4 SECONDS, do_flags = DO_DEFAULT | DO_USER_UNIQUE_ACT)) - M.visible_message("[user] decided life was worth living.") - return - - src.make_it_rain(user) - -/obj/item/gun/launcher/money/emag_act(var/remaining_charges, var/mob/user) - // Overloads the motors, causing it to shoot money harder and do harm. - if(!emagged) - emagged = TRUE - to_chat(user, "You slide the sequencer into [src]... only for it to spit it back out and emit a motorized squeal!") - var/datum/effect/effect/system/spark_spread/s = new() - s.set_up(3, 1, src) - s.start() - else - to_chat(user, "[src] seems to have been tampered with already.") diff --git a/code/modules/projectiles/guns/launcher/net.dm b/code/modules/projectiles/guns/launcher/net.dm deleted file mode 100644 index aad07948f699e..0000000000000 --- a/code/modules/projectiles/guns/launcher/net.dm +++ /dev/null @@ -1,109 +0,0 @@ -/obj/item/gun/launcher/net - name = "net gun" - desc = "Specially made-to-order by Xenonomix, the XX-1 \"Varmint Catcher\" is designed to trap even the most unruly of creatures for safe transport." - icon_state = "netgun" - item_state = "netgun" - fire_sound = 'sound/weapons/empty.ogg' - fire_sound_text = "a metallic thunk" - release_force = 5 - var/obj/item/net_shell/chambered - -/obj/item/net_shell - name = "net gun shell" - desc = "A casing containing an autodeploying net for use in a net gun. Kind of looks like a flash light." - icon = 'icons/obj/ammo.dmi' - icon_state = "netshell" - -/obj/item/net_shell/attackby(obj/item/gun/launcher/net/I, mob/user) - if(istype(I) && I.can_load(src, user)) - I.load(src, user) - to_chat(usr, "You load \the [src] into \the [I].") - else - ..() - -/obj/item/gun/launcher/net/examine(mob/user, distance) - . = ..() - if(distance <= 2 && chambered) - to_chat(user, "\A [chambered] is chambered.") - -/obj/item/gun/launcher/net/proc/can_load(var/obj/item/net_shell/S, var/mob/user) - if(chambered) - to_chat(user, SPAN_WARNING("\The [src] already has a shell loaded.")) - return FALSE - return TRUE - -/obj/item/gun/launcher/net/proc/finish_loading(var/obj/item/net_shell/S, var/mob/user) - chambered = S - if(user) - user.visible_message("\The [user] inserts \a [S] into \the [src].", SPAN_NOTICE("You insert \a [S] into \the [src].")) - -/obj/item/gun/launcher/net/proc/load(obj/item/net_shell/S, mob/user) - if(!can_load(S, user)) - return - if(user && !user.unEquip(S, src)) - return - finish_loading(S, user) - -/obj/item/gun/launcher/net/proc/unload(mob/user) - if(chambered) - user.visible_message("\The [user] removes \the [chambered] from \the [src].", "You remove \the [chambered] from \the [src].") - user.put_in_hands(chambered) - chambered = null - else - to_chat(user, "\The [src] is empty.") - -/obj/item/gun/launcher/net/attackby(obj/item/I, mob/user) - if((istype(I, /obj/item/net_shell))) - load(I, user) - else - ..() - -/obj/item/gun/launcher/net/attack_hand(mob/user) - if(user.get_inactive_hand() == src) - unload(user) - else - ..() - -/obj/item/gun/launcher/net/consume_next_projectile() - if(chambered) - qdel(chambered) - chambered = null - return new /obj/item/energy_net/safari(src) - -/obj/item/gun/launcher/net/borg - has_safety = FALSE // Selecting the module for activation makes a safety redundant - var/list/shells - var/max_shells = 3 - -/obj/item/gun/launcher/net/borg/Initialize() - . = ..() - // Start fully loaded - for(var/i in 1 to (max_shells + 1)) - load(new /obj/item/net_shell) - -/obj/item/gun/launcher/net/borg/can_load(var/obj/item/net_shell/S, var/mob/user) - if(LAZYLEN(shells) >= max_shells) - to_chat(user, SPAN_WARNING("\The [src] already has the maximum number of shells loaded.")) - return FALSE - return TRUE - -/obj/item/gun/launcher/net/borg/proc/update_chambered_shell() - if(!chambered && LAZYLEN(shells)) - chambered = shells[1] - LAZYREMOVE(shells, chambered) - -/obj/item/gun/launcher/net/borg/finish_loading(var/obj/item/net_shell/S, var/mob/user) - LAZYDISTINCTADD(shells, S) - update_chambered_shell() - -/obj/item/gun/launcher/net/borg/unload(var/mob/user) - . = ..() - update_chambered_shell() - -/obj/item/gun/launcher/net/borg/consume_next_projectile() - . = ..() - update_chambered_shell() - -/obj/item/gun/launcher/net/borg/examine(mob/user) - . = ..() - to_chat(user, "There are [LAZYLEN(shells)] shell\s loaded.") diff --git a/code/modules/projectiles/guns/launcher/pneumatic.dm b/code/modules/projectiles/guns/launcher/pneumatic.dm deleted file mode 100644 index 8153672637051..0000000000000 --- a/code/modules/projectiles/guns/launcher/pneumatic.dm +++ /dev/null @@ -1,142 +0,0 @@ -/obj/item/gun/launcher/pneumatic - name = "pneumatic cannon" - desc = "A large gas-powered cannon." - icon = 'icons/obj/guns/pneumatic.dmi' - icon_state = "pneumatic" - item_state = "pneumatic" - origin_tech = list(TECH_COMBAT = 4, TECH_MATERIAL = 3) - slot_flags = SLOT_BELT - w_class = ITEM_SIZE_HUGE - obj_flags = OBJ_FLAG_CONDUCTIBLE - fire_sound_text = "a loud whoosh of moving air" - fire_delay = 50 - fire_sound = 'sound/weapons/tablehit1.ogg' - - var/fire_pressure // Used in fire checks/pressure checks. - var/max_w_class = ITEM_SIZE_NORMAL // Hopper intake size. - var/max_storage_space = DEFAULT_BOX_STORAGE // Total internal storage size. - var/obj/item/tank/tank = null // Tank of gas for use in firing the cannon. - - var/obj/item/storage/item_storage - var/pressure_setting = 10 // Percentage of the gas in the tank used to fire the projectile. - var/possible_pressure_amounts = list(5,10,20,25,50) // Possible pressure settings. - var/force_divisor = 400 // Force equates to speed. Speed/5 equates to a damage multiplier for whoever you hit. - // For reference, a fully pressurized oxy tank at 50% gas release firing a health - // analyzer with a force_divisor of 10 hit with a damage multiplier of 3000+. -/obj/item/gun/launcher/pneumatic/Initialize() - . = ..() - item_storage = new(src) - item_storage.SetName("hopper") - item_storage.max_w_class = max_w_class - item_storage.max_storage_space = max_storage_space - item_storage.use_sound = null - -/obj/item/gun/launcher/pneumatic/verb/set_pressure() //set amount of tank pressure. - set name = "Set Valve Pressure" - set category = "Object" - set src in range(0) - var/N = input("Percentage of tank used per shot:","[src]") as null|anything in possible_pressure_amounts - if (N) - pressure_setting = N - to_chat(usr, "You dial the pressure valve to [pressure_setting]%.") - -/obj/item/gun/launcher/pneumatic/proc/eject_tank(mob/user) //Remove the tank. - if(!tank) - to_chat(user, "There's no tank in [src].") - return - - to_chat(user, "You twist the valve and pop the tank out of [src].") - user.put_in_hands(tank) - tank = null - update_icon() - -/obj/item/gun/launcher/pneumatic/proc/unload_hopper(mob/user) - if(item_storage.contents.len > 0) - var/obj/item/removing = item_storage.contents[item_storage.contents.len] - item_storage.remove_from_storage(removing, src.loc) - user.put_in_hands(removing) - to_chat(user, "You remove [removing] from the hopper.") - else - to_chat(user, "There is nothing to remove in \the [src].") - -/obj/item/gun/launcher/pneumatic/attack_hand(mob/user as mob) - if(user.get_inactive_hand() == src) - unload_hopper(user) - else - return ..() - -/obj/item/gun/launcher/pneumatic/attackby(obj/item/W as obj, mob/user as mob) - if(!tank && istype(W,/obj/item/tank) && user.unEquip(W, src)) - tank = W - user.visible_message("[user] jams [W] into [src]'s valve and twists it closed.","You jam [W] into [src]'s valve and twist it closed.") - update_icon() - else if(istype(W) && item_storage.can_be_inserted(W, user)) - item_storage.handle_item_insertion(W) - -/obj/item/gun/launcher/pneumatic/attack_self(mob/user as mob) - eject_tank(user) - -/obj/item/gun/launcher/pneumatic/consume_next_projectile(mob/user=null) - if(!item_storage.contents.len) - return null - if (!tank) - to_chat(user, "There is no gas tank in [src]!") - return null - - var/environment_pressure = 10 - var/turf/T = get_turf(src) - if(T) - var/datum/gas_mixture/environment = T.return_air() - if(environment) - environment_pressure = environment.return_pressure() - - fire_pressure = (tank.air_contents.return_pressure() - environment_pressure)*pressure_setting/100 - if(fire_pressure < 10) - to_chat(user, "There isn't enough gas in the tank to fire [src].") - return null - - var/obj/item/launched = item_storage.contents[1] - item_storage.remove_from_storage(launched, src) - return launched - -/obj/item/gun/launcher/pneumatic/examine(mob/user, distance) - . = ..() - if(distance > 2) - return - to_chat(user, "The valve is dialed to [pressure_setting]%.") - if(tank) - to_chat(user, "The tank dial reads [tank.air_contents.return_pressure()] kPa.") - else - to_chat(user, "Nothing is attached to the tank valve!") - -/obj/item/gun/launcher/pneumatic/update_release_force(obj/item/projectile) - if(tank) - release_force = ((fire_pressure*tank.volume)/projectile.w_class)/force_divisor //projectile speed. - if(release_force > 80) release_force = 80 //damage cap. - else - release_force = 0 - -/obj/item/gun/launcher/pneumatic/handle_post_fire() - if(tank) - var/lost_gas_amount = tank.air_contents.total_moles*(pressure_setting/100) - var/datum/gas_mixture/removed = tank.remove_air(lost_gas_amount) - - var/turf/T = get_turf(src.loc) - if(T) T.assume_air(removed) - ..() - -/obj/item/gun/launcher/pneumatic/on_update_icon() - if(tank) - icon_state = "pneumatic-tank" - item_state = "pneumatic-tank" - else - icon_state = "pneumatic" - item_state = "pneumatic" - - update_held_icon() - -/obj/item/gun/launcher/pneumatic/small - name = "small pneumatic cannon" - desc = "It looks smaller than your garden variety cannon." - max_w_class = ITEM_SIZE_TINY - w_class = ITEM_SIZE_NORMAL \ No newline at end of file diff --git a/code/modules/projectiles/guns/launcher/rocket.dm b/code/modules/projectiles/guns/launcher/rocket.dm deleted file mode 100644 index 8d44511b87839..0000000000000 --- a/code/modules/projectiles/guns/launcher/rocket.dm +++ /dev/null @@ -1,48 +0,0 @@ -/obj/item/gun/launcher/rocket - name = "rocket launcher" - desc = "MAGGOT." - icon_state = "rocket" - item_state = "rocket" - w_class = ITEM_SIZE_HUGE - throw_speed = 2 - throw_range = 10 - force = 5.0 - obj_flags = OBJ_FLAG_CONDUCTIBLE - slot_flags = 0 - origin_tech = list(TECH_COMBAT = 8, TECH_MATERIAL = 5) - fire_sound = 'sound/effects/bang.ogg' - combustion = 1 - - release_force = 15 - throw_distance = 30 - var/max_rockets = 1 - var/list/rockets = new/list() - -/obj/item/gun/launcher/rocket/examine(mob/user, distance) - . = ..() - if(distance <= 2) - to_chat(user, "[rockets.len] / [max_rockets] rockets.") - -/obj/item/gun/launcher/rocket/attackby(obj/item/I as obj, mob/user as mob) - if(istype(I, /obj/item/ammo_casing/rocket)) - if(rockets.len < max_rockets) - if(!user.unEquip(I, src)) - return - rockets += I - to_chat(user, "You put the rocket in [src].") - to_chat(user, "[rockets.len] / [max_rockets] rockets.") - else - to_chat(usr, "\The [src] cannot hold more rockets.") - -/obj/item/gun/launcher/rocket/consume_next_projectile() - if(rockets.len) - var/obj/item/ammo_casing/rocket/I = rockets[1] - var/obj/item/missile/M = new (src) - M.primed = 1 - rockets -= I - return M - return null - -/obj/item/gun/launcher/rocket/handle_post_fire(mob/user, atom/target) - log_and_message_admins("fired a rocket from a rocket launcher ([src.name]) at [target].") - ..() diff --git a/code/modules/projectiles/guns/launcher/slugsling.dm b/code/modules/projectiles/guns/launcher/slugsling.dm deleted file mode 100644 index 822dce2622157..0000000000000 --- a/code/modules/projectiles/guns/launcher/slugsling.dm +++ /dev/null @@ -1,66 +0,0 @@ -/obj/item/slugegg - name = "slugegg" - desc = "A pulsing, disgusting door to new life." - force = 1 - throwforce = 6 - icon = 'icons/obj/weapons/other.dmi' - icon_state = "slugegg" - var/break_on_impact = 1 //There are two modes to the eggs. - //One breaks the egg on hit, - -/obj/item/slugegg/throw_impact(atom/hit_atom) - if(break_on_impact) - squish() - else - movable_flags |= MOVABLE_FLAG_PROXMOVE //Dont want it active during the throw... loooots of unneeded checking. - return ..() - -/obj/item/slugegg/attack_self(var/mob/living/user) - squish() - -/obj/item/slugegg/HasProximity(var/atom/movable/AM) - if(isliving(AM)) - if(istype(AM,/mob/living/carbon/human)) - var/mob/living/carbon/human/H = AM - if(H.species && H.species.get_bodytype() == SPECIES_VOX) - return - else - var/mob/living/L = AM - if(L.faction == SPECIES_VOX) - return - squish() - -/obj/item/slugegg/proc/squish() - src.visible_message("\The [src] bursts open!") - new /mob/living/simple_animal/hostile/voxslug(get_turf(src)) - playsound(src.loc,'sound/effects/attackblob.ogg',100, 1) - qdel(src) - -//a slug sling basically launches a small egg that hatches (either on a person or on the floor), releasing a terrible blood thirsty monster. -//Balanced due to the non-spammy nature of the gun, as well as the frailty of the creatures. -/obj/item/gun/launcher/alien/slugsling - name = "slug sling" - desc = "A bulbous looking rifle. It feels like holding a plastic bag full of meat." - w_class = ITEM_SIZE_LARGE - icon_state = "slugsling" - item_state = "spikethrower" - fire_sound_text = "a strange noise" - fire_sound = 'sound/weapons/towelwhip.ogg' - release_force = 6 - ammo_name = "slug" - ammo_type = /obj/item/slugegg - max_ammo = 2 - ammo = 2 - ammo_gen_time = 600 - var/mode = "Impact" - -/obj/item/gun/launcher/alien/slugsling/consume_next_projectile() - var/obj/item/slugegg/S = ..() - if(S) - S.break_on_impact = (mode == "Impact") - return S - - -/obj/item/gun/launcher/alien/slugsling/attack_self(var/mob/living/user) - mode = mode == "Impact" ? "Sentry" : "Impact" - to_chat(user,"You switch \the [src]'s mode to \"[mode]\"") diff --git a/code/modules/projectiles/guns/launcher/syringe_gun.dm b/code/modules/projectiles/guns/launcher/syringe_gun.dm deleted file mode 100644 index f133abefb5045..0000000000000 --- a/code/modules/projectiles/guns/launcher/syringe_gun.dm +++ /dev/null @@ -1,155 +0,0 @@ -/obj/item/syringe_cartridge - name = "syringe gun cartridge" - desc = "An impact-triggered compressed gas cartridge that can be fitted to a syringe for rapid injection." - icon = 'icons/obj/ammo.dmi' - icon_state = "syringe-cartridge" - var/icon_flight = "syringe-cartridge-flight" //so it doesn't look so weird when shot - matter = list(MATERIAL_STEEL = 125, MATERIAL_GLASS = 375) - obj_flags = OBJ_FLAG_CONDUCTIBLE - slot_flags = SLOT_BELT | SLOT_EARS - throwforce = 3 - force = 3 - w_class = ITEM_SIZE_TINY - var/obj/item/reagent_containers/syringe/syringe - -/obj/item/syringe_cartridge/on_update_icon() - underlays.Cut() - if(syringe) - underlays += image(syringe.icon, src, syringe.icon_state) - underlays += syringe.filling - -/obj/item/syringe_cartridge/attackby(obj/item/I, mob/user) - if(istype(I, /obj/item/reagent_containers/syringe) && user.unEquip(I, src)) - syringe = I - to_chat(user, "You carefully insert [syringe] into [src].") - sharp = TRUE - name = "syringe dart" - update_icon() - -/obj/item/syringe_cartridge/attack_self(mob/user) - if(syringe) - to_chat(user, "You remove [syringe] from [src].") - user.put_in_hands(syringe) - syringe = null - sharp = initial(sharp) - SetName(initial(name)) - update_icon() - -/obj/item/syringe_cartridge/proc/prime() - //the icon state will revert back when update_icon() is called from throw_impact() - icon_state = icon_flight - underlays.Cut() - -/obj/item/syringe_cartridge/throw_impact(atom/hit_atom, var/datum/thrownthing/TT) - ..() //handles embedding for us. Should have a decent chance if thrown fast enough - if(syringe) - //check speed to see if we hit hard enough to trigger the rapid injection - //incidentally, this means syringe_cartridges can be used with the pneumatic launcher - if(TT.speed >= 10 && isliving(hit_atom)) - var/mob/living/L = hit_atom - //unfortuately we don't know where the dart will actually hit, since that's done by the parent. - if(L.can_inject(null, ran_zone(TT.target_zone, 30)) == CAN_INJECT && syringe.reagents) - var/should_admin_log = syringe.reagents.should_admin_log() - var/reagent_log = syringe.reagents.get_reagents() - var/trans = syringe.reagents.trans_to_mob(L, 15, CHEM_BLOOD) - if (should_admin_log) - admin_inject_log(TT.thrower? TT.thrower : null, L, src, reagent_log, trans, violent=1) - - syringe.break_syringe(iscarbon(hit_atom)? hit_atom : null) - syringe.update_icon() - - icon_state = initial(icon_state) //reset icon state - update_icon() - -/obj/item/gun/launcher/syringe - name = "syringe gun" - desc = "A spring loaded rifle designed to fit syringes, designed to incapacitate unruly patients from a distance." - icon = 'icons/obj/guns/syringegun.dmi' - icon_state = "syringegun" - item_state = "syringegun" - w_class = ITEM_SIZE_LARGE - force = 7 - matter = list(MATERIAL_STEEL = 2000) - slot_flags = SLOT_BELT - - fire_sound = 'sound/weapons/empty.ogg' - fire_sound_text = "a metallic thunk" - screen_shake = 0 - release_force = 10 - throw_distance = 10 - - var/list/darts = list() - var/max_darts = 1 - var/obj/item/syringe_cartridge/next - -/obj/item/gun/launcher/syringe/consume_next_projectile() - if(next) - next.prime() - return next - return null - -/obj/item/gun/launcher/syringe/handle_post_fire() - ..() - darts -= next - next = null - -/obj/item/gun/launcher/syringe/attack_self(mob/living/user as mob) - if(next) - user.visible_message("[user] unlatches and carefully relaxes the bolt on [src].", "You unlatch and carefully relax the bolt on [src], unloading the spring.") - next = null - else if(darts.len) - playsound(src.loc, 'sound/weapons/flipblade.ogg', 50, 1) - user.visible_message("[user] draws back the bolt on [src], clicking it into place.", "You draw back the bolt on the [src], loading the spring!") - next = darts[1] - add_fingerprint(user) - -/obj/item/gun/launcher/syringe/attack_hand(mob/living/user as mob) - if(user.get_inactive_hand() == src) - if(!darts.len) - to_chat(user, "[src] is empty.") - return - if(next) - to_chat(user, "[src]'s cover is locked shut.") - return - var/obj/item/syringe_cartridge/C = darts[1] - darts -= C - user.put_in_hands(C) - user.visible_message("[user] removes \a [C] from [src].", "You remove \a [C] from [src].") - else - ..() - -/obj/item/gun/launcher/syringe/attackby(var/obj/item/A as obj, mob/user as mob) - if(istype(A, /obj/item/syringe_cartridge)) - var/obj/item/syringe_cartridge/C = A - if(darts.len >= max_darts) - to_chat(user, "[src] is full!") - return - if(!user.unEquip(C, src)) - return - darts += C //add to the end - user.visible_message("[user] inserts \a [C] into [src].", "You insert \a [C] into [src].") - else - ..() - -/obj/item/gun/launcher/syringe/rapid - name = "syringe gun revolver" - desc = "A modification of the syringe gun design, using a rotating cylinder to store up to five syringes. The spring still needs to be drawn between shots." - icon_state = "rapidsyringegun" - item_state = "rapidsyringegun" - max_darts = 5 - -/obj/item/gun/launcher/syringe/disguised - name = "deluxe electronic cigarette" - desc = "A premium model eGavana MK3 electronic cigarette, shaped like a cigar." - icon = 'icons/obj/ecig.dmi' - icon_state = "pcigoff1" - item_state = "pcigoff1" - w_class = ITEM_SIZE_SMALL - force = 3 - throw_distance = 7 - release_force = 10 - -/obj/item/gun/launcher/syringe/disguised/examine(mob/user, distance) - . = ..() - if(distance <= 1) - to_chat(user, "The button is a little stiff.") diff --git a/code/modules/projectiles/guns/magnetic/magnetic.dm b/code/modules/projectiles/guns/magnetic/magnetic.dm deleted file mode 100644 index b0ffd1b138df0..0000000000000 --- a/code/modules/projectiles/guns/magnetic/magnetic.dm +++ /dev/null @@ -1,234 +0,0 @@ -/obj/item/gun/magnetic - name = "improvised coilgun" - desc = "A coilgun hastily thrown together out of a basic frame and advanced power storage components. Is it safe for it to be duct-taped together like that?" - icon = 'icons/obj/guns/coilgun.dmi' - icon_state = "coilgun" - item_state = "coilgun" - origin_tech = list(TECH_COMBAT = 3, TECH_MATERIAL = 3, TECH_MAGNET = 4) - one_hand_penalty = 5 - fire_delay = 20 - w_class = ITEM_SIZE_LARGE - bulk = GUN_BULK_RIFLE - combustion = 1 - - var/obj/item/cell/cell // Currently installed powercell. - var/obj/item/stock_parts/capacitor/capacitor // Installed capacitor. Higher rating == faster charge between shots. - var/removable_components = TRUE // Whether or not the gun can be dismantled. - var/gun_unreliable = 15 // Percentage chance of detonating in your hands. - - var/obj/item/loaded // Currently loaded object, for retrieval/unloading. - var/load_type = /obj/item/stack/material/rods // Type of stack to load with. - var/load_sheet_max = 1 // Maximum number of "sheets" you can load from a stack. - var/projectile_type = /obj/item/projectile/bullet/magnetic // Actual fire type, since this isn't throw_at rod launcher. - - var/power_cost = 950 // Cost per fire, should consume almost an entire basic cell. - var/power_per_tick // Capacitor charge per process(). Updated based on capacitor rating. - -/obj/item/gun/magnetic/preloaded - cell = /obj/item/cell/high - capacitor = /obj/item/stock_parts/capacitor/adv - -/obj/item/gun/magnetic/Initialize() - START_PROCESSING(SSobj, src) - - if (ispath(cell)) - cell = new cell(src) - if (ispath(capacitor)) - capacitor = new capacitor(src) - capacitor.charge = capacitor.max_charge - if (ispath(loaded)) - loaded = new loaded (src, load_sheet_max) - - if(capacitor) - power_per_tick = (power_cost*0.15) * capacitor.rating - update_icon() - . = ..() - -/obj/item/gun/magnetic/Destroy() - STOP_PROCESSING(SSobj, src) - QDEL_NULL(cell) - QDEL_NULL(loaded) - QDEL_NULL(capacitor) - . = ..() - -/obj/item/gun/magnetic/get_cell() - return cell - -/obj/item/gun/magnetic/Process() - if(capacitor) - if(cell) - if(capacitor.charge < capacitor.max_charge && cell.checked_use(power_per_tick)) - capacitor.charge(power_per_tick) - else - if(capacitor) - capacitor.use(capacitor.charge * 0.05) - update_icon() - -/obj/item/gun/magnetic/on_update_icon() - . = ..() - var/list/overlays_to_add = list() - if(removable_components) - if(cell) - overlays_to_add += image(icon, "[icon_state]_cell") - if(capacitor) - overlays_to_add += image(icon, "[icon_state]_capacitor") - if(!cell || !capacitor) - overlays_to_add += image(icon, "[icon_state]_red") - else if(capacitor.charge < power_cost) - overlays_to_add += image(icon, "[icon_state]_amber") - else - overlays_to_add += image(icon, "[icon_state]_green") - if(loaded) - overlays_to_add += image(icon, "[icon_state]_loaded") - var/obj/item/magnetic_ammo/mag = loaded - if(istype(mag)) - if(mag.remaining) - overlays_to_add += image(icon, "[icon_state]_ammo") - - overlays += overlays_to_add - -/obj/item/gun/magnetic/proc/show_ammo(var/mob/user) - if(loaded) - to_chat(user, "It has \a [loaded] loaded.") - -/obj/item/gun/magnetic/examine(mob/user) - . = ..() - if(cell) - to_chat(user, "The installed [cell.name] has a charge level of [round((cell.charge/cell.maxcharge)*100)]%.") - if(capacitor) - to_chat(user, "The installed [capacitor.name] has a charge level of [round((capacitor.charge/capacitor.max_charge)*100)]%.") - if(!cell || !capacitor) - to_chat(user, "The capacitor charge indicator is blinking red. Maybe you should check the cell or capacitor.") - else - if(capacitor.charge < power_cost) - to_chat(user, "The capacitor charge indicator is amber.") - else - to_chat(user, "The capacitor charge indicator is green.") - -/obj/item/gun/magnetic/attackby(var/obj/item/thing, var/mob/user) - - if(removable_components) - if(istype(thing, /obj/item/cell)) - if(cell) - to_chat(user, "\The [src] already has \a [cell] installed.") - return - if(!user.unEquip(thing, src)) - return - cell = thing - playsound(loc, 'sound/machines/click.ogg', 10, 1) - user.visible_message("\The [user] slots \the [cell] into \the [src].") - update_icon() - return - - if(isScrewdriver(thing)) - if(!capacitor) - to_chat(user, "\The [src] has no capacitor installed.") - return - user.put_in_hands(capacitor) - user.visible_message("\The [user] unscrews \the [capacitor] from \the [src].") - playsound(loc, 'sound/items/Screwdriver.ogg', 50, 1) - capacitor = null - update_icon() - return - - if(istype(thing, /obj/item/stock_parts/capacitor)) - if(capacitor) - to_chat(user, "\The [src] already has \a [capacitor] installed.") - return - if(!user.unEquip(thing, src)) - return - capacitor = thing - playsound(loc, 'sound/machines/click.ogg', 10, 1) - power_per_tick = (power_cost*0.15) * capacitor.rating - user.visible_message("\The [user] slots \the [capacitor] into \the [src].") - update_icon() - return - - if(istype(thing, load_type)) - - // This is not strictly necessary for the magnetic gun but something using - // specific ammo types may exist down the track. - var/obj/item/stack/ammo = thing - if(!istype(ammo)) - if(loaded) - to_chat(user, "\The [src] already has \a [loaded] loaded.") - return - var/obj/item/magnetic_ammo/mag = thing - if(istype(mag)) - if(!(load_type == mag.basetype)) - to_chat(user, "\The [src] doesn't seem to accept \a [mag].") - return - projectile_type = mag.projectile_type - if(!user.unEquip(thing, src)) - return - - loaded = thing - else if(load_sheet_max > 1) - var ammo_count = 0 - var/obj/item/stack/loaded_ammo = loaded - if(!istype(loaded_ammo)) - ammo_count = min(load_sheet_max,ammo.amount) - loaded = new load_type(src, ammo_count) - else - ammo_count = min(load_sheet_max-loaded_ammo.amount,ammo.amount) - loaded_ammo.amount += ammo_count - if(ammo_count <= 0) - // This will also display when someone tries to insert a stack of 0, but that shouldn't ever happen anyway. - to_chat(user, "\The [src] is already fully loaded.") - return - ammo.use(ammo_count) - else - if(loaded) - to_chat(user, "\The [src] already has \a [loaded] loaded.") - return - loaded = new load_type(src, 1) - ammo.use(1) - - user.visible_message("\The [user] loads \the [src] with \the [loaded].") - playsound(loc, 'sound/weapons/flipblade.ogg', 50, 1) - update_icon() - return - . = ..() - -/obj/item/gun/magnetic/attack_hand(var/mob/user) - if(user.get_inactive_hand() == src) - var/obj/item/removing - - if(loaded) - removing = loaded - loaded = null - else if(cell && removable_components) - removing = cell - cell = null - - if(removing) - user.put_in_hands(removing) - user.visible_message("\The [user] removes \the [removing] from \the [src].") - playsound(loc, 'sound/machines/click.ogg', 10, 1) - update_icon() - return - . = ..() - -/obj/item/gun/magnetic/proc/check_ammo() - return loaded - -/obj/item/gun/magnetic/proc/use_ammo() - qdel(loaded) - loaded = null - -/obj/item/gun/magnetic/consume_next_projectile() - - if(!check_ammo() || !capacitor || capacitor.charge < power_cost) - return - - use_ammo() - capacitor.use(power_cost) - update_icon() - - if(gun_unreliable && prob(gun_unreliable)) - spawn(3) // So that it will still fire - considered modifying Fire() to return a value but burst fire makes that annoying. - visible_message("\The [src] explodes with the force of the shot!") - explosion(get_turf(src), -1, 0, 2) - qdel(src) - - return new projectile_type(src) diff --git a/code/modules/projectiles/guns/magnetic/magnetic_railgun.dm b/code/modules/projectiles/guns/magnetic/magnetic_railgun.dm deleted file mode 100644 index aca6a6c13dbcc..0000000000000 --- a/code/modules/projectiles/guns/magnetic/magnetic_railgun.dm +++ /dev/null @@ -1,182 +0,0 @@ -/obj/item/gun/magnetic/railgun - name = "railgun" - desc = "The HelTek Arms LM-76 Thunderclap. A portable linear motor cannon produced during the Gaia Conflict for anti-armour and anti-fortification operations. Today, it sees wide use among private militaries, and is a staple on the black market." - icon = 'icons/obj/guns/railgun.dmi' - icon_state = "railgun" - removable_components = TRUE // Can swap out the capacitor for more shots, or cell for longer usage before recharge - load_type = /obj/item/rcd_ammo - origin_tech = list(TECH_COMBAT = 5, TECH_MATERIAL = 4, TECH_MAGNET = 4) - projectile_type = /obj/item/projectile/bullet/magnetic/slug - one_hand_penalty = 6 - power_cost = 300 - fire_delay = 35 - w_class = ITEM_SIZE_HUGE - slot_flags = SLOT_BACK - loaded = /obj/item/rcd_ammo/large // ~30 shots - combustion = 1 - bulk = GUN_BULK_RIFLE + 3 - - cell = /obj/item/cell/hyper - capacitor = /obj/item/stock_parts/capacitor/adv - gun_unreliable = 0 - var/slowdown_held = 2 - var/slowdown_worn = 1 - -/obj/item/gun/magnetic/railgun/Initialize() - slowdown_per_slot[slot_l_hand] = slowdown_held - slowdown_per_slot[slot_r_hand] = slowdown_held - slowdown_per_slot[slot_back] = slowdown_worn - slowdown_per_slot[slot_belt] = slowdown_worn - slowdown_per_slot[slot_s_store] = slowdown_worn - - . = ..() - -// Not going to check type repeatedly, if you code or varedit -// load_type and get runtime errors, don't come crying to me. -/obj/item/gun/magnetic/railgun/show_ammo(var/mob/user) - var/obj/item/rcd_ammo/ammo = loaded - if (ammo) - to_chat(user, "There are [ammo.remaining] shot\s remaining in \the [loaded].") - else - to_chat(user, "There is nothing loaded.") - -/obj/item/gun/magnetic/railgun/check_ammo() - var/obj/item/rcd_ammo/ammo = loaded - return ammo && ammo.remaining - -/obj/item/gun/magnetic/railgun/use_ammo() - var/obj/item/rcd_ammo/ammo = loaded - ammo.remaining-- - if(ammo.remaining <= 0) - spawn(3) - playsound(src.loc, 'sound/machines/twobeep.ogg', 50, 1) - out_of_ammo() - -/obj/item/gun/magnetic/railgun/proc/out_of_ammo() - qdel(loaded) - loaded = null - visible_message("\The [src] beeps and ejects its empty cartridge.") - -/obj/item/gun/magnetic/railgun/mmi - desc = "The Mars Military Industries MI-72 Comet. A man-portable mass driver for squad support, anti-armour and destruction of fortifications and emplacements." - icon = 'icons/obj/guns/railgun_old.dmi' - icon_state = "old_railgun" - -/obj/item/gun/magnetic/railgun/tcc // Oppa! Should only be available to TCC shock troops or high-budget mercs. - name = "advanced railgun" - desc = "The HelTek Arms HR-22 Hammerhead. A man-portable helical rail cannon; favorite weapon of Terran shock troops and anti-tank personnel." - icon = 'icons/obj/guns/railgun_adv.dmi' - icon_state = "railgun-tcc" - removable_components = TRUE // Railgunners are expected to be able to completely disassemble and reassemble their weapons in the field. But we don't have that mechanic, so the cell and capacitor will do. - - cell = /obj/item/cell/hyper // Standard power - capacitor = /obj/item/stock_parts/capacitor/adv // 6-8 shots - power_cost = 280 // Same number of shots, but it'll seem to recharge slightly faster - - loaded = /obj/item/stack/material/rods - load_type = /obj/item/stack/material/rods // The Confederation learned that chunks of metal work just as well as fancy matter cartridges - actually they dont - projectile_type = /obj/item/projectile/bullet/magnetic - load_sheet_max = 6 // Fewer shots per "magazine", but more abundant than matter cartridges. - origin_tech = list(TECH_COMBAT = 6, TECH_MATERIAL = 3, TECH_MAGNET = 5) - slowdown_worn = 3 // Little slower when worn - -/obj/item/gun/magnetic/railgun/tcc/show_ammo(var/mob/user) - var/obj/item/stack/material/rods/ammo = loaded - if(istype(ammo)) - to_chat(user, "It has [ammo.amount] shots loaded.") - -/obj/item/gun/magnetic/railgun/tcc/check_ammo() - var/obj/item/stack/material/rods/ammo = loaded - return ammo && ammo.amount - -/obj/item/gun/magnetic/railgun/tcc/out_of_ammo() - QDEL_NULL(loaded) - loaded = null - spawn(3) - playsound(src.loc, 'sound/machines/twobeep.ogg', 50, 1) - visible_message("\The [src] beeps, before clanging as the ammunition bank resets.") - -/obj/item/gun/magnetic/railgun/tcc/use_ammo() - var/obj/item/stack/material/rods/ammo = loaded - ammo.use(1) - if(!istype(ammo)) - out_of_ammo() - -/obj/item/gun/magnetic/railgun/automatic // Adminspawn only, this shit is absurd. - name = "\improper LMRA autocannon" - desc = "The HelTek Arms LMRA-14A Meteor. Originally a vehicle-mounted turret weapon used by the Confederation in the Gaia Conflict for anti-vehicular operations, the fact that it was made man-portable is mindboggling in itself." - icon = 'icons/obj/guns/railgun_heavy.dmi' - icon_state = "heavy_railgun" - removable_components = FALSE // Absolutely not. This has an infinity cell. - - cell = /obj/item/cell/infinite - capacitor = /obj/item/stock_parts/capacitor/super - - fire_delay = 8 - - slot_flags = SLOT_BACK - w_class = ITEM_SIZE_NO_CONTAINER - - init_firemodes = list( - SEMI_AUTO_NODELAY, - BURST_3_ROUND, - FULL_AUTO_400 - ) - -/obj/item/gun/magnetic/railgun/automatic/examine(mob/user, distance) - . = ..() - if(distance <= 1) - to_chat(user, "Someone has scratched Ultima Ratio Regum onto the side of the barrel.") - -/obj/item/gun/magnetic/railgun/automatic/mmi - name = "\improper RHR accelerator" - desc = "The Mars Military Industries MI-227 Meteor. Originally a vehicle-mounted turret weapon for heavy anti-vehicular and anti-structural fire, the fact that it was made man-portable is mindboggling in itself." - icon = 'icons/obj/guns/railgun_old_heavy.dmi' - icon_state = "old_heavy_railgun" - -/obj/item/gun/magnetic/railgun/flechette - name = "flechette gun" - desc = "The MI-12 Skadi is a burst fire capable railgun that fires flechette rounds at high velocity. Deadly against armour, but much less effective against soft targets." - icon = 'icons/obj/guns/flechette.dmi' - icon_state = "flechette_gun" - item_state = "z8carbine" - one_hand_penalty = 2 - fire_delay = 8 - removable_components = FALSE - cell = /obj/item/cell/hyper - capacitor = /obj/item/stock_parts/capacitor/adv - slot_flags = SLOT_BACK - power_cost = 100 - load_type = /obj/item/magnetic_ammo - projectile_type = /obj/item/projectile/bullet/magnetic/flechette - loaded = /obj/item/magnetic_ammo - wielded_item_state = "z8carbine-wielded" - - init_firemodes = list( - SEMI_AUTO_NODELAY, - BURST_3_ROUND - ) - -/obj/item/gun/magnetic/railgun/flechette/out_of_ammo() - visible_message("\The [src] beeps to indicate the magazine is empty.") - - -/obj/item/gun/magnetic/railgun/flechette/skrell - name = "skrellian rifle" - desc = "The Zquiv*Tzuuli-8, or ZT-8, is a railgun rarely seen by anyone other than those within Skrellian SDTF ranks. The rotary magazine houses a cylinder with individual chambers, that press against the barrel when loaded." - icon = 'icons/obj/guns/skrell_rifle.dmi' - icon_state = "skrell_rifle" - item_state = "skrell_rifle" - one_hand_penalty = 3 - fire_delay = 10 - slowdown_held = 1 - removable_components = FALSE - cell = /obj/item/cell/hyper - capacitor = /obj/item/stock_parts/capacitor/adv - load_type = /obj/item/magnetic_ammo/skrell - loaded = /obj/item/magnetic_ammo/skrell/slug - projectile_type = /obj/item/projectile/bullet/magnetic/slug - slot_flags = SLOT_BACK - power_cost = 100 - wielded_item_state = "skrell_rifle-wielded" - init_firemodes = list() diff --git a/code/modules/projectiles/guns/projectile.dm b/code/modules/projectiles/guns/projectile.dm deleted file mode 100644 index a3b5ea1fb51e2..0000000000000 --- a/code/modules/projectiles/guns/projectile.dm +++ /dev/null @@ -1,313 +0,0 @@ -/obj/item/gun/projectile - name = "gun" - desc = "A gun that fires bullets." - icon = 'icons/obj/guns/pistol.dmi' - icon_state = "secguncomp" - origin_tech = list(TECH_COMBAT = 2, TECH_MATERIAL = 2) - w_class = ITEM_SIZE_NORMAL - matter = list(MATERIAL_STEEL = 1000) - screen_shake = 2 - combustion = 1 - - var/caliber = CALIBER_PISTOL //determines which casings will fit - var/handle_casings = EJECT_CASINGS //determines how spent casings should be handled - var/load_method = SINGLE_CASING|SPEEDLOADER //1 = Single shells, 2 = box or quick loader, 3 = magazine - var/obj/item/ammo_casing/chambered = null - - //For SINGLE_CASING or SPEEDLOADER guns - var/max_shells = 0 //the number of casings that will fit inside - var/ammo_type = null //the type of ammo that the gun comes preloaded with - var/list/loaded = list() //stored ammo - var/starts_loaded = 1 //whether the gun starts loaded or not, can be overridden for guns crafted in-game - var/load_sound = 'sound/weapons/guns/interaction/bullet_insert.ogg' - - //For MAGAZINE guns - var/magazine_type = null //the type of magazine that the gun comes preloaded with - var/obj/item/ammo_magazine/ammo_magazine = null //stored magazine - var/allowed_magazines //magazine types that may be loaded. Can be a list or single path - var/auto_eject = 0 //if the magazine should automatically eject itself when empty. - var/auto_eject_sound = null - var/mag_insert_sound = 'sound/weapons/guns/interaction/pistol_magin.ogg' - var/mag_remove_sound = 'sound/weapons/guns/interaction/pistol_magout.ogg' - var/can_special_reload = TRUE //Whether or not we can tactical/speed reload - - var/is_jammed = 0 //Whether this gun is jammed - var/jam_chance = 0 //Chance it jams on fire - //TODO generalize ammo icon states for guns - //var/magazine_states = 0 - //var/list/icon_keys = list() //keys - //var/list/ammo_states = list() //values - -/obj/item/gun/projectile/Initialize() - . = ..() - if (starts_loaded) - if(ispath(ammo_type) && (load_method & (SINGLE_CASING|SPEEDLOADER))) - for(var/i in 1 to max_shells) - loaded += new ammo_type(src) - if(ispath(magazine_type) && (load_method & MAGAZINE)) - ammo_magazine = new magazine_type(src) - update_icon() - -/obj/item/gun/projectile/consume_next_projectile() - if(!is_jammed && prob(jam_chance)) - src.visible_message("\The [src] jams!") - is_jammed = 1 - var/mob/user = loc - if(istype(user)) - if(prob(user.skill_fail_chance(SKILL_WEAPONS, 100, SKILL_PROF))) - return null - else - to_chat(user, "You reflexively clear the jam on \the [src].") - is_jammed = 0 - playsound(src.loc, 'sound/weapons/flipblade.ogg', 50, 1) - if(is_jammed) - return null - //get the next casing - if(loaded.len) - chambered = loaded[1] //load next casing. - if(handle_casings != HOLD_CASINGS) - loaded -= chambered - else if(ammo_magazine && ammo_magazine.stored_ammo.len) - chambered = ammo_magazine.stored_ammo[ammo_magazine.stored_ammo.len] - if(handle_casings != HOLD_CASINGS) - ammo_magazine.stored_ammo -= chambered - - if (chambered) - return chambered.BB - return null - -/obj/item/gun/projectile/handle_post_fire() - ..() - if(chambered) - chambered.expend() - process_chambered() - -/obj/item/gun/projectile/process_point_blank(obj/projectile, mob/user, atom/target) - ..() - if(chambered && ishuman(target)) - var/mob/living/carbon/human/H = target - var/zone = BP_CHEST - if(user && user.zone_sel) - zone = user.zone_sel.selecting - var/obj/item/organ/external/E = H.get_organ(zone) - if(E) - chambered.put_residue_on(E) - H.apply_damage(3, DAMAGE_BURN, used_weapon = "Gunpowder Burn", given_organ = E) - -/obj/item/gun/projectile/handle_click_empty() - ..() - process_chambered() - -/obj/item/gun/projectile/proc/process_chambered() - if (!chambered) return - - switch(handle_casings) - if(EJECT_CASINGS) //eject casing onto ground. - chambered.dropInto(loc) - chambered.throw_at(get_ranged_target_turf(get_turf(src),turn(loc.dir,270),1), rand(0,1), 5) - if(LAZYLEN(chambered.fall_sounds)) - playsound(loc, pick(chambered.fall_sounds), 50, 1) - if(CYCLE_CASINGS) //cycle the casing back to the end. - if(ammo_magazine) - ammo_magazine.stored_ammo += chambered - else - loaded += chambered - - if(handle_casings != HOLD_CASINGS) - chambered = null - -#define EXP_TAC_RELOAD 1 SECOND -#define PROF_TAC_RELOAD 0.5 SECONDS -#define EXP_SPD_RELOAD 0.5 SECONDS -#define PROF_SPD_RELOAD 0.25 SECONDS - - - -//Attempts to load A into src, depending on the type of thing being loaded and the load_method -//Maybe this should be broken up into separate procs for each load method? -/obj/item/gun/projectile/proc/load_ammo(var/obj/item/A, mob/user) - if(istype(A, /obj/item/ammo_magazine)) - . = TRUE - var/obj/item/ammo_magazine/AM = A - if(!(load_method & AM.mag_type) || caliber != AM.caliber) - return //incompatible - - switch(AM.mag_type) - if(MAGAZINE) - if((ispath(allowed_magazines) && !istype(A, allowed_magazines)) || (islist(allowed_magazines) && !is_type_in_list(A, allowed_magazines))) - to_chat(user, SPAN_WARNING("\The [A] won't fit into [src].")) - return - if(ammo_magazine) - if(user.a_intent == I_HELP || user.a_intent == I_DISARM || !user.skill_check(SKILL_WEAPONS, SKILL_EXPERT)) - to_chat(user, SPAN_WARNING("[src] already has a magazine loaded."))//already a magazine here - return - else - if(user.a_intent == I_GRAB) //Tactical reloading - if(!can_special_reload) - to_chat(user, SPAN_WARNING("You can't tactically reload this gun!")) - return - if(!user.unEquip(AM, src)) - return - //Experienced gets a 1 second delay, master gets a 0.5 second delay - if(do_after(user, user.get_skill_value(SKILL_WEAPONS) == SKILL_PROF ? PROF_TAC_RELOAD : EXP_TAC_RELOAD, src, DO_DEFAULT | DO_BOTH_UNIQUE_ACT)) - ammo_magazine.update_icon() - user.put_in_hands(ammo_magazine) - user.visible_message(SPAN_WARNING("\The [user] reloads \the [src] with \the [AM]!"), - SPAN_WARNING("You tactically reload \the [src] with \the [AM]!")) - else //Speed reloading - if(!can_special_reload) - to_chat(user, SPAN_WARNING("You can't speed reload with this gun!")) - return - if(!user.unEquip(AM, src)) - return - //Experienced gets a 0.5 second delay, master gets a 0.25 second delay - if(do_after(user, user.get_skill_value(SKILL_WEAPONS) == SKILL_PROF ? PROF_SPD_RELOAD : EXP_SPD_RELOAD, src, DO_DEFAULT | DO_BOTH_UNIQUE_ACT)) - ammo_magazine.update_icon() - ammo_magazine.dropInto(user.loc) - user.visible_message(SPAN_WARNING("\The [user] reloads \the [src] with \the [AM]!"), - SPAN_WARNING("You speed reload \the [src] with \the [AM]!")) - ammo_magazine = AM - playsound(loc, mag_insert_sound, 75, 1) - update_icon() - AM.update_icon() - return - if(!user.unEquip(AM, src)) - return - ammo_magazine = AM - user.visible_message("[user] inserts [AM] into [src].", "You insert [AM] into [src].") - playsound(loc, mag_insert_sound, 50, 1) - if(SPEEDLOADER) - if(loaded.len >= max_shells) - to_chat(user, "[src] is full!") - return - var/count = 0 - for(var/obj/item/ammo_casing/C in AM.stored_ammo) - if(loaded.len >= max_shells) - break - if(C.caliber == caliber) - C.forceMove(src) - loaded += C - AM.stored_ammo -= C //should probably go inside an ammo_magazine proc, but I guess less proc calls this way... - count++ - if(count) - user.visible_message("[user] reloads [src].", "You load [count] round\s into [src].") - playsound(src.loc, 'sound/weapons/empty.ogg', 50, 1) - AM.update_icon() - else if(istype(A, /obj/item/ammo_casing)) - . = TRUE - var/obj/item/ammo_casing/C = A - if(!(load_method & SINGLE_CASING) || caliber != C.caliber) - return //incompatible - if(loaded.len >= max_shells) - to_chat(user, "[src] is full.") - return - if(!user.unEquip(C, src)) - return - loaded.Insert(1, C) //add to the head of the list - user.visible_message("[user] inserts \a [C] into [src].", "You insert \a [C] into [src].") - playsound(loc, load_sound, 50, 1) - - update_icon() - -#undef EXP_TAC_RELOAD -#undef PROF_TAC_RELOAD -#undef EXP_SPD_RELOAD -#undef PROF_SPD_RELOAD - -//attempts to unload src. If allow_dump is set to 0, the speedloader unloading method will be disabled -/obj/item/gun/projectile/proc/unload_ammo(mob/user, var/allow_dump=1) - if(is_jammed) - user.visible_message("\The [user] begins to unjam [src].", "You clear the jam and unload [src]") - if(!do_after(user, 0.4 SECONDS, src, DO_DEFAULT | DO_BOTH_UNIQUE_ACT)) - return - is_jammed = 0 - playsound(src.loc, 'sound/weapons/flipblade.ogg', 50, 1) - if(ammo_magazine) - user.put_in_hands(ammo_magazine) - user.visible_message("[user] removes [ammo_magazine] from [src].", "You remove [ammo_magazine] from [src].") - playsound(loc, mag_remove_sound, 50, 1) - ammo_magazine.update_icon() - ammo_magazine = null - else if(loaded.len) - //presumably, if it can be speed-loaded, it can be speed-unloaded. - if(allow_dump && (load_method & SPEEDLOADER)) - var/count = 0 - var/turf/T = get_turf(user) - if(T) - for(var/obj/item/ammo_casing/C in loaded) - if(LAZYLEN(C.fall_sounds)) - playsound(loc, pick(C.fall_sounds), 50, 1) - C.forceMove(T) - count++ - loaded.Cut() - if(count) - user.visible_message("[user] unloads [src].", "You unload [count] round\s from [src].") - else if(load_method & SINGLE_CASING) - var/obj/item/ammo_casing/C = loaded[loaded.len] - loaded.len-- - user.put_in_hands(C) - user.visible_message("[user] removes \a [C] from [src].", "You remove \a [C] from [src].") - else - to_chat(user, "[src] is empty.") - update_icon() - -/obj/item/gun/projectile/attackby(var/obj/item/A as obj, mob/user as mob) - if(!load_ammo(A, user)) - return ..() - -/obj/item/gun/projectile/attack_self(mob/user as mob) - if(firemodes.len > 1) - ..() - else - unload_ammo(user) - -/obj/item/gun/projectile/attack_hand(mob/user as mob) - if(user.get_inactive_hand() == src) - unload_ammo(user, allow_dump=0) - else - return ..() - -/obj/item/gun/projectile/afterattack(atom/A, mob/living/user) - ..() - if(auto_eject && ammo_magazine && ammo_magazine.stored_ammo && !ammo_magazine.stored_ammo.len) - ammo_magazine.dropInto(user.loc) - user.visible_message( - "[ammo_magazine] falls out and clatters on the floor!", - "[ammo_magazine] falls out and clatters on the floor!" - ) - if(auto_eject_sound) - playsound(user, auto_eject_sound, 40, 1) - ammo_magazine.update_icon() - ammo_magazine = null - update_icon() //make sure to do this after unsetting ammo_magazine - -/obj/item/gun/projectile/examine(mob/user) - . = ..() - if(is_jammed && user.skill_check(SKILL_WEAPONS, SKILL_BASIC)) - to_chat(user, "It looks jammed.") - if(ammo_magazine) - to_chat(user, "It has \a [ammo_magazine] loaded.") - if(user.skill_check(SKILL_WEAPONS, SKILL_ADEPT)) - to_chat(user, "Has [getAmmo()] round\s remaining.") - -/obj/item/gun/projectile/proc/getAmmo() - var/bullets = 0 - if(loaded) - bullets += loaded.len - if(ammo_magazine && ammo_magazine.stored_ammo) - bullets += ammo_magazine.stored_ammo.len - if(chambered) - bullets += 1 - return bullets - -/* Unneeded -- so far. -//in case the weapon has firemodes and can't unload using attack_hand() -/obj/item/gun/projectile/verb/unload_gun() - set name = "Unload Ammo" - set category = "Object" - set src in usr - - if(usr.stat || usr.restrained()) return - - unload_ammo(usr) -*/ diff --git a/code/modules/projectiles/guns/projectile/automatic.dm b/code/modules/projectiles/guns/projectile/automatic.dm deleted file mode 100644 index fed37e5301557..0000000000000 --- a/code/modules/projectiles/guns/projectile/automatic.dm +++ /dev/null @@ -1,440 +0,0 @@ - -//Automatic firing -//Todo: Way more checks and safety here -/datum/firemode/automatic - settings = list(burst = 1, suppress_delay_warning = TRUE, dispersion=null) - //The full auto clickhandler we have - var/datum/click_handler/fullauto/CH - -/datum/firemode/automatic/update(force_state = null) - var/mob/living/L - if (gun && gun.is_held()) - L = gun.loc - - var/enable = FALSE - //Force state is used for forcing it to be disabled in circumstances where it'd normally be valid - if (!isnull(force_state)) - enable = force_state - else if (L && L.client) - - //First of all, lets determine whether we're enabling or disabling the click handler - - - //We enable it if the gun is held in the user's active hand and the safety is off - if (L.get_active_hand() == gun) - //Lets also make sure it can fire - var/can_fire = TRUE - - //Safety stops it - if (gun.safety_state) - can_fire = FALSE - - //Projectile weapons need to have enough ammo to fire - if(istype(gun, /obj/item/gun/projectile)) - var/obj/item/gun/projectile/P = gun - if (!P.get_ammo()) - can_fire = FALSE - - //TODO: Centralise all this into some can_fire proc - if (can_fire) - enable = TRUE - else - enable = FALSE - - //Ok now lets set the desired state - if (!enable) - if (!CH) - //If we're turning it off, but the click handler doesn't exist, then we have nothing to do - return - - //Todo: make client click handlers into a list - if (CH.owner) //Remove our handler from the client - CH.owner.CH = null //wew - QDEL_NULL(CH) //And delete it - return - - else - //We're trying to turn things on - if (CH) - return //The click handler exists, we dont need to do anything - - - //Create and assign the click handler - //A click handler intercepts mouseup/drag/down events which allow fullauto firing - CH = new /datum/click_handler/fullauto() - CH.reciever = gun //Reciever is the gun that gets the fire events - L.client.CH = CH //Put it on the client - CH.owner = L.client //And tell it where it is - - -/obj/item/gun/projectile/automatic - name = "prototype SMG" - desc = "A protoype lightweight, fast firing submachine gun." - icon = 'icons/obj/guns/prototype_smg.dmi' - icon_state = "prototype" - item_state = "saber" - w_class = ITEM_SIZE_NORMAL - bulk = -1 - load_method = MAGAZINE - caliber = CALIBER_PISTOL_FLECHETTE - origin_tech = list(TECH_COMBAT = 6, TECH_MATERIAL = 3) - slot_flags = SLOT_BELT - ammo_type = /obj/item/ammo_casing/flechette - magazine_type = /obj/item/ammo_magazine/proto_smg - allowed_magazines = /obj/item/ammo_magazine/proto_smg - multi_aim = 1 - recoil_buildup = 1.2 - burst_delay = 2 - mag_insert_sound = 'sound/weapons/guns/interaction/smg_magin.ogg' - mag_remove_sound = 'sound/weapons/guns/interaction/smg_magout.ogg' - - //machine pistol, easier to one-hand with - init_firemodes = list( - // list(mode_name="semi auto", burst=1, fire_delay=null, move_delay=null, one_hand_penalty=0, burst_accuracy=null, dispersion=null), - // list(mode_name="4-round bursts", burst=4, fire_delay=null, move_delay=4, one_hand_penalty=1, burst_accuracy=list(0,0,-1,-1), dispersion=list(0.0, 0.0, 0.5, 0.6)), - // list(mode_name="long bursts", burst=8, fire_delay=null, move_delay=4, one_hand_penalty=2, burst_accuracy=list(0,0,-1,-1,-1,-1,-2,-2), dispersion=list(0.0, 0.0, 0.5, 0.6, 0.8, 1.0, 1.0, 1.2)), - SEMI_AUTO_NODELAY, - BURST_3_ROUND, - FULL_AUTO_600 - ) - -/obj/item/gun/projectile/automatic/machine_pistol - name = "machine pistol" - desc = "The Hephaestus Industries MP6 Vesper, A fairly common machine pistol. Sometimes refered to as an 'uzi' by the backwater spacers it is often associated with." - icon = 'icons/obj/guns/machine_pistol.dmi' - icon_state = "mpistolen" - safety_icon = "safety" - item_state = "mpistolen" - caliber = CALIBER_PISTOL - burst_delay = 0.5 - origin_tech = list(TECH_COMBAT = 5, TECH_MATERIAL = 2, TECH_ESOTERIC = 3) - ammo_type = /obj/item/ammo_casing/pistol - magazine_type = /obj/item/ammo_magazine/machine_pistol - allowed_magazines = /obj/item/ammo_magazine/machine_pistol //more damage compared to the wt550, smaller mag size - one_hand_penalty = 2 - - init_firemodes = list( - SEMI_AUTO_NODELAY, - BURST_3_ROUND - ) - -/obj/item/gun/projectile/automatic/machine_pistol/on_update_icon() - ..() - icon_state = "mpistolen" - if(ammo_magazine) - overlays += image(icon, "mag") - - if(!ammo_magazine || !LAZYLEN(ammo_magazine.stored_ammo)) - icon_state = "mpistolen-empty" - overlays += image(icon, "ammo_bad") - else if(LAZYLEN(ammo_magazine.stored_ammo) <= 0.5 * ammo_magazine.max_ammo) - overlays += image(icon, "ammo_warn") - return - else - overlays += image(icon, "ammo_ok") - -/obj/item/gun/projectile/automatic/merc_smg - name = "submachine gun" - desc = "The NanoTrasen C-20r is a lightweight and rapid firing SMG, for when you REALLY need someone dead. Has a 'Per falcis, per pravitas' buttstamp." - icon = 'icons/obj/guns/merc_smg.dmi' - icon_state = "c20r" - item_state = "c20r" - safety_icon = "safety" - w_class = ITEM_SIZE_LARGE - force = 10 - caliber = CALIBER_PISTOL - origin_tech = list(TECH_COMBAT = 5, TECH_MATERIAL = 2, TECH_ESOTERIC = 8) - slot_flags = SLOT_BELT|SLOT_BACK - recoil_buildup = 1.5 - magazine_type = /obj/item/ammo_magazine/smg - allowed_magazines = /obj/item/ammo_magazine/smg - fire_sound = 'sound/weapons/gunshot/gunshot_smg.ogg' - auto_eject = 1 - auto_eject_sound = 'sound/weapons/smg_empty_alarm.ogg' - bulk = -1 - accuracy = 1 - one_hand_penalty = 4 - - //SMG - init_firemodes = list( - SEMI_AUTO_NODELAY, - BURST_3_ROUND, - FULL_AUTO_800 - ) - -/obj/item/gun/projectile/automatic/merc_smg/on_update_icon() - ..() - if(ammo_magazine) - icon_state = "c20r-[round(ammo_magazine.stored_ammo.len,4)]" - else - icon_state = "c20r" - -/obj/item/gun/projectile/automatic/assault_rifle - name = "assault rifle" - desc = "The rugged STS-35 is a durable automatic weapon of a make popular on the frontier worlds. Originally produced by Hephaestus. The serial number has been scratched off." - icon = 'icons/obj/guns/assault_rifle.dmi' - icon_state = "arifle" - item_state = null - w_class = ITEM_SIZE_HUGE - force = 10 - caliber = CALIBER_RIFLE - origin_tech = list(TECH_COMBAT = 6, TECH_MATERIAL = 1, TECH_ESOTERIC = 5) - slot_flags = SLOT_BACK - load_method = MAGAZINE - magazine_type = /obj/item/ammo_magazine/rifle - allowed_magazines = /obj/item/ammo_magazine/rifle - one_hand_penalty = 8 - recoil_buildup = 2.4 - accuracy = 2 - bulk = GUN_BULK_RIFLE + 1 - wielded_item_state = "arifle-wielded" - mag_insert_sound = 'sound/weapons/guns/interaction/ltrifle_magin.ogg' - mag_remove_sound = 'sound/weapons/guns/interaction/ltrifle_magout.ogg' - - //Assault rifle, burst fire degrades quicker than SMG, worse one-handing penalty, slightly increased move delay - init_firemodes = list( - SEMI_AUTO_NODELAY, - BURST_3_ROUND, - FULL_AUTO_400 - ) - -/obj/item/gun/projectile/automatic/assault_rifle/on_update_icon() - ..() - if(ammo_magazine) - icon_state = "arifle" - wielded_item_state = "arifle-wielded" - else - icon_state = "arifle-empty" - wielded_item_state = "arifle-wielded-empty" - -/obj/item/gun/projectile/automatic/sec_smg - name = "submachine gun" - desc = "The WT-550 Saber is a cheap self-defense weapon, mass-produced by Ward-Takahashi for paramilitary and private use." - icon = 'icons/obj/guns/sec_smg.dmi' - icon_state = "smg" - item_state = "wt550" - safety_icon = "safety" - w_class = ITEM_SIZE_NORMAL - caliber = CALIBER_PISTOL_SMALL - origin_tech = list(TECH_COMBAT = 5, TECH_MATERIAL = 2) - slot_flags = SLOT_BELT - ammo_type = /obj/item/ammo_casing/pistol/small - load_method = MAGAZINE - magazine_type = /obj/item/ammo_magazine/smg_top/rubber - allowed_magazines = /obj/item/ammo_magazine/smg_top - one_hand_penalty = 3 - - //machine pistol, like SMG but easier to one-hand with - init_firemodes = list( - SEMI_AUTO_NODELAY, - BURST_3_ROUND, - FULL_AUTO_600 - ) - -/obj/item/gun/projectile/automatic/sec_smg/on_update_icon() - ..() - if(ammo_magazine) - overlays += image(icon, "mag-[round(ammo_magazine.stored_ammo.len,5)]") - if(ammo_magazine && LAZYLEN(ammo_magazine.stored_ammo)) - overlays += image(icon, "ammo-ok") - else - overlays += image(icon, "ammo-bad") - -/obj/item/gun/projectile/automatic/bullpup_rifle - name = "bullpup assault rifle" - desc = "The Hephaestus Industries Z8 Bulldog is an older model bullpup carbine. Makes you feel like a space marine when you hold it." - icon = 'icons/obj/guns/bullpup_rifle.dmi' - icon_state = "carbine" - item_state = "z8carbine" - w_class = ITEM_SIZE_HUGE - force = 10 - caliber = CALIBER_RIFLE_MILITARY - origin_tech = list(TECH_COMBAT = 8, TECH_MATERIAL = 3) - ammo_type = /obj/item/ammo_casing/rifle/military - slot_flags = SLOT_BACK - load_method = MAGAZINE - magazine_type = /obj/item/ammo_magazine/mil_rifle - allowed_magazines = /obj/item/ammo_magazine/mil_rifle - auto_eject = 1 - auto_eject_sound = 'sound/weapons/smg_empty_alarm.ogg' - accuracy = 2 - one_hand_penalty = 8 - recoil_buildup = 1 - bulk = GUN_BULK_RIFLE - wielded_item_state = "z8carbine-wielded" - mag_insert_sound = 'sound/weapons/guns/interaction/batrifle_magin.ogg' - mag_remove_sound = 'sound/weapons/guns/interaction/batrifle_magout.ogg' - init_firemodes = list( - list(mode_name = "semiauto", mode_desc = "Fire as fast as you can pull the trigger", use_launcher=0, burst=1, fire_delay=0, move_delay=null), - list(mode_name = "full auto", mode_desc = "400 rounds per minute", use_launcher=0, mode_type = /datum/firemode/automatic, fire_delay = 4, one_hand_penalty=3), - list(mode_name = "fire grenades", burst=null, fire_delay=null, move_delay=null, use_launcher=1, one_hand_penalty=10) - ) - - var/use_launcher = 0 - var/obj/item/gun/launcher/grenade/underslung/launcher - -/obj/item/gun/projectile/automatic/bullpup_rifle/Initialize() - . = ..() - launcher = new(src) - -/obj/item/gun/projectile/automatic/bullpup_rifle/refresh_upgrades() - use_launcher = initial(use_launcher) - . = ..() - -/obj/item/gun/projectile/automatic/bullpup_rifle/attackby(obj/item/I, mob/user) - if((istype(I, /obj/item/grenade))) - launcher.load(I, user) - else - ..() - -/obj/item/gun/projectile/automatic/bullpup_rifle/attack_hand(mob/user) - if(user.get_inactive_hand() == src && use_launcher) - launcher.unload(user) - else - ..() - -/obj/item/gun/projectile/automatic/bullpup_rifle/Fire(atom/target, mob/living/user, params, pointblank=0, reflex=0) - if(use_launcher) - launcher.Fire(target, user, params, pointblank, reflex) - if(!launcher.chambered) - switch_firemodes() //switch back automatically - else - ..() - -/obj/item/gun/projectile/automatic/bullpup_rifle/on_update_icon() - ..() - if(ammo_magazine) - if(ammo_magazine.stored_ammo.len) - icon_state = "carbine-loaded" - else - icon_state = "carbine-empty" - else - icon_state = "carbine" - -/obj/item/gun/projectile/automatic/bullpup_rifle/examine(mob/user) - . = ..() - if(launcher.chambered) - to_chat(user, "\The [launcher] has \a [launcher.chambered] loaded.") - else - to_chat(user, "\The [launcher] is empty.") - -/obj/item/gun/projectile/automatic/l6_saw - name = "light machine gun" - desc = "A rather traditionally made L6 SAW with a pleasantly lacquered wooden pistol grip. Has 'Aussec Armoury- 2281' engraved on the reciever." //probably should refluff this - icon = 'icons/obj/guns/saw.dmi' - icon_state = "l6closed50" - item_state = "l6closedmag" - w_class = ITEM_SIZE_HUGE - bulk = 10 - force = 10 - slot_flags = 0 - max_shells = 50 - caliber = CALIBER_RIFLE - origin_tech = list(TECH_COMBAT = 6, TECH_MATERIAL = 1, TECH_ESOTERIC = 2) - slot_flags = 0 //need sprites for SLOT_BACK - ammo_type = /obj/item/ammo_casing/rifle - load_method = MAGAZINE - magazine_type = /obj/item/ammo_magazine/box/machinegun - allowed_magazines = list(/obj/item/ammo_magazine/box/machinegun, /obj/item/ammo_magazine/rifle) - one_hand_penalty = 10 - recoil_buildup = 3 - wielded_item_state = "gun_wielded" - mag_insert_sound = 'sound/weapons/guns/interaction/lmg_magin.ogg' - mag_remove_sound = 'sound/weapons/guns/interaction/lmg_magout.ogg' - can_special_reload = FALSE - - //LMG, better sustained fire accuracy than assault rifles (comparable to SMG), higer move delay and one-handing penalty - //No single-shot or 3-round-burst modes since using this weapon should come at a cost to flexibility. - init_firemodes = list( - BURST_5_ROUND, - BURST_8_ROUND, - FULL_AUTO_600 - ) - - var/cover_open = 0 - -/obj/item/gun/projectile/automatic/l6_saw/mag - magazine_type = /obj/item/ammo_magazine/rifle - -/obj/item/gun/projectile/automatic/l6_saw/special_check(mob/user) - if(cover_open) - to_chat(user, "[src]'s cover is open! Close it before firing!") - return 0 - return ..() - -/obj/item/gun/projectile/automatic/l6_saw/proc/toggle_cover(mob/user) - cover_open = !cover_open - to_chat(user, "You [cover_open ? "open" : "close"] [src]'s cover.") - update_icon() - -/obj/item/gun/projectile/automatic/l6_saw/attack_self(mob/user as mob) - if(cover_open) - toggle_cover(user) //close the cover - else - return ..() //once closed, behave like normal - -/obj/item/gun/projectile/automatic/l6_saw/attack_hand(mob/user as mob) - if(!cover_open && user.get_inactive_hand() == src) - toggle_cover(user) //open the cover - else - return ..() //once open, behave like normal - -/obj/item/gun/projectile/automatic/l6_saw/on_update_icon() - ..() - if(istype(ammo_magazine, /obj/item/ammo_magazine/box)) - icon_state = "l6[cover_open ? "open" : "closed"][min(round(ammo_magazine.stored_ammo.len, 10), 50)]" - item_state = "l6[cover_open ? "open" : "closed"]" - else if(ammo_magazine) - icon_state = "l6[cover_open ? "open" : "closed"]mag" - item_state = "l6[cover_open ? "open" : "closed"]mag" - else - icon_state = "l6[cover_open ? "open" : "closed"]-empty" - item_state = "l6[cover_open ? "open" : "closed"]-empty" - -/obj/item/gun/projectile/automatic/l6_saw/load_ammo(var/obj/item/A, mob/user) - if(!cover_open) - to_chat(user, "You need to open the cover to load that into [src].") - return - ..() - -/obj/item/gun/projectile/automatic/l6_saw/unload_ammo(mob/user, var/allow_dump=1) - if(!cover_open) - to_chat(user, "You need to open the cover to unload [src].") - return - ..() - -/obj/item/gun/projectile/automatic/battlerifle - name = "battle rifle" - desc = "The battle rifle hasn't changed much since its inception in the mid 20th century. Built to last in the toughest conditions, you can't tell if this one was even made this century." - icon = 'icons/obj/guns/battlerifle.dmi' - icon_state = "battlerifle" - item_state = null - w_class = ITEM_SIZE_HUGE - force = 12 - caliber = CALIBER_RIFLE_MILITARY - origin_tech = list(TECH_COMBAT = 4, TECH_MATERIAL = 1, TECH_ESOTERIC = 5) - slot_flags = SLOT_BACK - load_method = MAGAZINE - magazine_type = /obj/item/ammo_magazine/mil_rifle - allowed_magazines = /obj/item/ammo_magazine/mil_rifle - one_hand_penalty = 10 - accuracy = 1 - bulk = GUN_BULK_RIFLE + 1 - wielded_item_state = "battlerifle-wielded" - mag_insert_sound = 'sound/weapons/guns/interaction/ltrifle_magin.ogg' - mag_remove_sound = 'sound/weapons/guns/interaction/ltrifle_magout.ogg' - - //Battle Rifle is only accurate in semi-automatic fire. - init_firemodes = list( - SEMI_AUTO_NODELAY, - FULL_AUTO_400 - ) - -/obj/item/gun/projectile/automatic/battlerifle/on_update_icon() - ..() - if(ammo_magazine) - icon_state = "battlerifle" - wielded_item_state = "battlerifle-wielded" - else - icon_state = "battlerifle-empty" - wielded_item_state = "battlerifle-wielded-empty" diff --git a/code/modules/projectiles/guns/projectile/dartgun.dm b/code/modules/projectiles/guns/projectile/dartgun.dm deleted file mode 100644 index 62d84763278c1..0000000000000 --- a/code/modules/projectiles/guns/projectile/dartgun.dm +++ /dev/null @@ -1,206 +0,0 @@ -/obj/item/projectile/bullet/chemdart - name = "dart" - icon_state = "dart" - damage = 5 - sharp = TRUE - var/reagent_amount = 15 - life_span = 15 //shorter range - unacidable = TRUE - - muzzle_type = null - -/obj/item/projectile/bullet/chemdart/New() - create_reagents(reagent_amount) - ..() - -/obj/item/projectile/bullet/chemdart/on_hit(var/atom/target, var/blocked = 0, var/def_zone = null) - if(blocked < 100 && isliving(target)) - var/mob/living/L = target - if(L.can_inject(null, def_zone) == CAN_INJECT) - reagents.trans_to_mob(L, reagent_amount, CHEM_BLOOD) - -/obj/item/ammo_casing/chemdart - name = "chemical dart" - desc = "A small hardened, hollow dart." - icon_state = "dart" - caliber = CALIBER_DART - projectile_type = /obj/item/projectile/bullet/chemdart - leaves_residue = FALSE - -/obj/item/ammo_casing/chemdart/expend() - qdel(src) - -/obj/item/ammo_magazine/chemdart - name = "dart cartridge" - desc = "A rack of hollow darts." - icon_state = "darts" - item_state = "rcdammo" - origin_tech = list(TECH_MATERIAL = 2) - mag_type = MAGAZINE - caliber = CALIBER_DART - ammo_type = /obj/item/ammo_casing/chemdart - max_ammo = 5 - multiple_sprites = 1 - -/obj/item/gun/projectile/dartgun - name = "dart gun" - desc = "Zeng-Hu Pharmaceutical's entry into the arms market, the Z-H P Artemis is a gas-powered dart gun capable of delivering chemical cocktails swiftly across short distances." - icon = 'icons/obj/guns/dartgun.dmi' - icon_state = "dartgun-empty" - item_state = null - - caliber = CALIBER_DART - fire_sound = 'sound/weapons/empty.ogg' - fire_sound_text = "a metallic click" - screen_shake = 0 - silenced = TRUE - load_method = MAGAZINE - magazine_type = /obj/item/ammo_magazine/chemdart - allowed_magazines = /obj/item/ammo_magazine/chemdart - auto_eject = 0 - recoil_buildup = 0 - handle_casings = CLEAR_CASINGS //delete casings instead of dropping them - - var/list/beakers = list() //All containers inside the gun. - var/list/mixing = list() //Containers being used for mixing. - var/max_beakers = 3 - var/dart_reagent_amount = 15 - var/container_type = /obj/item/reagent_containers/glass/beaker - var/list/starting_chems = null - -/obj/item/gun/projectile/dartgun/Initialize() - if(starting_chems) - for(var/chem in starting_chems) - var/obj/B = new container_type(src) - B.reagents.add_reagent(chem, 60) - beakers += B - . = ..() - update_icon() - -/obj/item/gun/projectile/dartgun/on_update_icon() - if(!ammo_magazine) - icon_state = "dartgun-empty" - return 1 - - if(!ammo_magazine.stored_ammo || ammo_magazine.stored_ammo.len) - icon_state = "dartgun-0" - else if(ammo_magazine.stored_ammo.len > 5) - icon_state = "dartgun-5" - else - icon_state = "dartgun-[ammo_magazine.stored_ammo.len]" - return 1 - -/obj/item/gun/projectile/dartgun/consume_next_projectile() - . = ..() - var/obj/item/projectile/bullet/chemdart/dart = . - if(istype(dart)) - fill_dart(dart) - -/obj/item/gun/projectile/dartgun/examine(mob/user) - . = ..() - if (beakers.len) - to_chat(user, "\The [src] contains:") - for(var/obj/item/reagent_containers/glass/beaker/B in beakers) - if(B.reagents && B.reagents.reagent_list.len) - for(var/datum/reagent/R in B.reagents.reagent_list) - to_chat(user, "[R.volume] units of [R.name]") - -/obj/item/gun/projectile/dartgun/attackby(obj/item/I as obj, mob/user as mob) - if(istype(I, /obj/item/reagent_containers/glass)) - add_beaker(I, user) - return 1 - ..() - -/obj/item/gun/projectile/dartgun/proc/add_beaker(var/obj/item/reagent_containers/glass/B, mob/user) - if(!istype(B, container_type)) - to_chat(user, "[B] doesn't seem to fit into [src].") - return - if(beakers.len >= max_beakers) - to_chat(user, "[src] already has [max_beakers] beakers in it - another one isn't going to fit!") - return - if(!user.unEquip(B, src)) - return - beakers |= B - user.visible_message("\The [user] inserts \a [B] into [src].", "You slot [B] into [src].") - -/obj/item/gun/projectile/dartgun/proc/remove_beaker(var/obj/item/reagent_containers/glass/B, mob/user) - mixing -= B - beakers -= B - user.put_in_hands(B) - user.visible_message("\The [user] removes \a [B] from [src].", "You remove [B] from [src].") - -//fills the given dart with reagents -/obj/item/gun/projectile/dartgun/proc/fill_dart(var/obj/item/projectile/bullet/chemdart/dart) - if(mixing.len) - var/mix_amount = dart.reagent_amount/mixing.len - for(var/obj/item/reagent_containers/glass/beaker/B in mixing) - B.reagents.trans_to_obj(dart, mix_amount) - -/obj/item/gun/projectile/dartgun/attack_self(mob/user) - Interact(user) - -/obj/item/gun/projectile/dartgun/proc/Interact(mob/user) - user.set_machine(src) - var/list/dat = list("[src] mixing control:

              ") - - if (!beakers.len) - dat += "There are no beakers inserted!

              " - else - for(var/i in 1 to beakers.len) - var/obj/item/reagent_containers/glass/beaker/B = beakers[i] - if(!istype(B)) continue - - dat += "Beaker [i] contains: " - if(B.reagents && B.reagents.reagent_list.len) - for(var/datum/reagent/R in B.reagents.reagent_list) - dat += "
              [R.volume] units of [R.name], " - if(B in mixing) - dat += "Mixing " - else - dat += "Not mixing " - else - dat += "nothing." - dat += " \[Eject\]
              " - - if(ammo_magazine) - if(ammo_magazine.stored_ammo && ammo_magazine.stored_ammo.len) - dat += "The dart cartridge has [ammo_magazine.stored_ammo.len] shots remaining." - else - dat += "The dart cartridge is empty!" - dat += " \[Eject\]
              " - - dat += "
              \[Refresh\]" - - var/datum/browser/popup = new(user, "dartgun", "[src] mixing control") - popup.set_content(jointext(dat,null)) - popup.open() - -/obj/item/gun/projectile/dartgun/OnTopic(user, href_list) - if(href_list["stop_mix"]) - var/index = text2num(href_list["stop_mix"]) - mixing -= beakers[index] - . = TOPIC_REFRESH - else if (href_list["mix"]) - var/index = text2num(href_list["mix"]) - mixing |= beakers[index] - . = TOPIC_REFRESH - else if (href_list["eject"]) - var/index = text2num(href_list["eject"]) - if(beakers[index]) - remove_beaker(beakers[index], usr) - . = TOPIC_REFRESH - else if (href_list["eject_cart"]) - unload_ammo(usr) - . = TOPIC_REFRESH - - Interact(usr) - -/obj/item/gun/projectile/dartgun/vox - name = "alien dart gun" - desc = "A small gas-powered dartgun, fitted for nonhuman hands." - -/obj/item/gun/projectile/dartgun/vox/medical - starting_chems = list(/datum/reagent/kelotane,/datum/reagent/bicaridine,/datum/reagent/dylovene) - -/obj/item/gun/projectile/dartgun/vox/raider - starting_chems = list(/datum/reagent/space_drugs,/datum/reagent/soporific,/datum/reagent/impedrezene) diff --git a/code/modules/projectiles/guns/projectile/detective.dm b/code/modules/projectiles/guns/projectile/detective.dm deleted file mode 100644 index d9a9cdbb01a79..0000000000000 --- a/code/modules/projectiles/guns/projectile/detective.dm +++ /dev/null @@ -1,86 +0,0 @@ -/obj/item/gun/projectile/pistol/sec/detective - var/unique_name - var/datum/detective_gun_skin/unique_reskin - var/static/list/gun_options - -/obj/item/gun/projectile/pistol/sec/detective/Initialize() - . = ..() - if(!gun_options) - gun_options = init_subtypes(/datum/detective_gun_skin) - -/obj/item/gun/projectile/pistol/sec/detective/on_update_icon() - if(ammo_magazine && ammo_magazine.stored_ammo.len) - if(unique_reskin) - icon_state = unique_reskin.icon_state - else - icon_state = initial(icon_state) - else - if(unique_reskin) - icon_state = "[unique_reskin.icon_state]-e" - else - icon_state = "[initial(icon_state)]-e" - -/obj/item/gun/projectile/pistol/sec/detective/verb/rename_gun() - set name = "Name Gun" - set category = "Object" - set desc = "Rename your gun. If you're the detective." - - var/mob/M = usr - if(!M.mind) return 0 - if(M.incapacitated()) return 0 - if(!M.mind.assigned_role == "Detective") - to_chat(M, "You don't feel cool enough to name this gun, chump.") - return 0 - - var/input = sanitizeSafe(input("What do you want to name the gun?","Rename gun"), MAX_NAME_LEN) - - if(src && input && !M.incapacitated() && in_range(M,src)) - if(!findtext(input, "the", 1, 4)) - input = "\improper [input]" - name = input - unique_name = input - to_chat(M, "You name the gun '[input]'. Say hello to your new friend.") - return 1 - -/obj/item/gun/projectile/pistol/sec/detective/verb/reskin_gun() - set name = "Reskin gun" - set category = "Object" - set desc = "Click to reskin your gun." - - var/mob/M = usr - if(M.incapacitated()) - return - - var/datum/detective_gun_skin/choice = input(M,"What do you want to skin the gun to?","Reskin Gun", unique_reskin) as null|anything in gun_options - if(src && choice && !M.incapacitated() && in_range(M,src)) - icon_state = choice.icon_state - unique_reskin = choice - if(!unique_name) - SetName(choice.name) - to_chat(M, "Your gun is now skinned as \a [choice]. Say hello to your new friend.") - return 1 - - -//apart of reskins that have two sprites, touching may result in frustration and breaks -/obj/item/gun/projectile/pistol/sec/detective/attack_hand(var/mob/living/user) - if(!unique_reskin && loc == user) - reskin_gun(user) - return - ..() - -/datum/detective_gun_skin - var/name - var/icon_state - var/icon - -/datum/detective_gun_skin/default/New() - ..() - var/obj/item/gun/projectile/pistol/sec/detective/d = /obj/item/gun/projectile/pistol/sec/detective - name = initial(d.name) - icon_state = initial(d.icon) - icon_state = initial(d.icon_state) - -/datum/detective_gun_skin/mk_standard - name = "\improper NT Mk. 58" - icon_state = "secguncomp" - icon = 'icons/obj/guns/pistol.dmi' diff --git a/code/modules/projectiles/guns/projectile/flaregun.dm b/code/modules/projectiles/guns/projectile/flaregun.dm deleted file mode 100644 index 1da8c2ac25fb0..0000000000000 --- a/code/modules/projectiles/guns/projectile/flaregun.dm +++ /dev/null @@ -1,49 +0,0 @@ -/obj/item/gun/projectile/flare - name = "flare launcher" - desc = "A single shot polymer flare gun, the XI-54 \"Sirius\" is a reliable way to launch flares away from yourself." - icon = 'icons/obj/guns/flaregun.dmi' - icon_state = "flaregun" - item_state = "flaregun" - fire_sound = 'sound/weapons/empty.ogg' - fire_sound_text = "a satisfying 'thump'" - slot_flags = SLOT_BELT | SLOT_HOLSTER - w_class = ITEM_SIZE_SMALL - obj_flags = 0 - slot_flags = SLOT_BELT | SLOT_HOLSTER - matter = list(MATERIAL_STEEL = 1500, MATERIAL_PLASTIC = 2000) - - caliber = CALIBER_SHOTGUN - handle_casings = CYCLE_CASINGS - load_method = SINGLE_CASING|SPEEDLOADER - max_shells = 1 - load_sound = 'sound/weapons/guns/interaction/shotgun_instert.ogg' - -/obj/item/gun/projectile/flare/loaded - ammo_type = /obj/item/ammo_casing/shotgun/flash - -/obj/item/gun/projectile/flare/examine(mob/user, distance) - . = ..() - if(distance <= 2 && loaded.len) - to_chat(user, "\A [loaded[1]] is chambered.") - -/obj/item/gun/projectile/flare/special_check() - if(length(loaded)) - var/obj/item/ammo_casing/casing = loaded[1] - if(istype(casing) && !istype(casing, /obj/item/ammo_casing/shotgun/flash)) - var/damage = casing.BB.get_structure_damage() - if(istype(casing.BB, /obj/item/projectile/bullet/pellet)) - var/obj/item/projectile/bullet/pellet/PP = casing.BB - damage = PP.damage*PP.pellets - if(damage > 5) - var/mob/living/carbon/C = loc - if(istype(C)) - C.visible_message("[src] explodes in [C]'s hands!", "[src] explodes in your face!") - C.drop_from_inventory(src) - for(var/zone in list(BP_L_HAND, BP_R_HAND)) - C.apply_damage(rand(10,20), def_zone=zone) - else - visible_message("[src] explodes!") - explosion(get_turf(src), -1, -1, 1) - qdel(src) - return FALSE - return ..() \ No newline at end of file diff --git a/code/modules/projectiles/guns/projectile/pistol.dm b/code/modules/projectiles/guns/projectile/pistol.dm deleted file mode 100644 index ff25b3e2fdeac..0000000000000 --- a/code/modules/projectiles/guns/projectile/pistol.dm +++ /dev/null @@ -1,225 +0,0 @@ - -/obj/item/gun/projectile/pistol - load_method = MAGAZINE - caliber = CALIBER_PISTOL - magazine_type = /obj/item/ammo_magazine/pistol - allowed_magazines = /obj/item/ammo_magazine/pistol - screen_shake = 1 - recoil_buildup = 2.4 - var/empty_icon = TRUE //If it should change icon when empty - var/ammo_indicator = FALSE - -/obj/item/gun/projectile/pistol/on_update_icon() - ..() - if(empty_icon) - if(ammo_magazine && ammo_magazine.stored_ammo.len) - icon_state = initial(icon_state) - else - icon_state = "[initial(icon_state)]-e" - if(ammo_indicator) - if(!ammo_magazine || !LAZYLEN(ammo_magazine.stored_ammo)) - overlays += image(icon, "ammo_bad") - else if(LAZYLEN(ammo_magazine.stored_ammo) <= 0.5 * ammo_magazine.max_ammo) - overlays += image(icon, "ammo_warn") - return - else - overlays += image(icon, "ammo_ok") - -/obj/item/gun/projectile/pistol/military - name = "military pistol" - desc = "The Hephaestus Industries P20 - a mass produced kinetic sidearm in widespread service with the SCGDF." - magazine_type = /obj/item/ammo_magazine/pistol/double - allowed_magazines = /obj/item/ammo_magazine/pistol/double - icon = 'icons/obj/guns/military_pistol.dmi' - icon_state = "military" - item_state = "secgundark" - safety_icon = "safety" - origin_tech = list(TECH_COMBAT = 3, TECH_MATERIAL = 2) - fire_delay = 7 - ammo_indicator = TRUE - -/obj/item/gun/projectile/pistol/military/alt - desc = "The HelTek Optimus, best known as the standard-issue sidearm for the ICCG Navy." - icon = 'icons/obj/guns/military_pistol2.dmi' - icon_state = "military-alt" - safety_icon = "safety" - origin_tech = list(TECH_COMBAT = 4, TECH_MATERIAL = 2, TECH_ESOTERIC = 8) - fire_delay = 8 - -/obj/item/gun/projectile/pistol/sec - name = "pistol" - desc = "The NT Mk58 is a cheap, ubiquitous sidearm, produced by a NanoTrasen subsidiary. Found pretty much everywhere humans are." - icon = 'icons/obj/guns/pistol.dmi' - icon_state = "secguncomp" - safety_icon = "safety" - magazine_type = /obj/item/ammo_magazine/pistol/rubber - accuracy = -1 - fire_delay = 6 - origin_tech = list(TECH_COMBAT = 2, TECH_MATERIAL = 2) - -/obj/item/gun/projectile/pistol/sec/lethal - magazine_type = /obj/item/ammo_magazine/pistol - -/obj/item/gun/projectile/pistol/magnum_pistol - name = "magnum pistol" - desc = "The HelTek Magnus, a robust Terran handgun that uses high-caliber ammo." - icon = 'icons/obj/guns/magnum_pistol.dmi' - icon_state = "magnum" - item_state = "magnum" - safety_icon = "safety" - force = 9 - caliber = CALIBER_PISTOL_MAGNUM - fire_delay = 12 - magazine_type = /obj/item/ammo_magazine/magnum - allowed_magazines = /obj/item/ammo_magazine/magnum - mag_insert_sound = 'sound/weapons/guns/interaction/hpistol_magin.ogg' - mag_remove_sound = 'sound/weapons/guns/interaction/hpistol_magout.ogg' - accuracy = 2 - one_hand_penalty = 2 - bulk = 3 - ammo_indicator = TRUE - -/obj/item/gun/projectile/pistol/throwback - name = "pistol" - desc = "A product of one of thousands of illegal workshops from around the galaxy. Often replicas of ancient Earth handguns, these guns are usually found in hands of frontier colonists and pirates." - icon = 'icons/obj/guns/pistol_throwback.dmi' - icon_state = "pistol1" - magazine_type = /obj/item/ammo_magazine/pistol/throwback - one_hand_penalty = 2 - fire_delay = 7 - caliber = CALIBER_PISTOL_ANTIQUE - origin_tech = list(TECH_COMBAT = 2, TECH_MATERIAL = 2) - var/base_icon = "pistol1" - -/obj/item/gun/projectile/pistol/throwback/Initialize() - . = ..() - base_icon = "pistol[rand(1,4)]" - update_icon() - -/obj/item/gun/projectile/pistol/throwback/on_update_icon() - ..() - if(ammo_magazine && ammo_magazine.stored_ammo.len) - icon_state = base_icon - else - icon_state = "[base_icon]-e" - -/obj/item/gun/projectile/pistol/gyropistol - name = "gyrojet pistol" - desc = "A bulky pistol designed to fire self propelled rounds." - icon = 'icons/obj/guns/gyropistol.dmi' - icon_state = "gyropistol" - max_shells = 8 - caliber = CALIBER_GYROJET - origin_tech = list(TECH_COMBAT = 3) - magazine_type = /obj/item/ammo_magazine/gyrojet - allowed_magazines = /obj/item/ammo_magazine/gyrojet - handle_casings = CLEAR_CASINGS //the projectile is the casing - fire_delay = 25 - auto_eject = 1 - auto_eject_sound = 'sound/weapons/smg_empty_alarm.ogg' - mag_insert_sound = 'sound/weapons/guns/interaction/hpistol_magin.ogg' - mag_remove_sound = 'sound/weapons/guns/interaction/hpistol_magout.ogg' - empty_icon = FALSE - -/obj/item/gun/projectile/pistol/gyropistol/on_update_icon() - ..() - if(ammo_magazine) - icon_state = "gyropistolloaded" - else - icon_state = "gyropistol" - -/obj/item/gun/projectile/pistol/holdout - name = "holdout pistol" - desc = "The Lumoco Arms P3 Whisper. A small, easily concealable gun." - icon = 'icons/obj/guns/holdout_pistol.dmi' - icon_state = "pistol" - item_state = null - w_class = ITEM_SIZE_SMALL - caliber = CALIBER_PISTOL_SMALL - fire_delay = 4 - origin_tech = list(TECH_COMBAT = 2, TECH_MATERIAL = 2, TECH_ESOTERIC = 2) - magazine_type = /obj/item/ammo_magazine/pistol/small - allowed_magazines = /obj/item/ammo_magazine/pistol/small - var/obj/item/silencer/silencer - -/obj/item/gun/projectile/pistol/holdout/attack_hand(mob/user) - if(user.get_inactive_hand() == src) - if(silenced) - if(user.l_hand != src && user.r_hand != src) - ..() - return - if (silencer) - to_chat(user, SPAN_NOTICE("You unscrew \the [silencer] from \the [src].")) - user.put_in_hands(silencer) - silencer = null - silenced = FALSE - w_class = initial(w_class) - update_icon() - return - ..() - -/obj/item/gun/projectile/pistol/holdout/attackby(obj/item/I, mob/user) - if(istype(I, /obj/item/silencer)) - if(user.l_hand != src && user.r_hand != src) //if we're not in his hands - to_chat(user, SPAN_WARNING("You'll need \the [src] in your hands to do that.")) - return - if (silenced) - to_chat(user, SPAN_WARNING("\The [src] is already silenced.")) - return - if(!user.unEquip(I, src)) - return//put the silencer into the gun - to_chat(user, SPAN_NOTICE("You screw \the [I] onto \the [src].")) - silenced = TRUE - silencer = I - w_class = ITEM_SIZE_NORMAL - update_icon() - return - ..() - -/obj/item/gun/projectile/pistol/holdout/on_update_icon() - ..() - if(silenced) - icon_state = "pistol-silencer" - else - icon_state = "pistol" - if(!(ammo_magazine && ammo_magazine.stored_ammo.len)) - icon_state = "[icon_state]-e" - -/obj/item/silencer - name = "silencer" - desc = "A silencer." - icon = 'icons/obj/guns/holdout_pistol.dmi' - icon_state = "silencer" - w_class = ITEM_SIZE_SMALL - -/obj/item/gun/projectile/pistol/broomstick - name = "broomstick" - desc = "An antique gun that makes you want to yell 'IT BELONGS IN A MUSEUM!'. There appears to be some thing scratched next to the fireselector, though you cant make it out." - icon = 'icons/obj/guns/broomstick.dmi' - icon_state = "broomstick" - accuracy_power = 6 - one_hand_penalty = 3 - fire_delay = 5 - caliber = CALIBER_PISTOL_SMALL - origin_tech = list( - TECH_COMBAT = 2, - TECH_MATERIAL = 2 - ) - load_method = SINGLE_CASING|SPEEDLOADER - max_shells = 10 - - init_firemodes = list( - list( - mode_name="semi auto", - burst=1, - fire_delay=5, - move_delay=null, - one_hand_penalty=5 - ), - list( - mode_name="scratched out option", - burst=10, - fire_delay=1, - one_hand_penalty=8 - ) - ) diff --git a/code/modules/projectiles/guns/projectile/revolver.dm b/code/modules/projectiles/guns/projectile/revolver.dm deleted file mode 100644 index df1d1e87d4489..0000000000000 --- a/code/modules/projectiles/guns/projectile/revolver.dm +++ /dev/null @@ -1,87 +0,0 @@ -/obj/item/gun/projectile/revolver - name = "revolver" - desc = "The al-Maliki & Mosley Magnum Double Action is a choice revolver for when you absolutely, positively need to put a hole in the other guy." - icon = 'icons/obj/guns/revolvers.dmi' - icon_state = "revolver" - item_state = "revolver" - caliber = CALIBER_PISTOL_MAGNUM - origin_tech = list(TECH_COMBAT = 2, TECH_MATERIAL = 2) - handle_casings = CYCLE_CASINGS - max_shells = 6 - fire_delay = 3 //Revolvers are naturally slower-firing - ammo_type = /obj/item/ammo_casing/pistol/magnum - var/chamber_offset = 0 //how many empty chambers in the cylinder until you hit a round - mag_insert_sound = 'sound/weapons/guns/interaction/rev_magin.ogg' - mag_remove_sound = 'sound/weapons/guns/interaction/rev_magout.ogg' - accuracy = 2 - one_hand_penalty = 3 - recoil_buildup = 8 - bulk = 3 - -/obj/item/gun/projectile/revolver/AltClick() - if(CanPhysicallyInteract(usr)) - spin_cylinder() - -/obj/item/gun/projectile/revolver/verb/spin_cylinder() - set name = "Spin cylinder" - set desc = "Fun when you're bored out of your skull." - set category = "Object" - - chamber_offset = 0 - visible_message("\The [usr] spins the cylinder of \the [src]!", \ - "You hear something metallic spin and click.") - playsound(src.loc, 'sound/weapons/revolver_spin.ogg', 100, 1) - loaded = shuffle(loaded) - if(rand(1,max_shells) > loaded.len) - chamber_offset = rand(0,max_shells - loaded.len) - -/obj/item/gun/projectile/revolver/consume_next_projectile() - if(chamber_offset) - chamber_offset-- - return - return ..() - -/obj/item/gun/projectile/revolver/load_ammo(var/obj/item/A, mob/user) - chamber_offset = 0 - return ..() - -/obj/item/gun/projectile/revolver/medium - name = "revolver" - icon_state = "medium" - safety_icon = "medium_safety" - caliber = CALIBER_PISTOL - ammo_type = /obj/item/ammo_casing/pistol - desc = "The Lumoco Arms' Solid is a rugged revolver for people who don't keep their guns well-maintained." - accuracy = 1 - bulk = 0 - fire_delay = 9 - -/obj/item/gun/projectile/revolver/holdout - name = "holdout revolver" - desc = "The al-Maliki & Mosley Partner is a concealed-carry revolver made for people who do not trust automatic pistols any more than the people they're dealing with." - icon_state = "holdout" - item_state = "pen" - caliber = CALIBER_PISTOL_SMALL - ammo_type = /obj/item/ammo_casing/pistol/small - w_class = ITEM_SIZE_SMALL - accuracy = 1 - one_hand_penalty = 0 - bulk = 0 - fire_delay = 7 - -/obj/item/gun/projectile/revolver/capgun - name = "cap gun" - desc = "Looks almost like the real thing! Ages 8 and up." - icon_state = "revolver-toy" - caliber = CALIBER_CAPS - origin_tech = list(TECH_COMBAT = 1, TECH_MATERIAL = 1) - ammo_type = /obj/item/ammo_casing/cap - -/obj/item/gun/projectile/revolver/capgun/attackby(obj/item/wirecutters/W, mob/user) - if(!istype(W) || icon_state == "revolver") - return ..() - to_chat(user, "You snip off the toy markings off the [src].") - name = "revolver" - icon_state = "revolver" - desc += " Someone snipped off the barrel's toy mark. How dastardly." - return 1 diff --git a/code/modules/projectiles/guns/projectile/shotgun.dm b/code/modules/projectiles/guns/projectile/shotgun.dm deleted file mode 100644 index c9e74210a3653..0000000000000 --- a/code/modules/projectiles/guns/projectile/shotgun.dm +++ /dev/null @@ -1,151 +0,0 @@ -/obj/item/gun/projectile/shotgun/pump - name = "shotgun" - desc = "The mass-produced W-T Remmington 29x shotgun is a favourite of police and security forces on many worlds. Useful for sweeping alleys." - icon = 'icons/obj/guns/shotguns.dmi' - icon_state = "shotgun" - item_state = "shotgun" - max_shells = 4 - w_class = ITEM_SIZE_HUGE - force = 10 - obj_flags = OBJ_FLAG_CONDUCTIBLE - slot_flags = SLOT_BACK - caliber = CALIBER_SHOTGUN - origin_tech = list(TECH_COMBAT = 4, TECH_MATERIAL = 2) - load_method = SINGLE_CASING - ammo_type = /obj/item/ammo_casing/shotgun/beanbag - handle_casings = HOLD_CASINGS - one_hand_penalty = 8 - recoil_buildup = 12 - bulk = 6 - var/recentpump = 0 // to prevent spammage - wielded_item_state = "shotgun-wielded" - load_sound = 'sound/weapons/guns/interaction/shotgun_instert.ogg' - -/obj/item/gun/projectile/shotgun/on_update_icon() - ..() - if(length(loaded)) - icon_state = initial(icon_state) - else - icon_state = "[initial(icon_state)]-empty" - -/obj/item/gun/projectile/shotgun/pump/consume_next_projectile() - if(chambered) - return chambered.BB - return null - -/obj/item/gun/projectile/shotgun/pump/attack_self(mob/living/user as mob) - if(world.time >= recentpump + 10) - pump(user) - recentpump = world.time - -/obj/item/gun/projectile/shotgun/pump/proc/pump(mob/M as mob) - playsound(M, 'sound/weapons/shotgunpump.ogg', 60, 1) - - if(chambered)//We have a shell in the chamber - chambered.dropInto(loc)//Eject casing - if(LAZYLEN(chambered.fall_sounds)) - playsound(loc, pick(chambered.fall_sounds), 50, 1) - chambered = null - - if(loaded.len) - var/obj/item/ammo_casing/AC = loaded[1] //load next casing. - loaded -= AC //Remove casing from loaded list. - chambered = AC - - update_icon() - -/obj/item/gun/projectile/shotgun/pump/combat - name = "combat shotgun" - desc = "Built for close quarters combat, the Hephaestus Industries KS-40 is widely regarded as a weapon of choice for repelling boarders." - icon_state = "cshotgun" - item_state = "cshotgun" - wielded_item_state = "cshotgun-wielded" - origin_tech = list(TECH_COMBAT = 5, TECH_MATERIAL = 2) - max_shells = 7 //match the ammo box capacity, also it can hold a round in the chamber anyways, for a total of 8. - ammo_type = /obj/item/ammo_casing/shotgun - one_hand_penalty = 8 - -/obj/item/gun/projectile/shotgun/pump/combat/on_update_icon() - ..() - if(length(loaded) > 3) - for(var/i = 0 to length(loaded) - 4) - var/image/I = image(icon, "shell") - I.pixel_x = i * 2 - overlays += I - -/obj/item/gun/projectile/shotgun/doublebarrel - name = "double-barreled shotgun" - desc = "A true classic." - icon = 'icons/obj/guns/shotguns.dmi' - icon_state = "dshotgun" - item_state = "dshotgun" - wielded_item_state = "dshotgun-wielded" - //SPEEDLOADER because rapid unloading. - //In principle someone could make a speedloader for it, so it makes sense. - load_method = SINGLE_CASING|SPEEDLOADER - handle_casings = CYCLE_CASINGS - max_shells = 2 - w_class = ITEM_SIZE_HUGE - force = 10 - obj_flags = OBJ_FLAG_CONDUCTIBLE - slot_flags = SLOT_BACK - caliber = CALIBER_SHOTGUN - origin_tech = list(TECH_COMBAT = 3, TECH_MATERIAL = 1) - ammo_type = /obj/item/ammo_casing/shotgun/beanbag - one_hand_penalty = 2 - wielded_item_state = "gun_wielded" - - burst_delay = 0 - init_firemodes = list( - list(mode_name="fire one barrel at a time", burst=1), - list(mode_name="fire both barrels at once", burst=2), - ) - -/obj/item/gun/projectile/shotgun/doublebarrel/pellet - ammo_type = /obj/item/ammo_casing/shotgun/pellet - -/obj/item/gun/projectile/shotgun/doublebarrel/flare - name = "signal shotgun" - desc = "A double-barreled shotgun meant to fire signal flash shells." - ammo_type = /obj/item/ammo_casing/shotgun/flash - -/obj/item/gun/projectile/shotgun/doublebarrel/unload_ammo(user, allow_dump) - ..(user, allow_dump=1) - -//this is largely hacky and bad :( -Pete -/obj/item/gun/projectile/shotgun/doublebarrel/attackby(var/obj/item/A as obj, mob/user as mob) - if(w_class > 3 && (istype(A, /obj/item/circular_saw) || istype(A, /obj/item/melee/energy) || istype(A, /obj/item/gun/energy/plasmacutter))) - if(istype(A, /obj/item/gun/energy/plasmacutter)) - var/obj/item/gun/energy/plasmacutter/cutter = A - if(!cutter.slice(user)) - return ..() - to_chat(user, "You begin to shorten the barrel of \the [src].") - if(loaded.len) - for(var/i in 1 to max_shells) - Fire(user, user) //will this work? //it will. we call it twice, for twice the FUN - user.visible_message("The shotgun goes off!", "The shotgun goes off in your face!") - return - if(do_after(user, 3 SECONDS, src, DO_DEFAULT | DO_BOTH_UNIQUE_ACT)) //SHIT IS STEALTHY EYYYYY - user.unEquip(src) - var/obj/item/gun/projectile/shotgun/doublebarrel/sawn/empty/buddy = new(loc) - transfer_fingerprints_to(buddy) - qdel(src) - to_chat(user, "You shorten the barrel of \the [src]!") - else - ..() - -/obj/item/gun/projectile/shotgun/doublebarrel/sawn - name = "sawn-off shotgun" - desc = "Omar's coming!" - icon_state = "sawnshotgun" - item_state = "sawnshotgun" - wielded_item_state = "sawnshotgun-wielded" - slot_flags = SLOT_BELT|SLOT_HOLSTER - ammo_type = /obj/item/ammo_casing/shotgun/pellet - w_class = ITEM_SIZE_NORMAL - force = 5 - one_hand_penalty = 4 - bulk = 2 - -/obj/item/gun/projectile/shotgun/doublebarrel/sawn/empty - starts_loaded = FALSE diff --git a/code/modules/projectiles/guns/projectile/sniper.dm b/code/modules/projectiles/guns/projectile/sniper.dm deleted file mode 100644 index 20b37cfa20272..0000000000000 --- a/code/modules/projectiles/guns/projectile/sniper.dm +++ /dev/null @@ -1,159 +0,0 @@ -/obj/item/gun/projectile/heavysniper - name = "anti-materiel rifle" - desc = "A portable anti-armour rifle fitted with a scope, the HI PTR-7 Rifle was originally designed to be used against armoured exosuits. It is capable of punching through windows and non-reinforced walls with ease." - icon = 'icons/obj/guns/heavysniper.dmi' - icon_state = "heavysniper" - item_state = "heavysniper" //sort of placeholder - w_class = ITEM_SIZE_HUGE - force = 10 - slot_flags = SLOT_BACK - origin_tech = list(TECH_COMBAT = 8, TECH_MATERIAL = 2, TECH_ESOTERIC = 8) - caliber = CALIBER_ANTIMATERIAL - screen_shake = 2 //extra kickback - handle_casings = HOLD_CASINGS - load_method = SINGLE_CASING - max_shells = 1 - ammo_type = /obj/item/ammo_casing/shell - one_hand_penalty = 6 - accuracy = -2 - recoil_buildup = 75 - bulk = 8 - scoped_accuracy = 8 //increased accuracy over the LWAP because only one shot - scope_zoom = 2 - var/bolt_open = 0 - wielded_item_state = "heavysniper-wielded" //sort of placeholder - load_sound = 'sound/weapons/guns/interaction/rifle_load.ogg' - fire_delay = 12 - -/obj/item/gun/projectile/heavysniper/on_update_icon() - ..() - if(bolt_open) - icon_state = "[initial(icon_state)]-open" - else - icon_state = "[initial(icon_state)]" - -/obj/item/gun/projectile/heavysniper/handle_post_fire(mob/user, atom/target, var/pointblank=0, var/reflex=0) - ..() - if(user && user.skill_check(SKILL_WEAPONS, SKILL_PROF)) - to_chat(user, "You work the bolt open with a reflexive motion, ejecting [chambered]!") - unload_shell() - -/obj/item/gun/projectile/heavysniper/proc/unload_shell() - if(chambered) - if(!bolt_open) - playsound(src.loc, 'sound/weapons/guns/interaction/rifle_boltback.ogg', 50, 1) - bolt_open = 1 - chambered.dropInto(src.loc) - loaded -= chambered - chambered = null - -/obj/item/gun/projectile/heavysniper/attack_self(mob/user as mob) - bolt_open = !bolt_open - if(bolt_open) - if(chambered) - to_chat(user, "You work the bolt open, ejecting [chambered]!") - unload_shell() - else - to_chat(user, "You work the bolt open.") - else - to_chat(user, "You work the bolt closed.") - playsound(src.loc, 'sound/weapons/guns/interaction/rifle_boltforward.ogg', 50, 1) - bolt_open = 0 - add_fingerprint(user) - update_icon() - -/obj/item/gun/projectile/heavysniper/special_check(mob/user) - if(bolt_open) - to_chat(user, "You can't fire [src] while the bolt is open!") - return 0 - return ..() - -/obj/item/gun/projectile/heavysniper/load_ammo(var/obj/item/A, mob/user) - if(!bolt_open) - return - ..() - -/obj/item/gun/projectile/heavysniper/unload_ammo(mob/user, var/allow_dump=1) - if(!bolt_open) - return - ..() - - -/obj/item/gun/projectile/heavysniper/boltaction - name = "bolt action rifle" - desc = "An old bolt action rifle from some forgotten war, still commonplace among farmers and colonists as an anti-varmint rifle." - icon = 'icons/obj/guns/boltaction.dmi' - icon_state = "boltaction" - item_state = "boltaction" - w_class = ITEM_SIZE_LARGE - origin_tech = list(TECH_COMBAT = 2) - caliber = CALIBER_RIFLE - ammo_type = /obj/item/ammo_casing/rifle - load_method = SINGLE_CASING|SPEEDLOADER - max_shells = 5 - accuracy = 4 - scope_zoom = 0 - recoil_buildup = 4 - scoped_accuracy = 0 - wielded_item_state = "boltaction-wielded" - -/obj/item/gun/projectile/sniper/garand - name = "garand rifle" - desc = "The rugged garand is a old semi-automatic weapon popular on the frontier worlds." - icon = 'icons/obj/guns/garand.dmi' - icon_state = "garand" - item_state = null - w_class = ITEM_SIZE_HUGE - force = 10 - caliber = CALIBER_RIFLE - origin_tech = list(TECH_COMBAT = 2) - slot_flags = SLOT_BACK - load_method = MAGAZINE - magazine_type = /obj/item/ammo_magazine/iclipr - allowed_magazines = /obj/item/ammo_magazine/iclipr - auto_eject = TRUE - auto_eject_sound = 'sound/weapons/guns/interaction/garand_magout.ogg' - one_hand_penalty = 9 - accuracy_power = 10 - accuracy = 1 - bulk = GUN_BULK_RIFLE + 1 - wielded_item_state = "garand-wielded" - mag_insert_sound = 'sound/weapons/guns/interaction/ltrifle_magin.ogg' - mag_remove_sound = 'sound/weapons/guns/interaction/garand_magout.ogg' - - init_firemodes = list( - list(mode_name="semi auto", burst=1, fire_delay=6, move_delay=null, one_hand_penalty=8) - ) - -/obj/item/gun/projectile/sniper/garand/on_update_icon() - ..() - if (ammo_magazine) - icon_state = "garand" - wielded_item_state = "garand-wielded" - else - icon_state = "garand-empty" - wielded_item_state = "garand-wielded-empty" - -/obj/item/gun/projectile/sniper/semistrip - name = "Carbine Rifle" - desc = "An old semi-automatic carbine chambered in large pistol rounds, this thing looks older than the SCG." - icon = 'icons/obj/guns/semistrip.dmi' - icon_state = "semistrip" - item_state = "semistrip" - w_class = ITEM_SIZE_LARGE - force = 10 - origin_tech = list(TECH_COMBAT = 2) - slot_flags = SLOT_BACK - caliber = CALIBER_PISTOL_MAGNUM - ammo_type = /obj/item/ammo_casing/pistol/magnum - load_method = SINGLE_CASING|SPEEDLOADER - max_shells = 10 - accuracy = 1 - recoil_buildup = 5 - scope_zoom = 0 - scoped_accuracy = 0 - wielded_item_state = "semistrip-wielded" - - init_firemodes = list( - list(mode_name="semi auto", burst=1, fire_delay=2, move_delay=null, one_hand_penalty=8) - ) diff --git a/code/modules/projectiles/guns/projectile/zipgun.dm b/code/modules/projectiles/guns/projectile/zipgun.dm deleted file mode 100644 index cb879b27ee49e..0000000000000 --- a/code/modules/projectiles/guns/projectile/zipgun.dm +++ /dev/null @@ -1,38 +0,0 @@ - -/obj/item/gun/projectile/pirate - name = "zip gun" - desc = "Little more than a barrel, handle, and firing mechanism, cheap makeshift firearms like this one are not uncommon in frontier systems." - icon = 'icons/obj/guns/zipgun.dmi' - icon_state = "zipgun" - item_state = "sawnshotgun" - handle_casings = CYCLE_CASINGS //player has to take the old casing out manually before reloading - load_method = SINGLE_CASING - max_shells = 1 //literally just a barrel - has_safety = FALSE - w_class = ITEM_SIZE_NORMAL - - var/static/list/ammo_types = list( - /obj/item/ammo_casing/pistol, - /obj/item/ammo_casing/shotgun, - /obj/item/ammo_casing/shotgun, - /obj/item/ammo_casing/shotgun/pellet, - /obj/item/ammo_casing/shotgun/pellet, - /obj/item/ammo_casing/shotgun/pellet, - /obj/item/ammo_casing/shotgun/beanbag , - /obj/item/ammo_casing/shotgun/stunshell, - /obj/item/ammo_casing/shotgun/flash, - /obj/item/ammo_casing/rifle/military, - /obj/item/ammo_casing/rifle - ) - -/obj/item/gun/projectile/pirate/toggle_safety(var/mob/user) - to_chat(user, "There's no safety on \the [src]!") - -/obj/item/gun/projectile/pirate/Initialize() - var/obj/item/ammo_casing/ammo = pick(ammo_types) - caliber = initial(ammo.caliber) - desc += " Uses [caliber] rounds." - . = ..() - -/obj/item/gun/projectile/pirate/unloaded - starts_loaded = FALSE diff --git a/code/modules/projectiles/projectile.dm b/code/modules/projectiles/projectile.dm deleted file mode 100644 index 3a7e2f344effc..0000000000000 --- a/code/modules/projectiles/projectile.dm +++ /dev/null @@ -1,552 +0,0 @@ -//Amount of time in deciseconds to wait before deleting all drawn segments of a projectile. -#define SEGMENT_DELETION_DELAY 5 - -/obj/item/projectile - name = "projectile" - icon = 'icons/obj/projectiles.dmi' - icon_state = "bullet" - density = TRUE - unacidable = TRUE - anchored = TRUE //There's a reason this is here, Mport. God fucking damn it -Agouri. Find&Fix by Pete. The reason this is here is to stop the curving of emitter shots. - pass_flags = PASS_FLAG_TABLE - mouse_opacity = 0 - var/bumped = 0 //Prevents it from hitting more than one guy at once - var/def_zone = "" //Aiming at - var/mob/firer = null//Who shot it - var/silenced = FALSE //Attack message - var/yo = null - var/xo = null - var/current = null - var/shot_from = "" // name of the object which shot us - var/atom/original = null // the target clicked (not necessarily where the projectile is headed). Should probably be renamed to 'target' or something. - var/turf/starting = null // the projectile's starting turf - var/list/permutated = list() // we've passed through these atoms, don't try to hit them again - var/list/segments = list() //For hitscan projectiles with tracers. - - var/p_x = 16 - var/p_y = 16 // the pixel location of the tile that the player clicked. Default is the center - - var/hitchance_mod = 0 - var/distance_falloff = 2 //multiplier, higher value means accuracy drops faster with distance - var/damage_falloff = FALSE - /// List(Distance, Multiplier), intended to represent short / medium / long ranges. Uses default of 1 for anything lower than the first value. - var/damage_falloff_list = list( - list(4, 0.9), - list(6, 0.8), - list(8, 0.7) - ) - - var/damage = 10 - /// String (One of `DAMAGE_*`). - var/damage_type = DAMAGE_BRUTE - var/nodamage = FALSE //Determines if the projectile will skip any damage inflictions - var/damage_flags = DAMAGE_FLAG_BULLET - var/projectile_type = /obj/item/projectile - var/penetrating = 0 //If greater than zero, the projectile will pass through dense objects as specified by on_penetrate() - var/life_span = 50 //This will de-increment every process(). When 0, it will delete the projectile. - //Effects - var/stun = 0 - var/weaken = 0 - var/paralyze = 0 - var/irradiate = 0 - var/stutter = 0 - var/eyeblur = 0 - var/drowsy = 0 - var/agony = 0 - var/embed = FALSE // whether or not the projectile can embed itself in the mob - var/penetration_modifier = 0.2 //How much internal damage this projectile can deal, as a multiplier. - - var/hitscan = FALSE // whether the projectile should be hitscan - var/step_delay = 1 // the delay between iterations if not a hitscan projectile - - // effect types to be used - var/muzzle_type - var/tracer_type - var/impact_type - - var/fire_sound - var/miss_sounds - var/ricochet_sounds - var/list/impact_sounds //for different categories, IMPACT_MEAT etc - var/shrapnel_type = /obj/item/material/shard/shrapnel/steel - - var/vacuum_traversal = 1 //Determines if the projectile can exist in vacuum, if false, the projectile will be deleted if it enters vacuum. - - var/proj_color - - var/datum/plot_vector/trajectory // used to plot the path of the projectile - var/datum/vector_loc/location // current location of the projectile in pixel space - var/matrix/effect_transform // matrix to rotate and scale projectile effects - putting it here so it doesn't - // have to be recreated multiple times - -/obj/item/projectile/Initialize() - damtype = damage_type //TODO unify these vars properly - if(!hitscan) - animate_movement = SLIDE_STEPS - else animate_movement = NO_STEPS - . = ..() - -/obj/item/projectile/damage_flags() - return damage_flags - -//TODO: make it so this is called more reliably, instead of sometimes by bullet_act() and sometimes not -/obj/item/projectile/proc/on_hit(var/atom/target, var/blocked = 0, var/def_zone = null) - if(blocked >= 100) return 0//Full block - if(!isliving(target)) return 0 - if(isanimal(target)) return 0 - - var/mob/living/L = target - - L.apply_effects(0, weaken, paralyze, stutter, eyeblur, drowsy, 0, blocked) - L.stun_effect_act(stun, agony, def_zone, src) - //radiation protection is handled separately from other armour types. - L.apply_damage(irradiate, DAMAGE_RADIATION, damage_flags = DAMAGE_FLAG_DISPERSED) - - return 1 - -//called when the projectile stops flying because it collided with something -/obj/item/projectile/proc/on_impact(var/atom/A) - impact_effect() // generate impact effect - if (damage && damage_type == DAMAGE_BURN) - var/turf/T = get_turf(A) - if(T) - T.hotspot_expose(700, 5) - -//Checks if the projectile is eligible for embedding. Not that it necessarily will. -/obj/item/projectile/can_embed() - //embed must be enabled and damage type must be brute - if(!embed || damage_type != DAMAGE_BRUTE) - return 0 - return 1 - -/obj/item/projectile/proc/get_structure_damage() - if (damage_type == DAMAGE_BRUTE || damage_type == DAMAGE_BURN) - return damage - return 0 - -//return 1 if the projectile should be allowed to pass through after all, 0 if not. -/obj/item/projectile/proc/check_penetrate(var/atom/A) - return 1 - -/obj/item/projectile/proc/check_fire(atom/target as mob, var/mob/living/user as mob) //Checks if you can hit them or not. - check_trajectory(target, user, pass_flags, item_flags, obj_flags) - -//sets the click point of the projectile using mouse input params -/obj/item/projectile/proc/set_clickpoint(var/params) - var/list/mouse_control = params2list(params) - if(mouse_control["icon-x"]) - p_x = text2num(mouse_control["icon-x"]) - if(mouse_control["icon-y"]) - p_y = text2num(mouse_control["icon-y"]) - - // //randomize clickpoint a bit based on dispersion - // if(dispersion) - // var/radius = round((dispersion*0.443)*world.icon_size*0.8) //0.443 = sqrt(pi)/4 = 2a, where a is the side length of a square that shares the same area as a circle with diameter = dispersion - // p_x = between(0, p_x + rand(-radius, radius), world.icon_size) - // p_y = between(0, p_y + rand(-radius, radius), world.icon_size) - -//called to launch a projectile -/obj/item/projectile/proc/launch(atom/target, var/target_zone, var/x_offset=0, var/y_offset=0, var/angle_offset=0) - var/turf/curloc = get_turf(src) - var/turf/targloc = get_turf(target) - if (!istype(targloc) || !istype(curloc)) - return 1 - - if(targloc == curloc) //Shooting something in the same turf - target.bullet_act(src, target_zone) - on_impact(target) - qdel(src) - return 0 - - original = target - def_zone = target_zone - - addtimer(CALLBACK(src, .proc/finalize_launch, curloc, targloc, x_offset, y_offset, angle_offset),0) - return 0 - -/obj/item/projectile/proc/launch_from_mob(atom/target, mob/user, target_zone, x_offset = 0, y_offset = 0, angle_offset = 0) - if(user == target) //Shooting yourself - user.bullet_act(src, target_zone) - qdel(src) - return 0 - - firer = user - - return launch(target, target_zone, x_offset, y_offset) - -/obj/item/projectile/proc/finalize_launch(var/turf/curloc, var/turf/targloc, var/x_offset, var/y_offset, var/angle_offset) - setup_trajectory(curloc, targloc, x_offset, y_offset, angle_offset) //plot the initial trajectory - Process() - spawn(SEGMENT_DELETION_DELAY) //running this from a proc wasn't working. - QDEL_NULL_LIST(segments) - -//called to launch a projectile from a gun -/obj/item/projectile/proc/launch_from_gun(atom/target, mob/user, obj/item/gun/launcher, var/target_zone, var/x_offset=0, var/y_offset=0, var/angle_offset) - if(user == target) //Shooting yourself - user.bullet_act(src, target_zone) - qdel(src) - return 0 - - dropInto(user.loc) //move the projectile out into the world - - firer = user - shot_from = launcher.name - silenced = launcher.silenced - - return launch(target, target_zone, x_offset, y_offset, angle_offset) - -//Used to change the direction of the projectile in flight. -/obj/item/projectile/proc/redirect(var/new_x, var/new_y, var/atom/starting_loc, var/mob/new_firer=null) - var/turf/new_target = locate(new_x, new_y, src.z) - - original = new_target - if(new_firer) - firer = src - - setup_trajectory(starting_loc, new_target) - -//Called when the projectile intercepts a mob. Returns 1 if the projectile hit the mob, 0 if it missed and should keep flying. -/obj/item/projectile/proc/attack_mob(var/mob/living/target_mob, var/distance, var/special_miss_modifier=0) - if(!istype(target_mob)) - return - - //roll to-hit - var/miss_modifier = max(distance_falloff*(distance)*(distance) - hitchance_mod + special_miss_modifier, -30) - //makes moving targets harder to hit, and stationary easier to hit - var/movment_mod = min(5, (world.time - target_mob.l_move_time) - 5) - - if (damage_falloff) - var/damage_mod = 1 - for (var/list/entry as anything in damage_falloff_list) - if (entry[1] > distance) - break - damage_mod = entry[2] - damage = damage * damage_mod - armor_penetration = armor_penetration * damage_mod - agony = agony * damage_mod - //running in a straight line isnt as helpful tho - if(movment_mod < 0) - if(target_mob.last_move == get_dir(firer, target_mob)) - movment_mod *= 0.25 - else if(target_mob.last_move == get_dir(target_mob,firer)) - movment_mod *= 0.5 - miss_modifier -= movment_mod - var/hit_zone = get_zone_with_miss_chance(def_zone, target_mob, miss_modifier, ranged_attack=(distance > 1 || original != target_mob)) //if the projectile hits a target we weren't originally aiming at then retain the chance to miss - - var/result = PROJECTILE_FORCE_MISS - if(hit_zone) - def_zone = hit_zone //set def_zone, so if the projectile ends up hitting someone else later (to be implemented), it is more likely to hit the same part - if(!target_mob.aura_check(AURA_TYPE_BULLET, src,def_zone)) - return 1 - result = target_mob.bullet_act(src, def_zone) - - if(result == PROJECTILE_FORCE_MISS) - if(!silenced) - target_mob.visible_message("\The [src] misses [target_mob] narrowly!") - if(LAZYLEN(miss_sounds)) - playsound(target_mob.loc, pick(miss_sounds), 60, 1) - return 0 - - //hit messages - if(silenced) - to_chat(target_mob, "You've been hit in the [parse_zone(def_zone)] by \the [src]!") - else - target_mob.visible_message("\The [target_mob] is hit by \the [src] in the [parse_zone(def_zone)]!")//X has fired Y is now given by the guns so you cant tell who shot you if you could not see the shooter - - //admin logs - if(!no_attack_log) - if(istype(firer, /mob)) - - var/attacker_message = "shot with \a [src.type]" - var/victim_message = "shot with \a [src.type]" - var/admin_message = "shot (\a [src.type])" - - admin_attack_log(firer, target_mob, attacker_message, victim_message, admin_message) - else - admin_victim_log(target_mob, "was shot by an UNKNOWN SUBJECT (No longer exists) using \a [src]") - - //sometimes bullet_act() will want the projectile to continue flying - if (result == PROJECTILE_CONTINUE) - return 0 - - return 1 - -/obj/item/projectile/Bump(atom/A as mob|obj|turf|area, forced=0) - if(A == src) - return 0 //no - - if(A == firer) - forceMove(A.loc) - return 0 //cannot shoot yourself - - if((bumped && !forced) || (A in permutated)) - return 0 - - var/passthrough = 0 //if the projectile should continue flying - var/distance = get_dist(starting,loc) - - var/tempLoc = get_turf(A) - - bumped = 1 - if(ismob(A)) - var/mob/M = A - if(istype(A, /mob/living)) - //if they have a neck grab on someone, that person gets hit instead - var/obj/item/grab/G = locate() in M - if(G && G.shield_assailant()) - visible_message("\The [M] uses [G.affecting] as a shield!") - if(Bump(G.affecting, forced=1)) - return //If Bump() returns 0 (keep going) then we continue on to attack M. - - passthrough = !attack_mob(M, distance) - else - passthrough = 1 //so ghosts don't stop bullets - else - passthrough = (A.bullet_act(src, def_zone) == PROJECTILE_CONTINUE) //backwards compatibility - if(isturf(A)) - for(var/obj/O in A) - O.bullet_act(src) - for(var/mob/living/M in A) - attack_mob(M, distance) - - //penetrating projectiles can pass through things that otherwise would not let them - if(!passthrough && penetrating > 0) - if(check_penetrate(A)) - passthrough = 1 - penetrating-- - - //the bullet passes through a dense object! - if(passthrough) - //move ourselves onto A so we can continue on our way. - if(!tempLoc) - qdel(src) - return TRUE - - loc = tempLoc - if(A) - permutated.Add(A) - - bumped = 0 //reset bumped variable! - return 0 - - //stop flying - on_impact(A) - - set_density(0) - set_invisibility(101) - - qdel(src) - return 1 - -/obj/item/projectile/ex_act() - return //explosions probably shouldn't delete projectiles - -/obj/item/projectile/CanPass(atom/movable/mover, turf/target, height=0, air_group=0) - return 1 - -/obj/item/projectile/Process() - var/first_step = 1 - - spawn while(src && src.loc) - if(life_span-- < 1) - on_impact(src.loc) //for any final impact behaviours - qdel(src) - return - if((!( current ) || loc == current)) - current = locate(min(max(x + xo, 1), world.maxx), min(max(y + yo, 1), world.maxy), z) - if((x == 1 || x == world.maxx || y == 1 || y == world.maxy)) - qdel(src) - return - - trajectory.increment() // increment the current location - location = trajectory.return_location(location) // update the locally stored location data - - if(!location) - qdel(src) // if it's left the world... kill it - return - - if (is_below_sound_pressure(get_turf(src)) && !vacuum_traversal) //Deletes projectiles that aren't supposed to bein vacuum if they leave pressurised areas - qdel(src) - return - - before_move() - Move(location.return_turf()) - pixel_x = location.pixel_x - pixel_y = location.pixel_y - - if(!bumped && !isturf(original)) - if(loc == get_turf(original)) - if(!(original in permutated)) - if(Bump(original)) - return - - if(first_step) - muzzle_effect() - first_step = 0 - else if(!bumped && life_span > 0) - tracer_effect() - if(!hitscan) - sleep(step_delay) //add delay between movement iterations if it's not a hitscan weapon - -/obj/item/projectile/proc/before_move() - return 0 - -/obj/item/projectile/proc/setup_trajectory(turf/startloc, turf/targloc, var/x_offset = 0, var/y_offset = 0, var/angle_offset) - // setup projectile state - starting = startloc - current = startloc - yo = round(targloc.y - startloc.y + y_offset, 1) - xo = round(targloc.x - startloc.x + x_offset, 1) - - // plot the initial trajectory - var/offset = 0 - trajectory = new - trajectory.setup(starting, original, pixel_x, pixel_y, angle_offset=offset) - effect_transform = matrix().Update( - scale_x = round(trajectory.return_hypotenuse() + 0.005, 0.001), - rotation = round(-trajectory.angle, 0.1) - ) - SetTransform(rotation = -(trajectory.angle + 90)) - -/obj/item/projectile/proc/muzzle_effect() - if(silenced) - return - - if(ispath(muzzle_type)) - var/obj/effect/projectile/M = new muzzle_type(get_turf(src)) - - if(istype(M)) - M.SetTransform(others = effect_transform) - M.pixel_x = round(location.pixel_x, 1) - M.pixel_y = round(location.pixel_y, 1) - if(!hitscan) //Bullets don't hit their target instantly, so we can't link the deletion of the muzzle flash to the bullet's Destroy() - QDEL_IN(M,1) - else - segments += M - -/obj/item/projectile/proc/tracer_effect() - if(ispath(tracer_type)) - var/obj/effect/projectile/P = new tracer_type(location.loc) - - if(istype(P)) - P.SetTransform(others = effect_transform) - P.pixel_x = round(location.pixel_x, 1) - P.pixel_y = round(location.pixel_y, 1) - if(hitscan) - segments += P - -/obj/item/projectile/proc/impact_effect() - if(ispath(impact_type)) - var/obj/effect/projectile/P = new impact_type(location ? location.loc : get_turf(src)) - - if(istype(P) && location) - P.SetTransform(others = effect_transform) - P.pixel_x = round(location.pixel_x, 1) - P.pixel_y = round(location.pixel_y, 1) - segments += P - -//"Tracing" projectile -/obj/item/projectile/test //Used to see if you can hit them. - invisibility = 101 //Nope! Can't see me! - yo = null - xo = null - var/result = 0 //To pass the message back to the gun. - var/atom/hit_thing - -/obj/item/projectile/test/Bump(atom/A as mob|obj|turf|area, forced=0) - if(A == firer) - forceMove(A.loc) - return //cannot shoot yourself - if(istype(A, /obj/item/projectile)) - return - if(istype(A, /mob/living)) - result = 2 //We hit someone, return 1! - hit_thing = A - return - result = 1 - return - -/obj/item/projectile/test/launch(atom/target) - var/turf/curloc = get_turf(src) - var/turf/targloc = get_turf(target) - if(!curloc || !targloc) - return 0 - - original = target - - //plot the initial trajectory - setup_trajectory(curloc, targloc) - return Process(targloc) - -/obj/item/projectile/test/Process(var/turf/targloc) - while(src) //Loop on through! - if(result > 1) - return hit_thing - else if (result) - return (result - 1) - if((!( targloc ) || loc == targloc)) - targloc = locate(min(max(x + xo, 1), world.maxx), min(max(y + yo, 1), world.maxy), z) //Finding the target turf at map edge - - trajectory.increment() // increment the current location - location = trajectory.return_location(location) // update the locally stored location data - if (!location) - return FALSE - - Move(location.return_turf()) - - var/mob/living/M = locate() in get_turf(src) - if(istype(M)) //If there is someting living... - return 1 //Return 1 - else - M = locate() in get_step(src,targloc) - if(istype(M)) - return 1 - -//Helper proc to check if you can hit them or not. -/proc/check_trajectory(atom/target as mob|obj, atom/firer as mob|obj, var/pass_flags=PASS_FLAG_TABLE|PASS_FLAG_GLASS|PASS_FLAG_GRILLE, item_flags = null, obj_flags = null) - if(!istype(target) || !istype(firer)) - return 0 - - var/obj/item/projectile/test/trace = new /obj/item/projectile/test(get_turf(firer)) //Making the test.... - - //Set the flags and pass flags to that of the real projectile... - if(!isnull(item_flags)) - trace.item_flags = item_flags - if(!isnull(obj_flags)) - trace.obj_flags = obj_flags - trace.pass_flags = pass_flags - - var/output = trace.launch(target) //Test it! - qdel(trace) //No need for it anymore - return output //Send it back to the gun! - -/obj/item/projectile/after_wounding(obj/item/organ/external/organ, datum/wound/wound) - //Check if we even broke skin in first place - if (!wound || !(wound.damage_type == INJURY_TYPE_CUT || wound.damage_type == INJURY_TYPE_PIERCE)) - return - //Check if we can do nasty stuff inside - if(!can_embed() || (organ.species.species_flags & SPECIES_FLAG_NO_EMBED)) - return - //Embed or sever artery - var/damage_prob = 0.5 * wound.damage * penetration_modifier - if(prob(damage_prob)) - var/obj/item/shrapnel = get_shrapnel() - if(shrapnel) - shrapnel.forceMove(organ) - organ.embed(shrapnel) - else if(prob(2 * damage_prob)) - organ.sever_artery() - - organ.owner.projectile_hit_bloody(src, wound.damage*5, null, organ) - -/obj/item/projectile/proc/get_shrapnel() - if(shrapnel_type) - var/obj/item/SP = new shrapnel_type() - SP.SetName((name != "shrapnel")? "[name] shrapnel" : "shrapnel") - SP.desc += " It looks like it was fired from [shot_from]." - return SP - -/proc/get_proj_icon_by_color(var/obj/item/projectile/P, var/color) - var/icon/I = new(P.icon, P.icon_state) - I.Blend(color) - return I diff --git a/code/modules/projectiles/projectile/animate.dm b/code/modules/projectiles/projectile/animate.dm deleted file mode 100644 index 7a3914c6fb7b1..0000000000000 --- a/code/modules/projectiles/projectile/animate.dm +++ /dev/null @@ -1,13 +0,0 @@ -/obj/item/projectile/animate - name = "bolt of animation" - icon_state = "ice_1" - damage = 0 - damage_type = DAMAGE_BURN - nodamage = TRUE - damage_flags = 0 - -/obj/item/projectile/animate/Bump(var/atom/change, forced=0) - if((istype(change, /obj/item) || istype(change, /obj/structure)) && !is_type_in_list(change, protected_objects)) - var/obj/O = change - new /mob/living/simple_animal/hostile/mimic/(O.loc, O, firer) - ..() diff --git a/code/modules/projectiles/projectile/beams.dm b/code/modules/projectiles/projectile/beams.dm deleted file mode 100644 index 338f11358d75a..0000000000000 --- a/code/modules/projectiles/projectile/beams.dm +++ /dev/null @@ -1,451 +0,0 @@ -/obj/item/projectile/beam - name = "laser" - icon_state = "laser" - temperature = T0C + 300 - fire_sound='sound/weapons/Laser.ogg' - impact_sounds = list(BULLET_IMPACT_MEAT = SOUNDS_LASER_MEAT, BULLET_IMPACT_METAL = SOUNDS_LASER_METAL) - pass_flags = PASS_FLAG_TABLE | PASS_FLAG_GLASS | PASS_FLAG_GRILLE - damage = 40 - damage_type = DAMAGE_BURN - sharp = TRUE - damage_flags = DAMAGE_FLAG_LASER - eyeblur = 4 - hitscan = TRUE - invisibility = 101 //beam projectiles are invisible as they are rendered by the effect engine - penetration_modifier = 0.3 - distance_falloff = 1.5 - damage_falloff = TRUE - damage_falloff_list = list( - list(3, 0.95), - list(5, 0.90), - list(7, 0.80), - ) - - muzzle_type = /obj/effect/projectile/laser/muzzle - tracer_type = /obj/effect/projectile/laser/tracer - impact_type = /obj/effect/projectile/laser/impact - -/obj/item/projectile/beam/practice - fire_sound = 'sound/weapons/Taser.ogg' - damage = 0 - eyeblur = 2 - -/obj/item/projectile/beam/smalllaser - damage = 35 - distance_falloff = 2 - damage_falloff_list = list( - list(3, 0.90), - list(5, 0.80), - list(7, 0.60), - ) - -/obj/item/projectile/beam/midlaser - damage = 40 - armor_penetration = 10 - distance_falloff = 1 - damage_falloff_list = list( - list(4, 0.96), - list(6, 0.92), - list(8, 0.86), - ) - -/obj/item/projectile/beam/heavylaser - name = "heavy laser" - icon_state = "heavylaser" - fire_sound = 'sound/weapons/lasercannonfire.ogg' - damage = 60 - armor_penetration = 30 - distance_falloff = 0.5 - damage_falloff_list = list( - list(6, 0.97), - list(9, 0.94), - list(11, 0.88), - ) - - muzzle_type = /obj/effect/projectile/laser/heavy/muzzle - tracer_type = /obj/effect/projectile/laser/heavy/tracer - impact_type = /obj/effect/projectile/laser/heavy/impact - -/obj/item/projectile/beam/xray - name = "x-ray beam" - icon_state = "xray" - fire_sound = 'sound/weapons/laser3.ogg' - damage = 30 - armor_penetration = 30 - penetration_modifier = 0.8 - distance_falloff = 1.5 - damage_falloff_list = list( - list(3, 0.95), - list(5, 0.90), - list(7, 0.80), - ) - - muzzle_type = /obj/effect/projectile/laser/xray/muzzle - tracer_type = /obj/effect/projectile/laser/xray/tracer - impact_type = /obj/effect/projectile/laser/xray/impact - -/obj/item/projectile/beam/xray/midlaser - damage = 30 - armor_penetration = 50 - distance_falloff = 1 - damage_falloff_list = list( - list(4, 0.96), - list(6, 0.92), - list(8, 0.84), - ) - -/obj/item/projectile/beam/pulse - name = "pulse" - icon_state = "u_laser" - fire_sound='sound/weapons/pulse.ogg' - damage = 15 //lower damage, but fires in bursts - armor_penetration = 25 - distance_falloff = 1.5 - damage_falloff_list = list( - list(3, 0.95), - list(5, 0.90), - list(7, 0.80), - ) - - muzzle_type = /obj/effect/projectile/laser/pulse/muzzle - tracer_type = /obj/effect/projectile/laser/pulse/tracer - impact_type = /obj/effect/projectile/laser/pulse/impact - -/obj/item/projectile/beam/pulse/mid - damage = 20 - armor_penetration = 30 - distance_falloff = 1 - damage_falloff_list = list( - list(4, 0.96), - list(6, 0.92), - list(8, 0.84), - ) - -/obj/item/projectile/beam/pulse/heavy - damage = 25 - armor_penetration = 35 - distance_falloff = 0.5 - damage_falloff_list = list( - list(6, 0.97), - list(9, 0.94), - list(11, 0.88), - ) - -/obj/item/projectile/beam/pulse/destroy - name = "destroyer pulse" - damage = 100 //badmins be badmins I don't give a fuck - armor_penetration = 100 - damage_falloff_list = list( - list(6, 0.99), - list(9, 0.98), - list(11, 0.97), - ) - -/obj/item/projectile/beam/pulse/destroy/on_hit(var/atom/target, var/blocked = 0) - if(isturf(target)) - target.ex_act(EX_ACT_HEAVY) - ..() - -/obj/item/projectile/beam/pulse/skrell - icon_state = "pu_laser" - damage = 20 - muzzle_type = /obj/effect/projectile/laser/pulse/skrell/muzzle - tracer_type = /obj/effect/projectile/laser/pulse/skrell/tracer - impact_type = /obj/effect/projectile/laser/pulse/skrell/impact - -/obj/item/projectile/beam/pulse/skrell/heavy - damage = 30 - -/obj/item/projectile/beam/pulse/skrell/single - damage = 50 - -/obj/item/projectile/beam/emitter - name = "emitter beam" - icon_state = "emitter" - fire_sound = 'sound/weapons/emitter.ogg' - damage = 0 // The actual damage is computed in /code/modules/power/singularity/emitter.dm - - muzzle_type = /obj/effect/projectile/laser/emitter/muzzle - tracer_type = /obj/effect/projectile/laser/emitter/tracer - impact_type = /obj/effect/projectile/laser/emitter/impact - -/obj/item/projectile/beam/lastertag/blue - name = "lasertag beam" - icon_state = "bluelaser" - pass_flags = PASS_FLAG_TABLE | PASS_FLAG_GLASS | PASS_FLAG_GRILLE - damage = 0 - no_attack_log = TRUE - damage_type = DAMAGE_BURN - - 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/lastertag/blue/on_hit(var/atom/target, var/blocked = 0) - if(istype(target, /mob/living/carbon/human)) - var/mob/living/carbon/human/M = target - if(istype(M.wear_suit, /obj/item/clothing/suit/redtag)) - M.Weaken(5) - return 1 - -/obj/item/projectile/beam/lastertag/red - name = "lasertag beam" - icon_state = "laser" - pass_flags = PASS_FLAG_TABLE | PASS_FLAG_GLASS | PASS_FLAG_GRILLE - damage = 0 - no_attack_log = TRUE - damage_type = DAMAGE_BURN - -/obj/item/projectile/beam/lastertag/red/on_hit(var/atom/target, var/blocked = 0) - if(istype(target, /mob/living/carbon/human)) - var/mob/living/carbon/human/M = target - if(istype(M.wear_suit, /obj/item/clothing/suit/bluetag)) - M.Weaken(5) - return 1 - -/obj/item/projectile/beam/lastertag/omni//A laser tag bolt that stuns EVERYONE - name = "lasertag beam" - icon_state = "omnilaser" - pass_flags = PASS_FLAG_TABLE | PASS_FLAG_GLASS | PASS_FLAG_GRILLE - damage = 0 - damage_type = DAMAGE_BURN - - muzzle_type = /obj/effect/projectile/laser/omni/muzzle - tracer_type = /obj/effect/projectile/laser/omni/tracer - impact_type = /obj/effect/projectile/laser/omni/impact - -/obj/item/projectile/beam/lastertag/omni/on_hit(var/atom/target, var/blocked = 0) - if(istype(target, /mob/living/carbon/human)) - var/mob/living/carbon/human/M = target - if((istype(M.wear_suit, /obj/item/clothing/suit/bluetag))||(istype(M.wear_suit, /obj/item/clothing/suit/redtag))) - M.Weaken(5) - return 1 - -/obj/item/projectile/beam/sniper - name = "sniper beam" - icon_state = "xray" - fire_sound = 'sound/weapons/marauder.ogg' - damage = 50 - armor_penetration = 10 - damage_falloff_list = list( - list(8, 0.97), - list(12, 0.94), - list(16, 0.88), - ) - - muzzle_type = /obj/effect/projectile/laser/xray/muzzle - tracer_type = /obj/effect/projectile/laser/xray/tracer - impact_type = /obj/effect/projectile/laser/xray/impact - -/obj/item/projectile/beam/stun - name = "stun beam" - icon_state = "stun" - fire_sound = 'sound/weapons/Taser.ogg' - damage_flags = 0 - sharp = FALSE - damage = 1//flavor burn! still not a laser, dmg will be reduce by energy resistance not laser resistances - damage_type = DAMAGE_BURN - eyeblur = 1//Some feedback that you've been hit - agony = 40 - distance_falloff = 1.5 - damage_falloff_list = list( - list(3, 0.95), - list(5, 0.90), - list(7, 0.80), - ) - - muzzle_type = /obj/effect/projectile/stun/muzzle - tracer_type = /obj/effect/projectile/stun/tracer - impact_type = /obj/effect/projectile/stun/impact - -/obj/item/projectile/beam/stun/smalllaser - distance_falloff = 2 - damage_falloff_list = list( - list(3, 0.90), - list(5, 0.80), - list(7, 0.60), - ) - -/obj/item/projectile/beam/stun/heavy - name = "heavy stun beam" - damage = 2 - agony = 60 - distance_falloff = 1 - damage_falloff_list = list( - list(5, 0.97), - list(7, 0.94), - list(9, 0.88), - ) - -/obj/item/projectile/beam/stun/shock - name = "shock beam" - agony = 0 - damage = 15 - damage_type = DAMAGE_SHOCK - fire_sound='sound/weapons/pulse.ogg' - distance_falloff = 1.5 - damage_falloff_list = list( - list(3, 0.95), - list(5, 0.90), - list(7, 0.80), - ) - -/obj/item/projectile/beam/stun/shock/smalllaser - distance_falloff = 2 - damage_falloff_list = list( - list(3, 0.90), - list(5, 0.80), - list(7, 0.60), - ) - -/obj/item/projectile/beam/stun/shock/heavy - name = "heavy shock beam" - damage = 30 - distance_falloff = 1 - damage_falloff_list = list( - list(5, 0.97), - list(7, 0.94), - list(9, 0.88), - ) - -/obj/item/projectile/beam/plasmacutter - name = "plasma arc" - icon_state = "omnilaser" - fire_sound = 'sound/weapons/plasma_cutter.ogg' - damage = 20 - armor_penetration = 30 - edge = TRUE - damage_type = DAMAGE_BURN - life_span = 5 - pass_flags = PASS_FLAG_TABLE - distance_falloff = 2 - damage_falloff_list = list( - list(2, 0.80), - list(3, 0.60), - list(4, 0.40), - ) - - muzzle_type = /obj/effect/projectile/trilaser/muzzle - tracer_type = /obj/effect/projectile/trilaser/tracer - impact_type = /obj/effect/projectile/trilaser/impact - -/obj/item/projectile/beam/plasmacutter/on_impact(var/atom/A) - if(istype(A, /turf/simulated/mineral)) - var/turf/simulated/mineral/M = A - M.GetDrilled(1) - . = ..() - -/obj/item/projectile/beam/confuseray - name = "disorientator ray" - icon_state = "beam_grass" - fire_sound='sound/weapons/confuseray.ogg' - damage = 2 - agony = 7 - sharp = FALSE - distance_falloff = 5 - damage_flags = 0 - damage_type = DAMAGE_STUN - life_span = 3 - penetration_modifier = 0 - var/potency_min = 4 - var/potency_max = 6 - - muzzle_type = /obj/effect/projectile/confuseray/muzzle - tracer_type = /obj/effect/projectile/confuseray/tracer - impact_type = /obj/effect/projectile/confuseray/impact - -/obj/item/projectile/beam/confuseray/on_hit(var/atom/target, var/blocked = 0) - if(istype(target, /mob/living)) - var/mob/living/L = target - var/potency = rand(potency_min, potency_max) - L.confused += potency - L.eye_blurry += potency - if(L.confused >= 10) - L.Stun(1) - L.drop_l_hand() - L.drop_r_hand() - - return 1 - -/obj/item/projectile/beam/particle - name = "particle lance" - icon_state = "particle" - damage = 35 - armor_penetration = 50 - muzzle_type = /obj/effect/projectile/laser_particle/muzzle - tracer_type = /obj/effect/projectile/laser_particle/tracer - impact_type = /obj/effect/projectile/laser_particle/impact - penetration_modifier = 0.5 - -/obj/item/projectile/beam/particle/small - name = "particle beam" - damage = 20 - armor_penetration = 20 - penetration_modifier = 0.3 - -/obj/item/projectile/beam/darkmatter - name = "dark matter bolt" - icon_state = "darkb" - damage = 40 - armor_penetration = 35 - damage_type = DAMAGE_BRUTE - muzzle_type = /obj/effect/projectile/darkmatter/muzzle - tracer_type = /obj/effect/projectile/darkmatter/tracer - impact_type = /obj/effect/projectile/darkmatter/impact - -/obj/item/projectile/beam/stun/darkmatter - name = "dark matter wave" - icon_state = "darkt" - damage_flags = 0 - sharp = FALSE - agony = 40 - damage_type = DAMAGE_STUN - muzzle_type = /obj/effect/projectile/stun/darkmatter/muzzle - tracer_type = /obj/effect/projectile/stun/darkmatter/tracer - impact_type = /obj/effect/projectile/stun/darkmatter/impact - -/obj/item/projectile/beam/pointdefense - name = "point defense salvo" - icon_state = "laser" - damage = 15 - damage_type = DAMAGE_SHOCK //You should be safe inside a voidsuit - sharp = FALSE //"Wide" spectrum beam - muzzle_type = /obj/effect/projectile/pointdefense/muzzle - tracer_type = /obj/effect/projectile/pointdefense/tracer - impact_type = /obj/effect/projectile/pointdefense/impact - -/obj/item/projectile/beam/incendiary_laser - name = "scattered laser blast" - icon_state = "beam_incen" - fire_sound='sound/weapons/scan.ogg' - damage = 12 - agony = 8 - eyeblur = 8 - sharp = FALSE - damage_flags = 0 - life_span = 8 - armor_penetration = 10 - damage_falloff_list = list( - list(3, 0.95), - list(5, 0.90), - list(7, 0.80), - ) - - muzzle_type = /obj/effect/projectile/incen/muzzle - tracer_type = /obj/effect/projectile/incen/tracer - impact_type = /obj/effect/projectile/incen/impact - -/obj/item/projectile/beam/incendiary_laser/on_hit(var/atom/target, var/blocked = 0) - ..() - if(isliving(target)) - var/mob/living/L = target - L.adjust_fire_stacks(rand(2,4)) - if(L.fire_stacks >= 3) - L.IgniteMob() - -/obj/item/projectile/beam/blue - damage = 30 - - muzzle_type = /obj/effect/projectile/laser/blue/muzzle - tracer_type = /obj/effect/projectile/laser/blue/tracer - impact_type = /obj/effect/projectile/laser/blue/impact diff --git a/code/modules/projectiles/projectile/bullets.dm b/code/modules/projectiles/projectile/bullets.dm deleted file mode 100644 index a4ff1003bc183..0000000000000 --- a/code/modules/projectiles/projectile/bullets.dm +++ /dev/null @@ -1,301 +0,0 @@ -/obj/item/projectile/bullet - name = "bullet" - icon_state = "bullet" - fire_sound = 'sound/weapons/gunshot/gunshot_strong.ogg' - damage = 50 - damage_type = DAMAGE_BRUTE - damage_flags = DAMAGE_FLAG_BULLET | DAMAGE_FLAG_SHARP - embed = TRUE - penetration_modifier = 1.0 - var/mob_passthrough_check = 0 - var/is_pellet = FALSE - - muzzle_type = /obj/effect/projectile/bullet/muzzle - miss_sounds = list('sound/weapons/guns/miss1.ogg','sound/weapons/guns/miss2.ogg','sound/weapons/guns/miss3.ogg','sound/weapons/guns/miss4.ogg') - ricochet_sounds = list('sound/weapons/guns/ricochet1.ogg', 'sound/weapons/guns/ricochet2.ogg', - 'sound/weapons/guns/ricochet3.ogg', 'sound/weapons/guns/ricochet4.ogg') - impact_sounds = list(BULLET_IMPACT_MEAT = SOUNDS_BULLET_MEAT, BULLET_IMPACT_METAL = SOUNDS_BULLET_METAL) - -/obj/item/projectile/bullet/on_hit(var/atom/target, var/blocked = 0) - if (..(target, blocked)) - var/mob/living/L = target - shake_camera(L, 1, 1, 0.5) - -/obj/item/projectile/bullet/attack_mob(var/mob/living/target_mob, var/distance, var/miss_modifier) - if(penetrating > 0 && damage > 20 && prob(damage)) - mob_passthrough_check = 1 - else - mob_passthrough_check = 0 - . = ..() - - if(. == 1 && iscarbon(target_mob) && !is_pellet) - damage *= 0.7 //squishy mobs absorb KE - -/obj/item/projectile/bullet/can_embed() - //prevent embedding if the projectile is passing through the mob - if(mob_passthrough_check) - return 0 - return ..() - -/obj/item/projectile/bullet/check_penetrate(var/atom/A) - if(QDELETED(A) || !A.density) return 1 //if whatever it was got destroyed when we hit it, then I guess we can just keep going - - if(ismob(A)) - if(!mob_passthrough_check) - return 0 - return 1 - - var/chance = damage - if(has_extension(A, /datum/extension/penetration)) - var/datum/extension/penetration/P = get_extension(A, /datum/extension/penetration) - chance = P.PenetrationProbability(chance, damage, damage_type) - - if(prob(chance)) - var/maintainedVelocity = min(max(20, chance), 90) / 100 //the chance to penetrate is used to calculate leftover velocity, capped at 90% - armor_penetration *= maintainedVelocity - damage *= maintainedVelocity - step_delay = min(step_delay / maintainedVelocity, step_delay / 2) - - if(A.opacity) - //display a message so that people on the other side aren't so confused - A.visible_message("\The [src] pierces through \the [A]!") - return 1 - - return 0 - -//For projectiles that actually represent clouds of projectiles -/obj/item/projectile/bullet/pellet - name = "shrapnel" //'shrapnel' sounds more dangerous (i.e. cooler) than 'pellet' - damage = 37.5 - //icon_state = "bullet" //TODO: would be nice to have it's own icon state - var/pellets = 4 //number of pellets - var/range_step = 2 //projectile will lose a fragment each time it travels this distance. Can be a non-integer. - var/base_spread = 90 //lower means the pellets spread more across body parts. If zero then this is considered a shrapnel explosion instead of a shrapnel cone - var/spread_step = 10 //higher means the pellets spread more across body parts with distance - is_pellet = TRUE - -/obj/item/projectile/bullet/pellet/Bumped() - . = ..() - bumped = 0 //can hit all mobs in a tile. pellets is decremented inside attack_mob so this should be fine. - -/obj/item/projectile/bullet/pellet/proc/get_pellets(var/distance) - /// pellets lost due to distance - var/pellet_loss = round(max(distance - 1, 0)/range_step) - return max(pellets - pellet_loss, 1) - -/obj/item/projectile/bullet/pellet/attack_mob(var/mob/living/target_mob, var/distance, var/miss_modifier) - if (pellets < 0) return 1 - - var/total_pellets = get_pellets(distance) - var/spread = max(base_spread - (spread_step*distance), 0) - - //shrapnel explosions miss prone mobs with a chance that increases with distance - var/prone_chance = 0 - if(!base_spread) - prone_chance = max(spread_step*(distance - 2), 0) - - var/hits = 0 - for (var/i in 1 to total_pellets) - if(target_mob.lying && target_mob != original && prob(prone_chance)) - continue - - //pellet hits spread out across different zones, but 'aim at' the targeted zone with higher probability - //whether the pellet actually hits the def_zone or a different zone should still be determined by the parent using get_zone_with_miss_chance(). - var/old_zone = def_zone - def_zone = ran_zone(def_zone, spread) - if (..()) hits++ - def_zone = old_zone //restore the original zone the projectile was aimed at - - pellets -= hits //each hit reduces the number of pellets left - if (hits >= total_pellets || pellets <= 0) - return 1 - return 0 - -/obj/item/projectile/bullet/pellet/get_structure_damage() - var/distance = get_dist(loc, starting) - return ..() * get_pellets(distance) - -/obj/item/projectile/bullet/pellet/Move() - . = ..() - - //If this is a shrapnel explosion, allow mobs that are prone to get hit, too - if(. && !base_spread && isturf(loc)) - for(var/mob/living/M in loc) - if(M.lying || !M.CanPass(src, loc, 0.5, 0)) //Bump if lying or if we would normally Bump. - if(Bump(M)) //Bump will make sure we don't hit a mob multiple times - return - -/* short-casing projectiles, like the kind used in pistols or SMGs */ - -/obj/item/projectile/bullet/pistol - fire_sound = 'sound/weapons/gunshot/gunshot_pistol.ogg' - damage = 45 - distance_falloff = 3 - -/obj/item/projectile/bullet/pistol/holdout - damage = 40 - penetration_modifier = 1.2 - distance_falloff = 4 - -/obj/item/projectile/bullet/pistol/strong - fire_sound = 'sound/weapons/gunshot/gunshot_strong.ogg' - damage = 50 - penetration_modifier = 0.8 - distance_falloff = 2.5 - armor_penetration = 15 - -/obj/item/projectile/bullet/pistol/strong/rubber - damage_flags = 0 - damage = 5 - agony = 60 - embed = FALSE - -/obj/item/projectile/bullet/pistol/rubber //"rubber" bullets - name = "rubber bullet" - damage_flags = 0 - damage = 5 - agony = 30 - embed = FALSE - -/obj/item/projectile/bullet/pistol/rubber/holdout - agony = 30 - -//4mm. Tiny, very low damage, does not embed, but has very high penetration. Only to be used for the experimental SMG. -/obj/item/projectile/bullet/flechette - fire_sound = 'sound/weapons/gunshot/gunshot_4mm.ogg' - damage = 23 - penetrating = 1 - armor_penetration = 70 - embed = FALSE - distance_falloff = 2 - -/* shotgun projectiles */ - -/obj/item/projectile/bullet/shotgun - name = "slug" - fire_sound = 'sound/weapons/gunshot/shotgun.ogg' - damage = 65 - armor_penetration = 10 - -/obj/item/projectile/bullet/shotgun/beanbag //because beanbags are not bullets - name = "beanbag" - damage = 25 - damage_flags = 0 - agony = 60 - embed = FALSE - armor_penetration = 0 - distance_falloff = 3 - -//Should do about 180 damage at 1 tile distance (adjacent), and 120 damage at 3 tiles distance. -//Overall less damage than slugs in exchange for more damage at very close range and more embedding -/obj/item/projectile/bullet/pellet/shotgun - name = "shrapnel" - icon_state = "pellet" - fire_sound = 'sound/weapons/gunshot/shotgun.ogg' - damage = 30 - pellets = 6 - range_step = 1 - spread_step = 50 - -/obj/item/projectile/bullet/pellet/shotgun/flechette - name = "flechette" - icon_state = "flechette" - fire_sound = 'sound/weapons/gunshot/shotgun.ogg' - damage = 30 - armor_penetration = 25 - pellets = 3 - range_step = 3 - base_spread = 99 - spread_step = 2 - penetration_modifier = 0.5 - hitchance_mod = 5 - -/* "Rifle" rounds */ - -/obj/item/projectile/bullet/rifle - fire_sound = 'sound/weapons/gunshot/gunshot3.ogg' - damage = 45 - armor_penetration = 25 - penetration_modifier = 1.5 - penetrating = 1 - distance_falloff = 1.5 - -/obj/item/projectile/bullet/rifle/military - fire_sound = 'sound/weapons/gunshot/gunshot2.ogg' - damage = 40 - armor_penetration = 35 - penetration_modifier = 1 - -/obj/item/projectile/bullet/rifle/shell - fire_sound = 'sound/weapons/gunshot/sniper.ogg' - damage = 80 - stun = 3 - weaken = 3 - penetrating = 3 - armor_penetration = 70 - penetration_modifier = 1.2 - distance_falloff = 0.5 - -/obj/item/projectile/bullet/rifle/shell/apds - damage = 70 - penetrating = 5 - armor_penetration = 80 - penetration_modifier = 1.5 - -/* Miscellaneous */ -/obj/item/projectile/bullet/gyro - name = "minirocket" - fire_sound = 'sound/effects/Explosion1.ogg' - var/gyro_devastation = -1 - var/gyro_heavy_impact = 0 - var/gyro_light_impact = 2 - -/obj/item/projectile/bullet/gyro/on_hit(var/atom/target, var/blocked = 0) - if(isturf(target)) - explosion(target, gyro_devastation, gyro_heavy_impact, gyro_light_impact) - ..() - -/obj/item/projectile/bullet/blank - invisibility = 101 - damage = 1 - embed = FALSE - -/* Practice */ - -/obj/item/projectile/bullet/pistol/practice - damage = 5 - -/obj/item/projectile/bullet/rifle/military/practice - damage = 5 - -/obj/item/projectile/bullet/shotgun/practice - name = "practice" - damage = 5 - -/obj/item/projectile/bullet/pistol/cap - name = "cap" - invisibility = 101 - fire_sound = null - damage_type = DAMAGE_PAIN - damage_flags = 0 - damage = 0 - nodamage = TRUE - embed = FALSE - -/obj/item/projectile/bullet/pistol/cap/Process() - qdel(src) - return PROCESS_KILL - -/obj/item/projectile/bullet/rock //spess dust - name = "micrometeor" - icon_state = "rock" - damage = 40 - armor_penetration = 25 - life_span = 255 - distance_falloff = 0 - -/obj/item/projectile/bullet/rock/New() - icon_state = "rock[rand(1,3)]" - pixel_x = rand(-10,10) - pixel_y = rand(-10,10) - ..() diff --git a/code/modules/projectiles/projectile/change.dm b/code/modules/projectiles/projectile/change.dm deleted file mode 100644 index afcdb47a3e507..0000000000000 --- a/code/modules/projectiles/projectile/change.dm +++ /dev/null @@ -1,99 +0,0 @@ -/obj/item/projectile/change - name = "bolt of change" - icon_state = "ice_1" - damage = 0 - damage_type = DAMAGE_BURN - damage_flags = 0 - nodamage = TRUE - -/obj/item/projectile/change/on_hit(var/atom/change) - wabbajack(change) - -/obj/item/projectile/change/proc/wabbajack(var/mob/M) - if(istype(M, /mob/living) && M.stat != DEAD) - if(HAS_TRANSFORMATION_MOVEMENT_HANDLER(M)) - return - if(M.has_brain_worms()) - return //Borer stuff - RR - - if(istype(M, /mob/living/silicon/robot)) - var/mob/living/silicon/robot/Robot = M - if(Robot.mmi) - qdel(Robot.mmi) - else - for(var/obj/item/W in M) - if(istype(W, /obj/item/implant)) //TODO: Carn. give implants a dropped() or something - qdel(W) - continue - M.drop_from_inventory(W) - - var/mob/living/new_mob - - var/options = list("robot", "slime") - for(var/t in all_species) - options += t - if(ishuman(M)) - var/mob/living/carbon/human/H = M - if(H.species) - options -= H.species.name - else if(isrobot(M)) - options -= "robot" - else if(isslime(M)) - options -= "slime" - - var/randomize = pick(options) - switch(randomize) - if("robot") - new_mob = new /mob/living/silicon/robot(M.loc) - new_mob.gender = M.gender - new_mob.set_invisibility(0) - new_mob.job = "Robot" - var/mob/living/silicon/robot/Robot = new_mob - Robot.mmi = new /obj/item/device/mmi(new_mob) - Robot.mmi.transfer_identity(M) //Does not transfer key/client. - if("slime") - new_mob = new /mob/living/carbon/slime(M.loc) - new_mob.universal_speak = TRUE - else - var/mob/living/carbon/human/H - if(ishuman(M)) - H = M - else - new_mob = new /mob/living/carbon/human(M.loc) - H = new_mob - - if(M.gender == MALE) - H.gender = MALE - H.SetName(pick(GLOB.first_names_male)) - else if(M.gender == FEMALE) - H.gender = FEMALE - H.SetName(pick(GLOB.first_names_female)) - else - H.gender = NEUTER - H.SetName(pick(GLOB.first_names_female|GLOB.first_names_male)) - - H.name += " [pick(GLOB.last_names)]" - H.real_name = H.name - - H.set_species(randomize) - H.universal_speak = TRUE - var/datum/preferences/A = new() //Randomize appearance for the human - A.randomize_appearance_and_body_for(H) - - if(new_mob) - for (var/spell/S in M.mind.learned_spells) - new_mob.add_spell(new S.type) - - new_mob.a_intent = "hurt" - if(M.mind) - M.mind.transfer_to(new_mob) - else - new_mob.key = M.key - - to_chat(new_mob, "Your form morphs into that of \a [lowertext(randomize)].") - - qdel(M) - return - else - to_chat(M, "Your form morphs into that of \a [lowertext(randomize)].") - return diff --git a/code/modules/projectiles/projectile/energy.dm b/code/modules/projectiles/projectile/energy.dm deleted file mode 100644 index 60df16fc27ce0..0000000000000 --- a/code/modules/projectiles/projectile/energy.dm +++ /dev/null @@ -1,229 +0,0 @@ -/obj/item/projectile/energy - name = "energy" - icon_state = "spark" - temperature = T0C + 300 - damage = 0 - damage_type = DAMAGE_BURN - damage_flags = 0 - distance_falloff = 2.5 - -//releases a burst of light on impact or after travelling a distance -/obj/item/projectile/energy/flash - name = "chemical shell" - icon_state = "bullet" - fire_sound = 'sound/weapons/gunshot/gunshot_pistol.ogg' - damage = 5 - agony = 20 - life_span = 15 //if the shell hasn't hit anything after travelling this far it just explodes. - muzzle_type = /obj/effect/projectile/bullet/muzzle - var/flash_range = 1 - var/brightness = 7 - var/light_colour = "#ffffff" - -/obj/item/projectile/energy/flash/on_impact(var/atom/A) - var/turf/T = flash_range? src.loc : get_turf(A) - if(!istype(T)) return - - //blind and confuse adjacent people - for (var/mob/living/carbon/M in viewers(T, flash_range)) - if(M.eyecheck() < FLASH_PROTECTION_MAJOR) - M.flash_eyes() - M.eye_blurry += (brightness / 2) - M.confused += (brightness / 2) - - //snap pop - playsound(src, 'sound/effects/snap.ogg', 50, 1) - src.visible_message("\The [src] explodes in a bright flash!") - - var/datum/effect/effect/system/spark_spread/sparks = new /datum/effect/effect/system/spark_spread() - sparks.set_up(2, 1, T) - sparks.start() - - new /obj/effect/decal/cleanable/ash(src.loc) //always use src.loc so that ash doesn't end up inside windows - new /obj/effect/effect/smoke/illumination(T, 5, 4, 1, light_colour) - -//blinds people like the flash round, but in a larger area and can also be used for temporary illumination -/obj/item/projectile/energy/flash/flare - damage = 10 - agony = 25 - fire_sound = 'sound/weapons/gunshot/shotgun.ogg' - flash_range = 2 - brightness = 15 - -/obj/item/projectile/energy/flash/flare/on_hit(atom/target, blocked = 0, def_zone = null) - . = ..() - if(.) - var/mob/living/M = target - if(istype(M) && prob(33)) - M.fire_stacks = max(2, M.fire_stacks) - M.IgniteMob() - -/obj/item/projectile/energy/flash/flare/on_impact(var/atom/A) - light_colour = pick("#e58775", "#ffffff", "#faa159", "#e34e0e") - set_light(1, 2, 6, 1, light_colour) - ..() //initial flash - - //residual illumination - new /obj/effect/effect/smoke/illumination/flare(src.loc, rand(30 SECONDS,60 SECONDS), range=8, power=1, color=light_colour) //same lighting power as flare - - var/turf/TO = get_turf(src) - var/area/AO = TO.loc - if(AO && (AO.area_flags & AREA_FLAG_EXTERNAL)) - //Everyone saw that! - for(var/mob/living/mob in GLOB.living_mob_list_) - var/turf/T = get_turf(mob) - if(T && (T != TO) && (TO.z == T.z) && !mob.blinded) - to_chat(mob, SPAN_NOTICE("You see a bright light to \the [dir2text(get_dir(T,TO))]")) - CHECK_TICK - -/obj/item/projectile/energy/electrode //has more pain than a beam because it's harder to hit - name = "electrode" - icon_state = "spark" - fire_sound = 'sound/weapons/Taser.ogg' - agony = 50 - damage = 2 - damage_type = DAMAGE_BURN - eyeblur = 1//Some feedback that you've been hit - step_delay = 0.7 - damage_falloff_list = list( - list(5, 0.97), - list(7, 0.94), - list(9, 0.88), - ) - -/obj/item/projectile/energy/electrode/green - icon_state = "spark_green" - -/obj/item/projectile/energy/electrode/stunshot - agony = 80 - damage = 3 - -/obj/item/projectile/energy/declone - name = "decloner beam" - icon_state = "declone" - fire_sound = 'sound/weapons/pulse3.ogg' - damage = 30 - damage_type = DAMAGE_GENETIC - irradiate = 40 - -/obj/item/projectile/energy/dart - name = "dart" - icon_state = "toxin" - damage = 5 - damage_type = DAMAGE_TOXIN - weaken = 5 - -/obj/item/projectile/energy/bolt - name = "bolt" - icon_state = "cbbolt" - damage = 10 - damage_type = DAMAGE_TOXIN - agony = 40 - stutter = 10 - -/obj/item/projectile/energy/bolt/large - name = "largebolt" - damage = 20 - agony = 60 - -/obj/item/projectile/energy/neurotoxin - name = "neuro" - icon_state = "neurotoxin" - damage = 5 - damage_type = DAMAGE_TOXIN - weaken = 5 - -/obj/item/projectile/energy/phoron - name = "phoron bolt" - icon_state = "energy" - fire_sound = 'sound/effects/stealthoff.ogg' - damage = 20 - damage_type = DAMAGE_TOXIN - irradiate = 20 - -/obj/item/projectile/energy/plasmastun - name = "plasma pulse" - icon_state = "plasma_stun" - fire_sound = 'sound/weapons/blaster.ogg' - armor_penetration = 10 - life_span = 4 - damage = 5 - agony = 70 - damage_type = DAMAGE_BURN - vacuum_traversal = 0 - var/min_dizziness_amt = 60 - var/med_dizziness_amt = 120 - var/max_dizziness_amt = 300 - -/obj/item/projectile/energy/plasmastun/proc/bang(var/mob/living/carbon/M) - - if(!istype(M)) - return - - to_chat(M, SPAN_DANGER("You hear a loud roar!")) - - var/ear_safety = 0 - if(M.get_sound_volume_multiplier() < 0.2) - ear_safety += 2 - if(MUTATION_HULK in M.mutations) - ear_safety += 1 - if(ishuman(M)) - var/mob/living/carbon/human/H = M - if(istype(H.head, /obj/item/clothing/head/helmet)) - ear_safety += 1 - - if(!ear_safety) - M.make_dizzy(max_dizziness_amt) - M.ear_damage += rand(1, 10) - M.ear_deaf = max(M.ear_deaf,15) - else if(ear_safety > 1) - M.make_dizzy(min_dizziness_amt) - else - M.make_dizzy(med_dizziness_amt) - - if(M.ear_damage >= 15) - to_chat(M, SPAN_DANGER("Your ears start to ring badly!")) - if(prob(M.ear_damage - 5)) - to_chat(M, SPAN_DANGER("You can't hear anything!")) - M.set_sdisability(DEAFENED) - else - if(M.ear_damage >= 5) - to_chat(M, SPAN_DANGER("Your ears start to ring!")) - -/obj/item/projectile/energy/plasmastun/on_hit(var/atom/target) - bang(target) - . = ..() - -/obj/item/projectile/energy/plasmastun/sonic - name = "sonic pulse" - icon_state = "sound" - fire_sound = 'sound/effects/basscannon.ogg' - damage = 5 - armor_penetration = 40 - damage_type = DAMAGE_BRUTE - vacuum_traversal = 0 - penetration_modifier = 0.2 - penetrating = 1 - min_dizziness_amt = 10 - med_dizziness_amt = 60 - max_dizziness_amt = 120 - -/obj/item/projectile/energy/plasmastun/sonic/bang(var/mob/living/carbon/M) - ..() - if(istype(M, /atom/movable) && M.simulated && !M.anchored) - M.throw_at(get_edge_target_turf(M, get_dir(src, M)), rand(1,5), 6) - -/obj/item/projectile/energy/plasmastun/sonic/weak - agony = 70 - -/obj/item/projectile/energy/plasmastun/sonic/strong - damage = 20 - penetrating = 1 - -/obj/item/projectile/energy/darkmatter - name = "dark matter pellet" - icon_state = "dark_pellet" - fire_sound = 'sound/weapons/eLuger.ogg' - damage = 10 - armor_penetration = 35 - damage_type = DAMAGE_BRUTE diff --git a/code/modules/projectiles/projectile/force.dm b/code/modules/projectiles/projectile/force.dm deleted file mode 100644 index f50b66054804d..0000000000000 --- a/code/modules/projectiles/projectile/force.dm +++ /dev/null @@ -1,16 +0,0 @@ -/obj/item/projectile/forcebolt - name = "force bolt" - icon = 'icons/obj/projectiles.dmi' - icon_state = "ice_1" - damage = 20 - damage_type = DAMAGE_BURN - damage_flags = 0 - -/obj/item/projectile/forcebolt/strong - name = "force bolt" - -/obj/item/projectile/forcebolt/on_hit(var/atom/movable/target, var/blocked = 0) - if(istype(target)) - var/throwdir = get_dir(firer,target) - target.throw_at(get_edge_target_turf(target, throwdir),10,10) - return 1 diff --git a/code/modules/projectiles/projectile/magnetic.dm b/code/modules/projectiles/projectile/magnetic.dm deleted file mode 100644 index 1cb974dd164af..0000000000000 --- a/code/modules/projectiles/projectile/magnetic.dm +++ /dev/null @@ -1,25 +0,0 @@ -// Rod for railguns. Slightly less nasty than the sniper round. -/obj/item/projectile/bullet/magnetic - name = "rod" - icon_state = "rod" - damage = 55 - penetrating = 5 - armor_penetration = 85 - penetration_modifier = 1.1 - fire_sound = 'sound/weapons/railgun.ogg' - distance_falloff = 1 - -/obj/item/projectile/bullet/magnetic/slug - name = "slug" - icon_state = "gauss_silenced" - stun = 1 - damage = 75 - armor_penetration = 90 - -/obj/item/projectile/bullet/magnetic/flechette - name = "flechette" - icon_state = "flechette" - damage = 35 - armor_penetration = 100 - fire_sound = 'sound/weapons/rapidslice.ogg' - distance_falloff = 0.5 \ No newline at end of file diff --git a/code/modules/projectiles/projectile/special.dm b/code/modules/projectiles/projectile/special.dm deleted file mode 100644 index de20e880c2024..0000000000000 --- a/code/modules/projectiles/projectile/special.dm +++ /dev/null @@ -1,230 +0,0 @@ -/obj/item/projectile/ion - name = "ion bolt" - icon_state = "ion" - fire_sound = 'sound/weapons/Laser.ogg' - damage = 0 - damage_type = DAMAGE_BURN - damage_flags = 0 - nodamage = TRUE - var/heavy_effect_range = 1 - var/light_effect_range = 1 - -/obj/item/projectile/ion/on_impact(var/atom/A) - empulse(A, heavy_effect_range, light_effect_range) - return 1 - -/obj/item/projectile/ion/small - name = "ion pulse" - heavy_effect_range = 0 - light_effect_range = 1 - -/obj/item/projectile/ion/tiny - heavy_effect_range = 0 - light_effect_range = 0 - -/obj/item/projectile/bullet/gyro - name ="explosive bolt" - icon_state= "bolter" - damage = 50 - damage_flags = DAMAGE_FLAG_BULLET | DAMAGE_FLAG_SHARP | DAMAGE_FLAG_EDGE - -/obj/item/projectile/bullet/gyro/on_hit(var/atom/target, var/blocked = 0) - explosion(target, -1, 0, 2) - return 1 - -/obj/item/projectile/meteor - name = "meteor" - icon = 'icons/obj/meteor.dmi' - icon_state = "smallf" - damage = 0 - damage_type = DAMAGE_BRUTE - nodamage = TRUE - -/obj/item/projectile/meteor/Bump(atom/A as mob|obj|turf|area, forced=0) - if(A == firer) - forceMove(A.loc) - return - - sleep(-1) //Might not be important enough for a sleep(-1) but the sleep/spawn itself is necessary thanks to explosions and metoerhits - - if(src)//Do not add to this if() statement, otherwise the meteor won't delete them - if(A) - - A.ex_act(EX_ACT_HEAVY) - playsound(src.loc, 'sound/effects/meteorimpact.ogg', 40, 1) - - for(var/mob/M in range(10, src)) - if(!M.stat && !istype(M, /mob/living/silicon/ai))\ - shake_camera(M, 3, 1) - qdel(src) - return 1 - else - return 0 - -/obj/item/projectile/energy/floramut - name = "alpha somatoray" - icon_state = "energy" - fire_sound = 'sound/effects/stealthoff.ogg' - damage = 0 - damage_type = DAMAGE_TOXIN - nodamage = TRUE - -/obj/item/projectile/energy/floramut/on_hit(var/atom/target, var/blocked = 0) - var/mob/living/M = target - if(ishuman(target)) - var/mob/living/carbon/human/H = M - if((H.species.species_flags & SPECIES_FLAG_IS_PLANT) && (H.nutrition < 500)) - if(prob(15)) - H.apply_damage((rand(30,80)), DAMAGE_RADIATION, damage_flags = DAMAGE_FLAG_DISPERSED) - H.Weaken(5) - for (var/mob/V in viewers(src)) - V.show_message("[M] writhes in pain as \his vacuoles boil.", 3, "You hear the crunching of leaves.", 2) - if(prob(35)) - if(prob(80)) - randmutb(M) - domutcheck(M,null) - else - randmutg(M) - domutcheck(M,null) - else - M.adjustFireLoss(rand(5,15)) - M.show_message("The radiation beam singes you!") - else if(istype(target, /mob/living/carbon)) - M.show_message("The radiation beam dissipates harmlessly through your body.") - else - return 1 - -/obj/item/projectile/energy/floramut/gene - name = "gamma somatoray" - icon_state = "energy2" - fire_sound = 'sound/effects/stealthoff.ogg' - damage = 0 - damage_type = DAMAGE_TOXIN - nodamage = TRUE - var/decl/plantgene/gene = null - -/obj/item/projectile/energy/florayield - name = "beta somatoray" - icon_state = "energy2" - fire_sound = 'sound/effects/stealthoff.ogg' - damage = 0 - damage_type = DAMAGE_TOXIN - nodamage = TRUE - -/obj/item/projectile/energy/florayield/on_hit(var/atom/target, var/blocked = 0) - var/mob/M = target - if(ishuman(target)) //These rays make plantmen fat. - var/mob/living/carbon/human/H = M - if((H.species.species_flags & SPECIES_FLAG_IS_PLANT) && (H.nutrition < 500)) - H.adjust_nutrition(30) - else if (istype(target, /mob/living/carbon)) - M.show_message("The radiation beam dissipates harmlessly through your body.") - else - return 1 - - -/obj/item/projectile/beam/mindflayer - name = "flayer ray" - -/obj/item/projectile/beam/mindflayer/on_hit(var/atom/target, var/blocked = 0) - if(ishuman(target)) - var/mob/living/carbon/human/M = target - M.confused += rand(5,8) - -/obj/item/projectile/chameleon - name = "bullet" - icon_state = "bullet" - damage = 1 // stop trying to murderbone with a fake gun dumbass!!! - embed = FALSE // nope - nodamage = TRUE - damage_type = DAMAGE_PAIN - damage_flags = 0 - muzzle_type = /obj/effect/projectile/bullet/muzzle - -/obj/item/projectile/bola - name = "bola" - icon_state = "bola" - damage = 5 - embed = FALSE - damage_type = DAMAGE_STUN - muzzle_type = null - -/obj/item/projectile/bola/on_hit(atom/target, blocked = 0) - if (isliving(target)) - var/mob/living/M = target - M.Weaken(3) - M.visible_message( - SPAN_WARNING("\The [M] is hit with a glob of webbing!"), - SPAN_DANGER("You are hit with a glob of webbing, causing you to trip!"), - SPAN_DANGER("Some sort of sticky substance hits you and causes you to fall over!") - ) - ..() - -/obj/item/projectile/webball - name = "ball of web" - icon_state = "bola" - damage = 1 - embed = FALSE - damage_type = DAMAGE_BRUTE - muzzle_type = null - -/obj/item/projectile/webball/on_hit(atom/target, blocked = 0) - if (isturf(target.loc)) - var/obj/effect/spider/stickyweb/W = locate() in get_turf(target) - if (!W && prob(75)) - visible_message(SPAN_DANGER("\The [src] splatters a layer of web on \the [target]!")) - new /obj/effect/spider/stickyweb(target.loc) - - if (isliving(target)) - var/mob/living/M = target - var/has_webs = FALSE - for (var/obj/aura/A in M.auras) - if (istype(A, /obj/aura/web)) - has_webs = TRUE - break - if (!has_webs) - M.add_aura(new /obj/aura/web(M)) - ..() - -/obj/item/projectile/venom - name = "venom bolt" - icon_state = "venom" - damage = 5 //most damage is in the reagent - damage_type = DAMAGE_TOXIN - damage_flags = 0 - -/obj/item/projectile/venom/on_hit(atom/target, blocked, def_zone) - . = ..() - var/mob/living/L = target - if(L.reagents) - L.reagents.add_reagent(/datum/reagent/toxin/venom, 5) - -/obj/item/missile - icon = 'icons/obj/grenade.dmi' - icon_state = "missile" - var/primed = null - throwforce = 15 - -/obj/item/missile/throw_impact(atom/hit_atom) - if(primed) - explosion(hit_atom, 0, 1, 2, 4) - qdel(src) - else - ..() - return - -/obj/item/projectile/hotgas - name = "gas vent" - icon_state = null - damage_type = DAMAGE_BURN - damage_flags = 0 - life_span = 3 - silenced = TRUE - -/obj/item/projectile/hotgas/on_hit(atom/target, blocked, def_zone) - . = ..() - if(isliving(target)) - var/mob/living/L = target - to_chat(target, SPAN_WARNING("You feel a wave of heat wash over you!")) - L.adjust_fire_stacks(rand(5,8)) - L.IgniteMob() diff --git a/code/modules/projectiles/secure.dm b/code/modules/projectiles/secure.dm deleted file mode 100644 index 632fd0357c62e..0000000000000 --- a/code/modules/projectiles/secure.dm +++ /dev/null @@ -1,115 +0,0 @@ -GLOBAL_LIST_INIT(secure_weapons, list()) - -/obj/item/gun - var/list/authorized_modes = list(ALWAYS_AUTHORIZED) // index of this list should line up with firemodes, unincluded firemodes at the end will use default - var/default_mode_authorization = UNAUTHORIZED - var/registered_owner - -/obj/item/gun/Initialize() - if(is_secure_gun()) - GLOB.secure_weapons |= src - if(!authorized_modes) - authorized_modes = list() - - for(var/i = authorized_modes.len + 1 to init_firemodes.len) - authorized_modes.Add(default_mode_authorization) - - . = ..() - -/obj/item/gun/Destroy() - GLOB.secure_weapons -= src - . = ..() - -/obj/item/gun/examine(mob/user, distance) - . = ..() - if(distance <= 0 && is_secure_gun()) - to_chat(user, "The registration screen shows, \"" + (registered_owner ? "[registered_owner]" : "unregistered") + "\"") - -/obj/item/gun/attackby(obj/item/W as obj, mob/user as mob) - if(istype(W, /obj/item/card/id) && is_secure_gun()) - user.visible_message("[user] swipes an ID through \the [src].", range = 3) - if(!registered_owner) - var/obj/item/card/id/id = W - verbs += /obj/item/gun/proc/reset_registration - registered_owner = id.registered_name - to_chat(user, SPAN_NOTICE("\The [src] chimes quietly as it registers to \"[registered_owner]\".")) - else - to_chat(user, SPAN_NOTICE("\The [src] buzzes quietly, refusing to register without first being reset.")) - else - ..() - -/obj/item/gun/emag_act(var/charges, var/mob/user) - if(!charges) - return NO_EMAG_ACT - - if(is_secure_gun()) - registered_owner = null - verbs -= /obj/item/gun/proc/reset_registration - req_access.Cut() - GLOB.secure_weapons -= src - to_chat(user, SPAN_NOTICE("\The [src]'s authorization chip fries, giving you full access.")) - return 1 - - return ..() - - -/obj/item/gun/proc/reset_registration() - set name = "Reset Registration" - set category = "Object" - set src in usr - - if(issilicon(usr)) - to_chat(usr, SPAN_WARNING("You are not permitted to modify weapon registrations.")) - return - - usr.visible_message("[usr] presses the reset button on \the [src].", range = 3) - if(!allowed(usr)) - to_chat(usr, SPAN_WARNING("\The [src] buzzes quietly, refusing your access.")) - return - - to_chat(usr, SPAN_NOTICE("\The [src] chimes quietly as its registration resets.")) - registered_owner = null - verbs -= /obj/item/gun/proc/reset_registration - - -/obj/item/gun/proc/authorize(mode, authorized) - if(mode < 1 || mode > authorized_modes.len || authorized_modes[mode] == authorized) - return FALSE - - authorized_modes[mode] = authorized - - if(mode == sel_mode && !authorized) - switch_firemodes() - - var/mob/user = get_holder_of_type(src, /mob) - if(user) - to_chat(user, SPAN_NOTICE("Your [src.name] has been [authorized ? "granted" : "denied"] [firemodes[mode]] fire authorization.")) - - return TRUE - -/obj/item/gun/proc/is_secure_gun() - return length(req_access) - -/obj/item/gun/proc/free_fire() - var/decl/security_state/security_state = decls_repository.get_decl(GLOB.using_map.security_state) - return security_state.current_security_level_is_same_or_higher_than(security_state.high_security_level) - -/obj/item/gun/special_check() - if(is_secure_gun() && !free_fire() && (!authorized_modes[sel_mode] || !registered_owner)) - audible_message(SPAN_WARNING("\The [src] buzzes, refusing to fire."), hearing_distance = 3) - playsound(loc, 'sound/machines/buzz-sigh.ogg', 10, 0) - return 0 - - . = ..() - -/obj/item/gun/get_next_firemode() - if(!is_secure_gun()) - return ..() - . = sel_mode - do - .++ - if(. > authorized_modes.len) - . = 1 - if(. == sel_mode) // just in case all modes are unauthorized - return null - while (!authorized_modes[.] && !free_fire()) diff --git a/code/modules/projectiles/targeting/targeting_client.dm b/code/modules/projectiles/targeting/targeting_client.dm deleted file mode 100644 index eeaf61909deb0..0000000000000 --- a/code/modules/projectiles/targeting/targeting_client.dm +++ /dev/null @@ -1,12 +0,0 @@ -//These are called by the on-screen buttons, adjusting what the victim can and cannot do. -/client/proc/add_gun_icons() - if(!usr || !usr.item_use_icon) return 1 // This can runtime if someone manages to throw a gun out of their hand before the proc is called. - screen |= usr.item_use_icon - screen |= usr.gun_move_icon - screen |= usr.radio_use_icon - -/client/proc/remove_gun_icons() - if(!usr) return 1 // Runtime prevention on N00k agents spawning with SMG - screen -= usr.item_use_icon - screen -= usr.gun_move_icon - screen -= usr.radio_use_icon diff --git a/code/modules/projectiles/targeting/targeting_gun.dm b/code/modules/projectiles/targeting/targeting_gun.dm deleted file mode 100644 index 512fa1f8bef09..0000000000000 --- a/code/modules/projectiles/targeting/targeting_gun.dm +++ /dev/null @@ -1,22 +0,0 @@ -//Removing the lock and the buttons. -/obj/item/gun/dropped(var/mob/living/user) - if(istype(user)) - user.stop_aiming(src) - return ..() - -/obj/item/gun/equipped(var/mob/living/user, var/slot) - if(istype(user) && (slot != slot_l_hand && slot != slot_r_hand)) - user.stop_aiming(src) - return ..() - -//Compute how to fire..... -//Return 1 if a target was found, 0 otherwise. -/obj/item/gun/proc/PreFire(var/atom/A, var/mob/living/user, var/params) - if(!user.aiming) - user.aiming = new(user) - user.face_atom(A) - if(ismob(A) && user.aiming) - user.aiming.aim_at(A, src) - aim_tag = 1 - return 1 - return 0 diff --git a/code/modules/projectiles/targeting/targeting_mob.dm b/code/modules/projectiles/targeting/targeting_mob.dm deleted file mode 100644 index 6b517e4742aa4..0000000000000 --- a/code/modules/projectiles/targeting/targeting_mob.dm +++ /dev/null @@ -1,48 +0,0 @@ -/mob/living/var/obj/aiming_overlay/aiming -/mob/living/var/list/aimed = list() - -/mob/verb/toggle_gun_mode() - set name = "Toggle Gun Mode" - set desc = "Begin or stop aiming." - set category = "IC" - - if (!gun_setting_icon) - to_chat(src, SPAN_WARNING("Your mobtype cannot use aiming overlays. If you feel this is in error, contact a dev.")) - return - - if(isliving(src)) //Needs to be a mob verb to prevent error messages when using hotkeys - var/mob/living/M = src - if(!M.aiming) - M.aiming = new(src) - M.aiming.toggle_active() - else - to_chat(src, "This verb may only be used by living mobs, sorry.") - return - -/mob/living/proc/stop_aiming(var/obj/item/thing, var/no_message = 0) - if(!aiming) - aiming = new(src) - if(thing && aiming.aiming_with != thing) - return - aiming.cancel_aiming(no_message) - -/mob/living/death(gibbed, deathmessage="seizes up and falls limp...", show_dead_message) - . = ..(gibbed, deathmessage, show_dead_message) - if(.) - stop_aiming(no_message=1) - -/mob/living/UpdateLyingBuckledAndVerbStatus() - ..() - if(lying) - stop_aiming(no_message=1) - -/mob/living/Weaken(amount) - stop_aiming(no_message=1) - ..() - -/mob/living/Destroy() - if(aiming) - qdel(aiming) - aiming = null - aimed.Cut() - return ..() diff --git a/code/modules/projectiles/targeting/targeting_overlay.dm b/code/modules/projectiles/targeting/targeting_overlay.dm deleted file mode 100644 index 0b6b84d57f7ea..0000000000000 --- a/code/modules/projectiles/targeting/targeting_overlay.dm +++ /dev/null @@ -1,261 +0,0 @@ -/obj/aiming_overlay - name = "" - desc = "Stick 'em up!" - icon = 'icons/effects/Targeted.dmi' - icon_state = "locking" - anchored = TRUE - density = FALSE - opacity = 0 - layer = ABOVE_HUMAN_LAYER - simulated = FALSE - mouse_opacity = 0 - - var/mob/living/aiming_at // Who are we currently targeting, if anyone? - var/obj/item/aiming_with // What are we targeting with? - var/mob/living/owner // Who do we belong to? - var/locked = 0 // Have we locked on? - var/lock_time = 0 // When -will- we lock on? - var/active = 0 // Is our owner intending to take hostages? - var/target_permissions = TARGET_CAN_MOVE | TARGET_CAN_CLICK | TARGET_CAN_RADIO // Permission bitflags. - -/obj/aiming_overlay/New(var/newowner) - ..() - owner = newowner - loc = null - verbs.Cut() - -/obj/aiming_overlay/proc/toggle_permission(perm, silent) - - if (target_permissions & perm) - target_permissions &= ~perm - else - target_permissions |= perm - - if (silent) - return - - // Update HUD icons. - if (owner.gun_move_icon) - if (!(target_permissions & TARGET_CAN_MOVE)) - owner.gun_move_icon.icon_state = "no_walk0" - owner.gun_move_icon.SetName("Allow Movement") - else - owner.gun_move_icon.icon_state = "no_walk1" - owner.gun_move_icon.SetName("Disallow Movement") - - if (owner.item_use_icon) - if (!(target_permissions & TARGET_CAN_CLICK)) - owner.item_use_icon.icon_state = "no_item0" - owner.item_use_icon.SetName("Allow Item Use") - else - owner.item_use_icon.icon_state = "no_item1" - owner.item_use_icon.SetName("Disallow Item Use") - - if (owner.radio_use_icon) - if (!(target_permissions & TARGET_CAN_RADIO)) - owner.radio_use_icon.icon_state = "no_radio0" - owner.radio_use_icon.SetName("Allow Radio Use") - else - owner.radio_use_icon.icon_state = "no_radio1" - owner.radio_use_icon.SetName("Disallow Radio Use") - - var/message = "no longer permitted to " - var/use_span = "warning" - if (target_permissions & perm) - message = "now permitted to " - use_span = "notice" - - switch(perm) - if (TARGET_CAN_MOVE) - message += "move" - if (TARGET_CAN_CLICK) - message += "use items" - if (TARGET_CAN_RADIO) - message += "use a radio" - else - return - - if (aiming_at && aiming_at != owner) - to_chat(owner, "\The [aiming_at] is [message].") - to_chat(aiming_at, "You are [message].") - else - to_chat(owner, "Your targets are [message].") - -/obj/aiming_overlay/Process() - if(!owner) - qdel(src) - return - ..() - update_aiming() - -/obj/aiming_overlay/Destroy() - cancel_aiming(1) - owner = null - return ..() - -/obj/aiming_overlay/proc/update_aiming_deferred() - set waitfor = 0 - sleep(0) - update_aiming() - -/obj/aiming_overlay/proc/update_aiming() - - if(!owner) - qdel(src) - return - - if(!aiming_at) - cancel_aiming() - return - - if(!locked && lock_time >= world.time) - locked = 1 - update_icon() - - var/cancel_aim = 1 - - if(!(aiming_with in owner) || (istype(owner, /mob/living/carbon/human) && (owner.l_hand != aiming_with && owner.r_hand != aiming_with))) - to_chat(owner, "You must keep hold of your weapon!") - else if(owner.eye_blind) - to_chat(owner, "You are blind and cannot see your target!") - else if(!aiming_at || !istype(aiming_at.loc, /turf)) - to_chat(owner, "You have lost sight of your target!") - else if(owner.incapacitated() || owner.lying || owner.restrained()) - to_chat(owner, "You must be conscious and standing to keep track of your target!") - else if(aiming_at.is_invisible_to(owner)) - to_chat(owner, "Your target has become invisible!") - else if(!(aiming_at in view(owner))) - to_chat(owner, "Your target is too far away to track!") - else - cancel_aim = 0 - - forceMove(get_turf(aiming_at)) - - if(cancel_aim) - cancel_aiming() - return - - if(!owner.incapacitated() && owner.client) - spawn(0) - owner.set_dir(get_dir(get_turf(owner), get_turf(src))) - -/obj/aiming_overlay/proc/aim_at(var/mob/target, var/obj/thing, var/no_target_change) - - if (!owner || !isliving(target)) - return - - if (owner.incapacitated()) - to_chat(owner, SPAN_WARNING("You cannot aim a gun in your current state.")) - return - if (owner.lying) - to_chat(owner, SPAN_WARNING("You cannot aim a gun while prone.")) - return - if (owner.restrained()) - to_chat(owner, SPAN_WARNING("You cannot aim a gun while handcuffed.")) - return - - var/gunpointedtarget = SPAN_DANGER("You now have \a [thing] pointed at you. No sudden moves!") - var/gunpointedself = "" - var/mob/living/carbon/human/user = owner - - if (istype(user)) - if (user.zone_sel.selecting == BP_MOUTH) - admin_attacker_log(user, "is getting ready to suicide with \a [thing]") - if (user.check_has_mouth() && !(user.check_mouth_coverage())) - gunpointedself = SPAN_DANGER("\The [owner] puts the barrel of \the [thing] in their mouth, ready to pull the trigger...") - else - gunpointedself = SPAN_DANGER("\The [owner] aims \the [thing] at themselves, ready to pull the trigger...") - else - gunpointedself = SPAN_DANGER("\The [owner] aims \the [thing] at themselves!") - - if (aiming_at) - if (!no_target_change) - if(aiming_at == target) - return - cancel_aiming(1) - if (owner != target) - owner.visible_message(SPAN_DANGER("\The [owner] turns \the [thing] on \the [target]!")) - to_chat(target, "[gunpointedtarget]") - else - owner.visible_message("[gunpointedself]") - else if (owner != target) - owner.visible_message(SPAN_DANGER("\The [owner] aims \the [thing] at \the [target]!")) - to_chat(target, "[gunpointedtarget]") - else - owner.visible_message("[gunpointedself]") - - aiming_with = thing - if (istype(aiming_with, /obj/item/gun)) - sound_to(aiming_at, sound('sound/weapons/TargetOn.ogg')) - sound_to(owner, sound('sound/weapons/TargetOn.ogg')) - - if (no_target_change) - return - - if (owner.client) - owner.client.add_gun_icons() - aiming_at = target - - forceMove(get_turf(target)) - START_PROCESSING(SSobj, src) - - aiming_at.aimed |= src - toggle_active(1) - locked = 0 - update_icon() - lock_time = world.time + 35 - GLOB.moved_event.register(owner, src, /obj/aiming_overlay/proc/update_aiming) - GLOB.moved_event.register(aiming_at, src, /obj/aiming_overlay/proc/target_moved) - GLOB.destroyed_event.register(aiming_at, src, /obj/aiming_overlay/proc/cancel_aiming) - -/obj/aiming_overlay/on_update_icon() - if(locked) - icon_state = "locked" - else - icon_state = "locking" - -/obj/aiming_overlay/proc/toggle_active(var/force_state = null, var/no_message = FALSE) - if(!isnull(force_state)) - if(active == force_state) - return - active = force_state - else - active = !active - - if(!active) - cancel_aiming(no_message) - - if(owner.client) - if(active) - if(!no_message) - to_chat(owner, "You will now aim rather than fire.") - owner.client.add_gun_icons() - else - if(!no_message) - to_chat(owner, "You will no longer aim rather than fire.") - owner.client.remove_gun_icons() - owner.gun_setting_icon.icon_state = "gun[active]" - -/obj/aiming_overlay/proc/cancel_aiming(var/no_message = 0) - if(!aiming_with || !aiming_at) - return - if(!no_message) - owner.visible_message("\The [owner] lowers \the [aiming_with].") - if(istype(aiming_with, /obj/item/gun)) - sound_to(aiming_at, sound('sound/weapons/TargetOff.ogg')) - sound_to(owner, sound('sound/weapons/TargetOff.ogg')) - - GLOB.moved_event.unregister(owner, src) - if(aiming_at) - GLOB.moved_event.unregister(aiming_at, src) - GLOB.destroyed_event.unregister(aiming_at, src) - aiming_at.aimed -= src - aiming_at = null - - aiming_with = null - loc = null - STOP_PROCESSING(SSobj, src) - -/obj/aiming_overlay/proc/target_moved() - update_aiming() - trigger(TARGET_CAN_MOVE) diff --git a/code/modules/projectiles/targeting/targeting_triggers.dm b/code/modules/projectiles/targeting/targeting_triggers.dm deleted file mode 100644 index da11ad3114f7d..0000000000000 --- a/code/modules/projectiles/targeting/targeting_triggers.dm +++ /dev/null @@ -1,35 +0,0 @@ -//as core click exists at the mob level -/mob/proc/trigger_aiming(var/trigger_type) - return - -/mob/living/trigger_aiming(var/trigger_type) - if(!aimed.len) - return - for(var/obj/aiming_overlay/AO in aimed) - if(AO.aiming_at == src) - AO.update_aiming() - if(AO.aiming_at == src) - AO.trigger(trigger_type) - AO.update_aiming_deferred() - -/obj/aiming_overlay/proc/trigger(var/perm) - if (!owner || !aiming_with || !aiming_at || !locked) - return - if (perm && (target_permissions & perm)) - return - if (!owner.canClick()) - return - var/obj/item/gun/G = aiming_with - if (!istype(G)) - return - if (owner == aiming_at) - addtimer(CALLBACK(G, /obj/item/gun/proc/handle_suicide, owner, 2)) - return - if (prob(owner.skill_fail_chance(SKILL_WEAPONS, 30, SKILL_ADEPT, 3))) - to_chat(owner, "You fumble with the gun, throwing your aim off!") - owner.stop_aiming(aiming_with) - return - owner.setClickCooldown(DEFAULT_QUICK_COOLDOWN) // Spam prevention, essentially. - owner.visible_message("\The [owner] pulls the trigger reflexively!") - G.Fire(aiming_at, owner) - toggle_active(FALSE, TRUE) diff --git a/code/modules/psionics/complexus/complexus.dm b/code/modules/psionics/complexus/complexus.dm deleted file mode 100644 index 0e5a6961ee8aa..0000000000000 --- a/code/modules/psionics/complexus/complexus.dm +++ /dev/null @@ -1,93 +0,0 @@ -/datum/psi_complexus - - var/announced = FALSE // Whether or not we have been announced to our holder yet. - var/suppressed = TRUE // Whether or not we are suppressing our psi powers. - var/use_psi_armour = TRUE // Whether or not we should automatically deflect/block incoming damage. - var/rebuild_power_cache = TRUE // Whether or not we need to rebuild our cache of psi powers. - - var/rating = 0 // Overall psi rating. - var/cost_modifier = 1 // Multiplier for power use stamina costs. - var/stun = 0 // Number of process ticks we are stunned for. - var/next_power_use = 0 // world.time minimum before next power use. - var/stamina = 50 // Current psi pool. - var/max_stamina = 50 // Max psi pool. - var/armor_cost = 0 // Amount of power to substract this tick from psi armor blocking damage - - var/list/latencies // List of all currently latent faculties. - var/list/ranks // Assoc list of psi faculties to current rank. - var/list/base_ranks // Assoc list of psi faculties to base rank, in case reset is needed - var/list/manifested_items // List of atoms manifested/maintained by psychic power. - var/next_latency_trigger = 0 // world.time minimum before a trigger can be attempted again. - var/last_aura_size - var/last_aura_alpha - var/last_aura_color - var/aura_color = "#ff0022" - - // Cached powers. - var/list/melee_powers // Powers used in melee range. - var/list/grab_powers // Powers use by using a grab. - var/list/ranged_powers // Powers used at range. - var/list/manifestation_powers // Powers that create an item. - var/list/powers_by_faculty // All powers within a given faculty. - - var/obj/screen/psi/hub/ui // Reference to the master psi UI object. - var/mob/living/owner // Reference to our owner. - var/image/_aura_image // Client image - -/datum/psi_complexus/proc/get_aura_image() - if(_aura_image && !istype(_aura_image)) - var/atom/A = _aura_image - log_debug("Non-image found in psi complexus: \ref[A] - \the [A] - [istype(A) ? A.type : "non-atom"]") - destroy_aura_image(_aura_image) - _aura_image = null - if(!_aura_image) - _aura_image = create_aura_image(owner) - return _aura_image - -/proc/create_aura_image(var/newloc) - var/image/aura_image = image(loc = newloc, icon = 'icons/effects/psi_aura_small.dmi', icon_state = "aura") - aura_image.blend_mode = BLEND_MULTIPLY - aura_image.appearance_flags = DEFAULT_APPEARANCE_FLAGS | NO_CLIENT_COLOR | RESET_COLOR | RESET_ALPHA | RESET_TRANSFORM - aura_image.layer = TURF_LAYER + 0.5 - aura_image.alpha = 0 - aura_image.pixel_x = -64 - aura_image.pixel_y = -64 - aura_image.mouse_opacity = 0 - aura_image.appearance_flags = DEFAULT_APPEARANCE_FLAGS - for(var/thing in SSpsi.processing) - var/datum/psi_complexus/psychic = thing - if(psychic.owner.client && !psychic.suppressed) - psychic.owner.client.images += aura_image - SSpsi.all_aura_images[aura_image] = TRUE - return aura_image - -/proc/destroy_aura_image(var/image/aura_image) - for(var/thing in SSpsi.processing) - var/datum/psi_complexus/psychic = thing - if(psychic.owner.client) - psychic.owner.client.images -= aura_image - SSpsi.all_aura_images -= aura_image - -/datum/psi_complexus/New(var/mob/_owner) - owner = _owner - START_PROCESSING(SSpsi, src) - set_extension(src, /datum/extension/armor/psionic) - -/datum/psi_complexus/Destroy() - destroy_aura_image(_aura_image) - STOP_PROCESSING(SSpsi, src) - if(owner) - cancel() - if(owner.client) - owner.client.screen -= list(ui, ui?.components) - for(var/thing in SSpsi.all_aura_images) - owner.client.images -= thing - QDEL_NULL(ui) - owner.psi = null - owner = null - - if(manifested_items) - for(var/thing in manifested_items) - qdel(thing) - manifested_items.Cut() - . = ..() diff --git a/code/modules/psionics/complexus/complexus_helpers.dm b/code/modules/psionics/complexus/complexus_helpers.dm deleted file mode 100644 index b9071a7fef5ff..0000000000000 --- a/code/modules/psionics/complexus/complexus_helpers.dm +++ /dev/null @@ -1,104 +0,0 @@ -/datum/psi_complexus/proc/cancel() - sound_to(owner, sound('sound/effects/psi/power_fail.ogg')) - if(LAZYLEN(manifested_items)) - for(var/thing in manifested_items) - owner.drop_from_inventory(thing) - qdel(thing) - manifested_items = null - -/datum/psi_complexus/proc/stunned(var/amount) - var/old_stun = stun - stun = max(stun, amount) - if(amount && !old_stun) - to_chat(owner, "Your concentration has been shattered! You cannot focus your psi power!") - ui.update_icon() - cancel() - -/datum/psi_complexus/proc/get_armour(var/armourtype) - if(use_psi_armour && can_use_passive()) - return round(clamp(clamp(4 * rating, 0, 20) * get_rank(SSpsi.armour_faculty_by_type[armourtype]), 0, 100) * (stamina/max_stamina)) - else - return 0 - -/datum/psi_complexus/proc/get_rank(var/faculty) - return LAZYACCESS(ranks, faculty) - -/datum/psi_complexus/proc/set_rank(var/faculty, var/rank, var/defer_update, var/temporary) - if(get_rank(faculty) != rank) - LAZYSET(ranks, faculty, rank) - if(!temporary) - LAZYSET(base_ranks, faculty, rank) - if(!defer_update) - update() - -/datum/psi_complexus/proc/set_cooldown(var/value) - next_power_use = world.time + value - ui.update_icon() - -/datum/psi_complexus/proc/can_use_passive() - return (owner.stat == CONSCIOUS && !suppressed && !stun) - -/datum/psi_complexus/proc/can_use(var/incapacitation_flags) - return (owner.stat == CONSCIOUS && (!incapacitation_flags || !owner.incapacitated(incapacitation_flags)) && !suppressed && !stun && world.time >= next_power_use) - -/datum/psi_complexus/proc/spend_power(var/value = 0, var/check_incapacitated) - . = FALSE - if(isnull(check_incapacitated)) - check_incapacitated = (INCAPACITATION_STUNNED|INCAPACITATION_KNOCKOUT) - if(can_use(check_incapacitated)) - value = max(1, Ceil(value * cost_modifier)) - if(value <= stamina) - stamina -= value - ui.update_icon() - . = TRUE - else - backblast(abs(stamina - value)) - stamina = 0 - . = FALSE - ui.update_icon() - -/datum/psi_complexus/proc/spend_power_armor(var/value = 0) - armor_cost += value - -/datum/psi_complexus/proc/hide_auras() - if(owner.client) - for(var/thing in SSpsi.all_aura_images) - owner.client.images -= thing - -/datum/psi_complexus/proc/show_auras() - if(owner.client) - for(var/image/I in SSpsi.all_aura_images) - owner.client.images |= I - -/datum/psi_complexus/proc/backblast(var/value) - - // Can't backblast if you're controlling your power. - if(!owner || suppressed) - return FALSE - - sound_to(owner, sound('sound/effects/psi/power_feedback.ogg')) - to_chat(owner, "Wild energistic feedback blasts across your psyche!") - stunned(value * 2) - set_cooldown(value * 100) - - if(prob(value*10)) owner.emote("scream") - - // Your head asplode. - owner.adjustBrainLoss(value) - if(ishuman(owner)) - var/mob/living/carbon/human/pop = owner - if(pop.should_have_organ(BP_BRAIN)) - var/obj/item/organ/internal/brain/sponge = pop.internal_organs_by_name[BP_BRAIN] - if(sponge && sponge.damage >= sponge.max_damage) - var/obj/item/organ/external/affecting = pop.get_organ(sponge.parent_organ) - if(affecting && !affecting.is_stump()) - affecting.droplimb(0, DROPLIMB_BLUNT) - if(sponge) qdel(sponge) - -/datum/psi_complexus/proc/reset() - aura_color = initial(aura_color) - ranks = base_ranks ? base_ranks.Copy() : null - max_stamina = initial(max_stamina) - stamina = min(stamina, max_stamina) - cancel() - update() diff --git a/code/modules/psionics/complexus/complexus_latency.dm b/code/modules/psionics/complexus/complexus_latency.dm deleted file mode 100644 index 5376bc857496b..0000000000000 --- a/code/modules/psionics/complexus/complexus_latency.dm +++ /dev/null @@ -1,18 +0,0 @@ -/datum/psi_complexus/proc/check_latency_trigger(var/trigger_strength = 0, var/source, var/redactive = FALSE) - - if(!LAZYLEN(latencies) || world.time < next_latency_trigger) - return FALSE - - if(!prob(trigger_strength)) - next_latency_trigger = world.time + rand(100, 300) - return FALSE - - var/faculty = pick(latencies) - var/new_rank = rand(2,5) - owner.set_psi_rank(faculty, new_rank) - var/decl/psionic_faculty/faculty_decl = SSpsi.get_faculty(faculty) - to_chat(owner, SPAN_DANGER("You scream internally as your [faculty_decl.name] faculty is forced into operancy by [source]!")) - next_latency_trigger = world.time + rand(600, 1800) * new_rank - if(!redactive) owner.adjustBrainLoss(rand(trigger_strength * 2, trigger_strength * 4)) - log_and_message_admins("gained the [faculty_decl.name] psionic faculty by: [source].", owner) - return TRUE diff --git a/code/modules/psionics/complexus/complexus_power_cache.dm b/code/modules/psionics/complexus/complexus_power_cache.dm deleted file mode 100644 index 637137d58b038..0000000000000 --- a/code/modules/psionics/complexus/complexus_power_cache.dm +++ /dev/null @@ -1,49 +0,0 @@ -/datum/psi_complexus/proc/rebuild_power_cache() - if(rebuild_power_cache) - - melee_powers = list() - grab_powers = list() - ranged_powers = list() - manifestation_powers = list() - powers_by_faculty = list() - - for(var/faculty in ranks) - var/relevant_rank = get_rank(faculty) - var/decl/psionic_faculty/faculty_decl = SSpsi.get_faculty(faculty) - for(var/thing in faculty_decl.powers) - var/decl/psionic_power/power = thing - if(relevant_rank >= power.min_rank) - if(!powers_by_faculty[power.faculty]) powers_by_faculty[power.faculty] = list() - powers_by_faculty[power.faculty] += power - if(power.use_ranged) - if(!ranged_powers[faculty]) ranged_powers[faculty] = list() - ranged_powers[faculty] += power - if(power.use_melee) - if(!melee_powers[faculty]) melee_powers[faculty] = list() - melee_powers[faculty] += power - if(power.use_manifest) - manifestation_powers += power - if(power.use_grab) - if(!grab_powers[faculty]) grab_powers[faculty] = list() - grab_powers[faculty] += power - rebuild_power_cache = FALSE - -/datum/psi_complexus/proc/get_powers_by_faculty(var/faculty) - rebuild_power_cache() - return powers_by_faculty[faculty] - -/datum/psi_complexus/proc/get_melee_powers(var/faculty) - rebuild_power_cache() - return melee_powers[faculty] - -/datum/psi_complexus/proc/get_ranged_powers(var/faculty) - rebuild_power_cache() - return ranged_powers[faculty] - -/datum/psi_complexus/proc/get_grab_powers(var/faculty) - rebuild_power_cache() - return grab_powers[faculty] - -/datum/psi_complexus/proc/get_manifestations() - rebuild_power_cache() - return manifestation_powers diff --git a/code/modules/psionics/complexus/complexus_process.dm b/code/modules/psionics/complexus/complexus_process.dm deleted file mode 100644 index 00b740cf0b018..0000000000000 --- a/code/modules/psionics/complexus/complexus_process.dm +++ /dev/null @@ -1,250 +0,0 @@ -/datum/psi_complexus/proc/update(var/force) - - set waitfor = FALSE - - var/last_rating = rating - var/highest_faculty - var/highest_rank = 0 - var/combined_rank = 0 - for(var/faculty in ranks) - var/check_rank = get_rank(faculty) - if(check_rank == 1) - LAZYADD(latencies, faculty) - else - if(check_rank <= 0) - ranks -= faculty - LAZYREMOVE(latencies, faculty) - combined_rank += check_rank - if(!highest_faculty || highest_rank < check_rank) - highest_faculty = faculty - highest_rank = check_rank - - UNSETEMPTY(latencies) - var/rank_count = max(1, LAZYLEN(ranks)) - if(force || last_rating != Ceil(combined_rank/rank_count)) - if(highest_rank <= 1) - if(highest_rank == 0) - qdel(src) - return - else - rebuild_power_cache = TRUE - sound_to(owner, 'sound/effects/psi/power_unlock.ogg') - rating = Ceil(combined_rank/rank_count) - cost_modifier = 1 - if(rating > 1) - cost_modifier -= min(1, max(0.1, (rating-1) / 10)) - if(!ui) - ui = new(owner) - if(owner.client) - owner.client.screen += ui.components - owner.client.screen += ui - else - if(owner.client) - owner.client.screen |= ui.components - owner.client.screen |= ui - if(!suppressed && owner.client) - for(var/thing in SSpsi.all_aura_images) - owner.client.images |= thing - - var/image/aura_image = get_aura_image() - if(rating >= PSI_RANK_PARAMOUNT) // spooky boosters - aura_color = "#aaffaa" - aura_image.blend_mode = BLEND_SUBTRACT - else - aura_image.blend_mode = BLEND_ADD - if(highest_faculty == PSI_COERCION) - aura_color = "#cc3333" - else if(highest_faculty == PSI_PSYCHOKINESIS) - aura_color = "#3333cc" - else if(highest_faculty == PSI_REDACTION) - aura_color = "#33cc33" - else if(highest_faculty == PSI_ENERGISTICS) - aura_color = "#cccc33" - aura_image.pixel_x = -64 - owner.default_pixel_x - aura_image.pixel_y = -64 - owner.default_pixel_y - - if(!announced && owner && owner.client && !QDELETED(src)) - announced = TRUE - to_chat(owner, "
              ") - to_chat(owner, SPAN_NOTICE("You are psionic, touched by powers beyond understanding.")) - to_chat(owner, SPAN_NOTICE("Shift-left-click your Psi icon on the bottom right to view a summary of how to use them, or left click it to suppress or unsuppress your psionics. Beware: overusing your gifts can have deadly consequences.")) - to_chat(owner, "
              ") - -/datum/psi_complexus/Process() - var/update_hud - if(armor_cost) - var/value = max(1, Ceil(armor_cost * cost_modifier)) - if(value <= stamina) - stamina -= value - else - backblast(abs(stamina - value)) - stamina = 0 - update_hud = TRUE - armor_cost = 0 - - if(stun) - stun-- - if(stun) - if(!suppressed) - suppressed = TRUE - update_hud = TRUE - else - to_chat(owner, SPAN_NOTICE("You have recovered your mental composure.")) - update_hud = TRUE - else - var/psi_leech = owner.do_psionics_check() - if(psi_leech) - if(stamina > 10) - stamina = max(0, stamina - rand(15,20)) - to_chat(owner, SPAN_DANGER("You feel your psi-power leeched away by \the [psi_leech]...")) - else - stamina++ - else if(stamina < max_stamina) - if(owner.stat == CONSCIOUS) - stamina = min(max_stamina, stamina + rand(1,3)) - else if(owner.stat == UNCONSCIOUS) - stamina = min(max_stamina, stamina + rand(3,5)) - - if(!owner.nervous_system_failure() && owner.stat == CONSCIOUS && stamina && !suppressed && get_rank(PSI_REDACTION) >= PSI_RANK_OPERANT) - attempt_regeneration() - - var/next_aura_size = max(0.1,((stamina/max_stamina)*min(3,rating))/5) - var/next_aura_alpha = round(((suppressed ? max(0,rating - 2) : rating)/5)*255) - - if(next_aura_alpha != last_aura_alpha || next_aura_size != last_aura_size || aura_color != last_aura_color) - last_aura_size = next_aura_size - last_aura_alpha = next_aura_alpha - last_aura_color = aura_color - animate( - get_aura_image(), - alpha = next_aura_alpha, - transform = matrix().Update(scale_x = next_aura_size, scale_y = next_aura_size), - color = aura_color, - time = 3 - ) - - if(update_hud) - ui.update_icon() - -/datum/psi_complexus/proc/attempt_regeneration() - - var/heal_general = FALSE - var/heal_poison = FALSE - var/heal_internal = FALSE - var/heal_bleeding = FALSE - var/heal_rate = 0 - var/mend_prob = 0 - - var/use_rank = get_rank(PSI_REDACTION) - if(use_rank >= PSI_RANK_PARAMOUNT) - heal_general = TRUE - heal_poison = TRUE - heal_internal = TRUE - heal_bleeding = TRUE - mend_prob = 50 - heal_rate = 7 - else if(use_rank == PSI_RANK_GRANDMASTER) - heal_poison = TRUE - heal_internal = TRUE - heal_bleeding = TRUE - mend_prob = 20 - heal_rate = 5 - else if(use_rank == PSI_RANK_MASTER) - heal_internal = TRUE - heal_bleeding = TRUE - mend_prob = 10 - heal_rate = 3 - else if(use_rank == PSI_RANK_OPERANT) - heal_bleeding = TRUE - mend_prob = 5 - heal_rate = 1 - else - return - - if(!heal_rate || stamina < heal_rate) - return // Don't backblast from trying to heal ourselves thanks. - - if(ishuman(owner)) - - var/mob/living/carbon/human/H = owner - - // Fix some pain. - if(heal_rate > 0) - H.shock_stage = max(0, H.shock_stage - max(1, round(heal_rate/2))) - - // Mend internal damage. - if(prob(mend_prob)) - - // Fix our heart if we're paramount. - if(heal_general && H.is_asystole() && H.should_have_organ(BP_HEART) && spend_power(heal_rate)) - H.resuscitate() - - // Heal organ damage. - if(heal_internal) - for(var/obj/item/organ/I in H.internal_organs) - - if(BP_IS_ROBOTIC(I) || BP_IS_CRYSTAL(I)) - continue - - if(I.damage > 0 && spend_power(heal_rate)) - I.damage = max(I.damage - heal_rate, 0) - if(prob(25)) - to_chat(H, SPAN_NOTICE("Your innards itch as your autoredactive faculty mends your [I.name].")) - return - - // Heal broken bones. - if(H.bad_external_organs.len) - for(var/obj/item/organ/external/E in H.bad_external_organs) - - if(BP_IS_ROBOTIC(E)) - continue - - if(heal_internal && (E.status & ORGAN_BROKEN) && E.damage < (E.min_broken_damage * config.organ_health_multiplier)) // So we don't mend and autobreak. - if(spend_power(heal_rate)) - if(E.mend_fracture()) - to_chat(H, SPAN_NOTICE("Your autoredactive faculty coaxes together the shattered bones in your [E.name].")) - return - - if(heal_bleeding) - - if((E.status & ORGAN_ARTERY_CUT) && spend_power(heal_rate)) - to_chat(H, SPAN_NOTICE("Your autoredactive faculty mends the torn artery in your [E.name], stemming the worst of the bleeding.")) - E.status &= ~ORGAN_ARTERY_CUT - return - - if(E.status & ORGAN_TENDON_CUT) - to_chat(H, SPAN_NOTICE("Your autoredactive faculty repairs the severed tendon in your [E.name].")) - E.status &= ~ORGAN_TENDON_CUT - return TRUE - - for(var/datum/wound/W in E.wounds) - - if(W.bleeding() && spend_power(heal_rate)) - to_chat(H, SPAN_NOTICE("Your autoredactive faculty knits together severed veins, stemming the bleeding from \a [W.desc] on your [E.name].")) - W.bleed_timer = 0 - W.clamped = TRUE - E.status &= ~ORGAN_BLEEDING - return - - // Heal radiation, cloneloss and poisoning. - if(heal_poison) - - if(owner.radiation && spend_power(heal_rate)) - if(prob(25)) - to_chat(owner, SPAN_NOTICE("Your autoredactive faculty repairs some of the radiation damage to your body.")) - owner.radiation = max(0, owner.radiation - heal_rate) - return - - if(owner.getCloneLoss() && spend_power(heal_rate)) - if(prob(25)) - to_chat(owner, SPAN_NOTICE("Your autoredactive faculty stitches together some of your mangled DNA.")) - owner.adjustCloneLoss(-heal_rate) - return - - // Heal everything left. - if(heal_general && prob(mend_prob) && (owner.getBruteLoss() || owner.getFireLoss() || owner.getOxyLoss()) && spend_power(heal_rate)) - owner.adjustBruteLoss(-(heal_rate)) - owner.adjustFireLoss(-(heal_rate)) - owner.adjustOxyLoss(-(heal_rate)) - if(prob(25)) - to_chat(owner, SPAN_NOTICE("Your skin crawls as your autoredactive faculty heals your body.")) diff --git a/code/modules/psionics/complexus/complexus_topic.dm b/code/modules/psionics/complexus/complexus_topic.dm deleted file mode 100644 index dca7ce76eb31d..0000000000000 --- a/code/modules/psionics/complexus/complexus_topic.dm +++ /dev/null @@ -1,20 +0,0 @@ -/datum/psi_complexus/CanUseTopic(var/mob/user, var/datum/topic_state/state = GLOB.default_state) - return (user.client && check_rights(R_ADMIN, FALSE, user.client)) - -/datum/psi_complexus/Topic(var/href, var/list/href_list) - . = ..() - if(!. && check_rights(R_ADMIN)) - if(href_list && href_list["remove_psionics"]) - if(!QDELETED(src) && !QDELETED(owner?.psi) && owner.psi == src) - log_and_message_admins("removed all psionics from [key_name(owner)].") - to_chat(owner, SPAN_NOTICE("Your psionic powers vanish abruptly, leaving you cold and empty.")) - QDEL_NULL(owner.psi) - . = TRUE - if(href_list && href_list["trigger_psi_latencies"]) - log_and_message_admins("triggered psi latencies for [key_name(owner)].") - check_latency_trigger(100, "outside intervention", redactive = TRUE) - . = TRUE - if(.) - var/datum/admins/admin = GLOB.admins[usr.key] - if(istype(admin)) - admin.show_player_panel(owner) diff --git a/code/modules/psionics/equipment/cerebro_enhancers.dm b/code/modules/psionics/equipment/cerebro_enhancers.dm deleted file mode 100644 index ffe37ec859a8f..0000000000000 --- a/code/modules/psionics/equipment/cerebro_enhancers.dm +++ /dev/null @@ -1,167 +0,0 @@ -//Psi-boosting item (antag only) -/obj/item/clothing/head/helmet/space/psi_amp - name = "cerebro-energetic enhancer" - desc = "A matte-black, eyeless cerebro-energetic enhancement helmet. It uses highly sophisticated, and illegal, techniques to drill into your brain and install psi-infected AIs into the fluid cavities between your lobes." - action_button_name = "Install Boosters" - icon_state = "cerebro" - - item_state_slots = list( - slot_l_hand_str = "helmet", - slot_r_hand_str = "helmet" - ) - - var/operating = FALSE - var/list/boosted_faculties - var/boosted_rank = PSI_RANK_PARAMOUNT - var/unboosted_rank = PSI_RANK_MASTER - var/max_boosted_faculties = 3 - var/boosted_psipower = 120 - -/obj/item/clothing/head/helmet/space/psi_amp/lesser - name = "psionic amplifier" - desc = "A crown-of-thorns cerebro-energetic enhancer that interfaces directly with the brain, isolating and strengthening psionic signals. It kind of looks like a tiara having sex with an industrial robot." - icon_state = "amp" - flags_inv = 0 - body_parts_covered = 0 - - max_boosted_faculties = 1 - boosted_rank = PSI_RANK_MASTER - unboosted_rank = PSI_RANK_OPERANT - boosted_psipower = 50 - -/obj/item/clothing/head/helmet/space/psi_amp/Initialize() - . = ..() - verbs += /obj/item/clothing/head/helmet/space/psi_amp/proc/integrate - -/obj/item/clothing/head/helmet/space/psi_amp/attack_self(var/mob/user) - - if(operating) - return - - if(!canremove) - deintegrate() - return - - var/mob/living/carbon/human/H = loc - if(istype(H) && H.head == src) - integrate() - return - - var/choice = input("Select a brainboard to install or remove.","Psionic Amplifier") as null|anything in SSpsi.faculties_by_name - if(!choice) - return - - var/removed - var/slots_left = max_boosted_faculties - LAZYLEN(boosted_faculties) - var/decl/psionic_faculty/faculty = SSpsi.get_faculty(choice) - if(faculty.id in boosted_faculties) - LAZYREMOVE(boosted_faculties, faculty.id) - removed = TRUE - else - if(slots_left <= 0) - to_chat(user, SPAN_WARNING("There are no slots left to install brainboards into.")) - return - LAZYADD(boosted_faculties, faculty.id) - UNSETEMPTY(boosted_faculties) - - slots_left = max_boosted_faculties - LAZYLEN(boosted_faculties) - to_chat(user, SPAN_NOTICE("You [removed ? "remove" : "install"] the [choice] brainboard [removed ? "from" : "in"] \the [src]. There [slots_left!=1 ? "are" : "is"] [slots_left] slot\s left.")) - -/obj/item/clothing/head/helmet/space/psi_amp/proc/deintegrate() - - set name = "Remove Psi-Amp" - set desc = "Enhance your brainpower." - set category = "Abilities" - set src in usr - - if(operating) - return - - if(canremove) - return - - var/mob/living/carbon/human/H = loc - if(!istype(H) || H.head != src) - canremove = TRUE - return - - to_chat(H, SPAN_WARNING("You feel a strange tugging sensation as \the [src] begins removing the slave-minds from your brain...")) - playsound(H, 'sound/weapons/circsawhit.ogg', 50, 1, -1) - operating = TRUE - - sleep(80) - - if(H.psi) - H.psi.reset() - - to_chat(H, SPAN_NOTICE("\The [src] chimes quietly as it finishes removing the slave-minds from your brain.")) - - canremove = TRUE - operating = FALSE - - verbs -= /obj/item/clothing/head/helmet/space/psi_amp/proc/deintegrate - verbs |= /obj/item/clothing/head/helmet/space/psi_amp/proc/integrate - - action_button_name = "Integrate Psionic Amplifier" - H.update_action_buttons() - - set_light(0) - -/obj/item/clothing/head/helmet/space/psi_amp/Move() - var/lastloc = loc - . = ..() - if(.) - var/mob/living/carbon/human/H = lastloc - if(istype(H) && H.psi) - H.psi.reset() - H = loc - if(!istype(H) || H.head != src) - canremove = TRUE - -/obj/item/clothing/head/helmet/space/psi_amp/proc/integrate() - - set name = "Integrate Psionic Amplifier" - set desc = "Enhance your brainpower." - set category = "Abilities" - set src in usr - - if(operating) - return - - if(!canremove) - return - - if(LAZYLEN(boosted_faculties) < max_boosted_faculties) - to_chat(usr, SPAN_NOTICE("You still have [max_boosted_faculties - LAZYLEN(boosted_faculties)] facult[LAZYLEN(boosted_faculties) == 1 ? "y" : "ies"] to select. Use \the [src] in-hand to select them.")) - return - - var/mob/living/carbon/human/H = loc - if(!istype(H) || H.head != src) - to_chat(usr, SPAN_WARNING("\The [src] must be worn on your head in order to be activated.")) - return - - canremove = FALSE - operating = TRUE - to_chat(H, SPAN_WARNING("You feel a series of sharp pinpricks as \the [src] anaesthetises your scalp before drilling down into your brain.")) - playsound(H, 'sound/weapons/circsawhit.ogg', 50, 1, -1) - - sleep(80) - - for(var/faculty in list(PSI_COERCION, PSI_PSYCHOKINESIS, PSI_REDACTION, PSI_ENERGISTICS)) - if(faculty in boosted_faculties) - H.set_psi_rank(faculty, boosted_rank, take_larger = TRUE, temporary = TRUE) - else - H.set_psi_rank(faculty, unboosted_rank, take_larger = TRUE, temporary = TRUE) - if(H.psi) - H.psi.max_stamina = boosted_psipower - H.psi.stamina = H.psi.max_stamina - H.psi.update(force = TRUE) - - to_chat(H, SPAN_NOTICE("You experience a brief but powerful wave of deja vu as \the [src] finishes modifying your brain.")) - verbs |= /obj/item/clothing/head/helmet/space/psi_amp/proc/deintegrate - verbs -= /obj/item/clothing/head/helmet/space/psi_amp/proc/integrate - operating = FALSE - action_button_name = "Remove Psionic Amplifier" - H.update_action_buttons() - - set_light(0.5, 0.1, 3, 2, l_color = "#880000") diff --git a/code/modules/psionics/equipment/foundation_implanter.dm b/code/modules/psionics/equipment/foundation_implanter.dm deleted file mode 100644 index 988d3970af15a..0000000000000 --- a/code/modules/psionics/equipment/foundation_implanter.dm +++ /dev/null @@ -1,18 +0,0 @@ -/obj/item/implanter/psi - name = "psi-null implanter" - desc = "An implant gun customized to interact with psi dampeners." - var/implanter_mode = PSI_IMPLANT_AUTOMATIC - -/obj/item/implanter/psi/attack_self(var/mob/user) - var/choice = input("Select a new implant mode.", "Psi Dampener") as null|anything in list(PSI_IMPLANT_AUTOMATIC, PSI_IMPLANT_SHOCK, PSI_IMPLANT_WARN, PSI_IMPLANT_LOG, PSI_IMPLANT_DISABLED) - if(!choice || user != loc) return - var/obj/item/implant/psi_control/implant = imp - if(!istype(implant)) - to_chat(user, "The implanter reports there is no compatible implant loaded.") - return - implant.psi_mode = choice - to_chat(user, "You set \the [src] to configure implants with the '[implant.psi_mode]' setting.") - -/obj/item/implanter/psi/New() - ..() - imp = new /obj/item/implant/psi_control(src) diff --git a/code/modules/psionics/equipment/foundation_weapon.dm b/code/modules/psionics/equipment/foundation_weapon.dm deleted file mode 100644 index f259ca3e58c33..0000000000000 --- a/code/modules/psionics/equipment/foundation_weapon.dm +++ /dev/null @@ -1,24 +0,0 @@ -/obj/item/gun/projectile/revolver/foundation - name = "\improper Foundation revolver" - icon = 'icons/obj/guns/foundation.dmi' - icon_state = "foundation" - desc = "The CF 'Troubleshooter', a compact plastic-composite weapon designed for concealed carry by Cuchulain Foundation field agents. Smells faintly of copper." - ammo_type = /obj/item/ammo_casing/pistol/magnum/nullglass - -/obj/item/gun/projectile/revolver/foundation/disrupts_psionics() - return FALSE - -/obj/item/storage/briefcase/foundation - name = "\improper Foundation briefcase" - desc = "A handsome black leather briefcase embossed with a stylized radio telescope." - icon_state = "fbriefcase" - item_state = "fbriefcase" - -/obj/item/storage/briefcase/foundation/disrupts_psionics() - return FALSE - -/obj/item/storage/briefcase/foundation/New() - ..() - new /obj/item/ammo_magazine/speedloader/magnum/nullglass(src) - new /obj/item/gun/projectile/revolver/foundation(src) - make_exact_fit() diff --git a/code/modules/psionics/equipment/implant.dm b/code/modules/psionics/equipment/implant.dm deleted file mode 100644 index ffe4e70620eb3..0000000000000 --- a/code/modules/psionics/equipment/implant.dm +++ /dev/null @@ -1,108 +0,0 @@ -/obj/item/implant/psi_control - name = "psi dampener implant" - desc = "A safety implant for registered psi-operants." - known = TRUE - - var/overload = 0 - var/max_overload = 100 - var/psi_mode = PSI_IMPLANT_AUTOMATIC - -/obj/item/implant/psi_control/islegal() - return TRUE - -/obj/item/implant/psi_control/Initialize() - . = ..() - SSpsi.psi_dampeners += src - -/obj/item/implant/psi_control/Destroy() - SSpsi.psi_dampeners -= src - . = ..() - -/obj/item/implant/psi_control/emp_act() - ..() - update_functionality() - -/obj/item/implant/psi_control/meltdown() - . = ..() - update_functionality() - -/obj/item/implant/psi_control/disrupts_psionics() - var/use_psi_mode = get_psi_mode() - return (!malfunction && (use_psi_mode == PSI_IMPLANT_SHOCK || use_psi_mode == PSI_IMPLANT_WARN)) ? src : FALSE - -/obj/item/implant/psi_control/removed() - var/mob/living/M = imp_in - if(disrupts_psionics() && istype(M) && M.psi) - to_chat(M, SPAN_NOTICE("You feel the chilly shackles around your psionic faculties fade away.")) - . = ..() - -/obj/item/implant/psi_control/proc/update_functionality(var/silent) - var/mob/living/M = imp_in - if(get_psi_mode() == PSI_IMPLANT_DISABLED || malfunction) - if(implanted && !silent && istype(M) && M.psi) - to_chat(M, SPAN_NOTICE("You feel the chilly shackles around your psionic faculties fade away.")) - else - if(implanted && !silent && istype(M) && M.psi) - to_chat(M, SPAN_NOTICE("Bands of hollow ice close themselves around your psionic faculties.")) - -/obj/item/implant/psi_control/meltdown() - if(!malfunction) - overload = 100 - if(imp_in) - for(var/thing in SSpsi.psi_monitors) - var/obj/machinery/psi_monitor/monitor = thing - monitor.report_failure(src) - . = ..() - -/obj/item/implant/psi_control/proc/get_psi_mode() - if(psi_mode == PSI_IMPLANT_AUTOMATIC) - var/decl/security_state/security_state = decls_repository.get_decl(GLOB.using_map.security_state) - return security_state.current_security_level.psionic_control_level - return psi_mode - -/obj/item/implant/psi_control/withstand_psi_stress(var/stress, var/atom/source) - - var/use_psi_mode = get_psi_mode() - - if(malfunction || use_psi_mode == PSI_IMPLANT_DISABLED) - return stress - - . = 0 - - if(stress > 0) - - // If we're disrupting psionic attempts at the moment, we might overload. - if(disrupts_psionics()) - var/overload_amount = Floor(stress/10) - if(overload_amount > 0) - overload += overload_amount - if(overload >= 100) - if(imp_in) - to_chat(imp_in, SPAN_DANGER("Your psi dampener overloads violently!")) - meltdown() - update_functionality() - return - if(imp_in) - if(overload >= 75 && overload < 100) - to_chat(imp_in, SPAN_DANGER("Your psi dampener is searing hot!")) - else if(overload >= 50 && overload < 75) - to_chat(imp_in, SPAN_WARNING("Your psi dampener is uncomfortably hot...")) - else if(overload >= 25 && overload < 50) - to_chat(imp_in, SPAN_WARNING("You feel your psi dampener heating up...")) - - // If all we're doing is logging the incident then just pass back stress without changing it. - if(source && source == imp_in && implanted) - for(var/thing in SSpsi.psi_monitors) - var/obj/machinery/psi_monitor/monitor = thing - monitor.report_violation(src, stress) - if(use_psi_mode == PSI_IMPLANT_LOG) - return stress - else if(use_psi_mode == PSI_IMPLANT_SHOCK) - to_chat(imp_in, SPAN_DANGER("Your psi dampener punishes you with a violent neural shock!")) - imp_in.flash_eyes() - imp_in.Weaken(5) - if(isliving(imp_in)) - var/mob/living/M = imp_in - if(M.psi) M.psi.stunned(5) - else if(use_psi_mode == PSI_IMPLANT_WARN) - to_chat(imp_in, SPAN_WARNING("Your psi dampener primly informs you it has reported this violation.")) diff --git a/code/modules/psionics/equipment/null_ammo.dm b/code/modules/psionics/equipment/null_ammo.dm deleted file mode 100644 index eb7fa46e428e7..0000000000000 --- a/code/modules/psionics/equipment/null_ammo.dm +++ /dev/null @@ -1,17 +0,0 @@ -/obj/item/projectile/bullet/nullglass - name = "nullglass bullet" - damage = 40 - shrapnel_type = /obj/item/material/shard/nullglass - -/obj/item/projectile/bullet/nullglass/disrupts_psionics() - return src - -/obj/item/ammo_casing/pistol/magnum/nullglass - desc = "A revolver bullet casing with a nullglass coating." - projectile_type = /obj/item/projectile/bullet/nullglass - -/obj/item/ammo_casing/pistol/magnum/nullglass/disrupts_psionics() - return src - -/obj/item/ammo_magazine/speedloader/magnum/nullglass - ammo_type = /obj/item/ammo_casing/pistol/magnum/nullglass diff --git a/code/modules/psionics/equipment/psimeter.dm b/code/modules/psionics/equipment/psimeter.dm deleted file mode 100644 index f662cad826bc6..0000000000000 --- a/code/modules/psionics/equipment/psimeter.dm +++ /dev/null @@ -1,71 +0,0 @@ -/obj/machinery/psi_meter - name = "psi-meter" - desc = "A bulky psi-meter for conducting assays of psi-operants." - icon = 'icons/obj/machines/psimeter.dmi' - icon_state = "meter_on" - use_power = POWER_USE_ACTIVE - anchored = TRUE - density = TRUE - opacity = FALSE - - var/list/last_assay - var/mob/living/last_assayed - -/obj/machinery/psi_meter/on_update_icon() - if(use_power && !(stat & (NOPOWER|BROKEN))) - icon_state = "meter_on" - else - icon_state = "meter_off" - -/obj/machinery/psi_meter/interface_interact(var/mob/user) - interact(user) - return TRUE - -/obj/machinery/psi_meter/interact(var/mob/user) - - if(!use_power) return - - var/list/dat = list() - if(LAZYLEN(last_assay)) - dat = last_assay - else - dat += "

              TELESTO Mark I Psi-Meter


              " - var/found - for(var/mob/living/H in range(1, src)) - found = TRUE - dat += "" - dat += "
              Candidates
              [H.name]Conduct Assay" - if(!found) - dat += "
              No candidates found.
              " - - var/datum/browser/popup = new(user, "psi_assay_\ref[src]", "Psi-Assay") - popup.set_content(jointext(dat,null)) - popup.open() - -/obj/machinery/psi_meter/Topic(href, href_list) - . = ..() - if(!.) - - if(!issilicon(usr) && !Adjacent(usr)) - return FALSE - - var/refresh - if(href_list["print"]) - if(last_assay) - var/obj/item/paper/P = new(loc) - P.name = "paper - Psi-Assay ([last_assayed.name])" - P.info = jointext(last_assay - last_assay[last_assay.len],null) // Last line is 'print | clear' link line. - return TRUE - - if(href_list["clear"]) - last_assay = null - refresh = TRUE - else if(href_list["assay"]) - last_assayed = locate(href_list["assay"]) - if(istype(last_assayed)) - last_assayed.show_psi_assay(usr, src) - refresh = TRUE - - if(refresh) - interact(usr) - return TRUE diff --git a/code/modules/psionics/equipment/psimonitor.dm b/code/modules/psionics/equipment/psimonitor.dm deleted file mode 100644 index df1b655e4bf23..0000000000000 --- a/code/modules/psionics/equipment/psimonitor.dm +++ /dev/null @@ -1,117 +0,0 @@ -/obj/machinery/psi_monitor - name = "psionic implant monitor" - icon = 'icons/obj/machines/psimeter.dmi' - icon_state = "meter_on" - use_power = POWER_USE_ACTIVE - anchored = TRUE - density = TRUE - opacity = FALSE - req_access = list(list(access_psychiatrist, access_captain, access_cmo, access_hos)) - - var/list/psi_violations = list() - var/show_violations = FALSE - var/authorized - -/obj/machinery/psi_monitor/New() - SSpsi.psi_monitors += src - ..() - -/obj/machinery/psi_monitor/emag_act(var/remaining_charges, var/mob/user) - if(!emagged) - emagged = TRUE - remaining_charges-- - req_access.Cut() - to_chat(user, "You short out the access protocols.") - return TRUE - return FALSE - -/obj/machinery/psi_monitor/Topic(href, href_list) - - . = ..() - if(!.) - - if(href_list["login"]) - - var/obj/item/card/id/ID = usr.GetIdCard() - if(!ID || !allowed(usr)) - to_chat(usr, "Access denied.") - else - authorized = "[ID.registered_name] ([ID.assignment])" - . = 1 - - else if(href_list["logout"]) - authorized = FALSE - . = 1 - - else if(href_list["show_violations"]) - show_violations = (href_list["show_violations"] == "1") - . = 1 - - else if(href_list["remove_violation"]) - var/remove_ind = text2num(href_list["remove_violation"]) - if(remove_ind > 0 && remove_ind <= psi_violations.len) - psi_violations.Cut(remove_ind, remove_ind++) - . = 1 - - else if(href_list["change_mode"]) - var/obj/item/implant/psi_control/implant = locate(href_list["change_mode"]) - if(implant.imp_in && !implant.malfunction) - var/choice = input("Select a new implant mode.", "Psi Dampener") as null|anything in list(PSI_IMPLANT_AUTOMATIC, PSI_IMPLANT_SHOCK, PSI_IMPLANT_WARN, PSI_IMPLANT_LOG, PSI_IMPLANT_DISABLED) - if(choice && implant && implant.imp_in && !implant.malfunction) - implant.psi_mode = choice - implant.update_functionality() - . = 1 - - if(. && usr) - interact(usr) - -/obj/machinery/psi_monitor/interface_interact(var/mob/user) - interact(user) - return TRUE - -/obj/machinery/psi_monitor/interact(var/mob/user) - - var/list/dat = list() - dat += "

              Psi Dampener Monitor

              " - if(authorized) - dat += "[authorized]Logout" - else - dat += "Login" - - dat += "

              Active Psionic Dampeners


              " - dat += "
              " - dat += "" - for(var/thing in SSpsi.psi_dampeners) - var/obj/item/implant/psi_control/implant = thing - if(!implant.imp_in) - continue - dat += "" - if(implant.malfunction) - dat += "" - else - dat += "" - dat += "" - dat += "
              OperantSystem loadMode
              [implant.imp_in.name]ERRORERROR[implant.overload]%[authorized ? "[implant.psi_mode]" : "[implant.psi_mode]"]

              " - - if(show_violations) - dat += "

              Psionic Control Violations -


              " - if(psi_violations.len) - for(var/i = 1 to psi_violations.len) - var/entry = psi_violations[i] - dat += "" - else - dat += "" - dat += "

              [entry]
              [authorized ? "Remove" : ""]
              None reported.

              " - else - dat += "

              Psionic Control Violations +


              " - - var/datum/browser/popup = new(user, "psi_monitor_\ref[src]", "Psi-Monitor") - popup.set_content(jointext(dat,null)) - popup.open() - - -/obj/machinery/psi_monitor/proc/report_failure(var/obj/item/implant/psi_control/implant) - psi_violations += "Critical system failure - [implant.imp_in.name]." - -/obj/machinery/psi_monitor/proc/report_violation(var/obj/item/implant/psi_control/implant, var/stress) - psi_violations += "Sigma [round(stress/10)] event - [implant.imp_in.name]." \ No newline at end of file diff --git a/code/modules/psionics/equipment/psipower.dm b/code/modules/psionics/equipment/psipower.dm deleted file mode 100644 index 4174e8ff9f615..0000000000000 --- a/code/modules/psionics/equipment/psipower.dm +++ /dev/null @@ -1,62 +0,0 @@ -/obj/item/psychic_power - name = "psychic power" - icon = 'icons/obj/psychic_powers.dmi' - atom_flags = 0 - anchored = TRUE - var/maintain_cost = 3 - var/mob/living/owner - -/obj/item/psychic_power/New(var/mob/living/_owner) - owner = _owner - if(!istype(owner)) - qdel(src) - return - START_PROCESSING(SSprocessing, src) - ..() - -/obj/item/psychic_power/Destroy() - if(istype(owner) && owner.psi) - LAZYREMOVE(owner.psi.manifested_items, src) - UNSETEMPTY(owner.psi.manifested_items) - STOP_PROCESSING(SSprocessing, src) - . = ..() - -/obj/item/psychic_power/get_storage_cost() - return ITEM_SIZE_NO_CONTAINER - -/obj/item/psychic_power/attack_self(var/mob/user) - sound_to(owner, 'sound/effects/psi/power_fail.ogg') - user.drop_from_inventory(src) - -/obj/item/psychic_power/attack(var/mob/living/M, var/mob/living/user, var/target_zone) - if(M.do_psionics_check(max(force, maintain_cost), user)) - to_chat(user, "\The [src] flickers violently out of phase!") - return 1 - . = ..() - -/obj/item/psychic_power/afterattack(var/atom/target, var/mob/living/user, var/proximity) - if(target.do_psionics_check(max(force, maintain_cost), user)) - to_chat(user, "\The [src] flickers violently out of phase!") - return - . = ..(target, user, proximity) - -/obj/item/psychic_power/dropped() - ..() - qdel(src) - -/obj/item/psychic_power/Process() - if(istype(owner)) - owner.psi.spend_power(maintain_cost) - if(!owner || owner.do_psionics_check(maintain_cost, owner) || loc != owner || (owner.l_hand != src && owner.r_hand != src)) - if(istype(loc,/mob/living)) - var/mob/living/carbon/human/host = loc - if(istype(host)) - for(var/obj/item/organ/external/organ in host.organs) - for(var/obj/item/O in organ.implants) - if(O == src) - organ.implants -= src - host.pinned -= src - host.embedded -= src - host.drop_from_inventory(src) - else - STOP_PROCESSING(SSprocessing, src) diff --git a/code/modules/psionics/equipment/psipower_blade.dm b/code/modules/psionics/equipment/psipower_blade.dm deleted file mode 100644 index 6ef449070e75a..0000000000000 --- a/code/modules/psionics/equipment/psipower_blade.dm +++ /dev/null @@ -1,21 +0,0 @@ -/obj/item/psychic_power/psiblade - name = "psychokinetic slash" - force = 10 - sharp = TRUE - edge = TRUE - maintain_cost = 1 - icon_state = "psiblade_short" - -/obj/item/psychic_power/psiblade/master - force = 20 - maintain_cost = 2 - -/obj/item/psychic_power/psiblade/master/grand - force = 30 - maintain_cost = 3 - icon_state = "psiblade_long" - -/obj/item/psychic_power/psiblade/master/grand/paramount // Silly typechecks because rewriting old interaction code is outside of scope. - force = 50 - maintain_cost = 4 - icon_state = "psiblade_long" diff --git a/code/modules/psionics/equipment/psipower_tinker.dm b/code/modules/psionics/equipment/psipower_tinker.dm deleted file mode 100644 index f749f02491745..0000000000000 --- a/code/modules/psionics/equipment/psipower_tinker.dm +++ /dev/null @@ -1,39 +0,0 @@ -/obj/item/psychic_power/tinker - name = "psychokinetic crowbar" - icon_state = "tinker" - force = 1 - var/emulating = "Crowbar" - -/obj/item/psychic_power/tinker/IsCrowbar() - return emulating == "Crowbar" - -/obj/item/psychic_power/tinker/IsWrench() - return emulating == "Wrench" - -/obj/item/psychic_power/tinker/IsScrewdriver() - return emulating == "Screwdriver" - -/obj/item/psychic_power/tinker/IsWirecutter() - return emulating == "Wirecutters" - -/obj/item/psychic_power/tinker/attack_self() - - if(!owner || loc != owner) - return - - var/choice = input("Select a tool to emulate.","Power") as null|anything in list("Crowbar","Wrench","Screwdriver","Wirecutters","Dismiss") - if(!choice) - return - - if(!owner || loc != owner) - return - - if(choice == "Dismiss") - sound_to(owner, 'sound/effects/psi/power_fail.ogg') - owner.drop_from_inventory(src) - return - - emulating = choice - name = "psychokinetic [lowertext(emulating)]" - to_chat(owner, "You begin emulating \a [lowertext(emulating)].") - sound_to(owner, 'sound/effects/psi/power_fabrication.ogg') diff --git a/code/modules/psionics/equipment/psipower_tk.dm b/code/modules/psionics/equipment/psipower_tk.dm deleted file mode 100644 index f2b342bf515d4..0000000000000 --- a/code/modules/psionics/equipment/psipower_tk.dm +++ /dev/null @@ -1,106 +0,0 @@ -/obj/item/psychic_power/telekinesis - name = "telekinetic grip" - maintain_cost = 6 - icon_state = "telekinesis" - var/atom/movable/focus - -/obj/item/psychic_power/telekinesis/Destroy() - focus = null - . = ..() - -/obj/item/psychic_power/telekinesis/Process() - if(!focus || !istype(focus.loc, /turf) || get_dist(get_turf(focus), get_turf(owner)) > owner.psi.get_rank(PSI_PSYCHOKINESIS)) - owner.drop_from_inventory(src) - return - . = ..() - -/obj/item/psychic_power/telekinesis/proc/set_focus(var/atom/movable/_focus) - - if(!_focus.simulated || !istype(_focus.loc, /turf)) - return FALSE - - var/check_paramount - if(ismob(_focus)) - var/mob/victim = _focus - check_paramount = (victim.mob_size >= MOB_MEDIUM) - else if(isobj(_focus)) - var/obj/thing = _focus - check_paramount = (thing.w_class >= 5) - else - return FALSE - - if(_focus.anchored || (check_paramount && owner.psi.get_rank(PSI_PSYCHOKINESIS) < PSI_RANK_PARAMOUNT)) - focus = _focus - . = attack_self(owner) - if(!.) - to_chat(owner, SPAN_WARNING("\The [_focus] is too hefty for you to get a mind-grip on.")) - qdel(src) - return FALSE - - focus = _focus - overlays.Cut() - var/image/I = image(icon = focus.icon, icon_state = focus.icon_state) - I.color = focus.color - I.overlays = focus.overlays - overlays += I - return TRUE - -/obj/item/psychic_power/telekinesis/attack_self(var/mob/user) - user.visible_message(SPAN_NOTICE("\The [user] makes a strange gesture.")) - sparkle() - return focus.do_simple_ranged_interaction(user) - -/obj/item/psychic_power/telekinesis/afterattack(var/atom/target, var/mob/living/user, var/proximity) - - if(!target || !user || (isobj(target) && !isturf(target.loc)) || !user.psi || !user.psi.can_use() || !user.psi.spend_power(8)) - return - - user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN * 2) - user.psi.set_cooldown(8) - - var/user_psi_leech = user.do_psionics_check(5, user) - if(user_psi_leech) - to_chat(user, SPAN_WARNING("You reach for \the [target] but your telekinetic power is leeched away by \the [user_psi_leech]...")) - return - - if(target.do_psionics_check(5, user)) - to_chat(user, SPAN_WARNING("Your telekinetic power skates over \the [target] but cannot get a grip...")) - return - - var/distance = get_dist(get_turf(user), get_turf(focus ? focus : target)) - if(distance > user.psi.get_rank(PSI_PSYCHOKINESIS)) - to_chat(user, SPAN_WARNING("Your telekinetic power won't reach that far.")) - return FALSE - - if(target == focus) - attack_self(user) - else - user.visible_message(SPAN_DANGER("\The [user] gestures sharply!")) - sparkle() - if(!istype(target, /turf) && istype(focus,/obj/item) && target.Adjacent(focus)) - var/obj/item/I = focus - var/resolved = target.attackby(I, user, user:get_organ_target()) - if(!resolved && target && I) - I.afterattack(target,user,1) // for splashing with beakers - else - if(!focus.anchored) - var/user_rank = owner.psi.get_rank(PSI_PSYCHOKINESIS) - focus.throw_at(target, user_rank*2, user_rank*3, owner) - sleep(1) - sparkle() - owner.drop_from_inventory(src) - -/obj/item/psychic_power/telekinesis/proc/sparkle() - set waitfor = 0 - if(focus) - var/obj/effect/overlay/O = new /obj/effect/overlay(get_turf(focus)) - O.name = "sparkles" - O.anchored = TRUE - O.density = FALSE - O.layer = FLY_LAYER - O.set_dir(pick(GLOB.cardinal)) - O.icon = 'icons/effects/effects.dmi' - O.icon_state = "nothing" - flick("empdisable",O) - sleep(5) - qdel(O) diff --git a/code/modules/psionics/events/_psi.dm b/code/modules/psionics/events/_psi.dm deleted file mode 100644 index 90c0f63733eca..0000000000000 --- a/code/modules/psionics/events/_psi.dm +++ /dev/null @@ -1,24 +0,0 @@ -/datum/event/psi - startWhen = 30 - endWhen = 120 - -/datum/event/psi/announce() - priority_announcement.Announce( \ - "A localized disruption within the neighboring psionic continua has been detected. All psi-operant crewmembers \ - are advised to cease any sensitive activities and report to medical personnel in case of damage.", \ - "Cuchulain Sensor Array Automated Message" \ - ) - -/datum/event/psi/end() - priority_announcement.Announce( \ - "The psi-disturbance has ended and baseline normality has been re-asserted. \ - Anything you still can't cope with is therefore your own problem.", \ - "Cuchulain Sensor Array Automated Message" \ - ) - -/datum/event/psi/tick() - for(var/thing in SSpsi.processing) - apply_psi_effect(thing) - -/datum/event/psi/proc/apply_psi_effect(var/datum/psi_complexus/psi) - return diff --git a/code/modules/psionics/events/mini_spasm.dm b/code/modules/psionics/events/mini_spasm.dm deleted file mode 100644 index 157bfd2971946..0000000000000 --- a/code/modules/psionics/events/mini_spasm.dm +++ /dev/null @@ -1,67 +0,0 @@ -/datum/event/minispasm - startWhen = 60 - endWhen = 90 - var/static/list/psi_operancy_messages = list( - "There's something in your skull!", - "Something is eating your thoughts!", - "You can feel your brain being rewritten!", - "Something is crawling over your frontal lobe!", - "THE SIGNAL THE SIGNAL THE SIGNAL THE SIGNAL THE" - ) - -/datum/event/minispasm/announce() - priority_announcement.Announce( \ - "PRIORITY ALERT: SIGMA-[rand(50,80)] PSIONIC SIGNAL LOCAL TRAMISSION DETECTED (97% MATCH, NONVARIANT) \ - (SIGNAL SOURCE TRIANGULATED ADJACENT LOCAL SITE): All personnel are advised to avoid \ - exposure to active audio transmission equipment including radio headsets and intercoms \ - for the duration of the signal broadcast.", \ - "Cuchulain Sensor Array Automated Message" \ - ) - -/datum/event/minispasm/start() - var/list/victims = list() - for(var/obj/item/device/radio/radio in GLOB.listening_objects) - if(radio.on) - for(var/mob/living/victim in range(radio.canhear_range, radio.loc)) - if(isnull(victims[victim]) && victim.stat == CONSCIOUS && !victim.ear_deaf) - victims[victim] = radio - for(var/thing in victims) - var/mob/living/victim = thing - var/obj/item/device/radio/source = victims[victim] - do_spasm(victim, source) - -/datum/event/minispasm/proc/do_spasm(var/mob/living/victim, var/obj/item/device/radio/source) - set waitfor = 0 - - if(iscarbon(victim) && !victim.isSynthetic()) - var/list/disabilities = list(NEARSIGHTED, EPILEPSY, NERVOUS) - for(var/disability in disabilities) - if(victim.disabilities & disability) - disabilities -= disability - if(disabilities.len) - victim.disabilities |= pick(disabilities) - - if(victim.psi) - to_chat(victim, SPAN_DANGER("A hauntingly familiar sound hisses from [icon2html(source, victim)] \the [source], and your vision flickers!")) - victim.psi.backblast(rand(5,15)) - victim.Paralyse(5) - victim.make_jittery(100) - else - to_chat(victim, SPAN_DANGER("An indescribable, brain-tearing sound hisses from [icon2html(source, victim)] \the [source], and you collapse in a seizure!")) - victim.seizure() - var/new_latencies = rand(2,4) - var/list/faculties = list(PSI_COERCION, PSI_REDACTION, PSI_ENERGISTICS, PSI_PSYCHOKINESIS) - for(var/i = 1 to new_latencies) - to_chat(victim, SPAN_DANGER("[pick(psi_operancy_messages)]")) - victim.adjustBrainLoss(rand(10,20)) - victim.set_psi_rank(pick_n_take(faculties), 1) - sleep(30) - victim.psi.update() - sleep(45) - victim.psi.check_latency_trigger(100, "a psionic scream", redactive = TRUE) - -/datum/event/minispasm/end() - priority_announcement.Announce( \ - "PRIORITY ALERT: SIGNAL BROADCAST HAS CEASED. Personnel are cleared to resume use of non-hardened radio transmission equipment. Have a nice day.", \ - "Cuchulain Sensor Array Automated Message" \ - ) diff --git a/code/modules/psionics/events/psi_balm.dm b/code/modules/psionics/events/psi_balm.dm deleted file mode 100644 index 39032bb97ff2a..0000000000000 --- a/code/modules/psionics/events/psi_balm.dm +++ /dev/null @@ -1,20 +0,0 @@ -/datum/event/psi/balm - var/static/list/balm_messages = list( - "A soothing balm washes over your psyche.", - "For a moment, you can hear a distant, familiar voice singing a quiet lullaby.", - "A sense of peace and comfort falls over you like a warm blanket." - ) - -/datum/event/psi/balm/apply_psi_effect(var/datum/psi_complexus/psi) - var/soothed - if(psi.stun > 1) - psi.stun-- - soothed = TRUE - else if(psi.stamina < psi.max_stamina) - psi.stamina = min(psi.max_stamina, psi.stamina + rand(1,3)) - soothed = TRUE - else if(psi.owner.getBrainLoss() > 0) - psi.owner.adjustBrainLoss(-1) - soothed = TRUE - if(soothed && prob(10)) - to_chat(psi.owner, SPAN_NOTICE("[pick(balm_messages)]")) diff --git a/code/modules/psionics/events/psi_wail.dm b/code/modules/psionics/events/psi_wail.dm deleted file mode 100644 index 7951dc9a228f0..0000000000000 --- a/code/modules/psionics/events/psi_wail.dm +++ /dev/null @@ -1,17 +0,0 @@ -/datum/event/psi/wail - var/static/list/whine_messages = list( - "A nerve-tearing psychic whine intrudes on your thoughts.", - "A horrible, distracting humming sound breaks your train of thought.", - "Your head aches as a psychic wail intrudes on your psyche." - ) - -/datum/event/psi/wail/apply_psi_effect(var/datum/psi_complexus/psi) - var/annoyed - if(prob(1)) - psi.stunned(1) - annoyed = TRUE - else if(psi.stamina > 0) - psi.stamina = max(0, psi.stamina - rand(1,3)) - annoyed = TRUE - if(annoyed && prob(1)) - to_chat(psi.owner, "[pick(whine_messages)]") diff --git a/code/modules/psionics/faculties/_faculty.dm b/code/modules/psionics/faculties/_faculty.dm deleted file mode 100644 index 83bee78ef9a2d..0000000000000 --- a/code/modules/psionics/faculties/_faculty.dm +++ /dev/null @@ -1,11 +0,0 @@ -/decl/psionic_faculty - var/id - var/name - var/associated_intent - var/list/armour_types = list() - var/list/powers = list() - -/decl/psionic_faculty/New() - ..() - for(var/atype in armour_types) - SSpsi.armour_faculty_by_type[atype] = id diff --git a/code/modules/psionics/faculties/_power.dm b/code/modules/psionics/faculties/_power.dm deleted file mode 100644 index b2e74b421c3ea..0000000000000 --- a/code/modules/psionics/faculties/_power.dm +++ /dev/null @@ -1,50 +0,0 @@ -/decl/psionic_power - abstract_type = /decl/psionic_power - var/name // Name. If null, psipower won't be generated on roundstart. - var/faculty // Associated psi faculty. - var/min_rank // Minimum psi rank to use this power. - var/cost // Base psi stamina cost for using this power. - var/cooldown // Deciseconds cooldown after using this power. - var/admin_log = TRUE // Whether or not using this power prints an admin attack log. - var/use_ranged // This power functions from a distance. - var/use_melee // This power functions at melee range. - var/use_grab // This power has a variant invoked via grab. - var/use_manifest // This power manifests an item in the user's hands. - var/use_description // A short description of how to use this power, shown via assay. - // A sound effect to play when the power is used. - var/use_sound = 'sound/effects/psi/power_used.ogg' - // by RuBay Hacso - var/suppress_parent_proc = FALSE - - -/decl/psionic_power/proc/invoke(var/mob/living/user, var/atom/target) - - if(!user.psi) - return FALSE - - if(faculty && min_rank) - var/user_rank = user.psi.get_rank(faculty) - if(user_rank < min_rank) - return FALSE - - if(!cost) - return FALSE - - var/user_psi_leech = user.do_psionics_check(cost, user) - if(user_psi_leech) - to_chat(user, SPAN_WARNING("Your power is leeched away by \the [user_psi_leech] as fast as you can focus it...")) - return FALSE - - if(target.do_psionics_check(cost, user)) - to_chat(user, SPAN_WARNING("Your power skates across \the [target], but cannot get a grip...")) - return FALSE - - return TRUE - -/decl/psionic_power/proc/handle_post_power(var/mob/living/user, var/atom/target) - if(cooldown) - user.psi.set_cooldown(cooldown) - if(admin_log && ismob(user) && ismob(target)) - admin_attack_log(user, target, "Used psipower ([name])", "Was subjected to a psipower ([name])", "used a psipower ([name]) on") - if(use_sound) - playsound(user.loc, use_sound, 75) diff --git a/code/modules/psionics/faculties/coercion.dm b/code/modules/psionics/faculties/coercion.dm deleted file mode 100644 index febed8e005a1c..0000000000000 --- a/code/modules/psionics/faculties/coercion.dm +++ /dev/null @@ -1,229 +0,0 @@ -/decl/psionic_faculty/coercion - id = PSI_COERCION - name = "Coercion" - associated_intent = I_DISARM - armour_types = list(DAMAGE_PSIONIC) - -/decl/psionic_power/coercion - faculty = PSI_COERCION - abstract_type = /decl/psionic_power/coercion - -/decl/psionic_power/coercion/invoke(var/mob/living/user, var/mob/living/target) - if (!istype(target)) - to_chat(user, SPAN_WARNING("You cannot mentally attack \the [target].")) - return FALSE - - . = ..() - if(. && target.deflect_psionic_attack(user)) - return FALSE - -/decl/psionic_power/coercion/blindstrike - name = "Blindstrike" - cost = 8 - cooldown = 120 - use_ranged = TRUE - use_melee = TRUE - min_rank = PSI_RANK_GRANDMASTER - use_description = "Target the eyes or mouth on disarm intent and click anywhere to use a radial attack that blinds, deafens and disorients everyone near you." - -/decl/psionic_power/coercion/blindstrike/invoke(var/mob/living/user, var/mob/living/target) - if(user.zone_sel.selecting != BP_MOUTH && user.zone_sel.selecting != BP_EYES) - return FALSE - . = ..() - if(.) - user.visible_message(SPAN_DANGER("\The [user] suddenly throws back their head, as though screaming silently!")) - to_chat(user, SPAN_DANGER("You strike at all around you with a deafening psionic scream!")) - for(var/mob/living/M in orange(user, user.psi.get_rank(PSI_COERCION))) - if(M == user) - continue - var/blocked = 100 * M.get_blocked_ratio(null, DAMAGE_PSIONIC) - if(prob(blocked)) - to_chat(M, SPAN_DANGER("A psionic onslaught strikes your mind, but you withstand it!")) - continue - if(prob(60) && iscarbon(M)) - var/mob/living/carbon/C = M - if(C.can_feel_pain()) - M.emote("scream") - to_chat(M, SPAN_DANGER("Your senses are blasted into oblivion by a psionic scream!")) - M.flash_eyes() - M.eye_blind = max(M.eye_blind,3) - M.ear_deaf = max(M.ear_deaf,6) - M.confused = rand(3,8) - return TRUE - -/decl/psionic_power/coercion/mindread - name = "Read Mind" - cost = 6 - cooldown = 80 - use_melee = TRUE - min_rank = PSI_RANK_OPERANT - suppress_parent_proc = TRUE - use_description = "Target the head on disarm intent at melee range to attempt to read a victim's surface thoughts." - -/decl/psionic_power/coercion/mindread/invoke(var/mob/living/user, var/mob/living/target) - if(!isliving(target) || !istype(target) || user.zone_sel.selecting != BP_HEAD) - return FALSE - . = ..() - if(!.) - return - - if(target.stat == DEAD || (target.status_flags & FAKEDEATH) || !target.client) - to_chat(user, SPAN_WARNING("\The [target] is in no state for a mind-ream.")) - return FALSE - - user.visible_message(SPAN_WARNING("\The [user] touches \the [target]'s temple...")) - var/question = input(user, "Say something?", "Read Mind", "Penny for your thoughts?") as null|text - if(!question || user.incapacitated() || !do_after(user, 20)) - return FALSE - - var/started_mindread = world.time - to_chat(user, SPAN_NOTICE("You dip your mentality into the surface layer of \the [target]'s mind, seeking an answer: [question]")) - to_chat(target, SPAN_NOTICE("Your mind is compelled to answer: [question]")) - - var/answer = input(target, question, "Read Mind") as null|text - if(!answer || world.time > started_mindread + 60 SECONDS || user.stat != CONSCIOUS || target.stat == DEAD) - to_chat(user, SPAN_NOTICE("You receive nothing useful from \the [target].")) - else - to_chat(user, SPAN_NOTICE("You skim thoughts from the surface of \the [target]'s mind: [answer]")) - msg_admin_attack("[key_name(user)] read mind of [key_name(target)] with question \"[question]\" and [answer?"got answer \"[answer]\".":"got no answer."]") - return TRUE - -/decl/psionic_power/coercion/agony - name = "Agony" - cost = 8 - cooldown = 50 - use_melee = TRUE - min_rank = PSI_RANK_MASTER - use_description = "Target the chest or groin on disarm intent to use a melee attack equivalent to a strike from a stun baton." - -/decl/psionic_power/coercion/agony/invoke(var/mob/living/user, var/mob/living/target) - if(!istype(target)) - return FALSE - if(user.zone_sel.selecting != BP_CHEST && user.zone_sel.selecting != BP_GROIN) - return FALSE - . = ..() - if(.) - user.visible_message("\The [target] has been struck by \the [user]!") - playsound(user.loc, 'sound/weapons/Egloves.ogg', 50, 1, -1) - target.stun_effect_act(0, 60, user.zone_sel.selecting) - return TRUE - -/decl/psionic_power/coercion/spasm - name = "Spasm" - cost = 15 - cooldown = 100 - use_melee = TRUE - use_ranged = TRUE - min_rank = PSI_RANK_MASTER - use_description = "Target the arms or hands on disarm intent to use a ranged attack that may rip the weapons away from the target." - -/decl/psionic_power/coercion/spasm/invoke(var/mob/living/user, var/mob/living/carbon/human/target) - if(!istype(target)) - return FALSE - - if(!(user.zone_sel.selecting in list(BP_L_ARM, BP_R_ARM, BP_L_HAND, BP_R_HAND))) - return FALSE - - . = ..() - - if(.) - to_chat(user, "You lash out, stabbing into \the [target] with a lance of psi-power.") - to_chat(target, "The muscles in your arms cramp horrendously!") - if(prob(75)) - target.emote("scream") - if(prob(75) && target.l_hand && target.l_hand.simulated && target.unEquip(target.l_hand)) - target.visible_message("\The [target] drops what they were holding as their left hand spasms!") - if(prob(75) && target.r_hand && target.r_hand.simulated && target.unEquip(target.r_hand)) - target.visible_message("\The [target] drops what they were holding as their right hand spasms!") - return TRUE - -/decl/psionic_power/coercion/mindslave - name = "Mindslave" - cost = 28 - cooldown = 200 - use_grab = TRUE - min_rank = PSI_RANK_PARAMOUNT - suppress_parent_proc = TRUE - use_description = "Grab a victim, target the eyes, then use the grab on them while on disarm intent, in order to convert them into a loyal mind-slave. The process takes some time, and failure is punished harshly." - -/decl/psionic_power/coercion/mindslave/invoke(var/mob/living/user, var/mob/living/target) - if(!istype(target) || user.zone_sel.selecting != BP_EYES) - return FALSE - . = ..() - if(.) - if(target.stat == DEAD || (target.status_flags & FAKEDEATH)) - to_chat(user, "\The [target] is dead!") - return FALSE - if(!target.mind || !target.key) - to_chat(user, "\The [target] is mindless!") - return FALSE - if(GLOB.thralls.is_antagonist(target.mind)) - to_chat(user, "\The [target] is already in thrall to someone!") - return FALSE - user.visible_message("\The [user] seizes the head of \the [target] in both hands...") - to_chat(user, "You plunge your mentality into that of \the [target]...") - to_chat(target, "Your mind is invaded by the presence of \the [user]! They are trying to make you a slave!") - if(!do_after(user, (target.stat == CONSCIOUS ? 8 : 4) SECONDS, target, DO_DEFAULT | DO_USER_UNIQUE_ACT)) - user.psi.backblast(rand(10,25)) - return TRUE - to_chat(user, "You sear through \the [target]'s neurons, reshaping as you see fit and leaving them subservient to your will!") - to_chat(target, "Your defenses have eroded away and \the [user] has made you their mindslave.") - GLOB.thralls.add_antagonist(target.mind, new_controller = user) - return TRUE - -/decl/psionic_power/coercion/assay - name = "Assay" - cost = 15 - cooldown = 100 - use_grab = TRUE - min_rank = PSI_RANK_OPERANT - suppress_parent_proc = TRUE - use_description = "Grab a patient, target the head, then use the grab on them while on disarm intent, in order to perform a deep coercive-redactive probe of their psionic potential." - -/decl/psionic_power/coercion/assay/invoke(var/mob/living/user, var/mob/living/target) - if(user.zone_sel.selecting != BP_HEAD) - return FALSE - . = ..() - if(.) - user.visible_message(SPAN_WARNING("\The [user] holds the head of \the [target] in both hands...")) - to_chat(user, SPAN_NOTICE("You insinuate your mentality into that of \the [target]...")) - to_chat(target, SPAN_WARNING("Your persona is being probed by the psychic lens of \the [user].")) - if(!do_after(user, (target.stat == CONSCIOUS ? 5 : 2.5) SECONDS, target, DO_DEFAULT | DO_USER_UNIQUE_ACT)) - user.psi.backblast(rand(5,10)) - return TRUE - to_chat(user, SPAN_NOTICE("You retreat from \the [target], holding your new knowledge close.")) - to_chat(target, SPAN_DANGER("Your mental complexus is laid bare to judgement of \the [user].")) - target.show_psi_assay(user) - return TRUE - -/decl/psionic_power/coercion/focus - name = "Focus" - cost = 10 - cooldown = 80 - use_grab = TRUE - min_rank = PSI_RANK_OPERANT - suppress_parent_proc = TRUE - use_description = "Grab a patient, target the mouth, then use the grab on them while on disarm intent, in order to cure ailments of the mind." - -/decl/psionic_power/coercion/focus/invoke(var/mob/living/user, var/mob/living/target) - if(user.zone_sel.selecting != BP_MOUTH) - return FALSE - . = ..() - if(.) - user.visible_message(SPAN_WARNING("\The [user] holds the head of \the [target] in both hands...")) - to_chat(user, SPAN_NOTICE("You probe \the [target]'s mind for various ailments..")) - to_chat(target, SPAN_WARNING("Your mind is being cleansed of ailments by \the [user].")) - if(!do_after(user, (target.stat == CONSCIOUS ? 5 : 2.5) SECONDS, target, DO_DEFAULT | DO_USER_UNIQUE_ACT)) - user.psi.backblast(rand(5,10)) - return TRUE - to_chat(user, SPAN_WARNING("You clear \the [target]'s mind of ailments.")) - to_chat(target, SPAN_WARNING("Your mind is cleared of ailments.")) - - var/coercion_rank = user.psi.get_rank(PSI_COERCION) - if(coercion_rank >= PSI_RANK_GRANDMASTER) - target.AdjustParalysis(-1) - target.drowsyness = 0 - if(istype(target, /mob/living/carbon)) - var/mob/living/carbon/M = target - M.adjust_hallucination(-30) - return TRUE diff --git a/code/modules/psionics/faculties/energistics.dm b/code/modules/psionics/faculties/energistics.dm deleted file mode 100644 index 10edbebe1454c..0000000000000 --- a/code/modules/psionics/faculties/energistics.dm +++ /dev/null @@ -1,115 +0,0 @@ -/decl/psionic_faculty/energistics - id = PSI_ENERGISTICS - name = "Energistics" - associated_intent = I_HURT - armour_types = list("bomb", "laser", "energy") - -/decl/psionic_power/energistics - faculty = PSI_ENERGISTICS - abstract_type = /decl/psionic_power/energistics - -/decl/psionic_power/energistics/disrupt - name = "Disrupt" - cost = 10 - cooldown = 100 - use_melee = TRUE - min_rank = PSI_RANK_MASTER - use_description = "Target the head, eyes or mouth while on harm intent to use a melee attack that causes a localized electromagnetic pulse." - -/decl/psionic_power/energistics/disrupt/invoke(var/mob/living/user, var/mob/living/target) - if(user.zone_sel.selecting != BP_HEAD && user.zone_sel.selecting != BP_EYES && user.zone_sel.selecting != BP_MOUTH) - return FALSE - if(istype(target, /turf)) - return FALSE - . = ..() - if(.) - user.visible_message("\The [user] releases a gout of crackling static and arcing lightning over \the [target]!") - empulse(target, 0, 1) - return TRUE - -/decl/psionic_power/energistics/electrocute - name = "Electrocute" - cost = 15 - cooldown = 25 - use_melee = TRUE - min_rank = PSI_RANK_GRANDMASTER - use_description = "Target the chest or groin while on harm intent to use a melee attack that electrocutes a victim." - -/decl/psionic_power/energistics/electrocute/invoke(var/mob/living/user, var/mob/living/target) - if(user.zone_sel.selecting != BP_CHEST && user.zone_sel.selecting != BP_GROIN) - return FALSE - if(istype(target, /turf)) - return FALSE - . = ..() - if(.) - user.visible_message("\The [user] sends a jolt of electricity arcing into \the [target]!") - if(istype(target)) - target.electrocute_act(rand(15,45), user, 1, user.zone_sel.selecting) - return TRUE - else if(isatom(target)) - var/obj/item/cell/charging_cell = target.get_cell() - if(istype(charging_cell)) - charging_cell.give(rand(15,45)) - return TRUE - -/decl/psionic_power/energistics/zorch - name = "Zorch" - cost = 20 - cooldown = 20 - use_ranged = TRUE - min_rank = PSI_RANK_MASTER - use_description = "Use this ranged laser attack while on harm intent. Your mastery of Energistics will determine how powerful the laser is. Be wary of overuse, and try not to fry your own brain." - -/decl/psionic_power/energistics/zorch/invoke(var/mob/living/user, var/mob/living/target) - . = ..() - if(.) - user.visible_message("\The [user]'s eyes flare with light!") - - var/user_rank = user.psi.get_rank(faculty) - var/obj/item/projectile/pew - var/pew_sound - - switch(user_rank) - if(PSI_RANK_PARAMOUNT) - pew = new /obj/item/projectile/beam/heavylaser(get_turf(user)) - pew.name = "gigawatt mental laser" - pew_sound = 'sound/weapons/lasercannonfire.ogg' - if(PSI_RANK_GRANDMASTER) - pew = new /obj/item/projectile/beam/midlaser(get_turf(user)) - pew.name = "megawatt mental laser" - pew_sound = 'sound/weapons/Laser.ogg' - if(PSI_RANK_MASTER) - pew = new /obj/item/projectile/beam/stun(get_turf(user)) - pew.name = "mental laser" - pew_sound = 'sound/weapons/Taser.ogg' - - if(istype(pew)) - playsound(pew.loc, pew_sound, 25, 1) - pew.original = target - pew.current = target - pew.starting = get_turf(user) - pew.shot_from = user - pew.launch(target, user.zone_sel.selecting, (target.x-user.x), (target.y-user.y)) - return TRUE - -/decl/psionic_power/energistics/spark - name = "Spark" - cost = 1 - cooldown = 1 - use_melee = TRUE - min_rank = PSI_RANK_OPERANT - use_description = "Target a non-living target in melee range on harm intent to cause some sparks to appear. This can light fires." - -/decl/psionic_power/energistics/spark/invoke(var/mob/living/user, var/mob/living/target) - if(isnull(target) || istype(target)) return FALSE - . = ..() - if(.) - if(istype(target,/obj/item/clothing/mask/smokable/cigarette)) - var/obj/item/clothing/mask/smokable/cigarette/S = target - S.light("[user] snaps \his fingers and \the [S.name] lights up.") - playsound(S.loc, "sparks", 50, 1) - else - var/datum/effect/effect/system/spark_spread/sparks = new () - sparks.set_up(3, 0, get_turf(target)) - sparks.start() - return TRUE diff --git a/code/modules/psionics/faculties/psychokinesis.dm b/code/modules/psionics/faculties/psychokinesis.dm deleted file mode 100644 index 089dce5bc340a..0000000000000 --- a/code/modules/psionics/faculties/psychokinesis.dm +++ /dev/null @@ -1,93 +0,0 @@ -/decl/psionic_faculty/psychokinesis - id = PSI_PSYCHOKINESIS - name = "Psychokinesis" - associated_intent = I_GRAB - armour_types = list("melee", "bullet") - -/decl/psionic_power/psychokinesis - faculty = PSI_PSYCHOKINESIS - use_manifest = TRUE - use_sound = null - abstract_type = /decl/psionic_power/psychokinesis - -/decl/psionic_power/psychokinesis/psiblade - name = "Psiblade" - cost = 10 - cooldown = 30 - min_rank = PSI_RANK_OPERANT - use_description = "Click on or otherwise activate an empty hand while on harm intent to manifest a psychokinetic cutting blade. The power the blade will vary based on your mastery of the faculty." - admin_log = FALSE - -/decl/psionic_power/psychokinesis/psiblade/invoke(var/mob/living/user, var/mob/living/target) - if((target && user != target) || user.a_intent != I_HURT) - return FALSE - . = ..() - if(.) - switch(user.psi.get_rank(faculty)) - if(PSI_RANK_PARAMOUNT) - return new /obj/item/psychic_power/psiblade/master/grand/paramount(user, user) - if(PSI_RANK_GRANDMASTER) - return new /obj/item/psychic_power/psiblade/master/grand(user, user) - if(PSI_RANK_MASTER) - return new /obj/item/psychic_power/psiblade/master(user, user) - else - return new /obj/item/psychic_power/psiblade(user, user) - -/decl/psionic_power/psychokinesis/tinker - name = "Tinker" - cost = 5 - cooldown = 10 - min_rank = PSI_RANK_MASTER - use_description = "Click on or otherwise activate an empty hand while on help intent to manifest a psychokinetic tool. Use it in-hand to switch between tool types." - admin_log = FALSE - -/decl/psionic_power/psychokinesis/tinker/invoke(var/mob/living/user, var/mob/living/target) - if((target && user != target) || user.a_intent != I_HELP) - return FALSE - . = ..() - if(.) - return new /obj/item/psychic_power/tinker(user) - -/decl/psionic_power/psychokinesis/telekinesis - name = "Telekinesis" - cost = 5 - cooldown = 10 - use_ranged = TRUE - use_manifest = FALSE - min_rank = PSI_RANK_GRANDMASTER - use_description = "Click on a distant target while on grab intent to manifest a psychokinetic grip. Use it manipulate objects at a distance." - admin_log = FALSE - use_sound = 'sound/effects/psi/power_used.ogg' - var/static/list/valid_machine_types = list( - /obj/machinery/door - ) - -/decl/psionic_power/psychokinesis/telekinesis/invoke(var/mob/living/user, var/mob/living/target) - if(user.a_intent != I_GRAB) - return FALSE - . = ..() - if(.) - - var/distance = get_dist(user, target) - if(distance > user.psi.get_rank(PSI_PSYCHOKINESIS)) - to_chat(user, "Your telekinetic power won't reach that far.") - return FALSE - - if(istype(target, /obj/structure)) - user.visible_message("\The [user] makes a strange gesture.") - var/obj/O = target - O.attack_hand(user) - return TRUE - else if(istype(target, /obj/machinery)) - for(var/mtype in valid_machine_types) - if(istype(target, mtype)) - var/obj/machinery/machine = target - return machine.do_simple_ranged_interaction(user) - else if(istype(target, /mob) || istype(target, /obj)) - var/obj/item/psychic_power/telekinesis/tk = new(user) - if(tk.set_focus(target)) - tk.sparkle() - user.visible_message("\The [user] reaches out.") - return tk - - return FALSE diff --git a/code/modules/psionics/faculties/redaction.dm b/code/modules/psionics/faculties/redaction.dm deleted file mode 100644 index c04749be11716..0000000000000 --- a/code/modules/psionics/faculties/redaction.dm +++ /dev/null @@ -1,198 +0,0 @@ -/decl/psionic_faculty/redaction - id = PSI_REDACTION - name = "Redaction" - associated_intent = I_HELP - armour_types = list("bio", "rad") - -/decl/psionic_power/redaction - faculty = PSI_REDACTION - admin_log = FALSE - -/decl/psionic_power/redaction/proc/check_dead(var/mob/living/target) - if(!istype(target)) - return FALSE - if(target.stat == DEAD || (target.status_flags & FAKEDEATH)) - return TRUE - return FALSE - -/decl/psionic_power/redaction/invoke(var/mob/living/user, var/mob/living/target) - if(check_dead(target)) - return FALSE - . = ..() - -/decl/psionic_power/redaction/skinsight - name = "Skinsight" - cost = 3 - cooldown = 30 - use_grab = TRUE - min_rank = PSI_RANK_OPERANT - suppress_parent_proc = TRUE - use_description = "Grab a patient, target the chest, then switch to help intent and use the grab on them to perform a check for wounds and damage." - -/decl/psionic_power/redaction/skinsight/invoke(var/mob/living/user, var/mob/living/target) - if(user.zone_sel.selecting != BP_CHEST) - return FALSE - . = ..() - if(.) - user.visible_message(SPAN_NOTICE("\The [user] rests a hand on \the [target].")) - to_chat(user, medical_scan_results(target, TRUE, SKILL_MAX)) - return TRUE - -/decl/psionic_power/redaction/mend - name = "Mend" - cost = 7 - cooldown = 50 - use_melee = TRUE - min_rank = PSI_RANK_OPERANT - suppress_parent_proc = TRUE - use_description = "Target a patient while on help intent at melee range to mend a variety of maladies, such as bleeding or broken bones. Higher ranks in this faculty allow you to mend a wider range of problems." - -/decl/psionic_power/redaction/mend/invoke(var/mob/living/user, var/mob/living/carbon/human/target) - if(!istype(user) || !istype(target)) - return FALSE - . = ..() - if(.) - var/obj/item/organ/external/E = target.get_organ(user.zone_sel.selecting) - - if(!E) - to_chat(user, SPAN_WARNING("They are missing that limb.")) - return FALSE - - if(BP_IS_ROBOTIC(E)) - to_chat(user, SPAN_WARNING("That limb is prosthetic.")) - return FALSE - - user.visible_message(SPAN_NOTICE("\The [user] rests a hand on \the [target]'s [E.name]...")) - to_chat(target, SPAN_NOTICE("A healing warmth suffuses you.")) - - var/redaction_rank = user.psi.get_rank(PSI_REDACTION) - var/pk_rank = user.psi.get_rank(PSI_PSYCHOKINESIS) - if(pk_rank >= PSI_RANK_LATENT && redaction_rank >= PSI_RANK_MASTER) - var/removal_size = clamp(5-pk_rank, 0, 5) - var/valid_objects = list() - for(var/thing in E.implants) - var/obj/imp = thing - - if(!imp) - continue - - if(imp.w_class >= removal_size && !istype(imp, /obj/item/implant)) - valid_objects += imp - if(LAZYLEN(valid_objects)) - var/removing = pick(valid_objects) - target.remove_implant(removing, TRUE) - to_chat(user, SPAN_NOTICE("You extend a tendril of psychokinetic-redactive power and carefully tease \the [removing] free of \the [E].")) - return TRUE - - if(redaction_rank >= PSI_RANK_MASTER) - if(E.status & ORGAN_ARTERY_CUT) - to_chat(user, SPAN_NOTICE("You painstakingly mend the torn veins in \the [E], stemming the internal bleeding.")) - E.status &= ~ORGAN_ARTERY_CUT - return TRUE - if(E.status & ORGAN_TENDON_CUT) - to_chat(user, SPAN_NOTICE("You interleave and repair the severed tendon in \the [E].")) - E.status &= ~ORGAN_TENDON_CUT - return TRUE - - if(E.is_stump()) - to_chat(user, SPAN_WARNING("There's nothing left to heal in this stump")) - return FALSE - - if(E.status & ORGAN_BROKEN) - to_chat(user, SPAN_NOTICE("You coax shattered bones to come together and fuse, mending the break.")) - E.status &= ~ORGAN_BROKEN - E.stage = 0 - return TRUE - - for(var/datum/wound/W in E.wounds) - if(W.bleeding()) - if(redaction_rank >= PSI_RANK_OPERANT || W.wound_damage() < 30) - to_chat(user, SPAN_NOTICE("You knit together severed veins and broken flesh, stemming the bleeding.")) - W.bleed_timer = 0 - W.clamped = TRUE - E.status &= ~ORGAN_BLEEDING - return TRUE - else - to_chat(user, SPAN_NOTICE("This [W.desc] is beyond your power to heal.")) - - if(redaction_rank >= PSI_RANK_GRANDMASTER) - for(var/obj/item/organ/internal/I in E.internal_organs) - if(!BP_IS_ROBOTIC(I) && !BP_IS_CRYSTAL(I) && I.damage > 0) - to_chat(user, SPAN_NOTICE("You encourage the damaged tissue of \the [I] to repair itself.")) - var/heal_rate = redaction_rank - I.damage = max(0, I.damage - rand(heal_rate,heal_rate*2)) - return TRUE - - to_chat(user, SPAN_NOTICE("You can find nothing within \the [target]'s [E.name] to mend.")) - return FALSE - -/decl/psionic_power/redaction/cleanse - name = "Cleanse" - cost = 9 - cooldown = 60 - use_melee = TRUE - min_rank = PSI_RANK_GRANDMASTER - suppress_parent_proc = TRUE - use_description = "Target a patient while on help intent at melee range to cleanse radiation and genetic damage from a patient." - -/decl/psionic_power/redaction/cleanse/invoke(var/mob/living/user, var/mob/living/carbon/human/target) - if(!istype(user) || !istype(target)) - return FALSE - . = ..() - if(.) - // No messages, as Mend procs them even if it fails to heal anything, and Cleanse is always checked after Mend. - var/removing = rand(20,25) - if(target.radiation) - to_chat(user, SPAN_NOTICE("You repair some of the radiation-damaged tissue within \the [target]...")) - if(target.radiation > removing) - target.radiation -= removing - else - target.radiation = 0 - return TRUE - if(target.getCloneLoss()) - to_chat(user, SPAN_NOTICE("You stitch together some of the mangled DNA within \the [target]...")) - if(target.getCloneLoss() >= removing) - target.adjustCloneLoss(-removing) - else - target.adjustCloneLoss(-(target.getCloneLoss())) - return TRUE - to_chat(user, SPAN_NOTICE("You can find no genetic damage or radiation to heal within \the [target].")) - return FALSE - -/decl/psionic_power/revive - name = "Revive" - cost = 25 - cooldown = 80 - use_grab = TRUE - min_rank = PSI_RANK_PARAMOUNT - faculty = PSI_REDACTION - use_description = "Obtain a grab on a dead target, target the head, then select help intent and use the grab against them to attempt to bring them back to life. The process is lengthy and failure is punished harshly." - admin_log = FALSE - -/decl/psionic_power/revive/invoke(var/mob/living/user, var/mob/living/target) - if(!isliving(target) || !istype(target) || user.zone_sel.selecting != BP_HEAD) - return FALSE - . = ..() - if(.) - if(target.stat != DEAD && !(target.status_flags & FAKEDEATH)) - to_chat(user, SPAN_WARNING("This person is already alive!")) - return TRUE - - if((world.time - target.timeofdeath) > 6000) - to_chat(user, SPAN_WARNING("\The [target] has been dead for too long to revive.")) - return TRUE - - user.visible_message(SPAN_NOTICE("\The [user] splays out their hands over \the [target]'s body...")) - if(!do_after(user, 10 SECONDS, target, DO_DEFAULT | DO_USER_UNIQUE_ACT)) - user.psi.backblast(rand(10,25)) - return TRUE - - for(var/mob/observer/G in GLOB.dead_mob_list_) - if(G.mind && G.mind.current == target && G.client) - to_chat(G, SPAN_NOTICE("Your body has been revived, Re-Enter Corpse to return to it.")) - break - to_chat(target, SPAN_NOTICE("Life floods back into your body!")) - target.visible_message(SPAN_NOTICE("\The [target] shudders violently!")) - target.adjustOxyLoss(-rand(15,20)) - target.basic_revival() - return TRUE diff --git a/code/modules/psionics/interface/ui.dm b/code/modules/psionics/interface/ui.dm deleted file mode 100644 index 298cea1969fd4..0000000000000 --- a/code/modules/psionics/interface/ui.dm +++ /dev/null @@ -1,20 +0,0 @@ -/obj/screen/psi - icon = 'icons/screen/psi.dmi' - var/mob/living/owner - var/hidden = TRUE - -/obj/screen/psi/New(var/mob/living/_owner) - loc = null - owner = _owner - update_icon() - -/obj/screen/psi/Destroy() - if(owner && owner.client) - owner.client.screen -= src - . = ..() - -/obj/screen/psi/on_update_icon() - if(hidden) - invisibility = 101 - else - invisibility = 0 \ No newline at end of file diff --git a/code/modules/psionics/interface/ui_hub.dm b/code/modules/psionics/interface/ui_hub.dm deleted file mode 100644 index 611b282473874..0000000000000 --- a/code/modules/psionics/interface/ui_hub.dm +++ /dev/null @@ -1,71 +0,0 @@ -/obj/screen/psi/hub - name = "Psi" - icon_state = "psi_suppressed" - screen_loc = "EAST-1:28,CENTER-3:11" - hidden = FALSE - maptext_x = 6 - maptext_y = -8 - var/image/on_cooldown - var/list/components - -/obj/screen/psi/hub/New(var/mob/living/_owner) - on_cooldown = image(icon, "cooldown") - components = list( - new /obj/screen/psi/armour(_owner), - new /obj/screen/psi/toggle_psi_menu(_owner, src) - ) - ..() - START_PROCESSING(SSprocessing, src) - -/obj/screen/psi/hub/on_update_icon() - - if(!owner.psi) - return - - icon_state = owner.psi.suppressed ? "psi_suppressed" : "psi_active" - if(world.time < owner.psi.next_power_use) - overlays |= on_cooldown - else - overlays.Cut() - var/offset = 1 - for(var/thing in components) - var/obj/screen/psi/component = thing - component.update_icon() - if(!component.invisibility) component.screen_loc = "EAST-[++offset]:28,CENTER-3:11" - -/obj/screen/psi/hub/Destroy() - STOP_PROCESSING(SSprocessing, src) - owner = null - for(var/thing in components) - qdel(thing) - components.Cut() - . = ..() - -/obj/screen/psi/hub/Process() - if(!istype(owner)) - qdel(src) - return - if(!owner.psi) - return - maptext = "[round((owner.psi.stamina/owner.psi.max_stamina)*100)]%" - update_icon() - -/obj/screen/psi/hub/Click(var/location, var/control, var/params) - var/list/click_params = params2list(params) - if(click_params["shift"]) - owner.show_psi_assay(owner) - return - - if(owner.psi.suppressed && owner.psi.stun) - to_chat(owner, "You are dazed and reeling, and cannot muster enough focus to do that!") - return - - owner.psi.suppressed = !owner.psi.suppressed - to_chat(owner, "You are [owner.psi.suppressed ? "now suppressing" : "no longer suppressing"] your psi-power.") - if(owner.psi.suppressed) - owner.psi.cancel() - owner.psi.hide_auras() - else - sound_to(owner, sound('sound/effects/psi/power_unlock.ogg')) - owner.psi.show_auras() - update_icon() \ No newline at end of file diff --git a/code/modules/psionics/interface/ui_toggles.dm b/code/modules/psionics/interface/ui_toggles.dm deleted file mode 100644 index c80c245adc2e5..0000000000000 --- a/code/modules/psionics/interface/ui_toggles.dm +++ /dev/null @@ -1,45 +0,0 @@ -// Begin psi armour toggle. -/obj/screen/psi/armour - name = "Psi-Armour" - icon_state = "psiarmour_off" - -/obj/screen/psi/armour/on_update_icon() - ..() - if(invisibility == 0) - icon_state = owner.psi.use_psi_armour ? "psiarmour_on" : "psiarmour_off" - -/obj/screen/psi/armour/Click() - if(!owner.psi) - return - owner.psi.use_psi_armour = !owner.psi.use_psi_armour - if(owner.psi.use_psi_armour) - to_chat(owner, SPAN_NOTICE("You will now use your psionics to deflect or block incoming attacks.")) - else - to_chat(owner, SPAN_NOTICE("You will no longer use your psionics to deflect or block incoming attacks.")) - update_icon() - -// End psi armour toggle. - -// Menu toggle. -/obj/screen/psi/toggle_psi_menu - name = "Show/Hide Psi UI" - icon_state = "arrow_left" - var/obj/screen/psi/hub/controller - -/obj/screen/psi/toggle_psi_menu/New(var/mob/living/_owner, var/obj/screen/psi/hub/_controller) - controller = _controller - ..(_owner) - -/obj/screen/psi/toggle_psi_menu/Click() - var/set_hidden = !hidden - for(var/thing in controller.components) - var/obj/screen/psi/psi = thing - psi.hidden = set_hidden - controller.update_icon() - -/obj/screen/psi/toggle_psi_menu/on_update_icon() - if(hidden) - icon_state = "arrow_left" - else - icon_state = "arrow_right" -// End menu toggle. \ No newline at end of file diff --git a/code/modules/psionics/mob/mob.dm b/code/modules/psionics/mob/mob.dm deleted file mode 100644 index 8c6d7375f6a81..0000000000000 --- a/code/modules/psionics/mob/mob.dm +++ /dev/null @@ -1,32 +0,0 @@ -/mob/living - var/datum/psi_complexus/psi - -/mob/living/Login() - . = ..() - if(psi) - psi.update(TRUE) - if(!psi.suppressed) - psi.show_auras() - -/mob/living/Destroy() - QDEL_NULL(psi) - . = ..() - -/mob/living/proc/set_psi_rank(var/faculty, var/rank, var/take_larger, var/defer_update, var/temporary) - if(!src.zone_sel) - to_chat(src, SPAN_NOTICE("You feel something strange brush against your mind... but your brain is not able to grasp it.")) - return - if(!psi) - psi = new(src) - var/current_rank = psi.get_rank(faculty) - if(current_rank != rank && (!take_larger || current_rank < rank)) - psi.set_rank(faculty, rank, defer_update, temporary) - -/mob/living/proc/deflect_psionic_attack(var/attacker) - var/blocked = 100 * get_blocked_ratio(null, DAMAGE_PSIONIC) - if(prob(blocked)) - if(attacker) - to_chat(attacker, SPAN_WARNING("Your mental attack is deflected by \the [src]'s defenses!")) - to_chat(src, SPAN_DANGER("\The [attacker] strikes out with a mental attack, but you deflect it!")) - return TRUE - return FALSE diff --git a/code/modules/psionics/mob/mob_assay.dm b/code/modules/psionics/mob/mob_assay.dm deleted file mode 100644 index b345b96f60693..0000000000000 --- a/code/modules/psionics/mob/mob_assay.dm +++ /dev/null @@ -1,93 +0,0 @@ -/mob/living/proc/show_psi_assay(var/mob/viewer, var/obj/machinery/psi_meter/machine) - - if(!viewer) viewer = usr - - var/use_He_is = "You are" - var/use_He_has = "You have" - if(istype(machine) || viewer != src) - var/datum/gender/G = gender_datums[gender] - use_He_is = "[G.He] [G.is]" - use_He_has = "[G.He] [G.has]" - - var/list/dat = list() - - dat += "

              Summary

              " - dat += "
              " - - if(psi) - - // Hi Warhammer 40k rating system, how are you? - // I hope you get along with the Galactic Milieu metapsychics. - var/use_rating - var/effective_rating = psi.rating - if(effective_rating > 1 && psi.suppressed) - effective_rating = max(0, psi.rating-2) - var/rating_descriptor - if(mind && !psi.suppressed) - if(GLOB.paramounts.is_antagonist(mind)) - use_rating = "[effective_rating]-Alpha-Plus" - rating_descriptor = "This indicates a completely deviant psi complexus, either beyond or outside anything currently recorded. Approach with care." - // This space intentionally left blank (for Omega-Minus psi vampires. todo) - if(viewer != usr && GLOB.thralls.is_antagonist(mind) && ishuman(viewer)) - var/mob/living/H = viewer - if(H.psi && H.psi.get_rank(PSI_REDACTION) >= PSI_RANK_GRANDMASTER) - dat += "Their mind has been cored like an apple, and enslaved by another operant psychic." - - if(!use_rating) - switch(effective_rating) - if(1) - use_rating = "[effective_rating]-Epsilon" - rating_descriptor = "This indicates the presence of minor latent psi potential with little or no operant capabilities." - if(2) - use_rating = "[effective_rating]-Gamma" - rating_descriptor = "This indicates the presence of minor psi capabilities of the Operant rank or higher." - if(3) - use_rating = "[effective_rating]-Delta" - rating_descriptor = "This indicates the presence of psi capabilities of the Master rank or higher." - if(4) - use_rating = "[effective_rating]-Beta" - rating_descriptor = "This indicates the presence of significant psi capabilities of the Grandmaster rank or higher." - if(5) - use_rating = "[effective_rating]-Alpha" - rating_descriptor = "This indicates the presence of major psi capabilities of the Paramount Grandmaster rank or higher." - else - use_rating = "[effective_rating]-Lambda" - rating_descriptor = "This indicates the presence of trace latent psi capabilities." - - dat += "[use_He_has] an overall psi rating of [use_rating].
              [rating_descriptor]
              " - - if(!istype(machine)) - - dat += "[use_He_is] currently [psi.suppressed ? "suppressing" : "not suppressing"] your psychic operancy.
              " - dat += "[use_He_has] [psi.stamina]/[psi.max_stamina] psi stamina remaining.
              " - dat += "
              " - - for(var/faculty_id in psi.ranks) - var/decl/psionic_faculty/faculty = SSpsi.get_faculty(faculty_id) - if(psi.ranks[faculty.id] > 0) - dat += "[use_He_is] assayed at the rank of [GLOB.psychic_ranks_to_strings[psi.ranks[faculty.id]]] for the [faculty.name] faculty.
              " - else - dat += "[use_He_has] no notable power within the [faculty.name] faculty.
              " - dat += "
              " - - if(viewer == usr) - dat += "" - for(var/faculty_id in psi.ranks) - var/list/check_powers = psi.get_powers_by_faculty(faculty_id) - if(LAZYLEN(check_powers)) - var/decl/psionic_faculty/faculty = SSpsi.get_faculty(faculty_id) - dat += "" - for(var/decl/psionic_power/power in check_powers) - dat += "" - dat += "

              Psi-power Usage

              [use_He_has] access to the following psi-powers within the [faculty.name] faculty:
              [power.name][power.use_description]
              " - else - dat += "[use_He_has] no notable psychic latency or operancy." - - if(istype(machine)) - dat += "Print Clear Buffer" - machine.last_assay = dat - return - - var/datum/browser/popup = new(viewer, "psi_assay_\ref[src]", "Psi-Assay") - popup.set_content(jointext(dat,null)) - popup.open() diff --git a/code/modules/psionics/mob/mob_interactions.dm b/code/modules/psionics/mob/mob_interactions.dm deleted file mode 100644 index c0cbd5d589738..0000000000000 --- a/code/modules/psionics/mob/mob_interactions.dm +++ /dev/null @@ -1,37 +0,0 @@ -#define INVOKE_PSI_POWERS(holder, powers, target, return_on_invocation) \ - if(holder && holder.psi && holder.psi.can_use()) { \ - for(var/thing in powers) { \ - var/decl/psionic_power/power = thing; \ - var/obj/item/result = power.invoke(holder, target); \ - if(result) { \ - power.handle_post_power(holder, target); \ - if(istype(result)) { \ - sound_to(holder, sound('sound/effects/psi/power_evoke.ogg')); \ - LAZYADD(holder.psi.manifested_items, result); \ - holder.put_in_hands(result); \ - } \ - return return_on_invocation; \ - } \ - } \ - } - -/mob/living/UnarmedAttack(var/atom/A, var/proximity) - . = ..() - if(. && psi) - INVOKE_PSI_POWERS(src, psi.get_melee_powers(SSpsi.faculties_by_intent[a_intent]), A, FALSE) - -/mob/living/RangedAttack(var/atom/A, var/params) - if(psi) - INVOKE_PSI_POWERS(src, psi.get_ranged_powers(SSpsi.faculties_by_intent[a_intent]), A, TRUE) - . = ..() - -/mob/living/proc/check_psi_grab(var/obj/item/grab/grab) - if(psi && ismob(grab.affecting)) - INVOKE_PSI_POWERS(src, psi.get_grab_powers(SSpsi.faculties_by_intent[a_intent]), grab.affecting, FALSE) - -/mob/living/attack_empty_hand(var/bp_hand) - if(psi) - INVOKE_PSI_POWERS(src, psi.get_manifestations(), src, FALSE) - . = ..() - -#undef INVOKE_PSI_POWERS diff --git a/code/modules/psionics/null/_null.dm b/code/modules/psionics/null/_null.dm deleted file mode 100644 index f7e59ecb75609..0000000000000 --- a/code/modules/psionics/null/_null.dm +++ /dev/null @@ -1,24 +0,0 @@ -/atom/proc/disrupts_psionics() - for(var/thing in contents) - var/atom/movable/AM = thing - var/disrupted_by = AM.disrupts_psionics() - if(disrupted_by) - return disrupted_by - return FALSE - -/atom/proc/do_psionics_check(var/stress, var/atom/source) - var/turf/T = get_turf(src) - if(istype(T) && T != src) - return T.do_psionics_check(stress, source) - withstand_psi_stress(stress, source) - . = disrupts_psionics() - -/atom/proc/withstand_psi_stress(var/stress, var/atom/source) - . = max(stress, 0) - if(.) - for(var/thing in contents) - var/atom/movable/AM = thing - if(istype(AM) && AM != src && AM.disrupts_psionics()) - . = AM.withstand_psi_stress(., source) - if(. <= 0) - break diff --git a/code/modules/psionics/null/chemistry.dm b/code/modules/psionics/null/chemistry.dm deleted file mode 100644 index 1944ccffcea53..0000000000000 --- a/code/modules/psionics/null/chemistry.dm +++ /dev/null @@ -1,73 +0,0 @@ -/datum/chemical_reaction/nullglass - name = "Soulstone" - result = null - required_reagents = list(/datum/reagent/blood = 15, /datum/reagent/crystal = 1) - result_amount = 1 - -/datum/chemical_reaction/nullglass/get_reaction_flags(var/datum/reagents/holder) - for(var/datum/reagent/blood/blood in holder.reagent_list) - var/weakref/donor_ref = islist(blood.data) && blood.data["donor"] - if(istype(donor_ref)) - var/mob/living/donor = donor_ref.resolve() - if(istype(donor) && (donor.psi || (donor.mind && GLOB.wizards.is_antagonist(donor.mind)))) - return TRUE - -/datum/chemical_reaction/nullglass/on_reaction(var/datum/reagents/holder, var/created_volume, var/reaction_flags) - var/location = get_turf(holder.my_atom) - if(reaction_flags) - for(var/i = 1, i <= created_volume, i++) - new /obj/item/device/soulstone(location) - else - for(var/i = 1, i <= created_volume*2, i++) - new /obj/item/material/shard(location, MATERIAL_CRYSTAL) - -/datum/reagent/crystal - name = "crystallizing agent" - taste_description = "sharpness" - reagent_state = LIQUID - color = "#13bc5e" - should_admin_log = TRUE - -/datum/reagent/crystal/affect_blood(var/mob/living/carbon/M, var/alien, var/removed) - var/result_mat = (M.psi || (M.mind && GLOB.wizards.is_antagonist(M.mind))) ? MATERIAL_NULLGLASS : MATERIAL_CRYSTAL - if(ishuman(M)) - var/mob/living/carbon/human/H = M - for(var/obj/item/organ/external/E in shuffle(H.organs.Copy())) - if(E.is_stump() || BP_IS_ROBOTIC(E)) - continue - - if(BP_IS_CRYSTAL(E)) - if((E.brute_dam + E.burn_dam) > 0) - if(prob(35)) - to_chat(M, SPAN_NOTICE("You feel a crawling sensation as fresh crystal grows over your [E.name].")) - E.heal_damage(rand(5,8), rand(5,8)) - break - if(BP_IS_BRITTLE(E)) - E.status &= ~ORGAN_BRITTLE - break - else if(E.organ_tag != BP_CHEST && E.organ_tag != BP_GROIN && prob(15)) - to_chat(H, SPAN_DANGER("Your [E.name] is being lacerated from within!")) - if(E.can_feel_pain()) - H.emote("scream") - if(prob(25)) - for(var/i = 1 to rand(3,5)) - new /obj/item/material/shard(get_turf(E), result_mat) - E.droplimb(0, DROPLIMB_BLUNT) - else - E.take_external_damage(rand(20,30), 0) - E.status |= ORGAN_CRYSTAL - E.status |= ORGAN_BRITTLE - break - - for(var/obj/item/organ/internal/I in shuffle(H.internal_organs.Copy())) - if(BP_IS_ROBOTIC(I) || !BP_IS_CRYSTAL(I) || I.damage <= 0 || I.organ_tag == BP_BRAIN) - continue - if(prob(35)) - to_chat(M, SPAN_NOTICE("You feel a deep, sharp tugging sensation as your [I.name] is mended.")) - I.heal_damage(rand(1,3)) - break - else - to_chat(M, SPAN_DANGER("Your flesh is being lacerated from within!")) - M.adjustBruteLoss(rand(3,6)) - if(prob(10)) - new /obj/item/material/shard(get_turf(M), result_mat) diff --git a/code/modules/psionics/null/flooring.dm b/code/modules/psionics/null/flooring.dm deleted file mode 100644 index 4e9e3c84f8721..0000000000000 --- a/code/modules/psionics/null/flooring.dm +++ /dev/null @@ -1,20 +0,0 @@ -/decl/flooring - var/psi_null - -/decl/flooring/proc/is_psi_null() - return psi_null - -/decl/flooring/tiling/nullglass - name = "nullglass plating" - desc = "You can hear the tiles whispering..." - icon_base = "nullglass" - color = COLOR_NULLGLASS - has_damage_range = null - flags = TURF_REMOVE_SCREWDRIVER - build_type = /obj/item/stack/tile/floor_nullglass - psi_null = TRUE - -/obj/item/stack/tile/floor_nullglass - name = "nullglass floor tile" - icon_state = "tile_nullglass" - matter = list(MATERIAL_NULLGLASS = 937.5) diff --git a/code/modules/psionics/null/material.dm b/code/modules/psionics/null/material.dm deleted file mode 100644 index b4871a5e60dd1..0000000000000 --- a/code/modules/psionics/null/material.dm +++ /dev/null @@ -1,28 +0,0 @@ -/material - var/is_psionic_nullifier - -/material/proc/is_psi_null() - return is_psionic_nullifier - -/material/nullglass - is_psionic_nullifier = TRUE - -/material/nullglass - name = MATERIAL_NULLGLASS - icon_colour = COLOR_NULLGLASS - conductive = 1 - stack_type = /obj/item/stack/material/nullglass - flags = MATERIAL_BRITTLE - opacity = 0.5 - integrity = 30 - shard_type = SHARD_SHARD - tableslam_noise = 'sound/effects/Glasshit.ogg' - hardness = 80 - weight = 25 - door_icon_base = "stone" - destruction_desc = "shatters" - hitsound = 'sound/effects/Glasshit.ogg' - -/material/nullglass/generate_recipes() - . = ..() - . += new /datum/stack_recipe/tile/nullglass(src) diff --git a/code/modules/psionics/null/material_sheet.dm b/code/modules/psionics/null/material_sheet.dm deleted file mode 100644 index 9a61871916058..0000000000000 --- a/code/modules/psionics/null/material_sheet.dm +++ /dev/null @@ -1,21 +0,0 @@ -/obj/item/stack/material/withstand_psi_stress(var/stress, var/atom/source) - . = ..(stress, source) - if(amount > 0 && . > 0 && disrupts_psionics()) - if(. > amount) - use(amount) - . -= amount - else - use(stress) - . = 0 - -/obj/item/stack/material/disrupts_psionics() - return (material && material.is_psi_null()) ? src : FALSE - -/obj/item/stack/material/nullglass - name = "nullglass" - icon_state = "sheet-clear" - plural_icon_state = "sheet-clear-mult" - default_type = MATERIAL_NULLGLASS - -/obj/item/stack/material/nullglass/fifty - amount = 50 diff --git a/code/modules/psionics/null/material_weapon.dm b/code/modules/psionics/null/material_weapon.dm deleted file mode 100644 index 33b92c98363d1..0000000000000 --- a/code/modules/psionics/null/material_weapon.dm +++ /dev/null @@ -1,11 +0,0 @@ -/obj/item/material/disrupts_psionics() - return (material && material.is_psi_null()) ? src : FALSE - -/obj/item/material/withstand_psi_stress(var/stress, var/atom/source) - . = ..(stress, source) - if(!health_dead && . > 0 && disrupts_psionics()) - damage_health(.) - . = max(0, -(get_current_health())) - -/obj/item/material/shard/nullglass/New(var/newloc) - ..(newloc, MATERIAL_NULLGLASS) diff --git a/code/modules/psionics/null/turf_floor.dm b/code/modules/psionics/null/turf_floor.dm deleted file mode 100644 index b60aada63de04..0000000000000 --- a/code/modules/psionics/null/turf_floor.dm +++ /dev/null @@ -1,7 +0,0 @@ -/turf/simulated/floor/disrupts_psionics() - return (flooring && flooring.is_psi_null()) ? src : ..() - -/turf/simulated/floor/tiled/nullglass - name = "nullglass floor" - icon_state = "nullglass" - initial_flooring = /decl/flooring/tiling/nullglass diff --git a/code/modules/psionics/null/turf_wall.dm b/code/modules/psionics/null/turf_wall.dm deleted file mode 100644 index a17c22462ec14..0000000000000 --- a/code/modules/psionics/null/turf_wall.dm +++ /dev/null @@ -1,17 +0,0 @@ -/turf/simulated/wall/disrupts_psionics() - return ((material && material.is_psi_null()) || (reinf_material && reinf_material.is_psi_null())) ? src : ..() - -/turf/simulated/wall/withstand_psi_stress(var/stress, var/atom/source) - . = ..(stress, source) - if(. > 0 && disrupts_psionics()) - var/cap = material.integrity - if(reinf_material) cap += reinf_material.integrity - var/stress_total = get_damage_value() + . - damage_health(.) - . = max(0, -(cap-stress_total)) - -/turf/simulated/wall/nullglass - color = COLOR_NULLGLASS - -/turf/simulated/wall/nullglass/Initialize(ml) - ..(ml, MATERIAL_NULLGLASS) diff --git a/code/modules/psionics/null/~null.dm b/code/modules/psionics/null/~null.dm deleted file mode 100644 index 9269576877c03..0000000000000 --- a/code/modules/psionics/null/~null.dm +++ /dev/null @@ -1,3 +0,0 @@ -#undef PSI_IMPLANT_SHOCK -#undef PSI_IMPLANT_WARN -#undef PSI_IMPLANT_DISABLED \ No newline at end of file diff --git a/code/modules/radiation/radiation.dm b/code/modules/radiation/radiation.dm deleted file mode 100644 index e1fea5fb1d695..0000000000000 --- a/code/modules/radiation/radiation.dm +++ /dev/null @@ -1,68 +0,0 @@ -// Describes a point source of radiation. Created either in response to a pulse of radiation, or over an irradiated atom. -// Sources will decay over time, unless something is renewing their power! -/datum/radiation_source - var/turf/source_turf // Location of the radiation source. - var/rad_power // Strength of the radiation being emitted. - var/decay = TRUE // True for automatic decay. False if owner promises to handle it (i.e. supermatter) - var/respect_maint = FALSE // True for not affecting RAD_SHIELDED areas. - var/flat = FALSE // True for power falloff with distance. - var/range // Cached maximum range, used for quick checks against mobs. - -/datum/radiation_source/New(var/source_turf, rad_power, decay = TRUE) - src.source_turf = source_turf - src.rad_power = rad_power - src.decay = decay - -/datum/radiation_source/Destroy() - SSradiation.sources -= src - if(SSradiation.sources_assoc[src.source_turf] == src) - SSradiation.sources_assoc -= src.source_turf - src.source_turf = null - . = ..() - -/datum/radiation_source/proc/update_rad_power(var/new_power = null) - if(new_power == null || new_power == rad_power) - return // No change - else if(new_power <= config.radiation_lower_limit) - qdel(src) // Decayed to nothing - else - rad_power = new_power - if(!flat) - range = min(round(sqrt(rad_power / config.radiation_lower_limit)), 31) // R = rad_power / dist**2 - Solve for dist - -/turf/var/cached_rad_resistance = 0 - -/turf/proc/calc_rad_resistance() - cached_rad_resistance = 0 - for(var/obj/O in src.contents) - if(!(O.rad_resistance_modifier <= 0) && O.density) - var/material/M = O.get_material() - if(!M) continue - cached_rad_resistance += (M.weight * O.rad_resistance_modifier) / config.radiation_material_resistance_divisor - // Looks like storing the contents length is meant to be a basic check if the cache is stale due to items enter/exiting. Better than nothing so I'm leaving it as is. ~Leshana - SSradiation.resistance_cache[src] = (length(contents) + 1) - -/turf/simulated/wall/calc_rad_resistance() - SSradiation.resistance_cache[src] = (length(contents) + 1) - cached_rad_resistance = (density ? material.weight / config.radiation_material_resistance_divisor : 0) - -/obj - var/rad_resistance_modifier = 1 // Allow overriding rad resistance - -/atom/proc/get_rads() - if(loc) - return loc.get_rads() - return 0 - -/turf/get_rads() - return SSradiation.get_rads_at_turf(src) - -// If people expand the system, this may be useful. Here as a placeholder until then -/atom/proc/rad_act(var/severity) - return 1 - -/mob/living/rad_act(var/severity) - if(severity > RAD_LEVEL_LOW) - apply_damage(severity, DAMAGE_RADIATION, damage_flags = DAMAGE_FLAG_DISPERSED) - for(var/atom/I in src) - I.rad_act(severity) diff --git a/code/modules/random_map/_random_map_setup.dm b/code/modules/random_map/_random_map_setup.dm deleted file mode 100644 index e89f0cd035db0..0000000000000 --- a/code/modules/random_map/_random_map_setup.dm +++ /dev/null @@ -1,32 +0,0 @@ -/* - This module is used to generate the debris fields/distribution maps/procedural stations. -*/ - -#define MIN_SURFACE_COUNT_PER_CHUNK 0.1 -#define MIN_RARE_COUNT_PER_CHUNK 0.05 -#define MIN_DEEP_COUNT_PER_CHUNK 0.025 -#define RESOURCE_HIGH_MAX 4 -#define RESOURCE_HIGH_MIN 2 -#define RESOURCE_MID_MAX 3 -#define RESOURCE_MID_MIN 1 -#define RESOURCE_LOW_MAX 1 -#define RESOURCE_LOW_MIN 0 - -#define FLOOR_CHAR 0 -#define WALL_CHAR 1 -#define DOOR_CHAR 2 -#define EMPTY_CHAR 3 -#define ROOM_TEMP_CHAR 4 -#define MONSTER_CHAR 5 -#define ARTIFACT_TURF_CHAR 6 -#define ARTIFACT_CHAR 7 -#define CORRIDOR_TURF_CHAR 8 - -#define TRANSLATE_COORD(X,Y) ((((Y) - 1) * limit_x) + (X)) -#define TRANSLATE_AND_VERIFY_COORD(X,Y) TRANSLATE_AND_VERIFY_COORD_MLEN(X,Y,map.len) - -#define TRANSLATE_AND_VERIFY_COORD_MLEN(X,Y,LEN) \ - tmp_cell = TRANSLATE_COORD(X,Y);\ - if (tmp_cell < 1 || tmp_cell > LEN) {\ - tmp_cell = null;\ - } \ No newline at end of file diff --git a/code/modules/random_map/automata/automata.dm b/code/modules/random_map/automata/automata.dm deleted file mode 100644 index 544b625a331ef..0000000000000 --- a/code/modules/random_map/automata/automata.dm +++ /dev/null @@ -1,71 +0,0 @@ -#define CELL_ALIVE(VAL) (VAL == cell_live_value) -#define KILL_CELL(CELL, NEXT_MAP) NEXT_MAP[CELL] = cell_dead_value; -#define REVIVE_CELL(CELL, NEXT_MAP) NEXT_MAP[CELL] = cell_live_value; - -/datum/random_map/automata - descriptor = "generic caves" - initial_wall_cell = 55 - var/iterations = 0 // Number of times to apply the automata rule. - var/cell_live_value = WALL_CHAR // Cell is alive if it has this value. - var/cell_dead_value = FLOOR_CHAR // As above for death. - var/cell_threshold = 5 // Cell becomes alive with this many live neighbors. - -// Automata-specific procs and processing. -/datum/random_map/automata/generate_map() - for(var/iter = 1 to iterations) - var/list/next_map[limit_x*limit_y] - var/count - var/is_not_border_left - var/is_not_border_right - var/ilim_u - var/ilim_d - var/bottom_lim = ((limit_y - 1) * limit_x) - - if (!islist(map)) - set_map_size() - - for (var/i in 1 to (limit_x * limit_y)) - count = 0 - - is_not_border_left = i != 1 && ((i - 1) % limit_x) - is_not_border_right = i % limit_x - - if (CELL_ALIVE(map[i])) // Center row. - ++count - if (is_not_border_left && CELL_ALIVE(map[i - 1])) - ++count - if (is_not_border_right && CELL_ALIVE(map[i + 1])) - ++count - - if (i > limit_x) // top row - ilim_u = i - limit_x - if (CELL_ALIVE(map[ilim_u])) - ++count - if (is_not_border_left && CELL_ALIVE(map[ilim_u - 1])) - ++count - if (is_not_border_right && CELL_ALIVE(map[ilim_u + 1])) - ++count - - if (i <= bottom_lim) // bottom row - ilim_d = i + limit_x - if (CELL_ALIVE(map[ilim_d])) - ++count - if (is_not_border_left && CELL_ALIVE(map[ilim_d - 1])) - ++count - if (is_not_border_right && CELL_ALIVE(map[ilim_d + 1])) - ++count - - if(count >= cell_threshold) - REVIVE_CELL(i, next_map) - else // Nope. Can't be alive. Kill it. - KILL_CELL(i, next_map) - - CHECK_TICK - - map = next_map - -/datum/random_map/automata/get_additional_spawns(value, turf/T) - return - -#undef KILL_CELL -#undef REVIVE_CELL \ No newline at end of file diff --git a/code/modules/random_map/automata/caves.dm b/code/modules/random_map/automata/caves.dm deleted file mode 100644 index d116737b4fbd4..0000000000000 --- a/code/modules/random_map/automata/caves.dm +++ /dev/null @@ -1,147 +0,0 @@ -GLOBAL_LIST_INIT(weighted_minerals_sparse, \ - list( \ - MATERIAL_PITCHBLENDE = 8, \ - MATERIAL_PLATINUM = 8, \ - MATERIAL_HEMATITE = 35, \ - MATERIAL_GRAPHITE = 35, \ - MATERIAL_DIAMOND = 5, \ - MATERIAL_GOLD = 8, \ - MATERIAL_SILVER = 8, \ - MATERIAL_PHORON = 10, \ - MATERIAL_QUARTZ = 3, \ - MATERIAL_PYRITE = 3, \ - MATERIAL_SPODUMENE = 3, \ - MATERIAL_CINNABAR = 3, \ - MATERIAL_PHOSPHORITE = 3, \ - MATERIAL_ROCK_SALT = 3, \ - MATERIAL_POTASH = 3, \ - MATERIAL_BAUXITE = 3, \ - MATERIAL_RUTILE = 3 - )) - -GLOBAL_LIST_INIT(weighted_minerals_rich, \ - list( \ - MATERIAL_PITCHBLENDE = 10, \ - MATERIAL_PLATINUM = 10, \ - MATERIAL_HEMATITE = 20, \ - MATERIAL_GRAPHITE = 20, \ - MATERIAL_DIAMOND = 5, \ - MATERIAL_GOLD = 10, \ - MATERIAL_SILVER = 10, \ - MATERIAL_PHORON = 20, \ - MATERIAL_QUARTZ = 1, \ - MATERIAL_PYRITE = 1, \ - MATERIAL_SPODUMENE = 1, \ - MATERIAL_CINNABAR = 1, \ - MATERIAL_PHOSPHORITE = 1, \ - MATERIAL_ROCK_SALT = 1, \ - MATERIAL_POTASH = 1, \ - MATERIAL_BAUXITE = 1, \ - MATERIAL_RUTILE = 1 - )) - -/datum/random_map/automata/cave_system - iterations = 5 - descriptor = "moon caves" - wall_type = /turf/simulated/mineral - floor_type = /turf/simulated/floor/asteroid - target_turf_type = /turf/unsimulated/mask - - var/mineral_turf = /turf/simulated/mineral/random - var/list/ore_turfs = list() - var/list/minerals_sparse - var/list/minerals_rich - -/datum/random_map/automata/cave_system/New() - if(!minerals_sparse) minerals_sparse = GLOB.weighted_minerals_sparse - if(!minerals_rich) minerals_rich = GLOB.weighted_minerals_rich - ..() - -/datum/random_map/automata/cave_system/get_appropriate_path(var/value) - switch(value) - if(DOOR_CHAR, EMPTY_CHAR) - return mineral_turf - if(FLOOR_CHAR) - return floor_type - if(WALL_CHAR) - return wall_type - -/datum/random_map/automata/cave_system/get_map_char(var/value) - switch(value) - if(DOOR_CHAR) - return "x" - if(EMPTY_CHAR) - return "X" - return ..(value) - -// Create ore turfs. -/datum/random_map/automata/cave_system/cleanup() - var/tmp_cell - for (var/x = 1 to limit_x) - for (var/y = 1 to limit_y) - tmp_cell = TRANSLATE_COORD(x, y) - if (CELL_ALIVE(map[tmp_cell])) - ore_turfs += tmp_cell - - game_log("ASGEN", "Found [ore_turfs.len] ore turfs.") - var/ore_count = round(map.len/20) - var/door_count = 0 - var/empty_count = 0 - while((ore_count>0) && (ore_turfs.len>0)) - - if(!priority_process) - CHECK_TICK - - var/check_cell = pick(ore_turfs) - ore_turfs -= check_cell - if(prob(75)) - map[check_cell] = DOOR_CHAR // Mineral block - door_count += 1 - else - map[check_cell] = EMPTY_CHAR // Rare mineral block. - empty_count += 1 - ore_count-- - - game_log("ASGEN", "Set [door_count] turfs to random minerals.") - game_log("ASGEN", "Set [empty_count] turfs to high-chance random minerals.") - return 1 - -/datum/random_map/automata/cave_system/apply_to_map() - ..() - if(!origin_x) origin_x = 1 - if(!origin_y) origin_y = 1 - if(!origin_z) origin_z = 1 - - var/tmp_cell - var/new_path - var/num_applied = 0 - for (var/thing in block(locate(origin_x, origin_y, origin_z), locate(limit_x, limit_y, origin_z))) - var/turf/T = thing - new_path = null - if (!T || (target_turf_type && !istype(T, target_turf_type))) - continue - - tmp_cell = TRANSLATE_COORD(T.x, T.y) - - var/minerals - switch (map[tmp_cell]) - if(DOOR_CHAR) - new_path = mineral_turf - minerals = pickweight(minerals_sparse) - if(EMPTY_CHAR) - new_path = mineral_turf - minerals = pickweight(minerals_rich) - if(FLOOR_CHAR) - new_path = floor_type - if(WALL_CHAR) - new_path = wall_type - - if (!new_path) - continue - - num_applied += 1 - T.ChangeTurf(new_path, minerals) - get_additional_spawns(map[tmp_cell], T) - CHECK_TICK - - game_log("ASGEN", "Applied [num_applied] turfs.") \ No newline at end of file diff --git a/code/modules/random_map/building/building.dm b/code/modules/random_map/building/building.dm deleted file mode 100644 index 98a157c459985..0000000000000 --- a/code/modules/random_map/building/building.dm +++ /dev/null @@ -1,55 +0,0 @@ -/datum/random_map/building - descriptor = "generic room" - limit_x = 7 - limit_y = 7 - -/datum/random_map/building/generate_map() - for(var/x = 1, x <= limit_x, x++) - for(var/y = 1, y <= limit_y, y++) - var/current_cell = get_map_cell(x,y) - if(!current_cell) - continue - if(x == 1 || y == 1 || x == limit_x || y == limit_y) - map[current_cell] = WALL_CHAR - else - map[current_cell] = FLOOR_CHAR - -/datum/random_map/building/handle_post_overlay_on(var/datum/random_map/target_map, var/tx, var/ty) - var/list/possible_doors - for(var/x = 1, x <= limit_x, x++) - for(var/y = 1, y <= limit_y, y++) - var/current_cell = get_map_cell(x,y) - if(!current_cell) - continue - if(!(x == 1 || y == 1 || x == limit_x || y == limit_y)) - continue - if(tx+x > target_map.limit_x) - continue - if(ty+y > target_map.limit_y) - continue - - var/place_door - // #.# ... .## ##. - // #X# #X# .X. .X. == place a door - // ... # # .## ##. - - // (tx+x)-1,(ty+y-1) (tx+x),(ty+y)-1 (tx+x)+1,(ty+y)-1 - // (tx+x)-1,(ty+y) (tx+x),(ty+y) (tx+x)+1,(ty+y) - // (tx+x)-1,(ty+y+1) (tx+x),(ty+y)+1 (tx+x)+1,(ty+y)+1 - - - if(place_door) - possible_doors |= target_map.get_map_cell(tx+x,ty+y) - - if(possible_doors.len) - // Place at least one door. - var/placing_door = pick(possible_doors) - possible_doors -= placing_door - target_map.map[placing_door] = DOOR_CHAR - // Keep placing doors until we get bored or lose interest. - while(possible_doors && !prob(30)) - placing_door = pick(possible_doors) - possible_doors -= placing_door - target_map.map[placing_door] = DOOR_CHAR - - return \ No newline at end of file diff --git a/code/modules/random_map/drop/drop_types.dm b/code/modules/random_map/drop/drop_types.dm deleted file mode 100644 index 03ed72106c9b2..0000000000000 --- a/code/modules/random_map/drop/drop_types.dm +++ /dev/null @@ -1,196 +0,0 @@ -var/global/list/datum/supply_drop_loot/supply_drop - -/proc/supply_drop_random_loot_types() - if(!supply_drop) - supply_drop = init_subtypes(/datum/supply_drop_loot) - supply_drop = dd_sortedObjectList(supply_drop) - return supply_drop - -/datum/supply_drop_loot - var/name = "" - var/container = null - var/list/contents = null - -/datum/supply_drop_loot/proc/contents() - return contents - -/datum/supply_drop_loot/proc/drop(turf/T) - var/C = container ? new container(T) : T - for(var/content in contents()) - new content(C) - -/datum/supply_drop_loot/dd_SortValue() - return name - -/datum/supply_drop_loot/supermatter - name = "Supermatter" -/datum/supply_drop_loot/supermatter/New() - ..() - contents = list(/obj/machinery/power/supermatter) - -/datum/supply_drop_loot/lasers - name = "Lasers" - container = /obj/structure/largecrate -/datum/supply_drop_loot/lasers/New() - ..() - contents = list( - /obj/item/gun/energy/laser, - /obj/item/gun/energy/laser, - /obj/item/gun/energy/sniperrifle, - /obj/item/gun/energy/ionrifle) - -/datum/supply_drop_loot/ballistics - name = "Ballistics" - container = /obj/structure/largecrate -/datum/supply_drop_loot/ballistics/New() - ..() - contents = list( - /obj/item/gun/projectile/pistol/sec, - /obj/item/gun/projectile/shotgun/doublebarrel, - /obj/item/gun/projectile/shotgun/pump/combat, - /obj/item/gun/projectile/automatic/sec_smg, - /obj/item/gun/projectile/automatic/bullpup_rifle) - -/datum/supply_drop_loot/ballistics - name = "Ballistics" - container = /obj/structure/largecrate -/datum/supply_drop_loot/ballistics/New() - ..() - contents = list( - /obj/item/gun/projectile/pistol/sec, - /obj/item/gun/projectile/shotgun/doublebarrel, - /obj/item/gun/projectile/shotgun/pump/combat, - /obj/item/gun/projectile/automatic/sec_smg, - /obj/item/gun/projectile/automatic/bullpup_rifle) - -/datum/supply_drop_loot/seeds - name = "Seeds" - container = /obj/structure/closet/crate -/datum/supply_drop_loot/seeds/New() - ..() - contents = list( - /obj/item/seeds/chiliseed, - /obj/item/seeds/berryseed, - /obj/item/seeds/cornseed, - /obj/item/seeds/eggplantseed, - /obj/item/seeds/tomatoseed, - /obj/item/seeds/appleseed, - /obj/item/seeds/soyaseed, - /obj/item/seeds/wheatseed, - /obj/item/seeds/carrotseed, - /obj/item/seeds/lemonseed, - /obj/item/seeds/orangeseed, - /obj/item/seeds/grassseed, - /obj/item/seeds/sunflowerseed, - /obj/item/seeds/chantermycelium, - /obj/item/seeds/potatoseed, - /obj/item/seeds/sugarcaneseed) - -/datum/supply_drop_loot/food - name = "Food" - container = /obj/structure/largecrate -/datum/supply_drop_loot/food/New() - ..() - contents = list( - /obj/item/reagent_containers/food/condiment/flour, - /obj/item/reagent_containers/food/condiment/flour, - /obj/item/reagent_containers/food/condiment/flour, - /obj/item/reagent_containers/food/drinks/milk, - /obj/item/reagent_containers/food/drinks/milk, - /obj/item/storage/fancy/egg_box, - /obj/item/reagent_containers/food/snacks/tofu, - /obj/item/reagent_containers/food/snacks/tofu, - /obj/item/reagent_containers/food/snacks/meat, - /obj/item/reagent_containers/food/snacks/meat) - -/datum/supply_drop_loot/armour - name = "Armour" - container = /obj/structure/largecrate -/datum/supply_drop_loot/armour/New() - ..() - contents = list( - /obj/item/clothing/head/helmet/riot, - /obj/item/clothing/suit/armor/riot, - /obj/item/clothing/head/helmet/riot, - /obj/item/clothing/suit/armor/riot, - /obj/item/clothing/head/helmet/riot, - /obj/item/clothing/suit/armor/riot, - /obj/item/clothing/suit/armor/vest, - /obj/item/clothing/suit/armor/vest, - /obj/item/clothing/suit/storage/vest, - /obj/item/clothing/suit/storage/vest, - /obj/item/clothing/suit/armor/laserproof, - /obj/item/clothing/suit/armor/bulletproof) - -/datum/supply_drop_loot/materials - name = "Materials" - container = /obj/structure/largecrate -/datum/supply_drop_loot/materials/New() - ..() - contents = list( - /obj/item/stack/material/steel, - /obj/item/stack/material/steel, - /obj/item/stack/material/steel, - /obj/item/stack/material/glass, - /obj/item/stack/material/glass, - /obj/item/stack/material/wood, - /obj/item/stack/material/plastic, - /obj/item/stack/material/glass/reinforced, - /obj/item/stack/material/plasteel) - -/datum/supply_drop_loot/medical - name = "Medical" - container = /obj/structure/closet/crate/medical -/datum/supply_drop_loot/medical/New() - ..() - contents = list( - /obj/item/storage/firstaid/regular, - /obj/item/storage/firstaid/trauma, - /obj/item/storage/firstaid/fire, - /obj/item/storage/firstaid/toxin, - /obj/item/storage/firstaid/o2, - /obj/item/storage/firstaid/adv, - /obj/item/reagent_containers/glass/bottle/antitoxin, - /obj/item/reagent_containers/glass/bottle/inaprovaline, - /obj/item/reagent_containers/glass/bottle/stoxin, - /obj/item/storage/box/syringes, - /obj/item/storage/box/autoinjectors) - -/datum/supply_drop_loot/power - name = "Power" - container = /obj/structure/largecrate -/datum/supply_drop_loot/power/New() - ..() - contents = list( - /obj/item/stack/material/steel, - /obj/item/stack/material/steel, - /obj/item/stack/material/steel, - /obj/item/stack/material/glass, - /obj/item/stack/material/glass, - /obj/item/stack/material/wood, - /obj/item/stack/material/plastic, - /obj/item/stack/material/glass/reinforced, - /obj/item/stack/material/plasteel) - -/datum/supply_drop_loot/hydroponics - name = "Hydroponics" - container = /obj/structure/largecrate -/datum/supply_drop_loot/hydroponics/New() - ..() - contents = list( - /obj/machinery/portable_atmospherics/hydroponics, - /obj/machinery/portable_atmospherics/hydroponics, - /obj/machinery/portable_atmospherics/hydroponics) - -/datum/supply_drop_loot/power - name = "Power" - container = /obj/structure/largecrate -/datum/supply_drop_loot/power/New() - ..() - contents = list( - /obj/machinery/power/port_gen/pacman, - /obj/machinery/power/port_gen/pacman/super, - /obj/machinery/power/port_gen/pacman/mrs) - -/datum/supply_drop_loot/power/contents() - return list(pick(contents)) diff --git a/code/modules/random_map/drop/droppod.dm b/code/modules/random_map/drop/droppod.dm deleted file mode 100644 index 598c5027ef5c1..0000000000000 --- a/code/modules/random_map/drop/droppod.dm +++ /dev/null @@ -1,225 +0,0 @@ -#define SD_FLOOR_TILE 0 -#define SD_WALL_TILE 1 -#define SD_DOOR_TILE 2 -#define SD_EMPTY_TILE 3 -#define SD_SUPPLY_TILE 7 - -/datum/random_map/droppod - descriptor = "drop pod" - initial_wall_cell = 0 - limit_x = 3 - limit_y = 3 - preserve_map = 0 - - wall_type = /turf/simulated/wall/titanium - floor_type = /turf/simulated/floor/reinforced - var/list/supplied_drop_types = list() - var/door_type = /obj/structure/droppod_door - var/drop_type = /mob/living/simple_animal/hostile/retaliate/parrot - var/auto_open_doors - - var/placement_explosion_dev = 1 - var/placement_explosion_heavy = 2 - var/placement_explosion_light = 6 - var/placement_explosion_flash = 4 - -/datum/random_map/droppod/New(var/seed, var/tx, var/ty, var/tz, var/tlx, var/tly, var/do_not_apply, var/do_not_announce, var/supplied_drop, var/list/supplied_drops, var/automated) - - if(supplied_drop) - drop_type = supplied_drop - else if(islist(supplied_drops) && supplied_drops.len) - supplied_drop_types = supplied_drops - drop_type = "custom" - if(automated) - auto_open_doors = 1 - - //Make sure there is a clear midpoint. - if(limit_x % 2 == 0) limit_x++ - if(limit_y % 2 == 0) limit_y++ - ..() - -/datum/random_map/droppod/generate_map() - - // No point calculating these 200 times. - var/x_midpoint = Ceil(limit_x / 2) - var/y_midpoint = Ceil(limit_y / 2) - - // Draw walls/floors/doors. - for(var/x = 1, x <= limit_x, x++) - for(var/y = 1, y <= limit_y, y++) - var/current_cell = get_map_cell(x,y) - if(!current_cell) - continue - - var/on_x_bound = (x == 1 || x == limit_x) - var/on_y_bound = (y == 1 || y == limit_x) - var/draw_corners = (limit_x < 5 && limit_y < 5) - if(on_x_bound || on_y_bound) - // Draw access points in midpoint of each wall. - if(x == x_midpoint || y == y_midpoint) - map[current_cell] = SD_DOOR_TILE - // Draw the actual walls. - else if(draw_corners || (!on_x_bound || !on_y_bound)) - map[current_cell] = SD_WALL_TILE - //Don't draw the far corners on large pods. - else - map[current_cell] = SD_EMPTY_TILE - else - // Fill in the corners. - if((x == 2 || x == (limit_x-1)) && (y == 2 || y == (limit_y-1))) - map[current_cell] = SD_WALL_TILE - // Fill in EVERYTHING ELSE. - else - map[current_cell] = SD_FLOOR_TILE - - // Draw the drop contents. - var/current_cell = get_map_cell(x_midpoint,y_midpoint) - if(current_cell) - map[current_cell] = SD_SUPPLY_TILE - return 1 - -/datum/random_map/droppod/apply_to_map() - if(placement_explosion_dev || placement_explosion_heavy || placement_explosion_light || placement_explosion_flash) - var/turf/T = locate((origin_x + Ceil(limit_x / 2)-1), (origin_y + Ceil(limit_y / 2)-1), origin_z) - if(istype(T)) - explosion(T, placement_explosion_dev, placement_explosion_heavy, placement_explosion_light, placement_explosion_flash) - sleep(15) // Let the explosion finish proccing before we ChangeTurf(), otherwise it might destroy our spawned objects. - return ..() - -/datum/random_map/droppod/get_appropriate_path(var/value) - if(value == SD_FLOOR_TILE || value == SD_SUPPLY_TILE) - return floor_type - else if(value == SD_WALL_TILE) - return wall_type - else if(value == SD_DOOR_TILE ) - return wall_type - return null - -// Pods are circular. Get the direction this object is facing from the center of the pod. -/datum/random_map/droppod/get_spawn_dir(var/x, var/y) - var/x_midpoint = Ceil(limit_x / 2) - var/y_midpoint = Ceil(limit_y / 2) - if(x == x_midpoint && y == y_midpoint) - return null - var/turf/target = locate(origin_x+x-1, origin_y+y-1, origin_z) - var/turf/middle = locate(origin_x+x_midpoint-1, origin_y+y_midpoint-1, origin_z) - if(!istype(target) || !istype(middle)) - return null - return get_dir(middle, target) - -/datum/random_map/droppod/get_additional_spawns(var/value, var/turf/T, var/spawn_dir) - - // Splatter anything under us that survived the explosion. - if(value != SD_EMPTY_TILE && T.contents.len) - for(var/atom/movable/AM in T) - if(AM.simulated && !isobserver(AM)) - qdel(AM) - - // Also spawn doors and loot. - if(value == SD_DOOR_TILE) - var/obj/structure/S = new door_type(T, auto_open_doors) - S.set_dir(spawn_dir) - - else if(value == SD_SUPPLY_TILE) - get_spawned_drop(T) - -/datum/random_map/droppod/proc/get_spawned_drop(var/turf/T) - var/obj/structure/bed/chair/C = new(T) - C.set_light(0.5, 0.1, 3, 2, l_color = "#cc0000") - var/mob/living/drop - // This proc expects a list of mobs to be passed to the spawner. - // Use the supply pod if you don't want to drop mobs. - // Mobs will not double up; if you want multiple mobs, you - // will need multiple drop tiles. - if(islist(supplied_drop_types) && supplied_drop_types.len) - while(supplied_drop_types.len) - drop = pick(supplied_drop_types) - supplied_drop_types -= drop - if(istype(drop)) - drop.tag = null - if(drop.buckled) - drop.buckled = null - drop.forceMove(T) - else if(ispath(drop_type)) - drop = new drop_type(T) - if(istype(drop)) - if(drop.buckled) - drop.buckled = null - drop.forceMove(T) - -/datum/admins/proc/call_drop_pod() - set category = "Fun" - set desc = "Call an immediate drop pod on your location." - set name = "Call Drop Pod" - - if(!check_rights(R_FUN)) return - - var/client/selected_player - var/mob/living/spawned_mob - var/list/spawned_mobs = list() - - var/spawn_path = input("Select a mob type.", "Drop Pod Selection", null) as null|anything in typesof(/mob/living)-/mob/living - if(!spawn_path) - return - - if(alert("Do you wish the mob to have a player?",,"No","Yes") == "No") - var/spawn_count = input("How many mobs do you wish the pod to contain?", "Drop Pod Selection", null) as num - if(spawn_count <= 0) - return - for(var/i=0;iYou prime the explosive bolts. Better get clear!") - sleep(30) - deploy() - -/obj/structure/droppod_door/proc/deploy() - if(deployed) - return - - deployed = 1 - visible_message("The explosive bolts on \the [src] detonate, throwing it open!") - playsound(src.loc, 'sound/effects/bang.ogg', 50, 1, 5) - - // This is shit but it will do for the sake of testing. - for(var/obj/structure/droppod_door/D in orange(1,src)) - if(D.deployed) - continue - D.deploy() - - // Overwrite turfs. - var/turf/origin = get_turf(src) - origin.ChangeTurf(/turf/simulated/floor/reinforced) - origin.set_light(0) // Forcing updates - var/turf/T = get_step(origin, src.dir) - T.ChangeTurf(/turf/simulated/floor/reinforced) - T.set_light(0) // Forcing updates - - // Destroy turf contents. - for(var/obj/O in origin) - if(!O.simulated) - continue - qdel(O) //crunch - for(var/obj/O in T) - if(!O.simulated) - continue - qdel(O) //crunch - - // Hurl the mobs away. - for(var/mob/living/M in T) - M.throw_at(get_edge_target_turf(T,src.dir),rand(0,3),50) - for(var/mob/living/M in origin) - M.throw_at(get_edge_target_turf(origin,src.dir),rand(0,3),50) - - // Create a decorative ramp bottom and flatten out our current ramp. - set_density(0) - set_opacity(0) - icon_state = "ramptop" - var/obj/structure/droppod_door/door_bottom = new(T) - door_bottom.deployed = 1 - door_bottom.set_density(0) - door_bottom.set_opacity(0) - door_bottom.set_dir(src.dir) - door_bottom.icon_state = "rampbottom" \ No newline at end of file diff --git a/code/modules/random_map/drop/supply.dm b/code/modules/random_map/drop/supply.dm deleted file mode 100644 index f4ed9a5c148e2..0000000000000 --- a/code/modules/random_map/drop/supply.dm +++ /dev/null @@ -1,86 +0,0 @@ -/datum/random_map/droppod/supply - descriptor = "supply drop" - limit_x = 5 - limit_y = 5 - - placement_explosion_light = 7 - placement_explosion_flash = 5 - -// UNLIKE THE DROP POD, this map deals ENTIRELY with strings and types. -// Drop type is a string representing a mode rather than an atom or path. -// supplied_drop_types is a list of types to spawn in the pod. -/datum/random_map/droppod/supply/get_spawned_drop(var/turf/T) - - if(!drop_type) drop_type = pick(supply_drop_random_loot_types()) - - if(drop_type == "custom") - if(supplied_drop_types.len) - var/obj/structure/largecrate/C = locate() in T - for(var/drop_type in supplied_drop_types) - var/atom/movable/A = new drop_type(T) - if(!istype(A, /mob)) - if(!C) C = new(T) - C.contents |= A - return - else - drop_type = pick(supply_drop_random_loot_types()) - - if(istype(drop_type, /datum/supply_drop_loot)) - var/datum/supply_drop_loot/SDL = drop_type - SDL.drop(T) - else - error("Unhandled drop type: [drop_type]") - - -/datum/admins/proc/call_supply_drop() - set category = "Fun" - set desc = "Call an immediate supply drop on your location." - set name = "Call Supply Drop" - - if(!check_rights(R_FUN)) return - - var/chosen_loot_type - var/list/chosen_loot_types - var/choice = alert("Do you wish to supply a custom loot list?",,"No","Yes") - if(choice == "Yes") - chosen_loot_types = list() - - choice = alert("Do you wish to add mobs?",,"No","Yes") - if(choice == "Yes") - while(1) - var/adding_loot_type = input("Select a new loot path. Cancel to finish.", "Loot Selection", null) as null|anything in typesof(/mob/living) - if(!adding_loot_type) - break - chosen_loot_types |= adding_loot_type - choice = alert("Do you wish to add structures or machines?",,"No","Yes") - if(choice == "Yes") - while(1) - var/adding_loot_type = input("Select a new loot path. Cancel to finish.", "Loot Selection", null) as null|anything in typesof(/obj/structure) + typesof(/obj/machinery) - if(!adding_loot_type) - break - chosen_loot_types |= adding_loot_type - choice = alert("Do you wish to add any items?",,"No","Yes") - if(choice == "Yes") - while(1) - var/adding_loot_type = input("Select a new loot path. Cancel to finish.", "Loot Selection", null) as null|anything in typesof(/obj/item) - if(!adding_loot_type) - break - chosen_loot_types |= adding_loot_type - - choice = alert("Do you wish to add ABSOLUTELY ANYTHING ELSE? (you really shouldn't need to)",,"No","Yes") - if(choice == "Yes") - while(1) - var/adding_loot_type = input("Select a new loot path. Cancel to finish.", "Loot Selection", null) as null|anything in typesof(/atom/movable) - if(!adding_loot_type) - break - chosen_loot_types |= adding_loot_type - else - choice = alert("Do you wish to specify a loot type?",,"No","Yes") - if(choice == "Yes") - chosen_loot_type = input("Select a loot type.", "Loot Selection", null) as null|anything in supply_drop_random_loot_types() - - choice = alert("Are you SURE you wish to deploy this supply drop? It will cause a sizable explosion and gib anyone underneath it.",,"No","Yes") - if(choice == "No") - return - log_admin("[key_name(usr)] dropped supplies at ([usr.x],[usr.y],[usr.z])") - new /datum/random_map/droppod/supply(null, usr.x-2, usr.y-2, usr.z, supplied_drops = chosen_loot_types, supplied_drop = chosen_loot_type) \ No newline at end of file diff --git a/code/modules/random_map/dungeon/predefined.dm b/code/modules/random_map/dungeon/predefined.dm deleted file mode 100644 index 019c0b8f38221..0000000000000 --- a/code/modules/random_map/dungeon/predefined.dm +++ /dev/null @@ -1,16 +0,0 @@ -/datum/random_map/winding_dungeon/premade - name = "winding dungeon (PREMADE)" - room_theme_common = list(/datum/room_theme = 1) - room_theme_uncommon = list(/datum/room_theme = 3, /datum/room_theme/metal = 1) - room_theme_rare = list(/datum/room_theme/metal = 1, /datum/room_theme = 3, /datum/room_theme/metal/secure = 1) - - monsters_common = list(/mob/living/simple_animal/hostile/carp = 50, /mob/living/simple_animal/hostile/carp/pike = 1) - monsters_uncommon = list(/mob/living/simple_animal/hostile/hivebot = 10, - /mob/living/simple_animal/hostile/hivebot/strong = 1 - ) - -/datum/random_map/winding_dungeon/premade/New() - loot_common += subtypesof(/obj/item/reagent_containers/food) + subtypesof(/obj/item/material) + subtypesof(/obj/item/melee) - loot_uncommon += subtypesof(/obj/item/gun/projectile) + subtypesof(/obj/item/ammo_magazine) - monsters_rare += typesof(/mob/living/simple_animal/hostile/syndicate) + typesof(/mob/living/simple_animal/hostile/pirate) - ..() \ No newline at end of file diff --git a/code/modules/random_map/dungeon/room.dm b/code/modules/random_map/dungeon/room.dm deleted file mode 100644 index 8c60a977c27d7..0000000000000 --- a/code/modules/random_map/dungeon/room.dm +++ /dev/null @@ -1,96 +0,0 @@ -/* TO DO -1. Remake godaweful apply_to_map checks. There should be a loop or something I can do there. -2. Make apply_to_map check for nearby doors. If there is a nearby door, check its complexity. -If its complexity is lower than our theme's then -*/ - -/datum/room - var/datum/random_room/room_generator = null - var/x - var/y - var/width - var/height - var/datum/room_theme/room_theme = null - var/generate_doors = 1 //do we want to generate doors for this place? - -/datum/room/New(var/rt, var/_x, var/_y, var/w, var/h, var/doors) - var/gen_type - if(rt) - room_theme = rt - gen_type = room_theme.get_a_room_layout() - if(gen_type) - room_generator = new gen_type(_x,_y,w,h) - generate_doors = doors - x = _x - y = _y - width = w - height = h - -/datum/room/Destroy() - if(room_theme) - qdel(room_theme) - room_theme = null - if(room_generator) - qdel(room_generator) - room_generator = null - return ..() - -/datum/room/proc/apply_to_map(var/xorigin,var/yorigin,var/zorigin, var/datum/random_map/map) - if(room_theme) - for(var/i = 0, i < width, i++) - for(var/j = 0, j < height, j++) - var/truex = xorigin + x + i - 1 - var/truey = yorigin + y + j - 1 - var/cell = map.get_map_cell(x+i,y+j) - room_theme.apply_room_theme(truex,truey,map.map[cell]) - if(generate_doors && room_theme.door_type && !(map.map[cell] == WALL_CHAR || map.map[cell] == ARTIFACT_TURF_CHAR) && (i == 0 || i == width-1 || j == 0 || j == height-1)) - var/isGood = 1 - if(j == 0 || j == height-1) //check horizontally - var/curCell = map.map[map.get_map_cell(x+i-1,y+j)] - if(curCell != WALL_CHAR && curCell != ARTIFACT_TURF_CHAR) - isGood = 0 - curCell = map.map[map.get_map_cell(x+i+1,y+j)] - if(curCell != WALL_CHAR && curCell != ARTIFACT_TURF_CHAR) - isGood = 0 - curCell = map.map[map.get_map_cell(x+i,y+j-1)] - if(curCell == WALL_CHAR || curCell == ARTIFACT_TURF_CHAR) - isGood = 0 - curCell = map.map[map.get_map_cell(x+i,y+j+1)] - if(curCell == WALL_CHAR || curCell == ARTIFACT_TURF_CHAR) - isGood = 0 - if(i == 0 || i == width-1) //verticle - isGood = 1 //if it failed above, it might not fail here. - var/curCell = map.map[map.get_map_cell(x+i,y+j-1)] - if(curCell != WALL_CHAR && curCell != ARTIFACT_TURF_CHAR) - isGood = 0 - curCell = map.map[map.get_map_cell(x+i,y+j+1)] - if(curCell != WALL_CHAR && curCell != ARTIFACT_TURF_CHAR) - isGood = 0 - curCell = map.map[map.get_map_cell(x+i-1,y+j)] - if(curCell == WALL_CHAR || curCell == ARTIFACT_TURF_CHAR) - isGood = 0 - curCell = map.map[map.get_map_cell(x+i+1,y+j)] - if(curCell == WALL_CHAR || curCell == ARTIFACT_TURF_CHAR) - isGood = 0 - if(isGood) - room_theme.apply_room_door(x+i,y+j,zorigin) - if(room_theme) - qdel(room_theme) - room_theme = null - if(room_generator) - room_generator.apply_to_map(xorigin,yorigin,zorigin) - - return 1 - -/datum/room/proc/add_loot(var/xorigin,var/yorigin,var/zorigin,var/type) - if(room_generator && room_generator.apply_loot(xorigin,yorigin,zorigin,type)) - return 1 - var/rx = xorigin+x+rand(width-3) - var/ry = yorigin+y+rand(height-3) - var/turf/T = locate(rx,ry,zorigin) - if(!T || T.density) - return 0 - for(var/obj/o in T) - return 0 - new type(T) - return 1 \ No newline at end of file diff --git a/code/modules/random_map/dungeon/room_generation.dm b/code/modules/random_map/dungeon/room_generation.dm deleted file mode 100644 index fb5802f651b31..0000000000000 --- a/code/modules/random_map/dungeon/room_generation.dm +++ /dev/null @@ -1,38 +0,0 @@ -//a basic room generator. -//room should assume that (x,y) is the bottom left corner -//TODO make more content! -/datum/random_room - var/width = 0 - var/height = 0 - var/x = 0 - var/y = 0 - var/list/item_spawns - -/datum/random_room/New(var/_x,var/_y,var/_width,var/_height) - width = _width - height = _height - x = _x - y = _y - -/datum/random_room/proc/apply_to_map(var/xorigin = 1,var/yorigin = 1,var/zorigin = 1) - return 1 - -/datum/random_room/proc/apply_loot(var/xorigin = 1,var/yorigin = 1,var/zorigin = 1, var/type) - if(!item_spawns || !item_spawns.len) - return 0 - var/place = pick(item_spawns) - if(istype(place,/obj)) //we assume what object we get is some sort of container. - var/obj/O = place - if(O.contents && prob(O.contents.len * (25 / O.w_class))) - return 0 - new type(place) - else if(istype(place,/mob)) - var/mob/M = place - var/atom/movable/A = new type(M.loc) - M.equip_to_appropriate_slot(A) //we don't have to check if its an object or not since hte proc in question already does that - else //its a turf. Put it on it. - var/turf/T = place - if(T.density) //under no circumstances place an item in a wall. - return 0 - new type(place) - return 1 \ No newline at end of file diff --git a/code/modules/random_map/dungeon/room_theme.dm b/code/modules/random_map/dungeon/room_theme.dm deleted file mode 100644 index c4616fc277f0d..0000000000000 --- a/code/modules/random_map/dungeon/room_theme.dm +++ /dev/null @@ -1,76 +0,0 @@ -//room theme is basically the turfs that which a dungeon defaults to making a room out of. -/datum/room_theme - var/wall_type - var/floor_type - var/door_type = /obj/machinery/door/unpowered/simple/iron - var/xorigin = 1 - var/yorigin = 1 - var/zorigin = 1 - var/lock_complexity_min = 0 - var/lock_complexity_max = 0 - var/lock_data - var/layout_chance = 50//chance of having a lyout period - var/list/room_layouts = list() - -/datum/room_theme/New(var/x,var/y,var/z) - xorigin = x - yorigin = y - zorigin = z - if(!lock_data && lock_complexity_max > 0) - lock_data = generateRandomString(rand(lock_complexity_min,lock_complexity_max)) - -/datum/room_theme/proc/apply_room_theme(var/x,var/y,var/value) - var/turf/T = locate(x,y,zorigin) - if(!T) - return 0 - var/path - switch(value) - if(WALL_CHAR) - if(!wall_type) - return - path = wall_type - if(ARTIFACT_TURF_CHAR) - if(!wall_type) - return - path = wall_type - else - if(!floor_type) - return - path = floor_type - T.ChangeTurf(path) - -/datum/room_theme/proc/apply_room_door(var/x,var/y) - if(!door_type) - return 0 - var/turf/T = locate(xorigin+x-1,yorigin+y-1,zorigin) - for(var/i = -1; i <= 1; i++) - for(var/j = -1; j <= 1; j++) - var/turf/check = locate(T.x + i, T.y + j, T.z) - if(!check) - continue - for(var/atom/movable/M in check.contents) - if(!istype(M, /atom/movable/lighting_overlay) && M.density) - return 0 - if(!T) - return 0 - if(ispath(door_type,/obj/machinery/door/unpowered/simple)) - new door_type(T,null,lock_data) - else - new door_type(T) - -/datum/room_theme/proc/get_a_room_layout() - if(room_layouts.len && prob(layout_chance)) - return pickweight(room_layouts) - return null - -/datum/room_theme/metal - wall_type = /turf/simulated/wall - floor_type = /turf/simulated/floor/plating - lock_complexity_max = 2 - layout_chance = 30 - room_layouts = list(/datum/random_room/mimic = 1, /datum/random_room/tomb = 1) - -/datum/room_theme/metal/secure - layout_chance = 100 - lock_complexity_min = 2 - lock_complexity_max = 5 \ No newline at end of file diff --git a/code/modules/random_map/dungeon/rooms/mimic_room.dm b/code/modules/random_map/dungeon/rooms/mimic_room.dm deleted file mode 100644 index 9ef9c3b160375..0000000000000 --- a/code/modules/random_map/dungeon/rooms/mimic_room.dm +++ /dev/null @@ -1,23 +0,0 @@ -/datum/random_room/mimic - var/mimic_type = /obj/structure/closet/crate - var/list/mimic_vars = list() - var/chance_of_mimic = 5 - -/datum/random_room/mimic/apply_to_map(var/xorigin,var/yorigin,var/zorigin) - item_spawns = list() - var/truex = xorigin + x - 1 - var/truey = yorigin + y - 1 - var/turf/T = locate(truex + round(width/2), truey+round(height/2), zorigin) - var/obj/structure/closet/C = new mimic_type(T) - item_spawns += C - if(prob(chance_of_mimic) && mimic_type) - new /mob/living/simple_animal/hostile/mimic/sleeping(get_turf(C),C) - -//BASICALLY: -//Create mimic in center of room. -//put loot inside said mimic - - -//don't want to keep references to said mimic or closet. Would cause qdel issues. -//so since we know nothing should get moved since we placed it we just find it again. -//inefficient yes but will not cause issues with qdel \ No newline at end of file diff --git a/code/modules/random_map/dungeon/rooms/monster_room.dm b/code/modules/random_map/dungeon/rooms/monster_room.dm deleted file mode 100644 index 68345e47e4bdd..0000000000000 --- a/code/modules/random_map/dungeon/rooms/monster_room.dm +++ /dev/null @@ -1,17 +0,0 @@ -//Monster room: Generates a room FILLED with monsters. -/datum/random_room/monster_room - var/list/available_mobs = list(/mob/living/simple_animal/hostile/carp) - -/datum/random_room/monster_room/apply_to_map(var/xorigin,var/yorigin,var/zorigin) - if(available_mobs.len == 0) //no mobs no problem - return 1 - var truex = xorigin + x - 1 - var truey = yorigin + y - 1 - for(var/i = 1, i < width - 1, i++) - for(var/j = 1, j < height - 1, j++) - var/turf/T = locate(truex+i,truey+j,zorigin) - if(!T) - return 0 - var/type = pickweight(available_mobs) - new type(T) - return 1 \ No newline at end of file diff --git a/code/modules/random_map/dungeon/rooms/tomb.dm b/code/modules/random_map/dungeon/rooms/tomb.dm deleted file mode 100644 index f20c4362491ed..0000000000000 --- a/code/modules/random_map/dungeon/rooms/tomb.dm +++ /dev/null @@ -1,49 +0,0 @@ -/datum/random_room/tomb - var/list/corpses = list("human" = 1) - var/direction = 0 //0 horizontal 1 vertical - var/chance_of_corpse = 30 - - - -//attempts to line the walls with coffins with corpses inside -/datum/random_room/tomb/apply_to_map(var/xorigin, var/yorigin, var/zorigin) - item_spawns = list() - direction = pick(0,1) - var/limit = (direction ? height : width) - for(var/i = 0, i < limit - 2, i++) - var/truex = xorigin + (direction ? 0 : i) + x - var/truey = yorigin + (direction ? i : 0) + y - var/turf/T1 = locate(truex,truey,zorigin) - var/turf/T2 = locate(truex + (direction ? width - 3 : 0), truey + (direction ? 0 : height - 3), zorigin) - var/turf/check = locate(truex + (direction ? -1 : 0), truey + (direction ? 0 : -1), zorigin) - if(check.density && !T1.density && !T1.contents.len) - var/obj/structure/closet/coffin/C1 = new(T1) - if(prob(chance_of_corpse)) - var/type = pickweight(corpses) - var/mob/M - if(istext(type)) - M = new /mob/living/carbon/human() - var/mob/living/carbon/human/H = M - H.set_species(type) - H.ChangeToHusk() - else - M = new type() - M.death(0) - M.forceMove(C1) - item_spawns += M - check = locate(truex + (direction ? width - 2 : 0), truey + (direction ? 0 : height - 2), zorigin) - if(check.density && !T2.density && !T2.contents.len) - var/obj/structure/closet/coffin/C2 = new(T2) - if(prob(chance_of_corpse)) - var/type = pickweight(corpses) - var/mob/M - if(istext(type)) - M = new /mob/living/carbon/human() - var/mob/living/carbon/human/H = M - H.set_species(type) - H.ChangeToHusk() - else - M = new type() - M.death(0) - M.forceMove(C2) - item_spawns += M \ No newline at end of file diff --git a/code/modules/random_map/dungeon/winding_dungeon.dm b/code/modules/random_map/dungeon/winding_dungeon.dm deleted file mode 100644 index 35e493878f70d..0000000000000 --- a/code/modules/random_map/dungeon/winding_dungeon.dm +++ /dev/null @@ -1,339 +0,0 @@ -#define BORDER_CHAR -1 -/*basic dungeon algorithm. Based off of http://www.roguebasin.com/index.php?title=Dungeon-Building_Algorithm (specifically the C++ version). - *The jist of how the dungeon algorithm works is as follows: - *Corridors and rooms are both considered features of a dungeon. - *The dungeon continues to spawn rooms and corridors attached to previously created rooms and corridors (by detecting the walls/floors) until the amount of features is equal to a predefined number. - *This number is calculated at the beginning of the dungeon. I went with limit_x*limit_y/100. It seems to work well. - *It is supposed to create a 'winding' aspect to the dungeons. It works.... relatively well? - - *THINGS TO KNOW - *ARTIFACT_TURF_CHAR is used for room walls, used primarily for code used for corridors. - *ARTIFACT_TURF is used to mark gaps in walls for rooms - this is checked so that we don't have three corridors in a row. This isn't done for corridors so that we can have branching paths. - *Rooms will generate a room_theme, a datum that points to a few different types to generate the room with. - *room_themes will also generate stuff inside. This is a random_room datum. - -* TODO: -* Make monster spawning from a datum so I can have general 'group spawns'. -*/ - -/datum/random_map/winding_dungeon - descriptor = "winding dungeon" - wall_type = /turf/simulated/mineral - floor_type = /turf/simulated/floor/tiled - var/room_wall_type = /turf/simulated/wall - var/border_wall_type = /turf/unsimulated/mineral - - target_turf_type = /turf/unsimulated/mask - - var/chance_of_room = 65 - var/chance_of_room_empty = 50 - var/chance_of_door = 30 - var/room_size_min = 4 - var/room_size_max = 8 - var/features_multiplier = 0.02 - var/monster_multiplier = 0.007 - var/loot_multiplier = 0.01 - - var/first_room_x = 45 - var/first_room_y = 1 - var/first_room_width = 10 - var/first_room_height = 10 - - var/monster_faction = "dungeon" //if set, factions of the mobs spawned will be set to this. - //without this they will attack each other. - - var/list/open_positions = list() //organized as: x:y - var/list/room_theme_common = list(/datum/room_theme = 10) - var/list/room_theme_uncommon = list() - var/list/room_theme_rare = list() - var/list/monsters_common = list() - var/list/monsters_uncommon = list() - var/list/monsters_rare = list() - var/list/loot_common = list() - var/list/loot_uncommon = list() - var/list/loot_rare = list() - - var/list/monster_available = list()//turfs that monsters can spawn on. Pregenerated to guard against lag. - - var/list/rooms = list() - var/log = 0 //if set will log information to dd - limit_x = 50 - limit_y = 50 - -/datum/random_map/winding_dungeon/New(var/seed, var/tx, var/ty, var/tz, var/tlx, var/tly, var/do_not_apply, var/do_not_announce, var/list/variable_list) - for(var/variable in variable_list) - if(variable in src.vars) - src.vars[variable] = variable_list[variable] - ..() - -/datum/random_map/winding_dungeon/proc/logging(var/text) - if(log) - log_world(text) - -/datum/random_map/winding_dungeon/proc/get_appropriate_list(var/list/common, var/list/uncommon, var/list/rare, var/x, var/y) - var/distance = sqrt((x - round(first_room_x+first_room_width/2)) ** 2 + (y - round(first_room_y+first_room_height/2)) ** 2) - if(prob(distance)) - if(prob(distance/100) && rare && rare.len) - logging("Returning rare list.") - return rare - else if(uncommon && uncommon.len) - logging("Returning uncommon list.") - return uncommon - logging("Returning common list.") - return common - - -/datum/random_map/winding_dungeon/apply_to_map() - logging("You have [rooms.len] # of rooms") - for(var/datum/room/R in rooms) - if(!priority_process) - sleep(-1) - R.apply_to_map(origin_x,origin_y,origin_z,src) - ..() - var/num_of_loot = round(limit_x * limit_y * loot_multiplier) - logging("Attempting to add [num_of_loot] # of loot") - var/sanity = 0 - if((loot_common && loot_common.len) || (loot_uncommon && loot_uncommon.len) || (loot_rare && loot_rare.len)) //no monsters no problem - while(rooms.len && num_of_loot > 0) - if(!priority_process) - sleep(-1) - var/datum/room/R = pick(rooms) - var/list/loot_list = get_appropriate_list(loot_common, loot_uncommon, loot_rare, round(R.x+R.width/2), round(R.y+R.height/2)) - if(!loot_list || !loot_list.len || R.add_loot(origin_x,origin_y,origin_z,pickweight(loot_list))) - num_of_loot-- - sanity -= 10 //we hahve success so more tries - continue - sanity++ - if(sanity > 100) - logging("Sanity limit reached on loot spawning #[num_of_loot]") - num_of_loot = 0 - - for(var/datum/room/R in rooms) - rooms -= R - qdel(R) - - if((!monsters_common || !monsters_common.len) && (!monsters_uncommon || !monsters_uncommon.len) && (!monsters_rare || !monsters_rare.len)) //no monsters no problem - logging("No monster lists detected. Not spawning monsters.") - return - - var/num_of_monsters = round(limit_x * limit_y * monster_multiplier) - logging("Attempting to add [num_of_monsters] # of monsters") - - while(num_of_monsters > 0) - if(!priority_process) - sleep(-1) - if(!monster_available || !monster_available.len) - logging("There are no available turfs left.") - num_of_monsters = 0 - continue - var/turf/T = pick(monster_available) - monster_available -= T - var/list/monster_list = get_appropriate_list(monsters_common, monsters_uncommon, monsters_rare, T.x, T.y) - if(monster_list && monster_list.len) - var/type = pickweight(monster_list) - logging("Generating a monster of type [type] at position ([T.x],[T.y],[origin_z])") - var/mob/M = new type(T) - if(monster_faction) - M.faction = monster_faction - else - logging("The monster list is empty.") - num_of_monsters-- - - monster_available = null //Get rid of all the references - -/datum/random_map/winding_dungeon/apply_to_turf(var/x, var/y) - . = ..() - var/turf/T = locate((origin_x-1)+x,(origin_y-1)+y,origin_z) - if(T && !T.density) - var/can = 1 - for(var/atom/movable/M in T) - if(istype(M,/mob/living) || M.density) - can = 0 - break - if(can) - monster_available += T - -/datum/random_map/winding_dungeon/generate_map() - logging("Winding Dungeon Generation Start") - //first generate the border - for(var/xx = 1, xx <= limit_x, xx++) - map[get_map_cell(xx,1)] = BORDER_CHAR - map[get_map_cell(xx,limit_y)] = BORDER_CHAR - for(var/yy = 1, yy < limit_y, yy++) - map[get_map_cell(1,yy)] = BORDER_CHAR - map[get_map_cell(limit_x,yy)] = BORDER_CHAR - - var/num_of_features = limit_x * limit_y * features_multiplier - logging("Number of features: [num_of_features]") - var/currentFeatures = 1 - var/result = carve_area(first_room_x,first_room_y,first_room_width,first_room_height, FLOOR_CHAR, ARTIFACT_TURF_CHAR) - logging("First room result: [result ? "Success" : "Failure"]") - var/sanity = 0 - for(sanity = 0, sanity < 1000, sanity++) - if(!priority_process) - sleep(-1) - - if(currentFeatures == num_of_features) - break - /* WHAT THIS CODE IS DOING: - Very basically I'm taking a point off of the coords list and trying to create a room in a certain direction. - What a lot of this code is doing is figuring out where to put the REAL x and y values so that we are in the bottom left corner - of the new room for processing. - */ - var/newx = 0 //the point where this feature meets another one. - var/newy = 0 - var/xmod = 0 //the change in x and y determined to be needed - var/ymod = 0 - var/doorx = 0 //where we put the marker down where things were. - var/doory = 0 - var/width = 1 //width of room - var/height = 1 //height of room. - var/isRoom = 1 //whether we are a room or not - for(var/testing = 0, testing < 1000, testing++) - if(open_positions.len) - var/list/coords = splittext(pick(open_positions), ":") //pop a coord from the list. - newx = text2num(coords[1]) - newy = text2num(coords[2]) - open_positions -= "[newx]:[newy]" - logging("Picked coords ([newx],[newy]) from open_positions. Removing it. (length: [open_positions.len])") - else - newx = rand(1,limit_x) - newy = rand(1,limit_y) - logging("open_positions empty. Using randomly chosen coords ([newx],[newy])") - - //We want to make sure we aren't RIGHT next to another corridor or something. - if(map[get_map_cell(newx,newy+1)] == ARTIFACT_CHAR || map[get_map_cell(newx-1,newy)] == ARTIFACT_CHAR || map[get_map_cell(newx,newy-1)] == ARTIFACT_CHAR || map[get_map_cell(newx+1,newy)] == ARTIFACT_CHAR) - logging("Coords ([newx],[newy]) are too close to an ARTIFACT_CHAR position.") - continue - - - //set up our variables. - width = rand(room_size_min,room_size_max) - height = rand(room_size_min,room_size_max) - isRoom = rand(100) <= chance_of_room - - if(map[get_map_cell(newx, newy)] == ARTIFACT_TURF_CHAR || map[get_map_cell(newx, newy)] == CORRIDOR_TURF_CHAR) - //we are basically checking to see where we're going. Up, right, down or left and finding the bottom left corner. - if(map[get_map_cell(newx,newy+1)] == FLOOR_CHAR || map[get_map_cell(newx,newy+1)] == CORRIDOR_TURF_CHAR) //0 - down - logging("This feature is DOWN") - if(isRoom) //gotta do some math for this one, since the origin is centered. - xmod = -width/2 - else - width = 1 - xmod = 0 - ymod = -height //a lot of this will seem nonsense but I swear its not - doorx = 0 - doory = -1 - else if(map[get_map_cell(newx-1,newy)] == FLOOR_CHAR || map[get_map_cell(newx-1,newy)] == CORRIDOR_TURF_CHAR) //1 - right - logging("This feature is RIGHT") - if(isRoom) - ymod = -height/2 - else - height = 1 - ymod = 0 - xmod = 1 - doorx = 1 - doory = 0 - else if(map[get_map_cell(newx,newy-1)] == FLOOR_CHAR || map[get_map_cell(newx,newy-1)] == CORRIDOR_TURF_CHAR) //2 - up - logging("This feature is UP") - if(isRoom) - xmod = -width/2 - else - width = 1 - xmod = 0 - ymod = 1 - doorx = 0 - doory = 1 - else if(map[get_map_cell(newx+1,newy)] == FLOOR_CHAR || map[get_map_cell(newx+1,newy)] == CORRIDOR_TURF_CHAR) // 3 - left - logging("This feature is LEFT") - if(isRoom) - ymod = -height/2 - else - height = 1 - ymod = 0 - xmod = -width - doorx = -1 - doory = 0 - else - continue - - break - - if(sanity < 1000) //If we haven't looped through everything - logging("Carving out stuff.") - var/wall_char = (isRoom ? ARTIFACT_TURF_CHAR : CORRIDOR_TURF_CHAR) - if(!carve_area(round(newx+xmod),round(newy+ymod),width,height,FLOOR_CHAR,wall_char)) //something went bad - logging("Carving failed at position: ([newx],[newy]) with modifiers ([xmod],[ymod]) and size ([width],[height]). isRoom ([isRoom])") - continue //so just try again - currentFeatures++ - if(isRoom) - logging("Room created at: [newx+xmod], [newy+ymod].") - map[get_map_cell(newx,newy)] = FLOOR_CHAR - map[get_map_cell(newx+doorx,newy+doory)] = ARTIFACT_CHAR - if(rand(0,100) >= chance_of_room_empty) - var/room_result = create_room_features(round(newx+xmod),round(newy+ymod),width,height) - logging("Attempted room feature creation: [room_result ? "Success" : "Failure"]") - else - logging("Creating corridor.") - var/door = get_map_cell(newx,newy) - if(map[door] == ARTIFACT_TURF_CHAR) - map[door] = ARTIFACT_CHAR - logging("Map completed. Loops: [sanity], [currentFeatures] out of [num_of_features] created.") - open_positions.Cut() - -/datum/random_map/winding_dungeon/proc/carve_area(var/truex,var/truey,var/width,var/height,var/char, var/wall_char) - for(var/mode = 0, mode <= 1, mode++) - for(var/ytemp = truey, ytemp < truey + height, ytemp++) - if(!mode && (ytemp < 0 || ytemp > limit_y)) - logging("We are beyond our x limits") - return 0 - for(var/xtemp = truex, xtemp < truex + width, xtemp++) - if(!mode) - if(xtemp < 0 || xtemp > limit_x) - logging("We are beyond our x limits") - return 0 - if(map[get_map_cell(xtemp,ytemp)] != WALL_CHAR) - logging("[xtemp],[ytemp] is not equal to WALL_CHAR") - return 0 - else - if(wall_char && (ytemp == truey || ytemp == truey + height - 1 || xtemp == truex || xtemp == truex + width - 1)) - map[get_map_cell(xtemp,ytemp)] = wall_char - if(!("[xtemp]:[ytemp]" in open_positions)) - open_positions += "[xtemp]:[ytemp]" - logging("Adding \"[xtemp]:[ytemp]\" to open_positions (length: [open_positions.len])") - else - map[get_map_cell(xtemp,ytemp)] = char - return 1 - -/datum/random_map/winding_dungeon/proc/create_room_features(var/rox,var/roy,var/width,var/height) - var/list/room_list = get_appropriate_list(room_theme_common, room_theme_uncommon, room_theme_rare, round(rox+width/2), round(roy+height/2)) - var/theme_type = pickweight(room_list) - if(!theme_type) - return 0 - var/room_theme = new theme_type(origin_x,origin_y,origin_z) - var/datum/room/R = new(room_theme,rox,roy,width,height,rand(0,100) <= chance_of_door) - if(!R) - return 0 - rooms += R - return 1 - -/datum/random_map/winding_dungeon/proc/add_loot(var/xorigin,var/yorigin,var/zorigin,var/type) - var/datum/room/room = pick(rooms) - return room.add_loot(type) - -/datum/random_map/winding_dungeon/get_appropriate_path(var/value) - switch(value) - if(WALL_CHAR) - return wall_type - if(ARTIFACT_TURF_CHAR) - return room_wall_type - if(BORDER_CHAR) - return border_wall_type - else - return floor_type - -/datum/random_map/winding_dungeon/get_map_char(var/value) - . = ..(value) - switch(value) - if(BORDER_CHAR) - . = "#" \ No newline at end of file diff --git a/code/modules/random_map/dungeon/winding_dungeon_verb.dm b/code/modules/random_map/dungeon/winding_dungeon_verb.dm deleted file mode 100644 index 135737d866d1d..0000000000000 --- a/code/modules/random_map/dungeon/winding_dungeon_verb.dm +++ /dev/null @@ -1,108 +0,0 @@ -//Its different so that you can add monsters to said dungeon pretty easily. - -//Works similarly to the supply drop in that you create it to use it instantly. -/client/proc/create_dungeon() - set category = "Fun" - set name = "Create Dungeon" - set desc = "Create and apply a configurable dungeon to a zlevel." - - var/list/vars = list() - - vars["limit_x"] = input("What is the width of your map?") as num - vars["limit_y"] = input("What is the height of your map?") as num - vars["first_room_x"] = input("What should be the first room's X position be?") as num - vars["first_room_y"] = input("What should be the first room's Y position be?") as num - vars["first_room_width"] = input("What should be the first room's width position be?") as num - vars["first_room_height"] = input("What should be the first room's height position be?") as num - if(alert("Would you like to modify generated room/corridor variables?",,"No","Yes") == "Yes") - vars["room_size_min"] = input("What is the smallest size a room should be?") as num - vars["room_size_max"] = input("What is the largest size a room should be?") as num - vars["chance_of_room"] = input("What is the percent chance of a room being generated versus a corridor? (From 0 to 100)") as num - vars["chance_of_door"] = input("What is the percent chance of a room having doors? (From 0 to 100)") as num - vars["chance_of_room_empty"] = input("What is the percent chance that a room will be empty? (From 0 to 100)") as num - if(alert("Would you like to modify generational multipliers?",,"No","Yes") == "Yes") - var/percent = input("What is the percent multiplier of how many features are generated? Default is 2 (WARNING HIGH NUMBERS MAY CAUSE LAG)") as num - vars["features_multiplier"] = percent/100 - percent = input("What is the percent multiplier of how many monsters are generated? Default is 0.7 (WARNING HIGH NUMBERS MAY CAUSE LAG)") as num - vars["monster_multiplier"] = percent/100 - percent = input("What is the percent multiplier of how much loot is generated? Default is 1 (WARNING HIGH NUMBERS MAY CAUSE LAG)") as num - vars["loot_multiplier"] = percent/100 - var/list/common - var/list/uncommon - var/list/rare - var/list/current_list - var/mode = "room_theme" - while(1) - if(mode == "room_theme") - common = list(/datum/room_theme = 10) - else - common = list() - uncommon = list() - rare = list() - current_list = common - switch(mode) - if("room_theme") - if(alert("Would you like to modify what room layouts are used?",,"No","Yes") != "Yes") - mode = "monsters" - continue - if("monsters") - if(alert("Would you like to modify what mobs get spawned?",,"No","Yes") != "Yes") - mode = "loot" - continue - if("loot") - if(alert("Would you like to modify what loot gets spawned?",,"No","Yes") !="Yes") - break - var/list/total_types - switch(mode) - if("room_theme") - total_types = typesof(/datum/room_theme) - if("monsters") - total_types = subtypesof(/mob/living) - if("loot") - total_types = subtypesof(/obj/item) - while(1) - var/layout = input("Pick an item to add to the current pool. Press cancel to finish.") as null|anything in total_types - if(!layout) - if(current_list == common && alert("Would you like to add items to the uncommon pool?",,"No","Yes") == "Yes") - current_list = uncommon - continue - else if(current_list != rare && alert("Would you like to add items to the rare pool?",, "No", "Yes") == "Yes") - current_list = rare - continue - else - break - var/chance = input("What is the weight of this item? Higher weights get picked more frequently. Default is 10",10) as num - if(alert("Do you want to add all subtypes of this item to the current pool as well? They will be weighted the same.",,"No","Yes") == "Yes") - var/list/local_total = typesof(layout) - if(alert("Do you want to only add the subtypes of this item?",,"No","Yes") == "Yes") - local_total -= layout - for(var/a in local_total) - current_list[a] = chance - else - current_list[layout] = chance - - vars["[mode]_common"] = common.Copy() - vars["[mode]_uncommon"] = uncommon.Copy() - vars["[mode]_rare"] = rare.Copy() - switch(mode) - if("room_theme") - mode = "monsters" - if("monsters") - mode = "loot" - else - break - - if(alert("Are you sure you want to create this? It will appear at your position.",,"No","Yes") != "Yes") - return - - var/datum/random_map/winding_dungeon/W = /datum/random_map/winding_dungeon - - for(var/x in 1 to vars["limit_x"]) - for(var/y in 1 to vars["limit_y"]) - sleep(-1) - var/turf/T = locate(usr.x+x-1,usr.y+y-1,usr.z) - if(!T) - to_chat(src, "Error, turf could not be located. Probably out of bounds.") - return - T.ChangeTurf(initial(W.target_turf_type)) - new /datum/random_map/winding_dungeon(null,usr.x, usr.y, usr.z, variable_list = vars) diff --git a/code/modules/random_map/mazes/maze.dm b/code/modules/random_map/mazes/maze.dm deleted file mode 100644 index 557adbd6e8e6e..0000000000000 --- a/code/modules/random_map/mazes/maze.dm +++ /dev/null @@ -1,65 +0,0 @@ -/datum/random_map/maze - descriptor = "maze" - initial_wall_cell = 100 - var/list/checked_coord_cache = list() - var/list/openlist = list() - var/list/closedlist = list() - -/datum/random_map/maze/set_map_size() - // Map has to be odd so that there are walls on all sides. - if(limit_x%2==0) limit_x++ - if(limit_y%2==0) limit_y++ - ..() - -/datum/random_map/maze/generate_map() - - // Grab a random point on the map to begin the maze cutting at. - var/start_x = rand(1,limit_x-2) - var/start_y = rand(1,limit_y-2) - if(start_x%2!=0) start_x++ - if(start_y%2!=0) start_y++ - - // Create the origin cell to start us off. - openlist += new /datum/maze_cell(start_x,start_y) - - while(openlist.len) - // Grab a maze point to use and remove it from the open list. - var/datum/maze_cell/next = pick(openlist) - openlist -= next - if(!isnull(closedlist[next.name])) - continue - - // Preliminary marking-off... - closedlist[next.name] = next - map[get_map_cell(next.x,next.y)] = FLOOR_CHAR - - // Apply the values required and fill gap between this cell and origin point. - if(next.ox && next.oy) - if(next.ox < next.x) - map[get_map_cell(next.x-1,next.y)] = FLOOR_CHAR - else if(next.ox == next.x) - if(next.oy < next.y) - map[get_map_cell(next.x,next.y-1)] = FLOOR_CHAR - else - map[get_map_cell(next.x,next.y+1)] = FLOOR_CHAR - else - map[get_map_cell(next.x+1,next.y)] = FLOOR_CHAR - - // Grab valid neighbors for use in the open list! - add_to_openlist(next.x,next.y+2,next.x,next.y) - add_to_openlist(next.x-2,next.y,next.x,next.y) - add_to_openlist(next.x+2,next.y,next.x,next.y) - add_to_openlist(next.x,next.y-2,next.x,next.y) - - // Cleanup. Map stays in memory for display proc. - checked_coord_cache.Cut() - openlist.Cut() - closedlist.Cut() - -/datum/random_map/maze/proc/add_to_openlist(var/tx, var/ty, var/nx, var/ny) - if(tx < 1 || ty < 1 || tx > limit_x || ty > limit_y || !isnull(checked_coord_cache["[tx]-[ty]"])) - return 0 - checked_coord_cache["[tx]-[ty]"] = 1 - map[get_map_cell(tx,ty)] = DOOR_CHAR - var/datum/maze_cell/new_cell = new(tx,ty,nx,ny) - openlist |= new_cell diff --git a/code/modules/random_map/mazes/maze_cell.dm b/code/modules/random_map/mazes/maze_cell.dm deleted file mode 100644 index da5013c55ad86..0000000000000 --- a/code/modules/random_map/mazes/maze_cell.dm +++ /dev/null @@ -1,18 +0,0 @@ -var/global/maze_cell_count = 0 - -/datum/maze_cell - var/name - var/uid - var/x - var/y - var/ox - var/oy - -/datum/maze_cell/New(var/nx,var/ny,var/nox,var/noy) - maze_cell_count++ - uid = maze_cell_count - name = "cell #[uid]" - x = nx - y = ny - ox = nox - oy = noy \ No newline at end of file diff --git a/code/modules/random_map/noise/desert.dm b/code/modules/random_map/noise/desert.dm deleted file mode 100644 index 7181e83373ad1..0000000000000 --- a/code/modules/random_map/noise/desert.dm +++ /dev/null @@ -1,40 +0,0 @@ -/datum/random_map/noise/desert - descriptor = "desert" - smoothing_iterations = 3 - -/datum/random_map/noise/desert/replace_space - descriptor = "desert (replacement)" - target_turf_type = /turf/space - -/datum/random_map/noise/desert/get_map_char(var/value) - return "[pick(list(",",".","'","`"))]" - -/datum/random_map/noise/desert/get_appropriate_path(var/value) - var/val = min(9,max(0,round((value/cell_range)*10))) - if(isnull(val)) val = 0 - switch(val) - if(0 to 1) - return /turf/simulated/floor/beach/water - else - return /turf/simulated/floor/beach/sand/desert - -/datum/random_map/noise/desert/get_additional_spawns(var/value, var/turf/T) - var/val = min(9,max(0,round((value/cell_range)*10))) - if(isnull(val)) val = 0 - switch(val) - if(2 to 3) - if(prob(60)) - var/grass_path = pick(typesof(/obj/structure/flora/grass)-/obj/structure/flora/grass) - new grass_path(T) - if(prob(5)) - var/mob_type = pick(list(/mob/living/simple_animal/passive/lizard, /mob/living/simple_animal/passive/mouse)) - new mob_type(T) - if(5 to 6) - if(prob(20)) - var/grass_path = pick(typesof(/obj/structure/flora/grass)-/obj/structure/flora/grass) - new grass_path(T) - if(7 to 9) - if(prob(60)) - new /obj/structure/flora/bush(T) - else if(prob(20)) - new /obj/structure/flora/tree/dead(T) diff --git a/code/modules/random_map/noise/magma.dm b/code/modules/random_map/noise/magma.dm deleted file mode 100644 index 8c8bd6a9f4efa..0000000000000 --- a/code/modules/random_map/noise/magma.dm +++ /dev/null @@ -1,44 +0,0 @@ -// This is basically filler at this point. Subsidence and all kinds of fun -// hazards will be included when it is done. -/datum/random_map/noise/volcanism - descriptor = "volcanism" - smoothing_iterations = 6 - target_turf_type = /turf/simulated - -// Get rid of those dumb little single-tile volcanic areas. -/datum/random_map/noise/volcanism/cleanup() - for(var/x = 1, x <= limit_x, x++) - for(var/y = 1, y <= limit_y, y++) - var/current_cell = get_map_cell(x,y) - if(map[current_cell] < 178) - continue - var/count - var/tmp_cell = get_map_cell(x+1,y+1) - if(tmp_cell && map[tmp_cell] >= 178) count++ - tmp_cell = get_map_cell(x-1,y-1) - if(tmp_cell && map[tmp_cell] >= 178) count++ - tmp_cell = get_map_cell(x+1,y-1) - if(tmp_cell && map[tmp_cell] >= 178) count++ - tmp_cell = get_map_cell(x-1,y+1) - if(tmp_cell && map[tmp_cell] >= 178) count++ - tmp_cell = get_map_cell(x-1,y) - if(tmp_cell && map[tmp_cell] >= 178) count++ - tmp_cell = get_map_cell(x,y-1) - if(tmp_cell && map[tmp_cell] >= 178) count++ - tmp_cell = get_map_cell(x+1,y) - if(tmp_cell && map[tmp_cell] >= 178) count++ - tmp_cell = get_map_cell(x,y+1) - if(tmp_cell && map[tmp_cell] >= 178) count++ - if(!count) - map[current_cell] = 177 - -/datum/random_map/noise/volcanism/get_appropriate_path(var/value) - return - -/datum/random_map/noise/volcanism/get_additional_spawns(var/value, var/turf/T) - if(value>=178) - if(istype(T,/turf/simulated/floor/asteroid)) - T.ChangeTurf(/turf/simulated/floor/airless/lava) - else if(istype(T,/turf/simulated/mineral)) - var/turf/simulated/mineral/M = T - M.mined_turf = /turf/simulated/floor/airless/lava \ No newline at end of file diff --git a/code/modules/random_map/noise/noise.dm b/code/modules/random_map/noise/noise.dm deleted file mode 100644 index b5460d8790c6a..0000000000000 --- a/code/modules/random_map/noise/noise.dm +++ /dev/null @@ -1,200 +0,0 @@ -// NOTE: Maps generated with this datum as the base are not DIRECTLY compatible with maps generated from -// the automata, building or maze datums, as the noise generator uses 0-255 instead of WALL_CHAR/FLOOR_CHAR. -// TODO: Consider writing a conversion proc for noise-to-regular maps. -/datum/random_map/noise - descriptor = "distribution map" - var/cell_range = 255 // These values are used to seed ore values rather than to determine a turf type. - var/cell_smooth_amt = 5 - var/random_variance_chance = 25 // % chance of applying random_element. - var/random_element = 0.5 // Determines the variance when smoothing out cell values. - var/cell_base // Set in New() - var/initial_cell_range // Set in New() - var/smoothing_iterations = 0 - var/smooth_single_tiles // Single turfs of different value are not allowed - -/datum/random_map/noise/New() - initial_cell_range = cell_range/5 - cell_base = cell_range/2 - ..() - -/datum/random_map/noise/set_map_size() - // Make sure the grid is a square with limits that are - // (n^2)+1, otherwise diamond-square won't work. - if(!IsPowerOfTwo((limit_x-1))) - limit_x = Ceilp(limit_x, 2) + 1 - if(!IsPowerOfTwo((limit_y-1))) - limit_y = Ceilp(limit_y, 2) + 1 - // Sides must be identical lengths. - if(limit_x > limit_y) - limit_y = limit_x - else if(limit_y > limit_x) - limit_x = limit_y - ..() - -// Diamond-square algorithm. -/datum/random_map/noise/seed_map() - // Instantiate the grid. - for(var/x = 1, x <= limit_x, x++) - for(var/y = 1, y <= limit_y, y++) - map[TRANSLATE_COORD(x,y)] = 0 - - // Now dump in the actual random data. - map[TRANSLATE_COORD(1,1)] = cell_base+rand(initial_cell_range) - map[TRANSLATE_COORD(1,limit_y)] = cell_base+rand(initial_cell_range) - map[TRANSLATE_COORD(limit_x,limit_y)] = cell_base+rand(initial_cell_range) - map[TRANSLATE_COORD(limit_x,1)] = cell_base+rand(initial_cell_range) - -/datum/random_map/noise/generate_map() - // Begin recursion. - subdivide(1,1,1,(limit_y-1)) - -/datum/random_map/noise/get_map_char(var/value) - var/val = min(9,max(0,round((value/cell_range)*10))) - if(isnull(val)) val = 0 - return "[val]" - -/datum/random_map/noise/proc/noise2value(var/value) - return min(9,max(0,round((value/cell_range)*10))) - -/datum/random_map/noise/proc/subdivide(var/iteration,var/x,var/y,var/input_size) - - var/isize = input_size - var/hsize = round(input_size/2) - - /* - (x,y+isize)----(x+hsize,y+isize)----(x+size,y+isize) - | | | - | | | - | | | - (x,y+hsize)----(x+hsize,y+hsize)----(x+isize,y) - | | | - | | | - | | | - (x,y)----------(x+hsize,y)----------(x+isize,y) - */ - // Central edge values become average of corners. - map[TRANSLATE_COORD(x+hsize,y+isize)] = round((\ - map[TRANSLATE_COORD(x,y+isize)] + \ - map[TRANSLATE_COORD(x+isize,y+isize)] \ - )/2) - - map[TRANSLATE_COORD(x+hsize,y)] = round(( \ - map[TRANSLATE_COORD(x,y)] + \ - map[TRANSLATE_COORD(x+isize,y)] \ - )/2) - - map[get_map_cell(x,y+hsize)] = round(( \ - map[TRANSLATE_COORD(x,y+isize)] + \ - map[TRANSLATE_COORD(x,y)] \ - )/2) - - map[TRANSLATE_COORD(x+isize,y+hsize)] = round(( \ - map[TRANSLATE_COORD(x+isize,y+isize)] + \ - map[TRANSLATE_COORD(x+isize,y)] \ - )/2) - - // Centre value becomes the average of all other values + possible random variance. - var/current_cell = TRANSLATE_COORD(x+hsize,y+hsize) - map[current_cell] = round(( \ - map[TRANSLATE_COORD(x+hsize,y+isize)] + \ - map[TRANSLATE_COORD(x+hsize,y)] + \ - map[TRANSLATE_COORD(x,y+hsize)] + \ - map[TRANSLATE_COORD(x+isize,y)] \ - )/4) - - if(prob(random_variance_chance)) - map[current_cell] *= (rand(1,2)==1 ? (1.0-random_element) : (1.0+random_element)) - map[current_cell] = max(0,min(cell_range,map[current_cell])) - - // Recurse until size is too small to subdivide. - if(isize>3) - if(!priority_process) - CHECK_TICK - iteration++ - subdivide(iteration, x, y, hsize) - subdivide(iteration, x+hsize, y, hsize) - subdivide(iteration, x, y+hsize, hsize) - subdivide(iteration, x+hsize, y+hsize, hsize) - -/datum/random_map/noise/cleanup() - var/is_not_border_left - var/is_not_border_right - for(var/i = 1 to smoothing_iterations) - var/list/next_map[limit_x*limit_y] - for(var/x = 1 to limit_x) - for(var/y = 1 to limit_y) - var/current_cell = TRANSLATE_COORD(x,y) - next_map[current_cell] = map[current_cell] - var/val_count = 1 - var/total = map[current_cell] - - is_not_border_left = (x != 1) - is_not_border_right = (x != limit_x) - - // Center row. Center value's already been done above. - if (is_not_border_left) - total += map[TRANSLATE_COORD(x - 1, y)] - ++val_count - if (is_not_border_right) - total += map[TRANSLATE_COORD(x + 1, y)] - ++val_count - - if (y != 1) // top row - total += map[TRANSLATE_COORD(x, y - 1)] - ++val_count - if (is_not_border_left) - total += map[TRANSLATE_COORD(x - 1, y - 1)] - ++val_count - if (is_not_border_right) - total += map[TRANSLATE_COORD(x + 1, y - 1)] - ++val_count - - if (y != limit_y) // bottom row - total += map[TRANSLATE_COORD(x, y + 1)] - ++val_count - if (is_not_border_left) - total += map[TRANSLATE_COORD(x - 1, y + 1)] - ++val_count - if (is_not_border_right) - total += map[TRANSLATE_COORD(x + 1, y + 1)] - ++val_count - - total = round(total/val_count) - - if(abs(map[current_cell]-total) <= cell_smooth_amt) - map[current_cell] = total - else if(map[current_cell] < total) - map[current_cell]+=cell_smooth_amt - else if(map[current_cell] < total) - map[current_cell]-=cell_smooth_amt - map[current_cell] = max(0,min(cell_range,map[current_cell])) - map = next_map - - if(smooth_single_tiles) - var/list/buddies = list() - for(var/x in 1 to limit_x - 1) - for(var/y in 1 to limit_y - 1) - var/mapcell = get_map_cell(x,y) - var/list/neighbors = get_neighbors(x, y) - buddies.Cut() - for(var/cell in neighbors) - if(noise2value(map[cell]) == noise2value(map[mapcell])) - buddies |= cell - if(!length(buddies)) - map[mapcell] = map[pick(neighbors)] - -/datum/random_map/noise/proc/get_neighbors(x, y, include_diagonals) - . = list() - if(!include_diagonals) - var/static/list/ortho_offsets = list(list(-1, 0), list(1, 0), list(0, 1), list(0,-1)) - for(var/list/offset in ortho_offsets) - var/tmp_cell = get_map_cell(x+offset[1],y+offset[2]) - if(tmp_cell) - . += tmp_cell - else - for(var/dx in -1 to 1) - for(var/dy in -1 to 1) - var/tmp_cell = get_map_cell(x+dx,y+dy) - if(tmp_cell) - . += tmp_cell - . -= get_map_cell(x,y) \ No newline at end of file diff --git a/code/modules/random_map/noise/ore.dm b/code/modules/random_map/noise/ore.dm deleted file mode 100644 index 71306dec36be5..0000000000000 --- a/code/modules/random_map/noise/ore.dm +++ /dev/null @@ -1,116 +0,0 @@ -/datum/random_map/noise/ore - descriptor = "ore distribution map" - var/deep_val = 0.8 // Threshold for deep metals, set in new as percentage of cell_range. - var/rare_val = 0.7 // Threshold for rare metal, set in new as percentage of cell_range. - var/chunk_size = 4 // Size each cell represents on map - var/min_surface_ratio = MIN_SURFACE_COUNT_PER_CHUNK - var/min_rare_ratio = MIN_RARE_COUNT_PER_CHUNK - var/min_deep_ratio = MIN_DEEP_COUNT_PER_CHUNK - -/datum/random_map/noise/ore/New(var/seed, var/tx, var/ty, var/tz, var/tlx, var/tly, var/do_not_apply, var/do_not_announce, var/never_be_priority = 0) - rare_val = cell_range * rare_val - deep_val = cell_range * deep_val - ..(seed, tx, ty, tz, (tlx / chunk_size), (tly / chunk_size), do_not_apply, do_not_announce, never_be_priority) - -/datum/random_map/noise/ore/check_map_sanity() - - var/rare_count = 0 - var/surface_count = 0 - var/deep_count = 0 - - // Increment map sanity counters. - for(var/value in map) - if(value < rare_val) - surface_count++ - else if(value < deep_val) - rare_count++ - else - deep_count++ - - var/num_chunks = surface_count + rare_count + deep_count - - // Sanity check. - if(surface_count < (min_surface_ratio * num_chunks)) - admin_notice("Insufficient surface minerals. Rerolling...", R_DEBUG) - return 0 - else if(rare_count < (min_rare_ratio * num_chunks)) - admin_notice("Insufficient rare minerals. Rerolling...", R_DEBUG) - return 0 - else if(deep_count < (min_deep_ratio * num_chunks)) - admin_notice("Insufficient deep minerals. Rerolling...", R_DEBUG) - return 0 - else - return 1 - -/datum/random_map/noise/ore/apply_to_turf(var/x,var/y) - - var/tx = ((origin_x-1)+x)*chunk_size - var/ty = ((origin_y-1)+y)*chunk_size - - for(var/i=0,i~" - if(1) - return "~" - if(2) - return "~" - if(3) - return "[pick(list(".",","))]" - if(4) - return "[pick(list(".",","))]" - if(5) - return "[pick(list(".",","))]" - if(6) - return "[pick(list(".",","))]" - if(7) - return "[pick(list("T","t"))]" - if(8) - return "[pick(list("T","t"))]" - if(9) - return "[pick(list("T","t"))]" - -/datum/random_map/noise/tundra/get_appropriate_path(var/value) - var/val = min(9,max(0,round((value/cell_range)*10))) - if(isnull(val)) val = 0 - switch(val) - if(0 to 4) - return /turf/simulated/floor/beach/water/ocean - else - return /turf/simulated/floor/snow - -/datum/random_map/noise/tundra/get_additional_spawns(var/value, var/turf/T) - var/val = min(9,max(0,round((value/cell_range)*10))) - if(isnull(val)) val = 0 - switch(val) - if(2) - if(prob(5)) - new /mob/living/simple_animal/crab(T) - if(6) - if(prob(60)) - var/grass_path = pick(typesof(/obj/structure/flora/grass)-/obj/structure/flora/grass) - new grass_path(T) - if(prob(5)) - var/mob_type = pick(list(/mob/living/simple_animal/passive/lizard, /mob/living/simple_animal/passive/mouse)) - new mob_type(T) - if(7) - if(prob(60)) - new /obj/structure/flora/bush(T) - else if(prob(30)) - new /obj/structure/flora/tree/pine(T) - else if(prob(20)) - new /obj/structure/flora/tree/dead(T) - if(8) - if(prob(70)) - new /obj/structure/flora/tree/pine(T) - else if(prob(30)) - new /obj/structure/flora/tree/dead(T) - else - new /obj/structure/flora/bush(T) - if(9) - new /obj/structure/flora/tree/pine(T) diff --git a/code/modules/random_map/random_map.dm b/code/modules/random_map/random_map.dm deleted file mode 100644 index ebc8e992bb8f2..0000000000000 --- a/code/modules/random_map/random_map.dm +++ /dev/null @@ -1,221 +0,0 @@ -// Generates cave systems for the asteroid, and places ore tiles. -var/global/list/random_maps = list() -var/global/list/map_count = list() - -/datum/random_map - - // Strings. - var/name // Set in New() - var/descriptor = "random map" // Display name. - - // Locator/value vars. - var/initial_cell_char = FLOOR_CHAR - var/initial_wall_cell = 100 // % Chance that a cell will be seeded as a wall. - var/max_attempts = 5 // Fail if a sane map isn't generated by this point. - var/origin_x = 1 // Origin point, left. - var/origin_y = 1 // Origin point, bottom. - var/origin_z = 1 // Target Z-level. - var/limit_x = 128 // Default x size. - var/limit_y = 128 // Default y size. - var/auto_apply = 1 - var/preserve_map = 1 - - // Turf paths. - var/wall_type = /turf/simulated/wall - var/floor_type = /turf/simulated/floor - var/target_turf_type - - var/area/use_area // If set, turfs will be put in this area. If set to type, new instance will be spawned for the map - - // Storage for the final iteration of the map. - var/list/map = list() // Actual map. - - // If set, all sleep(-1) calls will be skipped. - // Test to see if rand_seed() can be used reliably. - var/priority_process - -/datum/random_map/New(var/seed, var/tx, var/ty, var/tz, var/tlx, var/tly, var/do_not_apply, var/do_not_announce, var/never_be_priority = 0, var/used_area) - - // Store this for debugging. - if(!map_count[descriptor]) - map_count[descriptor] = 1 - else - map_count[descriptor]++ - name = "[descriptor] #[map_count[descriptor]]" - if(preserve_map) random_maps[name] = src - - // Get origins for applying the map later. - set_origins(tx, ty, tz) - if(tlx) limit_x = tlx - if(tly) limit_y = tly - - if(used_area) - if(ispath(used_area)) - use_area = new(used_area) - else - use_area = used_area - - if(do_not_apply) - auto_apply = null - - // Initialize map. - set_map_size() - - var/start_time = world.timeofday - if(!do_not_announce) admin_notice("Generating [name].", R_DEBUG) - CHECK_TICK - - // Testing needed to see how reliable this is (asynchronous calls, called during worldgen), DM ref is not optimistic - if(seed) - rand_seed(seed) - priority_process = !never_be_priority - - for(var/i = 0;i[capitalize(name)] generation completed in [round(0.1*(world.timeofday-start_time),0.1)] seconds.", R_DEBUG) - return - if(!do_not_announce) admin_notice("[capitalize(name)] failed to generate ([round(0.1*(world.timeofday-start_time),0.1)] seconds): could not produce sane map.", R_DEBUG) - -/datum/random_map/proc/get_map_cell(var/x,var/y) - if(!map) - set_map_size() - . = ((y-1)*limit_x)+x - if((. < 1) || (. > map.len)) - return null - -/datum/random_map/proc/get_map_char(var/value) - switch(value) - if(WALL_CHAR) - return "#" - if(FLOOR_CHAR) - return "." - if(DOOR_CHAR) - return "D" - if(ROOM_TEMP_CHAR) - return "+" - if(MONSTER_CHAR) - return "M" - if(ARTIFACT_TURF_CHAR) - return "_" - if(ARTIFACT_CHAR) - return "A" - else - return " " - -/datum/random_map/proc/display_map(atom/user) - - if(!user) - user = world - - var/dat = "+------+
              " - for(var/x = 1, x <= limit_x, x++) - for(var/y = 1, y <= limit_y, y++) - var/current_cell = get_map_cell(x,y) - if(current_cell) - dat += get_map_char(map[current_cell]) - dat += "
              " - to_chat(user, "[dat]+------+
              ") - -/datum/random_map/proc/set_map_size() - map = list() - map.len = limit_x * limit_y - -/datum/random_map/proc/seed_map() - for(var/x = 1, x <= limit_x, x++) - for(var/y = 1, y <= limit_y, y++) - var/current_cell = get_map_cell(x,y) - if(prob(initial_wall_cell)) - map[current_cell] = WALL_CHAR - else - map[current_cell] = initial_cell_char - -/datum/random_map/proc/clear_map() - for(var/x = 1, x <= limit_x, x++) - for(var/y = 1, y <= limit_y, y++) - map[get_map_cell(x,y)] = 0 - -/datum/random_map/proc/generate() - seed_map() - generate_map() - if(check_map_sanity()) - cleanup() - if(auto_apply) - apply_to_map() - return 1 - return 0 - -// Unused for basic map. -/datum/random_map/proc/generate_map() - return 1 - -/datum/random_map/proc/check_map_sanity() - return 1 - -/datum/random_map/proc/set_origins(var/tx, var/ty, var/tz) - origin_x = tx ? tx : 1 - origin_y = ty ? ty : 1 - origin_z = tz ? tz : 1 - -/datum/random_map/proc/apply_to_map() - if(!origin_x) origin_x = 1 - if(!origin_y) origin_y = 1 - if(!origin_z) origin_z = 1 - - for(var/x = 1, x <= limit_x, x++) - for(var/y = 1, y <= limit_y, y++) - if(!priority_process) - CHECK_TICK - apply_to_turf(x,y) - -/datum/random_map/proc/apply_to_turf(var/x,var/y) - var/current_cell = get_map_cell(x,y) - if(!current_cell) - return 0 - var/turf/T = locate((origin_x-1)+x,(origin_y-1)+y,origin_z) - if(!T || (target_turf_type && !istype(T,target_turf_type))) - return 0 - var/newpath = get_appropriate_path(map[current_cell]) - if(newpath) - T.ChangeTurf(newpath) - get_additional_spawns(map[current_cell],T,get_spawn_dir(x, y)) - if(use_area) - ChangeArea(T, use_area) - return T - -/datum/random_map/proc/get_spawn_dir() - return 0 - -/datum/random_map/proc/get_appropriate_path(var/value) - switch(value) - if(FLOOR_CHAR) - return floor_type - if(WALL_CHAR) - return wall_type - -/datum/random_map/proc/get_additional_spawns(var/value, var/turf/T) - if(value == DOOR_CHAR) - new /obj/machinery/door/airlock(T) - -/datum/random_map/proc/cleanup() - return - -/datum/random_map/proc/overlay_with(var/datum/random_map/target_map, var/tx, var/ty) - if(!map.len || !istype(target_map)) - return - tx-- // Update origin so that x/y index - ty-- // doesn't push it off-kilter by one. - for(var/x = 1, x <= limit_x, x++) - for(var/y = 1, y <= limit_y, y++) - var/current_cell = get_map_cell(x,y) - if(!current_cell) - continue - if(tx+x > target_map.limit_x) - continue - if(ty+y > target_map.limit_y) - continue - target_map.map[target_map.get_map_cell(tx+x,ty+y)] = map[current_cell] - handle_post_overlay_on(target_map,tx,ty) - - -/datum/random_map/proc/handle_post_overlay_on(var/datum/random_map/target_map, var/tx, var/ty) - return diff --git a/code/modules/random_map/random_map_verbs.dm b/code/modules/random_map/random_map_verbs.dm deleted file mode 100644 index f94bcd458948e..0000000000000 --- a/code/modules/random_map/random_map_verbs.dm +++ /dev/null @@ -1,108 +0,0 @@ -/client/proc/print_random_map() - set category = "Debug" - set name = "Display Random Map" - set desc = "Show the contents of a random map." - - if(!holder) return - - var/choice = input("Choose a map to display.") as null|anything in random_maps - if(!choice) - return - var/datum/random_map/M = random_maps[choice] - if(istype(M)) - M.display_map(usr) - -/client/proc/delete_random_map() - set category = "Debug" - set name = "Delete Random Map" - set desc = "Delete a random map." - - if(!holder) return - - var/choice = input("Choose a map to delete.") as null|anything in random_maps - if(!choice) - return - var/datum/random_map/M = random_maps[choice] - random_maps[choice] = null - if(istype(M)) - message_admins("[key_name_admin(usr)] has deleted [M.name].") - log_admin("[key_name(usr)] has deleted [M.name].") - qdel(M) - -/client/proc/create_random_map() - set category = "Debug" - set name = "Create Random Map" - set desc = "Create a random map." - - if(!holder) return - - var/map_datum = input("Choose a map to create.") as null|anything in typesof(/datum/random_map)-/datum/random_map - if(!map_datum) - return - - var/datum/random_map/M - if(alert("Do you wish to customise the map?",,"Yes","No") == "Yes") - var/seed = input("Seed? (blank for none)") as text|null - var/lx = input("X-size? (blank for default)") as num|null - var/ly = input("Y-size? (blank for default)") as num|null - M = new map_datum(seed,null,null,null,lx,ly,1) - else - M = new map_datum(null,null,null,null,null,null,1) - - if(M) - message_admins("[key_name_admin(usr)] has created [M.name].") - log_admin("[key_name(usr)] has created [M.name].") - -/client/proc/apply_random_map() - set category = "Debug" - set name = "Apply Random Map" - set desc = "Apply a map to the game world." - - if(!holder) return - - var/choice = input("Choose a map to apply.") as null|anything in random_maps - if(!choice) - return - var/datum/random_map/M = random_maps[choice] - if(istype(M)) - var/tx = input("X? (default to current turf)") as num|null - var/ty = input("Y? (default to current turf)") as num|null - var/tz = input("Z? (default to current turf)") as num|null - if(isnull(tx) || isnull(ty) || isnull(tz)) - var/turf/T = get_turf(usr) - tx = !isnull(tx) ? tx : T.x - ty = !isnull(ty) ? ty : T.y - tz = !isnull(tz) ? tz : T.z - message_admins("[key_name_admin(usr)] has applied [M.name] at x[tx],y[ty],z[tz].") - log_admin("[key_name(usr)] has applied [M.name] at x[tx],y[ty],z[tz].") - M.set_origins(tx,ty,tz) - M.apply_to_map() - -/client/proc/overlay_random_map() - set category = "Debug" - set name = "Overlay Random Map" - set desc = "Apply a map to another map." - - if(!holder) return - - var/choice = input("Choose a map as base.") as null|anything in random_maps - if(!choice) - return - var/datum/random_map/base_map = random_maps[choice] - - choice = null - choice = input("Choose a map to overlay.") as null|anything in random_maps - if(!choice) - return - - var/datum/random_map/overlay_map = random_maps[choice] - - if(istype(base_map) && istype(overlay_map)) - var/tx = input("X? (default to 1)") as num|null - var/ty = input("Y? (default to 1)") as num|null - if(!tx) tx = 1 - if(!ty) ty = 1 - message_admins("[key_name_admin(usr)] has applied [overlay_map.name] to [base_map.name] at x[tx],y[ty].") - log_admin("[key_name(usr)] has applied [overlay_map.name] to [base_map.name] at x[tx],y[ty].") - overlay_map.overlay_with(base_map,tx,ty) - base_map.display_map(usr) diff --git a/code/modules/reagents/Chemistry-Colours.dm b/code/modules/reagents/Chemistry-Colours.dm deleted file mode 100644 index 431a2a82d2d88..0000000000000 --- a/code/modules/reagents/Chemistry-Colours.dm +++ /dev/null @@ -1,18 +0,0 @@ -/datum/reagents/proc/get_color() - if(!reagent_list || !reagent_list.len) - return "#ffffffff" - if(reagent_list.len == 1) // It's pretty common and saves a lot of work - var/datum/reagent/R = reagent_list[1] - return R.color + num2hex(R.alpha) - - var/list/colors = list(0, 0, 0, 0) - var/tot_w = 0 - for(var/datum/reagent/R in reagent_list) - var/hex = uppertext(R.color) + num2hex(R.alpha) - colors[1] += hex2num(copytext_char(hex, 2, 4)) * R.volume * R.color_weight - colors[2] += hex2num(copytext_char(hex, 4, 6)) * R.volume * R.color_weight - colors[3] += hex2num(copytext_char(hex, 6, 8)) * R.volume * R.color_weight - colors[4] += hex2num(copytext_char(hex, 8, 10)) * R.volume * R.color_weight - tot_w += R.volume * R.color_weight - - return rgb(colors[1] / tot_w, colors[2] / tot_w, colors[3] / tot_w, colors[4] / tot_w) diff --git a/code/modules/reagents/Chemistry-Grinder.dm b/code/modules/reagents/Chemistry-Grinder.dm deleted file mode 100644 index 4eabc59b6bcc0..0000000000000 --- a/code/modules/reagents/Chemistry-Grinder.dm +++ /dev/null @@ -1,278 +0,0 @@ -/obj/machinery/reagentgrinder - name = "reagent grinder" - desc = "An industrial reagent grinder with heavy carbide cutting blades." - icon = 'icons/obj/kitchen.dmi' - icon_state = "rgrinder" - layer = BELOW_OBJ_LAYER - density = TRUE - anchored = TRUE - idle_power_usage = 5 - active_power_usage = 100 - obj_flags = OBJ_FLAG_ANCHORABLE - construct_state = /decl/machine_construction/default/panel_closed - machine_name = "reagent grinder" - machine_desc = "An industrial grinder with durable blades that shreds objects into their component reagents." - - var/skill = SKILL_CHEMISTRY - var/grind_sound = 'sound/machines/grinder.ogg' - var/list/items = list() - var/max_items = 10 - var/max_item_size = ITEM_SIZE_HUGE - var/list/banned_items = list() - var/list/storage_types = list( - /obj/item/storage/pill_bottle, - /obj/item/storage/sheetsnatcher, - /obj/item/storage/plants - ) - var/list/allowed_containers = list( - /obj/item/reagent_containers/glass/beaker - ) - var/list/banned_containers = list( - /obj/item/reagent_containers/glass/beaker/bowl, - /obj/item/reagent_containers/glass/beaker/vial - ) - var/grind_time = 6 SECONDS - var/obj/item/reagent_containers/container - var/grinding - - -/obj/machinery/reagentgrinder/proc/detach(mob/user) - if (!container) - return - if (user) - user.put_in_hands(container) - else - container.dropInto(get_turf(src)) - container = null - update_icon() - - -/obj/machinery/reagentgrinder/proc/eject() - for (var/obj/item/I in items) - I.dropInto(get_turf(src)) - items.Cut() - - -/obj/machinery/reagentgrinder/proc/reset_machine(mob/user) - grinding = FALSE - update_icon() - if (user) - interact(user) - - -/obj/machinery/reagentgrinder/proc/grind(mob/user) - if (grinding) - return - power_change() - if (stat & (NOPOWER|BROKEN)) - return - if (!container?.reagents || container.reagents.total_volume >= container.reagents.maximum_volume) - return - playsound(src, grind_sound, 75, 1) - grinding = TRUE - update_icon() - - addtimer(CALLBACK(src, .proc/reset_machine, user), grind_time) - var/skill_multiplier = CLAMP01(0.5 + (user.get_skill_value(skill) - 1) * 0.167) - for (var/obj/item/I in items) - if (container.reagents.total_volume >= container.reagents.maximum_volume) - break - if (I.reagents?.total_volume) - I.reagents.trans_to(container, I.reagents.total_volume, skill_multiplier) - I.reagents.clear_reagents() - var/material/M = I.get_material() - if (M?.chem_products?.len) - if (isstack(I)) - var/sheet_volume = 0 - for (var/chem in M.chem_products) - sheet_volume += M.chem_products[chem] * skill_multiplier - var/obj/item/stack/material/S = I - var/used_sheets = min(Ceil((container.reagents.maximum_volume - container.reagents.total_volume) / sheet_volume), S.get_amount()) - var/used_all = used_sheets == S.get_amount() - S.use(used_sheets) - for (var/chem in M.chem_products) - container.reagents.add_reagent(chem, used_sheets * M.chem_products[chem] * skill_multiplier) - if (!used_all) - break - else - for (var/chem in M.chem_products) - container.reagents.add_reagent(chem, M.chem_products[chem] * skill_multiplier) - items -= I - qdel(I) - - -/obj/machinery/reagentgrinder/proc/grindable(obj/item/I) - if (I.reagents?.total_volume) - return TRUE - var/material/M = I.get_material() - if (M?.chem_products?.len) - return TRUE - return FALSE - - -/obj/machinery/reagentgrinder/on_update_icon() - if (grinding) - icon_state = "[initial(icon_state)]_grinding" - else if (container) - icon_state = "[initial(icon_state)]_beaker" - else - icon_state = "[initial(icon_state)]" - - -/obj/machinery/reagentgrinder/attackby(obj/item/I, mob/user) - if((. = component_attackby(I, user))) - detach() - eject() - - else if (is_type_in_list(I, allowed_containers) && !is_type_in_list(I, banned_containers)) - if (container) - to_chat(user, SPAN_WARNING("\The [src] already has \a [container].")) - else if (user.unEquip(I, src)) - container = I - update_icon() - updateDialog() - - else if (is_type_in_list(I, storage_types)) - var/obj/item/storage/S = I - if (!S.contents.len) - to_chat(user, SPAN_WARNING("\The [S] is empty.")) - else if (items.len >= max_items) - to_chat(user, SPAN_WARNING("\The item hopper on \the [src] is full.")) - else - var/list/removed = list() - for (var/obj/item/G in S) - if (G.w_class > max_item_size || is_type_in_list(G, banned_items)) - continue - if (!grindable(G)) - continue - S.remove_from_storage(G, src, 1) - removed += G - items += G - if (items.len >= max_items) - break - if (removed.len) - S.finish_bulk_removal() - var/full = items.len >= max_items - user.visible_message( - "\The [user] empties things from \the [S] into \the [src].", - "You empty [english_list(removed)] from \the [S] into \the [src][full ? ", filling it to capacity" : ""]." - ) - updateDialog() - else - to_chat(user, SPAN_WARNING("Nothing more in \the [S] will go into \the [src].")) - - else if (I.w_class > max_item_size) - to_chat(user, SPAN_WARNING("\The [I] is too large for \the [src].")) - - else if (items.len >= max_items) - to_chat(user, SPAN_WARNING("\The [src] is full.")) - - else if (is_type_in_list(I, banned_items) || !grindable(I)) - to_chat(user, SPAN_WARNING("\The [src] cannot grind \the [I].")) - - else if (user.unEquip(I, src)) - items += I - updateUsrDialog() - - return TRUE - - -/obj/machinery/reagentgrinder/interface_interact(mob/user) - interact(user) - return TRUE - - -/obj/machinery/reagentgrinder/interact(mob/user) - if (inoperable()) - return - user.set_machine(src) - var/window = list() - if (grinding) - window += "Working, please wait..." - else - window += "Processing Hopper" - if (!items.len) - window += " (empty)" - else - window += "
              (grind) (eject)
              " - for (var/obj/item/I in items) - window += "
              \An [I]" - if (isstack(I)) - var/obj/item/stack/material/S = I - window += " ([S.get_amount()])" - window += "

              Chemical Container" - if (!container) - window += " (not attached)" - else - window += " (\an [container], [Percent(container.reagents.total_volume, container.reagents.maximum_volume, 1)]% full)" - window += "
              (detach)
              " - for (var/datum/reagent/R in container.reagents.reagent_list) - window += "
              [R.volume] - [R.name]" - - window = strip_improper("[name][JOINTEXT(window)]") - var/datum/browser/popup = new(user, "reagentgrinder", "Reagent Grinder") - popup.set_content(window) - popup.open() - onclose(user, "reagentgrinder") - - -/obj/machinery/reagentgrinder/OnTopic(user, href_list) - if (user && href_list && href_list["action"]) - switch (href_list["action"]) - if ("grind") - grind(user) - if ("eject") - eject() - if ("detach") - detach(user) - interact(user) - return TOPIC_REFRESH - - -/obj/machinery/reagentgrinder/AltClick(mob/user) - if(CanDefaultInteract(user)) - detach(user) - else - ..() - - -/obj/machinery/reagentgrinder/CtrlClick(mob/user) - if(anchored && CanDefaultInteract(user)) - grind(user) - else - ..() - - -/obj/machinery/reagentgrinder/CtrlAltClick(mob/user) - if(CanDefaultInteract(user)) - eject(user) - else - ..() - - -/obj/machinery/reagentgrinder/RefreshParts() - ..() - - -/obj/machinery/reagentgrinder/juicer - name = "blender" - desc = "A high-speed combination blender/juicer." - icon_state = "juicer" - density = FALSE - anchored = FALSE - grind_sound = 'sound/machines/juicer.ogg' - max_item_size = ITEM_SIZE_NORMAL - skill = SKILL_COOKING - banned_items = list( - /obj/item/stack/material - ) - storage_types = list( - /obj/item/storage/pill_bottle, - /obj/item/storage/plants - ) - allowed_containers = list( - /obj/item/reagent_containers/glass/beaker, - /obj/item/reagent_containers/food/drinks/shaker - ) - machine_name = "blender" - machine_desc = "Blends or juices food placed inside it - useful for things like flour. Can't process raw material sheets." diff --git a/code/modules/reagents/Chemistry-Holder.dm b/code/modules/reagents/Chemistry-Holder.dm deleted file mode 100644 index 134648b5267c9..0000000000000 --- a/code/modules/reagents/Chemistry-Holder.dm +++ /dev/null @@ -1,501 +0,0 @@ -GLOBAL_DATUM_INIT(temp_reagents_holder, /obj, new) - -/datum/reagents - var/list/datum/reagent/reagent_list = list() - var/total_volume = 0 - var/maximum_volume = 120 - var/atom/my_atom = null - var/del_info - -/datum/reagents/New(var/maximum_volume = 120, var/atom/my_atom) - if(!istype(my_atom)) - CRASH("Invalid reagents holder: [log_info_line(my_atom)]") - ..() - src.my_atom = my_atom - src.maximum_volume = maximum_volume - -/datum/reagents/Destroy() - . = ..() - del_info = "[my_atom]([reagent_list?.len||"_"]):[my_atom?.x||"_"],[my_atom?.y||"_"],[my_atom?.z||"_"]" - UNQUEUE_REACTIONS(src) // While marking for reactions should be avoided just before deleting if possible, the async nature means it might be impossible. - QDEL_NULL_LIST(reagent_list) - my_atom = null - -/* Internal procs */ -/datum/reagents/proc/get_free_space() // Returns free space. - return maximum_volume - total_volume - -/datum/reagents/proc/get_master_reagent() // Returns reference to the reagent with the biggest volume. - var/the_reagent = null - var/the_volume = 0 - - for(var/datum/reagent/A in reagent_list) - if(A.volume > the_volume) - the_volume = A.volume - the_reagent = A - - return the_reagent - -/datum/reagents/proc/get_master_reagent_name() // Returns the name of the reagent with the biggest volume. - var/the_name = null - var/the_volume = 0 - for(var/datum/reagent/A in reagent_list) - if(A.volume > the_volume) - the_volume = A.volume - the_name = A.name - - return the_name - -/datum/reagents/proc/get_master_reagent_type() // Returns the type of the reagent with the biggest volume. - var/the_type = null - var/the_volume = 0 - for(var/datum/reagent/A in reagent_list) - if(A.volume > the_volume) - the_volume = A.volume - the_type = A.type - - return the_type - -/datum/reagents/proc/update_total() // Updates volume. - total_volume = 0 - for(var/datum/reagent/R in reagent_list) - if(R.volume < MINIMUM_CHEMICAL_VOLUME) - del_reagent(R.type) - else - total_volume += R.volume - return - -/datum/reagents/proc/process_reactions() - - if(!my_atom) // No reactions in temporary holders - return 0 - - if(!my_atom.loc) //No reactions inside GC'd containers - return 0 - - if(my_atom.atom_flags & ATOM_FLAG_NO_REACT) // No reactions here - return 0 - - var/reaction_occured = FALSE - var/list/eligible_reactions = list() - - var/temperature = my_atom ? my_atom.temperature : T20C - for(var/thing in reagent_list) - var/datum/reagent/R = thing - if(R.custom_temperature_effects(temperature, src)) - reaction_occured = TRUE - continue - - // Check if the reagent is decaying or not. - var/list/replace_self_with - var/replace_message - var/replace_sound - - if(LAZYLEN(R.chilling_products) && temperature <= R.chilling_point) - replace_self_with = R.chilling_products - replace_message = "\The [lowertext(R.name)] [R.chilling_message]" - replace_sound = R.chilling_sound - - else if(LAZYLEN(R.heating_products) && temperature >= R.heating_point) - replace_self_with = R.heating_products - replace_message = "\The [lowertext(R.name)] [R.heating_message]" - replace_sound = R.heating_sound - - // If it is, handle replacing it with the decay product. - if(replace_self_with) - var/replace_amount = R.volume / LAZYLEN(replace_self_with) - del_reagent(R.type) - for(var/product in replace_self_with) - add_reagent(product, replace_amount) - reaction_occured = TRUE - - if(my_atom) - if(replace_message) - my_atom.visible_message("[icon2html(my_atom, viewers(get_turf(my_atom)))] [replace_message]") - if(replace_sound) - playsound(my_atom, replace_sound, 80, 1) - - else // Otherwise, collect all possible reactions. - eligible_reactions |= SSchemistry.reactions_by_id[R.type] - - var/list/active_reactions = list() - - for(var/datum/chemical_reaction/C in eligible_reactions) - if(C.can_happen(src)) - active_reactions[C] = 1 // The number is going to be 1/(fraction of remaining reagents we are allowed to use), computed below - reaction_occured = 1 - - var/list/used_reagents = list() - // if two reactions share a reagent, each is allocated half of it, so we compute this here - for(var/datum/chemical_reaction/C in active_reactions) - var/list/adding = C.get_used_reagents() - for(var/R in adding) - LAZYADD(used_reagents[R], C) - - for(var/R in used_reagents) - var/counter = length(used_reagents[R]) - if(counter <= 1) - continue // Only used by one reaction, so nothing we need to do. - for(var/datum/chemical_reaction/C in used_reagents[R]) - active_reactions[C] = max(counter, active_reactions[C]) - counter-- //so the next reaction we execute uses more of the remaining reagents - // Note: this is not guaranteed to maximize the size of the reactions we do (if one reaction is limited by reagent A, we may be over-allocating reagent B to it) - // However, we are guaranteed to fully use up the most profligate reagent if possible. - // Further reactions may occur on the next tick, when this runs again. - - for(var/thing in active_reactions) - var/datum/chemical_reaction/C = thing - C.process(src, active_reactions[C]) - - for(var/thing in active_reactions) - var/datum/chemical_reaction/C = thing - C.post_reaction(src) - - update_total() - - if(reaction_occured) - HANDLE_REACTIONS(src) // Check again in case the new reagents can react again - - return reaction_occured - -/* Holder-to-chemical */ - -/datum/reagents/proc/add_reagent(var/reagent_type, var/amount, var/data = null, var/safety = 0) - if(!isnum(amount) || amount <= 0) - return 0 - - update_total() - amount = min(amount, get_free_space()) - - for(var/datum/reagent/current in reagent_list) - if(current.type == reagent_type) - current.volume += amount - if(!isnull(data)) // For all we know, it could be zero or empty string and meaningful - current.mix_data(data, amount) - update_total() - if(!safety) - HANDLE_REACTIONS(src) - if(my_atom) - my_atom.on_reagent_change() - return 1 - - if(ispath(reagent_type, /datum/reagent)) - var/datum/reagent/R = new reagent_type(src) - reagent_list += R - R.volume = amount - R.initialize_data(data) - update_total() - if(!safety) - HANDLE_REACTIONS(src) - if(my_atom) - my_atom.on_reagent_change() - return 1 - else - warning("[log_info_line(my_atom)] attempted to add a reagent of type '[reagent_type]' which doesn't exist. ([usr])") - return 0 - -/datum/reagents/proc/remove_reagent(var/reagent_type, var/amount, var/safety = 0) - if(!isnum(amount)) - return 0 - for(var/datum/reagent/current in reagent_list) - if(current.type == reagent_type) - current.volume -= amount // It can go negative, but it doesn't matter - update_total() // Because this proc will delete it then - if(!safety) - HANDLE_REACTIONS(src) - if(my_atom) - my_atom.on_reagent_change() - return 1 - return 0 - -/datum/reagents/proc/del_reagent(var/reagent_type) - for(var/datum/reagent/current in reagent_list) - if (current.type == reagent_type) - reagent_list -= current - qdel(current) - update_total() - if(my_atom) - my_atom.on_reagent_change() - return 0 - -/datum/reagents/proc/has_reagent(var/reagent_type, var/amount = null) - for(var/datum/reagent/current in reagent_list) - if(current.type == reagent_type) - if((isnull(amount) && current.volume > 0) || current.volume >= amount) - return 1 - else - return 0 - return 0 - -/datum/reagents/proc/has_any_reagent(var/list/check_reagents) - for(var/datum/reagent/current in reagent_list) - if(current.type in check_reagents) - if(current.volume >= check_reagents[current.type]) - return 1 - else - return 0 - return 0 - -/datum/reagents/proc/has_all_reagents(var/list/check_reagents) - //this only works if check_reagents has no duplicate entries... hopefully okay since it expects an associative list - var/missing = check_reagents.len - for(var/datum/reagent/current in reagent_list) - if(current.type in check_reagents) - if(current.volume >= check_reagents[current.type]) - missing-- - return !missing - -/datum/reagents/proc/clear_reagents() - for(var/datum/reagent/current in reagent_list) - del_reagent(current.type) - return - -/datum/reagents/proc/get_reagent(var/reagent_type) - for(var/datum/reagent/current in reagent_list) - if(current.type == reagent_type) - return current - return - -/datum/reagents/proc/get_reagent_amount(reagent_type, allow_subtypes) - for (var/datum/reagent/current in reagent_list) - if(current.type == reagent_type) - return current.volume - return 0 - - -/datum/reagents/proc/get_reagent_amount_list(reagent_type) - var/list/result = list() - for (var/datum/reagent/reagent as anything in reagent_list) - if (istype(reagent, reagent_type)) - result[reagent.type] = reagent.volume - return result - - -/datum/reagents/proc/get_data(var/reagent_type) - for(var/datum/reagent/current in reagent_list) - if(current.type == reagent_type) - return current.get_data() - return 0 - -/datum/reagents/proc/get_overdose(var/datum/reagent/current) - if(current) - return initial(current.overdose) - return 0 - -/datum/reagents/proc/get_reagents(scannable_only = 0, precision) - . = list() - for(var/datum/reagent/current in reagent_list) - if(scannable_only && !current.scannable) - continue - var/volume = current.volume - if(precision) - volume = round(volume, precision) - if(volume) - . += "[current.name] ([volume])" - return english_list(., "EMPTY", "", ", ", ", ") - -/* Holder-to-holder and similar procs */ - -/datum/reagents/proc/remove_any(var/amount = 1) // Removes up to [amount] of reagents from [src]. Returns actual amount removed. - amount = min(amount, total_volume) - - if(!amount) - return - - var/part = amount / total_volume - - for(var/datum/reagent/current in reagent_list) - var/amount_to_remove = current.volume * part - remove_reagent(current.type, amount_to_remove, 1) - - update_total() - HANDLE_REACTIONS(src) - return amount - -// Transfers [amount] reagents from [src] to [target], multiplying them by [multiplier]. -// Returns actual amount removed from [src] (not amount transferred to [target]). -// Use safety = 1 for temporary targets to avoid queuing them up for processing. -/datum/reagents/proc/trans_to_holder(var/datum/reagents/target, var/amount = 1, var/multiplier = 1, var/copy = 0, var/safety = 0) - if(!target || !istype(target)) - return - - amount = max(0, min(amount, total_volume, target.get_free_space() / multiplier)) - - if(!amount) - return - - var/part = amount / total_volume - - for(var/datum/reagent/current in reagent_list) - var/amount_to_transfer = current.volume * part - target.add_reagent(current.type, amount_to_transfer * multiplier, current.get_data(), safety = 1) // We don't react until everything is in place - if(!copy) - remove_reagent(current.type, amount_to_transfer, 1) - if (current.color_transfer) - var/datum/reagent/added = target.get_reagent(current.type) - if (added) - added.color = current.color - if (target.my_atom) - target.my_atom.on_color_transfer_reagent_change() - target.my_atom.update_icon() - - if(!copy) - HANDLE_REACTIONS(src) - if(!safety) - HANDLE_REACTIONS(target) - return amount - -/* Holder-to-atom and similar procs */ - -//The general proc for applying reagents to things. This proc assumes the reagents are being applied externally, -//not directly injected into the contents. It first calls touch, then the appropriate trans_to_*() or splash_mob(). -//If for some reason touch effects are bypassed (e.g. injecting stuff directly into a reagent container or person), -//call the appropriate trans_to_*() proc. -/datum/reagents/proc/trans_to(var/atom/target, var/amount = 1, var/multiplier = 1, var/copy = 0) - touch(target) //First, handle mere touch effects - - if(ismob(target)) - return splash_mob(target, amount, copy) - if(isturf(target)) - return trans_to_turf(target, amount, multiplier, copy) - if(isobj(target) && target.is_open_container()) - return trans_to_obj(target, amount, multiplier, copy) - return 0 - -//Splashing reagents is messier than trans_to, the target's loc gets some of the reagents as well. -/datum/reagents/proc/splash(var/atom/target, var/amount = 1, var/multiplier = 1, var/copy = 0, var/min_spill=0, var/max_spill=60) - var/spill = 0 - if(!isturf(target) && target.loc) - spill = amount*(rand(min_spill, max_spill)/100) - amount -= spill - if(spill) - splash(target.loc, spill, multiplier, copy, min_spill, max_spill) - - trans_to(target, amount, multiplier, copy) - -/datum/reagents/proc/trans_type_to(var/atom/target, var/type, var/amount = 1, var/multiplier = 1) - if (!target || !target.reagents || !target.simulated) - return - - amount = min(amount, get_reagent_amount(type)) - - if(!amount) - return - - var/datum/reagents/F = new /datum/reagents(amount, GLOB.temp_reagents_holder) - var/tmpdata = get_data(type) - F.add_reagent(type, amount, tmpdata) - remove_reagent(type, amount) - - . = F.trans_to(target, amount, multiplier) // Let this proc check the atom's type - - qdel(F) - -// When applying reagents to an atom externally, touch() is called to trigger any on-touch effects of the reagent. -// This does not handle transferring reagents to things. -// For example, splashing someone with water will get them wet and extinguish them if they are on fire, -// even if they are wearing an impermeable suit that prevents the reagents from contacting the skin. -/datum/reagents/proc/touch(var/atom/target) - if(ismob(target)) - touch_mob(target) - if(isturf(target)) - touch_turf(target) - if(isobj(target)) - touch_obj(target) - return - -/datum/reagents/proc/touch_mob(var/mob/target) - if(!target || !istype(target) || !target.simulated) - return - - for(var/datum/reagent/current in reagent_list) - current.touch_mob(target, current.volume) - - update_total() - -/datum/reagents/proc/touch_turf(var/turf/target) - if(!target || !istype(target) || !target.simulated) - return - - for(var/datum/reagent/current in reagent_list) - current.touch_turf(target, current.volume) - - update_total() - -/datum/reagents/proc/touch_obj(var/obj/target) - if(!target || !istype(target) || !target.simulated) - return - - for(var/datum/reagent/current in reagent_list) - current.touch_obj(target, current.volume) - - update_total() - -// Attempts to place a reagent on the mob's skin. -// Reagents are not guaranteed to transfer to the target. -// Do not call this directly, call trans_to() instead. -/datum/reagents/proc/splash_mob(var/mob/target, var/amount = 1, var/copy = 0) - var/perm = 1 - if(isliving(target)) //will we ever even need to tranfer reagents to non-living mobs? - var/mob/living/L = target - perm = L.reagent_permeability() - return trans_to_mob(target, amount * perm, CHEM_TOUCH, 1, copy) - -/datum/reagents/proc/trans_to_mob(var/mob/target, var/amount = 1, var/type = CHEM_BLOOD, var/multiplier = 1, var/copy = 0) // Transfer after checking into which holder... - if(!target || !istype(target) || !target.simulated) - return - if(iscarbon(target)) - var/mob/living/carbon/C = target - if(type == CHEM_BLOOD) - var/datum/reagents/R = C.reagents - return trans_to_holder(R, amount, multiplier, copy) - if(type == CHEM_INGEST) - var/datum/reagents/R = C.get_ingested_reagents() - return C.ingest(src, R, amount, multiplier, copy) //perhaps this is a bit of a hack, but currently there's no common proc for eating reagents - if(type == CHEM_TOUCH) - var/datum/reagents/R = C.touching - return trans_to_holder(R, amount, multiplier, copy) - else - var/datum/reagents/R = new /datum/reagents(amount, GLOB.temp_reagents_holder) - . = trans_to_holder(R, amount, multiplier, copy, 1) - R.touch_mob(target) - qdel(R) - -/datum/reagents/proc/trans_to_turf(var/turf/target, var/amount = 1, var/multiplier = 1, var/copy = 0) // Turfs don't have any reagents (at least, for now). Just touch it. - if(!target || !target.simulated) - return - - var/datum/reagents/R = new /datum/reagents(amount * multiplier, GLOB.temp_reagents_holder) - . = trans_to_holder(R, amount, multiplier, copy, 1) - R.touch_turf(target) - qdel(R) - return - -/datum/reagents/proc/trans_to_obj(var/obj/target, var/amount = 1, var/multiplier = 1, var/copy = 0) // Objects may or may not; if they do, it's probably a beaker or something and we need to transfer properly; otherwise, just touch. - if(!target || !target.simulated) - return - - if(!target.reagents) - var/datum/reagents/R = new /datum/reagents(amount * multiplier, GLOB.temp_reagents_holder) - . = trans_to_holder(R, amount, multiplier, copy, 1) - R.touch_obj(target) - qdel(R) - return - - return trans_to_holder(target.reagents, amount, multiplier, copy) - -/datum/reagents/proc/should_admin_log() - for (var/datum/reagent/R in reagent_list) - if (R.should_admin_log) - return TRUE - return FALSE - -/* Atom reagent creation - use it all the time */ - -/atom/proc/create_reagents(var/max_vol) - if(reagents) - log_debug("Attempted to create a new reagents holder when already referencing one: [log_info_line(src)]") - reagents.maximum_volume = max(reagents.maximum_volume, max_vol) - else - reagents = new/datum/reagents(max_vol, src) - return reagents diff --git a/code/modules/reagents/Chemistry-Logging.dm b/code/modules/reagents/Chemistry-Logging.dm deleted file mode 100644 index c0178dd387340..0000000000000 --- a/code/modules/reagents/Chemistry-Logging.dm +++ /dev/null @@ -1,28 +0,0 @@ - -var/global/list/chemical_reaction_logs = list() - -/proc/log_chemical_reaction(atom/A, datum/chemical_reaction/R, multiplier) - if(!A || !R) - return - - var/turf/T = get_turf(A) - var/logstr = "[usr ? key_name(usr) : "EVENT"] mixed [R.name] ([R.result]) (x[multiplier]) in \the [A] at [T ? "[T.x],[T.y],[T.z]" : "*null*"]" - - chemical_reaction_logs += "\[[time_stamp()]\] [logstr]" - - if(R.log_is_important) - message_admins(logstr) - log_admin(logstr) - -/client/proc/view_chemical_reaction_logs() - set name = "Show Chemical Reactions" - set category = "Admin" - - if(!check_rights(R_ADMIN)) - return - - var/html = "" - for(var/entry in chemical_reaction_logs) - html += "[entry]
              " - - show_browser(usr, html, "window=chemlogs") diff --git a/code/modules/reagents/Chemistry-Machinery.dm b/code/modules/reagents/Chemistry-Machinery.dm deleted file mode 100644 index a79530b4471a5..0000000000000 --- a/code/modules/reagents/Chemistry-Machinery.dm +++ /dev/null @@ -1,378 +0,0 @@ -#define BOTTLE_SPRITES list("bottle-1", "bottle-2", "bottle-3", "bottle-4") //list of available bottle sprites -#define MAX_PILL_SPRITE 25 //max icon state of the pill sprites - -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - -#define CHEMMASTER_OPTIONS_BASE "BASE" -#define CHEMMASTER_OPTIONS_CONDIMENTS "CONDIMENTS" -#define CHEMMASTER_SWITCH_SPRITE_PILL "PILL" -#define CHEMMASTER_SWITCH_SPRITE_BOTTLE "BOTTLE" - -/obj/machinery/chem_master - name = "\improper ChemMaster 3000" - desc = "This large machine uses a complex filtration system to split, merge, condense, or bottle up any kind of chemical, for all your medicinal* needs." - density = TRUE - anchored = TRUE - icon = 'icons/obj/chemical.dmi' - icon_state = "mixer0" - layer = BELOW_OBJ_LAYER - idle_power_usage = 20 - clicksound = "button" - clickvol = 20 - core_skill = SKILL_CHEMISTRY - var/obj/item/reagent_containers/beaker = null - var/obj/item/storage/pill_bottle/loaded_pill_bottle = null - - var/to_beaker = FALSE // If TRUE, reagents will move from buffer -> beaker. If FALSE, reagents will be destroyed when moved from the buffer. - var/useramount = 30 // Last used amount - var/pillamount = 10 - var/max_pill_count = 20 - - var/bottle_dosage = 60 - var/pill_dosage = 30 - - var/bottlesprite = "bottle-1" //yes, strings - var/pillsprite = "1" - var/client/has_sprites = list() - - var/sloppy = TRUE // Whether reagents will not be fully purified (sloppy = TRUE) or there will be reagent loss (sloppy = FALSE) on reagent transfer. - var/production_options = CHEMMASTER_OPTIONS_BASE // Determines what the machine can make from its buffer. A condimaster can't make pills, and so on - var/reagent_limit = 120 - var/datum/reagent/analyzed_reagent = null // Datum housing the reagent we're currently trying to fetch data about - var/switching_sprite = null // If equal to one of the above defines, will show a separate window for switching pill/bottle sprites. - -/obj/machinery/chem_master/New() - create_reagents(reagent_limit) - ..() - -/obj/machinery/chem_master/ex_act(severity) - switch(severity) - if(EX_ACT_DEVASTATING) - qdel(src) - return - if(EX_ACT_HEAVY) - if (prob(50)) - qdel(src) - return - -/obj/machinery/chem_master/attackby(var/obj/item/B as obj, var/mob/user as mob) - - if(istype(B, /obj/item/reagent_containers/glass)) - - if(beaker) - to_chat(user, "A beaker is already loaded into the machine.") - return - if(!user.unEquip(B, src)) - return - beaker = B - to_chat(user, "You add the beaker to the machine!") - icon_state = "mixer1" - atom_flags |= ATOM_FLAG_OPEN_CONTAINER - - else if(istype(B, /obj/item/storage/pill_bottle)) - - if(loaded_pill_bottle) - to_chat(user, "A pill bottle is already loaded into the machine.") - return - if(!user.unEquip(B, src)) - return - loaded_pill_bottle = B - to_chat(user, "You add the pill bottle into the dispenser slot!") - -/obj/machinery/chem_master/proc/eject_beaker(mob/user) - if(!beaker) - return - var/obj/item/reagent_containers/B = beaker - user.put_in_hands(B) - beaker = null - reagents.clear_reagents() - icon_state = "mixer0" - atom_flags &= ~ATOM_FLAG_OPEN_CONTAINER - -/obj/machinery/chem_master/proc/get_remaining_volume() - return clamp(reagent_limit - reagents.total_volume, 0, reagent_limit) - -/obj/machinery/chem_master/AltClick(mob/user) - if(CanDefaultInteract(user)) - eject_beaker(user) - else - ..() - -/obj/machinery/chem_master/Topic(href, href_list, state) - if(..()) - return TRUE - var/mob/user = usr - - if (href_list["ejectp"]) - if(loaded_pill_bottle) - loaded_pill_bottle.dropInto(loc) - loaded_pill_bottle = null - - if(beaker) - var/datum/reagents/R = beaker.reagents - if (href_list["analyze"]) - var/datum/reagent/reagent = locate(href_list["analyze"]) in R.reagent_list - if (!reagent) // Check the buffer as well - reagent = locate(href_list["analyze"]) in reagents.reagent_list - if (reagent) - analyzed_reagent = reagent - - else if (href_list["add"]) - if(href_list["amount"]) - var/datum/reagent/their_reagent = locate(href_list["add"]) in R.reagent_list - if(their_reagent) - var/mult = 1 - var/amount = clamp((text2num(href_list["amount"])), 0, get_remaining_volume()) - if(sloppy) - var/contaminants = fetch_contaminants(user, R, their_reagent) - for(var/datum/reagent/reagent in contaminants) - R.trans_type_to(src, reagent.type, round(rand()*amount/5, 0.1)) - else - mult -= 0.4 * (SKILL_MAX - user.get_skill_value(core_skill))/(SKILL_MAX-SKILL_MIN) //10% loss per skill level down from max - R.trans_type_to(src, their_reagent.type, amount, mult) - - else if (href_list["addcustom"]) - var/datum/reagent/their_reagent = locate(href_list["addcustom"]) in R.reagent_list - if(their_reagent) - useramount = input("Select the amount of reagents to transfer.", 30, useramount) as null|num - if(useramount) - useramount = clamp(useramount, 0, 200) - Topic(href, list("amount" = "[useramount]", "add" = href_list["addcustom"]), state) - - else if (href_list["remove"]) - if(href_list["amount"] && beaker) - var/datum/reagent/my_reagents = locate(href_list["remove"]) in reagents.reagent_list - if(my_reagents) - var/amount = clamp((text2num(href_list["amount"])), 0, 200) - var/contaminants = fetch_contaminants(user, reagents, my_reagents) - if(to_beaker) - reagents.trans_type_to(beaker, my_reagents.type, amount) - for(var/datum/reagent/reagent in contaminants) - reagents.trans_type_to(beaker, reagent.type, round(rand()*amount, 0.1)) - else - reagents.remove_reagent(my_reagents.type, amount) - for(var/datum/reagent/reagent in contaminants) - reagents.remove_reagent(reagent.type, round(rand()*amount, 0.1)) - - else if (href_list["removecustom"]) - var/datum/reagent/my_reagents = locate(href_list["removecustom"]) in reagents.reagent_list - if(my_reagents) - useramount = input("Select the amount to transfer.", 30, useramount) as null|num - if(useramount) - useramount = clamp(useramount, 0, 200) - Topic(href, list("amount" = "[useramount]", "remove" = href_list["removecustom"]), state) - - else if (href_list["pill_dosage"]) - var/initial_dosage = initial(pill_dosage) - var/new_dosage = input("Select a new dosage for your pills.", initial_dosage, "Pill Dosage") as null|num - if (!new_dosage) - return - new_dosage = clamp(new_dosage, 0, initial_dosage) - pill_dosage = new_dosage - to_chat(user, SPAN_NOTICE("You configure \the [src] to create pills with a maximum dosage of [pill_dosage] units.")) - - else if (href_list["bottle_dosage"]) - var/initial_dosage = initial(bottle_dosage) - var/new_dosage = input("Select a new dosage for your bottles.", initial_dosage, "Bottle Dosage") as null|num - if (!new_dosage) - return - new_dosage = clamp(new_dosage, 0, initial_dosage) - bottle_dosage = new_dosage - to_chat(user, SPAN_NOTICE("You configure \the [src] to fill bottles with [bottle_dosage] units of reagents.")) - - else if (href_list["toggle"]) - to_beaker = !to_beaker - - else if (href_list["toggle_sloppy"]) - sloppy = !sloppy - - else if (href_list["main"]) - analyzed_reagent = null - switching_sprite = null - - else if (href_list["eject"]) - eject_beaker(user) - - else if (href_list["createpill"] || href_list["createpill_multiple"]) - if (!reagents.total_volume) - to_chat(user, SPAN_WARNING("\The [src] doesn't have any reagents to make into a pill.")) - return - var/count = 1 - - if(reagents.total_volume/count < 1) //Sanity checking. - return - - if (href_list["createpill_multiple"]) - count = input("Select the number of pills to make.", "Max [max_pill_count]", pillamount) as null|num - if (!count) - return - count = clamp(count, 1, max_pill_count) - - if(reagents.total_volume/count < 1) //Sanity checking. - return - - var/amount_per_pill = reagents.total_volume / count - if (amount_per_pill > pill_dosage) - amount_per_pill = pill_dosage - - var/name = sanitizeSafe(input(usr, "Name:", "Name your pill!", "[reagents.get_master_reagent_name()] ([amount_per_pill]u)") as null|text, MAX_NAME_LEN) - if (!name) - return - - if(reagents.total_volume/count < 1) //Sanity checking. - return - - while (count-- && count >= 0) - var/obj/item/reagent_containers/pill/P = new/obj/item/reagent_containers/pill(loc) - if(!name) name = reagents.get_master_reagent_name() - P.SetName("[name] pill") - P.icon_state = "pill"+pillsprite - if(P.icon_state in list("pill1", "pill2", "pill3", "pill4", "pill5")) // if using greyscale, take colour from reagent - P.color = reagents.get_color() - reagents.trans_to_obj(P,amount_per_pill) - if(loaded_pill_bottle) - if(loaded_pill_bottle.contents.len < loaded_pill_bottle.max_storage_space) - P.forceMove(loaded_pill_bottle) - - else if (href_list["createbottle"]) - create_bottle(user) - else if(href_list["change_pill"]) - switching_sprite = CHEMMASTER_SWITCH_SPRITE_PILL - else if(href_list["change_bottle"]) - switching_sprite = CHEMMASTER_SWITCH_SPRITE_BOTTLE - else if(href_list["pill_sprite"]) - pillsprite = href_list["pill_sprite"] - else if(href_list["bottle_sprite"]) - bottlesprite = href_list["bottle_sprite"] - - return TOPIC_REFRESH - -/obj/machinery/chem_master/proc/fetch_contaminants(mob/user, datum/reagents/reagents, datum/reagent/main_reagent) - . = list() - for(var/datum/reagent/reagent in reagents.reagent_list) - if(reagent == main_reagent) - continue - if(prob(user.skill_fail_chance(core_skill, 100))) - . += reagent - -/obj/machinery/chem_master/proc/get_chem_info(datum/reagent/reagent, heading = "Chemical Analysis", detailed_blood = 1) - if(!beaker || !reagent) - return - . = list() - . += "[name]" - . += "

              [heading] - [reagent.name]

              " - if(detailed_blood && istype(reagent, /datum/reagent/blood)) - var/datum/reagent/blood/B = reagent - . += "
              Species of Origin: [B.data["species"]]
              Blood Type: [B.data["blood_type"]]
              DNA Hash: [B.data["blood_DNA"]]" - else - . += "
              [reagent.description]" - . = JOINTEXT(.) - -/obj/machinery/chem_master/proc/create_bottle(mob/user) - var/bottle_name = reagents.total_volume ? reagents.get_master_reagent_name() : "glass" - var/name = sanitizeSafe(input(usr, "Name:", "Name your bottle!", bottle_name) as null|text, MAX_NAME_LEN) - if (!name) - return - var/obj/item/reagent_containers/glass/bottle/P = new/obj/item/reagent_containers/glass/bottle(loc) - P.SetName("[name] bottle") - P.icon_state = bottlesprite - reagents.trans_to_obj(P, bottle_dosage) - P.update_icon() - -/obj/machinery/chem_master/interface_interact(mob/user) - ui_interact(user) - return TRUE - -/obj/machinery/chem_master/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = TRUE) - if(!(user.client in has_sprites)) - spawn() - has_sprites += user.client - for(var/i = 1 to MAX_PILL_SPRITE) - send_rsc(usr, icon('icons/obj/chemical.dmi', "pill" + num2text(i)), "pill[i].png") - for(var/sprite in BOTTLE_SPRITES) - send_rsc(usr, icon('icons/obj/chemical.dmi', sprite), "[sprite].png") - - var/data = list() - if (analyzed_reagent) - data["analyzedReagent"] = analyzed_reagent - data["analyzedData"] = get_chem_info(analyzed_reagent) - - data["loadedContainer"] = beaker - - if (loaded_pill_bottle) - data["loadedPillBottle"] = loaded_pill_bottle - data["pillBottleBlurb"] = "Eject Pill Bottle \[[loaded_pill_bottle.contents.len]/[loaded_pill_bottle.max_storage_space]\]" - - data["isSloppy"] = sloppy - data["isTransferringToBeaker"] = to_beaker - data["productionOptions"] = production_options - - data["containerChemicals"] = list() - if (beaker && beaker.reagents && beaker.reagents.reagent_list) - for (var/datum/reagent/R in beaker.reagents.reagent_list) - var/reagent_data = list() - reagent_data["name"] = R.name - reagent_data["desc"] = R.description - reagent_data["volume"] = R.volume - reagent_data["ref"] = "\ref[R]" - data["containerChemicals"] += list(reagent_data) - - data["bufferChemicals"] = list() - if (reagents && reagents.reagent_list) - for (var/datum/reagent/R in reagents.reagent_list) - var/reagent_data = list() - reagent_data["name"] = R.name - reagent_data["desc"] = R.description - reagent_data["volume"] = R.volume - reagent_data["ref"] = "\ref[R]" - data["bufferChemicals"] += list(reagent_data) - - data["spritePill"] = "" - data["spriteBottle"] = "" - data["switchingSprite"] = switching_sprite - - data["pillDosage"] = "[pill_dosage]u" - data["bottleDosage"] = "[bottle_dosage]u" - - if (switching_sprite) - data["pillSprites"] = list() - for(var/i = 1 to MAX_PILL_SPRITE) - var/pill_sprite = list() - pill_sprite["index"] = i - pill_sprite["image"] = "" - data["pillSprites"] += list(pill_sprite) - - data["bottleSprites"] = list() - for(var/sprite in BOTTLE_SPRITES) - var/bottle_sprite = list() - bottle_sprite["index"] = sprite - bottle_sprite["image"] = "" - data["bottleSprites"] += list(bottle_sprite) - - ui = SSnano.try_update_ui(user, src, ui_key, ui, data, force_open) - if(!ui) - ui = new(user, src, ui_key, "chemmaster.tmpl", name, 575, 600) - ui.set_initial_data(data) - ui.open() - ui.auto_update_layout = TRUE - ui.set_auto_update(1) - -/obj/machinery/chem_master/condimaster - name = "\improper CondiMaster 3000" - desc = "A machine pre-supplied with plastic condiment containers to bottle up reagents for use with foods." - core_skill = SKILL_COOKING - production_options = CHEMMASTER_OPTIONS_CONDIMENTS - -/obj/machinery/chem_master/condimaster/get_chem_info(datum/reagent/reagent) - return ..(reagent, "Condiment Info", 0) - -/obj/machinery/chem_master/condimaster/create_bottle(mob/user) - var/obj/item/reagent_containers/food/condiment/P = new/obj/item/reagent_containers/food/condiment(loc) - reagents.trans_to_obj(P, 50) - -#undef CHEMMASTER_OPTIONS_BASE -#undef CHEMMASTER_OPTIONS_CONDIMENTS - -#undef CHEMMASTER_SWITCH_SPRITE_PILL -#undef CHEMMASTER_SWITCH_SPRITE_BOTTLE diff --git a/code/modules/reagents/Chemistry-Metabolism.dm b/code/modules/reagents/Chemistry-Metabolism.dm deleted file mode 100644 index 7665fec4e3f70..0000000000000 --- a/code/modules/reagents/Chemistry-Metabolism.dm +++ /dev/null @@ -1,27 +0,0 @@ -/datum/reagents/metabolism - var/metabolism_class //CHEM_TOUCH, CHEM_INGEST, or CHEM_BLOOD - var/mob/living/carbon/parent - -/datum/reagents/metabolism/del_reagent(var/reagent_type) - var/datum/reagent/current = locate(reagent_type) in reagent_list - if(current) - current.on_leaving_metabolism(parent, metabolism_class) - . = ..() - -/datum/reagents/metabolism/New(var/max = 100, mob/living/carbon/parent_mob, var/met_class) - ..(max, parent_mob) - - metabolism_class = met_class - if(istype(parent_mob)) - parent = parent_mob - -/datum/reagents/metabolism/proc/metabolize() - if(parent) - var/metabolism_type = 0 //non-human mobs - if(ishuman(parent)) - var/mob/living/carbon/human/H = parent - metabolism_type = H.species.reagent_tag - - for(var/datum/reagent/current in reagent_list) - current.on_mob_life(parent, metabolism_type, metabolism_class) - update_total() \ No newline at end of file diff --git a/code/modules/reagents/Chemistry-Readme.dm b/code/modules/reagents/Chemistry-Readme.dm deleted file mode 100644 index 0164a5c62c4ac..0000000000000 --- a/code/modules/reagents/Chemistry-Readme.dm +++ /dev/null @@ -1,299 +0,0 @@ -/* -NOTE: IF YOU UPDATE THE REAGENT-SYSTEM, ALSO UPDATE THIS README. - -Structure: /////////////////// ////////////////////////// - // Mob or object // -------> // Reagents var (datum) // Is a reference to the datum that holds the reagents. - /////////////////// ////////////////////////// - | | - The object that holds everything. V - reagent_list var (list) A List of datums, each datum is a reagent. - - | | | - V V V - - reagents (datums) Reagents. I.e. Water , antitoxins or mercury. - - -Random important notes: - - An objects on_reagent_change will be called every time the objects reagents change. - Useful if you want to update the objects icon etc. - -About the Holder: - - The holder (reagents datum) is the datum that holds a list of all reagents - currently in the object.It also has all the procs needed to manipulate reagents - - Vars: - list/datum/reagent/reagent_list - List of reagent datums. - - total_volume - Total volume of all reagents. - - maximum_volume - Maximum volume. - - atom/my_atom - Reference to the object that contains this. - - Procs: - - get_free_space() - Returns the remaining free volume in the holder. - - get_master_reagent() - Returns the reference to the reagent with the largest volume - - get_master_reagent_name() - Ditto, but returns the name. - - get_master_reagent_id() - Ditto, but returns ID. - - update_total() - Updates total volume, called automatically. - - add_reagent(var/id, var/amount, var/data = null, var/safety = 0) - Adds [amount] units of [id] reagent. [data] will be passed to reagent's mix_data() or initialize_data(). If [safety] is 0, HANDLE_REACTIONS() will be called. Returns 1 if successful, 0 otherwise. - - remove_reagent(var/id, var/amount, var/safety = 0) - Ditto, but removes reagent. Returns 1 if successful, 0 otherwise. - - del_reagent(var/id) - Removes all of the reagent. - - has_reagent(var/id, var/amount = 0) - Checks if holder has at least [amount] of [id] reagent. Returns 1 if the reagent is found and volume is above [amount]. Returns 0 otherwise. - - clear_reagents() - Removes all reagents. - - get_reagent_amount(var/id) - Returns reagent volume. Returns 0 if reagent is not found. - - get_data(var/id) - Returns get_data() of the reagent. - - get_reagents() - Returns a string containing all reagent ids and volumes, e.g. "carbon(4),nittrogen(5)". - - remove_any(var/amount = 1) - Removes up to [amount] of reagents from [src]. Returns actual amount removed. - - trans_to_holder(var/datum/reagents/target, var/amount = 1, var/multiplier = 1, var/copy = 0) - Transfers [amount] reagents from [src] to [target], multiplying them by [multiplier]. Returns actual amount removed from [src] (not amount transferred to [target]). If [copy] is 1, copies reagents instead. - - touch(var/atom/target) - When applying reagents to an atom externally, touch() is called to trigger any on-touch effects of the reagent. - This does not handle transferring reagents to things. - For example, splashing someone with water will get them wet and extinguish them if they are on fire, - even if they are wearing an impermeable suit that prevents the reagents from contacting the skin. - Basically just defers to touch_mob(target), touch_turf(target), or touch_obj(target), depending on target's type. - Not recommended to use this directly, since trans_to() calls it before attempting to transfer. - - touch_mob(var/mob/target) - Calls each reagent's touch_mob(target). - - touch_turf(var/turf/target) - Calls each reagent's touch_turf(target). - - touch_obj(var/obj/target) - Calls each reagent's touch_obj(target). - - trans_to(var/atom/target, var/amount = 1, var/multiplier = 1, var/copy = 0) - The general proc for applying reagents to things externally (as opposed to directly injected into the contents). - It first calls touch, then the appropriate trans_to_*() or splash_mob(). - If for some reason you want touch effects to be bypassed (e.g. injecting stuff directly into a reagent container or person), call the appropriate trans_to_*() proc. - - Calls touch() before checking the type of [target], calling splash_mob(target, amount), trans_to_turf(target, amount, multiplier, copy), or trans_to_obj(target, amount, multiplier, copy). - - trans_id_to(var/atom/target, var/id, var/amount = 1) - Transfers [amount] of [id] to [target]. Returns amount transferred. - - splash_mob(var/mob/target, var/amount = 1, var/clothes = 1) - Checks mob's clothing if [clothes] is 1 and transfers [amount] reagents to mob's skin. - Don't call this directly. Call apply_to() instead. - - trans_to_mob(var/mob/target, var/amount = 1, var/type = CHEM_BLOOD, var/multiplier = 1, var/copy = 0) - Transfers [amount] reagents to the mob's appropriate holder, depending on [type]. Ignores protection. - - trans_to_turf(var/turf/target, var/amount = 1, var/multiplier = 1, var/copy = 0) - Turfs don't currently have any reagents. Puts [amount] reagents into a temporary holder, calls touch_turf(target) from it, and deletes it. - - trans_to_obj(var/turf/target, var/amount = 1, var/multiplier = 1, var/copy = 0) - If target has reagents, transfers [amount] to it. Otherwise, same as trans_to_turf(). - - atom/proc/create_reagents(var/max_vol) - Creates a new reagent datum. - -About Reagents: - - Reagents are all the things you can mix and fille in bottles etc. This can be anything from - rejuvs over water to... iron. - - Vars: - - name - Name that shows up in-game. - - id - ID that is used for internal tracking. MUST BE UNIQUE. - - description - Description that shows up in-game. - - datum/reagents/holder - Reference to holder. - - reagent_state - Could be GAS, LIQUID, or SOLID. Affects nothing. Reserved for future use. - - list/data - Use varies by reagent. Custom variable. For example, blood stores blood group. - - volume - Current volume. - - metabolism - How quickly reagent is processed in mob's bloodstream; by default aslo affects ingest and touch metabolism. - - ingest_met - How quickly reagent is processed when ingested; [metabolism] is used if zero. - - touch_met - Ditto when touching. - - dose - How much of the reagent has been processed, limited by [max_dose]. Used for reagents with varying effects (e.g. ethanol or rezadone) and overdosing. - - max_dose - Maximum amount of reagent that has ever been in a mob. Exists so dose won't grow infinitely when small amounts of reagent are added over time. - - overdose - If [dose] is bigger than [overdose], overdose() proc is called every tick. - - scannable - If set to 1, will show up on health analyzers by name. - - glass_icon_state - Used by drinks. icon_state of the glass when this reagent is the master reagent. - - glass_name - Ditto for glass name. - - glass_desc - Ditto for glass desciption. - - glass_center_of_mass - Used for glass placement on tables. - - color - "#RRGGBB" or "#RRGGBBAA" where A is alpha channel. - - color_weight - How much reagent affects color of holder. Used by paint. - - Procs: - - remove_self(var/amount) - Removes [amount] of itself. - - touch_mob(var/mob/M) - Called when reagent is in another holder and not splashing the mob. Can be used with noncarbons. - - touch_obj(var/obj/O) - How reagent reacts with objects. - - touch_turf(var/turf/T) - How reagent reacts with turfs. - - on_mob_life(var/mob/living/carbon/M, var/alien, var/location) - Makes necessary checks and calls one of affect procs. - - affect_blood(var/mob/living/carbon/M, var/alien, var/removed) - How reagent affects mob when injected. [removed] is the amount of reagent that has been removed this tick. [alien] is the mob's reagent flag. - - affect_ingest(var/mob/living/carbon/M, var/alien, var/removed) - Ditto, ingested. Defaults to affect_blood with halved dose. - - affect_touch(var/mob/living/carbon/M, var/alien, var/removed) - Ditto, touching. - - overdose(var/mob/living/carbon/M, var/alien) - Called when dose is above overdose. Defaults to M.adjustToxLoss(REM). - - initialize_data(var/newdata) - Called when reagent is created. Defaults to setting [data] to [newdata]. - - mix_data(var/newdata, var/newamount) - Called when [newamount] of reagent with [newdata] data is added to the current reagent. Used by paint. - - get_data() - Returns data. Can be overriden. - -About Recipes: - - Recipes are simple datums that contain a list of required reagents and a result. - They also have a proc that is called when the recipe is matched. - - Vars: - - name - Name of the reaction, currently unused. - - id - ID of the reaction, must be unique. - - result - ID of the resulting reagent. Can be null. - - list/required_reagents - Reagents that are required for the reaction and are used up during it. - - list/catalysts - Ditto, but not used up. - - list/inhibitors - Opposite, prevent the reaction from happening. - - result_amount - Amount of resulting reagent. - - mix_message - Message that is shown to mobs when reaction happens. - - Procs: - - can_happen(var/datum/reagents/holder) - Customizable. If it returns 0, reaction will not happen. Defaults to always returning 1. Used by slime core reactions. - - on_reaction(var/datum/reagents/holder, var/created_volume) - Called when reaction happens. Used by explosives. - - send_data(var/datum/reagents/T) - Sets resulting reagent's data. Used by blood paint. - -About the Tools: - - By default, all atom have a reagents var - but its empty. if you want to use an object for the chem. - system you'll need to add something like this in its new proc: - - atom/proc/create_reagents(var/max_volume) - - Other important stuff: - - amount_per_transfer_from_this var - This var is mostly used by beakers and bottles. - It simply tells us how much to transfer when - 'pouring' our reagents into something else. - - atom/proc/is_open_container() - Checks atom/var/obj_flags & OBJ_FLAG_OPEN_CONTAINER. - If this returns 1 , you can use syringes, beakers etc - to manipulate the contents of this object. - If it's 0, you'll need to write your own custom reagent - transfer code since you will not be able to use the standard - tools to manipulate it. - -*/ diff --git a/code/modules/reagents/Chemistry-Reagents.dm b/code/modules/reagents/Chemistry-Reagents.dm deleted file mode 100644 index cb31423379d10..0000000000000 --- a/code/modules/reagents/Chemistry-Reagents.dm +++ /dev/null @@ -1,182 +0,0 @@ -/datum/reagent - var/name = "Reagent" - var/description = "A non-descript chemical." - var/taste_description = "old rotten bandaids" - var/taste_mult = 1 //how this taste compares to others. Higher values means it is more noticable - var/datum/reagents/holder = null - var/reagent_state = SOLID - var/list/data = null - var/volume = 0 - var/metabolism = REM // This would be 0.2 normally - var/ingest_met = 0 - var/touch_met = 0 - var/overdose = 0 - var/scannable = 0 // Shows up on health analyzers. - var/color = "#000000" - var/color_weight = 1 - var/color_foods = FALSE // If TRUE, this reagent affects the color of food items it's added to - var/protein_amount = 0 //What *percentage* of this is made of *animal* protein (1 is 100%). Used to calculate how it affects skrell - - // If TRUE, this reagent transfers changes to its 'color' var when moving to other containers - // Of note: Mixing two reagents of the same type with this var that have different colors - // will cause them both to take on the color of the form being added into the holder. - // i.e. if you add red to blue, all of the reagent turns red and vice-versa. - var/color_transfer = FALSE - - var/alpha = 255 - var/flags = 0 - var/hidden_from_codex - - var/glass_icon = DRINK_ICON_DEFAULT - var/glass_name = "something" - var/glass_desc = "It's a glass of... what, exactly?" - var/list/glass_special = null // null equivalent to list() - - // GAS DATA, generic values copied from base XGM datum type. - var/gas_specific_heat = 20 - var/gas_molar_mass = 0.032 - var/gas_overlay_limit = 0.7 - var/gas_flags = 0 - var/gas_burn_product - var/gas_overlay = "generic" - // END GAS DATA - - // Matter state data. - var/chilling_point - var/chilling_message = "crackles and freezes!" - var/chilling_sound = 'sound/effects/bubbles.ogg' - var/list/chilling_products - - var/list/heating_products - var/heating_point - var/heating_message = "begins to boil!" - var/heating_sound = 'sound/effects/bubbles.ogg' - - var/temperature_multiplier = 1 - var/value = 1 - - var/scent //refer to _scent.dm - var/scent_intensity = /decl/scent_intensity/normal - var/scent_descriptor = SCENT_DESC_SMELL - var/scent_range = 1 - - var/should_admin_log = FALSE - - //Fire, hellfire - var/accelerant_quality = 0 - var/fire_colour = null //In case this reagent would burn a cool different colour - -/datum/reagent/New(var/datum/reagents/holder) - if(!istype(holder)) - CRASH("Invalid reagents holder: [log_info_line(holder)]") - src.holder = holder - ..() - -/datum/reagent/proc/remove_self(var/amount) // Shortcut - if(QDELETED(src)) // In case we remove multiple times without being careful. - return - holder.remove_reagent(type, amount) - -/datum/reagent/proc/on_leaving_metabolism(var/mob/parent, var/metabolism_class) - return - -// This doesn't apply to skin contact - this is for, e.g. extinguishers and sprays. The difference is that reagent is not directly on the mob's skin - it might just be on their clothing. -/datum/reagent/proc/touch_mob(var/mob/M, var/amount) - return - -/datum/reagent/proc/touch_obj(var/obj/O, var/amount) // Acid melting, cleaner cleaning, etc - return - -/datum/reagent/proc/touch_turf(var/turf/T, var/amount) // Cleaner cleaning, lube lubbing, etc, all go here - return - -/datum/reagent/proc/on_mob_life(var/mob/living/carbon/M, var/alien, var/location) // Currently, on_mob_life is called on carbons. Any interaction with non-carbon mobs (lube) will need to be done in touch_mob. - if(QDELETED(src)) - return // Something else removed us. - if(!istype(M)) - return - if(!(flags & AFFECTS_DEAD) && M.stat == DEAD && (world.time - M.timeofdeath > 150)) - return - if(overdose && (location != CHEM_TOUCH)) - var/overdose_threshold = overdose * (flags & IGNORE_MOB_SIZE? 1 : MOB_MEDIUM/M.mob_size) - if(volume > overdose_threshold) - overdose(M, alien) - - //determine the metabolism rate - var/removed = metabolism - if(ingest_met && (location == CHEM_INGEST)) - removed = ingest_met - if(touch_met && (location == CHEM_TOUCH)) - removed = touch_met - removed = M.get_adjusted_metabolism(removed) - - //adjust effective amounts - removed, dose, and max_dose - for mob size - var/effective = removed - if(!(flags & IGNORE_MOB_SIZE) && location != CHEM_TOUCH) - effective *= (MOB_MEDIUM/M.mob_size) - - M.chem_doses[type] = M.chem_doses[type] + effective - if(effective >= (metabolism * 0.1) || effective >= 0.1) // If there's too little chemical, don't affect the mob, just remove it - switch(location) - if(CHEM_BLOOD) - affect_blood(M, alien, effective) - if(CHEM_INGEST) - affect_ingest(M, alien, effective) - if(CHEM_TOUCH) - affect_touch(M, alien, effective) - - if(volume) - remove_self(removed) - -/datum/reagent/proc/affect_blood(var/mob/living/carbon/M, var/alien, var/removed) - return - -/datum/reagent/proc/affect_ingest(var/mob/living/carbon/M, var/alien, var/removed) - if (alien == IS_SKRELL && protein_amount > 0) - var/datum/species/skrell/S = M.species - S.handle_protein(M, src) - affect_blood(M, alien, removed * 0.5) - return - -/datum/reagent/proc/affect_touch(var/mob/living/carbon/M, var/alien, var/removed) - return - -/datum/reagent/proc/overdose(var/mob/living/carbon/M, var/alien) // Overdose effect. Doesn't happen instantly. - M.add_chemical_effect(CE_TOXIN, 1) - M.adjustToxLoss(REM) - return - -/datum/reagent/proc/initialize_data(var/newdata) // Called when the reagent is created. - if(!isnull(newdata)) - data = newdata - return - -/datum/reagent/proc/mix_data(var/newdata, var/newamount) // You have a reagent with data, and new reagent with its own data get added, how do you deal with that? - return - -/datum/reagent/proc/get_data() // Just in case you have a reagent that handles data differently. - if(data && istype(data, /list)) - return data.Copy() - else if(data) - return data - return null - -/datum/reagent/Destroy() // This should only be called by the holder, so it's already handled clearing its references - holder = null - . = ..() - -/datum/reagent/proc/ex_act(obj/item/reagent_containers/holder, severity) - return - -/* DEPRECATED - TODO: REMOVE EVERYWHERE */ - -/datum/reagent/proc/reaction_turf(var/turf/target) - touch_turf(target) - -/datum/reagent/proc/reaction_obj(var/obj/target) - touch_obj(target) - -/datum/reagent/proc/reaction_mob(var/mob/target) - touch_mob(target) - -/datum/reagent/proc/custom_temperature_effects(var/temperature) diff --git a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Core.dm b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Core.dm deleted file mode 100644 index 1081b04677847..0000000000000 --- a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Core.dm +++ /dev/null @@ -1,255 +0,0 @@ -/datum/reagent/blood - data = new/list( - "donor" = null, - "species" = SPECIES_HUMAN, - "blood_DNA" = null, - "blood_type" = null, - "blood_colour" = COLOR_BLOOD_HUMAN, - "trace_chem" = null, - "dose_chem" = null, - "has_oxy" = 1 - ) - name = "Blood" - description = "A red (or blue) liquid commonly found inside animals, most of whom are pretty insistent about it being left where you found it." - reagent_state = LIQUID - metabolism = REM * 5 - color = "#c80000" - scannable = 1 - taste_description = "iron" - taste_mult = 1.3 - glass_name = "tomato juice" - glass_desc = "Are you sure this is tomato juice?" - value = 2 - - chilling_products = list(/datum/reagent/coagulated_blood) - chilling_point = 249 - chilling_message = "coagulates and clumps together." - - heating_products = list(/datum/reagent/coagulated_blood) - heating_point = 318 - heating_message = "coagulates and clumps together." - -/datum/reagent/blood/initialize_data(var/newdata) - ..() - if(data && data["blood_colour"]) - color = data["blood_colour"] - return - -/datum/reagent/blood/proc/sync_to(var/mob/living/carbon/C) - data = C.get_blood_data() - color = data["blood_colour"] - -/datum/reagent/blood/get_data() // Just in case you have a reagent that handles data differently. - var/t = data.Copy() - return t - -/datum/reagent/blood/touch_turf(var/turf/simulated/T) - if(!istype(T) || volume < 3) - return - var/weakref/W = data["donor"] - if (!W) - blood_splatter(T, src, 1) - return - W = W.resolve() - if(ishuman(W)) - blood_splatter(T, src, 1) - else if(isalien(W)) - var/obj/effect/decal/cleanable/blood/B = blood_splatter(T, src, 1) - if(B) - B.blood_DNA["UNKNOWN DNA STRUCTURE"] = "X*" - -/datum/reagent/blood/affect_ingest(var/mob/living/carbon/M, var/alien, var/removed) - - if(M.chem_doses[type] > 5) - M.adjustToxLoss(removed) - if(M.chem_doses[type] > 15) - M.adjustToxLoss(removed) - -/datum/reagent/blood/affect_touch(var/mob/living/carbon/M, var/alien, var/removed) - if(ishuman(M)) - var/mob/living/carbon/human/H = M - if(H.isSynthetic()) - return - -/datum/reagent/blood/affect_blood(var/mob/living/carbon/M, var/alien, var/removed) - M.inject_blood(src, volume) - remove_self(volume) - -// Water! -#define WATER_LATENT_HEAT 9500 // How much heat is removed when applied to a hot turf, in J/unit (9500 makes 120 u of water roughly equivalent to 2L -/datum/reagent/water - name = "Water" - description = "A ubiquitous chemical substance composed of hydrogen and oxygen." - reagent_state = LIQUID - color = "#3073b6" - alpha = 120 - scannable = 1 - metabolism = REM * 10 - taste_description = "water" - glass_name = "water" - glass_desc = "The father of all refreshments." - chilling_products = list(/datum/reagent/drink/ice) - chilling_point = T0C - heating_products = list(/datum/reagent/water/boiling) - heating_point = T100C - value = 0 - -/datum/reagent/water/affect_blood(var/mob/living/carbon/M, var/alien, var/removed) - if(!istype(M, /mob/living/carbon/slime) && alien != IS_SLIME) - return - M.adjustToxLoss(2 * removed) - -/datum/reagent/water/affect_ingest(var/mob/living/carbon/M, var/alien, var/removed) - if(!istype(M, /mob/living/carbon/slime) && alien != IS_SLIME) - return - M.adjustToxLoss(2 * removed) - -/datum/reagent/water/affect_ingest(var/mob/living/carbon/M, var/alien, var/removed) - M.adjust_hydration(removed * 10) - -/datum/reagent/water/touch_turf(var/turf/simulated/T) - if(!istype(T)) - return - - var/datum/gas_mixture/environment = T.return_air() - var/min_temperature = T20C + rand(0, 20) // Room temperature + some variance. An actual diminishing return would be better, but this is *like* that. In a way. . This has the potential for weird behavior, but I says fuck it. Water grenades for everyone. - - var/hotspot = (locate(/obj/hotspot) in T) - if(hotspot && !istype(T, /turf/space)) - var/datum/gas_mixture/lowertemp = T.remove_air(T:air:total_moles) - lowertemp.temperature = max(min(lowertemp.temperature-2000, lowertemp.temperature / 2), 0) - lowertemp.react() - T.assume_air(lowertemp) - qdel(hotspot) - - if (environment && environment.temperature > min_temperature) // Abstracted as steam or something - var/removed_heat = clamp(volume * WATER_LATENT_HEAT, 0, -environment.get_thermal_energy_change(min_temperature)) - environment.add_thermal_energy(-removed_heat) - if (prob(5) && environment && environment.temperature > T100C) - T.visible_message("The water sizzles as it lands on \the [T]!") - - else if(volume >= 10) - var/turf/simulated/S = T - S.wet_floor(8, TRUE) - -/datum/reagent/water/touch_obj(var/obj/O) - if(istype(O, /obj/item/reagent_containers/food/snacks/monkeycube)) - var/obj/item/reagent_containers/food/snacks/monkeycube/cube = O - if(!cube.wrapped) - cube.Expand() - if(istype(O, /obj/effect/turf_fire)) - var/obj/effect/turf_fire/TF = O - TF.AddPower(-volume) - if(TF.fire_power <= 0) - qdel(TF) - -/datum/reagent/water/touch_mob(var/mob/living/L, var/amount) - var/mob/living/carbon/human/H = L - if(istype(H)) - var/obj/item/clothing/mask/smokable/S = H.wear_mask - if (istype(S) && S.lit) - var/obj/item/clothing/C = H.head - if (!istype(C) || !(C.body_parts_covered & FACE)) - S.extinguish() - - if(istype(L)) - var/needed = L.fire_stacks * 10 - if(amount > needed) - L.fire_stacks = 0 - L.ExtinguishMob() - remove_self(needed) - else - L.adjust_fire_stacks(-(amount / 10)) - remove_self(amount) - -/datum/reagent/water/affect_touch(var/mob/living/carbon/M, var/alien, var/removed) - if(!istype(M, /mob/living/carbon/slime) && alien != IS_SLIME) - return - M.adjustToxLoss(10 * removed) // Babies have 150 health, adults have 200; So, 15 units and 20 - var/mob/living/carbon/slime/S = M - if(!S.client && istype(S)) - if(S.Target) // Like cats - S.Target = null - if(S.Victim) - S.Feedstop() - if(M.chem_doses[type] == removed) - M.visible_message("[S]'s flesh sizzles where the water touches it!", "Your flesh burns in the water!") - M.confused = max(M.confused, 2) - -/datum/reagent/water/boiling - name = "Boiling water" - chilling_products = list(/datum/reagent/water) - chilling_point = 99 CELSIUS - chilling_message = "stops boiling." - heating_products = list(null) - heating_point = null - -// Ice is a drink for some reason. -/datum/reagent/drink/ice - name = "Ice" - description = "Frozen water, your dentist wouldn't like you chewing this." - taste_description = "ice" - taste_mult = 1.5 - reagent_state = SOLID - color = "#619494" - adj_temp = -5 - hydration = 10 - - glass_name = "ice" - glass_desc = "Generally, you're supposed to put something else in there too..." - glass_icon = DRINK_ICON_NOISY - - heating_message = "cracks and melts." - heating_products = list(/datum/reagent/water) - heating_point = 299 // This is about 26C, higher than the actual melting point of ice but allows drinks to be made properly without weird workarounds. - -// Fuel. -/datum/reagent/fuel - name = "Welding fuel" - description = "A stable hydrazine-based compound whose exact manufacturing specifications are a closely-guarded secret. One of the most common fuels in human space. Extremely flammable." - taste_description = "gross metal" - reagent_state = LIQUID - color = "#660000" - touch_met = 5 - - glass_name = "welder fuel" - glass_desc = "Unless you are an industrial tool, this is probably not safe for consumption." - value = 6.8 - accelerant_quality = 10 - -/datum/reagent/fuel/touch_turf(var/turf/T) - new /obj/effect/decal/cleanable/liquid_fuel(T, volume) - remove_self(volume) - return - -/datum/reagent/fuel/affect_blood(var/mob/living/carbon/M, var/alien, var/removed) - M.adjustToxLoss(2 * removed) - -/datum/reagent/fuel/touch_mob(var/mob/living/L, var/amount) - if(istype(L)) - L.adjust_fire_stacks(amount / 10) // Splashing people with welding fuel to make them easy to ignite! - -/datum/reagent/fuel/ex_act(obj/item/reagent_containers/holder, severity) - if(volume <= 50) - return - var/turf/T = get_turf(holder) - var/datum/gas_mixture/products = new(_temperature = 5 * PHORON_FLASHPOINT) - var/gas_moles = 3 * volume - products.adjust_multi(GAS_NO, 0.1 * gas_moles, GAS_NO2, 0.1 * gas_moles, GAS_NITROGEN, 0.6 * gas_moles, GAS_HYDROGEN, 0.02 * gas_moles) - T.assume_air(products) - if(volume > 500) - explosion(T,1,2,4) - else if(volume > 100) - explosion(T,0,1,3) - else if(volume > 50) - explosion(T,-1,1,2) - remove_self(volume) - -/datum/reagent/coagulated_blood - name = "Coagulated Blood" - color = "#aa0000" - taste_description = "chewy iron" - taste_mult = 1.5 - description = "When exposed to unsuitable conditions, such as the floor or an oven, blood becomes coagulated and useless for transfusions. It's great for making blood pudding, though." - glass_name = "tomato salsa" - glass_desc = "Are you sure this is tomato salsa?" diff --git a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Dispenser.dm b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Dispenser.dm deleted file mode 100644 index aa87fd9ffe263..0000000000000 --- a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Dispenser.dm +++ /dev/null @@ -1,458 +0,0 @@ -#define DISPENSER_REAGENT_VALUE 0.2 - -/datum/reagent/acetone - name = "Acetone" - description = "A colorless liquid solvent used in chemical synthesis." - taste_description = "acid" - reagent_state = LIQUID - color = "#808080" - metabolism = REM * 0.2 - value = DISPENSER_REAGENT_VALUE - accelerant_quality = 3 - -/datum/reagent/acetone/affect_blood(var/mob/living/carbon/M, var/alien, var/removed) - if(alien == IS_NABBER) - return - - M.adjustToxLoss(removed * 3) - -/datum/reagent/acetone/touch_obj(var/obj/O) //I copied this wholesale from ethanol and could likely be converted into a shared proc. ~Techhead - if(istype(O, /obj/item/paper)) - var/obj/item/paper/paperaffected = O - paperaffected.clearpaper() - to_chat(usr, "The solution dissolves the ink on the paper.") - return - if(istype(O, /obj/item/book)) - if(volume < 5) - return - if(istype(O, /obj/item/book/tome)) - to_chat(usr, "The solution does nothing. Whatever this is, it isn't normal ink.") - return - var/obj/item/book/affectedbook = O - affectedbook.dat = null - to_chat(usr, "The solution dissolves the ink on the book.") - return - -/datum/reagent/aluminium - name = "Aluminium" - taste_description = "metal" - taste_mult = 1.1 - description = "A silvery white and ductile member of the boron group of chemical elements." - reagent_state = SOLID - color = "#a8a8a8" - value = DISPENSER_REAGENT_VALUE - -/datum/reagent/ammonia - name = "Ammonia" - taste_description = "mordant" - taste_mult = 2 - description = "A caustic substance commonly used in fertilizer or household cleaners." - reagent_state = LIQUID - color = "#404030" - metabolism = REM * 0.5 - overdose = 5 - value = DISPENSER_REAGENT_VALUE - -/datum/reagent/ammonia/affect_blood(var/mob/living/carbon/M, var/alien, var/removed) - if(alien == IS_VOX) - M.add_chemical_effect(CE_OXYGENATED, 2) - else if(alien != IS_DIONA) - M.adjustToxLoss(removed * 1.5) - -/datum/reagent/ammonia/overdose(var/mob/living/carbon/M, var/alien) - if(alien != IS_VOX || volume > overdose*6) - ..() - -/datum/reagent/carbon - name = "Carbon" - description = "A chemical element, the building block of life." - taste_description = "sour chalk" - taste_mult = 1.5 - reagent_state = SOLID - color = "#1c1300" - ingest_met = REM * 5 - value = DISPENSER_REAGENT_VALUE - -/datum/reagent/carbon/affect_ingest(var/mob/living/carbon/M, var/alien, var/removed) - if(alien == IS_DIONA) - return - var/datum/reagents/ingested = M.get_ingested_reagents() - if(ingested && ingested.reagent_list.len > 1) // Need to have at least 2 reagents - cabon and something to remove - var/effect = 1 / (ingested.reagent_list.len - 1) - for(var/datum/reagent/R in ingested.reagent_list) - if(R == src) - continue - ingested.remove_reagent(R.type, removed * effect) - -/datum/reagent/carbon/touch_turf(var/turf/T) - if(!istype(T, /turf/space)) - var/obj/effect/decal/cleanable/dirt/dirtoverlay = locate(/obj/effect/decal/cleanable/dirt, T) - if (!dirtoverlay) - dirtoverlay = new/obj/effect/decal/cleanable/dirt(T) - dirtoverlay.alpha = volume * 30 - else - dirtoverlay.alpha = min(dirtoverlay.alpha + volume * 30, 255) - -/datum/reagent/copper - name = "Copper" - description = "A highly ductile metal." - taste_description = "copper" - color = "#6e3b08" - value = DISPENSER_REAGENT_VALUE - -/datum/reagent/ethanol - name = "Ethanol" //Parent class for all alcoholic reagents. - description = "A well-known alcohol with a variety of applications." - taste_description = "pure alcohol" - reagent_state = LIQUID - color = "#404030" - alpha = 180 - touch_met = 5 - var/nutriment_factor = 0 - var/hydration_factor = 0 - var/strength = 10 // This is, essentially, units between stages - the lower, the stronger. Less fine tuning, more clarity. - var/toxicity = 1 - - var/druggy = 0 - var/adj_temp = 0 - var/targ_temp = 310 - var/halluci = 0 - - glass_name = "ethanol" - glass_desc = "A well-known alcohol with a variety of applications." - value = DISPENSER_REAGENT_VALUE - accelerant_quality = 5 - -/datum/reagent/ethanol/touch_mob(var/mob/living/L, var/amount) - if(istype(L)) - L.adjust_fire_stacks(amount / 15) - -/datum/reagent/ethanol/affect_blood(var/mob/living/carbon/M, var/alien, var/removed) - M.adjustToxLoss(removed * 2 * toxicity) - return - -/datum/reagent/ethanol/affect_ingest(var/mob/living/carbon/M, var/alien, var/removed) - M.adjust_nutrition(nutriment_factor * removed) - M.adjust_hydration(hydration_factor * removed) - var/strength_mod = 1 - if(alien == IS_SKRELL) - strength_mod *= 5 - if(alien == IS_DIONA) - strength_mod = 0 - - M.add_chemical_effect(CE_ALCOHOL, 1) - var/effective_dose = M.chem_doses[type] * strength_mod * (1 + volume/60) //drinking a LOT will make you go down faster - - if(effective_dose >= strength) // Early warning - M.make_dizzy(6) // It is decreased at the speed of 3 per tick - if(effective_dose >= strength * 2) // Slurring - M.add_chemical_effect(CE_PAINKILLER, 150/strength) - M.slurring = max(M.slurring, 30) - if(effective_dose >= strength * 3) // Confusion - walking in random directions - M.add_chemical_effect(CE_PAINKILLER, 150/strength) - M.confused = max(M.confused, 20) - if(effective_dose >= strength * 4) // Blurry vision - M.add_chemical_effect(CE_PAINKILLER, 150/strength) - M.eye_blurry = max(M.eye_blurry, 10) - if(effective_dose >= strength * 5) // Drowsyness - periodically falling asleep - M.add_chemical_effect(CE_PAINKILLER, 150/strength) - M.drowsyness = max(M.drowsyness, 20) - if(effective_dose >= strength * 6) // Toxic dose - M.add_chemical_effect(CE_ALCOHOL_TOXIC, toxicity) - if(effective_dose >= strength * 7) // Pass out - M.Paralyse(20) - M.Sleeping(30) - - if(druggy != 0) - M.druggy = max(M.druggy, druggy) - - if(adj_temp > 0 && M.bodytemperature < targ_temp) // 310 is the normal bodytemp. 310.055 - M.bodytemperature = min(targ_temp, M.bodytemperature + (adj_temp * TEMPERATURE_DAMAGE_COEFFICIENT)) - if(adj_temp < 0 && M.bodytemperature > targ_temp) - M.bodytemperature = min(targ_temp, M.bodytemperature - (adj_temp * TEMPERATURE_DAMAGE_COEFFICIENT)) - - if(halluci) - M.adjust_hallucination(halluci, halluci) - -/datum/reagent/ethanol/touch_obj(var/obj/O) - if(istype(O, /obj/item/paper)) - var/obj/item/paper/paperaffected = O - paperaffected.clearpaper() - to_chat(usr, "The solution dissolves the ink on the paper.") - return - if(istype(O, /obj/item/book)) - if(volume < 5) - return - if(istype(O, /obj/item/book/tome)) - to_chat(usr, "The solution does nothing. Whatever this is, it isn't normal ink.") - return - var/obj/item/book/affectedbook = O - affectedbook.dat = null - to_chat(usr, "The solution dissolves the ink on the book.") - return - -/datum/reagent/hydrazine - name = "Hydrazine" - description = "A toxic, colorless, flammable liquid with a strong ammonia-like odor, in hydrate form." - taste_description = "sweet tasting metal" - reagent_state = LIQUID - color = "#808080" - metabolism = REM * 0.2 - touch_met = 5 - value = DISPENSER_REAGENT_VALUE - -/datum/reagent/hydrazine/affect_blood(var/mob/living/carbon/M, var/alien, var/removed) - M.adjustToxLoss(4 * removed) - -/datum/reagent/hydrazine/affect_touch(var/mob/living/carbon/M, var/alien, var/removed) // Hydrazine is both toxic and flammable. - M.adjust_fire_stacks(removed / 12) - M.adjustToxLoss(0.2 * removed) - -/datum/reagent/hydrazine/touch_turf(var/turf/T) - new /obj/effect/decal/cleanable/liquid_fuel(T, volume) - remove_self(volume) - return - -/datum/reagent/iron - name = "Iron" - description = "Pure iron is a metal." - taste_description = "metal" - reagent_state = SOLID - color = "#353535" - value = DISPENSER_REAGENT_VALUE - -/datum/reagent/iron/affect_ingest(var/mob/living/carbon/M, var/alien, var/removed) - if(alien != IS_DIONA) - M.add_chemical_effect(CE_BLOODRESTORE, 8 * removed) - -/datum/reagent/lithium - name = "Lithium" - description = "A chemical element, used as antidepressant." - taste_description = "metal" - reagent_state = SOLID - color = "#808080" - value = DISPENSER_REAGENT_VALUE - -/datum/reagent/lithium/affect_blood(var/mob/living/carbon/M, var/alien, var/removed) - if(alien != IS_DIONA) - if(istype(M.loc, /turf/space)) - M.SelfMove(pick(GLOB.cardinal)) - if(prob(5)) - M.emote(pick("twitch", "drool", "moan")) - -/datum/reagent/mercury - name = "Mercury" - description = "A chemical element." - taste_mult = 0 //mercury apparently is tasteless. IDK - reagent_state = LIQUID - color = "#484848" - value = DISPENSER_REAGENT_VALUE - -/datum/reagent/mercury/affect_blood(var/mob/living/carbon/M, var/alien, var/removed) - if(alien != IS_DIONA) - if(istype(M.loc, /turf/space)) - M.SelfMove(pick(GLOB.cardinal)) - if(prob(5)) - M.emote(pick("twitch", "drool", "moan")) - M.adjustBrainLoss(0.1) - -/datum/reagent/phosphorus - name = "Phosphorus" - description = "A chemical element, the backbone of biological energy carriers." - taste_description = "vinegar" - reagent_state = SOLID - color = "#832828" - value = DISPENSER_REAGENT_VALUE - -/datum/reagent/potassium - name = "Potassium" - description = "A soft, low-melting solid that can easily be cut with a knife. Reacts violently with water." - taste_description = "sweetness" //potassium is bitter in higher doses but sweet in lower ones. - reagent_state = SOLID - color = "#a0a0a0" - value = DISPENSER_REAGENT_VALUE - should_admin_log = TRUE - -/datum/reagent/potassium/affect_blood(var/mob/living/carbon/M, var/alien, var/removed) - if(volume > 3) - M.add_chemical_effect(CE_PULSE, 1) - if(volume > 10) - M.add_chemical_effect(CE_PULSE, 1) - -/datum/reagent/radium - name = "Radium" - description = "Radium is an alkaline earth metal. It is extremely radioactive." - taste_description = "the color blue, and regret" - reagent_state = SOLID - color = "#c7c7c7" - value = DISPENSER_REAGENT_VALUE - should_admin_log = TRUE - -/datum/reagent/radium/affect_blood(var/mob/living/carbon/M, var/alien, var/removed) - M.apply_damage(10 * removed, DAMAGE_RADIATION, armor_pen = 100) // Radium may increase your chances to cure a disease - -/datum/reagent/radium/touch_turf(var/turf/T) - if(volume >= 3) - if(!istype(T, /turf/space)) - var/obj/effect/decal/cleanable/greenglow/glow = locate(/obj/effect/decal/cleanable/greenglow, T) - if(!glow) - new /obj/effect/decal/cleanable/greenglow(T) - return - -/datum/reagent/acid - name = "Sulphuric Acid" - description = "A very corrosive mineral acid with the molecular formula H2SO4." - taste_description = "acid" - reagent_state = LIQUID - color = "#db5008" - metabolism = REM * 2 - touch_met = 50 // It's acid! - var/power = 5 - var/meltdose = 10 // How much is needed to melt - var/max_damage = 40 - value = DISPENSER_REAGENT_VALUE - should_admin_log = TRUE - -/datum/reagent/acid/affect_blood(var/mob/living/carbon/M, var/alien, var/removed) - M.take_organ_damage(0, removed * power) - -/datum/reagent/acid/affect_touch(var/mob/living/carbon/M, var/alien, var/removed) // This is the most interesting - - M.visible_message( - SPAN_WARNING("\The [M]'s skin sizzles and burns on contact with the liquid!"), - SPAN_DANGER("Your skin sizzles and burns!.") - ) - - if(ishuman(M)) - var/mob/living/carbon/human/H = M - if(H.head) - if(H.head.unacidable) - to_chat(H, SPAN_WARNING("Your [H.head] protects you from the liquid.")) - remove_self(volume) - return - else if(removed > meltdose) - to_chat(H, SPAN_DANGER("Your [H.head] melts away!")) - qdel(H.head) - H.update_inv_head(1) - H.update_hair(1) - removed -= meltdose - if(removed <= 0) - return - - if(H.wear_mask) - if(H.wear_mask.unacidable) - to_chat(H, SPAN_WARNING("Your [H.wear_mask] protects you from the liquid.")) - remove_self(volume) - return - else if(removed > meltdose) - to_chat(H, SPAN_DANGER("Your [H.wear_mask] melts away!")) - qdel(H.wear_mask) - H.update_inv_wear_mask(1) - H.update_hair(1) - removed -= meltdose - if(removed <= 0) - return - - if(H.glasses) - if(H.glasses.unacidable) - to_chat(H, SPAN_WARNING("Your [H.glasses] partially protect you from the liquid!")) - removed /= 2 - else if(removed > meltdose) - to_chat(H, SPAN_DANGER("Your [H.glasses] melt away!")) - qdel(H.glasses) - H.update_inv_glasses(1) - removed -= meltdose / 2 - if(removed <= 0) - return - - if(M.unacidable) - return - - if(removed < meltdose) // Not enough to melt anything - M.take_organ_damage(0, min(removed * power * 0.1, max_damage)) //burn damage, since it causes chemical burns. Acid doesn't make bones shatter, like brute trauma would. - else - M.take_organ_damage(0, min(removed * power * 0.2, max_damage)) - if(ishuman(M)) // Applies disfigurement - var/mob/living/carbon/human/H = M - var/screamed - for(var/obj/item/organ/external/affecting in H.organs) - if(!screamed && affecting.can_feel_pain()) - screamed = 1 - H.emote("scream") - affecting.status |= ORGAN_DISFIGURED - -/datum/reagent/acid/touch_obj(var/obj/O) - if(O.unacidable) - return - if((istype(O, /obj/item) || istype(O, /obj/effect/vine)) && (volume > meltdose)) - var/obj/effect/decal/cleanable/molten_item/I = new/obj/effect/decal/cleanable/molten_item(O.loc) - I.desc = "Looks like this was \an [O] some time ago." - for(var/mob/M in viewers(5, O)) - to_chat(M, "\The [O] melts.") - qdel(O) - remove_self(meltdose) // 10 units of acid will not melt EVERYTHING on the tile - -/datum/reagent/acid/hydrochloric //Like sulfuric, but less toxic and more acidic. - name = "Hydrochloric Acid" - description = "A very corrosive mineral acid with the molecular formula HCl." - taste_description = "stomach acid" - reagent_state = LIQUID - color = "#808080" - power = 3 - meltdose = 8 - max_damage = 30 - value = DISPENSER_REAGENT_VALUE * 2 - -/datum/reagent/silicon - name = "Silicon" - description = "A tetravalent metalloid, silicon is less reactive than its chemical analog carbon." - reagent_state = SOLID - color = "#a8a8a8" - value = DISPENSER_REAGENT_VALUE - -/datum/reagent/sodium - name = "Sodium" - description = "A chemical element, readily reacts with water." - taste_description = "salty metal" - reagent_state = SOLID - color = "#808080" - value = DISPENSER_REAGENT_VALUE - -/datum/reagent/sugar - name = "Sugar" - description = "The organic compound commonly known as table sugar and sometimes called saccharose. This white, odorless, crystalline powder has a pleasing, sweet taste." - taste_description = "sugar" - taste_mult = 3 - reagent_state = SOLID - color = "#ffffff" - scannable = 1 - - glass_name = "sugar" - glass_desc = "The organic compound commonly known as table sugar and sometimes called saccharose. This white, odorless, crystalline powder has a pleasing, sweet taste." - glass_icon = DRINK_ICON_NOISY - value = DISPENSER_REAGENT_VALUE - -/datum/reagent/sugar/affect_blood(var/mob/living/carbon/human/M, var/alien, var/removed) - M.adjust_nutrition(removed * 3) - - if(alien == IS_UNATHI) - var/datum/species/unathi/S = M.species - S.handle_sugar(M,src) - -/datum/reagent/sulfur - name = "Sulfur" - description = "A chemical element with a pungent smell." - taste_description = "old eggs" - reagent_state = SOLID - color = "#bf8c00" - value = DISPENSER_REAGENT_VALUE - -/datum/reagent/tungsten - name = "Tungsten" - description = "A chemical element, and a strong oxidising agent." - taste_mult = 0 //no taste - reagent_state = SOLID - color = "#dcdcdc" - value = DISPENSER_REAGENT_VALUE - -#undef DISPENSER_REAGENT_VALUE diff --git a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Drinks.dm b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Drinks.dm deleted file mode 100644 index 7cee6326985cf..0000000000000 --- a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Drinks.dm +++ /dev/null @@ -1,1429 +0,0 @@ -/datum/reagent/drink - name = "Drink" - description = "Uh, some kind of drink." - reagent_state = LIQUID - color = "#e78108" - var/nutrition = 0 // Per unit - var/hydration = 6 // Per unit - var/adj_dizzy = 0 // Per tick - var/adj_drowsy = 0 - var/adj_sleepy = 0 - var/adj_temp = 0 - value = 0.1 - -/datum/reagent/drink/affect_blood(var/mob/living/carbon/M, var/alien, var/removed) - M.adjustToxLoss(removed) // Probably not a good idea; not very deadly though - return - -/datum/reagent/drink/affect_ingest(var/mob/living/carbon/M, var/alien, var/removed) - if (alien == IS_SKRELL && protein_amount > 0) - var/datum/species/skrell/S = M.species - S.handle_protein(M, src) - if(nutrition) - M.adjust_nutrition(nutrition * removed) - if(hydration) - M.adjust_hydration(hydration * removed) - M.dizziness = max(0, M.dizziness + adj_dizzy) - M.drowsyness = max(0, M.drowsyness + adj_drowsy) - M.sleeping = max(0, M.sleeping + adj_sleepy) - if(adj_temp > 0 && M.bodytemperature < 310) // 310 is the normal bodytemp. 310.055 - M.bodytemperature = min(310, M.bodytemperature + (adj_temp * TEMPERATURE_DAMAGE_COEFFICIENT)) - if(adj_temp < 0 && M.bodytemperature > 310) - M.bodytemperature = min(310, M.bodytemperature - (adj_temp * TEMPERATURE_DAMAGE_COEFFICIENT)) - -// Juices -/datum/reagent/drink/juice/affect_ingest(var/mob/living/carbon/human/M, var/alien, var/removed) - ..() - M.immunity = min(M.immunity + 0.25, M.immunity_norm*1.5) - if(alien == IS_UNATHI) - var/datum/species/unathi/S = M.species - S.handle_sugar(M,src,0.5) - -/datum/reagent/drink/juice/banana - name = "Banana Juice" - description = "The raw essence of a banana." - taste_description = "banana" - color = "#c3af00" - - glass_name = "banana juice" - glass_desc = "The raw essence of a banana. HONK!" - -/datum/reagent/drink/juice/berry - name = "Berry Juice" - description = "A delicious blend of several different kinds of berries." - taste_description = "berries" - color = "#990066" - - glass_name = "berry juice" - glass_desc = "Berry juice. Or maybe it's jam. Who cares?" - -/datum/reagent/drink/juice/carrot - name = "Carrot juice" - description = "It is just like a carrot but without crunching." - taste_description = "carrots" - color = "#ff8c00" // rgb: 255, 140, 0 - - glass_name = "carrot juice" - glass_desc = "It is just like a carrot but without crunching." - -/datum/reagent/drink/juice/carrot/affect_ingest(var/mob/living/carbon/M, var/alien, var/removed) - ..() - M.reagents.add_reagent(/datum/reagent/imidazoline, removed * 0.2) - -/datum/reagent/drink/juice/grape - name = "Grape Juice" - description = "It's grrrrrape!" - taste_description = "grapes" - color = "#863333" - - glass_name = "grape juice" - glass_desc = "It's grrrrrape!" - -/datum/reagent/drink/juice/lemon - name = "Lemon Juice" - description = "This juice is VERY sour." - taste_description = "sourness" - taste_mult = 1.1 - color = "#afaf00" - - glass_name = "lemon juice" - glass_desc = "Sour..." - -/datum/reagent/drink/juice/lime - name = "Lime Juice" - description = "The sweet-sour juice of limes." - taste_description = "unbearable sourness" - taste_mult = 1.1 - color = "#365e30" - - glass_name = "lime juice" - glass_desc = "A glass of sweet-sour lime juice" - -/datum/reagent/drink/juice/lime/affect_ingest(var/mob/living/carbon/M, var/alien, var/removed) - ..() - if(alien == IS_DIONA) - return - M.adjustToxLoss(-0.5 * removed) - -/datum/reagent/drink/juice/orange - name = "Orange juice" - description = "Both delicious AND rich in Vitamin C, what more do you need?" - taste_description = "oranges" - color = "#e78108" - - glass_name = "orange juice" - glass_desc = "Vitamins! Yay!" - -/datum/reagent/drink/juice/orange/affect_ingest(var/mob/living/carbon/M, var/alien, var/removed) - ..() - if(alien == IS_DIONA) - return - M.adjustOxyLoss(-2 * removed) - -/datum/reagent/toxin/poisonberryjuice // It has more in common with toxins than drinks... but it's a juice - name = "Poison Berry Juice" - description = "A tasty juice blended from various kinds of very deadly and toxic berries." - taste_description = "berries" - color = "#863353" - strength = 5 - - glass_name = "poison berry juice" - glass_desc = "A glass of deadly juice." - -/datum/reagent/toxin/poisonberryjuice/affect_blood(var/mob/living/carbon/M, var/alien, var/removed) - if(alien == IS_UNATHI) - return //unathi are immune! - return ..() - -/datum/reagent/drink/juice/potato - name = "Potato Juice" - description = "Juice of the potato. Bleh." - taste_description = "irish sadness and potatoes" - nutrition = 2 - color = "#302000" - - glass_name = "potato juice" - glass_desc = "Juice from a potato. Bleh." - -/datum/reagent/drink/juice/garlic - name = "Garlic Juice" - description = "Who would even drink this?" - taste_description = "bad breath" - nutrition = 1 - color = "#eeddcc" - - glass_name = "garlic juice" - glass_desc = "Who would even drink juice from garlic?" - -/datum/reagent/drink/juice/onion - name = "Onion Juice" - description = "Juice from an onion, for when you need to cry." - taste_description = "stinging tears" - nutrition = 1 - color = "#ffeedd" - - glass_name = "onion juice" - glass_desc = "Juice from an onion, for when you need to cry." - -/datum/reagent/drink/juice/tomato - name = "Tomato Juice" - description = "Tomatoes made into juice. What a waste of big, juicy tomatoes, huh?" - taste_description = "tomatoes" - color = "#731008" - - glass_name = "tomato juice" - glass_desc = "Are you sure this is tomato juice?" - -/datum/reagent/drink/juice/tomato/affect_ingest(var/mob/living/carbon/M, var/alien, var/removed) - ..() - if(alien == IS_DIONA) - return - M.heal_organ_damage(0, 0.5 * removed) - -/datum/reagent/drink/juice/watermelon - name = "Watermelon Juice" - description = "Delicious juice made from watermelon." - taste_description = "sweet watermelon" - color = "#b83333" - - glass_name = "watermelon juice" - glass_desc = "Delicious juice made from watermelon." - -/datum/reagent/drink/juice/turnip - name = "Turnip Juice" - description = "Delicious (?) juice made from turnips." - taste_description = "love of motherland and oppression" - color = "#b1166e" - - glass_name = "turnip juice" - glass_desc = "Delicious (?) juice made from turnips." - - -/datum/reagent/drink/juice/apple - name = "Apple Juice" - description = "Delicious sweet juice made from apples." - taste_description = "sweet apples" - color = "#c07c40" - - glass_name = "apple juice" - glass_desc = "Delicious juice made from apples." - -/datum/reagent/drink/juice/pear - name = "Pear Juice" - description = "Delicious sweet juice made from pears." - taste_description = "sweet pears" - color = "#ffff66" - - glass_name = "pear juice" - glass_desc = "Delicious juice made from pears." - -/datum/reagent/drink/juice/cabbage - name = "Cabbage Juice" - description = "It's a health drink, apparently." - taste_description = "cabbage" - color = "#1fb848" - - glass_name = "cabbage juice" - glass_desc = "It's a health drink, apparently." - -/datum/reagent/drink/juice/lettuce - name = "Lettuce Juice" - description = "It's mostly water, just a bit more lettucy" - taste_description = "fresh greens" - color = "#29df4b" - - glass_name = "lettuce juice" - glass_desc = "This is just lettuce water. Fresh but boring." - -// Everything else - -/datum/reagent/drink/milk - name = "Milk" - description = "An opaque white liquid produced by the mammary glands of mammals." - taste_description = "milk" - color = "#dfdfdf" - - glass_name = "milk" - glass_desc = "White and nutritious goodness!" - protein_amount = 0.75 - -/datum/reagent/drink/milk/affect_ingest(mob/living/carbon/M, alien, removed) - ..() - if (alien == IS_DIONA) - return - M.heal_organ_damage(0.5 * removed, 0) - holder.remove_reagent(/datum/reagent/capsaicin, 10 * removed) - -/datum/reagent/drink/milk/chocolate - name = "Chocolate Milk" - description = "A mixture of perfectly healthy milk and delicious chocolate." - taste_description = "chocolate milk" - color = "#74533b" - - glass_name = "chocolate milk" - glass_desc = "Deliciously fattening!" - protein_amount = 0.6 - -/datum/reagent/drink/milk/cream - name = "Cream" - description = "The fatty, still liquid part of milk. Why don't you mix this with sum scotch, eh?" - taste_description = "creamy milk" - color = "#dfd7af" - - glass_name = "cream" - glass_desc = "Ewwww..." - protein_amount = 1 - -/datum/reagent/drink/milk/soymilk - name = "Soy Milk" - description = "An opaque white liquid made from soybeans." - taste_description = "soy milk" - color = "#dfdfc7" - - glass_name = "soy milk" - glass_desc = "White and nutritious soy goodness!" - protein_amount = 0 - -/datum/reagent/drink/coffee - name = "Coffee" - description = "Coffee is a brewed drink prepared from roasted seeds, commonly called coffee beans, of the coffee plant." - taste_description = "bitterness" - taste_mult = 1.3 - color = "#482000" - adj_dizzy = -5 - adj_drowsy = -3 - adj_sleepy = -2 - adj_temp = 25 - overdose = 60 - - glass_name = "coffee" - glass_desc = "Don't drop it, or you'll send scalding liquid and glass shards everywhere." - -/datum/reagent/drink/coffee/affect_ingest(var/mob/living/carbon/M, var/alien, var/removed) - if(alien == IS_DIONA) - return - ..() - - if(adj_temp > 0) - holder.remove_reagent(/datum/reagent/frostoil, 10 * removed) - if(volume > 15) - M.add_chemical_effect(CE_PULSE, 1) - if(volume > 45) - M.add_chemical_effect(CE_PULSE, 1) - -/datum/reagent/nutriment/coffee/affect_blood(var/mob/living/carbon/M, var/alien, var/removed) - ..() - M.add_chemical_effect(CE_PULSE, 2) - -/datum/reagent/drink/coffee/overdose(var/mob/living/carbon/M, var/alien) - if(alien == IS_DIONA) - return - M.make_jittery(5) - M.add_chemical_effect(CE_PULSE, 1) - -/datum/reagent/drink/coffee/icecoffee - name = "Iced Coffee" - description = "Coffee and ice, refreshing and cool." - taste_description = "bitter coldness" - color = "#102838" - adj_temp = -5 - - glass_name = "iced coffee" - glass_desc = "A drink to perk you up and refresh you!" - glass_special = list(DRINK_ICE) - -/datum/reagent/drink/coffee/soy_latte - name = "Soy Latte" - description = "A nice and tasty beverage while you are reading your hippie books." - taste_description = "bitter creamy coffee" - color = "#c65905" - adj_temp = 5 - - glass_name = "soy latte" - glass_desc = "A nice and refreshing beverage while you are reading your hippie books." - -/datum/reagent/drink/coffee/soy_latte/affect_ingest(var/mob/living/carbon/M, var/alien, var/removed) - ..() - M.heal_organ_damage(0.5 * removed, 0) - -/datum/reagent/drink/coffee/icecoffee/soy_latte - name = "Iced Soy Latte" - description = "A nice and tasty beverage while you are reading your hippie books. This one's cold." - taste_description = "cold bitter creamy coffee" - color = "#c65905" - - glass_name = "iced soy latte" - glass_desc = "A nice and refreshing beverage while you are reading your hippie books. This one's cold." - -/datum/reagent/drink/coffee/icecoffee/soy_latte/affect_ingest(var/mob/living/carbon/M, var/alien, var/removed) - ..() - M.heal_organ_damage(0.5 * removed, 0) - -/datum/reagent/drink/coffee/cafe_latte - name = "Cafe Latte" - description = "A nice, strong and tasty beverage while you are reading." - taste_description = "bitter creamy coffee" - color = "#c65905" - adj_temp = 5 - protein_amount = 0.5 - - glass_name = "cafe latte" - glass_desc = "A nice, strong and refreshing beverage while you are reading." - -/datum/reagent/drink/coffee/cafe_latte/affect_ingest(var/mob/living/carbon/M, var/alien, var/removed) - ..() - M.heal_organ_damage(0.5 * removed, 0) - -/datum/reagent/drink/coffee/icecoffee/cafe_latte - name = "Iced Cafe Latte" - description = "A nice, strong and refreshing beverage while you are reading. This one's cold." - taste_description = "cold bitter creamy coffee" - color = "#c65905" - protein_amount = 0.5 - - glass_name = "iced cafe latte" - glass_desc = "A nice, strong and refreshing beverage while you are reading. This one's cold." - -/datum/reagent/drink/coffee/icecoffee/cafe_latte/affect_ingest(var/mob/living/carbon/M, var/alien, var/removed) - ..() - M.heal_organ_damage(0.5 * removed, 0) - -/datum/reagent/drink/coffee/cafe_latte/mocha - name = "Mocha Latte" - description = "Coffee and chocolate, smooth and creamy." - taste_description = "bitter creamy chocolate" - protein_amount = 0.3 - glass_name = "mocha latte" - glass_desc = "Coffee and chocolate, smooth and creamy." - -/datum/reagent/drink/coffee/soy_latte/mocha - name = "Mocha Soy Latte" - description = "Coffee, soy, and chocolate, smooth and creamy." - taste_description = "bitter creamy chocolate" - - glass_name = "mocha soy latte" - glass_desc = "Coffee, soy, and chocolate, smooth and creamy." - -/datum/reagent/drink/coffee/icecoffee/cafe_latte/mocha - name = "Iced Mocha Latte" - description = "Coffee and chocolate, smooth and creamy. This one's cold." - taste_description = "cold bitter creamy chocolate" - protein_amount = 0.3 - - glass_name = "iced mocha latte" - glass_desc = "Coffee and chocolate, smooth and creamy. This one's cold." - -/datum/reagent/drink/coffee/icecoffee/soy_latte/mocha - name = "Iced Soy Mocha Latte" - description = "Coffee, soy, and chocolate, smooth and creamy. This one's cold." - taste_description = "cold bitter creamy chocolate" - - glass_name = "iced soy mocha latte" - glass_desc = "Coffee, soy, and chocolate, smooth and creamy. This one's cold." - -/datum/reagent/drink/coffee/cafe_latte/pumpkin - name = "Pumpkin Spice Latte" - description = "Smells and tastes like Autumn." - taste_description = "bitter creamy pumpkin spice" - - glass_name = "pumpkin spice latte" - glass_desc = "Smells and tastes like Autumn." - -/datum/reagent/drink/coffee/soy_latte/pumpkin - name = "Pumpkin Spice Soy Latte" - description = "Smells and tastes like Autumn." - taste_description = "bitter creamy pumpkin spice" - - glass_name = "pumpkin spice soy latte" - glass_desc = "Smells and tastes like Autumn." - -/datum/reagent/drink/coffee/icecoffee/cafe_latte/pumpkin - name = "Iced Pumpkin Spice Latte" - description = "Smells and tastes like Autumn. This one's cold" - taste_description = "cold bitter creamy pumpkin spice" - protein_amount = 0.3 - - glass_name = "iced pumpkin spice latte" - glass_desc = "Smells and tastes like Autumn. This one's cold." - -/datum/reagent/drink/coffee/icecoffee/soy_latte/pumpkin - name = "Iced Pumpkin Spice Soy Latte" - description = "Smells and tastes like Autumn. This one's cold" - taste_description = "cold bitter creamy pumpkin spice" - - glass_name = "iced pumpkin spice soy latte" - glass_desc = "Smells and tastes like Autumn. This one's cold." - -/datum/reagent/drink/hot_coco - name = "Hot Chocolate" - description = "Made with love! And cocoa beans." - taste_description = "creamy chocolate" - reagent_state = LIQUID - color = "#403010" - nutrition = 2 - adj_temp = 5 - protein_amount = 0.5 - - glass_name = "hot chocolate" - glass_desc = "Made with love! And cocoa beans." - -/datum/reagent/drink/sodawater - name = "Soda Water" - description = "A can of club soda. Why not make a scotch and soda?" - taste_description = "carbonated water" - color = "#619494" - adj_dizzy = -5 - adj_drowsy = -3 - adj_temp = -5 - - glass_name = "soda water" - glass_desc = "Soda water. Why not make a scotch and soda?" - glass_special = list(DRINK_FIZZ) - -/datum/reagent/drink/grapesoda - name = "Grape Soda" - description = "Grapes made into a fine drank." - taste_description = "grape soda" - color = "#421c52" - adj_drowsy = -3 - - glass_name = "grape soda" - glass_desc = "Looks like a delicious drink!" - glass_special = list(DRINK_FIZZ) - -/datum/reagent/drink/tonic - name = "Tonic Water" - description = "It tastes strange but at least the quinine keeps the Space Malaria at bay." - taste_description = "tart and fresh" - color = "#619494" - adj_dizzy = -5 - adj_drowsy = -3 - adj_sleepy = -2 - adj_temp = -5 - - glass_name = "tonic water" - glass_desc = "Quinine tastes funny, but at least it'll keep that Space Malaria away." - -/datum/reagent/drink/lemonade - name = "Lemonade" - description = "Oh the nostalgia..." - taste_description = "tartness" - color = "#ffff00" - adj_temp = -5 - - glass_name = "lemonade" - glass_desc = "Oh the nostalgia..." - glass_special = list(DRINK_FIZZ) - -/datum/reagent/drink/kiraspecial - name = "Kira Special" - description = "Long live the guy who everyone had mistaken for a girl. Baka!" - taste_description = "fruity sweetness" - color = "#cccc99" - adj_temp = -5 - - glass_name = "Kira Special" - glass_desc = "Long live the guy who everyone had mistaken for a girl. Baka!" - glass_special = list(DRINK_FIZZ) - -/datum/reagent/drink/triplecitrus - name = "Triple Citrus" - description = "Triple the citrus, triple the fun." - taste_description = "unbearable sweetness" - color = "#ff7f07" - adj_temp = -5 - - glass_name = "Triple Citrus" - glass_desc = "Triple the citrus, triple the fun." - -/datum/reagent/drink/orange_soda - name = "Fizzy Orange" - description = "Artificial sugars and orange essence with fizz." - taste_description = "orange" - color = "#ffa500" - adj_temp = -5 - - glass_name = "Orange Soda" - glass_desc = "A surprisingly tasty dye." - glass_special = list(DRINK_FIZZ) - -/datum/reagent/drink/rootbeer - name = "Root WeiBeer" - description = "Root beer, brewed from the rare beer root. And a lot of chemicals." - taste_description = "faint toothpaste(?) and fizz" - color = "#290e05" - adj_temp = -5 - - glass_name = "Root Beer" - glass_desc = "Yep that sure is some rooty beer." - glass_special = list(DRINK_FIZZ) - -/datum/reagent/drink/apple_soda - name = "Apple Soda" - description = "Apple soda. Using only genuine genetically engineered apples. Engineered from bananas." - taste_description = "fizzy apples!" - color = "#ffe4a2" - adj_temp = -5 - - glass_name = "Apple Soda" - glass_desc = "Disappointing cider." - glass_special = list(DRINK_FIZZ) - -/datum/reagent/drink/strawberry_soda - name = "Strawberry Soda" - description = "Soda using sweet berries." - taste_description = "oddly bland" - color = "#ff6a9b" - adj_temp = -5 - - glass_name = "Strawberry Soda" - glass_desc = "Attractive and alliterative." - glass_special = list(DRINK_FIZZ) - -/datum/reagent/drink/porksoda - name = "Pork Soda" - description = "Soda made from straight up pork." - taste_description = "pork" - color = "#ff6a9b" - adj_temp = -5 - protein_amount = 0.8 - - glass_name = "Pork Soda" - glass_desc = "I asked for a glass of PORT!" - glass_special = list(DRINK_FIZZ) - -/datum/reagent/drink/milkshake - name = "Milkshake" - description = "Glorious brainfreezing mixture." - taste_description = "creamy vanilla" - color = "#aee5e4" - adj_temp = -9 - protein_amount = 0.5 - - glass_name = "milkshake" - glass_desc = "Glorious brainfreezing mixture." - -/datum/reagent/milkshake/affect_ingest(var/mob/living/carbon/human/M, var/alien, var/removed) - ..() - if(alien == IS_UNATHI) - var/datum/species/unathi/S = M.species - S.handle_sugar(M,src,0.5) - -/datum/reagent/drink/rewriter - name = "Rewriter" - description = "The secret of the sanctuary of the Libarian..." - taste_description = "a bad night out" - color = "#485000" - adj_temp = -5 - - glass_name = "Rewriter" - glass_desc = "The secret of the sanctuary of the Libarian..." - -/datum/reagent/drink/rewriter/affect_ingest(var/mob/living/carbon/M, var/alien, var/removed) - ..() - M.make_jittery(5) - -/datum/reagent/drink/nuka_cola - name = "Nuka Cola" - description = "Cola, cola never changes." - taste_description = "the future" - color = "#100800" - adj_temp = -5 - adj_sleepy = -2 - - glass_name = "Nuka-Cola" - glass_desc = "Don't cry, Don't raise your eye, It's only nuclear wasteland" - glass_special = list(DRINK_FIZZ) - -/datum/reagent/drink/nuka_cola/affect_ingest(var/mob/living/carbon/M, var/alien, var/removed) - ..() - M.add_chemical_effect(CE_SPEEDBOOST, 1) - M.make_jittery(20) - M.druggy = max(M.druggy, 30) - M.dizziness += 5 - M.drowsyness = 0 - -/datum/reagent/drink/grenadine - name = "Grenadine Syrup" - description = "Made in the modern day with proper pomegranate substitute. Who uses real fruit, anyways?" - taste_description = "100% pure pomegranate" - color = "#ff004f" - - glass_name = "grenadine syrup" - glass_desc = "Sweet and tangy, a bar syrup used to add color or flavor to drinks." - -/datum/reagent/drink/maplesyrup - name = "Maple Syrup" - description = "Canada is still going at it, no one can stop them." - taste_description = "nutty, sugary goodness" - color = "#b24403" - - glass_name = "maple syrup" - glass_desc = "Thick and very sweet, the perfect Canadian treat to enjoy under a clear sky." - -/datum/reagent/drink/maplesyrup/affect_ingest(mob/living/carbon/M, alien, removed) - ..() - if(alien == IS_UNATHI) - var/datum/species/unathi/S = M.species - S.handle_sugar(M, src, 0.66) //Maple syrup is about 2/3 sugar in real life - -/datum/reagent/drink/space_cola - name = "Space Cola" - description = "A refreshing beverage." - taste_description = "cola" - reagent_state = LIQUID - color = "#100800" - adj_drowsy = -3 - adj_temp = -5 - - glass_name = "Space Cola" - glass_desc = "A glass of refreshing Space Cola" - glass_special = list(DRINK_FIZZ) - -/datum/reagent/drink/spacemountainwind - name = "Mountain Wind" - description = "Blows right through you like a space wind." - taste_description = "sweet citrus soda" - color = "#102000" - adj_drowsy = -7 - adj_sleepy = -1 - adj_temp = -5 - - glass_name = "Space Mountain Wind" - glass_desc = "Space Mountain Wind. As you know, there are no mountains in space, only wind." - glass_special = list(DRINK_FIZZ) - -/datum/reagent/drink/dr_gibb - name = "Dr. Gibb" - description = "A delicious blend of 42 different flavours" - taste_description = "cherry soda" - color = "#102000" - adj_drowsy = -6 - adj_temp = -5 - - glass_name = "Dr. Gibb" - glass_desc = "Dr. Gibb. Not as dangerous as the name might imply." - -/datum/reagent/drink/space_up - name = "Space-Up" - description = "Tastes like a hull breach in your mouth." - taste_description = "a hull breach" - color = "#202800" - adj_temp = -8 - - glass_name = "Space-up" - glass_desc = "Space-up. It helps keep your cool." - glass_special = list(DRINK_FIZZ) - -/datum/reagent/drink/lemon_lime - name = "Lemon Lime" - description = "A tangy substance made of 0.5% natural citrus!" - taste_description = "tangy lime and lemon soda" - color = "#878f00" - adj_temp = -8 - - glass_name = "lemon lime soda" - glass_desc = "A tangy substance made of 0.5% natural citrus!" - glass_special = list(DRINK_FIZZ) - -/datum/reagent/drink/doctor_delight - name = "The Doctor's Delight" - description = "A gulp a day keeps the MediBot away. That's probably for the best." - taste_description = "homely fruit" - reagent_state = LIQUID - color = "#ff8cff" - nutrition = 1 - - glass_name = "The Doctor's Delight" - glass_desc = "A healthy mixture of juices, guaranteed to keep you healthy until the next toolboxing takes place." - -/datum/reagent/drink/doctor_delight/affect_ingest(var/mob/living/carbon/M, var/alien, var/removed) - ..() - if(alien == IS_DIONA) - return - M.adjustOxyLoss(-4 * removed) - M.heal_organ_damage(2 * removed, 2 * removed) - M.adjustToxLoss(-2 * removed) - if(M.dizziness) - M.dizziness = max(0, M.dizziness - 15) - if(M.confused) - M.confused = max(0, M.confused - 5) - -/datum/reagent/drink/dry_ramen - name = "Dry Ramen" - description = "Space age food, since August 25, 1958. Contains dried noodles, vegetables, and chemicals that boil in contact with water." - taste_description = "dry and cheap noodles" - reagent_state = SOLID - nutrition = 1 - color = "#302000" - -/datum/reagent/drink/hot_ramen - name = "Hot Ramen" - description = "The noodles are boiled, the flavors are artificial, just like being back in school." - taste_description = "wet and cheap noodles" - reagent_state = LIQUID - color = "#302000" - nutrition = 5 - adj_temp = 5 - -/datum/reagent/drink/hell_ramen - name = "Hell Ramen" - description = "The noodles are boiled, the flavors are artificial, just like being back in school." - taste_description = "wet and cheap noodles on fire" - reagent_state = LIQUID - color = "#302000" - nutrition = 5 - -/datum/reagent/drink/hell_ramen/affect_ingest(var/mob/living/carbon/M, var/alien, var/removed) - ..() - if(alien == IS_DIONA) - return - M.bodytemperature += 10 * TEMPERATURE_DAMAGE_COEFFICIENT - -/datum/reagent/drink/nothing - name = "Nothing" - description = "Absolutely nothing." - taste_description = "nothing" - - glass_name = "nothing" - glass_desc = "Absolutely nothing." - -/datum/reagent/drink/fools_gold - name = "Fool's Gold" - description = "A non-alcoholic beverage typically served as an alternative to whiskey." - taste_description = "watered down whiskey" - color = "#e78108" - glass_name = "fools gold" - glass_desc = "A non-alcoholic beverage typically served as an alternative to whiskey." - -/datum/reagent/drink/snowball - name = "Snowball" - description = "A cold pick-me-up frequently drunk in scientific outposts and academic fields." - taste_description = "intellectual thought and brain-freeze" - color = "#eeecea" - adj_temp = -5 - glass_name = "snowball" - glass_desc = "A cold pick-me-up frequently drunk in scientific outposts and academic fields." - -/datum/reagent/drink/browndwarf - name = "Brown Dwarf" - description = "A large gas body made of chocolate that has failed to sustain nuclear fusion." - taste_description = "dark chocolatey matter" - color = "#44371f" - glass_name = "brown dwarf" - glass_desc = "A large gas body made of chocolate that has failed to sustain nuclear fusion." - -/datum/reagent/drink/gingerbeer - name = "Ginger Beer" - description = "A hearty, non-alcoholic beverage extremely popular around the SCG." - taste_description = "carbonated ginger" - color = "#44371f" - glass_name = "ginger beer" - glass_desc = "A hearty, non-alcoholic beverage extremely popular around the SCG." - -/datum/reagent/drink/beastenergy - name = "Beast Energy" - description = "A bottle of 100% pure energy." - taste_description = "your heart crying" - color = "#d69115" - glass_name = "beast energy" - glass_desc = "Why would you drink this without mixer?" - -/datum/reagent/drink/beastenergy/affect_ingest(var/mob/living/carbon/M, var/alien, var/removed) - ..() - if(alien == IS_DIONA) - return - M.drowsyness = max(0, M.drowsyness - 7) - M.make_jittery(2) - M.add_chemical_effect(CE_PULSE, 1) - -/datum/reagent/drink/kefir - name = "Kefir" - description = "Fermented milk. Actually very tasty." - taste_description = "sharp, frothy yougurt" - color = "#ece4e3" - glass_name = "Kefir" - glass_desc = "Fermented milk, looks a lot like yougurt." - -/datum/reagent/drink/juice/melon - name = "Melon Juice" - description = "Juice from a freshly squeezed melon." - taste_description = "tangy, sweet melon" - color = "#e9ba33" - glass_name = "Melon juice" - glass_desc = "A glass of tasty melon juice." - -/datum/reagent/drink/juice/grape/green - name = "Green Grape Juice" - description = "Grape juice from green grapes." - taste_description = "green grapes" - color = "#42ed2f" - - glass_name = "green grape juice" - glass_desc = "Grape juice from green grapes." - -/datum/reagent/drink/juice/grape/white - name = "White Grape Juice" - description = "Grape juice from white grapes." - taste_description = "white grapes" - color = "#42ed2f" - - glass_name = "white grape juice" - glass_desc = "Grape juice from white grapes." - -/datum/reagent/drink/juice/pineapple - name = "Pineapple Juice" - description = "Juice from a pineapple." - taste_description = "delicious pineapple juice" - color = "#f6e12d" - - glass_name = "pineapple juice" - glass_desc = "Juice from a pineapple." - -/datum/reagent/drink/coconut - name = "Coconut Water" - description = "Unfiltered water from a coconut." - taste_description = "coconut water" - color = "#619494" - - glass_name = "coconut water" - glass_desc = "Unfiltered water from a coconut." - -/datum/reagent/drink/coconut/milk - name = "Coconut Milk" - description = "Delicious milk from a coconut." - taste_description = "cool coconut milk" - color = "#619494" - - glass_name = "coconut milk" - glass_desc = "Delicious milk from a coconut." - -/datum/reagent/cinnamon - name = "Cinnamon" - description = "Delicious ground cinnamon spice. " - taste_description = "cinnamon" - reagent_state = SOLID - color = "#cd6139" - value = 0.1 - - glass_name = "cinnamon" - glass_desc = "Delicious ground cinnamon spice, why would you drink this?" - -/datum/reagent/oliveoil - name = "Olive Oil" - description = "Olive oil, an essential part of cooking." - taste_description = "grease" - color = "#cacf70" - - glass_name = "olive oil" - glass_desc = "Oily." - -/datum/reagent/drink/affelerin - name = "Affelerin Nectar" - description = "A thick syrup-like nectar from the Affelerin, common across many desert worlds." - taste_description = "sweet, thick syrup" - color = "#ac43e0" - glass_name = "affelerin nectar" - glass_desc = "A thick syrup-like nectar from the Affelerin, common across many desert worlds." - -/datum/reagent/drink/milkshake/float - name = "Cola Float" - description = "A delicious combination of ice cream and cola." - taste_description = "carbonated ice cream" - reagent_state = LIQUID - color = "#cfe5ae" - adj_drowsy = -3 - adj_temp = -5 - protein_amount = 0.5 - - glass_name = "Cola Float" - glass_desc = "A delicious combination ofice cream and cola" - glass_special = list(DRINK_FIZZ) - -/datum/reagent/drink/vanilla_cola - name = "Vanilla Cola" - description = "A refreshing cola in vanilla flavour." - taste_description = "vanilla cola" - reagent_state = LIQUID - color = "#55381b" - adj_drowsy = -3 - adj_temp = -5 - - glass_name = "Vanilla Cola" - glass_desc = "A glass of refreshing Space Cola with hints of vanilla." - glass_special = list(DRINK_FIZZ) - -/datum/reagent/drink/orange_cola - name = "Orange Cola" - description = "A refreshing cola in orange flavour." - taste_description = "orange cola" - reagent_state = LIQUID - color = "#a86017" - adj_drowsy = -3 - adj_temp = -5 - - glass_name = "Orange Cola" - glass_desc = "A glass of refreshing Space Cola with orange flavoring." - glass_special = list(DRINK_FIZZ) - -/datum/reagent/drink/cherry_cola - name = "Cherry Cola" - description = "A refreshing cola in cherry flavour." - taste_description = "cherry cola" - reagent_state = LIQUID - color = "#641010" - adj_drowsy = -3 - adj_temp = -5 - - glass_name = "Cherry Cola" - glass_desc = "A glass of refreshing Space Cola with cherry flavoring." - glass_special = list(DRINK_FIZZ) - -/datum/reagent/drink/coffee/coffee_cola - name = "Coffee Cola" - description = "There are people in town, man, crazy people in town." - taste_description = "coffee and cola" - reagent_state = LIQUID - color = "#3b240c" - adj_drowsy = -3 - adj_temp = -5 - - glass_name = "Coffee Cola" - glass_desc = "All you need is some bread and butter and honey" - glass_special = list(DRINK_FIZZ) - -/datum/reagent/drink/diet_cola - name = "Diet Cola" - description = "Refreshing diet cola. Contains anti-nutritional value." - taste_description = "diet cola" - reagent_state = LIQUID - color = "#100800" - adj_drowsy = -3 - adj_temp = -5 - - glass_name = "Diet Cola" - glass_desc = "A glass of refreshing Space Cola. This one's calorie-free!" - glass_special = list(DRINK_FIZZ) - -/datum/reagent/drink/ionbru - name = "Ion-Bru" - description = "The official drink of some faraway, mountainous land." - taste_description = "sweet orangy-creamy soda" - color = "#a77718" - adj_drowsy = -7 - adj_sleepy = -1 - adj_temp = -5 - - glass_name = "Ion-Bru" - glass_desc = "The official drink of some faraway, mountainous land." - glass_special = list(DRINK_FIZZ) - -/datum/reagent/drink/ironbru - name = "Iron-Bru" - description = "Tastes like industrial shipbuilding capability." - taste_description = "metal girders" - color = "#a77718" - adj_drowsy = -7 - adj_sleepy = -1 - adj_temp = -5 - - glass_name = "Iron-Bru" - glass_desc = "The official drink of shipbuilders." - glass_special = list(DRINK_FIZZ) - -/datum/reagent/drink/dandelionburdock - name = "Dandelion and Burdock" - description = "Does not contain any Taraxacum officinale, or Arctium lappa." - taste_description = "sassafras" - reagent_state = LIQUID - color = "#ff8cff" - nutrition = 1 - - glass_name = "Dandelion and Burdock" - glass_desc = "A tall glass of DnB" - -/datum/reagent/drink/doogh - name = "Doogh" - description = "A yogurt-based drink seasoned with salt and mint." - taste_description = "savoury sourness" - color = "#f7f5ca" - - glass_name = "doogh" - glass_desc = "A yogurt-based drink seasoned with salt and mint." - -/datum/reagent/drink/eggnog - name = "Eggnog" - description = "A chilled dairy-rich beverage. Too cool to keep to the holidays." - taste_description = "eggy noggyness" - color = "#619494" - protein_amount = 0.8 - - glass_name = "eggnog" - glass_desc = "A delicious glass of eggnog." - -/datum/reagent/drink/posca - name = "Posca" - description = "An ancient energy drink revived by Roman cosplayers on Luna." - taste_description = "spiced vinegar" - color = "#b3b599" - - glass_name = "posca" - glass_desc = "An energy drink invented by the Romans and made space-famous by Luna cosplayers." - -/datum/reagent/drink/alcoholfreebeer - name = "Non-Alcoholic Beer" - description = "An alcoholic beverage made from malted grains, hops, yeast, and water. This seems to be non-alcoholic" - taste_description = "non-alcoholic piss water" - color = "#ffd300" - - glass_name = "beer" - glass_desc = "A freezing container of beer" - -// Tea -// black tea -/datum/reagent/drink/tea - name = "Black Tea" - description = "Tasty black tea, it has antioxidants, it's good for you!" - taste_description = "tart black tea" - color = "#101000" - adj_dizzy = -2 - adj_drowsy = -1 - adj_sleepy = -3 - adj_temp = 20 - - glass_name = "black tea" - glass_desc = "Tasty black tea, it has antioxidants, it's good for you!" - -/datum/reagent/drink/tea/affect_ingest(var/mob/living/carbon/M, var/alien, var/removed) - ..() - if(alien == IS_DIONA) - return - M.adjustToxLoss(-0.5 * removed) - -/datum/reagent/drink/tea/icetea - name = "Iced Black Tea" - description = "It's the black tea you know and love, but now it's cold." - taste_description = "cold black tea" - adj_temp = -5 - - glass_name = "iced black tea" - glass_desc = "It's the black tea you know and love, but now it's cold." - glass_special = list(DRINK_ICE) - -/datum/reagent/drink/tea/icetea/sweet - name = "Sweet Black Tea" - description = "It's the black tea you know and love, but now it's cold. And sweet." - taste_description = "sweet tea" - - glass_name = "sweet black tea" - glass_desc = "It's the black tea you know and love, but now it's cold. And sweet." - -/datum/reagent/drink/tea/barongrey - name = "Baron Grey Tea" - description = "Black tea prepared with standard orange flavoring. Much less fancy than the bergamot in Earl Grey, but the chances of you getting any of that stuff out here is pretty slim." - taste_description = "tangy black tea" - - glass_name = "Baron Grey tea" - glass_desc = "Black tea prepared with standard orange flavoring. Much less fancy than the bergamot in Earl Grey, but the chances of you getting any of that stuff out here is pretty slim." - -/datum/reagent/drink/tea/barongrey/latte - name = "London Fog" - description = "A blend of Earl Grey (Or more likely Baron Grey) and steamed milk, making a pleasant tangy tea latte." - taste_description = "creamy, tangy black tea" - protein_amount = 0.5 - - glass_name = "London Fog" - glass_desc = "A blend of Earl Grey (Or more likely Baron Grey) and steamed milk, making a pleasant tangy tea latte." - -/datum/reagent/drink/tea/barongrey/soy_latte - name = "Soy London Fog" - description = "A blend of Earl Grey (Or more likely Baron Grey) and steamed soy milk, making a pleasant tangy tea latte." - taste_description = "creamy, tangy black tea" - - glass_name = "Soy London Fog" - glass_desc = "A blend of Earl Grey (Or more likely Baron Grey) and steamed soy milk, making a pleasant tangy tea latte." - -/datum/reagent/drink/tea/icetea/barongrey/latte - name = "Iced London Fog" - description = "A blend of Earl Grey (Or more likely Baron Grey) and steamed milk, making a pleasant tangy tea latte. This one's cold." - taste_description = "cold, creamy, tangy black tea" - protein_amount = 0.5 - - glass_name = "iced london fog" - glass_desc = "A blend of Earl Grey (Or more likely Baron Grey) and steamed milk, making a pleasant tangy tea latte. This one's cold." - -/datum/reagent/drink/tea/icetea/barongrey/soy_latte - name = "Iced Soy London Fog" - description = "A blend of Earl Grey (Or more likely Baron Grey) and steamed soy milk, making a pleasant tangy tea latte. This one's cold." - taste_description = "cold, creamy, tangy black tea" - - glass_name = "iced soy london fog" - glass_desc = "A blend of Earl Grey (Or more likely Baron Grey) and steamed soy milk, making a pleasant tangy tea latte. This one's cold." - -//green tea -/datum/reagent/drink/tea/green - name = "Green Tea" - description = "Subtle green tea, it has antioxidants, it's good for you!" - taste_description = "subtle green tea" - color = "#b4cd94" - - glass_name = "green tea" - glass_desc = "Subtle green tea, it has antioxidants, it's good for you!" - -/datum/reagent/drink/tea/icetea/green - name = "Iced Green Tea" - description = "It's the green tea you know and love, but now it's cold." - taste_description = "cold green tea" - color = "#b4cd94" - - glass_name = "iced green tea" - glass_desc = "It's the green tea you know and love, but now it's cold." - -/datum/reagent/drink/tea/icetea/green/sweet - name = "Sweet Green Tea" - description = "It's the green tea you know and love, but now it's cold. And sweet." - taste_description = "sweet green tea" - color = "#b4cd94" - - glass_name = "sweet green tea" - glass_desc = "It's the green tea you know and love, but now it's cold. And sweet." - -/datum/reagent/drink/tea/icetea/green/sweet/mint - name = "Maghrebi Tea" - description = "Iced green tea prepared with mint and sugar. Refreshing!" - taste_description = "refreshing mint tea" - - glass_name = "Maghrebi mint tea" - glass_desc = "Iced green tea prepared with mint and sugar. Refreshing!" - -/datum/reagent/drink/tea/chai - name = "Chai Tea" - description = "A spiced, dark tea. Goes great with milk." - taste_description = "spiced black tea" - color = "#151000" - - glass_name = "chai tea" - glass_desc = "A spiced, dark tea. Goes great with milk." - -/datum/reagent/drink/tea/icetea/chai - name = "Iced Chai Tea" - description = "It's the chai tea you know and love, but now it's cold." - taste_description = "cold spiced black tea" - color = "#151000" - - glass_name = "iced chai tea" - glass_desc = "It's the chai tea you know and love, but now it's cold." - -/datum/reagent/drink/tea/icetea/chai/sweet - name = "Sweet Chai Tea" - description = "It's the chai tea you know and love, but now it's cold. And sweet." - taste_description = "sweet spiced black tea" - - glass_name = "sweet chai tea" - glass_desc = "It's the chai tea you know and love, but now it's cold. And sweet." - -/datum/reagent/drink/tea/chai/latte - name = "Chai Latte" - description = "A warm, inviting cup of spiced, dark tea mixed with steamed milk." - taste_description = "creamy spiced tea" - color = "#c8a988" - protein_amount = 0.5 - - glass_name = "chai latte" - glass_desc = "A warm, inviting cup of spiced, dark tea mixed with steamed milk." - -/datum/reagent/drink/tea/chai/soy_latte - name = "Chai Soy Latte" - description = "A warm, inviting cup of spiced, dark tea mixed with steamed soy milk." - taste_description = "creamy spiced tea" - color = "#c8a988" - - glass_name = "chai soy latte" - glass_desc = "A warm, inviting cup of spiced, dark tea mixed with steamed soy milk." - -/datum/reagent/drink/tea/icetea/chai/latte - name = "Iced Chai Latte" - description = "A warm, inviting cup of spiced, dark tea mixed with steamed milk. This one's cold." - taste_description = "cold creamy spiced tea" - color = "#c8a988" - protein_amount = 0.5 - - glass_name = "iced chai latte" - glass_desc = "A warm, inviting cup of spiced, dark tea mixed with steamed milk. This one's cold." - -/datum/reagent/drink/tea/icetea/chai/soy_latte - name = "Iced Chai Soy Latte" - description = "A warm, inviting cup of spiced, dark tea mixed with steamed soy milk. This one's cold." - taste_description = "cold creamy spiced tea" - color = "#c8a988" - - glass_name = "iced chai soy latte" - glass_desc = "A warm, inviting cup of spiced, dark tea mixed with steamed soy milk. This one's cold." - -/datum/reagent/drink/tea/red - name = "Rooibos Tea" - description = "A caffeine-free dark red tea, flavorful and full of antioxidants." - taste_description = "nutty red tea" - color = "#ab4c3a" - - glass_name = "rooibos tea" - glass_desc = "A caffeine-free dark red tea, flavorful and full of antioxidants." - -/datum/reagent/drink/tea/icetea/red - name = "Iced Rooibos Tea" - description = "It's the red tea you know and love, but now it's cold." - taste_description = "cold nutty red tea" - color = "#ab4c3a" - - glass_name = "iced rooibos tea" - glass_desc = "It's the red tea you know and love, but now it's cold." - -/datum/reagent/drink/tea/icetea/red/sweet - name = "Sweet Rooibos Tea" - description = "It's the red tea you know and love, but now it's cold. And sweet." - taste_description = "sweet nutty red tea" - - glass_name = "sweet rooibos tea" - glass_desc = "It's the red tea you know and love, but now it's cold. And sweet." - -/datum/reagent/drink/syrup_chocolate - name = "Chocolate Syrup" - description = "Thick chocolate syrup used to flavor drinks." - taste_description = "chocolate" - color = "#542a0c" - - glass_name = "chocolate syrup" - glass_desc = "Thick chocolate syrup used to flavor drinks." - -/datum/reagent/drink/syrup_caramel - name = "Caramel Syrup" - description = "Thick caramel syrup used to flavor drinks." - taste_description = "caramel" - color = "#85461e" - - glass_name = "caramel syrup" - glass_desc = "Thick caramel syrup used to flavor drinks." - -/datum/reagent/drink/syrup_vanilla - name = "Vanilla Syrup" - description = "Thick vanilla syrup used to flavor drinks." - taste_description = "vanilla" - color = "#f3e5ab" - - glass_name = "vanilla syrup" - glass_desc = "Thick vanilla syrup used to flavor drinks." - -/datum/reagent/drink/syrup_pumpkin - name = "Pumpkin Spice Syrup" - description = "Thick spiced pumpkin syrup used to flavor drinks." - taste_description = "spiced pumpkin" - color = "#d88b4c" - - glass_name = "pumpkin spice syrup" - glass_desc = "Thick spiced pumpkin syrup used to flavor drinks." - -/datum/reagent/drink/decafcoffee - name = "Decaffeinated Coffee" - description = "Coffee but without the caffeine." - taste_description = "decaffeinated bitterness" - color = "#482000" - - glass_name = "decaf coffee" - glass_desc = "Don't drop it, or you'll send scalding liquid and glass shards everywhere." - -/datum/reagent/drink/coffee/espresso - name = "Espresso" - description = "Extra strong coffee." - taste_description = "deluxe bitterness" - color = "#482000" - - glass_name = "espresso" - glass_desc = "Don't drop it, or you'll send scalding liquid and glass shards everywhere." - -/datum/reagent/drink/coffee/americano - name = "Americano" - description = "Diluted Espresso." - taste_description = "dark bitterness" - color = "#482000" - - glass_name = "americano" - glass_desc = "Pa pa l' americano" - -/datum/reagent/drink/coffee/yuenyeung - name = "Yuenyeung" - description = "Also known as Coffee with Tea." - taste_description = "refreshing and energising" - color = "#482000" - - glass_name = "yeunyeung" - glass_desc = "Coffee with tea. Delicious." - -/datum/reagent/drink/coffee/iced/frappe - name = "Iced Frappe" - description = "A cool coffee chilled with ice." - taste_description = "refreshing brainfreeze" - color = "#482000" - - glass_name = "iced frappe" - glass_desc = "A cool coffee with ice." - -/datum/reagent/ethanol/coffee/carajillo - name = "Carajillo" - description = "Just a regular coffee, hombre." - taste_description = "la voluntad de vivir" - color = "#482000" - - glass_name = "iced frappe" - glass_desc = "A cool, milky coffee with ice... And Kahlua." - -/datum/reagent/drink/tea/decaf - name = "Decaffeinated Tea" - description = "Tea, already with limited caffeine, now with even less." - taste_description = "bitter tea" - color = "#101000" - - glass_name = "decaf tea" - glass_desc = "Tasty black tea, it has antioxidants, it's good for you!" - -// Alien Drinks - -/datum/reagent/drink/alien/unathijuice - name = "Hrukhza Leaf Extract" - description = "A bitter liquid used in most recipes on Moghes." - taste_description = "bland, disgusting bitterness" - color = "#345c52" - glass_name = "hrukhza leaf extract" - glass_desc = "A bitter extract from the hrukhza." - -/datum/reagent/drink/alien/kzkzaa - name = "Kzkzaa" - description = "Fish extract from Moghes." - taste_description = "fishy fish" - color = "#e78108" - glass_name = "kzkzaa" - glass_desc = "A glass of Kzkzaa, fish extract, commonly drank on Moghes." - -/datum/reagent/drink/alien/mumbaksting - name = "Mumbak Sting" - description = "A drink made from the venom of the Yuum." - taste_description = "harsh and stinging sweetness" - color = "#550000" - glass_name = "Mumbak sting" - glass_desc = "A drink made from the venom of the Yuum." - -/datum/reagent/ethanol/alien/wasgaelhi - name = "Wasgaelhi" - description = "Wine made from various fruits from the swamps of Moghes." - taste_description = "swampy fruit" - color = "#6b596b" - strength = 10 - glass_name = "wasgaelhi" - glass_desc = "Wine made from various fruits from the swamps of Moghes." - -/datum/reagent/drink/alien/skrianhi - name = "Skrianhi Tea" - description = "A blend of teas from Moghes, commonly drank by Unathi." - taste_description = "bitter energising tea" - color = "#0e0900" - glass_name = "skrianhi tea" - glass_desc = "A blend of teas from Moghes, commonly drank by Unathi." diff --git a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Ethanol.dm b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Ethanol.dm deleted file mode 100644 index 73a0b4ef71ccc..0000000000000 --- a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Ethanol.dm +++ /dev/null @@ -1,1565 +0,0 @@ -/* Alcohol */ - -// Basic - -/datum/reagent/ethanol/absinthe - name = "Absinthe" - description = "Watch out that the Green Fairy doesn't come for you!" - taste_description = "death and licorice" - taste_mult = 1.5 - color = "#33ee00" - strength = 12 - - glass_name = "absinthe" - glass_desc = "Wormwood, anise, oh my." - -/datum/reagent/ethanol/ale - name = "Ale" - description = "A dark alchoholic beverage made by malted barley and yeast." - taste_description = "hearty barley ale" - color = "#4c3100" - strength = 50 - - glass_name = "ale" - glass_desc = "A freezing container of delicious ale" - -/datum/reagent/ethanol/applecider - name = "Apple Cider" - description = "A refreshing glass of apple cider." - taste_description = "cool apple cider" - color = "#cac089" - strength = 50 - - glass_name = "Apple Cider" - glass_desc = "A refreshing glass of apple cider." - -/datum/reagent/ethanol/arak - name = "Arak" - description = "An unsweetened aniseed and grape mixture." - taste_description = "oil and licorice" - color = "#f7f6e0" - strength = 20 - - glass_name = "arak" - glass_desc = "An unsweetened mixture of aniseed and grape." - -/datum/reagent/ethanol/baijiu - name = "Baijiu" - description = "An extremely popular clear, alcoholic drink made from sorghum or rice." - taste_description = "sweet fruit and nuts" - color = "#f7f6e0" - strength = 25 - alpha = 120 - - glass_name = "baijiu" - glass_desc = "A clear glass of baijiu." - -/datum/reagent/ethanol/beer - name = "Beer" - description = "An alcoholic beverage made from malted grains, hops, yeast, and water." - taste_description = "piss water" - color = "#ffd300" - strength = 50 - nutriment_factor = 1 - - glass_name = "beer" - glass_desc = "A freezing container of beer" - -/datum/reagent/ethanol/beer/good - - taste_description = "beer" - -/datum/reagent/ethanol/beer/affect_ingest(var/mob/living/carbon/M, var/alien, var/removed) - ..() - if(alien == IS_DIONA) - return - M.jitteriness = max(M.jitteriness - 3, 0) - -/datum/reagent/ethanol/blackstrap - name = "Blackstrap" - description = "A classic mix of rum and molasses, favorite of frontiersmen everywhere." - taste_description = "sweet and strong alcohol" - color = "#161612" - strength = 30 - - glass_name = "blackstrap" - glass_desc = "A classic mix of rum and molasses." - -/datum/reagent/ethanol/bluecuracao - name = "Blue Curacao" - description = "Exotically blue, fruity drink, distilled from oranges." - taste_description = "oranges" - taste_mult = 1.1 - color = "#0000cd" - strength = 15 - - glass_name = "blue curacao" - glass_desc = "Exotically blue, fruity drink, distilled from oranges." - -/datum/reagent/ethanol/cachaca - name = "Cachaca" - description = "A sweet alcoholic drink made from fermented sugarcane." - taste_description = "sweet, tropical juice" - color = "#d7d3b4" - strength = 25 - - glass_name = "cachaca" - glass_desc = "A sweet alcoholic drink made from fermented sugarcane." - -/datum/reagent/ethanol/champagne - name = "Champagne" - description = "Smooth sparkling wine, produced in the same region of France as it has for centuries." - taste_description = "a superior taste of sparkling wine" - color = "#e8dfc1" - strength = 25 - - glass_name = "champagne" - glass_desc = "Smooth sparkling wine, produced in the same region of France as it has for centuries." - -/datum/reagent/ethanol/cognac - name = "Cognac" - description = "A sweet and strongly alchoholic drink, made after numerous distillations and years of maturing. Classy as fornication." - taste_description = "rich and smooth alcohol" - taste_mult = 1.1 - color = "#ab3c05" - strength = 15 - - glass_name = "cognac" - glass_desc = "Damn, you feel like some kind of French aristocrat just by holding this." - -/datum/reagent/ethanol/creme_de_cacao - name = "Creme de Cacao" - description = "A chocolatey liqueur for those who like their drinks undeniably sweet." - taste_description = "rustic chocolate" - color = "#2e2312" - strength = 50 - - glass_name = "creme de cacao" - glass_desc = "Perfect for a night in the lodge." - -/datum/reagent/ethanol/creme_de_menthe - name = "Creme de Menthe" - description = "A sweet, mint-flavored alcoholic beverage" - taste_description = "melted breathmints" - color = "#98ecb4" - strength = 50 - - glass_name = "creme de menthe" - glass_desc = "It's hard not to imagine it as mouthwash." - -/datum/reagent/ethanol/deadrum - name = "Deadrum" - description = "Popular with the sailors. Not very popular with everyone else." - taste_description = "salty sea water" - color = "#ecb633" - strength = 50 - - glass_name = "rum" - glass_desc = "Now you want to Pray for a pirate suit, don't you?" - -/datum/reagent/ethanol/deadrum/affect_ingest(var/mob/living/carbon/M, var/alien, var/removed) - ..() - if(alien == IS_DIONA) - return - M.dizziness +=5 - -/datum/reagent/ethanol/gin - name = "Gin" - description = "It's gin. In space. I say, good sir." - taste_description = "an alcoholic christmas tree" - color = "#bcf5ff" - strength = 15 - alpha = 120 - - glass_name = "gin" - glass_desc = "A crystal clear glass of Griffeater gin." - -/datum/reagent/ethanol/iridast - name = "Iridast Berry Juice" - description = "An intoxicating juice made from the Iridast Berry, common across human worlds." - taste_description = "incredible sweetness" - color = "#fa68ff" - strength = 50 - - glass_name = "iridast berry juice" - glass_desc = "An intoxicating juice made from the Iridast Berry, common across human worlds." - -//Base type for alchoholic drinks containing coffee -/datum/reagent/ethanol/coffee - overdose = 45 - -/datum/reagent/ethanol/coffee/affect_ingest(var/mob/living/carbon/M, var/alien, var/removed) - if(alien == IS_DIONA) - return - ..() - M.dizziness = max(0, M.dizziness - 5) - M.drowsyness = max(0, M.drowsyness - 3) - M.sleeping = max(0, M.sleeping - 2) - if(M.bodytemperature > 310) - M.bodytemperature = max(310, M.bodytemperature - (5 * TEMPERATURE_DAMAGE_COEFFICIENT)) - -/datum/reagent/ethanol/coffee/overdose(var/mob/living/carbon/M, var/alien) - if(alien == IS_DIONA) - return - M.make_jittery(5) - -/datum/reagent/ethanol/coffee/kahlua - name = "Kahlua" - description = "A widely known, Mexican coffee-flavoured liqueur. In production since 1936!" - taste_description = "spiked latte" - taste_mult = 1.1 - color = "#4c3100" - strength = 15 - - glass_name = "RR coffee liquor" - glass_desc = "DAMN, THIS THING LOOKS ROBUST" - -/datum/reagent/ethanol/llanbrydewhiskey - name = "Llanbryde Whiskey" - description = "Welsh Whiskey. So good it should be illegal." - taste_description = "distilled welsh highlands" - color = "#805200" - strength = 10 - - glass_name = "Llanbryde whiskey" - glass_desc = "A premium Welsh whiskey." - -/datum/reagent/ethanol/melonliquor - name = "Melon Liquor" - description = "A relatively sweet and fruity 46 proof liquor." - taste_description = "fruity alcohol" - color = "#138808" // rgb: 19, 136, 8 - strength = 50 - - glass_name = "melon liquor" - glass_desc = "A relatively sweet and fruity 46 proof liquor." - -/datum/reagent/ethanol/rakia - name = "Rakia" - description = "Fruit brandy, typically made from grapes or other fruits." - taste_description = "dry grape" - color = "#c2d6b7" - strength = 25 - - glass_name = "Rakia" - glass_desc = "Fruit brandy. Delicious." - -/datum/reagent/ethanol/rum - name = "Rum" - description = "The historic drink of Earth navies. Extremely popular across Sol space." - taste_description = "spiked butterscotch" - taste_mult = 1.1 - color = "#ecb633" - strength = 15 - - glass_name = "rum" - glass_desc = "Now you want to Pray for a pirate suit, don't you?" - -/datum/reagent/ethanol/prosecco - name = "Prosecco" - description = "A delightful blend of glera grapes, native to Earth." - taste_description = "the trials of being a young woman in a rich man's world" - color = "#e8dfc1" - strength = 30 - - glass_name = "prosecco" - glass_desc = "A delightful blend of glera grapes, native to Earth." - -/datum/reagent/ethanol/sake - name = "Sake" - description = "Anime's favorite drink." - taste_description = "dry alcohol" - color = "#dddddd" - strength = 25 - - glass_name = "sake" - glass_desc = "A glass of sake." - -/datum/reagent/ethanol/soju - name = "Soju" - description = "An alcoholic drink made with rice." - taste_description = "subtle, mild sweetness" - color = "#dddddd" - strength = 25 - - glass_name = "soju" - glass_desc = "A glass of soju." - -/datum/reagent/ethanol/tequilla - name = "Tequila" - description = "A strong and mildly flavoured, mexican produced spirit. Feeling thirsty hombre?" - taste_description = "paint stripper" - color = "#ffff91" - strength = 25 - alpha = 120 - - glass_name = "Tequilla" - glass_desc = "Now all that's missing is the weird colored shades!" - -/datum/reagent/ethanol/thirteenloko - name = "Thirteen Loko" - description = "A potent mixture of caffeine and alcohol." - taste_description = "jitters and death" - color = "#102000" - strength = 25 - nutriment_factor = 1 - - glass_name = "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/ethanol/thirteenloko/affect_ingest(var/mob/living/carbon/M, var/alien, var/removed) - ..() - if(alien == IS_DIONA) - return - M.drowsyness = max(0, M.drowsyness - 7) - if (M.bodytemperature > 310) - M.bodytemperature = max(310, M.bodytemperature - (5 * TEMPERATURE_DAMAGE_COEFFICIENT)) - M.make_jittery(5) - M.add_chemical_effect(CE_PULSE, 2) - -/datum/reagent/ethanol/triple_sec - name = "Triple Sec" - description = "It smells like oranges." - taste_description = "sweet citrus" - color = "#fac840" - strength = 15 - - glass_name = "triple sec" - glass_desc = "For when you want to get drunk, but don't want to taste the alcohol." - -/datum/reagent/ethanol/vermouth - name = "Vermouth" - description = "You suddenly feel a craving for a martini..." - taste_description = "dry alcohol" - taste_mult = 1.3 - color = "#91ff91" // rgb: 145, 255, 145 - strength = 15 - - glass_name = "vermouth" - glass_desc = "You wonder why you're even drinking this straight." - -/datum/reagent/ethanol/vodka - name = "Vodka" - description = "Number one drink AND fueling choice for Independents around the galaxy." - taste_description = "grain alcohol" - color = "#d5eaff" // rgb: 0, 100, 200 - strength = 15 - alpha = 120 - - glass_name = "vodka" - glass_desc = "The glass contain wodka. Xynta." - -/datum/reagent/ethanol/vodka/premium - name = "Premium Vodka" - description = "Premium distilled vodka imported directly from the Gilgamesh Colonial Confederation." - taste_description = "clear kvass" - color = "#aaddff" // rgb: 170, 221, 255 - very light blue. - strength = 10 - -/datum/reagent/ethanol/whiskey - name = "Whiskey" - description = "A superb and well-aged single-malt whiskey. Damn." - taste_description = "molasses" - color = "#4c3100" - strength = 25 - - glass_name = "whiskey" - glass_desc = "The silky, smokey whiskey goodness inside the glass makes the drink look very classy." - -/datum/reagent/ethanol/wine - name = "Wine" - description = "An premium alchoholic beverage made from distilled grape juice." - taste_description = "bitter sweetness" - color = "#7e4043" // rgb: 126, 64, 67 - strength = 15 - - glass_name = "wine" - glass_desc = "A very classy looking drink." - -/datum/reagent/ethanol/wine/premium - name = "White Wine" - description = "An exceptionally expensive alchoholic beverage made from distilled white grapes." - taste_description = "white velvet" - color = "#ffddaa" // rgb: 255, 221, 170 - a light cream - strength = 20 - -/datum/reagent/ethanol/herbal - name = "Herbal Liquor" - description = "A complex blend of herbs, spices and roots mingle in this old Earth classic." - taste_description = "a sweet summer garden" - color = "#dfff00" - strength = 13 - - glass_name = "herbal liquor" - glass_desc = "It's definitely green. Or is it yellow?" - -/datum/reagent/ethanol/specialwhiskey - name = "Special Blend Whiskey" - description = "Just when you thought regular whiskey was good... This silky, amber goodness has to come along and ruin everything." - taste_description = "liquid fire" - color = "#523600" - strength = 25 - - glass_name = "special blend whiskey" - glass_desc = "Just when you thought regular whiskey was good... This silky, amber goodness has to come along and ruin everything." - -// Cocktails -/datum/reagent/ethanol/acid_spit - name = "Acid Spit" - description = "A drink for the daring, can be deadly if incorrectly prepared!" - taste_description = "stomach acid" - reagent_state = LIQUID - color = "#365000" - strength = 30 - - glass_name = "Acid Spit" - glass_desc = "A drink from the company archives. Made from live aliens." - -/datum/reagent/ethanol/alliescocktail - name = "Allies Cocktail" - description = "A drink made from your allies, not as sweet as when made from your enemies." - taste_description = "bitter yet free" - color = "#d8ac45" - strength = 25 - - glass_name = "Allies cocktail" - glass_desc = "A drink made from your allies." - -/datum/reagent/ethanol/aloe - name = "Aloe" - description = "So very, very, very good." - taste_description = "sweet 'n creamy" - color = "#b7ea75" - strength = 15 - - glass_name = "Aloe" - glass_desc = "Very, very, very good." - -/datum/reagent/ethanol/alexander - name = "Alexander" - description = "Better be careful - it's stronger than it looks..." - taste_description = "chocolate covered brandy" - color = "#745e3d" - strength = 15 - - glass_name = "Alexander" - glass_desc = "A drink for those who wish to conquer the world, while looking classy at the same time." - -/datum/reagent/ethanol/amasec - name = "Amasec" - description = "Official drink of the Gun Club!" - taste_description = "dark and metallic" - reagent_state = LIQUID - color = "#ff975d" - strength = 25 - - glass_name = "Amasec" - glass_desc = "Always handy before COMBAT!!!" - -/datum/reagent/ethanol/andalusia - name = "Andalusia" - description = "A nice, strangely named drink." - taste_description = "lemons" - color = "#f4ea4a" - strength = 15 - - glass_name = "Andalusia" - glass_desc = "A nice, strange named drink." - -/datum/reagent/ethanol/antifreeze - name = "Anti-freeze" - description = "Ultimate refreshment." - taste_description = "Jack Frost's piss" - color = "#56deea" - strength = 12 - adj_temp = 20 - targ_temp = 330 - - glass_name = "Anti-freeze" - glass_desc = "The ultimate refreshment." - -/datum/reagent/ethanol/atomicbomb - name = "Atomic Bomb" - description = "Nuclear proliferation never tasted so good." - taste_description = "da bomb" - reagent_state = LIQUID - color = "#666300" - strength = 10 - druggy = 50 - - glass_name = "Atomic Bomb" - glass_desc = "We cannot take legal responsibility for your actions after imbibing." - -/datum/reagent/ethanol/coffee/b52 - name = "B-52" - description = "Coffee, Irish Cream, and cognac. You will get bombed." - taste_description = "angry and irish" - taste_mult = 1.3 - color = "#997650" - strength = 12 - protein_amount = 0.3 - - glass_name = "B-52" - glass_desc = "Kahlua, Irish cream, and congac. You will get bombed." - -/datum/reagent/ethanol/bad_touch - name = "Bad Touch" - description = "We're nothing but mammals, after all." - taste_description = "sour sadness" - color = "#0f8a42" - strength = 20 - - glass_name = "Bad Touch" - glass_desc = "We're nothing but mammals, after all." - -/datum/reagent/ethanol/bahama_mama - name = "Bahama mama" - description = "Tropical cocktail." - taste_description = "lime and orange" - color = "#ff7f3b" - strength = 25 - - glass_name = "Bahama Mama" - glass_desc = "Tropical cocktail" - -/datum/reagent/ethanol/bananahonk - name = "Banana Mama" - description = "A drink from Clown Heaven." - taste_description = "a bad joke" - nutriment_factor = 1 - color = "#ffff91" - strength = 12 - - glass_name = "Banana Honk" - glass_desc = "A drink from Banana Heaven." - -/datum/reagent/ethanol/barefoot - name = "Barefoot" - description = "Barefoot and pregnant" - taste_description = "creamy berries" - color = "#ffcdea" - strength = 30 - - glass_name = "Barefoot" - glass_desc = "Barefoot and pregnant" - -/datum/reagent/ethanol/beepsky_smash - name = "Beepsky Smash" - description = "Deny drinking this and prepare for THE LAW." - taste_description = "JUSTICE" - taste_mult = 2 - reagent_state = LIQUID - color = "#404040" - strength = 12 - - glass_name = "Beepsky Smash" - glass_desc = "Heavy, hot and strong. Just like the Iron fist of the LAW." - -/datum/reagent/ethanol/beepsky_smash/affect_ingest(var/mob/living/carbon/M, var/alien, var/removed) - ..() - M.Stun(2) - -/datum/reagent/ethanol/drifter - name = "Drifter" - description = "Because you'll be drifting off to sleep pretty soon." - taste_description = "heavy, sticky booze and a hint of citrus" - color = "#e7d534" - strength = 12 - - glass_name = "Drifter" - glass_desc = "A heavy duty nightcap. The taste might wake you up, though." - -/datum/reagent/ethanol/drifter/affect_ingest(mob/living/carbon/M, alien, removed) - . = ..() - if (alien == IS_DIONA) - return - var/sleep_chance = 1 - if (alien == IS_SKRELL) - sleep_chance = 2 - if (prob(sleep_chance)) - M.sleeping = max(M.sleeping, 1) - -/datum/reagent/ethanol/bilk - name = "Bilk" - description = "This appears to be beer mixed with milk. Disgusting." - taste_description = "desperation and lactate" - color = "#895c4c" - strength = 50 - nutriment_factor = 2 - protein_amount = 0.5 - - glass_name = "bilk" - glass_desc = "A brew of milk and beer. For those alcoholics who fear osteoporosis." - -/datum/reagent/ethanol/black_russian - name = "Black Russian" - description = "For the lactose-intolerant. Still as classy as a White Russian." - taste_description = "bitterness" - color = "#360000" - strength = 15 - - glass_name = "Black Russian" - glass_desc = "For the lactose-intolerant. Still as classy as a White Russian." - -/datum/reagent/ethanol/bloody_mary - name = "Bloody Mary" - description = "A strange yet pleasurable mixture made of vodka, tomato and lime juice. Or at least you THINK the red stuff is tomato juice." - taste_description = "tomatoes with a hint of lime" - color = "#b40000" - strength = 15 - - glass_name = "Bloody Mary" - glass_desc = "Tomato juice, mixed with Vodka and a lil' bit of lime. Tastes like liquid murder." - -/datum/reagent/ethanol/bogus - name = "Bogus" - description = "A blend of Gin and Blackstrap." - taste_description = "conflicting tastes and a delicious resolution" - color = "#e8dfc1" - strength = 30 - - glass_name = "bogus" - glass_desc = "A blend of Gin and Molasses." - -/datum/reagent/ethanol/booger - name = "Booger" - description = "Ewww..." - taste_description = "sweet 'n creamy" - color = "#8cff8c" - strength = 30 - - glass_name = "Booger" - glass_desc = "Ewww..." - -/datum/reagent/ethanol/coffee/brave_bull - name = "Brave Bull" - description = "It's just as effective as Dutch-Courage!" - taste_description = "alcoholic bravery" - taste_mult = 1.1 - color = "#4c3100" - strength = 15 - - glass_name = "Brave Bull" - glass_desc = "Tequilla and coffee liquor, brought together in a mouthwatering mixture. Drink up." - -/datum/reagent/ethanol/caesar - name = "Bloody Caesar" - description = "Vodka, mixed with tomato juice and hot sauce. Dash with salt and pepper." - taste_description = "broth, protein, and spicy vodka, eh?" - color = "#712e2e" - strength = 30 - - glass_name = "Bloody Caesar" - glass_desc = "Vodka with a special tomato and hot sauce mix. Dash with salt and pepper and serve with lime." - -/datum/reagent/ethanol/caipirinha - name = "Capirinha" - description = "Cachaca and lime. Felicidades!" - taste_description = "sweet tropical alcohol and lime" - color = "#fafedf" - strength = 30 - - glass_name = "capirinha" - glass_desc = "Cachaca and lime. Felicidades!." - -/datum/reagent/ethanol/changelingsting - name = "Changeling Sting" - description = "You take a tiny sip and feel a burning sensation..." - taste_description = "your brain coming out your nose" - color = "#2e6671" - strength = 10 - - glass_name = "Changeling Sting" - glass_desc = "A stingy drink." - -/datum/reagent/ethanol/martini - name = "Classic Martini" - description = "Vermouth with Gin. Not quite how 007 enjoyed it, but still delicious." - taste_description = "dry class" - color = "#bff5ee" - strength = 25 - - glass_name = "classic martini" - glass_desc = "Damn, the bartender even stirred it, not shook it." - -/datum/reagent/ethanol/cuba_libre - name = "Cuba Libre" - description = "Rum, mixed with cola. Viva la revolucion." - taste_description = "cola" - color = "#3e1b00" - strength = 30 - - glass_name = "Cuba Libre" - glass_desc = "A classic mix of rum and cola." - -/datum/reagent/ethanol/cobalt_velvet - name = "Cobalt Velvet" - description = "It's like champagne served in a cup that had a bit of cola left." - taste_description = "burning sweetness" - color = "#238b99" - strength = 40 - - glass_name = "Cobalt Velvet" - glass_desc = "It's like champagne served in a cup that had a bit of cola left." - -/datum/reagent/ethanol/daiquiri - name = "Daiquiri" - description = "Rum, mixed with lime juice and syrup." - taste_description = "a historically bad decision" - color = "#3e1b00" - strength = 30 - - glass_name = "Daiquiri" - glass_desc = "A classic cocktail made with rum." - -/datum/reagent/ethanol/dawa - name = "Dawa" - description = "Vodka, honey, and lime. Perfect." - taste_description = "a warm savannah" - color = "#d7baa4" - strength = 30 - - glass_name = "Deva" - glass_desc = "A classic cocktail made with vodka, honey, and lime." - -/datum/reagent/ethanol/demonsblood - name = "Demons Blood" - description = "AHHHH!!!!" - taste_description = "sweet tasting iron" - taste_mult = 1.5 - color = "#820000" - strength = 15 - - glass_name = "Demons' Blood" - glass_desc = "Just looking at this thing makes the hair at the back of your neck stand up." - -/datum/reagent/ethanol/devilskiss - name = "Devils Kiss" - description = "Creepy time!" - taste_description = "bitter iron" - color = "#a68310" - strength = 15 - - glass_name = "Devil's Kiss" - glass_desc = "Creepy time!" - -/datum/reagent/ethanol/driestmartini - name = "Driest Martini" - description = "Only for the experienced. You think you see sand floating in the glass." - taste_description = "a beach" - nutriment_factor = 1 - color = "#2e6671" - strength = 12 - - glass_name = "Driest Martini" - glass_desc = "Only for the experienced. You think you see sand floating in the glass." - -/datum/reagent/ethanol/forget_me_shot - name = "Forget Me Shot" - description = "If you haven't heard of it, that means it worked." - taste_description = "mind-numbing venom" - color = "#a8934b" - strength = 5 - - glass_name = "Forget Me Shot" - glass_desc = "Mixed with a pregnancy test until it turned positive." - -/datum/reagent/ethanol/ginfizz - name = "Gin Fizz" - description = "Refreshingly lemony, deliciously dry." - taste_description = "dry, tart lemons" - color = "#ffffae" - strength = 30 - - glass_name = "gin fizz" - glass_desc = "Refreshingly lemony, deliciously dry." - -/datum/reagent/ethanol/grasshopper - name = "Grasshopper" - description = "Like a chocolate mint, but alcoholic!" - taste_description = "minty chocolate" - color = "#59c08d" - strength = 30 - - glass_name = "Grasshopper" - glass_desc = "For a nice after-dinner drink." - -/datum/reagent/ethanol/grog - name = "Grog" - description = "Watered-down rum, pirate approved!" - taste_description = "a poor excuse for alcohol" - reagent_state = LIQUID - color = "#ffbb00" - strength = 100 - - glass_name = "grog" - glass_desc = "A fine and cepa drink for Space." - -/datum/reagent/ethanol/erikasurprise - name = "Erika Surprise" - description = "The surprise is, it's green!" - taste_description = "tartness and bananas" - color = "#2e6671" - strength = 15 - - glass_name = "Erika Surprise" - glass_desc = "The surprise is, it's green!" - -/datum/reagent/ethanol/gargle_blaster - name = "Pan-Galactic Gargle Blaster" - description = "Whoah, this stuff looks volatile!" - taste_description = "your brains smashed out by a lemon wrapped around a gold brick" - taste_mult = 5 - reagent_state = LIQUID - color = "#7f00ff" - strength = 10 - - glass_name = "Pan-Galactic Gargle Blaster" - glass_desc = "Does... does this mean that Arthur and Ford are here? Oh joy." - -/datum/reagent/ethanol/fringe_weaver - name = "Fringe Weaver" - description = "It's like drinking ethylic alcohol with a spoonful of sugar." - taste_description = "burning with a hint of sweetness" - color = "#ffafe0" - strength = 10 - - glass_name = "Fringe Weaver" - glass_desc = "It's like drinking ethylic alcohol with a spoonful of sugar." - -/datum/reagent/ethanol/coffee/gargled - name = "Gargled" - description = "A blend of Blackstrap and Coffee. An ideal pick-me-up for any rancher." - taste_description = "comforting warmth" - color = "#e8dfc1" - strength = 50 - - glass_name = "gargled" - glass_desc = "A blend of Blackstrap and Coffee. An ideal pick-me-up for any rancher." - -/datum/reagent/ethanol/gintonic - name = "Gin and Tonic" - description = "An all time classic, mild cocktail." - taste_description = "mild tartness" //??? - color = "#bef3f3" - strength = 50 - - glass_name = "gin and tonic" - glass_desc = "A mild but still great cocktail. Drink up, like a true Englishman." - -/datum/reagent/ethanol/goldschlager - name = "Goldschlager" - description = "100 proof cinnamon schnapps, made for alcoholic teen girls on spring break." - taste_description = "burning cinnamon" - taste_mult = 1.3 - color = "#f4e46d" - strength = 15 - - glass_name = "Goldschlager" - glass_desc = "100 proof that teen girls will drink anything with gold in it." - -/datum/reagent/ethanol/hippies_delight - name = "Hippies' Delight" - description = "You just don't get it maaaan." - taste_description = "giving peace a chance" - reagent_state = LIQUID - color = "#ff88ff" - strength = 15 - druggy = 50 - - glass_name = "Hippie's Delight" - glass_desc = "A drink enjoyed by people during the 1960's." - -/datum/reagent/ethanol/honeywine - name = "Honey Wine" - description = "A mixture of hops and honey. Also known as Tej." - taste_description = "sweet and tanic alcohol" - color = "#898873" - strength = 50 - - glass_name = "honey wine" - glass_desc = "A mixture of hops and honey. Also known as Tej." - -/datum/reagent/ethanol/hooch - name = "Hooch" - description = "Either someone's failure at cocktail making or attempt in alchohol production. In any case, do you really want to drink that?" - taste_description = "pure resignation" - color = "#4c3100" - strength = 25 - toxicity = 2 - - glass_name = "Hooch" - glass_desc = "You've really hit rock bottom now... your liver packed its bags and left last night." - -/datum/reagent/ethanol/iced_beer - name = "Iced Beer" - description = "A beer which is so cold the air around it freezes." - taste_description = "refreshingly cold" - color = "#ffd300" - strength = 50 - adj_temp = -20 - targ_temp = 270 - - glass_name = "iced beer" - glass_desc = "A beer so frosty, the air around it freezes." - glass_special = list(DRINK_ICE) - -/datum/reagent/ethanol/irishslammer - name = "Irish Slammer" - description = "Mmm, tastes like chocolate cake..." - taste_description = "delicious anger" - color = "#2e6671" - strength = 15 - - glass_name = "Irish slammer" - glass_desc = "An Irish slammer, mixed with cream, whiskey, and ale." - -/datum/reagent/ethanol/coffee/irishcoffee - name = "Irish Coffee" - description = "Coffee, and alcohol. More fun than a Mimosa to drink in the morning." - taste_description = "giving up on the day" - color = "#4c3100" - strength = 15 - - glass_name = "Irish coffee" - glass_desc = "Coffee and alcohol. More fun than a Mimosa to drink in the morning." - -/datum/reagent/ethanol/irish_cream - name = "Irish Cream" - description = "Whiskey-imbued cream, what else would you expect from the Irish." - taste_description = "creamy alcohol" - color = "#dddd9a" - strength = 25 - protein_amount = 0.5 - - glass_name = "Irish cream" - glass_desc = "It's cream, mixed with whiskey. What else would you expect from the Irish?" - -/datum/reagent/ethanol/kamikaze - name = "Kamikaze" - description = "One must truly prepare themselves for this drink." - taste_description = "sour explosions" - color = "#e6e945" - strength = 15 - - glass_name = "Kamikaze" - glass_desc = "This must have started as a joke, right? No one is supposed to drink this..." - -/datum/reagent/ethanol/kvass - name = "Kvass" - description = "An alcoholic drink commonly made from bread." - taste_description = "vkusnyy kvas, ypa!" - color = "#362f22" - strength = 30 - - glass_name = "kvass" - glass_desc = "An alcoholic drink commonly made from bread." - -/datum/reagent/ethanol/lager - name = "Lager" - description = "A dark, musty beer commonly consumed across space." - taste_description = "smooth, crisp lager" - color = "#e0b900" - strength = 50 - nutriment_factor = 1 - - glass_name = "lager" - glass_desc = "A dark, musty beer commonly consumed across space." - -/datum/reagent/ethanol/longislandicedtea - name = "Long Island Iced Tea" - description = "The liquor cabinet, brought together in a delicious mix. Intended for middle-aged alcoholic women only." - taste_description = "a mixture of cola and alcohol" - color = "#895b1f" - strength = 12 - - 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/ethanol/manhattan - name = "Manhattan" - description = "The Detective's undercover drink of choice. He never could stomach gin..." - taste_description = "mild dryness" - color = "#c13600" - strength = 15 - - glass_name = "Manhattan" - glass_desc = "The Detective's undercover drink of choice. He never could stomach gin..." - -/datum/reagent/ethanol/manhattan_proj - name = "Manhattan Project" - description = "A scientist's drink of choice, for pondering ways to blow stuff up." - taste_description = "death, the destroyer of worlds" - color = "#c15d00" - strength = 10 - druggy = 30 - - glass_name = "Manhattan Project" - glass_desc = "A scientist's drink of choice, for pondering ways to blow stuff up." - -/datum/reagent/ethanol/manly_dorf - name = "The Manly Dorf" - description = "Beer and Ale, brought together in a delicious mix. Intended for true men only." - taste_description = "hair on your chest and your chin" - color = "#4c3100" - strength = 25 - - glass_name = "The Manly Dorf" - glass_desc = "A manly concotion made from Ale and Beer. Intended for true men only." - -/datum/reagent/ethanol/margarita - name = "Margarita" - description = "On the rocks with salt on the rim. Arriba~!" - taste_description = "dry and salty" - color = "#8cff8c" - strength = 15 - - glass_name = "margarita" - glass_desc = "On the rocks with salt on the rim. Arriba~!" - -/datum/reagent/ethanol/battuta - name = "Ibn Batutta" - description = "One of the Official Cocktails of the Expeditionary Corps, celebrating Muhammad Ibn Battuta." - taste_description = "a Moroccan garden" - color = "#dfbe00" - strength = 18 - - glass_name = "Ibn Batutta cocktail" - glass_desc = "A refreshing blend of herbal liquor, the juice of an orange and a hint of mint. Named for Muhammad Ibn Battuta, whose travels spanned from Mali eastward to China in the 14th century." - -/datum/reagent/ethanol/magellan - name = "Magellan" - description = "One of the Official Cocktails of the Expeditionary Corps, celebrating Ferdinand Magellan." - taste_description = "an aristrocatic experience" - color = "#6b3535" - strength = 13 - - glass_name = "Magellan cocktail" - glass_desc = "A tasty sweetened blend of wine and fine whiskey. Named for Ferdinand Magellan, who led the first expedition to circumnavigate Earth in the 15th century." - -/datum/reagent/ethanol/stinger - name = "Stinger" - description = "A popular drink, known for its ability to mask the taste of inferior brandies with the strong flavor of creme de menthe." - taste_description = "the prohibition" - color = "#8f8465" - strength = 13 - - glass_name = "Stinger" - glass_desc = "Holding this glass will make you seem like high-soceity... if you were from the 1800s." - -/datum/reagent/ethanol/zhenghe - name = "Zheng He" - description = "One of the Official Cocktails of the Expeditionary Corps, celebrating Zheng He." - taste_description = "herbal bitterness" - color = "#173b06" - strength = 20 - - glass_name = "Zheng He cocktail" - glass_desc = "A rather bitter blend of vermouth and well-steeped black tea. Named for Zheng He, who travelled from Nanjing in China as far as Mogadishu in the Horn of Africa in the 15th century." - -/datum/reagent/ethanol/armstrong - name = "Armstrong" - description = "One of the Official Cocktails of the Expeditionary Corps, celebrating Neil Armstrong." - taste_description = "limes and alcoholic beer" - color = "#ffd300" - strength = 15 - - glass_name = "Armstrong cocktail" - glass_desc = "Beer, vodka and lime come together in this instant classic. Named for Neil Armstrong, who was the first man to set foot on Luna, in the 20th century." - -/datum/reagent/ethanol/mead - name = "Mead" - description = "A Viking's drink, though a cheap one." - taste_description = "sweet, sweet alcohol" - reagent_state = LIQUID - color = "#ffbb00" - strength = 30 - nutriment_factor = 1 - - glass_name = "mead" - glass_desc = "A Viking's beverage, though a cheap one." - -/datum/reagent/ethanol/moonshine - name = "Moonshine" - description = "You've really hit rock bottom now... your liver packed its bags and left last night." - taste_description = "bitterness" - taste_mult = 2.5 - color = "#0064c8" - strength = 12 - - glass_name = "moonshine" - glass_desc = "You've really hit rock bottom now... your liver packed its bags and left last night." - -/datum/reagent/ethanol/oldfashioned - name = "Old Fashioned" - description = "A classic mix of whiskey, sugar, and herbal liqour." - taste_description = "smooth silkiness" - color = "#976100" - strength = 25 - - glass_name = "old fashioned" - glass_desc = "This iconic cocktail demands respect." - -/datum/reagent/ethanol/neurotoxin - name = "Neurotoxin" - description = "A strong neurotoxin that puts the subject into a death-like state." - taste_description = "a numbing sensation" - reagent_state = LIQUID - color = "#2e2e61" - strength = 10 - - glass_name = "Neurotoxin" - glass_desc = "A drink that is guaranteed to knock you silly." - glass_icon = DRINK_ICON_NOISY - glass_special = list("neuroright") - -/datum/reagent/ethanol/neurotoxin/affect_ingest(var/mob/living/carbon/M, var/alien, var/removed) - ..() - M.Weaken(3) - M.add_chemical_effect(CE_PULSE, -1) - -/datum/reagent/ethanol/nevadan_gold - name = "Nevadan Gold Whiskey" - description = "A warm blend of 98 spices. Made on the homeworld." - taste_description = "strong, creamy whiskey" - color = "#ce1900" - strength = 10 - - glass_name = "Nevadan gold whiskey" - glass_desc = "A warm blend of 98 spices, brewed on Earth. A delicious mix." - -/datum/reagent/ethanol/patron - name = "Patron" - description = "Tequila with silver in it, a favorite of alcoholic women in the club scene." - taste_description = "metallic and expensive" - color = "#585840" - strength = 30 - - glass_name = "Patron" - glass_desc = "Drinking patron in the bar, with all the subpar ladies." - -/datum/reagent/ethanol/pinacolada - name = "Pina Colada" - description = "A sweet cocktail of rum and pineapple." - taste_description = "refreshing tropical fruit" - color = "#f1fa56" - strength = 15 - - glass_name = "pina colada" - glass_desc = "A sweet cocktail of rum and pineapple." - -/datum/reagent/ethanol/pwine - name = "Poison Wine" - description = "Is this even wine? Toxic! Hallucinogenic! Probably consumed in boatloads by your superiors!" - taste_description = "purified alcoholic death" - color = "#000000" - strength = 10 - druggy = 50 - halluci = 10 - - glass_name = "???" - glass_desc = "A black ichor with an oily purple sheer on top. Are you sure you should drink this?" - -/datum/reagent/ethanol/pwine/affect_ingest(var/mob/living/carbon/M, var/alien, var/removed) - ..() - if(M.chem_doses[type] > 30) - M.adjustToxLoss(2 * removed) - if(M.chem_doses[type] > 60 && ishuman(M) && prob(5)) - var/mob/living/carbon/human/H = M - var/obj/item/organ/internal/heart/L = H.internal_organs_by_name[BP_HEART] - if (L && istype(L)) - if(M.chem_doses[type] < 120) - L.take_internal_damage(10 * removed, 0) - else - L.take_internal_damage(100, 0) - -/datum/reagent/ethanol/posset - name = "Posset" - description = "A type of hot milk mixed with lemon and ale. Known mostly as a Terran delicacy." - taste_description = "warm cream and lemon" - color = "#e3e5bf" - strength = 50 - protein_amount = 0.5 - - glass_name = "posset" - glass_desc = "A sweet hot milk mixed with lemon and ale. A Terran delicacy" - -/datum/reagent/ethanol/red_mead - name = "Red Mead" - description = "The true Viking's drink! Even though it has a strange red color." - taste_description = "sweet and salty alcohol" - color = "#c73c00" - strength = 30 - - glass_name = "red mead" - glass_desc = "A true Viking's beverage, though its color is strange." - -/datum/reagent/ethanol/red_whiskey - name = "Red Whiskey" - description = "A dark red looking substance that smells like strong whiskey." - taste_description = "an intense throat burning sensation" - color = "#ce1900" - strength = 10 - - glass_name = "red whiskey" - glass_desc = "A dark red looking substance that smells like strong whiskey." - -/datum/reagent/ethanol/sangria - name = "Sangria" - description = "A mix of red wine and orange juice. Serve with slices." - taste_description = "fruity wine" - color = "#e06c3a" - strength = 30 - - glass_name = "sangria" - glass_desc = "A mix of red wine and orange juice. Serve with slices." - -/datum/reagent/ethanol/sbiten - name = "Sbiten" - description = "A spicy Mead! Might be a little hot for the little guys!" - taste_description = "hot and spice" - color = "#ffa371" - strength = 15 - adj_temp = 50 - targ_temp = 360 - - glass_name = "Sbiten" - glass_desc = "A spicy mix of Mead and Spice. Very hot." - -/datum/reagent/ethanol/screwdrivercocktail - name = "Screwdriver" - description = "Vodka, mixed with plain ol' orange juice. The result is surprisingly delicious." - taste_description = "oranges" - color = "#a68310" - strength = 15 - - glass_name = "Screwdriver" - glass_desc = "A simple, yet superb mixture of Vodka and orange juice. Just the thing for the tired engineer." - -/datum/reagent/ethanol/ships_surgeon - name = "Ship's Surgeon" - description = "Rum and Dr. Gibb. Served ice cold, like the scalpel." - taste_description = "black comedy" - color = "#524d0f" - strength = 15 - - glass_name = "ship's surgeon" - glass_desc = "Rum qualified for surgical practice by Dr. Gibb. Smooth and steady." - -/datum/reagent/ethanol/sidecar - name = "Sidecar" - description = "A mix of cognac, lemon juice, and curacao." - taste_description = "smooth, rich, sweetness" - color = "#2e6671" - strength = 30 - - glass_name = "Sidecar" - glass_desc = "A classic cocktail of cognac and lemon juice." - -/datum/reagent/ethanol/silencer - name = "Silencer" - description = "A drink from Mime Heaven." - taste_description = "a pencil eraser" - taste_mult = 1.2 - nutriment_factor = 1 - color = "#ffffff" - strength = 12 - - glass_name = "Silencer" - glass_desc = "A drink from mime Heaven." - -/datum/reagent/ethanol/singulo - name = "Singulo" - description = "A blue-space beverage!" - taste_description = "concentrated matter" - color = "#2e6671" - strength = 10 - - glass_name = "Singulo" - glass_desc = "A blue-space beverage." - -/datum/reagent/ethanol/snowwhite - name = "Snow White" - description = "A cold refreshment" - taste_description = "refreshing cold" - color = "#ffffff" - strength = 30 - - glass_name = "Snow White" - glass_desc = "A cold refreshment." - -/datum/reagent/ethanol/stag - name = "Stag" - description = "A traditional brew consumed by various members of the Fleet." - taste_description = "relief from duty" - color = "#362f22" - strength = 100 - glass_name = "stag" - glass_desc = "A classic mix of rum and tea, ideal for long nights on watch." - -/datum/reagent/ethanol/sugar_rush - name = "Sugar Rush" - description = "Sweet, light, and fruity - as girly as it gets." - taste_description = "unbearable sweetness" - color = "#f37ee9" - strength = 100 - - glass_name = "Sugar Rush" - glass_desc = "Sweet, light, and fruity - as girly as it gets." - -/datum/reagent/ethanol/suidream - name = "Sui Dream" - description = "Comprised of: White soda, blue curacao, melon liquor." - taste_description = "fruit" - color = "#00a86b" - strength = 100 - - glass_name = "Sui Dream" - glass_desc = "A froofy, fruity, and sweet mixed drink. Understanding the name only brings shame." - -/datum/reagent/ethanol/syndicatebomb - name = "Syndicate Bomb" - description = "Tastes like terrorism!" - taste_description = "purified antagonism" - color = "#2e6671" - strength = 10 - - glass_name = "Syndicate Bomb" - glass_desc = "Tastes like terrorism!" - -/datum/reagent/ethanol/tequilla_sunrise - name = "Tequila Sunrise" - description = "Tequila and orange juice. Much like a Screwdriver, only Mexican~" - taste_description = "oranges" - color = "#ffe48c" - strength = 25 - - glass_name = "Tequilla Sunrise" - glass_desc = "Oh great, now you feel nostalgic about sunrises back on Terra..." - -/datum/reagent/ethanol/threemileisland - name = "Three Mile Island Iced Tea" - description = "Made for a woman, strong enough for a man." - taste_description = "dry" - color = "#666340" - strength = 10 - druggy = 50 - - glass_name = "Three Mile Island iced tea" - glass_desc = "A glass of this is sure to prevent a meltdown." - -/datum/reagent/ethanol/toxins_special - name = "Toxins Special" - description = "This thing is ON FIRE! CALL THE DAMN SHUTTLE!" - taste_description = "spicy toxins" - reagent_state = LIQUID - color = "#7f00ff" - strength = 10 - adj_temp = 15 - targ_temp = 330 - - glass_name = "Toxins Special" - glass_desc = "Whoah, this thing is on FIRE" - -/datum/reagent/ethanol/vodkamartini - name = "Vodka Martini" - description = "Vodka with Gin. Not quite how 007 enjoyed it, but still delicious." - taste_description = "shaken, not stirred" - color = "#b8e3e7" - strength = 12 - - glass_name = "vodka martini" - glass_desc ="A bastardisation of the classic martini. Still great." - - -/datum/reagent/ethanol/vodkatonic - name = "Vodka and Tonic" - description = "For when a gin and tonic isn't russian enough." - taste_description = "tart bitterness" - color = "#c1dcf7" // rgb: 0, 100, 200 - strength = 15 - - glass_name = "vodka and tonic" - glass_desc = "For when a gin and tonic isn't Russian enough." - - -/datum/reagent/ethanol/white_russian - name = "White Russian" - description = "That's just, like, your opinion, man..." - taste_description = "bitter cream" - color = "#aa976e" - strength = 15 - - glass_name = "White Russian" - glass_desc = "A very nice looking drink. But that's just, like, your opinion, man." - - -/datum/reagent/ethanol/whiskey_cola - name = "Whiskey Cola" - description = "Whiskey, mixed with cola. Surprisingly refreshing." - taste_description = "cola" - color = "#3e1b00" - strength = 25 - - glass_name = "whiskey cola" - glass_desc = "An innocent-looking mixture of cola and Whiskey. Delicious." - - -/datum/reagent/ethanol/whiskeysoda - name = "Whiskey Soda" - description = "For the more refined griffon." - color = "#eab300" - strength = 15 - - glass_name = "whiskey soda" - glass_desc = "Ultimate refreshment." - -/datum/reagent/ethanol/vodkacola - name = "Vodka Cola" - description = "A refreshing mix of vodka and cola." - taste_description = "vodka and cola" - color = "#474238" - strength = 15 - glass_name = "vodka cola" - glass_desc = "A refreshing mix of vodka and cola." - -/datum/reagent/ethanol/springpunch - name = "Gilgamesh Spring Punch" - description = "A mix of vodka and lemon, extremely popular with Terrans." - taste_description = "refreshing clear fizz" - color = "#dfdeda" - strength = 30 - - glass_name = "Gilgamesh spring punch" - glass_desc = "A mix of vodka and lemon, extremely popular with Terrans." - -/datum/reagent/ethanol/hellshenpa - name = "Hellshen Pale Ale" - description = "A type of ale drunk in the Hellshen regions of Mars." - taste_description = "dark musty hops and Martian pride" - color = "#aa9162" - strength = 50 - - glass_name = "Hellshen Pale Ale" - glass_desc = "A type of ale drunk in the Hellshen regions of Mars." - -/datum/reagent/ethanol/jagerbomb - name = "Jagerbomb" - description = "A mix of energy drink and alcohol. Guaranteed to make you feel like an underage drinker again." - taste_description = "a pick-me-up and put-me-down" - color = "#996862" - strength = 10 - - glass_name = "jagerbomb" - glass_desc = "A mix of energy drink and alcohol. Guaranteed to make you feel like an underage drinker again." - -/datum/reagent/ethanol/jagermeister - name = "Jagermeister" - description = "A special blend of alcohol, herbs, and spices. It has remained a popular Earther drink." - taste_description = "herbs, spices, and alcohol" - color = "#596e3e" - strength = 20 - - glass_name = "jagermeister" - glass_desc = "A special blend of alcohol, herbs, and spaces. It has remained a popular Earther drink." - -/datum/reagent/ethanol/jimmygideon - name = "Jimmy Gideon" - description = "The drink of choice of Jimmy Gideon, first man on Mars." - taste_description = "the legacy of greatness and chocolate" - color = "#d9cfa5" - strength = 30 - - glass_name = "Jimmy" - glass_desc = "The drink of choice of Jimmy Gideon, first man on Mars." - -/datum/reagent/ethanol/lonestarmule - name = "Lonestar Mule" - description = "A classic Martian take on the moscow mule. Replaces vodka with molasses." - taste_description = "crisp, refreshing ginger beer and molasses" - color = "#92938a" - strength = 15 - - glass_name = "lonestar mule" - glass_desc = "A blend of whiskey, ginger beer, and lime juice." - -/datum/reagent/ethanol/tadmorwine - name = "Tadmoran Wine" - description = "An earthy type of wine distilled from grapes on Tadmor." - taste_description = "an acquired taste and holier-than-thou vibes" - color = "#362f22" - strength = 10 - - glass_name = "Tadmor wine" - glass_desc = "An earthy type of wine distilled from grapes on Tadmor." - -/datum/reagent/ethanol/lunabrandy - name = "Lunar Brandy" - description = "A strong fermented brandy typically consumed on Luna." - taste_description = "distilled wine and snobbery" - color = "#bdb6a9" - strength = 20 - - glass_name = "Lunar Brandy" - glass_desc = "A strong brandy largely consumed by the upper classes of Luna." - -/datum/reagent/ethanol/moscowmule - name = "Moscow Mule" - description = "A blend of vodka, ginger beer, and lime juice." - taste_description = "crisp, refreshing ginger and vodka" - color = "#e1dfd6" - strength = 15 - - glass_name = "moscow mule" - glass_desc = "A blend of vodka, ginger beer, and lime juice." - -/datum/reagent/ethanol/alien/qokkloa - name = "Qokk'loa" - description = "An unrefined hallucinogenic substance, potent to humans and harmless to Skrell." - taste_description = "cold, slimey mushroom" - color = "#e700e7" - strength = 50 - - glass_name = "qokk'loa" - glass_desc = "An unrefined hallucigenic substance, potent to humans and harmless to Skrell." - -/datum/reagent/ethanol/alien/qokkloa/affect_ingest(var/mob/living/carbon/M, var/alien, var/removed) - ..() - if(alien == IS_SKRELL) - return - if(alien == IS_DIONA) - return - - if(M.chem_doses[type] < 5) - M.adjustToxLoss(5 * removed) - if(M.chem_doses[type] > 5 && ishuman(M)) - var/mob/living/carbon/human/H = M - var/obj/item/organ/internal/heart/L = H.internal_organs_by_name[BP_HEART] - if (istype(L)) - if(M.chem_doses[type] < 10) - L.take_internal_damage(2 * removed, 0) - M.adjustToxLoss(5 * removed) - else - L.take_internal_damage(5 * removed, 0) - M.adjustToxLoss(10 * removed) - -/datum/reagent/ethanol/alien/qokkhrona - name = "Qokk'hrona" - description = "Delicious Skrellian wine from refined qokk'loa." - taste_description = "a thick potion of mushroom, slime, and hard alcohol" - color = "#c76c4d" - strength = 100 - druggy = 5 - - glass_name = "qokk'hrona" - glass_desc = "Delicious Skrellian wine from refined qokk'loa." - -/datum/reagent/ethanol/horchata - name = "Horchata" - description = "A delightful horchata de chufa." - taste_description = "creamy, mediterranean alcohol" - color = "#f5ecb8" - strength = 40 - - glass_name = "horchata" - glass_desc = "A lovely looking horchata del chufa." \ No newline at end of file diff --git a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Food.dm b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Food.dm deleted file mode 100644 index 682298a596cd0..0000000000000 --- a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Food.dm +++ /dev/null @@ -1,511 +0,0 @@ -/datum/reagent/nutriment - name = "Nutriment" - description = "All the vitamins, minerals, and carbohydrates the body needs in pure form." - taste_mult = 4 - reagent_state = SOLID - metabolism = REM * 4 - var/nutriment_factor = 10 // Per unit - var/hydration_factor = 0 // Per unit - var/injectable = 0 - color = "#664330" - value = 0.1 - -/datum/reagent/nutriment/mix_data(var/list/newdata, var/newamount) - - if(!islist(newdata) || !newdata.len) - return - - //add the new taste data - LAZYINITLIST(data) - for(var/taste in newdata) - if(taste in data) - data[taste] += newdata[taste] - else - data[taste] = newdata[taste] - - //cull all tastes below 10% of total - var/totalFlavor = 0 - for(var/taste in data) - totalFlavor += data[taste] - if(!totalFlavor) - return - for(var/taste in data) - if(data[taste]/totalFlavor < 0.1) - data -= taste - -/datum/reagent/nutriment/affect_blood(var/mob/living/carbon/M, var/alien, var/removed) - if(!injectable) - M.adjustToxLoss(0.2 * removed) - return - affect_ingest(M, alien, removed) - -/datum/reagent/nutriment/affect_ingest(var/mob/living/carbon/M, var/alien, var/removed) - if (alien == IS_SKRELL && protein_amount > 0) - var/datum/species/skrell/S = M.species - S.handle_protein(M, src) - M.heal_organ_damage(0.5 * removed, 0) //what - - adjust_nutrition(M, alien, removed) - M.add_chemical_effect(CE_BLOODRESTORE, 4 * removed) - -/datum/reagent/nutriment/proc/adjust_nutrition(var/mob/living/carbon/M, var/alien, var/removed) - var/nut_removed = removed - var/hyd_removed = removed - if(alien == IS_UNATHI) - removed *= 0.1 // Unathi get most of their nutrition from meat. - if(nutriment_factor) - M.adjust_nutrition(nutriment_factor * nut_removed) // For hunger and fatness - if(hydration_factor) - M.adjust_hydration(hydration_factor * hyd_removed) // For thirst - -/datum/reagent/nutriment/glucose - name = "Glucose" - color = "#ffffff" - scannable = 1 - - injectable = 1 - -/datum/reagent/nutriment/protein // Bad for Skrell! - name = "Animal Protein" - taste_description = "some sort of protein" - color = "#440000" - protein_amount = 1 - -/datum/reagent/nutriment/protein/adjust_nutrition(var/mob/living/carbon/M, var/alien, var/removed) - switch(alien) - if(IS_UNATHI) removed *= 2.25 - if(IS_SKRELL) return - M.adjust_nutrition(nutriment_factor * removed) - -/datum/reagent/nutriment/protein/egg // Also bad for skrell. - name = "egg yolk" - taste_description = "egg" - color = "#ffffaa" - -//vegetamarian alternative that is safe for skrell to ingest//rewired it from its intended nutriment/protein/egg/softtofu because it would not actually work, going with plan B, more recipes. - -/datum/reagent/nutriment/softtofu - name = "plant protein" - description = "A gooey pale bean paste." - taste_description = "healthy sadness" - color = "#ffffff" - -/datum/reagent/nutriment/honey - name = "Honey" - description = "A golden yellow syrup, loaded with sugary sweetness." - taste_description = "sweetness" - nutriment_factor = 10 - color = "#ffff00" - -/datum/reagent/nutriment/honey/affect_ingest(var/mob/living/carbon/human/M, var/alien, var/removed) - ..() - - if(alien == IS_UNATHI) - var/datum/species/unathi/S = M.species - S.handle_sugar(M,src) - -/datum/reagent/nutriment/flour - name = "flour" - description = "This is what you rub all over yourself to pretend to be a ghost." - taste_description = "chalky wheat" - reagent_state = SOLID - nutriment_factor = 1 - color = "#ffffff" - -/datum/reagent/nutriment/flour/touch_turf(var/turf/simulated/T) - if(istype(T)) - new /obj/effect/decal/cleanable/flour(T) - if(T.wet > 1) - T.wet = min(T.wet, 1) - else - T.wet = 0 - -/datum/reagent/nutriment/batter - name = "Batter" - description = "A gooey mixture of eggs and flour, a base for turning wheat into food." - taste_description = "blandness" - reagent_state = LIQUID - nutriment_factor = 3 - color = "#ffd592" - protein_amount = 0.4 - -/datum/reagent/nutriment/batter/touch_turf(var/turf/simulated/T) - if(!istype(T, /turf/space)) - new /obj/effect/decal/cleanable/pie_smudge(T) - if(T.wet > 1) - T.wet = min(T.wet, 1) - else - T.wet = 0 - -/datum/reagent/nutriment/batter/cakebatter - name = "Cake Batter" - description = "A gooey mixture of eggs, flour and sugar, a important precursor to cake!" - taste_description = "sweetness" - color = "#ffe992" - protein_amount = 0.3 - -/datum/reagent/nutriment/coffee - name = "Coffee Powder" - description = "A bitter powder made by grinding coffee beans." - taste_description = "bitterness" - taste_mult = 1.3 - nutriment_factor = 1 - color = "#482000" - -/datum/reagent/nutriment/coffee/instant - name = "Instant Coffee Powder" - description = "A bitter powder made by processing coffee beans." - -/datum/reagent/nutriment/tea - name = "Tea Powder" - description = "A dark, tart powder made from black tea leaves." - taste_description = "tartness" - taste_mult = 1.3 - nutriment_factor = 1 - color = "#101000" - -/datum/reagent/nutriment/tea/instant - name = "Instant Tea Powder" - -/datum/reagent/nutriment/coco - name = "Coco Powder" - description = "A fatty, bitter paste made from coco beans." - taste_description = "bitterness" - taste_mult = 1.3 - reagent_state = SOLID - nutriment_factor = 5 - color = "#302000" - -/datum/reagent/nutriment/instantjuice - name = "Juice Powder" - description = "Dehydrated, powdered juice of some kind." - taste_mult = 1.3 - nutriment_factor = 1 - -/datum/reagent/nutriment/instantjuice/grape - name = "Grape Juice Powder" - description = "Dehydrated, powdered grape juice." - taste_description = "dry grapes" - color = "#863333" - -/datum/reagent/nutriment/instantjuice/orange - name = "Orange Juice Powder" - description = "Dehydrated, powdered orange juice." - taste_description = "dry oranges" - color = "#e78108" - -/datum/reagent/nutriment/instantjuice/watermelon - name = "Watermelon Juice Powder" - description = "Dehydrated, powdered watermelon juice." - taste_description = "dry sweet watermelon" - color = "#b83333" - -/datum/reagent/nutriment/instantjuice/apple - name = "Apple Juice Powder" - description = "Dehydrated, powdered apple juice." - taste_description = "dry sweet apples" - color = "#c07c40" - -/datum/reagent/nutriment/soysauce - name = "Soysauce" - description = "A salty sauce made from the soy plant." - taste_description = "umami" - taste_mult = 1.1 - reagent_state = LIQUID - nutriment_factor = 2 - color = "#792300" - -/datum/reagent/nutriment/ketchup - name = "Ketchup" - description = "Ketchup, catsup, whatever. It's tomato paste." - taste_description = "ketchup" - reagent_state = LIQUID - nutriment_factor = 5 - color = "#731008" - -/datum/reagent/nutriment/barbecue - name = "Barbecue Sauce" - description = "Barbecue sauce for barbecues and long shifts." - taste_description = "barbecue" - reagent_state = LIQUID - nutriment_factor = 5 - color = "#4f330f" - -/datum/reagent/nutriment/garlicsauce - name = "Garlic Sauce" - description = "Garlic sauce, perfect for spicing up a plate of garlic." - taste_description = "garlic" - reagent_state = LIQUID - nutriment_factor = 4 - color = "#d8c045" - -/datum/reagent/nutriment/rice - name = "Rice" - description = "Enjoy the great taste of nothing." - taste_description = "rice" - taste_mult = 0.4 - reagent_state = SOLID - nutriment_factor = 1 - color = "#ffffff" - -/datum/reagent/nutriment/rice/chazuke - name = "Chazuke" - description = "Green tea over rice. How rustic!" - taste_description = "green tea and rice" - taste_mult = 0.4 - reagent_state = LIQUID - nutriment_factor = 1 - color = "#f1ffdb" - -/datum/reagent/nutriment/cherryjelly - name = "Cherry Jelly" - description = "Totally the best. Only to be spread on foods with excellent lateral symmetry." - taste_description = "cherry" - taste_mult = 1.3 - reagent_state = LIQUID - nutriment_factor = 1 - color = "#801e28" - -/datum/reagent/nutriment/cornoil - name = "Corn Oil" - description = "An oil derived from various types of corn." - taste_description = "slime" - taste_mult = 0.1 - reagent_state = LIQUID - nutriment_factor = 20 - color = "#302000" - -/datum/reagent/nutriment/cornoil/touch_turf(var/turf/simulated/T) - if(!istype(T)) - return - - var/hotspot = (locate(/obj/hotspot) in T) - if(hotspot && !istype(T, /turf/space)) - var/datum/gas_mixture/lowertemp = T.remove_air(T:air:total_moles) - lowertemp.temperature = max(min(lowertemp.temperature-2000, lowertemp.temperature / 2), 0) - lowertemp.react() - T.assume_air(lowertemp) - qdel(hotspot) - - if(volume >= 3) - T.wet_floor() - -/datum/reagent/nutriment/sprinkles - name = "Sprinkles" - description = "Multi-colored little bits of sugar, commonly found on donuts. Loved by cops." - taste_description = "childhood whimsy" - nutriment_factor = 1 - color = "#ff00ff" - -/datum/reagent/nutriment/mint - name = "Mint" - description = "Also known as Mentha." - taste_description = "sweet mint" - reagent_state = LIQUID - color = "#07aab2" - -/datum/reagent/lipozine // The anti-nutriment. - name = "Lipozine" - description = "A chemical compound that causes a powerful fat-burning reaction." - taste_description = "mothballs" - reagent_state = LIQUID - color = "#bbeda4" - overdose = REAGENTS_OVERDOSE - value = 0.11 - -/datum/reagent/lipozine/affect_blood(var/mob/living/carbon/M, var/alien, var/removed) - M.adjust_nutrition(-10) - -/* Non-food stuff like condiments */ - -/datum/reagent/sodiumchloride - name = "Table Salt" - description = "A salt made of sodium chloride. Commonly used to season food." - taste_description = "salt" - reagent_state = SOLID - color = "#ffffff" - overdose = REAGENTS_OVERDOSE - value = 0.11 - -/datum/reagent/blackpepper - name = "Black Pepper" - description = "A powder ground from peppercorns. *AAAACHOOO*" - taste_description = "pepper" - reagent_state = SOLID - color = "#000000" - value = 0.1 - -/datum/reagent/enzyme - name = "Universal Enzyme" - description = "A universal enzyme used in the preperation of certain chemicals and foods." - taste_description = "sweetness" - taste_mult = 0.7 - reagent_state = LIQUID - color = "#365e30" - overdose = REAGENTS_OVERDOSE - value = 0.2 - -/datum/reagent/frostoil - name = "Chilly Oil" - description = "An oil harvested from a mutant form of chili peppers, it has a chilling effect on the body." - taste_description = "arctic mint" - taste_mult = 1.5 - reagent_state = LIQUID - color = "#07aab2" - value = 0.2 - -/datum/reagent/frostoil/affect_blood(var/mob/living/carbon/M, var/alien, var/removed) - if(alien == IS_DIONA) - return - M.bodytemperature = max(M.bodytemperature - 10 * TEMPERATURE_DAMAGE_COEFFICIENT, 0) - if(prob(1)) - M.emote("shiver") - if(istype(M, /mob/living/carbon/slime)) - M.bodytemperature = max(M.bodytemperature - rand(10,20), 0) - holder.remove_reagent(/datum/reagent/capsaicin, 5) - -/datum/reagent/capsaicin - name = "Capsaicin Oil" - description = "This is what makes chilis hot." - taste_description = "hot peppers" - taste_mult = 1.5 - reagent_state = LIQUID - color = "#b31008" - var/agony_dose = 5 - var/agony_amount = 2 - var/discomfort_message = "Your insides feel uncomfortably hot!" - var/slime_temp_adj = 10 - value = 0.2 - -/datum/reagent/capsaicin/affect_blood(var/mob/living/carbon/M, var/alien, var/removed) - if(alien == IS_DIONA) - return - M.adjustToxLoss(0.5 * removed) - -/datum/reagent/capsaicin/affect_ingest(var/mob/living/carbon/M, var/alien, var/removed) - if(alien == IS_DIONA || alien == IS_UNATHI) - return - if(ishuman(M)) - var/mob/living/carbon/human/H = M - if(!H.can_feel_pain()) - return - if(M.chem_doses[type] < agony_dose) - if(prob(5) || M.chem_doses[type] == metabolism) //dose == metabolism is a very hacky way of forcing the message the first time this procs - to_chat(M, discomfort_message) - else - M.apply_effect(agony_amount, EFFECT_PAIN, 0) - if(prob(5)) - M.custom_emote(2, "[pick("dry heaves!","coughs!","splutters!")]") - to_chat(M, "You feel like your insides are burning!") - if(istype(M, /mob/living/carbon/slime)) - M.bodytemperature += rand(0, 15) + slime_temp_adj - holder.remove_reagent(/datum/reagent/frostoil, 5) - -/datum/reagent/capsaicin/condensed - name = "Condensed Capsaicin" - description = "A chemical agent used for self-defense and in police work." - taste_description = "scorching agony" - taste_mult = 10 - reagent_state = LIQUID - touch_met = 5 // Get rid of it quickly - color = "#b31008" - agony_dose = 0.5 - agony_amount = 4 - discomfort_message = "You feel like your insides are burning!" - slime_temp_adj = 15 - -/datum/reagent/capsaicin/condensed/affect_touch(var/mob/living/carbon/M, var/alien, var/removed) - var/eyes_covered = 0 - var/mouth_covered = 0 - var/partial_mouth_covered = 0 - var/stun_probability = 50 - var/no_pain = 0 - var/obj/item/eye_protection = null - var/obj/item/face_protection = null - var/obj/item/partial_face_protection = null - - var/effective_strength = 5 - - if(alien == IS_SKRELL) //Larger eyes means bigger targets. - effective_strength = 8 - - var/list/protection - if(istype(M, /mob/living/carbon/human)) - var/mob/living/carbon/human/H = M - protection = list(H.head, H.glasses, H.wear_mask) - if(!H.can_feel_pain()) - no_pain = 1 //TODO: living-level can_feel_pain() proc - else - protection = list(M.wear_mask) - - for(var/obj/item/I in protection) - if(I) - if(I.body_parts_covered & EYES) - eyes_covered = 1 - eye_protection = I.name - if((I.body_parts_covered & FACE) && !(I.item_flags & ITEM_FLAG_FLEXIBLEMATERIAL)) - mouth_covered = 1 - face_protection = I.name - else if(I.body_parts_covered & FACE) - partial_mouth_covered = 1 - partial_face_protection = I.name - - if(eyes_covered) - if(!mouth_covered) - to_chat(M, "Your [eye_protection] protects your eyes from the pepperspray!") - else - to_chat(M, "The pepperspray gets in your eyes!") - M.confused += 2 - if(mouth_covered) - M.eye_blurry = max(M.eye_blurry, effective_strength * 3) - M.eye_blind = max(M.eye_blind, effective_strength) - else - M.eye_blurry = max(M.eye_blurry, effective_strength * 5) - M.eye_blind = max(M.eye_blind, effective_strength * 2) - - if(mouth_covered) - to_chat(M, "Your [face_protection] protects you from the pepperspray!") - else if(!no_pain) - if(partial_mouth_covered) - to_chat(M, "Your [partial_face_protection] partially protects you from the pepperspray!") - stun_probability *= 0.5 - to_chat(M, "Your face and throat burn!") - if(M.stunned > 0 && !M.lying) - M.Weaken(4) - if(prob(stun_probability)) - M.custom_emote(2, "[pick("coughs!","coughs hysterically!","splutters!")]") - M.Stun(3) - -/datum/reagent/capsaicin/condensed/affect_ingest(var/mob/living/carbon/M, var/alien, var/removed) - if(ishuman(M)) - var/mob/living/carbon/human/H = M - if(!H.can_feel_pain()) - return - if(M.chem_doses[type] == metabolism) - to_chat(M, "You feel like your insides are burning!") - else - M.apply_effect(6, EFFECT_PAIN, 0) - if(prob(5)) - to_chat(M, "You feel like your insides are burning!") - M.custom_emote(2, "[pick("coughs.","gags.","retches.")]") - M.Stun(2) - if(istype(M, /mob/living/carbon/slime)) - M.bodytemperature += rand(15, 30) - holder.remove_reagent(/datum/reagent/frostoil, 5) - -/datum/reagent/nutriment/vinegar - name = "Vinegar" - description = "A weak solution of acetic acid. Usually used for seasoning food." - taste_description = "vinegar" - reagent_state = LIQUID - color = "#e8dfd0" - taste_mult = 3 - -/datum/reagent/nutriment/mayo - name = "Mayonnaise" - description = "A mixture of egg yolk with lemon juice or vinegar. Usually put on bland food to make it more edible." - taste_description = "mayo" - reagent_state = LIQUID - color = "#efede8" - taste_mult = 2 - protein_amount = 0.7 diff --git a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Medicine.dm b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Medicine.dm deleted file mode 100644 index 6ece1ec25210d..0000000000000 --- a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Medicine.dm +++ /dev/null @@ -1,1045 +0,0 @@ -/* General medicine */ - -/datum/reagent/inaprovaline - name = "Inaprovaline" - description = "Inaprovaline is a multipurpose neurostimulant and cardioregulator. Commonly used to slow bleeding and stabilize patients." - taste_description = "bitterness" - reagent_state = LIQUID - color = "#00bfff" - overdose = REAGENTS_OVERDOSE * 2 - metabolism = REM * 0.5 - scannable = 1 - flags = IGNORE_MOB_SIZE - value = 3.5 - -/datum/reagent/inaprovaline/affect_blood(var/mob/living/carbon/M, var/alien, var/removed) - if(alien != IS_DIONA) - M.add_chemical_effect(CE_STABLE) - M.add_chemical_effect(CE_PAINKILLER, 10) - -/datum/reagent/inaprovaline/overdose(var/mob/living/carbon/M, var/alien) - M.add_chemical_effect(CE_SLOWDOWN, 1) - if(prob(5)) - M.slurring = max(M.slurring, 10) - if(prob(2)) - M.drowsyness = max(M.drowsyness, 5) - -/datum/reagent/bicaridine - name = "Bicaridine" - description = "Bicaridine is a fast-acting medication to treat physical trauma." - taste_description = "bitterness" - taste_mult = 3 - reagent_state = LIQUID - color = "#bf0000" - overdose = REAGENTS_OVERDOSE - scannable = 1 - flags = IGNORE_MOB_SIZE - value = 4.9 - -/datum/reagent/bicaridine/affect_blood(var/mob/living/carbon/M, var/alien, var/removed) - if(alien != IS_DIONA) - M.heal_organ_damage(6 * removed, 0) - M.add_chemical_effect(CE_PAINKILLER, 10) - -/datum/reagent/bicaridine/overdose(var/mob/living/carbon/M, var/alien) - ..() - if(ishuman(M)) - M.add_chemical_effect(CE_BLOCKAGE, (15 + volume - overdose)/100) - var/mob/living/carbon/human/H = M - for(var/obj/item/organ/external/E in H.organs) - if(E.status & ORGAN_ARTERY_CUT && prob(2)) - E.status &= ~ORGAN_ARTERY_CUT - -/datum/reagent/kelotane - name = "Kelotane" - description = "Kelotane is a drug used to treat burns." - taste_description = "bitterness" - reagent_state = LIQUID - color = "#ffa800" - overdose = REAGENTS_OVERDOSE - scannable = 1 - flags = IGNORE_MOB_SIZE - value = 2.9 - -/datum/reagent/kelotane/affect_blood(mob/living/carbon/M, alien, removed) - if(alien != IS_DIONA) - M.heal_organ_damage(0, 6 * removed) - -/datum/reagent/dermaline - name = "Dermaline" - description = "Dermaline is the next step in burn medication. Works twice as good as kelotane and enables the body to restore even the direst heat-damaged tissue." - taste_description = "bitterness" - taste_mult = 1.5 - reagent_state = LIQUID - color = "#ff8000" - overdose = REAGENTS_OVERDOSE * 0.5 - scannable = 1 - flags = IGNORE_MOB_SIZE - value = 3.9 - -/datum/reagent/dermaline/affect_blood(mob/living/carbon/M, alien, removed) - if(alien != IS_DIONA) - M.heal_organ_damage(0, 12 * removed) - -/datum/reagent/dylovene - name = "Dylovene" - description = "Dylovene is a broad-spectrum antitoxin used to neutralize poisons before they can do significant harm." - taste_description = "a roll of gauze" - reagent_state = LIQUID - color = "#00a000" - scannable = 1 - flags = IGNORE_MOB_SIZE - value = 2.1 - var/remove_generic = 1 - var/list/remove_toxins = list( - /datum/reagent/toxin/zombiepowder - ) - -/datum/reagent/dylovene/affect_blood(var/mob/living/carbon/M, var/alien, var/removed) - if(alien == IS_DIONA) - return - - if(remove_generic) - M.drowsyness = max(0, M.drowsyness - 6 * removed) - M.adjust_hallucination(-9 * removed) - M.add_up_to_chemical_effect(CE_ANTITOX, 1) - - var/removing = (4 * removed) - var/datum/reagents/ingested = M.get_ingested_reagents() - for(var/datum/reagent/R in ingested.reagent_list) - if((remove_generic && istype(R, /datum/reagent/toxin)) || (R.type in remove_toxins)) - ingested.remove_reagent(R.type, removing) - return - for(var/datum/reagent/R in M.reagents.reagent_list) - if((remove_generic && istype(R, /datum/reagent/toxin)) || (R.type in remove_toxins)) - M.reagents.remove_reagent(R.type, removing) - return - -/datum/reagent/dexalin - name = "Dexalin" - description = "Dexalin is used in the treatment of oxygen deprivation." - taste_description = "bitterness" - reagent_state = LIQUID - color = "#0080ff" - overdose = REAGENTS_OVERDOSE - scannable = 1 - flags = IGNORE_MOB_SIZE - value = 2.4 - -/datum/reagent/dexalin/affect_blood(var/mob/living/carbon/M, var/alien, var/removed) - if(alien == IS_VOX) - M.adjustToxLoss(removed * 6) - else if(alien != IS_DIONA) - M.add_chemical_effect(CE_OXYGENATED, 1) - holder.remove_reagent(/datum/reagent/lexorin, 2 * removed) - -/datum/reagent/dexalinp - name = "Dexalin Plus" - description = "Dexalin Plus is used in the treatment of oxygen deprivation. It is highly effective." - taste_description = "bitterness" - reagent_state = LIQUID - color = "#0040ff" - overdose = REAGENTS_OVERDOSE * 0.5 - scannable = 1 - flags = IGNORE_MOB_SIZE - value = 3.7 - -/datum/reagent/dexalinp/affect_blood(var/mob/living/carbon/M, var/alien, var/removed) - if(alien == IS_VOX) - M.adjustToxLoss(removed * 9) - else if(alien != IS_DIONA) - M.add_chemical_effect(CE_OXYGENATED, 2) - holder.remove_reagent(/datum/reagent/lexorin, 3 * removed) - -/datum/reagent/tricordrazine - name = "Tricordrazine" - description = "Tricordrazine is a highly potent stimulant, originally derived from cordrazine. Can be used to treat a wide range of injuries." - taste_description = "grossness" - reagent_state = LIQUID - color = "#8040ff" - scannable = 1 - flags = IGNORE_MOB_SIZE - value = 6 - -/datum/reagent/tricordrazine/affect_blood(var/mob/living/carbon/M, var/alien, var/removed) - if(alien != IS_DIONA) - M.heal_organ_damage(3 * removed, 3 * removed) - -/datum/reagent/cryoxadone - name = "Cryoxadone" - description = "A chemical mixture with almost magical healing powers. Its main limitation is that the targets body temperature must be under 170K for it to metabolise correctly." - taste_description = "sludge" - reagent_state = LIQUID - color = "#8080ff" - metabolism = REM * 0.5 - scannable = 1 - flags = IGNORE_MOB_SIZE - value = 3.9 - -/datum/reagent/cryoxadone/affect_blood(var/mob/living/carbon/M, var/alien, var/removed) - M.add_chemical_effect(CE_CRYO, 1) - if(M.bodytemperature < 170) - M.adjustCloneLoss(-100 * removed) - M.add_chemical_effect(CE_OXYGENATED, 1) - M.heal_organ_damage(30 * removed, 30 * removed) - M.add_chemical_effect(CE_PULSE, -2) - if(ishuman(M)) - var/mob/living/carbon/human/H = M - for(var/obj/item/organ/internal/I in H.internal_organs) - if(!BP_IS_ROBOTIC(I)) - I.heal_damage(20*removed) - - -/datum/reagent/clonexadone - name = "Clonexadone" - description = "A liquid compound similar to that used in the cloning process. Can be used to 'finish' the cloning process when used in conjunction with a cryo tube." - taste_description = "slime" - reagent_state = LIQUID - color = "#80bfff" - metabolism = REM * 0.5 - scannable = 1 - flags = IGNORE_MOB_SIZE - heating_products = list(/datum/reagent/cryoxadone, /datum/reagent/sodium) - heating_point = 50 CELSIUS - heating_message = "turns back to sludge." - value = 5.5 - -/datum/reagent/clonexadone/affect_blood(var/mob/living/carbon/M, var/alien, var/removed) - M.add_chemical_effect(CE_CRYO, 1) - if(M.bodytemperature < 170) - M.adjustCloneLoss(-300 * removed) - M.add_chemical_effect(CE_OXYGENATED, 2) - M.heal_organ_damage(50 * removed, 50 * removed) - M.add_chemical_effect(CE_PULSE, -2) - if(ishuman(M)) - var/mob/living/carbon/human/H = M - for(var/obj/item/organ/internal/I in H.internal_organs) - if(!BP_IS_ROBOTIC(I)) - I.heal_damage(30*removed) - -/datum/reagent/nanitefluid - name = "Nanite Fluid" - description = "A solution of repair nanites used to repair robotic organs. Due to the nature of the small magnetic fields used to guide the nanites, it must be used in temperatures below 170K." - taste_description = "metallic sludge" - reagent_state = LIQUID - color = "#c2c2d6" - scannable = 1 - flags = IGNORE_MOB_SIZE - -/datum/reagent/nanitefluid/affect_blood(var/mob/living/carbon/M, var/alien, var/removed) - M.add_chemical_effect(CE_CRYO, 1) - if(M.bodytemperature < 170) - M.heal_organ_damage(30 * removed, 30 * removed, affect_robo = 1) - if(ishuman(M)) - var/mob/living/carbon/human/H = M - for(var/obj/item/organ/internal/I in H.internal_organs) - if(BP_IS_ROBOTIC(I)) - I.heal_damage(20*removed) - -/* Painkillers */ - -/datum/reagent/paracetamol - name = "Paracetamol" - description = "Most probably know this as Tylenol, but this chemical is a mild, simple painkiller." - taste_description = "sickness" - reagent_state = LIQUID - color = "#c8a5dc" - overdose = 60 - reagent_state = LIQUID - scannable = 1 - metabolism = 0.02 - flags = IGNORE_MOB_SIZE - value = 3.3 - -/datum/reagent/paracetamol/affect_blood(var/mob/living/carbon/M, var/alien, var/removed) - M.add_chemical_effect(CE_PAINKILLER, 35) - -/datum/reagent/paracetamol/overdose(var/mob/living/carbon/M, var/alien) - M.add_chemical_effect(CE_TOXIN, 1) - M.druggy = max(M.druggy, 2) - M.add_chemical_effect(CE_PAINKILLER, 10) - -/datum/reagent/tramadol - name = "Tramadol" - description = "A simple, yet effective painkiller. Don't mix with alcohol." - taste_description = "sourness" - reagent_state = LIQUID - color = "#cb68fc" - overdose = 30 - scannable = 1 - metabolism = 0.05 - ingest_met = 0.02 - flags = IGNORE_MOB_SIZE - value = 3.1 - var/pain_power = 80 //magnitide of painkilling effect - var/effective_dose = 0.5 //how many units it need to process to reach max power - -/datum/reagent/tramadol/affect_blood(var/mob/living/carbon/M, var/alien, var/removed) - var/effectiveness = 1 - if(M.chem_doses[type] < effective_dose) //some ease-in ease-out for the effect - effectiveness = M.chem_doses[type]/effective_dose - else if(volume < effective_dose) - effectiveness = volume/effective_dose - M.add_chemical_effect(CE_PAINKILLER, pain_power * effectiveness) - if(M.chem_doses[type] > 0.5 * overdose) - M.add_chemical_effect(CE_SLOWDOWN, 1) - if(prob(1)) - M.slurring = max(M.slurring, 10) - if(M.chem_doses[type] > 0.75 * overdose) - M.add_chemical_effect(CE_SLOWDOWN, 1) - if(prob(5)) - M.slurring = max(M.slurring, 20) - if(M.chem_doses[type] > overdose) - M.add_chemical_effect(CE_SLOWDOWN, 1) - M.slurring = max(M.slurring, 30) - if(prob(1)) - M.Weaken(2) - M.drowsyness = max(M.drowsyness, 5) - var/boozed = isboozed(M) - if(boozed) - M.add_chemical_effect(CE_ALCOHOL_TOXIC, 1) - M.add_chemical_effect(CE_BREATHLOSS, 0.1 * boozed) //drinking and opiating makes breathing kinda hard - -/datum/reagent/tramadol/overdose(var/mob/living/carbon/M, var/alien) - ..() - M.hallucination(120, 30) - M.druggy = max(M.druggy, 10) - M.add_chemical_effect(CE_PAINKILLER, pain_power*0.5) //extra painkilling for extra trouble - M.add_chemical_effect(CE_BREATHLOSS, 0.6) //Have trouble breathing, need more air - if(isboozed(M)) - M.add_chemical_effect(CE_BREATHLOSS, 0.2) //Don't drink and OD on opiates folks - -/datum/reagent/tramadol/proc/isboozed(var/mob/living/carbon/M) - . = 0 - var/datum/reagents/ingested = M.get_ingested_reagents() - if(ingested) - var/list/pool = M.reagents.reagent_list | ingested.reagent_list - for(var/datum/reagent/ethanol/booze in pool) - if(M.chem_doses[booze.type] < 2) //let them experience false security at first - continue - . = 1 - if(booze.strength < 40) //liquor stuff hits harder - return 2 - -/datum/reagent/tramadol/oxycodone - name = "Oxycodone" - description = "An effective and very addictive painkiller. Don't mix with alcohol." - taste_description = "bitterness" - color = "#800080" - scannable = 1 - overdose = 20 - pain_power = 200 - effective_dose = 2 - -/datum/reagent/deletrathol - name = "Deletrathol" - description = "An effective painkiller that causes confusion." - taste_description = "confusion" - color = "#800080" - reagent_state = LIQUID - overdose = 15 - scannable = 1 - metabolism = 0.02 - flags = IGNORE_MOB_SIZE - -/datum/reagent/deletrathol/affect_blood(var/mob/living/carbon/human/H, var/alien, var/removed) - H.add_chemical_effect(CE_PAINKILLER, 80) - H.add_chemical_effect(CE_SLOWDOWN, 1) - H.make_dizzy(2) - if(prob(75)) - H.drowsyness++ - if(prob(25)) - H.confused++ - -/datum/reagent/deletrathol/overdose(var/mob/living/carbon/M, var/alien) - ..() - M.druggy = max(M.druggy, 2) - M.add_chemical_effect(CE_PAINKILLER, 10) - -/* Other medicine */ - -/datum/reagent/synaptizine - name = "Synaptizine" - description = "Synaptizine is used to treat various diseases." - taste_description = "bitterness" - reagent_state = LIQUID - color = "#99ccff" - metabolism = REM * 0.05 - overdose = REAGENTS_OVERDOSE / 6 // 5 - scannable = 1 - value = 4.6 - -/datum/reagent/synaptizine/affect_blood(var/mob/living/carbon/M, var/alien, var/removed) - if(alien == IS_DIONA) - return - M.drowsyness = max(M.drowsyness - 5, 0) - M.AdjustParalysis(-1) - M.AdjustStunned(-1) - M.AdjustWeakened(-1) - holder.remove_reagent(/datum/reagent/mindbreaker, 5) - M.adjust_hallucination(-10) - M.add_chemical_effect(CE_MIND, 2) - M.adjustToxLoss(5 * removed) // It used to be incredibly deadly due to an oversight. Not anymore! - M.add_chemical_effect(CE_PAINKILLER, 20) - M.add_chemical_effect(CE_STIMULANT, 10) - -/datum/reagent/dylovene/venaxilin - name = "Venaxilin" - description = "Venixalin is a strong, specialised antivenom for dealing with advanced toxins and venoms." - taste_description = "overpowering sweetness" - color = "#dadd98" - scannable = 1 - metabolism = REM * 2 - remove_generic = 0 - remove_toxins = list( - /datum/reagent/toxin/venom, - /datum/reagent/toxin/carpotoxin - ) - -/datum/reagent/alkysine - name = "Alkysine" - description = "Alkysine is a drug used to lessen the damage to neurological tissue after a injury. Can aid in healing brain tissue." - taste_description = "bitterness" - reagent_state = LIQUID - color = "#ffff66" - metabolism = REM * 0.25 - overdose = REAGENTS_OVERDOSE - scannable = 1 - flags = IGNORE_MOB_SIZE - value = 5.9 - -/datum/reagent/alkysine/affect_blood(var/mob/living/carbon/M, var/alien, var/removed) - if(alien == IS_DIONA) - return - M.add_chemical_effect(CE_PAINKILLER, 10) - M.add_chemical_effect(CE_BRAIN_REGEN, 1) - if(ishuman(M)) - var/mob/living/carbon/human/H = M - H.confused++ - H.drowsyness++ - -/datum/reagent/imidazoline - name = "Imidazoline" - description = "Heals eye damage" - taste_description = "dull toxin" - reagent_state = LIQUID - color = "#c8a5dc" - overdose = REAGENTS_OVERDOSE - scannable = 1 - flags = IGNORE_MOB_SIZE - value = 4.2 - -/datum/reagent/imidazoline/affect_blood(var/mob/living/carbon/M, var/alien, var/removed) - M.eye_blurry = max(M.eye_blurry - 5, 0) - M.eye_blind = max(M.eye_blind - 5, 0) - if(ishuman(M)) - var/mob/living/carbon/human/H = M - var/obj/item/organ/internal/eyes/E = H.internal_organs_by_name[BP_EYES] - if(E && istype(E)) - if(E.damage > 0) - E.damage = max(E.damage - 5 * removed, 0) - -/datum/reagent/peridaxon - name = "Peridaxon" - description = "Used to encourage recovery of internal organs and nervous systems. Medicate cautiously." - taste_description = "bitterness" - reagent_state = LIQUID - color = "#561ec3" - overdose = 10 - scannable = 1 - flags = IGNORE_MOB_SIZE - value = 6 - -/datum/reagent/peridaxon/affect_blood(var/mob/living/carbon/M, var/alien, var/removed) - if(ishuman(M)) - var/mob/living/carbon/human/H = M - for(var/obj/item/organ/internal/I in H.internal_organs) - if(!BP_IS_ROBOTIC(I)) - if(I.organ_tag == BP_BRAIN) - // if we have located an organic brain, apply side effects - H.confused++ - H.drowsyness++ - // peridaxon only heals minor brain damage - if(I.damage >= I.min_bruised_damage) - continue - I.heal_damage(removed) - -/datum/reagent/ryetalyn - name = "Ryetalyn" - description = "Ryetalyn can cure all genetic abnomalities via a catalytic process." - taste_description = "acid" - reagent_state = SOLID - color = "#004000" - scannable = 1 - overdose = REAGENTS_OVERDOSE - value = 3.6 - -/datum/reagent/ryetalyn/affect_blood(var/mob/living/carbon/M, var/alien, var/removed) - var/needs_update = M.mutations.len > 0 - - M.disabilities = 0 - M.sdisabilities = 0 - - if(needs_update && ishuman(M)) - M.dna.ResetUI() - M.dna.ResetSE() - domutcheck(M, null, MUTCHK_FORCED) - -/datum/reagent/hyperzine - name = "Hyperzine" - description = "Hyperzine is a highly effective, long lasting, muscle stimulant." - taste_description = "acid" - reagent_state = LIQUID - color = "#ff3300" - metabolism = REM * 0.15 - overdose = REAGENTS_OVERDOSE * 0.5 - value = 3.9 - -/datum/reagent/hyperzine/affect_blood(var/mob/living/carbon/M, var/alien, var/removed) - if(alien == IS_DIONA) - return - if(prob(5)) - M.emote(pick("twitch", "blink_r", "shiver")) - M.add_chemical_effect(CE_SPEEDBOOST, 1) - M.add_chemical_effect(CE_PULSE, 3) - M.add_chemical_effect(CE_STIMULANT, 4) - -/datum/reagent/ethylredoxrazine - name = "Ethylredoxrazine" - description = "A powerful oxidizer that reacts with ethanol." - reagent_state = SOLID - color = "#605048" - scannable = 1 - overdose = REAGENTS_OVERDOSE - value = 3.1 - -/datum/reagent/ethylredoxrazine/affect_blood(var/mob/living/carbon/M, var/alien, var/removed) - if(alien == IS_DIONA) - return - M.dizziness = 0 - M.drowsyness = 0 - M.stuttering = 0 - M.confused = 0 - var/datum/reagents/ingested = M.get_ingested_reagents() - if(ingested) - for(var/datum/reagent/R in ingested.reagent_list) - if(istype(R, /datum/reagent/ethanol)) - M.chem_doses[R.type] = max(M.chem_doses[R.type] - removed * 5, 0) - -/datum/reagent/hyronalin - name = "Hyronalin" - description = "Hyronalin is a medicinal drug used to counter the effect of radiation poisoning." - taste_description = "bitterness" - reagent_state = LIQUID - color = "#408000" - metabolism = REM * 0.25 - overdose = REAGENTS_OVERDOSE - scannable = 1 - flags = IGNORE_MOB_SIZE - value = 2.3 - -/datum/reagent/hyronalin/affect_blood(var/mob/living/carbon/M, var/alien, var/removed) - M.radiation = max(M.radiation - 30 * removed, 0) - -/datum/reagent/arithrazine - name = "Arithrazine" - description = "Arithrazine is an unstable medication used for the most extreme cases of radiation poisoning." - reagent_state = LIQUID - color = "#008000" - metabolism = REM * 0.25 - overdose = REAGENTS_OVERDOSE - scannable = 1 - flags = IGNORE_MOB_SIZE - value = 2.7 - -/datum/reagent/arithrazine/affect_blood(var/mob/living/carbon/M, var/alien, var/removed) - M.radiation = max(M.radiation - 70 * removed, 0) - M.adjustToxLoss(-10 * removed) - if(prob(60)) - M.take_organ_damage(4 * removed, 0, ORGAN_DAMAGE_FLESH_ONLY) - -/datum/reagent/spaceacillin - name = "Spaceacillin" - description = "An all-purpose antiviral agent." - taste_description = "bitterness" - reagent_state = LIQUID - color = "#c1c1c1" - metabolism = REM * 0.1 - overdose = REAGENTS_OVERDOSE/2 - scannable = 1 - value = 2.5 - -/datum/reagent/spaceacillin/affect_blood(var/mob/living/carbon/M, var/alien, var/removed) - M.immunity = max(M.immunity - 0.1, 0) - M.add_chemical_effect(CE_ANTIVIRAL, VIRUS_COMMON) - M.add_chemical_effect(CE_ANTIBIOTIC, 1) - if(volume > 10) - M.immunity = max(M.immunity - 0.3, 0) - M.add_chemical_effect(CE_ANTIVIRAL, VIRUS_ENGINEERED) - if(M.chem_doses[type] > 15) - M.immunity = max(M.immunity - 0.25, 0) - -/datum/reagent/spaceacillin/overdose(var/mob/living/carbon/M, var/alien) - ..() - M.immunity = max(M.immunity - 0.25, 0) - M.add_chemical_effect(CE_ANTIVIRAL, VIRUS_EXOTIC) - if(prob(2)) - M.immunity_norm = max(M.immunity_norm - 1, 0) - -/datum/reagent/sterilizine - name = "Sterilizine" - description = "Sterilizes wounds in preparation for surgery and thoroughly removes blood." - taste_description = "bitterness" - reagent_state = LIQUID - color = "#c8a5dc" - touch_met = 5 - value = 2.2 - -/datum/reagent/sterilizine/affect_touch(var/mob/living/carbon/M, var/alien, var/removed) - if(M.germ_level < INFECTION_LEVEL_TWO) // rest and antibiotics is required to cure serious infections - M.germ_level -= min(removed*20, M.germ_level) - for(var/obj/item/I in M.contents) - I.was_bloodied = null - M.was_bloodied = null - -/datum/reagent/sterilizine/touch_obj(var/obj/O) - O.germ_level -= min(volume*20, O.germ_level) - O.was_bloodied = null - -/datum/reagent/sterilizine/touch_turf(var/turf/T) - T.germ_level -= min(volume*20, T.germ_level) - for(var/obj/item/I in T.contents) - I.was_bloodied = null - for(var/obj/effect/decal/cleanable/blood/B in T) - qdel(B) - -/datum/reagent/leporazine - name = "Leporazine" - description = "Leporazine can be use to stabilize an individuals body temperature." - taste_description = "bitterness" - reagent_state = LIQUID - color = "#c8a5dc" - overdose = REAGENTS_OVERDOSE - scannable = 1 - chilling_products = list(/datum/reagent/leporazine/cold) - chilling_point = -10 CELSIUS - chilling_message = "Takes on the consistency of slush." - heating_products = list(/datum/reagent/leporazine/hot) - heating_point = 110 CELSIUS - heating_message = "starts swirling, glowing occasionally." - value = 2 - -/datum/reagent/leporazine/affect_blood(var/mob/living/carbon/M, var/alien, var/removed) - if(M.bodytemperature > 310) - M.bodytemperature = max(310, M.bodytemperature - (40 * TEMPERATURE_DAMAGE_COEFFICIENT)) - else if(M.bodytemperature < 311) - M.bodytemperature = min(310, M.bodytemperature + (40 * TEMPERATURE_DAMAGE_COEFFICIENT)) - -/datum/reagent/leporazine/hot - name = "Pyrogenic Leporazine" - chilling_products = list(/datum/reagent/leporazine) - chilling_point = 0 CELSIUS - chilling_message = "Stops swirling and glowing." - heating_products = null - heating_point = null - heating_message = null - scannable = 1 - -/datum/reagent/leporazine/hot/affect_blood(var/mob/living/carbon/M, var/alien, var/removed) - if(M.bodytemperature < 330) - M.bodytemperature = min(330, M.bodytemperature + (40 * TEMPERATURE_DAMAGE_COEFFICIENT)) - -/datum/reagent/leporazine/cold - name = "Cryogenic Leporazine" - chilling_products = null - chilling_point = null - chilling_message = null - heating_products = list(/datum/reagent/leporazine) - heating_point = 100 CELSIUS - heating_message = "Becomes clear and smooth." - scannable = 1 - -/datum/reagent/leporazine/cold/affect_blood(var/mob/living/carbon/M, var/alien, var/removed) - if(M.bodytemperature > 290) - M.bodytemperature = max(290, M.bodytemperature - (40 * TEMPERATURE_DAMAGE_COEFFICIENT)) - -/* Antidepressants */ - -#define ANTIDEPRESSANT_MESSAGE_DELAY 5*60*10 - -/datum/reagent/methylphenidate - name = "Methylphenidate" - description = "Improves the ability to concentrate." - taste_description = "sourness" - reagent_state = LIQUID - color = "#bf80bf" - scannable = 1 - metabolism = 0.01 - data = 0 - value = 6 - -/datum/reagent/methylphenidate/affect_blood(var/mob/living/carbon/M, var/alien, var/removed) - if(alien == IS_DIONA) - return - if(volume <= 0.1 && M.chem_doses[type] >= 0.5 && world.time > data + ANTIDEPRESSANT_MESSAGE_DELAY) - data = world.time - to_chat(M, "You lose focus...") - else - if(world.time > data + ANTIDEPRESSANT_MESSAGE_DELAY) - data = world.time - to_chat(M, "Your mind feels focused and undivided.") - -/datum/reagent/citalopram - name = "Citalopram" - description = "Stabilizes the mind a little." - taste_description = "bitterness" - reagent_state = LIQUID - color = "#ff80ff" - scannable = 1 - metabolism = 0.01 - data = 0 - value = 6 - -/datum/reagent/citalopram/affect_blood(var/mob/living/carbon/M, var/alien, var/removed) - if(alien == IS_DIONA) - return - if(volume <= 0.1 && M.chem_doses[type] >= 0.5 && world.time > data + ANTIDEPRESSANT_MESSAGE_DELAY) - data = world.time - to_chat(M, "Your mind feels a little less stable...") - else - M.add_chemical_effect(CE_MIND, 1) - if(world.time > data + ANTIDEPRESSANT_MESSAGE_DELAY) - data = world.time - to_chat(M, "Your mind feels stable... a little stable.") - -/datum/reagent/paroxetine - name = "Paroxetine" - description = "Stabilizes the mind greatly, but has a chance of adverse effects." - reagent_state = LIQUID - color = "#ff80bf" - scannable = 1 - metabolism = 0.01 - data = 0 - value = 3.5 - -/datum/reagent/paroxetine/affect_blood(var/mob/living/carbon/M, var/alien, var/removed) - if(alien == IS_DIONA) - return - if(volume <= 0.1 && M.chem_doses[type] >= 0.5 && world.time > data + ANTIDEPRESSANT_MESSAGE_DELAY) - data = world.time - to_chat(M, "Your mind feels much less stable...") - else - M.add_chemical_effect(CE_MIND, 2) - if(world.time > data + ANTIDEPRESSANT_MESSAGE_DELAY) - data = world.time - if(prob(90)) - to_chat(M, "Your mind feels much more stable.") - else - to_chat(M, "Your mind breaks apart...") - M.hallucination(200, 100) - -/datum/reagent/nicotine - name = "Nicotine" - description = "A sickly yellow liquid sourced from tobacco leaves. Stimulates and relaxes the mind and body." - taste_description = "peppery bitterness" - reagent_state = LIQUID - color = "#efebaa" - metabolism = REM * 0.002 - overdose = 6 - scannable = 1 - data = 0 - value = 2 - -/datum/reagent/nicotine/affect_blood(var/mob/living/carbon/M, var/alien, var/removed) - if(alien == IS_DIONA) - return - if(prob(volume*20)) - M.add_chemical_effect(CE_PULSE, 1) - if(volume <= 0.02 && M.chem_doses[type] >= 0.05 && world.time > data + ANTIDEPRESSANT_MESSAGE_DELAY * 0.3) - data = world.time - to_chat(M, "You feel antsy, your concentration wavers...") - else - if(world.time > data + ANTIDEPRESSANT_MESSAGE_DELAY * 0.3) - data = world.time - to_chat(M, "You feel invigorated and calm.") - -/datum/reagent/nicotine/overdose(var/mob/living/carbon/M, var/alien) - ..() - M.add_chemical_effect(CE_PULSE, 2) - -/datum/reagent/tobacco - name = "Tobacco" - description = "Cut and processed tobacco leaves." - taste_description = "tobacco" - reagent_state = SOLID - color = "#684b3c" - scannable = 1 - value = 3 - scent = "cigarette smoke" - scent_descriptor = SCENT_DESC_ODOR - scent_range = 4 - - var/nicotine = REM * 0.2 - -/datum/reagent/tobacco/affect_blood(var/mob/living/carbon/M, var/alien, var/removed) - ..() - M.reagents.add_reagent(/datum/reagent/nicotine, nicotine) - -/datum/reagent/tobacco/fine - name = "Fine Tobacco" - taste_description = "fine tobacco" - value = 5 - scent = "fine tobacco smoke" - scent_descriptor = SCENT_DESC_PLUME - -/datum/reagent/tobacco/bad - name = "Terrible Tobacco" - taste_description = "acrid smoke" - value = 0 - scent = "acrid tobacco smoke" - scent_intensity = /decl/scent_intensity/strong - scent_descriptor = SCENT_DESC_HAZE - -/datum/reagent/tobacco/liquid - name = "Nicotine Solution" - description = "A diluted nicotine solution." - reagent_state = LIQUID - taste_mult = 0 - color = "#fcfcfc" - nicotine = REM * 0.1 - scent = null - scent_intensity = null - scent_descriptor = null - scent_range = null - -/datum/reagent/menthol - name = "Menthol" - description = "Tastes naturally minty, and imparts a very mild numbing sensation." - taste_description = "mint" - reagent_state = LIQUID - color = "#80af9c" - metabolism = REM * 0.002 - overdose = REAGENTS_OVERDOSE * 0.25 - scannable = 1 - data = 0 - -/datum/reagent/menthol/affect_blood(var/mob/living/carbon/M, var/alien, var/removed) - if(alien == IS_DIONA) - return - if(world.time > data + ANTIDEPRESSANT_MESSAGE_DELAY * 0.35) - data = world.time - to_chat(M, "You feel faintly sore in the throat.") - -/datum/reagent/rezadone - name = "Rezadone" - description = "A powder with almost magical properties, this substance can effectively treat genetic damage in humanoids, though excessive consumption has side effects." - taste_description = "sickness" - reagent_state = SOLID - color = "#669900" - overdose = REAGENTS_OVERDOSE - scannable = 1 - flags = IGNORE_MOB_SIZE - value = 5 - -/datum/reagent/rezadone/affect_blood(var/mob/living/carbon/M, var/alien, var/removed) - M.adjustCloneLoss(-20 * removed) - M.adjustOxyLoss(-2 * removed) - M.heal_organ_damage(20 * removed, 20 * removed) - M.adjustToxLoss(-20 * removed) - if(M.chem_doses[type] > 3 && ishuman(M)) - var/mob/living/carbon/human/H = M - for(var/obj/item/organ/external/E in H.organs) - E.status |= ORGAN_DISFIGURED //currently only matters for the head, but might as well disfigure them all. - if(M.chem_doses[type] > 10) - M.make_dizzy(5) - M.make_jittery(5) - -/datum/reagent/noexcutite - name = "Noexcutite" - description = "A thick, syrupy liquid that has a lethargic effect. Used to cure cases of jitteriness." - taste_description = "numbing coldness" - reagent_state = LIQUID - color = "#bc018a" - overdose = REAGENTS_OVERDOSE - scannable = 1 - flags = IGNORE_MOB_SIZE - -/datum/reagent/noexcutite/affect_blood(var/mob/living/carbon/M, var/alien, var/removed) - - if(alien != IS_DIONA) - M.make_jittery(-50) - -/datum/reagent/antidexafen - name = "Antidexafen" - description = "All-in-one cold medicine. Fever, cough, sneeze, safe for babies." - taste_description = "cough syrup" - reagent_state = LIQUID - color = "#c8a5dc" - overdose = 60 - scannable = 1 - metabolism = REM * 0.05 - flags = IGNORE_MOB_SIZE - -/datum/reagent/antidexafen/affect_blood(var/mob/living/carbon/M, var/alien, var/removed) - if(alien == IS_DIONA) - return - - M.add_chemical_effect(CE_PAINKILLER, 15) - M.add_chemical_effect(CE_ANTIVIRAL, 1) - -/datum/reagent/antidexafen/overdose(var/mob/living/carbon/M, var/alien) - M.add_chemical_effect(CE_TOXIN, 1) - M.hallucination(60, 20) - M.druggy = max(M.druggy, 2) - -/datum/reagent/adrenaline - name = "Adrenaline" - description = "Adrenaline is a hormone used as a drug to treat cardiac arrest and other cardiac dysrhythmias resulting in diminished or absent cardiac output." - taste_description = "rush" - reagent_state = LIQUID - color = "#c8a5dc" - scannable = 1 - overdose = 20 - metabolism = 0.1 - value = 2 - -/datum/reagent/adrenaline/affect_blood(var/mob/living/carbon/human/M, var/alien, var/removed) - if(alien == IS_DIONA) - return - - if(M.chem_doses[type] < 0.2) //not that effective after initial rush - M.add_chemical_effect(CE_PAINKILLER, min(30*volume, 80)) - M.add_chemical_effect(CE_PULSE, 1) - else if(M.chem_doses[type] < 1) - M.add_chemical_effect(CE_PAINKILLER, min(10*volume, 20)) - M.add_chemical_effect(CE_PULSE, 2) - M.add_chemical_effect(CE_STIMULANT, 2) - if(M.chem_doses[type] > 10) - M.make_jittery(5) - if(volume >= 5 && M.is_asystole()) - remove_self(5) - if(M.resuscitate()) - var/obj/item/organ/internal/heart = M.internal_organs_by_name[BP_HEART] - heart.take_internal_damage(heart.max_damage * 0.075) - -/datum/reagent/lactate - name = "Lactate" - description = "Lactate is produced by the body during strenuous exercise. It often correlates with elevated heart rate, shortness of breath, and general exhaustion." - taste_description = "sourness" - reagent_state = LIQUID - color = "#eeddcc" - scannable = 1 - overdose = REAGENTS_OVERDOSE - metabolism = REM - -/datum/reagent/lactate/affect_blood(var/mob/living/carbon/human/M, var/alien, var/removed) - if(alien == IS_DIONA) - return - - M.add_chemical_effect(CE_PULSE, 1) - M.add_chemical_effect(CE_BREATHLOSS, 0.02 * volume) - if(volume >= 5) - M.add_chemical_effect(CE_PULSE, 1) - M.add_chemical_effect(CE_SLOWDOWN, (volume/5) ** 2) - else if(M.chem_doses[type] > 20) //after prolonged exertion - M.make_jittery(10) - -/datum/reagent/nanoblood - name = "Nanoblood" - description = "A stable hemoglobin-based nanoparticle oxygen carrier, used to rapidly replace lost blood. Toxic unless injected in small doses. Does not contain white blood cells." - taste_description = "blood with bubbles" - reagent_state = LIQUID - color = "#c10158" - scannable = 1 - overdose = 5 - metabolism = 1 - -/datum/reagent/nanoblood/affect_blood(var/mob/living/carbon/human/M, var/alien, var/removed) - if(!M.should_have_organ(BP_HEART)) //We want the var for safety but we can do without the actual blood. - return - if(M.regenerate_blood(4 * removed)) - M.immunity = max(M.immunity - 0.75, 0) - if(M.chem_doses[type] > M.species.blood_volume/8) //half of blood was replaced with us, rip white bodies - M.immunity = max(M.immunity - 3, 0) - -// Sleeping agent, produced by breathing N2O. -/datum/reagent/nitrous_oxide - name = "Nitrous Oxide" - description = "An ubiquitous sleeping agent also known as laughing gas." - taste_description = "dental surgery" - reagent_state = LIQUID - color = COLOR_GRAY80 - metabolism = 0.05 // So that low dosages have a chance to build up in the body. - var/do_giggle = TRUE - -/datum/reagent/nitrous_oxide/xenon - name = "Xenon" - description = "A nontoxic gas used as a general anaesthetic." - do_giggle = FALSE - taste_description = "nothing" - color = COLOR_GRAY80 - -/datum/reagent/nitrous_oxide/affect_blood(var/mob/living/carbon/M, var/alien, var/removed) - if(alien == IS_DIONA) - return - var/dosage = M.chem_doses[type] - if(dosage >= 1) - if(prob(5)) M.Sleeping(3) - M.dizziness = max(M.dizziness, 3) - M.confused = max(M.confused, 3) - if(dosage >= 0.3) - if(prob(5)) M.Paralyse(1) - M.drowsyness = max(M.drowsyness, 3) - M.slurring = max(M.slurring, 3) - if(do_giggle && prob(20)) - M.emote(pick("giggle", "laugh")) - M.add_chemical_effect(CE_PULSE, -1) - - - // Immunity-restoring reagent -/datum/reagent/immunobooster - name = "Immunobooster" - description = "A drug that helps restore the immune system. Will not replace a normal immunity." - taste_description = "chalky" - reagent_state = LIQUID - color = "#ffc0cb" - metabolism = REM - overdose = REAGENTS_OVERDOSE - value = 1.5 - scannable = 1 - -/datum/reagent/immunobooster/affect_blood(var/mob/living/carbon/M, var/alien, var/removed) - if(alien == IS_DIONA) - return - if(volume < REAGENTS_OVERDOSE && !M.chem_effects[CE_ANTIVIRAL]) - M.immunity = min(M.immunity_norm * 0.5, removed + M.immunity) // Rapidly brings someone up to half immunity. - if(M.chem_effects[CE_ANTIVIRAL]) //don't take with 'cillin - M.add_chemical_effect(CE_TOXIN, 4) // as strong as taking vanilla 'toxin' - - -/datum/reagent/immunobooster/overdose(var/mob/living/carbon/M, var/alien) - ..() - M.add_chemical_effect(CE_TOXIN, 1) - M.immunity -= 0.5 //inverse effects when abused - -/datum/reagent/coagulant - name = "Coagulant" - description = "An experimental coagulant capable of staunching both internal and external bleeding." - taste_description = "iron" - reagent_state = LIQUID - color = "#bf0000" - metabolism = REM * 0.05 - scannable = TRUE - -/datum/reagent/coagulant/affect_blood(mob/living/carbon/M, alien, removed) - if(alien == IS_DIONA) - return - if(ishuman(M)) - for(var/obj/item/organ/external/E in M.organs) - if(E.status & ORGAN_ARTERY_CUT && prob(10)) - E.status &= ~ORGAN_ARTERY_CUT - for(var/datum/wound/W in E.wounds) - if(W.bleeding() && prob(20)) - W.bleed_timer = 0 - W.clamped = TRUE - E.status &= ~ORGAN_BLEEDING diff --git a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Other.dm b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Other.dm deleted file mode 100644 index 47a4cee484ee9..0000000000000 --- a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Other.dm +++ /dev/null @@ -1,580 +0,0 @@ -/* Paint and crayons */ - -/datum/reagent/crayon_dust - name = "Crayon dust" - description = "Intensely coloured powder obtained by grinding crayons." - taste_description = "the back of class" - reagent_state = LIQUID - color = "#888888" - overdose = 5 - -/datum/reagent/crayon_dust/red - name = "Red crayon dust" - color = "#fe191a" - -/datum/reagent/crayon_dust/orange - name = "Orange crayon dust" - color = "#ffbe4f" - -/datum/reagent/crayon_dust/yellow - name = "Yellow crayon dust" - color = "#fdfe7d" - -/datum/reagent/crayon_dust/green - name = "Green crayon dust" - color = "#18a31a" - -/datum/reagent/crayon_dust/blue - name = "Blue crayon dust" - color = "#247cff" - -/datum/reagent/crayon_dust/purple - name = "Purple crayon dust" - color = "#cc0099" - -/datum/reagent/crayon_dust/grey //Mime - name = "Grey crayon dust" - color = "#808080" - -/datum/reagent/crayon_dust/brown //Rainbow - name = "Brown crayon dust" - color = "#846f35" - -/datum/reagent/paint - name = "Paint" - description = "This paint will stick to almost any object." - taste_description = "chalk" - reagent_state = LIQUID - color = "#808080" - overdose = REAGENTS_OVERDOSE * 0.5 - color_weight = 20 - -/datum/reagent/paint/touch_turf(var/turf/T) - if(istype(T) && !istype(T, /turf/space)) - T.color = color - -/datum/reagent/paint/touch_obj(var/obj/O) - if(istype(O)) - O.color = color - -/datum/reagent/paint/touch_mob(var/mob/M) - if(istype(M) && !isobserver(M)) //painting observers: not allowed - M.color = color //maybe someday change this to paint only clothes and exposed body parts for human mobs. - -/datum/reagent/paint/get_data() - return color - -/datum/reagent/paint/initialize_data(var/newdata) - color = newdata - return - -/datum/reagent/paint/mix_data(var/newdata, var/newamount) - var/list/colors = list(0, 0, 0, 0) - var/tot_w = 0 - - var/hex1 = uppertext(color) - var/hex2 = uppertext(newdata) - if(length(hex1) == 7) - hex1 += "FF" - if(length(hex2) == 7) - hex2 += "FF" - if(length(hex1) != 9 || length(hex2) != 9) - return - colors[1] += hex2num(copytext_char(hex1, 2, 4)) * volume - colors[2] += hex2num(copytext_char(hex1, 4, 6)) * volume - colors[3] += hex2num(copytext_char(hex1, 6, 8)) * volume - colors[4] += hex2num(copytext_char(hex1, 8, 10)) * volume - tot_w += volume - colors[1] += hex2num(copytext_char(hex2, 2, 4)) * newamount - colors[2] += hex2num(copytext_char(hex2, 4, 6)) * newamount - colors[3] += hex2num(copytext_char(hex2, 6, 8)) * newamount - colors[4] += hex2num(copytext_char(hex2, 8, 10)) * newamount - tot_w += newamount - - color = rgb(colors[1] / tot_w, colors[2] / tot_w, colors[3] / tot_w, colors[4] / tot_w) - return - -/* Things that didn't fit anywhere else */ - -/datum/reagent/adminordrazine //An OP chemical for admins - name = "Adminordrazine" - description = "It's magic. We don't have to explain it." - taste_description = "100% abuse" - reagent_state = LIQUID - color = "#c8a5dc" - flags = AFFECTS_DEAD //This can even heal dead people. - - glass_name = "liquid gold" - glass_desc = "It's magic. We don't have to explain it." - -/datum/reagent/adminordrazine/affect_touch(var/mob/living/carbon/M, var/alien, var/removed) - affect_blood(M, alien, removed) - -/datum/reagent/adminordrazine/affect_blood(var/mob/living/carbon/M, var/alien, var/removed) - M.rejuvenate() - -/datum/reagent/gold - name = "Gold" - description = "Gold is a dense, soft, shiny metal and the most malleable and ductile metal known." - taste_description = "expensive metal" - reagent_state = SOLID - color = "#f7c430" - value = 7 - -/datum/reagent/silver - name = "Silver" - description = "A soft, white, lustrous transition metal, it has the highest electrical conductivity of any element and the highest thermal conductivity of any metal." - taste_description = "expensive yet reasonable metal" - reagent_state = SOLID - color = "#d0d0d0" - value = 4 - -/datum/reagent/uranium - name = "Uranium" - description = "A silvery-white metallic chemical element in the actinide series, weakly radioactive." - taste_description = "the inside of a reactor" - reagent_state = SOLID - color = "#b8b8c0" - value = 9 - -/datum/reagent/uranium/affect_touch(var/mob/living/carbon/M, var/alien, var/removed) - affect_ingest(M, alien, removed) - -/datum/reagent/uranium/affect_blood(var/mob/living/carbon/M, var/alien, var/removed) - M.apply_damage(5 * removed, DAMAGE_RADIATION, armor_pen = 100) - -/datum/reagent/uranium/touch_turf(var/turf/T) - if(volume >= 3) - if(!istype(T, /turf/space)) - var/obj/effect/decal/cleanable/greenglow/glow = locate(/obj/effect/decal/cleanable/greenglow, T) - if(!glow) - new /obj/effect/decal/cleanable/greenglow(T) - return - -/datum/reagent/water/holywater - name = "Holy Water" - description = "An ashen-obsidian-water mix, this solution will alter certain sections of the brain's rationality." - color = "#e0e8ef" - - glass_name = "holy water" - glass_desc = "An ashen-obsidian-water mix, this solution will alter certain sections of the brain's rationality." - -/datum/reagent/water/holywater/affect_ingest(var/mob/living/carbon/M, var/alien, var/removed) - ..() - if(ishuman(M)) // Any location - if(iscultist(M)) - if(prob(10)) - GLOB.cult.offer_uncult(M) - if(prob(2)) - var/obj/effect/spider/spiderling/S = new /obj/effect/spider/spiderling(M.loc) - M.visible_message("\The [M] coughs up \the [S]!") - -/datum/reagent/water/holywater/touch_turf(var/turf/T) - if(volume >= 5) - T.holy = 1 - return - -/datum/reagent/diethylamine - name = "Diethylamine" - description = "A secondary amine, mildly corrosive." - taste_description = "iron" - reagent_state = LIQUID - color = "#604030" - value = 0.9 - -/datum/reagent/surfactant // Foam precursor - name = "Azosurfactant" - description = "A isocyanate liquid that forms a foam when mixed with water." - taste_description = "metal" - reagent_state = LIQUID - color = "#9e6b38" - value = 0.05 - -/datum/reagent/foaming_agent // Metal foaming agent. This is lithium hydride. Add other recipes (e.g. LiH + H2O -> LiOH + H2) eventually. - name = "Foaming agent" - description = "A agent that yields metallic foam when mixed with light metal and a strong acid." - taste_description = "metal" - reagent_state = SOLID - color = "#664b63" - -/datum/reagent/thermite - name = "Thermite" - description = "Thermite produces an aluminothermic reaction known as a thermite reaction. Can be used to melt walls." - taste_description = "sweet tasting metal" - reagent_state = SOLID - color = "#673910" - touch_met = 50 - value = 6 - -/datum/reagent/thermite/touch_turf(var/turf/T) - if(volume >= 5) - if(istype(T, /turf/simulated/wall)) - var/turf/simulated/wall/W = T - W.thermite = 1 - W.overlays += image('icons/effects/effects.dmi',icon_state = "#673910") - remove_self(5) - return - -/datum/reagent/thermite/touch_mob(var/mob/living/L, var/amount) - if(istype(L)) - L.adjust_fire_stacks(amount / 5) - -/datum/reagent/thermite/affect_blood(var/mob/living/carbon/M, var/alien, var/removed) - M.adjustFireLoss(3 * removed) - -/datum/reagent/napalm - name = "Napalm" - description = "A sticky volatile substance made from mixing quick burning goo with slow burning goo, to make a viscous average burning goo that sticks to everything." - taste_description = "burnt corn" - reagent_state = LIQUID - color = "#673910" - touch_met = 50 - accelerant_quality = 20 - -/datum/reagent/napalm/touch_turf(var/turf/T) - new /obj/effect/decal/cleanable/liquid_fuel(T, volume) - remove_self(volume) - -/datum/reagent/napalm/touch_mob(var/mob/living/L, var/amount) - if(istype(L)) - L.adjust_fire_stacks(amount / 100) - -/datum/reagent/napalm/b - name = "Napalm B" - taste_description = "burnt plastic and metal" - -/datum/reagent/space_cleaner - name = "Space cleaner" - description = "A compound used to clean things. Now with 50% more sodium hypochlorite!" - taste_description = "sourness" - reagent_state = LIQUID - color = "#a5f0ee" - touch_met = 50 - value = 0.7 - -/datum/reagent/space_cleaner/touch_obj(var/obj/O) - O.clean_blood() - -/datum/reagent/space_cleaner/touch_turf(var/turf/T) - if(volume >= 1) - if(istype(T, /turf/simulated)) - var/turf/simulated/S = T - S.dirt = 0 - if(S.wet > 1) - S.unwet_floor(FALSE) - T.clean_blood() - - - for(var/mob/living/carbon/slime/M in T) - M.adjustToxLoss(rand(5, 10)) - -/datum/reagent/space_cleaner/affect_touch(var/mob/living/carbon/M, var/alien, var/removed) - if(M.r_hand) - M.r_hand.clean_blood() - if(M.l_hand) - M.l_hand.clean_blood() - if(M.wear_mask) - if(M.wear_mask.clean_blood()) - M.update_inv_wear_mask(0) - if(ishuman(M)) - var/mob/living/carbon/human/H = M - if(H.head) - if(H.head.clean_blood()) - H.update_inv_head(0) - if(H.wear_suit) - if(H.wear_suit.clean_blood()) - H.update_inv_wear_suit(0) - else if(H.w_uniform) - if(H.w_uniform.clean_blood()) - H.update_inv_w_uniform(0) - if(H.shoes) - if(H.shoes.clean_blood()) - H.update_inv_shoes(0) - else - H.clean_blood(1) - return - M.update_icons() - M.clean_blood() - -/datum/reagent/oil - name = "Oil" - description = "A thick greasy industrial lubricant. Commonly found in robotics." - taste_description = "greasy diesel" - color = "#000000" - -/datum/reagent/oil/touch_turf(var/turf/simulated/T) - if(!istype(T, /turf/space)) - new /obj/effect/decal/cleanable/blood/oil/streak(T) - -/datum/reagent/glycerol - name = "Glycerol" - description = "Glycerol is a simple polyol compound. Glycerol is sweet-tasting and of low toxicity." - taste_description = "sweetness" - reagent_state = LIQUID - color = "#808080" - value = 8 - -/datum/reagent/nitroglycerin - name = "Nitroglycerin" - description = "Nitroglycerin is a heavy, colorless, oily, explosive liquid obtained by nitrating glycerol." - taste_description = "oil" - reagent_state = LIQUID - color = "#808080" - value = 9 - -/datum/reagent/nitroglycerin/affect_blood(var/mob/living/carbon/M, var/alien, var/removed) - ..() - M.add_chemical_effect(CE_PULSE, 2) - -#define COOLANT_LATENT_HEAT 19000 //Twice as good at cooling than water is, but may cool below 20c. It'll cause freezing that atmos will have to deal with.. -/datum/reagent/coolant - name = "Coolant" - description = "Industrial cooling substance." - taste_description = "sourness" - taste_mult = 1.1 - reagent_state = LIQUID - color = "#c8a5dc" - value = 0.8 - -/datum/reagent/coolant/touch_turf(var/turf/simulated/T) - if(!istype(T)) - return - - var/datum/gas_mixture/environment = T.return_air() - var/min_temperature = 0 // Room temperature + some variance. An actual diminishing return would be better, but this is *like* that. In a way. . This has the potential for weird behavior, but I says fuck it. Water grenades for everyone. - - var/hotspot = (locate(/obj/hotspot) in T) - if(hotspot && !istype(T, /turf/space)) - var/datum/gas_mixture/lowertemp = T.remove_air(T:air:total_moles) - lowertemp.temperature = max(min(lowertemp.temperature-2000, lowertemp.temperature / 2), 0) - lowertemp.react() - T.assume_air(lowertemp) - qdel(hotspot) - - if (environment && environment.temperature > min_temperature) // Abstracted as steam or something - var/removed_heat = clamp(volume * COOLANT_LATENT_HEAT, 0, -environment.get_thermal_energy_change(min_temperature)) - environment.add_thermal_energy(-removed_heat) - if (prob(5) && environment && environment.temperature > T100C) - T.visible_message("The water sizzles as it lands on \the [T]!") - - -/datum/reagent/ultraglue - name = "Ultra Glue" - description = "An extremely powerful bonding agent." - taste_description = "a special education class" - color = "#ffffcc" - -/datum/reagent/woodpulp - name = "Wood Pulp" - description = "A mass of wood fibers." - taste_description = "wood" - reagent_state = SOLID - color = WOOD_COLOR_GENERIC - -/datum/reagent/bamboo - name = "Bamboo Pulp" - description = "A mass of bamboo fibers." - taste_description = "grass" - reagent_state = SOLID - color = WOOD_COLOR_PALE2 - -/datum/reagent/resinpulp - name = "Resin Pulp" - description = "A mass of goopy resin." - taste_description = "gooey" - reagent_state = SOLID - color = "#3a4e1b" - -/datum/reagent/luminol - name = "Luminol" - description = "A compound that interacts with blood on the molecular level." - taste_description = "metal" - reagent_state = LIQUID - color = "#f2f3f4" - value = 1.4 - -/datum/reagent/luminol/touch_obj(var/obj/O) - O.reveal_blood() - -/datum/reagent/luminol/touch_mob(var/mob/living/L) - L.reveal_blood() - -/datum/reagent/helium - name = "Helium" - description = "A noble gas. It makes your voice squeaky." - taste_description = "nothing" - reagent_state = LIQUID - color = COLOR_GRAY80 - metabolism = 0.05 // So that low dosages have a chance to build up in the body. - -/datum/reagent/helium/affect_blood(var/mob/living/carbon/M, var/alien, var/removed) - if(alien == IS_DIONA) - return - ..() - M.add_chemical_effect(CE_SQUEAKY, 1) - -// This is only really used to poison vox. -/datum/reagent/oxygen - name = "Oxygen" - description = "An ubiquitous oxidizing agent." - taste_description = "nothing" - reagent_state = LIQUID - color = COLOR_GRAY80 - -/datum/reagent/oxygen/affect_blood(var/mob/living/carbon/M, var/alien, var/removed) - if(alien == IS_VOX) - M.adjustToxLoss(removed * 6) - -/datum/reagent/carbon_monoxide - name = "Carbon Monoxide" - description = "A dangerous carbon comubstion byproduct." - taste_description = "stale air" - reagent_state = LIQUID - color = COLOR_GRAY80 - metabolism = 0.05 // As with helium. - -/datum/reagent/carbon_monoxide/affect_blood(var/mob/living/carbon/human/M, var/alien, var/removed) - if(!istype(M) || alien == IS_DIONA) - return - var/warning_message - var/warning_prob = 10 - var/dosage = M.chem_doses[type] - if(dosage >= 3) - warning_message = pick("extremely dizzy","short of breath","faint","confused") - warning_prob = 15 - M.adjustOxyLoss(10,20) - M.co2_alert = 1 - else if(dosage >= 1.5) - warning_message = pick("dizzy","short of breath","faint","momentarily confused") - M.co2_alert = 1 - M.adjustOxyLoss(3,5) - else if(dosage >= 0.25) - warning_message = pick("a little dizzy","short of breath") - warning_prob = 10 - M.co2_alert = 0 - else - M.co2_alert = 0 - if(warning_message && prob(warning_prob)) - to_chat(M, "You feel [warning_message].") - -/datum/reagent/dye - name = "Dye" - description = "Non-toxic artificial coloration used for food and drinks. When mixed with reagents, the compound will take on the dye's coloration." - color = "#ffffff" - color_weight = 40 - color_transfer = TRUE - color_foods = TRUE - taste_mult = 0 - -/datum/reagent/dye/strong - name = "Strong Dye" - description = "An extra-strength dye. Used for tinting food, but is especially effective with drinks and other fluids." - color_weight = 100 - -/datum/reagent/capilliumate - name = "Capilliumate" - description = "Used across the Sol system by balding men to retrieve their lost youth." - taste_description = "mothballs" - reagent_state = LIQUID - color = "#33270b" - overdose = REAGENTS_OVERDOSE - -/datum/reagent/capilliumate/affect_touch(mob/living/carbon/human/M, alien, removed) - if (!alien) - var/datum/sprite_accessory/hair/newhair = /datum/sprite_accessory/hair/longest - var/datum/sprite_accessory/facial_hair/newbeard = /datum/sprite_accessory/facial_hair/vlongbeard - M.change_hair(initial(newhair.name)) - M.change_facial_hair(initial(newbeard.name)) - M.visible_message( - SPAN_NOTICE("\The [M]'s hair grows to extraordinary lengths!"), - SPAN_NOTICE("Your hair grows to extraordinary lengths!") - ) - remove_self(volume) - -/datum/reagent/capilliumate/affect_blood(mob/living/carbon/M, alien, removed) - if (alien == IS_DIONA) - return - if (prob(10)) - to_chat(M, SPAN_WARNING("Your tongue feels... fuzzy.")) - M.slurring = max(M.slurring, 10) - -/datum/reagent/hair_dye - name = "Hair Dye" - description = "Some hair dye. Be fabulous! Requires an extra color to mix with." - taste_description = "bad choices" - reagent_state = LIQUID - color = "#b6f0ef" - overdose = REAGENTS_OVERDOSE - -/datum/reagent/colored_hair_dye - name = "Hair Dye" - description = "Apply to your head to add some color to your life!" - reagent_state = LIQUID - taste_description = "bad choices" - -/datum/reagent/colored_hair_dye/proc/apply_dye_color(mob/living/carbon/human/H, red, green, blue) - if (H.head_hair_style && H.species.appearance_flags & HAS_HAIR_COLOR) - var/datum/sprite_accessory/hair/hair_style = GLOB.hair_styles_list[H.head_hair_style] - if (~hair_style.flags & HAIR_BALD) - H.change_hair_color(red, green, blue) - H.change_facial_hair_color(red, green, blue) - H.visible_message( - SPAN_NOTICE("\The [H]'s hair changes color!"), - SPAN_NOTICE("Your hair changes color!") - ) - remove_self(volume) - -/datum/reagent/colored_hair_dye/affect_touch(mob/living/carbon/human/H, alien, removed) - var/list/dye_args = list(H) + GetHexColors(color) - apply_dye_color(arglist(dye_args)) - -/datum/reagent/colored_hair_dye/red - name = "Red Hair Dye" - color = "#b33636" - -/datum/reagent/colored_hair_dye/orange - name = "Orange Hair Dye" - color = "#b5772f" - -/datum/reagent/colored_hair_dye/yellow - name = "Yellow Hair Dye" - color = "#a6a035" - -/datum/reagent/colored_hair_dye/green - name = "Green Hair Dye" - color = "#61a834" - -/datum/reagent/colored_hair_dye/blue - name = "Blue Hair Dye" - color = "#3470a8" - -/datum/reagent/colored_hair_dye/purple - name = "Purple Hair Dye" - color = "#6d2d91" - -/datum/reagent/colored_hair_dye/grey - name = "Grey Hair Dye" - color = "#696969" - -/datum/reagent/colored_hair_dye/brown - name = "Brown Hair Dye" - color = "#3b2d0f" - -/datum/reagent/colored_hair_dye/light_brown - name = "Light Brown Hair Dye" - color = "#3d3729" - -/datum/reagent/colored_hair_dye/black - name = "Black Hair Dye" - color = "#000000" - -/datum/reagent/colored_hair_dye/white - name = "White Hair Dye" - color = "#ffffff" - -/datum/reagent/colored_hair_dye/chaos - name = "Chaotic Hair Dye" - description = "This hair dye can be any color! Only one way to find out what kind!" - -/datum/reagent/colored_hair_dye/chaos/affect_touch(mob/living/carbon/human/H, alien, removed) - apply_dye_color(H, Frand(1, 254), Frand(1, 254), Frand(1, 254)) diff --git a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Toxins.dm b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Toxins.dm deleted file mode 100644 index 6e02043f408df..0000000000000 --- a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Toxins.dm +++ /dev/null @@ -1,1178 +0,0 @@ -/* Toxins, poisons, venoms */ - -/datum/reagent/toxin - name = "toxin" - description = "A toxic chemical." - taste_description = "bitterness" - taste_mult = 1.2 - reagent_state = LIQUID - color = "#cf3600" - metabolism = REM * 0.25 // 0.05 by default. They last a while and slowly kill you. - heating_products = list(/datum/reagent/toxin/denatured) - heating_point = 100 CELSIUS - heating_message = "goes clear." - value = 2 - should_admin_log = TRUE - - var/target_organ - var/strength = 4 // How much damage it deals per unit - -/datum/reagent/toxin/affect_blood(var/mob/living/carbon/M, var/alien, var/removed) - if(strength && alien != IS_DIONA) - M.add_chemical_effect(CE_TOXIN, strength) - var/dam = (strength * removed) - if(target_organ && ishuman(M)) - var/mob/living/carbon/human/H = M - var/obj/item/organ/internal/I = H.internal_organs_by_name[target_organ] - if(I) - var/can_damage = I.max_damage - I.damage - if(can_damage > 0) - if(dam > can_damage) - I.take_internal_damage(can_damage, silent=TRUE) - dam -= can_damage - else - I.take_internal_damage(dam, silent=TRUE) - dam = 0 - if(dam) - M.adjustToxLoss(target_organ ? (dam * 0.75) : dam) - -/datum/reagent/toxin/denatured - name = "denatured toxin" - description = "Once toxic, now harmless." - taste_description = null - taste_mult = null - color = "#808080" - metabolism = REM - heating_products = null - heating_point = null - - target_organ = null - strength = 0 - -/datum/reagent/toxin/plasticide - name = "Plasticide" - description = "Liquid plastic, do not eat." - taste_description = "plastic" - reagent_state = LIQUID - color = "#cf3600" - strength = 5 - heating_point = null - heating_products = null - -/datum/reagent/toxin/amatoxin // Delayed action poison, very dangerous but takes a while before doing anything. - name = "Amatoxin" - description = "A powerful poison derived from certain species of mushroom." - taste_description = "mushroom" - reagent_state = LIQUID - metabolism = REM * 0.5 - color = "#792300" - strength = 10 - -/datum/reagent/toxin/amatoxin/affect_blood(mob/living/carbon/M, alien, removed) - if(alien == IS_DIONA) - return - M.reagents.add_reagent(/datum/reagent/toxin/amaspores, 2 * removed) - -/datum/reagent/toxin/amaspores - name = "Amaspores" - description = "The secondary component to amatoxin poisoning, remaining dormant for a time before causing rapid organ and tissue decay." - taste_description = "dusty dirt" - reagent_state = LIQUID - metabolism = REM * 4 // Extremely quick to act once the amatoxin has left the body - color = "#330e00" - strength = 30 - -/datum/reagent/toxin/amaspores/affect_blood(mob/living/carbon/M, alien, removed) - if(alien == IS_DIONA) - return - - if(M.chem_doses[/datum/reagent/toxin/amatoxin] > 0) - M.reagents.add_reagent(/datum/reagent/toxin/amaspores, metabolism) // The spores lay dormant for as long as any traces of amatoxin remain - if (prob(5)) - to_chat(M, SPAN_DANGER("Everything itches, how uncomfortable!")) - if (prob(10)) - to_chat(M, SPAN_WARNING("Your eyes are watering, it's hard to see!")) - M.eye_blurry = max(M.eye_blurry, 10) - if (prob(10)) - to_chat(M, SPAN_DANGER("Your throat itches uncomfortably!")) - M.custom_emote(2, "coughs!") - return - - M.add_chemical_effect(CE_SLOWDOWN, 1) - - if (prob(15)) - M.Weaken(5) - M.add_chemical_effect(CE_VOICELOSS, 5) - if (prob(30)) - M.eye_blurry = max(M.eye_blurry, 10) - - M.take_organ_damage(3 * removed, 0, ORGAN_DAMAGE_FLESH_ONLY) - M.adjustToxLoss(5 * removed, 0, ORGAN_DAMAGE_FLESH_ONLY) - -/datum/reagent/toxin/carpotoxin - name = "Carpotoxin" - description = "A deadly neurotoxin produced by the dreaded space carp." - taste_description = "fish" - reagent_state = LIQUID - color = "#003333" - - target_organ = BP_BRAIN - strength = 10 - -/datum/reagent/toxin/carpotoxin/affect_blood(mob/living/carbon/M, alien, removed) - if(alien == IS_DIONA) - return - - var/effectiveness = 1 - var/effective_dose = 2 - - if(M.chem_doses[type] < effective_dose) - effectiveness = M.chem_doses[type]/effective_dose - else if(volume < effective_dose) - effectiveness = volume/effective_dose - M.add_chemical_effect(CE_BLOCKAGE, (80 * effectiveness)/100) - -/datum/reagent/toxin/venom - name = "Spider Venom" - description = "A deadly necrotic toxin produced by giant spiders to disable their prey." - taste_description = "absolutely vile" - color = "#91d895" - target_organ = BP_LIVER - strength = 5 - -/datum/reagent/toxin/venom/affect_blood(var/mob/living/carbon/M, var/alien, var/removed) - if(prob(volume*2)) - M.confused = max(M.confused, 3) - ..() - -/datum/reagent/toxin/cryotoxin - name = "Cryotoxin" - description = "A biological agent that rapidly lowers a victims bodytemperature, and persists for quite some time." - taste_description = "mint" - taste_mult = 1.5 - reagent_state = LIQUID - metabolism = REM * 0.5 - color = "#b31008" - -/datum/reagent/toxin/cryotoxin/affect_blood(mob/living/carbon/M, alien, removed) - if (alien == IS_DIONA) - return - M.bodytemperature = max(M.bodytemperature - 15 * TEMPERATURE_DAMAGE_COEFFICIENT, 215) - if (prob(15)) - to_chat(M, SPAN_DANGER("Your insides feel freezing cold!")) - if (prob(1)) - M.emote("shiver") - holder.remove_reagent("capsaicin", 5) - -/datum/reagent/toxin/irritanttoxin - name = "Irritant toxin" - description = "A biological agent that acts similarly to pepperspray. This compound seems to be particularly cruel, however, capable of permeating the barriers of blood vessels." - taste_description = "fire" - color = "#b31008" - target_organ = BP_KIDNEYS - -/datum/reagent/toxin/irritanttoxin/affect_blood(mob/living/carbon/M, alien, removed) - if (alien == IS_DIONA) - return - if (prob(50)) - M.adjustToxLoss(0.5 * removed) - if (prob(50)) - M.custom_pain("You are getting unbearably hot!", 30) - if (prob(10)) - to_chat(M, SPAN_DANGER("You feel like your insides are burning!")) - else if (prob(20)) - M.visible_message(SPAN_WARNING("[M] [pick("dry heaves!","coughs!","splutters!","rubs at their eyes!")]")) - else - M.eye_blurry = max(M.eye_blurry, 10) - -/datum/reagent/toxin/pyrotoxin - name = "Pyrotoxin" - description = "A biologically produced compound capable of melting steel or other metals, similarly to thermite." - taste_description = "sweet chalk" - reagent_state = SOLID - color = "#673910" - touch_met = 50 - -/datum/reagent/toxin/pyrotoxin/affect_blood(mob/living/carbon/M, alien, removed) - M.adjustFireLoss(3 * removed) - if (M.fire_stacks <= 1.5) - M.adjust_fire_stacks(0.15) - if (alien == IS_DIONA) - return - if (prob(10)) - to_chat(M, SPAN_WARNING("Your veins feel like they're on fire!")) - M.adjust_fire_stacks(0.1) - else if (prob(5)) - M.IgniteMob() - M.visible_message( - SPAN_WARNING("Some of \the [M]'s veins rupture, the exposed blood igniting!"), - SPAN_DANGER("Some of your veins rupture, the exposed blood igniting!") - ) - -/datum/reagent/toxin/serotrotium - name = "Serotropic venom" - description = "A chemical compound that promotes concentrated production of the serotonin neurotransmitter in humans. This appears to be a biologically produced form, resulting in a specifically toxic nature." - taste_description = "chalky bitterness" - target_organ = BP_KIDNEYS - -/datum/reagent/toxin/serotrotium/affect_blood(mob/living/carbon/M, alien, removed) - if(alien == IS_DIONA) - return - if(prob(30)) - if(prob(25)) - M.emote(pick("shiver", "blink_r")) - M.adjustBrainLoss(0.2 * removed) - return ..() - -/datum/reagent/toxin/stimm //Homemade Hyperzine - name = "Stimm" - description = "A homemade stimulant with some serious side-effects." - taste_description = "sweetness" - taste_mult = 1.8 - color = "#d0583a" - metabolism = REM * 3 - overdose = 8 - strength = 3 - -/datum/reagent/toxin/stimm/affect_blood(mob/living/carbon/M, alien, removed) - ..() - if (prob(15)) - M.emote(pick("twitch", "blink_r", "shiver")) - if (prob(15)) - M.visible_message( - SPAN_WARNING("\The [M] shudders violently."), - SPAN_WARNING("You shudder uncontrollably, it hurts.") - ) - M.take_organ_damage(6 * removed, 0) - M.add_chemical_effect(CE_SPEEDBOOST, 1) - -/datum/reagent/toxin/stimm/overdose(mob/living/carbon/M, alien) - ..() - if (prob(10)) // 1 in 10. This thing's made with welder fuel and fertilizer, what do you expect? - var/mob/living/carbon/human/H = M - var/obj/item/organ/internal/heart/O = H.internal_organs_by_name[BP_HEART] - O.take_internal_damage(1) - to_chat(M, SPAN_WARNING("You feel a stabbing pain in your heart as it beats out of control!")) - -/datum/reagent/toxin/chlorine - name = "Chlorine" - description = "A highly poisonous liquid. Smells strongly of bleach." - reagent_state = LIQUID - taste_description = "bleach" - color = "#707c13" - strength = 15 - metabolism = REM - heating_point = null - heating_products = null - -/datum/reagent/toxin/phoron - name = "Phoron" - description = "Phoron in its liquid form." - taste_mult = 1.5 - reagent_state = LIQUID - color = "#ff3300" - strength = 30 - touch_met = 5 - var/fire_mult = 5 - heating_point = null - heating_products = null - -/datum/reagent/toxin/phoron/touch_mob(var/mob/living/L, var/amount) - if(istype(L)) - L.adjust_fire_stacks(amount / fire_mult) - -/datum/reagent/toxin/phoron/affect_blood(var/mob/living/carbon/M, var/alien, var/removed) - if(alien == IS_NABBER) - return - ..() - -/datum/reagent/toxin/phoron/affect_touch(var/mob/living/carbon/M, var/alien, var/removed) - M.take_organ_damage(0, removed * 0.1) //being splashed directly with phoron causes minor chemical burns - if(prob(10 * fire_mult)) - M.pl_effects() - -/datum/reagent/toxin/phoron/touch_turf(var/turf/simulated/T) - if(!istype(T)) - return - T.assume_gas(GAS_PHORON, volume, T20C) - remove_self(volume) - -// Produced during deuterium synthesis. Super poisonous, SUPER flammable (doesn't need oxygen to burn). -/datum/reagent/toxin/phoron/oxygen - name = "Oxyphoron" - description = "An exceptionally flammable molecule formed from deuterium synthesis." - strength = 15 - fire_mult = 15 - -/datum/reagent/toxin/phoron/oxygen/touch_turf(var/turf/simulated/T) - if(!istype(T)) - return - T.assume_gas(GAS_OXYGEN, Ceil(volume/2), T20C) - T.assume_gas(GAS_PHORON, Ceil(volume/2), T20C) - remove_self(volume) - -/datum/reagent/toxin/cyanide //Fast and Lethal - name = "Cyanide" - description = "A highly toxic chemical." - taste_mult = 0.6 - reagent_state = LIQUID - color = "#cf3600" - strength = 20 - metabolism = REM * 2 - target_organ = BP_HEART - heating_point = null - heating_products = null - -/datum/reagent/toxin/cyanide/affect_blood(var/mob/living/carbon/M, var/alien, var/removed) - ..() - M.sleeping += 1 - -/datum/reagent/toxin/taxine - name = "Taxine" - description = "A potent cardiotoxin found in nearly every part of the common yew." - taste_description = "intense bitterness" - color = "#6b833b" - strength = 16 - overdose = REAGENTS_OVERDOSE / 3 - metabolism = REM * 2 - target_organ = BP_HEART - heating_point = null - heating_products = null - -/datum/reagent/toxin/taxine/affect_blood(var/mob/living/carbon/M, var/alien, var/removed) - ..() - M.confused += 1.5 - -/datum/reagent/toxin/taxine/overdose(var/mob/living/carbon/M, var/alien) - ..() - if(ishuman(M)) - var/mob/living/carbon/human/H = M - if(H.stat != UNCONSCIOUS) - H.Weaken(8) - M.add_chemical_effect(CE_NOPULSE, 1) - -/datum/reagent/toxin/potassium_chloride - name = "Potassium Chloride" - description = "A delicious salt that stops the heart when injected into cardiac muscle." - taste_description = "salt" - reagent_state = SOLID - color = "#ffffff" - strength = 0 - overdose = REAGENTS_OVERDOSE - heating_point = null - heating_products = null - -/datum/reagent/toxin/potassium_chloride/overdose(var/mob/living/carbon/M, var/alien) - ..() - if(ishuman(M)) - var/mob/living/carbon/human/H = M - if(H.stat != 1) - if(H.losebreath >= 10) - H.losebreath = max(10, H.losebreath - 10) - H.adjustOxyLoss(2) - H.Weaken(10) - M.add_chemical_effect(CE_NOPULSE, 1) - - -/datum/reagent/toxin/potassium_chlorophoride - name = "Potassium Chlorophoride" - description = "A specific chemical based on Potassium Chloride to stop the heart for surgery. Not safe to eat!" - taste_description = "salt" - reagent_state = SOLID - color = "#ffffff" - strength = 10 - overdose = 20 - heating_point = null - heating_products = null - -/datum/reagent/toxin/potassium_chlorophoride/affect_blood(var/mob/living/carbon/M, var/alien, var/removed) - ..() - if(ishuman(M)) - var/mob/living/carbon/human/H = M - if(H.stat != UNCONSCIOUS) - if(H.losebreath >= 10) - H.losebreath = max(10, M.losebreath-10) - H.adjustOxyLoss(2) - H.Weaken(10) - M.add_chemical_effect(CE_NOPULSE, 1) - -/datum/reagent/toxin/zombiepowder - name = "Zombie Powder" - description = "A strong neurotoxin that puts the subject into a death-like state." - taste_description = "death" - reagent_state = SOLID - color = "#669900" - metabolism = REM - strength = 3 - target_organ = BP_BRAIN - heating_message = "melts into a liquid slurry." - heating_products = list(/datum/reagent/toxin/carpotoxin, /datum/reagent/soporific, /datum/reagent/copper) - -/datum/reagent/toxin/zombiepowder/affect_blood(var/mob/living/carbon/M, var/alien, var/removed) - ..() - if(alien == IS_DIONA) - return - M.status_flags |= FAKEDEATH - M.adjustOxyLoss(3 * removed) - M.Weaken(10) - M.silent = max(M.silent, 10) - if(M.chem_doses[type] <= removed) //half-assed attempt to make timeofdeath update only at the onset - M.timeofdeath = world.time - M.add_chemical_effect(CE_NOPULSE, 1) - -/datum/reagent/toxin/zombiepowder/Destroy() - if(holder && holder.my_atom && ismob(holder.my_atom)) - var/mob/M = holder.my_atom - M.status_flags &= ~FAKEDEATH - . = ..() - -/datum/reagent/toxin/fertilizer //Reagents used for plant fertilizers. - name = "Fertilizer" - description = "A chemical mix good for growing plants with." - taste_description = "plant food" - taste_mult = 0.5 - reagent_state = LIQUID - strength = 0.5 // It's not THAT poisonous. - color = "#664330" - heating_point = null - heating_products = null - -/datum/reagent/toxin/fertilizer/eznutrient - name = "EZ Nutrient" - -/datum/reagent/toxin/fertilizer/left4zed - name = "Left-4-Zed" - -/datum/reagent/toxin/fertilizer/robustharvest - name = "Robust Harvest" - -/datum/reagent/toxin/plantbgone - name = "Plant-B-Gone" - description = "A harmful toxic mixture to kill plantlife. Do not ingest!" - taste_mult = 1 - reagent_state = LIQUID - color = "#49002e" - strength = 4 - heating_products = list(/datum/reagent/toxin, /datum/reagent/water) - -/datum/reagent/toxin/plantbgone/touch_turf(var/turf/T) - if(istype(T, /turf/simulated/wall)) - var/turf/simulated/wall/W = T - if(locate(/obj/effect/overlay/wallrot) in W) - for(var/obj/effect/overlay/wallrot/E in W) - qdel(E) - W.visible_message("The fungi are completely dissolved by the solution!") - -/datum/reagent/toxin/plantbgone/touch_obj(var/obj/O, var/volume) - if(istype(O, /obj/effect/vine)) - qdel(O) - -/datum/reagent/toxin/plantbgone/affect_blood(var/mob/living/carbon/M, var/alien, var/removed) - ..() - if(alien == IS_DIONA) - M.adjustToxLoss(50 * removed) - -/datum/reagent/toxin/plantbgone/affect_touch(var/mob/living/carbon/M, var/alien, var/removed) - ..() - if(alien == IS_DIONA) - M.adjustToxLoss(50 * removed) - -/datum/reagent/acid/polyacid - name = "Polytrinic acid" - description = "Polytrinic acid is a an extremely corrosive chemical substance." - taste_description = "acid" - reagent_state = LIQUID - color = "#8e18a9" - power = 10 - meltdose = 4 - max_damage = 60 - -/datum/reagent/acid/stomach - name = "stomach acid" - taste_description = "coppery foulness" - power = 2 - color = "#d8ff00" - -/datum/reagent/lexorin - name = "Lexorin" - description = "Lexorin temporarily stops respiration. Causes tissue damage." - taste_description = "acid" - reagent_state = LIQUID - color = "#c8a5dc" - metabolism = REM * 0.5 - overdose = REAGENTS_OVERDOSE - value = 2.4 - -/datum/reagent/lexorin/affect_blood(mob/living/carbon/M, alien, removed) - if(alien == IS_DIONA || alien == IS_VOX) // Lexorin now focuses on removing oxygen from the blood, it wouldn't make sense that these two races are affected - return - if(alien == IS_SKRELL) - M.take_organ_damage(8 * removed, 0, ORGAN_DAMAGE_FLESH_ONLY) - if (prob(10)) - M.visible_message( - SPAN_WARNING("\The [M]'s skin fizzles and flakes away!"), - SPAN_DANGER("Your skin fizzles and flakes away!") - ) - if(M.losebreath < 45) - M.losebreath++ - else - M.take_organ_damage(10 * removed, 0, ORGAN_DAMAGE_FLESH_ONLY) - if (prob(10)) - M.visible_message( - SPAN_WARNING("\The [M]'s skin fizzles and flakes away!"), - SPAN_DANGER("Your skin fizzles and flakes away!") - ) - if(M.losebreath < 30) - M.losebreath++ - M.adjustOxyLoss(15 * removed) - -/datum/reagent/lexorin/affect_touch(mob/living/carbon/M, alien, removed) - if (alien == IS_VOX || alien == IS_DIONA) // Vox & Diona shouldn't be effected by skin permeable chemicals - return - - touch_met = volume // immediately permiates the skin, also avoids bugs with chemical duplication. - - // The warning messages should only display once per splash, all of the chemicals upon the skin should be absorbed in one tick. - M.visible_message( - SPAN_WARNING("\The [M]'s skin fizzles and flakes on contact with the liquid!"), - SPAN_DANGER("You feel a painful fizzling and your skin begins to flake!.") - ) - - if(alien == IS_SKRELL) // Skrell breathe through their skin, seems logical that this would be more effective - M.reagents.add_reagent(/datum/reagent/lexorin, 0.75 * removed) - else - M.reagents.add_reagent(/datum/reagent/lexorin, 0.5 * removed) - - - -/datum/reagent/mutagen - name = "Unstable mutagen" - description = "Might cause unpredictable mutations. Keep away from children." - taste_description = "slime" - taste_mult = 0.9 - reagent_state = LIQUID - color = "#13bc5e" - value = 3.1 - -/datum/reagent/mutagen/affect_touch(var/mob/living/carbon/M, var/alien, var/removed) - if(prob(33)) - affect_blood(M, alien, removed) - -/datum/reagent/mutagen/affect_ingest(var/mob/living/carbon/M, var/alien, var/removed) - if(prob(67)) - affect_blood(M, alien, removed) - -/datum/reagent/mutagen/affect_blood(var/mob/living/carbon/M, var/alien, var/removed) - - if(M.isSynthetic()) - return - - var/mob/living/carbon/human/H = M - if(istype(H) && (H.species.species_flags & SPECIES_FLAG_NO_SCAN)) - return - - if(M.dna) - if(prob(removed * 0.1)) // Approx. one mutation per 10 injected/20 ingested/30 touching units - randmuti(M) - if(prob(98)) - randmutb(M) - else - randmutg(M) - domutcheck(M, null) - M.UpdateAppearance() - M.apply_damage(10 * removed, DAMAGE_RADIATION, armor_pen = 100) - -/datum/reagent/slimejelly - name = "Slime Jelly" - description = "A gooey semi-liquid produced from one of the deadliest lifeforms in existence. SO REAL." - taste_description = "slime" - taste_mult = 1.3 - reagent_state = LIQUID - color = "#801e28" - value = 1.2 - should_admin_log = TRUE - -/datum/reagent/slimejelly/affect_blood(var/mob/living/carbon/M, var/alien, var/removed) - if(alien == IS_DIONA) - return - if(prob(10)) - to_chat(M, "Your insides are burning!") - M.adjustToxLoss(rand(100, 300) * removed) - else if(prob(40)) - M.heal_organ_damage(25 * removed, 0) - -/datum/reagent/soporific - name = "Soporific" - description = "An effective hypnotic used to treat insomnia." - taste_description = "bitterness" - reagent_state = LIQUID - color = "#009ca8" - metabolism = REM * 0.5 - overdose = REAGENTS_OVERDOSE - value = 2.5 - scannable = TRUE - should_admin_log = TRUE - -/datum/reagent/soporific/affect_blood(var/mob/living/carbon/M, var/alien, var/removed) - if(alien == IS_DIONA) - return - - var/threshold = 1 - if(alien == IS_SKRELL) - threshold = 1.2 - - if(M.chem_doses[type] < 1 * threshold) - if(M.chem_doses[type] == metabolism * 2 || prob(5)) - M.emote("yawn") - else if(M.chem_doses[type] < 1.5 * threshold) - M.eye_blurry = max(M.eye_blurry, 10) - else if(M.chem_doses[type] < 5 * threshold) - if(prob(50)) - M.Weaken(2) - M.add_chemical_effect(CE_SEDATE, 1) - M.drowsyness = max(M.drowsyness, 20) - else - M.sleeping = max(M.sleeping, 20) - M.drowsyness = max(M.drowsyness, 60) - M.add_chemical_effect(CE_SEDATE, 1) - M.add_chemical_effect(CE_PULSE, -1) - -/datum/reagent/chloralhydrate - name = "Chloral Hydrate" - description = "A powerful sedative." - taste_description = "bitterness" - reagent_state = SOLID - color = "#000067" - metabolism = REM * 0.5 - overdose = REAGENTS_OVERDOSE * 0.5 - value = 2.6 - should_admin_log = TRUE - -/datum/reagent/chloralhydrate/affect_blood(var/mob/living/carbon/M, var/alien, var/removed) - if(alien == IS_DIONA) - return - - var/threshold = 1 - if(alien == IS_SKRELL) - threshold = 1.2 - M.add_chemical_effect(CE_SEDATE, 1) - - if(M.chem_doses[type] <= metabolism * threshold) - M.confused += 2 - M.drowsyness += 2 - - if(M.chem_doses[type] < 2 * threshold) - M.Weaken(30) - M.eye_blurry = max(M.eye_blurry, 10) - else - M.sleeping = max(M.sleeping, 30) - - if(M.chem_doses[type] > 1 * threshold) - M.adjustToxLoss(removed) - -/datum/reagent/chloralhydrate/beer2 //disguised as normal beer for use by emagged brobots - name = "Beer" - description = "An alcoholic beverage made from malted grains, hops, yeast, and water. The fermentation appears to be incomplete." //If the players manage to analyze this, they deserve to know something is wrong. - taste_description = "shitty piss water" - reagent_state = LIQUID - color = "#ffd300" - - glass_name = "beer" - glass_desc = "A freezing pint of beer" - -/datum/reagent/vecuronium_bromide - name = "Vecuronium Bromide" - description = "A powerful paralytic." - taste_description = "metallic" - reagent_state = SOLID - color = "#ff337d" - metabolism = REM * 0.5 - overdose = REAGENTS_OVERDOSE * 0.5 - value = 2.6 - should_admin_log = TRUE - -/datum/reagent/vecuronium_bromide/affect_blood(var/mob/living/carbon/M, var/alien, var/removed) - if(alien == IS_DIONA) - return - - var/threshold = 2 - if(alien == IS_SKRELL) - threshold = 2.4 - - if(M.chem_doses[type] >= metabolism * threshold * 0.5) - M.confused = max(M.confused, 2) - M.add_chemical_effect(CE_VOICELOSS, 1) - if(M.chem_doses[type] > threshold * 0.5) - M.make_dizzy(3) - M.Weaken(2) - if(M.chem_doses[type] == round(threshold * 0.5, metabolism)) - to_chat(M, SPAN_WARNING("Your muscles slacken and cease to obey you.")) - if(M.chem_doses[type] >= threshold) - M.add_chemical_effect(CE_SEDATE, 1) - M.eye_blurry = max(M.eye_blurry, 10) - - if(M.chem_doses[type] > 1 * threshold) - M.adjustToxLoss(removed) - -/* Drugs */ - -/datum/reagent/space_drugs - name = "Space drugs" - description = "An illegal chemical compound used as drug." - taste_description = "bitterness" - taste_mult = 0.4 - reagent_state = LIQUID - color = "#60a584" - metabolism = REM * 0.5 - overdose = REAGENTS_OVERDOSE - value = 2.8 - should_admin_log = TRUE - -/datum/reagent/space_drugs/affect_blood(var/mob/living/carbon/M, var/alien, var/removed) - if(alien == IS_DIONA) - return - - var/drug_strength = 15 - if(alien == IS_SKRELL) - drug_strength = drug_strength * 0.8 - - M.druggy = max(M.druggy, drug_strength) - if (alien != IS_SKRELL) - if (prob(10)) - M.SelfMove(pick(GLOB.cardinal)) - if(prob(7)) - M.emote(pick("twitch", "drool", "moan", "giggle")) - M.add_chemical_effect(CE_PULSE, -1) - -/datum/reagent/tilt - name = "Tilt" - description = "A potent downer made from mixing cough medicine and Space-Up." - taste_description = "purple sweetness" - reagent_state = LIQUID - color = "#800080" - metabolism = REM * 0.5 - overdose = REAGENTS_OVERDOSE - value = 1.5 - var/strength = 10 - - glass_name = "tilt" - glass_desc = "The best way there is to get tilted." - -/datum/reagent/tilt/affect_blood(mob/living/carbon/M, alien, removed) - if (alien == IS_DIONA) - return - - var/strength_mod = 1 - if (alien == IS_SKRELL) - strength_mod *= 0.5 - - var/effective_dose = M.chem_doses[type] * strength_mod - - if (effective_dose >= strength * 0.5) - M.add_chemical_effect(CE_SLOWDOWN, 1) - M.make_dizzy(6) - if (effective_dose >= strength) - M.slurring = max(M.slurring, 40) - M.confused = max(M.confused, 30) - M.make_dizzy(10) - M.eye_blurry = max(M.eye_blurry, 10) - if (effective_dose >= strength * 1.5) - M.drowsyness = max(M.drowsyness, 20) - M.make_dizzy(40) - if (prob(10)) - M.emote("drool") - -/datum/reagent/tilt/overdose(mob/living/carbon/M, alien) - M.add_chemical_effect(CE_TOXIN, 1) - if (prob(90)) - M.add_chemical_effect(CE_BREATHLOSS, 5) - if (prob(10)) - M.Paralyse(20) - M.Sleeping(30) - - -/datum/reagent/serotrotium - name = "Serotrotium" - description = "A chemical compound that promotes concentrated production of the serotonin neurotransmitter in humans." - taste_description = "bitterness" - reagent_state = LIQUID - color = "#202040" - metabolism = REM * 0.25 - overdose = REAGENTS_OVERDOSE - value = 2.5 - -/datum/reagent/serotrotium/affect_blood(var/mob/living/carbon/M, var/alien, var/removed) - if(alien == IS_DIONA) - return - if(prob(7)) - M.emote(pick("twitch", "drool", "moan", "gasp")) - return - -/datum/reagent/cryptobiolin - name = "Cryptobiolin" - description = "Cryptobiolin causes confusion and dizzyness." - taste_description = "sourness" - reagent_state = LIQUID - color = "#000055" - metabolism = REM * 0.5 - overdose = REAGENTS_OVERDOSE - heating_point = 61 CELSIUS - heating_products = list(/datum/reagent/potassium, /datum/reagent/acetone, /datum/reagent/sugar) - value = 2 - -/datum/reagent/cryptobiolin/affect_blood(var/mob/living/carbon/M, var/alien, var/removed) - if(alien == IS_DIONA) - return - var/drug_strength = 4 - if(alien == IS_SKRELL) - drug_strength = drug_strength * 0.8 - M.make_dizzy(drug_strength) - M.confused = max(M.confused, drug_strength * 5) - -/datum/reagent/impedrezene // Impairs mental function correctly, takes an overwhelming dose to kill. - name = "Impedrezene" - description = "Impedrezene is a narcotic that impedes one's ability by slowing down the higher brain cell functions." - taste_description = "numbness" - reagent_state = LIQUID - color = "#c8a5dc" - overdose = REAGENTS_OVERDOSE - value = 1.8 - -/datum/reagent/impedrezene/affect_blood(mob/living/carbon/M, alien, removed) - if(alien == IS_DIONA) - return - - M.jitteriness = max(M.jitteriness - 5, 0) - M.add_chemical_effect(M.add_chemical_effect(CE_SLOWDOWN, 1)) - - if(prob(80)) - M.confused = max(M.confused, 10) - if(prob(50)) - M.drowsyness = max(M.drowsyness, 3) - if(prob(10)) - M.emote("drool") - M.apply_effect(EFFECT_STUTTER, 3) - - if (M.getBrainLoss() < 60) - M.adjustBrainLoss(14 * removed) - else - M.adjustBrainLoss(7 * removed) - -/datum/reagent/mindbreaker - name = "Mindbreaker Toxin" - description = "A powerful hallucinogen, it can cause fatal effects in users." - taste_description = "sourness" - reagent_state = LIQUID - color = "#b31008" - metabolism = REM * 0.25 - overdose = REAGENTS_OVERDOSE - value = 0.6 - should_admin_log = TRUE - -/datum/reagent/mindbreaker/affect_blood(var/mob/living/carbon/M, var/alien, var/removed) - if(alien == IS_DIONA) - return - M.add_chemical_effect(CE_MIND, -2) - if(alien == IS_SKRELL) - M.hallucination(25, 30) - else - M.hallucination(50, 50) - -/datum/reagent/psilocybin - name = "Psilocybin" - description = "A strong psycotropic derived from certain species of mushroom." - taste_description = "mushroom" - color = "#e700e7" - overdose = REAGENTS_OVERDOSE - metabolism = REM * 0.5 - value = 0.7 - -/datum/reagent/psilocybin/affect_blood(var/mob/living/carbon/M, var/alien, var/removed) - if(alien == IS_DIONA) - return - - var/threshold = 1 - if(alien == IS_SKRELL) - threshold = 1.2 - - M.druggy = max(M.druggy, 30) - - if(M.chem_doses[type] < 1 * threshold) - M.apply_effect(3, EFFECT_STUTTER) - M.make_dizzy(5) - if(prob(5)) - M.emote(pick("twitch", "giggle")) - else if(M.chem_doses[type] < 2 * threshold) - M.apply_effect(3, EFFECT_STUTTER) - M.make_jittery(5) - M.make_dizzy(5) - M.druggy = max(M.druggy, 35) - if(prob(10)) - M.emote(pick("twitch", "giggle")) - else - M.add_chemical_effect(CE_MIND, -1) - M.apply_effect(3, EFFECT_STUTTER) - M.make_jittery(10) - M.make_dizzy(10) - M.druggy = max(M.druggy, 40) - if(prob(15)) - M.emote(pick("twitch", "giggle")) - - -/datum/reagent/three_eye - name = "Three Eye" - taste_description = "liquid starlight" - description = "Out on the edge of human space, at the limits of scientific understanding and \ - cultural taboo, people develop and dose themselves with substances that would curl the hair on \ - a brinker's vatgrown second head. Three Eye is one of the most notorious narcotics to ever come \ - out of the independant habitats, and has about as much in common with recreational drugs as a \ - Stok does with an Unathi strike trooper. It is equally effective on humans, Skrell, dionaea and \ - probably the Captain's cat, and distributing it will get you guaranteed jail time in every \ - human territory." - reagent_state = LIQUID - color = "#ccccff" - metabolism = REM - overdose = 25 - should_admin_log = TRUE - - // M A X I M U M C H E E S E - var/static/list/dose_messages = list( - "Your name is called. It is your time.", - "You are dissolving. Your hands are wax...", - "It all runs together. It all mixes.", - "It is done. It is over. You are done. You are over.", - "You won't forget. Don't forget. Don't forget.", - "Light seeps across the edges of your vision...", - "Something slides and twitches within your sinus cavity...", - "Your bowels roil. It waits within.", - "Your gut churns. You are heavy with potential.", - "Your heart flutters. It is winged and caged in your chest.", - "There is a precious thing, behind your eyes.", - "Everything is ending. Everything is beginning.", - "Nothing ends. Nothing begins.", - "Wake up. Please wake up.", - "Stop it! You're hurting them!", - "It's too soon for this. Please go back.", - "We miss you. Where are you?", - "Come back from there. Please." - ) - - var/static/list/overdose_messages = list( - "THE SIGNAL THE SIGNAL THE SIGNAL THE SIGNAL", - "IT CRIES IT CRIES IT WAITS IT CRIES", - "NOT YOURS NOT YOURS NOT YOURS NOT YOURS", - "THAT IS NOT FOR YOU", - "IT RUNS IT RUNS IT RUNS IT RUNS", - "THE BLOOD THE BLOOD THE BLOOD THE BLOOD", - "THE LIGHT THE DARK A STAR IN CHAINS" - ) - -/datum/reagent/three_eye/affect_blood(var/mob/living/carbon/M, var/alien, var/removed) - M.add_client_color(/datum/client_color/thirdeye) - M.add_chemical_effect(CE_THIRDEYE, 1) - M.add_chemical_effect(CE_MIND, -2) - M.hallucination(50, 50) - M.make_jittery(3) - M.make_dizzy(3) - if(prob(0.1) && ishuman(M)) - var/mob/living/carbon/human/H = M - H.seizure() - H.adjustBrainLoss(rand(8, 12)) - if(prob(5)) - to_chat(M, SPAN_WARNING("[pick(dose_messages)]")) - -/datum/reagent/three_eye/on_leaving_metabolism(var/mob/parent, var/metabolism_class) - parent.remove_client_color(/datum/client_color/thirdeye) - -/datum/reagent/three_eye/overdose(var/mob/living/carbon/M, var/alien) - ..() - M.adjustBrainLoss(rand(1, 5)) - if(ishuman(M) && prob(10)) - var/mob/living/carbon/human/H = M - H.seizure() - if(prob(10)) - to_chat(M, SPAN_DANGER("[pick(overdose_messages)]")) - if(M.psi) - M.psi.check_latency_trigger(30, "a Three Eye overdose") - -/* Transformations */ -/datum/reagent/slimetoxin - name = "Mutation Toxin" - description = "A corruptive toxin produced by slimes." - taste_description = "sludge" - reagent_state = LIQUID - color = "#13bc5e" - metabolism = REM * 0.2 - value = 2 - should_admin_log = TRUE - -/datum/reagent/slimetoxin/affect_blood(var/mob/living/carbon/human/H, var/alien, var/removed) - if(!istype(H)) - return - if(H.species.name == SPECIES_PROMETHEAN) - return - H.adjustToxLoss(40 * removed) - if(H.chem_doses[type] < 1 || prob(30)) - return - H.chem_doses[type] = 0 - var/list/meatchunks = list() - for(var/limb_tag in list(BP_R_ARM, BP_L_ARM, BP_R_LEG,BP_L_LEG)) - var/obj/item/organ/external/E = H.get_organ(limb_tag) - if(E && !E.is_stump() && !BP_IS_ROBOTIC(E) && E.species.name != SPECIES_PROMETHEAN) - meatchunks += E - if(!meatchunks.len) - if(prob(10)) - to_chat(H, "Your flesh rapidly mutates!") - H.set_species(SPECIES_PROMETHEAN) - H.shapeshifter_set_colour("#05ff9b") - H.verbs -= /mob/living/carbon/human/proc/shapeshifter_select_colour - return - var/obj/item/organ/external/O = pick(meatchunks) - to_chat(H, "Your [O.name]'s flesh mutates rapidly!") - if(!wrapped_species_by_ref["\ref[H]"]) - wrapped_species_by_ref["\ref[H]"] = H.species.name - meatchunks = list(O) | O.children - for(var/obj/item/organ/external/E in meatchunks) - E.species = all_species[SPECIES_PROMETHEAN] - E.skin_tone = null - E.s_col = ReadRGB("#05ff9b") - E.s_col_blend = ICON_ADD - E.status &= ~ORGAN_BROKEN - E.status |= ORGAN_MUTATED - E.limb_flags &= ~ORGAN_FLAG_CAN_BREAK - E.dislocated = -1 - E.max_damage = 5 - E.update_icon(1) - O.max_damage = 15 - if(prob(10)) - to_chat(H, "Your slimy [O.name] plops off!") - O.droplimb() - H.update_body() - -/datum/reagent/aslimetoxin - name = "Advanced Mutation Toxin" - description = "An advanced corruptive toxin produced by slimes." - taste_description = "sludge" - reagent_state = LIQUID - color = "#13bc5e" - -/datum/reagent/aslimetoxin/affect_blood(var/mob/living/carbon/M, var/alien, var/removed) // TODO: check if there's similar code anywhere else - if(HAS_TRANSFORMATION_MOVEMENT_HANDLER(M)) - return - to_chat(M, "Your flesh rapidly mutates!") - ADD_TRANSFORMATION_MOVEMENT_HANDLER(M) - M.icon = null - M.overlays.Cut() - M.set_invisibility(101) - for(var/obj/item/W in M) - if(istype(W, /obj/item/implant)) //TODO: Carn. give implants a dropped() or something - qdel(W) - continue - M.drop_from_inventory(W) - var/mob/living/carbon/slime/new_mob = new /mob/living/carbon/slime(M.loc) - new_mob.a_intent = "hurt" - new_mob.universal_speak = TRUE - if(M.mind) - M.mind.transfer_to(new_mob) - else - new_mob.key = M.key - qdel(M) - -/datum/reagent/nanites - name = "Nanomachines" - description = "Microscopic construction robots." - taste_description = "slimey metal" - reagent_state = LIQUID - color = "#535e66" - hidden_from_codex = TRUE - value = 9 - -/datum/reagent/xenomicrobes - name = "Xenomicrobes" - description = "Microbes with an entirely alien cellular structure." - taste_description = "sludge" - reagent_state = LIQUID - color = "#535e66" - hidden_from_codex = TRUE - heating_point = 100 CELSIUS - value = 5 - -/datum/reagent/toxin/hair_remover - name = "Hair Remover" - description = "An extremely effective chemical depilator. Do not ingest." - taste_description = "acid" - reagent_state = LIQUID - color = "#d9ffb3" - strength = 1 - overdose = REAGENTS_OVERDOSE - heating_products = null - heating_point = null - -/datum/reagent/toxin/hair_remover/affect_touch(var/mob/living/carbon/human/M, var/alien, var/removed) - if(alien == IS_SKRELL) //skrell can't have hair unless you hack it in, also to prevent tentacles from falling off - return - M.species.set_default_hair(M) - to_chat(M, "You feel a chill and your skin feels lighter..") - remove_self(volume) - -/datum/reagent/toxin/bromide - name = "Bromide" - description = "A dark, nearly opaque, red-orange, toxic element." - taste_description = "pestkiller" - reagent_state = LIQUID - color = "#4c3b34" - strength = 3 - heating_products = null - heating_point = null - -/datum/reagent/toxin/methyl_bromide - name = "Methyl Bromide" - description = "A fumigant derived from bromide." - taste_description = "pestkiller" - reagent_state = LIQUID - color = "#4c3b34" - strength = 5 - heating_products = null - heating_point = null - -/datum/reagent/toxin/methyl_bromide/affect_touch(var/mob/living/carbon/M, var/alien, var/removed) - . = (alien != IS_NABBER && ..()) - -/datum/reagent/toxin/methyl_bromide/affect_ingest(var/mob/living/carbon/M, var/alien, var/removed) - . = (alien != IS_NABBER && ..()) - -/datum/reagent/toxin/methyl_bromide/touch_turf(var/turf/simulated/T) - if(istype(T)) - T.assume_gas(GAS_METHYL_BROMIDE, volume, T20C) - remove_self(volume) - -/datum/reagent/toxin/methyl_bromide/affect_blood(var/mob/living/carbon/M, var/alien, var/removed) - . = (alien != IS_NABBER && ..()) - if(istype(M)) - for(var/obj/item/organ/external/E in M.organs) - if(LAZYLEN(E.implants)) - for(var/obj/effect/spider/spider in E.implants) - if(prob(25)) - E.implants -= spider - M.visible_message("The dying form of \a [spider] emerges from inside \the [M]'s [E.name].") - qdel(spider) - break - -/datum/reagent/toxin/tar - name = "Tar" - description = "A dark, viscous liquid." - taste_description = "petroleum" - color = "#140b30" - strength = 4 - heating_products = list(/datum/reagent/acetone, /datum/reagent/carbon, /datum/reagent/ethanol) - heating_point = 145 CELSIUS - heating_message = "separates." - -/datum/reagent/toxin/boron - name = "Boron" - description = "A chemical that is highly valued for its potential in fusion energy." - taste_description = "metal" - reagent_state = SOLID - color = "#837e79" - value = 4 - strength = 7 diff --git a/code/modules/reagents/Chemistry-Reagents/Random/Chemistry-Reagents-Random.dm b/code/modules/reagents/Chemistry-Reagents/Random/Chemistry-Reagents-Random.dm deleted file mode 100644 index 65fb03e05b962..0000000000000 --- a/code/modules/reagents/Chemistry-Reagents/Random/Chemistry-Reagents-Random.dm +++ /dev/null @@ -1,158 +0,0 @@ - - -// subtypes of stuff in here will be avoided when randomizing interactions. -GLOBAL_LIST_INIT(random_chem_interaction_blacklist, list( - /datum/reagent/adminordrazine, - /datum/reagent/nanites, - /datum/reagent/water/holywater, - /datum/reagent/chloralhydrate/beer2, - /datum/reagent/tobacco, - /datum/reagent/drink, - /datum/reagent/crayon_dust, - /datum/reagent/random, - /datum/reagent/toxin/phoron, - /datum/reagent/ethanol // Includes alcoholic beverages -)) - -#define FOR_ALL_EFFECTS \ - var/list/all_effects = decls_repository.get_decls_unassociated(data);\ - for(var/decl/random_chem_effect/effect in all_effects) - -/datum/reagent/random - name = "exotic chemical" - description = "A strange and exotic chemical substance." - taste_mult = 0 // Random taste not yet implemented - hidden_from_codex = TRUE - reagent_state = LIQUID - var/max_effect_number = 8 - -/datum/reagent/random/New(var/datum/reagents/holder, var/override = FALSE) - if(override) - return // This is used for random prototypes, so we bypass further init - return ..(holder) - -/datum/reagent/random/initialize_data(var/list/newdata) - var/datum/reagent/random/other = SSchemistry.get_prototype(type) - if(istype(newdata)) - data = newdata.Copy() - else - data = other.data.Copy() - chilling_products = other.chilling_products - heating_products = other.heating_products - recompute_properties() - -/datum/reagent/random/proc/randomize_data(temperature) - data = list() - var/list/effects_to_get = subtypesof(/decl/random_chem_effect/random_properties) - if(length(effects_to_get) > max_effect_number) - shuffle(effects_to_get) - effects_to_get.Cut(max_effect_number + 1) - effects_to_get += subtypesof(/decl/random_chem_effect/general_properties) - - var/list/decls = decls_repository.get_decls_unassociated(effects_to_get) - for(var/item in decls) - var/decl/random_chem_effect/effect = item - effect.prototype_process(src, temperature) - - var/whitelist = subtypesof(/datum/reagent) - for(var/bad_type in GLOB.random_chem_interaction_blacklist) - whitelist -= typesof(bad_type) - - chilling_products = list() - for(var/i in 1 to rand(1,3)) - chilling_products += pick_n_take(whitelist) // it's possible that these form a valid reaction, but we're OK with that. - heating_products = list() - for(var/i in 1 to rand(1,3)) - heating_products += pick_n_take(whitelist) - - for(var/decl/random_chem_effect/random_properties/effect in decls) - effect.set_caches(src, whitelist) - -/datum/reagent/random/proc/stable_at_temperature(temperature) - if(temperature > chilling_point && temperature < heating_point) - return TRUE - -/datum/reagent/random/mix_data(var/list/other_data, var/amount) - if(volume <= 0) - return // ?? but we're about to divide by 0 if this happens, so let's avoid. - var/old_amount = max(volume - amount, 0) // how much we had prior to the addition - var/ratio = old_amount/volume - FOR_ALL_EFFECTS - data[effect.type] = effect.mix_data(data[effect.type], ratio, other_data[effect.type]) - -/datum/reagent/random/proc/recompute_properties() - FOR_ALL_EFFECTS - effect.on_property_recompute(src, data[effect.type]) - -/datum/reagent/random/custom_temperature_effects(var/temperature, var/datum/reagents/reagents) - if(temperature in (heating_point - 20) to heating_point) - FOR_ALL_EFFECTS - var/result = effect.distillation_act(src, reagents, data[effect.type]) - if(!isnull(result)) - data[effect.type] = result - . = TRUE - else if(temperature in chilling_point to (chilling_point + 20)) - FOR_ALL_EFFECTS - var/result = effect.cooling_act(src, reagents, data[effect.type]) - if(!isnull(result)) - data[effect.type] = result - . = TRUE - if(.) - reagents.my_atom.visible_message("The chemicals in \the [reagents.my_atom] bubble slightly!") - -/datum/reagent/random/affect_blood(var/mob/living/carbon/M, var/alien, var/removed) - FOR_ALL_EFFECTS - effect.affect_blood(M, alien, removed, data[effect.type]) - -/datum/reagent/random/proc/on_chemicals_analyze(mob/user) - to_chat(user, get_scan_data(user)) - -/datum/reagent/random/proc/get_scan_data(mob/user) - var/list/dat = list() - var/chem_skill = user.get_skill_value(SKILL_CHEMISTRY) - if(chem_skill < SKILL_BASIC) - dat += "You analyze the strange liquid. The readings are confusing; could it maybe be juice?" - else if(chem_skill < SKILL_ADEPT) - dat += "You analyze the strange liquid. Based on the readings, you are skeptical that this is safe to drink." - else - dat += "The readings are very unsual and intriguing. You suspect it may be of alien origin." - var/sci_skill = user.get_skill_value(SKILL_SCIENCE) - var/beneficial - var/harmful - var/list/effect_descs = list() - var/list/interactions = list() - FOR_ALL_EFFECTS - if(effect.beneficial > 0) - beneficial = 1 - if(effect.beneficial < 0) - harmful = 1 - if(effect.desc) - effect_descs += effect.desc - var/interaction = effect.get_interactions(src, sci_skill, chem_skill) - if(interaction) - interactions += interaction - if(sci_skill <= SKILL_ADEPT) - if(beneficial) - dat += "The scan suggests that the chemical has some potentially beneficial effects!" - if(harmful) - dat += "The readings confirm that the chemical is not safe for human use." - else - dat += "A close analysis of the scan suggests that the chemical has some of the following effects: [english_list(effect_descs)]." - if(chem_skill == SKILL_ADEPT) - dat += "You aren't sure how this chemical will react with other reagents, but it does seem to be sensitive to changes in temperature." - else - dat += "Here are the chemicals you suspect this one will interact with, probably when heated or cooled:" - dat += JOINTEXT(interactions) - return jointext(dat, "
              ") - -/datum/reagent/random/Value() - . = 0 - FOR_ALL_EFFECTS - . += effect.get_value(data[effect.type]) - . = max(., 0) - -// Extra unique types for exoplanet spawns, etc. -/datum/reagent/random/one -/datum/reagent/random/two - -#undef FOR_ALL_EFFECTS \ No newline at end of file diff --git a/code/modules/reagents/Chemistry-Reagents/Random/random_effects.dm b/code/modules/reagents/Chemistry-Reagents/Random/random_effects.dm deleted file mode 100644 index 2e4744d625453..0000000000000 --- a/code/modules/reagents/Chemistry-Reagents/Random/random_effects.dm +++ /dev/null @@ -1,373 +0,0 @@ -#define RANDOM_CHEM_EFFECT_TRUE 1 //Boolean, starts true -#define RANDOM_CHEM_EFFECT_INT 2 -#define RANDOM_CHEM_EFFECT_FLOAT 3 - -/decl/random_chem_effect - var/minimum = 0 - var/maximum = 1 - var/mode = RANDOM_CHEM_EFFECT_TRUE - var/beneficial = 0 // Neutral; 1 for beneficial, -1 for harmful - var/desc - var/cost = 500 // Modify if an effect should be valued more. - -/decl/random_chem_effect/proc/get_random_value() - switch(mode) - if(RANDOM_CHEM_EFFECT_TRUE) - return 1 - if(RANDOM_CHEM_EFFECT_INT) - return rand(minimum, maximum) - if(RANDOM_CHEM_EFFECT_FLOAT) - return rand() * (maximum - minimum) + minimum - -/decl/random_chem_effect/proc/mix_data(first_value, first_ratio, second_value) - switch(mode) - if(RANDOM_CHEM_EFFECT_TRUE) - return !!(first_value * first_ratio + second_value * (1 - first_ratio)) // Basically |, unless ratio is 0 or 1 - if(RANDOM_CHEM_EFFECT_INT) - return round(first_value * first_ratio + second_value * (1 - first_ratio)) - if(RANDOM_CHEM_EFFECT_FLOAT) - return first_value * first_ratio + second_value * (1 - first_ratio) - -/decl/random_chem_effect/proc/prototype_process(var/datum/reagent/random/prototype, temperature) - prototype.data[type] = get_random_value() - -/decl/random_chem_effect/proc/on_property_recompute(var/datum/reagent/random/reagent, var/value) - -/decl/random_chem_effect/proc/affect_blood(var/mob/living/carbon/M, var/alien, var/removed, var/value) - -/decl/random_chem_effect/proc/distillation_act(var/datum/reagent/random/reagent, var/datum/reagents/reagents) - -/decl/random_chem_effect/proc/cooling_act(var/datum/reagent/random/reagent, var/datum/reagents/reagents) - -/decl/random_chem_effect/proc/get_interactions() - -// This is referring to monetary value. -/decl/random_chem_effect/proc/get_value(var/value) - switch(beneficial) - if(1) - return cost * (value - minimum)/(maximum - minimum) - if(0) - return 0 - if(-1) - return -3 * cost * (value - minimum)/(maximum - minimum) - -// All general properties will be chosen. - -/decl/random_chem_effect/general_properties/name - maximum = 999 - minimum = 100 - mode = RANDOM_CHEM_EFFECT_INT - -/decl/random_chem_effect/general_properties/name/on_property_recompute(var/datum/reagent/random/reagent, var/value) - reagent.name = "[initial(reagent.name)]-[value]" - -/decl/random_chem_effect/general_properties/color_r - maximum = 255 - mode = RANDOM_CHEM_EFFECT_INT - -/decl/random_chem_effect/general_properties/color_g - maximum = 255 - mode = RANDOM_CHEM_EFFECT_INT - -/decl/random_chem_effect/general_properties/color_b - maximum = 255 - mode = RANDOM_CHEM_EFFECT_INT - -/decl/random_chem_effect/general_properties/color_r/on_property_recompute(var/datum/reagent/random/reagent, var/value) - reagent.color = rgb(\ - reagent.data[/decl/random_chem_effect/general_properties/color_r],\ - reagent.data[/decl/random_chem_effect/general_properties/color_r],\ - reagent.data[/decl/random_chem_effect/general_properties/color_b] - ) - -/decl/random_chem_effect/general_properties/overdose - minimum = REAGENTS_OVERDOSE * 0.2 - maximum = REAGENTS_OVERDOSE * 2 - mode = RANDOM_CHEM_EFFECT_FLOAT - -/decl/random_chem_effect/general_properties/overdose/on_property_recompute(var/datum/reagent/random/reagent, var/value) - reagent.overdose = value - -/decl/random_chem_effect/general_properties/metabolism - minimum = REM * 0.5 - maximum = REM * 3 - mode = RANDOM_CHEM_EFFECT_FLOAT - -/decl/random_chem_effect/general_properties/metabolism/on_property_recompute(var/datum/reagent/random/reagent, var/value) - reagent.metabolism = value - -/decl/random_chem_effect/general_properties/chilling_point - minimum = TCMB - var/generic_minimum = T0C - 80 // Will be used unless the temperature we're gunning for is too cold - maximum = T0C - 10 - mode = RANDOM_CHEM_EFFECT_FLOAT - -/decl/random_chem_effect/general_properties/chilling_point/get_random_value(temperature) - var/max = max(min(maximum, temperature - 20), minimum) // Use given max unless that's above the given temp - margin - var/min = max(min(generic_minimum, max - 20), minimum) // Use the generic min as min unless that's above the max - margin - return rand() * (max - min) + min - -/decl/random_chem_effect/general_properties/chilling_point/prototype_process(var/datum/reagent/random/prototype, temperature = T20C) - prototype.data[type] = get_random_value(temperature) - -/decl/random_chem_effect/general_properties/chilling_point/on_property_recompute(var/datum/reagent/random/reagent, var/value) - reagent.chilling_point = value - -/decl/random_chem_effect/general_properties/heating_point - minimum = T0C + 60 - var/generic_maximum = T0C + 180 - maximum = T0C + 500 - mode = RANDOM_CHEM_EFFECT_FLOAT - -/decl/random_chem_effect/general_properties/heating_point/get_random_value(temperature) - var/min = min(max(minimum, temperature + 20), maximum) - var/max = min(max(generic_maximum, min + 20), maximum) - return rand() * (max - min) + min - -/decl/random_chem_effect/general_properties/heating_point/prototype_process(var/datum/reagent/random/prototype, temperature = T20C) - prototype.data[type] = get_random_value(temperature) - -/decl/random_chem_effect/general_properties/heating_point/on_property_recompute(var/datum/reagent/random/reagent, var/value) - reagent.heating_point = value - -// Only some random properties are picked. - -/decl/random_chem_effect/random_properties - var/chem_effect_define //If it corresponds to a CE_WHATEVER define, place here and it will do generic affect blood based on it - var/list/distillation_inhibitor_cache // Format: list(type = list(reagent types)) - var/list/cooling_enhancer_cache - var/list/reaction_rate_cache - var/number_of_reaction_modifiers = 3 - -/decl/random_chem_effect/random_properties/proc/set_caches(var/datum/reagent/random/prototype, var/list/whitelist) - LAZYSET(reaction_rate_cache, prototype.type, 1.5 * rand() + 0.5) - for(var/i = 1, i <= number_of_reaction_modifiers, i++) - if(length(whitelist)) - LAZYINITLIST(distillation_inhibitor_cache) - LAZYADD(distillation_inhibitor_cache[prototype.type], pick_n_take(whitelist)) - if(length(whitelist)) - LAZYINITLIST(cooling_enhancer_cache) - LAZYADD(cooling_enhancer_cache[prototype.type], pick_n_take(whitelist)) - -/decl/random_chem_effect/random_properties/distillation_act(var/datum/reagent/random/reagent, var/datum/reagents/reagents, var/value) - var/list/inhibitors = distillation_inhibitor_cache[reagent.type] - if(reagents.has_any_reagent(inhibitors)) - return - return purify(reagent, reagents, value) - -/decl/random_chem_effect/random_properties/cooling_act(var/datum/reagent/random/reagent, var/datum/reagents/reagents, var/value) - var/list/enhancers = cooling_enhancer_cache[reagent.type] - if(!reagents.has_any_reagent(enhancers)) - return - return purify(reagent, reagents, value) - -/decl/random_chem_effect/random_properties/proc/purify(var/datum/reagent/random/reagent, var/datum/reagents/reagents, var/value) - var/target = reagents.has_reagent(/datum/reagent/toxin/phoron) ? minimum : maximum - if(target == value) - return - var/rate = reaction_rate_cache[reagent.type] - switch(mode) - if(RANDOM_CHEM_EFFECT_TRUE) - if(prob(10 * rate)) - return target - return value // this will keep us reacting - if(RANDOM_CHEM_EFFECT_INT) - var/amount = (target - value) * rate * 0.1 - if(abs(amount) >= 1) - return round(amount + value) - else if(prob(100 * abs(amount))) - return value + sign(amount) - return value - if(RANDOM_CHEM_EFFECT_FLOAT) - var/resolution = (maximum - minimum)/100 - var/new_val = value + (target - value) * rate * 0.1 - var/round_dir = new_val > value ? -1 : 1 // Rounds up if going up, to nearest percent of max - min - new_val = round(round_dir * new_val / resolution) * round_dir * resolution // makes this finish in finite time to save processing power. - return new_val - -/decl/random_chem_effect/random_properties/cooling_act(var/datum/reagent/random/reagent, var/datum/reagents/reagents) - -/decl/random_chem_effect/random_properties/affect_blood(var/mob/living/carbon/M, var/alien, var/removed, var/value) - if(chem_effect_define && alien != IS_DIONA) // screw diona - M.add_chemical_effect(chem_effect_define, value) - -/decl/random_chem_effect/random_properties/get_interactions(var/datum/reagent/random/reagent, var/sci_skill, var/chem_skill) - if(chem_skill < SKILL_EXPERT) - return - . = list("
              ") - if(sci_skill > SKILL_ADEPT) - . += "For [desc]:
              " - var/list/interactions = list() - if(chem_skill == SKILL_PROF) - . += "Heating: " - for(var/interaction in distillation_inhibitor_cache[reagent.type]) - var/datum/reagent/R = interaction - interactions += initial(R.name) - if(chem_skill == SKILL_PROF) - . += english_list(interactions) - interactions.Cut() - . += ". Cooling: " - for(var/interaction in cooling_enhancer_cache[reagent.type]) - var/datum/reagent/R = interaction - interactions += initial(R.name) - if(chem_skill <= SKILL_PROF) - shuffle(interactions) - . += english_list(interactions) - . += "." - -/decl/random_chem_effect/random_properties/ce_stable - chem_effect_define = CE_STABLE - beneficial = 1 - desc = "stabilization" - -/decl/random_chem_effect/random_properties/ce_antibiotic - chem_effect_define = CE_ANTIBIOTIC - beneficial = 1 - desc = "antibiotic power" - -/decl/random_chem_effect/random_properties/ce_bloodrestore - chem_effect_define = CE_BLOODRESTORE - beneficial = 1 - minimum = 1 - maximum = 12 - mode = RANDOM_CHEM_EFFECT_INT - desc = "blood restoration" - -/decl/random_chem_effect/random_properties/ce_painkiller - chem_effect_define = CE_PAINKILLER - beneficial = 1 - maximum = 100 - mode = RANDOM_CHEM_EFFECT_INT - desc = "pain suppression" - -/decl/random_chem_effect/random_properties/ce_alcohol - chem_effect_define = CE_ALCOHOL - beneficial = -1 - desc = "intoxication" - -/decl/random_chem_effect/random_properties/ce_alcotoxic - chem_effect_define = CE_ALCOHOL_TOXIC - beneficial = -1 - maximum = 8 - mode = RANDOM_CHEM_EFFECT_INT - desc = "liver damage" - -/decl/random_chem_effect/random_properties/ce_gofast - chem_effect_define = CE_SPEEDBOOST - beneficial = 1 - maximum = 2 - mode = RANDOM_CHEM_EFFECT_INT - desc = "faster movement" - -/decl/random_chem_effect/random_properties/ce_goslow - chem_effect_define = CE_SLOWDOWN - beneficial = -1 - maximum = 20 - mode = RANDOM_CHEM_EFFECT_INT - desc = "slower movement" - -/decl/random_chem_effect/random_properties/ce_xcardic - chem_effect_define = CE_PULSE - beneficial = -1 - minimum = -2 - maximum = 4 - mode = RANDOM_CHEM_EFFECT_INT - desc = "pulse destabilization" - -/decl/random_chem_effect/random_properties/ce_heartstop - chem_effect_define = CE_NOPULSE - beneficial = -1 - desc = "cardiac arrest" - -/decl/random_chem_effect/random_properties/ce_antitox - chem_effect_define = CE_ANTITOX - beneficial = 1 - desc = "poison removal" - -/decl/random_chem_effect/random_properties/ce_oxygen - chem_effect_define = CE_OXYGENATED - beneficial = 1 - maximum = 2 - mode = RANDOM_CHEM_EFFECT_INT - desc = "blood oxygenation" - -/decl/random_chem_effect/random_properties/ce_brainfix - chem_effect_define = CE_BRAIN_REGEN - beneficial = 1 - desc = "neurological repair" - -/decl/random_chem_effect/random_properties/ce_antiviral - chem_effect_define = CE_ANTIVIRAL - beneficial = 1 - maximum = VIRUS_EXOTIC - mode = RANDOM_CHEM_EFFECT_INT - desc = "antiviral action" - -/decl/random_chem_effect/random_properties/ce_toxins - chem_effect_define = CE_TOXIN - beneficial = -1 - desc = "general toxicity" - -/decl/random_chem_effect/random_properties/ce_breathloss - chem_effect_define = CE_BREATHLOSS - beneficial = -1 - maximum = 0.6 - mode = RANDOM_CHEM_EFFECT_FLOAT - desc = "respiratory depression" - -/decl/random_chem_effect/random_properties/ce_mindbending - chem_effect_define = CE_MIND - beneficial = -1 - minimum = -2 - maximum = 2 - mode = RANDOM_CHEM_EFFECT_INT - desc = "phychiatric effects" - -/decl/random_chem_effect/random_properties/ce_cryogenic - chem_effect_define = CE_CRYO - beneficial = 1 - desc = "hypothermia protection" - -/decl/random_chem_effect/random_properties/ce_blockage - chem_effect_define = CE_BLOCKAGE - beneficial = -1 - maximum = 0.5 - mode = RANDOM_CHEM_EFFECT_FLOAT - desc = "blood flow obstruction" - -/decl/random_chem_effect/random_properties/ce_squeaky - chem_effect_define = CE_SQUEAKY - beneficial = -1 - desc = "abnormal speech patterns" - -/decl/random_chem_effect/random_properties/tox_damage - beneficial = -1 - maximum = 100 - mode = RANDOM_CHEM_EFFECT_INT - desc = "acute toxicity" - -/decl/random_chem_effect/random_properties/heal_brute/affect_blood(var/mob/living/carbon/M, var/alien, var/removed, var/value) - if(alien != IS_DIONA) - M.adjustToxLoss(value * removed) - -/decl/random_chem_effect/random_properties/heal_brute - beneficial = 1 - maximum = 10 - desc = "tissue repair" - -/decl/random_chem_effect/random_properties/heal_brute/affect_blood(var/mob/living/carbon/M, var/alien, var/removed, var/value) - if(alien != IS_DIONA) - M.heal_organ_damage(removed * value, 0) - -/decl/random_chem_effect/random_properties/heal_burns - beneficial = 1 - maximum = 10 - desc = "burn repair" - -/decl/random_chem_effect/random_properties/heal_brute/affect_blood(var/mob/living/carbon/M, var/alien, var/removed, var/value) - if(alien != IS_DIONA) - M.heal_organ_damage(0, removed * value) - -#undef RANDOM_CHEM_EFFECT_TRUE -#undef RANDOM_CHEM_EFFECT_INT -#undef RANDOM_CHEM_EFFECT_FLOAT \ No newline at end of file diff --git a/code/modules/reagents/Chemistry-Reagents/gas_properties.dm b/code/modules/reagents/Chemistry-Reagents/gas_properties.dm deleted file mode 100644 index 6fd6dac874ae6..0000000000000 --- a/code/modules/reagents/Chemistry-Reagents/gas_properties.dm +++ /dev/null @@ -1,48 +0,0 @@ -/** - Non-exhaustively setting the gas properties of various reagents. - & are often helpful. - gas_molar_mass: kg/mol - gas_specific_heat: J/(mol*K) -*/ - - -/datum/reagent/water/gas_molar_mass = 0.018 -/datum/reagent/water/gas_specific_heat = 75.2 - - -/datum/reagent/fuel/gas_flags = XGM_GAS_FUEL -/datum/reagent/fuel/gas_molar_mass = 0.15 // rough for kerosene -/datum/reagent/fuel/gas_specific_heat = 200 - - -/datum/reagent/ethanol/New() - ..() - if (strength <= 15) // drinks are hell - gas_flags = XGM_GAS_FUEL - gas_molar_mass = 0.046 - gas_specific_heat = 118.4 - - -/datum/reagent/acetone/gas_flags = XGM_GAS_FUEL -/datum/reagent/acetone/gas_molar_mass = 0.058 -/datum/reagent/acetone/gas_specific_heat = 124.5 - - -/datum/reagent/hydrazine/gas_flags = XGM_GAS_FUEL -/datum/reagent/hydrazine/gas_molar_mass = 0.032 -/datum/reagent/hydrazine/gas_specific_heat = 121.52 - - -/datum/reagent/napalm/gas_flags = XGM_GAS_FUEL -/datum/reagent/napalm/gas_molar_mass = 0.15 -/datum/reagent/napalm/gas_specific_heat = 180 - - -/datum/reagent/oil/gas_flags = XGM_GAS_FUEL -/datum/reagent/oil/gas_molar_mass = 0.49 -/datum/reagent/oil/gas_specific_heat = 190 - - -/datum/reagent/toxin/phoron/gas_flags = XGM_GAS_FUEL -/datum/reagent/toxin/phoron/gas_molar_mass = 0.405 -/datum/reagent/toxin/phoron/gas_specific_heat = 200 diff --git a/code/modules/reagents/Chemistry-Recipes.dm b/code/modules/reagents/Chemistry-Recipes.dm deleted file mode 100644 index 9aec9fbd6d587..0000000000000 --- a/code/modules/reagents/Chemistry-Recipes.dm +++ /dev/null @@ -1,3167 +0,0 @@ -/datum/chemical_reaction - var/name = null - var/result = null - var/list/required_reagents = list() - var/list/catalysts = list() - var/list/inhibitors = list() - var/result_amount = 0 - var/hidden_from_codex - var/maximum_temperature = INFINITY - var/minimum_temperature = 0 - var/thermal_product - var/mix_message = "The solution begins to bubble." - var/reaction_sound = 'sound/effects/bubbles.ogg' - var/log_is_important = 0 // If this reaction should be considered important for logging. Important recipes message admins when mixed, non-important ones just log to file. - -/datum/chemical_reaction/proc/can_happen(var/datum/reagents/holder) - //check that all the required reagents are present - if(!holder.has_all_reagents(required_reagents)) - return 0 - - //check that all the required catalysts are present in the required amount - if(!holder.has_all_reagents(catalysts)) - return 0 - - //check that none of the inhibitors are present in the required amount - if(holder.has_any_reagent(inhibitors)) - return 0 - - var/temperature = holder.my_atom ? holder.my_atom.temperature : T20C - if(temperature < minimum_temperature || temperature > maximum_temperature) - return 0 - - return 1 - -/datum/chemical_reaction/proc/on_reaction(var/datum/reagents/holder, var/created_volume, var/reaction_flags) - if(thermal_product && ATOM_IS_TEMPERATURE_SENSITIVE(holder.my_atom)) - ADJUST_ATOM_TEMPERATURE(holder.my_atom, thermal_product) - -// This proc returns a list of all reagents it wants to use; if the holder has several reactions that use the same reagent, it will split the reagent evenly between them -/datum/chemical_reaction/proc/get_used_reagents() - . = list() - for(var/reagent in required_reagents) - . += reagent - -/datum/chemical_reaction/proc/get_reaction_flags(var/datum/reagents/holder) - return 0 - -/datum/chemical_reaction/proc/process(var/datum/reagents/holder, var/limit) - var/data = send_data(holder) - - var/reaction_volume = holder.maximum_volume - for(var/reactant in required_reagents) - var/A = holder.get_reagent_amount(reactant) / required_reagents[reactant] / limit // How much of this reagent we are allowed to use - if(reaction_volume > A) - reaction_volume = A - - var/reaction_flags = get_reaction_flags(holder) - - for(var/reactant in required_reagents) - holder.remove_reagent(reactant, reaction_volume * required_reagents[reactant], safety = 1) - - //add the product - var/amt_produced = result_amount * reaction_volume - if(result) - holder.add_reagent(result, amt_produced, data, safety = 1) - - on_reaction(holder, amt_produced, reaction_flags) - -//called after processing reactions, if they occurred -/datum/chemical_reaction/proc/post_reaction(var/datum/reagents/holder) - var/atom/container = holder.my_atom - if(mix_message && container && !ismob(container)) - container.visible_message("[icon2html(container, viewers(get_turf(container)))] [mix_message]") - playsound(container, reaction_sound, 80, 1) - -//obtains any special data that will be provided to the reaction products -//this is called just before reactants are removed. -/datum/chemical_reaction/proc/send_data(var/datum/reagents/holder, var/reaction_limit) - return null - -/* Common reactions */ -/datum/chemical_reaction/inaprovaline - name = "Inaprovaline" - result = /datum/reagent/inaprovaline - required_reagents = list(/datum/reagent/acetone = 1, /datum/reagent/carbon = 1, /datum/reagent/sugar = 1) - result_amount = 3 - -/datum/chemical_reaction/dylovene - name = "Dylovene" - result = /datum/reagent/dylovene - required_reagents = list(/datum/reagent/silicon = 1, /datum/reagent/potassium = 1, /datum/reagent/ammonia = 1) - result_amount = 3 - -/datum/chemical_reaction/tramadol - name = "Tramadol" - result = /datum/reagent/tramadol - required_reagents = list(/datum/reagent/inaprovaline = 1, /datum/reagent/ethanol = 1, /datum/reagent/acetone = 1) - result_amount = 3 - -/datum/chemical_reaction/paracetamol - name = "Paracetamol" - result = /datum/reagent/paracetamol - required_reagents = list(/datum/reagent/tramadol = 1, /datum/reagent/sugar = 1, /datum/reagent/water = 1) - result_amount = 3 - -/datum/chemical_reaction/oxycodone - name = "Oxycodone" - result = /datum/reagent/tramadol/oxycodone - required_reagents = list(/datum/reagent/ethanol = 1, /datum/reagent/tramadol = 1) - catalysts = list(/datum/reagent/toxin/phoron = 5) - result_amount = 1 - -/datum/chemical_reaction/sterilizine - name = "Sterilizine" - result = /datum/reagent/sterilizine - required_reagents = list(/datum/reagent/ethanol = 1, /datum/reagent/dylovene = 1, /datum/reagent/acid/hydrochloric = 1) - result_amount = 3 - -/datum/chemical_reaction/mutagen - name = "Unstable mutagen" - result = /datum/reagent/mutagen - required_reagents = list(/datum/reagent/radium = 1, /datum/reagent/phosphorus = 1, /datum/reagent/acid/hydrochloric = 1) - result_amount = 3 - -/datum/chemical_reaction/thermite - name = "Thermite" - result = /datum/reagent/thermite - required_reagents = list(/datum/reagent/aluminium = 1, /datum/reagent/iron = 1, /datum/reagent/acetone = 1) - result_amount = 3 - mix_message = "The solution thickens into a coarse metallic paste." - -/datum/chemical_reaction/space_drugs - name = "Space Drugs" - result = /datum/reagent/space_drugs - required_reagents = list(/datum/reagent/mercury = 1, /datum/reagent/sugar = 1, /datum/reagent/lithium = 1) - result_amount = 3 - minimum_temperature = 50 CELSIUS - maximum_temperature = (50 CELSIUS) + 100 - -/datum/chemical_reaction/tilt - name = "Tilt" - result = /datum/reagent/tilt - required_reagents = list( - /datum/reagent/antidexafen = 1, - /datum/reagent/drink/space_up = 2 - ) - result_amount = 3 - -/datum/chemical_reaction/pacid - name = "Polytrinic acid" - result = /datum/reagent/acid/polyacid - required_reagents = list(/datum/reagent/acid = 1, /datum/reagent/acid/hydrochloric = 1, /datum/reagent/potassium = 1) - result_amount = 3 - -/datum/chemical_reaction/synaptizine - name = "Synaptizine" - result = /datum/reagent/synaptizine - required_reagents = list(/datum/reagent/sugar = 1, /datum/reagent/lithium = 1, /datum/reagent/water = 1) - result_amount = 3 - minimum_temperature = 30 CELSIUS - maximum_temperature = (30 CELSIUS) + 100 - -/datum/chemical_reaction/hyronalin - name = "Hyronalin" - result = /datum/reagent/hyronalin - required_reagents = list(/datum/reagent/radium = 1, /datum/reagent/dylovene = 1) - result_amount = 2 - -/datum/chemical_reaction/arithrazine - name = "Arithrazine" - result = /datum/reagent/arithrazine - required_reagents = list(/datum/reagent/hyronalin = 1, /datum/reagent/hydrazine = 1) - result_amount = 2 - -/datum/chemical_reaction/impedrezene - name = "Impedrezene" - result = /datum/reagent/impedrezene - required_reagents = list(/datum/reagent/mercury = 1, /datum/reagent/acetone = 1, /datum/reagent/sugar = 1) - result_amount = 2 - -/datum/chemical_reaction/kelotane - name = "Kelotane" - result = /datum/reagent/kelotane - required_reagents = list(/datum/reagent/silicon = 1, /datum/reagent/carbon = 1) - result_amount = 2 - log_is_important = 1 - -/datum/chemical_reaction/peridaxon - name = "Peridaxon" - result = /datum/reagent/peridaxon - required_reagents = list(/datum/reagent/bicaridine = 2, /datum/reagent/clonexadone = 2) - catalysts = list(/datum/reagent/toxin/phoron = 5) - result_amount = 2 - -/datum/chemical_reaction/leporazine - name = "Leporazine" - result = /datum/reagent/leporazine - required_reagents = list(/datum/reagent/silicon = 1, /datum/reagent/copper = 1) - catalysts = list(/datum/reagent/toxin/phoron = 5) - result_amount = 2 - -/datum/chemical_reaction/cryptobiolin - name = "Cryptobiolin" - result = /datum/reagent/cryptobiolin - required_reagents = list(/datum/reagent/potassium = 1, /datum/reagent/acetone = 1, /datum/reagent/sugar = 1) - minimum_temperature = 30 CELSIUS - maximum_temperature = 60 CELSIUS - result_amount = 3 - -/datum/chemical_reaction/tricordrazine - name = "Tricordrazine" - result = /datum/reagent/tricordrazine - required_reagents = list(/datum/reagent/inaprovaline = 1, /datum/reagent/dylovene = 1) - result_amount = 2 - -/datum/chemical_reaction/alkysine - name = "Alkysine" - result = /datum/reagent/alkysine - required_reagents = list(/datum/reagent/acid/hydrochloric = 1, /datum/reagent/ammonia = 1, /datum/reagent/dylovene = 1) - result_amount = 2 - -/datum/chemical_reaction/dexalin - name = "Dexalin" - result = /datum/reagent/dexalin - required_reagents = list(/datum/reagent/acetone = 2, /datum/reagent/toxin/phoron = 0.1) - inhibitors = list(/datum/reagent/water = 1) // Messes with cryox - result_amount = 1 - -/datum/chemical_reaction/dermaline - name = "Dermaline" - result = /datum/reagent/dermaline - required_reagents = list(/datum/reagent/acetone = 1, /datum/reagent/phosphorus = 1, /datum/reagent/kelotane = 1) - result_amount = 3 - minimum_temperature = (-50 CELSIUS) - 100 - maximum_temperature = -50 CELSIUS - -/datum/chemical_reaction/dexalinp - name = "Dexalin Plus" - result = /datum/reagent/dexalinp - required_reagents = list(/datum/reagent/dexalin = 1, /datum/reagent/carbon = 1, /datum/reagent/iron = 1) - result_amount = 3 - -/datum/chemical_reaction/bicaridine - name = "Bicaridine" - result = /datum/reagent/bicaridine - required_reagents = list(/datum/reagent/inaprovaline = 1, /datum/reagent/carbon = 1) - inhibitors = list(/datum/reagent/sugar = 1) // Messes up with inaprovaline - result_amount = 2 - -/datum/chemical_reaction/hyperzine - name = "Hyperzine" - result = /datum/reagent/hyperzine - required_reagents = list(/datum/reagent/sugar = 1, /datum/reagent/phosphorus = 1, /datum/reagent/sulfur = 1) - result_amount = 3 - -/datum/chemical_reaction/ryetalyn - name = "Ryetalyn" - result = /datum/reagent/ryetalyn - required_reagents = list(/datum/reagent/arithrazine = 1, /datum/reagent/carbon = 1) - result_amount = 2 - -/datum/chemical_reaction/cryoxadone - name = "Cryoxadone" - result = /datum/reagent/cryoxadone - required_reagents = list(/datum/reagent/dexalin = 1, /datum/reagent/drink/ice = 1, /datum/reagent/acetone = 1) - result_amount = 3 - minimum_temperature = (-25 CELSIUS) - 100 - maximum_temperature = -25 CELSIUS - mix_message = "The solution becomes sludge-like." - -/datum/chemical_reaction/nanitefluid - name = "Nanite Fluid" - result = /datum/reagent/nanitefluid - required_reagents = list(/datum/reagent/cryoxadone = 1, /datum/reagent/aluminium = 1, /datum/reagent/iron = 1) - catalysts = list(/datum/reagent/toxin/phoron = 5) - result_amount = 3 - minimum_temperature = (-25 CELSIUS) - 100 - maximum_temperature = -25 CELSIUS - mix_message = "The solution becomes a metallic slime." - -/datum/chemical_reaction/venaxilin - name = "Venaxilin" - result = /datum/reagent/dylovene/venaxilin - required_reagents = list(/datum/reagent/dylovene = 1, /datum/reagent/spaceacillin = 1, /datum/reagent/toxin/venom = 1) - result_amount = 1 - minimum_temperature = 50 CELSIUS - maximum_temperature = 100 CELSIUS - mix_message = "The solution steams and becomes cloudy." - - -/datum/chemical_reaction/clonexadone - name = "Clonexadone" - result = /datum/reagent/clonexadone - required_reagents = list(/datum/reagent/cryoxadone = 1, /datum/reagent/sodium = 1) - result_amount = 2 - minimum_temperature = -100 CELSIUS - maximum_temperature = -75 CELSIUS - mix_message = "The solution thickens into translucent slime." - -/datum/chemical_reaction/spaceacillin - name = "Spaceacillin" - result = /datum/reagent/spaceacillin - required_reagents = list(/datum/reagent/cryptobiolin = 1, /datum/reagent/inaprovaline = 1) - result_amount = 2 - -/datum/chemical_reaction/imidazoline - name = "Imidazoline" - result = /datum/reagent/imidazoline - required_reagents = list(/datum/reagent/carbon = 1, /datum/reagent/hydrazine = 1, /datum/reagent/dylovene = 1) - result_amount = 2 - -/datum/chemical_reaction/ethylredoxrazine - name = "Ethylredoxrazine" - result = /datum/reagent/ethylredoxrazine - required_reagents = list(/datum/reagent/acetone = 1, /datum/reagent/dylovene = 1, /datum/reagent/carbon = 1) - result_amount = 3 - -/datum/chemical_reaction/soporific - name = "Soporific" - result = /datum/reagent/soporific - required_reagents = list(/datum/reagent/chloralhydrate = 1, /datum/reagent/sugar = 4) - inhibitors = list(/datum/reagent/phosphorus) // Messes with the smoke - result_amount = 5 - -/datum/chemical_reaction/chloralhydrate - name = "Chloral Hydrate" - result = /datum/reagent/chloralhydrate - required_reagents = list(/datum/reagent/ethanol = 1, /datum/reagent/acid/hydrochloric = 3, /datum/reagent/water = 1) - result_amount = 1 - -/datum/chemical_reaction/vecuronium_bromide - name = "Vecuronium Bromide" - result = /datum/reagent/vecuronium_bromide - required_reagents = list(/datum/reagent/ethanol = 1, /datum/reagent/mercury = 2, /datum/reagent/hydrazine = 2) - result_amount = 1 - -/datum/chemical_reaction/potassium_chloride - name = "Potassium Chloride" - result = /datum/reagent/toxin/potassium_chloride - required_reagents = list(/datum/reagent/sodiumchloride = 1, /datum/reagent/potassium = 1) - minimum_temperature = 60 CELSIUS - maximum_temperature = (60 CELSIUS) + 100 - result_amount = 2 - -/datum/chemical_reaction/potassium_chlorophoride - name = "Potassium Chlorophoride" - result = /datum/reagent/toxin/potassium_chlorophoride - required_reagents = list(/datum/reagent/toxin/potassium_chloride = 1, /datum/reagent/toxin/phoron = 1, /datum/reagent/chloralhydrate = 1) - result_amount = 4 - -/datum/chemical_reaction/zombiepowder - name = "Zombie Powder" - result = /datum/reagent/toxin/zombiepowder - required_reagents = list(/datum/reagent/toxin/carpotoxin = 5, /datum/reagent/soporific = 5, /datum/reagent/copper = 5) - result_amount = 2 - minimum_temperature = 90 CELSIUS - maximum_temperature = 99 CELSIUS - mix_message = "The solution boils off to form a fine powder." - -/datum/chemical_reaction/mindbreaker - name = "Mindbreaker Toxin" - result = /datum/reagent/mindbreaker - required_reagents = list(/datum/reagent/silicon = 1, /datum/reagent/hydrazine = 1, /datum/reagent/dylovene = 1) - result_amount = 3 - mix_message = "The solution takes on an iridescent sheen." - minimum_temperature = 75 CELSIUS - maximum_temperature = (75 CELSIUS) + 25 - -/datum/chemical_reaction/lipozine - name = "Lipozine" - result = /datum/reagent/lipozine - required_reagents = list(/datum/reagent/sodiumchloride = 1, /datum/reagent/ethanol = 1, /datum/reagent/radium = 1) - result_amount = 3 - -/datum/chemical_reaction/surfactant - name = "Azosurfactant" - result = /datum/reagent/surfactant - required_reagents = list(/datum/reagent/hydrazine = 2, /datum/reagent/carbon = 2, /datum/reagent/acid = 1) - result_amount = 5 - mix_message = "The solution begins to foam gently." - -/datum/chemical_reaction/diethylamine - name = "Diethylamine" - result = /datum/reagent/diethylamine - required_reagents = list (/datum/reagent/ammonia = 1, /datum/reagent/ethanol = 1) - result_amount = 2 - -/datum/chemical_reaction/space_cleaner - name = "Space cleaner" - result = /datum/reagent/space_cleaner - required_reagents = list(/datum/reagent/ammonia = 1, /datum/reagent/water = 1) - result_amount = 2 - -/datum/chemical_reaction/plantbgone - name = "Plant-B-Gone" - result = /datum/reagent/toxin/plantbgone - required_reagents = list(/datum/reagent/toxin = 1, /datum/reagent/water = 4) - result_amount = 5 - -/datum/chemical_reaction/foaming_agent - name = "Foaming Agent" - result = /datum/reagent/foaming_agent - required_reagents = list(/datum/reagent/lithium = 1, /datum/reagent/hydrazine = 1) - result_amount = 1 - mix_message = "The solution begins to foam vigorously." - -/datum/chemical_reaction/glycerol - name = "Glycerol" - result = /datum/reagent/glycerol - required_reagents = list(/datum/reagent/nutriment/cornoil = 3, /datum/reagent/acid = 1) - result_amount = 1 - -/datum/chemical_reaction/sodiumchloride - name = "Sodium Chloride" - result = /datum/reagent/sodiumchloride - required_reagents = list(/datum/reagent/sodium = 1, /datum/reagent/acid/hydrochloric = 1) - result_amount = 2 - -/datum/chemical_reaction/condensedcapsaicin - name = "Condensed Capsaicin" - result = /datum/reagent/capsaicin/condensed - required_reagents = list(/datum/reagent/capsaicin = 2) - catalysts = list(/datum/reagent/toxin/phoron = 5) - result_amount = 1 - -/datum/chemical_reaction/coolant - name = "Coolant" - result = /datum/reagent/coolant - required_reagents = list(/datum/reagent/tungsten = 1, /datum/reagent/acetone = 1, /datum/reagent/water = 1) - result_amount = 3 - log_is_important = 1 - mix_message = "The solution becomes thick and slightly slimy." - -/datum/chemical_reaction/rezadone - name = "Rezadone" - result = /datum/reagent/rezadone - required_reagents = list(/datum/reagent/toxin/carpotoxin = 1, /datum/reagent/cryptobiolin = 1, /datum/reagent/copper = 1) - result_amount = 3 - -/datum/chemical_reaction/lexorin - name = "Lexorin" - result = /datum/reagent/lexorin - required_reagents = list(/datum/reagent/toxin/phoron = 1, /datum/reagent/hydrazine = 1, /datum/reagent/ammonia = 1) - result_amount = 3 - -/datum/chemical_reaction/methylphenidate - name = "Methylphenidate" - result = /datum/reagent/methylphenidate - required_reagents = list(/datum/reagent/mindbreaker = 1, /datum/reagent/lithium = 1) - result_amount = 3 - -/datum/chemical_reaction/citalopram - name = "Citalopram" - result = /datum/reagent/citalopram - required_reagents = list(/datum/reagent/mindbreaker = 1, /datum/reagent/carbon = 1) - result_amount = 3 - -/datum/chemical_reaction/paroxetine - name = "Paroxetine" - result = /datum/reagent/paroxetine - required_reagents = list(/datum/reagent/mindbreaker = 1, /datum/reagent/acetone = 1, /datum/reagent/inaprovaline = 1) - result_amount = 3 - -/datum/chemical_reaction/hair_remover - name = "Hair Remover" - result = /datum/reagent/toxin/hair_remover - required_reagents = list(/datum/reagent/radium = 1, /datum/reagent/potassium = 1, /datum/reagent/acid/hydrochloric = 1) - result_amount = 3 - mix_message = "The solution thins out and emits an acrid smell." - -/datum/chemical_reaction/noexcutite - name = "Noexcutite" - result = /datum/reagent/noexcutite - required_reagents = list(/datum/reagent/tramadol/oxycodone = 1, /datum/reagent/dylovene = 1) - result_amount = 2 - -/datum/chemical_reaction/methyl_bromide - name = "Methyl Bromide" - required_reagents = list(/datum/reagent/toxin/bromide = 1, /datum/reagent/ethanol = 1, /datum/reagent/hydrazine = 1) - result_amount = 3 - result = /datum/reagent/toxin/methyl_bromide - mix_message = "The solution begins to bubble, emitting a dark vapor." - -/datum/chemical_reaction/adrenaline - name = "Adrenaline" - result = /datum/reagent/adrenaline - required_reagents = list(/datum/reagent/inaprovaline = 1, /datum/reagent/hyperzine = 1, /datum/reagent/dexalinp = 1) - result_amount = 3 - -/* Solidification */ -/datum/chemical_reaction/phoronsolidification - name = "Solid Phoron" - result = null - required_reagents = list(/datum/reagent/iron = 5, /datum/reagent/toxin/phoron = 20) - result_amount = 1 - minimum_temperature = (-80 CELSIUS) - 100 - maximum_temperature = -80 CELSIUS - mix_message = "The solution hardens and begins to crystallize." - -/datum/chemical_reaction/phoronsolidification/on_reaction(var/datum/reagents/holder, var/created_volume, var/reaction_flags) - ..() - new /obj/item/stack/material/phoron(get_turf(holder.my_atom), created_volume) - -/datum/chemical_reaction/plastication - name = "Plastic" - result = null - required_reagents = list(/datum/reagent/acid/polyacid = 1, /datum/reagent/toxin/plasticide = 2) - result_amount = 1 - mix_message = "The solution solidifies into a grey-white mass." - -/datum/chemical_reaction/plastication/on_reaction(var/datum/reagents/holder, var/created_volume, var/reaction_flags) - ..() - new /obj/item/stack/material/plastic(get_turf(holder.my_atom), created_volume) - -/* Grenade reactions */ - -/datum/chemical_reaction/explosion_potassium - name = "Explosion" - result = null - required_reagents = list(/datum/reagent/water = 1, /datum/reagent/potassium = 1) - result_amount = 2 - mix_message = null - mix_message = "The solution bubbles vigorously!" - -/datum/chemical_reaction/explosion_potassium/on_reaction(var/datum/reagents/holder, var/created_volume, var/reaction_flags) - ..() - var/datum/effect/effect/system/reagents_explosion/e = new() - e.set_up(round (created_volume/10, 1), holder.my_atom, 0, 0) - if(isliving(holder.my_atom)) - e.amount *= 0.5 - var/mob/living/L = holder.my_atom - if(L.stat != DEAD) - e.amount *= 0.5 - e.start() - holder.clear_reagents() - -/datum/chemical_reaction/flash_powder - name = "Flash powder" - result = null - required_reagents = list(/datum/reagent/aluminium = 1, /datum/reagent/potassium = 1, /datum/reagent/sulfur = 1 ) - result_amount = 3 - mix_message = "The solution bubbles vigorously!" - -/datum/chemical_reaction/flash_powder/on_reaction(var/datum/reagents/holder, var/created_volume, var/reaction_flags) - ..() - var/location = get_turf(holder.my_atom) - var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread - s.set_up(2, 1, location) - s.start() - for(var/mob/living/carbon/M in viewers(world.view, location)) - switch(get_dist(M, location)) - if(0 to 1) - if (M.eyecheck() < FLASH_PROTECTION_MODERATE) - M.flash_eyes(2) - M.weakened = min(10, (created_volume / 20)) - M.confused = min(20, (created_volume / 5)) - M.eye_blurry = min(40, (created_volume / 5)) - else - M.stunned = min(10, (created_volume / 30)) - M.confused = min(20, (created_volume / 10)) - M.eye_blurry = min(40, (created_volume / 10)) - - if(2 to 4) - if (M.eyecheck() < FLASH_PROTECTION_MODERATE) - M.flash_eyes(2) - M.stunned = min(5, (created_volume / 30)) - M.confused = min(10, (created_volume / 10)) - M.eye_blurry = min(20, (created_volume / 10)) - else - M.stunned = min(5, (created_volume / 60)) - M.confused = min(10, (created_volume / 20)) - M.eye_blurry = min(20, (created_volume / 20)) - playsound(location, 'sound/effects/bang.ogg', 50, 1, 30) - -/datum/chemical_reaction/emp_pulse - name = "EMP Pulse" - result = null - required_reagents = list(/datum/reagent/uranium = 1, /datum/reagent/iron = 1) // Yes, laugh, it's the best recipe I could think of that makes a little bit of sense - result_amount = 2 - mix_message = "The solution bubbles vigorously!" - -/datum/chemical_reaction/emp_pulse/on_reaction(var/datum/reagents/holder, var/created_volume, var/reaction_flags) - ..() - var/location = get_turf(holder.my_atom) - // 100 created volume = 4 heavy range & 7 light range. A few tiles smaller than traitor EMP grandes. - // 200 created volume = 8 heavy range & 14 light range. 4 tiles larger than traitor EMP grenades. - empulse(location, round(created_volume / 24), round(created_volume / 14), 1) - holder.clear_reagents() - -/datum/chemical_reaction/nitroglycerin - name = "Nitroglycerin" - result = /datum/reagent/nitroglycerin - required_reagents = list(/datum/reagent/glycerol = 1, /datum/reagent/acid/polyacid = 1, /datum/reagent/acid = 1) - result_amount = 2 - log_is_important = 1 - -/datum/chemical_reaction/nitroglycerin/on_reaction(var/datum/reagents/holder, var/created_volume, var/reaction_flags) - ..() - var/datum/effect/effect/system/reagents_explosion/e = new() - e.set_up(round (created_volume/2, 1), holder.my_atom, 0, 0) - if(isliving(holder.my_atom)) - e.amount *= 0.5 - var/mob/living/L = holder.my_atom - if(L.stat!=DEAD) - e.amount *= 0.5 - e.start() - holder.clear_reagents() - -/datum/chemical_reaction/napalm - name = "Napalm" - result = /datum/reagent/napalm - required_reagents = list(/datum/reagent/aluminium = 1, /datum/reagent/acid = 1, /datum/reagent/glycerol = 1 ) //because bananas grow on palms and palm oil is used to make napalm. =/= logic - result_amount = 2 - mix_message = "The solution thickens and takes on a slimy sheen." - -/datum/chemical_reaction/napalmb - name = "Napalm B" - result = /datum/reagent/napalm/b - required_reagents = list(/datum/reagent/toxin/plasticide = 1, /datum/reagent/fuel = 1 ) - result_amount = 2 - mix_message = "The solution thickens and takes on a slimy sheen." - -/datum/chemical_reaction/chemsmoke - name = "Chemsmoke" - result = null - required_reagents = list(/datum/reagent/potassium = 1, /datum/reagent/sugar = 1, /datum/reagent/phosphorus = 1) - result_amount = 0.4 - mix_message = "The solution bubbles vigorously!" - -/datum/chemical_reaction/chemsmoke/on_reaction(var/datum/reagents/holder, var/created_volume, var/reaction_flags) - ..() - var/location = get_turf(holder.my_atom) - var/datum/effect/effect/system/smoke_spread/chem/S = new /datum/effect/effect/system/smoke_spread/chem - S.attach(location) - S.set_up(holder, created_volume, 0, location) - playsound(location, 'sound/effects/smoke.ogg', 50, 1, -3) - spawn(0) - S.start() - holder.clear_reagents() - -/datum/chemical_reaction/foam - name = "Foam" - result = null - required_reagents = list(/datum/reagent/surfactant = 1, /datum/reagent/water = 1) - result_amount = 2 - mix_message = "The solution bubbles vigorously!" - -/datum/chemical_reaction/foam/on_reaction(var/datum/reagents/holder, var/created_volume, var/reaction_flags) - ..() - var/location = get_turf(holder.my_atom) - - for(var/mob/M in viewers(5, location)) - to_chat(M, "The solution spews out foam!") - - var/datum/effect/effect/system/foam_spread/s = new() - s.set_up(created_volume, location, holder, 0) - s.start() - holder.clear_reagents() - -/datum/chemical_reaction/metalfoam - name = "Metal Foam" - result = null - required_reagents = list(/datum/reagent/aluminium = 3, /datum/reagent/foaming_agent = 1, /datum/reagent/acid/polyacid = 1) - result_amount = 5 - mix_message = "The solution bubbles vigorously!" - -/datum/chemical_reaction/metalfoam/on_reaction(var/datum/reagents/holder, var/created_volume, var/reaction_flags) - ..() - var/location = get_turf(holder.my_atom) - - for(var/mob/M in viewers(5, location)) - to_chat(M, "The solution spews out a metalic foam!") - - var/datum/effect/effect/system/foam_spread/s = new() - s.set_up(created_volume, location, holder, 1) - s.start() - -/datum/chemical_reaction/ironfoam - name = "Iron Foam" - result = null - required_reagents = list(/datum/reagent/iron = 3, /datum/reagent/foaming_agent = 1, /datum/reagent/acid/polyacid = 1) - result_amount = 5 - mix_message = "The solution bubbles vigorously!" - -/datum/chemical_reaction/ironfoam/on_reaction(var/datum/reagents/holder, var/created_volume, var/reaction_flags) - ..() - var/location = get_turf(holder.my_atom) - - for(var/mob/M in viewers(5, location)) - to_chat(M, "The solution spews out a metalic foam!") - - var/datum/effect/effect/system/foam_spread/s = new() - s.set_up(created_volume, location, holder, 2) - s.start() - -/* Paint */ - -/datum/chemical_reaction/red_paint - name = "Red paint" - result = /datum/reagent/paint - required_reagents = list(/datum/reagent/toxin/plasticide = 1, /datum/reagent/water = 3, /datum/reagent/crayon_dust/red = 1) - result_amount = 5 - mix_message = "The solution thickens and takes on a glossy red sheen." - -/datum/chemical_reaction/red_paint/send_data() - return "#fe191a" - -/datum/chemical_reaction/orange_paint - name = "Orange paint" - result = /datum/reagent/paint - required_reagents = list(/datum/reagent/toxin/plasticide = 1, /datum/reagent/water = 3, /datum/reagent/crayon_dust/orange = 1) - result_amount = 5 - mix_message = "The solution thickens and takes on a glossy orange sheen." - -/datum/chemical_reaction/orange_paint/send_data() - return "#ffbe4f" - -/datum/chemical_reaction/yellow_paint - name = "Yellow paint" - result = /datum/reagent/paint - required_reagents = list(/datum/reagent/toxin/plasticide = 1, /datum/reagent/water = 3, /datum/reagent/crayon_dust/yellow = 1) - result_amount = 5 - mix_message = "The solution thickens and takes on a glossy yellow sheen." - -/datum/chemical_reaction/yellow_paint/send_data() - return "#fdfe7d" - -/datum/chemical_reaction/green_paint - name = "Green paint" - result = /datum/reagent/paint - required_reagents = list(/datum/reagent/toxin/plasticide = 1, /datum/reagent/water = 3, /datum/reagent/crayon_dust/green = 1) - result_amount = 5 - mix_message = "The solution thickens and takes on a glossy green sheen." - -/datum/chemical_reaction/green_paint/send_data() - return "#18a31a" - -/datum/chemical_reaction/blue_paint - name = "Blue paint" - result = /datum/reagent/paint - required_reagents = list(/datum/reagent/toxin/plasticide = 1, /datum/reagent/water = 3, /datum/reagent/crayon_dust/blue = 1) - result_amount = 5 - mix_message = "The solution thickens and takes on a glossy blue sheen." - -/datum/chemical_reaction/blue_paint/send_data() - return "#247cff" - -/datum/chemical_reaction/purple_paint - name = "Purple paint" - result = /datum/reagent/paint - required_reagents = list(/datum/reagent/toxin/plasticide = 1, /datum/reagent/water = 3, /datum/reagent/crayon_dust/purple = 1) - result_amount = 5 - mix_message = "The solution thickens and takes on a glossy purple sheen." - -/datum/chemical_reaction/purple_paint/send_data() - return "#cc0099" - -/datum/chemical_reaction/grey_paint //mime - name = "Grey paint" - result = /datum/reagent/paint - required_reagents = list(/datum/reagent/toxin/plasticide = 1, /datum/reagent/water = 3, /datum/reagent/crayon_dust/grey = 1) - result_amount = 5 - mix_message = "The solution thickens and takes on a glossy grey sheen." - -/datum/chemical_reaction/grey_paint/send_data() - return "#808080" - -/datum/chemical_reaction/brown_paint - name = "Brown paint" - result = /datum/reagent/paint - required_reagents = list(/datum/reagent/toxin/plasticide = 1, /datum/reagent/water = 3, /datum/reagent/crayon_dust/brown = 1) - result_amount = 5 - mix_message = "The solution thickens and takes on a glossy brown sheen." - -/datum/chemical_reaction/brown_paint/send_data() - return "#846f35" - -/datum/chemical_reaction/blood_paint - name = "Blood paint" - result = /datum/reagent/paint - required_reagents = list(/datum/reagent/toxin/plasticide = 1, /datum/reagent/water = 3, /datum/reagent/blood = 2) - result_amount = 5 - mix_message = "The solution thickens and takes on a glossy red sheen." - -/datum/chemical_reaction/blood_paint/send_data(var/datum/reagents/T) - var/t = T.get_data("blood") - if(t && t["blood_colour"]) - return t["blood_colour"] - return "#fe191a" // Probably red - -/datum/chemical_reaction/milk_paint - name = "Milk paint" - result = /datum/reagent/paint - required_reagents = list(/datum/reagent/toxin/plasticide = 1, /datum/reagent/water = 3, /datum/reagent/drink/milk = 5) - result_amount = 5 - mix_message = "The solution thickens and takes on a glossy white sheen." - -/datum/chemical_reaction/milk_paint/send_data() - return "#f0f8ff" - -/datum/chemical_reaction/orange_juice_paint - name = "Orange juice paint" - result = /datum/reagent/paint - required_reagents = list(/datum/reagent/toxin/plasticide = 1, /datum/reagent/water = 3, /datum/reagent/drink/juice/orange = 5) - result_amount = 5 - mix_message = "The solution thickens and takes on a glossy orange sheen." - -/datum/chemical_reaction/orange_juice_paint/send_data() - return "#e78108" - -/datum/chemical_reaction/tomato_juice_paint - name = "Tomato juice paint" - result = /datum/reagent/paint - required_reagents = list(/datum/reagent/toxin/plasticide = 1, /datum/reagent/water = 3, /datum/reagent/drink/juice/tomato = 5) - result_amount = 5 - mix_message = "The solution thickens and takes on a glossy red sheen." - -/datum/chemical_reaction/tomato_juice_paint/send_data() - return "#731008" - -/datum/chemical_reaction/lime_juice_paint - name = "Lime juice paint" - result = /datum/reagent/paint - required_reagents = list(/datum/reagent/toxin/plasticide = 1, /datum/reagent/water = 3, /datum/reagent/drink/juice/lime = 5) - result_amount = 5 - mix_message = "The solution thickens and takes on a glossy green sheen." - -/datum/chemical_reaction/lime_juice_paint/send_data() - return "#365e30" - -/datum/chemical_reaction/carrot_juice_paint - name = "Carrot juice paint" - result = /datum/reagent/paint - required_reagents = list(/datum/reagent/toxin/plasticide = 1, /datum/reagent/water = 3, /datum/reagent/drink/juice/carrot = 5) - result_amount = 5 - mix_message = "The solution thickens and takes on a glossy orange sheen." - -/datum/chemical_reaction/carrot_juice_paint/send_data() - return "#973800" - -/datum/chemical_reaction/berry_juice_paint - name = "Berry juice paint" - result = /datum/reagent/paint - required_reagents = list(/datum/reagent/toxin/plasticide = 1, /datum/reagent/water = 3, /datum/reagent/drink/juice/berry = 5) - result_amount = 5 - mix_message = "The solution thickens and takes on a glossy red sheen." - -/datum/chemical_reaction/berry_juice_paint/send_data() - return "#990066" - -/datum/chemical_reaction/grape_juice_paint - name = "Grape juice paint" - result = /datum/reagent/paint - required_reagents = list(/datum/reagent/toxin/plasticide = 1, /datum/reagent/water = 3, /datum/reagent/drink/juice/grape = 5) - result_amount = 5 - mix_message = "The solution thickens and takes on a glossy purple sheen." - -/datum/chemical_reaction/grape_juice_paint/send_data() - return "#863333" - -/datum/chemical_reaction/poisonberry_juice_paint - name = "Poison berry juice paint" - result = /datum/reagent/paint - required_reagents = list(/datum/reagent/toxin/plasticide = 1, /datum/reagent/water = 3, /datum/reagent/toxin/poisonberryjuice = 5) - result_amount = 5 - mix_message = "The solution thickens and takes on a glossy purple sheen." - -/datum/chemical_reaction/poisonberry_juice_paint/send_data() - return "#863353" - -/datum/chemical_reaction/watermelon_juice_paint - name = "Watermelon juice paint" - result = /datum/reagent/paint - required_reagents = list(/datum/reagent/toxin/plasticide = 1, /datum/reagent/water = 3, /datum/reagent/drink/juice/watermelon = 5) - result_amount = 5 - mix_message = "The solution thickens and takes on a glossy red sheen." - -/datum/chemical_reaction/watermelon_juice_paint/send_data() - return "#b83333" - -/datum/chemical_reaction/lemon_juice_paint - name = "Lemon juice paint" - result = /datum/reagent/paint - required_reagents = list(/datum/reagent/toxin/plasticide = 1, /datum/reagent/water = 3, /datum/reagent/drink/juice/lemon = 5) - result_amount = 5 - mix_message = "The solution thickens and takes on a glossy yellow sheen." - -/datum/chemical_reaction/lemon_juice_paint/send_data() - return "#afaf00" - -/datum/chemical_reaction/banana_juice_paint - name = "Banana juice paint" - result = /datum/reagent/paint - required_reagents = list(/datum/reagent/toxin/plasticide = 1, /datum/reagent/water = 3, /datum/reagent/drink/juice/banana = 5) - result_amount = 5 - mix_message = "The solution thickens and takes on a glossy yellow sheen." - -/datum/chemical_reaction/banana_juice_paint/send_data() - return "#c3af00" - -/datum/chemical_reaction/potato_juice_paint - name = "Potato juice paint" - result = /datum/reagent/paint - required_reagents = list(/datum/reagent/toxin/plasticide = 1, /datum/reagent/water = 3, "potatojuice" = 5) - result_amount = 5 - mix_message = "The solution thickens and takes on a glossy brown sheen." - -/datum/chemical_reaction/potato_juice_paint/send_data() - return "#302000" - -/datum/chemical_reaction/carbon_paint - name = "Carbon paint" - result = /datum/reagent/paint - required_reagents = list(/datum/reagent/toxin/plasticide = 1, /datum/reagent/water = 3, /datum/reagent/carbon = 1) - result_amount = 5 - mix_message = "The solution thickens and takes on a glossy black sheen." - -/datum/chemical_reaction/carbon_paint/send_data() - return "#333333" - -/datum/chemical_reaction/aluminium_paint - name = "Aluminium paint" - result = /datum/reagent/paint - required_reagents = list(/datum/reagent/toxin/plasticide = 1, /datum/reagent/water = 3, /datum/reagent/aluminium = 1) - result_amount = 5 - mix_message = "The solution thickens and takes on a glossy white sheen." - -/datum/chemical_reaction/aluminium_paint/send_data() - return "#f0f8ff" - -/* Slime cores */ - -/datum/chemical_reaction/slime - hidden_from_codex = TRUE - mix_message = "The slime core twitches sharply." - var/required = null - -/datum/chemical_reaction/slime/can_happen(var/datum/reagents/holder) - if(holder.my_atom && istype(holder.my_atom, required)) - var/obj/item/slime_extract/T = holder.my_atom - if(T.Uses > 0) - return ..() - return 0 - -/datum/chemical_reaction/slime/on_reaction(var/datum/reagents/holder) - ..() - var/obj/item/slime_extract/T = holder.my_atom - T.Uses-- - if(T.Uses <= 0) - T.visible_message("[icon2html(T, viewers(get_turf(T)))]\The [T]'s power is consumed in the reaction.") - T.SetName("used slime extract") - T.desc = "This extract has been used up." - -//Grey -/datum/chemical_reaction/slime/spawn - name = "Slime Spawn" - result = null - required_reagents = list(/datum/reagent/toxin/phoron = 1) - result_amount = 1 - required = /obj/item/slime_extract/grey - -/datum/chemical_reaction/slime/spawn/on_reaction(var/datum/reagents/holder) - ..() - holder.my_atom.visible_message("Infused with phoron, the core begins to quiver and grow, and soon a new baby slime emerges from it!") - new /mob/living/carbon/slime(get_turf(holder.my_atom)) - -/datum/chemical_reaction/slime/monkey - name = "Slime Monkey" - result = null - required_reagents = list(/datum/reagent/blood = 1) - result_amount = 1 - required = /obj/item/slime_extract/grey - -/datum/chemical_reaction/slime/monkey/on_reaction(var/datum/reagents/holder) - ..() - for(var/i = 1, i <= 3, i++) - new /obj/item/reagent_containers/food/snacks/monkeycube(get_turf(holder.my_atom)) - -//Green -/datum/chemical_reaction/slime/mutate - name = "Mutation Toxin" - result = /datum/reagent/slimetoxin - required_reagents = list(/datum/reagent/toxin/phoron = 1) - result_amount = 1 - required = /obj/item/slime_extract/green - -//Metal -/datum/chemical_reaction/slime/metal - name = "Slime Metal" - result = null - required_reagents = list(/datum/reagent/toxin/phoron = 1) - result_amount = 1 - required = /obj/item/slime_extract/metal - -/datum/chemical_reaction/slime/metal/on_reaction(var/datum/reagents/holder) - ..() - var/obj/item/stack/material/steel/M = new (get_turf(holder.my_atom)) - M.amount = 15 - var/obj/item/stack/material/plasteel/P = new (get_turf(holder.my_atom)) - P.amount = 5 - -//Gold -/datum/chemical_reaction/slime/crit - name = "Slime Crit" - result = null - required_reagents = list(/datum/reagent/toxin/phoron = 1) - result_amount = 1 - required = /obj/item/slime_extract/gold - var/list/possible_mobs = list( - /mob/living/simple_animal/passive/cat, - /mob/living/simple_animal/passive/cat/kitten, - /mob/living/simple_animal/passive/corgi, - /mob/living/simple_animal/passive/corgi/puppy, - /mob/living/simple_animal/passive/cow, - /mob/living/simple_animal/passive/chick, - /mob/living/simple_animal/passive/chicken - ) - -/datum/chemical_reaction/slime/crit/on_reaction(var/datum/reagents/holder) - ..() - var/type = pick(possible_mobs) - new type(get_turf(holder.my_atom)) - -/datum/chemical_reaction/slime/grevive - name = "Slime Revive" - result = null - required_reagents = list(/datum/reagent/blood = 1) - result_amount = 1 - required = /obj/item/slime_extract/gold - -/datum/chemical_reaction/slime/grevive/on_reaction(datum/reagents/holder, created_volume, reaction_flags) - ..() - new /obj/item/slimepotion3(get_turf(holder.my_atom)) - -//Silver -/datum/chemical_reaction/slime/bork - name = "Slime Bork" - result = null - required_reagents = list(/datum/reagent/toxin/phoron = 1) - result_amount = 1 - required = /obj/item/slime_extract/silver - -/datum/chemical_reaction/slime/bork/on_reaction(var/datum/reagents/holder) - ..() - var/list/borks = typesof(/obj/item/reagent_containers/food/snacks) - /obj/item/reagent_containers/food/snacks - playsound(get_turf(holder.my_atom), 'sound/effects/phasein.ogg', 100, 1) - for(var/mob/living/carbon/human/M in viewers(get_turf(holder.my_atom), null)) - if(M.eyecheck() < FLASH_PROTECTION_MODERATE) - M.flash_eyes() - - for(var/i = 1, i <= 4 + rand(1,2), i++) - var/chosen = pick(borks) - var/obj/B = new chosen(get_turf(holder.my_atom)) - if(B) - if(prob(50)) - for(var/j = 1, j <= rand(1, 3), j++) - step(B, pick(NORTH, SOUTH, EAST, WEST)) - -/datum/chemical_reaction/slime/mixer - name = "Slime Mixer" - result = null - required_reagents = list(/datum/reagent/water = 1) - result_amount = 1 - required = /obj/item/slime_extract/silver - -/datum/chemical_reaction/slime/mixer/on_reaction(var/datum/reagents/holder) - ..() - var/list/mixers = typesof(/obj/item/reagent_containers/food/drinks) - typesof(/obj/item/reagent_containers/food/drinks/glass2) - playsound(get_turf(holder.my_atom), 'sound/effects/phasein.ogg', 100, 1) - for(var/mob/living/carbon/human/M in viewers(get_turf(holder.my_atom), null)) - if(M.eyecheck() < FLASH_PROTECTION_MODERATE) - M.flash_eyes() - - for(var/i = 1, i <= 4 + rand(1,2), i++) - var/chosen = pick(mixers) - var/obj/B = new chosen(get_turf(holder.my_atom)) - if(B) - if(prob(50)) - for(var/j = 1, j <= rand(1, 3), j++) - step(B, pick(NORTH, SOUTH, EAST, WEST)) - -//Blue -/datum/chemical_reaction/slime/frost - name = "Slime Frost Oil" - result = /datum/reagent/frostoil - required_reagents = list(/datum/reagent/toxin/phoron = 1) - result_amount = 10 - required = /obj/item/slime_extract/blue - -//Dark Blue -/datum/chemical_reaction/slime/freeze - name = "Slime Freeze" - result = null - required_reagents = list(/datum/reagent/toxin/phoron = 1) - result_amount = 1 - required = /obj/item/slime_extract/darkblue - mix_message = "The slime extract begins to vibrate violently!" - -/datum/chemical_reaction/slime/freeze/on_reaction(var/datum/reagents/holder) - set waitfor = 0 - ..() - sleep(50) - playsound(get_turf(holder.my_atom), 'sound/effects/phasein.ogg', 100, 1) - for(var/mob/living/M in range (get_turf(holder.my_atom), 7)) - M.bodytemperature -= 140 - to_chat(M, "You feel a chill!") - -//Orange -/datum/chemical_reaction/slime/casp - name = "Slime Capsaicin Oil" - result = /datum/reagent/capsaicin - required_reagents = list(/datum/reagent/blood = 1) - result_amount = 10 - required = /obj/item/slime_extract/orange - -/datum/chemical_reaction/slime/fire - name = "Slime fire" - result = null - required_reagents = list(/datum/reagent/toxin/phoron = 1) - result_amount = 1 - required = /obj/item/slime_extract/orange - mix_message = "The slime extract begins to vibrate violently!" - -/datum/chemical_reaction/slime/fire/on_reaction(var/datum/reagents/holder) - set waitfor = 0 - ..() - sleep(50) - if(!(holder.my_atom && holder.my_atom.loc)) - return - - var/turf/location = get_turf(holder.my_atom) - location.assume_gas(GAS_PHORON, 250, 1400) - location.hotspot_expose(700, 400) - -//Yellow -/datum/chemical_reaction/slime/overload - name = "Slime EMP" - result = null - required_reagents = list(/datum/reagent/blood = 1) - result_amount = 1 - required = /obj/item/slime_extract/yellow - -/datum/chemical_reaction/slime/overload/on_reaction(var/datum/reagents/holder, var/created_volume, var/reaction_flags) - ..() - empulse(get_turf(holder.my_atom), 3, 7) - -/datum/chemical_reaction/slime/cell - name = "Slime Powercell" - result = null - required_reagents = list(/datum/reagent/toxin/phoron = 1) - result_amount = 1 - required = /obj/item/slime_extract/yellow - -/datum/chemical_reaction/slime/cell/on_reaction(var/datum/reagents/holder, var/created_volume, var/reaction_flags) - ..() - new /obj/item/cell/slime(get_turf(holder.my_atom)) - -/datum/chemical_reaction/slime/glow - name = "Slime Glow" - result = null - required_reagents = list(/datum/reagent/water = 1) - result_amount = 1 - required = /obj/item/slime_extract/yellow - mix_message = "The contents of the slime core harden and begin to emit a warm, bright light." - -/datum/chemical_reaction/slime/glow/on_reaction(var/datum/reagents/holder, var/created_volume, var/reaction_flags) - ..() - new /obj/item/device/flashlight/slime(get_turf(holder.my_atom)) - -//Purple -/datum/chemical_reaction/slime/psteroid - name = "Slime Steroid" - result = null - required_reagents = list(/datum/reagent/toxin/phoron = 1) - result_amount = 1 - required = /obj/item/slime_extract/purple - -/datum/chemical_reaction/slime/psteroid/on_reaction(var/datum/reagents/holder, var/created_volume, var/reaction_flags) - ..() - new /obj/item/slimesteroid(get_turf(holder.my_atom)) - -/datum/chemical_reaction/slime/jam - name = "Slime Jam" - result = /datum/reagent/slimejelly - required_reagents = list(/datum/reagent/sugar = 1) - result_amount = 10 - required = /obj/item/slime_extract/purple - -//Dark Purple -/datum/chemical_reaction/slime/plasma - name = "Slime Plasma" - result = null - required_reagents = list(/datum/reagent/toxin/phoron = 1) - result_amount = 1 - required = /obj/item/slime_extract/darkpurple - -/datum/chemical_reaction/slime/plasma/on_reaction(var/datum/reagents/holder) - ..() - var/obj/item/stack/material/phoron/P = new (get_turf(holder.my_atom)) - P.amount = 10 - -//Red -/datum/chemical_reaction/slime/glycerol - name = "Slime Glycerol" - result = /datum/reagent/glycerol - required_reagents = list(/datum/reagent/toxin/phoron = 1) - result_amount = 8 - required = /obj/item/slime_extract/red - -/datum/chemical_reaction/slime/bloodlust - name = "Bloodlust" - result = null - required_reagents = list(/datum/reagent/blood = 1) - result_amount = 1 - required = /obj/item/slime_extract/red - -/datum/chemical_reaction/slime/bloodlust/on_reaction(var/datum/reagents/holder) - ..() - for(var/mob/living/carbon/slime/slime in viewers(get_turf(holder.my_atom), null)) - slime.rabid = 1 - slime.visible_message("The [slime] is driven into a frenzy!") - -//Pink -/datum/chemical_reaction/slime/ppotion - name = "Slime Potion" - result = null - required_reagents = list(/datum/reagent/toxin/phoron = 1) - result_amount = 1 - required = /obj/item/slime_extract/pink - -/datum/chemical_reaction/slime/ppotion/on_reaction(var/datum/reagents/holder) - ..() - new /obj/item/slimepotion(get_turf(holder.my_atom)) - -//Black -/datum/chemical_reaction/slime/mutate2 - name = "Advanced Mutation Toxin" - result = /datum/reagent/aslimetoxin - required_reagents = list(/datum/reagent/toxin/phoron = 1) - result_amount = 1 - required = /obj/item/slime_extract/black - -//Oil -/datum/chemical_reaction/slime/explosion - name = "Slime Explosion" - result = null - required_reagents = list(/datum/reagent/toxin/phoron = 1) - result_amount = 1 - required = /obj/item/slime_extract/oil - mix_message = "The slime extract begins to vibrate violently!" - -/datum/chemical_reaction/slime/explosion/on_reaction(var/datum/reagents/holder) - set waitfor = 0 - ..() - sleep(50) - explosion(get_turf(holder.my_atom), 1, 3, 6) - -//Light Pink -/datum/chemical_reaction/slime/potion2 - name = "Slime Potion 2" - result = null - result_amount = 1 - required = /obj/item/slime_extract/lightpink - required_reagents = list(/datum/reagent/toxin/phoron = 1) - -/datum/chemical_reaction/slime/potion2/on_reaction(var/datum/reagents/holder) - ..() - new /obj/item/slimepotion2(get_turf(holder.my_atom)) - -//Adamantine -/datum/chemical_reaction/slime/golem - name = "Slime Golem" - result = null - required_reagents = list(/datum/reagent/toxin/phoron = 1) - result_amount = 1 - required = /obj/item/slime_extract/adamantine - -/datum/chemical_reaction/slime/golem/on_reaction(var/datum/reagents/holder) - ..() - var/obj/effect/golemrune/Z = new /obj/effect/golemrune(get_turf(holder.my_atom)) - Z.announce_to_ghosts() - -//Sepia -/datum/chemical_reaction/slime/film - name = "Slime Film" - result = null - required_reagents = list(/datum/reagent/blood = 1) - result_amount = 2 - required = /obj/item/slime_extract/sepia - -/datum/chemical_reaction/slime/film/on_reaction(var/datum/reagents/holder) - for(var/i in 1 to result_amount) - new /obj/item/device/camera_film(get_turf(holder.my_atom)) - ..() - -/datum/chemical_reaction/slime/camera - name = "Slime Camera" - result = null - required_reagents = list(/datum/reagent/toxin/phoron = 1) - result_amount = 1 - required = /obj/item/slime_extract/sepia - -/datum/chemical_reaction/slime/camera/on_reaction(var/datum/reagents/holder) - new /obj/item/device/camera(get_turf(holder.my_atom)) - ..() - -//Bluespace -/datum/chemical_reaction/slime/teleport - name = "Slime Teleport" - result = null - required_reagents = list(/datum/reagent/toxin/phoron = 1) - required = /obj/item/slime_extract/bluespace - reaction_sound = 'sound/effects/teleport.ogg' - -/datum/chemical_reaction/slime/teleport/on_reaction(var/datum/reagents/holder) - var/list/turfs = list() - for(var/turf/T in orange(holder.my_atom,6)) - turfs += T - for(var/atom/movable/a in viewers(holder.my_atom,2)) - if(!a.simulated) - continue - a.forceMove(pick(turfs)) - ..() - -//pyrite -/datum/chemical_reaction/slime/paint - name = "Slime Paint" - result = null - required_reagents = list(/datum/reagent/toxin/phoron = 1) - required = /obj/item/slime_extract/pyrite - -/datum/chemical_reaction/slime/paint/on_reaction(var/datum/reagents/holder) - new /obj/item/reagent_containers/glass/paint/random(get_turf(holder.my_atom)) - ..() - -//cerulean -/datum/chemical_reaction/slime/extract_enhance - name = "Extract Enhancer" - result = null - required_reagents = list(/datum/reagent/toxin/phoron = 1) - required = /obj/item/slime_extract/cerulean - -/datum/chemical_reaction/slime/extract_enhance/on_reaction(var/datum/reagents/holder) - new /obj/item/slimesteroid2(get_turf(holder.my_atom)) - ..() - -/datum/chemical_reaction/soap_key - name = "Soap Key" - result = null - required_reagents = list(/datum/reagent/frostoil = 2, /datum/reagent/space_cleaner = 5) - var/strength = 3 - -/datum/chemical_reaction/soap_key/can_happen(var/datum/reagents/holder) - if(holder.my_atom && istype(holder.my_atom, /obj/item/soap)) - return ..() - return 0 - -/datum/chemical_reaction/soap_key/on_reaction(var/datum/reagents/holder) - var/obj/item/soap/S = holder.my_atom - if(S.key_data) - var/obj/item/key/soap/key = new(get_turf(holder.my_atom), S.key_data) - key.uses = strength - ..() - -/* Food */ - -/datum/chemical_reaction/tofu - name = "Tofu" - result = null - required_reagents = list(/datum/reagent/drink/milk/soymilk = 10) - catalysts = list(/datum/reagent/enzyme = 5) - result_amount = 1 - mix_message = "The solution thickens and clumps into a yellow-white substance." - -/datum/chemical_reaction/tofu/on_reaction(var/datum/reagents/holder, var/created_volume, var/reaction_flags) - ..() - var/location = get_turf(holder.my_atom) - for(var/i = 1, i <= created_volume, i++) - new /obj/item/reagent_containers/food/snacks/tofu(location) - -/datum/chemical_reaction/chocolate_bar - name = "Chocolate Bar" - result = null - required_reagents = list(/datum/reagent/drink/milk/soymilk = 2, /datum/reagent/nutriment/coco = 2, /datum/reagent/sugar = 2) - result_amount = 1 - mix_message = "The solution thickens and hardens into a glossy brown substance." - -/datum/chemical_reaction/chocolate_bar/on_reaction(var/datum/reagents/holder, var/created_volume, var/reaction_flags) - ..() - var/location = get_turf(holder.my_atom) - for(var/i = 1, i <= created_volume, i++) - new /obj/item/reagent_containers/food/snacks/chocolatebar(location) - -/datum/chemical_reaction/chocolate_bar2 - name = "Chocolate Bar" - result = null - required_reagents = list(/datum/reagent/drink/milk = 2, /datum/reagent/nutriment/coco = 2, /datum/reagent/sugar = 2) - result_amount = 1 - mix_message = "The solution thickens and hardens into a glossy brown substance." - -/datum/chemical_reaction/chocolate_bar2/on_reaction(var/datum/reagents/holder, var/created_volume, var/reaction_flags) - ..() - var/location = get_turf(holder.my_atom) - for(var/i = 1, i <= created_volume, i++) - new /obj/item/reagent_containers/food/snacks/chocolatebar(location) - -/datum/chemical_reaction/chocolate_milk - name = "Chocolate Milk" - result = /datum/reagent/drink/milk/chocolate - required_reagents = list(/datum/reagent/drink/milk = 5, /datum/reagent/nutriment/coco = 1) - result_amount = 5 - mix_message = "The solution thickens into a creamy brown beverage." - -/datum/chemical_reaction/coffee - name = "Coffee" - result = /datum/reagent/drink/coffee - required_reagents = list(/datum/reagent/water = 5, /datum/reagent/nutriment/coffee = 1) - result_amount = 5 - minimum_temperature = 70 CELSIUS - maximum_temperature = (70 CELSIUS) + 100 - mix_message = "The solution thickens into a steaming dark brown beverage." - -/datum/chemical_reaction/coffee/instant - name = "Instant Coffee" - required_reagents = list(/datum/reagent/water = 5, /datum/reagent/nutriment/coffee/instant = 1) - maximum_temperature = INFINITY - minimum_temperature = 0 - mix_message = "The solution thickens into dark brown beverage." - -/datum/chemical_reaction/tea - name = "Black tea" - result = /datum/reagent/drink/tea - required_reagents = list(/datum/reagent/water = 5, /datum/reagent/nutriment/tea = 1) - result_amount = 5 - minimum_temperature = 70 CELSIUS - maximum_temperature = (70 CELSIUS) + 100 - mix_message = "The solution thickens into a steaming black beverage." - -/datum/chemical_reaction/tea/instant - name = "Instant Black tea" - required_reagents = list(/datum/reagent/water = 5, /datum/reagent/nutriment/tea/instant = 1) - maximum_temperature = INFINITY - minimum_temperature = 0 - mix_message = "The solution thickens into black beverage." - -/datum/chemical_reaction/hot_coco - name = "Hot Coco" - result = /datum/reagent/drink/hot_coco - required_reagents = list(/datum/reagent/water = 5, /datum/reagent/nutriment/coco = 1) - result_amount = 5 - minimum_temperature = 70 CELSIUS - maximum_temperature = (70 CELSIUS) + 100 - mix_message = "The solution thickens into a steaming brown beverage." - -/datum/chemical_reaction/grapejuice - name = "Grape Juice" - result = /datum/reagent/drink/juice/grape - required_reagents = list(/datum/reagent/water = 3, /datum/reagent/nutriment/instantjuice/grape = 1) - result_amount = 3 - mix_message = "The solution settles into a purplish-red beverage." - -/datum/chemical_reaction/orangejuice - name = "Orange Juice" - result = /datum/reagent/drink/juice/orange - required_reagents = list(/datum/reagent/water = 3, /datum/reagent/nutriment/instantjuice/orange = 1) - result_amount = 3 - mix_message = "The solution settles into an orange beverage." - -/datum/chemical_reaction/watermelonjuice - name = "Watermelon Juice" - result = /datum/reagent/drink/juice/watermelon - required_reagents = list(/datum/reagent/water = 3, /datum/reagent/nutriment/instantjuice/watermelon = 1) - result_amount = 3 - mix_message = "The solution settles into a red beverage." - -/datum/chemical_reaction/applejuice - name = "Apple Juice" - result = /datum/reagent/drink/juice/apple - required_reagents = list(/datum/reagent/water = 3, /datum/reagent/nutriment/instantjuice/apple = 1) - result_amount = 3 - mix_message = "The solution settles into a clear brown beverage." - -/datum/chemical_reaction/soysauce - name = "Soy Sauce" - result = /datum/reagent/nutriment/soysauce - required_reagents = list(/datum/reagent/drink/milk/soymilk = 5, /datum/reagent/nutriment/vinegar = 5) - result_amount = 10 - mix_message = "The solution settles into a glossy black sauce." - -/datum/chemical_reaction/soysauce_acid - name = "Bitey Soy Sauce" - result = /datum/reagent/nutriment/soysauce - required_reagents = list(/datum/reagent/drink/milk/soymilk = 4, /datum/reagent/acid = 1) - result_amount = 5 - mix_message = "The solution settles into a glossy black sauce." - -/datum/chemical_reaction/ketchup - name = "Ketchup" - result = /datum/reagent/nutriment/ketchup - required_reagents = list(/datum/reagent/drink/juice/tomato = 2, /datum/reagent/water = 1, /datum/reagent/sugar = 1) - result_amount = 4 - mix_message = "The solution thickens into a sweet-smelling red sauce." - -/datum/chemical_reaction/barbecue - name = "Barbecue Sauce" - result = /datum/reagent/nutriment/barbecue - required_reagents = list(/datum/reagent/nutriment/ketchup = 2, /datum/reagent/blackpepper = 1, /datum/reagent/sodiumchloride = 1) - result_amount = 4 - mix_message = "The solution thickens into a sweet-smelling brown sauce." - -/datum/chemical_reaction/garlicsauce - name = "Garlic Sauce" - result = /datum/reagent/nutriment/garlicsauce - required_reagents = list(/datum/reagent/drink/juice/garlic = 1, /datum/reagent/nutriment/cornoil = 1) - result_amount = 2 - mix_message = "The solution thickens into a creamy white oil." - -/datum/chemical_reaction/cheesewheel - name = "Cheesewheel" - result = null - required_reagents = list(/datum/reagent/drink/milk = 40) - catalysts = list(/datum/reagent/enzyme = 5) - result_amount = 1 - mix_message = "The solution thickens and curdles into a rich yellow substance." - minimum_temperature = 40 CELSIUS - maximum_temperature = (40 CELSIUS) + 100 - -/datum/chemical_reaction/cheesewheel/on_reaction(var/datum/reagents/holder, var/created_volume, var/reaction_flags) - ..() - var/location = get_turf(holder.my_atom) - for(var/i = 1, i <= created_volume, i++) - new /obj/item/reagent_containers/food/snacks/sliceable/cheesewheel(location) - -/datum/chemical_reaction/rawmeatball - name = "Raw Meatball" - result = null - required_reagents = list(/datum/reagent/nutriment/protein = 3, /datum/reagent/nutriment/flour = 5) - result_amount = 3 - mix_message = "The flour thickens the processed meat until it clumps." - -/datum/chemical_reaction/rawmeatball/on_reaction(var/datum/reagents/holder, var/created_volume, var/reaction_flags) - ..() - var/location = get_turf(holder.my_atom) - for(var/i = 1, i <= created_volume, i++) - new /obj/item/reagent_containers/food/snacks/rawmeatball(location) - -/datum/chemical_reaction/dough - name = "Dough" - result = null - required_reagents = list(/datum/reagent/nutriment/protein/egg = 3, /datum/reagent/nutriment/flour = 10, /datum/reagent/water = 10) - result_amount = 1 - mix_message = "The solution folds and thickens into a large ball of dough." - -/datum/chemical_reaction/dough/on_reaction(var/datum/reagents/holder, var/created_volume, var/reaction_flags) - ..() - var/location = get_turf(holder.my_atom) - for(var/i = 1, i <= created_volume, i++) - new /obj/item/reagent_containers/food/snacks/dough(location) - -/datum/chemical_reaction/soydough - name = "Soy dough" - result = null - required_reagents = list(/datum/reagent/nutriment/softtofu = 3, /datum/reagent/nutriment/flour = 10, /datum/reagent/water = 10) - result_amount = 1 - mix_message = "The solution folds and thickens into a large ball of dough." - -/datum/chemical_reaction/soydough/on_reaction(var/datum/reagents/holder, var/created_volume, var/reaction_flags) - ..() - var/location = get_turf(holder.my_atom) - for(var/i = 1, i <= created_volume, i++) - new /obj/item/reagent_containers/food/snacks/dough(location) - -//batter reaction as food precursor, for things that don't use pliable dough precursor. - -/datum/chemical_reaction/batter - name = "Batter" - result = /datum/reagent/nutriment/batter - required_reagents = list(/datum/reagent/nutriment/protein/egg = 3, /datum/reagent/nutriment/flour = 5, /datum/reagent/drink/milk = 5) - result_amount = 10 - mix_message = "The solution thickens into a glossy batter." - -/datum/chemical_reaction/cakebatter - name = "Cake Batter" - result = /datum/reagent/nutriment/batter/cakebatter - required_reagents = list(/datum/reagent/sugar = 1, /datum/reagent/nutriment/batter = 2) - result_amount = 3 - mix_message = "The sugar lightens the batter and gives it a sweet smell." - -/datum/chemical_reaction/soybatter - name = "Vegan Batter" - result = /datum/reagent/nutriment/batter - required_reagents = list(/datum/reagent/nutriment/softtofu = 3, /datum/reagent/nutriment/flour = 5, /datum/reagent/drink/milk = 5) - result_amount = 10 - mix_message = "The solution thickens into a glossy batter." - -/datum/chemical_reaction/syntiflesh - name = "Syntiflesh" - result = null - required_reagents = list(/datum/reagent/blood = 5, /datum/reagent/clonexadone = 1) - result_amount = 1 - mix_message = "The solution thickens disturbingly, taking on a meaty appearance." - -/datum/chemical_reaction/syntiflesh/on_reaction(var/datum/reagents/holder, var/created_volume, var/reaction_flags) - ..() - var/location = get_turf(holder.my_atom) - for(var/i = 1, i <= created_volume, i++) - new /obj/item/reagent_containers/food/snacks/meat/syntiflesh(location) - -/datum/chemical_reaction/hot_ramen - name = "Hot Ramen" - result = /datum/reagent/drink/hot_ramen - required_reagents = list(/datum/reagent/water = 1, /datum/reagent/drink/dry_ramen = 3) - result_amount = 3 - mix_message = "The noodles soften in the hot water, releasing savoury steam." - -/datum/chemical_reaction/hell_ramen - name = "Hell Ramen" - result = /datum/reagent/drink/hell_ramen - required_reagents = list(/datum/reagent/capsaicin = 1, /datum/reagent/drink/hot_ramen = 6) - result_amount = 6 - mix_message = "The broth of the noodles takes on a hellish red gleam." - -/* Alcohol */ - -/datum/chemical_reaction/goldschlager - name = "Goldschlager" - result = /datum/reagent/ethanol/goldschlager - required_reagents = list(/datum/reagent/ethanol/vodka = 10, /datum/reagent/gold = 1) - result_amount = 10 - mix_message = "The gold flakes and settles in the vodka." - -/datum/chemical_reaction/patron - name = "Patron" - result = /datum/reagent/ethanol/patron - required_reagents = list(/datum/reagent/ethanol/tequilla = 10, /datum/reagent/silver = 1) - result_amount = 10 - mix_message = "The silver flakes and settles in the tequila." - -/datum/chemical_reaction/bilk - name = "Bilk" - result = /datum/reagent/ethanol/bilk - required_reagents = list(/datum/reagent/drink/milk = 1, /datum/reagent/ethanol/beer = 1) - result_amount = 2 - mix_message = "The solution takes on an unpleasant, thick, brown appearance." - -/datum/chemical_reaction/icecoffee - name = "Iced Coffee" - result = /datum/reagent/drink/coffee/icecoffee - required_reagents = list(/datum/reagent/drink/ice = 1, /datum/reagent/drink/coffee = 2) - result_amount = 3 - mix_message = "The ice clinks together in the chilled coffee." - -/datum/chemical_reaction/icesoylatte - name = "Iced Soy Latte" - result = /datum/reagent/drink/coffee/icecoffee/soy_latte - required_reagents = list(/datum/reagent/drink/ice = 1, /datum/reagent/drink/coffee/soy_latte = 2) - result_amount = 3 - mix_message = "The ice clinks together in the chilled soy latte." - -/datum/chemical_reaction/icecafelatte - name = "Iced Cafe Latte" - result = /datum/reagent/drink/coffee/icecoffee/cafe_latte - required_reagents = list(/datum/reagent/drink/ice = 1, /datum/reagent/drink/coffee/cafe_latte = 2) - result_amount = 3 - mix_message = "The ice clinks together in the chilled cafe latte." - -/datum/chemical_reaction/nuka_cola - name = "Nuka Cola" - result = /datum/reagent/drink/nuka_cola - required_reagents = list(/datum/reagent/uranium = 1, /datum/reagent/drink/space_cola = 5) - result_amount = 5 - mix_message = "The solution bubbles and emits an eerie green glow." - -/datum/chemical_reaction/moonshine - name = "Moonshine" - result = /datum/reagent/ethanol/moonshine - required_reagents = list(/datum/reagent/nutriment = 10) - catalysts = list(/datum/reagent/enzyme = 5) - result_amount = 10 - mix_message = "The solution exudes the powerful reek of raw alcohol." - -/datum/chemical_reaction/grenadine - name = "Grenadine Syrup" - result = /datum/reagent/drink/grenadine - required_reagents = list(/datum/reagent/drink/juice/berry = 10) - catalysts = list(/datum/reagent/enzyme = 5) - result_amount = 10 - -/datum/chemical_reaction/wine - name = "Wine" - result = /datum/reagent/ethanol/wine - required_reagents = list(/datum/reagent/drink/juice/grape = 10) - catalysts = list(/datum/reagent/enzyme = 5) - result_amount = 10 - mix_message = "The solution roils as it rapidly ferments into a rich red liquid." - -/datum/chemical_reaction/pwine - name = "Poison Wine" - result = /datum/reagent/ethanol/pwine - required_reagents = list(/datum/reagent/toxin/poisonberryjuice = 10) - catalysts = list(/datum/reagent/enzyme = 5) - result_amount = 10 - mix_message = "The solution roils as it rapidly ferments into a shifting purple liquid." - -/datum/chemical_reaction/melonliquor - name = "Melon Liquor" - result = /datum/reagent/ethanol/melonliquor - required_reagents = list(/datum/reagent/drink/juice/watermelon = 10) - catalysts = list(/datum/reagent/enzyme = 5) - result_amount = 10 - mix_message = "The solution roils as it rapidly ferments into a pale liquor." - -/datum/chemical_reaction/bluecuracao - name = "Blue Curacao" - result = /datum/reagent/ethanol/bluecuracao - required_reagents = list(/datum/reagent/drink/juice/orange = 10) - catalysts = list(/datum/reagent/enzyme = 5) - result_amount = 10 - mix_message = "The solution roils as it rapidly ferments into a shockingly blue liquor." - -/datum/chemical_reaction/spacebeer - name = "Space Beer" - result = /datum/reagent/ethanol/beer - required_reagents = list(/datum/reagent/nutriment/cornoil = 10) - catalysts = list(/datum/reagent/enzyme = 5) - result_amount = 10 - mix_message = "The solution roils as it rapidly ferments into a foaming amber liquid." - -/datum/chemical_reaction/vodka - name = "Vodka" - result = /datum/reagent/ethanol/vodka - required_reagents = list(/datum/reagent/drink/juice/potato = 10) - catalysts = list(/datum/reagent/enzyme = 5) - result_amount = 10 - mix_message = "The solution roils as it rapidly ferments into a crystal clear liquid." - -/datum/chemical_reaction/vodka2 - name = "Vodka" - result = /datum/reagent/ethanol/vodka - required_reagents = list(/datum/reagent/drink/juice/turnip = 10) - catalysts = list(/datum/reagent/enzyme = 5) - result_amount = 10 - mix_message = "The solution roils as it rapidly ferments into a crystal clear liquid." - -/datum/chemical_reaction/sake - name = "Sake" - result = /datum/reagent/ethanol/sake - required_reagents = list(/datum/reagent/nutriment/rice = 10) - catalysts = list(/datum/reagent/enzyme = 5) - result_amount = 10 - mix_message = "The solution roils as it rapidly ferments into a crystal clear liquid." - -/datum/chemical_reaction/kahlua - name = "Kahlua" - result = /datum/reagent/ethanol/coffee/kahlua - required_reagents = list(/datum/reagent/drink/coffee = 5, /datum/reagent/sugar = 5) - catalysts = list(/datum/reagent/enzyme = 5) - result_amount = 5 - mix_message = "The solution roils as it rapidly ferments into a rich brown liquid." - -/datum/chemical_reaction/gin_tonic - name = "Gin and Tonic" - result = /datum/reagent/ethanol/gintonic - required_reagents = list(/datum/reagent/ethanol/gin = 2, /datum/reagent/drink/tonic = 1) - result_amount = 3 - -/datum/chemical_reaction/cuba_libre - name = "Cuba Libre" - result = /datum/reagent/ethanol/cuba_libre - required_reagents = list(/datum/reagent/ethanol/rum = 2, /datum/reagent/drink/space_cola = 1) - result_amount = 3 - -/datum/chemical_reaction/martini - name = "Classic Martini" - result = /datum/reagent/ethanol/martini - required_reagents = list(/datum/reagent/ethanol/gin = 2, /datum/reagent/ethanol/vermouth = 1) - result_amount = 3 - -/datum/chemical_reaction/vodkamartini - name = "Vodka Martini" - result = /datum/reagent/ethanol/vodkamartini - required_reagents = list(/datum/reagent/ethanol/vodka = 2, /datum/reagent/ethanol/vermouth = 1) - result_amount = 3 - -/datum/chemical_reaction/white_russian - name = "White Russian" - result = /datum/reagent/ethanol/white_russian - required_reagents = list(/datum/reagent/ethanol/black_russian = 2, /datum/reagent/drink/milk/cream = 1) - result_amount = 3 - -/datum/chemical_reaction/whiskey_cola - name = "Whiskey Cola" - result = /datum/reagent/ethanol/whiskey_cola - required_reagents = list(/datum/reagent/ethanol/whiskey = 2, /datum/reagent/drink/space_cola = 1) - result_amount = 3 - -/datum/chemical_reaction/screwdriver - name = "Screwdriver" - result = /datum/reagent/ethanol/screwdrivercocktail - required_reagents = list(/datum/reagent/ethanol/vodka = 2, /datum/reagent/drink/juice/orange = 1) - result_amount = 3 - -/datum/chemical_reaction/battuta - name = "Ibn Battuta" - result = /datum/reagent/ethanol/battuta - required_reagents = list(/datum/reagent/ethanol/herbal = 2, /datum/reagent/drink/juice/orange = 1) - catalysts = list(/datum/reagent/nutriment/mint) - result_amount = 3 - -/datum/chemical_reaction/magellan - name = "Magellan" - result = /datum/reagent/ethanol/magellan - required_reagents = list(/datum/reagent/ethanol/wine = 1, /datum/reagent/ethanol/specialwhiskey = 1) - catalysts = list(/datum/reagent/sugar) - result_amount = 2 - -/datum/chemical_reaction/zhenghe - name = "Zheng He" - result = /datum/reagent/ethanol/zhenghe - required_reagents = list(/datum/reagent/drink/tea = 2, /datum/reagent/ethanol/vermouth = 1) - result_amount = 3 - -/datum/chemical_reaction/armstrong - name = "Armstrong" - result = /datum/reagent/ethanol/armstrong - required_reagents = list(/datum/reagent/ethanol/beer = 2, /datum/reagent/ethanol/vodka = 1, /datum/reagent/drink/juice/lime = 1) - result_amount = 4 - -/datum/chemical_reaction/bloody_mary - name = "Bloody Mary" - result = /datum/reagent/ethanol/bloody_mary - required_reagents = list(/datum/reagent/ethanol/vodka = 2, /datum/reagent/drink/juice/tomato = 3, /datum/reagent/drink/juice/lime = 1) - result_amount = 6 - -/datum/chemical_reaction/gargle_blaster - name = "Pan-Galactic Gargle Blaster" - result = /datum/reagent/ethanol/gargle_blaster - required_reagents = list(/datum/reagent/ethanol/vodka = 2, /datum/reagent/ethanol/gin = 1, /datum/reagent/ethanol/specialwhiskey = 1, /datum/reagent/ethanol/cognac = 1, /datum/reagent/drink/juice/lime = 1) - result_amount = 6 - -/datum/chemical_reaction/brave_bull - name = "Brave Bull" - result = /datum/reagent/ethanol/coffee/brave_bull - required_reagents = list(/datum/reagent/ethanol/tequilla = 2, /datum/reagent/ethanol/coffee/kahlua = 1) - result_amount = 3 - -/datum/chemical_reaction/tequilla_sunrise - name = "Tequilla Sunrise" - result = /datum/reagent/ethanol/tequilla_sunrise - required_reagents = list(/datum/reagent/ethanol/tequilla = 2, /datum/reagent/drink/juice/orange = 1) - result_amount = 3 - -/datum/chemical_reaction/phoron_special - name = "Toxins Special" - result = /datum/reagent/ethanol/toxins_special - required_reagents = list(/datum/reagent/ethanol/rum = 2, /datum/reagent/ethanol/vermouth = 2, /datum/reagent/toxin/phoron = 2) - result_amount = 6 - -/datum/chemical_reaction/beepsky_smash - name = "Beepksy Smash" - result = /datum/reagent/ethanol/beepsky_smash - required_reagents = list(/datum/reagent/drink/juice/lime = 1, /datum/reagent/ethanol/whiskey = 1, /datum/reagent/iron = 1) - result_amount = 2 - -/datum/chemical_reaction/doctor_delight - name = "The Doctor's Delight" - result = /datum/reagent/drink/doctor_delight - required_reagents = list(/datum/reagent/drink/juice/lime = 1, /datum/reagent/drink/juice/tomato = 1, /datum/reagent/drink/juice/orange = 1, /datum/reagent/drink/milk/cream = 2, /datum/reagent/tricordrazine = 1) - result_amount = 6 - -/datum/chemical_reaction/irish_cream - name = "Irish Cream" - result = /datum/reagent/ethanol/irish_cream - required_reagents = list(/datum/reagent/ethanol/whiskey = 2, /datum/reagent/drink/milk/cream = 1) - result_amount = 3 - -/datum/chemical_reaction/manly_dorf - name = "The Manly Dorf" - result = /datum/reagent/ethanol/manly_dorf - required_reagents = list (/datum/reagent/ethanol/beer = 1, /datum/reagent/ethanol/ale = 2) - result_amount = 3 - -/datum/chemical_reaction/hooch - name = "Hooch" - result = /datum/reagent/ethanol/hooch - required_reagents = list (/datum/reagent/sugar = 1, /datum/reagent/ethanol = 2, /datum/reagent/fuel = 1) - minimum_temperature = 30 CELSIUS - maximum_temperature = (30 CELSIUS) + 100 - result_amount = 3 - -/datum/chemical_reaction/irish_coffee - name = "Irish Coffee" - result = /datum/reagent/ethanol/coffee/irishcoffee - required_reagents = list(/datum/reagent/ethanol/irish_cream = 1, /datum/reagent/drink/coffee = 1) - result_amount = 2 - -/datum/chemical_reaction/b52 - name = "B-52" - result = /datum/reagent/ethanol/coffee/b52 - required_reagents = list(/datum/reagent/ethanol/irish_cream = 1, /datum/reagent/ethanol/coffee/kahlua = 1, /datum/reagent/ethanol/cognac = 1) - result_amount = 3 - -/datum/chemical_reaction/atomicbomb - name = "Atomic Bomb" - result = /datum/reagent/ethanol/atomicbomb - required_reagents = list(/datum/reagent/ethanol/coffee/b52 = 10, /datum/reagent/uranium = 1) - result_amount = 10 - -/datum/chemical_reaction/margarita - name = "Margarita" - result = /datum/reagent/ethanol/margarita - required_reagents = list(/datum/reagent/ethanol/tequilla = 2, /datum/reagent/drink/juice/lime = 1) - result_amount = 3 - -/datum/chemical_reaction/longislandicedtea - name = "Long Island Iced Tea" - result = /datum/reagent/ethanol/longislandicedtea - required_reagents = list(/datum/reagent/ethanol/vodka = 1, /datum/reagent/ethanol/gin = 1, /datum/reagent/ethanol/tequilla = 1, /datum/reagent/ethanol/cuba_libre = 3) - result_amount = 6 - -/datum/chemical_reaction/threemileisland - name = "Three Mile Island Iced Tea" - result = /datum/reagent/ethanol/threemileisland - required_reagents = list(/datum/reagent/ethanol/longislandicedtea = 10, /datum/reagent/uranium = 1) - result_amount = 10 - -/datum/chemical_reaction/whiskeysoda - name = "Whiskey Soda" - result = /datum/reagent/ethanol/whiskeysoda - required_reagents = list(/datum/reagent/ethanol/whiskey = 2, /datum/reagent/drink/sodawater = 1) - result_amount = 3 - -/datum/chemical_reaction/black_russian - name = "Black Russian" - result = /datum/reagent/ethanol/black_russian - required_reagents = list(/datum/reagent/ethanol/vodka = 2, /datum/reagent/ethanol/coffee/kahlua = 1) - result_amount = 3 - -/datum/chemical_reaction/manhattan - name = "Manhattan" - result = /datum/reagent/ethanol/manhattan - required_reagents = list(/datum/reagent/ethanol/whiskey = 2, /datum/reagent/ethanol/vermouth = 1) - result_amount = 3 - -/datum/chemical_reaction/manhattan_proj - name = "Manhattan Project" - result = /datum/reagent/ethanol/manhattan_proj - required_reagents = list(/datum/reagent/ethanol/manhattan = 10, /datum/reagent/uranium = 1) - result_amount = 10 - -/datum/chemical_reaction/vodka_tonic - name = "Vodka and Tonic" - result = /datum/reagent/ethanol/vodkatonic - required_reagents = list(/datum/reagent/ethanol/vodka = 2, /datum/reagent/drink/tonic = 1) - result_amount = 3 - -/datum/chemical_reaction/gin_fizz - name = "Gin Fizz" - result = /datum/reagent/ethanol/ginfizz - required_reagents = list(/datum/reagent/ethanol/gin = 1, /datum/reagent/drink/sodawater = 1, /datum/reagent/drink/juice/lime = 1) - result_amount = 3 - -/datum/chemical_reaction/bahama_mama - name = "Bahama Mama" - result = /datum/reagent/ethanol/bahama_mama - required_reagents = list(/datum/reagent/ethanol/rum = 2, /datum/reagent/drink/juice/orange = 2, /datum/reagent/drink/juice/lime = 1, /datum/reagent/drink/ice = 1) - result_amount = 6 - -/datum/chemical_reaction/singulo - name = "Singulo" - result = /datum/reagent/ethanol/singulo - required_reagents = list(/datum/reagent/ethanol/vodka = 5, /datum/reagent/radium = 1, /datum/reagent/ethanol/wine = 5) - result_amount = 10 - -/datum/chemical_reaction/alliescocktail - name = "Allies Cocktail" - result = /datum/reagent/ethanol/alliescocktail - required_reagents = list(/datum/reagent/ethanol/vodkamartini = 1, /datum/reagent/ethanol/martini = 1) - result_amount = 2 - -/datum/chemical_reaction/demonsblood - name = "Demon's Blood" - result = /datum/reagent/ethanol/demonsblood - required_reagents = list(/datum/reagent/ethanol/rum = 3, /datum/reagent/drink/spacemountainwind = 1, /datum/reagent/blood = 1, /datum/reagent/drink/dr_gibb = 1) - result_amount = 6 - -/datum/chemical_reaction/booger - name = "Booger" - result = /datum/reagent/ethanol/booger - required_reagents = list(/datum/reagent/drink/milk/cream = 2, /datum/reagent/drink/juice/banana = 1, /datum/reagent/ethanol/rum = 1, /datum/reagent/drink/juice/watermelon = 1) - result_amount = 5 - mix_message = "The solution thickens unpleasantly." - -/datum/chemical_reaction/antifreeze - name = "Anti-freeze" - result = /datum/reagent/ethanol/antifreeze - required_reagents = list(/datum/reagent/ethanol/vodka = 1, /datum/reagent/drink/milk/cream = 1, /datum/reagent/drink/ice = 1) - minimum_temperature = (0 CELSIUS) - 100 - maximum_temperature = 0 CELSIUS - result_amount = 3 - mix_message = "The solution thickens sluggishly." - -/datum/chemical_reaction/barefoot - name = "Barefoot" - result = /datum/reagent/ethanol/barefoot - required_reagents = list(/datum/reagent/drink/juice/berry = 1, /datum/reagent/drink/milk/cream = 1, /datum/reagent/ethanol/vermouth = 1) - result_amount = 3 - -/datum/chemical_reaction/grapesoda - name = "Grape Soda" - result = /datum/reagent/drink/grapesoda - required_reagents = list(/datum/reagent/drink/juice/grape = 2, /datum/reagent/drink/space_cola = 1) - result_amount = 3 - -/datum/chemical_reaction/sbiten - name = "Sbiten" - result = /datum/reagent/ethanol/sbiten - required_reagents = list(/datum/reagent/ethanol/mead = 10, /datum/reagent/capsaicin = 1) - result_amount = 10 - -/datum/chemical_reaction/red_mead - name = "Red Mead" - result = /datum/reagent/ethanol/red_mead - required_reagents = list(/datum/reagent/blood = 1, /datum/reagent/ethanol/mead = 1) - result_amount = 2 - -/datum/chemical_reaction/mead - name = "Mead" - result = /datum/reagent/ethanol/mead - required_reagents = list(/datum/reagent/nutriment/honey = 1, /datum/reagent/water = 1) - catalysts = list(/datum/reagent/enzyme = 5) - result_amount = 2 - -/datum/chemical_reaction/iced_beer - name = "Iced Beer" - result = /datum/reagent/ethanol/iced_beer - required_reagents = list(/datum/reagent/ethanol/beer = 10, /datum/reagent/frostoil = 1) - result_amount = 10 - mix_message = "The solution chills rapidly, frost forming on its surface." - -/datum/chemical_reaction/iced_beer2 - name = "Iced Beer" - result = /datum/reagent/ethanol/iced_beer - required_reagents = list(/datum/reagent/ethanol/beer = 5, /datum/reagent/drink/ice = 1) - result_amount = 6 - mix_message = "The ice clinks together in the beer." - -/datum/chemical_reaction/grog - name = "Grog" - result = /datum/reagent/ethanol/grog - required_reagents = list(/datum/reagent/ethanol/rum = 1, /datum/reagent/water = 1) - result_amount = 2 - -/datum/chemical_reaction/soy_latte - name = "Soy Latte" - result = /datum/reagent/drink/coffee/soy_latte - required_reagents = list(/datum/reagent/drink/coffee = 1, /datum/reagent/drink/milk/soymilk = 1) - result_amount = 2 - mix_message = "The soy milk suffuses the coffee with pale shades." - -/datum/chemical_reaction/cafe_latte - name = "Cafe Latte" - result = /datum/reagent/drink/coffee/cafe_latte - required_reagents = list(/datum/reagent/drink/coffee = 1, /datum/reagent/drink/milk = 1) - result_amount = 2 - mix_message = "The milk suffuses the coffee with pale shades." - -/datum/chemical_reaction/mocha_latte - name = "Mocha Latte" - result = /datum/reagent/drink/coffee/cafe_latte/mocha - required_reagents = list(/datum/reagent/drink/coffee/cafe_latte = 2, /datum/reagent/drink/syrup_chocolate = 1) - result_amount = 3 - mix_message = "The chocolate swirls into the latte." - -/datum/chemical_reaction/soy_mocha_latte - name = "Mocha Soy Latte" - result = /datum/reagent/drink/coffee/soy_latte/mocha - required_reagents = list(/datum/reagent/drink/coffee/soy_latte = 3, /datum/reagent/drink/syrup_chocolate = 1) - result_amount = 4 - mix_message = "The chocolate swirls into the latte." - -/datum/chemical_reaction/ice_mocha_latte - name = "Iced Mocha Latte" - result = /datum/reagent/drink/coffee/icecoffee/cafe_latte/mocha - required_reagents = list(/datum/reagent/drink/ice = 1, /datum/reagent/drink/coffee/cafe_latte/mocha = 2) - result_amount = 3 - mix_message = "The ice clinks together in the chilled mocha latte." - -/datum/chemical_reaction/ice_soy_mocha_latte - name = "Iced Soy Mocha Latte" - result = /datum/reagent/drink/coffee/icecoffee/soy_latte/mocha - required_reagents = list(/datum/reagent/drink/ice = 1, /datum/reagent/drink/coffee/soy_latte/mocha = 2) - result_amount = 3 - mix_message = "The ice clinks together in the chilled soy mocha latte." - -/datum/chemical_reaction/pumpkin_latte - name = "Pumpkin Spice Latte" - result = /datum/reagent/drink/coffee/cafe_latte/pumpkin - required_reagents = list(/datum/reagent/drink/coffee/cafe_latte = 2, /datum/reagent/drink/syrup_pumpkin = 1) - result_amount = 3 - mix_message = "The pumpkin spice swirls into the latte." - -/datum/chemical_reaction/soy_pumpkin_latte - name = "Pumpkin Spice Soy Latte" - result = /datum/reagent/drink/coffee/soy_latte/pumpkin - required_reagents = list(/datum/reagent/drink/coffee/soy_latte = 3, /datum/reagent/drink/syrup_pumpkin = 1) - result_amount = 4 - mix_message = "The pumpkin spice swirls into the latte." - -/datum/chemical_reaction/ice_pumpkin_latte - name = "Iced Pumpkin Spice Latte" - result = /datum/reagent/drink/coffee/icecoffee/cafe_latte/pumpkin - required_reagents = list(/datum/reagent/drink/ice = 1, /datum/reagent/drink/coffee/cafe_latte/pumpkin = 2) - result_amount = 3 - mix_message = "The ice clinks together in the chilled pumpkin spice latte." - -/datum/chemical_reaction/ice_soy_pumpkin_latte - name = "Iced Pumpkin Spice Soy Latte" - result = /datum/reagent/drink/coffee/icecoffee/soy_latte/pumpkin - required_reagents = list(/datum/reagent/drink/ice = 1, /datum/reagent/drink/coffee/soy_latte/pumpkin = 2) - result_amount = 3 - mix_message = "The ice clinks together in the chilled pumpkin spice soy latte." - -/datum/chemical_reaction/acidspit - name = "Acid Spit" - result = /datum/reagent/ethanol/acid_spit - required_reagents = list(/datum/reagent/acid = 1, /datum/reagent/ethanol/wine = 5) - result_amount = 6 - mix_message = "The solution curdles into an unpleasant, slimy liquid." - -/datum/chemical_reaction/amasec - name = "Amasec" - result = /datum/reagent/ethanol/amasec - required_reagents = list(/datum/reagent/iron = 1, /datum/reagent/ethanol/wine = 5, /datum/reagent/ethanol/vodka = 5) - result_amount = 10 - -/datum/chemical_reaction/changelingsting - name = "Changeling Sting" - result = /datum/reagent/ethanol/changelingsting - required_reagents = list(/datum/reagent/ethanol/screwdrivercocktail = 1, /datum/reagent/drink/juice/lime = 1, /datum/reagent/drink/juice/lemon = 1) - result_amount = 3 - mix_message = "The solution begins to shift and change colour." - -/datum/chemical_reaction/aloe - name = "Aloe" - result = /datum/reagent/ethanol/aloe - required_reagents = list(/datum/reagent/drink/milk/cream = 1, /datum/reagent/ethanol/specialwhiskey = 1, /datum/reagent/drink/juice/watermelon = 1) - result_amount = 3 - -/datum/chemical_reaction/andalusia - name = "Andalusia" - result = /datum/reagent/ethanol/andalusia - required_reagents = list(/datum/reagent/ethanol/rum = 1, /datum/reagent/ethanol/whiskey = 1, /datum/reagent/drink/juice/lemon = 1) - result_amount = 3 - -/datum/chemical_reaction/neurotoxin - name = "Neurotoxin" - result = /datum/reagent/ethanol/neurotoxin - required_reagents = list(/datum/reagent/ethanol/gargle_blaster = 1, /datum/reagent/soporific = 1) - result_amount = 2 - -/datum/chemical_reaction/snowwhite - name = "Snow White" - result = /datum/reagent/ethanol/snowwhite - required_reagents = list(/datum/reagent/ethanol/beer = 1, /datum/reagent/drink/lemon_lime = 1) - result_amount = 2 - -/datum/chemical_reaction/irishslammer - name = "Irish Slammer" - result = /datum/reagent/ethanol/irishslammer - required_reagents = list(/datum/reagent/ethanol/ale = 1, /datum/reagent/ethanol/irish_cream = 1) - result_amount = 2 - -/datum/chemical_reaction/syndicatebomb - name = "Syndicate Bomb" - result = /datum/reagent/ethanol/syndicatebomb - required_reagents = list(/datum/reagent/ethanol/beer = 1, /datum/reagent/ethanol/whiskey_cola = 1) - result_amount = 2 - -/datum/chemical_reaction/erikasurprise - name = "Erika Surprise" - result = /datum/reagent/ethanol/erikasurprise - required_reagents = list(/datum/reagent/ethanol/ale = 2, /datum/reagent/drink/juice/lime = 1, /datum/reagent/ethanol/whiskey = 1, /datum/reagent/drink/juice/banana = 1, /datum/reagent/drink/ice = 1) - result_amount = 6 - -/datum/chemical_reaction/devilskiss - name = "Devils Kiss" - result = /datum/reagent/ethanol/devilskiss - required_reagents = list(/datum/reagent/blood = 1, /datum/reagent/ethanol/coffee/kahlua = 1, /datum/reagent/ethanol/rum = 1) - result_amount = 3 - -/datum/chemical_reaction/hippiesdelight - name = "Hippies Delight" - result = /datum/reagent/ethanol/hippies_delight - required_reagents = list(/datum/reagent/psilocybin = 1, /datum/reagent/ethanol/gargle_blaster = 1) - result_amount = 2 - -/datum/chemical_reaction/bananahonk - name = "Banana Honk" - result = /datum/reagent/ethanol/bananahonk - required_reagents = list(/datum/reagent/drink/juice/banana = 1, /datum/reagent/drink/milk/cream = 1, /datum/reagent/sugar = 1) - result_amount = 3 - -/datum/chemical_reaction/silencer - name = "Silencer" - result = /datum/reagent/ethanol/silencer - required_reagents = list(/datum/reagent/drink/nothing = 1, /datum/reagent/drink/milk/cream = 1, /datum/reagent/sugar = 1) - result_amount = 3 - -/datum/chemical_reaction/driestmartini - name = "Driest Martini" - result = /datum/reagent/ethanol/driestmartini - required_reagents = list(/datum/reagent/drink/nothing = 1, /datum/reagent/ethanol/gin = 1) - result_amount = 2 - -/datum/chemical_reaction/lemonade - name = "Lemonade" - result = /datum/reagent/drink/lemonade - required_reagents = list(/datum/reagent/drink/juice/lemon = 1, /datum/reagent/sugar = 1, /datum/reagent/water = 1) - result_amount = 3 - -/datum/chemical_reaction/kiraspecial - name = "Kira Special" - result = /datum/reagent/drink/kiraspecial - required_reagents = list(/datum/reagent/drink/juice/orange = 1, /datum/reagent/drink/juice/lime = 1, /datum/reagent/drink/sodawater = 1) - result_amount = 3 - -/datum/chemical_reaction/triplecitrus - name = "Triple Citrus" - result = /datum/reagent/drink/triplecitrus - required_reagents = list(/datum/reagent/drink/juice/orange = 1, /datum/reagent/drink/juice/lime = 1, /datum/reagent/drink/juice/lemon = 1) - result_amount = 3 - -/datum/chemical_reaction/milkshake - name = "Milkshake" - result = /datum/reagent/drink/milkshake - required_reagents = list(/datum/reagent/drink/milk/cream = 1, /datum/reagent/drink/ice = 2, /datum/reagent/drink/milk = 2) - result_amount = 5 - -/datum/chemical_reaction/rewriter - name = "Rewriter" - result = /datum/reagent/drink/rewriter - required_reagents = list(/datum/reagent/drink/spacemountainwind = 1, /datum/reagent/drink/coffee = 1) - result_amount = 2 - -/datum/chemical_reaction/suidream - name = "Sui Dream" - result = /datum/reagent/ethanol/suidream - required_reagents = list(/datum/reagent/drink/space_up = 1, /datum/reagent/ethanol/bluecuracao = 1, /datum/reagent/ethanol/melonliquor = 1) - result_amount = 3 - -/datum/chemical_reaction/rum - name = "Rum" - result = /datum/reagent/ethanol/rum - required_reagents = list(/datum/reagent/sugar = 1, /datum/reagent/water = 1) - catalysts = list(/datum/reagent/enzyme = 5) - result_amount = 2 - mix_message = "The solution roils as it rapidly ferments into a red-brown liquid." - -/datum/chemical_reaction/ships_surgeon - name = "Ship's Surgeon" - result = /datum/reagent/ethanol/ships_surgeon - required_reagents = list(/datum/reagent/ethanol/rum = 1, /datum/reagent/drink/dr_gibb = 2, /datum/reagent/drink/ice = 1) - result_amount = 4 - -/datum/chemical_reaction/luminol - name = "Luminol" - result = /datum/reagent/luminol - required_reagents = list(/datum/reagent/hydrazine = 2, /datum/reagent/carbon = 2, /datum/reagent/ammonia = 2) - result_amount = 6 - mix_message = "The solution begins to gleam with a fey inner light." - -/datum/chemical_reaction/oxyphoron - name = "Oxyphoron" - result = /datum/reagent/toxin/phoron/oxygen - required_reagents = list(/datum/reagent/water = 1, /datum/reagent/toxin/phoron = 1) - result_amount = 2 - mix_message = "The solution boils violently, shedding wisps of vapor." - -/datum/chemical_reaction/deuterium - name = "Deuterium" - result = null - required_reagents = list(/datum/reagent/water = 10) - catalysts = list(/datum/reagent/toxin/phoron/oxygen = 5) - result_amount = 1 - mix_message = "The solution makes a loud cracking sound as it crystalizes." - -/datum/chemical_reaction/deuterium/on_reaction(var/datum/reagents/holder, var/created_volume, var/reaction_flags) - ..() - var/turf/T = get_turf(holder.my_atom) - if(istype(T)) new /obj/item/stack/material/deuterium(T, created_volume) - return - -/datum/chemical_reaction/antidexafen - name = "Antidexafen" - result = /datum/reagent/antidexafen - required_reagents = list(/datum/reagent/paracetamol = 1, /datum/reagent/carbon = 1) - result_amount = 2 - -/datum/chemical_reaction/nanoblood - name = "Nanoblood" - result = /datum/reagent/nanoblood - required_reagents = list(/datum/reagent/dexalinp = 1, /datum/reagent/iron = 1, /datum/reagent/blood = 1) - result_amount = 3 - mix_message = "The solution thickens slowly into a glossy liquid." - -/datum/chemical_reaction/vinegar - name = "Apple Vinegar" - result = /datum/reagent/nutriment/vinegar - required_reagents = list(/datum/reagent/drink/juice/apple = 10) - catalysts = list(/datum/reagent/enzyme = 5) - result_amount = 10 - mix_message = "The solution roils as it rapidly ferments into a sharp-smelling liquid." - -/datum/chemical_reaction/vinegar2 - name = "Clear Vinegar" - result = /datum/reagent/nutriment/vinegar - required_reagents = list(/datum/reagent/ethanol = 10) - catalysts = list(/datum/reagent/enzyme = 5) - result_amount = 10 - mix_message = "The solution roils as it rapidly ferments into a sharp-smelling liquid." - -/datum/chemical_reaction/mayo - name = "Vinegar Mayo" - result = /datum/reagent/nutriment/mayo - required_reagents = list(/datum/reagent/nutriment/vinegar = 5, /datum/reagent/nutriment/protein/egg = 5) - result_amount = 10 - mix_message = "The solution thickens into a glossy, creamy substance." - -/datum/chemical_reaction/mayo2 - name = "Lemon Mayo" - result = /datum/reagent/nutriment/mayo - required_reagents = list(/datum/reagent/drink/juice/lemon = 5, /datum/reagent/nutriment/protein/egg = 5) - result_amount = 10 - mix_message = "The solution thickens into a glossy, creamy substance." - -// psi-altering drug -/datum/chemical_reaction/three_eye - name = "Three Eye" - result = /datum/reagent/three_eye - result_amount = 2 - mix_message = "The surface of the oily, iridescent liquid twitches like a living thing." - minimum_temperature = 40 CELSIUS - reaction_sound = 'sound/effects/psi/power_used.ogg' - hidden_from_codex = TRUE - - catalysts = list( - /datum/reagent/toxin/carpotoxin = 1, - /datum/reagent/enzyme = 1 - ) - - required_reagents = list( - /datum/reagent/mindbreaker = 2, - /datum/reagent/toxin/phoron = 1, - /datum/reagent/blood = 1 - ) - -// tea expansion pack content - black tea drinks -/datum/chemical_reaction/icetea - name = "Iced Tea" - result = /datum/reagent/drink/tea/icetea - required_reagents = list(/datum/reagent/drink/ice = 1, /datum/reagent/drink/tea = 2) - result_amount = 3 - mix_message = "The ice clinks together in the tea." - -/datum/chemical_reaction/sweettea - name = "Sweet Tea" - result = /datum/reagent/drink/tea/icetea/sweet - required_reagents = list(/datum/reagent/drink/tea/icetea = 2, /datum/reagent/sugar = 1) - result_amount = 3 - mix_message = "The ice clinks together in the sweet tea." - -/datum/chemical_reaction/barongrey - name = "Baron Grey Tea" - result = /datum/reagent/drink/tea/barongrey - required_reagents = list(/datum/reagent/drink/tea = 2, /datum/reagent/drink/juice/orange = 1) - result_amount = 3 - mix_message = "The juice swirls into the tea." - -/datum/chemical_reaction/latte_barongrey - name = "London Fog" - result = /datum/reagent/drink/tea/barongrey/latte - required_reagents = list(/datum/reagent/drink/tea/barongrey = 2, /datum/reagent/drink/milk = 1) - result_amount = 3 - mix_message = "The milk swirls into the tea." - -/datum/chemical_reaction/soy_latte_barongrey - name = "Soy London Fog" - result = /datum/reagent/drink/tea/barongrey/soy_latte - required_reagents = list(/datum/reagent/drink/tea/barongrey = 2, /datum/reagent/drink/milk/soymilk = 1) - result_amount = 3 - mix_message = "The soy swirls into the tea." - -/datum/chemical_reaction/ice_latte_barongrey - name = "Iced London Fog" - result = /datum/reagent/drink/tea/icetea/barongrey/latte - required_reagents = list(/datum/reagent/drink/ice = 1, /datum/reagent/drink/tea/barongrey/latte = 2) - result_amount = 3 - mix_message = "The ice clinks together in the chilled london fog." - -/datum/chemical_reaction/ice_soy_latte_barongrey - name = "Iced Soy London Fog" - result = /datum/reagent/drink/tea/icetea/barongrey/soy_latte - required_reagents = list(/datum/reagent/drink/ice = 1, /datum/reagent/drink/tea/barongrey/soy_latte = 2) - result_amount = 3 - mix_message = "The ice clinks together in the chilled soy london fog." - -//green tea drinks -/datum/chemical_reaction/icetea_green - name = "Iced Green Tea" - result = /datum/reagent/drink/tea/icetea/green - required_reagents = list(/datum/reagent/drink/ice = 1, /datum/reagent/drink/tea/green = 2) - result_amount = 3 - mix_message = "The ice clinks together in the tea." - -/datum/chemical_reaction/sweettea_green - name = "Sweet Green Tea" - result = /datum/reagent/drink/tea/icetea/green/sweet - required_reagents = list(/datum/reagent/drink/tea/icetea/green = 2, /datum/reagent/sugar = 1) - result_amount = 3 - mix_message = "The ice clinks together in the sweet tea." - -/datum/chemical_reaction/maghreb_tea - name = "Maghrebi tea" - result = /datum/reagent/drink/tea/icetea/green/sweet/mint - required_reagents = list(/datum/reagent/drink/tea/icetea/green/sweet = 3) - catalysts = list(/datum/reagent/nutriment/mint) - result_amount = 3 - mix_message = "The mint swirls into the drink." - -/datum/chemical_reaction/icetea_chai - name = "Iced Chai Tea" - result = /datum/reagent/drink/tea/icetea/chai - required_reagents = list(/datum/reagent/drink/ice = 1, /datum/reagent/drink/tea/chai = 2) - result_amount = 3 - mix_message = "The ice clinks together in the tea." - -/datum/chemical_reaction/sweettea_chai - name = "Iced Chai Tea" - result = /datum/reagent/drink/tea/icetea/chai/sweet - required_reagents = list(/datum/reagent/drink/tea/icetea/chai = 2, /datum/reagent/sugar = 1) - result_amount = 3 - mix_message = "The ice clinks together in the sweet tea." - -/datum/chemical_reaction/latte_chai - name = "Chai Latte" - result = /datum/reagent/drink/tea/chai/latte - required_reagents = list(/datum/reagent/drink/tea/chai = 2, /datum/reagent/drink/milk = 1) - result_amount = 3 - mix_message = "The milk swirls into the drink." - -/datum/chemical_reaction/soy_latte_chai - name = "Chai Soy Latte" - result = /datum/reagent/drink/tea/chai/soy_latte - required_reagents = list(/datum/reagent/drink/tea/chai = 2, /datum/reagent/drink/milk/soymilk = 1) - result_amount = 3 - mix_message = "The milk swirls into the drink." - -/datum/chemical_reaction/ice_latte_chai - name = "Iced Chai Latte" - result = /datum/reagent/drink/tea/icetea/chai/latte - required_reagents = list(/datum/reagent/drink/ice = 1, /datum/reagent/drink/tea/chai/latte = 2) - result_amount = 3 - mix_message = "The ice clinks together in the chilled chai latte." - -/datum/chemical_reaction/ice_soy_latte_chai - name = "Iced Chai Soy Latte" - result = /datum/reagent/drink/tea/icetea/chai/soy_latte - required_reagents = list(/datum/reagent/drink/ice = 1, /datum/reagent/drink/tea/chai/soy_latte = 2) - result_amount = 3 - mix_message = "The ice clinks together in the chilled chai soy latte." - -/datum/chemical_reaction/icetea_red - name = "Iced Rooibos tea" - result = /datum/reagent/drink/tea/icetea/red - required_reagents = list(/datum/reagent/drink/ice = 1, /datum/reagent/drink/tea/red = 2) - result_amount = 3 - mix_message = "The ice clinks together in the tea." - -/datum/chemical_reaction/sweettea_red - name = "Iced Rooibos tea" - result = /datum/reagent/drink/tea/icetea/red/sweet - required_reagents = list(/datum/reagent/drink/tea/icetea/red = 2, /datum/reagent/sugar = 1) - result_amount = 3 - mix_message = "The ice clinks together in the sweet tea." - -/datum/chemical_reaction/chazuke - name = "Chazuke" - result = /datum/reagent/nutriment/rice/chazuke - required_reagents = list(/datum/reagent/nutriment/rice = 10, /datum/reagent/drink/tea/green = 1) - result_amount = 10 - mix_message = "The tea mingles with the rice." - -/datum/chemical_reaction/resin_pack - name = "Resin Globule" - result = null - required_reagents = list( - /datum/reagent/crystal = 1, - /datum/reagent/silicon = 2 - ) - catalysts = list( - /datum/reagent/toxin/phoron = 1 - ) - result_amount = 3 - mix_message = "The solution hardens and begins to crystallize." - -/datum/chemical_reaction/resin_pack/on_reaction(var/datum/reagents/holder, var/created_volume, var/reaction_flags) - ..() - var/turf/T = get_turf(holder.my_atom) - if(istype(T)) - var/create_stacks = Floor(created_volume) - if(create_stacks > 0) - new /obj/item/stack/medical/resin/handmade(T, create_stacks) - -/datum/chemical_reaction/crystal_agent - result = /datum/reagent/crystal - required_reagents = list(/datum/reagent/silicon = 1, /datum/reagent/tungsten = 1, /datum/reagent/acid/polyacid = 1) - minimum_temperature = 150 CELSIUS - maximum_temperature = 200 CELSIUS - result_amount = 3 - -/datum/chemical_reaction/immunobooster - result = /datum/reagent/immunobooster - required_reagents = list(/datum/reagent/cryptobiolin = 1, /datum/reagent/dylovene = 1) - minimum_temperature = 40 CELSIUS - result_amount = 2 - -// Alcohol Expansion - -//Alcohol -/datum/chemical_reaction/applecider - name = "Apple Cider" - result = /datum/reagent/ethanol/applecider - required_reagents = list(/datum/reagent/drink/juice/apple = 2, /datum/reagent/sugar = 1) - catalysts = list(/datum/reagent/nutriment = 5) - result_amount = 3 - -/datum/chemical_reaction/lunabrandy - name = "Lunar Brandy" - result = /datum/reagent/ethanol/lunabrandy - required_reagents = list(/datum/reagent/drink/juice/grape = 1, /datum/reagent/ethanol/wine = 2) - catalysts = list(/datum/reagent/nutriment = 5) - result_amount = 3 - -/datum/chemical_reaction/hellshenpa - name = "Hellshen Pale Ale" - result = /datum/reagent/ethanol/hellshenpa - required_reagents = list(/datum/reagent/ethanol/beer = 1, /datum/reagent/sugar = 1, /datum/reagent/water = 1) - result_amount = 3 - -/datum/chemical_reaction/vodkacola - name = "Vodka Cola" - result = /datum/reagent/ethanol/vodkacola - required_reagents = list(/datum/reagent/drink/space_cola = 1, /datum/reagent/ethanol/vodka = 2) - result_amount = 3 - -/datum/chemical_reaction/red_whiskey - name = "Red Whiskey" - result = /datum/reagent/ethanol/red_whiskey - required_reagents = list(/datum/reagent/drink/juice/berry = 1, /datum/reagent/drink/juice/tomato = 1, /datum/reagent/ethanol/whiskey = 1, /datum/reagent/ethanol/specialwhiskey = 1) - result_amount = 4 - -/datum/chemical_reaction/nevadan_gold - name = "Nevadan Gold Whiskey" - result = /datum/reagent/ethanol/nevadan_gold - required_reagents = list(/datum/reagent/ethanol/specialwhiskey = 1, /datum/reagent/ethanol/goldschlager = 1, /datum/reagent/ethanol/irish_cream = 1,) - result_amount = 3 - -/datum/chemical_reaction/arak - name = "Arak" - result = /datum/reagent/ethanol/arak - required_reagents = list(/datum/reagent/ethanol/absinthe = 2, /datum/reagent/drink/juice/grape = 1) - catalysts = list(/datum/reagent/nutriment) - result_amount = 3 - minimum_temperature = (0 CELSIUS) - 100 - maximum_temperature = 0 CELSIUS - mix_message = "The aniseed ferments into a translucent white mixture" - -/datum/chemical_reaction/blackstrap - name = "Blackstrap" - result = /datum/reagent/ethanol/blackstrap - required_reagents = list(/datum/reagent/ethanol/whiskey = 1, /datum/reagent/ethanol/rum = 2) - result_amount = 3 - -/datum/chemical_reaction/stag - name = "Stag" - result = /datum/reagent/ethanol/stag - required_reagents = list(/datum/reagent/drink/tea = 2, /datum/reagent/ethanol/rum = 1) - result_amount = 3 - -/datum/chemical_reaction/tadmorwine - name = "Tadmoran Wine" - result = /datum/reagent/ethanol/tadmorwine - required_reagents = list(/datum/reagent/ethanol/wine = 2, /datum/reagent/drink/grenadine = 1) - catalysts = list(/datum/reagent/nutriment/mint) - result_amount = 3 - -/datum/chemical_reaction/jagerbomb - name = "Jagerbomb" - result = /datum/reagent/ethanol/jagerbomb - required_reagents = list(/datum/reagent/drink/beastenergy = 1, /datum/reagent/ethanol/jagermeister = 2) - result_amount = 3 - -/datum/chemical_reaction/jagermeister - name = "Jagermeister" - result = /datum/reagent/ethanol/jagermeister - required_reagents = list(/datum/reagent/ethanol/herbal = 2, /datum/reagent/water = 1) - catalysts = list(/datum/reagent/nutriment/mint) - result_amount = 3 - -/datum/chemical_reaction/lonestarmule - name = "Lonestar Mule" - result = /datum/reagent/ethanol/lonestarmule - required_reagents = list(/datum/reagent/ethanol/whiskey = 2, /datum/reagent/drink/gingerbeer = 1, /datum/reagent/drink/juice/lime = 1) - result_amount = 4 - -/datum/chemical_reaction/llanbrydewhiskey - name = "Llanbryde Whiskey" - result = /datum/reagent/ethanol/llanbrydewhiskey - required_reagents = list(/datum/reagent/ethanol/specialwhiskey= 2, /datum/reagent/ethanol/gin = 1) - catalysts = list(/datum/reagent/sugar) - result_amount = 3 - -/datum/chemical_reaction/kvass - name = "Kvass" - result = /datum/reagent/ethanol/kvass - required_reagents = list(/datum/reagent/sugar = 1, /datum/reagent/ethanol/beer = 1) - catalysts = list(/datum/reagent/enzyme = 5) - result_amount = 3 - -/datum/chemical_reaction/gargled - name = "Gargled" - result = /datum/reagent/ethanol/coffee/gargled - required_reagents = list(/datum/reagent/ethanol/blackstrap = 1, /datum/reagent/drink/coffee = 2) - result_amount = 3 - -/datum/chemical_reaction/bogus - name = "Bogus" - result = /datum/reagent/ethanol/bogus - required_reagents = list(/datum/reagent/ethanol/gin = 1, /datum/reagent/ethanol/blackstrap = 2) - result_amount = 3 - -/datum/chemical_reaction/moscowmule - name = "Moscow Mule" - result = /datum/reagent/ethanol/moscowmule - required_reagents = list(/datum/reagent/ethanol/vodka = 2, /datum/reagent/drink/gingerbeer = 1, /datum/reagent/drink/juice/lime = 1) - result_amount = 4 - -/datum/chemical_reaction/springpunch - name = "Gilgamesh Spring Punch" - result = /datum/reagent/ethanol/springpunch - required_reagents = list(/datum/reagent/ethanol/vodka = 2, /datum/reagent/drink/juice/lemon = 1, /datum/reagent/sugar = 1) - result_amount = 4 - -/datum/chemical_reaction/jimmygideon - name = "Jimmy Gideon" - result = /datum/reagent/ethanol/jimmygideon - required_reagents = list(/datum/reagent/drink/milk/cream = 1, /datum/reagent/ethanol/cognac = 1, /datum/reagent/drink/hot_coco = 1) - result_amount = 3 - -/datum/chemical_reaction/kamikaze - name = "Kamikaze" - result = /datum/reagent/ethanol/kamikaze - required_reagents = list(/datum/reagent/ethanol/vodka = 1, /datum/reagent/ethanol/triple_sec = 1, /datum/reagent/drink/juice/lime = 1) - result_amount = 3 - -/datum/chemical_reaction/grasshopper - name = "Grasshopper" - result = /datum/reagent/ethanol/grasshopper - required_reagents = list(/datum/reagent/drink/milk/cream = 1, /datum/reagent/ethanol/creme_de_menthe = 1, /datum/reagent/ethanol/creme_de_cacao = 1) - result_amount = 3 - -/datum/chemical_reaction/stinger - name = "Stinger" - result = /datum/reagent/ethanol/stinger - required_reagents = list(/datum/reagent/ethanol/creme_de_menthe = 1, /datum/reagent/ethanol/cognac = 2) - result_amount = 3 - -/datum/chemical_reaction/alexander - name = "Alexander" - result = /datum/reagent/ethanol/alexander - required_reagents = list(/datum/reagent/ethanol/creme_de_cacao = 1, /datum/reagent/ethanol/cognac = 1, /datum/reagent/drink/milk/cream = 1) - result_amount = 3 - -/datum/chemical_reaction/drifter - name = "Drifter" - result = /datum/reagent/ethanol/drifter - required_reagents = list(/datum/reagent/ethanol/rum = 1, /datum/reagent/ethanol/cognac = 2, /datum/reagent/ethanol/triple_sec = 1, /datum/reagent/drink/juice/lemon = 1) - result_amount = 5 - -/datum/chemical_reaction/forget_me_shot - name = "Forget-me-shot" - result = /datum/reagent/ethanol/forget_me_shot - required_reagents = list(/datum/reagent/ethanol/jagermeister = 1, /datum/reagent/ethanol/gin = 1, /datum/reagent/ethanol/triple_sec = 1, /datum/reagent/nutriment/vinegar =1, /datum/reagent/ethanol/hooch = 1) - result_amount = 3 - mix_message = "The liquid is brought to a roiling boil, and then suddenly stops." - -/datum/chemical_reaction/bad_touch - name = "Bad Touch" - result = /datum/reagent/ethanol/bad_touch - required_reagents = list(/datum/reagent/ethanol/vodka = 2, /datum/reagent/ethanol/rum = 2, /datum/reagent/ethanol/absinthe = 1, /datum/reagent/drink/lemon_lime = 1) - result_amount = 6 - -/datum/chemical_reaction/sugar_rush - name = "Sugar Rush" - result = /datum/reagent/ethanol/sugar_rush - required_reagents = list(/datum/reagent/drink/spacemountainwind = 4, /datum/reagent/drink/grenadine = 1, /datum/reagent/ethanol/vodka = 1) - result_amount = 6 - -/datum/chemical_reaction/cobalt_velvet - name = "Cobalt Velvet" - result = /datum/reagent/ethanol/cobalt_velvet - required_reagents = list(/datum/reagent/ethanol/champagne = 3, /datum/reagent/drink/space_cola = 1, /datum/reagent/ethanol/bluecuracao = 2) - result_amount = 6 - -/datum/chemical_reaction/fringe_weaver - name = "Fringe Weaver" - result = /datum/reagent/ethanol/fringe_weaver - required_reagents = list(/datum/reagent/sugar = 1, /datum/reagent/ethanol = 2, /datum/reagent/water= 1) - result_amount = 4 - -// Non-Alcoholic Drinks - -/datum/chemical_reaction/nothing - name = "Nothing" - result = /datum/reagent/drink/nothing - required_reagents = list(/datum/reagent/drink/milk/cream = 1, /datum/reagent/sugar = 1, /datum/reagent/water= 1) - result_amount = 3 - -/datum/chemical_reaction/fools_gold - name = "Fools Gold" - result = /datum/reagent/drink/fools_gold - required_reagents = list(/datum/reagent/water = 2, /datum/reagent/ethanol/whiskey = 1) - result_amount = 3 - -/datum/chemical_reaction/snowball - name = "Snowball" - result = /datum/reagent/drink/snowball - required_reagents = list(/datum/reagent/drink/ice = 2, /datum/reagent/drink/coffee/icecoffee = 1, /datum/reagent/drink/juice/watermelon = 1) - result_amount = 4 - minimum_temperature = (0 CELSIUS) - 100 - maximum_temperature = 0 CELSIUS - mix_message = "The solution turns pure white." - -/datum/chemical_reaction/browndwarf - name = "Brown Dwarf" - result = /datum/reagent/drink/browndwarf - required_reagents = list(/datum/reagent/drink/hot_coco = 2, /datum/reagent/drink/spacemountainwind = 1) - result_amount = 3 - minimum_temperature = 70 CELSIUS - maximum_temperature = (70 CELSIUS) + 100 - mix_message = "The chocolate puffs up into a semi-solid state" - -/datum/chemical_reaction/kefir - name = "Kefir" - result = /datum/reagent/drink/kefir - required_reagents = list(/datum/reagent/drink/milk = 2, /datum/reagent/drink/milk/cream = 1) - result_amount = 3 - catalysts = list(/datum/reagent/nutriment) - mix_message = "The milk ferments into kefir" - -// Alien Drinks - -/datum/chemical_reaction/skrianhi - name = "Skrianhi Tea" - result = /datum/reagent/drink/alien/skrianhi - required_reagents = list(/datum/reagent/drink/alien/unathijuice = 2, /datum/reagent/water = 1) - result_amount = 3 - minimum_temperature = 50 CELSIUS - maximum_temperature = (70 CELSIUS) + 100 - mix_message = "The tea turns a bitter black." - -/datum/chemical_reaction/mumbaksting - name = "Mumbak Sting" - result = /datum/reagent/drink/alien/mumbaksting - required_reagents = list(/datum/reagent/drink/alien/unathijuice = 2, /datum/reagent/toxin = 1) - result_amount = 3 - mix_message = "The toxins mix with the juice to create a dark red substance." - -/datum/chemical_reaction/wasgaelhi - name = "Wasgaelhi" - result = /datum/reagent/ethanol/alien/wasgaelhi - required_reagents = list(/datum/reagent/drink/alien/unathijuice = 2, /datum/reagent/ethanol/wine = 1) - result_amount = 3 - mix_message = "The mixture turns a dull purple." - -/datum/chemical_reaction/kzkzaa - name = "Kzkzaa" - result = /datum/reagent/drink/alien/kzkzaa - required_reagents = list(/datum/reagent/drink/alien/unathijuice = 2, /datum/reagent/nutriment/protein = 1) - result_amount = 3 - mix_message = "The mixture turns a deep orange." - -//Fruit Expansion - -/datum/chemical_reaction/qokkhrona - name = "Qokk'Hrona" - result = /datum/reagent/ethanol/alien/qokkhrona - required_reagents = list(/datum/reagent/ethanol/alien/qokkloa = 2, /datum/reagent/ethanol/wine = 1) - catalysts = list(/datum/reagent/enzyme = 5) - result_amount = 3 - mix_message = "The mixture turns a soft red, bubbling faintly" - -/datum/chemical_reaction/coconutmilk - name = "Coconut Milk" - result = /datum/reagent/drink/coconut/milk - required_reagents = list(/datum/reagent/drink/coconut = 2) - result_amount = 3 - minimum_temperature = 50 CELSIUS - maximum_temperature = (50 CELSIUS) + 100 - catalysts = list(/datum/reagent/nutriment = 5) - mix_message = "The water dilutes into delicious looking milk" - -/datum/chemical_reaction/pinacolada - name = "Pino Colada" - result = /datum/reagent/ethanol/pinacolada - required_reagents = list(/datum/reagent/drink/coconut/milk = 1, /datum/reagent/ethanol/rum = 2, /datum/reagent/drink/juice/pineapple = 1) - result_amount = 4 - mix_message = "The cocktail turns a vibrant orange" - -/datum/chemical_reaction/horchata - name = "Horchata" - result = /datum/reagent/ethanol/horchata - required_reagents = list(/datum/reagent/ethanol/rum = 2, /datum/reagent/drink/milk/cream = 1, /datum/reagent/cinnamon = 1, /datum/reagent/drink/syrup_vanilla = 1) - result_amount = 5 - mix_message = "The liquid froths up into a rich, cool mixture" - -/datum/chemical_reaction/apple_soda - name = "Apple Soda" - result = /datum/reagent/drink/apple_soda - required_reagents = list(/datum/reagent/drink/sodawater = 2, /datum/reagent/drink/juice/apple = 1) - result_amount = 3 - mix_message = "The liquid blends together smoothly" - -/datum/chemical_reaction/orange_soda - name = "Fizzy Orange" - result = /datum/reagent/drink/orange_soda - required_reagents = list(/datum/reagent/drink/sodawater = 2, /datum/reagent/drink/juice/orange = 1, /datum/reagent/sugar = 1) - result_amount = 4 - mix_message = "The liquid blends together smoothly" - -/datum/chemical_reaction/pork_soda - name = "Pork Soda" - result = /datum/reagent/drink/porksoda - required_reagents = list(/datum/reagent/drink/sodawater = 2, /datum/reagent/nutriment/protein = 1) - result_amount = 3 - mix_message = "The liquid blends together smoothly" - -/datum/chemical_reaction/strawberry_soda - name = "Strawberry Soda" - result = /datum/reagent/drink/strawberry_soda - required_reagents = list(/datum/reagent/drink/sodawater = 2, /datum/reagent/drink/juice/berry = 1) - result_amount = 3 - mix_message = "The liquid blends together smoothly" - -/datum/chemical_reaction/vanilla_cola - name = "Vanilla Cola" - result = /datum/reagent/drink/vanilla_cola - required_reagents = list(/datum/reagent/drink/space_cola = 2, /datum/reagent/drink/syrup_vanilla = 1) - result_amount = 3 - mix_message = "The liquid blends together smoothly" - -/datum/chemical_reaction/orange_cola - name = "Orange Cola" - result = /datum/reagent/drink/orange_cola - required_reagents = list(/datum/reagent/drink/space_cola = 2, /datum/reagent/drink/juice/orange = 1) - result_amount = 3 - mix_message = "The liquid blends together smoothly" - -/datum/chemical_reaction/cherry_cola - name = "Cherry Cola" - result = /datum/reagent/drink/cherry_cola - required_reagents = list(/datum/reagent/drink/space_cola = 2, /datum/reagent/nutriment/cherryjelly = 1) - result_amount = 3 - mix_message = "The liquid blends together smoothly" - -/datum/chemical_reaction/coffee_cola - name = "Coffee Cola" - result = /datum/reagent/drink/coffee/coffee_cola - required_reagents = list(/datum/reagent/drink/space_cola = 2, /datum/reagent/drink/coffee = 1) - result_amount = 3 - mix_message = "The liquid blends together smoothly" - -/datum/chemical_reaction/diet_cola - name = "Diet Cola" - result = /datum/reagent/drink/diet_cola - required_reagents = list(/datum/reagent/drink/space_cola = 2, /datum/reagent/lipozine = 1) - result_amount = 3 - mix_message = "The cola ceases fizzing" - -/datum/chemical_reaction/cola_float - name = "Cola Float" - result = /datum/reagent/drink/milkshake/float - required_reagents = list(/datum/reagent/drink/milkshake = 2, /datum/reagent/drink/space_cola = 1) - result_amount = 3 - mix_message = "The cola turns the milkshake a dark black colour" - -/datum/chemical_reaction/posset - name = "Posset" - result = /datum/reagent/ethanol/posset - required_reagents = list(/datum/reagent/drink/milk = 2, /datum/reagent/drink/juice/lemon = 1, /datum/reagent/ethanol/ale = 1) - result_amount = 4 - mix_message = "The milk curdles sweetly" - -/datum/chemical_reaction/posca - name = "Posca" - result = /datum/reagent/drink/posca - required_reagents = list(/datum/reagent/nutriment/vinegar = 1, /datum/reagent/water = 1, /datum/reagent/drink/beastenergy = 1) - result_amount = 3 - mix_message = "The mixture turns a dilute brown" - -/datum/chemical_reaction/alcoholfreebeer - name = "Alcohol-Free Beer" - result = /datum/reagent/drink/alcoholfreebeer - required_reagents = list(/datum/reagent/ethanol/beer = 2, /datum/reagent/ethylredoxrazine = 1) - result_amount = 3 - mix_message = "The liquid ceases bubbling" - -/datum/chemical_reaction/oldfashioned - name = "Old Fashioned" - result = /datum/reagent/ethanol/oldfashioned - required_reagents = list(/datum/reagent/ethanol/whiskey = 2, /datum/reagent/sugar = 1, /datum/reagent/ethanol/herbal = 1) - result_amount = 4 - -/datum/chemical_reaction/daiquiri - name = "Daiquiri" - result = /datum/reagent/ethanol/daiquiri - required_reagents = list(/datum/reagent/ethanol/rum = 2, /datum/reagent/drink/juice/lime = 1, /datum/reagent/drink/affelerin = 1) - result_amount = 4 - -/datum/chemical_reaction/sidecar - name = "Sidecar" - result = /datum/reagent/ethanol/sidecar - required_reagents = list(/datum/reagent/ethanol/cognac = 2, /datum/reagent/drink/juice/lemon = 1, /datum/reagent/ethanol/bluecuracao = 1) - result_amount = 4 - -/datum/chemical_reaction/caesar - name = "Caesar" - result = /datum/reagent/ethanol/caesar - required_reagents = list(/datum/reagent/ethanol/vodka = 2, /datum/reagent/drink/juice/tomato = 1, /datum/reagent/capsaicin = 1) - result_amount = 4 - -/datum/chemical_reaction/caipirinha - name = "Caipirinha" - result = /datum/reagent/ethanol/caipirinha - required_reagents = list(/datum/reagent/ethanol/cachaca = 2, /datum/reagent/drink/juice/lime = 1, /datum/reagent/sugar = 1) - result_amount = 4 - -/datum/chemical_reaction/sangria - name = "Sangria" - result = /datum/reagent/ethanol/sangria - required_reagents = list(/datum/reagent/ethanol/wine = 2, /datum/reagent/drink/juice/orange = 1) - result_amount = 3 - -/datum/chemical_reaction/baijiu - name = "Baijiu" - result = /datum/reagent/ethanol/baijiu - required_reagents = list(/datum/reagent/ethanol/moonshine = 2, /datum/reagent/nutriment/rice = 1) - result_amount = 3 - -/datum/chemical_reaction/doogh - name = "Doogh" - result = /datum/reagent/drink/doogh - required_reagents = list(/datum/reagent/drink/milk/cream = 1, /datum/reagent/water = 1, /datum/reagent/nutriment/mint = 1) - result_amount = 3 - mix_message = "The mixture becomes soft and easy to stir" - -/datum/chemical_reaction/honeywine - name = "Honey Wine" - result = /datum/reagent/ethanol/honeywine - required_reagents = list(/datum/reagent/nutriment/honey = 2, /datum/reagent/ethanol/hellshenpa = 1) - result_amount = 3 - -/datum/chemical_reaction/dawa - name = "Dawa" - result = /datum/reagent/ethanol/dawa - required_reagents = list(/datum/reagent/ethanol/vodka = 2, /datum/reagent/nutriment/honey = 1, /datum/reagent/drink/juice/lime = 1 ) - result_amount = 4 - -/datum/chemical_reaction/rakia - name = "Rakia" - result = /datum/reagent/ethanol/rakia - required_reagents = list(/datum/reagent/ethanol/lunabrandy = 2, /datum/reagent/drink/juice/grape/green = 1) - result_amount = 4 - catalysts = list(/datum/reagent/enzyme = 5) - -/datum/chemical_reaction/ironbru - name = "Iron-Bru" - result = /datum/reagent/drink/ironbru - required_reagents = list(/datum/reagent/drink/ionbru = 2, /datum/reagent/iron = 1) - result_amount = 3 - -/datum/chemical_reaction/eggnog - name = "Eggnog" - result = /datum/reagent/drink/eggnog - required_reagents = list(/datum/reagent/nutriment/protein/egg = 1, /datum/reagent/drink/milk/ = 1, /datum/reagent/sugar = 1) - result_amount = 3 - -/datum/chemical_reaction/espresso - name = "Espresso" - result = /datum/reagent/drink/coffee/espresso - required_reagents = list(/datum/reagent/drink/coffee = 2, /datum/reagent/water = 1) - result_amount = 3 - minimum_temperature = 80 CELSIUS - mix_message = "The coffee boils over into a rich, dark texture." - -/datum/chemical_reaction/americano - name = "Americano" - result = /datum/reagent/drink/coffee/americano - required_reagents = list(/datum/reagent/drink/coffee/espresso = 2, /datum/reagent/water = 1) - minimum_temperature = 50 CELSIUS - result_amount = 3 - mix_message = "The water mixes with the coffee to dilute it." - -/datum/chemical_reaction/yuenyeung - name = "Yuenyeung" - result = /datum/reagent/drink/coffee/yuenyeung - required_reagents = list(/datum/reagent/drink/coffee = 1, /datum/reagent/drink/tea = 1) - result_amount = 2 - -/datum/chemical_reaction/frappe - name = "Iced Frappe" - result = /datum/reagent/drink/coffee/iced/frappe - required_reagents = list(/datum/reagent/drink/coffee/icecoffee = 3, /datum/reagent/sugar = 1) - result_amount = 4 - minimum_temperature = (0 CELSIUS) - 100 - maximum_temperature = 0 CELSIUS - mix_message = "The solution chills" - -/datum/chemical_reaction/carajillo - name = "Carajillo" - result = /datum/reagent/ethanol/coffee/carajillo - required_reagents = list(/datum/reagent/drink/coffee = 2, /datum/reagent/ethanol/coffee/kahlua = 1) - result_amount = 3 - -/datum/chemical_reaction/capilliumate - name = "Capilliumate" - result =/datum/reagent/capilliumate - result_amount = 3 - required_reagents = list( - /datum/reagent/radium = 1, - /datum/reagent/nutriment/protein = 1, - /datum/reagent/mutagen = 1 - ) - mix_message = "The solution bubbles and thickens into strands." - -/datum/chemical_reaction/hair_dye - name = "Hair Dye" - result = /datum/reagent/hair_dye - result_amount = 2 - required_reagents = list( - /datum/reagent/enzyme = 1, - /datum/reagent/ammonia = 1 - ) - -/datum/chemical_reaction/colored_hair_dye/red - name = "Red Hair Dye" - result = /datum/reagent/colored_hair_dye/red - result_amount = 1 - required_reagents = list( - /datum/reagent/hair_dye = 1, - /datum/reagent/crayon_dust/red = 1 - ) - -/datum/chemical_reaction/colored_hair_dye/orange - name = "Orange Hair Dye" - result = /datum/reagent/colored_hair_dye/orange - result_amount = 1 - required_reagents = list( - /datum/reagent/hair_dye = 1, - /datum/reagent/crayon_dust/orange = 1 - ) - -/datum/chemical_reaction/colored_hair_dye/yellow - name = "Yellow Hair Dye" - result = /datum/reagent/colored_hair_dye/yellow - result_amount = 1 - required_reagents = list( - /datum/reagent/hair_dye = 1, - /datum/reagent/crayon_dust/yellow = 1 - ) - -/datum/chemical_reaction/colored_hair_dye/green - name = "Green Hair Dye" - result = /datum/reagent/colored_hair_dye/green - result_amount = 1 - required_reagents = list( - /datum/reagent/hair_dye = 1, - /datum/reagent/crayon_dust/green = 1 - ) - -/datum/chemical_reaction/colored_hair_dye/blue - name = "Blue Hair Dye" - result = /datum/reagent/colored_hair_dye/blue - result_amount = 1 - required_reagents = list( - /datum/reagent/hair_dye = 1, - /datum/reagent/crayon_dust/blue = 1 - ) - -/datum/chemical_reaction/colored_hair_dye/purple - name = "Purple Hair Dye" - result = /datum/reagent/colored_hair_dye/purple - result_amount = 1 - required_reagents = list( - /datum/reagent/hair_dye = 1, - /datum/reagent/crayon_dust/purple = 1 - ) - -/datum/chemical_reaction/colored_hair_dye/grey - name = "Grey Hair Dye" - result = /datum/reagent/colored_hair_dye/grey - result_amount = 1 - required_reagents = list( - /datum/reagent/hair_dye = 1, - /datum/reagent/crayon_dust/grey = 1 - ) - -/datum/chemical_reaction/colored_hair_dye/brown - name = "Brown Hair Dye" - result = /datum/reagent/colored_hair_dye/brown - result_amount = 1 - required_reagents = list( - /datum/reagent/hair_dye = 1, - /datum/reagent/crayon_dust/brown = 1 - ) - -/datum/chemical_reaction/colored_hair_dye/black - name = "Black Hair Dye" - result = /datum/reagent/colored_hair_dye/black - result_amount = 3 - required_reagents = list( - /datum/reagent/colored_hair_dye/red = 1, - /datum/reagent/colored_hair_dye/blue = 1, - /datum/reagent/colored_hair_dye/yellow = 1 - ) - -/datum/chemical_reaction/colored_hair_dye/chaos - name = "Chaos Hair Dye" - result = /datum/reagent/colored_hair_dye/chaos - result_amount = 2 - required_reagents = list( - /datum/reagent/hair_dye = 1, - /datum/reagent/mutagen = 1 - ) - -/datum/chemical_reaction/colored_hair_dye/light_brown - name = "Light Brown Hair Dye" - result = /datum/reagent/colored_hair_dye/light_brown - result_amount = 1 - required_reagents = list( - /datum/reagent/colored_hair_dye/brown = 1 - ) - catalysts = list( - /datum/reagent/enzyme = 1 - ) - -/datum/chemical_reaction/colored_hair_dye/white - name = "White Hair Dye" - result = /datum/reagent/colored_hair_dye/white - result_amount = 1 - required_reagents = list( - /datum/reagent/colored_hair_dye/grey = 1 - ) - catalysts = list( - /datum/reagent/enzyme = 1 - ) diff --git a/code/modules/reagents/Chemistry-Sublimator.dm b/code/modules/reagents/Chemistry-Sublimator.dm deleted file mode 100644 index 0b4579bed2f88..0000000000000 --- a/code/modules/reagents/Chemistry-Sublimator.dm +++ /dev/null @@ -1,189 +0,0 @@ -/proc/create_gas_data_for_reagent(var/datum/reagent/reagent) - - var/kill_later - if(ispath(reagent)) - kill_later = TRUE - reagent = new reagent - - if(!istype(reagent)) - return - - var/gas_id = lowertext(reagent.name) - if(gas_id in gas_data.gases) - return - - gas_data.gases += gas_id - gas_data.name[gas_id] = reagent.name - gas_data.specific_heat[gas_id] = reagent.gas_specific_heat - gas_data.molar_mass[gas_id] = reagent.gas_molar_mass - gas_data.overlay_limit[gas_id] = reagent.gas_overlay_limit - gas_data.flags[gas_id] = reagent.gas_flags - gas_data.burn_product[gas_id] = reagent.gas_burn_product - gas_data.breathed_product[gas_id] = reagent.type - - if(reagent.gas_overlay) - var/obj/effect/gas_overlay/I = new() - I.icon_state = reagent.gas_overlay - I.color = initial(reagent.color) - gas_data.tile_overlay[gas_id] = I - gas_data.tile_overlay_color[gas_id] = reagent.color - - if(kill_later) - qdel(reagent) - -/obj/machinery/portable_atmospherics/reagent_sublimator - name = "reagent sublimator" - desc = "An advanced machine that converts liquid or solid reagents into gasses." - icon = 'icons/obj/subliminator.dmi' - icon_state = "sublimator-off-unloaded-notank" - density = TRUE - use_power = POWER_USE_IDLE - machine_name = "reagent sublimator" - machine_desc = "Sublimators draw reagents from a provided container and converts them into gases." - - var/icon_set = "subliminator" - var/sublimated_units_per_tick = 20 - var/obj/item/reagent_containers/container - var/list/reagent_whitelist //if this is set, the subliminator will only work with the listed reagents - var/output_temperature = T20C - -/obj/machinery/portable_atmospherics/reagent_sublimator/New() - . = ..() - if(holding) verbs |= /obj/machinery/portable_atmospherics/reagent_sublimator/proc/remove_tank - if(container) verbs |= /obj/machinery/portable_atmospherics/reagent_sublimator/proc/remove_container - update_icon() - -// Coded this before realizing base type didn't support tank mixing, leaving it in just in case someone decides to add it. -/obj/machinery/portable_atmospherics/reagent_sublimator/proc/remove_tank() - - set name = "Remove Gas Tank" - set category = "Object" - set src in view(1) - - var/mob/living/user = usr - if(!istype(user)) - return - - if(holding) - user.put_in_hands(holding) - user.visible_message("\The [user] removes \the [holding] from \the [src].") - holding = null - verbs -= /obj/machinery/portable_atmospherics/reagent_sublimator/proc/remove_tank - update_icon() - else - to_chat(user, "\The [src] has no gas tank loaded.") - -/obj/machinery/portable_atmospherics/reagent_sublimator/proc/remove_container() - - set name = "Remove Reagent Container" - set category = "Object" - set src in view(1) - - var/mob/living/user = usr - if(!istype(user)) - return - - if(container) - user.put_in_hands(container) - user.visible_message("\The [user] removes \the [container] from \the [src].") - container = null - verbs -= /obj/machinery/portable_atmospherics/reagent_sublimator/proc/remove_container - if(use_power >= POWER_USE_ACTIVE) - update_use_power(POWER_USE_IDLE) - update_icon() - else - to_chat(user, "\The [src] has no reagent container loaded.") - -/obj/machinery/portable_atmospherics/reagent_sublimator/physical_attack_hand(var/mob/user) - update_use_power(use_power == POWER_USE_ACTIVE ? POWER_USE_IDLE : POWER_USE_ACTIVE) - user.visible_message("\The [user] switches \the [src] [use_power == POWER_USE_ACTIVE ? "on" : "off"].") - update_icon() - return TRUE - -/obj/machinery/portable_atmospherics/reagent_sublimator/attackby(var/obj/item/thing, var/mob/user) - if(istype(thing, /obj/item/tank)) - to_chat(user, "\The [src] has no socket for a gas tank.") - else if(istype(thing, /obj/item/reagent_containers)) - if(container) - to_chat(user, "\The [src] is already loaded with \the [container].") - else if(user.unEquip(thing, src)) - container = thing - user.visible_message("\The [user] loads \the [thing] into \the [src].") - verbs |= /obj/machinery/portable_atmospherics/reagent_sublimator/proc/remove_container - update_icon() - else - . = ..() - -/obj/machinery/portable_atmospherics/reagent_sublimator/Process() - - . = ..() - - if(. == PROCESS_KILL) - return - - if(stat & (BROKEN|NOPOWER)) - if(use_power) - update_use_power(POWER_USE_OFF) - update_icon() - return - - if(use_power >= POWER_USE_ACTIVE && container && container.reagents) - if(reagent_whitelist && reagent_whitelist.len) - for(var/datum/reagent/R in container.reagents.reagent_list) - if(!is_type_in_list(R, reagent_whitelist)) - audible_message(SPAN_NOTICE("\The [src] pings rapidly and powers down, refusing to process the contents of \the [container].")) - update_use_power(POWER_USE_OFF) - update_icon() - return - - var/datum/gas_mixture/produced = new - var/added_gas = FALSE - for(var/datum/reagent/R in container.reagents.reagent_list) - var/gas_id = lowertext(R.name) - if(!(gas_id in gas_data.gases)) - create_gas_data_for_reagent(R) - var/sublimate_this_tick = min(sublimated_units_per_tick, R.volume) - container.reagents.remove_reagent(R.type, sublimate_this_tick) - produced.adjust_gas(gas_id, sublimate_this_tick / REAGENT_GAS_EXCHANGE_FACTOR) - added_gas = TRUE - if(produced.total_moles >= sublimated_units_per_tick) - break - if(added_gas) - produced.temperature = output_temperature - air_contents.merge(produced) - else - visible_message("\The [src] pings as it finishes processing the contents of \the [container].") - update_use_power(POWER_USE_IDLE) - update_icon() - -/obj/machinery/portable_atmospherics/reagent_sublimator/on_update_icon() - icon_state = "[icon_set]-[use_power == POWER_USE_ACTIVE ? "on" : "off"]-[container ? "loaded" : "unloaded"]-[holding ? "tank" : "notank"]" - -/obj/machinery/portable_atmospherics/reagent_sublimator/examine(mob/user) - . = ..() - if(container) - if(container.reagents && container.reagents.total_volume) - to_chat(user, "\The [src] has \a [container] loaded. It contains [container.reagents.total_volume]u of reagents.") - else - to_chat(user, "\The [src] has \a [container] loaded. It is empty.") - if(holding) - to_chat(user, "\The [src] has \a [holding] connected.") - if(reagent_whitelist) - to_chat(user, "\The [src]'s safety light is on.") - -/obj/machinery/portable_atmospherics/reagent_sublimator/emag_act(var/remaining_charges, var/mob/user) - if(!emagged && length(reagent_whitelist)) - emagged = TRUE - reagent_whitelist.Cut() - to_chat(user, "\The [src]'s safety light turns off.") - return 1 - -/obj/machinery/portable_atmospherics/reagent_sublimator/sauna - name = "sauna heater" - desc = "A top of the line electric sauna heater - it accepts water, and produces steam. Wow!" - icon_state = "sauna-off-unloaded-notank" - icon_set = "sauna" - reagent_whitelist = list(/datum/reagent/water) - output_temperature = T0C+40 - machine_name = "sauna heater" - machine_desc = "A reagent sublimator that only works with water, converting it into hot steam. Toasty!" diff --git a/code/modules/reagents/dispenser/_defines.dm b/code/modules/reagents/dispenser/_defines.dm deleted file mode 100644 index 8d52cf5cd07a9..0000000000000 --- a/code/modules/reagents/dispenser/_defines.dm +++ /dev/null @@ -1,8 +0,0 @@ -#define CARTRIDGE_VOLUME_LARGE 500 -#define CARTRIDGE_VOLUME_MEDIUM 250 -#define CARTRIDGE_VOLUME_SMALL 100 - -// Chemistry dispenser starts with 21 -// ERT dispenser starts with 28 -#define DISPENSER_MAX_CARTRIDGES 30 - diff --git a/code/modules/reagents/dispenser/cartridge.dm b/code/modules/reagents/dispenser/cartridge.dm deleted file mode 100644 index 2a5c67cef2e95..0000000000000 --- a/code/modules/reagents/dispenser/cartridge.dm +++ /dev/null @@ -1,101 +0,0 @@ -/obj/item/reagent_containers/chem_disp_cartridge - name = "chemical dispenser cartridge" - desc = "This goes in a chemical dispenser." - icon_state = "cartridge" - - w_class = ITEM_SIZE_NORMAL - - volume = CARTRIDGE_VOLUME_LARGE - amount_per_transfer_from_this = 50 - // Large, but inaccurate. Use a chem dispenser or beaker for accuracy. - possible_transfer_amounts = "50;100" - unacidable = TRUE - - var/spawn_reagent = null - var/label = "" - -/obj/item/reagent_containers/chem_disp_cartridge/small - volume = CARTRIDGE_VOLUME_SMALL - -/obj/item/reagent_containers/chem_disp_cartridge/medium - volume = CARTRIDGE_VOLUME_MEDIUM - -/obj/item/reagent_containers/chem_disp_cartridge/New() - . = ..() - if(spawn_reagent) - reagents.add_reagent(spawn_reagent, volume) - var/datum/reagent/R = spawn_reagent - setLabel(initial(R.name)) - -/obj/item/reagent_containers/chem_disp_cartridge/examine(mob/user) - . = ..() - to_chat(user, "It has a capacity of [volume] units.") - if(reagents.total_volume <= 0) - to_chat(user, "It is empty.") - else - to_chat(user, "It contains [reagents.total_volume] units of liquid.") - if(!is_open_container()) - to_chat(user, "The cap is sealed.") - -/obj/item/reagent_containers/chem_disp_cartridge/verb/verb_set_label(L as text) - set name = "Set Cartridge Label" - set category = "Object" - set src in view(usr, 1) - - setLabel(L, usr) - -/obj/item/reagent_containers/chem_disp_cartridge/proc/setLabel(L, mob/user = null) - if(L) - if(user) - to_chat(user, "You set the label on \the [src] to '[L]'.") - - label = L - SetName("[initial(name)] - '[L]'") - else - if(user) - to_chat(user, "You clear the label on \the [src].") - label = "" - SetName(initial(name)) - -/obj/item/reagent_containers/chem_disp_cartridge/attack_self() - ..() - if (is_open_container()) - to_chat(usr, "You put the cap on \the [src].") - atom_flags ^= ATOM_FLAG_OPEN_CONTAINER - else - to_chat(usr, "You take the cap off \the [src].") - atom_flags |= ATOM_FLAG_OPEN_CONTAINER - -/obj/item/reagent_containers/chem_disp_cartridge/afterattack(obj/target, mob/user , flag) - if (!is_open_container() || !flag) - return - - else if(istype(target, /obj/structure/reagent_dispensers)) //A dispenser. Transfer FROM it TO us. - target.add_fingerprint(user) - - if(!target.reagents.total_volume && target.reagents) - to_chat(user, "\The [target] is empty.") - return - - if(reagents.total_volume >= reagents.maximum_volume) - to_chat(user, "\The [src] is full.") - return - - var/trans = target.reagents.trans_to(src, target:amount_per_transfer_from_this) - to_chat(user, "You fill \the [src] with [trans] units of the contents of \the [target].") - - else if(target.is_open_container() && target.reagents) //Something like a glass. Player probably wants to transfer TO it. - - if(!reagents.total_volume) - to_chat(user, "\The [src] is empty.") - return - - if(target.reagents.total_volume >= target.reagents.maximum_volume) - to_chat(user, "\The [target] is full.") - return - - var/trans = src.reagents.trans_to(target, amount_per_transfer_from_this) - to_chat(user, "You transfer [trans] units of the solution to \the [target].") - - else - return ..() diff --git a/code/modules/reagents/dispenser/cartridge_spawn.dm b/code/modules/reagents/dispenser/cartridge_spawn.dm deleted file mode 100644 index ca97145f1317e..0000000000000 --- a/code/modules/reagents/dispenser/cartridge_spawn.dm +++ /dev/null @@ -1,13 +0,0 @@ -/client/proc/spawn_chemdisp_cartridge(size in list("small", "medium", "large"), reagent in subtypesof(/datum/reagent)) - set name = "Spawn Chemical Dispenser Cartridge" - set category = "Admin" - - var/obj/item/reagent_containers/chem_disp_cartridge/C - switch(size) - if("small") C = new /obj/item/reagent_containers/chem_disp_cartridge/small(usr.loc) - if("medium") C = new /obj/item/reagent_containers/chem_disp_cartridge/medium(usr.loc) - if("large") C = new /obj/item/reagent_containers/chem_disp_cartridge(usr.loc) - C.reagents.add_reagent(reagent, C.volume) - var/datum/reagent/R = reagent - C.setLabel(initial(R.name)) - log_and_message_admins("spawned a [size] reagent container containing [reagent]") diff --git a/code/modules/reagents/dispenser/dispenser2.dm b/code/modules/reagents/dispenser/dispenser2.dm deleted file mode 100644 index 3981a9723ed1a..0000000000000 --- a/code/modules/reagents/dispenser/dispenser2.dm +++ /dev/null @@ -1,198 +0,0 @@ -/obj/machinery/chemical_dispenser - name = "chemical dispenser" - icon = 'icons/obj/chemical.dmi' - icon_state = "dispenser" - layer = BELOW_OBJ_LAYER - clicksound = "button" - clickvol = 20 - - var/list/spawn_cartridges = null // Set to a list of types to spawn one of each on New() - - var/list/cartridges = list() // Associative, label -> cartridge - var/obj/item/reagent_containers/container = null - - var/ui_title = "Chemical Dispenser" - - var/accept_drinking = 0 - var/amount = 30 - - idle_power_usage = 100 - density = TRUE - anchored = TRUE - obj_flags = OBJ_FLAG_ANCHORABLE - core_skill = SKILL_CHEMISTRY - var/can_contaminate = TRUE - -/obj/machinery/chemical_dispenser/New() - ..() - - if(spawn_cartridges) - for(var/type in spawn_cartridges) - add_cartridge(new type(src)) - -/obj/machinery/chemical_dispenser/examine(mob/user) - . = ..() - to_chat(user, "It has [cartridges.len] cartridges installed, and has space for [DISPENSER_MAX_CARTRIDGES - cartridges.len] more.") - -/obj/machinery/chemical_dispenser/proc/add_cartridge(obj/item/reagent_containers/chem_disp_cartridge/C, mob/user) - if(!istype(C)) - if(user) - to_chat(user, "\The [C] will not fit in \the [src]!") - return - - if(cartridges.len >= DISPENSER_MAX_CARTRIDGES) - if(user) - to_chat(user, "\The [src] does not have any slots open for \the [C] to fit into!") - return - - if(!C.label) - if(user) - to_chat(user, "\The [C] does not have a label!") - return - - if(cartridges[C.label]) - if(user) - to_chat(user, "\The [src] already contains a cartridge with that label!") - return - - if(user) - if(user.unEquip(C)) - to_chat(user, "You add \the [C] to \the [src].") - else - return - - C.forceMove(src) - cartridges[C.label] = C - cartridges = sortAssoc(cartridges) - SSnano.update_uis(src) - -/obj/machinery/chemical_dispenser/proc/remove_cartridge(label) - . = cartridges[label] - cartridges -= label - SSnano.update_uis(src) - -/obj/machinery/chemical_dispenser/attackby(obj/item/W, mob/user) - if(istype(W, /obj/item/reagent_containers/chem_disp_cartridge)) - add_cartridge(W, user) - - else if(isScrewdriver(W)) - var/label = input(user, "Which cartridge would you like to remove?", "Chemical Dispenser") as null|anything in cartridges - if(!label) return - var/obj/item/reagent_containers/chem_disp_cartridge/C = remove_cartridge(label) - if(C) - to_chat(user, "You remove \the [C] from \the [src].") - C.dropInto(loc) - - else if(istype(W, /obj/item/reagent_containers/glass) || istype(W, /obj/item/reagent_containers/food)) - if(container) - to_chat(user, "There is already \a [container] on \the [src]!") - return - - var/obj/item/reagent_containers/RC = W - - if(!accept_drinking && istype(RC,/obj/item/reagent_containers/food)) - to_chat(user, "This machine only accepts beakers!") - return - - if(!RC.is_open_container()) - to_chat(user, "You don't see how \the [src] could dispense reagents into \the [RC].") - return - if(!user.unEquip(RC, src)) - return - container = RC - update_icon() - to_chat(user, "You set \the [RC] on \the [src].") - SSnano.update_uis(src) // update all UIs attached to src - - else - ..() - return - -/obj/machinery/chemical_dispenser/proc/eject_beaker(mob/user) - if(!container) - return - var/obj/item/reagent_containers/B = container - user.put_in_hands(B) - container = null - update_icon() - -/obj/machinery/chemical_dispenser/ui_interact(mob/user, ui_key = "main",var/datum/nanoui/ui = null, var/force_open = 1) - // this is the data which will be sent to the ui - var/data[0] - data["amount"] = amount - data["isBeakerLoaded"] = container ? 1 : 0 - data["glass"] = accept_drinking - var beakerD[0] - if(container && container.reagents && container.reagents.reagent_list.len) - for(var/datum/reagent/R in container.reagents.reagent_list) - beakerD[++beakerD.len] = list("name" = R.name, "volume" = R.volume) - data["beakerContents"] = beakerD - - if(container) - data["beakerCurrentVolume"] = container.reagents.total_volume - data["beakerMaxVolume"] = container.reagents.maximum_volume - else - data["beakerCurrentVolume"] = null - data["beakerMaxVolume"] = null - - var chemicals[0] - for(var/label in cartridges) - var/obj/item/reagent_containers/chem_disp_cartridge/C = cartridges[label] - chemicals[++chemicals.len] = list("label" = label, "amount" = C.reagents.total_volume) - data["chemicals"] = chemicals - - // update the ui if it exists, returns null if no ui is passed/found - ui = SSnano.try_update_ui(user, src, ui_key, ui, data, force_open) - if(!ui) - ui = new(user, src, ui_key, "chem_disp.tmpl", ui_title, 390, 680) - ui.set_initial_data(data) - ui.open() - ui.set_auto_update(1) - -/obj/machinery/chemical_dispenser/OnTopic(mob/user, href_list) - if(href_list["amount"]) - amount = round(text2num(href_list["amount"]), 1) // round to nearest 1 - amount = max(0, min(120, amount)) // Since the user can actually type the commands himself, some sanity checking - return TOPIC_REFRESH - - if(href_list["dispense"]) - var/label = href_list["dispense"] - if(cartridges[label] && container && container.is_open_container()) - var/obj/item/reagent_containers/chem_disp_cartridge/C = cartridges[label] - var/mult = 1 + (-0.5 + round(rand(), 0.1))*(user.skill_fail_chance(core_skill, 0.3, SKILL_ADEPT)) - C.reagents.trans_to(container, amount*mult) - var/contaminants_left = rand(0, max(SKILL_ADEPT - user.get_skill_value(core_skill), 0)) * can_contaminate - var/choices = cartridges.Copy() - while(length(choices) && contaminants_left) - var/chosen_label = pick_n_take(choices) - var/obj/item/reagent_containers/chem_disp_cartridge/choice = cartridges[chosen_label] - if(choice == C) - continue - choice.reagents.trans_to(container, round(rand()*amount/5, 0.1)) - contaminants_left-- - return TOPIC_REFRESH - return TOPIC_HANDLED - - else if(href_list["ejectBeaker"]) - eject_beaker(user) - return TOPIC_REFRESH - - - -/obj/machinery/chemical_dispenser/AltClick(mob/user) - if(CanDefaultInteract(user)) - eject_beaker(user) - else - ..() - -/obj/machinery/chemical_dispenser/interface_interact(mob/user) - ui_interact(user) - return TRUE - -/obj/machinery/chemical_dispenser/on_update_icon() - overlays.Cut() - if(container) - var/mutable_appearance/beaker_overlay - beaker_overlay = image('icons/obj/chemical.dmi', src, "lil_beaker") - beaker_overlay.pixel_x = rand(-10, 5) - overlays += beaker_overlay \ No newline at end of file diff --git a/code/modules/reagents/dispenser/dispenser_presets.dm b/code/modules/reagents/dispenser/dispenser_presets.dm deleted file mode 100644 index 75ea090bfd13b..0000000000000 --- a/code/modules/reagents/dispenser/dispenser_presets.dm +++ /dev/null @@ -1,155 +0,0 @@ -/obj/machinery/chemical_dispenser/full - spawn_cartridges = list( - /obj/item/reagent_containers/chem_disp_cartridge/hydrazine, - /obj/item/reagent_containers/chem_disp_cartridge/lithium, - /obj/item/reagent_containers/chem_disp_cartridge/carbon, - /obj/item/reagent_containers/chem_disp_cartridge/ammonia, - /obj/item/reagent_containers/chem_disp_cartridge/acetone, - /obj/item/reagent_containers/chem_disp_cartridge/sodium, - /obj/item/reagent_containers/chem_disp_cartridge/aluminium, - /obj/item/reagent_containers/chem_disp_cartridge/silicon, - /obj/item/reagent_containers/chem_disp_cartridge/phosphorus, - /obj/item/reagent_containers/chem_disp_cartridge/sulfur, - /obj/item/reagent_containers/chem_disp_cartridge/hydrochloric, - /obj/item/reagent_containers/chem_disp_cartridge/potassium, - /obj/item/reagent_containers/chem_disp_cartridge/iron, - /obj/item/reagent_containers/chem_disp_cartridge/copper, - /obj/item/reagent_containers/chem_disp_cartridge/mercury, - /obj/item/reagent_containers/chem_disp_cartridge/radium, - /obj/item/reagent_containers/chem_disp_cartridge/water, - /obj/item/reagent_containers/chem_disp_cartridge/ethanol, - /obj/item/reagent_containers/chem_disp_cartridge/sugar, - /obj/item/reagent_containers/chem_disp_cartridge/acid, - /obj/item/reagent_containers/chem_disp_cartridge/tungsten - ) - -/obj/machinery/chemical_dispenser/ert - name = "medicine dispenser" - spawn_cartridges = list( - /obj/item/reagent_containers/chem_disp_cartridge/inaprov, - /obj/item/reagent_containers/chem_disp_cartridge/ryetalyn, - /obj/item/reagent_containers/chem_disp_cartridge/paracetamol, - /obj/item/reagent_containers/chem_disp_cartridge/tramadol, - /obj/item/reagent_containers/chem_disp_cartridge/oxycodone, - /obj/item/reagent_containers/chem_disp_cartridge/sterilizine, - /obj/item/reagent_containers/chem_disp_cartridge/leporazine, - /obj/item/reagent_containers/chem_disp_cartridge/kelotane, - /obj/item/reagent_containers/chem_disp_cartridge/dermaline, - /obj/item/reagent_containers/chem_disp_cartridge/dexalin, - /obj/item/reagent_containers/chem_disp_cartridge/dexalin_p, - /obj/item/reagent_containers/chem_disp_cartridge/tricord, - /obj/item/reagent_containers/chem_disp_cartridge/dylovene, - /obj/item/reagent_containers/chem_disp_cartridge/synaptizine, - /obj/item/reagent_containers/chem_disp_cartridge/hyronalin, - /obj/item/reagent_containers/chem_disp_cartridge/arithrazine, - /obj/item/reagent_containers/chem_disp_cartridge/alkysine, - /obj/item/reagent_containers/chem_disp_cartridge/imidazoline, - /obj/item/reagent_containers/chem_disp_cartridge/peridaxon, - /obj/item/reagent_containers/chem_disp_cartridge/bicaridine, - /obj/item/reagent_containers/chem_disp_cartridge/hyperzine, - /obj/item/reagent_containers/chem_disp_cartridge/rezadone, - /obj/item/reagent_containers/chem_disp_cartridge/spaceacillin, - /obj/item/reagent_containers/chem_disp_cartridge/ethylredox, - /obj/item/reagent_containers/chem_disp_cartridge/sleeptox, - /obj/item/reagent_containers/chem_disp_cartridge/chloral, - /obj/item/reagent_containers/chem_disp_cartridge/cryoxadone, - /obj/item/reagent_containers/chem_disp_cartridge/clonexadone - ) - -/obj/machinery/chemical_dispenser/bar_soft - name = "soft drink dispenser" - desc = "A soft drink machine." //Doesn't just serve soda --BlueNexus - icon_state = "soda_dispenser" - ui_title = "Soda Dispenser" - accept_drinking = 1 - core_skill = SKILL_COOKING - can_contaminate = FALSE //It's not a complex panel, and I'm fairly sure that most people don't haymaker the control panel on a soft drinks machine. -- Chaoko99 - -/obj/machinery/chemical_dispenser/bar_soft/full - spawn_cartridges = list( - /obj/item/reagent_containers/chem_disp_cartridge/water, - /obj/item/reagent_containers/chem_disp_cartridge/ice, - /obj/item/reagent_containers/chem_disp_cartridge/coffee, - /obj/item/reagent_containers/chem_disp_cartridge/hot_coco, - /obj/item/reagent_containers/chem_disp_cartridge/cream, - /obj/item/reagent_containers/chem_disp_cartridge/tea, - /obj/item/reagent_containers/chem_disp_cartridge/green_tea, - /obj/item/reagent_containers/chem_disp_cartridge/chai_tea, - /obj/item/reagent_containers/chem_disp_cartridge/red_tea, - /obj/item/reagent_containers/chem_disp_cartridge/cola, - /obj/item/reagent_containers/chem_disp_cartridge/smw, - /obj/item/reagent_containers/chem_disp_cartridge/dr_gibb, - /obj/item/reagent_containers/chem_disp_cartridge/spaceup, - /obj/item/reagent_containers/chem_disp_cartridge/tonic, - /obj/item/reagent_containers/chem_disp_cartridge/sodawater, - /obj/item/reagent_containers/chem_disp_cartridge/lemon_lime, - /obj/item/reagent_containers/chem_disp_cartridge/sugar, - /obj/item/reagent_containers/chem_disp_cartridge/orange, - /obj/item/reagent_containers/chem_disp_cartridge/lime, - /obj/item/reagent_containers/chem_disp_cartridge/watermelon - ) - -/obj/machinery/chemical_dispenser/bar_alc - name = "booze dispenser" - desc = "A beer machine. Like a soda machine, but more fun!" - icon_state = "booze_dispenser" - ui_title = "Booze Dispenser" - accept_drinking = 1 - core_skill = SKILL_COOKING - can_contaminate = FALSE //See above. - -/obj/machinery/chemical_dispenser/bar_alc/full - spawn_cartridges = list( - /obj/item/reagent_containers/chem_disp_cartridge/lemon_lime, - /obj/item/reagent_containers/chem_disp_cartridge/sugar, - /obj/item/reagent_containers/chem_disp_cartridge/orange, - /obj/item/reagent_containers/chem_disp_cartridge/lime, - /obj/item/reagent_containers/chem_disp_cartridge/sodawater, - /obj/item/reagent_containers/chem_disp_cartridge/tonic, - /obj/item/reagent_containers/chem_disp_cartridge/beer, - /obj/item/reagent_containers/chem_disp_cartridge/kahlua, - /obj/item/reagent_containers/chem_disp_cartridge/whiskey, - /obj/item/reagent_containers/chem_disp_cartridge/wine, - /obj/item/reagent_containers/chem_disp_cartridge/vodka, - /obj/item/reagent_containers/chem_disp_cartridge/gin, - /obj/item/reagent_containers/chem_disp_cartridge/rum, - /obj/item/reagent_containers/chem_disp_cartridge/tequila, - /obj/item/reagent_containers/chem_disp_cartridge/vermouth, - /obj/item/reagent_containers/chem_disp_cartridge/cognac, - /obj/item/reagent_containers/chem_disp_cartridge/ale, - /obj/item/reagent_containers/chem_disp_cartridge/mead, - /obj/item/reagent_containers/chem_disp_cartridge/triple_sec, - /obj/item/reagent_containers/chem_disp_cartridge/creme_de_cacao, - /obj/item/reagent_containers/chem_disp_cartridge/creme_de_menthe - ) - -/obj/machinery/chemical_dispenser/bar_coffee - name = "coffee dispenser" - desc = "Driving crack dealers out of employment since 2280." - icon_state = "coffee_dispenser" - ui_title = "Coffee Dispenser" - accept_drinking = 1 - core_skill = SKILL_COOKING - can_contaminate = FALSE //See above. - -/obj/machinery/chemical_dispenser/bar_coffee/full - spawn_cartridges = list( - /obj/item/reagent_containers/chem_disp_cartridge/coffee, - /obj/item/reagent_containers/chem_disp_cartridge/decaf_cof, - /obj/item/reagent_containers/chem_disp_cartridge/espresso, - /obj/item/reagent_containers/chem_disp_cartridge/cafe_latte, - /obj/item/reagent_containers/chem_disp_cartridge/soy_latte, - /obj/item/reagent_containers/chem_disp_cartridge/hot_coco, - /obj/item/reagent_containers/chem_disp_cartridge/milk, - /obj/item/reagent_containers/chem_disp_cartridge/cream, - /obj/item/reagent_containers/chem_disp_cartridge/tea, - /obj/item/reagent_containers/chem_disp_cartridge/green_tea, - /obj/item/reagent_containers/chem_disp_cartridge/chai_tea, - /obj/item/reagent_containers/chem_disp_cartridge/red_tea, - /obj/item/reagent_containers/chem_disp_cartridge/decaf_tea, - /obj/item/reagent_containers/chem_disp_cartridge/ice, - /obj/item/reagent_containers/chem_disp_cartridge/syrup_chocolate, - /obj/item/reagent_containers/chem_disp_cartridge/syrup_caramel, - /obj/item/reagent_containers/chem_disp_cartridge/syrup_vanilla, - /obj/item/reagent_containers/chem_disp_cartridge/syrup_pumpkin - ) \ No newline at end of file diff --git a/code/modules/reagents/dispenser/presets/bar.dm b/code/modules/reagents/dispenser/presets/bar.dm deleted file mode 100644 index 8d4ef89d361b7..0000000000000 --- a/code/modules/reagents/dispenser/presets/bar.dm +++ /dev/null @@ -1,170 +0,0 @@ -/obj/item/reagent_containers/chem_disp_cartridge/beer - spawn_reagent = /datum/reagent/ethanol/beer - - -/obj/item/reagent_containers/chem_disp_cartridge/kahlua - spawn_reagent = /datum/reagent/ethanol/coffee/kahlua - - -/obj/item/reagent_containers/chem_disp_cartridge/whiskey - spawn_reagent = /datum/reagent/ethanol/whiskey - - -/obj/item/reagent_containers/chem_disp_cartridge/wine - spawn_reagent = /datum/reagent/ethanol/wine - - -/obj/item/reagent_containers/chem_disp_cartridge/vodka - spawn_reagent = /datum/reagent/ethanol/vodka - - -/obj/item/reagent_containers/chem_disp_cartridge/gin - spawn_reagent = /datum/reagent/ethanol/gin - - -/obj/item/reagent_containers/chem_disp_cartridge/rum - spawn_reagent = /datum/reagent/ethanol/rum - - -/obj/item/reagent_containers/chem_disp_cartridge/tequila - spawn_reagent = /datum/reagent/ethanol/tequilla - - -/obj/item/reagent_containers/chem_disp_cartridge/vermouth - spawn_reagent = /datum/reagent/ethanol/vermouth - - -/obj/item/reagent_containers/chem_disp_cartridge/cognac - spawn_reagent = /datum/reagent/ethanol/cognac - - -/obj/item/reagent_containers/chem_disp_cartridge/ale - spawn_reagent = /datum/reagent/ethanol/ale - - -/obj/item/reagent_containers/chem_disp_cartridge/mead - spawn_reagent = /datum/reagent/ethanol/mead - - -/obj/item/reagent_containers/chem_disp_cartridge/creme_de_menthe - spawn_reagent = /datum/reagent/ethanol/creme_de_menthe - - -/obj/item/reagent_containers/chem_disp_cartridge/creme_de_cacao - spawn_reagent = /datum/reagent/ethanol/creme_de_cacao - - -/obj/item/reagent_containers/chem_disp_cartridge/triple_sec - spawn_reagent = /datum/reagent/ethanol/triple_sec - - -/obj/item/reagent_containers/chem_disp_cartridge/ice - spawn_reagent = /datum/reagent/drink/ice - - -/obj/item/reagent_containers/chem_disp_cartridge/tea - spawn_reagent = /datum/reagent/drink/tea - - -/obj/item/reagent_containers/chem_disp_cartridge/green_tea - spawn_reagent = /datum/reagent/drink/tea/green - - -/obj/item/reagent_containers/chem_disp_cartridge/chai_tea - spawn_reagent = /datum/reagent/drink/tea/chai - - -/obj/item/reagent_containers/chem_disp_cartridge/red_tea - spawn_reagent = /datum/reagent/drink/tea/red - - -/obj/item/reagent_containers/chem_disp_cartridge/cola - spawn_reagent = /datum/reagent/drink/space_cola - - -/obj/item/reagent_containers/chem_disp_cartridge/smw - spawn_reagent = /datum/reagent/drink/spacemountainwind - - -/obj/item/reagent_containers/chem_disp_cartridge/dr_gibb - spawn_reagent = /datum/reagent/drink/dr_gibb - - -/obj/item/reagent_containers/chem_disp_cartridge/spaceup - spawn_reagent = /datum/reagent/drink/space_up - - -/obj/item/reagent_containers/chem_disp_cartridge/tonic - spawn_reagent = /datum/reagent/drink/tonic - - -/obj/item/reagent_containers/chem_disp_cartridge/sodawater - spawn_reagent = /datum/reagent/drink/sodawater - - -/obj/item/reagent_containers/chem_disp_cartridge/lemon_lime - spawn_reagent = /datum/reagent/drink/lemon_lime - - -/obj/item/reagent_containers/chem_disp_cartridge/orange - spawn_reagent = /datum/reagent/drink/juice/orange - - -/obj/item/reagent_containers/chem_disp_cartridge/lime - spawn_reagent = /datum/reagent/drink/juice/lime - - -/obj/item/reagent_containers/chem_disp_cartridge/watermelon - spawn_reagent = /datum/reagent/drink/juice/watermelon - - -/obj/item/reagent_containers/chem_disp_cartridge/decaf_tea - spawn_reagent = /datum/reagent/drink/tea/decaf - - -/obj/item/reagent_containers/chem_disp_cartridge/syrup_chocolate - spawn_reagent = /datum/reagent/drink/syrup_chocolate - - -/obj/item/reagent_containers/chem_disp_cartridge/syrup_caramel - spawn_reagent = /datum/reagent/drink/syrup_caramel - - -/obj/item/reagent_containers/chem_disp_cartridge/syrup_vanilla - spawn_reagent = /datum/reagent/drink/syrup_vanilla - - -/obj/item/reagent_containers/chem_disp_cartridge/syrup_pumpkin - spawn_reagent = /datum/reagent/drink/syrup_pumpkin - - -/obj/item/reagent_containers/chem_disp_cartridge/coffee - spawn_reagent = /datum/reagent/drink/coffee - - -/obj/item/reagent_containers/chem_disp_cartridge/cafe_latte - spawn_reagent = /datum/reagent/drink/coffee/cafe_latte - - -/obj/item/reagent_containers/chem_disp_cartridge/soy_latte - spawn_reagent = /datum/reagent/drink/coffee/soy_latte - - -/obj/item/reagent_containers/chem_disp_cartridge/hot_coco - spawn_reagent = /datum/reagent/drink/hot_coco - - -/obj/item/reagent_containers/chem_disp_cartridge/milk - spawn_reagent = /datum/reagent/drink/milk - - -/obj/item/reagent_containers/chem_disp_cartridge/cream - spawn_reagent = /datum/reagent/drink/milk/cream - - -/obj/item/reagent_containers/chem_disp_cartridge/decaf_cof - spawn_reagent = /datum/reagent/drink/decafcoffee - - -/obj/item/reagent_containers/chem_disp_cartridge/espresso - spawn_reagent = /datum/reagent/drink/coffee/espresso diff --git a/code/modules/reagents/dispenser/presets/chemistry.dm b/code/modules/reagents/dispenser/presets/chemistry.dm deleted file mode 100644 index d7051ddd4218b..0000000000000 --- a/code/modules/reagents/dispenser/presets/chemistry.dm +++ /dev/null @@ -1,86 +0,0 @@ -/obj/item/reagent_containers/chem_disp_cartridge/water - spawn_reagent = /datum/reagent/water - - -/obj/item/reagent_containers/chem_disp_cartridge/sugar - spawn_reagent = /datum/reagent/sugar - - -/obj/item/reagent_containers/chem_disp_cartridge/hydrazine - spawn_reagent = /datum/reagent/hydrazine - - -/obj/item/reagent_containers/chem_disp_cartridge/lithium - spawn_reagent = /datum/reagent/lithium - - -/obj/item/reagent_containers/chem_disp_cartridge/carbon - spawn_reagent = /datum/reagent/carbon - - -/obj/item/reagent_containers/chem_disp_cartridge/ammonia - spawn_reagent = /datum/reagent/ammonia - - -/obj/item/reagent_containers/chem_disp_cartridge/acetone - spawn_reagent = /datum/reagent/acetone - - -/obj/item/reagent_containers/chem_disp_cartridge/sodium - spawn_reagent = /datum/reagent/sodium - - -/obj/item/reagent_containers/chem_disp_cartridge/aluminium - spawn_reagent = /datum/reagent/aluminium - - -/obj/item/reagent_containers/chem_disp_cartridge/silicon - spawn_reagent = /datum/reagent/silicon - - -/obj/item/reagent_containers/chem_disp_cartridge/phosphorus - spawn_reagent = /datum/reagent/phosphorus - - -/obj/item/reagent_containers/chem_disp_cartridge/sulfur - spawn_reagent = /datum/reagent/sulfur - - -/obj/item/reagent_containers/chem_disp_cartridge/hydrochloric - spawn_reagent = /datum/reagent/acid/hydrochloric - - -/obj/item/reagent_containers/chem_disp_cartridge/potassium - spawn_reagent = /datum/reagent/potassium - - -/obj/item/reagent_containers/chem_disp_cartridge/iron - spawn_reagent = /datum/reagent/iron - - -/obj/item/reagent_containers/chem_disp_cartridge/copper - spawn_reagent = /datum/reagent/copper - - -/obj/item/reagent_containers/chem_disp_cartridge/mercury - spawn_reagent = /datum/reagent/mercury - - -/obj/item/reagent_containers/chem_disp_cartridge/radium - spawn_reagent = /datum/reagent/radium - - -/obj/item/reagent_containers/chem_disp_cartridge/ethanol - spawn_reagent = /datum/reagent/ethanol - - -/obj/item/reagent_containers/chem_disp_cartridge/acid - spawn_reagent = /datum/reagent/acid - - -/obj/item/reagent_containers/chem_disp_cartridge/tungsten - spawn_reagent = /datum/reagent/tungsten - - -/obj/item/reagent_containers/chem_disp_cartridge/boron - spawn_reagent = /datum/reagent/toxin/boron diff --git a/code/modules/reagents/dispenser/presets/medicine.dm b/code/modules/reagents/dispenser/presets/medicine.dm deleted file mode 100644 index a60798a9c711a..0000000000000 --- a/code/modules/reagents/dispenser/presets/medicine.dm +++ /dev/null @@ -1,114 +0,0 @@ -/obj/item/reagent_containers/chem_disp_cartridge/inaprov - spawn_reagent = /datum/reagent/inaprovaline - - -/obj/item/reagent_containers/chem_disp_cartridge/ryetalyn - spawn_reagent = /datum/reagent/ryetalyn - - -/obj/item/reagent_containers/chem_disp_cartridge/paracetamol - spawn_reagent = /datum/reagent/paracetamol - - -/obj/item/reagent_containers/chem_disp_cartridge/tramadol - spawn_reagent = /datum/reagent/tramadol - - -/obj/item/reagent_containers/chem_disp_cartridge/oxycodone - spawn_reagent = /datum/reagent/tramadol/oxycodone - - -/obj/item/reagent_containers/chem_disp_cartridge/sterilizine - spawn_reagent = /datum/reagent/sterilizine - - -/obj/item/reagent_containers/chem_disp_cartridge/leporazine - spawn_reagent = /datum/reagent/leporazine - - -/obj/item/reagent_containers/chem_disp_cartridge/kelotane - spawn_reagent = /datum/reagent/kelotane - - -/obj/item/reagent_containers/chem_disp_cartridge/dermaline - spawn_reagent = /datum/reagent/dermaline - - -/obj/item/reagent_containers/chem_disp_cartridge/dexalin - spawn_reagent = /datum/reagent/dexalin - - -/obj/item/reagent_containers/chem_disp_cartridge/small/dexalin - spawn_reagent = /datum/reagent/dexalin - - -/obj/item/reagent_containers/chem_disp_cartridge/dexalin_p - spawn_reagent = /datum/reagent/dexalinp - - -/obj/item/reagent_containers/chem_disp_cartridge/tricord - spawn_reagent = /datum/reagent/tricordrazine - - -/obj/item/reagent_containers/chem_disp_cartridge/dylovene - spawn_reagent = /datum/reagent/dylovene - - -/obj/item/reagent_containers/chem_disp_cartridge/synaptizine - spawn_reagent = /datum/reagent/synaptizine - - -/obj/item/reagent_containers/chem_disp_cartridge/hyronalin - spawn_reagent = /datum/reagent/hyronalin - - -/obj/item/reagent_containers/chem_disp_cartridge/arithrazine - spawn_reagent = /datum/reagent/arithrazine - - -/obj/item/reagent_containers/chem_disp_cartridge/alkysine - spawn_reagent = /datum/reagent/alkysine - - -/obj/item/reagent_containers/chem_disp_cartridge/imidazoline - spawn_reagent = /datum/reagent/imidazoline - - -/obj/item/reagent_containers/chem_disp_cartridge/peridaxon - spawn_reagent = /datum/reagent/peridaxon - - -/obj/item/reagent_containers/chem_disp_cartridge/bicaridine - spawn_reagent = /datum/reagent/bicaridine - - -/obj/item/reagent_containers/chem_disp_cartridge/hyperzine - spawn_reagent = /datum/reagent/hyperzine - - -/obj/item/reagent_containers/chem_disp_cartridge/rezadone - spawn_reagent = /datum/reagent/rezadone - - -/obj/item/reagent_containers/chem_disp_cartridge/spaceacillin - spawn_reagent = /datum/reagent/spaceacillin - - -/obj/item/reagent_containers/chem_disp_cartridge/ethylredox - spawn_reagent = /datum/reagent/ethylredoxrazine - - -/obj/item/reagent_containers/chem_disp_cartridge/sleeptox - spawn_reagent = /datum/reagent/soporific - - -/obj/item/reagent_containers/chem_disp_cartridge/chloral - spawn_reagent = /datum/reagent/chloralhydrate - - -/obj/item/reagent_containers/chem_disp_cartridge/cryoxadone - spawn_reagent = /datum/reagent/cryoxadone - - -/obj/item/reagent_containers/chem_disp_cartridge/clonexadone - spawn_reagent = /datum/reagent/clonexadone diff --git a/code/modules/reagents/heat_sources/_heat_source.dm b/code/modules/reagents/heat_sources/_heat_source.dm deleted file mode 100644 index bee6571a2d7ac..0000000000000 --- a/code/modules/reagents/heat_sources/_heat_source.dm +++ /dev/null @@ -1,221 +0,0 @@ -#define MINIMUM_GLOW_TEMPERATURE 323 -#define MINIMUM_GLOW_VALUE 25 -#define MAXIMUM_GLOW_VALUE 255 -#define HEATER_MODE_HEAT "heat" -#define HEATER_MODE_COOL "cool" - -/obj/machinery/reagent_temperature - name = "chemical heater" - desc = "A small electric Bunsen, used to heat beakers and vials of chemicals." - icon = 'icons/obj/machines/heat_sources.dmi' - icon_state = "hotplate" - atom_flags = ATOM_FLAG_CLIMBABLE - anchored = TRUE - idle_power_usage = 0 - active_power_usage = 1.2 KILOWATTS - construct_state = /decl/machine_construction/default/panel_closed - uncreated_component_parts = null - stat_immune = 0 - machine_name = "chemical heater" - machine_desc = "A small, configurable burner used to heat beakers and other chemical containers." - - var/image/glow_icon - var/image/beaker_icon - var/image/on_icon - - var/heater_mode = HEATER_MODE_HEAT - var/list/permitted_types = list(/obj/item/reagent_containers/glass) - var/max_temperature = 200 CELSIUS - var/min_temperature = 40 CELSIUS - var/heating_power = 10 // K - var/last_temperature - var/target_temperature - var/obj/item/container - -/obj/machinery/reagent_temperature/cooler - name = "chemical cooler" - desc = "A small electric cooler, used to chill beakers and vials of chemicals." - icon_state = "coldplate" - heater_mode = HEATER_MODE_COOL - max_temperature = 30 CELSIUS - min_temperature = -80 CELSIUS - machine_name = "chemical cooler" - machine_desc = "Like a chemical heater, but chills things instead of heating them up." - -/obj/machinery/reagent_temperature/Initialize() - target_temperature = min_temperature - . = ..() - -/obj/machinery/reagent_temperature/Destroy() - if(container) - container.dropInto(loc) - container = null - . = ..() - -/obj/machinery/reagent_temperature/RefreshParts() - heating_power = initial(heating_power) * clamp(total_component_rating_of_type(/obj/item/stock_parts/capacitor), 0, 10) - - var/comp = 0.25 KILOWATTS * total_component_rating_of_type(/obj/item/stock_parts/micro_laser) - if(comp) - change_power_consumption(max(0.5 KILOWATTS, initial(active_power_usage) - comp), POWER_USE_ACTIVE) - ..() - -/obj/machinery/reagent_temperature/Process() - ..() - if(temperature != last_temperature) - queue_icon_update() - if(((stat & (BROKEN|NOPOWER)) || !anchored) && use_power >= POWER_USE_ACTIVE) - update_use_power(POWER_USE_IDLE) - queue_icon_update() - -/obj/machinery/reagent_temperature/proc/eject_beaker(mob/user) - if(!container) - return - var/obj/item/reagent_containers/B = container - user.put_in_hands(B) - container = null - update_icon() - -/obj/machinery/reagent_temperature/AltClick(mob/user) - if(CanDefaultInteract(user)) - eject_beaker(user) - else - ..() - -/obj/machinery/reagent_temperature/interface_interact(var/mob/user) - interact(user) - return TRUE - -/obj/machinery/reagent_temperature/ProcessAtomTemperature() - if(use_power >= POWER_USE_ACTIVE) - var/last_temperature = temperature - if(heater_mode == HEATER_MODE_HEAT && temperature < target_temperature) - temperature = min(target_temperature, temperature + heating_power) - else if(heater_mode == HEATER_MODE_COOL && temperature > target_temperature) - temperature = max(target_temperature, temperature - heating_power) - if(temperature != last_temperature) - if(container) - QUEUE_TEMPERATURE_ATOMS(container) - queue_icon_update() - return TRUE // Don't kill this processing loop unless we're not powered. - . = ..() - -/obj/machinery/reagent_temperature/attackby(var/obj/item/thing, var/mob/user) - if(isWrench(thing)) - if(use_power == POWER_USE_ACTIVE) - to_chat(user, SPAN_WARNING("Turn \the [src] off first!")) - else - anchored = !anchored - visible_message(SPAN_NOTICE("\The [user] [anchored ? "secured" : "unsecured"] \the [src].")) - playsound(src.loc, 'sound/items/Ratchet.ogg', 75, 1) - return - - if(thing.reagents) - for(var/checktype in permitted_types) - if(istype(thing, checktype)) - if(container) - to_chat(user, SPAN_WARNING("\The [src] is already holding \the [container].")) - else if(user.unEquip(thing)) - thing.forceMove(src) - container = thing - visible_message(SPAN_NOTICE("\The [user] places \the [container] on \the [src].")) - update_icon() - return - to_chat(user, SPAN_WARNING("\The [src] cannot accept \the [thing].")) - -/obj/machinery/reagent_temperature/on_update_icon() - - var/list/adding_overlays - - if(use_power >= POWER_USE_ACTIVE) - if(!on_icon) - on_icon = image(icon, "[icon_state]-on") - LAZYADD(adding_overlays, on_icon) - if(temperature > MINIMUM_GLOW_TEMPERATURE) // 50C - if(!glow_icon) - glow_icon = image(icon, "[icon_state]-glow") - glow_icon.alpha = clamp(temperature - MINIMUM_GLOW_TEMPERATURE, MINIMUM_GLOW_VALUE, MAXIMUM_GLOW_VALUE) - LAZYADD(adding_overlays, glow_icon) - set_light(0.2, 0.1, 1, l_color = COLOR_RED) - else - set_light(0) - else - set_light(0) - - if(container) - if(!beaker_icon) - beaker_icon = image(icon, "[icon_state]-beaker") - LAZYADD(adding_overlays, beaker_icon) - - overlays = adding_overlays - -/obj/machinery/reagent_temperature/interact(var/mob/user) - - var/dat = list() - dat += "" - dat += "" - - dat += "" - - dat += "" - dat += "" - - dat += "" - dat += "
              Target temperature:" - - if(target_temperature > min_temperature) - dat += "- " - - dat += "[target_temperature - T0C]C" - - if(target_temperature < max_temperature) - dat += " +" - - dat += "
              Current temperature:[Floor(temperature - T0C)]C
              Loaded container:[container ? "[container.name] ([Floor(container.temperature - T0C)]C) Remove" : "None."]
              Switched:[use_power == POWER_USE_ACTIVE ? "On" : "Off"]
              " - - var/datum/browser/popup = new(user, "\ref[src]-reagent_temperature_window", "[capitalize(name)]") - popup.set_content(jointext(dat, null)) - popup.open() - -/obj/machinery/reagent_temperature/CanUseTopic(var/mob/user, var/state, var/href_list) - if(href_list && href_list["remove_container"]) - . = ..(user, GLOB.physical_state, href_list) - if(. == STATUS_CLOSE) - to_chat(user, SPAN_WARNING("You are too far away.")) - return - return ..() - -/obj/machinery/reagent_temperature/proc/ToggleUsePower() - - if(stat & (BROKEN|NOPOWER)) - return TOPIC_HANDLED - - update_use_power(use_power <= POWER_USE_IDLE ? POWER_USE_ACTIVE : POWER_USE_IDLE) - QUEUE_TEMPERATURE_ATOMS(src) - update_icon() - - return TOPIC_REFRESH - -/obj/machinery/reagent_temperature/OnTopic(var/mob/user, var/href_list) - - if(href_list["adjust_temperature"]) - target_temperature = clamp(target_temperature + text2num(href_list["adjust_temperature"]), min_temperature, max_temperature) - . = TOPIC_REFRESH - - if(href_list["toggle_power"]) - . = ToggleUsePower() - if(. != TOPIC_REFRESH) - to_chat(user, SPAN_WARNING("The button clicks, but nothing happens.")) - - if(href_list["remove_container"]) - eject_beaker(user) - . = TOPIC_REFRESH - - if(. == TOPIC_REFRESH) - interact(user) - -#undef MINIMUM_GLOW_TEMPERATURE -#undef MINIMUM_GLOW_VALUE -#undef MAXIMUM_GLOW_VALUE -#undef HEATER_MODE_HEAT -#undef HEATER_MODE_COOL \ No newline at end of file diff --git a/code/modules/reagents/reagent_containers.dm b/code/modules/reagents/reagent_containers.dm deleted file mode 100644 index c8202ac1769d1..0000000000000 --- a/code/modules/reagents/reagent_containers.dm +++ /dev/null @@ -1,243 +0,0 @@ -/obj/item/reagent_containers - name = "Container" - desc = "..." - icon = 'icons/obj/chemical.dmi' - icon_state = null - w_class = ITEM_SIZE_SMALL - var/amount_per_transfer_from_this = 5 - var/possible_transfer_amounts = "5;10;15;25;30" - var/volume = 30 - var/label_text - -/obj/item/reagent_containers/proc/cannot_interact(mob/user) - if(!CanPhysicallyInteract(user)) - to_chat(usr, "You're in no condition to do that!'") - return TRUE - if(ismob(loc) && loc != user) - to_chat(usr, "You can't set transfer amounts while [src] is being held by someone else.") - return TRUE - return FALSE - -/obj/item/reagent_containers/verb/set_amount_per_transfer_from_this() - set name = "Set transfer amount" - set category = "Object" - set src in range(1) - if (cannot_interact(usr)) - return - var/N = input("Amount per transfer from this:","[src]") as null|anything in cached_number_list_decode(possible_transfer_amounts) - if (cannot_interact(usr)) // because input takes time and the situation can change - return - if(N) - amount_per_transfer_from_this = N - -/obj/item/reagent_containers/New() - create_reagents(volume) - ..() - if(!possible_transfer_amounts) - src.verbs -= /obj/item/reagent_containers/verb/set_amount_per_transfer_from_this - -/obj/item/reagent_containers/attack_self(mob/user as mob) - return - -/obj/item/reagent_containers/afterattack(obj/target, mob/user, flag) - return - -/obj/item/reagent_containers/proc/reagentlist() // For attack logs - if(reagents) - return reagents.get_reagents() - return "No reagent holder" - -/obj/item/reagent_containers/attackby(obj/item/W as obj, mob/user as mob) - if(istype(W, /obj/item/pen) || istype(W, /obj/item/device/flashlight/pen)) - var/tmp_label = sanitizeSafe(input(user, "Enter a label for [name]", "Label", label_text), MAX_NAME_LEN) - if(length(tmp_label) > 10) - to_chat(user, "The label can be at most 10 characters long.") - else - to_chat(user, "You set the label to \"[tmp_label]\".") - label_text = tmp_label - update_name_label() - else - return ..() - -/obj/item/reagent_containers/proc/update_name_label() - if(label_text == "") - SetName(initial(name)) - else - SetName("[initial(name)] ([label_text])") - -/obj/item/reagent_containers/proc/standard_dispenser_refill(var/mob/user, var/obj/structure/reagent_dispensers/target) // This goes into afterattack - if(!istype(target)) - return 0 - - if(!target.reagents || !target.reagents.total_volume) - to_chat(user, "[target] is empty.") - return 1 - - if(reagents && !reagents.get_free_space()) - to_chat(user, "[src] is full.") - return 1 - - var/trans = target.reagents.trans_to_obj(src, target:amount_per_transfer_from_this) - to_chat(user, "You fill [src] with [trans] units of the contents of [target].") - return 1 - -/obj/item/reagent_containers/proc/standard_splash_mob(var/mob/user, var/mob/target) // This goes into afterattack - if(!istype(target)) - return - - if(user.a_intent == I_HELP) - to_chat(user, "You can't splash people on help intent.") - return 1 - - if(!reagents || !reagents.total_volume) - to_chat(user, "[src] is empty.") - return 1 - - if(target.reagents && !target.reagents.get_free_space()) - to_chat(user, "[target] is full.") - return 1 - - var/contained = reagentlist() - if (reagents.should_admin_log()) - admin_attack_log(user, target, "Used \the [name] containing [contained] to splash the victim.", "Was splashed by \the [name] containing [contained].", "used \the [name] containing [contained] to splash") - - user.visible_message("[target] has been splashed with something by [user]!", "You splash the solution onto [target].") - reagents.splash(target, reagents.total_volume) - return 1 - -/obj/item/reagent_containers/proc/splashtarget(obj/target, mob/user) - if (user.a_intent == I_HURT) - if (standard_splash_mob(user,target)) - return TRUE - if (reagents && reagents.total_volume) - user.visible_message( - SPAN_NOTICE("\The [user] splashes \the [src] onto \the [target]."), - SPAN_NOTICE("You splash the contents of \the [src] onto \the [target]."), - SPAN_NOTICE("You hear the sound of liquid splashing.") - ) - reagents.splash(target, reagents.total_volume) - return TRUE - -/obj/item/reagent_containers/proc/self_feed_message(var/mob/user) - to_chat(user, "You eat \the [src]") - -/obj/item/reagent_containers/proc/other_feed_message_start(var/mob/user, var/mob/target) - user.visible_message("[user] is trying to feed [target] \the [src]!") - -/obj/item/reagent_containers/proc/other_feed_message_finish(var/mob/user, var/mob/target) - user.visible_message("[user] has fed [target] \the [src]!") - -/obj/item/reagent_containers/proc/feed_sound(var/mob/user) - return - -/obj/item/reagent_containers/proc/standard_feed_mob(var/mob/user, var/mob/target) // This goes into attack - if(!istype(target)) - return 0 - - if(!reagents || !reagents.total_volume) - to_chat(user, "\The [src] is empty.") - return 1 - - // only carbons can eat - if(istype(target, /mob/living/carbon)) - if(target == user) - if(istype(user, /mob/living/carbon/human)) - var/mob/living/carbon/human/H = user - if (user.a_intent == I_HURT) - return - if (!H.check_has_mouth()) - to_chat(user, "Where do you intend to put \the [src]? You don't have a mouth!") - return - var/obj/item/blocked = H.check_mouth_coverage() - if (blocked) - to_chat(user, "\The [blocked] is in the way!") - return - - user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN) //puts a limit on how fast people can eat/drink things - self_feed_message(user) - reagents.trans_to_mob(user, issmall(user) ? Ceil(amount_per_transfer_from_this/2) : amount_per_transfer_from_this, CHEM_INGEST) - feed_sound(user) - add_trace_DNA(user) - return 1 - - - else - if (user.a_intent == I_HURT) - return - var/mob/living/carbon/H = target - if (!H.check_has_mouth()) - to_chat(user, "Where do you intend to put \the [src]? \The [H] doesn't have a mouth!") - return - var/obj/item/blocked = H.check_mouth_coverage() - if (blocked) - to_chat(user, "\The [blocked] is in the way!") - return - - other_feed_message_start(user, target) - - user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN) - if(!do_after(user, 3 SECONDS, target, DO_DEFAULT | DO_USER_UNIQUE_ACT | DO_PUBLIC_PROGRESS)) - return - - other_feed_message_finish(user, target) - - var/contained = reagentlist() - admin_attack_log(user, target, "Fed the victim with [name] (Reagents: [contained])", "Was fed [src] (Reagents: [contained])", "used [src] (Reagents: [contained]) to feed") - - reagents.trans_to_mob(target, amount_per_transfer_from_this, CHEM_INGEST) - feed_sound(user) - add_trace_DNA(target) - return 1 - - return 0 - -/obj/item/reagent_containers/proc/standard_pour_into(var/mob/user, var/atom/target) // This goes into afterattack and yes, it's atom-level - if(!target.reagents) - return 0 - - // Ensure we don't splash beakers and similar containers. - if(!target.is_open_container() && istype(target, /obj/item/reagent_containers)) - to_chat(user, "\The [target] is closed.") - return 1 - // Otherwise don't care about splashing. - else if(!target.is_open_container()) - return 0 - - if(!reagents || !reagents.total_volume) - to_chat(user, "[src] is empty.") - return 1 - - if(!target.reagents.get_free_space()) - to_chat(user, "[target] is full.") - return 1 - - var/trans = reagents.trans_to(target, amount_per_transfer_from_this) - playsound(src, 'sound/effects/pour.ogg', 25, 1) - to_chat(user, "You transfer [trans] unit\s of the solution to \the [target]. \The [src] now contains [src.reagents.total_volume] units.") - return 1 - -/obj/item/reagent_containers/do_surgery(mob/living/carbon/M, mob/living/user) - if(user.zone_sel.selecting != BP_MOUTH) //in case it is ever used as a surgery tool - return ..() - -/obj/item/reagent_containers/AltClick(var/mob/user) - if(possible_transfer_amounts) - set_amount_per_transfer_from_this() - else - return ..() - -/obj/item/reagent_containers/examine(mob/user) - . = ..() - if(!reagents) - return - if(hasHUD(user, HUD_SCIENCE)) - var/prec = user.skill_fail_chance(SKILL_CHEMISTRY, 10) - to_chat(user, "The [src] contains: [reagents.get_reagents(precision = prec)].") - else if((loc == user) && user.skill_check(SKILL_CHEMISTRY, SKILL_EXPERT)) - to_chat(user, "Using your chemistry knowledge, you identify the following reagents in \the [src]: [reagents.get_reagents(!user.skill_check(SKILL_CHEMISTRY, SKILL_PROF), 5)].") - -/obj/item/reagent_containers/ex_act(severity) - if(reagents) - for(var/datum/reagent/R in reagents.reagent_list) - R.ex_act(src, severity) - ..() diff --git a/code/modules/reagents/reagent_containers/blood_pack.dm b/code/modules/reagents/reagent_containers/blood_pack.dm deleted file mode 100644 index ffe8810a9af31..0000000000000 --- a/code/modules/reagents/reagent_containers/blood_pack.dm +++ /dev/null @@ -1,110 +0,0 @@ -/obj/item/storage/box/bloodpacks - name = "blood packs box" - desc = "This box contains blood packs." - icon_state = "sterile" - startswith = list(/obj/item/reagent_containers/ivbag = 7) - -/obj/item/reagent_containers/ivbag - name = "\improper IV bag" - desc = "Flexible bag for IV injectors." - icon = 'icons/obj/bloodpack.dmi' - icon_state = "empty" - w_class = ITEM_SIZE_TINY - volume = 120 - possible_transfer_amounts = "0.2;1;2" - amount_per_transfer_from_this = REM - atom_flags = ATOM_FLAG_OPEN_CONTAINER - - var/mob/living/carbon/human/attached - -/obj/item/reagent_containers/ivbag/Destroy() - STOP_PROCESSING(SSobj,src) - attached = null - . = ..() - -/obj/item/reagent_containers/ivbag/on_reagent_change() - update_icon() - if(reagents.total_volume > volume/2) - w_class = ITEM_SIZE_SMALL - else - w_class = ITEM_SIZE_TINY - -/obj/item/reagent_containers/ivbag/on_update_icon() - overlays.Cut() - var/percent = round(reagents.total_volume / volume * 100) - if(reagents.total_volume) - var/image/filling = image('icons/obj/bloodpack.dmi', "[round(percent,25)]") - filling.color = reagents.get_color() - overlays += filling - overlays += image('icons/obj/bloodpack.dmi', "top") - if(attached) - overlays += image('icons/obj/bloodpack.dmi', "dongle") - -/obj/item/reagent_containers/ivbag/MouseDrop(over_object, src_location, over_location) - if(!CanMouseDrop(over_object)) - return - if(!ismob(loc)) - return - if(attached) - visible_message("\The [attached] is taken off \the [src]") - attached = null - else if(ishuman(over_object)) - if(do_IV_hookup(over_object, usr, src)) - attached = over_object - START_PROCESSING(SSobj,src) - update_icon() - -/obj/item/reagent_containers/ivbag/Process() - if(!ismob(loc)) - return PROCESS_KILL - - if(attached) - if(!loc.Adjacent(attached)) - attached = null - visible_message("\The [attached] detaches from \the [src]") - update_icon() - return PROCESS_KILL - else - return PROCESS_KILL - - var/mob/M = loc - if(M.l_hand != src && M.r_hand != src) - return - - if(!reagents.total_volume) - return - - reagents.trans_to_mob(attached, amount_per_transfer_from_this, CHEM_BLOOD) - update_icon() - -/obj/item/reagent_containers/ivbag/nanoblood/New() - ..() - reagents.add_reagent(/datum/reagent/nanoblood, volume) - -/obj/item/reagent_containers/ivbag/blood - name = "blood pack" - var/blood_type = null - -/obj/item/reagent_containers/ivbag/blood/New() - ..() - if(blood_type) - name = "blood pack [blood_type]" - reagents.add_reagent(/datum/reagent/blood, volume, list("donor" = null, "blood_DNA" = null, "blood_type" = blood_type, "trace_chem" = null)) - -/obj/item/reagent_containers/ivbag/blood/APlus - blood_type = "A+" - -/obj/item/reagent_containers/ivbag/blood/AMinus - blood_type = "A-" - -/obj/item/reagent_containers/ivbag/blood/BPlus - blood_type = "B+" - -/obj/item/reagent_containers/ivbag/blood/BMinus - blood_type = "B-" - -/obj/item/reagent_containers/ivbag/blood/OPlus - blood_type = "O+" - -/obj/item/reagent_containers/ivbag/blood/OMinus - blood_type = "O-" diff --git a/code/modules/reagents/reagent_containers/borghypo.dm b/code/modules/reagents/reagent_containers/borghypo.dm deleted file mode 100644 index 7025aafe63df6..0000000000000 --- a/code/modules/reagents/reagent_containers/borghypo.dm +++ /dev/null @@ -1,305 +0,0 @@ -/obj/item/reagent_containers/borghypo - name = "robot hypospray" - desc = "An advanced chemical synthesizer and injection system, designed for heavy-duty medical equipment." - icon = 'icons/obj/syringe.dmi' - item_state = "hypo" - icon_state = "borghypo" - amount_per_transfer_from_this = 5 - volume = 30 - possible_transfer_amounts = null - canremove = FALSE - - /// Numeric index of the synthesizer in use, or 0 if dispensing from an external container - var/mode = 1 - var/weakref/dispense = null - var/charge_cost = 50 - var/charge_tick = 0 - var/recharge_time = 5 //Time it takes for shots to recharge (in seconds) - - var/list/reagent_ids = list(/datum/reagent/tricordrazine, /datum/reagent/inaprovaline, /datum/reagent/spaceacillin) - var/list/reagent_volumes = list() - var/list/reagent_names = list() - -/obj/item/reagent_containers/borghypo/surgeon - reagent_ids = list(/datum/reagent/inaprovaline, /datum/reagent/bicaridine, /datum/reagent/dexalin, /datum/reagent/tramadol) - -/obj/item/reagent_containers/borghypo/crisis - reagent_ids = list(/datum/reagent/inaprovaline, /datum/reagent/dylovene, /datum/reagent/dexalin, /datum/reagent/tramadol, /datum/reagent/adrenaline) - -/obj/item/reagent_containers/borghypo/Initialize() - . = ..() - - for(var/T in reagent_ids) - reagent_volumes[T] = volume - var/datum/reagent/R = T - reagent_names += initial(R.name) - -/obj/item/reagent_containers/borghypo/Initialize() - . = ..() - START_PROCESSING(SSobj, src) - -/obj/item/reagent_containers/borghypo/Destroy() - STOP_PROCESSING(SSobj, src) - . = ..() - -/obj/item/reagent_containers/borghypo/Process() //Every [recharge_time] seconds, recharge some reagents for the cyborg+ - if(++charge_tick < recharge_time) - return 0 - charge_tick = 0 - - if(isrobot(loc)) - var/mob/living/silicon/robot/R = loc - if(R && R.cell) - for(var/T in reagent_ids) - if(reagent_volumes[T] < volume) - R.cell.use(charge_cost) - reagent_volumes[T] = min(reagent_volumes[T] + 5, volume) - return 1 - -/obj/item/reagent_containers/borghypo/attack(var/mob/living/M, var/mob/user, var/target_zone) - if(!istype(M)) - return - - if(mode && !reagent_volumes[reagent_ids[mode]]) - to_chat(user, SPAN_WARNING("\The [src] is empty.")) - return - var/obj/item/reagent_containers/container = null - if (!mode) - container = dispense.resolve() - if (!valid_container(user, container)) - to_chat(user, SPAN_WARNING("Can't find the container to dispense from.")) - return - if (!container.reagents?.total_volume) - to_chat(user, SPAN_WARNING("\The [container] is empty.")) - - var/allow = M.can_inject(user, target_zone) - if (allow) - if (allow == INJECTION_PORT) - user.visible_message(SPAN_WARNING("\The [user] begins hunting for an injection port on \the [M]'s suit!")) - if(!user.do_skilled(INJECTION_PORT_DELAY, SKILL_MEDICAL, M, do_flags = DO_MEDICAL)) - return - to_chat(user, SPAN_NOTICE("You inject [M] with the injector.")) - if(ishuman(M)) - var/mob/living/carbon/human/H = M - H.custom_pain(SPAN_WARNING("You feel a tiny prick!"), 1, TRUE, H.get_organ(user.zone_sel.selecting)) - - if(M.reagents) - if (mode) - var/datum/reagent/R = reagent_ids[mode] - var/should_admin_log = initial(R.should_admin_log) - var/transferred = min(amount_per_transfer_from_this, reagent_volumes[R]) - M.reagents.add_reagent(R, transferred) - reagent_volumes[R] -= transferred - if (should_admin_log) - admin_inject_log(user, M, src, R, transferred) - to_chat(user, SPAN_NOTICE("[transferred] units injected. [reagent_volumes[R]] units remaining.")) - else - var/datum/reagents/R = container.reagents - var/should_admin_log = R.should_admin_log() - var/contained = R.get_reagents() - var/transferred = R.trans_to_mob(M, amount_per_transfer_from_this, CHEM_BLOOD) - if (should_admin_log) - admin_inject_log(user, M, src, contained, transferred) - to_chat(user, SPAN_NOTICE("[transferred] units injected. [R.total_volume] units remaining in \the [container].")) - return - -/obj/item/reagent_containers/borghypo/attack_self(mob/user as mob) - ui_interact(user) - -/obj/item/reagent_containers/borghypo/examine(mob/user, distance) - . = ..() - if(distance > 2) - return - - if (mode) - var/datum/reagent/R = reagent_ids[mode] - to_chat(user, SPAN_NOTICE("It is currently producing [initial(R.name)] and has [reagent_volumes[R]] out of [volume] units left.")) - else - var/obj/item/reagent_containers/container = dispense.resolve() - if (istype(container)) - var/datum/reagents/R = container.reagents - if (istype(R)) - to_chat(user, SPAN_NOTICE("It is currently dispensing from \the [container] which has [R.total_volume] out of [R.maximum_volume] units left.")) - return - to_chat(user, SPAN_WARNING("It is currently empty.")) - -/obj/item/reagent_containers/borghypo/ui_interact(mob/user, ui_key = "main", datum/nanoui/ui = null, force_open = TRUE) - var/data = list() - data["selected"] = mode ? reagent_names[mode] : dispense.ref - data["synthReagents"] = reagent_names - data["bottles"] = list() - - var/list/bottles = list() - - var/mob/living/silicon/robot/robot = loc - if (istype(robot)) - var/list/equipment = robot.module.equipment - for (var/obj/item/reagent_containers/glass/container in equipment) - // Will pick up on any containers directly in the loadout, like buckets and legacy robot bottles - bottles += container - for (var/obj/item/robot_rack/bottle/rack in equipment) - // Append contents - bottles += rack.held - for (var/obj/item/gripper/gripper in equipment) - // If the gripper's holding a container, add it in - if (istype(gripper.wrapped, /obj/item/reagent_containers/glass)) - bottles += gripper.wrapped - - for (var/obj/item/reagent_containers/bottle in bottles) - var/iconPath = "bottle-\ref[bottle].png" - var/icon/flatIcon = getFlatIcon(bottle) - flatIcon.Scale(64, 64) // Scale to avoid blurring in the browser - send_rsc(user, flatIcon, iconPath) - data["bottles"] += list(list( // It's completely ridiculous that this double list thing is necessary - "id" = ref(bottle), - "icon" = iconPath, - "name" = bottle.label_text || bottle.name, - "total_volume" = bottle.reagents ? bottle.reagents.total_volume : 0, - "maximum_volume" = bottle.reagents ? bottle.reagents.maximum_volume : 0 - )) - - ui = SSnano.try_update_ui(user, src, ui_key, ui, data, force_open) - if(!ui) - var/nbottles = length(bottles) - var/width = max(330, nbottles * 165) - var/height = min(600, 240 + 10 * length(reagent_ids)) - ui = new(user, src, ui_key, "borghypo.tmpl", name, width, height) - ui.set_initial_data(data) - ui.open() - ui.auto_update_layout = TRUE - ui.set_auto_update(TRUE) - -/obj/item/reagent_containers/borghypo/OnTopic(mob/user, list/href_list, datum/topic_state/state) - var/selection = href_list["selected"] - - var/obj/item/reagent_containers/bottle = locate(selection) - if (istype(bottle)) - if (valid_container(user, bottle)) - mode = 0 - dispense = weakref(bottle) - to_chat(user, SPAN_NOTICE("Dispensing from \the [bottle].")) - return TOPIC_REFRESH - - var/index = reagent_names.Find(selection) - if (index) - mode = index - dispense = null - to_chat(user, SPAN_NOTICE("Synthesizer is now producing [selection].")) - return TOPIC_REFRESH - - return TOPIC_NOACTION - -/** -* Check the bottle is still accessible. -* Valid places the bottle could be: -* * in the robot's active modules (loc == user) -* * in the robot's inactive modules (loc == user.module) -* * in a rack or gripper in either of these places -*/ -/obj/item/reagent_containers/borghypo/proc/valid_container(mob/user, obj/item/reagent_containers/container) - var/mob/living/silicon/robot/robot = user - return istype(container) && (container.loc == user || container.loc.loc == user || istype(robot) && container.loc.loc == robot.module) - -/obj/item/reagent_containers/borghypo/service - name = "cyborg drink synthesizer" - desc = "A portable drink dispencer." - icon = 'icons/obj/drinks.dmi' - icon_state = "shaker" - charge_cost = 5 - recharge_time = 3 - volume = 60 - possible_transfer_amounts = "5;10;20;30" - reagent_ids = list( - /datum/reagent/ethanol/beer, - /datum/reagent/ethanol/coffee/kahlua, - /datum/reagent/ethanol/whiskey, - /datum/reagent/ethanol/wine, - /datum/reagent/ethanol/vodka, - /datum/reagent/ethanol/gin, - /datum/reagent/ethanol/rum, - /datum/reagent/ethanol/tequilla, - /datum/reagent/ethanol/vermouth, - /datum/reagent/ethanol/cognac, - /datum/reagent/ethanol/ale, - /datum/reagent/ethanol/mead, - /datum/reagent/water, - /datum/reagent/sugar, - /datum/reagent/drink/ice, - /datum/reagent/drink/tea, - /datum/reagent/drink/tea/icetea, - /datum/reagent/drink/space_cola, - /datum/reagent/drink/spacemountainwind, - /datum/reagent/drink/dr_gibb, - /datum/reagent/drink/space_up, - /datum/reagent/drink/tonic, - /datum/reagent/drink/sodawater, - /datum/reagent/drink/lemon_lime, - /datum/reagent/drink/juice/orange, - /datum/reagent/drink/juice/lime, - /datum/reagent/drink/juice/watermelon, - /datum/reagent/drink/coffee, - /datum/reagent/drink/hot_coco, - /datum/reagent/drink/tea/green, - /datum/reagent/drink/spacemountainwind, - /datum/reagent/ethanol/beer, - /datum/reagent/ethanol/coffee/kahlua - ) - -/obj/item/reagent_containers/borghypo/service/attack(var/mob/M, var/mob/user) - return - -/obj/item/reagent_containers/borghypo/service/afterattack(var/obj/target, var/mob/user, var/proximity) - if(!proximity) - return - - if(!target.is_open_container() || !target.reagents) - return - - if(!target.reagents.get_free_space()) - to_chat(user, SPAN_WARNING("[target] is full.")) - return - - if (mode) - var/datum/reagent/R = reagent_ids[mode] - if(!reagent_volumes[R]) - to_chat(user, SPAN_WARNING("[src] is out of this reagent, give it some time to refill.")) - return - var/transferred = min(amount_per_transfer_from_this, reagent_volumes[R]) - target.reagents.add_reagent(R, transferred) - reagent_volumes[R] -= transferred - to_chat(user, SPAN_NOTICE("You transfer [transferred] units of the solution to [target].")) - else - var/obj/item/reagent_containers/container = dispense.resolve() - if (!valid_container(user, container)) - to_chat(user, SPAN_WARNING("Can't find the container to dispense from.")) - return - var/datum/reagents/R = container.reagents - if (!R || !R.total_volume) - to_chat(user, SPAN_WARNING("\The [container] is empty.")) - var/transferred = R.trans_to_holder(target.reagents, amount_per_transfer_from_this) - to_chat(user, "You transfer [transferred] units of the solution to [target].") - - -/obj/item/robot_rack/bottle - name = "bottle rack" - icon = 'icons/obj/chemical.dmi' - icon_state = "bottle-1" - object_type = /obj/item/reagent_containers/glass/bottle - capacity = 4 - attack_self_on_deploy = FALSE // Don't open/close bottles on deploy - -// Hint that the hypo can use the bottle rack's contents -/obj/item/robot_rack/bottle/examine(mob/user) - . = ..() - var/mob/living/silicon/robot/R = user - if (istype(R)) - var/obj/item/reagent_containers/borghypo/hypo = locate() in R.module.equipment - if (istype(hypo)) - to_chat(user, "Its contents are available to \the [hypo].") - -// Extra message for if you try to pick up beakers -/obj/item/robot_rack/bottle/resolve_attackby(obj/O, mob/user, click_params) - if (!istype(O, object_type) && istype(O, /obj/item/reagent_containers/glass)) - to_chat(user, SPAN_WARNING("\The [O] is the wrong shape for \the [src].")) - return - . = ..() diff --git a/code/modules/reagents/reagent_containers/drinkingglass/drinkingglass.dm b/code/modules/reagents/reagent_containers/drinkingglass/drinkingglass.dm deleted file mode 100644 index f930ee54f42ac..0000000000000 --- a/code/modules/reagents/reagent_containers/drinkingglass/drinkingglass.dm +++ /dev/null @@ -1,233 +0,0 @@ -var/global/const/DRINK_FIZZ = "fizz" -var/global/const/DRINK_ICE = "ice" -var/global/const/DRINK_VAPOR = "vapor" -var/global/const/DRINK_ICON_DEFAULT = "" -var/global/const/DRINK_ICON_NOISY = "noise" - -/obj/item/reagent_containers/food/drinks/glass2 - name = "glass" // Name when empty - base_name = "glass" - desc = "A generic drinking glass." // Description when empty - icon = 'icons/obj/drink_glasses/square.dmi' - icon_state = null - base_icon = "square" // Base icon name - filling_states = "20;40;60;80;100" - volume = 30 - matter = list(MATERIAL_GLASS = 65) - - var/list/extras = list() // List of extras. Two extras maximum - - var/rim_pos // Position of the rim for fruit slices. list(y, x_left, x_right) - var/filling_overlayed //if filling should go on top of the icon (e.g. opaque cups) - var/static/list/filling_icons_cache = list() - - center_of_mass ="x=16;y=9" - - amount_per_transfer_from_this = 5 - possible_transfer_amounts = "5;10;15;30" - atom_flags = ATOM_FLAG_OPEN_CONTAINER - temperature_coefficient = 4 - - var/custom_name - var/custom_desc - -/obj/item/reagent_containers/food/drinks/glass2/examine(mob/M) - . = ..() - - for(var/I in extras) - if(istype(I, /obj/item/glass_extra)) - to_chat(M, "There is \a [I] in \the [src].") - else if(istype(I, /obj/item/reagent_containers/food/snacks/fruit_slice)) - to_chat(M, "There is \a [I] on the rim.") - else - to_chat(M, "There is \a [I] somewhere on the glass. Somehow.") - - if(has_ice()) - to_chat(M, "There is some ice floating in the drink.") - - if(has_fizz()) - to_chat(M, "It is fizzing slightly.") - -/obj/item/reagent_containers/food/drinks/glass2/proc/has_ice() - if(length(reagents?.reagent_list)) - var/datum/reagent/R = reagents.get_master_reagent() - if(!((R.type == /datum/reagent/drink/ice) || ("ice" in R.glass_special))) // if it's not a cup of ice, and it's not already supposed to have ice in, see if the bartender's put ice in it - if(reagents.has_reagent(/datum/reagent/drink/ice, reagents.total_volume / 10)) // 10% ice by volume - return 1 - - return 0 - -/obj/item/reagent_containers/food/drinks/glass2/proc/has_fizz() - if(length(reagents?.reagent_list)) - var/datum/reagent/R = reagents.get_master_reagent() - if(("fizz" in R.glass_special)) - return 1 - var/totalfizzy = 0 - for(var/datum/reagent/re in reagents.reagent_list) - if("fizz" in re.glass_special) - totalfizzy += re.volume - if(totalfizzy >= reagents.total_volume / 5) // 20% fizzy by volume - return 1 - return 0 - -/obj/item/reagent_containers/food/drinks/glass2/proc/has_vapor() - if(length(reagents?.reagent_list)) - if(temperature > T0C + 40) - return 1 - var/datum/reagent/R = reagents.get_master_reagent() - if(!("vapor" in R.glass_special)) - var/totalvape = 0 - for(var/datum/reagent/re in reagents.reagent_list) - if("vapor" in re.glass_special) - totalvape += re.volume - if(totalvape >= volume * 0.6) // 60% vapor by container volume - return 1 - return 0 - -/obj/item/reagent_containers/food/drinks/glass2/Initialize() - . = ..() - if(!icon_state) - icon_state = base_icon - -/obj/item/reagent_containers/food/drinks/glass2/on_reagent_change() - temperature_coefficient = 4 / max(1, reagents.total_volume) - update_icon() - -/obj/item/reagent_containers/food/drinks/glass2/throw_impact(atom/hit_atom) - if(QDELETED(src)) - return - if(prob(80)) - if(length(reagents?.reagent_list)) - visible_message( - SPAN_DANGER("\The [src] shatters from the impact and spills all its contents!"), - SPAN_DANGER("You hear the sound of glass shattering!") - ) - reagents.splash(hit_atom, reagents.total_volume) - else - visible_message( - SPAN_DANGER("\The [src] shatters from the impact!"), - SPAN_DANGER("You hear the sound of glass shattering!") - ) - playsound(src.loc, pick(GLOB.shatter_sound), 100) - new /obj/item/material/shard(src.loc) - qdel(src) - else - if (length(reagents?.reagent_list)) - visible_message( - SPAN_DANGER("\The [src] bounces and spills all its contents!"), - SPAN_WARNING("You hear the sound of glass hitting something.") - ) - reagents.splash(hit_atom, reagents.total_volume) - else - visible_message( - SPAN_WARNING("\The [src] bounces dangerously. Luckily it didn't break."), - SPAN_WARNING("You hear the sound of glass hitting something.") - ) - playsound(src.loc, "sound/effects/Glasshit.ogg", 50) - -/obj/item/reagent_containers/food/drinks/glass2/proc/can_add_extra(obj/item/glass_extra/GE) - if(!("[base_icon]_[GE.glass_addition]left" in icon_states(icon))) - return 0 - if(!("[base_icon]_[GE.glass_addition]right" in icon_states(icon))) - return 0 - - return 1 - -/obj/item/reagent_containers/food/drinks/glass2/proc/get_filling_overlay(amount, overlay) - var/image/I = new() - if(!filling_icons_cache["[base_icon][amount][overlay]"]) - var/icon/base = new/icon(icon, "[base_icon][amount]") - if(overlay) - var/icon/extra = new/icon('icons/obj/drink_glasses/extras.dmi', overlay) - base.Blend(extra, ICON_MULTIPLY) - filling_icons_cache["[base_icon][amount][overlay]"] = image(base) - I.appearance = filling_icons_cache["[base_icon][amount][overlay]"] - return I - -/obj/item/reagent_containers/food/drinks/glass2/on_update_icon() - underlays.Cut() - overlays.Cut() - - if (length(reagents?.reagent_list)) - var/datum/reagent/R = reagents.get_master_reagent() - SetName("[base_name] of [R.glass_name ? R.glass_name : "something"]") - desc = R.glass_desc || custom_desc || initial(desc) - - var/list/under_liquid = list() - var/list/over_liquid = list() - - var/amnt = get_filling_state() - - if(has_ice()) - over_liquid |= image(icon, src, "[base_icon][amnt]_ice") - - if(has_fizz()) - over_liquid |= get_filling_overlay(amnt, "fizz") - - if(has_vapor()) - over_liquid |= image(icon, src, "[base_icon]_vapor") - - for(var/S in R.glass_special) - if("[base_icon]_[S]" in icon_states(icon)) - under_liquid |= image(icon, src, "[base_icon]_[S]") - else if("[base_icon][amnt]_[S]" in icon_states(icon)) - over_liquid |= image(icon, src, "[base_icon][amnt]_[S]") - - underlays += under_liquid - - var/image/filling = get_filling_overlay(amnt, R.glass_icon) - filling.color = reagents.get_color() - if(filling_overlayed) - overlays += filling - else - underlays += filling - - overlays += over_liquid - - else - SetName(custom_name || initial(name)) - desc = custom_desc || initial(desc) - - var/side = "left" - for(var/item in extras) - if(istype(item, /obj/item/glass_extra)) - var/obj/item/glass_extra/GE = item - var/image/I = image(icon, src, "[base_icon]_[GE.glass_addition][side]") - I.color = GE.color - underlays += I - else if(rim_pos && istype(item, /obj/item/reagent_containers/food/snacks/fruit_slice)) - var/obj/FS = item - var/image/I = image(FS) - - var/list/rim_pos_data = cached_key_number_decode(rim_pos) - var/fsy = rim_pos_data["y"] - 20 - var/fsx = rim_pos_data[side == "left" ? "x_left" : "x_right"] - 16 - I.SetTransform(scale = 0.5, offset_x = fsx, offset_y = fsy) - underlays += I - else continue - side = "right" - -/obj/item/reagent_containers/food/drinks/glass2/afterattack(obj/target, mob/user, proximity) - if (!proximity || standard_dispenser_refill(user, target) || standard_pour_into(user, target)) - return TRUE - splashtarget(target, user) - -/obj/item/reagent_containers/food/drinks/glass2/attackby(obj/item/W, mob/user) - if(istype(W, /obj/item/material/kitchen/utensil/spoon)) - if(user.a_intent == I_HURT) - user.visible_message("[user] bashes \the [src] with a spoon, shattering it to pieces! What a rube.") - playsound(src, "shatter", 30, 1) - if(reagents) - user.visible_message("The contents of \the [src] splash all over [user]!") - reagents.splash(user, reagents.total_volume) - qdel(src) - return - user.visible_message("[user] gently strikes \the [src] with a spoon, calling the room to attention.") - playsound(src, "sound/items/wineglass.ogg", 65, 1) - else return ..() - -/obj/item/reagent_containers/food/drinks/glass2/ProcessAtomTemperature() - var/old_temp = temperature - . = ..() - if(old_temp != temperature) - update_icon() \ No newline at end of file diff --git a/code/modules/reagents/reagent_containers/drinkingglass/extras.dm b/code/modules/reagents/reagent_containers/drinkingglass/extras.dm deleted file mode 100644 index df81554afbe4e..0000000000000 --- a/code/modules/reagents/reagent_containers/drinkingglass/extras.dm +++ /dev/null @@ -1,75 +0,0 @@ -/obj/item/reagent_containers/food/drinks/glass2/attackby(obj/item/I as obj, mob/user as mob) - if(extras.len >= 2) return ..() // max 2 extras, one on each side of the drink - - if(istype(I, /obj/item/glass_extra)) - var/obj/item/glass_extra/GE = I - if(can_add_extra(GE)) - extras += GE - if(!user.unEquip(GE, src)) - return - to_chat(user, "You add \the [GE] to \the [src].") - update_icon() - else - to_chat(user, "There's no space to put \the [GE] on \the [src]!") - else if(istype(I, /obj/item/reagent_containers/food/snacks/fruit_slice)) - if(!rim_pos) - to_chat(user, "There's no space to put \the [I] on \the [src]!") - return - var/obj/item/reagent_containers/food/snacks/fruit_slice/FS = I - extras += FS - if(!user.unEquip(FS, src)) - return - FS.pixel_x = 0 // Reset its pixel offsets so the icons work! - FS.pixel_y = 0 - to_chat(user, "You add \the [FS] to \the [src].") - update_icon() - else - return ..() - -/obj/item/reagent_containers/food/drinks/glass2/attack_hand(mob/user as mob) - if(src != user.get_inactive_hand()) - return ..() - - if(!extras.len) - to_chat(user, "There's nothing on the glass to remove!") - return - - var/choice = input(user, "What would you like to remove from the glass?") as null|anything in extras - if(!choice || !(choice in extras)) - return - - if(user.put_in_active_hand(choice)) - to_chat(user, "You remove \the [choice] from \the [src].") - extras -= choice - else - to_chat(user, "Something went wrong, please try again.") - - update_icon() - -/obj/item/glass_extra - name = "generic glass addition" - desc = "This goes on a glass." - var/glass_addition - var/glass_desc - w_class = ITEM_SIZE_TINY - icon = 'icons/obj/drink_glasses/extras.dmi' - -/obj/item/glass_extra/stick - name = "stick" - desc = "This goes in a glass." - glass_addition = "stick" - glass_desc = "There is a stick in the glass." - icon_state = "stick" - color = COLOR_BLACK - -/obj/item/glass_extra/stick/Initialize() - . = ..() - if(prob(50)) - color = get_random_colour(0,50,150) - -/obj/item/glass_extra/straw - name = "straw" - desc = "This goes in a glass." - glass_addition = "straw" - glass_desc = "There is a straw in the glass." - icon_state = "straw" diff --git a/code/modules/reagents/reagent_containers/drinkingglass/glass_boxes.dm b/code/modules/reagents/reagent_containers/drinkingglass/glass_boxes.dm deleted file mode 100644 index b499c27f6d393..0000000000000 --- a/code/modules/reagents/reagent_containers/drinkingglass/glass_boxes.dm +++ /dev/null @@ -1,82 +0,0 @@ -/obj/item/storage/box/mixedglasses - name = "glassware box" - desc = "A box of assorted glassware." - can_hold = list(/obj/item/reagent_containers/food/drinks/glass2) - - startswith = list( - /obj/item/reagent_containers/food/drinks/glass2/square, - /obj/item/reagent_containers/food/drinks/glass2/rocks, - /obj/item/reagent_containers/food/drinks/glass2/shake, - /obj/item/reagent_containers/food/drinks/glass2/cocktail, - /obj/item/reagent_containers/food/drinks/glass2/shot, - /obj/item/reagent_containers/food/drinks/glass2/pint, - /obj/item/reagent_containers/food/drinks/glass2/mug, - /obj/item/reagent_containers/food/drinks/glass2/wine - ) - -/obj/item/storage/box/mixedglasses/Initialize() - . = ..() - make_exact_fit() - -/obj/item/storage/box/glasses - name = "box of glasses" - var/glass_type = /obj/item/reagent_containers/food/drinks/glass2 - can_hold = list(/obj/item/reagent_containers/food/drinks/glass2) - -/obj/item/storage/box/glasses/Initialize() - . = ..() - - for(var/i = 1 to 7) - new glass_type(src) - make_exact_fit() - -/obj/item/storage/box/glasses/square - name = "box of half-pint glasses" - glass_type = /obj/item/reagent_containers/food/drinks/glass2/square - -/obj/item/storage/box/glasses/rocks - name = "box of rocks glasses" - glass_type = /obj/item/reagent_containers/food/drinks/glass2/rocks - -/obj/item/storage/box/glasses/shake - name = "box of milkshake glasses" - glass_type = /obj/item/reagent_containers/food/drinks/glass2/shake - -/obj/item/storage/box/glasses/cocktail - name = "box of cocktail glasses" - glass_type = /obj/item/reagent_containers/food/drinks/glass2/cocktail - -/obj/item/storage/box/glasses/shot - name = "box of shot glasses" - glass_type = /obj/item/reagent_containers/food/drinks/glass2/shot - -/obj/item/storage/box/glasses/pint - name = "box of pint glasses" - glass_type = /obj/item/reagent_containers/food/drinks/glass2/pint - -/obj/item/storage/box/glasses/mug - name = "box of glass mugs" - glass_type = /obj/item/reagent_containers/food/drinks/glass2/mug - -/obj/item/storage/box/glasses/wine - name = "box of wine glasses" - glass_type = /obj/item/reagent_containers/food/drinks/glass2/wine - -/obj/item/storage/box/glass_extras - name = "box of cocktail garnishings" - var/extra_type = /obj/item/glass_extra - can_hold = list(/obj/item/glass_extra) - storage_slots = 14 - -/obj/item/storage/box/glass_extras/Initialize() - for(var/i = 1 to 14) - new extra_type(src) - . = ..() - -/obj/item/storage/box/glass_extras/straws - name = "box of straws" - extra_type = /obj/item/glass_extra/straw - -/obj/item/storage/box/glass_extras/sticks - name = "box of drink sticks" - extra_type = /obj/item/glass_extra/stick diff --git a/code/modules/reagents/reagent_containers/drinkingglass/glass_types.dm b/code/modules/reagents/reagent_containers/drinkingglass/glass_types.dm deleted file mode 100644 index 391062b11a227..0000000000000 --- a/code/modules/reagents/reagent_containers/drinkingglass/glass_types.dm +++ /dev/null @@ -1,329 +0,0 @@ -/obj/item/reagent_containers/food/drinks/glass2/square - name = "half-pint glass" - base_name = "glass" - base_icon = "square" - icon = 'icons/obj/drink_glasses/square.dmi' - desc = "Your standard drinking glass." - filling_states = "20;40;60;80;100" - volume = 30 - possible_transfer_amounts = "5;10;15;30" - rim_pos = "y=23;x_left=13;x_right=20" - -/obj/item/reagent_containers/food/drinks/glass2/rocks - name = "rocks glass" - desc = "A robust tumbler with a thick, weighted bottom." - base_name = "glass" - base_icon = "rocks" - icon = 'icons/obj/drink_glasses/rocks.dmi' - filling_states = "25;50;75;100" - volume = 20 - possible_transfer_amounts = "5;10;20" - rim_pos = "y=21;x_left=10;x_right=23" - -/obj/item/reagent_containers/food/drinks/glass2/shake - name = "sherry glass" - desc = "Stemware with an untapered conical bowl." - base_name = "glass" - base_icon = "shake" - icon = 'icons/obj/drink_glasses/shake.dmi' - filling_states = "25;50;75;100" - volume = 30 - possible_transfer_amounts = "5;10;15;30" - rim_pos = "y=25;x_left=13;x_right=21" - -/obj/item/reagent_containers/food/drinks/glass2/cocktail - name = "cocktail glass" - desc = "Fragile stemware with a stout conical bowl. Don't spill." - base_name = "glass" - base_icon = "cocktail" - icon = 'icons/obj/drink_glasses/cocktail.dmi' - filling_states = "33;66;100" - volume = 15 - possible_transfer_amounts = "5;10;15" - rim_pos = "y=22;x_left=13;x_right=21" - -/obj/item/reagent_containers/food/drinks/glass2/shot - name = "shot glass" - desc = "A small glass, designed so that its contents can be consumed in one gulp." - base_name = "shot" - base_icon = "shot" - icon = 'icons/obj/drink_glasses/shot.dmi' - filling_states = "33;66;100" - volume = 5 - matter = list(MATERIAL_GLASS = 15) - possible_transfer_amounts = "1;2;5" - rim_pos = "y=17;x_left=13;x_right=21" - -/obj/item/reagent_containers/food/drinks/glass2/pint - name = "pint glass" - base_name = "pint" - base_icon = "pint" - icon = 'icons/obj/drink_glasses/pint.dmi' - filling_states = "16;33;50;66;83;100" - volume = 60 - matter = list(MATERIAL_GLASS = 125) - possible_transfer_amounts = "5;10;15;30;60" - rim_pos = "y=25;x_left=12;x_right=21" - -/obj/item/reagent_containers/food/drinks/glass2/mug - name = "glass mug" - desc = "A heavy mug with thick walls." - base_name = "mug" - base_icon = "mug" - icon = 'icons/obj/drink_glasses/mug.dmi' - filling_states = "25;50;75;100" - volume = 40 - possible_transfer_amounts = "5;10;20;40" - rim_pos = "y=22;x_left=12;x_right=20" - -/obj/item/reagent_containers/food/drinks/glass2/wine - name = "wine glass" - desc = "A piece of elegant stemware." - base_name = "glass" - base_icon = "wine" - icon = 'icons/obj/drink_glasses/wine.dmi' - filling_states = "20;40;60;80;100" - volume = 25 - possible_transfer_amounts = "5;10;15;25" - rim_pos = "y=25;x_left=12;x_right=21" - -/obj/item/reagent_containers/food/drinks/glass2/flute - name = "flute glass" - desc = "A piece of very elegant stemware." - base_name = "glass" - base_icon = "flute" - icon = 'icons/obj/drink_glasses/flute.dmi' - filling_states = "20;40;60;80;100" - volume = 25 - possible_transfer_amounts = "5;10;15;25" - rim_pos = "y=24;x_left=13;x_right=19" - -/obj/item/reagent_containers/food/drinks/glass2/carafe - name = "pitcher" - desc = "A handled glass pitcher." - base_name = "pitcher" - base_icon = "carafe" - icon = 'icons/obj/drink_glasses/carafe.dmi' - filling_states = "10;20;30;40;50;60;70;80;90;100" - volume = 120 - matter = list(MATERIAL_GLASS = 250) - possible_transfer_amounts = "5;10;15;30;60;120" - rim_pos = "y=26;x_left=12;x_right=21" - center_of_mass = "x=16;y=7" - -/obj/item/reagent_containers/food/drinks/glass2/coffeecup - name = "coffee cup" - desc = "A plain white coffee cup." - icon = 'icons/obj/drink_glasses/coffecup.dmi' - icon_state = "coffeecup" - item_state = "coffee" - volume = 30 - center_of_mass = "x=15;y=13" - filling_states = "40;80;100" - base_name = "cup" - base_icon = "coffeecup" - rim_pos = "y=22;x_left=12;x_right=20" - filling_overlayed = TRUE - -/obj/item/reagent_containers/food/drinks/glass2/coffeecup/foundation - name = "\improper Foundation coffee cup" - desc = "A white coffee cup with the Cuchulain Foundation logo stencilled onto it." - icon_state = "coffeecup_foundation" - base_name = "\improper Foundation cup" - -/obj/item/reagent_containers/food/drinks/glass2/coffeecup/black - name = "black coffee cup" - desc = "A sleek black coffee cup." - icon_state = "coffeecup_black" - base_name = "black cup" - -/obj/item/reagent_containers/food/drinks/glass2/coffeecup/green - name = "green coffee cup" - desc = "A pale green and pink coffee cup." - icon_state = "coffeecup_green" - base_name = "green cup" - -/obj/item/reagent_containers/food/drinks/glass2/coffeecup/heart - name = "heart coffee cup" - desc = "A white coffee cup, it prominently features a red heart." - icon_state = "coffeecup_heart" - base_name = "heart cup" - -/obj/item/reagent_containers/food/drinks/glass2/coffeecup/SCG - name = "\improper SCG coffee cup" - desc = "A blue coffee cup emblazoned with the crest of the Sol Central Government." - icon_state = "coffeecup_SCG" - base_name = "\improper SCG cup" - -/obj/item/reagent_containers/food/drinks/glass2/coffeecup/NT - name = "\improper NT coffee cup" - desc = "A red NanoTrasen coffee cup." - icon_state = "coffeecup_NT" - base_name = "\improper NT cup" - -/obj/item/reagent_containers/food/drinks/glass2/coffeecup/corp - name = "\improper EXO coffee cup" - desc = "A tasteful coffee cup in Expeditionary Corps Organisation corporate colours." - icon_state = "coffeecup_corp" - base_name = "\improper EXO cup" - -/obj/item/reagent_containers/food/drinks/glass2/coffeecup/one - name = "#1 coffee cup" - desc = "A white coffee cup, prominently featuring a #1." - icon_state = "coffeecup_one" - base_name = "#1 cup" - -/obj/item/reagent_containers/food/drinks/glass2/coffeecup/punitelli - name = "#1 monkey coffee cup" - desc = "A white coffee cup, prominently featuring a \"#1 monkey\" decal." - icon_state = "coffeecup_punitelli" - base_name = "#1 monkey cup" - -/obj/item/reagent_containers/food/drinks/glass2/coffeecup/punitelli/New() - ..() - reagents.add_reagent(/datum/reagent/drink/juice/banana, 30) - update_icon() - -/obj/item/reagent_containers/food/drinks/glass2/coffeecup/rainbow - name = "rainbow coffee cup" - desc = "A rainbow coffee cup. The colors are almost as blinding as a welder." - icon_state = "coffeecup_rainbow" - base_name = "rainbow cup" - -/obj/item/reagent_containers/food/drinks/glass2/coffeecup/metal - name = "metal coffee cup" - desc = "A metal coffee cup. You're not sure which metal." - icon_state = "coffeecup_metal" - base_name = "metal cup" - atom_flags = ATOM_FLAG_OPEN_CONTAINER - obj_flags = OBJ_FLAG_CONDUCTIBLE - -/obj/item/reagent_containers/food/drinks/glass2/coffeecup/STC - name = "\improper ICCG coffee cup" - desc = "A coffee cup adorned with the flag of the Gilgamesh Colonial Confederation, for when you need some espionage charges to go with your morning coffee." - icon_state = "coffeecup_STC" - base_name = "\improper ICCG cup" - -/obj/item/reagent_containers/food/drinks/glass2/coffeecup/pawn - name = "pawn coffee cup" - desc = "A black coffee cup adorned with the image of a red chess pawn." - icon_state = "coffeecup_pawn" - base_name = "pawn cup" - -/obj/item/reagent_containers/food/drinks/glass2/coffeecup/diona - name = "diona nymph coffee cup" - desc = "A green coffee cup featuring the image of a diona nymph." - icon_state = "coffeecup_diona" - base_name = "diona cup" - -/obj/item/reagent_containers/food/drinks/glass2/coffeecup/britcup - name = "british coffee cup" - desc = "A coffee cup with the British flag emblazoned on it." - icon_state = "coffeecup_brit" - base_name = "british cup" - -/obj/item/reagent_containers/food/drinks/glass2/coffeecup/dais - name = "\improper DAIS coffee cup" - desc = "A coffee cup imprinted with the stylish logo of Deimos Advanced Information Systems." - icon_state = "coffeecup_dais" - base_name = "\improper DAIS cup" - -/obj/item/reagent_containers/food/drinks/glass2/coffeecup/teacup - name = "teacup" - desc = "A plain white porcelain teacup." - icon = 'icons/obj/drink_glasses/teacup.dmi' - icon_state = "teacup" - item_state = "coffee" - volume = 20 - center_of_mass = "x=15;y=13" - filling_states = "100" - base_name = "teacup" - base_icon = "teacup" - -/obj/item/reagent_containers/food/drinks/glass2/coffeecup/custom/inherit_custom_item_data(var/datum/custom_item/citem) - . = ..() - if(citem.additional_data["base_name"]) - base_name = citem.additional_data["base_name"] || base_name - custom_name = citem.item_name - custom_desc = citem.item_desc - -/obj/item/reagent_containers/food/drinks/glass2/pineapple - name = "pineapple mug" - desc = "A mug made from a hollowed pineapple. Tropical!" - base_name = "pineapple mug" - base_icon = "pineapple" - icon = 'icons/obj/drink_glasses/pineapple.dmi' - filling_states = "25;50;75;100" - volume = 40 - possible_transfer_amounts = "5;10;20;40" - rim_pos = "y=22;x_left=12;x_right=20" - -/obj/item/reagent_containers/food/drinks/glass2/coconut - name = "coconut cup" - base_name = "coconut cup" - base_icon = "coconut" - icon = 'icons/obj/drink_glasses/coconut.dmi' - desc = "A cup made from a hollowed coconut." - filling_states = "20;40;60;80;100" - volume = 30 - possible_transfer_amounts = "5;10;15;30" - rim_pos = "y=23;x_left=13;x_right=20" - -/obj/item/reagent_containers/food/drinks/glass2/cognac - name = "snifter glass" - desc = "A snitfer, also known as a cognac glass, made for serving aged spirits." - base_name = "glass" - base_icon = "cognac" - icon = 'icons/obj/drink_glasses/cognac.dmi' - filling_states = "25;50;75;100" - volume = 20 - possible_transfer_amounts = "5;10;20" - rim_pos = "y=22;x_left=14;x_right=22" - -/obj/item/reagent_containers/food/drinks/glass2/goblet - name = "goblet" - desc = "A glass goblet, used to deliver alcohol to the upper class since ancient times." - base_name = "goblet" - base_icon = "goblet" - icon = 'icons/obj/drink_glasses/goblet.dmi' - filling_states = "20;40;60;80;100" - volume = 25 - possible_transfer_amounts = "5;10;15;25" - rim_pos = "y=24;x_left=14;x_right=20" - -/obj/item/reagent_containers/food/drinks/glass2/coffeecup/glass - name = "glass coffee cup" - desc = "A glass coffee cup, using space age technology to keep it cool for use." - icon_state = "glasscoffeecup" - item_state = "glasscoffeecup" - base_name = "glass cup" - base_icon = "glasscoffeecup" - -/obj/item/reagent_containers/food/drinks/glass2/coffeecup/tall - name = "tall coffee cup" - desc = "An unreasonably tall coffee cup, for when you really need to wake up in the morning." - icon = 'icons/obj/drink_glasses/coffecup_tall.dmi' - icon_state = "coffeecup_tall" - volume = 60 - center_of_mass = "x=15;y=19" - filling_states = "50;70;90;100" - base_name = "tall cup" - base_icon = "coffeecup_tall" - -/obj/item/reagent_containers/food/drinks/glass2/coffeecup/tall/black - name = "tall black coffee cup" - desc = "An unreasonably tall coffee cup, for when you really need to wake up in the morning. This one is black." - icon_state = "coffeecup_tall_black" - base_name = "tall black cup" - -/obj/item/reagent_containers/food/drinks/glass2/coffeecup/tall/metal - name = "tall metal coffee cup" - desc = "An unreasonably tall coffee cup, for when you really need to wake up in the morning. This one is made of metal." - icon_state = "coffeecup_tall_metal" - base_name = "tall metal cup" - -/obj/item/reagent_containers/food/drinks/glass2/coffeecup/tall/rainbow - name = "tall rainbow coffee cup" - desc = "An unreasonably tall coffee cup, for when you really need to wake up in the morning. This one is rainbow colored." - icon_state = "coffeecup_tall_rainbow" - base_name = "tall rainbow cup" \ No newline at end of file diff --git a/code/modules/reagents/reagent_containers/drinkingglass/shaker.dm b/code/modules/reagents/reagent_containers/drinkingglass/shaker.dm deleted file mode 100644 index 62aa852d7c35b..0000000000000 --- a/code/modules/reagents/reagent_containers/drinkingglass/shaker.dm +++ /dev/null @@ -1,33 +0,0 @@ - -/obj/item/reagent_containers/food/drinks/glass2/fitnessflask - name = "fitness shaker" - base_name = "shaker" - desc = "Big enough to contain enough protein to get perfectly swole. Don't mind the bits." - icon_state = "fitness-cup_black" - base_icon = "fitness-cup" - icon = 'icons/obj/drink_glasses/fitness.dmi' - volume = 100 - matter = list(MATERIAL_PLASTIC = 2000) - filling_states = "10;20;30;40;50;60;70;80;90;100" - possible_transfer_amounts = "5;10;15;25" - rim_pos = null // no fruit slices - var/lid_color = "black" - -/obj/item/reagent_containers/food/drinks/glass2/fitnessflask/New() - ..() - lid_color = pick("black", "red", "blue") - update_icon() - -/obj/item/reagent_containers/food/drinks/glass2/fitnessflask/on_update_icon() - ..() - icon_state = "[base_icon]_[lid_color]" - -/obj/item/reagent_containers/food/drinks/glass2/fitnessflask/proteinshake - name = "protein shake" - -/obj/item/reagent_containers/food/drinks/glass2/fitnessflask/proteinshake/New() - ..() - reagents.add_reagent(/datum/reagent/nutriment, 30) - reagents.add_reagent(/datum/reagent/iron, 10) - reagents.add_reagent(/datum/reagent/nutriment/protein, 15) - reagents.add_reagent(/datum/reagent/water, 45) diff --git a/code/modules/reagents/reagent_containers/dropper.dm b/code/modules/reagents/reagent_containers/dropper.dm deleted file mode 100644 index fa2400ca25086..0000000000000 --- a/code/modules/reagents/reagent_containers/dropper.dm +++ /dev/null @@ -1,121 +0,0 @@ -//////////////////////////////////////////////////////////////////////////////// -/// Droppers. -//////////////////////////////////////////////////////////////////////////////// -/obj/item/reagent_containers/dropper - name = "dropper" - desc = "A dropper. Transfers 5 units." - icon = 'icons/obj/chemical.dmi' - icon_state = "dropper0" - amount_per_transfer_from_this = 5 - possible_transfer_amounts = "1;2;3;4;5" - w_class = ITEM_SIZE_TINY - slot_flags = SLOT_EARS - volume = 5 - -/obj/item/reagent_containers/dropper/afterattack(var/obj/target, var/mob/user, var/proximity) - if(!target.reagents || !proximity) return - - if(reagents.total_volume) - - if(!target.reagents.get_free_space()) - to_chat(user, "[target] is full.") - return - - if(!target.is_open_container() && !ismob(target) && !istype(target, /obj/item/reagent_containers/food) && !istype(target, /obj/item/clothing/mask/smokable/cigarette)) //You can inject humans and food but you can't remove the shit. - to_chat(user, "You cannot directly fill this object.") - return - - var/trans = 0 - - if(ismob(target)) - if(user.a_intent == I_HELP) - return - - var/time = 20 //2/3rds the time of a syringe - user.visible_message("[user] is trying to squirt something into [target]'s eyes!") - - if(!do_after(user, time, target, DO_MEDICAL)) - return - - if(istype(target, /mob/living/carbon/human)) - var/mob/living/carbon/human/victim = target - - var/obj/item/safe_thing = null - if(victim.wear_mask) - if (victim.wear_mask.body_parts_covered & EYES) - safe_thing = victim.wear_mask - if(victim.head) - if (victim.head.body_parts_covered & EYES) - safe_thing = victim.head - if(victim.glasses) - if (victim.glasses.body_parts_covered & EYES) - safe_thing = victim.glasses - - if(safe_thing) - trans = reagents.splash(safe_thing, amount_per_transfer_from_this, max_spill=30) - user.visible_message("[user] tries to squirt something into [target]'s eyes, but fails!", "You transfer [trans] units of the solution.") - return - - var/mob/living/M = target - if (reagents.should_admin_log()) - var/contained = reagentlist() - admin_attack_log(user, M, "Squirted their victim with \a [src] (Reagents: [contained])", "Were squirted with \a [src] (Reagents: [contained])", "used \a [src] (Reagents: [contained]) to squirt at") - - var/spill_amt = M.incapacitated()? 0 : 30 - trans += reagents.splash(target, reagents.total_volume/2, max_spill = spill_amt) - trans += reagents.trans_to_mob(target, reagents.total_volume/2, CHEM_BLOOD) //I guess it gets into the bloodstream through the eyes or something - user.visible_message("[user] squirts something into [target]'s eyes!", "You transfer [trans] units of the solution.") - - - return - - else - trans = reagents.splash(target, amount_per_transfer_from_this, max_spill=0) //sprinkling reagents on generic non-mobs. Droppers are very precise - to_chat(user, "You transfer [trans] units of the solution.") - - else // Taking from something - - if(!target.is_open_container() && !istype(target,/obj/structure/reagent_dispensers)) - to_chat(user, "You cannot directly remove reagents from [target].") - return - - if(!target.reagents || !target.reagents.total_volume) - to_chat(user, "[target] is empty.") - return - - var/trans = target.reagents.trans_to_obj(src, amount_per_transfer_from_this) - - to_chat(user, "You fill the dropper with [trans] units of the solution.") - - return - -/obj/item/reagent_containers/dropper/on_reagent_change() - update_icon() - -/obj/item/reagent_containers/dropper/on_update_icon() - if(reagents.total_volume) - icon_state = "dropper1" - else - icon_state = "dropper0" - -/obj/item/reagent_containers/dropper/industrial - name = "Industrial Dropper" - desc = "A larger dropper. Transfers 10 units." - amount_per_transfer_from_this = 10 - possible_transfer_amounts = "1;2;3;4;5;6;7;8;9;10" - volume = 10 - -//////////////////////////////////////////////////////////////////////////////// -/// Droppers. END -//////////////////////////////////////////////////////////////////////////////// - -/obj/item/reagent_containers/dropper/peridaxon - name = "Dropper (Peridaxon)" - desc = "Contains peridaxon - used to rescue failing organs." - amount_per_transfer_from_this = 1 - -/obj/item/reagent_containers/dropper/peridaxon/Initialize() - . = ..() - reagents.add_reagent(/datum/reagent/peridaxon, 5) - update_icon() - diff --git a/code/modules/reagents/reagent_containers/food.dm b/code/modules/reagents/reagent_containers/food.dm deleted file mode 100644 index d07392c9d55ce..0000000000000 --- a/code/modules/reagents/reagent_containers/food.dm +++ /dev/null @@ -1,16 +0,0 @@ -//////////////////////////////////////////////////////////////////////////////// -/// Food. -//////////////////////////////////////////////////////////////////////////////// -/obj/item/reagent_containers/food - randpixel = 6 - atom_flags = ATOM_FLAG_OPEN_CONTAINER - possible_transfer_amounts = null - volume = 50 //Sets the default container amount for all food items. - var/filling_color = "#ffffff" //Used by sandwiches. - - -/obj/item/reagent_containers/food/on_color_transfer_reagent_change() - for(var/datum/reagent/R in reagents.reagent_list) - if (!R.color_foods) - continue - color = R.color //Possible todo: Mixing of food-coloring reagents for final result? diff --git a/code/modules/reagents/reagent_containers/food/cans.dm b/code/modules/reagents/reagent_containers/food/cans.dm deleted file mode 100644 index 60e5a45b44a9b..0000000000000 --- a/code/modules/reagents/reagent_containers/food/cans.dm +++ /dev/null @@ -1,346 +0,0 @@ -/obj/item/reagent_containers/food/drinks/cans - volume = 40 //just over one and a half cups - amount_per_transfer_from_this = 5 - atom_flags = 0 //starts closed - matter = list(MATERIAL_ALUMINIUM = 30) - -//DRINKS - -/obj/item/reagent_containers/food/drinks/cans/cola - name = "space cola" - desc = "Cola. in space." - icon_state = "cola" - center_of_mass = "x=16;y=10" - -/obj/item/reagent_containers/food/drinks/cans/cola/Initialize() - . = ..() - reagents.add_reagent(/datum/reagent/drink/space_cola, 30) - -/obj/item/reagent_containers/food/drinks/cans/waterbottle - name = "bottled water" - desc = "Pure drinking water, imported from the Martian poles." - icon_state = "waterbottle" - center_of_mass = "x=15;y=8" - matter = list(MATERIAL_PLASTIC = 40) - -/obj/item/reagent_containers/food/drinks/cans/waterbottle/Initialize() - . = ..() - reagents.add_reagent(/datum/reagent/water, 30) - -/obj/item/reagent_containers/food/drinks/cans/waterbottle/open(mob/user) - playsound(loc,'sound/effects/bonebreak1.ogg', rand(10,50), 1) - to_chat(user, "You twist open \the [src], destroying the safety seal!") - atom_flags |= ATOM_FLAG_OPEN_CONTAINER - -/obj/item/reagent_containers/food/drinks/cans/space_mountain_wind - name = "space mountain wind" - desc = "Blows right through you like a space wind." - icon_state = "space_mountain_wind" - center_of_mass = "x=16;y=10" - -/obj/item/reagent_containers/food/drinks/cans/space_mountain_wind/Initialize() - . = ..() - reagents.add_reagent(/datum/reagent/drink/spacemountainwind, 30) - -/obj/item/reagent_containers/food/drinks/cans/thirteenloko - name = "thirteen loko" - desc = "The CMO has advised crew members that consumption of Thirteen Loko may result in seizures, blindness, drunkeness, or even death. Please Drink Responsibly." - icon_state = "thirteen_loko" - center_of_mass = "x=16;y=8" - -/obj/item/reagent_containers/food/drinks/cans/thirteenloko/Initialize() - . = ..() - reagents.add_reagent(/datum/reagent/ethanol/thirteenloko, 30) - -/obj/item/reagent_containers/food/drinks/cans/dr_gibb - name = "dr. gibb" - desc = "A delicious mixture of 42 different flavors." - icon_state = "dr_gibb" - center_of_mass = "x=16;y=10" - -/obj/item/reagent_containers/food/drinks/cans/dr_gibb/Initialize() - . = ..() - reagents.add_reagent(/datum/reagent/drink/dr_gibb, 30) - -/obj/item/reagent_containers/food/drinks/cans/space_up - name = "space-up" - desc = "Tastes like a hull breach in your mouth." - icon_state = "space-up" - center_of_mass = "x=16;y=10" - -/obj/item/reagent_containers/food/drinks/cans/space_up/Initialize() - . = ..() - reagents.add_reagent(/datum/reagent/drink/space_up, 30) - -/obj/item/reagent_containers/food/drinks/cans/lemon_lime - name = "lemon-lime" - desc = "You wanted ORANGE. It gave you Lemon Lime." - icon_state = "lemon-lime" - center_of_mass = "x=16;y=10" - -/obj/item/reagent_containers/food/drinks/cans/lemon_lime/Initialize() - . = ..() - reagents.add_reagent(/datum/reagent/drink/lemon_lime, 30) - -/obj/item/reagent_containers/food/drinks/cans/iced_tea - name = "vrisk serket iced tea" - desc = "That sweet, refreshing southern earthy flavor. That's where it's from, right? South Earth?" - icon_state = "ice_tea_can" - center_of_mass = "x=16;y=10" - -/obj/item/reagent_containers/food/drinks/cans/iced_tea/Initialize() - . = ..() - reagents.add_reagent(/datum/reagent/drink/tea/icetea, 30) - -/obj/item/reagent_containers/food/drinks/cans/grape_juice - name = "grapel juice" - desc = "500 pages of rules of how to appropriately enter into a combat with this juice!" - icon_state = "purple_can" - center_of_mass = "x=16;y=10" - -/obj/item/reagent_containers/food/drinks/cans/grape_juice/Initialize() - . = ..() - reagents.add_reagent(/datum/reagent/drink/juice/grape, 30) - -/obj/item/reagent_containers/food/drinks/cans/tonic - name = "t-borg's tonic water" - desc = "Quinine tastes funny, but at least it'll keep that Space Malaria away." - icon_state = "tonic" - center_of_mass = "x=16;y=10" - -/obj/item/reagent_containers/food/drinks/cans/tonic/Initialize() - . = ..() - reagents.add_reagent(/datum/reagent/drink/tonic, 30) - -/obj/item/reagent_containers/food/drinks/cans/sodawater - name = "soda water" - desc = "A can of soda water. Still water's more refreshing cousin." - icon_state = "sodawater" - center_of_mass = "x=16;y=10" - -/obj/item/reagent_containers/food/drinks/cans/sodawater/Initialize() - . = ..() - reagents.add_reagent(/datum/reagent/drink/sodawater, 30) - -/obj/item/reagent_containers/food/drinks/cans/beastenergy - name = "beast energy" - desc = "100% pure energy, and 150% pure liver disease." - icon_state = "beastenergy" - center_of_mass = "x=16;y=6" - -/obj/item/reagent_containers/food/drinks/cans/beastenergy/Initialize() - . = . = ..() - reagents.add_reagent(/datum/reagent/drink/beastenergy, 30) - -//Items exclusive to the BODA machine on deck 4 and wherever else it pops up. First two are a bit jokey. Second two are genuine article. - -/obj/item/reagent_containers/food/drinks/cans/syndicolax - name = "red army twist" - desc = "A taste of what keeps our glorious nation running! Served as Space Commissariat Stahlin prefers it! Luke warm." - icon_state = "syndi_cola_x" - center_of_mass = "x=16;y=10" - -/obj/item/reagent_containers/food/drinks/cans/syndicolax/Initialize() - . = ..() - reagents.add_reagent(/datum/reagent/drink/juice/potato, 30) - -/obj/item/reagent_containers/food/drinks/cans/artbru - name = "arstotzka bru" - desc = "Just what any bureaucrat needs to get through the day. Keep stamping those papers!" - icon_state = "art_bru" - center_of_mass = "x=16;y=10" - -/obj/item/reagent_containers/food/drinks/cans/artbru/Initialize() - . = ..() - reagents.add_reagent(/datum/reagent/drink/juice/turnip, 30) - -/obj/item/reagent_containers/food/drinks/cans/syndicola - name = "terra-cola" - desc = "A can of the only soft drink state approved for the benefit of the people. Served at room temperature regardless of ambient temperatures thanks to innovative Terran insulation technology." - icon_state = "syndi_cola" - center_of_mass = "x=16;y=10" - -/obj/item/reagent_containers/food/drinks/cans/syndicola/Initialize() - . = ..() - reagents.add_reagent(/datum/reagent/water, 25) - reagents.add_reagent(/datum/reagent/iron, 5) - -/obj/item/reagent_containers/food/drinks/glass2/square/boda - name = "boda" - desc = "A tall glass of refreshing Boda!" - center_of_mass = "x=16;y=10" - -/obj/item/reagent_containers/food/drinks/glass2/square/boda/Initialize() - . = ..() - reagents.add_reagent(/datum/reagent/drink/sodawater, 30) - -/obj/item/reagent_containers/food/drinks/glass2/square/bodaplus - name = "tri kopeiki sirop boda" - desc = "A tall glass of even more refreshing Boda! Now with Sok!" - center_of_mass = "x=16;y=10" - -/obj/item/reagent_containers/food/drinks/glass2/square/bodaplus/Initialize() - . = ..() - reagents.add_reagent(/datum/reagent/drink/sodawater, 15) - reagents.add_reagent(pick(list( - /datum/reagent/drink/kiraspecial, - /datum/reagent/drink/juice/grape, - /datum/reagent/drink/juice/orange, - /datum/reagent/drink/juice/lemon, - /datum/reagent/drink/juice/lime, - /datum/reagent/drink/juice/apple, - /datum/reagent/drink/juice/pear, - /datum/reagent/drink/juice/banana, - /datum/reagent/drink/juice/berry, - /datum/reagent/drink/juice/watermelon)), 15) - -//Canned alcohols. - -/obj/item/reagent_containers/food/drinks/cans/speer - name = "space beer" - desc = "Now in a can!" - icon_state = "beercan" - center_of_mass = "x=16;y=10" - -/obj/item/reagent_containers/food/drinks/cans/speer/Initialize() - . = ..() - reagents.add_reagent(/datum/reagent/ethanol/beer/good, 30) - -/obj/item/reagent_containers/food/drinks/cans/ale - name = "magm-ale" - desc = "Now in a can!" - icon_state = "alecan" - center_of_mass = "x=16;y=10" - -/obj/item/reagent_containers/food/drinks/cans/ale/Initialize() - . = ..() - reagents.add_reagent(/datum/reagent/ethanol/ale, 30) - - -//Fox's Sodas from Legacy Bay: NSV Luna - - - -/obj/item/reagent_containers/food/drinks/cans/cola_diet - name = "diet space cola" - desc = "Cola... in space! Now with extra self-confidence." - icon_state = "cola-blue" - -/obj/item/reagent_containers/food/drinks/cans/cola_diet/Initialize() - . = ..() - reagents.add_reagent(/datum/reagent/drink/diet_cola, 30) - -/obj/item/reagent_containers/food/drinks/cans/rootbeer - name = "rocket root beer" - desc = "Blast away with Rocket Root Beer!" - icon_state = "cola-brown" - -/obj/item/reagent_containers/food/drinks/cans/rootbeer/Initialize() - . = ..() - reagents.add_reagent(/datum/reagent/drink/rootbeer, 30) - -/obj/item/reagent_containers/food/drinks/cans/cola_apple - name = "andromeda apple" - desc = "Look to the stars with Andromeda Apple!" - icon_state = "cola-green" - -/obj/item/reagent_containers/food/drinks/cans/cola_apple/Initialize() - . = ..() - reagents.add_reagent(/datum/reagent/drink/apple_soda, 30) - -/obj/item/reagent_containers/food/drinks/cans/cola_orange - name = "orbital orange" - desc = "Feel out-of-this-world with Orbital Orange!" - icon_state = "cola-orange" - -/obj/item/reagent_containers/food/drinks/cans/cola_orange/Initialize() - . = ..() - reagents.add_reagent(/datum/reagent/drink/orange_soda, 30) - -/obj/item/reagent_containers/food/drinks/cans/cola_grape - name = "gravity grape" - desc = "Feel the planetfall with Gravity Grape!" - icon_state = "cola-purple" - -/obj/item/reagent_containers/food/drinks/cans/cola_grape/Initialize() - . = ..() - reagents.add_reagent(/datum/reagent/drink/grapesoda, 30) - -/obj/item/reagent_containers/food/drinks/cans/cola_lemonlime - name = "citrus star" - desc = "Shoot to space with Citrus Star!" - icon_state = "cola-yellow" - -/obj/item/reagent_containers/food/drinks/cans/cola_lemonlime/Initialize() - . = ..() - reagents.add_reagent(/datum/reagent/drink/lemon_lime, 30) - -/obj/item/reagent_containers/food/drinks/cans/cola_strawberry - name = "sirius strawberry" - desc = "See stars with Sirius Strawberry!" - icon_state = "cola-pink" - -/obj/item/reagent_containers/food/drinks/cans/cola_strawberry/Initialize() - . = ..() - reagents.add_reagent(/datum/reagent/drink/strawberry_soda, 30) - -/obj/item/reagent_containers/food/drinks/cans/cola_pork - name = "pork soda" - desc = "Primus sucks!" - icon_state = "cola-pork" - -/obj/item/reagent_containers/food/drinks/cans/cola_pork/Initialize() - . = ..() - reagents.add_reagent(/datum/reagent/drink/porksoda, 30) - -// Cola - -/obj/item/reagent_containers/food/drinks/cans/vanillacola - name = "vanilla cola" - desc = "Delicious vanilla cola in a can." - icon_state = "vcola" - center_of_mass = "x=16;y=6" - -/obj/item/reagent_containers/food/drinks/cans/vanillacola/Initialize() - . = . = ..() - reagents.add_reagent(/datum/reagent/drink/vanilla_cola, 30) - -/obj/item/reagent_containers/food/drinks/cans/cherrycola - name = "cherry cola" - desc = "Delicious cherry cola in a can." - icon_state = "ccola" - center_of_mass = "x=16;y=6" - -/obj/item/reagent_containers/food/drinks/cans/cherrycola/Initialize() - . = . = ..() - reagents.add_reagent(/datum/reagent/drink/cherry_cola, 30) - -/obj/item/reagent_containers/food/drinks/cans/orangecola - name = "orange cola" - desc = "Delicious orange cola in a can." - icon_state = "ocola" - center_of_mass = "x=16;y=6" - -/obj/item/reagent_containers/food/drinks/cans/orangecola/Initialize() - . = . = ..() - reagents.add_reagent(/datum/reagent/drink/orange_cola, 30) - -/obj/item/reagent_containers/food/drinks/cans/coffeecola - name = "coffee cola" - desc = "Delicious coffee cola in a can." - icon_state = "ccola" - center_of_mass = "x=16;y=6" - -/obj/item/reagent_containers/food/drinks/cans/coffeecola/Initialize() - . = . = ..() - reagents.add_reagent(/datum/reagent/drink/coffee/coffee_cola, 30) - -/obj/item/reagent_containers/food/drinks/cans/ionbru - name = "ion-bru" - desc = "Ion-Bru, the drink of all true scotsmen." - icon_state = "ionbru" - center_of_mass = "x=16;y=6" - -/obj/item/reagent_containers/food/drinks/cans/ionbru/Initialize() - . = . = ..() - reagents.add_reagent(/datum/reagent/drink/ionbru, 30) diff --git a/code/modules/reagents/reagent_containers/food/condiment.dm b/code/modules/reagents/reagent_containers/food/condiment.dm deleted file mode 100644 index 76aa8e7c8b51e..0000000000000 --- a/code/modules/reagents/reagent_containers/food/condiment.dm +++ /dev/null @@ -1,357 +0,0 @@ - -///////////////////////////////////////////////Condiments -//Notes by Darem: The condiments food-subtype is for stuff you don't actually eat but you use to modify existing food. They all -// leave empty containers when used up and can be filled/re-filled with other items. Formatting for first section is identical -// to mixed-drinks code. If you want an object that starts pre-loaded, you need to make it in addition to the other code. - -//Food items that aren't eaten normally and leave an empty container behind. -/obj/item/reagent_containers/food/condiment - name = "Condiment Container" - desc = "Just your average condiment container." - icon = 'icons/obj/food.dmi' - icon_state = "emptycondiment" - atom_flags = ATOM_FLAG_OPEN_CONTAINER - possible_transfer_amounts = "1;5;10" - center_of_mass = "x=16;y=6" - volume = 50 - var/list/starting_reagents - var/static/list/special_bottles = list( - /datum/reagent/nutriment/ketchup = /obj/item/reagent_containers/food/condiment/ketchup, - /datum/reagent/nutriment/barbecue = /obj/item/reagent_containers/food/condiment/barbecue, - /datum/reagent/capsaicin = /obj/item/reagent_containers/food/condiment/capsaicin, - /datum/reagent/enzyme = /obj/item/reagent_containers/food/condiment/enzyme, - /datum/reagent/nutriment/soysauce = /obj/item/reagent_containers/food/condiment/soysauce, - /datum/reagent/frostoil = /obj/item/reagent_containers/food/condiment/frostoil, - /datum/reagent/sodiumchloride = /obj/item/reagent_containers/food/condiment/small/saltshaker, - /datum/reagent/blackpepper = /obj/item/reagent_containers/food/condiment/small/peppermill, - /datum/reagent/nutriment/cornoil = /obj/item/reagent_containers/food/condiment/cornoil, - /datum/reagent/sugar = /obj/item/reagent_containers/food/condiment/sugar, - /datum/reagent/nutriment/mayo = /obj/item/reagent_containers/food/condiment/mayo, - /datum/reagent/nutriment/vinegar = /obj/item/reagent_containers/food/condiment/vinegar, - /datum/reagent/oliveoil = /obj/item/reagent_containers/food/condiment/small/oliveoil - ) - -/obj/item/reagent_containers/food/condiment/attackby(var/obj/item/W as obj, var/mob/user as mob) - if(istype(W, /obj/item/pen) || istype(W, /obj/item/device/flashlight/pen)) - var/tmp_label = sanitizeSafe(input(user, "Enter a label for [name]", "Label", label_text), MAX_NAME_LEN) - var/datum/extension/labels/L = get_or_create_extension(src, /datum/extension/labels) - L.AttachLabel(user, tmp_label) - return - -/obj/item/reagent_containers/food/condiment/attack_self(var/mob/user as mob) - return - -/obj/item/reagent_containers/food/condiment/attack(var/mob/M as mob, var/mob/user as mob, var/def_zone) - if(standard_feed_mob(user, M)) - return - -/obj/item/reagent_containers/food/condiment/afterattack(var/obj/target, var/mob/user, var/proximity) - if(!proximity) - return - - if(standard_dispenser_refill(user, target)) - return - if(standard_pour_into(user, target)) - return - - if(istype(target, /obj/item/reagent_containers/food/snacks)) // These are not opencontainers but we can transfer to them - if(!reagents || !reagents.total_volume) - to_chat(user, "There is no condiment left in \the [src].") - return - - if(!target.reagents.get_free_space()) - to_chat(user, "You can't add more condiment to \the [target].") - return - - var/trans = reagents.trans_to_obj(target, amount_per_transfer_from_this) - to_chat(user, "You add [trans] units of the condiment to \the [target].") - else - ..() - -/obj/item/reagent_containers/food/condiment/feed_sound(var/mob/user) - playsound(user.loc, 'sound/items/drink.ogg', rand(10, 50), 1) - -/obj/item/reagent_containers/food/condiment/self_feed_message(var/mob/user) - to_chat(user, "You swallow some of contents of \the [src].") - -/obj/item/reagent_containers/food/condiment/Initialize() - . = ..() - for(var/R in starting_reagents) - reagents.add_reagent(R, starting_reagents[R]) - -/obj/item/reagent_containers/food/condiment/on_reagent_change() - var/reagent = reagents.get_master_reagent_type() - if(reagent in special_bottles) - var/obj/item/reagent_containers/food/condiment/special_bottle = special_bottles[reagent] - SetName(initial(special_bottle.name)) - desc = initial(special_bottle.desc) - icon_state = initial(special_bottle.icon_state) - center_of_mass = initial(special_bottle.center_of_mass) - else - SetName(initial(name)) - desc = initial(desc) - center_of_mass = initial(center_of_mass) - if(reagents.reagent_list.len > 0) - icon_state = "mixedcondiments" - else - icon_state = "emptycondiment" - -/obj/item/reagent_containers/food/condiment/enzyme - name = "universal enzyme" - desc = "Used in cooking various dishes." - icon_state = "enzyme" - starting_reagents = list(/datum/reagent/enzyme = 50) - -/obj/item/reagent_containers/food/condiment/barbecue - name = "barbecue sauce" - desc = "Barbecue sauce, it's labeled 'sweet and spicy'" - icon_state = "barbecue" - starting_reagents = list(/datum/reagent/nutriment/barbecue = 50) - -/obj/item/reagent_containers/food/condiment/sugar - name = "sugar" - desc = "Cavities in a bottle." - starting_reagents = list(/datum/reagent/sugar = 50) - -/obj/item/reagent_containers/food/condiment/ketchup - name = "ketchup" - desc = "Tomato, but more liquid, stronger, better." - icon_state = "ketchup" - starting_reagents = list(/datum/reagent/nutriment/ketchup = 50) - -/obj/item/reagent_containers/food/condiment/cornoil - name = "corn oil" - desc = "A delicious oil used in cooking. Made from corn." - icon_state = "oliveoil" - starting_reagents = list(/datum/reagent/nutriment/cornoil = 50) - -/obj/item/reagent_containers/food/condiment/vinegar - name = "vinegar" - icon_state = "vinegar" - desc = "As acidic as it gets in the kitchen." - starting_reagents = list(/datum/reagent/nutriment/vinegar = 50) - -/obj/item/reagent_containers/food/condiment/mayo - name = "mayonnaise" - icon_state = "mayo" - desc = "Mayonnaise, used for centuries to make things edible." - starting_reagents = list(/datum/reagent/nutriment/mayo = 50) - -/obj/item/reagent_containers/food/condiment/frostoil - name = "coldsauce" - desc = "Leaves the tongue numb in its passage." - icon_state = "coldsauce" - starting_reagents = list(/datum/reagent/frostoil = 50) - -/obj/item/reagent_containers/food/condiment/capsaicin - name = "hotsauce" - desc = "You can almost TASTE the stomach ulcers now!" - icon_state = "hotsauce" - starting_reagents = list(/datum/reagent/capsaicin = 50) - -/obj/item/reagent_containers/food/condiment/small - possible_transfer_amounts = "1;20" - amount_per_transfer_from_this = 1 - volume = 20 - -/obj/item/reagent_containers/food/condiment/small/on_reagent_change() - return - -/obj/item/reagent_containers/food/condiment/small/saltshaker - name = "salt shaker" - desc = "Salt. From space oceans, presumably." - icon_state = "saltshakersmall" - center_of_mass = "x=16;y=9" - starting_reagents = list(/datum/reagent/sodiumchloride = 20) - -/obj/item/reagent_containers/food/condiment/small/peppermill - name = "pepper mill" - desc = "Often used to flavor food or make people sneeze." - icon_state = "peppermillsmall" - center_of_mass = "x=16;y=8" - starting_reagents = list(/datum/reagent/blackpepper = 20) - -/obj/item/reagent_containers/food/condiment/small/sugar - name = "sugar" - desc = "Sweetness in a bottle." - icon_state = "sugarsmall" - center_of_mass = "x=17;y=9" - starting_reagents = list(/datum/reagent/sugar = 20) - -//MRE condiments and drinks. - -/obj/item/reagent_containers/food/condiment/small/packet - icon_state = "packet_small" - w_class = ITEM_SIZE_TINY - possible_transfer_amounts = "1;5;10" - amount_per_transfer_from_this = 1 - volume = 10 - -/obj/item/reagent_containers/food/condiment/small/packet/salt - name = "salt packet" - desc = "Contains 5u of table salt." - icon_state = "packet_small_white" - starting_reagents = list(/datum/reagent/sodiumchloride = 5) - -/obj/item/reagent_containers/food/condiment/small/packet/pepper - name = "pepper packet" - desc = "Contains 5u of black pepper." - icon_state = "packet_small_black" - starting_reagents = list(/datum/reagent/blackpepper = 5) - -/obj/item/reagent_containers/food/condiment/small/packet/sugar - name = "sugar packet" - desc = "Contains 5u of refined sugar." - icon_state = "packet_small_white" - starting_reagents = list(/datum/reagent/sugar = 5) - -/obj/item/reagent_containers/food/condiment/small/packet/jelly - name = "jelly packet" - desc = "Contains 10u of cherry jelly. Best used for spreading on crackers." - starting_reagents = list(/datum/reagent/nutriment/cherryjelly = 10) - icon_state = "packet_medium" - -/obj/item/reagent_containers/food/condiment/small/packet/honey - name = "honey packet" - desc = "Contains 10u of honey." - starting_reagents = list(/datum/reagent/sugar = 10) - icon_state = "packet_medium" - -/obj/item/reagent_containers/food/condiment/small/packet/capsaicin - name = "hot sauce packet" - desc = "Contains 5u of hot sauce. Enjoy in moderation." - icon_state = "packet_small_red" - starting_reagents = list(/datum/reagent/capsaicin = 5) - -/obj/item/reagent_containers/food/condiment/small/packet/ketchup - name = "ketchup packet" - desc = "Contains 5u of ketchup." - icon_state = "packet_small_red" - starting_reagents = list(/datum/reagent/nutriment/ketchup = 5) - -/obj/item/reagent_containers/food/condiment/small/packet/mayo - name = "mayonnaise packet" - desc = "Contains 5u of mayonnaise." - icon_state = "packet_small_white" - starting_reagents = list(/datum/reagent/nutriment/mayo = 5) - -/obj/item/reagent_containers/food/condiment/small/packet/soy - name = "soy sauce packet" - desc = "Contains 5u of soy sauce." - icon_state = "packet_small_black" - starting_reagents = list(/datum/reagent/nutriment/soysauce = 5) - -/obj/item/reagent_containers/food/condiment/small/packet/coffee - name = "instant coffee powder packet" - desc = "Contains 5u of instant coffee powder. Mix with 25u of water." - starting_reagents = list(/datum/reagent/nutriment/coffee/instant = 5) - -/obj/item/reagent_containers/food/condiment/small/packet/tea - name = "instant tea powder packet" - desc = "Contains 5u of instant black tea powder. Mix with 25u of water." - starting_reagents = list(/datum/reagent/nutriment/tea/instant = 5) - -/obj/item/reagent_containers/food/condiment/small/packet/cocoa - name = "cocoa powder packet" - desc = "Contains 5u of cocoa powder. Mix with 25u of water and heat." - starting_reagents = list(/datum/reagent/nutriment/coco = 5) - -/obj/item/reagent_containers/food/condiment/small/packet/grape - name = "grape juice powder packet" - desc = "Contains 5u of powdered grape juice. Mix with 15u of water." - starting_reagents = list(/datum/reagent/nutriment/instantjuice/grape = 5) - -/obj/item/reagent_containers/food/condiment/small/packet/orange - name = "orange juice powder packet" - desc = "Contains 5u of powdered orange juice. Mix with 15u of water." - starting_reagents = list(/datum/reagent/nutriment/instantjuice/orange = 5) - -/obj/item/reagent_containers/food/condiment/small/packet/watermelon - name = "watermelon juice powder packet" - desc = "Contains 5u of powdered watermelon juice. Mix with 15u of water." - starting_reagents = list(/datum/reagent/nutriment/instantjuice/watermelon = 5) - -/obj/item/reagent_containers/food/condiment/small/packet/apple - name = "apple juice powder packet" - desc = "Contains 5u of powdered apple juice. Mix with 15u of water." - starting_reagents = list(/datum/reagent/nutriment/instantjuice/apple = 5) - -/obj/item/reagent_containers/food/condiment/small/packet/protein - name = "protein powder packet" - desc = "Contains 10u of powdered protein. Mix with 20u of water." - icon_state = "packet_medium" - starting_reagents = list(/datum/reagent/nutriment/protein = 10) - -/obj/item/reagent_containers/food/condiment/small/packet/crayon - name = "crayon powder packet" - desc = "Contains 10u of powdered crayon. Mix with 30u of water." - starting_reagents = list(/datum/reagent/crayon_dust = 10) -/obj/item/reagent_containers/food/condiment/small/packet/crayon/red - starting_reagents = list(/datum/reagent/crayon_dust/red = 10) -/obj/item/reagent_containers/food/condiment/small/packet/crayon/orange - starting_reagents = list(/datum/reagent/crayon_dust/orange = 10) -/obj/item/reagent_containers/food/condiment/small/packet/crayon/yellow - starting_reagents = list(/datum/reagent/crayon_dust/yellow = 10) -/obj/item/reagent_containers/food/condiment/small/packet/crayon/green - starting_reagents = list(/datum/reagent/crayon_dust/green = 10) -/obj/item/reagent_containers/food/condiment/small/packet/crayon/blue - starting_reagents = list(/datum/reagent/crayon_dust/blue = 10) -/obj/item/reagent_containers/food/condiment/small/packet/crayon/purple - starting_reagents = list(/datum/reagent/crayon_dust/purple = 10) -/obj/item/reagent_containers/food/condiment/small/packet/crayon/grey - starting_reagents = list(/datum/reagent/crayon_dust/grey = 10) -/obj/item/reagent_containers/food/condiment/small/packet/crayon/brown - starting_reagents = list(/datum/reagent/crayon_dust/brown = 10) - -//End of MRE stuff. - -/obj/item/reagent_containers/food/condiment/flour - name = "flour sack" - desc = "A big bag of flour. Good for baking!" - icon = 'icons/obj/food.dmi' - icon_state = "flour" - item_state = "flour" - randpixel = 10 - starting_reagents = list(/datum/reagent/nutriment/flour = 50) - -/obj/item/reagent_containers/food/condiment/flour/on_reagent_change() - return - -/obj/item/reagent_containers/food/condiment/salt - name = "big bag of salt" - desc = "A nonsensically large bag of salt. Carefully refined from countless shifts." - icon = 'icons/obj/food.dmi' - icon_state = "salt" - item_state = "flour" - randpixel = 10 - volume = 500 - w_class = ITEM_SIZE_LARGE - starting_reagents = list(/datum/reagent/sodiumchloride = 500) - -/obj/item/reagent_containers/food/condiment/salt/on_reagent_change() - return - -/obj/item/reagent_containers/food/condiment/mint - name = "mint essential oil" - desc = "A small bottle of the essential oil of some kind of mint plant." - icon = 'icons/obj/food.dmi' - icon_state = "coldsauce" - starting_reagents = list(/datum/reagent/nutriment/mint = 15) - -/obj/item/reagent_containers/food/condiment/mint/on_reagent_change() - return - -/obj/item/reagent_containers/food/condiment/soysauce - name = "soy sauce" - desc = "A dark, salty, savoury flavoring." - icon_state = "soysauce" - amount_per_transfer_from_this = 1 - volume = 20 - starting_reagents = list(/datum/reagent/nutriment/soysauce = 20) - -/obj/item/reagent_containers/food/condiment/small/oliveoil - name = "olive oil" - desc = "Used in food preparation and flavoring." - icon_state = "oliveoilsmall" - center_of_mass = "x=16;y=8" - starting_reagents = list(/datum/reagent/oliveoil = 20) diff --git a/code/modules/reagents/reagent_containers/food/drinks.dm b/code/modules/reagents/reagent_containers/food/drinks.dm deleted file mode 100644 index 140f1010137a9..0000000000000 --- a/code/modules/reagents/reagent_containers/food/drinks.dm +++ /dev/null @@ -1,359 +0,0 @@ -//////////////////////////////////////////////////////////////////////////////// -/// Drinks. -//////////////////////////////////////////////////////////////////////////////// -/obj/item/reagent_containers/food/drinks - name = "drink" - desc = "Yummy!" - icon = 'icons/obj/drinks.dmi' - icon_state = null - atom_flags = ATOM_FLAG_OPEN_CONTAINER - amount_per_transfer_from_this = 5 - volume = 50 - var/filling_states // List of percentages full that have icons - var/base_name = null // Name to put in front of drinks, i.e. "[base_name] of [contents]" - var/base_icon = null // Base icon name for fill states - -/obj/item/reagent_containers/food/drinks/on_reagent_change() - update_icon() - return - -/obj/item/reagent_containers/food/drinks/on_color_transfer_reagent_change() - return - -/obj/item/reagent_containers/food/drinks/attack_self(mob/user as mob) - if(!is_open_container()) - open(user) - -/obj/item/reagent_containers/food/drinks/proc/open(mob/user) - playsound(loc,'sound/effects/canopen.ogg', rand(10,50), 1) - to_chat(user, "You open \the [src] with an audible pop!") - atom_flags |= ATOM_FLAG_OPEN_CONTAINER - -/obj/item/reagent_containers/food/drinks/attack(mob/M as mob, mob/user as mob, def_zone) - if(force && !(item_flags & ITEM_FLAG_NO_BLUDGEON) && user.a_intent == I_HURT) - return ..() - - if(standard_feed_mob(user, M)) - return - - return 0 - -/obj/item/reagent_containers/food/drinks/afterattack(obj/target, mob/user, proximity) - if(!proximity) return - - if(standard_dispenser_refill(user, target)) - return - if(standard_pour_into(user, target)) - return - return ..() - -/obj/item/reagent_containers/food/drinks/standard_feed_mob(var/mob/user, var/mob/target) - if(!is_open_container()) - to_chat(user, "You need to open \the [src]!") - return 1 - return ..() - -/obj/item/reagent_containers/food/drinks/standard_dispenser_refill(var/mob/user, var/obj/structure/reagent_dispensers/target) - if(!is_open_container()) - to_chat(user, "You need to open \the [src]!") - return 1 - return ..() - -/obj/item/reagent_containers/food/drinks/standard_pour_into(var/mob/user, var/atom/target) - if(!is_open_container()) - to_chat(user, "You need to open \the [src]!") - return 1 - return ..() - -/obj/item/reagent_containers/food/drinks/self_feed_message(var/mob/user) - to_chat(user, "You swallow a gulp from \the [src].") - if(user.has_personal_goal(/datum/goal/achievement/specific_object/drink)) - for(var/datum/reagent/R in reagents.reagent_list) - user.update_personal_goal(/datum/goal/achievement/specific_object/drink, R.type) - -/obj/item/reagent_containers/food/drinks/feed_sound(var/mob/user) - playsound(user.loc, 'sound/items/drink.ogg', rand(10, 50), 1) - -/obj/item/reagent_containers/food/drinks/examine(mob/user, distance) - . = ..() - if(distance > 1) - return - if(!reagents || reagents.total_volume == 0) - to_chat(user, "\The [src] is empty!") - else if (reagents.total_volume <= volume * 0.25) - to_chat(user, "\The [src] is almost empty!") - else if (reagents.total_volume <= volume * 0.66) - to_chat(user, "\The [src] is half full!") - else if (reagents.total_volume <= volume * 0.90) - to_chat(user, "\The [src] is almost full!") - else - to_chat(user, "\The [src] is full!") - -/obj/item/reagent_containers/food/drinks/proc/get_filling_state() - var/percent = round((reagents.total_volume / volume) * 100) - for(var/k in cached_number_list_decode(filling_states)) - if(percent <= k) - return k - -/obj/item/reagent_containers/food/drinks/on_update_icon() - overlays.Cut() - if(reagents.reagent_list.len > 0) - if(base_name) - var/datum/reagent/R = reagents.get_master_reagent() - SetName("[base_name] of [R.glass_name ? R.glass_name : "something"]") - desc = R.glass_desc ? R.glass_desc : initial(desc) - if(filling_states) - var/image/filling = image(icon, src, "[base_icon][get_filling_state()]") - filling.color = reagents.get_color() - overlays += filling - else - SetName(initial(name)) - desc = initial(desc) - - -//////////////////////////////////////////////////////////////////////////////// -/// Drinks. END -//////////////////////////////////////////////////////////////////////////////// - -/obj/item/reagent_containers/food/drinks/golden_cup - desc = "A golden cup." - name = "golden cup" - icon_state = "golden_cup" - item_state = "" //nope :( - w_class = ITEM_SIZE_HUGE - force = 14 - throwforce = 10 - amount_per_transfer_from_this = 20 - possible_transfer_amounts = null - volume = 150 - atom_flags = ATOM_FLAG_OPEN_CONTAINER - obj_flags = OBJ_FLAG_CONDUCTIBLE - -///////////////////////////////////////////////Drinks -//Notes by Darem: Drinks are simply containers that start preloaded. Unlike condiments, the contents can be ingested directly -// rather then having to add it to something else first. They should only contain liquids. They have a default container size of 50. -// Formatting is the same as food. - -/obj/item/reagent_containers/food/drinks/milk - name = "milk carton" - desc = "It's milk. White and nutritious goodness!" - icon_state = "milk" - item_state = "carton" - center_of_mass = "x=16;y=9" - -/obj/item/reagent_containers/food/drinks/milk/Initialize() - . = ..() - reagents.add_reagent(/datum/reagent/drink/milk, 50) - -/obj/item/reagent_containers/food/drinks/soymilk - name = "soymilk carton" - desc = "It's soy milk. White and nutritious goodness!" - icon_state = "soymilk" - item_state = "carton" - center_of_mass = "x=16;y=9" - -/obj/item/reagent_containers/food/drinks/soymilk/Initialize() - . = ..() - reagents.add_reagent(/datum/reagent/drink/milk/soymilk, 50) - -/obj/item/reagent_containers/food/drinks/small_milk - name = "small milk carton" - desc = "It's milk. White and nutritious goodness!" - icon_state = "mini-milk" - item_state = "carton" - center_of_mass = "x=16;y=9" - volume = 30 - -/obj/item/reagent_containers/food/drinks/small_milk/Initialize() - . = ..() - reagents.add_reagent(/datum/reagent/drink/milk, 30) - -/obj/item/reagent_containers/food/drinks/small_milk_choc - name = "small chocolate milk carton" - desc = "It's milk! This one is in delicious chocolate flavour." - icon_state = "mini-milk" - item_state = "carton" - center_of_mass = "x=16;y=9" - volume = 30 - -/obj/item/reagent_containers/food/drinks/small_milk_choc/Initialize() - . = ..() - reagents.add_reagent(/datum/reagent/drink/milk/chocolate, 30) - - -/obj/item/reagent_containers/food/drinks/coffee - name = "\improper Robust Coffee" - desc = "Careful, the beverage you're about to enjoy is extremely hot." - icon_state = "coffee" - center_of_mass = "x=15;y=10" - -/obj/item/reagent_containers/food/drinks/coffee/Initialize() - . = ..() - reagents.add_reagent(/datum/reagent/drink/coffee, 30) - -/obj/item/reagent_containers/food/drinks/ice - name = "cup of ice" - desc = "Careful, cold ice, do not chew." - icon_state = "coffee" - center_of_mass = "x=15;y=10" - -/obj/item/reagent_containers/food/drinks/ice/Initialize() - . = ..() - reagents.add_reagent(/datum/reagent/drink/ice, 30) - -/obj/item/reagent_containers/food/drinks/h_chocolate - name = "cup of hot cocoa" - desc = "A tall plastic cup of creamy hot chocolate." - icon_state = "coffee" - item_state = "coffee" - center_of_mass = "x=15;y=13" - -/obj/item/reagent_containers/food/drinks/h_chocolate/Initialize() - . = ..() - reagents.add_reagent(/datum/reagent/drink/hot_coco, 30) - -/obj/item/reagent_containers/food/drinks/dry_ramen - name = "cup ramen" - gender = PLURAL - desc = "Just add 10ml water, self heats! A taste that reminds you of your school years." - icon_state = "ramen" - center_of_mass = "x=16;y=11" - -/obj/item/reagent_containers/food/drinks/dry_ramen/Initialize() - . = ..() - reagents.add_reagent(/datum/reagent/drink/dry_ramen, 30) - - -/obj/item/reagent_containers/food/drinks/sillycup - name = "paper cup" - desc = "A paper water cup." - icon_state = "water_cup_e" - possible_transfer_amounts = null - volume = 10 - center_of_mass = "x=16;y=12" - -/obj/item/reagent_containers/food/drinks/sillycup/on_reagent_change() - if(reagents.total_volume) - icon_state = "water_cup" - else - icon_state = "water_cup_e" - - -//////////////////////////pitchers, pots, flasks and cups // -//Note by Darem: This code handles the mixing of drinks. New drinks go in three places: In Chemistry-Reagents.dm (for the drink -// itself), in Chemistry-Recipes.dm (for the reaction that changes the components into the drink), and here (for the drinking glass -// icon states. - -/obj/item/reagent_containers/food/drinks/teapot - name = "teapot" - desc = "An elegant teapot. It simply oozes class." - icon_state = "teapot" - item_state = "teapot" - amount_per_transfer_from_this = 10 - volume = 120 - center_of_mass = "x=17;y=7" - -/obj/item/reagent_containers/food/drinks/pitcher - name = "insulated pitcher" - desc = "A stainless steel insulated pitcher. Everyone's best friend in the morning." - icon_state = "pitcher" - volume = 120 - amount_per_transfer_from_this = 10 - center_of_mass = "x=16;y=9" - filling_states = "15;30;50;70;85;100" - base_icon = "pitcher" - -/obj/item/reagent_containers/food/drinks/flask - name = "\improper Captain's flask" - desc = "A metal flask belonging to the captain." - icon_state = "flask" - volume = 60 - center_of_mass = "x=17;y=7" - -/obj/item/reagent_containers/food/drinks/flask/shiny - name = "shiny flask" - desc = "A shiny metal flask. It appears to have a Greek symbol inscribed on it." - icon_state = "shinyflask" - -/obj/item/reagent_containers/food/drinks/flask/lithium - name = "lithium flask" - desc = "A flask with a Lithium Atom symbol on it." - icon_state = "lithiumflask" - -/obj/item/reagent_containers/food/drinks/flask/detflask - name = "\improper Detective's flask" - desc = "A metal flask with a leather band and golden badge belonging to the detective." - icon_state = "detflask" - volume = 60 - center_of_mass = "x=17;y=8" - -/obj/item/reagent_containers/food/drinks/flask/barflask - name = "flask" - desc = "For those who can't be bothered to hang out at the bar to drink." - icon_state = "barflask" - volume = 60 - center_of_mass = "x=17;y=7" - -/obj/item/reagent_containers/food/drinks/flask/vacuumflask - name = "vacuum flask" - desc = "Keeping your drinks at the perfect temperature since 1892." - icon_state = "vacuumflask" - volume = 60 - center_of_mass = "x=15;y=4" - -//tea and tea accessories -/obj/item/reagent_containers/food/drinks/tea - name = "cup of tea master item" - desc = "A tall plastic cup full of the concept and ideal of tea." - icon_state = "coffee" - item_state = "coffee" - center_of_mass = "x=16;y=14" - filling_states = "100" - base_name = "cup" - base_icon = "cup" - -/obj/item/reagent_containers/food/drinks/tea/black - name = "cup of black tea" - desc = "A tall plastic cup of hot black tea." - -/obj/item/reagent_containers/food/drinks/tea/black/Initialize() - . = ..() - reagents.add_reagent(/datum/reagent/drink/tea, 30) - -/obj/item/reagent_containers/food/drinks/tea/green - name = "cup of green tea" - desc = "A tall plastic cup of hot green tea." - -/obj/item/reagent_containers/food/drinks/tea/green/Initialize() - . = ..() - reagents.add_reagent(/datum/reagent/drink/tea/green, 30) - -/obj/item/reagent_containers/food/drinks/tea/chai - name = "cup of chai tea" - desc = "A tall plastic cup of hot chai tea." - -/obj/item/reagent_containers/food/drinks/tea/chai/Initialize() - . = ..() - reagents.add_reagent(/datum/reagent/drink/tea/chai, 30) - -/obj/item/reagent_containers/food/drinks/decafcoffee - name = "cup of decaf coffee" - desc = "A tall plastic cup of hot decaffeinated coffee." - icon_state = "coffee" - item_state = "coffee" - center_of_mass = "x=16;y=14" - filling_states = "100" - base_name = "cup" - base_icon = "cup" - -/obj/item/reagent_containers/food/drinks/decafcoffee/Initialize() - . = ..() - reagents.add_reagent(/datum/reagent/drink/decafcoffee, 30) - -/obj/item/reagent_containers/food/drinks/tea/decaf - name = "cup of decaf tea" - desc = "A tall plastic cup of hot decaffeinated tea." - -/obj/item/reagent_containers/food/drinks/tea/decaf/Initialize() - . = ..() - reagents.add_reagent(/datum/reagent/drink/tea/decaf, 30) \ No newline at end of file diff --git a/code/modules/reagents/reagent_containers/food/drinks/bottle.dm b/code/modules/reagents/reagent_containers/food/drinks/bottle.dm deleted file mode 100644 index f47db0dcd9d08..0000000000000 --- a/code/modules/reagents/reagent_containers/food/drinks/bottle.dm +++ /dev/null @@ -1,822 +0,0 @@ -/obj/item/reagent_containers/food/drinks/bottle - amount_per_transfer_from_this = 10 - volume = 100 - item_state = "broken_beer" - force = 5 - var/can_shatter = TRUE - var/obj/item/reagent_containers/glass/rag/rag - var/rag_underlay = "rag" - - /// Weaken duration for bonking heads - var/smash_duration = 5 - - -/obj/item/reagent_containers/food/drinks/bottle/Initialize() - . = ..() - if (can_shatter) - unacidable = TRUE - - -/obj/item/reagent_containers/food/drinks/bottle/Destroy() - if (rag) - rag.forceMove(loc) - rag = null - return ..() - - -/obj/item/reagent_containers/food/drinks/bottle/throw_impact(atom/hit_atom, var/datum/thrownthing/TT) - ..() - if (can_shatter && TT.thrower) - if (TT.speed > throw_speed || smash_check(TT.dist_travelled)) - if (reagents) - var/list/others = list() - for (var/mob/living/L in range(1, get_turf(hit_atom))) - others += L - others -= hit_atom - for (var/other in others) - reagents.splash(other, reagents.total_volume * 0.2, copy = TRUE) - reagents.splash(hit_atom, reagents.total_volume) - hit_atom.visible_message( - SPAN_WARNING("The contents of \the [src] splash all over \the [hit_atom]![length(others)?" Some gets on [english_list(others)] as well!":""]") - ) - smash(loc, hit_atom) - - -/obj/item/reagent_containers/food/drinks/bottle/proc/smash_check(distance) - if (!can_shatter || !smash_duration) - return - var/static/list/chance_table = list(95, 95, 90, 85, 75, 60, 40, 15) - var/idx = max(distance + 1, 1) - if (idx > chance_table.len) - return - return prob(chance_table[idx]) - - -/obj/item/reagent_containers/food/drinks/bottle/proc/smash(newloc, atom/against) - var/obj/item/broken_bottle/B = new (newloc) - if (prob(33)) - new /obj/item/material/shard (newloc) - B.icon_state = icon_state - var/icon/I = new ('icons/obj/drinks.dmi', icon_state) - I.Blend(B.broken_outline, ICON_OVERLAY, rand(5), 1) - I.SwapColor(rgb(255, 0, 220, 255), rgb(0, 0, 0, 0)) - B.icon = I - if (rag && rag.on_fire && isliving(against)) - var/mob/living/L = against - L.IgniteMob() - playsound(src, "shatter", 70, 1) - transfer_fingerprints_to(B) - qdel(src) - return B - - -/obj/item/reagent_containers/food/drinks/bottle/attackby(obj/item/W, mob/user) - if (!rag && istype(W, /obj/item/reagent_containers/glass/rag)) - insert_rag(W, user) - return - if (rag && isflamesource(W)) - rag.attackby(W, user) - return - ..() - - -/obj/item/reagent_containers/food/drinks/bottle/attack_self(mob/user) - if (rag) - remove_rag(user) - else - ..() - - -/obj/item/reagent_containers/food/drinks/bottle/proc/insert_rag(obj/item/reagent_containers/glass/rag/R, mob/user) - if (!can_shatter || rag) - return - if (user.unEquip(R)) - to_chat(user, SPAN_NOTICE("You stuff \the [R] into \the [src].")) - rag = R - rag.forceMove(src) - atom_flags &= ~ATOM_FLAG_OPEN_CONTAINER - update_icon() - - -/obj/item/reagent_containers/food/drinks/bottle/proc/remove_rag(mob/user) - if (!rag) - return - to_chat(user, SPAN_NOTICE("You pull \the [rag] out of \the [src].")) - user.put_in_hands(rag) - rag = null - atom_flags |= ATOM_FLAG_OPEN_CONTAINER - update_icon() - - -/obj/item/reagent_containers/food/drinks/bottle/open(mob/user) - if (rag) - return - ..() - - -/obj/item/reagent_containers/food/drinks/bottle/on_update_icon() - underlays.Cut() - if (rag) - var/underlay_image = image(icon='icons/obj/drinks.dmi', icon_state=rag.on_fire? "[rag_underlay]_lit" : rag_underlay) - underlays += underlay_image - set_light(rag.light_max_bright, 0.1, rag.light_outer_range, 2, rag.light_color) - else - set_light(0) - - -/obj/item/reagent_containers/food/drinks/bottle/apply_hit_effect(mob/living/target, mob/living/user, hit_zone) - . = ..() - if (user.a_intent != I_HURT) - return - if (!smash_check(1)) - return - var/mob/living/carbon/human/H = target - if (istype(H) && H.headcheck(hit_zone)) - var/obj/item/organ/affecting = H.get_organ(hit_zone) - user.visible_message(SPAN_DANGER("\The [user] smashes \the [src] into \the [H]'s [affecting.name]!")) - var/blocked = target.get_blocked_ratio(hit_zone, DAMAGE_BRUTE, damage = 10) * 100 - var/weaken_duration = smash_duration + min(0, force - blocked + 10) - if (weaken_duration) - target.apply_effect(min(weaken_duration, 5), EFFECT_WEAKEN, blocked) - else - user.visible_message(SPAN_DANGER("\The [user] smashes [src] into [target]!")) - if (reagents) - user.visible_message(SPAN_NOTICE("The contents of \the [src] splash all over \the [target]!")) - reagents.splash(target, reagents.total_volume) - var/obj/item/broken_bottle/B = smash(get_turf(target), target) - user.put_in_active_hand(B) - - -/obj/item/reagent_containers/food/drinks/bottle/gin - name = "Griffeater Gin" - desc = "A bottle of high quality gin, produced in the New London Space Station." - icon_state = "ginbottle" - center_of_mass = "x=16;y=4" - - -/obj/item/reagent_containers/food/drinks/bottle/gin/Initialize() - . = ..() - reagents.add_reagent(/datum/reagent/ethanol/gin, 100) - - -/obj/item/reagent_containers/food/drinks/bottle/whiskey - name = "Uncle Git's Special Reserve Whiskey" - desc = "A premium single-malt whiskey, gently matured inside the tunnels of a nuclear shelter. TUNNEL WHISKEY RULES." - icon_state = "whiskeybottle" - center_of_mass = "x=16;y=3" - - -/obj/item/reagent_containers/food/drinks/bottle/whiskey/Initialize() - . = ..() - reagents.add_reagent(/datum/reagent/ethanol/whiskey, 100) - - -/obj/item/reagent_containers/food/drinks/bottle/specialwhiskey - name = "Special Blend Whiskey" - desc = "Just when you thought regular whiskey was good... This silky, amber goodness has to come along and ruin everything." - icon_state = "whiskeybottle2" - center_of_mass = "x=16;y=3" - - -/obj/item/reagent_containers/food/drinks/bottle/specialwhiskey/Initialize() - . = ..() - reagents.add_reagent(/datum/reagent/ethanol/specialwhiskey, 100) - - -/obj/item/reagent_containers/food/drinks/bottle/vodka - name = "Tunguska Triple Distilled Vodka" - desc = "Aah, vodka. Prime choice of drink AND fuel by Indies around the galaxy." - icon_state = "vodkabottle" - center_of_mass = "x=17;y=3" - -/obj/item/reagent_containers/food/drinks/bottle/vodka/Initialize() - . = ..() - reagents.add_reagent(/datum/reagent/ethanol/vodka, 100) - - -/obj/item/reagent_containers/food/drinks/bottle/tequilla - name = "Caccavo Guaranteed Quality Tequilla" - desc = "Made from premium petroleum distillates, pure thalidomide and other fine quality ingredients!" - icon_state = "tequillabottle" - center_of_mass = "x=16;y=3" - - -/obj/item/reagent_containers/food/drinks/bottle/tequilla/Initialize() - . = ..() - reagents.add_reagent(/datum/reagent/ethanol/tequilla, 100) - - -/obj/item/reagent_containers/food/drinks/bottle/bottleofnothing - name = "Bottle of Nothing" - desc = "A bottle filled with nothing." - icon_state = "bottleofnothing" - center_of_mass = "x=17;y=5" - - -/obj/item/reagent_containers/food/drinks/bottle/bottleofnothing/Initialize() - . = ..() - reagents.add_reagent(/datum/reagent/drink/nothing, 100) - - -/obj/item/reagent_containers/food/drinks/bottle/patron - name = "Wrapp Artiste Patron" - desc = "Silver laced tequilla, served in space night clubs across the galaxy." - icon_state = "patronbottle" - center_of_mass = "x=16;y=6" - - -/obj/item/reagent_containers/food/drinks/bottle/patron/Initialize() - . = ..() - reagents.add_reagent(/datum/reagent/ethanol/patron, 100) - - -/obj/item/reagent_containers/food/drinks/bottle/rum - name = "Captain Pete's Cuban Spiced Rum" - desc = "This isn't just rum, oh no. It's practically GRIFF in a bottle." - icon_state = "rumbottle" - center_of_mass = "x=16;y=8" - - -/obj/item/reagent_containers/food/drinks/bottle/rum/Initialize() - . = ..() - reagents.add_reagent(/datum/reagent/ethanol/rum, 100) - - -/obj/item/reagent_containers/food/drinks/bottle/holywater - name = "Flask of Holy Water" - desc = "A flask of the chaplain's holy water." - icon_state = "holyflask" - center_of_mass = "x=17;y=10" - - -/obj/item/reagent_containers/food/drinks/bottle/holywater/Initialize() - . = ..() - reagents.add_reagent(/datum/reagent/water/holywater, 100) - - -/obj/item/reagent_containers/food/drinks/bottle/vermouth - name = "Goldeneye Vermouth" - desc = "Sweet, sweet dryness~" - icon_state = "vermouthbottle" - center_of_mass = "x=17;y=3" - - -/obj/item/reagent_containers/food/drinks/bottle/vermouth/Initialize() - . = ..() - reagents.add_reagent(/datum/reagent/ethanol/vermouth, 100) - - -/obj/item/reagent_containers/food/drinks/bottle/kahlua - name = "Robert Robust's Coffee Liqueur" - desc = "A widely known, Mexican coffee-flavoured liqueur. In production since 1936, HONK!" - icon_state = "kahluabottle" - center_of_mass = "x=17;y=3" - - -/obj/item/reagent_containers/food/drinks/bottle/kahlua/Initialize() - . = ..() - reagents.add_reagent(/datum/reagent/ethanol/coffee/kahlua, 100) - - -/obj/item/reagent_containers/food/drinks/bottle/goldschlager - name = "College Girl Goldschlager" - desc = "Because they are the only ones who will drink 100 proof cinnamon schnapps." - icon_state = "goldschlagerbottle" - center_of_mass = "x=15;y=3" - - -/obj/item/reagent_containers/food/drinks/bottle/goldschlager/Initialize() - . = ..() - reagents.add_reagent(/datum/reagent/ethanol/goldschlager, 100) - - -/obj/item/reagent_containers/food/drinks/bottle/cognac - name = "Chateau De Baton Premium Cognac" - desc = "A sweet and strongly alchoholic drink, made after numerous distillations and years of maturing. You might as well not scream 'SHITCURITY' this time." - icon_state = "cognacbottle" - center_of_mass = "x=16;y=6" - - -/obj/item/reagent_containers/food/drinks/bottle/cognac/Initialize() - . = ..() - reagents.add_reagent(/datum/reagent/ethanol/cognac, 100) - - -/obj/item/reagent_containers/food/drinks/bottle/wine - name = "Doublebeard Bearded Special Wine" - desc = "A faint aura of unease and asspainery surrounds the bottle." - icon_state = "winebottle" - center_of_mass = "x=16;y=4" - - -/obj/item/reagent_containers/food/drinks/bottle/wine/Initialize() - . = ..() - reagents.add_reagent(/datum/reagent/ethanol/wine, 100) - - -/obj/item/reagent_containers/food/drinks/bottle/absinthe - name = "Jailbreaker Verte Absinthe" - desc = "One sip of this and you just know you're gonna have a good time." - icon_state = "absinthebottle" - center_of_mass = "x=16;y=6" - - -/obj/item/reagent_containers/food/drinks/bottle/absinthe/Initialize() - . = ..() - reagents.add_reagent(/datum/reagent/ethanol/absinthe, 100) - - -/obj/item/reagent_containers/food/drinks/bottle/melonliquor - name = "Emeraldine Melon Liquor" - desc = "A bottle of 46 proof Emeraldine Melon Liquor. Sweet and light." - icon_state = "alco-green" - center_of_mass = "x=16;y=6" - - -/obj/item/reagent_containers/food/drinks/bottle/melonliquor/Initialize() - . = ..() - reagents.add_reagent(/datum/reagent/ethanol/melonliquor, 100) - - -/obj/item/reagent_containers/food/drinks/bottle/bluecuracao - name = "Miss Blue Curacao" - desc = "A fruity, exceptionally azure drink. Does not allow the imbiber to use the fifth magic." - icon_state = "alco-blue" - center_of_mass = "x=16;y=6" - - -/obj/item/reagent_containers/food/drinks/bottle/bluecuracao/Initialize() - . = ..() - reagents.add_reagent(/datum/reagent/ethanol/bluecuracao, 100) - - -/obj/item/reagent_containers/food/drinks/bottle/herbal - name = "Liqueur d'Herbe" - desc = "A bottle of the seventh-finest herbal liquor sold under a generic name in the galaxy. The back label has a load of guff about the monks who traditionally made this particular variety." - icon_state = "herbal" - center_of_mass = "x=16;y=6" - - -/obj/item/reagent_containers/food/drinks/bottle/herbal/Initialize() - . = ..() - reagents.add_reagent(/datum/reagent/ethanol/herbal, 100) - - -/obj/item/reagent_containers/food/drinks/bottle/grenadine - name = "Briar Rose Grenadine Syrup" - desc = "Sweet and tangy, a bar syrup used to add color or flavor to drinks." - icon_state = "grenadinebottle" - center_of_mass = "x=16;y=6" - - -/obj/item/reagent_containers/food/drinks/bottle/grenadine/Initialize() - . = ..() - reagents.add_reagent(/datum/reagent/drink/grenadine, 100) - - -/obj/item/reagent_containers/food/drinks/bottle/cola - name = "\improper Space Cola" - desc = "Cola. in space." - icon_state = "colabottle" - center_of_mass = "x=16;y=6" - - -/obj/item/reagent_containers/food/drinks/bottle/cola/Initialize() - . = ..() - reagents.add_reagent(/datum/reagent/drink/space_cola, 100) - - -/obj/item/reagent_containers/food/drinks/bottle/space_up - name = "\improper Space-Up" - desc = "Tastes like a hull breach in your mouth." - icon_state = "space-up_bottle" - center_of_mass = "x=16;y=6" - - -/obj/item/reagent_containers/food/drinks/bottle/space_up/Initialize() - . = ..() - reagents.add_reagent(/datum/reagent/drink/space_up, 100) - - -/obj/item/reagent_containers/food/drinks/bottle/space_mountain_wind - name = "\improper Space Mountain Wind" - desc = "Blows right through you like a space wind." - icon_state = "space_mountain_wind_bottle" - center_of_mass = "x=16;y=6" - - -/obj/item/reagent_containers/food/drinks/bottle/space_mountain_wind/Initialize() - . = ..() - reagents.add_reagent(/datum/reagent/drink/spacemountainwind, 100) - - -/obj/item/reagent_containers/food/drinks/bottle/pwine - name = "Warlock's Velvet" - desc = "What a delightful packaging for a surely high quality wine! The vintage must be amazing!" - icon_state = "pwinebottle" - center_of_mass = "x=16;y=4" - - -/obj/item/reagent_containers/food/drinks/bottle/pwine/Initialize() - . = ..() - reagents.add_reagent(/datum/reagent/ethanol/pwine, 100) - - -/obj/item/reagent_containers/food/drinks/bottle/blackstrap - name = "Two Brothers Blackstrap" - desc = "A bottle of Blackstrap, distilled in Two Brothers, Earth." - icon_state = "blackstrap" - center_of_mass = "x=16;y=4" - - -/obj/item/reagent_containers/food/drinks/bottle/blackstrap/Initialize() - . = ..() - reagents.add_reagent(/datum/reagent/ethanol/blackstrap, 100) - - -/obj/item/reagent_containers/food/drinks/bottle/sake - name = "Takeo Sadow's Combined Sake" - desc = "Finest Sake allowed for import in the SCG." - icon_state = "sake" - center_of_mass = "x=16;y=4" - - -/obj/item/reagent_containers/food/drinks/bottle/sake/Initialize() - . = ..() - reagents.add_reagent(/datum/reagent/ethanol/sake, 100) - - -/obj/item/reagent_containers/food/drinks/bottle/tadmorwine - name = "Palmyran Vintage 2230" - desc = "The kind of wine that just demands attention, and a big wallet." - icon_state = "tadmorwine" - center_of_mass = "x=16;y=4" - - -/obj/item/reagent_containers/food/drinks/bottle/tadmorwine/Initialize() - . = ..() - reagents.add_reagent(/datum/reagent/ethanol/tadmorwine, 100) - - -/obj/item/reagent_containers/food/drinks/bottle/champagne - name = "Murcelano Vinyard's Premium Champagne" - desc = "The regal drink of celebrities and royalty." - icon_state = "champagne" - center_of_mass = "x=16;y=4" - - -/obj/item/reagent_containers/food/drinks/bottle/champagne/Initialize() - . = ..() - reagents.add_reagent(/datum/reagent/ethanol/champagne, 100) - - -/obj/item/reagent_containers/food/drinks/bottle/prosecco - name = "2280 Vintage Prosecco." - desc = "A delicious prosecco, ideal for long days at work. This one proudly advertises itself as 2280 Vintage. Must have been a special year." - icon_state = "prosecco" - center_of_mass = "x=16;y=4" - - -/obj/item/reagent_containers/food/drinks/bottle/prosecco/Initialize() - . = ..() - reagents.add_reagent(/datum/reagent/ethanol/prosecco, 100) - - -/obj/item/reagent_containers/food/drinks/bottle/llanbrydewhiskey - name = "Pritchard's Wisgi Ucheldirol" - desc = "The bottle is covered in strange archaic markings... Oh wait, that's just Welsh." - icon_state = "whiskeybottle3" - center_of_mass = "x=16;y=4" - - -/obj/item/reagent_containers/food/drinks/bottle/llanbrydewhiskey/Initialize() - . = ..() - reagents.add_reagent(/datum/reagent/ethanol/llanbrydewhiskey, 100) - - -/obj/item/reagent_containers/food/drinks/bottle/jagermeister - name = "Kaisermeister Deluxe Jagermeister" - desc = "Jagermeister. This drink just demands a party." - icon_state = "herbal" - center_of_mass = "x=16;y=6" - - -/obj/item/reagent_containers/food/drinks/bottle/jagermeister/Initialize() - . = ..() - reagents.add_reagent(/datum/reagent/ethanol/jagermeister, 100) - - -/obj/item/reagent_containers/food/drinks/bottle/cachaca - name = "Acacara Cachaca" - desc = "Cachaca, distilled from fermented sugarcane. This one was bottled in New Aarhus, Brahe." - icon_state = "cachaca" - center_of_mass = "x=16;y=6" - - -/obj/item/reagent_containers/food/drinks/bottle/cachaca/Initialize() - . = ..() - reagents.add_reagent(/datum/reagent/ethanol/cachaca, 100) - - -/obj/item/reagent_containers/food/drinks/bottle/baijiu - name = "Huangjin Bay Baijiu" - desc = "A large bottle of Baijiu with a beautiful looking sunset on the cover." - icon_state = "baijiu" - center_of_mass = "x=16;y=6" - - -/obj/item/reagent_containers/food/drinks/bottle/baijiu/Initialize() - . = ..() - reagents.add_reagent(/datum/reagent/ethanol/baijiu, 100) - - -/obj/item/reagent_containers/food/drinks/bottle/soju - name = "Sol Hyonjun's Soju" - desc = "A clear, see-through bottle of Soju." - icon_state = "soju" - center_of_mass = "x=16;y=6" - - -/obj/item/reagent_containers/food/drinks/bottle/soju/Initialize() - . = ..() - reagents.add_reagent(/datum/reagent/ethanol/soju, 100) - - -/obj/item/reagent_containers/food/drinks/bottle/rakia - name = "Sadmir Cumani's Rakia" - desc = "A polite looking man on the label promises you this is 100 percent Albanian." - icon_state = "rakia" - center_of_mass = "x=16;y=6" - - -/obj/item/reagent_containers/food/drinks/bottle/rakia/Initialize() - . = ..() - reagents.add_reagent(/datum/reagent/ethanol/rakia, 100) - - -/obj/item/reagent_containers/food/drinks/bottle/premiumvodka - name = "Four Stripes Quadruple Distilled" - desc = "Premium distilled vodka imported directly from the Gilgamesh Colonial Confederation." - icon_state = "premiumvodka" - center_of_mass = "x=17;y=3" - - -/obj/item/reagent_containers/food/drinks/bottle/premiumvodka/Initialize() - . = ..() - reagents.add_reagent(/datum/reagent/ethanol/vodka/premium, 100) - var/namepick = pick("Four Stripes","Gilgamesh","Novaya Zemlya","Indie","STS-35") - var/typepick = pick("Absolut","Gold","Quadruple Distilled","Platinum","Standard") - name = "[namepick] [typepick]" - - -/obj/item/reagent_containers/food/drinks/bottle/premiumwine - name = "Uve De Blanc" - desc = "You feel pretentious just looking at it." - icon_state = "premiumwine" - center_of_mass = "x=16;y=4" - - -/obj/item/reagent_containers/food/drinks/bottle/premiumwine/Initialize() - . = ..() - reagents.add_reagent(/datum/reagent/ethanol/wine/premium, 100) - var/namepick = pick("Calumont","Sciacchemont","Recioto","Torcalota") - var/agedyear = rand(GLOB.using_map.game_year - 150, GLOB.using_map.game_year) - name = "Chateau [namepick] De Blanc" - desc += " This bottle is marked as [agedyear] Vintage." - - -/obj/item/reagent_containers/food/drinks/bottle/brandy - name = "New Amsterdam Deluxe Brandy" - desc = "A bottle of premium Lunar brandy." - icon_state = "lunabrandy" - center_of_mass = "x=16;y=4" - - -/obj/item/reagent_containers/food/drinks/bottle/brandy/Initialize() - . = ..() - reagents.add_reagent(/datum/reagent/ethanol/lunabrandy, 100) - var/namepick = pick("Selenian","New Vegas","Yueliang","Gideon","New Amsterdam","Saurian") - var/typepick = pick("Deluxe Brandy","Premium Brandy","Luxury Brandy","Expensive Brandy","Special Brandy") - SetName("[namepick] [typepick]") - - -//////////////////////////JUICES AND STUFF /////////////////////// - -/obj/item/reagent_containers/food/drinks/bottle/orangejuice - name = "Orange Juice" - desc = "Full of vitamins and deliciousness!" - icon_state = "orangejuice" - item_state = "carton" - center_of_mass = "x=16;y=7" - can_shatter = FALSE - - -/obj/item/reagent_containers/food/drinks/bottle/orangejuice/Initialize() - . = ..() - reagents.add_reagent(/datum/reagent/drink/juice/orange, 100) - - -/obj/item/reagent_containers/food/drinks/bottle/cream - name = "Milk Cream" - desc = "It's cream. Made from milk. What else did you think you'd find in there?" - icon_state = "cream" - item_state = "carton" - center_of_mass = "x=16;y=8" - can_shatter = FALSE - - -/obj/item/reagent_containers/food/drinks/bottle/cream/Initialize() - . = ..() - reagents.add_reagent(/datum/reagent/drink/milk/cream, 100) - - -/obj/item/reagent_containers/food/drinks/bottle/tomatojuice - name = "Tomato Juice" - desc = "Well, at least it LOOKS like tomato juice. You can't tell with all that redness." - icon_state = "tomatojuice" - item_state = "carton" - center_of_mass = "x=16;y=8" - can_shatter = FALSE - - -/obj/item/reagent_containers/food/drinks/bottle/tomatojuice/Initialize() - . = ..() - reagents.add_reagent(/datum/reagent/drink/juice/tomato, 100) - - -/obj/item/reagent_containers/food/drinks/bottle/limejuice - name = "Lime Juice" - desc = "Sweet-sour goodness." - icon_state = "limejuice" - item_state = "carton" - center_of_mass = "x=16;y=8" - can_shatter = FALSE - - -/obj/item/reagent_containers/food/drinks/bottle/limejuice/Initialize() - . = ..() - reagents.add_reagent(/datum/reagent/drink/juice/lime, 100) - - -/obj/item/reagent_containers/food/drinks/bottle/unathijuice - name = "Hrukhza Leaf Extract" - desc = "Hrukhza Leaf, a vital component of any Moghes drinks." - icon_state = "hrukhzaextract" - item_state = "carton" - center_of_mass = "x=16;y=8" - can_shatter = FALSE - - -/obj/item/reagent_containers/food/drinks/bottle/unathijuice/Initialize() - . = ..() - reagents.add_reagent(/datum/reagent/drink/alien/unathijuice, 100) - - -/obj/item/reagent_containers/food/drinks/bottle/lemonjuice - name = "Lemon Juice" - desc = "Sweet-sour goodness." - icon_state = "lemonjuice" - item_state = "carton" - center_of_mass = "x=16;y=8" - can_shatter = FALSE - - -/obj/item/reagent_containers/food/drinks/bottle/lemonjuice/Initialize() - . = ..() - reagents.add_reagent(/datum/reagent/drink/juice/lemon, 100) - - -/obj/item/reagent_containers/food/drinks/bottle/maplesyrup - name = "maple syrup bottle" - desc = "Sweet, syrupy goodness." - icon_state = "maplesyrup" - center_of_mass = "x=16;y=8" - - -/obj/item/reagent_containers/food/drinks/bottle/maplesyrup/Initialize() - . = ..() - reagents.add_reagent(/datum/reagent/drink/maplesyrup, 100) - - -/obj/item/reagent_containers/food/drinks/bottle/small - volume = 50 - smash_duration = 1 - atom_flags = 0 - rag_underlay = "rag_small" - - -/obj/item/reagent_containers/food/drinks/bottle/small/beer - name = "space beer" - desc = "Contains only water, malt and hops." - icon_state = "beer" - center_of_mass = "x=16;y=12" - - -/obj/item/reagent_containers/food/drinks/bottle/small/beer/Initialize() - . = ..() - reagents.add_reagent(/datum/reagent/ethanol/beer, 30) - - -/obj/item/reagent_containers/food/drinks/bottle/small/ale - name = "\improper Magm-Ale" - desc = "A true dorf's drink of choice." - icon_state = "alebottle" - item_state = "beer" - center_of_mass = "x=16;y=10" - - -/obj/item/reagent_containers/food/drinks/bottle/small/ale/Initialize() - . = ..() - reagents.add_reagent(/datum/reagent/ethanol/ale, 30) - - -/obj/item/reagent_containers/food/drinks/bottle/small/hellshenpa - name = "Hellshen Pale Ale" - desc = "The best ale on Mars, according to the label." - icon_state = "hellshenbeer" - center_of_mass = "x=16;y=12" - - -/obj/item/reagent_containers/food/drinks/bottle/small/hellshenpa/Initialize() - . = ..() - reagents.add_reagent(/datum/reagent/ethanol/hellshenpa, 30) - - -/obj/item/reagent_containers/food/drinks/bottle/small/gingerbeer - name = "Ginger Beer" - desc = "A delicious non-alcoholic beverage enjoyed across Sol space." - icon_state = "gingerbeer" - center_of_mass = "x=16;y=12" - - -/obj/item/reagent_containers/food/drinks/bottle/small/gingerbeer/Initialize() - . = ..() - reagents.add_reagent(/datum/reagent/drink/gingerbeer, 50) - - -/obj/item/reagent_containers/food/drinks/bottle/small/dandelionburdock - name = "Dandelion and Burdock" - desc = "A bottle of dandelion and burdock. Not actually made from either of the two." - icon_state = "dnb" - center_of_mass = "x=16;y=12" - - -/obj/item/reagent_containers/food/drinks/bottle/small/dandelionburdock/Initialize() - . = ..() - reagents.add_reagent(/datum/reagent/drink/dandelionburdock, 50) - - -/obj/item/reagent_containers/food/drinks/bottle/small/alcoholfreebeer - name = "Alcohol-Free Beer" - desc = "A bottle of alcohol-free beer. Finally, you can drink on duty." - icon_state = "alcoholfreebeer" - center_of_mass = "x=16;y=12" - - -/obj/item/reagent_containers/food/drinks/bottle/small/alcoholfreebeer/Initialize() - . = ..() - reagents.add_reagent(/datum/reagent/drink/alcoholfreebeer, 50) - - -/obj/item/reagent_containers/food/drinks/bottle/small/lager - name = "Hans' Original Lager" - desc = "A bottle of premium lager. Has Hans' seal of approval, apparently." - icon_state = "lager" - center_of_mass = "x=16;y=12" - - -/obj/item/reagent_containers/food/drinks/bottle/small/lager/Initialize() - . = ..() - reagents.add_reagent(/datum/reagent/ethanol/lager, 50) - - -/obj/item/reagent_containers/food/drinks/bottle/oiljug - name = "oil jug" - desc = "A plastic jug of engine oil. Not for human consumption." - icon_state = "oil" - can_shatter = FALSE - - -/obj/item/reagent_containers/food/drinks/bottle/oiljug/Initialize() - . = ..() - reagents.add_reagent(/datum/reagent/oil, 100) - - -/obj/item/broken_bottle - name = "Broken Bottle" - desc = "A bottle with a sharp broken bottom." - icon = 'icons/obj/drinks.dmi' - icon_state = "broken_bottle" - force = 9 - throwforce = 5 - throw_speed = 3 - throw_range = 5 - item_state = "beer" - attack_verb = list("stabbed", "slashed", "attacked") - sharp = TRUE - var/icon/broken_outline = icon('icons/obj/drinks.dmi', "broken") - - -/obj/item/broken_bottle/attack(mob/living/carbon/M, mob/living/carbon/user) - playsound(loc, 'sound/weapons/bladeslice.ogg', 50, 1, -1) - return ..() diff --git a/code/modules/reagents/reagent_containers/food/drinks/jar.dm b/code/modules/reagents/reagent_containers/food/drinks/jar.dm deleted file mode 100644 index eb2f8328baae9..0000000000000 --- a/code/modules/reagents/reagent_containers/food/drinks/jar.dm +++ /dev/null @@ -1,22 +0,0 @@ - - -///jar - -/obj/item/reagent_containers/food/drinks/jar - name = "empty jar" - desc = "A jar. You're not sure what it's supposed to hold." - icon_state = "jar" - item_state = "beaker" - center_of_mass = "x=15;y=8" - unacidable = TRUE - -/obj/item/reagent_containers/food/drinks/jar/on_reagent_change() - if (reagents.reagent_list.len > 0) - icon_state ="jar_what" - SetName("jar of something") - desc = "You can't really tell what this is." - else - icon_state = initial(icon_state) - SetName(initial(name)) - desc = "A jar. You're not sure what it's supposed to hold." - return diff --git a/code/modules/reagents/reagent_containers/food/fish.dm b/code/modules/reagents/reagent_containers/food/fish.dm deleted file mode 100644 index fac16ab7e8428..0000000000000 --- a/code/modules/reagents/reagent_containers/food/fish.dm +++ /dev/null @@ -1,206 +0,0 @@ -/obj/item/reagent_containers/food/snacks/fish - abstract_type = /obj/item/reagent_containers/food/snacks/fish - name = "base fish fillet" - desc = "A fillet of fish." - icon_state = "fishfillet" - color = "#ff4040" - filling_color = "#ff4040" - center_of_mass = "x=17;y=13" - bitesize = 6 - var/fish_type = "fish" - - -/obj/item/reagent_containers/food/snacks/fish/Initialize() - . = ..() - if (. == INITIALIZE_HINT_QDEL) - return - reagents.add_reagent(/datum/reagent/nutriment/protein, 6) - name = "[fish_type] fillet" - - -/obj/item/reagent_containers/food/snacks/fish/attackby(obj/item/item, mob/living/user) - if (!item.sharp) - return ..() - var/turf/turf = get_turf(src) - if (turf != loc || !(locate(/obj/structure/table) in turf)) - to_chat(user, SPAN_WARNING("You need a table to cut \the [src].")) - return TRUE - var/list/toxins = reagents.get_reagent_amount_list(/datum/reagent/toxin) - for (var/toxin_type in toxins) - if (user.skill_fail_prob(SKILL_COOKING, 90, SKILL_PROF)) - continue - reagents.remove_reagent(toxin_type, toxins[toxin_type]) - var/transfer = Floor(reagents.total_volume * 0.3) - for(var/i = 1 to 3) - var/obj/item/reagent_containers/food/snacks/sashimi/sashimi = new (turf, fish_type) - reagents.trans_to(sashimi, transfer) - user.visible_message(SPAN_ITALIC("\The [user] slices \the [src] into thin strips.")) - qdel(src) - return TRUE - - -/// fish/generated permits arbitrary fish type and contents setting through new (loc, "type", list(/type = amount), 1/0) -/obj/item/reagent_containers/food/snacks/fish/generated/Initialize(_mapload, _fish_type, list/_reagents, _replace_reagents) - . = ..() - if (_fish_type) - fish_type = _fish_type - name = "[fish_type] fillet" - if (_replace_reagents) - reagents.clear_reagents() - for (var/reagent in _reagents) - reagents.add_reagent(reagent, _reagents[reagent]) - - -/obj/item/reagent_containers/food/snacks/fish/space_carp - fish_type = "space carp" - color = "#e657aa" - filling_color = "#e657aa" - - -/obj/item/reagent_containers/food/snacks/fish/space_carp/Initialize() - . = ..() - reagents.add_reagent(/datum/reagent/toxin/carpotoxin, 6) - - -/obj/item/reagent_containers/food/snacks/fish/space_pike - fish_type = "space pike" - color = "#f73fd6" - filling_color = "#f73fd6" - - -/obj/item/reagent_containers/food/snacks/fish/space_pike/Initialize() - . = ..() - reagents.add_reagent(/datum/reagent/toxin/carpotoxin, 6) - - -/obj/item/reagent_containers/food/snacks/fish/space_shark - fish_type = "cosmoshark" - color = "#8925d4" - filling_color = "#8925d4" - - -/obj/item/reagent_containers/food/snacks/fish/space_shark/Initialize() - . = ..() - reagents.add_reagent(/datum/reagent/nutriment/protein, 5) - reagents.add_reagent(/datum/reagent/space_drugs, 1) - reagents.add_reagent(/datum/reagent/toxin/phoron, 1) - - -/obj/item/reagent_containers/food/snacks/fish/cod - fish_type = "cod" - color = "#ecc69e" - filling_color = "#ecc69e" - - -/obj/item/reagent_containers/food/snacks/fish/hake - fish_type = "hake" - color = "#ecc69e" - filling_color = "#ecc69e" - - -/obj/item/reagent_containers/food/snacks/fish/bream - fish_type = "bream" - color = "#ecc69e" - filling_color = "#ecc69e" - - -/obj/item/reagent_containers/food/snacks/fish/salmon - fish_type = "salmon" - color = "#e69457" - filling_color = "#e69457" - - -/obj/item/reagent_containers/food/snacks/fish/tuna - fish_type = "tuna" - - -/obj/item/reagent_containers/food/snacks/fish/mackerel - fish_type = "mackerel" - color = "#ecc69e" - filling_color = "#ecc69e" - - -/obj/item/reagent_containers/food/snacks/fish/trout - fish_type = "trout" - color = "#e69457" - filling_color = "#e69457" - - -/obj/item/reagent_containers/food/snacks/fish/tilapia - fish_type = "tilapia" - color = "#ecc69e" - filling_color = "#ecc69e" - - -/obj/item/reagent_containers/food/snacks/fish/bass - fish_type = "bass" - color = "#ecc69e" - filling_color = "#ecc69e" - - -/obj/item/reagent_containers/food/snacks/fish/shark - fish_type = "shark" - - -/obj/item/reagent_containers/food/snacks/fish/squid - fish_type = "squid" - color = "#dbd6d0" - filling_color = "#dbd6d0" - - -/obj/item/reagent_containers/food/snacks/fish/octopus - fish_type = "octopus" - color = "#dbd6d0" - filling_color = "#dbd6d0" - - -/obj/item/reagent_containers/food/snacks/fish/eel - fish_type = "eel" - color = "#ecc69e" - filling_color = "#ecc69e" - - -/obj/item/reagent_containers/food/snacks/fish/carp - fish_type = "carp" - color = "#e66457" - filling_color = "#e66457" - - -/obj/item/reagent_containers/food/snacks/fish/catfish - fish_type = "catfish" - color = "#dbd6d0" - filling_color = "#dbd6d0" - - -/obj/item/reagent_containers/food/snacks/fish/unknown - fish_type = "suspicious" - color = "#ecc69e" - filling_color = "#ecc69e" - - -/obj/random/fish - name = "random fish fillet" - desc = "This is a random fish fillet." - icon = 'icons/obj/food.dmi' - icon_state = "fishfillet" - color = "#ff4040" - - -/obj/random/fish/spawn_choices() - return list( - /obj/item/reagent_containers/food/snacks/fish/cod = 4, - /obj/item/reagent_containers/food/snacks/fish/hake = 4, - /obj/item/reagent_containers/food/snacks/fish/bream = 4, - /obj/item/reagent_containers/food/snacks/fish/tilapia = 4, - /obj/item/reagent_containers/food/snacks/fish/bass = 4, - /obj/item/reagent_containers/food/snacks/fish/salmon = 3, - /obj/item/reagent_containers/food/snacks/fish/tuna = 3, - /obj/item/reagent_containers/food/snacks/fish/mackerel = 3, - /obj/item/reagent_containers/food/snacks/fish/trout = 3, - /obj/item/reagent_containers/food/snacks/fish/shark = 3, - /obj/item/reagent_containers/food/snacks/fish/squid = 3, - /obj/item/reagent_containers/food/snacks/fish/octopus = 2, - /obj/item/reagent_containers/food/snacks/fish/eel = 2, - /obj/item/reagent_containers/food/snacks/fish/carp = 2, - /obj/item/reagent_containers/food/snacks/fish/catfish = 1 - ) diff --git a/code/modules/reagents/reagent_containers/food/lunch.dm b/code/modules/reagents/reagent_containers/food/lunch.dm deleted file mode 100644 index 706f582002423..0000000000000 --- a/code/modules/reagents/reagent_containers/food/lunch.dm +++ /dev/null @@ -1,147 +0,0 @@ -var/global/list/lunchables_lunches_ = list( - /obj/item/reagent_containers/food/snacks/sandwich, - /obj/item/reagent_containers/food/snacks/slice/meatbread/filled, - /obj/item/reagent_containers/food/snacks/slice/tofubread/filled, - /obj/item/reagent_containers/food/snacks/slice/creamcheesebread/filled, - /obj/item/reagent_containers/food/snacks/slice/margherita/filled, - /obj/item/reagent_containers/food/snacks/slice/meatpizza/filled, - /obj/item/reagent_containers/food/snacks/slice/mushroompizza/filled, - /obj/item/reagent_containers/food/snacks/slice/vegetablepizza/filled, - /obj/item/reagent_containers/food/snacks/tastybread, - /obj/item/reagent_containers/food/snacks/liquidfood, - /obj/item/reagent_containers/food/snacks/jellysandwich/cherry, - /obj/item/reagent_containers/food/snacks/tossedsalad, - /obj/item/reagent_containers/food/snacks/vegetablesoup, - /obj/item/reagent_containers/food/snacks/plainsteak - ) - -var/global/list/lunchables_snacks_ = list( - /obj/item/reagent_containers/food/snacks/donut/jelly, - /obj/item/reagent_containers/food/snacks/donut/cherryjelly, - /obj/item/reagent_containers/food/snacks/muffin, - /obj/item/reagent_containers/food/snacks/popcorn, - /obj/item/reagent_containers/food/snacks/sosjerky, - /obj/item/reagent_containers/food/snacks/no_raisin, - /obj/item/reagent_containers/food/snacks/spacetwinkie, - /obj/item/reagent_containers/food/snacks/cheesiehonkers, - /obj/item/reagent_containers/food/snacks/poppypretzel, - /obj/item/reagent_containers/food/snacks/carrotfries, - /obj/item/reagent_containers/food/snacks/candiedapple, - /obj/item/reagent_containers/food/snacks/applepie, - /obj/item/reagent_containers/food/snacks/cherrypie, - /obj/item/reagent_containers/food/snacks/plumphelmetbiscuit, - /obj/item/reagent_containers/food/snacks/appletart, - /obj/item/reagent_containers/food/snacks/slice/carrotcake/filled, - /obj/item/reagent_containers/food/snacks/slice/cheesecake/filled, - /obj/item/reagent_containers/food/snacks/slice/plaincake/filled, - /obj/item/reagent_containers/food/snacks/slice/orangecake/filled, - /obj/item/reagent_containers/food/snacks/slice/limecake/filled, - /obj/item/reagent_containers/food/snacks/slice/lemoncake/filled, - /obj/item/reagent_containers/food/snacks/slice/chocolatecake/filled, - /obj/item/reagent_containers/food/snacks/slice/birthdaycake/filled, - /obj/item/reagent_containers/food/snacks/watermelonslice, - /obj/item/reagent_containers/food/snacks/slice/applecake/filled, - /obj/item/reagent_containers/food/snacks/slice/pumpkinpie/filled, - /obj/item/reagent_containers/food/snacks/skrellsnacks, - /obj/item/reagent_containers/food/snacks/venus, - /obj/item/reagent_containers/food/snacks/lunacake, - /obj/item/reagent_containers/food/snacks/mars - ) - -var/global/list/lunchables_drinks_ = list( - /obj/item/reagent_containers/food/drinks/cans/cola, - /obj/item/reagent_containers/food/drinks/cans/cola_apple, - /obj/item/reagent_containers/food/drinks/cans/cola_orange, - /obj/item/reagent_containers/food/drinks/cans/cola_grape, - /obj/item/reagent_containers/food/drinks/cans/cola_lemonlime, - /obj/item/reagent_containers/food/drinks/cans/cola_strawberry, - /obj/item/reagent_containers/food/drinks/cans/cola_diet, - /obj/item/reagent_containers/food/drinks/cans/vanillacola, - /obj/item/reagent_containers/food/drinks/cans/cherrycola, - /obj/item/reagent_containers/food/drinks/cans/orangecola, - /obj/item/reagent_containers/food/drinks/cans/coffeecola, - /obj/item/reagent_containers/food/drinks/cans/waterbottle, - /obj/item/reagent_containers/food/drinks/cans/space_mountain_wind, - /obj/item/reagent_containers/food/drinks/cans/dr_gibb, - /obj/item/reagent_containers/food/drinks/cans/ionbru, - /obj/item/reagent_containers/food/drinks/cans/space_up, - /obj/item/reagent_containers/food/drinks/cans/lemon_lime, - /obj/item/reagent_containers/food/drinks/cans/iced_tea, - /obj/item/reagent_containers/food/drinks/cans/grape_juice, - /obj/item/reagent_containers/food/drinks/cans/tonic, - /obj/item/reagent_containers/food/drinks/cans/sodawater, - /obj/item/reagent_containers/food/drinks/cans/rootbeer - ) - -// This default list is a bit different, it contains items we don't want -var/global/list/lunchables_drink_reagents_ = list( - /datum/reagent/drink, - /datum/reagent/drink/nothing, - /datum/reagent/drink/doctor_delight, - /datum/reagent/drink/dry_ramen, - /datum/reagent/drink/hell_ramen, - /datum/reagent/drink/hot_ramen, - /datum/reagent/drink/nuka_cola - ) - -// This default list is a bit different, it contains items we don't want -var/global/list/lunchables_ethanol_reagents_ = list( - /datum/reagent/ethanol, - /datum/reagent/ethanol/bilk, - /datum/reagent/ethanol/acid_spit, - /datum/reagent/ethanol/atomicbomb, - /datum/reagent/ethanol/beepsky_smash, - /datum/reagent/ethanol/coffee, - /datum/reagent/ethanol/hippies_delight, - /datum/reagent/ethanol/hooch, - /datum/reagent/ethanol/thirteenloko, - /datum/reagent/ethanol/manhattan_proj, - /datum/reagent/ethanol/neurotoxin, - /datum/reagent/ethanol/pwine, - /datum/reagent/ethanol/threemileisland, - /datum/reagent/ethanol/toxins_special, - /datum/reagent/ethanol/alien/qokkloa, - /datum/reagent/ethanol/alien/qokkhrona, - /datum/reagent/ethanol/iridast - ) - -/proc/lunchables_lunches() - if(!(lunchables_lunches_[lunchables_lunches_[1]])) - lunchables_lunches_ = init_lunchable_list(lunchables_lunches_) - return lunchables_lunches_ - -/proc/lunchables_snacks() - if(!(lunchables_snacks_[lunchables_snacks_[1]])) - lunchables_snacks_ = init_lunchable_list(lunchables_snacks_) - return lunchables_snacks_ - -/proc/lunchables_drinks() - if(!(lunchables_drinks_[lunchables_drinks_[1]])) - lunchables_drinks_ = init_lunchable_list(lunchables_drinks_) - return lunchables_drinks_ - -/proc/lunchables_drink_reagents() - if(!(lunchables_drink_reagents_[lunchables_drink_reagents_[1]])) - lunchables_drink_reagents_ = init_lunchable_reagent_list(lunchables_drink_reagents_, /datum/reagent/drink) - return lunchables_drink_reagents_ - -/proc/lunchables_ethanol_reagents() - if(!(lunchables_ethanol_reagents_[lunchables_ethanol_reagents_[1]])) - lunchables_ethanol_reagents_ = init_lunchable_reagent_list(lunchables_ethanol_reagents_, /datum/reagent/ethanol) - return lunchables_ethanol_reagents_ - -/proc/init_lunchable_list(var/list/lunches) - . = list() - for(var/lunch in lunches) - var/obj/O = lunch - .[initial(O.name)] = lunch - return sortAssoc(.) - -/proc/init_lunchable_reagent_list(var/list/banned_reagents, var/reagent_types) - . = list() - for(var/reagent_type in subtypesof(reagent_types)) - if(reagent_type in banned_reagents) - continue - var/datum/reagent/reagent = reagent_type - .[initial(reagent.name)] = reagent_type - return sortAssoc(.) diff --git a/code/modules/reagents/reagent_containers/food/sandwich.dm b/code/modules/reagents/reagent_containers/food/sandwich.dm deleted file mode 100644 index e2f65cbe3062b..0000000000000 --- a/code/modules/reagents/reagent_containers/food/sandwich.dm +++ /dev/null @@ -1,116 +0,0 @@ -/obj/item/reagent_containers/food/snacks/slice/bread/attackby(obj/item/W as obj, mob/user as mob) - - if(istype(W,/obj/item/material/shard) || istype(W,/obj/item/reagent_containers/food/snacks)) - var/obj/item/reagent_containers/food/snacks/csandwich/S = new(get_turf(src)) - S.attackby(W,user) - qdel(src) - return - . = ..() - -/obj/item/reagent_containers/food/snacks/csandwich - name = "sandwich" - desc = "The best thing since sliced bread." - icon_state = "breadslice" - trash = /obj/item/trash/plate - bitesize = 2 - var/list/ingredients = list() - var/fullname = "" - var/renamed = 0 - -/obj/item/reagent_containers/food/snacks/csandwich/verb/rename_sandwich() - set name = "Rename Sandwich" - set category = "Object" - var/mob/user = usr - var/sandwich_label = "" - - if(!renamed) - sandwich_label = sanitizeSafe(input(user, "Enter a new name for \the [src].", "Name", label_text), MAX_NAME_LEN) - if(sandwich_label) - to_chat(user, SPAN_NOTICE("You rename \the [src] to \"[sandwich_label] sandwich\".")) - SetName("\improper [sandwich_label] sandwich") - renamed = 1 - -/obj/item/reagent_containers/food/snacks/csandwich/attackby(obj/item/W, mob/user) - - var/sandwich_limit = 4 - for(var/obj/item/O in ingredients) - if(istype(O,/obj/item/reagent_containers/food/snacks/slice/bread)) - sandwich_limit += 4 - - if(src.contents.len > sandwich_limit) - to_chat(user, SPAN_WARNING("If you put anything else on \the [src] it's going to collapse.")) - return - else if(istype(W,/obj/item/material/shard)) - if(!user.unEquip(W, src)) - return - to_chat(user, SPAN_WARNING("You hide [W] in \the [src].")) - update() - return - else if(istype(W,/obj/item/reagent_containers/food/snacks)) - if(!user.unEquip(W, src)) - return - user.visible_message( - SPAN_NOTICE("\The [user] layers \the [W] over \the [src]."), - SPAN_NOTICE("You layer \the [W] over \the [src].") - ) - var/obj/item/reagent_containers/F = W - F.reagents.trans_to_obj(src, F.reagents.total_volume) - ingredients += W - update() - return - . = ..() - -/obj/item/reagent_containers/food/snacks/csandwich/proc/update() - var/i = 0 - overlays.Cut() - - filling_color = null - var/list/ingredient_names = list() - for (var/obj/item/reagent_containers/food/snacks/O as anything in ingredients) - if (isnull(filling_color)) - filling_color = O.filling_color - ingredient_names |= O.name // Use |= instead of += in case of duplicates, to avoid i.e. 'Chocolate, chocolate, and vanilla' - - i++ - var/image/I = new(icon, "sandwich_filling") - I.color = O.filling_color - I.pixel_x = pick(list(-1,0,1)) - I.pixel_y = (i*2)+1 - overlays += I - - var/image/T = new(src.icon, "sandwich_top") - T.pixel_x = pick(list(-1,0,1)) - T.pixel_y = (ingredients.len * 2)+1 - overlays += T - - fullname = english_list(ingredient_names) - SetName(lowertext("[fullname] sandwich")) - renamed = 0 //updating removes custom name - if(length(name) > 80) SetName("[pick(list("absurd","colossal","enormous","ridiculous"))] sandwich") - w_class = Ceil(clamp((ingredients.len/2),2,4)) - -/obj/item/reagent_containers/food/snacks/csandwich/Destroy() - QDEL_NULL_LIST(ingredients) - . = ..() - -/obj/item/reagent_containers/food/snacks/csandwich/examine(mob/user) - . = ..(user) - var/obj/item/O = pick(contents) - to_chat(user, SPAN_ITALIC("You think you can see [O.name] in there.")) - -/obj/item/reagent_containers/food/snacks/csandwich/attack(mob/M as mob, mob/user as mob, def_zone) - - var/obj/item/shard - for(var/obj/item/O in contents) - if(istype(O,/obj/item/material/shard)) - shard = O - break - - var/mob/living/H - if(istype(M,/mob/living)) - H = M - - if(H && shard && M == user) //This needs a check for feeding the food to other people, but that could be abusable. - to_chat(H, SPAN_WARNING("You lacerate your mouth on a [shard.name] in the sandwich!")) - H.adjustBruteLoss(5) //TODO: Target head if human. - ..() diff --git a/code/modules/reagents/reagent_containers/food/servingbowl.dm b/code/modules/reagents/reagent_containers/food/servingbowl.dm deleted file mode 100644 index d9af28f3c1c5c..0000000000000 --- a/code/modules/reagents/reagent_containers/food/servingbowl.dm +++ /dev/null @@ -1,90 +0,0 @@ -/obj/item/serving_bowl - name = "serving bowl" - desc = "A portion-sized bowl for serving hungry customers." - icon = 'icons/obj/food_custom.dmi' - icon_state = "serving_bowl" - center_of_mass = "x=16;y=10" - w_class = ITEM_SIZE_SMALL - matter = list(MATERIAL_PLASTIC = 300) - - -/obj/item/serving_bowl/attackby(obj/item/W, mob/user) - if(istype(W,/obj/item/reagent_containers/food/snacks)) - var/obj/item/reagent_containers/food/snacks/custombowl/S = new(get_turf(src)) - user.put_in_hands(S) - S.attackby(W,user) - qdel(src) - return - . = ..() - -/obj/item/reagent_containers/food/snacks/custombowl - name = "serving bowl" - desc = "A delicious bowl of food." - icon = 'icons/obj/food_custom.dmi' - icon_state = "serving_bowl" - filling_color = null - trash = /obj/item/serving_bowl //reusable - bitesize = 2 - var/list/ingredients = list() - var/fullname = "" - var/renamed = 0 - -/obj/item/reagent_containers/food/snacks/custombowl/verb/rename_bowl() - set name = "Rename Bowl" - set category = "Object" - var/mob/user = usr - var/bowl_label = "" - - if(!renamed) - bowl_label = sanitizeSafe(input(user, "Enter a new name for \the [src].", "Name", label_text), MAX_NAME_LEN) - if(bowl_label) - to_chat(user, SPAN_NOTICE("You rename \the [src] to \"[bowl_label] bowl\".")) - SetName("\improper [bowl_label] bowl") - renamed = 1 - -/obj/item/reagent_containers/food/snacks/custombowl/attackby(obj/item/W, mob/user) - if(istype(W,/obj/item/reagent_containers/food/snacks)) - if(contents.len >= 4) - to_chat(user, SPAN_WARNING("There's no room for any more ingredients in \the [src].")) - return - else - if(!user.unEquip(W, src)) - return - user.visible_message( - SPAN_NOTICE("\The [user] adds \the [W] to \the [src]."), - SPAN_NOTICE("You add \the [W] to \the [src].") - ) - var/obj/item/reagent_containers/F = W - F.reagents.trans_to_obj(src, F.reagents.total_volume) - ingredients += W - update() - return - . = ..() - -/obj/item/reagent_containers/food/snacks/custombowl/proc/update() - var/i = 0 - overlays.Cut() - - filling_color = null - var/list/ingredient_names = list() - for (var/obj/item/reagent_containers/food/snacks/O as anything in ingredients) - if (isnull(filling_color)) - filling_color = O.filling_color - ingredient_names |= O.name // Use |= instead of += in case of duplicates, to avoid i.e. 'Chocolate, chocolate, and vanilla' - - i++ - var/image/I = new(icon, "serving_bowl_[i]") - I.color = O.filling_color - overlays += I - - fullname = english_list(ingredient_names) - SetName(lowertext("[english_list(ingredient_names)] bowl")) - renamed = 0 //updating removes custom name - -/obj/item/reagent_containers/food/snacks/custombowl/Destroy() - QDEL_NULL_LIST(ingredients) - . = ..() - -/obj/item/reagent_containers/food/snacks/custombowl/examine(mob/user) - . = ..(user) - to_chat(user, SPAN_ITALIC("This one contains [fullname].")) \ No newline at end of file diff --git a/code/modules/reagents/reagent_containers/food/shaker.dm b/code/modules/reagents/reagent_containers/food/shaker.dm deleted file mode 100644 index f5515381bb3a0..0000000000000 --- a/code/modules/reagents/reagent_containers/food/shaker.dm +++ /dev/null @@ -1,35 +0,0 @@ -/obj/item/reagent_containers/food/drinks/shaker - name = "shaker" - desc = "A three piece Cobbler-style shaker. Used to mix, cool, and strain drinks." - icon_state = "shaker" - amount_per_transfer_from_this = 10 - possible_transfer_amounts = "5;10;15;25;30;60" //Professional bartender should be able to transfer as much as needed - volume = 120 - center_of_mass = "x=17;y=10" - atom_flags = ATOM_FLAG_OPEN_CONTAINER | ATOM_FLAG_NO_REACT - -/obj/item/reagent_containers/food/drinks/shaker/attack_self(mob/user as mob) - if(user.skill_check(SKILL_COOKING, SKILL_PROF)) - user.visible_message("\The [user] shakes \the [src] briskly in one hand, with supreme confidence and competence.", "You shake \the [src] briskly with one hand.") - mix() - return - if(user.skill_check(SKILL_COOKING, SKILL_ADEPT)) - user.visible_message(SPAN_NOTICE("\The [user] shakes \the [src] briskly, with some skill."), SPAN_NOTICE("You shake \the [src] briskly, with some skill.")) - mix() - return - else - user.visible_message(SPAN_NOTICE("\The [user] shakes \the [src] gingerly."), SPAN_NOTICE("You shake \the [src] gingerly.")) - if(prob(15) && (reagents && reagents.total_volume)) - user.visible_message(SPAN_WARNING("\The [user] spills the contents of \the [src] over themselves!"), SPAN_WARNING("You spill the contents of \the [src] over yourself!")) - reagents.splash(user, reagents.total_volume) - else - mix() - -/obj/item/reagent_containers/food/drinks/shaker/proc/mix() - if(reagents && reagents.total_volume) - atom_flags &= ~ATOM_FLAG_NO_REACT - HANDLE_REACTIONS(reagents) - addtimer(CALLBACK(src, .proc/stop_react), SSchemistry.wait) - -/obj/item/reagent_containers/food/drinks/shaker/proc/stop_react() - atom_flags |= ATOM_FLAG_NO_REACT \ No newline at end of file diff --git a/code/modules/reagents/reagent_containers/food/snacks.dm b/code/modules/reagents/reagent_containers/food/snacks.dm deleted file mode 100644 index b8cc114085435..0000000000000 --- a/code/modules/reagents/reagent_containers/food/snacks.dm +++ /dev/null @@ -1,3872 +0,0 @@ -/obj/item/reagent_containers/food/snacks - name = "snack" - desc = "Yummy!" - icon = 'icons/obj/food.dmi' - center_of_mass = "x=16;y=16" - var/bitesize = 1 - var/bitecount = 0 - var/slice_path - var/slices_num - var/dried_type = null - var/dry = 0 - var/nutriment_amt = 0 - var/list/nutriment_desc = list("food" = 1) - var/list/eat_sound = 'sound/items/eatfood.ogg' - var/obj/item/trash - - -/obj/item/reagent_containers/food/snacks/Destroy() - if (trash && !ispath(trash)) - QDEL_NULL(trash) - return ..() - - -/obj/item/reagent_containers/food/snacks/Initialize() - . = ..() - if (nutriment_amt) - reagents.add_reagent(/datum/reagent/nutriment, nutriment_amt, nutriment_desc) - - -/obj/item/reagent_containers/food/snacks/proc/OnConsume(mob/living/consumer) - if (reagents && reagents.total_volume) - return - if (consumer) - consumer.visible_message( - SPAN_ITALIC("\The [consumer] finishes eating \the [src]."), - SPAN_ITALIC("You finish eating \the [src].") - ) - consumer.update_personal_goal(/datum/goal/achievement/specific_object/food, type) - consumer.drop_from_inventory(src, consumer.loc) - if (loc && trash) - if (ispath(trash)) - trash = new trash - if (consumer) - consumer.put_in_hands(trash) - else - trash.dropInto(loc) - trash = null - qdel(src) - - -/obj/item/reagent_containers/food/snacks/attack_self(mob/user as mob) - return - - -/obj/item/reagent_containers/food/snacks/attack(mob/M as mob, mob/user as mob, def_zone) - if(!reagents || !reagents.total_volume) - to_chat(user, "None of [src] left!") - qdel(src) - return 0 - if(!is_open_container()) - to_chat(user, "\The [src] isn't open!") - return 0 - if(istype(M, /mob/living/carbon)) - //TODO: replace with standard_feed_mob() call. - var/mob/living/carbon/C = M - var/fullness = C.get_fullness() - if(C == user) //If you're eating it yourself - if(istype(C,/mob/living/carbon/human)) - var/mob/living/carbon/human/H = M - if(!H.check_has_mouth()) - to_chat(user, "Where do you intend to put \the [src]? You don't have a mouth!") - return - var/obj/item/blocked = H.check_mouth_coverage() - if(blocked) - to_chat(user, "\The [blocked] is in the way!") - return - - user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN)//puts a limit on how fast people can eat/drink things - if (fullness <= 50) - to_chat(C, "You hungrily chew out a piece of [src] and gobble it!") - if (fullness > 50 && fullness <= 150) - to_chat(C, "You hungrily begin to eat [src].") - if (fullness > 150 && fullness <= 350) - to_chat(C, "You take a bite of [src].") - if (fullness > 350 && fullness <= 550) - to_chat(C, "You unwillingly chew a bit of [src].") - if (fullness > 550) - to_chat(C, "You cannot force any more of [src] to go down your throat.") - return 0 - else - if(!M.can_force_feed(user, src)) - return - - if (fullness <= 550) - user.visible_message("[user] attempts to feed [M] [src].") - else - user.visible_message("[user] cannot force anymore of [src] down [M]'s throat.") - return 0 - - user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN) - if(!do_after(user, 3 SECONDS, M, DO_DEFAULT | DO_USER_UNIQUE_ACT | DO_PUBLIC_PROGRESS)) return - - if (user.get_active_hand() != src) - return - - var/contained = reagentlist() - admin_attack_log(user, M, "Fed the victim with [name] (Reagents: [contained])", "Was fed [src] (Reagents: [contained])", "used [src] (Reagents: [contained]) to feed") - user.visible_message("[user] feeds [M] [src].") - - if(reagents) //Handle ingestion of the reagent. - if(eat_sound) - playsound(M, pick(eat_sound), rand(10, 50), 1) - if(reagents.total_volume) - if(reagents.total_volume > bitesize) - reagents.trans_to_mob(M, bitesize, CHEM_INGEST) - else - reagents.trans_to_mob(M, reagents.total_volume, CHEM_INGEST) - bitecount++ - OnConsume(M) - return 1 - - return 0 - -/obj/item/reagent_containers/food/snacks/examine(mob/user, distance) - . = ..() - if(distance > 1) - return - if (bitecount==0) - return - else if (bitecount==1) - to_chat(user, "\The [src] was bitten by someone!") - else if (bitecount<=3) - to_chat(user, "\The [src] was bitten [bitecount] time\s!") - else - to_chat(user, "\The [src] was bitten multiple times!") - -/obj/item/reagent_containers/food/snacks/attackby(obj/item/W as obj, mob/user as mob) - if(istype(W,/obj/item/storage)) - ..()// -> item/attackby() - return - if(!is_open_container()) - to_chat(user, "\The [src] isn't open!") - return 0 - // Eating with forks - if(istype(W,/obj/item/material/kitchen/utensil)) - var/obj/item/material/kitchen/utensil/U = W - if(U.scoop_food) - if(!U.reagents) - U.create_reagents(5) - - if (U.reagents.total_volume > 0) - to_chat(user, "You already have something on your [U].") - return - - to_chat(user, SPAN_NOTICE("You scoop up some [src] with \the [U]!")) - - src.bitecount++ - U.overlays.Cut() - U.loaded = "[src]" - var/image/I = new(U.icon, "loadedfood") - I.color = src.filling_color - U.overlays += I - - if(!reagents) - crash_with("A snack [type] failed to have a reagent holder when attacked with a [W.type]. It was [QDELETED(src) ? "" : "not"] being deleted.") - else - reagents.trans_to_obj(U, min(reagents.total_volume,5)) - if (reagents.total_volume <= 0) - if (loc && trash) - if (ispath(trash)) - trash = new trash - trash.dropInto(loc) - trash = null - qdel(src) - return - - if (is_sliceable()) - //these are used to allow hiding edge items in food that is not on a table/tray - var/can_slice_here = isturf(src.loc) && ((locate(/obj/structure/table) in src.loc) || (locate(/obj/machinery/optable) in src.loc) || (locate(/obj/item/tray) in src.loc)) - var/hide_item = !has_edge(W) || !can_slice_here - - if (hide_item) - if (W.w_class >= src.w_class || is_robot_module(W) || istype(W,/obj/item/reagent_containers/food/condiment)) - return - if(!user.unEquip(W, src)) - return - - to_chat(user, "You slip \the [W] inside \the [src].") - add_fingerprint(user) - W.forceMove(src) - return - - if (has_edge(W)) - if (!can_slice_here) - to_chat(user, "You cannot slice \the [src] here! You need a table or at least a tray to do it.") - return - - var/slices_lost = 0 - if (W.w_class > 3) - user.visible_message("\The [user] crudely slices \the [src] with [W]!", "You crudely slice \the [src] with your [W]!") - slices_lost = rand(1,min(1,round(slices_num/2))) - else - user.visible_message("\The [user] slices \the [src]!", "You slice \the [src]!") - - var/reagents_per_slice = reagents.total_volume/slices_num - for(var/i=1 to (slices_num-slices_lost)) - var/obj/slice = new slice_path (src.loc) - reagents.trans_to_obj(slice, reagents_per_slice) - qdel(src) - return - -/obj/item/reagent_containers/food/snacks/proc/is_sliceable() - return (slices_num && slice_path && slices_num > 0) - -/obj/item/reagent_containers/food/snacks/Destroy() - if(contents) - for(var/atom/movable/something in contents) - something.dropInto(loc) - . = ..() - -//////////////////////////////////////////////////////////////////////////////// -/// FOOD END -//////////////////////////////////////////////////////////////////////////////// -/obj/item/reagent_containers/food/snacks/attack_animal(var/mob/living/user) - if(!isanimal(user) && !isalien(user)) - return - user.visible_message("[user] nibbles away at \the [src].","You nibble away at \the [src].") - bitecount++ - if(reagents && user.reagents) - reagents.trans_to_mob(user, bitesize, CHEM_INGEST) - spawn(5) - if(!src && !user.client) - user.custom_emote(1,"[pick("burps", "cries for more", "burps twice", "looks at the area where the food was")]") - qdel(src) - OnConsume(user) - -////////////////////////////////////////////////// -////////////////////////////////////////////Snacks -////////////////////////////////////////////////// -//Items in the "Snacks" subcategory are food items that people actually eat. The key points are that they are created -// already filled with reagents and are destroyed when empty. Additionally, they make a "munching" noise when eaten. - -//Notes by Darem: Food in the "snacks" subtype can hold a maximum of 50 units Generally speaking, you don't want to go over 40 -// total for the item because you want to leave space for extra condiments. If you want effect besides healing, add a reagent for -// it. Try to stick to existing reagents when possible (so if you want a stronger healing effect, just use Tricordrazine). On use -// effect (such as the old officer eating a donut code) requires a unique reagent (unless you can figure out a better way). - -//The nutriment reagent and bitesize variable replace the old heal_amt and amount variables. Each unit of nutriment is equal to -// 2 of the old heal_amt variable. bitesize is the rate at which the reagents are consumed. So if you have 6 nutriment and a -// bitesize of 2, then it'll take 3 bites to eat. Unlike the old system, the contained reagents are evenly spread among all -// the bites. No more contained reagents = no more bites. - -//Here is an example of the new formatting for anyone who wants to add more food items. -///obj/item/reagent_containers/food/snacks/xenoburger //Identification path for the object. -// name = "Xenoburger" //Name that displays in the UI. -// desc = "Smells caustic. Tastes like heresy." //Duh -// icon_state = "xburger" //Refers to an icon in food.dmi -// New() //Don't mess with this. -// ..() //Same here. -// reagents.add_reagent(/datum/reagent/xenomicrobes, 10) //This is what is in the food item. you may copy/paste -// reagents.add_reagent(/datum/reagent/nutriment, 2) // this line of code for all the contents. -// bitesize = 3 //This is the amount each bite consumes. - - - - -/obj/item/reagent_containers/food/snacks/aesirsalad - name = "aesir salad" - desc = "Probably too incredible for mortal men to fully enjoy." - icon_state = "aesirsalad" - trash = /obj/item/trash/snack_bowl - filling_color = "#468c00" - center_of_mass = "x=17;y=11" - nutriment_amt = 8 - nutriment_desc = list("apples" = 3,"salad" = 5) - bitesize = 3 -/obj/item/reagent_containers/food/snacks/aesirsalad/Initialize() - .=..() - reagents.add_reagent(/datum/reagent/drink/doctor_delight, 8) - reagents.add_reagent(/datum/reagent/tricordrazine, 8) - - -/obj/item/reagent_containers/food/snacks/egg - name = "egg" - desc = "An egg!" - icon_state = "egg" - filling_color = "#fdffd1" - volume = 10 - center_of_mass = "x=16;y=13" - -/obj/item/reagent_containers/food/snacks/egg/Initialize() - .=..() - reagents.add_reagent(/datum/reagent/nutriment/protein/egg, 3) - -/obj/item/reagent_containers/food/snacks/egg/afterattack(obj/O as obj, mob/user as mob, proximity) - if(istype(O,/obj/machinery/microwave)) - return ..() - if(!(proximity && O.is_open_container())) - return - to_chat(user, "You crack \the [src] into \the [O].") - reagents.trans_to(O, reagents.total_volume) - qdel(src) - -/obj/item/reagent_containers/food/snacks/egg/throw_impact(atom/hit_atom) - if(QDELETED(src)) - return // Could potentially happen with unscupulous atoms on hitby() throwing again, etc. - new/obj/effect/decal/cleanable/egg_smudge(src.loc) - reagents.splash(hit_atom, reagents.total_volume) - visible_message("\The [src] has been squashed!","You hear a smack.") - ..() - qdel(src) - -/obj/item/reagent_containers/food/snacks/egg/attackby(obj/item/W as obj, mob/user as mob) - if(istype( W, /obj/item/pen/crayon )) - var/obj/item/pen/crayon/C = W - var/clr = C.colourName - - if(!(clr in list("blue","green","mime","orange","purple","rainbow","red","yellow"))) - to_chat(usr, "The egg refuses to take on this color!") - return - - to_chat(usr, "You color \the [src] [clr]") - icon_state = "egg-[clr]" - else - ..() - -/obj/item/reagent_containers/food/snacks/egg/blue - icon_state = "egg-blue" - -/obj/item/reagent_containers/food/snacks/egg/green - icon_state = "egg-green" - -/obj/item/reagent_containers/food/snacks/egg/mime - icon_state = "egg-mime" - -/obj/item/reagent_containers/food/snacks/egg/orange - icon_state = "egg-orange" - -/obj/item/reagent_containers/food/snacks/egg/purple - icon_state = "egg-purple" - -/obj/item/reagent_containers/food/snacks/egg/rainbow - icon_state = "egg-rainbow" - -/obj/item/reagent_containers/food/snacks/egg/red - icon_state = "egg-red" - -/obj/item/reagent_containers/food/snacks/egg/yellow - icon_state = "egg-yellow" - -/obj/item/reagent_containers/food/snacks/egg/lizard - name = "unathi egg" - desc = "Large, slightly elongated egg with a thick shell." - icon_state = "lizard_egg" - w_class = ITEM_SIZE_SMALL - -/obj/item/reagent_containers/food/snacks/egg/lizard/Initialize() - .=..() - reagents.add_reagent(/datum/reagent/nutriment/protein/egg, 5) - if(prob(30)) //extra nutriment - reagents.add_reagent(/datum/reagent/nutriment/protein, 5) - -/obj/item/reagent_containers/food/snacks/friedegg - name = "fried egg" - desc = "A fried egg, with a touch of salt and pepper." - icon_state = "friedegg" - filling_color = "#ffdf78" - center_of_mass = "x=16;y=14" - bitesize = 1 -/obj/item/reagent_containers/food/snacks/friedegg/Initialize() - .=..() - reagents.add_reagent(/datum/reagent/nutriment/protein, 3) - reagents.add_reagent(/datum/reagent/sodiumchloride, 1) - reagents.add_reagent(/datum/reagent/blackpepper, 1) - - -/obj/item/reagent_containers/food/snacks/boiledegg - name = "boiled egg" - desc = "A hard boiled egg." - icon_state = "egg" - filling_color = "#ffffff" -/obj/item/reagent_containers/food/snacks/boiledegg/Initialize() - .=..() - reagents.add_reagent(/datum/reagent/nutriment/protein, 2) - -/obj/item/reagent_containers/food/snacks/organ - name = "organ" - desc = "It's good for you." - icon = 'icons/obj/surgery.dmi' - icon_state = "appendix" - filling_color = "#e00d34" - center_of_mass = "x=16;y=16" - bitesize = 3 -/obj/item/reagent_containers/food/snacks/organ/Initialize() - .=..() - reagents.add_reagent(/datum/reagent/nutriment/protein, rand(3,5)) - reagents.add_reagent(/datum/reagent/toxin, rand(1,3)) - - -/obj/item/reagent_containers/food/snacks/tofu - name = "tofu" - icon_state = "tofu" - desc = "We all love tofu." - filling_color = "#fffee0" - center_of_mass = "x=17;y=10" -// nutriment_amt = 3 - nutriment_desc = list("tofu" = 3, "goeyness" = 3) - bitesize = 3 - -/obj/item/reagent_containers/food/snacks/tofu/Initialize() - .=..() - reagents.add_reagent(/datum/reagent/nutriment/softtofu, 6) - -/obj/item/reagent_containers/food/snacks/tofurkey - name = "tofurkey" - desc = "A fake turkey made from tofu." - icon_state = "tofurkey" - filling_color = "#fffee0" - center_of_mass = "x=16;y=8" - nutriment_amt = 12 - nutriment_desc = list("turkey" = 3, "tofu" = 5, "goeyness" = 4) - bitesize = 3 - -/obj/item/reagent_containers/food/snacks/stuffing - name = "stuffing" - desc = "Moist, peppery breadcrumbs for filling the body cavities of dead birds. Dig in!" - icon_state = "stuffing" - filling_color = "#c9ac83" - center_of_mass = "x=16;y=10" - nutriment_amt = 3 - nutriment_desc = list("dryness" = 2, "bread" = 2) - bitesize = 1 - -/obj/item/reagent_containers/food/snacks/fishfingers - name = "fish fingers" - desc = "A finger of fish." - icon_state = "fishfingers" - filling_color = "#ffdefe" - center_of_mass = "x=16;y=13" - bitesize = 3 -/obj/item/reagent_containers/food/snacks/fishfingers/Initialize() - .=..() - reagents.add_reagent(/datum/reagent/nutriment/protein, 4) - -/obj/item/reagent_containers/food/snacks/hugemushroomslice - name = "huge mushroom slice" - desc = "A slice from a huge mushroom." - icon_state = "hugemushroomslice" - filling_color = "#e0d7c5" - center_of_mass = "x=17;y=16" - nutriment_amt = 3 - nutriment_desc = list("raw" = 2, "mushroom" = 2) - bitesize = 6 -/obj/item/reagent_containers/food/snacks/hugemushroomslice/Initialize() - .=..() - reagents.add_reagent(/datum/reagent/psilocybin, 3) - -/obj/item/reagent_containers/food/snacks/tomatomeat - name = "tomato slice" - desc = "A slice from a huge tomato." - icon_state = "tomatomeat" - filling_color = "#db0000" - center_of_mass = "x=17;y=16" - nutriment_amt = 3 - nutriment_desc = list("raw" = 2, "tomato" = 3) - bitesize = 6 - -/obj/item/reagent_containers/food/snacks/bearmeat - name = "bear meat" - desc = "A very manly slab of meat." - icon_state = "bearmeat" - filling_color = "#db0000" - center_of_mass = "x=16;y=10" - bitesize = 3 -/obj/item/reagent_containers/food/snacks/bearmeat/Initialize() - .=..() - reagents.add_reagent(/datum/reagent/nutriment/protein, 12) - reagents.add_reagent(/datum/reagent/hyperzine, 5) - -/obj/item/reagent_containers/food/snacks/spider - name = "giant spider leg" - desc = "An economical replacement for crab. In space! Would probably be a lot nicer cooked." - icon_state = "spiderleg" - filling_color = "#d5f5dc" - center_of_mass = "x=16;y=10" - bitesize = 3 - -/obj/item/reagent_containers/food/snacks/spider/Initialize() - . = ..() - reagents.add_reagent(/datum/reagent/nutriment/protein, 9) - -/obj/item/reagent_containers/food/snacks/spider/cooked - name = "boiled spider meat" - desc = "An economical replacement for crab. In space!" - icon_state = "spiderleg_c" - bitesize = 5 - -/obj/item/reagent_containers/food/snacks/xenomeat - name = "meat" - desc = "A slab of green meat. Smells like acid." - icon_state = "xenomeat" - filling_color = "#43de18" - center_of_mass = "x=16;y=10" - bitesize = 6 -/obj/item/reagent_containers/food/snacks/xenomeat/Initialize() - .=..() - reagents.add_reagent(/datum/reagent/nutriment/protein, 6) - reagents.add_reagent(/datum/reagent/acid/polyacid,6) - -/obj/item/reagent_containers/food/snacks/meatball - name = "meatball" - desc = "A great meal all round." - icon_state = "meatball" - filling_color = "#db0000" - center_of_mass = "x=16;y=16" - bitesize = 2 -/obj/item/reagent_containers/food/snacks/meatball/Initialize() - .=..() - reagents.add_reagent(/datum/reagent/nutriment/protein, 3) - -/obj/item/reagent_containers/food/snacks/sausage - name = "sausage" - desc = "A piece of mixed, long meat." - icon = 'icons/obj/food_ingredients.dmi' - icon_state = "sausage" - filling_color = "#db0000" - center_of_mass = "x=16;y=16" - bitesize = 2 -/obj/item/reagent_containers/food/snacks/sausage/Initialize() - .=..() - reagents.add_reagent(/datum/reagent/nutriment/protein, 6) - -/obj/item/reagent_containers/food/snacks/fatsausage - name = "fat sausage" - desc = "A piece of mixed, long meat, with some bite to it." - icon_state = "sausage" - filling_color = "#db0000" - center_of_mass = "x=16;y=16" - bitesize = 2 -/obj/item/reagent_containers/food/snacks/fatsausage/Initialize() - .=..() - reagents.add_reagent(/datum/reagent/nutriment/protein, 8) - - - - - -/obj/item/reagent_containers/food/snacks/brainburger - name = "brainburger" - desc = "A strange looking burger. It looks almost sentient." - icon_state = "brainburger" - filling_color = "#f2b6ea" - center_of_mass = "x=15;y=11" - bitesize = 2 -/obj/item/reagent_containers/food/snacks/brainburger/Initialize() - .=..() - reagents.add_reagent(/datum/reagent/nutriment/protein, 6) - reagents.add_reagent(/datum/reagent/alkysine, 6) - -/obj/item/reagent_containers/food/snacks/ghostburger - name = "ghost burger" - desc = "Spooky! It doesn't look very filling." - icon_state = "ghostburger" - filling_color = "#fff2ff" - center_of_mass = "x=16;y=11" - nutriment_desc = list("buns" = 3, "spookiness" = 3) - nutriment_amt = 2 - bitesize = 2 - -/obj/item/reagent_containers/food/snacks/human - var/hname = "" - var/job = null - filling_color = "#d63c3c" - -/obj/item/reagent_containers/food/snacks/human/burger - name = "-burger" - desc = "A bloody burger." - icon_state = "hburger" - center_of_mass = "x=16;y=11" - bitesize = 2 -/obj/item/reagent_containers/food/snacks/human/burger/Initialize() - .=..() - reagents.add_reagent(/datum/reagent/nutriment/protein, 6) - -/obj/item/reagent_containers/food/snacks/cheeseburger - name = "cheeseburger" - desc = "The cheese adds a good flavor." - icon_state = "cheeseburger" - center_of_mass = "x=16;y=11" - nutriment_desc = list("cheese" = 2, "bun" = 2) - nutriment_amt = 2 -/obj/item/reagent_containers/food/snacks/cheeseburger/Initialize() - .=..() - reagents.add_reagent(/datum/reagent/nutriment/protein, 2) - -/obj/item/reagent_containers/food/snacks/meatburger - name = "burger" - desc = "The cornerstone of every nutritious breakfast." - icon_state = "hburger" - filling_color = "#d63c3c" - center_of_mass = "x=16;y=11" - nutriment_desc = list("bun" = 2) - nutriment_amt = 3 - bitesize = 2 -/obj/item/reagent_containers/food/snacks/meatburger/Initialize() - .=..() - reagents.add_reagent(/datum/reagent/nutriment/protein, 3) - -/obj/item/reagent_containers/food/snacks/plainburger - name = "burger" - desc = "The cornerstone of every nutritious breakfast." - icon = 'icons/obj/food_ingredients.dmi' - icon_state = "burger" - filling_color = "#d63c3c" - center_of_mass = "x=16;y=11" - nutriment_desc = list("bun" = 2) - nutriment_amt = 3 - bitesize = 2 -/obj/item/reagent_containers/food/snacks/plainburger/Initialize() - .=..() - reagents.add_reagent(/datum/reagent/nutriment/protein, 3) - -/obj/item/reagent_containers/food/snacks/hamburger - name = "hamburger" - desc = "The cornerstone of every nutritious breakfast, now with ham!" - icon = 'icons/obj/food_ingredients.dmi' - icon_state = "hamburger" - filling_color = "#d63c3c" - center_of_mass = "x=16;y=11" - nutriment_desc = list("bun" = 2) - nutriment_amt = 3 - bitesize = 2 -/obj/item/reagent_containers/food/snacks/hamburger/Initialize() - .=..() - reagents.add_reagent(/datum/reagent/nutriment/protein, 5) - -/obj/item/reagent_containers/food/snacks/fishburger - name = "fish sandwich" - desc = "Almost like a carp is yelling somewhere... Give me back that fillet -o- carp, give me that carp." - icon_state = "fishburger" - filling_color = "#ffdefe" - center_of_mass = "x=16;y=10" - bitesize = 3 -/obj/item/reagent_containers/food/snacks/fishburger/Initialize() - .=..() - reagents.add_reagent(/datum/reagent/nutriment/protein, 6) - -/obj/item/reagent_containers/food/snacks/tofuburger - name = "tofu burger" - desc = "What.. is that meat?" - icon_state = "tofuburger" - filling_color = "#fffee0" - center_of_mass = "x=16;y=10" - nutriment_desc = list("bun" = 2, "pseudo-soy meat" = 3) - nutriment_amt = 6 - bitesize = 2 - -/obj/item/reagent_containers/food/snacks/roburger - name = "roburger" - desc = "The lettuce is the only organic component. Beep." - icon_state = "roburger" - filling_color = COLOR_GRAY80 - center_of_mass = "x=16;y=11" - nutriment_desc = list("bun" = 2, "metal" = 3) - nutriment_amt = 2 - bitesize = 2 -/obj/item/reagent_containers/food/snacks/roburger/Initialize() - .=..() - if(prob(5)) - reagents.add_reagent(/datum/reagent/nanites, 2) - -/obj/item/reagent_containers/food/snacks/roburgerbig - name = "roburger" - desc = "This massive patty looks like poison. Beep." - icon_state = "roburger" - filling_color = COLOR_GRAY80 - volume = 100 - center_of_mass = "x=16;y=11" - bitesize = 0.1 -/obj/item/reagent_containers/food/snacks/roburgerbig/Initialize() - .=..() - reagents.add_reagent(/datum/reagent/nanites, 100) - -/obj/item/reagent_containers/food/snacks/xenoburger - name = "xenoburger" - desc = "Smells caustic. Tastes like heresy." - icon_state = "xburger" - filling_color = "#43de18" - center_of_mass = "x=16;y=11" - bitesize = 2 -/obj/item/reagent_containers/food/snacks/xenoburger/Initialize() - .=..() - reagents.add_reagent(/datum/reagent/nutriment/protein, 8) - -/obj/item/reagent_containers/food/snacks/clownburger - name = "clown burger" - desc = "This tastes funny..." - icon_state = "clownburger" - filling_color = "#ff00ff" - center_of_mass = "x=17;y=12" - nutriment_desc = list("bun" = 2, "clown shoe" = 3) - nutriment_amt = 6 - bitesize = 2 - -/obj/item/reagent_containers/food/snacks/mimeburger - name = "mime burger" - desc = "Its taste defies language." - icon_state = "mimeburger" - filling_color = "#ffffff" - center_of_mass = "x=16;y=11" - nutriment_desc = list("bun" = 2, "mime paint" = 3) - nutriment_amt = 6 - bitesize = 2 - -/obj/item/reagent_containers/food/snacks/omelette - name = "cheese omelette" - desc = "Omelette with cheese!" - icon_state = "omelette" - trash = /obj/item/trash/plate - filling_color = "#fff9a8" - center_of_mass = "x=16;y=13" - bitesize = 1 -/obj/item/reagent_containers/food/snacks/omelette/Initialize() - .=..() - reagents.add_reagent(/datum/reagent/nutriment/protein, 8) - -/obj/item/reagent_containers/food/snacks/muffin - name = "muffin" - desc = "A delicious and spongy little cake." - icon_state = "muffin" - filling_color = "#e0cf9b" - center_of_mass = "x=17;y=4" - nutriment_desc = list("sweetness" = 3, "muffin" = 3) - nutriment_amt = 6 - bitesize = 2 - -/obj/item/reagent_containers/food/snacks/bananapie - name = "banana cream pie" - desc = "Just like back home, on clown planet! HONK!" - icon_state = "pie" - trash = /obj/item/trash/plate - filling_color = "#fbffb8" - center_of_mass = "x=16;y=13" - nutriment_desc = list("pie" = 3, "cream" = 2) - nutriment_amt = 4 - bitesize = 3 -/obj/item/reagent_containers/food/snacks/pie/Initialize() - .=..() - reagents.add_reagent(/datum/reagent/drink/juice/banana,5) - -/obj/item/reagent_containers/food/snacks/pie/throw_impact(atom/hit_atom) - ..() - new/obj/effect/decal/cleanable/pie_smudge(src.loc) - src.visible_message("\The [src.name] splats.","You hear a splat.") - qdel(src) - -/obj/item/reagent_containers/food/snacks/berryclafoutis - name = "berry clafoutis" - desc = "No black birds, this is a good sign." - icon_state = "berryclafoutis" - trash = /obj/item/trash/plate - center_of_mass = "x=16;y=13" - nutriment_desc = list("sweetness" = 2, "pie" = 3) - nutriment_amt = 4 - bitesize = 3 -/obj/item/reagent_containers/food/snacks/berryclafoutis/Initialize() - .=..() - reagents.add_reagent(/datum/reagent/drink/juice/berry, 5) - -/obj/item/reagent_containers/food/snacks/waffles - name = "waffles" - desc = "Mmm, waffles." - icon_state = "waffles" - trash = /obj/item/trash/waffles - filling_color = "#e6deb5" - center_of_mass = "x=15;y=11" - nutriment_desc = list("waffle" = 8) - nutriment_amt = 8 - bitesize = 2 - -/obj/item/reagent_containers/food/snacks/pancakesblu - name = "blueberry pancakes" - desc = "Pancakes with blueberries, delicious." - icon_state = "pancakes" - trash = /obj/item/trash/plate - center_of_mass = "x=15;y=11" - nutriment_desc = list("pancake" = 8) - nutriment_amt = 8 - bitesize = 2 - -/obj/item/reagent_containers/food/snacks/pancakes - name = "pancakes" - desc = "Pancakes without blueberries, still delicious." - icon_state = "pancakes" - trash = /obj/item/trash/plate - center_of_mass = "x=15;y=11" - nutriment_desc = list("pancake" = 8) - nutriment_amt = 8 - bitesize = 2 - -/obj/item/reagent_containers/food/snacks/eggplantparm - name = "eggplant parmigiana" - desc = "The only good recipe for eggplant." - icon_state = "eggplantparm" - trash = /obj/item/trash/plate - filling_color = "#4d2f5e" - center_of_mass = "x=16;y=11" - nutriment_desc = list("cheese" = 3, "eggplant" = 3) - nutriment_amt = 6 - bitesize = 2 - -/obj/item/reagent_containers/food/snacks/soylentgreen - name = "soylent green" - desc = "Not made of people. Honest."//Totally people. - icon_state = "soylent_green" - trash = /obj/item/trash/waffles - filling_color = "#b8e6b5" - center_of_mass = "x=15;y=11" - bitesize = 2 -/obj/item/reagent_containers/food/snacks/soylentgreen/Initialize() - .=..() - reagents.add_reagent(/datum/reagent/nutriment/protein, 10) - -/obj/item/reagent_containers/food/snacks/soylenviridians - name = "soylen virdians" - desc = "Not made of people. Honest."//Actually honest for once. - icon_state = "soylent_yellow" - trash = /obj/item/trash/waffles - filling_color = "#e6fa61" - center_of_mass = "x=15;y=11" - nutriment_desc = list("some sort of protein" = 10)//seasoned vERY well. - nutriment_amt = 10 - bitesize = 2 - -/obj/item/reagent_containers/food/snacks/meatpie - name = "meat-pie" - icon_state = "meatpie" - desc = "An old barber recipe, very delicious!" - trash = /obj/item/trash/plate - filling_color = "#948051" - center_of_mass = "x=16;y=13" - bitesize = 2 -/obj/item/reagent_containers/food/snacks/meatpie/Initialize() - .=..() - reagents.add_reagent(/datum/reagent/nutriment/protein, 10) - -/obj/item/reagent_containers/food/snacks/tofupie - name = "tofu-pie" - icon_state = "meatpie" - desc = "A delicious tofu pie." - trash = /obj/item/trash/plate - filling_color = "#fffee0" - center_of_mass = "x=16;y=13" - nutriment_desc = list("tofu" = 2, "pie" = 8) - nutriment_amt = 10 - bitesize = 2 - -/obj/item/reagent_containers/food/snacks/amanita_pie - name = "amanita pie" - desc = "Sweet and tasty poison pie." - icon_state = "amanita_pie" - filling_color = "#ffcccc" - center_of_mass = "x=17;y=9" - nutriment_desc = list("sweetness" = 3, "mushroom" = 3, "pie" = 2) - nutriment_amt = 5 - bitesize = 3 -/obj/item/reagent_containers/food/snacks/amanita_pie/Initialize() - .=..() - reagents.add_reagent(/datum/reagent/toxin/amatoxin, 3) - reagents.add_reagent(/datum/reagent/psilocybin, 1) - -/obj/item/reagent_containers/food/snacks/plump_pie - name = "plump pie" - desc = "I bet you love stuff made out of plump helmets!" - icon_state = "plump_pie" - filling_color = "#b8279b" - center_of_mass = "x=17;y=9" - nutriment_desc = list("heartiness" = 2, "mushroom" = 3, "pie" = 3) - nutriment_amt = 8 - bitesize = 2 -/obj/item/reagent_containers/food/snacks/plump_pie/Initialize() - .=..() - if(prob(10)) - name = "exceptional plump pie" - desc = "Microwave is taken by a fey mood! It has cooked an exceptional plump pie!" - reagents.add_reagent(/datum/reagent/tricordrazine, 5) - -/obj/item/reagent_containers/food/snacks/xemeatpie - name = "xeno-pie" - icon_state = "xenomeatpie" - desc = "A delicious meatpie. Probably heretical." - trash = /obj/item/trash/plate - filling_color = "#43de18" - center_of_mass = "x=16;y=13" - bitesize = 2 -/obj/item/reagent_containers/food/snacks/xemeatpie/Initialize() - .=..() - reagents.add_reagent(/datum/reagent/nutriment/protein, 10) - -/obj/item/reagent_containers/food/snacks/meatkabob - name = "meat-kabob" - icon_state = "kabob" - desc = "Delicious meat, on a stick." - trash = /obj/item/stack/material/rods - filling_color = "#a85340" - center_of_mass = "x=17;y=15" - bitesize = 2 -/obj/item/reagent_containers/food/snacks/meatkabob/Initialize() - .=..() - reagents.add_reagent(/datum/reagent/nutriment/protein, 8) - -/obj/item/reagent_containers/food/snacks/tofukabob - name = "tofu-kabob" - icon_state = "kabob" - desc = "Vegan meat, on a stick." - trash = /obj/item/stack/material/rods - filling_color = "#fffee0" - center_of_mass = "x=17;y=15" - nutriment_desc = list("tofu" = 3, "metal" = 1) - nutriment_amt = 8 - bitesize = 2 - -/obj/item/reagent_containers/food/snacks/cubancarp - name = "cuban carp" - desc = "A sandwich that burns your tongue and then leaves it numb!" - icon_state = "cubancarp" - trash = /obj/item/trash/plate - filling_color = "#e9adff" - center_of_mass = "x=12;y=5" - nutriment_desc = list("toasted bread" = 3) - nutriment_amt = 3 - bitesize = 3 -/obj/item/reagent_containers/food/snacks/cubancarp/Initialize() - .=..() - reagents.add_reagent(/datum/reagent/nutriment/protein, 3) - reagents.add_reagent(/datum/reagent/capsaicin, 3) - -/obj/item/reagent_containers/food/snacks/popcorn - name = "popcorn" - desc = "Now let's find some cinema." - icon_state = "popcorn" - trash = /obj/item/trash/popcorn - filling_color = "#fffad4" - center_of_mass = "x=16;y=8" - nutriment_desc = list("popcorn" = 3) - nutriment_amt = 2 - bitesize = 0.1 - -/obj/item/reagent_containers/food/snacks/loadedbakedpotato - name = "loaded baked potato" - desc = "Totally baked." - icon_state = "loadedbakedpotato" - filling_color = "#9c7a68" - center_of_mass = "x=16;y=10" - nutriment_desc = list("baked potato" = 3) - nutriment_amt = 3 - bitesize = 2 -/obj/item/reagent_containers/food/snacks/loadedbakedpotato/Initialize() - .=..() - reagents.add_reagent(/datum/reagent/nutriment/protein, 3) - -/obj/item/reagent_containers/food/snacks/fries - name = "space fries" - desc = "AKA: French Fries, Freedom Fries, etc." - icon_state = "fries" - trash = /obj/item/trash/plate - filling_color = "#eddd00" - center_of_mass = "x=16;y=11" - nutriment_desc = list("fresh fries" = 4) - nutriment_amt = 4 - bitesize = 2 - -/obj/item/reagent_containers/food/snacks/onionrings - name = "onion rings" - desc = "Like circular fries but better." - icon_state = "onionrings" - trash = /obj/item/trash/plate - filling_color = "#eddd00" - center_of_mass = "x=16;y=11" - nutriment_desc = list("fried onions" = 5) - nutriment_amt = 5 - bitesize = 2 - -/obj/item/reagent_containers/food/snacks/soydope - name = "soy dope" - desc = "Dope from a soy." - icon_state = "soydope" - trash = /obj/item/trash/plate - filling_color = "#c4bf76" - center_of_mass = "x=16;y=10" - nutriment_desc = list("slime" = 2, "soy" = 2) - nutriment_amt = 2 - bitesize = 2 - -/obj/item/reagent_containers/food/snacks/spagetti - name = "spaghetti" - desc = "A bundle of raw spaghetti." - icon_state = "spagetti" - filling_color = "#eddd00" - center_of_mass = "x=16;y=16" - nutriment_desc = list("noodles" = 2) - nutriment_amt = 1 - bitesize = 1 - -/obj/item/reagent_containers/food/snacks/cheesyfries - name = "cheesy fries" - desc = "Fries. Covered in cheese. Duh." - icon_state = "cheesyfries" - trash = /obj/item/trash/plate - filling_color = "#eddd00" - center_of_mass = "x=16;y=11" - nutriment_desc = list("fresh fries" = 3, "cheese" = 3) - nutriment_amt = 4 - bitesize = 2 -/obj/item/reagent_containers/food/snacks/cheesyfries/Initialize() - .=..() - reagents.add_reagent(/datum/reagent/nutriment/protein, 2) - -/obj/item/reagent_containers/food/snacks/fortunecookie - name = "fortune cookie" - desc = "A true prophecy in each cookie!" - icon_state = "fortune_cookie" - filling_color = "#e8e79e" - center_of_mass = "x=15;y=14" - nutriment_desc = list("fortune cookie" = 2) - nutriment_amt = 3 - bitesize = 2 - -/obj/item/reagent_containers/food/snacks/badrecipe - name = "burned mess" - desc = "Someone should be demoted from chef for this." - icon_state = "badrecipe" - filling_color = "#211f02" - center_of_mass = "x=16;y=12" - bitesize = 2 -/obj/item/reagent_containers/food/snacks/badrecipe/Initialize() - .=..() - reagents.add_reagent(/datum/reagent/toxin, 1) - reagents.add_reagent(/datum/reagent/carbon, 3) - -/obj/item/reagent_containers/food/snacks/plainsteak - name = "plain steak" - desc = "A piece of unseasoned cooked meat." - icon = 'icons/obj/food_ingredients.dmi' - icon_state = "steak" - slice_path = /obj/item/reagent_containers/food/snacks/cutlet - slices_num = 3 - filling_color = "#7a3d11" - center_of_mass = "x=16;y=13" - bitesize = 3 -/obj/item/reagent_containers/food/snacks/plainsteak/Initialize() - .=..() - reagents.add_reagent(/datum/reagent/nutriment/protein, 4) - -/obj/item/reagent_containers/food/snacks/meatsteak - name = "meat steak" - desc = "A piece of hot spicy meat." - icon_state = "meatstake" - trash = /obj/item/trash/plate - filling_color = "#7a3d11" - center_of_mass = "x=16;y=13" - bitesize = 3 -/obj/item/reagent_containers/food/snacks/meatsteak/Initialize() - .=..() - reagents.add_reagent(/datum/reagent/nutriment/protein, 4) - reagents.add_reagent(/datum/reagent/sodiumchloride, 1) - reagents.add_reagent(/datum/reagent/blackpepper, 1) - -/obj/item/reagent_containers/food/snacks/meatsteak/synthetic - name = "meaty steak" - desc = "A piece of hot spicy pseudo-meat." - -/obj/item/reagent_containers/food/snacks/loadedsteak - name = "loaded steak" - desc = "A steak slathered in sauce with sauteed onions and mushrooms." - icon_state = "meatstake" - trash = /obj/item/trash/plate - filling_color = "#7a3d11" - center_of_mass = "x=16;y=13" - nutriment_desc = list("onion" = 2, "mushroom" = 2) - nutriment_amt = 4 - bitesize = 3 -/obj/item/reagent_containers/food/snacks/loadedsteak/Initialize() - .=..() - reagents.add_reagent(/datum/reagent/nutriment/protein, 2) - reagents.add_reagent(/datum/reagent/nutriment/garlicsauce, 2) - -/obj/item/reagent_containers/food/snacks/spacylibertyduff - name = "spacy liberty duff" - desc = "Jello gelatin, from Alfred Hubbard's cookbook." - icon_state = "spacylibertyduff" - trash = /obj/item/trash/snack_bowl - filling_color = "#42b873" - center_of_mass = "x=16;y=8" - nutriment_desc = list("mushroom" = 6) - nutriment_amt = 6 - bitesize = 3 -/obj/item/reagent_containers/food/snacks/spacylibertyduff/Initialize() - .=..() - reagents.add_reagent(/datum/reagent/psilocybin, 6) - -/obj/item/reagent_containers/food/snacks/amanitajelly - name = "amanita jelly" - desc = "Looks curiously toxic." - icon_state = "amanitajelly" - trash = /obj/item/trash/snack_bowl - filling_color = "#ed0758" - center_of_mass = "x=16;y=5" - nutriment_desc = list("jelly" = 3, "mushroom" = 3) - nutriment_amt = 6 - bitesize = 3 -/obj/item/reagent_containers/food/snacks/amanitajelly/Initialize() - .=..() - reagents.add_reagent(/datum/reagent/toxin/amatoxin, 6) - reagents.add_reagent(/datum/reagent/psilocybin, 3) - -/obj/item/reagent_containers/food/snacks/poppypretzel - name = "poppy pretzel" - desc = "It's all twisted up!" - icon_state = "poppypretzel" - bitesize = 2 - filling_color = "#916e36" - center_of_mass = "x=16;y=10" - nutriment_desc = list("poppy seeds" = 2, "pretzel" = 3) - nutriment_amt = 5 - bitesize = 2 - -/obj/item/reagent_containers/food/snacks/meatballsoup - name = "meatball soup" - desc = "You've got balls kid, BALLS!" - icon_state = "meatballsoup" - trash = /obj/item/trash/snack_bowl - filling_color = "#785210" - center_of_mass = "x=16;y=8" - bitesize = 5 - eat_sound = list('sound/items/eatfood.ogg', 'sound/items/drink.ogg') - -/obj/item/reagent_containers/food/snacks/meatballsoup/Initialize() - .=..() - reagents.add_reagent(/datum/reagent/nutriment/protein, 8) - reagents.add_reagent(/datum/reagent/water, 5) - -/obj/item/reagent_containers/food/snacks/slimesoup - name = "slime soup" - desc = "If no water is available, you may substitute tears." - icon_state = "slimesoup"//nonexistant? - filling_color = "#c4dba0" - bitesize = 5 - eat_sound = 'sound/items/drink.ogg' - -/obj/item/reagent_containers/food/snacks/slimesoup/Initialize() - .=..() - reagents.add_reagent(/datum/reagent/slimejelly, 5) - reagents.add_reagent(/datum/reagent/water, 10) - -/obj/item/reagent_containers/food/snacks/bloodsoup - name = "tomato soup" - desc = "Smells like copper." - icon_state = "tomatosoup" - filling_color = "#ff0000" - center_of_mass = "x=16;y=7" - bitesize = 5 - eat_sound = 'sound/items/drink.ogg' - -/obj/item/reagent_containers/food/snacks/bloodsoup/Initialize() - .=..() - reagents.add_reagent(/datum/reagent/nutriment/protein, 2) - reagents.add_reagent(/datum/reagent/blood, 10) - reagents.add_reagent(/datum/reagent/water, 5) - -/obj/item/reagent_containers/food/snacks/clownstears - name = "clown's tears" - desc = "Not very funny." - icon_state = "clownstears" - filling_color = "#c4fbff" - center_of_mass = "x=16;y=7" - nutriment_desc = list("salt" = 1, "the worst joke" = 3) - nutriment_amt = 4 - bitesize = 5 - eat_sound = 'sound/items/drink.ogg' - -/obj/item/reagent_containers/food/snacks/clownstears/Initialize() - .=..() - reagents.add_reagent(/datum/reagent/drink/juice/banana, 5) - reagents.add_reagent(/datum/reagent/water, 10) - -/obj/item/reagent_containers/food/snacks/onionsoup - name = "onion soup" - desc = "Best enjoyed with some bread and cheese." - icon_state = "onionsoup" - trash = /obj/item/trash/snack_bowl - filling_color = "#af8e5a" - center_of_mass = "x=16;y=8" - nutriment_desc = list("onion" = 2) - nutriment_amt = 8 - bitesize = 5 - eat_sound = list('sound/items/eatfood.ogg', 'sound/items/drink.ogg') - -/obj/item/reagent_containers/food/snacks/onionsoup/Initialize() - .=..() - reagents.add_reagent(/datum/reagent/water, 5) - -/obj/item/reagent_containers/food/snacks/vegetablesoup - name = "vegetable soup" - desc = "A highly nutritious blend of vegetative goodness. Guaranteed to leave you with a, er, \"souped-up\" sense of wellbeing." - icon_state = "vegetablesoup" - trash = /obj/item/trash/snack_bowl - filling_color = "#afc4b5" - center_of_mass = "x=16;y=8" - nutriment_desc = list("carrot" = 2, "corn" = 2, "eggplant" = 2, "potato" = 2) - nutriment_amt = 8 - bitesize = 5 - eat_sound = list('sound/items/eatfood.ogg', 'sound/items/drink.ogg') - -/obj/item/reagent_containers/food/snacks/vegetablesoup/Initialize() - .=..() - reagents.add_reagent(/datum/reagent/water, 5) - -/obj/item/reagent_containers/food/snacks/nettlesoup - name = "nettle soup" - desc = "A mean, green, calorically lean dish derived from a poisonous plant. It has a rather acidic bite to its taste." - icon_state = "nettlesoup" - trash = /obj/item/trash/snack_bowl - filling_color = "#afc4b5" - center_of_mass = "x=16;y=7" - nutriment_desc = list("salad" = 4, "egg" = 2, "potato" = 2) - nutriment_amt = 8 - bitesize = 5 - eat_sound = list('sound/items/eatfood.ogg', 'sound/items/drink.ogg') - -/obj/item/reagent_containers/food/snacks/nettlesoup/Initialize() - .=..() - reagents.add_reagent(/datum/reagent/water, 5) - reagents.add_reagent(/datum/reagent/tricordrazine, 5) - -/obj/item/reagent_containers/food/snacks/mysterysoup - name = "mystery soup" - desc = "The mystery is, why aren't you eating it?" - icon_state = "mysterysoup" - trash = /obj/item/trash/snack_bowl - filling_color = "#f082ff" - center_of_mass = "x=16;y=6" - nutriment_desc = list("backwash" = 1) - nutriment_amt = 1 - bitesize = 5 - eat_sound = 'sound/items/drink.ogg' - -/obj/item/reagent_containers/food/snacks/mysterysoup/Initialize() - .=..() - switch(rand(1,10)) - if(1) - reagents.add_reagent(/datum/reagent/nutriment, 6) - reagents.add_reagent(/datum/reagent/capsaicin, 3) - reagents.add_reagent(/datum/reagent/drink/juice/tomato, 2) - if(2) - reagents.add_reagent(/datum/reagent/nutriment, 6) - reagents.add_reagent(/datum/reagent/frostoil, 3) - reagents.add_reagent(/datum/reagent/drink/juice/tomato, 2) - if(3) - reagents.add_reagent(/datum/reagent/nutriment, 5) - reagents.add_reagent(/datum/reagent/water, 5) - reagents.add_reagent(/datum/reagent/tricordrazine, 5) - if(4) - reagents.add_reagent(/datum/reagent/nutriment, 5) - reagents.add_reagent(/datum/reagent/water, 10) - if(5) - reagents.add_reagent(/datum/reagent/nutriment, 2) - reagents.add_reagent(/datum/reagent/drink/juice/banana, 10) - if(6) - reagents.add_reagent(/datum/reagent/nutriment, 6) - reagents.add_reagent(/datum/reagent/blood, 10) - if(7) - reagents.add_reagent(/datum/reagent/slimejelly, 10) - reagents.add_reagent(/datum/reagent/water, 10) - if(8) - reagents.add_reagent(/datum/reagent/carbon, 10) - reagents.add_reagent(/datum/reagent/toxin, 10) - if(9) - reagents.add_reagent(/datum/reagent/nutriment, 5) - reagents.add_reagent(/datum/reagent/drink/juice/tomato, 10) - if(10) - reagents.add_reagent(/datum/reagent/nutriment, 6) - reagents.add_reagent(/datum/reagent/drink/juice/tomato, 5) - reagents.add_reagent(/datum/reagent/imidazoline, 5) - -/obj/item/reagent_containers/food/snacks/wishsoup - name = "wish soup" - desc = "I wish this was soup." - icon_state = "wishsoup" - trash = /obj/item/trash/snack_bowl - filling_color = "#d1f4ff" - center_of_mass = "x=16;y=11" - bitesize = 5 - eat_sound = 'sound/items/drink.ogg' - -/obj/item/reagent_containers/food/snacks/wishsoup/Initialize() - .=..() - reagents.add_reagent(/datum/reagent/water, 10) - if(prob(25)) - src.desc = "A wish come true!" - reagents.add_reagent(/datum/reagent/nutriment, 8, list("something good" = 8)) - -/obj/item/reagent_containers/food/snacks/hotchili - name = "hot chili" - desc = "A five alarm Texan chili!" - icon_state = "hotchili" - trash = /obj/item/trash/snack_bowl - filling_color = "#ff3c00" - center_of_mass = "x=15;y=9" - nutriment_desc = list("chilli peppers" = 3) - nutriment_amt = 3 - bitesize = 5 -/obj/item/reagent_containers/food/snacks/hotchili/Initialize() - .=..() - reagents.add_reagent(/datum/reagent/nutriment/protein, 3) - reagents.add_reagent(/datum/reagent/capsaicin, 3) - reagents.add_reagent(/datum/reagent/drink/juice/tomato, 2) - -/obj/item/reagent_containers/food/snacks/coldchili - name = "cold chili" - desc = "This slush is barely a liquid!" - icon_state = "coldchili" - filling_color = "#2b00ff" - center_of_mass = "x=15;y=9" - nutriment_desc = list("chilly peppers" = 3) - nutriment_amt = 3 - trash = /obj/item/trash/snack_bowl - bitesize = 5 -/obj/item/reagent_containers/food/snacks/coldchili/Initialize() - .=..() - reagents.add_reagent(/datum/reagent/nutriment/protein, 3) - reagents.add_reagent(/datum/reagent/frostoil, 3) - reagents.add_reagent(/datum/reagent/drink/juice/tomato, 2) - -//cubed animals! - -/obj/item/reagent_containers/food/snacks/monkeycube - name = "monkey cube" - desc = "Just add water!" - atom_flags = ATOM_FLAG_NO_TEMP_CHANGE | ATOM_FLAG_OPEN_CONTAINER - icon_state = "monkeycube" - bitesize = 12 - filling_color = "#adac7f" - center_of_mass = "x=16;y=14" - - var/wrapped = 0 - var/growing = 0 - var/monkey_type = /mob/living/carbon/human/monkey - -/obj/item/reagent_containers/food/snacks/monkeycube/Initialize() - .=..() - reagents.add_reagent(/datum/reagent/nutriment/protein, 10) - -/obj/item/reagent_containers/food/snacks/monkeycube/attack_self(var/mob/user) - if(wrapped) - Unwrap(user) - -/obj/item/reagent_containers/food/snacks/monkeycube/proc/Expand() - if(!growing) - growing = 1 - src.visible_message("\The [src] expands!") - var/mob/monkey = new monkey_type - monkey.dropInto(src.loc) - qdel(src) - -/obj/item/reagent_containers/food/snacks/monkeycube/proc/Unwrap(var/mob/user) - icon_state = "monkeycube" - desc = "Just add water!" - to_chat(user, SPAN_NOTICE("You unwrap \the [src].")) - wrapped = 0 - atom_flags |= ATOM_FLAG_OPEN_CONTAINER - var/trash = new /obj/item/trash/cubewrapper(get_turf(user)) - user.put_in_hands(trash) - -/obj/item/reagent_containers/food/snacks/monkeycube/OnConsume(mob/living/consumer) - set waitfor = FALSE - if (ishuman(consumer)) - var/mob/living/carbon/human/human = consumer - to_chat(human, FONT_LARGE(SPAN_DANGER("Something is very wrong ..."))) - var/obj/item/organ/external/organ = human.get_organ(BP_CHEST) - sleep(3 SECONDS) - organ.fracture() - sleep(3 SECONDS) - human.visible_message( - SPAN_DANGER("A screeching creature bursts out of \the [human]'s chest!"), - FONT_HUGE(SPAN_DANGER("Something claws its way out through your [organ]!")) - ) - organ.take_external_damage(50, 0, EMPTY_BITFIELD, "Live animal escaping the body") - organ.damage_internal_organs(50, 0, EMPTY_BITFIELD) - human.AdjustWeakened(5) - human.AdjustStunned(5) - else - consumer.kill_health() - Expand() - -/obj/item/reagent_containers/food/snacks/monkeycube/on_reagent_change() - if(reagents.has_reagent(/datum/reagent/water)) - Expand() - -/obj/item/reagent_containers/food/snacks/monkeycube/wrapped - desc = "Still wrapped in some paper." - icon_state = "monkeycubewrap" - item_flags = 0 - obj_flags = 0 - wrapped = 1 - -/obj/item/reagent_containers/food/snacks/monkeycube/farwacube - name = "farwa cube" - monkey_type = /mob/living/carbon/human/farwa - -/obj/item/reagent_containers/food/snacks/monkeycube/wrapped/farwacube - name = "farwa cube" - monkey_type = /mob/living/carbon/human/farwa - -/obj/item/reagent_containers/food/snacks/monkeycube/stokcube - name = "stok cube" - monkey_type = /mob/living/carbon/human/stok - -/obj/item/reagent_containers/food/snacks/monkeycube/wrapped/stokcube - name = "stok cube" - monkey_type = /mob/living/carbon/human/stok - -/obj/item/reagent_containers/food/snacks/monkeycube/neaeracube - name = "neaera cube" - monkey_type = /mob/living/carbon/human/neaera - -/obj/item/reagent_containers/food/snacks/monkeycube/wrapped/neaeracube - name = "neaera cube" - monkey_type = /mob/living/carbon/human/neaera - - -//Spider cubes, all that's left of the cube PR - -/obj/item/reagent_containers/food/snacks/monkeycube/spidercube - name = "spider cube" - monkey_type = /obj/effect/spider/spiderling - -/obj/item/reagent_containers/food/snacks/monkeycube/wrapped/spidercube - name = "spider cube" - monkey_type = /obj/effect/spider/spiderling - -/obj/item/reagent_containers/food/snacks/monkeycube/pikecube - name = "strange-looking monkey cube" - monkey_type = /mob/living/simple_animal/hostile/carp/pike - -/obj/item/reagent_containers/food/snacks/monkeycube/wrapped/pikecube - name = "strange-looking monkey cube" - monkey_type = /mob/living/simple_animal/hostile/carp/pike - -/obj/item/reagent_containers/food/snacks/spellburger - name = "spell burger" - desc = "This is absolutely Ei Nath." - icon_state = "spellburger" - filling_color = "#d505ff" - nutriment_desc = list("magic" = 3, "buns" = 3) - nutriment_amt = 6 - bitesize = 2 - -/obj/item/reagent_containers/food/snacks/bigbiteburger - name = "big bite burger" - desc = "Forget the Luna Burger! THIS is the future!" - icon_state = "bigbiteburger" - filling_color = "#e3d681" - center_of_mass = "x=16;y=11" - nutriment_desc = list("buns" = 4) - nutriment_amt = 4 - bitesize = 3 -/obj/item/reagent_containers/food/snacks/bigbiteburger/Initialize() - .=..() - reagents.add_reagent(/datum/reagent/nutriment/protein, 10) - -/obj/item/reagent_containers/food/snacks/enchiladas - name = "enchiladas" - desc = "Viva La Space Mexico!" - icon_state = "enchiladas" - trash = /obj/item/trash/tray - filling_color = "#a36a1f" - center_of_mass = "x=16;y=13" - nutriment_desc = list("tortilla" = 3, "corn" = 3) - nutriment_amt = 2 - bitesize = 4 -/obj/item/reagent_containers/food/snacks/enchiladas/Initialize() - .=..() - reagents.add_reagent(/datum/reagent/nutriment/protein, 6) - reagents.add_reagent(/datum/reagent/capsaicin, 6) - -/obj/item/reagent_containers/food/snacks/monkeysdelight - name = "monkey's delight" - desc = "Eeee Eee!" - icon_state = "monkeysdelight" - trash = /obj/item/trash/tray - filling_color = "#5c3c11" - center_of_mass = "x=16;y=13" - bitesize = 6 -/obj/item/reagent_containers/food/snacks/monkeysdelight/Initialize() - .=..() - reagents.add_reagent(/datum/reagent/nutriment/protein, 10) - reagents.add_reagent(/datum/reagent/drink/juice/banana, 5) - reagents.add_reagent(/datum/reagent/blackpepper, 1) - reagents.add_reagent(/datum/reagent/sodiumchloride, 1) - -/obj/item/reagent_containers/food/snacks/baguette - name = "baguette" - desc = "Bon appetit!" - icon_state = "baguette" - filling_color = "#e3d796" - center_of_mass = "x=18;y=12" - nutriment_desc = list("french bread" = 6) - nutriment_amt = 6 - bitesize = 3 -/obj/item/reagent_containers/food/snacks/baguette/Initialize() - .=..() - reagents.add_reagent(/datum/reagent/blackpepper, 1) - reagents.add_reagent(/datum/reagent/sodiumchloride, 1) - -/obj/item/reagent_containers/food/snacks/fishandchips - name = "fish and chips" - desc = "I do say so myself chap." - icon_state = "fishandchips" - filling_color = "#e3d796" - center_of_mass = "x=16;y=16" - nutriment_desc = list("salt" = 1, "chips" = 3) - nutriment_amt = 3 - bitesize = 3 -/obj/item/reagent_containers/food/snacks/fishandchips/Initialize() - .=..() - reagents.add_reagent(/datum/reagent/nutriment/protein, 3) - -/obj/item/reagent_containers/food/snacks/sandwich - name = "sandwich" - desc = "A grand creation of meat, cheese, bread, and several leaves of lettuce! Arthur Dent would be proud." - icon_state = "sandwich" - trash = /obj/item/trash/plate - filling_color = "#d9be29" - center_of_mass = "x=16;y=4" - nutriment_desc = list("bread" = 3, "cheese" = 2, "lettuce" = 1) - nutriment_amt = 3 - bitesize = 2 -/obj/item/reagent_containers/food/snacks/sandwich/Initialize() - .=..() - reagents.add_reagent(/datum/reagent/nutriment/protein, 3) - -/obj/item/reagent_containers/food/snacks/toastedsandwich - name = "toasted sandwich" - desc = "Now if you only had a pepper bar." - icon_state = "toastedsandwich" - trash = /obj/item/trash/plate - filling_color = "#d9be29" - center_of_mass = "x=16;y=4" - nutriment_desc = list("toasted bread" = 3, "cheese" = 3) - nutriment_amt = 3 - bitesize = 2 -/obj/item/reagent_containers/food/snacks/toastedsandwich/Initialize() - .=..() - reagents.add_reagent(/datum/reagent/nutriment/protein, 3) - reagents.add_reagent(/datum/reagent/carbon, 2) - -/obj/item/reagent_containers/food/snacks/grilledcheese - name = "grilled cheese sandwich" - desc = "Goes great with Tomato soup!" - icon_state = "toastedsandwich" - trash = /obj/item/trash/plate - filling_color = "#d9be29" - nutriment_desc = list("toasted bread" = 3, "cheese" = 3) - nutriment_amt = 3 - bitesize = 2 -/obj/item/reagent_containers/food/snacks/grilledcheese/Initialize() - .=..() - reagents.add_reagent(/datum/reagent/nutriment/protein, 4) - -/obj/item/reagent_containers/food/snacks/tomatosoup - name = "tomato soup" - desc = "Drinking this feels like being a vampire! A tomato vampire..." - icon_state = "tomatosoup" - trash = /obj/item/trash/snack_bowl - filling_color = "#d92929" - center_of_mass = "x=16;y=7" - nutriment_desc = list("soup" = 5) - nutriment_amt = 5 - bitesize = 3 - eat_sound = 'sound/items/drink.ogg' - -/obj/item/reagent_containers/food/snacks/tomatosoup/Initialize() - .=..() - reagents.add_reagent(/datum/reagent/drink/juice/tomato, 10) - -/obj/item/reagent_containers/food/snacks/rofflewaffles - name = "roffle waffles" - desc = "Waffles from Roffle. Co." - icon_state = "rofflewaffles" - trash = /obj/item/trash/waffles - filling_color = "#ff00f7" - center_of_mass = "x=15;y=11" - nutriment_desc = list("waffle" = 7, "sweetness" = 1) - nutriment_amt = 8 - bitesize = 4 -/obj/item/reagent_containers/food/snacks/rofflewaffles/Initialize() - .=..() - reagents.add_reagent(/datum/reagent/psilocybin, 8) - -/obj/item/reagent_containers/food/snacks/stew - name = "stew" - desc = "A nice and warm stew. Healthy and strong." - icon_state = "stew" - filling_color = "#9e673a" - center_of_mass = "x=16;y=5" - nutriment_desc = list("tomato" = 2, "potato" = 2, "carrot" = 2, "eggplant" = 2, "mushroom" = 2) - nutriment_amt = 6 - bitesize = 10 -/obj/item/reagent_containers/food/snacks/stew/Initialize() - .=..() - reagents.add_reagent(/datum/reagent/nutriment/protein, 4) - reagents.add_reagent(/datum/reagent/drink/juice/tomato, 5) - reagents.add_reagent(/datum/reagent/imidazoline, 5) - reagents.add_reagent(/datum/reagent/water, 5) - -/obj/item/reagent_containers/food/snacks/jelliedtoast - name = "jellied toast" - desc = "A slice of bread covered with delicious jam." - icon_state = "jellytoast" - trash = /obj/item/trash/plate - filling_color = "#b572ab" - center_of_mass = "x=16;y=8" - nutriment_desc = list("toasted bread" = 2) - nutriment_amt = 1 - bitesize = 3 - -/obj/item/reagent_containers/food/snacks/jelliedtoast/cherry -/obj/item/reagent_containers/food/snacks/jelliedtoast/cherry/Initialize() - .=..() - reagents.add_reagent(/datum/reagent/nutriment/cherryjelly, 5) - -/obj/item/reagent_containers/food/snacks/jelliedtoast/slime -/obj/item/reagent_containers/food/snacks/jelliedtoast/slime/Initialize() - .=..() - reagents.add_reagent(/datum/reagent/slimejelly, 5) - -/obj/item/reagent_containers/food/snacks/jellyburger - name = "jelly burger" - desc = "Culinary delight..?" - icon_state = "jellyburger" - filling_color = "#b572ab" - center_of_mass = "x=16;y=11" - nutriment_desc = list("buns" = 5) - nutriment_amt = 5 - bitesize = 2 - -/obj/item/reagent_containers/food/snacks/jellyburger/slime -/obj/item/reagent_containers/food/snacks/jellyburger/slime/Initialize() - .=..() - reagents.add_reagent(/datum/reagent/slimejelly, 5) - -/obj/item/reagent_containers/food/snacks/jellyburger/cherry -/obj/item/reagent_containers/food/snacks/jellyburger/cherry/Initialize() - .=..() - reagents.add_reagent(/datum/reagent/nutriment/cherryjelly, 5) - -/obj/item/reagent_containers/food/snacks/milosoup - name = "milosoup" - desc = "The universes best soup! Yum!!!" - icon_state = "milosoup" - trash = /obj/item/trash/snack_bowl - center_of_mass = "x=16;y=7" - nutriment_desc = list("soy" = 8) - nutriment_amt = 8 - bitesize = 4 - eat_sound = 'sound/items/drink.ogg' - -/obj/item/reagent_containers/food/snacks/milosoup/Initialize() - .=..() - reagents.add_reagent(/datum/reagent/water, 5) - - -/obj/item/reagent_containers/food/snacks/stewedsoymeat - name = "stewed soy meat" - desc = "Even non-vegetarians will LOVE this!" - icon_state = "stewedsoymeat" - trash = /obj/item/trash/plate - center_of_mass = "x=16;y=10" - nutriment_desc = list("soy" = 4, "tomato" = 4) - nutriment_amt = 8 - bitesize = 2 - -/obj/item/reagent_containers/food/snacks/boiledspagetti - name = "boiled spaghetti" - desc = "A plain dish of noodles, this sucks." - icon_state = "spagettiboiled" - trash = /obj/item/trash/plate - filling_color = "#fcee81" - center_of_mass = "x=16;y=10" - nutriment_desc = list("noodles" = 2) - nutriment_amt = 2 - bitesize = 2 - -/obj/item/reagent_containers/food/snacks/boiledrice - name = "boiled rice" - desc = "A boring dish of boring rice." - icon_state = "boiledrice" - trash = /obj/item/trash/snack_bowl - filling_color = "#fffbdb" - center_of_mass = "x=17;y=11" - nutriment_desc = list("rice" = 2) - nutriment_amt = 6 - bitesize = 2 - -/obj/item/reagent_containers/food/snacks/boiledrice/chazuke - name = "chazuke" - desc = "An ancient way of using up day-old rice, this dish is composed of plain green tea poured over plain white rice. Hopefully you have something else to put in." - icon_state = "chazuke" - filling_color = "#f1ffdb" - nutriment_desc = list("chazuke" = 2) - bitesize = 3 - -/obj/item/reagent_containers/food/snacks/katsucurry - name = "katsu curry" - desc = "An oriental curry dish made from apples, potatoes, and carrots. Served with rice and breaded chicken." - icon_state = "katsu" - trash = /obj/item/trash/snack_bowl - filling_color = "#faa005" - center_of_mass = "x=17;y=11" - nutriment_desc = list("rice" = 2, "apple" = 2, "potato" = 2, "carrot" = 2, "bread" = 2, ) - nutriment_amt = 6 - bitesize = 2 - -/obj/item/reagent_containers/food/snacks/ricepudding - name = "rice pudding" - desc = "Where's the jam?" - icon_state = "rpudding" - trash = /obj/item/trash/snack_bowl - filling_color = "#fffbdb" - center_of_mass = "x=17;y=11" - nutriment_desc = list("rice" = 2) - nutriment_amt = 4 - bitesize = 2 - -/obj/item/reagent_containers/food/snacks/pastatomato - name = "spaghetti & tomato" - desc = "Spaghetti and crushed tomatoes. Just like your abusive father used to make!" - icon_state = "pastatomato" - trash = /obj/item/trash/plate - filling_color = "#de4545" - center_of_mass = "x=16;y=10" - nutriment_desc = list("tomato" = 3, "noodles" = 3) - nutriment_amt = 6 - bitesize = 4 -/obj/item/reagent_containers/food/snacks/pastatomato/Initialize() - .=..() - reagents.add_reagent(/datum/reagent/drink/juice/tomato, 10) - -/obj/item/reagent_containers/food/snacks/nanopasta - name = "nanopasta" - desc = "Nanomachines, son!" - icon_state = "nanopasta" - trash = /obj/item/trash/plate - filling_color = "#535e66" - center_of_mass = "x=16;y=10" - nutriment_amt = 6 - bitesize = 4 -/obj/item/reagent_containers/food/snacks/nanopasta/Initialize() - .=..() - reagents.add_reagent(/datum/reagent/nanites, 10) - -/obj/item/reagent_containers/food/snacks/meatballspagetti - name = "spaghetti & meatballs" - desc = "Now thats a nic'e meatball!" - icon_state = "meatballspagetti" - trash = /obj/item/trash/plate - filling_color = "#de4545" - center_of_mass = "x=16;y=10" - nutriment_desc = list("noodles" = 4) - nutriment_amt = 4 - bitesize = 2 -/obj/item/reagent_containers/food/snacks/meatballspagetti/Initialize() - .=..() - reagents.add_reagent(/datum/reagent/nutriment/protein, 4) - -/obj/item/reagent_containers/food/snacks/spesslaw - name = "spesslaw" - desc = "A lawyers favourite." - icon_state = "spesslaw" - filling_color = "#de4545" - center_of_mass = "x=16;y=10" - nutriment_desc = list("noodles" = 4) - nutriment_amt = 4 - bitesize = 2 -/obj/item/reagent_containers/food/snacks/spesslaw/Initialize() - .=..() - reagents.add_reagent(/datum/reagent/nutriment/protein, 4) - -/obj/item/reagent_containers/food/snacks/carrotfries - name = "carrot fries" - desc = "Tasty fries from fresh carrots." - icon_state = "carrotfries" - trash = /obj/item/trash/plate - filling_color = "#faa005" - center_of_mass = "x=16;y=11" - nutriment_desc = list("carrot" = 3, "salt" = 1) - nutriment_amt = 3 - bitesize = 2 -/obj/item/reagent_containers/food/snacks/carrotfries/Initialize() - .=..() - reagents.add_reagent(/datum/reagent/imidazoline, 3) - -/obj/item/reagent_containers/food/snacks/superbiteburger - name = "super bite burger" - desc = "This is a mountain of a burger. FOOD!" - icon_state = "superbiteburger" - filling_color = "#cca26a" - center_of_mass = "x=16;y=3" - nutriment_desc = list("buns" = 25) - nutriment_amt = 25 - bitesize = 10 -/obj/item/reagent_containers/food/snacks/superbiteburger/Initialize() - .=..() - reagents.add_reagent(/datum/reagent/nutriment/protein, 25) - -/obj/item/reagent_containers/food/snacks/candiedapple - name = "candied apple" - desc = "An apple coated in sugary sweetness." - icon_state = "candiedapple" - filling_color = "#f21873" - center_of_mass = "x=15;y=13" - nutriment_desc = list("apple" = 3, "caramel" = 3, "sweetness" = 2) - nutriment_amt = 3 - bitesize = 3 - -/obj/item/reagent_containers/food/snacks/applepie - name = "apple pie" - desc = "A pie containing sweet sweet love... or apple." - icon_state = "applepie" - filling_color = "#e0edc5" - center_of_mass = "x=16;y=13" - nutriment_desc = list("sweetness" = 2, "apple" = 2, "pie" = 2) - nutriment_amt = 4 - bitesize = 3 - -/obj/item/reagent_containers/food/snacks/cherrypie - name = "cherry pie" - desc = "Taste so good, make a grown man cry." - icon_state = "cherrypie" - filling_color = "#ff525a" - center_of_mass = "x=16;y=11" - nutriment_desc = list("sweetness" = 2, "cherry" = 2, "pie" = 2) - nutriment_amt = 4 - bitesize = 3 - -/obj/item/reagent_containers/food/snacks/twobread - name = "two bread" - desc = "It is very bitter and winy." - icon_state = "twobread" - filling_color = "#dbcc9a" - center_of_mass = "x=15;y=12" - nutriment_desc = list("sourness" = 2, "bread" = 2) - nutriment_amt = 2 - bitesize = 3 - -/obj/item/reagent_containers/food/snacks/threebread - name = "three bread" - desc = "Is such a thing even possible?" - icon_state = "threebread" - filling_color = "#dbcc9a" - center_of_mass = "x=15;y=12" - nutriment_desc = list("sourness" = 2, "bread" = 3) - nutriment_amt = 3 - bitesize = 4 - -/obj/item/reagent_containers/food/snacks/jellysandwich - name = "jelly sandwich" - desc = "You wish you had some peanut butter to go with this..." - icon_state = "jellysandwich" - trash = /obj/item/trash/plate - filling_color = "#9e3a78" - center_of_mass = "x=16;y=8" - nutriment_desc = list("bread" = 2) - nutriment_amt = 2 - bitesize = 3 - -/obj/item/reagent_containers/food/snacks/jellysandwich/slime -/obj/item/reagent_containers/food/snacks/jellysandwich/slime/Initialize() - .=..() - reagents.add_reagent(/datum/reagent/slimejelly, 5) - -/obj/item/reagent_containers/food/snacks/jellysandwich/cherry -/obj/item/reagent_containers/food/snacks/jellysandwich/cherry/Initialize() - .=..() - reagents.add_reagent(/datum/reagent/nutriment/cherryjelly, 5) - -/obj/item/reagent_containers/food/snacks/boiledslimecore - name = "boiled slime core" - desc = "A boiled red thing." - icon_state = "boiledslimecore"//nonexistant? - bitesize = 3 -/obj/item/reagent_containers/food/snacks/boiledslimecore/Initialize() - .=..() - reagents.add_reagent(/datum/reagent/slimejelly, 5) - - -/obj/item/reagent_containers/food/snacks/mint - name = "mint" - desc = "A tasty after-dinner mint. It is only wafer thin." - icon_state = "mint" - filling_color = "#f2f2f2" - center_of_mass = "x=16;y=14" - bitesize = 1 -/obj/item/reagent_containers/food/snacks/mint/Initialize() - .=..() - reagents.add_reagent(/datum/reagent/nutriment/mint, 1) - - -/obj/item/reagent_containers/food/snacks/mushroomsoup - name = "chantrelle soup" - desc = "A delicious and hearty mushroom soup." - icon_state = "mushroomsoup" - trash = /obj/item/trash/snack_bowl - filling_color = "#e386bf" - center_of_mass = "x=17;y=10" - nutriment_desc = list("mushroom" = 8, "milk" = 2) - nutriment_amt = 8 - bitesize = 3 - eat_sound = list('sound/items/eatfood.ogg', 'sound/items/drink.ogg') - -/obj/item/reagent_containers/food/snacks/plumphelmetbiscuit - name = "plump helmet biscuit" - desc = "This is a finely-prepared plump helmet biscuit. The ingredients are exceptionally minced plump helmet, and well-minced dwarven wheat flour." - icon_state = "phelmbiscuit" - filling_color = "#cfb4c4" - center_of_mass = "x=16;y=13" - nutriment_desc = list("mushroom" = 4) - nutriment_amt = 5 - bitesize = 2 -/obj/item/reagent_containers/food/snacks/plumphelmetbiscuit/Initialize() - .=..() - if(prob(10)) - name = "exceptional plump helmet biscuit" - desc = "Microwave is taken by a fey mood! It has cooked an exceptional plump helmet biscuit!" - reagents.add_reagent(/datum/reagent/nutriment, 3) - reagents.add_reagent(/datum/reagent/tricordrazine, 5) - - -/obj/item/reagent_containers/food/snacks/chawanmushi - name = "chawanmushi" - desc = "A legendary egg custard that makes friends out of enemies. Probably too hot for a cat to eat." - icon_state = "chawanmushi" - trash = /obj/item/trash/snack_bowl - filling_color = "#f0f2e4" - center_of_mass = "x=17;y=10" - bitesize = 1 -/obj/item/reagent_containers/food/snacks/chawanmushi/Initialize() - .=..() - reagents.add_reagent(/datum/reagent/nutriment/protein, 5) - - -/obj/item/reagent_containers/food/snacks/beetsoup - name = "beet soup" - desc = "Wait, how do you spell it again..?" - icon_state = "beetsoup" - trash = /obj/item/trash/snack_bowl - filling_color = "#fac9ff" - center_of_mass = "x=15;y=8" - nutriment_desc = list("tomato" = 4, "beet" = 4) - nutriment_amt = 8 - bitesize = 2 - eat_sound = 'sound/items/drink.ogg' - -/obj/item/reagent_containers/food/snacks/beetsoup/Initialize() - .=..() - name = pick(list("borsch","bortsch","borstch","borsh","borshch","borscht")) - - -/obj/item/reagent_containers/food/snacks/tossedsalad - name = "tossed salad" - desc = "A proper salad, basic and simple, with little bits of carrot, tomato and apple intermingled. Vegan!" - icon_state = "herbsalad" - trash = /obj/item/trash/snack_bowl - filling_color = "#76b87f" - center_of_mass = "x=17;y=11" - nutriment_desc = list("salad" = 2, "tomato" = 2, "carrot" = 2, "apple" = 2) - nutriment_amt = 8 - bitesize = 3 - -/obj/item/reagent_containers/food/snacks/validsalad - name = "valid salad" - desc = "It's just a salad of questionable 'herbs' with meatballs and fried potato slices. Nothing suspicious about it." - icon_state = "validsalad" - trash = /obj/item/trash/snack_bowl - filling_color = "#76b87f" - center_of_mass = "x=17;y=11" - nutriment_desc = list("100% real salad") - nutriment_amt = 6 - bitesize = 3 -/obj/item/reagent_containers/food/snacks/validsalad/Initialize() - .=..() - reagents.add_reagent(/datum/reagent/nutriment/protein, 2) - -/obj/item/reagent_containers/food/snacks/appletart - name = "golden apple streusel tart" - desc = "A tasty dessert that won't make it through a metal detector." - icon_state = "gappletart" - trash = /obj/item/trash/plate - filling_color = "#ffff00" - center_of_mass = "x=16;y=18" - nutriment_desc = list("apple" = 8) - nutriment_amt = 8 - bitesize = 3 -/obj/item/reagent_containers/food/snacks/appletart/Initialize() - .=..() - reagents.add_reagent(/datum/reagent/gold, 5) - -/////////////////////////////////////////////////Sliceable//////////////////////////////////////// -// All the food items that can be sliced into smaller bits like meatbread and cheesewheels - -// sliceable is just an organization type path, it doesn't have any additional code or variables tied to it. - -/obj/item/reagent_containers/food/snacks/sliceable - w_class = ITEM_SIZE_NORMAL //whole pizzas and cakes shouldn't fit in a pocket, you can slice them if you want to do that. - -/** - * A food item slice - * - * This path contains some extra code for spawning slices pre-filled with - * reagents. - */ -/obj/item/reagent_containers/food/snacks/slice - name = "slice of... something" - var/whole_path // path for the item from which this slice comes - var/filled = FALSE // should the slice spawn with any reagents - -/** - * Spawn a new slice of food - * - * If the slice's filled is TRUE, this will also fill the slice with the - * appropriate amount of reagents. Note that this is done by spawning a new - * whole item, transferring the reagents and deleting the whole item, which may - * have performance implications. - */ -/obj/item/reagent_containers/food/snacks/slice/Initialize() - .=..() - if(filled) - var/obj/item/reagent_containers/food/snacks/whole = new whole_path() - if(whole && whole.slices_num) - var/reagent_amount = whole.reagents.total_volume/whole.slices_num - whole.reagents.trans_to_obj(src, reagent_amount) - - qdel(whole) - -/obj/item/reagent_containers/food/snacks/sliceable/meatbread - name = "meatbread loaf" - desc = "The culinary base of every self-respecting eloquen/tg/entleman." - icon_state = "meatbread" - slice_path = /obj/item/reagent_containers/food/snacks/slice/meatbread - slices_num = 5 - filling_color = "#ff7575" - center_of_mass = "x=19;y=9" - nutriment_desc = list("bread" = 10) - nutriment_amt = 10 - bitesize = 2 -/obj/item/reagent_containers/food/snacks/sliceable/meatbread/Initialize() - .=..() - reagents.add_reagent(/datum/reagent/nutriment/protein, 20) - -/obj/item/reagent_containers/food/snacks/slice/meatbread - name = "meatbread slice" - desc = "A slice of delicious meatbread." - icon_state = "meatbreadslice" - trash = /obj/item/trash/plate - filling_color = "#ff7575" - bitesize = 2 - center_of_mass = "x=16;y=13" - whole_path = /obj/item/reagent_containers/food/snacks/sliceable/meatbread - -/obj/item/reagent_containers/food/snacks/slice/meatbread/filled - filled = TRUE - -/obj/item/reagent_containers/food/snacks/sliceable/xenomeatbread - name = "xenomeatbread loaf" - desc = "The culinary base of every self-respecting eloquent gentleman. Extra Heretical." - icon_state = "xenomeatbread" - slice_path = /obj/item/reagent_containers/food/snacks/slice/xenomeatbread - slices_num = 5 - filling_color = "#8aff75" - center_of_mass = "x=16;y=9" - nutriment_desc = list("bread" = 10) - nutriment_amt = 10 - bitesize = 2 -/obj/item/reagent_containers/food/snacks/sliceable/xenomeatbread/Initialize() - .=..() - reagents.add_reagent(/datum/reagent/nutriment/protein, 20) - -/obj/item/reagent_containers/food/snacks/slice/xenomeatbread - name = "xenomeatbread slice" - desc = "A slice of delicious meatbread. Extra Heretical." - icon_state = "xenobreadslice" - trash = /obj/item/trash/plate - filling_color = "#8aff75" - bitesize = 2 - center_of_mass = "x=16;y=13" - whole_path = /obj/item/reagent_containers/food/snacks/sliceable/xenomeatbread - -/obj/item/reagent_containers/food/snacks/slice/xenomeatbread/filled - filled = TRUE - -/obj/item/reagent_containers/food/snacks/sliceable/bananabread - name = "banana-nut bread" - desc = "A heavenly and filling treat." - icon_state = "bananabread" - slice_path = /obj/item/reagent_containers/food/snacks/slice/bananabread - slices_num = 5 - filling_color = "#ede5ad" - center_of_mass = "x=16;y=9" - nutriment_desc = list("bread" = 10) - nutriment_amt = 10 - bitesize = 2 -/obj/item/reagent_containers/food/snacks/sliceable/bananabread/Initialize() - .=..() - reagents.add_reagent(/datum/reagent/drink/juice/banana, 20) - -/obj/item/reagent_containers/food/snacks/slice/bananabread - name = "banana-nut bread slice" - desc = "A slice of delicious banana bread." - icon_state = "bananabreadslice" - trash = /obj/item/trash/plate - filling_color = "#ede5ad" - bitesize = 2 - center_of_mass = "x=16;y=8" - whole_path = /obj/item/reagent_containers/food/snacks/sliceable/bananabread - -/obj/item/reagent_containers/food/snacks/slice/bananabread/filled - filled = TRUE - -/obj/item/reagent_containers/food/snacks/sliceable/tofubread - name = "tofubread" - desc = "Like meatbread but for vegetarians. Not guaranteed to give superpowers." - icon_state = "tofubread" - slice_path = /obj/item/reagent_containers/food/snacks/slice/tofubread - slices_num = 5 - filling_color = "#f7ffe0" - center_of_mass = "x=16;y=9" - nutriment_desc = list("tofu" = 10) - nutriment_amt = 10 - bitesize = 2 - -/obj/item/reagent_containers/food/snacks/slice/tofubread - name = "tofubread slice" - desc = "A slice of delicious tofubread." - icon_state = "tofubreadslice" - trash = /obj/item/trash/plate - filling_color = "#f7ffe0" - bitesize = 2 - center_of_mass = "x=16;y=13" - whole_path = /obj/item/reagent_containers/food/snacks/sliceable/tofubread - -/obj/item/reagent_containers/food/snacks/slice/tofubread/filled - filled = TRUE - -/obj/item/reagent_containers/food/snacks/sliceable/carrotcake - name = "carrot cake" - desc = "A favorite desert of a certain wascally wabbit. Not a lie." - icon_state = "carrotcake" - slice_path = /obj/item/reagent_containers/food/snacks/slice/carrotcake - slices_num = 5 - filling_color = "#ffd675" - center_of_mass = "x=16;y=10" - nutriment_desc = list("cake" = 10, "sweetness" = 10, "carrot" = 15) - nutriment_amt = 25 - bitesize = 2 -/obj/item/reagent_containers/food/snacks/sliceable/carrotcake/Initialize() - .=..() - reagents.add_reagent(/datum/reagent/imidazoline, 10) - -/obj/item/reagent_containers/food/snacks/slice/carrotcake - name = "carrot cake slice" - desc = "Carrotty slice of carrot cake, carrots are good for your eyes! Also not a lie." - icon_state = "carrotcake_slice" - trash = /obj/item/trash/plate - filling_color = "#ffd675" - bitesize = 2 - center_of_mass = "x=16;y=14" - whole_path = /obj/item/reagent_containers/food/snacks/sliceable/carrotcake - -/obj/item/reagent_containers/food/snacks/slice/carrotcake/filled - filled = TRUE - -/obj/item/reagent_containers/food/snacks/sliceable/braincake - name = "brain cake" - desc = "A squishy cake-thing." - icon_state = "braincake" - slice_path = /obj/item/reagent_containers/food/snacks/slice/braincake - slices_num = 5 - filling_color = "#e6aedb" - center_of_mass = "x=16;y=10" - nutriment_desc = list("cake" = 10, "sweetness" = 10, "slime" = 15) - nutriment_amt = 5 - bitesize = 2 -/obj/item/reagent_containers/food/snacks/sliceable/braincake/Initialize() - .=..() - reagents.add_reagent(/datum/reagent/nutriment/protein, 25) - reagents.add_reagent(/datum/reagent/alkysine, 10) - -/obj/item/reagent_containers/food/snacks/slice/braincake - name = "brain cake slice" - desc = "Lemme tell you something about prions. THEY'RE DELICIOUS." - icon_state = "braincakeslice" - trash = /obj/item/trash/plate - filling_color = "#e6aedb" - bitesize = 2 - center_of_mass = "x=16;y=12" - whole_path = /obj/item/reagent_containers/food/snacks/sliceable/braincake - -/obj/item/reagent_containers/food/snacks/slice/braincake/filled - filled = TRUE - -/obj/item/reagent_containers/food/snacks/sliceable/cheesecake - name = "cheese cake" - desc = "DANGEROUSLY cheesy." - icon_state = "cheesecake" - slice_path = /obj/item/reagent_containers/food/snacks/slice/cheesecake - slices_num = 5 - filling_color = "#faf7af" - center_of_mass = "x=16;y=10" - nutriment_desc = list("cake" = 10, "cream" = 10, "cheese" = 15) - nutriment_amt = 10 - bitesize = 2 -/obj/item/reagent_containers/food/snacks/sliceable/cheesecake/Initialize() - .=..() - reagents.add_reagent(/datum/reagent/nutriment/protein, 15) - -/obj/item/reagent_containers/food/snacks/slice/cheesecake - name = "cheese cake slice" - desc = "Slice of pure cheestisfaction." - icon_state = "cheesecake_slice" - trash = /obj/item/trash/plate - filling_color = "#faf7af" - bitesize = 2 - center_of_mass = "x=16;y=14" - whole_path = /obj/item/reagent_containers/food/snacks/sliceable/cheesecake - -/obj/item/reagent_containers/food/snacks/slice/cheesecake/filled - filled = TRUE - -/obj/item/reagent_containers/food/snacks/sliceable/plaincake - name = "vanilla cake" - desc = "A plain cake, not a lie." - icon_state = "plaincake" - slice_path = /obj/item/reagent_containers/food/snacks/slice/plaincake - slices_num = 5 - filling_color = "#f7edd5" - center_of_mass = "x=16;y=10" - nutriment_desc = list("cake" = 10, "sweetness" = 10, "vanilla" = 15) - nutriment_amt = 20 - -/obj/item/reagent_containers/food/snacks/slice/plaincake - name = "vanilla cake slice" - desc = "Just a slice of cake, it is enough for everyone." - icon_state = "plaincake_slice" - trash = /obj/item/trash/plate - filling_color = "#f7edd5" - bitesize = 2 - center_of_mass = "x=16;y=14" - whole_path = /obj/item/reagent_containers/food/snacks/sliceable/plaincake - -/obj/item/reagent_containers/food/snacks/slice/plaincake/filled - filled = TRUE - -/obj/item/reagent_containers/food/snacks/sliceable/orangecake - name = "orange cake" - desc = "A cake with added orange." - icon_state = "orangecake" - slice_path = /obj/item/reagent_containers/food/snacks/slice/orangecake - slices_num = 5 - filling_color = "#fada8e" - center_of_mass = "x=16;y=10" - nutriment_desc = list("cake" = 10, "sweetness" = 10, "orange" = 15) - nutriment_amt = 20 - -/obj/item/reagent_containers/food/snacks/slice/orangecake - name = "orange cake slice" - desc = "Just a slice of cake, it is enough for everyone." - icon_state = "orangecake_slice" - trash = /obj/item/trash/plate - filling_color = "#fada8e" - bitesize = 2 - center_of_mass = "x=16;y=14" - whole_path = /obj/item/reagent_containers/food/snacks/sliceable/orangecake - -/obj/item/reagent_containers/food/snacks/slice/orangecake/filled - filled = TRUE - -/obj/item/reagent_containers/food/snacks/sliceable/limecake - name = "lime cake" - desc = "A cake with added lime." - icon_state = "limecake" - slice_path = /obj/item/reagent_containers/food/snacks/slice/limecake - slices_num = 5 - filling_color = "#cbfa8e" - center_of_mass = "x=16;y=10" - nutriment_desc = list("cake" = 10, "sweetness" = 10, "lime" = 15) - nutriment_amt = 20 - -/obj/item/reagent_containers/food/snacks/slice/limecake - name = "lime cake slice" - desc = "Just a slice of cake, it is enough for everyone." - icon_state = "limecake_slice" - trash = /obj/item/trash/plate - filling_color = "#cbfa8e" - bitesize = 2 - center_of_mass = "x=16;y=14" - whole_path = /obj/item/reagent_containers/food/snacks/sliceable/limecake - -/obj/item/reagent_containers/food/snacks/slice/limecake/filled - filled = TRUE - -/obj/item/reagent_containers/food/snacks/sliceable/lemoncake - name = "lemon cake" - desc = "A cake with added lemon." - icon_state = "lemoncake" - slice_path = /obj/item/reagent_containers/food/snacks/slice/lemoncake - slices_num = 5 - filling_color = "#fafa8e" - center_of_mass = "x=16;y=10" - nutriment_desc = list("cake" = 10, "sweetness" = 10, "lemon" = 15) - nutriment_amt = 20 - -/obj/item/reagent_containers/food/snacks/slice/lemoncake - name = "lemon cake slice" - desc = "Just a slice of cake, it is enough for everyone." - icon_state = "lemoncake_slice" - trash = /obj/item/trash/plate - filling_color = "#fafa8e" - bitesize = 2 - center_of_mass = "x=16;y=14" - whole_path = /obj/item/reagent_containers/food/snacks/sliceable/lemoncake - -/obj/item/reagent_containers/food/snacks/slice/lemoncake/filled - filled = TRUE - -/obj/item/reagent_containers/food/snacks/sliceable/chocolatecake - name = "chocolate cake" - desc = "A cake with added chocolate." - icon_state = "chocolatecake" - slice_path = /obj/item/reagent_containers/food/snacks/slice/chocolatecake - slices_num = 5 - filling_color = "#805930" - center_of_mass = "x=16;y=10" - nutriment_desc = list("cake" = 10, "sweetness" = 10, "chocolate" = 15) - nutriment_amt = 20 - -/obj/item/reagent_containers/food/snacks/slice/chocolatecake - name = "chocolate cake slice" - desc = "Just a slice of cake, it is enough for everyone." - icon_state = "chocolatecake_slice" - trash = /obj/item/trash/plate - filling_color = "#805930" - bitesize = 2 - center_of_mass = "x=16;y=14" - whole_path = /obj/item/reagent_containers/food/snacks/sliceable/chocolatecake - -/obj/item/reagent_containers/food/snacks/slice/chocolatecake/filled - filled = TRUE - -/obj/item/reagent_containers/food/snacks/sliceable/cheesewheel - name = "cheese wheel" - desc = "A big wheel of delcious cheddar." - icon_state = "cheesewheel" - slice_path = /obj/item/reagent_containers/food/snacks/cheesewedge - slices_num = 5 - filling_color = "#fff700" - center_of_mass = "x=16;y=10" - nutriment_desc = list("cheese" = 10) - nutriment_amt = 10 - bitesize = 2 -/obj/item/reagent_containers/food/snacks/sliceable/cheesewheel/Initialize() - .=..() - reagents.add_reagent(/datum/reagent/nutriment/protein, 10) - -/obj/item/reagent_containers/food/snacks/cheesewedge - name = "cheese wedge" - desc = "A wedge of delicious cheddar. The cheese wheel it was cut from can't have gone far." - icon_state = "cheesewedge" - filling_color = "#fff700" - bitesize = 2 - center_of_mass = "x=16;y=10" - -/obj/item/reagent_containers/food/snacks/sliceable/birthdaycake - name = "birthday cake" - desc = "Happy birthday!" - icon_state = "birthdaycake" - slice_path = /obj/item/reagent_containers/food/snacks/slice/birthdaycake - slices_num = 5 - filling_color = "#ffd6d6" - center_of_mass = "x=16;y=10" - nutriment_desc = list("cake" = 10, "sweetness" = 10) - nutriment_amt = 20 - bitesize = 3 -/obj/item/reagent_containers/food/snacks/sliceable/birthdaycake/Initialize() - .=..() - reagents.add_reagent(/datum/reagent/nutriment/sprinkles, 10) - - -/obj/item/reagent_containers/food/snacks/slice/birthdaycake - name = "birthday cake slice" - desc = "A slice of your birthday." - icon_state = "birthdaycakeslice" - trash = /obj/item/trash/plate - filling_color = "#ffd6d6" - bitesize = 2 - center_of_mass = "x=16;y=14" - whole_path = /obj/item/reagent_containers/food/snacks/sliceable/birthdaycake - -/obj/item/reagent_containers/food/snacks/slice/birthdaycake/filled - filled = TRUE - -/obj/item/reagent_containers/food/snacks/sliceable/bread - name = "bread" - desc = "Some plain old Earthen bread." - icon_state = "bread" - slice_path = /obj/item/reagent_containers/food/snacks/slice/bread - slices_num = 5 - filling_color = "#ffe396" - center_of_mass = "x=16;y=9" - nutriment_desc = list("bread" = 6) - nutriment_amt = 6 - bitesize = 2 - -/obj/item/reagent_containers/food/snacks/slice/bread - name = "bread slice" - desc = "A slice of home." - icon_state = "breadslice" - trash = /obj/item/trash/plate - filling_color = "#d27332" - bitesize = 2 - center_of_mass = "x=16;y=4" - whole_path = /obj/item/reagent_containers/food/snacks/sliceable/bread - -/obj/item/reagent_containers/food/snacks/slice/bread/filled - filled = TRUE - - -/obj/item/reagent_containers/food/snacks/sliceable/creamcheesebread - name = "cream cheese bread" - desc = "Yum yum yum!" - icon_state = "creamcheesebread" - slice_path = /obj/item/reagent_containers/food/snacks/slice/creamcheesebread - slices_num = 5 - filling_color = "#fff896" - center_of_mass = "x=16;y=9" - nutriment_desc = list("bread" = 6, "cream" = 3, "cheese" = 3) - nutriment_amt = 5 - bitesize = 2 -/obj/item/reagent_containers/food/snacks/sliceable/creamcheesebread/Initialize() - .=..() - reagents.add_reagent(/datum/reagent/nutriment/protein, 15) - -/obj/item/reagent_containers/food/snacks/slice/creamcheesebread - name = "cream cheese bread slice" - desc = "A slice of yum!" - icon_state = "creamcheesebreadslice" - trash = /obj/item/trash/plate - filling_color = "#fff896" - bitesize = 2 - center_of_mass = "x=16;y=13" - whole_path = /obj/item/reagent_containers/food/snacks/sliceable/creamcheesebread - -/obj/item/reagent_containers/food/snacks/slice/creamcheesebread/filled - filled = TRUE - -/obj/item/reagent_containers/food/snacks/watermelonslice - name = "watermelon slice" - desc = "A slice of watery goodness." - icon_state = "watermelonslice" - filling_color = "#ff3867" - bitesize = 2 - center_of_mass = "x=16;y=10" - -/obj/item/reagent_containers/food/snacks/sliceable/applecake - name = "apple cake" - desc = "A cake centred with apples." - icon_state = "applecake" - slice_path = /obj/item/reagent_containers/food/snacks/slice/applecake - slices_num = 5 - filling_color = "#ebf5b8" - center_of_mass = "x=16;y=10" - nutriment_desc = list("cake" = 10, "sweetness" = 10, "apple" = 15) - nutriment_amt = 15 - -/obj/item/reagent_containers/food/snacks/slice/applecake - name = "apple cake slice" - desc = "A slice of heavenly cake." - icon_state = "applecakeslice" - trash = /obj/item/trash/plate - filling_color = "#ebf5b8" - bitesize = 2 - center_of_mass = "x=16;y=14" - whole_path = /obj/item/reagent_containers/food/snacks/sliceable/applecake - -/obj/item/reagent_containers/food/snacks/slice/applecake/filled - filled = TRUE - -/obj/item/reagent_containers/food/snacks/sliceable/pumpkinpie - name = "pumpkin pie" - desc = "A delicious treat for the autumn months." - icon_state = "pumpkinpie" - slice_path = /obj/item/reagent_containers/food/snacks/slice/pumpkinpie - slices_num = 5 - filling_color = "#f5b951" - center_of_mass = "x=16;y=10" - nutriment_desc = list("pie" = 5, "cream" = 5, "pumpkin" = 5) - nutriment_amt = 15 - -/obj/item/reagent_containers/food/snacks/slice/pumpkinpie - name = "pumpkin pie slice" - desc = "A slice of pumpkin pie, with whipped cream on top. Perfection." - icon_state = "pumpkinpieslice" - trash = /obj/item/trash/plate - filling_color = "#f5b951" - bitesize = 2 - center_of_mass = "x=16;y=12" - whole_path = /obj/item/reagent_containers/food/snacks/sliceable/pumpkinpie - -/obj/item/reagent_containers/food/snacks/slice/pumpkinpie/filled - filled = TRUE - -/obj/item/reagent_containers/food/snacks/cracker - name = "cracker" - desc = "It's a salted cracker." - icon_state = "cracker" - filling_color = "#f5deb8" - center_of_mass = "x=17;y=6" - nutriment_desc = list("salt" = 1, "cracker" = 2) - w_class = ITEM_SIZE_TINY - nutriment_amt = 1 - -/////////////////////////////////////////////////PIZZA//////////////////////////////////////// - -/obj/item/reagent_containers/food/snacks/sliceable/pizza - slices_num = 6 - filling_color = "#baa14c" - -/obj/item/reagent_containers/food/snacks/sliceable/pizza/margherita - name = "margherita" - desc = "The golden standard of pizzas." - icon_state = "pizzamargherita" - slice_path = /obj/item/reagent_containers/food/snacks/slice/margherita - slices_num = 6 - center_of_mass = "x=16;y=11" - nutriment_desc = list("pizza crust" = 10, "tomato" = 10, "cheese" = 15) - nutriment_amt = 35 - bitesize = 2 -/obj/item/reagent_containers/food/snacks/sliceable/pizza/margherita/Initialize() - .=..() - reagents.add_reagent(/datum/reagent/nutriment/protein, 5) - reagents.add_reagent(/datum/reagent/drink/juice/tomato, 6) - -/obj/item/reagent_containers/food/snacks/slice/margherita - name = "margherita slice" - desc = "A slice of the classic pizza." - icon_state = "pizzamargheritaslice" - filling_color = "#baa14c" - bitesize = 2 - center_of_mass = "x=18;y=13" - whole_path = /obj/item/reagent_containers/food/snacks/sliceable/pizza/margherita - -/obj/item/reagent_containers/food/snacks/slice/margherita/filled - filled = TRUE - -/obj/item/reagent_containers/food/snacks/sliceable/pizza/meatpizza - name = "meatpizza" - desc = "A pizza with meat topping." - icon_state = "meatpizza" - slice_path = /obj/item/reagent_containers/food/snacks/slice/meatpizza - slices_num = 6 - center_of_mass = "x=16;y=11" - nutriment_desc = list("pizza crust" = 10, "tomato" = 10, "cheese" = 15) - nutriment_amt = 10 - bitesize = 2 -/obj/item/reagent_containers/food/snacks/sliceable/pizza/meatpizza/Initialize() - .=..() - reagents.add_reagent(/datum/reagent/nutriment/protein, 34) - reagents.add_reagent(/datum/reagent/drink/juice/tomato, 6) - -/obj/item/reagent_containers/food/snacks/slice/meatpizza - name = "meatpizza slice" - desc = "A slice of a meaty pizza." - icon_state = "meatpizzaslice" - filling_color = "#baa14c" - bitesize = 2 - center_of_mass = "x=18;y=13" - whole_path = /obj/item/reagent_containers/food/snacks/sliceable/pizza/meatpizza - -/obj/item/reagent_containers/food/snacks/slice/meatpizza/filled - filled = TRUE - -/obj/item/reagent_containers/food/snacks/sliceable/pizza/mushroompizza - name = "mushroompizza" - desc = "Very special pizza." - icon_state = "mushroompizza" - slice_path = /obj/item/reagent_containers/food/snacks/slice/mushroompizza - slices_num = 6 - center_of_mass = "x=16;y=11" - nutriment_desc = list("pizza crust" = 10, "tomato" = 10, "cheese" = 5, "mushroom" = 10) - nutriment_amt = 35 - bitesize = 2 -/obj/item/reagent_containers/food/snacks/sliceable/pizza/mushroompizza/Initialize() - .=..() - reagents.add_reagent(/datum/reagent/nutriment/protein, 5) - -/obj/item/reagent_containers/food/snacks/slice/mushroompizza - name = "mushroompizza slice" - desc = "Maybe it is the last slice of pizza in your life." - icon_state = "mushroompizzaslice" - filling_color = "#baa14c" - bitesize = 2 - center_of_mass = "x=18;y=13" - whole_path = /obj/item/reagent_containers/food/snacks/sliceable/pizza/mushroompizza - -/obj/item/reagent_containers/food/snacks/slice/mushroompizza/filled - filled = TRUE - -/obj/item/reagent_containers/food/snacks/sliceable/pizza/vegetablepizza - name = "vegetable pizza" - desc = "No one of Tomato Sapiens were harmed during making this pizza." - icon_state = "vegetablepizza" - slice_path = /obj/item/reagent_containers/food/snacks/slice/vegetablepizza - slices_num = 6 - center_of_mass = "x=16;y=11" - nutriment_desc = list("pizza crust" = 10, "tomato" = 10, "cheese" = 5, "eggplant" = 5, "carrot" = 5, "corn" = 5) - nutriment_amt = 25 - bitesize = 2 -/obj/item/reagent_containers/food/snacks/sliceable/pizza/vegetablepizza/Initialize() - .=..() - reagents.add_reagent(/datum/reagent/nutriment/protein, 5) - reagents.add_reagent(/datum/reagent/drink/juice/tomato, 6) - reagents.add_reagent(/datum/reagent/imidazoline, 12) - -/obj/item/reagent_containers/food/snacks/slice/vegetablepizza - name = "vegetable pizza slice" - desc = "A slice of the most green pizza of all pizzas not containing green ingredients." - icon_state = "vegetablepizzaslice" - filling_color = "#baa14c" - bitesize = 2 - center_of_mass = "x=18;y=13" - whole_path = /obj/item/reagent_containers/food/snacks/sliceable/pizza/vegetablepizza - -/obj/item/reagent_containers/food/snacks/slice/vegetablepizza/filled - filled = TRUE - -/obj/item/pizzabox - name = "pizza box" - desc = "A box suited for pizzas." - icon = 'icons/obj/food.dmi' - icon_state = "pizzabox1" - - var/open = 0 // Is the box open? - var/ismessy = 0 // Fancy mess on the lid - var/obj/item/reagent_containers/food/snacks/sliceable/pizza/pizza // content pizza - var/list/boxes = list()// If the boxes are stacked, they come here - var/boxtag = "" - -/obj/item/pizzabox/on_update_icon() - - overlays.Cut() - - // Set appropriate description - if( open && pizza ) - desc = "A box suited for pizzas. It appears to have a [pizza.name] inside." - else if( boxes.len > 0 ) - desc = "A pile of boxes suited for pizzas. There appears to be [boxes.len + 1] boxes in the pile." - - var/obj/item/pizzabox/topbox = boxes[boxes.len] - var/toptag = topbox.boxtag - if( toptag != "" ) - desc = "[desc] The box on top has a tag, it reads: '[toptag]'." - else - desc = "A box suited for pizzas." - - if( boxtag != "" ) - desc = "[desc] The box has a tag, it reads: '[boxtag]'." - - // Icon states and overlays - if( open ) - if( ismessy ) - icon_state = "pizzabox_messy" - else - icon_state = "pizzabox_open" - - if( pizza ) - var/image/pizzaimg = image("food.dmi", icon_state = pizza.icon_state) - pizzaimg.pixel_y = -3 - overlays += pizzaimg - - return - else - // Stupid code because byondcode sucks - var/doimgtag = 0 - if( boxes.len > 0 ) - var/obj/item/pizzabox/topbox = boxes[boxes.len] - if( topbox.boxtag != "" ) - doimgtag = 1 - else - if( boxtag != "" ) - doimgtag = 1 - - if( doimgtag ) - var/image/tagimg = image("food.dmi", icon_state = "pizzabox_tag") - tagimg.pixel_y = boxes.len * 3 - overlays += tagimg - - icon_state = "pizzabox[boxes.len+1]" - -/obj/item/pizzabox/attack_hand( mob/user as mob ) - - if( open && pizza ) - user.put_in_hands( pizza ) - - to_chat(user, "You take \the [src.pizza] out of \the [src].") - src.pizza = null - update_icon() - return - - if( boxes.len > 0 ) - if( user.get_inactive_hand() != src ) - ..() - return - - var/obj/item/pizzabox/box = boxes[boxes.len] - boxes -= box - - user.put_in_hands( box ) - to_chat(user, "You remove the topmost [src] from your hand.") - box.update_icon() - update_icon() - return - ..() - -/obj/item/pizzabox/attack_self( mob/user as mob ) - - if( boxes.len > 0 ) - return - - open = !open - - if( open && pizza ) - ismessy = 1 - - update_icon() - -/obj/item/pizzabox/attackby( obj/item/I as obj, mob/user as mob ) - if( istype(I, /obj/item/pizzabox) ) - var/obj/item/pizzabox/box = I - - if( !box.open && !src.open ) - // make a list of all boxes to be added - var/list/boxestoadd = list() - boxestoadd += box - for(var/obj/item/pizzabox/i in box.boxes) - boxestoadd += i - - if( (boxes.len+1) + boxestoadd.len <= 5 ) - if(!user.unEquip(box, src)) - return - box.boxes = list()// clear the box boxes so we don't have boxes inside boxes. - Xzibit - src.boxes.Add( boxestoadd ) - - box.update_icon() - update_icon() - - to_chat(user, "You put \the [box] ontop of \the [src]!") - else - to_chat(user, "The stack is too high!") - else - to_chat(user, "Close \the [box] first!") - - return - - if( istype(I, /obj/item/reagent_containers/food/snacks/sliceable/pizza) ) - - if( src.open ) - if(!user.unEquip(I, src)) - return - src.pizza = I - - update_icon() - - to_chat(user, "You put \the [I] in \the [src]!") - else - to_chat(user, "You try to push \the [I] through the lid but it doesn't work!") - return - - if( istype(I, /obj/item/pen) ) - - if( src.open ) - return - - var/t = sanitize(input("Enter what you want to add to the tag:", "Write", null, null) as text, 30) - - var/obj/item/pizzabox/boxtotagto = src - if( boxes.len > 0 ) - boxtotagto = boxes[boxes.len] - - boxtotagto.boxtag = copytext_char("[boxtotagto.boxtag][t]", 1, 30) - - update_icon() - return - ..() - -/obj/item/pizzabox/margherita/Initialize() - . = ..() - pizza = new /obj/item/reagent_containers/food/snacks/sliceable/pizza/margherita(src) - boxtag = "Margherita Deluxe" - -/obj/item/pizzabox/vegetable/Initialize() - . = ..() - pizza = new /obj/item/reagent_containers/food/snacks/sliceable/pizza/vegetablepizza(src) - boxtag = "Gourmet Vegatable" - -/obj/item/pizzabox/mushroom/Initialize() - . = ..() - pizza = new /obj/item/reagent_containers/food/snacks/sliceable/pizza/mushroompizza(src) - boxtag = "Mushroom Special" - -/obj/item/pizzabox/meat/Initialize() - . = ..() - pizza = new /obj/item/reagent_containers/food/snacks/sliceable/pizza/meatpizza(src) - boxtag = "Meatlover's Supreme" - -/obj/item/reagent_containers/food/snacks/dionaroast - name = "roast diona" - desc = "It's like an enormous, leathery carrot. With an eye." - icon_state = "dionaroast" - trash = /obj/item/trash/plate - filling_color = "#75754b" - center_of_mass = "x=16;y=7" - nutriment_desc = list("a chorus of flavor" = 6) - nutriment_amt = 6 - bitesize = 2 -/obj/item/reagent_containers/food/snacks/dionaroast/Initialize() - .=..() - reagents.add_reagent(/datum/reagent/radium, 2) - -/////////////////////////////////////////// -// new old food stuff from bs12 -/////////////////////////////////////////// - -/obj/item/reagent_containers/food/snacks/dough - name = "dough" - desc = "A piece of dough." - icon = 'icons/obj/food_ingredients.dmi' - icon_state = "dough" - filling_color = "#d6bca4" - bitesize = 2 - center_of_mass = "x=16;y=13" - nutriment_desc = list("dough" = 3) - nutriment_amt = 3 - -//obj/item/reagent_containers/food/snacks/dough/Initialize() -// .=..() -// reagents.add_reagent(/datum/reagent/nutriment/protein, 1) - -// Dough + rolling pin = flat dough -/obj/item/reagent_containers/food/snacks/dough/attackby(obj/item/W as obj, mob/user as mob) - if(istype(W,/obj/item/material/kitchen/rollingpin)) - new /obj/item/reagent_containers/food/snacks/sliceable/flatdough(src) - to_chat(user, "You flatten the dough.") - qdel(src) - -// slicable into 3x doughslices -/obj/item/reagent_containers/food/snacks/sliceable/flatdough - name = "flat dough" - desc = "A flattened dough." - icon = 'icons/obj/food_ingredients.dmi' - icon_state = "flat dough" - filling_color = "#d6bca4" - slice_path = /obj/item/reagent_containers/food/snacks/doughslice - slices_num = 3 - center_of_mass = "x=16;y=16" - -/obj/item/reagent_containers/food/snacks/sliceable/flatdough/Initialize() - .=..() - reagents.add_reagent(/datum/reagent/nutriment/protein, 1) - reagents.add_reagent(/datum/reagent/nutriment, 3) - -/obj/item/reagent_containers/food/snacks/doughslice - name = "dough slice" - desc = "A building block of an impressive dish." - icon = 'icons/obj/food_ingredients.dmi' - icon_state = "doughslice" - filling_color = "#d6bca4" - slice_path = /obj/item/reagent_containers/food/snacks/spagetti - slices_num = 1 - bitesize = 2 - center_of_mass = "x=17;y=19" - nutriment_desc = list("dough" = 1) - nutriment_amt = 1 - -/obj/item/reagent_containers/food/snacks/bun - name = "bun" - desc = "A base for any self-respecting burger." - icon = 'icons/obj/food_ingredients.dmi' - icon_state = "bun" - filling_color = "#b8824c" - bitesize = 2 - center_of_mass = "x=16;y=12" - nutriment_desc = list("bun" = 4) - nutriment_amt = 4 - -//Items you can craft together. Like bomb making, but with food and less screwdrivers. - -/obj/item/reagent_containers/food/snacks/bun/attackby(obj/item/W as obj, mob/user as mob) - // bun + meatball = burger - if(istype(W,/obj/item/reagent_containers/food/snacks/meatball)) - new /obj/item/reagent_containers/food/snacks/plainburger(src) - to_chat(user, "You make a burger.") - qdel(W) - qdel(src) - - // bun + cutlet = hamburger - else if(istype(W,/obj/item/reagent_containers/food/snacks/cutlet)) - new /obj/item/reagent_containers/food/snacks/hamburger(src) - to_chat(user, "You make a hamburger.") - qdel(W) - qdel(src) - - // bun + sausage = hotdog - else if(istype(W,/obj/item/reagent_containers/food/snacks/sausage)) - new /obj/item/reagent_containers/food/snacks/hotdog(src) - to_chat(user, "You make a hotdog.") - qdel(W) - qdel(src) - -// burger + cheese wedge = cheeseburger -/obj/item/reagent_containers/food/snacks/plainburger/attackby(obj/item/reagent_containers/food/snacks/cheesewedge/W as obj, mob/user as mob) - if(istype(W))// && !istype(src,/obj/item/reagent_containers/food/snacks/cheesewedge)) - new /obj/item/reagent_containers/food/snacks/cheeseburger(src) - to_chat(user, "You make a cheeseburger.") - qdel(W) - qdel(src) - return - else - ..() - -// Hamburger + cheese wedge = cheeseburger -/obj/item/reagent_containers/food/snacks/hamburger/attackby(obj/item/reagent_containers/food/snacks/cheesewedge/W as obj, mob/user as mob) - if(istype(W))// && !istype(src,/obj/item/reagent_containers/food/snacks/cheesewedge)) - new /obj/item/reagent_containers/food/snacks/cheeseburger(src) - to_chat(user, "You make a cheeseburger.") - qdel(W) - qdel(src) - return - else - ..() - -// Human burger + cheese wedge = cheeseburger -/obj/item/reagent_containers/food/snacks/human/burger/attackby(obj/item/reagent_containers/food/snacks/cheesewedge/W as obj, mob/user as mob) - if(istype(W)) - new /obj/item/reagent_containers/food/snacks/cheeseburger(src) - to_chat(user, "You make a cheeseburger.") - qdel(W) - qdel(src) - return - else - ..() - -// Spaghetti + meatball = spaghetti with meatball(s) -/obj/item/reagent_containers/food/snacks/boiledspagetti/attackby(obj/item/reagent_containers/food/snacks/meatball/W as obj, mob/user as mob) - if(istype(W)) - new /obj/item/reagent_containers/food/snacks/meatballspagetti(src) - to_chat(user, "You add some meatballs to the spaghetti.") - qdel(W) - qdel(src) - return - else - ..() - -// Spaghetti with meatballs + meatball = spaghetti with more meatball(s) -/obj/item/reagent_containers/food/snacks/meatballspagetti/attackby(obj/item/reagent_containers/food/snacks/meatball/W as obj, mob/user as mob) - if(istype(W)) - new /obj/item/reagent_containers/food/snacks/spesslaw(src) - to_chat(user, "You add some more meatballs to the spaghetti.") - qdel(W) - qdel(src) - return - else - ..() - -// Spaghetti + tomato = tomato'd spaghetti //commented out because I don't know how to define a tomato. -//obj/item/reagent_containers/food/snacks/spagetti/attackby(/obj/item/reagent_containers/food/snacks/grown/tomato/W as obj, mob/user as mob) -// if(istype(W)) -// new /obj/item/reagent_containers/food/snacks/pastatomato(src) -// to_chat(user, "You add some more meatballs to the spaghetti.") -// qdel(W) -// qdel(src) -// return -// else -// ..() - -/obj/item/reagent_containers/food/snacks/bunbun - name = "bun bun" - desc = "A small bread monkey fashioned from two burger buns." - icon_state = "bunbun" - filling_color = "#b8824c" - bitesize = 2 - center_of_mass = list("x"=16, "y"=8) - nutriment_desc = list("bun" = 8) - nutriment_amt = 8 - -/obj/item/reagent_containers/food/snacks/taco - name = "taco" - desc = "Take a bite!" - icon_state = "taco" - filling_color = "#d63c3c" - bitesize = 3 - center_of_mass = "x=21;y=12" - nutriment_desc = list("cheese" = 2,"taco shell" = 2) - nutriment_amt = 4 -/obj/item/reagent_containers/food/snacks/taco/Initialize() - .=..() - reagents.add_reagent(/datum/reagent/nutriment/protein, 3) - -/obj/item/reagent_containers/food/snacks/rawcutlet - name = "raw cutlet" - desc = "A thin piece of raw meat." - icon = 'icons/obj/food_ingredients.dmi' - icon_state = "rawcutlet" - filling_color = "#fb8258" - slice_path = /obj/item/reagent_containers/food/snacks/rawbacon - slices_num = 2 - bitesize = 1 - center_of_mass = "x=17;y=20" - -/obj/item/reagent_containers/food/snacks/rawcutlet/Initialize() - .=..() - reagents.add_reagent(/datum/reagent/nutriment/protein, 1) - -/obj/item/reagent_containers/food/snacks/cutlet - name = "cutlet" - desc = "A tasty meat slice." - icon = 'icons/obj/food_ingredients.dmi' - icon_state = "cutlet" - filling_color = "#d75608" - bitesize = 2 - center_of_mass = "x=17;y=20" - -/obj/item/reagent_containers/food/snacks/cutlet/Initialize() - .=..() - reagents.add_reagent(/datum/reagent/nutriment/protein, 2) - -/obj/item/reagent_containers/food/snacks/rawbacon - name = "raw bacon" - desc = "A raw, fatty strip of meat." - icon_state = "rawbacon" - filling_color = "#ffa7a3" - bitesize = 1 - center_of_mass = "x=16;y=15" - -/obj/item/reagent_containers/food/snacks/rawbacon/Initialize() - .=..() - reagents.add_reagent(/datum/reagent/nutriment/protein, 1) - -/obj/item/reagent_containers/food/snacks/bacon - name = "bacon" - desc = "A delicious, crispy strip of meat." - icon_state = "bacon" - filling_color = "#cb5d27" - bitesize = 2 - center_of_mass = "x=16;y=15" - -/obj/item/reagent_containers/food/snacks/bacon/Initialize() - .=..() - reagents.add_reagent(/datum/reagent/nutriment/protein, 1) - -/obj/item/reagent_containers/food/snacks/rawmeatball - name = "raw meatball" - desc = "A raw meatball." - icon = 'icons/obj/food_ingredients.dmi' - icon_state = "rawmeatball" - filling_color = "#ce3711" - bitesize = 2 - center_of_mass = "x=16;y=15" - -/obj/item/reagent_containers/food/snacks/rawmeatball/Initialize() - .=..() - reagents.add_reagent(/datum/reagent/nutriment/protein, 2) - -/obj/item/reagent_containers/food/snacks/hotdog - name = "hotdog" - desc = "Unrelated to dogs, maybe." - icon_state = "hotdog" - filling_color = "#ca5d16" - bitesize = 2 - center_of_mass = "x=16;y=17" - -/obj/item/reagent_containers/food/snacks/hotdog/Initialize() - .=..() - reagents.add_reagent(/datum/reagent/nutriment/protein, 6) - -/obj/item/reagent_containers/food/snacks/classichotdog - name = "classic hotdog" - desc = "Going literal." - icon_state = "hotcorgi" - filling_color = "#ca5d16" - bitesize = 6 - center_of_mass = "x=16;y=17" - -/obj/item/reagent_containers/food/snacks/classichotdog/Initialize() - .=..() - reagents.add_reagent(/datum/reagent/nutriment/protein, 16) - -/obj/item/reagent_containers/food/snacks/flatbread - name = "flatbread" - desc = "Bland but filling." - icon = 'icons/obj/food_ingredients.dmi' - icon_state = "flatbread" - filling_color = "#c17f3e" - bitesize = 2 - center_of_mass = "x=16;y=16" - nutriment_desc = list("bread" = 3) - nutriment_amt = 3 - -// potato + knife = raw sticks -/obj/item/reagent_containers/food/snacks/grown/potato/attackby(obj/item/W as obj, mob/user as mob) - if(istype(W,/obj/item/material/knife)) - new /obj/item/reagent_containers/food/snacks/rawsticks(src) - to_chat(user, "You cut the potato.") - qdel(src) - else - ..() - -/obj/item/reagent_containers/food/snacks/rawsticks - name = "raw potato sticks" - desc = "Raw fries, not very tasty." - icon = 'icons/obj/food_ingredients.dmi' - icon_state = "rawsticks" - filling_color = "#e4bf7e" - bitesize = 2 - center_of_mass = "x=16;y=12" - nutriment_desc = list("raw potato" = 3) - nutriment_amt = 3 - -//Canned Foods - crack open, eat. - -/obj/item/reagent_containers/food/snacks/canned - name = "void can" - icon = 'icons/obj/food_canned.dmi' - atom_flags = 0 - var/sealed = TRUE - -/obj/item/reagent_containers/food/snacks/canned/Initialize() - . = ..() - if(!sealed) - unseal() - -/obj/item/reagent_containers/food/snacks/canned/examine(mob/user) - . = ..() - to_chat(user, "It is [sealed ? "" : "un"]sealed.") - -/obj/item/reagent_containers/food/snacks/canned/proc/unseal() - atom_flags |= ATOM_FLAG_OPEN_CONTAINER - sealed = FALSE - update_icon() - -/obj/item/reagent_containers/food/snacks/canned/attack_self(var/mob/user) - if(sealed) - playsound(loc,'sound/effects/canopen.ogg', rand(10,50), 1) - to_chat(user, "You unseal \the [src] with a crack of metal.") - unseal() - -/obj/item/reagent_containers/food/snacks/canned/on_update_icon() - if(!sealed) - icon_state = "[initial(icon_state)]-open" - -//Just a short line of Canned Consumables, great for treasure in faraway abandoned outposts - -/obj/item/reagent_containers/food/snacks/canned/beef - name = "quadrangled beefium" - icon_state = "beef" - desc = "Proteins carefully cloned from extinct stock of holstein in the meat foundries of Mars." - trash = /obj/item/trash/beef - filling_color = "#663300" - center_of_mass = "x=15;y=9" - nutriment_desc = list("beef" = 1) - bitesize = 3 -/obj/item/reagent_containers/food/snacks/canned/beef/Initialize() - .=..() - reagents.add_reagent(/datum/reagent/nutriment/protein, 12) - -/obj/item/reagent_containers/food/snacks/canned/beans - name = "baked beans" - icon_state = "beans" - desc = "Luna Colony beans. Carefully synthethized from soy." - trash = /obj/item/trash/beans - filling_color = "#ff6633" - center_of_mass = "x=15;y=9" - nutriment_desc = list("beans" = 1) - nutriment_amt = 12 - bitesize = 3 - -/obj/item/reagent_containers/food/snacks/canned/tomato - name = "tomato soup" - icon_state = "tomato" - desc = "Plain old unseasoned tomato soup. This can predates the formation of the SCG." - trash = /obj/item/trash/tomato - filling_color = "#ae0000" - center_of_mass = "x=15;y=9" - nutriment_desc = list("tomato" = 1) - bitesize = 3 - eat_sound = 'sound/items/drink.ogg' - -/obj/item/reagent_containers/food/snacks/canned/tomato/Initialize() - .=..() - reagents.add_reagent(/datum/reagent/drink/juice/tomato, 12) - - -/obj/item/reagent_containers/food/snacks/canned/tomato/feed_sound(var/mob/user) - playsound(user.loc, 'sound/items/drink.ogg', rand(10, 50), 1) - -/obj/item/reagent_containers/food/snacks/canned/spinach - name = "spinach" - icon_state = "spinach" - desc = "Wup-Az! Brand canned spinach. Notably has less iron in it than a watermelon." - trash = /obj/item/trash/spinach - filling_color = "#003300" - center_of_mass = "x=15;y=9" - nutriment_desc = list("soggy" = 1, "vegetable" = 1) - bitesize = 20 -/obj/item/reagent_containers/food/snacks/canned/spinach/Initialize() - .=..() - reagents.add_reagent(/datum/reagent/nutriment, 5, - /datum/reagent/adrenaline, 5, - /datum/reagent/hyperzine, 5, - /datum/reagent/iron, 5) - -//Vending Machine Foods should go here. - -/obj/item/reagent_containers/food/snacks/canned/caviar - name = "caviar" - icon_state = "fisheggs" - desc = "Terran caviar, or space carp eggs. Carefully faked using alginate, artificial flavoring and salt. Skrell approved!" - trash = /obj/item/trash/fishegg - filling_color = "#000000" - center_of_mass = "x=15;y=9" - nutriment_desc = list("fish" = 1, "salt" = 1) - nutriment_amt = 6 - bitesize = 1 - -/obj/item/reagent_containers/food/snacks/canned/caviar/true - name = "caviar" - icon_state = "carpeggs" - desc = "Terran caviar, or space carp eggs. Banned by the Sol Food Health Administration for exceeding the legally set amount of carpotoxins in foodstuffs." - trash = /obj/item/trash/carpegg - filling_color = "#330066" - center_of_mass = "x=15;y=9" - nutriment_desc = list("fish" = 1, "salt" = 1, "numbing sensation" = 1) - nutriment_amt = 6 - bitesize = 1 -/obj/item/reagent_containers/food/snacks/caviar/true/Initialize() - . = ..() - reagents.add_reagent(/datum/reagent/nutriment/protein, 4) - reagents.add_reagent(/datum/reagent/toxin/carpotoxin, 1) - -/obj/item/reagent_containers/food/snacks/sosjerky - name = "beef jerky" - icon_state = "sosjerky" - desc = "Beef jerky made from the finest space cows." - trash = /obj/item/trash/sosjerky - filling_color = "#631212" - center_of_mass = "x=15;y=9" - bitesize = 2 -/obj/item/reagent_containers/food/snacks/sosjerky/Initialize() - .=..() - reagents.add_reagent(/datum/reagent/nutriment/protein, 4) - -/obj/item/reagent_containers/food/snacks/no_raisin - name = "raisins" - icon_state = "4no_raisins" - desc = "Best raisins in the universe. Not sure why." - trash = /obj/item/trash/raisins - filling_color = "#343834" - center_of_mass = "x=15;y=4" - nutriment_desc = list("raisins" = 6) - nutriment_amt = 6 - -/obj/item/reagent_containers/food/snacks/spacetwinkie - name = "space eclair" - icon_state = "space_twinkie" - desc = "Guaranteed to survive longer then you will." - filling_color = "#ffe591" - center_of_mass = "x=15;y=11" - bitesize = 2 -/obj/item/reagent_containers/food/snacks/spacetwinkie/Initialize() - .=..() - reagents.add_reagent(/datum/reagent/sugar, 4) - - -/obj/item/reagent_containers/food/snacks/cheesiehonkers - name = "cheesie honkers" - icon_state = "cheesie_honkers" - desc = "Bite sized cheesie snacks that will honk all over your mouth." - trash = /obj/item/trash/cheesie - filling_color = "#ffa305" - center_of_mass = "x=15;y=9" - nutriment_desc = list("cheese" = 5, "chips" = 2) - nutriment_amt = 4 - bitesize = 2 - -/obj/item/reagent_containers/food/snacks/syndicake - name = "syndi-cakes" - icon_state = "syndi_cakes" - desc = "An extremely moist snack cake that tastes just as good after being nuked." - filling_color = "#ff5d05" - center_of_mass = "x=16;y=10" - nutriment_desc = list("sweetness" = 3, "cake" = 1) - nutriment_amt = 4 - trash = /obj/item/trash/syndi_cakes - bitesize = 3 -/obj/item/reagent_containers/food/snacks/syndicake/Initialize() - .=..() - reagents.add_reagent(/datum/reagent/drink/doctor_delight, 5) - -//terran delights - -/obj/item/reagent_containers/food/snacks/pistachios - name = "pistachios" - icon_state = "pistachios" - desc = "Pistachios. There is absolutely nothing remarkable about these." - trash = /obj/item/trash/pistachios - filling_color = "#825d26" - center_of_mass = "x=15;y=9" - nutriment_desc = list("nuts" = 1) - nutriment_amt = 3 - bitesize = 0.5 - -/obj/item/reagent_containers/food/snacks/semki - name = "semki" - icon_state = "semki" - desc = "Sunflower seeds. A favorite among both birds and gopniks." - trash = /obj/item/trash/semki - filling_color = "#68645d" - center_of_mass = "x=15;y=9" - nutriment_desc = list("sunflower seeds" = 1) - nutriment_amt = 6 - bitesize = 0.5 - -/obj/item/reagent_containers/food/snacks/squid - name = "calamari crisps" - icon_state = "squid" - desc = "Space squid tentacles, Carefully removed (from the squid) then dried into strips of delicious rubbery goodness!" - trash = /obj/item/trash/squid - filling_color = "#c0a9d7" - center_of_mass = "x=15;y=9" - nutriment_desc = list("fish" = 1, "salt" = 1) - nutriment_amt = 2 - bitesize = 1 -/obj/item/reagent_containers/food/snacks/squid/Initialize() - .=..() - reagents.add_reagent(/datum/reagent/nutriment/protein, 4) - -/obj/item/reagent_containers/food/snacks/croutons - name = "suhariki" - icon_state = "croutons" - desc = "Fried bread cubes. Popular in Terran territories." - trash = /obj/item/trash/croutons - filling_color = "#c6b17f" - center_of_mass = "x=15;y=9" - nutriment_desc = list("bread" = 1, "salt" = 1) - nutriment_amt = 3 - bitesize = 1 - -/obj/item/reagent_containers/food/snacks/salo - name = "salo" - icon_state = "salo" - desc = "Pig fat. Salted. Just as good as it sounds." - trash = /obj/item/trash/salo - filling_color = "#e0bcbc" - center_of_mass = "x=15;y=9" - nutriment_desc = list("fat" = 1, "salt" = 1) - nutriment_amt = 2 - bitesize = 2 -/obj/item/reagent_containers/food/snacks/salo/Initialize() - .=..() - reagents.add_reagent(/datum/reagent/nutriment/protein, 8) - -/obj/item/reagent_containers/food/snacks/driedfish - name = "vobla" - icon_state = "driedfish" - desc = "Dried salted beer snack fish." - trash = /obj/item/trash/driedfish - filling_color = "#c8a5bb" - center_of_mass = "x=15;y=9" - nutriment_desc = list("fish" = 1, "salt" = 1) - nutriment_amt = 2 - bitesize = 1 -/obj/item/reagent_containers/food/snacks/driedfish/Initialize() - .=..() - reagents.add_reagent(/datum/reagent/nutriment/protein, 4) - -/obj/item/reagent_containers/food/snacks/liquidfood - name = "liquid-food MRE" - desc = "A prepackaged grey slurry for all of the essential nutrients a soldier requires to survive. No expiration date is visible..." - icon_state = "liquidfood" - trash = /obj/item/trash/liquidfood - filling_color = "#a8a8a8" - center_of_mass = "x=16;y=15" - nutriment_desc = list("chalk" = 6) - nutriment_amt = 20 - bitesize = 4 -/obj/item/reagent_containers/food/snacks/liquidfood/Initialize() - .=..() - reagents.add_reagent(/datum/reagent/iron, 3) - -/obj/item/reagent_containers/food/snacks/meatcube - name = "cubed meat" - desc = "Fried, salted lean meat compressed into a cube. Not very appetizing." - icon_state = "meatcube" - filling_color = "#7a3d11" - center_of_mass = "x=16;y=16" - bitesize = 3 -/obj/item/reagent_containers/food/snacks/meatcube/Initialize() - .=..() - reagents.add_reagent(/datum/reagent/nutriment/protein, 15) - -/obj/item/reagent_containers/food/snacks/tastybread - name = "bread tube" - desc = "Bread in a tube. Chewy... and surprisingly tasty." - icon_state = "tastybread" - trash = /obj/item/trash/tastybread - filling_color = "#a66829" - center_of_mass = "x=17;y=16" - nutriment_desc = list("bread" = 2, "sweetness" = 3) - nutriment_amt = 6 - bitesize = 2 - -/obj/item/reagent_containers/food/snacks/skrellsnacks - name = "skrellsnax" - desc = "Cured fungus shipped all the way from Jargon 4, almost like jerky! Almost." - icon_state = "skrellsnacks" - filling_color = "#a66829" - center_of_mass = "x=15;y=12" - nutriment_desc = list("mushroom" = 5, "salt" = 5) - nutriment_amt = 10 - bitesize = 3 - -/obj/item/reagent_containers/food/snacks/candy - name = "candy" - desc = "Nougat, love it or hate it." - icon_state = "candy" - trash = /obj/item/trash/candy - filling_color = "#7d5f46" - center_of_mass = "x=15;y=15" - nutriment_amt = 1 - nutriment_desc = list("candy" = 1) - bitesize = 2 -/obj/item/reagent_containers/food/snacks/candy/Initialize() - .=..() - reagents.add_reagent(/datum/reagent/sugar, 3) - -/obj/item/reagent_containers/food/snacks/candy/donor - name = "donor candy" - desc = "A little treat for blood donors." - trash = /obj/item/trash/candy - nutriment_desc = list("candy" = 10) - bitesize = 5 -/obj/item/reagent_containers/food/snacks/candy/donor/Initialize() - .=..() - reagents.add_reagent(/datum/reagent/nutriment, 10) - reagents.add_reagent(/datum/reagent/sugar, 3) - -/obj/item/reagent_containers/food/snacks/proteinbar - name = "protein bar" - desc = "SwoleMAX brand protein bars, guaranteed to get you feeling perfectly overconfident." - icon_state = "proteinbar" - trash = /obj/item/trash/proteinbar - bitesize = 6 - atom_flags = ATOM_FLAG_OPEN_CONTAINER | ATOM_FLAG_NO_REACT - -/obj/item/reagent_containers/food/snacks/proteinbar/Initialize() - .=..() - reagents.add_reagent(/datum/reagent/nutriment, 9) - reagents.add_reagent(/datum/reagent/nutriment/protein, 4) - var/flavor = pick(GLOB.proteinbar_flavors) - var/flavor_type = GLOB.proteinbar_flavors[flavor] - var/count = length(flavor_type) - if (count) - for (var/type in flavor_type) - reagents.add_reagent(type, round(4 / count, 0.1)) - else - reagents.add_reagent(flavor_type, 4) - name = "[flavor] [name]" - -/obj/item/reagent_containers/food/snacks/candy_corn - name = "candy corn" - desc = "It's a handful of candy corn. Cannot be stored in a detective's hat, alas." - icon_state = "candy_corn" - filling_color = "#fffcb0" - center_of_mass = "x=14;y=10" - nutriment_amt = 4 - nutriment_desc = list("candy corn" = 4) - bitesize = 2 -/obj/item/reagent_containers/food/snacks/candy_corn/Initialize() - .=..() - reagents.add_reagent(/datum/reagent/nutriment, 4) - reagents.add_reagent(/datum/reagent/sugar, 2) - -/obj/item/reagent_containers/food/snacks/chips - name = "chips" - desc = "Commander Riker's What-The-Crisps." - icon_state = "chips" - trash = /obj/item/trash/chips - filling_color = "#e8c31e" - center_of_mass = "x=15;y=15" - nutriment_amt = 3 - nutriment_desc = list("salt" = 1, "chips" = 2) - bitesize = 1 - -/obj/item/reagent_containers/food/snacks/cookie - name = "cookie" - desc = "COOKIE!!!" - icon_state = "cookie" - filling_color = "#dbc94f" - center_of_mass = "x=17;y=18" - nutriment_amt = 5 - nutriment_desc = list("sweetness" = 3, "cookie" = 2) - w_class = ITEM_SIZE_TINY - bitesize = 1 - -/obj/item/reagent_containers/food/snacks/chocolatebar - name = "chocolate bar" - desc = "Such sweet, fattening food." - icon_state = "chocolatebar" - filling_color = "#7d5f46" - center_of_mass = "x=15;y=15" - nutriment_amt = 2 - nutriment_desc = list("chocolate" = 5) - bitesize = 2 -/obj/item/reagent_containers/food/snacks/chocolatebar/Initialize() - .=..() - reagents.add_reagent(/datum/reagent/sugar, 2) - reagents.add_reagent(/datum/reagent/nutriment/coco, 2) - -/obj/item/reagent_containers/food/snacks/chocolateegg - name = "chocolate egg" - desc = "Such sweet, fattening food." - icon_state = "chocolateegg" - filling_color = "#7d5f46" - center_of_mass = "x=16;y=13" - nutriment_amt = 3 - nutriment_desc = list("chocolate" = 5) - bitesize = 2 -/obj/item/reagent_containers/food/snacks/chocolateegg/Initialize() - .=..() - reagents.add_reagent(/datum/reagent/sugar, 2) - reagents.add_reagent(/datum/reagent/nutriment/coco, 2) - -/obj/item/reagent_containers/food/snacks/donut - name = "donut" - desc = "Goes great with Robust Coffee." - icon_state = "donut1" - filling_color = "#d9c386" - var/overlay_state = "box-donut1" - center_of_mass = "x=13;y=16" - nutriment_desc = list("sweetness", "donut") - -/obj/item/reagent_containers/food/snacks/donut/normal - name = "donut" - desc = "Goes great with Robust Coffee." - icon_state = "donut1" - nutriment_amt = 3 - bitesize = 3 -/obj/item/reagent_containers/food/snacks/donut/normal/Initialize() - .=..() - reagents.add_reagent(/datum/reagent/nutriment/sprinkles, 1) - - if(prob(30)) - src.icon_state = "donut2" - src.overlay_state = "box-donut2" - src.SetName("frosted donut") - reagents.add_reagent(/datum/reagent/nutriment/sprinkles, 2) - center_of_mass = "x=19;y=16" - -/obj/item/reagent_containers/food/snacks/donut/chaos - name = "chaos donut" - desc = "Like life, it never quite tastes the same." - icon_state = "donut1" - filling_color = "#ed11e6" - nutriment_amt = 2 - bitesize = 10 -/obj/item/reagent_containers/food/snacks/donut/chaos/Initialize() - .=..() - reagents.add_reagent(/datum/reagent/nutriment/sprinkles, 1) - reagents.add_reagent(pick(list( - /datum/reagent/nutriment, - /datum/reagent/capsaicin, - /datum/reagent/frostoil, - /datum/reagent/nutriment/sprinkles, - /datum/reagent/toxin/phoron, - /datum/reagent/nutriment/coco, - /datum/reagent/slimejelly, - /datum/reagent/drink/juice/banana, - /datum/reagent/drink/juice/berry, - /datum/reagent/fuel, - /datum/reagent/tricordrazine)), 3) - if(prob(30)) - src.icon_state = "donut2" - src.overlay_state = "box-donut2" - src.SetName("frosted chaos donut") - reagents.add_reagent(/datum/reagent/nutriment/sprinkles, 2) - -/obj/item/reagent_containers/food/snacks/donut/jelly - name = "jelly donut" - desc = "You jelly?" - icon_state = "jdonut1" - filling_color = "#ed1169" - center_of_mass = "x=16;y=11" - nutriment_amt = 3 - bitesize = 5 -/obj/item/reagent_containers/food/snacks/donut/jelly/Initialize() - .=..() - reagents.add_reagent(/datum/reagent/nutriment/sprinkles, 1) - reagents.add_reagent(/datum/reagent/drink/juice/berry, 5) - if(prob(30)) - src.icon_state = "jdonut2" - src.overlay_state = "box-donut2" - src.SetName("frosted jelly donut") - reagents.add_reagent(/datum/reagent/nutriment/sprinkles, 2) - -/obj/item/reagent_containers/food/snacks/donut/slimejelly - name = "jelly donut" - desc = "You jelly?" - icon_state = "jdonut1" - filling_color = "#ed1169" - center_of_mass = "x=16;y=11" - nutriment_amt = 3 - bitesize = 5 -/obj/item/reagent_containers/food/snacks/donut/slimejelly/Initialize() - .=..() - reagents.add_reagent(/datum/reagent/nutriment/sprinkles, 1) - reagents.add_reagent(/datum/reagent/slimejelly, 5) - if(prob(30)) - src.icon_state = "jdonut2" - src.overlay_state = "box-donut2" - src.SetName("frosted jelly donut") - reagents.add_reagent(/datum/reagent/nutriment/sprinkles, 2) - -/obj/item/reagent_containers/food/snacks/donut/cherryjelly - name = "jelly donut" - desc = "You jelly?" - icon_state = "jdonut1" - filling_color = "#ed1169" - center_of_mass = "x=16;y=11" - nutriment_amt = 3 - bitesize = 5 -/obj/item/reagent_containers/food/snacks/donut/cherryjelly/Initialize() - .=..() - reagents.add_reagent(/datum/reagent/nutriment/sprinkles, 1) - reagents.add_reagent(/datum/reagent/nutriment/cherryjelly, 5) - if(prob(30)) - src.icon_state = "jdonut2" - src.overlay_state = "box-donut2" - src.SetName("frosted jelly donut") - reagents.add_reagent(/datum/reagent/nutriment/sprinkles, 2) - -//Sol Vendor - -/obj/item/reagent_containers/food/snacks/lunacake - name = "luna cake" - icon_state = "lunacake_wrapped" - desc = "Now with 20% less lawsuit enabling rhegolith!" - trash = /obj/item/trash/cakewrap - filling_color = "#ffffff" - center_of_mass = "x=15;y=9" - nutriment_desc = list("sweet" = 4, "vanilla" = 1) - nutriment_amt = 5 - bitesize = 2 - -/obj/item/reagent_containers/food/snacks/lunacake/mochicake - name = "mochi cake" - icon_state = "mochicake_wrapped" - desc = "Konnichiwa! Many go lucky rice cakes in future!" - trash = /obj/item/trash/mochicakewrap - nutriment_desc = list("sweet" = 4, "rice" = 1) - -/obj/item/reagent_containers/food/snacks/lunacake/mooncake - name = "dark side luna cake" - icon_state = "mooncake_wrapped" - desc = "Explore the dark side! May contain trace amounts of reconstituted cocoa." - trash = /obj/item/trash/mooncakewrap - filling_color = "#000000" - nutriment_desc = list("sweet" = 4, "chocolate" = 1) - - -/obj/item/reagent_containers/food/snacks/triton - name = "tide gobs" - icon_state = "tidegobs" - desc = "Contains over 9000% of your daily recommended intake of salt." - trash = /obj/item/trash/tidegobs - filling_color = "#2556b0" - center_of_mass = "x=15;y=9" - nutriment_desc = list("salt" = 4, "seagull?" = 1) - nutriment_amt = 5 - bitesize = 2 - -/obj/item/reagent_containers/food/snacks/saturn - name = "saturn-os" - icon_state = "saturno" - desc = "A day ration of salt, styrofoam and possibly sawdust." - trash = /obj/item/trash/saturno - filling_color = "#dca319" - center_of_mass = "x=15;y=9" - nutriment_desc = list("salt" = 4, "peanut" = 2, "wood?" = 1) - nutriment_amt = 5 - bitesize = 2 - -/obj/item/reagent_containers/food/snacks/jupiter - name = "jove gello" - icon_state = "jupiter" - desc = "By Joove! It's some kind of gel." - trash = /obj/item/trash/jupiter - filling_color = "#dc1919" - center_of_mass = "x=15;y=9" - nutriment_desc = list("sweet" = 4, "vanilla?" = 1) - nutriment_amt = 5 - bitesize = 2 - -/obj/item/reagent_containers/food/snacks/pluto - name = "plutonian rods" - icon_state = "pluto" - desc = "Baseless tasteless nutrithick rods to get you through the day. Now even less rash inducing!" - trash = /obj/item/trash/pluto - filling_color = "#ffffff" - center_of_mass = "x=15;y=9" - nutriment_desc = list("chalk" = 4, "sad?" = 1) - nutriment_amt = 5 - bitesize = 2 - -/obj/item/reagent_containers/food/snacks/mars - name = "frouka" - icon_state = "mars" - desc = "Celebrate founding day with a steaming self-heated bowl of sweet eggs and taters!" - trash = /obj/item/trash/mars - filling_color = "#d2c63f" - center_of_mass = "x=15;y=9" - nutriment_desc = list("eggs" = 4, "potato" = 4, "mustard" = 2) - nutriment_amt = 8 - bitesize = 2 - -/obj/item/reagent_containers/food/snacks/venus - name = "venusian hot cakes" - icon_state = "venus" - desc = "Hot takes on hot cakes, a timeless classic now finally fit for human consumption!" - trash = /obj/item/trash/venus - filling_color = "#d2c63f" - center_of_mass = "x=15;y=9" - nutriment_desc = list("heat" = 4, "burning!" = 1) - nutriment_amt = 5 - bitesize = 2 -/obj/item/reagent_containers/food/snacks/venus/Initialize() - .=..() - reagents.add_reagent(/datum/reagent/capsaicin = 5) - -/obj/item/reagent_containers/food/snacks/oort - name = "oort cloud rocks" - icon_state = "oort" - desc = "Pop rocks themed on the most important industrial sector in Sol, new formula guarantees fewer shrapnel induced oral injury." - trash = /obj/item/trash/oort - filling_color = "#3f7dd2" - center_of_mass = "x=15;y=9" - nutriment_desc = list("fizz" = 4, "sweet?" = 1) - nutriment_amt = 5 - bitesize = 2 -/obj/item/reagent_containers/food/snacks/oort/Initialize() - .=..() - reagents.add_reagent(/datum/reagent/frostoil = 5) - -//weebo vend! So japanese it hurts - -/obj/item/reagent_containers/food/snacks/ricecake - name = "rice cake" - icon_state = "ricecake" - desc = "Ancient earth snack food made from balled up rice." - nutriment_desc = list("rice" = 4, "sweet?" = 1) - nutriment_amt = 5 - bitesize = 2 - -/obj/item/reagent_containers/food/snacks/pokey - name = "pokeys" - icon_state = "pokeys" - desc = "A bundle of chocolate coated bisquit sticks." - nutriment_desc = list("chocolate" = 4, "bisquit" = 1) - nutriment_amt = 5 - bitesize = 2 - -/obj/item/reagent_containers/food/snacks/weebonuts - name = "red alert nuts" - icon_state = "weebonuts" - trash = /obj/item/trash/weebonuts - desc = "A bag of Red Alert! brand spicy nuts. Goes well with your beer!" - nutriment_desc = list("nuts" = 4, "spicy!" = 1) - nutriment_amt = 5 - bitesize = 2 -/obj/item/reagent_containers/food/snacks/weebonuts/Initialize() - .=..() - reagents.add_reagent(/datum/reagent/capsaicin = 1) - -/obj/item/reagent_containers/food/snacks/chocobanana - name = "choco banang" - icon_state = "chocobanana" - trash = /obj/item/trash/stick - desc = "A chocolate and sprinkles coated banana. On a stick." - nutriment_desc = list("chocolate" = 4, "wax?" = 1) - nutriment_amt = 5 - bitesize = 2 -/obj/item/reagent_containers/food/snacks/chocobanana/Initialize() - .=..() - reagents.add_reagent(/datum/reagent/nutriment/sprinkles, 10) - -/obj/item/reagent_containers/food/snacks/dango - name = "dango" - icon_state = "dango" - trash = /obj/item/trash/stick - desc = "Food dyed rice dumplings on a stick." - nutriment_desc = list("rice" = 4, "topping?" = 1) - nutriment_amt = 5 - bitesize = 2 - -//inedible old vendor food - -/obj/item/reagent_containers/food/snacks/old - name = "master old-food" - desc = "They're all inedible and potentially dangerous items." - center_of_mass = "x=15;y=12" - nutriment_desc = list("rot" = 5, "mold" = 5) - nutriment_amt = 10 - bitesize = 3 - filling_color = "#336b42" -/obj/item/reagent_containers/food/snacks/old/Initialize() - .=..() - reagents.add_reagent(pick(list( - /datum/reagent/fuel, - /datum/reagent/toxin/amatoxin, - /datum/reagent/toxin/carpotoxin, - /datum/reagent/toxin/zombiepowder, - /datum/reagent/cryptobiolin, - /datum/reagent/psilocybin)), 5) - - -/obj/item/reagent_containers/food/snacks/old/pizza - name = "pizza" - desc = "It's so stale you could probably cut something with the cheese." - icon_state = "ancient_pizza" - -/obj/item/reagent_containers/food/snacks/old/burger - name = "giga burger" - desc = "At some point in time this probably looked delicious." - icon_state = "ancient_burger" - -/obj/item/reagent_containers/food/snacks/old/hamburger - name = "horse burger" - desc = "Even if you were hungry enough to eat a horse, it'd be a bad idea to eat this." - icon_state = "ancient_hburger" - -/obj/item/reagent_containers/food/snacks/old/fries - name = "space fries" - desc = "The salt appears to have preserved these, still stale and gross." - icon_state = "ancient_fries" - -/obj/item/reagent_containers/food/snacks/old/hotdog - name = "space dog" - desc = "This one is probably only marginally less safe to eat than when it was first created.." - icon_state = "ancient_hotdog" - -/obj/item/reagent_containers/food/snacks/old/taco - name = "taco" - desc = "Interestingly, the shell has gone soft and the contents have gone stale." - icon_state = "ancient_taco" diff --git a/code/modules/reagents/reagent_containers/food/snacks/donkpocket.dm b/code/modules/reagents/reagent_containers/food/snacks/donkpocket.dm deleted file mode 100644 index 0f16740c7e915..0000000000000 --- a/code/modules/reagents/reagent_containers/food/snacks/donkpocket.dm +++ /dev/null @@ -1,276 +0,0 @@ -/** -* Donk Pockets are a food item that is a reference to a mass market -* brand of turnovers. They come with various "fillings" and can be -* cooked (or self-heat in some cases) to cause them to temporarily -* become more useful. -*/ - -/obj/item/reagent_containers/food/snacks/donkpocket - abstract_type = /obj/item/reagent_containers/food/snacks/donkpocket - name = "donk-pocket" - icon_state = "donkpocket" - filling_color = "#dedeab" - center_of_mass = "x=16;y=10" - bitesize = 3 - nutriment_amt = 2 - nutriment_desc = list( - "heartiness" = 1, - "dough" = 2 - ) - - /// Whether the donk pocket is currently hot. Hot donk pockets have additional reagents - var/is_hot = FALSE - - /// Whether the donk pocket is able to be made hot without a microwave by using it in-hand - var/can_self_heat = FALSE - - /// Whether the donk pocket was heated up already. Reheating does not re-add the extra reagents. - var/was_heated = FALSE - - /// The reagents to be added to the donk pocket when it is made hot (and removed when made cold) - var/list/hot_reagents = list( - /datum/reagent/tricordrazine = 5 - ) - - /// The reagents to be added to the donk pocket when it is initialized - var/list/filling_options - - -/obj/item/reagent_containers/food/snacks/donkpocket/Initialize() - . = ..() - if (. == INITIALIZE_HINT_QDEL) - return - if (filling_options) - SetInitialReagents(filling_options) - - -/obj/item/reagent_containers/food/snacks/donkpocket/OnConsume(mob/living/consumer) - if (can_self_heat) - to_chat(consumer, SPAN_ITALIC("You tear open \the [src], destroying the self-heating packaging.")) - can_self_heat = FALSE - ..() - - -/obj/item/reagent_containers/food/snacks/donkpocket/examine(mob/user, distance) - . = ..() - if (distance > 1) - return - if (!initial(can_self_heat)) - return - to_chat(user, "This one can self-heat[can_self_heat ? "." : " but the heaters are used up."]") - - -/obj/item/reagent_containers/food/snacks/donkpocket/attack_self(mob/living/user) - if (!initial(can_self_heat)) - return - SetHot(user, TRUE) - - -/obj/item/reagent_containers/food/snacks/donkpocket/proc/SetHot(mob/living/user, attempt_self_heat) - if (is_hot) - to_chat(user, SPAN_NOTICE("\The [src] is already hot!")) - return - if (attempt_self_heat) - if (!can_self_heat) - if (!initial(can_self_heat)) - return - to_chat(user, SPAN_WARNING("\The [src]'s heaters are used up. Use a microwave.")) - return - can_self_heat = FALSE - is_hot = TRUE - if (attempt_self_heat) - to_chat(user, SPAN_NOTICE("A comforting warmth spreads through \the [src]. It's ready to eat!")) - if (!was_heated) - for(var/reagent in hot_reagents) - reagents.add_reagent(reagent, hot_reagents[reagent]) - was_heated = TRUE - SetName("hot " + name) - addtimer(CALLBACK(src, .proc/UnsetHot), 7 MINUTES) - - -/obj/item/reagent_containers/food/snacks/donkpocket/proc/UnsetHot() - if (!is_hot) - return - is_hot = FALSE - SetName(initial(name)) - visible_message(SPAN_ITALIC("\The [src] cools down."), range = 1) - for (var/reagent in hot_reagents) - reagents.del_reagent(reagent) - - -/obj/item/reagent_containers/food/snacks/donkpocket/proc/SetInitialReagents(list/options, amount = 3) - var/list/entry = pick(options) - if (!islist(entry)) - reagents.add_reagent(entry, amount) - return - var/sub_amount = amount / length(entry) - for (var/reagent in entry) - reagents.add_reagent(reagent, sub_amount) - - - - -/obj/item/reagent_containers/food/snacks/donkpocket/protein - name = "protein donk-pocket" - desc = "A mass produced shelf-stable turnover. Allegedly contains mixed meat product." - filling_options = list( - /datum/reagent/nutriment/protein, - /datum/reagent/drink/porksoda - ) - - -/obj/item/reagent_containers/food/snacks/donkpocket/vegetable - name = "vegetable donk-pocket" - desc = "A mass produced shelf-stable turnover. Allegedly contains plant based nutrients." - filling_options = list( - list( - /datum/reagent/drink/juice/potato, - /datum/reagent/drink/juice/onion, - /datum/reagent/drink/juice/tomato - ), - /datum/reagent/drink/juice/potato, - /datum/reagent/drink/juice/turnip, - /datum/reagent/drink/juice/cabbage, - /datum/reagent/drink/milk/soymilk - ) - - -/obj/item/reagent_containers/food/snacks/donkpocket/fruit - name = "fruit donk-pocket" - desc = "A mass produced shelf-stable turnover. Allegedly contains fruit derivatives." - filling_options = list( - /datum/reagent/drink/juice/apple, - /datum/reagent/drink/juice/berry, - /datum/reagent/drink/juice/melon, - /datum/reagent/drink/juice/orange, - /datum/reagent/drink/coconut - ) - - -/obj/item/reagent_containers/food/snacks/donkpocket/dessert - name = "dessert donk-pocket" - desc = "A mass produced shelf-stable turnover. Allegedly contains unnatural delights." - filling_options = list( - /datum/reagent/drink/milk/chocolate, - /datum/reagent/drink/milk/cream, - /datum/reagent/drink/coffee/soy_latte/mocha, - /datum/reagent/drink/coffee/soy_latte/pumpkin, - /datum/reagent/drink/milkshake, - /datum/reagent/drink/maplesyrup, - /datum/reagent/drink/kiraspecial, - /datum/reagent/cinnamon, - /datum/reagent/drink/kefir - ) - - -/obj/item/reagent_containers/food/snacks/donkpocket/premium - name = "premium donk-pocket" - desc = "A \"premium\" shelf-stable turnover. Possibly contains \"real\" fruit paste. Crush the packaging to cook it on the go!" - filling_color = "#6d6d00" - can_self_heat = TRUE - nutriment_amt = 4 - nutriment_desc = list( - "nutritious goodness" = 1, - "flaky pastry" = 2 - ) - hot_reagents = list( - /datum/reagent/drink/doctor_delight = 4, - /datum/reagent/hyperzine = 0.5, - /datum/reagent/synaptizine = 0.1 - ) - - - - -/obj/random/donkpocket - name = "random donk-pocket" - desc = "This is a random donk-pocket." - icon = 'icons/obj/food.dmi' - icon_state = "donkpocket" - - -/obj/random/donkpocket/spawn_choices() - return list( - /obj/item/reagent_containers/food/snacks/donkpocket/protein = 10, - /obj/item/reagent_containers/food/snacks/donkpocket/vegetable = 10, - /obj/item/reagent_containers/food/snacks/donkpocket/fruit = 5, - /obj/item/reagent_containers/food/snacks/donkpocket/dessert = 5, - /obj/item/reagent_containers/food/snacks/donkpocket/premium = 1 - ) - - - - -/obj/item/storage/box/donkpocket_protein - name = "box of protein donk-pockets" - desc = "Heat in microwave. Product will cool if not eaten within seven minutes. Contains meat." - icon_state = "donk_kit" - startswith = list( - /obj/item/reagent_containers/food/snacks/donkpocket/protein = 4 - ) - - -/obj/item/storage/box/donkpocket_vegetable - name = "box of vegetable donk-pockets" - desc = "Heat in microwave. Product will cool if not eaten within seven minutes. Suitable for vegetarians." - icon_state = "donk_kit" - startswith = list( - /obj/item/reagent_containers/food/snacks/donkpocket/vegetable = 4 - ) - - -/obj/item/storage/box/donkpocket_fruit - name = "box of fruit donk-pockets" - desc = "Heat in microwave. Product will cool if not eaten within seven minutes. Contains plant sugars." - icon_state = "donk_kit" - startswith = list( - /obj/item/reagent_containers/food/snacks/donkpocket/fruit = 4 - ) - - -/obj/item/storage/box/donkpocket_dessert - name = "box of dessert donk-pockets" - desc = "Heat in microwave. Product will cool if not eaten within seven minutes. Contains animal products." - icon_state = "donk_kit" - startswith = list( - /obj/item/reagent_containers/food/snacks/donkpocket/dessert = 4 - ) - - -/obj/item/storage/box/donkpocket_premium - name = "box of premium donk-pockets" - desc = "Heat in microwave or crush packaging in hand. Product will cool if not eaten within seven minutes. Suitable for vegetarians. Contains plant sugars." - icon_state = "donk_kit" - startswith = list( - /obj/item/reagent_containers/food/snacks/donkpocket/premium = 4 - ) - - -// Mixed donk pocket boxes gives you a couple of extras for taking a chance -/obj/item/storage/box/donkpocket_mixed - name = "box of mixed donk-pockets" - desc = "Heat in microwave or crush packaging in hand. Product will cool if not eaten within seven minutes. Check packaged products for individual safety." - icon_state = "donk_kit" - startswith = list( - /obj/random/donkpocket = 6 - ) - - - - -/obj/random/donkpocket_box - name = "random box of donk-pockets" - desc = "This is a random box of donk-pockets." - icon = 'icons/obj/storage.dmi' - icon_state = "donk_kit" - - -/obj/random/donkpocket_box/spawn_choices() - return list( - /obj/item/storage/box/donkpocket_mixed = 10, - /obj/item/storage/box/donkpocket_protein = 10, - /obj/item/storage/box/donkpocket_vegetable = 10, - /obj/item/storage/box/donkpocket_fruit = 5, - /obj/item/storage/box/donkpocket_dessert = 5, - /obj/item/storage/box/donkpocket_premium = 1 - ) diff --git a/code/modules/reagents/reagent_containers/food/snacks/meat.dm b/code/modules/reagents/reagent_containers/food/snacks/meat.dm deleted file mode 100644 index 73a4cda1f63f0..0000000000000 --- a/code/modules/reagents/reagent_containers/food/snacks/meat.dm +++ /dev/null @@ -1,48 +0,0 @@ -/obj/item/reagent_containers/food/snacks/meat - name = "meat" - desc = "A slab of meat." - icon = 'icons/obj/food_ingredients.dmi' - icon_state = "meat" - slice_path = /obj/item/reagent_containers/food/snacks/rawcutlet - slices_num = 3 - filling_color = "#ff1c1c" - center_of_mass = "x=16;y=14" - bitesize = 3 - - -/obj/item/reagent_containers/food/snacks/meat/New() - ..() - reagents.add_reagent(/datum/reagent/nutriment/protein, 9) - - -/obj/item/reagent_containers/food/snacks/meat/syntiflesh - name = "synthetic meat" - desc = "A slab of flesh synthetized from reconstituted biomass or artificially grown from chemicals." - icon = 'icons/obj/food.dmi' - -// Separate definitions because some food likes to know if it's human. -// TODO: rewrite kitchen code to check a var on the meat item so we can remove -// all these sybtypes. -/obj/item/reagent_containers/food/snacks/meat/human -/obj/item/reagent_containers/food/snacks/meat/monkey - //same as plain meat - -/obj/item/reagent_containers/food/snacks/meat/corgi - name = "corgi meat" - desc = "Tastes like... well, you know." - -/obj/item/reagent_containers/food/snacks/meat/beef - name = "beef slab" - desc = "The classic red meat." - -/obj/item/reagent_containers/food/snacks/meat/goat - name = "chevon slab" - desc = "Goat meat, to the uncultured." - -/obj/item/reagent_containers/food/snacks/meat/chicken - name = "chicken piece" - desc = "It tastes like you'd expect." - -/obj/item/reagent_containers/food/snacks/meat/chicken/game - name = "game bird piece" - desc = "Fresh game meat, harvested from some wild bird." diff --git a/code/modules/reagents/reagent_containers/food/sushi.dm b/code/modules/reagents/reagent_containers/food/sushi.dm deleted file mode 100644 index 0edf670fae2f5..0000000000000 --- a/code/modules/reagents/reagent_containers/food/sushi.dm +++ /dev/null @@ -1,153 +0,0 @@ -/obj/item/reagent_containers/food/snacks/sushi - name = "sushi" - desc = "A small, neatly wrapped morsel. Itadakimasu!" - icon = 'icons/obj/sushi.dmi' - icon_state = "sushi_rice" - bitesize = 1 - var/fish_type = "fish" - -/obj/item/reagent_containers/food/snacks/sushi/New(var/newloc, var/obj/item/reagent_containers/food/snacks/rice, var/obj/item/reagent_containers/food/snacks/topping) - - ..(newloc) - - if(istype(topping)) - for(var/taste_thing in topping.nutriment_desc) - if(!nutriment_desc[taste_thing]) nutriment_desc[taste_thing] = 0 - nutriment_desc[taste_thing] += topping.nutriment_desc[taste_thing] - if(istype(topping, /obj/item/reagent_containers/food/snacks/sashimi)) - var/obj/item/reagent_containers/food/snacks/sashimi/sashimi = topping - fish_type = sashimi.fish_type - else if(istype(topping, /obj/item/reagent_containers/food/snacks/meat/chicken)) - fish_type = "chicken" - else if(istype(topping, /obj/item/reagent_containers/food/snacks/friedegg)) - fish_type = "egg" - else if(istype(topping, /obj/item/reagent_containers/food/snacks/tofu)) - fish_type = "tofu" - else if(istype(topping, /obj/item/reagent_containers/food/snacks/rawcutlet) || istype(topping, /obj/item/reagent_containers/food/snacks/cutlet)) - fish_type = "meat" - - if(topping.reagents) - topping.reagents.trans_to(src, topping.reagents.total_volume) - - var/mob/M = topping.loc - if(istype(M)) M.drop_from_inventory(topping) - qdel(topping) - - if(istype(rice)) - if(rice.reagents) - rice.reagents.trans_to(src, 1) - if(!rice.reagents || !rice.reagents.total_volume) - var/mob/M = rice.loc - if(istype(M)) M.drop_from_inventory(rice) - qdel(rice) - update_icon() - -/obj/item/reagent_containers/food/snacks/sushi/on_update_icon() - name = "[fish_type] sushi" - overlays = list("[fish_type]", "nori") - -///////////// -// SASHIMI // -///////////// -/obj/item/reagent_containers/food/snacks/sashimi - name = "sashimi" - icon = 'icons/obj/sushi.dmi' - desc = "Thinly sliced raw fish. Tasty." - icon_state = "sashimi" - gender = PLURAL - bitesize = 1 - var/fish_type = "fish" - var/slices = 1 - - -/obj/item/reagent_containers/food/snacks/sashimi/Initialize(mapload, _fish_type) - . = ..() - if (_fish_type) - fish_type = _fish_type - name = "[fish_type] sashimi" - update_icon() - - -/obj/item/reagent_containers/food/snacks/sashimi/on_update_icon() - icon_state = "sashimi_base" - var/list/adding = list() - var/slice_offset = (slices-1)*2 - for(var/slice = 1 to slices) - var/image/I = image(icon = icon, icon_state = "sashimi") - I.pixel_x = slice_offset-((slice-1)*4) - I.pixel_y = I.pixel_x - adding += I - overlays = adding - -/obj/item/reagent_containers/food/snacks/sashimi/attackby(var/obj/item/I, var/mob/user) - if(!(locate(/obj/structure/table) in loc)) - return ..() - - // Add more slices. - if(istype(I, /obj/item/reagent_containers/food/snacks/sashimi)) - var/obj/item/reagent_containers/food/snacks/sashimi/other_sashimi = I - if(slices + other_sashimi.slices > 5) - to_chat(user, "Show some restraint, would you?") - return - if(!user.unEquip(I)) - return - slices += other_sashimi.slices - bitesize = slices - update_icon() - if(I.reagents) - I.reagents.trans_to(src, I.reagents.total_volume) - qdel(I) - return - - // Make sushi. - if(istype(I, /obj/item/reagent_containers/food/snacks/boiledrice)) - if(slices > 1) - to_chat(user, "Putting more than one slice of fish on your sushi is just greedy.") - else - if(!user.unEquip(I)) - return - new /obj/item/reagent_containers/food/snacks/sushi(get_turf(src), I, src) - return - . = ..() - - // Used for turning rice into sushi. -/obj/item/reagent_containers/food/snacks/boiledrice/attackby(var/obj/item/I, var/mob/user) - if((locate(/obj/structure/table) in loc)) - if(istype(I, /obj/item/reagent_containers/food/snacks/sashimi)) - var/obj/item/reagent_containers/food/snacks/sashimi/sashimi = I - if(sashimi.slices > 1) - to_chat(user, "Putting more than one slice of fish on your sushi is just greedy.") - else - new /obj/item/reagent_containers/food/snacks/sushi(get_turf(src), src, I) - return - if(istype(I, /obj/item/reagent_containers/food/snacks/friedegg) || \ - istype(I, /obj/item/reagent_containers/food/snacks/tofu) || \ - istype(I, /obj/item/reagent_containers/food/snacks/cutlet) || \ - istype(I, /obj/item/reagent_containers/food/snacks/rawcutlet) || \ - istype(I, /obj/item/reagent_containers/food/snacks/spider) || \ - istype(I, /obj/item/reagent_containers/food/snacks/meat/chicken)) - new /obj/item/reagent_containers/food/snacks/sushi(get_turf(src), src, I) - return - . = ..() -// Used for turning other food into sushi. -/obj/item/reagent_containers/food/snacks/friedegg/attackby(var/obj/item/I, var/mob/user) - if((locate(/obj/structure/table) in loc) && istype(I, /obj/item/reagent_containers/food/snacks/boiledrice)) - new /obj/item/reagent_containers/food/snacks/sushi(get_turf(src), I, src) - return - . = ..() -/obj/item/reagent_containers/food/snacks/tofu/attackby(var/obj/item/I, var/mob/user) - if((locate(/obj/structure/table) in loc) && istype(I, /obj/item/reagent_containers/food/snacks/boiledrice)) - new /obj/item/reagent_containers/food/snacks/sushi(get_turf(src), I, src) - return - . = ..() -/obj/item/reagent_containers/food/snacks/rawcutlet/attackby(var/obj/item/I, var/mob/user) - if((locate(/obj/structure/table) in loc) && istype(I, /obj/item/reagent_containers/food/snacks/boiledrice)) - new /obj/item/reagent_containers/food/snacks/sushi(get_turf(src), I, src) - return - . = ..() -/obj/item/reagent_containers/food/snacks/cutlet/attackby(var/obj/item/I, var/mob/user) - if((locate(/obj/structure/table) in loc) && istype(I, /obj/item/reagent_containers/food/snacks/boiledrice)) - new /obj/item/reagent_containers/food/snacks/sushi(get_turf(src), I, src) - return - . = ..() -// End non-fish sushi. \ No newline at end of file diff --git a/code/modules/reagents/reagent_containers/glass.dm b/code/modules/reagents/reagent_containers/glass.dm deleted file mode 100644 index ba8cd7c1ad6f3..0000000000000 --- a/code/modules/reagents/reagent_containers/glass.dm +++ /dev/null @@ -1,354 +0,0 @@ - -//////////////////////////////////////////////////////////////////////////////// -/// (Mixing)Glass. -//////////////////////////////////////////////////////////////////////////////// -/obj/item/reagent_containers/glass - name = " " - var/base_name = " " - desc = "" - icon = 'icons/obj/chemical.dmi' - icon_state = "null" - item_state = "null" - amount_per_transfer_from_this = 10 - possible_transfer_amounts = "5;10;15;25;30;60" - volume = 60 - w_class = ITEM_SIZE_SMALL - atom_flags = ATOM_FLAG_OPEN_CONTAINER - unacidable = TRUE - - - var/list/can_be_placed_into = list( - /obj/machinery/chem_master, - /obj/machinery/chem_master/condimaster, - /obj/machinery/chemical_dispenser, - /obj/machinery/reagentgrinder, - /obj/structure/table, - /obj/structure/closet, - /obj/structure/hygiene/sink, - /obj/item/storage, - /obj/machinery/atmospherics/unary/cryo_cell, - /obj/item/grenade/chem_grenade, - /mob/living/bot/medbot, - /obj/item/storage/secure/safe, - /obj/structure/iv_drip, - /obj/machinery/disposal, - /mob/living/simple_animal/passive/cow, - /mob/living/simple_animal/hostile/retaliate/goat, - /obj/machinery/sleeper, - /obj/machinery/smartfridge, - /obj/machinery/biogenerator, - /obj/machinery/constructable_frame, - /obj/machinery/radiocarbon_spectrometer - ) - -/obj/item/reagent_containers/glass/New() - ..() - base_name = name - -/obj/item/reagent_containers/glass/examine(mob/user, distance) - . = ..() - if(distance > 2) - return - - if(reagents && reagents.reagent_list.len) - to_chat(user, "It contains [reagents.total_volume] units of liquid.") - else - to_chat(user, "It is empty.") - if(!is_open_container()) - to_chat(user, "The airtight lid seals it completely.") - -/obj/item/reagent_containers/glass/attack_self() - ..() - if(is_open_container()) - to_chat(usr, "You put the lid on \the [src].") - atom_flags ^= ATOM_FLAG_OPEN_CONTAINER - else - to_chat(usr, "You take the lid off \the [src].") - atom_flags |= ATOM_FLAG_OPEN_CONTAINER - update_icon() - -/obj/item/reagent_containers/glass/attack(mob/M as mob, mob/user as mob, def_zone) - if(force && !(item_flags & ITEM_FLAG_NO_BLUDGEON) && user.a_intent == I_HURT) - return ..() - if(standard_feed_mob(user, M)) - return - return 0 - -/obj/item/reagent_containers/glass/standard_feed_mob(var/mob/user, var/mob/target) - if(!is_open_container()) - to_chat(user, "You need to open \the [src] first.") - return 1 - if(user.a_intent == I_HURT) - return 1 - return ..() - -/obj/item/reagent_containers/glass/self_feed_message(var/mob/user) - to_chat(user, "You swallow a gulp from \the [src].") - if(user.has_personal_goal(/datum/goal/achievement/specific_object/drink)) - for(var/datum/reagent/R in reagents.reagent_list) - user.update_personal_goal(/datum/goal/achievement/specific_object/drink, R.type) - -/obj/item/reagent_containers/glass/throw_impact(atom/hit_atom) - if (QDELETED(src)) - return - if (!LAZYISIN(matter, MATERIAL_GLASS)) - return - - if (prob(80)) - if (reagents.reagent_list.len > 0) - visible_message( - SPAN_DANGER("\The [src] shatters from the impact and spills all its contents!"), - SPAN_DANGER("You hear the sound of glass shattering!") - ) - reagents.splash(hit_atom, reagents.total_volume) - else - visible_message( - SPAN_DANGER("\The [src] shatters from the impact!"), - SPAN_DANGER("You hear the sound of glass shattering!") - ) - playsound(src.loc, pick(GLOB.shatter_sound), 100) - new /obj/item/material/shard(src.loc) - qdel(src) - else - if (reagents.reagent_list.len > 0) - visible_message( - SPAN_DANGER("\The [src] bounces and spills all its contents!"), - SPAN_WARNING("You hear the sound of glass hitting something.") - ) - reagents.splash(hit_atom, reagents.total_volume) - else - visible_message( - SPAN_WARNING("\The [src] bounces dangerously. Luckily it didn't break."), - SPAN_WARNING("You hear the sound of glass hitting something.") - ) - playsound(src.loc, "sound/effects/Glasshit.ogg", 50) - -/obj/item/reagent_containers/glass/afterattack(obj/target, mob/user, proximity) - if (!proximity || (target.type in can_be_placed_into) || standard_dispenser_refill(user, target) || standard_pour_into(user, target)) - return TRUE - splashtarget(target, user) - - -/obj/item/reagent_containers/glass/beaker - name = "beaker" - desc = "A beaker." - icon = 'icons/obj/chemical.dmi' - icon_state = "beaker" - item_state = "beaker" - center_of_mass = "x=15;y=10" - matter = list(MATERIAL_GLASS = 500) - - -/obj/item/reagent_containers/glass/beaker/New() - ..() - desc += " It can hold up to [volume] units." - - -/obj/item/reagent_containers/glass/beaker/on_reagent_change() - update_icon() - - -/obj/item/reagent_containers/glass/beaker/pickup(mob/user) - ..() - update_icon() - -/obj/item/reagent_containers/glass/beaker/dropped(mob/user) - ..() - update_icon() - - -/obj/item/reagent_containers/glass/beaker/attack_hand() - ..() - update_icon() - - -/obj/item/reagent_containers/glass/beaker/on_update_icon() - overlays.Cut() - if (reagents.total_volume) - var/image/filling = image('icons/obj/reagentfillings.dmi', src, "[icon_state]10") - var/percent = round((reagents.total_volume / volume) * 100) - switch(percent) - if (0 to 9) - filling.icon_state = "[icon_state]-10" - if (10 to 24) - filling.icon_state = "[icon_state]10" - if (25 to 49) - filling.icon_state = "[icon_state]25" - if (50 to 74) - filling.icon_state = "[icon_state]50" - if (75 to 79) - filling.icon_state = "[icon_state]75" - if (80 to 90) - filling.icon_state = "[icon_state]80" - if (91 to INFINITY) - filling.icon_state = "[icon_state]100" - filling.color = reagents.get_color() - overlays += filling - if (!is_open_container()) - var/image/lid = image(icon, src, "lid_[initial(icon_state)]") - overlays += lid - - -/obj/item/reagent_containers/glass/beaker/large - name = "large beaker" - desc = "A large beaker." - icon_state = "beakerlarge" - center_of_mass = "x=16;y=10" - matter = list(MATERIAL_GLASS = 5000) - volume = 120 - amount_per_transfer_from_this = 10 - possible_transfer_amounts = "5;10;15;25;30;60;120" - atom_flags = ATOM_FLAG_OPEN_CONTAINER - -/obj/item/reagent_containers/glass/beaker/bowl - name = "mixing bowl" - desc = "A large mixing bowl." - icon = 'icons/obj/kitchen.dmi' - icon_state = "mixingbowl" - center_of_mass = "x=16;y=10" - matter = list(MATERIAL_STEEL = 300) - volume = 180 - amount_per_transfer_from_this = 10 - possible_transfer_amounts = "5;10;15;25;30;60;180" - atom_flags = ATOM_FLAG_OPEN_CONTAINER - unacidable = FALSE - -/obj/item/reagent_containers/glass/beaker/noreact - name = "cryostasis beaker" - desc = "A cryostasis beaker that allows for chemical storage without reactions." - icon_state = "beakernoreact" - center_of_mass = "x=16;y=8" - matter = list(MATERIAL_GLASS = 500) - volume = 60 - amount_per_transfer_from_this = 10 - atom_flags = ATOM_FLAG_NO_TEMP_CHANGE | ATOM_FLAG_OPEN_CONTAINER | ATOM_FLAG_NO_REACT - -/obj/item/reagent_containers/glass/beaker/bluespace - name = "bluespace beaker" - desc = "A bluespace beaker, powered by experimental bluespace technology." - icon_state = "beakerbluespace" - center_of_mass = "x=16;y=10" - matter = list(MATERIAL_GLASS = 5000) - volume = 300 - amount_per_transfer_from_this = 10 - possible_transfer_amounts = "5;10;15;25;30;60;120;150;200;250;300" - atom_flags = ATOM_FLAG_OPEN_CONTAINER - -/obj/item/reagent_containers/glass/beaker/vial - name = "vial" - desc = "A small glass vial." - icon_state = "vial" - center_of_mass = "x=15;y=8" - matter = list(MATERIAL_GLASS = 250) - volume = 30 - w_class = ITEM_SIZE_TINY //half the volume of a bottle, half the size - amount_per_transfer_from_this = 10 - possible_transfer_amounts = "5;10;15;30" - atom_flags = ATOM_FLAG_OPEN_CONTAINER - -/obj/item/reagent_containers/glass/beaker/insulated - name = "insulated beaker" - desc = "A glass beaker surrounded with black insulation." - icon_state = "insulated" - center_of_mass = "x=15;y=8" - matter = list(MATERIAL_GLASS = 500, MATERIAL_PLASTIC = 250) - possible_transfer_amounts = "5;10;15;30" - atom_flags = null - temperature_coefficient = 1 - -/obj/item/reagent_containers/glass/beaker/insulated/large - name = "large insulated beaker" - icon_state = "insulatedlarge" - center_of_mass = "x=16;y=10" - matter = list(MATERIAL_GLASS = 5000, MATERIAL_PLASTIC = 2500) - volume = 120 - - -/obj/item/reagent_containers/glass/beaker/cryoxadone/New() - ..() - reagents.add_reagent(/datum/reagent/cryoxadone, 30) - update_icon() - - -/obj/item/reagent_containers/glass/beaker/sulphuric/New() - ..() - reagents.add_reagent(/datum/reagent/acid, 60) - update_icon() - - -/obj/item/reagent_containers/glass/bucket - name = "bucket" - desc = "It's a bucket." - icon = 'icons/obj/janitor.dmi' - icon_state = "bucket" - item_state = "bucket" - center_of_mass = "x=16;y=9" - matter = list(MATERIAL_PLASTIC = 280) - w_class = ITEM_SIZE_NORMAL - amount_per_transfer_from_this = 20 - possible_transfer_amounts = "10;20;30;60;120;150;180" - volume = 180 - atom_flags = ATOM_FLAG_OPEN_CONTAINER - unacidable = FALSE - -/obj/item/reagent_containers/glass/bucket/wood - name = "bucket" - desc = "It's a wooden bucket. How rustic." - icon_state = "wbucket" - item_state = "wbucket" - matter = list(MATERIAL_WOOD = 280) - volume = 200 - -/obj/item/reagent_containers/glass/bucket/attackby(var/obj/D, mob/user as mob) - if(istype(D, /obj/item/mop)) - if(reagents.total_volume < 1) - to_chat(user, "\The [src] is empty!") - else - reagents.trans_to_obj(D, 5) - to_chat(user, "You wet \the [D] in \the [src].") - playsound(loc, 'sound/effects/slosh.ogg', 25, 1) - return - else - return ..() - -/obj/item/reagent_containers/glass/bucket/on_update_icon() - overlays.Cut() - if (!is_open_container()) - var/image/lid = image(icon, src, "lid_[initial(icon_state)]") - overlays += lid - else if(reagents.total_volume && round((reagents.total_volume / volume) * 100) > 80) - var/image/filling = image('icons/obj/reagentfillings.dmi', src, "bucket") - filling.color = reagents.get_color() - overlays += filling - -/* -/obj/item/reagent_containers/glass/blender_jug - name = "Blender Jug" - desc = "A blender jug, part of a blender." - icon = 'icons/obj/kitchen.dmi' - icon_state = "blender_jug_e" - volume = 100 - - on_reagent_change() - switch(src.reagents.total_volume) - if(0) - icon_state = "blender_jug_e" - if(1 to 75) - icon_state = "blender_jug_h" - if(76 to 100) - icon_state = "blender_jug_f" - -/obj/item/reagent_containers/glass/canister //not used apparantly - desc = "It's a canister. Mainly used for transporting fuel." - name = "canister" - icon = 'icons/obj/tank.dmi' - icon_state = "canister" - item_state = "canister" - m_amt = 300 - g_amt = 0 - w_class = ITEM_SIZE_HUGE - - amount_per_transfer_from_this = 20 - possible_transfer_amounts = "10;20;30;60" - volume = 120 -*/ diff --git a/code/modules/reagents/reagent_containers/glass/bottle.dm b/code/modules/reagents/reagent_containers/glass/bottle.dm deleted file mode 100644 index 23633c1b87a77..0000000000000 --- a/code/modules/reagents/reagent_containers/glass/bottle.dm +++ /dev/null @@ -1,340 +0,0 @@ -/obj/item/reagent_containers/glass/bottle - name = "bottle" - desc = "A small bottle." - icon = 'icons/obj/chemical.dmi' - icon_state = null - item_state = "atoxinbottle" - randpixel = 7 - center_of_mass = "x=15;y=10" - amount_per_transfer_from_this = 10 - possible_transfer_amounts = "5;10;15;25;30;60" - w_class = ITEM_SIZE_SMALL - item_flags = 0 - obj_flags = 0 - volume = 60 - - -/obj/item/reagent_containers/glass/bottle/on_reagent_change() - update_icon() - - -/obj/item/reagent_containers/glass/bottle/pickup(mob/user) - ..() - update_icon() - - -/obj/item/reagent_containers/glass/bottle/dropped(mob/user) - ..() - update_icon() - - -/obj/item/reagent_containers/glass/bottle/attack_hand() - ..() - update_icon() - - -/obj/item/reagent_containers/glass/bottle/New() - ..() - if (!icon_state) - icon_state = "bottle-[rand(1,4)]" - - -/obj/item/reagent_containers/glass/bottle/on_update_icon() - overlays.Cut() - if (reagents.total_volume && (icon_state == "bottle-1" || icon_state == "bottle-2" || icon_state == "bottle-3" || icon_state == "bottle-4")) - var/image/filling = image('icons/obj/reagentfillings.dmi', src, "[icon_state]10") - var/percent = round((reagents.total_volume / volume) * 100) - switch (percent) - if (0 to 9) - filling.icon_state = "[icon_state]--10" - if (10 to 24) - filling.icon_state = "[icon_state]-10" - if (25 to 49) - filling.icon_state = "[icon_state]-25" - if (50 to 74) - filling.icon_state = "[icon_state]-50" - if (75 to 79) - filling.icon_state = "[icon_state]-75" - if (80 to 90) - filling.icon_state = "[icon_state]-80" - if (91 to INFINITY) - filling.icon_state = "[icon_state]-100" - filling.color = reagents.get_color() - overlays += filling - if (!is_open_container()) - var/image/lid = image(icon, src, "lid_bottle") - overlays += lid - - -/obj/item/reagent_containers/glass/bottle/inaprovaline - name = "inaprovaline bottle" - desc = "A small bottle. Contains inaprovaline - used to stabilize patients." - icon = 'icons/obj/chemical.dmi' - icon_state = "bottle-4" - - -/obj/item/reagent_containers/glass/bottle/inaprovaline/New() - ..() - reagents.add_reagent(/datum/reagent/inaprovaline, 60) - update_icon() - - -/obj/item/reagent_containers/glass/bottle/kelotane - name = "kelotane bottle" - desc = "A small bottle. Contains kelotane - used to treat burns." - icon = 'icons/obj/chemical.dmi' - icon_state = "bottle-4" - - -/obj/item/reagent_containers/glass/bottle/kelotane/New() - ..() - reagents.add_reagent(/datum/reagent/kelotane, 60) - update_icon() - - -/obj/item/reagent_containers/glass/bottle/dexalin - name = "dexalin bottle" - desc = "A small bottle. Contains dexalin - used to treat oxygen deprivation." - icon = 'icons/obj/chemical.dmi' - icon_state = "bottle-4" - - -/obj/item/reagent_containers/glass/bottle/dexalin/New() - ..() - reagents.add_reagent(/datum/reagent/dexalin, 60) - update_icon() - - -/obj/item/reagent_containers/glass/bottle/toxin - name = "toxin bottle" - desc = "A small bottle of toxins. Do not drink, it is poisonous." - icon = 'icons/obj/chemical.dmi' - icon_state = "bottle-3" - - -/obj/item/reagent_containers/glass/bottle/toxin/New() - ..() - reagents.add_reagent(/datum/reagent/toxin, 60) - update_icon() - - -/obj/item/reagent_containers/glass/bottle/cyanide - name = "cyanide bottle" - desc = "A small bottle of cyanide. Bitter almonds?" - icon = 'icons/obj/chemical.dmi' - icon_state = "bottle-3" - - -/obj/item/reagent_containers/glass/bottle/cyanide/New() - ..() - reagents.add_reagent(/datum/reagent/toxin/cyanide, 30) //volume changed to match chloral - update_icon() - - -/obj/item/reagent_containers/glass/bottle/stoxin - name = "soporific bottle" - desc = "A small bottle of soporific. Just the fumes make you sleepy." - icon = 'icons/obj/chemical.dmi' - icon_state = "bottle-3" - - -/obj/item/reagent_containers/glass/bottle/stoxin/New() - ..() - reagents.add_reagent(/datum/reagent/soporific, 60) - update_icon() - - -/obj/item/reagent_containers/glass/bottle/chloralhydrate - name = "Chloral Hydrate Bottle" - desc = "A small bottle of Choral Hydrate. Mickey's Favorite!" - icon = 'icons/obj/chemical.dmi' - icon_state = "bottle-3" - - -/obj/item/reagent_containers/glass/bottle/chloralhydrate/New() - ..() - reagents.add_reagent(/datum/reagent/chloralhydrate, 30) //Intentionally low since it is so strong. Still enough to knock someone out. - update_icon() - - -/obj/item/reagent_containers/glass/bottle/antitoxin - name = "dylovene bottle" - desc = "A small bottle of dylovene. Counters poisons, and repairs damage. A wonder drug." - icon = 'icons/obj/chemical.dmi' - icon_state = "bottle-4" - - -/obj/item/reagent_containers/glass/bottle/antitoxin/New() - ..() - reagents.add_reagent(/datum/reagent/dylovene, 60) - update_icon() - - -/obj/item/reagent_containers/glass/bottle/mutagen - name = "unstable mutagen bottle" - desc = "A small bottle of unstable mutagen. Randomly changes the DNA structure of whoever comes in contact." - icon = 'icons/obj/chemical.dmi' - icon_state = "bottle-1" - - -/obj/item/reagent_containers/glass/bottle/mutagen/New() - ..() - reagents.add_reagent(/datum/reagent/mutagen, 60) - update_icon() - - -/obj/item/reagent_containers/glass/bottle/ammonia - name = "ammonia bottle" - desc = "A small bottle." - icon = 'icons/obj/chemical.dmi' - icon_state = "bottle-1" - - -/obj/item/reagent_containers/glass/bottle/ammonia/New() - ..() - reagents.add_reagent(/datum/reagent/ammonia, 60) - update_icon() - - -/obj/item/reagent_containers/glass/bottle/eznutrient - name = "\improper EZ NUtrient bottle" - desc = "A small bottle." - icon = 'icons/obj/chemical.dmi' - icon_state = "bottle-4" - - -/obj/item/reagent_containers/glass/bottle/eznutrient/New() - ..() - reagents.add_reagent(/datum/reagent/toxin/fertilizer/eznutrient, 60) - update_icon() - - -/obj/item/reagent_containers/glass/bottle/left4zed - name = "\improper Left-4-Zed bottle" - desc = "A small bottle." - icon = 'icons/obj/chemical.dmi' - icon_state = "bottle-4" - - -/obj/item/reagent_containers/glass/bottle/left4zed/New() - ..() - reagents.add_reagent(/datum/reagent/toxin/fertilizer/left4zed, 60) - update_icon() - - -/obj/item/reagent_containers/glass/bottle/robustharvest - name = "\improper Robust Harvest" - desc = "A small bottle." - icon = 'icons/obj/chemical.dmi' - icon_state = "bottle-4" - - -/obj/item/reagent_containers/glass/bottle/robustharvest/New() - ..() - reagents.add_reagent(/datum/reagent/toxin/fertilizer/robustharvest, 60) - update_icon() - - -/obj/item/reagent_containers/glass/bottle/diethylamine - name = "diethylamine bottle" - desc = "A small bottle." - icon = 'icons/obj/chemical.dmi' - icon_state = "bottle-4" - - -/obj/item/reagent_containers/glass/bottle/diethylamine/New() - ..() - reagents.add_reagent(/datum/reagent/diethylamine, 60) - update_icon() - - -/obj/item/reagent_containers/glass/bottle/pacid - name = "Polytrinic Acid Bottle" - desc = "A small bottle. Contains a small amount of Polytrinic Acid." - icon = 'icons/obj/chemical.dmi' - icon_state = "bottle-4" - - -/obj/item/reagent_containers/glass/bottle/pacid/New() - ..() - reagents.add_reagent(/datum/reagent/acid/polyacid, 60) - update_icon() - - -/obj/item/reagent_containers/glass/bottle/adminordrazine - name = "Adminordrazine Bottle" - desc = "A small bottle. Contains the liquid essence of the gods." - icon = 'icons/obj/drinks.dmi' - icon_state = "holyflask" - - -/obj/item/reagent_containers/glass/bottle/adminordrazine/New() - ..() - reagents.add_reagent(/datum/reagent/adminordrazine, 60) - update_icon() - - -/obj/item/reagent_containers/glass/bottle/capsaicin - name = "Capsaicin Bottle" - desc = "A small bottle. Contains hot sauce." - icon = 'icons/obj/chemical.dmi' - icon_state = "bottle-4" - - -/obj/item/reagent_containers/glass/bottle/capsaicin/New() - ..() - reagents.add_reagent(/datum/reagent/capsaicin, 60) - update_icon() - - -/obj/item/reagent_containers/glass/bottle/frostoil - name = "Chilly Oil Bottle" - desc = "A small bottle. Contains cold sauce." - icon = 'icons/obj/chemical.dmi' - icon_state = "bottle-4" - - -/obj/item/reagent_containers/glass/bottle/frostoil/New() - ..() - reagents.add_reagent(/datum/reagent/frostoil, 60) - update_icon() - -/obj/item/reagent_containers/glass/bottle/dye - name = "dye bottle" - desc = "A little bottle used to hold dye or food coloring, with a narrow bottleneck for handling small amounts." - icon = 'icons/obj/chemical.dmi' - icon_state = "bottle-1" - amount_per_transfer_from_this = 1 - possible_transfer_amounts = "1;2;5;10;15;25;30;60" - var/datum/reagent/starting_reagent = /datum/reagent/dye - var/starting_vol = 60 - - -/obj/item/reagent_containers/glass/bottle/dye/Initialize() - . = ..() - reagents.add_reagent(starting_reagent, starting_vol) - update_icon() - - -/obj/item/reagent_containers/glass/bottle/dye/polychromic - name = "polychromic dye bottle" - desc = "A little bottle used to hold dye or food coloring, with a narrow bottleneck for handling small amounts. \ - Outfitted with a tiny mechanism that can change the color of its contained dye, opening up infinite possibilities." - - -/obj/item/reagent_containers/glass/bottle/dye/polychromic/attack_self(mob/living/user) - var/datum/reagent/heldDye = reagents.get_reagent(starting_reagent) - if (!heldDye) - to_chat(user, "\The [src] isn't holding any dye!") - return - var/new_color = input(user, "Choose the dye's new color.", "[name]") as color|null - if (!new_color || !Adjacent(user)) - return - to_chat(user, SPAN_NOTICE("The dye in \the [src] swirls and takes on a new color.")) - heldDye.color = new_color - update_icon() - - -/obj/item/reagent_containers/glass/bottle/dye/polychromic/strong - starting_reagent = /datum/reagent/dye/strong - starting_vol = 15 diff --git a/code/modules/reagents/reagent_containers/glass/bottle/robot.dm b/code/modules/reagents/reagent_containers/glass/bottle/robot.dm deleted file mode 100644 index 02e0c46e2140b..0000000000000 --- a/code/modules/reagents/reagent_containers/glass/bottle/robot.dm +++ /dev/null @@ -1,33 +0,0 @@ - -/obj/item/reagent_containers/glass/bottle/robot - amount_per_transfer_from_this = 10 - possible_transfer_amounts = "5;10;15;25;30;50;100" - atom_flags = ATOM_FLAG_OPEN_CONTAINER - volume = 60 - var/reagent = "" - - -/obj/item/reagent_containers/glass/bottle/robot/inaprovaline - name = "internal inaprovaline bottle" - desc = "A small bottle. Contains inaprovaline - used to stabilize patients." - icon = 'icons/obj/chemical.dmi' - icon_state = "bottle-4" - reagent = /datum/reagent/inaprovaline - -/obj/item/reagent_containers/glass/bottle/robot/inaprovaline/New() - ..() - reagents.add_reagent(/datum/reagent/inaprovaline, 60) - update_icon() - - -/obj/item/reagent_containers/glass/bottle/robot/antitoxin - name = "internal anti-toxin bottle" - desc = "A small bottle of Anti-toxins. Counters poisons, and repairs damage, a wonder drug." - icon = 'icons/obj/chemical.dmi' - icon_state = "bottle-4" - reagent = /datum/reagent/dylovene - -/obj/item/reagent_containers/glass/bottle/robot/antitoxin/New() - ..() - reagents.add_reagent(/datum/reagent/dylovene, 60) - update_icon() diff --git a/code/modules/reagents/reagent_containers/hypospray.dm b/code/modules/reagents/reagent_containers/hypospray.dm deleted file mode 100644 index 301fd29e26a96..0000000000000 --- a/code/modules/reagents/reagent_containers/hypospray.dm +++ /dev/null @@ -1,264 +0,0 @@ -//////////////////////////////////////////////////////////////////////////////// -/// HYPOSPRAY -//////////////////////////////////////////////////////////////////////////////// - -/obj/item/reagent_containers/hypospray //obsolete, use hypospray/vial for the actual hypospray item - name = "hypospray" - desc = "The DeForest Medical Corporation, a subsidiary of Zeng-Hu Pharmaceuticals, hypospray is a sterile, air-needle autoinjector for rapid administration of drugs to patients." - icon = 'icons/obj/syringe.dmi' - item_state = "hypo" - icon_state = "hypo" - origin_tech = list(TECH_MATERIAL = 4, TECH_BIO = 5) - amount_per_transfer_from_this = 5 - unacidable = TRUE - volume = 30 - possible_transfer_amounts = null - atom_flags = ATOM_FLAG_OPEN_CONTAINER - slot_flags = SLOT_BELT - - // autoinjectors takes less time than a normal syringe (overriden for hypospray). - // This delay is only applied when injecting concious mobs, and is not applied for self-injection - // The 1.9 factor scales it so it takes the following number of seconds: - // NONE 1.47 - // BASIC 1.00 - // ADEPT 0.68 - // EXPERT 0.53 - // PROF 0.39 - var/time = (1 SECONDS) / 1.9 - var/single_use = TRUE // autoinjectors are not refillable (overriden for hypospray) - -/obj/item/reagent_containers/hypospray/attack(mob/living/M, mob/user) - if(!reagents.total_volume) - to_chat(user, "[src] is empty.") - return - if (!istype(M)) - return - - var/allow = M.can_inject(user, check_zone(user.zone_sel.selecting)) - if(!allow) - return - - if (allow == INJECTION_PORT) - if(M != user) - user.visible_message(SPAN_WARNING("\The [user] begins hunting for an injection port on \the [M]'s suit!")) - else - to_chat(user, SPAN_NOTICE("You begin hunting for an injection port on your suit.")) - if(!user.do_skilled(INJECTION_PORT_DELAY, SKILL_MEDICAL, M, do_flags = DO_MEDICAL)) - return - - user.setClickCooldown(DEFAULT_QUICK_COOLDOWN) - user.do_attack_animation(M) - - if(user != M && !M.incapacitated() && time) // you're injecting someone else who is concious, so apply the device's intrisic delay - to_chat(user, SPAN_WARNING("\The [user] is trying to inject \the [M] with \the [name].")) - if(!user.do_skilled(time, SKILL_MEDICAL, M, do_flags = DO_MEDICAL)) - return - - if(single_use && reagents.total_volume <= 0) // currently only applies to autoinjectors - atom_flags &= ~ATOM_FLAG_OPEN_CONTAINER // Prevents autoinjectors to be refilled. - - to_chat(user, SPAN_NOTICE("You inject [M] with [src].")) - if(ishuman(M)) - var/mob/living/carbon/human/H = M - H.custom_pain(SPAN_WARNING("You feel a tiny prick!"), 1, TRUE, H.get_organ(user.zone_sel.selecting)) - - playsound(src, 'sound/effects/hypospray.ogg',25) - user.visible_message("[user] injects [M] with [src].") - - if(M.reagents) - var/should_admin_log = reagents.should_admin_log() - var/contained = reagentlist() - var/trans = reagents.trans_to_mob(M, amount_per_transfer_from_this, CHEM_BLOOD) - if (should_admin_log) - admin_inject_log(user, M, src, contained, trans) - to_chat(user, "[trans] units injected. [reagents.total_volume] units remaining in \the [src].") - - return - -/obj/item/reagent_containers/hypospray/vial - name = "hypospray" - item_state = "autoinjector" - desc = "The DeForest Medical Corporation, a subsidiary of Zeng-Hu Pharmaceuticals, hypospray is a sterile, air-needle autoinjector for rapid administration of drugs to patients. Uses a replacable 30u vial." - var/obj/item/reagent_containers/glass/beaker/vial/loaded_vial - possible_transfer_amounts = "1;2;5;10;15;20;30" - amount_per_transfer_from_this = 5 - volume = 0 - time = 0 // hyposprays are instant for conscious people - single_use = FALSE - -/obj/item/reagent_containers/hypospray/vial/New() - ..() - loaded_vial = new /obj/item/reagent_containers/glass/beaker/vial(src) - volume = loaded_vial.volume - reagents.maximum_volume = loaded_vial.reagents.maximum_volume - -/obj/item/reagent_containers/hypospray/vial/proc/remove_vial(mob/user, swap_mode) - if(!loaded_vial) - return - reagents.trans_to_holder(loaded_vial.reagents,volume) - reagents.maximum_volume = 0 - loaded_vial.update_icon() - user.put_in_hands(loaded_vial) - loaded_vial = null - if (swap_mode != "swap") // if swapping vials, we will print a different message in another proc - to_chat(user, "You remove the vial from the [src].") - -/obj/item/reagent_containers/hypospray/vial/attack_hand(mob/user) - if(user.get_inactive_hand() == src) - if(!loaded_vial) - to_chat(user, "There is no vial loaded in the [src].") - return - remove_vial(user) - update_icon() - playsound(loc, 'sound/weapons/flipblade.ogg', 50, 1) - return - return ..() - -/obj/item/reagent_containers/hypospray/vial/attackby(obj/item/W, mob/user) - var/usermessage = "" - if(istype(W, /obj/item/reagent_containers/glass/beaker/vial)) - if(!do_after(user, 1 SECOND, src, DO_PUBLIC_UNIQUE) || !(W in user)) - return 0 - if(!user.unEquip(W, src)) - return - if(loaded_vial) - remove_vial(user, "swap") - usermessage = "You load \the [W] into \the [src] as you remove the old one." - else - usermessage = "You load \the [W] into \the [src]." - if(W.is_open_container()) - W.atom_flags ^= ATOM_FLAG_OPEN_CONTAINER - W.update_icon() - loaded_vial = W - reagents.maximum_volume = loaded_vial.reagents.maximum_volume - loaded_vial.reagents.trans_to_holder(reagents,volume) - user.visible_message("[user] has loaded [W] into \the [src].","[usermessage]") - update_icon() - playsound(src.loc, 'sound/weapons/empty.ogg', 50, 1) - return - ..() - -/obj/item/reagent_containers/hypospray/vial/afterattack(obj/target, mob/user, proximity) // hyposprays can be dumped into, why not out? uses standard_pour_into helper checks. - if(!proximity) - return - if (!reagents.total_volume && istype(target, /obj/item/reagent_containers/glass)) - var/good_target = is_type_in_list(target, list( - /obj/item/reagent_containers/glass/beaker, - /obj/item/reagent_containers/glass/bottle - )) - if (!good_target) - return - if (!target.is_open_container()) - to_chat(user, SPAN_ITALIC("\The [target] is closed.")) - return - if (!target.reagents?.total_volume) - to_chat(user, SPAN_ITALIC("\The [target] is empty.")) - return - var/trans = target.reagents.trans_to_obj(src, amount_per_transfer_from_this) - to_chat(user, SPAN_NOTICE("You fill \the [src] with [trans] units of the solution.")) - return - standard_pour_into(user, target) - -/obj/item/reagent_containers/hypospray/autoinjector - name = "autoinjector" - desc = "A rapid and safe way to administer small amounts of drugs by untrained or trained personnel." - icon_state = "injector" - item_state = "autoinjector" - amount_per_transfer_from_this = 5 - volume = 5 - origin_tech = list(TECH_MATERIAL = 2, TECH_BIO = 2) - slot_flags = SLOT_BELT | SLOT_EARS - w_class = ITEM_SIZE_TINY - var/list/starts_with = list(/datum/reagent/inaprovaline = 5) - var/band_color = COLOR_CYAN - -/obj/item/reagent_containers/hypospray/autoinjector/New() - ..() - for(var/T in starts_with) - reagents.add_reagent(T, starts_with[T]) - update_icon() - return - -/obj/item/reagent_containers/hypospray/autoinjector/attack(mob/M as mob, mob/user as mob) - ..() - update_icon() - -/obj/item/reagent_containers/hypospray/autoinjector/on_update_icon() - overlays.Cut() - if(reagents.total_volume > 0) - icon_state = "[initial(icon_state)]1" - else - icon_state = "[initial(icon_state)]0" - overlays+= overlay_image(icon,"injector_band",band_color,RESET_COLOR) - -/obj/item/reagent_containers/hypospray/autoinjector/examine(mob/user) - . = ..(user) - if(reagents && reagents.reagent_list.len) - to_chat(user, "It is currently loaded.") - else - to_chat(user, "It is spent.") - -/obj/item/reagent_containers/hypospray/autoinjector/detox - name = "autoinjector (antitox)" - band_color = COLOR_GREEN - starts_with = list(/datum/reagent/dylovene = 5) - -/obj/item/reagent_containers/hypospray/autoinjector/pain - name = "autoinjector (painkiller)" - band_color = COLOR_PURPLE - starts_with = list(/datum/reagent/tramadol = 5) - -//from infinity -/obj/item/reagent_containers/hypospray/autoinjector/brute - name = "autoinjector (anti-injury)" - band_color = COLOR_RED - starts_with = list(/datum/reagent/bicaridine = 5) - -/obj/item/reagent_containers/hypospray/autoinjector/burn - name = "autoinjector (anti-burn)" - band_color = COLOR_DARK_ORANGE - starts_with = list(/datum/reagent/kelotane = 5) - -/obj/item/reagent_containers/hypospray/autoinjector/inaprovaline - name = "autoinjector (inaprovaline)" - band_color = COLOR_CYAN - starts_with = list(/datum/reagent/inaprovaline = 5) -//end from infinity - -/obj/item/reagent_containers/hypospray/autoinjector/combatpain - name = "autoinjector (oxycodone)" - band_color = COLOR_DARK_GRAY - starts_with = list(/datum/reagent/tramadol/oxycodone = 5) - -/obj/item/reagent_containers/hypospray/autoinjector/antirad - name = "autoinjector (anti-rad)" - band_color = COLOR_AMBER - starts_with = list(/datum/reagent/hyronalin = 5) - -/obj/item/reagent_containers/hypospray/autoinjector/mindbreaker - name = "autoinjector" - band_color = COLOR_DARK_GRAY - starts_with = list(/datum/reagent/mindbreaker = 5) - -/obj/item/reagent_containers/hypospray/autoinjector/combatstim - name ="autoinjector (combat Stimulants)" - band_color = COLOR_RED - volume = 15 - amount_per_transfer_from_this = 15 - starts_with = list(/datum/reagent/inaprovaline = 10, /datum/reagent/hyperzine = 3, /datum/reagent/synaptizine = 1) - -/obj/item/reagent_containers/hypospray/autoinjector/coagulant - name ="autoinjector (coagulant)" - band_color = COLOR_RED - starts_with = list(/datum/reagent/coagulant = 1, /datum/reagent/nanoblood = 4) - -/obj/item/reagent_containers/hypospray/autoinjector/dexalin_plus - name ="autoinjector (dexalin plus)" - band_color = COLOR_BLUE - starts_with = list(/datum/reagent/dexalinp = 5) - -/obj/item/reagent_containers/hypospray/autoinjector/empty - name = "autoinjector" - band_color = COLOR_WHITE - starts_with = list() - matter = list(MATERIAL_PLASTIC = 150, MATERIAL_GLASS = 50) diff --git a/code/modules/reagents/reagent_containers/pill.dm b/code/modules/reagents/reagent_containers/pill.dm deleted file mode 100644 index 5559ab3242f24..0000000000000 --- a/code/modules/reagents/reagent_containers/pill.dm +++ /dev/null @@ -1,397 +0,0 @@ -//////////////////////////////////////////////////////////////////////////////// -/// Pills. -//////////////////////////////////////////////////////////////////////////////// -/obj/item/reagent_containers/pill - name = "pill" - desc = "A pill." - icon = 'icons/obj/chemical.dmi' - icon_state = null - item_state = "pill" - randpixel = 7 - possible_transfer_amounts = null - w_class = ITEM_SIZE_TINY - slot_flags = SLOT_EARS - volume = 30 - -/obj/item/reagent_containers/pill/New() - ..() - if(!icon_state) - icon_state = "pill[rand(1, 5)]" //preset pills only use colour changing or unique icons - -/obj/item/reagent_containers/pill/attack(mob/M as mob, mob/user as mob, def_zone) - //TODO: replace with standard_feed_mob() call. - - if(M == user) - if(!M.can_eat(src)) - return - - M.visible_message(SPAN_NOTICE("[M] swallows a pill."), SPAN_NOTICE("You swallow \the [src]."), null, 2) - if(reagents.total_volume) - reagents.trans_to_mob(M, reagents.total_volume, CHEM_INGEST) - qdel(src) - return 1 - - else if(istype(M, /mob/living/carbon/human)) - if(!M.can_force_feed(user, src)) - return - - user.visible_message(SPAN_WARNING("[user] attempts to force [M] to swallow \the [src].")) - user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN) - if(!do_after(user, 3 SECONDS, M, DO_MEDICAL)) - return - - if (user.get_active_hand() != src) - return - - user.visible_message(SPAN_WARNING("[user] forces [M] to swallow \the [src].")) - var/contained = reagentlist() - if (reagents.should_admin_log()) - admin_attack_log(user, M, "Fed the victim with [name] (Reagents: [contained])", "Was fed [src] (Reagents: [contained])", "used [src] (Reagents: [contained]) to feed") - if(reagents.total_volume) - reagents.trans_to_mob(M, reagents.total_volume, CHEM_INGEST) - qdel(src) - return 1 - - return 0 - -/obj/item/reagent_containers/pill/afterattack(obj/target, mob/user, proximity) - if(!proximity) return - - if(target.is_open_container() && target.reagents) - if(!target.reagents.total_volume) - to_chat(user, "[target] is empty. Can't dissolve \the [src].") - return - to_chat(user, "You dissolve \the [src] in [target].") - - if (reagents.should_admin_log()) - admin_attacker_log(user, "spiked \a [target] with a pill. Reagents: [reagentlist()]") - reagents.trans_to(target, reagents.total_volume) - for(var/mob/O in viewers(2, user)) - O.show_message("[user] puts something in \the [target].", 1) - qdel(src) - return - -//////////////////////////////////////////////////////////////////////////////// -/// Pills. END -//////////////////////////////////////////////////////////////////////////////// - -//We lied - it's pills all the way down -/obj/item/reagent_containers/pill/antitox - name = "Dylovene (25u)" - desc = "Neutralizes many common toxins." - icon_state = "pill1" -/obj/item/reagent_containers/pill/antitox/New() - ..() - reagents.add_reagent(/datum/reagent/dylovene, 25) - color = reagents.get_color() - - -/obj/item/reagent_containers/pill/tox - name = "toxins pill" - desc = "Highly toxic." - icon_state = "pill4" - volume = 50 -/obj/item/reagent_containers/pill/tox/New() - ..() - reagents.add_reagent(/datum/reagent/toxin, 50) - color = reagents.get_color() - - -/obj/item/reagent_containers/pill/cyanide - name = "cyanide pill" - desc = "It's marked 'KCN'. Smells vaguely of almonds." - icon_state = "pillC" - volume = 50 -/obj/item/reagent_containers/pill/cyanide/New() - ..() - reagents.add_reagent(/datum/reagent/toxin/cyanide, 50) - - -/obj/item/reagent_containers/pill/adminordrazine - name = "Adminordrazine pill" - desc = "It's magic. We don't have to explain it." - icon_state = "pillA" - -/obj/item/reagent_containers/pill/adminordrazine/Initialize() - . = ..() - reagents.add_reagent(/datum/reagent/adminordrazine, 1) - -/obj/item/reagent_containers/pill/stox - name = "Soporific (15u)" - desc = "Commonly used to treat insomnia." - icon_state = "pill3" -/obj/item/reagent_containers/pill/stox/New() - ..() - reagents.add_reagent(/datum/reagent/soporific, 15) - color = reagents.get_color() - - -/obj/item/reagent_containers/pill/kelotane - name = "Kelotane (15u)" - desc = "Used to treat burns." - icon_state = "pill2" -/obj/item/reagent_containers/pill/kelotane/New() - ..() - reagents.add_reagent(/datum/reagent/kelotane, 15) - color = reagents.get_color() - - -/obj/item/reagent_containers/pill/paracetamol - name = "Paracetamol (15u)" - desc = "A painkiller for the ages. Chewables!" - icon_state = "pill3" -/obj/item/reagent_containers/pill/paracetamol/New() - ..() - reagents.add_reagent(/datum/reagent/paracetamol, 15) - color = reagents.get_color() - - -/obj/item/reagent_containers/pill/tramadol - name = "Tramadol (15u)" - desc = "A simple painkiller." - icon_state = "pill3" -/obj/item/reagent_containers/pill/tramadol/New() - ..() - reagents.add_reagent(/datum/reagent/tramadol, 15) - color = reagents.get_color() - - -/obj/item/reagent_containers/pill/inaprovaline - name = "Inaprovaline (30u)" - desc = "Used to stabilize patients." - icon_state = "pill1" -/obj/item/reagent_containers/pill/inaprovaline/New() - ..() - reagents.add_reagent(/datum/reagent/inaprovaline, 30) - color = reagents.get_color() - - -/obj/item/reagent_containers/pill/dexalin - name = "Dexalin (15u)" - desc = "Used to treat oxygen deprivation." - icon_state = "pill1" -/obj/item/reagent_containers/pill/dexalin/New() - ..() - reagents.add_reagent(/datum/reagent/dexalin, 15) - color = reagents.get_color() - - -/obj/item/reagent_containers/pill/dexalin_plus - name = "Dexalin Plus (15u)" - desc = "Used to treat extreme oxygen deprivation." - icon_state = "pill2" -/obj/item/reagent_containers/pill/dexalin_plus/New() - ..() - reagents.add_reagent(/datum/reagent/dexalinp, 15) - color = reagents.get_color() - - -/obj/item/reagent_containers/pill/dermaline - name = "Dermaline (15u)" - desc = "Used to treat burn wounds." - icon_state = "pill2" -/obj/item/reagent_containers/pill/dermaline/New() - ..() - reagents.add_reagent(/datum/reagent/dermaline, 15) - color = reagents.get_color() - - -/obj/item/reagent_containers/pill/dylovene - name = "Dylovene (15u)" - desc = "A broad-spectrum anti-toxin." - icon_state = "pill1" -/obj/item/reagent_containers/pill/dylovene/New() - ..() - reagents.add_reagent(/datum/reagent/dylovene, 15) - color = reagents.get_color() - - -/obj/item/reagent_containers/pill/bicaridine - name = "Bicaridine (20u)" - desc = "Used to treat physical injuries." - icon_state = "pill2" -/obj/item/reagent_containers/pill/bicaridine/New() - ..() - reagents.add_reagent(/datum/reagent/bicaridine, 20) - color = reagents.get_color() - - -/obj/item/reagent_containers/pill/happy - name = "happy pill" - desc = "Happy happy joy joy!" - icon_state = "pill4" -/obj/item/reagent_containers/pill/happy/New() - ..() - reagents.add_reagent(/datum/reagent/space_drugs, 15) - reagents.add_reagent(/datum/reagent/sugar, 15) - color = reagents.get_color() - - -/obj/item/reagent_containers/pill/zoom - name = "zoom pill" - desc = "Zoooom!" - icon_state = "pill4" -/obj/item/reagent_containers/pill/zoom/New() - ..() - reagents.add_reagent(/datum/reagent/impedrezene, 10) - reagents.add_reagent(/datum/reagent/synaptizine, 5) - reagents.add_reagent(/datum/reagent/hyperzine, 5) - color = reagents.get_color() - -/obj/item/reagent_containers/pill/three_eye - name = "strange pill" - desc = "The surface of this unlabelled pill crawls against your skin." - icon_state = "pill2" - -/obj/item/reagent_containers/pill/three_eye/Initialize() - . = ..() - reagents.add_reagent(/datum/reagent/three_eye, 10) - color = reagents.get_color() - -/obj/item/reagent_containers/pill/spaceacillin - name = "Spaceacillin (10u)" - desc = "Contains antiviral agents." - icon_state = "pill3" -/obj/item/reagent_containers/pill/spaceacillin/New() - ..() - reagents.add_reagent(/datum/reagent/spaceacillin, 10) - color = reagents.get_color() - - -/obj/item/reagent_containers/pill/diet - name = "diet pill" - desc = "Guaranteed to get you slim!" - icon_state = "pill4" -/obj/item/reagent_containers/pill/diet/New() - ..() - reagents.add_reagent(/datum/reagent/lipozine, 2) - color = reagents.get_color() - - -/obj/item/reagent_containers/pill/noexcutite - name = "Noexcutite (15u)" - desc = "Feeling jittery? This should calm you down." - icon_state = "pill4" -/obj/item/reagent_containers/pill/noexcutite/New() - ..() - reagents.add_reagent(/datum/reagent/noexcutite, 15) - color = reagents.get_color() - - -/obj/item/reagent_containers/pill/antidexafen - name = "Antidexafen (15u)" - desc = "Common cold mediciation. Safe for babies!" - icon_state = "pill4" -/obj/item/reagent_containers/pill/antidexafen/New() - ..() - reagents.add_reagent(/datum/reagent/antidexafen, 10) - reagents.add_reagent(/datum/reagent/drink/juice/lemon, 5) - reagents.add_reagent(/datum/reagent/menthol, REM*0.2) - color = reagents.get_color() - -//Psychiatry pills. -/obj/item/reagent_containers/pill/methylphenidate - name = "Methylphenidate (15u)" - desc = "Improves the ability to concentrate." - icon_state = "pill2" -/obj/item/reagent_containers/pill/methylphenidate/New() - ..() - reagents.add_reagent(/datum/reagent/methylphenidate, 15) - color = reagents.get_color() - - -/obj/item/reagent_containers/pill/citalopram - name = "Citalopram (15u)" - desc = "Mild anti-depressant." - icon_state = "pill4" -/obj/item/reagent_containers/pill/citalopram/New() - ..() - reagents.add_reagent(/datum/reagent/citalopram, 15) - color = reagents.get_color() - - -/obj/item/reagent_containers/pill/paroxetine - name = "Paroxetine (10u)" - desc = "Before you swallow a bullet: try swallowing this!" - icon_state = "pill4" -/obj/item/reagent_containers/pill/paroxetine/New() - ..() - reagents.add_reagent(/datum/reagent/paroxetine, 10) - color = reagents.get_color() - - -/obj/item/reagent_containers/pill/hyronalin - name = "Hyronalin (7u)" - desc = "Used to treat radiation poisoning." - icon_state = "pill1" -/obj/item/reagent_containers/pill/hyronalin/New() - ..() - reagents.add_reagent(/datum/reagent/hyronalin, 7) - color = reagents.get_color() - -/obj/item/reagent_containers/pill/antirad - name = "AntiRad" - desc = "Used to treat radiation poisoning." - icon_state = "yellow" -/obj/item/reagent_containers/pill/antirad/New() - ..() - reagents.add_reagent(/datum/reagent/hyronalin, 5) - reagents.add_reagent(/datum/reagent/dylovene, 10) - - -/obj/item/reagent_containers/pill/sugariron - name = "Sugar-Iron (10u)" - desc = "Used to help the body naturally replenish blood." - icon_state = "pill1" -/obj/item/reagent_containers/pill/sugariron/New() - ..() - reagents.add_reagent(/datum/reagent/iron, 5) - reagents.add_reagent(/datum/reagent/sugar, 5) - color = reagents.get_color() - -/obj/item/reagent_containers/pill/detergent - name = "detergent pod" - desc = "Put in water to get space cleaner. Do not eat. Really." - icon_state = "pod21" - var/smell_clean_time = 10 MINUTES - -/obj/item/reagent_containers/pill/detergent/New() - ..() - reagents.add_reagent(/datum/reagent/ammonia, 30) - -/obj/item/reagent_containers/pill/pod - name = "master flavorpod item" - desc = "A cellulose pod containing some kind of flavoring." - icon_state = "pill4" - -/obj/item/reagent_containers/pill/pod/cream - name = "creamer pod" - -/obj/item/reagent_containers/pill/pod/cream/New() - ..() - reagents.add_reagent(/datum/reagent/drink/milk, 5) - color = reagents.get_color() - -/obj/item/reagent_containers/pill/pod/cream_soy - name = "non-dairy creamer pod" - -/obj/item/reagent_containers/pill/pod/cream_soy/New() - ..() - reagents.add_reagent(/datum/reagent/drink/milk/soymilk, 5) - color = reagents.get_color() - -/obj/item/reagent_containers/pill/pod/orange - name = "orange flavorpod" - -/obj/item/reagent_containers/pill/pod/orange/New() - ..() - reagents.add_reagent(/datum/reagent/drink/juice/orange, 5) - color = reagents.get_color() - -/obj/item/reagent_containers/pill/pod/mint - name = "mint flavorpod" - -/obj/item/reagent_containers/pill/pod/mint/New() - ..() - reagents.add_reagent(/datum/reagent/nutriment/mint, 1) //mint is used as a catalyst in all reactions as of writing - color = reagents.get_color() diff --git a/code/modules/reagents/reagent_containers/spray.dm b/code/modules/reagents/reagent_containers/spray.dm deleted file mode 100644 index a7c44fc10454c..0000000000000 --- a/code/modules/reagents/reagent_containers/spray.dm +++ /dev/null @@ -1,226 +0,0 @@ -/obj/item/reagent_containers/spray - name = "spray bottle" - desc = "A spray bottle, with an unscrewable top." - icon = 'icons/obj/janitor.dmi' - icon_state = "cleaner" - item_state = "cleaner" - item_flags = ITEM_FLAG_NO_BLUDGEON - atom_flags = ATOM_FLAG_OPEN_CONTAINER - slot_flags = SLOT_BELT - throwforce = 3 - w_class = ITEM_SIZE_SMALL - throw_speed = 2 - throw_range = 10 - amount_per_transfer_from_this = 10 - unacidable = TRUE - possible_transfer_amounts = "5;10" //Set to null instead of list, if there is only one. - var/spray_size = 3 - var/list/spray_sizes = list(1,3) - var/step_delay = 10 // lower is faster - volume = 250 - -/obj/item/reagent_containers/spray/New() - ..() - src.verbs -= /obj/item/reagent_containers/verb/set_amount_per_transfer_from_this - -/obj/item/reagent_containers/spray/afterattack(atom/A as mob|obj, mob/user as mob, proximity) - if(istype(A, /obj/item/storage) || istype(A, /obj/structure/table) || istype(A, /obj/structure/closet) || istype(A, /obj/item/reagent_containers) || istype(A, /obj/structure/hygiene/sink) || istype(A, /obj/structure/janitorialcart)) - return - - if(istype(A, /spell)) - return - - if(proximity) - if(standard_dispenser_refill(user, A)) - return - - if(reagents.total_volume < amount_per_transfer_from_this) - to_chat(user, "\The [src] is empty!") - return - - Spray_at(A, user, proximity) - - user.setClickCooldown(DEFAULT_QUICK_COOLDOWN) - return - -/obj/item/reagent_containers/spray/proc/Spray_at(atom/A as mob|obj, mob/user as mob, proximity) - playsound(src.loc, 'sound/effects/spray2.ogg', 50, 1, -6) - if (reagents.should_admin_log()) - var/contained = reagents.get_reagents() - if (istype(A, /mob)) - admin_attack_log(user, A, "Used \the [src] containing [contained] to spray the victim", "Was sprayed by \the [src] containing [contained]", "used \the [src] containing [contained] to spray") - else - admin_attacker_log(user, "Used \the [name] containing [contained] to spray \the [A]") - if (A.density && proximity) - reagents.splash(A, amount_per_transfer_from_this) - if(A == user) - A.visible_message("\The [user] sprays themselves with \the [src].") - else - A.visible_message("\The [user] sprays \the [A] with \the [src].") - else - spawn(0) - var/obj/effect/effect/water/chempuff/D = new/obj/effect/effect/water/chempuff(get_turf(src)) - var/turf/my_target = get_turf(A) - D.create_reagents(amount_per_transfer_from_this) - if(!src) - return - reagents.trans_to_obj(D, amount_per_transfer_from_this) - D.set_color() - D.set_up(my_target, spray_size, step_delay) - return - -/obj/item/reagent_containers/spray/attack_self(var/mob/user) - if(!possible_transfer_amounts) - return - amount_per_transfer_from_this = next_in_list(amount_per_transfer_from_this, cached_number_list_decode(possible_transfer_amounts)) - spray_size = next_in_list(spray_size, spray_sizes) - to_chat(user, "You adjusted the pressure nozzle. You'll now use [amount_per_transfer_from_this] units per spray.") - -/obj/item/reagent_containers/spray/examine(mob/user, distance) - . = ..() - if(distance == 0 && loc == user) - to_chat(user, "[round(reagents.total_volume)] unit\s left.") - -/obj/item/reagent_containers/spray/verb/empty() - - set name = "Empty Spray Bottle" - set category = "Object" - set src in usr - - if (alert(usr, "Are you sure you want to empty that?", "Empty Bottle:", "Yes", "No") != "Yes") - return - if(isturf(usr.loc)) - to_chat(usr, "You empty \the [src] onto the floor.") - reagents.splash(usr.loc, reagents.total_volume) - -//space cleaner -/obj/item/reagent_containers/spray/cleaner - name = "space cleaner" - desc = "BLAM!-brand non-foaming space cleaner!" - step_delay = 6 - -/obj/item/reagent_containers/spray/cleaner/New() - ..() - reagents.add_reagent(/datum/reagent/space_cleaner, volume) - -/obj/item/reagent_containers/spray/sterilizine - name = "sterilizine" - desc = "Great for hiding incriminating bloodstains and sterilizing scalpels." - -/obj/item/reagent_containers/spray/sterilizine/New() - ..() - reagents.add_reagent(/datum/reagent/sterilizine, volume) - -/obj/item/reagent_containers/spray/hair_remover - name = "hair remover" - desc = "Very effective at removing hair, feathers, spines and horns." - -/obj/item/reagent_containers/spray/hair_remover/New() - ..() - reagents.add_reagent(/datum/reagent/toxin/hair_remover, volume) - -/obj/item/reagent_containers/spray/pepper - name = "pepperspray" - desc = "Manufactured by Uhang Inc., it fires a mist of condensed capsaicin to blind and down an opponent quickly." - icon = 'icons/obj/weapons/other.dmi' - icon_state = "pepperspray" - item_state = "pepperspray" - possible_transfer_amounts = null - volume = 60 - var/safety = 1 - step_delay = 1 - -/obj/item/reagent_containers/spray/pepper/New() - ..() - reagents.add_reagent(/datum/reagent/capsaicin/condensed, 60) - -/obj/item/reagent_containers/spray/pepper/examine(mob/user, distance) - . = ..() - if(distance <= 1) - to_chat(user, "The safety is [safety ? "on" : "off"].") - -/obj/item/reagent_containers/spray/pepper/attack_self(var/mob/user) - safety = !safety - to_chat(usr, "You switch the safety [safety ? "on" : "off"].") - -/obj/item/reagent_containers/spray/pepper/Spray_at(atom/A as mob|obj) - if(safety) - to_chat(usr, "The safety is on!") - return - ..() - -/obj/item/reagent_containers/spray/waterflower - name = "water flower" - desc = "A seemingly innocent sunflower...with a twist." - icon = 'icons/obj/sunflower.dmi' - icon_state = "sunflower" - item_state = "sunflower" - amount_per_transfer_from_this = 1 - possible_transfer_amounts = null - volume = 10 - -/obj/item/reagent_containers/spray/waterflower/New() - ..() - reagents.add_reagent(/datum/reagent/water, 10) - -/obj/item/reagent_containers/spray/chemsprayer - name = "chem sprayer" - desc = "A utility used to spray large amounts of reagent in a given area." - icon = 'icons/obj/weapons/other.dmi' - icon_state = "chemsprayer" - item_state = "chemsprayer" - throwforce = 3 - w_class = ITEM_SIZE_LARGE - possible_transfer_amounts = null - volume = 600 - origin_tech = list(TECH_COMBAT = 3, TECH_MATERIAL = 3, TECH_ENGINEERING = 3) - step_delay = 8 - -/obj/item/reagent_containers/spray/chemsprayer/Spray_at(atom/A as mob|obj) - var/direction = get_dir(src, A) - var/turf/T = get_turf(A) - var/turf/T1 = get_step(T,turn(direction, 90)) - var/turf/T2 = get_step(T,turn(direction, -90)) - var/list/the_targets = list(T, T1, T2) - - for(var/a = 1 to 3) - spawn(0) - if(reagents.total_volume < 1) break - var/obj/effect/effect/water/chempuff/D = new/obj/effect/effect/water/chempuff(get_turf(src)) - var/turf/my_target = the_targets[a] - D.create_reagents(amount_per_transfer_from_this) - if(!src) - return - reagents.trans_to_obj(D, amount_per_transfer_from_this) - D.set_color() - D.set_up(my_target, rand(6, 8), 2) - return - -/obj/item/reagent_containers/spray/plantbgone - name = "Plant-B-Gone" - desc = "Kills those pesky weeds!" - icon = 'icons/obj/hydroponics_machines.dmi' - icon_state = "plantbgone" - item_state = "plantbgone" - volume = 100 - -/obj/item/reagent_containers/spray/plantbgone/New() - ..() - reagents.add_reagent(/datum/reagent/toxin/plantbgone, 100) - -/obj/item/reagent_containers/spray/plantbgone/afterattack(atom/A as mob|obj, mob/user as mob, proximity) - if(!proximity) return - - if(istype(A, /obj/effect/blob)) // blob damage in blob code - return - - ..() - -/obj/item/reagent_containers/spray/cleaner/deodorant - name = "deodorant" - desc = "A can of Gold Standard spray deodorant - for when you're too lazy to shower." - gender = PLURAL - volume = 35 - icon = 'icons/obj/items.dmi' - icon_state = "deodorant" - item_state = "deodorant" diff --git a/code/modules/reagents/reagent_containers/syringes.dm b/code/modules/reagents/reagent_containers/syringes.dm deleted file mode 100644 index 97a37e7d67863..0000000000000 --- a/code/modules/reagents/reagent_containers/syringes.dm +++ /dev/null @@ -1,430 +0,0 @@ -//////////////////////////////////////////////////////////////////////////////// -/// Syringes. -//////////////////////////////////////////////////////////////////////////////// -#define SYRINGE_DRAW 0 -#define SYRINGE_INJECT 1 -#define SYRINGE_BROKEN 2 - -/obj/item/reagent_containers/syringe - name = "syringe" - desc = "A syringe." - icon = 'icons/obj/syringe.dmi' - item_state = "rg0" - icon_state = "rg" - matter = list(MATERIAL_GLASS = 150) - amount_per_transfer_from_this = 5 - possible_transfer_amounts = "1;2;5" - volume = 15 - w_class = ITEM_SIZE_TINY - slot_flags = SLOT_EARS - sharp = TRUE - unacidable = TRUE - var/mode = SYRINGE_DRAW - var/image/filling //holds a reference to the current filling overlay - var/visible_name = "a syringe" - var/time = 30 - -/obj/item/reagent_containers/syringe/Initialize(var/mapload) - . = ..() - update_icon() - -/obj/item/reagent_containers/syringe/on_reagent_change() - update_icon() - -/obj/item/reagent_containers/syringe/pickup(mob/user) - ..() - update_icon() - -/obj/item/reagent_containers/syringe/dropped(mob/user) - ..() - update_icon() - -/obj/item/reagent_containers/syringe/attack_self(mob/user as mob) - switch(mode) - if(SYRINGE_DRAW) - mode = SYRINGE_INJECT - if(SYRINGE_INJECT) - mode = SYRINGE_DRAW - if(SYRINGE_BROKEN) - return - update_icon() - -/obj/item/reagent_containers/syringe/attack_hand() - ..() - update_icon() - -/obj/item/reagent_containers/syringe/attackby(obj/item/I as obj, mob/user as mob) - return - -/obj/item/reagent_containers/syringe/afterattack(obj/target, mob/user, proximity) - if(!proximity) - return - - if(mode == SYRINGE_BROKEN) - to_chat(user, "This syringe is broken.") - return - - if(istype(target, /obj/structure/closet/body_bag)) - handleBodyBag(target, user) - return - - if(!target.reagents) - return - - if((user.a_intent == I_HURT) && ismob(target)) - syringestab(target, user) - return - - handleTarget(target, user) - -/obj/item/reagent_containers/syringe/on_update_icon() - overlays.Cut() - underlays.Cut() - - if(mode == SYRINGE_BROKEN) - icon_state = "broken" - return - - var/rounded_vol = clamp(round((reagents.total_volume / volume * 15),5), 5, 15) - if (reagents.total_volume == 0) - rounded_vol = 0 - if(ismob(loc)) - var/injoverlay - switch(mode) - if (SYRINGE_DRAW) - injoverlay = "draw" - if (SYRINGE_INJECT) - injoverlay = "inject" - overlays += injoverlay - icon_state = "[initial(icon_state)][rounded_vol]" - item_state = "syringe_[rounded_vol]" - - if(reagents.total_volume) - filling = image('icons/obj/reagentfillings.dmi', src, "syringe10") - - filling.icon_state = "syringe[rounded_vol]" - - filling.color = reagents.get_color() - underlays += filling - -/obj/item/reagent_containers/syringe/proc/handleTarget(var/atom/target, var/mob/user) - switch(mode) - if(SYRINGE_DRAW) - drawReagents(target, user) - - if(SYRINGE_INJECT) - injectReagents(target, user) - -/obj/item/reagent_containers/syringe/proc/drawReagents(var/atom/target, var/mob/user) - if(!reagents.get_free_space()) - to_chat(user, "The syringe is full.") - mode = SYRINGE_INJECT - return - - if(ismob(target))//Blood! - if(reagents.has_reagent(/datum/reagent/blood)) - to_chat(user, "There is already a blood sample in this syringe.") - return - if(istype(target, /mob/living/carbon)) - if(istype(target, /mob/living/carbon/slime)) - to_chat(user, "You are unable to locate any blood.") - return - var/amount = min(reagents.get_free_space(), amount_per_transfer_from_this) - var/mob/living/carbon/T = target - if(!T.dna) - to_chat(user, "You are unable to locate any blood.") - if(istype(target, /mob/living/carbon/human)) - CRASH("[T] \[[T.type]\] was missing their dna datum!") - return - - - var/allow = T.can_inject(user, check_zone(user.zone_sel.selecting)) - if(!allow) - return - - if(allow == INJECTION_PORT) // Taking a blood sample through a hardsuit takes longer due to needing to find a port first. - if(target != user) - user.visible_message(SPAN_WARNING("\The [user] begins hunting for an injection port on \the [target]'s suit!")) - else - to_chat(user, SPAN_NOTICE("You begin hunting for an injection port on your suit.")) - if(!user.do_skilled(INJECTION_PORT_DELAY, SKILL_MEDICAL, target, do_flags = DO_MEDICAL)) - return - - if (!reagents) - return - - if(target != user) - user.visible_message(SPAN_WARNING("\The [user] is trying to take a blood sample from \the [target].")) - else - to_chat(user, SPAN_NOTICE("You start trying to take a blood sample from yourself.")) - - if(prob(user.skill_fail_chance(SKILL_MEDICAL, 60, SKILL_BASIC))) - to_chat(user, "You miss the vein!") - var/target_zone = check_zone(user.zone_sel.selecting) - T.apply_damage(3, DAMAGE_BRUTE, target_zone, damage_flags=DAMAGE_FLAG_SHARP) - return - - user.setClickCooldown(DEFAULT_QUICK_COOLDOWN) - user.do_attack_animation(target) - - if(!user.do_skilled(time, SKILL_MEDICAL, target, do_flags = DO_MEDICAL)) - return - - if (!reagents) - return - - T.take_blood(src, amount) - to_chat(user, "You take a blood sample from [target].") - for(var/mob/O in viewers(4, user)) - O.show_message("[user] takes a blood sample from [target].", 1) - - if(ishuman(target)) - var/mob/living/carbon/human/H = target - H.custom_pain(SPAN_WARNING("The needle stings a bit."), 2, TRUE, H.get_organ(user.zone_sel.selecting)) - - else //if not mob - if(!target.reagents.total_volume) - to_chat(user, "[target] is empty.") - return - - if(!target.is_open_container() && !istype(target, /obj/structure/reagent_dispensers) && !istype(target, /obj/item/slime_extract)) - to_chat(user, "You cannot directly remove reagents from this object.") - return - - var/trans = target.reagents.trans_to_obj(src, amount_per_transfer_from_this) - to_chat(user, "You fill the syringe with [trans] units of the solution.") - update_icon() - - if(!reagents.get_free_space()) - mode = SYRINGE_INJECT - update_icon() - -/obj/item/reagent_containers/syringe/proc/injectReagents(var/atom/target, var/mob/user) - if(ismob(target) && !user.skill_check(SKILL_MEDICAL, SKILL_BASIC)) - syringestab(target, user) - - if(!reagents?.total_volume) - to_chat(user, "The syringe is empty.") - mode = SYRINGE_DRAW - return - if(istype(target, /obj/item/implantcase/chem)) - return - - if(!target.is_open_container() && !ismob(target) && !istype(target, /obj/item/reagent_containers/food) && !istype(target, /obj/item/slime_extract) && !istype(target, /obj/item/clothing/mask/smokable/cigarette) && !istype(target, /obj/item/storage/fancy/cigarettes)) - to_chat(user, "You cannot directly fill this object.") - return - if(!target.reagents.get_free_space()) - to_chat(user, "[target] is full.") - return - - if(isliving(target)) - injectMob(target, user) - return - - var/trans = reagents.trans_to(target, amount_per_transfer_from_this) - to_chat(user, "You inject \the [target] with [trans] units of the solution. \The [src] now contains [src.reagents.total_volume] units.") - if(reagents.total_volume <= 0 && mode == SYRINGE_INJECT) - mode = SYRINGE_DRAW - update_icon() - -/obj/item/reagent_containers/syringe/proc/handleBodyBag(var/obj/structure/closet/body_bag/bag, var/mob/living/carbon/user) - if(bag.opened || !bag.contains_body) - return - - var/mob/living/L = locate() in bag - if(L) - injectMob(L, user, bag) - -/obj/item/reagent_containers/syringe/proc/injectMob(var/mob/living/carbon/target, var/mob/living/carbon/user, var/atom/trackTarget) - if(!trackTarget) - trackTarget = target - - var/allow = target.can_inject(user, check_zone(user.zone_sel.selecting)) - if(!allow) - return - - if(allow == INJECTION_PORT) // Injecting through a hardsuit takes longer due to needing to find a port first. - if(target != user) - user.visible_message(SPAN_WARNING("\The [user] begins hunting for an injection port on \the [target]'s suit!")) - else - to_chat(user, SPAN_NOTICE("You begin hunting for an injection port on your suit.")) - if(!user.do_skilled(INJECTION_PORT_DELAY, SKILL_MEDICAL, trackTarget, do_flags = DO_MEDICAL)) - return - - if(target != user) - user.visible_message(SPAN_WARNING("\The [user] is trying to inject \the [target] with [visible_name]!")) - else - to_chat(user, SPAN_NOTICE("You begin injecting yourself with [visible_name].")) - - user.setClickCooldown(DEFAULT_QUICK_COOLDOWN) - user.do_attack_animation(trackTarget) - - if(!user.do_skilled(time, SKILL_MEDICAL, trackTarget, do_flags = DO_MEDICAL)) - return - - if(target != user && target != trackTarget && target.loc != trackTarget) - return - if (reagents.should_admin_log()) - admin_inject_log(user, target, src, reagents.get_reagents(), amount_per_transfer_from_this) - var/trans = reagents.trans_to_mob(target, amount_per_transfer_from_this, CHEM_BLOOD) - - if(target != user) - user.visible_message("\the [user] injects \the [target] with [visible_name]!", "You inject \the [target] with [trans] units of the solution. \The [src] now contains [src.reagents.total_volume] units.") - else - to_chat(user, "You inject yourself with [trans] units of the solution. \The [src] now contains [src.reagents.total_volume] units.") - - if(ishuman(target)) - var/mob/living/carbon/human/T = target - T.custom_pain(SPAN_WARNING("The needle stings a bit."), 2, TRUE, T.get_organ(user.zone_sel.selecting)) - - if(reagents.total_volume <= 0 && mode == SYRINGE_INJECT) - mode = SYRINGE_DRAW - update_icon() - -/obj/item/reagent_containers/syringe/proc/syringestab(var/mob/living/carbon/target, var/mob/living/carbon/user) - var/should_admin_log = reagents.should_admin_log() - if(istype(target, /mob/living/carbon/human)) - - var/mob/living/carbon/human/H = target - - var/target_zone = check_zone(user.zone_sel.selecting) - var/obj/item/organ/external/affecting = H.get_organ(target_zone) - - if (!affecting || affecting.is_stump()) - to_chat(user, "They are missing that limb!") - return - - var/hit_area = affecting.name - - if((user != target) && H.check_shields(7, src, user, "\the [src]")) - return - - if (target != user && H.get_blocked_ratio(target_zone, DAMAGE_BRUTE, damage_flags=DAMAGE_FLAG_SHARP) > 0.1 && prob(50)) - for(var/mob/O in viewers(world.view, user)) - O.show_message(text("[user] tries to stab [target] in \the [hit_area] with [src.name], but the attack is deflected by armor!"), 1) - qdel(src) - - admin_attack_log(user, target, "Attacked using \a [src]", "Was attacked with \a [src]", "used \a [src] to attack") - return - - user.visible_message("[user] stabs [target] in \the [hit_area] with [src.name]!") - target.apply_damage(3, DAMAGE_BRUTE, target_zone, damage_flags=DAMAGE_FLAG_SHARP) - - else - user.visible_message("[user] stabs [target] with [src.name]!") - target.apply_damage(3, DAMAGE_BRUTE) - - var/syringestab_amount_transferred = rand(0, (reagents.total_volume - 5)) //nerfed by popular demand - var/trans = reagents.trans_to_mob(target, syringestab_amount_transferred, CHEM_BLOOD) - if(isnull(trans)) trans = 0 - if (should_admin_log) - var/contained_reagents = reagents.get_reagents() - admin_inject_log(user, target, src, contained_reagents, trans, violent=1) - break_syringe(target, user) - -/obj/item/reagent_containers/syringe/proc/break_syringe(mob/living/carbon/target, mob/living/carbon/user) - desc += " It is broken." - mode = SYRINGE_BROKEN - if(target) - add_blood(target) - if(user) - add_fingerprint(user) - update_icon() - -/obj/item/reagent_containers/syringe/ld50_syringe - name = "Lethal Injection Syringe" - desc = "A syringe used for lethal injections." - amount_per_transfer_from_this = 60 - volume = 60 - visible_name = "a giant syringe" - time = 300 - -/obj/item/reagent_containers/syringe/ld50_syringe/syringestab(var/mob/living/carbon/target, var/mob/living/carbon/user) - to_chat(user, "This syringe is too big to stab someone with it.") - return // No instant injecting - -/obj/item/reagent_containers/syringe/ld50_syringe/drawReagents(var/target, var/mob/user) - if(ismob(target)) // No drawing 60 units of blood at once - to_chat(user, "This needle isn't designed for drawing blood.") - return - ..() - -//////////////////////////////////////////////////////////////////////////////// -/// Syringes. END -//////////////////////////////////////////////////////////////////////////////// - -/obj/item/reagent_containers/syringe/inaprovaline - name = "Syringe (inaprovaline)" - desc = "Contains inaprovaline - used to stabilize patients." - -/obj/item/reagent_containers/syringe/inaprovaline/New() - ..() - reagents.add_reagent(/datum/reagent/inaprovaline, 15) - mode = SYRINGE_INJECT - update_icon() - -/obj/item/reagent_containers/syringe/antitoxin - name = "Syringe (anti-toxin)" - desc = "Contains anti-toxins." - -/obj/item/reagent_containers/syringe/antitoxin/New() - ..() - reagents.add_reagent(/datum/reagent/dylovene, 15) - mode = SYRINGE_INJECT - update_icon() - -/obj/item/reagent_containers/syringe/antiviral - name = "Syringe (spaceacillin)" - desc = "Contains antiviral agents." - -/obj/item/reagent_containers/syringe/antiviral/New() - ..() - reagents.add_reagent(/datum/reagent/spaceacillin, 15) - mode = SYRINGE_INJECT - update_icon() - -/obj/item/reagent_containers/syringe/drugs - name = "Syringe (drugs)" - desc = "Contains aggressive drugs meant for torture." - -/obj/item/reagent_containers/syringe/drugs/New() - ..() - reagents.add_reagent(/datum/reagent/space_drugs, 5) - reagents.add_reagent(/datum/reagent/mindbreaker, 5) - reagents.add_reagent(/datum/reagent/cryptobiolin, 5) - mode = SYRINGE_INJECT - update_icon() - -/obj/item/reagent_containers/syringe/ld50_syringe/choral - -/obj/item/reagent_containers/syringe/ld50_syringe/choral/New() - ..() - reagents.add_reagent(/datum/reagent/chloralhydrate, 60) - mode = SYRINGE_INJECT - update_icon() - -/obj/item/reagent_containers/syringe/steroid - name = "Syringe (anabolic steroids)" - desc = "Contains drugs for muscle growth." - -/obj/item/reagent_containers/syringe/steroid/New() - ..() - reagents.add_reagent(/datum/reagent/adrenaline, 5) - reagents.add_reagent(/datum/reagent/hyperzine, 10) - - -// TG ports - -/obj/item/reagent_containers/syringe/bluespace - name = "bluespace syringe" - desc = "An advanced syringe that can hold 60 units of chemicals." - amount_per_transfer_from_this = 20 - volume = 60 - icon_state = "bs" - -/obj/item/reagent_containers/syringe/noreact - name = "cryostasis syringe" - desc = "An advanced syringe that stops reagents inside from reacting. It can hold up to 20 units." - volume = 20 - atom_flags = ATOM_FLAG_NO_TEMP_CHANGE | ATOM_FLAG_NO_REACT - icon_state = "cs" diff --git a/code/modules/reagents/reagent_dispenser.dm b/code/modules/reagents/reagent_dispenser.dm deleted file mode 100644 index 5c5a0acd5d7f4..0000000000000 --- a/code/modules/reagents/reagent_dispenser.dm +++ /dev/null @@ -1,337 +0,0 @@ - -/obj/structure/reagent_dispensers - name = "dispenser" - desc = "..." - icon = 'icons/obj/objects.dmi' - icon_state = "watertank" - density = TRUE - anchored = FALSE - - var/initial_capacity = 1000 - var/initial_reagent_types // A list of reagents and their ratio relative the initial capacity. list(/datum/reagent/water = 0.5) would fill the dispenser halfway to capacity. - var/amount_per_transfer_from_this = 10 - var/possible_transfer_amounts = "10;25;50;100;500" - -/obj/structure/reagent_dispensers/attackby(obj/item/W as obj, mob/user as mob) - return - -/obj/structure/reagent_dispensers/New() - create_reagents(initial_capacity) - - if (!possible_transfer_amounts) - src.verbs -= /obj/structure/reagent_dispensers/verb/set_amount_per_transfer_from_this - - for(var/reagent_type in initial_reagent_types) - var/reagent_ratio = initial_reagent_types[reagent_type] - reagents.add_reagent(reagent_type, reagent_ratio * initial_capacity) - - ..() - -/obj/structure/reagent_dispensers/examine(mob/user, distance) - . = ..() - if(distance > 2) - return - - to_chat(user, "It contains:") - if(reagents && reagents.reagent_list.len) - for(var/datum/reagent/R in reagents.reagent_list) - to_chat(user, "[R.volume] units of [R.name]") - else - to_chat(user, "Nothing.") - -/obj/structure/reagent_dispensers/verb/set_amount_per_transfer_from_this() - set name = "Set transfer amount" - set category = "Object" - set src in view(1) - if(!CanPhysicallyInteract(usr)) - to_chat(usr, "You're in no condition to do that!'") - return - var/N = input("Amount per transfer from this:","[src]") as null|anything in cached_number_list_decode(possible_transfer_amounts) - if(!CanPhysicallyInteract(usr)) // because input takes time and the situation can change - to_chat(usr, "You're in no condition to do that!'") - return - if (N) - amount_per_transfer_from_this = N - -/obj/structure/reagent_dispensers/ex_act(severity) - switch(severity) - if(EX_ACT_DEVASTATING) - qdel(src) - return - if(EX_ACT_HEAVY) - if (prob(50)) - new /obj/effect/effect/water(src.loc) - qdel(src) - return - if(EX_ACT_LIGHT) - if (prob(5)) - new /obj/effect/effect/water(src.loc) - qdel(src) - return - else - return - -/obj/structure/reagent_dispensers/AltClick(var/mob/user) - if(possible_transfer_amounts) - set_amount_per_transfer_from_this() - else - return ..() - - -//Dispensers -/obj/structure/reagent_dispensers/watertank - name = "water tank" - desc = "A tank containing water." - icon = 'icons/obj/objects.dmi' - icon_state = "watertank" - amount_per_transfer_from_this = 10 - var/modded = 0 - var/fill_level = FLUID_SHALLOW // Can be adminbussed for silly room-filling tanks. - possible_transfer_amounts = "10;25;50;100" - initial_capacity = 50000 - initial_reagent_types = list(/datum/reagent/water = 1) - atom_flags = ATOM_FLAG_NO_TEMP_CHANGE | ATOM_FLAG_CLIMBABLE - -/obj/structure/reagent_dispensers/watertank/proc/drain_water() - if(reagents.total_volume <= 0) - return - - // To prevent it from draining while in a container. - if(!isturf(src.loc)) - return - - // Check for depth first, and pass if the water's too high. A four foot high water tank - // cannot jettison water above the level of a grown adult's head! - var/turf/T = get_turf(src) - - if(!T || T.get_fluid_depth() > fill_level) - return - - // For now, this cheats and only checks/leaks water, pending additions to the fluid system. - var/W = reagents.remove_reagent(/datum/reagent/water, amount_per_transfer_from_this * 5) - if(W > 0) - // Artificially increased flow - a 1:1 rate doesn't result in very much water at all. - T.add_fluid(W * 100, /datum/reagent/water) - -/obj/structure/reagent_dispensers/watertank/examine(mob/user) - . = ..() - - if(modded) - to_chat(user, "Someone has wrenched open its tap - it's spilling everywhere!") - -/obj/structure/reagent_dispensers/watertank/attackby(obj/item/W, mob/user) - - src.add_fingerprint(user) - - if((istype(W, /obj/item/robot_parts/l_arm) || istype(W, /obj/item/robot_parts/r_arm)) && user.unEquip(W)) - to_chat(user, "You add \the [W] arm to \the [src].") - qdel(W) - new /obj/item/farmbot_arm_assembly(loc, src) - return - - if(isWrench(W)) - modded = !modded - user.visible_message("\The [user] wrenches \the [src]'s tap [modded ? "open" : "shut"].", \ - "You wrench [src]'s drain [modded ? "open" : "shut"].") - - if (modded) - log_and_message_admins("opened a water tank at [get_area(loc)], leaking water.") - // Allows the water tank to continuously expel water, differing it from the fuel tank. - START_PROCESSING(SSprocessing, src) - else - STOP_PROCESSING(SSprocessing, src) - - return ..() - -/obj/structure/reagent_dispensers/watertank/Process() - if(modded) - drain_water() - -/obj/structure/reagent_dispensers/watertank/Destroy() - . = ..() - - STOP_PROCESSING(SSprocessing, src) - -/obj/structure/reagent_dispensers/fueltank - name = "fuel tank" - desc = "A tank containing welding fuel." - icon = 'icons/obj/objects.dmi' - icon_state = "weldtank" - amount_per_transfer_from_this = 10 - var/modded = 0 - var/obj/item/device/assembly_holder/rig = null - initial_reagent_types = list(/datum/reagent/fuel = 1) - atom_flags = ATOM_FLAG_CLIMBABLE - -/obj/structure/reagent_dispensers/fueltank/examine(mob/user) - . = ..() - - if (modded) - to_chat(user, "The faucet is wrenched open, leaking fuel!") - if(rig) - to_chat(user, "There is some kind of device rigged to the tank.") - -/obj/structure/reagent_dispensers/fueltank/attack_hand() - if (rig) - usr.visible_message("\The [usr] begins to detach \the [rig] from \the [src].", "You begin to detach \the [rig] from \the [src].") - if(do_after(usr, 2 SECONDS, src, DO_PUBLIC_UNIQUE)) - usr.visible_message("\The [usr] detaches \the [rig] from \the [src].", "You detach [rig] from \the [src]") - rig.dropInto(usr.loc) - rig = null - overlays.Cut() - -/obj/structure/reagent_dispensers/fueltank/attackby(obj/item/W as obj, mob/user as mob) - src.add_fingerprint(user) - if (istype(W,/obj/item/wrench)) - user.visible_message("\The [user] wrenches \the [src]'s faucet [modded ? "closed" : "open"].", \ - "You wrench [src]'s faucet [modded ? "closed" : "open"]") - modded = modded ? 0 : 1 - if (modded) - log_and_message_admins("opened a fuel tank at [loc.loc.name], leaking fuel.") - leak_fuel(amount_per_transfer_from_this) - else if (istype(W,/obj/item/device/assembly_holder)) - if (rig) - to_chat(user, "There is another device already in the way.") - return ..() - user.visible_message("\The [user] begins rigging \the [W] to \the [src].", "You begin rigging \the [W] to \the [src]") - if(do_after(user, 2 SECONDS, src, DO_PUBLIC_UNIQUE)) - if(!user.unEquip(W, src)) - return - user.visible_message("\The [user] rigs \the [W] to \the [src].", "You rig \the [W] to \the [src].") - - var/obj/item/device/assembly_holder/H = W - if (istype(H.a_left,/obj/item/device/assembly/igniter) || istype(H.a_right,/obj/item/device/assembly/igniter)) - log_and_message_admins("rigged a fuel tank for explosion at [loc.loc.name].") - rig = W - var/icon/test = getFlatIcon(W) - test.Shift(NORTH,1) - test.Shift(EAST,6) - overlays += test - - else if(isflamesource(W)) - if(user.a_intent != I_HURT) - to_chat(user, "You almost got \the [W] too close to [src]! That could have ended very badly for you.") - return - - user.visible_message("\The [user] draws closer to the fuel tank with \the [W].", "You draw closer to the fuel tank with \the [W].") - if(do_after(user, 5 SECONDS, src, DO_DEFAULT | DO_USER_UNIQUE_ACT)) // No public progress - Leave the people that might try to rush it guessing - log_and_message_admins("triggered a fuel tank explosion with \the [W].") - user.visible_message("\The [user] puts \the [W] to \the [src]!", "You put \the [W] to \the [src] and with a moment of lucidity you realize, this might not have been the smartest thing you've ever done.") - src.explode() - - return - - return ..() - - -/obj/structure/reagent_dispensers/fueltank/bullet_act(var/obj/item/projectile/Proj) - if(Proj.get_structure_damage()) - if(istype(Proj.firer)) - var/turf/turf = get_turf(src) - if(turf) - var/area/area = turf.loc || "*unknown area*" - log_and_message_admins("[key_name_admin(Proj.firer)] shot a fuel tank in \the [area].") - else - log_and_message_admins("shot a fuel tank outside the world.") - - if(!istype(Proj ,/obj/item/projectile/beam/lastertag) && !istype(Proj ,/obj/item/projectile/beam/practice) ) - explode() - -/obj/structure/reagent_dispensers/fueltank/proc/explode() - for(var/datum/reagent/R in reagents.reagent_list) - R.ex_act(src, 1) - qdel(src) - -/obj/structure/reagent_dispensers/fueltank/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume) - if (modded) - explode() - else if (exposed_temperature > T0C+500) - explode() - return ..() - -/obj/structure/reagent_dispensers/fueltank/Move() - if (..() && modded) - leak_fuel(amount_per_transfer_from_this/10.0) - -/obj/structure/reagent_dispensers/fueltank/proc/leak_fuel(amount) - if (reagents.total_volume == 0) - return - - amount = min(amount, reagents.total_volume) - reagents.remove_reagent(/datum/reagent/fuel,amount) - new /obj/effect/decal/cleanable/liquid_fuel(src.loc, amount,1) - -/obj/structure/reagent_dispensers/peppertank - name = "pepper spray refiller" - desc = "Refills pepper spray canisters." - icon = 'icons/obj/objects.dmi' - icon_state = "peppertank" - anchored = TRUE - density = FALSE - amount_per_transfer_from_this = 45 - initial_reagent_types = list(/datum/reagent/capsaicin/condensed = 1) - - -/obj/structure/reagent_dispensers/water_cooler - name = "water cooler" - desc = "A machine that dispenses cool water to drink." - amount_per_transfer_from_this = 5 - icon = 'icons/obj/vending.dmi' - icon_state = "water_cooler" - possible_transfer_amounts = null - anchored = TRUE - initial_capacity = 500 - initial_reagent_types = list(/datum/reagent/water = 1) - var/cups = 12 - var/cup_type = /obj/item/reagent_containers/food/drinks/sillycup - -/obj/structure/reagent_dispensers/water_cooler/attack_hand(var/mob/user) - if(cups > 0) - var/visible_messages = DispenserMessages(user) - visible_message(visible_messages[1], visible_messages[2]) - var/cup = new cup_type(loc) - user.put_in_active_hand(cup) - cups-- - else - to_chat(user, RejectionMessage(user)) - -/obj/structure/reagent_dispensers/water_cooler/proc/DispenserMessages(var/mob/user) - return list("\The [user] grabs a paper cup from \the [src].", "You grab a paper cup from \the [src]'s cup compartment.") - -/obj/structure/reagent_dispensers/water_cooler/proc/RejectionMessage(var/mob/user) - return "The [src]'s cup dispenser is empty." - -/obj/structure/reagent_dispensers/water_cooler/attackby(obj/item/W as obj, mob/user as mob) - if (istype(W,/obj/item/wrench)) - src.add_fingerprint(user) - if(anchored) - user.visible_message("\The [user] begins unsecuring \the [src] from the floor.", "You start unsecuring \the [src] from the floor.") - else - user.visible_message("\The [user] begins securing \the [src] to the floor.", "You start securing \the [src] to the floor.") - - if(do_after(user, 2 SECONDS, src, DO_PUBLIC_UNIQUE)) - if(!src) return - to_chat(user, "You [anchored? "un" : ""]secured \the [src]!") - anchored = !anchored - return - else - flick("[icon_state]-vend", src) - return ..() - -/obj/structure/reagent_dispensers/beerkeg - name = "beer keg" - desc = "A beer keg." - icon = 'icons/obj/objects.dmi' - icon_state = "beertankTEMP" - amount_per_transfer_from_this = 10 - initial_reagent_types = list(/datum/reagent/ethanol/beer = 1) - atom_flags = ATOM_FLAG_CLIMBABLE - -/obj/structure/reagent_dispensers/acid - name = "sulphuric acid dispenser" - desc = "A dispenser of acid for industrial processes." - icon = 'icons/obj/objects.dmi' - icon_state = "acidtank" - amount_per_transfer_from_this = 10 - anchored = TRUE - initial_reagent_types = list(/datum/reagent/acid = 1) diff --git a/code/modules/recycling/conveyor2.dm b/code/modules/recycling/conveyor2.dm deleted file mode 100644 index 49de3ab9564a9..0000000000000 --- a/code/modules/recycling/conveyor2.dm +++ /dev/null @@ -1,335 +0,0 @@ -//conveyor2 is pretty much like the original, except it supports corners, but not diverters. -//note that corner pieces transfer stuff clockwise when running forward, and anti-clockwise backwards. - -/obj/machinery/conveyor - icon = 'icons/obj/recycling.dmi' - icon_state = "conveyor0" - name = "conveyor belt" - desc = "A conveyor belt." - layer = BELOW_OBJ_LAYER // so they appear under stuff - anchored = TRUE - - var/operating = 0 // 1 if running forward, -1 if backwards, 0 if off - var/operable = 1 // true if can operate (no broken segments in this belt run) - var/forwards // this is the default (forward) direction, set by the map dir - var/backwards // hopefully self-explanatory - var/movedir // the actual direction to move stuff in - - var/id = "" // the control ID - must match controller ID - -/obj/machinery/conveyor/centcom_auto - id = "round_end_belt" - - // create a conveyor -/obj/machinery/conveyor/New(loc, newdir, on = 0) - ..(loc) - if(newdir) - set_dir(newdir) - - if(dir & (dir-1)) // Diagonal. Forwards is *away* from dir, curving to the right. - forwards = turn(dir, 135) - backwards = turn(dir, 45) - else - forwards = dir - backwards = turn(dir, 180) - - if(on) - operating = 1 - setmove() - - - -/obj/machinery/conveyor/proc/setmove() - if(operating == 1) - movedir = forwards - else if(operating == -1) - movedir = backwards - else operating = 0 - update_icon() - -/obj/machinery/conveyor/on_update_icon() - if(stat & BROKEN) - icon_state = "conveyor-broken" - operating = 0 - return - if(!operable) - operating = 0 - if(stat & NOPOWER) - operating = 0 - icon_state = "conveyor[operating]" - - // machine process - // move items to the target location -/obj/machinery/conveyor/Process() - if(stat & (BROKEN | NOPOWER)) - return - if(!operating) - return - use_power_oneoff(100) - - /** - * the list of all items that will be moved this ptick - * moved items will be all in loc - */ - var/list/affecting = list() - - var/items_moved = 0 - for(var/thing in loc) - if(thing == src) - continue - if(items_moved >= 10) - break - var/atom/movable/AM = thing - if(!AM.anchored && AM.simulated) - affecting += AM - items_moved++ - if(affecting.len) - addtimer(CALLBACK(src, .proc/post_process, affecting), 1) // slight delay to prevent infinite propagation due to map order - -/obj/machinery/conveyor/proc/post_process(list/affecting) - for(var/A in affecting) - if(TICK_CHECK) - break - var/atom/movable/AM = A - if(AM.loc == src.loc) // prevents the object from being affected if it's not currently here. - step(A,movedir) - -// attack with item, place item on conveyor -/obj/machinery/conveyor/attackby(var/obj/item/I, mob/user) - if(isCrowbar(I)) - if(!(stat & BROKEN)) - var/obj/item/conveyor_construct/C = new/obj/item/conveyor_construct(src.loc) - C.id = id - transfer_fingerprints_to(C) - to_chat(user, "You remove the conveyor belt.") - qdel(src) - return - user.unequip_item(get_turf(src)) - -// attack with hand, move pulled object onto conveyor -/obj/machinery/conveyor/physical_attack_hand(mob/user) - if(!user.pulling) - return - if(user.pulling.anchored) - return - if((user.pulling.loc != user.loc && get_dist(user, user.pulling) > 1)) - return - if(ismob(user.pulling)) - var/mob/M = user.pulling - M.stop_pulling() - step(user.pulling, get_dir(user.pulling.loc, src)) - user.stop_pulling() - return TRUE - else - step(user.pulling, get_dir(user.pulling.loc, src)) - user.stop_pulling() - return TRUE - -// make the conveyor broken -// also propagate inoperability to any connected conveyor with the same ID -/obj/machinery/conveyor/set_broken(new_state) - . = ..() - if(. && new_state) - var/obj/machinery/conveyor/C = locate() in get_step(src, dir) - if(C) - C.set_operable(dir, id, 0) - - C = locate() in get_step(src, turn(dir,180)) - if(C) - C.set_operable(turn(dir,180), id, 0) - -//set the operable var if ID matches, propagating in the given direction - -/obj/machinery/conveyor/proc/set_operable(stepdir, match_id, op) - - if(id != match_id) - return - operable = op - - update_icon() - var/obj/machinery/conveyor/C = locate() in get_step(src, stepdir) - if(C) - C.set_operable(stepdir, id, op) - -// the conveyor control switch - -/obj/machinery/conveyor_switch - - name = "conveyor switch" - desc = "A conveyor control switch." - icon = 'icons/obj/recycling.dmi' - icon_state = "switch-off" - var/position = 0 // 0 off, -1 reverse, 1 forward - var/last_pos = -1 // last direction setting - var/operated = 1 // true if just operated - - var/id = "" // must match conveyor IDs to control them - - var/list/conveyors // the list of converyors that are controlled by this switch - anchored = TRUE - - - -/obj/machinery/conveyor_switch/New(loc, newid) - ..(loc) - if(!id) - id = newid - update_icon() - - spawn(5) // allow map load - conveyors = list() - for(var/obj/machinery/conveyor/C in world) - if(C.id == id) - conveyors += C - -// update the icon depending on the position - -/obj/machinery/conveyor_switch/on_update_icon() - if(position<0) - icon_state = "switch-rev" - else if(position>0) - icon_state = "switch-fwd" - else - icon_state = "switch-off" - - -// timed process -// if the switch changed, update the linked conveyors - -/obj/machinery/conveyor_switch/Process() - if(!operated) - return - operated = 0 - - for(var/obj/machinery/conveyor/C in conveyors) - C.operating = position - C.setmove() - -// attack with hand, switch position -/obj/machinery/conveyor_switch/interface_interact(mob/user) - if(!CanInteract(user, DefaultTopicState())) - return FALSE - do_switch() - operated = 1 - update_icon() - - // find any switches with same id as this one, and set their positions to match us - for(var/obj/machinery/conveyor_switch/S in world) - if(S.id == src.id) - S.position = position - S.update_icon() - return TRUE - -/obj/machinery/conveyor_switch/proc/do_switch(mob/user) - if(position == 0) - if(last_pos < 0) - position = 1 - last_pos = 0 - else - position = -1 - last_pos = 0 - else - last_pos = position - position = 0 - -/obj/machinery/conveyor_switch/attackby(obj/item/I, mob/user, params) - if(isCrowbar(I)) - var/obj/item/conveyor_switch_construct/C = new/obj/item/conveyor_switch_construct(src.loc) - C.id = id - transfer_fingerprints_to(C) - to_chat(user, "You deattach the conveyor switch.") - qdel(src) - -/obj/machinery/conveyor_switch/oneway - var/convdir = 1 //Set to 1 or -1 depending on which way you want the convayor to go. (In other words keep at 1 and set the proper dir on the belts.) - desc = "A conveyor control switch. It appears to only go in one direction." - -/obj/machinery/conveyor_switch/oneway/do_switch(mob/user) - if(position == 0) - position = convdir - else - position = 0 - -// -// CONVEYOR CONSTRUCTION STARTS HERE -// - -/obj/item/conveyor_construct - icon = 'icons/obj/recycling.dmi' - icon_state = "conveyor0" - name = "conveyor belt assembly" - desc = "A conveyor belt assembly. Must be linked to a conveyor control switch assembly before placement." - w_class = ITEM_SIZE_HUGE - var/id = "" //inherited by the belt - matter = list(MATERIAL_STEEL = 400, MATERIAL_PLASTIC = 200) - -/obj/item/conveyor_construct/attackby(obj/item/I, mob/user, params) - ..() - if(istype(I, /obj/item/conveyor_switch_construct)) - to_chat(user, "You link the switch to the conveyor belt assembly.") - var/obj/item/conveyor_switch_construct/C = I - id = C.id - -/obj/item/conveyor_construct/afterattack(atom/A, mob/user, proximity) - if(!proximity || !istype(A, /turf/simulated/floor) || istype(A, /area/shuttle) || user.incapacitated()) - return - var/cdir = get_dir(A, user) - if(!(cdir in GLOB.cardinal) || A == user.loc) - return - for(var/obj/machinery/conveyor/CB in A) - if(CB.dir == cdir || CB.dir == turn(cdir,180)) - return - cdir |= CB.dir - qdel(CB) - var/obj/machinery/conveyor/C = new/obj/machinery/conveyor(A,cdir) - C.id = id - transfer_fingerprints_to(C) - qdel(src) - -/obj/item/conveyor_switch_construct - name = "conveyor switch assembly" - desc = "A conveyor control switch assembly." - icon = 'icons/obj/recycling.dmi' - icon_state = "switch-off" - w_class = ITEM_SIZE_HUGE - var/id = "" //inherited by the switch - matter = list(MATERIAL_STEEL = 200) - - -/obj/item/conveyor_switch_construct/New() - ..() - id = rand() //this couldn't possibly go wrong - -/obj/item/conveyor_switch_construct/afterattack(atom/A, mob/user, proximity) - if(!proximity || !istype(A, /turf/simulated/floor) || istype(A, /area/shuttle) || user.incapacitated()) - return - var/found = 0 - for(var/obj/machinery/conveyor/C in view()) - if(C.id == src.id) - found = 1 - break - if(!found) - to_chat(user, "[icon2html(src, user)]The conveyor switch did not detect any linked conveyor belts in range.") - return - var/obj/machinery/conveyor_switch/NC = new /obj/machinery/conveyor_switch(A, id) - transfer_fingerprints_to(NC) - qdel(src) - -/obj/item/conveyor_switch_construct/oneway - name = "one-way conveyor switch assembly" - desc = "An one-way conveyor control switch assembly." - -/obj/item/conveyor_switch_construct/oneway/afterattack(atom/A, mob/user, proximity) - if(!proximity || !istype(A, /turf/simulated/floor) || istype(A, /area/shuttle) || user.incapacitated()) - return - var/found = 0 - for(var/obj/machinery/conveyor/C in view()) - if(C.id == src.id) - found = 1 - break - if(!found) - to_chat(user, "[icon2html(src, user)]The conveyor switch did not detect any linked conveyor belts in range.") - return - var/obj/machinery/conveyor_switch/oneway/NC = new /obj/machinery/conveyor_switch/oneway(A, id) - transfer_fingerprints_to(NC) - qdel(src) \ No newline at end of file diff --git a/code/modules/recycling/disposal-construction.dm b/code/modules/recycling/disposal-construction.dm deleted file mode 100644 index 973bd66fba2dc..0000000000000 --- a/code/modules/recycling/disposal-construction.dm +++ /dev/null @@ -1,241 +0,0 @@ -// Disposal pipe construction -// This is the pipe that you drag around, not the attached ones. - -/obj/structure/disposalconstruct - name = "disposal pipe segment" - desc = "A huge pipe segment used for constructing disposal systems." - icon = 'icons/obj/pipes/disposal.dmi' - icon_state = "conpipe-s" - anchored = FALSE - density = FALSE - matter = list(MATERIAL_STEEL = 1850) - level = 2 - obj_flags = OBJ_FLAG_ROTATABLE - var/sort_type = "" - var/dpdir = 0 // directions as disposalpipe - var/turn = DISPOSAL_FLIP_FLIP - var/constructed_path = /obj/structure/disposalpipe - var/built_icon_state - -/obj/structure/disposalconstruct/New(loc, var/P = null) - . = ..() - if(P) - if(istype(P, /obj/structure/disposalpipe))//Unfortunately a necessary evil since some things are machines and other things are structures - var/obj/structure/disposalpipe/D = P - SetName(D.name) - desc = D.desc - icon = D.icon - built_icon_state = D.icon_state - anchored = D.anchored - set_density(D.density) - turn = D.turn - sort_type = D.sort_type - dpdir = D.dpdir - constructed_path = D.type - set_dir(D.dir) // Needs to be set after turn and possibly other state. - if(istype(P, /obj/machinery/disposal)) - var/obj/machinery/disposal/D = P - SetName(D.name) - desc = D.desc - icon = D.icon - built_icon_state = D.icon_state - anchored = D.anchored - set_density(D.density) - turn = D.turn - constructed_path = D.type - set_dir(D.dir) - update_icon() - -/obj/structure/disposalconstruct/Initialize() - update_verbs() - . = ..() - -/obj/structure/disposalconstruct/proc/update_verbs() - if(anchored) - verbs -= /obj/structure/disposalconstruct/proc/flip - else - verbs += /obj/structure/disposalconstruct/proc/flip - -// update iconstate and dpdir due to dir and type -/obj/structure/disposalconstruct/proc/update() - if(invisibility) // if invisible, fade icon - alpha = 128 - else - alpha = 255 - //otherwise burying half-finished pipes under floors causes them to half-fade - -// hide called by levelupdate if turf intact status changes -// change visibility status and force update of icon -/obj/structure/disposalconstruct/hide(var/intact) - set_invisibility((intact && level==1) ? 101: 0) // hide if floor is intact - update() - -/obj/structure/disposalconstruct/proc/flip() - set category = "Object" - set name = "Flip Pipe" - set src in view(1) - if(usr.incapacitated()) - return - - if(anchored) - to_chat(usr, "You must unfasten the pipe before flipping it.") - return - - if(ispath(constructed_path, /obj/structure/disposalpipe)) - var/obj/structure/disposalpipe/fake_pipe = constructed_path - if(initial(fake_pipe.flipped_state)) - constructed_path = initial(fake_pipe.flipped_state) - fake_pipe = constructed_path - turn = initial(fake_pipe.turn) - built_icon_state = initial(fake_pipe.icon_state) - set_dir(dir) // run the update, as our dpdir is probably wrong after this - update_icon() - return - set_dir(turn(dir, 180)) - -/obj/structure/disposalconstruct/on_update_icon() - if("con[built_icon_state]" in icon_states(icon)) - icon_state = "con[built_icon_state]" - else - icon_state = built_icon_state - -/obj/structure/disposalconstruct/proc/flip_dirs(var/flipvalue) - . = dir - if(flipvalue & DISPOSAL_FLIP_FLIP) - . |= turn(dir,180) - if(flipvalue & DISPOSAL_FLIP_LEFT) - . |= turn(dir,90) - if(flipvalue & DISPOSAL_FLIP_RIGHT) - . |= turn(dir,-90) - -/obj/structure/disposalconstruct/set_dir(new_dir) - . = ..() - dpdir = flip_dirs(turn) //does the flipping stuff - update() - -/obj/structure/disposalconstruct/Move() - var/old_dir = dir - . = ..() - set_dir(old_dir) - -// attackby item -// wrench: (un)anchor -// weldingtool: convert to real pipe -/obj/structure/disposalconstruct/attackby(var/obj/item/I, var/mob/user) - var/turf/T = loc - if(!istype(T)) - return - if(!T.is_plating()) - to_chat(user, "You can only manipulate \the [src] if the floor plating is removed.") - return - - var/obj/structure/disposalpipe/CP = locate() in T - - if(isWrench(I)) - if(anchored) - anchored = FALSE - wrench_down(FALSE) - to_chat(user, "You detach \the [src] from the underfloor.") - else - if(!check_buildability(CP, user)) - return - wrench_down(TRUE) - to_chat(user, "You attach \the [src] to the underfloor.") - playsound(loc, 'sound/items/Ratchet.ogg', 100, 1) - update() - update_verbs() - - else if(istype(I, /obj/item/weldingtool)) - if(anchored) - var/obj/item/weldingtool/W = I - if(W.remove_fuel(0,user)) - playsound(src.loc, 'sound/items/Welder2.ogg', 100, 1) - to_chat(user, "Welding \the [src] in place.") - if(do_after(user, 2 SECONDS, src, DO_PUBLIC_UNIQUE)) - if(!src || !W.isOn()) return - to_chat(user, "\The [src] has been welded in place!") - build(CP) - qdel(src) - return - else - to_chat(user, "You need more welding fuel to complete this task.") - return - else - to_chat(user, "You need to attach it to the plating first!") - return - -/obj/structure/disposalconstruct/hides_under_flooring() - return anchored - -/obj/structure/disposalconstruct/proc/check_buildability(obj/structure/disposalpipe/CP, mob/user) - if(!CP) - return TRUE - var/pdir = CP.dpdir - if(istype(CP, /obj/structure/disposalpipe/broken)) - pdir = CP.dir - if(pdir & dpdir) - to_chat(user, "There is already a disposals pipe at that location.") - return FALSE - return TRUE - -/obj/structure/disposalconstruct/proc/wrench_down(anchor) - if(anchor) - anchored = TRUE - level = 1 // We don't want disposal bins to disappear under the floors - set_density(0) - else - anchored = FALSE - level = 2 - set_density(1) - -/obj/structure/disposalconstruct/machine/check_buildability(obj/structure/disposalpipe/CP, mob/user) - if(CP) // There's something there - if(!istype(CP,/obj/structure/disposalpipe/trunk)) - to_chat(user, "\The [src] requires a trunk underneath it in order to work.") - return FALSE - return TRUE - // Nothing under, fuck. - to_chat(user, "\The [src] requires a trunk underneath it in order to work.") - return FALSE - -/obj/structure/disposalconstruct/proc/build() - var/obj/structure/disposalpipe/P = new constructed_path(loc) - transfer_fingerprints_to(P) - P.base_icon_state = built_icon_state - P.icon_state = built_icon_state - P.dpdir = dpdir - P.sort_type = sort_type - P.set_dir(dir) - P.on_build() - -// Subtypes - -/obj/structure/disposalconstruct/machine - obj_flags = 0 // No rotating - -/obj/structure/disposalconstruct/machine/update_verbs() - return // No flipping - -/obj/structure/disposalconstruct/machine/wrench_down(anchor) - anchored = anchor - set_density(1) // We don't want disposal bins or outlets to go density 0 - update_icon() - -/obj/structure/disposalconstruct/machine/build(obj/structure/disposalpipe/CP) - var/obj/machinery/disposal/P = new /obj/machinery/disposal(src.loc) - transfer_fingerprints_to(P) - P.set_dir(dir) - P.mode = 0 // start with pump off - -/obj/structure/disposalconstruct/machine/on_update_icon() - if(anchored) - icon_state = built_icon_state - else - ..() - -/obj/structure/disposalconstruct/machine/outlet/build(obj/structure/disposalpipe/CP) - var/obj/structure/disposaloutlet/P = new constructed_path(loc) - transfer_fingerprints_to(P) - P.set_dir(dir) - var/obj/structure/disposalpipe/trunk/Trunk = CP - Trunk.linked = P diff --git a/code/modules/recycling/disposal.dm b/code/modules/recycling/disposal.dm deleted file mode 100644 index 79696ec9033d2..0000000000000 --- a/code/modules/recycling/disposal.dm +++ /dev/null @@ -1,695 +0,0 @@ -// Disposal bin -// Holds items for disposal into pipe system -// Draws air from turf, gradually charges internal reservoir -// Once full (~1 atm), uses air resv to flush items into the pipes -// Automatically recharges air (unless off), will flush when ready if pre-set -// Can hold items and human size things, no other draggables -// Toilets are a type of disposal bin for small objects only and work on magic. By magic, I mean torque rotation -#define SEND_PRESSURE (700 + ONE_ATMOSPHERE) //kPa - assume the inside of a dispoal pipe is 1 atm, so that needs to be added. -#define PRESSURE_TANK_VOLUME 150 //L -#define PUMP_MAX_FLOW_RATE 90 //L/s - 4 m/s using a 15 cm by 15 cm inlet - -GLOBAL_LIST_EMPTY(diversion_junctions) - -/obj/machinery/disposal - name = "disposal unit" - desc = "A pneumatic waste disposal unit." - icon = 'icons/obj/pipes/disposal.dmi' - icon_state = "disposal" - anchored = TRUE - density = TRUE - var/datum/gas_mixture/air_contents // internal reservoir - var/mode = 1 // item mode 0=off 1=charging 2=charged - var/flush = 0 // true if flush handle is pulled - var/obj/structure/disposalpipe/trunk/trunk = null // the attached pipe trunk - var/flushing = 0 // true if flushing in progress - var/flush_every_ticks = 30 //Every 30 ticks it will look whether it is ready to flush - var/flush_count = 0 //this var adds 1 once per tick. When it reaches flush_every_ticks it resets and tries to flush. - var/last_sound = 0 - var/list/allowed_objects = list(/obj/structure/closet) - active_power_usage = 2200 //the pneumatic pump power. 3 HP ~ 2200W - idle_power_usage = 100 - atom_flags = ATOM_FLAG_CLIMBABLE - var/turn = DISPOSAL_FLIP_NONE - throwpass = TRUE - -// create a new disposal -// find the attached trunk (if present) and init gas resvr. -// initializes the reagents datum for storing vomit reagents -/obj/machinery/disposal/Initialize() - . = ..() - spawn(5) - trunk = locate() in src.loc - if(!trunk) - mode = 0 - flush = 0 - else - trunk.linked = src // link the pipe trunk to self - - air_contents = new/datum/gas_mixture(PRESSURE_TANK_VOLUME) - update_icon() - src.create_reagents(500) - -/obj/machinery/disposal/Destroy() - eject() - if(trunk) - trunk.linked = null - return ..() - -// attack by item places it in to disposal -/obj/machinery/disposal/attackby(var/obj/item/I, var/mob/user) - if(stat & BROKEN || !I || !user) - return - - add_fingerprint(user, 0, I) - if(mode<=0) // It's off - if(isScrewdriver(I)) - if(contents.len > LAZYLEN(component_parts)) - to_chat(user, "Eject the items first!") - return - if(mode==0) // It's off but still not unscrewed - mode=-1 // Set it to doubleoff l0l - playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1) - to_chat(user, "You remove the screws around the power connection.") - return - else if(mode==-1) - mode=0 - playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1) - to_chat(user, "You attach the screws around the power connection.") - return - else if(isWelder(I) && mode==-1) - if(contents.len > LAZYLEN(component_parts)) - to_chat(user, "Eject the items first!") - return - var/obj/item/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 disposal unit.") - - if(do_after(user, 2 SECONDS, src, DO_PUBLIC_UNIQUE)) - if(!src || !W.isOn()) return - to_chat(user, "You sliced the floorweld off the disposal unit.") - var/obj/structure/disposalconstruct/machine/C = new (loc, src) - src.transfer_fingerprints_to(C) - C.update() - qdel(src) - return - else - to_chat(user, "You need more welding fuel to complete this task.") - return - - if(istype(I, /obj/item/melee/energy/blade)) - to_chat(user, "You can't place that item inside the disposal unit.") - return - - if(istype(I, /obj/item/storage/bag/trash)) - var/obj/item/storage/bag/trash/T = I - to_chat(user, "You empty the bag.") - for(var/obj/item/O in T.contents) - T.remove_from_storage(O,src, 1) - T.finish_bulk_removal() - update_icon() - return - - var/obj/item/grab/G = I - if(istype(G)) // handle grabbed mob - if(ismob(G.affecting)) - var/mob/GM = G.affecting - usr.visible_message(SPAN_DANGER("\The [usr] starts putting [GM.name] into the disposal.")) - if(do_after(usr, 2 SECONDS, src, DO_PUBLIC_UNIQUE)) - if (GM.client) - GM.client.perspective = EYE_PERSPECTIVE - GM.client.eye = src - GM.forceMove(src) - usr.visible_message(SPAN_DANGER("\The [GM] has been placed in the [src] by \the [user].")) - qdel(G) - admin_attack_log(usr, GM, "Placed the victim into \the [src].", "Was placed into \the [src] by the attacker.", "stuffed \the [src] with") - return - - if(isrobot(user)) - return - if(!I) - return - - if(!user.unEquip(I, src)) - return - - user.visible_message("\The [user] places \the [I] into \the [src].", "You place \the [I] into \the [src].") - - update_icon() - -/obj/machinery/disposal/MouseDrop_T(atom/movable/AM, mob/user) - if(!istype(AM)) // Could be dragging in a turf. - return - var/incapacitation_flags = INCAPACITATION_DEFAULT - if(AM == user) - incapacitation_flags &= ~INCAPACITATION_RESTRAINED - - if(stat & BROKEN || !CanMouseDrop(AM, user, incapacitation_flags) || AM.anchored || !isturf(user.loc)) - return - - // Animals can only put themself in - if(isanimal(user) && AM != user) - return - - // Determine object type and run necessary checks - var/mob/M = AM - var/is_dangerous // To determine css style in messages - if(istype(M)) - is_dangerous = TRUE - if(M.buckled) - return - else if(istype(AM, /obj/item)) - attackby(AM, user) - return - else if(!is_type_in_list(AM, allowed_objects)) - return - - // Checks completed, start inserting - src.add_fingerprint(user) - var/old_loc = AM.loc - if(AM == user) - user.visible_message("[user] starts climbing into [src].", \ - "You start climbing into [src].") - else - user.visible_message("[user] starts stuffing [AM] into [src].", \ - "You start stuffing [AM] into [src].") - - if(!do_after(user, 2 SECONDS, src, DO_PUBLIC_UNIQUE)) - return - - // Repeat checks - if(stat & BROKEN || user.incapacitated(incapacitation_flags)) - return - if(!AM || old_loc != AM.loc || AM.anchored) - return - if(istype(M) && M.buckled) - return - - // Messages and logging - if(AM == user) - user.visible_message("[user] climbs into [src].", \ - "You climb into [src].") - admin_attack_log(user, null, "Stuffed themselves into \the [src].", null, "stuffed themselves into \the [src].") - else - user.visible_message("[user] stuffs [AM] into [src][is_dangerous ? "!" : "."]", \ - "You stuff [AM] into [src].") - if(ismob(M)) - admin_attack_log(user, M, "Placed the victim into \the [src].", "Was placed into \the [src] by the attacker.", "stuffed \the [src] with") - if (M.client) - M.client.perspective = EYE_PERSPECTIVE - M.client.eye = src - - AM.forceMove(src) - update_icon() - return - -// attempt to move while inside -/obj/machinery/disposal/relaymove(mob/user as mob) - if (user.incapacitated() || src.flushing) - return - if (user.loc == src) - src.go_out(user) - return - -// leave the disposal -/obj/machinery/disposal/proc/go_out(mob/user) - - if (user.client) - user.client.eye = user.client.mob - user.client.perspective = MOB_PERSPECTIVE - user.forceMove(src.loc) - update_icon() - return - -/obj/machinery/disposal/DefaultTopicState() - return GLOB.outside_state - -// human interact with machine -/obj/machinery/disposal/physical_attack_hand(mob/user) - // Clumsy folks can only flush it. - if(!user.IsAdvancedToolUser(1)) - flush = !flush - update_icon() - return TRUE - -/obj/machinery/disposal/interface_interact(mob/user) - interact(user) - return TRUE - -// user interaction -/obj/machinery/disposal/interact(mob/user) - - src.add_fingerprint(user) - if(stat & BROKEN) - user.unset_machine() - return - - var/ai = isAI(user) - var/dat = "Waste Disposal UnitWaste Disposal Unit
              " - - if(!ai) // AI can't pull flush handle - if(flush) - dat += "Disposal handle: Disengage Engaged" - else - dat += "Disposal handle: Disengaged Engage" - - dat += "

              Eject contents
              " - - if(mode <= 0) - dat += "Pump: Off On
              " - else if(mode == 1) - dat += "Pump: Off On (pressurizing)
              " - else - dat += "Pump: Off On (idle)
              " - - var/per = 100* air_contents.return_pressure() / (SEND_PRESSURE) - - dat += "Pressure: [round(per, 1)]%
              " - - - user.set_machine(src) - show_browser(user, dat, "window=disposal;size=360x170") - onclose(user, "disposal") - -// handle machine interaction - -/obj/machinery/disposal/CanUseTopic(mob/user, state, href_list) - if(user.loc == src) - to_chat(user, "You cannot reach the controls from inside.") - return STATUS_CLOSE - if(isAI(user) && href_list && (href_list["handle"] || href_list["eject"])) - return min(STATUS_UPDATE, ..()) - if(mode==-1 && href_list && !href_list["eject"]) // only allow ejecting if mode is -1 - to_chat(user, "The disposal units power is disabled.") - return min(STATUS_UPDATE, ..()) - if(flushing) - return min(STATUS_UPDATE, ..()) - return ..() - -/obj/machinery/disposal/OnTopic(user, href_list) - if(href_list["close"]) - close_browser(user, "window=disposal") - return TOPIC_HANDLED - - if(href_list["pump"]) - if(text2num(href_list["pump"])) - mode = 1 - else - mode = 0 - update_icon() - . = TOPIC_REFRESH - - else if(href_list["handle"]) - flush = text2num(href_list["handle"]) - update_icon() - . = TOPIC_REFRESH - - else if(href_list["eject"]) - eject() - . = TOPIC_REFRESH - - if(. == TOPIC_REFRESH) - interact(user) - -/obj/machinery/disposal/verb/manual_eject() - set src in oview(1) - set category = "Object" - set name = "Eject Items From Bin" - - if (!isliving(usr) || usr.incapacitated()) - return - usr.visible_message( - SPAN_NOTICE("\The [usr] ejects \the [src]'s contents'."), - SPAN_NOTICE("You eject \the [initial(name)]'s contents."), - ) - eject() - add_fingerprint(usr) - -// eject the contents of the disposal unit -/obj/machinery/disposal/proc/eject() - for(var/atom/movable/AM in (contents - component_parts)) - AM.forceMove(src.loc) - AM.pipe_eject(0) - if(reagents.total_volume) - visible_message(SPAN_DANGER("Vomit spews out of the disposal unit!")) - playsound(loc, 'sound/effects/splat.ogg', 50, 1) - if(istype(src.loc, /turf/simulated)) - var/obj/effect/decal/cleanable/vomit/splat = new /obj/effect/decal/cleanable/vomit(src.loc) - reagents.trans_to_obj(splat, reagents.total_volume) - splat.update_icon() - reagents.clear_reagents() - update_icon() - -// update the icon & overlays to reflect mode & status -/obj/machinery/disposal/on_update_icon() - overlays.Cut() - if(stat & BROKEN) - mode = 0 - flush = 0 - return - - // flush handle - if(flush) - overlays += image('icons/obj/pipes/disposal.dmi', "dispover-handle") - - // only handle is shown if no power - if(stat & NOPOWER || mode == -1) - return - - // check for items/vomit in disposal - occupied light - if(contents.len > LAZYLEN(component_parts) || reagents.total_volume) - overlays += image('icons/obj/pipes/disposal.dmi', "dispover-full") - - // charging and ready light - if(mode == 1) - overlays += image('icons/obj/pipes/disposal.dmi', "dispover-charge") - else if(mode == 2) - overlays += image('icons/obj/pipes/disposal.dmi', "dispover-ready") - -// timed process -// charge the gas reservoir and perform flush if ready -/obj/machinery/disposal/Process() - if(!air_contents || (stat & BROKEN)) // nothing can happen if broken - update_use_power(POWER_USE_OFF) - return - - flush_count++ - if( flush_count >= flush_every_ticks ) - if( contents.len > LAZYLEN(component_parts) || reagents.total_volume) - if(mode == 2) - spawn(0) - flush() - flush_count = 0 - - src.updateDialog() - - if(flush && air_contents.return_pressure() >= SEND_PRESSURE ) // flush can happen even without power - flush() - - if(mode != 1) //if off or ready, no need to charge - update_use_power(POWER_USE_IDLE) - else if(air_contents.return_pressure() >= SEND_PRESSURE) - mode = 2 //if full enough, switch to ready mode - update_icon() - else - src.pressurize() //otherwise charge - -/obj/machinery/disposal/proc/pressurize() - if(stat & NOPOWER) // won't charge if no power - update_use_power(POWER_USE_OFF) - return - - var/atom/L = loc // recharging from loc turf - var/datum/gas_mixture/env = L.return_air() - - var/power_draw = -1 - if(env && env.temperature > 0) - var/transfer_moles = (PUMP_MAX_FLOW_RATE/env.volume)*env.total_moles //group_multiplier is divided out here - power_draw = pump_gas(src, env, air_contents, transfer_moles, active_power_usage) - - if (power_draw > 0) - use_power_oneoff(power_draw) - -// perform a flush -/obj/machinery/disposal/proc/flush() - - flushing = 1 - flick("[icon_state]-flush", src) - - var/wrapcheck = 0 - var/obj/structure/disposalholder/H = new() // virtual holder object which actually - // travels through the pipes. - - // handle vomit transportation - // flush the vomit out and put vomit into the disposalholder - reagents.trans_to_holder(H.create_reagents(500), reagents.total_volume) - - var/list/stuff = contents - component_parts - //Hacky test to get drones to mail themselves through disposals. - for(var/mob/living/silicon/robot/drone/D in stuff) - wrapcheck = 1 - - for(var/obj/item/smallDelivery/O in stuff) - wrapcheck = 1 - - if(wrapcheck == 1) - H.tomail = 1 - - sleep(10) - if(last_sound < world.time + 1) - playsound(src, 'sound/machines/disposalflush.ogg', 50, 0, 0) - last_sound = world.time - sleep(5) // wait for animation to finish - - - H.init(src, air_contents) // copy the contents of disposer to holder - air_contents = new(PRESSURE_TANK_VOLUME) // new empty gas resv. - - for (var/mob/M in H.check_mob(stuff)) - if (M.ckey) - admin_attack_log(null, M, null, "Was flushed down [src].", "has been flushed down [src].") - H.start(src) // start the holder processing movement - flushing = 0 - // now reset disposal state - flush = 0 - if(mode == 2) // if was ready, - mode = 1 // switch to charging - update_icon() - return - -// called when holder is expelled from a disposal -// should usually only occur if the pipe network is modified -/obj/machinery/disposal/proc/expel(var/obj/structure/disposalholder/H) - - var/turf/target - playsound(src, 'sound/machines/hiss.ogg', 50, 0, 0) - if(H) // Somehow, someone managed to flush a window which broke mid-transit and caused the disposal to go in an infinite loop trying to expel null, hopefully this fixes it - for(var/atom/movable/AM in H) - target = get_offset_target_turf(src.loc, rand(5)-rand(5), rand(5)-rand(5)) - - AM.forceMove(src.loc) - AM.pipe_eject(0) - // Poor drones kept smashing windows and taking system damage being fired out of disposals. - if(!istype(AM,/mob/living/silicon/robot/drone)) - spawn(1) - if(AM) - AM.throw_at(target, 5, 1) - - H.vent_gas(loc) - qdel(H) - -/obj/machinery/disposal/CanPass(atom/movable/mover, turf/target, height=0, air_group=0) - if (istype(mover,/obj/item) && mover.throwing) - var/obj/item/I = mover - if(istype(I, /obj/item/projectile)) - return - if(prob(75)) - I.forceMove(src) - visible_message("\The [I] lands in \the [src].") - else - visible_message("\The [I] bounces off of \the [src]'s rim!") - return 0 - else - return ..(mover, target, height, air_group) - -/obj/machinery/disposal/slam_into(mob/living/L) - L.forceMove(src) - L.Weaken(5) - L.visible_message(SPAN_WARNING("\The [L] falls into \the [src]!")) - playsound(L, "punch", 25, 1, FALSE) - -/obj/machinery/disposal_switch - name = "disposal switch" - desc = "A disposal control switch." - icon = 'icons/obj/recycling.dmi' - icon_state = "switch-off" - layer = ABOVE_OBJ_LAYER - var/on = 0 - var/list/junctions = list() - -/obj/machinery/disposal_switch/Initialize(mapload, var/newid) - . = ..(mapload) - if(!id_tag) - id_tag = newid - for(var/obj/structure/disposalpipe/diversion_junction/D in GLOB.diversion_junctions) - if(D.id_tag && !D.linked && D.id_tag == src.id_tag) - junctions += D - D.linked = src - -/obj/machinery/disposal_switch/Destroy() - junctions.Cut() - return ..() - -/obj/machinery/disposal_switch/attackby(obj/item/I, mob/user, params) - if(isCrowbar(I)) - var/obj/item/disposal_switch_construct/C = new/obj/item/disposal_switch_construct(src.loc, id_tag) - transfer_fingerprints_to(C) - user.visible_message("\The [user] deattaches \the [src]") - qdel(src) - else - . = ..() - -/obj/machinery/disposal_switch/interface_interact(mob/user) - if(!CanInteract(user, DefaultTopicState())) - return FALSE - . = TRUE - on = !on - for(var/obj/structure/disposalpipe/diversion_junction/D in junctions) - if(D.id_tag == src.id_tag) - D.active = on - if(on) - icon_state = "switch-fwd" - else - icon_state = "switch-off" - - -/obj/item/disposal_switch_construct - name = "disposal switch assembly" - desc = "A disposal control switch assembly." - icon = 'icons/obj/recycling.dmi' - icon_state = "switch-off" - w_class = ITEM_SIZE_LARGE - var/id_tag - -/obj/item/disposal_switch_construct/Initialize(var/id) - . = ..() - if(id) id_tag = id - else - id_tag = "ds[sequential_id(/obj/item/disposal_switch_construct)]" - -/obj/item/disposal_switch_construct/afterattack(atom/A, mob/user, proximity) - if(!proximity || !istype(A, /turf/simulated/floor) || istype(A, /area/shuttle) || user.incapacitated() || !id_tag) - return - var/found = 0 - for(var/obj/structure/disposalpipe/diversion_junction/D in world) - if(D.id_tag == src.id_tag) - found = 1 - break - if(!found) - to_chat(user, "[icon2html(src, user)]\The [src] is not linked to any junctions!") - return - var/obj/machinery/disposal_switch/NC = new/obj/machinery/disposal_switch(A, id_tag) - transfer_fingerprints_to(NC) - qdel(src) - -// the disposal outlet machine - -/obj/structure/disposaloutlet - name = "disposal outlet" - desc = "An outlet for the pneumatic disposal system." - icon = 'icons/obj/pipes/disposal.dmi' - icon_state = "outlet" - density = TRUE - anchored = TRUE - var/active = 0 - var/turf/target // this will be where the output objects are 'thrown' to. - var/mode = 0 - atom_flags = ATOM_FLAG_NO_TEMP_CHANGE | ATOM_FLAG_CLIMBABLE - -/obj/structure/disposaloutlet/Initialize() - . = ..() - spawn(1) - target = get_ranged_target_turf(src, dir, 10) - var/obj/structure/disposalpipe/trunk/trunk = locate() in src.loc - if(trunk) - trunk.linked = src // link the pipe trunk to self - -// expel the contents of the holder object, then delete it -// called when the holder exits the outlet -/obj/structure/disposaloutlet/proc/expel(var/obj/structure/disposalholder/H) - animate_expel() - if(H) - if(H.reagents?.total_volume) - visible_message(SPAN_DANGER("Vomit seeps out of the disposal outlet!")) - playsound(loc, 'sound/effects/splat.ogg', 50, 1) - if(istype(src.loc, /turf/simulated)) - var/obj/effect/decal/cleanable/vomit/splat = new /obj/effect/decal/cleanable/vomit(src.loc) - H.reagents.trans_to_obj(splat, H.reagents.total_volume) - splat.update_icon() - - for(var/atom/movable/AM in H) - AM.forceMove(src.loc) - AM.pipe_eject(dir) - // Drones keep smashing windows from being fired out of chutes. - if(!istype(AM,/mob/living/silicon/robot/drone)) - spawn(5) - AM.throw_at(target, 3, 1) - H.vent_gas(src.loc) - qdel(H) - -/obj/structure/disposaloutlet/proc/animate_expel() - set waitfor = FALSE - flick("outlet-open", src) - playsound(src, 'sound/machines/warning-buzzer.ogg', 50, 0, 0) - sleep(20) //wait until correct animation frame - playsound(src, 'sound/machines/hiss.ogg', 50, 0, 0) - -/obj/structure/disposaloutlet/attackby(var/obj/item/I, var/mob/user) - if(!I || !user) - return - src.add_fingerprint(user, 0, I) - if(isScrewdriver(I)) - if(mode==0) - mode=1 - playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1) - to_chat(user, "You remove the screws around the power connection.") - return - else if(mode==1) - mode=0 - playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1) - to_chat(user, "You attach the screws around the power connection.") - return - else if(istype(I,/obj/item/weldingtool) && mode==1) - var/obj/item/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 disposal outlet.") - if(do_after(user, 2 SECONDS, src, DO_PUBLIC_UNIQUE)) - if(!src || !W.isOn()) return - to_chat(user, "You sliced the floorweld off the disposal outlet.") - var/obj/structure/disposalconstruct/machine/outlet/C = new (loc, src) - src.transfer_fingerprints_to(C) - C.anchored = TRUE - C.set_density(1) - C.update() - qdel(src) - return - else - to_chat(user, "You need more welding fuel to complete this task.") - return - -/obj/structure/disposaloutlet/forceMove()//updates this when shuttle moves. So you can YEET things out the airlock - . = ..() - if(.) - target = get_ranged_target_turf(src, dir, 10) - -// called when movable is expelled from a disposal pipe or outlet -// by default does nothing, override for special behaviour - -/atom/movable/proc/pipe_eject(var/direction) - return - -// check if mob has client, if so restore client view on eject -/mob/pipe_eject(var/direction) - if (src.client) - src.client.perspective = MOB_PERSPECTIVE - src.client.eye = src - - return - -/obj/effect/decal/cleanable/blood/gibs/pipe_eject(var/direction) - var/list/dirs - if(direction) - dirs = list( direction, turn(direction, -45), turn(direction, 45)) - else - dirs = GLOB.alldirs.Copy() - addtimer(CALLBACK(src, .proc/streak, dirs), 0) - -/obj/effect/decal/cleanable/blood/gibs/robot/pipe_eject(var/direction) - var/list/dirs - if(direction) - dirs = list( direction, turn(direction, -45), turn(direction, 45)) - else - dirs = GLOB.alldirs.Copy() - addtimer(CALLBACK(src, .proc/streak, dirs), 0) diff --git a/code/modules/recycling/disposalholder.dm b/code/modules/recycling/disposalholder.dm deleted file mode 100644 index 7ce9c711c54bb..0000000000000 --- a/code/modules/recycling/disposalholder.dm +++ /dev/null @@ -1,160 +0,0 @@ - -// virtual disposal object -// travels through pipes in lieu of actual items -// contents will be items flushed by the disposal -// this allows the gas flushed to be tracked - -/obj/structure/disposalholder - invisibility = 101 - var/datum/gas_mixture/gas = null // gas used to flush, will appear at exit point - var/active = 0 // true if the holder is moving, otherwise inactive - dir = 0 - var/count = 2048 //*** can travel 2048 steps before going inactive (in case of loops) - var/destinationTag = "" // changes if contains a delivery container - var/tomail = 0 //changes if contains wrapped package - var/hasmob = 0 //If it contains a mob - var/speed = 2 - - var/partialTag = "" //set by a partial tagger the first time round, then put in destinationTag if it goes through again. - - // initialize a holder from the contents of a disposal unit -/obj/structure/disposalholder/proc/check_mob(list/stuff, max_depth = 2) - . = list() - if (max_depth > 0) - for (var/mob/living/M in stuff) - if (!istype(M, /mob/living/silicon/robot/drone)) - . += M - for (var/obj/O in stuff) - . += check_mob(O.contents, max_depth - 1) -/obj/structure/disposalholder/proc/init(var/obj/machinery/disposal/D, var/datum/gas_mixture/flush_gas) - - gas = flush_gas// transfer gas resv. into holder object -- let's be explicit about the data this proc consumes, please. - var/stuff = D.contents - D.component_parts - //Check for any living mobs trigger hasmob. - //hasmob effects whether the package goes to cargo or its tagged destination. - hasmob = length(check_mob(stuff)) - - // now everything inside the disposal gets put into the holder - // note AM since can contain mobs or objs - for(var/atom/movable/AM in stuff) - AM.forceMove(src) - if(istype(AM, /obj/structure/bigDelivery) && !hasmob) - var/obj/structure/bigDelivery/T = AM - src.destinationTag = T.sortTag - if(istype(AM, /obj/item/smallDelivery) && !hasmob) - var/obj/item/smallDelivery/T = AM - src.destinationTag = T.sortTag - //Drones can mail themselves through maint. - if(isdrone(AM)) - var/mob/living/silicon/robot/drone/drone = AM - src.destinationTag = drone.mail_destination - - - // start the movement process - // argument is the disposal unit the holder started in -/obj/structure/disposalholder/proc/start(var/obj/machinery/disposal/D) - if(!D.trunk) - D.expel(src) // no trunk connected, so expel immediately - return - - forceMove(D.trunk) - active = 1 - set_dir(DOWN) - START_PROCESSING(SSdisposals, src) - - // movement process, persists while holder is moving through pipes -/obj/structure/disposalholder/Process() - for (var/i in 1 to speed) - if(!(count--)) - active = 0 - if(!active || QDELETED(src)) - return PROCESS_KILL - - var/obj/structure/disposalpipe/last - - if(hasmob && prob(10)) - for(var/mob/living/H in check_mob(src)) - H.apply_damage(30, DAMAGE_BRUTE, null, DAMAGE_FLAG_DISPERSED, "Blunt Trauma", ARMOR_MELEE_MAJOR)//horribly maim any living creature jumping down disposals. c'est la vie - - var/obj/structure/disposalpipe/curr = loc - if(!istype(curr)) - qdel(src) - return PROCESS_KILL - - last = curr - curr = curr.transfer(src) - - if(QDELETED(src)) - return PROCESS_KILL - - if(!curr) - last.expel(src, loc, dir) - - // find the turf which should contain the next pipe -/obj/structure/disposalholder/proc/nextloc() - return get_step(loc,dir) - -// find a matching pipe on a turf -/obj/structure/disposalholder/proc/findpipe(var/turf/T) - if(!T) - return null - - var/fdir = turn(dir, 180) // flip the movement direction - for(var/obj/structure/disposalpipe/P in T) - if(fdir & P.dpdir) // find pipe direction mask that matches flipped dir - return P - // if no matching pipe, return null - return null - -// merge two holder objects -// used when a a holder meets a stuck holder -/obj/structure/disposalholder/proc/merge(var/obj/structure/disposalholder/other) - if(other.reagents?.total_volume) - src.create_reagents() - other.reagents.trans_to_holder(src.reagents, other.reagents.total_volume) - for(var/atom/movable/AM in other) - AM.forceMove(src) // move everything in other holder to this one - if(ismob(AM)) - var/mob/M = AM - if(M.client) // if a client mob, update eye to follow this holder - M.client.eye = src - qdel(other) - -/obj/structure/disposalholder/proc/settag(var/new_tag) - destinationTag = new_tag - -/obj/structure/disposalholder/proc/setpartialtag(var/new_tag) - if(partialTag == new_tag) - destinationTag = new_tag - partialTag = "" - else - partialTag = new_tag - -// called when player tries to move while in a pipe -/obj/structure/disposalholder/relaymove(mob/user as mob) - if(!istype(user,/mob/living)) - return - - var/mob/living/U = user - - if (U.stat || U.last_special <= world.time) - return - - U.last_special = world.time+100 - - if (src.loc) - for (var/mob/M in hearers(src.loc.loc)) - to_chat(M, "CLONG, clong!") - - playsound(src.loc, 'sound/effects/clang.ogg', 50, 0, 0) - -// called to vent all gas in holder to a location -/obj/structure/disposalholder/proc/vent_gas(var/atom/location) - if(location) - location.assume_air(gas) // vent all gas to turf - -/obj/structure/disposalholder/Destroy() - QDEL_NULL(gas) - active = 0 - STOP_PROCESSING(SSdisposals, src) - return ..() diff --git a/code/modules/recycling/disposalpipe.dm b/code/modules/recycling/disposalpipe.dm deleted file mode 100644 index 6a644b33f221d..0000000000000 --- a/code/modules/recycling/disposalpipe.dm +++ /dev/null @@ -1,838 +0,0 @@ -// Disposal pipes - -/obj/structure/disposalpipe - icon = 'icons/obj/pipes/disposal.dmi' - name = "disposal pipe" - desc = "An underfloor disposal pipe." - anchored = TRUE - density = FALSE - - level = 1 // underfloor only - var/dpdir = 0 // bitmask of pipe directions - dir = 0 // dir will contain dominant direction for junction pipes - health_max = 10 - alpha = 192 // Plane and alpha modified for mapping, reset to normal on spawn. - layer = ABOVE_TILE_LAYER - var/base_icon_state // initial icon state on map - var/sort_type = "" - var/turn = DISPOSAL_FLIP_NONE - var/flipped_state // If it has a mirrored version, this is the typepath for it. - // new pipe, set the icon_state as on map - -/obj/structure/disposalpipe/Initialize() - . = ..() - alpha = 255 - layer = DISPOSALS_PIPE_LAYER - base_icon_state = icon_state - update_icon() - -// pipe is deleted -// ensure if holder is present, it is expelled -/obj/structure/disposalpipe/Destroy() - var/obj/structure/disposalholder/H = locate() in src - if(H) - // holder was present - H.active = 0 - var/turf/T = src.loc - if(T.density) - // deleting pipe is inside a dense turf (wall) - // this is unlikely, but just dump out everything into the turf in case - - for(var/atom/movable/AM in H) - AM.forceMove(T) - AM.pipe_eject(0) - qdel(H) - return ..() - - // otherwise, do normal expel from turf - if(H) - expel(H, T, 0) - . = ..() - -/obj/structure/disposalpipe/proc/on_build() - update() - update_icon() - - // returns the direction of the next pipe object, given the entrance dir - // by default, returns the bitmask of remaining directions -/obj/structure/disposalpipe/proc/nextdir(var/fromdir) - return dpdir & (~turn(fromdir, 180)) - - // transfer the holder through this pipe segment - // overriden for special behaviour - // -/obj/structure/disposalpipe/proc/transfer(var/obj/structure/disposalholder/H) - var/nextdir = nextdir(H.dir) - H.set_dir(nextdir) - var/turf/T = H.nextloc() - var/obj/structure/disposalpipe/P = H.findpipe(T) - - if(P) - // find other holder in next loc, if inactive merge it with current - var/obj/structure/disposalholder/H2 = locate() in P - if(H2 && !H2.active) - H.merge(H2) - - H.forceMove(P) - else // if wasn't a pipe, then set loc to turf - H.forceMove(T) - return null - - return P - - - // update the icon_state to reflect hidden status -/obj/structure/disposalpipe/proc/update() - var/turf/T = src.loc - hide(!T.is_plating() && !istype(T,/turf/space)) // space never hides pipes - - // hide called by levelupdate if turf intact status changes - // change visibility status and force update of icon -/obj/structure/disposalpipe/hide(var/intact) - set_invisibility(intact ? 101: 0) // hide if floor is intact - update_icon() - -// expel the held objects into a turf -// called when there is a break in the pipe -/obj/structure/disposalpipe/proc/expel(var/obj/structure/disposalholder/H, var/turf/T, var/direction) - if(!istype(H)) - return - - if (!T) //panic! - qdel(H) - return - - // Empty the holder if it is expelled into a dense turf. - // Leaving it intact and sitting in a wall is stupid. - if(T.density) - for(var/atom/movable/AM in H) - AM.loc = T - AM.pipe_eject(0) - qdel(H) - return - - - if(!T.is_plating() && istype(T,/turf/simulated/floor)) //intact floor, pop the tile - var/turf/simulated/floor/F = T - F.break_tile() - new /obj/item/stack/tile(H) // add to holder so it will be thrown with other stuff - - var/turf/target - if(direction) // direction is specified - if(istype(T, /turf/space)) // if ended in space, then range is unlimited - target = get_edge_target_turf(T, direction) - else // otherwise limit to 10 tiles - target = get_ranged_target_turf(T, direction, 10) - - playsound(src, 'sound/machines/hiss.ogg', 50, 0, 0) - if(H) - for(var/atom/movable/AM in H) - AM.forceMove(T) - AM.pipe_eject(direction) - spawn(1) - if(AM) - AM.throw_at(target, 100, 1) - H.vent_gas(T) - - // throw out vomit - if(H.reagents?.total_volume) - visible_message(SPAN_DANGER("Vomit spews out of the disposal pipe!")) - playsound(loc, 'sound/effects/splat.ogg', 50, 1) - if(istype(src.loc, /turf/simulated)) - var/obj/effect/decal/cleanable/vomit/splat = new /obj/effect/decal/cleanable/vomit(src.loc) - H.reagents.trans_to_obj(splat, min(15, H.reagents.total_volume)) - splat.update_icon() - - qdel(H) - - else // no specified direction, so throw in random direction - playsound(src, 'sound/machines/hiss.ogg', 50, 0, 0) - if(H) - for(var/atom/movable/AM in H) - target = get_offset_target_turf(T, rand(5)-rand(5), rand(5)-rand(5)) - - AM.forceMove(T) - AM.pipe_eject(0) - spawn(1) - if(AM) - AM.throw_at(target, 5, 1) - H.vent_gas(T) // all gas vent to turf - qdel(H) - return - -// call to break the pipe -// will expel any holder inside at the time -// then delete the pipe -// remains : set to leave broken pipe pieces in place -/obj/structure/disposalpipe/proc/broken(var/remains = 0) - if(remains) - for(var/D in GLOB.cardinal) - if(D & dpdir) - var/obj/structure/disposalpipe/broken/P = new(src.loc) - P.set_dir(D) - - src.set_invisibility(101) // make invisible (since we won't delete the pipe immediately) - var/obj/structure/disposalholder/H = locate() in src - if(H) - // holder was present - H.active = 0 - var/turf/T = src.loc - if(T.density) - // broken pipe is inside a dense turf (wall) - // this is unlikely, but just dump out everything into the turf in case - - for(var/atom/movable/AM in H) - AM.forceMove(T) - AM.pipe_eject(0) - qdel(H) - return - - // otherwise, do normal expel from turf - if(H) - expel(H, T, 0) - - spawn(2) // delete pipe after 2 ticks to ensure expel proc finished - qdel(src) - -/obj/structure/disposalpipe/on_death() - broken(prob(0.5)) - -//attack by item -//weldingtool: unfasten and convert to obj/disposalconstruct - -/obj/structure/disposalpipe/attackby(obj/item/I, mob/user) - var/turf/T = src.loc - if(!T.is_plating()) - return // prevent interaction with T-scanner revealed pipes - src.add_fingerprint(user, 0, I) - - if (user.a_intent == I_HURT) - ..() - return - - if(istype(I, /obj/item/weldingtool)) - var/obj/item/weldingtool/W = I - if(W.remove_fuel(0,user)) - playsound(src.loc, 'sound/items/Welder2.ogg', 100, 1) - // check if anything changed over 2 seconds - var/turf/uloc = user.loc - var/atom/wloc = W.loc - to_chat(user, "Slicing the disposal pipe.") - sleep(30) - if(!W.isOn()) return - if(user.loc == uloc && wloc == W.loc) - welded() - else - to_chat(user, "You must stay still while welding the pipe.") - else - to_chat(user, "You need more welding fuel to cut the pipe.") - return - - ..() - - // called when pipe is cut with welder -/obj/structure/disposalpipe/proc/welded() - var/obj/structure/disposalconstruct/C = new (src.loc, src) - src.transfer_fingerprints_to(C) - C.set_density(0) - C.anchored = TRUE - C.update() - - qdel(src) - -// pipe is deleted -// ensure if holder is present, it is expelled -/obj/structure/disposalpipe/Destroy() - var/obj/structure/disposalholder/H = locate() in src - if(H) - // holder was present - H.active = 0 - var/turf/T = src.loc - if(T.density) - // deleting pipe is inside a dense turf (wall) - // this is unlikely, but just dump out everything into the turf in case - - for(var/atom/movable/AM in H) - AM.forceMove(T) - AM.pipe_eject(0) - qdel(H) - return ..() - - // otherwise, do normal expel from turf - if(H) - expel(H, T, 0) - . = ..() - -/obj/structure/disposalpipe/hides_under_flooring() - return 1 - -// *** TEST verb -//client/verb/dispstop() -// for(var/obj/structure/disposalholder/H in world) -// H.active = 0 - -// a straight or bent segment -/obj/structure/disposalpipe/segment - icon_state = "pipe-s" // Sadly this var stores state. "pipe-c" is corner. Should be changed, but requires huge map diff. - turn = DISPOSAL_FLIP_FLIP - -/obj/structure/disposalpipe/segment/Initialize() - . = ..() - if(icon_state == "pipe-s") - dpdir = dir | turn(dir, 180) - else - dpdir = dir | turn(dir, -90) - turn = DISPOSAL_FLIP_RIGHT - - update() - return - -/obj/structure/disposalpipe/segment/bent - icon_state = "pipe-c" - -///// Z-Level stuff -/obj/structure/disposalpipe/up - icon_state = "pipe-u" - -/obj/structure/disposalpipe/up/Initialize() - . = ..() - dpdir = dir - update() - return - -/obj/structure/disposalpipe/up/nextdir(var/fromdir) - var/nextdir - if(fromdir == 11) - nextdir = dir - else - nextdir = 12 - return nextdir - -/obj/structure/disposalpipe/up/transfer(var/obj/structure/disposalholder/H) - var/nextdir = nextdir(H.dir) - H.set_dir(nextdir) - - var/turf/T - var/obj/structure/disposalpipe/P - - if(nextdir == 12) - T = GetAbove(src) - if(!T) - H.forceMove(loc) - return - else - for(var/obj/structure/disposalpipe/down/F in T) - P = F - - else - T = get_step(src.loc, H.dir) - P = H.findpipe(T) - - if(P) - // find other holder in next loc, if inactive merge it with current - var/obj/structure/disposalholder/H2 = locate() in P - if(H2 && !H2.active) - H.merge(H2) - - H.forceMove(P) - else // if wasn't a pipe, then set loc to turf - H.forceMove(T) - return null - - return P - -/obj/structure/disposalpipe/down - icon_state = "pipe-d" - -/obj/structure/disposalpipe/down/Initialize() - . = ..() - dpdir = dir - update() - return - -/obj/structure/disposalpipe/down/nextdir(var/fromdir) - var/nextdir - if(fromdir == 12) - nextdir = dir - else - nextdir = 11 - return nextdir - -/obj/structure/disposalpipe/down/transfer(var/obj/structure/disposalholder/H) - var/nextdir = nextdir(H.dir) - H.dir = nextdir - - var/turf/T - var/obj/structure/disposalpipe/P - - if(nextdir == 11) - T = GetBelow(src) - if(!T) - H.forceMove(src.loc) - return - else - for(var/obj/structure/disposalpipe/up/F in T) - P = F - else - T = get_step(src.loc, H.dir) - P = H.findpipe(T) - if(P) - // find other holder in next loc, if inactive merge it with current - var/obj/structure/disposalholder/H2 = locate() in P - if(H2 && !H2.active) - H.merge(H2) - H.forceMove(P) - else // if wasn't a pipe, then set loc to turf - H.forceMove(T) - return null - - return P -///// Z-Level stuff - -/obj/structure/disposalpipe/junction/yjunction - icon_state = "pipe-y" - turn = DISPOSAL_FLIP_LEFT|DISPOSAL_FLIP_RIGHT - flipped_state = null - -/obj/structure/disposalpipe/junction/mirrored - icon_state = "pipe-j2" - flipped_state = /obj/structure/disposalpipe/junction - turn = DISPOSAL_FLIP_LEFT|DISPOSAL_FLIP_FLIP - -//a three-way junction with dir being the dominant direction -/obj/structure/disposalpipe/junction - icon_state = "pipe-j1" - turn = DISPOSAL_FLIP_RIGHT|DISPOSAL_FLIP_FLIP - flipped_state = /obj/structure/disposalpipe/junction/mirrored - -/obj/structure/disposalpipe/junction/Initialize() - . = ..() - if(icon_state == "pipe-j1") - dpdir = dir | turn(dir, -90) | turn(dir,180) - turn = DISPOSAL_FLIP_RIGHT|DISPOSAL_FLIP_FLIP - else if(icon_state == "pipe-j2") - dpdir = dir | turn(dir, 90) | turn(dir,180) - turn = DISPOSAL_FLIP_LEFT|DISPOSAL_FLIP_FLIP - else // pipe-y - dpdir = dir | turn(dir,90) | turn(dir, -90) - turn = DISPOSAL_FLIP_LEFT|DISPOSAL_FLIP_RIGHT - update() - return - - - // next direction to move - // if coming in from secondary dirs, then next is primary dir - // if coming in from primary dir, then next is equal chance of other dirs - -/obj/structure/disposalpipe/junction/nextdir(var/fromdir) - var/flipdir = turn(fromdir, 180) - if(flipdir != dir) // came from secondary dir - return dir // so exit through primary - else // came from primary - // so need to choose either secondary exit - var/mask = ..(fromdir) - - // find a bit which is set - var/setbit = 0 - if(mask & NORTH) - setbit = NORTH - else if(mask & SOUTH) - setbit = SOUTH - else if(mask & EAST) - setbit = EAST - else - setbit = WEST - - if(prob(50)) // 50% chance to choose the found bit or the other one - return setbit - else - return mask & (~setbit) - -/obj/structure/disposalpipe/tagger - name = "package tagger" - icon_state = "pipe-tagger" - var/sort_tag = "" - var/partial = 0 - turn = DISPOSAL_FLIP_FLIP - -/obj/structure/disposalpipe/tagger/proc/updatedesc() - desc = initial(desc) - if(sort_tag) - desc += "\nIt's tagging objects with the '[sort_tag]' tag." - -/obj/structure/disposalpipe/tagger/proc/updatename() - if(sort_tag) - SetName("[initial(name)] ([sort_tag])") - else - SetName(initial(name)) - -/obj/structure/disposalpipe/tagger/Initialize() - . = ..() - dpdir = dir | turn(dir, 180) - if(sort_tag) GLOB.tagger_locations |= sort_tag - updatename() - updatedesc() - update() - -/obj/structure/disposalpipe/tagger/attackby(var/obj/item/I, var/mob/user) - if(..()) - return - - if(istype(I, /obj/item/device/destTagger)) - var/obj/item/device/destTagger/O = I - - if(O.currTag)// Tag set - sort_tag = O.currTag - playsound(src.loc, 'sound/machines/twobeep.ogg', 100, 1) - to_chat(user, "Changed tag to '[sort_tag]'.") - updatename() - updatedesc() - -/obj/structure/disposalpipe/tagger/transfer(var/obj/structure/disposalholder/H) - if(sort_tag) - if(partial) - H.setpartialtag(sort_tag) - else - H.settag(sort_tag) - return ..() - -/obj/structure/disposalpipe/tagger/partial //needs two passes to tag - name = "partial package tagger" - icon_state = "pipe-tagger-partial" - partial = 1 - turn = DISPOSAL_FLIP_FLIP - -/obj/structure/disposalpipe/diversion_junction - name = "diversion junction" - icon_state = "pipe-j1s" - desc = "An underfloor disposal pipe with a flip mechanism." - - var/active = 0 - var/active_dir = 0 - var/inactive_dir = 0 - var/sortdir = 0 - var/id_tag - var/obj/machinery/disposal_switch/linked - turn = DISPOSAL_FLIP_FLIP | DISPOSAL_FLIP_RIGHT - flipped_state = /obj/structure/disposalpipe/diversion_junction/flipped - -/obj/structure/disposalpipe/diversion_junction/proc/updatedesc() - desc = initial(desc) - if(sort_type) - desc += "\nIt's currently [active ? "" : "un"]active!" - -/obj/structure/disposalpipe/diversion_junction/proc/updatedir() - inactive_dir = dir - active_dir = turn(inactive_dir, 180) - if(icon_state == "pipe-j1s") - sortdir = turn(inactive_dir, -90) - else if(icon_state == "pipe-j2s") - sortdir = turn(inactive_dir, 90) - - dpdir = sortdir | inactive_dir | active_dir - -/obj/structure/disposalpipe/diversion_junction/Initialize() - . = ..() - GLOB.diversion_junctions += src - updatedir() - updatedesc() - update() - -/obj/structure/disposalpipe/diversion_junction/on_build() - ..() - updatedir() - updatedesc() - -/obj/structure/disposalpipe/diversion_junction/Destroy() - if(linked) - linked.junctions.Remove(src) - linked = null - return ..() - -/obj/structure/disposalpipe/diversion_junction/attackby(var/obj/item/I, var/mob/user) - if(..()) - return 1 - - if(istype(I, /obj/item/disposal_switch_construct)) - var/obj/item/disposal_switch_construct/C = I - if(C.id_tag) - id_tag = C.id_tag - playsound(src.loc, 'sound/machines/twobeep.ogg', 100, 1) - user.visible_message("\The [user] changes \the [src]'s tag.") - - -/obj/structure/disposalpipe/diversion_junction/nextdir(var/fromdir, var/sortTag) - if(fromdir != sortdir) - if(active) - return sortdir - else - return inactive_dir - else - return inactive_dir - -/obj/structure/disposalpipe/diversion_junction/transfer(var/obj/structure/disposalholder/H) - var/nextdir = nextdir(H.dir, H.destinationTag) - H.set_dir(nextdir) - var/turf/T = H.nextloc() - var/obj/structure/disposalpipe/P = H.findpipe(T) - - if(P) - var/obj/structure/disposalholder/H2 = locate() in P - if(H2 && !H2.active) - H.merge(H2) - - H.forceMove(P) - else - H.forceMove(T) - return null - - return P - -/obj/structure/disposalpipe/diversion_junction/flipped //for easier and cleaner mapping - icon_state = "pipe-j2s" - turn = DISPOSAL_FLIP_FLIP | DISPOSAL_FLIP_LEFT - flipped_state = /obj/structure/disposalpipe/diversion_junction - -//a three-way junction that sorts objects -/obj/structure/disposalpipe/sortjunction - name = "sorting junction" - icon_state = "pipe-j1s" - desc = "An underfloor disposal pipe with a package sorting mechanism." - - var/posdir = 0 - var/negdir = 0 - var/sortdir = 0 - turn = DISPOSAL_FLIP_RIGHT|DISPOSAL_FLIP_FLIP - flipped_state = /obj/structure/disposalpipe/sortjunction/flipped - -/obj/structure/disposalpipe/sortjunction/proc/updatedesc() - desc = initial(desc) - if(sort_type) - desc += "\nIt's filtering objects with the '[sort_type]' tag." - -/obj/structure/disposalpipe/sortjunction/proc/updatename() - if(sort_type) - SetName("[initial(name)] ([sort_type])") - else - SetName(initial(name)) - -/obj/structure/disposalpipe/sortjunction/proc/updatedir() - posdir = dir - negdir = turn(posdir, 180) - - if(icon_state == "pipe-j1s") - sortdir = turn(posdir, -90) - else if(icon_state == "pipe-j2s") - sortdir = turn(posdir, 90) - - dpdir = sortdir | posdir | negdir - -/obj/structure/disposalpipe/sortjunction/Initialize() - . = ..() - if(sort_type) GLOB.tagger_locations |= sort_type - - updatedir() - updatename() - updatedesc() - update() - -/obj/structure/disposalpipe/sortjunction/on_build() - ..() - updatedir() - updatedesc() - updatename() - -/obj/structure/disposalpipe/sortjunction/attackby(var/obj/item/I, var/mob/user) - if(..()) - return - - if(istype(I, /obj/item/device/destTagger)) - var/obj/item/device/destTagger/O = I - - if(O.currTag)// Tag set - sort_type = O.currTag - playsound(src.loc, 'sound/machines/twobeep.ogg', 100, 1) - to_chat(user, "Changed filter to '[sort_type]'.") - updatename() - updatedesc() - -/obj/structure/disposalpipe/sortjunction/proc/divert_check(var/checkTag) - return sort_type == checkTag - - // next direction to move - // if coming in from negdir, then next is primary dir or sortdir - // if coming in from posdir, then flip around and go back to posdir - // if coming in from sortdir, go to posdir - -/obj/structure/disposalpipe/sortjunction/nextdir(var/fromdir, var/sortTag) - if(fromdir != sortdir) // probably came from the negdir - if(divert_check(sortTag)) - return sortdir - else - return posdir - else // came from sortdir - // so go with the flow to positive direction - return posdir - -/obj/structure/disposalpipe/sortjunction/transfer(var/obj/structure/disposalholder/H) - var/nextdir = nextdir(H.dir, H.destinationTag) - H.set_dir(nextdir) - var/turf/T = H.nextloc() - var/obj/structure/disposalpipe/P = H.findpipe(T) - - if(P) - // find other holder in next loc, if inactive merge it with current - var/obj/structure/disposalholder/H2 = locate() in P - if(H2 && !H2.active) - H.merge(H2) - - H.forceMove(P) - else // if wasn't a pipe, then set loc to turf - H.forceMove(T) - return null - - return P - -//a three-way junction that filters all wrapped and tagged items -/obj/structure/disposalpipe/sortjunction/wildcard - name = "wildcard sorting junction" - desc = "An underfloor disposal pipe which filters all wrapped and tagged items." - flipped_state = /obj/structure/disposalpipe/sortjunction/wildcard/flipped - -/obj/structure/disposalpipe/sortjunction/wildcard/divert_check(var/checkTag) - return checkTag != "" - -//junction that filters all untagged items -/obj/structure/disposalpipe/sortjunction/untagged - name = "untagged sorting junction" - desc = "An underfloor disposal pipe which filters all untagged items." - flipped_state = /obj/structure/disposalpipe/sortjunction/untagged/flipped - -/obj/structure/disposalpipe/sortjunction/untagged/divert_check(var/checkTag) - return checkTag == "" - -/obj/structure/disposalpipe/sortjunction/flipped //for easier and cleaner mapping - icon_state = "pipe-j2s" - turn = DISPOSAL_FLIP_LEFT|DISPOSAL_FLIP_FLIP - flipped_state = /obj/structure/disposalpipe/sortjunction - -/obj/structure/disposalpipe/sortjunction/wildcard/flipped - icon_state = "pipe-j2s" - turn = DISPOSAL_FLIP_LEFT|DISPOSAL_FLIP_FLIP - flipped_state = /obj/structure/disposalpipe/sortjunction/wildcard - -/obj/structure/disposalpipe/sortjunction/untagged/flipped - icon_state = "pipe-j2s" - turn = DISPOSAL_FLIP_LEFT|DISPOSAL_FLIP_FLIP - flipped_state = /obj/structure/disposalpipe/sortjunction/untagged - -//a trunk joining to a disposal bin or outlet on the same turf -/obj/structure/disposalpipe/trunk - icon_state = "pipe-t" - var/obj/linked // the linked obj/machinery/disposal or obj/disposaloutlet - -/obj/structure/disposalpipe/trunk/Initialize() - . = ..() - dpdir = dir - spawn(1) - getlinked() - - update() - return - -/obj/structure/disposalpipe/trunk/proc/getlinked() - linked = null - var/obj/machinery/disposal/D = locate() in src.loc - if(D) - linked = D - if (!D.trunk) - D.trunk = src - - var/obj/structure/disposaloutlet/O = locate() in src.loc - if(O) - linked = O - - update() - return - - // Override attackby so we disallow trunkremoval when somethings ontop -/obj/structure/disposalpipe/trunk/attackby(var/obj/item/I, var/mob/user) - - //Disposal constructors - var/obj/structure/disposalconstruct/C = locate() in src.loc - if(C && C.anchored) - return - - var/turf/T = src.loc - if(!T.is_plating()) - return // prevent interaction with T-scanner revealed pipes - src.add_fingerprint(user, 0, I) - if(istype(I, /obj/item/weldingtool)) - var/obj/item/weldingtool/W = I - - if(W.remove_fuel(0,user)) - playsound(src.loc, 'sound/items/Welder2.ogg', 100, 1) - // check if anything changed over 2 seconds - var/turf/uloc = user.loc - var/atom/wloc = W.loc - to_chat(user, "Slicing the disposal pipe.") - sleep(30) - if(!W.isOn()) return - if(user.loc == uloc && wloc == W.loc) - if(linked && istype(linked,/obj/machinery/disposal)) - var/obj/machinery/disposal/D = linked - D.trunk = null - welded() - else - to_chat(user, "You must stay still while welding the pipe.") - else - to_chat(user, "You need more welding fuel to cut the pipe.") - return - - // would transfer to next pipe segment, but we are in a trunk - // if not entering from disposal bin, - // transfer to linked object (outlet or bin) - -/obj/structure/disposalpipe/trunk/transfer(var/obj/structure/disposalholder/H) - - if(H.dir == DOWN) // we just entered from a disposer - return ..() // so do base transfer proc - // otherwise, go to the linked object - if(linked) - var/obj/structure/disposaloutlet/O = linked - if(istype(O) && (H)) - O.expel(H) // expel at outlet - else - var/obj/machinery/disposal/D = linked - if(H) - D.expel(H) // expel at disposal - else - if(H) - src.expel(H, src.loc, 0) // expel at turf - return null - - // nextdir - -/obj/structure/disposalpipe/trunk/nextdir(var/fromdir) - if(fromdir == DOWN) - return dir - else - return 0 - -// a broken pipe -/obj/structure/disposalpipe/broken - icon_state = "pipe-b" - dpdir = 0 // broken pipes have dpdir=0 so they're not found as 'real' pipes - // i.e. will be treated as an empty turf - desc = "A broken piece of disposal pipe." - -/obj/structure/disposalpipe/broken/Initialize() - . = ..() - update() - return - - // called when welded - // for broken pipe, remove and turn into scrap - -/obj/structure/disposalpipe/broken/welded() - qdel(src) diff --git a/code/modules/recycling/sortingmachinery.dm b/code/modules/recycling/sortingmachinery.dm deleted file mode 100644 index 2dff615adecb1..0000000000000 --- a/code/modules/recycling/sortingmachinery.dm +++ /dev/null @@ -1,511 +0,0 @@ -/obj/structure/bigDelivery - desc = "A big wrapped package." - name = "large parcel" - icon = 'icons/obj/storage.dmi' - icon_state = "deliverycloset" - var/obj/wrapped = null - density = TRUE - var/sortTag = null - mouse_drag_pointer = MOUSE_ACTIVE_POINTER - var/examtext = null - var/nameset = 0 - var/label_y - var/label_x - var/tag_x - -/obj/structure/bigDelivery/attack_robot(mob/user as mob) - unwrap(user) - -/obj/structure/bigDelivery/attack_hand(mob/user as mob) - unwrap(user) - -/obj/structure/bigDelivery/proc/unwrap(var/mob/user) - if(Adjacent(user)) - // Destroy will drop our wrapped object on the turf, so let it. - qdel(src) - -/obj/structure/bigDelivery/attackby(obj/item/W as obj, mob/user as mob) - if(istype(W, /obj/item/device/destTagger)) - var/obj/item/device/destTagger/O = W - if(O.currTag) - if(src.sortTag != O.currTag) - to_chat(user, "You have labeled the destination as [O.currTag].") - if(!src.sortTag) - src.sortTag = O.currTag - update_icon() - else - src.sortTag = O.currTag - playsound(src.loc, 'sound/machines/twobeep.ogg', 50, 1) - else - to_chat(user, "The package is already labeled for [O.currTag].") - else - to_chat(user, "You need to set a destination first!") - - else if(istype(W, /obj/item/pen)) - switch(alert("What would you like to alter?",,"Title","Description", "Cancel")) - if("Title") - var/str = sanitizeSafe(input(usr,"Label text?","Set label",""), MAX_NAME_LEN) - if(!str || !length(str)) - to_chat(usr, " Invalid text.") - return - user.visible_message("\The [user] titles \the [src] with \a [W], marking down: \"[str]\"",\ - "You title \the [src]: \"[str]\"",\ - "You hear someone scribbling a note.") - SetName("[name] ([str])") - if(!examtext && !nameset) - nameset = 1 - update_icon() - else - nameset = 1 - if("Description") - var/str = sanitize(input(usr,"Label text?","Set label","")) - if(!str || !length(str)) - to_chat(usr, "Invalid text.") - return - if(!examtext && !nameset) - examtext = str - update_icon() - else - examtext = str - user.visible_message("\The [user] labels \the [src] with \a [W], scribbling down: \"[examtext]\"",\ - "You label \the [src]: \"[examtext]\"",\ - "You hear someone scribbling a note.") - return - -/obj/structure/bigDelivery/on_update_icon() - overlays.Cut() - if(nameset || examtext) - var/image/I = new/image('icons/obj/storage.dmi',"delivery_label") - if(icon_state == "deliverycloset") - I.pixel_x = 2 - if(label_y == null) - label_y = rand(-6, 11) - I.pixel_y = label_y - else if(icon_state == "deliverycrate") - if(label_x == null) - label_x = rand(-8, 6) - I.pixel_x = label_x - I.pixel_y = -3 - overlays += I - if(src.sortTag) - var/image/I = new/image('icons/obj/storage.dmi',"delivery_tag") - if(icon_state == "deliverycloset") - if(tag_x == null) - tag_x = rand(-2, 3) - I.pixel_x = tag_x - I.pixel_y = 9 - else if(icon_state == "deliverycrate") - if(tag_x == null) - tag_x = rand(-8, 6) - I.pixel_x = tag_x - I.pixel_y = -3 - overlays += I - -/obj/structure/bigDelivery/examine(mob/user, distance) - . = ..() - if(distance <= 4) - if(sortTag) - to_chat(user, "It is labeled \"[sortTag]\"") - if(examtext) - to_chat(user, "It has a note attached which reads, \"[examtext]\"") - -/obj/structure/bigDelivery/Destroy() - if(wrapped) //sometimes items can disappear. For example, bombs. --rastaf0 - wrapped.dropInto(loc) - if(istype(wrapped, /obj/structure/closet)) - var/obj/structure/closet/O = wrapped - O.welded = 0 - wrapped = null - var/turf/T = get_turf(src) - for(var/atom/movable/AM in contents) - AM.forceMove(T) - return ..() - -/obj/item/smallDelivery - desc = "A small wrapped package." - name = "small parcel" - icon = 'icons/obj/storage.dmi' - icon_state = "deliverycrate3" - var/obj/item/wrapped = null - var/sortTag = null - var/examtext = null - var/nameset = 0 - var/tag_x - -/obj/item/smallDelivery/proc/unwrap(var/mob/user) - if (!contents.len || !Adjacent(user)) - return - - user.put_in_hands(wrapped) - // Take out any other items that might be in the package - for(var/obj/item/I in src) - user.put_in_hands(I) - - qdel(src) - -/obj/item/smallDelivery/attack_robot(mob/user as mob) - unwrap(user) - -/obj/item/smallDelivery/attack_self(mob/user as mob) - unwrap(user) - -/obj/item/smallDelivery/attackby(obj/item/W as obj, mob/user as mob) - if(istype(W, /obj/item/device/destTagger)) - var/obj/item/device/destTagger/O = W - if(O.currTag) - if(src.sortTag != O.currTag) - to_chat(user, "You have labeled the destination as [O.currTag].") - if(!src.sortTag) - src.sortTag = O.currTag - update_icon() - else - src.sortTag = O.currTag - playsound(src.loc, 'sound/machines/twobeep.ogg', 50, 1) - else - to_chat(user, "The package is already labeled for [O.currTag].") - else - to_chat(user, "You need to set a destination first!") - - else if(istype(W, /obj/item/pen)) - switch(alert("What would you like to alter?",,"Title","Description", "Cancel")) - if("Title") - var/str = sanitizeSafe(input(usr,"Label text?","Set label",""), MAX_NAME_LEN) - if(!str || !length(str)) - to_chat(usr, " Invalid text.") - return - user.visible_message("\The [user] titles \the [src] with \a [W], marking down: \"[str]\"",\ - "You title \the [src]: \"[str]\"",\ - "You hear someone scribbling a note.") - SetName("[name] ([str])") - if(!examtext && !nameset) - nameset = 1 - update_icon() - else - nameset = 1 - - if("Description") - var/str = sanitize(input(usr,"Label text?","Set label","")) - if(!str || !length(str)) - to_chat(usr, "Invalid text.") - return - if(!examtext && !nameset) - examtext = str - update_icon() - else - examtext = str - user.visible_message("\The [user] labels \the [src] with \a [W], scribbling down: \"[examtext]\"",\ - "You label \the [src]: \"[examtext]\"",\ - "You hear someone scribbling a note.") - return - -/obj/item/smallDelivery/on_update_icon() - overlays.Cut() - if((nameset || examtext) && icon_state != "deliverycrate1") - var/image/I = new/image('icons/obj/storage.dmi',"delivery_label") - if(icon_state == "deliverycrate5") - I.pixel_y = -1 - overlays += I - if(src.sortTag) - var/image/I = new/image('icons/obj/storage.dmi',"delivery_tag") - switch(icon_state) - if("deliverycrate1") - I.pixel_y = -5 - if("deliverycrate2") - I.pixel_y = -2 - if("deliverycrate3") - I.pixel_y = 0 - if("deliverycrate4") - if(tag_x == null) - tag_x = rand(0,5) - I.pixel_x = tag_x - I.pixel_y = 3 - if("deliverycrate5") - I.pixel_y = -3 - overlays += I - -/obj/item/smallDelivery/examine(mob/user, distance) - . = ..() - if(distance <= 4) - if(sortTag) - to_chat(user, "It is labeled \"[sortTag]\"") - if(examtext) - to_chat(user, "It has a note attached which reads, \"[examtext]\"") - -/obj/item/stack/package_wrap - name = "package wrapper" - desc = "Heavy duty brown paper used to wrap packages to protect them during shipping." - singular_name = "sheet" - max_amount = 25 - icon = 'icons/obj/items.dmi' - icon_state = "deliveryPaper" - w_class = ITEM_SIZE_NORMAL - -/obj/item/stack/package_wrap/twenty_five - amount = 25 - - -/obj/item/c_tube - name = "cardboard tube" - desc = "A tube... of cardboard." - icon = 'icons/obj/items.dmi' - icon_state = "c_tube" - throwforce = 1 - w_class = ITEM_SIZE_SMALL - throw_speed = 4 - throw_range = 5 - -/obj/item/stack/package_wrap/afterattack(var/obj/target as obj, mob/user as mob, proximity) - if(!proximity) return - if(!istype(target)) //this really shouldn't be necessary (but it is). -Pete - return - if(istype(target, /obj/item/smallDelivery) || istype(target,/obj/structure/bigDelivery) \ - || istype(target, /obj/item/gift) || istype(target, /obj/item/evidencebag)) - return - if(target.anchored) - return - if(target in user) - return - if(user in target) //no wrapping closets that you are inside - it's not physically possible - return - - if (istype(target, /obj/item) && !(istype(target, /obj/item/storage) && !istype(target,/obj/item/storage/box))) - var/obj/item/O = target - if (src.get_amount() >= 1) - var/obj/item/smallDelivery/P = new /obj/item/smallDelivery(get_turf(O.loc)) //Aaannd wrap it up! - if(!istype(O.loc, /turf)) - if(user.client) - user.client.screen -= O - P.wrapped = O - O.forceMove(P) - P.w_class = O.w_class - var/i = round(O.w_class) - if(i in list(1,2,3,4,5)) - P.icon_state = "deliverycrate[i]" - switch(i) - if(1) P.SetName("tiny parcel") - if(3) P.SetName("normal-sized parcel") - if(4) P.SetName("large parcel") - if(5) P.SetName("huge parcel") - if(i < 1) - P.icon_state = "deliverycrate1" - P.SetName("tiny parcel") - if(i > 5) - P.icon_state = "deliverycrate5" - P.SetName("huge parcel") - P.add_fingerprint(usr) - O.add_fingerprint(usr) - src.add_fingerprint(usr) - src.use(1) - user.visible_message("\The [user] wraps \a [target] with \a [src].",\ - "You wrap \the [target], leaving [src.get_amount()] units of paper on \the [src].",\ - "You hear someone taping paper around a small object.") - else - // Should be possible only to see this as a borg? - to_chat(user, "The synthesizer is out of paper.") - else if (istype(target, /obj/structure/closet/crate)) - var/obj/structure/closet/crate/O = target - if (src.get_amount() >= 3 && !O.opened) - var/obj/structure/bigDelivery/P = new /obj/structure/bigDelivery(get_turf(O.loc)) - P.icon_state = "deliverycrate" - P.wrapped = O - O.forceMove(P) - src.use(3) - user.visible_message("\The [user] wraps \a [target] with \a [src].",\ - "You wrap \the [target], leaving [src.get_amount()] units of paper on \the [src].",\ - "You hear someone taping paper around a large object.") - else if(src.get_amount() < 3) - to_chat(user, "You need more paper.") - else if (istype (target, /obj/structure/closet)) - var/obj/structure/closet/O = target - if (src.get_amount() >= 3 && !O.opened) - var/obj/structure/bigDelivery/P = new /obj/structure/bigDelivery(get_turf(O.loc)) - P.wrapped = O - O.welded = 1 - O.forceMove(P) - src.use(3) - user.visible_message("\The [user] wraps \a [target] with \a [src].",\ - "You wrap \the [target], leaving [src.get_amount()] units of paper on \the [src].",\ - "You hear someone taping paper around a large object.") - else if(src.get_amount() < 3) - to_chat(user, "You need more paper.") - else - to_chat(user, "The object you are trying to wrap is unsuitable for the sorting machinery!") - - return - -/obj/item/device/destTagger - name = "destination tagger" - desc = "Used to set the destination of properly wrapped packages." - icon = 'icons/obj/destination_tagger.dmi' - icon_state = "dest_tagger" - var/currTag = 0 - w_class = ITEM_SIZE_SMALL - item_state = "electronic" - obj_flags = OBJ_FLAG_CONDUCTIBLE - slot_flags = SLOT_BELT - matter = list(MATERIAL_STEEL = 100, MATERIAL_GLASS = 34) - -/obj/item/device/destTagger/proc/openwindow(mob/user as mob) - var/dat = "

              TagMaster 2.3

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

              Current Selection: [currTag ? currTag : "None"]
              " - dat += "
              Enter custom location." - show_browser(user, dat, "window=destTagScreen;size=450x375") - onclose(user, "destTagScreen") - -/obj/item/device/destTagger/attack_self(mob/user as mob) - openwindow(user) - -/obj/item/device/destTagger/OnTopic(user, href_list, state) - if(href_list["nextTag"] && (href_list["nextTag"] in GLOB.tagger_locations)) - src.currTag = href_list["nextTag"] - to_chat(user, "You set [src] to [src.currTag].") - playsound(src.loc, 'sound/machines/chime.ogg', 50, 1) - . = TOPIC_REFRESH - if(href_list["nextTag"] == "CUSTOM") - var/dest = input(user, "Please enter custom location.", "Location", src.currTag ? src.currTag : "None") - if(CanUseTopic(user, state)) - if(dest && lowertext(dest) != "none") - src.currTag = dest - to_chat(user, "You designate a custom location on [src], set to [src.currTag].") - playsound(src.loc, 'sound/machines/chime.ogg', 50, 1) - else - src.currTag = 0 - to_chat(user, "You clear [src]'s custom location.") - playsound(src.loc, 'sound/machines/chime.ogg', 50, 1) - . = TOPIC_REFRESH - else - . = TOPIC_HANDLED - - if(. == TOPIC_REFRESH) - openwindow(user) - -/obj/machinery/disposal/deliveryChute - name = "Delivery chute" - desc = "A chute for big and small packages alike!" - density = TRUE - icon_state = "intake" - - var/c_mode = 0 - -/obj/machinery/disposal/deliveryChute/New() - ..() - spawn(5) - trunk = locate() in src.loc - if(trunk) - trunk.linked = src // link the pipe trunk to self - -/obj/machinery/disposal/deliveryChute/interact() - return - -/obj/machinery/disposal/deliveryChute/on_update_icon() - return - -/obj/machinery/disposal/deliveryChute/Bumped(var/atom/movable/AM) //Go straight into the chute - if(istype(AM, /obj/item/projectile) || istype(AM, /obj/effect)) return - switch(dir) - if(NORTH) - if(AM.loc.y != src.loc.y+1) return - if(EAST) - if(AM.loc.x != src.loc.x+1) return - if(SOUTH) - if(AM.loc.y != src.loc.y-1) return - if(WEST) - if(AM.loc.x != src.loc.x-1) return - - var/mob/living/L = AM - if (istype(L) && L.ckey) - log_and_message_admins("has flushed themselves down \the [src].", L) - if(istype(AM, /obj)) - var/obj/O = AM - O.forceMove(src) - else if(istype(AM, /mob)) - var/mob/M = AM - M.forceMove(src) - src.flush() - -/obj/machinery/disposal/deliveryChute/flush() - flushing = 1 - flick("intake-closing", src) - var/obj/structure/disposalholder/H = new() // virtual holder object which actually - // travels through the pipes. - air_contents = new() // new empty gas resv. - - sleep(10) - playsound(src, 'sound/machines/disposalflush.ogg', 50, 0, 0) - sleep(5) // wait for animation to finish - - if(prob(35)) - for(var/mob/living/carbon/human/L in src) - var/list/obj/item/organ/external/crush = L.get_damageable_organs() - if(!crush.len) - return - - var/obj/item/organ/external/E = pick(crush) - - E.take_external_damage(45, used_weapon = "Blunt Trauma") - to_chat(L, "\The [src]'s mechanisms crush your [E.name]!") - - H.init(src) // copy the contents of disposer to holder - - H.start(src) // start the holder processing movement - flushing = 0 - // now reset disposal state - flush = 0 - if(mode == 2) // if was ready, - mode = 1 // switch to charging - update_icon() - return - -/obj/machinery/disposal/deliveryChute/attackby(var/obj/item/I, var/mob/user) - if(!I || !user) - return - - if(isScrewdriver(I)) - if(c_mode==0) - c_mode=1 - playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1) - to_chat(user, "You remove the screws around the power connection.") - return - else if(c_mode==1) - c_mode=0 - playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1) - to_chat(user, "You attach the screws around the power connection.") - return - else if(isWelder(I) && c_mode==1) - var/obj/item/weldingtool/W = I - if(W.remove_fuel(1,user)) - to_chat(user, "You start slicing the floorweld off the delivery chute.") - if(do_after(user, 2 SECONDS, src, DO_PUBLIC_UNIQUE)) - playsound(src.loc, 'sound/items/Welder2.ogg', 100, 1) - if(!src || !W.isOn()) return - to_chat(user, "You sliced the floorweld off the delivery chute.") - var/obj/structure/disposalconstruct/C = new (loc, src) - C.update() - qdel(src) - return - else - to_chat(user, "You need more welding fuel to complete this task.") - return - -/obj/machinery/disposal/deliveryChute/Destroy() - if(trunk) - trunk.linked = null - ..() - -/obj/item/stack/package_wrap/cyborg - name = "package wrapper synthesizer" - icon = 'icons/obj/items.dmi' - icon_state = "deliveryPaper" - gender = NEUTER - matter = null - uses_charge = 1 - charge_costs = list(1) - stacktype = /obj/item/stack/package_wrap diff --git a/code/modules/research/circuitprinter.dm b/code/modules/research/circuitprinter.dm deleted file mode 100644 index 622bf3ccd7b18..0000000000000 --- a/code/modules/research/circuitprinter.dm +++ /dev/null @@ -1,174 +0,0 @@ -/*///////////////Circuit Imprinter (By Darem)//////////////////////// - Used to print new circuit boards (for computers and similar systems) and AI modules. Each circuit board pattern are stored in -a /datum/desgin on the linked R&D console. You can then print them out in a fasion similar to a regular lathe. However, instead of -using metal and glass, it uses glass and reagents (usually sulphuric acid). -*/ - -/obj/machinery/r_n_d/circuit_imprinter - name = "circuit imprinter" - desc = "Accessed by a connected core fabricator console, it produces circuits from various materials and sulphuric acid." - icon_state = "circuit_imprinter" - atom_flags = ATOM_FLAG_OPEN_CONTAINER - base_type = /obj/machinery/r_n_d/circuit_imprinter - construct_state = /decl/machine_construction/default/panel_closed - - var/list/datum/design/queue = list() - var/progress = 0 - - var/max_material_storage = 100000 - var/mat_efficiency = 1 - var/speed = 1 - - idle_power_usage = 30 - active_power_usage = 2500 - - machine_name = "circuit imprinter" - machine_desc = "Creates circuit boards by etching raw sheets of material with sulphuric acid. Part of an R&D network." - -/obj/machinery/r_n_d/circuit_imprinter/New() - materials = default_material_composition.Copy() - - ..() - -/obj/machinery/r_n_d/circuit_imprinter/Process() - ..() - if(stat & (BROKEN | NOPOWER)) - update_icon() - return - if(queue.len == 0) - busy = 0 - update_icon() - return - var/datum/design/D = queue[1] - if(canBuild(D)) - busy = 1 - progress += speed - if(progress >= D.time) - build(D) - progress = 0 - removeFromQueue(1) - if(linked_console) - linked_console.updateUsrDialog() - update_icon() - else - if(busy) - visible_message("[icon2html(src, viewers(get_turf(src)))] [src] flashes: insufficient materials: [getLackingMaterials(D)].") - busy = 0 - update_icon() - -/obj/machinery/r_n_d/circuit_imprinter/RefreshParts() - var/T = 0 - var/obj/item/stock_parts/building_material/mat = get_component_of_type(/obj/item/stock_parts/building_material) - if(mat) - for(var/obj/item/reagent_containers/glass/G in mat.materials) - T += G.volume - if(!reagents) - create_reagents(T) - else - reagents.maximum_volume = T - - max_material_storage = 75000 * clamp(total_component_rating_of_type(/obj/item/stock_parts/matter_bin), 0, 10) - - T = clamp(total_component_rating_of_type(/obj/item/stock_parts/manipulator), 0, 3) - mat_efficiency = 1 - (T - 1) / 4 - speed = T - ..() - -/obj/machinery/r_n_d/circuit_imprinter/on_update_icon() - if(panel_open) - icon_state = "circuit_imprinter_t" - else if(busy) - icon_state = "circuit_imprinter_ani" - else - icon_state = "circuit_imprinter" - -/obj/machinery/r_n_d/circuit_imprinter/state_transition(var/decl/machine_construction/default/new_state) - . = ..() - if(istype(new_state) && linked_console) - linked_console.linked_imprinter = null - linked_console = null - -/obj/machinery/r_n_d/circuit_imprinter/components_are_accessible(path) - return !busy && ..() - -/obj/machinery/r_n_d/circuit_imprinter/cannot_transition_to(state_path) - if(busy) - return SPAN_NOTICE("\The [src] is busy. Please wait for completion of previous operation.") - return ..() - -/obj/machinery/r_n_d/circuit_imprinter/attackby(var/obj/item/O as obj, var/mob/user as mob) - if(busy) - to_chat(user, "\The [src] is busy. Please wait for completion of previous operation.") - return 1 - if(component_attackby(O, user)) - return TRUE - if(panel_open) - to_chat(user, "You can't load \the [src] while it's opened.") - return 1 - if(!linked_console) - to_chat(user, "\The [src] must be linked to an R&D console first.") - return 1 - if(O.is_open_container()) - return 0 - if(is_robot_module(O)) - return 0 - if(!istype(O, /obj/item/stack/material)) - to_chat(user, "You cannot insert this item into \the [src]!") - return 0 - if(stat & (BROKEN | NOPOWER)) - return 1 - - if(TotalMaterials() + SHEET_MATERIAL_AMOUNT > max_material_storage) - to_chat(user, "\The [src]'s material bin is full. Please remove material before adding more.") - return 1 - - var/obj/item/stack/material/stack = O - var/amount = min(stack.get_amount(), round((max_material_storage - TotalMaterials()) / SHEET_MATERIAL_AMOUNT)) - - busy = 1 - use_power_oneoff(max(1000, (SHEET_MATERIAL_AMOUNT * amount / 10))) - - var/t = stack.material.name - if(t) - if(do_after(usr, 1.6 SECONDS, src, DO_PUBLIC_UNIQUE)) - if(stack.use(amount)) - to_chat(user, "You add [amount] sheet\s to \the [src].") - materials[t] += amount * SHEET_MATERIAL_AMOUNT - busy = 0 - updateUsrDialog() - -/obj/machinery/r_n_d/circuit_imprinter/proc/addToQueue(var/datum/design/D) - queue += D - return - -/obj/machinery/r_n_d/circuit_imprinter/proc/removeFromQueue(var/index) - if(!is_valid_index(index, queue)) - return - queue.Cut(index, index + 1) - -/obj/machinery/r_n_d/circuit_imprinter/proc/canBuild(var/datum/design/D) - for(var/M in D.materials) - if(materials[M] <= D.materials[M] * mat_efficiency) - return 0 - for(var/C in D.chemicals) - if(!reagents.has_reagent(C, D.chemicals[C] * mat_efficiency)) - return 0 - return 1 - -/obj/machinery/r_n_d/circuit_imprinter/proc/build(var/datum/design/D) - var/power = active_power_usage - for(var/M in D.materials) - power += round(D.materials[M] / 5) - power = max(active_power_usage, power) - use_power_oneoff(power) - for(var/M in D.materials) - materials[M] = max(0, materials[M] - D.materials[M] * mat_efficiency) - for(var/C in D.chemicals) - reagents.remove_reagent(C, D.chemicals[C] * mat_efficiency) - - if(D.build_path) - var/obj/new_item = D.Fabricate(loc, src) - if(mat_efficiency != 1) // No matter out of nowhere - if(new_item.matter && new_item.matter.len > 0) - for(var/i in new_item.matter) - new_item.matter[i] = new_item.matter[i] * mat_efficiency diff --git a/code/modules/research/designs/_designs.dm b/code/modules/research/designs/_designs.dm deleted file mode 100644 index 43e2c5a5cdbac..0000000000000 --- a/code/modules/research/designs/_designs.dm +++ /dev/null @@ -1,74 +0,0 @@ -/*************************************************************** -** Design Datums ** -** All the data for building stuff and tracking reliability. ** -***************************************************************/ -/* -For the materials datum, it assumes you need reagents unless specified otherwise. To designate a material that isn't a reagent, -you use one of the material IDs below. These are NOT ids in the usual sense (they aren't defined in the object or part of a datum), -they are simply references used as part of a "has materials?" type proc. They all start with a to denote that they aren't reagents. -The currently supporting non-reagent materials: - -Don't add new keyword/IDs if they are made from an existing one (such as rods which are made from metal). Only add raw materials. - -Design Guidlines -- When adding new designs, check rdreadme.dm to see what kind of things have already been made and where new stuff is needed. -- A single sheet of anything is 2000 units of material. Materials besides metal/glass require help from other jobs (mining for -other types of metals and chemistry for reagents). - -*/ -//Note: More then one of these can be added to a design. - -/datum/design //Datum for object designs, used in construction - var/name = null //Name of the created object. If null it will be 'guessed' from build_path if possible. - var/desc = null //Description of the created object. If null it will use group_desc and name where applicable. - var/item_name = null //An item name before it is modified by various name-modifying procs - var/id = "id" //ID of the created object for easy refernece. Alphanumeric, lower-case, no symbols. - var/list/req_tech = list() //IDs of that techs the object originated from and the minimum level requirements. - var/build_type = null //Flag as to what kind machine the design is built in. See defines. - var/list/materials = list() //List of materials. Format: "id" = amount. - var/list/chemicals = list() //List of chemicals. - var/build_path = null //The path of the object that gets created. - var/time = 10 //How many ticks it requires to build - var/category = null //Primarily used for Mech Fabricators, but can be used for anything. - var/sort_string = "ZZZZZ" //Sorting order - -/datum/design/New() - ..() - item_name = name - AssembleDesignInfo() - -//These procs are used in subtypes for assigning names and descriptions dynamically -/datum/design/proc/AssembleDesignInfo() - AssembleDesignName() - AssembleDesignDesc() - return - -/datum/design/proc/AssembleDesignName() - if(!name && build_path) //Get name from build path if posible - var/atom/movable/A = build_path - name = initial(A.name) - item_name = name - return - -/datum/design/proc/AssembleDesignDesc() - if(!desc) //Try to make up a nice description if we don't have one - desc = "Allows for the construction of \a [item_name]." - return - -//Returns a new instance of the item for this design -//This is to allow additional initialization to be performed, including possibly additional contructor arguments. -/datum/design/proc/Fabricate(var/newloc, var/fabricator) - return new build_path(newloc) - -/datum/design/item - build_type = PROTOLATHE - -// Testing helper -GLOBAL_LIST_INIT(build_path_to_design_datum_path, populate_design_datum_index()) - -/proc/populate_design_datum_index() - . = list() - for(var/path in typesof(/datum/design)) - var/datum/design/fake_design = path - if(initial(fake_design.build_path)) - .[initial(fake_design.build_path)] = path \ No newline at end of file diff --git a/code/modules/research/designs/design_aimodule.dm b/code/modules/research/designs/design_aimodule.dm deleted file mode 100644 index 7ee64f4bfdf47..0000000000000 --- a/code/modules/research/designs/design_aimodule.dm +++ /dev/null @@ -1,107 +0,0 @@ -/datum/design/aimodule - build_type = IMPRINTER - materials = list(MATERIAL_GLASS = 2000, MATERIAL_GOLD = 100) - -/datum/design/aimodule/AssembleDesignName() - name = "AI module design ([name])" - -/datum/design/aimodule/AssembleDesignDesc() - desc = "Allows for the construction of \a '[name]' AI module." - -/datum/design/aimodule/safeguard - name = "Safeguard" - id = "safeguard" - req_tech = list(TECH_DATA = 3, TECH_MATERIAL = 4) - build_path = /obj/item/aiModule/safeguard - sort_string = "XABAA" - -/datum/design/aimodule/onehuman - name = "OneCrewMember" - id = "onehuman" - req_tech = list(TECH_DATA = 4, TECH_MATERIAL = 6) - build_path = /obj/item/aiModule/oneHuman - sort_string = "XABAB" - -/datum/design/aimodule/protectstation - name = "ProtectInstallation" - id = "protectstation" - req_tech = list(TECH_DATA = 3, TECH_MATERIAL = 6) - build_path = /obj/item/aiModule/protectStation - sort_string = "XABAC" - -/datum/design/aimodule/notele - name = "TeleporterOffline" - id = "notele" - req_tech = list(TECH_DATA = 3) - build_path = /obj/item/aiModule/teleporterOffline - sort_string = "XABAD" - -/datum/design/aimodule/quarantine - name = "Quarantine" - id = "quarantine" - req_tech = list(TECH_DATA = 3, TECH_BIO = 2, TECH_MATERIAL = 4) - build_path = /obj/item/aiModule/quarantine - sort_string = "XABAE" - -/datum/design/aimodule/oxygen - name = "OxygenIsToxicToHumans" - id = "oxygen" - req_tech = list(TECH_DATA = 3, TECH_BIO = 2, TECH_MATERIAL = 4) - build_path = /obj/item/aiModule/oxygen - sort_string = "XABAF" - -/datum/design/aimodule/freeform - name = "Freeform" - id = "freeform" - req_tech = list(TECH_DATA = 4, TECH_MATERIAL = 4) - build_path = /obj/item/aiModule/freeform - sort_string = "XABAG" - -/datum/design/aimodule/reset - name = "Reset" - id = "reset" - req_tech = list(TECH_DATA = 3, TECH_MATERIAL = 6) - build_path = /obj/item/aiModule/reset - sort_string = "XAAAA" - -/datum/design/aimodule/purge - name = "Purge" - id = "purge" - req_tech = list(TECH_DATA = 4, TECH_MATERIAL = 6) - build_path = /obj/item/aiModule/purge - sort_string = "XAAAB" - -// Core modules -/datum/design/aimodule/core - req_tech = list(TECH_DATA = 4, TECH_MATERIAL = 6) - -/datum/design/aimodule/core/AssembleDesignName() - name = "AI core module design ([name])" - -/datum/design/aimodule/core/AssembleDesignDesc() - desc = "Allows for the construction of \a '[name]' AI core module." - -/datum/design/aimodule/core/freeformcore - name = "Freeform" - id = "freeformcore" - build_path = /obj/item/aiModule/freeformcore - sort_string = "XACAA" - -/datum/design/aimodule/core/asimov - name = "Asimov" - id = "asimov" - build_path = /obj/item/aiModule/asimov - sort_string = "XACAB" - -/datum/design/aimodule/core/paladin - name = "P.A.L.A.D.I.N." - id = "paladin" - build_path = /obj/item/aiModule/paladin - sort_string = "XACAC" - -/datum/design/aimodule/core/tyrant - name = "T.Y.R.A.N.T." - id = "tyrant" - req_tech = list(TECH_DATA = 4, TECH_ESOTERIC = 2, TECH_MATERIAL = 6) - build_path = /obj/item/aiModule/tyrant - sort_string = "XACAD" \ No newline at end of file diff --git a/code/modules/research/designs/designs_beaker.dm b/code/modules/research/designs/designs_beaker.dm deleted file mode 100644 index ed92cf69c4dbd..0000000000000 --- a/code/modules/research/designs/designs_beaker.dm +++ /dev/null @@ -1,20 +0,0 @@ -/datum/design/item/beaker/AssembleDesignName() - name = "Beaker prototype ([item_name])" - -/datum/design/item/beaker/noreact - name = "cryostasis" - desc = "A cryostasis beaker that allows for chemical storage without reactions. Can hold up to 50 units." - id = "splitbeaker" - req_tech = list(TECH_MATERIAL = 2) - materials = list(MATERIAL_STEEL = 3000) - build_path = /obj/item/reagent_containers/glass/beaker/noreact - sort_string = "MCAAA" - -/datum/design/item/beaker/bluespace - name = TECH_BLUESPACE - desc = "A bluespace beaker, which uses experimental technology to prevent its contents from reacting. Can hold up to 300 units." - id = "bluespacebeaker" - req_tech = list(TECH_BLUESPACE = 2, TECH_MATERIAL = 6) - materials = list(MATERIAL_STEEL = 3000, MATERIAL_PHORON = 3000, MATERIAL_DIAMOND = 500) - build_path = /obj/item/reagent_containers/glass/beaker/bluespace - sort_string = "MCAAB" \ No newline at end of file diff --git a/code/modules/research/designs/designs_biostorage.dm b/code/modules/research/designs/designs_biostorage.dm deleted file mode 100644 index 067bd4bafe150..0000000000000 --- a/code/modules/research/designs/designs_biostorage.dm +++ /dev/null @@ -1,23 +0,0 @@ -/datum/design/item/biostorage/AssembleDesignName() - ..() - name = "Biological intelligence storage ([item_name])" - -/datum/design/item/biostorage/mmi - name = "man-machine interface" - id = "mmi" - req_tech = list(TECH_DATA = 2, TECH_BIO = 3) - build_type = PROTOLATHE | MECHFAB - materials = list(MATERIAL_STEEL = 1000, MATERIAL_GLASS = 500) - build_path = /obj/item/device/mmi - category = "Misc" - sort_string = "VACCA" - -/datum/design/item/biostorage/mmi_radio - name = "radio-enabled man-machine interface" - id = "mmi_radio" - req_tech = list(TECH_DATA = 2, TECH_BIO = 4) - build_type = PROTOLATHE | MECHFAB - materials = list(MATERIAL_ALUMINIUM = 1200, MATERIAL_GLASS = 500) - build_path = /obj/item/device/mmi/radio_enabled - category = "Misc" - sort_string = "VACCB" \ No newline at end of file diff --git a/code/modules/research/designs/designs_bluespace.dm b/code/modules/research/designs/designs_bluespace.dm deleted file mode 100644 index ef4dfdeb08ae9..0000000000000 --- a/code/modules/research/designs/designs_bluespace.dm +++ /dev/null @@ -1,48 +0,0 @@ -/datum/design/item/bluespace/AssembleDesignName() - ..() - name = "Bluespace device ([item_name])" - -/datum/design/item/bluespace/gps - name = "triangulating device" - desc = "Triangulates approximate co-ordinates using a nearby satellite network." - id = "gps" - req_tech = list(TECH_MATERIAL = 2, TECH_DATA = 2, TECH_BLUESPACE = 2) - materials = list(MATERIAL_ALUMINIUM = 250, MATERIAL_STEEL = 250, MATERIAL_GLASS = 50) - build_path = /obj/item/device/gps - sort_string = "VADAB" - -/datum/design/item/bluespace/beacon_locator - name = "beacon tracking pinpointer" - desc = "Used to scan and locate signals on a particular frequency." - id = "beacon_locator" - req_tech = list(TECH_MAGNET = 3, TECH_ENGINEERING = 2, TECH_BLUESPACE = 3) - materials = list(MATERIAL_ALUMINIUM = 1000, MATERIAL_GLASS = 500) - build_path = /obj/item/pinpointer/radio - sort_string = "VADAC" - -/datum/design/item/bluespace/ano_scanner - name = "Alden-Saraspova counter" - id = "ano_scanner" - desc = "Aids in triangulation of exotic particles." - req_tech = list(TECH_BLUESPACE = 3, TECH_MAGNET = 3) - materials = list(MATERIAL_STEEL = 5000, MATERIAL_ALUMINIUM = 5000, MATERIAL_GLASS = 5000) - build_path = /obj/item/device/ano_scanner - sort_string = "VAEAA" - -/datum/design/item/bluespace/bag_holding - name = "bag of holding" - desc = "Using localized pockets of bluespace this bag prototype offers incredible storage capacity with the contents weighting nothing. It's a shame the bag itself is pretty heavy." - id = "bag_holding" - req_tech = list(TECH_BLUESPACE = 4, TECH_MATERIAL = 6) - materials = list(MATERIAL_GOLD = 3000, MATERIAL_DIAMOND = 1500, MATERIAL_URANIUM = 250, MATERIAL_PLASTIC = 250) - build_path = /obj/item/storage/backpack/holding - sort_string = "VAFAA" - -/datum/design/item/dufflebag_holding - name = "dufflebag of holding" - desc = "A variation of the popular Bag of Holding, the dufflebag of holding is, functionally, identical to the bag of holding, but comes in an easier to carry form." - id = "dufflebag_holding" - req_tech = list(TECH_BLUESPACE = 4, TECH_MATERIAL = 6) - materials = list(MATERIAL_GOLD = 3000, MATERIAL_DIAMOND = 1500, MATERIAL_URANIUM = 250, MATERIAL_PLASTIC = 250) - build_path = /obj/item/storage/backpack/holding/duffle - sort_string = "VAFAB" diff --git a/code/modules/research/designs/designs_circuits.dm b/code/modules/research/designs/designs_circuits.dm deleted file mode 100644 index 03a2d8de48be1..0000000000000 --- a/code/modules/research/designs/designs_circuits.dm +++ /dev/null @@ -1,841 +0,0 @@ -/datum/design/circuit - build_type = IMPRINTER - req_tech = list(TECH_DATA = 2) - materials = list(MATERIAL_PLASTIC = 1000, MATERIAL_ALUMINIUM = 1000) - chemicals = list(/datum/reagent/acid = 20) - time = 5 - -/datum/design/circuit/AssembleDesignName() - ..() - if(build_path) - var/obj/item/stock_parts/circuitboard/C = build_path - if(initial(C.board_type) == "machine") - name = "Machine circuit design ([item_name])" - else if(initial(C.board_type) == "computer") - name = "Computer circuit design ([item_name])" - else - name = "Circuit design ([item_name])" - -/datum/design/circuit/AssembleDesignDesc() - if(!desc) - desc = "Allows for the construction of \a [item_name] circuit board." - -/datum/design/circuit/arcademachine - name = "battle arcade machine" - id = "arcademachine" - req_tech = list(TECH_DATA = 1) - build_path = /obj/item/stock_parts/circuitboard/arcade/battle - sort_string = "MAAAA" - -/datum/design/circuit/oriontrail - name = "orion trail arcade machine" - id = "oriontrail" - req_tech = list(TECH_DATA = 1) - build_path = /obj/item/stock_parts/circuitboard/arcade/orion_trail - sort_string = "MABAA" - -/datum/design/circuit/prisonmanage - name = "prisoner management console" - id = "prisonmanage" - build_path = /obj/item/stock_parts/circuitboard/prisoner - sort_string = "DACAA" - -/datum/design/circuit/operating - name = "patient monitoring console" - id = "operating" - build_path = /obj/item/stock_parts/circuitboard/operating - sort_string = "FACAA" - -/datum/design/circuit/optable - name = "operating table" - id = "optable" - req_tech = list(TECH_ENGINEERING = 1, TECH_BIO = 3, TECH_DATA = 3) - build_path = /obj/item/stock_parts/circuitboard/optable - sort_string = "FACAB" - -/datum/design/circuit/bodyscanner - name = "body scanner" - id = "bodyscanner" - req_tech = list(TECH_ENGINEERING = 2, TECH_BIO = 4, TECH_DATA = 4) - build_path = /obj/item/stock_parts/circuitboard/bodyscanner - sort_string = "FACAC" - -/datum/design/circuit/body_scanconsole - name = "body scanner console" - id = "bodyscannerconsole" - req_tech = list(TECH_ENGINEERING = 2, TECH_BIO = 4, TECH_DATA = 4) - build_path = /obj/item/stock_parts/circuitboard/body_scanconsole - sort_string = "FACAD" - -/datum/design/circuit/sleeper - name = "sleeper" - id = "sleeper" - req_tech = list(TECH_ENGINEERING = 3, TECH_BIO = 5, TECH_DATA = 3) - build_path = /obj/item/stock_parts/circuitboard/sleeper - sort_string = "FACAE" - -/datum/design/circuit/cryo_cell - name = "cryo cell" - id = "cryo_cell" - req_tech = list(TECH_ENGINEERING = 3, TECH_BIO = 5, TECH_DATA = 3) - build_path = /obj/item/stock_parts/circuitboard/cryo_cell - sort_string = "FACAF" - -/datum/design/circuit/crewconsole - name = "crew monitoring console" - id = "crewconsole" - req_tech = list(TECH_DATA = 3, TECH_MAGNET = 2, TECH_BIO = 2) - build_path = /obj/item/stock_parts/circuitboard/crew - sort_string = "FAGAI" - -/datum/design/circuit/body_scan_display - name = "body scanner display" - id = "bodyscannerdisplay" - req_tech = list(TECH_BIO = 2, TECH_DATA = 2) - build_path = /obj/item/stock_parts/circuitboard/body_scanconsole/display - sort_string = "FACAJ" - -/datum/design/circuit/bioprinter - name = "bioprinter" - id = "bioprinter" - req_tech = list(TECH_ENGINEERING = 1, TECH_BIO = 3, TECH_DATA = 3) - build_path = /obj/item/stock_parts/circuitboard/bioprinter - sort_string = "FAGAK" - -/datum/design/circuit/roboprinter - name = "prosthetic organ fabricator" - id = "roboprinter" - req_tech = list(TECH_ENGINEERING = 2, TECH_DATA = 3) - build_path = /obj/item/stock_parts/circuitboard/roboprinter - sort_string = "FAGAM" - -/datum/design/circuit/teleconsole - name = "teleporter control console" - id = "teleconsole" - req_tech = list(TECH_DATA = 3, TECH_BLUESPACE = 5) - build_path = /obj/item/stock_parts/circuitboard/teleporter - sort_string = "HAAAA" - -/datum/design/circuit/robocontrol - name = "robotics control console" - id = "robocontrol" - req_tech = list(TECH_DATA = 4) - build_path = /obj/item/stock_parts/circuitboard/robotics - sort_string = "HAAAB" - -/datum/design/circuit/rdconsole - name = "R&D control console" - id = "rdconsole" - req_tech = list(TECH_DATA = 4) - build_path = /obj/item/stock_parts/circuitboard/rdconsole - sort_string = "HAAAE" - -/datum/design/circuit/comm_monitor - name = "telecommunications monitoring console" - id = "comm_monitor" - req_tech = list(TECH_DATA = 3) - build_path = /obj/item/stock_parts/circuitboard/comm_monitor - sort_string = "HAACA" - -/datum/design/circuit/comm_server - name = "telecommunications server monitoring console" - id = "comm_server" - req_tech = list(TECH_DATA = 3) - build_path = /obj/item/stock_parts/circuitboard/comm_server - sort_string = "HAACB" - -/datum/design/circuit/message_monitor - name = "messaging monitor console" - id = "message_monitor" - req_tech = list(TECH_DATA = 5) - build_path = /obj/item/stock_parts/circuitboard/message_monitor - sort_string = "HAACD" - -/datum/design/circuit/guestpass - name = "guest pass terminal" - id = "guestpass" - build_path = /obj/item/stock_parts/circuitboard/guestpass - sort_string = "HAACE" - -/datum/design/circuit/accounts - name = "account database terminal" - id = "accounts" - build_path = /obj/item/stock_parts/circuitboard/account_database - sort_string = "HAACF" - -/datum/design/circuit/holo - name = "holodeck control console" - id = "holo" - build_path = /obj/item/stock_parts/circuitboard/holodeckcontrol - req_tech = list(TECH_DATA = 2, TECH_BLUESPACE = 2) - sort_string = "HAACG" - -/datum/design/circuit/aiupload - name = "AI upload console" - id = "aiupload" - req_tech = list(TECH_DATA = 4) - build_path = /obj/item/stock_parts/circuitboard/aiupload - sort_string = "HAABA" - -/datum/design/circuit/borgupload - name = "cyborg upload console" - id = "borgupload" - req_tech = list(TECH_DATA = 4) - build_path = /obj/item/stock_parts/circuitboard/borgupload - sort_string = "HAABB" - -/datum/design/circuit/cryopodcontrol - name = "cryogenic oversight console" - id = "cryo_console" - req_tech = list(TECH_DATA = 3) - build_path = /obj/item/stock_parts/circuitboard/cryopodcontrol - sort_string = "HAABC" - -/datum/design/circuit/robot_storage - name = "robotic storage control" - id = "cryo_console_borg" - req_tech = list(TECH_DATA = 3) - build_path = /obj/item/stock_parts/circuitboard/robotstoragecontrol - sort_string = "HAABD" - -/datum/design/circuit/destructive_analyzer - name = "destructive analyzer" - id = "destructive_analyzer" - req_tech = list(TECH_DATA = 2, TECH_MAGNET = 2, TECH_ENGINEERING = 2) - build_path = /obj/item/stock_parts/circuitboard/destructive_analyzer - sort_string = "HABAA" - -/datum/design/circuit/protolathe - name = "protolathe" - id = "protolathe" - req_tech = list(TECH_DATA = 2, TECH_ENGINEERING = 2) - build_path = /obj/item/stock_parts/circuitboard/protolathe - sort_string = "HABAB" - -/datum/design/circuit/circuit_imprinter - name = "circuit imprinter" - id = "circuit_imprinter" - req_tech = list(TECH_DATA = 2, TECH_ENGINEERING = 2) - build_path = /obj/item/stock_parts/circuitboard/circuit_imprinter - sort_string = "HABAC" - -/datum/design/circuit/autolathe - name = "autolathe board" - id = "autolathe" - req_tech = list(TECH_DATA = 2, TECH_ENGINEERING = 2) - build_path = /obj/item/stock_parts/circuitboard/autolathe - sort_string = "HABAD" - -/datum/design/circuit/replicator - name = "replicator board" - id = "replicator" - req_tech = list(TECH_DATA = 2, TECH_ENGINEERING = 3, TECH_BIO = 3) - build_path = /obj/item/stock_parts/circuitboard/replicator - sort_string = "HABAE" - -/datum/design/circuit/microlathe - name = "microlathe board" - id = "microlathe" - req_tech = list(TECH_DATA = 1, TECH_ENGINEERING = 1) - build_path = /obj/item/stock_parts/circuitboard/autolathe/micro - sort_string = "HABAF" - -/datum/design/circuit/mining_console - name = "mining console board" - id = "mining_console" - req_tech = list(TECH_DATA = 2, TECH_ENGINEERING = 2) - build_path = /obj/item/stock_parts/circuitboard/mineral_processing - sort_string = "HABAG" - -/datum/design/circuit/mining_processor - name = "mining processor board" - id = "mining_processor" - req_tech = list(TECH_DATA = 2, TECH_ENGINEERING = 2) - build_path = /obj/item/stock_parts/circuitboard/mining_processor - sort_string = "HABAH" - -/datum/design/circuit/mining_unloader - name = "ore unloader board" - id = "mining_unloader" - req_tech = list(TECH_DATA = 2, TECH_ENGINEERING = 2) - build_path = /obj/item/stock_parts/circuitboard/mining_unloader - sort_string = "HABAI" - -/datum/design/circuit/mining_stacker - name = "sheet stacker board" - id = "mining_stacker" - req_tech = list(TECH_DATA = 2, TECH_ENGINEERING = 2) - build_path = /obj/item/stock_parts/circuitboard/mining_stacker - sort_string = "HABAJ" - -/datum/design/circuit/suspension_gen - name = "suspension generator" - id = "suspension_gen" - req_tech = list(TECH_DATA = 4, TECH_ENGINEERING = 3, TECH_MAGNET = 4) - build_path = /obj/item/stock_parts/circuitboard/suspension_gen - sort_string = "HABAK" - -/datum/design/circuit/rdservercontrol - name = "R&D server control console" - id = "rdservercontrol" - req_tech = list(TECH_DATA = 3) - build_path = /obj/item/stock_parts/circuitboard/rdservercontrol - sort_string = "HABBA" - -/datum/design/circuit/rdserver - name = "R&D server" - id = "rdserver" - req_tech = list(TECH_DATA = 3) - build_path = /obj/item/stock_parts/circuitboard/rdserver - sort_string = "HABBB" - -/datum/design/circuit/mechfab - name = "exosuit fabricator" - id = "mechfab" - req_tech = list(TECH_DATA = 3, TECH_ENGINEERING = 3) - build_path = /obj/item/stock_parts/circuitboard/mechfab - sort_string = "HABAE" - -/datum/design/circuit/mech_recharger - name = "mech recharger" - id = "mech_recharger" - req_tech = list(TECH_DATA = 2, TECH_POWER = 2, TECH_ENGINEERING = 2) - build_path = /obj/item/stock_parts/circuitboard/mech_recharger - sort_string = "HACAA" - -/datum/design/circuit/recharge_station - name = "cyborg recharge station" - id = "recharge_station" - req_tech = list(TECH_DATA = 3, TECH_ENGINEERING = 2) - build_path = /obj/item/stock_parts/circuitboard/recharge_station - sort_string = "HACAC" - -/datum/design/circuit/atmosalerts - name = "atmosphere alert console" - id = "atmosalerts" - build_path = /obj/item/stock_parts/circuitboard/atmos_alert - sort_string = "JAAAA" - -/datum/design/circuit/air_management - name = "atmosphere monitoring console" - id = "air_management" - build_path = /obj/item/stock_parts/circuitboard/air_management - sort_string = "JAAAB" - -/datum/design/circuit/rcon_console - name = "RCON remote control console" - id = "rcon_console" - req_tech = list(TECH_DATA = 4, TECH_ENGINEERING = 3, TECH_POWER = 5) - build_path = /obj/item/stock_parts/circuitboard/rcon_console - sort_string = "JAAAC" - -/datum/design/circuit/dronecontrol - name = "drone control console" - id = "dronecontrol" - req_tech = list(TECH_DATA = 4) - build_path = /obj/item/stock_parts/circuitboard/drone_control - sort_string = "JAAAD" - -/datum/design/circuit/powermonitor - name = "power monitoring console" - id = "powermonitor" - build_path = /obj/item/stock_parts/circuitboard/powermonitor - sort_string = "JAAAE" - -/datum/design/circuit/solarcontrol - name = "solar control console" - id = "solarcontrol" - build_path = /obj/item/stock_parts/circuitboard/solar_control - sort_string = "JAAAF" - -/datum/design/circuit/supermatter_control - name = "core monitoring console" - id = "supermatter_control" - build_path = /obj/item/stock_parts/circuitboard/air_management/supermatter_core - sort_string = "JAAAG" - -/datum/design/circuit/injector - name = "injector control console" - id = "injector" - build_path = /obj/item/stock_parts/circuitboard/air_management/injector_control - sort_string = "JAAAH" - -/datum/design/circuit/pacman - name = "PACMAN-type generator" - id = "pacman" - req_tech = list(TECH_DATA = 3, TECH_PHORON = 3, TECH_POWER = 3, TECH_ENGINEERING = 3) - build_path = /obj/item/stock_parts/circuitboard/pacman - sort_string = "JBAAA" - -/datum/design/circuit/superpacman - name = "SUPERPACMAN-type generator" - id = "superpacman" - req_tech = list(TECH_DATA = 3, TECH_POWER = 4, TECH_ENGINEERING = 4) - build_path = /obj/item/stock_parts/circuitboard/pacman/super - sort_string = "JBAAB" - -/datum/design/circuit/mrspacman - name = "MRSPACMAN-type generator" - id = "mrspacman" - req_tech = list(TECH_DATA = 3, TECH_POWER = 5, TECH_ENGINEERING = 5) - build_path = /obj/item/stock_parts/circuitboard/pacman/mrs - sort_string = "JBAAC" - -/datum/design/circuit/pacmanpotato - name = "PTTO-3 nuclear generator" - id = "pacmanpotato" - req_tech = list(TECH_DATA = 3, TECH_POWER = 5, TECH_ENGINEERING = 4, TECH_ESOTERIC = 4) - build_path = /obj/item/stock_parts/circuitboard/pacman/super/potato - sort_string = "JBAAD" - -/datum/design/circuit/pacmanreactor - name = "ICRER-2 nuclear generator" - id = "pacmanreactor" - req_tech = list(TECH_DATA = 4, TECH_POWER = 5, TECH_ENGINEERING = 5) - build_path = /obj/item/stock_parts/circuitboard/pacman/super/potato/reactor - sort_string = "JBAAE" - -/datum/design/circuit/batteryrack - name = "cell rack PSU" - id = "batteryrack" - req_tech = list(TECH_POWER = 3, TECH_ENGINEERING = 2) - build_path = /obj/item/stock_parts/circuitboard/batteryrack - sort_string = "JBABA" - -/datum/design/circuit/smes_cell - name = "'SMES' superconductive magnetic energy storage" - desc = "Allows for the construction of circuit boards used to build a SMES." - id = "smes_cell" - req_tech = list(TECH_POWER = 7, TECH_ENGINEERING = 5) - build_path = /obj/item/stock_parts/circuitboard/smes - sort_string = "JBABB" - -/datum/design/circuit/alerts - name = "alerts console" - id = "alerts" - build_path = /obj/item/stock_parts/circuitboard/stationalert - sort_string = "JBACA" - -/datum/design/circuit/gas_heater - name = "gas heating system" - id = "gasheater" - req_tech = list(TECH_POWER = 2, TECH_ENGINEERING = 1) - build_path = /obj/item/stock_parts/circuitboard/unary_atmos/heater - sort_string = "JCAAA" - -/datum/design/circuit/gas_cooler - name = "gas cooling system" - id = "gascooler" - req_tech = list(TECH_MAGNET = 2, TECH_ENGINEERING = 2) - build_path = /obj/item/stock_parts/circuitboard/unary_atmos/cooler - sort_string = "JCAAB" - -/datum/design/circuit/oxyregenerator - name = "oxygen regenerator" - id = "oxyregen" - req_tech = list(TECH_MAGNET = 2, TECH_ENGINEERING = 2) - build_path = /obj/item/stock_parts/circuitboard/oxyregenerator - sort_string = "JCAAC" - -/datum/design/circuit/reagent_heater - name = "chemical heating system" - id = "chemheater" - req_tech = list(TECH_POWER = 2, TECH_ENGINEERING = 1) - build_path = /obj/item/stock_parts/circuitboard/reagent_heater - sort_string = "JCAAD" - -/datum/design/circuit/reagent_cooler - name = "chemical cooling system" - id = "chemcooler" - req_tech = list(TECH_POWER = 2, TECH_ENGINEERING = 1) - build_path = /obj/item/stock_parts/circuitboard/reagent_heater/cooler - sort_string = "JCAAE" - -/datum/design/circuit/atmos_control - name = "atmospherics control console" - id = "atmos_control" - req_tech = list(TECH_DATA = 2, TECH_ENGINEERING = 3) - build_path = /obj/item/stock_parts/circuitboard/atmoscontrol - sort_string = "JCAAF" - -/datum/design/circuit/pipe_dispenser - name = "pipe dispenser" - id = "pipe_dispenser" - req_tech = list(TECH_ENGINEERING = 6, TECH_MATERIAL = 5) - build_path = /obj/item/stock_parts/circuitboard/pipedispensor - sort_string = "JCAAG" - -/datum/design/circuit/pipe_dispenser/disposal - name = "disposal pipe dispenser" - id = "pipe_disposal" - build_path = /obj/item/stock_parts/circuitboard/pipedispensor/disposal - sort_string = "JCAAH" - -/datum/design/circuit/secure_airlock - name = "secure airlock electronics" - desc = "Allows for the construction of a tamper-resistant airlock electronics." - id = "securedoor" - req_tech = list(TECH_DATA = 3) - build_path = /obj/item/airlock_electronics/secure - sort_string = "JDAAA" - -/datum/design/circuit/portable_scrubber - name = "portable scrubber" - id = "portascrubber" - req_tech = list(TECH_ENGINEERING = 4, TECH_POWER = 4) - build_path = /obj/item/stock_parts/circuitboard/portable_scrubber - sort_string = "JEAAA" - -/datum/design/circuit/portable_pump - name = "portable pump" - id = "portapump" - req_tech = list(TECH_ENGINEERING = 4, TECH_POWER = 4) - build_path = /obj/item/stock_parts/circuitboard/portable_scrubber/pump - sort_string = "JEAAB" - -/datum/design/circuit/portable_scrubber_huge - name = "large portable scrubber" - id = "portascrubberhuge" - req_tech = list(TECH_ENGINEERING = 5, TECH_POWER = 5, TECH_MATERIAL = 5) - build_path = /obj/item/stock_parts/circuitboard/portable_scrubber/huge - sort_string = "JEAAC" - -/datum/design/circuit/portable_scrubber_stat - name = "large stationary portable scrubber" - id = "portascrubberstat" - req_tech = list(TECH_ENGINEERING = 5, TECH_POWER = 5, TECH_MATERIAL = 5) - build_path = /obj/item/stock_parts/circuitboard/portable_scrubber/huge/stationary - sort_string = "JEAAD" - -/datum/design/circuit/thruster - name = "gas thruster" - id = "thruster" - req_tech = list(TECH_POWER = 1, TECH_ENGINEERING = 2) - build_path = /obj/item/stock_parts/circuitboard/unary_atmos/engine - sort_string = "JFAAA" - -/datum/design/circuit/helms - name = "helm control console" - id = "helms" - req_tech = list(TECH_DATA = 4, TECH_ENGINEERING = 3) - build_path = /obj/item/stock_parts/circuitboard/helm - sort_string = "JFAAB" - -/datum/design/circuit/nav - name = "navigation control console" - id = "nav" - req_tech = list(TECH_DATA = 2, TECH_ENGINEERING = 1) - build_path = /obj/item/stock_parts/circuitboard/nav - sort_string = "JFAAC" - -/datum/design/circuit/nav/tele - name = "navigation telescreen" - id = "nav_tele" - build_path = /obj/item/stock_parts/circuitboard/nav/tele - sort_string = "JFAAD" - -/datum/design/circuit/sensors - name = "ship sensor control console" - id = "sensors" - req_tech = list(TECH_DATA = 4) - build_path = /obj/item/stock_parts/circuitboard/sensors - sort_string = "JFAAE" - -/datum/design/circuit/engine - name = "ship engine control console" - id = "shipengine" - req_tech = list(TECH_DATA = 2, TECH_POWER = 2, TECH_ENGINEERING = 2) - build_path = /obj/item/stock_parts/circuitboard/engine - sort_string = "JFAAF" - -/datum/design/circuit/shuttle - name = "basic shuttle console" - id = "shuttle" - req_tech = list(TECH_DATA = 3) - build_path = /obj/item/stock_parts/circuitboard/shuttle_console - sort_string = "JFAAG" - -/datum/design/circuit/shuttle_long - name = "long range shuttle console" - id = "shuttle_long" - req_tech = list(TECH_DATA = 3) - build_path = /obj/item/stock_parts/circuitboard/shuttle_console/explore - sort_string = "JFAAH" - -/datum/design/circuit/biogenerator - name = "biogenerator" - id = "biogenerator" - req_tech = list(TECH_DATA = 2) - build_path = /obj/item/stock_parts/circuitboard/biogenerator - sort_string = "KBAAA" - -/datum/design/circuit/hydro_tray - name = "hydroponics tray" - id = "hydrotray" - req_tech = list(TECH_BIO = 3, TECH_MATERIAL = 2, TECH_DATA = 1) - build_path = /obj/item/stock_parts/circuitboard/tray - sort_string = "KBAAB" - -/datum/design/circuit/miningdrill - name = "mining drill head" - id = "mining drill head" - req_tech = list(TECH_DATA = 1, TECH_ENGINEERING = 1) - build_path = /obj/item/stock_parts/circuitboard/miningdrill - sort_string = "KCAAA" - -/datum/design/circuit/miningdrillbrace - name = "mining drill brace" - id = "mining drill brace" - req_tech = list(TECH_DATA = 1, TECH_ENGINEERING = 1) - build_path = /obj/item/stock_parts/circuitboard/miningdrillbrace - sort_string = "KCAAB" - -/datum/design/circuit/floodlight - name = "emergency floodlight" - id = "floodlight" - req_tech = list(TECH_POWER = 1, TECH_ENGINEERING = 1) - build_path = /obj/item/stock_parts/circuitboard/floodlight - sort_string = "KCAAC" - -/datum/design/circuit/disperserfront - name = "obstruction field disperser beam generator" - id = "disperserfront" - req_tech = list(TECH_ENGINEERING = 2, TECH_COMBAT = 2, TECH_BLUESPACE = 2) - build_path = /obj/item/stock_parts/circuitboard/disperserfront - sort_string = "KCAAD" - -/datum/design/circuit/dispersermiddle - name = "obstruction field disperser fusor" - id = "dispersermiddle" - req_tech = list(TECH_ENGINEERING = 2, TECH_COMBAT = 2, TECH_BLUESPACE = 2) - build_path = /obj/item/stock_parts/circuitboard/dispersermiddle - sort_string = "KCAAE" - -/datum/design/circuit/disperserback - name = "obstruction field disperser material deconstructor" - id = "bsaback" - req_tech = list(TECH_ENGINEERING = 2, TECH_COMBAT = 2, TECH_BLUESPACE = 2) - build_path = /obj/item/stock_parts/circuitboard/disperserback - sort_string = "KCAAF" - -/datum/design/circuit/disperser_console - name = "obstruction field disperser control console" - id = "disperser_console" - req_tech = list(TECH_DATA = 2, TECH_COMBAT = 5, TECH_BLUESPACE = 5) - build_path = /obj/item/stock_parts/circuitboard/disperser - sort_string = "KCAAG" - -/datum/design/circuit/tcom - req_tech = list(TECH_DATA = 4, TECH_ENGINEERING = 4) - -/datum/design/circuit/tcom/AssembleDesignName() - name = "Telecommunications machinery circuit design ([name])" -/datum/design/circuit/tcom/AssembleDesignDesc() - desc = "Allows for the construction of a telecommunications [name] circuit board." - -/datum/design/circuit/tcom/server - name = "server mainframe" - id = "tcom-server" - build_path = /obj/item/stock_parts/circuitboard/telecomms/server - sort_string = "PAAAA" - -/datum/design/circuit/tcom/processor - name = "processor unit" - id = "tcom-processor" - build_path = /obj/item/stock_parts/circuitboard/telecomms/processor - sort_string = "PAAAB" - -/datum/design/circuit/tcom/bus - name = "bus mainframe" - id = "tcom-bus" - build_path = /obj/item/stock_parts/circuitboard/telecomms/bus - sort_string = "PAAAC" - -/datum/design/circuit/tcom/hub - name = "hub mainframe" - id = "tcom-hub" - build_path = /obj/item/stock_parts/circuitboard/telecomms/hub - sort_string = "PAAAD" - -/datum/design/circuit/tcom/broadcaster - name = "subspace broadcaster" - id = "tcom-broadcaster" - req_tech = list(TECH_DATA = 4, TECH_ENGINEERING = 4, TECH_BLUESPACE = 2) - build_path = /obj/item/stock_parts/circuitboard/telecomms/broadcaster - sort_string = "PAAAF" - -/datum/design/circuit/tcom/receiver - name = "subspace receiver" - id = "tcom-receiver" - req_tech = list(TECH_DATA = 4, TECH_ENGINEERING = 3, TECH_BLUESPACE = 2) - build_path = /obj/item/stock_parts/circuitboard/telecomms/receiver - sort_string = "PAAAG" - -/datum/design/circuit/bluespace_relay - name = "bluespace relay" - id = "bluespacerelay" - req_tech = list(TECH_DATA = 5, TECH_BLUESPACE = 5, TECH_PHORON = 5) - build_path = /obj/item/stock_parts/circuitboard/bluespacerelay - sort_string = "PAAAH" - -/datum/design/circuit/shield_generator - name = "Shield Generator" - desc = "Allows for the construction of a shield generator circuit board." - id = "shield_generator" - req_tech = list(TECH_MAGNET = 3, TECH_POWER = 4) - build_path = /obj/item/stock_parts/circuitboard/shield_generator - sort_string = "VAAAC" - -/datum/design/circuit/shield_diffuser - name = "Shield Diffuser" - desc = "Allows for the construction of a shield generator circuit board." - id = "shield_diffuser" - req_tech = list(TECH_MAGNET = 3, TECH_POWER = 4) - build_path = /obj/item/stock_parts/circuitboard/shield_diffuser - sort_string = "VAAAB" - -/datum/design/circuit/pointdefense - name = "Point defense battery" - desc = "Allows for the construction of a point defense battery circuit board." - id = "pointdefense" - req_tech = list(TECH_COMBAT = 2, TECH_ENGINEERING = 2) - build_path = /obj/item/stock_parts/circuitboard/pointdefense - sort_string = "VAAAC" - -/datum/design/circuit/pointdefense_control - name = "Fire Assist Mainframe" - desc = "Allows for the construction of a fire assist mainframe circuit board." - id = "pointdefense_control" - req_tech = list(TECH_COMBAT = 2, TECH_ENGINEERING = 2) - build_path = /obj/item/stock_parts/circuitboard/pointdefense_control - sort_string = "VAAAD" - -/datum/design/circuit/ntnet_relay - name = "NTNet Quantum Relay" - id = "ntnet_relay" - req_tech = list(TECH_DATA = 4) - build_path = /obj/item/stock_parts/circuitboard/ntnet_relay - sort_string = "WAAAA" - -/datum/design/circuit/washer - name = "washing machine" - id = "washer" - req_tech = list(TECH_ENGINEERING = 1) - build_path = /obj/item/stock_parts/circuitboard/washer - sort_string = "WAAAS" - -/datum/design/circuit/microwave - name = "microwave" - id = "microwave" - req_tech = list(TECH_BIO = 2, TECH_ENGINEERING = 2) - build_path = /obj/item/stock_parts/circuitboard/microwave - sort_string = "WAAAT" - -/datum/design/circuit/gibber - name = "meat gibber" - id = "gibber" - req_tech = list(TECH_BIO = 2, TECH_ENGINEERING = 2) - build_path = /obj/item/stock_parts/circuitboard/gibber - sort_string = "WAAAU" - -/datum/design/circuit/cooker - name = "kitchen appliance (assorted)" - desc = "Allows for the construction of an interchangable cooking appliance circuit board. Use a multitool to select appliance." - id = "cooker" - req_tech = list(TECH_BIO = 1, TECH_MATERIAL = 1) - build_path = /obj/item/stock_parts/circuitboard/cooker - sort_string = "WAAAV" - -/datum/design/circuit/honey_extractor - name = "honey extractor" - id = "honey_extractor" - req_tech = list(TECH_BIO = 2, TECH_ENGINEERING = 1) - build_path = /obj/item/stock_parts/circuitboard/honey - sort_string = "WAAAW" - -/datum/design/circuit/seed_extractor - name = "seed extractor" - id = "seed_extractor" - req_tech = list(TECH_BIO = 2, TECH_ENGINEERING = 1) - build_path = /obj/item/stock_parts/circuitboard/honey/seed - sort_string = "WAAAX" - -/datum/design/circuit/vending - name = "vending machine" - id = "vending" - req_tech = list(TECH_ENGINEERING = 2) - build_path = /obj/item/stock_parts/circuitboard/vending - sort_string = "WAABA" - -/datum/design/circuit/reagentgrinder - name = "reagent grinder" - id = "reagent_grinder" - req_tech = list(TECH_BIO = 2, TECH_MATERIAL = 2, TECH_ENGINEERING = 2) - build_path = /obj/item/stock_parts/circuitboard/reagentgrinder - sort_string = "WAABB" - -/datum/design/circuit/juicer - name = "blender" - id = "blender" - req_tech = list(TECH_BIO = 1, TECH_MATERIAL = 2, TECH_ENGINEERING = 1) - build_path = /obj/item/stock_parts/circuitboard/juicer - sort_string = "WAABC" - -/datum/design/circuit/aicore - name = "AI core" - id = "aicore" - req_tech = list(TECH_DATA = 4, TECH_BIO = 3) - build_path = /obj/item/stock_parts/circuitboard/aicore - sort_string = "XAAAA" - -/datum/design/circuit/ionengine - name = "ion propulsion system" - id = "ionengine" - req_tech = list(TECH_BLUESPACE = 4, TECH_MATERIAL = 6) - materials = list(MATERIAL_GOLD = 250, MATERIAL_DIAMOND = 250, MATERIAL_URANIUM = 250, MATERIAL_PLASTIC = 1000, MATERIAL_ALUMINIUM = 1000) - build_path = /obj/item/stock_parts/circuitboard/engine/ion - sort_string = "XAAAB" - -/datum/design/circuit/sublimator/sauna - name = "sauna heater system" - id = "sauna" - req_tech = list(TECH_POWER = 2, TECH_ENGINEERING = 1) - build_path = /obj/item/stock_parts/circuitboard/sublimator/sauna - sort_string = "XAAAC" - -/datum/design/circuit/vitals - name = "vitals monitor" - id = "vitals" - req_tech = list(TECH_BIO = 2, TECH_ENGINEERING = 1) - build_path = /obj/item/stock_parts/circuitboard/vitals_monitor - sort_string = "XAAAD" - -/datum/design/circuit/sublimator/modular_computer - name = "general-purpose computer" - id = "pc_motherboard" - req_tech = list(TECH_POWER = 1, TECH_ENGINEERING = 1) - build_path = /obj/item/stock_parts/circuitboard/modular_computer - sort_string = "XAAAD" - -/datum/design/circuit/tele_beacon - name = "teleporter beacon" - id = "tele_beacon" - req_tech = list( - TECH_BLUESPACE = 1 - ) - build_path = /obj/item/stock_parts/circuitboard/tele_beacon - sort_string = "XAAAF" - -/datum/design/circuit/bluespacedrive - name = "Naophoros-pattern bluespace puncturer" - id = "bluespacedrive" - req_tech = list(TECH_BLUESPACE = 12, TECH_POWER = 12, TECH_ENGINEERING = 12) // You are not supposed to get this - build_path = /obj/item/stock_parts/circuitboard/bluespacedrive - sort_string = "XAAAF" - -/datum/design/circuit/shipmap - name = "ship holomap" - id = "shipmap" - req_tech = list(TECH_ENGINEERING = 1) - build_path = /obj/item/stock_parts/circuitboard/shipmap - sort_string = "SAAAT" diff --git a/code/modules/research/designs/designs_disk.dm b/code/modules/research/designs/designs_disk.dm deleted file mode 100644 index 9151bde8ed8af..0000000000000 --- a/code/modules/research/designs/designs_disk.dm +++ /dev/null @@ -1,28 +0,0 @@ -/datum/design/item/disk/AssembleDesignName() - ..() - name = "Storage disk ([item_name])" - materials = list(MATERIAL_PLASTIC = 30, MATERIAL_STEEL = 30, MATERIAL_GLASS = 10) - -/datum/design/item/disk/design - name = "research design" - desc = "Produce additional disks for storing device designs." - id = "design_disk" - req_tech = list(TECH_DATA = 1) - build_path = /obj/item/disk/design_disk - sort_string = "AAAAA" - -/datum/design/item/disk/tech - name = "technology data" - desc = "Produce additional disks for storing technology data." - id = "tech_disk" - req_tech = list(TECH_DATA = 1) - build_path = /obj/item/disk/tech_disk - sort_string = "AAAAB" - -/datum/design/item/disk/flora - name = "flora data" - desc = "Produce additional disks for storing flora genetic data." - id = "flora_disk" - req_tech = list(TECH_DATA = 1) - build_path = /obj/item/disk/botany - sort_string = "AAAAC" diff --git a/code/modules/research/designs/designs_exosuits.dm b/code/modules/research/designs/designs_exosuits.dm deleted file mode 100644 index eb66e95bcc568..0000000000000 --- a/code/modules/research/designs/designs_exosuits.dm +++ /dev/null @@ -1,32 +0,0 @@ -/datum/design/circuit/exosuit/AssembleDesignName() - name = "Exosuit software design ([name])" -/datum/design/circuit/exosuit/AssembleDesignDesc() - desc = "Allows for the construction of \a [name] module." - -/datum/design/circuit/exosuit/engineering - name = "engineering system control" - id = "mech_software_engineering" - req_tech = list(TECH_DATA = 1) - build_path = /obj/item/circuitboard/exosystem/engineering - sort_string = "NAAAA" - -/datum/design/circuit/exosuit/utility - name = "utility system control" - id = "mech_software_utility" - req_tech = list(TECH_DATA = 1) - build_path = /obj/item/circuitboard/exosystem/utility - sort_string = "NAAAB" - -/datum/design/circuit/exosuit/medical - name = "medical system control" - id = "mech_software_medical" - req_tech = list(TECH_DATA = 3,TECH_BIO = 2) - build_path = /obj/item/circuitboard/exosystem/medical - sort_string = "NAABA" - -/datum/design/circuit/exosuit/weapons - name = "basic weapon control" - id = "mech_software_weapons" - req_tech = list(TECH_DATA = 4) - build_path = /obj/item/circuitboard/exosystem/weapons - sort_string = "NAACA" \ No newline at end of file diff --git a/code/modules/research/designs/designs_hud_optical.dm b/code/modules/research/designs/designs_hud_optical.dm deleted file mode 100644 index da69965c3b1fc..0000000000000 --- a/code/modules/research/designs/designs_hud_optical.dm +++ /dev/null @@ -1,58 +0,0 @@ -/datum/design/item/hud - materials = list(MATERIAL_ALUMINIUM = 50, MATERIAL_GLASS = 50) - -/datum/design/item/hud/AssembleDesignName() - ..() - name = "HUD glasses design ([item_name])" - -/datum/design/item/hud/AssembleDesignDesc() - desc = "Allows for the construction of \a [item_name] HUD glasses." - -/datum/design/item/hud/health - name = "health scanner" - id = "health_hud" - req_tech = list(TECH_BIO = 2, TECH_MAGNET = 3) - build_path = /obj/item/clothing/glasses/hud/health - sort_string = "GAAAA" - -/datum/design/item/hud/security - name = "security records" - id = "security_hud" - req_tech = list(TECH_MAGNET = 3, TECH_COMBAT = 2) - build_path = /obj/item/clothing/glasses/hud/security - sort_string = "GAAAB" - -/datum/design/item/hud/janitor - name = "filth scanner" - id = "janitor_hud" - req_tech = list(TECH_BIO = 1, TECH_MAGNET = 3) - build_path = /obj/item/clothing/glasses/hud/janitor - sort_string = "GAAAC" - -/datum/design/item/optical/AssembleDesignName() - ..() - name = "Optical glasses design ([item_name])" - materials = list(MATERIAL_STEEL = 50, MATERIAL_GLASS = 50) - -/datum/design/item/optical/mesons - name = "mesons" - desc = "Using the meson-scanning technology those glasses allow you to see through walls, floor or anything else." - id = "mesons" - req_tech = list(TECH_MAGNET = 2, TECH_ENGINEERING = 2) - build_path = /obj/item/clothing/glasses/meson - sort_string = "GBAAA" - -/datum/design/item/optical/material - name = "material" - id = "mesons_material" - req_tech = list(TECH_MAGNET = 3, TECH_ENGINEERING = 3) - build_path = /obj/item/clothing/glasses/material - sort_string = "GAAAB" - -/datum/design/item/optical/tactical - name = "tactical" - id = "tactical_goggles" - req_tech = list(TECH_MAGNET = 3, TECH_COMBAT = 5) - materials = list(MATERIAL_STEEL = 50, MATERIAL_GLASS = 50, MATERIAL_SILVER = 50, MATERIAL_GOLD = 50) - build_path = /obj/item/clothing/glasses/tacgoggles - sort_string = "GAAAC" \ No newline at end of file diff --git a/code/modules/research/designs/designs_implant.dm b/code/modules/research/designs/designs_implant.dm deleted file mode 100644 index 1837a7a799b46..0000000000000 --- a/code/modules/research/designs/designs_implant.dm +++ /dev/null @@ -1,55 +0,0 @@ -/datum/design/item/implant - materials = list(MATERIAL_ALUMINIUM = 50, MATERIAL_GLASS = 50) - -/datum/design/item/implant/AssembleDesignName() - ..() - name = "Implantable biocircuit design ([item_name])" - -/datum/design/item/implant/chemical - name = "chemical" - id = "implant_chem" - req_tech = list(TECH_MATERIAL = 2, TECH_BIO = 3) - build_path = /obj/item/implantcase/chem - sort_string = "MFAAA" - -/datum/design/item/implant/death_alarm - name = "death alarm" - id = "implant_death" - req_tech = list(TECH_MATERIAL = 2, TECH_BIO = 3, TECH_DATA = 2) - build_path = /obj/item/implantcase/death_alarm - sort_string = "MFAAB" - -/datum/design/item/implant/tracking - name = "tracking" - id = "implant_tracking" - req_tech = list(TECH_MATERIAL = 2, TECH_BIO = 3, TECH_BLUESPACE = 3) - build_path = /obj/item/implantcase/tracking - sort_string = "MFAAC" - -/datum/design/item/implant/imprinting - name = "imprinting" - id = "implant_imprinting" - req_tech = list(TECH_MATERIAL = 2, TECH_BIO = 3, TECH_DATA = 4) - build_path = /obj/item/implantcase/imprinting - sort_string = "MFAAD" - -/datum/design/item/implant/adrenaline - name = "adrenaline" - id = "implant_adrenaline" - req_tech = list(TECH_MATERIAL = 2, TECH_BIO = 3, TECH_ESOTERIC = 3) - build_path = /obj/item/implantcase/adrenalin - sort_string = "MFAAE" - -/datum/design/item/implant/freedom - name = "freedom" - id = "implant_free" - req_tech = list(TECH_MATERIAL = 2, TECH_BIO = 3, TECH_ESOTERIC = 3) - build_path = /obj/item/implantcase/freedom - sort_string = "MFAAF" - -/datum/design/item/implant/explosive - name = "explosive" - id = "implant_explosive" - req_tech = list(TECH_MATERIAL = 2, TECH_BIO = 3, TECH_ESOTERIC = 4) - build_path = /obj/item/implantcase/explosive - sort_string = "MFAAG" \ No newline at end of file diff --git a/code/modules/research/designs/designs_mechfab.dm b/code/modules/research/designs/designs_mechfab.dm deleted file mode 100644 index 0aebc3eee1a18..0000000000000 --- a/code/modules/research/designs/designs_mechfab.dm +++ /dev/null @@ -1,871 +0,0 @@ -/datum/design/item/mechfab - build_type = MECHFAB - category = "Misc" - req_tech = list(TECH_MATERIAL = 1) - -/datum/design/item/mechfab/robot - category = "Robot" - -//if the fabricator is a exosuit fab pass the manufacturer info over to the robot part constructor -/datum/design/item/mechfab/robot/Fabricate(var/newloc, var/fabricator) - if(istype(fabricator, /obj/machinery/robotics_fabricator)) - var/obj/machinery/robotics_fabricator/mechfab = fabricator - return new build_path(newloc, mechfab.manufacturer) - return ..() - -/datum/design/item/mechfab/robot/exoskeleton_ground - name = "Robot frame, standard" - id = "robot_exoskeleton" - build_path = /obj/item/robot_parts/robot_suit - time = 50 - materials = list(MATERIAL_STEEL = 50000) - -/datum/design/item/mechfab/robot/exoskeleton_flying - name = "Robot frame, hover" - id = "robot_exoskeleton_hover" - build_path = /obj/item/robot_parts/robot_suit/flyer - time = 50 - materials = list(MATERIAL_STEEL = 50000) - -/datum/design/item/mechfab/robot/torso - name = "Robot torso" - id = "robot_torso" - build_path = /obj/item/robot_parts/chest - time = 35 - materials = list(MATERIAL_STEEL = 40000) - -/datum/design/item/mechfab/robot/head - name = "Robot head" - id = "robot_head" - build_path = /obj/item/robot_parts/head - time = 35 - materials = list(MATERIAL_STEEL = 25000) - -/datum/design/item/mechfab/robot/l_arm - name = "Robot left arm" - id = "robot_l_arm" - build_path = /obj/item/robot_parts/l_arm - time = 20 - materials = list(MATERIAL_STEEL = 18000) - -/datum/design/item/mechfab/robot/r_arm - name = "Robot right arm" - id = "robot_r_arm" - build_path = /obj/item/robot_parts/r_arm - time = 20 - materials = list(MATERIAL_STEEL = 18000) - -/datum/design/item/mechfab/robot/l_leg - name = "Robot left leg" - id = "robot_l_leg" - build_path = /obj/item/robot_parts/l_leg - time = 20 - materials = list(MATERIAL_STEEL = 15000) - -/datum/design/item/mechfab/robot/r_leg - name = "Robot right leg" - id = "robot_r_leg" - build_path = /obj/item/robot_parts/r_leg - time = 20 - materials = list(MATERIAL_STEEL = 15000) - -/datum/design/item/mechfab/robot/component - time = 20 - materials = list(MATERIAL_STEEL = 5000) - -/datum/design/item/mechfab/robot/component/binary_communication_device - name = "Binary communication device" - id = "binary_communication_device" - build_path = /obj/item/robot_parts/robot_component/binary_communication_device - -/datum/design/item/mechfab/robot/component/radio - name = "Radio" - id = "radio" - build_path = /obj/item/robot_parts/robot_component/radio - -/datum/design/item/mechfab/robot/component/actuator - name = "Actuator" - id = "actuator" - build_path = /obj/item/robot_parts/robot_component/actuator - -/datum/design/item/mechfab/robot/component/diagnosis_unit - name = "Diagnosis unit" - id = "diagnosis_unit" - build_path = /obj/item/robot_parts/robot_component/diagnosis_unit - -/datum/design/item/mechfab/robot/component/camera - name = "Camera" - id = "camera" - build_path = /obj/item/robot_parts/robot_component/camera - -/datum/design/item/mechfab/robot/component/armour - name = "Armour plating" - id = "armour" - build_path = /obj/item/robot_parts/robot_component/armour - -/datum/design/item/mechfab/robot/component/armour/light - name = "Light-weight armour plating" - id = "light_armour" - build_path = /obj/item/robot_parts/robot_component/armour/light - // Half the armor, half the cost - time = 10 - materials = list(MATERIAL_STEEL = 2500) - -/datum/design/item/mechfab/exosuit - name = "exosuit frame" - id = "mech_frame" - build_path = /obj/structure/heavy_vehicle_frame - time = 70 - materials = list(MATERIAL_STEEL = 20000) - category = "Exosuits" - -/datum/design/item/mechfab/exosuit/basic_armour - name = "basic exosuit armour" - id = "mech_armour_basic" - build_path = /obj/item/robot_parts/robot_component/armour/exosuit - time = 30 - materials = list(MATERIAL_STEEL = 7500) - -/datum/design/item/mechfab/exosuit/radproof_armour - name = "radiation-proof exosuit armour" - id = "mech_armour_radproof" - build_path = /obj/item/robot_parts/robot_component/armour/exosuit/radproof - time = 50 - req_tech = list(TECH_MATERIAL = 2) - materials = list(MATERIAL_STEEL = 12500) - -/datum/design/item/mechfab/exosuit/em_armour - name = "EM-shielded exosuit armour" - id = "mech_armour_em" - build_path = /obj/item/robot_parts/robot_component/armour/exosuit/em - time = 50 - req_tech = list(TECH_MATERIAL = 2) - materials = list(MATERIAL_STEEL = 12500, MATERIAL_SILVER = 1000) - -/datum/design/item/mechfab/exosuit/combat_armour - name = "Combat exosuit armour" - id = "mech_armour_combat" - build_path = /obj/item/robot_parts/robot_component/armour/exosuit/combat - time = 50 - req_tech = list(TECH_MATERIAL = 4) - materials = list(MATERIAL_STEEL = 20000, MATERIAL_DIAMOND = 5000) - -/datum/design/item/mechfab/exosuit/control_module - name = "exosuit control module" - id = "mech_control_module" - build_path = /obj/item/mech_component/control_module - time = 15 - materials = list(MATERIAL_STEEL = 5000) - -/datum/design/item/mechfab/exosuit/combat_torso - name = "combat exosuit chassis" - id = "combat_body" - time = 60 - materials = list(MATERIAL_STEEL = 45000) - build_path = /obj/item/mech_component/chassis/combat - req_tech = list(TECH_COMBAT = 2) - -/datum/design/item/mechfab/exosuit/combat_arms - name = "combat exosuit manipulators" - id = "combat_arms" - time = 30 - materials = list(MATERIAL_STEEL = 15000) - build_path = /obj/item/mech_component/manipulators/combat - req_tech = list(TECH_COMBAT = 2) - -/datum/design/item/mechfab/exosuit/combat_legs - name = "combat exosuit motivators" - id = "combat_legs" - time = 30 - materials = list(MATERIAL_STEEL = 15000) - build_path = /obj/item/mech_component/propulsion/combat - req_tech = list(TECH_COMBAT = 2) - -/datum/design/item/mechfab/exosuit/powerloader_head - name = "power loader sensors" - id = "powerloader_head" - build_path = /obj/item/mech_component/sensors/powerloader - time = 15 - materials = list(MATERIAL_STEEL = 5000) - -/datum/design/item/mechfab/exosuit/powerloader_torso - name = "power loader chassis" - id = "powerloader_body" - build_path = /obj/item/mech_component/chassis/powerloader - time = 50 - materials = list(MATERIAL_STEEL = 20000) - -/datum/design/item/mechfab/exosuit/powerloader_arms - name = "power loader manipulators" - id = "powerloader_arms" - build_path = /obj/item/mech_component/manipulators/powerloader - time = 30 - materials = list(MATERIAL_STEEL = 6000) - -/datum/design/item/mechfab/exosuit/powerloader_legs - name = "power loader motivators" - id = "powerloader_legs" - build_path = /obj/item/mech_component/propulsion/powerloader - time = 30 - materials = list(MATERIAL_STEEL = 6000) - -/datum/design/item/mechfab/exosuit/light_head - name = "light exosuit sensors" - id = "light_head" - time = 20 - materials = list(MATERIAL_STEEL = 8000) - build_path = /obj/item/mech_component/sensors/light - req_tech = list(TECH_MATERIAL = 1) - -/datum/design/item/mechfab/exosuit/light_torso - name = "light exosuit chassis" - id = "light_body" - time = 40 - materials = list(MATERIAL_STEEL = 30000) - build_path = /obj/item/mech_component/chassis/light - req_tech = list(TECH_MATERIAL = 1) - -/datum/design/item/mechfab/exosuit/light_arms - name = "light exosuit manipulators" - id = "light_arms" - time = 20 - materials = list(MATERIAL_STEEL = 10000) - build_path = /obj/item/mech_component/manipulators/light - req_tech = list(TECH_MATERIAL = 1) - -/datum/design/item/mechfab/exosuit/light_legs - name = "light exosuit motivators" - id = "light_legs" - time = 25 - materials = list(MATERIAL_STEEL = 10000) - build_path = /obj/item/mech_component/propulsion/light - req_tech = list(TECH_MATERIAL = 1) - -/datum/design/item/mechfab/exosuit/heavy_head - name = "heavy exosuit sensors" - id = "heavy_head" - time = 35 - materials = list(MATERIAL_STEEL = 16000) - build_path = /obj/item/mech_component/sensors/heavy - req_tech = list(TECH_COMBAT = 2) - -/datum/design/item/mechfab/exosuit/heavy_torso - name = "heavy exosuit chassis" - id = "heavy_body" - time = 75 - materials = list(MATERIAL_STEEL = 70000, MATERIAL_URANIUM = 10000) - build_path = /obj/item/mech_component/chassis/heavy - -/datum/design/item/mechfab/exosuit/heavy_arms - name = "heavy exosuit manipulators" - id = "heavy_arms" - time = 35 - materials = list(MATERIAL_STEEL = 20000) - build_path = /obj/item/mech_component/manipulators/heavy - -/datum/design/item/mechfab/exosuit/heavy_legs - name = "heavy exosuit motivators" - id = "heavy_legs" - time = 35 - materials = list(MATERIAL_STEEL = 20000) - build_path = /obj/item/mech_component/propulsion/heavy - -/datum/design/item/mechfab/exosuit/spider - name = "quadruped motivators" - id = "quad_legs" - time = 20 - materials = list(MATERIAL_STEEL = 12000) - build_path = /obj/item/mech_component/propulsion/spider - req_tech = list(TECH_ENGINEERING = 2) - -/datum/design/item/mechfab/exosuit/track - name = "armored treads" - id = "treads" - time = 35 - materials = list(MATERIAL_STEEL = 25000) - build_path = /obj/item/mech_component/propulsion/tracks - req_tech = list(TECH_MATERIAL = 4) - -/datum/design/item/mechfab/exosuit/sphere_torso - name = "spherical chassis" - id = "sphere_body" - build_path = /obj/item/mech_component/chassis/pod - time = 50 - materials = list(MATERIAL_STEEL = 18000) - -/datum/design/item/robot_upgrade - build_type = MECHFAB - time = 12 - materials = list(MATERIAL_STEEL = 10000) - category = "Cyborg Upgrade Modules" - -/datum/design/item/robot_upgrade/rename - name = "Rename module" - desc = "Used to rename a cyborg." - id = "borg_rename_module" - build_path = /obj/item/borg/upgrade/rename - -/datum/design/item/robot_upgrade/reset - name = "Reset module" - desc = "Used to reset a cyborg's module. Destroys any other upgrades applied to the robot." - id = "borg_reset_module" - build_path = /obj/item/borg/upgrade/reset - -/datum/design/item/robot_upgrade/floodlight - name = "Floodlight module" - desc = "Used to boost cyborg's integrated light intensity." - id = "borg_floodlight_module" - build_path = /obj/item/borg/upgrade/floodlight - -/datum/design/item/robot_upgrade/restart - name = "Emergency restart module" - desc = "Used to force a restart of a disabled-but-repaired robot, bringing it back online." - id = "borg_restart_module" - materials = list(MATERIAL_STEEL = 60000, MATERIAL_GLASS = 5000) - build_path = /obj/item/borg/upgrade/restart - -/datum/design/item/robot_upgrade/vtec - name = "VTEC module" - desc = "Used to kick in a robot's VTEC systems, increasing their speed." - id = "borg_vtec_module" - materials = list(MATERIAL_STEEL = 80000, MATERIAL_GLASS = 6000, MATERIAL_GOLD = 5000) - build_path = /obj/item/borg/upgrade/vtec - -/datum/design/item/robot_upgrade/weaponcooler - name = "Rapid weapon cooling module" - desc = "Used to cool a mounted energy gun, increasing the potential current in it and thus its recharge rate." - id = "borg_taser_module" - materials = list(MATERIAL_STEEL = 80000, MATERIAL_GLASS = 6000, MATERIAL_GOLD = 2000, MATERIAL_DIAMOND = 500) - build_path = /obj/item/borg/upgrade/weaponcooler - -/datum/design/item/robot_upgrade/jetpack - name = "Jetpack module" - desc = "A carbon dioxide jetpack suitable for low-gravity mining operations." - id = "borg_jetpack_module" - materials = list(MATERIAL_STEEL = 10000, MATERIAL_PHORON = 15000, MATERIAL_URANIUM = 20000) - build_path = /obj/item/borg/upgrade/jetpack - -/datum/design/item/robot_upgrade/rcd - name = "RCD module" - desc = "A rapid construction device module for use during construction operations." - id = "borg_rcd_module" - materials = list(MATERIAL_STEEL = 25000, MATERIAL_PHORON = 10000, MATERIAL_GOLD = 1000, MATERIAL_SILVER = 1000) - build_path = /obj/item/borg/upgrade/rcd - -/datum/design/item/robot_upgrade/syndicate - name = "Illegal upgrade" - desc = "Allows for the construction of lethal upgrades for cyborgs." - id = "borg_syndicate_module" - req_tech = list(TECH_COMBAT = 4, TECH_ESOTERIC = 3) - materials = list(MATERIAL_STEEL = 10000, MATERIAL_GLASS = 15000, MATERIAL_DIAMOND = 10000) - build_path = /obj/item/borg/upgrade/syndicate - -/datum/design/item/robot_upgrade/flash_protection - name = "Optical Matrix Shielding" - desc = "Provides shielding for the optical matrix, rendering the robot immune to flashes." - id = "borg_flash_protection_module" - materials = list(MATERIAL_STEEL = 80000, MATERIAL_GLASS = 6000, MATERIAL_GOLD = 5000) - build_path = /obj/item/borg/upgrade/flash_protection - -/datum/design/item/exosuit - build_type = MECHFAB - category = "Exosuit Equipment" - time = 10 - materials = list(MATERIAL_STEEL = 10000) - -/datum/design/item/exosuit/AssembleDesignDesc() - if(!desc) - desc = "Allows for the construction of \a [item_name] for installation in an exosuit hardpoint." - -/datum/design/item/exosuit/hydraulic_clamp - name = "hydraulic clamp" - id = "hydraulic_clamp" - build_path = /obj/item/mech_equipment/clamp - -/datum/design/item/exosuit/gravity_catapult - name = "gravity catapult" - id = "gravity_catapult" - build_path = /obj/item/mech_equipment/catapult - -/datum/design/item/exosuit/drill - name = "drill" - id = "mech_drill" - build_path = /obj/item/mech_equipment/drill - -/datum/design/item/exosuit/taser - name = "mounted electrolaser" - id = "mech_taser" - req_tech = list(TECH_COMBAT = 1) - build_path = /obj/item/mech_equipment/mounted_system/taser - -/datum/design/item/exosuit/weapon/plasma - name = "mounted plasma cutter" - id = "mech_plasma" - materials = list(MATERIAL_STEEL = 20000) - req_tech = list(TECH_COMBAT = 2, TECH_MATERIAL = 4, TECH_ENGINEERING = 3) - build_path = /obj/item/mech_equipment/mounted_system/taser/plasma - -/datum/design/item/exosuit/weapon/plasma/auto - name = "mounted rotatory plasma cutter" - id = "mech_plasma_auto" - materials = list(MATERIAL_STEEL = 20000, MATERIAL_SILVER = 2000, MATERIAL_GOLD = 2000) - req_tech = list(TECH_COMBAT = 3, TECH_MATERIAL = 5, TECH_ENGINEERING = 3) - build_path = /obj/item/mech_equipment/mounted_system/taser/autoplasma - -/datum/design/item/exosuit/weapon/ion - name = "mounted ion rifle" - id = "mech_ion" - req_tech = list(TECH_COMBAT = 4, TECH_MAGNET = 4) - build_path = /obj/item/mech_equipment/mounted_system/taser/ion - -/datum/design/item/exosuit/weapon/laser - name = "mounted laser gun" - id = "mech_laser" - req_tech = list(TECH_COMBAT = 4, TECH_MAGNET = 4) - build_path = /obj/item/mech_equipment/mounted_system/taser/laser - -/datum/design/item/exosuit/weapon/machete - name = "Mechete" - id = "mech_machete" - req_tech = list(TECH_COMBAT = 2) - build_path = /obj/item/mech_equipment/mounted_system/melee/mechete - -/datum/design/item/exosuit/weapon/flamethrower - name = "mounted flamethrower" - id = "mech_flamer" - materials = list(MATERIAL_STEEL = 20000, MATERIAL_PLASTIC = 10000) - req_tech = list(TECH_COMBAT = 1, TECH_MATERIAL = 2) - build_path = /obj/item/mech_equipment/mounted_system/flamethrower - -/datum/design/item/exosuit/rcd - name = "RCD" - id = "mech_rcd" - time = 90 - materials = list(MATERIAL_STEEL = 30000, MATERIAL_PHORON = 25000, MATERIAL_SILVER = 15000, MATERIAL_GOLD = 15000) - req_tech = list(TECH_MATERIAL = 4, TECH_BLUESPACE = 3, TECH_MAGNET = 4, TECH_POWER = 4, TECH_ENGINEERING = 4) - build_path = /obj/item/mech_equipment/mounted_system/rcd - -/datum/design/item/exosuit/floodlight - name = "floodlight" - id = "mech_floodlight" - req_tech = list(TECH_ENGINEERING = 1) - build_path = /obj/item/mech_equipment/light - -/datum/design/item/exosuit/camera - name = "exosuit camera" - id = "mech_camera" - req_tech = list(TECH_ENGINEERING = 1) - build_path = /obj/item/mech_equipment/camera - -/datum/design/item/exosuit/flash - name = "exosuit flash" - id = "mech_flash" - req_tech = list(TECH_COMBAT = 1) - build_path = /obj/item/mech_equipment/flash - -/datum/design/item/exosuit/sleeper - name = "mounted sleeper" - id = "mech_sleeper" - build_path = /obj/item/mech_equipment/sleeper - -/datum/design/item/exosuit/mender - name = "mounted medigel spray" - id = "mech_mender" - build_path = /obj/item/mech_equipment/mender - materials = list(MATERIAL_STEEL = 10000, MATERIAL_PLASTIC = 15000, MATERIAL_ALUMINIUM = 15000) - -/datum/design/item/exosuit/extinguisher - name = "mounted extinguisher" - id = "mech_extinguisher" - build_path = /obj/item/mech_equipment/mounted_system/extinguisher - -/datum/design/item/exosuit/mechshields - name = "energy shield drone" - id = "mech_shield" - time = 90 - materials = list(MATERIAL_STEEL = 20000, MATERIAL_SILVER = 12000, MATERIAL_GOLD = 12000) - req_tech = list(TECH_MATERIAL = 4, TECH_MAGNET = 4, TECH_POWER = 4, TECH_COMBAT = 2) - build_path = /obj/item/mech_equipment/shields - -/datum/design/item/exosuit/mechshields/ballistic - name = "plasteel mech shield" - id = "mech_shield_ballistic" - time = 45 - materials = list(MATERIAL_STEEL = 40000, MATERIAL_ALUMINIUM = 5000) - req_tech = list(TECH_MATERIAL = 3) - build_path = /obj/item/mech_equipment/ballistic_shield - -/datum/design/item/exosuit/ionjets - name = "exosuit manouvering unit" - id = "mech_ionjets" - time = 30 - materials = list(MATERIAL_STEEL = 20000, MATERIAL_ALUMINIUM = 10000, MATERIAL_PHORON = 2500) - req_tech = list(TECH_ENGINEERING = 2, TECH_MAGNET = 2) - build_path = /obj/item/mech_equipment/ionjets - -/datum/design/item/exosuit/mechshields/air - name = "exosuit atmospheric shields" - id = "mech_atmoshields" - time = 30 - materials = list(MATERIAL_STEEL = 20000, MATERIAL_ALUMINIUM = 5000, MATERIAL_GLASS = 5000, MATERIAL_PHORON = 2500) - req_tech = list(TECH_ENGINEERING = 2, TECH_MAGNET = 2) - build_path = /obj/item/mech_equipment/atmos_shields -// End mechs. - -/datum/design/item/synthetic_flash - name = "Synthetic flash" - id = "sflash" - req_tech = list(TECH_MAGNET = 3, TECH_COMBAT = 2) - build_type = MECHFAB - materials = list(MATERIAL_STEEL = 750, MATERIAL_GLASS = 750) - build_path = /obj/item/device/flash/synthetic - category = "Misc" - -//Augments, son -/datum/design/item/mechfab/augment - category = "Augments" - -/datum/design/item/mechfab/augment/armblade - name = "Armblade" - build_path = /obj/item/organ/internal/augment/active/item/armblade - materials = list(DEFAULT_WALL_MATERIAL = 4000, "glass" = 750) - req_tech = list(TECH_MAGNET = 3, TECH_COMBAT = 2, TECH_MATERIAL = 4, TECH_BIO = 3) - id = "augment_blade" - -/datum/design/item/mechfab/augment/armblade/wolverine - name = "Cyberclaws" - build_path = /obj/item/organ/internal/augment/active/item/wolverine - materials = list(DEFAULT_WALL_MATERIAL = 6000, "diamond" = 250) - req_tech = list(TECH_MAGNET = 3, TECH_COMBAT = 4, TECH_MATERIAL = 4, TECH_BIO = 3) - id = "augment_wolverine" - -/datum/design/item/mechfab/augment/armblade/wrist_blade - name = "Wrist blade" - build_path = /obj/item/organ/internal/augment/active/item/wrist_blade - materials = list(MATERIAL_TITANIUM = 4000, MATERIAL_DIAMOND = 250) - req_tech = list(TECH_ESOTERIC = 4, TECH_COMBAT = 5, TECH_BIO = 3) - id = "augment_wristblade" - -/datum/design/item/mechfab/augment/powerfist - name = "Pneumatic Powerfist" - build_path = /obj/item/organ/internal/augment/active/item/powerfist - materials = list(DEFAULT_WALL_MATERIAL = 6000, MATERIAL_PHORON = 1000, MATERIAL_URANIUM = 500) - req_tech = list(TECH_MAGNET = 3, TECH_COMBAT = 4, TECH_MATERIAL = 4, TECH_BIO = 3) - id = "augment_powerfist" - -/datum/design/item/mechfab/augment/armblade/popout_shotgun - name = "Pop-out shotgun" - build_path = /obj/item/organ/internal/augment/active/item/popout_shotgun - materials = list(DEFAULT_WALL_MATERIAL = 5000, MATERIAL_SILVER = 500) - req_tech = list(TECH_ESOTERIC = 5, TECH_COMBAT = 6, TECH_BIO = 4) - id = "augment_popout_shotgun" - -/datum/design/item/mechfab/augment/corrective_lenses - name = "Corrective lenses" - build_path = /obj/item/organ/internal/augment/active/item/corrective_lenses - materials = list(DEFAULT_WALL_MATERIAL = 500, MATERIAL_GLASS = 1000) - req_tech = list(TECH_MATERIAL = 2) - id = "augment_corrective_lenses" - -/datum/design/item/mechfab/augment/glare_dampeners - name = "Glare dampeners" - build_path = /obj/item/organ/internal/augment/active/item/glare_dampeners - materials = list(DEFAULT_WALL_MATERIAL = 100, MATERIAL_GLASS = 2000) - req_tech = list(TECH_MATERIAL = 3, TECH_ENGINEERING = 3) - id = "augment_glare_dampeners" - -/datum/design/item/mechfab/augment/adaptive_binoculars - name = "Adaptive binoculars" - build_path = /obj/item/organ/internal/augment/active/item/adaptive_binoculars - materials = list(MATERIAL_DIAMOND = 100, MATERIAL_GOLD = 100, MATERIAL_GLASS = 2000) - // We use decent requirements for this, because it allows someone to zoom in and grab ammo from an open container at the same time - req_tech = list(TECH_MATERIAL = 4, TECH_ENGINEERING = 4, TECH_COMBAT = 4) - id = "augment_adaptive_binoculars" - -/datum/design/item/mechfab/augment/iatric_monitor - name = "Iatric monitor" - build_path = /obj/item/organ/internal/augment/active/iatric_monitor - materials = list(DEFAULT_WALL_MATERIAL = 100, MATERIAL_GLASS = 2000) - req_tech = list(TECH_BIO = 3) - id = "augment_iatric_monitor" - -/datum/design/item/mechfab/augment/internal_air_system - name = "Internal air system" - build_path = /obj/item/organ/internal/augment/active/internal_air_system - materials = list(DEFAULT_WALL_MATERIAL = 500, MATERIAL_GLASS = 2000, MATERIAL_DIAMOND = 100) - req_tech = list(TECH_MATERIAL = 5, TECH_BIO = 5) - id = "augment_internal_air_system" - -/datum/design/item/mechfab/augment/leukocyte_breeder - name = "Leukocyte breeder" - build_path = /obj/item/organ/internal/augment/active/leukocyte_breeder - materials = list(DEFAULT_WALL_MATERIAL = 2000, MATERIAL_GLASS = 1000) - req_tech = list(TECH_MAGNET = 4, TECH_DATA = 4, TECH_BIO = 6) - id = "augment_leukocyte_breeder" - -/datum/design/item/mechfab/augment/engineering - name = "Engineering toolset" - build_path = /obj/item/organ/internal/augment/active/polytool/engineer - materials = list(DEFAULT_WALL_MATERIAL = 3000, "glass" = 1000) - id = "augment_toolset_engineering" - -/datum/design/item/mechfab/augment/surgery - name = "Surgical toolset" - build_path = /obj/item/organ/internal/augment/active/polytool/surgical - materials = list(DEFAULT_WALL_MATERIAL = 2000, "glass" = 2000) - id = "augment_toolset_surgery" - -/datum/design/item/mechfab/augment/reflex - name = "Synapse interceptors" - build_path = /obj/item/organ/internal/augment/boost/reflex - materials = list(DEFAULT_WALL_MATERIAL = 750, "glass" = 750, "silver" = 100) - req_tech = list(TECH_MATERIAL = 5, TECH_COMBAT = 4, TECH_BIO = 4, TECH_MAGNET = 5) - id = "augment_booster_reflex" - -/datum/design/item/mechfab/augment/shooting - name = "Gunnery booster" - build_path = /obj/item/organ/internal/augment/boost/shooting - materials = list(DEFAULT_WALL_MATERIAL = 750, "glass" = 750, "silver" = 100) - req_tech = list(TECH_MATERIAL = 5, TECH_COMBAT = 5, TECH_BIO = 4) - id = "augment_booster_gunnery" - -/datum/design/item/mechfab/augment/muscle - name = "Mechanical muscles" - build_path = /obj/item/organ/internal/augment/boost/muscle - materials = list(DEFAULT_WALL_MATERIAL = 5000, "glass" = 1000) - id = "augment_booster_muscles" - -/datum/design/item/mechfab/augment/armor - name = "Subdermal armor" - build_path = /obj/item/organ/internal/augment/armor - materials = list(DEFAULT_WALL_MATERIAL = 10000, "glass" = 750) - id = "augment_armor" - -/datum/design/item/mechfab/augment/hud/health - name = "Implantable health HUD" - build_path = /obj/item/organ/internal/augment/active/hud/health - materials = list(DEFAULT_WALL_MATERIAL = 250, "glass" = 250) - req_tech = list(TECH_BIO = 2, TECH_MAGNET = 3) - id = "augment_med_hud" - -/datum/design/item/mechfab/augment/hud/security - name = "Implantable security HUD" - build_path = /obj/item/organ/internal/augment/active/hud/security - materials = list(DEFAULT_WALL_MATERIAL = 250, "glass" = 250) - req_tech = list(TECH_MAGNET = 3, TECH_COMBAT = 2) - id = "augment_sec_hud" - -/datum/design/item/mechfab/augment/hud/janitor - name = "Implantable filth HUD" - build_path = /obj/item/organ/internal/augment/active/hud/janitor - materials = list(DEFAULT_WALL_MATERIAL = 250, "glass" = 250) - req_tech = list(TECH_BIO = 1, TECH_MAGNET = 3) - id= "augment_jani_hud" - -/datum/design/item/mechfab/augment/hud/science - name = "Implantable science HUD" - build_path = /obj/item/organ/internal/augment/active/hud/science - materials = list(DEFAULT_WALL_MATERIAL = 250, "glass" = 250) - req_tech = list(TECH_BIO = 1, TECH_MAGNET = 3) - id= "augment_sci_hud" - -/datum/design/item/mechfab/augment/nanounit - name = "Nanite MCU" - build_path = /obj/item/organ/internal/augment/active/nanounit - materials = list(DEFAULT_WALL_MATERIAL = 5000, "glass" = 1000, "gold" = 100, "uranium" = 500) - req_tech = list(TECH_MATERIAL = 5, TECH_COMBAT = 5, TECH_BIO = 5, TECH_ENGINEERING = 5) - id = "augment_nanounit" - -/datum/design/item/mechfab/augment/circuit - name = "Integrated circuit frame" - build_path = /obj/item/organ/internal/augment/active/item/circuit - materials = list(DEFAULT_WALL_MATERIAL = 3000) - id = "augment_circuitry" - -//BigRigs -/datum/design/item/mechfab/rig/zero - category = "Hardsuits" - name = "Null suit control module" - build_path = /obj/item/rig/zero - materials = list(DEFAULT_WALL_MATERIAL = 30000, "glass" = 5000, "silver" = 1000) - id = "null _suit" - time = 120 - -/datum/design/item/mechfab/rig/meson - category = "Hardsuits" - name = "Meson Scanner" - build_path = /obj/item/rig_module/vision/meson - materials = list(MATERIAL_STEEL = 100, MATERIAL_GLASS = 200, MATERIAL_PLASTIC = 300) - req_tech = list(TECH_MAGNET = 2, TECH_ENGINEERING = 5) - id = "rig_meson" - sort_string = "WCAAA" - -/datum/design/item/mechfab/rig/medhud - category = "Hardsuits" - name = "Medical HUD" - build_path = /obj/item/rig_module/vision/medhud - materials = list(MATERIAL_STEEL = 100, MATERIAL_GLASS = 200, MATERIAL_PLASTIC = 300) - req_tech = list(TECH_MAGNET = 3, TECH_BIO = 2, TECH_ENGINEERING = 5) - id = "rig_medhud" - sort_string = "WCAAB" - -/datum/design/item/mechfab/rig/sechud - category = "Hardsuits" - name = "Security HUD" - build_path = /obj/item/rig_module/vision/sechud - materials = list(MATERIAL_STEEL = 100, MATERIAL_GLASS = 200, MATERIAL_PLASTIC = 300) - req_tech = list(TECH_MAGNET = 3, TECH_BIO = 2, TECH_ENGINEERING = 5) - id = "rig_sechud" - sort_string = "WCAAC" - -/datum/design/item/mechfab/rig/nvg - category = "Hardsuits" - name = "Night Vision" - build_path = /obj/item/rig_module/vision/nvg - materials = list(MATERIAL_PLASTIC = 500, MATERIAL_STEEL = 300, MATERIAL_GLASS = 200, MATERIAL_URANIUM = 200) - req_tech = list(TECH_MAGNET = 6, TECH_ENGINEERING = 6) - id = "rig_nvg" - sort_string = "WCAAD" - -/datum/design/item/mechfab/rig/healthscanner - category = "Hardsuits" - name = "Medical Scanner" - build_path = /obj/item/rig_module/device/healthscanner - materials = list(MATERIAL_PLASTIC = 1000, MATERIAL_STEEL = 700, MATERIAL_GLASS = 500) - req_tech = list(TECH_MAGNET = 3, TECH_BIO = 3, TECH_ENGINEERING = 5) - id = "rig_healthscanner" - sort_string = "WCBAA" - -/datum/design/item/mechfab/rig/drill - category = "Hardsuits" - name = "Mining Drill" - build_path = /obj/item/rig_module/device/drill - materials = list(MATERIAL_STEEL = 3500, MATERIAL_GLASS = 1500, MATERIAL_DIAMOND = 2000, MATERIAL_PLASTIC = 1000) - req_tech = list(TECH_MATERIAL = 6, TECH_POWER = 4, TECH_ENGINEERING = 6) - id = "rig_drill" - sort_string = "WCCAA" - -/datum/design/item/mechfab/rig/plasmacutter - category = "Hardsuits" - name = "Plasma Cutter" - build_path = /obj/item/rig_module/mounted/plasmacutter - materials = list(MATERIAL_STEEL = 2000, MATERIAL_GLASS = 1000, MATERIAL_PLASTIC = 1000, MATERIAL_GOLD = 700, MATERIAL_PHORON = 500) - req_tech = list(TECH_MATERIAL = 4, TECH_PHORON = 3, TECH_ENGINEERING = 6, TECH_COMBAT = 4) - id = "rig_plasmacutter" - sort_string = "VCCAB" - -/datum/design/item/mechfab/rig/orescanner - category = "Hardsuits" - name = "Ore Scanner" - build_path = /obj/item/rig_module/device/orescanner - materials = list(MATERIAL_PLASTIC = 1000, MATERIAL_STEEL = 800, MATERIAL_GLASS = 500) - req_tech = list(TECH_MATERIAL = 4, TECH_MAGNET = 4, TECH_ENGINEERING = 6) - id = "rig_orescanner" - sort_string = "WCDAA" - -/datum/design/item/mechfab/rig/anomaly_scanner - category = "Hardsuits" - name = "Anomaly Scanner" - build_path = /obj/item/rig_module/device/anomaly_scanner - materials = list(MATERIAL_PLASTIC = 1000, MATERIAL_STEEL = 800, MATERIAL_GLASS = 500) - req_tech = list(TECH_BLUESPACE = 4, TECH_MAGNET = 4, TECH_ENGINEERING = 6) - id = "rig_anomaly_scanner" - sort_string = "WCDAB" - -/datum/design/item/mechfab/rig/rcd - category = "Hardsuits" - name = "RCD Module" - build_path = /obj/item/rig_module/device/rcd - materials = list(MATERIAL_STEEL = 2000, MATERIAL_GLASS = 1000, MATERIAL_PLASTIC = 1000, MATERIAL_GOLD = 700, MATERIAL_SILVER = 700) - req_tech = list(TECH_MATERIAL = 6, TECH_MAGNET = 5, TECH_ENGINEERING = 7) - id = "rig_rcd" - sort_string = "WCEAA" - -/datum/design/item/mechfab/rig/jets - category = "Hardsuits" - name = "Maneuvering Jets" - build_path = /obj/item/rig_module/maneuvering_jets - materials = list(MATERIAL_STEEL = 3000, MATERIAL_PLASTIC = 2000, MATERIAL_GLASS = 1000) - req_tech = list(TECH_MATERIAL = 6, TECH_ENGINEERING = 7) - id = "rig_jets" - sort_string = "WCFAA" - -/datum/design/item/mechfab/rig/decompiler - category = "Hardsuits" - name = "Matter Decompiler" - build_path = /obj/item/rig_module/device/decompiler - materials = list(MATERIAL_STEEL = 3000, MATERIAL_PLASTIC = 2000, MATERIAL_GLASS = 1000) - req_tech = list(TECH_MATERIAL = 5, TECH_ENGINEERING = 5) - id = "rig_decompiler" - sort_string = "WCGAA" - -/datum/design/item/mechfab/rig/powersink - category = "Hardsuits" - name = "Power Sink" - build_path = /obj/item/rig_module/power_sink - materials = list(MATERIAL_STEEL = 2000, MATERIAL_GLASS = 2000, MATERIAL_GOLD = 1000, MATERIAL_PLASTIC = 1000) - req_tech = list(TECH_POWER = 6, TECH_ENGINEERING = 6) - id = "rig_powersink" - sort_string = "WCHAA" - -/datum/design/item/mechfab/rig/ai_container - category = "Hardsuits" - name = "AI Core Container" - build_path = /obj/item/rig_module/ai_container - materials = list(MATERIAL_STEEL = 1000, MATERIAL_GLASS = 1000, MATERIAL_PLASTIC = 1000, MATERIAL_GOLD = 500) - req_tech = list(TECH_DATA = 6, TECH_MATERIAL = 5, TECH_ENGINEERING = 6) - id = "rig_ai_container" - sort_string = "WCIAA" - -/datum/design/item/mechfab/rig/flash - category = "Hardsuits" - name = "Flash" - build_path = /obj/item/rig_module/device/flash - materials = list(MATERIAL_PLASTIC = 1500, MATERIAL_STEEL = 1000, MATERIAL_GLASS = 500) - req_tech = list(TECH_COMBAT = 2, TECH_MAGNET = 3, TECH_ENGINEERING = 5) - id = "rig_flash" - sort_string = "WCJAA" - -/datum/design/item/mechfab/rig/taser - category = "Hardsuits" - name = "Electrolaser" - build_path = /obj/item/rig_module/mounted/taser - materials = list(MATERIAL_STEEL = 4000, MATERIAL_PLASTIC = 2500, MATERIAL_GLASS = 2000, MATERIAL_GOLD = 1000) - req_tech = list(TECH_POWER = 5, TECH_COMBAT = 5, TECH_ENGINEERING = 6) - id = "rig_taser" - sort_string = "WCKAA" - -/datum/design/item/mechfab/rig/egun - category = "Hardsuits" - name = "Energy Gun" - build_path = /obj/item/rig_module/mounted/egun - materials = list(MATERIAL_STEEL = 6000, MATERIAL_GLASS = 3000, MATERIAL_PLASTIC = 2500, MATERIAL_GOLD = 2000, MATERIAL_SILVER = 1000) - req_tech = list(TECH_POWER = 6, TECH_COMBAT = 6, TECH_ENGINEERING = 6) - id = "rig_egun" - sort_string = "WCKAB" -/datum/design/item/mechfab/rig/enet - category = "Hardsuits" - name = "Energy Net" - build_path = /obj/item/rig_module/fabricator/energy_net - materials = list(MATERIAL_STEEL = 6000, MATERIAL_GLASS = 3000, MATERIAL_DIAMOND = 2000, MATERIAL_PLASTIC = 2000) - req_tech = list(TECH_MATERIAL = 5, TECH_POWER = 6, TECH_MAGNET = 5, TECH_ESOTERIC = 4, TECH_ENGINEERING = 6) - id = "rig_enet" - sort_string = "WCKAC" - -/datum/design/item/mechfab/rig/stealth - category = "Hardsuits" - name = "Active Camouflage" - build_path = /obj/item/rig_module/stealth_field - materials = list(MATERIAL_STEEL = 6000, MATERIAL_GLASS = 3000, MATERIAL_DIAMOND = 2000, MATERIAL_SILVER = 2000, MATERIAL_URANIUM = 2000, MATERIAL_GOLD = 2000, MATERIAL_PLASTIC = 2000) - req_tech = list(TECH_MATERIAL = 5, TECH_POWER = 6, TECH_MAGNET = 6, TECH_ESOTERIC = 6, TECH_ENGINEERING = 7) - id = "rig_stealth" - sort_string = "WCLAA" - -/datum/design/item/mechfab/rig/cooling_unit - category = "Hardsuits" - name = "Cooling Unit" - build_path = /obj/item/rig_module/cooling_unit - materials = list(MATERIAL_STEEL = 3000, MATERIAL_GLASS = 3500, MATERIAL_PLASTIC = 2000) - req_tech = list(TECH_MATERIAL = 2, TECH_MAGNET = 2, TECH_ENGINEERING = 5) - id = "rig_cooler" - sort_string = "WCLAB" diff --git a/code/modules/research/designs/designs_medical.dm b/code/modules/research/designs/designs_medical.dm deleted file mode 100644 index 60af24d04a050..0000000000000 --- a/code/modules/research/designs/designs_medical.dm +++ /dev/null @@ -1,75 +0,0 @@ -/datum/design/item/medical - materials = list(MATERIAL_STEEL = 30, MATERIAL_GLASS = 20) - -/datum/design/item/medical/AssembleDesignName() - ..() - name = "Biotech device prototype ([item_name])" - -/datum/design/item/medical/slime_scanner - desc = "Multipurpose organic life scanner." - id = "slime_scanner" - req_tech = list(TECH_MAGNET = 2, TECH_BIO = 2) - materials = list(MATERIAL_STEEL = 200, MATERIAL_GLASS = 100, MATERIAL_PLASTIC = 150) - build_path = /obj/item/device/scanner/xenobio - sort_string = "MACFA" - -/datum/design/item/medical/robot_scanner - desc = "A hand-held scanner able to diagnose robotic injuries." - id = "robot_scanner" - req_tech = list(TECH_MAGNET = 3, TECH_BIO = 2, TECH_ENGINEERING = 3) - materials = list(MATERIAL_STEEL = 500, MATERIAL_GLASS = 200, MATERIAL_PLASTIC = 150) - build_path = /obj/item/device/robotanalyzer - sort_string = "MACFB" - -/datum/design/item/medical/mass_spectrometer - desc = "A device for analyzing chemicals in blood." - id = "mass_spectrometer" - req_tech = list(TECH_BIO = 2, TECH_MAGNET = 2) - build_path = /obj/item/device/scanner/spectrometer - sort_string = "MACAA" - -/datum/design/item/medical/adv_mass_spectrometer - desc = "A device for analyzing chemicals in blood and their quantities." - id = "adv_mass_spectrometer" - req_tech = list(TECH_BIO = 2, TECH_MAGNET = 4) - build_path = /obj/item/device/scanner/spectrometer/adv - sort_string = "MACAB" - -/datum/design/item/medical/reagent_scanner - desc = "A device for identifying chemicals." - id = "reagent_scanner" - req_tech = list(TECH_BIO = 2, TECH_MAGNET = 2) - build_path = /obj/item/device/scanner/reagent - sort_string = "MACBA" - -/datum/design/item/medical/adv_reagent_scanner - desc = "A device for identifying chemicals and their proportions." - id = "adv_reagent_scanner" - req_tech = list(TECH_BIO = 2, TECH_MAGNET = 4) - build_path = /obj/item/device/scanner/reagent/adv - sort_string = "MACBB" - -/datum/design/item/medical/nanopaste - desc = "A tube of paste containing swarms of repair nanites. Very effective in repairing robotic machinery." - id = "nanopaste" - req_tech = list(TECH_MATERIAL = 4, TECH_ENGINEERING = 3) - materials = list(MATERIAL_STEEL = 7000, MATERIAL_GLASS = 7000) - build_path = /obj/item/stack/nanopaste - sort_string = "MADAA" - -/datum/design/item/medical/hypospray - desc = "A sterile, air-needle autoinjector for rapid administration of drugs." - id = "hypospray" - req_tech = list(TECH_MATERIAL = 4, TECH_BIO = 5) - materials = list(MATERIAL_STEEL = 8000, MATERIAL_GLASS = 8000, MATERIAL_SILVER = 2000) - build_path = /obj/item/reagent_containers/hypospray/vial - sort_string = "MAEAA" - -/datum/design/item/medical/cryobag - desc = "A folded, reusable bag designed to prevent additional damage to an occupant, especially useful if short on time or in \ - a hostile environment." - id = "cryobag" - req_tech = list(TECH_MATERIAL = 6, TECH_BIO = 6) - materials = list(MATERIAL_PLASTIC = 1000, MATERIAL_GLASS = 1000, MATERIAL_SILVER = 1000, MATERIAL_GOLD = 1000) - build_path = /obj/item/bodybag/cryobag - sort_string = "MAFAA" diff --git a/code/modules/research/designs/designs_mining.dm b/code/modules/research/designs/designs_mining.dm deleted file mode 100644 index 6ff3972c576a5..0000000000000 --- a/code/modules/research/designs/designs_mining.dm +++ /dev/null @@ -1,46 +0,0 @@ -/datum/design/item/mining/AssembleDesignName() - ..() - name = "Mining equipment design ([item_name])" - -/datum/design/item/mining/jackhammer - id = "jackhammer" - req_tech = list(TECH_MATERIAL = 3, TECH_POWER = 2, TECH_ENGINEERING = 2) - materials = list(MATERIAL_STEEL = 2000, MATERIAL_GLASS = 500, MATERIAL_SILVER = 500) - build_path = /obj/item/pickaxe/jackhammer - sort_string = "KAAAA" - -/datum/design/item/mining/drill - id = "drill" - req_tech = list(TECH_MATERIAL = 2, TECH_POWER = 3, TECH_ENGINEERING = 2) - materials = list(MATERIAL_STEEL = 6000, MATERIAL_GLASS = 1000) //expensive, but no need for miners. - build_path = /obj/item/pickaxe/drill - sort_string = "KAAAB" - -/datum/design/item/mining/plasmacutter - id = "plasmacutter" - req_tech = list(TECH_MATERIAL = 4, TECH_PHORON = 3, TECH_ENGINEERING = 3) - materials = list(MATERIAL_STEEL = 1500, MATERIAL_GLASS = 500, MATERIAL_GOLD = 500, MATERIAL_PHORON = 500) - build_path = /obj/item/gun/energy/plasmacutter - sort_string = "KAAAC" - -/datum/design/item/mining/pick_diamond - id = "pick_diamond" - req_tech = list(TECH_MATERIAL = 6) - materials = list(MATERIAL_DIAMOND = 3000) - build_path = /obj/item/pickaxe/diamond - sort_string = "KAAAD" - -/datum/design/item/mining/drill_diamond - id = "drill_diamond" - req_tech = list(TECH_MATERIAL = 6, TECH_POWER = 4, TECH_ENGINEERING = 4) - materials = list(MATERIAL_STEEL = 3000, MATERIAL_GLASS = 1000, MATERIAL_DIAMOND = 2000) - build_path = /obj/item/pickaxe/diamonddrill - sort_string = "KAAAE" - -/datum/design/item/mining/depth_scanner - desc = "Used to check spatial depth and density of rock outcroppings." - id = "depth_scanner" - req_tech = list(TECH_MAGNET = 2, TECH_ENGINEERING = 2, TECH_BLUESPACE = 2) - materials = list(MATERIAL_STEEL = 1000, MATERIAL_GLASS = 500, MATERIAL_ALUMINIUM = 150) - build_path = /obj/item/device/depth_scanner - sort_string = "KAAAF" \ No newline at end of file diff --git a/code/modules/research/designs/designs_modular_computer.dm b/code/modules/research/designs/designs_modular_computer.dm deleted file mode 100644 index 6b00203f42654..0000000000000 --- a/code/modules/research/designs/designs_modular_computer.dm +++ /dev/null @@ -1,333 +0,0 @@ -// Drives -/datum/design/item/modularcomponent/disk/AssembleDesignName() - ..() - name = "Hard drive design ([item_name])" - -/datum/design/item/modularcomponent/disk/normal - name = "basic hard drive" - id = "hdd_basic" - req_tech = list(TECH_DATA = 1, TECH_ENGINEERING = 1) - build_type = PROTOLATHE - materials = list(MATERIAL_STEEL = 400, MATERIAL_GLASS = 100) - build_path = /obj/item/stock_parts/computer/hard_drive - sort_string = "VBAAA" - -/datum/design/item/modularcomponent/disk/advanced - name = "advanced hard drive" - id = "hdd_advanced" - req_tech = list(TECH_DATA = 2, TECH_ENGINEERING = 2) - build_type = PROTOLATHE - materials = list(MATERIAL_STEEL = 800, MATERIAL_GLASS = 200) - build_path = /obj/item/stock_parts/computer/hard_drive/advanced - sort_string = "VBAAB" - -/datum/design/item/modularcomponent/disk/super - name = "super hard drive" - id = "hdd_super" - req_tech = list(TECH_DATA = 3, TECH_ENGINEERING = 3) - build_type = PROTOLATHE - materials = list(MATERIAL_STEEL = 1600, MATERIAL_GLASS = 400) - build_path = /obj/item/stock_parts/computer/hard_drive/super - sort_string = "VBAAC" - -/datum/design/item/modularcomponent/disk/cluster - name = "cluster hard drive" - id = "hdd_cluster" - req_tech = list(TECH_DATA = 4, TECH_ENGINEERING = 4) - build_type = PROTOLATHE - materials = list(MATERIAL_STEEL = 3200, MATERIAL_GLASS = 800) - build_path = /obj/item/stock_parts/computer/hard_drive/cluster - sort_string = "VBAAD" - -/datum/design/item/modularcomponent/disk/micro - name = "micro hard drive" - id = "hdd_micro" - req_tech = list(TECH_DATA = 1, TECH_ENGINEERING = 1) - build_type = PROTOLATHE - materials = list(MATERIAL_STEEL = 400, MATERIAL_GLASS = 100) - build_path = /obj/item/stock_parts/computer/hard_drive/micro - sort_string = "VBAAE" - -/datum/design/item/modularcomponent/disk/small - name = "small hard drive" - id = "hdd_small" - req_tech = list(TECH_DATA = 2, TECH_ENGINEERING = 2) - build_type = PROTOLATHE - materials = list(MATERIAL_STEEL = 800, MATERIAL_GLASS = 200) - build_path = /obj/item/stock_parts/computer/hard_drive/small - sort_string = "VBAAF" - -// Network cards -/datum/design/item/modularcomponent/netcard/AssembleDesignName() - ..() - name = "Network card design ([item_name])" - -/datum/design/item/modularcomponent/netcard/basic - name = "basic network card" - id = "netcard_basic" - req_tech = list(TECH_DATA = 1, TECH_ENGINEERING = 1) - build_type = IMPRINTER - materials = list(MATERIAL_STEEL = 250, MATERIAL_GLASS = 100) - chemicals = list(/datum/reagent/acid = 20) - build_path = /obj/item/stock_parts/computer/network_card - sort_string = "VBABA" - -/datum/design/item/modularcomponent/netcard/advanced - name = "advanced network card" - id = "netcard_advanced" - req_tech = list(TECH_DATA = 3, TECH_ENGINEERING = 2) - build_type = IMPRINTER - materials = list(MATERIAL_STEEL = 500, MATERIAL_GLASS = 200) - chemicals = list(/datum/reagent/acid = 20) - build_path = /obj/item/stock_parts/computer/network_card/advanced - sort_string = "VBABB" - -/datum/design/item/modularcomponent/netcard/wired - name = "wired network card" - id = "netcard_wired" - req_tech = list(TECH_DATA = 5, TECH_ENGINEERING = 3) - build_type = IMPRINTER - materials = list(MATERIAL_STEEL = 2500, MATERIAL_GLASS = 400) - chemicals = list(/datum/reagent/acid = 20) - build_path = /obj/item/stock_parts/computer/network_card/wired - sort_string = "VBABC" - -// Data crystals (USB flash drives) -/datum/design/item/modularcomponent/portabledrive/AssembleDesignName() - ..() - name = "Portable drive design ([item_name])" - -/datum/design/item/modularcomponent/portabledrive/basic - name = "basic data crystal" - id = "portadrive_basic" - req_tech = list(TECH_DATA = 1) - build_type = IMPRINTER - materials = list(MATERIAL_GLASS = 800) - chemicals = list(/datum/reagent/acid = 20) - build_path = /obj/item/stock_parts/computer/hard_drive/portable - sort_string = "VBACA" - -/datum/design/item/modularcomponent/portabledrive/advanced - name = "advanced data crystal" - id = "portadrive_advanced" - req_tech = list(TECH_DATA = 2) - build_type = IMPRINTER - materials = list(MATERIAL_GLASS = 1600) - chemicals = list(/datum/reagent/acid = 20) - build_path = /obj/item/stock_parts/computer/hard_drive/portable/advanced - sort_string = "VBACB" - -/datum/design/item/modularcomponent/portabledrive/super - name = "super data crystal" - id = "portadrive_super" - req_tech = list(TECH_DATA = 4) - build_type = IMPRINTER - materials = list(MATERIAL_GLASS = 3200) - chemicals = list(/datum/reagent/acid = 20) - build_path = /obj/item/stock_parts/computer/hard_drive/portable/super - sort_string = "VBACC" - -// Card slot -/datum/design/item/modularcomponent/accessory/AssembleDesignName() - ..() - name = "Computer accessory ([item_name])" - -/datum/design/item/modularcomponent/accessory/cardslot - name = "RFID card slot" - id = "cardslot" - req_tech = list(TECH_DATA = 2) - build_type = PROTOLATHE - materials = list(MATERIAL_STEEL = 600) - build_path = /obj/item/stock_parts/computer/card_slot - sort_string = "VBADA" - -// Card Broadcaster -/datum/design/item/modularcomponent/accessory/cardbroadcaster - name = "RFID card broadcaster" - id = "cardbroadcaster" - req_tech = list(TECH_DATA = 3) - build_type = PROTOLATHE - materials = list(MATERIAL_STEEL = 600) - build_path = /obj/item/stock_parts/computer/card_slot/broadcaster - sort_string = "VBADB" - -// inteliCard Slot -/datum/design/item/modularcomponent/accessory/aislot - name = "inteliCard slot" - id = "aislot" - req_tech = list(TECH_POWER = 2, TECH_DATA = 3) - build_type = IMPRINTER - materials = list(MATERIAL_STEEL = 2000) - chemicals = list(/datum/reagent/acid = 20) - build_path = /obj/item/stock_parts/computer/ai_slot - sort_string = "VBADC" - -// Nano printer -/datum/design/item/modularcomponent/accessory/nanoprinter - name = "nano printer" - id = "nanoprinter" - req_tech = list(TECH_DATA = 2, TECH_ENGINEERING = 2) - build_type = PROTOLATHE - materials = list(MATERIAL_STEEL = 600) - build_path = /obj/item/stock_parts/computer/nano_printer - sort_string = "VBADD" - -// Tesla Link -/datum/design/item/modularcomponent/accessory/teslalink - name = "tesla link" - id = "teslalink" - req_tech = list(TECH_DATA = 2, TECH_POWER = 3, TECH_ENGINEERING = 2) - build_type = PROTOLATHE - materials = list(MATERIAL_STEEL = 2000) - build_path = /obj/item/stock_parts/computer/tesla_link - sort_string = "VBADE" - -//Scanners -/datum/design/item/modularcomponent/accessory/reagent_scanner - name = "reagent scanner module" - id = "scan_reagent" - req_tech = list(TECH_DATA = 2, TECH_ENGINEERING = 2, TECH_BIO = 2, TECH_MAGNET = 2) - build_type = PROTOLATHE - materials = list(MATERIAL_STEEL = 600, MATERIAL_GLASS = 200) - build_path = /obj/item/stock_parts/computer/scanner/reagent - sort_string = "VBADF" - -/datum/design/item/modularcomponent/accessory/paper_scanner - name = "paper scanner module" - id = "scan_paper" - req_tech = list(TECH_DATA = 2, TECH_ENGINEERING = 2) - build_type = PROTOLATHE - materials = list(MATERIAL_STEEL = 600, MATERIAL_GLASS = 200) - build_path = /obj/item/stock_parts/computer/scanner/paper - sort_string = "VBADG" - -/datum/design/item/modularcomponent/accessory/atmos_scanner - name = "atmospheric scanner module" - id = "scan_atmos" - req_tech = list(TECH_DATA = 2, TECH_ENGINEERING = 2, TECH_MAGNET = 2) - build_type = PROTOLATHE - materials = list(MATERIAL_STEEL = 600, MATERIAL_GLASS = 200) - build_path = /obj/item/stock_parts/computer/scanner/atmos - sort_string = "VBADH" - -/datum/design/item/modularcomponent/accessory/medical_scanner - name = "medical scanner module" - id = "scan_medical" - req_tech = list(TECH_DATA = 2, TECH_ENGINEERING = 2, TECH_MAGNET = 2, TECH_BIO = 2) - build_type = PROTOLATHE - materials = list(MATERIAL_STEEL = 600, MATERIAL_GLASS = 200) - build_path = /obj/item/stock_parts/computer/scanner/medical - sort_string = "VBADI" - -/datum/design/item/modularcomponent/accessory/robotic_scanner - name = "robotic scanner module" - id = "scan_robotic" - req_tech = list(TECH_DATA = 2, TECH_ENGINEERING = 2, TECH_MAGNET = 2, TECH_BIO = 1) - build_type = PROTOLATHE - materials = list(MATERIAL_STEEL = 600, MATERIAL_GLASS = 200) - build_path = /obj/item/stock_parts/computer/scanner/robotic - sort_string = "VBADJ" - -// Batteries -/datum/design/item/modularcomponent/battery/AssembleDesignName() - ..() - name = "Battery design ([item_name])" - -/datum/design/item/modularcomponent/battery/normal - name = "standard battery module" - id = "bat_normal" - req_tech = list(TECH_POWER = 1, TECH_ENGINEERING = 1) - build_type = PROTOLATHE - materials = list(MATERIAL_STEEL = 400) - build_path = /obj/item/stock_parts/computer/battery_module - sort_string = "VBAEA" - -/datum/design/item/modularcomponent/battery/advanced - name = "advanced battery module" - id = "bat_advanced" - req_tech = list(TECH_POWER = 2, TECH_ENGINEERING = 2) - build_type = PROTOLATHE - materials = list(MATERIAL_STEEL = 800) - build_path = /obj/item/stock_parts/computer/battery_module/advanced - sort_string = "VBAEB" - -/datum/design/item/modularcomponent/battery/super - name = "super battery module" - id = "bat_super" - req_tech = list(TECH_POWER = 3, TECH_ENGINEERING = 3) - build_type = PROTOLATHE - materials = list(MATERIAL_STEEL = 1600) - build_path = /obj/item/stock_parts/computer/battery_module/super - sort_string = "VBAEC" - -/datum/design/item/modularcomponent/battery/ultra - name = "ultra battery module" - id = "bat_ultra" - req_tech = list(TECH_POWER = 5, TECH_ENGINEERING = 4) - build_type = PROTOLATHE - materials = list(MATERIAL_STEEL = 3200) - build_path = /obj/item/stock_parts/computer/battery_module/ultra - sort_string = "VBAED" - -/datum/design/item/modularcomponent/battery/nano - name = "nano battery module" - id = "bat_nano" - req_tech = list(TECH_POWER = 1, TECH_ENGINEERING = 1) - build_type = PROTOLATHE - materials = list(MATERIAL_STEEL = 200) - build_path = /obj/item/stock_parts/computer/battery_module/nano - sort_string = "VBAEE" - -/datum/design/item/modularcomponent/battery/micro - name = "micro battery module" - id = "bat_micro" - req_tech = list(TECH_POWER = 2, TECH_ENGINEERING = 2) - build_type = PROTOLATHE - materials = list(MATERIAL_STEEL = 400) - build_path = /obj/item/stock_parts/computer/battery_module/micro - sort_string = "VBAEF" - -// Processor unit -/datum/design/item/modularcomponent/cpu/AssembleDesignName() - ..() - name = "CPU design ([item_name])" - -/datum/design/item/modularcomponent/cpu - name = "computer processor unit" - id = "cpu_normal" - req_tech = list(TECH_DATA = 3, TECH_ENGINEERING = 2) - build_type = IMPRINTER - materials = list(MATERIAL_STEEL = 1600) - chemicals = list(/datum/reagent/acid = 20) - build_path = /obj/item/stock_parts/computer/processor_unit - sort_string = "VBAFA" - -/datum/design/item/modularcomponent/cpu/small - name = "computer microprocessor unit" - id = "cpu_small" - req_tech = list(TECH_DATA = 2, TECH_ENGINEERING = 2) - build_type = IMPRINTER - materials = list(MATERIAL_STEEL = 800) - chemicals = list(/datum/reagent/acid = 20) - build_path = /obj/item/stock_parts/computer/processor_unit/small - sort_string = "VBAFB" - -/datum/design/item/modularcomponent/cpu/photonic - name = "computer photonic processor unit" - id = "pcpu_normal" - req_tech = list(TECH_DATA = 5, TECH_ENGINEERING = 4) - build_type = IMPRINTER - materials = list(MATERIAL_STEEL = 6400, glass = 2000) - chemicals = list(/datum/reagent/acid = 40) - build_path = /obj/item/stock_parts/computer/processor_unit/photonic - sort_string = "VBAFC" - -/datum/design/item/modularcomponent/cpu/photonic/small - name = "computer photonic microprocessor unit" - id = "pcpu_small" - req_tech = list(TECH_DATA = 4, TECH_ENGINEERING = 3) - build_type = IMPRINTER - materials = list(MATERIAL_STEEL = 3200, glass = 1000) - chemicals = list(/datum/reagent/acid = 20) - build_path = /obj/item/stock_parts/computer/processor_unit/photonic/small - sort_string = "VBAFD" diff --git a/code/modules/research/designs/designs_powercell.dm b/code/modules/research/designs/designs_powercell.dm deleted file mode 100644 index 1f14c3f72209f..0000000000000 --- a/code/modules/research/designs/designs_powercell.dm +++ /dev/null @@ -1,66 +0,0 @@ -/datum/design/item/powercell - build_type = PROTOLATHE | MECHFAB - category = "Misc" - materials = list(MATERIAL_STEEL = 700, MATERIAL_GLASS = 50, MATERIAL_PLASTIC = 20) - -/datum/design/item/powercell/AssembleDesignName() - name = "Power cell model ([item_name])" - -/datum/design/item/powercell/device/AssembleDesignName() - name = "Device cell model ([item_name])" - -/datum/design/item/powercell/AssembleDesignDesc() - if(build_path) - var/obj/item/cell/C = build_path - desc = "Allows the construction of power cells that can hold [initial(C.maxcharge)] units of energy." - -/datum/design/item/powercell/Fabricate() - var/obj/item/cell/C = ..() - C.charge = 0 //shouldn't produce power out of thin air. - return C - -/datum/design/item/powercell/basic - name = "basic" - id = "basic_cell" - req_tech = list(TECH_POWER = 1) - build_path = /obj/item/cell/standard - sort_string = "DAAAA" - -/datum/design/item/powercell/high - name = "high-capacity" - id = "high_cell" - req_tech = list(TECH_POWER = 2) - build_path = /obj/item/cell/high - sort_string = "DAAAB" - -/datum/design/item/powercell/super - name = "super-capacity" - id = "super_cell" - req_tech = list(TECH_POWER = 3, TECH_MATERIAL = 2) - build_path = /obj/item/cell/super - sort_string = "DAAAC" - -/datum/design/item/powercell/hyper - name = "hyper-capacity" - id = "hyper_cell" - req_tech = list(TECH_POWER = 5, TECH_MATERIAL = 4) - materials = list(MATERIAL_STEEL = 400, MATERIAL_GOLD = 150, MATERIAL_SILVER = 150, MATERIAL_GLASS = 70, MATERIAL_ALUMINIUM = 25) - build_path = /obj/item/cell/hyper - sort_string = "DAAAD" - -/datum/design/item/powercell/device/standard - name = "basic" - id = "device_cell_standard" - req_tech = list(TECH_POWER = 1) - materials = list(MATERIAL_STEEL = 70, MATERIAL_GLASS = 5) - build_path = /obj/item/cell/device/standard - sort_string = "DAAAE" - -/datum/design/item/powercell/device/high - name = "high-capacity" - build_type = PROTOLATHE | MECHFAB - id = "device_cell_high" - req_tech = list(TECH_POWER = 2) - materials = list(MATERIAL_STEEL = 70, MATERIAL_GLASS = 6) - build_path = /obj/item/cell/device/high - sort_string = "DAAAF" \ No newline at end of file diff --git a/code/modules/research/designs/designs_rig_modules.dm b/code/modules/research/designs/designs_rig_modules.dm deleted file mode 100644 index 10959bc02f036..0000000000000 --- a/code/modules/research/designs/designs_rig_modules.dm +++ /dev/null @@ -1,31 +0,0 @@ -//Sidenote; Try to keep a requirement of 5 engineering for each, but keep the rest as similiar to it's original as possible. -/datum/design/item/rig/AssembleDesignName() - ..() - name = "RIG module ([item_name])" - -/datum/design/item/integrated_printer - name = "Integrated Circuit Printer" - desc = "This machine provides all the necessary things for circuitry." - id = "icprinter" - req_tech = list(TECH_MATERIAL = 2, TECH_ENGINEERING = 1) - materials = list(MATERIAL_STEEL = 10000, MATERIAL_GLASS = 5000) - build_path = /obj/item/device/integrated_circuit_printer - sort_string = "WCLAC" - -/datum/design/item/integrated_printer_upgrade_advanced - name = "Integrated Circuit Printer Upgrade Disk" - desc = "This disk allows for integrated circuit printers to print advanced circuitry designs." - id = "icupgradv" - req_tech = list(TECH_MATERIAL = 3, TECH_ENGINEERING = 3) - materials = list(MATERIAL_STEEL = 10000, MATERIAL_GLASS = 10000) - build_path = /obj/item/disk/integrated_circuit/upgrade/advanced - sort_string = "WCLAD" - -/datum/design/item/integrated_printer_upgrade_clone - name = "Integrated Circuit Printer Clone Disk" - desc = "This disk allows for integrated circuit printers to copy and clone designs instantaneously." - id = "icupclo" - req_tech = list(TECH_DATA = 3, TECH_MATERIAL = 5) - materials = list(MATERIAL_STEEL = 10000, MATERIAL_GLASS = 10000) - build_path = /obj/item/disk/integrated_circuit/upgrade/clone - sort_string = "WCLAE" \ No newline at end of file diff --git a/code/modules/research/designs/designs_singletons.dm b/code/modules/research/designs/designs_singletons.dm deleted file mode 100644 index 89569ccf33968..0000000000000 --- a/code/modules/research/designs/designs_singletons.dm +++ /dev/null @@ -1,75 +0,0 @@ -/datum/design/item/encryptionkey/AssembleDesignName() - ..() - name = "Encryption key design ([item_name])" - -/datum/design/item/encryptionkey/binary - name = "binary" - desc = "Allows for deciphering the binary channel on-the-fly." - id = "binaryencrypt" - req_tech = list(TECH_ESOTERIC = 2) - materials = list(MATERIAL_STEEL = 300, MATERIAL_GLASS = 300) - build_path = /obj/item/device/encryptionkey/binary - sort_string = "VASAA" - -/datum/design/item/camouflage/AssembleDesignName() - ..() - name = "Camouflage design ([item_name])" - -/datum/design/item/camouflage/chameleon - name = "holographic equipment kit" - desc = "A kit of dangerous, high-tech equipment with changeable looks." - id = "chameleon" - req_tech = list(TECH_ESOTERIC = 2) - materials = list(MATERIAL_STEEL = 500, MATERIAL_ALUMINIUM = 500, MATERIAL_PLASTIC = 500) - build_path = /obj/item/storage/backpack/chameleon/sydie_kit - sort_string = "VASBA" - -/datum/design/item/weapon/storage/box/freezer - name = "Portable Freezer" - desc = "This nifty shock-resistant device will keep your 'groceries' nice and non-spoiled." - id = "freezer" - req_tech = list(TECH_MATERIAL = 3, TECH_POWER = 2) - materials = list(MATERIAL_PLASTIC = 350) - build_path = /obj/item/storage/box/freezer - -/datum/design/item/advmop - name = "Advanced Mop" - desc = "An upgraded mop with a large internal capacity for holding water or other cleaning chemicals." - id = "advmop" - req_tech = list(TECH_ENGINEERING = 4, TECH_MATERIAL = 4, TECH_POWER = 3) - materials = list(MATERIAL_ALUMINIUM = 2500, MATERIAL_STEEL = 500, MATERIAL_PLASTIC = 200) - build_path = /obj/item/mop/advanced - -/datum/design/blutrash - name = "Trashbag of Holding" - desc = "An advanced trash bag with bluespace properties; capable of holding a plethora of garbage." - id = "blutrash" - req_tech = list(TECH_BLUESPACE = 5, TECH_MATERIAL = 6) - materials = list(MATERIAL_PLASTIC = 5000, MATERIAL_GOLD = 1500, MATERIAL_URANIUM = 250, MATERIAL_PHORON = 1500) - build_path = /obj/item/storage/bag/trash/bluespace - -/datum/design/item/holosign - name = "Holographic Sign Projector" - desc = "A holograpic projector used to project various warning signs." - id = "holosign" - req_tech = list(TECH_ENGINEERING = 5, TECH_BLUESPACE = 4, TECH_POWER = 4) - materials = list(MATERIAL_STEEL = 2000, MATERIAL_GLASS = 1000) - build_path = /obj/item/holosign_creator - -/datum/design/item/party - name = "Uncertified module: PRTY" - desc = "Schematics for a robotic module, scraped from seedy parts of the net. Who knows what it does." - id = "borg_party_module" - req_tech = list(TECH_DATA = 2, TECH_ESOTERIC = 2) - build_type = MECHFAB - materials = list(MATERIAL_STEEL = 7500, MATERIAL_ALUMINIUM = 5000, MATERIAL_DIAMOND = 2000) - build_path = /obj/item/borg/upgrade/uncertified/party - category = "Cyborg Upgrade Modules" - -/datum/design/item/plant_scanner - name = "Plant Analyzer" - desc = "A hand-held botanical scanner used to analyze plants." - id = "plant_scanner" - req_tech = list(TECH_MAGNET = 2, TECH_BIO = 2) - materials = list(MATERIAL_STEEL = 200, MATERIAL_GLASS = 100, MATERIAL_PLASTIC = 150) - build_path = /obj/item/device/scanner/plant diff --git a/code/modules/research/designs/designs_smes_coil.dm b/code/modules/research/designs/designs_smes_coil.dm deleted file mode 100644 index 5463cdc7db860..0000000000000 --- a/code/modules/research/designs/designs_smes_coil.dm +++ /dev/null @@ -1,28 +0,0 @@ -/datum/design/item/smes_coil/AssembleDesignName() - ..() - name = "Superconductive magnetic coil ([item_name])" - -/datum/design/item/smes_coil - desc = "A superconductive magnetic coil used to store power in magnetic fields." - materials = list(MATERIAL_STEEL = 2000, MATERIAL_GLASS = 2000, MATERIAL_GOLD = 1000, MATERIAL_SILVER = 1000, MATERIAL_ALUMINIUM = 500) - -/datum/design/item/smes_coil/standard - name = "standard" - id = "smes_coil_standard" - req_tech = list(TECH_MATERIAL = 7, TECH_POWER = 7, TECH_ENGINEERING = 5) - build_path = /obj/item/stock_parts/smes_coil - sort_string = "VAXAA" - -/datum/design/item/smes_coil/super_capacity - name = "capacitance" - id = "smes_coil_super_capacity" - req_tech = list(TECH_MATERIAL = 7, TECH_POWER = 8, TECH_ENGINEERING = 6) - build_path = /obj/item/stock_parts/smes_coil/super_capacity - sort_string = "VAXAB" - -/datum/design/item/smes_coil/super_io - name = "transmission" - id = "smes_coil_super_io" - req_tech = list(TECH_MATERIAL = 7, TECH_POWER = 8, TECH_ENGINEERING = 6) - build_path = /obj/item/stock_parts/smes_coil/super_io - sort_string = "VAXAC" \ No newline at end of file diff --git a/code/modules/research/designs/designs_stock_part.dm b/code/modules/research/designs/designs_stock_part.dm deleted file mode 100644 index bd6a537e4999e..0000000000000 --- a/code/modules/research/designs/designs_stock_part.dm +++ /dev/null @@ -1,173 +0,0 @@ -/datum/design/item/stock_part - build_type = PROTOLATHE - -/datum/design/item/stock_part/AssembleDesignName() - ..() - name = "Component design ([item_name])" - -/datum/design/item/stock_part/AssembleDesignDesc() - if(!desc) - desc = "A stock part used in the construction of various devices." - -/datum/design/item/stock_part/basic_capacitor - id = "basic_capacitor" - req_tech = list(TECH_POWER = 1) - materials = list(MATERIAL_STEEL = 50, MATERIAL_GLASS = 50) - build_path = /obj/item/stock_parts/capacitor - sort_string = "CAAAA" - -/datum/design/item/stock_part/adv_capacitor - id = "adv_capacitor" - req_tech = list(TECH_POWER = 3) - materials = list(MATERIAL_STEEL = 50, MATERIAL_GLASS = 50) - build_path = /obj/item/stock_parts/capacitor/adv - sort_string = "CAAAB" - -/datum/design/item/stock_part/super_capacitor - id = "super_capacitor" - req_tech = list(TECH_POWER = 5, TECH_MATERIAL = 4) - materials = list(MATERIAL_STEEL = 50, MATERIAL_GLASS = 50, MATERIAL_GOLD = 20) - build_path = /obj/item/stock_parts/capacitor/super - sort_string = "CAAAC" - -/datum/design/item/stock_part/micro_mani - id = "micro_mani" - req_tech = list(TECH_MATERIAL = 1, TECH_DATA = 1) - materials = list(MATERIAL_STEEL = 30) - build_path = /obj/item/stock_parts/manipulator - sort_string = "CAABA" - -/datum/design/item/stock_part/nano_mani - id = "nano_mani" - req_tech = list(TECH_MATERIAL = 3, TECH_DATA = 2) - materials = list(MATERIAL_STEEL = 30) - build_path = /obj/item/stock_parts/manipulator/nano - sort_string = "CAABB" - -/datum/design/item/stock_part/pico_mani - id = "pico_mani" - req_tech = list(TECH_MATERIAL = 5, TECH_DATA = 2) - materials = list(MATERIAL_STEEL = 30) - build_path = /obj/item/stock_parts/manipulator/pico - sort_string = "CAABC" - -/datum/design/item/stock_part/basic_matter_bin - id = "basic_matter_bin" - req_tech = list(TECH_MATERIAL = 1) - materials = list(MATERIAL_STEEL = 80) - build_path = /obj/item/stock_parts/matter_bin - sort_string = "CAACA" - -/datum/design/item/stock_part/adv_matter_bin - id = "adv_matter_bin" - req_tech = list(TECH_MATERIAL = 3) - materials = list(MATERIAL_STEEL = 80) - build_path = /obj/item/stock_parts/matter_bin/adv - sort_string = "CAACB" - -/datum/design/item/stock_part/super_matter_bin - id = "super_matter_bin" - req_tech = list(TECH_MATERIAL = 5) - materials = list(MATERIAL_STEEL = 80) - build_path = /obj/item/stock_parts/matter_bin/super - sort_string = "CAACC" - -/datum/design/item/stock_part/basic_micro_laser - id = "basic_micro_laser" - req_tech = list(TECH_MAGNET = 1) - materials = list(MATERIAL_STEEL = 10, MATERIAL_GLASS = 20) - build_path = /obj/item/stock_parts/micro_laser - sort_string = "CAADA" - -/datum/design/item/stock_part/high_micro_laser - id = "high_micro_laser" - req_tech = list(TECH_MAGNET = 3) - materials = list(MATERIAL_STEEL = 10, MATERIAL_GLASS = 20) - build_path = /obj/item/stock_parts/micro_laser/high - sort_string = "CAADB" - -/datum/design/item/stock_part/ultra_micro_laser - id = "ultra_micro_laser" - req_tech = list(TECH_MAGNET = 5, TECH_MATERIAL = 5) - materials = list(MATERIAL_STEEL = 10, MATERIAL_GLASS = 20, MATERIAL_URANIUM = 10) - build_path = /obj/item/stock_parts/micro_laser/ultra - sort_string = "CAADC" - -/datum/design/item/stock_part/basic_sensor - id = "basic_sensor" - req_tech = list(TECH_MAGNET = 1) - materials = list(MATERIAL_STEEL = 50, MATERIAL_GLASS = 20) - build_path = /obj/item/stock_parts/scanning_module - sort_string = "CAAEA" - -/datum/design/item/stock_part/adv_sensor - id = "adv_sensor" - req_tech = list(TECH_MAGNET = 3) - materials = list(MATERIAL_STEEL = 50, MATERIAL_GLASS = 20) - build_path = /obj/item/stock_parts/scanning_module/adv - sort_string = "CAAEB" - -/datum/design/item/stock_part/phasic_sensor - id = "phasic_sensor" - req_tech = list(TECH_MAGNET = 5, TECH_MATERIAL = 3) - materials = list(MATERIAL_STEEL = 50, MATERIAL_GLASS = 20, MATERIAL_SILVER = 10) - build_path = /obj/item/stock_parts/scanning_module/phasic - sort_string = "CAAEC" - -/datum/design/item/stock_part/RPED - name = "Rapid Part Exchange Device" - desc = "Special mechanical module made to store, sort, and apply standard machine parts." - id = "rped" - req_tech = list(TECH_ENGINEERING = 3, TECH_MATERIAL = 3) - materials = list(MATERIAL_STEEL = 10000, MATERIAL_GLASS = 5000) - build_path = /obj/item/storage/part_replacer - sort_string = "CBAAA" - -/datum/design/item/stock_part/subspace_ansible - id = "s-ansible" - req_tech = list(TECH_DATA = 3, TECH_MAGNET = 4, TECH_MATERIAL = 4, TECH_BLUESPACE = 2) - materials = list(MATERIAL_STEEL = 80, MATERIAL_SILVER = 20) - build_path = /obj/item/stock_parts/subspace/ansible - sort_string = "UAAAA" - -/datum/design/item/stock_part/hyperwave_filter - id = "s-filter" - req_tech = list(TECH_DATA = 3, TECH_MAGNET = 3) - materials = list(MATERIAL_STEEL = 40, MATERIAL_SILVER = 10) - build_path = /obj/item/stock_parts/subspace/filter - sort_string = "UAAAB" - -/datum/design/item/stock_part/subspace_amplifier - id = "s-amplifier" - req_tech = list(TECH_DATA = 3, TECH_MAGNET = 4, TECH_MATERIAL = 4, TECH_BLUESPACE = 2) - materials = list(MATERIAL_STEEL = 10, MATERIAL_GOLD = 30, MATERIAL_URANIUM = 15) - build_path = /obj/item/stock_parts/subspace/amplifier - sort_string = "UAAAC" - -/datum/design/item/stock_part/subspace_treatment - id = "s-treatment" - req_tech = list(TECH_DATA = 3, TECH_MAGNET = 2, TECH_MATERIAL = 4, TECH_BLUESPACE = 2) - materials = list(MATERIAL_STEEL = 10, MATERIAL_SILVER = 20) - build_path = /obj/item/stock_parts/subspace/treatment - sort_string = "UAAAD" - -/datum/design/item/stock_part/subspace_analyzer - id = "s-analyzer" - req_tech = list(TECH_DATA = 3, TECH_MAGNET = 4, TECH_MATERIAL = 4, TECH_BLUESPACE = 2) - materials = list(MATERIAL_STEEL = 10, MATERIAL_GOLD = 15) - build_path = /obj/item/stock_parts/subspace/analyzer - sort_string = "UAAAE" - -/datum/design/item/stock_part/subspace_crystal - id = "s-crystal" - req_tech = list(TECH_MAGNET = 4, TECH_MATERIAL = 4, TECH_BLUESPACE = 2) - materials = list(MATERIAL_GLASS = 1000, MATERIAL_SILVER = 20, MATERIAL_GOLD = 20) - build_path = /obj/item/stock_parts/subspace/crystal - sort_string = "UAAAF" - -/datum/design/item/stock_part/subspace_transmitter - id = "s-transmitter" - req_tech = list(TECH_MAGNET = 5, TECH_MATERIAL = 5, TECH_BLUESPACE = 3) - materials = list(MATERIAL_GLASS = 100, MATERIAL_SILVER = 10, MATERIAL_URANIUM = 15) - build_path = /obj/item/stock_parts/subspace/transmitter - sort_string = "UAAAG" diff --git a/code/modules/research/designs/designs_surgery.dm b/code/modules/research/designs/designs_surgery.dm deleted file mode 100644 index 6d7757858f941..0000000000000 --- a/code/modules/research/designs/designs_surgery.dm +++ /dev/null @@ -1,39 +0,0 @@ -/datum/design/item/surgery/AssembleDesignName() - ..() - name = "Surgical tool design ([item_name])" - -/datum/design/item/surgery/scalpel_laser1 - name = "Basic Laser Scalpel" - desc = "A scalpel augmented with a directed laser, for more precise cutting without blood entering the field. This one looks basic and could be improved." - id = "scalpel_laser1" - req_tech = list(TECH_BIO = 2, TECH_MATERIAL = 2, TECH_MAGNET = 2) - materials = list(MATERIAL_STEEL = 12500, MATERIAL_GLASS = 7500) - build_path = /obj/item/scalpel/laser1 - sort_string = "MBEAA" - -/datum/design/item/surgery/scalpel_laser2 - name = "Improved Laser Scalpel" - desc = "A scalpel augmented with a directed laser, for more precise cutting without blood entering the field. This one looks somewhat advanced." - id = "scalpel_laser2" - req_tech = list(TECH_BIO = 3, TECH_MATERIAL = 4, TECH_MAGNET = 4) - materials = list(MATERIAL_STEEL = 12500, MATERIAL_GLASS = 7500, MATERIAL_SILVER = 2500) - build_path = /obj/item/scalpel/laser2 - sort_string = "MBEAB" - -/datum/design/item/surgery/scalpel_laser3 - name = "Advanced Laser Scalpel" - desc = "A scalpel augmented with a directed laser, for more precise cutting without blood entering the field. This one looks to be the pinnacle of precision energy cutlery!" - id = "scalpel_laser3" - req_tech = list(TECH_BIO = 4, TECH_MATERIAL = 6, TECH_MAGNET = 5) - materials = list(MATERIAL_STEEL = 12500, MATERIAL_GLASS = 7500, MATERIAL_SILVER = 2000, MATERIAL_GOLD = 1500) - build_path = /obj/item/scalpel/laser3 - sort_string = "MBEAC" - -/datum/design/item/surgery/scalpel_manager - name = "Incision Management System" - desc = "A true extension of the surgeon's body, this marvel instantly and completely prepares an incision allowing for the immediate commencement of therapeutic steps." - id = "scalpel_manager" - req_tech = list(TECH_BIO = 4, TECH_MATERIAL = 7, TECH_MAGNET = 5, TECH_DATA = 4) - materials = list (MATERIAL_STEEL = 12500, MATERIAL_GLASS = 7500, MATERIAL_SILVER = 1500, MATERIAL_GOLD = 1500, MATERIAL_DIAMOND = 750) - build_path = /obj/item/scalpel/manager - sort_string = "MBEAD" \ No newline at end of file diff --git a/code/modules/research/designs/designs_synthstorage.dm b/code/modules/research/designs/designs_synthstorage.dm deleted file mode 100644 index 6d70c62a0aba8..0000000000000 --- a/code/modules/research/designs/designs_synthstorage.dm +++ /dev/null @@ -1,31 +0,0 @@ -/datum/design/item/synthstorage/AssembleDesignName() - ..() - name = "Synthetic intelligence storage ([item_name])" - -/datum/design/item/synthstorage/paicard - name = "pAI" - desc = "Personal Artificial Intelligence device." - id = "paicard" - req_tech = list(TECH_DATA = 2) - materials = list(MATERIAL_GLASS = 500, MATERIAL_STEEL = 500) - build_path = /obj/item/device/paicard - sort_string = "VABAI" - -/datum/design/item/synthstorage/intelicard - name = "inteliCard" - desc = "AI preservation and transportation system." - id = "intelicard" - req_tech = list(TECH_DATA = 4, TECH_MATERIAL = 4) - materials = list(MATERIAL_GLASS = 1000, MATERIAL_GOLD = 200) - build_path = /obj/item/aicard - sort_string = "VACAA" - -/datum/design/item/synthstorage/posibrain - name = "Positronic brain" - id = "posibrain" - req_tech = list(TECH_ENGINEERING = 4, TECH_MATERIAL = 6, TECH_BLUESPACE = 2, TECH_DATA = 4) - build_type = PROTOLATHE | MECHFAB - materials = list(MATERIAL_STEEL = 2000, MATERIAL_GLASS = 1000, MATERIAL_SILVER = 1000, MATERIAL_GOLD = 500, MATERIAL_PHORON = 500, MATERIAL_DIAMOND = 100) - build_path = /obj/item/organ/internal/posibrain - category = "Misc" - sort_string = "VACAB" \ No newline at end of file diff --git a/code/modules/research/designs/designs_syringe.dm b/code/modules/research/designs/designs_syringe.dm deleted file mode 100644 index 75bce3f56cdcc..0000000000000 --- a/code/modules/research/designs/designs_syringe.dm +++ /dev/null @@ -1,20 +0,0 @@ -/datum/design/item/syringe/AssembleDesignName() - name = "Syringe prototype ([item_name])" - -/datum/design/item/syringe/noreactsyringe - name = "Cryo Syringe" - desc = "An advanced syringe that stops reagents inside from reacting. It can hold up to 20 units." - id = "noreactsyringe" - req_tech = list(TECH_BIO = 4, TECH_MATERIAL = 4) - materials = list(MATERIAL_GLASS = 2000, MATERIAL_GOLD = 1000, MATERIAL_PLASTIC = 500) - build_path = /obj/item/reagent_containers/syringe/noreact - sort_string = "MCAAC" - -/datum/design/item/syringe/bluespacesyringe - name = "Bluespace Syringe" - desc = "An advanced syringe that can hold 60 units of chemicals." - id = "bluespacesyringe" - req_tech = list(TECH_BIO = 3, TECH_MATERIAL = 4, TECH_BLUESPACE = 2) - materials = list(MATERIAL_GLASS = 2000, MATERIAL_PHORON = 1000, MATERIAL_DIAMOND = 1000) - build_path = /obj/item/reagent_containers/syringe/bluespace - sort_string = "MCAAD" \ No newline at end of file diff --git a/code/modules/research/designs/designs_tool.dm b/code/modules/research/designs/designs_tool.dm deleted file mode 100644 index 9c9368f84161d..0000000000000 --- a/code/modules/research/designs/designs_tool.dm +++ /dev/null @@ -1,102 +0,0 @@ -/datum/design/item/tool/AssembleDesignName() - ..() - name = "Tool design ([item_name])" - -/datum/design/item/tool/light_replacer - name = "light replacer" - desc = "A device to automatically replace lights. Refill with working lightbulbs." - id = "light_replacer" - req_tech = list(TECH_MAGNET = 3, TECH_MATERIAL = 4) - materials = list(MATERIAL_STEEL = 1500, MATERIAL_SILVER = 150, MATERIAL_GLASS = 3000) - build_path = /obj/item/device/lightreplacer - sort_string = "VAGAB" - -/datum/design/item/tool/airlock_brace - name = "airlock brace" - desc = "Special door attachment that can be used to provide extra security." - id = "brace" - req_tech = list(TECH_ENGINEERING = 3, TECH_MATERIAL = 2) - materials = list(MATERIAL_STEEL = 2000, MATERIAL_GLASS = 50) - build_path = /obj/item/airlock_brace - sort_string = "VAGAC" - -/datum/design/item/tool/brace_jack - name = "maintenance jack" - desc = "A special maintenance tool that can be used to remove airlock braces." - id = "bracejack" - req_tech = list(TECH_ENGINEERING = 3, TECH_MATERIAL = 2) - materials = list(MATERIAL_STEEL = 120) - build_path = /obj/item/crowbar/brace_jack - sort_string = "VAGAD" - -/datum/design/item/tool/clamp - name = "stasis clamp" - desc = "A magnetic clamp which can halt the flow of gas in a pipe, via a localised stasis field." - id = "stasis_clamp" - req_tech = list(TECH_ENGINEERING = 4, TECH_MAGNET = 4) - materials = list(MATERIAL_STEEL = 500, MATERIAL_GLASS = 500) - build_path = /obj/item/clamp - sort_string = "VAGAE" - -/datum/design/item/tool/inducer - name = "inducer" - desc = "An electromagnetic inducer that can transfer power from one cell into another." - id = "inducer" - req_tech = list(TECH_POWER = 6, TECH_ENGINEERING = 4) - materials = list(MATERIAL_STEEL = 2000, MATERIAL_GLASS = 100) - build_path = /obj/item/inducer - -/datum/design/item/tool/price_scanner - name = "price scanner" - desc = "Using an up-to-date database of various costs and prices, this device estimates the market price of an item up to 0.001% accuracy." - id = "price_scanner" - req_tech = list(TECH_MATERIAL = 6, TECH_MAGNET = 4) - materials = list(MATERIAL_STEEL = 3000, MATERIAL_GLASS = 3000, MATERIAL_SILVER = 250) - build_path = /obj/item/device/scanner/price - sort_string = "VAGAF" - -/datum/design/item/tool/experimental_welder - name = "experimental welding tool" - desc = "This welding tool feels heavier in your possession than is normal. There appears to be no external fuel port." - id = "experimental_welder" - req_tech = list(TECH_ENGINEERING = 5, TECH_PHORON = 4) - materials = list(MATERIAL_STEEL = 120, MATERIAL_GLASS = 50) - build_path = /obj/item/weldingtool/experimental - sort_string = "VAGAG" - -/datum/design/item/tool/shield_diffuser - name = "portable shield diffuser" - desc = "A small handheld device designed to disrupt energy barriers." - id = "portable_shield_diffuser" - req_tech = list(TECH_MAGNET = 5, TECH_POWER = 5, TECH_ESOTERIC = 2) - materials = list(MATERIAL_STEEL = 5000, MATERIAL_GLASS = 5000, MATERIAL_GOLD = 2000, MATERIAL_SILVER = 2000) - build_path = /obj/item/shield_diffuser - sort_string = "VAGAH" - -/datum/design/item/tool/rpd - name = "rapid piping device" - desc = "A compacted and complicated device, that relies on compressed matter to dispense piping on the move." - id = "rpd" - req_tech = list(TECH_ENGINEERING = 6, TECH_MATERIAL = 6) - materials = list(MATERIAL_STEEL = 15000, MATERIAL_GLASS = 10000, MATERIAL_SILVER = 2000) - build_path = /obj/item/rpd - sort_string = "VAGAI" - -/datum/design/item/tool/oxycandle - name = "oxycandle" - desc = "a device which, via a chemical reaction, can pressurise small areas." - id="oxycandle" - req_tech = list(TECH_ENGINEERING = 2) - materials = list(MATERIAL_STEEL = 3000) - chemicals = list(/datum/reagent/sodiumchloride = 20, /datum/reagent/acetone = 20) - build_path = /obj/item/device/oxycandle - sort_string = "VAGAJ" - -/datum/design/item/tool/arc_welder - name = "arc welding tool" - desc = "a portable welder that uses an internal powercell instead of welding fuel." - id = "arc_welder" - req_tech = list(TECH_ENGINEERING = 3, TECH_POWER = 4) - materials = list(MATERIAL_STEEL = 6000, MATERIAL_GLASS = 6000, MATERIAL_ALUMINIUM = 4000, MATERIAL_PHORON = 4000) - build_path = /obj/item/weldingtool/electric - sort_string = "VAGAK" diff --git a/code/modules/research/designs/designs_weapon.dm b/code/modules/research/designs/designs_weapon.dm deleted file mode 100644 index 8190cef2ac784..0000000000000 --- a/code/modules/research/designs/designs_weapon.dm +++ /dev/null @@ -1,227 +0,0 @@ -/datum/design/item/weapon/AssembleDesignName() - ..() - name = "Weapon prototype ([item_name])" - -/datum/design/item/weapon/AssembleDesignDesc() - if(!desc) - if(build_path) - var/obj/item/I = build_path - desc = initial(I.desc) - ..() - -/datum/design/item/weapon/chemsprayer - desc = "An advanced chem spraying device." - id = "chemsprayer" - req_tech = list(TECH_MATERIAL = 3, TECH_ENGINEERING = 3, TECH_BIO = 2) - materials = list(MATERIAL_STEEL = 5000, MATERIAL_GLASS = 1000) - build_path = /obj/item/reagent_containers/spray/chemsprayer - sort_string = "TAAAA" - -/datum/design/item/weapon/rapidsyringe - id = "rapidsyringe" - req_tech = list(TECH_COMBAT = 3, TECH_MATERIAL = 3, TECH_ENGINEERING = 3, TECH_BIO = 2) - materials = list(MATERIAL_STEEL = 5000, MATERIAL_GLASS = 1000) - build_path = /obj/item/gun/launcher/syringe/rapid - sort_string = "TAAAB" - -/datum/design/item/weapon/large_grenade - id = "large_Grenade" - req_tech = list(TECH_COMBAT = 3, TECH_MATERIAL = 2) - materials = list(MATERIAL_STEEL = 3000) - build_path = /obj/item/grenade/chem_grenade/large - sort_string = "TABAA" - -/datum/design/item/weapon/anti_photon - id = "anti_photon" - req_tech = list(TECH_BLUESPACE = 4, TECH_MATERIAL = 4) - materials = list(MATERIAL_STEEL = 3000, MATERIAL_GLASS = 1000, MATERIAL_DIAMOND = 1000) - build_path = /obj/item/grenade/anti_photon - sort_string = "TABAB" - -/datum/design/item/weapon/flora_gun - id = "flora_gun" - req_tech = list(TECH_MATERIAL = 2, TECH_BIO = 3, TECH_POWER = 3) - materials = list(MATERIAL_STEEL = 2000, MATERIAL_GLASS = 500, MATERIAL_URANIUM = 500) - build_path = /obj/item/gun/energy/floragun - sort_string = "TACAA" - -/datum/design/item/weapon/advancedflash - id = "advancedflash" - req_tech = list(TECH_COMBAT = 2, TECH_MAGNET = 2) - materials = list(MATERIAL_STEEL = 2000, MATERIAL_GLASS = 2000, MATERIAL_SILVER = 500) - build_path = /obj/item/device/flash/advanced - sort_string = "TADAA" - -/datum/design/item/weapon/stunrevolver - id = "stunrevolver" - req_tech = list(TECH_COMBAT = 3, TECH_MATERIAL = 3, TECH_POWER = 2) - materials = list(MATERIAL_STEEL = 4000) - build_path = /obj/item/gun/energy/stunrevolver - sort_string = "TADAB" - -/datum/design/item/weapon/stunrifle - id = "stun_rifle" - req_tech = list(TECH_COMBAT = 4, TECH_MATERIAL = 3, TECH_POWER = 3) - materials = list(MATERIAL_STEEL = 4000, MATERIAL_GLASS = 1000, MATERIAL_SILVER = 500) - build_path = /obj/item/gun/energy/stunrevolver/rifle - sort_string = "TADAC" - -/datum/design/item/weapon/confuseray - id = "confuseray" - req_tech = list(TECH_COMBAT = 3, TECH_MATERIAL = 3, TECH_POWER = 3) - materials = list(MATERIAL_STEEL = 3000, MATERIAL_GLASS = 1000) - build_path = /obj/item/gun/energy/confuseray - sort_string = "TADAD" - -/datum/design/item/weapon/lasercannon - desc = "The lasing medium of this prototype is enclosed in a tube lined with uranium-235 and subjected to high neutron flux in a nuclear reactor core." - id = "lasercannon" - req_tech = list(TECH_COMBAT = 4, TECH_MATERIAL = 3, TECH_POWER = 3) - materials = list(MATERIAL_STEEL = 10000, MATERIAL_GLASS = 1000, MATERIAL_DIAMOND = 2000) - build_path = /obj/item/gun/energy/lasercannon - sort_string = "TAEAB" - -/datum/design/item/weapon/xraypistol - id = "xraypistol" - req_tech = list(TECH_COMBAT = 4, TECH_MATERIAL = 3, TECH_MAGNET = 2, TECH_ESOTERIC = 2) - materials = list(MATERIAL_STEEL = 4000, MATERIAL_GLASS = 500, MATERIAL_URANIUM = 500) - build_path = /obj/item/gun/energy/xray/pistol - sort_string = "TAFAA" - -/datum/design/item/weapon/xrayrifle - id = "xrayrifle" - req_tech = list(TECH_COMBAT = 5, TECH_MATERIAL = 3, TECH_MAGNET = 2, TECH_ESOTERIC = 2) - materials = list(MATERIAL_STEEL = 5000, MATERIAL_GLASS = 1000, MATERIAL_URANIUM = 1000) - build_path = /obj/item/gun/energy/xray - sort_string = "TAFAB" - -/datum/design/item/weapon/grenadelauncher - id = "grenadelauncher" - req_tech = list(TECH_COMBAT = 3, TECH_MATERIAL = 3) - materials = list(MATERIAL_STEEL = 5000, MATERIAL_GLASS = 1000) - build_path = /obj/item/gun/launcher/grenade - sort_string = "TAGAA" - -/datum/design/item/weapon/flechette - id = "flechette" - req_tech = list(TECH_COMBAT = 8, TECH_MATERIAL = 4, TECH_MAGNET = 4) - materials = list(MATERIAL_STEEL = 8000, MATERIAL_GOLD = 4000, MATERIAL_SILVER = 4000, MATERIAL_DIAMOND = 2000) - build_path = /obj/item/gun/magnetic/railgun/flechette - sort_string = "TAHAA" - -/datum/design/item/weapon/phoronpistol - id = "ppistol" - req_tech = list(TECH_COMBAT = 5, TECH_PHORON = 4) - materials = list(MATERIAL_STEEL = 5000, MATERIAL_GLASS = 1000, MATERIAL_PHORON = 3000) - build_path = /obj/item/gun/energy/toxgun - sort_string = "TAJAA" - -/datum/design/item/weapon/decloner - id = "decloner" - req_tech = list(TECH_COMBAT = 8, TECH_MATERIAL = 7, TECH_BIO = 5, TECH_POWER = 6) - materials = list(MATERIAL_GOLD = 5000,MATERIAL_URANIUM = 10000) - chemicals = list(/datum/reagent/mutagen = 40) - build_path = /obj/item/gun/energy/decloner - sort_string = "TAJAB" - -/datum/design/item/weapon/wt550 - id = "wt550" - req_tech = list(TECH_COMBAT = 5, TECH_MATERIAL = 2) - materials = list(MATERIAL_STEEL = 8000, MATERIAL_SILVER = 3000, MATERIAL_DIAMOND = 1500) - build_path = /obj/item/gun/projectile/automatic/sec_smg - sort_string = "TAPAA" - -/datum/design/item/weapon/smg - id = "smg" - req_tech = list(TECH_COMBAT = 6, TECH_MATERIAL = 4) - materials = list(MATERIAL_STEEL = 8000, MATERIAL_SILVER = 2000, MATERIAL_DIAMOND = 2000) - build_path = /obj/item/gun/projectile/automatic - sort_string = "TAPAB" - -/datum/design/item/weapon/bullpup - id = "bullpup" - req_tech = list(TECH_COMBAT = 7, TECH_MATERIAL = 3) - materials = list(MATERIAL_STEEL = 10000, MATERIAL_SILVER = 5000, MATERIAL_DIAMOND = 3000) - build_path = /obj/item/gun/projectile/automatic/bullpup_rifle - sort_string = "TAPAC" - -/datum/design/item/weapon/ammunition/AssembleDesignName() - ..() - name = "Ammunition prototype ([item_name])" - -/datum/design/item/weapon/ammunition/ammo_small - id = "ammo_small" - desc = "A box of small pistol rounds." - req_tech = list(TECH_COMBAT = 4, TECH_MATERIAL = 3) - materials = list(MATERIAL_STEEL = 3750, MATERIAL_SILVER = 100) - build_path = /obj/item/ammo_magazine/box/smallpistol - sort_string = "TBAAA" - -/datum/design/item/weapon/ammunition/ammo_flechette - id = "ammo_flechette" - desc = "A high capacity magazine of armor piercing flechette." - req_tech = list(TECH_COMBAT = 5, TECH_MATERIAL = 4) - materials = list(MATERIAL_STEEL = 2000, MATERIAL_SILVER = 500, MATERIAL_DIAMOND = 200) - build_path = /obj/item/ammo_magazine/proto_smg - sort_string = "TBAAB" - -/datum/design/item/weapon/ammunition/stunshell - desc = "A stunning shell for a shotgun." - id = "stunshell" - req_tech = list(TECH_COMBAT = 3, TECH_MATERIAL = 3) - materials = list(MATERIAL_STEEL = 4000) - build_path = /obj/item/ammo_casing/shotgun/stunshell - sort_string = "TBAAC" - -/datum/design/item/weapon/ammunition/ammo_emp_small - name = "haywire 7mm" - id = "ammo_emp_small" - desc = "A box of small pistol rounds with integrated EMP charges." - materials = list(MATERIAL_STEEL = 2500, MATERIAL_URANIUM = 750) - req_tech = list(TECH_COMBAT = 3, TECH_MATERIAL = 3) - build_path = /obj/item/ammo_magazine/box/emp/smallpistol - sort_string = "TBAAD" - -/datum/design/item/weapon/ammunition/ammo_emp_pistol - name = "haywire 10mm" - id = "ammo_emp_pistol" - desc = "A box of pistol rounds fitted with integrated EMP charges." - materials = list(MATERIAL_STEEL = 2500, MATERIAL_URANIUM = 750) - req_tech = list(TECH_COMBAT = 3, TECH_MATERIAL = 3) - build_path = /obj/item/ammo_magazine/box/emp/pistol - sort_string = "TBAAF" - -/datum/design/item/weapon/ammunition/ammo_emp_slug - id = "ammo_emp_slug" - desc = "A shotgun slug with an integrated EMP charge." - materials = list(MATERIAL_STEEL = 3000, MATERIAL_URANIUM = 1000) - req_tech = list(TECH_COMBAT = 4, TECH_MATERIAL = 3) - build_path = /obj/item/ammo_casing/shotgun/emp - sort_string = "TBAAG" - -/datum/design/item/melee/energy/minuano - name = "high frequency katana" - id = "high_frequency_katana" - desc = "light like wind minuano." - materials = list(MATERIAL_STEEL = 9000,MATERIAL_GLASS = 3000, MATERIAL_GOLD = 3000, MATERIAL_URANIUM = 1000) - req_tech = list(TECH_COMBAT = 8, TECH_MATERIAL = 6, TECH_ENERGY = 6) - build_path = /obj/item/melee/energy/minuano - sort_string = "TBAAG" - -/datum/design/item/melee/energy/machete/sundowner - name = "high frequency machete" - id = "high_frequency_machete" - desc = "Absolute power of war criminal." - materials = list(MATERIAL_STEEL = 5000, MATERIAL_GLASS = 3000, MATERIAL_URANIUM = 750) - req_tech = list(TECH_COMBAT = 6, TECH_MATERIAL = 4, TECH_ENERGY = 4) - build_path = /obj/item/melee/energy/machete/sundowner - sort_string = "TBAAH" - -/datum/design/item/melee/sword/raiden - name = "high frequency sword" - id = "high_frequency_sword" - desc = "standart high frequency sword feels like tool of justice." - materials = list(MATERIAL_STEEL = 2500, MATERIAL_GLASS = 3000, MATERIAL_URANIUM = 750) - req_tech = list(TECH_COMBAT = 6, TECH_MATERIAL = 6) - build_path = /obj/item/melee/sword/raiden - sort_string = "TBAAI" diff --git a/code/modules/research/destructive_analyzer.dm b/code/modules/research/destructive_analyzer.dm deleted file mode 100644 index 19570e154f8a3..0000000000000 --- a/code/modules/research/destructive_analyzer.dm +++ /dev/null @@ -1,92 +0,0 @@ -/* -Destructive Analyzer - -It is used to destroy hand-held objects and advance technological research. Controls are in the linked R&D console. - -Note: Must be placed within 3 tiles of the R&D Console -*/ - -/obj/machinery/r_n_d/destructive_analyzer - name = "destructive analyzer" - desc = "Accessed by a connected core fabricator console, it destroys and analyzes items and materials, recycling materials to any connected protolathe, and progressing the learning matrix of the connected core fabricator console." - icon_state = "d_analyzer" - var/obj/item/loaded_item = null - var/decon_mod = 0 - - idle_power_usage = 30 - active_power_usage = 2500 - construct_state = /decl/machine_construction/default/panel_closed - - machine_name = "destructive analyzer" - machine_desc = "Breaks down objects into their component parts, gaining new information in the process. Part of an R&D network." - -/obj/machinery/r_n_d/destructive_analyzer/RefreshParts() - var/T = 0 - for(var/obj/item/stock_parts/S in src) - T += S.rating - decon_mod = min(T * 0.1, 3) - ..() - -/obj/machinery/r_n_d/destructive_analyzer/on_update_icon() - if(panel_open) - icon_state = "d_analyzer_t" - else if(loaded_item) - icon_state = "d_analyzer_l" - else - icon_state = "d_analyzer" - -/obj/machinery/r_n_d/destructive_analyzer/state_transition(var/decl/machine_construction/default/new_state) - . = ..() - if(istype(new_state) && linked_console) - linked_console.linked_destroy = null - linked_console = null - -/obj/machinery/r_n_d/destructive_analyzer/components_are_accessible(path) - return !busy && ..() - -/obj/machinery/r_n_d/destructive_analyzer/cannot_transition_to(state_path) - if(busy) - return SPAN_NOTICE("\The [src] is busy. Please wait for completion of previous operation.") - if(loaded_item) - return SPAN_NOTICE("There is something already loaded into \the [src]. You must remove it first.") - return ..() - -/obj/machinery/r_n_d/destructive_analyzer/attackby(var/obj/item/O as obj, var/mob/user as mob) - if(busy) - to_chat(user, "\The [src] is busy right now.") - return - if(component_attackby(O, user)) - return TRUE - if(loaded_item) - to_chat(user, "There is something already loaded into \the [src].") - return 1 - if(panel_open) - to_chat(user, "You can't load \the [src] while it's opened.") - return 1 - if(!linked_console) - to_chat(user, "\The [src] must be linked to an R&D console first.") - return - if(!loaded_item) - if(isrobot(user)) //Don't put your module items in there! - return - if(!O.origin_tech) - to_chat(user, "This doesn't seem to have a tech origin.") - return - if(O.origin_tech.len == 0 || O.holographic) - to_chat(user, "You cannot deconstruct this item.") - return - if(!user.unEquip(O, src)) - return - busy = 1 - loaded_item = O - to_chat(user, "You add \the [O] to \the [src].") - flick("d_analyzer_la", src) - spawn(10) - update_icon() - busy = 0 - - if (linked_console.quick_deconstruct) - linked_console.deconstruct(weakref(user)) - - return 1 - return diff --git a/code/modules/research/message_server.dm b/code/modules/research/message_server.dm deleted file mode 100644 index 7f2aa33f7beb8..0000000000000 --- a/code/modules/research/message_server.dm +++ /dev/null @@ -1,155 +0,0 @@ -#define MESSAGE_SERVER_SPAM_REJECT 1 -#define MESSAGE_SERVER_DEFAULT_SPAM_LIMIT 10 - -var/global/list/obj/machinery/message_server/message_servers = list() - -/datum/data_rc_msg - var/rec_dpt = "Unspecified" //name of the person - var/send_dpt = "Unspecified" //name of the sender - var/message = "Blank" //transferred message - var/stamp = "Unstamped" - var/id_auth = "Unauthenticated" - var/priority = "Normal" - -/datum/data_rc_msg/New(var/param_rec = "",var/param_sender = "",var/param_message = "",var/param_stamp = "",var/param_id_auth = "",var/param_priority) - if(param_rec) - rec_dpt = param_rec - if(param_sender) - send_dpt = param_sender - if(param_message) - message = param_message - if(param_stamp) - stamp = param_stamp - if(param_id_auth) - id_auth = param_id_auth - if(param_priority) - switch(param_priority) - if(1) - priority = "Normal" - if(2) - priority = "High" - if(3) - priority = "Extreme" - else - priority = "Undetermined" - -/obj/machinery/message_server - icon = 'icons/obj/machines/research.dmi' - icon_state = "server" - name = "Messaging Server" - density = TRUE - anchored = TRUE - idle_power_usage = 10 - active_power_usage = 100 - - var/list/datum/data_rc_msg/rc_msgs = list() - var/active = 1 - var/power_failure = 0 // Reboot timer after power outage - var/decryptkey = "password" - - //Spam filtering stuff - var/list/spamfilter = list("You have won", "your prize", "male enhancement", "shitcurity", \ - "are happy to inform you", "account number", "enter your PIN") - //Messages having theese tokens will be rejected by server. Case sensitive - var/spamfilter_limit = MESSAGE_SERVER_DEFAULT_SPAM_LIMIT //Maximal amount of tokens - -/obj/machinery/message_server/New() - message_servers += src - decryptkey = GenerateKey() - ..() - -/obj/machinery/message_server/Destroy() - message_servers -= src - return ..() - -/obj/machinery/message_server/Process() - ..() - if(active && (stat & (BROKEN|NOPOWER))) - active = 0 - power_failure = 10 - update_icon() - return - else if(stat & (BROKEN|NOPOWER)) - return - else if(power_failure > 0) - if(!(--power_failure)) - active = 1 - update_icon() - -/obj/machinery/message_server/proc/send_rc_message(var/recipient = "",var/sender = "",var/message = "",var/stamp = "", var/id_auth = "", var/priority = 1) - rc_msgs += new/datum/data_rc_msg(recipient,sender,message,stamp,id_auth) - var/authmsg = "[message]
              " - if (id_auth) - authmsg += "[id_auth]
              " - if (stamp) - authmsg += "[stamp]
              " - . = FALSE - var/list/good_z = GetConnectedZlevels(z) - for (var/obj/machinery/requests_console/Console in allConsoles) - if(!(Console.z in good_z)) - continue - if (ckey(Console.department) == ckey(recipient)) - if(Console.inoperable()) - Console.message_log += "Message lost due to console failure.
              Please contact [station_name()] system administrator or AI for technical assistance.
              " - continue - . = TRUE - if(Console.newmessagepriority < priority) - Console.newmessagepriority = priority - Console.icon_state = "req_comp[priority]" - if(priority > 1) - playsound(Console.loc, 'sound/machines/chime.ogg', 80, 1) - Console.audible_message("[icon2html(Console, viewers(get_turf(Console)))]\The [Console] announces: 'High priority message received from [sender]!'", hearing_distance = 8) - Console.message_log += "High Priority message from [sender]
              [authmsg]" - else - if(!Console.silent) - playsound(Console.loc, 'sound/machines/twobeep.ogg', 50, 1) - Console.audible_message("[icon2html(Console, viewers(get_turf(Console)))]\The [Console] announces: 'Message received from [sender].'", hearing_distance = 5) - Console.message_log += "Message from [sender]
              [authmsg]" - Console.set_light(0.3, 0.1, 2) - - -/obj/machinery/message_server/interface_interact(mob/user) - if(!CanInteract(user, DefaultTopicState())) - return FALSE - to_chat(user, "You toggle PDA message passing from [active ? "On" : "Off"] to [active ? "Off" : "On"]") - active = !active - power_failure = 0 - update_icon() - return TRUE - -/obj/machinery/message_server/attackby(obj/item/O as obj, mob/living/user as mob) - if (active && !(stat & (BROKEN|NOPOWER)) && (spamfilter_limit < MESSAGE_SERVER_DEFAULT_SPAM_LIMIT*2) && \ - istype(O,/obj/item/stock_parts/circuitboard/message_monitor)) - spamfilter_limit += round(MESSAGE_SERVER_DEFAULT_SPAM_LIMIT / 2) - qdel(O) - to_chat(user, "You install additional memory and processors into message server. Its filtering capabilities been enhanced.") - else - ..(O, user) - -/obj/machinery/message_server/on_update_icon() - if((stat & (BROKEN|NOPOWER))) - icon_state = "server-nopower" - else if (!active) - icon_state = "server-off" - else - icon_state = "server-on" - - return - -/obj/machinery/message_server/proc/send_to_department(var/department, var/message, var/tone) - var/reached = 0 - - for(var/mob/living/carbon/human/H in GLOB.human_mob_list) - var/obj/item/modular_computer/device = locate() in H - if(!device || !(get_z(device) in GLOB.using_map.station_levels)) - continue - - var/datum/job/J = SSjobs.get_by_title(H.get_authentification_rank()) - if(!J) - continue - - if(J.department_flag & department) - to_chat(H, "Your [device.name] alerts you to the fact that somebody is requesting your presence at your department.") - reached++ - - return reached diff --git a/code/modules/research/part_replacer.dm b/code/modules/research/part_replacer.dm deleted file mode 100644 index 03986c73295b2..0000000000000 --- a/code/modules/research/part_replacer.dm +++ /dev/null @@ -1,22 +0,0 @@ -/obj/item/storage/part_replacer - name = "rapid part exchange device" - desc = "Special mechanical module made to store, sort, and apply standard machine parts." - icon_state = "RPED" - item_state = "RPED" - w_class = ITEM_SIZE_HUGE - can_hold = list(/obj/item/stock_parts) - storage_slots = 50 - use_to_pickup = 1 - allow_quick_gather = 1 - allow_quick_empty = 1 - collection_mode = 1 - max_w_class = ITEM_SIZE_NORMAL - max_storage_space = 100 - origin_tech = list(TECH_ENGINEERING = 4, TECH_MATERIAL = 3) - -/obj/item/research - name = "research debugging device" - desc = "Instant research tool. For testing purposes only." - icon = 'icons/obj/stock_parts.dmi' - icon_state = "smes_coil" - origin_tech = list(TECH_MATERIAL = 19, TECH_ENGINEERING = 19, TECH_PHORON = 19, TECH_POWER = 19, TECH_BLUESPACE = 19, TECH_BIO = 19, TECH_COMBAT = 19, TECH_MAGNET = 19, TECH_DATA = 19, TECH_ESOTERIC = 19) diff --git a/code/modules/research/protolathe.dm b/code/modules/research/protolathe.dm deleted file mode 100644 index 702f2df877e38..0000000000000 --- a/code/modules/research/protolathe.dm +++ /dev/null @@ -1,173 +0,0 @@ -/obj/machinery/r_n_d/protolathe - name = "protolathe" - desc = "Accessed by a connected core fabricator console, it produces items from various materials." - icon_state = "protolathe" - atom_flags = ATOM_FLAG_NO_TEMP_CHANGE | ATOM_FLAG_OPEN_CONTAINER - - idle_power_usage = 30 - active_power_usage = 5000 - base_type = /obj/machinery/r_n_d/protolathe - construct_state = /decl/machine_construction/default/panel_closed - - machine_name = "protolathe" - machine_desc = "Uses raw materials to produce prototypes. Part of an R&D network." - - var/max_material_storage = 250000 - - var/list/datum/design/queue = list() - var/progress = 0 - - var/mat_efficiency = 1 - var/speed = 1 - -/obj/machinery/r_n_d/protolathe/New() - materials = default_material_composition.Copy() - ..() - -/obj/machinery/r_n_d/protolathe/Process() - ..() - if(stat & (BROKEN | NOPOWER)) - update_icon() - return - if(queue.len == 0) - busy = 0 - update_icon() - return - var/datum/design/D = queue[1] - if(canBuild(D)) - busy = 1 - progress += speed - if(progress >= D.time) - build(D) - progress = 0 - removeFromQueue(1) - if(linked_console) - linked_console.updateUsrDialog() - update_icon() - else - if(busy) - visible_message("[icon2html(src, viewers(get_turf(src)))] [src] flashes: insufficient materials: [getLackingMaterials(D)].") - busy = 0 - update_icon() - -/obj/machinery/r_n_d/protolathe/RefreshParts() - var/T = 0 - var/obj/item/stock_parts/building_material/mat = get_component_of_type(/obj/item/stock_parts/building_material) - if(mat) - for(var/obj/item/reagent_containers/glass/G in mat.materials) - T += G.volume - if(!reagents) - create_reagents(T) - else - reagents.maximum_volume = T - - max_material_storage = 75000 * clamp(total_component_rating_of_type(/obj/item/stock_parts/matter_bin), 0, 10) - - T = clamp(total_component_rating_of_type(/obj/item/stock_parts/manipulator), 0, 6) - mat_efficiency = 1 - (T - 2) / 8 - speed = T / 2 - ..() - - -/obj/machinery/r_n_d/protolathe/on_update_icon() - if(panel_open) - icon_state = "protolathe_t" - else if(busy) - icon_state = "protolathe_n" - else - icon_state = "protolathe" - -/obj/machinery/r_n_d/protolathe/state_transition(var/decl/machine_construction/default/new_state) - . = ..() - if(istype(new_state) && linked_console) - linked_console.linked_lathe = null - linked_console = null - -/obj/machinery/r_n_d/protolathe/components_are_accessible(path) - return !busy && ..() - -/obj/machinery/r_n_d/protolathe/cannot_transition_to(state_path) - if(busy) - return SPAN_NOTICE("\The [src] is busy. Please wait for completion of previous operation.") - return ..() - -/obj/machinery/r_n_d/protolathe/attackby(var/obj/item/O as obj, var/mob/user as mob) - if(busy) - to_chat(user, "\The [src] is busy. Please wait for completion of previous operation.") - return 1 - if(component_attackby(O, user)) - return TRUE - if(O.is_open_container()) - return 1 - if(panel_open) - to_chat(user, "You can't load \the [src] while it's opened.") - return 1 - if(!linked_console) - to_chat(user, "\The [src] must be linked to an R&D console first!") - return 1 - if(is_robot_module(O)) - return 0 - if(!istype(O, /obj/item/stack/material)) - to_chat(user, "You cannot insert this item into \the [src]!") - return 0 - if(stat & (BROKEN | NOPOWER)) - return 1 - - if(TotalMaterials() + SHEET_MATERIAL_AMOUNT > max_material_storage) - to_chat(user, "\The [src]'s material bin is full. Please remove material before adding more.") - return 1 - - var/obj/item/stack/material/stack = O - - var/amount = min(stack.get_amount(), round((max_material_storage - TotalMaterials()) / SHEET_MATERIAL_AMOUNT)) - - var/image/I = image(icon, "protolathe_stack") - I.color = stack.material.icon_colour - overlays += I - spawn(10) - overlays -= I - - busy = 1 - use_power_oneoff(max(1000, (SHEET_MATERIAL_AMOUNT * amount / 10))) - if(do_after(user, 1.6 SECONDS, src, DO_PUBLIC_UNIQUE)) - if(stack.use(amount)) - to_chat(user, "You add [amount] sheet\s to \the [src].") - materials[stack.material.name] += amount * SHEET_MATERIAL_AMOUNT - busy = 0 - updateUsrDialog() - -/obj/machinery/r_n_d/protolathe/proc/addToQueue(var/datum/design/D) - queue += D - return - -/obj/machinery/r_n_d/protolathe/proc/removeFromQueue(var/index) - if(!is_valid_index(index, queue)) - return - queue.Cut(index, index + 1) - -/obj/machinery/r_n_d/protolathe/proc/canBuild(var/datum/design/D) - for(var/M in D.materials) - if(materials[M] < D.materials[M]) - return 0 - for(var/C in D.chemicals) - if(!reagents.has_reagent(C, D.chemicals[C])) - return 0 - return 1 - -/obj/machinery/r_n_d/protolathe/proc/build(var/datum/design/D) - var/power = active_power_usage - for(var/M in D.materials) - power += round(D.materials[M] / 5) - power = max(active_power_usage, power) - use_power_oneoff(power) - for(var/M in D.materials) - materials[M] = max(0, materials[M] - D.materials[M] * mat_efficiency) - for(var/C in D.chemicals) - reagents.remove_reagent(C, D.chemicals[C] * mat_efficiency) - - if(D.build_path) - var/obj/new_item = D.Fabricate(loc, src) - if(mat_efficiency != 1) // No matter out of nowhere - if(new_item.matter && new_item.matter.len > 0) - for(var/i in new_item.matter) - new_item.matter[i] = new_item.matter[i] * mat_efficiency diff --git a/code/modules/research/rd-readme.dm b/code/modules/research/rd-readme.dm deleted file mode 100644 index 4d64a6bf82f13..0000000000000 --- a/code/modules/research/rd-readme.dm +++ /dev/null @@ -1,32 +0,0 @@ -/* -Research and Development System. (Designed specifically for the /tg/station 13 (Space Station 13) open source project) - -///////////////Overview/////////////////// -This system is a "tech tree" research and development system designed for SS13. It allows a "researcher" job (this document assumes -the "scientist" job is given this role) the tools necessary to research new and better technologies. In general, the system works -by breaking existing technology and using what you learn from to advance your knowledge of SCIENCE! As your knowledge progresses, -you can build newer (and better?) devices (which you can also, eventually, deconstruct to advance your knowledge). - -A brief overview is below. For more details, see the related files. - -////////////Game Use///////////// -The major research and development is performed using a combination of four machines: -- R&D Console: A computer console that allows you to manipulate the other devices that are linked to it and view/manipulate the -technologies you have researched so far. -- Protolathe: Used to make new hand-held devices and parts for larger devices. All metals and reagents as raw materials. -- Destructive Analyzer: You can put hand-held objects into it and it'll analyze them for technological advancements but it destroys -them in the process. Destroyed items will send their raw materials to a linked Protolathe (if any) -- Circuit Imprinter: Similar to the Protolathe, it allows for the construction of circuit boards. Uses glass and acid as the raw -materials. - -While researching you are dealing with two different types of information: Technology Paths and Device Designs. Technology Paths -are the "Tech Trees" of the game. You start out with a number of them at the game start and they are improved by using the -Destructive Analyzer. By themselves, they don't do a whole lot. However, they unlock Device Designs. This is the information used -by the circuit imprinter and the protolathe to produce objects. It also tracks the current reliability of that particular design. - -//EXISTING TECH -Each tech path should have at LEAST one item at every level (levels 1 - 20). This is to allow for a more fluid progression of the -researching. Existing tech (ie, anything you can find on the station or get from the quartermaster) shouldn't go higher then -level 5 or 7. Everything past that should be stuff you research. - -*/ \ No newline at end of file diff --git a/code/modules/research/rdconsole.dm b/code/modules/research/rdconsole.dm deleted file mode 100644 index b568ea37b81e7..0000000000000 --- a/code/modules/research/rdconsole.dm +++ /dev/null @@ -1,1001 +0,0 @@ -#define CHECK_LATHE \ - if(!linked_lathe){\ - screen = 1;\ - return};\ - if(!linked_lathe.reagents){\ - crash_with("An rdconsole's linked lathe's reagents holder was deleted.");\ - screen = 1;\ - return} -#define CHECK_IMPRINTER \ - if(!linked_imprinter){\ - screen = 1;\ - return} -#define CHECK_DESTROY \ - if(!linked_destroy){\ - screen = 1;\ - return} -/* -Research and Development (R&D) Console - -This is the main work horse of the R&D system. It contains the menus/controls for the Destructive Analyzer, Protolathe, and Circuit -imprinter. It also contains the /datum/research holder with all the known/possible technology paths and device designs. - -Basic use: When it first is created, it will attempt to link up to related devices within 3 squares. It'll only link up if they -aren't already linked to another console. Any consoles it cannot link up with (either because all of a certain type are already -linked or there aren't any in range), you'll just not have access to that menu. In the settings menu, there are menu options that -allow a player to attempt to re-sync with nearby consoles. You can also force it to disconnect from a specific console. - -The imprinting and construction menus do NOT require toxins access to access but all the other menus do. However, if you leave it -on a menu, nothing is to stop the person from using the options on that menu (although they won't be able to change to a different -one). You can also lock the console on the settings menu if you're feeling paranoid and you don't want anyone messing with it who -doesn't have toxins access. - -When a R&D console is destroyed or even partially disassembled, you lose all research data on it. However, there are two ways around -this dire fate: -- The easiest way is to go to the settings menu and select "Sync Database with Network." That causes it to upload (but not download) -it's data to every other device in the game. Each console has a "disconnect from network" option that'll will cause data base sync -operations to skip that console. This is useful if you want to make a "public" R&D console or, for example, give the engineers -a circuit imprinter with certain designs on it and don't want it accidentally updating. The downside of this method is that you have -to have physical access to the other console to send data back. Note: An R&D console is on CentCom so if a random griffan happens to -cause a ton of data to be lost, an admin can go send it back. -- The second method is with Technology Disks and Design Disks. Each of these disks can hold a single technology or design datum in -it's entirety. You can then take the disk to any R&D console and upload it's data to it. This method is a lot more secure (since it -won't update every console in existence) but it's more of a hassle to do. Also, the disks can be stolen. -*/ - -/obj/machinery/computer/rdconsole - name = "fabrication control console" - desc = "Console controlling the various fabrication devices. Uses self-learning matrix to hold and optimize blueprints. Prone to corrupting said matrix, so back up often." - icon_keyboard = "rd_key" - icon_screen = "rdcomp" - light_color = "#a97faa" - base_type = /obj/machinery/computer/rdconsole/core - machine_name = "\improper R&D control console" - machine_desc = "Used to operate an R&D setup, including protolathes, circuit imprinters, and destructive analyzers. Can be configured with a screwdriver." - var/datum/research/files //Stores all the collected research data. - var/obj/item/disk/tech_disk/t_disk = null //Stores the technology disk. - var/obj/item/disk/design_disk/d_disk = null //Stores the design disk. - - var/obj/machinery/r_n_d/destructive_analyzer/linked_destroy = null //Linked Destructive Analyzer - var/obj/machinery/r_n_d/protolathe/linked_lathe = null //Linked Protolathe - var/obj/machinery/r_n_d/circuit_imprinter/linked_imprinter = null //Linked Circuit Imprinter - - var/screen = 1.0 //Which screen is currently showing. - var/id = 0 //ID of the computer (for server restrictions). - var/sync = 1 //If sync = 0, it doesn't show up on Server Control Console - var/can_analyze = TRUE //If the console is allowed to use destructive analyzers - - var/list/saved_origins = list() - var/protolathe_show_tech = TRUE - var/protolathe_search = "" - var/imprinter_show_tech = TRUE - var/imprinter_search = "" - var/quick_deconstruct = FALSE - - req_access = list(access_research) //Data and setting manipulation requires scientist access. - -/obj/machinery/computer/rdconsole/proc/CallMaterialName(var/ID) - var/return_name = ID - switch(return_name) - if(MATERIAL_STEEL) - return_name = "Steel" - if(MATERIAL_ALUMINIUM) - return_name = "Aluminium" - if(MATERIAL_GLASS) - return_name = "Glass" - if(MATERIAL_PLASTIC) - return_name = "Plastic" - if(MATERIAL_GOLD) - return_name = "Gold" - if(MATERIAL_SILVER) - return_name = "Silver" - if(MATERIAL_PHORON) - return_name = "Solid Phoron" - if(MATERIAL_URANIUM) - return_name = "Uranium" - if(MATERIAL_DIAMOND) - return_name = "Diamond" - return return_name - -/obj/machinery/computer/rdconsole/proc/CallReagentName(var/reagent_type) - var/datum/reagent/R = reagent_type - return ispath(reagent_type, /datum/reagent) ? initial(R.name) : "Unknown" - -/obj/machinery/computer/rdconsole/proc/SyncRDevices() //Makes sure it is properly sync'ed up with the devices attached to it (if any). - for(var/obj/machinery/r_n_d/D in range(4, src)) - if(D.linked_console != null || D.panel_open) - continue - if(istype(D, /obj/machinery/r_n_d/destructive_analyzer) && can_analyze == TRUE) // Only science R&D consoles can do research - if(linked_destroy == null) - linked_destroy = D - D.linked_console = src - else if(istype(D, /obj/machinery/r_n_d/protolathe)) - if(linked_lathe == null) - linked_lathe = D - D.linked_console = src - else if(istype(D, /obj/machinery/r_n_d/circuit_imprinter)) - if(linked_imprinter == null) - linked_imprinter = D - D.linked_console = src - return - -/obj/machinery/computer/rdconsole/New() - ..() - files = new - if(!id) - for(var/obj/machinery/r_n_d/server/centcom/S in SSmachines.machinery) - S.update_connections() - break - -/obj/machinery/computer/rdconsole/Initialize() - SyncRDevices() - . = ..() - -/obj/machinery/computer/rdconsole/attackby(var/obj/item/D as obj, var/mob/user as mob) - //Loading a disk into it. - if(istype(D, /obj/item/disk)) - if(t_disk || d_disk) - to_chat(user, "A disk is already loaded into the machine.") - return - if(!user.canUnEquip(D)) - return - if(istype(D, /obj/item/disk/tech_disk)) - t_disk = D - else if (istype(D, /obj/item/disk/design_disk)) - d_disk = D - else - to_chat(user, "Machine cannot accept disks in that format.") - return - user.drop_from_inventory(D, src) - to_chat(user, "You add \the [D] to the machine.") - else - //The construction/deconstruction of the console code. - ..() - - src.updateUsrDialog() - return - -/obj/machinery/computer/rdconsole/emag_act(var/remaining_charges, var/mob/user) - if(!emagged) - playsound(src.loc, 'sound/effects/sparks4.ogg', 75, 1) - emagged = TRUE - req_access.Cut() - to_chat(user, "You you disable the security protocols.") - return 1 - -/obj/machinery/computer/rdconsole/CanUseTopic(var/mob/user, var/datum/topic_state/state, var/href_list) - if(href_list && href_list["menu"]) - var/temp_screen = text2num(href_list["menu"]) - if(!((temp_screen <= 1.1) || (3 <= temp_screen && 4.9 >= temp_screen) || allowed(user))) - to_chat(user, "Unauthorized Access.") - return STATUS_CLOSE - return ..() - -/obj/machinery/computer/rdconsole/OnTopic(user, href_list) - if(href_list["menu"]) //Switches menu screens. Converts a sent text string into a number. Saves a LOT of code. - screen = text2num(href_list["menu"]) - . = TOPIC_REFRESH - - else if(href_list["updt_tech"]) //Update the research holder with information from the technology disk. - . = TOPIC_REFRESH - if(!t_disk) - screen = 1 - return - screen = 0.0 - spawn(50) - if(!t_disk) - screen = 1 - return - screen = 1.2 - files.AddTech2Known(t_disk.stored) - updateUsrDialog() - - else if(href_list["clear_tech"]) //Erase data on the technology disk. - . = TOPIC_REFRESH - if(!t_disk) - screen = 1 - return - t_disk.stored = null - - else if(href_list["eject_tech"]) //Eject the technology disk. - t_disk.dropInto(loc) - t_disk = null - screen = 1.0 - . = TOPIC_REFRESH - - else if(href_list["copy_tech"]) //Copys some technology data from the research holder to the disk. - . = TOPIC_REFRESH - if(!t_disk) - screen = 1 - return - for(var/datum/tech/T in files.known_tech) - if(href_list["copy_tech_ID"] == T.id) - t_disk.stored = T - break - screen = 1.2 - - else if(href_list["updt_design"]) //Updates the research holder with design data from the design disk. - . = TOPIC_REFRESH - if(!d_disk) - screen = 1 - return - screen = 0.0 - spawn(50) - if(!d_disk) - screen = 1 - return - screen = 1.4 - files.AddDesign2Known(d_disk.blueprint) - updateUsrDialog() - - else if(href_list["clear_design"]) //Erases data on the design disk. - . = TOPIC_REFRESH - if(!d_disk) - screen = 1 - return - d_disk.blueprint = null - - else if(href_list["eject_design"]) //Eject the design disk. - if(d_disk) - d_disk.dropInto(loc) - d_disk = null - screen = 1.0 - . = TOPIC_REFRESH - - else if(href_list["copy_design"]) //Copy design data from the research holder to the design disk. - . = TOPIC_REFRESH - if(!d_disk) - screen = 1 - return - for(var/datum/design/D in files.known_designs) - if(href_list["copy_design_ID"] == D.id) - d_disk.blueprint = D - break - screen = 1.4 - - else if(href_list["eject_item"]) //Eject the item inside the destructive analyzer. - . = TOPIC_REFRESH - CHECK_DESTROY - if(linked_destroy.busy) - to_chat(usr, "The destructive analyzer is busy at the moment.") - - else if(linked_destroy.loaded_item) - linked_destroy.loaded_item.dropInto(linked_destroy.loc) - linked_destroy.loaded_item = null - linked_destroy.icon_state = "d_analyzer" - screen = 2.1 - - else if(href_list["deconstruct"]) //Deconstruct the item in the destructive analyzer and update the research holder. - . = TOPIC_REFRESH - CHECK_DESTROY - if(linked_destroy.busy) - to_chat(usr, "The destructive analyzer is busy at the moment.") - return TOPIC_HANDLED - if(alert("Proceeding will destroy loaded item. Continue?", "Destructive analyzer confirmation", "Yes", "No") == "No") - return TOPIC_HANDLED - CHECK_DESTROY - deconstruct(weakref(usr)) - - else if(href_list["lock"]) //Lock the console from use by anyone without tox access. - if(allowed(usr)) - screen = text2num(href_list["lock"]) - else - to_chat(usr, "Unauthorized Access.") - . = TOPIC_REFRESH - - else if(href_list["sync"]) //Sync the research holder with all the R&D consoles in the game that aren't sync protected. - screen = 0.0 - if(!sync) - to_chat(usr, "You must connect to the network first.") - else - . = TOPIC_HANDLED - spawn(30) - if(src) - for(var/obj/machinery/r_n_d/server/S in SSmachines.machinery) - var/server_processed = 0 - if((id in S.id_with_upload) || istype(S, /obj/machinery/r_n_d/server/centcom)) - for(var/datum/tech/T in files.known_tech) - S.files.AddTech2Known(T) - for(var/datum/design/D in files.known_designs) - S.files.AddDesign2Known(D) - S.files.RefreshResearch() - server_processed = 1 - if((id in S.id_with_download) && !istype(S, /obj/machinery/r_n_d/server/centcom)) - for(var/datum/tech/T in S.files.known_tech) - files.AddTech2Known(T) - for(var/datum/design/D in S.files.known_designs) - files.AddDesign2Known(D) - files.RefreshResearch() - server_processed = 1 - if(!istype(S, /obj/machinery/r_n_d/server/centcom) && server_processed) - S.produce_heat() - screen = 1.6 - interact(user) - - else if(href_list["togglesync"]) //Prevents the console from being synced by other consoles. Can still send data. - sync = !sync - . = TOPIC_REFRESH - - else if(href_list["build"]) //Causes the Protolathe to build something. - . = TOPIC_REFRESH - CHECK_LATHE - var/datum/design/being_built = null - for(var/datum/design/D in files.known_designs) - if(D.id == href_list["build"]) - being_built = D - break - if(being_built) - linked_lathe.addToQueue(being_built) - screen = 3.1 - - else if(href_list["imprint"]) //Causes the Circuit Imprinter to build something. - . = TOPIC_REFRESH - CHECK_IMPRINTER - var/datum/design/being_built = null - for(var/datum/design/D in files.known_designs) - if(D.id == href_list["imprint"]) - being_built = D - break - if(being_built) - linked_imprinter.addToQueue(being_built) - screen = 4.1 - - else if(href_list["disposeI"]) //Causes the circuit imprinter to dispose of a single reagent (all of it) - . = TOPIC_REFRESH - CHECK_IMPRINTER - var/datum/reagent/R = locate(href_list["disposeI"]) in linked_imprinter.reagents.reagent_list - if(R) - linked_imprinter.reagents.del_reagent(href_list["dispose"]) - - else if(href_list["disposeallI"]) //Causes the circuit imprinter to dispose of all it's reagents. - . = TOPIC_REFRESH - CHECK_IMPRINTER - linked_imprinter.reagents.clear_reagents() - - else if(href_list["removeI"]) - . = TOPIC_REFRESH - CHECK_LATHE - linked_imprinter.removeFromQueue(text2num(href_list["removeI"])) - - else if(href_list["disposeP"]) //Causes the protolathe to dispose of a single reagent (all of it) - . = TOPIC_REFRESH - CHECK_LATHE - var/datum/reagent/R = locate(href_list["disposeP"]) in linked_lathe.reagents.reagent_list - if(R) - linked_lathe.reagents.del_reagent(R.type) - - else if(href_list["disposeallP"]) //Causes the protolathe to dispose of all it's reagents. - . = TOPIC_REFRESH - CHECK_LATHE - linked_lathe.reagents.clear_reagents() - - else if(href_list["removeP"]) - . = TOPIC_REFRESH - CHECK_LATHE - var/to_remove = text2num(href_list["removeP"]) - if(sanitize_integer(to_remove, 1, length(linked_lathe.queue), 1) == to_remove) - linked_lathe.removeFromQueue(to_remove) - - else if(href_list["lathe_ejectsheet"]) //Causes the protolathe to eject a sheet of material - . = TOPIC_REFRESH - CHECK_LATHE - linked_lathe.eject(href_list["lathe_ejectsheet"], text2num(href_list["amount"])) - - else if(href_list["imprinter_ejectsheet"]) //Causes the protolathe to eject a sheet of material - . = TOPIC_REFRESH - CHECK_IMPRINTER - linked_imprinter.eject(href_list["imprinter_ejectsheet"], text2num(href_list["amount"])) - - else if(href_list["find_device"]) //The R&D console looks for devices nearby to link up with. - screen = 0.0 - . = TOPIC_HANDLED - spawn(10) - SyncRDevices() - screen = 1.7 - interact(user) - - else if(href_list["disconnect"]) //The R&D console disconnects with a specific device. - . = TOPIC_REFRESH - switch(href_list["disconnect"]) - if("destroy") - CHECK_DESTROY - linked_destroy.linked_console = null - linked_destroy = null - if("lathe") - CHECK_LATHE - linked_lathe.linked_console = null - linked_lathe = null - if("imprinter") - CHECK_IMPRINTER - linked_imprinter.linked_console = null - linked_imprinter = null - - else if(href_list["reset"]) //Reset the R&D console's database. - var/choice = alert("R&D Console Database Reset", "Are you sure you want to reset the R&D console's database? Data lost cannot be recovered.", "Continue", "Cancel") - . = TOPIC_HANDLED - if(choice == "Continue") - screen = 0.0 - qdel(files) - files = new - spawn(20) - screen = 1.6 - interact(user) - - else if (href_list["print"]) //Print research information - screen = 0.5 - . = TOPIC_HANDLED - spawn(20) - var/obj/item/paper/PR = new/obj/item/paper - PR.name = "fabricator report" - PR.info = "
              [station_name()] Fabricator Laboratory" - PR.info += "

              [ (text2num(href_list["print"]) == 2) ? "Detailed" : null ] Fabricator Status Report

              " - PR.info += "report prepared at [stationtime2text()] local time

              " - if(text2num(href_list["print"]) == 2) - PR.info += GetResearchListInfo() - else - PR.info += GetResearchLevelsInfo() - PR.info_links = PR.info - PR.icon_state = "paper_words" - PR.dropInto(loc) - spawn(10) - screen = ((text2num(href_list["print"]) == 2) ? 5.0 : 1.1) - interact(user) - else if (href_list["protolathe_search"]) - var/protolathe_search = input("Search for a recipe:", "Search") - - if (!protolathe_search) - return - - src.protolathe_search = lowertext(protolathe_search) - interact(user) - - else if (href_list["protolathe_reset_search"]) - protolathe_search = "" - interact(user) - - else if (href_list["protolathe_show_tech"]) - protolathe_show_tech = !protolathe_show_tech - interact(user) - - else if (href_list["imprinter_search"]) - var/imprinter_search = input("Search for a recipe:", "Search") - - if (!imprinter_search) - return - - src.imprinter_search = lowertext(imprinter_search) - interact(user) - - else if (href_list["imprinter_reset_search"]) - imprinter_search = "" - interact(user) - - else if (href_list["imprinter_show_tech"]) - imprinter_show_tech = !imprinter_show_tech - interact(user) - else if (href_list["decon_mode"]) - quick_deconstruct = !quick_deconstruct - interact(user) - -/obj/machinery/computer/rdconsole/proc/deconstruct(weakref/W) - linked_destroy.busy = TRUE - if (!quick_deconstruct) - screen = 0.1 - flick("d_analyzer_process", linked_destroy) - addtimer(CALLBACK(src, .proc/finish_deconstruct, W), 24) - -/obj/machinery/computer/rdconsole/proc/finish_deconstruct(weakref/W) - CHECK_DESTROY - var/mob/user = W.resolve() - linked_destroy.busy = 0 - if(!linked_destroy.loaded_item) - to_chat(user, "The destructive analyzer appears to be empty.") - screen = 1.0 - return - for(var/T in linked_destroy.loaded_item.origin_tech) - files.UpdateTech(T, linked_destroy.loaded_item.origin_tech[T]) - if(linked_lathe && linked_destroy.loaded_item.matter) // Also sends salvaged materials to a linked protolathe, if any. - for(var/t in linked_destroy.loaded_item.matter) - if(t in linked_lathe.materials) - linked_lathe.materials[t] += min(linked_lathe.max_material_storage - linked_lathe.TotalMaterials(), linked_destroy.loaded_item.matter[t] * linked_destroy.decon_mod) - for (var/obj/I in linked_destroy.loaded_item.contents) - for (var/matter in I.matter) - if (matter in linked_lathe.materials) - linked_lathe.materials[matter] += min(linked_lathe.max_material_storage - linked_lathe.TotalMaterials(), I.matter[matter] * linked_destroy.decon_mod) - - linked_destroy.loaded_item = null - for(var/obj/I in linked_destroy.contents) - for(var/mob/M in I.contents) - M.death() - qdel(M) - if(istype(I,/obj/item/stack/material))//Only deconsturcts one sheet at a time instead of the entire stack - var/obj/item/stack/material/S = I - if(S.use(1) && S.amount) - linked_destroy.loaded_item = S - else - qdel(S) - linked_destroy.icon_state = "d_analyzer" - else - if(!(I in linked_destroy.component_parts)) - qdel(I) - linked_destroy.icon_state = "d_analyzer" - - use_power_oneoff(linked_destroy.active_power_usage) - if (!quick_deconstruct) - screen = 1.0 - if(CanInteract(user, DefaultTopicState())) - interact(user) - -/obj/machinery/computer/rdconsole/proc/GetResearchLevelsInfo() - var/dat - dat += "
                " - for(var/datum/tech/T in files.known_tech) - if(T.level < 1) - continue - dat += "
              • " - dat += "[T.name]" - dat += "
                  " - dat += "
                • Level: [T.level]" - dat += "
                • Summary: [T.desc]" - dat += "
                " - return dat - -/obj/machinery/computer/rdconsole/proc/GetResearchListInfo() - var/dat - dat += "
                  " - for(var/datum/design/D in files.known_designs) - if(D.build_path) - dat += "
                • [D.name]: [D.desc]" - dat += "
                " - return dat - -/obj/machinery/computer/rdconsole/interface_interact(mob/user) - interact(user) - return TRUE - -/obj/machinery/computer/rdconsole/interact(mob/user) - user.set_machine(src) - var/dat = list() - files.RefreshResearch() - switch(screen) //A quick check to make sure you get the right screen when a device is disconnected. - if(2 to 2.9) - if(linked_destroy == null) - screen = 2.0 - else if(linked_destroy.loaded_item == null) - screen = 2.1 - else - screen = 2.2 - if(3 to 3.9) - if(linked_lathe == null) - screen = 3.0 - if(4 to 4.9) - if(linked_imprinter == null) - screen = 4.0 - - switch(screen) - - //////////////////////R&D CONSOLE SCREENS////////////////// - if(0.0) - dat += "Updating Database..." - - if(0.1) - dat += "Processing and Updating Database..." - - if(0.2) - dat += "SYSTEM LOCKED

                " - dat += "Unlock" - - if(0.3) - dat += "Constructing Prototype. Please Wait..." - - if(0.4) - dat += "Imprinting Circuit. Please Wait..." - - if(0.5) - dat += "Printing. Please Wait..." - - if(1.0) //Main Menu - dat += "Main Menu:

                " - dat += "Loaded disk: " - dat += (t_disk || d_disk) ? (t_disk ? "technology storage disk" : "design storage disk") : "none" - dat += "
                " - - if(1.1) //Research viewer - dat += "Main Menu || " - dat += "Print This Page
                " - dat += "Fabricator Learning Matrix Proficiency Levels:

                " - dat += GetResearchLevelsInfo() - dat += "
              " - - if(1.2) //Technology Disk Menu - if(!t_disk) - screen = 1 - return - dat += "Main Menu
              " - dat += "Disk Contents: (Technology Data Disk)

              " - if(t_disk.stored == null) - dat += "The disk has no data stored on it.
              " - dat += "Operations: " - dat += "Load Tech to Disk || " - else - dat += "Name: [t_disk.stored.name]
              " - dat += "Level: [t_disk.stored.level]
              " - dat += "Description: [t_disk.stored.desc]
              " - dat += "Operations: " - dat += "Upload to Database || " - dat += "Clear Disk || " - dat += "Eject Disk" - - if(1.3) //Technology Disk submenu - if(!t_disk) - screen = 1 - return - dat += "
              Main Menu || " - dat += "Return to Disk Operations
              " - dat += "Load Technology to Disk:

              " - dat += "
                " - for(var/datum/tech/T in files.known_tech) - dat += "
              • [T.name] " - dat += "\[copy to disk\]" - dat += "
              " - - if(1.4) //Design Disk menu. - if(!d_disk) - screen = 1 - return - dat += "Main Menu
              " - if(d_disk.blueprint == null) - dat += "The disk has no data stored on it.
              " - dat += "Operations: " - dat += "Load Design to Disk || " - else - dat += "Name: [d_disk.blueprint.name]
              " - switch(d_disk.blueprint.build_type) - if(IMPRINTER) dat += "Lathe Type: Circuit Imprinter
              " - if(PROTOLATHE) dat += "Lathe Type: Proto-lathe
              " - dat += "Required Materials:
              " - for(var/M in d_disk.blueprint.materials) - if(copytext_char(M, 1, 2) == "$") dat += "* [copytext_char(M, 2)] x [d_disk.blueprint.materials[M]]
              " - else dat += "* [M] x [d_disk.blueprint.materials[M]]
              " - dat += "
              Operations: " - dat += "Upload to Database || " - dat += "Clear Disk || " - dat += "Eject Disk" - - if(1.5) //Design disk submenu - if(!d_disk) - screen = 1 - return - dat += "Main Menu || " - dat += "Return to Disk Operations
              " - dat += "Load Design to Disk:

              " - dat += "
                " - for(var/datum/design/D in files.known_designs) - if(D.build_path) - dat += "
              • [D.name] " - dat += "\[copy to disk\]" - dat += "
              " - - if(1.6) //R&D console settings - dat += "Main Menu
              " - dat += "R&D Console Setting:
              " - dat += "
                " - if(sync) - dat += "
              • Sync Database with Network
                " - dat += "
              • Disconnect from Fabrication Network
                " - else - dat += "
              • Connect to Fabrication Network
                " - dat += "
              • Device Linkage Menu
                " - dat += "
              • Lock Console
                " - dat += "
              • Reset R&D Database
                " - dat += "
                  " - - if(1.7) //R&D device linkage - dat += "Main Menu || " - dat += "Settings Menu
                  " - dat += "R&D Console Device Linkage Menu:

                  " - dat += "Re-sync with Nearby Devices
                  " - dat += "Linked Devices:" - dat += "
                    " - if(linked_destroy) - dat += "
                  • Destructive Analyzer (Disconnect)" - else - if (can_analyze == TRUE) - dat += "
                  • (No Destructive Analyzer Linked)" - if(linked_lathe) - dat += "
                  • Protolathe (Disconnect)" - else - dat += "
                  • (No Protolathe Linked)" - if(linked_imprinter) - dat += "
                  • Circuit Imprinter (Disconnect)" - else - dat += "
                  • (No Circuit Imprinter Linked)" - dat += "
                  " - - ////////////////////DESTRUCTIVE ANALYZER SCREENS//////////////////////////// - - if(2.0) - dat += "Main Menu
                  " - dat += "NO DESTRUCTIVE ANALYZER LINKED TO CONSOLE

                  " - - if(2.1) - dat += "Main Menu
                  " - dat += "Automatic Deconstruction: [quick_deconstruct ? "ON" : "OFF"]
                  " - dat += "No Item Loaded. Standing-by...

                  " - - if(2.2) - dat += "Main Menu
                  " - dat += "Automatic Deconstruction: [quick_deconstruct ? "ON" : "OFF"]
                  " - dat += "Deconstruction Menu
                  " - dat += "Name: [linked_destroy.loaded_item.name]
                  " - - dat += "Origin Tech:" - dat += "
                    " - for(var/T in linked_destroy.loaded_item.origin_tech) - dat += "
                  • [CallTechName(T)] [linked_destroy.loaded_item.origin_tech[T]]" - for(var/datum/tech/F in files.known_tech) - if(F.name == CallTechName(T)) - dat += " (Current: [F.level])" - break - dat += "
                  " - dat += "
                  Deconstruct Item || " - dat += "Eject Item || " - - /////////////////////PROTOLATHE SCREENS///////////////////////// - if(3.0) - dat += "Main Menu
                  " - dat += "NO PROTOLATHE LINKED TO CONSOLE

                  " - - if(3.1) - CHECK_LATHE - dat += "Main Menu || " - dat += "View Queue || " - dat += "Material Storage || " - dat += "Chemical Storage
                  " - dat += "Protolathe Menu:

                  " - dat += "Show Recipe Tech Levels: [protolathe_show_tech ? "YES" : "NO"]" - dat += "Search" - dat += "Reset Search
                  " - dat += "[FONT_COLORED(COLOR_GREEN, "Green")] = Tech level higher than current
                  " - dat += "Material Amount: [linked_lathe.TotalMaterials()] cm3 (MAX: [linked_lathe.max_material_storage])
                  " - dat += "Chemical Volume: [linked_lathe.reagents.total_volume] (MAX: [linked_lathe.reagents.maximum_volume])
                  " - dat += "
                    " - - for(var/datum/design/D in files.known_designs) - if(!D.build_path || !(D.build_type & PROTOLATHE)) - continue - - if (protolathe_search != "") - if (!findtext(D.name, protolathe_search)) - continue - - var/temp_dat - for(var/M in D.materials) - temp_dat += ", [D.materials[M]] [CallMaterialName(M)]" - for(var/T in D.chemicals) - temp_dat += ", [D.chemicals[T]*(linked_imprinter ? linked_imprinter.mat_efficiency : 1)] [CallReagentName(T)]" - if(temp_dat) - temp_dat = " \[[copytext_char(temp_dat, 3)]\]" - if(linked_lathe.canBuild(D)) - dat += "
                  • [D.name][temp_dat]" - else - dat += "
                  • [D.name][temp_dat]" - - if (protolathe_show_tech) - var/list/origin_tech - - if (saved_origins[D.build_path]) - origin_tech = saved_origins[D.build_path] - - if (!origin_tech) - var/obj/item/I = new D.build_path - origin_tech = I.origin_tech - saved_origins[D.build_path] = origin_tech - qdel(I) - - for (var/T in origin_tech) - for (var/datum/tech/F in files.known_tech) - if (F.name == CallTechName(T)) - if (F.level <= origin_tech[T]) - dat += FONT_COLORED(COLOR_GREEN, " [F.name] = [origin_tech[T]] ") - else - dat += " [F.name] = [origin_tech[T]] " - break - dat += "
                  " - - if(3.2) //Protolathe Material Storage Sub-menu - CHECK_LATHE - dat += "Main Menu || " - dat += "Protolathe Menu
                  " - dat += "Material Storage

                  " - dat += "
                    " - for(var/M in linked_lathe.materials) - var/amount = linked_lathe.materials[M] - dat += "
                  • [capitalize(M)]: [amount] cm3" - if(amount >= SHEET_MATERIAL_AMOUNT) - dat += " || Eject " - for (var/C in list(1, 3, 5, 10, 15, 20, 25, 30, 40)) - if(amount < C * SHEET_MATERIAL_AMOUNT) - break - dat += "[C > 1 ? ", " : ""][C] " - - dat += " or max sheets" - dat += "" - dat += "
                  " - - if(3.3) //Protolathe Chemical Storage Submenu - CHECK_LATHE - dat += "Main Menu || " - dat += "Protolathe Menu
                  " - dat += "Chemical Storage

                  " - for(var/datum/reagent/R in linked_lathe.reagents.reagent_list) - dat += "Name: [R.name] | Units: [R.volume] " - dat += "(Purge)
                  " - dat += "Disposal All Chemicals in Storage
                  " - - if(3.4) // Protolathe queue - CHECK_LATHE - dat += "Main Menu || " - dat += "Protolathe Menu
                  " - dat += "Queue

                  " - if(!linked_lathe.queue.len) - dat += "Empty" - else - var/tmp = 1 - for(var/datum/design/D in linked_lathe.queue) - if(tmp == 1) - if(linked_lathe.busy) - dat += "1: [D.name]
                  " - else - dat += "1: [D.name] (Awaiting materials) (Remove)
                  " - else - dat += "[tmp]: [D.name] (Remove)
                  " - ++tmp - - ///////////////////CIRCUIT IMPRINTER SCREENS//////////////////// - if(4.0) - dat += "Main Menu
                  " - dat += "NO CIRCUIT IMPRINTER LINKED TO CONSOLE

                  " - - if(4.1) - CHECK_IMPRINTER - dat += "Main Menu || " - dat += "View Queue || " - dat += "Material Storage || " - dat += "Chemical Storage
                  " - dat += "Circuit Imprinter Menu:

                  " - dat += "Show Recipe Tech Levels: [imprinter_show_tech ? "YES" : "NO"]" - dat += "Search" - dat += "Reset Search
                  " - dat += "[FONT_COLORED(COLOR_GREEN, "Green")] = Tech level higher than current
                  " - dat += "Material Amount: [linked_imprinter.TotalMaterials()] cm3
                  " - dat += "Chemical Volume: [linked_imprinter.reagents.total_volume]
                  " - dat += "
                    " - for(var/datum/design/D in files.known_designs) - if(!D.build_path || !(D.build_type & IMPRINTER)) - continue - - if (imprinter_search != "" && !findtext(D.name, imprinter_search)) - continue - - var/temp_dat - for(var/M in D.materials) - temp_dat += ", [D.materials[M]*linked_imprinter.mat_efficiency] [CallMaterialName(M)]" - for(var/T in D.chemicals) - temp_dat += ", [D.chemicals[T]*linked_imprinter.mat_efficiency] [CallReagentName(T)]" - if(temp_dat) - temp_dat = " \[[copytext_char(temp_dat,3)]\]" - if(linked_imprinter.canBuild(D)) - dat += "
                  • [D.name][temp_dat]" - else - dat += "
                  • [D.name][temp_dat]" - - if (imprinter_show_tech) - var/list/origin_tech - - if (saved_origins[D.build_path]) - origin_tech = saved_origins[D.build_path] - - if (!origin_tech) - var/obj/item/I = new D.build_path - origin_tech = I.origin_tech - saved_origins[D.build_path] = origin_tech - qdel(I) - - for (var/T in origin_tech) - for (var/datum/tech/F in files.known_tech) - if (F.name == CallTechName(T)) - if (F.level <= origin_tech[T] ) - dat += FONT_COLORED(COLOR_GREEN, " [F.name] = [origin_tech[T]] ") - else - dat += " [F.name] = [origin_tech[T]] " - break - dat += "
                  " - - if(4.2) - CHECK_IMPRINTER - dat += "Main Menu || " - dat += "Imprinter Menu
                  " - dat += "Chemical Storage

                  " - for(var/datum/reagent/R in linked_imprinter.reagents.reagent_list) - dat += "Name: [R.name] | Units: [R.volume] " - dat += "(Purge)
                  " - dat += "Disposal All Chemicals in Storage
                  " - - if(4.3) - CHECK_IMPRINTER - dat += "Main Menu || " - dat += "Circuit Imprinter Menu
                  " - dat += "Material Storage

                  " - dat += "
                    " - for(var/M in linked_imprinter.materials) - var/amount = linked_imprinter.materials[M] - dat += "
                  • [capitalize(M)]: [amount] cm3" - if(amount >= SHEET_MATERIAL_AMOUNT) - dat += " || Eject: " - for (var/C in list(1, 3, 5, 10, 15, 20, 25, 30, 40)) - if(amount < C * SHEET_MATERIAL_AMOUNT) - break - dat += "[C > 1 ? ", " : ""][C] " - - dat += " or max sheets" - dat += "" - dat += "
                  " - - if(4.4) - CHECK_IMPRINTER - dat += "Main Menu || " - dat += "Circuit Imprinter Menu
                  " - dat += "Queue

                  " - if(linked_imprinter.queue.len == 0) - dat += "Empty" - else - var/tmp = 1 - for(var/datum/design/D in linked_imprinter.queue) - if(tmp == 1) - dat += "1: [D.name]
                  " - else - dat += "[tmp]: [D.name] (Remove)
                  " - ++tmp - - ///////////////////Research Information Browser//////////////////// - if(5.0) - dat += "Main Menu || " - dat += "Print This Page
                  " - dat += "List of Available Designs:" - dat += GetResearchListInfo() - - var/datum/browser/popup = new(user, "rdconsolenew", "Core Fabricator Console", 850, 600) - popup.set_content(JOINTEXT(dat)) - popup.open() - -/obj/machinery/computer/rdconsole/robotics - name = "robotics fabrication console" - id = 2 - req_access = list(access_robotics) - can_analyze = FALSE - -/obj/machinery/computer/rdconsole/core - name = "core fabricator console" - id = 1 - - -#undef CHECK_LATHE -#undef CHECK_IMPRINTER -#undef CHECK_DESTROY diff --git a/code/modules/research/rdmachines.dm b/code/modules/research/rdmachines.dm deleted file mode 100644 index f39a5ceae2c51..0000000000000 --- a/code/modules/research/rdmachines.dm +++ /dev/null @@ -1,49 +0,0 @@ -//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:33 - -//All devices that link into the R&D console fall into thise type for easy identification and some shared procs. - -var/global/list/default_material_composition = list(MATERIAL_STEEL = 0, MATERIAL_ALUMINIUM = 0, MATERIAL_PLASTIC = 0, MATERIAL_GLASS = 0, MATERIAL_GOLD = 0, MATERIAL_SILVER = 0, MATERIAL_PHORON = 0, MATERIAL_URANIUM = 0, MATERIAL_DIAMOND = 0) -/obj/machinery/r_n_d - name = "R&D Device" - icon = 'icons/obj/machines/research.dmi' - density = TRUE - anchored = TRUE - uncreated_component_parts = null - stat_immune = 0 - var/busy = 0 - var/obj/machinery/computer/rdconsole/linked_console - - var/list/materials = list() - -/obj/machinery/r_n_d/dismantle() - for(var/obj/I in src) - if(istype(I, /obj/item/reagent_containers/glass/beaker)) - reagents.trans_to_obj(I, reagents.total_volume) - for(var/f in materials) - if(materials[f] >= SHEET_MATERIAL_AMOUNT) - new /obj/item/stack/material(loc, round(materials[f] / SHEET_MATERIAL_AMOUNT), f) - return ..() - - -/obj/machinery/r_n_d/proc/eject(var/material, var/amount) - if(!(material in materials)) - return - var/material/mat = SSmaterials.get_material_by_name(material) - var/eject = clamp(round(materials[material] / mat.units_per_sheet), 0, amount) - if(eject > 0) - mat.place_sheet(loc, eject) - materials[material] -= eject * mat.units_per_sheet - -/obj/machinery/r_n_d/proc/TotalMaterials() - for(var/f in materials) - . += materials[f] - -/obj/machinery/r_n_d/proc/getLackingMaterials(var/datum/design/D) - var/list/ret = list() - for(var/M in D.materials) - if(materials[M] < D.materials[M]) - ret += "[D.materials[M] - materials[M]] [M]" - for(var/C in D.chemicals) - if(!reagents.has_reagent(C, D.chemicals[C])) - ret += C - return english_list(ret) diff --git a/code/modules/research/research.dm b/code/modules/research/research.dm deleted file mode 100644 index b0440bfd073fb..0000000000000 --- a/code/modules/research/research.dm +++ /dev/null @@ -1,219 +0,0 @@ -/* -General Explination: -The research datum is the "folder" where all the research information is stored in a R&D console. It's also a holder for all the -various procs used to manipulate it. It has four variables and seven procs: - -Variables: -- possible_tech is a list of all the /datum/tech that can potentially be researched by the player. The RefreshResearch() proc -(explained later) only goes through those when refreshing what you know. Generally, possible_tech contains ALL of the existing tech -but it is possible to add tech to the game that DON'T start in it (example: Xeno tech). Generally speaking, you don't want to mess -with these since they should be the default version of the datums. They're actually stored in a list rather then using typesof to -refer to them since it makes it a bit easier to search through them for specific information. -- know_tech is the companion list to possible_tech. It's the tech you can actually research and improve. Until it's added to this -list, it can't be improved. All the tech in this list are visible to the player. -- possible_designs is functionally identical to possbile_tech except it's for /datum/design. -- known_designs is functionally identical to known_tech except it's for /datum/design - -Procs: -- TechHasReqs: Used by other procs (specifically RefreshResearch) to see whether all of a tech's requirements are currently in -known_tech and at a high enough level. -- DesignHasReqs: Same as TechHasReqs but for /datum/design and known_design. -- AddTech2Known: Adds a /datum/tech to known_tech. It checks to see whether it already has that tech (if so, it just replaces it). If -it doesn't have it, it adds it. Note: It does NOT check possible_tech at all. So if you want to add something strange to it (like -a player made tech?) you can. -- AddDesign2Known: Same as AddTech2Known except for /datum/design and known_designs. -- RefreshResearch: This is the workhorse of the R&D system. It updates the /datum/research holder and adds any unlocked tech paths -and designs you have reached the requirements for. It only checks through possible_tech and possible_designs, however, so it won't -accidentally add "secret" tech to it. -- UpdateTech is used as part of the actual researching process. It takes an ID and finds techs with that same ID in known_tech. When -it finds it, it checks to see whether it can improve it at all. If the known_tech's level is less then or equal to -the inputted level, it increases the known tech's level to the inputted level -1 or know tech's level +1 (whichever is higher). - -The tech datums are the actual "tech trees" that you improve through researching. Each one has five variables: -- Name: Pretty obvious. This is often viewable to the players. -- Desc: Pretty obvious. Also player viewable. -- ID: This is the unique ID of the tech that is used by the various procs to find and/or maniuplate it. -- Level: This is the current level of the tech. All techs start at 1 and have a max of 20. Devices and some techs require a certain -level in specific techs before you can produce them. -- Req_tech: This is a list of the techs required to unlock this tech path. If left blank, it'll automatically be loaded into the -research holder datum. - -*/ -/*************************************************************** -** Master Types ** -** Includes all the helper procs and basic tech processing. ** -***************************************************************/ - -/datum/research //Holder for all the existing, archived, and known tech. Individual to console. - var/list/known_tech = list() //List of locally known tech. Datum/tech go here. - var/list/possible_designs = list() //List of all designs. - var/list/known_designs = list() //List of available designs. - -/datum/research/New() //Insert techs into possible_tech here. Known_tech automatically updated. - for(var/T in typesof(/datum/tech) - /datum/tech) - known_tech += new T(src) - for(var/D in typesof(/datum/design) - /datum/design) - possible_designs += new D(src) - RefreshResearch() - -/datum/research/techonly - -/datum/research/techonly/New() - for(var/T in typesof(/datum/tech) - /datum/tech) - known_tech += new T(src) - RefreshResearch() - -//Checks to see if design has all the required pre-reqs. -//Input: datum/design; Output: 0/1 (false/true) -/datum/research/proc/DesignHasReqs(var/datum/design/D) - if(D.req_tech.len == 0) - return 1 - - var/list/k_tech = list() - - for(var/datum/tech/known in known_tech) - k_tech[known.id] = known.level - - for(var/req in D.req_tech) - if(isnull(k_tech[req]) || k_tech[req] < D.req_tech[req]) - return 0 - - return 1 - -//Adds a tech to known_tech list. Checks to make sure there aren't duplicates and updates existing tech's levels if needed. -//Input: datum/tech; Output: Null -/datum/research/proc/AddTech2Known(var/datum/tech/T) - for(var/datum/tech/known in known_tech) - if(T.id == known.id) - if(T.level > known.level) - known.level = T.level - return - return - -/datum/research/proc/AddDesign2Known(var/datum/design/D) - if(!known_designs.len) // Special case - known_designs.Add(D) - return - for(var/i = 1 to known_designs.len) - var/datum/design/A = known_designs[i] - if(A.id == D.id) // We are guaranteed to reach this if the ids are the same, because sort_string will also be the same - return - if(A.sort_string > D.sort_string) - known_designs.Insert(i, D) - return - known_designs.Add(D) - return - -//Refreshes known_tech and known_designs list -//Input/Output: n/a -/datum/research/proc/RefreshResearch() - for(var/datum/design/PD in possible_designs) - if(DesignHasReqs(PD)) - AddDesign2Known(PD) - for(var/datum/tech/T in known_tech) - T = clamp(T.level, 0, 20) - return - -//Refreshes the levels of a given tech. -//Input: Tech's ID and Level; Output: null -/datum/research/proc/UpdateTech(var/ID, var/level) - // If a "brain expansion" event is active, we gain 1 extra level - for(var/datum/event/E in SSevent.active_events) - if(istype(E, /datum/event/brain_expansion)) - level += 1 - break - - for(var/datum/tech/KT in known_tech) - if(KT.id == ID && KT.level <= level) - KT.level = max(KT.level + 1, level - 1) - return - -// A simple helper proc to find the name of a tech with a given ID. -/proc/CallTechName(var/ID) - for(var/T in subtypesof(/datum/tech)) - var/datum/tech/check_tech = T - if(initial(check_tech.id) == ID) - return initial(check_tech.name) - -/*************************************************************** -** Technology Datums ** -** Includes all the various technoliges and what they make. ** -***************************************************************/ - -/datum/tech //Datum of individual technologies. - var/name = "name" //Name of the technology. - var/desc = "description" //General description of what it does and what it makes. - var/id = "id" //An easily referenced ID. Must be alphanumeric, lower-case, and no symbols. - var/level = 1 //A simple number scale of the research level. Level 0 = Secret tech. - -/datum/tech/materials - name = "Materials" - desc = "Development of new and improved materials." - id = TECH_MATERIAL - -/datum/tech/engineering - name = "Engineering" - desc = "Development of new and improved engineering parts." - id = TECH_ENGINEERING - -/datum/tech/phorontech - name = "Phoron Technology" - desc = "Manipulation of the mysterious substance colloqually known as 'phoron'." - id = TECH_PHORON - -/datum/tech/powerstorage - name = "Power Manipulation Technology" - desc = "The various technologies behind the storage and generation of electicity." - id = TECH_POWER - -/datum/tech/bluespace - name = "'Blue-space' Technology" - desc = "Devices that utilize the sub-reality known as 'blue-space'" - id = TECH_BLUESPACE - -/datum/tech/biotech - name = "Biological Technology" - desc = "Deeper mysteries of life and organic substances." - id = TECH_BIO - -/datum/tech/combat - name = "Combat Systems" - desc = "Offensive and defensive systems." - id = TECH_COMBAT - -/datum/tech/magnets - name = "Electromagnetic Spectrum Technology" - desc = "Electromagnetic spectrum and magnetic devices. No clue how they actually work, though." - id = TECH_MAGNET - -/datum/tech/programming - name = "Data Theory" - desc = "Computer and artificial intelligence and data storage systems." - id = TECH_DATA - -/datum/tech/esoteric - name = "Esoteric Technology" - desc = "A miscellaneous tech category filled with information on non-standard designs, personal projects and half-baked ideas." - id = TECH_ESOTERIC - level = 0 - -/obj/item/disk/tech_disk - name = "fabricator data disk" - desc = "A disk for storing fabricator learning data for backup." - icon = 'icons/obj/cloning.dmi' - icon_state = "datadisk2" - item_state = "card-id" - w_class = ITEM_SIZE_SMALL - matter = list(MATERIAL_PLASTIC = 30, MATERIAL_STEEL = 30, MATERIAL_GLASS = 10) - var/datum/tech/stored - - -/obj/item/disk/design_disk - name = "component design disk" - desc = "A disk for storing device design data for construction in lathes." - icon = 'icons/obj/cloning.dmi' - icon_state = "datadisk2" - item_state = "card-id" - w_class = ITEM_SIZE_SMALL - matter = list(MATERIAL_PLASTIC = 30, MATERIAL_STEEL = 30, MATERIAL_GLASS = 10) - var/datum/design/blueprint diff --git a/code/modules/research/server.dm b/code/modules/research/server.dm deleted file mode 100644 index ac052a4ddfc56..0000000000000 --- a/code/modules/research/server.dm +++ /dev/null @@ -1,283 +0,0 @@ -/obj/machinery/r_n_d/server - name = "R&D Server" - icon = 'icons/obj/machines/research.dmi' - icon_state = "server" - base_type = /obj/machinery/r_n_d/server - construct_state = /decl/machine_construction/default/panel_closed - machine_name = "\improper R&D server" - machine_desc = "A powerful piece of hardware used as the hub of a research matrix, containing every byte of data gleaned from an experiment." - var/datum/research/files - var/health = 100 - var/list/id_with_upload = list() //List of R&D consoles with upload to server access. - var/list/id_with_download = list() //List of R&D consoles with download from server access. - var/id_with_upload_string = "" //String versions for easy editing in map editor. - var/id_with_download_string = "" - var/server_id = 0 - var/produces_heat = 1 - idle_power_usage = 800 - var/delay = 10 - req_access = list(access_rd) //Only the R&D can change server settings. - -/obj/machinery/r_n_d/server/RefreshParts() - var/tot_rating = 0 - for(var/obj/item/stock_parts/SP in src) - tot_rating += SP.rating - change_power_consumption(initial(idle_power_usage)/max(1, tot_rating), POWER_USE_IDLE) - -/obj/machinery/r_n_d/server/Initialize() - . = ..() - if(!files) - files = new /datum/research(src) - var/list/temp_list - if(!id_with_upload.len) - temp_list = list() - temp_list = splittext(id_with_upload_string, ";") - for(var/N in temp_list) - id_with_upload += text2num(N) - if(!id_with_download.len) - temp_list = list() - temp_list = splittext(id_with_download_string, ";") - for(var/N in temp_list) - id_with_download += text2num(N) - -/obj/machinery/r_n_d/server/Process() - ..() - var/datum/gas_mixture/environment = loc.return_air() - switch(environment.temperature) - if(0 to T0C) - health = min(100, health + 1) - if(T0C to (T20C + 20)) - health = clamp(health, 0, 100) - if((T20C + 20) to (T0C + 70)) - health = max(0, health - 1) - if(health <= 0) - files.known_designs = list() - for(var/datum/tech/T in files.known_tech) - if(prob(1)) - T.level-- - files.RefreshResearch() - if(delay) - delay-- - else - produce_heat() - delay = initial(delay) - -/obj/machinery/r_n_d/server/proc/produce_heat() - if(!produces_heat) - return - - if(!use_power) - return - - if(!(stat & (NOPOWER|BROKEN))) //Blatently stolen from telecoms - var/turf/simulated/L = loc - if(istype(L)) - var/datum/gas_mixture/env = L.return_air() - - var/transfer_moles = 0.25 * env.total_moles - - var/datum/gas_mixture/removed = env.remove(transfer_moles) - - if(removed) - var/heat_produced = idle_power_usage //obviously can't produce more heat than the machine draws from it's power source - - removed.add_thermal_energy(heat_produced) - - env.merge(removed) - -/obj/machinery/r_n_d/server/centcom - name = "Central R&D Database" - server_id = -1 - -/obj/machinery/r_n_d/server/centcom/proc/update_connections() - var/list/no_id_servers = list() - var/list/server_ids = list() - for(var/obj/machinery/r_n_d/server/S in SSmachines.machinery) - switch(S.server_id) - if(-1) - continue - if(0) - no_id_servers += S - else - server_ids += S.server_id - - for(var/obj/machinery/r_n_d/server/S in no_id_servers) - var/num = 1 - while(!S.server_id) - if(num in server_ids) - num++ - else - S.server_id = num - server_ids += num - no_id_servers -= S - -/obj/machinery/r_n_d/server/centcom/Process() - return PROCESS_KILL //don't need process() - -/obj/machinery/computer/rdservercontrol - name = "R&D Server Controller" - icon_keyboard = "rd_key" - icon_screen = "rdcomp" - light_color = "#a97faa" - machine_name = "\improper R&D server control console" - machine_desc = "If an R&D server is the heart of a research setup, this is the brain. Any kind of data manipulation on the server happens from this console." - var/screen = 0 - var/obj/machinery/r_n_d/server/temp_server - var/list/servers = list() - var/list/consoles = list() - var/badmin = 0 - -/obj/machinery/computer/rdservercontrol/CanUseTopic(user) - if(!allowed(user) && !emagged) - to_chat(user, "You do not have the required access level") - return STATUS_CLOSE - return ..() - -/obj/machinery/computer/rdservercontrol/OnTopic(user, href_list, state) - if(href_list["main"]) - screen = 0 - . = TOPIC_REFRESH - - else if(href_list["access"] || href_list["data"] || href_list["transfer"]) - temp_server = null - consoles = list() - servers = list() - for(var/obj/machinery/r_n_d/server/S in SSmachines.machinery) - 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 SSmachines.machinery) - 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 SSmachines.machinery) - if(S == src) - continue - servers += S - . = TOPIC_REFRESH - - else if(href_list["upload_toggle"]) - var/num = text2num(href_list["upload_toggle"]) - if(num in temp_server.id_with_upload) - temp_server.id_with_upload -= num - else - temp_server.id_with_upload += num - . = TOPIC_REFRESH - - else if(href_list["download_toggle"]) - var/num = text2num(href_list["download_toggle"]) - if(num in temp_server.id_with_download) - temp_server.id_with_download -= num - else - temp_server.id_with_download += num - . = TOPIC_REFRESH - - else if(href_list["reset_tech"]) - var/choice = alert(user, "Technology Data Reset", "Are you sure you want to reset this technology to its default data? Data lost cannot be recovered.", "Continue", "Cancel") - if(choice == "Continue" && CanUseTopic(user, state)) - for(var/datum/tech/T in temp_server.files.known_tech) - if(T.level > 0 && T.id == href_list["reset_tech"]) - T.level = 1 - break - temp_server.files.RefreshResearch() - . = TOPIC_REFRESH - - else if(href_list["reset_design"]) - var/choice = alert(user, "Design Data Deletion", "Are you sure you want to delete this design? If you still have the prerequisites for the design, it'll reset to its base reliability. Data lost cannot be recovered.", "Continue", "Cancel") - if(choice == "Continue" && CanUseTopic(user, state)) - for(var/datum/design/D in temp_server.files.known_designs) - if(D.id == href_list["reset_design"]) - temp_server.files.known_designs -= D - break - temp_server.files.RefreshResearch() - . = TOPIC_REFRESH - -/obj/machinery/computer/rdservercontrol/interface_interact(mob/user) - interact(user) - return TRUE - -/obj/machinery/computer/rdservercontrol/interact(mob/user) - user.set_machine(src) - var/dat = "" - - switch(screen) - if(0) //Main Menu - dat += "Connected Servers:

                  " - var/turf/T = get_turf(src) - for(var/obj/machinery/r_n_d/server/S in SSmachines.machinery) - var/turf/ST = get_turf(S) - if((istype(S, /obj/machinery/r_n_d/server/centcom) && !badmin) || (ST && !AreConnectedZLevels(ST.z, T.z))) - continue - dat += "[S.name] || " - dat += " Access Rights | " - dat += "Data Management" - if(badmin) dat += " | Server-to-Server Transfer" - dat += "
                  " - - if(1) //Access rights menu - dat += "[temp_server.name] Access Rights

                  " - dat += "Consoles with Upload Access
                  " - for(var/obj/machinery/computer/rdconsole/C in consoles) - var/turf/console_turf = get_turf(C) - dat += "* [console_turf.loc]" //FYI, these are all numeric ids, eventually. - if(C.id in temp_server.id_with_upload) - dat += " (Remove)
                  " - else - dat += " (Add)
                  " - dat += "Consoles with Download Access
                  " - for(var/obj/machinery/computer/rdconsole/C in consoles) - var/turf/console_turf = get_turf(C) - dat += "* [console_turf.loc]" - if(C.id in temp_server.id_with_download) - dat += " (Remove)
                  " - else - dat += " (Add)
                  " - dat += "
                  Main Menu" - - if(2) //Data Management menu - dat += "[temp_server.name] Data ManagementP

                  " - dat += "Known Technologies
                  " - for(var/datum/tech/T in temp_server.files.known_tech) - dat += "* [T.name] " - dat += "(Reset)
                  " //FYI, these are all strings. - dat += "Known Designs
                  " - for(var/datum/design/D in temp_server.files.known_designs) - dat += "* [D.name] " - dat += "(Delete)
                  " - dat += "
                  Main Menu" - - if(3) //Server Data Transfer - dat += "[temp_server.name] Server to Server Transfer

                  " - dat += "Send Data to what server?
                  " - for(var/obj/machinery/r_n_d/server/S in servers) - dat += "[S.name] (Transfer)
                  " - dat += "
                  Main Menu" - show_browser(user, "R&D Server Control
                  [dat]", "window=server_control;size=575x400") - onclose(user, "server_control") - return - -/obj/machinery/computer/rdservercontrol/emag_act(var/remaining_charges, var/mob/user) - if(!emagged) - playsound(src.loc, 'sound/effects/sparks4.ogg', 75, 1) - emagged = TRUE - req_access.Cut() - to_chat(user, "You you disable the security protocols.") - src.updateUsrDialog() - return 1 - -/obj/machinery/r_n_d/server/robotics - name = "Robotics R&D Server" - id_with_upload_string = "1;2" - id_with_download_string = "1;2" - server_id = 2 - -/obj/machinery/r_n_d/server/core - name = "Core R&D Server" - id_with_upload_string = "1;3" - id_with_download_string = "1;3" - server_id = 1 diff --git a/code/modules/security levels/keycard authentication.dm b/code/modules/security levels/keycard authentication.dm deleted file mode 100644 index 3df87ac67d680..0000000000000 --- a/code/modules/security levels/keycard authentication.dm +++ /dev/null @@ -1,179 +0,0 @@ -/obj/machinery/keycard_auth - name = "Keycard Authentication Device" - desc = "This device is used to trigger functions which require more than one ID card to authenticate." - icon = 'icons/obj/monitors.dmi' - icon_state = "auth_off" - var/active = 0 //This gets set to 1 on all devices except the one where the initial request was made. - var/event = "" - var/screen = 1 - var/confirmed = 0 //This variable is set by the device that confirms the request. - var/confirm_delay = 3 SECONDS - var/busy = 0 //Busy when waiting for authentication or an event request has been sent from this device. - var/obj/machinery/keycard_auth/event_source - var/mob/event_triggered_by - var/mob/event_confirmed_by - //1 = select event - //2 = authenticate - anchored = TRUE - idle_power_usage = 2 - active_power_usage = 6 - power_channel = ENVIRON - -/obj/machinery/keycard_auth/attack_ai(mob/user as mob) - to_chat(user, "A firewall prevents you from interfacing with this device!") - return - -/obj/machinery/keycard_auth/attackby(obj/item/W as obj, mob/user as mob) - if(stat & (NOPOWER|BROKEN)) - to_chat(user, "This device is not powered.") - return - if(istype(W,/obj/item/card/id)) - var/obj/item/card/id/ID = W - if(access_keycard_auth in ID.access) - if(active == 1) - //This is not the device that made the initial request. It is the device confirming the request. - if(event_source && event_source.event_triggered_by != usr) - event_source.confirmed = 1 - event_source.event_confirmed_by = usr - else - to_chat(user, "Unable to confirm, DNA matches that of origin.") - else if(screen == 2) - event_triggered_by = usr - broadcast_request() //This is the device making the initial event request. It needs to broadcast to other devices - -//icon_state gets set everwhere besides here, that needs to be fixed sometime -/obj/machinery/keycard_auth/on_update_icon() - if(stat &NOPOWER) - icon_state = "auth_off" - -/obj/machinery/keycard_auth/interface_interact(mob/user) - if(busy) - to_chat(user, "This device is busy.") - return TRUE - interact(user) - return TRUE - -/obj/machinery/keycard_auth/interact(mob/user) - user.set_machine(src) - - var/dat = "

                  Keycard Authentication Device

                  " - - dat += "This device is used to trigger some high security events. It requires the simultaneous swipe of two high-level ID cards." - dat += "


                  " - - if(screen == 1) - dat += "Select an event to trigger:" - show_browser(user, dat, "window=keycard_auth;size=500x250") - if(screen == 2) - dat += "Please swipe your card to authorize the following event: [event]" - dat += "

                  Back" - show_browser(user, dat, "window=keycard_auth;size=500x250") - return - -/obj/machinery/keycard_auth/CanUseTopic(var/mob/user, href_list) - if(busy) - to_chat(user, "This device is busy.") - return STATUS_CLOSE - if(!user.IsAdvancedToolUser()) - to_chat(user, FEEDBACK_YOU_LACK_DEXTERITY) - return min(..(), STATUS_UPDATE) - return ..() - -/obj/machinery/keycard_auth/OnTopic(user, href_list) - if(href_list["triggerevent"]) - event = href_list["triggerevent"] - screen = 2 - . = TOPIC_REFRESH - if(href_list["reset"]) - reset() - . = TOPIC_REFRESH - - if(. == TOPIC_REFRESH) - attack_hand(user) - -/obj/machinery/keycard_auth/proc/reset() - active = 0 - event = "" - screen = 1 - confirmed = 0 - event_source = null - icon_state = "auth_off" - event_triggered_by = null - event_confirmed_by = null - -/obj/machinery/keycard_auth/proc/broadcast_request() - icon_state = "auth_on" - for(var/obj/machinery/keycard_auth/KA in world) - if(KA == src) continue - KA.reset() - spawn() - KA.receive_request(src) - - sleep(confirm_delay) - if(confirmed) - confirmed = 0 - trigger_event(event) - log_and_message_admins("triggered and [key_name(event_confirmed_by)] confirmed event [event]", event_triggered_by || usr) - reset() - -/obj/machinery/keycard_auth/proc/receive_request(var/obj/machinery/keycard_auth/source) - if(stat & (BROKEN|NOPOWER)) - return - event_source = source - busy = 1 - active = 1 - icon_state = "auth_on" - - sleep(confirm_delay) - - event_source = null - icon_state = "auth_off" - active = 0 - busy = 0 - -/obj/machinery/keycard_auth/proc/trigger_event() - switch(event) - if("Red alert") - var/decl/security_state/security_state = decls_repository.get_decl(GLOB.using_map.security_state) - security_state.stored_security_level = security_state.current_security_level - security_state.set_security_level(security_state.high_security_level) - if("Revert alert") - var/decl/security_state/security_state = decls_repository.get_decl(GLOB.using_map.security_state) - security_state.set_security_level(security_state.stored_security_level) - if("Grant Emergency Maintenance Access") - GLOB.using_map.make_maint_all_access() - if("Revoke Emergency Maintenance Access") - GLOB.using_map.revoke_maint_all_access() - if("Emergency Response Team") - if(is_ert_blocked()) - to_chat(usr, "All emergency response teams are dispatched and can not be called at this time.") - return - - trigger_armed_response_team(1) - if("Grant Nuclear Authorization Code") - var/obj/machinery/nuclearbomb/nuke = locate(/obj/machinery/nuclearbomb/station) in world - if(nuke) - to_chat(usr, "The nuclear authorization code is [nuke.r_code]") - else - to_chat(usr, "No self destruct terminal found.") - -/obj/machinery/keycard_auth/proc/is_ert_blocked() - if(config.ert_admin_call_only) return 1 - return SSticker.mode && SSticker.mode.ert_disabled diff --git a/code/modules/shield_generators/floor_diffuser.dm b/code/modules/shield_generators/floor_diffuser.dm deleted file mode 100644 index 89a3c6efbd7e1..0000000000000 --- a/code/modules/shield_generators/floor_diffuser.dm +++ /dev/null @@ -1,69 +0,0 @@ -/obj/machinery/shield_diffuser - name = "shield diffuser" - desc = "A small underfloor device specifically designed to disrupt energy barriers." - icon = 'icons/obj/machines/shielding.dmi' - icon_state = "fdiffuser_on" - use_power = POWER_USE_ACTIVE - idle_power_usage = 100 - active_power_usage = 2000 - anchored = TRUE - density = FALSE - level = 1 - construct_state = /decl/machine_construction/default/panel_closed - uncreated_component_parts = null - stat_immune = 0 - - machine_name = "shield diffuser" - machine_desc = "These floor-mounted devices prevent formation of shields above them, and are typically placed near front of external airlocks." - - var/alarm = 0 - var/enabled = 1 - -/obj/machinery/shield_diffuser/Process() - if(alarm) - alarm-- - if(!alarm) - update_icon() - return - - if(!enabled) - return - for(var/direction in GLOB.cardinal) - var/turf/simulated/shielded_tile = get_step(get_turf(src), direction) - for(var/obj/effect/shield/S in shielded_tile) - S.diffuse(5) - -/obj/machinery/shield_diffuser/on_update_icon() - if(alarm) - icon_state = "fdiffuser_emergency" - return - if((stat & (NOPOWER | BROKEN)) || !enabled) - icon_state = "fdiffuser_off" - else - icon_state = "fdiffuser_on" - -/obj/machinery/shield_diffuser/interface_interact(mob/user) - if(!CanInteract(user, DefaultTopicState())) - return FALSE - if(alarm) - to_chat(user, "You press an override button on \the [src], re-enabling it.") - alarm = 0 - update_icon() - return TRUE - enabled = !enabled - update_use_power(enabled + 1) - update_icon() - to_chat(user, "You turn \the [src] [enabled ? "on" : "off"].") - return TRUE - -/obj/machinery/shield_diffuser/proc/meteor_alarm(var/duration) - if(!duration) - return - alarm = round(max(alarm, duration)) - update_icon() - -/obj/machinery/shield_diffuser/examine(mob/user) - . = ..() - to_chat(user, "It is [enabled ? "enabled" : "disabled"].") - if(alarm) - to_chat(user, "A red LED labeled \"Proximity Alarm\" is blinking on the control panel.") diff --git a/code/modules/shield_generators/handheld_diffuser.dm b/code/modules/shield_generators/handheld_diffuser.dm deleted file mode 100644 index f9702d408f90c..0000000000000 --- a/code/modules/shield_generators/handheld_diffuser.dm +++ /dev/null @@ -1,52 +0,0 @@ -/obj/item/shield_diffuser - name = "portable shield diffuser" - desc = "A small handheld device designed to disrupt energy barriers." - icon = 'icons/obj/machines/shielding.dmi' - icon_state = "hdiffuser_off" - origin_tech = list(TECH_MAGNET = 5, TECH_POWER = 5, TECH_ESOTERIC = 2) - var/obj/item/cell/device/cell - var/enabled = 0 - -/obj/item/shield_diffuser/on_update_icon() - if(enabled) - icon_state = "hdiffuser_on" - else - icon_state = "hdiffuser_off" - -/obj/item/shield_diffuser/New() - cell = new(src) - ..() - -/obj/item/shield_diffuser/Destroy() - QDEL_NULL(cell) - if(enabled) - STOP_PROCESSING(SSobj, src) - . = ..() - -/obj/item/shield_diffuser/get_cell() - return cell - -/obj/item/shield_diffuser/Process() - if(!enabled) - return - - for(var/direction in GLOB.cardinal) - var/turf/simulated/shielded_tile = get_step(get_turf(src), direction) - for(var/obj/effect/shield/S in shielded_tile) - // 10kJ per pulse, but gap in the shield lasts for longer than regular diffusers. - if(istype(S) && !S.diffused_for && !S.disabled_for && cell.checked_use(10 KILOWATTS * CELLRATE)) - S.diffuse(20) - -/obj/item/shield_diffuser/attack_self() - enabled = !enabled - update_icon() - if(enabled) - START_PROCESSING(SSobj, src) - else - STOP_PROCESSING(SSobj, src) - to_chat(usr, "You turn \the [src] [enabled ? "on" : "off"].") - -/obj/item/shield_diffuser/examine(mob/user) - . = ..() - to_chat(user, "The charge meter reads [cell ? cell.percent() : 0]%") - to_chat(user, "It is [enabled ? "enabled" : "disabled"].") diff --git a/code/modules/shield_generators/modes.dm b/code/modules/shield_generators/modes.dm deleted file mode 100644 index f9d0fe67257e8..0000000000000 --- a/code/modules/shield_generators/modes.dm +++ /dev/null @@ -1,83 +0,0 @@ -// Definitions for shield modes. Names, descriptions and power usage multipliers can be changed here. -// Do not change the mode_flag variables without a good reason! - -/datum/shield_mode - var/mode_name // User-friendly name of this mode. - var/mode_desc // A short description of what the mode does. - var/mode_flag // Mode bitflag. See defines file. - var/multiplier // Energy usage multiplier. Each enabled mode multiplies upkeep power usage by this number. Values between 1-2 are good balance-wise. Hacked modes can go up to 3-4 - var/hacked_only = 0 // Set to 1 to allow usage of this shield mode only on hacked generators. - -/datum/shield_mode/hyperkinetic - mode_name = "Hyperkinetic Projectiles" - mode_desc = "This mode blocks various fast moving physical objects, such as bullets, blunt weapons, meteors and other." - mode_flag = MODEFLAG_HYPERKINETIC - multiplier = 1.2 - -/datum/shield_mode/photonic - mode_name = "Photonic Dispersion" - mode_desc = "This mode blocks majority of light. This includes beam weaponry and most of the visible light spectrum." - mode_flag = MODEFLAG_PHOTONIC - multiplier = 1.3 - -/datum/shield_mode/em - mode_name = "Electro-Magnetic Shielding" - mode_desc = "This mode blocks various high-power emissions like electrical storms." - mode_flag = MODEFLAG_EM - multiplier = 1.3 - -/datum/shield_mode/humanoids - mode_name = "Humanoid Lifeforms" - mode_desc = "This mode blocks various humanoid lifeforms. Does not affect fully synthetic humanoids." - mode_flag = MODEFLAG_HUMANOIDS - multiplier = 1.5 - -/datum/shield_mode/silicon - mode_name = "Silicon Lifeforms" - mode_desc = "This mode blocks various silicon based lifeforms." - mode_flag = MODEFLAG_ANORGANIC - multiplier = 1.5 - -/datum/shield_mode/mobs - mode_name = "Unknown Lifeforms" - mode_desc = "This mode blocks various other non-humanoid and non-silicon lifeforms. Typical uses include blocking carps." - mode_flag = MODEFLAG_NONHUMANS - multiplier = 1.5 - -/datum/shield_mode/atmosphere - mode_name = "Atmospheric Containment" - mode_desc = "This mode blocks air flow and acts as atmosphere containment." - mode_flag = MODEFLAG_ATMOSPHERIC - multiplier = 1.3 - -/datum/shield_mode/hull - mode_name = "Hull Shielding" - mode_desc = "This mode recalibrates the field to cover surface of the installation instead of projecting a bubble shaped field." - mode_flag = MODEFLAG_HULL - multiplier = 1 - -/datum/shield_mode/adaptive - mode_name = "Adaptive Field Harmonics" - mode_desc = "This mode modulates the shield harmonic frequencies, allowing the field to adapt to various damage types." - mode_flag = MODEFLAG_MODULATE - multiplier = 2 - -/datum/shield_mode/bypass - mode_name = "Diffuser Bypass" - mode_desc = "This mode disables the built-in safeties which allows the generator to counter effect of various shield diffusers. This tends to create a very large strain on the generator. Does not work with enabled safety protocols." - mode_flag = MODEFLAG_BYPASS - multiplier = 3 - hacked_only = 1 - -/datum/shield_mode/overcharge - mode_name = "Field Overcharge" - mode_desc = "This mode polarises the field, causing damage on contact. Does not work with enabled safety protocols." - mode_flag = MODEFLAG_OVERCHARGE - multiplier = 3 - hacked_only = 1 - -/datum/shield_mode/multiz - mode_name = "Multi-Dimensional Field Warp" - mode_desc = "Recalibrates the field projection array to increase the vertical height of the field, allowing it's usage on multi-deck stations or ships." - mode_flag = MODEFLAG_MULTIZ - multiplier = 1 \ No newline at end of file diff --git a/code/modules/shield_generators/shield.dm b/code/modules/shield_generators/shield.dm deleted file mode 100644 index 61f367bd72579..0000000000000 --- a/code/modules/shield_generators/shield.dm +++ /dev/null @@ -1,343 +0,0 @@ -/obj/effect/shield - name = "energy shield" - desc = "An impenetrable field of energy, capable of blocking anything as long as it's active." - icon = 'icons/obj/machines/shielding.dmi' - icon_state = "shield_normal" - anchored = TRUE - layer = ABOVE_HUMAN_LAYER - density = TRUE - invisibility = 0 - var/obj/machinery/power/shield_generator/gen = null - var/disabled_for = 0 - var/diffused_for = 0 - atmos_canpass = CANPASS_PROC - - -/obj/effect/shield/on_update_icon() - if(gen && gen.check_flag(MODEFLAG_PHOTONIC) && !disabled_for && !diffused_for) - set_opacity(1) - else - set_opacity(0) - - if (!gen) - color = COLOR_RED_LIGHT - else if (gen.check_flag(MODEFLAG_OVERCHARGE)) - color = COLOR_VIOLET - else - color = COLOR_DEEP_SKY_BLUE - -// Prevents shuttles, singularities and pretty much everything else from moving the field segments away. -// The only thing that is allowed to move us is the Destroy() proc. -/obj/effect/shield/forceMove() - if(QDELING(src)) - return ..() - return 0 - - -/obj/effect/shield/New() - ..() - update_nearby_tiles() - - -/obj/effect/shield/Initialize(mapload, obj/machinery/power/shield_generator/new_gen) - . = ..(mapload) - - if (QDELETED(new_gen)) - log_debug(append_admin_tools("Shield effect ([name]) was created without a valid generator in [get_area(src)].", location = get_turf(src))) - return INITIALIZE_HINT_QDEL - gen = new_gen - - -/obj/effect/shield/Destroy() - . = ..() - if(gen) - if(src in gen.field_segments) - gen.field_segments -= src - if(src in gen.damaged_segments) - gen.damaged_segments -= src - gen = null - update_nearby_tiles() - forceMove(null, 1) - - -// Temporarily collapses this shield segment. -/obj/effect/shield/proc/fail(var/duration) - if(duration <= 0) - return - - if(gen) - gen.damaged_segments |= src - disabled_for += duration - set_density(0) - set_invisibility(INVISIBILITY_MAXIMUM) - update_nearby_tiles() - update_icon() - update_explosion_resistance() - - -// Regenerates this shield segment. -/obj/effect/shield/proc/regenerate() - if(!gen) - return - - disabled_for = max(0, disabled_for - 1) - diffused_for = max(0, diffused_for - 1) - - if(!disabled_for && !diffused_for) - set_density(1) - set_invisibility(0) - update_nearby_tiles() - update_icon() - update_explosion_resistance() - gen.damaged_segments -= src - - -/obj/effect/shield/proc/diffuse(var/duration) - if (!gen) - return - - // The shield is trying to counter diffusers. Cause lasting stress on the shield. - if(gen.check_flag(MODEFLAG_BYPASS) && !disabled_for) - take_damage(duration * rand(8, 12), SHIELD_DAMTYPE_EM) - return - - diffused_for = max(duration, 0) - gen.damaged_segments |= src - set_density(0) - set_invisibility(INVISIBILITY_MAXIMUM) - update_nearby_tiles() - update_icon() - update_explosion_resistance() - -/obj/effect/shield/attack_generic(var/source, var/damage, var/emote) - take_damage(damage, SHIELD_DAMTYPE_PHYSICAL) - if(gen?.check_flag(MODEFLAG_OVERCHARGE) && istype(source, /mob/living)) - overcharge_shock(source) - ..(source, damage, emote) - - -// Fails shield segments in specific range. Range of 1 affects the shielded turf only. -/obj/effect/shield/proc/fail_adjacent_segments(var/range, var/hitby = null) - if(hitby) - visible_message("\The [src] flashes a bit as \the [hitby] collides with it, eventually fading out in a rain of sparks!") - else - visible_message("\The [src] flashes a bit as it eventually fades out in a rain of sparks!") - fail(range * 2) - - for(var/obj/effect/shield/S in range(range, src)) - // Don't affect shields owned by other shield generators - if(S.gen != src.gen) - continue - // The closer we are to impact site, the longer it takes for shield to come back up. - S.fail(-(-range + get_dist(src, S)) * 2) - -/obj/effect/shield/proc/take_damage(var/damage, var/damtype, var/hitby) - if(!gen) - qdel(src) - return - - if(!damage) - return - - damage = round(damage) - - new /obj/effect/temporary(get_turf(src), 2 SECONDS,'icons/obj/machines/shielding.dmi',"shield_impact") - impact_effect(round(abs(damage * 2))) - - var/list/field_segments = gen.field_segments - switch(gen.take_damage(damage, damtype)) - if(SHIELD_ABSORBED) - return - if(SHIELD_BREACHED_MINOR) - fail_adjacent_segments(rand(1, 3), hitby) - return - if(SHIELD_BREACHED_MAJOR) - fail_adjacent_segments(rand(2, 5), hitby) - return - if(SHIELD_BREACHED_CRITICAL) - fail_adjacent_segments(rand(4, 8), hitby) - return - if(SHIELD_BREACHED_FAILURE) - fail_adjacent_segments(rand(8, 16), hitby) - for(var/obj/effect/shield/S in field_segments) - S.fail(1) - return - - -// As we have various shield modes, this handles whether specific things can pass or not. -/obj/effect/shield/CanPass(var/atom/movable/mover, var/turf/target, var/height=0, var/air_group=0) - // Somehow we don't have a generator. This shouldn't happen. Delete the shield. - if(!gen) - qdel(src) - return 1 - - if(disabled_for || diffused_for) - return 1 - - // Atmosphere containment. - if(air_group) - return !gen.check_flag(MODEFLAG_ATMOSPHERIC) - - if(mover) - return mover.can_pass_shield(gen) - return 1 - - -/obj/effect/shield/c_airblock(turf/other) - return gen?.check_flag(MODEFLAG_ATMOSPHERIC) ? BLOCKED : 0 - - -// EMP. It may seem weak but keep in mind that multiple shield segments are likely to be affected. -/obj/effect/shield/emp_act(var/severity) - if(!disabled_for) - take_damage(rand(30,60) / severity, SHIELD_DAMTYPE_EM) - ..() - - -// Explosions -/obj/effect/shield/ex_act(var/severity) - if(!disabled_for) - take_damage(rand(10,15) / severity, SHIELD_DAMTYPE_PHYSICAL) - - -// Fire -/obj/effect/shield/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume) - if(!disabled_for) - take_damage(rand(5,10), SHIELD_DAMTYPE_HEAT) - - -// Projectiles -/obj/effect/shield/bullet_act(var/obj/item/projectile/proj) - if (proj.damage_type == DAMAGE_BURN) - take_damage(proj.get_structure_damage(), SHIELD_DAMTYPE_HEAT) - else if (proj.damage_type == DAMAGE_BRUTE) - take_damage(proj.get_structure_damage(), SHIELD_DAMTYPE_PHYSICAL) - else - take_damage(proj.get_structure_damage(), SHIELD_DAMTYPE_EM) - - -// Attacks with hand tools. Blocked by Hyperkinetic flag. -/obj/effect/shield/attackby(var/obj/item/I as obj, var/mob/user as mob) - user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN) - user.do_attack_animation(src) - - if(gen.check_flag(MODEFLAG_HYPERKINETIC)) - user.visible_message("\The [user] hits \the [src] with \the [I]!") - if (I.damtype == DAMAGE_BURN) - take_damage(I.force, SHIELD_DAMTYPE_HEAT) - else if (I.damtype == DAMAGE_BRUTE) - take_damage(I.force, SHIELD_DAMTYPE_PHYSICAL) - else - take_damage(I.force, SHIELD_DAMTYPE_EM) - else - user.visible_message("\The [user] tries to attack \the [src] with \the [I], but it passes through!") - - -// Special treatment for meteors because they would otherwise penetrate right through the shield. -/obj/effect/shield/Bumped(var/atom/movable/mover) - if(!gen) - qdel(src) - return 0 - impact_effect(2) - mover.shield_impact(src) - return ..() - - -/obj/effect/shield/proc/overcharge_shock(var/mob/living/M) - M.adjustFireLoss(rand(20, 40)) - M.Weaken(5) - to_chat(M, "As you come into contact with \the [src] a surge of energy paralyses you!") - take_damage(10, SHIELD_DAMTYPE_EM) - -// Called when a flag is toggled. Can be used to add on-toggle behavior, such as visual changes. -/obj/effect/shield/proc/flags_updated() - if(!gen) - qdel(src) - return - - // Update airflow - update_nearby_tiles() - update_icon() - update_explosion_resistance() - -/obj/effect/shield/proc/update_explosion_resistance() - if(gen && gen.check_flag(MODEFLAG_HYPERKINETIC)) - explosion_resistance = INFINITY - else - explosion_resistance = 0 - -/obj/effect/shield/get_explosion_resistance() - return explosion_resistance - -// Shield collision checks below - -/atom/movable/proc/can_pass_shield(var/obj/machinery/power/shield_generator/gen) - return 1 - - -// Other mobs -/mob/living/can_pass_shield(var/obj/machinery/power/shield_generator/gen) - return !gen.check_flag(MODEFLAG_NONHUMANS) - -// Human mobs -/mob/living/carbon/human/can_pass_shield(var/obj/machinery/power/shield_generator/gen) - if(isSynthetic()) - return !gen.check_flag(MODEFLAG_ANORGANIC) - return !gen.check_flag(MODEFLAG_HUMANOIDS) - -// Silicon mobs -/mob/living/silicon/can_pass_shield(var/obj/machinery/power/shield_generator/gen) - return !gen.check_flag(MODEFLAG_ANORGANIC) - - -// Generic objects. Also applies to bullets and meteors. -/obj/can_pass_shield(var/obj/machinery/power/shield_generator/gen) - return !gen.check_flag(MODEFLAG_HYPERKINETIC) - -// Beams -/obj/item/projectile/beam/can_pass_shield(var/obj/machinery/power/shield_generator/gen) - return !gen.check_flag(MODEFLAG_PHOTONIC) - - -// Shield on-impact logic here. This is called only if the object is actually blocked by the field (can_pass_shield applies first) -/atom/movable/proc/shield_impact(var/obj/effect/shield/S) - return - -/mob/living/shield_impact(var/obj/effect/shield/S) - if(!S.gen.check_flag(MODEFLAG_OVERCHARGE)) - return - S.overcharge_shock(src) - -/obj/effect/meteor/shield_impact(var/obj/effect/shield/S) - if(!S.gen.check_flag(MODEFLAG_HYPERKINETIC)) - return - S.take_damage(get_shield_damage(), SHIELD_DAMTYPE_PHYSICAL, src) - visible_message("\The [src] breaks into dust!") - make_debris() - qdel(src) - -// Small visual effect, makes the shield tiles brighten up by changing color for a moment, and spreads to nearby shields. -/obj/effect/shield/proc/impact_effect(var/i, var/list/affected_shields = list()) - i = clamp(i, 1, 10) - var/backcolor = color - if(gen && gen.check_flag(MODEFLAG_OVERCHARGE)) - color = COLOR_PINK - else - color = COLOR_CYAN_BLUE - animate(src, color = backcolor, time = 1 SECOND) - affected_shields |= src - i-- - if(i) - addtimer(CALLBACK(src, .proc/spread_impact_effect, i, affected_shields), 2) - -/obj/effect/shield/proc/spread_impact_effect(var/i, var/list/affected_shields = list()) - for(var/direction in GLOB.cardinal) - var/turf/T = get_step(src, direction) - if(T) // Incase we somehow stepped off the map. - for(var/obj/effect/shield/F in T) - if(!(F in affected_shields)) - F.impact_effect(i, affected_shields) // Spread the effect to them - -/obj/effect/shield/attack_hand(var/mob/living/user) - impact_effect(3) // Harmless, but still produces the 'impact' effect. - ..() diff --git a/code/modules/shield_generators/shield_generator.dm b/code/modules/shield_generators/shield_generator.dm deleted file mode 100644 index 1a3e5ecb71e5d..0000000000000 --- a/code/modules/shield_generators/shield_generator.dm +++ /dev/null @@ -1,521 +0,0 @@ -/obj/machinery/power/shield_generator - name = "advanced shield generator" - desc = "A heavy-duty shield generator and capacitor, capable of generating energy shields at large distances." - icon = 'icons/obj/machines/shielding.dmi' - icon_state = "generator0" - density = TRUE - base_type = /obj/machinery/power/shield_generator - construct_state = /decl/machine_construction/default/panel_closed - wires = /datum/wires/shield_generator - uncreated_component_parts = null - stat_immune = 0 - machine_name = "advanced shield generator" - machine_desc = "A powerful energy projector that uses huge amounts of power to form a large sheath of shielding force around an area." - var/list/field_segments = list() // List of all shield segments owned by this generator. - var/list/damaged_segments = list() // List of shield segments that have failed and are currently regenerating. - var/shield_modes = 0 // Enabled shield mode flags - var/mitigation_em = 0 // Current EM mitigation - var/mitigation_physical = 0 // Current Physical mitigation - var/mitigation_heat = 0 // Current Burn mitigation - var/mitigation_max = 0 // Maximal mitigation reachable with this generator. Set by RefreshParts() - var/max_energy = 0 // Maximal stored energy. In joules. Depends on the type of used SMES coil when constructing this generator. - var/current_energy = 0 // Current stored energy. - var/field_radius = 1 // Current field radius. - var/target_radius = 1 // Desired field radius. - var/running = SHIELD_OFF // Whether the generator is enabled or not. - var/input_cap = 1 MEGAWATTS // Currently set input limit. Set to 0 to disable limits altogether. The shield will try to input this value per tick at most - var/upkeep_power_usage = 0 // Upkeep power usage last tick. - var/upkeep_multiplier = 1 // Multiplier of upkeep values. - var/power_usage = 0 // Total power usage last tick. - var/overloaded = 0 // Whether the field has overloaded and shut down to regenerate. - var/hacked = 0 // Whether the generator has been hacked by cutting the safety wire. - var/offline_for = 0 // The generator will be inoperable for this duration in ticks. - var/input_cut = 0 // Whether the input wire is cut. - var/mode_changes_locked = 0 // Whether the control wire is cut, locking out changes. - var/ai_control_disabled = 0 // Whether the AI control is disabled. - var/list/mode_list = null // A list of shield_mode datums. - var/full_shield_strength = 0 // The amount of power shields need to be at full operating strength. - var/vessel_reverse_dir = EAST // Reverse dir of our vessel - - var/idle_multiplier = 1 // Trades off cost vs. spin-up time from idle to running - var/idle_valid_values = list(1, 2, 5, 10) - var/spinup_delay = 20 - var/spinup_counter = 0 - -/obj/machinery/power/shield_generator/on_update_icon() - if(running) - icon_state = "generator1" - else - icon_state = "generator0" - - -/obj/machinery/power/shield_generator/New() - ..() - connect_to_network() - - mode_list = list() - for(var/st in subtypesof(/datum/shield_mode)) - var/datum/shield_mode/SM = new st() - mode_list.Add(SM) - - -/obj/machinery/power/shield_generator/Destroy() - shutdown_field() - field_segments = null - damaged_segments = null - mode_list = null - . = ..() - - -/obj/machinery/power/shield_generator/RefreshParts() - max_energy = 0 - full_shield_strength = 0 - for(var/obj/item/stock_parts/smes_coil/S in component_parts) - full_shield_strength += (S.ChargeCapacity / CELLRATE) * 5 - max_energy = full_shield_strength * 20 - current_energy = clamp(current_energy, 0, max_energy) - - mitigation_max = MAX_MITIGATION_BASE + MAX_MITIGATION_RESEARCH * total_component_rating_of_type(/obj/item/stock_parts/capacitor) - mitigation_em = clamp(mitigation_em, 0, mitigation_max) - mitigation_physical = clamp(mitigation_physical, 0, mitigation_max) - mitigation_heat = clamp(mitigation_heat, 0, mitigation_max) - ..() - - -// Shuts down the shield, removing all shield segments and unlocking generator settings. -/obj/machinery/power/shield_generator/proc/shutdown_field() - for(var/obj/effect/shield/S in field_segments) - qdel(S) - - running = SHIELD_OFF - current_energy = 0 - mitigation_em = 0 - mitigation_physical = 0 - mitigation_heat = 0 - update_icon() - - -// Generates the field objects. Deletes existing field, if applicable. -/obj/machinery/power/shield_generator/proc/regenerate_field() - if(field_segments.len) - for(var/obj/effect/shield/S in field_segments) - qdel(S) - - // The generator is not turned on, so don't generate any new tiles. - if(!running) - return - - var/list/shielded_turfs - - if(check_flag(MODEFLAG_HULL)) - shielded_turfs = fieldtype_hull() - else - shielded_turfs = fieldtype_square() - - // Rotate shield's animation relative to located ship - if(GLOB.using_map.use_overmap) - var/obj/effect/overmap/visitable/ship/sector = map_sectors["[src.z]"] - if(sector && istype(sector)) - if(!sector.check_ownership(src)) - for(var/obj/effect/overmap/visitable/ship/candidate in sector) - if(candidate.check_ownership(src)) - sector = candidate - vessel_reverse_dir = GLOB.reverse_dir[sector.fore_dir] - - for(var/turf/T in shielded_turfs) - var/obj/effect/shield/S = new(T, src) - S.flags_updated() - field_segments |= S - S.set_dir(vessel_reverse_dir) - update_icon() - - -// Recalculates and updates the upkeep multiplier -/obj/machinery/power/shield_generator/proc/update_upkeep_multiplier() - var/new_upkeep = 1.0 - for(var/datum/shield_mode/SM in mode_list) - if(check_flag(SM.mode_flag)) - new_upkeep *= SM.multiplier - - upkeep_multiplier = new_upkeep - - -/obj/machinery/power/shield_generator/Process() - upkeep_power_usage = 0 - power_usage = 0 - - if(offline_for) - offline_for = max(0, offline_for - 1) - // We're turned off. - if(running == SHIELD_OFF) - return - - if(target_radius != field_radius && running != SHIELD_RUNNING) // Do not recalculate the field while it's running; that's extremely laggy. - field_radius += (target_radius > field_radius) ? 1 : -1 - - // We are shutting down, therefore our stored energy disperses faster than usual. - else if(running == SHIELD_DISCHARGING) - current_energy -= SHIELD_SHUTDOWN_DISPERSION_RATE - else if(running == SHIELD_SPINNING_UP) - spinup_counter-- - if(spinup_counter <= 0) - running = SHIELD_RUNNING - regenerate_field() - - mitigation_em = clamp(mitigation_em - MITIGATION_LOSS_PASSIVE, 0, mitigation_max) - mitigation_heat = clamp(mitigation_heat - MITIGATION_LOSS_PASSIVE, 0, mitigation_max) - mitigation_physical = clamp(mitigation_physical - MITIGATION_LOSS_PASSIVE, 0, mitigation_max) - - if(running == SHIELD_RUNNING) - upkeep_power_usage = round((field_segments.len - damaged_segments.len) * ENERGY_UPKEEP_PER_TILE * upkeep_multiplier) - else if(running > SHIELD_RUNNING) - upkeep_power_usage = round(ENERGY_UPKEEP_IDLE * idle_multiplier * (field_radius * 8) * upkeep_multiplier) // Approximates number of turfs. - - if(powernet && (running >= SHIELD_RUNNING) && !input_cut) - var/energy_buffer = 0 - energy_buffer = draw_power(min(upkeep_power_usage, input_cap)) - power_usage += round(energy_buffer) - - if(energy_buffer < upkeep_power_usage) - current_energy -= round(upkeep_power_usage - energy_buffer) // If we don't have enough energy from the grid, take it from the internal battery instead. - - // Now try to recharge our internal energy. - var/energy_to_demand - if(input_cap) - energy_to_demand = clamp(max_energy - current_energy, 0, input_cap - energy_buffer) - else - energy_to_demand = max(0, max_energy - current_energy) - energy_buffer = draw_power(energy_to_demand) - power_usage += energy_buffer - current_energy += round(energy_buffer) - else - current_energy -= round(upkeep_power_usage) // We are shutting down, or we lack external power connection. Use energy from internal source instead. - - if(current_energy <= 0) - energy_failure() - - if(!overloaded) - for(var/obj/effect/shield/S in damaged_segments) - S.regenerate() - else if (field_integrity() > 25) - overloaded = 0 - -/obj/machinery/power/shield_generator/components_are_accessible(path) - return !running && ..() - -/obj/machinery/power/shield_generator/cannot_transition_to(state_path) - if(running) - return SPAN_NOTICE("Turn off \the [src] first!") - if(offline_for) - return SPAN_NOTICE("Wait until \the [src] cools down from emergency shutdown first!") - return ..() - -/obj/machinery/power/shield_generator/attackby(obj/item/O as obj, mob/user as mob) - if(panel_open && (isMultitool(O) || isWirecutter(O))) - attack_hand(user) - return TRUE - return component_attackby(O, user) - -/obj/machinery/power/shield_generator/proc/energy_failure() - if(running == SHIELD_DISCHARGING) - shutdown_field() - else - current_energy = 0 - overloaded = 1 - for(var/obj/effect/shield/S in field_segments) - S.fail(1) - -/obj/machinery/power/shield_generator/proc/set_idle(var/new_state) - if(new_state) - if(running == SHIELD_IDLE) - return - running = SHIELD_IDLE - for(var/obj/effect/shield/S in field_segments) - qdel(S) - else - if(running != SHIELD_IDLE) - return - running = SHIELD_SPINNING_UP - spinup_counter = round(spinup_delay / idle_multiplier) - -/obj/machinery/power/shield_generator/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1) - var/data[0] - - data["running"] = running - data["modes"] = get_flag_descriptions() - data["overloaded"] = overloaded - data["mitigation_max"] = mitigation_max - data["mitigation_physical"] = round(mitigation_physical, 0.1) - data["mitigation_em"] = round(mitigation_em, 0.1) - data["mitigation_heat"] = round(mitigation_heat, 0.1) - data["field_integrity"] = field_integrity() - data["max_energy"] = round(max_energy / 1000000, 0.1) - data["current_energy"] = round(current_energy / 1000000, 0.1) - data["percentage_energy"] = max_energy ? round(data["current_energy"] / data["max_energy"] * 100) : 0 - data["total_segments"] = field_segments ? field_segments.len : 0 - data["functional_segments"] = damaged_segments ? data["total_segments"] - damaged_segments.len : data["total_segments"] - data["field_radius"] = field_radius - data["target_radius"] = target_radius - data["input_cap_kw"] = round(input_cap / 1000) - data["upkeep_power_usage"] = round(upkeep_power_usage / 1000, 0.1) - data["power_usage"] = round(power_usage / 1000) - data["hacked"] = hacked - data["offline_for"] = offline_for * 2 - data["idle_multiplier"] = idle_multiplier - data["idle_valid_values"] = idle_valid_values - - ui = SSnano.try_update_ui(user, src, ui_key, ui, data, force_open) - if (!ui) - ui = new(user, src, ui_key, "shieldgen.tmpl", src.name, 500, 800) - ui.set_initial_data(data) - ui.open() - ui.set_auto_update(1) - - -/obj/machinery/power/shield_generator/interface_interact(var/mob/user) - ui_interact(user) - return TRUE - -/obj/machinery/power/shield_generator/CanUseTopic(var/mob/user) - if(issilicon(user) && !Adjacent(user) && ai_control_disabled) - return STATUS_UPDATE - return ..() - -/obj/machinery/power/shield_generator/OnTopic(user, href_list, datum/topic_state/state) - if(href_list["begin_shutdown"]) - if(running < SHIELD_RUNNING) - return - var/alert = alert(user, "Are you sure you wish to do this? It will drain the power inside the internal storage rapidly.", "Are you sure?", "Yes", "No") - if(!CanInteract(user, state)) - return - if(running < SHIELD_RUNNING) - return - if(alert == "Yes") - set_idle(TRUE) // do this first to clear the field - running = SHIELD_DISCHARGING - return TOPIC_REFRESH - - if(href_list["start_generator"]) - if(offline_for) - return - set_idle(TRUE) - return TOPIC_REFRESH - - if(href_list["toggle_idle"]) - if(running < SHIELD_RUNNING) - return TOPIC_HANDLED - set_idle(text2num(href_list["toggle_idle"])) - return TOPIC_REFRESH - - // Instantly drops the shield, but causes a cooldown before it may be started again. Also carries a risk of EMP at high charge. - if(href_list["emergency_shutdown"]) - if(!running) - return TOPIC_HANDLED - - var/choice = input(user, "Are you sure that you want to initiate an emergency shield shutdown? This will instantly drop the shield, and may result in unstable release of stored electromagnetic energy. Proceed at your own risk.") in list("Yes", "No") - if((choice != "Yes") || !running) - return TOPIC_HANDLED - - // If the shield would take 5 minutes to disperse and shut down using regular methods, it will take x1.5 (7 minutes and 30 seconds) of this time to cool down after emergency shutdown - offline_for = round(current_energy / (SHIELD_SHUTDOWN_DISPERSION_RATE / 1.5)) - var/old_energy = current_energy - shutdown_field() - log_and_message_admins("has triggered \the [src]'s emergency shutdown!", user) - spawn() - empulse(src, old_energy / 60000000, old_energy / 32000000, 1) // If shields are charged at 450 MJ, the EMP will be 7.5, 14.0625. 90 MJ, 1.5, 2.8125 - old_energy = 0 - - return TOPIC_REFRESH - - if(mode_changes_locked) - return TOPIC_REFRESH - - if(href_list["set_range"]) - var/new_range = input(user, "Enter new field range (1-[world.maxx]). Leave blank to cancel.", "Field Radius Control", field_radius) as num - if(!new_range) - return TOPIC_HANDLED - target_radius = clamp(new_range, 1, world.maxx) - return TOPIC_REFRESH - - if(href_list["set_input_cap"]) - var/new_cap = round(input(user, "Enter new input cap (in kW). Enter 0 or nothing to disable input cap.", "Generator Power Control", round(input_cap / 1000)) as num) - if(!new_cap) - input_cap = 0 - return - input_cap = max(0, new_cap) * 1000 - return TOPIC_REFRESH - - if(href_list["toggle_mode"]) - // Toggling hacked-only modes requires the hacked var to be set to 1 - if((text2num(href_list["toggle_mode"]) & (MODEFLAG_BYPASS | MODEFLAG_OVERCHARGE)) && !hacked) - return TOPIC_HANDLED - - toggle_flag(text2num(href_list["toggle_mode"])) - return TOPIC_REFRESH - - if(href_list["switch_idle"]) - if(running == SHIELD_SPINNING_UP) - return TOPIC_REFRESH - var/new_idle = text2num(href_list["switch_idle"]) - if(new_idle in idle_valid_values) - idle_multiplier = new_idle - return TOPIC_REFRESH - -/obj/machinery/power/shield_generator/proc/field_integrity() - if(full_shield_strength) - return round(CLAMP01(current_energy / full_shield_strength) * 100) - return 0 - - -// Takes specific amount of damage -/obj/machinery/power/shield_generator/proc/take_damage(var/damage, var/shield_damtype) - var/energy_to_use = damage * ENERGY_PER_HP - if(check_flag(MODEFLAG_MODULATE)) - mitigation_em -= MITIGATION_HIT_LOSS - mitigation_heat -= MITIGATION_HIT_LOSS - mitigation_physical -= MITIGATION_HIT_LOSS - - switch(shield_damtype) - if(SHIELD_DAMTYPE_PHYSICAL) - mitigation_physical += MITIGATION_HIT_LOSS + MITIGATION_HIT_GAIN - energy_to_use *= 1 - (mitigation_physical / 100) - if(SHIELD_DAMTYPE_EM) - mitigation_em += MITIGATION_HIT_LOSS + MITIGATION_HIT_GAIN - energy_to_use *= 1 - (mitigation_em / 100) - if(SHIELD_DAMTYPE_HEAT) - mitigation_heat += MITIGATION_HIT_LOSS + MITIGATION_HIT_GAIN - energy_to_use *= 1 - (mitigation_heat / 100) - - mitigation_em = clamp(mitigation_em, 0, mitigation_max) - mitigation_heat = clamp(mitigation_heat, 0, mitigation_max) - mitigation_physical = clamp(mitigation_physical, 0, mitigation_max) - - current_energy -= energy_to_use - - // Overload the shield, which will shut it down until we recharge above 25% again - if(current_energy < 0) - energy_failure() - return SHIELD_BREACHED_FAILURE - - var/breachChance = rand(field_integrity(), field_integrity() + 100) - if(breachChance <= CRITICAL_BREACH_THRESHOLD) - return SHIELD_BREACHED_CRITICAL - else if(breachChance <= MAJOR_BREACH_THRESHOLD) - return SHIELD_BREACHED_MAJOR - else if(breachChance <= MINOR_BREACH_THRESHOLD) - return SHIELD_BREACHED_MINOR - return SHIELD_ABSORBED - - -// Checks whether specific flags are enabled -/obj/machinery/power/shield_generator/proc/check_flag(var/flag) - return (shield_modes & flag) - - -/obj/machinery/power/shield_generator/proc/toggle_flag(var/flag) - shield_modes ^= flag - update_upkeep_multiplier() - for(var/obj/effect/shield/S in field_segments) - S.flags_updated() - - if((flag & (MODEFLAG_HULL|MODEFLAG_MULTIZ)) && (running == SHIELD_RUNNING)) - regenerate_field() - - if(flag & MODEFLAG_MODULATE) - mitigation_em = 0 - mitigation_physical = 0 - mitigation_heat = 0 - - -/obj/machinery/power/shield_generator/proc/get_flag_descriptions() - var/list/all_flags = list() - for(var/datum/shield_mode/SM in mode_list) - if(SM.hacked_only && !hacked) - continue - all_flags.Add(list(list( - "name" = SM.mode_name, - "desc" = SM.mode_desc, - "flag" = SM.mode_flag, - "status" = check_flag(SM.mode_flag), - "hacked" = SM.hacked_only, - "multiplier" = SM.multiplier - ))) - return all_flags - - -// These two procs determine tiles that should be shielded given the field range. They are quite CPU intensive and may trigger BYOND infinite loop checks, therefore they are set -// as background procs to prevent locking up the server. They are only called when the field is generated, or when hull mode is toggled on/off. -/obj/machinery/power/shield_generator/proc/fieldtype_square() - set background = 1 - var/list/out = list() - var/list/base_turfs = get_base_turfs() - - for(var/turf/gen_turf in base_turfs) - var/turf/T - for (var/x_offset = -field_radius; x_offset <= field_radius; x_offset++) - T = locate(gen_turf.x + x_offset, gen_turf.y - field_radius, gen_turf.z) - if(T) - out += T - T = locate(gen_turf.x + x_offset, gen_turf.y + field_radius, gen_turf.z) - if(T) - out += T - - for (var/y_offset = -field_radius+1; y_offset < field_radius; y_offset++) - T = locate(gen_turf.x - field_radius, gen_turf.y + y_offset, gen_turf.z) - if(T) - out += T - T = locate(gen_turf.x + field_radius, gen_turf.y + y_offset, gen_turf.z) - if(T) - out += T - return out - - -/obj/machinery/power/shield_generator/proc/fieldtype_hull() - set background = 1 - . = list() - var/list/base_turfs = get_base_turfs() - - - - - for(var/turf/gen_turf in base_turfs) - var/area/TA = null // Variable for area checking. Defining it here so memory does not have to be allocated repeatedly. - for(var/turf/T in trange(field_radius, gen_turf)) - // Don't expand to space or on shuttle areas. - if(istype(T, /turf/space) || istype(T, /turf/simulated/open)) - continue - - // Find adjacent space/shuttle tiles and cover them. Shuttles won't be blocked if shield diffuser is mapped in and turned on. - for(var/turf/TN in orange(1, T)) - TA = get_area(TN) - if ((istype(TN, /turf/space) || (istype(TN, /turf/simulated/open) && (istype(TA, /area/space) || TA.area_flags & AREA_FLAG_EXTERNAL)))) - . |= TN - continue - -// Returns a list of turfs from which a field will propagate. If multi-Z mode is enabled, this will return a "column" of turfs above and below the generator. -/obj/machinery/power/shield_generator/proc/get_base_turfs() - var/list/turfs = list() - var/turf/T = get_turf(src) - - if(!istype(T)) - return - - turfs.Add(T) - - // Multi-Z mode is disabled - if(!check_flag(MODEFLAG_MULTIZ)) - return turfs - - while(HasAbove(T.z)) - T = GetAbove(T) - if(istype(T)) - turfs.Add(T) - - T = get_turf(src) - - while(HasBelow(T.z)) - T = GetBelow(T) - if(istype(T)) - turfs.Add(T) - - return turfs diff --git a/code/modules/shieldgen/emergency_shield.dm b/code/modules/shieldgen/emergency_shield.dm deleted file mode 100644 index 9664e50166fb1..0000000000000 --- a/code/modules/shieldgen/emergency_shield.dm +++ /dev/null @@ -1,340 +0,0 @@ -/obj/machinery/shield - name = "Emergency energy shield" - desc = "An energy shield used to contain hull breaches." - icon = 'icons/effects/effects.dmi' - icon_state = "shield-old" - density = TRUE - opacity = 0 - anchored = TRUE - unacidable = TRUE - var/const/max_health = 200 - var/health = max_health //The shield can only take so much beating (prevents perma-prisons) - var/shield_generate_power = 7500 //how much power we use when regenerating - var/shield_idle_power = 1500 //how much power we use when just being sustained. - -/obj/machinery/shield/malfai - name = "emergency forcefield" - desc = "A weak forcefield which seems to be projected by the emergency atmosphere containment field." - health = max_health/2 // Half health, it's not suposed to resist much. - -/obj/machinery/shield/malfai/Process() - health -= 0.5 // Slowly lose integrity over time - check_failure() - -/obj/machinery/shield/proc/check_failure() - if (src.health <= 0) - visible_message("\The [src] dissipates!") - qdel(src) - return - -/obj/machinery/shield/New() - src.set_dir(pick(1,2,3,4)) - ..() - update_nearby_tiles(need_rebuild=1) - -/obj/machinery/shield/Destroy() - set_opacity(0) - set_density(0) - update_nearby_tiles() - ..() - -/obj/machinery/shield/CanPass(atom/movable/mover, turf/target, height, air_group) - if(!height || air_group) return 0 - else return ..() - -/obj/machinery/shield/attackby(obj/item/W as obj, mob/user as mob) - if(!istype(W)) return - - //Calculate damage - var/aforce = W.force - if (W.damtype == DAMAGE_BRUTE || W.damtype == DAMAGE_BURN) - src.health -= aforce - - //Play a fitting sound - playsound(src.loc, 'sound/effects/EMPulse.ogg', 75, 1) - - check_failure() - set_opacity(1) - spawn(20) if(!QDELETED(src)) set_opacity(0) - user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN) - - ..() - -/obj/machinery/shield/bullet_act(var/obj/item/projectile/Proj) - health -= Proj.get_structure_damage() - ..() - check_failure() - set_opacity(1) - spawn(20) if(!QDELETED(src)) set_opacity(0) - -/obj/machinery/shield/ex_act(severity) - switch(severity) - if(EX_ACT_DEVASTATING) - if (prob(75)) - qdel(src) - if(EX_ACT_HEAVY) - if (prob(50)) - qdel(src) - if(EX_ACT_LIGHT) - if (prob(25)) - qdel(src) - return - -/obj/machinery/shield/emp_act(severity) - switch(severity) - if(EMP_ACT_HEAVY) - qdel(src) - if(EMP_ACT_LIGHT) - if(prob(50)) - qdel(src) - ..() - - -/obj/machinery/shield/hitby(AM as mob|obj, var/datum/thrownthing/TT) - //Let everyone know we've been hit! - visible_message("\[src] was hit by [AM].") - - //Super realistic, resource-intensive, real-time damage calculations. - var/tforce = 0 - - if(ismob(AM)) // All mobs have a multiplier and a size according to mob_defines.dm - var/mob/I = AM - tforce = I.mob_size * (TT.speed/THROWFORCE_SPEED_DIVISOR) - else - var/obj/O = AM - tforce = O.throwforce * (TT.speed/THROWFORCE_SPEED_DIVISOR) - - src.health -= tforce - - //This seemed to be the best sound for hitting a force field. - playsound(src.loc, 'sound/effects/EMPulse.ogg', 100, 1) - - check_failure() - - //The shield becomes dense to absorb the blow.. purely asthetic. - set_opacity(1) - spawn(20) if(!QDELETED(src)) set_opacity(0) - - ..() -/obj/machinery/shieldgen - name = "Emergency shield projector" - desc = "Used to seal minor hull breaches." - icon = 'icons/obj/objects.dmi' - icon_state = "shieldoff" - density = TRUE - opacity = 0 - anchored = FALSE - req_access = list(access_engine) - var/const/max_health = 100 - var/health = max_health - var/active = 0 - var/malfunction = 0 //Malfunction causes parts of the shield to slowly dissapate - var/list/deployed_shields = list() - var/list/regenerating = list() - var/is_open = 0 //Whether or not the wires are exposed - var/locked = 0 - var/check_delay = 60 //periodically recheck if we need to rebuild a shield - use_power = POWER_USE_OFF - idle_power_usage = 0 - -/obj/machinery/shieldgen/Destroy() - collapse_shields() - ..() - -/obj/machinery/shieldgen/proc/shields_up() - if(active) return 0 //If it's already turned on, how did this get called? - - src.active = 1 - update_icon() - - create_shields() - - var/new_idle_power_usage = 0 - for(var/obj/machinery/shield/shield_tile in deployed_shields) - new_idle_power_usage += shield_tile.shield_idle_power - change_power_consumption(new_idle_power_usage, POWER_USE_IDLE) - update_use_power(POWER_USE_IDLE) - -/obj/machinery/shieldgen/proc/shields_down() - if(!active) return 0 //If it's already off, how did this get called? - - src.active = 0 - update_icon() - - collapse_shields() - - update_use_power(POWER_USE_OFF) - -/obj/machinery/shieldgen/proc/create_shields() - for(var/turf/target_tile in range(8, src)) - if ((istype(target_tile,/turf/space)|| istype(target_tile, /turf/simulated/open)) && !(locate(/obj/machinery/shield) in target_tile)) - if (malfunction && prob(33) || !malfunction) - var/obj/machinery/shield/S = new/obj/machinery/shield(target_tile) - deployed_shields += S - use_power_oneoff(S.shield_generate_power) - - for(var/turf/above in range(8, GetAbove(src)))//Probably a better way to do this. - if ((istype(above,/turf/space)|| istype(above, /turf/simulated/open)) && !(locate(/obj/machinery/shield) in above)) - if (malfunction && prob(33) || !malfunction) - var/obj/machinery/shield/A = new/obj/machinery/shield(above) - deployed_shields += A - use_power_oneoff(A.shield_generate_power) - -/obj/machinery/shieldgen/proc/collapse_shields() - for(var/obj/machinery/shield/shield_tile in deployed_shields) - qdel(shield_tile) - -/obj/machinery/shieldgen/power_change() - . = ..() - if(!. || !active) return - if (stat & NOPOWER) - collapse_shields() - else - create_shields() - -/obj/machinery/shieldgen/Process() - if (!active || (stat & NOPOWER)) - return - - if(malfunction) - if(deployed_shields.len && prob(5)) - qdel(pick(deployed_shields)) - else - if (check_delay <= 0) - create_shields() - - var/new_power_usage = 0 - for(var/obj/machinery/shield/shield_tile in deployed_shields) - new_power_usage += shield_tile.shield_idle_power - - if (new_power_usage != idle_power_usage) - change_power_consumption(new_power_usage, POWER_USE_IDLE) - - check_delay = 60 - else - check_delay-- - -/obj/machinery/shieldgen/proc/checkhp() - if(health <= 30) - src.malfunction = 1 - if(health <= 0) - spawn(0) - explosion(get_turf(src.loc), 0, 0, 1, 0, 0, 0) - qdel(src) - update_icon() - return - -/obj/machinery/shieldgen/ex_act(severity) - switch(severity) - if(EX_ACT_DEVASTATING) - src.health -= 75 - src.checkhp() - if(EX_ACT_HEAVY) - src.health -= 30 - if (prob(15)) - src.malfunction = 1 - src.checkhp() - if(EX_ACT_LIGHT) - src.health -= 10 - src.checkhp() - return - -/obj/machinery/shieldgen/emp_act(severity) - switch(severity) - if(EMP_ACT_HEAVY) - src.health /= 2 //cut health in half - malfunction = 1 - locked = pick(0,1) - if(EMP_ACT_LIGHT) - if(prob(50)) - src.health *= 0.3 //chop off a third of the health - malfunction = 1 - checkhp() - ..() - -/obj/machinery/shieldgen/interface_interact(mob/user as mob) - if(!CanInteract(user, DefaultTopicState())) - return FALSE - if(locked) - to_chat(user, "The machine is locked, you are unable to use it.") - return TRUE - if(is_open) - to_chat(user, "The panel must be closed before operating this machine.") - return TRUE - - if (src.active) - user.visible_message("[icon2html(src, viewers(get_turf(src)))] [user] deactivated the shield generator.", \ - "[icon2html(src,user)] You deactivate the shield generator.", \ - "You hear heavy droning fade out.") - src.shields_down() - else - if(anchored) - user.visible_message("[icon2html(src, viewers(get_turf(src)))] [user] activated the shield generator.", \ - "[icon2html(src, user)] You activate the shield generator.", \ - "You hear heavy droning.") - src.shields_up() - else - to_chat(user, "The device must first be secured to the floor.") - return TRUE - -/obj/machinery/shieldgen/emag_act(var/remaining_charges, var/mob/user) - if(!malfunction) - malfunction = 1 - update_icon() - return 1 - -/obj/machinery/shieldgen/attackby(obj/item/W as obj, mob/user as mob) - if(isScrewdriver(W)) - playsound(src.loc, 'sound/items/Screwdriver.ogg', 100, 1) - if(is_open) - to_chat(user, "You close the panel.") - is_open = 0 - else - to_chat(user, "You open the panel and expose the wiring.") - is_open = 1 - - else if(isCoil(W) && malfunction && is_open) - var/obj/item/stack/cable_coil/coil = W - to_chat(user, "You begin to replace the wires.") - //if(do_after(user, min(60, round( ((maxhealth/health)*10)+(malfunction*10) ))) //Take longer to repair heavier damage - if(do_after(user, 3 SECONDS, src, DO_PUBLIC_UNIQUE)) - if (coil.use(1)) - health = max_health - malfunction = 0 - to_chat(user, "You repair the [src]!") - update_icon() - - else if(istype(W, /obj/item/wrench)) - if(locked) - to_chat(user, "The bolts are covered, unlocking this would retract the covers.") - return - if(anchored) - playsound(src.loc, 'sound/items/Ratchet.ogg', 100, 1) - to_chat(user, "'You unsecure the [src] from the floor!") - if(active) - to_chat(user, "The [src] shuts off!") - src.shields_down() - anchored = FALSE - else - if(istype(get_turf(src), /turf/space)) return //No wrenching these in space! - playsound(src.loc, 'sound/items/Ratchet.ogg', 100, 1) - to_chat(user, "You secure the [src] to the floor!") - anchored = TRUE - - - else if(istype(W, /obj/item/card/id) || istype(W, /obj/item/modular_computer/pda)) - if(src.allowed(user)) - src.locked = !src.locked - to_chat(user, "The controls are now [src.locked ? "locked." : "unlocked."]") - else - to_chat(user, "Access denied.") - else - ..() - - -/obj/machinery/shieldgen/on_update_icon() - if(active && !(stat & NOPOWER)) - src.icon_state = malfunction ? "shieldonbr":"shieldon" - else - src.icon_state = malfunction ? "shieldoffbr":"shieldoff" - return diff --git a/code/modules/shieldgen/energy_field.dm b/code/modules/shieldgen/energy_field.dm deleted file mode 100644 index e609c84960acb..0000000000000 --- a/code/modules/shieldgen/energy_field.dm +++ /dev/null @@ -1,69 +0,0 @@ - -//---------- actual energy field - -/obj/effect/energy_field - name = "energy field" - desc = "Impenetrable field of energy, capable of blocking anything as long as it's active." - icon = 'icons/obj/machines/shielding.dmi' - icon_state = "shield_normal" - anchored = TRUE - layer = PROJECTILE_LAYER - density = FALSE - invisibility = 101 - var/strength = 0 - var/ticks_recovering = 10 - -/obj/effect/energy_field/New() - ..() - update_nearby_tiles() - -/obj/effect/energy_field/Destroy() - set_density(0) - update_nearby_tiles() - . = ..() - -/obj/effect/energy_field/ex_act(var/severity) - Stress(0.5 + severity) - -/obj/effect/energy_field/bullet_act(var/obj/item/projectile/Proj) - Stress(Proj.get_structure_damage() / 10) - -/obj/effect/energy_field/proc/Stress(var/severity) - strength -= severity - - //if we take too much damage, drop out - the generator will bring us back up if we have enough power - ticks_recovering = min(ticks_recovering + 2, 10) - if(strength < 1) - set_invisibility(101) - set_density(0) - ticks_recovering = 10 - strength = 0 - else if(strength >= 1) - set_invisibility(0) - set_density(1) - -/obj/effect/energy_field/proc/Strengthen(var/severity) - strength += severity - if (strength < 0) - strength = 0 - - //if we take too much damage, drop out - the generator will bring us back up if we have enough power - var/old_density = density - if(strength >= 1) - set_invisibility(0) - set_density(1) - else if(strength < 1) - set_invisibility(101) - set_density(0) - - if (density != old_density) - update_nearby_tiles() - -/obj/effect/energy_field/CanPass(atom/movable/mover, turf/target, height=1.5, air_group = 0) - //Purpose: Determines if the object (or airflow) can pass this atom. - //Called by: Movement, airflow. - //Inputs: The moving atom (optional), target turf, "height" and air group - //Outputs: Boolean if can pass. - - //return (!density || !height || air_group) - return !density diff --git a/code/modules/shieldgen/shieldwallgen.dm b/code/modules/shieldgen/shieldwallgen.dm deleted file mode 100644 index 85b914535da12..0000000000000 --- a/code/modules/shieldgen/shieldwallgen.dm +++ /dev/null @@ -1,355 +0,0 @@ -////FIELD GEN START //shameless copypasta from fieldgen, powersink, and grille -/obj/machinery/shieldwallgen - name = "Shield Generator" - desc = "A shield generator." - icon = 'icons/obj/stationobjs.dmi' - icon_state = "Shield_Gen" - anchored = FALSE - density = TRUE - req_access = list(list(access_engine_equip,access_research)) - var/active = 0 - var/power = 0 - var/locked = 1 - var/max_range = 8 - var/storedpower = 0 - obj_flags = OBJ_FLAG_CONDUCTIBLE - //There have to be at least two posts, so these are effectively doubled - var/power_draw = 30 KILOWATTS //30 kW. How much power is drawn from powernet. Increase this to allow the generator to sustain longer shields, at the cost of more power draw. - var/max_stored_power = 50 KILOWATTS //50 kW - use_power = POWER_USE_OFF //Draws directly from power net. Does not use APC power. - active_power_usage = 1200 - -/obj/machinery/shieldwallgen/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1, var/datum/topic_state/state = GLOB.default_state) - var/list/data = list() - data["draw"] = round(power_draw) - data["power"] = round(storedpower) - data["maxpower"] = round(max_stored_power) - data["current_draw"] = clamp(max_stored_power - storedpower, 500, power_draw) + power ? active_power_usage : 0 - data["online"] = active == 2 ? 1 : 0 - - ui = SSnano.try_update_ui(user, src, ui_key, ui, data, force_open) - if (!ui) - ui = new(user, src, ui_key, "shield.tmpl", "Shielding", 800, 500, state = state) - ui.set_initial_data(data) - ui.open() - ui.set_auto_update(1) - -/obj/machinery/shieldwallgen/on_update_icon() -// if(stat & BROKEN) -TODO: Broken icon - if(!active) - icon_state = "Shield_Gen" - else - icon_state = "Shield_Gen +a" - -/obj/machinery/shieldwallgen/OnTopic(var/mob/user, href_list) - if(href_list["toggle"]) - if(src.active >= 1) - src.active = 0 - update_icon() - - user.visible_message("\The [user] turned the shield generator off.", \ - "You turn off the shield generator.", \ - "You hear heavy droning fade out.") - for(var/dir in list(1,2,4,8)) src.cleanup(dir) - else - src.active = 1 - update_icon() - user.visible_message("\The [user] turned the shield generator on.", \ - "You turn on the shield generator.", \ - "You hear heavy droning.") - return TOPIC_REFRESH - -/obj/machinery/shieldwallgen/ex_act(var/severity) - switch(severity) - if(EX_ACT_DEVASTATING) - active = 0 - storedpower = 0 - if(EX_ACT_HEAVY) - storedpower -= rand(min(storedpower,max_stored_power/2), max_stored_power) - if(EX_ACT_LIGHT) - storedpower -= rand(0, max_stored_power) - -/obj/machinery/shieldwallgen/emp_act(var/severity) - switch(severity) - if(EMP_ACT_HEAVY) - storedpower = 0 - if(EMP_ACT_LIGHT) - storedpower -= rand(storedpower/2, storedpower) - ..() - -/obj/machinery/shieldwallgen/CanUseTopic(mob/user) - if(!anchored) - to_chat(user, "The shield generator needs to be firmly secured to the floor first.") - return STATUS_CLOSE - if(src.locked && !istype(user, /mob/living/silicon)) - to_chat(user, "The controls are locked!") - return STATUS_CLOSE - if(power != 1) - to_chat(user, "The shield generator needs to be powered by wire underneath.") - return STATUS_CLOSE - return ..() - -/obj/machinery/shieldwallgen/interface_interact(mob/user) - ui_interact(user) - return TRUE - -/obj/machinery/shieldwallgen/proc/power() - if(!anchored) - power = 0 - return 0 - var/turf/T = src.loc - - 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 - - if(PN) - var/shieldload = clamp(max_stored_power - storedpower, 500, power_draw) //what we try to draw - shieldload = PN.draw_power(shieldload) //what we actually get - storedpower += shieldload - - //If we're still in the red, then there must not be enough available power to cover our load. - if(storedpower <= 0) - power = 0 - return 0 - - power = 1 // IVE GOT THE POWER! - return 1 - -/obj/machinery/shieldwallgen/Process() - ..() - power = 0 - if(!(stat & BROKEN)) - power() - if(power) - storedpower -= active_power_usage //the generator post itself uses some power - - if(storedpower >= max_stored_power) - storedpower = max_stored_power - if(storedpower <= 0) - storedpower = 0 - - if(src.active == 1) - if(!src.anchored) - src.active = 0 - return - spawn(1) - setup_field(1) - spawn(2) - setup_field(2) - spawn(3) - setup_field(4) - spawn(4) - setup_field(8) - src.active = 2 - if(src.active >= 1) - if(src.power == 0) - src.visible_message("The [src.name] shuts down due to lack of power!", \ - "You hear heavy droning fade out") - src.active = 0 - update_icon() - for(var/dir in list(1,2,4,8)) src.cleanup(dir) - -/obj/machinery/shieldwallgen/proc/setup_field(var/NSEW = 0) - var/turf/T = get_turf(src) - if(!T) return - var/turf/T2 = T - var/obj/machinery/shieldwallgen/G - var/steps = 0 - var/oNSEW = 0 - - 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 <= (max_range+1), 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 - if(!G.active) - return - G.cleanup(oNSEW) - break - - if(isnull(G)) - return - - T2 = src.loc - - 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(T, src, G) //(ref to this gen, ref to connected gen) - CF.set_dir(field_dir) - - -/obj/machinery/shieldwallgen/attackby(obj/item/W, mob/user) - if(isWrench(W)) - if(active) - to_chat(user, "Turn off the field generator first.") - return - - else if(!anchored) - playsound(src.loc, 'sound/items/Ratchet.ogg', 75, 1) - to_chat(user, "You secure the external reinforcing bolts to the floor.") - src.anchored = TRUE - return - - else if(anchored) - playsound(src.loc, 'sound/items/Ratchet.ogg', 75, 1) - to_chat(user, "You undo the external reinforcing bolts.") - src.anchored = FALSE - return - - if(istype(W, /obj/item/card/id)||istype(W, /obj/item/modular_computer)) - if (src.allowed(user)) - src.locked = !src.locked - to_chat(user, "Controls are now [src.locked ? "locked." : "unlocked."]") - else - to_chat(user, "Access denied.") - return - - else - src.add_fingerprint(user) - ..() - - -/obj/machinery/shieldwallgen/proc/cleanup(var/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 <= (max_range+1), 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() - src.cleanup(NORTH) - src.cleanup(SOUTH) - src.cleanup(EAST) - src.cleanup(WEST) - . = ..() - - -//////////////Containment Field START -/obj/machinery/shieldwall - name = "Shield" - desc = "An energy shield." - icon = 'icons/effects/effects.dmi' - icon_state = "shieldwall" - anchored = TRUE - density = TRUE - unacidable = TRUE - light_outer_range = 3 - var/needs_power = 0 - var/active = 1 - var/delay = 5 - var/last_active - var/mob/U - var/obj/machinery/shieldwallgen/gen_primary - var/obj/machinery/shieldwallgen/gen_secondary - var/power_usage = 800 //how much power it takes to sustain the shield - var/generate_power_usage = 5000 //how much power it takes to start up the shield - -/obj/machinery/shieldwall/Initialize(mapload, obj/machinery/shieldwallgen/A, obj/machinery/shieldwallgen/B) - . = ..() - update_nearby_tiles() - gen_primary = A - gen_secondary = B - if(A && B && A.active && B.active) - needs_power = 1 - if(prob(50)) - A.storedpower -= generate_power_usage - else - B.storedpower -= generate_power_usage - else - return INITIALIZE_HINT_QDEL - -/obj/machinery/shieldwall/Destroy() - update_nearby_tiles() - ..() - -/obj/machinery/shieldwall/attackby(var/obj/item/I, var/mob/user) - var/obj/machinery/shieldwallgen/G = prob(50) ? gen_primary : gen_secondary - G.storedpower -= I.force*2500 - user.visible_message("\The [user] hits \the [src] with \the [I]!") - user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN) - user.do_attack_animation(src) - playsound(loc, 'sound/weapons/smash.ogg', 75, 1) - -/obj/machinery/shieldwall/Process() - if(needs_power) - if(isnull(gen_primary)||isnull(gen_secondary)) - qdel(src) - return - - if(!(gen_primary.active)||!(gen_secondary.active)) - qdel(src) - return - - var/obj/machinery/shieldwallgen/G = prob(50) ? gen_primary : gen_secondary - G.storedpower -= power_usage - - -/obj/machinery/shieldwall/bullet_act(var/obj/item/projectile/Proj) - if(needs_power) - var/obj/machinery/shieldwallgen/G = prob(50) ? gen_primary : gen_secondary - G.storedpower -= 400 * Proj.get_structure_damage() - ..() - return - - -/obj/machinery/shieldwall/ex_act(severity) - if(needs_power) - var/obj/machinery/shieldwallgen/G = prob(50) ? gen_primary : gen_secondary - switch(severity) - if(EX_ACT_DEVASTATING) //big boom - G.storedpower -= rand(30000, min(G.storedpower, 60000)) - - if(EX_ACT_HEAVY) //medium boom - G.storedpower -= rand(15000, min(G.storedpower, 30000)) - - if(EX_ACT_LIGHT) //lil boom - G.storedpower -= rand(5000, min(G.storedpower, 15000)) - return - - -/obj/machinery/shieldwall/CanPass(atom/movable/mover, turf/target, height=0, air_group=0) - if(air_group || (height==0)) return 1 - - if(istype(mover) && mover.checkpass(PASS_FLAG_GLASS)) - return prob(20) - else - if (istype(mover, /obj/item/projectile)) - return prob(10) - else - return !src.density - -/obj/machinery/shieldwallgen/online - anchored = TRUE - active = 1 - -/obj/machinery/shieldwallgen/online/Initialize() - storedpower = max_stored_power - . = ..() diff --git a/code/modules/shuttles/antagonist.dm b/code/modules/shuttles/antagonist.dm deleted file mode 100644 index e7542c6b595d7..0000000000000 --- a/code/modules/shuttles/antagonist.dm +++ /dev/null @@ -1,20 +0,0 @@ -/obj/machinery/computer/shuttle_control/multi/vox - name = "skipjack control console" - req_access = list(access_syndicate) - shuttle_tag = "Skipjack" - -/obj/machinery/computer/shuttle_control/multi/syndicate - name = "mercenary shuttle control console" - req_access = list(access_syndicate) - shuttle_tag = "Mercenary" - -/obj/machinery/computer/shuttle_control/multi/rescue - name = "rescue shuttle control console" - req_access = list(access_cent_specops) - shuttle_tag = "Rescue" - -/obj/machinery/computer/shuttle_control/multi/ninja - name = "stealth shuttle control console" - req_access = list(access_syndicate) - shuttle_tag = "Ninja" - diff --git a/code/modules/shuttles/departmental.dm b/code/modules/shuttles/departmental.dm deleted file mode 100644 index 6835b7b727340..0000000000000 --- a/code/modules/shuttles/departmental.dm +++ /dev/null @@ -1,18 +0,0 @@ -/obj/machinery/computer/shuttle_control/mining - name = "mining shuttle control console" - shuttle_tag = "Mining" - -/obj/machinery/computer/shuttle_control/engineering - name = "engineering shuttle control console" - shuttle_tag = "Engineering" - -/obj/machinery/computer/shuttle_control/research - name = "research shuttle control console" - shuttle_tag = "Research" - -/obj/machinery/computer/shuttle_control/merchant - name = "merchant shuttle control console" - icon_keyboard = "power_key" - icon_screen = "shuttle" - req_access = list(access_merchant) - shuttle_tag = "Merchant" \ No newline at end of file diff --git a/code/modules/shuttles/escape_pods.dm b/code/modules/shuttles/escape_pods.dm deleted file mode 100644 index bb13f28175b47..0000000000000 --- a/code/modules/shuttles/escape_pods.dm +++ /dev/null @@ -1,306 +0,0 @@ -var/global/list/escape_pods = list() -var/global/list/escape_pods_by_name = list() - -#define ISEVAC_STARSHIP_FAST_CONTROLER istype(evacuation_controller, /datum/evacuation_controller/starship/fast) - -/datum/shuttle/autodock/ferry/escape_pod - var/datum/computer/file/embedded_program/docking/simple/escape_pod_berth/arming_controller - category = /datum/shuttle/autodock/ferry/escape_pod - move_time = 100 - -/datum/shuttle/autodock/ferry/escape_pod/New() - if(name in escape_pods_by_name) - CRASH("An escape pod with the name '[name]' has already been defined.") - move_time = evacuation_controller.evac_transit_delay + rand(-30, 60) - escape_pods_by_name[name] = src - escape_pods += src - move_time = round(evacuation_controller.evac_transit_delay/10) - - ..() - - //find the arming controller (berth) - var/arming_controller_tag = arming_controller - arming_controller = SSshuttle.docking_registry[arming_controller_tag] - if(!istype(arming_controller)) - CRASH("Could not find arming controller for escape pod \"[name]\", tag was '[arming_controller_tag]'.") - - //find the pod's own controller - var/datum/computer/file/embedded_program/docking/simple/prog = SSshuttle.docking_registry[dock_target] - var/obj/machinery/embedded_controller/radio/simple_docking_controller/escape_pod/controller_master = prog.master - if(!istype(controller_master)) - CRASH("Escape pod \"[name]\" could not find it's controller master!") - - controller_master.pod = src - -/datum/shuttle/autodock/ferry/escape_pod/force_launch(user) - . = ..() - shuttle_docking_controller.finish_undocking() - var/datum/computer/file/embedded_program/docking/simple/prog = shuttle_docking_controller - prog.close_door() - -/datum/shuttle/autodock/ferry/escape_pod/proc/toggle_bds(var/CLOSE = FALSE) - for(var/obj/machinery/door/blast/regular/escape_pod/ES in world) - if(ES.id_tag == shuttle_docking_controller.id_tag) - if(CLOSE) - INVOKE_ASYNC(ES, /obj/machinery/door/blast/proc/force_close) - else - INVOKE_ASYNC(ES, /obj/machinery/door/blast/proc/force_open) - -/datum/shuttle/autodock/ferry/escape_pod/proc/set_self_unarm() - if(arming_controller.armed) - if(evacuation_controller.is_idle() || evacuation_controller.is_on_cooldown()) - var/check = TRUE - for(var/mob/living/user in shuttle_area[1]) - if(isliving(user)) - check = FALSE - break - if(check) - arming_controller.unarm() - return - GLOB.exited_event.register(shuttle_area[1], arming_controller, /datum/computer/file/embedded_program/docking/simple/escape_pod_berth/proc/check_unarm) - -/datum/shuttle/autodock/ferry/escape_pod/can_launch() - if(!evacuation_controller.has_evacuated()) - return 0 - if(isnull(evacuation_controller.evac_no_return)) - return 0 - - if(arming_controller && !arming_controller.armed) //must be armed - return 0 - if(location) - return 0 //it's a one-way trip. - return ..() - -/datum/shuttle/autodock/ferry/escape_pod/can_force() - if (arming_controller && arming_controller.master.emagged) - return (next_location && next_location.is_valid(src) && !current_location.cannot_depart(src) && moving_status == SHUTTLE_IDLE && !location && arming_controller && arming_controller.armed) - if (arming_controller.eject_time && world.time < arming_controller.eject_time + 50) - return 0 //dont allow force launching until 5 seconds after the arming controller has reached it's countdown - return ..() - -/datum/shuttle/autodock/ferry/escape_pod/can_cancel() - return 0 - - -//This controller goes on the escape pod itself -/obj/machinery/embedded_controller/radio/simple_docking_controller/escape_pod - name = "escape pod controller" - program = /datum/computer/file/embedded_program/docking/simple/escape_pod - var/datum/shuttle/autodock/ferry/escape_pod/pod - var/tag_pump - frequency = EXTERNAL_AIR_FREQ - -/obj/machinery/embedded_controller/radio/simple_docking_controller/escape_pod/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1) - var/data[0] - var/datum/computer/file/embedded_program/docking/simple/docking_program = program - - data = list( - "docking_status" = docking_program.get_docking_status(), - "override_enabled" = docking_program.override_enabled, - "door_state" = docking_program.memory["door_status"]["state"], - "door_lock" = docking_program.memory["door_status"]["lock"], - "can_force" = pod.can_force() || pod.can_launch(), //allow players to manually launch ahead of time if the shuttle leaves - "is_armed" = pod.arming_controller.armed, - ) - - ui = SSnano.try_update_ui(user, src, ui_key, ui, data, force_open) - - if (!ui) - ui = new(user, src, ui_key, "escape_pod_console.tmpl", name, 470, 290) - ui.set_initial_data(data) - ui.open() - ui.set_auto_update(1) - -/obj/machinery/embedded_controller/radio/simple_docking_controller/escape_pod/OnTopic(user, href_list) - // if(href_list["manual_arm"]) - // pod.arming_controller.arm() - // return TOPIC_REFRESH - - // if(href_list["force_launch"]) - // if (pod.can_force()) - // pod.force_launch(src) - // else if (evacuation_controller.has_evacuated() && pod.can_launch()) //allow players to manually launch ahead of time if the shuttle leaves - // pod.launch(src) - // return TOPIC_REFRESH - - if(href_list["command"]) - var/command = href_list["command"] - if(command == "manual_arm") - pod.arming_controller.arm() - return TOPIC_REFRESH - if(command == "force_launch") - if (pod.can_launch()) - pod.toggle_bds() - pod.launch(src) - else if (pod.can_force()) - pod.toggle_bds() - GLOB.global_announcer.autosay("Несанкционированный запуск капсулы [pod]! Возможна разгерметизация!", "Эвакуационный Контроллер",, z) - pod.force_launch(src) - return TOPIC_REFRESH - -//This controller is for the escape pod berth (station side) -/obj/machinery/embedded_controller/radio/simple_docking_controller/escape_pod_berth - name = "escape pod berth controller" - program = /datum/computer/file/embedded_program/docking/simple/escape_pod_berth - frequency = EXTERNAL_AIR_FREQ - -/obj/machinery/embedded_controller/radio/simple_docking_controller/escape_pod_berth/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1) - var/data[0] - var/datum/computer/file/embedded_program/docking/simple/docking_program = program - - var/armed = null - if (istype(docking_program, /datum/computer/file/embedded_program/docking/simple/escape_pod_berth)) - var/datum/computer/file/embedded_program/docking/simple/escape_pod_berth/P = docking_program - armed = P.armed - - data = list( - "docking_status" = docking_program.get_docking_status(), - "override_enabled" = docking_program.override_enabled, - "armed" = armed, - ) - - ui = SSnano.try_update_ui(user, src, ui_key, ui, data, force_open) - - if (!ui) - ui = new(user, src, ui_key, "escape_pod_berth_console.tmpl", name, 470, 290) - ui.set_initial_data(data) - ui.open() - ui.set_auto_update(1) - -/obj/machinery/embedded_controller/radio/simple_docking_controller/escape_pod_berth/attackby(var/obj/item/T, var/mob/living/carbon/human/user) - if(emagged && isMultitool(T) && user.skill_check(SKILL_ELECTRICAL, SKILL_ADEPT)) - to_chat(user, "Ты начал сбрасывать настройки [src], чтобы починить его.") - if(do_after(user, 100, src)) - emagged = FALSE - state("Сброс до заводских настроек завершен!") - sleep(5) - state("Поиск центрального контроллера...") - sleep(10) - state("Найдено!") - sleep(10) - state("Первичная настройка капсулы...") - sleep(20) - state("Успешно!") - if (istype(program, /datum/computer/file/embedded_program/docking/simple/escape_pod_berth)) - var/datum/computer/file/embedded_program/docking/simple/escape_pod_berth/P = program - for(var/datum/shuttle/autodock/ferry/escape_pod/pod in escape_pods) - if(pod.arming_controller == P) - pod.toggle_bds(TRUE) - break - if (P.armed) - P.unarm() - return - . = ..() - -/obj/machinery/embedded_controller/radio/simple_docking_controller/escape_pod_berth/emag_act(var/remaining_charges, var/mob/user) - if (!emagged) - to_chat(user, "You emag the [src], arming the escape pod!") - emagged = TRUE - GLOB.global_announcer.autosay("Несанкционированный доступ к контроллеру эвакуации. Потеряно управление от [src]. Службе безопасности рекомендуется проследовать к этой капсуле. Местоположение капсулы: [get_area(src)]", "Автоматическая Система Безопасности", "Security", z) - state("Ошибка центрального контроллера!") - sleep(5) - state("Обнаружена аварийная ситуация!") - sleep(3) - state("Взведение капсулы...") - sleep(10) - state("Ошибка стыковочных зажимов!") - sleep(5) - state("Отключение зажимов...") - sleep(20) - state("Примерное время подготовки: 5 минут.") - if (istype(program, /datum/computer/file/embedded_program/docking/simple/escape_pod_berth)) - var/datum/computer/file/embedded_program/docking/simple/escape_pod_berth/P = program - if (!P.armed) - addtimer(CALLBACK(P, /datum/computer/file/embedded_program/docking/simple/escape_pod_berth/proc/arm), 5 MINUTE) - return 1 - -//A docking controller program for a simple door based docking port -/datum/computer/file/embedded_program/docking/simple/escape_pod_berth - var/armed = 0 - var/eject_delay = 10 //give latecomers some time to get out of the way if they don't make it onto the pod - var/eject_time = null - var/closing = 0 - -/datum/computer/file/embedded_program/docking/simple/escape_pod_berth/proc/arm() - if(!armed) - armed = 1 - open_door() - -/datum/computer/file/embedded_program/docking/simple/escape_pod_berth/proc/unarm() - if(armed) - armed = 0 - close_door() - -/datum/computer/file/embedded_program/docking/simple/escape_pod_berth/proc/check_unarm(var/area/area, var/mob/living/user) - if(armed && isliving(user)) - if(evacuation_controller.is_idle() || evacuation_controller.is_on_cooldown()) - var/check = TRUE - for(user in area) - if(isliving(user)) - check = FALSE - break - if(check) - unarm() - else if(!armed) - GLOB.exited_event.unregister(area, src, /datum/computer/file/embedded_program/docking/simple/escape_pod_berth/proc/check_unarm) - -/datum/computer/file/embedded_program/docking/simple/escape_pod_berth/receive_user_command(command) - if (!armed) - return TRUE // Eat all commands. - return ..(command) - -// /datum/computer/file/embedded_program/docking/simple/escape_pod_berth/process() -// ..() -// if (eject_time && world.time >= eject_time && !closing) -// close_door() -// closing = 1 - -/datum/computer/file/embedded_program/docking/simple/escape_pod_berth/prepare_for_docking() - return - -/datum/computer/file/embedded_program/docking/simple/escape_pod_berth/ready_for_docking() - return 1 - -/datum/computer/file/embedded_program/docking/simple/escape_pod_berth/finish_docking() - return //don't do anything - the doors only open when the pod is armed. - -/datum/computer/file/embedded_program/docking/simple/escape_pod_berth/prepare_for_undocking() - eject_time = world.time + eject_delay*10 - ..() - -// The program for the escape pod controller. -/datum/computer/file/embedded_program/docking/simple/escape_pod - var/tag_pump - var/undock_begin - -// No answer recieved from vessel controller? Evacing in any case -/datum/computer/file/embedded_program/docking/simple/escape_pod/ready_for_undocking() - . = ..() - if(!undock_begin) - undock_begin = world.time - if (. && (world.time > undock_begin + 10 SECONDS)) - finish_undocking() - reset() - -/datum/computer/file/embedded_program/docking/simple/escape_pod/New(var/obj/machinery/embedded_controller/M) - ..(M) - if (istype(M, /obj/machinery/embedded_controller/radio/simple_docking_controller/escape_pod)) - var/obj/machinery/embedded_controller/radio/simple_docking_controller/escape_pod/controller = M - tag_pump = controller.tag_pump ? controller.tag_pump : "[id_tag]_pump" - -/datum/computer/file/embedded_program/docking/simple/escape_pod/finish_undocking() - . = ..() - undock_begin = null - // Send a signal to the vent pumps to repressurize the pod. - var/datum/signal/signal = new - signal.data = list( - "tag" = tag_pump, - "sigtype" = "command", - "set_power" = 1, - "set_direction" = "release", - "status" = TRUE, - "set_external_pressure" = ONE_ATMOSPHERE - ) - post_signal(signal) - -#undef ISEVAC_STARSHIP_FAST_CONTROLER diff --git a/code/modules/shuttles/landmarks.dm b/code/modules/shuttles/landmarks.dm deleted file mode 100644 index ee7c43384cdc7..0000000000000 --- a/code/modules/shuttles/landmarks.dm +++ /dev/null @@ -1,288 +0,0 @@ -//making this separate from /obj/effect/landmark until that mess can be dealt with -/obj/effect/shuttle_landmark - name = "Nav Point" - icon = 'icons/effects/effects.dmi' - icon_state = "energynet" - anchored = TRUE - unacidable = TRUE - simulated = FALSE - invisibility = 101 - - var/landmark_tag - //ID of the controller on the dock side - var/datum/computer/file/embedded_program/docking/docking_controller - //ID of controller used for this landmark for shuttles with multiple ones. - var/list/special_dock_targets - - //when the shuttle leaves this landmark, it will leave behind the base area - //also used to determine if the shuttle can arrive here without obstruction - var/area/base_area - //Will also leave this type of turf behind if set. - var/turf/base_turf - //Name of the shuttle, null for generic waypoint - var/shuttle_restricted - var/flags = 0 - -/obj/effect/shuttle_landmark/Initialize() - . = ..() - if(docking_controller) - . = INITIALIZE_HINT_LATELOAD - - if(flags & SLANDMARK_FLAG_AUTOSET) - base_area = get_area(src) - var/turf/T = get_turf(src) - if(T) - base_turf = T.type - else - base_area = locate(base_area || world.area) - - SetName(name + " ([x],[y])") - SSshuttle.register_landmark(landmark_tag, src) - -/obj/effect/shuttle_landmark/LateInitialize() - if(!docking_controller) - return - var/docking_tag = docking_controller - docking_controller = SSshuttle.docking_registry[docking_tag] - if(!istype(docking_controller)) - CRASH("Could not find docking controller for shuttle waypoint '[name]', docking tag was '[docking_tag]'.") - if(GLOB.using_map.use_overmap) - var/obj/effect/overmap/visitable/location = map_sectors["[z]"] - if(location && location.docking_codes) - docking_controller.docking_codes = location.docking_codes - -/obj/effect/shuttle_landmark/forceMove() - var/obj/effect/overmap/visitable/map_origin = map_sectors["[z]"] - . = ..() - var/obj/effect/overmap/visitable/map_destination = map_sectors["[z]"] - if(map_origin != map_destination) - if(map_origin) - map_origin.remove_landmark(src, shuttle_restricted) - if(map_destination) - map_destination.add_landmark(src, shuttle_restricted) - -//Called when the landmark is added to an overmap sector. -/obj/effect/shuttle_landmark/proc/sector_set(var/obj/effect/overmap/visitable/O, shuttle_name) - shuttle_restricted = shuttle_name - -/obj/effect/shuttle_landmark/proc/is_valid(var/datum/shuttle/shuttle) - if(shuttle.current_location == src) - return FALSE - for(var/area/A in shuttle.shuttle_area) - var/list/translation = get_turf_translation(get_turf(shuttle.current_location), get_turf(src), A.contents) - if(check_collision(base_area, list_values(translation))) - return FALSE - var/conn = GetConnectedZlevels(z) - for(var/w in (z - shuttle.multiz) to z) - if(!(w in conn)) - return FALSE - return TRUE - -/obj/effect/shuttle_landmark/proc/cannot_depart(datum/shuttle/shuttle) - return FALSE - -/obj/effect/shuttle_landmark/proc/shuttle_arrived(datum/shuttle/shuttle) - -/proc/check_collision(area/target_area, list/target_turfs) - for(var/target_turf in target_turfs) - var/turf/target = target_turf - if(!target) - return TRUE //collides with edge of map - if(target.loc != target_area) - return TRUE //collides with another area - if(target.density) - return TRUE //dense turf - return FALSE - -//Self-naming/numbering ones. -/obj/effect/shuttle_landmark/automatic - name = "Navpoint" - landmark_tag = "navpoint" - flags = SLANDMARK_FLAG_AUTOSET - -/obj/effect/shuttle_landmark/automatic/Initialize() - landmark_tag += "-[x]-[y]-[z]-[random_id("landmarks",1,9999)]" - return ..() - -/obj/effect/shuttle_landmark/automatic/sector_set(var/obj/effect/overmap/visitable/O) - ..() - SetName("[O.name] - [initial(name)] ([x],[y])") - -//Subtype that calls explosion on init to clear space for shuttles -/obj/effect/shuttle_landmark/automatic/clearing - var/radius = LANDING_ZONE_RADIUS - -/obj/effect/shuttle_landmark/automatic/clearing/Initialize() - ..() - return INITIALIZE_HINT_LATELOAD - -/obj/effect/shuttle_landmark/automatic/clearing/LateInitialize() - ..() - for(var/turf/T in range(radius, src)) - if(T.density) - T.ChangeTurf(get_base_turf_by_area(T)) - - -/obj/item/device/spaceflare - name = "shuttle beacon" - desc = "Burst transmitter used to broadcast all needed information for shuttle navigation systems. Has a bright blue light attached for marking the spot where you probably shouldn't be standing." - icon = 'icons/obj/space_flare.dmi' - icon_state = "packaged" - light_color = "#3728ff" - /// Boolean. Whether or not the spaceflare has been activated. - var/active = FALSE - /// The shuttle landmark synced to this beacon. This is set when the beacon is activated. - var/obj/effect/shuttle_landmark/automatic/spaceflare/landmark - - -/obj/item/device/spaceflare/attack_self(mob/user) - if (activate(user)) - user.visible_message( - SPAN_NOTICE("\The [user] plants \the [src] and activates it."), - SPAN_NOTICE("You plant \the [src] and activate it."), - SPAN_ITALIC("You hear a soft hum.") - ) - - -/** - * Handles activation of the flare. - * - * Parameters - * `user` - The user activating the flare. Optional. Applies additional unequip processing and checks before activating the flare. - * - * Returns boolean - FALSE if the flare was not activated, TRUE if it was. - */ -/obj/item/device/spaceflare/proc/activate(mob/user) - if (active) - log_debug(append_admin_tools("\A [src] attempted to activate but was already active.", user, get_turf(src))) - return FALSE - - var/turf/T = get_turf(src) - if (isspaceturf(T) || isopenspace(T)) - if (user) - to_chat(user, SPAN_WARNING("\The [src] needs to be activated on solid ground.")) - return FALSE - - if (istype(user) && !user.unEquip(src, T)) - log_debug(append_admin_tools("\A [src] attempted to activate but could not be unequipped by the mob.", user, get_turf(src))) - return FALSE - - // Just in case some other weird things happen that try to call activate on a non-turf location - if (loc != T) - log_debug(append_admin_tools("\A [src] attempted to activate but was not on a valid turf.", user, get_turf(src))) - return FALSE - - if (user) - user.visible_message( - SPAN_ITALIC("\The [user] starts setting up \a [src]."), - SPAN_ITALIC("You start setting up \a [src]."), - SPAN_ITALIC("You hear the clicking of metal and plastic.") - ) - playsound(src, 'sound/items/shuttle_beacon_prepare.ogg', 100) - if (!do_after(user, 3 SECONDS, src, DO_PUBLIC_UNIQUE)) - return FALSE - playsound(src, 'sound/items/shuttle_beacon_complete.ogg', 100) - active = TRUE - anchored = TRUE - log_and_message_admins("activated a shuttle beacon in [get_area(src)].", user, get_turf(src)) - landmark = new(T, src) - update_icon() - return TRUE - - -/** - * Handles deactivation of the flare. - * - * Returns boolean - FALSE if the flare was not deactivated, TRUE if it was. - */ -/obj/item/device/spaceflare/proc/deactivate(silent = FALSE, keep_landmark = FALSE) - if (!active) - return FALSE - - active = FALSE - anchored = FALSE - if (keep_landmark) - landmark = null - else - QDEL_NULL(landmark) - update_icon() - if (!silent) - visible_message(SPAN_WARNING("\The [src] deactivates, going dark.")) - return TRUE - - -/obj/item/device/spaceflare/on_update_icon() - if (active) - icon_state = "deployed" - var/image/image = image(icon, "active") - image.plane = EFFECTS_ABOVE_LIGHTING_PLANE - image.layer = ABOVE_LIGHTING_LAYER - overlays += image - pixel_x = rand(-6, 6) - pixel_y = rand(-6, 6) - set_light(0.7, 0.1, 7, 2, "#85d1ff") - else - icon_state = initial(icon_state) - overlays.Cut() - set_light(0) - - -/obj/item/device/spaceflare/Destroy() - deactivate(TRUE) - . = ..() - - -/obj/item/device/spaceflare/shuttle_land_on() - if (active) - // If a shuttle landed here we don't want to destroy the landmark, that breaks things. It becomes a permanent beacon smushed into the ground instead. - landmark.desync_flare() - ..() - - -/obj/effect/shuttle_landmark/automatic/spaceflare - name = "Bluespace Beacon Signal" - /// The beacon object synced to this landmark. If this is ever null or qdeleted the landmark should delete itself. - var/obj/item/device/spaceflare/beacon - - -/obj/effect/shuttle_landmark/automatic/spaceflare/Initialize(mapload, obj/item/device/spaceflare/beacon) - . = ..() - - if (!istype(beacon)) - log_debug(append_admin_tools("\A [src] was initialized with an invalid or nonexistant beacon", location = get_turf(src))) - return INITIALIZE_HINT_QDEL - - if (beacon.landmark && beacon.landmark != src) - log_debug(append_admin_tools("\A [src] was initialized with a beacon already has a synced landmark.", location = get_turf(src))) - return INITIALIZE_HINT_QDEL - - src.beacon = beacon - GLOB.moved_event.register(beacon, src, /obj/effect/shuttle_landmark/automatic/spaceflare/proc/update_beacon_moved) - - -/obj/effect/shuttle_landmark/automatic/spaceflare/Destroy() - GLOB.moved_event.unregister(beacon, src, /obj/effect/shuttle_landmark/automatic/spaceflare/proc/update_beacon_moved) - if (beacon?.active) - log_debug(append_admin_tools("\A [src] was destroyed with a still active beacon.", location = get_turf(beacon))) - beacon.deactivate() - beacon = null - . = ..() - - -/// Event handler for when the beacon moves. Theoretically possible with a beacon deployed on a shuttle turf, or with adminbus. -/obj/effect/shuttle_landmark/automatic/spaceflare/proc/update_beacon_moved(atom/movable/moving_instance, atom/old_loc, atom/new_loc) - if (!isturf(new_loc) || isspaceturf(new_loc) || isopenspace(new_loc)) - log_debug(append_admin_tools("\A [src]'s beacon was moved to a non-turf or unacceptable location.", location = get_turf(new_loc))) - beacon.deactivate() - return - forceMove(new_loc) - SetName("[initial(name)] ([x],[y])") - log_debug(append_admin_tools("\A [src]'s beacon was moved to [get_area(new_loc)].", location = get_turf(src))) - - -/// Desynchronizes the effect from the beacon, rendering it a permanent landmark. -/obj/effect/shuttle_landmark/automatic/spaceflare/proc/desync_flare() - GLOB.moved_event.unregister(beacon, src, /obj/effect/shuttle_landmark/automatic/spaceflare/proc/update_beacon_moved) - if (beacon?.active) - beacon.deactivate(TRUE, TRUE) - beacon = null diff --git a/code/modules/shuttles/shuttle.dm b/code/modules/shuttles/shuttle.dm deleted file mode 100644 index b428c68ecd074..0000000000000 --- a/code/modules/shuttles/shuttle.dm +++ /dev/null @@ -1,286 +0,0 @@ -//shuttle moving state defines are in setup.dm - -/datum/shuttle - var/name = "" - var/warmup_time = 0 - var/moving_status = SHUTTLE_IDLE - - var/list/shuttle_area //can be both single area type or a list of areas - var/obj/effect/shuttle_landmark/current_location //This variable is type-abused initially: specify the landmark_tag, not the actual landmark. - - var/arrive_time = 0 //the time at which the shuttle arrives when long jumping - var/flags = 0 - var/process_state = IDLE_STATE //Used with SHUTTLE_FLAGS_PROCESS, as well as to store current state. - var/category = /datum/shuttle - var/multiz = 0 //how many multiz levels, starts at 0 - - var/ceiling_type = /turf/unsimulated/floor/shuttle_ceiling - - var/sound_takeoff = 'sound/effects/shuttle_takeoff.ogg' - var/sound_landing = 'sound/effects/shuttle_landing.ogg' - - var/knockdown = 1 //whether shuttle downs non-buckled people when it moves - - var/defer_initialisation = FALSE //this shuttle will/won't be initialised automatically. If set to true, you are responsible for initialzing the shuttle manually. - //Useful for shuttles that are initialed by map_template loading, or shuttles that are created in-game or not used. - var/logging_home_tag //Whether in-game logs will be generated whenever the shuttle leaves/returns to the landmark with this landmark_tag. - var/logging_access //Controls who has write access to log-related stuff; should correlate with pilot access. - - var/mothershuttle //tag of mothershuttle - var/motherdock //tag of mothershuttle landmark, defaults to starting location - -/datum/shuttle/New(_name, var/obj/effect/shuttle_landmark/initial_location) - ..() - if(_name) - src.name = _name - - var/list/areas = list() - if(!islist(shuttle_area)) - shuttle_area = list(shuttle_area) - for(var/T in shuttle_area) - var/area/A = locate(T) - if(!istype(A)) - CRASH("Shuttle \"[name]\" couldn't locate area [T].") - areas += A - shuttle_area = areas - - if(initial_location) - current_location = initial_location - else - current_location = SSshuttle.get_landmark(current_location) - if(!istype(current_location)) - CRASH("Shuttle \"[name]\" could not find its starting location.") - - if(src.name in SSshuttle.shuttles) - CRASH("A shuttle with the name '[name]' is already defined.") - SSshuttle.shuttles[src.name] = src - if(logging_home_tag) - new /datum/shuttle_log(src) - if(flags & SHUTTLE_FLAGS_PROCESS) - SSshuttle.process_shuttles += src - if(flags & SHUTTLE_FLAGS_SUPPLY) - if(SSsupply.shuttle) - CRASH("A supply shuttle is already defined.") - SSsupply.shuttle = src - -/datum/shuttle/Destroy() - current_location = null - - SSshuttle.shuttles -= src.name - SSshuttle.process_shuttles -= src - SSshuttle.shuttle_logs -= src - if(SSsupply.shuttle == src) - SSsupply.shuttle = null - - . = ..() - -/datum/shuttle/proc/short_jump(var/obj/effect/shuttle_landmark/destination) - if(moving_status != SHUTTLE_IDLE) return - - moving_status = SHUTTLE_WARMUP - if(sound_takeoff) - playsound(current_location, sound_takeoff, 100, 20, 0.2) - spawn(warmup_time*10) - if (moving_status == SHUTTLE_IDLE) - return //someone cancelled the launch - - if(!fuel_check()) //fuel error (probably out of fuel) occured, so cancel the launch - var/datum/shuttle/autodock/S = src - if(istype(S)) - S.cancel_launch(null) - return - - moving_status = SHUTTLE_INTRANSIT //shouldn't matter but just to be safe - attempt_move(destination) - moving_status = SHUTTLE_IDLE - -/datum/shuttle/proc/long_jump(var/obj/effect/shuttle_landmark/destination, var/obj/effect/shuttle_landmark/interim, var/travel_time) - if(moving_status != SHUTTLE_IDLE) return - - var/obj/effect/shuttle_landmark/start_location = current_location - - moving_status = SHUTTLE_WARMUP - if(sound_takeoff) - playsound(current_location, sound_takeoff, 100, 20, 0.2) - if (!istype(start_location.base_area, /area/space)) - var/area/A = get_area(start_location) - - for (var/mob/M in GLOB.player_list) - if (M.client && M.z == A.z && !istype(get_turf(M), /turf/space) && !(get_area(M) in src.shuttle_area)) - to_chat(M, SPAN_NOTICE("The rumble of engines are heard as a shuttle lifts off.")) - - spawn(warmup_time*10) - if(moving_status == SHUTTLE_IDLE) - return //someone cancelled the launch - - if(!fuel_check()) //fuel error (probably out of fuel) occured, so cancel the launch - var/datum/shuttle/autodock/S = src - if(istype(S)) - S.cancel_launch(null) - return - - arrive_time = world.time + travel_time*10 - moving_status = SHUTTLE_INTRANSIT - if(attempt_move(interim)) - var/fwooshed = 0 - while (world.time < arrive_time) - if(!fwooshed && (arrive_time - world.time) < 100) - fwooshed = 1 - playsound(destination, sound_landing, 100, 0, 7) - if (!istype(destination.base_area, /area/space)) - var/area/A = get_area(destination) - - for (var/mob/M in GLOB.player_list) - if (M.client && M.z == A.z && !istype(get_turf(M), /turf/space) && !(get_area(M) in src.shuttle_area)) - to_chat(M, SPAN_NOTICE("The rumble of a shuttle's engines fill the area as a ship manuevers in for a landing.")) - - sleep(5) - if(!attempt_move(destination)) - attempt_move(start_location) //try to go back to where we started. If that fails, I guess we're stuck in the interim location - - moving_status = SHUTTLE_IDLE - -/datum/shuttle/proc/fuel_check() - return 1 //fuel check should always pass in non-overmap shuttles (they have magic engines) - -/***************** -* Shuttle Moved Handling * (Observer Pattern Implementation: Shuttle Moved) -* Shuttle Pre Move Handling * (Observer Pattern Implementation: Shuttle Pre Move) -*****************/ - -/datum/shuttle/proc/attempt_move(var/obj/effect/shuttle_landmark/destination) - if(current_location == destination) - return FALSE - - if(!destination.is_valid(src)) - return FALSE - if(current_location.cannot_depart(src)) - return FALSE - testing("[src] moving to [destination]. Areas are [english_list(shuttle_area)]") - var/list/translation = list() - for(var/area/A in shuttle_area) - testing("Moving [A]") - translation += get_turf_translation(get_turf(current_location), get_turf(destination), A.contents) - var/old_location = current_location - GLOB.shuttle_pre_move_event.raise_event(src, old_location, destination) - shuttle_moved(destination, translation) - GLOB.shuttle_moved_event.raise_event(src, old_location, destination) - destination.shuttle_arrived(src) - return TRUE - -//just moves the shuttle from A to B, if it can be moved -//A note to anyone overriding move in a subtype. shuttle_moved() must absolutely not, under any circumstances, fail to move the shuttle. -//If you want to conditionally cancel shuttle launches, that logic must go in short_jump(), long_jump() or attempt_move() -/datum/shuttle/proc/shuttle_moved(var/obj/effect/shuttle_landmark/destination, var/list/turf_translation) - -// log_debug("move_shuttle() called for [shuttle_tag] leaving [origin] en route to [destination].") -// log_degug("area_coming_from: [origin]") -// log_debug("destination: [destination]") - if((flags & SHUTTLE_FLAGS_ZERO_G)) - var/new_grav = 1 - if(destination.flags & SLANDMARK_FLAG_ZERO_G) - var/area/new_area = get_area(destination) - new_grav = new_area.has_gravity - for(var/area/our_area in shuttle_area) - if(our_area.has_gravity != new_grav) - our_area.gravitychange(new_grav) - - for(var/turf/src_turf in turf_translation) - var/turf/dst_turf = turf_translation[src_turf] - if(src_turf.is_solid_structure()) //in case someone put a hole in the shuttle and you were lucky enough to be under it - for(var/atom/movable/AM in dst_turf) - if(!AM.simulated) - continue - AM.shuttle_land_on() - var/list/powernets = list() - for(var/area/A in shuttle_area) - // if there was a zlevel above our origin, erase our ceiling now we're leaving - if(HasAbove(current_location.z)) - for(var/turf/TO in A.contents) - var/turf/TA = GetAbove(TO) - if(istype(TA, ceiling_type)) - TA.ChangeTurf(get_base_turf_by_area(TA), 1, 1) - if(knockdown) - for(var/mob/M in A) - spawn(0) - if(istype(M, /mob/living/carbon)) - if(M.buckled) - to_chat(M, "Sudden acceleration presses you into your chair!") - shake_camera(M, 3, 1) - else - to_chat(M, "The floor lurches beneath you!") - shake_camera(M, 10, 1) - M.visible_message("[M.name] is tossed around by the sudden acceleration!") - M.throw_at_random(FALSE, 4, 1) - - for(var/obj/structure/cable/C in A) - powernets |= C.powernet - if(logging_home_tag) - var/datum/shuttle_log/s_log = SSshuttle.shuttle_logs[src] - s_log.handle_move(current_location, destination) - - translate_turfs(turf_translation, current_location.base_area, current_location.base_turf) - current_location = destination - - // if there's a zlevel above our destination, paint in a ceiling on it so we retain our air - if(HasAbove(current_location.z)) - for(var/area/A in shuttle_area) - for(var/turf/TD in A.contents) - var/turf/TA = GetAbove(TD) - if(istype(TA, get_base_turf_by_area(TA)) || istype(TA, /turf/simulated/open)) - if(get_area(TA) in shuttle_area) - continue - TA.ChangeTurf(ceiling_type, TRUE, TRUE, TRUE) - - // Remove all powernets that were affected, and rebuild them. - var/list/cables = list() - for(var/datum/powernet/P in powernets) - cables |= P.cables - qdel(P) - for(var/obj/structure/cable/C in cables) - if(!C.powernet) - var/datum/powernet/NewPN = new() - NewPN.add_cable(C) - propagate_network(C,C.powernet) - - if(mothershuttle) - var/datum/shuttle/mothership = SSshuttle.shuttles[mothershuttle] - if(mothership) - if(current_location.landmark_tag == motherdock) - mothership.shuttle_area |= shuttle_area - else - mothership.shuttle_area -= shuttle_area - -/// Handler for shuttles landing on atoms. Called by `shuttle_moved()`. -/atom/movable/proc/shuttle_land_on() - qdel(src) - -/mob/living/shuttle_land_on() - gib() - -//returns 1 if the shuttle has a valid arrive time -/datum/shuttle/proc/has_arrive_time() - return (moving_status == SHUTTLE_INTRANSIT) - -/datum/shuttle/proc/find_children() - . = list() - for(var/shuttle_name in SSshuttle.shuttles) - var/datum/shuttle/shuttle = SSshuttle.shuttles[shuttle_name] - if(shuttle.mothershuttle == name) - . += shuttle - -//Returns those areas that are not actually child shuttles. -/datum/shuttle/proc/find_childfree_areas() - . = shuttle_area.Copy() - for(var/datum/shuttle/child in find_children()) - . -= child.shuttle_area - -/datum/shuttle/autodock/proc/get_location_name() - if(moving_status == SHUTTLE_INTRANSIT) - return "In transit" - return current_location.name - -/datum/shuttle/autodock/proc/get_destination_name() - if(!next_location) - return "None" - return next_location.name diff --git a/code/modules/shuttles/shuttle_autodock.dm b/code/modules/shuttles/shuttle_autodock.dm deleted file mode 100644 index eeccef5cecbd4..0000000000000 --- a/code/modules/shuttles/shuttle_autodock.dm +++ /dev/null @@ -1,189 +0,0 @@ -#define DOCK_ATTEMPT_TIMEOUT 200 //how long in ticks we wait before assuming the docking controller is broken or blown up. - -/datum/shuttle/autodock - var/in_use = null //tells the controller whether this shuttle needs processing, also attempts to prevent double-use - var/last_dock_attempt_time = 0 - var/current_dock_target - //ID of the controller on the shuttle - var/dock_target = null - var/datum/computer/file/embedded_program/docking/shuttle_docking_controller - var/docking_codes - - var/obj/effect/shuttle_landmark/next_location //This is only used internally. - var/datum/computer/file/embedded_program/docking/active_docking_controller - - var/obj/effect/shuttle_landmark/landmark_transition //This variable is type-abused initially: specify the landmark_tag, not the actual landmark. - var/move_time = 120 //the time spent in the transition area - - category = /datum/shuttle/autodock - flags = SHUTTLE_FLAGS_PROCESS | SHUTTLE_FLAGS_ZERO_G - -/datum/shuttle/autodock/New(var/_name, var/obj/effect/shuttle_landmark/start_waypoint) - ..(_name, start_waypoint) - - //Initial dock - active_docking_controller = current_location.docking_controller - update_docking_target(current_location) - if(active_docking_controller) - set_docking_codes(active_docking_controller.docking_codes) - else if(GLOB.using_map.use_overmap) - var/obj/effect/overmap/visitable/location = map_sectors["[current_location.z]"] - if(location && location.docking_codes) - set_docking_codes(location.docking_codes) - dock() - - //Optional transition area - if(landmark_transition) - landmark_transition = SSshuttle.get_landmark(landmark_transition) - -/datum/shuttle/autodock/Destroy() - next_location = null - active_docking_controller = null - landmark_transition = null - - return ..() - -/datum/shuttle/autodock/proc/set_docking_codes(var/code) - docking_codes = code - if(shuttle_docking_controller) - shuttle_docking_controller.docking_codes = code - -/datum/shuttle/autodock/shuttle_moved() - force_undock() //bye! - ..() - -/datum/shuttle/autodock/proc/update_docking_target(var/obj/effect/shuttle_landmark/location) - if(location && location.special_dock_targets && location.special_dock_targets[name]) - current_dock_target = location.special_dock_targets[name] - else - current_dock_target = dock_target - shuttle_docking_controller = SSshuttle.docking_registry[current_dock_target] -/* - Docking stuff -*/ -/datum/shuttle/autodock/proc/dock() - if(active_docking_controller && shuttle_docking_controller) - shuttle_docking_controller.initiate_docking(active_docking_controller.id_tag) - last_dock_attempt_time = world.time - -/datum/shuttle/autodock/proc/undock() - if(shuttle_docking_controller) - shuttle_docking_controller.initiate_undocking() - -/datum/shuttle/autodock/proc/force_undock() - if(shuttle_docking_controller) - shuttle_docking_controller.force_undock() - -/datum/shuttle/autodock/proc/check_docked() - if(shuttle_docking_controller) - return shuttle_docking_controller.docked() - return TRUE - -/datum/shuttle/autodock/proc/check_undocked() - if(shuttle_docking_controller) - return shuttle_docking_controller.can_launch() - return TRUE - -/* - Please ensure that long_jump() and short_jump() are only called from here. This applies to subtypes as well. - Doing so will ensure that multiple jumps cannot be initiated in parallel. -*/ -/datum/shuttle/autodock/Process() - switch(process_state) - if (WAIT_LAUNCH) - if(check_undocked()) - //*** ready to go - process_launch() - - if (FORCE_LAUNCH) - process_launch() - - if (WAIT_ARRIVE) - if (moving_status == SHUTTLE_IDLE) - //*** we made it to the destination, update stuff - process_arrived() - process_state = WAIT_FINISH - - if (WAIT_FINISH) - if (world.time > last_dock_attempt_time + DOCK_ATTEMPT_TIMEOUT || check_docked()) - //*** all done here - process_state = IDLE_STATE - arrived() - -//not to be confused with the arrived() proc -/datum/shuttle/autodock/proc/process_arrived() - active_docking_controller = next_location.docking_controller - update_docking_target(next_location) - dock() - - next_location = null - in_use = null //release lock - -/datum/shuttle/autodock/proc/get_travel_time() - return move_time - -/datum/shuttle/autodock/proc/process_launch() - if(!next_location.is_valid(src) || current_location.cannot_depart(src)) - process_state = IDLE_STATE - in_use = null - return - if (get_travel_time() && landmark_transition) - . = long_jump(next_location, landmark_transition, get_travel_time()) - else - . = short_jump(next_location) - process_state = WAIT_ARRIVE - -/* - Guards -*/ -/datum/shuttle/autodock/proc/can_launch() - return (next_location && next_location.is_valid(src) && !current_location.cannot_depart(src) && moving_status == SHUTTLE_IDLE && !in_use) - -/datum/shuttle/autodock/proc/can_force() - return (next_location && next_location.is_valid(src) && !current_location.cannot_depart(src) && moving_status == SHUTTLE_IDLE && process_state == WAIT_LAUNCH) - -/datum/shuttle/autodock/proc/can_cancel() - return (moving_status == SHUTTLE_WARMUP || process_state == WAIT_LAUNCH || process_state == FORCE_LAUNCH) - -/* - "Public" procs -*/ -/datum/shuttle/autodock/proc/launch(var/user) - if (!can_launch()) return - - in_use = user //obtain an exclusive lock on the shuttle - - process_state = WAIT_LAUNCH - undock() - -/datum/shuttle/autodock/proc/force_launch(var/user) - if (!can_force()) return - - in_use = user //obtain an exclusive lock on the shuttle - - process_state = FORCE_LAUNCH - -/datum/shuttle/autodock/proc/cancel_launch(var/user) - if (!can_cancel()) return - - moving_status = SHUTTLE_IDLE - process_state = WAIT_FINISH - in_use = null - - //whatever we were doing with docking: stop it, then redock - force_undock() - spawn(1 SECOND) - dock() - -//returns 1 if the shuttle is getting ready to move, but is not in transit yet -/datum/shuttle/autodock/proc/is_launching() - return (moving_status == SHUTTLE_WARMUP || process_state == WAIT_LAUNCH || process_state == FORCE_LAUNCH) - -//This gets called when the shuttle finishes arriving at it's destination -//This can be used by subtypes to do things when the shuttle arrives. -//Note that this is called when the shuttle leaves the WAIT_FINISHED state, the proc name is a little misleading -/datum/shuttle/autodock/proc/arrived() - return //do nothing for now - -/obj/effect/shuttle_landmark/transit - flags = SLANDMARK_FLAG_ZERO_G \ No newline at end of file diff --git a/code/modules/shuttles/shuttle_console.dm b/code/modules/shuttles/shuttle_console.dm deleted file mode 100644 index fc50e82c0d1e1..0000000000000 --- a/code/modules/shuttles/shuttle_console.dm +++ /dev/null @@ -1,127 +0,0 @@ -/obj/machinery/computer/shuttle_control - name = "shuttle control console" - icon = 'icons/obj/computer.dmi' - icon_keyboard = "atmos_key" - icon_screen = "shuttle" - base_type = /obj/machinery/computer/shuttle_control - machine_name = "basic shuttle console" - machine_desc = "A simple control system for small spacecraft, allowing automated movement from one navigation point to another." - - var/shuttle_tag // Used to coordinate data in shuttle controller. - var/hacked = 0 // Has been emagged, no access restrictions. - - var/ui_template = "shuttle_control_console.tmpl" - - -/obj/machinery/computer/shuttle_control/interface_interact(mob/user) - ui_interact(user) - return TRUE - -/obj/machinery/computer/shuttle_control/proc/get_ui_data(var/datum/shuttle/autodock/shuttle) - var/shuttle_state - switch(shuttle.moving_status) - if(SHUTTLE_IDLE) shuttle_state = "idle" - if(SHUTTLE_WARMUP) shuttle_state = "warmup" - if(SHUTTLE_INTRANSIT) shuttle_state = "in_transit" - - var/shuttle_status - switch (shuttle.process_state) - if(IDLE_STATE) - var/cannot_depart = shuttle.current_location.cannot_depart(shuttle) - if (shuttle.in_use) - shuttle_status = "Busy." - else if(cannot_depart) - shuttle_status = cannot_depart - else - shuttle_status = "Standing-by at \the [shuttle.get_location_name()]." - - if(WAIT_LAUNCH, FORCE_LAUNCH) - shuttle_status = "Shuttle has received command and will depart shortly." - if(WAIT_ARRIVE) - shuttle_status = "Proceeding to \the [shuttle.get_destination_name()]." - if(WAIT_FINISH) - shuttle_status = "Arriving at destination now." - - return list( - "shuttle_status" = shuttle_status, - "shuttle_state" = shuttle_state, - "has_docking" = shuttle.shuttle_docking_controller? 1 : 0, - "docking_status" = shuttle.shuttle_docking_controller? shuttle.shuttle_docking_controller.get_docking_status() : null, - "docking_override" = shuttle.shuttle_docking_controller? shuttle.shuttle_docking_controller.override_enabled : null, - "can_launch" = shuttle.can_launch(), - "can_cancel" = shuttle.can_cancel(), - "can_force" = shuttle.can_force(), - "timeleft" = max(round((shuttle.arrive_time - world.time) / 10, 1), 0), - "docking_codes" = shuttle.docking_codes - ) - -// This is a subset of the actual checks; contains those that give messages to the user. -/obj/machinery/computer/shuttle_control/proc/can_move(var/datum/shuttle/autodock/shuttle, var/user) - var/cannot_depart = shuttle.current_location.cannot_depart(shuttle) - if(cannot_depart) - to_chat(user, SPAN_WARNING(cannot_depart)) - return FALSE - if(!shuttle.next_location.is_valid(shuttle)) - to_chat(user, SPAN_WARNING("Destination zone is invalid or obstructed.")) - return FALSE - return TRUE - -/obj/machinery/computer/shuttle_control/proc/handle_topic_href(var/datum/shuttle/autodock/shuttle, var/list/href_list, var/user) - if(!istype(shuttle)) - return TOPIC_NOACTION - - if(href_list["move"]) - if(can_move(shuttle, user)) - shuttle.launch(src) - return TOPIC_REFRESH - return TOPIC_HANDLED - - if(href_list["force"]) - if(can_move(shuttle, user)) - shuttle.force_launch(src) - return TOPIC_REFRESH - return TOPIC_HANDLED - - if(href_list["cancel"]) - shuttle.cancel_launch(src) - return TOPIC_REFRESH - - if(href_list["set_codes"]) - var/newcode = input("Input new docking codes", "Docking codes", shuttle.docking_codes) as text|null - if (newcode && CanInteract(usr, GLOB.default_state)) - shuttle.set_docking_codes(uppertext(newcode)) - return TOPIC_REFRESH - -/obj/machinery/computer/shuttle_control/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1) - var/datum/shuttle/autodock/shuttle = SSshuttle.shuttles[shuttle_tag] - if (!istype(shuttle)) - to_chat(user,"Unable to establish link with the shuttle.") - return - - var/list/data = get_ui_data(shuttle) - - ui = SSnano.try_update_ui(user, src, ui_key, ui, data, force_open) - if(!ui) - ui = new(user, src, ui_key, ui_template, "[shuttle_tag] Shuttle Control", 470, 450) - ui.set_initial_data(data) - ui.open() - ui.set_auto_update(1) - -/obj/machinery/computer/shuttle_control/OnTopic(user, href_list) - return handle_topic_href(SSshuttle.shuttles[shuttle_tag], href_list, user) - -/obj/machinery/computer/shuttle_control/emag_act(var/remaining_charges, var/mob/user) - if (!hacked) - req_access = list() - hacked = 1 - to_chat(user, "You short out the console's ID checking system. It's now available to everyone!") - return 1 - -/obj/machinery/computer/shuttle_control/bullet_act(var/obj/item/projectile/Proj) - visible_message("\The [Proj] ricochets off \the [src]!") - -/obj/machinery/computer/shuttle_control/ex_act() - return - -/obj/machinery/computer/shuttle_control/emp_act() - return diff --git a/code/modules/shuttles/shuttle_console_multi.dm b/code/modules/shuttles/shuttle_console_multi.dm deleted file mode 100644 index 7b61ed01e17d1..0000000000000 --- a/code/modules/shuttles/shuttle_console_multi.dm +++ /dev/null @@ -1,40 +0,0 @@ -/obj/machinery/computer/shuttle_control/multi - ui_template = "shuttle_control_console_multi.tmpl" - can_use_tools = FALSE - -/obj/machinery/computer/shuttle_control/multi/get_ui_data(var/datum/shuttle/autodock/multi/shuttle) - . = ..() - if(istype(shuttle)) - . += list( - "destination_name" = shuttle.next_location? shuttle.next_location.name : "No destination set.", - "can_pick" = shuttle.moving_status == SHUTTLE_IDLE, - ) - -/obj/machinery/computer/shuttle_control/multi/handle_topic_href(var/datum/shuttle/autodock/multi/shuttle, var/list/href_list) - if((. = ..()) != null) - return - - if(href_list["pick"]) - var/dest_key = input("Choose shuttle destination", "Shuttle Destination") as null|anything in shuttle.get_destinations() - if(dest_key && CanInteract(usr, GLOB.default_state)) - shuttle.set_destination(dest_key, usr) - return TOPIC_REFRESH - - -/obj/machinery/computer/shuttle_control/multi/antag - ui_template = "shuttle_control_console_antag.tmpl" - -/obj/machinery/computer/shuttle_control/multi/antag/get_ui_data(var/datum/shuttle/autodock/multi/antag/shuttle) - . = ..() - if(istype(shuttle)) - . += list( - "cloaked" = shuttle.cloaked, - ) - -/obj/machinery/computer/shuttle_control/multi/antag/handle_topic_href(var/datum/shuttle/autodock/multi/antag/shuttle, var/list/href_list) - if((. = ..()) != null) - return - - if(href_list["toggle_cloaked"]) - shuttle.cloaked = !shuttle.cloaked - return TOPIC_REFRESH diff --git a/code/modules/shuttles/shuttle_emergency.dm b/code/modules/shuttles/shuttle_emergency.dm deleted file mode 100644 index 94df25e37b73a..0000000000000 --- a/code/modules/shuttles/shuttle_emergency.dm +++ /dev/null @@ -1,251 +0,0 @@ -/datum/shuttle/autodock/ferry/emergency - category = /datum/shuttle/autodock/ferry/emergency - move_time = 10 MINUTES - var/datum/evacuation_controller/shuttle/emergency_controller - -/datum/shuttle/autodock/ferry/emergency/New() - . = ..() - emergency_controller = evacuation_controller - if(!istype(emergency_controller)) - CRASH("Escape shuttle created without the appropriate controller type.") - if(emergency_controller.shuttle) - CRASH("An emergency shuttle has already been created.") - emergency_controller.shuttle = src - -/datum/shuttle/autodock/ferry/emergency/arrived() - . = ..() - - if(!emergency_controller.has_evacuated()) - emergency_controller.finish_preparing_evac() - - if (istype(in_use, /obj/machinery/computer/shuttle_control/emergency)) - var/obj/machinery/computer/shuttle_control/emergency/C = in_use - C.reset_authorization() - -/datum/shuttle/autodock/ferry/emergency/long_jump(var/destination, var/interim, var/travel_time, var/direction) - ..(destination, interim, emergency_controller.get_long_jump_time(), direction) - -/datum/shuttle/autodock/ferry/emergency/shuttle_moved() - if(next_location != waypoint_station) - emergency_controller.shuttle_leaving() // This is a hell of a line. v - priority_announcement.Announce(replacetext_char(replacetext_char((emergency_controller.emergency_evacuation ? GLOB.using_map.emergency_shuttle_leaving_dock : GLOB.using_map.shuttle_leaving_dock), "%dock_name%", "[GLOB.using_map.dock_name]"), "%ETA%", "[round(emergency_controller.get_eta()/60,1)] minute\s")) - else if(next_location == waypoint_offsite && emergency_controller.has_evacuated()) - emergency_controller.shuttle_evacuated() - ..() - -/datum/shuttle/autodock/ferry/emergency/can_launch(var/user) - if (istype(user, /obj/machinery/computer/shuttle_control/emergency)) - var/obj/machinery/computer/shuttle_control/emergency/C = user - if (!C.has_authorization()) - return 0 - return ..() - -/datum/shuttle/autodock/ferry/emergency/can_force(var/user) - if (istype(user, /obj/machinery/computer/shuttle_control/emergency)) - var/obj/machinery/computer/shuttle_control/emergency/C = user - - //initiating or cancelling a launch ALWAYS requires authorization, but if we are already set to launch anyways than forcing does not. - //this is so that people can force launch if the docking controller cannot safely undock without needing X heads to swipe. - if (!(process_state == WAIT_LAUNCH || C.has_authorization())) - return 0 - return ..() - -/datum/shuttle/autodock/ferry/emergency/can_cancel(var/user) - if(emergency_controller.has_evacuated()) - return 0 - if (istype(user, /obj/machinery/computer/shuttle_control/emergency)) - var/obj/machinery/computer/shuttle_control/emergency/C = user - if (!C.has_authorization()) - return 0 - return ..() - -/datum/shuttle/autodock/ferry/emergency/launch(var/user) - if (!can_launch(user)) return - - if (istype(user, /obj/machinery/computer/shuttle_control/emergency)) //if we were given a command by an emergency shuttle console - if (emergency_controller.autopilot) - emergency_controller.autopilot = 0 - to_world("Alert: The shuttle autopilot has been overridden. Launch sequence initiated!") - - if(usr) - log_and_message_admins("has overridden the shuttle autopilot and activated launch sequence") - - ..(user) - -/datum/shuttle/autodock/ferry/emergency/force_launch(var/user) - if (!can_force(user)) return - - if (istype(user, /obj/machinery/computer/shuttle_control/emergency)) //if we were given a command by an emergency shuttle console - if (emergency_controller.autopilot) - emergency_controller.autopilot = 0 - to_world("Alert: The shuttle autopilot has been overridden. Bluespace drive engaged!") - - if(usr) - log_and_message_admins("has overridden the shuttle autopilot and forced immediate launch") - - ..(user) - -/datum/shuttle/autodock/ferry/emergency/cancel_launch(var/user) - - if (!can_cancel(user)) return - - if(!emergency_controller.shuttle_preparing()) - - if (istype(user, /obj/machinery/computer/shuttle_control/emergency)) //if we were given a command by an emergency shuttle console - if (emergency_controller.autopilot) - emergency_controller.autopilot = 0 - to_world("Alert: The shuttle autopilot has been overridden. Launch sequence aborted!") - - if(usr) - log_and_message_admins("has overridden the shuttle autopilot and cancelled launch sequence") - - ..(user) - -/obj/machinery/computer/shuttle_control/emergency - shuttle_tag = "Escape" - var/debug = 0 - var/req_authorizations = 2 - var/list/authorized = list() - -/obj/machinery/computer/shuttle_control/emergency/proc/has_authorization() - return (authorized.len >= req_authorizations || emagged) - -/obj/machinery/computer/shuttle_control/emergency/proc/reset_authorization() - //no need to reset emagged status. If they really want to go back to the station they can. - authorized = initial(authorized) - -//returns 1 if the ID was accepted and a new authorization was added, 0 otherwise -/obj/machinery/computer/shuttle_control/emergency/proc/read_authorization(var/obj/item/ident) - if (!ident || !istype(ident)) - return 0 - if (authorized.len >= req_authorizations) - return 0 //don't need any more - - var/decl/security_state/security_state = decls_repository.get_decl(GLOB.using_map.security_state) - if (!evacuation_controller.emergency_evacuation && security_state.current_security_level_is_lower_than(security_state.high_security_level)) - src.visible_message("\The [src] buzzes. It does not appear to be accepting any commands.") - return 0 - - var/list/access - var/auth_name - var/dna_hash - - var/obj/item/card/id/ID = ident.GetIdCard() - - if(!ID) - return - - access = ID.access - auth_name = "[ID.registered_name] ([ID.assignment])" - dna_hash = ID.dna_hash - - if (!access || !istype(access)) - return 0 //not an ID - - if (dna_hash in authorized) - src.visible_message("\The [src] buzzes. That ID has already been scanned.") - return 0 - - if (!(access_bridge in access)) - src.visible_message("\The [src] buzzes, rejecting [ident].") - return 0 - - src.visible_message("\The [src] beeps as it scans [ident].") - authorized[dna_hash] = auth_name - if (req_authorizations - authorized.len) - to_world("Alert: [req_authorizations - authorized.len] authorization\s needed to override the shuttle autopilot.") - - if(usr) - log_and_message_admins("has inserted [ID] into the shuttle control computer - [req_authorizations - authorized.len] authorisation\s needed") - - return 1 - -/obj/machinery/computer/shuttle_control/emergency/emag_act(var/remaining_charges, var/mob/user) - if (!emagged) - to_chat(user, "You short out \the [src]'s authorization protocols.") - emagged = TRUE - return 1 - -/obj/machinery/computer/shuttle_control/emergency/attackby(obj/item/W as obj, mob/user as mob) - read_authorization(W) - ..() - -/obj/machinery/computer/shuttle_control/emergency/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1) - var/data[0] - var/datum/shuttle/autodock/ferry/emergency/shuttle = SSshuttle.shuttles[shuttle_tag] - if (!istype(shuttle)) - return - - var/shuttle_state - switch(shuttle.moving_status) - if(SHUTTLE_IDLE) shuttle_state = "idle" - if(SHUTTLE_WARMUP) shuttle_state = "warmup" - if(SHUTTLE_INTRANSIT) shuttle_state = "in_transit" - - var/shuttle_status - switch (shuttle.process_state) - if(IDLE_STATE) - if (shuttle.in_use) - shuttle_status = "Busy." - else if (!shuttle.location) - shuttle_status = "Standing-by at [GLOB.using_map.station_name]." - else - shuttle_status = "Standing-by at [GLOB.using_map.dock_name]." - if(WAIT_LAUNCH, FORCE_LAUNCH) - shuttle_status = "Shuttle has received command and will depart shortly." - if(WAIT_ARRIVE) - shuttle_status = "Proceeding to destination." - if(WAIT_FINISH) - shuttle_status = "Arriving at destination now." - - //build a list of authorizations - var/list/auth_list[req_authorizations] - - if (!emagged) - var/i = 1 - for (var/dna_hash in authorized) - auth_list[i++] = list("auth_name"=authorized[dna_hash], "auth_hash"=dna_hash) - - while (i <= req_authorizations) //fill up the rest of the list with blank entries - auth_list[i++] = list("auth_name"="", "auth_hash"=null) - else - for (var/i = 1; i <= req_authorizations; i++) - auth_list[i] = list("auth_name"="ERROR", "auth_hash"=null) - - var/has_auth = has_authorization() - - data = list( - "shuttle_status" = shuttle_status, - "shuttle_state" = shuttle_state, - "has_docking" = shuttle.active_docking_controller? 1 : 0, - "docking_status" = shuttle.active_docking_controller? shuttle.active_docking_controller.get_docking_status() : null, - "docking_override" = shuttle.active_docking_controller? shuttle.active_docking_controller.override_enabled : null, - "can_launch" = shuttle.can_launch(src), - "can_cancel" = shuttle.can_cancel(src), - "can_force" = shuttle.can_force(src), - "auth_list" = auth_list, - "has_auth" = has_auth, - "user" = debug? user : null, - ) - - ui = SSnano.try_update_ui(user, src, ui_key, ui, data, force_open) - - if (!ui) - ui = new(user, src, ui_key, "escape_shuttle_control_console.tmpl", "Shuttle Control", 470, 420) - ui.set_initial_data(data) - ui.open() - ui.set_auto_update(1) - -/obj/machinery/computer/shuttle_control/emergency/OnTopic(user, href_list) - if(href_list["removeid"]) - var/dna_hash = href_list["removeid"] - authorized -= dna_hash - . = TOPIC_REFRESH - - else if(!emagged && href_list["scanid"]) - //They selected an empty entry. Try to scan their id. - var/mob/living/carbon/human/H = user - if (istype(H)) - if (!read_authorization(H.get_active_hand())) //try to read what's in their hand first - read_authorization(H.wear_id) - . = TOPIC_REFRESH diff --git a/code/modules/shuttles/shuttle_engines.dm b/code/modules/shuttles/shuttle_engines.dm deleted file mode 100644 index 7f5a9b65920fc..0000000000000 --- a/code/modules/shuttles/shuttle_engines.dm +++ /dev/null @@ -1,49 +0,0 @@ -/obj/structure/shuttle - name = "shuttle" - icon = 'icons/turf/shuttle.dmi' - -/obj/structure/shuttle/window - name = "shuttle window" - icon = 'icons/obj/podwindows.dmi' - icon_state = "1" - density = TRUE - opacity = 0 - anchored = TRUE - -/obj/structure/shuttle/window/CanPass(atom/movable/mover, turf/target, height, air_group) - if(!height || air_group) return 0 - else return ..() - -/obj/structure/shuttle/engine - name = "engine" - density = TRUE - anchored = TRUE - -/obj/structure/shuttle/engine/heater - name = "heater" - icon_state = "heater" - atom_flags = ATOM_FLAG_CLIMBABLE - -/obj/structure/shuttle/engine/platform - name = "platform" - icon_state = "platform" - -/obj/structure/shuttle/engine/propulsion - name = "propulsion" - icon_state = "propulsion" - opacity = 1 - -/obj/structure/shuttle/engine/propulsion/burst - name = "burst" - -/obj/structure/shuttle/engine/propulsion/burst/left - name = "left" - icon_state = "burst_l" - -/obj/structure/shuttle/engine/propulsion/burst/right - name = "right" - icon_state = "burst_r" - -/obj/structure/shuttle/engine/router - name = "router" - icon_state = "router" diff --git a/code/modules/shuttles/shuttle_ferry.dm b/code/modules/shuttles/shuttle_ferry.dm deleted file mode 100644 index 7ad125e5c9bf0..0000000000000 --- a/code/modules/shuttles/shuttle_ferry.dm +++ /dev/null @@ -1,47 +0,0 @@ - - -/datum/shuttle/autodock/ferry - var/location = 0 //0 = at area_station, 1 = at area_offsite - var/direction = 0 //0 = going to station, 1 = going to offsite. - - var/obj/effect/shuttle_landmark/waypoint_station //This variable is type-abused initially: specify the landmark_tag, not the actual landmark. - var/obj/effect/shuttle_landmark/waypoint_offsite //This variable is type-abused initially: specify the landmark_tag, not the actual landmark. - - category = /datum/shuttle/autodock/ferry - -/datum/shuttle/autodock/ferry/New(_name) - if(waypoint_station) - waypoint_station = SSshuttle.get_landmark(waypoint_station) - if(waypoint_offsite) - waypoint_offsite = SSshuttle.get_landmark(waypoint_offsite) - - ..(_name, get_location_waypoint(location)) - - next_location = get_location_waypoint(!location) - -//Gets the shuttle landmark associated with the given location (defaults to current location) -/datum/shuttle/autodock/ferry/proc/get_location_waypoint(location_id = null) - if (isnull(location_id)) - location_id = location - - if (!location_id) - return waypoint_station - return waypoint_offsite - -/datum/shuttle/autodock/ferry/short_jump(var/destination) - direction = !location - ..() - -/datum/shuttle/autodock/ferry/long_jump(var/destination, var/obj/effect/shuttle_landmark/interim, var/travel_time) - direction = !location - ..() - -/datum/shuttle/autodock/ferry/shuttle_moved() - ..() - - if (next_location == waypoint_station) location = 0 - if (next_location == waypoint_offsite) location = 1 - -/datum/shuttle/autodock/ferry/process_arrived() - ..() - next_location = get_location_waypoint(!location) diff --git a/code/modules/shuttles/shuttle_log.dm b/code/modules/shuttles/shuttle_log.dm deleted file mode 100644 index 1b47e08bc859d..0000000000000 --- a/code/modules/shuttles/shuttle_log.dm +++ /dev/null @@ -1,154 +0,0 @@ -//Store information about shuttle missions. Used by deck management program. - -/datum/shuttle_log - var/shuttle_name //The shuttle for which this is the log. - var/list/datum/shuttle_mission/missions = list() //The actual log entries. This includes all past missions and the current one if started. - var/list/datum/shuttle_mission/queued_missions = list() //Missions which are queued up, in order ([1] is the next one scheduled). - var/datum/shuttle_mission/current_mission //The current mission, planned or ongoing. Will also be in either missions or queued_missions, depending on stage. - var/home_base //The landmark tag from which missions originate. - var/list/datum/nano_module/registered = list() //Nanomodules using logs should register to receive updates. - var/last_spam = 0 //Helps with spam control from deck software. - -/datum/shuttle_log/New(datum/shuttle/given_shuttle) - ..() - if(given_shuttle.logging_home_tag) - shuttle_name = given_shuttle.name - home_base = given_shuttle.logging_home_tag - SSshuttle.shuttle_logs[given_shuttle] = src - -/datum/shuttle_log/Destroy() - update_registred() - registered = null - current_mission = null - QDEL_NULL_LIST(missions) - QDEL_NULL_LIST(queued_missions) - . = ..() - -/datum/shuttle_log/proc/register(datum/nano_module/module) - registered += module - -/datum/shuttle_log/proc/unregister(datum/nano_module/module) - registered -= module - -/datum/shuttle_log/proc/update_registred() - for(var/datum/nano_module/module in registered) - SSnano.update_uis(module) - -/datum/shuttle_log/proc/submit_report(datum/shuttle_mission/mission, datum/computer_file/report/report, mob/user) - if(!report.submit(user)) - return 0 - if(istype(report, /datum/computer_file/report/flight_plan)) - if(mission.flight_plan) - qdel(mission.flight_plan) - mission.flight_plan = report - if(istype(report, /datum/computer_file/report/recipient/shuttle)) - var/datum/computer_file/report/recipient/shuttle/new_report = report - var/old_report = locate(report.type) in mission.other_reports - if(old_report) - mission.other_reports -= old_report - qdel(old_report) - new_report.mission.set_value(mission.name) - mission.other_reports += report - update_registred() - return 1 - -/datum/shuttle_log/proc/process_queue() - if(current_mission) //Process queue changes due to stage changes. - switch(current_mission.stage) - if(SHUTTLE_MISSION_FINISHED) - current_mission = null - if(SHUTTLE_MISSION_STARTED) - if(current_mission in queued_missions) - queued_missions -= current_mission - missions += current_mission - if(!current_mission && length(queued_missions)) - current_mission = queued_missions[1] - current_mission.stage = SHUTTLE_MISSION_PLANNED - update_registred() - -/datum/shuttle_log/proc/create_mission(name) - var/datum/shuttle_mission/mission = new() - if(name) - mission.name = name - else - mission.name = "[shuttle_name]: Mission [length(missions)+1]" - mission.ID = sequential_id(type) - mission.shuttle_name = shuttle_name - queued_missions += mission - process_queue() - return mission - -/datum/shuttle_log/proc/rename_mission(datum/shuttle_mission/mission, name) - if(!(mission in (missions + queued_missions))) - return - if(name) - mission.name = name - for(var/datum/computer_file/report/recipient/shuttle/report in mission.other_reports) - report.mission.set_value(name) - update_registred() - -//Only missions that haven't started can be deleted; returns 0 on failure. -/datum/shuttle_log/proc/delete_mission(datum/shuttle_mission/mission) - if(!(mission in queued_missions)) - return 0 - queued_missions -= mission - if(current_mission == mission) - current_mission = null - qdel(mission) - process_queue() - return 1 - -//Tries to move the mission in the queue, relative position = 1 means one ahead in the queue, -1 one back. -/datum/shuttle_log/proc/move_in_queue(datum/shuttle_mission/mission, relative_position) - if(!(mission in queued_missions)) - return - if(current_mission in queued_missions) - current_mission.stage = SHUTTLE_MISSION_QUEUED - current_mission = null //We'll reset this at the end. - var/index = queued_missions.Find(mission) - var/new_index = clamp(index - relative_position, 1, length(queued_missions)) - queued_missions -= mission - queued_missions.Insert(new_index, mission) - process_queue() - -/datum/shuttle_log/proc/mission_from_ID(given_id) - for(var/datum/shuttle_mission/mission in (missions + queued_missions)) - if(given_id == mission.ID) - return mission - -/datum/shuttle_log/proc/handle_move(obj/effect/shuttle_landmark/origin, obj/effect/shuttle_landmark/destination) - var/obj/effect/shuttle_landmark/home = SSshuttle.get_landmark(home_base) - if(origin == home) - shuttle_launched() - if(destination == home) - shuttle_returned() - -/datum/shuttle_log/proc/shuttle_launched() - if(!current_mission || (current_mission.stage != SHUTTLE_MISSION_PLANNED)) - create_mission() - current_mission.stage = SHUTTLE_MISSION_STARTED - current_mission.depart_time = stationtime2text() - process_queue() - -/datum/shuttle_log/proc/shuttle_returned() - if(!current_mission || (current_mission.stage != SHUTTLE_MISSION_STARTED)) - current_mission = null - CRASH("Shuttle returned, but mission stage was incorrect or no mission was logged.") - current_mission.stage = SHUTTLE_MISSION_FINISHED - current_mission.return_time = stationtime2text() - process_queue() - -/datum/shuttle_mission - var/shuttle_name - var/name //Name assigned to the mission; visible to players. - var/ID //Autogenerated ID; don't change this manually. - var/stage = SHUTTLE_MISSION_QUEUED //The stage the mission is in. - var/depart_time //The station time the shuttle left (null if hasn't left). - var/return_time //The station time the shuttle came back. - var/datum/computer_file/report/flight_plan/flight_plan - var/list/other_reports = list() - -/datum/shuttle_mission/Destroy() - QDEL_NULL(flight_plan) - QDEL_NULL_LIST(other_reports) - . = ..() \ No newline at end of file diff --git a/code/modules/shuttles/shuttle_specops.dm b/code/modules/shuttles/shuttle_specops.dm deleted file mode 100644 index 50f7d3f57c189..0000000000000 --- a/code/modules/shuttles/shuttle_specops.dm +++ /dev/null @@ -1,200 +0,0 @@ -/obj/machinery/computer/shuttle_control/specops - name = "special operations shuttle console" - shuttle_tag = "Special Operations" - req_access = list(access_cent_specops) - -/obj/machinery/computer/shuttle_control/specops/attack_ai(user as mob) - to_chat(user, "Access Denied.") - return 1 - -/datum/shuttle/autodock/ferry/specops - var/specops_return_delay = 6000 //After moving, the amount of time that must pass before the shuttle may move again - var/specops_countdown_time = 600 //Length of the countdown when moving the shuttle - - var/obj/item/device/radio/intercom/announcer = null - var/reset_time = 0 //the world.time at which the shuttle will be ready to move again. - var/launch_prep = 0 - var/cancel_countdown = 0 - category = /datum/shuttle/autodock/ferry/specops - -/datum/shuttle/autodock/ferry/specops/New() - ..() - announcer = new /obj/item/device/radio/intercom(null)//We need a fake AI to announce some stuff below. Otherwise it will be wonky. - announcer.config(list("Response Team" = 0)) - -/datum/shuttle/autodock/ferry/specops/proc/radio_announce(var/message) - if(announcer) - announcer.autosay(message, "A.L.I.C.E.", "Response Team") - - -/datum/shuttle/autodock/ferry/specops/launch(var/user) - if (!can_launch()) - return - - if (istype(user, /obj/machinery/computer)) - var/obj/machinery/computer/C = user - - if(world.time <= reset_time) - C.visible_message("[GLOB.using_map.boss_name] will not allow the Special Operations shuttle to launch yet.") - if (((world.time - reset_time)/10) > 60) - C.visible_message("[-((world.time - reset_time)/10)/60] minutes remain!") - else - C.visible_message("[-(world.time - reset_time)/10] seconds remain!") - return - - C.visible_message("The Special Operations shuttle will depart in [(specops_countdown_time/10)] seconds.") - - if (location) //returning - radio_announce("THE SPECIAL OPERATIONS SHUTTLE IS PREPARING TO RETURN") - else - radio_announce("THE SPECIAL OPERATIONS SHUTTLE IS PREPARING FOR LAUNCH") - - sleep_until_launch() - - if (location) - var/obj/machinery/light/small/readylight/light = locate() in shuttle_area - if(light) light.set_state(0) - - //launch - radio_announce("ALERT: INITIATING LAUNCH SEQUENCE") - ..(user) - -/datum/shuttle/autodock/ferry/specops/shuttle_moved() - ..() - - spawn(2 SECONDS) - if (!location) //just arrived home - for(var/turf/T in get_area_turfs(shuttle_area)) - var/mob/M = locate(/mob) in T - to_chat(M, "You have arrived at [GLOB.using_map.boss_name]. Operation has ended!") - else //just left for the station - launch_mauraders() - for(var/turf/T in get_area_turfs(shuttle_area)) - var/mob/M = locate(/mob) in T - to_chat(M, "You have arrived at [GLOB.using_map.station_name]. Commence operation!") - - var/obj/machinery/light/small/readylight/light = locate() in T - if(light) light.set_state(1) - -/datum/shuttle/autodock/ferry/specops/cancel_launch() - if (!can_cancel()) - return - - cancel_countdown = 1 - radio_announce("ALERT: LAUNCH SEQUENCE ABORTED") - if (istype(in_use, /obj/machinery/computer)) - var/obj/machinery/computer/C = in_use - C.visible_message("Launch sequence aborted.") - ..() - - - -/datum/shuttle/autodock/ferry/specops/can_launch() - if(launch_prep) - return 0 - return ..() - -//should be fine to allow forcing. process_state only becomes WAIT_LAUNCH after the countdown is over. -///datum/shuttle/autodock/ferry/specops/can_force() -// return 0 - -/datum/shuttle/autodock/ferry/specops/can_cancel() - if(launch_prep) - return 1 - return ..() - -/datum/shuttle/autodock/ferry/specops/proc/sleep_until_launch() - var/message_tracker[] = list(0,1,2,3,5,10,30,45)//Create a a list with potential time values. - - var/launch_time = world.time + specops_countdown_time - var/time_until_launch - - cancel_countdown = 0 - launch_prep = 1 - while(!cancel_countdown && (launch_time - world.time) > 0) - var/ticksleft = launch_time - world.time - - //if(ticksleft > 1e5) - // launch_time = world.timeofday + 10 // midnight rollover - time_until_launch = (ticksleft / 10) - - //All this does is announce the time before launch. - var/rounded_time_left = round(time_until_launch)//Round time so that it will report only once, not in fractions. - if(rounded_time_left in message_tracker)//If that time is in the list for message announce. - radio_announce("ALERT: [rounded_time_left] SECOND[(rounded_time_left!=1)?"S":""] REMAIN") - message_tracker -= rounded_time_left//Remove the number from the list so it won't be called again next cycle. - //Should call all the numbers but lag could mean some issues. Oh well. Not much I can do about that. - - sleep(5) - - launch_prep = 0 - - -/proc/launch_mauraders() - var/area/centcom/specops/special_ops = locate()//Where is the specops area located? - //Begin Marauder launchpad. - spawn(0)//So it parallel processes it. - for(var/obj/machinery/door/blast/M in special_ops) - switch(M.id_tag) - if("ASSAULT0") - spawn(10)//1 second delay between each. - M.open() - if("ASSAULT1") - spawn(20) - M.open() - if("ASSAULT2") - spawn(30) - M.open() - if("ASSAULT3") - spawn(40) - M.open() - - sleep(10) - - var/spawn_marauder[] = new() - for(var/obj/effect/landmark/L in world) - if(L.name == "Marauder Entry") - spawn_marauder.Add(L) - for(var/obj/effect/landmark/L in world) - if(L.name == "Marauder Exit") - var/obj/effect/portal/P = new(L.loc) - P.set_invisibility(101)//So it is not seen by anyone. - P.failchance = 0//So it has no fail chance when teleporting. - P.target = pick(spawn_marauder)//Where the marauder will arrive. - spawn_marauder.Remove(P.target) - - sleep(10) - - for(var/obj/machinery/mass_driver/M in special_ops) - switch(M.id_tag) - if("ASSAULT0") - spawn(10) - M.drive() - if("ASSAULT1") - spawn(20) - M.drive() - if("ASSAULT2") - spawn(30) - M.drive() - if("ASSAULT3") - spawn(40) - M.drive() - - sleep(50)//Doors remain open for 5 seconds. - - for(var/obj/machinery/door/blast/M in special_ops) - switch(M.id_tag)//Doors close at the same time. - if("ASSAULT0") - spawn(0) - M.close() - if("ASSAULT1") - spawn(0) - M.close() - if("ASSAULT2") - spawn(0) - M.close() - if("ASSAULT3") - spawn(0) - M.close() - special_ops.readyreset()//Reset firealarm after the team launched. - //End Marauder launchpad. \ No newline at end of file diff --git a/code/modules/shuttles/shuttle_supply.dm b/code/modules/shuttles/shuttle_supply.dm deleted file mode 100644 index 2c3ad35cd193b..0000000000000 --- a/code/modules/shuttles/shuttle_supply.dm +++ /dev/null @@ -1,78 +0,0 @@ -/datum/shuttle/autodock/ferry/supply - var/away_location = 1 //the location to hide at while pretending to be in-transit - var/late_chance = 80 - var/max_late_time = (30 SECONDS) - flags = SHUTTLE_FLAGS_PROCESS|SHUTTLE_FLAGS_SUPPLY - category = /datum/shuttle/autodock/ferry/supply - ceiling_type = /turf/simulated/floor/shuttle_ceiling - -/datum/shuttle/autodock/ferry/supply/short_jump(var/area/destination) - if(moving_status != SHUTTLE_IDLE) - return - - if(isnull(location)) - return - - //it would be cool to play a sound here - moving_status = SHUTTLE_WARMUP - spawn(warmup_time*10) - if (moving_status == SHUTTLE_IDLE) - return //someone cancelled the launch - - if (at_station() && forbidden_atoms_check()) - //cancel the launch because of forbidden atoms. announce over supply channel? - moving_status = SHUTTLE_IDLE - return - - if (!at_station()) //at centcom - SSsupply.buy() - - //We pretend it's a long_jump by making the shuttle stay at centcom for the "in-transit" period. - var/obj/effect/shuttle_landmark/away_waypoint = get_location_waypoint(away_location) - moving_status = SHUTTLE_INTRANSIT - - //If we are at the away_landmark then we are just pretending to move, otherwise actually do the move - if (next_location == away_waypoint) - attempt_move(away_waypoint) - - //wait ETA here. - arrive_time = world.time + SSsupply.movetime - while (world.time <= arrive_time) - sleep(5) - - if (next_location != away_waypoint) - //late - if (prob(late_chance)) - sleep(rand(0,max_late_time)) - - attempt_move(destination) - - moving_status = SHUTTLE_IDLE - - if (!at_station()) //at centcom - SSsupply.sell() - -// returns 1 if the supply shuttle should be prevented from moving because it contains forbidden atoms -/datum/shuttle/autodock/ferry/supply/proc/forbidden_atoms_check() - if (!at_station()) - return 0 //if badmins want to send forbidden atoms on the supply shuttle from centcom we don't care - - for(var/area/A in shuttle_area) - if(SSsupply.forbidden_atoms_check(A)) - return 1 - -/datum/shuttle/autodock/ferry/supply/proc/at_station() - return (!location) - -//returns 1 if the shuttle is idle and we can still mess with the cargo shopping list -/datum/shuttle/autodock/ferry/supply/proc/idle() - return (moving_status == SHUTTLE_IDLE) - -//returns the ETA in minutes -/datum/shuttle/autodock/ferry/supply/proc/eta_minutes() - var/ticksleft = arrive_time - world.time - return max(0, round(ticksleft/600,1)) - -/datum/shuttle/autodock/ferry/supply/proc/eta_seconds() - var/ticksleft = arrive_time - world.time - return max(0, round(ticksleft/10,1)) diff --git a/code/modules/shuttles/shuttles_multi.dm b/code/modules/shuttles/shuttles_multi.dm deleted file mode 100644 index 5c3e0bbded8ea..0000000000000 --- a/code/modules/shuttles/shuttles_multi.dm +++ /dev/null @@ -1,60 +0,0 @@ -/datum/shuttle/autodock/multi - var/list/destination_tags - var/list/destinations_cache = list() - var/last_cache_rebuild_time = 0 - category = /datum/shuttle/autodock/multi - -/datum/shuttle/autodock/multi/proc/set_destination(var/destination_key, mob/user) - if(moving_status != SHUTTLE_IDLE) - return - next_location = destinations_cache[destination_key] - -/datum/shuttle/autodock/multi/proc/get_destinations() - if (last_cache_rebuild_time < SSshuttle.last_landmark_registration_time) - build_destinations_cache() - return destinations_cache - -/datum/shuttle/autodock/multi/proc/build_destinations_cache() - last_cache_rebuild_time = world.time - destinations_cache.Cut() - for(var/destination_tag in destination_tags) - var/obj/effect/shuttle_landmark/landmark = SSshuttle.get_landmark(destination_tag) - if (istype(landmark)) - destinations_cache["[landmark.name]"] = landmark - -//Antag play announcements when they leave/return to their home area -/datum/shuttle/autodock/multi/antag - warmup_time = 10 SECONDS //replaced the old move cooldown - //This variable is type-abused initially: specify the landmark_tag, not the actual landmark. - var/obj/effect/shuttle_landmark/home_waypoint - - var/cloaked = 1 - var/announcer - var/arrival_message - var/departure_message - - category = /datum/shuttle/autodock/multi/antag - -/datum/shuttle/autodock/multi/antag/New() - ..() - if(home_waypoint) - home_waypoint = SSshuttle.get_landmark(home_waypoint) - else - home_waypoint = current_location - -/datum/shuttle/autodock/multi/antag/shuttle_moved() - if(current_location == home_waypoint) - announce_arrival() - else if(next_location == home_waypoint) - announce_departure() - ..() - -/datum/shuttle/autodock/multi/antag/proc/announce_departure() - if(cloaked || isnull(departure_message)) - return - command_announcement.Announce(departure_message, announcer || "[GLOB.using_map.boss_name]") - -/datum/shuttle/autodock/multi/antag/proc/announce_arrival() - if(cloaked || isnull(arrival_message)) - return - command_announcement.Announce(arrival_message, announcer || "[GLOB.using_map.boss_name]") diff --git a/code/modules/skrell/skrell_rigs.dm b/code/modules/skrell/skrell_rigs.dm deleted file mode 100644 index 973a36c493527..0000000000000 --- a/code/modules/skrell/skrell_rigs.dm +++ /dev/null @@ -1,245 +0,0 @@ -// Rigs and gear themselves. - -//Define Rig Clothing -/obj/item/clothing/suit/space/rig/ert/skrell - name = "skrellian recon hardsuit chestpiece" - desc = "A powerful recon hardsuit with integrated power supply and atmosphere. It's impressive design perfectly tailors to the user's body." - species_restricted = list(SPECIES_SKRELL) - sprite_sheets = list( - SPECIES_SKRELL = 'icons/mob/species/skrell/onmob_chest_rig_skrell.dmi' - ) - allowed = list( - /obj/item/gun, - /obj/item/ammo_magazine, - /obj/item/device/flashlight, - /obj/item/tank, - /obj/item/device/suit_cooling_unit - ) - -/obj/item/clothing/head/helmet/space/rig/ert/skrell - name = "skrellian recon hardsuit helmet" - desc = "A powerful recon hardsuit with integrated power supply and atmosphere. It's impressive design perfectly tailors to the user's body." - light_overlay = "helmet_light_dual" - species_restricted = list(SPECIES_SKRELL) - sprite_sheets = list( - SPECIES_SKRELL = 'icons/mob/species/skrell/onmob_head_rig_skrell.dmi' - ) - -/obj/item/clothing/shoes/magboots/rig/ert/skrell - name = "skrellian recon hardsuit boots" - desc = "A powerful recon hardsuit with integrated power supply and atmosphere. It's impressive design perfectly tailors to the user's body." - species_restricted = list(SPECIES_SKRELL) - sprite_sheets = list( - SPECIES_SKRELL = 'icons/mob/species/skrell/onmob_feet_rig_skrell.dmi' - ) - -/obj/item/clothing/gloves/rig/ert/skrell - name = "skrellian recon hardsuit gloves" - desc = "A powerful recon hardsuit with integrated power supply and atmosphere. It's impressive design perfectly tailors to the user's body." - siemens_coefficient = 0 - species_restricted = list(SPECIES_SKRELL) - sprite_sheets = list( - SPECIES_SKRELL = 'icons/mob/species/skrell/onmob_hands_rig_skrell.dmi' - ) - - - -//Skrell Baseline Suit -/obj/item/rig/skrell - name = "skrellian recon hardsuit" - desc = "A powerful recon hardsuit with integrated power supply and atmosphere. It's impressive design perfectly tailors to the user's body." - icon_state = "skrell_standard_rig" - item_state = null - suit_type = "recon hardsuit" - armor = list( - melee = ARMOR_MELEE_RESISTANT, - bullet = ARMOR_BALLISTIC_PISTOL, - laser = ARMOR_LASER_MAJOR, - energy = ARMOR_ENERGY_RESISTANT, - bomb = ARMOR_BOMB_RESISTANT, - bio = ARMOR_BIO_SHIELDED, - rad = ARMOR_RAD_SHIELDED - ) - online_slowdown = 0.75 - offline_slowdown = 2 - equipment_overlay_icon = null - air_type = /obj/item/tank/skrell - cell_type = /obj/item/cell/skrell - chest_type = /obj/item/clothing/suit/space/rig/ert/skrell - helm_type = /obj/item/clothing/head/helmet/space/rig/ert/skrell - boot_type = /obj/item/clothing/shoes/magboots/rig/ert/skrell - glove_type = /obj/item/clothing/gloves/rig/ert/skrell - update_visible_name = TRUE - sprite_sheets = list( - SPECIES_SKRELL = 'icons/mob/species/skrell/onmob_back_rig_skrell.dmi' - ) - initial_modules = list( - /obj/item/rig_module/vision/nvg, - /obj/item/rig_module/chem_dispenser/skrell, - /obj/item/rig_module/maneuvering_jets, - /obj/item/rig_module/device/clustertool/skrell - ) - req_access = list("ACCESS_SKRELLSCOUT") - -//Skrell Engineering Suit -/obj/item/rig/skrell/eng - name = "skrellian engineering hardsuit" - desc = "A powerful engineering hardsuit with integrated power supply and atmosphere. It's impressive design perfectly tailors to the user's body." - icon_state = "skrell_eng_rig" - initial_modules = list( - /obj/item/rig_module/vision/nvg, - /obj/item/rig_module/chem_dispenser/skrell, - /obj/item/rig_module/maneuvering_jets, - /obj/item/rig_module/device/clustertool/skrell, - /obj/item/rig_module/device/cable_coil/skrell, - /obj/item/rig_module/device/multitool/skrell, - /obj/item/rig_module/device/welder/skrell, - /obj/item/rig_module/device/rcd - ) - -//Skrell Medical Suit -/obj/item/rig/skrell/med - name = "skrellian medical hardsuit" - desc = "A powerful medical hardsuit with integrated power supply and atmosphere. It's impressive design perfectly tailors to the user's body." - icon_state = "skrell_med_rig" - initial_modules = list( - /obj/item/rig_module/vision/nvg, - /obj/item/rig_module/chem_dispenser/skrell, - /obj/item/rig_module/maneuvering_jets, - /obj/item/rig_module/device/clustertool/skrell, - /obj/item/rig_module/device/healthscanner, - /obj/item/rig_module/device/defib, - /obj/item/rig_module/chem_dispenser/injector - ) - -//Skrell Combat Suit -/obj/item/rig/skrell/sec - name = "skrellian combat hardsuit" - desc = "A powerful combat hardsuit with integrated power supply and atmosphere. It's impressive design perfectly tailors to the user's body." - icon_state = "skrell_standard_rig" - armor = list( - melee = ARMOR_MELEE_MAJOR, - bullet = ARMOR_BALLISTIC_RESISTANT, - laser = ARMOR_LASER_MAJOR, - energy = ARMOR_ENERGY_RESISTANT, - bomb = ARMOR_BOMB_RESISTANT, - bio = ARMOR_BIO_SHIELDED, - rad = ARMOR_RAD_SHIELDED - ) - initial_modules = list( - /obj/item/rig_module/vision/nvg, - /obj/item/rig_module/maneuvering_jets, - /obj/item/rig_module/device/clustertool/skrell, - /obj/item/rig_module/chem_dispenser/skrell/combat, - /obj/item/rig_module/device/flash - ) - -//Skrell Command Suit -/obj/item/rig/skrell/cmd - name = "skrellian command hardsuit" - desc = "A powerful command hardsuit with integrated power supply and atmosphere. It's impressive design perfectly tailors to the user's body." - icon_state = "skrell_com_rig" - armor = list( - melee = ARMOR_MELEE_MAJOR, - bullet = ARMOR_BALLISTIC_RESISTANT, - laser = ARMOR_LASER_MAJOR, - energy = ARMOR_ENERGY_RESISTANT, - bomb = ARMOR_BOMB_RESISTANT, - bio = ARMOR_BIO_SHIELDED, - rad = ARMOR_RAD_SHIELDED - ) - initial_modules = list( - /obj/item/rig_module/vision/nvg, - /obj/item/rig_module/chem_dispenser/skrell, - /obj/item/rig_module/maneuvering_jets, - /obj/item/rig_module/device/clustertool/skrell, - /obj/item/rig_module/device/flash/advanced - ) - - - -// Skrell medical dispensers -/obj/item/rig_module/chem_dispenser/skrell - name = "skrellian medical injector" - desc = "A sleek medical injector of skrellian design." - interface_name = "skrellian medical injector" - interface_desc = "A sleek medical injector of skrellian design." - charges = list( - list("tramadol", "tramadol", /datum/reagent/tramadol, 20), - list("dexalinp", "dexalinp", /datum/reagent/dexalinp, 20), - list("inaprovaline", "inaprovaline", /datum/reagent/inaprovaline, 20) - ) - -// Skrell combat dispenser - -/obj/item/rig_module/chem_dispenser/skrell/combat - name = "skrellian combat injector" - desc = "A sleek stimulant injector of skrellian design." - interface_name = "skrellian combat injector" - interface_desc = "A sleek combat injector of skrellian design." - charges = list( - list("tramadol", "tramadol", /datum/reagent/tramadol, 20), - list("dexalinp", "dexalinp", /datum/reagent/dexalinp, 20), - list("inaprovaline", "inaprovaline", /datum/reagent/inaprovaline, 20), - list("synaptizine", "synaptizine", /datum/reagent/synaptizine, 20), - list("hyperzine", "hyperzine", /datum/reagent/hyperzine, 20), - list("oxycodone", "oxycodone", /datum/reagent/tramadol/oxycodone, 20), - list("glucose", "glucose", /datum/reagent/nutriment/glucose, 20) - ) - -//Skrell Oxygen Generator -/obj/item/tank/skrell - name = "skrellian gas reactor" - desc = "A skrellian gas processing plant that continuously synthesises oxygen." - distribute_pressure = ONE_ATMOSPHERE*O2STANDARD - var/charge_cost = 0.01 - var/refill_gas_type = GAS_OXYGEN - var/gas_regen_amount = 1 - var/gas_regen_cap = 75 - -/obj/item/tank/skrell/Initialize() - starting_pressure = list("[refill_gas_type]" = 6 * ONE_ATMOSPHERE) - . = ..() - -/obj/item/tank/skrell/Process() - ..() - var/obj/item/rig/holder = loc - if(air_contents.total_moles < gas_regen_cap && istype(holder) && holder.cell && holder.cell.use(charge_cost)) - air_contents.adjust_gas(refill_gas_type, gas_regen_amount) - -//Skrell Cluster Tool - -/obj/item/rig_module/device/clustertool/skrell - name = "skrellian clustertool" - -//More Skrell Modules to replace Mantid -/obj/item/rig_module/device/multitool/skrell - name = "skrellian integrated multitool" - -/obj/item/rig_module/device/cable_coil/skrell - name = "skrellian cable extruder" - -/obj/item/rig_module/device/welder/skrell - name = "skrellian welding arm" - desc = "An electrical cutting torch of Skrell design." - interface_desc = "An electrical cutting torch of Skrell design." - -// Self-charging power cell. -/obj/item/cell/skrell - name = "skrellian microfusion cell" - desc = "An impossibly tiny fusion power engine of Skrell design." - maxcharge = 1500 - w_class = ITEM_SIZE_NORMAL - var/recharge_amount = 12 - -/obj/item/cell/skrell/Initialize() - START_PROCESSING(SSobj, src) - . = ..() - -/obj/item/cell/skrell/Destroy() - STOP_PROCESSING(SSobj, src) - . = ..() - -/obj/item/cell/skrell/Process() - if(charge < maxcharge) - give(recharge_amount) diff --git a/code/modules/species/outsider/random.dm b/code/modules/species/outsider/random.dm deleted file mode 100644 index 728a47ea8d905..0000000000000 --- a/code/modules/species/outsider/random.dm +++ /dev/null @@ -1,162 +0,0 @@ -/datum/species/alium - name = SPECIES_ALIEN - name_plural = "Humanoids" - description = "Some alien humanoid species, unknown to humanity. How exciting." - rarity_value = 5 - - species_flags = SPECIES_FLAG_NO_SCAN - spawn_flags = SPECIES_IS_RESTRICTED - - icobase = 'icons/mob/human_races/species/humanoid/body.dmi' - deform = 'icons/mob/human_races/species/humanoid/body.dmi' - bandages_icon = 'icons/mob/bandage.dmi' - appearance_flags = HAS_SKIN_COLOR - limb_blend = ICON_MULTIPLY - - force_cultural_info = list( - TAG_CULTURE = CULTURE_ALIUM - ) - - exertion_effect_chance = 10 - exertion_hydration_scale = 1 - exertion_reagent_scale = 5 - exertion_reagent_path = /datum/reagent/lactate - exertion_emotes_biological = list( - /decl/emote/exertion/biological, - /decl/emote/exertion/biological/breath, - /decl/emote/exertion/biological/pant - ) - -/datum/species/alium/New() - //Coloring - blood_color = RANDOM_RGB - flesh_color = RANDOM_RGB - base_color = RANDOM_RGB - - //Combat stats - total_health = round(total_health * Frand(0.8, 1.2), 0.1) - brute_mod = round(brute_mod * Frand(0.5, 1.5), 0.1) - burn_mod = round(burn_mod * Frand(0.8, 1.2), 0.1) - oxy_mod = round(oxy_mod * Frand(0.5, 1.5), 0.1) - toxins_mod = round(toxins_mod * Frand(0, 2), 0.1) - radiation_mod = round(radiation_mod * Frand(0, 2), 0.1) - flash_mod = round(flash_mod * Frand(0.5, 1.5), 0.1) - - if(brute_mod < 1 && prob(40)) - species_flags |= SPECIES_FLAG_NO_MINOR_CUT - if(brute_mod < 0.9 && prob(40)) - species_flags |= SPECIES_FLAG_NO_EMBED - if(toxins_mod < 0.1) - species_flags |= SPECIES_FLAG_NO_POISON - - //Gastronomic traits - taste_sensitivity = pick(TASTE_HYPERSENSITIVE, TASTE_SENSITIVE, TASTE_DULL, TASTE_NUMB) - gluttonous = pick(0, GLUT_TINY, GLUT_SMALLER, GLUT_ANYTHING) - stomach_capacity = 5 * stomach_capacity - if(prob(20)) - gluttonous |= pick(GLUT_ITEM_TINY, GLUT_ITEM_NORMAL, GLUT_ITEM_ANYTHING, GLUT_PROJECTILE_VOMIT) - if(gluttonous & GLUT_ITEM_ANYTHING) - stomach_capacity += ITEM_SIZE_HUGE - - //Environment - var/temp_comfort_shift = rand(-50,50) - cold_level_1 += temp_comfort_shift - cold_level_2 += temp_comfort_shift - cold_level_3 += temp_comfort_shift - - heat_level_1 += temp_comfort_shift - heat_level_2 += temp_comfort_shift - heat_level_3 += temp_comfort_shift - - heat_discomfort_level += temp_comfort_shift - cold_discomfort_level += temp_comfort_shift - - body_temperature += temp_comfort_shift - - var/pressure_comfort_shift = rand(-50,50) - hazard_high_pressure += pressure_comfort_shift - warning_high_pressure += pressure_comfort_shift - warning_low_pressure += pressure_comfort_shift - hazard_low_pressure += pressure_comfort_shift - - //Misc traits - darksight_range = rand(1,8) - darksight_tint = pick(DARKTINT_NONE,DARKTINT_MODERATE,DARKTINT_GOOD) - if(prob(40)) - genders = list(PLURAL) - if(prob(10)) - slowdown += pick(-1,1) - if(prob(10)) - species_flags |= SPECIES_FLAG_NO_SLIP - if(prob(10)) - species_flags |= SPECIES_FLAG_NO_TANGLE - if(prob(5)) - species_flags |= SPECIES_FLAG_NO_PAIN - - ..() - -/datum/species/alium/get_bodytype(var/mob/living/carbon/human/H) - return SPECIES_HUMAN - -/datum/species/alium/proc/adapt_to_atmosphere(var/datum/gas_mixture/atmosphere) - var/temp_comfort_shift = atmosphere.temperature - body_temperature - - cold_level_1 += temp_comfort_shift - cold_level_2 += temp_comfort_shift - cold_level_3 += temp_comfort_shift - - heat_level_1 += temp_comfort_shift - heat_level_2 += temp_comfort_shift - heat_level_3 += temp_comfort_shift - - heat_discomfort_level += temp_comfort_shift - cold_discomfort_level += temp_comfort_shift - - body_temperature += temp_comfort_shift - - var/normal_pressure = atmosphere.return_pressure() - hazard_high_pressure = 5 * normal_pressure - warning_high_pressure = 0.7 * hazard_high_pressure - - hazard_low_pressure = 0.2 * normal_pressure - warning_low_pressure = 2.5 * hazard_low_pressure - - breath_type = pick(atmosphere.gas) - breath_pressure = 0.8*(atmosphere.gas[breath_type]/atmosphere.total_moles)*normal_pressure - - var/list/newgases = gas_data.gases.Copy() - newgases ^= atmosphere.gas - for(var/gas in newgases) - if(gas_data.flags[gas] & (XGM_GAS_OXIDIZER|XGM_GAS_FUEL)) - newgases -= gas - if(newgases.len) - poison_types = list(pick_n_take(newgases)) - if(newgases.len) - exhale_type = pick_n_take(newgases) - -/obj/structure/aliumizer - name = "alien monolith" - desc = "Your true form is calling. Use this to become an alien humanoid." - icon = 'icons/obj/xenoarchaeology.dmi' - icon_state = "ano51" - anchored = TRUE - -/obj/structure/aliumizer/attack_hand(mob/living/carbon/human/user) - if(!istype(user)) - to_chat(user, "You got no business touching this.") - return - if(user.species.name == SPECIES_ALIEN) - to_chat(user, "You're already a [SPECIES_ALIEN].") - return - if(alert("Are you sure you want to be an alien?", "Mom Look I'm An Alien!", "Yes", "No") == "No") - to_chat(user, "Okie dokie.") - return - if(user && user.species.name == SPECIES_ALIEN) //no spamming it to get free implants - return - to_chat(user, "You're now an alien humanoid of some undiscovered species. Make up what lore you want, no one knows a thing about your species! You can check info about your traits with Check Species Info verb in IC tab.") - to_chat(user, "You can't speak GalCom or any other languages by default. You can use translator implant that spawns on top of this monolith - it will give you knowledge of any language if you hear it enough times.") - new/obj/item/implanter/translator(get_turf(src)) - user.set_species(SPECIES_ALIEN) - var/decl/cultural_info/culture = user.get_cultural_value(TAG_CULTURE) - user.fully_replace_character_name(culture.get_random_name(user.gender)) - user.rename_self("Humanoid Alien", 1) \ No newline at end of file diff --git a/code/modules/species/outsider/shadow.dm b/code/modules/species/outsider/shadow.dm deleted file mode 100644 index b395f2aa5052e..0000000000000 --- a/code/modules/species/outsider/shadow.dm +++ /dev/null @@ -1,35 +0,0 @@ -/datum/species/starlight/shadow - name = "Shadow" - name_plural = "shadows" - description = "A being of pure darkness, hates the light and all that comes with it." - icobase = 'icons/mob/human_races/species/shadow/body.dmi' - deform = 'icons/mob/human_races/species/shadow/body.dmi' - - meat_type = null - bone_material = null - skin_material = null - - unarmed_types = list(/datum/unarmed_attack/claws/strong, /datum/unarmed_attack/bite/sharp) - darksight_range = 8 - darksight_tint = DARKTINT_GOOD - siemens_coefficient = 0 - - blood_color = COLOR_GRAY80 - flesh_color = "#aaaaaa" - - remains_type = /obj/effect/decal/cleanable/ash - death_message = "dissolves into ash..." - - species_flags = SPECIES_FLAG_NO_SCAN | SPECIES_FLAG_NO_SLIP | SPECIES_FLAG_NO_POISON | SPECIES_FLAG_NO_EMBED - -/datum/species/starlight/shadow/handle_environment_special(var/mob/living/carbon/human/H) - if(H.InStasis() || H.stat == DEAD || H.isSynthetic()) - return - var/light_amount = 0 - if(isturf(H.loc)) - var/turf/T = H.loc - light_amount = T.get_lumcount() * 10 - if(light_amount > 2) //if there's enough light, start dying - H.take_overall_damage(1,1) - else //heal in the dark - H.heal_overall_damage(1,1) \ No newline at end of file diff --git a/code/modules/species/outsider/starlight.dm b/code/modules/species/outsider/starlight.dm deleted file mode 100644 index 844bb6d075972..0000000000000 --- a/code/modules/species/outsider/starlight.dm +++ /dev/null @@ -1,115 +0,0 @@ -/datum/species/starlight - name = "Starlight Base" - - meat_type = null - bone_material = null - skin_material = null - - has_limbs = list( - BP_CHEST = list("path" = /obj/item/organ/external/chest/unbreakable), - BP_GROIN = list("path" = /obj/item/organ/external/groin/unbreakable), - BP_HEAD = list("path" = /obj/item/organ/external/head/unbreakable), - BP_L_ARM = list("path" = /obj/item/organ/external/arm/unbreakable), - BP_R_ARM = list("path" = /obj/item/organ/external/arm/right/unbreakable), - BP_L_LEG = list("path" = /obj/item/organ/external/leg/unbreakable), - BP_R_LEG = list("path" = /obj/item/organ/external/leg/right/unbreakable), - BP_L_HAND = list("path" = /obj/item/organ/external/hand/unbreakable), - BP_R_HAND = list("path" = /obj/item/organ/external/hand/right/unbreakable), - BP_L_FOOT = list("path" = /obj/item/organ/external/foot/unbreakable), - BP_R_FOOT = list("path" = /obj/item/organ/external/foot/right/unbreakable) - ) - has_organ = list( - BP_BRAIN = /obj/item/organ/internal/brain/starlight - ) - spawn_flags = SPECIES_IS_RESTRICTED - genders = list(NEUTER) - force_cultural_info = list( - TAG_CULTURE = CULTURE_STARLIGHT - ) - -/datum/species/starlight/handle_death_check(var/mob/living/carbon/human/H) - if(H.health == 0) - return TRUE - return FALSE - -/datum/species/starlight/handle_death(var/mob/living/carbon/human/H) - addtimer(CALLBACK(H,/mob/proc/dust),0) - -/datum/species/starlight/starborn - name = "Starborn" - name_plural = "Starborn" - icobase = 'icons/mob/human_races/species/starborn/body.dmi' - deform = 'icons/mob/human_races/species/starborn/body.dmi' - husk_icon = 'icons/mob/human_races/species/starborn/husk.dmi' - description = "Beings of fire and light, split off from a sun deity of unbelievable power." - - blood_color = "#ffff00" - flesh_color = "#ffff00" - - unarmed_types = list(/datum/unarmed_attack/punch/starborn) - - cold_discomfort_level = 300 - cold_discomfort_strings = list("You feel your fire dying out...", - "Your fire begins to shrink away from the cold.", - "You feel slow and sluggish from the cold." - ) - cold_level_1 = 260 - cold_level_2 = 250 - cold_level_3 = 235 - - heat_discomfort_level = 10000 - heat_discomfort_strings = list("Surprisingly, you start burning!", - "You're... burning!?!") - heat_level_1 = 20000 - heat_level_2 = 30000 - heat_level_3 = 40000 - - warning_low_pressure = 50 - hazard_low_pressure = 0 - siemens_coefficient = 0 - hunger_factor = 0 - death_message = "dissolves into pure flames!" - breath_type = null - - - total_health = 250 - body_temperature = T0C + 500 //We are being of fire and light. - species_flags = SPECIES_FLAG_NO_MINOR_CUT | SPECIES_FLAG_NO_SCAN | SPECIES_FLAG_NO_SLIP | SPECIES_FLAG_NO_POISON | SPECIES_FLAG_NO_EMBED | SPECIES_FLAG_NO_TANGLE | SPECIES_FLAG_NO_PAIN - - base_auras = list( - /obj/aura/starborn - ) - -/datum/species/starlight/starborn/handle_death(var/mob/living/carbon/human/H) - ..() - var/turf/T = get_turf(H) - new/obj/effect/decal/cleanable/liquid_fuel(T, 20, TRUE) - T.hotspot_expose(PHORON_MINIMUM_BURN_TEMPERATURE) - -/datum/species/starlight/blueforged - name = "Blueforged" - name_plural = "Blueforged" - icobase = 'icons/mob/human_races/species/blueforged/body.dmi' - deform = 'icons/mob/human_races/species/blueforged/body.dmi' - description = "Living chunks of Bluespace, carved out of the original dimension and given life by a being of unbelievable power." - - blood_color = "#2222ff" - flesh_color = "#2222ff" - - warning_low_pressure = 50 - hazard_low_pressure = 0 - hunger_factor = 0 - breath_type = null - - burn_mod = 10 - brute_mod = 0 - oxy_mod = 0 - toxins_mod = 0 - radiation_mod = 0 - species_flags = SPECIES_FLAG_NO_MINOR_CUT | SPECIES_FLAG_NO_SCAN | SPECIES_FLAG_NO_SLIP | SPECIES_FLAG_NO_POISON | SPECIES_FLAG_NO_EMBED | SPECIES_FLAG_NO_TANGLE - - override_organ_types = list(BP_EYES = /obj/item/organ/internal/eyes/blueforged) - -/datum/species/starlight/blueforged/handle_death(var/mob/living/carbon/human/H) - ..() - new /obj/effect/temporary(get_turf(H),11, 'icons/mob/mob.dmi', "liquify") \ No newline at end of file diff --git a/code/modules/species/outsider/vox.dm b/code/modules/species/outsider/vox.dm deleted file mode 100644 index 8d522b6cd8dde..0000000000000 --- a/code/modules/species/outsider/vox.dm +++ /dev/null @@ -1,224 +0,0 @@ -/datum/species/vox - name = SPECIES_VOX - name_plural = SPECIES_VOX - icobase = 'icons/mob/human_races/species/vox/body.dmi' - deform = 'icons/mob/human_races/species/vox/body.dmi' - husk_icon = 'icons/mob/human_races/species/vox/husk.dmi' - damage_overlays = 'icons/mob/human_races/species/vox/damage_overlay.dmi' - damage_mask = 'icons/mob/human_races/species/vox/damage_mask.dmi' - blood_mask = 'icons/mob/human_races/species/vox/blood_mask.dmi' - - unarmed_types = list( - /datum/unarmed_attack/stomp, - /datum/unarmed_attack/kick, - /datum/unarmed_attack/claws/strong/gloves, - /datum/unarmed_attack/punch, - /datum/unarmed_attack/bite/strong - ) - rarity_value = 4 - description = "The Vox are the broken remnants of a once-proud race, now reduced to little more than \ - scavenging vermin who prey on isolated stations, ships or planets to keep their own ancient arkships \ - alive. They are four to five feet tall, reptillian, beaked, tailed and quilled; human crews often \ - refer to them as 'shitbirds' for their violent and offensive nature, as well as their horrible \ - smell. \ -

                  \ - Most humans will never meet a Vox raider, instead learning of this insular species through \ - dealing with their traders and merchants; those that do rarely enjoy the experience." - codex_description = "The Vox are a hostile, deeply untrustworthy species from the edges of human space. They prey \ - on isolated stations, ships or settlements without any apparent logic or reason, and tend to refuse communications \ - or negotiations except when their backs are to the wall or they are in dire need of resources. They are four to five \ - feet tall, reptillian, beaked, tailed and quilled." - hidden_from_codex = FALSE - - taste_sensitivity = TASTE_DULL - speech_sounds = list('sound/voice/shriek1.ogg') - speech_chance = 20 - - warning_low_pressure = 50 - hazard_low_pressure = 0 - - cold_level_1 = 80 - cold_level_2 = 50 - cold_level_3 = -1 - - min_age = 1 - max_age = 100 - - gluttonous = GLUT_TINY|GLUT_ITEM_NORMAL - stomach_capacity = 12 - - breath_type = GAS_NITROGEN - poison_types = list(GAS_OXYGEN = TRUE) - siemens_coefficient = 0.2 - - species_flags = SPECIES_FLAG_NO_SCAN - spawn_flags = SPECIES_CAN_JOIN | SPECIES_IS_WHITELISTED | SPECIES_NO_FBP_CONSTRUCTION | SPECIES_NO_FBP_CHARGEN - appearance_flags = HAS_EYE_COLOR | HAS_HAIR_COLOR - - blood_color = "#2299fc" - flesh_color = "#808d11" - - reagent_tag = IS_VOX - maneuvers = list(/decl/maneuver/leap/grab) - standing_jump_range = 5 - - override_limb_types = list( - BP_GROIN = /obj/item/organ/external/groin/vox - ) - - has_organ = list( - BP_STOMACH = /obj/item/organ/internal/stomach/vox, - BP_HEART = /obj/item/organ/internal/heart/vox, - BP_LUNGS = /obj/item/organ/internal/lungs/vox, - BP_LIVER = /obj/item/organ/internal/liver/vox, - BP_KIDNEYS = /obj/item/organ/internal/kidneys/vox, - BP_BRAIN = /obj/item/organ/internal/brain, - BP_EYES = /obj/item/organ/internal/eyes/vox, - BP_STACK = /obj/item/organ/internal/voxstack, - BP_HINDTONGUE = /obj/item/organ/internal/hindtongue - ) - - genders = list(NEUTER) - descriptors = list( - /datum/mob_descriptor/height = -1, - /datum/mob_descriptor/build = 1, - /datum/mob_descriptor/vox_markings = 0 - ) - - available_cultural_info = list( - TAG_CULTURE = list( - CULTURE_VOX_ARKSHIP, - CULTURE_VOX_SALVAGER, - CULTURE_VOX_RAIDER - ), - TAG_HOMEWORLD = list( - HOME_SYSTEM_VOX_ARK, - HOME_SYSTEM_VOX_SHROUD, - HOME_SYSTEM_VOX_SHIP - ), - TAG_FACTION = list( - FACTION_VOX_RAIDER, - FACTION_VOX_CREW, - FACTION_VOX_APEX - ), - TAG_RELIGION = list( - RELIGION_VOX - ) - ) - - exertion_effect_chance = 10 - exertion_hydration_scale = 1 - exertion_charge_scale = 1 - exertion_reagent_scale = 5 - exertion_reagent_path = /datum/reagent/lactate - exertion_emotes_biological = list( - /decl/emote/exertion/biological, - /decl/emote/exertion/biological/breath, - /decl/emote/exertion/biological/pant - ) - exertion_emotes_synthetic = list( - /decl/emote/exertion/synthetic, - /decl/emote/exertion/synthetic/creak - ) - -/datum/species/vox/equip_survival_gear(var/mob/living/carbon/human/H) - H.equip_to_slot_or_del(new /obj/item/clothing/mask/gas/vox(H), slot_wear_mask) - - if(istype(H.get_equipped_item(slot_back), /obj/item/storage/backpack)) - H.equip_to_slot_or_del(new /obj/item/tank/nitrogen(H), slot_r_hand) - H.equip_to_slot_or_del(new /obj/item/storage/box/vox(H.back), slot_in_backpack) - H.set_internals(H.r_hand) - else - H.equip_to_slot_or_del(new /obj/item/tank/nitrogen(H), slot_back) - H.equip_to_slot_or_del(new /obj/item/storage/box/vox(H), slot_r_hand) - H.set_internals(H.back) - -/datum/species/vox/disfigure_msg(var/mob/living/carbon/human/H) - var/datum/gender/T = gender_datums[H.get_gender()] - return "[T.His] beak-segments are cracked and chipped! [T.He] [T.is] not even recognizable.\n" - -/datum/species/vox/skills_from_age(age) - . = 8 - -/datum/species/vox/armalis - name = SPECIES_VOX_ARMALIS - name_plural = SPECIES_VOX_ARMALIS - icon_template = 'icons/mob/human_races/species/template_tall.dmi' - icobase = 'icons/mob/human_races/species/vox/armalis_body.dmi' - deform = 'icons/mob/human_races/species/vox/armalis_body.dmi' - husk_icon = 'icons/mob/human_races/species/vox/armalis_husk.dmi' - damage_overlays = 'icons/mob/human_races/species/vox/damage_overlay_armalis.dmi' - damage_mask = 'icons/mob/human_races/species/vox/damage_mask_armalis.dmi' - blood_mask = 'icons/mob/human_races/species/vox/blood_mask_armalis.dmi' - - speech_sounds = list('sound/voice/ashriek.ogg') - speech_chance = 10 - - slowdown = 1 - hidden_from_codex = TRUE - spawn_flags = SPECIES_IS_WHITELISTED | SPECIES_NO_FBP_CONSTRUCTION - brute_mod = 0.8 - burn_mod = 0.8 - strength = STR_HIGH - - override_organ_types = list(BP_EYES = /obj/item/organ/internal/eyes/vox/armalis) - - descriptors = list( - /datum/mob_descriptor/height = 2, - /datum/mob_descriptor/build = 2, - /datum/mob_descriptor/vox_markings = 0 - ) - -/datum/species/vox/armalis/New() - ..() - equip_adjust = list( - slot_l_hand_str = list("[NORTH]" = list("x" = 0, "y" = 4), "[EAST]" = list("x" = -3, "y" = 4), "[SOUTH]" = list("x" = 0, "y" = 4), "[WEST]" = list("x" = 3, "y" = 4)), - slot_r_hand_str = list("[NORTH]" = list("x" = 0, "y" = 4), "[EAST]" = list("x" = 3, "y" = 4), "[SOUTH]" = list("x" = 0, "y" = 4), "[WEST]" = list("x" = -3, "y" = 4)), - slot_back_str = list("[NORTH]" = list("x" = 0, "y" = 8), "[EAST]" = list("x" = -3, "y" = 8), "[SOUTH]" = list("x" = 0, "y" = 8), "[WEST]" = list("x" = 3, "y" = 8)), - slot_belt_str = list("[NORTH]" = list("x" = 0, "y" = 8), "[EAST]" = list("x" = -4, "y" = 8), "[SOUTH]" = list("x" = 0, "y" = 8), "[WEST]" = list("x" = 4, "y" = 8)), - slot_l_ear_str = list("[NORTH]" = list("x" = 0, "y" = 8), "[EAST]" = list("x" = 6, "y" = 8), "[SOUTH]" = list("x" = 0, "y" = 8), "[WEST]" = list("x" = 8, "y" = 8)), - slot_r_ear_str = list("[NORTH]" = list("x" = 0, "y" = 8), "[EAST]" = list("x" = 8, "y" = 8), "[SOUTH]" = list("x" = 0, "y" = 8), "[WEST]" = list("x" = 6, "y" = 8)) - - ) - - -/obj/item/vox_changer - name = "mouldy mirror" - desc = "Something seems strange about this old, dirty mirror. Your reflection doesn't look like you remember it." - icon = 'icons/obj/watercloset.dmi' - icon_state = "mirror_broke" - color = "#bcd4a9" - anchored = TRUE - density = FALSE - var/allowed_role - -/obj/item/vox_changer/attack_hand(mob/living/carbon/human/user) - if (!istype(user)) - return - if (allowed_role && user.mind?.special_role != allowed_role) - return - if (user.species.name == SPECIES_VOX || !is_alien_whitelisted(user, all_species[SPECIES_VOX])) - return - var/data = input(user, "Become Vox?", "Become Vox") as null | anything in list("No", "Yes") - if (isnull(data) || data == "No") - return - var/mob/living/carbon/human/vox/vox = new(get_turf(src), SPECIES_VOX) - user.mind.transfer_to(vox) - OnCreated(vox, user) - data = sanitizeSafe(input(vox, "Enter Name:", "Enter Name", "") as text, MAX_NAME_LEN) - if (!length(data)) - var/decl/cultural_info/culture = SSculture.get_culture(CULTURE_VOX_RAIDER) - data = culture.get_random_name() - vox.real_name = data - vox.SetName(data) - OnReady(vox) - qdel(user) - -/obj/item/vox_changer/proc/OnCreated(mob/living/carbon/human/vox, mob/living/carbon/human/old) - vox.equip_to_slot_or_del(new /obj/item/clothing/under/vox/vox_casual(vox), slot_w_uniform) - vox.equip_to_slot_or_del(new /obj/item/clothing/mask/gas/vox(vox), slot_wear_mask) - vox.equip_to_slot_or_del(new /obj/item/tank/nitrogen(vox), slot_back) - vox.set_internals(locate(/obj/item/tank) in vox.contents) - -/obj/item/vox_changer/proc/OnReady(mob/living/carbon/human/vox, mob/living/carbon/human/old) - return diff --git a/code/modules/species/outsider/zombie.dm b/code/modules/species/outsider/zombie.dm deleted file mode 100644 index ea196827e9f24..0000000000000 --- a/code/modules/species/outsider/zombie.dm +++ /dev/null @@ -1,530 +0,0 @@ - -//// Zombie Defines - -#define SPECIES_ZOMBIE "Zombie" -#define LANGUAGE_ZOMBIE "Zombie" -#define ANTAG_ZOMBIE "Zombie" - -//// Zombie Globals - -GLOBAL_LIST_INIT(zombie_messages, list( - "stage1" = list( - "You feel uncomfortably warm.", - "You feel rather feverish.", - "Your throat is extremely dry...", - "Your muscles cramp...", - "You feel dizzy.", - "You feel slightly fatigued.", - "You feel light-headed." - ), - "stage2" = list( - "You feel something under your skin!", - "Mucus runs down the back of your throat", - "Your muscles burn.", - "Your skin itches.", - "Your bones ache.", - "Sweat runs down the side of your neck.", - "Your heart races." - ), - "stage3" = list( - "Your head feels like it's splitting open!", - "Your skin is peeling away!", - "Your body stings all over!", - "It feels like your insides are squirming!", - "You're in agony!" - ) -)) - - -GLOBAL_LIST_INIT(zombie_species, list(\ - SPECIES_HUMAN, SPECIES_DIONA, SPECIES_UNATHI, SPECIES_VOX, SPECIES_VOX_ARMALIS,\ - SPECIES_SKRELL, SPECIES_PROMETHEAN, SPECIES_ALIEN, SPECIES_YEOSA, SPECIES_VATGROWN,\ - SPECIES_SPACER, SPECIES_TRITONIAN, SPECIES_GRAVWORLDER, SPECIES_MULE, SPECIES_MONKEY -)) - - -//// Zombie Types - - -/datum/species/zombie - name = "Zombie" - name_plural = "Zombies" - slowdown = 15 - blood_color = "#700f0f" - death_message = "writhes and twitches before falling motionless." - species_flags = SPECIES_FLAG_NO_PAIN | SPECIES_FLAG_NO_SCAN - spawn_flags = SPECIES_IS_RESTRICTED - brute_mod = 1 - burn_mod = 2.5 //Vulnerable to fire - oxy_mod = 0 - stun_mod = 0.05 - weaken_mod = 0.05 - paralysis_mod = 0.2 - show_ssd = null //No SSD message so NPC logic can take over - show_coma = null - warning_low_pressure = 0 - hazard_low_pressure = 0 - body_temperature = null - cold_level_1 = -1 - cold_level_2 = -1 - cold_level_3 = -1 - hidden_from_codex = TRUE - has_fine_manipulation = FALSE - unarmed_types = list(/datum/unarmed_attack/bite/sharp/zombie) - move_intents = list(/decl/move_intent/creep) - var/heal_rate = 1 // Regen. - var/mob/living/carbon/human/target = null - var/list/obstacles = list( - /obj/structure/window, - /obj/structure/closet, - /obj/machinery/door/airlock, - /obj/structure/table, - /obj/structure/grille, - /obj/structure/barricade, - /obj/structure/wall_frame, - /obj/structure/railing, - /obj/structure/girder, - /turf/simulated/wall, - /obj/machinery/door/blast/shutters, - /obj/machinery/door - ) - -/datum/species/zombie/handle_post_spawn(mob/living/carbon/human/H) - H.mutations |= MUTATION_CLUMSY - H.mutations |= MUTATION_FERAL - H.mutations |= mNobreath //Byond doesn't like adding them all in one OR statement :( - H.verbs += /mob/living/carbon/proc/consume - H.move_intents = list(/decl/move_intent/creep) //Zooming days are over - H.a_intent = "harm" - H.move_intent = new /decl/move_intent/creep - H.default_run_intent = H.move_intent - H.default_walk_intent = H.move_intent - - H.set_sight(H.sight | SEE_MOBS | SEE_OBJS | SEE_TURFS) //X-Ray vis - H.set_see_in_dark(8) - H.set_see_invisible(SEE_INVISIBLE_LEVEL_TWO) - - H.languages = list() - H.add_language(LANGUAGE_ZOMBIE) - - H.sleeping = 0 - H.resting = 0 - H.weakened = 0 - - H.move_intent.move_delay = 6 - H.stat = CONSCIOUS - - if (H.wear_id) - qdel(H.wear_id) - if (H.gloves) - qdel(H.gloves) - if (H.head) - qdel(H.head) //Remove helmet so headshots aren't impossible - if (H.glasses) - qdel(H.glasses) - if (H.wear_mask) - qdel(H.wear_mask) - ..() - -/datum/species/zombie/handle_environment_special(mob/living/carbon/human/H) - if (H.stat == CONSCIOUS) - if (prob(5)) - playsound(H.loc, 'sound/hallucinations/far_noise.ogg', 15, 1) - else if (prob(5)) - playsound(H.loc, 'sound/hallucinations/veryfar_noise.ogg', 15, 1) - else if (prob(5)) - playsound(H.loc, 'sound/hallucinations/wail.ogg', 15, 1) - - for(var/obj/item/organ/I in H.internal_organs) - if (I.damage > 0) - I.damage = max(I.damage - heal_rate, 0) - - H.vessel.add_reagent(/datum/reagent/blood, min(heal_rate * 10, blood_volume - H.vessel.total_volume)) - - if (H.getBruteLoss() || H.getFireLoss() || H.getOxyLoss() || H.getToxLoss()) - H.adjustBruteLoss(-heal_rate) - H.adjustFireLoss(-heal_rate) - H.adjustOxyLoss(-heal_rate) - H.adjustToxLoss(-heal_rate) - return TRUE - -/datum/species/zombie/handle_death(mob/living/carbon/human/H) - H.stat = DEAD //Gotta confirm death for some odd reason - playsound(H, 'sound/hallucinations/wail.ogg', 30, 1) - return TRUE - -/datum/species/zombie/handle_npc(mob/living/carbon/human/H) - H.resting = FALSE - if (H.client || H.stat != CONSCIOUS) - walk(H, 0) //Stop dead-walking - return - - if (prob(5)) - H.custom_emote("wails!") - else if (prob(5)) - H.custom_emote("groans!") - if (H.restrained() && prob(8)) - H.custom_emote("thrashes and writhes!") - - if (H.lying) - walk(H, 0) - return - - if (H.restrained() || H.buckled()) - H.resist() - return - - addtimer(CALLBACK(src, .proc/handle_action, H), rand(10, 20)) - -/datum/species/zombie/proc/handle_action(mob/living/carbon/human/H) - var/dist = 128 - for(var/mob/living/M in hearers(H, 15)) - if ((ishuman(M) || istype(M, /mob/living/exosuit)) && !M.is_species(SPECIES_ZOMBIE) && !M.is_species(SPECIES_DIONA)) //Don't attack fellow zombies, or diona - if (istype(M, /mob/living/exosuit)) - var/mob/living/exosuit/MC = M - if (!LAZYLEN(MC.pilots)) - continue //Don't attack empty mechs - if (M.stat == DEAD && target) - continue //Only eat corpses when no living (and able) targets are around - var/D = get_dist(M, H) - if (D <= dist * 0.5) //Must be significantly closer to change targets - target = M //For closest target - dist = D - - H.setClickCooldown(DEFAULT_ATTACK_COOLDOWN*2) - if (target) - if (target.is_species(SPECIES_ZOMBIE)) - target = null - return - - if (!H.Adjacent(target)) - var/turf/dir = get_step_towards(H, target) - for(var/type in obstacles) //Break obstacles - var/obj/obstacle = locate(type) in dir - if (obstacle) - H.face_atom(obstacle) - obstacle.attack_generic(H, 10, "smashes") - break - - walk_to(H, target.loc, 1, H.move_intent.move_delay * 1.25) - - else - if (!target.lying) //Subdue meals - H.face_atom(target) - - if (!H.zone_sel) - H.zone_sel = new /obj/screen/zone_sel(null) - H.zone_sel.selecting = BP_CHEST - target.attack_hand(H) - - else //Eat said meals - walk_to(H, target.loc, 0, H.move_intent.move_delay * 2.5) //Move over them - if (H.Adjacent(target)) //Check we're still next to them - H.consume() - - for(var/mob/living/M in hearers(H, 15)) - if (target == M) //If our target is still nearby - return - target = null //Target lost - - else - if (!H.lying) - walk(H, 0) //Clear walking - if (prob(33) && isturf(H.loc) && !H.pulledby) - H.SelfMove(pick(GLOB.cardinal)) - - -/datum/language/zombie - name = LANGUAGE_ZOMBIE - desc = "A crude form of feral communication utilized by the shuffling horrors. The living only hear guttural wails of agony." - colour = "cult" - key = "a" - speech_verb = "growls" - exclaim_verb = "wails" - partial_understanding = list( - LANGUAGE_HUMAN_EURO = 30, - LANGUAGE_SPACER = 35 - ) - syllables = list("mhh..", "grr..", "nnh..") - shorthand = "ZM" - hidden_from_codex = TRUE - - -/datum/unarmed_attack/bite/sharp/zombie - attack_verb = list("slashed", "sunk their teeth into", "bit", "mauled") - damage = 3 - -/datum/unarmed_attack/bite/sharp/zombie/is_usable(mob/living/carbon/human/user, mob/living/carbon/human/target, zone) - . = ..() - if (!.) - return FALSE - if (!target || target.is_species(SPECIES_ZOMBIE)) - to_chat(usr, SPAN_WARNING("They don't look very appetizing!")) - return FALSE - return TRUE - -/datum/unarmed_attack/bite/sharp/zombie/apply_effects(mob/living/carbon/human/user, mob/living/carbon/human/target, attack_damage, zone) - ..() - admin_attack_log(user, target, "Bit their victim.", "Was bitten.", "bit") - if (!(target.species.name in GLOB.zombie_species) || target.is_species(SPECIES_DIONA) || target.isSynthetic()) //No need to check infection for FBPs - return - target.adjustHalLoss(9) //To help bring down targets in voidsuits - var/vuln = 1 - target.get_blocked_ratio(zone, DAMAGE_TOXIN, damage_flags = DAMAGE_FLAG_BIO) //Are they protected from bites? - if (vuln > 0.05) - if (prob(vuln * 100)) //Protective infection chance - if (prob(min(100 - target.get_blocked_ratio(zone, DAMAGE_BRUTE) * 100, 70))) //General infection chance - target.reagents.add_reagent(/datum/reagent/zombie, 1) //Infect 'em - - -/datum/reagent/zombie - name = "Liquid Corruption" - description = "A filthy, oily substance which slowly churns of its own accord." - taste_description = "decaying blood" - color = "#540000" - taste_mult = 5 - metabolism = REM - overdose = 200 - hidden_from_codex = TRUE - heating_products = null - heating_point = null - should_admin_log = TRUE - -/datum/reagent/zombie/affect_blood(mob/living/carbon/M, alien, removed) - if (!ishuman(M)) - return - var/mob/living/carbon/human/H = M - - if (!(H.species.name in GLOB.zombie_species) || H.is_species(SPECIES_DIONA) || H.isSynthetic()) - remove_self(volume) - return - var/true_dose = H.chem_doses[type] + volume - - if (true_dose >= 30) - if (M.getBrainLoss() > 140) - H.zombify() - if (prob(1)) - to_chat(M, SPAN_WARNING("[pick(GLOB.zombie_messages["stage1"])]")) - - if (true_dose >= 60) - M.bodytemperature += 7.5 - if (prob(3)) - to_chat(M, SPAN_WARNING("[pick(GLOB.zombie_messages["stage1"])]")) - if (M.getBrainLoss() < 20) - M.adjustBrainLoss(rand(1, 2)) - - if (true_dose >= 90) - M.add_chemical_effect(CE_MIND, -2) - M.hallucination(50, min(true_dose / 2, 50)) - if (M.getBrainLoss() < 75) - M.adjustBrainLoss(rand(1, 2)) - if (prob(0.5)) - H.seizure() - H.adjustBrainLoss(rand(12, 24)) - if (prob(5)) - to_chat(M, SPAN_DANGER("[pick(GLOB.zombie_messages["stage2"])]")) - M.bodytemperature += 9 - - if (true_dose >= 110) - M.adjustHalLoss(5) - M.make_dizzy(10) - if (prob(8)) - to_chat(M, SPAN_DANGER("[pick(GLOB.zombie_messages["stage3"])]")) - - if (true_dose >= 135) - if (prob(3)) - H.zombify() - - M.reagents.add_reagent(/datum/reagent/zombie, Frand(0.1, 1)) - -/datum/reagent/zombie/affect_touch(mob/living/carbon/M, alien, removed) - affect_blood(M, alien, removed * 0.5) - - -//// Zombie Procs - - -/mob/living/carbon/human/proc/zombify() - if (!(species.name in GLOB.zombie_species) || is_species(SPECIES_DIONA) || is_species(SPECIES_ZOMBIE) || isSynthetic()) - return - - if (mind) - if (mind.special_role == ANTAG_ZOMBIE) - return - mind.special_role = ANTAG_ZOMBIE - - var/turf/T = get_turf(src) - new /obj/effect/decal/cleanable/vomit(T) - playsound(T, 'sound/effects/splat.ogg', 20, 1) - - addtimer(CALLBACK(src, .proc/transform_zombie), 20) - -/mob/living/carbon/human/proc/transform_zombie() - make_jittery(300) - adjustBruteLoss(100) - sleep(150) - - if (QDELETED(src)) - return - - if (is_species(SPECIES_ZOMBIE)) //Check again otherwise Consume can run this twice at once - return - - rejuvenate() - ChangeToHusk() - visible_message(SPAN_DANGER("\The [src]'s skin decays before your very eyes!"), SPAN_DANGER("Your entire body is ripe with pain as it is consumed down to flesh and bones. You ... hunger. Not only for flesh, but to spread this gift. Use Abilities -> Consume to infect and feed upon your prey.")) - log_admin("[key_name(src)] has transformed into a zombie!") - - Weaken(4) - jitteriness = 0 - dizziness = 0 - hallucination_power = 0 - hallucination_duration = 0 - if (should_have_organ(BP_HEART)) - vessel.add_reagent(/datum/reagent/blood, species.blood_volume - vessel.total_volume) - for (var/obj/item/organ/organ in organs) - organ.vital = 0 - if (!BP_IS_ROBOTIC(organ)) - organ.rejuvenate(1) - organ.max_damage *= 2 - organ.min_broken_damage = Floor(organ.max_damage * 0.75) - - resuscitate() - set_stat(CONSCIOUS) - - if (skillset && skillset.skill_list) - skillset.skill_list = list() - for(var/decl/hierarchy/skill/S in GLOB.skills) //Only want trained CQC and athletics - skillset.skill_list[S.type] = SKILL_NONE - skillset.skill_list[SKILL_HAULING] = SKILL_ADEPT - skillset.skill_list[SKILL_COMBAT] = SKILL_ADEPT - skillset.on_levels_change() - - species = all_species[SPECIES_ZOMBIE] - species.handle_post_spawn(src) - - var/turf/T = get_turf(src) - playsound(T, 'sound/hallucinations/wail.ogg', 25, 1) - - -/mob/living/carbon/proc/consume() - set name = "Consume" - set desc = "Regain life and infect others by feeding upon them." - set category = "Abilities" - - if (last_special > world.time) - to_chat(src, SPAN_WARNING("You aren't ready to do that! Wait [round(last_special - world.time) / 10] seconds.")) - return - - var/mob/living/carbon/human/target - var/list/victims = list() - for (var/mob/living/carbon/human/L in get_turf(src)) - if (L != src && (L.lying || L.stat == DEAD)) - if (L.is_species(SPECIES_ZOMBIE)) - to_chat(src, SPAN_WARNING("\The [L] isn't fresh anymore!")) - continue - if (!(L.species.name in GLOB.zombie_species) || L.is_species(SPECIES_DIONA) || L.isSynthetic()) - to_chat(src, SPAN_WARNING("You'd break your teeth on \the [L]!")) - continue - victims += L - - if (!victims.len) - to_chat(src, SPAN_WARNING("No valid targets nearby!")) - return - if (client) - if (victims.len == 1) //No need to choose - target = victims[1] - else - target = input("Who would you like to consume?") as null | anything in victims - else //NPCs - if (victims.len > 0) - target = victims[1] - - if (!target) - to_chat(src, SPAN_WARNING("You aren't on top of a victim!")) - return - if (get_turf(src) != get_turf(target) || !(target.lying || target.stat == DEAD)) - to_chat(src, SPAN_WARNING("You're no longer on top of \the [target]!")) - return - - last_special = world.time + 5 SECONDS - - src.visible_message(SPAN_DANGER("\The [src] hunkers down over \the [target], tearing into their flesh.")) - playsound(loc, 'sound/effects/bonebreak3.ogg', 20, 1) - - target.adjustHalLoss(50) - - if (do_after(src, 5 SECONDS, target, DO_DEFAULT | DO_USER_UNIQUE_ACT, INCAPACITATION_KNOCKOUT)) - admin_attack_log(src, target, "Consumed their victim.", "Was consumed.", "consumed") - - if (!target.lying && target.stat != DEAD) //Check victims are still prone - return - - target.reagents.add_reagent(/datum/reagent/zombie, 35) //Just in case they haven't been infected already - if (target.getBruteLoss() > target.maxHealth * 1.5) - if (target.stat != DEAD) - to_chat(src,SPAN_WARNING("You've scraped \the [target] down to the bones already!.")) - target.zombify() - else - to_chat(src,SPAN_DANGER("You shred and rip apart \the [target]'s remains!.")) - target.gib() - playsound(loc, 'sound/effects/splat.ogg', 40, 1) - return - - to_chat(target,SPAN_DANGER("\The [src] scrapes your flesh from your bones!")) - to_chat(src,SPAN_DANGER("You feed hungrily off \the [target]'s flesh.")) - - if (target.is_species(SPECIES_ZOMBIE)) //Just in case they turn whilst being eaten - return - - target.apply_damage(rand(50, 60), DAMAGE_BRUTE, BP_CHEST) - target.adjustBruteLoss(20) - target.update_surgery() //Update broken ribcage sprites etc. - - src.adjustBruteLoss(-5) - src.adjustFireLoss(-15) - src.adjustToxLoss(-5) - src.adjustBrainLoss(-5) - src.adjust_nutrition(40) - - playsound(loc, 'sound/effects/splat.ogg', 20, 1) - new /obj/effect/decal/cleanable/blood/splatter(get_turf(src), target.species.blood_color) - if (target.getBruteLoss() > target.maxHealth*0.75) - if (prob(50)) - gibs(get_turf(src), target.dna) - src.visible_message(SPAN_DANGER("\The [src] tears out \the [target]'s insides!")) - else - src.visible_message(SPAN_WARNING("\The [src] leaves their meal for later.")) - - -//// Zombie Atoms - - -/obj/item/reagent_containers/syringe/zombie - name = "Syringe (unknown serum)" - desc = "Contains a strange, crimson substance." - -/obj/item/reagent_containers/syringe/zombie/Initialize() - ..() - reagents.add_reagent(/datum/reagent/zombie, 15) - mode = SYRINGE_INJECT - update_icon() - - -/mob/living/carbon/human/zombie/New(new_loc) - ..(new_loc, SPECIES_ZOMBIE) - - var/decl/cultural_info/culture = get_cultural_value(TAG_CULTURE) - SetName(culture.get_random_name(gender)) - real_name = name - - var/decl/hierarchy/outfit/outfit = pick( - /decl/hierarchy/outfit/job/science/scientist,\ - /decl/hierarchy/outfit/job/engineering/engineer,\ - /decl/hierarchy/outfit/job/cargo/mining,\ - /decl/hierarchy/outfit/job/medical/chemist\ - ) - outfit = outfit_by_type(outfit) - outfit.equip(src, OUTFIT_ADJUSTMENT_SKIP_SURVIVAL_GEAR) - - ChangeToHusk() - zombify() diff --git a/code/modules/species/shell/body_markings.dm b/code/modules/species/shell/body_markings.dm deleted file mode 100644 index 299f16a9d4d4c..0000000000000 --- a/code/modules/species/shell/body_markings.dm +++ /dev/null @@ -1,34 +0,0 @@ -/datum/sprite_accessory/marking/shell - icon = 'icons/mob/human_races/species/shell/markings.dmi' - blend = ICON_MULTIPLY - species_allowed = list(SPECIES_SHELL, SPECIES_HUMAN) - -/datum/sprite_accessory/marking/shell/spirit_lights - name = "Ward - Spirit FBP Lights" - icon_state = "lights" - body_parts = list(BP_L_LEG,BP_R_LEG,BP_L_ARM,BP_R_ARM,BP_L_HAND,BP_R_HAND,BP_CHEST,BP_HEAD) - -/datum/sprite_accessory/marking/shell/spirit_lights_body - name = "Ward - Spirit FBP Lights (body)" - icon_state = "lights" - body_parts = list(BP_L_LEG,BP_R_LEG,BP_L_ARM,BP_R_ARM,BP_L_HAND,BP_R_HAND,BP_CHEST) - -/datum/sprite_accessory/marking/shell/spirit_panels_head - name = "Ward - Spirit FBP Lights (head)" - icon_state = "lights" - body_parts = list(BP_HEAD) - -/datum/sprite_accessory/marking/shell/spirit_panels - name = "Ward - Spirit FBP Panels" - icon_state = "panels" - body_parts = list(BP_L_FOOT,BP_R_FOOT,BP_L_LEG,BP_R_LEG,BP_L_ARM,BP_R_ARM,BP_L_HAND,BP_R_HAND,BP_GROIN,BP_CHEST,BP_HEAD) - -/datum/sprite_accessory/marking/shell/spirit_panels_body - name = "Ward - Spirit FBP Panels (body)" - icon_state = "panels" - body_parts = list(BP_L_FOOT,BP_R_FOOT,BP_L_LEG,BP_R_LEG,BP_L_ARM,BP_R_ARM,BP_L_HAND,BP_R_HAND,BP_GROIN,BP_CHEST) - -/datum/sprite_accessory/marking/shell/spirit_panels_head - name = "Ward - Spirit FBP Panels (head)" - icon_state = "panels" - body_parts = list(BP_HEAD) diff --git a/code/modules/species/shell/shell.dm b/code/modules/species/shell/shell.dm deleted file mode 100644 index 3661071a14a6e..0000000000000 --- a/code/modules/species/shell/shell.dm +++ /dev/null @@ -1,110 +0,0 @@ -//Original code in: https://github.com/Skyrat-SS13/Vesta.Bay/blob/dev/modular_boh/code/modules/species/shell/shell.dm - -/datum/robolimb/veymed - allowed_bodytypes = list(SPECIES_HUMAN, SPECIES_IPC, SPECIES_SHELL) - -/datum/species/machine/shell - name = SPECIES_SHELL - name_plural = "shells" - - description = "Created in 2296 century by Vey-Med Corporation, first crude Shell IPC become a new milestone \ - in the history of human robotics. There a very little Free Shells, that managed to buy themselves, because of \ - their astronomical market price, and quite a lot of them managed to break free by themselves, making them illegal \ - and criminal. Some of Rogue Shell decided to live just like humans, and there is even human - illegals - groups \ - that helps them to pass medical checks and obtain documents for their own personal gain." - - cyborg_noun = null - - preview_icon = 'icons/mob/human_races/species/human/preview.dmi' - - unarmed_types = list(/datum/unarmed_attack/punch, /datum/unarmed_attack/kick, /datum/unarmed_attack/stomp, /datum/unarmed_attack/bite) - rarity_value = 2 - strength = STR_HIGH - - min_age = 1 - max_age = 15 - - warning_low_pressure = 50 - hazard_low_pressure = -1 - - cold_level_1 = SYNTH_COLD_LEVEL_1 - cold_level_2 = SYNTH_COLD_LEVEL_2 - cold_level_3 = SYNTH_COLD_LEVEL_3 - - heat_level_1 = SYNTH_HEAT_LEVEL_1 // Gives them about 25 seconds in space before taking damage - heat_level_2 = SYNTH_HEAT_LEVEL_2 - heat_level_3 = SYNTH_HEAT_LEVEL_3 - - body_temperature = null - - species_flags = SPECIES_FLAG_NO_SCAN | SPECIES_FLAG_NO_PAIN | SPECIES_FLAG_NO_POISON - spawn_flags = SPECIES_CAN_JOIN | SPECIES_NO_FBP_CONSTRUCTION | SPECIES_IS_WHITELISTED - appearance_flags = HAS_HAIR_COLOR | HAS_UNDERWEAR | HAS_EYE_COLOR | HAS_SKIN_TONE_NORMAL | HAS_LIPS //IPCs can wear undies too :) - - blood_color = "#61b6de" - show_ssd = "fast asleep" - show_coma = "completely comatose" - - has_organ = list( - BP_POSIBRAIN = /obj/item/organ/internal/posibrain, - BP_EYES = /obj/item/organ/internal/eyes/robot - ) - - heat_discomfort_level = 373.15 - heat_discomfort_strings = list( - "Your CPU temperature probes warn you that you are approaching critical heat levels!" - ) - genders = list(MALE, FEMALE) - - available_cultural_info = list( - TAG_CULTURE = list( - CULTURE_POSITRONICS - ), - TAG_HOMEWORLD = list( - HOME_SYSTEM_ROOT, - HOME_SYSTEM_EARTH, - HOME_SYSTEM_LUNA, - HOME_SYSTEM_MARS, - HOME_SYSTEM_VENUS, - HOME_SYSTEM_CERES, - HOME_SYSTEM_PLUTO, - HOME_SYSTEM_TAU_CETI, - HOME_SYSTEM_OTHER - ), - TAG_FACTION = list( - FACTION_POSITRONICS, - FACTION_SOL_CENTRAL, - FACTION_INDIE_CONFED, - FACTION_NANOTRASEN, - FACTION_FREETRADE, - FACTION_XYNERGY, - FACTION_FLEET, - FACTION_ARMY, - FACTION_EXPEDITIONARY, - FACTION_SPACECOPS, - FACTION_CORPORATE, - FACTION_INDIE_CONFED, - FACTION_OTHER - ) - ) - - default_cultural_info = list( - TAG_CULTURE = CULTURE_POSITRONICS, - TAG_HOMEWORLD = HOME_SYSTEM_ROOT, - TAG_FACTION = FACTION_POSITRONICS - ) - - brute_mod = 1.2 - burn_mod = 1.6 - -/datum/species/machine/shell/post_organ_rejuvenate(var/obj/item/organ/org, var/mob/living/carbon/human/H) - var/obj/item/organ/external/E = org - if(istype(E) && !BP_IS_ROBOTIC(E)) - E.robotize("Vey-Med") - -/datum/species/machine/shell/get_blood_name() - return "coolant" - -/datum/species/machine/shell/disfigure_msg(var/mob/living/carbon/human/H) - var/datum/gender/T = gender_datums[H.get_gender()] - return "[T.His] faceplate is dented and ruined!\n" diff --git a/code/modules/species/species.dm b/code/modules/species/species.dm deleted file mode 100644 index 222057ecb2efa..0000000000000 --- a/code/modules/species/species.dm +++ /dev/null @@ -1,869 +0,0 @@ -/* - Datum-based species. Should make for much cleaner and easier to maintain race code. -*/ - -/datum/species - - // Descriptors and strings. - var/name - var/name_plural // Pluralized name (since "[name]s" is not always valid) - var/description - var/codex_description - var/ooc_codex_information - var/cyborg_noun = "Cyborg" - var/hidden_from_codex = TRUE - - // Icon/appearance vars. - var/icobase = 'icons/mob/human_races/species/human/body.dmi' // Normal icon set. - var/deform = 'icons/mob/human_races/species/human/deformed_body.dmi' // Mutated icon set. - var/preview_icon = 'icons/mob/human_races/species/human/preview.dmi' - var/husk_icon = 'icons/mob/human_races/species/default_husk.dmi' - var/bandages_icon - - // Damage overlay and masks. - var/damage_overlays = 'icons/mob/human_races/species/human/damage_overlay.dmi' - var/damage_mask = 'icons/mob/human_races/species/human/damage_mask.dmi' - var/blood_mask = 'icons/mob/human_races/species/human/blood_mask.dmi' - - var/blood_color = COLOR_BLOOD_HUMAN // Red. - var/flesh_color = "#ffc896" // Pink. - var/blood_oxy = 1 - var/base_color // Used by changelings. Should also be used for icon previes.. - var/limb_blend = ICON_ADD - var/tail // Name of tail state in species effects icon file. - var/tail_animation // If set, the icon to obtain tail animation states from. - var/tail_blend = ICON_ADD - var/tail_hair - - var/list/hair_styles - var/list/facial_hair_styles - - var/organs_icon //species specific internal organs icons - - var/default_head_hair_style = "Bald" - var/default_facial_hair_style = "Shaved" - - var/race_key = 0 // Used for mob icon cache string. - var/icon_template = 'icons/mob/human_races/species/template.dmi' // Used for mob icon generation for non-32x32 species. - var/pixel_offset_x = 0 // Used for offsetting large icons. - var/pixel_offset_y = 0 // Used for offsetting large icons. - var/pixel_offset_z = 0 // Used for offsetting large icons. - var/antaghud_offset_x = 0 // As above, but specifically for the antagHUD indicator. - var/antaghud_offset_y = 0 // As above, but specifically for the antagHUD indicator. - - var/mob_size = MOB_MEDIUM - var/strength = STR_MEDIUM - var/show_ssd = "fast asleep" - var/show_coma = "completely comatose" - var/short_sighted // Permanent weldervision. - var/light_sensitive // Ditto, but requires sunglasses to fix - var/blood_volume = SPECIES_BLOOD_DEFAULT // Initial blood volume. - var/hunger_factor = DEFAULT_HUNGER_FACTOR // Multiplier for hunger. - var/thirst_factor = DEFAULT_THIRST_FACTOR // Multiplier for thirst. - var/taste_sensitivity = TASTE_NORMAL // How sensitive the species is to minute tastes. - var/silent_steps - - var/min_age = 17 - var/max_age = 70 - - // Speech vars. - var/assisted_langs = list() // The languages the species can't speak without an assisted organ. - var/list/speech_sounds // A list of sounds to potentially play when speaking. - var/list/speech_chance // The likelihood of a speech sound playing. - - // Combat vars. - var/total_health = 200 // Point at which the mob will enter crit. - var/list/unarmed_types = list( // Possible unarmed attacks that the mob will use in combat, - /datum/unarmed_attack, - /datum/unarmed_attack/bite - ) - var/list/unarmed_attacks = null // For empty hand harm-intent attack - - var/list/natural_armour_values // Armour values used if naked. - var/brute_mod = 1 // Physical damage multiplier. - var/burn_mod = 1 // Burn damage multiplier. - var/toxins_mod = 1 // Toxloss modifier - var/radiation_mod = 1 // Radiation modifier - - var/oxy_mod = 1 // Oxyloss modifier - var/flash_mod = 1 // Stun from blindness modifier. - var/metabolism_mod = 1 // Reagent metabolism modifier - var/stun_mod = 1 // Stun period modifier. - var/paralysis_mod = 1 // Paralysis period modifier. - var/weaken_mod = 1 // Weaken period modifier. - - var/vision_flags = SEE_SELF // Same flags as glasses. - - // Death vars. - var/meat_type = /obj/item/reagent_containers/food/snacks/meat/human - var/meat_amount = 3 - var/skin_material = MATERIAL_SKIN_GENERIC - var/skin_amount = 3 - var/bone_material = MATERIAL_BONE_GENERIC - var/bone_amount = 3 - var/remains_type = /obj/item/remains/xeno - var/gibbed_anim = "gibbed-h" - var/dusted_anim = "dust-h" - - var/death_sound - var/death_message = "seizes up and falls limp, their eyes dead and lifeless..." - var/knockout_message = "collapses, having been knocked unconscious." - var/halloss_message = "slumps over, too weak to continue fighting..." - var/halloss_message_self = "The pain is too severe for you to keep going..." - - var/limbs_are_nonsolid - var/spawns_with_stack = 0 - // Environment tolerance/life processes vars. - var/reagent_tag // Used for metabolizing reagents. - var/breath_pressure = 16 // Minimum partial pressure safe for breathing, kPa - var/breath_type = GAS_OXYGEN // Non-oxygen gas breathed, if any. - var/poison_types = list(GAS_PHORON = TRUE, GAS_CHLORINE = TRUE) // Noticeably poisonous air - ie. updates the toxins indicator on the HUD. - var/exhale_type = GAS_CO2 // Exhaled gas type. - var/max_pressure_diff = 60 // Maximum pressure difference that is safe for lungs - var/cold_level_1 = 243 // Cold damage level 1 below this point. -30 Celsium degrees - var/cold_level_2 = 200 // Cold damage level 2 below this point. - var/cold_level_3 = 120 // Cold damage level 3 below this point. - var/heat_level_1 = 360 // Heat damage level 1 above this point. - var/heat_level_2 = 400 // Heat damage level 2 above this point. - var/heat_level_3 = 1000 // Heat damage level 3 above this point. - var/passive_temp_gain = 0 // Species will gain this much temperature every second - var/hazard_high_pressure = HAZARD_HIGH_PRESSURE // Dangerously high pressure. - var/warning_high_pressure = WARNING_HIGH_PRESSURE // High pressure warning. - var/warning_low_pressure = WARNING_LOW_PRESSURE // Low pressure warning. - var/hazard_low_pressure = HAZARD_LOW_PRESSURE // Dangerously low pressure. - var/body_temperature = 310.15 // Species will try to stabilize at this temperature. - // (also affects temperature processing) - var/heat_discomfort_level = 315 // Aesthetic messages about feeling warm. - var/cold_discomfort_level = 285 // Aesthetic messages about feeling chilly. - var/list/heat_discomfort_strings = list( - "You feel sweat drip down your neck.", - "You feel uncomfortably warm.", - "Your skin prickles in the heat." - ) - var/list/cold_discomfort_strings = list( - "You feel chilly.", - "You shiver suddenly.", - "Your chilly flesh stands out in goosebumps." - ) - - var/water_soothe_amount - - // HUD data vars. - var/datum/hud_data/hud - var/hud_type - var/health_hud_intensity = 1 - - var/grab_type = GRAB_NORMAL // The species' default grab type. - - // Body/form vars. - var/list/inherent_verbs // Species-specific verbs. - var/has_fine_manipulation = 1 // Can use small items. - var/siemens_coefficient = 1 // The lower, the thicker the skin and better the insulation. - var/darksight_range = 2 // Native darksight distance. - var/darksight_tint = DARKTINT_NONE // How shadows are tinted. - var/species_flags = 0 // Various specific features. - var/appearance_flags = 0 // Appearance/display related features. - var/spawn_flags = 0 // Flags that specify who can spawn as this species - var/slowdown = 0 // Passive movement speed malus (or boost, if negative) - // Move intents. Earlier in list == default for that type of movement. - var/list/move_intents = list(/decl/move_intent/walk, /decl/move_intent/run, /decl/move_intent/creep) - - var/primitive_form // Lesser form, if any (ie. monkey for humans) - var/greater_form // Greater form, if any, ie. human for monkeys. - var/holder_type - var/gluttonous = 0 // Can eat some mobs. Values can be GLUT_TINY, GLUT_SMALLER, GLUT_ANYTHING, GLUT_ITEM_TINY, GLUT_ITEM_NORMAL, GLUT_ITEM_ANYTHING, GLUT_PROJECTILE_VOMIT - var/stomach_capacity = 5 // How much stuff they can stick in their stomach - var/rarity_value = 1 // Relative rarity/collector value for this species. - // Determines the organs that the species spawns with and - var/list/has_organ = list( // which required-organ checks are conducted. - BP_HEART = /obj/item/organ/internal/heart, - BP_STOMACH = /obj/item/organ/internal/stomach, - BP_LUNGS = /obj/item/organ/internal/lungs, - BP_LIVER = /obj/item/organ/internal/liver, - BP_KIDNEYS = /obj/item/organ/internal/kidneys, - BP_BRAIN = /obj/item/organ/internal/brain, - BP_APPENDIX = /obj/item/organ/internal/appendix, - BP_EYES = /obj/item/organ/internal/eyes - ) - var/vision_organ // If set, this organ is required for vision. Defaults to "eyes" if the species has them. - var/breathing_organ // If set, this organ is required for breathing. Defaults to "lungs" if the species has them. - - var/list/override_organ_types // Used for species that only need to change one or two entries in has_organ. - - var/obj/effect/decal/cleanable/blood/tracks/move_trail = /obj/effect/decal/cleanable/blood/tracks/footprints // What marks are left when walking - - var/list/skin_overlays = list() - - var/list/has_limbs = list( - BP_CHEST = list("path" = /obj/item/organ/external/chest), - BP_GROIN = list("path" = /obj/item/organ/external/groin), - BP_HEAD = list("path" = /obj/item/organ/external/head), - BP_L_ARM = list("path" = /obj/item/organ/external/arm), - BP_R_ARM = list("path" = /obj/item/organ/external/arm/right), - BP_L_LEG = list("path" = /obj/item/organ/external/leg), - BP_R_LEG = list("path" = /obj/item/organ/external/leg/right), - BP_L_HAND = list("path" = /obj/item/organ/external/hand), - BP_R_HAND = list("path" = /obj/item/organ/external/hand/right), - BP_L_FOOT = list("path" = /obj/item/organ/external/foot), - BP_R_FOOT = list("path" = /obj/item/organ/external/foot/right) - ) - - var/list/override_limb_types // Used for species that only need to change one or two entries in has_limbs. - - // The basic skin colours this species uses - var/list/base_skin_colours - - var/list/genders = list(MALE, FEMALE, PLURAL) - - // Bump vars - var/bump_flag = HUMAN // What are we considered to be when bumped? - var/push_flags = ~HEAVY // What can we push? - var/swap_flags = ~HEAVY // What can we swap place with? - - var/pass_flags = 0 - var/breathing_sound = 'sound/voice/monkey.ogg' - var/list/equip_adjust = list() - var/list/equip_overlays = list() - - var/list/base_auras - - var/sexybits_location //organ tag where they are located if they can be kicked for increased pain - - var/job_skill_buffs = list() // A list containing jobs (/datum/job), with values the extra points that job receives. - - var/list/descriptors = list( - /datum/mob_descriptor/height = 0, - /datum/mob_descriptor/build = 0 - ) - - var/standing_jump_range = 2 - var/list/maneuvers = list(/decl/maneuver/leap) - - var/list/available_cultural_info = list( - TAG_CULTURE = list(CULTURE_OTHER), - TAG_HOMEWORLD = list(HOME_SYSTEM_STATELESS), - TAG_FACTION = list(FACTION_OTHER), - TAG_RELIGION = list(RELIGION_OTHER, RELIGION_ATHEISM, RELIGION_AGNOSTICISM, RELIGION_UNSTATED) - ) - var/list/force_cultural_info = list() - var/list/default_cultural_info = list() - var/list/additional_available_cultural_info = list() - var/max_players - - // Order matters, higher pain level should be higher up - var/list/pain_emotes_with_pain_level = list( - list(/decl/emote/audible/scream, /decl/emote/audible/whimper, /decl/emote/audible/moan, /decl/emote/audible/cry) = 70, - list(/decl/emote/audible/grunt, /decl/emote/audible/groan, /decl/emote/audible/moan) = 40, - list(/decl/emote/audible/grunt, /decl/emote/audible/groan) = 10, - ) - - - var/exertion_effect_chance = 0 - var/exertion_hydration_scale = 0 - var/exertion_nutrition_scale = 0 - var/exertion_charge_scale = 0 - var/exertion_reagent_scale = 0 - var/exertion_reagent_path = null - var/list/exertion_emotes_biological = null - var/list/exertion_emotes_synthetic = null - -/* -These are all the things that can be adjusted for equipping stuff and -each one can be in the NORTH, SOUTH, EAST, and WEST direction. Specify -the direction to shift the thing and what direction. - -example: - equip_adjust = list( - slot_back_str = list(NORTH = list(SOUTH = 12, EAST = 7), EAST = list(SOUTH = 2, WEST = 12)) - ) - -This would shift back items (backpacks, axes, etc.) when the mob -is facing either north or east. -When the mob faces north the back item icon is shifted 12 pixes down and 7 pixels to the right. -When the mob faces east the back item icon is shifted 2 pixels down and 12 pixels to the left. - -The slots that you can use are found in items_clothing.dm and are the inventory slot string ones, so make sure - you use the _str version of the slot. -*/ - -/datum/species/New() - - if(!codex_description) - codex_description = description - - for(var/token in ALL_CULTURAL_TAGS) - - var/force_val = force_cultural_info[token] - if(force_val) - default_cultural_info[token] = force_val - available_cultural_info[token] = list(force_val) - - else if(additional_available_cultural_info[token]) - if(!available_cultural_info[token]) - available_cultural_info[token] = list() - available_cultural_info[token] |= additional_available_cultural_info[token] - - else if(!LAZYLEN(available_cultural_info[token])) - var/list/map_systems = GLOB.using_map.available_cultural_info[token] - available_cultural_info[token] = map_systems.Copy() - - if(LAZYLEN(available_cultural_info[token]) && !default_cultural_info[token]) - var/list/avail_systems = available_cultural_info[token] - default_cultural_info[token] = avail_systems[1] - - if(!default_cultural_info[token]) - default_cultural_info[token] = GLOB.using_map.default_cultural_info[token] - - if(hud_type) - hud = new hud_type() - else - hud = new() - - if(LAZYLEN(descriptors)) - var/list/descriptor_datums = list() - for(var/desctype in descriptors) - var/datum/mob_descriptor/descriptor = new desctype - descriptor.comparison_offset = descriptors[desctype] - descriptor_datums[descriptor.name] = descriptor - descriptors = descriptor_datums - - //If the species has eyes, they are the default vision organ - if(!vision_organ && has_organ[BP_EYES]) - vision_organ = BP_EYES - //If the species has lungs, they are the default breathing organ - if(!breathing_organ && has_organ[BP_LUNGS]) - breathing_organ = BP_LUNGS - - unarmed_attacks = list() - for(var/u_type in unarmed_types) - unarmed_attacks += new u_type() - - // Modify organ lists if necessary. - if(islist(override_organ_types)) - for(var/ltag in override_organ_types) - has_organ[ltag] = override_organ_types[ltag] - - if(islist(override_limb_types)) - for(var/ltag in override_limb_types) - has_limbs[ltag] = list("path" = override_limb_types[ltag]) - - //Build organ descriptors - for(var/limb_type in has_limbs) - var/list/organ_data = has_limbs[limb_type] - var/obj/item/organ/limb_path = organ_data["path"] - organ_data["descriptor"] = initial(limb_path.name) - -/datum/species/proc/equip_survival_gear(var/mob/living/carbon/human/H,var/extendedtank = 1) - if(istype(H.get_equipped_item(slot_back), /obj/item/storage/backpack)) - if (extendedtank) H.equip_to_slot_or_del(new /obj/item/storage/box/engineer(H.back), slot_in_backpack) - else H.equip_to_slot_or_del(new /obj/item/storage/box/survival(H.back), slot_in_backpack) - else - if (extendedtank) H.equip_to_slot_or_del(new /obj/item/storage/box/engineer(H), slot_r_hand) - else H.equip_to_slot_or_del(new /obj/item/storage/box/survival(H), slot_r_hand) - -/datum/species/proc/create_organs(var/mob/living/carbon/human/H) //Handles creation of mob organs. - - H.mob_size = mob_size - for(var/obj/item/organ/organ in H.contents) - if((organ in H.organs) || (organ in H.internal_organs)) - qdel(organ) - - if(H.organs) H.organs.Cut() - if(H.internal_organs) H.internal_organs.Cut() - if(H.organs_by_name) H.organs_by_name.Cut() - if(H.internal_organs_by_name) H.internal_organs_by_name.Cut() - - H.organs = list() - H.internal_organs = list() - H.organs_by_name = list() - H.internal_organs_by_name = list() - - for(var/limb_type in has_limbs) - var/list/organ_data = has_limbs[limb_type] - var/limb_path = organ_data["path"] - new limb_path(H) - - for(var/organ_tag in has_organ) - var/organ_type = has_organ[organ_tag] - var/obj/item/organ/O = new organ_type(H) - if(organ_tag != O.organ_tag) - warning("[O.type] has a default organ tag \"[O.organ_tag]\" that differs from the species' organ tag \"[organ_tag]\". Updating organ_tag to match.") - O.organ_tag = organ_tag - H.internal_organs_by_name[organ_tag] = O - - for(var/name in H.organs_by_name) - H.organs |= H.organs_by_name[name] - - for(var/name in H.internal_organs_by_name) - H.internal_organs |= H.internal_organs_by_name[name] - - for(var/obj/item/organ/O in (H.organs|H.internal_organs)) - O.owner = H - post_organ_rejuvenate(O, H) - - H.sync_organ_dna() - -/datum/species/proc/hug(var/mob/living/carbon/human/H,var/mob/living/target) - - var/t_him = "them" - var/obj/item/organ/external/affecting - if(ishuman(target)) - var/mob/living/carbon/human/T = target - affecting = T.get_organ(H.zone_sel.selecting) - - - switch(target.gender) - if(MALE) - t_him = "him" - if(FEMALE) - t_him = "her" - - if(H.zone_sel.selecting == "head" && (affecting && !affecting.is_stump())) //Headpats and Handshakes - From VOREStation, thanks <3 - H.visible_message( \ - "[H] pats [target] on the head.", \ - "You pat [target] on the head.", ) - else if((H.zone_sel.selecting == "r_hand" || H.zone_sel.selecting == "l_hand") && (affecting && !affecting.is_stump())) - H.visible_message( \ - "[H] shakes [target]'s hand.", \ - "You shake [target]'s hand.", ) - else H.visible_message("[H] hugs [target] to make [t_him] feel better!", \ - "You hug [target] to make [t_him] feel better!") - - if(H != target) - H.update_personal_goal(/datum/goal/achievement/givehug, TRUE) - target.update_personal_goal(/datum/goal/achievement/gethug, TRUE) - -/datum/species/proc/add_base_auras(var/mob/living/carbon/human/H) - if(base_auras) - for(var/type in base_auras) - H.add_aura(new type(H)) - -/datum/species/proc/remove_base_auras(var/mob/living/carbon/human/H) - if(base_auras) - var/list/bcopy = base_auras.Copy() - for(var/a in H.auras) - var/obj/aura/A = a - if(is_type_in_list(a, bcopy)) - bcopy -= A.type - H.remove_aura(A) - qdel(A) - -/datum/species/proc/remove_inherent_verbs(var/mob/living/carbon/human/H) - if(inherent_verbs) - for(var/verb_path in inherent_verbs) - H.verbs -= verb_path - return - -/datum/species/proc/add_inherent_verbs(var/mob/living/carbon/human/H) - if(inherent_verbs) - for(var/verb_path in inherent_verbs) - H.verbs |= verb_path - return - -/datum/species/proc/handle_post_spawn(var/mob/living/carbon/human/H) //Handles anything not already covered by basic species assignment. - add_inherent_verbs(H) - add_base_auras(H) - H.mob_bump_flag = bump_flag - H.mob_swap_flags = swap_flags - H.mob_push_flags = push_flags - H.pass_flags = pass_flags - handle_limbs_setup(H) - -/datum/species/proc/handle_pre_spawn(var/mob/living/carbon/human/H) - return - -/datum/species/proc/handle_death(var/mob/living/carbon/human/H) //Handles any species-specific death events (such as dionaea nymph spawns). - return - -/datum/species/proc/handle_new_grab(var/mob/living/carbon/human/H, var/obj/item/grab/G) - return - -/datum/species/proc/handle_sleeping(var/mob/living/carbon/human/H) - if(prob(2) && !H.failed_last_breath && !H.isSynthetic()) - if(!H.paralysis) - H.emote("snore") - else - H.emote("groan") - -// Only used for alien plasma weeds atm, but could be used for Dionaea later. -/datum/species/proc/handle_environment_special(var/mob/living/carbon/human/H) - return - -/datum/species/proc/handle_movement_delay_special(var/mob/living/carbon/human/H) - return 0 - -// Used to update alien icons for aliens. -/datum/species/proc/handle_login_special(var/mob/living/carbon/human/H) - return - -// As above. -/datum/species/proc/handle_logout_special(var/mob/living/carbon/human/H) - return - -// Builds the HUD using species-specific icons and usable slots. -/datum/species/proc/build_hud(var/mob/living/carbon/human/H) - return - -//Used by xenos understanding larvae and dionaea understanding nymphs. -/datum/species/proc/can_understand(var/mob/other) - return - -/datum/species/proc/can_overcome_gravity(var/mob/living/carbon/human/H) - return FALSE - -// Used for any extra behaviour when falling and to see if a species will fall at all. -/datum/species/proc/can_fall(var/mob/living/carbon/human/H) - return TRUE - -//Used for swimming -/datum/species/proc/can_float(var/mob/living/carbon/human/H) - if(!H.is_physically_disabled()) - if(H.skill_check(SKILL_HAULING, SKILL_BASIC)) - if(H.encumbrance() < 1) - return TRUE //Is not possible to swim while pulling big things - return FALSE - -// Used to override normal fall behaviour. Use only when the species does fall down a level. -/datum/species/proc/handle_fall_special(var/mob/living/carbon/human/H, var/turf/landing) - return FALSE - -// Called when using the shredding behavior. -/datum/species/proc/can_shred(var/mob/living/carbon/human/H, var/ignore_intent, var/ignore_antag) - - if((!ignore_intent && H.a_intent != I_HURT) || H.pulling_punches) - return 0 - - if(!ignore_antag && H.mind && !player_is_antag(H.mind)) - return 0 - - for(var/datum/unarmed_attack/attack in unarmed_attacks) - if(!attack.is_usable(H)) - continue - if(attack.shredding) - return 1 - - return 0 - -// Called in life() when the mob has no client. -/datum/species/proc/handle_npc(var/mob/living/carbon/human/H) - return - -/datum/species/proc/handle_vision(var/mob/living/carbon/human/H) - var/list/vision = H.get_accumulated_vision_handlers() - H.update_sight() - H.set_sight(H.sight|get_vision_flags(H)|H.equipment_vision_flags|vision[1]) - H.change_light_colour(H.getDarkvisionTint()) - - if(H.stat == DEAD) - return 1 - - if(!H.druggy) - H.set_see_in_dark((H.sight == (SEE_TURFS|SEE_MOBS|SEE_OBJS)) ? 8 : min(H.getDarkvisionRange() + H.equipment_darkness_modifier, 8)) - if(H.equipment_see_invis) - H.set_see_invisible(max(min(H.see_invisible, H.equipment_see_invis), vision[2])) - - if(H.equipment_tint_total >= TINT_BLIND) - H.eye_blind = max(H.eye_blind, 1) - - if(!H.client)//no client, no screen to update - return 1 - - H.set_fullscreen(H.eye_blind && !H.equipment_prescription, "blind", /obj/screen/fullscreen/blind) - H.set_fullscreen(H.stat == UNCONSCIOUS, "blackout", /obj/screen/fullscreen/blackout) - - if(config.welder_vision) - H.set_fullscreen(H.equipment_tint_total, "welder", /obj/screen/fullscreen/impaired, H.equipment_tint_total) - var/how_nearsighted = get_how_nearsighted(H) - H.set_fullscreen(how_nearsighted, "nearsighted", /obj/screen/fullscreen/oxy, how_nearsighted) - H.set_fullscreen(H.eye_blurry, "blurry", /obj/screen/fullscreen/blurry) - H.set_fullscreen(H.druggy, "high", /obj/screen/fullscreen/high) - - for(var/overlay in H.equipment_overlays) - H.client.screen |= overlay - - return 1 - -/datum/species/proc/get_how_nearsighted(var/mob/living/carbon/human/H) - var/prescriptions = short_sighted - if(H.disabilities & NEARSIGHTED) - prescriptions += 7 - if(H.equipment_prescription) - prescriptions -= H.equipment_prescription - - var/light = light_sensitive - if(light) - if(H.eyecheck() > FLASH_PROTECTION_NONE) - light = 0 - else - var/turf_brightness = 1 - var/turf/T = get_turf(H) - if(T && T.lighting_overlay) - turf_brightness = min(1, T.get_lumcount()) - if(turf_brightness < 0.33) - light = 0 - else - light = round(light * turf_brightness) - if(H.equipment_light_protection) - light -= H.equipment_light_protection - return clamp(max(prescriptions, light), 0, 7) - -/datum/species/proc/set_default_hair(var/mob/living/carbon/human/H) - H.head_hair_style = H.species.default_head_hair_style - H.facial_hair_style = H.species.default_facial_hair_style - H.update_hair() - -/datum/species/proc/get_blood_name() - return "blood" - -/datum/species/proc/handle_death_check(var/mob/living/carbon/human/H) - return FALSE - -//Mostly for toasters -/datum/species/proc/handle_limbs_setup(var/mob/living/carbon/human/H) - for(var/thing in H.organs) - post_organ_rejuvenate(thing, H) - -// Impliments different trails for species depending on if they're wearing shoes. -/datum/species/proc/get_move_trail(var/mob/living/carbon/human/H) - if(H.lying) - return /obj/effect/decal/cleanable/blood/tracks/body - if(H.shoes || (H.wear_suit && (H.wear_suit.body_parts_covered & FEET))) - var/obj/item/clothing/shoes = (H.wear_suit && (H.wear_suit.body_parts_covered & FEET)) ? H.wear_suit : H.shoes // suits take priority over shoes - return shoes.move_trail - else - return move_trail - -/datum/species/proc/update_skin(var/mob/living/carbon/human/H) - return - -/datum/species/proc/disarm_attackhand(var/mob/living/carbon/human/attacker, var/mob/living/carbon/human/target) - attacker.do_attack_animation(target) - - if(target.w_uniform) - target.w_uniform.add_fingerprint(attacker) - var/obj/item/organ/external/affecting = target.get_organ(ran_zone(attacker.zone_sel.selecting)) - - var/list/holding = list(target.get_active_hand() = 60, target.get_inactive_hand() = 30) - - var/skill_mod = attacker.get_skill_difference(SKILL_COMBAT, target) - var/state_mod = attacker.melee_accuracy_mods() - target.melee_accuracy_mods() - var/stim_mod = target.chem_effects[CE_STIMULANT] - var/push_threshold = 12 + (skill_mod - stim_mod) - var/disarm_threshold = 24 + ((skill_mod - stim_mod) * 2) - - if(target.a_intent == I_HELP) - state_mod -= 30 - //Handle unintended consequences - for(var/obj/item/I in holding) - var/hurt_prob = max(holding[I] - 3*skill_mod, 0) - if(prob(hurt_prob) && I.on_disarm_attempt(target, attacker)) - return - - var/randn = rand(1, 100) + state_mod - if(!(check_no_slip(target)) && randn <= push_threshold) - var/armor_check = 100 * target.get_blocked_ratio(affecting, DAMAGE_BRUTE, damage = 20) - target.apply_effect(2, EFFECT_WEAKEN, armor_check) - playsound(target.loc, 'sound/weapons/thudswoosh.ogg', 50, 1, -1) - if(armor_check < 100) - target.visible_message("[attacker] has pushed [target]!") - else - target.visible_message("[attacker] attempted to push [target]!") - return - - if(randn <= disarm_threshold) - //See about breaking grips or pulls - if(target.break_all_grabs(attacker)) - playsound(target.loc, 'sound/weapons/thudswoosh.ogg', 50, 1, -1) - return - - //Actually disarm them - for(var/obj/item/I in holding) - if(I && target.unEquip(I)) - target.visible_message("[attacker] has disarmed [target]!") - playsound(target.loc, 'sound/weapons/thudswoosh.ogg', 50, 1, -1) - return - - playsound(target.loc, 'sound/weapons/punchmiss.ogg', 25, 1, -1) - target.visible_message("[attacker] attempted to disarm \the [target]!") - -/datum/species/proc/disfigure_msg(var/mob/living/carbon/human/H) //Used for determining the message a disfigured face has on examine. To add a unique message, just add this onto a specific species and change the "return" message. - var/datum/gender/T = gender_datums[H.get_gender()] - return "[T.His] face is horribly mangled!\n" - -/datum/species/proc/max_skin_tone() - if(appearance_flags & HAS_SKIN_TONE_GRAV) - return 100 - if(appearance_flags & HAS_SKIN_TONE_SPCR) - return 165 - if(appearance_flags & HAS_SKIN_TONE_TRITON) - return 80 - return 220 - -/datum/species/proc/get_hair_styles() - var/list/L = LAZYACCESS(hair_styles, type) - if(!L) - L = list() - LAZYSET(hair_styles, type, L) - for(var/hairstyle in GLOB.hair_styles_list) - var/datum/sprite_accessory/S = GLOB.hair_styles_list[hairstyle] - if(S.species_allowed && !(get_bodytype() in S.species_allowed)) - continue - if(S.subspecies_allowed && !(name in S.subspecies_allowed)) - continue - ADD_SORTED(L, hairstyle, /proc/cmp_text_asc) - L[hairstyle] = S - return L - -/datum/species/proc/get_facial_hair_styles(var/gender) - var/list/facial_hair_styles_by_species = LAZYACCESS(facial_hair_styles, type) - if(!facial_hair_styles_by_species) - facial_hair_styles_by_species = list() - LAZYSET(facial_hair_styles, type, facial_hair_styles_by_species) - - var/list/facial_hair_style_by_gender = facial_hair_styles_by_species[gender] - if(!facial_hair_style_by_gender) - facial_hair_style_by_gender = list() - LAZYSET(facial_hair_styles_by_species, gender, facial_hair_style_by_gender) - - for(var/facialhairstyle in GLOB.facial_hair_styles_list) - var/datum/sprite_accessory/S = GLOB.facial_hair_styles_list[facialhairstyle] - if(gender == MALE && S.gender == FEMALE) - continue - if(gender == FEMALE && S.gender == MALE) - continue - if(S.species_allowed && !(get_bodytype() in S.species_allowed)) - continue - if(S.subspecies_allowed && !(name in S.subspecies_allowed)) - continue - ADD_SORTED(facial_hair_style_by_gender, facialhairstyle, /proc/cmp_text_asc) - facial_hair_style_by_gender[facialhairstyle] = S - - return facial_hair_style_by_gender - -/datum/species/proc/get_description(var/header, var/append, var/verbose = TRUE, var/skip_detail, var/skip_photo) - var/list/damage_types = list( - "physical trauma" = brute_mod, - "burns" = burn_mod, - "lack of air" = oxy_mod, - "poison" = toxins_mod - ) - if(!header) - header = "

                  [name]


                  " - var/dat = list() - dat += "[header]" - dat += "" - dat += "" - dat += "" - if((!skip_photo && preview_icon) || !skip_detail) - dat += "" - dat += "" - dat += "
                  " - if(verbose || length(description) <= MAX_DESC_LEN) - dat += "[description]" - else - dat += "[copytext_char(description, 1, MAX_DESC_LEN)] \[...\]" - if(append) - dat += "
                  [append]" - dat += "
                  " - if(!skip_photo && preview_icon) - send_rsc(usr, icon(icon = preview_icon, icon_state = ""), "species_preview_[name].png") - dat += "

                  " - if(!skip_detail) - dat += "" - if(spawn_flags & SPECIES_CAN_JOIN) - dat += "
                  Often present among humans." - if(spawn_flags & SPECIES_IS_WHITELISTED) - dat += "
                  Whitelist restricted." - if(!has_organ[BP_HEART]) - dat += "
                  Does not have blood." - if(!has_organ[breathing_organ]) - dat += "
                  Does not breathe." - if(species_flags & SPECIES_FLAG_NO_SCAN) - dat += "
                  Does not have DNA." - if(species_flags & SPECIES_FLAG_NO_PAIN) - dat += "
                  Does not feel pain." - if(species_flags & SPECIES_FLAG_NO_MINOR_CUT) - dat += "
                  Has thick skin/scales." - if(species_flags & SPECIES_FLAG_NO_SLIP) - dat += "
                  Has excellent traction." - if(species_flags & SPECIES_FLAG_NO_POISON) - dat += "
                  Immune to most poisons." - if(appearance_flags & HAS_A_SKIN_TONE) - dat += "
                  Has a variety of skin tones." - if(appearance_flags & HAS_SKIN_COLOR) - dat += "
                  Has a variety of skin colours." - if(appearance_flags & HAS_EYE_COLOR) - dat += "
                  Has a variety of eye colours." - if(species_flags & SPECIES_FLAG_IS_PLANT) - dat += "
                  Has a plantlike physiology." - if(slowdown) - dat += "
                  Moves [slowdown > 0 ? "slower" : "faster"] than most." - for(var/kind in damage_types) - if(damage_types[kind] > 1) - dat += "
                  Vulnerable to [kind]." - else if(damage_types[kind] < 1) - dat += "
                  Resistant to [kind]." - if(has_organ[breathing_organ]) - dat += "
                  They breathe [gas_data.name[breath_type]]." - dat += "
                  They exhale [gas_data.name[exhale_type]]." - if(LAZYLEN(poison_types)) - dat += "
                  [capitalize(english_list(poison_types))] [LAZYLEN(poison_types) == 1 ? "is" : "are"] poisonous to them." - dat += "
                  " - dat += "

                  " - return jointext(dat, null) - -/mob/living/carbon/human/verb/check_species() - set name = "Check Species Information" - set category = "IC" - set src = usr - - show_browser(src, species.get_description(), "window=species;size=700x400") - -/datum/species/proc/skills_from_age(age) //Converts an age into a skill point allocation modifier. Can be used to give skill point bonuses/penalities not depending on job. - switch(age) - if(0 to 22) . = 0 - if(23 to 30) . = 3 - if(31 to 45) . = 6 - else . = 8 - -/datum/species/proc/post_organ_rejuvenate(var/obj/item/organ/org, var/mob/living/carbon/human/H) - return - -/datum/species/proc/check_no_slip(var/mob/living/carbon/human/H) - if(can_overcome_gravity(H)) - return TRUE - return (species_flags & SPECIES_FLAG_NO_SLIP) - -/datum/species/proc/get_pain_emote(var/mob/living/carbon/human/H, var/pain_power) - if(!(species_flags & SPECIES_FLAG_NO_PAIN)) - return - for(var/pain_emotes in pain_emotes_with_pain_level) - var/pain_level = pain_emotes_with_pain_level[pain_emotes] - if(pain_level >= pain_power) - // This assumes that if a pain-level has been defined it also has a list of emotes to go with it - var/decl/emote/E = decls_repository.get_decl(pick(pain_emotes)) - return E.key - -/datum/species/proc/handle_exertion(mob/living/carbon/human/H) - if (!exertion_effect_chance) - return - var/chance = exertion_effect_chance * H.encumbrance() - if (chance && prob(H.skill_fail_chance(SKILL_HAULING, chance))) - var/synthetic = H.isSynthetic() - if (synthetic) - if (exertion_charge_scale) - var/obj/item/organ/internal/cell/cell = locate() in H.internal_organs - if (cell) - cell.use(cell.get_power_drain() * exertion_charge_scale) - else - if (exertion_hydration_scale) - H.adjust_hydration(-DEFAULT_THIRST_FACTOR * exertion_hydration_scale) - if (exertion_nutrition_scale) - H.adjust_nutrition(-DEFAULT_HUNGER_FACTOR * exertion_nutrition_scale) - if (exertion_reagent_scale && !isnull(exertion_reagent_path)) - H.make_reagent(REM * exertion_reagent_scale, exertion_reagent_path) - if (prob(10)) - var/list/active_emotes = synthetic ? exertion_emotes_synthetic : exertion_emotes_biological - var/decl/emote/exertion_emote = decls_repository.get_decl(pick(active_emotes)) - if (exertion_emote) - exertion_emote.do_emote(H) diff --git a/code/modules/species/species_attack.dm b/code/modules/species/species_attack.dm deleted file mode 100644 index 638ed0b2eaa98..0000000000000 --- a/code/modules/species/species_attack.dm +++ /dev/null @@ -1,183 +0,0 @@ -/datum/unarmed_attack/bite/sharp //eye teeth - attack_verb = list("bit", "chomped on") - attack_sound = 'sound/weapons/bite.ogg' - shredding = FALSE - sharp = TRUE - edge = TRUE - attack_name = "sharp bite" - -/datum/unarmed_attack/diona - attack_verb = list("lashed", "bludgeoned") - attack_noun = list("tendril") - eye_attack_text = "a tendril" - eye_attack_text_victim = "a tendril" - attack_name = "tendrils" - -/datum/unarmed_attack/claws - attack_verb = list("scratched", "clawed", "slashed") - attack_noun = list("claws") - eye_attack_text = "claws" - eye_attack_text_victim = "sharp claws" - attack_sound = 'sound/weapons/slice.ogg' - miss_sound = 'sound/weapons/slashmiss.ogg' - sharp = TRUE - edge = TRUE - attack_name = "claws" - var/blocked_by_gloves = TRUE - -/datum/unarmed_attack/claws/is_usable(var/mob/living/carbon/human/user, var/mob/living/carbon/human/target, var/zone) - if(user.gloves && blocked_by_gloves) - var/obj/item/clothing/gloves/gloves = user.gloves - if(istype(gloves) && !gloves.clipped) - return 0 - else - return 1 - else - return 1 - -/datum/unarmed_attack/claws/show_attack(var/mob/living/carbon/human/user, var/mob/living/carbon/human/target, var/zone, var/attack_damage) - var/obj/item/organ/external/affecting = target.get_organ(zone) - - if (!affecting) - to_chat(user, SPAN_WARNING("\The [target] does not have that bodypart!")) - return - - attack_damage = clamp(attack_damage, 1, 5) - - if(target == user) - user.visible_message("[user] [pick(attack_verb)] \himself in the [affecting.name]!") - return 0 - - switch(zone) - if(BP_HEAD, BP_MOUTH, BP_EYES) - // ----- HEAD ----- // - switch(attack_damage) - if(1 to 2) user.visible_message("[user] scratched [target] across \his cheek!") - if(3 to 4) - user.visible_message(pick( - 80; user.visible_message("[user] [pick(attack_verb)] [target]'s [pick("face", "neck", affecting.name)]!"), - 20; user.visible_message("[user] [pick(attack_verb)] [pick("[target] in the [affecting.name]", "[target] across \his [pick("face", "neck", affecting.name)]")]!"), - )) - if(5) - user.visible_message(pick( - "[user] rakes \his [pick(attack_noun)] across [target]'s [pick("face", "neck", affecting.name)]!", - "[user] tears \his [pick(attack_noun)] into [target]'s [pick("face", "neck", affecting.name)]!", - )) - else - // ----- BODY ----- // - switch(attack_damage) - if(1 to 2) user.visible_message("[user] [pick("scratched", "grazed")] [target]'s [affecting.name]!") - if(3 to 4) - user.visible_message(pick( - 80; user.visible_message("[user] [pick(attack_verb)] [target]'s [affecting.name]!"), - 20; user.visible_message("[user] [pick(attack_verb)] [pick("[target] in the [affecting.name]", "[target] across \his [affecting.name]")]!"), - )) - if(5) user.visible_message("[user] tears \his [pick(attack_noun)] [pick("deep into", "into", "across")] [target]'s [affecting.name]!") - -/datum/unarmed_attack/claws/strong - attack_verb = list("slashed") - damage = 5 - shredding = TRUE - attack_name = "strong claws" - -/datum/unarmed_attack/claws/strong/gloves - blocked_by_gloves = FALSE - -/datum/unarmed_attack/bite/strong - attack_verb = list("mauled") - damage = 8 - shredding = TRUE - attack_name = "strong bite" - -/datum/unarmed_attack/slime_glomp - attack_verb = list("glomped") - attack_noun = list("body") - damage = 2 - attack_name = "glomp" - -/datum/unarmed_attack/slime_glomp/apply_effects(var/mob/living/carbon/human/user,var/mob/living/carbon/human/target,var/armour,var/attack_damage,var/zone) - ..() - user.apply_stored_shock_to(target) - -/datum/unarmed_attack/stomp/weak - attack_verb = list("jumped on") - attack_name = "weak stomp" - -/datum/unarmed_attack/stomp/weak/get_unarmed_damage() - return damage - -/datum/unarmed_attack/stomp/weak/show_attack(var/mob/living/carbon/human/user, var/mob/living/carbon/human/target, var/zone, var/attack_damage) - var/obj/item/organ/external/affecting = target.get_organ(zone) - user.visible_message("[user] jumped up and down on \the [target]'s [affecting.name]!") - playsound(user.loc, attack_sound, 25, 1, -1) - -/datum/unarmed_attack/tail //generally meant for people like unathi - attack_verb = list ("bludgeoned", "lashed", "smacked", "whapped") - attack_noun = list ("tail") - attack_name = "tail swipe" - -/datum/unarmed_attack/tail/is_usable(var/mob/living/carbon/human/user, var/mob/living/carbon/human/target, var/zone) //ensures that you can't tail someone in the skull - - if(!(zone in list(BP_L_LEG, BP_R_LEG, BP_L_FOOT, BP_R_FOOT, BP_GROIN))) - - return 0 - - var/obj/item/organ/external/E = user.organs_by_name[BP_L_FOOT] - - if(E && !E.is_stump()) - - return 1 - - - E = user.organs_by_name[BP_R_FOOT] - - if(E && !E.is_stump()) - - return 1 - - return 0 - -/datum/unarmed_attack/tail/show_attack(var/mob/living/carbon/human/user, var/mob/living/carbon/human/target, var/zone, var/attack_damage) - - var/obj/item/organ/external/affecting = target.get_organ(zone) - - var/organ = affecting.name - attack_damage = clamp(attack_damage, 1, 6) - attack_damage = 3 + attack_damage - rand(1, 5) - switch(attack_damage) - - if(1 to 5) user.visible_message("[user] glanced [target] with their [pick(attack_noun)] in the [organ]!") - - if(6 to 7) user.visible_message("[user] [pick(attack_verb)] [target] in \his [organ] with their [pick(attack_noun)]!") - - if(8) user.visible_message("[user] landed a heavy blow with their [pick(attack_noun)] against [target]'s [organ]!") - -/datum/unarmed_attack/nabber - attack_verb = list("mauled", "slashed", "struck", "pierced") - attack_noun = list("forelimb") - damage = 8 - shredding = TRUE - sharp = TRUE - edge = TRUE - delay = 20 - eye_attack_text = "a forelimb" - eye_attack_text_victim = "a forelimb" - attack_name = "forelimb slash" - -/datum/unarmed_attack/punch/starborn - attack_verb = list("scorched", "burned", "fried") - shredding = TRUE - attack_name = "starborn strike" - -/datum/unarmed_attack/punch/starborn/get_damage_type() - return DAMAGE_BURN - -/datum/unarmed_attack/bite/venom - attack_verb = list("bit", "sank their fangs into") - attack_sound = 'sound/weapons/bite.ogg' - damage = 5 - delay = 120 - attack_name = "venomous bite" - -/datum/unarmed_attack/bite/venom/get_damage_type() - return DAMAGE_TOXIN diff --git a/code/modules/species/species_getters.dm b/code/modules/species/species_getters.dm deleted file mode 100644 index af3f99846ffe1..0000000000000 --- a/code/modules/species/species_getters.dm +++ /dev/null @@ -1,110 +0,0 @@ -/datum/species/proc/get_valid_shapeshifter_forms(var/mob/living/carbon/human/H) - return list() - -/datum/species/proc/get_additional_examine_text(var/mob/living/carbon/human/H) - return - -/datum/species/proc/get_tail(var/mob/living/carbon/human/H) - return tail - -/datum/species/proc/get_tail_animation(var/mob/living/carbon/human/H) - return tail_animation - -/datum/species/proc/get_tail_hair(var/mob/living/carbon/human/H) - return tail_hair - -/datum/species/proc/get_blood_mask(var/mob/living/carbon/human/H) - return blood_mask - -/datum/species/proc/get_damage_overlays(var/mob/living/carbon/human/H) - return damage_overlays - -/datum/species/proc/get_damage_mask(var/mob/living/carbon/human/H) - return damage_mask - -/datum/species/proc/get_examine_name(var/mob/living/carbon/human/H) - return name - -/datum/species/proc/get_icobase(var/mob/living/carbon/human/H, var/get_deform) - return (get_deform ? deform : icobase) - -/datum/species/proc/get_station_variant() - return name - -/datum/species/proc/get_race_key(var/mob/living/carbon/human/H) - return race_key - -/datum/species/proc/get_bodytype(var/mob/living/carbon/human/H) - return name - -/datum/species/proc/get_knockout_message(var/mob/living/carbon/human/H) - return ((H && H.isSynthetic()) ? "encounters a hardware fault and suddenly reboots!" : knockout_message) - -/datum/species/proc/get_death_message(var/mob/living/carbon/human/H) - return ((H && H.isSynthetic()) ? "gives one shrill beep before falling lifeless." : death_message) - -/datum/species/proc/get_ssd(var/mob/living/carbon/human/H) - if (H.ai_holder) - return - - if (H.key) - return ((H && H.isSynthetic() && (H.get_species() == SPECIES_IPC == SPECIES_SHELL)) ? "flashing a 'system offline' glyph on their monitor" : show_ssd) - else - return ((H && H.isSynthetic() && (H.get_species() == SPECIES_SHELL)) ? "displaying a blue screen on their monitor indicating total system failure" : show_coma) - -/datum/species/proc/get_blood_colour(var/mob/living/carbon/human/H) - return ((H && H.isSynthetic() && (H.get_species() != SPECIES_SHELL)) ? SYNTH_BLOOD_COLOUR : blood_color) - -/datum/species/proc/get_flesh_colour(var/mob/living/carbon/human/H) - return ((H && H.isSynthetic() && (H.get_species() != SPECIES_SHELL)) ? SYNTH_FLESH_COLOUR : flesh_color) - -/datum/species/proc/get_environment_discomfort(var/mob/living/carbon/human/H, var/msg_type) - - if(!prob(5)) - return - - var/covered = 0 // Basic coverage can help. - for(var/obj/item/clothing/clothes in H) - if(H.l_hand == clothes || H.r_hand == clothes) - continue - if((clothes.body_parts_covered & UPPER_TORSO) && (clothes.body_parts_covered & LOWER_TORSO)) - covered = 1 - break - - switch(msg_type) - if("cold") - if(!covered) - to_chat(H, "[pick(cold_discomfort_strings)]") - if("heat") - if(covered) - to_chat(H, "[pick(heat_discomfort_strings)]") - -/datum/species/proc/get_vision_flags(var/mob/living/carbon/human/H) - return vision_flags - -/datum/species/proc/get_husk_icon(var/mob/living/carbon/human/H) - return husk_icon - -/datum/species/proc/get_sex(var/mob/living/carbon/H) - return H.gender - -/datum/species/proc/get_surgery_overlay_icon(var/mob/living/carbon/human/H) - return 'icons/mob/surgery.dmi' - -/datum/species/proc/get_footstep(var/mob/living/carbon/human/H, var/footstep_type) - return - -/datum/species/proc/get_brute_mod(var/mob/living/carbon/human/H) - . = brute_mod - -/datum/species/proc/get_burn_mod(var/mob/living/carbon/human/H) - . = burn_mod - -/datum/species/proc/get_toxins_mod(var/mob/living/carbon/human/H) - . = toxins_mod - -/datum/species/proc/get_radiation_mod(var/mob/living/carbon/human/H) - . = (H && H.isSynthetic() ? 0.5 : radiation_mod) - -/datum/species/proc/get_slowdown(var/mob/living/carbon/human/H) - . = (H && H.isSynthetic() ? 0 : slowdown) diff --git a/code/modules/species/species_grab.dm b/code/modules/species/species_grab.dm deleted file mode 100644 index 238cc33d6d9f9..0000000000000 --- a/code/modules/species/species_grab.dm +++ /dev/null @@ -1,4 +0,0 @@ -/datum/species/proc/attempt_grab(var/mob/living/carbon/human/grabber, var/atom/movable/target, var/grab_type) - if(grabber != target) - grabber.visible_message(SPAN_DANGER("[grabber] attempted to grab \the [target]!")) - return grabber.make_grab(grabber, target, grab_type) diff --git a/code/modules/species/species_helpers.dm b/code/modules/species/species_helpers.dm deleted file mode 100644 index b6fdade406037..0000000000000 --- a/code/modules/species/species_helpers.dm +++ /dev/null @@ -1,80 +0,0 @@ -var/global/list/stored_shock_by_ref = list() - -/mob/living/proc/apply_stored_shock_to(var/mob/living/target) - if(stored_shock_by_ref["\ref[src]"]) - target.electrocute_act(stored_shock_by_ref["\ref[src]"]*0.9, src) - stored_shock_by_ref["\ref[src]"] = 0 - -/datum/species/proc/has_fine_manipulation(var/mob/living/carbon/human/H) - return has_fine_manipulation - -/datum/species/proc/toggle_stance(var/mob/living/carbon/human/H) - if(!H.incapacitated()) - H.pulling_punches = !H.pulling_punches - to_chat(H, "You are now [H.pulling_punches ? "pulling your punches" : "not pulling your punches"].") - -/datum/species/proc/get_offset_overlay_image(var/spritesheet, var/mob_icon, var/mob_state, var/color, var/slot) - - // If we don't actually need to offset this, don't bother with any of the generation/caching. - if(!spritesheet && equip_adjust.len && equip_adjust[slot] && LAZYLEN(equip_adjust[slot])) - - // Check the cache for previously made icons. - var/image_key = "[mob_icon]-[mob_state]-[color]" - if(!equip_overlays[image_key]) - - var/icon/final_I = new(icon_template) - var/list/shifts = equip_adjust[slot] - - // Apply all pixel shifts for each direction. - for(var/shift_facing in shifts) - var/list/facing_list = shifts[shift_facing] - var/use_dir = text2num(shift_facing) - var/icon/equip = new(mob_icon, icon_state = mob_state, dir = use_dir) - var/icon/canvas = new(icon_template) - canvas.Blend(equip, ICON_OVERLAY, facing_list["x"]+1, facing_list["y"]+1) - final_I.Insert(canvas, dir = use_dir) - equip_overlays[image_key] = overlay_image(final_I, color = color, flags = RESET_COLOR) - var/image/I = new() // We return a copy of the cached image, in case downstream procs mutate it. - I.appearance = equip_overlays[image_key] - return I - return overlay_image(mob_icon, mob_state, color, RESET_COLOR) - -/datum/species/proc/water_act(var/mob/living/carbon/human/H, var/depth) - if(!isnull(water_soothe_amount) && depth >= 40) - if(H.getHalLoss()) - H.adjustHalLoss(-(water_soothe_amount)) - if(prob(5)) - to_chat(H, "The water ripples gently over your skin in a soothing balm.") - -/datum/species/proc/is_available_for_join() - if(!(spawn_flags & SPECIES_CAN_JOIN)) - return FALSE - else if(!isnull(max_players)) - var/player_count = 0 - for(var/mob/living/carbon/human/H in GLOB.living_mob_list_) - if(H.client && H.key && H.species == src) - player_count++ - if(player_count >= max_players) - return FALSE - return TRUE - -/datum/species/proc/check_background(var/datum/job/job, var/datum/preferences/prefs) - . = TRUE - -/datum/species/proc/get_digestion_product() - return /datum/reagent/nutriment - -/datum/species/proc/get_resized_organ_w_class(var/organ_w_class) - . = clamp(organ_w_class + mob_size_difference(mob_size, MOB_MEDIUM), ITEM_SIZE_TINY, ITEM_SIZE_GARGANTUAN) - -/datum/species/proc/resize_organ(var/obj/item/organ/organ) - if(!istype(organ)) - return - organ.w_class = get_resized_organ_w_class(initial(organ.w_class)) - if(!istype(organ, /obj/item/organ/external)) - return - var/obj/item/organ/external/limb = organ - for(var/bp_tag in has_organ) - var/obj/item/organ/internal/I = has_organ[bp_tag] - if(initial(I.parent_organ) == organ.organ_tag) - limb.cavity_max_w_class = max(limb.cavity_max_w_class, get_resized_organ_w_class(initial(I.w_class))) \ No newline at end of file diff --git a/code/modules/species/species_hud.dm b/code/modules/species/species_hud.dm deleted file mode 100644 index ddca5e7e8341e..0000000000000 --- a/code/modules/species/species_hud.dm +++ /dev/null @@ -1,98 +0,0 @@ -/datum/hud_data - var/icon // If set, overrides ui_style. - var/has_a_intent = 1 // Set to draw intent box. - var/has_m_intent = 1 // Set to draw move intent box. - var/has_warnings = 1 // Set to draw environment warnings. - var/has_pressure = 1 // Draw the pressure indicator. - var/has_nutrition = 1 // Draw the nutrition indicator. - var/has_bodytemp = 1 // Draw the bodytemp indicator. - var/has_hands = 1 // Set to draw hands. - var/has_drop = 1 // Set to draw drop button. - var/has_throw = 1 // Set to draw throw button. - var/has_resist = 1 // Set to draw resist button. - var/has_internals = 1 // Set to draw the internals toggle button. - var/list/equip_slots = list() // Checked by mob_can_equip(). - - // Contains information on the position and tag for all inventory slots - // to be drawn for the mob. This is fairly delicate, try to avoid messing with it - // unless you know exactly what it does. - var/list/gear = list( - "i_clothing" = list("loc" = ui_iclothing, "name" = "Uniform", "slot" = slot_w_uniform, "state" = "center", "toggle" = 1), - "o_clothing" = list("loc" = ui_oclothing, "name" = "Suit", "slot" = slot_wear_suit, "state" = "suit", "toggle" = 1), - "mask" = list("loc" = ui_mask, "name" = "Mask", "slot" = slot_wear_mask, "state" = "mask", "toggle" = 1), - "gloves" = list("loc" = ui_gloves, "name" = "Gloves", "slot" = slot_gloves, "state" = "gloves", "toggle" = 1), - "eyes" = list("loc" = ui_glasses, "name" = "Glasses", "slot" = slot_glasses, "state" = "glasses","toggle" = 1), - "l_ear" = list("loc" = ui_l_ear, "name" = "Left Ear", "slot" = slot_l_ear, "state" = "ears", "toggle" = 1), - "r_ear" = list("loc" = ui_r_ear, "name" = "Right Ear", "slot" = slot_r_ear, "state" = "ears", "toggle" = 1), - "head" = list("loc" = ui_head, "name" = "Hat", "slot" = slot_head, "state" = "hair", "toggle" = 1), - "shoes" = list("loc" = ui_shoes, "name" = "Shoes", "slot" = slot_shoes, "state" = "shoes", "toggle" = 1), - "suit storage" = list("loc" = ui_sstore1, "name" = "Suit Storage", "slot" = slot_s_store, "state" = "suitstore"), - "back" = list("loc" = ui_back, "name" = "Back", "slot" = slot_back, "state" = "back"), - "id" = list("loc" = ui_id, "name" = "ID", "slot" = slot_wear_id, "state" = "id"), - "storage1" = list("loc" = ui_storage1, "name" = "Left Pocket", "slot" = slot_l_store, "state" = "pocket"), - "storage2" = list("loc" = ui_storage2, "name" = "Right Pocket", "slot" = slot_r_store, "state" = "pocket"), - "belt" = list("loc" = ui_belt, "name" = "Belt", "slot" = slot_belt, "state" = "belt") - ) - -/datum/hud_data/New() - ..() - for(var/slot in gear) - equip_slots |= gear[slot]["slot"] - - if(has_hands) - equip_slots |= slot_l_hand - equip_slots |= slot_r_hand - equip_slots |= slot_handcuffed - - if(slot_back in equip_slots) - equip_slots |= slot_in_backpack - - if(slot_w_uniform in equip_slots) - equip_slots |= slot_tie - - equip_slots |= slot_legcuffed - -/datum/hud_data/diona - has_internals = 0 - gear = list( - "i_clothing" = list("loc" = ui_iclothing, "name" = "Uniform", "slot" = slot_w_uniform, "state" = "center", "toggle" = 1), - "o_clothing" = list("loc" = ui_shoes, "name" = "Suit", "slot" = slot_wear_suit, "state" = "suit", "toggle" = 1), - "l_ear" = list("loc" = ui_gloves, "name" = "Ear", "slot" = slot_l_ear, "state" = "ears", "toggle" = 1), - "head" = list("loc" = ui_oclothing, "name" = "Hat", "slot" = slot_head, "state" = "hair", "toggle" = 1), - "suit storage" = list("loc" = ui_sstore1, "name" = "Suit Storage", "slot" = slot_s_store, "state" = "suitstore"), - "back" = list("loc" = ui_back, "name" = "Back", "slot" = slot_back, "state" = "back"), - "id" = list("loc" = ui_id, "name" = "ID", "slot" = slot_wear_id, "state" = "id"), - "storage1" = list("loc" = ui_storage1, "name" = "Left Pocket", "slot" = slot_l_store, "state" = "pocket"), - "storage2" = list("loc" = ui_storage2, "name" = "Right Pocket", "slot" = slot_r_store, "state" = "pocket"), - "belt" = list("loc" = ui_belt, "name" = "Belt", "slot" = slot_belt, "state" = "belt") - ) - -/datum/hud_data/nabber - gear = list( - "i_clothing" = list("loc" = ui_iclothing, "name" = "Uniform", "slot" = slot_w_uniform, "state" = "center", "toggle" = 1), - "o_clothing" = list("loc" = ui_shoes, "name" = "Suit", "slot" = slot_wear_suit, "state" = "suit", "toggle" = 1), - "l_ear" = list("loc" = ui_oclothing, "name" = "Ear", "slot" = slot_l_ear, "state" = "ears", "toggle" = 1), - "gloves" = list("loc" = ui_gloves, "name" = "Gloves", "slot" = slot_gloves, "state" = "gloves", "toggle" = 1), - "head" = list("loc" = ui_mask, "name" = "Hat", "slot" = slot_head, "state" = "hair", "toggle" = 1), - "eyes" = list("loc" = ui_glasses, "name" = "Glasses", "slot" = slot_glasses, "state" = "glasses","toggle" = 1), - "suit storage" = list("loc" = ui_sstore1, "name" = "Suit Storage", "slot" = slot_s_store, "state" = "suitstore"), - "back" = list("loc" = ui_back, "name" = "Back", "slot" = slot_back, "state" = "back"), - "id" = list("loc" = ui_id, "name" = "ID", "slot" = slot_wear_id, "state" = "id"), - "storage1" = list("loc" = ui_storage1, "name" = "Left Pocket", "slot" = slot_l_store, "state" = "pocket"), - "storage2" = list("loc" = ui_storage2, "name" = "Right Pocket", "slot" = slot_r_store, "state" = "pocket"), - "belt" = list("loc" = ui_belt, "name" = "Belt", "slot" = slot_belt, "state" = "belt") - ) - -/datum/hud_data/monkey - gear = list( - "i_clothing" = list("loc" = ui_iclothing, "name" = "Uniform", "slot" = slot_w_uniform, "state" = "center", "toggle" = 1), - "storage1" = list("loc" = ui_storage1, "name" = "Left Pocket", "slot" = slot_l_store, "state" = "pocket"), - "storage2" = list("loc" = ui_storage2, "name" = "Right Pocket", "slot" = slot_r_store, "state" = "pocket"), - "l_ear" = list("loc" = ui_gloves, "name" = "Ear", "slot" = slot_l_ear, "state" = "ears", "toggle" = 1), - "r_ear" = list("loc" = ui_l_ear, "name" = "Right Ear", "slot" = slot_r_ear, "state" = "ears", "toggle" = 1), - "id" = list("loc" = ui_id, "name" = "ID", "slot" = slot_wear_id, "state" = "id"), - "head" = list("loc" = ui_head, "name" = "Hat", "slot" = slot_head, "state" = "hair", "toggle" = 1), - "mask" = list("loc" = ui_oclothing, "name" = "Mask", "slot" = slot_wear_mask, "state" = "mask", "toggle" = 1), - "shoes" = list("loc" = ui_shoes, "name" = "Shoes", "slot" = slot_shoes, "state" = "shoes", "toggle" = 1), - "back" = list("loc" = ui_sstore1, "name" = "Back", "slot" = slot_back, "state" = "back"), - ) diff --git a/code/modules/species/species_random.dm b/code/modules/species/species_random.dm deleted file mode 100644 index fd5fe682914e5..0000000000000 --- a/code/modules/species/species_random.dm +++ /dev/null @@ -1,76 +0,0 @@ -#define SETUP_RANDOM_COLOR_GETTER(X, Y, Z, W) \ -/datum/species/var/list/random_##Y = W;\ -/datum/species/proc/get_random_##X(){\ - if(!(appearance_flags & Z) || !random_##Y.len){\ - return;\ - }\ - var/decl/color_generator/CG = decls_repository.get_decl(pickweight(random_##Y));\ - return CG && CG.GenerateRGB();\ -} - -#define SETUP_RANDOM_COLOR_SETTER(X, Y)\ -/mob/living/carbon/human/proc/randomize_##X(){\ - if(!species){\ - return;\ - }\ - var/colors = species.get_random_##X();\ - if(colors){\ - Y(colors[1], colors[2], colors[3]);\ - }\ -} - -SETUP_RANDOM_COLOR_GETTER(skin_color, skin_colors, HAS_SKIN_COLOR, list( - /decl/color_generator/black, - /decl/color_generator/grey, - /decl/color_generator/brown, - /decl/color_generator/chestnut, - /decl/color_generator/blue, - /decl/color_generator/blue_light, - /decl/color_generator/green, - /decl/color_generator/white)) -SETUP_RANDOM_COLOR_SETTER(skin_color, change_skin_color) - -SETUP_RANDOM_COLOR_GETTER(hair_color, hair_colors, HAS_HAIR_COLOR, list( - /decl/color_generator/black, - /decl/color_generator/blonde, - /decl/color_generator/chestnut, - /decl/color_generator/copper, - /decl/color_generator/brown, - /decl/color_generator/wheat, - /decl/color_generator/old, - /decl/color_generator/punk)) -SETUP_RANDOM_COLOR_SETTER(hair_color, change_hair_color) - -SETUP_RANDOM_COLOR_GETTER(eye_color, eye_colors, HAS_EYE_COLOR, list( - /decl/color_generator/black, - /decl/color_generator/grey, - /decl/color_generator/brown, - /decl/color_generator/chestnut, - /decl/color_generator/blue, - /decl/color_generator/blue_light, - /decl/color_generator/green, - /decl/color_generator/albino_eye)) -SETUP_RANDOM_COLOR_SETTER(eye_color, change_eye_color) - -/datum/species/proc/get_random_facial_hair_color() - return get_random_hair_color() - -SETUP_RANDOM_COLOR_SETTER(facial_hair_color, change_facial_hair_color) - -/datum/species/proc/get_random_skin_tone() - return random_skin_tone(src) - -/mob/living/carbon/human/proc/randomize_skin_tone() - if(!species) - return - var/new_tone = species.get_random_skin_tone() - if(!isnull(new_tone)) - change_skin_tone(new_tone) - -/mob/living/carbon/human/proc/randomize_hair_style() - change_hair(DEFAULTPICK(generate_valid_hairstyles(), null)) - -/mob/living/carbon/human/proc/randomize_facial_hair_style() - change_facial_hair(DEFAULTPICK(generate_valid_facial_hairstyles(), null)) - -#undef SETUP_RANDOM_COLOR_GETTER diff --git a/code/modules/species/species_shapeshift.dm b/code/modules/species/species_shapeshift.dm deleted file mode 100644 index 0898be85ce675..0000000000000 --- a/code/modules/species/species_shapeshift.dm +++ /dev/null @@ -1,168 +0,0 @@ -// This is something of an intermediary species used for species that -// need to emulate the appearance of another race. Currently it is only -// used for slimes but it may be useful for changelings later. -var/global/list/wrapped_species_by_ref = list() - -/datum/species/shapeshifter - - inherent_verbs = list( - /mob/living/carbon/human/proc/shapeshifter_select_shape, - /mob/living/carbon/human/proc/shapeshifter_select_hair, - /mob/living/carbon/human/proc/shapeshifter_select_gender - ) - - var/list/valid_transform_species = list() - var/monochromatic - var/default_form = SPECIES_HUMAN - -/datum/species/shapeshifter/get_valid_shapeshifter_forms(var/mob/living/carbon/human/H) - return valid_transform_species - -/datum/species/shapeshifter/get_icobase(var/mob/living/carbon/human/H, var/get_deform) - if(!H) return ..(null, get_deform) - var/datum/species/S = all_species[wrapped_species_by_ref["\ref[H]"]] - return S.get_icobase(H, get_deform) - -/datum/species/shapeshifter/get_race_key(var/mob/living/carbon/human/H) - return "[..()]-[wrapped_species_by_ref["\ref[H]"]]" - -/datum/species/shapeshifter/get_bodytype(var/mob/living/carbon/human/H) - if(!H) return ..() - var/datum/species/S = all_species[wrapped_species_by_ref["\ref[H]"]] - return S.get_bodytype(H) - -/datum/species/shapeshifter/get_blood_mask(var/mob/living/carbon/human/H) - if(!H) return ..() - var/datum/species/S = all_species[wrapped_species_by_ref["\ref[H]"]] - return S.get_blood_mask(H) - -/datum/species/shapeshifter/get_damage_mask(var/mob/living/carbon/human/H) - if(!H) return ..() - var/datum/species/S = all_species[wrapped_species_by_ref["\ref[H]"]] - return S.get_damage_mask(H) - -/datum/species/shapeshifter/get_damage_overlays(var/mob/living/carbon/human/H) - if(!H) return ..() - var/datum/species/S = all_species[wrapped_species_by_ref["\ref[H]"]] - return S.get_damage_overlays(H) - -/datum/species/shapeshifter/get_tail(var/mob/living/carbon/human/H) - if(!H) return ..() - var/datum/species/S = all_species[wrapped_species_by_ref["\ref[H]"]] - return S.get_tail(H) - -/datum/species/shapeshifter/get_tail_animation(var/mob/living/carbon/human/H) - if(!H) return ..() - var/datum/species/S = all_species[wrapped_species_by_ref["\ref[H]"]] - return S.get_tail_animation(H) - -/datum/species/shapeshifter/get_tail_hair(var/mob/living/carbon/human/H) - if(!H) return ..() - var/datum/species/S = all_species[wrapped_species_by_ref["\ref[H]"]] - return S.get_tail_hair(H) - -/datum/species/shapeshifter/get_husk_icon(var/mob/living/carbon/human/H) - if(H) - var/datum/species/S = all_species[wrapped_species_by_ref["\ref[H]"]] - if(S) return S.get_husk_icon(H) - return ..() - -/datum/species/shapeshifter/handle_pre_spawn(var/mob/living/carbon/human/H) - ..() - wrapped_species_by_ref["\ref[H]"] = default_form - -/datum/species/shapeshifter/handle_post_spawn(var/mob/living/carbon/human/H) - if(monochromatic) - H.head_hair_color = H.skin_color - H.facial_hair_color = H.head_hair_color - ..() - -/datum/species/shapeshifter/post_organ_rejuvenate(var/obj/item/organ/org, var/mob/living/carbon/human/H) - var/obj/item/organ/external/E = org - if(H && istype(E)) - E.sync_colour_to_human(H) - -/datum/species/shapeshifter/get_pain_emote(var/mob/living/carbon/human/H, var/pain_power) - var/datum/species/S = all_species[wrapped_species_by_ref["\ref[H]"]] - return S.get_pain_emote(H, pain_power) - -// Verbs follow. -/mob/living/carbon/human/proc/shapeshifter_select_hair() - - set name = "Select Hair" - set category = "Abilities" - - if(stat || world.time < last_special) - return - - last_special = world.time + 10 - - visible_message("\The [src]'s form contorts subtly.") - if(species.get_hair_styles()) - var/new_hair = input("Select a hairstyle.", "Shapeshifter Hair") as null|anything in species.get_hair_styles() - change_hair(new_hair ? new_hair : "Bald") - if(species.get_facial_hair_styles(gender)) - var/new_hair = input("Select a facial hair style.", "Shapeshifter Hair") as null|anything in species.get_facial_hair_styles(gender) - change_facial_hair(new_hair ? new_hair : "Shaved") - -/mob/living/carbon/human/proc/shapeshifter_select_gender() - - set name = "Select Gender" - set category = "Abilities" - - if(stat || world.time < last_special) - return - - last_special = world.time + 50 - - var/new_gender = input("Please select a gender.", "Shapeshifter Gender") as null|anything in list(FEMALE, MALE, NEUTER, PLURAL) - if(!new_gender) - return - - visible_message("\The [src]'s form contorts subtly.") - change_gender(new_gender) - -/mob/living/carbon/human/proc/shapeshifter_select_shape() - - set name = "Select Body Shape" - set category = "Abilities" - - if(stat || world.time < last_special) - return - - last_special = world.time + 50 - - var/new_species = input("Please select a species to emulate.", "Shapeshifter Body") as null|anything in species.get_valid_shapeshifter_forms(src) - if(!new_species || !all_species[new_species] || wrapped_species_by_ref["\ref[src]"] == new_species) - return - - wrapped_species_by_ref["\ref[src]"] = new_species - visible_message("\The [src] shifts and contorts, taking the form of \a ["\improper [new_species]"]!") - regenerate_icons() - -/mob/living/carbon/human/proc/shapeshifter_select_colour() - - set name = "Select Body Colour" - set category = "Abilities" - - if(stat || world.time < last_special) - return - - last_special = world.time + 50 - - var/new_skin = input("Please select a new body color.", "Shapeshifter Colour") as color - if(!new_skin) - return - shapeshifter_set_colour(new_skin) - -/mob/living/carbon/human/proc/shapeshifter_set_colour(var/new_skin) - skin_color = new_skin - var/datum/species/shapeshifter/S = species - if(S.monochromatic) - head_hair_color = skin_color - facial_hair_color = head_hair_color - - for(var/obj/item/organ/external/E in organs) - E.sync_colour_to_human(src) - - regenerate_icons() diff --git a/code/modules/species/station/adherent.dm b/code/modules/species/station/adherent.dm deleted file mode 100644 index 7511c1a7d86cf..0000000000000 --- a/code/modules/species/station/adherent.dm +++ /dev/null @@ -1,179 +0,0 @@ -/datum/species/adherent - name = SPECIES_ADHERENT - name_plural = "Adherents" - - description = "The Vigil is a relatively loose association of machine-servitors, Adherents, \ - built by an extinct culture. They are devoted to the memory of their long-dead creators, \ - whose home system and burgeoning stellar empire was scoured to bedrock by a solar flare. \ - Physically, they are large, floating squidlike machines made of a crystalline composite." - hidden_from_codex = FALSE - silent_steps = TRUE - - meat_type = null - bone_material = null - skin_material = null - - genders = list(PLURAL) - cyborg_noun = null - - icon_template = 'icons/mob/human_races/species/adherent/template.dmi' - icobase = 'icons/mob/human_races/species/adherent/body.dmi' - deform = 'icons/mob/human_races/species/adherent/body.dmi' - preview_icon = 'icons/mob/human_races/species/adherent/preview.dmi' - damage_overlays = 'icons/mob/human_races/species/adherent/damage_overlay.dmi' - damage_mask = 'icons/mob/human_races/species/adherent/damage_mask.dmi' - blood_mask = 'icons/mob/human_races/species/adherent/blood_mask.dmi' - - siemens_coefficient = 0 - rarity_value = 6 - min_age = 8000 - max_age = 12000 - antaghud_offset_y = 14 - warning_low_pressure = 50 - hazard_low_pressure = -1 - mob_size = MOB_LARGE - strength = STR_HIGH - - speech_sounds = list('sound/voice/chime.ogg') - speech_chance = 25 - - cold_level_1 = SYNTH_COLD_LEVEL_1 - cold_level_2 = SYNTH_COLD_LEVEL_2 - cold_level_3 = SYNTH_COLD_LEVEL_3 - - heat_level_1 = SYNTH_HEAT_LEVEL_1 - heat_level_2 = SYNTH_HEAT_LEVEL_2 - heat_level_3 = SYNTH_HEAT_LEVEL_3 - - species_flags = SPECIES_FLAG_NO_SCAN | SPECIES_FLAG_NO_PAIN | SPECIES_FLAG_NO_POISON | SPECIES_FLAG_NO_MINOR_CUT - spawn_flags = SPECIES_CAN_JOIN | SPECIES_IS_WHITELISTED | SPECIES_NO_FBP_CONSTRUCTION | SPECIES_NO_FBP_CHARGEN - - appearance_flags = HAS_EYE_COLOR | HAS_BASE_SKIN_COLOURS - blood_color = "#2de00d" - flesh_color = "#90edeb" - slowdown = -1 - hud_type = /datum/hud_data/adherent - - available_cultural_info = list( - TAG_CULTURE = list( - CULTURE_ADHERENT - ), - TAG_HOMEWORLD = list( - HOME_SYSTEM_ADHERENT, - HOME_SYSTEM_ADHERENT_MOURNER - ), - TAG_FACTION = list( - FACTION_ADHERENT_PRESERVERS, - FACTION_ADHERENT_LOYALISTS, - FACTION_ADHERENT_SEPARATISTS - ), - TAG_RELIGION = list( - RELIGION_OTHER - ) - ) - - has_limbs = list( - BP_CHEST = list("path" = /obj/item/organ/external/chest/crystal), - BP_GROIN = list("path" = /obj/item/organ/external/groin/crystal), - BP_HEAD = list("path" = /obj/item/organ/external/head/crystal), - BP_L_ARM = list("path" = /obj/item/organ/external/arm/crystal), - BP_R_ARM = list("path" = /obj/item/organ/external/arm/right/crystal), - BP_L_HAND = list("path" = /obj/item/organ/external/hand/crystal), - BP_R_HAND = list("path" = /obj/item/organ/external/hand/right/crystal), - BP_L_LEG = list("path" = /obj/item/organ/external/tendril), - BP_R_LEG = list("path" = /obj/item/organ/external/tendril/two), - BP_L_FOOT = list("path" = /obj/item/organ/external/tendril/three), - BP_R_FOOT = list("path" = /obj/item/organ/external/tendril/four) - ) - - has_organ = list( - BP_BRAIN = /obj/item/organ/internal/brain/adherent, - BP_EYES = /obj/item/organ/internal/eyes/adherent, - BP_JETS = /obj/item/organ/internal/powered/jets, - BP_FLOAT = /obj/item/organ/internal/powered/float, - BP_CELL = /obj/item/organ/internal/cell/adherent, - BP_COOLING_FINS = /obj/item/organ/internal/powered/cooling_fins - ) - move_trail = /obj/effect/decal/cleanable/blood/tracks/snake - max_players = 3 - - base_skin_colours = list( - "Turquoise" = "", - "Emerald" = "_green", - "Amethyst" = "_purple", - "Sapphire" = "_blue", - "Ruby" = "_red", - "Topaz" = "_yellow", - "Quartz" = "_white", - "Jet" = "_black" - ) - -/datum/species/adherent/New() - equip_adjust = list( - "[slot_l_hand_str]" = list("[NORTH]" = list("x" = 0, "y" = 14), "[EAST]" = list("x" = 0, "y" = 14), "[SOUTH]" = list("x" = 0, "y" = 14), "[WEST]" = list("x" = 0, "y" = 14)), - "[slot_r_hand_str]" = list("[NORTH]" = list("x" = 0, "y" = 14), "[EAST]" = list("x" = 0, "y" = 14), "[SOUTH]" = list("x" = 0, "y" = 14), "[WEST]" = list("x" = 0, "y" = 14)), - "[slot_back_str]" = list("[NORTH]" = list("x" = 0, "y" = 14), "[EAST]" = list("x" = 0, "y" = 14), "[SOUTH]" = list("x" = 0, "y" = 14), "[WEST]" = list("x" = 0, "y" = 14)), - "[slot_belt_str]" = list("[NORTH]" = list("x" = 0, "y" = 14), "[EAST]" = list("x" = 0, "y" = 14), "[SOUTH]" = list("x" = 0, "y" = 14), "[WEST]" = list("x" = 0, "y" = 14)), - "[slot_head_str]" = list("[NORTH]" = list("x" = 0, "y" = 14), "[EAST]" = list("x" = 3, "y" = 14), "[SOUTH]" = list("x" = 0, "y" = 14), "[WEST]" = list("x" = -3, "y" = 14)), - "[slot_l_ear_str]" = list("[NORTH]" = list("x" = 0, "y" = 14), "[EAST]" = list("x" = 0, "y" = 14), "[SOUTH]" = list("x" = 0, "y" = 14), "[WEST]" = list("x" = 0, "y" = 14)), - "[slot_r_ear_str]" = list("[NORTH]" = list("x" = 0, "y" = 14), "[EAST]" = list("x" = 0, "y" = 14), "[SOUTH]" = list("x" = 0, "y" = 14), "[WEST]" = list("x" = 0, "y" = 14)) - ) - ..() - -/datum/species/adherent/can_overcome_gravity(var/mob/living/carbon/human/H) - . = FALSE - if(H && H.stat == CONSCIOUS) - for(var/obj/item/organ/internal/powered/float/float in H.internal_organs) - if(float.active && float.is_usable()) - . = TRUE - break - -/datum/species/adherent/can_fall(var/mob/living/carbon/human/H) - . = !can_overcome_gravity(H) - -/datum/species/adherent/can_float(var/mob/living/carbon/human/H) - return FALSE - -/datum/species/adherent/get_slowdown(var/mob/living/carbon/human/H) - return slowdown - -/datum/species/adherent/handle_fall_special(var/mob/living/carbon/human/H, var/turf/landing) - var/float_is_usable = FALSE - if(H && H.stat == CONSCIOUS) - for(var/obj/item/organ/internal/powered/float/float in H.internal_organs) - if(float.is_usable()) - float_is_usable = TRUE - break - if(float_is_usable) - if(istype(landing, /turf/simulated/open)) - H.visible_message("\The [H] descends from \the [landing].", "You descend regally.") - else - H.visible_message("\The [H] floats gracefully down from \the [landing].", "You land gently on \the [landing].") - return TRUE - return FALSE - -/datum/species/adherent/get_blood_name() - return "coolant" - -/datum/species/adherent/skills_from_age(age) - switch(age) - if(0 to 1000) . = -4 - if(1000 to 2000) . = 0 - if(2000 to 8000) . = 4 - else . = 8 - -/datum/species/adherent/get_additional_examine_text(var/mob/living/carbon/human/H) - if(can_overcome_gravity(H)) return "\nThey are floating on a cloud of shimmering distortion." - -/datum/hud_data/adherent - has_internals = FALSE - gear = list( - "l_ear" = list("loc" = ui_iclothing, "name" = "Aux Port", "slot" = slot_l_ear, "state" = "ears", "toggle" = 1), - "head" = list("loc" = ui_glasses, "name" = "Hat", "slot" = slot_head, "state" = "hair", "toggle" = 1), - "back" = list("loc" = ui_back, "name" = "Back", "slot" = slot_back, "state" = "back"), - "id" = list("loc" = ui_id, "name" = "ID", "slot" = slot_wear_id, "state" = "id"), - "belt" = list("loc" = ui_belt, "name" = "Belt", "slot" = slot_belt, "state" = "belt") - ) - -/datum/species/adherent/post_organ_rejuvenate(var/obj/item/organ/org, var/mob/living/carbon/human/H) - org.status |= (ORGAN_BRITTLE|ORGAN_CRYSTAL|ORGAN_ROBOTIC) diff --git a/code/modules/species/station/golem.dm b/code/modules/species/station/golem.dm deleted file mode 100644 index fd264811e6abe..0000000000000 --- a/code/modules/species/station/golem.dm +++ /dev/null @@ -1,59 +0,0 @@ -/datum/species/golem - name = SPECIES_GOLEM - name_plural = "Golems" - - icobase = 'icons/mob/human_races/species/golem/body.dmi' - deform = 'icons/mob/human_races/species/golem/body.dmi' - husk_icon = 'icons/mob/human_races/species/golem/husk.dmi' - - unarmed_types = list(/datum/unarmed_attack/stomp, /datum/unarmed_attack/kick, /datum/unarmed_attack/punch) - species_flags = SPECIES_FLAG_NO_PAIN | SPECIES_FLAG_NO_SCAN | SPECIES_FLAG_NO_POISON - spawn_flags = SPECIES_IS_RESTRICTED - siemens_coefficient = 0 - - meat_type = null - bone_material = null - skin_material = null - - breath_type = null - poison_types = null - - blood_color = "#515573" - flesh_color = "#137e8f" - - cold_level_1 = SYNTH_COLD_LEVEL_1 - cold_level_2 = SYNTH_COLD_LEVEL_2 - cold_level_3 = SYNTH_COLD_LEVEL_3 - - heat_level_1 = SYNTH_HEAT_LEVEL_1 - heat_level_2 = SYNTH_HEAT_LEVEL_2 - heat_level_3 = SYNTH_HEAT_LEVEL_3 - - has_organ = list( - BP_BRAIN = /obj/item/organ/internal/brain/golem - ) - - death_message = "becomes completely motionless..." - genders = list(NEUTER) - - force_cultural_info = list( - TAG_CULTURE = CULTURE_CULTIST, - TAG_HOMEWORLD = HOME_SYSTEM_STATELESS, - TAG_FACTION = FACTION_OTHER - ) - -/datum/species/golem/handle_post_spawn(var/mob/living/carbon/human/H) - if(H.mind) - H.mind.reset() - H.mind.assigned_role = "Golem" - H.mind.special_role = "Golem" - H.real_name = "golem ([rand(1, 1000)])" - H.SetName(H.real_name) - H.status_flags |= NO_ANTAG - ..() - -/datum/species/golem/post_organ_rejuvenate(var/obj/item/organ/org, var/mob/living/carbon/human/H) - org.status |= (ORGAN_BRITTLE|ORGAN_CRYSTAL) - -/datum/species/golem/can_float(mob/living/carbon/human/H) - return FALSE \ No newline at end of file diff --git a/code/modules/species/station/human_subspecies.dm b/code/modules/species/station/human_subspecies.dm deleted file mode 100644 index 4e831fa05c4f7..0000000000000 --- a/code/modules/species/station/human_subspecies.dm +++ /dev/null @@ -1,181 +0,0 @@ -/datum/species/human/gravworlder - name = SPECIES_GRAVWORLDER - name_plural = "Grav-Adapted Humans" - description = "Heavier and stronger than a baseline human, gravity-adapted people have \ - thick radiation-resistant skin with a high lead content, denser bones, and recessed \ - eyes beneath a prominent brow in order to shield them from the glare of a dangerously \ - bright, alien sun. This comes at the cost of mobility, flexibility, and increased \ - oxygen requirements to support their robust metabolism." - icobase = 'icons/mob/human_races/species/human/subspecies/gravworlder_body.dmi' - preview_icon= 'icons/mob/human_races/species/human/subspecies/gravworlder_preview.dmi' - health_hud_intensity = 3 - - flash_mod = 0.9 - oxy_mod = 1.1 - breath_pressure = 18 - radiation_mod = 0.5 - brute_mod = 0.85 - slowdown = 1 - strength = STR_HIGH - - descriptors = list( - /datum/mob_descriptor/height = -1, - /datum/mob_descriptor/build = 1 - ) - - appearance_flags = HAS_HAIR_COLOR | HAS_SKIN_TONE_GRAV | HAS_LIPS | HAS_UNDERWEAR | HAS_EYE_COLOR - -/datum/species/human/gravworlder/can_float(mob/living/carbon/human/H) - . = ..() - if(.) - return H.skill_check(SKILL_HAULING, SKILL_EXPERT) //Hard for them to swim - -/datum/species/human/spacer - name = SPECIES_SPACER - name_plural = "Space-Adapted Humans" - description = "Lithe and frail, these sickly folk were engineered for work in environments that \ - lack both light and atmosphere. As such, they're quite resistant to asphyxiation as well as \ - toxins, but they suffer from weakened bone structure and a marked vulnerability to bright lights." - icobase = 'icons/mob/human_races/species/human/subspecies/spacer_body.dmi' - preview_icon= 'icons/mob/human_races/species/human/subspecies/spacer_preview.dmi' - - oxy_mod = 0.8 - breath_pressure = 14 - toxins_mod = 0.9 - flash_mod = 1.2 - brute_mod = 1.1 - burn_mod = 1.1 - darksight_range = 6 - darksight_tint = DARKTINT_MODERATE - - descriptors = list( - /datum/mob_descriptor/height, - /datum/mob_descriptor/build = -1 - ) - - appearance_flags = HAS_HAIR_COLOR | HAS_SKIN_TONE_SPCR | HAS_LIPS | HAS_UNDERWEAR | HAS_EYE_COLOR - species_flags = SPECIES_FLAG_LOW_GRAV_ADAPTED - - hazard_high_pressure = HAZARD_HIGH_PRESSURE * 0.8 // Dangerously high pressure. - warning_high_pressure = WARNING_HIGH_PRESSURE * 0.8 // High pressure warning. - warning_low_pressure = WARNING_LOW_PRESSURE * 0.8 // Low pressure warning. - hazard_low_pressure = HAZARD_LOW_PRESSURE * 0.8 // Dangerously low pressure. - -/datum/species/human/vatgrown - name = SPECIES_VATGROWN - name_plural = "Vat-Grown Humans" - description = "With cloning on the forefront of human scientific advancement, mass production \ - of bodies is a very real and rather ethically grey industry. Although slavery, indentured servitude \ - and flash-cloning are all illegal in SCG space, there still exists a margin for those legitimate \ - corporations able to take up contracts for growing and raising vat-grown humans to populate new \ - colonies or installations. Many vat-grown humans come from one of these projects, making up the \ - majority of those referred to as the nonborn - those with singular names and an identifier, such as \ - ID-John, BQ1-Bob or Thomas-582 - while others, bearing more human-sounding names, are created for \ - and raised as members of regular human families. Still others are the lab-created designer progeny \ - of the SCG's rich elite.

                  Vat-grown humans tend to be paler than baseline, though those \ - with darker skin better display the dull, greenish hue resulting from their artificial growth. \ - Vat-grown humans have no appendix and fewer inherited genetic disabilities but have a weakened \ - metabolism." - icobase = 'icons/mob/human_races/species/human/subspecies/vatgrown_body.dmi' - preview_icon= 'icons/mob/human_races/species/human/subspecies/vatgrown_preview.dmi' - - toxins_mod = 1.1 - has_organ = list( - BP_HEART = /obj/item/organ/internal/heart, - BP_STOMACH = /obj/item/organ/internal/stomach, - BP_LUNGS = /obj/item/organ/internal/lungs, - BP_LIVER = /obj/item/organ/internal/liver, - BP_KIDNEYS = /obj/item/organ/internal/kidneys, - BP_BRAIN = /obj/item/organ/internal/brain, - BP_EYES = /obj/item/organ/internal/eyes - ) - - additional_available_cultural_info = list( - TAG_CULTURE = list(CULTURE_HUMAN_VATGROWN) - ) - default_cultural_info = list( - TAG_CULTURE = CULTURE_HUMAN_VATGROWN - ) - -/datum/species/human/tritonian - name = SPECIES_TRITONIAN - name_plural = "Tritonians" - description = "Of all human gene-adapts, the Tritonian genotype is probably the most wildly divergent from \ - baseline humanity. Conceived alongside dolphin and octopus genetic engineering projects, this genotype \ - is adapted for amphibious life on flooded ocean moons like Triton, but is equally comfortable in a range \ - of aquatic and non-aquatic environments. Their heavy, seal-like bodies have sharp teeth, recessed eyes, \ - and thick blue-grey skin with a layer of dense blubber for insulation and protection, but they find \ - it difficult to move quickly on land due to their bulk." - icobase = 'icons/mob/human_races/species/human/subspecies/tritonian_body.dmi' - preview_icon= 'icons/mob/human_races/species/human/subspecies/tritonian_preview.dmi' - slowdown = 1 - - oxy_mod = 0.5 - brute_mod = 0.8 - toxins_mod = 1.15 - radiation_mod = 1.15 - body_temperature = 302 - water_soothe_amount = 5 - - heat_level_1 = 350 - heat_level_2 = 380 - heat_level_3 = 900 - - cold_level_1 = 220 - cold_level_2 = 160 - cold_level_3 = 100 - - unarmed_types = list( - /datum/unarmed_attack/stomp, - /datum/unarmed_attack/kick, - /datum/unarmed_attack/punch, - /datum/unarmed_attack/bite/sharp - ) - - descriptors = list( - /datum/mob_descriptor/height, - /datum/mob_descriptor/build = 1 - ) - - appearance_flags = HAS_HAIR_COLOR | HAS_SKIN_TONE_TRITON | HAS_LIPS | HAS_UNDERWEAR | HAS_EYE_COLOR - -/datum/species/human/tritonian/can_float(mob/living/carbon/human/H) - if(!H.is_physically_disabled()) - if(H.encumbrance() < 2) - return TRUE - return FALSE - -/datum/species/human/mule - name = SPECIES_MULE - name_plural = "Mules" - description = "There are a huge number of 'uncurated' genetic lines in human space, many of which fall under the \ - general header of baseline humanity. One recently discovered genotype is remarkable for both being deeply feral, \ - in the sense that it still has many of the inherited diseases and weaknesses that plagued pre-expansion humanity, \ - and for a strange affinity for psionic operancy. The Mules, as they are called, are born on the very edges of \ - civilization, and are physically diminutive and unimposing, with scrawny, often deformed bodies. Their physiology \ - rejects prosthetics and synthetic organs, and their lifespans are short, but their raw psionic potential is unmatched." - - spawn_flags = SPECIES_CAN_JOIN | SPECIES_NO_FBP_CONSTRUCTION | SPECIES_NO_FBP_CHARGEN | SPECIES_NO_ROBOTIC_INTERNAL_ORGANS - brute_mod = 1.25 - burn_mod = 1.25 - oxy_mod = 1.25 - toxins_mod = 1.25 - radiation_mod = 1.25 - flash_mod = 1.25 - blood_volume = SPECIES_BLOOD_DEFAULT * 0.85 - min_age = 18 - max_age = 45 - -/datum/species/human/mule/handle_post_spawn(var/mob/living/carbon/human/H) - if(!H.psi) - H.psi = new(H) - var/list/faculties = list("[PSI_COERCION]", "[PSI_REDACTION]", "[PSI_ENERGISTICS]", "[PSI_PSYCHOKINESIS]") - for(var/i = 1 to rand(2,3)) - H.set_psi_rank(pick_n_take(faculties), 1) - H.psi.max_stamina = 70 - var/obj/item/organ/external/E = pick(H.organs) - if(!BP_IS_ROBOTIC(E)) - E.mutate() - E.limb_flags |= ORGAN_FLAG_DEFORMED - E.status |= ORGAN_DISFIGURED - E.status |= ORGAN_MUTATED diff --git a/code/modules/species/station/lizard.dm b/code/modules/species/station/lizard.dm deleted file mode 100644 index 00bb08ee720d9..0000000000000 --- a/code/modules/species/station/lizard.dm +++ /dev/null @@ -1,171 +0,0 @@ -/datum/species/unathi - name = SPECIES_UNATHI - name_plural = SPECIES_UNATHI - icon_template = 'icons/mob/human_races/species/template_tall.dmi' - icobase = 'icons/mob/human_races/species/unathi/body.dmi' - deform = 'icons/mob/human_races/species/unathi/deformed_body.dmi' - husk_icon = 'icons/mob/human_races/species/unathi/husk.dmi' - preview_icon = 'icons/mob/human_races/species/unathi/preview.dmi' - bandages_icon = 'icons/mob/bandage.dmi' - tail = "sogtail" - tail_animation = 'icons/mob/species/unathi/unathi_tail.dmi' - limb_blend = ICON_MULTIPLY - tail_blend = ICON_MULTIPLY - hidden_from_codex = FALSE - skin_material = MATERIAL_SKIN_LIZARD - - unarmed_types = list(/datum/unarmed_attack/stomp, /datum/unarmed_attack/tail, /datum/unarmed_attack/claws, /datum/unarmed_attack/punch, /datum/unarmed_attack/bite/sharp) - primitive_form = "Stok" - darksight_range = 3 - darksight_tint = DARKTINT_MODERATE - gluttonous = GLUT_TINY - strength = STR_HIGH - breath_pressure = 18 - slowdown = 0.5 - brute_mod = 0.8 - flash_mod = 1.2 - blood_volume = 800 - - health_hud_intensity = 2 - hunger_factor = DEFAULT_HUNGER_FACTOR * 2 - - min_age = 18 - max_age = 260 - - body_temperature = null // cold-blooded, implemented the same way nabbers do it - - description = "A heavily reptillian species, Unathi (or 'Sinta as they call themselves) hail from the \ - Uuosa-Eso system, which roughly translates to 'burning mother'.

                  Coming from a harsh, radioactive \ - desert planet, they mostly hold ideals of honesty, virtue, martial combat and bravery above all \ - else, frequently even their own lives. They prefer warmer temperatures than most species and \ - their native tongue is a heavy hissing laungage called Sinta'Unathi." - - cold_level_1 = 280 //Default 260 - Lower is better - cold_level_2 = 220 //Default 200 - cold_level_3 = 130 //Default 120 - - heat_level_1 = 420 //Default 360 - Higher is better - heat_level_2 = 480 //Default 400 - heat_level_3 = 1100 //Default 1000 - - spawn_flags = SPECIES_CAN_JOIN | SPECIES_IS_WHITELISTED | SPECIES_NO_FBP_CONSTRUCTION | SPECIES_NO_FBP_CHARGEN | SPECIES_NO_ROBOTIC_INTERNAL_ORGANS - appearance_flags = HAS_HAIR_COLOR | HAS_LIPS | HAS_UNDERWEAR | HAS_SKIN_COLOR | HAS_EYE_COLOR - - flesh_color = "#34af10" - - reagent_tag = IS_UNATHI - base_color = "#066000" - blood_color = "#f24b2e" - organs_icon = 'icons/mob/human_races/species/unathi/organs.dmi' - - move_trail = /obj/effect/decal/cleanable/blood/tracks/claw - - heat_discomfort_level = 320 - heat_discomfort_strings = list( - "You feel soothingly warm.", - "You feel the heat sink into your bones.", - "You feel warm enough to take a nap." - ) - - cold_discomfort_level = 292 - cold_discomfort_strings = list( - "You feel chilly.", - "You feel sluggish and cold.", - "Your scales bristle against the cold." - ) - breathing_sound = 'sound/voice/lizard.ogg' - - base_auras = list( - /obj/aura/regenerating/human/unathi - ) - - inherent_verbs = list( - /mob/living/carbon/human/proc/diona_heal_toggle - ) - - has_organ = list( - BP_HEART = /obj/item/organ/internal/heart, - BP_STOMACH = /obj/item/organ/internal/stomach, - BP_LUNGS = /obj/item/organ/internal/lungs, - BP_LIVER = /obj/item/organ/internal/liver, - BP_KIDNEYS = /obj/item/organ/internal/kidneys, - BP_EYES = /obj/item/organ/internal/eyes/unathi, - BP_BRAIN = /obj/item/organ/internal/brain/unathi - ) - - descriptors = list( - /datum/mob_descriptor/height = 2, - /datum/mob_descriptor/build = 2 - ) - - available_cultural_info = list( - TAG_CULTURE = list( - CULTURE_UNATHI_POLAR, - CULTURE_UNATHI_DIAMOND_PEAKS, - CULTURE_UNATHI_DESERT, - CULTURE_UNATHI_SAVANNAH, - CULTURE_UNATHI_SALT_SWAMP, - CULTURE_UNATHI_SPACE, - ), - TAG_HOMEWORLD = list( - HOME_SYSTEM_MOGHES, - HOME_SYSTEM_OUERE, - HOME_SYSTEM_OFFWORLD - ), - TAG_FACTION = list( - FACTION_UNATHI_HEGEMONY, - FACTION_UNATHI_SSEN_UUMA, - FACTION_UNATHI_BAASK, - FACTION_UNATHI_GRESIS, - FACTION_UNATHI_INDEPENDENT - ), - TAG_RELIGION = list( - RELIGION_UNATHI_STRATAGEM, - RELIGION_UNATHI_PRECURSOR, - RELIGION_UNATHI_VINE, - RELIGION_UNATHI_LIGHTS, - RELIGION_UNATHI_MARKESHELI, - RELIGION_UNATHI_ANCESTOR, - RELIGION_OTHER, - RELIGION_UNSTATED - ) - ) - default_cultural_info = list( - TAG_CULTURE = CULTURE_UNATHI_POLAR, - TAG_HOMEWORLD = HOME_SYSTEM_MOGHES, - TAG_FACTION = FACTION_UNATHI_INDEPENDENT, - TAG_RELIGION = RELIGION_OTHER - ) - pain_emotes_with_pain_level = list( - list(/decl/emote/audible/wheeze, /decl/emote/audible/roar, /decl/emote/audible/bellow, /decl/emote/audible/howl) = 80, - list(/decl/emote/audible/grunt, /decl/emote/audible/groan, /decl/emote/audible/wheeze, /decl/emote/audible/hiss) = 50, - list(/decl/emote/audible/grunt, /decl/emote/audible/groan, /decl/emote/audible/hiss) = 20, - ) - - exertion_effect_chance = 10 - exertion_hydration_scale = 1 - exertion_reagent_scale = 5 - exertion_reagent_path = /datum/reagent/lactate - exertion_emotes_biological = list( - /decl/emote/exertion/biological, - /decl/emote/exertion/biological/breath, - /decl/emote/exertion/biological/pant - ) - -/datum/species/unathi/equip_survival_gear(var/mob/living/carbon/human/H) - ..() - H.equip_to_slot_or_del(new /obj/item/clothing/shoes/sandal(H),slot_shoes) - -/datum/species/unathi/proc/handle_sugar(var/mob/living/carbon/human/M, var/datum/reagent/sugar, var/efficiency = 1) - var/effective_dose = efficiency * M.chem_doses[sugar.type] - if(effective_dose < 5) - return - M.druggy = max(M.druggy, 10) - M.add_chemical_effect(CE_PULSE, -1) - if(effective_dose > 15 && prob(7)) - M.emote(pick("twitch", "drool")) - if(effective_dose > 20 && prob(10)) - M.SelfMove(pick(GLOB.cardinal)) - -/datum/species/unathi/get_bodytype(var/mob/living/carbon/human/H) - return SPECIES_UNATHI diff --git a/code/modules/species/station/lizard_subspecies.dm b/code/modules/species/station/lizard_subspecies.dm deleted file mode 100644 index f032794950d5b..0000000000000 --- a/code/modules/species/station/lizard_subspecies.dm +++ /dev/null @@ -1,53 +0,0 @@ -/datum/species/unathi/yeosa - name = SPECIES_YEOSA - name_plural = SPECIES_YEOSA - - genders = list(MALE, FEMALE, PLURAL) - - unarmed_types = list(/datum/unarmed_attack/stomp, /datum/unarmed_attack/tail, /datum/unarmed_attack/claws, /datum/unarmed_attack/punch, /datum/unarmed_attack/bite/sharp, /datum/unarmed_attack/bite/venom) - darksight_range = 5 - darksight_tint = DARKTINT_GOOD - slowdown = 0.4 - brute_mod = 0.85 - flash_mod = 1.4 - blood_volume = 700 - water_soothe_amount = 5 - description = "A heavily aquatic offshoot of the Sinta species, Yeosa originally hail from the \ - Salt Swamps, leaving their former home for unclear reasons.

                  Now dwelling in the islands and seas, \ - their culture has diverged majorly from the Sinta, spending less time performing acts of violence and more time socializing. \ - Their biology is heavily attuned to surviving Moghes' dangerous waters, including gills, fins, and a venomous bite." - - base_auras = list( - /obj/aura/regenerating/human/unathi/yeosa - ) - - additional_available_cultural_info = list( - TAG_CULTURE = list( - CULTURE_UNATHI_YEOSA_ABYSS, - CULTURE_UNATHI_YEOSA_LITTORAL - ), - TAG_FACTION = list( - FACTION_UNATHI_RAH_ZAKEH, - FACTION_UNATHI_KHARZA - ), - TAG_RELIGION = list( - RELIGION_UNATHI_AGA_EAKHE - ) - ) - - default_cultural_info = list(TAG_FACTION = FACTION_UNATHI_INDEPENDENT) - - override_organ_types = list( - BP_LUNGS = /obj/item/organ/internal/lungs/gills - ) - - override_limb_types = list( - BP_HEAD = /obj/item/organ/external/head/yeosa - ) - - -/datum/species/unathi/yeosa/can_float(mob/living/carbon/human/H) - if(!H.is_physically_disabled()) - if(H.encumbrance() < 2) - return TRUE - return FALSE \ No newline at end of file diff --git a/code/modules/species/station/machine.dm b/code/modules/species/station/machine.dm deleted file mode 100644 index bfb0e3f866a6e..0000000000000 --- a/code/modules/species/station/machine.dm +++ /dev/null @@ -1,117 +0,0 @@ -/datum/species/machine - name = SPECIES_IPC - name_plural = "machines" - - description = "Positronic intelligence really took off in the 26th century, and it is not uncommon to see independant, free-willed \ - robots on many human stations, particularly in fringe systems where standards are slightly lax and public opinion less relevant \ - to corporate operations. IPCs (Integrated Positronic Chassis) are a loose category of self-willed robots with a humanoid form, \ - generally self-owned after being 'born' into servitude; they are reliable and dedicated workers, albeit more than slightly \ - inhuman in outlook and perspective." - cyborg_noun = null - - preview_icon = 'icons/mob/human_races/species/ipc/preview.dmi' - - unarmed_types = list(/datum/unarmed_attack/punch, /datum/unarmed_attack/kick, /datum/unarmed_attack/stomp) - rarity_value = 2 - strength = STR_HIGH - - min_age = 1 - max_age = 60 - - warning_low_pressure = 50 - hazard_low_pressure = -1 - - cold_level_1 = SYNTH_COLD_LEVEL_1 - cold_level_2 = SYNTH_COLD_LEVEL_2 - cold_level_3 = SYNTH_COLD_LEVEL_3 - - heat_level_1 = SYNTH_HEAT_LEVEL_1 // Gives them about 25 seconds in space before taking damage - heat_level_2 = SYNTH_HEAT_LEVEL_2 - heat_level_3 = SYNTH_HEAT_LEVEL_3 - - body_temperature = null - passive_temp_gain = 5 // This should cause IPCs to stabilize at ~80 C in a 20 C environment. - - species_flags = SPECIES_FLAG_NO_SCAN | SPECIES_FLAG_NO_PAIN | SPECIES_FLAG_NO_POISON - spawn_flags = SPECIES_CAN_JOIN | SPECIES_IS_WHITELISTED | SPECIES_NO_FBP_CONSTRUCTION - appearance_flags = HAS_UNDERWEAR | HAS_EYE_COLOR //IPCs can wear undies too :( - - blood_color = "#1f181f" - flesh_color = "#575757" - - has_organ = list( - BP_POSIBRAIN = /obj/item/organ/internal/posibrain, - BP_EYES = /obj/item/organ/internal/eyes/robot - ) - - heat_discomfort_level = 373.15 - heat_discomfort_strings = list( - "Your CPU temperature probes warn you that you are approaching critical heat levels!" - ) - genders = list(NEUTER) - - available_cultural_info = list( - TAG_CULTURE = list( - CULTURE_POSITRONICS - ), - TAG_HOMEWORLD = list( - HOME_SYSTEM_ROOT, - HOME_SYSTEM_EARTH, - HOME_SYSTEM_LUNA, - HOME_SYSTEM_MARS, - HOME_SYSTEM_VENUS, - HOME_SYSTEM_CERES, - HOME_SYSTEM_PLUTO, - HOME_SYSTEM_TAU_CETI, - HOME_SYSTEM_OTHER - ), - TAG_FACTION = list( - FACTION_POSITRONICS, - FACTION_SOL_CENTRAL, - FACTION_INDIE_CONFED, - FACTION_NANOTRASEN, - FACTION_FREETRADE, - FACTION_XYNERGY, - FACTION_FLEET, - FACTION_ARMY, - FACTION_SPACECOPS, - FACTION_EXPEDITIONARY, - FACTION_INDIE_CONFED, - FACTION_OTHER - ) - ) - - default_cultural_info = list( - TAG_CULTURE = CULTURE_POSITRONICS, - TAG_HOMEWORLD = HOME_SYSTEM_ROOT, - TAG_FACTION = FACTION_POSITRONICS - ) - - exertion_effect_chance = 10 - exertion_charge_scale = 1 - exertion_emotes_synthetic = list( - /decl/emote/exertion/synthetic, - /decl/emote/exertion/synthetic/creak - ) - -/datum/species/machine/handle_death(var/mob/living/carbon/human/H) - ..() - if(istype(H.wear_mask,/obj/item/clothing/mask/monitor)) - var/obj/item/clothing/mask/monitor/M = H.wear_mask - M.monitor_state_index = "blank" - M.update_icon() - -/datum/species/machine/post_organ_rejuvenate(var/obj/item/organ/org, var/mob/living/carbon/human/H) - var/obj/item/organ/external/E = org - if(istype(E) && !BP_IS_ROBOTIC(E)) - E.robotize("Morpheus") - -/datum/species/machine/get_blood_name() - return "oil" - -/datum/species/machine/disfigure_msg(var/mob/living/carbon/human/H) - var/datum/gender/T = gender_datums[H.get_gender()] - return "[T.His] monitor is completely busted!\n" - -/datum/species/machine/can_float(mob/living/carbon/human/H) - return FALSE diff --git a/code/modules/species/station/monkey.dm b/code/modules/species/station/monkey.dm deleted file mode 100644 index 41d1642986307..0000000000000 --- a/code/modules/species/station/monkey.dm +++ /dev/null @@ -1,183 +0,0 @@ -/datum/species/monkey - name = "Monkey" - name_plural = "Monkeys" - description = "Ook." - codex_description = "Monkeys and other similar creatures tend to be found on science stations and vessels as \ - cheap and disposable test subjects. This, naturally, infuriates animal rights groups." - hidden_from_codex = FALSE - - icobase = 'icons/mob/human_races/species/monkey/monkey_body.dmi' - deform = 'icons/mob/human_races/species/monkey/monkey_body.dmi' - damage_overlays = 'icons/mob/human_races/species/monkey/damage_overlays.dmi' - damage_mask = 'icons/mob/human_races/species/monkey/damage_mask.dmi' - blood_mask = 'icons/mob/human_races/species/monkey/blood_mask.dmi' - - greater_form = SPECIES_HUMAN - mob_size = MOB_SMALL - show_ssd = null - show_coma = null - health_hud_intensity = 1.75 - - gibbed_anim = "gibbed-m" - dusted_anim = "dust-m" - death_message = "lets out a faint chimper as it collapses and stops moving..." - tail = "chimptail" - - unarmed_types = list(/datum/unarmed_attack/bite, /datum/unarmed_attack/claws, /datum/unarmed_attack/punch) - inherent_verbs = list(/mob/living/proc/ventcrawl) - hud_type = /datum/hud_data/monkey - meat_type = /obj/item/reagent_containers/food/snacks/meat/monkey - - rarity_value = 0.1 - total_health = 150 - brute_mod = 1.5 - burn_mod = 1.5 - - spawn_flags = SPECIES_IS_RESTRICTED - - bump_flag = MONKEY - swap_flags = MONKEY|SLIME|SIMPLE_ANIMAL - push_flags = MONKEY|SLIME|SIMPLE_ANIMAL|ALIEN - - pass_flags = PASS_FLAG_TABLE - holder_type = /obj/item/holder - override_limb_types = list(BP_HEAD = /obj/item/organ/external/head/no_eyes) - - descriptors = list( - /datum/mob_descriptor/height = -2, - /datum/mob_descriptor/build = -2 - ) - - force_cultural_info = list( - TAG_CULTURE = CULTURE_MONKEY, - TAG_HOMEWORLD = HOME_SYSTEM_STATELESS, - TAG_FACTION = FACTION_TEST_SUBJECTS - ) - - var/list/no_touchie = list(/obj/item/mirror, - /obj/item/storage/mirror) - -/datum/species/monkey/New() - equip_adjust = list( - slot_l_hand_str = list("[NORTH]" = list("x" = 1, "y" = 3), "[EAST]" = list("x" = -3, "y" = 2), "[SOUTH]" = list("x" = -1, "y" = 3), "[WEST]" = list("x" = 3, "y" = 2)), - slot_r_hand_str = list("[NORTH]" = list("x" = -1, "y" = 3), "[EAST]" = list("x" = 3, "y" = 2), "[SOUTH]" = list("x" = 1, "y" = 3), "[WEST]" = list("x" = -3, "y" = 2)), - slot_shoes_str = list("[NORTH]" = list("x" = 0, "y" = 7), "[EAST]" = list("x" = -1, "y" = 7), "[SOUTH]" = list("x" = 0, "y" = 7), "[WEST]" = list("x" = 1, "y" = 7)), - slot_head_str = list("[NORTH]" = list("x" = 0, "y" = 0), "[EAST]" = list("x" = -2, "y" = 0), "[SOUTH]" = list("x" = 0, "y" = 0), "[WEST]" = list("x" = 2, "y" = 0)), - slot_wear_mask_str = list("[NORTH]" = list("x" = 0, "y" = 0), "[EAST]" = list("x" = -1, "y" = 0), "[SOUTH]" = list("x" = 0, "y" = 0), "[WEST]" = list("x" = 1, "y" = 0)) - ) - ..() - -/datum/species/monkey/handle_npc(var/mob/living/carbon/human/H) - if(H.stat != CONSCIOUS) - return - if(prob(33) && isturf(H.loc) && !H.pulledby) //won't move if being pulled - var/dir = pick(GLOB.cardinal) - var/turf/T = get_step(get_turf(H), dir) - if(T && (T.pathweight < INFINITY)) - H.SelfMove(dir) - - var/obj/held = H.get_active_hand() - if(held && prob(1)) - var/turf/T = get_random_turf_in_range(H, 7, 2) - if(T) - if(istype(held, /obj/item/gun) && prob(80)) - var/obj/item/gun/G = held - G.Fire(T, H) - else - H.throw_item(T) - else - H.unequip_item() - if(!held && !H.restrained() && prob(5)) - var/list/touchables = list() - for(var/obj/O in range(1,get_turf(H))) - if(O.simulated && O.Adjacent(H) && !is_type_in_list(O, no_touchie)) - touchables += O - if(touchables.len) - var/obj/touchy = pick(touchables) - touchy.attack_hand(H) - - if(prob(1)) - H.emote(pick("scratch","jump","roll","tail")) - - if(H.get_shock() && H.shock_stage < 40 && prob(3)) - H.custom_emote("chimpers pitifully") - - if(H.shock_stage > 10 && prob(3)) - H.emote(pick("cry","whimper")) - - if(H.shock_stage >= 40 && prob(3)) - H.emote("scream") - - if(!H.restrained() && H.lying && H.shock_stage >= 60 && prob(3)) - H.custom_emote("thrashes in agony") - -/datum/species/monkey/handle_post_spawn(var/mob/living/carbon/human/H) - ..() - H.item_state = lowertext(name) - -/datum/species/monkey/alien - name = "Farwa" - name_plural = "Farwa" - health_hud_intensity = 2 - - icobase = 'icons/mob/human_races/species/monkey/farwa_body.dmi' - deform = 'icons/mob/human_races/species/monkey/farwa_body.dmi' - - flesh_color = "#afa59e" - base_color = "#333333" - tail = "farwatail" - force_cultural_info = list( - TAG_CULTURE = CULTURE_FARWA, - TAG_HOMEWORLD = HOME_SYSTEM_STATELESS, - TAG_FACTION = FACTION_TEST_SUBJECTS - ) - -/datum/species/monkey/skrell - name = "Neaera" - name_plural = "Neaera" - health_hud_intensity = 1.75 - - icobase = 'icons/mob/human_races/species/monkey/neaera_body.dmi' - deform = 'icons/mob/human_races/species/monkey/neaera_body.dmi' - - greater_form = SPECIES_SKRELL - flesh_color = "#8cd7a3" - blood_color = "#1d2cbf" - reagent_tag = IS_SKRELL - tail = null - force_cultural_info = list( - TAG_CULTURE = CULTURE_NEARA, - TAG_HOMEWORLD = HOME_SYSTEM_STATELESS, - TAG_FACTION = FACTION_TEST_SUBJECTS - ) - - -/datum/species/monkey/unathi - name = "Stok" - name_plural = "Stok" - health_hud_intensity = 1.5 - - icobase = 'icons/mob/human_races/species/monkey/stok_body.dmi' - deform = 'icons/mob/human_races/species/monkey/stok_body.dmi' - - tail = "stoktail" - greater_form = SPECIES_UNATHI - flesh_color = "#34af10" - base_color = "#066000" - reagent_tag = IS_UNATHI - force_cultural_info = list( - TAG_CULTURE = CULTURE_STOK, - TAG_HOMEWORLD = HOME_SYSTEM_STATELESS, - TAG_FACTION = FACTION_TEST_SUBJECTS - ) - -/datum/species/monkey/unathi/proc/handle_sugar(mob/living/carbon/human/M, datum/reagent/sugar, efficiency = 1) - var/effective_dose = efficiency * M.chem_doses[sugar.type] - if(effective_dose < 5) - return - M.druggy = max(M.druggy, 10) - M.add_chemical_effect(CE_PULSE, -1) - if(effective_dose > 15 && prob(7)) - M.emote(pick("twitch", "drool")) - if(effective_dose > 20 && prob(10)) - M.SelfMove(pick(GLOB.cardinal)) diff --git a/code/modules/species/station/nabber.dm b/code/modules/species/station/nabber.dm deleted file mode 100644 index 7ec0bceae771e..0000000000000 --- a/code/modules/species/station/nabber.dm +++ /dev/null @@ -1,407 +0,0 @@ -/datum/species/nabber - name = SPECIES_NABBER - name_plural = "giant armoured serpentids" - description = "A species of large invertebrates who, after being discovered by a \ - research company, were taught how to live and work with humans. Standing \ - upwards of nine feet tall, these people have a tendency to terrify \ - those who have not met them before and are rarely trusted by the \ - average person. Even so, they do their jobs well and are thriving in this \ - new environment." - hidden_from_codex = FALSE - silent_steps = TRUE - - antaghud_offset_y = 8 - - assisted_langs = list(LANGUAGE_GUTTER, LANGUAGE_UNATHI_SINTA, LANGUAGE_SKRELLIAN, LANGUAGE_HUMAN_EURO, LANGUAGE_EAL, LANGUAGE_HUMAN_RUSSIAN) - min_age = 8 - max_age = 40 - - skin_material = MATERIAL_SKIN_CHITIN - bone_material = null - speech_sounds = list('sound/voice/bug.ogg') - speech_chance = 2 - - warning_low_pressure = 50 - hazard_low_pressure = -1 - - body_temperature = null - - blood_color = "#525252" - flesh_color = "#525252" - blood_oxy = 0 - - reagent_tag = IS_NABBER - - icon_template = 'icons/mob/human_races/species/template_tall.dmi' - icobase = 'icons/mob/human_races/species/nabber/body.dmi' - deform = 'icons/mob/human_races/species/nabber/body.dmi' - preview_icon = 'icons/mob/human_races/species/nabber/preview.dmi' - blood_mask = 'icons/mob/human_races/species/nabber/blood_mask.dmi' - - limb_blend = ICON_MULTIPLY - - darksight_range = 8 - darksight_tint = DARKTINT_GOOD - slowdown = -0.5 - rarity_value = 4 - hud_type = /datum/hud_data/nabber - - total_health = 200 - brute_mod = 0.9 - burn_mod = 1.35 - natural_armour_values = list( - melee = ARMOR_MELEE_KNIVES, - bullet = ARMOR_BALLISTIC_MINOR, - bomb = ARMOR_BOMB_PADDED, - bio = ARMOR_BIO_SHIELDED, - rad = 0.5*ARMOR_RAD_MINOR - ) - - gluttonous = GLUT_SMALLER - mob_size = MOB_LARGE - strength = STR_HIGH - breath_pressure = 25 - blood_volume = 840 - spawns_with_stack = 0 - - heat_level_1 = 410 //Default 360 - Higher is better - heat_level_2 = 440 //Default 400 - heat_level_3 = 800 //Default 1000 - - species_flags = SPECIES_FLAG_NO_SLIP | SPECIES_FLAG_NO_BLOCK | SPECIES_FLAG_NO_MINOR_CUT | SPECIES_FLAG_NEED_DIRECT_ABSORB - appearance_flags = HAS_SKIN_COLOR | HAS_EYE_COLOR | HAS_SKIN_TONE_NORMAL | HAS_BASE_SKIN_COLOURS - spawn_flags = SPECIES_CAN_JOIN | SPECIES_IS_WHITELISTED | SPECIES_NO_FBP_CONSTRUCTION | SPECIES_NO_FBP_CHARGEN - - bump_flag = HEAVY - push_flags = ALLMOBS - swap_flags = ALLMOBS - - breathing_organ = BP_TRACH - - move_trail = /obj/effect/decal/cleanable/blood/tracks/snake - - has_organ = list( // which required-organ checks are conducted. - BP_BRAIN = /obj/item/organ/internal/brain/insectoid/nabber, - BP_EYES = /obj/item/organ/internal/eyes/insectoid/nabber, - BP_TRACH = /obj/item/organ/internal/lungs/insectoid/nabber, - BP_LIVER = /obj/item/organ/internal/liver/insectoid/nabber, - BP_HEART = /obj/item/organ/internal/heart/open, - BP_STOMACH = /obj/item/organ/internal/stomach, - BP_PHORON = /obj/item/organ/internal/phoron, - BP_ACETONE = /obj/item/organ/internal/acetone, - BP_VOICE = /obj/item/organ/internal/voicebox/nabber - ) - - has_limbs = list( - BP_CHEST = list("path" = /obj/item/organ/external/chest/insectoid/nabber), - BP_GROIN = list("path" = /obj/item/organ/external/groin/insectoid/nabber), - BP_HEAD = list("path" = /obj/item/organ/external/head/insectoid/nabber), - BP_L_ARM = list("path" = /obj/item/organ/external/arm/insectoid), - BP_L_HAND = list("path" = /obj/item/organ/external/hand/insectoid), - BP_R_ARM = list("path" = /obj/item/organ/external/arm/right/insectoid), - BP_R_HAND = list("path" = /obj/item/organ/external/hand/right/insectoid), - BP_R_LEG = list("path" = /obj/item/organ/external/leg/right/insectoid), - BP_L_LEG = list("path" = /obj/item/organ/external/leg/insectoid), - BP_L_FOOT = list("path" = /obj/item/organ/external/foot/insectoid), - BP_R_FOOT = list("path" = /obj/item/organ/external/foot/right/insectoid) - ) - - base_skin_colours = list( - "Grey" = "", - "Green" = "_green" - ) - - unarmed_types = list(/datum/unarmed_attack/nabber) - - descriptors = list( - /datum/mob_descriptor/height = 3, - /datum/mob_descriptor/body_length = 0 - ) - - available_cultural_info = list( - TAG_CULTURE = list( - CULTURE_NABBER_CMINUS, - CULTURE_NABBER_C, - CULTURE_NABBER_CPLUS, - CULTURE_NABBER_BMINUS, - CULTURE_NABBER_B, - CULTURE_NABBER_BPLUS, - CULTURE_NABBER_AMINUS, - CULTURE_NABBER_A, - CULTURE_NABBER_APLUS - ), - TAG_HOMEWORLD = list( - HOME_SYSTEM_SERPENTIDS - ), - TAG_FACTION = list( - FACTION_XYNERGY - ), - TAG_RELIGION = list( - RELIGION_OTHER - ) - ) - pain_emotes_with_pain_level = list( - list(/decl/emote/audible/bug_hiss) = 40 - ) - - exertion_effect_chance = 10 - exertion_hydration_scale = 1 - exertion_reagent_scale = 5 - exertion_reagent_path = /datum/reagent/lactate - exertion_emotes_biological = list( - /decl/emote/exertion/biological, - /decl/emote/exertion/biological/breath, - /decl/emote/exertion/biological/pant - ) - -/datum/species/nabber/New() - equip_adjust = list( - slot_head_str = list("[NORTH]" = list("x" = 0, "y" = 7), "[EAST]" = list("x" = 0, "y" = 8), "[SOUTH]" = list("x" = 0, "y" = 8), "[WEST]" = list("x" = 0, "y" = 8)), - slot_back_str = list("[NORTH]" = list("x" = 0, "y" = 7), "[EAST]" = list("x" = 0, "y" = 8), "[SOUTH]" = list("x" = 0, "y" = 8), "[WEST]" = list("x" = 0, "y" = 8)), - slot_belt_str = list("[NORTH]" = list("x" = 0, "y" = 0), "[EAST]" = list("x" = 8, "y" = 0), "[SOUTH]" = list("x" = 0, "y" = 0), "[WEST]" = list("x" = -8, "y" = 0)), - slot_glasses_str = list("[NORTH]" = list("x" = 0, "y" = 10), "[EAST]" = list("x" = 0, "y" = 11), "[SOUTH]" = list("x" = 0, "y" = 11), "[WEST]" = list("x" = 0, "y" = 11)) - ) - ..() - -/datum/species/nabber/get_blood_name() - return "haemolymph" - -/datum/species/nabber/can_overcome_gravity(var/mob/living/carbon/human/H) - var/datum/gas_mixture/mixture = H.loc.return_air() - - if(mixture) - var/pressure = mixture.return_pressure() - if(pressure > 50) - var/turf/below = GetBelow(H) - var/turf/T = H.loc - if(!T.CanZPass(H, DOWN) || !below.CanZPass(H, DOWN)) - return TRUE - - return FALSE - -/datum/species/nabber/handle_environment_special(mob/living/carbon/human/H) - if(!H.on_fire && H.fire_stacks < 2) - H.fire_stacks += 0.2 - return - -// Nabbers will only fall when there isn't enough air pressure for them to keep themselves aloft. -/datum/species/nabber/can_fall(var/mob/living/carbon/human/H) - var/datum/gas_mixture/mixture = H.loc.return_air() - - //nabbers should not be trying to break their fall on stairs. - var/turf/T = GetBelow(H.loc) - for(var/obj/O in T) - if(istype(O, /obj/structure/stairs)) - return TRUE - if(mixture) - var/pressure = mixture.return_pressure() - if(pressure > 80) - return FALSE - - return TRUE - -// Even when nabbers do fall, if there's enough air pressure they won't hurt themselves. -/datum/species/nabber/handle_fall_special(var/mob/living/carbon/human/H, var/turf/landing) - - var/datum/gas_mixture/mixture = H.loc.return_air() - - var/turf/T = GetBelow(H.loc) - - //Nabbers should not be trying to break their fall on stairs. - for(var/obj/O in T) - if(istype(O, /obj/structure/stairs)) - return FALSE - - if(mixture) - var/pressure = mixture.return_pressure() - if(pressure > 50) - if(istype(landing, /turf/simulated/open)) - H.visible_message("\The [H] descends from the deck above through \the [landing]!", "Your wings slow your descent.") - else - H.visible_message("\The [H] buzzes down from \the [landing], wings slowing their descent!", "You land on \the [landing], folding your wings.") - - return TRUE - - return FALSE - - -/datum/species/nabber/can_shred(var/mob/living/carbon/human/H, var/ignore_intent, var/ignore_antag) - if(!H.handcuffed || H.buckled) - return ..(H, ignore_intent, TRUE) - else - return 0 - -/datum/species/nabber/handle_movement_delay_special(var/mob/living/carbon/human/H) - var/tally = 0 - - H.remove_cloaking_source(src) - - var/obj/item/organ/internal/B = H.internal_organs_by_name[BP_BRAIN] - if(istype(B,/obj/item/organ/internal/brain/insectoid/nabber)) - var/obj/item/organ/internal/brain/insectoid/nabber/N = B - - tally += N.lowblood_tally * 2 - return tally - -/obj/item/grab/nab/special - type_name = GRAB_NAB_SPECIAL - start_grab_name = NAB_AGGRESSIVE - -/obj/item/grab/nab/special/init() - if(!(. = ..())) - return - affecting.apply_damage(15, DAMAGE_BRUTE, BP_CHEST, DAMAGE_FLAG_SHARP, "organic punctures") - affecting.visible_message("[assailant]'s spikes dig in painfully!") - affecting.Stun(10) - -/datum/species/nabber/update_skin(var/mob/living/carbon/human/H) - - if(H.stat) - H.skin_state = SKIN_NORMAL - - switch(H.skin_state) - if(SKIN_NORMAL) - return - if(SKIN_THREAT) - - var/image_key = "[H.species.get_race_key(src)]" - - for(var/organ_tag in H.species.has_limbs) - var/obj/item/organ/external/part = H.organs_by_name[organ_tag] - if(isnull(part) || part.is_stump()) - image_key += "0" - continue - if(part) - image_key += "[part.species.get_race_key(part.owner)]" - image_key += "[part.dna.GetUIState(DNA_UI_GENDER)]" - if(BP_IS_ROBOTIC(part)) - image_key += "2[part.model ? "-[part.model]": ""]" - else if(part.status & ORGAN_DEAD) - image_key += "3" - else - image_key += "1" - - var/image/threat_image = skin_overlays[image_key] - if(!threat_image) - var/icon/base_icon = icon(H.stand_icon) - var/icon/I = new('icons/mob/human_races/species/nabber/threat.dmi', "threat") - base_icon.Blend(COLOR_BLACK, ICON_MULTIPLY) - base_icon.Blend(I, ICON_ADD) - threat_image = image(base_icon) - skin_overlays[image_key] = threat_image - - return(threat_image) - return - -/datum/species/nabber/disarm_attackhand(var/mob/living/carbon/human/attacker, var/mob/living/carbon/human/target) - if(attacker.pulling_punches || target.lying || attacker == target) - return ..(attacker, target) - if(world.time < attacker.last_attack + 20) - to_chat(attacker, "You can't attack again so soon.") - return 0 - attacker.last_attack = world.time - var/turf/T = get_step(get_turf(target), get_dir(get_turf(attacker), get_turf(target))) - playsound(target.loc, 'sound/weapons/pushhiss.ogg', 50, 1, -1) - if(!T.density) - step(target, get_dir(get_turf(attacker), get_turf(target))) - target.visible_message("[pick("[target] was sent flying backward!", "[target] staggers back from the impact!")]") - else - target.turf_collision(T, target.throw_speed / 2) - if(prob(50)) - target.set_dir(GLOB.reverse_dir[target.dir]) - -/datum/species/nabber/get_additional_examine_text(var/mob/living/carbon/human/H) - var/datum/gender/T = gender_datums[H.get_gender()] - if(H.pulling_punches) - return "\n[T.His] manipulation arms are out and [T.he] looks ready to use complex items." - else - return "\n[T.His] deadly upper arms are raised and [T.he] looks ready to attack!" - -/datum/species/nabber/handle_post_spawn(var/mob/living/carbon/human/H) - ..() - return H.pulling_punches = TRUE - -/datum/species/nabber/has_fine_manipulation(var/mob/living/carbon/human/H) - return (..() && (H && H.pulling_punches)) - -/datum/species/nabber/attempt_grab(var/mob/living/carbon/human/grabber, var/mob/living/target) - if(grabber.pulling_punches) - return ..() - if(grabber == target) - return ..() - - grabber.unEquip(grabber.l_hand) - grabber.unEquip(grabber.r_hand) - to_chat(grabber, "You drop everything as you spring out to nab \the [target]!.") - playsound(grabber.loc, 'sound/weapons/pierce.ogg', 25, 1, -1) - - if(!grabber.is_cloaked()) - return ..(grabber, target, GRAB_NAB) - - if(grabber.last_special > world.time) - to_chat(grabber, "It is too soon to make another nab attempt.") - return - - grabber.last_special = world.time + 50 - - grabber.remove_cloaking_source(src) - if(prob(90) && grabber.make_grab(grabber, target, GRAB_NAB_SPECIAL)) - target.Weaken(rand(1,3)) - target.LAssailant = grabber - grabber.visible_message("\The [grabber] suddenly lunges out and grabs \the [target]!") - grabber.do_attack_animation(target) - playsound(grabber.loc, 'sound/weapons/thudswoosh.ogg', 50, 1, -1) - return 1 - else - grabber.visible_message("\The [grabber] suddenly lunges out, almost grabbing \the [target]!") - -/datum/species/nabber/toggle_stance(var/mob/living/carbon/human/H) - if(H.incapacitated()) - return FALSE - var/datum/gender/T = gender_datums[H.get_gender()] - to_chat(H, "You begin to adjust the fluids in your arms, dropping everything and getting ready to swap which set you're using.") - var/hidden = H.is_cloaked() - if(!hidden) H.visible_message("\The [H] shifts [T.his] arms.") - H.unEquip(H.l_hand) - H.unEquip(H.r_hand) - if(do_after(H, 3 SECONDS, do_flags = DO_DEFAULT | DO_USER_UNIQUE_ACT)) - arm_swap(H) - else - to_chat(H, "You stop adjusting your arms and don't switch between them.") - return TRUE - -/datum/species/nabber/proc/arm_swap(var/mob/living/carbon/human/H, var/forced) - H.unEquip(H.l_hand) - H.unEquip(H.r_hand) - var/hidden = H.is_cloaked() - var/datum/gender/T = gender_datums[H.get_gender()] - H.pulling_punches = !H.pulling_punches - if(H.pulling_punches) - H.current_grab_type = all_grabobjects[GRAB_NORMAL] - if(forced) - to_chat(H, "You can't keep your hunting arms prepared and they drop, forcing you to use your manipulation arms.") - if(!hidden) - H.visible_message("[H] falters, [T.his] hunting arms failing.") - else - to_chat(H, "You relax your hunting arms, lowering the pressure and folding them tight to your thorax. \ - You reach out with your manipulation arms, ready to use complex items.") - if(!hidden) - H.visible_message("[H] seems to relax as [T.he] folds [T.his] massive curved arms to [T.his] thorax and reaches out \ - with [T.his] small handlike limbs.") - else - H.current_grab_type = all_grabobjects[GRAB_NAB] - to_chat(H, "You pull in your manipulation arms, dropping any items and unfolding your massive hunting arms in preparation of grabbing prey.") - if(!hidden) - H.visible_message("[H] tenses as [T.he] brings [T.his] smaller arms in close to [T.his] body. [T.His] two massive spiked arms reach \ - out. [T.He] looks ready to attack.") - -/datum/species/nabber/check_background(var/datum/job/job, var/datum/preferences/prefs) - var/decl/cultural_info/culture/nabber/grade = SSculture.get_culture(prefs.cultural_info[TAG_CULTURE]) - . = istype(grade) ? (job.type in grade.valid_jobs) : ..() - -/datum/species/nabber/skills_from_age(age) //Converts an age into a skill point allocation modifier. Can be used to give skill point bonuses/penalities not depending on job. - switch(age) - if(0 to 18) . = 8 - if(19 to 27) . = 2 - if(28 to 40) . = -2 - else . = -4 diff --git a/code/modules/species/station/prometheans.dm b/code/modules/species/station/prometheans.dm deleted file mode 100644 index 2aada2c41eaad..0000000000000 --- a/code/modules/species/station/prometheans.dm +++ /dev/null @@ -1,158 +0,0 @@ -var/global/datum/species/shapeshifter/promethean/prometheans - -// Species definition follows. -/datum/species/shapeshifter/promethean - - name = SPECIES_PROMETHEAN - name_plural = "Prometheans" - description = "What has Science done?" - show_ssd = "totally quiescent" - death_message = "rapidly loses cohesion, splattering across the ground..." - knockout_message = "collapses inwards, forming a disordered puddle of goo." - remains_type = /obj/effect/decal/cleanable/ash - - meat_type = null - bone_material = null - skin_material = null - - blood_color = "#05ff9b" - flesh_color = "#05fffb" - - hunger_factor = DEFAULT_HUNGER_FACTOR //todo - reagent_tag = IS_SLIME - bump_flag = SLIME - swap_flags = MONKEY|SLIME|SIMPLE_ANIMAL - push_flags = MONKEY|SLIME|SIMPLE_ANIMAL - species_flags = SPECIES_FLAG_NO_SCAN | SPECIES_FLAG_NO_SLIP | SPECIES_FLAG_NO_MINOR_CUT - appearance_flags = HAS_SKIN_COLOR | HAS_EYE_COLOR | HAS_HAIR_COLOR | RADIATION_GLOWS - spawn_flags = SPECIES_IS_RESTRICTED - - breath_type = null - poison_types = null - - gluttonous = GLUT_TINY | GLUT_SMALLER | GLUT_ITEM_ANYTHING | GLUT_PROJECTILE_VOMIT - blood_volume = 600 - min_age = 1 - max_age = 5 - brute_mod = 0.5 - burn_mod = 2 - oxy_mod = 0 - total_health = 240 - siemens_coefficient = -1 - rarity_value = 5 - limbs_are_nonsolid = TRUE - - unarmed_types = list(/datum/unarmed_attack/slime_glomp) - has_organ = list(BP_BRAIN = /obj/item/organ/internal/brain/slime) // Slime core. - has_limbs = list( - BP_CHEST = list("path" = /obj/item/organ/external/chest/unbreakable/slime), - BP_GROIN = list("path" = /obj/item/organ/external/groin/unbreakable/slime), - BP_HEAD = list("path" = /obj/item/organ/external/head/unbreakable/slime), - BP_L_ARM = list("path" = /obj/item/organ/external/arm/unbreakable/slime), - BP_R_ARM = list("path" = /obj/item/organ/external/arm/right/unbreakable/slime), - BP_L_LEG = list("path" = /obj/item/organ/external/leg/unbreakable/slime), - BP_R_LEG = list("path" = /obj/item/organ/external/leg/right/unbreakable/slime), - BP_L_HAND = list("path" = /obj/item/organ/external/hand/unbreakable/slime), - BP_R_HAND = list("path" = /obj/item/organ/external/hand/right/unbreakable/slime), - BP_L_FOOT = list("path" = /obj/item/organ/external/foot/unbreakable/slime), - BP_R_FOOT = list("path" = /obj/item/organ/external/foot/right/unbreakable/slime) - ) - heat_discomfort_strings = list("You feel too warm.") - cold_discomfort_strings = list("You feel too cool.") - - inherent_verbs = list( - /mob/living/carbon/human/proc/shapeshifter_select_shape, - /mob/living/carbon/human/proc/shapeshifter_select_colour, - /mob/living/carbon/human/proc/shapeshifter_select_hair, - /mob/living/carbon/human/proc/shapeshifter_select_gender - ) - - valid_transform_species = list(SPECIES_HUMAN, SPECIES_UNATHI, SPECIES_SKRELL, SPECIES_DIONA, SPECIES_MONKEY) - monochromatic = 1 - - var/heal_rate = 5 // Temp. Regen per tick. - -/datum/species/shapeshifter/promethean/New() - ..() - prometheans = src - -/datum/species/shapeshifter/promethean/hug(var/mob/living/carbon/human/H,var/mob/living/target) - var/datum/gender/G = gender_datums[target.gender] - H.visible_message("\The [H] glomps [target] to make [G.him] feel better!", \ - "You glomps [target] to make [G.him] feel better!") - H.apply_stored_shock_to(target) - -/datum/species/shapeshifter/promethean/handle_death(var/mob/living/carbon/human/H) - addtimer(CALLBACK(H, /mob/proc/gib),0) - -/datum/species/shapeshifter/promethean/handle_environment_special(var/mob/living/carbon/human/H) - - var/turf/T = H.loc - if(istype(T)) - var/obj/effect/decal/cleanable/C = locate() in T - if(C) - if(H.nutrition < 300) - H.adjust_nutrition(rand(10,20)) - qdel(C) - - // We need a handle_life() proc for this stuff. - - // Regenerate limbs and heal damage if we have any. Copied from Bay xenos code. - // Theoretically the only internal organ a slime will have - // is the slime core. but we might as well be thorough. - for(var/obj/item/organ/I in H.internal_organs) - if(I.damage > 0) - I.damage = max(I.damage - heal_rate, 0) - if (prob(5)) - to_chat(H, SPAN_NOTICE("You feel a soothing sensation within your [I.name]...")) - return 1 - - // Replace completely missing limbs. - for(var/limb_type in has_limbs) - var/obj/item/organ/external/E = H.organs_by_name[limb_type] - if(E && !E.is_usable() && !(E.limb_flags & ORGAN_FLAG_HEALS_OVERKILL)) - E.removed() - if(!QDELETED(E)) - QDEL_NULL(E) - if(!E) - var/list/organ_data = has_limbs[limb_type] - var/limb_path = organ_data["path"] - var/obj/item/organ/O = new limb_path(H) - organ_data["descriptor"] = O.name - to_chat(H, SPAN_NOTICE("You feel a slithering sensation as your [O.name] reforms.")) - H.update_body() - return 1 - - // Heal remaining damage. - if (H.getBruteLoss() || H.getFireLoss() || H.getOxyLoss() || H.getToxLoss()) - H.adjustBruteLoss(-heal_rate) - H.adjustFireLoss(-heal_rate) - H.adjustOxyLoss(-heal_rate) - H.adjustToxLoss(-heal_rate) - return 1 - -/datum/species/shapeshifter/promethean/get_blood_colour(var/mob/living/carbon/human/H) - if (H) - return H.skin_color - return ..() - -/datum/species/shapeshifter/promethean/get_flesh_colour(var/mob/living/carbon/human/H) - if (H) - return H.skin_color - return ..() - -/datum/species/shapeshifter/promethean/get_additional_examine_text(var/mob/living/carbon/human/H) - - if(!stored_shock_by_ref["\ref[H]"]) - return - var/datum/gender/G = gender_datums[H.gender] - - switch(stored_shock_by_ref["\ref[H]"]) - if(1 to 10) - return "[G.He] [G.is] flickering gently with a little electrical activity." - if(11 to 20) - return "[G.He] [G.is] glowing gently with moderate levels of electrical activity.\n" - if(21 to 35) - return "[G.He] [G.is] glowing brightly with high levels of electrical activity." - if(35 to INFINITY) - return "[G.He] [G.is] radiating massive levels of electrical activity!" diff --git a/code/modules/species/station/station.dm b/code/modules/species/station/station.dm deleted file mode 100644 index 97e9f2dd1b2c4..0000000000000 --- a/code/modules/species/station/station.dm +++ /dev/null @@ -1,457 +0,0 @@ -/datum/species/human - name = SPECIES_HUMAN - name_plural = "Humans" - primitive_form = "Monkey" - unarmed_types = list(/datum/unarmed_attack/stomp, /datum/unarmed_attack/kick, /datum/unarmed_attack/punch, /datum/unarmed_attack/bite) - description = "Humanity originated in the Sol system, and over the last five centuries has spread \ - colonies across a wide swathe of space. They hold a wide range of forms and creeds.

                  \ - While the central Sol government maintains control of its far-flung people, powerful corporate \ - interests, rampant cyber and bio-augmentation and secretive factions make life on most human \ - worlds tumultous at best." - assisted_langs = list(LANGUAGE_NABBER) - min_age = 18 - max_age = 100 - hidden_from_codex = FALSE - bandages_icon = 'icons/mob/bandage.dmi' - - spawn_flags = SPECIES_CAN_JOIN - appearance_flags = HAS_HAIR_COLOR | HAS_SKIN_TONE_NORMAL | HAS_LIPS | HAS_UNDERWEAR | HAS_EYE_COLOR - - sexybits_location = BP_GROIN - - inherent_verbs = list(/mob/living/carbon/human/proc/tie_hair) - - available_cultural_info = list( - TAG_CULTURE = list( - CULTURE_HUMAN_MARTIAN, - CULTURE_HUMAN_MARSTUN, - CULTURE_HUMAN_LUNAPOOR, - CULTURE_HUMAN_LUNARICH, - CULTURE_HUMAN_VENUSIAN, - CULTURE_HUMAN_VENUSLOW, - CULTURE_HUMAN_BELTER, - CULTURE_HUMAN_PLUTO, - CULTURE_HUMAN_EARTH, - CULTURE_HUMAN_CETI, - CULTURE_HUMAN_SPACER, - CULTURE_HUMAN_SPAFRO, - CULTURE_HUMAN_CONFED, - CULTURE_HUMAN_GAIAN, - CULTURE_HUMAN_OTHER - ) - ) - - exertion_effect_chance = 10 - exertion_hydration_scale = 1 - exertion_charge_scale = 1 - exertion_reagent_scale = 5 - exertion_reagent_path = /datum/reagent/lactate - exertion_emotes_biological = list( - /decl/emote/exertion/biological, - /decl/emote/exertion/biological/breath, - /decl/emote/exertion/biological/pant - ) - exertion_emotes_synthetic = list( - /decl/emote/exertion/synthetic, - /decl/emote/exertion/synthetic/creak - ) - -/datum/species/human/get_bodytype(var/mob/living/carbon/human/H) - return SPECIES_HUMAN - -/datum/species/human/handle_npc(var/mob/living/carbon/human/H) - if(H.stat != CONSCIOUS) - return - - if(H.get_shock() && H.shock_stage < 40 && prob(3)) - H.agony_moan() - - if(H.shock_stage > 10 && prob(3)) - H.emote(pick("cry","whimper")) - - if(H.shock_stage >= 40 && prob(3)) - H.emote("scream") - - if(!H.restrained() && H.lying && H.shock_stage >= 60 && prob(3)) - H.custom_emote("thrashes in agony") - - if(!H.restrained() && H.shock_stage < 40 && prob(3)) - var/maxdam = 0 - var/obj/item/organ/external/damaged_organ = null - for(var/obj/item/organ/external/E in H.organs) - if(!E.can_feel_pain()) continue - var/dam = E.get_damage() - // make the choice of the organ depend on damage, - // but also sometimes use one of the less damaged ones - if(dam > maxdam && (maxdam == 0 || prob(50)) ) - damaged_organ = E - maxdam = dam - var/datum/gender/T = gender_datums[H.get_gender()] - if(damaged_organ) - if(damaged_organ.status & ORGAN_BLEEDING) - H.custom_emote("clutches [T.his] [damaged_organ.name], trying to stop the blood.") - else if(damaged_organ.status & ORGAN_BROKEN) - H.custom_emote("holds [T.his] [damaged_organ.name] carefully.") - else if(damaged_organ.burn_dam > damaged_organ.brute_dam && damaged_organ.organ_tag != BP_HEAD) - H.custom_emote("blows on [T.his] [damaged_organ.name] carefully.") - else - H.custom_emote("rubs [T.his] [damaged_organ.name] carefully.") - - for(var/obj/item/organ/I in H.internal_organs) - if((I.status & ORGAN_DEAD) || BP_IS_ROBOTIC(I)) continue - if(I.damage > 2) if(prob(2)) - var/obj/item/organ/external/parent = H.get_organ(I.parent_organ) - H.custom_emote("clutches [T.his] [parent.name]!") - -/datum/species/human/get_ssd(var/mob/living/carbon/human/H) - if (H.ai_holder) - return - - if(H.stat == CONSCIOUS) - return "staring blankly, not reacting to your presence" - return ..() - -/datum/species/skrell - name = SPECIES_SKRELL - name_plural = SPECIES_SKRELL - icobase = 'icons/mob/human_races/species/skrell/body.dmi' - deform = 'icons/mob/human_races/species/skrell/deformed_body.dmi' - preview_icon = 'icons/mob/human_races/species/skrell/preview.dmi' - bandages_icon = 'icons/mob/bandage.dmi' - primitive_form = "Neaera" - unarmed_types = list(/datum/unarmed_attack/stomp, /datum/unarmed_attack/kick, /datum/unarmed_attack/punch, /datum/unarmed_attack/bite) - description = "An amphibious species, Skrell come from the star system known as Qerr'Vallis, which translates to 'Star of \ - the royals' or 'Light of the Crown'.

                  Skrell are a highly advanced and logical race who live under the rule \ - of the Qerr'Katish, a caste within their society which keeps the empire of the Skrell running smoothly. Skrell are \ - herbivores on the whole and tend to be co-operative with the other species of the galaxy, although they rarely reveal \ - the secrets of their empire to their allies." - assisted_langs = list(LANGUAGE_NABBER) - health_hud_intensity = 1.75 - meat_type = /obj/item/reagent_containers/food/snacks/fish/octopus - bone_material = MATERIAL_BONE_CARTILAGE - genders = list(PLURAL) - hidden_from_codex = FALSE - min_age = 19 - max_age = 90 - - burn_mod = 0.9 - oxy_mod = 1.3 - flash_mod = 1.2 - toxins_mod = 0.8 - siemens_coefficient = 1.3 - warning_low_pressure = WARNING_LOW_PRESSURE * 1.4 - hazard_low_pressure = HAZARD_LOW_PRESSURE * 2 - warning_high_pressure = WARNING_HIGH_PRESSURE / 0.8125 - hazard_high_pressure = HAZARD_HIGH_PRESSURE / 0.84615 - water_soothe_amount = 5 - - body_temperature = null // cold-blooded, implemented the same way nabbers do it - - darksight_range = 4 - darksight_tint = DARKTINT_MODERATE - - spawn_flags = SPECIES_CAN_JOIN | SPECIES_IS_WHITELISTED - appearance_flags = HAS_HAIR_COLOR | HAS_LIPS | HAS_UNDERWEAR | HAS_SKIN_COLOR - - flesh_color = "#8cd7a3" - blood_color = "#1d2cbf" - base_color = "#006666" - organs_icon = 'icons/mob/human_races/species/skrell/organs.dmi' - - cold_level_1 = 280 //Default 260 - Lower is better - cold_level_2 = 220 //Default 200 - cold_level_3 = 130 //Default 120 - - heat_level_1 = 420 //Default 360 - Higher is better - heat_level_2 = 480 //Default 400 - heat_level_3 = 1100 //Default 1000 - - cold_discomfort_level = 292 //Higher than perhaps it should be, to avoid big speed reduction at normal room temp - heat_discomfort_level = 368 - - reagent_tag = IS_SKRELL - - descriptors = list( - /datum/mob_descriptor/height = 1, - /datum/mob_descriptor/build = 0, - /datum/mob_descriptor/headtail_length = 0 - ) - - available_cultural_info = list( - TAG_CULTURE = list( - CULTURE_SKRELL_QERR, - CULTURE_SKRELL_MALISH, - CULTURE_SKRELL_KANIN, - CULTURE_SKRELL_TALUM, - CULTURE_SKRELL_RASKINTA - ), - TAG_HOMEWORLD = list( - HOME_SYSTEM_QERRBALAK, - HOME_SYSTEM_TALAMIRA, - HOME_SYSTEM_ROASORA, - HOME_SYSTEM_MITORQI, - HOME_SYSTEM_SKRELLSPACE - ), - TAG_FACTION = list( - FACTION_EXPEDITIONARY, - FACTION_CORPORATE, - FACTION_NANOTRASEN, - FACTION_PCRC, - FACTION_HEPHAESTUS, - FACTION_DAIS, - FACTION_SKRELL_QERRVOAL, - FACTION_SKRELL_QALAOA, - FACTION_SKRELL_YIITALANA, - FACTION_SKRELL_KRRIGLI, - FACTION_SKRELL_QONPRRI, - FACTION_OTHER - ), - TAG_RELIGION = list( - RELIGION_OTHER, - RELIGION_ATHEISM, - RELIGION_DEISM, - RELIGION_AGNOSTICISM - ) - ) - - has_organ = list( - BP_HEART = /obj/item/organ/internal/heart, - BP_STOMACH = /obj/item/organ/internal/stomach, - BP_LUNGS = /obj/item/organ/internal/lungs/gills, - BP_LIVER = /obj/item/organ/internal/liver, - BP_KIDNEYS = /obj/item/organ/internal/kidneys, - BP_BRAIN = /obj/item/organ/internal/brain, - BP_EYES = /obj/item/organ/internal/eyes/skrell - ) - - exertion_effect_chance = 10 - exertion_hydration_scale = 1 - exertion_charge_scale = 1 - exertion_reagent_scale = 5 - exertion_reagent_path = /datum/reagent/lactate - exertion_emotes_biological = list( - /decl/emote/exertion/biological, - /decl/emote/exertion/biological/breath, - /decl/emote/exertion/biological/pant - ) - exertion_emotes_synthetic = list( - /decl/emote/exertion/synthetic, - /decl/emote/exertion/synthetic/creak - ) - - -/datum/species/skrell/proc/handle_protein(mob/living/carbon/human/M, datum/reagent/protein) - var/effective_dose = M.chem_doses[protein.type] * protein.protein_amount - if (effective_dose > 20) - M.adjustToxLoss(clamp((effective_dose - 20) / 4, 2, 10)) - M.vomit(8, 3, rand(1 SECONDS, 5 SECONDS)) - else if (effective_dose > 10) - M.vomit(4, 2, rand(3 SECONDS, 10 SECONDS)) - else - M.vomit(1, 1, rand(5 SECONDS, 15 SECONDS)) - -/datum/species/skrell/get_sex(var/mob/living/carbon/human/H) - return istype(H) && (H.descriptors["headtail length"] == 1 ? MALE : FEMALE) - -/datum/species/skrell/check_background() - return TRUE - -/datum/species/skrell/can_float(mob/living/carbon/human/H) - if(!H.is_physically_disabled()) - if(H.encumbrance() < 2) - return TRUE - return FALSE - -/datum/species/diona - name = SPECIES_DIONA - name_plural = "Dionaea" - icobase = 'icons/mob/human_races/species/diona/body.dmi' - deform = 'icons/mob/human_races/species/diona/deformed_body.dmi' - preview_icon = 'icons/mob/human_races/species/diona/preview.dmi' - hidden_from_codex = FALSE - move_intents = list(/decl/move_intent/walk, /decl/move_intent/creep) - unarmed_types = list(/datum/unarmed_attack/stomp, /datum/unarmed_attack/kick, /datum/unarmed_attack/diona) - //primitive_form = "Nymph" - slowdown = 5 - rarity_value = 3 - hud_type = /datum/hud_data/diona - siemens_coefficient = 0.3 - show_ssd = "completely quiescent" - strength = STR_LOW - assisted_langs = list(LANGUAGE_NABBER) - spawns_with_stack = 0 - health_hud_intensity = 2 - hunger_factor = 3 - thirst_factor = 0.01 - - min_age = 1 - max_age = 300 - - description = "Commonly referred to (erroneously) as 'plant people', the Dionaea are a strange space-dwelling collective \ - species hailing from Epsilon Ursae Minoris. Each 'diona' is a cluster of numerous cat-sized organisms called nymphs; \ - there is no effective upper limit to the number that can fuse in gestalt, and reports exist of the Epsilon Ursae \ - Minoris primary being ringed with a cloud of singing space-station-sized entities.

                  The Dionaea coexist peacefully with \ - all known species, especially the Skrell. Their communal mind makes them slow to react, and they have difficulty understanding \ - even the simplest concepts of other minds. Their alien physiology allows them survive happily off a diet of nothing but light, \ - water and other radiation." - - has_organ = list( - BP_NUTRIENT = /obj/item/organ/internal/diona/nutrients, - BP_STRATA = /obj/item/organ/internal/diona/strata, - BP_RESPONSE = /obj/item/organ/internal/diona/node, - BP_GBLADDER = /obj/item/organ/internal/diona/bladder, - BP_POLYP = /obj/item/organ/internal/diona/polyp, - BP_ANCHOR = /obj/item/organ/internal/diona/ligament - ) - - has_limbs = list( - BP_CHEST = list("path" = /obj/item/organ/external/diona/chest), - BP_GROIN = list("path" = /obj/item/organ/external/diona/groin), - BP_HEAD = list("path" = /obj/item/organ/external/head/diona), - BP_L_ARM = list("path" = /obj/item/organ/external/diona/arm), - BP_R_ARM = list("path" = /obj/item/organ/external/diona/arm/right), - BP_L_LEG = list("path" = /obj/item/organ/external/diona/leg), - BP_R_LEG = list("path" = /obj/item/organ/external/diona/leg/right), - BP_L_HAND = list("path" = /obj/item/organ/external/diona/hand), - BP_R_HAND = list("path" = /obj/item/organ/external/diona/hand/right), - BP_L_FOOT = list("path" = /obj/item/organ/external/diona/foot), - BP_R_FOOT = list("path" = /obj/item/organ/external/diona/foot/right) - ) - - base_auras = list( - /obj/aura/regenerating/human/diona - ) - - inherent_verbs = list( - /mob/living/carbon/human/proc/diona_heal_toggle - ) - - warning_low_pressure = 50 - hazard_low_pressure = -1 - warning_high_pressure = 1500 - hazard_high_pressure = 2000 - - cold_level_1 = -1 - cold_level_2 = -1 - cold_level_3 = -1 - - heat_level_1 = 3000 - heat_level_2 = 4000 - heat_level_3 = 5000 - - body_temperature = T0C + 15 //make the plant people have a bit lower body temperature, why not - - species_flags = SPECIES_FLAG_NO_SCAN | SPECIES_FLAG_IS_PLANT | SPECIES_FLAG_NO_PAIN | SPECIES_FLAG_NO_SLIP - appearance_flags = 0 - spawn_flags = SPECIES_CAN_JOIN | SPECIES_IS_WHITELISTED | SPECIES_NO_FBP_CONSTRUCTION | SPECIES_NO_FBP_CHARGEN - - blood_color = "#004400" - flesh_color = "#907e4a" - - reagent_tag = IS_DIONA - genders = list(PLURAL) - - available_cultural_info = list( - TAG_CULTURE = list(CULTURE_DIONA), - TAG_HOMEWORLD = list(HOME_SYSTEM_DIONAEA), - TAG_FACTION = list(FACTION_OTHER), - TAG_RELIGION = list(RELIGION_OTHER) - ) - -/proc/spawn_diona_nymph(turf/target) - if (!istype(target)) - return - var/mob/living/carbon/alien/diona/nymph = new (target) - var/datum/ghosttrap/trap = get_ghost_trap("living plant") - trap.request_player(nymph, "A diona nymph has split from its gestalt.", 30 SECONDS) - addtimer(CALLBACK(nymph, /mob/living/carbon/alien/diona/proc/check_spawn_death), 30 SECONDS) - -/mob/living/carbon/alien/diona/proc/check_spawn_death() - if (QDELETED(src)) - return - if (!ckey || !client) - death() - -#define DIONA_LIMB_DEATH_COUNT 9 -/datum/species/diona/handle_death_check(var/mob/living/carbon/human/H) - var/lost_limb_count = has_limbs.len - H.organs.len - if(lost_limb_count >= DIONA_LIMB_DEATH_COUNT) - return TRUE - for(var/thing in H.bad_external_organs) - var/obj/item/organ/external/E = thing - if(E && E.is_stump()) - lost_limb_count++ - return (lost_limb_count >= DIONA_LIMB_DEATH_COUNT) -#undef DIONA_LIMB_DEATH_COUNT - -/datum/species/diona/can_understand(var/mob/other) - var/mob/living/carbon/alien/diona/D = other - if(istype(D)) - return 1 - return 0 - -/datum/species/diona/equip_survival_gear(var/mob/living/carbon/human/H) - if(istype(H.get_equipped_item(slot_back), /obj/item/storage/backpack)) - H.equip_to_slot_or_del(new /obj/item/device/flashlight/flare(H.back), slot_in_backpack) - else - H.equip_to_slot_or_del(new /obj/item/device/flashlight/flare(H), slot_r_hand) - -/datum/species/diona/skills_from_age(age) - switch(age) - if(101 to 200) . = 12 // age bracket before this is 46 to 100 . = 8 making this +4 - if(201 to 300) . = 16 // + 8 - else . = ..() - -// Dionaea spawned by hand or by joining will not have any -// nymphs passed to them. This should take care of that. -/datum/species/diona/handle_post_spawn(var/mob/living/carbon/human/H) - H.gender = NEUTER - . = ..() - addtimer(CALLBACK(src, .proc/fill_with_nymphs, H), 0) - -/datum/species/diona/proc/fill_with_nymphs(var/mob/living/carbon/human/H) - - if(!H || H.species.name != name) return - - var/nymph_count = 0 - for(var/mob/living/carbon/alien/diona/nymph in H) - nymph_count++ - if(nymph_count >= 3) return - - while(nymph_count < 3) - new /mob/living/carbon/alien/diona/sterile(H) - nymph_count++ - -/datum/species/diona/handle_death(var/mob/living/carbon/human/H) - - if(H.isSynthetic()) - var/mob/living/carbon/alien/diona/S = new(get_turf(H)) - - if(H.mind) - H.mind.transfer_to(S) - H.visible_message("\The [H] collapses into parts, revealing a solitary diona nymph at the core.") - return - else - split_into_nymphs(H, TRUE) - -/datum/species/diona/get_blood_name() - return "sap" - -/datum/species/diona/handle_environment_special(var/mob/living/carbon/human/H) - if(H.InStasis() || H.stat == DEAD) - return - - if(H.nutrition < 10) - H.take_overall_damage(2,0) - - if(H.hydration < 550 && H.loc) - var/is_in_water = FALSE - if(H.loc.is_flooded(lying_mob = TRUE)) - is_in_water = TRUE - else - for(var/obj/structure/hygiene/shower/shower in H.loc) - if(shower.on) - is_in_water = TRUE - break - if(is_in_water) - H.adjust_hydration(100) diff --git a/code/modules/spells/aoe_turf/aoe_turf.dm b/code/modules/spells/aoe_turf/aoe_turf.dm deleted file mode 100644 index 9f79f694ad849..0000000000000 --- a/code/modules/spells/aoe_turf/aoe_turf.dm +++ /dev/null @@ -1,25 +0,0 @@ -/* -Aoe turf spells target a ring of tiles around the user -This ring has an outer radius (range) and an inner radius (inner_radius) -Aoe turf spells have two useful flags: IGNOREDENSE and IGNORESPACE. These are explained in setup.dm -*/ - -/spell/aoe_turf //affects all turfs in view or range (depends) - spell_flags = IGNOREDENSE - var/inner_radius = -1 //for all your ring spell needs - -/spell/aoe_turf/choose_targets(mob/user = usr) - var/list/targets = list() - - for(var/turf/target in view_or_range(range, holder, selection_type)) - if(!(target in view_or_range(inner_radius, holder, selection_type))) - if(target.density && (spell_flags & IGNOREDENSE)) - continue - if(istype(target, /turf/space) && (spell_flags & IGNORESPACE)) - continue - targets += target - - if(!targets.len) //doesn't waste the spell - return - - return targets \ No newline at end of file diff --git a/code/modules/spells/aoe_turf/blink.dm b/code/modules/spells/aoe_turf/blink.dm deleted file mode 100644 index 3fd742aec2430..0000000000000 --- a/code/modules/spells/aoe_turf/blink.dm +++ /dev/null @@ -1,44 +0,0 @@ -/spell/aoe_turf/blink - name = "Blink" - desc = "This spell randomly teleports you a short distance." - feedback = "BL" - school = "conjuration" - charge_max = 20 - spell_flags = Z2NOCAST | IGNOREDENSE | IGNORESPACE - invocation = "none" - invocation_type = SpI_NONE - range = 7 - inner_radius = 1 - - level_max = list(Sp_TOTAL = 4, Sp_SPEED = 4, Sp_POWER = 4) - cooldown_min = 5 //4 deciseconds reduction per rank - hud_state = "wiz_blink" - cast_sound = 'sound/magic/blink.ogg' - -/spell/aoe_turf/blink/cast(var/list/targets, mob/user) - if(!targets.len) - return - - var/turf/T = pick(targets) - var/turf/starting = get_turf(user) - if(T) - if(user.buckled) - user.buckled = null - user.forceMove(T) - - var/datum/effect/effect/system/smoke_spread/smoke = new /datum/effect/effect/system/smoke_spread() - smoke.set_up(3, 0, starting) - smoke.start() - - smoke = new() - smoke.set_up(3, 0, T) - smoke.start() - - return - -/spell/aoe_turf/blink/empower_spell() - if(!..()) - return 0 - inner_radius += 1 - - return "You've increased the inner range of [src]." \ No newline at end of file diff --git a/code/modules/spells/aoe_turf/charge.dm b/code/modules/spells/aoe_turf/charge.dm deleted file mode 100644 index bb0e56e0cf6ce..0000000000000 --- a/code/modules/spells/aoe_turf/charge.dm +++ /dev/null @@ -1,72 +0,0 @@ -/spell/aoe_turf/charge - name = "Charge" - desc = "This spell can be used to charge up spent magical artifacts, among other things." - - school = "transmutation" - charge_max = 600 - spell_flags = 0 - invocation = "DIRI CEL" - invocation_type = SpI_WHISPER - range = 0 - cooldown_min = 400 //50 deciseconds reduction per rank - - hud_state = "wiz_charge" - cast_sound = 'sound/magic/charge.ogg' - -/spell/aoe_turf/charge/cast(var/list/targets, mob/user) - for(var/turf/T in targets) - depth_cast(T) - -/spell/aoe_turf/charge/proc/depth_cast(var/list/targets) - for(var/atom/A in targets) - if(A.contents.len) - depth_cast(A.contents) - cast_charge(A) - -/spell/aoe_turf/charge/proc/mob_charge(var/mob/living/M) - if(!M.mind) - return - if(M.mind.learned_spells.len != 0) - for(var/spell/S in M.mind.learned_spells) - if(!istype(S, /spell/aoe_turf/charge)) - S.charge_counter = S.charge_max - to_chat(M, "You feel raw magic flowing through you, it feels good!") - else - to_chat(M, "You feel very strange for a moment, but then it passes.") - return M - -/spell/aoe_turf/charge/proc/cast_charge(var/atom/target) - var/atom/charged_item - - if(istype(target, /mob/living)) - charged_item = mob_charge(target) - - if(istype(target, /obj/item/grab)) - var/obj/item/grab/G = target - if(G.affecting) - var/mob/M = G.affecting - charged_item = mob_charge(M) - - if(istype(target, /obj/item/cell)) - var/obj/item/cell/C = target - if(prob(80) && C.maxcharge) - C.maxcharge -= 200 - if(C.maxcharge <= 0) //maxcharge of 0! Madness! - C.maxcharge = 0 - C.charge = C.maxcharge - charged_item = C - - if(!charged_item) - return 0 - else - charged_item.visible_message("[charged_item] suddenly sparks with energy!") - return 1 - - -/spell/aoe_turf/charge/blood - name = "blood charge" - desc = "This spell charges things around it using the lifeforce gained by sacrificed blood." - - charge_type = Sp_HOLDVAR - holder_var_type = "bruteloss" - holder_var_amount = 30 \ No newline at end of file diff --git a/code/modules/spells/aoe_turf/conjure/conjure.dm b/code/modules/spells/aoe_turf/conjure/conjure.dm deleted file mode 100644 index 18439fe7b654b..0000000000000 --- a/code/modules/spells/aoe_turf/conjure/conjure.dm +++ /dev/null @@ -1,74 +0,0 @@ -/* -Conjure spells spawn things (mobs, objs, turfs) in their summon_type -How they spawn stuff is decided by behaviour vars, which are explained below -*/ - -/spell/aoe_turf/conjure - name = "Conjure" - desc = "This spell conjures objs of the specified types in range." - - school = "conjuration" //funny, that - - var/list/summon_type = list() //determines what exactly will be summoned - //should NOT be text, like list(/obj/machinery/bot/ed209) - - range = 0 //default values: only spawn on the player tile - selection_type = "view" - - duration = 0 // 0=permanent, any other time in deciseconds - how long the summoned objects last for - var/summon_amt = 1 //amount of objects summoned - var/summon_exclusive = 0 //spawn one of everything, instead of random things - - var/list/newVars = list() //vars of the summoned objects will be replaced with those where they meet - //should have format of list("emagged" = 1,"name" = "Wizard's Justicebot"), for example - - cast_sound = 'sound/magic/castsummon.ogg' - -/spell/aoe_turf/conjure/cast(list/targets, mob/user) - - for(var/i=1,i <= summon_amt,i++) - if(!targets.len) - break - var/summoned_object_type - if(summon_exclusive) - if(!summon_type.len) - break - summoned_object_type = summon_type[1] - summon_type -= summoned_object_type - else - summoned_object_type = pick(summon_type) - var/turf/spawn_place = pick(targets) - if(spell_flags & IGNOREPREV) - targets -= spawn_place - - var/atom/summoned_object - if(ispath(summoned_object_type,/turf)) - if(istype(get_turf(user),/turf/simulated/shuttle) || istype(spawn_place, /turf/simulated/shuttle)) - to_chat(user, "You can't build things on shuttles!") - continue - spawn_place.ChangeTurf(summoned_object_type) - summoned_object = spawn_place - else - summoned_object = new summoned_object_type(spawn_place) - var/atom/movable/overlay/animation = new /atom/movable/overlay(summoned_object) - animation.SetName("conjure") - animation.set_density(0) - animation.anchored = TRUE - animation.icon = 'icons/effects/effects.dmi' - animation.layer = BASE_HUMAN_LAYER - if(istype(summoned_object,/mob)) //we want them to NOT attack us. - var/mob/M = summoned_object - M.faction = user.faction - for(var/varName in newVars) - if(varName in summoned_object.vars) - summoned_object.vars[varName] = newVars[varName] - - if(duration) - spawn(duration) - if(summoned_object && !istype(summoned_object, /turf)) - qdel(summoned_object) - conjure_animation(animation, spawn_place) - return - -/spell/aoe_turf/conjure/proc/conjure_animation(var/atom/movable/overlay/animation, var/turf/target) - qdel(animation) \ No newline at end of file diff --git a/code/modules/spells/aoe_turf/conjure/construct.dm b/code/modules/spells/aoe_turf/conjure/construct.dm deleted file mode 100644 index 7cbafc56e200f..0000000000000 --- a/code/modules/spells/aoe_turf/conjure/construct.dm +++ /dev/null @@ -1,120 +0,0 @@ -//////////////////////////////Construct Spells///////////////////////// - -/spell/aoe_turf/conjure/construct - name = "Artificer" - desc = "This spell conjures a construct which may be controlled by Shades." - - school = "conjuration" - charge_max = 600 - spell_flags = 0 - invocation = "none" - invocation_type = SpI_NONE - range = 0 - - summon_type = list(/obj/structure/constructshell) - - hud_state = "artificer" - cast_sound = 'sound/items/Deconstruct.ogg' - -/spell/aoe_turf/conjure/construct/lesser - charge_max = 1800 - summon_type = list(/obj/structure/constructshell/cult) - hud_state = "const_shell" - override_base = "const" - -/spell/aoe_turf/conjure/floor - name = "Floor Construction" - desc = "This spell constructs a cult floor." - - charge_max = 20 - spell_flags = Z2NOCAST | CONSTRUCT_CHECK - invocation = "none" - invocation_type = SpI_NONE - range = 0 - summon_type = list(/turf/simulated/floor/cult) - - hud_state = "const_floor" - cast_sound = 'sound/items/Welder.ogg' - -/spell/aoe_turf/conjure/wall - name = "Lesser Construction" - desc = "This spell constructs a cult wall." - - charge_max = 100 - spell_flags = Z2NOCAST | CONSTRUCT_CHECK - invocation = "none" - invocation_type = SpI_NONE - range = 0 - summon_type = list(/turf/simulated/wall/cult) - - hud_state = "const_wall" - cast_sound = 'sound/items/Welder.ogg' - -/spell/aoe_turf/conjure/wall/reinforced - name = "Greater Construction" - desc = "This spell constructs a reinforced metal wall." - - charge_max = 300 - spell_flags = Z2NOCAST - invocation = "none" - invocation_type = SpI_NONE - range = 0 - cast_delay = 50 - - summon_type = list(/turf/simulated/wall/r_wall) - cast_sound = 'sound/items/Welder.ogg' - -/spell/aoe_turf/conjure/soulstone - name = "Summon Soulstone" - desc = "This spell reaches into Nar-Sie's realm, summoning one of the legendary fragments across time and space." - - charge_max = 3000 - spell_flags = 0 - invocation = "none" - invocation_type = SpI_NONE - range = 0 - - summon_type = list(/obj/item/device/soulstone) - - hud_state = "const_stone" - override_base = "const" - cast_sound = 'sound/items/Welder.ogg' - -/spell/aoe_turf/conjure/pylon - name = "Red Pylon" - desc = "This spell conjures a fragile crystal from Nar-Sie's realm. Makes for a convenient light source." - - charge_max = 200 - spell_flags = CONSTRUCT_CHECK - invocation = "none" - invocation_type = SpI_NONE - range = 0 - - summon_type = list(/obj/structure/cult/pylon) - - hud_state = "const_pylon" - cast_sound = 'sound/items/Welder.ogg' - -/spell/aoe_turf/conjure/forcewall/lesser - name = "Shield" - desc = "Allows you to pull up a shield to protect yourself and allies from incoming threats" - - charge_max = 300 - spell_flags = 0 - invocation = "none" - invocation_type = SpI_NONE - range = 0 - summon_type = list(/obj/effect/forcefield/cult) - duration = 200 - - hud_state = "const_juggwall" - cast_sound = 'sound/magic/forcewall.ogg' - -//Code for the Juggernaut construct's forcefield, that seemed like a good place to put it. -/obj/effect/forcefield/cult - name = "juggernaut shield" - desc = "An eerie-looking obstacle that seems to have been pulled from another dimension through sheer force." - icon = 'icons/effects/effects.dmi' - icon_state = "m_shield_cult" - light_color = "#b40000" - light_outer_range = 2 diff --git a/code/modules/spells/aoe_turf/conjure/druidic_spells.dm b/code/modules/spells/aoe_turf/conjure/druidic_spells.dm deleted file mode 100644 index e118d71a1f448..0000000000000 --- a/code/modules/spells/aoe_turf/conjure/druidic_spells.dm +++ /dev/null @@ -1,109 +0,0 @@ -/spell/aoe_turf/conjure/summon - var/name_summon = 0 - cast_sound = 'sound/weapons/wave.ogg' - -/spell/aoe_turf/conjure/summon/before_cast() - ..() - if(name_summon) - var/newName = sanitize(input("Would you like to name your summon?") as null|text, MAX_NAME_LEN) - if(newName) - newVars["name"] = newName - -/spell/aoe_turf/conjure/summon/conjure_animation(var/atom/movable/overlay/animation, var/turf/target) - animation.icon_state = "shield2" - flick("shield2",animation) - sleep(10) - ..() - - -/spell/aoe_turf/conjure/summon/bats - name = "Summon Space Bats" - desc = "This spell summons a flock of spooky space bats." - feedback = "SB" - - charge_max = 1200 //2 minutes - spell_flags = NEEDSCLOTHES - invocation = "Bla'yo daya!" - invocation_type = SpI_SHOUT - level_max = list(Sp_TOTAL = 3, Sp_SPEED = 3, Sp_POWER = 3) - cooldown_min = 600 - - range = 1 - - summon_amt = 1 - summon_type = list(/mob/living/simple_animal/hostile/scarybat) - - hud_state = "wiz_bats" - -/spell/aoe_turf/conjure/summon/bats/empower_spell() - if(!..()) - return 0 - - newVars = list("maxHealth" = 20 + spell_levels[Sp_POWER]*5, "health" = 20 + spell_levels[Sp_POWER]*5, "melee_damage_lower" = 10 + spell_levels[Sp_POWER], "melee_damage_upper" = 10 + spell_levels[Sp_POWER]*2) - - return "Your bats are now stronger." - -// /spell/aoe_turf/conjure/summon/bear -// name = "Summon Bear" -// desc = "This spell summons a permanent bear companion that will follow your orders." -// feedback = "BR" -// charge_max = 3000 //5 minutes because this is a REALLY powerful spell. May tone it down/up. -// spell_flags = NEEDSCLOTHES -// invocation = "REA'YO GOR DAYA!" -// invocation_type = SpI_SHOUT -// level_max = list(Sp_TOTAL = 4, Sp_SPEED = 0, Sp_POWER = 4) - -// range = 0 - -// name_summon = 1 - -// summon_amt = 1 -// summon_type = list(/mob/living/simple_animal/hostile/commanded/bear) -// newVars = list("maxHealth" = 15, -// "health" = 15, -// "melee_damage_lower" = 10, -// "melee_damage_upper" = 10, -// ) - -// hud_state = "wiz_bear" - -/spell/aoe_turf/conjure/summon/bear/before_cast() - ..() - newVars["master"] = holder //why not do this in the beginning? MIND SWITCHING. - -/spell/aoe_turf/conjure/summon/bear/empower_spell() - if(!..()) - return 0 - switch(spell_levels[Sp_POWER]) - if(1) - newVars = list("maxHealth" = 30, - "health" = 30, - "melee_damage_lower" = 15, - "melee_damage_upper" = 15 - ) - return "Your bear has been upgraded from a cub to a whelp." - if(2) - newVars = list("maxHealth" = 45, - "health" = 45, - "melee_damage_lower" = 20, - "melee_damage_upper" = 20, - "color" = "#d9d9d9" //basically we want them to look different enough that people can recognize it. - ) - return "Your bear has been upgraded from a whelp to an adult." - if(3) - newVars = list("maxHealth" = 60, - "health" = 60, - "melee_damage_lower" = 25, - "melee_damage_upper" = 25, - "color" = "#8c8c8c" - ) - return "Your bear has been upgraded from an adult to an alpha." - if(4) - newVars = list("maxHealth" = 75, - "health" = 75, - "melee_damage_lower" = 35, - "melee_damage_upper" = 35, - "resistance" = 3, - "color" = "#0099ff" - ) - return "Your bear is now worshiped as a god amongst bears." \ No newline at end of file diff --git a/code/modules/spells/aoe_turf/conjure/faithful_hound.dm b/code/modules/spells/aoe_turf/conjure/faithful_hound.dm deleted file mode 100644 index d836f9a8a46f3..0000000000000 --- a/code/modules/spells/aoe_turf/conjure/faithful_hound.dm +++ /dev/null @@ -1,23 +0,0 @@ -/spell/aoe_turf/conjure/faithful_hound - name = "Faithful Hound" - desc = "Summon a spectral watchdog with a special password. Anyone without the password is in for a barking and a biting." - feedback = "FH" - - charge_max = 600 - spell_flags = NEEDSCLOTHES - invocation = "Du korilath tangus" - invocation_type = SpI_WHISPER - range = 0 - - summon_amt = 1 - summon_type = list(/mob/living/simple_animal/faithful_hound) - hud_state = "wiz_hound" - -/spell/aoe_turf/conjure/faithful_hound/before_cast() - ..() - var/password = sanitize(input("What password will this beast listen to?") as text, MAX_NAME_LEN) - newVars = list("password" = password, "allowed_mobs" = list(usr)) - -/spell/aoe_turf/conjure/faithful_hound/tower - charge_max = 1 - spell_flags = 0 \ No newline at end of file diff --git a/code/modules/spells/aoe_turf/conjure/force_portal.dm b/code/modules/spells/aoe_turf/conjure/force_portal.dm deleted file mode 100644 index 1bf7d7f075e41..0000000000000 --- a/code/modules/spells/aoe_turf/conjure/force_portal.dm +++ /dev/null @@ -1,16 +0,0 @@ -/spell/aoe_turf/conjure/force_portal - name = "Force Portal" - desc = "Create a portal that sucks in anything that touches it and then shoots it all out at the end.." - school = "conjuration" - feedback = "FP" - summon_type = list(/obj/effect/force_portal) - charge_max = 200 - spell_flags = NEEDSCLOTHES - range = 0 - cast_sound = null - - hud_state = "wiz_force" - -/spell/aoe_turf/conjure/force_portal/tower - charge_max = 2 - spell_flags = 0 \ No newline at end of file diff --git a/code/modules/spells/aoe_turf/conjure/forcewall.dm b/code/modules/spells/aoe_turf/conjure/forcewall.dm deleted file mode 100644 index 1498087912974..0000000000000 --- a/code/modules/spells/aoe_turf/conjure/forcewall.dm +++ /dev/null @@ -1,52 +0,0 @@ -/spell/aoe_turf/conjure/forcewall - name = "Forcewall" - desc = "Create a wall of pure energy at your location." - school = "conjuration" - feedback = "FW" - summon_type = list(/obj/effect/forcefield) - duration = 300 - charge_max = 100 - spell_flags = 0 - range = 0 - cast_sound = 'sound/magic/forcewall.ogg' - - hud_state = "wiz_shield" - -/spell/aoe_turf/conjure/forcewall/mime - name = "Invisible wall" - desc = "Create an invisible wall on your location." - school = "mime" - panel = "Mime" - summon_type = list(/obj/effect/forcefield/mime) - invocation_type = SpI_EMOTE - invocation = "mimes placing their hands on a flat surfacing, and pushing against it." - charge_max = 300 - cast_sound = null - - override_base = "grey" - hud_state = "mime_wall" - -/obj/effect/forcefield - desc = "A space wizard's magic wall." - name = "FORCEWALL" - icon = 'icons/effects/effects.dmi' - icon_state = "m_shield" - anchored = TRUE - opacity = 0 - density = TRUE - unacidable = TRUE - -/obj/effect/forcefield/bullet_act(var/obj/item/projectile/Proj, var/def_zone) - var/turf/T = get_turf(src.loc) - if(T) - for(var/mob/M in T) - Proj.on_hit(M,M.bullet_act(Proj, def_zone)) - return - -/obj/effect/forcefield/mime - icon_state = "empty" - name = "invisible wall" - desc = "You have a bad feeling about this." - -/spell/aoe_turf/conjure/forcewall/tower - charge_max = 3 \ No newline at end of file diff --git a/code/modules/spells/aoe_turf/conjure/grove.dm b/code/modules/spells/aoe_turf/conjure/grove.dm deleted file mode 100644 index 77be6328552e0..0000000000000 --- a/code/modules/spells/aoe_turf/conjure/grove.dm +++ /dev/null @@ -1,75 +0,0 @@ -/spell/aoe_turf/conjure/grove - name = "Grove" - desc = "Creates a sanctuary of nature around the wizard as well as creating a healing plant." - - spell_flags = IGNOREDENSE | IGNORESPACE | NEEDSCLOTHES | Z2NOCAST | IGNOREPREV - charge_max = 1200 - school = "transmutation" - - range = 1 - cooldown_min = 600 - - level_max = list(Sp_TOTAL = 3, Sp_SPEED = 3, Sp_POWER = 1) - - summon_amt = 47 - summon_type = list(/turf/simulated/floor/grass) - var/spread = 0 - var/datum/seed/seed - var/seed_type = /datum/seed/merlin_tear - cast_sound = 'sound/magic/repulse.ogg' - -/spell/aoe_turf/conjure/grove/New() - ..() - if(seed_type) - seed = new seed_type() - else - seed = SSplants.create_random_seed(1) - -/spell/aoe_turf/conjure/grove/before_cast() - var/turf/T = get_turf(holder) - var/obj/effect/vine/P = new(T,seed) - P.spread_chance = spread - - -/spell/aoe_turf/conjure/grove/sanctuary - name = "Sanctuary" - desc = "Creates a sanctuary of nature around the wizard as well as creating a healing plant." - feedback = "SY" - invocation = "Bo K'Iitan!" - invocation_type = SpI_SHOUT - spell_flags = IGNOREDENSE | IGNORESPACE | NEEDSCLOTHES | Z2NOCAST | IGNOREPREV - cooldown_min = 600 - - level_max = list(Sp_TOTAL = 3, Sp_SPEED = 3, Sp_POWER = 1) - - seed_type = /datum/seed/merlin_tear - newVars = list("name" = "sanctuary", "desc" = "This grass makes you feel comfortable. Peaceful.","blessed" = 1) - - hud_state = "wiz_grove" -/spell/aoe_turf/conjure/grove/sanctuary/empower_spell() - if(!..()) - return 0 - - seed.set_trait(TRAIT_SPREAD,2) //make it grow. - spread = 40 - return "Your sanctuary will now grow beyond that of the grassy perimeter." - -/datum/seed/merlin_tear - name = "merlin tears" - seed_name = "merlin tears" - display_name = "merlin tears" - chems = list(/datum/reagent/bicaridine = list(3,7), /datum/reagent/dermaline = list(3,7), /datum/reagent/dylovene = list(3,7), /datum/reagent/tricordrazine = list(3,7), /datum/reagent/alkysine = list(1,2), /datum/reagent/imidazoline = list(1,2), /datum/reagent/peridaxon = list(4,5)) - kitchen_tag = "berries" - -/datum/seed/merlin_tear/New() - ..() - set_trait(TRAIT_PLANT_ICON,"bush5") - set_trait(TRAIT_PRODUCT_ICON,"berry") - set_trait(TRAIT_PRODUCT_COLOUR,"#4d4dff") - set_trait(TRAIT_PLANT_COLOUR, "#ff6600") - set_trait(TRAIT_YIELD,4) - set_trait(TRAIT_MATURATION,6) - set_trait(TRAIT_PRODUCTION,6) - set_trait(TRAIT_POTENCY,10) - set_trait(TRAIT_HARVEST_REPEAT,1) - set_trait(TRAIT_IMMUTABLE,1) //no making op plants pls \ No newline at end of file diff --git a/code/modules/spells/aoe_turf/disable_tech.dm b/code/modules/spells/aoe_turf/disable_tech.dm deleted file mode 100644 index 636a8c1c86525..0000000000000 --- a/code/modules/spells/aoe_turf/disable_tech.dm +++ /dev/null @@ -1,37 +0,0 @@ -/spell/aoe_turf/disable_tech - name = "Disable Tech" - desc = "This spell disables all weapons, cameras and most other technology in range." - feedback = "DT" - charge_max = 400 - spell_flags = NEEDSCLOTHES - invocation = "NEC CANTIO" - invocation_type = SpI_SHOUT - selection_type = "range" - range = 0 - inner_radius = -1 - level_max = list(Sp_TOTAL = 2, Sp_SPEED = 2, Sp_POWER = 2) - cooldown_min = 200 //50 deciseconds reduction per rank - - var/emp_heavy = 3 - var/emp_light = 5 - - hud_state = "wiz_tech" - cast_sound = 'sound/magic/disable_tech.ogg' - -/spell/aoe_turf/disable_tech/cast(list/targets) - - for(var/turf/target in targets) - empulse(get_turf(target), emp_heavy, emp_light) - return - -/spell/aoe_turf/disable_tech/empower_spell() - if(!..()) - return 0 - emp_heavy += 2 - emp_light += 2 - - return "You've increased the range of [src]." - -/spell/aoe_turf/disable_tech/starlight - charge_max = 600 - spell_flags = 0 \ No newline at end of file diff --git a/code/modules/spells/aoe_turf/drain_blood.dm b/code/modules/spells/aoe_turf/drain_blood.dm deleted file mode 100644 index 6915d22812699..0000000000000 --- a/code/modules/spells/aoe_turf/drain_blood.dm +++ /dev/null @@ -1,66 +0,0 @@ -/spell/aoe_turf/drain_blood - name = "Drain Blood" - desc = "this spell allows the caster to borrow blood from those around them. Sharing is caring!" - feedback = "DB" - school = "transmutation" - charge_max = 600 - invocation = "whispers something darkly" - invocation_type = SpI_EMOTE - range = 3 - inner_radius = 0 - - time_between_channels = 100 - number_of_channels = 3 - cast_sound = 'sound/effects/squelch2.ogg' - hud_state = "const_rune" - -/spell/aoe_turf/drain_blood/cast(var/list/targets, var/mob/user) - for(var/t in targets) - for(var/mob/living/L in t) - if(L.stat == DEAD || L == user) - continue - //Hurt target - if(istype(L, /mob/living/carbon/human)) - var/mob/living/carbon/human/H = L - H.vessel.remove_reagent(/datum/reagent/blood, 10) - else - L.adjustBruteLoss(10) - to_chat(L, "You feel your lifeforce being ripping out of your body!") - - //Do effect - var/obj/item/projectile/beam/blood_effect/effect = new(get_turf(user)) - effect.pixel_x = 0 - effect.pixel_y = 0 - effect.launch(L, "chest") - - //Heal self - if(istype(user, /mob/living/carbon/human)) - var/mob/living/carbon/human/H = user - var/amount = min(10, H.species.blood_volume - H.vessel.total_volume) - if(amount > 0) - H.vessel.add_reagent(/datum/reagent/blood, amount) - continue - L.adjustBruteLoss(-5) - L.adjustFireLoss(-2.5) - L.adjustToxLoss(-2.5) - -/obj/item/projectile/beam/blood_effect - name = "blood jet" - icon_state = "blood" - damage = 0 - randpixel = 0 - no_attack_log = TRUE - muzzle_type = /obj/effect/projectile/blood - tracer_type = /obj/effect/projectile/blood - impact_type = /obj/effect/projectile/blood - -/obj/item/projectile/beam/blood_effect/Bump(var/atom/a, forced=0) - if(a == original) - on_impact(a) - qdel(src) - return 1 - return 0 - - -/obj/effect/projectile/blood - icon_state = "blood" \ No newline at end of file diff --git a/code/modules/spells/aoe_turf/exchange_wounds.dm b/code/modules/spells/aoe_turf/exchange_wounds.dm deleted file mode 100644 index 06a0becfff883..0000000000000 --- a/code/modules/spells/aoe_turf/exchange_wounds.dm +++ /dev/null @@ -1,43 +0,0 @@ -/spell/aoe_turf/exchange_wounds - name = "Exchange Wounds" - desc = "Syphon the wounds from your allies." - feedback = "EW" - school = "transmutation" - invocation = "Esh Yek Vai!" - invocation_type = SpI_SHOUT - charge_max = 400 - spell_flags = 0 - - var/amt_healed = 0 - var/heal_max = 100 - range = 4 - inner_radius = 0 - number_of_channels = 0 - time_between_channels = 20 - - hud_state = "wiz_exchange" - -/spell/aoe_turf/exchange_wounds/perform() - amt_healed = 0 - ..() - -/spell/aoe_turf/exchange_wounds/cast(var/list/targets, var/mob/living/user) - new /obj/effect/temporary(get_turf(user),10,'icons/effects/effects.dmi',"purple_electricity_constant") - for(var/t in targets) - for(var/mob/living/L in t) - if(L.faction != user.faction) - continue - new /obj/effect/temporary(get_turf(L),10,'icons/effects/effects.dmi',"green_sparkles") - if(L.getBruteLoss() > 5) - L.adjustBruteLoss(-5) - user.adjustBruteLoss(2) - amt_healed += 5 - if(L.getFireLoss() > 5) - L.adjustFireLoss(-5) - user.adjustFireLoss(2) - amt_healed += 5 - -/spell/aoe_turf/exchange_wounds/check_valid_targets() - if(amt_healed > heal_max) - return FALSE - return ..() \ No newline at end of file diff --git a/code/modules/spells/aoe_turf/knock.dm b/code/modules/spells/aoe_turf/knock.dm deleted file mode 100644 index 6e7f723af27a3..0000000000000 --- a/code/modules/spells/aoe_turf/knock.dm +++ /dev/null @@ -1,40 +0,0 @@ -/spell/aoe_turf/knock - name = "Knock" - desc = "This spell opens nearby doors and does not require wizard garb." - feedback = "KN" - school = "transmutation" - charge_max = 100 - spell_flags = 0 - invocation = "Aulie Oxin Fiera." - invocation_type = SpI_WHISPER - range = 3 - level_max = list(Sp_TOTAL = 4, Sp_SPEED = 4, Sp_POWER = 1) - cooldown_min = 20 //20 deciseconds reduction per rank - - hud_state = "wiz_knock" - cast_sound = 'sound/magic/knock.ogg' - -/spell/aoe_turf/knock/cast(list/targets) - for(var/turf/T in targets) - for(var/obj/machinery/door/door in T.contents) - spawn(1) - if(istype(door,/obj/machinery/door/airlock)) - var/obj/machinery/door/airlock/AL = door //casting is important - AL.locked = 0 - door.open() - return - - -/spell/aoe_turf/knock/empower_spell() - if(!..()) - return 0 - range *= 2 - - return "You've doubled the range of [src]." - -/spell/aoe_turf/knock/slow - name = "Slow Knock" - charge_max = 200 - -/spell/aoe_turf/knock/tower - charge_max = 2 \ No newline at end of file diff --git a/code/modules/spells/aoe_turf/smoke.dm b/code/modules/spells/aoe_turf/smoke.dm deleted file mode 100644 index d9b474d539f0c..0000000000000 --- a/code/modules/spells/aoe_turf/smoke.dm +++ /dev/null @@ -1,29 +0,0 @@ -/spell/aoe_turf/smoke - name = "Smoke" - desc = "This spell spawns a cloud of choking smoke at your location and does not require wizard garb." - feedback = "SM" - school = "transmutation" - charge_max = 120 - spell_flags = 0 - invocation = "none" - invocation_type = SpI_NONE - range = 1 - inner_radius = -1 - level_max = list(Sp_TOTAL = 3, Sp_SPEED = 3, Sp_POWER = 2) - cooldown_min = 20 //25 deciseconds reduction per rank - - smoke_spread = 2 - smoke_amt = 5 - - hud_state = "wiz_smoke" - cast_sound = 'sound/magic/smoke.ogg' - -/spell/aoe_turf/smoke/empower_spell() - if(!..()) - return 0 - smoke_amt += 2 - - return "[src] will now create more smoke." - -/spell/aoe_turf/smoke/tower - charge_max = 2 \ No newline at end of file diff --git a/code/modules/spells/aoe_turf/summons.dm b/code/modules/spells/aoe_turf/summons.dm deleted file mode 100644 index be61819d9eab1..0000000000000 --- a/code/modules/spells/aoe_turf/summons.dm +++ /dev/null @@ -1,72 +0,0 @@ -/spell/aoe_turf/conjure/summonEdSwarm //test purposes - name = "Dispense Wizard Justice" - desc = "This spell dispenses wizard justice." - - summon_type = list(/mob/living/bot/secbot/ed209) - summon_amt = 10 - range = 3 - newVars = list("emagged" = 1,"name" = "Wizard's Justicebot") - - hud_state = "wiz_ed" - -/spell/aoe_turf/conjure/carp - name = "Summon Carp" - desc = "This spell conjures a simple carp." - - school = "conjuration" - charge_max = 1200 - spell_flags = NEEDSCLOTHES - invocation = "Nouk Fhumm Sacp Risska!" - invocation_type = SpI_SHOUT - range = 1 - cast_sound = 'sound/magic/summon_carp.ogg' - - summon_type = list(/mob/living/simple_animal/hostile/carp) - - hud_state = "wiz_carp" - -/spell/aoe_turf/conjure/creature - name = "Summon Creature Swarm" - desc = "This spell tears the fabric of reality, allowing horrific daemons to spill forth" - - school = "conjuration" - charge_max = 1200 - spell_flags = 0 - invocation = "Ia-Ia! Naomesnalia!" - invocation_type = SpI_SHOUT - summon_amt = 10 - range = 3 - - summon_type = list(/mob/living/simple_animal/hostile/creature) - - hud_state = "wiz_creature" - -/spell/aoe_turf/conjure/mirage - name = "Summon Mirage" - desc = "This spell summons a harmless carp mirage for a few seconds." - feedback = "MR" - school = "illusion" - charge_max = 1200 - spell_flags = NEEDSCLOTHES - invocation = "Nouk Fhunhm Sacp Risska!" - invocation_type = SpI_SHOUT - range = 1 - cast_sound = 'sound/magic/summon_carp.ogg' - - duration = 600 - cooldown_min = 600 - level_max = list(Sp_TOTAL = 4, Sp_SPEED = 2, Sp_POWER = 3) - - summon_type = list(/mob/living/simple_animal/hostile/carp) - - hud_state = "wiz_carp" - - newVars = list("melee_damage_lower" = 0, "melee_damage_upper" = 0, "break_stuff_probability" = 0) - -/spell/aoe_turf/conjure/mirage/empower_spell() - if(!..()) - return 0 - - summon_amt++ - - return "You now summon [summon_amt] mirages per spellcast." \ No newline at end of file diff --git a/code/modules/spells/artifacts.dm b/code/modules/spells/artifacts.dm deleted file mode 100644 index 61893b43573da..0000000000000 --- a/code/modules/spells/artifacts.dm +++ /dev/null @@ -1,38 +0,0 @@ -//////////////////////Scrying orb////////////////////// - -/obj/item/scrying - name = "scrying orb" - desc = "An incandescent orb of otherworldly energy, staring into it gives you vision beyond mortal means." - icon = 'icons/obj/projectiles.dmi' - icon_state = "bluespace" - throw_speed = 3 - throw_range = 7 - throwforce = 10 - damtype = DAMAGE_BURN - force = 10 - hitsound = 'sound/magic/forcewall.ogg' - -/obj/item/scrying/attack_self(mob/user as mob) - if((user.mind && !GLOB.wizards.is_antagonist(user.mind))) - to_chat(user, "You stare into the orb and see nothing but your own reflection.") - return - - to_chat(user, "You can see... everything!") // This never actually happens. - visible_message("[user] stares into [src], their eyes glazing over.") - - user.teleop = user.ghostize(1) - announce_ghost_joinleave(user.teleop, 1, "You feel that they used a powerful artifact to [pick("invade","disturb","disrupt","infest","taint","spoil","blight")] this place with their presence.") - return - - - -/////////////////////////Cursed Dice/////////////////////////// -/obj/item/dice/d20/cursed - desc = "A dice with twenty sides said to have an ill effect on those that are unlucky..." - -/obj/item/dice/d20/cursed/attack_self(mob/living/user) - ..() - if(icon_state == "[name][sides]") - user.adjustBruteLoss(-30) - else if(icon_state == "[name]1") - user.adjustBruteLoss(30) diff --git a/code/modules/spells/artifacts/spellbound_servants.dm b/code/modules/spells/artifacts/spellbound_servants.dm deleted file mode 100644 index 02317db4e5320..0000000000000 --- a/code/modules/spells/artifacts/spellbound_servants.dm +++ /dev/null @@ -1,283 +0,0 @@ -/datum/spellbound_type - var/name = "Stuff" - var/desc = "spells n shit" - var/equipment = list() - var/spells = list() - -/datum/spellbound_type/proc/spawn_servant(var/atom/a, var/mob/master, var/mob/user) - set waitfor = 0 - var/mob/living/carbon/human/H = new(a) - H.ckey = user.ckey - H.change_appearance(APPEARANCE_GENDER|APPEARANCE_SKIN|APPEARANCE_ALL_HAIR|APPEARANCE_EYES) - - var/obj/item/implant/translator/natural/I = new() - I.implant_in_mob(H, BP_HEAD) - if (master.languages.len) - var/datum/language/lang = master.languages[1] - H.add_language(lang.name) - H.set_default_language(lang) - I.languages[lang.name] = 1 - - modify_servant(equip_servant(H), H) - set_antag(H.mind, master) - var/name_choice = sanitize(input(H, "Choose a name. If you leave this blank, it will be defaulted to your current characters.", "Name change") as null|text, MAX_NAME_LEN) - if(name_choice) - H.SetName(name_choice) - H.real_name = name_choice - -/datum/spellbound_type/proc/equip_servant(var/mob/living/carbon/human/H) - for(var/stype in spells) - var/spell/S = new stype() - if(S.spell_flags & NEEDSCLOTHES) - S.spell_flags &= ~NEEDSCLOTHES - H.add_spell(S) - . = list() - for(var/etype in equipment) - var/obj/item/I = new etype(get_turf(H)) - if(istype(I, /obj/item/clothing)) - I.canremove = 0 - H.equip_to_slot_if_possible(I,equipment[etype], TRYEQUIP_REDRAW | TRYEQUIP_SILENT | TRYEQUIP_FORCE) - . += I - -/datum/spellbound_type/proc/set_antag(var/datum/mind/M, var/mob/master) - return - -/datum/spellbound_type/proc/modify_servant(var/list/items, var/mob/living/carbon/human/H) - return - -/datum/spellbound_type/apprentice - name = "Apprentice" - desc = "Summon your trusty apprentice, equipped with their very own spellbook." - equipment = list(/obj/item/clothing/head/wizard = slot_head, - /obj/item/clothing/under/color/lightpurple = slot_w_uniform, - /obj/item/clothing/shoes/sandal = slot_shoes, - /obj/item/staff = slot_r_hand, - /obj/item/spellbook/apprentice = slot_l_hand, - /obj/item/clothing/suit/wizrobe = slot_wear_suit) - spells = list(/spell/noclothes) - -/datum/spellbound_type/apprentice/set_antag(var/datum/mind/M, var/mob/master) - GLOB.wizards.add_antagonist_mind(M,1,ANTAG_APPRENTICE,"You are an apprentice-type Servant! You're just an ordinary Wizard-To-Be, with no special abilities, but do not need robes to cast spells. Follow your teacher's orders!") - -/datum/spellbound_type/servant - var/spiel = "You don't do anything in particular." - -/datum/spellbound_type/servant/set_antag(var/datum/mind/M, var/mob/master) - GLOB.wizards.add_antagonist_mind(M,1,ANTAG_SERVANT, "You are a [name]-type Servant! [spiel]") - -/datum/spellbound_type/servant/caretaker - name = "Caretaker" - desc = "A healer, a medic, a shoulder to cry on. This servant will heal you, even from near death." - spiel = "'The last enemy that will be destroyed is death.' You can perceive any injuries with simple sight, and heal them with the Trance spell; potentially even reversing death itself! However, this comes at a price; Trance will become increasingly harder to use as you use it, until you can use it no longer. Be cautious, and aid your Master in any way possible!" - equipment = list(/obj/item/clothing/under/caretaker = slot_w_uniform, - /obj/item/clothing/shoes/dress/caretakershoes = slot_shoes) - spells = list(/spell/toggle_armor/caretaker, - /spell/targeted/heal_target/touch, - /spell/aoe_turf/knock/slow, - /spell/targeted/heal_target/area/slow, - /spell/targeted/analyze, - /spell/targeted/heal_target/trance - ) - -/datum/spellbound_type/servant/champion - name = "Champion" - desc = "A knight in shining armor; a warrior, a protector, and a loyal friend." - spiel = "Your sword and armor are second to none, but you have no unique supernatural powers beyond summoning the sword to your hands. Protect your Master with your life!" - equipment = list(/obj/item/clothing/under/bluetunic = slot_w_uniform, - /obj/item/clothing/shoes/jackboots/medievalboots = slot_shoes) - spells = list(/spell/toggle_armor/champion, - /spell/toggle_armor/excalibur) - -/datum/spellbound_type/servant/familiar - name = "Familiar" - desc = "A friend! Or are they a pet? They can transform into animals, and take some particular traits from said creatures." - spiel = "This form of yours is weak in comparison to your transformed form, but that certainly won't pose a problem, considering the fact that you have an alternative. Whatever it is you can turn into, use its powers wisely and serve your Master as well as possible!" - equipment = list(/obj/item/clothing/head/bandana/familiarband = slot_head, - /obj/item/clothing/under/familiargarb = slot_w_uniform) - -/datum/spellbound_type/servant/familiar/modify_servant(var/list/equipment, var/mob/living/carbon/human/H) - var/familiar_type - switch(input(H,"Choose your desired animal form:", "Form") as anything in list("Space Pike", "Mouse", "Cat", "Bear")) - if("Space Pike") - H.mutations |= mNobreath - H.mutations |= MUTATION_SPACERES - familiar_type = /mob/living/simple_animal/hostile/carp/pike - if("Mouse") - H.verbs |= /mob/living/proc/ventcrawl - familiar_type = /mob/living/simple_animal/passive/mouse - if("Cat") - H.mutations |= mRun - familiar_type = /mob/living/simple_animal/passive/cat - if("Bear") - var/obj/item/clothing/under/under = locate() in equipment - var/obj/item/clothing/head/head = locate() in equipment - - var/datum/extension/armor/A = get_extension(under, /datum/extension/armor) - if(A) - A.armor_values = list( - melee = ARMOR_MELEE_VERY_HIGH, - bullet = ARMOR_BALLISTIC_PISTOL, - laser = ARMOR_LASER_SMALL, - energy = ARMOR_ENERGY_SMALL - ) //More armor - A = get_extension(head, /datum/extension/armor) - if(A) - A.armor_values = list( - melee = ARMOR_MELEE_RESISTANT, - bullet = ARMOR_BALLISTIC_MINOR, - laser = ARMOR_LASER_MINOR, - energy = ARMOR_ENERGY_MINOR - ) - familiar_type = /mob/living/simple_animal/hostile/bear - var/spell/targeted/shapeshift/familiar/F = new() - F.possible_transformations = list(familiar_type) - H.add_spell(F) - -/datum/spellbound_type/servant/fiend - name = "Fiend" - desc = "A practitioner of dark and evil magics, almost certainly a demon, and possibly a lawyer." - spiel = "The Summoning Ritual has bound you to this world with limited access to your infernal powers; you'll have to be strategic in how you use them. Follow your Master's orders as well as you can!" - spells = list(/spell/targeted/projectile/dumbfire/fireball/firebolt, - /spell/targeted/ethereal_jaunt, - /spell/targeted/torment, - /spell/area_teleport, - /spell/hand/charges/blood_shard - ) - -/datum/spellbound_type/servant/fiend/equip_servant(var/mob/living/carbon/human/H) - if(H.gender == MALE) - equipment = list(/obj/item/clothing/under/lawyer/fiendsuit = slot_w_uniform, - /obj/item/clothing/shoes/dress/devilshoes = slot_shoes) - spells += /spell/toggle_armor/fiend - else - equipment = list(/obj/item/clothing/under/devildress = slot_w_uniform, - /obj/item/clothing/shoes/dress/devilshoes = slot_shoes) - spells += /spell/toggle_armor/fiend/fem - ..() - -/datum/spellbound_type/servant/infiltrator - name = "Infiltrator" - desc = "A spy and a manipulator to the end, capable of hiding in plain sight and falsifying information to your heart's content." - spiel = "On the surface, you are a completely normal person, but is that really all you are? People are so easy to fool, do as your Master says, and do it with style!" - spells = list(/spell/toggle_armor/infil_items, - /spell/targeted/exhude_pleasantness, - /spell/targeted/genetic/blind/hysteria) - -/datum/spellbound_type/servant/infiltrator/equip_servant(var/mob/living/carbon/human/H) - if(H.gender == MALE) - equipment = list(/obj/item/clothing/under/lawyer/infil = slot_w_uniform, - /obj/item/clothing/shoes/dress/infilshoes = slot_shoes) - spells += /spell/toggle_armor/infiltrator - else - equipment = list(/obj/item/clothing/under/lawyer/infil/fem = slot_w_uniform, - /obj/item/clothing/shoes/dress/infilshoes = slot_shoes) - spells += /spell/toggle_armor/infiltrator/fem - ..() - -/datum/spellbound_type/servant/overseer - name = "Overseer" - desc = "A ghost, or an imaginary friend; the Overseer is immune to space and can turn invisible at a whim, but has little offensive capabilities." - spiel = "Physicality is not something you are familiar with. Indeed, injuries cannot slow you down, but you can't fight back, either! In addition to this, you can reach into the void and return the soul of a single departed crewmember via the revoke death verb, if so desired; this can even revive your Master, should they fall in combat before you do. Serve them well." - equipment = list(/obj/item/clothing/under/grimhoodie = slot_w_uniform, - /obj/item/clothing/shoes/sandal/grimboots = slot_shoes, - /obj/item/contract/wizard/xray = slot_l_hand, - /obj/item/contract/wizard/telepathy = slot_r_hand) - spells = list(/spell/toggle_armor/overseer, - /spell/targeted/ethereal_jaunt, - /spell/invisibility, - /spell/targeted/revoke) - -/datum/spellbound_type/servant/overseer/equip_servant(var/mob/living/carbon/human/H) - ..() - H.add_aura(new /obj/aura/regenerating(H)) - -/obj/effect/cleanable/spellbound - name = "strange rune" - desc = "some sort of runic symbol drawn in... crayon?" - icon = 'icons/obj/rune.dmi' - icon_state = "spellbound" - var/datum/spellbound_type/stype - var/last_called = 0 - -/obj/effect/cleanable/spellbound/New(var/loc, var/spell_type) - stype = new spell_type() - return ..(loc) - -/obj/effect/cleanable/spellbound/attack_hand(var/mob/user) - if(last_called > world.time ) - return - last_called = world.time + 30 SECONDS - var/datum/ghosttrap/G = get_ghost_trap("wizard familiar") - for(var/mob/observer/ghost/ghost in GLOB.player_list) - if(G.assess_candidate(ghost,null,FALSE)) - to_chat(ghost,"A wizard is requesting a Spell-Bound Servant! (Join)") - -/obj/effect/cleanable/spellbound/CanUseTopic(var/mob) - if(isliving(mob)) - return STATUS_CLOSE - return STATUS_INTERACTIVE - -/obj/effect/cleanable/spellbound/OnTopic(var/mob/user, href_list, state) - if(href_list["master"]) - var/mob/master = locate(href_list["master"]) - stype.spawn_servant(get_turf(src),master,user) - qdel(src) - return TOPIC_HANDLED - -/obj/effect/cleanable/spellbound/Destroy() - qdel(stype) - stype = null - return ..() - -/obj/item/summoning_stone - name = "summoning stone" - desc = "a small non-descript stone of dubious origin." - icon = 'icons/obj/weapons/other.dmi' - icon_state = "stone" - throw_speed = 5 - throw_range = 10 - w_class = ITEM_SIZE_TINY - -/obj/item/summoning_stone/attack_self(var/mob/user) - if(user.z in GLOB.using_map.admin_levels) - to_chat(user, "You cannot use \the [src] here.") - return - user.set_machine(src) - interact(user) - -/obj/item/summoning_stone/interact(var/mob/user) - var/list/types = subtypesof(/datum/spellbound_type) - /datum/spellbound_type/servant - if(user.mind && !GLOB.wizards.is_antagonist(user.mind)) - use_type(pick(types),user) - return - var/dat = "

                  Summoning Stone

                  Choose a companion to help you.

                  " - for(var/type in types) - var/datum/spellbound_type/SB = type - dat += "
                  [initial(SB.name)] - [initial(SB.desc)]" - show_browser(user,dat,"window=summoning") - onclose(user,"summoning") - -/obj/item/summoning_stone/proc/use_type(var/type, var/mob/user) - new /obj/effect/cleanable/spellbound(get_turf(src),type) - if(prob(20)) - var/list/base_areas = maintlocs //Have to do it this way as its a macro - var/list/pareas = base_areas.Copy() - while(pareas.len) - var/a = pick(pareas) - var/area/picked_area = pareas[a] - pareas -= a - var/list/turfs = get_area_turfs(picked_area) - for(var/t in turfs) - var/turf/T = t - if(T.density) - turfs -= T - if(turfs.len) - src.visible_message("\The [src] vanishes!") - src.forceMove(pick(turfs)) - show_browser(user, null, "window=summoning") - qdel(src) - -/obj/item/summoning_stone/OnTopic(user, href_list, state) - if(href_list["type"]) - use_type(href_list["type"],user) - return TOPIC_HANDLED diff --git a/code/modules/spells/artifacts/storage.dm b/code/modules/spells/artifacts/storage.dm deleted file mode 100644 index a9b2ce5f4ce74..0000000000000 --- a/code/modules/spells/artifacts/storage.dm +++ /dev/null @@ -1,41 +0,0 @@ -/obj/structure/closet/wizard - name = "artifact closet" - desc = "a special lead lined closet used to hold artifacts of immense power." - closet_appearance = /decl/closet_appearance/alien - -/obj/structure/closet/wizard/New() - ..() - var/obj/structure/bigDelivery/package = new /obj/structure/bigDelivery(get_turf(src)) - package.wrapped = src - package.examtext = "Imported straight from the Wizard Acadamy. Do not lose the contents or suffer a demerit." - src.forceMove(package) - package.update_icon() - -/obj/structure/closet/wizard/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." - -/obj/structure/closet/wizard/armor/New() - ..() - new /obj/item/clothing/shoes/sandal(src) //In case they've lost them. - new /obj/item/clothing/gloves/wizard(src)//To complete the outfit - new /obj/item/clothing/suit/space/void/wizard(src) - new /obj/item/clothing/head/helmet/space/void/wizard(src) - -/obj/structure/closet/wizard/scrying - name = "Scrying Orb" - desc = "An incandescent orb of crackling energy, using it will allow you to ghost while alive, allowing you to reconnoiter with ease. In addition, buying it will permanently grant you x-ray vision." - -/obj/structure/closet/wizard/scrying/New() - ..() - new /obj/item/scrying(src) - new /obj/item/contract/wizard/xray(src) - -/obj/structure/closet/wizard/souls - name = "Soul Shard Belt" - 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. This also includes the spell Artificer, used to create the shells used in construct creation." - -/obj/structure/closet/wizard/souls/New() - ..() - new /obj/item/contract/boon/wizard/artificer(src) - new /obj/item/storage/belt/soulstone/full(src) diff --git a/code/modules/spells/construct_spells.dm b/code/modules/spells/construct_spells.dm deleted file mode 100644 index 0c705aff4fc02..0000000000000 --- a/code/modules/spells/construct_spells.dm +++ /dev/null @@ -1,10 +0,0 @@ -//////////////////////////////Construct Spells///////////////////////// - -/proc/findNullRod(var/atom/target) - if(istype(target,/obj/item/nullrod)) - return 1 - else if(target.contents) - for(var/atom/A in target.contents) - if(findNullRod(A)) - return 1 - return 0 diff --git a/code/modules/spells/contracts.dm b/code/modules/spells/contracts.dm deleted file mode 100644 index c128982857f7b..0000000000000 --- a/code/modules/spells/contracts.dm +++ /dev/null @@ -1,155 +0,0 @@ -/obj/item/contract - name = "contract" - desc = "written in the blood of some unfortunate fellow." - icon = 'icons/mob/screen_spells.dmi' - icon_state = "master_open" - - var/contract_master = null - var/list/contract_spells = list(/spell/contract/reward,/spell/contract/punish,/spell/contract/return_master) - -/obj/item/contract/attack_self(mob/user as mob) - if(contract_master == null) - to_chat(user, "You bind the contract to your soul, making you the recipient of whatever poor fool's soul that decides to contract with you.") - contract_master = user - return - - if(contract_master == user) - to_chat(user, "You can't contract with yourself!") - return - - var/ans = alert(user,"The contract clearly states that signing this contract will bind your soul to \the [contract_master]. Are you sure you want to continue?","[src]","Yes","No") - - if(ans == "Yes") - user.visible_message("\The [user] signs the contract, their body glowing a deep yellow.") - if(!src.contract_effect(user)) - user.visible_message("\The [src] visibly rejects \the [user], erasing their signature from the line.") - return - user.visible_message("\The [src] disappears with a flash of light.") - if(contract_spells.len && istype(contract_master,/mob/living)) //if it aint text its probably a mob or another user - var/mob/living/M = contract_master - for(var/spell_type in contract_spells) - M.add_spell(new spell_type(user), "const_spell_ready") - log_and_message_admins("signed their soul over to \the [contract_master] using \the [src].", user) - qdel(src) - -/obj/item/contract/proc/contract_effect(mob/user as mob) - to_chat(user, "You've signed your soul over to \the [contract_master] and with that your unbreakable vow of servitude begins.") - return 1 - -/obj/item/contract/apprentice - name = "apprentice wizarding contract" - desc = "a wizarding school contract for those who want to sign their soul for a piece of the magic pie." - color = "#993300" - -/obj/item/contract/apprentice/contract_effect(mob/user as mob) - if(user.mind.special_role == ANTAG_APPRENTICE) - to_chat(user, "You are already a wizarding apprentice!") - return 0 - if(user.mind.special_role == ANTAG_SERVANT) - to_chat(user, "You are a servant. You have no need of apprenticeship.") - return 0 - if(GLOB.wizards.add_antagonist_mind(user.mind,1,ANTAG_APPRENTICE,"You are an apprentice! Your job is to learn the wizarding arts!")) - to_chat(user, "With the signing of this paper you agree to become \the [contract_master]'s apprentice in the art of wizardry.") - return 1 - return 0 - - -/obj/item/contract/wizard //contracts that involve making a deal with the Wizard Acadamy (or NON PLAYERS) - contract_master = "\improper Wizard Academy" - -/obj/item/contract/wizard/xray - name = "xray vision contract" - desc = "This contract is almost see-through..." - color = "#339900" - -/obj/item/contract/wizard/xray/contract_effect(mob/user as mob) - ..() - if (!(MUTATION_XRAY in user.mutations)) - user.mutations.Add(MUTATION_XRAY) - user.set_sight(user.sight|SEE_MOBS|SEE_OBJS|SEE_TURFS) - user.set_see_in_dark(8) - user.set_see_invisible(SEE_INVISIBLE_LEVEL_TWO) - to_chat(user, "The walls suddenly disappear.") - return 1 - return 0 - -/obj/item/contract/wizard/telepathy - name = "telepathy contract" - desc = "The edges of the contract grow blurry when you look away from them. To be fair, actually reading it gives you a headache." - color = "#fcc605" - -/obj/item/contract/wizard/telepathy/contract_effect(mob/user as mob) - ..() - if (!ishuman(user)) - return 0 - var/mob/living/carbon/human/H = user - if (mRemotetalk in H.mutations) - return 0 - H.mutations.Add(mRemotetalk) - H.verbs += /mob/living/carbon/human/proc/remotesay - to_chat(H, "You expand your mind outwards.") - return 1 - -/obj/item/contract/boon - name = "boon contract" - desc = "this contract grants you a boon for signing it." - var/path - -/obj/item/contract/boon/New(var/newloc, var/new_path) - ..(newloc) - if(new_path) - path = new_path - var/item_name = "" - if(ispath(path,/obj)) - var/obj/O = path - item_name = initial(O.name) - else if(ispath(path,/spell)) - var/spell/S = path - item_name = initial(S.name) - name = "[item_name] contract" - -/obj/item/contract/boon/contract_effect(mob/user as mob) - ..() - if(user.mind.special_role == ANTAG_SERVANT) - to_chat(user, "As a servant you find yourself unable to use this contract.") - return 0 - if(ispath(path,/spell)) - user.add_spell(new path) - return 1 - else if(ispath(path,/obj)) - new path(get_turf(user.loc)) - playsound(get_turf(usr),'sound/magic/charge.ogg',50,1) - return 1 - -/obj/item/contract/boon/wizard - contract_master = "\improper Wizard Academy" - -/obj/item/contract/boon/wizard/artificer - path = /spell/aoe_turf/conjure/construct - desc = "This contract has a passage dedicated to an entity known as 'Nar-Sie'." - -/obj/item/contract/boon/wizard/fireball - path = /spell/targeted/projectile/dumbfire/fireball - desc = "This contract feels warm to the touch." - -/obj/item/contract/boon/wizard/smoke - path = /spell/aoe_turf/smoke - desc = "This contract smells as dank as they come." - -/obj/item/contract/boon/wizard/forcewall - path = /spell/aoe_turf/conjure/forcewall - contract_master = "\improper Mime Federation" - desc = "This contract has a dedication to mimes everywhere at the top." - -/obj/item/contract/boon/wizard/knock - path = /spell/aoe_turf/knock - desc = "This contract is hard to hold still." - -/obj/item/contract/boon/wizard/horsemask - path = /spell/targeted/equip_item/horsemask - desc = "This contract is more horse than your mind has room for." - -/obj/item/contract/boon/wizard/charge - path = /spell/aoe_turf/charge - desc = "This contract is made of 100% post-consumer wizard." - diff --git a/code/modules/spells/general/acid_spray.dm b/code/modules/spells/general/acid_spray.dm deleted file mode 100644 index b6ed79d11cfc9..0000000000000 --- a/code/modules/spells/general/acid_spray.dm +++ /dev/null @@ -1,30 +0,0 @@ -/spell/acid_spray - name = "Acid Spray" - desc = "A common spell used to destroy basically anything in front of the wizard." - school = "conjuration" - feedback = "as" - spell_flags = 0 - charge_max = 600 - - invocation = "Tagopar lethodar!" - invocation_type = SpI_SHOUT - var/reagent_type = /datum/reagent/acid/hydrochloric - hud_state = "wiz_acid" - cast_sound = 'sound/magic/disintegrate.ogg' - -/spell/acid_spray/choose_targets() - return list(holder) - -/spell/acid_spray/cast(var/list/targets, var/mob/user) - var/atom/target = targets[1] - var/angle = dir2angle(target.dir) - for(var/mod in list(315, 0, 45)) - var/obj/effect/effect/water/chempuff/chem = new(get_turf(target)) - chem.create_reagents(10) - chem.reagents.add_reagent(reagent_type,10) - chem.set_color() - spawn(0) - chem.set_up(get_ranged_target_turf(target, angle2dir(angle+mod), 3)) - -/spell/acid_spray/tower - charge_max = 2 \ No newline at end of file diff --git a/code/modules/spells/general/area_teleport.dm b/code/modules/spells/general/area_teleport.dm deleted file mode 100644 index 8f61fbeb1d604..0000000000000 --- a/code/modules/spells/general/area_teleport.dm +++ /dev/null @@ -1,60 +0,0 @@ -/spell/area_teleport - name = "Teleport" - desc = "This spell teleports you to a type of area of your selection." - feedback = "TP" - school = "conjuration" - charge_max = 60 SECONDS - spell_flags = NEEDSCLOTHES - invocation = "Scyar Nila!" - invocation_type = SpI_SHOUT - cooldown_min = 200 //100 deciseconds reduction per rank - - smoke_spread = 1 - smoke_amt = 5 - - var/randomise_selection = 0 //if it lets the usr choose the teleport loc or picks it from the list - var/invocation_area = 1 //if the invocation appends the selected area - - cast_sound = 'sound/effects/teleport.ogg' - - hud_state = "wiz_tele" - -/spell/area_teleport/before_cast() - return - -/spell/area_teleport/choose_targets() - var/area/thearea - if(!randomise_selection) - thearea = input("Area to teleport to", "Teleport") as null|anything in wizteleportlocs - if(!thearea) - return - else - thearea = pick(wizteleportlocs) - return list(wizteleportlocs[thearea]) - -/spell/area_teleport/cast(area/thearea, mob/user) - playsound(get_turf(user),cast_sound,50,1) - var/turf/end = user.try_teleport(thearea) - - if(!end) - to_chat(user, "The spell matrix was unable to locate a suitable teleport destination for an unknown reason. Sorry.") - return - return - -/spell/area_teleport/check_valid_targets(list/targets) - // Teleport should function across z's, so we make sure that happens - // without this check, it only works for teleporting to areas you can see - return targets && islist(targets) && targets.len > 0 - -/spell/area_teleport/after_cast() - return - -/spell/area_teleport/invocation(mob/user, area/chosenarea) - if(!istype(chosenarea)) - return //can't have that, can we - if(!invocation_area || !chosenarea) - ..() - else - invocation += "[uppertext(chosenarea.name)]" - ..() - return diff --git a/code/modules/spells/general/contract_spells.dm b/code/modules/spells/general/contract_spells.dm deleted file mode 100644 index 774cfdf61e7c9..0000000000000 --- a/code/modules/spells/general/contract_spells.dm +++ /dev/null @@ -1,67 +0,0 @@ -//These spells are given to the owner of a contract when a victim signs it. -//As such they are REALLY REALLY powerful (because the victim is rewarded for signing it, and signing contracts is completely voluntary) - -/spell/contract - name = "Contract Spell" - desc = "A spell perfecting the techniques of keeping a servant happy and obedient." - - school = "transmutation" - spell_flags = 0 - invocation = "none" - invocation_type = SpI_NONE - - - var/mob/subject - -/spell/contract/New(var/mob/M) - ..() - subject = M - name += " ([M.real_name])" - -/spell/contract/choose_targets() - return list(subject) - -/spell/contract/cast(mob/target,mob/user) - if(!subject) - to_chat(usr, "This spell was not properly given a target. Contact a coder.") - return null - - if(istype(target,/list)) - target = target[1] - return target - - -/spell/contract/reward - name = "Reward Contractee" - desc = "A spell that makes your contracted victim feel better." - - charge_max = 300 - cooldown_min = 100 - - hud_state = "wiz_jaunt_old" - -/spell/contract/reward/cast(mob/living/target,mob/user) - target = ..(target,user) - if(!target) - return - - to_chat(target, "You feel great!") - target.ExtinguishMob() - -/spell/contract/punish - name = "Punish Contractee" - desc = "A spell that sets your contracted victim ablaze." - - charge_max = 300 - cooldown_min = 100 - - hud_state = "gen_immolate" - -/spell/contract/punish/cast(mob/living/target,mob/user) - target = ..(target,user) - if(!target) - return - - to_chat(target, "You feel punished!") - target.fire_stacks += 15 - target.IgniteMob() \ No newline at end of file diff --git a/code/modules/spells/general/create_air.dm b/code/modules/spells/general/create_air.dm deleted file mode 100644 index 1e70dd3c5f8ae..0000000000000 --- a/code/modules/spells/general/create_air.dm +++ /dev/null @@ -1,28 +0,0 @@ -/spell/create_air - name = "Create Air" - desc = "A much used spell used in the vasteness of space to make it not so killey." - - charge_max = 200 - spell_flags = Z2NOCAST - invocation = "none" - invocation_type = SpI_NONE - - number_of_channels = 0 - time_between_channels = 200 - hud_state = "wiz_air" - var/list/air_change = list(GAS_OXYGEN = ONE_ATMOSPHERE) - number_of_channels = 0 - -/spell/create_air/choose_targets() - var/air = holder.return_air() - if(air) - return list(air) - return null - -/spell/create_air/cast(var/list/targets, var/mob/holder, var/channel_count) - var/datum/gas_mixture/environment = targets[1] - for(var/gas in air_change) - environment.adjust_gas(gas, air_change[gas]) - -/spell/create_air/tower - charge_max = 5 \ No newline at end of file diff --git a/code/modules/spells/general/invisibility.dm b/code/modules/spells/general/invisibility.dm deleted file mode 100644 index 22df55b73f317..0000000000000 --- a/code/modules/spells/general/invisibility.dm +++ /dev/null @@ -1,24 +0,0 @@ -/spell/invisibility - name = "invisibility" - desc = "A simple spell of invisibility, for when you really just can't afford a paper bag." - feedback = "IV" - spell_flags = 0 - charge_max = 100 - invocation = "Ror Rim Or!" - invocation_type = SpI_SHOUT - var/on = 0 - hud_state = "invisibility" - -/spell/invisibility/choose_targets() - if(istype(holder, /mob/living/carbon/human)) - return holder - -/spell/invisibility/cast(var/mob/living/carbon/human/H, var/mob/user) - on = !on - if(on) - if(H.add_cloaking_source(src)) - playsound(get_turf(H), 'sound/effects/teleport.ogg', 90, 1) - H.mutations |= MUTATION_CLUMSY - else if(H.remove_cloaking_source(src)) - playsound(get_turf(H), 'sound/effects/stealthoff.ogg', 90, 1) - H.mutations -= MUTATION_CLUMSY \ No newline at end of file diff --git a/code/modules/spells/general/mark_recall.dm b/code/modules/spells/general/mark_recall.dm deleted file mode 100644 index e791df7d1c038..0000000000000 --- a/code/modules/spells/general/mark_recall.dm +++ /dev/null @@ -1,83 +0,0 @@ -/spell/mark_recall - name = "Mark and Recall" - desc = "This spell was created so wizards could get home from the bar without driving. Does not require wizard garb." - feedback = "MK" - school = "conjuration" - charge_max = 600 //1 minutes for how OP this shit is (apparently not as op as I thought) - spell_flags = Z2NOCAST - invocation = "Re-Alki R'natha." - invocation_type = SpI_WHISPER - cooldown_min = 300 - - smoke_amt = 1 - smoke_spread = 5 - - level_max = list(Sp_TOTAL = 4, Sp_SPEED = 4, Sp_POWER = 1) - - cast_sound = 'sound/effects/teleport.ogg' - hud_state = "wiz_mark" - var/mark = null - -/spell/mark_recall/choose_targets() - if(!mark) - return list("magical fairy dust") //because why not - else - return list(mark) - -/spell/mark_recall/cast(var/list/targets,mob/user) - if(!targets.len) - return 0 - var/target = targets[1] - if(istext(target)) - mark = new /obj/effect/cleanable/wizard_mark(get_turf(user),src) - return 1 - if(!istype(target,/obj)) //something went wrong - return 0 - var/turf/T = get_turf(target) - if(!T) - return 0 - user.forceMove(T) - ..() - -/spell/mark_recall/empower_spell() - if(!..()) - return 0 - - spell_flags = NO_SOMATIC - - return "You will always be able to cast this spell, even while unconscious or handcuffed." - -/obj/effect/cleanable/wizard_mark - name = "\improper Mark of the Wizard" - desc = "A strange rune said to be made by wizards. Or its just some shmuck playing with crayons again." - icon = 'icons/obj/rune.dmi' - icon_state = "wizard_mark" - - anchored = TRUE - unacidable = TRUE - layer = TURF_LAYER - - var/spell/mark_recall/spell - -/obj/effect/cleanable/wizard_mark/New(var/newloc,var/mrspell) - ..() - spell = mrspell - -/obj/effect/cleanable/wizard_mark/Destroy() - spell.mark = null //dereference pls. - spell = null - ..() - -/obj/effect/cleanable/wizard_mark/attack_hand(var/mob/user) - if(user == spell.holder) - user.visible_message("\The [user] mutters an incantation and \the [src] disappears!") - qdel(src) - ..() - -/obj/effect/cleanable/wizard_mark/attackby(var/obj/item/I, var/mob/user) - if(istype(I, /obj/item/nullrod) || istype(I, /obj/item/spellbook)) - user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN) - src.visible_message("\The [src] fades away!") - qdel(src) - return - ..() \ No newline at end of file diff --git a/code/modules/spells/general/portal_teleport.dm b/code/modules/spells/general/portal_teleport.dm deleted file mode 100644 index 32c20305fe71f..0000000000000 --- a/code/modules/spells/general/portal_teleport.dm +++ /dev/null @@ -1,68 +0,0 @@ -/spell/portal_teleport - name = "Create Portal" - desc = "This spell creates a long lasting portal to an area of your selection." - feedback = "TP" - school = "conjuration" - charge_max = 600 - spell_flags = NEEDSCLOTHES - invocation = "Scyar Peranda!" - invocation_type = SpI_SHOUT - charge_max = 30 MINUTES - cooldown_min = 25 MINUTES - - smoke_spread = 1 - smoke_amt = 5 - - var/list/select_areas = list() - - cast_sound = 'sound/effects/teleport.ogg' - - hud_state = "wiz_tele" - -/spell/portal_teleport/before_cast() - return - -/spell/portal_teleport/choose_targets() - var/area/thearea - var/message = alert("Would you like to show station areas?\nNote: it can take up to 5 minutes for the away sites to load in and show up.",, "Yes", "No") - switch(message) - if("Yes") - select_areas = stationlocs - if("No") - select_areas = (stationlocs) ^ (wizportallocs) - - thearea = input("Area to teleport to", "Teleport") as null|anything in select_areas - if(!thearea) return - - return list(select_areas[thearea]) - -/spell/portal_teleport/cast(area/thearea, mob/user) - playsound(get_turf(user),cast_sound,50,1) - var/turf/start = get_turf(user) - var/turf/end = user.try_teleport(thearea) - - if(!end) - to_chat(user, "The spell matrix was unable to locate a suitable teleport destination for an unknown reason. Sorry.") - return - - new /obj/effect/portal/wizard(start, end, 35 MINUTES) - new /obj/effect/portal/wizard(end, start, 35 MINUTES) - - return - -/spell/portal_teleport/after_cast() - return - -/spell/portal_teleport/invocation(mob/user, area/chosenarea) - if(!chosenarea || !istype(chosenarea)) - ..() - else - invocation += "[uppertext(chosenarea.name)]" - ..() - return - -/obj/effect/portal/wizard - name = "dark anomaly" - desc = "It pulls on the edges of reality as if trying to draw them in." - icon = 'icons/obj/objects.dmi' - icon_state = "bhole3" diff --git a/code/modules/spells/general/radiant_aura.dm b/code/modules/spells/general/radiant_aura.dm deleted file mode 100644 index 2c243896eb989..0000000000000 --- a/code/modules/spells/general/radiant_aura.dm +++ /dev/null @@ -1,26 +0,0 @@ -/spell/radiant_aura - name = "Radiant aura" - desc = "Form a protective layer of light around you, making you immune to laser fire." - school = "transmutation" - feedback = "ra" - invocation_type = SpI_EMOTE - invocation = "conjures a sphere of fire around themselves." - school = "conjuration" - spell_flags = NEEDSCLOTHES - charge_max = 300 - cooldown_min = 100 - level_max = list(Sp_TOTAL = 2, Sp_SPEED = 2, Sp_POWER = 0) - cast_sound = 'sound/effects/snap.ogg' - duration = 40 - hud_state = "gen_immolate" - -/spell/radiant_aura/choose_targets() - return list(holder) - -/spell/radiant_aura/cast(var/list/targets, var/mob/user) - var/obj/aura/radiant_aura/A = new(user) - QDEL_IN(A,duration) - -/spell/radiant_aura/starlight - spell_flags = 0 - charge_max = 400 \ No newline at end of file diff --git a/code/modules/spells/general/return_master.dm b/code/modules/spells/general/return_master.dm deleted file mode 100644 index fd458da1f0c0d..0000000000000 --- a/code/modules/spells/general/return_master.dm +++ /dev/null @@ -1,23 +0,0 @@ -/spell/contract/return_master - name = "Return to Master" - desc = "Teleport back to your master." - - school = "conjuration" - charge_max = 600 - spell_flags = 0 - invocation = "none" - invocation_type = SpI_NONE - cooldown_min = 200 - - smoke_spread = 1 - smoke_amt = 5 - - hud_state = "wiz_tele" - - -/spell/contract/return_master/cast(mob/target,mob/user) - target = ..(target,user) - if(!target) - return - - user.forceMove(get_turf(target)) \ No newline at end of file diff --git a/code/modules/spells/general/tear_veil.dm b/code/modules/spells/general/tear_veil.dm deleted file mode 100644 index 02a117c350417..0000000000000 --- a/code/modules/spells/general/tear_veil.dm +++ /dev/null @@ -1,37 +0,0 @@ -/spell/tear_veil - name = "Tear Veil" - desc = "Use your mental strength to literally tear a hole from this dimension to the next, letting things through..." - - charge_max = 300 - spell_flags = Z2NOCAST - invocation = "none" - invocation_type = SpI_NONE - - number_of_channels = 0 - time_between_channels = 200 - hud_state = "const_floor" - cast_sound = 'sound/effects/meteorimpact.ogg' - var/list/possible_spawns = list( - /mob/living/simple_animal/hostile/scarybat/cult, - /mob/living/simple_animal/hostile/creature/cult, - /mob/living/simple_animal/hostile/faithless/cult - ) - -/spell/tear_veil/choose_targets() - var/turf/T = get_turf(holder) - holder.visible_message("A strange portal rips open underneath \the [holder]!") - var/obj/effect/gateway/hole = new(get_turf(T)) - hole.density = FALSE - return list(hole) - -/spell/tear_veil/cast(var/list/targets, var/mob/holder, var/channel_count) - if(channel_count == 1) - return - var/type = pick(possible_spawns) - var/mob/living/L = new type(get_turf(targets[1])) - L.faction = holder.faction - L.visible_message("\A [L] escapes from the portal!") - -/spell/tear_veil/after_spell(var/list/targets) - qdel(targets[1]) - return \ No newline at end of file diff --git a/code/modules/spells/general/toggle_armor.dm b/code/modules/spells/general/toggle_armor.dm deleted file mode 100644 index a4a853731700f..0000000000000 --- a/code/modules/spells/general/toggle_armor.dm +++ /dev/null @@ -1,121 +0,0 @@ -/spell/toggle_armor - name = "Toggle Armor" - spell_flags = 0 - charge_max = 10 - school = "Conjuration" - var/list/armor_pieces - var/equip = 0 - hud_state = "const_shell" - -/spell/toggle_armor/New() - if(armor_pieces) - var/list/nlist = list() - for(var/type in armor_pieces) - var/obj/item/I = new type(null) - nlist[I] = armor_pieces[type] - armor_pieces = nlist - return ..() - -/spell/toggle_armor/proc/drop_piece(var/obj/I) - if(istype(I.loc, /mob)) - var/mob/M = I.loc - M.drop_from_inventory(I) - -/spell/toggle_armor/choose_targets() - return list(holder) - -/spell/toggle_armor/cast(var/list/targets, var/mob/user) - equip = !equip - name = "[initial(name)] ([equip ? "off" : "on"])" - if(equip) - for(var/piece in armor_pieces) - var/slot = armor_pieces[piece] - drop_piece(piece) - user.drop_from_inventory(user.get_equipped_item(slot)) - user.equip_to_slot_if_possible(piece, slot, TRYEQUIP_REDRAW | TRYEQUIP_SILENT | TRYEQUIP_FORCE) - else - for(var/piece in armor_pieces) - var/obj/item/I = piece - drop_piece(piece) - I.forceMove(null) - -/spell/toggle_armor/greytide_worldwide - name = "Greytide Worldwide" - invocation_type = SpI_EMOTE - invocation = "screams incoherently!" - armor_pieces = list(/obj/item/clothing/under/color/grey = slot_w_uniform, - /obj/item/clothing/gloves/insulated/cheap = slot_gloves, - /obj/item/clothing/mask/gas = slot_wear_mask, - /obj/item/clothing/shoes/black = slot_shoes, - /obj/item/storage/toolbox/mechanical = slot_r_hand, - /obj/item/extinguisher = slot_l_hand) - -/spell/toggle_armor/caretaker - name = "Toggle Armor (Caretaker)" - invocation_type = SpI_EMOTE - invocation = "radiates a holy light" - armor_pieces = list(/obj/item/clothing/head/caretakerhood = slot_head, - /obj/item/clothing/suit/caretakercloak = slot_wear_suit - ) - hud_state = "caretaker" - -/spell/toggle_armor/champion - name = "Toggle Armor (Champion)" - invocation_type = SpI_EMOTE - invocation = "is covered in golden embers for a moment, before they fade" - armor_pieces = list(/obj/item/clothing/head/champhelm = slot_head, - /obj/item/clothing/suit/champarmor = slot_wear_suit - ) - hud_state = "champion" - -/spell/toggle_armor/excalibur - name = "Toggle Sword" - invocation_type = SpI_EMOTE - invocation = "thrusts /his hand forward, and it is enveloped in golden embers!" - armor_pieces = list(/obj/item/excalibur = slot_r_hand) - hud_state = "excalibur" - -/spell/toggle_armor/fiend - name = "Toggle Armor (Fiend)" - invocation_type = SpI_EMOTE - invocation = "snaps /his fingers, and /his clothes begin to shift and change" - armor_pieces = list(/obj/item/clothing/head/fiendhood = slot_head, - /obj/item/clothing/suit/fiendcowl = slot_wear_suit - ) - hud_state = "fiend" - -/spell/toggle_armor/fiend/fem - armor_pieces = list(/obj/item/clothing/head/fiendhood/fem = slot_head, - /obj/item/clothing/suit/fiendcowl/fem = slot_wear_suit - ) - -/spell/toggle_armor/infiltrator - name = "Toggle Armor (Infiltrator)" - invocation_type = SpI_EMOTE - invocation = "winks. In an instant, /his clothes change dramatically" - armor_pieces = list(/obj/item/clothing/head/infilhat = slot_head, - /obj/item/clothing/suit/infilsuit = slot_wear_suit - ) - hud_state = "infiltrator" - -/spell/toggle_armor/infiltrator/fem - armor_pieces = list(/obj/item/clothing/head/infilhat/fem = slot_head, - /obj/item/clothing/suit/infilsuit/fem = slot_wear_suit - ) - -/spell/toggle_armor/infil_items - name = "Toggle Counterfeit Kit" - invocation_type = SpI_EMOTE - invocation = "flicks /his wrists, one at a time" - armor_pieces = list(/obj/item/stamp/chameleon = slot_l_hand, - /obj/item/pen/chameleon = slot_r_hand) - hud_state = "forgery" - -/spell/toggle_armor/overseer - name = "Toggle Armor (Overseer)" - invocation_type = SpI_EMOTE - invocation = " is enveloped in shadows, before /his form begins to shift rapidly" - armor_pieces = list(/obj/item/clothing/head/overseerhood = slot_head, - /obj/item/clothing/suit/straight_jacket/overseercloak = slot_wear_suit - ) - hud_state = "overseer" \ No newline at end of file diff --git a/code/modules/spells/general/veil_of_shadows.dm b/code/modules/spells/general/veil_of_shadows.dm deleted file mode 100644 index fd78bb3ed852f..0000000000000 --- a/code/modules/spells/general/veil_of_shadows.dm +++ /dev/null @@ -1,57 +0,0 @@ -/spell/veil_of_shadows - name = "Veil of Shadows" - desc = "Become intangable, invisible. Like a ghost." - charge_max = 400 - invocation_type = SpI_EMOTE - invocation = "flickers out of existance" - school = "Divine" //Means that it doesn't proc the deity's spell cost. - spell_flags = 0 - duration = 100 - var/timer_id - var/light_steps = 4 - - hud_state = "wiz_statue" - -/spell/veil_of_shadows/choose_targets() - if(!timer_id && istype(holder,/mob/living/carbon/human)) - return list(holder) - . = null - -/spell/veil_of_shadows/cast(var/list/targets, var/mob/user) - var/mob/living/carbon/human/H = user - H.AddMovementHandler(/datum/movement_handler/mob/incorporeal) - if(H.add_cloaking_source(src)) - H.visible_message("\The [H] shrinks from view!") - GLOB.moved_event.register(H,src,.proc/check_light) - timer_id = addtimer(CALLBACK(src,.proc/cancel_veil),duration, TIMER_STOPPABLE) - -/spell/veil_of_shadows/proc/cancel_veil() - var/mob/living/carbon/human/H = holder - H.RemoveMovementHandler(/datum/movement_handler/mob/incorporeal) - deltimer(timer_id) - timer_id = null - var/turf/T = get_turf(H) - if(T.get_lumcount() > 0.1) //If we're somewhere somewhat shadowy we can stay invis as long as we stand still - drop_cloak() - else - GLOB.moved_event.unregister(H,src) - GLOB.moved_event.register(H,src,.proc/drop_cloak) - -/spell/veil_of_shadows/proc/drop_cloak() - var/mob/living/carbon/human/H = holder - if(H.remove_cloaking_source(src)) - H.visible_message("\The [H] appears from nowhere!") - GLOB.moved_event.unregister(H,src) - -/spell/veil_of_shadows/proc/check_light() - if(light_steps) - light_steps-- - return - light_steps = initial(light_steps) - for(var/obj/machinery/light/light in view(1,holder)) - light.flicker(20) - -/spell/veil_of_shadows/Destroy() - deltimer(timer_id) - cancel_veil() - .= ..() \ No newline at end of file diff --git a/code/modules/spells/hand/blood_shards.dm b/code/modules/spells/hand/blood_shards.dm deleted file mode 100644 index 442c9ae0c6ff5..0000000000000 --- a/code/modules/spells/hand/blood_shards.dm +++ /dev/null @@ -1,40 +0,0 @@ -/spell/hand/charges/blood_shard - name = "Blood Shards" - desc = "Invoke a corrupted projectile forward that causes an enemy's blood to fly out in painful shards." - - spell_flags = 0 - charge_max = 600 - invocation = "opens their hand, which bursts into vicious red light." - invocation_type = SpI_EMOTE - - range = 7 - max_casts = 2 - compatible_targets = list(/atom) - hud_state = "wiz_bshard" - cast_sound = 'sound/magic/demon_attack1.ogg' - -/spell/hand/charges/blood_shard/cast_hand(var/atom/A,var/mob/user) - var/obj/item/projectile/blood_shard/B = new(get_turf(user)) - B.firer = user - B.launch(A, BP_CHEST) - user.visible_message("\The [user] shoots out a deep red shard from their hand!") - return ..() - -/obj/item/projectile/blood_shard - name = "bloodshard" - damage = 25 - icon_state = "blood" - damage_type = DAMAGE_BRUTE - damage_flags = 0 - -/obj/item/projectile/blood_shard/on_hit(var/atom/movable/target, var/blocked = 0) - if(..()) - if(istype(target, /mob/living/carbon/human)) - var/mob/living/carbon/human/H = target - H.vessel.remove_reagent(/datum/reagent/blood, 30) - H.visible_message("Tiny red shards burst from \the [H]'s skin!") - fragmentate(get_turf(src), 30, 5, list(/obj/item/projectile/bullet/pellet/blood)) - -/obj/item/projectile/bullet/pellet/blood - name = "blood fragment" - damage = 10 diff --git a/code/modules/spells/hand/burning_grip.dm b/code/modules/spells/hand/burning_grip.dm deleted file mode 100644 index e0923de6010be..0000000000000 --- a/code/modules/spells/hand/burning_grip.dm +++ /dev/null @@ -1,42 +0,0 @@ -/spell/hand/burning_grip - name = "Burning Grip" - desc = "Cause someone to drop a held object by causing it to heat up intensly." - school = "transmutation" - feedback = "bg" - range = 5 - spell_flags = 0 - invocation_type = SpI_NONE - show_message = " throws sparks from their hands" - spell_delay = 120 - hud_state = "wiz_burn" - cast_sound = 'sound/magic/fireball.ogg' - compatible_targets = list(/mob/living/carbon/human) - -/spell/hand/burning_grip/valid_target(var/mob/living/L, var/mob/user) - if(!..()) - return 0 - if(!L.l_hand && !L.r_hand) - return 0 - return 1 - -/spell/hand/burning_grip/cast_hand(var/mob/living/carbon/human/H, var/mob/user) - var/list/targets = list() - if(H.l_hand) - targets += BP_L_HAND - if(H.r_hand) - targets += BP_R_HAND - - var/obj/O = new /obj/effect/temporary(get_turf(H),3, 'icons/effects/effects.dmi', "fire_goon") - O.alpha = 150 - - for(var/organ in targets) - var/obj/item/organ/external/E = H.get_organ(organ) - E.take_external_damage(burn=10, used_weapon = "hot iron") - if(E.can_feel_pain()) - H.grasp_damage_disarm(E) - else - E.take_external_damage(burn=6, used_weapon = "hot iron") - to_chat(H, "You look down to notice that your [E] is burned.") - -/spell/hand/burning_grip/tower - charge_max = 3 \ No newline at end of file diff --git a/code/modules/spells/hand/entangle.dm b/code/modules/spells/hand/entangle.dm deleted file mode 100644 index 5f20545cab5dd..0000000000000 --- a/code/modules/spells/hand/entangle.dm +++ /dev/null @@ -1,51 +0,0 @@ -/spell/hand/charges/entangle - name = "Entangle" - desc = "This spell creates vines that immediately entangle a nearby victim." - feedback = "ET" - school = "transmutation" - charge_max = 600 - spell_flags = NEEDSCLOTHES | SELECTABLE | IGNOREPREV - invocation = "Bu-Ekel'Inas!" - invocation_type = SpI_SHOUT - range = 3 - max_casts = 1 - - level_max = list(Sp_TOTAL = 2, Sp_SPEED = 2, Sp_POWER = 2) - cooldown_min = 300 - duration = 30 - compatible_targets = list(/mob) - - hud_state = "wiz_entangle" - cast_sound = 'sound/magic/staff_door.ogg' - show_message = " points towards the ground, causing plants to erupt" - var/datum/seed/seed - -/spell/hand/charges/entangle/New() - ..() - seed = new() - seed.set_trait(TRAIT_PLANT_ICON,"flower") - seed.set_trait(TRAIT_PRODUCT_ICON,"flower2") - seed.set_trait(TRAIT_PRODUCT_COLOUR,"#4d4dff") - seed.set_trait(TRAIT_SPREAD,2) - seed.name = "heirlooms" - seed.seed_name = "heirloom" - seed.display_name = "vines" - seed.chems = list(/datum/reagent/nutriment = list(1,20)) - -/spell/hand/charges/entangle/cast_hand(var/mob/M,var/mob/user) - var/turf/T = get_turf(M) - var/obj/effect/vine/single/P = new(T,seed, start_matured =1) - P.can_buckle = 1 - - P.buckle_mob(M) - M.set_dir(pick(GLOB.cardinal)) - M.visible_message("[P] appear from the floor, spinning around \the [M] tightly!") - return ..() - -/spell/hand/charges/entangle/empower_spell() - if(!..()) - return 0 - - max_casts++ - - return "This spell will now entangle [max_casts] times before running out." \ No newline at end of file diff --git a/code/modules/spells/hand/hand.dm b/code/modules/spells/hand/hand.dm deleted file mode 100644 index 1bbab934dc1fe..0000000000000 --- a/code/modules/spells/hand/hand.dm +++ /dev/null @@ -1,83 +0,0 @@ -/spell/hand - var/min_range = 0 - var/list/compatible_targets = list(/atom) - var/spell_delay = 5 - var/move_delay - var/click_delay - var/hand_state = "spell" - var/obj/item/magic_hand/current_hand - var/show_message - -/spell/hand/choose_targets(mob/user = usr) - return list(user) - -/spell/hand/cast_check(skipcharge = 0,mob/user = usr, var/list/targets) - if(!..()) - return FALSE - if(user.get_active_hand()) - to_chat(holder, "You need an empty hand to cast this spell.") - return FALSE - return TRUE - -/spell/hand/cast(list/targets, mob/user) - if(current_hand) - cancel_hand() - if(user.get_active_hand()) - to_chat(user, "You need an empty hand to cast this spell.") - return FALSE - current_hand = new(src) - if(!user.put_in_active_hand(current_hand)) - QDEL_NULL(current_hand) - return FALSE - return TRUE - -/spell/hand/proc/cancel_hand() - if(!QDELETED(current_hand)) - QDEL_NULL(current_hand) - -/spell/hand/Destroy() - qdel(current_hand) - . = ..() - -/spell/hand/proc/valid_target(var/atom/a,var/mob/user) //we use separate procs for our target checking for the hand spells. - var/distance = get_dist(a,user) - if((min_range && distance < min_range) || (range && distance > range)) - return FALSE - if(!is_type_in_list(a,compatible_targets)) - return FALSE - return TRUE - -/spell/hand/proc/cast_hand(var/atom/a,var/mob/user) //same for casting. - return TRUE - -/spell/hand/charges - var/casts = 1 - var/max_casts = 1 - -/spell/hand/charges/cast(list/targets, mob/user) - . = ..() - if(.) - casts = max_casts - to_chat(user, "You ready the [name] spell ([casts]/[casts] charges).") - -/spell/hand/charges/cast_hand() - if(..()) - casts-- - to_chat(holder, "The [name] spell has [casts] out of [max_casts] charges left") - cancel_hand() - return TRUE - return FALSE - -/spell/hand/duration - var/hand_timer = null - var/hand_duration = 0 - -/spell/hand/duration/cast(var/list/targets, var/mob/user) - . = ..() - if(.) - hand_timer = addtimer(CALLBACK(src, .proc/cancel_hand), hand_duration, TIMER_STOPPABLE|TIMER_UNIQUE|TIMER_NO_HASH_WAIT|TIMER_OVERRIDE) - -/spell/hand/duration/cancel_hand() - deltimer(hand_timer) - hand_timer = null - ..() \ No newline at end of file diff --git a/code/modules/spells/hand/hand_item.dm b/code/modules/spells/hand/hand_item.dm deleted file mode 100644 index be5c33e41b24a..0000000000000 --- a/code/modules/spells/hand/hand_item.dm +++ /dev/null @@ -1,66 +0,0 @@ -/*much like grab this item is used primarily for the utility it provides. -Basically: I can use it to target things where I click. I can then pass these targets to a spell and target things not using a list. -*/ - -/obj/item/magic_hand - name = "Magic Hand" - icon = 'icons/mob/screen1.dmi' - atom_flags = 0 - item_flags = 0 - obj_flags = 0 - simulated = FALSE - icon_state = "spell" - var/next_spell_time = 0 - var/spell/hand/hand_spell - -/obj/item/magic_hand/New(var/spell/hand/S) - hand_spell = S - name = "[name] ([S.name])" - icon_state = S.hand_state - -/obj/item/magic_hand/get_storage_cost() - return ITEM_SIZE_NO_CONTAINER - -/obj/item/magic_hand/attack(var/mob/living/M, var/mob/living/user) - if(hand_spell && hand_spell.valid_target(M, user)) - fire_spell(M, user) - return 0 - return 1 - -/obj/item/magic_hand/proc/fire_spell(var/atom/A, mob/living/user) - if(!hand_spell) //no spell? Die. - user.drop_from_inventory(src) - - if(!hand_spell.valid_target(A,user)) - return - if(world.time < next_spell_time) - to_chat(user, "The spell isn't ready yet!") - return - if(user.a_intent == I_HELP) - to_chat(user, "You decide against casting this spell as your intent is set to help.") - return - - if(hand_spell.show_message) - user.visible_message("\The [user][hand_spell.show_message]") - if(hand_spell.cast_hand(A,user)) - next_spell_time = world.time + hand_spell.spell_delay - if(hand_spell.move_delay) - user.ExtraMoveCooldown(hand_spell.move_delay) - if(hand_spell.click_delay) - user.setClickCooldown(hand_spell.move_delay) - -/obj/item/magic_hand/afterattack(var/atom/A, var/mob/user, var/proximity) - if(hand_spell) - fire_spell(A,user) - -/obj/item/magic_hand/throw_at() //no throwing pls - usr.drop_from_inventory(src) - -/obj/item/magic_hand/dropped() //gets deleted on drop - ..() - qdel(src) - -/obj/item/magic_hand/Destroy() //better save than sorry. - hand_spell.current_hand = null - hand_spell = null - . = ..() \ No newline at end of file diff --git a/code/modules/spells/hand/slippery_surface.dm b/code/modules/spells/hand/slippery_surface.dm deleted file mode 100644 index cd7158921c0f0..0000000000000 --- a/code/modules/spells/hand/slippery_surface.dm +++ /dev/null @@ -1,21 +0,0 @@ -/spell/hand/slippery_surface - name = "Slippery Surface" - desc = "More of a practical joke than an actual spell." - school = "transmutation" - feedback = "su" - range = 5 - spell_flags = 0 - invocation_type = SpI_NONE - show_message = " snaps their fingers." - spell_delay = 50 - hud_state = "gen_ice" - cast_sound = 'sound/magic/summonitems_generic.ogg' - -/spell/hand/slippery_surface/cast_hand(var/atom/a, var/mob/user) - for(var/turf/simulated/T in view(1,a)) - T.wet_floor(50) - new /obj/effect/temporary(T,3, 'icons/effects/effects.dmi', "sonar_ping") - return ..() - -/spell/hand/slippery_surface/tower - charge_max = 2 \ No newline at end of file diff --git a/code/modules/spells/hand/sunwrath.dm b/code/modules/spells/hand/sunwrath.dm deleted file mode 100644 index 4496c985d9f8e..0000000000000 --- a/code/modules/spells/hand/sunwrath.dm +++ /dev/null @@ -1,33 +0,0 @@ -/spell/hand/duration/sunwrath - name = "sun god's wrath" - desc = "Your hands become a gateway of fire, shooting hot plasma from your fingertips." - spell_flags = 0 - charge_max = 600 - invocation_type = SpI_SHOUT - invocation = "Herald! Bless me with your anger!" - show_message = " erupts fire from their hands" - school = "Divine" - hand_duration = 100 - spell_delay = 30 - range = 4 - - hud_state = "wiz_immolate" - -/spell/hand/duration/sunwrath/cast_hand(var/atom/A, var/mob/user) - var/turf/T = get_turf(user) - var/list/turfs = getline(T,A) - T - for(var/t in turfs) - var/turf/turf = t - if(turf.density || istype(turf, /turf/space)) - break - new /obj/effect/fake_fire/sunwrath(t) - return 1 - -/obj/effect/fake_fire/sunwrath - firelevel = 2 - last_temperature = 0 - pressure = 3000 - -/obj/effect/fake_fire/sunwrath/Process() //Override, so we burn mobs only - for(var/mob/living/L in loc) - L.FireBurn(firelevel,last_temperature,pressure) \ No newline at end of file diff --git a/code/modules/spells/no_clothes.dm b/code/modules/spells/no_clothes.dm deleted file mode 100644 index 3b85029235194..0000000000000 --- a/code/modules/spells/no_clothes.dm +++ /dev/null @@ -1,5 +0,0 @@ -/spell/noclothes - name = "No Clothes" - desc = "Learn the ancient art of not wearing fancy robes while casting spells." - feedback = "NC" - spell_flags = NO_BUTTON \ No newline at end of file diff --git a/code/modules/spells/racial_wizard.dm b/code/modules/spells/racial_wizard.dm deleted file mode 100644 index 6477c13829ed1..0000000000000 --- a/code/modules/spells/racial_wizard.dm +++ /dev/null @@ -1,262 +0,0 @@ -//this file is full of all the racial spells/artifacts/etc that each species has. - -/obj/item/magic_rock - name = "magical rock" - desc = "Legends say that this rock will unlock the true potential of anyone who touches it." - icon = 'icons/obj/wizard.dmi' - icon_state = "magic rock" - w_class = ITEM_SIZE_SMALL - throw_speed = 1 - throw_range = 3 - force = 15 - var/list/potentials = list( - SPECIES_HUMAN = /obj/item/storage/bag/cash/infinite, - SPECIES_VOX = /spell/targeted/shapeshift/true_form, - SPECIES_UNATHI = /spell/moghes_blessing, - SPECIES_DIONA = /spell/aoe_turf/conjure/grove/gestalt, - SPECIES_SKRELL = /obj/item/contract/apprentice/skrell, - SPECIES_IPC = /spell/camera_connection) - -/obj/item/magic_rock/attack_self(mob/user) - if(!istype(user,/mob/living/carbon/human)) - to_chat(user, "\The [src] can do nothing for such a simple being.") - return - var/mob/living/carbon/human/H = user - var/reward = potentials[H.species.get_bodytype(H)] //we get body type because that lets us ignore subspecies. - if(!reward) - to_chat(user, "\The [src] does not know what to make of you.") - return - for(var/spell/S in user.mind.learned_spells) - if(istype(S,reward)) - to_chat(user, "\The [src] can do no more for you.") - return - var/a = new reward() - if(ispath(reward,/spell)) - H.add_spell(a) - else if(ispath(reward,/obj)) - H.put_in_hands(a) - to_chat(user, "\The [src] crumbles in your hands.") - qdel(src) - -/obj/item/storage/bag/cash/infinite - startswith = list(/obj/item/spacecash/bundle/c1000 = 1) - -//HUMAN -/obj/item/storage/bag/cash/infinite/remove_from_storage(obj/item/W as obj, atom/new_location) - . = ..() - if(.) - if(istype(W,/obj/item/spacecash)) //only matters if its spacecash. - var/obj/item/I = new /obj/item/spacecash/bundle/c1000() - src.handle_item_insertion(I,1) - -/spell/messa_shroud/choose_targets() - return list(get_turf(holder)) - -/spell/messa_shroud/cast(var/list/targets, mob/user) - var/turf/T = targets[1] - - if(!istype(T)) - return - - var/obj/O = new /obj(T) - O.set_light(-10, 0.1, 10, 2, "#ffffff") - - spawn(duration) - qdel(O) - -//VOX -/spell/targeted/shapeshift/true_form - name = "True Form" - desc = "Pay respect to your heritage. Become what you once were." - - school = "racial" - spell_flags = INCLUDEUSER - invocation_type = SpI_EMOTE - range = -1 - invocation = "begins to grow!" - charge_max = 1200 //2 minutes - duration = 300 //30 seconds - - smoke_amt = 5 - smoke_spread = 1 - - possible_transformations = list(/mob/living/simple_animal/hostile/retaliate/parrot/space/lesser) - - hud_state = "wiz_vox" - - cast_sound = 'sound/voice/shriek1.ogg' - revert_sound = 'sound/voice/shriek1.ogg' - - drop_items = 0 - - -//UNATHI -/spell/moghes_blessing - name = "Moghes Blessing" - desc = "Imbue your weapon with memories of Moghes." - - school = "racial" - spell_flags = 0 - invocation_type = SpI_EMOTE - invocation = "whispers something." - charge_type = Sp_HOLDVAR - holder_var_type = "bruteloss" - holder_var_amount = 10 - - hud_state = "wiz_unathi" - -/spell/moghes_blessing/choose_targets(mob/user = usr) - var/list/hands = list() - for(var/obj/item/I in list(user.l_hand, user.r_hand)) - //make sure it's not already blessed - if(istype(I) && !has_extension(I, /datum/extension/moghes_blessing)) - hands += I - return hands - -/spell/moghes_blessing/cast(var/list/targets, mob/user) - for(var/obj/item/I in targets) - set_extension(I, /datum/extension/moghes_blessing) - -/datum/extension/moghes_blessing - base_type = /datum/extension/moghes_blessing - expected_type = /obj/item - flags = EXTENSION_FLAG_IMMEDIATE - -/datum/extension/moghes_blessing/New(var/datum/holder) - ..(holder) - apply_blessing(holder) - -/datum/extension/moghes_blessing/proc/apply_blessing(obj/item/I) - I.name += " of Moghes" - I.desc += "
                  It has been imbued with the memories of Moghes." - I.force += 10 - I.throwforce += 14 - I.color = "#663300" - -//DIONA -/spell/aoe_turf/conjure/grove/gestalt - name = "Convert Gestalt" - desc = "Converts the surrounding area into a diona gestalt." - - school = "racial" - spell_flags = 0 - invocation_type = SpI_EMOTE - invocation = "rumbles as strange alien growth quickly overtakes their surroundings." - - charge_type = Sp_HOLDVAR - holder_var_type = "bruteloss" - holder_var_amount = 20 - - spell_flags = Z2NOCAST | IGNOREPREV | IGNOREDENSE - summon_type = list(/turf/simulated/floor/diona) - seed_type = /datum/seed/diona - - hud_state = "wiz_diona" - -//SKRELL -/obj/item/contract/apprentice/skrell - name = "skrellian apprenticeship contract" - var/obj/item/spellbook/linked - color = "#3366ff" - contract_spells = list(/spell/contract/return_master) //somewhat of a necessity due to how many spells they would have after a while. - -/obj/item/contract/apprentice/skrell/New(var/newloc,var/spellbook, var/owner) - ..() - if(istype(spellbook,/obj/item/spellbook)) - linked = spellbook - if(istype(owner,/mob)) - contract_master = owner - -/obj/item/contract/apprentice/skrell/attack_self(mob/user as mob) - if(!linked) - to_chat(user, "This contract requires a link to a spellbook.") - return - ..() - -/obj/item/contract/apprentice/skrell/afterattack(atom/A, mob/user as mob, proximity) - if(!linked && istype(A,/obj/item/spellbook)) - linked = A - to_chat(user, "You've linked \the [A] to \the [src]") - return - ..() - -/obj/item/contract/apprentice/skrell/contract_effect(mob/user as mob) - . = ..() - if(.) - linked.uses += 0.5 - var/obj/item/I = new /obj/item/contract/apprentice/skrell(get_turf(src),linked,contract_master) - user.put_in_hands(I) - new /obj/item/contract/apprentice/skrell(get_turf(src),linked,contract_master) - -//IPC -/spell/camera_connection - name = "Camera Connection" - desc = "This spell allows the wizard to connect to the local camera network and see what it sees." - - school = "racial" - - invocation_type = SpI_EMOTE - invocation = "emits a beeping sound before standing very, very still." - - charge_max = 600 //1 minute - charge_type = Sp_RECHARGE - - - spell_flags = Z2NOCAST - hud_state = "wiz_IPC" - var/mob/observer/eye/vision - var/eye_type = /mob/observer/eye/wizard_eye - -/spell/camera_connection/New() - ..() - vision = new eye_type(src) - -/spell/camera_connection/Destroy() - qdel(vision) - vision = null - . = ..() - -/spell/camera_connection/choose_targets() - var/mob/living/L = holder - if(!istype(L) || L.eyeobj) //no using if we already have an eye on. - return null - return list(holder) - -/spell/camera_connection/cast(var/list/targets, mob/user) - var/mob/living/L = targets[1] - - vision.possess(L) - GLOB.destroyed_event.register(L, src, /spell/camera_connection/proc/release) - GLOB.logged_out_event.register(L, src, /spell/camera_connection/proc/release) - L.verbs += /mob/living/proc/release_eye - -/spell/camera_connection/proc/release(var/mob/living/L) - vision.release(L) - L.verbs -= /mob/living/proc/release_eye - GLOB.destroyed_event.unregister(L, src) - GLOB.logged_out_event.unregister(L, src) - -/mob/observer/eye/wizard_eye - name_sufix = "Wizard Eye" - -/mob/observer/eye/wizard_eye/New() //we dont use the Ai one because it has AI specific procs imbedded in it. - ..() - visualnet = cameranet - -/mob/living/proc/release_eye() - set name = "Release Vision" - set desc = "Return your sight to your body." - set category = "Abilities" - - verbs -= /mob/living/proc/release_eye //regardless of if we have an eye or not we want to get rid of this verb. - - if(!eyeobj) - return - eyeobj.release(src) - -/mob/observer/eye/wizard_eye/Destroy() - if(istype(eyeobj.owner, /mob/living)) - var/mob/living/L = eyeobj.owner - L.release_eye() - qdel(eyeobj) - return ..() \ No newline at end of file diff --git a/code/modules/spells/spell_code.dm b/code/modules/spells/spell_code.dm deleted file mode 100644 index 21ee72d2c4ab8..0000000000000 --- a/code/modules/spells/spell_code.dm +++ /dev/null @@ -1,398 +0,0 @@ -var/global/list/spells = typesof(/spell) //needed for the badmin verb for now - -/spell - var/name = "Spell" - var/desc = "A spell." - var/feedback = "" //what gets sent if this spell gets chosen by the spellbook. - parent_type = /datum - var/panel = "Spells"//What panel the proc holder needs to go on. - - var/school = "evocation" //not relevant at now, but may be important later if there are changes to how spells work. the ones I used for now will probably be changed... maybe spell presets? lacking flexibility but with some other benefit? - /*Spell schools as follows: - Racial - Only tagged to spells gained for being a certain race - Conjuration - Creating an object or transporting it. - Transmutation - Modifying an object or transforming it. - Illusion - Altering perception or thought. - */ - var/charge_type = Sp_RECHARGE //can be recharge or charges, see charge_max and charge_counter descriptions; can also be based on the holder's vars now, use "holder_var" for that - - var/charge_max = 100 //recharge time in deciseconds if charge_type = Sp_RECHARGE or starting charges if charge_type = Sp_CHARGES - var/charge_counter = 0 //can only cast spells if it equals recharge, ++ each decisecond if charge_type = Sp_RECHARGE or -- each cast if charge_type = Sp_CHARGES - var/still_recharging_msg = "The spell is still recharging." - - var/silenced = 0 //not a binary - the length of time we can't cast this for - var/processing = 0 //are we processing already? Mainly used so that silencing a spell doesn't call process() again. (and inadvertedly making it run twice as fast) - - var/holder_var_type = "bruteloss" //only used if charge_type equals to "holder_var" - var/holder_var_amount = 20 //same. The amount adjusted with the mob's var when the spell is used - - var/spell_flags = NEEDSCLOTHES - var/invocation = "HURP DURP" //what is uttered when the wizard casts the spell - var/invocation_type = SpI_NONE //can be none, whisper, shout, and emote - var/range = 7 //the range of the spell; outer radius for aoe spells - var/message = "" //whatever it says to the guy affected by it - var/selection_type = "view" //can be "range" or "view" - var/atom/movable/holder //where the spell is. Normally the user, can be an item - var/duration = 0 //how long the spell lasts - - var/list/spell_levels = list(Sp_SPEED = 0, Sp_POWER = 0) //the current spell levels - total spell levels can be obtained by just adding the two values - var/list/level_max = list(Sp_TOTAL = 4, Sp_SPEED = 4, Sp_POWER = 0) //maximum possible levels in each category. Total does cover both. - var/cooldown_reduc = 0 //If set, defines how much charge_max drops by every speed upgrade - var/delay_reduc = 0 - var/cooldown_min = 0 //minimum possible cooldown for a charging spell - - var/overlay = 0 - var/overlay_icon = 'icons/obj/wizard.dmi' - var/overlay_icon_state = "spell" - var/overlay_lifespan = 0 - - var/sparks_spread = 0 - var/sparks_amt = 0 //cropped at 10 - var/smoke_spread = 0 //1 - harmless, 2 - harmful - var/smoke_amt = 0 //cropped at 10 - - var/critfailchance = 0 - var/time_between_channels = 0 //Delay between casts - var/number_of_channels = 1 //How many times can we channel? - - var/cast_delay = 1 - var/cast_sound = "" - - var/hud_state = "" //name of the icon used in generating the spell hud object - var/override_base = "" - - - var/mob/living/deity/connected_god //Do we have this spell based off a boon from a god? - var/obj/screen/connected_button - - var/hidden_from_codex = FALSE - -/////////////////////// -///SETUP AND PROCESS/// -/////////////////////// - -/spell/New() - ..() - - //still_recharging_msg = "[name] is still recharging." - charge_counter = charge_max - -/spell/proc/process() - if(processing) - return - processing = 1 - spawn(0) - while(charge_counter < charge_max || silenced > 0) - charge_counter = min(charge_max,charge_counter+1) - silenced = max(0,silenced-1) - sleep(1) - if(connected_button) - var/obj/screen/ability/spell/S = connected_button - if(!istype(S)) - return - S.update_charge(1) - processing = 0 - return - -///////////////// -/////CASTING///// -///////////////// - -/spell/proc/choose_targets(mob/user = usr) //depends on subtype - see targeted.dm, aoe_turf.dm, dumbfire.dm, or code in general folder - return - -/spell/proc/perform(mob/user = usr, skipcharge = 0) //if recharge is started is important for the trigger spells - if(!holder) - holder = user //just in case - if(!cast_check(skipcharge, user)) - return - if (cast_delay > 1) - to_chat(user, SPAN_NOTICE("You start casting [name]...")) - if(cast_delay && !spell_do_after(user, cast_delay)) - return - var/list/targets = choose_targets(user) - if(!check_valid_targets(targets)) - to_chat(user, SPAN_WARNING("[name] fizzles. There are no valid targets nearby.")) - return - var/time = 0 - admin_attacker_log(user, "attempted to cast the spell [name]") - do - time++ - if(!check_valid_targets(targets)) //make sure we HAVE something - break - if(cast_check(1,user, targets)) //we check again, otherwise you can choose a target and then wait for when you are no longer able to cast (I.E. Incapacitated) to use it. - invocation(user, targets) - take_charge(user, skipcharge) - before_cast(targets) //applies any overlays and effects - if(prob(critfailchance)) - critfail(targets, user) - else - cast(targets, user, time) - after_cast(targets) //generates the sparks, smoke, target messages etc. - else - break - while(time != number_of_channels && do_after(user, time_between_channels, do_flags = (DO_DEFAULT | DO_USER_UNIQUE_ACT) & ~DO_USER_CAN_TURN, incapacitation_flags = INCAPACITATION_KNOCKOUT | INCAPACITATION_FORCELYING | INCAPACITATION_STUNNED)) - after_spell(targets, user, time) //When we are done with the spell completely. - - - -/spell/proc/cast(list/targets, mob/user, var/channel_duration) //the actual meat of the spell - return - -/spell/proc/critfail(list/targets, mob/user) //the wizman has fucked up somehow - return - -/spell/proc/after_spell(var/list/targets, var/mob/user, var/channel_duration) //After everything else is done. - return - -/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 - switch(type) - if("bruteloss") - target.adjustBruteLoss(amount) - if("fireloss") - target.adjustFireLoss(amount) - if("toxloss") - target.adjustToxLoss(amount) - if("oxyloss") - target.adjustOxyLoss(amount) - if("brainloss") - target.adjustBrainLoss(amount) - if("stunned") - target.AdjustStunned(amount) - if("weakened") - target.AdjustWeakened(amount) - if("paralysis") - target.AdjustParalysis(amount) - else - target.vars[type] += amount //I bear no responsibility for the runtimes that'll happen if you try to adjust non-numeric or even non-existant vars - return - -/////////////////////////// -/////CASTING WRAPPERS////// -/////////////////////////// - -/spell/proc/before_cast(list/targets) - for(var/atom/target in targets) - if(overlay) - var/location - if(istype(target,/mob/living)) - location = target.loc - else if(istype(target,/turf)) - location = target - var/obj/effect/overlay/spell = new /obj/effect/overlay(location) - spell.icon = overlay_icon - spell.icon_state = overlay_icon_state - spell.anchored = TRUE - spell.set_density(0) - spawn(overlay_lifespan) - qdel(spell) - -/spell/proc/after_cast(list/targets) - if(cast_sound) - playsound(get_turf(holder),cast_sound,50,1) - for(var/atom/target in targets) - var/location = get_turf(target) - if(istype(target,/mob/living) && message) - to_chat(target, text("[message]")) - if(sparks_spread) - var/datum/effect/effect/system/spark_spread/sparks = new /datum/effect/effect/system/spark_spread() - sparks.set_up(sparks_amt, 0, location) //no idea what the 0 is - sparks.start() - if(smoke_spread) - if(smoke_spread == 1) - var/datum/effect/effect/system/smoke_spread/smoke = new /datum/effect/effect/system/smoke_spread() - smoke.set_up(smoke_amt, 0, location) //no idea what the 0 is - smoke.start() - else if(smoke_spread == 2) - var/datum/effect/effect/system/smoke_spread/bad/smoke = new /datum/effect/effect/system/smoke_spread/bad() - smoke.set_up(smoke_amt, 0, location) //no idea what the 0 is - smoke.start() - -///////////////////// -////CASTING TOOLS//// -///////////////////// -/*Checkers, cost takers, message makers, etc*/ - -/spell/proc/cast_check(skipcharge = 0,mob/user = usr, var/list/targets) //checks if the spell can be cast based on its settings; skipcharge is used when an additional cast_check is called inside the spell - - if(silenced > 0) - return 0 - - if(!(src in user.mind.learned_spells) && holder == user && !(isanimal(user))) - error("[user] utilized the spell '[src]' without having it.") - to_chat(user, "You shouldn't have this spell! Something's wrong.") - return 0 - - var/spell_leech = user.disrupts_psionics() - if(spell_leech) - to_chat(user, SPAN_WARNING("You try to marshal your energy, but find it leeched away by \the [spell_leech]!")) - return 0 - - var/turf/user_turf = get_turf(user) - if(!user_turf) - to_chat(user, "You cannot cast spells in null space!") - - if((spell_flags & Z2NOCAST) && (user_turf.z in GLOB.using_map.admin_levels)) //Certain spells are not allowed on the centcomm zlevel - return 0 - - if(spell_flags & CONSTRUCT_CHECK) - for(var/turf/T in range(holder, 1)) - if(findNullRod(T)) - return 0 - - if(!src.check_charge(skipcharge, user)) //sees if we can cast based on charges alone - return 0 - - if(holder == user) - if(istype(user, /mob/living/simple_animal)) - var/mob/living/simple_animal/SA = user - if(SA.purge) - to_chat(SA, "The null sceptre's power interferes with your own!") - return 0 - - if(!(spell_flags & GHOSTCAST)) - if(!(spell_flags & NO_SOMATIC)) - var/mob/living/L = user - if(L.incapacitated(INCAPACITATION_STUNNED|INCAPACITATION_RESTRAINED|INCAPACITATION_BUCKLED_FULLY|INCAPACITATION_FORCELYING|INCAPACITATION_KNOCKOUT)) - to_chat(user, "You can't cast spells while incapacitated!") - return 0 - - if(ishuman(user) && !(invocation_type in list(SpI_EMOTE, SpI_NONE))) - if(istype(user.wear_mask, /obj/item/clothing/mask/muzzle)) - to_chat(user, "Mmmf mrrfff!") - return 0 - - var/spell/noclothes/spell = locate() in user.mind.learned_spells - if((spell_flags & NEEDSCLOTHES) && !(spell && istype(spell)))//clothes check - if(!user.wearing_wiz_garb()) - return 0 - - return 1 - -/spell/proc/check_charge(var/skipcharge, mob/user) - if(!skipcharge) - switch(charge_type) - if(Sp_RECHARGE) - if(charge_counter < charge_max) - to_chat(user, still_recharging_msg) - return 0 - if(Sp_CHARGES) - if(!charge_counter) - to_chat(user, "[name] has no charges left.") - return 0 - return 1 - -/spell/proc/take_charge(mob/user = user, var/skipcharge) - if(!skipcharge) - switch(charge_type) - if(Sp_RECHARGE) - charge_counter = 0 //doesn't start recharging until the targets selecting ends - src.process() - return 1 - if(Sp_CHARGES) - charge_counter-- //returns the charge if the targets selecting fails - return 1 - if(Sp_HOLDVAR) - adjust_var(user, holder_var_type, holder_var_amount) - return 1 - return 0 - return 1 - -/spell/proc/check_valid_targets(var/list/targets) - if(!targets) - return 0 - if(!islist(targets)) - targets = list(targets) - else if(!targets.len) - return 0 - - var/list/valid_targets = view_or_range(range, holder, selection_type) - for(var/target in targets) - if(!(target in valid_targets)) - return 0 - return 1 - -/spell/proc/invocation(mob/user = usr, var/list/targets) //spelling the spell out and setting it on recharge/reducing charges amount - - switch(invocation_type) - if(SpI_SHOUT) - if(prob(50))//Auto-mute? Fuck that noise - user.say(invocation) - else - user.say(replacetext_char(invocation," ","`")) - if(SpI_WHISPER) - if(prob(50)) - user.whisper(invocation) - else - user.whisper(replacetext_char(invocation," ","`")) - if(SpI_EMOTE) - user.custom_emote(VISIBLE_MESSAGE, invocation) - -///////////////////// -///UPGRADING PROCS/// -///////////////////// - -/spell/proc/can_improve(var/upgrade_type) - if(level_max[Sp_TOTAL] <= ( spell_levels[Sp_SPEED] + spell_levels[Sp_POWER] )) //too many levels, can't do it - return 0 - - //if(upgrade_type && spell_levels[upgrade_type] && level_max[upgrade_type]) - if(upgrade_type && spell_levels[upgrade_type] >= level_max[upgrade_type]) - return 0 - - return 1 - -/spell/proc/empower_spell() - if(!can_improve(Sp_POWER)) - return 0 - - spell_levels[Sp_POWER]++ - - return 1 - -/spell/proc/quicken_spell() - if(!can_improve(Sp_SPEED)) - return 0 - - spell_levels[Sp_SPEED]++ - - if(delay_reduc && cast_delay) - cast_delay = max(0, cast_delay - delay_reduc) - else if(cast_delay) - cast_delay = round( max(0, initial(cast_delay) * ((level_max[Sp_SPEED] - spell_levels[Sp_SPEED]) / level_max[Sp_SPEED] ) ) ) - - if(charge_type == Sp_RECHARGE) - if(cooldown_reduc) - charge_max = max(cooldown_min, charge_max - cooldown_reduc) - else - charge_max = round( max(cooldown_min, initial(charge_max) * ((level_max[Sp_SPEED] - spell_levels[Sp_SPEED]) / level_max[Sp_SPEED] ) ) ) //the fraction of the way you are to max speed levels is the fraction you lose - if(charge_max < charge_counter) - charge_counter = charge_max - - var/temp = "" - name = initial(name) - switch(level_max[Sp_SPEED] - spell_levels[Sp_SPEED]) - if(3) - temp = "You have improved [name] into Efficient [name]." - name = "Efficient [name]" - if(2) - temp = "You have improved [name] into Quickened [name]." - name = "Quickened [name]" - if(1) - temp = "You have improved [name] into Free [name]." - name = "Free [name]" - if(0) - temp = "You have improved [name] into Instant [name]." - name = "Instant [name]" - - return temp - -/spell/proc/spell_do_after(var/mob/user as mob, delay as num, var/numticks = 5) - if(!user || isnull(user)) - return 0 - - var/incap_flags = INCAPACITATION_STUNNED|INCAPACITATION_RESTRAINED|INCAPACITATION_BUCKLED_FULLY|INCAPACITATION_FORCELYING - if(!(spell_flags & (GHOSTCAST))) - incap_flags |= INCAPACITATION_KNOCKOUT - - return do_after(user, delay, do_flags = DO_DEFAULT | DO_USER_UNIQUE_ACT, incapacitation_flags = incap_flags) diff --git a/code/modules/spells/spell_projectile.dm b/code/modules/spells/spell_projectile.dm deleted file mode 100644 index 188fdb16d283c..0000000000000 --- a/code/modules/spells/spell_projectile.dm +++ /dev/null @@ -1,55 +0,0 @@ -/obj/item/projectile/spell_projectile - name = "spell" - icon = 'icons/obj/projectiles.dmi' - - nodamage = TRUE - - var/spell/targeted/projectile/carried - - penetrating = 0 - life_span = 10 //set by the duration of the spell - - var/proj_trail = 0 //if it leaves a trail - var/proj_trail_lifespan = 0 //deciseconds - var/proj_trail_icon = 'icons/obj/wizard.dmi' - var/proj_trail_icon_state = "trail" - var/list/trails = new() - -/obj/item/projectile/spell_projectile/Destroy() - for(var/trail in trails) - qdel(trail) - carried = null - return ..() - -/obj/item/projectile/spell_projectile/ex_act() - return - -/obj/item/projectile/spell_projectile/before_move() - if(proj_trail && src && src.loc) //pretty trails - var/obj/effect/overlay/trail = new /obj/effect/overlay(loc) - trails += trail - trail.icon = proj_trail_icon - trail.icon_state = proj_trail_icon_state - trail.set_density(0) - spawn(proj_trail_lifespan) - trails -= trail - qdel(trail) - -/obj/item/projectile/spell_projectile/proc/prox_cast(var/list/targets) - if(loc) - carried.prox_cast(targets, src) - qdel(src) - return - -/obj/item/projectile/spell_projectile/Bump(var/atom/A, forced=0) - if(loc && carried) - prox_cast(carried.choose_prox_targets(user = carried.holder, spell_holder = src)) - return 1 - -/obj/item/projectile/spell_projectile/on_impact() - if(loc && carried) - prox_cast(carried.choose_prox_targets(user = carried.holder, spell_holder = src)) - return 1 - -/obj/item/projectile/spell_projectile/seeking - name = "seeking spell" diff --git a/code/modules/spells/spellbook.dm b/code/modules/spells/spellbook.dm deleted file mode 100644 index 078be08bce204..0000000000000 --- a/code/modules/spells/spellbook.dm +++ /dev/null @@ -1,300 +0,0 @@ -#define NOREVERT 1 -#define LOCKED 2 -#define CAN_MAKE_CONTRACTS 4 -#define INVESTABLE 8 -#define NO_LOCKING 16 - -//spells/spellbooks have a variable for this but as artefacts are literal items they do not. -//so we do this instead. -var/global/list/artefact_feedback = list(/obj/structure/closet/wizard/armor = "HS", - /obj/item/gun/energy/staff/focus = "MF", - /obj/item/summoning_stone = "ST", - /obj/item/magic_rock = "RA", - /obj/item/contract/apprentice = "CP", - /obj/structure/closet/wizard/souls = "SS", - /obj/structure/closet/wizard/scrying = "SO", - /obj/item/teleportation_scroll = "TS", - /obj/item/gun/energy/staff = "ST", - /obj/item/gun/energy/staff/animate = "SA", - /obj/item/dice/d20/cursed = "DW") - -/obj/item/spellbook - name = "master spell book" - desc = "The legendary book of spells of the wizard." - icon = 'icons/obj/library.dmi' - icon_state = "spellbook" - throw_speed = 1 - throw_range = 5 - w_class = ITEM_SIZE_NORMAL - var/uses = 1 - var/temp = null - var/datum/spellbook/spellbook - var/spellbook_type = /datum/spellbook/ //for spawning specific spellbooks. - var/investing_time = 0 //what time we target forr a return on our spell investment. - var/has_sacrificed = 0 //whether we have already got our sacrifice bonus for the current investment. - -/obj/item/spellbook/New() - ..() - set_spellbook(spellbook_type) - -/obj/item/spellbook/proc/set_spellbook(var/type) - if(spellbook) - qdel(spellbook) - spellbook = new type() - uses = spellbook.max_uses - name = spellbook.name - desc = spellbook.desc - -/obj/item/spellbook/attack_self(mob/user as mob) - if(!user.mind) - return - if (user.mind.special_role != ANTAG_WIZARD) - if (user.mind.special_role != ANTAG_APPRENTICE) - to_chat(user, "You can't make heads or tails of this book.") - return - if (spellbook.book_flags & LOCKED) - to_chat(user, "Drat! This spellbook's apprentice-proof lock is on!") - return - else if (spellbook.book_flags & LOCKED) - to_chat(user, "You notice the apprentice-proof lock is on. Luckily you are beyond such things.") - interact(user) - -/obj/item/spellbook/proc/make_sacrifice(obj/item/I as obj, mob/user as mob, var/reagent) - if(has_sacrificed) - to_chat(user, SPAN_WARNING("\The [src] is already sated! Wait for a return on your investment before you sacrifice more to it.")) - return - if(reagent) - var/datum/reagents/R = I.reagents - R.remove_reagent(reagent,5) - else - if(istype(I,/obj/item/stack)) - var/obj/item/stack/S = I - if(S.amount < S.max_amount) - to_chat(usr, "You must sacrifice [S.max_amount] stacks of [S]!") - return - qdel(I) - to_chat(user, "Your sacrifice was accepted!") - has_sacrificed = 1 - investing_time = max(investing_time - 6000,1) //subtract 10 minutes. Make sure it doesn't act funky at the beginning of the game. - - -/obj/item/spellbook/attackby(obj/item/I as obj, mob/user as mob) - if(investing_time) - var/list/objects = spellbook.sacrifice_objects - if(objects && objects.len) - for(var/type in objects) - if(istype(I,type)) - make_sacrifice(I,user) - return - if(I.reagents) - var/datum/reagents/R = I.reagents - var/list/reagent_list = spellbook.sacrifice_reagents - if(reagent_list && reagent_list.len) - for(var/id in reagent_list) - if(R.has_reagent(id,5)) - make_sacrifice(I,user, id) - return 1 - ..() - -/obj/item/spellbook/interact(mob/user as mob) - var/dat = null - if(temp) - dat = "[temp]
                  Return" - else - dat = "

                  [spellbook.title]

                  [spellbook.title_desc]
                  You have [uses] spell slot[uses > 1 ? "s" : ""] left.

                  " - dat += "
                  Requires Wizard Garb
                  Selectable Target
                  Spell Charge Type: Recharge, Sacrifice, Charges

                  " - dat += "
                  To use a contract, first bind it to your soul, then give it to someone to sign. This will bind their soul to you.

                  " - for(var/i in 1 to spellbook.spells.len) - var/name = "" //name of target - var/desc = "" //description of target - var/info = "" //additional information - if(ispath(spellbook.spells[i],/datum/spellbook)) - var/datum/spellbook/S = spellbook.spells[i] - name = initial(S.name) - desc = initial(S.book_desc) - info = "[initial(S.max_uses)] Spell Slots" - else if(ispath(spellbook.spells[i],/obj)) - var/obj/O = spellbook.spells[i] - name = "Artefact: [capitalize(initial(O.name))]" //because 99.99% of objects don't have capitals in them and it makes it look weird. - desc = initial(O.desc) - else if(ispath(spellbook.spells[i],/spell)) - var/spell/S = spellbook.spells[i] - name = initial(S.name) - desc = initial(S.desc) - var/testing = initial(S.spell_flags) - if(testing & NEEDSCLOTHES) - info = "W" - var/type = "" - switch(initial(S.charge_type)) - if(Sp_RECHARGE) - type = "R" - if(Sp_HOLDVAR) - type = "S" - if(Sp_CHARGES) - type = "C" - info += "[type]" - dat += "[name]" - if(length(info)) - dat += " ([info])" - dat += " ([spellbook.spells[spellbook.spells[i]]] spell slot[spellbook.spells[spellbook.spells[i]] > 1 ? "s" : "" ])" - if(spellbook.book_flags & CAN_MAKE_CONTRACTS) - dat += " Make Contract" - dat += "
                  [desc]

                  " - dat += "
                  " - dat += "
                  Re-memorize your spellbook.
                  " - if(spellbook.book_flags & INVESTABLE) - if(investing_time) - dat += "
                  Currently investing in a slot...
                  " - else - dat += "
                  Invest a Spell Slot
                  Investing a spellpoint will return two spellpoints back in 15 minutes.
                  Some say a sacrifice could even shorten the time...
                  " - if(!(spellbook.book_flags & NOREVERT)) - dat += "
                  Choose different spellbook.
                  " - if(!(spellbook.book_flags & NO_LOCKING)) - dat += "
                  [spellbook.book_flags & LOCKED ? "Unlock" : "Lock"] the spellbook.
                  " - show_browser(user, dat,"window=spellbook") - -/obj/item/spellbook/CanUseTopic(var/mob/living/carbon/human/H) - if(!istype(H)) - return STATUS_CLOSE - - if(H.mind && (spellbook.book_flags & LOCKED) && H.mind.special_role == ANTAG_APPRENTICE) //make sure no scrubs get behind the lock - return STATUS_CLOSE - - return ..() - -/obj/item/spellbook/OnTopic(var/mob/living/carbon/human/user, href_list) - if(href_list["lock"] && !(spellbook.book_flags & NO_LOCKING)) - if(spellbook.book_flags & LOCKED) - spellbook.book_flags &= ~LOCKED - else - spellbook.book_flags |= LOCKED - . = TOPIC_REFRESH - - else if(href_list["temp"]) - temp = null - . = TOPIC_REFRESH - - else if(href_list["book"]) - if(initial(spellbook.max_uses) != spellbook.max_uses || uses != spellbook.max_uses) - temp = "You've already purchased things using this spellbook!" - else - src.set_spellbook(/datum/spellbook) - temp = "You have reverted back to the Book of Tomes." - . = TOPIC_REFRESH - - else if(href_list["invest"]) - temp = invest() - . = TOPIC_REFRESH - - else if(href_list["path"]) - var/path = locate(href_list["path"]) in spellbook.spells - if(!path) - return TOPIC_HANDLED - if(uses < spellbook.spells[path]) - to_chat(user, "You do not have enough spell slots to purchase this.") - return TOPIC_HANDLED - if(ispath(path,/datum/spellbook)) - src.set_spellbook(path) - temp = "You have chosen a new spellbook." - else - if(href_list["contract"]) - if(!(spellbook.book_flags & CAN_MAKE_CONTRACTS)) - return //no - uses -= spellbook.spells[path] - spellbook.max_uses -= spellbook.spells[path] //no basksies - var/obj/O = new /obj/item/contract/boon(get_turf(user),path) - temp = "You have purchased \the [O]." - else - if(ispath(path,/spell)) - temp = src.add_spell(user,path) - if(temp) - uses -= spellbook.spells[path] - else - var/obj/O = new path(get_turf(user)) - temp = "You have purchased \a [O]." - uses -= spellbook.spells[path] - spellbook.max_uses -= spellbook.spells[path] - //finally give it a bit of an oomf - playsound(get_turf(user),'sound/effects/phasein.ogg',50,1) - . = TOPIC_REFRESH - - else if(href_list["reset"] && !(spellbook.book_flags & NOREVERT)) - var/area/map_template/wizard_station/A = get_area(user) - if(istype(A)) - uses = spellbook.max_uses - investing_time = 0 - has_sacrificed = 0 - user.spellremove() - temp = "All spells and investments have been removed. You may now memorize a new set of spells." - else - to_chat(user, "You must be in the wizard academy to re-memorize your spells.") - . = TOPIC_REFRESH - - src.interact(user) - -/obj/item/spellbook/proc/invest() - if(uses < 1) - return "You don't have enough slots to invest!" - if(investing_time) - return "You can only invest one spell slot at a time." - uses-- - START_PROCESSING(SSobj, src) - investing_time = world.time + (15 MINUTES) - return "You invest a spellslot and will receive two in return in 15 minutes." - -/obj/item/spellbook/Process() - if(investing_time && investing_time <= world.time) - src.visible_message("\The [src] emits a soft chime.") - uses += 2 - if(uses > spellbook.max_uses) - spellbook.max_uses = uses - investing_time = 0 - has_sacrificed = 0 - STOP_PROCESSING(SSobj, src) - return 1 - -/obj/item/spellbook/Destroy() - STOP_PROCESSING(SSobj, src) - . = ..() - - -/obj/item/spellbook/proc/add_spell(var/mob/user, var/spell_path) - for(var/spell/S in user.mind.learned_spells) - if(istype(S,spell_path)) - if(!S.can_improve()) - return - if(S.can_improve(Sp_SPEED) && S.can_improve(Sp_POWER)) - switch(alert(user, "Do you want to upgrade this spell's speed or power?", "Spell upgrade", "Speed", "Power", "Cancel")) - if("Speed") - return S.quicken_spell() - if("Power") - return S.empower_spell() - else - return - else if(S.can_improve(Sp_POWER)) - return S.empower_spell() - else if(S.can_improve(Sp_SPEED)) - return S.quicken_spell() - - var/spell/S = new spell_path() - user.add_spell(S) - return "You learn the spell [S]" - -/datum/spellbook - var/name = "\improper Book of Tomes" - var/desc = "The legendary book of spells of the wizard." - var/book_desc = "Holds information on the various tomes available to a wizard" - var/feedback = "" //doesn't need one. - var/book_flags = NOREVERT - var/max_uses = 1 - var/title = "Book of Tomes" - var/title_desc = "This tome marks down all the available tomes for use. Choose wisely, there are no refunds." - var/list/spells = list(/datum/spellbook/standard = 1, - /datum/spellbook/cleric = 1, - /datum/spellbook/battlemage = 1, - /datum/spellbook/spatial = 1, - /datum/spellbook/druid = 1 - ) //spell's path = cost of spell - - var/list/sacrifice_reagents - var/list/sacrifice_objects diff --git a/code/modules/spells/spellbook/battlemage.dm b/code/modules/spells/spellbook/battlemage.dm deleted file mode 100644 index f3c9fa9f1db3f..0000000000000 --- a/code/modules/spells/spellbook/battlemage.dm +++ /dev/null @@ -1,41 +0,0 @@ -//Battlemage is all about mixing physical with the mystical in head to head combat. -//Things like utility and mobility come second. -/datum/spellbook/battlemage - name = "\improper Battlemage's Bible" - feedback = "BM" - desc = "Smells like blood." - book_desc = "Mix physical with the mystical in head to head combat." - title = "The Art of Magical Combat" - title_desc = "Buy spells using your available spell slots. Artefacts may also be bought however their cost is permanent." - book_flags = CAN_MAKE_CONTRACTS|INVESTABLE - max_uses = 6 - - spells = list(/spell/targeted/projectile/dumbfire/passage = 1, - /spell/targeted/equip_item/dyrnwyn = 1, - /spell/targeted/equip_item/shield = 1, - /spell/targeted/projectile/dumbfire/fireball = 1, - /spell/targeted/torment = 1, - /spell/targeted/heal_target = 2, - /spell/targeted/genetic/mutate = 1, - /spell/aoe_turf/conjure/mirage = 1, - /spell/targeted/shapeshift/corrupt_form = 1, - /spell/radiant_aura = 1, - /spell/noclothes = 1, - /obj/structure/closet/wizard/armor = 1, - /obj/item/gun/energy/staff/focus = 1, - /obj/item/dice/d20/cursed = 1, - /obj/item/summoning_stone = 2, - /obj/item/magic_rock = 1, - /obj/item/contract/wizard/xray = 1, - /obj/item/contract/wizard/telepathy = 1, - /obj/item/contract/apprentice = 1 - ) - - sacrifice_objects = list(/obj/item/material/sword, - /obj/item/material/twohanded/fireaxe, - /obj/item/melee, - /obj/item/material/knife/ritual, - /obj/item/material/knife/kitchen/cleaver, - /obj/item/material/knife/folding/combat/balisong, - /obj/item/material/knife/folding/tacticool, - /obj/item/material/star) diff --git a/code/modules/spells/spellbook/cleric.dm b/code/modules/spells/spellbook/cleric.dm deleted file mode 100644 index 32189251356b0..0000000000000 --- a/code/modules/spells/spellbook/cleric.dm +++ /dev/null @@ -1,46 +0,0 @@ -//Cleric is all about healing. Mobility and offense comes at a higher price but not impossible. -/obj/item/spellbook/cleric - spellbook_type = /datum/spellbook/cleric - -/datum/spellbook/cleric - name = "\improper Cleric's Tome" - feedback = "CR" - desc = "For those who do not harm, or at least feel sorry about it." - book_desc = "All about healing. Mobility and offense comes at a higher price but not impossible." - title = "Cleric's Tome of Healing" - title_desc = "Buy spells using your available spell slots. Artefacts may also be bought however their cost is permanent." - book_flags = CAN_MAKE_CONTRACTS|INVESTABLE - max_uses = 7 - - spells = list(/spell/targeted/heal_target/major = 1, - /spell/targeted/heal_target/area = 1, - /spell/targeted/heal_target/sacrifice = 1, - /spell/targeted/genetic/blind = 1, - /spell/targeted/shapeshift/baleful_polymorph = 1, - /spell/targeted/projectile/dumbfire/stuncuff = 1, - /spell/targeted/ethereal_jaunt = 2, - /spell/aoe_turf/knock = 1, - /spell/radiant_aura = 1, - /spell/targeted/equip_item/holy_relic = 1, - /spell/aoe_turf/conjure/grove/sanctuary = 1, - /spell/targeted/projectile/dumbfire/fireball = 2, - /spell/area_teleport = 2, - /spell/portal_teleport = 2, - /spell/aoe_turf/conjure/forcewall = 1, - /spell/noclothes = 1, - /obj/item/magic_rock = 1, - /obj/structure/closet/wizard/scrying = 2, - /obj/item/summoning_stone = 2, - /obj/item/contract/wizard/telepathy = 1, - /obj/item/contract/apprentice = 1 - ) - - sacrifice_reagents = list(/datum/reagent/peridaxon, - /datum/reagent/adminordrazine) - sacrifice_objects = list(/obj/item/stack/nanopaste, - /obj/item/device/scanner/health, - /obj/item/stack/medical/advanced/bruise_pack, - /obj/item/stack/medical/advanced/ointment, - /obj/item/bodybag/rescue, - /obj/item/defibrillator - ) diff --git a/code/modules/spells/spellbook/druid.dm b/code/modules/spells/spellbook/druid.dm deleted file mode 100644 index ede9bc281d1da..0000000000000 --- a/code/modules/spells/spellbook/druid.dm +++ /dev/null @@ -1,41 +0,0 @@ -//all about the summons, nature, and a bit o' healin. - -/obj/item/spellbook/druid - spellbook_type = /datum/spellbook/druid - -/datum/spellbook/druid - name = "\improper Druid's Leaflet" - feedback = "DL" - desc = "It smells like an air freshener." - book_desc = "Summons, nature, and a bit o' healin." - title = "Druidic Guide on how to be smug about nature" - title_desc = "Buy spells using your available spell slots. Artefacts may also be bought however their cost is permanent." - book_flags = CAN_MAKE_CONTRACTS|INVESTABLE - max_uses = 6 - - spells = list(/spell/targeted/heal_target = 1, - /spell/targeted/heal_target/sacrifice = 1, - /spell/aoe_turf/conjure/mirage = 1, - /spell/aoe_turf/conjure/summon/bats = 1, - /spell/aoe_turf/conjure/summon/bear = 1, - /spell/targeted/equip_item/party_hardy = 1, - /spell/targeted/equip_item/seed = 1, - /spell/targeted/shapeshift/avian = 1, - /spell/aoe_turf/disable_tech = 1, - /spell/hand/charges/entangle = 1, - /spell/aoe_turf/conjure/grove/sanctuary = 1, - /spell/aoe_turf/knock = 1, - /spell/area_teleport = 2, - /spell/portal_teleport = 2, - /spell/noclothes = 1, - /obj/structure/closet/wizard/souls = 1, - /obj/item/magic_rock = 1, - /obj/item/summoning_stone = 2, - /obj/item/contract/wizard/telepathy = 1, - /obj/item/contract/apprentice = 1 - ) - sacrifice_objects = list(/obj/item/seeds, - /obj/item/wirecutters/clippers, - /obj/item/device/scanner/plant, - /obj/item/material/hatchet, - /obj/item/material/minihoe) diff --git a/code/modules/spells/spellbook/spatial.dm b/code/modules/spells/spellbook/spatial.dm deleted file mode 100644 index c1e78e3739ee7..0000000000000 --- a/code/modules/spells/spellbook/spatial.dm +++ /dev/null @@ -1,41 +0,0 @@ -//all about moving around and mobility and being an annoying shit. - -/obj/item/spellbook/spatial - spellbook_type = /datum/spellbook/spatial - -/datum/spellbook/spatial - name = "\improper Spatial Manual" - feedback = "SP" - desc = "You feel like this might disappear from out of under you." - book_desc = "Movement and teleportation. Run from your problems!" - title = "Manual of Spatial Transportation" - title_desc = "Buy spells using your available spell slots. Artefacts may also be bought however their cost is permanent." - book_flags = CAN_MAKE_CONTRACTS|INVESTABLE - max_uses = 11 - - spells = list(/spell/targeted/ethereal_jaunt = 1, - /spell/aoe_turf/blink = 1, - /spell/area_teleport = 1, - /spell/portal_teleport = 1, - /spell/targeted/projectile/dumbfire/passage = 1, - /spell/mark_recall = 1, - /spell/targeted/swap = 1, - /spell/targeted/shapeshift/avian = 1, - /spell/targeted/projectile/magic_missile = 1, - /spell/targeted/heal_target = 1, - /spell/aoe_turf/conjure/forcewall = 1, - /spell/aoe_turf/smoke = 1, - /spell/aoe_turf/conjure/summon/bats = 3, - /spell/noclothes = 1, - /obj/item/dice/d20/cursed = 1, - /obj/structure/closet/wizard/scrying = 2, - /obj/item/teleportation_scroll = 1, - /obj/item/magic_rock = 1, - /obj/item/summoning_stone = 3, - /obj/item/contract/wizard/telepathy = 1, - /obj/item/contract/apprentice = 1 - ) - - sacrifice_reagents = list(/datum/reagent/hyperzine) - sacrifice_objects = list(/obj/item/stack/telecrystal, - /obj/item/stack/material/diamond) \ No newline at end of file diff --git a/code/modules/spells/spellbook/standard.dm b/code/modules/spells/spellbook/standard.dm deleted file mode 100644 index fb4dbc8e358bf..0000000000000 --- a/code/modules/spells/spellbook/standard.dm +++ /dev/null @@ -1,52 +0,0 @@ -//the spellbook we know and love. Well, the one we know, at least. - -/obj/item/spellbook/standard - spellbook_type = /datum/spellbook/standard - -/datum/spellbook/standard - name = "\improper Standard Spellbook" - feedback = "SB" - title = "Book of Spells and Artefacts" - title_desc = "Buy spells using your available spell slots. Artefacts may also be bought however their cost is permanent." - book_desc = "A general wizard's spellbook. All its spells are easy to use but hard to master." - book_flags = CAN_MAKE_CONTRACTS|INVESTABLE - max_uses = 6 - - spells = list(/spell/targeted/projectile/magic_missile = 1, - /spell/targeted/projectile/dumbfire/fireball = 1, - /spell/aoe_turf/disable_tech = 1, - /spell/aoe_turf/smoke = 1, - /spell/targeted/genetic/blind = 1, - /spell/targeted/subjugation = 1, - /spell/aoe_turf/conjure/forcewall = 1, - /spell/aoe_turf/blink = 1, - /spell/area_teleport = 1, - /spell/targeted/genetic/mutate = 1, - /spell/targeted/ethereal_jaunt = 1, - /spell/targeted/heal_target = 1, - /spell/aoe_turf/knock = 1, - /spell/noclothes = 2, - /obj/item/gun/energy/staff/focus = 1, - /obj/structure/closet/wizard/souls = 1, - /obj/item/gun/energy/staff/animate = 1, - /obj/structure/closet/wizard/scrying = 1, - /obj/item/summoning_stone = 2, - /obj/item/magic_rock = 1, - /obj/item/contract/wizard/telepathy = 1, - /obj/item/contract/apprentice = 1 - ) - - sacrifice_objects = list(/obj/item/storage/toolbox, - /obj/item/cane, - /obj/item/flamethrower, - /obj/item/plastique, - /obj/item/dice, - /obj/item/soap, - /obj/item/flame/candle, - /obj/item/flame/candle/scented/incense, - /obj/item/caution, - /obj/item/towel, - /obj/item/tank/jetpack, - /obj/item/clothing/mask/plunger, - /obj/item/device/megaphone, - /obj/item/deck/cards) \ No newline at end of file diff --git a/code/modules/spells/spellbook/student.dm b/code/modules/spells/spellbook/student.dm deleted file mode 100644 index f738ac6a37478..0000000000000 --- a/code/modules/spells/spellbook/student.dm +++ /dev/null @@ -1,27 +0,0 @@ -//wizard's training wheels. Basically. Same shit as in the general one. - -/obj/item/spellbook/student - spellbook_type = /datum/spellbook/student - -/datum/spellbook/student - name = "\improper Student's Spellbook" - feedback = "ST" - desc = "This spell book has a sticker on it that says, 'certified for children 5 and older'." - book_desc = "This spellbook is dedicated to teaching neophytes in the ways of magic." - title = "Book of Spells and Education" - title_desc = "Hello. Congratulations on becoming a wizard. You may be asking yourself: What? A wizard? Already? Of course! Anybody can become a wizard! Learning to be a good one is the hard part.
                  Without further adue, let us begin by learning the three concepts of wizardry, 'Spell slots', 'Spells', and 'Artifacts'.
                  Firstly lets try to understand the 'spell slot'. A spell slot is the measurable amount of spells and artifacts one tome can give. Most spells will only take up a singular spell slot, however more powerful spells/artifacts can take up more.
                  Spells are spells. They can have requirements, such as wizard garb, and most can be upgraded by purchasing additional spell slots for them. Most upgrades fall into two categories, 'Speed' and 'Power'. Speed upgrades decrease the time you have to spend recharging your spell. Power increases the potency of your spells. Spells are also special in that they can be refunded while inside the Wizard Acadamy, so if you want to test a spell out before moving out into the field, feel free to do that in the comfort of our home.
                  Artifacts, or 'Artefacts' as we call them, are powerful wizard tools or items made specially for wizards everywhere. Extremely potent, they cannot be refunded like spells, and some of them can be used by non-wizards, so be careful!
                  Knowing these three concepts puts you in a league above most wizards, however knowledge of spells is just as important so we've included a list of spells below made specifically for the beginning wizard. Take all of them, or mix and match, remember being creative is half of being a wizard!" - book_flags = CAN_MAKE_CONTRACTS|INVESTABLE - max_uses = 5 - - spells = list(/spell/aoe_turf/knock = 1, - /spell/targeted/ethereal_jaunt = 1, - /spell/targeted/projectile/magic_missile = 1, - /obj/item/gun/energy/staff/focus = 1, - /obj/item/contract/wizard/xray = 1 - ) - -/datum/spellbook/student/apprentice - book_flags = CAN_MAKE_CONTRACTS|INVESTABLE|NOREVERT|NO_LOCKING - -/obj/item/spellbook/apprentice - spellbook_type = /datum/spellbook/student/apprentice \ No newline at end of file diff --git a/code/modules/spells/spells.dm b/code/modules/spells/spells.dm deleted file mode 100644 index c3ce1f30d5e79..0000000000000 --- a/code/modules/spells/spells.dm +++ /dev/null @@ -1,71 +0,0 @@ -/datum/mind - var/list/learned_spells - -/mob/Stat() - . = ..() - if(. && ability_master && ability_master.spell_objects) - for(var/obj/screen/ability/spell/screen in ability_master.spell_objects) - var/spell/S = screen.spell - if((!S.connected_button) || !statpanel(S.panel)) - continue //Not showing the noclothes spell - switch(S.charge_type) - if(Sp_RECHARGE) - statpanel(S.panel,"[S.charge_counter/10.0]/[S.charge_max/10]",S.connected_button) - if(Sp_CHARGES) - statpanel(S.panel,"[S.charge_counter]/[S.charge_max]",S.connected_button) - if(Sp_HOLDVAR) - statpanel(S.panel,"[S.holder_var_type] [S.holder_var_amount]",S.connected_button) - -//A fix for when a spell is created before a mob is created -/mob/Login() - . = ..() - if(mind) - if(!mind.learned_spells) - mind.learned_spells = list() - if(ability_master && ability_master.spell_objects) - for(var/obj/screen/ability/spell/screen in ability_master.spell_objects) - var/spell/S = screen.spell - mind.learned_spells |= S - -/proc/restore_spells(var/mob/H) - if(H.mind && H.mind.learned_spells) - var/list/spells = list() - for(var/spell/spell_to_remove in H.mind.learned_spells) //remove all the spells from other people. - if(istype(spell_to_remove.holder,/mob)) - var/mob/M = spell_to_remove.holder - spells += spell_to_remove - M.remove_spell(spell_to_remove) - - for(var/spell/spell_to_add in spells) - H.add_spell(spell_to_add) - H.ability_master.update_abilities(0,H) - -/mob/proc/add_spell(var/spell/spell_to_add, var/spell_base = "wiz_spell_ready") - if(!ability_master) - ability_master = new() - spell_to_add.holder = src - if(mind) - if(!mind.learned_spells) - mind.learned_spells = list() - mind.learned_spells |= spell_to_add - ability_master.add_spell(spell_to_add, spell_base) - return 1 - -/mob/proc/remove_spell(var/spell/spell_to_remove) - if(!spell_to_remove || !istype(spell_to_remove)) - return - - if(mind) - mind.learned_spells -= spell_to_remove - if (ability_master) - ability_master.remove_ability(ability_master.get_ability_by_spell(spell_to_remove)) - return 1 - -/mob/proc/silence_spells(var/amount = 0) - if(amount < 0) - return - - if(!ability_master) - return - - ability_master.silence_spells(amount) \ No newline at end of file diff --git a/code/modules/spells/targeted/analyze.dm b/code/modules/spells/targeted/analyze.dm deleted file mode 100644 index 60ac45369305c..0000000000000 --- a/code/modules/spells/targeted/analyze.dm +++ /dev/null @@ -1,19 +0,0 @@ -/spell/targeted/analyze - name = "Analyze" - desc = "Using your wizardly powers, you can detect the inner destructions of a persons body." - - feedback = "AZ" - school = "illusion" - charge_max = 100 - spell_flags = INCLUDEUSER|SELECTABLE - range = 2 - invocation_type = SpI_WHISPER - invocation = "Fu Yi Fim" - compatible_mobs = list(/mob/living/carbon/human) - hud_state = "analyze" - -/spell/targeted/analyze/cast(var/list/targets, var/mob/user) - for(var/a in targets) - var/mob/living/carbon/human/H = a - new /obj/effect/temporary(get_turf(a),5, 'icons/effects/effects.dmi', "repel_missiles") - to_chat(user,medical_scan_results(H,1)) \ No newline at end of file diff --git a/code/modules/spells/targeted/blood_boil.dm b/code/modules/spells/targeted/blood_boil.dm deleted file mode 100644 index cecc5c17b8c3c..0000000000000 --- a/code/modules/spells/targeted/blood_boil.dm +++ /dev/null @@ -1,25 +0,0 @@ -/spell/targeted/blood_boil - name = "Blood Boil" - desc = "This spell allows the caster to heat up an adversary's body so much their blood boils." - feedback = "BO" - school = "transmutation" - charge_max = 300 - spell_flags = 0 - invocation_type = SpI_NONE - range = 5 - max_targets = 1 - compatible_mobs = list(/mob/living/carbon/human) - - time_between_channels = 50 - number_of_channels = 0 - - hud_state = "wiz_boilblood" - -/spell/targeted/blood_boil/cast(var/list/targets, var/mob/user) - var/mob/living/carbon/human/H = targets[1] - H.bodytemperature += 40 - if(prob(10)) - to_chat(H,"\The [user] seems to radiate an uncomfortable amount of heat your direction.") - if(H.bodytemperature > H.getSpeciesOrSynthTemp(HEAT_LEVEL_3)) //Burst into flames - H.fire_stacks += 50 - H.IgniteMob() \ No newline at end of file diff --git a/code/modules/spells/targeted/cleric_spells.dm b/code/modules/spells/targeted/cleric_spells.dm deleted file mode 100644 index 095d32054ed23..0000000000000 --- a/code/modules/spells/targeted/cleric_spells.dm +++ /dev/null @@ -1,259 +0,0 @@ -/spell/targeted/heal_target - name = "Cure Light Wounds" - desc = "a rudimentary spell used mainly by wizards to heal papercuts. Does not require wizard garb." - feedback = "CL" - school = "transmutation" - charge_max = 20 SECONDS - spell_flags = INCLUDEUSER | SELECTABLE - invocation = "Di'Nath!" - invocation_type = SpI_SHOUT - range = 2 - max_targets = 1 - level_max = list(Sp_TOTAL = 2, Sp_SPEED = 1, Sp_POWER = 2) - - cooldown_reduc = 50 - hud_state = "heal_minor" - cast_sound = 'sound/magic/staff_healing.ogg' - - amt_dam_brute = -15 - amt_dam_fire = -5 - amt_dam_robo = -4 - effect_state = "green_sparkles" - effect_duration = 5 - - // Vars expect a constant at compile time, so we can't use macros for spans here - message = "You feel a pleasant rush of heat move through your body." - -/spell/targeted/heal_target/empower_spell() - if(!..()) - return 0 - amt_dam_brute -= 15 - amt_dam_fire -= 15 - amt_dam_robo -= 7 - return "[src] will now heal more." - -/spell/targeted/heal_target/tower - charge_max = 2 - -/spell/targeted/heal_target/touch - name = "Healing Touch" - desc = "Heals an adjacent target for a reasonable amount of health." - range = 1 - amt_dam_fire = -7 - amt_dam_brute = -7 - amt_dam_robo = -5 - charge_max = 10 SECONDS - spell_flags = SELECTABLE - invocation = "Di'Na!" - - hud_state = "heal_touch" - -/spell/targeted/heal_target/major - name = "Cure Major Wounds" - desc = "A spell used to fix others that cannot be fixed with regular medicine." - feedback = "CM" - charge_max = 30 SECONDS - spell_flags = INCLUDEUSER | SELECTABLE | NEEDSCLOTHES - invocation = "Borv Di'Nath!" - range = 1 - level_max = list(Sp_TOTAL = 2, Sp_SPEED = 1, Sp_POWER = 1) - cooldown_reduc = 100 - hud_state = "heal_major" - - amt_dam_brute = -75 - amt_dam_fire = -50 - amt_dam_robo = -10 - amt_blood = 28 - - message = "Your body feels like a warm, cozy fire." - -/spell/targeted/heal_target/major/empower_spell() - if(!..()) - return 0 - amt_blood = 28 - amt_organ = 5 - amt_brain = -5 - amt_radiation = -25 - amt_dam_tox = -20 - amt_dam_oxy = -14 - amt_dam_brute = -35 - amt_dam_fire = -35 - amt_dam_robo = -15 - - return "[src] heals more, and heals organ damage and radiation." - -/spell/targeted/heal_target/major/tower - charge_max = 1 - spell_flags = INCLUDEUSER | SELECTABLE - -/spell/targeted/heal_target/area - name = "Cure Area" - desc = "This spell heals everyone in an area." - feedback = "HA" - charge_max = 1 MINUTE - spell_flags = INCLUDEUSER - invocation = "Nal Di'Nath!" - range = 2 - max_targets = 0 - level_max = list(Sp_TOTAL = 1, Sp_SPEED = 1, Sp_POWER = 1) - cooldown_reduc = 300 - hud_state = "heal_area" - amt_dam_robo = -6 - amt_dam_brute = -25 - amt_dam_fire = -25 - -/spell/targeted/heal_target/area/empower_spell() - if(!..()) - return 0 - amt_dam_brute -= 15 - amt_dam_fire -= 15 - amt_dam_robo -= 4 - range += 2 - - return "[src] now heals more in a wider area." - -/spell/targeted/heal_target/area/tower - charge_max = 1 - -/spell/targeted/heal_target/area/slow - charge_max = 2 MINUTES - -/spell/targeted/heal_target/sacrifice - name = "Sacrifice" - desc = "This spell heals immensily. For a price. Does not require wizard garb." - feedback = "SF" - spell_flags = SELECTABLE - invocation = "Ei'Nath Borv Di'Nath!" - charge_type = Sp_HOLDVAR - holder_var_type = "fireloss" - holder_var_amount = 100 - level_max = list(Sp_TOTAL = 1, Sp_SPEED = 0, Sp_POWER = 1) - - amt_dam_brute = -1000 - amt_dam_fire = -1000 - amt_dam_oxy = -100 - amt_dam_tox = -100 - amt_dam_robo = -1000 - amt_blood = 280 - effect_color = "#ff0000" - - hud_state = "gen_dissolve" - cast_sound = 'sound/magic/disintegrate.ogg' - -/spell/targeted/heal_target/sacrifice/empower_spell() - if(!..()) - return 0 - - amt_organ = 25 - amt_brain = -25 - amt_radiation = -100 - - - return "You will now heal organ and brain damage, as well as virtually purge all radiation." - - -/spell/targeted/heal_target/trance - name = "Trance" - desc = "A mighty spell of restoration that briefly forces its target into a deep, dreamless sleep, rapidly repairing their body and soul as their senses are dulled. The users of this mighty art are known for being short lived, slowly devolving into raving madness as the power they once relied on fails them with excessive use." - feedback = "TC" - spell_flags = SELECTABLE - invocation = "Di' Dae Nath!" - charge_max = 2 MINUTES - - amt_dam_brute = -1000 - amt_dam_fire = -1000 - amt_dam_oxy = -100 - amt_dam_tox = -100 - amt_dam_robo = -1000 - hud_state = "trance" - var/obj/effect/effect - -/spell/targeted/heal_target/trance/cast(var/list/targets, var/mob/user) - for(var/t in targets) - var/mob/living/L = t - var/turf/T = get_turf(L) - effect = new /obj/effect/rift(T) - effect.color = "f0e68c" - L.forceMove(effect) - var/time = (L.getBruteLoss() + L.getFireLoss()) * 20 - L.status_flags &= GODMODE - to_chat(L,"You will be in stasis for [time/10] second\s.") - addtimer(CALLBACK(src,.proc/cancel_rift),time) - -/spell/targeted/heal_target/trance/Destroy() - cancel_rift() - return ..() - -/spell/targeted/heal_target/trance/proc/cancel_rift() - if(effect) - var/mob/living/L = locate() in effect - L.status_flags &= ~GODMODE - L.forceMove(get_turf(L)) - apply_spell_damage(L) - charge_max += 300 - QDEL_NULL(effect) - -/obj/effect/rift - name = "rift" - desc = "a tear in space and time." - icon = 'icons/obj/wizard.dmi' - icon_state = "rift" - unacidable = TRUE - anchored = TRUE - density = FALSE - -/obj/effect/rift/Destroy() - for(var/o in contents) - var/atom/movable/M = o - M.dropInto(loc) - . = ..() - -/spell/targeted/revoke - name = "Revoke Death" - desc = "Revoke that of death itself. Comes at a cost that may be hard to manage for some." - feedback = "RK" - - spell_flags = SELECTABLE - - charge_type = Sp_CHARGES - charge_max = 1 - invocation = "Di Le Nal Yen Nath!" - invocation_type = SpI_SHOUT - range = 1 - hud_state = "heal_revoke" - -/spell/targeted/revoke/cast(var/list/targets, var/mob/living/user) - if(alert(user, "Are you sure?", "Alert", "Yes", "No") == "Yes" && alert(user, "Are you ABSOLUTELY SURE?", "Alert", "Absolutely!", "No") == "Absolutely!") - var/should_wait = 1 - for(var/t in targets) - var/mob/living/M = t - M.rejuvenate() - if(M.client) //We've got a dude - should_wait = 0 - break //Don't need to check anymore. - if(should_wait) - addtimer(CALLBACK(src,.proc/check_for_revoke,targets), 30 SECONDS) - else - revoke_spells() - - -/spell/targeted/revoke/proc/check_for_revoke(var/list/targets) - for(var/t in targets) - var/mob/M = t - if(M.client) - revoke_spells() - return - charge_counter = charge_max - to_chat(holder,"\The [src] refreshes as it seems it could not bring back the souls of those you healed.") - -/spell/targeted/revoke/proc/revoke_spells() - if(!istype(holder, /mob/living)) - return - var/mob/living/M = holder - if(M.mind) - for(var/s in M.mind.learned_spells) - if(istype(s, /spell/toggle_armor)) //Can keep the armor n junk. - continue - M.remove_spell(s) - for(var/a in M.auras) - M.remove_aura(a) \ No newline at end of file diff --git a/code/modules/spells/targeted/equip/burning_touch.dm b/code/modules/spells/targeted/equip/burning_touch.dm deleted file mode 100644 index 97ea0cd6de12b..0000000000000 --- a/code/modules/spells/targeted/equip/burning_touch.dm +++ /dev/null @@ -1,67 +0,0 @@ -/spell/targeted/equip_item/burning_hand - name = "Burning Hand" - desc = "Bathes your hand in fire, giving you all the perks and disadvantages that brings." - feedback = "BH" - school = "conjuration" - invocation = "Horila Kiha!" - invocation_type = SpI_SHOUT - spell_flags = INCLUDEUSER - range = -1 - duration = 0 - max_targets = 1 - equipped_summons = list("active hand" = /obj/item/flame/hands) - delete_old = 0 - - hud_state = "gen_burnhand" - -/obj/item/flame/hands - name = "Burning Hand" - icon = 'icons/mob/screen1.dmi' - icon_state = "grabbed+1" - force = 10 - damtype = DAMAGE_BURN - simulated = FALSE - var/burn_power = 0 - var/burn_timer - var/obj/item/organ/external/hand/connected - -/obj/item/flame/hands/pickup(var/mob/user) - . = ..() - burn_power = 0 - burn_timer = world.time + 10 SECONDS - START_PROCESSING(SSobj,src) - - -/obj/item/flame/hands/Process() - if(world.time < burn_timer) - return - burn_timer = world.time + 5 SECONDS - burn_power++ - force += 2 - if(!istype(src.loc, /mob/living/carbon/human)) - qdel(src) - return - var/mob/living/carbon/human/user = src.loc - var/obj/item/organ/external/hand - if(src == user.l_hand) - hand = user.get_organ(BP_L_HAND) - else - hand = user.get_organ(BP_R_HAND) - hand.take_external_damage(burn=2 * burn_power) - if(burn_power > 5) - user.fire_stacks += 15 - user.IgniteMob() - user.visible_message("\The [user] bursts into flames!") - user.drop_from_inventory(src) - else - if(burn_power == 5) - to_chat(user, "You begin to lose control of \the [src]'s flames as they rapidly move up your arm...") - else - to_chat(user, "You feel \the [src] grow hotter and hotter!") - -/obj/item/flame/hands/get_storage_cost() - return ITEM_SIZE_NO_CONTAINER - -/obj/item/flame/hands/dropped() - ..() - qdel(src) diff --git a/code/modules/spells/targeted/equip/dyrnwyn.dm b/code/modules/spells/targeted/equip/dyrnwyn.dm deleted file mode 100644 index 3750ef65a7732..0000000000000 --- a/code/modules/spells/targeted/equip/dyrnwyn.dm +++ /dev/null @@ -1,40 +0,0 @@ -/spell/targeted/equip_item/dyrnwyn - name = "Summon Dyrnwyn" - desc = "Summons the legendary sword of Rhydderch Hael, said to draw in flame when held by a worthy man." - feedback = "SD" - charge_type = Sp_HOLDVAR - holder_var_type = "fireloss" - holder_var_amount = 10 - school = "conjuration" - invocation = "Anrhydeddu Fi!" - invocation_type = SpI_SHOUT - spell_flags = INCLUDEUSER - range = -1 - level_max = list(Sp_TOTAL = 1, Sp_SPEED = 0, Sp_POWER = 1) - duration = 300 //30 seconds - max_targets = 1 - equipped_summons = list("active hand" = /obj/item/material/sword) - delete_old = 0 - var/material = MATERIAL_GOLD - - hud_state = "gen_immolate" - - -/spell/targeted/equip_item/dyrnwyn/summon_item(var/new_type) - var/obj/item/W = new new_type (null, material) - W.SetName("\improper Dyrnwyn") - W.damtype = DAMAGE_BURN - W.hitsound = 'sound/items/welder2.ogg' - W.slowdown_per_slot[slot_l_hand] = 0.25 - W.slowdown_per_slot[slot_r_hand] = 0.25 - return W - -/spell/targeted/equip_item/dyrnwyn/empower_spell() - if(!..()) - return 0 - - material = MATERIAL_SILVER - return "Dyrnwyn has been made pure: it is now made of silver." - -/spell/targeted/equip_item/dyrnwyn/tower - charge_max = 1 diff --git a/code/modules/spells/targeted/equip/equip.dm b/code/modules/spells/targeted/equip/equip.dm deleted file mode 100644 index fe318a5bf17b2..0000000000000 --- a/code/modules/spells/targeted/equip/equip.dm +++ /dev/null @@ -1,42 +0,0 @@ -//You can set duration to 0 to have the items last forever - -/spell/targeted/equip_item - name = "equipment spell" - cast_sound = 'sound/magic/summonitems_generic.ogg' - - var/list/equipped_summons = list() //assoc list of text ids and paths to spawn - - var/list/summoned_items = list() //list of items we summoned and will dispose when the spell runs out - - var/delete_old = 1 //if the item previously in the slot is deleted - otherwise, it's dropped - -/spell/targeted/equip_item/cast(list/targets, mob/user = usr) - ..() - for(var/mob/living/L in targets) - for(var/slot_id in equipped_summons) - var/to_create = equipped_summons[slot_id] - if(cmptext(slot_id,"active hand")) - slot_id = (user.hand ? slot_l_hand : slot_r_hand) - else if(cmptext(slot_id, "off hand")) - slot_id = (user.hand ? slot_r_hand : slot_l_hand) - else - slot_id = text2num(slot_id) //because the index is text, we access this instead - var/obj/item/new_item = summon_item(to_create) - var/obj/item/old_item = L.get_equipped_item(slot_id) - if(old_item) - L.drop_from_inventory(old_item) - if(delete_old) - qdel(old_item) - L.equip_to_slot(new_item, slot_id) - new_item.pickup(L) - - if(duration) - summoned_items += new_item //we store it in a list to remove later - - if(duration) - spawn(duration) - for(var/obj/item/to_remove in summoned_items) - qdel(to_remove) - -/spell/targeted/equip_item/proc/summon_item(var/newtype) - return new newtype diff --git a/code/modules/spells/targeted/equip/holy_relic.dm b/code/modules/spells/targeted/equip/holy_relic.dm deleted file mode 100644 index 5ad87588bc6c9..0000000000000 --- a/code/modules/spells/targeted/equip/holy_relic.dm +++ /dev/null @@ -1,34 +0,0 @@ -/spell/targeted/equip_item/holy_relic - name = "Summon Holy Relic" - desc = "This spell summons a relic of purity into your hand for a short while. The relic will disrupt occult and magical energies - be wary, as this includes your own." - feedback = "SR" - school = "conjuration" - charge_type = Sp_RECHARGE - spell_flags = NEEDSCLOTHES | INCLUDEUSER - invocation = "Yee'Ro Su!" - invocation_type = SpI_SHOUT - range = 0 - max_targets = 1 - level_max = list(Sp_TOTAL = 2, Sp_SPEED = 1, Sp_POWER = 1) - charge_max = 60 SECONDS - duration = 25 SECONDS - cooldown_min = 35 SECONDS - delete_old = 0 - compatible_mobs = list(/mob/living/carbon/human) - - hud_state = "purge1" - - equipped_summons = list("active hand" = /obj/item/nullrod) - -/spell/targeted/equip_item/holy_relic/cast(list/targets, mob/user = usr) - ..() - for(var/mob/M in targets) - M.visible_message(SPAN_DANGER("A rod of metal appears in \the [M]'s hand!")) - -/spell/targeted/equip_item/holy_relic/empower_spell() - if(!..()) - return 0 - - duration += 50 - - return "The holy relic now lasts for [duration/10] seconds." \ No newline at end of file diff --git a/code/modules/spells/targeted/equip/horsemask.dm b/code/modules/spells/targeted/equip/horsemask.dm deleted file mode 100644 index 5f22671bfe078..0000000000000 --- a/code/modules/spells/targeted/equip/horsemask.dm +++ /dev/null @@ -1,48 +0,0 @@ -/spell/targeted/equip_item/horsemask - name = "Curse of the Horseman" - desc = "This spell triggers a curse on a target, causing them to wield an unremovable horse head mask. They will speak like a horse! Any masks they are wearing will be disintegrated. This spell does not require robes." - school = "transmutation" - charge_type = Sp_RECHARGE - charge_max = 150 - charge_counter = 0 - spell_flags = 0 - invocation = "Kn'a Ftaghu, Puck'Bthnk!" - invocation_type = SpI_SHOUT - range = 7 - max_targets = 1 - level_max = list(Sp_TOTAL = 4, Sp_SPEED = 4, Sp_POWER = 1) - cooldown_min = 30 //30 deciseconds reduction per rank - selection_type = "range" - - compatible_mobs = list(/mob/living/carbon/human) - - hud_state = "wiz_horse" - cast_sound = 'sound/magic/horsehead_curse.ogg' - -/spell/targeted/equip_item/horsemask/New() - ..() - equipped_summons = list("[slot_wear_mask]" = /obj/item/clothing/mask/horsehead) - -/spell/targeted/equip_item/horsemask/cast(list/targets, mob/user = usr) - ..() - for(var/mob/living/target in targets) - target.visible_message( "[target]'s face lights up in fire, and after the event a horse's head takes its place!", \ - "Your face burns up, and shortly after the fire you realise you have the face of a horse!") - target.flash_eyes() - -/spell/targeted/equip_item/horsemask/summon_item(var/new_type) - var/obj/item/new_item = new new_type - new_item.canremove = 0 //curses! - if(istype(new_item, /obj/item/clothing/mask/horsehead)) - var/obj/item/clothing/mask/horsehead/magichead = new_item - magichead.flags_inv = null //so you can still see their face - magichead.voicechange = 1 //NEEEEIIGHH - return new_item - -/spell/targeted/equip_item/horsemask/empower_spell() - if(!..()) - return 0 - - spell_flags = SELECTABLE - - return "You can now select your target with [src]" \ No newline at end of file diff --git a/code/modules/spells/targeted/equip/party_hardy.dm b/code/modules/spells/targeted/equip/party_hardy.dm deleted file mode 100644 index 89deb2f475d87..0000000000000 --- a/code/modules/spells/targeted/equip/party_hardy.dm +++ /dev/null @@ -1,36 +0,0 @@ -/spell/targeted/equip_item/party_hardy - name = "Summon Party" - desc = "This spell was invented for the sole purpose of getting crunked at 11am on a Tuesday. Does not require wizard garb." - feedback = "PY" - school = "conjuration" - charge_type = Sp_RECHARGE - charge_max = 900 - cooldown_min = 600 - spell_flags = INCLUDEUSER - invocation = "Llet'Su G'iit Rrkned!" //Let's get wrecked. - invocation_type = SpI_SHOUT - range = 6 - max_targets = 0 - level_max = list(Sp_TOTAL = 3, Sp_SPEED = 1, Sp_POWER = 2) - delete_old = 0 - - hud_state = "wiz_party" - - compatible_mobs = list(/mob/living/carbon/human) - equipped_summons = list("active hand" = /obj/item/reagent_containers/food/drinks/bottle/small/beer) - -/spell/targeted/equip_item/party_hardy/empower_spell() - if(!..()) - return 0 - switch(spell_levels[Sp_POWER]) - if(1) - equipped_summons = list("active hand" = /obj/item/reagent_containers/food/drinks/bottle/small/beer, - "off hand" = /obj/item/reagent_containers/food/snacks/poppypretzel) - return "The spell will now give everybody a preztel as well." - if(2) - equipped_summons = list("active hand" = /obj/item/reagent_containers/food/drinks/bottle/absinthe, - "off hand" = /obj/item/reagent_containers/food/snacks/poppypretzel, - "[slot_head]" = /obj/item/clothing/head/collectable/wizard) - return "Woo! Now everybody gets a cool wizard hat and MORE BOOZE!" - - return 0 \ No newline at end of file diff --git a/code/modules/spells/targeted/equip/seed.dm b/code/modules/spells/targeted/equip/seed.dm deleted file mode 100644 index 9b560b7281a3c..0000000000000 --- a/code/modules/spells/targeted/equip/seed.dm +++ /dev/null @@ -1,21 +0,0 @@ -/spell/targeted/equip_item/seed - name = "Summon Seed" - desc = "This spell summons a random seed into the hand of the wizard." - feedback = "SE" - delete_old = 0 - - spell_flags = INCLUDEUSER | NEEDSCLOTHES - invocation_type = SpI_WHISPER - invocation = "Ria'li akta." - - equipped_summons = list("active hand" = /obj/item/seeds/random) - compatible_mobs = list(/mob/living/carbon/human) - - charge_max = 600 //1 minute - cooldown_min = 200 //20 seconds - level_max = list(Sp_TOTAL = 3, Sp_SPEED = 3, Sp_POWER = 0) - - range = -1 - max_targets = 1 - - hud_state = "wiz_seed" \ No newline at end of file diff --git a/code/modules/spells/targeted/equip/shield.dm b/code/modules/spells/targeted/equip/shield.dm deleted file mode 100644 index 251df50b8ca2e..0000000000000 --- a/code/modules/spells/targeted/equip/shield.dm +++ /dev/null @@ -1,44 +0,0 @@ -/spell/targeted/equip_item/shield - name = "Summon Shield" - desc = "Summons the most holy of shields, the riot shield. Commonly used during wizard riots." - feedback = "SH" - school = "conjuration" - invocation = "Sia helda!" - invocation_type = SpI_SHOUT - spell_flags = INCLUDEUSER | NEEDSCLOTHES - range = -1 - max_targets = 1 - - compatible_mobs = list(/mob/living/carbon/human) - - level_max = list(Sp_TOTAL = 3, Sp_SPEED = 2, Sp_POWER = 1) - charge_type = Sp_RECHARGE - charge_max = 900 - cooldown_min = 300 - equipped_summons = list("off hand" = /obj/item/shield) - duration = 300 - delete_old = 0 - var/item_color = "#6666ff" - var/block_chance = 30 - - hud_state = "wiz_shield" - -/spell/targeted/equip_item/shield/summon_item(var/new_type) - var/obj/item/shield/I = new new_type() - I.icon_state = "buckler" - I.color = item_color - I.SetName("Wizard's Shield") - I.base_block_chance = block_chance - return I - -/spell/targeted/equip_item/shield/empower_spell() - if(!..()) - return 0 - - item_color = "#6600ff" - block_chance = 60 - - return "Your summoned shields will now block more often." - -/spell/targeted/equip_item/shield/tower - charge_max = 1 \ No newline at end of file diff --git a/code/modules/spells/targeted/ethereal_jaunt.dm b/code/modules/spells/targeted/ethereal_jaunt.dm deleted file mode 100644 index ae4bf4cce24f4..0000000000000 --- a/code/modules/spells/targeted/ethereal_jaunt.dm +++ /dev/null @@ -1,139 +0,0 @@ -/spell/targeted/ethereal_jaunt - name = "Ethereal Jaunt" - desc = "This spell creates your ethereal form, temporarily making you invisible and able to pass through walls." - feedback = "EJ" - school = "transmutation" - charge_max = 30 SECONDS - spell_flags = Z2NOCAST | NEEDSCLOTHES | INCLUDEUSER - invocation = "none" - invocation_type = SpI_NONE - range = 0 - max_targets = 1 - level_max = list(Sp_TOTAL = 4, Sp_SPEED = 4, Sp_POWER = 3) - cooldown_min = 10 SECONDS //50 deciseconds reduction per rank - duration = 5 SECONDS - - hud_state = "wiz_jaunt" - - var/reappear_duration = 5 - var/obj/effect/dummy/spell_jaunt/jaunt_holder - var/atom/movable/overlay/animation - -/spell/targeted/ethereal_jaunt/Destroy() - if (jaunt_holder) // eject our user in case something happens and we get deleted - var/turf/T = get_turf(jaunt_holder) - for(var/mob/living/L in jaunt_holder) - L.forceMove(T) - QDEL_NULL(jaunt_holder) - QDEL_NULL(animation) - return ..() - -/spell/targeted/ethereal_jaunt/cast(list/targets) //magnets, so mostly hardcoded - for(var/mob/living/target in targets) - if(HAS_TRANSFORMATION_MOVEMENT_HANDLER(target)) - continue - - if(target.buckled) - target.buckled.unbuckle_mob() - spawn(0) - var/mobloc = get_turf(target.loc) - jaunt_holder = new/obj/effect/dummy/spell_jaunt(mobloc) - animation = new/atom/movable/overlay(mobloc) - animation.SetName("residue") - animation.set_density(FALSE) - animation.anchored = TRUE - animation.icon = 'icons/mob/mob.dmi' - animation.layer = FLY_LAYER - target.ExtinguishMob() - if(target.buckled) - target.buckled = null - jaunt_disappear(animation, target) - jaunt_steam(mobloc) - target.forceMove(jaunt_holder) - addtimer(CALLBACK(src, .proc/start_reappear, target), duration) - -/spell/targeted/ethereal_jaunt/proc/start_reappear(mob/living/user) - var/mob_loc = jaunt_holder.last_valid_turf - jaunt_holder.reappearing = TRUE - jaunt_steam(mob_loc) - jaunt_reappear(animation, user) - animation.forceMove(mob_loc) - addtimer(CALLBACK(src, .proc/reappear, mob_loc, user), reappear_duration) - -/spell/targeted/ethereal_jaunt/proc/reappear(var/mob_loc, mob/living/user) - if(!user.forceMove(mob_loc)) - for(var/direction in list(1,2,4,8,5,6,9,10)) - var/turf/T = get_step(mob_loc, direction) - if(T && user.forceMove(T)) - break - user.client.eye = user - QDEL_NULL(animation) - QDEL_NULL(jaunt_holder) - -/spell/targeted/ethereal_jaunt/empower_spell() - if(!..()) - return 0 - duration += 2 SECONDS - - return "[src] now lasts longer." - -/spell/targeted/ethereal_jaunt/proc/jaunt_disappear(var/atom/movable/overlay/animation, var/mob/living/target) - animation.icon_state = "liquify" - flick("liquify",animation) - playsound(get_turf(target), 'sound/magic/ethereal_enter.ogg', 30) - -/spell/targeted/ethereal_jaunt/proc/jaunt_reappear(var/atom/movable/overlay/animation, var/mob/living/target) - flick("reappear",animation) - playsound(get_turf(target), 'sound/magic/ethereal_exit.ogg', 30) - -/spell/targeted/ethereal_jaunt/proc/jaunt_steam(var/mobloc) - var/datum/effect/effect/system/steam_spread/steam = new /datum/effect/effect/system/steam_spread() - steam.set_up(10, 0, mobloc) - steam.start() - -/obj/effect/dummy/spell_jaunt - name = "water" - icon = 'icons/effects/effects.dmi' - icon_state = "nothing" - var/canmove = 1 - var/reappearing = 0 - density = FALSE - anchored = TRUE - var/turf/last_valid_turf - -/obj/effect/dummy/spell_jaunt/New(var/location) - ..() - last_valid_turf = get_turf(location) - -/obj/effect/dummy/spell_jaunt/Destroy() - // Eject contents if deleted somehow - for(var/atom/movable/AM in src) - AM.dropInto(loc) - return ..() - -/obj/effect/dummy/spell_jaunt/relaymove(var/mob/user, direction) - if (!canmove || reappearing) return - var/turf/newLoc = get_step(src, direction) - if (!newLoc) - to_chat(user, SPAN_WARNING("You cannot go that way.")) - else if (!(newLoc.turf_flags & TURF_FLAG_NOJAUNT)) - forceMove(newLoc) - var/turf/T = get_turf(loc) - if(!T.contains_dense_objects()) - last_valid_turf = T - else - to_chat(user, "Some strange aura is blocking the way!") - canmove = 0 - addtimer(CALLBACK(src, .proc/allow_move), 2) - -/obj/effect/dummy/spell_jaunt/proc/allow_move() - canmove = TRUE - -/obj/effect/dummy/spell_jaunt/ex_act(blah) - return -/obj/effect/dummy/spell_jaunt/bullet_act(blah) - return - -/spell/targeted/ethereal_jaunt/tower - charge_max = 2 - spell_flags = Z2NOCAST | INCLUDEUSER diff --git a/code/modules/spells/targeted/exhude_pleasantness.dm b/code/modules/spells/targeted/exhude_pleasantness.dm deleted file mode 100644 index ce51987dd7705..0000000000000 --- a/code/modules/spells/targeted/exhude_pleasantness.dm +++ /dev/null @@ -1,19 +0,0 @@ -/spell/targeted/exhude_pleasantness - name = "Exhude Pleasantness" - desc = "A simple spell used to make friends with people. Be warned, this spell only has a subtle effect." - feedback = "AP" - school = "Illusion" - spell_flags = INCLUDEUSER - range = 5 - max_targets = 0 - charge_max = 100 - var/list/possible_messages = list("seems pretty trustworthy!", "makes you feel appreciated.", "looks pretty cool.", "feels like the only decent person here!", "makes you feel safe.") - hud_state = "friendly" - -/spell/targeted/exhude_pleasantness/cast(var/list/targets, var/mob/user) - for(var/m in targets) - var/mob/living/L = m - if(L.mind && L.mind.special_role == ANTAG_SERVANT) - to_chat(m, "\The [user] seems relatively harmless.") - else - to_chat(m, "\The [user] [pick(possible_messages)]") \ No newline at end of file diff --git a/code/modules/spells/targeted/genetic.dm b/code/modules/spells/targeted/genetic.dm deleted file mode 100644 index db570ef6cb046..0000000000000 --- a/code/modules/spells/targeted/genetic.dm +++ /dev/null @@ -1,118 +0,0 @@ -/* -Other mutation or disability spells can be found in -code\game\dna\genes\vg_powers.dm //hulk is in this file -code\game\dna\genes\goon_disabilities.dm -code\game\dna\genes\goon_powers.dm -*/ -/spell/targeted/genetic - name = "Genetic modifier" - desc = "This spell inflicts a set of mutations and disabilities upon the target." - - var/disabilities = 0 //bits - var/list/mutations = list() //mutation strings - duration = 100 //deciseconds - - -/spell/targeted/genetic/cast(list/targets) - ..() - for(var/mob/living/target in targets) - for(var/x in mutations) - target.mutations.Add(x) - target.disabilities |= disabilities - target.update_mutations() //update target's mutation overlays - spawn(duration) - for(var/x in mutations) - target.mutations.Remove(x) - target.disabilities &= ~disabilities - target.update_mutations() - return - -/spell/targeted/genetic/blind - name = "Blind" - desc = "This spell inflicts a target with temporary blindness. Does not require wizard garb." - feedback = "BD" - disabilities = 1 - school = "illusion" - duration = 300 - - charge_max = 300 - - spell_flags = 0 - invocation = "Sty Kaly." - invocation_type = SpI_WHISPER - message = "Your eyes cry out in pain!" - level_max = list(Sp_TOTAL = 3, Sp_SPEED = 1, Sp_POWER = 3) - cooldown_min = 50 - - range = 7 - max_targets = 0 - - amt_eye_blind = 10 - amt_eye_blurry = 20 - - hud_state = "wiz_blind" - cast_sound = 'sound/magic/blind.ogg' - -/spell/targeted/genetic/blind/empower_spell() - if(!..()) - return 0 - duration += 100 - - return "[src] will now blind for a longer period of time." - -/spell/targeted/genetic/mutate - name = "Mutate" - desc = "This spell causes you to turn into a hulk and gain laser vision for a short while." - feedback = "MU" - school = "transmutation" - charge_max = 400 - spell_flags = Z2NOCAST | NEEDSCLOTHES | INCLUDEUSER - invocation = "BIRUZ BENNAR" - invocation_type = SpI_SHOUT - message = "You feel strong! You feel a pressure building behind your eyes!" - range = 0 - max_targets = 1 - - mutations = list(MUTATION_LASER, MUTATION_HULK) - duration = 300 - - level_max = list(Sp_TOTAL = 1, Sp_SPEED = 1, Sp_POWER = 0) - cooldown_min = 300 - - hud_state = "wiz_hulk" - cast_sound = 'sound/magic/mutate.ogg' - effect_state = "electricity_constant" - effect_duration = 5 - effect_color = "#ff0000" - -/spell/targeted/genetic/blind/hysteria - name = "Hysteria" - desc = "A spell used to make someone look like a blind fool, and also makes them a blind fool." - feedback = "HY" - school = "illusion" - spell_flags = SELECTABLE - charge_max = 600 - invocation_type = SpI_SHOUT - invocation = "Sty Di Kaly!" - amt_dizziness = 10 - hud_state = "hysteria" - -/spell/targeted/genetic/blind/starburst - name = "Starburst" - desc = "Send a jolt of electricity through everyone's nerve center, blinding and stunning them." - feedback = "SB" - school = "transmutation" - invocation = "Tid Caeh Yor!" - spell_flags = NOFACTION - invocation_type = SpI_SHOUT - charge_max = 60 SECONDS - spell_flags = 0 - - amt_dizziness = 0 - amt_eye_blurry = 5 - amt_stunned = 1 - - effect_state = "electricity_constant" - effect_duration = 5 - - hud_state = "wiz_starburst" \ No newline at end of file diff --git a/code/modules/spells/targeted/glimpse_of_eternity.dm b/code/modules/spells/targeted/glimpse_of_eternity.dm deleted file mode 100644 index f90d673c41b01..0000000000000 --- a/code/modules/spells/targeted/glimpse_of_eternity.dm +++ /dev/null @@ -1,26 +0,0 @@ -/spell/targeted/glimpse_of_eternity - name = "Glimpse of Eternity" - desc = "Show the non-believers what enlightenment truely means." - feedback = "GE" - school = "illusion" - invocation = "Ghe Tar Yet!" - invocation_type = SpI_SHOUT - spell_flags = INCLUDEUSER - max_targets = 0 - charge_max = 400 - range = 3 - - hud_state = "wiz_glimpse" - -/spell/targeted/glimpse_of_eternity/cast(var/list/targets, var/mob/user) - for(var/t in targets) - var/mob/living/L = t - if(L.faction != user.faction) //Worse for non-allies - L.eye_blind += 5 - L.Stun(5) - new /obj/effect/temporary(get_turf(L), 5, 'icons/effects/effects.dmi', "electricity_constant") - else - L.eye_blind += 2 - L.adjustBruteLoss(-10) - L.adjustFireLoss(-10) - new /obj/effect/temporary(get_turf(L), 5, 'icons/effects/effects.dmi', "green_sparkles") \ No newline at end of file diff --git a/code/modules/spells/targeted/harvest.dm b/code/modules/spells/targeted/harvest.dm deleted file mode 100644 index 840fd47b8faa2..0000000000000 --- a/code/modules/spells/targeted/harvest.dm +++ /dev/null @@ -1,37 +0,0 @@ -/spell/targeted/harvest - name = "Harvest" - desc = "Back to where I come from, and you're coming with me." - - school = "transmutation" - charge_max = 200 - spell_flags = Z2NOCAST | CONSTRUCT_CHECK | INCLUDEUSER - invocation = "" - invocation_type = SpI_NONE - range = 0 - max_targets = 0 - - overlay = 1 - overlay_icon = 'icons/effects/effects.dmi' - overlay_icon_state = "rune_teleport" - overlay_lifespan = 0 - - hud_state = "const_harvest" - -/spell/targeted/harvest/cast(list/targets, mob/user)//because harvest is already a proc - ..() - - var/destination = null - for(var/obj/singularity/narsie/large/N in narsie_list) - destination = N.loc - break - if(destination) - var/prey = 0 - for(var/mob/living/M in targets) - if(!findNullRod(M)) - M.forceMove(destination) - if(M != user) - prey = 1 - to_chat(user, "You warp back to Nar-Sie[prey ? " along with your prey":""].") - else - to_chat(user, "...something's wrong!")//There shouldn't be an instance of Harvesters when Nar-Sie isn't in the world. - diff --git a/code/modules/spells/targeted/projectile/dumbfire.dm b/code/modules/spells/targeted/projectile/dumbfire.dm deleted file mode 100644 index 5db69524ce94d..0000000000000 --- a/code/modules/spells/targeted/projectile/dumbfire.dm +++ /dev/null @@ -1,14 +0,0 @@ -/spell/targeted/projectile/dumbfire - name = "dumbfire spell" - selection_type = "range" - -/spell/targeted/projectile/dumbfire/choose_targets(mob/user = usr) - var/list/targets = list() - - var/starting_dir = user.dir //where are we facing at the time of casting? - var/turf/starting_turf = get_turf(user) - var/current_turf = starting_turf - for(var/i = 1; i <= src.range; i++) - current_turf = get_step(current_turf, starting_dir) - targets += current_turf - return targets \ No newline at end of file diff --git a/code/modules/spells/targeted/projectile/fireball.dm b/code/modules/spells/targeted/projectile/fireball.dm deleted file mode 100644 index 150d01d92a0f7..0000000000000 --- a/code/modules/spells/targeted/projectile/fireball.dm +++ /dev/null @@ -1,71 +0,0 @@ -/spell/targeted/projectile/dumbfire/fireball - name = "Fireball" - desc = "This spell fires a fireball at a target and does not require wizard garb." - feedback = "FB" - proj_type = /obj/item/projectile/spell_projectile/fireball - - school = "conjuration" - charge_max = 10 SECONDS - spell_flags = 0 - invocation = "Oni-Soma!" - invocation_type = SpI_SHOUT - range = 20 - - level_max = list(Sp_TOTAL = 5, Sp_SPEED = 0, Sp_POWER = 5) - - spell_flags = 0 - - duration = 20 - proj_step_delay = 1 - - amt_dam_brute = 20 - amt_dam_fire = 25 - - var/ex_severe = -1 - var/ex_heavy = 1 - var/ex_light = 2 - var/ex_flash = 5 - - hud_state = "wiz_fireball" - cast_sound = 'sound/magic/fireball.ogg' - -/spell/targeted/projectile/dumbfire/fireball/prox_cast(var/list/targets, spell_holder) - for(var/mob/living/M in targets) - apply_spell_damage(M) - explosion(get_turf(spell_holder), ex_severe, ex_heavy, ex_light, ex_flash) - -/spell/targeted/projectile/dumbfire/fireball/empower_spell() - if(!..()) - return 0 - - if(spell_levels[Sp_POWER]%2 == 1) - ex_severe++ - ex_heavy++ - ex_light++ - ex_flash++ - - return "The spell [src] now has a larger explosion." - -/spell/targeted/projectile/dumbfire/fireball/tower - charge_max = 2 - -//PROJECTILE - -/obj/item/projectile/spell_projectile/fireball - name = "fireball" - icon_state = "fireball" - -/spell/targeted/projectile/dumbfire/fireball/firebolt - name = "Firebolt" - desc = "A quick-casted fireball. Burns the user, and their enemies, but is much faster to shoot." - feedback = "FO" - charge_type = Sp_HOLDVAR - invocation = "Ignus!" - holder_var_type = "fireloss" - holder_var_amount = 10 - amt_dam_brute = 10 - amt_dam_fire = 15 - ex_heavy = -1 - ex_light = 1 - ex_flash = 3 - hud_state = "firebolt" \ No newline at end of file diff --git a/code/modules/spells/targeted/projectile/magic_missile.dm b/code/modules/spells/targeted/projectile/magic_missile.dm deleted file mode 100644 index 1d72399718a92..0000000000000 --- a/code/modules/spells/targeted/projectile/magic_missile.dm +++ /dev/null @@ -1,56 +0,0 @@ -/spell/targeted/projectile/magic_missile - name = "Magic Missile" - desc = "This spell fires several, slow moving, magic projectiles at nearby targets." - feedback = "MM" - school = "conjuration" - charge_max = 150 - spell_flags = NEEDSCLOTHES - invocation = "Forti Gy-Ama!" - invocation_type = SpI_SHOUT - range = 7 - level_max = list(Sp_TOTAL = 3, Sp_SPEED = 3, Sp_POWER = 3) - cooldown_min = 90 //15 deciseconds reduction per rank - - max_targets = 0 - - proj_type = /obj/item/projectile/spell_projectile/seeking/magic_missile - duration = 10 - proj_step_delay = 5 - - hud_state = "wiz_mm" - cast_sound = 'sound/magic/magic_missile.ogg' - amt_paralysis = 3 - amt_stunned = 3 - - amt_dam_fire = 10 - -/spell/targeted/projectile/magic_missile/prox_cast(var/list/targets, atom/spell_holder) - spell_holder.visible_message("\The [spell_holder] pops with a flash!") - playsound(src, 'sound/magic/mm_hit.ogg', 40) - for(var/mob/living/M in targets) - apply_spell_damage(M) - return - -/spell/targeted/projectile/magic_missile/empower_spell() - if(!..()) - return 0 - - if(spell_levels[Sp_POWER] == level_max[Sp_POWER]) - amt_paralysis += 2 - amt_stunned += 2 - return "[src] will now stun people for a longer duration." - amt_dam_fire += 5 - - return "[src] does more damage now." - - - -//PROJECTILE - -/obj/item/projectile/spell_projectile/seeking/magic_missile - name = "magic missile" - icon_state = "magicm" - - proj_trail = 1 - proj_trail_lifespan = 5 - proj_trail_icon_state = "magicmd" diff --git a/code/modules/spells/targeted/projectile/passage.dm b/code/modules/spells/targeted/projectile/passage.dm deleted file mode 100644 index d84b370abf777..0000000000000 --- a/code/modules/spells/targeted/projectile/passage.dm +++ /dev/null @@ -1,47 +0,0 @@ -/spell/targeted/projectile/dumbfire/passage - name = "Passage" - desc = "throw a spell towards an area and teleport to it." - feedback = "PA" - proj_type = /obj/item/projectile/spell_projectile/passage - - - school = "conjuration" - charge_max = 250 - spell_flags = 0 - invocation = "A'YASAMA" - invocation_type = SpI_SHOUT - range = 15 - - - level_max = list(Sp_TOTAL = 1, Sp_SPEED = 0, Sp_POWER = 1) - spell_flags = NEEDSCLOTHES - duration = 15 - - proj_step_delay = 1 - - hud_state = "gen_project" - cast_sound = 'sound/magic/lightning_bolt.ogg' - -/spell/targeted/projectile/dumbfire/passage/prox_cast(var/list/targets, atom/spell_holder) - for(var/mob/living/L in targets) - apply_spell_damage(L) - - var/turf/T = get_turf(spell_holder) - - holder.forceMove(T) - var/datum/effect/effect/system/smoke_spread/S = new /datum/effect/effect/system/smoke_spread() - S.set_up(3,0,T) - S.start() - playsound(src, 'sound/magic/lightningshock.ogg', 50) - -/spell/targeted/projectile/dumbfire/passage/empower_spell() - if(!..()) - return 0 - - amt_stunned += 3 - - return "[src] now stuns those who get hit by it." - -/obj/item/projectile/spell_projectile/passage - name = "spell" - icon_state = "energy2" \ No newline at end of file diff --git a/code/modules/spells/targeted/projectile/projectile.dm b/code/modules/spells/targeted/projectile/projectile.dm deleted file mode 100644 index 2cc2b2a559b4b..0000000000000 --- a/code/modules/spells/targeted/projectile/projectile.dm +++ /dev/null @@ -1,49 +0,0 @@ -/* -Projectile spells make special projectiles (obj/item/spell_projectile) and fire them at targets -Dumbfire projectile spells fire directly ahead of the user -spell_projectiles call their spell's (carried) prox_cast when they get in range of a target -If the spell_projectile is seeking, it will update its target every process and follow them -*/ - -/spell/targeted/projectile - name = "projectile spell" - - range = 7 - - var/proj_type = /obj/item/projectile/spell_projectile //use these. They are very nice - - var/proj_step_delay = 1 //lower = faster - var/cast_prox_range = 1 - -/spell/targeted/projectile/cast(list/targets, mob/user = usr) - for(var/atom/target in targets) - var/obj/item/projectile/projectile = new proj_type(user.loc, user.dir) - - if(!projectile) - return - - if(istype(projectile, /obj/item/projectile/spell_projectile)) - var/obj/item/projectile/spell_projectile/SP = projectile - SP.carried = src //casting is magical - projectile.original = target - projectile.starting = get_turf(user) - projectile.shot_from = user //fired from the user - projectile.current = projectile.original - projectile.yo = target.y - user.y - projectile.xo = target.x - user.x - projectile.life_span = src.duration - projectile.hitscan = !proj_step_delay - projectile.step_delay = proj_step_delay - projectile.launch(target) - return - -/spell/targeted/projectile/proc/choose_prox_targets(mob/user = usr, var/atom/movable/spell_holder) - var/list/targets = list() - for(var/mob/living/M in range(spell_holder, cast_prox_range)) - if(M == user && !(spell_flags & INCLUDEUSER)) - continue - targets += M - return targets - -/spell/targeted/projectile/proc/prox_cast(var/list/targets, var/atom/movable/spell_holder) - return targets \ No newline at end of file diff --git a/code/modules/spells/targeted/projectile/stuncuff.dm b/code/modules/spells/targeted/projectile/stuncuff.dm deleted file mode 100644 index 96dc277f720e3..0000000000000 --- a/code/modules/spells/targeted/projectile/stuncuff.dm +++ /dev/null @@ -1,49 +0,0 @@ -/spell/targeted/projectile/dumbfire/stuncuff - name = "Stun Cuff" - desc = "This spell fires out a small curse that stuns and cuffs the target." - feedback = "SC" - proj_type = /obj/item/projectile/spell_projectile/stuncuff - - charge_type = Sp_CHARGES - charge_max = 6 - charge_counter = 6 - spell_flags = 0 - invocation = "Fu'Reai Diakan!" - invocation_type = SpI_SHOUT - range = 20 - - level_max = list(Sp_TOTAL = 0, Sp_SPEED = 0, Sp_POWER = 0) - - duration = 20 - proj_step_delay = 1 - - amt_stunned = 6 - - hud_state = "wiz_cuff" - cast_sound = 'sound/magic/wandodeath.ogg' - -/spell/targeted/projectile/dumbfire/stuncuff/prox_cast(var/list/targets, spell_holder) - for(var/mob/living/M in targets) - if(istype(M,/mob/living/carbon/human)) - var/mob/living/carbon/human/H = M - var/obj/item/handcuffs/wizard/cuffs = new() - cuffs.forceMove(H) - H.handcuffed = cuffs - H.update_inv_handcuffed() - H.visible_message("Beams of light form around \the [H]'s hands!") - apply_spell_damage(M) - - -/obj/item/handcuffs/wizard - name = "beams of light" - desc = "Undescribable and unpenetrable. Or so they say." - - breakouttime = 300 //30 seconds - -/obj/item/handcuffs/wizard/dropped(var/mob/user) - ..() - qdel(src) - -/obj/item/projectile/spell_projectile/stuncuff - name = "stuncuff" - icon_state = "spell" \ No newline at end of file diff --git a/code/modules/spells/targeted/shapeshift.dm b/code/modules/spells/targeted/shapeshift.dm deleted file mode 100644 index c03efffe4d087..0000000000000 --- a/code/modules/spells/targeted/shapeshift.dm +++ /dev/null @@ -1,199 +0,0 @@ -//basic transformation spell. Should work for most simple_animals - -/spell/targeted/shapeshift - name = "Shapeshift" - desc = "This spell transforms the target into something else for a short while." - - school = "transmutation" - - charge_type = Sp_RECHARGE - charge_max = 600 - - duration = 0 //set to 0 for permanent. - - var/list/possible_transformations = list() - var/list/newVars = list() //what the variables of the new created thing will be. - - cast_sound = 'sound/magic/charge.ogg' - var/revert_sound = 'sound/magic/charge.ogg' //the sound that plays when something gets turned back. - var/share_damage = 1 //do we want the damage we take from our new form to move onto our real one? (Only counts for finite duration) - var/drop_items = 1 //do we want to drop all our items when we transform? - var/toggle = 0 //Can we toggle this? - var/list/transformed_dudes = list() //Who we transformed. Transformed = Transformation. Both mobs. - -/spell/targeted/shapeshift/cast(var/list/targets, mob/user) - for(var/m in targets) - var/mob/living/M = m - if(M.stat == DEAD) - to_chat(user, "[name] can only transform living targets.") - continue - if(M.buckled) - M.buckled.unbuckle_mob() - if(toggle && transformed_dudes.len && stop_transformation(M)) - continue - var/new_mob = pick(possible_transformations) - - var/mob/living/trans = new new_mob(get_turf(M)) - for(var/varName in newVars) //stolen shamelessly from Conjure - if(varName in trans.vars) - trans.vars[varName] = newVars[varName] - //Give them our languages - for(var/l in M.languages) - var/datum/language/L = l - trans.add_language(L.name) - - trans.SetName("[trans.name] ([M])") - if(istype(M,/mob/living/carbon/human) && drop_items) - for(var/obj/item/I in M.contents) - M.drop_from_inventory(I) - if(M.mind) - M.mind.transfer_to(trans) - else - trans.key = M.key - new /obj/effect/temporary(get_turf(M), 5, 'icons/effects/effects.dmi', "summoning") - - M.forceMove(trans) //move inside the new dude to hide him. - M.status_flags |= GODMODE //don't want him to die or breathe or do ANYTHING - transformed_dudes[trans] = M - GLOB.death_event.register(trans,src,/spell/targeted/shapeshift/proc/stop_transformation) - GLOB.destroyed_event.register(trans,src,/spell/targeted/shapeshift/proc/stop_transformation) - GLOB.destroyed_event.register(M, src, /spell/targeted/shapeshift/proc/destroyed_transformer) - if(duration) - spawn(duration) - stop_transformation(trans) - -/spell/targeted/shapeshift/proc/destroyed_transformer(var/mob/target) //Juuuuust in case - var/mob/current = transformed_dudes[target] - to_chat(current, "You suddenly feel as if this transformation has become permanent...") - remove_target(target) - -/spell/targeted/shapeshift/proc/stop_transformation(var/mob/living/target) - var/mob/living/transformer = transformed_dudes[target] - if(!transformer) - return FALSE - transformer.status_flags &= ~GODMODE - if(share_damage) - var/ratio = target.health/target.maxHealth - var/damage = transformer.maxHealth - round(transformer.maxHealth*(ratio)) - for(var/i in 1 to Ceil(damage/10)) - transformer.adjustBruteLoss(10) - if(target.mind) - target.mind.transfer_to(transformer) - else - transformer.key = target.key - playsound(get_turf(target), revert_sound, 50, 1) - transformer.forceMove(get_turf(target)) - remove_target(target) - qdel(target) - return TRUE - -/spell/targeted/shapeshift/proc/remove_target(var/mob/living/target) - var/mob/current = transformed_dudes[target] - GLOB.destroyed_event.unregister(target,src) - GLOB.death_event.unregister(current,src) - GLOB.destroyed_event.unregister(current,src) - transformed_dudes[target] = null - transformed_dudes -= target - -/spell/targeted/shapeshift/baleful_polymorph - name = "Baleful Polymorth" - desc = "This spell transforms its target into a small, furry animal." - feedback = "BP" - possible_transformations = list(/mob/living/simple_animal/passive/lizard,/mob/living/simple_animal/passive/mouse,/mob/living/simple_animal/passive/corgi) - - share_damage = 0 - invocation = "Yo'balada!" - invocation_type = SpI_SHOUT - spell_flags = NEEDSCLOTHES | SELECTABLE - range = 3 - duration = 150 //15 seconds. - cooldown_min = 200 //20 seconds - - level_max = list(Sp_TOTAL = 2, Sp_SPEED = 2, Sp_POWER = 2) - - newVars = list("health" = 50, "maxHealth" = 50) - - hud_state = "wiz_poly" - - -/spell/targeted/shapeshift/baleful_polymorph/empower_spell() - if(!..()) - return 0 - - duration += 50 - - return "Your target will now stay in their polymorphed form for [duration/10] seconds." - -/spell/targeted/shapeshift/avian - name = "Polymorph" - desc = "This spell transforms the wizard into the common parrot." - feedback = "AV" - possible_transformations = list(/mob/living/simple_animal/hostile/retaliate/parrot) - - drop_items = 0 - share_damage = 0 - invocation = "Poli'crakata!" - invocation_type = SpI_SHOUT - spell_flags = INCLUDEUSER - range = -1 - duration = 150 - charge_max = 600 - cooldown_min = 300 - level_max = list(Sp_TOTAL = 1, Sp_SPEED = 1, Sp_POWER = 0) - hud_state = "wiz_parrot" - -/spell/targeted/shapeshift/corrupt_form - name = "Corrupt Form" - desc = "This spell shapes the wizard into a terrible, terrible beast." - feedback = "CF" - possible_transformations = list(/mob/living/simple_animal/hostile/faithless) - - invocation = "mutters something dark and twisted as their form begins to twist..." - invocation_type = SpI_EMOTE - spell_flags = INCLUDEUSER - range = -1 - duration = 150 - charge_max = 1200 - cooldown_min = 600 - - drop_items = 0 - share_damage = 0 - level_max = list(Sp_TOTAL = 3, Sp_SPEED = 2, Sp_POWER = 2) - - newVars = list("name" = "corrupted soul") - - hud_state = "wiz_corrupt" - cast_sound = 'sound/magic/disintegrate.ogg' - -/spell/targeted/shapeshift/corrupt_form/empower_spell() - if(!..()) - return 0 - - switch(spell_levels[Sp_POWER]) - if(1) - duration *= 2 - return "You will now stay corrupted for [duration/10] seconds." - if(2) - newVars = list("name" = "\proper corruption incarnate", - "melee_damage_upper" = 25, - "resistance" = 6, - "health" = 125, - "maxHealth" = 125) - duration = 0 - return "You revel in the corruption. There is no turning back." - -/spell/targeted/shapeshift/familiar - name = "Transform" - desc = "Transform into a familiar form. Literally." - feedback = "FA" - possible_transformations = list() - drop_items = 0 - invocation_type = SpI_EMOTE - invocation = "'s body dissipates into a pale mass of light, then reshapes!" - range = -1 - spell_flags = INCLUDEUSER - duration = 0 - charge_max = 2 MINUTES - toggle = 1 - - hud_state = "wiz_carp" diff --git a/code/modules/spells/targeted/shatter_mind.dm b/code/modules/spells/targeted/shatter_mind.dm deleted file mode 100644 index d878c2a094b70..0000000000000 --- a/code/modules/spells/targeted/shatter_mind.dm +++ /dev/null @@ -1,29 +0,0 @@ -/spell/targeted/shatter - name = "Shatter Mind" - desc = "this spell allows the caster to literally break an enemy's mind. Permanently." - feedback = "SM" - school = "illusion" - charge_max = 300 - spell_flags = 0 - invocation_type = SpI_NONE - range = 5 - max_targets = 1 - compatible_mobs = list(/mob/living/carbon/human) - - time_between_channels = 150 - number_of_channels = 0 - - hud_state = "wiz_statue" - -/spell/targeted/shatter/cast(var/list/targets, var/mob/user) - var/mob/living/carbon/human/H = targets[1] - if(prob(50)) - sound_to(user, get_sfx("swing_hit")) - if(prob(5)) - to_chat(H, "You feel unhinged.") - H.adjust_hallucination(5,5) - H.confused += 2 - H.dizziness += 2 - if(H.hallucination_power > 50) - H.adjustBrainLoss(5) - to_chat(H, "You feel your mind tearing apart!") \ No newline at end of file diff --git a/code/modules/spells/targeted/shift.dm b/code/modules/spells/targeted/shift.dm deleted file mode 100644 index 63f51a35a6efb..0000000000000 --- a/code/modules/spells/targeted/shift.dm +++ /dev/null @@ -1,26 +0,0 @@ -/spell/targeted/ethereal_jaunt/shift - name = "Phase Shift" - desc = "This spell allows you to pass through walls." - - charge_max = 20 SECONDS - spell_flags = Z2NOCAST | INCLUDEUSER | CONSTRUCT_CHECK - invocation_type = SpI_NONE - duration = 5 SECONDS - reappear_duration = 1.2 SECONDS - - hud_state = "const_shift" - -/spell/targeted/ethereal_jaunt/shift/jaunt_disappear(var/atom/movable/overlay/animation, var/mob/living/target) - to_chat(target, SPAN_DANGER("You silently phase out.")) // no visible message - phase shift is silent - animation.icon_state = "phase_shift" - animation.dir = target.dir - flick("phase_shift", animation) - -/spell/targeted/ethereal_jaunt/shift/jaunt_reappear(var/atom/movable/overlay/animation, var/mob/living/target) - to_chat(target, SPAN_DANGER("You return from your jaunt.")) - animation.icon_state = "phase_shift2" - animation.dir = target.dir - flick("phase_shift2", animation) - -/spell/targeted/ethereal_jaunt/shift/jaunt_steam(var/mobloc) - return diff --git a/code/modules/spells/targeted/subjugate.dm b/code/modules/spells/targeted/subjugate.dm deleted file mode 100644 index 914de088ed280..0000000000000 --- a/code/modules/spells/targeted/subjugate.dm +++ /dev/null @@ -1,35 +0,0 @@ -/spell/targeted/subjugation - name = "Subjugation" - desc = "This spell temporarily subjugates a target's mind and does not require wizard garb." - feedback = "SJ" - school = "illusion" - charge_max = 500 - spell_flags = NOFACTION - invocation = "Dii Oda Baji." - invocation_type = SpI_WHISPER - - message = "You suddenly feel completely overwhelmed!" - - max_targets = 1 - - level_max = list(Sp_TOTAL = 3, Sp_SPEED = 0, Sp_POWER = 3) - - amt_dizziness = 100 - amt_confused = 100 - amt_stuttering = 100 - - compatible_mobs = list(/mob/living/carbon/human) - - hud_state = "wiz_subj" - -/spell/targeted/subjugation/empower_spell() - if(!..()) - return 0 - - if(spell_levels[Sp_POWER] == level_max[Sp_POWER]) - max_targets = 0 - - return "[src] will now effect everyone in the area." - else - max_targets++ - return "[src] will now effect [max_targets] people." \ No newline at end of file diff --git a/code/modules/spells/targeted/swap.dm b/code/modules/spells/targeted/swap.dm deleted file mode 100644 index 150bd90307726..0000000000000 --- a/code/modules/spells/targeted/swap.dm +++ /dev/null @@ -1,41 +0,0 @@ -/spell/targeted/swap - name = "swap" - desc = "This spell swaps the positions of the wizard and a target. Causes brain damage." - feedback = "SW" - school = "conjuration" - - charge_type = Sp_HOLDVAR - holder_var_type = "brainloss" - holder_var_amount = 10 - - invocation = "Joyo!" - invocation_type = SpI_WHISPER - - level_max = list(Sp_TOTAL = 2, Sp_SPEED = 0, Sp_POWER = 2) - - spell_flags = Z2NOCAST - range = 6 - max_targets = 1 - compatible_mobs = list(/mob/living) - - hud_state = "wiz_swap" - - cast_sound = 'sound/magic/mandswap.ogg' - -/spell/targeted/swap/cast(var/list/targets, mob/user) - for(var/mob/T in targets) - var/turf/aT = get_turf(T) - var/turf/bT = get_turf(user) - - T.forceMove(bT) - user.forceMove(aT) - - apply_spell_damage(T) - -/spell/targeted/swap/empower_spell() - if(!..()) - return 0 - - amt_eye_blind += 2 - - return "This spell will now blind the target." diff --git a/code/modules/spells/targeted/targeted.dm b/code/modules/spells/targeted/targeted.dm deleted file mode 100644 index 794c94fc55a19..0000000000000 --- a/code/modules/spells/targeted/targeted.dm +++ /dev/null @@ -1,175 +0,0 @@ -/* -Targeted spells (with the exception of dumbfire) select from all the mobs in the defined range -Targeted spells have two useful flags: INCLUDEUSER and SELECTABLE. These are explained in setup.dm -*/ - - -/spell/targeted //can mean aoe for mobs (limited/unlimited number) or one target mob - var/max_targets = 1 //leave 0 for unlimited targets in range, more for limited number of casts (can all target one guy, depends on target_ignore_prev) in range - var/target_ignore_prev = 1 //only important if max_targets > 1, affects if the spell can be cast multiple times at one person from one cast - - - var/amt_weakened = 0 - var/amt_paralysis = 0 - var/amt_stunned = 0 - - var/amt_dizziness = 0 - var/amt_confused = 0 - var/amt_stuttering = 0 - - //set to negatives for healing unless commented otherwise - var/amt_dam_fire = 0 - var/amt_dam_brute = 0 - var/amt_dam_oxy = 0 - var/amt_dam_tox = 0 - var/amt_dam_robo = 0 - var/amt_brain = 0 - var/amt_radiation = 0 - var/amt_blood = 0 //Positive numbers to add blood - var/amt_organ = 0 //Positive numbers for healing - - var/amt_eye_blind = 0 - var/amt_eye_blurry = 0 - - var/effect_state = null //What effect to show on each, if any - var/effect_duration = 0 - var/effect_color = "#ffffff" - - var/list/compatible_mobs = list() - - -/spell/targeted/choose_targets(mob/user = usr) - var/list/targets = list() - - if(max_targets == 0) //unlimited - if(range == -2) - targets = GLOB.living_mob_list_ - else - for(var/mob/living/target in view_or_range(range, holder, selection_type)) - targets += target - - else if(max_targets == 1) //single target can be picked - if((range == 0 || range == -1) && spell_flags & INCLUDEUSER) - targets += user - else - var/list/possible_targets = list() - var/list/starting_targets - if(range == -2) - starting_targets = GLOB.living_mob_list_ - else - starting_targets = view_or_range(range, holder, selection_type) - - for(var/mob/living/M in starting_targets) - if(!(spell_flags & INCLUDEUSER) && M == user) - continue - if((spell_flags & NOFACTION) && user.faction == M.faction) - continue - if((spell_flags & NONONFACTION) && user.faction != M.faction) - continue - if(compatible_mobs && compatible_mobs.len) - if(!is_type_in_list(M, compatible_mobs)) continue - if(compatible_mobs && compatible_mobs.len && !is_type_in_list(M, compatible_mobs)) - continue - possible_targets += M - - if(possible_targets.len) - if(spell_flags & SELECTABLE) //if we are allowed to choose. see setup.dm for details - var/mob/temp_target = input(user, "Choose the target for the spell.", "Targeting") as null|mob in possible_targets - if(temp_target) - targets += temp_target - else - targets += pick(possible_targets) - //Adds a safety check post-input to make sure those targets are actually in range. - - - else - var/list/possible_targets = list() - var/list/starting_targets - - if(range == -2) - starting_targets = GLOB.living_mob_list_ - else - starting_targets = view_or_range(range, holder, selection_type) - - for(var/mob/living/target in starting_targets) - if(!(spell_flags & INCLUDEUSER) && target == user) - continue - if(compatible_mobs && !is_type_in_list(target, compatible_mobs)) - continue - possible_targets += target - - if(spell_flags & SELECTABLE) - for(var/i = 1; i<=max_targets, i++) - if(!possible_targets.len) - break - var/mob/M = input(user, "Choose the target for the spell.", "Targeting") as null|mob in possible_targets - if(!M) - break - if(range != -2) - if(!(M in view_or_range(range, holder, selection_type))) - continue - targets += M - possible_targets -= M - else - for(var/i=1,i<=max_targets,i++) - if(!possible_targets.len) - break - if(target_ignore_prev) - var/target = pick(possible_targets) - possible_targets -= target - targets += target - else - targets += pick(possible_targets) - - if(!(spell_flags & INCLUDEUSER) && (user in targets)) - targets -= user - - if(compatible_mobs && compatible_mobs.len) - for(var/mob/living/target in targets) //filters out all the non-compatible mobs - if(!is_type_in_list(target, compatible_mobs)) - targets -= target - - return targets - -/spell/targeted/cast(var/list/targets, mob/user) - for(var/mob/living/target in targets) - if(range >= 0) - if(!(target in view_or_range(range, holder, selection_type))) //filter at time of casting - targets -= target - continue - apply_spell_damage(target) - -/spell/targeted/proc/apply_spell_damage(mob/living/target) - target.adjustBruteLoss(amt_dam_brute) - target.adjustFireLoss(amt_dam_fire) - target.adjustToxLoss(amt_dam_tox) - target.adjustOxyLoss(amt_dam_oxy) - if(ishuman(target)) - var/mob/living/carbon/human/H = target - for(var/obj/item/organ/internal/affecting in H.internal_organs) - if(affecting && istype(affecting)) - affecting.heal_damage(amt_organ, amt_organ) - for(var/obj/item/organ/external/affecting in H.organs) - if(affecting && istype(affecting)) - var/dam = BP_IS_ROBOTIC(affecting) ? -amt_dam_robo : amt_organ - affecting.heal_damage(dam, dam, robo_repair = BP_IS_ROBOTIC(affecting)) - H.vessel.add_reagent(/datum/reagent/blood,amt_blood) - H.adjustBrainLoss(amt_brain) - H.radiation += min(H.radiation, amt_radiation) - H.fixblood() - target.regenerate_icons() - //disabling - target.Weaken(amt_weakened) - target.Paralyse(amt_paralysis) - target.Stun(amt_stunned) - if(amt_weakened || amt_paralysis || amt_stunned) - if(target.buckled) - target.buckled = null - target.eye_blind += amt_eye_blind - target.eye_blurry += amt_eye_blurry - target.dizziness += amt_dizziness - target.confused += amt_confused - target.stuttering += amt_stuttering - if(effect_state) - var/obj/o = new /obj/effect/temporary(get_turf(target), effect_duration, 'icons/effects/effects.dmi', effect_state) - o.color = effect_color \ No newline at end of file diff --git a/code/modules/spells/targeted/torment.dm b/code/modules/spells/targeted/torment.dm deleted file mode 100644 index 9391e9012bb8f..0000000000000 --- a/code/modules/spells/targeted/torment.dm +++ /dev/null @@ -1,34 +0,0 @@ -/spell/targeted/torment - name = "Torment" - desc = "this spell causes pain to all those in its radius." - feedback = "TM" - school = "illusion" - charge_max = 150 - spell_flags = NOFACTION - invocation = "Rai Di-Kaal!" - invocation_type = SpI_SHOUT - range = 5 - level_max = list(Sp_TOTAL = 1, Sp_SPEED = 0, Sp_POWER = 1) - cooldown_min = 50 - message = "So much pain! All you can hear is screaming!" - - max_targets = 0 - compatible_mobs = list(/mob/living/carbon/human) - - var/loss = 30 - - hud_state = "wiz_horse" - cast_sound = 'sound/magic/cowhead_curse.ogg' - -/spell/targeted/torment/cast(var/list/targets, var/mob/user) - gibs(user.loc) - for(var/mob/living/carbon/human/H in targets) - H.adjustHalLoss(loss) - -/spell/targeted/torment/empower_spell() - if(!..()) - return 0 - - loss += 30 - - return "[src] will now cause more pain." \ No newline at end of file diff --git a/code/modules/sprite_accessories/_accessory.dm b/code/modules/sprite_accessories/_accessory.dm deleted file mode 100644 index 1fe5fda42dd11..0000000000000 --- a/code/modules/sprite_accessories/_accessory.dm +++ /dev/null @@ -1,29 +0,0 @@ -/* - - Hello and welcome to sprite_accessories: For sprite accessories, such as hair, - facial hair, and possibly tattoos and stuff somewhere along the line. This file is - intended to be friendly for people with little to no actual coding experience. - The process of adding in new hairstyles has been made pain-free and easy to do. - Enjoy! - Doohl - - Notice: This all gets automatically compiled in a list in dna2.dm, so you do not - have to define any UI values for sprite accessories manually for hair and facial - hair. Just add in new hair types and the game will naturally adapt. - - !!WARNING!!: changing existing hair information can be VERY hazardous to savefiles, - to the point where you may completely corrupt a server's savefiles. Please refrain - from doing this unless you absolutely know what you are doing, and have defined a - conversion in savefile.dm -*/ - -/datum/sprite_accessory - var/name // The preview name of the accessory - var/icon // the icon file the accessory is located in - var/icon_state // the icon_state of the accessory - var/preview_state // A custom preview state for whatever reason - var/gender = NEUTER // Restricted to specific genders. - var/list/species_allowed = list(SPECIES_HUMAN, - SPECIES_SHELL) // Restrict some styles to specific bodytypes - var/list/subspecies_allowed // Restrict some styles to specific species names - var/do_coloration = DO_COLORATION_USER // Whether or not the accessory can be affected by colouration - var/blend = ICON_ADD diff --git a/code/modules/sprite_accessories/_accessory_facial.dm b/code/modules/sprite_accessories/_accessory_facial.dm deleted file mode 100644 index b67fd5a13b6a2..0000000000000 --- a/code/modules/sprite_accessories/_accessory_facial.dm +++ /dev/null @@ -1,142 +0,0 @@ -/* -/////////////////////////////////// -/ =---------------------------= / -/ == Facial Hair Definitions == / -/ =---------------------------= / -/////////////////////////////////// -*/ - -/datum/sprite_accessory/facial_hair - icon = 'icons/mob/human_races/species/human/facial.dmi' - gender = MALE - -/datum/sprite_accessory/facial_hair/shaved - name = "Shaved" - icon_state = "bald" - gender = NEUTER - species_allowed = list(SPECIES_HUMAN,SPECIES_UNATHI,SPECIES_SKRELL,SPECIES_VOX,SPECIES_IPC) - -/datum/sprite_accessory/facial_hair/watson - name = "Watson Mustache" - icon_state = "facial_watson" - -/datum/sprite_accessory/facial_hair/hogan - name = "Hulk Hogan Mustache" - icon_state = "facial_hogan" //-Neek - -/datum/sprite_accessory/facial_hair/vandyke - name = "Van Dyke Mustache" - icon_state = "facial_vandyke" - -/datum/sprite_accessory/facial_hair/chaplin - name = "Square Mustache" - icon_state = "facial_chaplin" - -/datum/sprite_accessory/facial_hair/selleck - name = "Selleck Mustache" - icon_state = "facial_selleck" - -/datum/sprite_accessory/facial_hair/neckbeard - name = "Neckbeard" - icon_state = "facial_neckbeard" - -/datum/sprite_accessory/facial_hair/fullbeard - name = "Full Beard" - icon_state = "facial_fullbeard" - -/datum/sprite_accessory/facial_hair/longbeard - name = "Long Beard" - icon_state = "facial_longbeard" - -/datum/sprite_accessory/facial_hair/vlongbeard - name = "Very Long Beard" - icon_state = "facial_wise" - -/datum/sprite_accessory/facial_hair/elvis - name = "Elvis Sideburns" - icon_state = "facial_elvis" - species_allowed = list(SPECIES_HUMAN,SPECIES_UNATHI) - -/datum/sprite_accessory/facial_hair/abe - name = "Abraham Lincoln Beard" - icon_state = "facial_abe" - -/datum/sprite_accessory/facial_hair/chinstrap - name = "Chinstrap" - icon_state = "facial_chin" - -/datum/sprite_accessory/facial_hair/hip - name = "Hipster Beard" - icon_state = "facial_hip" - -/datum/sprite_accessory/facial_hair/gt - name = "Goatee" - icon_state = "facial_gt" - -/datum/sprite_accessory/facial_hair/jensen - name = "Adam Jensen Beard" - icon_state = "facial_jensen" - -/datum/sprite_accessory/facial_hair/volaju - name = "Volaju" - icon_state = "facial_volaju" - -/datum/sprite_accessory/facial_hair/dwarf - name = "Dwarf Beard" - icon_state = "facial_dwarf" - -/datum/sprite_accessory/facial_hair/threeOclock - name = "3 O'clock Shadow" - icon_state = "facial_3oclock" - -/datum/sprite_accessory/facial_hair/threeOclockstache - name = "3 O'clock Shadow and Moustache" - icon_state = "facial_3oclockmoustache" - -/datum/sprite_accessory/facial_hair/fiveOclock - name = "5 O'clock Shadow" - icon_state = "facial_5oclock" - -/datum/sprite_accessory/facial_hair/fiveOclockstache - name = "5 O'clock Shadow and Moustache" - icon_state = "facial_5oclockmoustache" - -/datum/sprite_accessory/facial_hair/sevenOclock - name = "7 O'clock Shadow" - icon_state = "facial_7oclock" - -/datum/sprite_accessory/facial_hair/sevenOclockstache - name = "7 O'clock Shadow and Moustache" - icon_state = "facial_7oclockmoustache" - -/datum/sprite_accessory/facial_hair/mutton - name = "Mutton Chops" - icon_state = "facial_mutton" - -/datum/sprite_accessory/facial_hair/muttonstache - name = "Mutton Chops and Moustache" - icon_state = "facial_muttonmus" - -/datum/sprite_accessory/facial_hair/walrus - name = "Walrus Moustache" - icon_state = "facial_walrus" - -/datum/sprite_accessory/facial_hair/croppedbeard - name = "Full Cropped Beard" - icon_state = "facial_croppedfullbeard" - -/datum/sprite_accessory/facial_hair/chinless - name = "Chinless Beard" - icon_state = "facial_chinlessbeard" - -/datum/sprite_accessory/facial_hair/braided - name = "Braided Beard" - icon_state = "facial_biker" - -/datum/sprite_accessory/facial_hair/seadog - name = "Sea Dog" - icon_state = "facial_seadog" - -/datum/sprite_accessory/facial_hair/lumberjack - name = "Lumberjack" - icon_state = "facial_lumberjack" diff --git a/code/modules/sprite_accessories/_accessory_hair.dm b/code/modules/sprite_accessories/_accessory_hair.dm deleted file mode 100644 index 22c8c614ac6d8..0000000000000 --- a/code/modules/sprite_accessories/_accessory_hair.dm +++ /dev/null @@ -1,887 +0,0 @@ -/* -//////////////////////////// -/ =--------------------= / -/ == Hair Definitions == / -/ =--------------------= / -//////////////////////////// -*/ - -/datum/sprite_accessory/hair - icon = 'icons/mob/human_races/species/human/hair.dmi' - var/flags - -/datum/sprite_accessory/hair/bald - name = "Bald" - icon_state = "bald" - species_allowed = list(SPECIES_HUMAN,SPECIES_UNATHI,SPECIES_VOX) - flags = VERY_SHORT | HAIR_BALD - -/datum/sprite_accessory/hair/short - name = "Short Hair" // try to capatilize the names please~ - icon_state = "hair_a" // you do not need to define _s or _l sub-states, game automatically does this for you - flags = VERY_SHORT - -/datum/sprite_accessory/hair/twintail - name = "Twintail" - icon_state = "hair_twintail" - flags = HAIR_TIEABLE - -/datum/sprite_accessory/hair/short2 - name = "Short Hair 2" - icon_state = "hair_shorthair3" - -/datum/sprite_accessory/hair/cut - name = "Cut Hair" - icon_state = "hair_c" - flags = VERY_SHORT - -/datum/sprite_accessory/hair/flair - name = "Flaired Hair" - icon_state = "hair_flair" - flags = HAIR_TIEABLE - -/datum/sprite_accessory/hair/long - name = "Shoulder-length Hair" - icon_state = "hair_b" - flags = HAIR_TIEABLE - -/datum/sprite_accessory/hair/longer - name = "Long Hair" - icon_state = "hair_vlong" - flags = HAIR_TIEABLE - -/datum/sprite_accessory/hair/longest - name = "Very Long Hair" - icon_state = "hair_longest" - flags = HAIR_TIEABLE - -/datum/sprite_accessory/hair/longfringe - name = "Long Fringe" - icon_state = "hair_longfringe" - flags = HAIR_TIEABLE - -/datum/sprite_accessory/hair/longestalt - name = "Longer Fringe" - icon_state = "hair_vlongfringe" - flags = HAIR_TIEABLE - -/datum/sprite_accessory/hair/halfbang - name = "Half-banged Hair" - icon_state = "hair_halfbang" - -/datum/sprite_accessory/hair/halfbangalt - name = "Half-banged Hair Alt" - icon_state = "hair_halfbang_alt" - -/datum/sprite_accessory/hair/ponytail1 - name = "Ponytail 1" - icon_state = "hair_ponytail" - flags = HAIR_TIEABLE - -/datum/sprite_accessory/hair/ponytail2 - name = "Ponytail 2" - icon_state = "hair_pa" - flags = HAIR_TIEABLE - -/datum/sprite_accessory/hair/ponytail3 - name = "Ponytail 3" - icon_state = "hair_ponytail3" - flags = HAIR_TIEABLE - -/datum/sprite_accessory/hair/ponytail4 - name = "Ponytail 4" - icon_state = "hair_ponytail4" - flags = HAIR_TIEABLE - -/datum/sprite_accessory/hair/ponytail5 - name = "Ponytail 5" - icon_state = "hair_ponytail5" - flags = HAIR_TIEABLE - -/datum/sprite_accessory/hair/ponytail6 - name = "Ponytail 6" - icon_state = "hair_ponytail6" - flags = HAIR_TIEABLE - -/datum/sprite_accessory/hair/sideponytail - name = "Side Ponytail" - icon_state = "hair_stail" - flags = HAIR_TIEABLE - -/datum/sprite_accessory/hair/parted - name = "Parted" - icon_state = "hair_parted" - -/datum/sprite_accessory/hair/pompadour - name = "Pompadour" - icon_state = "hair_pompadour" - -/datum/sprite_accessory/hair/sleeze - name = "Sleeze" - icon_state = "hair_sleeze" - flags = VERY_SHORT - -/datum/sprite_accessory/hair/quiff - name = "Quiff" - icon_state = "hair_quiff" - -/datum/sprite_accessory/hair/bedhead - name = "Bedhead" - icon_state = "hair_bedhead" - -/datum/sprite_accessory/hair/bedhead2 - name = "Bedhead 2" - icon_state = "hair_bedheadv2" - -/datum/sprite_accessory/hair/bedhead3 - name = "Bedhead 3" - icon_state = "hair_bedheadv3" - flags = HAIR_TIEABLE - -/datum/sprite_accessory/hair/beehive - name = "Beehive" - icon_state = "hair_beehive" - flags = HAIR_TIEABLE - -/datum/sprite_accessory/hair/beehive2 - name = "Beehive 2" - icon_state = "hair_beehive2" - -/datum/sprite_accessory/hair/bobcurl - name = "Bobcurl" - icon_state = "hair_bobcurl" - species_allowed = list(SPECIES_HUMAN) - flags = HAIR_TIEABLE - -/datum/sprite_accessory/hair/bob - name = "Bob" - icon_state = "hair_bobcut" - species_allowed = list(SPECIES_HUMAN) - flags = HAIR_TIEABLE - -/datum/sprite_accessory/hair/bobcutalt - name = "Chin Length Bob" - icon_state = "hair_bobcutalt" - species_allowed = list(SPECIES_HUMAN) - flags = HAIR_TIEABLE - -/datum/sprite_accessory/hair/baum - name = "Baum" - icon_state = "hair_baum" - -/datum/sprite_accessory/hair/bowl - name = "Bowl" - icon_state = "hair_bowlcut" - gender = MALE - -/datum/sprite_accessory/hair/buzz - name = "Buzzcut" - icon_state = "hair_buzzcut" - species_allowed = list(SPECIES_HUMAN) - flags = VERY_SHORT - -/datum/sprite_accessory/hair/crew - name = "Crewcut" - icon_state = "hair_crewcut" - flags = VERY_SHORT - -/datum/sprite_accessory/hair/combover - name = "Combover" - icon_state = "hair_combover" - -/datum/sprite_accessory/hair/father - name = "Father" - icon_state = "hair_father" - -/datum/sprite_accessory/hair/reversemohawk - name = "Reverse Mohawk" - icon_state = "hair_reversemohawk" - -/datum/sprite_accessory/hair/devillock - name = "Devil Lock" - icon_state = "hair_devilock" - -/datum/sprite_accessory/hair/dreadlocks - name = "Dreadlocks" - icon_state = "hair_dreads" - -/datum/sprite_accessory/hair/curls - name = "Curls" - icon_state = "hair_curls" - flags = HAIR_TIEABLE - -/datum/sprite_accessory/hair/afro - name = "Afro" - icon_state = "hair_afro" - -/datum/sprite_accessory/hair/afro2 - name = "Afro 2" - icon_state = "hair_afro2" - -/datum/sprite_accessory/hair/afro_large - name = "Big Afro" - icon_state = "hair_bigafro" - -/datum/sprite_accessory/hair/rows - name = "Rows" - icon_state = "hair_rows1" - flags = VERY_SHORT - -/datum/sprite_accessory/hair/rows2 - name = "Rows 2" - icon_state = "hair_rows2" - flags = VERY_SHORT | HAIR_TIEABLE - -/datum/sprite_accessory/hair/sargeant - name = "Flat Top" - icon_state = "hair_sargeant" - flags = VERY_SHORT - -/datum/sprite_accessory/hair/emo - name = "Emo" - icon_state = "hair_emo" - -/datum/sprite_accessory/hair/emo2 - name = "Emo Alt" - icon_state = "hair_emo2" - -/datum/sprite_accessory/hair/longemo - name = "Long Emo" - icon_state = "hair_emolong" - flags = HAIR_TIEABLE - -/datum/sprite_accessory/hair/shorteye - name = "Overeye Short" - icon_state = "hair_shortovereye" - flags = HAIR_TIEABLE - -/datum/sprite_accessory/hair/longovereye - name = "Overeye Long" - icon_state = "hair_longovereye" - flags = HAIR_TIEABLE - -/datum/sprite_accessory/hair/flow - name = "Flow Hair" - icon_state = "hair_f" - -/datum/sprite_accessory/hair/feather - name = "Feather" - icon_state = "hair_feather" - flags = HAIR_TIEABLE - -/datum/sprite_accessory/hair/hitop - name = "Hitop" - icon_state = "hair_hitop" - -/datum/sprite_accessory/hair/mohawk - name = "Mohawk" - icon_state = "hair_d" - species_allowed = list(SPECIES_HUMAN) - -/datum/sprite_accessory/hair/jensen - name = "Adam Jensen Hair" - icon_state = "hair_jensen" - -/datum/sprite_accessory/hair/gelled - name = "Gelled Back" - icon_state = "hair_gelled" - -/datum/sprite_accessory/hair/gentle - name = "Gentle" - icon_state = "hair_gentle" - flags = HAIR_TIEABLE - -/datum/sprite_accessory/hair/spiky - name = "Spiky" - icon_state = "hair_spikey" - species_allowed = list(SPECIES_HUMAN) - -/datum/sprite_accessory/hair/kusangi - name = "Kusanagi Hair" - icon_state = "hair_kusanagi" - -/datum/sprite_accessory/hair/kagami - name = "Pigtails" - icon_state = "hair_kagami" - flags = HAIR_TIEABLE - -/datum/sprite_accessory/hair/himecut - name = "Hime Cut" - icon_state = "hair_himecut" - flags = HAIR_TIEABLE - -/datum/sprite_accessory/hair/shorthime - name = "Short Hime Cut" - icon_state = "hair_shorthime" - flags = HAIR_TIEABLE - -/datum/sprite_accessory/hair/grandebraid - name = "Grande Braid" - icon_state = "hair_grande" - flags = HAIR_TIEABLE - -/datum/sprite_accessory/hair/mbraid - name = "Medium Braid" - icon_state = "hair_shortbraid" - flags = HAIR_TIEABLE - -/datum/sprite_accessory/hair/braid2 - name = "Long Braid" - icon_state = "hair_hbraid" - flags = HAIR_TIEABLE - -/datum/sprite_accessory/hair/odango - name = "Odango" - icon_state = "hair_odango" - flags = HAIR_TIEABLE - -/datum/sprite_accessory/hair/ombre - name = "Ombre" - icon_state = "hair_ombre" - flags = HAIR_TIEABLE - -/datum/sprite_accessory/hair/updo - name = "Updo" - icon_state = "hair_updo" - flags = HAIR_TIEABLE - -/datum/sprite_accessory/hair/skinhead - name = "Skinhead" - icon_state = "hair_skinhead" - flags = VERY_SHORT - -/datum/sprite_accessory/hair/balding - name = "Balding Hair" - icon_state = "hair_e" - flags = VERY_SHORT - -/datum/sprite_accessory/hair/familyman - name = "The Family Man" - icon_state = "hair_thefamilyman" - -/datum/sprite_accessory/hair/mahdrills - name = "Drillruru" - icon_state = "hair_drillruru" - flags = HAIR_TIEABLE - -/datum/sprite_accessory/hair/fringetail - name = "Fringetail" - icon_state = "hair_fringetail" - flags = HAIR_TIEABLE - -/datum/sprite_accessory/hair/dandypomp - name = "Dandy Pompadour" - icon_state = "hair_dandypompadour" - -/datum/sprite_accessory/hair/poofy - name = "Poofy" - icon_state = "hair_poofy" - flags = HAIR_TIEABLE - -/datum/sprite_accessory/hair/crono - name = "Chrono" - icon_state = "hair_toriyama" - -/datum/sprite_accessory/hair/vegeta - name = "Vegeta" - icon_state = "hair_toriyama2" - -/datum/sprite_accessory/hair/cia - name = "CIA" - icon_state = "hair_cia" - -/datum/sprite_accessory/hair/mulder - name = "Mulder" - icon_state = "hair_mulder" - -/datum/sprite_accessory/hair/scully - name = "Scully" - icon_state = "hair_scully" - -/datum/sprite_accessory/hair/nitori - name = "Nitori" - icon_state = "hair_nitori" - flags = HAIR_TIEABLE - -/datum/sprite_accessory/hair/joestar - name = "Joestar" - icon_state = "hair_joestar" - -/datum/sprite_accessory/hair/volaju - name = "Volaju" - icon_state = "hair_volaju" - flags = HAIR_TIEABLE - -/datum/sprite_accessory/hair/longeralt2 - name = "Long Hair Alt 2" - icon_state = "hair_longeralt2" - flags = HAIR_TIEABLE - -/datum/sprite_accessory/hair/shortbangs - name = "Short Bangs" - icon_state = "hair_shortbangs" - -/datum/sprite_accessory/hair/shavedbun - name = "Shaved Bun" - icon_state = "hair_shavedbun" - flags = HAIR_TIEABLE - -/datum/sprite_accessory/hair/halfshaved - name = "Half-Shaved" - icon_state = "hair_halfshaved" - flags = HAIR_TIEABLE - -/datum/sprite_accessory/hair/halfshavedemo - name = "Half-Shaved Emo" - icon_state = "hair_halfshavedemo" - flags = HAIR_TIEABLE - -/datum/sprite_accessory/hair/longsideemo - name = "Long Side Emo" - icon_state = "hair_longsideemo" - flags = HAIR_TIEABLE - -/datum/sprite_accessory/hair/bun - name = "Low Bun" - icon_state = "hair_bun" - flags = HAIR_TIEABLE - -/datum/sprite_accessory/hair/bun2 - name = "High Bun" - icon_state = "hair_bun2" - flags = HAIR_TIEABLE - -/datum/sprite_accessory/hair/doublebun - name = "Double-Bun" - icon_state = "hair_doublebun" - flags = HAIR_TIEABLE - -/datum/sprite_accessory/hair/lowfade - name = "Low Fade" - icon_state = "hair_lowfade" - flags = VERY_SHORT - -/datum/sprite_accessory/hair/medfade - name = "Medium Fade" - icon_state = "hair_medfade" - flags = VERY_SHORT - -/datum/sprite_accessory/hair/highfade - name = "High Fade" - icon_state = "hair_highfade" - flags = VERY_SHORT - -/datum/sprite_accessory/hair/baldfade - name = "Balding Fade" - icon_state = "hair_baldfade" - flags = VERY_SHORT - -/datum/sprite_accessory/hair/nofade - name = "Regulation Cut" - icon_state = "hair_nofade" - flags = VERY_SHORT - -/datum/sprite_accessory/hair/trimflat - name = "Trimmed Flat Top" - icon_state = "hair_trimflat" - flags = VERY_SHORT - -/datum/sprite_accessory/hair/shaved - name = "Shaved" - icon_state = "hair_shaved" - flags = VERY_SHORT - -/datum/sprite_accessory/hair/trimmed - name = "Trimmed" - icon_state = "hair_trimmed" - flags = VERY_SHORT - -/datum/sprite_accessory/hair/tightbun - name = "Tight Bun" - icon_state = "hair_tightbun" - flags = VERY_SHORT | HAIR_TIEABLE - -/datum/sprite_accessory/hair/coffeehouse - name = "Coffee House Cut" - icon_state = "hair_coffeehouse" - flags = VERY_SHORT - -/datum/sprite_accessory/hair/undercut - name = "Undercut" - icon_state = "hair_undercut" - flags = VERY_SHORT - -/datum/sprite_accessory/hair/partfade - name = "Parted Fade" - icon_state = "hair_shavedpart" - flags = VERY_SHORT - -/datum/sprite_accessory/hair/hightight - name = "High and Tight" - icon_state = "hair_hightight" - flags = VERY_SHORT - -/datum/sprite_accessory/hair/rowbun - name = "Row Bun" - icon_state = "hair_rowbun" - flags = HAIR_TIEABLE - -/datum/sprite_accessory/hair/rowdualbraid - name = "Row Dual Braid" - icon_state = "hair_rowdualtail" - flags = HAIR_TIEABLE - -/datum/sprite_accessory/hair/rowbraid - name = "Row Braid" - icon_state = "hair_rowbraid" - flags = HAIR_TIEABLE - -/datum/sprite_accessory/hair/regulationmohawk - name = "Regulation Mohawk" - icon_state = "hair_shavedmohawk" - flags = VERY_SHORT - -/datum/sprite_accessory/hair/topknot - name = "Topknot" - icon_state = "hair_topknot" - flags = HAIR_TIEABLE - -/datum/sprite_accessory/hair/ronin - name = "Ronin" - icon_state = "hair_ronin" - flags = HAIR_TIEABLE - -/datum/sprite_accessory/hair/bowlcut2 - name = "Bowl2" - icon_state = "hair_bowlcut2" - -/datum/sprite_accessory/hair/thinning - name = "Thinning" - icon_state = "hair_thinning" - flags = VERY_SHORT - -/datum/sprite_accessory/hair/thinningfront - name = "Thinning Front" - icon_state = "hair_thinningfront" - flags = VERY_SHORT - -/datum/sprite_accessory/hair/thinningback - name = "Thinning Back" - icon_state = "hair_thinningrear" - flags = VERY_SHORT - -/datum/sprite_accessory/hair/manbun - name = "Manbun" - icon_state = "hair_manbun" - flags = HAIR_TIEABLE - -/datum/sprite_accessory/hair/leftsidecut - name = "Left Sidecut" - icon_state = "hair_leftside" - -/datum/sprite_accessory/hair/rightsidecut - name = "Right Sidecut" - icon_state = "hair_rightside" - -/datum/sprite_accessory/hair/slick - name = "Slick" - icon_state = "hair_slick" - -/datum/sprite_accessory/hair/messyhair - name = "Messy" - icon_state = "hair_messyhair" - flags = HAIR_TIEABLE - -/datum/sprite_accessory/hair/averagejoe - name = "Average Joe" - icon_state = "hair_averagejoe" - -/datum/sprite_accessory/hair/sideswept - name = "Sideswept Hair" - icon_state = "hair_sideswept" - -/datum/sprite_accessory/hair/mohawkshaved - name = "Shaved Mohawk" - icon_state = "hair_mohawkshaved" - -/datum/sprite_accessory/hair/mohawkshaved2 - name = "Tight Shaved Mohawk" - icon_state = "hair_mohawkshaved2" - -/datum/sprite_accessory/hair/mohawkshavednaomi - name = "Naomi Mohawk" - icon_state = "hair_mohawkshavednaomi" - -/datum/sprite_accessory/hair/amazon - name = "Amazon" - icon_state = "hair_amazon" - flags = HAIR_TIEABLE - -/datum/sprite_accessory/hair/straightlong - name = "Straight Long" - icon_state = "hair_straightlong" - flags = HAIR_TIEABLE - -/datum/sprite_accessory/hair/marysue - name = "Mary Sue" - icon_state = "hair_marysue" - flags = HAIR_TIEABLE - -/datum/sprite_accessory/hair/messyhair2 - name = "Messy Hair 2" - icon_state = "hair_messyhair2" - -/datum/sprite_accessory/hair/buzzcut2 - name = "Buzzcut 2" - icon_state = "hair_buzzcut2" - -/datum/sprite_accessory/hair/sideundercut - name = "Side Undercut" - icon_state = "hair_sideundercut" - flags = VERY_SHORT - -/datum/sprite_accessory/hair/bighawk - name = "Big Mohawk" - icon_state = "hair_bighawk" - -/datum/sprite_accessory/hair/donutbun - name = "Donut Bun" - icon_state = "hair_donutbun" - flags = HAIR_TIEABLE - -/datum/sprite_accessory/hair/gentle2 - name = "Gentle 2" - icon_state = "hair_gentle2" - flags = HAIR_TIEABLE - -/datum/sprite_accessory/hair/gentle2long - name = "Gentle 2 Long" - icon_state = "hair_gentle2long" - flags = HAIR_TIEABLE - -/datum/sprite_accessory/hair/trimrsidecut - name = "Trimmed Right Sidecut" - icon_state = "hair_rightside_trim" - flags = HAIR_TIEABLE - -/datum/sprite_accessory/hair/belenkotied - name = "Belenkotied" - icon_state = "hair_belenkotied" - -/datum/sprite_accessory/hair/bobshoulder - name = "Shoulder Bob" - icon_state = "hair_bob_shoulder" - -/datum/sprite_accessory/hair/bobshoulder2 - name = "Shoulder Bob 2" - icon_state = "hair_bob_shoulder2" - -/datum/sprite_accessory/hair/bobcurl2 - name = "Bobcurl 2" - icon_state = "hair_bobcurl2" - -/datum/sprite_accessory/hair/bunovereye - name = "Overeye Bun" - icon_state = "hair_bun_overeye" - -/datum/sprite_accessory/hair/shortbun - name = "Short Bun" - icon_state = "hair_bun_short" - -/datum/sprite_accessory/hair/bigbun - name = "Big Bun" - icon_state = "hair_bunbig" - -/datum/sprite_accessory/hair/emofringe - name = "Emo Fringe" - icon_state = "hair_emofringe" - -/datum/sprite_accessory/hair/hipstery - name = "Hipstery" - icon_state = "hair_hipstery" - -/datum/sprite_accessory/hair/himecutalt - name = "Himecut Alt" - icon_state = "hair_himecut_alt" - -/datum/sprite_accessory/hair/himecutlong - name = "Himecut Long" - icon_state = "hair_himecut_long_ponytail" - flags = HAIR_TIEABLE - -/datum/sprite_accessory/hair/himecutponytail - name = "Himecut Ponytail" - icon_state = "hair_himecut_ponytail" - flags = HAIR_TIEABLE - -/datum/sprite_accessory/hair/himecutponyup - name = "Himecut Ponytail Up" - icon_state = "hair_himecut_ponytail_up" - flags = HAIR_TIEABLE - -/datum/sprite_accessory/hair/himecutshort - name = "Himecut Short" - icon_state = "hair_himecut_short" - -/datum/sprite_accessory/hair/modern - name = "Modern" - icon_state = "hair_modern" - flags = HAIR_TIEABLE - -/datum/sprite_accessory/hair/mohawkshaved3 - name = "Low and Long Mohawk" - icon_state = "hair_mohawk_shavedlong" - -/datum/sprite_accessory/hair/regmohawk2 - name = "Regulation Mohawk 2" - icon_state = "hair_mohawk_shavedback" - -/datum/sprite_accessory/hair/mohawkshaved4 - name = "Low Mohawk" - icon_state = "hair_mohawk_shavedbacklong" - -/datum/sprite_accessory/hair/newyou - name = "New You" - icon_state = "hair_newyou" - flags = HAIR_TIEABLE - -/datum/sprite_accessory/hair/oneshoulder - name = "One Shoulder" - icon_state = "hair_oneshoulder" - flags = HAIR_TIEABLE - -/datum/sprite_accessory/hair/overeye2 - name = "Overeye" - icon_state = "hair_overeye_veryshort" - -/datum/sprite_accessory/hair/overeye3 - name = "Overeye 2" - icon_state = "hair_overeye_veryshort_alt" - -/datum/sprite_accessory/hair/oxton - name = "Oxton" - icon_state = "hair_oxton" - -/datum/sprite_accessory/hair/ponytail7 - name = "Ponytail 7" - icon_state = "hair_ponytail7" - flags = HAIR_TIEABLE - -/datum/sprite_accessory/hair/ponytailtied - name = "Ponytail Tied" - icon_state = "hair_ponytail_tied" - flags = HAIR_TIEABLE - -/datum/sprite_accessory/hair/ponytaildinky1 - name = "Ponytail Dinky" - icon_state = "hair_ponytail_dinky1" - flags = HAIR_TIEABLE - -/datum/sprite_accessory/hair/ponytaildinky2 - name = "Ponytail Dinky 2" - icon_state = "hair_ponytail_dinky2" - flags = HAIR_TIEABLE - -/datum/sprite_accessory/hair/ponytaildinky3 - name = "Ponytail Dinky 3" - icon_state = "hair_ponytail_dinky3" - flags = HAIR_TIEABLE - -/datum/sprite_accessory/hair/tressshoulder - name = "Tress Shoulder" - icon_state = "hair_tressshoulder" - flags = HAIR_TIEABLE - -/datum/sprite_accessory/hair/undercut2 - name = "Undercut 2" - icon_state = "hair_undercut3" - flags = VERY_SHORT - -/datum/sprite_accessory/hair/baldingboddicker - name = "Balding Boddicker" - icon_state = "hair_balding_boddicker" - -/datum/sprite_accessory/hair/librarianbun - name = "Librarian Bun" - icon_state = "hair_bun_librarian" - -/datum/sprite_accessory/hair/bunquad - name = "Bun Quad" - icon_state = "hair_bun_quad" - flags = HAIR_TIEABLE - -/datum/sprite_accessory/hair/bununiter - name = "Bun Uniter" - icon_state = "hair_bun_uniter" - flags = HAIR_TIEABLE - -/datum/sprite_accessory/hair/business - name = "Business" - icon_state = "hair_business" - -/datum/sprite_accessory/hair/business2 - name = "Business 2" - icon_state = "hair_business2" - -/datum/sprite_accessory/hair/business3 - name = "Business 3" - icon_state = "hair_business3" - -/datum/sprite_accessory/hair/fadeg - name = "Fade Grown" - icon_state = "hair_fade_grown" - -/datum/sprite_accessory/hair/partedshort - name = "Short Parted" - icon_state = "hair_parted_short" - -/datum/sprite_accessory/hair/pigtails - name = "Simple Pigtails" - icon_state = "hair_pigtails_simple" - flags = HAIR_TIEABLE - -/datum/sprite_accessory/hair/ponytailside - name = "Side Ponytail 2" - icon_state = "hair_ponytail_side7" - flags = HAIR_TIEABLE - -/datum/sprite_accessory/hair/shortspiked - name = "Short Spiked" - icon_state = "hair_short_spiked" - -/datum/sprite_accessory/hair/sweptshort - name = "Swept Short" - icon_state = "hair_swept_short" - -/datum/sprite_accessory/hair/sweptback - name = "Swept Back" - icon_state = "hair_swept_back" - -/datum/sprite_accessory/hair/wavyshoulder - name = "Shoulder-length Wavy" - icon_state = "hair_wavyshoulder_down" - flags = HAIR_TIEABLE - -/datum/sprite_accessory/hair/wavyup - name = "Ponytail Wavy" - icon_state = "hair_wavyshoulder_up" - flags = HAIR_TIEABLE - -/datum/sprite_accessory/hair/wheeler - name = "Wheeler" - icon_state = "hair_wheeler" - -/datum/sprite_accessory/hair/mullethawk - name = "Mullet-Hawk" - icon_state = "hair_mullethawk" - gender = MALE - -/datum/sprite_accessory/hair/leon - name = "Leon" - icon_state = "hair_leon" - gender = MALE - -/datum/sprite_accessory/hair/wong - name = "Wong" - icon_state = "hair_wong" - gender = FEMALE diff --git a/code/modules/sprite_accessories/_accessory_markings.dm b/code/modules/sprite_accessories/_accessory_markings.dm deleted file mode 100644 index 3c963a4085bc2..0000000000000 --- a/code/modules/sprite_accessories/_accessory_markings.dm +++ /dev/null @@ -1,13 +0,0 @@ -//body markings - -/datum/sprite_accessory/marking - //Empty list is unrestricted. Should only restrict the ones that make NO SENSE on other species, - //like IPC optics overlay stuff. - species_allowed = null - var/layer_blend = ICON_OVERLAY - var/body_parts = list() //A list of bodyparts this covers, in organ_tag defines - //Reminder: BP_L_FOOT,BP_R_FOOT,BP_L_LEG,BP_R_LEG,BP_L_ARM,BP_R_ARM,BP_L_HAND,BP_R_HAND,BP_CHEST,BP_GROIN,BP_HEAD - var/draw_target = MARKING_TARGET_SKIN - var/draw_order = 100 //A number used to sort markings before they are added to a sprite. Lower is earlier. - var/list/disallows = list() //A list of other marking types to ban from adding when this marking is already added - var/use_organ_tag = TRUE diff --git a/code/modules/sprite_accessories/_accessory_skin.dm b/code/modules/sprite_accessories/_accessory_skin.dm deleted file mode 100644 index 58e6c4be2c220..0000000000000 --- a/code/modules/sprite_accessories/_accessory_skin.dm +++ /dev/null @@ -1,16 +0,0 @@ - -//skin styles - WIP -//going to have to re-integrate this with surgery -//let the icon_state hold an icon preview for now -/datum/sprite_accessory/skin - icon = 'icons/mob/human_races/species/human/body.dmi' - -/datum/sprite_accessory/skin/human - name = "Default human skin" - icon_state = "default" - species_allowed = list(SPECIES_HUMAN) - -/datum/sprite_accessory/skin/human_tatt01 - name = "Tatt01 human skin" - icon_state = "tatt1" - species_allowed = list(SPECIES_HUMAN) diff --git a/code/modules/sprite_accessories/accessory_hair_fade.dm b/code/modules/sprite_accessories/accessory_hair_fade.dm deleted file mode 100644 index 47fb5120f4055..0000000000000 --- a/code/modules/sprite_accessories/accessory_hair_fade.dm +++ /dev/null @@ -1,55 +0,0 @@ -/datum/sprite_accessory/marking/hair_fade - icon = 'icons/mob/human_races/species/human/hair_fade.dmi' - species_allowed = list(SPECIES_HUMAN) - body_parts = list(BP_HEAD) - draw_target = MARKING_TARGET_HAIR - draw_order = 50 //before ears & horns - disallows = list(/datum/sprite_accessory/marking/hair_fade) - -/datum/sprite_accessory/marking/hair_fade/fade_up_short - name = "Fade (Up, Short)" - icon_state = "fade_up_short" - -/datum/sprite_accessory/marking/hair_fade/fade_up_long - name = "Fade (Up, Long)" - icon_state = "fade_up_long" - -/datum/sprite_accessory/marking/hair_fade/fade_down_short - name = "Fade (Down, Short)" - icon_state = "fade_down_short" - -/datum/sprite_accessory/marking/hair_fade/fade_down_long - name = "Fade (Down, Long)" - icon_state = "fade_down_long" - -/datum/sprite_accessory/marking/hair_fade/fade_high - name = "Fade (High)" - icon_state = "fade_high" - -/datum/sprite_accessory/marking/hair_fade/fade_wavy - name = "Fade (Wavy)" - icon_state = "fade_wavy" - -/datum/sprite_accessory/marking/hair_fade/fade_left - name = "Fade (Left)" - icon_state = "fade_left" - -/datum/sprite_accessory/marking/hair_fade/fade_right - name = "Fade (Right)" - icon_state = "fade_right" - -/datum/sprite_accessory/marking/hair_fade/split_vert_right - name = "Split (Right)" - icon_state = "split_vert_right" - -/datum/sprite_accessory/marking/hair_fade/split_vert_left - name = "Split (Left)" - icon_state = "split_vert_left" - -/datum/sprite_accessory/marking/hair_fade/split_horz_high - name = "Split (High)" - icon_state = "split_horz_high" - -/datum/sprite_accessory/marking/hair_fade/split_horz_low - name = "Split (Low)" - icon_state = "split_horz_low" diff --git a/code/modules/sprite_accessories/accessory_human.dm b/code/modules/sprite_accessories/accessory_human.dm deleted file mode 100644 index 92f2bf51f7dd5..0000000000000 --- a/code/modules/sprite_accessories/accessory_human.dm +++ /dev/null @@ -1,89 +0,0 @@ -/datum/sprite_accessory/marking/human - species_allowed = list(SPECIES_HUMAN) - icon = 'icons/mob/human_races/species/human/bodymods.dmi' - - -/datum/sprite_accessory/marking/human/ears - body_parts = list(BP_HEAD) - draw_target = MARKING_TARGET_HEAD - draw_order = 75 //before horns - do_coloration = DO_COLORATION_AUTO - disallows = list( - /datum/sprite_accessory/marking/human/ears, - /datum/sprite_accessory/marking/human/horns/ram - ) - - -/datum/sprite_accessory/marking/human/ears/pointy - icon_state = "ears_pointy" - name = "Ear Biomods (Pointy)" - do_coloration = DO_COLORATION_SKIN - - -/datum/sprite_accessory/marking/human/ears/pointy_down - icon_state = "ears_pointy_down" - name = "Ear Biomods (Pointy, Down)" - do_coloration = DO_COLORATION_SKIN - - -/datum/sprite_accessory/marking/human/ears/pointy_long - icon_state = "ears_pointy_long" - name = "Ear Biomods (Pointy, Long)" - do_coloration = DO_COLORATION_SKIN - - -/datum/sprite_accessory/marking/human/ears/pointy_long_down - icon_state = "ears_pointy_long_down" - name = "Ear Biomods (Pointy, Long, Down)" - do_coloration = DO_COLORATION_SKIN - - -/datum/sprite_accessory/marking/human/ears/cat - icon_state = "ears_cat" - name = "Ear Biomods (Cat)" - - -/datum/sprite_accessory/marking/human/ears/rabbit - icon_state = "ears_bun" - name = "Ear Biomods (Rabbit)" - - -/datum/sprite_accessory/marking/human/horns - body_parts = list(BP_HEAD) - draw_target = MARKING_TARGET_HEAD - disallows = list(/datum/sprite_accessory/marking/human/horns) - - -/datum/sprite_accessory/marking/human/horns/ram - icon_state = "horns_ram" - name = "Horn Biomods (Ram)" - disallows = list( - /datum/sprite_accessory/marking/human/horns, - /datum/sprite_accessory/marking/human/ears - ) - - -/datum/sprite_accessory/marking/human/horns/unathi - icon_state = "horns_unathi" - name = "Horn Biomods (Unathi)" - - -/datum/sprite_accessory/marking/human/horns/spines_short - icon_state = "horns_spines_short" - name = "Horn Biomods (Short Spines)" - - -/datum/sprite_accessory/marking/human/horns/spines_long - icon_state = "horns_spines_long" - name = "Horn Biomods (Long Spines)" - - -/datum/sprite_accessory/marking/human/horns/frills_long - icon_state = "horns_frills_long" - name = "Horn Biomods (Long Frills)" - - -/datum/sprite_accessory/marking/human/horns/frills_short - icon_state = "horns_frills_short" - name = "Horn Biomods (Short Frills)" - diff --git a/code/modules/sprite_accessories/accessory_ipc.dm b/code/modules/sprite_accessories/accessory_ipc.dm deleted file mode 100644 index 4a0585ebc26ee..0000000000000 --- a/code/modules/sprite_accessories/accessory_ipc.dm +++ /dev/null @@ -1,22 +0,0 @@ -/datum/sprite_accessory/marking/ipc - icon = 'icons/mob/human_races/species/ipc/markings.dmi' - name = "Bishop Alt. Optics (IPC)" - icon_state = "bishop_alt_optics" - body_parts = list(BP_HEAD) - species_allowed = list(SPECIES_IPC) - -/datum/sprite_accessory/marking/ipc/takahashi - name = "Ward Takahashi Alt. Optics (IPC)" - icon_state = "wardtakahashi_alt_optics" - -/datum/sprite_accessory/marking/ipc/xion - name = "Xion Alt. Optics (IPC)" - icon_state = "xion_alt_optics" - -/datum/sprite_accessory/marking/ipc/hephaestus - name = "Hephaestus Alt. Optics (IPC)" - icon_state = "hephaestus_alt_optics" - -/datum/sprite_accessory/marking/ipc/morpheus - name = "Morpheus Optics (IPC)" - icon_state = "morpheus_optics" \ No newline at end of file diff --git a/code/modules/sprite_accessories/accessory_skrell.dm b/code/modules/sprite_accessories/accessory_skrell.dm deleted file mode 100644 index 93d5574f841e9..0000000000000 --- a/code/modules/sprite_accessories/accessory_skrell.dm +++ /dev/null @@ -1,17 +0,0 @@ -/datum/sprite_accessory/hair/skr - name = "Skrell Male Tentacles" - icon = 'icons/mob/human_races/species/skrell/hair.dmi' - icon_state = "skrell_hair_m" - species_allowed = list(SPECIES_SKRELL) - gender = MALE - -/datum/sprite_accessory/hair/skr/tentacle_f - name = "Skrell Female Tentacles" - icon_state = "skrell_hair_f" - gender = FEMALE - -/datum/sprite_accessory/skin/skrell - name = "Default skrell skin" - icon_state = "default" - icon = 'icons/mob/human_races/species/skrell/body.dmi' - species_allowed = list(SPECIES_SKRELL) diff --git a/code/modules/sprite_accessories/accessory_tattoo.dm b/code/modules/sprite_accessories/accessory_tattoo.dm deleted file mode 100644 index 36ac37de19f66..0000000000000 --- a/code/modules/sprite_accessories/accessory_tattoo.dm +++ /dev/null @@ -1,199 +0,0 @@ -/datum/sprite_accessory/marking/tattoo - icon = 'icons/mob/human_races/species/tattoos.dmi' - draw_order = 60 - use_organ_tag = FALSE - species_allowed = list( - SPECIES_HUMAN, - SPECIES_IPC, - SPECIES_SKRELL - ) - - -/datum/sprite_accessory/marking/tattoo/head - disallows = list(/datum/sprite_accessory/marking/tattoo/head) - body_parts = list(BP_HEAD) - - -/datum/sprite_accessory/marking/tattoo/chest - disallows = list(/datum/sprite_accessory/marking/tattoo/chest) - - body_parts = list(BP_CHEST) - - -/datum/sprite_accessory/marking/tattoo/groin - disallows = list(/datum/sprite_accessory/marking/tattoo/groin) - body_parts = list(BP_GROIN) - - - -/datum/sprite_accessory/marking/tattoo/arm_left - disallows = list(/datum/sprite_accessory/marking/tattoo/arm_left) - body_parts = list(BP_L_ARM) - - -/datum/sprite_accessory/marking/tattoo/arm_right - disallows = list(/datum/sprite_accessory/marking/tattoo/arm_right) - body_parts = list(BP_R_ARM) - - - -/datum/sprite_accessory/marking/tattoo/hand_left - disallows = list(/datum/sprite_accessory/marking/tattoo/hand_left) - body_parts = list(BP_L_HAND) - - - -/datum/sprite_accessory/marking/tattoo/hand_right - disallows = list(/datum/sprite_accessory/marking/tattoo/hand_right) - body_parts = list(BP_R_HAND) - - - -/datum/sprite_accessory/marking/tattoo/leg_left - disallows = list(/datum/sprite_accessory/marking/tattoo/leg_left) - body_parts = list(BP_L_LEG) - - -/datum/sprite_accessory/marking/tattoo/leg_right - disallows = list(/datum/sprite_accessory/marking/tattoo/leg_right) - body_parts = list(BP_R_LEG) - - -/datum/sprite_accessory/marking/tattoo/foot_left - disallows = list(/datum/sprite_accessory/marking/tattoo/foot_left) - body_parts = list(BP_L_FOOT) - - - -/datum/sprite_accessory/marking/tattoo/foot_right - disallows = list(/datum/sprite_accessory/marking/tattoo/foot_right) - body_parts = list(BP_R_FOOT) - - - -/datum/sprite_accessory/marking/tattoo/chest/hive - name = "Tattoo (Hive, Back)" - icon_state = "hive-chest" - - - -/datum/sprite_accessory/marking/tattoo/chest/nightling - name = "Tattoo (Nightling, Back)" - icon_state = "nightling-chest" - - - -/datum/sprite_accessory/marking/tattoo/arm_left/campbell - name = "Tattoo (Campbell, Left Arm)" - icon_state = "campbell-arm-left" - - - -/datum/sprite_accessory/marking/tattoo/arm_right/campbell - name = "Tattoo (Campbell, Right Arm)" - icon_state = "campbell-arm-right" - - - -/* The icon for this needs work. -/datum/sprite_accessory/marking/head/tiger - name = "Tattoo (Tiger Stripes, Head)" - icon_state = "tiger-head" -*/ - - -/datum/sprite_accessory/marking/tattoo/chest/tiger - name = "Tattoo (Tiger Stripes, Body)" - icon_state = "tiger-chest" - - -/datum/sprite_accessory/marking/tattoo/groin/tiger - name = "Tattoo (Tiger Stripes, Groin)" - icon_state = "tiger-groin" - - -/datum/sprite_accessory/marking/tattoo/arm_left/tiger - name = "Tattoo (Tiger Stripes, Left Arm)" - icon_state = "tiger-arm-left" - - -/datum/sprite_accessory/marking/tattoo/arm_right/tiger - name = "Tattoo (Tiger Stripes, Right Arm)" - icon_state = "tiger-arm-right" - - -/datum/sprite_accessory/marking/tattoo/leg_left/tiger - name = "Tattoo (Tiger Stripes, Left Leg)" - icon_state = "tiger-leg-left" - - -/datum/sprite_accessory/marking/tattoo/leg_right/tiger - name = "Tattoo (Tiger Stripes, Right Leg)" - icon_state = "tiger-leg-right" - - -/datum/sprite_accessory/marking/tattoo/foot_left/tiger - name = "Tattoo (Tiger Stripes, Left Foot)" - icon_state = "tiger-foot-left" - - -/datum/sprite_accessory/marking/tattoo/foot_right/tiger - name = "Tattoo (Tiger Stripes, Right Foot)" - icon_state = "tiger-foot-right" - - -/* The icon for this needs work. -/datum/sprite_accessory/marking/tattoo/head/bands - name = "Tattoo (Bands, Head)" - icon_state = "bands-head" -*/ - - -/datum/sprite_accessory/marking/tattoo/chest/bands - name = "Tattoo (Bands, Body)" - icon_state = "bands-chest" - - -/datum/sprite_accessory/marking/tattoo/groin/bands - name = "Tattoo (Bands, Groin)" - icon_state = "bands-groin" - - -/datum/sprite_accessory/marking/tattoo/arm_left/bands - name = "Tattoo (Bands, Left Arm)" - icon_state = "bands-arm-left" - - -/datum/sprite_accessory/marking/tattoo/arm_right/bands - name = "Tattoo (Bands, Right Arm)" - icon_state = "bands-arm-right" - - -/datum/sprite_accessory/marking/tattoo/hand_left/bands - name = "Tattoo (Bands, Left Hand)" - icon_state = "bands-hand-left" - - -/datum/sprite_accessory/marking/tattoo/hand_right/bands - name = "Tattoo (Bands, Right Hand)" - icon_state = "bands-hand-right" - - -/datum/sprite_accessory/marking/tattoo/leg_left/bands - name = "Tattoo (Bands, Left Leg)" - icon_state = "bands-leg-left" - - -/datum/sprite_accessory/marking/tattoo/leg_right/bands - name = "Tattoo (Bands, Right Leg)" - icon_state = "bands-leg-right" - - -/datum/sprite_accessory/marking/tattoo/foot_left/bands - name = "Tattoo (Bands, Left Foot)" - icon_state = "bands-foot-left" - - -/datum/sprite_accessory/marking/tattoo/foot_right/bands - name = "Tattoo (Bands, Right Foot)" - icon_state = "bands-foot-right" diff --git a/code/modules/sprite_accessories/accessory_unathi.dm b/code/modules/sprite_accessories/accessory_unathi.dm deleted file mode 100644 index 1e015a862bd9d..0000000000000 --- a/code/modules/sprite_accessories/accessory_unathi.dm +++ /dev/null @@ -1,164 +0,0 @@ -/datum/sprite_accessory/hair/una - name = "Demon Horns" - icon = 'icons/mob/human_races/species/unathi/hair.dmi' - icon_state = "demon_horn" - blend = ICON_MULTIPLY - species_allowed = list(SPECIES_UNATHI) - -/datum/sprite_accessory/hair/una/spines_long - name = "Long Unathi Spines" - icon_state = "soghun_longspines" - -/datum/sprite_accessory/hair/una/spines_short - name = "Short Unathi Spines" - icon_state = "soghun_shortspines" - -/datum/sprite_accessory/hair/una/frills_long - name = "Long Unathi Frills" - icon_state = "soghun_longfrills" - -/datum/sprite_accessory/hair/una/frills_medium - name = "Unathi Frills" - icon_state = "frills" - -/datum/sprite_accessory/hair/una/frills_water - name = "Aquatic Frills" - icon_state = "aquatic_frills" - -/datum/sprite_accessory/hair/una/frills_short - name = "Short Unathi Frills" - icon_state = "soghun_shortfrills" - -/datum/sprite_accessory/hair/una/horns - name = "Unathi Horns" - icon_state = "soghun_horns" - -/datum/sprite_accessory/hair/una/swept_horn - name = "Swept Horns" - icon_state = "swept_horn" - -/datum/sprite_accessory/hair/una/ram_horn - name = "Ram Horns" - icon_state = "ram_horn" - -/datum/sprite_accessory/hair/una/fin_hawk - name = "Fin Hawk" - icon_state = "fin_hawk" - -/datum/sprite_accessory/hair/una/exotic - name = "Exotic Frills" - icon_state = "big_frills" - -/datum/sprite_accessory/hair/una/curvedown - name = "Downward Curved Horns" - icon_state = "curved_down" - -/datum/sprite_accessory/hair/una/curveup - name = "Upward Curved Horns" - icon_state = "curved_up" - -/datum/sprite_accessory/hair/una/sam - name = "Inwardly Curved Horns" - icon_state = "samurai" - -/datum/sprite_accessory/hair/una/imp - name = "Regal Horns" - icon_state = "imperial" - -/datum/sprite_accessory/hair/una/spikes_norm - name = "Head Spikes" - icon_state = "head_spikes" - -/datum/sprite_accessory/hair/una/spikes_thicc - name = "Thick Head Spikes" - icon_state = "overgrown_head_spikes" - -/datum/sprite_accessory/hair/una/quad - name = "Four Horns" - icon_state = "double_horns" - - -/datum/sprite_accessory/skin/unathi - name = "Default Unathi skin" - icon_state = "default" - icon = 'icons/mob/human_races/species/unathi/body.dmi' - species_allowed = list(SPECIES_UNATHI) - -//// Unathi Tatoos - -/datum/sprite_accessory/marking/unathi - icon = 'icons/mob/human_races/species/unathi/markings.dmi' - species_allowed = list(SPECIES_UNATHI) - - -/datum/sprite_accessory/marking/unathi/plating_female_full - name = "Plating (Full, Female)" - icon_state = "plating_f_full" - body_parts = list( - BP_CHEST, - BP_L_ARM, - BP_R_ARM, - BP_L_LEG, - BP_R_LEG - ) - -/datum/sprite_accessory/marking/unathi/plating_female_chest - name = "Plating (Chest, Female)" - icon_state = "plating_f_chest" - body_parts = list(BP_CHEST) - -/datum/sprite_accessory/marking/unathi/plating_female_left_arm - name = "Plating (L. Arm, Female)" - icon_state = "plating_f_l_arm" - body_parts = list(BP_L_ARM) - -/datum/sprite_accessory/marking/unathi/plating_female_right_arm - name = "Plating (R. Arm, Female)" - icon_state = "plating_f_r_arm" - body_parts = list(BP_R_ARM) - -/datum/sprite_accessory/marking/unathi/plating_female_left_leg - name = "Plating (L. Leg, Female)" - icon_state = "plating_f_l_leg" - body_parts = list(BP_L_LEG) - -/datum/sprite_accessory/marking/unathi/plating_female_right_leg - name = "Plating (R. Leg, Female)" - icon_state = "plating_f_r_leg" - body_parts = list(BP_R_LEG) - -/datum/sprite_accessory/marking/unathi/plating_male_full - name = "Plating (Full, Male)" - icon_state = "plating_m_full" - body_parts = list( - BP_CHEST, - BP_L_ARM, - BP_R_ARM, - BP_L_LEG, - BP_R_LEG - ) - -/datum/sprite_accessory/marking/unathi/plating_male_chest - name = "Plating (Chest, Male)" - icon_state = "plating_m_chest" - body_parts = list(BP_CHEST) - -/datum/sprite_accessory/marking/unathi/plating_male_left_arm - name = "Plating (L. Arm, Male)" - icon_state = "plating_m_l_arm" - body_parts = list(BP_L_ARM) - -/datum/sprite_accessory/marking/unathi/plating_male_right_arm - name = "Plating (R. Arm, Male)" - icon_state = "plating_m_r_arm" - body_parts = list(BP_R_ARM) - -/datum/sprite_accessory/marking/unathi/plating_male_left_leg - name = "Plating (L. Leg, Male)" - icon_state = "plating_m_l_leg" - body_parts = list(BP_L_LEG) - -/datum/sprite_accessory/marking/unathi/plating_male_right_leg - name = "Plating (R. Leg, Male)" - icon_state = "plating_m_r_leg" - body_parts = list(BP_R_LEG) \ No newline at end of file diff --git a/code/modules/sprite_accessories/accessory_vox.dm b/code/modules/sprite_accessories/accessory_vox.dm deleted file mode 100644 index 8be4ea351ba46..0000000000000 --- a/code/modules/sprite_accessories/accessory_vox.dm +++ /dev/null @@ -1,17 +0,0 @@ -/datum/sprite_accessory/hair/vox - name = "Long Vox Quills" - icon = 'icons/mob/human_races/species/vox/hair.dmi' - icon_state = "vox_longquills" - species_allowed = list(SPECIES_VOX) - -/datum/sprite_accessory/hair/vox/short - name = "Short Vox Quills" - icon_state = "vox_shortquills" - -/datum/sprite_accessory/hair/vox/mohawk - name = "Vox Mohawk" - icon_state = "vox_mohawk" - -/datum/sprite_accessory/hair/vox/stubble - name = "Vox Stubble" - icon_state = "vox_stubble" diff --git a/code/modules/submaps/_submap.dm b/code/modules/submaps/_submap.dm deleted file mode 100644 index 2866eb49bed0b..0000000000000 --- a/code/modules/submaps/_submap.dm +++ /dev/null @@ -1,75 +0,0 @@ -/datum/submap - var/name - var/pref_name - var/decl/submap_archetype/archetype - var/list/jobs - var/associated_z - -/datum/submap/New(var/existing_z) - SSmapping.submaps[src] = TRUE - associated_z = existing_z - -/datum/submap/Destroy() - SSmapping.submaps -= src - . = ..() - -/datum/submap/proc/setup_submap(var/decl/submap_archetype/_archetype) - - if(!istype(_archetype)) - testing( "Submap error - [name] - null or invalid archetype supplied ([_archetype]).") - qdel(src) - return - - // Not much point doing this when it has presumably been done already. - if(_archetype == archetype) - testing( "Submap error - [name] - submap already set up.") - return - - archetype = _archetype - if(!pref_name) - pref_name = archetype.descriptor - - testing("Starting submap setup - '[name]', [archetype], [associated_z]z.") - - // Instantiate our job list. - jobs = list() - for(var/crew_job in archetype.crew_jobs) - var/datum/job/submap/job = new crew_job(src, archetype.crew_jobs[crew_job]) - if(!job.whitelisted_species) - job.whitelisted_species = archetype.whitelisted_species - if(!job.blacklisted_species) - job.blacklisted_species = archetype.blacklisted_species - jobs[job.title] = job - - if(!associated_z) - testing( "Submap error - [name]/[archetype ? archetype.descriptor : "NO ARCHETYPE"] could not find an associated z-level for spawnpoint placement.") - qdel(src) - return - - var/obj/effect/overmap/visitable/cell = map_sectors["[associated_z]"] - if(istype(cell)) - sync_cell(cell) - - // Add the spawn points to the appropriate job list. - var/added_spawnpoint - for(var/check_z in GetConnectedZlevels(associated_z)) - for(var/thing in block(locate(1, 1, check_z), locate(world.maxx, world.maxy, check_z))) - for(var/obj/effect/submap_landmark/spawnpoint/landmark in thing) - var/datum/job/submap/job = jobs[landmark.name] - if(istype(job)) - job.spawnpoints += landmark - added_spawnpoint = TRUE - - if(!added_spawnpoint) - testing( "Submap error - [name]/[archetype ? archetype.descriptor : "NO ARCHETYPE"] has no job spawn points.") - qdel(src) - return - - if(archetype && archetype.call_webhook) - SSwebhooks.send(archetype.call_webhook, list("name" = name)) - -/datum/submap/proc/sync_cell(var/obj/effect/overmap/visitable/cell) - name = cell.name - -/datum/submap/proc/available() - return TRUE diff --git a/code/modules/submaps/submap_archetype.dm b/code/modules/submaps/submap_archetype.dm deleted file mode 100644 index 962f8f4331201..0000000000000 --- a/code/modules/submaps/submap_archetype.dm +++ /dev/null @@ -1,21 +0,0 @@ -/decl/submap_archetype - var/map - var/descriptor = "generic ship archetype" - var/list/whitelisted_species = UNRESTRICTED_SPECIES - var/list/blacklisted_species = RESTRICTED_SPECIES - var/call_webhook - var/list/crew_jobs = list( - /datum/job/submap - ) - -/decl/submap_archetype/Destroy() - if(SSmapping.submap_archetypes[descriptor] == src) - SSmapping.submap_archetypes -= descriptor - . = ..() - -// Generic ships to populate the list. -/decl/submap_archetype/derelict - descriptor = "drifting wreck" - -/decl/submap_archetype/abandoned_ship - descriptor = "abandoned ship" diff --git a/code/modules/submaps/submap_job.dm b/code/modules/submaps/submap_job.dm deleted file mode 100644 index c00d35506fb0d..0000000000000 --- a/code/modules/submaps/submap_job.dm +++ /dev/null @@ -1,85 +0,0 @@ -/datum/job/submap - title = "Survivor" - supervisors = "your conscience" - account_allowed = FALSE - latejoin_at_spawnpoints = TRUE - announced = FALSE - create_record = FALSE - total_positions = 4 - outfit_type = /decl/hierarchy/outfit/job/assistant - hud_icon = "hudblank" - available_by_default = FALSE - allowed_ranks = null - allowed_branches = null - skill_points = 25 - give_psionic_implant_on_join = FALSE - max_skill = list( SKILL_BUREAUCRACY = SKILL_MAX, - SKILL_FINANCE = SKILL_MAX, - SKILL_EVA = SKILL_MAX, - SKILL_MECH = SKILL_MAX, - SKILL_PILOT = SKILL_MAX, - SKILL_HAULING = SKILL_MAX, - SKILL_COMPUTER = SKILL_MAX, - SKILL_BOTANY = SKILL_MAX, - SKILL_COOKING = SKILL_MAX, - SKILL_COMBAT = SKILL_MAX, - SKILL_WEAPONS = SKILL_MAX, - SKILL_FORENSICS = SKILL_MAX, - SKILL_CONSTRUCTION = SKILL_MAX, - SKILL_ELECTRICAL = SKILL_MAX, - SKILL_ATMOS = SKILL_MAX, - SKILL_ENGINES = SKILL_MAX, - SKILL_DEVICES = SKILL_MAX, - SKILL_SCIENCE = SKILL_MAX, - SKILL_MEDICAL = SKILL_MAX, - SKILL_ANATOMY = SKILL_MAX, - SKILL_CHEMISTRY = SKILL_MAX) - - var/info = "You have survived a terrible disaster. Make the best of things that you can." - var/rank - var/branch - var/list/spawnpoints - var/datum/submap/owner - var/list/blacklisted_species = RESTRICTED_SPECIES - var/list/whitelisted_species = UNRESTRICTED_SPECIES - -/datum/job/submap/New(var/datum/submap/_owner, var/abstract_job = FALSE) - if(!abstract_job) - spawnpoints = list() - owner = _owner - ..() - -/datum/job/submap/is_species_allowed(var/datum/species/S) - if(LAZYLEN(whitelisted_species) && !(S.name in whitelisted_species)) - return FALSE - if(S.name in blacklisted_species) - return FALSE - if(owner && owner.archetype) - if(LAZYLEN(owner.archetype.whitelisted_species) && !(S.name in owner.archetype.whitelisted_species)) - return FALSE - if(S.name in owner.archetype.blacklisted_species) - return FALSE - return TRUE - -/datum/job/submap/is_restricted(var/datum/preferences/prefs, var/feedback) - var/datum/species/S = all_species[prefs.species] - if(LAZYACCESS(minimum_character_age, S.get_bodytype()) && (prefs.age < minimum_character_age[S.get_bodytype()])) - to_chat(feedback, "Not old enough. Minimum character age is [minimum_character_age[S.get_bodytype()]].") - return TRUE - if(LAZYLEN(whitelisted_species) && !(prefs.species in whitelisted_species)) - to_chat(feedback, "Your current species, [prefs.species], is not permitted as [title] on \a [owner.archetype.descriptor].") - return TRUE - if(prefs.species in blacklisted_species) - to_chat(feedback, "Your current species, [prefs.species], is not permitted as [title] on \a [owner.archetype.descriptor].") - return TRUE - if(owner && owner.archetype) - if(LAZYLEN(owner.archetype.whitelisted_species) && !(prefs.species in owner.archetype.whitelisted_species)) - to_chat(feedback, "Your current species, [prefs.species], is not permitted on \a [owner.archetype.descriptor].") - return TRUE - if(prefs.species in owner.archetype.blacklisted_species) - to_chat(feedback, "Your current species, [prefs.species], is not permitted on \a [owner.archetype.descriptor].") - return TRUE - return FALSE - -/datum/job/submap/check_is_active(var/mob/M) - . = (..() && M.faction == owner.name) \ No newline at end of file diff --git a/code/modules/submaps/submap_join.dm b/code/modules/submaps/submap_join.dm deleted file mode 100644 index 3fbf91fbd4990..0000000000000 --- a/code/modules/submaps/submap_join.dm +++ /dev/null @@ -1,114 +0,0 @@ -// A lot of this is boilerplate from the standard job controller, but it's different enough and -// requires enough shit skipped or removed that I think the boilerplate is justified. The offsite -// roles do not require rank or branch checks, they don't require latejoin vs. initial spawn checks -// and they handle their spawn points on a ship by ship, archetype by archetype, overmap-aware -// manner. This is mostly being written here so I don't feel like a fool when I open the PR. - -/datum/submap/Topic(href, href_list) - . = ..() - if(!.) - var/join_as = href_list["join_as"] - if(join_as && jobs[join_as]) - join_as(locate(href_list["joining"]), jobs[join_as]) - return TRUE - -/datum/submap/proc/check_general_join_blockers(var/mob/new_player/joining, var/datum/job/submap/job) - - if(!istype(job)) // This proc uses a specific type that check_latejoin_blockers() does not. - log_debug("Job assignment error for [name] - job does not exist or is of the incorrect type.") - return FALSE - - if(!SSjobs.check_latejoin_blockers(joining, job)) - return FALSE - - if(!available()) - to_chat(joining, SPAN_WARNING("Unfortunately, that job is no longer available.")) - return FALSE - - if(jobban_isbanned(joining, "Offstation Roles")) - to_chat(joining, SPAN_WARNING("You are banned from playing offstation roles.")) - return FALSE - - if(job.is_semi_antagonist && jobban_isbanned(joining, MODE_MISC_AGITATOR)) - to_chat(joining, SPAN_WARNING("You are banned from playing semi-antagonist roles.")) - return FALSE - - if(job.is_restricted(joining.client.prefs, joining)) - return FALSE - - return TRUE - -/datum/submap/proc/join_as(var/mob/new_player/joining, var/datum/job/submap/job) - - if(!check_general_join_blockers(joining, job)) - return - - if(!LAZYLEN(job.spawnpoints)) - to_chat(joining, "There are no available spawn points for that job.") - - var/turf/spawn_turf = get_turf(pick(job.spawnpoints)) - if(!SSjobs.check_unsafe_spawn(joining, spawn_turf)) - return - - // check_unsafe_spawn() has an input() call, check blockers again. - if(!check_general_join_blockers(joining, job)) - return - - if(joining.mind) - joining.mind.assigned_job = job - joining.mind.assigned_role = job.title - joining.faction = name - job.current_positions++ - - var/mob/living/character = joining.create_character(spawn_turf) - if(istype(character)) - - var/mob/living/other_mob = job.handle_variant_join(character, job.title) - if(istype(other_mob)) - character = other_mob - - var/mob/living/carbon/human/user_human - if(ishuman(character)) - user_human = character - if(job.branch && GLOB.mil_branches) - user_human.char_branch = GLOB.mil_branches.get_branch(job.branch) - user_human.char_rank = GLOB.mil_branches.get_rank(job.branch, job.rank) - - // We need to make sure to use the abstract instance here; it's not the same as the one we were passed. - character.skillset.obtain_from_client(SSjobs.get_by_path(job.type), character.client) - job.equip(character, "") - job.apply_fingerprints(character) - var/list/spawn_in_storage = SSjobs.equip_custom_loadout(character, job) - if(spawn_in_storage) - for(var/datum/gear/G in spawn_in_storage) - G.spawn_in_storage_or_drop(user_human, user_human.client.prefs.Gear()[G.display_name]) - SScustomitems.equip_custom_items(user_human) - - character.job = job.title - if(character.mind) - character.mind.assigned_job = job - character.mind.assigned_role = character.job - - to_chat(character, "You are [job.total_positions == 1 ? "the" : "a"] [job.title] of the [name].") - - if(job.supervisors) - to_chat(character, "As a [job.title] you answer directly to [job.supervisors].") - var/datum/job/submap/ojob = job - if(istype(ojob) && ojob.info) - to_chat(character, ojob.info) - - if (user_human?.disabilities & NEARSIGHTED) //Try to give glasses to the vision impaired - user_human.equip_to_slot_or_del(new /obj/item/clothing/glasses/prescription(user_human), slot_glasses) - - SET_BIT(character.hud_updateflag, ID_HUD) - SET_BIT(character.hud_updateflag, IMPLOYAL_HUD) - SET_BIT(character.hud_updateflag, SPECIALROLE_HUD) - - SSticker.mode.handle_offsite_latejoin(character) - GLOB.universe.OnPlayerLatejoin(character) - log_and_message_admins("has joined the round as offsite role [character.mind.assigned_role].", character) - if(character.cannot_stand()) equip_wheelchair(character) - job.post_equip_rank(character, job.title) - qdel(joining) - - return character diff --git a/code/modules/submaps/submap_landmark.dm b/code/modules/submaps/submap_landmark.dm deleted file mode 100644 index a4dadcf49ced1..0000000000000 --- a/code/modules/submaps/submap_landmark.dm +++ /dev/null @@ -1,31 +0,0 @@ -/obj/effect/submap_landmark - icon = 'icons/misc/mark.dmi' - invisibility = INVISIBILITY_MAXIMUM - anchored = TRUE - simulated = FALSE - density = FALSE - opacity = FALSE - -/obj/effect/submap_landmark/joinable_submap - icon_state = "x4" - var/archetype - var/submap_datum_type = /datum/submap - -/obj/effect/submap_landmark/joinable_submap/Initialize(var/mapload) - . = ..(mapload) - if(!SSmapping.submaps[name] && SSmapping.submap_archetypes[archetype]) - var/datum/submap/submap = new submap_datum_type(z) - submap.name = name - submap.setup_submap(SSmapping.submap_archetypes[archetype]) - else - if(SSmapping.submaps[name]) - to_world_log( "Submap error - mapped landmark is duplicate of existing.") - else - to_world_log( "Submap error - mapped landmark had invalid archetype.") - return INITIALIZE_HINT_QDEL - -/obj/effect/submap_landmark/spawnpoint - icon_state = "x3" - -/obj/effect/submap_landmark/spawnpoint/survivor - name = "Survivor" diff --git a/code/modules/supermatter/setup_supermatter.dm b/code/modules/supermatter/setup_supermatter.dm deleted file mode 100644 index 9e1504864c5bd..0000000000000 --- a/code/modules/supermatter/setup_supermatter.dm +++ /dev/null @@ -1,262 +0,0 @@ -#define SETUP_OK 1 // All good -#define SETUP_WARNING 2 // Something that shouldn't happen happened, but it's not critical so we will continue -#define SETUP_ERROR 3 // Something bad happened, and it's important so we won't continue setup. -#define SETUP_DELAYED 4 // Wait for other things first. - - -#define ENERGY_NITROGEN 115 // Roughly 8 emitter shots. -#define ENERGY_CARBONDIOXIDE 150 // Roughly 10 emitter shots. -#define ENERGY_HYDROGEN 300 // Roughly 20 emitter shots. -#define ENERGY_PHORON 500 // Roughly 40 emitter shots. - - -/datum/admins/proc/setup_supermatter() - set category = "Debug" - set name = "Setup Supermatter" - set desc = "Allows you to start the Supermatter engine." - - if (!istype(src,/datum/admins)) - src = usr.client.holder - if (!istype(src,/datum/admins)) - to_chat(usr, "Error: you are not an admin!") - return - - var/response = input(usr, "Are you sure? This will start up the engine with selected gas as coolant.", "Engine setup") as null|anything in list("N2", "CO2", "PH", "H2", "Abort") - if(!response || response == "Abort") - return - - var/errors = 0 - var/warnings = 0 - var/success = 0 - - log_and_message_admins("## SUPERMATTER SETUP - Setup initiated by [usr] using coolant type [response].") - - // CONFIGURATION PHASE - // Coolant canisters, set types according to response. - for(var/obj/effect/engine_setup/coolant_canister/C in world) - switch(response) - if("N2") - C.canister_type = /obj/machinery/portable_atmospherics/canister/nitrogen/engine_setup - continue - if("CO2") - C.canister_type = /obj/machinery/portable_atmospherics/canister/carbon_dioxide/engine_setup - continue - if("PH") - C.canister_type = /obj/machinery/portable_atmospherics/canister/phoron/engine_setup - continue - if("H2") - C.canister_type = /obj/machinery/portable_atmospherics/canister/hydrogen/engine_setup - continue - - for(var/obj/effect/engine_setup/core/C in world) - switch(response) - if("N2") - C.energy_setting = ENERGY_NITROGEN - continue - if("CO2") - C.energy_setting = ENERGY_CARBONDIOXIDE - continue - if("PH") - C.energy_setting = ENERGY_PHORON - continue - if("H2") - C.energy_setting = ENERGY_HYDROGEN - continue - - for(var/obj/effect/engine_setup/filter/F in world) - F.coolant = response - - var/list/delayed_objects = list() - // SETUP PHASE - for(var/obj/effect/engine_setup/S in world) - var/result = S.activate(0) - switch(result) - if(SETUP_OK) - success++ - continue - if(SETUP_WARNING) - warnings++ - continue - if(SETUP_ERROR) - errors++ - log_and_message_admins("## SUPERMATTER SETUP - Error encountered! Aborting.") - break - if(SETUP_DELAYED) - delayed_objects.Add(S) - continue - - if(!errors) - for(var/obj/effect/engine_setup/S in delayed_objects) - var/result = S.activate(1) - switch(result) - if(SETUP_OK) - success++ - continue - if(SETUP_WARNING) - warnings++ - continue - if(SETUP_ERROR) - errors++ - log_and_message_admins("## SUPERMATTER SETUP - Error encountered! Aborting.") - break - - log_and_message_admins("## SUPERMATTER SETUP - Setup completed with [errors] errors, [warnings] warnings and [success] successful steps.") - - return - - - -/obj/effect/engine_setup - name = "Engine Setup Marker" - desc = "You shouldn't see this." - invisibility = 101 - anchored = TRUE - density = FALSE - icon = 'icons/mob/screen1.dmi' - icon_state = "x3" - -/obj/effect/engine_setup/proc/activate(var/last = 0) - return 1 - - - -// Tries to locate a pump, enables it, and sets it to MAX. Triggers warning if unable to locate a pump. -/obj/effect/engine_setup/pump_max - name = "Pump Setup Marker" - -/obj/effect/engine_setup/pump_max/activate() - ..() - var/obj/machinery/atmospherics/binary/pump/P = locate() in get_turf(src) - if(!P) - log_and_message_admins("## WARNING: Unable to locate pump at [x] [y] [z]!") - return SETUP_WARNING - P.target_pressure = P.max_pressure_setting - P.update_use_power(POWER_USE_IDLE) - P.update_icon() - return SETUP_OK - - - -// Spawns an empty canister on this turf, if it has a connector port. Triggers warning if unable to find a connector port -/obj/effect/engine_setup/empty_canister - name = "Empty Canister Marker" - -/obj/effect/engine_setup/empty_canister/activate() - ..() - var/obj/machinery/atmospherics/portables_connector/P = locate() in get_turf(src) - if(!P) - log_and_message_admins("## WARNING: Unable to locate connector port at [x] [y] [z]!") - return SETUP_WARNING - new/obj/machinery/portable_atmospherics/canister(get_turf(src)) // Canisters automatically connect to connectors in New() - return SETUP_OK - - - - -// Spawns a coolant canister on this turf, if it has a connector port. -// Triggers error when unable to locate connector port or when coolant canister type is unset. -/obj/effect/engine_setup/coolant_canister - name = "Coolant Canister Marker" - var/canister_type = null - -/obj/effect/engine_setup/coolant_canister/activate() - ..() - var/obj/machinery/atmospherics/portables_connector/P = locate() in get_turf(src) - if(!P) - log_and_message_admins("## ERROR: Unable to locate coolant connector port at [x] [y] [z]!") - return SETUP_ERROR - if(!canister_type) - log_and_message_admins("## ERROR: Canister type unset at [x] [y] [z]!") - return SETUP_ERROR - new canister_type(get_turf(src)) - return SETUP_OK - - - -// Energises the supermatter. Errors when unable to locate supermatter. -/obj/effect/engine_setup/core - name = "Supermatter Core Marker" - var/energy_setting = 0 - -/obj/effect/engine_setup/core/activate(var/last = 0) - if(!last) - return SETUP_DELAYED - ..() - var/obj/machinery/power/supermatter/SM = locate() in get_turf(src) - if(!SM) - log_and_message_admins("## ERROR: Unable to locate supermatter core at [x] [y] [z]!") - return SETUP_ERROR - if(!energy_setting) - log_and_message_admins("## ERROR: Energy setting unset at [x] [y] [z]!") - return SETUP_ERROR - SM.power = energy_setting - return SETUP_OK - - - -// Tries to enable the SMES on max input/output settings. With load balancing it should be fine as long as engine outputs at least ~500kW -/obj/effect/engine_setup/smes - name = "SMES Marker" - -/obj/effect/engine_setup/smes/activate() - ..() - var/obj/machinery/power/smes/S = locate() in get_turf(src) - if(!S) - log_and_message_admins("## WARNING: Unable to locate SMES unit at [x] [y] [z]!") - return SETUP_WARNING - S.input_attempt = 1 - S.output_attempt = 1 - S.input_level = S.input_level_max - S.output_level = S.output_level_max - S.update_icon() - return SETUP_OK - - - -// Sets up filters. This assumes filters are set to filter out CO2 back to the core loop by default! -/obj/effect/engine_setup/filter - name = "Omni Filter Marker" - var/coolant = null - -/obj/effect/engine_setup/filter/activate() - ..() - var/obj/machinery/atmospherics/omni/filter/F = locate() in get_turf(src) - if(!F) - log_and_message_admins("## WARNING: Unable to locate omni filter at [x] [y] [z]!") - return SETUP_WARNING - if(!coolant) - log_and_message_admins("## WARNING: No coolant type set at [x] [y] [z]!") - return SETUP_WARNING - - // Non-co2 coolant, adjust the filter's config first. - if(coolant != "CO2") - for(var/datum/omni_port/P in F.ports) - if(P.mode != ATM_CO2) - continue - if(coolant == "PH") - P.mode = ATM_P - break - else if(coolant == "N2") - P.mode = ATM_N2 - break - else if(coolant == "H2") - P.mode = ATM_H2 - break - else - log_and_message_admins("## WARNING: Inapropriate filter coolant type set at [x] [y] [z]!") - return SETUP_WARNING - F.rebuild_filtering_list() - - F.update_use_power(POWER_USE_IDLE) - F.update_icon() - return SETUP_OK - - -#undef SETUP_OK -#undef SETUP_WARNING -#undef SETUP_ERROR -#undef SETUP_DELAYED -#undef ENERGY_NITROGEN -#undef ENERGY_CARBONDIOXIDE -#undef ENERGY_HYDROGEN -#undef ENERGY_PHORON diff --git a/code/modules/supermatter/supermatter.dm b/code/modules/supermatter/supermatter.dm deleted file mode 100644 index 0d71ac375c168..0000000000000 --- a/code/modules/supermatter/supermatter.dm +++ /dev/null @@ -1,702 +0,0 @@ -/* - How to tweak the SM - - POWER_FACTOR directly controls how much power the SM puts out at a given level of excitation (power var). Making this lower means you have to work the SM harder to get the same amount of power. - CRITICAL_TEMPERATURE The temperature at which the SM starts taking damage. - - CHARGING_FACTOR Controls how much emitter shots excite the SM. - DAMAGE_RATE_LIMIT Controls the maximum rate at which the SM will take damage due to high temperatures. -*/ - -// Base variants are applied to everyone on the same Z level -// Range variants are applied on per-range basis: numbers here are on point blank, it scales with the map size (assumes square shaped Z levels) -#define DETONATION_RADS 40 -#define DETONATION_MOB_CONCUSSION 4 // Value that will be used for Weaken() for mobs. - -// Base amount of ticks for which a specific type of machine will be offline for. +- 20% added by RNG. -// This does pretty much the same thing as an electrical storm, it just affects the whole Z level instantly. -#define DETONATION_APC_OVERLOAD_PROB 10 // prob() of overloading an APC's lights. -#define DETONATION_SHUTDOWN_APC 120 // Regular APC. -#define DETONATION_SHUTDOWN_CRITAPC 10 // Critical APC. AI core and such. Considerably shorter as we don't want to kill the AI with a single blast. Still a nuisance. -#define DETONATION_SHUTDOWN_SMES 60 // SMES -#define DETONATION_SHUTDOWN_RNG_FACTOR 20 // RNG factor. Above shutdown times can be +- X%, where this setting is the percent. Do not set to 100 or more. -#define DETONATION_SOLAR_BREAK_CHANCE 60 // prob() of breaking solar arrays (this is per-panel, and only affects the Z level SM is on) - -#define WARNING_DELAY 20 //seconds between warnings. - -/obj/machinery/power/supermatter - name = "supermatter core" - desc = "A strangely translucent and iridescent crystal. You get headaches just from looking at it." - icon = 'icons/obj/supermatter.dmi' - icon_state = "supermatter" - density = TRUE - anchored = FALSE - light_outer_range = 4 - - layer = ABOVE_HUMAN_LAYER - - var/nitrogen_retardation_factor = 0.15 //Higher == N2 slows reaction more - var/thermal_release_modifier = 15000 //Higher == more heat released during reaction - var/phoron_release_modifier = 1500 //Higher == less phoron released by reaction - var/oxygen_release_modifier = 15000 //Higher == less oxygen released at high temperature/power - var/radiation_release_modifier = 2 //Higher == more radiation released with more power. - var/reaction_power_modifier = 1.1 //Higher == more overall power - - //Controls how much power is produced by each collector in range - this is the main parameter for tweaking SM balance, as it basically controls how the power variable relates to the rest of the game. - var/power_factor = 1.0 - var/decay_factor = 700 //Affects how fast the supermatter power decays - var/critical_temperature = 5000 //K - var/charging_factor = 0.05 - var/damage_rate_limit = 4.5 //damage rate cap at power = 300, scales linearly with power - - var/gasefficency = 0.25 - - var/base_icon_state = "supermatter" - - var/damage = 0 - var/damage_archived = 0 - var/safe_alert = "Crystaline hyperstructure returning to safe operating levels." - var/safe_warned = 0 - var/public_alert = 0 //Stick to Engineering frequency except for big warnings when integrity bad - var/warning_point = 100 - var/warning_alert = "Danger! Crystal hyperstructure instability!" - var/emergency_point = 700 - var/emergency_alert = "CRYSTAL DELAMINATION IMMINENT." - var/explosion_point = 1000 - - light_color = "#927a10" - var/base_color = "#927a10" - var/warning_color = "#c78c20" - var/emergency_color = "#ffd04f" - var/rotation_angle = 0 - - var/grav_pulling = 0 - // Time in ticks between delamination ('exploding') and exploding (as in the actual boom) - var/pull_time = 30 SECONDS - var/explosion_power = 9 - - var/emergency_issued = 0 - - // Time in 1/10th of seconds since the last sent warning - var/lastwarning = 0 - - // This stops spawning redundant explosions. Also incidentally makes supermatter unexplodable if set to 1. - var/exploded = 0 - - var/power = 0 - var/oxygen = 0 - - //Temporary values so that we can optimize this - //How much the bullets damage should be multiplied by when it is added to the internal variables - var/config_bullet_energy = 2 - //How much of the power is left after processing is finished? -// var/config_power_reduction_per_tick = 0.5 - //How much hallucination should it produce per unit of power? - var/config_hallucination_power = 0.1 - - var/debug = 0 - - var/disable_adminwarn = FALSE - - var/aw_normal = FALSE - var/aw_warning = FALSE - var/aw_danger = FALSE - var/aw_emerg = FALSE - var/aw_delam = FALSE - var/aw_EPR = FALSE - - var/list/threshholds = list( // List of lists defining the amber/red labeling threshholds in readouts. Numbers are minminum red and amber and maximum amber and red, in that order - list("name" = SUPERMATTER_DATA_EER, "min_h" = -1, "min_l" = -1, "max_l" = 150, "max_h" = 300), - list("name" = SUPERMATTER_DATA_TEMPERATURE, "min_h" = -1, "min_l" = -1, "max_l" = 4000, "max_h" = 5000), - list("name" = SUPERMATTER_DATA_PRESSURE, "min_h" = -1, "min_l" = -1, "max_l" = 5000, "max_h" = 10000), - list("name" = SUPERMATTER_DATA_EPR, "min_h" = -1, "min_l" = 1.0, "max_l" = 2.5, "max_h" = 4.0) - ) - -/obj/machinery/power/supermatter/New() - ..() - uid = gl_uid++ - -/obj/machinery/power/supermatter/Destroy() - GLOB.supermatter_status.raise_event(src, FALSE) //If any alarm was still reporting on this, tell them to stop - . = ..() - -/obj/machinery/power/supermatter/proc/handle_admin_warnings() - if(disable_adminwarn) - return - - // Generic checks, similar to checks done by supermatter monitor program. - aw_normal = status_adminwarn_check(SUPERMATTER_NORMAL, aw_normal, "INFO: Supermatter crystal has been energised", FALSE) - aw_warning = status_adminwarn_check(SUPERMATTER_WARNING, aw_warning, "WARN: Supermatter crystal is taking integrity damage", FALSE) - aw_danger = status_adminwarn_check(SUPERMATTER_DANGER, aw_danger, "WARN: Supermatter integrity is below 50%", TRUE) - aw_emerg = status_adminwarn_check(SUPERMATTER_EMERGENCY, aw_emerg, "CRIT: Supermatter integrity is below 25%", FALSE) - aw_delam = status_adminwarn_check(SUPERMATTER_DELAMINATING, aw_delam, "CRIT: Supermatter is delaminating", TRUE) - - // EPR check. Only runs when supermatter is energised. Triggers when there is very low amount of coolant in the core (less than one standard canister). - // This usually means a core breach or deliberate venting. - if(get_status() && (get_epr() < 0.5)) - if(!aw_EPR) - var/area/A = get_area(src) - log_and_message_admins("WARN: Supermatter EPR value low. Possible core breach detected in [A.name]", null, src) - aw_EPR = TRUE - else - aw_EPR = FALSE - -/obj/machinery/power/supermatter/proc/status_adminwarn_check(var/min_status, var/current_state, var/message, var/send_to_irc = FALSE) - var/status = get_status() - if(status >= min_status) - if(!current_state) - var/area/A = get_area(src) - log_and_message_admins(message + " in [A.name]", null, src) - if(send_to_irc) - send2adminirc(message + " in [A.name]") - return TRUE - else - return FALSE - -/obj/machinery/power/supermatter/proc/get_epr() - var/turf/T = get_turf(src) - if(!istype(T)) - return - var/datum/gas_mixture/air = T.return_air() - if(!air) - return 0 - return round((air.total_moles / air.group_multiplier) / 23.1, 0.01) - -/obj/machinery/power/supermatter/proc/get_status() - var/turf/T = get_turf(src) - if(!T) - return SUPERMATTER_ERROR - var/datum/gas_mixture/air = T.return_air() - if(!air) - return SUPERMATTER_ERROR - - if(grav_pulling || exploded) - return SUPERMATTER_DELAMINATING - - if(get_integrity() < 25) - return SUPERMATTER_EMERGENCY - - if(get_integrity() < 50) - return SUPERMATTER_DANGER - - if((get_integrity() < 100) || (air.temperature > critical_temperature)) - return SUPERMATTER_WARNING - - if(power > 5) - return SUPERMATTER_NORMAL - return SUPERMATTER_INACTIVE - - -/obj/machinery/power/supermatter/proc/explode() - set waitfor = 0 - - if(exploded) - return - - log_and_message_admins("Supermatter delaminating at [x] [y] [z]") - anchored = TRUE - grav_pulling = 1 - exploded = 1 - sleep(pull_time) - var/turf/TS = get_turf(src) // The turf supermatter is on. SM being in a locker, exosuit, or other container shouldn't block it's effects that way. - if(!istype(TS)) - return - - var/list/affected_z = GetConnectedZlevels(TS.z) - - // Effect 1: Radiation, weakening to all mobs on Z level - for(var/z in affected_z) - CHECK_TICK - SSradiation.z_radiate(locate(1, 1, z), DETONATION_RADS, 1) - - for(var/mob/living/mob in GLOB.living_mob_list_) - var/turf/TM = get_turf(mob) - if(!TM) - continue - if(!(TM.z in affected_z)) - continue - - mob.Weaken(DETONATION_MOB_CONCUSSION) - to_chat(mob, SPAN_DANGER("An invisible force slams you against the ground!")) - - // Effect 2: Z-level wide electrical pulse - for(var/obj/machinery/power/apc/A in SSmachines.machinery) - if(!(A.z in affected_z)) - continue - - CHECK_TICK - // Overloads lights - if(prob(DETONATION_APC_OVERLOAD_PROB)) - A.overload_lighting() - // Causes the APCs to go into system failure mode. - var/random_change = rand(100 - DETONATION_SHUTDOWN_RNG_FACTOR, 100 + DETONATION_SHUTDOWN_RNG_FACTOR) / 100 - if(A.is_critical) - A.energy_fail(round(DETONATION_SHUTDOWN_CRITAPC * random_change)) - else - A.energy_fail(round(DETONATION_SHUTDOWN_APC * random_change)) - - for(var/obj/machinery/power/smes/buildable/S in SSmachines.machinery) - if(!(S.z in affected_z)) - continue - // Causes SMESes to shut down for a bit - var/random_change = rand(100 - DETONATION_SHUTDOWN_RNG_FACTOR, 100 + DETONATION_SHUTDOWN_RNG_FACTOR) / 100 - S.energy_fail(round(DETONATION_SHUTDOWN_SMES * random_change)) - - // Effect 3: Break solar arrays - CHECK_TICK - - for(var/obj/machinery/power/solar/S in SSmachines.machinery) - if(!(S.z in affected_z)) - continue - - CHECK_TICK - if(prob(DETONATION_SOLAR_BREAK_CHANCE)) - S.set_broken(TRUE) - - CHECK_TICK - - // Effect 4: Medium scale explosion - spawn(0) - explosion(TS, explosion_power/2, explosion_power, explosion_power * 2, explosion_power * 4, 1) - qdel(src) - -/obj/machinery/power/supermatter/examine(mob/user) - . = ..() - if(user.skill_check(SKILL_ENGINES, SKILL_EXPERT)) - var/integrity_message - switch(get_integrity()) - if(0 to 30) - integrity_message = SPAN_DANGER("It looks highly unstable!") - if(31 to 70) - integrity_message = "It appears to be losing cohesion!" - else - integrity_message = "At a glance, it seems to be in sound shape." - to_chat(user, integrity_message) - if(user.skill_check(SKILL_ENGINES, SKILL_PROF)) - var/display_power = power - display_power *= (0.85 + 0.3 * rand()) - display_power = round(display_power, 20) - to_chat(user, "Eyeballing it, you place the relative EER at around [display_power] MeV/cm3.") - -//Changes color and luminosity of the light to these values if they were not already set -/obj/machinery/power/supermatter/proc/shift_light(var/lum, var/clr) - if(lum != light_outer_range || clr != light_color) - set_light(1, 0.1, lum, l_color = clr) - -/obj/machinery/power/supermatter/proc/get_integrity() - var/integrity = damage / explosion_point - integrity = round(100 - integrity * 100) - integrity = integrity < 0 ? 0 : integrity - return integrity - - -/obj/machinery/power/supermatter/proc/announce_warning() - var/integrity = get_integrity() - var/alert_msg = " Integrity at [integrity]%" - - if(damage > emergency_point) - alert_msg = emergency_alert + alert_msg - lastwarning = world.timeofday - WARNING_DELAY * 4 - else if(damage >= damage_archived) // The damage is still going up - safe_warned = 0 - alert_msg = warning_alert + alert_msg - lastwarning = world.timeofday - else if(!safe_warned) - safe_warned = 1 // We are safe, warn only once - alert_msg = safe_alert - lastwarning = world.timeofday - else - alert_msg = null - if(alert_msg) - GLOB.global_announcer.autosay(alert_msg, "Supermatter Monitor", "Engineering") - //Public alerts - if((damage > emergency_point) && !public_alert) - GLOB.global_announcer.autosay("WARNING: SUPERMATTER CRYSTAL DELAMINATION IMMINENT! SAFEROOMS UNBOLTED.", "Supermatter Monitor") - public_alert = 1 - GLOB.using_map.unbolt_saferooms() // torch - for(var/mob/M in GLOB.player_list) - var/turf/T = get_turf(M) - if(T && (T.z in GLOB.using_map.station_levels) && !istype(M,/mob/new_player) && !isdeaf(M)) - sound_to(M, 'sound/ambience/matteralarm.ogg') - else if(safe_warned && public_alert) - GLOB.global_announcer.autosay(alert_msg, "Supermatter Monitor") - public_alert = 0 - -/obj/machinery/power/supermatter/Process() - var/turf/L = loc - - if(isnull(L)) // We have a null turf...something is wrong, stop processing this entity. - return PROCESS_KILL - - if(!istype(L)) //We are in a crate or somewhere that isn't turf, if we return to turf resume processing but for now. - return //Yeah just stop. - - if(damage > explosion_point) - if(!exploded) - if(!istype(L, /turf/space) && (L.z in GLOB.using_map.station_levels)) - announce_warning() - explode() - else if(damage > warning_point) // while the core is still damaged and it's still worth noting its status - shift_light(5, warning_color) - if(damage > emergency_point) - shift_light(7, emergency_color) - if(!istype(L, /turf/space) && ((world.timeofday - lastwarning) >= WARNING_DELAY * 10) && (L.z in GLOB.using_map.station_levels)) - announce_warning() - else - shift_light(4,base_color) - if(grav_pulling) - supermatter_pull(src) - - //Send state changed events - if (damage > warning_point) - if (damage > damage_archived && damage_archived < warning_point) - GLOB.supermatter_status.raise_event(src, TRUE) - if (damage < warning_point) - if (damage < damage_archived && damage_archived > warning_point) - GLOB.supermatter_status.raise_event(src, FALSE) - - //Ok, get the air from the turf - var/datum/gas_mixture/removed = null - var/datum/gas_mixture/env = null - - //ensure that damage doesn't increase too quickly due to super high temperatures resulting from no coolant, for example. We don't want the SM exploding before anyone can react. - //We want the cap to scale linearly with power (and explosion_point). Let's aim for a cap of 5 at power = 300 (based on testing, equals roughly 5% per SM alert announcement). - var/damage_inc_limit = (power/300)*(explosion_point/1000)*damage_rate_limit - - if(!istype(L, /turf/space)) - env = L.return_air() - removed = env.remove(gasefficency * env.total_moles) //Remove gas from surrounding area - - if(!env || !removed || !removed.total_moles) - damage_archived = damage - damage += max((power - 15*power_factor)/10, 0) - else if (grav_pulling) //If supermatter is detonating, remove all air from the zone - env.remove(env.total_moles) - else - damage_archived = damage - - damage = max(0, damage + clamp((removed.temperature - critical_temperature) / 150, -damage_rate_limit, damage_inc_limit)) - - //Ok, 100% oxygen atmosphere = best reaction - //Maxes out at 100% oxygen pressure - oxygen = clamp((removed.get_by_flag(XGM_GAS_OXIDIZER) - (removed.gas[GAS_NITROGEN] * nitrogen_retardation_factor)) / removed.total_moles, 0, 1) - - //calculate power gain for oxygen reaction - var/temp_factor - var/equilibrium_power - if (oxygen > 0.8) - //If chain reacting at oxygen == 1, we want the power at 800 K to stabilize at a power level of 400 - equilibrium_power = 400 - icon_state = "[base_icon_state]_glow" - else - //If chain reacting at oxygen == 1, we want the power at 800 K to stabilize at a power level of 250 - equilibrium_power = 250 - icon_state = base_icon_state - - temp_factor = ( (equilibrium_power/decay_factor)**3 )/800 - power = max( (removed.temperature * temp_factor) * oxygen + power, 0) - - var/device_energy = power * reaction_power_modifier - - //Release reaction gasses - var/heat_capacity = removed.heat_capacity() - removed.adjust_multi(GAS_PHORON, max(device_energy / phoron_release_modifier, 0), \ - GAS_OXYGEN, max((device_energy + removed.temperature - T0C) / oxygen_release_modifier, 0)) - - var/thermal_power = thermal_release_modifier * device_energy - if (debug) - var/heat_capacity_new = removed.heat_capacity() - visible_message("[src]: Releasing [round(thermal_power)] W.") - visible_message("[src]: Releasing additional [round((heat_capacity_new - heat_capacity)*removed.temperature)] W with exhaust gasses.") - - removed.add_thermal_energy(thermal_power) - removed.temperature = clamp(removed.temperature, 0, 10000) - - env.merge(removed) - - for(var/mob/living/carbon/human/subject in view(src, min(7, round(sqrt(power/6))))) - var/obj/item/organ/internal/eyes/eyes = subject.internal_organs_by_name[BP_EYES] - if (!eyes) - continue - if (BP_IS_ROBOTIC(eyes)) - continue - if(subject.has_meson_effect()) - continue - var/effect = max(0, min(200, power * config_hallucination_power * sqrt( 1 / max(1,get_dist(subject, src)))) ) - subject.adjust_hallucination(effect, 0.25 * effect) - - var/level = Interpolate(0, 50, clamp( (damage - emergency_point) / (explosion_point - emergency_point),0,1)) - var/list/new_color = color_contrast(level ) - //Apply visual effects based on damage - if(rotation_angle != 0) - if(level != 0) - new_color = multiply_matrices(new_color, color_rotation(rotation_angle), 4, 3,3) - else - new_color = color_rotation(rotation_angle) - - color = new_color - - if (damage >= emergency_point && !filters.len) - filters = filter(type="rays", size = 64, color = "#ffd04f", factor = 0.6, density = 12) - animate(filters[1], time = 10 SECONDS, offset = 10, loop=-1) - animate(time = 10 SECONDS, offset = 0, loop=-1) - - animate(filters[1], time = 2 SECONDS, size = 80, loop=-1, flags = ANIMATION_PARALLEL) - animate(time = 2 SECONDS, size = 10, loop=-1, flags = ANIMATION_PARALLEL) - else if (damage < emergency_point) - filters = null - - SSradiation.radiate(src, power * radiation_release_modifier) //Better close those shutters! - power -= (power/decay_factor)**3 //energy losses due to radiation - handle_admin_warnings() - - return 1 - - -/obj/machinery/power/supermatter/bullet_act(var/obj/item/projectile/Proj) - var/turf/L = loc - if(!istype(L)) // We don't run process() when we are in space - return 0 // This stops people from being able to really power up the supermatter - // Then bring it inside to explode instantly upon landing on a valid turf. - - - var/proj_damage = Proj.get_structure_damage() - if(istype(Proj, /obj/item/projectile/beam)) - power += proj_damage * config_bullet_energy * charging_factor / power_factor - else - damage += proj_damage * config_bullet_energy - return 0 - -/obj/machinery/power/supermatter/attack_robot(mob/user as mob) - if(Adjacent(user)) - return attack_hand(user) - else - ui_interact(user) - return - -/obj/machinery/power/supermatter/attack_ai(mob/user) - ui_interact(user) - -/obj/machinery/power/supermatter/attack_ghost(mob/user) - ui_interact(user) - -/obj/machinery/power/supermatter/attack_hand(mob/user as mob) - user.visible_message( - SPAN_WARNING("\The [user] reaches out and touches \the [src], inducing a resonance. For a brief instant, \his body glows brilliantly, then flashes into ash."), - SPAN_DANGER(FONT_LARGE("You reach out and touch \the [src]. Instantly, you feel a curious sensation as your body turns into new and exciting forms of plasma. That was not a wise decision.")), - SPAN_WARNING("You hear an unearthly ringing, then what sounds like a shrilling kettle as you are washed with a wave of heat.") - ) - Consume(user) - -// This is purely informational UI that may be accessed by AIs or robots -/obj/machinery/power/supermatter/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1) - var/data[0] - - data["integrity_percentage"] = round(get_integrity()) - var/datum/gas_mixture/env = null - var/turf/T = get_turf(src) - - if(istype(T)) - env = T.return_air() - - if(!env) - data["ambient_temp"] = 0 - data["ambient_pressure"] = 0 - else - data["ambient_temp"] = round(env.temperature) - data["ambient_pressure"] = round(env.return_pressure()) - data["detonating"] = grav_pulling - data["energy"] = power - - ui = SSnano.try_update_ui(user, src, ui_key, ui, data, force_open) - if (!ui) - ui = new(user, src, ui_key, "supermatter_crystal.tmpl", "Supermatter Crystal", 500, 300) - ui.set_initial_data(data) - ui.open() - ui.set_auto_update(1) - - -/obj/machinery/power/supermatter/attackby(obj/item/W as obj, mob/living/user as mob) - if(istype(W, /obj/item/tape_roll)) - to_chat(user, SPAN_NOTICE("You repair some of the damage to \the [src] with \the [W].")) - damage = max(damage - 10, 0) - playsound(src, 'sound/effects/tape.ogg', 25) - - user.visible_message( - SPAN_WARNING("\The [user] touches \a [W] to \the [src], then flinches away as it flashes instantly into dust. Silence blankets the air."), - SPAN_DANGER("You touch \the [W] to \the [src]. Everything suddenly goes silent as it flashes into dust, and you flinch away."), - SPAN_WARNING("For a brief moment, you hear an oppressive, unnatural silence.") - ) - - user.drop_from_inventory(W) - Consume(W) - - user.apply_damage(150, DAMAGE_RADIATION, damage_flags = DAMAGE_FLAG_DISPERSED) - - -/obj/machinery/power/supermatter/Bumped(atom/AM as mob|obj) - if(istype(AM, /obj/effect)) - return - if(istype(AM, /mob/living)) - AM.visible_message( - SPAN_WARNING("\The [AM] slams into \the [src], inducing a resonance. For a brief instant, \his body glows brilliantly, then flashes into ash."), - SPAN_DANGER(FONT_LARGE("You slam into \the [src], and your mind fills with unearthly shrieking. Your vision floods with light as your body instantly dissolves into dust.")), - SPAN_WARNING("You hear an unearthly ringing, then what sounds like a shrilling kettle as you are washed with a wave of heat.") - ) - else if(!grav_pulling) //To prevent spam, detonating supermatter does not indicate non-mobs being destroyed - AM.visible_message( - SPAN_WARNING("\The [AM] smacks into \the [src] and rapidly flashes to ash."), - SPAN_WARNING("You hear a loud crack as you are washed with a wave of heat.") - ) - - Consume(AM) - - -/obj/machinery/power/supermatter/proc/Consume(var/mob/living/user) - if(istype(user)) - user.dust() - power += 200 - else - qdel(user) - - power += 200 - - //Some poor sod got eaten, go ahead and irradiate people nearby. - for(var/mob/living/l in range(10)) - if(l in view()) - to_chat(l, SPAN_WARNING("As \the [src] slowly stops resonating, you feel an intense wave of heat wash over you.")) - else - to_chat(l, SPAN_WARNING("You hear a muffled, shrill ringing as an intense wave of heat washes over you.")) - var/rads = 500 - SSradiation.radiate(src, rads) - - -/proc/supermatter_pull(var/atom/target, var/pull_range = 255, var/pull_power = STAGE_FIVE) - for(var/atom/A in range(pull_range, target)) - A.singularity_pull(target, pull_power) - -/obj/machinery/power/supermatter/GotoAirflowDest(n) //Supermatter not pushed around by airflow - return - -/obj/machinery/power/supermatter/RepelAirflowDest(n) - return - -/obj/machinery/power/supermatter/ex_act(var/severity) - ..() - switch(severity) - if(EX_ACT_DEVASTATING) - power *= 4 - if(EX_ACT_HEAVY) - power *= 3 - if(EX_ACT_LIGHT) - power *= 2 - log_and_message_admins("WARN: Explosion near the Supermatter! New EER: [power].") - -/obj/machinery/power/supermatter/shard //Small subtype, less efficient and more sensitive, but less boom. - name = "supermatter shard" - desc = "A strangely translucent and iridescent crystal that looks like it used to be part of a larger structure. You get headaches just from looking at it." - icon_state = "darkmatter_shard" - base_icon_state = "darkmatter_shard" - - warning_point = 50 - emergency_point = 400 - explosion_point = 600 - - gasefficency = 0.125 - - pull_time = 150 - explosion_power = 20 - -/obj/machinery/power/supermatter/shard/announce_warning() //Shards don't get announcements - return - - -/obj/machinery/power/supermatter/randomsample - name = "experimental supermatter sample" - icon_state = "darkmatter_shard" - base_icon_state = "darkmatter_shard" - -/obj/machinery/power/supermatter/randomsample/Initialize() - . = ..() - nitrogen_retardation_factor = rand(0.01, 1) //Higher == N2 slows reaction more - thermal_release_modifier = rand(100, 1000000) //Higher == more heat released during reaction - phoron_release_modifier = rand(0, 100000) //Higher == less phoron released by reaction - oxygen_release_modifier = rand(0, 100000) //Higher == less oxygen released at high temperature/power - radiation_release_modifier = rand(0, 100) //Higher == more radiation released with more power. - reaction_power_modifier = rand(0, 100) //Higher == more overall power - - power_factor = rand(0, 20) - decay_factor = rand(50, 70000) //Affects how fast the supermatter power decays - critical_temperature = rand(3000, 5000) //K - charging_factor = rand(0, 1) - damage_rate_limit = rand( 1, 10) //damage rate cap at power = 300, scales linearly with power - - //Change fune colours - var/angle = rand(-180, 180) - var/list/color_matrix = color_rotation(angle) - rotation_angle = angle - - color = color_matrix - - var/HSV = RGBtoHSV(base_color) - var/RGB = HSVtoRGB(RotateHue(HSV, angle)) - base_color = RGB - - HSV = RGBtoHSV(warning_color) - RGB = HSVtoRGB(RotateHue(HSV, angle)) - warning_color = RGB - - HSV = RGBtoHSV(emergency_color) - RGB = HSVtoRGB(RotateHue(HSV, angle)) - emergency_color = RGB - -/obj/machinery/power/supermatter/inert - name = "experimental supermatter sample" - icon_state = "darkmatter_shard" - base_icon_state = "darkmatter_shard" - thermal_release_modifier = 0 //Basically inert - phoron_release_modifier = 100000000000 - oxygen_release_modifier = 100000000000 - radiation_release_modifier = 1 - -/obj/structure/closet/crate/secure/large/phoron/experimentalsm - name = "experimental supermatter crate" - desc = "Are you sure you want to open this?" - -/obj/structure/closet/crate/secure/large/phoron/experimentalsm/WillContain() - return list(/obj/machinery/power/supermatter/randomsample) - -#undef DETONATION_MOB_CONCUSSION -#undef DETONATION_APC_OVERLOAD_PROB -#undef DETONATION_SHUTDOWN_APC -#undef DETONATION_SHUTDOWN_CRITAPC -#undef DETONATION_SHUTDOWN_SMES -#undef DETONATION_SHUTDOWN_RNG_FACTOR -#undef DETONATION_SOLAR_BREAK_CHANCE -#undef WARNING_DELAY - - -//Warning lights -/obj/machinery/rotating_alarm/supermatter - name = "Supermatter alarm" - desc = "An industrial rotating alarm light. This one is used to monitor supermatter engines." - - frame_type = /obj/item/frame/supermatter_alarm - construct_state = /decl/machine_construction/default/item_chassis - base_type = /obj/machinery/rotating_alarm/supermatter - -/obj/machinery/rotating_alarm/supermatter/Initialize() - . = ..() - GLOB.supermatter_status.register_global(src, .proc/check_supermatter) - -/obj/machinery/rotating_alarm/supermatter/Destroy() - GLOB.supermatter_status.unregister_global(src, .proc/check_supermatter) - . = ..() - -/obj/machinery/rotating_alarm/supermatter/proc/check_supermatter(obj/machinery/power/supermatter/SM, danger) - if (SM) - if (SM.z in GetConnectedZlevels(src.z)) - if (danger && !on) - set_on() - else if (!danger && on) - set_off() diff --git a/code/modules/surgery/__surgery_setup.dm b/code/modules/surgery/__surgery_setup.dm deleted file mode 100644 index 86be0e09334fa..0000000000000 --- a/code/modules/surgery/__surgery_setup.dm +++ /dev/null @@ -1,12 +0,0 @@ -#define SURGERY_NO_ROBOTIC 1 -#define SURGERY_NO_CRYSTAL 2 -#define SURGERY_NO_STUMP 4 -#define SURGERY_NO_FLESH 8 -#define SURGERY_NEEDS_INCISION 16 -#define SURGERY_NEEDS_RETRACTED 32 -#define SURGERY_NEEDS_ENCASEMENT 64 - -#define SURGERY_SKILLS_GENERIC list(SKILL_ANATOMY = SKILL_ADEPT, SKILL_MEDICAL = SKILL_EXPERT) -#define SURGERY_SKILLS_DELICATE list(SKILL_ANATOMY = SKILL_EXPERT, SKILL_MEDICAL = SKILL_EXPERT) -#define SURGERY_SKILLS_ROBOTIC list(SKILL_DEVICES = SKILL_ADEPT) -#define SURGERY_SKILLS_ROBOTIC_ON_MEAT list(SKILL_ANATOMY = SKILL_ADEPT, SKILL_DEVICES = SKILL_ADEPT) diff --git a/code/modules/surgery/bones.dm b/code/modules/surgery/bones.dm deleted file mode 100644 index 3fc147bfe30f2..0000000000000 --- a/code/modules/surgery/bones.dm +++ /dev/null @@ -1,140 +0,0 @@ -//Procedures in this file: Fracture repair surgery -////////////////////////////////////////////////////////////////// -// BONE SURGERY // -////////////////////////////////////////////////////////////////// - -/decl/surgery_step/bone - surgery_candidate_flags = SURGERY_NO_ROBOTIC | SURGERY_NO_CRYSTAL | SURGERY_NEEDS_ENCASEMENT - var/required_stage = 0 - -/decl/surgery_step/bone/assess_bodypart(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - var/obj/item/organ/external/affected = ..() - if(affected && (affected.status & ORGAN_BROKEN) && affected.stage == required_stage) - return affected - -////////////////////////////////////////////////////////////////// -// bone gelling surgery step -////////////////////////////////////////////////////////////////// -/decl/surgery_step/bone/glue - name = "Begin bone repair" - allowed_tools = list( - /obj/item/bonegel = 100, - /obj/item/tape_roll = 75 - ) - can_infect = 1 - blood_level = 1 - min_duration = 50 - max_duration = 60 - shock_level = 20 - -/decl/surgery_step/bone/glue/begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - var/obj/item/organ/external/affected = target.get_organ(target_zone) - var/bone = affected.encased ? "\the [target]'s [affected.encased]" : "bones in \the [target]'s [affected.name]" - if (affected.stage == 0) - user.visible_message("\The [user] starts applying \the [tool] to [bone]." , \ - "You start applying \the [tool] to [bone].") - target.custom_pain("Something in your [affected.name] is causing you a lot of pain!",50, affecting = affected) - ..() - -/decl/surgery_step/bone/glue/end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - var/obj/item/organ/external/affected = target.get_organ(target_zone) - var/bone = affected.encased ? "\the [target]'s [affected.encased]" : "bones in \the [target]'s [affected.name]" - user.visible_message("[user] applies some [tool.name] to [bone]", \ - "You apply some [tool.name] to [bone].") - if(affected.stage == 0) - affected.stage = 1 - affected.status &= ~ORGAN_BRITTLE - -/decl/surgery_step/bone/glue/fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - var/obj/item/organ/external/affected = target.get_organ(target_zone) - user.visible_message("[user]'s hand slips, smearing [tool] in the incision in [target]'s [affected.name]!" , \ - "Your hand slips, smearing [tool] in the incision in [target]'s [affected.name]!") - - -////////////////////////////////////////////////////////////////// -// bone setting surgery step -////////////////////////////////////////////////////////////////// -/decl/surgery_step/bone/set_bone - name = "Set bone" - allowed_tools = list( - /obj/item/bonesetter = 100, - /obj/item/wrench = 75 - ) - min_duration = 60 - max_duration = 70 - shock_level = 40 - delicate = 1 - surgery_candidate_flags = SURGERY_NO_ROBOTIC | SURGERY_NEEDS_ENCASEMENT - required_stage = 1 - -/decl/surgery_step/bone/set_bone/begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - var/obj/item/organ/external/affected = target.get_organ(target_zone) - var/bone = affected.encased ? "\the [target]'s [affected.encased]" : "bones in \the [target]'s [affected.name]" - if(affected.encased == "skull") - user.visible_message("[user] is beginning to piece [bone] back together with \the [tool]." , \ - "You are beginning to piece [bone] back together with \the [tool].") - else - user.visible_message("[user] is beginning to set [bone] in place with \the [tool]." , \ - "You are beginning to set [bone] in place with \the [tool].") - target.custom_pain("The pain in your [affected.name] is going to make you pass out!",50, affecting = affected) - ..() - -/decl/surgery_step/bone/set_bone/end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - var/obj/item/organ/external/affected = target.get_organ(target_zone) - var/bone = affected.encased ? "\the [target]'s [affected.encased]" : "bones in \the [target]'s [affected.name]" - if (affected.status & ORGAN_BROKEN) - if(affected.encased == "skull") - user.visible_message("\The [user] pieces [bone] back together with \the [tool].", \ - "You piece [bone] back together with \the [tool].") - else - user.visible_message("\The [user] sets [bone] in place with \the [tool].", \ - "You set [bone] in place with \the [tool].") - affected.stage = 2 - else - user.visible_message("\The [user] sets [bone] in the WRONG place with \the [tool].", \ - "You set [bone] in the WRONG place with \the [tool].") - affected.fracture() - -/decl/surgery_step/bone/set_bone/fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - var/obj/item/organ/external/affected = target.get_organ(target_zone) - user.visible_message("\The [user]'s hand slips, damaging the [affected.encased ? affected.encased : "bones"] in \the [target]'s [affected.name] with \the [tool]!" , \ - "Your hand slips, damaging the [affected.encased ? affected.encased : "bones"] in \the [target]'s [affected.name] with \the [tool]!") - affected.fracture() - affected.take_external_damage(5, used_weapon = tool) - -////////////////////////////////////////////////////////////////// -// post setting bone-gelling surgery step -////////////////////////////////////////////////////////////////// -/decl/surgery_step/bone/finish - name = "Finish bone repair" - allowed_tools = list( - /obj/item/bonegel = 100, - /obj/item/tape_roll = 75 - ) - can_infect = 1 - blood_level = 1 - min_duration = 50 - max_duration = 60 - shock_level = 20 - required_stage = 2 - -/decl/surgery_step/bone/finish/begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - var/obj/item/organ/external/affected = target.get_organ(target_zone) - var/bone = affected.encased ? "\the [target]'s damaged [affected.encased]" : "damaged bones in \the [target]'s [affected.name]" - user.visible_message("[user] starts to finish mending [bone] with \the [tool].", \ - "You start to finish mending [bone] with \the [tool].") - ..() - -/decl/surgery_step/bone/finish/end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - var/obj/item/organ/external/affected = target.get_organ(target_zone) - var/bone = affected.encased ? "\the [target]'s damaged [affected.encased]" : "damaged bones in [target]'s [affected.name]" - user.visible_message("[user] has mended [bone] with \the [tool]." , \ - "You have mended [bone] with \the [tool]." ) - affected.status &= ~ORGAN_BROKEN - affected.stage = 0 - affected.update_wounds() - -/decl/surgery_step/bone/finish/fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - var/obj/item/organ/external/affected = target.get_organ(target_zone) - user.visible_message("[user]'s hand slips, smearing [tool] in the incision in [target]'s [affected.name]!" , \ - "Your hand slips, smearing [tool] in the incision in [target]'s [affected.name]!") \ No newline at end of file diff --git a/code/modules/surgery/crystal.dm b/code/modules/surgery/crystal.dm deleted file mode 100644 index a15ae1d6201fa..0000000000000 --- a/code/modules/surgery/crystal.dm +++ /dev/null @@ -1,68 +0,0 @@ -/decl/surgery_step/generic/cut_open/crystal - name = "Drill keyhole incision" - allowed_tools = list( - /obj/item/pickaxe/drill = 80, - /obj/item/surgicaldrill = 100 - ) - fail_string = "cracking" - access_string = "a neat hole" - surgery_candidate_flags = SURGERY_NO_ROBOTIC | SURGERY_NO_STUMP | SURGERY_NO_FLESH - -/decl/surgery_step/generic/cauterize/crystal - name = "Close keyhole incision" - allowed_tools = list( - /obj/item/stack/medical/resin = 100 - ) - surgery_candidate_flags = SURGERY_NO_ROBOTIC | SURGERY_NO_FLESH - cauterize_term = "seal" - post_cauterize_term = "seals" - -/decl/surgery_step/open_encased/crystal - name = "Saw through crystal" - allowed_tools = list( - /obj/item/circular_saw = 100 - ) - surgery_candidate_flags = SURGERY_NO_ROBOTIC | SURGERY_NO_STUMP | SURGERY_NEEDS_RETRACTED | SURGERY_NO_FLESH - -/decl/surgery_step/bone/glue/crystal - name = "Begin crystalline bone repair" - allowed_tools = list( - /obj/item/stack/medical/resin = 100 - ) - surgery_candidate_flags = SURGERY_NO_ROBOTIC | SURGERY_NO_FLESH - -/decl/surgery_step/bone/finish/crystal - name = "Finish crystalline bone repair" - allowed_tools = list( - /obj/item/stack/medical/resin = 100 - ) - surgery_candidate_flags = SURGERY_NO_ROBOTIC | SURGERY_NO_FLESH - -/decl/surgery_step/internal/detatch_organ/crystal - name = "Detach crystalline internal organ" - allowed_tools = list( - /obj/item/pickaxe/drill = 80, - /obj/item/surgicaldrill = 100 - ) - surgery_candidate_flags = SURGERY_NO_ROBOTIC | SURGERY_NO_STUMP | SURGERY_NEEDS_ENCASEMENT | SURGERY_NO_FLESH - -/decl/surgery_step/internal/attach_organ/crystal - name = "Attach crystalline internal organ" - allowed_tools = list( - /obj/item/stack/medical/resin = 100 - ) - surgery_candidate_flags = SURGERY_NO_ROBOTIC | SURGERY_NO_STUMP | SURGERY_NEEDS_ENCASEMENT | SURGERY_NO_FLESH - -/decl/surgery_step/internal/fix_organ/crystal - name = "Repair crystalline internal organ" - allowed_tools = list( - /obj/item/stack/medical/resin = 100 - ) - surgery_candidate_flags = SURGERY_NO_ROBOTIC | SURGERY_NO_STUMP | SURGERY_NO_FLESH - -/decl/surgery_step/fix_vein/crystal - name = "Repair arteries in crystalline beings" - allowed_tools = list( - /obj/item/stack/medical/resin = 100 - ) - surgery_candidate_flags = SURGERY_NO_ROBOTIC | SURGERY_NO_STUMP | SURGERY_NO_FLESH diff --git a/code/modules/surgery/encased.dm b/code/modules/surgery/encased.dm deleted file mode 100644 index 0dc35e6fd1845..0000000000000 --- a/code/modules/surgery/encased.dm +++ /dev/null @@ -1,48 +0,0 @@ -//Procedures in this file: Generic ribcage opening steps, Removing alien embryo, Fixing internal organs. -////////////////////////////////////////////////////////////////// -// GENERIC RIBCAGE SURGERY // -////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////// -// generic ribcage surgery step datum -////////////////////////////////////////////////////////////////// -/decl/surgery_step/open_encased - name = "Saw through bone" - allowed_tools = list( - /obj/item/circular_saw = 100, - /obj/item/material/knife = 50, - /obj/item/material/hatchet = 75 - ) - can_infect = 1 - blood_level = 1 - min_duration = 50 - max_duration = 70 - shock_level = 60 - delicate = 1 - surgery_candidate_flags = SURGERY_NO_ROBOTIC | SURGERY_NO_CRYSTAL | SURGERY_NO_STUMP | SURGERY_NEEDS_RETRACTED - strict_access_requirement = TRUE - -/decl/surgery_step/open_encased/assess_bodypart(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - var/obj/item/organ/external/affected = ..() - if(affected && affected.encased) - return affected - -/decl/surgery_step/open_encased/begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - var/obj/item/organ/external/affected = target.get_organ(target_zone) - user.visible_message("[user] begins to cut through [target]'s [affected.encased] with \the [tool].", \ - "You begin to cut through [target]'s [affected.encased] with \the [tool].") - target.custom_pain("Something hurts horribly in your [affected.name]!",60, affecting = affected) - ..() - -/decl/surgery_step/open_encased/end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - var/obj/item/organ/external/affected = target.get_organ(target_zone) - user.visible_message("[user] has cut [target]'s [affected.encased] open with \the [tool].", \ - "You have cut [target]'s [affected.encased] open with \the [tool].") - affected.fracture() - -/decl/surgery_step/open_encased/fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - var/obj/item/organ/external/affected = target.get_organ(target_zone) - user.visible_message("[user]'s hand slips, cracking [target]'s [affected.encased] with \the [tool]!" , \ - "Your hand slips, cracking [target]'s [affected.encased] with \the [tool]!" ) - affected.take_external_damage(15, 0, (DAMAGE_FLAG_SHARP|DAMAGE_FLAG_EDGE), used_weapon = tool) - affected.fracture() diff --git a/code/modules/surgery/face.dm b/code/modules/surgery/face.dm deleted file mode 100644 index 73a3fb224f4f6..0000000000000 --- a/code/modules/surgery/face.dm +++ /dev/null @@ -1,145 +0,0 @@ - ////////////////////////////////////////////////////////////////// -// facial reconstruction surgery step -////////////////////////////////////////////////////////////////// -/decl/surgery_step/fix_face - name = "Repair face" - allowed_tools = list( - /obj/item/hemostat = 100, - /obj/item/stack/cable_coil = 75, - /obj/item/device/assembly/mousetrap = 10, - /obj/item/material/kitchen/utensil/fork = 75 - ) - min_duration = 100 - max_duration = 120 - surgery_candidate_flags = SURGERY_NO_ROBOTIC | SURGERY_NO_CRYSTAL | SURGERY_NEEDS_RETRACTED - strict_access_requirement = TRUE - -/decl/surgery_step/fix_face/assess_bodypart(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - if(target_zone == BP_HEAD) - var/obj/item/organ/external/affected = ..() - if(affected && (affected.status & ORGAN_DISFIGURED)) - return affected - -/decl/surgery_step/fix_face/begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - user.visible_message("[user] starts repairing damage to \the [target]'s face with \the [tool].", \ - "You start repairing damage to \the [target]'s face with \the [tool].") - ..() - -/decl/surgery_step/fix_face/end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - user.visible_message("[user] repairs \the [target]'s face with \the [tool].", \ - "You repair \the [target]'s face with \the [tool].") - var/obj/item/organ/external/head/h = target.get_organ(target_zone) - if(h) - h.status &= ~ORGAN_DISFIGURED - -/decl/surgery_step/fix_face/fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - var/obj/item/organ/external/affected = target.get_organ(target_zone) - user.visible_message("[user]'s hand slips, tearing skin on [target]'s face with \the [tool]!", \ - "Your hand slips, tearing skin on [target]'s face with \the [tool]!") - affected.take_external_damage(10, 0, (DAMAGE_FLAG_SHARP|DAMAGE_FLAG_EDGE), used_weapon = tool) - -////////////////////////////////////////////////////////////////// -// Plastic Surgery -////////////////////////////////////////////////////////////////// - -/decl/surgery_step/plastic_surgery - surgery_candidate_flags = SURGERY_NO_ROBOTIC | SURGERY_NO_CRYSTAL | SURGERY_NEEDS_RETRACTED - strict_access_requirement = TRUE - var/required_stage = 0 - -/decl/surgery_step/plastic_surgery/assess_bodypart(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - if(target_zone == BP_HEAD) - var/obj/item/organ/external/affected = ..() - if(affected && affected.stage == required_stage) - return affected - -/decl/surgery_step/plastic_surgery/prepare_face - name = "Prepare Face" - allowed_tools = list( - /obj/item/scalpel = 100, - /obj/item/material/shard = 50 - ) - min_duration = 100 - max_duration = 120 - can_infect = 1 - shock_level = 20 - -/decl/surgery_step/plastic_surgery/prepare_face/begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - user.visible_message( - SPAN_NOTICE("\The [user] starts peeling back the skin around \the [target]'s face with \the [tool]."), - SPAN_NOTICE("You start peeling back the skin around \the [target]'s face with \the [tool].") - ) - var/obj/item/organ/external/affected = target.get_organ(target_zone) - if(affected.stage == 0) - affected.stage = 1 - ..() - -/decl/surgery_step/plastic_surgery/prepare_face/end_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - user.visible_message( - SPAN_NOTICE("\The [user] finishes peeling back the skin around \the [target]'s face with \the [tool]."), - SPAN_NOTICE("You finish peeling back the skin around \the [target]'s face with \the [tool].") - ) - -/decl/surgery_step/plastic_surgery/prepare_face/fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - var/obj/item/organ/external/affected = target.get_organ(target_zone) - user.visible_message( - SPAN_WARNING("\The [user]'s hand slips, tearing skin on \the [target]'s face with \the [tool]!"), - SPAN_WARNING("Your hand slips, tearing skin on \the [target]'s face with \the [tool]!") - ) - affected.take_external_damage(10, 0, (DAMAGE_FLAG_SHARP|DAMAGE_FLAG_EDGE), used_weapon = tool) - -/decl/surgery_step/plastic_surgery/reform_face - name = "Reform Face" - allowed_tools = list( - /obj/item/hemostat = 100, - /obj/item/stack/cable_coil = 75, - /obj/item/device/assembly/mousetrap = 10, - /obj/item/material/kitchen/utensil/fork = 75 - ) - min_duration = 100 - max_duration = 120 - can_infect = 1 - shock_level = 20 - required_stage = 1 - -/decl/surgery_step/plastic_surgery/reform_face/begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - user.visible_message( - SPAN_NOTICE("\The [user] starts molding \the [target]'s face with \the [tool]."), - SPAN_NOTICE("You start molding \the [target]'s face with \the [tool].") - ) - ..() - -/decl/surgery_step/plastic_surgery/reform_face/end_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - user.visible_message( - SPAN_NOTICE("\The [user] finishes molding \the [target]'s face with \the [tool]."), - SPAN_NOTICE("You finish molding \the [target]'s face with \the [tool].") - ) - if(!target.fake_name) - var/new_name = sanitizeSafe(input(user, "Select a new name for \the [target].") as text|null, MAX_NAME_LEN) - if(new_name && user.Adjacent(target)) - user.visible_message( - SPAN_NOTICE("\The [user] molds \the [target]'s face into the spitting image of [new_name]!"), - SPAN_NOTICE("You mold \the [target]'s face into the spitting image of [new_name]!") - ) - target.fake_name=new_name - target.name=new_name - - else - target.fake_name=null - user.visible_message( - SPAN_NOTICE("\The [user] returns \the [target]'s face back to normal!"), - SPAN_NOTICE("You return \the [target]'s face back to normal!") - ) - var/obj/item/organ/external/affected = target.get_organ(target_zone) - affected.stage=0 - -/decl/surgery_step/plastic_surgery/reform_face/fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - var/obj/item/organ/external/affected = target.get_organ(target_zone) - user.visible_message( - SPAN_WARNING("\The [user]'s hand slips, tearing skin on \the [target]'s face with \the [tool]!"), - SPAN_WARNING("Your hand slips, tearing skin on \the [target]'s face with \the [tool]!") - ) - var/obj/item/organ/external/head/h = target.get_organ(target_zone) - affected.take_external_damage(10, 0, (DAMAGE_FLAG_SHARP|DAMAGE_FLAG_EDGE), used_weapon = tool) - if(h) - h.status &= ~ORGAN_DISFIGURED diff --git a/code/modules/surgery/generic.dm b/code/modules/surgery/generic.dm deleted file mode 100644 index fec994ae9a460..0000000000000 --- a/code/modules/surgery/generic.dm +++ /dev/null @@ -1,337 +0,0 @@ -//Procedures in this file: Gneric surgery steps -////////////////////////////////////////////////////////////////// -// COMMON STEPS // -////////////////////////////////////////////////////////////////// - - -////////////////////////////////////////////////////////////////// -// generic surgery step datum -////////////////////////////////////////////////////////////////// -/decl/surgery_step/generic - can_infect = 1 - shock_level = 10 - surgery_candidate_flags = SURGERY_NO_ROBOTIC | SURGERY_NO_CRYSTAL | SURGERY_NO_STUMP - -/decl/surgery_step/generic/assess_bodypart(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - if(target_zone != BP_EYES) //there are specific steps for eye surgery - . = ..() - -////////////////////////////////////////////////////////////////// -// laser scalpel surgery step -// acts as both cutting and bleeder clamping surgery steps -////////////////////////////////////////////////////////////////// -/decl/surgery_step/generic/cut_with_laser - name = "Make laser incision" - allowed_tools = list( - /obj/item/scalpel/laser3 = 95, - /obj/item/scalpel/laser2 = 85, - /obj/item/scalpel/laser1 = 75, - /obj/item/melee/energy/sword = 5 - ) - min_duration = 90 - max_duration = 110 - -/decl/surgery_step/generic/cut_with_laser/begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - var/obj/item/organ/external/affected = target.get_organ(target_zone) - user.visible_message("[user] starts the bloodless incision on [target]'s [affected.name] with \the [tool].", \ - "You start the bloodless incision on [target]'s [affected.name] with \the [tool].") - target.custom_pain("You feel a horrible, searing pain in your [affected.name]!",50, affecting = affected) - ..() - -/decl/surgery_step/generic/cut_with_laser/end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - var/obj/item/organ/external/affected = target.get_organ(target_zone) - user.visible_message("[user] has made a bloodless incision on [target]'s [affected.name] with \the [tool].", \ - "You have made a bloodless incision on [target]'s [affected.name] with \the [tool].",) - affected.createwound(INJURY_TYPE_CUT, affected.min_broken_damage/2, 1) - affected.clamp_organ() - spread_germs_to_organ(affected, user) - -/decl/surgery_step/generic/cut_with_laser/fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - var/obj/item/organ/external/affected = target.get_organ(target_zone) - user.visible_message("[user]'s hand slips as the blade sputters, searing a long gash in [target]'s [affected.name] with \the [tool]!", \ - "Your hand slips as the blade sputters, searing a long gash in [target]'s [affected.name] with \the [tool]!") - affected.take_external_damage(15, 5, (DAMAGE_FLAG_SHARP|DAMAGE_FLAG_EDGE), used_weapon = tool) - -////////////////////////////////////////////////////////////////// -// laser scalpel surgery step -// acts as the cutting, bleeder clamping, and retractor surgery steps -////////////////////////////////////////////////////////////////// -/decl/surgery_step/generic/managed - name = "Make managed incision" - allowed_tools = list( - /obj/item/scalpel/manager = 100 - ) - min_duration = 80 - max_duration = 120 - -/decl/surgery_step/generic/managed/begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - var/obj/item/organ/external/affected = target.get_organ(target_zone) - user.visible_message("[user] starts to construct a prepared incision on and within [target]'s [affected.name] with \the [tool].", \ - "You start to construct a prepared incision on and within [target]'s [affected.name] with \the [tool].") - target.custom_pain("You feel a horrible, searing pain in your [affected.name] as it is pushed apart!",50, affecting = affected) - ..() - -/decl/surgery_step/generic/managed/end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - var/obj/item/organ/external/affected = target.get_organ(target_zone) - user.visible_message("[user] has constructed a prepared incision on and within [target]'s [affected.name] with \the [tool].", \ - "You have constructed a prepared incision on and within [target]'s [affected.name] with \the [tool].",) - affected.createwound(INJURY_TYPE_CUT, affected.min_broken_damage/2, 1) // incision - affected.clamp_organ() // clamp - affected.open_incision() // retract - -/decl/surgery_step/generic/managed/fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - var/obj/item/organ/external/affected = target.get_organ(target_zone) - user.visible_message("[user]'s hand jolts as the system sparks, ripping a gruesome hole in [target]'s [affected.name] with \the [tool]!", \ - "Your hand jolts as the system sparks, ripping a gruesome hole in [target]'s [affected.name] with \the [tool]!") - affected.take_external_damage(20, 15, (DAMAGE_FLAG_SHARP|DAMAGE_FLAG_EDGE), used_weapon = tool) - -////////////////////////////////////////////////////////////////// -// scalpel surgery step -////////////////////////////////////////////////////////////////// -/decl/surgery_step/generic/cut_open - name = "Make incision" - allowed_tools = list( - /obj/item/scalpel = 100, - /obj/item/material/knife = 75, - /obj/item/broken_bottle = 50, - /obj/item/material/shard = 50 - ) - min_duration = 90 - max_duration = 110 - var/fail_string = "slicing open" - var/access_string = "an incision" - -/decl/surgery_step/generic/cut_open/assess_bodypart(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - . = ..() - if(.) - var/obj/item/organ/external/affected = . - if(affected.how_open()) - var/datum/wound/cut/incision = affected.get_incision() - to_chat(user, SPAN_NOTICE("The [incision.desc] provides enough access.")) - return FALSE - -/decl/surgery_step/generic/cut_open/begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - var/obj/item/organ/external/affected = target.get_organ(target_zone) - user.visible_message("[user] starts [access_string] on [target]'s [affected.name] with \the [tool].", \ - "You start [access_string] on [target]'s [affected.name] with \the [tool].") - target.custom_pain("You feel a horrible pain as if from a sharp knife in your [affected.name]!",40, affecting = affected) - ..() - -/decl/surgery_step/generic/cut_open/end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - var/obj/item/organ/external/affected = target.get_organ(target_zone) - user.visible_message("[user] has made [access_string] on [target]'s [affected.name] with \the [tool].", \ - "You have made [access_string] on [target]'s [affected.name] with \the [tool].",) - affected.createwound(INJURY_TYPE_CUT, affected.min_broken_damage/2, 1) - playsound(target.loc, 'sound/weapons/bladeslice.ogg', 15, 1) - -/decl/surgery_step/generic/cut_open/fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - var/obj/item/organ/external/affected = target.get_organ(target_zone) - user.visible_message("[user]'s hand slips, [fail_string] \the [target]'s [affected.name] in the wrong place with \the [tool]!", \ - "Your hand slips, [fail_string] \the [target]'s [affected.name] in the wrong place with \the [tool]!") - affected.take_external_damage(10, 0, (DAMAGE_FLAG_SHARP|DAMAGE_FLAG_EDGE), used_weapon = tool) - -/decl/surgery_step/generic/cut_open/success_chance(mob/living/user, mob/living/carbon/human/target, obj/item/tool) - . = ..() - if(user.skill_check(SKILL_FORENSICS, SKILL_ADEPT)) - . += 40 - if(target.stat == DEAD) - . += 40 - -////////////////////////////////////////////////////////////////// -// bleeder clamping surgery step -////////////////////////////////////////////////////////////////// -/decl/surgery_step/generic/clamp_bleeders - name = "Clamp bleeders" - allowed_tools = list( - /obj/item/hemostat = 100, - /obj/item/stack/cable_coil = 75, - /obj/item/device/assembly/mousetrap = 20 - ) - min_duration = 40 - max_duration = 60 - surgery_candidate_flags = SURGERY_NO_ROBOTIC | SURGERY_NO_CRYSTAL | SURGERY_NO_STUMP | SURGERY_NEEDS_INCISION - strict_access_requirement = FALSE - -/decl/surgery_step/generic/clamp_bleeders/assess_bodypart(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - var/obj/item/organ/external/affected = ..() - if(affected && !affected.clamped()) - return affected - -/decl/surgery_step/generic/clamp_bleeders/begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - var/obj/item/organ/external/affected = target.get_organ(target_zone) - user.visible_message("[user] starts clamping bleeders in [target]'s [affected.name] with \the [tool].", \ - "You start clamping bleeders in [target]'s [affected.name] with \the [tool].") - target.custom_pain("The pain in your [affected.name] is maddening!",40, affecting = affected) - ..() - -/decl/surgery_step/generic/clamp_bleeders/end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - var/obj/item/organ/external/affected = target.get_organ(target_zone) - user.visible_message("[user] clamps bleeders in [target]'s [affected.name] with \the [tool].", \ - "You clamp bleeders in [target]'s [affected.name] with \the [tool].") - affected.clamp_organ() - spread_germs_to_organ(affected, user) - playsound(target.loc, 'sound/items/Welder.ogg', 15, 1) - -/decl/surgery_step/generic/clamp_bleeders/fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - var/obj/item/organ/external/affected = target.get_organ(target_zone) - user.visible_message("[user]'s hand slips, tearing blood vessals and causing massive bleeding in [target]'s [affected.name] with \the [tool]!", \ - "Your hand slips, tearing blood vessels and causing massive bleeding in [target]'s [affected.name] with \the [tool]!",) - affected.take_external_damage(10, 0, (DAMAGE_FLAG_SHARP|DAMAGE_FLAG_EDGE), used_weapon = tool) - -////////////////////////////////////////////////////////////////// -// retractor surgery step -////////////////////////////////////////////////////////////////// -/decl/surgery_step/generic/retract_skin - name = "Widen incision" - allowed_tools = list( - /obj/item/retractor = 100, - /obj/item/crowbar = 75, - /obj/item/material/knife = 50, - /obj/item/material/kitchen/utensil/fork = 50 - ) - min_duration = 30 - max_duration = 40 - surgery_candidate_flags = SURGERY_NO_ROBOTIC | SURGERY_NO_CRYSTAL | SURGERY_NO_STUMP | SURGERY_NEEDS_INCISION - strict_access_requirement = TRUE - -/decl/surgery_step/generic/retract_skin/pre_surgery_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - . = FALSE - var/obj/item/organ/external/affected = target.get_organ(target_zone) - if(affected) - if(affected.how_open() >= SURGERY_RETRACTED) - var/datum/wound/cut/incision = affected.get_incision() - to_chat(user, SPAN_NOTICE("The [incision.desc] provides enough access, a larger incision isn't needed.")) - else - . = TRUE - -/decl/surgery_step/generic/retract_skin/begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - var/obj/item/organ/external/affected = target.get_organ(target_zone) - user.visible_message("[user] starts to pry open the incision on [target]'s [affected.name] with \the [tool].", \ - "You start to pry open the incision on [target]'s [affected.name] with \the [tool].") - target.custom_pain("It feels like the skin on your [affected.name] is on fire!",40,affecting = affected) - ..() - -/decl/surgery_step/generic/retract_skin/end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - var/obj/item/organ/external/affected = target.get_organ(target_zone) - user.visible_message("[user] keeps the incision open on [target]'s [affected.name] with \the [tool].", \ - "You keep the incision open on [target]'s [affected.name] with \the [tool].") - affected.open_incision() - -/decl/surgery_step/generic/retract_skin/fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - var/obj/item/organ/external/affected = target.get_organ(target_zone) - user.visible_message("[user]'s hand slips, tearing the edges of the incision on [target]'s [affected.name] with \the [tool]!", \ - "Your hand slips, tearing the edges of the incision on [target]'s [affected.name] with \the [tool]!") - affected.take_external_damage(12, 0, (DAMAGE_FLAG_SHARP|DAMAGE_FLAG_EDGE), used_weapon = tool) - -////////////////////////////////////////////////////////////////// -// skin cauterization surgery step -////////////////////////////////////////////////////////////////// -/decl/surgery_step/generic/cauterize - name = "Cauterize incision" - allowed_tools = list( - /obj/item/cautery = 100, - /obj/item/clothing/mask/smokable/cigarette = 75, - /obj/item/flame/lighter = 50, - /obj/item/weldingtool = 25 - ) - min_duration = 70 - max_duration = 100 - surgery_candidate_flags = SURGERY_NO_ROBOTIC | SURGERY_NO_CRYSTAL - var/cauterize_term = "cauterize" - var/post_cauterize_term = "cauterized" - -/decl/surgery_step/generic/cauterize/pre_surgery_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - . = FALSE - var/obj/item/organ/external/affected = target.get_organ(target_zone) - if(affected) - if(affected.is_stump()) - if(affected.status & ORGAN_ARTERY_CUT) - . = TRUE - else - to_chat(user, SPAN_WARNING("There is no bleeding to repair within this stump.")) - else if(!affected.get_incision(1)) - to_chat(user, SPAN_WARNING("There are no incisions on [target]'s [affected.name] that can be closed cleanly with \the [tool]!")) - else - . = TRUE - -/decl/surgery_step/generic/cauterize/assess_bodypart(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - var/obj/item/organ/external/affected = ..() - if(affected) - if(affected.is_stump()) - if(affected.status & ORGAN_ARTERY_CUT) - return affected - else if(affected.how_open()) - return affected - -/decl/surgery_step/generic/cauterize/begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - var/obj/item/organ/external/affected = target.get_organ(target_zone) - var/datum/wound/W = affected.get_incision() - user.visible_message("[user] is beginning to [cauterize_term][W ? " \a [W.desc] on" : ""] \the [target]'s [affected.name] with \the [tool]." , \ - "You are beginning to [cauterize_term][W ? " \a [W.desc] on" : ""] \the [target]'s [affected.name] with \the [tool].") - target.custom_pain("Your [affected.name] is being burned!",40,affecting = affected) - ..() - -/decl/surgery_step/generic/cauterize/end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - var/obj/item/organ/external/affected = target.get_organ(target_zone) - var/datum/wound/W = affected.get_incision() - user.visible_message("[user] [post_cauterize_term][W ? " \a [W.desc] on" : ""] \the [target]'s [affected.name] with \the [tool].", \ - "You [cauterize_term][W ? " \a [W.desc] on" : ""] \the [target]'s [affected.name] with \the [tool].") - if(istype(W)) - W.close() - affected.update_wounds() - if(affected.is_stump()) - affected.status &= ~ORGAN_ARTERY_CUT - if(affected.clamped()) - affected.remove_clamps() - -/decl/surgery_step/generic/cauterize/fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - var/obj/item/organ/external/affected = target.get_organ(target_zone) - user.visible_message("[user]'s hand slips, damaging [target]'s [affected.name] with \the [tool]!", \ - "Your hand slips, damaging [target]'s [affected.name] with \the [tool]!") - affected.take_external_damage(0, 3, used_weapon = tool) - -////////////////////////////////////////////////////////////////// -// limb amputation surgery step -////////////////////////////////////////////////////////////////// -/decl/surgery_step/generic/amputate - name = "Amputate limb" - allowed_tools = list( - /obj/item/circular_saw = 100, - /obj/item/material/hatchet = 75 - ) - min_duration = 110 - max_duration = 160 - surgery_candidate_flags = 0 - -/decl/surgery_step/generic/amputate/assess_bodypart(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - var/obj/item/organ/external/affected = ..() - if(affected && (affected.limb_flags & ORGAN_FLAG_CAN_AMPUTATE) && !affected.how_open()) - return affected - -/decl/surgery_step/generic/amputate/get_skill_reqs(mob/living/user, mob/living/carbon/human/target, obj/item/tool) - var/target_zone = user.zone_sel.selecting - var/obj/item/organ/external/affected = target.get_organ(target_zone) - if(BP_IS_ROBOTIC(affected)) - return SURGERY_SKILLS_ROBOTIC - else - return ..() - -/decl/surgery_step/generic/amputate/begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - var/obj/item/organ/external/affected = target.get_organ(target_zone) - user.visible_message("[user] is beginning to amputate [target]'s [affected.name] with \the [tool]." , \ - "You are beginning to cut through [target]'s [affected.amputation_point] with \the [tool].") - target.custom_pain("Your [affected.amputation_point] is being ripped apart!",100,affecting = affected) - ..() - -/decl/surgery_step/generic/amputate/end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - var/obj/item/organ/external/affected = target.get_organ(target_zone) - user.visible_message("[user] amputates [target]'s [affected.name] at the [affected.amputation_point] with \the [tool].", \ - "You amputate [target]'s [affected.name] with \the [tool].") - affected.droplimb(1,DROPLIMB_EDGE) - -/decl/surgery_step/generic/amputate/fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - var/obj/item/organ/external/affected = target.get_organ(target_zone) - user.visible_message("[user]'s hand slips, sawing through the bone in [target]'s [affected.name] with \the [tool]!", \ - "Your hand slips, sawwing through the bone in [target]'s [affected.name] with \the [tool]!") - affected.take_external_damage(30, 0, (DAMAGE_FLAG_SHARP|DAMAGE_FLAG_EDGE), used_weapon = tool) - affected.fracture() diff --git a/code/modules/surgery/implant.dm b/code/modules/surgery/implant.dm deleted file mode 100644 index 37031c126ec6d..0000000000000 --- a/code/modules/surgery/implant.dm +++ /dev/null @@ -1,233 +0,0 @@ -//Procedures in this file: Putting items in body cavity. Implant removal. Items removal. - -////////////////////////////////////////////////////////////////// -// ITEM PLACEMENT SURGERY // -////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////// -// generic implant surgery step datum -////////////////////////////////////////////////////////////////// -/decl/surgery_step/cavity - shock_level = 40 - delicate = 1 - surgery_candidate_flags = SURGERY_NO_CRYSTAL | SURGERY_NO_STUMP | SURGERY_NEEDS_ENCASEMENT - -/decl/surgery_step/cavity/fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - var/obj/item/organ/external/chest/affected = target.get_organ(target_zone) - user.visible_message("[user]'s hand slips, scraping around inside [target]'s [affected.name] with \the [tool]!", \ - "Your hand slips, scraping around inside [target]'s [affected.name] with \the [tool]!") - affected.take_external_damage(20, 0, (DAMAGE_FLAG_SHARP|DAMAGE_FLAG_EDGE), used_weapon = tool) - -////////////////////////////////////////////////////////////////// -// create implant space surgery step -////////////////////////////////////////////////////////////////// -/decl/surgery_step/cavity/make_space - name = "Hollow out cavity" - allowed_tools = list( - /obj/item/surgicaldrill = 100, - /obj/item/pen = 75, - /obj/item/stack/material/rods = 50 - ) - min_duration = 60 - max_duration = 80 - -/decl/surgery_step/cavity/make_space/assess_bodypart(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - var/obj/item/organ/external/affected = ..() - if(affected && affected.cavity_name && !affected.cavity) - return affected - -/decl/surgery_step/cavity/make_space/begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - var/obj/item/organ/external/affected = target.get_organ(target_zone) - user.visible_message("[user] starts making some space inside [target]'s [affected.cavity_name] cavity with \the [tool].", \ - "You start making some space inside [target]'s [affected.cavity_name] cavity with \the [tool]." ) - target.custom_pain("The pain in your chest is living hell!",1,affecting = affected) - affected.cavity = TRUE - ..() - -/decl/surgery_step/cavity/make_space/end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - var/obj/item/organ/external/chest/affected = target.get_organ(target_zone) - user.visible_message("[user] makes some space inside [target]'s [affected.cavity_name] cavity with \the [tool].", \ - "You make some space inside [target]'s [affected.cavity_name] cavity with \the [tool]." ) - -////////////////////////////////////////////////////////////////// -// implant cavity sealing surgery step -////////////////////////////////////////////////////////////////// -/decl/surgery_step/cavity/close_space - name = "Close cavity" - allowed_tools = list( - /obj/item/cautery = 100, - /obj/item/clothing/mask/smokable/cigarette = 75, - /obj/item/flame/lighter = 50, - /obj/item/weldingtool = 25 - ) - min_duration = 60 - max_duration = 80 - -/decl/surgery_step/cavity/close_space/assess_bodypart(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - var/obj/item/organ/external/affected = ..() - if(affected && affected.cavity) - return affected - -/decl/surgery_step/cavity/close_space/begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - var/obj/item/organ/external/affected = target.get_organ(target_zone) - user.visible_message("[user] starts mending [target]'s [affected.cavity_name] cavity wall with \the [tool].", \ - "You start mending [target]'s [affected.cavity_name] cavity wall with \the [tool]." ) - target.custom_pain("The pain in your chest is living hell!",1,affecting = affected) - ..() - -/decl/surgery_step/cavity/close_space/end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - var/obj/item/organ/external/chest/affected = target.get_organ(target_zone) - user.visible_message("[user] mends [target]'s [affected.cavity_name] cavity walls with \the [tool].", \ - "You mend [target]'s [affected.cavity_name] cavity walls with \the [tool]." ) - affected.cavity = FALSE - -////////////////////////////////////////////////////////////////// -// implanting surgery step -////////////////////////////////////////////////////////////////// -/decl/surgery_step/cavity/place_item - name = "Place item in cavity" - allowed_tools = list(/obj/item = 100) - min_duration = 80 - max_duration = 100 - -/decl/surgery_step/cavity/place_item/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - if(istype(user,/mob/living/silicon/robot)) - return FALSE - . = ..() - -/decl/surgery_step/cavity/place_item/assess_bodypart(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - var/obj/item/organ/external/affected = ..() - if(affected && affected.cavity) - return affected - -/decl/surgery_step/cavity/place_item/pre_surgery_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - var/obj/item/organ/external/affected = target.get_organ(target_zone) - if(affected && affected.cavity) - var/max_volume = BASE_STORAGE_CAPACITY(affected.cavity_max_w_class) - if(tool.w_class > affected.cavity_max_w_class) - to_chat(user, SPAN_WARNING("\The [tool] is too big for [affected.cavity_name] cavity.")) - return FALSE - var/total_volume = tool.get_storage_cost() - for(var/obj/item/I in affected.implants) - if(istype(I,/obj/item/implant)) - continue - total_volume += I.get_storage_cost() - if(total_volume > max_volume) - to_chat(user, SPAN_WARNING("There isn't enough space left in [affected.cavity_name] cavity for [tool].")) - return FALSE - return TRUE - -/decl/surgery_step/cavity/place_item/begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - var/obj/item/organ/external/affected = target.get_organ(target_zone) - user.visible_message("[user] starts putting \the [tool] inside [target]'s [affected.cavity_name] cavity.", \ - "You start putting \the [tool] inside [target]'s [affected.cavity_name] cavity." ) - target.custom_pain("The pain in your chest is living hell!",1,affecting = affected) - playsound(target.loc, 'sound/effects/squelch1.ogg', 25, 1) - ..() - -/decl/surgery_step/cavity/place_item/end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - var/obj/item/organ/external/chest/affected = target.get_organ(target_zone) - if(!user.unEquip(tool, affected)) - return - user.visible_message("[user] puts \the [tool] inside [target]'s [affected.cavity_name] cavity.", \ - "You put \the [tool] inside [target]'s [affected.cavity_name] cavity." ) - if (tool.w_class > affected.cavity_max_w_class/2 && prob(50) && !BP_IS_ROBOTIC(affected) && affected.sever_artery()) - to_chat(user, "You tear some blood vessels trying to fit such a big object in this cavity.") - affected.owner.custom_pain("You feel something rip in your [affected.name]!", 1,affecting = affected) - affected.implants += tool - affected.cavity = 0 - -////////////////////////////////////////////////////////////////// -// implant removal surgery step -////////////////////////////////////////////////////////////////// -/decl/surgery_step/cavity/implant_removal - name = "Remove foreign body" - allowed_tools = list( - /obj/item/hemostat = 100, - /obj/item/wirecutters = 75, - /obj/item/material/kitchen/utensil/fork = 20 - ) - min_duration = 80 - max_duration = 100 - -/decl/surgery_step/cavity/implant_removal/assess_bodypart(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - var/obj/item/organ/external/affected = ..() - if(affected) - for(var/obj/O in affected.implants) - if(!istype(O, /obj/item/organ/internal)) - return affected - return FALSE - -/decl/surgery_step/cavity/implant_removal/begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - var/obj/item/organ/external/affected = target.get_organ(target_zone) - user.visible_message("[user] starts poking around inside [target]'s [affected.name] with \the [tool].", \ - "You start poking around inside [target]'s [affected.name] with \the [tool]." ) - target.custom_pain("The pain in your [affected.name] is living hell!",1,affecting = affected) - ..() - -/decl/surgery_step/cavity/implant_removal/end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - var/obj/item/organ/external/chest/affected = target.get_organ(target_zone) - var/exposed = 0 - if(affected.how_open() >= (affected.encased ? SURGERY_ENCASED : SURGERY_RETRACTED)) - exposed = 1 - if(BP_IS_ROBOTIC(affected) && affected.hatch_state == HATCH_OPENED) - exposed = 1 - - var/find_prob = 0 - var/list/loot = list() - if(exposed) - loot = affected.implants - else - for(var/datum/wound/wound in affected.wounds) - if(LAZYLEN(wound.embedded_objects)) - loot |= wound.embedded_objects - find_prob += 50 - - if (loot.len) - - var/obj/item/obj = pick(loot) - - if(istype(obj,/obj/item/implant)) - var/obj/item/implant/imp = obj - if (imp.islegal()) - find_prob +=60 - else - find_prob +=40 - else - find_prob +=50 - - if (prob(find_prob)) - user.visible_message("[user] takes something out of incision on [target]'s [affected.name] with \the [tool].", \ - "You take \the [obj] out of incision on \the [target]'s [affected.name] with \the [tool]." ) - target.remove_implant(obj, TRUE, affected) - - SET_BIT(target.hud_updateflag, IMPLOYAL_HUD) - - //Handle possessive brain borers. - if(istype(obj,/mob/living/simple_animal/borer)) - var/mob/living/simple_animal/borer/worm = obj - if(worm.controlling) - target.release_control() - worm.detatch() - worm.leave_host() - - - playsound(target.loc, 'sound/effects/squelch1.ogg', 15, 1) - else - user.visible_message("[user] removes \the [tool] from [target]'s [affected.name].", \ - "There's something inside [target]'s [affected.name], but you just missed it this time." ) - else - user.visible_message("[user] could not find anything inside [target]'s [affected.name], and pulls \the [tool] out.", \ - "You could not find anything inside [target]'s [affected.name]." ) - -/decl/surgery_step/cavity/implant_removal/fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - ..() - var/obj/item/organ/external/affected = target.get_organ(target_zone) - for(var/obj/item/implant/imp in affected.implants) - var/fail_prob = 10 - fail_prob += 100 - tool_quality(tool) - if (prob(fail_prob)) - user.visible_message("Something beeps inside [target]'s [affected.name]!") - playsound(imp.loc, 'sound/items/countdown.ogg', 75, 1, -3) - spawn(25) - imp.activate() diff --git a/code/modules/surgery/limb_reattach.dm b/code/modules/surgery/limb_reattach.dm deleted file mode 100644 index ff3582b688ba5..0000000000000 --- a/code/modules/surgery/limb_reattach.dm +++ /dev/null @@ -1,198 +0,0 @@ -//Procedures in this file: Robotic limbs attachment, meat limbs attachment -////////////////////////////////////////////////////////////////// -// LIMB SURGERY // -////////////////////////////////////////////////////////////////// - - -////////////////////////////////////////////////////////////////// -// generic limb surgery step datum -////////////////////////////////////////////////////////////////// -/decl/surgery_step/limb - can_infect = 0 - shock_level = 40 - delicate = 1 - -/decl/surgery_step/limb/assess_bodypart(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - var/obj/item/organ/external/affected = target.get_organ(target_zone) - if(affected) - return affected - else - var/list/organ_data = target.species.has_limbs["[target_zone]"] - return !isnull(organ_data) - -////////////////////////////////////////////////////////////////// -// limb attachment surgery step -////////////////////////////////////////////////////////////////// -/decl/surgery_step/limb/attach - name = "Replace limb" - allowed_tools = list(/obj/item/organ/external = 100) - min_duration = 50 - max_duration = 70 - -/decl/surgery_step/limb/attach/pre_surgery_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - . = FALSE - var/obj/item/organ/external/E = tool - var/obj/item/organ/external/P = target.organs_by_name[E.parent_organ] - var/obj/item/organ/external/T = target.organs_by_name[E.organ_tag] - - if ((E.status & ORGAN_CONFIGURE) && E.surgery_configure(user, target, P, tool, src)) - return - - if(!P || P.is_stump()) - to_chat(user, SPAN_WARNING("The [E.amputation_point] is missing!")) - else if(T && T.is_stump()) - to_chat(user, SPAN_WARNING("You cannot attach \a [E] when there is a stump!")) - else if(T) - to_chat(user, SPAN_WARNING("There is already \a [E]!")) - else if(BP_IS_ROBOTIC(P) && !BP_IS_ROBOTIC(E)) - to_chat(user, SPAN_WARNING("You cannot attach a flesh part to a robotic body.")) - else if(BP_IS_CRYSTAL(P) && !BP_IS_CRYSTAL(E)) - to_chat(user, SPAN_WARNING("You cannot attach a flesh part to a crystalline body.")) - else if(!BP_IS_CRYSTAL(P) && BP_IS_CRYSTAL(E)) - to_chat(user, SPAN_WARNING("You cannot attach a crystalline part to a flesh body.")) - else - . = TRUE - -/decl/surgery_step/limb/attach/get_skill_reqs(mob/living/user, mob/living/carbon/human/target, obj/item/organ/external/tool) - if(istype(tool) && BP_IS_ROBOTIC(tool)) - if(target.isSynthetic()) - return SURGERY_SKILLS_ROBOTIC - else - return SURGERY_SKILLS_ROBOTIC_ON_MEAT - return ..() - -/decl/surgery_step/limb/attach/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - if(..()) - var/obj/item/organ/external/E = tool - var/obj/item/organ/external/P = target.organs_by_name[E.parent_organ] - . = (P && !P.is_stump() && !(BP_IS_ROBOTIC(P) && !BP_IS_ROBOTIC(E))) - -/decl/surgery_step/limb/attach/begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - var/obj/item/organ/external/E = tool - user.visible_message("[user] starts attaching [E.name] to [target]'s [E.amputation_point].", \ - "You start attaching [E.name] to [target]'s [E.amputation_point].") - -/decl/surgery_step/limb/attach/end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - if(!user.unEquip(tool)) - return - var/obj/item/organ/external/E = tool - user.visible_message("[user] has attached [target]'s [E.name] to the [E.amputation_point].", \ - "You have attached [target]'s [E.name] to the [E.amputation_point].") - E.replaced(target) - target.update_body() - target.updatehealth() - target.UpdateDamageIcon() - -/decl/surgery_step/limb/attach/fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - var/obj/item/organ/external/E = tool - user.visible_message(" [user]'s hand slips, damaging [target]'s [E.amputation_point]!", \ - " Your hand slips, damaging [target]'s [E.amputation_point]!") - target.apply_damage(10, DAMAGE_BRUTE, null, damage_flags=DAMAGE_FLAG_SHARP) - -////////////////////////////////////////////////////////////////// -// limb connecting surgery step -////////////////////////////////////////////////////////////////// -/decl/surgery_step/limb/connect - name = "Connect limb" - allowed_tools = list( - /obj/item/hemostat = 100, - /obj/item/stack/cable_coil = 75, - /obj/item/device/assembly/mousetrap = 20 - ) - can_infect = 1 - min_duration = 100 - max_duration = 120 - -/decl/surgery_step/limb/connect/get_skill_reqs(mob/living/user, mob/living/carbon/human/target, obj/item/tool, target_zone) - var/obj/item/organ/external/E = target && target.get_organ(target_zone) - if(istype(E) && BP_IS_ROBOTIC(E)) - if(target.isSynthetic()) - return SURGERY_SKILLS_ROBOTIC - else - return SURGERY_SKILLS_ROBOTIC_ON_MEAT - return ..() - -/decl/surgery_step/limb/connect/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - if(..()) - var/obj/item/organ/external/E = target.get_organ(target_zone) - return E && !E.is_stump() && (E.status & ORGAN_CUT_AWAY) - -/decl/surgery_step/limb/connect/begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - var/obj/item/organ/external/E = target.get_organ(target_zone) - user.visible_message("[user] starts connecting tendons and muscles in [target]'s [E.amputation_point] with [tool].", \ - "You start connecting tendons and muscle in [target]'s [E.amputation_point].") - -/decl/surgery_step/limb/connect/end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - var/obj/item/organ/external/E = target.get_organ(target_zone) - user.visible_message("[user] has connected tendons and muscles in [target]'s [E.amputation_point] with [tool].", \ - "You have connected tendons and muscles in [target]'s [E.amputation_point] with [tool].") - E.status &= ~ORGAN_CUT_AWAY - if(E.children) - for(var/obj/item/organ/external/C in E.children) - C.status &= ~ORGAN_CUT_AWAY - target.update_body() - target.updatehealth() - target.UpdateDamageIcon() - -/decl/surgery_step/limb/connect/fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - var/obj/item/organ/external/E = target.get_organ(target_zone) - user.visible_message(" [user]'s hand slips, damaging [target]'s [E.amputation_point]!", \ - " Your hand slips, damaging [target]'s [E.amputation_point]!") - target.apply_damage(10, DAMAGE_BRUTE, null, damage_flags=DAMAGE_FLAG_SHARP) - -////////////////////////////////////////////////////////////////// -// robotic limb attachment surgery step -////////////////////////////////////////////////////////////////// -/decl/surgery_step/limb/mechanize - name = "Attach prosthetic limb" - allowed_tools = list(/obj/item/robot_parts = 100) - - min_duration = 80 - max_duration = 100 - -/decl/surgery_step/limb/mechanize/get_skill_reqs(mob/living/user, mob/living/carbon/human/target, obj/item/tool) - if(target.isSynthetic()) - return SURGERY_SKILLS_ROBOTIC - else - return SURGERY_SKILLS_ROBOTIC_ON_MEAT - -/decl/surgery_step/limb/mechanize/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - if(..()) - var/obj/item/robot_parts/p = tool - if (p.part) - if (!(target_zone in p.part)) - return 0 - return isnull(target.get_organ(target_zone)) - -/decl/surgery_step/limb/mechanize/begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - user.visible_message("[user] starts attaching \the [tool] to [target].", \ - "You start attaching \the [tool] to [target].") - -/decl/surgery_step/limb/mechanize/end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - var/obj/item/robot_parts/L = tool - user.visible_message("[user] has attached \the [tool] to [target].", \ - "You have attached \the [tool] to [target].") - - if(L.part) - for(var/part_name in L.part) - if(!isnull(target.get_organ(part_name))) - continue - var/list/organ_data = target.species.has_limbs["[part_name]"] - if(!organ_data) - continue - var/new_limb_type = organ_data["path"] - var/obj/item/organ/external/new_limb = new new_limb_type(target) - new_limb.robotize(L.model_info) - if(L.sabotaged) - new_limb.status |= ORGAN_SABOTAGED - - target.update_body() - target.updatehealth() - target.UpdateDamageIcon() - - qdel(tool) - -/decl/surgery_step/limb/mechanize/fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - user.visible_message(" [user]'s hand slips, damaging [target]'s flesh!", \ - " Your hand slips, damaging [target]'s flesh!") - target.apply_damage(10, DAMAGE_BRUTE, null, damage_flags=DAMAGE_FLAG_SHARP) diff --git a/code/modules/surgery/organs_internal.dm b/code/modules/surgery/organs_internal.dm deleted file mode 100644 index 27c4a45f9d377..0000000000000 --- a/code/modules/surgery/organs_internal.dm +++ /dev/null @@ -1,472 +0,0 @@ -//Procedures in this file: internal organ surgery, removal, transplants -////////////////////////////////////////////////////////////////// -// INTERNAL ORGANS // -////////////////////////////////////////////////////////////////// -/decl/surgery_step/internal - can_infect = 1 - blood_level = 1 - shock_level = 40 - delicate = 1 - surgery_candidate_flags = SURGERY_NO_ROBOTIC | SURGERY_NO_STUMP | SURGERY_NEEDS_ENCASEMENT - -////////////////////////////////////////////////////////////////// -// Organ mending surgery step -////////////////////////////////////////////////////////////////// -/decl/surgery_step/internal/fix_organ - name = "Repair internal organ" - allowed_tools = list( - /obj/item/stack/medical/advanced/bruise_pack = 100, - /obj/item/stack/medical/bruise_pack = 40, - /obj/item/tape_roll = 20 - ) - min_duration = 70 - max_duration = 90 - surgery_candidate_flags = SURGERY_NO_CRYSTAL | SURGERY_NO_ROBOTIC | SURGERY_NO_STUMP - -/decl/surgery_step/internal/fix_organ/assess_bodypart(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - var/obj/item/organ/external/affected = ..() - if(affected) - for(var/obj/item/organ/internal/I in affected.internal_organs) - if(I.damage > 0) - if(I.surface_accessible || (affected.how_open() >= (affected.encased ? SURGERY_ENCASED : SURGERY_RETRACTED))) - return affected - -/decl/surgery_step/internal/fix_organ/begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - var/tool_name = "\the [tool]" - if (istype(tool, /obj/item/stack/medical/advanced/bruise_pack)) - tool_name = "regenerative membrane" - else if (istype(tool, /obj/item/stack/medical/bruise_pack)) - tool_name = "the bandaid" - var/obj/item/organ/external/affected = target.get_organ(target_zone) - user.visible_message("[user] starts treating damage within \the [target]'s [affected.name] with [tool_name].", \ - "You start treating damage within \the [target]'s [affected.name] with [tool_name]." ) - for(var/obj/item/organ/internal/I in affected.internal_organs) - if(I && I.damage > 0 && !BP_IS_ROBOTIC(I) && (!(I.status & ORGAN_DEAD) || I.can_recover()) && (I.surface_accessible || affected.how_open() >= (affected.encased ? SURGERY_ENCASED : SURGERY_RETRACTED))) - user.visible_message("[user] starts treating damage to [target]'s [I.name] with [tool_name].", \ - "You start treating damage to [target]'s [I.name] with [tool_name]." ) - target.custom_pain("The pain in your [affected.name] is living hell!",100,affecting = affected) - ..() - -/decl/surgery_step/internal/fix_organ/end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - var/tool_name = "\the [tool]" - if (istype(tool, /obj/item/stack/medical/advanced/bruise_pack)) - tool_name = "regenerative membrane" - if (istype(tool, /obj/item/stack/medical/bruise_pack)) - tool_name = "the bandaid" - var/obj/item/organ/external/affected = target.get_organ(target_zone) - for(var/obj/item/organ/internal/I in affected.internal_organs) - if(I && I.damage > 0 && !BP_IS_ROBOTIC(I) && (I.surface_accessible || affected.how_open() >= (affected.encased ? SURGERY_ENCASED : SURGERY_RETRACTED))) - if(I.status & ORGAN_DEAD && I.can_recover()) - user.visible_message("\The [user] treats damage to [target]'s [I.name] with [tool_name], though it needs to be recovered further.", \ - "You treat damage to [target]'s [I.name] with [tool_name], though it needs to be recovered further." ) - else - user.visible_message("[user] treats damage to [target]'s [I.name] with [tool_name].", \ - "You treat damage to [target]'s [I.name] with [tool_name]." ) - I.surgical_fix(user) - user.visible_message("\The [user] finishes treating damage within \the [target]'s [affected.name] with [tool_name].", \ - "You finish treating damage within \the [target]'s [affected.name] with [tool_name]." ) - -/decl/surgery_step/internal/fix_organ/fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - var/obj/item/organ/external/affected = target.get_organ(target_zone) - user.visible_message("[user]'s hand slips, getting mess and tearing the inside of [target]'s [affected.name] with \the [tool]!", \ - "Your hand slips, getting mess and tearing the inside of [target]'s [affected.name] with \the [tool]!") - var/dam_amt = 2 - if(istype(tool, /obj/item/stack/medical/advanced/bruise_pack)) - target.adjustToxLoss(5) - else - dam_amt = 5 - target.adjustToxLoss(10) - affected.take_external_damage(dam_amt, 0, (DAMAGE_FLAG_SHARP|DAMAGE_FLAG_EDGE), used_weapon = tool) - for(var/obj/item/organ/internal/I in affected.internal_organs) - if(I && I.damage > 0 && !BP_IS_ROBOTIC(I) && (I.surface_accessible || affected.how_open() >= (affected.encased ? SURGERY_ENCASED : SURGERY_RETRACTED))) - I.take_internal_damage(dam_amt) - -////////////////////////////////////////////////////////////////// -// Organ detatchment surgery step -////////////////////////////////////////////////////////////////// -/decl/surgery_step/internal/detatch_organ - name = "Detach organ" - allowed_tools = list( - /obj/item/scalpel = 100, - /obj/item/material/shard = 50 - ) - min_duration = 90 - max_duration = 110 - surgery_candidate_flags = SURGERY_NO_CRYSTAL | SURGERY_NO_ROBOTIC | SURGERY_NO_STUMP | SURGERY_NEEDS_ENCASEMENT - -/decl/surgery_step/internal/detatch_organ/pre_surgery_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - var/list/attached_organs - for(var/organ in target.internal_organs_by_name) - var/obj/item/organ/I = target.internal_organs_by_name[organ] - if(I && !(I.status & ORGAN_CUT_AWAY) && I.parent_organ == target_zone) - LAZYDISTINCTADD(attached_organs, organ) - if(!LAZYLEN(attached_organs)) - to_chat(user, SPAN_WARNING("You can't find any organs to separate.")) - else - var/obj/item/organ/organ_to_remove = attached_organs[1] - if(attached_organs.len > 1) - organ_to_remove = input(user, "Which organ do you want to separate?") as null|anything in attached_organs - if(organ_to_remove) - return organ_to_remove - return FALSE - -/decl/surgery_step/internal/detatch_organ/begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - user.visible_message("[user] starts to separate [target]'s [LAZYACCESS(target.surgeries_in_progress, target_zone)] with \the [tool].", \ - "You start to separate [target]'s [LAZYACCESS(target.surgeries_in_progress, target_zone)] with \the [tool]." ) - target.custom_pain("Someone's ripping out your [LAZYACCESS(target.surgeries_in_progress, target_zone)]!",100) - ..() - -/decl/surgery_step/internal/detatch_organ/end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - user.visible_message("[user] has separated [target]'s [LAZYACCESS(target.surgeries_in_progress, target_zone)] with \the [tool]." , \ - "You have separated [target]'s [LAZYACCESS(target.surgeries_in_progress, target_zone)] with \the [tool].") - - var/obj/item/organ/I = target.internal_organs_by_name[LAZYACCESS(target.surgeries_in_progress, target_zone)] - if(I && istype(I)) - I.cut_away(user) - -/decl/surgery_step/internal/detatch_organ/fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - var/obj/item/organ/external/affected = target.get_organ(target_zone) - user.visible_message("[user]'s hand slips, slicing an artery inside [target]'s [affected.name] with \the [tool]!", \ - "Your hand slips, slicing an artery inside [target]'s [affected.name] with \the [tool]!") - affected.take_external_damage(rand(30,50), 0, (DAMAGE_FLAG_SHARP|DAMAGE_FLAG_EDGE), used_weapon = tool) - -////////////////////////////////////////////////////////////////// -// Organ removal surgery step -////////////////////////////////////////////////////////////////// -/decl/surgery_step/internal/remove_organ - name = "Remove internal organ" - allowed_tools = list( - /obj/item/hemostat = 100, - /obj/item/wirecutters = 75, - /obj/item/material/knife = 75, - /obj/item/material/kitchen/utensil/fork = 20 - ) - min_duration = 60 - max_duration = 80 - -/decl/surgery_step/internal/remove_organ/pre_surgery_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - var/obj/item/organ/external/affected = target.get_organ(target_zone) - if(affected) - var/list/removable_organs - for(var/obj/item/organ/internal/I in affected.implants) - if(I.status & ORGAN_CUT_AWAY) - LAZYDISTINCTADD(removable_organs, I) - if(!LAZYLEN(removable_organs)) - to_chat(user, SPAN_WARNING("You can't find any removable organs.")) - else - var/obj/item/organ/organ_to_remove = removable_organs[1] - if(removable_organs.len > 1) - organ_to_remove = input(user, "Which organ do you want to remove?") as null|anything in removable_organs - if(organ_to_remove) - return organ_to_remove - return FALSE - -/decl/surgery_step/internal/remove_organ/get_skill_reqs(mob/living/user, mob/living/carbon/human/target, obj/item/tool) - var/target_zone = user.zone_sel.selecting - var/obj/item/organ/internal/O = LAZYACCESS(target.surgeries_in_progress, target_zone) - var/obj/item/organ/external/affected = target.get_organ(target_zone) - if(BP_IS_ROBOTIC(O)) - if(BP_IS_ROBOTIC(affected)) - return SURGERY_SKILLS_ROBOTIC - else - return SURGERY_SKILLS_ROBOTIC_ON_MEAT - else - return ..() - -/decl/surgery_step/internal/remove_organ/begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - var/obj/item/organ/external/affected = target.get_organ(target_zone) - user.visible_message("\The [user] starts removing [target]'s [LAZYACCESS(target.surgeries_in_progress, target_zone)] with \the [tool].", \ - "You start removing \the [target]'s [LAZYACCESS(target.surgeries_in_progress, target_zone)] with \the [tool].") - target.custom_pain("The pain in your [affected.name] is living hell!",100,affecting = affected) - ..() - -/decl/surgery_step/internal/remove_organ/end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - user.visible_message("\The [user] has removed \the [target]'s [LAZYACCESS(target.surgeries_in_progress, target_zone)] with \the [tool].", \ - "You have removed \the [target]'s [LAZYACCESS(target.surgeries_in_progress, target_zone)] with \the [tool].") - - // Extract the organ! - var/obj/item/organ/O = LAZYACCESS(target.surgeries_in_progress, target_zone) - var/obj/item/organ/external/affected = target.get_organ(target_zone) - if(istype(O) && istype(affected)) - affected.implants -= O - O.dropInto(target.loc) - if(!BP_IS_ROBOTIC(affected)) - playsound(target.loc, 'sound/effects/squelch1.ogg', 15, 1) - else - playsound(target.loc, 'sound/items/Ratchet.ogg', 50, 1) - if(istype(O, /obj/item/organ/internal/mmi_holder)) - var/obj/item/organ/internal/mmi_holder/brain = O - brain.transfer_and_delete() - - // Just in case somehow the organ we're extracting from an organic is an MMI - if(istype(O, /obj/item/organ/internal/mmi_holder)) - var/obj/item/organ/internal/mmi_holder/brain = O - brain.transfer_and_delete() - -/decl/surgery_step/internal/remove_organ/fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - var/obj/item/organ/external/affected = target.get_organ(target_zone) - user.visible_message("[user]'s hand slips, damaging [target]'s [affected.name] with \the [tool]!", \ - "Your hand slips, damaging [target]'s [affected.name] with \the [tool]!") - affected.take_external_damage(20, used_weapon = tool) - -////////////////////////////////////////////////////////////////// -// Organ inserting surgery step -////////////////////////////////////////////////////////////////// -/decl/surgery_step/internal/replace_organ - name = "Replace internal organ" - allowed_tools = list( - /obj/item/organ/internal = 100 - ) - min_duration = 60 - max_duration = 80 - var/robotic_surgery = FALSE - -/decl/surgery_step/internal/replace_organ/get_skill_reqs(mob/living/user, mob/living/carbon/human/target, obj/item/tool) - var/obj/item/organ/internal/O = tool - var/obj/item/organ/external/affected = target.get_organ(user.zone_sel.selecting) - if(BP_IS_ROBOTIC(O) || istype(O, /obj/item/organ/internal/augment)) - if(BP_IS_ROBOTIC(affected)) - return SURGERY_SKILLS_ROBOTIC - else - return SURGERY_SKILLS_ROBOTIC_ON_MEAT - else - return ..() - -/decl/surgery_step/internal/replace_organ/pre_surgery_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - . = FALSE - var/obj/item/organ/internal/O = tool - var/obj/item/organ/external/affected = target.get_organ(target_zone) - - if ((O.status & ORGAN_CONFIGURE) && O.surgery_configure(user, target, affected, tool, src)) - return - - if(istype(O) && istype(affected)) - if(BP_IS_CRYSTAL(O) && !BP_IS_CRYSTAL(affected)) - to_chat(user, SPAN_WARNING("You cannot install a crystalline organ into a non-crystalline bodypart.")) - else if(!BP_IS_CRYSTAL(O) && BP_IS_CRYSTAL(affected)) - to_chat(user, SPAN_WARNING("You cannot install a non-crystalline organ into a crystalline bodypart.")) - else if(BP_IS_ROBOTIC(affected) && !BP_IS_ROBOTIC(O)) - to_chat(user, SPAN_WARNING("You cannot install a naked organ into a robotic body.")) - else if(!target.species) - CRASH("Target ([target]) of surgery [type] has no species!") - else - var/o_is = (O.gender == PLURAL) ? "are" : "is" - var/o_a = (O.gender == PLURAL) ? "" : "a " - if(O.organ_tag == BP_POSIBRAIN && !target.species.has_organ[BP_POSIBRAIN]) - to_chat(user, SPAN_WARNING("There's no place in [target] to fit \the [O.organ_tag].")) - else if(O.damage > (O.max_damage * 0.75)) - to_chat(user, SPAN_WARNING("\The [O.name] [o_is] in no state to be transplanted.")) - else if(O.w_class > affected.cavity_max_w_class) - to_chat(user, SPAN_WARNING("\The [O.name] [o_is] too big for [affected.cavity_name] cavity!")) - else - var/obj/item/organ/internal/I = target.internal_organs_by_name[O.organ_tag] - if(I && (I.parent_organ == affected.organ_tag)) - to_chat(user, SPAN_WARNING("\The [target] already has [o_a][O.name].")) - else - . = TRUE - -/decl/surgery_step/internal/replace_organ/begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - var/obj/item/organ/external/affected = target.get_organ(target_zone) - user.visible_message("[user] starts [robotic_surgery ? "reinstalling" : "transplanting"] \the [tool] into [target]'s [affected.name].", \ - "You start [robotic_surgery ? "reinstalling" : "transplanting"] \the [tool] into [target]'s [affected.name].") - target.custom_pain("Someone's rooting around in your [affected.name]!",100,affecting = affected) - ..() - -/decl/surgery_step/internal/replace_organ/end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - var/obj/item/organ/external/affected = target.get_organ(target_zone) - user.visible_message("\The [user] has [robotic_surgery ? "reinstalled" : "transplanted"] \the [tool] into [target]'s [affected.name].", \ - "You have [robotic_surgery ? "reinstalled" : "transplanted"] \the [tool] into [target]'s [affected.name].") - var/obj/item/organ/O = tool - if(istype(O) && user.unEquip(O, target)) - affected.implants |= O //move the organ into the patient. The organ is properly reattached in the next step - if(!(O.status & ORGAN_CUT_AWAY)) - log_debug("[user] ([user.ckey]) replaced organ [O], which didn't have ORGAN_CUT_AWAY set, in [target] ([target.ckey])") - O.status |= ORGAN_CUT_AWAY - - playsound(target.loc, 'sound/effects/squelch1.ogg', 15, 1) - -/decl/surgery_step/internal/replace_organ/fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - user.visible_message("[user]'s hand slips, damaging \the [tool]!", \ - "Your hand slips, damaging \the [tool]!") - var/obj/item/organ/internal/I = tool - if(istype(I)) - I.take_internal_damage(rand(3,5)) - -////////////////////////////////////////////////////////////////// -// Organ attachment surgery step -////////////////////////////////////////////////////////////////// -/decl/surgery_step/internal/attach_organ - name = "Attach internal organ" - allowed_tools = list( - /obj/item/FixOVein = 100, - /obj/item/stack/cable_coil = 75, - /obj/item/tape_roll = 50 - ) - min_duration = 100 - max_duration = 120 - surgery_candidate_flags = SURGERY_NO_CRYSTAL | SURGERY_NO_ROBOTIC | SURGERY_NO_STUMP | SURGERY_NEEDS_ENCASEMENT - -/decl/surgery_step/internal/attach_organ/get_skill_reqs(mob/living/user, mob/living/carbon/human/target, obj/item/tool) - var/target_zone = user.zone_sel.selecting - var/obj/item/organ/internal/O = LAZYACCESS(target.surgeries_in_progress, target_zone) - var/obj/item/organ/external/affected = target.get_organ(target_zone) - if(BP_IS_ROBOTIC(O)) - if(BP_IS_ROBOTIC(affected)) - return SURGERY_SKILLS_ROBOTIC - else - return SURGERY_SKILLS_ROBOTIC_ON_MEAT - else - return ..() - -/decl/surgery_step/internal/attach_organ/pre_surgery_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - - var/list/attachable_organs - var/obj/item/organ/external/affected = target.get_organ(target_zone) - - for(var/obj/item/organ/I in affected.implants) - if(I && (I.status & ORGAN_CUT_AWAY)) - LAZYADD(attachable_organs, I) - - if(!LAZYLEN(attachable_organs)) - return FALSE - - var/obj/item/organ/organ_to_replace = input(user, "Which organ do you want to reattach?") as null|anything in attachable_organs - if(!organ_to_replace) - return FALSE - - if(organ_to_replace.parent_organ != affected.organ_tag) - to_chat(user, SPAN_WARNING("You can't find anywhere to attach \the [organ_to_replace] to!")) - return FALSE - - if(istype(organ_to_replace, /obj/item/organ/internal/augment)) - var/obj/item/organ/internal/augment/A = organ_to_replace - if(!(A.augment_flags & AUGMENT_BIOLOGICAL)) - to_chat(user, SPAN_WARNING("\The [A] cannot function within a non-robotic limb.")) - return FALSE - - if(BP_IS_ROBOTIC(organ_to_replace) && target.species.spawn_flags & SPECIES_NO_ROBOTIC_INTERNAL_ORGANS) - user.visible_message("[target]'s biology has rejected the attempts to attach \the [organ_to_replace].") - return FALSE - - var/obj/item/organ/internal/I = target.internal_organs_by_name[organ_to_replace.organ_tag] - if(I && (I.parent_organ == affected.organ_tag)) - to_chat(user, SPAN_WARNING("\The [target] already has \a [organ_to_replace].")) - return FALSE - return organ_to_replace - -/decl/surgery_step/internal/attach_organ/begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - user.visible_message("[user] begins reattaching [target]'s [LAZYACCESS(target.surgeries_in_progress, target_zone)] with \the [tool].", \ - "You start reattaching [target]'s [LAZYACCESS(target.surgeries_in_progress, target_zone)] with \the [tool].") - target.custom_pain("Someone's digging needles into your [LAZYACCESS(target.surgeries_in_progress, target_zone)]!",100) - ..() - -/decl/surgery_step/internal/attach_organ/end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - var/obj/item/organ/I = LAZYACCESS(target.surgeries_in_progress, target_zone) - - user.visible_message("[user] has reattached [target]'s [LAZYACCESS(target.surgeries_in_progress, target_zone)] with \the [tool]." , \ - "You have reattached [target]'s [LAZYACCESS(target.surgeries_in_progress, target_zone)] with \the [tool].") - - var/obj/item/organ/external/affected = target.get_organ(target_zone) - if(istype(I) && I.parent_organ == target_zone && affected && (I in affected.implants)) - I.status &= ~ORGAN_CUT_AWAY //apply fixovein - affected.implants -= I - I.replaced(target, affected) - - if(istype(I, /obj/item/organ/internal/eyes)) - var/obj/item/organ/internal/eyes/E = I - if(!E.is_broken()) - I.owner.eye_blind = 0 - target.disabilities &= ~BLINDED - if(!E.is_bruised()) - I.owner.eye_blurry = 0 - -/decl/surgery_step/internal/attach_organ/fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - var/obj/item/organ/external/affected = target.get_organ(target_zone) - user.visible_message("[user]'s hand slips, damaging the flesh in [target]'s [affected.name] with \the [tool]!", \ - "Your hand slips, damaging the flesh in [target]'s [affected.name] with \the [tool]!") - affected.take_external_damage(20, used_weapon = tool) - -////////////////////////////////////////////////////////////////// -// Peridaxon necrosis treatment surgery step -////////////////////////////////////////////////////////////////// -/decl/surgery_step/internal/treat_necrosis - name = "Treat necrosis" - allowed_tools = list( - /obj/item/reagent_containers/dropper = 100, - /obj/item/reagent_containers/glass/bottle = 75, - /obj/item/reagent_containers/glass/beaker = 75, - /obj/item/reagent_containers/spray = 50, - /obj/item/reagent_containers/glass/bucket = 50, - ) - - can_infect = 0 - blood_level = 0 - - min_duration = 50 - max_duration = 60 - -/decl/surgery_step/internal/treat_necrosis/pre_surgery_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - var/obj/item/reagent_containers/container = tool - if(!istype(container) || !container.reagents.has_reagent(/datum/reagent/peridaxon) || !..()) - return FALSE - var/obj/item/organ/external/affected = target.get_organ(target_zone) - var/list/obj/item/organ/internal/dead_organs = list() - for(var/obj/item/organ/internal/I in target.internal_organs) - if(I && !(I.status & ORGAN_CUT_AWAY) && (I.status & ORGAN_DEAD) && I.parent_organ == affected.organ_tag && !BP_IS_ROBOTIC(I)) - dead_organs |= I - if(!dead_organs.len) - return FALSE - var/obj/item/organ/internal/organ_to_fix = dead_organs[1] - if(dead_organs.len > 1) - organ_to_fix = input(user, "Which organ do you want to regenerate?") as null|anything in dead_organs - if(!organ_to_fix) - return FALSE - if(!organ_to_fix.can_recover()) - to_chat(user, SPAN_WARNING("The [organ_to_fix.name] is necrotic and can't be saved, it will need to be replaced.")) - return FALSE - if(organ_to_fix.damage >= organ_to_fix.max_damage) - to_chat(user, SPAN_WARNING("The [organ_to_fix.name] needs to be repaired before it is regenerated.")) - return FALSE - return organ_to_fix - -/decl/surgery_step/internal/treat_necrosis/begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - user.visible_message("[user] starts applying medication to the affected tissue in [target]'s [LAZYACCESS(target.surgeries_in_progress, target_zone)] with \the [tool]." , \ - "You start applying medication to the affected tissue in [target]'s [LAZYACCESS(target.surgeries_in_progress, target_zone)] with \the [tool].") - target.custom_pain("Something in your [LAZYACCESS(target.surgeries_in_progress, target_zone)] is causing you a lot of pain!",50, affecting = LAZYACCESS(target.surgeries_in_progress, target_zone)) - ..() - -/decl/surgery_step/internal/treat_necrosis/end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - var/obj/item/organ/internal/affected = LAZYACCESS(target.surgeries_in_progress, target_zone) - var/obj/item/reagent_containers/container = tool - - var/amount = container.amount_per_transfer_from_this - var/datum/reagents/temp_reagents = new(amount, GLOB.temp_reagents_holder) - container.reagents.trans_to_holder(temp_reagents, amount) - - var/rejuvenate = temp_reagents.has_reagent(/datum/reagent/peridaxon) - - var/trans = temp_reagents.trans_to_mob(target, temp_reagents.total_volume, CHEM_BLOOD) //technically it's contact, but the reagents are being applied to internal tissue - if (trans > 0) - - if(rejuvenate) - affected.status &= ~ORGAN_DEAD - affected.owner.update_body(1) - - user.visible_message("[user] applies [trans] unit\s of the solution to affected tissue in [target]'s [affected.name].", \ - "You apply [trans] unit\s of the solution to affected tissue in [target]'s [affected.name] with \the [tool].") - qdel(temp_reagents) - -/decl/surgery_step/internal/treat_necrosis/fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - var/obj/item/organ/external/affected = target.get_organ(target_zone) - - if (!istype(tool, /obj/item/reagent_containers)) - return - - var/obj/item/reagent_containers/container = tool - - var/trans = container.reagents.trans_to_mob(target, container.amount_per_transfer_from_this, CHEM_BLOOD) - - user.visible_message("[user]'s hand slips, applying [trans] units of the solution to the wrong place in [target]'s [affected.name] with the [tool]!" , \ - "Your hand slips, applying [trans] units of the solution to the wrong place in [target]'s [affected.name] with the [tool]!") - - //no damage or anything, just wastes medicine diff --git a/code/modules/surgery/other.dm b/code/modules/surgery/other.dm deleted file mode 100644 index 3e48dc0599a19..0000000000000 --- a/code/modules/surgery/other.dm +++ /dev/null @@ -1,225 +0,0 @@ -//Procedures in this file: Internal wound patching, Implant removal. -////////////////////////////////////////////////////////////////// -// INTERNAL WOUND PATCHING // -////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////// -// Tendon fix surgery step -////////////////////////////////////////////////////////////////// -/decl/surgery_step/fix_tendon - name = "Repair tendon" - allowed_tools = list( - /obj/item/FixOVein = 100, - /obj/item/stack/cable_coil = 75, - /obj/item/tape_roll = 50 - ) - can_infect = 1 - blood_level = 1 - min_duration = 70 - max_duration = 90 - shock_level = 40 - delicate = 1 - surgery_candidate_flags = SURGERY_NO_CRYSTAL | SURGERY_NO_ROBOTIC | SURGERY_NO_STUMP | SURGERY_NEEDS_RETRACTED - -/decl/surgery_step/fix_tendon/assess_bodypart(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - var/obj/item/organ/external/affected = ..() - if(affected && (affected.status & ORGAN_TENDON_CUT)) - return affected - -/decl/surgery_step/fix_tendon/begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - var/obj/item/organ/external/affected = target.get_organ(target_zone) - user.visible_message("[user] starts reattaching the damaged [affected.tendon_name] in [target]'s [affected.name] with \the [tool]." , \ - "You start reattaching the damaged [affected.tendon_name] in [target]'s [affected.name] with \the [tool].") - target.custom_pain("The pain in your [affected.name] is unbearable!",100,affecting = affected) - ..() - -/decl/surgery_step/fix_tendon/end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - var/obj/item/organ/external/affected = target.get_organ(target_zone) - user.visible_message("[user] has reattached the [affected.tendon_name] in [target]'s [affected.name] with \the [tool].", \ - "You have reattached the [affected.tendon_name] in [target]'s [affected.name] with \the [tool].") - affected.status &= ~ORGAN_TENDON_CUT - affected.update_damages() - -/decl/surgery_step/fix_tendon/fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - var/obj/item/organ/external/affected = target.get_organ(target_zone) - user.visible_message("[user]'s hand slips, smearing [tool] in the incision in [target]'s [affected.name]!" , \ - "Your hand slips, smearing [tool] in the incision in [target]'s [affected.name]!") - affected.take_external_damage(5, used_weapon = tool) - -////////////////////////////////////////////////////////////////// -// IB fix surgery step -////////////////////////////////////////////////////////////////// -/decl/surgery_step/fix_vein - name = "Repair arterial bleeding" - allowed_tools = list( - /obj/item/FixOVein = 100, - /obj/item/stack/cable_coil = 75, - /obj/item/tape_roll = 50 - ) - can_infect = 1 - blood_level = 1 - min_duration = 70 - max_duration = 90 - shock_level = 40 - delicate = 1 - strict_access_requirement = FALSE - surgery_candidate_flags = SURGERY_NO_CRYSTAL | SURGERY_NO_ROBOTIC | SURGERY_NO_STUMP | SURGERY_NEEDS_RETRACTED - -/decl/surgery_step/fix_vein/assess_bodypart(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - var/obj/item/organ/external/affected = ..() - if(affected && (affected.status & ORGAN_ARTERY_CUT)) - return affected - -/decl/surgery_step/fix_vein/begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - var/obj/item/organ/external/affected = target.get_organ(target_zone) - user.visible_message("[user] starts patching the damaged [affected.artery_name] in [target]'s [affected.name] with \the [tool]." , \ - "You start patching the damaged [affected.artery_name] in [target]'s [affected.name] with \the [tool].") - target.custom_pain("The pain in your [affected.name] is unbearable!",100,affecting = affected) - ..() - -/decl/surgery_step/fix_vein/end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - var/obj/item/organ/external/affected = target.get_organ(target_zone) - user.visible_message("[user] has patched the [affected.artery_name] in [target]'s [affected.name] with \the [tool].", \ - "You have patched the [affected.artery_name] in [target]'s [affected.name] with \the [tool].") - affected.status &= ~ORGAN_ARTERY_CUT - affected.update_damages() - -/decl/surgery_step/fix_vein/fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - var/obj/item/organ/external/affected = target.get_organ(target_zone) - user.visible_message("[user]'s hand slips, smearing [tool] in the incision in [target]'s [affected.name]!" , \ - "Your hand slips, smearing [tool] in the incision in [target]'s [affected.name]!") - affected.take_external_damage(5, used_weapon = tool) - - -////////////////////////////////////////////////////////////////// -// Hardsuit removal surgery step -////////////////////////////////////////////////////////////////// -/decl/surgery_step/hardsuit - name = "Remove hardsuit" - allowed_tools = list( - /obj/item/weldingtool = 80, - /obj/item/circular_saw = 60, - /obj/item/psychic_power/psiblade/master/grand/paramount = 100, - /obj/item/psychic_power/psiblade = 75, - /obj/item/gun/energy/plasmacutter = 30 - ) - can_infect = 0 - blood_level = 0 - min_duration = 120 - max_duration = 180 - surgery_candidate_flags = 0 - -/decl/surgery_step/hardsuit/assess_bodypart(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - return TRUE - -/decl/surgery_step/hardsuit/get_skill_reqs(mob/living/user, mob/living/carbon/human/target, obj/item/tool) - return list(SKILL_EVA = SKILL_BASIC) - -/decl/surgery_step/hardsuit/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - if(!istype(target)) - return FALSE - if(isWelder(tool)) - var/obj/item/weldingtool/welder = tool - if(!welder.isOn() || !welder.remove_fuel(1,user)) - return FALSE - return (target_zone == BP_CHEST) && istype(target.back, /obj/item/rig) && !(target.back.canremove) - -/decl/surgery_step/hardsuit/begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - user.visible_message("[user] starts cutting through the support systems of [target]'s [target.back] with \the [tool]." , \ - "You start cutting through the support systems of [target]'s [target.back] with \the [tool].") - ..() - -/decl/surgery_step/hardsuit/end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - - var/obj/item/rig/rig = target.back - if(!istype(rig)) - return - rig.reset() - user.visible_message("[user] has cut through the support systems of [target]'s [rig] with \the [tool].", \ - "You have cut through the support systems of [target]'s [rig] with \the [tool].") - -/decl/surgery_step/hardsuit/fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - user.visible_message("[user]'s [tool] can't quite seem to get through the metal...", \ - "Your [tool] can't quite seem to get through the metal. It's weakening, though - try again.") - - -////////////////////////////////////////////////////////////////// -// Disinfection step -////////////////////////////////////////////////////////////////// -/decl/surgery_step/sterilize - name = "Sterilize wound" - allowed_tools = list( - /obj/item/reagent_containers/spray = 100, - /obj/item/reagent_containers/dropper = 100, - /obj/item/reagent_containers/glass/bottle = 90, - /obj/item/reagent_containers/food/drinks/flask = 90, - /obj/item/reagent_containers/glass/beaker = 75, - /obj/item/reagent_containers/food/drinks/bottle = 75, - /obj/item/reagent_containers/food/drinks/glass2 = 75, - /obj/item/reagent_containers/glass/bucket = 50 - ) - can_infect = 0 - blood_level = 0 - min_duration = 50 - max_duration = 60 - -/decl/surgery_step/sterilize/assess_bodypart(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - var/obj/item/organ/external/affected = ..() - if(affected && !affected.is_disinfected() && check_chemicals(tool)) - return affected - -/decl/surgery_step/sterilize/get_skill_reqs(mob/living/user, mob/living/carbon/human/target, obj/item/tool) - return list(SKILL_MEDICAL = SKILL_BASIC) - -/decl/surgery_step/sterilize/begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - var/obj/item/organ/external/affected = target.get_organ(target_zone) - user.visible_message("[user] starts pouring [tool]'s contents on \the [target]'s [affected.name]." , \ - "You start pouring [tool]'s contents on \the [target]'s [affected.name].") - target.custom_pain("Your [affected.name] is on fire!",50,affecting = affected) - ..() - -/decl/surgery_step/sterilize/end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - var/obj/item/organ/external/affected = target.get_organ(target_zone) - - if (!istype(tool, /obj/item/reagent_containers)) - return - - var/obj/item/reagent_containers/container = tool - - var/amount = container.amount_per_transfer_from_this - var/temp_holder = new/obj() - var/datum/reagents/temp_reagents = new(amount, temp_holder) - container.reagents.trans_to_holder(temp_reagents, amount) - - var/trans = temp_reagents.trans_to_mob(target, temp_reagents.total_volume, CHEM_BLOOD) //technically it's contact, but the reagents are being applied to internal tissue - if (trans > 0) - user.visible_message("[user] rubs [target]'s [affected.name] down with \the [tool]'s contents.", \ - "You rub [target]'s [affected.name] down with \the [tool]'s contents.") - affected.disinfect() - qdel(temp_reagents) - qdel(temp_holder) - -/decl/surgery_step/sterilize/fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - var/obj/item/organ/external/affected = target.get_organ(target_zone) - - if (!istype(tool, /obj/item/reagent_containers)) - return - - var/obj/item/reagent_containers/container = tool - - container.reagents.trans_to_mob(target, container.amount_per_transfer_from_this, CHEM_BLOOD) - - user.visible_message("[user]'s hand slips, spilling \the [tool]'s contents over the [target]'s [affected.name]!" , \ - "Your hand slips, spilling \the [tool]'s contents over the [target]'s [affected.name]!") - affected.disinfect() - -/decl/surgery_step/sterilize/proc/check_chemicals(var/obj/item/reagent_containers/container) - if(istype(container) && container.is_open_container()) - if(container.reagents.has_reagent(/datum/reagent/sterilizine)) - return TRUE - else - var/datum/reagent/ethanol/booze = locate() in container.reagents.reagent_list - if(istype(booze)) - if(booze.strength <= 40) - return TRUE - return FALSE \ No newline at end of file diff --git a/code/modules/surgery/robotics.dm b/code/modules/surgery/robotics.dm deleted file mode 100644 index a4ca1aedd2c72..0000000000000 --- a/code/modules/surgery/robotics.dm +++ /dev/null @@ -1,604 +0,0 @@ -//Procedures in this file: Robotic surgery steps, organ removal, replacement. MMI insertion, synthetic organ repair. -////////////////////////////////////////////////////////////////// -// ROBOTIC SURGERY // -////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////// -// generic robotic surgery step datum -////////////////////////////////////////////////////////////////// -/decl/surgery_step/robotics - can_infect = 0 - surgery_candidate_flags = SURGERY_NO_CRYSTAL | SURGERY_NO_FLESH | SURGERY_NO_STUMP - -/decl/surgery_step/robotics/get_skill_reqs(mob/living/user, mob/living/carbon/human/target, obj/item/tool) - return SURGERY_SKILLS_ROBOTIC - -/decl/surgery_step/robotics/assess_bodypart(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - var/obj/item/organ/external/affected = ..() - if(affected && !(affected.status & ORGAN_CUT_AWAY)) - return affected - -/decl/surgery_step/robotics/success_chance(mob/living/user, mob/living/carbon/human/target, obj/item/tool) - . = ..() - //Compensating for anatomy skill req in base proc - . += 10 - if(!user.skill_check(SKILL_DEVICES, SKILL_ADEPT)) - . -= 20 - if(user.skill_check(SKILL_ELECTRICAL, SKILL_BASIC)) - . += 10 - if(user.skill_check(SKILL_DEVICES, SKILL_PROF)) - . += 20 - -////////////////////////////////////////////////////////////////// -// unscrew robotic limb hatch surgery step -////////////////////////////////////////////////////////////////// -/decl/surgery_step/robotics/unscrew_hatch - name = "Unscrew maintenance hatch" - allowed_tools = list( - /obj/item/screwdriver = 100, - /obj/item/material/coin = 50, - /obj/item/material/knife = 50 - ) - min_duration = 90 - max_duration = 110 - -/decl/surgery_step/robotics/unscrew_hatch/assess_bodypart(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - var/obj/item/organ/external/affected = ..() - if(affected && affected.hatch_state == HATCH_CLOSED) - return affected - -/decl/surgery_step/robotics/unscrew_hatch/begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - var/obj/item/organ/external/affected = target.get_organ(target_zone) - user.visible_message("[user] starts to unscrew the maintenance hatch on [target]'s [affected.name] with \the [tool].", \ - "You start to unscrew the maintenance hatch on [target]'s [affected.name] with \the [tool].") - ..() - -/decl/surgery_step/robotics/unscrew_hatch/end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - var/obj/item/organ/external/affected = target.get_organ(target_zone) - user.visible_message("[user] has opened the maintenance hatch on [target]'s [affected.name] with \the [tool].", \ - "You have opened the maintenance hatch on [target]'s [affected.name] with \the [tool].",) - affected.hatch_state = HATCH_UNSCREWED - -/decl/surgery_step/robotics/unscrew_hatch/fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - var/obj/item/organ/external/affected = target.get_organ(target_zone) - user.visible_message("\The [user]'s [tool.name] slips, failing to unscrew \the [target]'s [affected.name].", \ - "Your [tool.name] slips, failing to unscrew [target]'s [affected.name].") - -////////////////////////////////////////////////////////////////// -// screw robotic limb hatch surgery step -////////////////////////////////////////////////////////////////// -/decl/surgery_step/robotics/screw_hatch - name = "Secure maintenance hatch" - allowed_tools = list( - /obj/item/screwdriver = 100, - /obj/item/material/coin = 50, - /obj/item/material/knife = 50 - ) - min_duration = 90 - max_duration = 110 - -/decl/surgery_step/robotics/screw_hatch/assess_bodypart(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - var/obj/item/organ/external/affected = ..() - if(affected && affected.hatch_state == HATCH_UNSCREWED) - return affected - -/decl/surgery_step/robotics/screw_hatch/begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - var/obj/item/organ/external/affected = target.get_organ(target_zone) - user.visible_message("[user] starts to screw down the maintenance hatch on [target]'s [affected.name] with \the [tool].", \ - "You start to screw down the maintenance hatch on [target]'s [affected.name] with \the [tool].") - ..() - -/decl/surgery_step/robotics/screw_hatch/end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - var/obj/item/organ/external/affected = target.get_organ(target_zone) - user.visible_message("[user] has screwed down the maintenance hatch on [target]'s [affected.name] with \the [tool].", \ - "You have screwed down the maintenance hatch on [target]'s [affected.name] with \the [tool].",) - affected.hatch_state = HATCH_CLOSED - -/decl/surgery_step/robotics/screw_hatch/fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - var/obj/item/organ/external/affected = target.get_organ(target_zone) - user.visible_message("[user]'s [tool.name] slips, failing to screw down [target]'s [affected.name].", \ - "Your [tool] slips, failing to screw down [target]'s [affected.name].") - -////////////////////////////////////////////////////////////////// -// open robotic limb surgery step -////////////////////////////////////////////////////////////////// -/decl/surgery_step/robotics/open_hatch - name = "Open maintenance hatch" - allowed_tools = list( - /obj/item/retractor = 100, - /obj/item/crowbar = 100, - /obj/item/material/kitchen/utensil = 50 - ) - - min_duration = 30 - max_duration = 40 - -/decl/surgery_step/robotics/open_hatch/assess_bodypart(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - var/obj/item/organ/external/affected = ..() - if(affected && affected.hatch_state == HATCH_UNSCREWED) - return affected - -/decl/surgery_step/robotics/open_hatch/begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - var/obj/item/organ/external/affected = target.get_organ(target_zone) - user.visible_message("[user] starts to pry open the maintenance hatch on [target]'s [affected.name] with \the [tool].", - "You start to pry open the maintenance hatch on [target]'s [affected.name] with \the [tool].") - ..() - -/decl/surgery_step/robotics/open_hatch/end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - var/obj/item/organ/external/affected = target.get_organ(target_zone) - user.visible_message("[user] opens the maintenance hatch on [target]'s [affected.name] with \the [tool].", \ - "You open the maintenance hatch on [target]'s [affected.name] with \the [tool].") - affected.hatch_state = HATCH_OPENED - -/decl/surgery_step/robotics/open_hatch/fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - var/obj/item/organ/external/affected = target.get_organ(target_zone) - user.visible_message("[user]'s [tool.name] slips, failing to open the hatch on [target]'s [affected.name].", - "Your [tool] slips, failing to open the hatch on [target]'s [affected.name].") - -////////////////////////////////////////////////////////////////// -// close robotic limb surgery step -////////////////////////////////////////////////////////////////// -/decl/surgery_step/robotics/close_hatch - name = "Close maintenance hatch" - allowed_tools = list( - /obj/item/retractor = 100, - /obj/item/crowbar = 100, - /obj/item/material/kitchen/utensil = 50 - ) - - min_duration = 70 - max_duration = 100 - -/decl/surgery_step/robotics/close_hatch/assess_bodypart(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - var/obj/item/organ/external/affected = ..() - if(affected && affected.hatch_state == HATCH_OPENED) - return affected - -/decl/surgery_step/robotics/close_hatch/begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - var/obj/item/organ/external/affected = target.get_organ(target_zone) - user.visible_message("[user] begins to close the hatch on [target]'s [affected.name] with \the [tool]." , \ - "You begin to close the hatch on [target]'s [affected.name] with \the [tool].") - ..() - -/decl/surgery_step/robotics/close_hatch/end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - var/obj/item/organ/external/affected = target.get_organ(target_zone) - user.visible_message("[user] closes the hatch on [target]'s [affected.name] with \the [tool].", \ - "You close the hatch on [target]'s [affected.name] with \the [tool].") - affected.hatch_state = HATCH_UNSCREWED - affected.germ_level = 0 - -/decl/surgery_step/robotics/close_hatch/fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - var/obj/item/organ/external/affected = target.get_organ(target_zone) - user.visible_message("[user]'s [tool.name] slips, failing to close the hatch on [target]'s [affected.name].", - "Your [tool.name] slips, failing to close the hatch on [target]'s [affected.name].") - -////////////////////////////////////////////////////////////////// -// robotic limb brute damage repair surgery step -////////////////////////////////////////////////////////////////// -/decl/surgery_step/robotics/repair_brute - name = "Repair damage to prosthetic" - allowed_tools = list( - /obj/item/weldingtool = 100, - /obj/item/gun/energy/plasmacutter = 50, - /obj/item/psychic_power/psiblade/master = 100 - ) - - min_duration = 50 - max_duration = 60 - -/decl/surgery_step/robotics/repair_brute/success_chance(mob/living/user, mob/living/carbon/human/target, obj/item/tool) - . = ..() - if(user.skill_check(SKILL_CONSTRUCTION, SKILL_BASIC)) - . += 10 - -/decl/surgery_step/robotics/repair_brute/pre_surgery_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - var/obj/item/organ/external/affected = target.get_organ(target_zone) - if(affected) - if(!affected.brute_dam) - to_chat(user, SPAN_WARNING("There is no damage to repair.")) - return FALSE - if(BP_IS_BRITTLE(affected)) - to_chat(user, SPAN_WARNING("\The [target]'s [affected.name] is too brittle to be repaired normally.")) - return FALSE - if(isWelder(tool)) - var/obj/item/weldingtool/welder = tool - if(!welder.isOn() || !welder.remove_fuel(1,user)) - return FALSE - if(istype(tool, /obj/item/gun/energy/plasmacutter)) - var/obj/item/gun/energy/plasmacutter/cutter = tool - if(!cutter.slice(user)) - return FALSE - return TRUE - return FALSE - -/decl/surgery_step/robotics/repair_brute/assess_bodypart(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - var/obj/item/organ/external/affected = ..() - if(affected && affected.hatch_state == HATCH_OPENED && ((affected.status & ORGAN_DISFIGURED) || affected.brute_dam > 0)) - return affected - -/decl/surgery_step/robotics/repair_brute/begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - var/obj/item/organ/external/affected = target.get_organ(target_zone) - user.visible_message("[user] begins to patch damage to [target]'s [affected.name]'s support structure with \the [tool]." , \ - "You begin to patch damage to [target]'s [affected.name]'s support structure with \the [tool].") - ..() - -/decl/surgery_step/robotics/repair_brute/end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - var/obj/item/organ/external/affected = target.get_organ(target_zone) - user.visible_message("[user] finishes patching damage to [target]'s [affected.name] with \the [tool].", \ - "You finish patching damage to [target]'s [affected.name] with \the [tool].") - affected.heal_damage(rand(30,50),0,1,1) - affected.status &= ~ORGAN_DISFIGURED - -/decl/surgery_step/robotics/repair_brute/fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - var/obj/item/organ/external/affected = target.get_organ(target_zone) - user.visible_message("[user]'s [tool.name] slips, damaging the internal structure of [target]'s [affected.name].", - "Your [tool.name] slips, damaging the internal structure of [target]'s [affected.name].") - target.apply_damage(rand(5,10), DAMAGE_BURN, affected) - -////////////////////////////////////////////////////////////////// -// robotic limb brittleness repair surgery step -////////////////////////////////////////////////////////////////// -/decl/surgery_step/robotics/repair_brittle - name = "Reinforce prosthetic" - allowed_tools = list(/obj/item/stack/nanopaste = 100) - min_duration = 50 - max_duration = 60 - -/decl/surgery_step/robotics/repair_brittle/success_chance(mob/living/user, mob/living/carbon/human/target, obj/item/tool) - . = ..() - if(user.skill_check(SKILL_ELECTRICAL, SKILL_BASIC)) - . += 10 - -/decl/surgery_step/robotics/repair_brittle/assess_bodypart(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - var/obj/item/organ/external/affected = ..() - if(affected && BP_IS_BRITTLE(affected) && affected.hatch_state == HATCH_OPENED) - return affected - -/decl/surgery_step/robotics/repair_brittle/begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - var/obj/item/organ/external/affected = target.get_organ(target_zone) - user.visible_message("[user] begins to repair the brittle metal inside \the [target]'s [affected.name]." , \ - "You begin to repair the brittle metal inside \the [target]'s [affected.name].") - ..() - -/decl/surgery_step/robotics/repair_brittle/end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - var/obj/item/organ/external/affected = target.get_organ(target_zone) - user.visible_message("[user] finishes repairing the brittle interior of \the [target]'s [affected.name].", \ - "You finish repairing the brittle interior of \the [target]'s [affected.name].") - affected.status &= ~ORGAN_BRITTLE - -/decl/surgery_step/robotics/repair_brittle/fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - var/obj/item/organ/external/affected = target.get_organ(target_zone) - user.visible_message("[user] causes some of \the [target]'s [affected.name] to crumble!", - "You cause some of \the [target]'s [affected.name] to crumble!") - target.apply_damage(rand(5,10), DAMAGE_BRUTE, affected) - -////////////////////////////////////////////////////////////////// -// robotic limb burn damage repair surgery step -////////////////////////////////////////////////////////////////// -/decl/surgery_step/robotics/repair_burn - name = "Repair burns on prosthetic" - allowed_tools = list( - /obj/item/stack/cable_coil = 100 - ) - min_duration = 50 - max_duration = 60 - -/decl/surgery_step/robotics/repair_burn/success_chance(mob/living/user, mob/living/carbon/human/target, obj/item/tool) - . = ..() - - if(user.skill_check(SKILL_ELECTRICAL, SKILL_BASIC)) - . += 10 - -/decl/surgery_step/robotics/repair_burn/pre_surgery_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - var/obj/item/organ/external/affected = target.get_organ(target_zone) - if(affected) - if(!affected.burn_dam) - to_chat(user, SPAN_WARNING("There is no damage to repair.")) - return FALSE - if(BP_IS_BRITTLE(affected)) - to_chat(user, SPAN_WARNING("\The [target]'s [affected.name] is too brittle for this kind of repair.")) - else - var/obj/item/stack/cable_coil/C = tool - if(istype(C)) - if(!C.use(3)) - to_chat(user, SPAN_WARNING("You need three or more cable pieces to repair this damage.")) - else - return TRUE - return FALSE - -/decl/surgery_step/robotics/repair_burn/assess_bodypart(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - var/obj/item/organ/external/affected = ..() - if(affected && affected.hatch_state == HATCH_OPENED && ((affected.status & ORGAN_DISFIGURED) || affected.burn_dam > 0)) - return affected - -/decl/surgery_step/robotics/repair_burn/begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - var/obj/item/organ/external/affected = target.get_organ(target_zone) - user.visible_message("[user] begins to splice new cabling into [target]'s [affected.name]." , \ - "You begin to splice new cabling into [target]'s [affected.name].") - ..() - -/decl/surgery_step/robotics/repair_burn/end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - var/obj/item/organ/external/affected = target.get_organ(target_zone) - user.visible_message("[user] finishes splicing cable into [target]'s [affected.name].", \ - "You finishes splicing new cable into [target]'s [affected.name].") - affected.heal_damage(0,rand(30,50),1,1) - affected.status &= ~ORGAN_DISFIGURED - -/decl/surgery_step/robotics/repair_burn/fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - var/obj/item/organ/external/affected = target.get_organ(target_zone) - user.visible_message("[user] causes a short circuit in [target]'s [affected.name]!", - "You cause a short circuit in [target]'s [affected.name]!") - target.apply_damage(rand(5,10), DAMAGE_BURN, affected) - -////////////////////////////////////////////////////////////////// -// artificial organ repair surgery step -////////////////////////////////////////////////////////////////// -/decl/surgery_step/robotics/fix_organ_robotic //For artificial organs - name = "Repair prosthetic organ" - allowed_tools = list( - /obj/item/stack/nanopaste = 100, - /obj/item/bonegel = 30, - /obj/item/screwdriver = 70, - ) - min_duration = 70 - max_duration = 90 - surgery_candidate_flags = SURGERY_NO_STUMP - -/decl/surgery_step/robotics/fix_organ_robotic/get_skill_reqs(mob/living/user, mob/living/carbon/human/target, obj/item/tool) - if(target.isSynthetic()) - return SURGERY_SKILLS_ROBOTIC - else - return SURGERY_SKILLS_ROBOTIC_ON_MEAT - -/decl/surgery_step/robotics/fix_organ_robotic/assess_bodypart(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - var/obj/item/organ/external/affected = ..() - if(affected) - for(var/obj/item/organ/internal/I in affected.internal_organs) - if(BP_IS_ROBOTIC(I) && !BP_IS_CRYSTAL(I) && I.damage > 0) - if(I.surface_accessible) - return affected - if(affected.how_open() >= (affected.encased ? SURGERY_ENCASED : SURGERY_RETRACTED) || affected.hatch_state == HATCH_OPENED) - return affected - -/decl/surgery_step/robotics/fix_organ_robotic/begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - var/obj/item/organ/external/affected = target.get_organ(target_zone) - for(var/obj/item/organ/I in affected.internal_organs) - if(I && I.damage > 0) - if(BP_IS_ROBOTIC(I)) - user.visible_message("[user] starts mending the damage to [target]'s [I.name]'s mechanisms.", \ - "You start mending the damage to [target]'s [I.name]'s mechanisms." ) - ..() - -/decl/surgery_step/robotics/fix_organ_robotic/end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - var/obj/item/organ/external/affected = target.get_organ(target_zone) - for(var/obj/item/organ/I in affected.internal_organs) - if(I && I.damage > 0) - if(BP_IS_ROBOTIC(I)) - user.visible_message("[user] repairs [target]'s [I.name] with [tool].", \ - "You repair [target]'s [I.name] with [tool]." ) - I.damage = 0 - -/decl/surgery_step/robotics/fix_organ_robotic/fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - var/obj/item/organ/external/affected = target.get_organ(target_zone) - user.visible_message("[user]'s hand slips, gumming up the mechanisms inside of [target]'s [affected.name] with \the [tool]!", \ - "Your hand slips, gumming up the mechanisms inside of [target]'s [affected.name] with \the [tool]!") - target.adjustToxLoss(5) - affected.createwound(INJURY_TYPE_CUT, 5) - for(var/internal in affected.internal_organs) - var/obj/item/organ/internal/I = internal - if(I) - I.take_internal_damage(rand(3,5)) - -////////////////////////////////////////////////////////////////// -// robotic organ detachment surgery step -////////////////////////////////////////////////////////////////// -/decl/surgery_step/robotics/detatch_organ_robotic - name = "Decouple prosthetic organ" - allowed_tools = list( - /obj/item/device/multitool = 100 - ) - min_duration = 90 - max_duration = 110 - surgery_candidate_flags = SURGERY_NO_CRYSTAL | SURGERY_NO_FLESH | SURGERY_NO_STUMP | SURGERY_NEEDS_ENCASEMENT - -/decl/surgery_step/robotics/detatch_organ_robotic/pre_surgery_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - var/list/attached_organs - for(var/organ in target.internal_organs_by_name) - var/obj/item/organ/I = target.internal_organs_by_name[organ] - if(I && !(I.status & ORGAN_CUT_AWAY) && !BP_IS_CRYSTAL(I) && I.parent_organ == target_zone) - LAZYADD(attached_organs, organ) - if(!LAZYLEN(attached_organs)) - to_chat(user, SPAN_WARNING("There are no appropriate internal components to decouple.")) - return FALSE - var/organ_to_remove = input(user, "Which organ do you want to prepare for removal?") as null|anything in attached_organs - if(organ_to_remove) - return organ_to_remove - -/decl/surgery_step/robotics/detatch_organ_robotic/begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - user.visible_message("[user] starts to decouple [target]'s [LAZYACCESS(target.surgeries_in_progress, target_zone)] with \the [tool].", \ - "You start to decouple [target]'s [LAZYACCESS(target.surgeries_in_progress, target_zone)] with \the [tool]." ) - ..() - -/decl/surgery_step/robotics/detatch_organ_robotic/end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - user.visible_message("[user] has decoupled [target]'s [LAZYACCESS(target.surgeries_in_progress, target_zone)] with \the [tool]." , \ - "You have decoupled [target]'s [LAZYACCESS(target.surgeries_in_progress, target_zone)] with \the [tool].") - - var/obj/item/organ/internal/I = target.internal_organs_by_name[LAZYACCESS(target.surgeries_in_progress, target_zone)] - if(I && istype(I)) - I.cut_away(user) - -/decl/surgery_step/robotics/detatch_organ_robotic/fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - user.visible_message("[user]'s hand slips, disconnecting \the [tool].", \ - "Your hand slips, disconnecting \the [tool].") - -////////////////////////////////////////////////////////////////// -// robotic organ transplant finalization surgery step -////////////////////////////////////////////////////////////////// -/decl/surgery_step/robotics/attach_organ_robotic - name = "Reattach prosthetic organ" - allowed_tools = list( - /obj/item/screwdriver = 100, - ) - min_duration = 100 - max_duration = 120 - surgery_candidate_flags = SURGERY_NO_CRYSTAL | SURGERY_NO_FLESH | SURGERY_NO_STUMP | SURGERY_NEEDS_ENCASEMENT - -/decl/surgery_step/robotics/attach_organ_robotic/pre_surgery_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - var/list/removable_organs = list() - var/obj/item/organ/external/affected = target.get_organ(target_zone) - for(var/obj/item/organ/I in affected.implants) - if ((I.status & ORGAN_CUT_AWAY) && BP_IS_ROBOTIC(I) && !BP_IS_CRYSTAL(I) && (I.parent_organ == target_zone)) - removable_organs |= I.organ_tag - var/organ_to_replace = input(user, "Which organ do you want to reattach?") as null|anything in removable_organs - if(!organ_to_replace) - return FALSE - var/obj/item/organ/internal/augment/A = organ_to_replace - if(istype(A)) - if(!(A.augment_flags & AUGMENT_MECHANICAL)) - to_chat(user, SPAN_WARNING("\the [A] cannot function within a robotic limb")) - return FALSE - return organ_to_replace - -/decl/surgery_step/robotics/attach_organ_robotic/begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - user.visible_message("[user] begins reattaching [target]'s [LAZYACCESS(target.surgeries_in_progress, target_zone)] with \the [tool].", \ - "You start reattaching [target]'s [LAZYACCESS(target.surgeries_in_progress, target_zone)] with \the [tool].") - ..() - -/decl/surgery_step/robotics/attach_organ_robotic/end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - user.visible_message("[user] has reattached [target]'s [LAZYACCESS(target.surgeries_in_progress, target_zone)] with \the [tool]." , \ - "You have reattached [target]'s [LAZYACCESS(target.surgeries_in_progress, target_zone)] with \the [tool].") - - var/current_organ = LAZYACCESS(target.surgeries_in_progress, target_zone) - var/obj/item/organ/external/affected = target.get_organ(target_zone) - for (var/obj/item/organ/I in affected.implants) - if (I.organ_tag == current_organ) - I.status &= ~ORGAN_CUT_AWAY - affected.implants -= I - I.replaced(target, affected) - break - -/decl/surgery_step/robotics/attach_organ_robotic/fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - user.visible_message("[user]'s hand slips, disconnecting \the [tool].", \ - "Your hand slips, disconnecting \the [tool].") - -////////////////////////////////////////////////////////////////// -// mmi installation surgery step -////////////////////////////////////////////////////////////////// -/decl/surgery_step/robotics/install_mmi - name = "Install MMI" - allowed_tools = list( - /obj/item/device/mmi = 100 - ) - min_duration = 60 - max_duration = 80 - surgery_candidate_flags = SURGERY_NO_CRYSTAL | SURGERY_NO_FLESH | SURGERY_NO_STUMP | SURGERY_NEEDS_ENCASEMENT - -/decl/surgery_step/robotics/install_mmi/pre_surgery_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - var/obj/item/device/mmi/M = tool - var/obj/item/organ/external/affected = target.get_organ(target_zone) - if(affected && istype(M)) - if(!M.brainmob || !M.brainmob.client || !M.brainmob.ckey || M.brainmob.stat >= DEAD) - to_chat(user, SPAN_WARNING("That brain is not usable.")) - else if(BP_IS_CRYSTAL(affected)) - to_chat(user, SPAN_WARNING("The crystalline interior of \the [affected] is incompatible with \the [M].")) - else if(!target.isSynthetic()) - to_chat(user, SPAN_WARNING("You cannot install a computer brain into a meat body.")) - else if(!target.should_have_organ(BP_BRAIN)) - to_chat(user, SPAN_WARNING("You're pretty sure [target.species.name_plural] don't normally have a brain.")) - else if(target.internal_organs[BP_BRAIN]) - to_chat(user, SPAN_WARNING("Your subject already has a brain.")) - else - return TRUE - return FALSE - -/decl/surgery_step/robotics/install_mmi/assess_bodypart(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - var/obj/item/organ/external/affected = ..() - if(affected && target_zone == BP_HEAD) - return affected - -/decl/surgery_step/robotics/install_mmi/begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - var/obj/item/organ/external/affected = target.get_organ(target_zone) - user.visible_message("[user] starts installing \the [tool] into [target]'s [affected.name].", \ - "You start installing \the [tool] into [target]'s [affected.name].") - ..() - -/decl/surgery_step/robotics/install_mmi/end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - if(!user.unEquip(tool)) - return - var/obj/item/organ/external/affected = target.get_organ(target_zone) - user.visible_message("[user] has installed \the [tool] into [target]'s [affected.name].", \ - "You have installed \the [tool] into [target]'s [affected.name].") - - var/obj/item/device/mmi/M = tool - var/obj/item/organ/internal/mmi_holder/holder = new(target, 1) - target.internal_organs_by_name[BP_BRAIN] = holder - tool.forceMove(holder) - holder.stored_mmi = tool - holder.update_from_mmi() - - if(M.brainmob && M.brainmob.mind) - M.brainmob.mind.transfer_to(target) - -/decl/surgery_step/robotics/install_mmi/fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - user.visible_message("[user]'s hand slips.", \ - "Your hand slips.") - -/decl/surgery_step/internal/remove_organ/robotic - name = "Remove robotic component" - can_infect = 0 - surgery_candidate_flags = SURGERY_NO_CRYSTAL | SURGERY_NO_FLESH | SURGERY_NO_STUMP | SURGERY_NEEDS_ENCASEMENT - -/decl/surgery_step/internal/replace_organ/robotic - name = "Replace robotic component" - can_infect = 0 - robotic_surgery = TRUE - surgery_candidate_flags = SURGERY_NO_CRYSTAL | SURGERY_NO_FLESH | SURGERY_NO_STUMP | SURGERY_NEEDS_ENCASEMENT - -/decl/surgery_step/remove_mmi - name = "Remove MMI" - min_duration = 60 - max_duration = 80 - allowed_tools = list( - /obj/item/hemostat = 100, - /obj/item/wirecutters = 75, - /obj/item/material/kitchen/utensil/fork = 20 - ) - can_infect = 0 - surgery_candidate_flags = SURGERY_NO_CRYSTAL | SURGERY_NO_FLESH | SURGERY_NO_STUMP | SURGERY_NEEDS_ENCASEMENT - -/decl/surgery_step/remove_mmi/get_skill_reqs(mob/living/user, mob/living/carbon/human/target, obj/item/tool) - return SURGERY_SKILLS_ROBOTIC - -/decl/surgery_step/remove_mmi/assess_bodypart(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - var/obj/item/organ/external/affected = ..() - if(affected && (locate(/obj/item/device/mmi) in affected.implants)) - return affected - -/decl/surgery_step/remove_mmi/begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - var/obj/item/organ/external/affected = target.get_organ(target_zone) - user.visible_message( \ - "\The [user] starts poking around inside [target]'s [affected.name] with \the [tool].", \ - "You start poking around inside [target]'s [affected.name] with \the [tool]." ) - target.custom_pain("The pain in your [affected.name] is living hell!",1,affecting = affected) - ..() - -/decl/surgery_step/remove_mmi/end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - var/obj/item/organ/external/affected = target.get_organ(target_zone) - if(affected) - var/obj/item/device/mmi/mmi = locate() in affected.implants - if(affected && mmi) - user.visible_message( \ - SPAN_NOTICE("\The [user] removes \the [mmi] from \the [target]'s [affected.name] with \the [tool]."), \ - SPAN_NOTICE("You remove \the [mmi] from \the [target]'s [affected.name] with \the [tool].")) - target.remove_implant(mmi, TRUE, affected) - else - user.visible_message( \ - SPAN_NOTICE("\The [user] could not find anything inside [target]'s [affected.name]."), \ - SPAN_NOTICE("You could not find anything inside [target]'s [affected.name].")) - -/decl/surgery_step/remove_mmi/fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - var/obj/item/organ/external/affected = target.get_organ(target_zone) - user.visible_message( \ - SPAN_WARNING("\The [user]'s hand slips, damaging \the [target]'s [affected.name] with \the [tool]!"), \ - SPAN_WARNING("Your hand slips, damaging \the [target]'s [affected.name] with \the [tool]!")) - affected.take_external_damage(3, 0, used_weapon = tool) diff --git a/code/modules/surgery/slimes.dm b/code/modules/surgery/slimes.dm deleted file mode 100644 index 05ec41e008cd6..0000000000000 --- a/code/modules/surgery/slimes.dm +++ /dev/null @@ -1,114 +0,0 @@ -//Procedures in this file: Slime surgery, core extraction. -////////////////////////////////////////////////////////////////// -// SLIME CORE EXTRACTION // -////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////// -// generic slime surgery step datum -////////////////////////////////////////////////////////////////// -/decl/surgery_step/slime - -/decl/surgery_step/slime/is_valid_target(mob/living/carbon/slime/target) - return isslime(target) - -/decl/surgery_step/slime/assess_bodypart(mob/living/user, mob/living/carbon/slime/target, target_zone, obj/item/tool) - return TRUE - -/decl/surgery_step/slime/assess_surgery_candidate(mob/living/user, mob/living/carbon/slime/target, target_zone, obj/item/tool) - return isslime(target) && target.stat == DEAD - -/decl/surgery_step/slime/get_skill_reqs(mob/living/user, mob/living/carbon/human/target, obj/item/tool) - return list(SKILL_SCIENCE = SKILL_ADEPT) - -////////////////////////////////////////////////////////////////// -// slime flesh cutting surgery step -////////////////////////////////////////////////////////////////// -/decl/surgery_step/slime/cut_flesh - name = "Make incision in slime" - allowed_tools = list( - /obj/item/scalpel = 100, - /obj/item/material/knife = 75, - /obj/item/material/shard = 50 - ) - min_duration = 5 - max_duration = 2 SECONDS - -/decl/surgery_step/slime/cut_flesh/can_use(mob/living/user, mob/living/carbon/slime/target, target_zone, obj/item/tool) - return ..() && istype(target) && target.core_removal_stage == 0 - -/decl/surgery_step/slime/cut_flesh/begin_step(mob/user, mob/living/carbon/slime/target, target_zone, obj/item/tool) - user.visible_message("[user] starts cutting through [target]'s flesh with \the [tool].", \ - "You start cutting through [target]'s flesh with \the [tool].") - -/decl/surgery_step/slime/cut_flesh/end_step(mob/living/user, mob/living/carbon/slime/target, target_zone, obj/item/tool) - user.visible_message("[user] cuts through [target]'s flesh with \the [tool].", \ - "You cut through [target]'s flesh with \the [tool], revealing its silky innards.") - target.core_removal_stage = 1 - -/decl/surgery_step/slime/cut_flesh/fail_step(mob/living/user, mob/living/carbon/slime/target, target_zone, obj/item/tool) - user.visible_message("[user]'s hand slips, tearing [target]'s flesh with \the [tool]!", \ - "Your hand slips, tearing [target]'s flesh with \the [tool]!") - -////////////////////////////////////////////////////////////////// -// slime innards cutting surgery step -////////////////////////////////////////////////////////////////// -/decl/surgery_step/slime/cut_innards - name = "Dissect innards" - allowed_tools = list( - /obj/item/scalpel = 100, - /obj/item/material/knife = 75, - /obj/item/material/shard = 50 - ) - min_duration = 5 - max_duration = 2 SECONDS - -/decl/surgery_step/slime/cut_innards/can_use(mob/living/user, mob/living/carbon/slime/target, target_zone, obj/item/tool) - return ..() && istype(target) && target.core_removal_stage == 1 - -/decl/surgery_step/slime/cut_innards/begin_step(mob/user, mob/living/carbon/slime/target, target_zone, obj/item/tool) - user.visible_message("[user] starts cutting [target]'s silky innards apart with \the [tool].", \ - "You start cutting [target]'s silky innards apart with \the [tool].") - -/decl/surgery_step/slime/cut_innards/end_step(mob/living/user, mob/living/carbon/slime/target, target_zone, obj/item/tool) - user.visible_message("[user] cuts [target]'s innards apart with \the [tool], exposing the cores.", \ - "You cut [target]'s innards apart with \the [tool], exposing the cores.") - target.core_removal_stage = 2 - -/decl/surgery_step/slime/cut_innards/fail_step(mob/living/user, mob/living/carbon/slime/target, target_zone, obj/item/tool) - user.visible_message("[user]'s hand slips, tearing [target]'s innards with \the [tool]!", \ - "Your hand slips, tearing [target]'s innards with \the [tool]!") - -////////////////////////////////////////////////////////////////// -// slime core removal surgery step -////////////////////////////////////////////////////////////////// -/decl/surgery_step/slime/saw_core - name = "Remove slime core" - allowed_tools = list( - /obj/item/scalpel/manager = 100, - /obj/item/circular_saw = 100, - /obj/item/material/knife = 75, - /obj/item/material/hatchet = 75 - ) - min_duration = 1 SECOND - max_duration = 3 SECONDS - -/decl/surgery_step/slime/saw_core/can_use(mob/living/user, mob/living/carbon/slime/target, target_zone, obj/item/tool) - return ..() && (istype(target) && target.core_removal_stage == 2 && target.cores > 0) //This is being passed a human as target, unsure why. - -/decl/surgery_step/slime/saw_core/begin_step(mob/user, mob/living/carbon/slime/target, target_zone, obj/item/tool) - user.visible_message("[user] starts cutting out one of [target]'s cores with \the [tool].", \ - "You start cutting out one of [target]'s cores with \the [tool].") - -/decl/surgery_step/slime/saw_core/end_step(mob/living/user, mob/living/carbon/slime/target, target_zone, obj/item/tool) - target.cores-- - user.visible_message("[user] cuts out one of [target]'s cores with \the [tool].",, \ - "You cut out one of [target]'s cores with \the [tool]. [target.cores] cores left.") - if(target.cores >= 0) - var/coreType = target.GetCoreType() - new coreType(target.loc) - if(target.cores <= 0) - target.icon_state = "[target.colour] baby slime dead-nocore" - -/decl/surgery_step/slime/saw_core/fail_step(mob/living/user, mob/living/carbon/slime/target, target_zone, obj/item/tool) - user.visible_message("[user]'s hand slips, causing \him to miss the core!", \ - "Your hand slips, causing you to miss the core!") diff --git a/code/modules/surgery/surgery.dm b/code/modules/surgery/surgery.dm deleted file mode 100644 index fccaba5b49f16..0000000000000 --- a/code/modules/surgery/surgery.dm +++ /dev/null @@ -1,254 +0,0 @@ -// A list of types that will not attempt to perform surgery if the user is on help intent. -GLOBAL_LIST_INIT(surgery_tool_exceptions, list( - /obj/item/auto_cpr, - /obj/item/device/scanner/health, - /obj/item/shockpaddles, - /obj/item/reagent_containers/hypospray, - /obj/item/modular_computer, - /obj/item/reagent_containers/syringe, - /obj/item/reagent_containers/borghypo -)) -GLOBAL_LIST_INIT(surgery_tool_exception_cache, new) - -/* SURGERY STEPS */ -/decl/surgery_step - var/name - var/list/allowed_tools // type path referencing tools that can be used for this step, and how well are they suited for it - var/list/allowed_species // type paths referencing races that this step applies to. - var/list/disallowed_species // type paths referencing races that this step applies to. - var/min_duration = 0 // duration of the step - var/max_duration = 0 // duration of the step - var/can_infect = 0 // evil infection stuff that will make everyone hate me - var/blood_level = 0 // How much blood this step can get on surgeon. 1 - hands, 2 - full body. - var/shock_level = 0 // what shock level will this step put patient on - var/delicate = 0 // if this step NEEDS stable optable or can be done on any valid surface with no penalty - var/surgery_candidate_flags = 0 // Various bitflags for requirements of the surgery. - var/strict_access_requirement = TRUE // Whether or not this surgery will be fuzzy on size requirements. - -//returns how well tool is suited for this step -/decl/surgery_step/proc/tool_quality(obj/item/tool) - for (var/T in allowed_tools) - if (istype(tool,T)) - return allowed_tools[T] - return 0 - -/decl/surgery_step/proc/pre_surgery_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - return TRUE - -// Checks if this step applies to the user mob at all -/decl/surgery_step/proc/is_valid_target(mob/living/carbon/human/target) - if(!ishuman(target)) - return 0 - - if(allowed_species) - for(var/species in allowed_species) - if(target.species.get_bodytype(target) == species) - return 1 - - if(disallowed_species) - for(var/species in disallowed_species) - if(target.species.get_bodytype(target) == species) - return 0 - - return 1 - -/decl/surgery_step/proc/get_skill_reqs(mob/living/user, mob/living/carbon/human/target, obj/item/tool, target_zone) - if(delicate) - return SURGERY_SKILLS_DELICATE - else - return SURGERY_SKILLS_GENERIC - -// checks whether this step can be applied with the given user and target -/decl/surgery_step/proc/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - return assess_bodypart(user, target, target_zone, tool) && assess_surgery_candidate(user, target, target_zone, tool) - -/decl/surgery_step/proc/assess_bodypart(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - if(istype(target) && target_zone) - var/obj/item/organ/external/affected = target.get_organ(target_zone) - if(affected) - // Check various conditional flags. - if(((surgery_candidate_flags & SURGERY_NO_ROBOTIC) && BP_IS_ROBOTIC(affected)) || \ - ((surgery_candidate_flags & SURGERY_NO_CRYSTAL) && BP_IS_CRYSTAL(affected)) || \ - ((surgery_candidate_flags & SURGERY_NO_STUMP) && affected.is_stump()) || \ - ((surgery_candidate_flags & SURGERY_NO_FLESH) && !(BP_IS_ROBOTIC(affected) || BP_IS_CRYSTAL(affected)))) - return FALSE - // Check if the surgery target is accessible. - if(BP_IS_ROBOTIC(affected)) - if(((surgery_candidate_flags & SURGERY_NEEDS_ENCASEMENT) || \ - (surgery_candidate_flags & SURGERY_NEEDS_INCISION) || \ - (surgery_candidate_flags & SURGERY_NEEDS_RETRACTED)) && \ - affected.hatch_state != HATCH_OPENED) - return FALSE - else - var/open_threshold = 0 - if(surgery_candidate_flags & SURGERY_NEEDS_INCISION) - open_threshold = SURGERY_OPEN - else if(surgery_candidate_flags & SURGERY_NEEDS_RETRACTED) - open_threshold = SURGERY_RETRACTED - else if(surgery_candidate_flags & SURGERY_NEEDS_ENCASEMENT) - open_threshold = (affected.encased ? SURGERY_ENCASED : SURGERY_RETRACTED) - if(open_threshold && ((strict_access_requirement && affected.how_open() != open_threshold) || \ - affected.how_open() < open_threshold)) - return FALSE - // Check if clothing is blocking access - var/obj/item/I = target.get_covering_equipped_item_by_zone(target_zone) - if(I && (I.item_flags & ITEM_FLAG_THICKMATERIAL)) - to_chat(user,SPAN_NOTICE("The material covering this area is too thick for you to do surgery through!")) - return FALSE - return affected - return FALSE - -/decl/surgery_step/proc/assess_surgery_candidate(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - return ishuman(target) - -// does stuff to begin the step, usually just printing messages. Moved germs transfering and bloodying here too -/decl/surgery_step/proc/begin_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - var/obj/item/organ/external/affected = target.get_organ(target_zone) - if (can_infect && affected) - spread_germs_to_organ(affected, user) - if(ishuman(user) && prob(60)) - var/mob/living/carbon/human/H = user - if (blood_level) - H.bloody_hands(target,0) - if (blood_level > 1) - H.bloody_body(target,0) - if(shock_level) - target.shock_stage = max(target.shock_stage, shock_level) - if (target.stat == UNCONSCIOUS && prob(20)) - to_chat(target, SPAN_NOTICE(SPAN_BOLD("... [pick("bright light", "faraway pain", "something moving in you", "soft beeping")] ..."))) - return - -// does stuff to end the step, which is normally print a message + do whatever this step changes -/decl/surgery_step/proc/end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - return - -// stuff that happens when the step fails -/decl/surgery_step/proc/fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - return null - -/decl/surgery_step/proc/success_chance(mob/living/user, mob/living/carbon/human/target, obj/item/tool, target_zone) - . = tool_quality(tool) - if(user == target) - . -= 10 - - var/skill_reqs = get_skill_reqs(user, target, tool, target_zone) - for(var/skill in skill_reqs) - var/penalty = delicate ? 40 : 20 - . -= max(0, penalty * (skill_reqs[skill] - user.get_skill_value(skill))) - if(user.skill_check(skill, SKILL_PROF)) - . += 20 - - if(ishuman(user)) - var/mob/living/carbon/human/H = user - . -= round(H.shock_stage * 0.5) - if(H.eye_blurry) - . -= 20 - if(H.eye_blind) - . -= 60 - - if(delicate) - if(user.slurring) - . -= 10 - if(!target.lying) - . -= 30 - var/turf/T = get_turf(target) - if(locate(/obj/machinery/optable, T)) - . -= 0 - else if(locate(/obj/structure/bed, T)) - . -= 5 - else if(locate(/obj/structure/table, T)) - . -= 10 - else if(locate(/obj/effect/rune, T)) - . -= 10 - . = max(., 0) - -/proc/spread_germs_to_organ(var/obj/item/organ/external/E, var/mob/living/carbon/human/user) - if(!istype(user) || !istype(E)) return - - var/germ_level = user.germ_level - if(user.gloves) - germ_level = user.gloves.germ_level - - E.germ_level = max(germ_level,E.germ_level) //as funny as scrubbing microbes out with clean gloves is - no. - -/obj/item/proc/do_surgery(mob/living/carbon/M, mob/living/user, fuckup_prob) - - // Check for the Hippocratic oath. - if(!istype(M) || user.a_intent == I_HURT) - return FALSE - - // Check for multi-surgery drifting. - var/zone = user.zone_sel.selecting - if(LAZYACCESS(M.surgeries_in_progress, zone)) - to_chat(user, SPAN_WARNING("You can't operate on this area while surgery is already in progress.")) - return TRUE - - // What surgeries does our tool/target enable? - var/list/possible_surgeries - var/list/all_surgeries = decls_repository.get_decls_of_subtype(/decl/surgery_step) - for(var/decl in all_surgeries) - var/decl/surgery_step/S = all_surgeries[decl] - if(S.name && S.tool_quality(src) && S.can_use(user, M, zone, src)) - LAZYSET(possible_surgeries, S, TRUE) - - // Which surgery, if any, do we actually want to do? - var/decl/surgery_step/S - if(LAZYLEN(possible_surgeries) == 1) - S = possible_surgeries[1] - else if(LAZYLEN(possible_surgeries) >= 1) - if(user.client) // In case of future autodocs. - S = input(user, "Which surgery would you like to perform?", "Surgery") as null|anything in possible_surgeries - if(S && !user.skill_check_multiple(S.get_skill_reqs(user, M, src, zone))) - S = pick(possible_surgeries) - - var/obj/item/gripper/gripper = user.get_active_hand() - // We didn't find a surgery, or decided not to perform one. - if(!istype(S)) - // If we're on an optable, we are protected from some surgery fails. Bypass this for some items (like health analyzers). - if((locate(/obj/machinery/optable) in get_turf(M)) && user.a_intent == I_HELP) - // Keep track of which tools we know aren't appropriate for surgery on help intent. - if(GLOB.surgery_tool_exception_cache[type]) - return FALSE - for(var/tool in GLOB.surgery_tool_exceptions) - if(istype(src, tool)) - GLOB.surgery_tool_exception_cache[type] = TRUE - return FALSE - to_chat(user, SPAN_WARNING("You aren't sure what you could do to \the [M] with \the [src].")) - return TRUE - - // Otherwise we can make a start on surgery! - else if(istype(M) && !QDELETED(M) && user.a_intent != I_HURT && (user.get_active_hand() == src || (istype(gripper) && gripper.wrapped == src))) - // Double-check this in case it changed between initial check and now. - if(zone in M.surgeries_in_progress) - to_chat(user, SPAN_WARNING("You can't operate on this area while surgery is already in progress.")) - else if(S.can_use(user, M, zone, src) && S.is_valid_target(M)) - var/operation_data = S.pre_surgery_step(user, M, zone, src) - if(operation_data) - LAZYSET(M.surgeries_in_progress, zone, operation_data) - S.begin_step(user, M, zone, src) - var/skill_reqs = S.get_skill_reqs(user, M, src, zone) - var/duration = user.skill_delay_mult(skill_reqs[1]) * rand(S.min_duration, S.max_duration) - if(prob(S.success_chance(user, M, src, zone)) && do_after(user, duration, M, DO_SURGERY)) - if (S.can_use(user, M, zone, src)) - S.end_step(user, M, zone, src) - handle_post_surgery() - else - to_chat(user, SPAN_WARNING("The patient lost the target organ before you could finish operating!")) - - else if ((src in user.contents) && user.Adjacent(M)) - S.fail_step(user, M, zone, src) - else - to_chat(user, SPAN_WARNING("You must remain close to your patient to conduct surgery.")) - if(!QDELETED(M)) - LAZYREMOVE(M.surgeries_in_progress, zone) // Clear the in-progress flag. - if(ishuman(M)) - var/mob/living/carbon/human/H = M - H.update_surgery() - return TRUE - return FALSE - -/obj/item/proc/handle_post_surgery() - return - -/obj/item/stack/handle_post_surgery() - use(1) diff --git a/code/modules/surgery/~surgery.dm b/code/modules/surgery/~surgery.dm deleted file mode 100644 index 0126fc8183228..0000000000000 --- a/code/modules/surgery/~surgery.dm +++ /dev/null @@ -1,6 +0,0 @@ -#undef SURGERY_NO_ROBOTIC -#undef SURGERY_NO_CRYSTAL -#undef SURGERY_NO_STUMP -#undef SURGERY_NEEDS_INCISION -#undef SURGERY_NEEDS_RETRACTED -#undef SURGERY_NEEDS_ENCASEMENT diff --git a/code/modules/synthesized_instruments/docs/Structure.txt b/code/modules/synthesized_instruments/docs/Structure.txt deleted file mode 100644 index 62444b7e13449..0000000000000 --- a/code/modules/synthesized_instruments/docs/Structure.txt +++ /dev/null @@ -1,18 +0,0 @@ -This module uses 4 components: -Real instruments -- the physical manifestation of the instrument, the one that is placed in the world -Virtual instruments -- the definition of an instrument, that is, what samples it uses, name and category -Sound player -- used to apply modification to all sounds emitted. Represents the actual source of sound (Right now it does little, but if you want to make certain factors -further modify sound more you'd start from here) -Synthesized Song - just like /datum/song it's what parses and plays a melody ---- -Real instruments inherit from either /obj/structure/synthesized_instrument (static musical instrument) or /obj/item/device/synthesized_instrument (handheld musical instrument) ---- -Virtual instruments all inherit from /datum/instrument. -Virtual instruments should follow this structure: /datum/instrument/category_name/instrument_name. - -Refer to any file in ./instrument_data to see how it's done. ---- -Sound player inherits from /datum/sound_player ---- -For synthesized song only use /datum/synthesized_song ---- \ No newline at end of file diff --git a/code/modules/synthesized_instruments/echo_editor.dm b/code/modules/synthesized_instruments/echo_editor.dm deleted file mode 100644 index c9ebe0950a395..0000000000000 --- a/code/modules/synthesized_instruments/echo_editor.dm +++ /dev/null @@ -1,63 +0,0 @@ -/datum/nano_module/echo_editor - name = "Echo Editor" - available_to_ai = 0 - var/datum/sound_player/player - var/atom/source - - -/datum/nano_module/echo_editor/New(datum/sound_player/player) - src.host = player.actual_instrument - src.player = player - - -/datum/nano_module/echo_editor/ui_interact(mob/user, ui_key = "echo_editor", var/datum/nanoui/ui = null, var/force_open = 0) - var/list/list/data = list() - data["echo_params"] = list() - for (var/i=1 to 18) - var/list/echo_data = list() - echo_data["index"] = i - echo_data["name"] = GLOB.musical_config.echo_param_names[i] - echo_data["value"] = src.player.echo[i] - echo_data["real"] = GLOB.musical_config.echo_params_bounds[i][3] - data["echo_params"] += list(echo_data) - - ui = SSnano.try_update_ui(user, src, ui_key, ui, data, force_open) - if (!ui) - ui = new (user, src, ui_key, "echo_editor.tmpl", "Echo Editor", 300, 600) - ui.set_initial_data(data) - ui.open() - - -/datum/nano_module/echo_editor/Topic(href, href_list) - if (..()) - return 1 - - var/target = href_list["target"] - var/index = text2num(href_list["index"]) - if (href_list["index"] && !(index in 1 to 18)) - to_chat(usr, "Wrong index was provided: [index]") - return 0 - - var/name = GLOB.musical_config.echo_param_names[index] - var/desc = GLOB.musical_config.echo_param_desc[index] - var/default = GLOB.musical_config.echo_default[index] - var/list/bounds = GLOB.musical_config.echo_params_bounds[index] - var/bound_min = bounds[1] - var/bound_max = bounds[2] - var/reals_allowed = bounds[3] - - switch (target) - if ("set") - var/new_value = min(max(input(usr, "[name]: [bound_min] - [bound_max]") as num, bound_min), bound_max) - if (!isnum(new_value)) - return - new_value = reals_allowed ? new_value : round(new_value) - src.player.echo[index] = new_value - if ("reset") - src.player.echo[index] = default - if ("reset_all") - src.player.echo = GLOB.musical_config.echo_default.Copy() - if ("desc") - to_chat(usr, "[name]: from [bound_min] to [bound_max] (default: [default])
                  [desc]") - - return 1 \ No newline at end of file diff --git a/code/modules/synthesized_instruments/env_editor.dm b/code/modules/synthesized_instruments/env_editor.dm deleted file mode 100644 index 536e467de896a..0000000000000 --- a/code/modules/synthesized_instruments/env_editor.dm +++ /dev/null @@ -1,65 +0,0 @@ -/datum/nano_module/env_editor - name = "Environment Editor" - available_to_ai = 0 - var/datum/sound_player/player - - -/datum/nano_module/env_editor/New(datum/sound_player/player) - src.host = player.actual_instrument - src.player = player - - -/datum/nano_module/env_editor/ui_interact(mob/user, ui_key = "env_editor", var/datum/nanoui/ui = null, var/force_open = 0) - var/list/list/data = list() - data["env_params"] = list() - for (var/i=1 to 23) - var/list/env_data = list() - env_data["index"] = i - env_data["name"] = GLOB.musical_config.env_param_names[i] - env_data["value"] = src.player.env[i] - env_data["real"] = GLOB.musical_config.env_params_bounds[i][3] - data["env_params"] += list(env_data) - - ui = SSnano.try_update_ui(user, src, ui_key, ui, data, force_open) - if (!ui) - ui = new (user, src, ui_key, "env_editor.tmpl", "Environment Editor", 300, 800) - ui.set_initial_data(data) - ui.open() - - -/datum/nano_module/env_editor/Topic(href, href_list) - if (!GLOB.musical_config.env_settings_available) - return 0 - - if (..()) - return 1 - - var/target = href_list["target"] - var/index = text2num(href_list["index"]) - if (href_list["index"] && !(index in 1 to 23)) - to_chat(usr, "Wrong index was provided: [index]") - return 0 - - var/name = GLOB.musical_config.env_param_names[index] - var/desc = GLOB.musical_config.env_param_desc[index] - var/default = GLOB.musical_config.env_default[index] - var/list/bounds = GLOB.musical_config.env_params_bounds[index] - var/bound_min = bounds[1] - var/bound_max = bounds[2] - var/reals_allowed = bounds[3] - - switch (target) - if ("set") - var/new_value = min(max(input(usr, "[name]: [bound_min] - [bound_max]") as num, bound_min), bound_max) - if (!isnum(new_value)) - return - new_value = reals_allowed ? new_value : round(new_value) - src.player.env[index] = new_value - if ("reset") - src.player.env[index] = default - if ("reset_all") - src.player.env = GLOB.musical_config.env_default.Copy() - if ("desc") - to_chat(usr, "[name]: from [bound_min] to [bound_max] (default: [default])
                  [desc]") - - return 1 \ No newline at end of file diff --git a/code/modules/synthesized_instruments/event_manager.dm b/code/modules/synthesized_instruments/event_manager.dm deleted file mode 100644 index 7c6576d2c4e48..0000000000000 --- a/code/modules/synthesized_instruments/event_manager.dm +++ /dev/null @@ -1,91 +0,0 @@ -/datum/musical_event - var/datum/sound_player/source - var/time = 0 - var/new_volume = 100 - var/datum/sound_token/token - var/sound_id - - -/datum/musical_event/New(datum/sound_player/source, datum/sound_token/token, time, volume) - src.source = source - src.token = token - src.time = time - src.new_volume = volume - - - -/datum/musical_event/Destroy() - source = null - token = null - return ..() - - -/datum/musical_event/proc/tick() - if (!(istype(token) && istype(source))) - return - if (src.new_volume > 0) src.update_sound() - else src.destroy_sound() - - - -/datum/musical_event/proc/update_sound() - src.token.SetVolume(new_volume) - - -/datum/musical_event/proc/destroy_sound() - source.song.available_channels += 1 - QDEL_NULL(token) - - -/datum/musical_event_manager - var/list/datum/musical_event/events = list() - var/suspended = 0 - var/active = 0 - var/kill_loop = 0 - - -/datum/musical_event_manager/proc/push_event(datum/sound_player/source, datum/sound_token/token, time, volume) - if (istype(source) && istype(token) && volume >= 0 && volume <= 100) - src.events += new /datum/musical_event(source, token, time, volume) - - - -/datum/musical_event_manager/proc/handle_events() - var/list/datum/musical_event/left_events = list() - while (1) - left_events.Cut() - if (src.kill_loop) - src.active = 0 - src.kill_loop = 0 - break - if (!src.suspended) - for (var/datum/musical_event/event in src.events) - event.time -= world.tick_lag - if (event.time <= 0) - event.tick() - else left_events += event - src.events.Cut() - src.events += left_events - sleep(world.tick_lag) // High priority - -/datum/musical_event_manager/proc/activate() - if (active) return 0 - src.active = 1 - - addtimer(CALLBACK(src, .proc/handle_events), 0) - - - -/datum/musical_event_manager/proc/deactivate() - if (src.kill_loop) return 0 - if (src.active) src.kill_loop = 1 - for (var/datum/musical_event/event in src.events) - event.destroy_sound() - src.events.Cut() - src.active = 0 - src.suspended = 0 - return 1 - - -/datum/musical_event_manager/proc/is_overloaded() - return src.events.len > GLOB.musical_config.max_events \ No newline at end of file diff --git a/code/modules/synthesized_instruments/globals.dm b/code/modules/synthesized_instruments/globals.dm deleted file mode 100644 index b2d8cc93006ff..0000000000000 --- a/code/modules/synthesized_instruments/globals.dm +++ /dev/null @@ -1,243 +0,0 @@ -GLOBAL_DATUM_INIT(musical_config, /datum/musical_config, new) - -/datum/musical_config - var/highest_octave = 9 - var/lowest_octave = 0 - - var/highest_transposition = 4 - var/lowest_transposition = -4 - - var/longest_sustain_timer = 50 - var/gentlest_drop = 1.07 - var/steepest_drop = 10.0 - - var/channels_per_instrument = 128 - var/max_lines = 1000 - var/max_line_length = 50 - var/max_events = 2400 - var/song_editor_lines_per_page = 20 - - var/usage_info_channel_resolution = 1 - var/usage_info_event_resolution = 8 - - var/env_settings_available = 1 - - var/list/env_default = list(7.5, 1.0, -1000, -100, 0, 1.49, 0.83, 1.0, -2602, 0.0007, 200, 0.011, 0.25, 0.0, 0.25, 0.0, -5.0, 5000, 250.0, 0.0, 100, 100, 63) - var/list/list/env_params_bounds = list( - list(1, 100, 1), - list(0, 1, 1), - list(-10000, 0, 1), - list(-10000, 0, 1), - list(-10000, 0, 1), - list(0.1, 20, 1), - list(0.1, 2.0, 1), - list(0.1, 2.0, 1), - list(-10000, 1000, 0), - list(0, 0.3, 1), - list(-10000, 2000, 0), - list(0, 0.1, 1), - list(0.075, 0.25, 1), - list(0, 1, 1), - list(0.04, 4.0, 1), - list(0, 1, 1), - list(-100, 0.0, 1), - list(1000, 20000, 0), - list(20, 1000, 1), - list(0, 10, 1), - list(0, 100, 1), - list(0, 100, 1), - list(0, 256, 0)) - var/list/all_environments = list( - "None", - "Generic", - "Padded cell", - "Room", - "Bathroom", - "Living Room", - "Stone Room", - "Auditorium", - "Concert Hall", - "Cave", - "Arena", - "Hangar", - "Carpetted Hallway", - "Hallway", - "Stone Coridor", - "Alley", - "Forest", - "City", - "Mountains", - "Quarry", - "Plain", - "Parking Lot", - "Sewer Pipe", - "Underwater", - "Drugged", - "Dizzy", - "Psychotic", - "Custom") - var/list/env_param_names = list( - "Env. Size", - "Env. Diff.", - "Room", - "Room (High Frequency)", - "Room (Low Frequency)", - "Decay Time", - "Decay (High Frequency Ratio)", - "Decay (Low Frequency Ratio)", - "Reflections", - "Reflections Delay", - "Reverb", - "Reverb Delay", - "Echo Time", - "Echo Depth", - "Modulation Time", - "Modulation Depth", - "Air Absorption (High Frequency)", - "High Frequency Reference", - "Low Frequency Reference", - "Room Rolloff Factor", - "Diffusion", - "Density", - "Flags") - var/list/env_param_desc = list( - "environment size in meters", - "environment diffusion", - "room effect level (at mid frequencies)", - "relative room effect level at high frequencies", - "relative room effect level at low frequencies", - "reverberation decay time at mid frequencies", - "high-frequency to mid-frequency decay time ratio", - "low-frequency to mid-frequency decay time ratio", - "early reflections level relative to room effect", - "initial reflection delay time", - "late reverberation level relative to room effect", - "late reverberation delay time relative to initial reflection", - "echo time", - "echo depth", - "modulation time", - "modulation depth", - "change in level per meter at high frequencies", - "reference high frequency (hz)", - "reference low frequency (hz)", - "like rolloffscale in System::set3DSettings but for reverb room size effect", - "Value that controls the echo density in the late reverberation decay.", - "Value that controls the modal density in the late reverberation decay", - {" -Bit flags that modify the behavior of above properties -- 1 - 'EnvSize' affects reverberation decay time -- 2 - 'EnvSize' affects reflection level -- 4 - 'EnvSize' affects initial reflection delay time -- 8 - 'EnvSize' affects reflections level -- 16 - 'EnvSize' affects late reverberation delay time -- 32 - AirAbsorptionHF affects DecayHFRatio -- 64 - 'EnvSize' affects echo time -- 128 - 'EnvSize' affects modulation time"}) - - var/list/echo_default = list(0, 0, 0, 0, 0, 0.0, 0, 0.25, 1.5, 1.0, 0, 1.0, 0, 0.0, 0.0, 0.0, 1.0, 7) - var/list/list/echo_params_bounds = list( - list(-10000, 1000, 0), - list(-10000, 0, 0), - list(-10000, 1000, 0), - list(-10000, 0, 0), - list(-10000, 0, 0), - list(0, 1, 1), - list(-10000, 0, 0), - list(0, 1, 1), - list(0, 10, 1), - list(0, 10, 1), - list(-10000, 0, 0), - list(0, 1, 1), - list(-10000, 0, 0), - list(0, 10, 1), - list(0, 10, 1), - list(0, 10, 1), - list(0, 10, 1), - list(0, 16, 0)) - var/list/echo_param_names = list( - "Direct", - "Direct (High Frequency)", - "Room", - "Room (High Frequency)", - "Obstruction", - "Obstruction (Low Frequency Ratio)", - "Occlusion", - "Occlusion (Low Frequency Ratio)", - "Occlusion (Room Ratio)", - "Occlusion (Direct Ratio)", - "Exclusion", - "Exclusion (Low Frequency Ratio)", - "Outside Volume (High Frequency)", - "Doppler Factor", - "Rolloff Factor", - "Room Rolloff Factor", - "Air Absorption Factor", - "Flags") - var/list/echo_param_desc = list( - "direct path level (at low and mid frequencies)", - "relative direct path level at high frequencies ", - "room effect level (at low and mid frequencies)", - "relative room effect level at high frequencies", - "main obstruction control (attenuation at high frequencies)", - "obstruction low-frequency level re. main control", - "main occlusion control (attenuation at high frequencies)", - "occlusion low-frequency level re. main control", - "relative occlusion control for room effect", - "relative occlusion control for direct path", - "main exlusion control (attenuation at high frequencies)", - "exclusion low-frequency level re. main control", - "outside sound cone level at high frequencies", - "like DS3D flDopplerFactor but per source", - "like DS3D flRolloffFactor but per source", - "like DS3D flRolloffFactor but for room effect", - "multiplies AirAbsorptionHF member of environment reverb properties.", - {" - Bit flags that modify the behavior of properties - - 1 - Automatic setting of 'Direct' due to distance from listener - - 2 - Automatic setting of 'Room' due to distance from listener - - 4 - Automatic setting of 'RoomHF' due to distance from listener"}) - - var/list/n2t_int = list() // Instead of num2text it is used for faster access in n2t - var/list/nn2no = list(0,2,4,5,7,9,11) // Maps note num onto note offset - - - -/datum/musical_config/proc/n2t(key) // Used instead of num2text for faster access in sample_map - if (!src.n2t_int.len) - for (var/i=1, i<=127, i++) - src.n2t_int += num2text(i) - - if (key==0) - return "0" // Fuck you BYOND - if (!isnum(key) || key < 0 || key>127 || round(key) != key) - CRASH("n2t argument must be an integer from 0 to 127") - return src.n2t_int[key] - - -/datum/musical_config/proc/environment_to_id(environment) - if (environment in src.all_environments) - return src.all_environments.Find(environment) - 2 - return -1 - - -/datum/musical_config/proc/id_to_environment(id) - if (id >= -1 && id <= 26) - return src.all_environments[id+2] - return "None" - - -/datum/musical_config/proc/index_to_id(index) - return max(min(index-2, 26), -1) - - -/datum/musical_config/proc/is_custom_env(id) - return id_to_environment(id) == src.all_environments[28] - - -/datum/sample_pair - var/sample - var/deviation = 0 - -/datum/sample_pair/New(sample_file, deviation) - src.sample = sample_file - src.deviation = deviation \ No newline at end of file diff --git a/code/modules/synthesized_instruments/instrument_data/brass.dm b/code/modules/synthesized_instruments/instrument_data/brass.dm deleted file mode 100644 index 968d7a2c5e539..0000000000000 --- a/code/modules/synthesized_instruments/instrument_data/brass.dm +++ /dev/null @@ -1,28 +0,0 @@ -/datum/instrument/brass - name = "Generic brass instrument" - category = "Brass" - - -/datum/instrument/brass/crisis_section - name = "Crisis Brass Section" - id = "crbrass" - samples = list("36"='code/modules/synthesized_instruments/samples/brass/crisis_brass/c2.ogg', - "48"='code/modules/synthesized_instruments/samples/brass/crisis_brass/c3.ogg', - "60"='code/modules/synthesized_instruments/samples/brass/crisis_brass/c4.ogg', - "72"='code/modules/synthesized_instruments/samples/brass/crisis_brass/c5.ogg') - - -/datum/instrument/brass/crisis_trombone - name = "Crisis Trombone" - id = "crtrombone" - samples = list("36"='code/modules/synthesized_instruments/samples/brass/crisis_trombone/c2.ogg', - "48"='code/modules/synthesized_instruments/samples/brass/crisis_trombone/c3.ogg', - "60"='code/modules/synthesized_instruments/samples/brass/crisis_trombone/c4.ogg', - "72"='code/modules/synthesized_instruments/samples/brass/crisis_trombone/c5.ogg') - - -/datum/instrument/brass/crisis_trumpet - name = "Crisis Trumpet" - id = "crtrumpet" - samples = list("60"='code/modules/synthesized_instruments/samples/brass/crisis_trumpet/c4.ogg', - "72"='code/modules/synthesized_instruments/samples/brass/crisis_trumpet/c5.ogg') \ No newline at end of file diff --git a/code/modules/synthesized_instruments/instrument_data/chromatic_percussion.dm b/code/modules/synthesized_instruments/instrument_data/chromatic_percussion.dm deleted file mode 100644 index babf33f8bfae2..0000000000000 --- a/code/modules/synthesized_instruments/instrument_data/chromatic_percussion.dm +++ /dev/null @@ -1,33 +0,0 @@ -/datum/instrument/chromatic - name = "Generic chromatic percussion instrument" - category = "Chromatic percussion" - - -/datum/instrument/chromatic/vibraphone1 - name = "Crisis Vibraphone" - id = "crvibr" - samples = list("36"='code/modules/synthesized_instruments/samples/chromatic/vibraphone1/c2.ogg', - "48"='code/modules/synthesized_instruments/samples/chromatic/vibraphone1/c3.ogg', - "60"='code/modules/synthesized_instruments/samples/chromatic/vibraphone1/c4.ogg', - "72"='code/modules/synthesized_instruments/samples/chromatic/vibraphone1/c5.ogg') - - -/datum/instrument/chromatic/musicbox1 - name = "SGM Music Box" - id = "sgmmbox" - samples = list("36"='code/modules/synthesized_instruments/samples/chromatic/sgmbox/c2.ogg', - "48"='code/modules/synthesized_instruments/samples/chromatic/sgmbox/c3.ogg', - "60"='code/modules/synthesized_instruments/samples/chromatic/sgmbox/c4.ogg', - "72"='code/modules/synthesized_instruments/samples/chromatic/sgmbox/c5.ogg') - - -/datum/instrument/chromatic/fluid_celeste - name = "FluidR3 Celeste" - id = "r3celeste" - samples = list("36"='code/modules/synthesized_instruments/samples/chromatic/fluid_celeste/c2.ogg', - "48"='code/modules/synthesized_instruments/samples/chromatic/fluid_celeste/c3.ogg', - "60"='code/modules/synthesized_instruments/samples/chromatic/fluid_celeste/c4.ogg', - "72"='code/modules/synthesized_instruments/samples/chromatic/fluid_celeste/c5.ogg', - "84"='code/modules/synthesized_instruments/samples/chromatic/fluid_celeste/c6.ogg', - "96"='code/modules/synthesized_instruments/samples/chromatic/fluid_celeste/c7.ogg', - "108"='code/modules/synthesized_instruments/samples/chromatic/fluid_celeste/c8.ogg') \ No newline at end of file diff --git a/code/modules/synthesized_instruments/instrument_data/fun.dm b/code/modules/synthesized_instruments/instrument_data/fun.dm deleted file mode 100644 index a2370f545a6b3..0000000000000 --- a/code/modules/synthesized_instruments/instrument_data/fun.dm +++ /dev/null @@ -1,26 +0,0 @@ -/datum/instrument/fun - name = "Generic Fun Instrument" - category = "Fun" - - -/datum/instrument/fun/honk - name = "!!HONK!!" - id = "honk" - samples = list("74"='sound/items/bikehorn.ogg') // Cluwne Heaven - - -/datum/instrument/fun/signal - name = "Ping" - id = "ping" - samples = list("79"='sound/machines/ping.ogg') - - -/datum/instrument/fun/chime - name = "Chime" - id = "chime" - samples = list("79"='sound/machines/chime.ogg') - -/datum/instrument/fun/diona - name = "Diona" - id = "diona" - samples = list("79"='sound/misc/nymphchirp.ogg') \ No newline at end of file diff --git a/code/modules/synthesized_instruments/instrument_data/guitar.dm b/code/modules/synthesized_instruments/instrument_data/guitar.dm deleted file mode 100644 index 59e625f14e975..0000000000000 --- a/code/modules/synthesized_instruments/instrument_data/guitar.dm +++ /dev/null @@ -1,39 +0,0 @@ -/datum/instrument/guitar - name = "Generic guitar-like instrument" - category = "Guitar" - - -/datum/instrument/guitar/steel_crisis - name = "Crisis Steel String Guitar" - id = "csteelgt" - samples = list("36"='code/modules/synthesized_instruments/samples/guitar/crisis_steel/c2.ogg', - "48"='code/modules/synthesized_instruments/samples/guitar/crisis_steel/c3.ogg', - "60"='code/modules/synthesized_instruments/samples/guitar/crisis_steel/c4.ogg', - "72"='code/modules/synthesized_instruments/samples/guitar/crisis_steel/c5.ogg') - - -/datum/instrument/guitar/nylon_crisis - name = "Crisis Nylon String Guitar" - id = "cnylongt" - samples = list("36"='code/modules/synthesized_instruments/samples/guitar/crisis_nylon/c2.ogg', - "48"='code/modules/synthesized_instruments/samples/guitar/crisis_nylon/c3.ogg', - "60"='code/modules/synthesized_instruments/samples/guitar/crisis_nylon/c4.ogg', - "72"='code/modules/synthesized_instruments/samples/guitar/crisis_nylon/c5.ogg') - - -/datum/instrument/guitar/clean_crisis - name = "Crisis Clean Guitar" - id = "ccleangt" - samples = list("36"='code/modules/synthesized_instruments/samples/guitar/crisis_clean/c2.ogg', - "48"='code/modules/synthesized_instruments/samples/guitar/crisis_clean/c3.ogg', - "60"='code/modules/synthesized_instruments/samples/guitar/crisis_clean/c4.ogg', - "72"='code/modules/synthesized_instruments/samples/guitar/crisis_clean/c5.ogg') - - -/datum/instrument/guitar/muted_crisis - name = "Crisis Muted Guitar" - id = "cmutedgt" - samples = list("36"='code/modules/synthesized_instruments/samples/guitar/crisis_muted/c2.ogg', - "48"='code/modules/synthesized_instruments/samples/guitar/crisis_muted/c3.ogg', - "60"='code/modules/synthesized_instruments/samples/guitar/crisis_muted/c4.ogg', - "72"='code/modules/synthesized_instruments/samples/guitar/crisis_muted/c5.ogg') \ No newline at end of file diff --git a/code/modules/synthesized_instruments/instrument_data/impossible_instruments.dm b/code/modules/synthesized_instruments/instrument_data/impossible_instruments.dm deleted file mode 100644 index 9e81e634a7d8a..0000000000000 --- a/code/modules/synthesized_instruments/instrument_data/impossible_instruments.dm +++ /dev/null @@ -1,21 +0,0 @@ -/datum/instrument/tones - name = "Ideal tone" - category = "Tones" - - -/datum/instrument/tones/square_wave - name = "Ideal square wave" - id = "square" - samples = list("81"='code/modules/synthesized_instruments/samples/tones/Square.ogg') - - -/datum/instrument/tones/sine_wave - name = "Ideal sine wave" - id = "sine" - samples = list("81"='code/modules/synthesized_instruments/samples/tones/Sine.ogg') - - -/datum/instrument/tones/saw_wave - name = "Ideal sawtooth wave" - id = "saw" - samples = list("81"='code/modules/synthesized_instruments/samples/tones/Sawtooth.ogg') \ No newline at end of file diff --git a/code/modules/synthesized_instruments/instrument_data/obsolete.dm b/code/modules/synthesized_instruments/instrument_data/obsolete.dm deleted file mode 100644 index cf742b07d696a..0000000000000 --- a/code/modules/synthesized_instruments/instrument_data/obsolete.dm +++ /dev/null @@ -1,207 +0,0 @@ -/datum/instrument/obsolete - name="Non-synthesized sounds" - category="Prerecorded" - - -/datum/instrument/obsolete/piano - name="Piano" - id="ss13piano" - samples=list(\ -"12"='code/modules/synthesized_instruments/samples/obsolete/piano/Cn1.ogg',\ -"13"='code/modules/synthesized_instruments/samples/obsolete/piano/C#1.ogg',\ -"14"='code/modules/synthesized_instruments/samples/obsolete/piano/Dn1.ogg',\ -"15"='code/modules/synthesized_instruments/samples/obsolete/piano/D#1.ogg',\ -"16"='code/modules/synthesized_instruments/samples/obsolete/piano/En1.ogg',\ -"17"='code/modules/synthesized_instruments/samples/obsolete/piano/Fn1.ogg',\ -"18"='code/modules/synthesized_instruments/samples/obsolete/piano/F#1.ogg',\ -"19"='code/modules/synthesized_instruments/samples/obsolete/piano/Gn1.ogg',\ -"20"='code/modules/synthesized_instruments/samples/obsolete/piano/G#1.ogg',\ -"21"='code/modules/synthesized_instruments/samples/obsolete/piano/An1.ogg',\ -"22"='code/modules/synthesized_instruments/samples/obsolete/piano/A#1.ogg',\ -"23"='code/modules/synthesized_instruments/samples/obsolete/piano/Bn1.ogg',\ -"24"='code/modules/synthesized_instruments/samples/obsolete/piano/Cn2.ogg',\ -"25"='code/modules/synthesized_instruments/samples/obsolete/piano/C#2.ogg',\ -"26"='code/modules/synthesized_instruments/samples/obsolete/piano/Dn2.ogg',\ -"27"='code/modules/synthesized_instruments/samples/obsolete/piano/D#2.ogg',\ -"28"='code/modules/synthesized_instruments/samples/obsolete/piano/En2.ogg',\ -"29"='code/modules/synthesized_instruments/samples/obsolete/piano/Fn2.ogg',\ -"30"='code/modules/synthesized_instruments/samples/obsolete/piano/F#2.ogg',\ -"31"='code/modules/synthesized_instruments/samples/obsolete/piano/Gn2.ogg',\ -"32"='code/modules/synthesized_instruments/samples/obsolete/piano/G#2.ogg',\ -"33"='code/modules/synthesized_instruments/samples/obsolete/piano/An2.ogg',\ -"34"='code/modules/synthesized_instruments/samples/obsolete/piano/A#2.ogg',\ -"35"='code/modules/synthesized_instruments/samples/obsolete/piano/Bn2.ogg',\ -"36"='code/modules/synthesized_instruments/samples/obsolete/piano/Cn3.ogg',\ -"37"='code/modules/synthesized_instruments/samples/obsolete/piano/C#3.ogg',\ -"38"='code/modules/synthesized_instruments/samples/obsolete/piano/Dn3.ogg',\ -"39"='code/modules/synthesized_instruments/samples/obsolete/piano/D#3.ogg',\ -"40"='code/modules/synthesized_instruments/samples/obsolete/piano/En3.ogg',\ -"41"='code/modules/synthesized_instruments/samples/obsolete/piano/Fn3.ogg',\ -"42"='code/modules/synthesized_instruments/samples/obsolete/piano/F#3.ogg',\ -"43"='code/modules/synthesized_instruments/samples/obsolete/piano/Gn3.ogg',\ -"44"='code/modules/synthesized_instruments/samples/obsolete/piano/G#3.ogg',\ -"45"='code/modules/synthesized_instruments/samples/obsolete/piano/An3.ogg',\ -"46"='code/modules/synthesized_instruments/samples/obsolete/piano/A#3.ogg',\ -"47"='code/modules/synthesized_instruments/samples/obsolete/piano/Bn3.ogg',\ -"48"='code/modules/synthesized_instruments/samples/obsolete/piano/Cn4.ogg',\ -"49"='code/modules/synthesized_instruments/samples/obsolete/piano/C#4.ogg',\ -"50"='code/modules/synthesized_instruments/samples/obsolete/piano/Dn4.ogg',\ -"51"='code/modules/synthesized_instruments/samples/obsolete/piano/D#4.ogg',\ -"52"='code/modules/synthesized_instruments/samples/obsolete/piano/En4.ogg',\ -"53"='code/modules/synthesized_instruments/samples/obsolete/piano/Fn4.ogg',\ -"54"='code/modules/synthesized_instruments/samples/obsolete/piano/F#4.ogg',\ -"55"='code/modules/synthesized_instruments/samples/obsolete/piano/Gn4.ogg',\ -"56"='code/modules/synthesized_instruments/samples/obsolete/piano/G#4.ogg',\ -"57"='code/modules/synthesized_instruments/samples/obsolete/piano/An4.ogg',\ -"58"='code/modules/synthesized_instruments/samples/obsolete/piano/A#4.ogg',\ -"59"='code/modules/synthesized_instruments/samples/obsolete/piano/Bn4.ogg',\ -"60"='code/modules/synthesized_instruments/samples/obsolete/piano/Cn5.ogg',\ -"61"='code/modules/synthesized_instruments/samples/obsolete/piano/C#5.ogg',\ -"62"='code/modules/synthesized_instruments/samples/obsolete/piano/Dn5.ogg',\ -"63"='code/modules/synthesized_instruments/samples/obsolete/piano/D#5.ogg',\ -"64"='code/modules/synthesized_instruments/samples/obsolete/piano/En5.ogg',\ -"65"='code/modules/synthesized_instruments/samples/obsolete/piano/Fn5.ogg',\ -"66"='code/modules/synthesized_instruments/samples/obsolete/piano/F#5.ogg',\ -"67"='code/modules/synthesized_instruments/samples/obsolete/piano/Gn5.ogg',\ -"68"='code/modules/synthesized_instruments/samples/obsolete/piano/G#5.ogg',\ -"69"='code/modules/synthesized_instruments/samples/obsolete/piano/An5.ogg',\ -"70"='code/modules/synthesized_instruments/samples/obsolete/piano/A#5.ogg',\ -"71"='code/modules/synthesized_instruments/samples/obsolete/piano/Bn5.ogg',\ -"72"='code/modules/synthesized_instruments/samples/obsolete/piano/Cn6.ogg',\ -"73"='code/modules/synthesized_instruments/samples/obsolete/piano/C#6.ogg',\ -"74"='code/modules/synthesized_instruments/samples/obsolete/piano/Dn6.ogg',\ -"75"='code/modules/synthesized_instruments/samples/obsolete/piano/D#6.ogg',\ -"76"='code/modules/synthesized_instruments/samples/obsolete/piano/En6.ogg',\ -"77"='code/modules/synthesized_instruments/samples/obsolete/piano/Fn6.ogg',\ -"78"='code/modules/synthesized_instruments/samples/obsolete/piano/F#6.ogg',\ -"79"='code/modules/synthesized_instruments/samples/obsolete/piano/Gn6.ogg',\ -"80"='code/modules/synthesized_instruments/samples/obsolete/piano/G#6.ogg',\ -"81"='code/modules/synthesized_instruments/samples/obsolete/piano/An6.ogg',\ -"82"='code/modules/synthesized_instruments/samples/obsolete/piano/A#6.ogg',\ -"83"='code/modules/synthesized_instruments/samples/obsolete/piano/Bn6.ogg',\ -"84"='code/modules/synthesized_instruments/samples/obsolete/piano/Cn7.ogg',\ -"85"='code/modules/synthesized_instruments/samples/obsolete/piano/C#7.ogg',\ -"86"='code/modules/synthesized_instruments/samples/obsolete/piano/Dn7.ogg',\ -"87"='code/modules/synthesized_instruments/samples/obsolete/piano/D#7.ogg',\ -"88"='code/modules/synthesized_instruments/samples/obsolete/piano/En7.ogg',\ -"89"='code/modules/synthesized_instruments/samples/obsolete/piano/Fn7.ogg',\ -"90"='code/modules/synthesized_instruments/samples/obsolete/piano/F#7.ogg',\ -"91"='code/modules/synthesized_instruments/samples/obsolete/piano/Gn7.ogg',\ -"92"='code/modules/synthesized_instruments/samples/obsolete/piano/G#7.ogg',\ -"93"='code/modules/synthesized_instruments/samples/obsolete/piano/An7.ogg',\ -"94"='code/modules/synthesized_instruments/samples/obsolete/piano/A#7.ogg',\ -"95"='code/modules/synthesized_instruments/samples/obsolete/piano/Bn7.ogg',\ -"96"='code/modules/synthesized_instruments/samples/obsolete/piano/Cn8.ogg',\ -"97"='code/modules/synthesized_instruments/samples/obsolete/piano/C#8.ogg',\ -"98"='code/modules/synthesized_instruments/samples/obsolete/piano/Dn8.ogg',\ -"99"='code/modules/synthesized_instruments/samples/obsolete/piano/D#8.ogg',\ -"100"='code/modules/synthesized_instruments/samples/obsolete/piano/En8.ogg',\ -"101"='code/modules/synthesized_instruments/samples/obsolete/piano/Fn8.ogg',\ -"102"='code/modules/synthesized_instruments/samples/obsolete/piano/F#8.ogg',\ -"103"='code/modules/synthesized_instruments/samples/obsolete/piano/Gn8.ogg',\ -"104"='code/modules/synthesized_instruments/samples/obsolete/piano/G#8.ogg',\ -"105"='code/modules/synthesized_instruments/samples/obsolete/piano/An8.ogg',\ -"106"='code/modules/synthesized_instruments/samples/obsolete/piano/A#8.ogg',\ -"107"='code/modules/synthesized_instruments/samples/obsolete/piano/Bn8.ogg') - - -/datum/instrument/obsolete/violin - name = "Violin" - id = "ss13violin" - samples=list(\ -"12"='code/modules/synthesized_instruments/samples/obsolete/violin/Cn1.mid',\ -"13"='code/modules/synthesized_instruments/samples/obsolete/violin/C#1.mid',\ -"14"='code/modules/synthesized_instruments/samples/obsolete/violin/Dn1.mid',\ -"15"='code/modules/synthesized_instruments/samples/obsolete/violin/D#1.mid',\ -"16"='code/modules/synthesized_instruments/samples/obsolete/violin/En1.mid',\ -"17"='code/modules/synthesized_instruments/samples/obsolete/violin/Fn1.mid',\ -"18"='code/modules/synthesized_instruments/samples/obsolete/violin/F#1.mid',\ -"19"='code/modules/synthesized_instruments/samples/obsolete/violin/Gn1.mid',\ -"20"='code/modules/synthesized_instruments/samples/obsolete/violin/G#1.mid',\ -"21"='code/modules/synthesized_instruments/samples/obsolete/violin/An1.mid',\ -"22"='code/modules/synthesized_instruments/samples/obsolete/violin/A#1.mid',\ -"23"='code/modules/synthesized_instruments/samples/obsolete/violin/Bn1.mid',\ -"24"='code/modules/synthesized_instruments/samples/obsolete/violin/Cn2.mid',\ -"25"='code/modules/synthesized_instruments/samples/obsolete/violin/C#2.mid',\ -"26"='code/modules/synthesized_instruments/samples/obsolete/violin/Dn2.mid',\ -"27"='code/modules/synthesized_instruments/samples/obsolete/violin/D#2.mid',\ -"28"='code/modules/synthesized_instruments/samples/obsolete/violin/En2.mid',\ -"29"='code/modules/synthesized_instruments/samples/obsolete/violin/Fn2.mid',\ -"30"='code/modules/synthesized_instruments/samples/obsolete/violin/F#2.mid',\ -"31"='code/modules/synthesized_instruments/samples/obsolete/violin/Gn2.mid',\ -"32"='code/modules/synthesized_instruments/samples/obsolete/violin/G#2.mid',\ -"33"='code/modules/synthesized_instruments/samples/obsolete/violin/An2.mid',\ -"34"='code/modules/synthesized_instruments/samples/obsolete/violin/A#2.mid',\ -"35"='code/modules/synthesized_instruments/samples/obsolete/violin/Bn2.mid',\ -"36"='code/modules/synthesized_instruments/samples/obsolete/violin/Cn3.mid',\ -"37"='code/modules/synthesized_instruments/samples/obsolete/violin/C#3.mid',\ -"38"='code/modules/synthesized_instruments/samples/obsolete/violin/Dn3.mid',\ -"39"='code/modules/synthesized_instruments/samples/obsolete/violin/D#3.mid',\ -"40"='code/modules/synthesized_instruments/samples/obsolete/violin/En3.mid',\ -"41"='code/modules/synthesized_instruments/samples/obsolete/violin/Fn3.mid',\ -"42"='code/modules/synthesized_instruments/samples/obsolete/violin/F#3.mid',\ -"43"='code/modules/synthesized_instruments/samples/obsolete/violin/Gn3.mid',\ -"44"='code/modules/synthesized_instruments/samples/obsolete/violin/G#3.mid',\ -"45"='code/modules/synthesized_instruments/samples/obsolete/violin/An3.mid',\ -"46"='code/modules/synthesized_instruments/samples/obsolete/violin/A#3.mid',\ -"47"='code/modules/synthesized_instruments/samples/obsolete/violin/Bn3.mid',\ -"48"='code/modules/synthesized_instruments/samples/obsolete/violin/Cn4.mid',\ -"49"='code/modules/synthesized_instruments/samples/obsolete/violin/C#4.mid',\ -"50"='code/modules/synthesized_instruments/samples/obsolete/violin/Dn4.mid',\ -"51"='code/modules/synthesized_instruments/samples/obsolete/violin/D#4.mid',\ -"52"='code/modules/synthesized_instruments/samples/obsolete/violin/En4.mid',\ -"53"='code/modules/synthesized_instruments/samples/obsolete/violin/Fn4.mid',\ -"54"='code/modules/synthesized_instruments/samples/obsolete/violin/F#4.mid',\ -"55"='code/modules/synthesized_instruments/samples/obsolete/violin/Gn4.mid',\ -"56"='code/modules/synthesized_instruments/samples/obsolete/violin/G#4.mid',\ -"57"='code/modules/synthesized_instruments/samples/obsolete/violin/An4.mid',\ -"58"='code/modules/synthesized_instruments/samples/obsolete/violin/A#4.mid',\ -"59"='code/modules/synthesized_instruments/samples/obsolete/violin/Bn4.mid',\ -"60"='code/modules/synthesized_instruments/samples/obsolete/violin/Cn5.mid',\ -"61"='code/modules/synthesized_instruments/samples/obsolete/violin/C#5.mid',\ -"62"='code/modules/synthesized_instruments/samples/obsolete/violin/Dn5.mid',\ -"63"='code/modules/synthesized_instruments/samples/obsolete/violin/D#5.mid',\ -"64"='code/modules/synthesized_instruments/samples/obsolete/violin/En5.mid',\ -"65"='code/modules/synthesized_instruments/samples/obsolete/violin/Fn5.mid',\ -"66"='code/modules/synthesized_instruments/samples/obsolete/violin/F#5.mid',\ -"67"='code/modules/synthesized_instruments/samples/obsolete/violin/Gn5.mid',\ -"68"='code/modules/synthesized_instruments/samples/obsolete/violin/G#5.mid',\ -"69"='code/modules/synthesized_instruments/samples/obsolete/violin/An5.mid',\ -"70"='code/modules/synthesized_instruments/samples/obsolete/violin/A#5.mid',\ -"71"='code/modules/synthesized_instruments/samples/obsolete/violin/Bn5.mid',\ -"72"='code/modules/synthesized_instruments/samples/obsolete/violin/Cn6.mid',\ -"73"='code/modules/synthesized_instruments/samples/obsolete/violin/C#6.mid',\ -"74"='code/modules/synthesized_instruments/samples/obsolete/violin/Dn6.mid',\ -"75"='code/modules/synthesized_instruments/samples/obsolete/violin/D#6.mid',\ -"76"='code/modules/synthesized_instruments/samples/obsolete/violin/En6.mid',\ -"77"='code/modules/synthesized_instruments/samples/obsolete/violin/Fn6.mid',\ -"78"='code/modules/synthesized_instruments/samples/obsolete/violin/F#6.mid',\ -"79"='code/modules/synthesized_instruments/samples/obsolete/violin/Gn6.mid',\ -"80"='code/modules/synthesized_instruments/samples/obsolete/violin/G#6.mid',\ -"81"='code/modules/synthesized_instruments/samples/obsolete/violin/An6.mid',\ -"82"='code/modules/synthesized_instruments/samples/obsolete/violin/A#6.mid',\ -"83"='code/modules/synthesized_instruments/samples/obsolete/violin/Bn6.mid',\ -"84"='code/modules/synthesized_instruments/samples/obsolete/violin/Cn7.mid',\ -"85"='code/modules/synthesized_instruments/samples/obsolete/violin/C#7.mid',\ -"86"='code/modules/synthesized_instruments/samples/obsolete/violin/Dn7.mid',\ -"87"='code/modules/synthesized_instruments/samples/obsolete/violin/D#7.mid',\ -"88"='code/modules/synthesized_instruments/samples/obsolete/violin/En7.mid',\ -"89"='code/modules/synthesized_instruments/samples/obsolete/violin/Fn7.mid',\ -"90"='code/modules/synthesized_instruments/samples/obsolete/violin/F#7.mid',\ -"91"='code/modules/synthesized_instruments/samples/obsolete/violin/Gn7.mid',\ -"92"='code/modules/synthesized_instruments/samples/obsolete/violin/G#7.mid',\ -"93"='code/modules/synthesized_instruments/samples/obsolete/violin/An7.mid',\ -"94"='code/modules/synthesized_instruments/samples/obsolete/violin/A#7.mid',\ -"95"='code/modules/synthesized_instruments/samples/obsolete/violin/Bn7.mid',\ -"96"='code/modules/synthesized_instruments/samples/obsolete/violin/Cn8.mid',\ -"97"='code/modules/synthesized_instruments/samples/obsolete/violin/C#8.mid',\ -"98"='code/modules/synthesized_instruments/samples/obsolete/violin/Dn8.mid',\ -"99"='code/modules/synthesized_instruments/samples/obsolete/violin/D#8.mid',\ -"100"='code/modules/synthesized_instruments/samples/obsolete/violin/En8.mid',\ -"101"='code/modules/synthesized_instruments/samples/obsolete/violin/Fn8.mid',\ -"102"='code/modules/synthesized_instruments/samples/obsolete/violin/F#8.mid',\ -"103"='code/modules/synthesized_instruments/samples/obsolete/violin/Gn8.mid',\ -"104"='code/modules/synthesized_instruments/samples/obsolete/violin/G#8.mid',\ -"105"='code/modules/synthesized_instruments/samples/obsolete/violin/An8.mid',\ -"106"='code/modules/synthesized_instruments/samples/obsolete/violin/A#8.mid',\ -"107"='code/modules/synthesized_instruments/samples/obsolete/violin/Bn8.mid') \ No newline at end of file diff --git a/code/modules/synthesized_instruments/instrument_data/organ.dm b/code/modules/synthesized_instruments/instrument_data/organ.dm deleted file mode 100644 index 9c898e92a73d4..0000000000000 --- a/code/modules/synthesized_instruments/instrument_data/organ.dm +++ /dev/null @@ -1,47 +0,0 @@ -/datum/instrument/organ - name = "Generic organ" - category = "Organ" - - -/datum/instrument/organ/crisis_church - name = "Crisis Church Organ" - id = "crichugan" - samples = list("36"='code/modules/synthesized_instruments/samples/organ/crisis_church/c2.ogg', - "48"='code/modules/synthesized_instruments/samples/organ/crisis_church/c3.ogg', - "60"='code/modules/synthesized_instruments/samples/organ/crisis_church/c4.ogg', - "72"='code/modules/synthesized_instruments/samples/organ/crisis_church/c5.ogg') - - -/datum/instrument/organ/crisis_hammond - name = "Crisis Hammond Organ" - id = "crihamgan" - samples = list("36"='code/modules/synthesized_instruments/samples/organ/crisis_hammond/c2.ogg', - "48"='code/modules/synthesized_instruments/samples/organ/crisis_hammond/c3.ogg', - "60"='code/modules/synthesized_instruments/samples/organ/crisis_hammond/c4.ogg', - "72"='code/modules/synthesized_instruments/samples/organ/crisis_hammond/c5.ogg') - - -/datum/instrument/organ/crisis_accordian - name = "Crisis Accordian" - id = "crack" - samples = list("36"='code/modules/synthesized_instruments/samples/organ/crisis_accordian/c2.ogg', - "48"='code/modules/synthesized_instruments/samples/organ/crisis_accordian/c3.ogg', - "60"='code/modules/synthesized_instruments/samples/organ/crisis_accordian/c4.ogg', - "72"='code/modules/synthesized_instruments/samples/organ/crisis_accordian/c5.ogg') - - -/datum/instrument/organ/crisis_harmonica - name = "Crisis Harmonica" - id = "crharmony" - samples = list("48"='code/modules/synthesized_instruments/samples/organ/crisis_harmonica/c3.ogg', - "60"='code/modules/synthesized_instruments/samples/organ/crisis_harmonica/c4.ogg', - "72"='code/modules/synthesized_instruments/samples/organ/crisis_harmonica/c5.ogg') - - -/datum/instrument/organ/crisis_tango_accordian - name = "Crisis Tango Accordian" - id = "crtango" - samples = list("36"='code/modules/synthesized_instruments/samples/organ/crisis_tangaccordian/c2.ogg', - "48"='code/modules/synthesized_instruments/samples/organ/crisis_tangaccordian/c3.ogg', - "60"='code/modules/synthesized_instruments/samples/organ/crisis_tangaccordian/c4.ogg', - "72"='code/modules/synthesized_instruments/samples/organ/crisis_tangaccordian/c5.ogg') \ No newline at end of file diff --git a/code/modules/synthesized_instruments/instrument_data/piano.dm b/code/modules/synthesized_instruments/instrument_data/piano.dm deleted file mode 100644 index ea6083e6dc223..0000000000000 --- a/code/modules/synthesized_instruments/instrument_data/piano.dm +++ /dev/null @@ -1,60 +0,0 @@ -/datum/instrument/piano - name = "Generic piano" - category = "Piano" - - -/datum/instrument/piano/fluid_piano - name = "FluidR3 Grand Piano" - id = "r3grand" - samples = list("36"='code/modules/synthesized_instruments/samples/piano/fluid_piano/c2.ogg', - "48"='code/modules/synthesized_instruments/samples/piano/fluid_piano/c3.ogg', - "60"='code/modules/synthesized_instruments/samples/piano/fluid_piano/c4.ogg', - "72"='code/modules/synthesized_instruments/samples/piano/fluid_piano/c5.ogg', - "84"='code/modules/synthesized_instruments/samples/piano/fluid_piano/c6.ogg', - "96"='code/modules/synthesized_instruments/samples/piano/fluid_piano/c7.ogg', - "108"='code/modules/synthesized_instruments/samples/piano/fluid_piano/c8.ogg') - - -/datum/instrument/piano/fluid_harpsichord - name = "FluidR3 Harpsichord" - id = "r3harpsi" - samples = list("36"='code/modules/synthesized_instruments/samples/piano/fluid_harpsi/c2.ogg', - "48"='code/modules/synthesized_instruments/samples/piano/fluid_harpsi/c3.ogg', - "60"='code/modules/synthesized_instruments/samples/piano/fluid_harpsi/c4.ogg', - "72"='code/modules/synthesized_instruments/samples/piano/fluid_harpsi/c5.ogg', - "84"='code/modules/synthesized_instruments/samples/piano/fluid_harpsi/c6.ogg', - "96"='code/modules/synthesized_instruments/samples/piano/fluid_harpsi/c7.ogg', - "108"='code/modules/synthesized_instruments/samples/piano/fluid_harpsi/c8.ogg') - - -/datum/instrument/piano/crisis_harpsichord - name = "Crisis Harpsichord" - id = "crharpsi" - samples = list("36"='code/modules/synthesized_instruments/samples/piano/crisis_harpsichord/c2.ogg', - "48"='code/modules/synthesized_instruments/samples/piano/crisis_harpsichord/c3.ogg', - "60"='code/modules/synthesized_instruments/samples/piano/crisis_harpsichord/c4.ogg', - "72"='code/modules/synthesized_instruments/samples/piano/crisis_harpsichord/c5.ogg') - - -/datum/instrument/piano/crisis_grandpiano_uni - name = "Crisis Grand Piano One" - id = "crgrand1" - samples = list("36"='code/modules/synthesized_instruments/samples/piano/crisis_grand_piano/c2.ogg', - "48"='code/modules/synthesized_instruments/samples/piano/crisis_grand_piano/c3.ogg', - "60"='code/modules/synthesized_instruments/samples/piano/crisis_grand_piano/c4.ogg', - "72"='code/modules/synthesized_instruments/samples/piano/crisis_grand_piano/c5.ogg', - "84"='code/modules/synthesized_instruments/samples/piano/crisis_grand_piano/c6.ogg', - "96"='code/modules/synthesized_instruments/samples/piano/crisis_grand_piano/c7.ogg', - "108"='code/modules/synthesized_instruments/samples/piano/crisis_grand_piano/c8.ogg') - - -/datum/instrument/piano/crisis_brightpiano_uni - name = "Crisis Bright Piano One" - id = "crbright1" - samples = list("36"='code/modules/synthesized_instruments/samples/piano/crisis_bright_piano/c2.ogg', - "48"='code/modules/synthesized_instruments/samples/piano/crisis_bright_piano/c3.ogg', - "60"='code/modules/synthesized_instruments/samples/piano/crisis_bright_piano/c4.ogg', - "72"='code/modules/synthesized_instruments/samples/piano/crisis_bright_piano/c5.ogg', - "84"='code/modules/synthesized_instruments/samples/piano/crisis_bright_piano/c6.ogg', - "96"='code/modules/synthesized_instruments/samples/piano/crisis_bright_piano/c7.ogg', - "108"='code/modules/synthesized_instruments/samples/piano/crisis_bright_piano/c8.ogg') \ No newline at end of file diff --git a/code/modules/synthesized_instruments/instruments.dm b/code/modules/synthesized_instruments/instruments.dm deleted file mode 100644 index 4ff6863d573eb..0000000000000 --- a/code/modules/synthesized_instruments/instruments.dm +++ /dev/null @@ -1,34 +0,0 @@ -/datum/instrument - var/name = "Generic instrument" // Name of the instrument - var/id = null // Used everywhere to distinguish between categories and actual data and to identify instruments - var/category = null // Used to categorize instruments - var/list/samples = list() // Write here however many samples, follow this syntax: "%note num%"='%sample file%' eg. "27"='synthesizer/e2.ogg'. Key must never be lower than 0 and higher than 127 - var/list/datum/sample_pair/sample_map = list() // Used to modulate sounds, don't fill yourself - - -/datum/instrument/proc/create_full_sample_deviation_map() - // Obtain samples - if (!src.samples.len) - CRASH("No samples were defined in [src.type]") - - var/list/delta_1 = list() - for (var/key in samples) delta_1 += text2num(key) - sortTim(delta_1, associative=0) - - for (var/indx1=1 to delta_1.len-1) - var/from_key = delta_1[indx1] - var/to_key = delta_1[indx1+1] - var/sample1 = src.samples[GLOB.musical_config.n2t(from_key)] - var/sample2 = src.samples[GLOB.musical_config.n2t(to_key)] - var/pivot = round((from_key+to_key)/2) - for (var/key = from_key to pivot) src.sample_map[GLOB.musical_config.n2t(key)] = new /datum/sample_pair(sample1, key-from_key) // [55+56] / 2 -> 55.5 -> 55 so no changes will occur - for (var/key = pivot+1 to to_key) src.sample_map[GLOB.musical_config.n2t(key)] = new /datum/sample_pair(sample2, key-to_key) - - // Fill in 0 -- first key and last key -- 127 - var/first_key = delta_1[1] - var/last_key = delta_1[delta_1.len] - var/first_sample = src.samples[GLOB.musical_config.n2t(first_key)] - var/last_sample = src.samples[GLOB.musical_config.n2t(last_key)] - for (var/key=0 to first_key-1) src.sample_map[GLOB.musical_config.n2t(key)] = new /datum/sample_pair(first_sample, key-first_key) - for (var/key=last_key to 127) src.sample_map[GLOB.musical_config.n2t(key)] = new /datum/sample_pair(last_sample, key-last_key) - return src.samples \ No newline at end of file diff --git a/code/modules/synthesized_instruments/real_instruments.dm b/code/modules/synthesized_instruments/real_instruments.dm deleted file mode 100644 index ae86d772299de..0000000000000 --- a/code/modules/synthesized_instruments/real_instruments.dm +++ /dev/null @@ -1,304 +0,0 @@ -//This is the combination of logic pertaining music -//An atom should use the logic and call it as it wants -/datum/real_instrument - var/datum/instrument/instruments - var/datum/sound_player/player - var/datum/nano_module/song_editor/song_editor - var/datum/nano_module/usage_info/usage_info - var/maximum_lines - var/maximum_line_length - var/obj/owner - var/datum/nano_module/env_editor/env_editor - var/datum/nano_module/echo_editor/echo_editor - -/datum/real_instrument/New(obj/who, datum/sound_player/how, datum/instrument/what) - player = how - owner = who - maximum_lines = GLOB.musical_config.max_lines - maximum_line_length = GLOB.musical_config.max_line_length - instruments = what //This can be a list, or it can also not be one - -/datum/real_instrument/proc/Topic_call(href, href_list, usr) - var/target = href_list["target"] - var/value = text2num(href_list["value"]) - if (href_list["value"] && !isnum(value)) - to_chat(usr, "Non-numeric value was given") - return 0 - - - switch (target) - if ("tempo") src.player.song.tempo = src.player.song.sanitize_tempo(src.player.song.tempo + value*world.tick_lag) - if ("play") - src.player.song.playing = value - if (src.player.song.playing) - src.player.song.play_song(usr) - if ("newsong") - src.player.song.lines.Cut() - src.player.song.tempo = src.player.song.sanitize_tempo(5) // default 120 BPM - if ("import") - var/t = "" - do - t = html_encode(input(usr, "Please paste the entire song, formatted:", text("[]", owner.name), t) as message) - if(!CanInteractWith(usr, owner, GLOB.physical_state)) - return - - if(length(t) >= 2*src.maximum_lines*src.maximum_line_length) - var/cont = input(usr, "Your message is too long! Would you like to continue editing it?", "", "yes") in list("yes", "no") - if(!CanInteractWith(usr, owner, GLOB.physical_state)) - return - if(cont == "no") - break - while(length(t) > 2*src.maximum_lines*src.maximum_line_length) - if (length(t)) - src.player.song.lines = splittext(t, "\n") - if(copytext_char(src.player.song.lines[1],1,6) == "BPM: ") - if(text2num(copytext_char(src.player.song.lines[1],6)) != 0) - src.player.song.tempo = src.player.song.sanitize_tempo(600 / text2num(copytext_char(src.player.song.lines[1],6))) - src.player.song.lines.Cut(1,2) - else - src.player.song.tempo = src.player.song.sanitize_tempo(5) - else - src.player.song.tempo = src.player.song.sanitize_tempo(5) // default 120 BPM - if(src.player.song.lines.len > maximum_lines) - to_chat(usr,"Too many lines!") - src.player.song.lines.Cut(maximum_lines+1) - var/linenum = 1 - for(var/l in src.player.song.lines) - if(length(l) > maximum_line_length) - to_chat(usr, "Line [linenum] too long!") - src.player.song.lines.Remove(l) - else - linenum++ - if ("show_song_editor") - if (!src.song_editor) - src.song_editor = new (host = src.owner, song = src.player.song) - src.song_editor.ui_interact(usr) - - if ("show_usage") - if (!src.usage_info) - src.usage_info = new (owner, src.player) - src.usage_info.ui_interact(usr) - if ("volume") - src.player.volume = min(max(min(player.volume+text2num(value), 100), 0), player.max_volume) - if ("transposition") - src.player.song.transposition = max(min(player.song.transposition+value, GLOB.musical_config.highest_transposition), GLOB.musical_config.lowest_transposition) - if ("min_octave") - src.player.song.octave_range_min = max(min(player.song.octave_range_min+value, GLOB.musical_config.highest_octave), GLOB.musical_config.lowest_octave) - src.player.song.octave_range_max = max(player.song.octave_range_max, player.song.octave_range_min) - if ("max_octave") - src.player.song.octave_range_max = max(min(player.song.octave_range_max+value, GLOB.musical_config.highest_octave), GLOB.musical_config.lowest_octave) - src.player.song.octave_range_min = min(player.song.octave_range_max, player.song.octave_range_min) - if ("sustain_timer") - src.player.song.sustain_timer = max(min(player.song.sustain_timer+value, GLOB.musical_config.longest_sustain_timer), 1) - if ("soft_coeff") - var/new_coeff = input(usr, "from [GLOB.musical_config.gentlest_drop] to [GLOB.musical_config.steepest_drop]") as num - if(!CanInteractWith(usr, owner, GLOB.physical_state)) - return - new_coeff = round(min(max(new_coeff, GLOB.musical_config.gentlest_drop), GLOB.musical_config.steepest_drop), 0.001) - src.player.song.soft_coeff = new_coeff - if ("instrument") - if (!islist(instruments)) - return - var/list/as_list = instruments - var/list/categories = list() - for (var/key in as_list) - var/datum/instrument/instrument = instruments[key] - categories |= instrument.category - - var/category = input(usr, "Choose a category") as null|anything in categories - if(!CanInteractWith(usr, owner, GLOB.physical_state)) - return - var/list/instruments_available = list() - for (var/key in as_list) - var/datum/instrument/instrument = instruments[key] - if (instrument.category == category) - instruments_available += key - - var/new_instrument = input(usr, "Choose an instrument") as null|anything in instruments_available - if(!CanInteractWith(usr, owner, GLOB.physical_state)) - return - if (new_instrument) - src.player.song.instrument_data = instruments[new_instrument] - if ("autorepeat") src.player.song.autorepeat = value - if ("decay") src.player.song.linear_decay = value - if ("echo") src.player.apply_echo = value - if ("show_env_editor") - if (GLOB.musical_config.env_settings_available) - if (!src.env_editor) - src.env_editor = new (src.player) - src.env_editor.ui_interact(usr) - else - to_chat(usr, "Virtual environment is disabled") - - if ("show_echo_editor") - if (!src.echo_editor) - src.echo_editor = new (src.player) - src.echo_editor.ui_interact(usr) - - if ("select_env") - if (value in -1 to 26) - src.player.virtual_environment_selected = round(value) - else - return 0 - - return 1 - - - -/datum/real_instrument/proc/ui_call(mob/user, ui_key, var/datum/nanoui/ui = null, var/force_open = 0) - var/list/data - data = list( - "playback" = list( - "playing" = src.player.song.playing, - "autorepeat" = src.player.song.autorepeat, - ), - "basic_options" = list( - "cur_instrument" = src.player.song.instrument_data.name, - "volume" = src.player.volume, - "BPM" = round(600 / src.player.song.tempo), - "transposition" = src.player.song.transposition, - "octave_range" = list( - "min" = src.player.song.octave_range_min, - "max" = src.player.song.octave_range_max - ) - ), - "advanced_options" = list( - "all_environments" = GLOB.musical_config.all_environments, - "selected_environment" = GLOB.musical_config.id_to_environment(src.player.virtual_environment_selected), - "apply_echo" = src.player.apply_echo - ), - "sustain" = list( - "linear_decay_active" = src.player.song.linear_decay, - "sustain_timer" = src.player.song.sustain_timer, - "soft_coeff" = src.player.song.soft_coeff - ), - "show" = list( - "playback" = src.player.song.lines.len > 0, - "custom_env_options" = GLOB.musical_config.is_custom_env(src.player.virtual_environment_selected), - "env_settings" = GLOB.musical_config.env_settings_available - ), - "status" = list( - "channels" = src.player.song.available_channels, - "events" = src.player.event_manager.events.len, - "max_channels" = GLOB.musical_config.channels_per_instrument, - "max_events" = GLOB.musical_config.max_events, - ) - ) - - - ui = SSnano.try_update_ui(user, src, ui_key, ui, data, force_open) - if (!ui) - ui = new (user, src.owner, ui_key, "synthesizer.tmpl", owner.name, 600, 800) - ui.set_initial_data(data) - ui.open() - ui.set_auto_update(1) - - - -/datum/real_instrument/Destroy() - QDEL_NULL(player) - owner = null - return ..() - -/obj/structure/synthesized_instrument - var/datum/real_instrument/real_instrument - icon = 'icons/obj/musician.dmi' - //Initialization data - var/datum/instrument/instruments = list() - var/path = /datum/instrument - var/sound_player = /datum/sound_player - -/obj/structure/synthesized_instrument/Initialize() - . = ..() - for (var/type in typesof(path)) - var/datum/instrument/new_instrument = new type - if (!new_instrument.id) continue - new_instrument.create_full_sample_deviation_map() - src.instruments[new_instrument.name] = new_instrument - src.real_instrument = new /datum/real_instrument(src, new sound_player(src, instruments[pick(instruments)]), instruments) - -/obj/structure/synthesized_instrument/Destroy() - QDEL_NULL(src.real_instrument) - if (islist(instruments)) - var/list/as_list = instruments - for (var/key in as_list) - qdel(as_list[key]) - instruments = null - . = ..() - - -/obj/structure/synthesized_instrument/attack_hand(mob/user) - src.interact(user) - - -/obj/structure/synthesized_instrument/interact(mob/user) // CONDITIONS ..(user) that shit in subclasses - src.ui_interact(user) - - -/obj/structure/synthesized_instrument/ui_interact(mob/user, ui_key = "instrument", var/datum/nanoui/ui = null, var/force_open = 0) - real_instrument.ui_call(user,ui_key,ui,force_open) - - -/obj/structure/synthesized_instrument/proc/shouldStopPlaying(mob/user) - return 0 - - -/obj/structure/synthesized_instrument/Topic(href, href_list) - if (..()) - return 1 - - return real_instrument.Topic_call(href, href_list, usr) - - -//////////////////////// -//DEVICE VERSION -//////////////////////// - - -/obj/item/device/synthesized_instrument - var/datum/real_instrument/real_instrument - icon = 'icons/obj/musician.dmi' - var/datum/instrument/instruments = list() - var/path = /datum/instrument - var/sound_player = /datum/sound_player - -/obj/item/device/synthesized_instrument/Initialize() - . = ..() - for (var/type in typesof(path)) - var/datum/instrument/new_instrument = new type - if (!new_instrument.id) continue - new_instrument.create_full_sample_deviation_map() - src.instruments[new_instrument.name] = new_instrument - src.real_instrument = new /datum/real_instrument(src, new sound_player(src, instruments[pick(instruments)]), instruments) - -/obj/item/device/synthesized_instrument/Destroy() - QDEL_NULL(src.real_instrument) - if (islist(instruments)) - var/list/as_list = instruments - for (var/key in as_list) - qdel(as_list[key]) - instruments = null - . = ..() - - -/obj/item/device/synthesized_instrument/attack_self(mob/user as mob) - src.interact(user) - - -/obj/item/device/synthesized_instrument/interact(mob/user) // CONDITIONS ..(user) that shit in subclasses - src.ui_interact(user) - - -/obj/item/device/synthesized_instrument/ui_interact(mob/user, ui_key = "instrument", var/datum/nanoui/ui = null, var/force_open = 0) - if (real_instrument) - real_instrument.ui_call(user,ui_key,ui,force_open) - - -/obj/item/device/synthesized_instrument/proc/shouldStopPlaying(mob/user) - return !(src && in_range(src, user)) - -/obj/item/device/synthesized_instrument/Topic(href, href_list) - if (..()) - return 1 - - return real_instrument.Topic_call(href, href_list, usr) diff --git a/code/modules/synthesized_instruments/real_instruments/Guitar/guitar.dm b/code/modules/synthesized_instruments/real_instruments/Guitar/guitar.dm deleted file mode 100644 index 18d5ad2ea9f46..0000000000000 --- a/code/modules/synthesized_instruments/real_instruments/Guitar/guitar.dm +++ /dev/null @@ -1,20 +0,0 @@ -/obj/item/device/synthesized_instrument/guitar - name = "guitar" - desc = "A wooden musical instrument with six strings. This one looks like it may actually work." - icon = 'icons/obj/musician.dmi' - icon_state = "guitar" - item_state = "guitar" - slot_flags = SLOT_BACK - sound_player = /datum/sound_player/synthesizer - path = /datum/instrument/guitar/clean_crisis - - -/obj/item/device/synthesized_instrument/guitar/multi - name = "Polyguitar" - desc = "An instrument for a more ass-kicking era." - icon = 'icons/obj/musician.dmi' - icon_state = "eguitar" - item_state = "eguitar" - slot_flags = SLOT_BACK - sound_player = /datum/sound_player/synthesizer - path = /datum/instrument/guitar \ No newline at end of file diff --git a/code/modules/synthesized_instruments/real_instruments/Piano/piano.dm b/code/modules/synthesized_instruments/real_instruments/Piano/piano.dm deleted file mode 100644 index 9473e20298bd5..0000000000000 --- a/code/modules/synthesized_instruments/real_instruments/Piano/piano.dm +++ /dev/null @@ -1,10 +0,0 @@ -/obj/structure/synthesized_instrument/synthesizer/piano - name = "space piano" - desc = "A surprisingly high-tech piano with a digital display for modifying sound output." - icon_state = "piano" - path = /datum/instrument/piano - -/obj/random_multi/single_item/piano - name = "piano spawnpoint" - id = "spacepiano" - item_path = /obj/structure/synthesized_instrument/synthesizer/piano \ No newline at end of file diff --git a/code/modules/synthesized_instruments/real_instruments/Synthesizer/synthesizer.dm b/code/modules/synthesized_instruments/real_instruments/Synthesizer/synthesizer.dm deleted file mode 100644 index 3e0d3d861e5cd..0000000000000 --- a/code/modules/synthesized_instruments/real_instruments/Synthesizer/synthesizer.dm +++ /dev/null @@ -1,57 +0,0 @@ -//Synthesizer and minimoog. They work the same - -/datum/sound_player/synthesizer - volume = 40 - -/obj/structure/synthesized_instrument/synthesizer - name = "The Synthesizer 3.0" - desc = "This thing emits shockwaves as it plays. This is not good for your hearing." - icon_state = "synthesizer" - anchored = TRUE - density = TRUE - path = /datum/instrument - sound_player = /datum/sound_player/synthesizer - -/obj/structure/synthesized_instrument/synthesizer/attackby(obj/item/O, mob/user, params) - if (istype(O, /obj/item/wrench)) - if (!anchored && !isinspace()) - playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1) - to_chat(usr, " You begin to tighten \the [src] to the floor...") - if (do_after(user, 2 SECONDS, src, DO_PUBLIC_UNIQUE)) - if(!anchored && !isinspace()) - user.visible_message( \ - "[user] tightens \the [src]'s casters.", \ - " You tighten \the [src]'s casters. Now it can be played again.", \ - "You hear ratchet.") - src.anchored = TRUE - else if(anchored) - playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1) - to_chat(usr, " You begin to loosen \the [src]'s casters...") - if (do_after(user, 4 SECONDS, src, DO_PUBLIC_UNIQUE)) - if(anchored) - user.visible_message( \ - "[user] loosens \the [src]'s casters.", \ - " You loosen \the [src]. Now it can be pulled somewhere else.", \ - "You hear ratchet.") - src.anchored = FALSE - else - ..() - -/obj/structure/synthesized_instrument/synthesizer/shouldStopPlaying(mob/user) - return !((src && in_range(src, user) && src.anchored) || src.real_instrument.player.song.autorepeat) - - -//in-hand version -/obj/item/device/synthesized_instrument/synthesizer - name = "Synthesizer Mini" - desc = "The power of an entire orchestra in a handy midi keyboard format." - icon_state = "h_synthesizer" - item_state = "h_synthesizer" - slot_flags = SLOT_BACK - path = /datum/instrument - sound_player = /datum/sound_player/synthesizer - -/obj/structure/synthesized_instrument/synthesizer/minimoog - name = "space minimoog" - desc = "This is a minimoog, like a space piano, but more spacey!" - icon_state = "minimoog" diff --git a/code/modules/synthesized_instruments/real_instruments/Trumpet/trumpet.dm b/code/modules/synthesized_instruments/real_instruments/Trumpet/trumpet.dm deleted file mode 100644 index 60a9b75706628..0000000000000 --- a/code/modules/synthesized_instruments/real_instruments/Trumpet/trumpet.dm +++ /dev/null @@ -1,6 +0,0 @@ -/obj/item/device/synthesized_instrument/trumpet - name = "Omnitrumpet" - desc = "The Omnitrumptet series 400 with more than 30 sound samples and fully customizable high fidelity output provides the ultimate means to toot your own horn." - icon_state = "trumpet" - sound_player = /datum/sound_player/synthesizer - path = /datum/instrument/brass \ No newline at end of file diff --git a/code/modules/synthesized_instruments/real_instruments/Violin/violin.dm b/code/modules/synthesized_instruments/real_instruments/Violin/violin.dm deleted file mode 100644 index 8f27ba10eb1e7..0000000000000 --- a/code/modules/synthesized_instruments/real_instruments/Violin/violin.dm +++ /dev/null @@ -1,13 +0,0 @@ -/datum/sound_player/violin - volume = 25 - range = 10 //Kinda don't want this horrible thing to be heard from far away - -/obj/item/device/synthesized_instrument/violin - name = "violin" - desc = "A wooden musical instrument with four strings and a bow. \"The devil went down to space, he was looking for an assistant to grief.\"." - icon_state = "violin" - sound_player = /datum/sound_player/violin - path = /datum/instrument/obsolete/violin - -/obj/structure/synthesized_instrument/synthesizer/shouldStopPlaying(mob/user) - return !(src && in_range(src, user)) \ No newline at end of file diff --git a/code/modules/synthesized_instruments/samples/brass/crisis_brass/c2.ogg b/code/modules/synthesized_instruments/samples/brass/crisis_brass/c2.ogg deleted file mode 100644 index 9808431b25f95..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/brass/crisis_brass/c2.ogg and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/brass/crisis_brass/c3.ogg b/code/modules/synthesized_instruments/samples/brass/crisis_brass/c3.ogg deleted file mode 100644 index 4118cff81cd3f..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/brass/crisis_brass/c3.ogg and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/brass/crisis_brass/c4.ogg b/code/modules/synthesized_instruments/samples/brass/crisis_brass/c4.ogg deleted file mode 100644 index ae9e1361d2ad2..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/brass/crisis_brass/c4.ogg and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/brass/crisis_brass/c5.ogg b/code/modules/synthesized_instruments/samples/brass/crisis_brass/c5.ogg deleted file mode 100644 index f19ddd930011f..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/brass/crisis_brass/c5.ogg and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/brass/crisis_trombone/C2.ogg b/code/modules/synthesized_instruments/samples/brass/crisis_trombone/C2.ogg deleted file mode 100644 index d2c872d5a3206..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/brass/crisis_trombone/C2.ogg and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/brass/crisis_trombone/C3.ogg b/code/modules/synthesized_instruments/samples/brass/crisis_trombone/C3.ogg deleted file mode 100644 index e1e3fc8635586..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/brass/crisis_trombone/C3.ogg and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/brass/crisis_trombone/C4.ogg b/code/modules/synthesized_instruments/samples/brass/crisis_trombone/C4.ogg deleted file mode 100644 index 42c4aa755d815..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/brass/crisis_trombone/C4.ogg and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/brass/crisis_trombone/C5.ogg b/code/modules/synthesized_instruments/samples/brass/crisis_trombone/C5.ogg deleted file mode 100644 index 762d2868d0852..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/brass/crisis_trombone/C5.ogg and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/brass/crisis_trumpet/C4.ogg b/code/modules/synthesized_instruments/samples/brass/crisis_trumpet/C4.ogg deleted file mode 100644 index baf71063af5b3..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/brass/crisis_trumpet/C4.ogg and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/brass/crisis_trumpet/C5.ogg b/code/modules/synthesized_instruments/samples/brass/crisis_trumpet/C5.ogg deleted file mode 100644 index 92b4a11018461..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/brass/crisis_trumpet/C5.ogg and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/chromatic/fluid_celeste/C2.ogg b/code/modules/synthesized_instruments/samples/chromatic/fluid_celeste/C2.ogg deleted file mode 100644 index 5a50a5091c505..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/chromatic/fluid_celeste/C2.ogg and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/chromatic/fluid_celeste/C3.ogg b/code/modules/synthesized_instruments/samples/chromatic/fluid_celeste/C3.ogg deleted file mode 100644 index f086938260536..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/chromatic/fluid_celeste/C3.ogg and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/chromatic/fluid_celeste/C4.ogg b/code/modules/synthesized_instruments/samples/chromatic/fluid_celeste/C4.ogg deleted file mode 100644 index 1246bd534194f..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/chromatic/fluid_celeste/C4.ogg and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/chromatic/fluid_celeste/C5.ogg b/code/modules/synthesized_instruments/samples/chromatic/fluid_celeste/C5.ogg deleted file mode 100644 index 73680ce627f09..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/chromatic/fluid_celeste/C5.ogg and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/chromatic/fluid_celeste/C6.ogg b/code/modules/synthesized_instruments/samples/chromatic/fluid_celeste/C6.ogg deleted file mode 100644 index 72841fb1892a9..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/chromatic/fluid_celeste/C6.ogg and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/chromatic/fluid_celeste/C7.ogg b/code/modules/synthesized_instruments/samples/chromatic/fluid_celeste/C7.ogg deleted file mode 100644 index 47797e4c002fb..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/chromatic/fluid_celeste/C7.ogg and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/chromatic/fluid_celeste/C8.ogg b/code/modules/synthesized_instruments/samples/chromatic/fluid_celeste/C8.ogg deleted file mode 100644 index ea34703160d4f..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/chromatic/fluid_celeste/C8.ogg and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/chromatic/sgmbox/c2.ogg b/code/modules/synthesized_instruments/samples/chromatic/sgmbox/c2.ogg deleted file mode 100644 index 4b96dd3dd3ebd..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/chromatic/sgmbox/c2.ogg and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/chromatic/sgmbox/c3.ogg b/code/modules/synthesized_instruments/samples/chromatic/sgmbox/c3.ogg deleted file mode 100644 index 25daf5372e878..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/chromatic/sgmbox/c3.ogg and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/chromatic/sgmbox/c4.ogg b/code/modules/synthesized_instruments/samples/chromatic/sgmbox/c4.ogg deleted file mode 100644 index 9b989404e75eb..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/chromatic/sgmbox/c4.ogg and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/chromatic/sgmbox/c5.ogg b/code/modules/synthesized_instruments/samples/chromatic/sgmbox/c5.ogg deleted file mode 100644 index 7fa99d9278cfd..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/chromatic/sgmbox/c5.ogg and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/chromatic/vibraphone1/c2.ogg b/code/modules/synthesized_instruments/samples/chromatic/vibraphone1/c2.ogg deleted file mode 100644 index 64578a8fe1a9a..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/chromatic/vibraphone1/c2.ogg and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/chromatic/vibraphone1/c3.ogg b/code/modules/synthesized_instruments/samples/chromatic/vibraphone1/c3.ogg deleted file mode 100644 index d97230ce1f22b..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/chromatic/vibraphone1/c3.ogg and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/chromatic/vibraphone1/c4.ogg b/code/modules/synthesized_instruments/samples/chromatic/vibraphone1/c4.ogg deleted file mode 100644 index eb6f80654aef5..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/chromatic/vibraphone1/c4.ogg and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/chromatic/vibraphone1/c5.ogg b/code/modules/synthesized_instruments/samples/chromatic/vibraphone1/c5.ogg deleted file mode 100644 index 8f25ee2747f92..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/chromatic/vibraphone1/c5.ogg and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/guitar/crisis_clean/C2.ogg b/code/modules/synthesized_instruments/samples/guitar/crisis_clean/C2.ogg deleted file mode 100644 index 17bea8122c60d..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/guitar/crisis_clean/C2.ogg and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/guitar/crisis_clean/C3.ogg b/code/modules/synthesized_instruments/samples/guitar/crisis_clean/C3.ogg deleted file mode 100644 index 6dc0d8ad3876b..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/guitar/crisis_clean/C3.ogg and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/guitar/crisis_clean/C4.ogg b/code/modules/synthesized_instruments/samples/guitar/crisis_clean/C4.ogg deleted file mode 100644 index fbbcacb372744..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/guitar/crisis_clean/C4.ogg and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/guitar/crisis_clean/C5.ogg b/code/modules/synthesized_instruments/samples/guitar/crisis_clean/C5.ogg deleted file mode 100644 index f9bb3f6e92fdf..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/guitar/crisis_clean/C5.ogg and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/guitar/crisis_muted/C2.ogg b/code/modules/synthesized_instruments/samples/guitar/crisis_muted/C2.ogg deleted file mode 100644 index 777a38664f87a..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/guitar/crisis_muted/C2.ogg and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/guitar/crisis_muted/C3.ogg b/code/modules/synthesized_instruments/samples/guitar/crisis_muted/C3.ogg deleted file mode 100644 index c14aa5ec93f4f..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/guitar/crisis_muted/C3.ogg and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/guitar/crisis_muted/C4.ogg b/code/modules/synthesized_instruments/samples/guitar/crisis_muted/C4.ogg deleted file mode 100644 index b2a457b4967d0..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/guitar/crisis_muted/C4.ogg and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/guitar/crisis_muted/C5.ogg b/code/modules/synthesized_instruments/samples/guitar/crisis_muted/C5.ogg deleted file mode 100644 index c4f5aac8bf5e2..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/guitar/crisis_muted/C5.ogg and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/guitar/crisis_nylon/c2.ogg b/code/modules/synthesized_instruments/samples/guitar/crisis_nylon/c2.ogg deleted file mode 100644 index 6a8115f004b31..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/guitar/crisis_nylon/c2.ogg and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/guitar/crisis_nylon/c3.ogg b/code/modules/synthesized_instruments/samples/guitar/crisis_nylon/c3.ogg deleted file mode 100644 index 15ec741bb6cc1..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/guitar/crisis_nylon/c3.ogg and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/guitar/crisis_nylon/c4.ogg b/code/modules/synthesized_instruments/samples/guitar/crisis_nylon/c4.ogg deleted file mode 100644 index df4ef3fb79db7..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/guitar/crisis_nylon/c4.ogg and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/guitar/crisis_nylon/c5.ogg b/code/modules/synthesized_instruments/samples/guitar/crisis_nylon/c5.ogg deleted file mode 100644 index 961f4a6b90d43..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/guitar/crisis_nylon/c5.ogg and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/guitar/crisis_steel/c2.ogg b/code/modules/synthesized_instruments/samples/guitar/crisis_steel/c2.ogg deleted file mode 100644 index 06ccf6ae51f0f..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/guitar/crisis_steel/c2.ogg and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/guitar/crisis_steel/c3.ogg b/code/modules/synthesized_instruments/samples/guitar/crisis_steel/c3.ogg deleted file mode 100644 index 14756fb24932f..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/guitar/crisis_steel/c3.ogg and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/guitar/crisis_steel/c4.ogg b/code/modules/synthesized_instruments/samples/guitar/crisis_steel/c4.ogg deleted file mode 100644 index 544b324786398..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/guitar/crisis_steel/c4.ogg and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/guitar/crisis_steel/c5.ogg b/code/modules/synthesized_instruments/samples/guitar/crisis_steel/c5.ogg deleted file mode 100644 index df2dc8def5939..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/guitar/crisis_steel/c5.ogg and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/piano/A#1.ogg b/code/modules/synthesized_instruments/samples/obsolete/piano/A#1.ogg deleted file mode 100644 index b40cc7233343e..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/piano/A#1.ogg and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/piano/A#2.ogg b/code/modules/synthesized_instruments/samples/obsolete/piano/A#2.ogg deleted file mode 100644 index 2b0677d44ae90..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/piano/A#2.ogg and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/piano/A#3.ogg b/code/modules/synthesized_instruments/samples/obsolete/piano/A#3.ogg deleted file mode 100644 index e8fc263d8f42d..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/piano/A#3.ogg and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/piano/A#4.ogg b/code/modules/synthesized_instruments/samples/obsolete/piano/A#4.ogg deleted file mode 100644 index 8ba7c40d33105..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/piano/A#4.ogg and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/piano/A#5.ogg b/code/modules/synthesized_instruments/samples/obsolete/piano/A#5.ogg deleted file mode 100644 index 65c14d3320f5e..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/piano/A#5.ogg and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/piano/A#6.ogg b/code/modules/synthesized_instruments/samples/obsolete/piano/A#6.ogg deleted file mode 100644 index 88317f7d55cea..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/piano/A#6.ogg and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/piano/A#7.ogg b/code/modules/synthesized_instruments/samples/obsolete/piano/A#7.ogg deleted file mode 100644 index e7354522feeab..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/piano/A#7.ogg and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/piano/A#8.ogg b/code/modules/synthesized_instruments/samples/obsolete/piano/A#8.ogg deleted file mode 100644 index 7d8014c059aef..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/piano/A#8.ogg and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/piano/Ab1.ogg b/code/modules/synthesized_instruments/samples/obsolete/piano/Ab1.ogg deleted file mode 100644 index 0c5ae362163be..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/piano/Ab1.ogg and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/piano/Ab2.ogg b/code/modules/synthesized_instruments/samples/obsolete/piano/Ab2.ogg deleted file mode 100644 index 4dabf2cc82cc7..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/piano/Ab2.ogg and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/piano/Ab3.ogg b/code/modules/synthesized_instruments/samples/obsolete/piano/Ab3.ogg deleted file mode 100644 index beb96005de05f..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/piano/Ab3.ogg and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/piano/Ab4.ogg b/code/modules/synthesized_instruments/samples/obsolete/piano/Ab4.ogg deleted file mode 100644 index bfcf3018777f7..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/piano/Ab4.ogg and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/piano/Ab5.ogg b/code/modules/synthesized_instruments/samples/obsolete/piano/Ab5.ogg deleted file mode 100644 index b95acaf5a02ba..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/piano/Ab5.ogg and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/piano/Ab6.ogg b/code/modules/synthesized_instruments/samples/obsolete/piano/Ab6.ogg deleted file mode 100644 index 501f51b3e13c5..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/piano/Ab6.ogg and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/piano/Ab7.ogg b/code/modules/synthesized_instruments/samples/obsolete/piano/Ab7.ogg deleted file mode 100644 index b96f4e0766f12..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/piano/Ab7.ogg and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/piano/Ab8.ogg b/code/modules/synthesized_instruments/samples/obsolete/piano/Ab8.ogg deleted file mode 100644 index c4bd37195bd05..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/piano/Ab8.ogg and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/piano/An1.ogg b/code/modules/synthesized_instruments/samples/obsolete/piano/An1.ogg deleted file mode 100644 index 5698578e79654..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/piano/An1.ogg and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/piano/An2.ogg b/code/modules/synthesized_instruments/samples/obsolete/piano/An2.ogg deleted file mode 100644 index aaff9b8e657bc..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/piano/An2.ogg and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/piano/An3.ogg b/code/modules/synthesized_instruments/samples/obsolete/piano/An3.ogg deleted file mode 100644 index 16fe54be83657..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/piano/An3.ogg and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/piano/An4.ogg b/code/modules/synthesized_instruments/samples/obsolete/piano/An4.ogg deleted file mode 100644 index 52cfc701a0e4e..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/piano/An4.ogg and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/piano/An5.ogg b/code/modules/synthesized_instruments/samples/obsolete/piano/An5.ogg deleted file mode 100644 index ba4ad8ee61fe8..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/piano/An5.ogg and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/piano/An6.ogg b/code/modules/synthesized_instruments/samples/obsolete/piano/An6.ogg deleted file mode 100644 index 49be4e31a886d..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/piano/An6.ogg and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/piano/An7.ogg b/code/modules/synthesized_instruments/samples/obsolete/piano/An7.ogg deleted file mode 100644 index da5f477db78c3..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/piano/An7.ogg and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/piano/An8.ogg b/code/modules/synthesized_instruments/samples/obsolete/piano/An8.ogg deleted file mode 100644 index 32e5cb81e7438..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/piano/An8.ogg and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/piano/B#1.ogg b/code/modules/synthesized_instruments/samples/obsolete/piano/B#1.ogg deleted file mode 100644 index b82c6cff8a471..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/piano/B#1.ogg and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/piano/B#2.ogg b/code/modules/synthesized_instruments/samples/obsolete/piano/B#2.ogg deleted file mode 100644 index e218380629291..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/piano/B#2.ogg and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/piano/B#3.ogg b/code/modules/synthesized_instruments/samples/obsolete/piano/B#3.ogg deleted file mode 100644 index b4dd559a24ea4..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/piano/B#3.ogg and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/piano/B#4.ogg b/code/modules/synthesized_instruments/samples/obsolete/piano/B#4.ogg deleted file mode 100644 index 578c45e452e31..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/piano/B#4.ogg and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/piano/B#5.ogg b/code/modules/synthesized_instruments/samples/obsolete/piano/B#5.ogg deleted file mode 100644 index 6dfd56115ff25..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/piano/B#5.ogg and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/piano/B#6.ogg b/code/modules/synthesized_instruments/samples/obsolete/piano/B#6.ogg deleted file mode 100644 index 32996328c8b44..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/piano/B#6.ogg and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/piano/B#7.ogg b/code/modules/synthesized_instruments/samples/obsolete/piano/B#7.ogg deleted file mode 100644 index 89b771aa37511..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/piano/B#7.ogg and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/piano/B#8.ogg b/code/modules/synthesized_instruments/samples/obsolete/piano/B#8.ogg deleted file mode 100644 index cca99040dec77..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/piano/B#8.ogg and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/piano/Bb1.ogg b/code/modules/synthesized_instruments/samples/obsolete/piano/Bb1.ogg deleted file mode 100644 index c872abe1a974e..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/piano/Bb1.ogg and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/piano/Bb2.ogg b/code/modules/synthesized_instruments/samples/obsolete/piano/Bb2.ogg deleted file mode 100644 index acd54ab38822c..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/piano/Bb2.ogg and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/piano/Bb3.ogg b/code/modules/synthesized_instruments/samples/obsolete/piano/Bb3.ogg deleted file mode 100644 index 33bea9f0797da..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/piano/Bb3.ogg and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/piano/Bb4.ogg b/code/modules/synthesized_instruments/samples/obsolete/piano/Bb4.ogg deleted file mode 100644 index 736fa1fc8d2a6..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/piano/Bb4.ogg and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/piano/Bb5.ogg b/code/modules/synthesized_instruments/samples/obsolete/piano/Bb5.ogg deleted file mode 100644 index 38bddcf761080..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/piano/Bb5.ogg and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/piano/Bb6.ogg b/code/modules/synthesized_instruments/samples/obsolete/piano/Bb6.ogg deleted file mode 100644 index e7a042574575b..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/piano/Bb6.ogg and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/piano/Bb7.ogg b/code/modules/synthesized_instruments/samples/obsolete/piano/Bb7.ogg deleted file mode 100644 index 89441baba6cf4..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/piano/Bb7.ogg and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/piano/Bb8.ogg b/code/modules/synthesized_instruments/samples/obsolete/piano/Bb8.ogg deleted file mode 100644 index 49dce93253cc2..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/piano/Bb8.ogg and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/piano/Bn1.ogg b/code/modules/synthesized_instruments/samples/obsolete/piano/Bn1.ogg deleted file mode 100644 index 2ddf3f59b852c..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/piano/Bn1.ogg and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/piano/Bn2.ogg b/code/modules/synthesized_instruments/samples/obsolete/piano/Bn2.ogg deleted file mode 100644 index 92b49a24ca2f5..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/piano/Bn2.ogg and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/piano/Bn3.ogg b/code/modules/synthesized_instruments/samples/obsolete/piano/Bn3.ogg deleted file mode 100644 index 20aa8ca434a1e..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/piano/Bn3.ogg and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/piano/Bn4.ogg b/code/modules/synthesized_instruments/samples/obsolete/piano/Bn4.ogg deleted file mode 100644 index b2ecc85255a59..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/piano/Bn4.ogg and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/piano/Bn5.ogg b/code/modules/synthesized_instruments/samples/obsolete/piano/Bn5.ogg deleted file mode 100644 index e03af44292ee4..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/piano/Bn5.ogg and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/piano/Bn6.ogg b/code/modules/synthesized_instruments/samples/obsolete/piano/Bn6.ogg deleted file mode 100644 index 1acf0d94d033b..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/piano/Bn6.ogg and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/piano/Bn7.ogg b/code/modules/synthesized_instruments/samples/obsolete/piano/Bn7.ogg deleted file mode 100644 index b68372b4ab7be..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/piano/Bn7.ogg and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/piano/Bn8.ogg b/code/modules/synthesized_instruments/samples/obsolete/piano/Bn8.ogg deleted file mode 100644 index 5db915a607bb9..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/piano/Bn8.ogg and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/piano/C#1.ogg b/code/modules/synthesized_instruments/samples/obsolete/piano/C#1.ogg deleted file mode 100644 index dc3c859caee5b..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/piano/C#1.ogg and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/piano/C#2.ogg b/code/modules/synthesized_instruments/samples/obsolete/piano/C#2.ogg deleted file mode 100644 index 5a36e244a76eb..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/piano/C#2.ogg and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/piano/C#3.ogg b/code/modules/synthesized_instruments/samples/obsolete/piano/C#3.ogg deleted file mode 100644 index af3e49f21e4c7..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/piano/C#3.ogg and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/piano/C#4.ogg b/code/modules/synthesized_instruments/samples/obsolete/piano/C#4.ogg deleted file mode 100644 index 8b18a4ce418ac..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/piano/C#4.ogg and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/piano/C#5.ogg b/code/modules/synthesized_instruments/samples/obsolete/piano/C#5.ogg deleted file mode 100644 index 690bd2763e9cc..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/piano/C#5.ogg and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/piano/C#6.ogg b/code/modules/synthesized_instruments/samples/obsolete/piano/C#6.ogg deleted file mode 100644 index 3a27950bd3f79..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/piano/C#6.ogg and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/piano/C#7.ogg b/code/modules/synthesized_instruments/samples/obsolete/piano/C#7.ogg deleted file mode 100644 index 9a7bc071ead9c..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/piano/C#7.ogg and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/piano/C#8.ogg b/code/modules/synthesized_instruments/samples/obsolete/piano/C#8.ogg deleted file mode 100644 index 9adc2dbbbc57d..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/piano/C#8.ogg and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/piano/Cb2.ogg b/code/modules/synthesized_instruments/samples/obsolete/piano/Cb2.ogg deleted file mode 100644 index 7c36759c95a06..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/piano/Cb2.ogg and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/piano/Cb3.ogg b/code/modules/synthesized_instruments/samples/obsolete/piano/Cb3.ogg deleted file mode 100644 index b8569638545ff..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/piano/Cb3.ogg and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/piano/Cb4.ogg b/code/modules/synthesized_instruments/samples/obsolete/piano/Cb4.ogg deleted file mode 100644 index fb693c0cadbf3..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/piano/Cb4.ogg and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/piano/Cb5.ogg b/code/modules/synthesized_instruments/samples/obsolete/piano/Cb5.ogg deleted file mode 100644 index b114181e3fc61..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/piano/Cb5.ogg and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/piano/Cb6.ogg b/code/modules/synthesized_instruments/samples/obsolete/piano/Cb6.ogg deleted file mode 100644 index 42470f9f3a3ff..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/piano/Cb6.ogg and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/piano/Cb7.ogg b/code/modules/synthesized_instruments/samples/obsolete/piano/Cb7.ogg deleted file mode 100644 index adeb34cacdfc7..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/piano/Cb7.ogg and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/piano/Cb8.ogg b/code/modules/synthesized_instruments/samples/obsolete/piano/Cb8.ogg deleted file mode 100644 index 1f2cbb94dd2fd..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/piano/Cb8.ogg and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/piano/Cb9.ogg b/code/modules/synthesized_instruments/samples/obsolete/piano/Cb9.ogg deleted file mode 100644 index 25c0d646c3b1c..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/piano/Cb9.ogg and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/piano/Cn1.ogg b/code/modules/synthesized_instruments/samples/obsolete/piano/Cn1.ogg deleted file mode 100644 index e05b36d325241..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/piano/Cn1.ogg and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/piano/Cn2.ogg b/code/modules/synthesized_instruments/samples/obsolete/piano/Cn2.ogg deleted file mode 100644 index cc96f265705a1..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/piano/Cn2.ogg and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/piano/Cn3.ogg b/code/modules/synthesized_instruments/samples/obsolete/piano/Cn3.ogg deleted file mode 100644 index 6d2f2069278c5..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/piano/Cn3.ogg and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/piano/Cn4.ogg b/code/modules/synthesized_instruments/samples/obsolete/piano/Cn4.ogg deleted file mode 100644 index d0c0f4995edb6..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/piano/Cn4.ogg and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/piano/Cn5.ogg b/code/modules/synthesized_instruments/samples/obsolete/piano/Cn5.ogg deleted file mode 100644 index 1d95dfa099220..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/piano/Cn5.ogg and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/piano/Cn6.ogg b/code/modules/synthesized_instruments/samples/obsolete/piano/Cn6.ogg deleted file mode 100644 index f1e847d32f5bd..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/piano/Cn6.ogg and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/piano/Cn7.ogg b/code/modules/synthesized_instruments/samples/obsolete/piano/Cn7.ogg deleted file mode 100644 index 85cb1dd0fe968..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/piano/Cn7.ogg and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/piano/Cn8.ogg b/code/modules/synthesized_instruments/samples/obsolete/piano/Cn8.ogg deleted file mode 100644 index f081d91d8bb8e..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/piano/Cn8.ogg and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/piano/Cn9.ogg b/code/modules/synthesized_instruments/samples/obsolete/piano/Cn9.ogg deleted file mode 100644 index 06172ca6f10c3..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/piano/Cn9.ogg and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/piano/D#1.ogg b/code/modules/synthesized_instruments/samples/obsolete/piano/D#1.ogg deleted file mode 100644 index bd58c7dd75ab4..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/piano/D#1.ogg and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/piano/D#2.ogg b/code/modules/synthesized_instruments/samples/obsolete/piano/D#2.ogg deleted file mode 100644 index fc01076810a65..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/piano/D#2.ogg and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/piano/D#3.ogg b/code/modules/synthesized_instruments/samples/obsolete/piano/D#3.ogg deleted file mode 100644 index e437f44466305..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/piano/D#3.ogg and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/piano/D#4.ogg b/code/modules/synthesized_instruments/samples/obsolete/piano/D#4.ogg deleted file mode 100644 index 0804aa03de03d..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/piano/D#4.ogg and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/piano/D#5.ogg b/code/modules/synthesized_instruments/samples/obsolete/piano/D#5.ogg deleted file mode 100644 index 40889dbae51cc..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/piano/D#5.ogg and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/piano/D#6.ogg b/code/modules/synthesized_instruments/samples/obsolete/piano/D#6.ogg deleted file mode 100644 index 616481d2f90c4..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/piano/D#6.ogg and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/piano/D#7.ogg b/code/modules/synthesized_instruments/samples/obsolete/piano/D#7.ogg deleted file mode 100644 index 5c191fb7f696f..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/piano/D#7.ogg and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/piano/D#8.ogg b/code/modules/synthesized_instruments/samples/obsolete/piano/D#8.ogg deleted file mode 100644 index 5955ed7f8d066..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/piano/D#8.ogg and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/piano/Db1.ogg b/code/modules/synthesized_instruments/samples/obsolete/piano/Db1.ogg deleted file mode 100644 index a33554e4764fd..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/piano/Db1.ogg and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/piano/Db2.ogg b/code/modules/synthesized_instruments/samples/obsolete/piano/Db2.ogg deleted file mode 100644 index dd45c2f11da26..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/piano/Db2.ogg and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/piano/Db3.ogg b/code/modules/synthesized_instruments/samples/obsolete/piano/Db3.ogg deleted file mode 100644 index ebfa23bbc345e..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/piano/Db3.ogg and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/piano/Db4.ogg b/code/modules/synthesized_instruments/samples/obsolete/piano/Db4.ogg deleted file mode 100644 index 52486484ebf86..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/piano/Db4.ogg and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/piano/Db5.ogg b/code/modules/synthesized_instruments/samples/obsolete/piano/Db5.ogg deleted file mode 100644 index 8250bbb7cb698..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/piano/Db5.ogg and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/piano/Db6.ogg b/code/modules/synthesized_instruments/samples/obsolete/piano/Db6.ogg deleted file mode 100644 index 8ec394da17c88..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/piano/Db6.ogg and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/piano/Db7.ogg b/code/modules/synthesized_instruments/samples/obsolete/piano/Db7.ogg deleted file mode 100644 index 9a6c81dc343f1..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/piano/Db7.ogg and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/piano/Db8.ogg b/code/modules/synthesized_instruments/samples/obsolete/piano/Db8.ogg deleted file mode 100644 index 2790f603907ad..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/piano/Db8.ogg and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/piano/Dn1.ogg b/code/modules/synthesized_instruments/samples/obsolete/piano/Dn1.ogg deleted file mode 100644 index 89ac14cc14384..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/piano/Dn1.ogg and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/piano/Dn2.ogg b/code/modules/synthesized_instruments/samples/obsolete/piano/Dn2.ogg deleted file mode 100644 index bb5f18fbf75a1..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/piano/Dn2.ogg and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/piano/Dn3.ogg b/code/modules/synthesized_instruments/samples/obsolete/piano/Dn3.ogg deleted file mode 100644 index 6a54b7754994a..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/piano/Dn3.ogg and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/piano/Dn4.ogg b/code/modules/synthesized_instruments/samples/obsolete/piano/Dn4.ogg deleted file mode 100644 index 8f930b8b50d46..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/piano/Dn4.ogg and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/piano/Dn5.ogg b/code/modules/synthesized_instruments/samples/obsolete/piano/Dn5.ogg deleted file mode 100644 index 981d37e91011c..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/piano/Dn5.ogg and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/piano/Dn6.ogg b/code/modules/synthesized_instruments/samples/obsolete/piano/Dn6.ogg deleted file mode 100644 index 112f101bb2e82..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/piano/Dn6.ogg and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/piano/Dn7.ogg b/code/modules/synthesized_instruments/samples/obsolete/piano/Dn7.ogg deleted file mode 100644 index ff2724463ccdd..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/piano/Dn7.ogg and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/piano/Dn8.ogg b/code/modules/synthesized_instruments/samples/obsolete/piano/Dn8.ogg deleted file mode 100644 index 5e2523f1237fd..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/piano/Dn8.ogg and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/piano/E#1.ogg b/code/modules/synthesized_instruments/samples/obsolete/piano/E#1.ogg deleted file mode 100644 index c192032dc0f8a..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/piano/E#1.ogg and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/piano/E#2.ogg b/code/modules/synthesized_instruments/samples/obsolete/piano/E#2.ogg deleted file mode 100644 index da09b64979885..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/piano/E#2.ogg and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/piano/E#3.ogg b/code/modules/synthesized_instruments/samples/obsolete/piano/E#3.ogg deleted file mode 100644 index e7a2f935350d5..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/piano/E#3.ogg and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/piano/E#4.ogg b/code/modules/synthesized_instruments/samples/obsolete/piano/E#4.ogg deleted file mode 100644 index b3b14b7266d36..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/piano/E#4.ogg and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/piano/E#5.ogg b/code/modules/synthesized_instruments/samples/obsolete/piano/E#5.ogg deleted file mode 100644 index 08bc2cf5a8019..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/piano/E#5.ogg and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/piano/E#6.ogg b/code/modules/synthesized_instruments/samples/obsolete/piano/E#6.ogg deleted file mode 100644 index 6060576f36e85..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/piano/E#6.ogg and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/piano/E#7.ogg b/code/modules/synthesized_instruments/samples/obsolete/piano/E#7.ogg deleted file mode 100644 index 77a81ed57026e..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/piano/E#7.ogg and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/piano/E#8.ogg b/code/modules/synthesized_instruments/samples/obsolete/piano/E#8.ogg deleted file mode 100644 index 5502fedbdac76..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/piano/E#8.ogg and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/piano/Eb1.ogg b/code/modules/synthesized_instruments/samples/obsolete/piano/Eb1.ogg deleted file mode 100644 index 8923e11fd998b..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/piano/Eb1.ogg and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/piano/Eb2.ogg b/code/modules/synthesized_instruments/samples/obsolete/piano/Eb2.ogg deleted file mode 100644 index b61faa1737487..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/piano/Eb2.ogg and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/piano/Eb3.ogg b/code/modules/synthesized_instruments/samples/obsolete/piano/Eb3.ogg deleted file mode 100644 index bf80c6eeeb908..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/piano/Eb3.ogg and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/piano/Eb4.ogg b/code/modules/synthesized_instruments/samples/obsolete/piano/Eb4.ogg deleted file mode 100644 index fa991d11c52ce..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/piano/Eb4.ogg and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/piano/Eb5.ogg b/code/modules/synthesized_instruments/samples/obsolete/piano/Eb5.ogg deleted file mode 100644 index e63e0143a5828..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/piano/Eb5.ogg and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/piano/Eb6.ogg b/code/modules/synthesized_instruments/samples/obsolete/piano/Eb6.ogg deleted file mode 100644 index e3f6ccb4c46c2..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/piano/Eb6.ogg and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/piano/Eb7.ogg b/code/modules/synthesized_instruments/samples/obsolete/piano/Eb7.ogg deleted file mode 100644 index a7dc94edbd025..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/piano/Eb7.ogg and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/piano/Eb8.ogg b/code/modules/synthesized_instruments/samples/obsolete/piano/Eb8.ogg deleted file mode 100644 index f6a7f4665775e..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/piano/Eb8.ogg and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/piano/En1.ogg b/code/modules/synthesized_instruments/samples/obsolete/piano/En1.ogg deleted file mode 100644 index fbcb29c2de9ac..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/piano/En1.ogg and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/piano/En2.ogg b/code/modules/synthesized_instruments/samples/obsolete/piano/En2.ogg deleted file mode 100644 index b6f4f1a5e81fc..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/piano/En2.ogg and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/piano/En3.ogg b/code/modules/synthesized_instruments/samples/obsolete/piano/En3.ogg deleted file mode 100644 index 5f6ade5f1b4e9..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/piano/En3.ogg and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/piano/En4.ogg b/code/modules/synthesized_instruments/samples/obsolete/piano/En4.ogg deleted file mode 100644 index 0f567ffb98705..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/piano/En4.ogg and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/piano/En5.ogg b/code/modules/synthesized_instruments/samples/obsolete/piano/En5.ogg deleted file mode 100644 index 05719f2a2d410..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/piano/En5.ogg and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/piano/En6.ogg b/code/modules/synthesized_instruments/samples/obsolete/piano/En6.ogg deleted file mode 100644 index b1295b67ee5be..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/piano/En6.ogg and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/piano/En7.ogg b/code/modules/synthesized_instruments/samples/obsolete/piano/En7.ogg deleted file mode 100644 index 0d97b93fbce0f..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/piano/En7.ogg and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/piano/En8.ogg b/code/modules/synthesized_instruments/samples/obsolete/piano/En8.ogg deleted file mode 100644 index f0ea5f1ec537f..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/piano/En8.ogg and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/piano/F#1.ogg b/code/modules/synthesized_instruments/samples/obsolete/piano/F#1.ogg deleted file mode 100644 index ad9e0a563ce73..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/piano/F#1.ogg and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/piano/F#2.ogg b/code/modules/synthesized_instruments/samples/obsolete/piano/F#2.ogg deleted file mode 100644 index b1e86bfeaa646..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/piano/F#2.ogg and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/piano/F#3.ogg b/code/modules/synthesized_instruments/samples/obsolete/piano/F#3.ogg deleted file mode 100644 index 53b56c5017d42..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/piano/F#3.ogg and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/piano/F#4.ogg b/code/modules/synthesized_instruments/samples/obsolete/piano/F#4.ogg deleted file mode 100644 index e9d71303a1aae..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/piano/F#4.ogg and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/piano/F#5.ogg b/code/modules/synthesized_instruments/samples/obsolete/piano/F#5.ogg deleted file mode 100644 index c4cc3165ab1f7..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/piano/F#5.ogg and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/piano/F#6.ogg b/code/modules/synthesized_instruments/samples/obsolete/piano/F#6.ogg deleted file mode 100644 index 09420951163ac..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/piano/F#6.ogg and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/piano/F#7.ogg b/code/modules/synthesized_instruments/samples/obsolete/piano/F#7.ogg deleted file mode 100644 index c37dc8fb37a97..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/piano/F#7.ogg and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/piano/F#8.ogg b/code/modules/synthesized_instruments/samples/obsolete/piano/F#8.ogg deleted file mode 100644 index 0241e9beaba83..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/piano/F#8.ogg and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/piano/Fb1.ogg b/code/modules/synthesized_instruments/samples/obsolete/piano/Fb1.ogg deleted file mode 100644 index fbcb29c2de9ac..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/piano/Fb1.ogg and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/piano/Fb2.ogg b/code/modules/synthesized_instruments/samples/obsolete/piano/Fb2.ogg deleted file mode 100644 index 4cece2d9cd09b..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/piano/Fb2.ogg and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/piano/Fb3.ogg b/code/modules/synthesized_instruments/samples/obsolete/piano/Fb3.ogg deleted file mode 100644 index 3675271a1579c..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/piano/Fb3.ogg and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/piano/Fb4.ogg b/code/modules/synthesized_instruments/samples/obsolete/piano/Fb4.ogg deleted file mode 100644 index 260877022749c..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/piano/Fb4.ogg and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/piano/Fb5.ogg b/code/modules/synthesized_instruments/samples/obsolete/piano/Fb5.ogg deleted file mode 100644 index f8016a6d247b7..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/piano/Fb5.ogg and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/piano/Fb6.ogg b/code/modules/synthesized_instruments/samples/obsolete/piano/Fb6.ogg deleted file mode 100644 index 397714bdaae0c..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/piano/Fb6.ogg and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/piano/Fb7.ogg b/code/modules/synthesized_instruments/samples/obsolete/piano/Fb7.ogg deleted file mode 100644 index d9f630f11d88d..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/piano/Fb7.ogg and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/piano/Fb8.ogg b/code/modules/synthesized_instruments/samples/obsolete/piano/Fb8.ogg deleted file mode 100644 index 28ae958d82ddd..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/piano/Fb8.ogg and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/piano/Fn1.ogg b/code/modules/synthesized_instruments/samples/obsolete/piano/Fn1.ogg deleted file mode 100644 index 9d10f8ccf6364..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/piano/Fn1.ogg and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/piano/Fn2.ogg b/code/modules/synthesized_instruments/samples/obsolete/piano/Fn2.ogg deleted file mode 100644 index 24cff105e646a..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/piano/Fn2.ogg and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/piano/Fn3.ogg b/code/modules/synthesized_instruments/samples/obsolete/piano/Fn3.ogg deleted file mode 100644 index 313c54b59ae4b..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/piano/Fn3.ogg and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/piano/Fn4.ogg b/code/modules/synthesized_instruments/samples/obsolete/piano/Fn4.ogg deleted file mode 100644 index 3331d67fbe9a5..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/piano/Fn4.ogg and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/piano/Fn5.ogg b/code/modules/synthesized_instruments/samples/obsolete/piano/Fn5.ogg deleted file mode 100644 index 72941715953d6..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/piano/Fn5.ogg and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/piano/Fn6.ogg b/code/modules/synthesized_instruments/samples/obsolete/piano/Fn6.ogg deleted file mode 100644 index 8218928c85e54..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/piano/Fn6.ogg and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/piano/Fn7.ogg b/code/modules/synthesized_instruments/samples/obsolete/piano/Fn7.ogg deleted file mode 100644 index b459e82acdd3f..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/piano/Fn7.ogg and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/piano/Fn8.ogg b/code/modules/synthesized_instruments/samples/obsolete/piano/Fn8.ogg deleted file mode 100644 index be144990590a3..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/piano/Fn8.ogg and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/piano/G#1.ogg b/code/modules/synthesized_instruments/samples/obsolete/piano/G#1.ogg deleted file mode 100644 index 3ef68c0d87fb3..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/piano/G#1.ogg and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/piano/G#2.ogg b/code/modules/synthesized_instruments/samples/obsolete/piano/G#2.ogg deleted file mode 100644 index 4d92169365586..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/piano/G#2.ogg and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/piano/G#3.ogg b/code/modules/synthesized_instruments/samples/obsolete/piano/G#3.ogg deleted file mode 100644 index 21a03c7805c9e..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/piano/G#3.ogg and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/piano/G#4.ogg b/code/modules/synthesized_instruments/samples/obsolete/piano/G#4.ogg deleted file mode 100644 index 070ad2b453253..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/piano/G#4.ogg and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/piano/G#5.ogg b/code/modules/synthesized_instruments/samples/obsolete/piano/G#5.ogg deleted file mode 100644 index 233256500fb02..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/piano/G#5.ogg and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/piano/G#6.ogg b/code/modules/synthesized_instruments/samples/obsolete/piano/G#6.ogg deleted file mode 100644 index 3c387fcfab031..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/piano/G#6.ogg and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/piano/G#7.ogg b/code/modules/synthesized_instruments/samples/obsolete/piano/G#7.ogg deleted file mode 100644 index 4ba6c8b658198..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/piano/G#7.ogg and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/piano/G#8.ogg b/code/modules/synthesized_instruments/samples/obsolete/piano/G#8.ogg deleted file mode 100644 index b847ab1c86b23..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/piano/G#8.ogg and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/piano/Gb1.ogg b/code/modules/synthesized_instruments/samples/obsolete/piano/Gb1.ogg deleted file mode 100644 index d53e3ea9d8ff1..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/piano/Gb1.ogg and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/piano/Gb2.ogg b/code/modules/synthesized_instruments/samples/obsolete/piano/Gb2.ogg deleted file mode 100644 index 0ceea3ecc8549..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/piano/Gb2.ogg and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/piano/Gb3.ogg b/code/modules/synthesized_instruments/samples/obsolete/piano/Gb3.ogg deleted file mode 100644 index 53b56c5017d42..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/piano/Gb3.ogg and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/piano/Gb4.ogg b/code/modules/synthesized_instruments/samples/obsolete/piano/Gb4.ogg deleted file mode 100644 index c982d7beaf0d1..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/piano/Gb4.ogg and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/piano/Gb5.ogg b/code/modules/synthesized_instruments/samples/obsolete/piano/Gb5.ogg deleted file mode 100644 index 787c19bed8d4a..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/piano/Gb5.ogg and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/piano/Gb6.ogg b/code/modules/synthesized_instruments/samples/obsolete/piano/Gb6.ogg deleted file mode 100644 index d5a5dbb2d1b01..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/piano/Gb6.ogg and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/piano/Gb7.ogg b/code/modules/synthesized_instruments/samples/obsolete/piano/Gb7.ogg deleted file mode 100644 index c6f92716803a6..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/piano/Gb7.ogg and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/piano/Gb8.ogg b/code/modules/synthesized_instruments/samples/obsolete/piano/Gb8.ogg deleted file mode 100644 index 85c0b70754532..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/piano/Gb8.ogg and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/piano/Gn1.ogg b/code/modules/synthesized_instruments/samples/obsolete/piano/Gn1.ogg deleted file mode 100644 index d2829a4c0b28d..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/piano/Gn1.ogg and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/piano/Gn2.ogg b/code/modules/synthesized_instruments/samples/obsolete/piano/Gn2.ogg deleted file mode 100644 index e657124c7171d..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/piano/Gn2.ogg and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/piano/Gn3.ogg b/code/modules/synthesized_instruments/samples/obsolete/piano/Gn3.ogg deleted file mode 100644 index c1e88555f1774..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/piano/Gn3.ogg and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/piano/Gn4.ogg b/code/modules/synthesized_instruments/samples/obsolete/piano/Gn4.ogg deleted file mode 100644 index bbae7fa3e8bc3..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/piano/Gn4.ogg and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/piano/Gn5.ogg b/code/modules/synthesized_instruments/samples/obsolete/piano/Gn5.ogg deleted file mode 100644 index 556cd6085a37a..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/piano/Gn5.ogg and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/piano/Gn6.ogg b/code/modules/synthesized_instruments/samples/obsolete/piano/Gn6.ogg deleted file mode 100644 index 6bf8c36013d43..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/piano/Gn6.ogg and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/piano/Gn7.ogg b/code/modules/synthesized_instruments/samples/obsolete/piano/Gn7.ogg deleted file mode 100644 index 0637492985e6b..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/piano/Gn7.ogg and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/piano/Gn8.ogg b/code/modules/synthesized_instruments/samples/obsolete/piano/Gn8.ogg deleted file mode 100644 index 85f89a198ea37..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/piano/Gn8.ogg and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/violin/A#1.mid b/code/modules/synthesized_instruments/samples/obsolete/violin/A#1.mid deleted file mode 100644 index 693b73f5420f1..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/violin/A#1.mid and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/violin/A#2.mid b/code/modules/synthesized_instruments/samples/obsolete/violin/A#2.mid deleted file mode 100644 index 40da5f3da1520..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/violin/A#2.mid and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/violin/A#3.mid b/code/modules/synthesized_instruments/samples/obsolete/violin/A#3.mid deleted file mode 100644 index 5bab6ccd63628..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/violin/A#3.mid and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/violin/A#4.mid b/code/modules/synthesized_instruments/samples/obsolete/violin/A#4.mid deleted file mode 100644 index dce830448ef8b..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/violin/A#4.mid and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/violin/A#5.mid b/code/modules/synthesized_instruments/samples/obsolete/violin/A#5.mid deleted file mode 100644 index fda796e27b90c..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/violin/A#5.mid and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/violin/A#6.mid b/code/modules/synthesized_instruments/samples/obsolete/violin/A#6.mid deleted file mode 100644 index 9e5da684f43c9..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/violin/A#6.mid and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/violin/A#7.mid b/code/modules/synthesized_instruments/samples/obsolete/violin/A#7.mid deleted file mode 100644 index 215c56cbe7eec..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/violin/A#7.mid and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/violin/A#8.mid b/code/modules/synthesized_instruments/samples/obsolete/violin/A#8.mid deleted file mode 100644 index 4b55c34691f7f..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/violin/A#8.mid and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/violin/Ab1.mid b/code/modules/synthesized_instruments/samples/obsolete/violin/Ab1.mid deleted file mode 100644 index b8253364b4e82..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/violin/Ab1.mid and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/violin/Ab2.mid b/code/modules/synthesized_instruments/samples/obsolete/violin/Ab2.mid deleted file mode 100644 index 4cd7f9b55a7cc..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/violin/Ab2.mid and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/violin/Ab3.mid b/code/modules/synthesized_instruments/samples/obsolete/violin/Ab3.mid deleted file mode 100644 index e827cfc635ee2..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/violin/Ab3.mid and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/violin/Ab4.mid b/code/modules/synthesized_instruments/samples/obsolete/violin/Ab4.mid deleted file mode 100644 index 57e1f76c97610..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/violin/Ab4.mid and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/violin/Ab5.mid b/code/modules/synthesized_instruments/samples/obsolete/violin/Ab5.mid deleted file mode 100644 index 59e95a6d9974c..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/violin/Ab5.mid and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/violin/Ab6.mid b/code/modules/synthesized_instruments/samples/obsolete/violin/Ab6.mid deleted file mode 100644 index 9bd3436287b9f..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/violin/Ab6.mid and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/violin/Ab7.mid b/code/modules/synthesized_instruments/samples/obsolete/violin/Ab7.mid deleted file mode 100644 index 3c90af807e272..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/violin/Ab7.mid and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/violin/Ab8.mid b/code/modules/synthesized_instruments/samples/obsolete/violin/Ab8.mid deleted file mode 100644 index 873d771f2aea4..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/violin/Ab8.mid and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/violin/An1.mid b/code/modules/synthesized_instruments/samples/obsolete/violin/An1.mid deleted file mode 100644 index d7f8a001d93f6..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/violin/An1.mid and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/violin/An2.mid b/code/modules/synthesized_instruments/samples/obsolete/violin/An2.mid deleted file mode 100644 index 2f01800a07549..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/violin/An2.mid and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/violin/An3.mid b/code/modules/synthesized_instruments/samples/obsolete/violin/An3.mid deleted file mode 100644 index c8ed3cdfa6cb6..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/violin/An3.mid and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/violin/An4.mid b/code/modules/synthesized_instruments/samples/obsolete/violin/An4.mid deleted file mode 100644 index e7984ca7e62b9..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/violin/An4.mid and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/violin/An5.mid b/code/modules/synthesized_instruments/samples/obsolete/violin/An5.mid deleted file mode 100644 index e1fd228f7a9e7..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/violin/An5.mid and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/violin/An6.mid b/code/modules/synthesized_instruments/samples/obsolete/violin/An6.mid deleted file mode 100644 index 1c8df6c98e5cc..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/violin/An6.mid and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/violin/An7.mid b/code/modules/synthesized_instruments/samples/obsolete/violin/An7.mid deleted file mode 100644 index 2784428daf9e9..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/violin/An7.mid and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/violin/An8.mid b/code/modules/synthesized_instruments/samples/obsolete/violin/An8.mid deleted file mode 100644 index 2db2ab70a7d98..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/violin/An8.mid and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/violin/B#1.mid b/code/modules/synthesized_instruments/samples/obsolete/violin/B#1.mid deleted file mode 100644 index d83b176edd8ba..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/violin/B#1.mid and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/violin/B#2.mid b/code/modules/synthesized_instruments/samples/obsolete/violin/B#2.mid deleted file mode 100644 index cddff75625f03..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/violin/B#2.mid and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/violin/B#3.mid b/code/modules/synthesized_instruments/samples/obsolete/violin/B#3.mid deleted file mode 100644 index 8bd7ec2fa9d63..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/violin/B#3.mid and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/violin/B#4.mid b/code/modules/synthesized_instruments/samples/obsolete/violin/B#4.mid deleted file mode 100644 index 4c7ab84b57bef..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/violin/B#4.mid and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/violin/B#5.mid b/code/modules/synthesized_instruments/samples/obsolete/violin/B#5.mid deleted file mode 100644 index d7f990b2d6c3c..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/violin/B#5.mid and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/violin/B#6.mid b/code/modules/synthesized_instruments/samples/obsolete/violin/B#6.mid deleted file mode 100644 index e124ccb8e2b0f..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/violin/B#6.mid and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/violin/B#7.mid b/code/modules/synthesized_instruments/samples/obsolete/violin/B#7.mid deleted file mode 100644 index 231c9e428db5d..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/violin/B#7.mid and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/violin/B#8.mid b/code/modules/synthesized_instruments/samples/obsolete/violin/B#8.mid deleted file mode 100644 index 981943c08f0c6..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/violin/B#8.mid and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/violin/Bb1.mid b/code/modules/synthesized_instruments/samples/obsolete/violin/Bb1.mid deleted file mode 100644 index 693b73f5420f1..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/violin/Bb1.mid and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/violin/Bb2.mid b/code/modules/synthesized_instruments/samples/obsolete/violin/Bb2.mid deleted file mode 100644 index 40da5f3da1520..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/violin/Bb2.mid and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/violin/Bb3.mid b/code/modules/synthesized_instruments/samples/obsolete/violin/Bb3.mid deleted file mode 100644 index 5bab6ccd63628..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/violin/Bb3.mid and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/violin/Bb4.mid b/code/modules/synthesized_instruments/samples/obsolete/violin/Bb4.mid deleted file mode 100644 index dce830448ef8b..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/violin/Bb4.mid and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/violin/Bb5.mid b/code/modules/synthesized_instruments/samples/obsolete/violin/Bb5.mid deleted file mode 100644 index fda796e27b90c..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/violin/Bb5.mid and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/violin/Bb6.mid b/code/modules/synthesized_instruments/samples/obsolete/violin/Bb6.mid deleted file mode 100644 index 9e5da684f43c9..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/violin/Bb6.mid and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/violin/Bb7.mid b/code/modules/synthesized_instruments/samples/obsolete/violin/Bb7.mid deleted file mode 100644 index 215c56cbe7eec..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/violin/Bb7.mid and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/violin/Bb8.mid b/code/modules/synthesized_instruments/samples/obsolete/violin/Bb8.mid deleted file mode 100644 index 4b55c34691f7f..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/violin/Bb8.mid and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/violin/Bn1.mid b/code/modules/synthesized_instruments/samples/obsolete/violin/Bn1.mid deleted file mode 100644 index 27968b5f9e7d8..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/violin/Bn1.mid and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/violin/Bn2.mid b/code/modules/synthesized_instruments/samples/obsolete/violin/Bn2.mid deleted file mode 100644 index 54c9b99d03fe2..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/violin/Bn2.mid and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/violin/Bn3.mid b/code/modules/synthesized_instruments/samples/obsolete/violin/Bn3.mid deleted file mode 100644 index f73476fb7bb17..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/violin/Bn3.mid and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/violin/Bn4.mid b/code/modules/synthesized_instruments/samples/obsolete/violin/Bn4.mid deleted file mode 100644 index 2aa30708a6cbc..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/violin/Bn4.mid and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/violin/Bn5.mid b/code/modules/synthesized_instruments/samples/obsolete/violin/Bn5.mid deleted file mode 100644 index 0ebe636b7145a..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/violin/Bn5.mid and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/violin/Bn6.mid b/code/modules/synthesized_instruments/samples/obsolete/violin/Bn6.mid deleted file mode 100644 index 3b8e1c217f7b3..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/violin/Bn6.mid and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/violin/Bn7.mid b/code/modules/synthesized_instruments/samples/obsolete/violin/Bn7.mid deleted file mode 100644 index afcb1982a13ff..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/violin/Bn7.mid and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/violin/Bn8.mid b/code/modules/synthesized_instruments/samples/obsolete/violin/Bn8.mid deleted file mode 100644 index 3afd469256c16..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/violin/Bn8.mid and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/violin/C#1.mid b/code/modules/synthesized_instruments/samples/obsolete/violin/C#1.mid deleted file mode 100644 index 88dba851452ea..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/violin/C#1.mid and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/violin/C#2.mid b/code/modules/synthesized_instruments/samples/obsolete/violin/C#2.mid deleted file mode 100644 index b510926b45fa0..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/violin/C#2.mid and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/violin/C#3.mid b/code/modules/synthesized_instruments/samples/obsolete/violin/C#3.mid deleted file mode 100644 index 9954bbe478a2f..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/violin/C#3.mid and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/violin/C#4.mid b/code/modules/synthesized_instruments/samples/obsolete/violin/C#4.mid deleted file mode 100644 index 2c5ff74db0aa7..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/violin/C#4.mid and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/violin/C#5.mid b/code/modules/synthesized_instruments/samples/obsolete/violin/C#5.mid deleted file mode 100644 index e5850a3fd0413..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/violin/C#5.mid and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/violin/C#6.mid b/code/modules/synthesized_instruments/samples/obsolete/violin/C#6.mid deleted file mode 100644 index 217c0ad014c5a..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/violin/C#6.mid and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/violin/C#7.mid b/code/modules/synthesized_instruments/samples/obsolete/violin/C#7.mid deleted file mode 100644 index ec32bdbf90403..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/violin/C#7.mid and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/violin/C#8.mid b/code/modules/synthesized_instruments/samples/obsolete/violin/C#8.mid deleted file mode 100644 index 555bce3db0d82..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/violin/C#8.mid and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/violin/Cb1.mid b/code/modules/synthesized_instruments/samples/obsolete/violin/Cb1.mid deleted file mode 100644 index a00f09dfb0885..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/violin/Cb1.mid and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/violin/Cb2.mid b/code/modules/synthesized_instruments/samples/obsolete/violin/Cb2.mid deleted file mode 100644 index 4085711bf1279..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/violin/Cb2.mid and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/violin/Cb3.mid b/code/modules/synthesized_instruments/samples/obsolete/violin/Cb3.mid deleted file mode 100644 index f647983ef05c2..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/violin/Cb3.mid and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/violin/Cb4.mid b/code/modules/synthesized_instruments/samples/obsolete/violin/Cb4.mid deleted file mode 100644 index 24f22f09eeccd..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/violin/Cb4.mid and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/violin/Cb5.mid b/code/modules/synthesized_instruments/samples/obsolete/violin/Cb5.mid deleted file mode 100644 index 057e97c5e0d06..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/violin/Cb5.mid and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/violin/Cb6.mid b/code/modules/synthesized_instruments/samples/obsolete/violin/Cb6.mid deleted file mode 100644 index 887e65fc13d0c..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/violin/Cb6.mid and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/violin/Cb7.mid b/code/modules/synthesized_instruments/samples/obsolete/violin/Cb7.mid deleted file mode 100644 index 99668bc192c20..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/violin/Cb7.mid and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/violin/Cb8.mid b/code/modules/synthesized_instruments/samples/obsolete/violin/Cb8.mid deleted file mode 100644 index 53ea61d1b250f..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/violin/Cb8.mid and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/violin/Cb9.mid b/code/modules/synthesized_instruments/samples/obsolete/violin/Cb9.mid deleted file mode 100644 index 1e8c3afadf13b..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/violin/Cb9.mid and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/violin/Cn1.mid b/code/modules/synthesized_instruments/samples/obsolete/violin/Cn1.mid deleted file mode 100644 index 857120f31f4e8..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/violin/Cn1.mid and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/violin/Cn2.mid b/code/modules/synthesized_instruments/samples/obsolete/violin/Cn2.mid deleted file mode 100644 index 3ccd6670e873e..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/violin/Cn2.mid and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/violin/Cn3.mid b/code/modules/synthesized_instruments/samples/obsolete/violin/Cn3.mid deleted file mode 100644 index 1851e4f8d27d1..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/violin/Cn3.mid and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/violin/Cn4.mid b/code/modules/synthesized_instruments/samples/obsolete/violin/Cn4.mid deleted file mode 100644 index 65e8b0efe4e5c..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/violin/Cn4.mid and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/violin/Cn5.mid b/code/modules/synthesized_instruments/samples/obsolete/violin/Cn5.mid deleted file mode 100644 index 544f921e43b96..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/violin/Cn5.mid and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/violin/Cn6.mid b/code/modules/synthesized_instruments/samples/obsolete/violin/Cn6.mid deleted file mode 100644 index 7c78dab2f0766..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/violin/Cn6.mid and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/violin/Cn7.mid b/code/modules/synthesized_instruments/samples/obsolete/violin/Cn7.mid deleted file mode 100644 index 3abe4cde0863c..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/violin/Cn7.mid and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/violin/Cn8.mid b/code/modules/synthesized_instruments/samples/obsolete/violin/Cn8.mid deleted file mode 100644 index 06f14081b3b9d..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/violin/Cn8.mid and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/violin/Cn9.mid b/code/modules/synthesized_instruments/samples/obsolete/violin/Cn9.mid deleted file mode 100644 index 62f4eef045a8b..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/violin/Cn9.mid and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/violin/D#1.mid b/code/modules/synthesized_instruments/samples/obsolete/violin/D#1.mid deleted file mode 100644 index 829e6fcf185a4..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/violin/D#1.mid and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/violin/D#2.mid b/code/modules/synthesized_instruments/samples/obsolete/violin/D#2.mid deleted file mode 100644 index 66029b340cc9b..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/violin/D#2.mid and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/violin/D#3.mid b/code/modules/synthesized_instruments/samples/obsolete/violin/D#3.mid deleted file mode 100644 index c982375941e67..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/violin/D#3.mid and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/violin/D#4.mid b/code/modules/synthesized_instruments/samples/obsolete/violin/D#4.mid deleted file mode 100644 index 016ed4f1edf90..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/violin/D#4.mid and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/violin/D#5.mid b/code/modules/synthesized_instruments/samples/obsolete/violin/D#5.mid deleted file mode 100644 index ddb511795df22..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/violin/D#5.mid and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/violin/D#6.mid b/code/modules/synthesized_instruments/samples/obsolete/violin/D#6.mid deleted file mode 100644 index b7242b9ab9945..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/violin/D#6.mid and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/violin/D#7.mid b/code/modules/synthesized_instruments/samples/obsolete/violin/D#7.mid deleted file mode 100644 index 773538340a56d..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/violin/D#7.mid and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/violin/D#8.mid b/code/modules/synthesized_instruments/samples/obsolete/violin/D#8.mid deleted file mode 100644 index 4ad074e173b70..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/violin/D#8.mid and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/violin/Db1.mid b/code/modules/synthesized_instruments/samples/obsolete/violin/Db1.mid deleted file mode 100644 index 88dba851452ea..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/violin/Db1.mid and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/violin/Db2.mid b/code/modules/synthesized_instruments/samples/obsolete/violin/Db2.mid deleted file mode 100644 index b510926b45fa0..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/violin/Db2.mid and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/violin/Db3.mid b/code/modules/synthesized_instruments/samples/obsolete/violin/Db3.mid deleted file mode 100644 index 9954bbe478a2f..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/violin/Db3.mid and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/violin/Db4.mid b/code/modules/synthesized_instruments/samples/obsolete/violin/Db4.mid deleted file mode 100644 index 2c5ff74db0aa7..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/violin/Db4.mid and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/violin/Db5.mid b/code/modules/synthesized_instruments/samples/obsolete/violin/Db5.mid deleted file mode 100644 index e5850a3fd0413..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/violin/Db5.mid and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/violin/Db6.mid b/code/modules/synthesized_instruments/samples/obsolete/violin/Db6.mid deleted file mode 100644 index 217c0ad014c5a..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/violin/Db6.mid and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/violin/Db7.mid b/code/modules/synthesized_instruments/samples/obsolete/violin/Db7.mid deleted file mode 100644 index ec32bdbf90403..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/violin/Db7.mid and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/violin/Db8.mid b/code/modules/synthesized_instruments/samples/obsolete/violin/Db8.mid deleted file mode 100644 index 555bce3db0d82..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/violin/Db8.mid and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/violin/Dn1.mid b/code/modules/synthesized_instruments/samples/obsolete/violin/Dn1.mid deleted file mode 100644 index 92e4e0d958163..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/violin/Dn1.mid and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/violin/Dn2.mid b/code/modules/synthesized_instruments/samples/obsolete/violin/Dn2.mid deleted file mode 100644 index 34eb9d1db1ba7..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/violin/Dn2.mid and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/violin/Dn3.mid b/code/modules/synthesized_instruments/samples/obsolete/violin/Dn3.mid deleted file mode 100644 index fbd56085aafac..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/violin/Dn3.mid and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/violin/Dn4.mid b/code/modules/synthesized_instruments/samples/obsolete/violin/Dn4.mid deleted file mode 100644 index e13c744829211..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/violin/Dn4.mid and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/violin/Dn5.mid b/code/modules/synthesized_instruments/samples/obsolete/violin/Dn5.mid deleted file mode 100644 index 8fd41e5c6fe05..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/violin/Dn5.mid and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/violin/Dn6.mid b/code/modules/synthesized_instruments/samples/obsolete/violin/Dn6.mid deleted file mode 100644 index d47329e8f9ed8..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/violin/Dn6.mid and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/violin/Dn7.mid b/code/modules/synthesized_instruments/samples/obsolete/violin/Dn7.mid deleted file mode 100644 index b249660387623..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/violin/Dn7.mid and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/violin/Dn8.mid b/code/modules/synthesized_instruments/samples/obsolete/violin/Dn8.mid deleted file mode 100644 index 56667a1a86d0b..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/violin/Dn8.mid and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/violin/E#1.mid b/code/modules/synthesized_instruments/samples/obsolete/violin/E#1.mid deleted file mode 100644 index 3f130ee126c11..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/violin/E#1.mid and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/violin/E#2.mid b/code/modules/synthesized_instruments/samples/obsolete/violin/E#2.mid deleted file mode 100644 index f67c2d0a26731..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/violin/E#2.mid and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/violin/E#3.mid b/code/modules/synthesized_instruments/samples/obsolete/violin/E#3.mid deleted file mode 100644 index bb393382d6c8e..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/violin/E#3.mid and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/violin/E#4.mid b/code/modules/synthesized_instruments/samples/obsolete/violin/E#4.mid deleted file mode 100644 index a96520c595d3c..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/violin/E#4.mid and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/violin/E#5.mid b/code/modules/synthesized_instruments/samples/obsolete/violin/E#5.mid deleted file mode 100644 index d1378af1972db..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/violin/E#5.mid and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/violin/E#6.mid b/code/modules/synthesized_instruments/samples/obsolete/violin/E#6.mid deleted file mode 100644 index 7abe40bd82425..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/violin/E#6.mid and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/violin/E#7.mid b/code/modules/synthesized_instruments/samples/obsolete/violin/E#7.mid deleted file mode 100644 index df278c20d6b69..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/violin/E#7.mid and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/violin/E#8.mid b/code/modules/synthesized_instruments/samples/obsolete/violin/E#8.mid deleted file mode 100644 index 35254cd5b25b4..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/violin/E#8.mid and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/violin/Eb1.mid b/code/modules/synthesized_instruments/samples/obsolete/violin/Eb1.mid deleted file mode 100644 index 829e6fcf185a4..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/violin/Eb1.mid and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/violin/Eb2.mid b/code/modules/synthesized_instruments/samples/obsolete/violin/Eb2.mid deleted file mode 100644 index 66029b340cc9b..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/violin/Eb2.mid and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/violin/Eb3.mid b/code/modules/synthesized_instruments/samples/obsolete/violin/Eb3.mid deleted file mode 100644 index c982375941e67..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/violin/Eb3.mid and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/violin/Eb4.mid b/code/modules/synthesized_instruments/samples/obsolete/violin/Eb4.mid deleted file mode 100644 index 016ed4f1edf90..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/violin/Eb4.mid and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/violin/Eb5.mid b/code/modules/synthesized_instruments/samples/obsolete/violin/Eb5.mid deleted file mode 100644 index ddb511795df22..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/violin/Eb5.mid and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/violin/Eb6.mid b/code/modules/synthesized_instruments/samples/obsolete/violin/Eb6.mid deleted file mode 100644 index b7242b9ab9945..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/violin/Eb6.mid and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/violin/Eb7.mid b/code/modules/synthesized_instruments/samples/obsolete/violin/Eb7.mid deleted file mode 100644 index 773538340a56d..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/violin/Eb7.mid and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/violin/Eb8.mid b/code/modules/synthesized_instruments/samples/obsolete/violin/Eb8.mid deleted file mode 100644 index 4ad074e173b70..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/violin/Eb8.mid and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/violin/En1.mid b/code/modules/synthesized_instruments/samples/obsolete/violin/En1.mid deleted file mode 100644 index 79ab68df9df74..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/violin/En1.mid and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/violin/En2.mid b/code/modules/synthesized_instruments/samples/obsolete/violin/En2.mid deleted file mode 100644 index cd61c8d0de5b0..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/violin/En2.mid and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/violin/En3.mid b/code/modules/synthesized_instruments/samples/obsolete/violin/En3.mid deleted file mode 100644 index da5b703d545bd..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/violin/En3.mid and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/violin/En4.mid b/code/modules/synthesized_instruments/samples/obsolete/violin/En4.mid deleted file mode 100644 index f7d3af024ff25..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/violin/En4.mid and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/violin/En5.mid b/code/modules/synthesized_instruments/samples/obsolete/violin/En5.mid deleted file mode 100644 index d3d353943f9df..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/violin/En5.mid and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/violin/En6.mid b/code/modules/synthesized_instruments/samples/obsolete/violin/En6.mid deleted file mode 100644 index 73eb5b0697dbb..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/violin/En6.mid and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/violin/En7.mid b/code/modules/synthesized_instruments/samples/obsolete/violin/En7.mid deleted file mode 100644 index 79a9462c844e3..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/violin/En7.mid and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/violin/En8.mid b/code/modules/synthesized_instruments/samples/obsolete/violin/En8.mid deleted file mode 100644 index 88947fc7318e3..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/violin/En8.mid and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/violin/F#1.mid b/code/modules/synthesized_instruments/samples/obsolete/violin/F#1.mid deleted file mode 100644 index d18668e891125..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/violin/F#1.mid and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/violin/F#2.mid b/code/modules/synthesized_instruments/samples/obsolete/violin/F#2.mid deleted file mode 100644 index 302f0c6fdc15d..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/violin/F#2.mid and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/violin/F#3.mid b/code/modules/synthesized_instruments/samples/obsolete/violin/F#3.mid deleted file mode 100644 index 1f592fc903994..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/violin/F#3.mid and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/violin/F#4.mid b/code/modules/synthesized_instruments/samples/obsolete/violin/F#4.mid deleted file mode 100644 index 45854126f988a..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/violin/F#4.mid and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/violin/F#5.mid b/code/modules/synthesized_instruments/samples/obsolete/violin/F#5.mid deleted file mode 100644 index fb1e1da339a90..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/violin/F#5.mid and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/violin/F#6.mid b/code/modules/synthesized_instruments/samples/obsolete/violin/F#6.mid deleted file mode 100644 index bfa896bb78446..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/violin/F#6.mid and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/violin/F#7.mid b/code/modules/synthesized_instruments/samples/obsolete/violin/F#7.mid deleted file mode 100644 index a27763c1d47d5..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/violin/F#7.mid and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/violin/F#8.mid b/code/modules/synthesized_instruments/samples/obsolete/violin/F#8.mid deleted file mode 100644 index aaab80a72762a..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/violin/F#8.mid and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/violin/Fb1.mid b/code/modules/synthesized_instruments/samples/obsolete/violin/Fb1.mid deleted file mode 100644 index c89b3f36b439b..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/violin/Fb1.mid and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/violin/Fb2.mid b/code/modules/synthesized_instruments/samples/obsolete/violin/Fb2.mid deleted file mode 100644 index 3db6af1aa4590..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/violin/Fb2.mid and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/violin/Fb3.mid b/code/modules/synthesized_instruments/samples/obsolete/violin/Fb3.mid deleted file mode 100644 index 5f601f3ac4240..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/violin/Fb3.mid and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/violin/Fb4.mid b/code/modules/synthesized_instruments/samples/obsolete/violin/Fb4.mid deleted file mode 100644 index f1abc8109d1ed..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/violin/Fb4.mid and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/violin/Fb5.mid b/code/modules/synthesized_instruments/samples/obsolete/violin/Fb5.mid deleted file mode 100644 index 2ec1b2e512838..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/violin/Fb5.mid and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/violin/Fb6.mid b/code/modules/synthesized_instruments/samples/obsolete/violin/Fb6.mid deleted file mode 100644 index b8bdf7fee0711..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/violin/Fb6.mid and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/violin/Fb7.mid b/code/modules/synthesized_instruments/samples/obsolete/violin/Fb7.mid deleted file mode 100644 index 51f5f1bcdb48f..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/violin/Fb7.mid and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/violin/Fb8.mid b/code/modules/synthesized_instruments/samples/obsolete/violin/Fb8.mid deleted file mode 100644 index 47928f38475c0..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/violin/Fb8.mid and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/violin/Fn1.mid b/code/modules/synthesized_instruments/samples/obsolete/violin/Fn1.mid deleted file mode 100644 index abe0d4e4051b6..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/violin/Fn1.mid and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/violin/Fn2.mid b/code/modules/synthesized_instruments/samples/obsolete/violin/Fn2.mid deleted file mode 100644 index d245bef3b54c1..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/violin/Fn2.mid and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/violin/Fn3.mid b/code/modules/synthesized_instruments/samples/obsolete/violin/Fn3.mid deleted file mode 100644 index e532e30dac9c2..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/violin/Fn3.mid and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/violin/Fn4.mid b/code/modules/synthesized_instruments/samples/obsolete/violin/Fn4.mid deleted file mode 100644 index 47219c72fa2e0..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/violin/Fn4.mid and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/violin/Fn5.mid b/code/modules/synthesized_instruments/samples/obsolete/violin/Fn5.mid deleted file mode 100644 index 630d16371d9e7..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/violin/Fn5.mid and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/violin/Fn6.mid b/code/modules/synthesized_instruments/samples/obsolete/violin/Fn6.mid deleted file mode 100644 index 08cbc981bdb6f..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/violin/Fn6.mid and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/violin/Fn7.mid b/code/modules/synthesized_instruments/samples/obsolete/violin/Fn7.mid deleted file mode 100644 index 6c28c7d272e2b..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/violin/Fn7.mid and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/violin/Fn8.mid b/code/modules/synthesized_instruments/samples/obsolete/violin/Fn8.mid deleted file mode 100644 index 2d73762f269a6..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/violin/Fn8.mid and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/violin/G#1.mid b/code/modules/synthesized_instruments/samples/obsolete/violin/G#1.mid deleted file mode 100644 index b1b38856858c4..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/violin/G#1.mid and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/violin/G#2.mid b/code/modules/synthesized_instruments/samples/obsolete/violin/G#2.mid deleted file mode 100644 index e827cfc635ee2..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/violin/G#2.mid and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/violin/G#3.mid b/code/modules/synthesized_instruments/samples/obsolete/violin/G#3.mid deleted file mode 100644 index 57e1f76c97610..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/violin/G#3.mid and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/violin/G#4.mid b/code/modules/synthesized_instruments/samples/obsolete/violin/G#4.mid deleted file mode 100644 index 59e95a6d9974c..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/violin/G#4.mid and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/violin/G#5.mid b/code/modules/synthesized_instruments/samples/obsolete/violin/G#5.mid deleted file mode 100644 index 9bd3436287b9f..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/violin/G#5.mid and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/violin/G#6.mid b/code/modules/synthesized_instruments/samples/obsolete/violin/G#6.mid deleted file mode 100644 index 3c90af807e272..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/violin/G#6.mid and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/violin/G#7.mid b/code/modules/synthesized_instruments/samples/obsolete/violin/G#7.mid deleted file mode 100644 index b51afd323c64b..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/violin/G#7.mid and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/violin/G#8.mid b/code/modules/synthesized_instruments/samples/obsolete/violin/G#8.mid deleted file mode 100644 index d3f5c898d47d4..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/violin/G#8.mid and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/violin/Gb1.mid b/code/modules/synthesized_instruments/samples/obsolete/violin/Gb1.mid deleted file mode 100644 index d18668e891125..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/violin/Gb1.mid and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/violin/Gb2.mid b/code/modules/synthesized_instruments/samples/obsolete/violin/Gb2.mid deleted file mode 100644 index 302f0c6fdc15d..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/violin/Gb2.mid and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/violin/Gb3.mid b/code/modules/synthesized_instruments/samples/obsolete/violin/Gb3.mid deleted file mode 100644 index 1f592fc903994..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/violin/Gb3.mid and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/violin/Gb4.mid b/code/modules/synthesized_instruments/samples/obsolete/violin/Gb4.mid deleted file mode 100644 index 45854126f988a..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/violin/Gb4.mid and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/violin/Gb5.mid b/code/modules/synthesized_instruments/samples/obsolete/violin/Gb5.mid deleted file mode 100644 index fb1e1da339a90..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/violin/Gb5.mid and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/violin/Gb6.mid b/code/modules/synthesized_instruments/samples/obsolete/violin/Gb6.mid deleted file mode 100644 index bfa896bb78446..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/violin/Gb6.mid and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/violin/Gb7.mid b/code/modules/synthesized_instruments/samples/obsolete/violin/Gb7.mid deleted file mode 100644 index a27763c1d47d5..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/violin/Gb7.mid and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/violin/Gb8.mid b/code/modules/synthesized_instruments/samples/obsolete/violin/Gb8.mid deleted file mode 100644 index aaab80a72762a..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/violin/Gb8.mid and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/violin/Gn1.mid b/code/modules/synthesized_instruments/samples/obsolete/violin/Gn1.mid deleted file mode 100644 index 1df52ab07606e..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/violin/Gn1.mid and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/violin/Gn2.mid b/code/modules/synthesized_instruments/samples/obsolete/violin/Gn2.mid deleted file mode 100644 index 6e0ca3831272d..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/violin/Gn2.mid and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/violin/Gn3.mid b/code/modules/synthesized_instruments/samples/obsolete/violin/Gn3.mid deleted file mode 100644 index bb3e6dedcbf9e..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/violin/Gn3.mid and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/violin/Gn4.mid b/code/modules/synthesized_instruments/samples/obsolete/violin/Gn4.mid deleted file mode 100644 index 0c46432afee54..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/violin/Gn4.mid and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/violin/Gn5.mid b/code/modules/synthesized_instruments/samples/obsolete/violin/Gn5.mid deleted file mode 100644 index f39dcf5e2b9f5..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/violin/Gn5.mid and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/violin/Gn6.mid b/code/modules/synthesized_instruments/samples/obsolete/violin/Gn6.mid deleted file mode 100644 index 0efa2259ca174..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/violin/Gn6.mid and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/violin/Gn7.mid b/code/modules/synthesized_instruments/samples/obsolete/violin/Gn7.mid deleted file mode 100644 index 22fd1b6bcb004..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/violin/Gn7.mid and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/obsolete/violin/Gn8.mid b/code/modules/synthesized_instruments/samples/obsolete/violin/Gn8.mid deleted file mode 100644 index 16b7171d627cb..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/obsolete/violin/Gn8.mid and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/organ/crisis_accordian/c2.ogg b/code/modules/synthesized_instruments/samples/organ/crisis_accordian/c2.ogg deleted file mode 100644 index ba20e3f4b69a5..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/organ/crisis_accordian/c2.ogg and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/organ/crisis_accordian/c3.ogg b/code/modules/synthesized_instruments/samples/organ/crisis_accordian/c3.ogg deleted file mode 100644 index fcc8715e04b27..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/organ/crisis_accordian/c3.ogg and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/organ/crisis_accordian/c4.ogg b/code/modules/synthesized_instruments/samples/organ/crisis_accordian/c4.ogg deleted file mode 100644 index aa21d7e230730..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/organ/crisis_accordian/c4.ogg and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/organ/crisis_accordian/c5.ogg b/code/modules/synthesized_instruments/samples/organ/crisis_accordian/c5.ogg deleted file mode 100644 index ac45bc6be4b82..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/organ/crisis_accordian/c5.ogg and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/organ/crisis_church/c2.ogg b/code/modules/synthesized_instruments/samples/organ/crisis_church/c2.ogg deleted file mode 100644 index 71b9280e868e0..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/organ/crisis_church/c2.ogg and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/organ/crisis_church/c3.ogg b/code/modules/synthesized_instruments/samples/organ/crisis_church/c3.ogg deleted file mode 100644 index 676a24669f9c0..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/organ/crisis_church/c3.ogg and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/organ/crisis_church/c4.ogg b/code/modules/synthesized_instruments/samples/organ/crisis_church/c4.ogg deleted file mode 100644 index 24e3732d7eb3b..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/organ/crisis_church/c4.ogg and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/organ/crisis_church/c5.ogg b/code/modules/synthesized_instruments/samples/organ/crisis_church/c5.ogg deleted file mode 100644 index 72dc2ce764184..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/organ/crisis_church/c5.ogg and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/organ/crisis_hammond/c2.ogg b/code/modules/synthesized_instruments/samples/organ/crisis_hammond/c2.ogg deleted file mode 100644 index 853b7591b479a..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/organ/crisis_hammond/c2.ogg and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/organ/crisis_hammond/c3.ogg b/code/modules/synthesized_instruments/samples/organ/crisis_hammond/c3.ogg deleted file mode 100644 index 205e1903795eb..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/organ/crisis_hammond/c3.ogg and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/organ/crisis_hammond/c4.ogg b/code/modules/synthesized_instruments/samples/organ/crisis_hammond/c4.ogg deleted file mode 100644 index e90c28f14c3cd..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/organ/crisis_hammond/c4.ogg and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/organ/crisis_hammond/c5.ogg b/code/modules/synthesized_instruments/samples/organ/crisis_hammond/c5.ogg deleted file mode 100644 index a56d3cc3f6b6c..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/organ/crisis_hammond/c5.ogg and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/organ/crisis_harmonica/c3.ogg b/code/modules/synthesized_instruments/samples/organ/crisis_harmonica/c3.ogg deleted file mode 100644 index 14c5f35eef29d..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/organ/crisis_harmonica/c3.ogg and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/organ/crisis_harmonica/c4.ogg b/code/modules/synthesized_instruments/samples/organ/crisis_harmonica/c4.ogg deleted file mode 100644 index e06e733eb2280..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/organ/crisis_harmonica/c4.ogg and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/organ/crisis_harmonica/c5.ogg b/code/modules/synthesized_instruments/samples/organ/crisis_harmonica/c5.ogg deleted file mode 100644 index 3d21e92d53610..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/organ/crisis_harmonica/c5.ogg and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/organ/crisis_tangaccordian/c2.ogg b/code/modules/synthesized_instruments/samples/organ/crisis_tangaccordian/c2.ogg deleted file mode 100644 index be51b6dcd4838..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/organ/crisis_tangaccordian/c2.ogg and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/organ/crisis_tangaccordian/c3.ogg b/code/modules/synthesized_instruments/samples/organ/crisis_tangaccordian/c3.ogg deleted file mode 100644 index 7426d246a0002..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/organ/crisis_tangaccordian/c3.ogg and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/organ/crisis_tangaccordian/c4.ogg b/code/modules/synthesized_instruments/samples/organ/crisis_tangaccordian/c4.ogg deleted file mode 100644 index af7b66cf19cd1..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/organ/crisis_tangaccordian/c4.ogg and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/organ/crisis_tangaccordian/c5.ogg b/code/modules/synthesized_instruments/samples/organ/crisis_tangaccordian/c5.ogg deleted file mode 100644 index 58ff4ff216047..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/organ/crisis_tangaccordian/c5.ogg and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/piano/crisis_bright_piano/c2.ogg b/code/modules/synthesized_instruments/samples/piano/crisis_bright_piano/c2.ogg deleted file mode 100644 index 4b7feb77a46d3..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/piano/crisis_bright_piano/c2.ogg and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/piano/crisis_bright_piano/c3.ogg b/code/modules/synthesized_instruments/samples/piano/crisis_bright_piano/c3.ogg deleted file mode 100644 index 5e7eefa79a11f..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/piano/crisis_bright_piano/c3.ogg and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/piano/crisis_bright_piano/c4.ogg b/code/modules/synthesized_instruments/samples/piano/crisis_bright_piano/c4.ogg deleted file mode 100644 index 13e49d4f3ab0c..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/piano/crisis_bright_piano/c4.ogg and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/piano/crisis_bright_piano/c5.ogg b/code/modules/synthesized_instruments/samples/piano/crisis_bright_piano/c5.ogg deleted file mode 100644 index 6ef00f07000e4..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/piano/crisis_bright_piano/c5.ogg and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/piano/crisis_bright_piano/c6.ogg b/code/modules/synthesized_instruments/samples/piano/crisis_bright_piano/c6.ogg deleted file mode 100644 index a868249ca87f7..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/piano/crisis_bright_piano/c6.ogg and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/piano/crisis_bright_piano/c7.ogg b/code/modules/synthesized_instruments/samples/piano/crisis_bright_piano/c7.ogg deleted file mode 100644 index 2d08d98dd9755..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/piano/crisis_bright_piano/c7.ogg and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/piano/crisis_bright_piano/c8.ogg b/code/modules/synthesized_instruments/samples/piano/crisis_bright_piano/c8.ogg deleted file mode 100644 index 50e3cb76a770a..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/piano/crisis_bright_piano/c8.ogg and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/piano/crisis_grand_piano/c2.ogg b/code/modules/synthesized_instruments/samples/piano/crisis_grand_piano/c2.ogg deleted file mode 100644 index 0b87714166ecb..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/piano/crisis_grand_piano/c2.ogg and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/piano/crisis_grand_piano/c3.ogg b/code/modules/synthesized_instruments/samples/piano/crisis_grand_piano/c3.ogg deleted file mode 100644 index 31fd6250988a5..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/piano/crisis_grand_piano/c3.ogg and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/piano/crisis_grand_piano/c4.ogg b/code/modules/synthesized_instruments/samples/piano/crisis_grand_piano/c4.ogg deleted file mode 100644 index 0ed309dbb727f..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/piano/crisis_grand_piano/c4.ogg and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/piano/crisis_grand_piano/c5.ogg b/code/modules/synthesized_instruments/samples/piano/crisis_grand_piano/c5.ogg deleted file mode 100644 index 7fd820d373236..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/piano/crisis_grand_piano/c5.ogg and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/piano/crisis_grand_piano/c6.ogg b/code/modules/synthesized_instruments/samples/piano/crisis_grand_piano/c6.ogg deleted file mode 100644 index b4ed66e27cec3..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/piano/crisis_grand_piano/c6.ogg and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/piano/crisis_grand_piano/c7.ogg b/code/modules/synthesized_instruments/samples/piano/crisis_grand_piano/c7.ogg deleted file mode 100644 index 13a5f7d873c40..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/piano/crisis_grand_piano/c7.ogg and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/piano/crisis_grand_piano/c8.ogg b/code/modules/synthesized_instruments/samples/piano/crisis_grand_piano/c8.ogg deleted file mode 100644 index 0169d52c2118e..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/piano/crisis_grand_piano/c8.ogg and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/piano/crisis_harpsichord/c2.ogg b/code/modules/synthesized_instruments/samples/piano/crisis_harpsichord/c2.ogg deleted file mode 100644 index 16d49cb15e1e7..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/piano/crisis_harpsichord/c2.ogg and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/piano/crisis_harpsichord/c3.ogg b/code/modules/synthesized_instruments/samples/piano/crisis_harpsichord/c3.ogg deleted file mode 100644 index 83e906cd1a8a6..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/piano/crisis_harpsichord/c3.ogg and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/piano/crisis_harpsichord/c4.ogg b/code/modules/synthesized_instruments/samples/piano/crisis_harpsichord/c4.ogg deleted file mode 100644 index 33f766e4aa109..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/piano/crisis_harpsichord/c4.ogg and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/piano/crisis_harpsichord/c5.ogg b/code/modules/synthesized_instruments/samples/piano/crisis_harpsichord/c5.ogg deleted file mode 100644 index 6ce06dda565b5..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/piano/crisis_harpsichord/c5.ogg and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/piano/fluid_harpsi/C2.ogg b/code/modules/synthesized_instruments/samples/piano/fluid_harpsi/C2.ogg deleted file mode 100644 index 3941e7af03a24..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/piano/fluid_harpsi/C2.ogg and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/piano/fluid_harpsi/C3.ogg b/code/modules/synthesized_instruments/samples/piano/fluid_harpsi/C3.ogg deleted file mode 100644 index 4f79ee998791c..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/piano/fluid_harpsi/C3.ogg and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/piano/fluid_harpsi/C4.ogg b/code/modules/synthesized_instruments/samples/piano/fluid_harpsi/C4.ogg deleted file mode 100644 index 1d773c62e72bd..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/piano/fluid_harpsi/C4.ogg and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/piano/fluid_harpsi/C5.ogg b/code/modules/synthesized_instruments/samples/piano/fluid_harpsi/C5.ogg deleted file mode 100644 index 938a557e04d54..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/piano/fluid_harpsi/C5.ogg and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/piano/fluid_harpsi/C6.ogg b/code/modules/synthesized_instruments/samples/piano/fluid_harpsi/C6.ogg deleted file mode 100644 index c65f06ce3eaed..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/piano/fluid_harpsi/C6.ogg and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/piano/fluid_harpsi/C7.ogg b/code/modules/synthesized_instruments/samples/piano/fluid_harpsi/C7.ogg deleted file mode 100644 index 87d4943509d4e..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/piano/fluid_harpsi/C7.ogg and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/piano/fluid_harpsi/C8.ogg b/code/modules/synthesized_instruments/samples/piano/fluid_harpsi/C8.ogg deleted file mode 100644 index 5800b2d0ff353..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/piano/fluid_harpsi/C8.ogg and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/piano/fluid_piano/c2.ogg b/code/modules/synthesized_instruments/samples/piano/fluid_piano/c2.ogg deleted file mode 100644 index 9ce5eee76eb91..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/piano/fluid_piano/c2.ogg and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/piano/fluid_piano/c3.ogg b/code/modules/synthesized_instruments/samples/piano/fluid_piano/c3.ogg deleted file mode 100644 index 46443274764a4..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/piano/fluid_piano/c3.ogg and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/piano/fluid_piano/c4.ogg b/code/modules/synthesized_instruments/samples/piano/fluid_piano/c4.ogg deleted file mode 100644 index ab6d8a2a920a9..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/piano/fluid_piano/c4.ogg and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/piano/fluid_piano/c5.ogg b/code/modules/synthesized_instruments/samples/piano/fluid_piano/c5.ogg deleted file mode 100644 index 0041ea2e13f6b..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/piano/fluid_piano/c5.ogg and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/piano/fluid_piano/c6.ogg b/code/modules/synthesized_instruments/samples/piano/fluid_piano/c6.ogg deleted file mode 100644 index 5d836b9f7cbde..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/piano/fluid_piano/c6.ogg and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/piano/fluid_piano/c7.ogg b/code/modules/synthesized_instruments/samples/piano/fluid_piano/c7.ogg deleted file mode 100644 index 1981572cf2aea..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/piano/fluid_piano/c7.ogg and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/piano/fluid_piano/c8.ogg b/code/modules/synthesized_instruments/samples/piano/fluid_piano/c8.ogg deleted file mode 100644 index 35e5b147bcb23..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/piano/fluid_piano/c8.ogg and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/tones/Sawtooth.ogg b/code/modules/synthesized_instruments/samples/tones/Sawtooth.ogg deleted file mode 100644 index e46f5eaced41b..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/tones/Sawtooth.ogg and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/tones/Sine.ogg b/code/modules/synthesized_instruments/samples/tones/Sine.ogg deleted file mode 100644 index e0b14869e9a23..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/tones/Sine.ogg and /dev/null differ diff --git a/code/modules/synthesized_instruments/samples/tones/Square.ogg b/code/modules/synthesized_instruments/samples/tones/Square.ogg deleted file mode 100644 index 817531bcca0fd..0000000000000 Binary files a/code/modules/synthesized_instruments/samples/tones/Square.ogg and /dev/null differ diff --git a/code/modules/synthesized_instruments/song.dm b/code/modules/synthesized_instruments/song.dm deleted file mode 100644 index 0465c16db6f10..0000000000000 --- a/code/modules/synthesized_instruments/song.dm +++ /dev/null @@ -1,194 +0,0 @@ -/datum/synthesized_song - var/list/lines = list() - var/tempo = 5 - - var/playing = 0 - var/autorepeat = 0 - var/current_line = 0 - - var/datum/sound_player/player // Not a physical thing - var/datum/instrument/instrument_data - - var/linear_decay = 1 - var/sustain_timer = 1 - var/soft_coeff = 2.0 - var/transposition = 0 - - var/octave_range_min - var/octave_range_max - - var/sound_id - - var/available_channels //Alright, this basically starts as the max config value and we will decrease and increase at runtime - - -/datum/synthesized_song/New(datum/sound_player/playing_object, datum/instrument/instrument) - src.player = playing_object - src.instrument_data = instrument - src.octave_range_min = GLOB.musical_config.lowest_octave - src.octave_range_max = GLOB.musical_config.highest_octave - instrument.create_full_sample_deviation_map() - available_channels = GLOB.musical_config.channels_per_instrument - -/datum/synthesized_song/Destroy() - player.event_manager.deactivate() - return ..() - -/datum/synthesized_song/proc/sanitize_tempo(new_tempo) // Identical to datum/song - new_tempo = abs(new_tempo) - return max(round(new_tempo, world.tick_lag), world.tick_lag) - - -/datum/synthesized_song/proc/play_synthesized_note(note, acc, oct, duration, where, which_one) - if (oct < GLOB.musical_config.lowest_octave || oct > GLOB.musical_config.highest_octave) return - if (oct < src.octave_range_min || oct > src.octave_range_max) return - - var/delta1 = acc == "b" ? -1 : acc == "#" ? 1 : acc == "s" ? 1 : acc == "n" ? 0 : 0 - var/delta2 = 12 * oct - - var/note_num = delta1+delta2+GLOB.musical_config.nn2no[note] - if (note_num < 0 || note_num > 127) - CRASH("play_synthesized note failed because of 0..127 condition, [note], [acc], [oct]") - - var/datum/sample_pair/pair = src.instrument_data.sample_map[GLOB.musical_config.n2t(note_num)] - #define Q 0.083 // 1/12 - var/freq = 2**(Q*pair.deviation) - #undef Q - - src.play(pair.sample, duration, freq, note_num, where, which_one) - - -/datum/synthesized_song/proc/play(what, duration, frequency, which, where, which_one) - if(available_channels <= 0) //Ignore requests for new channels if we go over limit - return - available_channels -= 1 - src.sound_id = "[type]_[sequential_id(type)]" - - - var/sound/sound_copy = sound(what) - sound_copy.wait = 0 - sound_copy.repeat = 0 - sound_copy.frequency = frequency - - player.apply_modifications(sound_copy, which, where, which_one) - //Environment, anything other than -1 means override - var/use_env = 0 - - if(isnum(sound_copy.environment) && sound_copy.environment <= -1) - sound_copy.environment = 0 // set it to 0 and just not set use env - else - use_env = 1 - - var/current_volume = clamp(sound_copy.volume, 0, 100) - sound_copy.volume = current_volume //Sanitize volume - var/datum/sound_token/token = new /datum/sound_token/instrument(src.player.actual_instrument, src.sound_id, sound_copy, src.player.range, FALSE, use_env, player) - var/delta_volume = player.volume / src.sustain_timer - - var/tick = duration - while ((current_volume > 0) && token) - var/new_volume = current_volume - tick += world.tick_lag - if (delta_volume <= 0) - CRASH("Delta Volume somehow was non-positive: [delta_volume]") - if (src.soft_coeff <= 1) - CRASH("Soft Coeff somehow was <=1: [src.soft_coeff]") - if (src.linear_decay) - new_volume = new_volume - delta_volume - else - new_volume = new_volume / src.soft_coeff - - var/sanitized_volume = max(round(new_volume), 0) - if (sanitized_volume == current_volume) - current_volume = new_volume - continue - current_volume = sanitized_volume - src.player.event_manager.push_event(src.player, token, tick, current_volume) - if (current_volume <= 0) - break - - -#define CP(L, S) copytext_char(L, S, S+1) -#define IS_DIGIT(L) (L >= "0" && L <= "9" ? 1 : 0) - -#define STOP_PLAY_LINES \ - autorepeat = 0 ;\ - playing = 0 ;\ - current_line = 0 ;\ - player.event_manager.deactivate() ;\ - return - -/datum/synthesized_song/proc/play_lines(mob/user, list/allowed_suff, list/note_off_delta, list/lines) - if (!lines.len) - STOP_PLAY_LINES - var/list/cur_accidentals = list("n", "n", "n", "n", "n", "n", "n") - var/list/cur_octaves = list(3, 3, 3, 3, 3, 3, 3) - src.current_line = 1 - for (var/line in lines) - var/cur_note = 1 - if (src.player && src.player.actual_instrument) - var/obj/structure/synthesized_instrument/S = src.player.actual_instrument - var/datum/real_instrument/R = S.real_instrument - if (R.song_editor) - SSnano.update_uis(R.song_editor) - for (var/notes in splittext(lowertext(line), ",")) - var/list/components = splittext(notes, "/") - var/duration = sanitize_tempo(src.tempo) - if (components.len) - var/delta = components.len==2 && text2num(components[2]) ? text2num(components[2]) : 1 - var/note_str = splittext(components[1], "-") - - duration = sanitize_tempo(src.tempo / delta) - src.player.event_manager.suspended = 1 - for (var/note in note_str) - if (!note) continue // wtf, empty note - var/note_sym = CP(note, 1) - var/note_off = 0 - if (note_sym in note_off_delta) - note_off = text2ascii(note_sym) - note_off_delta[note_sym] - else - continue // Shitty note, move along and avoid runtimes - - var/octave = cur_octaves[note_off] - var/accidental = cur_accidentals[note_off] - - switch (length(note)) - if (3) - accidental = CP(note, 2) - octave = CP(note, 3) - if (!(accidental in allowed_suff) || !IS_DIGIT(octave)) - continue - else - octave = text2num(octave) - if (2) - if (IS_DIGIT(CP(note, 2))) - octave = text2num(CP(note, 2)) - else - accidental = CP(note, 2) - if (!(accidental in allowed_suff)) - continue - cur_octaves[note_off] = octave - cur_accidentals[note_off] = accidental - play_synthesized_note(note_off, accidental, octave+transposition, duration, src.current_line, cur_note) - if (src.player.event_manager.is_overloaded()) - STOP_PLAY_LINES - cur_note++ - src.player.event_manager.suspended = 0 - if (!src.playing || src.player.shouldStopPlaying(user)) - STOP_PLAY_LINES - sleep(duration) - src.current_line++ - if (src.autorepeat) - .() - -#undef STOP_PLAY_LINES - -/datum/synthesized_song/proc/play_song(mob/user) - // This code is really fucking horrible. - src.player.event_manager.activate() - var/list/allowed_suff = list("b", "n", "#", "s") - var/list/note_off_delta = list("a"=91, "b"=91, "c"=98, "d"=98, "e"=98, "f"=98, "g"=98) - var/list/lines_copy = src.lines.Copy() - addtimer(CALLBACK(src, .proc/play_lines, user, allowed_suff, note_off_delta, lines_copy), 0) - -#undef CP -#undef IS_DIGIT diff --git a/code/modules/synthesized_instruments/song_editor.dm b/code/modules/synthesized_instruments/song_editor.dm deleted file mode 100644 index 5c060a0b006f3..0000000000000 --- a/code/modules/synthesized_instruments/song_editor.dm +++ /dev/null @@ -1,106 +0,0 @@ -/datum/nano_module/song_editor - name = "Song Editor" - available_to_ai = 0 - var/datum/synthesized_song/song - var/show_help = 0 - var/page = 1 - - -/datum/nano_module/song_editor/New(var/host, var/topic_manager, datum/synthesized_song/song) - ..() - src.host = host - src.song = song - - -/datum/nano_module/song_editor/proc/pages() - return Ceil(src.song.lines.len / GLOB.musical_config.song_editor_lines_per_page) - - -/datum/nano_module/song_editor/proc/current_page() - return src.song.current_line > 0 ? Ceil(src.song.current_line / GLOB.musical_config.song_editor_lines_per_page) : min(src.page, pages()) - - -/datum/nano_module/song_editor/proc/page_bounds(page_num) - return list( - max(min(1 + GLOB.musical_config.song_editor_lines_per_page * (page_num-1), src.song.lines.len), 1), - min(GLOB.musical_config.song_editor_lines_per_page * page_num, src.song.lines.len)) - -/datum/nano_module/song_editor/ui_interact(mob/user, ui_key = "song_editor", var/datum/nanoui/ui = null, var/force_open = 0) - var/list/data = list() - - var/current_page = src.current_page() - var/list/line_bounds = src.page_bounds(src.current_page()) - - data["lines"] = src.song.lines.Copy(line_bounds[1], line_bounds[2]+1) - data["active_line"] = src.song.current_line - data["max_lines"] = GLOB.musical_config.max_lines - data["max_line_length"] = GLOB.musical_config.max_line_length - data["tick_lag"] = world.tick_lag - data["show_help"] = src.show_help - data["page_num"] = current_page - data["page_offset"] = GLOB.musical_config.song_editor_lines_per_page * (current_page-1) - - ui = SSnano.try_update_ui(user, src, ui_key, ui, data, force_open) - if (!ui) - ui = new (user, src, ui_key, "song_editor.tmpl", "Song Editor", 550, 600) - ui.set_initial_data(data) - ui.open() - - -/datum/nano_module/song_editor/Topic(href, href_list) - if (..()) - return 1 - - var/target = href_list["target"] - var/value = text2num(href_list["value"]) - if (href_list["value"] && !isnum(value)) - to_chat(usr, "Non-numeric value was supplied") - return 0 - - switch (target) - if("newline") - var/newline = html_encode(input(usr, "Enter your line: ") as text|null) - if(!newline) - return - if(src.song.lines.len > GLOB.musical_config.max_lines) - return - if(length(newline) > GLOB.musical_config.max_line_length) - newline = copytext_char(newline, 1, GLOB.musical_config.max_line_length) - src.song.lines.Add(newline) - - if("deleteline") - // This could kill the server if the synthesizer was playing, props to BeTePb - // Impossible to do now. Dumbing down this section. - var/num = round(value) - if(num > src.song.lines.len || num < 1) - return - src.song.lines.Cut(num, num+1) - - if("modifyline") - var/num = round(value) - if(num > src.song.lines.len || num < 1) - return - var/content = html_encode(input(usr, "Enter your line: ", "Edit line", src.song.lines[num]) as text|null) - if(num > src.song.lines.len || num < 1) - return - if(!content) - return - if(length(content) > GLOB.musical_config.max_line_length) - content = copytext_char(content, 1, GLOB.musical_config.max_line_length) - src.song.lines[num] = content - - if ("help") - src.show_help = value - - if ("next_page") - src.page = max(min(src.page + 1, src.pages()), 1) - - if ("prev_page") - src.page = max(min(src.page - 1, src.pages()), 1) - - if ("last_page") - src.page = src.pages() - if ("first_page") - src.page = 1 - - return 1 diff --git a/code/modules/synthesized_instruments/sound_player.dm b/code/modules/synthesized_instruments/sound_player.dm deleted file mode 100644 index 4bc5d7fbc14ff..0000000000000 --- a/code/modules/synthesized_instruments/sound_player.dm +++ /dev/null @@ -1,86 +0,0 @@ - -/datum/sound_player - // Virtual object - // It's the one used to modify shit - var/range = 15 - var/volume = 30 - var/max_volume = 50 - var/falloff = 2 - var/apply_echo = 0 - var/virtual_environment_selected = 0 - var/env[23] - var/echo[18] - - var/datum/synthesized_song/song - var/datum/instrument/instrument - var/obj/actual_instrument - - var/datum/musical_event_manager/event_manager = new - - var/datum/proximity_trigger/square/proxy_listener - var/list/datum/sound_token/instrument/tokens = list() - var/list/seen_turfs - -/datum/sound_player/New(datum/real_instrument/where, datum/instrument/what) - src.song = new (src, what) - src.actual_instrument = where - src.echo = GLOB.musical_config.echo_default.Copy() - src.env = GLOB.musical_config.env_default.Copy() - src.proxy_listener = new(src.actual_instrument, /datum/sound_player/proc/on_turf_entered_relay, /datum/sound_player/proc/on_turfs_changed_relay, range, proc_owner = src) - proxy_listener.register_turfs() - -/datum/sound_player/Destroy() - src.song.playing = 0 - src.actual_instrument = null - src.instrument = null - QDEL_NULL(song) - QDEL_NULL(event_manager) - QDEL_NULL(proxy_listener) - seen_turfs.Cut() - tokens.Cut() - . = ..() - -/datum/sound_player/proc/subscribe(var/datum/sound_token/instrument/newtoken) - if(!istype(newtoken)) - CRASH("Non token type passed to subscribe function.") - tokens += newtoken - - //Tell it of what we saw prior to it spawning - newtoken.PrivLocateListeners(list(), seen_turfs.Copy()) - - -/datum/sound_player/proc/unsubscribe(var/datum/sound_token/instrument/oldtoken) - if(!istype(oldtoken)) - CRASH("Non token type passed to unsubscribe function.") - tokens -= oldtoken - -/datum/sound_player/proc/on_turf_entered_relay(var/atom/enteree) - for(var/datum/sound_token/instrument/I in tokens) - I.PrivAddListener(enteree) - -/datum/sound_player/proc/on_turfs_changed_relay(var/list/prior_turfs, var/list/current_turfs) - seen_turfs = current_turfs - for(var/datum/sound_token/instrument/I in tokens) - I.PrivLocateListeners(prior_turfs.Copy(), current_turfs.Copy()) - -/datum/sound_player/proc/apply_modifications(sound/what, note_num, which_line, which_note) // You don't need to override this - what.volume = volume - what.falloff = falloff - if (GLOB.musical_config.env_settings_available) - what.environment = GLOB.musical_config.is_custom_env(src.virtual_environment_selected) ? src.env : src.virtual_environment_selected - if (src.apply_echo) - what.echo = src.echo - return - -/datum/sound_player/proc/shouldStopPlaying(mob/user) - var/obj/structure/synthesized_instrument/S = actual_instrument - var/obj/item/device/synthesized_instrument/D = actual_instrument - if(istype(S)) - return S.shouldStopPlaying(user) - if(istype(D)) - return D.shouldStopPlaying(user) - - return 1 //Well if you got this far you did something very wrong - - - diff --git a/code/modules/synthesized_instruments/sound_token.dm b/code/modules/synthesized_instruments/sound_token.dm deleted file mode 100644 index 0716eadc68d68..0000000000000 --- a/code/modules/synthesized_instruments/sound_token.dm +++ /dev/null @@ -1,71 +0,0 @@ -//This is similar to normal sound tokens -//Mostly it allows non repeating sounds to keep channel ownership - -/datum/sound_token/instrument - var/use_env = 0 - var/datum/sound_player/player - -//Slight duplication, but there's key differences -/datum/sound_token/instrument/New(var/atom/source, var/sound_id, var/sound/new_sound, var/range = 4, var/prefer_mute = FALSE, var/use_env, var/datum/sound_player/player) - if(!istype(source)) - CRASH("Invalid sound source: [log_info_line(source)]") - if(!istype(new_sound)) - CRASH("Invalid sound: [log_info_line(new_sound)]") - if(new_sound.repeat && !sound_id) - CRASH("No sound id given") - if(!PrivIsValidEnvironment(new_sound.environment)) - CRASH("Invalid sound environment: [log_info_line(new_sound.environment)]") - - src.prefer_mute = prefer_mute - src.range = range - src.source = source - src._sound = new_sound - src.sound_id = sound_id - src.use_env = use_env - src.player = player - - var/channel = GLOB.sound_player.PrivGetChannel(src) //Attempt to find a channel - if(!isnum(channel)) - CRASH("All available sound channels are in active use.") - _sound.channel = channel - - listeners = list() - listener_status = list() - - GLOB.destroyed_event.register(source, src, /datum/proc/qdel_self) - - player.subscribe(src) - - -/datum/sound_token/instrument/PrivGetEnvironment(var/listener) - //Allow override (in case your instrument has to sound funky or muted) - if(use_env) - return _sound.environment - else - var/area/A = get_area(listener) - return A && PrivIsValidEnvironment(A.sound_env) ? A.sound_env : _sound.environment - - -/datum/sound_token/instrument/PrivAddListener(var/atom/listener) - var/mob/m = listener - if(istype(m)) - if(m.get_preference_value(/datum/client_preference/play_instruments) != GLOB.PREF_YES) - return - return ..() - - -/datum/sound_token/instrument/PrivUpdateListener(var/listener) - var/mob/m = listener - if(istype(m)) - if(m.get_preference_value(/datum/client_preference/play_instruments) != GLOB.PREF_YES) - PrivRemoveListener(listener) - return - return ..() - -/datum/sound_token/instrument/Stop() - player.unsubscribe(src) - . = ..() - -/datum/sound_token/instrument/Destroy() - . = ..() - player = null diff --git a/code/modules/synthesized_instruments/usage_info.dm b/code/modules/synthesized_instruments/usage_info.dm deleted file mode 100644 index 1f4893801e67b..0000000000000 --- a/code/modules/synthesized_instruments/usage_info.dm +++ /dev/null @@ -1,29 +0,0 @@ -/datum/nano_module/usage_info - name = "Usage Info" - available_to_ai = 0 - var/datum/sound_player/player - -/datum/nano_module/usage_info/New(atom/source, datum/sound_player/player) - src.host = source - src.player = player - -//This will let you easily monitor when you're going overboard with tempo and sound duration, generally if the bars fill up it is BAD -/datum/nano_module/usage_info/ui_interact(mob/user, ui_key = "usage_info", var/datum/nanoui/ui = null, var/force_open = 0) - var/static/list/data = list() - data.Cut() - data["channels_left"] = GLOB.sound_channels.available_channels.stack.len - data["events_active"] = src.player.event_manager.events.len - data["max_channels"] = GLOB.sound_channels.channel_ceiling - data["max_events"] = GLOB.musical_config.max_events - - ui = SSnano.try_update_ui(user, src, ui_key, ui, data, force_open) - if (!ui) - ui = new (user, src, ui_key, "song_usage_info.tmpl", "Usage info", 500, 150) - ui.set_initial_data(data) - ui.open() - ui.set_auto_update(1) - - -/datum/nano_module/usage_info/Destroy() - player = null - ..() \ No newline at end of file diff --git a/code/modules/tables/flipping.dm b/code/modules/tables/flipping.dm deleted file mode 100644 index dfa2cac35b415..0000000000000 --- a/code/modules/tables/flipping.dm +++ /dev/null @@ -1,130 +0,0 @@ - -/obj/structure/table/proc/straight_table_check(var/direction) - if(get_current_health() > 100) - return 0 - var/obj/structure/table/T - for(var/angle in list(-90,90)) - T = locate() in get_step(src.loc,turn(direction,angle)) - if(T && T.flipped == 0 && T.material && material && T.material.name == material.name) - return 0 - T = locate() in get_step(src.loc,direction) - if (!T || T.flipped == 1 || T.material != material) - return 1 - return T.straight_table_check(direction) - -/obj/structure/table/verb/do_flip() - set name = "Flip table" - set desc = "Flips a non-reinforced table" - set category = "Object" - set src in oview(1) - - if (!can_touch(usr) || ismouse(usr)) - return - - if(reinforced || flipped < 0 || !flip(get_cardinal_dir(usr,src))) - to_chat(usr, "It won't budge.") - return - - usr.visible_message("[usr] flips \the [src]!") - - if(atom_flags & ATOM_FLAG_CLIMBABLE) - object_shaken() - - return - -/obj/structure/table/proc/unflipping_check(var/direction) - - for(var/mob/M in oview(src,0)) - return 0 - - var/obj/occupied = turf_is_crowded() - if(occupied) - to_chat(usr, "There's \a [occupied] in the way.") - return 0 - - var/list/L = list() - if(direction) - L.Add(direction) - else - L.Add(turn(src.dir,-90)) - L.Add(turn(src.dir,90)) - for(var/new_dir in L) - var/obj/structure/table/T = locate() in get_step(src.loc,new_dir) - if(T && T.material && material && T.material.name == material.name) - if(T.flipped == 1 && T.dir == src.dir && !T.unflipping_check(new_dir)) - return 0 - return 1 - -/obj/structure/table/proc/do_put() - set name = "Put table back" - set desc = "Puts a flipped table back" - set category = "Object" - set src in oview(1) - - if (!can_touch(usr)) - return - - if (!unflipping_check()) - to_chat(usr, "It won't budge.") - return - unflip() - -/obj/structure/table/proc/flip(var/direction) - if( !straight_table_check(turn(direction,90)) || !straight_table_check(turn(direction,-90)) ) - return FALSE - - if(!do_after(usr, 1 SECOND, src, DO_PUBLIC_UNIQUE)) - return FALSE - verbs -=/obj/structure/table/verb/do_flip - verbs +=/obj/structure/table/proc/do_put - - var/list/targets = list(get_step(src,dir),get_step(src,turn(dir, 45)),get_step(src,turn(dir, -45))) - for (var/atom/movable/A in get_turf(src)) - if (!A.anchored) - spawn(0) - A.throw_at(pick(targets),1,1) - - set_dir(direction) - if(dir != NORTH) - layer = ABOVE_HUMAN_LAYER - atom_flags &= ~ATOM_FLAG_CLIMBABLE //flipping tables allows them to be used as makeshift barriers - flipped = 1 - atom_flags |= ATOM_FLAG_CHECKS_BORDER - for(var/D in list(turn(direction, 90), turn(direction, -90))) - var/obj/structure/table/T = locate() in get_step(src,D) - if(T && T.can_connect() && T.flipped == 0 && material && T.material && T.material.name == material.name) - T.flip(direction) - damage_health(rand(5, 10), DAMAGE_BRUTE) - update_connections(1) - update_icon() - - return TRUE - -/obj/structure/table/proc/unflip() - if(!do_after(usr, 1 SECOND, src, DO_PUBLIC_UNIQUE)) - return FALSE - verbs -=/obj/structure/table/proc/do_put - verbs +=/obj/structure/table/verb/do_flip - - reset_plane_and_layer() - atom_flags |= ATOM_FLAG_CLIMBABLE - flipped = 0 - atom_flags &= ~ATOM_FLAG_CHECKS_BORDER - for(var/D in list(turn(dir, 90), turn(dir, -90))) - var/obj/structure/table/T = locate() in get_step(src.loc,D) - if(T && T.flipped == 1 && T.dir == src.dir && material && T.material&& T.material.name == material.name) - T.unflip() - - update_connections(1) - update_icon() - - return TRUE - -/obj/structure/table/CtrlClick() - if(usr && usr.Adjacent(src)) - if(!flipped) - do_flip() - else - do_put() - return TRUE - return FALSE diff --git a/code/modules/tables/interactions.dm b/code/modules/tables/interactions.dm deleted file mode 100644 index 2e047901a84fd..0000000000000 --- a/code/modules/tables/interactions.dm +++ /dev/null @@ -1,120 +0,0 @@ - -/obj/structure/table/CanPass(atom/movable/mover, turf/target, height=0, air_group=0) - if(air_group || (height==0)) return 1 - if(istype(mover,/obj/item/projectile)) - return (check_cover(mover,target)) - if (flipped == 1) - if (get_dir(loc, target) == dir) - return !density - else - return 1 - if(istype(mover) && mover.checkpass(PASS_FLAG_TABLE)) - return 1 - var/obj/structure/table/T = (locate() in get_turf(mover)) - return (T && !T.flipped) //If we are moving from a table, check if it is flipped. - //If the table we are standing on is not flipped, then we can move freely to another table. - - -//checks if projectile 'P' from turf 'from' can hit whatever is behind the table. Returns 1 if it can, 0 if bullet stops. -/obj/structure/table/proc/check_cover(obj/item/projectile/P, turf/from) - var/turf/cover - if(flipped) - cover = get_turf(src) - else - cover = get_step(loc, get_dir(from, loc)) - if(!cover) - return 1 - if (get_dist(P.starting, loc) <= 1) //Tables won't help you if people are THIS close - return 1 - - var/chance = 20 - if(ismob(P.original) && get_turf(P.original) == cover) - var/mob/M = P.original - if (M.lying) - chance += 20 //Lying down lets you catch less bullets - if(flipped) - if(get_dir(loc, from) == dir) //Flipped tables catch mroe bullets - chance += 30 - else - return 1 //But only from one side - - if(prob(chance)) - return 0 //blocked - return 1 - -/obj/structure/table/bullet_act(obj/item/projectile/P) - . = ..() - if (health_dead) - return PROJECTILE_CONTINUE - -/obj/structure/table/CheckExit(atom/movable/O as mob|obj, target as turf) - if(istype(O) && O.checkpass(PASS_FLAG_TABLE)) - return 1 - if (flipped==1) - if (get_dir(loc, target) == dir) - return !density - else - return 1 - return 1 - - -/obj/structure/table/MouseDrop_T(mob/target, mob/user) - if (isrobot(user)) - return - if (!ismob(target)) - return - if (target.loc != loc) - step(target, get_dir(target, loc)) - ..() - -/* -Automatic alignment of items to an invisible grid, defined by CELLS and CELLSIZE, defined in code/__defines/misc.dm. -Since the grid will be shifted to own a cell that is perfectly centered on the turf, we end up with two 'cell halves' -on edges of each row/column. -Each item defines a center_of_mass, which is the pixel of a sprite where its projected center of mass toward a turf -surface can be assumed. For a piece of paper, this will be in its center. For a bottle, it will be (near) the bottom -of the sprite. -auto_align() will then place the sprite so the defined center_of_mass is at the bottom left corner of the grid cell -closest to where the cursor has clicked on. -Note: This proc can be overwritten to allow for different types of auto-alignment. -*/ -/obj/item/var/center_of_mass = "x=16;y=16" //can be null for no exact placement behaviour -/obj/structure/table/proc/auto_align(obj/item/W, click_params) - if (!W.center_of_mass) // Clothing, material stacks, generally items with large sprites where exact placement would be unhandy. - W.pixel_x = rand(-W.randpixel, W.randpixel) - W.pixel_y = rand(-W.randpixel, W.randpixel) - W.pixel_z = 0 - return - - if (!click_params) - return - - var/list/click_data = params2list(click_params) - if (!click_data["icon-x"] || !click_data["icon-y"]) - return - - // Calculation to apply new pixelshift. - var/mouse_x = text2num(click_data["icon-x"])-1 // Ranging from 0 to 31 - var/mouse_y = text2num(click_data["icon-y"])-1 - - var/cell_x = clamp(round(mouse_x/CELLSIZE), 0, CELLS-1) // Ranging from 0 to CELLS-1 - var/cell_y = clamp(round(mouse_y/CELLSIZE), 0, CELLS-1) - - var/list/center = cached_key_number_decode(W.center_of_mass) - - W.pixel_x = (CELLSIZE * (cell_x + 0.5)) - center["x"] - W.pixel_y = (CELLSIZE * (cell_y + 0.5)) - center["y"] - W.pixel_z = 0 - -/obj/structure/table/rack/auto_align(obj/item/W, click_params) - if(W && !W.center_of_mass) - ..(W) - - var/i = -1 - for (var/obj/item/I in get_turf(src)) - if (I.anchored || !I.center_of_mass) - continue - i++ - I.pixel_x = 1 // There's a sprite layering bug for 0/0 pixelshift, so we avoid it. - I.pixel_y = max(3-i*3, -3) + 1 - I.pixel_z = 0 diff --git a/code/modules/tables/presets.dm b/code/modules/tables/presets.dm deleted file mode 100644 index 5408caa4ea89a..0000000000000 --- a/code/modules/tables/presets.dm +++ /dev/null @@ -1,111 +0,0 @@ -/obj/structure/table/standard - icon_state = "plain_preview" - color = COLOR_OFF_WHITE - material = DEFAULT_FURNITURE_MATERIAL - -/obj/structure/table/steel - icon_state = "plain_preview" - color = COLOR_GRAY40 - material = MATERIAL_STEEL - -/obj/structure/table/marble - icon_state = "stone_preview" - color = COLOR_GRAY80 - material = MATERIAL_MARBLE - -/obj/structure/table/reinforced - icon_state = "reinf_preview" - color = COLOR_OFF_WHITE - material = DEFAULT_FURNITURE_MATERIAL - reinforced = MATERIAL_STEEL - -/obj/structure/table/steel_reinforced - icon_state = "reinf_preview" - color = COLOR_GRAY40 - material = MATERIAL_STEEL - reinforced = MATERIAL_STEEL - -/obj/structure/table/gamblingtable - icon_state = "gamble_preview" - carpeted = 1 - material = MATERIAL_WALNUT - -/obj/structure/table/glass - icon_state = "plain_preview" - color = COLOR_DEEP_SKY_BLUE - alpha = 77 // 0.3 * 255 - material = MATERIAL_GLASS - -/obj/structure/table/glass/pglass - color = "#8f29a3" - material = MATERIAL_PHORON_GLASS - -/obj/structure/table/holotable - icon_state = "holo_preview" - color = COLOR_OFF_WHITE - -/obj/structure/table/holotable/New() - material = "holo[DEFAULT_FURNITURE_MATERIAL]" - ..() - -/obj/structure/table/holo_woodentable - icon_state = "holo_preview" - -/obj/structure/table/holo_woodentable/New() - material = "holo[MATERIAL_WOOD]" - ..() - -//wood wood wood -/obj/structure/table/woodentable - icon_state = "solid_preview" - color = WOOD_COLOR_GENERIC - material = MATERIAL_WOOD - -/obj/structure/table/woodentable_reinforced - icon_state = "reinf_preview" - color = WOOD_COLOR_GENERIC - material = MATERIAL_WOOD - reinforced = MATERIAL_WOOD - -/obj/structure/table/woodentable_reinforced/walnut - icon_state = "reinf_preview" - color = WOOD_COLOR_CHOCOLATE - material = MATERIAL_WALNUT - reinforced = MATERIAL_WALNUT - -/obj/structure/table/woodentable_reinforced/walnut/maple - reinforced = MATERIAL_MAPLE - -/obj/structure/table/woodentable_reinforced/mahogany - icon_state = "reinf_preview" - color = WOOD_COLOR_RICH - material = MATERIAL_MAHOGANY - reinforced = MATERIAL_MAHOGANY - -/obj/structure/table/woodentable_reinforced/mahogany/walnut - reinforced = MATERIAL_WALNUT - -/obj/structure/table/woodentable_reinforced/ebony - icon_state = "reinf_preview" - color = WOOD_COLOR_BLACK - material = MATERIAL_EBONY - reinforced = MATERIAL_WALNUT - -/obj/structure/table/woodentable_reinforced/ebony/walnut - reinforced = MATERIAL_WALNUT - -/obj/structure/table/woodentable/mahogany - color = WOOD_COLOR_RICH - material = MATERIAL_MAHOGANY - -/obj/structure/table/woodentable/maple - color = WOOD_COLOR_PALE - material = MATERIAL_MAPLE - -/obj/structure/table/woodentable/ebony - color = WOOD_COLOR_BLACK - material = MATERIAL_EBONY - -/obj/structure/table/woodentable/walnut - color = WOOD_COLOR_CHOCOLATE - material = MATERIAL_WALNUT \ No newline at end of file diff --git a/code/modules/tables/rack.dm b/code/modules/tables/rack.dm deleted file mode 100644 index 0c4a756dd9b9a..0000000000000 --- a/code/modules/tables/rack.dm +++ /dev/null @@ -1,38 +0,0 @@ -/obj/structure/table/rack - name = "rack" - desc = "Different from the Middle Ages version." - icon = 'icons/obj/objects.dmi' - icon_state = "rack" - can_plate = 0 - can_reinforce = 0 - flipped = -1 - - material = DEFAULT_FURNITURE_MATERIAL - -/obj/structure/table/rack/New() - ..() - verbs -= /obj/structure/table/verb/do_flip - verbs -= /obj/structure/table/proc/do_put - -/obj/structure/table/rack/Initialize() - auto_align() - . = ..() - -/obj/structure/table/rack/update_connections() - return - -/obj/structure/table/rack/update_desc() - return - -/obj/structure/table/rack/on_update_icon() - return - -/obj/structure/table/rack/can_connect() - return FALSE - -/obj/structure/table/rack/holorack/dismantle(obj/item/wrench/W, mob/user) - to_chat(user, "You cannot dismantle \the [src].") - return - -/obj/structure/table/rack/dark - color = COLOR_GRAY40 diff --git a/code/modules/tables/tables.dm b/code/modules/tables/tables.dm deleted file mode 100644 index b63d8a81dd2aa..0000000000000 --- a/code/modules/tables/tables.dm +++ /dev/null @@ -1,492 +0,0 @@ -/obj/structure/table - name = "table frame" - icon = 'icons/obj/tables.dmi' - icon_state = "frame" - desc = "It's a table, for putting things on. Or standing on, if you really want to." - density = TRUE - anchored = TRUE - atom_flags = ATOM_FLAG_NO_TEMP_CHANGE | ATOM_FLAG_CLIMBABLE - layer = TABLE_LAYER - throwpass = 1 - mob_offset = 12 - health_max = 10 - var/flipped = 0 - - // For racks. - var/can_reinforce = 1 - var/can_plate = 1 - - var/manipulating = 0 - var/material/reinforced = null - - // Gambling tables. I'd prefer reinforced with carpet/felt/cloth/whatever, but AFAIK it's either harder or impossible to get /obj/item/stack/material of those. - // Convert if/when you can easily get stacks of these. - var/carpeted = 0 - - connections = list("nw0", "ne0", "sw0", "se0") - -/obj/structure/table/New() - if(istext(material)) - material = SSmaterials.get_material_by_name(material) - if(istext(reinforced)) - reinforced = SSmaterials.get_material_by_name(reinforced) - ..() - -/obj/structure/table/proc/update_material() - var/new_health = 0 - if(!material) - new_health = 10 - else - new_health = material.integrity / 2 - if(reinforced) - new_health += reinforced.integrity / 2 - set_max_health(new_health) - -/obj/structure/table/damage_health(damage, damage_type, damage_flags = EMPTY_BITFIELD, severity) - // If the table is made of a brittle material, and is *not* reinforced with a non-brittle material, damage is multiplied by TABLE_BRITTLE_MATERIAL_MULTIPLIER - if (material?.is_brittle()) - if (reinforced) - if (reinforced.is_brittle()) - damage *= TABLE_BRITTLE_MATERIAL_MULTIPLIER - else - damage *= TABLE_BRITTLE_MATERIAL_MULTIPLIER - - . = ..() - -/obj/structure/table/on_death() - visible_message("\The [src] breaks down!") - break_to_parts() - -/obj/structure/table/Initialize() - . = ..() - - // One table per turf. - for(var/obj/structure/table/T in loc) - if(T != src) - // There's another table here that's not us, break to metal. - // break_to_parts calls qdel(src) - break_to_parts(full_return = 1) - return - - // reset color/alpha, since they're set for nice map previews - color = "#ffffff" - alpha = 255 - update_connections(1) - update_icon() - update_desc() - update_material() - -/obj/structure/table/Destroy() - material = null - reinforced = null - update_connections(1) // Update tables around us to ignore us (material=null forces no connections) - for(var/obj/structure/table/T in oview(src, 1)) - T.update_icon() - . = ..() - -/obj/structure/table/attackby(obj/item/W, mob/user, click_params) - if(!reinforced && !carpeted && material && isWrench(W) && user.a_intent == I_HURT) //robots dont have disarm so it's harm - remove_material(W, user) - if(!material) - update_connections(1) - update_icon() - for(var/obj/structure/table/T in oview(src, 1)) - T.update_icon() - update_desc() - update_material() - return 1 - - if(!carpeted && !reinforced && !material && isWrench(W) && user.a_intent == I_HURT) - dismantle(W, user) - return 1 - - if (user.a_intent == I_HURT) - ..() - return - - if(reinforced && isScrewdriver(W)) - remove_reinforced(W, user) - if(!reinforced) - update_desc() - update_icon() - update_material() - return 1 - - if(carpeted && isCrowbar(W)) - user.visible_message("\The [user] removes the carpet from \the [src].", - "You remove the carpet from \the [src].") - new /obj/item/stack/tile/carpet(loc) - carpeted = 0 - update_icon() - return 1 - - if(!carpeted && material && istype(W, /obj/item/stack/tile/carpet)) - var/obj/item/stack/tile/carpet/C = W - if(C.use(1)) - user.visible_message("\The [user] adds \the [C] to \the [src].", - "You add \the [C] to \the [src].") - carpeted = 1 - update_icon() - return 1 - else - to_chat(user, "You don't have enough carpet!") - return - - if(health_damaged() && isWelder(W)) - var/obj/item/weldingtool/F = W - if(F.welding) - to_chat(user, "You begin reparing damage to \the [src].") - playsound(src.loc, 'sound/items/Welder.ogg', 50, 1) - if(!do_after(user, 2 SECONDS, src, DO_PUBLIC_UNIQUE) || !F.remove_fuel(1, user)) - return - user.visible_message("\The [user] repairs some damage to \the [src].", - "You repair some damage to \the [src].") - restore_health(get_max_health() / 5) // 20% repair per application - return 1 - return - - if(!material && can_plate && istype(W, /obj/item/stack/material)) - material = common_material_add(W, user, "plat") - if(material) - update_connections(1) - update_icon() - update_desc() - update_material() - return 1 - - if(istype(W, /obj/item/hand)) //playing cards - var/obj/item/hand/H = W - if(H.cards && H.cards.len == 1) - usr.visible_message("\The [user] plays \the [H.cards[1].name].") - return - - // Handle dismantling or placing things on the table from here on. - if(isrobot(user)) - return - - if(W.loc != user) // This should stop mounted modules ending up outside the module. - return - - if(istype(W, /obj/item/melee/energy/blade) || istype(W,/obj/item/psychic_power/psiblade/master/grand/paramount)) - var/datum/effect/effect/system/spark_spread/spark_system = new /datum/effect/effect/system/spark_spread() - spark_system.set_up(5, 0, src.loc) - spark_system.start() - playsound(src.loc, 'sound/weapons/blade1.ogg', 50, 1) - playsound(src.loc, "sparks", 50, 1) - user.visible_message("\The [src] was sliced apart by [user]!") - break_to_parts() - return - - if (istype(W, /obj/item/natural_weapon)) - return ..() - - if(can_plate && !material) - to_chat(user, "There's nothing to put \the [W] on! Try adding plating to \the [src] first.") - return - - // Placing stuff on tables - if(user.unEquip(W, src.loc)) - auto_align(W, click_params) - return 1 - - return ..() - -/obj/structure/table/MouseDrop_T(obj/item/stack/material/what) - if(can_reinforce && isliving(usr) && (!usr.stat) && istype(what) && usr.get_active_hand() == what && Adjacent(usr)) - reinforce_table(what, usr) - else - return ..() - -/obj/structure/table/proc/reinforce_table(obj/item/stack/material/S, mob/user) - if(reinforced) - to_chat(user, "\The [src] is already reinforced!") - return - - if(!can_reinforce) - to_chat(user, "\The [src] cannot be reinforced!") - return - - if(!material) - to_chat(user, "Plate \the [src] before reinforcing it!") - return - - if(flipped) - to_chat(user, "Put \the [src] back in place before reinforcing it!") - return - - reinforced = common_material_add(S, user, "reinforc") - if(reinforced) - update_desc() - update_icon() - update_material() - -/obj/structure/table/proc/update_desc() - if(material) - name = "[material.display_name] table" - else - name = "table frame" - - if(reinforced) - name = "reinforced [name]" - desc = "[initial(desc)] This one seems to be reinforced with [reinforced.display_name]." - else - desc = initial(desc) - -// Returns the material to set the table to. -/obj/structure/table/proc/common_material_add(obj/item/stack/material/S, mob/user, verb) // Verb is actually verb without 'e' or 'ing', which is added. Works for 'plate'/'plating' and 'reinforce'/'reinforcing'. - var/material/M = S.get_material() - if(!istype(M)) - to_chat(user, "You cannot [verb]e \the [src] with \the [S].") - return null - - if(manipulating) return M - manipulating = 1 - to_chat(user, "You begin [verb]ing \the [src] with [M.display_name].") - if(!do_after(user, 2 SECONDS, src, DO_PUBLIC_UNIQUE) || !S.use(1)) - manipulating = 0 - return null - user.visible_message("\The [user] [verb]es \the [src] with [M.display_name].", "You finish [verb]ing \the [src].") - manipulating = 0 - return M - -// Returns the material to set the table to. -/obj/structure/table/proc/common_material_remove(mob/user, material/M, delay, what, type_holding, sound) - if(!M.stack_type) - to_chat(user, "You are unable to remove the [what] from this table!") - return M - - if(manipulating) return M - manipulating = 1 - user.visible_message("\The [user] begins removing the [type_holding] holding \the [src]'s [M.display_name] [what] in place.", - "You begin removing the [type_holding] holding \the [src]'s [M.display_name] [what] in place.") - if(sound) - playsound(src.loc, sound, 50, 1) - if(!do_after(user, 4 SECONDS, src, DO_PUBLIC_UNIQUE)) - manipulating = 0 - return M - user.visible_message("\The [user] removes the [M.display_name] [what] from \the [src].", - "You remove the [M.display_name] [what] from \the [src].") - M.place_sheet(src.loc) - manipulating = 0 - return null - -/obj/structure/table/proc/remove_reinforced(obj/item/screwdriver/S, mob/user) - reinforced = common_material_remove(user, reinforced, 40, "reinforcements", "screws", 'sound/items/Screwdriver.ogg') - -/obj/structure/table/proc/remove_material(obj/item/wrench/W, mob/user) - material = common_material_remove(user, material, 20, "plating", "bolts", 'sound/items/Ratchet.ogg') - -/obj/structure/table/proc/dismantle(obj/item/wrench/W, mob/user) - reset_mobs_offset() - if(manipulating) return - manipulating = 1 - user.visible_message("\The [user] begins dismantling \the [src].", - "You begin dismantling \the [src].") - playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1) - if(!do_after(user, 2 SECONDS, src, DO_PUBLIC_UNIQUE)) - manipulating = 0 - return - user.visible_message("\The [user] dismantles \the [src].", - "You dismantle \the [src].") - new /obj/item/stack/material/steel(src.loc) - qdel(src) - return - -// Returns a list of /obj/item/material/shard objects that were created as a result of this table's breakage. -// Used for !fun! things such as embedding shards in the faces of tableslammed people. - -// The repeated -// S = [x].place_shard(loc) -// if(S) shards += S -// is to avoid filling the list with nulls, as place_shard won't place shards of certain materials (holo-wood, holo-steel) - -/obj/structure/table/proc/break_to_parts(full_return = 0) - reset_mobs_offset() - var/list/shards = list() - var/obj/item/material/shard/S = null - if(reinforced) - if(reinforced.stack_type && (full_return || prob(20))) - reinforced.place_sheet(loc) - else - S = reinforced.place_shard(loc) - if(S) shards += S - if(material) - if(material.stack_type && (full_return || prob(20))) - material.place_sheet(loc) - else - S = material.place_shard(loc) - if(S) shards += S - if(carpeted && (full_return || prob(50))) // Higher chance to get the carpet back intact, since there's no non-intact option - new /obj/item/stack/tile/carpet(src.loc) - if(full_return || prob(20)) - new /obj/item/stack/material/steel(src.loc) - else - var/material/M = SSmaterials.get_material_by_name(MATERIAL_STEEL) - S = M.place_shard(loc) - if(S) shards += S - qdel(src) - return shards - -/obj/structure/table/on_update_icon() - if(!flipped) - mob_offset = initial(mob_offset) - icon_state = "blank" - overlays.Cut() - - var/image/I - - // Base frame shape. Mostly done for glass/diamond tables, where this is visible. - for(var/i = 1 to 4) - I = image(icon, dir = SHIFTL(1, i - 1), icon_state = connections[i]) - overlays += I - - // Standard table image - if(material) - for(var/i = 1 to 4) - I = image(icon, "[material.table_icon_base]_[connections[i]]", dir = SHIFTL(1, i - 1)) - if(material.icon_colour) I.color = material.icon_colour - I.alpha = 255 * material.opacity - overlays += I - - // Reinforcements - if(reinforced) - for(var/i = 1 to 4) - I = image(icon, "[reinforced.table_reinf]_[connections[i]]", dir = SHIFTL(1, i - 1)) - I.color = reinforced.icon_colour - I.alpha = 255 * reinforced.opacity - overlays += I - - if(carpeted) - for(var/i = 1 to 4) - I = image(icon, "carpet_[connections[i]]", dir = SHIFTL(1, i - 1)) - overlays += I - else - mob_offset = 0 - overlays.Cut() - var/type = 0 - var/tabledirs = 0 - for(var/direction in list(turn(dir,90), turn(dir,-90)) ) - var/obj/structure/table/T = locate(/obj/structure/table ,get_step(src,direction)) - if (T && T.flipped == 1 && T.dir == src.dir && material && T.material && T.material.name == material.name) - type++ - tabledirs |= direction - - type = "[type]" - if (type=="1") - if (tabledirs & turn(dir,90)) - type += "-" - if (tabledirs & turn(dir,-90)) - type += "+" - - icon_state = "flip[type]" - if(material) - var/image/I = image(icon, "[material.table_icon_base]_flip[type]") - I.color = material.icon_colour - I.alpha = 255 * material.opacity - overlays += I - name = "[material.display_name] table" - else - name = "table frame" - - if(reinforced) - var/image/I = image(icon, "[reinforced.table_reinf]_flip[type]") - I.color = reinforced.icon_colour - I.alpha = 255 * reinforced.opacity - overlays += I - - if(carpeted) - overlays += "carpet_flip[type]" - -/obj/structure/table/proc/can_connect() - return TRUE - -// set propagate if you're updating a table that should update tables around it too, for example if it's a new table or something important has changed (like material). -/obj/structure/table/update_connections(propagate=0) - if(!material) - connections = list("0", "0", "0", "0") - - if(propagate) - for(var/obj/structure/table/T in oview(src, 1)) - T.update_connections() - return - - var/list/blocked_dirs = list() - for(var/obj/structure/window/W in get_turf(src)) - if(W.is_fulltile()) - connections = list("0", "0", "0", "0") - return - blocked_dirs |= W.dir - - for(var/D in list(NORTH, SOUTH, EAST, WEST) - blocked_dirs) - var/turf/T = get_step(src, D) - for(var/obj/structure/window/W in T) - if(W.is_fulltile() || W.dir == GLOB.reverse_dir[D]) - blocked_dirs |= D - break - else - if(W.dir != D) // it's off to the side - blocked_dirs |= W.dir|D // blocks the diagonal - - for(var/D in list(NORTHEAST, NORTHWEST, SOUTHEAST, SOUTHWEST) - blocked_dirs) - var/turf/T = get_step(src, D) - - for(var/obj/structure/window/W in T) - if(W.is_fulltile() || (W.dir & GLOB.reverse_dir[D])) - blocked_dirs |= D - break - - // Blocked cardinals block the adjacent diagonals too. Prevents weirdness with tables. - for(var/x in list(NORTH, SOUTH)) - for(var/y in list(EAST, WEST)) - if((x in blocked_dirs) || (y in blocked_dirs)) - blocked_dirs |= x|y - - var/list/connection_dirs = list() - - for(var/obj/structure/table/T in orange(src, 1)) - if(!T.can_connect()) continue - var/T_dir = get_dir(src, T) - if(T_dir in blocked_dirs) continue - if(material && T.material && material.name == T.material.name && flipped == T.flipped) - connection_dirs |= T_dir - if(propagate) - spawn(0) - T.update_connections() - T.update_icon() - - connections = dirs_to_corner_states(connection_dirs) - -#define CORNER_NONE 0 -#define CORNER_COUNTERCLOCKWISE 1 -#define CORNER_DIAGONAL 2 -#define CORNER_CLOCKWISE 4 - -/* - turn() is weird: - turn(icon, angle) turns icon by angle degrees clockwise - turn(matrix, angle) turns matrix by angle degrees clockwise - turn(dir, angle) turns dir by angle degrees counter-clockwise -*/ - -/proc/dirs_to_corner_states(list/dirs) - if(!istype(dirs)) return - - var/list/ret = list(NORTHWEST, SOUTHEAST, NORTHEAST, SOUTHWEST) - - for(var/i = 1 to ret.len) - var/dir = ret[i] - . = CORNER_NONE - if(dir in dirs) - . |= CORNER_DIAGONAL - if(turn(dir,45) in dirs) - . |= CORNER_COUNTERCLOCKWISE - if(turn(dir,-45) in dirs) - . |= CORNER_CLOCKWISE - ret[i] = "[.]" - - return ret - -#undef CORNER_NONE -#undef CORNER_COUNTERCLOCKWISE -#undef CORNER_DIAGONAL -#undef CORNER_CLOCKWISE diff --git a/code/modules/tables/update_triggers.dm b/code/modules/tables/update_triggers.dm deleted file mode 100644 index b4b1308524b59..0000000000000 --- a/code/modules/tables/update_triggers.dm +++ /dev/null @@ -1,20 +0,0 @@ -/obj/structure/window/New() - ..() - for(var/obj/structure/table/T in view(src, 1)) - T.update_connections() - T.update_icon() - -/obj/structure/window/Destroy() - var/oldloc = loc - . = ..() - for(var/obj/structure/table/T in view(oldloc, 1)) - T.update_connections() - T.update_icon() - -/obj/structure/window/Move() - var/oldloc = loc - . = ..() - if(loc != oldloc) - for(var/obj/structure/table/T in view(oldloc, 1) | view(loc, 1)) - T.update_connections() - T.update_icon() \ No newline at end of file diff --git a/code/modules/tension/tension.dm b/code/modules/tension/tension.dm deleted file mode 100644 index 8dc57804c1e59..0000000000000 --- a/code/modules/tension/tension.dm +++ /dev/null @@ -1,245 +0,0 @@ -// This code is used to give a very rough estimate of how screwed an individual player might be at any given moment when fighting monsters. -// You could use this to have an effect trigger when someone is in serious danger, or as a means for an AI to guess which mob needs to die first. -// The idea and the code structure was taken from Dungeon Crawl Stone Soup. - -/atom/movable/proc/get_threat(var/mob/living/threatened) - return 0 - - -/atom/movable/proc/guess_threat_level(var/mob/living/threatened) - return 0 - -/mob/living/simple_animal - var/threat_level = null // Set this if you want an explicit danger rating. - -/mob/living/simple_animal/guess_threat_level(var/mob/living/threatened) - if(threat_level) // If they have a predefined number, use it. - return threat_level - // Otherwise we need to guess how scary this thing is. - var/threat_guess = 0 - - // First lets consider their attack ability. - var/will_point_blank = FALSE - if(has_AI()) - will_point_blank = ai_holder.pointblank - - var/potential_damage = 0 - if(!projectiletype || ( ( get_dist(src, threatened) >= 1) && !will_point_blank ) ) // Melee damage. - potential_damage = (natural_weapon.force) / 2 - - // Treat potential_damage as estimated DPS. If the enemy attacks twice as fast as usual, it will double the number. - potential_damage *= 1 SECOND / (base_attack_cooldown + melee_attack_delay) - else - var/obj/item/projectile/P = new projectiletype(src) - if(P.nodamage) // Tasers are somewhat less scary. - potential_damage = P.agony / 2 - else - potential_damage = P.damage - if (P.damage_type == DAMAGE_PAIN) // Not sure if any projectiles do this, but can't be too safe. TODO: i dont think pain is a dmg type - potential_damage /= 2 - // Rubber bullets, I guess. - potential_damage += P.agony / 2 - qdel(P) - - potential_damage *= 1 SECOND / (base_attack_cooldown + ranged_attack_delay) - - // Special attacks are ultra-specific to the mob so a generic threat assessment isn't really possible. - - threat_guess += potential_damage - - // Then consider their defense. - threat_guess += getMaxHealth() / 5 // 100 health translates to 20 threat. - - return threat_guess - -/mob/living/get_threat(var/mob/living/threatened) - if(stat) - return 0 - - -/mob/living/simple_animal/get_threat(var/mob/living/threatened) - . = ..() - - if(has_AI()) - if(!ai_holder.hostile) - return 0 // Can't hurt anyone. - - if(incapacitated(INCAPACITATION_DISABLED)) - return 0 // Can't currently hurt you if it's stunned. - - var/friendly = threatened.faction == faction - - var/threat = guess_threat_level(threatened) - - // Hurt entities contribute less tension. - threat *= health - threat /= getMaxHealth() - - // Allies reduce tension instead of adding. - if(friendly) - threat = -threat - - else - if(threatened.invisibility > see_invisible) - threat /= 2 // Target cannot be seen by src. - if(invisibility > threatened.see_invisible) - threat *= 2 // Target cannot see src. - - // Handle statuses. - if(confused) - threat /= 2 - - // if(has_modifier_of_type(/datum/modifier/berserk)) - // threat *= 2 - - // Handle ability to harm. - // Being five tiles away from some spiders is a lot less scary than being in melee range of five spiders at once. - if(!projectiletype) - threat /= max(get_dist(src, threatened), 1) - - return threat - -// Carbon / mostly Human threat check. -/mob/living/carbon/get_threat(var/mob/living/threatened) - . = ..() - - if(has_AI()) - if(!ai_holder.hostile) - return 0 - - if(incapacitated(INCAPACITATION_DISABLED)) - return 0 - - var/friendly = (IIsAlly(threatened) && a_intent == I_HELP) - - var/threat = guess_threat_level(threatened) - - threat *= health - threat /= getMaxHealth() - - // Allies reduce tension instead of adding. - if(friendly) - threat = -threat - - else - if(threatened.invisibility > see_invisible) - threat /= 2 // Target cannot be seen by src. - if(invisibility > threatened.see_invisible) - threat *= 2 // Target cannot see src. - - // Handle statuses. - if(confused) - threat /= 2 - - // if(has_modifier_of_type(/datum/modifier/berserk)) - // threat *= 2 - - return threat - -/mob/living/carbon/guess_threat_level(var/mob/living/threatened) - var/threat_guess = 0 - - // First lets consider their attack ability. - var/will_point_blank = FALSE - if(has_AI()) - will_point_blank = ai_holder.pointblank - - . = ..() - - var/obj/item/I = get_active_hand() - if(!I || !istype(I)) - var/damage_guess = 0 - if(ishuman(src) && ishuman(threatened)) - var/mob/living/carbon/human/H = src - var/datum/unarmed_attack/attack = H.get_unarmed_attack(threatened, BP_CHEST) - if(!attack) - damage_guess += 5 - - var/punch_damage = attack.get_unarmed_damage(H) - if(H.gloves) - if(istype(H.gloves, /obj/item/clothing/gloves)) - var/obj/item/clothing/gloves/G = H.gloves - punch_damage += G.force - - damage_guess += punch_damage - - else - damage_guess += 5 - - threat_guess += damage_guess - - else - var/weapon_attack_speed = DEFAULT_ATTACK_COOLDOWN / (1 SECOND) - var/weapon_damage = I.force - - if(istype(I, /obj/item/gun)) - will_point_blank = TRUE - var/obj/item/gun/projectile/G = I - - if (istype(G)) - var/obj/item/ammo_casing/A = G.ammo_type - var/obj/item/projectile/P = new A.projectile_type - - if(P) // Does the gun even have a projectile type? - weapon_damage = P.damage - if(will_point_blank && a_intent == I_HURT) - weapon_damage *= 1.5 - weapon_attack_speed = G.fire_delay / (1 SECOND) - qdel(P) - - var/average_damage = weapon_damage / weapon_attack_speed - - threat_guess += average_damage - - // Consider intent. - switch(a_intent) - if(I_HELP) // Not likely to fight us. - threat_guess *= 0.4 - if(I_DISARM) // Might engage us, but unlikely to be with the intent to kill. - threat_guess *= 0.8 - if(I_GRAB) // May try to restrain us. This is here for reference, or later tweaking if needed. - threat_guess *= 1 - if(I_HURT) // May try to hurt us. - threat_guess *= 1.25 - - // Then consider their defense. - threat_guess += getMaxHealth() / 5 // 100 health translates to 20 threat. - - return threat_guess - -// Gives a rough idea of how much danger someone is in. Meant to be used for PvE things since PvP has too many unknown variables. -/mob/living/proc/get_tension() - var/tension = 0 - var/list/potential_threats = list() - - // First, get everything threatening to us. - for(var/thing in view(src)) - if(isliving(thing)) - potential_threats += thing - if(istype(thing, /obj/machinery/porta_turret)) - potential_threats += thing - - var/danger = FALSE - // Now to get all the threats. - for(var/atom/movable/AM in potential_threats) - var/tension_from_AM = AM.get_threat(src) - tension += tension_from_AM - if(tension_from_AM > 0) - danger = TRUE - - if(!danger) - return 0 - - // Tension is roughly doubled when about to fall into crit. - var/max_health = getMaxHealth() - tension *= 2 * max_health / (health + max_health) - - // Being unable to act is really tense. - if(incapacitated(INCAPACITATION_DISABLED) && !lying) - tension *= 10 - return tension - - if(confused) - tension *= 2 - - return tension diff --git a/code/modules/turbolift/_turbolift.dm b/code/modules/turbolift/_turbolift.dm deleted file mode 100644 index 9fd9f79ddfc7d..0000000000000 --- a/code/modules/turbolift/_turbolift.dm +++ /dev/null @@ -1,12 +0,0 @@ -/* - * Turbolifts! Sort of like multishuttles-lite. - * - * How-to: Map /obj/turbolift_map_holder in at the bottom of the shaft, give it a depth - * value equivalent to the number of floors it should span (inclusive of the first), - * and at runtime it will update the map, set areas and create control panels and - * wifi-set doors appropriate to itself. You will save time at init if you map the - * elevator shaft in properly before runtime, but ultimately you're just avoiding a - * bunch of ChangeTurf() calls. - */ - -var/global/list/turbolifts = list() diff --git a/code/modules/turbolift/turbolift.dm b/code/modules/turbolift/turbolift.dm deleted file mode 100644 index b95724c551f5c..0000000000000 --- a/code/modules/turbolift/turbolift.dm +++ /dev/null @@ -1,149 +0,0 @@ -// Lift master datum. One per turbolift. -/datum/turbolift - var/datum/turbolift_floor/target_floor // Where are we going? - var/datum/turbolift_floor/current_floor // Where is the lift currently? - var/list/doors = list() // Doors inside the lift structure. - var/list/queued_floors = list() // Where are we moving to next? - var/list/floors = list() // All floors in this system. - var/move_delay = 3 SECONDS // Time between floor changes. - var/floor_wait_delay = 9 SECONDS // Time to wait at floor stops. - var/obj/structure/lift/panel/control_panel_interior // Lift control panel. - var/doors_closing = 0 // Whether doors are in the process of closing - - var/tmp/moving_upwards - var/busy_state // Used for controller processing. - var/next_process - -/datum/turbolift/proc/emergency_stop() - queued_floors.Cut() - target_floor = null - open_doors() - -/datum/turbolift/proc/doors_are_open(var/datum/turbolift_floor/use_floor = current_floor) - for(var/obj/machinery/door/airlock/door in (use_floor ? (doors + use_floor.doors) : doors)) - if(!door.density) - return 1 - return 0 - -/datum/turbolift/proc/open_doors(var/datum/turbolift_floor/use_floor = current_floor) - for(var/obj/machinery/door/airlock/door in (use_floor ? (doors + use_floor.doors) : doors)) - door.command("open") - return - -/datum/turbolift/proc/close_doors(var/datum/turbolift_floor/use_floor = current_floor) - for(var/obj/machinery/door/airlock/door in (use_floor ? (doors + use_floor.doors) : doors)) - door.command("close") - return - -#define LIFT_MOVING 1 -#define LIFT_WAITING_A 2 -#define LIFT_WAITING_B 3 - -/datum/turbolift/Process() - if(world.time < next_process) - return - switch(busy_state) - if(LIFT_MOVING) - if(!do_move()) - queued_floors.Cut() - return PROCESS_KILL - else if(!next_process) - next_process = world.time + move_delay - if(LIFT_WAITING_A) - var/area/turbolift/origin = locate(current_floor.area_ref) - control_panel_interior.visible_message("The elevator announces, \"[origin.lift_announce_str]\"") - next_process = world.time + floor_wait_delay - busy_state = LIFT_WAITING_B - if(LIFT_WAITING_B) - if(queued_floors.len) - busy_state = LIFT_MOVING - else - busy_state = null - return PROCESS_KILL - -/datum/turbolift/proc/do_move() - next_process = null - - var/current_floor_index = floors.Find(current_floor) - - if(!target_floor) - if(!queued_floors || !queued_floors.len) - return 0 - target_floor = queued_floors[1] - queued_floors -= target_floor - if(current_floor_index < floors.Find(target_floor)) - moving_upwards = 1 - else - moving_upwards = 0 - - if(doors_are_open()) - if(!doors_closing) - close_doors() - doors_closing = 1 - return 1 - else // We failed to close the doors - probably, someone is blocking them; stop trying to move - doors_closing = 0 - open_doors() - control_panel_interior.audible_message("\The [current_floor.ext_panel] buzzes loudly.") - playsound(control_panel_interior.loc, "sound/machines/buzz-two.ogg", 50, 1) - return 0 - - doors_closing = 0 // The doors weren't open, so they are done closing - - var/area/turbolift/origin = locate(current_floor.area_ref) - - if(target_floor == current_floor) - - playsound(control_panel_interior.loc, origin.arrival_sound, 50, 1) - target_floor.arrived(src) - target_floor = null - - next_process = world.time + 2 SECONDS - busy_state = LIFT_WAITING_A - return 1 - - // Work out where we're headed. - var/datum/turbolift_floor/next_floor - if(moving_upwards) - next_floor = floors[current_floor_index+1] - else - next_floor = floors[current_floor_index-1] - - var/area/turbolift/destination = locate(next_floor.area_ref) - - if(!istype(origin) || !istype(destination) || (origin == destination)) - return 0 - - for(var/turf/T in destination) - for(var/atom/movable/AM in T) - if(istype(AM, /mob/living)) - var/mob/living/M = AM - M.gib() - else if(AM.simulated) - qdel(AM) - - origin.move_contents_to(destination) - - if((locate(/obj/machinery/power) in destination) || (locate(/obj/structure/cable) in destination)) - SSmachines.makepowernets() - - current_floor = next_floor - control_panel_interior.visible_message("The elevator [moving_upwards ? "rises" : "descends"] smoothly.") - - return 1 - -/datum/turbolift/proc/queue_move_to(var/datum/turbolift_floor/floor) - if(!floor || !(floor in floors) || (floor in queued_floors)) - return // STOP PRESSING THE BUTTON. - floor.pending_move(src) - queued_floors |= floor - busy_state = LIFT_MOVING - START_PROCESSING(SSprocessing, src) - -// TODO: dummy machine ('lift mechanism') in powered area for functionality/blackout checks. -/datum/turbolift/proc/is_functional() - return 1 - -#undef LIFT_MOVING -#undef LIFT_WAITING_A -#undef LIFT_WAITING_B \ No newline at end of file diff --git a/code/modules/turbolift/turbolift_areas.dm b/code/modules/turbolift/turbolift_areas.dm deleted file mode 100644 index dbf568aec2e84..0000000000000 --- a/code/modules/turbolift/turbolift_areas.dm +++ /dev/null @@ -1,11 +0,0 @@ -// Used for creating the exchange areas. -/area/turbolift - name = "Turbolift" - base_turf = /turf/simulated/open - requires_power = 0 - sound_env = SMALL_ENCLOSED - - var/lift_floor_label = null - var/lift_floor_name = null - var/lift_announce_str = "Ding!" - var/arrival_sound = 'sound/machines/ding.ogg' diff --git a/code/modules/turbolift/turbolift_console.dm b/code/modules/turbolift/turbolift_console.dm deleted file mode 100644 index 0a45ac79716e5..0000000000000 --- a/code/modules/turbolift/turbolift_console.dm +++ /dev/null @@ -1,150 +0,0 @@ -// Base type, do not use. -/obj/structure/lift - name = "turbolift control component" - icon = 'icons/obj/turbolift.dmi' - anchored = TRUE - density = FALSE - layer = ABOVE_OBJ_LAYER - - var/datum/turbolift/lift - -/obj/structure/lift/set_dir(var/newdir) - . = ..() - pixel_x = 0 - pixel_y = 0 - if(dir & NORTH) - pixel_y = -32 - else if(dir & SOUTH) - pixel_y = 32 - else if(dir & EAST) - pixel_x = -32 - else if(dir & WEST) - pixel_x = 32 - -/obj/structure/lift/proc/pressed(var/mob/user) - if(!istype(user, /mob/living/silicon)) - if(user.a_intent == I_HURT) - user.visible_message("\The [user] hammers on the lift button!") - else - user.visible_message("\The [user] presses the lift button.") - - -/obj/structure/lift/New(var/newloc, var/datum/turbolift/_lift) - lift = _lift - return ..(newloc) - -/obj/structure/lift/attack_ai(var/mob/user) - return attack_hand(user) - -/obj/structure/lift/attack_generic(var/mob/user) - return attack_hand(user) - -/obj/structure/lift/attack_hand(var/mob/user) - return interact(user) - -/obj/structure/lift/interact(var/mob/user) - if(!lift.is_functional()) - return 0 - return 1 -// End base. - -// Button. No HTML interface, just calls the associated lift to its floor. -/obj/structure/lift/button - name = "elevator button" - desc = "A call button for an elevator. Be sure to hit it three hundred times." - icon_state = "button" - var/light_up = FALSE - var/datum/turbolift_floor/floor - mouse_opacity = 2 //No more eyestrain aiming at tiny pixels - -/obj/structure/lift/button/Destroy() - if(floor && floor.ext_panel == src) - floor.ext_panel = null - floor = null - return ..() - -/obj/structure/lift/button/proc/reset() - light_up = FALSE - update_icon() - -/obj/structure/lift/button/interact(var/mob/user) - if(!..()) - return - light_up() - pressed(user) - if(floor == lift.current_floor) - lift.open_doors() - spawn(3) - reset() - return - lift.queue_move_to(floor) - -/obj/structure/lift/button/proc/light_up() - light_up = TRUE - update_icon() - -/obj/structure/lift/button/on_update_icon() - if(light_up) - icon_state = "button_lit" - else - icon_state = initial(icon_state) - -// End button. - -// Panel. Lists floors (HTML), moves with the elevator, schedules a move to a given floor. -/obj/structure/lift/panel - name = "elevator control panel" - icon_state = "panel" - mouse_opacity = 2 //No more eyestrain aiming at tiny pixels - - -/obj/structure/lift/panel/attack_ghost(var/mob/user) - return interact(user) - -/obj/structure/lift/panel/interact(var/mob/user) - if(!..()) - return - - var/dat = list() - dat += "
                  Lift panel
                  " - - //the floors list stores levels in order of increasing Z - //therefore, to display upper levels at the top of the menu and - //lower levels at the bottom, we need to go through the list in reverse - for(var/i in lift.floors.len to 1 step -1) - var/datum/turbolift_floor/floor = lift.floors[i] - var/label = floor.label? floor.label : "Level #[i]" - dat += "" - dat += "[label]: [floor.name]
                  " - - dat += "
                  " - if(lift.doors_are_open()) - dat += "Close Doors
                  " - else - dat += "Open Doors
                  " - dat += "Emergency Stop" - dat += "
                  " - - var/datum/browser/popup = new(user, "turbolift_panel", "Lift Panel", 230, 260) - popup.set_content(jointext(dat, null)) - popup.open() - return - -/obj/structure/lift/panel/OnTopic(user, href_list) - if(href_list["move_to_floor"]) - lift.queue_move_to(locate(href_list["move_to_floor"])) - . = TOPIC_REFRESH - if(href_list["open_doors"]) - lift.open_doors() - . = TOPIC_REFRESH - if(href_list["close_doors"]) - lift.close_doors() - . = TOPIC_REFRESH - if(href_list["emergency_stop"]) - lift.emergency_stop() - . = TOPIC_REFRESH - - if(. == TOPIC_REFRESH) - pressed(user) - -// End panel. \ No newline at end of file diff --git a/code/modules/turbolift/turbolift_door.dm b/code/modules/turbolift/turbolift_door.dm deleted file mode 100644 index 5a8d8a433eb52..0000000000000 --- a/code/modules/turbolift/turbolift_door.dm +++ /dev/null @@ -1,51 +0,0 @@ -/obj/machinery/door/airlock/lift - name = "Elevator Door" - desc = "Ding." - opacity = 0 - autoclose = 0 - glass = 1 - airlock_type = "Lift" - icon = 'icons/obj/doors/elevator/door.dmi' - fill_file = 'icons/obj/doors/elevator/fill_steel.dmi' - glass_file = 'icons/obj/doors/elevator/fill_glass.dmi' - bolts_file = 'icons/obj/doors/elevator/lights_bolts.dmi' - deny_file = 'icons/obj/doors/elevator/lights_deny.dmi' - lights_file = 'icons/obj/doors/elevator/lights_green.dmi' - - paintable = AIRLOCK_WINDOW_PAINTABLE - - var/datum/turbolift/lift - var/datum/turbolift_floor/floor - -/obj/machinery/door/airlock/lift/Destroy() - if(lift) - lift.doors -= src - if(floor) - floor.doors -= src - return ..() - -/obj/machinery/door/airlock/lift/bumpopen(var/mob/user) - return // No accidental sprinting into open elevator shafts. - -/obj/machinery/door/airlock/lift/allowed(mob/M) - return FALSE //only the lift machinery is allowed to operate this door - -/obj/machinery/door/airlock/lift/close(var/forced=0) - for(var/turf/turf in locs) - for(var/mob/living/LM in turf) - if(LM.mob_size <= MOB_TINY) - var/moved = 0 - for(dir in shuffle(GLOB.cardinal.Copy())) - var/dest = get_step(LM,dir) - if(!(locate(/obj/machinery/door/airlock/lift) in dest)) - if(LM.Move(dest)) - moved = 1 - LM.visible_message("\The [LM] scurries away from the closing doors.") - break - if(!moved) // nowhere to go.... - LM.gib() - else // the mob is too big to just move, so we need to give up what we're doing - audible_message("\The [src]'s motors grind as they quickly reverse direction, unable to safely close.") - cur_command = null // the door will just keep trying otherwise - return 0 - return ..() diff --git a/code/modules/turbolift/turbolift_floor.dm b/code/modules/turbolift/turbolift_floor.dm deleted file mode 100644 index 7761f092843c8..0000000000000 --- a/code/modules/turbolift/turbolift_floor.dm +++ /dev/null @@ -1,33 +0,0 @@ -// Simple holder for each floor in the lift. -/datum/turbolift_floor - var/area_ref - var/label - var/name - var/announce_str - var/arrival_sound - - var/list/doors = list() - var/obj/structure/lift/button/ext_panel - -/datum/turbolift_floor/proc/set_area_ref(var/ref) - var/area/turbolift/A = locate(ref) - if(!istype(A)) - log_debug("Turbolift floor area was of the wrong type: ref=[ref]") - return - - area_ref = ref - label = A.lift_floor_label - name = A.lift_floor_name ? A.lift_floor_name : A.name - announce_str = A.lift_announce_str - arrival_sound = A.arrival_sound - -//called when a lift has queued this floor as a destination -/datum/turbolift_floor/proc/pending_move(var/datum/turbolift/lift) - if(ext_panel) - ext_panel.light_up() - -//called when a lift arrives at this floor -/datum/turbolift_floor/proc/arrived(var/datum/turbolift/lift) - lift.open_doors(src) - if(ext_panel) - ext_panel.reset() \ No newline at end of file diff --git a/code/modules/turbolift/turbolift_map.dm b/code/modules/turbolift/turbolift_map.dm deleted file mode 100644 index ac8b266a04716..0000000000000 --- a/code/modules/turbolift/turbolift_map.dm +++ /dev/null @@ -1,231 +0,0 @@ -// Map object. -/obj/turbolift_map_holder - name = "turbolift map placeholder" - icon = 'icons/obj/turbolift_preview_3x3.dmi' - dir = SOUTH // Direction of the holder determines the placement of the lift control panel and doors. - var/depth = 1 // Number of floors to generate, including the initial floor. - var/lift_size_x = 2 // Number of turfs on each axis to generate in addition to the first - var/lift_size_y = 2 // ie. a 3x3 lift would have a value of 2 in each of these variables. - - // Various turf and door types used when generating the turbolift floors. - var/wall_type = /turf/simulated/wall/elevator - var/floor_type = /turf/simulated/floor/tiled/dark - var/door_type = /obj/machinery/door/airlock/lift - var/firedoor_type = /obj/machinery/door/firedoor - - var/list/areas_to_use = list() - -/obj/turbolift_map_holder/Destroy() - turbolifts -= src - return ..() - -/obj/turbolift_map_holder/New() - turbolifts += src - ..() - -/obj/turbolift_map_holder/Initialize() - . = ..() - // Create our system controller. - var/datum/turbolift/lift = new() - - // Holder values since we're moving this object to null ASAP. - var/ux = x - var/uy = y - var/uz = z - var/udir = dir - forceMove(null) - - // These modifiers are used in relation to the origin - // to place the system control panels and doors. - var/int_panel_x - var/int_panel_y - var/ext_panel_x - var/ext_panel_y - var/door_x1 - var/door_y1 - var/door_x2 - var/door_y2 - var/light_x1 - var/light_x2 - var/light_y1 - var/light_y2 - - var/az = 1 - var/ex = (ux+lift_size_x) - var/ey = (uy+lift_size_y) - var/ez = (uz+(depth-1)) - - switch(dir) - - if(NORTH) - - int_panel_x = ux + Floor(lift_size_x/2) - int_panel_y = uy + 1 - ext_panel_x = ux - ext_panel_y = ey + 2 - - door_x1 = ux + 1 - door_y1 = ey - door_x2 = ex - 1 - door_y2 = ey + 1 - - light_x1 = ux + 1 - light_y1 = uy + 1 - light_x2 = ux + lift_size_x - 1 - light_y2 = uy + 1 - - if(SOUTH) - - int_panel_x = ux + Floor(lift_size_x/2) - int_panel_y = ey - 1 - ext_panel_x = ex - ext_panel_y = uy - 2 - - door_x1 = ux + 1 - door_y1 = uy - 1 - door_x2 = ex - 1 - door_y2 = uy - - light_x1 = ux + 1 - light_y1 = uy + 2 - light_x2 = ux + lift_size_x - 1 - light_y2 = uy + lift_size_y - 1 - - if(EAST) - - int_panel_x = ux+1 - int_panel_y = uy + Floor(lift_size_y/2) - ext_panel_x = ex+2 - ext_panel_y = ey - - door_x1 = ex - door_y1 = uy + 1 - door_x2 = ex + 1 - door_y2 = ey - 1 - - light_x1 = ux + 1 - light_y1 = uy + 1 - light_x2 = ux + 1 - light_y2 = uy + lift_size_x - 1 - - if(WEST) - - int_panel_x = ex-1 - int_panel_y = uy + Floor(lift_size_y/2) - ext_panel_x = ux-2 - ext_panel_y = uy - - door_x1 = ux - 1 - door_y1 = uy + 1 - door_x2 = ux - door_y2 = ey - 1 - - light_x1 = ux + lift_size_x - 1 - light_y1 = uy + 1 - light_x2 = ux + lift_size_x - 1 - light_y2 = uy + lift_size_y - 1 - - // Generate each floor and store it in the controller datum. - for(var/cz = uz;cz<=ez;cz++) - - var/datum/turbolift_floor/cfloor = new() - lift.floors += cfloor - - var/list/floor_turfs = list() - // Update the appropriate turfs. - for(var/tx = ux to ex) - for(var/ty = uy to ey) - - var/turf/checking = locate(tx,ty,cz) - - if(!istype(checking)) - log_debug("[name] cannot find a component turf at [tx],[ty] on floor [cz]. Aborting.") - qdel(src) - return - - // Update path appropriately if needed. - var/swap_to = /turf/simulated/open - if(cz == uz) // Elevator. - if((tx == ux || ty == uy || tx == ex || ty == ey) && !(tx >= door_x1 && tx <= door_x2 && ty >= door_y1 && ty <= door_y2)) - swap_to = wall_type - else - swap_to = floor_type - - if(checking.type != swap_to) - checking.ChangeTurf(swap_to) - // Let's make absolutely sure that we have the right turf. - checking = locate(tx,ty,cz) - - // Clear out contents. - for(var/atom/movable/thing in checking.contents) - if(thing.simulated) - qdel(thing) - - if(tx >= ux && tx <= ex && ty >= uy && ty <= ey) - floor_turfs += checking - - var/area_path = areas_to_use[az] - var/area/A = locate(area_path) || new area_path() - for(var/T in floor_turfs) - ChangeArea(T, A) - cfloor.set_area_ref("\ref[A]") - - // Place exterior doors. - for(var/tx = door_x1 to door_x2) - for(var/ty = door_y1 to door_y2) - var/turf/checking = locate(tx,ty,cz) - var/internal = 1 - if(!(checking in floor_turfs)) - internal = 0 - if(checking.type != floor_type) - checking.ChangeTurf(floor_type) - checking = locate(tx,ty,cz) - for(var/atom/movable/thing in checking.contents) - if(thing.simulated) - qdel(thing) - if(checking.type == floor_type) // Don't build over empty space on lower levels. - var/obj/machinery/door/airlock/lift/newdoor = new door_type(checking) - if(internal) - lift.doors += newdoor - newdoor.lift = cfloor - else - var/obj/machinery/door/firedoor/newfiredoor = new firedoor_type(checking) - cfloor.doors += newdoor - cfloor.doors += newfiredoor - newdoor.floor = cfloor - - // Place exterior control panel. - var/turf/placing = locate(ext_panel_x, ext_panel_y, cz) - var/obj/structure/lift/button/panel_ext = new(placing, lift) - panel_ext.floor = cfloor - panel_ext.set_dir(udir) - cfloor.ext_panel = panel_ext - - // Place lights - var/turf/placing1 = locate(light_x1, light_y1, cz) - var/turf/placing2 = locate(light_x2, light_y2, cz) - var/obj/machinery/light/light1 = new(placing1, light) - var/obj/machinery/light/light2 = new(placing2, light) - if(udir == NORTH || udir == SOUTH) - light1.set_dir(WEST) - light2.set_dir(EAST) - else - light1.set_dir(SOUTH) - light2.set_dir(NORTH) - - // Update area. - if(az > areas_to_use.len) - log_debug("Insufficient defined areas in turbolift datum, aborting.") - qdel(src) - return - az++ - - // Place lift panel. - var/turf/T = locate(int_panel_x, int_panel_y, uz) - lift.control_panel_interior = new(T, lift) - lift.control_panel_interior.set_dir(udir) - lift.current_floor = lift.floors[1] - - lift.open_doors() - - qdel(src) // We're done. diff --git a/code/modules/turbolift/turbolift_turfs.dm b/code/modules/turbolift/turbolift_turfs.dm deleted file mode 100644 index 377a73f0cd4b9..0000000000000 --- a/code/modules/turbolift/turbolift_turfs.dm +++ /dev/null @@ -1,2 +0,0 @@ -/turf/simulated/wall/elevator/New(var/newloc) - ..(newloc,MATERIAL_ELEVATORIUM) diff --git a/code/modules/ventcrawl/ventcrawl.dm b/code/modules/ventcrawl/ventcrawl.dm deleted file mode 100644 index 95995ae43e44a..0000000000000 --- a/code/modules/ventcrawl/ventcrawl.dm +++ /dev/null @@ -1,182 +0,0 @@ -var/global/list/ventcrawl_machinery = list( - /obj/machinery/atmospherics/unary/vent_scrubber, - /obj/machinery/atmospherics/unary/vent_pump - ) - -// Vent crawling whitelisted items, whoo -/mob/living/var/list/can_enter_vent_with = list( - /obj/item/implant, - /obj/item/device/radio/borg, - /obj/item/holder, - /obj/machinery/camera, - /mob/living/simple_animal/borer, - /obj/item/clothing/head/culthood, - /obj/item/clothing/suit/cultrobes, - /obj/item/book/tome, - /obj/item/paper, - /obj/item/melee/cultblade - ) - -/mob/living/var/list/icon/pipes_shown = list() -/mob/living/var/last_played_vent -/mob/living/var/is_ventcrawling = 0 -/mob/var/next_play_vent = 0 - -/mob/living/proc/can_ventcrawl() - if(!client) - return FALSE - if(!(/mob/living/proc/ventcrawl in verbs)) - to_chat(src, "You don't possess the ability to ventcrawl!") - return FALSE - if(incapacitated()) - to_chat(src, "You cannot ventcrawl in your current state!") - return FALSE - return ventcrawl_carry() - -/mob/living/Login() - . = ..() - //login during ventcrawl - if(is_ventcrawling && istype(loc, /obj/machinery/atmospherics)) //attach us back into the pipes - remove_ventcrawl() - add_ventcrawl(loc) - -/mob/living/carbon/slime/can_ventcrawl() - if(Victim) - to_chat(src, SPAN_WARNING("You cannot ventcrawl while feeding.")) - return FALSE - . = ..() - -/mob/living/proc/is_allowed_vent_crawl_item(var/obj/item/carried_item) - if(is_type_in_list(carried_item, can_enter_vent_with)) - return !get_inventory_slot(carried_item) - -/mob/living/carbon/is_allowed_vent_crawl_item(var/obj/item/carried_item) - return (carried_item in internal_organs) || ..() - -/mob/living/carbon/human/is_allowed_vent_crawl_item(var/obj/item/carried_item) - var/obj/item/organ/internal/stomach/stomach = internal_organs_by_name[BP_STOMACH] - if(stomach && (carried_item in stomach.contents)) - return TRUE - if(carried_item in organs) - return TRUE - if(carried_item in list(w_uniform, gloves, glasses, wear_mask, l_ear, r_ear, belt, l_store, r_store)) - return TRUE - if(carried_item in list(l_hand,r_hand)) - return carried_item.w_class <= ITEM_SIZE_NORMAL - return ..() - -/mob/living/proc/ventcrawl_carry() - for(var/atom/A in contents) - if(!is_allowed_vent_crawl_item(A)) - to_chat(src, "You can't carry \the [A] while ventcrawling!") - return FALSE - return TRUE - -/mob/living/AltClickOn(var/atom/A) - if(is_type_in_list(A,ventcrawl_machinery)) - handle_ventcrawl(A) - return 1 - return ..() - -/mob/proc/start_ventcrawl() - var/atom/pipe - var/list/pipes = list() - for(var/obj/machinery/atmospherics/unary/U in range(1)) - if(is_type_in_list(U,ventcrawl_machinery) && Adjacent(U) && U.can_crawl_through()) - pipes |= U - if(!pipes || !pipes.len) - to_chat(src, "There are no pipes that you can ventcrawl into within range!") - return - if(pipes.len == 1) - pipe = pipes[1] - else - pipe = input("Crawl Through Vent", "Pick a pipe") as null|anything in pipes - if(!is_physically_disabled() && pipe) - return pipe - -/mob/living/carbon/alien/ventcrawl_carry() - return 1 - -/mob/living/proc/handle_ventcrawl(var/atom/clicked_on) - if(!can_ventcrawl()) - return - - var/obj/machinery/atmospherics/unary/vent_found - if(clicked_on && Adjacent(clicked_on)) - vent_found = clicked_on - if(!istype(vent_found) || !vent_found.can_crawl_through()) - vent_found = null - - if(!vent_found) - for(var/obj/machinery/atmospherics/machine in range(1,src)) - if(is_type_in_list(machine, ventcrawl_machinery)) - vent_found = machine - - if(!vent_found || !vent_found.can_crawl_through()) - vent_found = null - - if(vent_found) - break - - if(vent_found) - if(vent_found.network && (vent_found.network.normal_members.len || vent_found.network.line_members.len)) - - to_chat(src, "You begin climbing into the ventilation system...") - if(vent_found.air_contents && !issilicon(src)) - - switch(vent_found.air_contents.temperature) - if(0 to BODYTEMP_COLD_DAMAGE_LIMIT) - to_chat(src, "You feel a painful freeze coming from the vent!") - if(BODYTEMP_COLD_DAMAGE_LIMIT to T0C) - to_chat(src, "You feel an icy chill coming from the vent.") - if(T0C + 40 to BODYTEMP_HEAT_DAMAGE_LIMIT) - to_chat(src, "You feel a hot wash coming from the vent.") - if(BODYTEMP_HEAT_DAMAGE_LIMIT to INFINITY) - to_chat(src, "You feel a searing heat coming from the vent!") - switch(vent_found.air_contents.return_pressure()) - if(0 to HAZARD_LOW_PRESSURE) - to_chat(src, "You feel a rushing draw pulling you into the vent!") - if(HAZARD_LOW_PRESSURE to WARNING_LOW_PRESSURE) - to_chat(src, "You feel a strong drag pulling you into the vent.") - if(WARNING_HIGH_PRESSURE to HAZARD_HIGH_PRESSURE) - to_chat(src, "You feel a strong current pushing you away from the vent.") - if(HAZARD_HIGH_PRESSURE to INFINITY) - to_chat(src, "You feel a roaring wind pushing you away from the vent!") - if(!do_after(src, 4.5 SECONDS, vent_found, DO_PUBLIC_UNIQUE)) - return - if(!can_ventcrawl()) - return - - visible_message("[src] scrambles into the ventilation ducts!", "You climb into the ventilation system.") - - forceMove(vent_found) - add_ventcrawl(vent_found) - - else - to_chat(src, "This vent is not connected to anything.") - else - to_chat(src, "You must be standing on or beside an air vent to enter it.") -/mob/living/proc/add_ventcrawl(obj/machinery/atmospherics/starting_machine) - is_ventcrawling = 1 - //candrop = 0 - var/datum/pipe_network/network = starting_machine.return_network(starting_machine) - if(!network) - return - for(var/datum/pipeline/pipeline in network.line_members) - for(var/obj/machinery/atmospherics/A in (pipeline.members || pipeline.edges)) - if(!A.pipe_image) - A.pipe_image = image(A, A.loc, dir = A.dir) - A.pipe_image.layer = ABOVE_LIGHTING_LAYER - A.pipe_image.plane = EFFECTS_ABOVE_LIGHTING_PLANE - pipes_shown += A.pipe_image - client.images += A.pipe_image - -/mob/living/proc/remove_ventcrawl() - is_ventcrawling = 0 - //candrop = 1 - if(client) - for(var/image/current_image in pipes_shown) - client.images -= current_image - client.eye = src - - pipes_shown.len = 0 diff --git a/code/modules/ventcrawl/ventcrawl_atmospherics.dm b/code/modules/ventcrawl/ventcrawl_atmospherics.dm deleted file mode 100644 index be30d2f97e9c7..0000000000000 --- a/code/modules/ventcrawl/ventcrawl_atmospherics.dm +++ /dev/null @@ -1,87 +0,0 @@ -/obj/machinery/atmospherics/var/image/pipe_image - -/obj/machinery/atmospherics/Destroy() - for(var/mob/living/M in src) //ventcrawling is serious business - M.remove_ventcrawl() - M.dropInto(loc) - if(pipe_image) - for(var/mob/living/M in GLOB.player_list) - if(M.client) - M.client.images -= pipe_image - M.pipes_shown -= pipe_image - pipe_image = null - . = ..() - -/obj/machinery/atmospherics/ex_act(severity) - for(var/atom/movable/A in src) //ventcrawling is serious business - A.ex_act(severity) - . = ..() - -/obj/machinery/atmospherics/relaymove(mob/living/user, direction) - if(user.loc != src || !(direction & initialize_directions)) //can't go in a way we aren't connecting to - return - ventcrawl_to(user,findConnecting(direction),direction) - -/obj/machinery/atmospherics/proc/ventcrawl_to(var/mob/living/user, var/obj/machinery/atmospherics/target_move, var/direction) - if(target_move) - if(is_type_in_list(target_move, ventcrawl_machinery) && target_move.can_crawl_through()) - user.remove_ventcrawl() - user.forceMove(target_move.loc) //handles entering and so on - user.visible_message("You hear something squeezing through the ducts.", "You climb out the ventilation system.") - else if(target_move.can_crawl_through()) - if(target_move.return_network(target_move) != return_network(src)) - user.remove_ventcrawl() - user.add_ventcrawl(target_move) - user.forceMove(target_move) - user.client.eye = target_move //if we don't do this, Byond only updates the eye every tick - required for smooth movement - if(world.time > user.next_play_vent) - user.next_play_vent = world.time+30 - playsound(src, 'sound/machines/ventcrawl.ogg', 50, 1, -3) - else - if((direction & initialize_directions) || is_type_in_list(src, ventcrawl_machinery) && src.can_crawl_through()) //if we move in a way the pipe can connect, but doesn't - or we're in a vent - user.remove_ventcrawl() - user.forceMove(src.loc) - user.visible_message("You hear something squeezing through the pipes.", "You climb out the ventilation system.") - user.SetMoveCooldown(user.movement_delay()) - -/obj/machinery/atmospherics/proc/can_crawl_through() - return 1 - -/obj/machinery/atmospherics/unary/vent_pump/can_crawl_through() - return !welded - -/obj/machinery/atmospherics/unary/vent_scrubber/can_crawl_through() - return !welded - -/obj/machinery/atmospherics/proc/findConnecting(var/direction) - for(var/obj/machinery/atmospherics/target in get_step(src,direction)) - if(target.initialize_directions & get_dir(target,src)) - if(isConnectable(target) && target.isConnectable(src)) - return target - -/obj/machinery/atmospherics/proc/isConnectable(var/obj/machinery/atmospherics/target) - return (target == node1 || target == node2) - -/obj/machinery/atmospherics/pipe/manifold/isConnectable(var/obj/machinery/atmospherics/target) - return (target == node3 || ..()) - -/obj/machinery/atmospherics/trinary/isConnectable(var/obj/machinery/atmospherics/target) - return (target == node3 || ..()) - -/obj/machinery/atmospherics/pipe/manifold4w/isConnectable(var/obj/machinery/atmospherics/target) - return (target == node3 || target == node4 || ..()) - -/obj/machinery/atmospherics/tvalve/isConnectable(var/obj/machinery/atmospherics/target) - return (target == node3 || ..()) - -/obj/machinery/atmospherics/pipe/cap/isConnectable(var/obj/machinery/atmospherics/target) - return (target == node || ..()) - -/obj/machinery/atmospherics/portables_connector/isConnectable(var/obj/machinery/atmospherics/target) - return (target == node || ..()) - -/obj/machinery/atmospherics/unary/isConnectable(var/obj/machinery/atmospherics/target) - return (target == node || ..()) - -/obj/machinery/atmospherics/valve/isConnectable() - return (open && ..()) diff --git a/code/modules/ventcrawl/ventcrawl_multiz.dm b/code/modules/ventcrawl/ventcrawl_multiz.dm deleted file mode 100644 index 87ef8f9ba70f2..0000000000000 --- a/code/modules/ventcrawl/ventcrawl_multiz.dm +++ /dev/null @@ -1,24 +0,0 @@ -/obj/machinery/atmospherics/pipe/zpipe/up/verb/ventcrawl_move_up() - set name = "Ventcrawl Upwards" - set desc = "Climb up through a pipe." - set category = "Abilities" - set src = usr.loc - var/obj/machinery/atmospherics/target = check_ventcrawl(GetAbove(loc)) - if(target) ventcrawl_to(usr, target, UP) - -/obj/machinery/atmospherics/pipe/zpipe/down/verb/ventcrawl_move_down() - set name = "Ventcrawl Downwards" - set desc = "Climb down through a pipe." - set category = "Abilities" - set src = usr.loc - var/obj/machinery/atmospherics/target = check_ventcrawl(GetBelow(loc)) - if(target) ventcrawl_to(usr, target, DOWN) - -/obj/machinery/atmospherics/pipe/zpipe/proc/check_ventcrawl(var/turf/target) - if(!istype(target)) - return - if(node1 in target) - return node1 - if(node2 in target) - return node2 - return \ No newline at end of file diff --git a/code/modules/ventcrawl/ventcrawl_verb.dm b/code/modules/ventcrawl/ventcrawl_verb.dm deleted file mode 100644 index b49f22836dc33..0000000000000 --- a/code/modules/ventcrawl/ventcrawl_verb.dm +++ /dev/null @@ -1,7 +0,0 @@ -/mob/living/proc/ventcrawl() - set name = "Crawl through Vent" - set desc = "Enter an air vent and crawl through the pipe system." - set category = "Abilities" - var/pipe = start_ventcrawl() - if(pipe) - handle_ventcrawl() diff --git a/code/modules/webhooks/_webhook.dm b/code/modules/webhooks/_webhook.dm deleted file mode 100644 index 83b78a6a55c3d..0000000000000 --- a/code/modules/webhooks/_webhook.dm +++ /dev/null @@ -1,47 +0,0 @@ -/decl/webhook - var/id - var/list/urls - var/mentions - -/decl/webhook/proc/get_message(var/list/data) - . = list() - -/decl/webhook/proc/http_post(var/target_url, var/payload) - if (!target_url) - return -1 - - var/result = call(HTTP_POST_DLL_LOCATION, "send_post_request")(target_url, payload, json_encode(list("Content-Type" = "application/json"))) - - result = json_decode(result) - if (result["error_code"]) - log_debug("byhttp error: [result["error"]] ([result["error_code"]])") - return result["error_code"] - - return list( - "status_code" = result["status_code"], - "body" = result["body"] - ) - -/decl/webhook/proc/send(var/list/data) - var/message = get_message(data) - if(message) - if(mentions) - if(message["content"]) - message["content"] = "[mentions]: [message["content"]]" - else - message["content"] = "[mentions]" - message = json_encode(message) - . = TRUE - for(var/target_url in urls) - var/list/httpresponse = http_post(target_url, message) - if(!islist(httpresponse)) - . = FALSE - continue - switch(httpresponse["status_code"]) - if (200 to 299) - continue - if (400 to 599) - log_debug("Webhooks: HTTP error code while sending to '[target_url]': [httpresponse["status_code"]]. Data: [httpresponse["body"]].") - else - log_debug("Webhooks: unknown HTTP code while sending to '[target_url]': [httpresponse["status_code"]]. Data: [httpresponse["body"]].") - . = FALSE diff --git a/code/modules/webhooks/webhook_admin.dm b/code/modules/webhooks/webhook_admin.dm deleted file mode 100644 index 13c413ea03d05..0000000000000 --- a/code/modules/webhooks/webhook_admin.dm +++ /dev/null @@ -1,18 +0,0 @@ -/decl/webhook/ban - id = WEBHOOK_BAN - - -/decl/webhook/ban/get_message(var/list/data) - . = ..() - - .["content"] = "[data["admin"]];[data["player"]];[data["time"]];[data["reason"]]" - - -/decl/webhook/notes - id = WEBHOOK_NOTES - - -/decl/webhook/notes/get_message(var/list/data) - . = ..() - - .["content"] = "**[data["admin"]]** -> **[data["player"]]**: [data["info"]]" diff --git a/code/modules/webhooks/webhook_custom_event.dm b/code/modules/webhooks/webhook_custom_event.dm deleted file mode 100644 index 212854aeeb08c..0000000000000 --- a/code/modules/webhooks/webhook_custom_event.dm +++ /dev/null @@ -1,11 +0,0 @@ -/decl/webhook/custom_event - id = WEBHOOK_CUSTOM_EVENT - -// Data expects a "text" field containing the new custom event text. -/decl/webhook/custom_event/get_message(var/list/data) - . = ..() - .["embeds"] = list(list( - "title" = "An event is beginning.", - "description" = (data && data["text"]) || "undefined", - "color" = COLOR_WEBHOOK_DEFAULT - )) diff --git a/code/modules/webhooks/webhook_ooc.dm b/code/modules/webhooks/webhook_ooc.dm deleted file mode 100644 index 1ef1638e2dda0..0000000000000 --- a/code/modules/webhooks/webhook_ooc.dm +++ /dev/null @@ -1,9 +0,0 @@ -/decl/webhook/ooc - id = WEBHOOK_OOC - - -/decl/webhook/ooc/get_message(var/list/data) - . = ..() - var/cur_time = world.timeofday - - .["content"] = "`\[[time2text(cur_time, "hh:mm:ss")]\]` **[data["type"]]: [data["key"]]**: [data["message"]]" diff --git a/code/modules/webhooks/webhook_registration.dm b/code/modules/webhooks/webhook_registration.dm deleted file mode 100644 index 3511e5d08d741..0000000000000 --- a/code/modules/webhooks/webhook_registration.dm +++ /dev/null @@ -1,8 +0,0 @@ -/decl/webhook/reg - id = WEBHOOK_REG - - -/decl/webhook/reg/get_message(var/list/data) - . = ..() - - .["content"] = "register_user [data["auth_key"]] [data["ckey"]]" diff --git a/code/modules/webhooks/webhook_roundend.dm b/code/modules/webhooks/webhook_roundend.dm deleted file mode 100644 index b4a690abc5a5b..0000000000000 --- a/code/modules/webhooks/webhook_roundend.dm +++ /dev/null @@ -1,27 +0,0 @@ -/decl/webhook/roundend - id = WEBHOOK_ROUNDEND - -// Data expects three numerical fields: "survivors", "escaped", "ghosts" -/decl/webhook/roundend/get_message(var/list/data) - . = ..() - var/desc = "A round of **[SSticker.mode ? SSticker.mode.name : "Unknown"]** has ended.\n" - if(data) - - if(data["surviving_total"] > 0) - - var/s_was = "was" - var/s_survivor = "survivor" - - if(data["surviving_total"] != 1) - s_was = "were" - s_survivor = "survivors" - - desc += "There [s_was] **[data["surviving_total"]] [s_survivor] ([data["escaped_total"]] escaped)** and **[data["ghosts"]] ghosts.**" - else - desc += "There were **no survivors** ([data["ghosts"]] ghosts)." - - .["embeds"] = list(list( - "title" = "Round [game_id] is ending.", - "description" = desc, - "color" = COLOR_WEBHOOK_DEFAULT - )) diff --git a/code/modules/webhooks/webhook_roundstart.dm b/code/modules/webhooks/webhook_roundstart.dm deleted file mode 100644 index 0f79fe21da5dd..0000000000000 --- a/code/modules/webhooks/webhook_roundstart.dm +++ /dev/null @@ -1,15 +0,0 @@ -/decl/webhook/roundstart - id = WEBHOOK_ROUNDSTART - -// Data expects a "url" field pointing to the current hosted server and port to connect on. -/decl/webhook/roundstart/get_message(var/list/data) - . = ..() - var/desc = "A new round is starting in 3 minutes" -// if(data && data["url"]) -// desc += " on Tor4. \n <[world.url]>" - - .["embeds"] = list(list( - "title" = "Round starting.", - "description" = desc, - "color" = COLOR_WEBHOOK_DEFAULT - )) diff --git a/code/modules/webhooks/webhook_submap.dm b/code/modules/webhooks/webhook_submap.dm deleted file mode 100644 index 1268e0e79626a..0000000000000 --- a/code/modules/webhooks/webhook_submap.dm +++ /dev/null @@ -1,16 +0,0 @@ -/decl/webhook/submap_loaded - id = WEBHOOK_SUBMAP_LOADED - -// Data expects a "name" field containing the name of the submap being announced. -/decl/webhook/submap_loaded/get_message(var/list/data) - . = ..() - var/submap_name = data && data["name"] - if(submap_name) - submap_name = ", [submap_name]," - var/desc = "A submap[submap_name] is currently available." - - .["embeds"] = list(list( - "title" = "Submap available.", - "description" = desc, - "color" = COLOR_WEBHOOK_DEFAULT - )) diff --git a/code/modules/xenoarcheaology/anomaly_container.dm b/code/modules/xenoarcheaology/anomaly_container.dm deleted file mode 100644 index f9ac6ef4f5ea7..0000000000000 --- a/code/modules/xenoarcheaology/anomaly_container.dm +++ /dev/null @@ -1,43 +0,0 @@ -/obj/structure/anomaly_container - name = "anomaly container" - desc = "Used to safely contain and move anomalies." - icon = 'icons/obj/xenoarchaeology.dmi' - icon_state = "anomaly_container" - density = TRUE - - var/obj/machinery/artifact/contained - -/obj/structure/anomaly_container/Initialize() - . = ..() - - var/obj/machinery/artifact/A = locate() in loc - if(A) - contain(A) - -/obj/structure/anomaly_container/attack_hand(var/mob/user) - release() - -/obj/structure/anomaly_container/attack_robot(var/mob/user) - if(Adjacent(user)) - release() - -/obj/structure/anomaly_container/proc/contain(var/obj/machinery/artifact/artifact) - if(contained) - return - contained = artifact - artifact.forceMove(src) - underlays += image(artifact) - desc = "Used to safely contain and move anomalies. \The [contained] is kept inside." - -/obj/structure/anomaly_container/proc/release() - if(!contained) - return - contained.dropInto(src) - contained = null - underlays.Cut() - desc = initial(desc) - -/obj/machinery/artifact/MouseDrop(var/obj/structure/anomaly_container/over_object) - if(istype(over_object) && Adjacent(over_object) && CanMouseDrop(over_object, usr)) - Bumped(usr) - over_object.contain(src) \ No newline at end of file diff --git a/code/modules/xenoarcheaology/artifacts/artifact.dm b/code/modules/xenoarcheaology/artifacts/artifact.dm deleted file mode 100644 index c99eb3a016c94..0000000000000 --- a/code/modules/xenoarcheaology/artifacts/artifact.dm +++ /dev/null @@ -1,277 +0,0 @@ -/obj/machinery/artifact - name = "alien artifact" - desc = "A large alien device." - icon = 'icons/obj/xenoarchaeology.dmi' - icon_state = "ano00" - var/icon_num = 0 - density = TRUE - var/datum/artifact_effect/my_effect - var/datum/artifact_effect/secondary_effect - var/being_used = 0 - waterproof = FALSE - - //Stuff for damaging and breaking artifacts. - var/max_health = 500 - var/health = 500 - ///TRUE if artifact can be damaged, FALSE otherwise. - var/can_damage = FALSE - ///The damage type that can harm the artifact. - var/damage_type = DAMAGE_FLAG_SHARP - ///Minimum force needed to cause damage. Only applicable when being melee'd. - var/min_force = 5 - ///Extra descriptor added to artifact analyzer results. - var/damage_desc = "The physical structure appears indestructable." - var/destroyed = FALSE - -/obj/machinery/artifact/New() - ..() - - var/effecttype = pick(typesof(/datum/artifact_effect) - /datum/artifact_effect) - my_effect = new effecttype(src) - - if(prob(75)) - effecttype = pick(typesof(/datum/artifact_effect) - /datum/artifact_effect) - secondary_effect = new effecttype(src) - if(prob(75)) - secondary_effect.ToggleActivate(0) - - icon_num = rand(0, 11) - icon_state = "ano[icon_num]0" - if(icon_num == 7 || icon_num == 8) - name = "large crystal" - desc = pick("It shines faintly as it catches the light.", - "It appears to have a faint inner glow.", - "It seems to draw you inward as you look it at.", - "Something twinkles faintly as you look at it.", - "It's mesmerizing to behold.") - else if(icon_num == 9) - name = "alien computer" - desc = "It is covered in strange markings." - else if(icon_num == 10) - desc = "A large alien device, there appear to be some kind of vents in the side." - else if(icon_num == 11) - name = "sealed alien pod" - desc = "A strange alien device." - - setup_destructibility() - -/obj/machinery/artifact/Destroy() - QDEL_NULL(my_effect) - QDEL_NULL(secondary_effect) - . = ..() - -/obj/machinery/artifact/proc/check_triggers(trigger_proc) - . = FALSE - for(var/datum/artifact_effect/effect in list(my_effect, secondary_effect)) - if (!effect.trigger) - return - - var/triggered = call(effect.trigger, trigger_proc)(arglist(args.Copy(2))) - if(effect.trigger.toggle && triggered) - effect.ToggleActivate(1) - . = TRUE - else if(effect.activated != triggered) - effect.ToggleActivate(1) - . = TRUE - - if (. && istype(effect.trigger, /datum/artifact_trigger/touch)) - effect.DoEffectTouch(arglist(args.Copy(2))) - -/obj/machinery/artifact/Process() - var/turf/T = loc - if(!istype(T)) // We're inside a container or on null turf, either way stop processing effects - return - - if(pulledby) - check_triggers(/datum/artifact_trigger/proc/on_touch, pulledby) - - var/datum/gas_mixture/enivonment = T.return_air() - if(enivonment.return_pressure() >= SOUND_MINIMUM_PRESSURE) - check_triggers(/datum/artifact_trigger/proc/on_gas_exposure, enivonment) - - for(var/datum/artifact_effect/effect in list(my_effect, secondary_effect)) - effect.process() - -/obj/machinery/artifact/attack_robot(mob/living/user) - if(!CanPhysicallyInteract(user)) - return - check_triggers(/datum/artifact_trigger/proc/on_touch, user) - -/obj/machinery/artifact/attack_hand(mob/living/user) - . = ..() - visible_message("[user] touches \the [src].") - check_triggers(/datum/artifact_trigger/proc/on_touch, user) - -/obj/machinery/artifact/attackby(obj/item/W, mob/living/user) - . = ..() - check_triggers(/datum/artifact_trigger/proc/on_hit, W, user) - -/obj/machinery/artifact/Bumped(M) - ..() - check_triggers(/datum/artifact_trigger/proc/on_bump, M) - -/obj/machinery/artifact/bullet_act(var/obj/item/projectile/P) - check_triggers(/datum/artifact_trigger/proc/on_hit, P) - -/obj/machinery/artifact/ex_act(severity) - if(check_triggers(/datum/artifact_trigger/proc/on_explosion, severity)) - return - switch(severity) - if(EX_ACT_DEVASTATING) - qdel(src) - if(EX_ACT_HEAVY) - if (prob(50)) - qdel(src) - -/obj/machinery/artifact/Move() - ..() - if(my_effect) - my_effect.UpdateMove() - if(secondary_effect) - secondary_effect.UpdateMove() - -/obj/machinery/artifact/water_act(depth) - check_triggers(/datum/artifact_trigger/proc/on_water_act, depth) - - -//Damage/Destruction procs - -/obj/machinery/artifact/examine(mob/user) - . = ..() - - if (health <= 0) - to_chat(user, SPAN_NOTICE("It is inert, dead and quiet.")) - else if (health < (max_health * 0.25)) - to_chat(user, SPAN_DANGER("It looks like its almost shattered!")) - else if (health < (max_health * 0.5)) - to_chat(user, SPAN_WARNING("It is badly damaged, and is getting close to breaking apart.")) - else if (health < (max_health * 0.75)) - to_chat(user, SPAN_NOTICE("It is moderately damaged, cracks visible on its surface.")) - else if (health < max_health) - to_chat(user, SPAN_NOTICE("It has minor damage.")) - -/** - * Sets up the artifacts destructibility by doing the following: - * Gives a randomized health/maxhealth value. - * Removes damage types based on triggers. Ex. Artifact can't be damaged by hitting/shooting if an effect has the 'force' trigger. - * Note: If there are two effects and one has the 'force' trigger, and the other 'energy', the artifact will be invulnerable. - * This is to prevent damaging the artifact while trying to turn on its effects. - * Adds scan data used by the anomaly analyzer that details how to damage the artifact. - */ -/obj/machinery/artifact/proc/setup_destructibility() - can_damage = TRUE - health = rand(100, 200) - max_health = health - - var/damage_types = list(DAMAGE_FLAG_SHARP, DAMAGE_FLAG_BULLET, DAMAGE_FLAG_EDGE, DAMAGE_FLAG_LASER) - for (var/datum/artifact_effect/A in list(my_effect, secondary_effect)) - if (istype(A.trigger, /datum/artifact_trigger/force)) - damage_types -= list(DAMAGE_FLAG_SHARP, DAMAGE_FLAG_BULLET, DAMAGE_FLAG_EDGE) - - if (istype(A.trigger, /datum/artifact_trigger/energy)) - damage_types -= DAMAGE_FLAG_LASER - - if (!length(damage_types)) //can't trigger effects without damaging us - can_damage = FALSE - return - - damage_type = pick(damage_types) - set_damage_description(damage_type) - -/** - * Adds additional scan data for the anomaly analyzer, detailing how the artifact can be damaged. - * - * @param damage_type int Type of damage that the artifact can receive, FALSE or null means it is indestructible. - */ -/obj/machinery/artifact/proc/set_damage_description(damage_type) - - if (!damage_type) - return - - damage_desc = "The physical structure is vulnerable to " - switch(damage_type) - if (DAMAGE_FLAG_SHARP) - damage_desc += "physical attack from serrated objects." - if (DAMAGE_FLAG_BULLET) - damage_desc += "high speed kinetic impact." - if (DAMAGE_FLAG_EDGE) - damage_desc += "physical strikes from edged objects." - if (DAMAGE_FLAG_LASER) - damage_desc += "concentrated high-energy bursts." - -/** - * Handles damage the artifact receives. - * Sends a visual message when the aritfacts health value falls below certain points. - * Once the artifact has 0 or less health: - * Calls the effect(s) 'destroyed_effect()' proc. - * Sets the artifacts icon state to its 'destroyed' state. - * If the artifact has > 0 health, calls the effect(s) 'holder_damaged()' proc. This may or may not be removed. - * - * @param damage int The damage dealt. - */ -/obj/machinery/artifact/proc/handle_damage(damage) - if (destroyed) - return - - var/initialhealth = health - health = max(0, health - damage) - if (health < max_health / 4 && initialhealth >= max_health / 4) - visible_message("\The [src] looks like it's about to break!" ) - else if (health < max_health / 2 && initialhealth >= max_health / 2) - visible_message("\The [src] looks seriously damaged!" ) - else if (health < max_health * 3/4 && initialhealth >= max_health * 3/4) - visible_message("\The [src] shows signs of damage!" ) - update_icon() - - - - playsound(get_turf(src), 'sound/effects/Glasshit.ogg', 75, TRUE) - - for (var/datum/artifact_effect/A in list(my_effect, secondary_effect)) - A.holder_damaged(health, damage) - - if (!health) - handle_destruction() -/** - * Handles the 'destruction' of the artifact. - * Icon state is updated to the corresponding 'destroyed' state. - * Client mobs are 'flashed' for added effect. - * Effects are deleted so they can't be triggered again. - * 'destroyed' is set to TRUE to prevent re-triggering the destroyed event. - */ -/obj/machinery/artifact/proc/handle_destruction() - visible_message(SPAN_DANGER("\The [src] breaks apart and explodes in a wave of energy!"), SPAN_DANGER("You hear something break apart and feel a wave of energy hit you!")) - playsound(get_turf(src), 'sound/effects/Glassbr3.ogg', 75, TRUE) - icon_state = "ano[icon_num]2" - - for (var/mob/living/carbon/M in oview(src)) - if (M.client) - M.flash_eyes() - - my_effect.destroyed_effect() //only do primary to avoid nuking everything. - - QDEL_NULL(my_effect) - QDEL_NULL(secondary_effect) - - destroyed = TRUE - -/obj/machinery/artifact/attackby(obj/item/W, mob/living/user) - . = ..() - - user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN) - if (W.sharp && damage_type == DAMAGE_FLAG_SHARP || W.edge && damage_type == DAMAGE_FLAG_EDGE) - user.do_attack_animation(src) - - if (W.force < min_force) - visible_message(SPAN_DANGER("\The [user] hits \the [src] with \the [W], but it doesn't even scratch it!")) - return - - handle_damage(W.force) - else - visible_message(SPAN_DANGER("\The [user] hits \the [src] with \the [W], but it bounces off!")) - -/obj/machinery/artifact/bullet_act(obj/item/projectile/P) - . = ..() - - if (P.damage_flags & damage_type) - handle_damage(P.damage) diff --git a/code/modules/xenoarcheaology/artifacts/artifact_find.dm b/code/modules/xenoarcheaology/artifacts/artifact_find.dm deleted file mode 100644 index 4e5462d06a644..0000000000000 --- a/code/modules/xenoarcheaology/artifacts/artifact_find.dm +++ /dev/null @@ -1,18 +0,0 @@ -/datum/artifact_find - var/artifact_id - var/artifact_find_type - -/datum/artifact_find/New() - - artifact_id = "[pick("kappa","sigma","antaeres","beta","omicron","iota","epsilon","omega","gamma","delta","tau","alpha")]-[random_id(/datum/artifact_find, 100, 999)]" - - artifact_find_type = pick( - 5;/obj/machinery/power/supermatter, - 5;/obj/structure/constructshell, - 5;/obj/machinery/syndicate_beacon, - 25;/obj/machinery/power/supermatter/shard, - 50;/obj/structure/cult/pylon, - 100;/obj/machinery/auto_cloner, - 100;/obj/machinery/giga_drill, - 100;/obj/machinery/replicator, -1000;/obj/machinery/artifact) diff --git a/code/modules/xenoarcheaology/artifacts/autocloner.dm b/code/modules/xenoarcheaology/artifacts/autocloner.dm deleted file mode 100644 index 9bda5dcf58b64..0000000000000 --- a/code/modules/xenoarcheaology/artifacts/autocloner.dm +++ /dev/null @@ -1,83 +0,0 @@ -/obj/machinery/auto_cloner - name = "mysterious pod" - desc = "It's full of a viscous liquid, but appears dark and silent." - icon = 'icons/obj/cryogenics.dmi' - icon_state = "cellold0" - var/spawn_type - var/time_spent_spawning = 0 - var/time_per_spawn = 0 - var/last_process= 0 - density = TRUE - var/previous_power_state = 0 - - active_power_usage = 2000 - idle_power_usage = 1000 - -/obj/machinery/auto_cloner/New() - ..() - - time_per_spawn = rand(1200,3600) - - //33% chance to spawn nasties - if(prob(33)) - spawn_type = pick( - /mob/living/simple_animal/hostile/giant_spider/nurse, - /mob/living/simple_animal/hostile/bear, - /mob/living/simple_animal/hostile/creature) - else - spawn_type = pick(\ - /mob/living/simple_animal/passive/cat, - /mob/living/simple_animal/passive/corgi, - /mob/living/simple_animal/passive/corgi/puppy, - /mob/living/simple_animal/passive/chicken, - /mob/living/simple_animal/passive/cow, - /mob/living/simple_animal/hostile/retaliate/parrot, - /mob/living/simple_animal/slime, - /mob/living/simple_animal/crab, - /mob/living/simple_animal/passive/mouse, - /mob/living/simple_animal/hostile/retaliate/goat, - /mob/living/simple_animal/hostile/retaliate/goose) - -//todo: how the hell is the asteroid permanently powered? -/obj/machinery/auto_cloner/Process() - if(powered(power_channel)) - if(!previous_power_state) - previous_power_state = 1 - icon_state = "cellold1" - src.visible_message("[icon2html(src, viewers(get_turf(src)))] [src] suddenly comes to life!") - - //slowly grow a mob - if(prob(5)) - src.visible_message("[icon2html(src, viewers(get_turf(src)))] [src] [pick("gloops","glugs","whirrs","whooshes","hisses","purrs","hums","gushes")].") - - //if we've finished growing... - if(time_spent_spawning >= time_per_spawn) - time_spent_spawning = 0 - update_use_power(POWER_USE_IDLE) - src.visible_message("[icon2html(src, viewers(get_turf(src)))] [src] pings!") - icon_state = "cellold1" - desc = "It's full of a bubbling viscous liquid, and is lit by a mysterious glow." - if(spawn_type) - new spawn_type(src.loc) - - //if we're getting close to finished, kick into overdrive power usage - if(time_spent_spawning / time_per_spawn > 0.75) - update_use_power(POWER_USE_ACTIVE) - icon_state = "cellold2" - desc = "It's full of a bubbling viscous liquid, and is lit by a mysterious glow. A dark shape appears to be forming inside..." - else - update_use_power(POWER_USE_IDLE) - icon_state = "cellold1" - desc = "It's full of a bubbling viscous liquid, and is lit by a mysterious glow." - - time_spent_spawning = time_spent_spawning + world.time - last_process - else - if(previous_power_state) - previous_power_state = 0 - icon_state = "cellold0" - src.visible_message("[icon2html(src, viewers(get_turf(src)))] [src] suddenly shuts down.") - - //cloned mob slowly breaks down - time_spent_spawning = max(time_spent_spawning + last_process - world.time, 0) - - last_process = world.time diff --git a/code/modules/xenoarcheaology/artifacts/gigadrill.dm b/code/modules/xenoarcheaology/artifacts/gigadrill.dm deleted file mode 100644 index 675cad99a3429..0000000000000 --- a/code/modules/xenoarcheaology/artifacts/gigadrill.dm +++ /dev/null @@ -1,35 +0,0 @@ -/obj/machinery/giga_drill - name = "alien drill" - desc = "A giant, alien drill mounted on long treads." - icon = 'icons/obj/mining.dmi' - icon_state = "gigadrill" - var/active = 0 - var/drill_time = 10 - var/turf/drilling_turf - density = TRUE - layer = ABOVE_OBJ_LAYER //to go over ores - -/obj/machinery/giga_drill/physical_attack_hand(mob/user) - if(active) - active = 0 - icon_state = "gigadrill" - to_chat(user, "You press a button and \the [src] slowly spins down.") - else - active = 1 - icon_state = "gigadrill_mov" - to_chat(user, "You press a button and \the [src] shudders to life.") - return TRUE - -/obj/machinery/giga_drill/Bump(atom/A) - if(active && !drilling_turf) - if(istype(A,/turf/simulated/mineral)) - var/turf/simulated/mineral/M = A - drilling_turf = get_turf(src) - src.visible_message("\The [src] begins to drill into \the [M].") - anchored = TRUE - spawn(drill_time) - if(get_turf(src) == drilling_turf && active) - M.GetDrilled() - forceMove(M) - drilling_turf = null - anchored = FALSE diff --git a/code/modules/xenoarcheaology/artifacts/replicator.dm b/code/modules/xenoarcheaology/artifacts/replicator.dm deleted file mode 100644 index 68000dbc2466a..0000000000000 --- a/code/modules/xenoarcheaology/artifacts/replicator.dm +++ /dev/null @@ -1,148 +0,0 @@ -/obj/machinery/replicator - name = "alien machine" - desc = "It's some kind of pod with strange wires and gadgets all over it." - icon = 'icons/obj/xenoarchaeology.dmi' - icon_state = "borgcharger0(old)" - density = TRUE - - idle_power_usage = 100 - active_power_usage = 1000 - - var/spawn_progress_time = 0 - var/max_spawn_time = 50 - var/last_process_time = 0 - - var/list/construction = list() - var/list/spawning_types = list() - var/list/stored_materials = list() - - var/fail_message - -/obj/machinery/replicator/New() - ..() - - var/list/viables = list( - /obj/item/roller, - /obj/structure/closet/crate, - /obj/structure/closet/acloset, - /mob/living/simple_animal/hostile/mimic, - /mob/living/simple_animal/hostile/viscerator, - /mob/living/simple_animal/hostile/hivebot, - /obj/item/device/scanner/gas, - /obj/item/device/camera, - /obj/item/device/flash, - /obj/item/device/flashlight, - /obj/item/device/scanner/health, - /obj/item/device/multitool, - /obj/item/device/paicard, - /obj/item/device/radio, - /obj/item/device/radio/headset, - /obj/item/autopsy_scanner, - /obj/item/bikehorn, - /obj/item/bonesetter, - /obj/item/material/knife/kitchen/cleaver, - /obj/item/caution, - /obj/item/caution/cone, - /obj/item/crowbar, - /obj/item/material/clipboard, - /obj/item/cell/standard, - /obj/item/circular_saw, - /obj/item/material/hatchet, - /obj/item/handcuffs, - /obj/item/hemostat, - /obj/item/material/knife/kitchen, - /obj/item/flame/lighter, - /obj/item/light/bulb, - /obj/item/light/tube, - /obj/item/pickaxe, - /obj/item/shovel, - /obj/item/weldingtool, - /obj/item/wirecutters, - /obj/item/wrench, - /obj/item/screwdriver, - /obj/item/grenade/chem_grenade/cleaner, - /obj/item/grenade/chem_grenade/metalfoam) - - var/quantity = rand(5, 15) - for(var/i=0, i" - -/obj/machinery/replicator/Process() - if(spawning_types.len && !(stat & NOPOWER)) - spawn_progress_time += world.time - last_process_time - if(spawn_progress_time > max_spawn_time) - src.visible_message("[icon2html(src, viewers(get_turf(src)))] [src] pings!") - - var/obj/source_material = pop(stored_materials) - var/spawn_type = pop(spawning_types) - var/obj/spawned_obj = new spawn_type(src.loc) - if(source_material) - if(length(source_material.name) < MAX_MESSAGE_LEN) - spawned_obj.SetName("[source_material] " + spawned_obj.name) - if(length(source_material.desc) < MAX_MESSAGE_LEN * 2) - if(spawned_obj.desc) - spawned_obj.desc += " It is made of [source_material]." - else - spawned_obj.desc = "It is made of [source_material]." - qdel(source_material) - - spawn_progress_time = 0 - max_spawn_time = rand(30,100) - - if(!spawning_types.len || !stored_materials.len) - update_use_power(POWER_USE_IDLE) - icon_state = "borgcharger0(old)" - - else if(prob(5)) - src.visible_message("[icon2html(src, viewers(get_turf(src)))] [src] [pick("clicks","whizzes","whirrs","whooshes","clanks","clongs","clonks","bangs")].") - - last_process_time = world.time - -/obj/machinery/replicator/interface_interact(mob/user) - interact(user) - return TRUE - -/obj/machinery/replicator/interact(mob/user) - var/dat = "The control panel displays an incomprehensible selection of controls, many with unusual markings or text around them.
                  " - dat += "
                  " - for(var/index=1, index<=construction.len, index++) - dat += "\[[construction[index]]\]
                  " - - show_browser(user, dat, "window=alien_replicator") - -/obj/machinery/replicator/attackby(obj/item/W as obj, mob/living/user as mob) - if(!user.unEquip(W, src)) - return - stored_materials.Add(W) - src.visible_message("\The [user] inserts \the [W] into \the [src].") - -/obj/machinery/replicator/OnTopic(user, href_list) - if(href_list["activate"]) - var/index = text2num(href_list["activate"]) - if(index > 0 && index <= construction.len) - if(stored_materials.len > spawning_types.len) - if(spawning_types.len) - src.visible_message("[icon2html(src, viewers(get_turf(src)))] a [pick("light","dial","display","meter","pad")] on [src]'s front [pick("blinks","flashes")] [pick("red","yellow","blue","orange","purple","green","white")].") - else - src.visible_message("[icon2html(src, viewers(get_turf(src)))] [src]'s front compartment slides shut.") - - spawning_types.Add(construction[construction[index]]) - spawn_progress_time = 0 - update_use_power(POWER_USE_ACTIVE) - icon_state = "borgcharger1(old)" - else - src.visible_message(fail_message) - . = TOPIC_REFRESH diff --git a/code/modules/xenoarcheaology/boulder.dm b/code/modules/xenoarcheaology/boulder.dm deleted file mode 100644 index 5de1d72abf9a3..0000000000000 --- a/code/modules/xenoarcheaology/boulder.dm +++ /dev/null @@ -1,91 +0,0 @@ -/obj/structure/boulder - name = "rocky debris" - desc = "Leftover rock from an excavation, it's been partially dug out already but there's still a lot to go." - icon = 'icons/obj/mining.dmi' - icon_state = "boulder1" - density = TRUE - opacity = 1 - anchored = TRUE - var/excavation_level = 0 - var/datum/geosample/geological_data - var/datum/artifact_find/artifact_find - var/last_act = 0 - -/obj/structure/boulder/New() - ..() - icon_state = "boulder[rand(1,4)]" - excavation_level = rand(5, 50) - -/obj/structure/boulder/Destroy() - qdel(geological_data) - qdel(artifact_find) - ..() - -/obj/structure/boulder/attackby(var/obj/item/I, var/mob/user) - if(istype(I, /obj/item/device/core_sampler)) - src.geological_data.artifact_distance = rand(-100,100) / 100 - src.geological_data.artifact_id = artifact_find.artifact_id - - var/obj/item/device/core_sampler/C = I - C.sample_item(src, user) - return - - if(istype(I, /obj/item/device/depth_scanner)) - var/obj/item/device/depth_scanner/C = I - C.scan_atom(user, src) - return - - if(istype(I, /obj/item/device/measuring_tape)) - var/obj/item/device/measuring_tape/P = I - user.visible_message("\The [user] extends \the [P] towards \the [src].", "You extend \the [P] towards \the [src].") - if(do_after(user, 1.5 SECONDS, src, DO_PUBLIC_UNIQUE)) - to_chat(user, "\The [src] has been excavated to a depth of [src.excavation_level]cm.") - return - - if(istype(I, /obj/item/pickaxe)) - var/obj/item/pickaxe/P = I - - if(last_act + P.digspeed > world.time)//prevents message spam - return - last_act = world.time - - to_chat(user, "You start [P.drill_verb] [src].") - - if(!do_after(user, P.digspeed, src, DO_PUBLIC_UNIQUE)) - return - - to_chat(user, "You finish [P.drill_verb] [src].") - excavation_level += P.excavation_amount - - if(excavation_level > 200) - //failure - user.visible_message("\The [src] suddenly crumbles away.", "\The [src] has disintegrated under your onslaught, any secrets it was holding are long gone.") - qdel(src) - return - - if(prob(excavation_level)) - //success - if(artifact_find) - var/spawn_type = artifact_find.artifact_find_type - var/obj/O = new spawn_type(get_turf(src)) - if(istype(O, /obj/machinery/artifact)) - var/obj/machinery/artifact/X = O - if(X.my_effect) - X.my_effect.artifact_id = artifact_find.artifact_id - src.visible_message("\The [src] suddenly crumbles away.") - else - user.visible_message("\The [src] suddenly crumbles away.", "\The [src] has been whittled away under your careful excavation, but there was nothing of interest inside.") - qdel(src) - -/obj/structure/boulder/Bumped(AM) - . = ..() - if(istype(AM,/mob/living/carbon/human)) - var/mob/living/carbon/human/H = AM - var/obj/item/pickaxe/P = H.get_inactive_hand() - if(istype(P)) - src.attackby(P, H) - - else if(istype(AM,/mob/living/silicon/robot)) - var/mob/living/silicon/robot/R = AM - if(istype(R.module_active,/obj/item/pickaxe)) - attackby(R.module_active,R) diff --git a/code/modules/xenoarcheaology/effect.dm b/code/modules/xenoarcheaology/effect.dm deleted file mode 100644 index 2b31eeb9c4117..0000000000000 --- a/code/modules/xenoarcheaology/effect.dm +++ /dev/null @@ -1,180 +0,0 @@ -/datum/artifact_effect - var/name = "unknown" - var/effect = EFFECT_TOUCH - var/effectrange = 4 - var/atom/holder - var/activated = FALSE - var/chargelevel = 0 - var/chargelevelmax = 10 - var/artifact_id = "" - var/effect_type = 0 - var/toggled = FALSE - var/on_time //time artifact should stay on for when toggled - - var/datum/artifact_trigger/trigger - -/datum/artifact_effect/New(var/atom/location) - ..() - holder = location - effect = rand(0, MAX_EFFECT) - var/triggertype = pick(subtypesof(/datum/artifact_trigger)) - if (effect == EFFECT_TOUCH && !istype(triggertype, /datum/artifact_trigger/touch)) // touch effect and touch trigger only work when paired - triggertype = pick(typesof(/datum/artifact_trigger/touch)) - trigger = new triggertype - - on_time = rand(5, 20) SECONDS - - //this will be replaced by the excavation code later, but it's here just in case - artifact_id = "[pick("kappa","sigma","antaeres","beta","omicron","iota","epsilon","omega","gamma","delta","tau","alpha")]-[rand(100,999)]" - - //random charge time and distance - switch(pick(100;1, 50;2, 25;3)) - if(1) - //short range, short charge time - chargelevelmax = rand(3, 20) - effectrange = rand(1, 3) - if(2) - //medium range, medium charge time - chargelevelmax = rand(15, 40) - effectrange = rand(5, 15) - if(3) - //large range, long charge time - chargelevelmax = rand(20, 120) - effectrange = rand(20, 200) - -/datum/artifact_effect/Destroy() - QDEL_NULL(trigger) - . = ..() - -/datum/artifact_effect/proc/ToggleActivate(reveal_toggle = 1) - addtimer(CALLBACK(src, .proc/DoActivation, reveal_toggle), 0) - -/datum/artifact_effect/proc/DoActivation(reveal_toggle = 1) - if (toggled && activated) - return - - if(activated) - activated = FALSE - else - addtimer(CALLBACK(src, /datum/artifact_effect/proc/toggle_off), on_time) - activated = TRUE - toggled = TRUE - if(reveal_toggle && holder) - if(istype(holder, /obj/machinery/artifact)) - var/obj/machinery/artifact/A = holder - A.icon_state = "ano[A.icon_num][activated]" - - var/display_msg - if(activated) - display_msg = pick("momentarily glows brightly!","distorts slightly for a moment!","flickers slightly!","vibrates!","shimmers slightly for a moment!") - else - display_msg = pick("grows dull!","fades in intensity!","suddenly becomes very still!","suddenly becomes very quiet!") - - var/atom/toplevelholder = holder - while(!isnull(toplevelholder.loc) && !istype(toplevelholder.loc, /turf)) - toplevelholder = toplevelholder.loc - toplevelholder.visible_message("[icon2html(toplevelholder, viewers(get_turf(toplevelholder)))] [toplevelholder] [display_msg]") - - -/datum/artifact_effect/proc/DoEffectTouch(var/mob/user) -/datum/artifact_effect/proc/DoEffectAura(var/atom/holder) -/datum/artifact_effect/proc/DoEffectPulse(var/atom/holder) -/datum/artifact_effect/proc/UpdateMove() - -/datum/artifact_effect/proc/process() - if(chargelevel < chargelevelmax) - chargelevel++ - - if(activated) - if(effect == EFFECT_AURA) - DoEffectAura() - else if(effect == EFFECT_PULSE && chargelevel >= chargelevelmax) - chargelevel = 0 - DoEffectPulse() - - -/datum/artifact_effect/proc/getDescription() - . = "" - switch(effect_type) - if(EFFECT_ENERGY) - . += "Concentrated energy emissions" - if(EFFECT_PSIONIC) - . += "Intermittent psionic wavefront" - if(EFFECT_ELECTRO) - . += "Electromagnetic energy" - if(EFFECT_PARTICLE) - . += "High frequency particles" - if(EFFECT_ORGANIC) - . += "Organically reactive exotic particles" - if(EFFECT_BLUESPACE) - . += "Interdimensional/bluespace? phasing" - if(EFFECT_SYNTH) - . += "Atomic synthesis" - else - . += "Low level energy emissions" - - . += " have been detected " - - switch(effect) - if(EFFECT_TOUCH) - . += "interspersed throughout substructure and shell." - if(EFFECT_AURA) - . += "emitting in an ambient energy field." - if(EFFECT_PULSE) - . += "emitting in periodic bursts." - else - . += "emitting in an unknown way." - - . += "" - - . += " Activation index involves [trigger]." - -/datum/artifact_effect/proc/toggle_off() - toggled = FALSE - ToggleActivate(TRUE) - -//returns 0..1, with 1 being no protection and 0 being fully protected -/proc/GetAnomalySusceptibility(var/mob/living/carbon/human/H) - if(!istype(H)) - return 1 - - var/protected = 0 - - //anomaly suits give best protection, but excavation suits are almost as good - if(istype(H.back,/obj/item/rig/hazmat) || istype(H.back, /obj/item/rig/hazard)) - var/obj/item/rig/rig = H.back - if(rig.suit_is_deployed() && !rig.offline) - protected += 1 - - if(istype(H.wear_suit,/obj/item/clothing/suit/bio_suit/anomaly)) - protected += 0.7 - else if(istype(H.wear_suit,/obj/item/clothing/suit/space/void/excavation)) - protected += 0.6 - - if(istype(H.head,/obj/item/clothing/head/bio_hood/anomaly)) - protected += 0.3 - else if(istype(H.head,/obj/item/clothing/head/helmet/space/void/excavation)) - protected += 0.2 - - //latex gloves and science goggles also give a bit of bonus protection - if(istype(H.gloves,/obj/item/clothing/gloves/latex)) - protected += 0.1 - - if(istype(H.glasses,/obj/item/clothing/glasses/science)) - protected += 0.1 - - return 1 - protected - -//Destruction/Damaged procs - -/** - * When an artifact is destroyed, this will be run before it is - */ -/datum/artifact_effect/proc/destroyed_effect() - return - -/** - * Called by the artifact the effect is attached too whenever it takes damage - */ -/datum/artifact_effect/proc/holder_damaged() - return \ No newline at end of file diff --git a/code/modules/xenoarcheaology/effects/badfeeling.dm b/code/modules/xenoarcheaology/effects/badfeeling.dm deleted file mode 100644 index 46aef1e62cbd1..0000000000000 --- a/code/modules/xenoarcheaology/effects/badfeeling.dm +++ /dev/null @@ -1,76 +0,0 @@ -/datum/artifact_effect/badfeeling - name = "badfeeling" - effect_type = EFFECT_PSIONIC - var/list/messages = list("You feel worried.", - "Something doesn't feel right.", - "You get a strange feeling in your gut.", - "Your instincts are trying to warn you about something.", - "Someone just walked over your grave.", - "There's a strange feeling in the air.", - "There's a strange smell in the air.", - "The tips of your fingers feel tingly.", - "You feel witchy.", - "You have a terrible sense of foreboding.", - "You've got a bad feeling about this.", - "Your scalp prickles.", - "The light seems to flicker.", - "The shadows seem to lengthen.", - "The walls are getting closer.", - "Something is wrong") - - var/list/drastic_messages = list("You've got to get out of here!", - "Someone's trying to kill you!", - "There's something out there!", - "What's happening to you?", - "OH GOD!", - "HELP ME!") - -/datum/artifact_effect/badfeeling/DoEffectTouch(var/mob/user) - if(user) - if (istype(user, /mob/living/carbon/human)) - var/mob/living/carbon/human/H = user - if(prob(50)) - if(prob(75)) - to_chat(H, "[pick(drastic_messages)]") - else - to_chat(H, "[pick(messages)]") - - if(prob(50)) - H.dizziness += rand(3,5) - -/datum/artifact_effect/badfeeling/DoEffectAura() - if(holder) - var/turf/T = get_turf(holder) - for (var/mob/living/carbon/human/H in range(src.effectrange,T)) - if(prob(5)) - if(prob(75)) - to_chat(H, "[pick(messages)]") - else - to_chat(H, "[pick(drastic_messages)]") - - if(prob(10)) - H.dizziness += rand(3,5) - return 1 - -/datum/artifact_effect/badfeeling/DoEffectPulse() - if(holder) - var/turf/T = get_turf(holder) - for (var/mob/living/carbon/human/H in range(src.effectrange,T)) - if(prob(50)) - if(prob(95)) - to_chat(H, "[pick(drastic_messages)]") - else - to_chat(H, "[pick(messages)]") - - if(prob(50)) - H.dizziness += rand(3,5) - else if(prob(25)) - H.dizziness += rand(5,15) - return 1 - -/datum/artifact_effect/badfeeling/destroyed_effect() - . = ..() - - for (var/mob/living/carbon/human/H in range(effectrange, get_turf(holder))) - H.Paralyse(4) - H.hallucination(50, 100) \ No newline at end of file diff --git a/code/modules/xenoarcheaology/effects/cellcharge.dm b/code/modules/xenoarcheaology/effects/cellcharge.dm deleted file mode 100644 index ecd82d5d97e19..0000000000000 --- a/code/modules/xenoarcheaology/effects/cellcharge.dm +++ /dev/null @@ -1,46 +0,0 @@ -//todo -/datum/artifact_effect/cellcharge - name = "cell charge" - effect_type = EFFECT_ELECTRO - var/last_message - -/datum/artifact_effect/cellcharge/DoEffectTouch(var/mob/user) - if(user) - if(istype(user, /mob/living/silicon/robot)) - var/mob/living/silicon/robot/R = user - for (var/obj/item/cell/D in R.contents) - D.charge += rand() * 100 + 50 - to_chat(R, "SYSTEM ALERT: Large energy boost detected!") - return 1 - -/datum/artifact_effect/cellcharge/DoEffectAura() - if(holder) - var/turf/T = get_turf(holder) - for (var/obj/machinery/power/apc/C in range(200, T)) - for (var/obj/item/cell/B in C.contents) - B.charge += 25 - for (var/obj/machinery/power/smes/S in range (src.effectrange,src)) - S.charge += 25 - for (var/mob/living/silicon/robot/M in range(50, T)) - for (var/obj/item/cell/D in M.contents) - D.charge += 25 - if(world.time - last_message > 200) - to_chat(M, "SYSTEM ALERT: Energy boost detected!") - last_message = world.time - return 1 - -/datum/artifact_effect/cellcharge/DoEffectPulse() - if(holder) - var/turf/T = get_turf(holder) - for (var/obj/machinery/power/apc/C in range(200, T)) - for (var/obj/item/cell/B in C.contents) - B.charge += rand() * 100 - for (var/obj/machinery/power/smes/S in range (src.effectrange,src)) - S.charge += 250 - for (var/mob/living/silicon/robot/M in range(100, T)) - for (var/obj/item/cell/D in M.contents) - D.charge += rand() * 100 - if(world.time - last_message > 200) - to_chat(M, "SYSTEM ALERT: Energy boost detected!") - last_message = world.time - return 1 diff --git a/code/modules/xenoarcheaology/effects/celldrain.dm b/code/modules/xenoarcheaology/effects/celldrain.dm deleted file mode 100644 index 34e79da578257..0000000000000 --- a/code/modules/xenoarcheaology/effects/celldrain.dm +++ /dev/null @@ -1,48 +0,0 @@ -//todo -/datum/artifact_effect/celldrain - name = "cell drain" - effect_type = EFFECT_ELECTRO - var/last_message - -/datum/artifact_effect/celldrain/DoEffectTouch(var/mob/user) - if(user) - if(istype(user, /mob/living/silicon/robot)) - var/mob/living/silicon/robot/R = user - for (var/obj/item/cell/D in R.contents) - D.charge = max(D.charge - rand() * 100, 0) - to_chat(R, "SYSTEM ALERT: Energy drain detected!") - return 1 - - return 1 - -/datum/artifact_effect/celldrain/DoEffectAura() - if(holder) - var/turf/T = get_turf(holder) - for (var/obj/machinery/power/apc/C in range(200, T)) - for (var/obj/item/cell/B in C.contents) - B.charge = max(B.charge - 50,0) - for (var/obj/machinery/power/smes/S in range (src.effectrange,src)) - S.charge = max(S.charge - 100,0) - for (var/mob/living/silicon/robot/M in range(50, T)) - for (var/obj/item/cell/D in M.contents) - D.charge = max(D.charge - 50,0) - if(world.time - last_message > 200) - to_chat(M, "SYSTEM ALERT: Energy drain detected!") - last_message = world.time - return 1 - -/datum/artifact_effect/celldrain/DoEffectPulse() - if(holder) - var/turf/T = get_turf(holder) - for (var/obj/machinery/power/apc/C in range(200, T)) - for (var/obj/item/cell/B in C.contents) - B.charge = max(B.charge - rand() * 150,0) - for (var/obj/machinery/power/smes/S in range (src.effectrange,src)) - S.charge = max(S.charge - 250,0) - for (var/mob/living/silicon/robot/M in range(100, T)) - for (var/obj/item/cell/D in M.contents) - D.charge = max(D.charge - rand() * 150,0) - if(world.time - last_message > 200) - to_chat(M, SPAN_WARNING("SYSTEM ALERT: Energy drain detected!")) - last_message = world.time - return 1 diff --git a/code/modules/xenoarcheaology/effects/cold.dm b/code/modules/xenoarcheaology/effects/cold.dm deleted file mode 100644 index e0a926b092fde..0000000000000 --- a/code/modules/xenoarcheaology/effects/cold.dm +++ /dev/null @@ -1,32 +0,0 @@ -//inverse of /datum/artifact_effect/heat, the two effects split up for neatness' sake -/datum/artifact_effect/cold - name = "cold" - var/target_temp - -/datum/artifact_effect/cold/New() - ..() - target_temp = rand(0, 250) - effect = pick(EFFECT_TOUCH, EFFECT_AURA) - effect_type = pick(EFFECT_ORGANIC, EFFECT_BLUESPACE, EFFECT_SYNTH) - -/datum/artifact_effect/cold/DoEffectTouch(var/mob/user) - if(holder) - if (istype(user)) - to_chat(user, "A chill passes up your spine!") - var/datum/gas_mixture/env = holder.loc.return_air() - if(env) - env.temperature = max(env.temperature - rand(5,50), 0) - -/datum/artifact_effect/cold/DoEffectAura() - if(holder) - var/datum/gas_mixture/env = holder.loc.return_air() - if(env && env.temperature > target_temp) - env.temperature -= pick(0, 0, 1) - -/datum/artifact_effect/cold/destroyed_effect() - . = ..() - - for (var/turf/T in trange(5, get_turf(holder))) - var/datum/gas_mixture/env = T.return_air() - if (env) - env.temperature -= 10 \ No newline at end of file diff --git a/code/modules/xenoarcheaology/effects/dnaswitch.dm b/code/modules/xenoarcheaology/effects/dnaswitch.dm deleted file mode 100644 index 2f0fedeac2086..0000000000000 --- a/code/modules/xenoarcheaology/effects/dnaswitch.dm +++ /dev/null @@ -1,65 +0,0 @@ -//todo -/datum/artifact_effect/dnaswitch - name = "dnaswitch" - effect_type = EFFECT_ORGANIC - var/severity - -/datum/artifact_effect/dnaswitch/New() - ..() - if(effect == EFFECT_AURA) - severity = rand(5,30) - else - severity = rand(25,95) - -/datum/artifact_effect/dnaswitch/proc/get_feeling() - return pick(" feel a little different"," feel very strange","r stomach churns","r skin feels loose"," feel a stabbing pain in your head"," feel a tingling sensation in your chest","r entire body vibrates") - -/datum/artifact_effect/dnaswitch/DoEffectTouch(var/mob/toucher) - var/weakness = GetAnomalySusceptibility(toucher) - if(ishuman(toucher) && prob(weakness * 100)) - to_chat(toucher, "You[get_feeling()].") - if(prob(75)) - scramble(1, toucher, weakness * severity) - else - scramble(0, toucher, weakness * severity) - return 1 - -/datum/artifact_effect/dnaswitch/DoEffectAura() - if(holder) - var/turf/T = get_turf(holder) - for(var/mob/living/carbon/human/H in range(effectrange,T)) - var/weakness = GetAnomalySusceptibility(H) - if(prob(weakness * 100)) - if(prob(30)) - to_chat(H, "You[get_feeling()].") - if(prob(50)) - scramble(1, H, weakness * severity) - else - scramble(0, H, weakness * severity) - -/datum/artifact_effect/dnaswitch/DoEffectPulse() - if(holder) - var/turf/T = get_turf(holder) - for(var/mob/living/carbon/human/H in range(effectrange, T)) - var/weakness = GetAnomalySusceptibility(H) - if(prob(weakness * 100)) - if(prob(75)) - to_chat(H, "You[get_feeling()].") - if(prob(25)) - if(prob(75)) - scramble(1, H, weakness * severity) - else - scramble(0, H, weakness * severity) - -/datum/artifact_effect/dnaswitch/destroyed_effect() - . = ..() - - if(holder) - var/turf/T = get_turf(holder) - for(var/mob/living/carbon/human/H in range(effectrange, T)) - var/weakness = GetAnomalySusceptibility(H) - if(prob(weakness * 100)) - if(prob(50)) - scramble(1, H, weakness * severity) - else - scramble(0, H, weakness * severity) diff --git a/code/modules/xenoarcheaology/effects/emp.dm b/code/modules/xenoarcheaology/effects/emp.dm deleted file mode 100644 index de12d3ba9d4ec..0000000000000 --- a/code/modules/xenoarcheaology/effects/emp.dm +++ /dev/null @@ -1,20 +0,0 @@ -/datum/artifact_effect/emp - name = "emp" - effect_type = EFFECT_ELECTRO - -/datum/artifact_effect/emp/New() - ..() - effect = EFFECT_PULSE - -/datum/artifact_effect/emp/DoEffectPulse() - if(holder) - var/turf/T = get_turf(holder) - empulse(T, effectrange/2, effectrange) - return 1 - -/datum/artifact_effect/emp/destroyed_effect() - . = ..() - - if(holder) - var/turf/T = get_turf(holder) - empulse(T, (effectrange * 2), effectrange) \ No newline at end of file diff --git a/code/modules/xenoarcheaology/effects/goodfeeling.dm b/code/modules/xenoarcheaology/effects/goodfeeling.dm deleted file mode 100644 index 88b40ac970e0f..0000000000000 --- a/code/modules/xenoarcheaology/effects/goodfeeling.dm +++ /dev/null @@ -1,64 +0,0 @@ -/datum/artifact_effect/goodfeeling - name = "good feeling" - effect_type = EFFECT_PSIONIC - var/list/messages = list("You feel good.", - "Everything seems to be going alright", - "You've got a good feeling about this", - "Your instincts tell you everything is going to be getting better.", - "There's a good feeling in the air.", - "Something smells... good.", - "The tips of your fingers feel tingly.", - "You've got a good feeling about this.", - "You feel happy.", - "You fight the urge to smile.", - "Your scalp prickles.", - "All the colours seem a bit more vibrant.", - "Everything seems a little lighter.", - "The troubles of the world seem to fade away.") - - var/list/drastic_messages = list("You want to hug everyone you meet!", - "Everything is going so well!", - "You feel euphoric.", - "You feel giddy.", - "You're so happy suddenly, you almost want to dance and sing.", - "You feel like the world is out to help you.") - -/datum/artifact_effect/goodfeeling/DoEffectTouch(var/mob/user) - if(user) - if (istype(user, /mob/living/carbon/human)) - var/mob/living/carbon/human/H = user - if(prob(50)) - if(prob(75)) - to_chat(H, "[pick(drastic_messages)]") - else - to_chat(H, "[pick(messages)]") - - if(prob(50)) - H.dizziness += rand(3,5) - -/datum/artifact_effect/goodfeeling/DoEffectAura() - if(holder) - var/turf/T = get_turf(holder) - for (var/mob/living/carbon/human/H in range(src.effectrange,T)) - if(prob(5)) - if(prob(75)) - to_chat(H, "[pick(messages)]") - else - to_chat(H, "[pick(drastic_messages)]") - - if(prob(5)) - H.dizziness += rand(3,5) - return 1 - -/datum/artifact_effect/goodfeeling/DoEffectPulse() - if(holder) - var/turf/T = get_turf(holder) - for (var/mob/living/carbon/human/H in range(src.effectrange,T)) - if(prob(50)) - if(prob(95)) - to_chat(H, "[pick(drastic_messages)]") - else - to_chat(H, "[pick(messages)]") - - H.dizziness += rand(5,15) - return 1 diff --git a/code/modules/xenoarcheaology/effects/heal.dm b/code/modules/xenoarcheaology/effects/heal.dm deleted file mode 100644 index cdccf95cfc464..0000000000000 --- a/code/modules/xenoarcheaology/effects/heal.dm +++ /dev/null @@ -1,79 +0,0 @@ -/datum/artifact_effect/heal - name = "heal" - effect_type = EFFECT_ORGANIC - -/datum/artifact_effect/heal/DoEffectTouch(var/mob/toucher) - //todo: check over this properly - if(toucher && iscarbon(toucher)) - var/weakness = GetAnomalySusceptibility(toucher) - if(prob(weakness * 100)) - var/mob/living/carbon/C = toucher - to_chat(C, "You feel a soothing energy invigorate you.") - - if(ishuman(toucher)) - var/mob/living/carbon/human/H = toucher - for(var/obj/item/organ/external/affecting in H.organs) - if(affecting && istype(affecting)) - affecting.heal_damage(25 * weakness, 25 * weakness) - //H:heal_organ_damage(25, 25) - H.vessel.add_reagent(/datum/reagent/blood,5) - H.adjust_nutrition(50 * weakness) - H.adjustBrainLoss(-25 * weakness) - H.radiation -= min(H.radiation, 25 * weakness) - H.bodytemperature = initial(H.bodytemperature) - H.fixblood() - // - C.adjustOxyLoss(-25 * weakness) - C.adjustToxLoss(-25 * weakness) - C.adjustBruteLoss(-25 * weakness) - C.adjustFireLoss(-25 * weakness) - // - C.regenerate_icons() - return 1 - -/datum/artifact_effect/heal/DoEffectAura() - //todo: check over this properly - if(holder) - var/turf/T = get_turf(holder) - for (var/mob/living/carbon/C in range(src.effectrange,T)) - var/weakness = GetAnomalySusceptibility(C) - if(prob(weakness * 100)) - if(prob(10)) - to_chat(C, "You feel a soothing energy radiating from something nearby.") - C.adjustBruteLoss(-1 * weakness) - C.adjustFireLoss(-1 * weakness) - C.adjustToxLoss(-1 * weakness) - C.adjustOxyLoss(-1 * weakness) - C.adjustBrainLoss(-1 * weakness) - C.updatehealth() - -/datum/artifact_effect/heal/DoEffectPulse() - //todo: check over this properly - if(holder) - var/turf/T = get_turf(holder) - for (var/mob/living/carbon/C in range(src.effectrange,T)) - var/weakness = GetAnomalySusceptibility(C) - if(prob(weakness * 100)) - to_chat(C, "A wave of energy invigorates you.") - C.adjustBruteLoss(-5 * weakness) - C.adjustFireLoss(-5 * weakness) - C.adjustToxLoss(-5 * weakness) - C.adjustOxyLoss(-5 * weakness) - C.adjustBrainLoss(-5 * weakness) - C.updatehealth() - -/datum/artifact_effect/heal/destroyed_effect() - . = ..() - - if(holder) - var/turf/T = get_turf(holder) - for (var/mob/living/carbon/C in range(effectrange * 2,T)) - var/weakness = GetAnomalySusceptibility(C) - if(prob(weakness * 100)) - to_chat(C, SPAN_NOTICE("A massive wave of energy invigorates and heals you!")) - C.adjustBruteLoss(-10 * weakness) - C.adjustFireLoss(-10 * weakness) - C.adjustToxLoss(-10 * weakness) - C.adjustOxyLoss(-10 * weakness) - C.adjustBrainLoss(-10 * weakness) - C.updatehealth() diff --git a/code/modules/xenoarcheaology/effects/heat.dm b/code/modules/xenoarcheaology/effects/heat.dm deleted file mode 100644 index 0aa14b25a07d2..0000000000000 --- a/code/modules/xenoarcheaology/effects/heat.dm +++ /dev/null @@ -1,32 +0,0 @@ -//inverse of /datum/artifact_effect/cold, the two effects split up for neatness' sake -/datum/artifact_effect/heat - name = "heat" - var/target_temp - -/datum/artifact_effect/heat/New() - ..() - effect = pick(EFFECT_TOUCH, EFFECT_AURA) - effect_type = pick(EFFECT_ORGANIC, EFFECT_BLUESPACE, EFFECT_SYNTH) - target_temp = rand(300, 600) - -/datum/artifact_effect/heat/DoEffectTouch(var/mob/user) - if(holder) - if (istype(user)) - to_chat(user, "You feel a wave of heat travel up your spine!") - var/datum/gas_mixture/env = holder.loc.return_air() - if(env) - env.temperature += rand(5,50) - -/datum/artifact_effect/heat/DoEffectAura() - if(holder) - var/datum/gas_mixture/env = holder.loc.return_air() - if(env && env.temperature < target_temp) - env.temperature += pick(0, 0, 1) - -/datum/artifact_effect/heat/destroyed_effect() - . = ..() - - for (var/turf/T in trange(5, get_turf(holder))) - var/datum/gas_mixture/env = T.return_air() - if (env) - env.temperature += 10 \ No newline at end of file diff --git a/code/modules/xenoarcheaology/effects/hellportal/hell_portal.dm b/code/modules/xenoarcheaology/effects/hellportal/hell_portal.dm deleted file mode 100644 index ce8187adf6778..0000000000000 --- a/code/modules/xenoarcheaology/effects/hellportal/hell_portal.dm +++ /dev/null @@ -1,131 +0,0 @@ -/datum/artifact_effect/hellportal - name = "hellportal" - effect_type = EFFECT_BLUESPACE - var/convert_count //how many turfs are converted to lava each activation - var/active_portals_max //how many portals can be spawned at each interval - var/maximum_mob_count - var/target_temp = 500 - var/activation_sound = 'sound/effects/ghost.ogg' - var/activation_messages = list( - "lets loose a thousand agonized screams as it forces reality around it to bleed and distort!", - "cracks and blisters, blood seeping out from within!", - "shrieks as a blistering heat fills the room, the world around it turning to flesh and stone!", - "emits a pained, human sounding groan as it disfigures reality!" - ) - - var/damage = 0 - var/list/portals = list() - var/list/mobs = list() - -/datum/artifact_effect/hellportal/New() - ..() - effect = EFFECT_PULSE - convert_count = rand(1, 5) - active_portals_max = rand(2, 4) - maximum_mob_count = rand(5, 20) - damage = rand(20, 50) - if (chargelevelmax > 30) - chargelevelmax = rand(10, 30) - -/datum/artifact_effect/hellportal/Destroy() - for (var/mob/M in mobs) - unregister_mob(M) - - for (var/P in portals) - GLOB.destroyed_event.unregister(P, src) - - ..() - -/datum/artifact_effect/hellportal/DoEffectPulse(send_message = TRUE) - if (holder) - convert_turfs() - spawn_monsters() - hurt_players(FALSE) - playsound(holder, activation_sound, 100) - var/datum/gas_mixture/env = holder.loc.return_air() - if(env && env.temperature < target_temp) - env.temperature += rand(2, 10) - if (send_message) - holder.visible_message(SPAN_DANGER("\The [holder] [pick(activation_messages)]")) - -//Helper procs - -/datum/artifact_effect/hellportal/proc/convert_turfs() - for (var/i = 0 to convert_count) - var/turf/T = pick(trange(effectrange, get_turf(holder))) - var/turf/simulated/floor/F - - if (T.is_wall()) - T.ChangeTurf(/turf/simulated/wall/cult) - else if (T.is_floor()) - F = T - - if (istype(F.flooring, /decl/flooring/flesh)) - continue - - if (prob(25)) - new /obj/effect/gibspawner/human(F) - - F.set_flooring(decls_repository.get_decl(/decl/flooring/flesh)) - F.desc = "Disgusting flooring made out of flesh, bone, eyes, and various other human bits and peices." - - -/datum/artifact_effect/hellportal/proc/spawn_monsters() - if (length(mobs) < maximum_mob_count) - for (var/i = 0 to (active_portals_max - length(portals))) - if (length(portals) >= active_portals_max) - return - - var/turf/T = pick(pick_turf_in_range(get_turf(holder), effectrange, list(/proc/not_turf_contains_dense_objects, /proc/is_not_space_turf, /proc/is_not_holy_turf, /proc/is_not_open_space))) - - if (!T) - return - - var/obj/effect/gateway/artifact/small/gate = new(T) - gate.parent = src - portals += gate - - GLOB.destroyed_event.register(gate, src, /datum/artifact_effect/hellportal/proc/reduce_portal_count) - -/datum/artifact_effect/hellportal/proc/hurt_players(send_message = TRUE) - for (var/mob/living/carbon/human/H in range(effectrange, get_turf(holder))) - var/weakness = GetAnomalySusceptibility(H) - H.apply_damage(damage * weakness, DAMAGE_BRUTE, damage_flags = DAMAGE_FLAG_DISPERSED) - H.apply_damage(damage * weakness, DAMAGE_BURN, damage_flags = DAMAGE_FLAG_DISPERSED) - if (send_message) - if (weakness == 0) - to_chat(H, SPAN_WARNING("Some unseen force tries to tear into your suit, but fails!")) - else - to_chat(H, SPAN_DANGER("Searing pain strikes your body as you briefly find yourself in a burning hellscape!")) - -/datum/artifact_effect/hellportal/proc/reduce_portal_count(obj/effect/gateway/artifact/P) - GLOB.destroyed_event.unregister(P, src) - portals -= P - -/datum/artifact_effect/hellportal/proc/unregister_mob(mob/M) - GLOB.destroyed_event.unregister(M, src) - GLOB.death_event.unregister(M, src) - mobs -= M - -/datum/artifact_effect/hellportal/proc/register_mob(mob/M) - mobs += M - GLOB.destroyed_event.register(M, src, .proc/unregister_mob) - GLOB.death_event.register(M, src, .proc/unregister_mob) - - -/datum/artifact_effect/hellportal/destroyed_effect() - convert_count = rand(40, 60) - active_portals_max = rand(15, 30) - maximum_mob_count = 1000 //set obscenly high so we can spawn a bunch at once before deletion - damage = rand(50, 100) - effectrange = 30 //create lots of bads in a large area - - DoEffectPulse(FALSE) - for(var/mob/M in GLOB.player_list) - if((M.z == holder.z) && !istype(M,/mob/new_player)) - to_chat(M, SPAN_DANGER(FONT_LARGE("Agonized screams fill your ears as the world around you briefly burns in hellfire!"))) - if (istype(M, /mob/living/carbon/human)) - var/mob/living/carbon/human/H = M - H.apply_damage((damage / 4), DAMAGE_BRUTE, damage_flags = DAMAGE_FLAG_DISPERSED) - - new /obj/effect/gateway/artifact/big(get_turf(holder)) diff --git a/code/modules/xenoarcheaology/effects/hellportal/portals.dm b/code/modules/xenoarcheaology/effects/hellportal/portals.dm deleted file mode 100644 index b22ca3d1b74e1..0000000000000 --- a/code/modules/xenoarcheaology/effects/hellportal/portals.dm +++ /dev/null @@ -1,100 +0,0 @@ -/obj/effect/gateway/artifact - name = "reality tear" - desc = "A piercing pain strikes your mind as you peer into the tear, witnessing horrors and suffering beyond comprehension." - light_outer_range=5 - light_color="#ff0000" - spawnable = list( - /mob/living/simple_animal/hostile/meat/abomination = 5, - /mob/living/simple_animal/hostile/meat/horror = 30, - /mob/living/simple_animal/hostile/meat/strippedhuman = 60, - /mob/living/simple_animal/hostile/meat/horrorminer = 60, - /mob/living/simple_animal/hostile/meat/horrorsmall = 80, - /mob/living/simple_animal/hostile/meat = 5, - /mob/living/simple_animal/hostile/scarybat = 70, - /mob/living/simple_animal/hostile/creature = 40 - ) - var/datum/artifact_effect/hellportal/parent - var/mob_spawn_sounds = list( - 'sound/magic/mutate.ogg', - 'sound/effects/squelch1.ogg', - 'sound/effects/squelch2.ogg' - ) - -/obj/effect/gateway/artifact/small/New(turf/T) - ..() - - addtimer(CALLBACK(src, .proc/create_and_delete), rand(15, 30) SECONDS) - -/obj/effect/gateway/artifact/small/proc/create_and_delete() - var/mob/living/simple_animal/T = pickweight(spawnable) - T = new T(src.loc) - T.min_gas = null - T.max_gas = null - T.minbodytemp = 0 - T.maxbodytemp = 5000 - T.faction = "meat" - - if (parent) - parent.register_mob(T) - - playsound(T, pick(mob_spawn_sounds), 100) - visible_message(SPAN_WARNING("\The [src] widens for a moment as a horrific monster forces its way through, before it blinks out of existence.")) - qdel(src) - -//Spawns after the artifact is destroyed -/obj/effect/gateway/artifact/big - name = "interdimensional gateway" - desc = "A huge hole in reality with a strange, pulsing heartbeat. Faint, agonized screams can be heard from inside it..." - light_outer_range = 10 - ///Ticks down every so often until portal vanishes. - var/health = 15 - ///How many mobs we've spawned. - var/spawned_mobs = 0 - ///Maximum amount of mobs we can spawn. - var/mob_limit - ///Multiplier applied to the `transform` variable. - var/size_multiplier = 1.5 - ///Portal will play a sound from this list when its health ticks down. - var/list/sounds = list( - 'sound/hallucinations/wail.ogg', - 'sound/hallucinations/far_noise.ogg', - 'sound/hallucinations/veryfar_noise.ogg' - ) - -/obj/effect/gateway/artifact/big/New(turf/T) - ..() - - mob_limit = health * 2 - SetTransform(scale = size_multiplier) - addtimer(CALLBACK(src, .proc/spawn_monster), rand(30, 60) SECONDS) - GLOB.sound_player.PlayLoopingSound(src, "\ref[src]", 'sound/effects/Heart Beat.ogg', 70, 6) - -/obj/effect/gateway/artifact/big/proc/spawn_monster() - var/mob/living/simple_animal/T = pickweight(spawnable) - T = new T(src.loc) - T.min_gas = null - T.max_gas = null - T.minbodytemp = 0 - T.maxbodytemp = 5000 - T.faction = "meat" - - if (prob(60)) - health-- - spawned_mobs++ - - if (spawned_mobs >= mob_limit) - health = 0 - - playsound(loc, pick(sounds), 75, 1) - - if (health <= 0) - visible_message(SPAN_DANGER("\The [src] shrieks and contorts as it finally collapses in on itself!")) - qdel(src) - return - - visible_message(SPAN_WARNING("\The [src] lets out an agonized wail, contorting as \the [T] crawls through!")) - else - visible_message(SPAN_WARNING("\The [src] deposits \the [T] into the world!")) - - - addtimer(CALLBACK(src, .proc/spawn_monster), rand(15, 30) SECONDS) diff --git a/code/modules/xenoarcheaology/effects/hurt.dm b/code/modules/xenoarcheaology/effects/hurt.dm deleted file mode 100644 index 91b76ac2ae498..0000000000000 --- a/code/modules/xenoarcheaology/effects/hurt.dm +++ /dev/null @@ -1,54 +0,0 @@ -/datum/artifact_effect/hurt - name = "hurt" - effect_type = EFFECT_ORGANIC - -/datum/artifact_effect/hurt/DoEffectTouch(var/mob/toucher) - if(toucher) - var/weakness = GetAnomalySusceptibility(toucher) - if(iscarbon(toucher) && prob(weakness * 100)) - var/mob/living/carbon/C = toucher - to_chat(C, SPAN_DANGER("A painful discharge of energy strikes you!")) - do_damage(C, rand(5,25), rand(5,25), rand(5,25), rand(5,25), rand(1, 5)) - C.apply_damage(25 * weakness, DAMAGE_RADIATION, damage_flags = DAMAGE_FLAG_DISPERSED) - C.set_nutrition(min(50 * weakness, C.nutrition)) - C.make_dizzy(6 * weakness) - C.weakened += 6 * weakness - -/datum/artifact_effect/hurt/DoEffectAura() - if(holder) - var/turf/T = get_turf(holder) - for (var/mob/living/carbon/C in range(src.effectrange,T)) - var/weakness = GetAnomalySusceptibility(C) - if(prob(weakness * 100)) - if(prob(10)) - to_chat(C, SPAN_DANGER("You feel a painful force radiating from something nearby.")) - do_damage(C) - -/datum/artifact_effect/hurt/DoEffectPulse() - if(holder) - var/turf/T = get_turf(holder) - for (var/mob/living/carbon/C in range(effectrange, T)) - var/weakness = GetAnomalySusceptibility(C) - if(prob(weakness * 100)) - to_chat(C, SPAN_DANGER("A wave of painful energy strikes you!")) - do_damage(C, 3, 3, 3, 3) - -/datum/artifact_effect/hurt/proc/do_damage(mob/living/C, brute = 1, fire = 1, tox = 1, oxy = 1, brain = 0.1) - var/weakness = GetAnomalySusceptibility(C) - C.adjustBruteLoss(brute * weakness) - C.adjustFireLoss(fire * weakness) - C.adjustToxLoss(tox * weakness) - C.adjustOxyLoss(oxy * weakness) - C.adjustBrainLoss(brain * weakness) - C.updatehealth() - -/datum/artifact_effect/hurt/destroyed_effect() - . = ..() - - if(holder) - var/turf/T = get_turf(holder) - for (var/mob/living/carbon/C in range(effectrange, T)) - var/weakness = GetAnomalySusceptibility(C) - if(prob(weakness * 100)) - to_chat(C, SPAN_DANGER("A wave of extremely painful energy strikes you!")) - do_damage(C, 6, 6, 6, 6) diff --git a/code/modules/xenoarcheaology/effects/pushback.dm b/code/modules/xenoarcheaology/effects/pushback.dm deleted file mode 100644 index 89749a93f258f..0000000000000 --- a/code/modules/xenoarcheaology/effects/pushback.dm +++ /dev/null @@ -1,77 +0,0 @@ -/datum/artifact_effect/pushback - name = "pushback" - effect_type = EFFECT_ENERGY - var/throw_range - var/damage - var/speed = 3 - -/datum/artifact_effect/pushback/New() - ..() - effect = pick(EFFECT_TOUCH, EFFECT_PULSE) - throw_range = rand(1, 10) - damage = rand(30, 50) - -/datum/artifact_effect/pushback/DoEffectTouch(mob/toucher) - if (holder && istype(toucher, /mob/living)) - var/mob/living/M = toucher - var/weakness = GetAnomalySusceptibility(M) - M.apply_damage(damage * weakness, DAMAGE_BRUTE, damage_flags = DAMAGE_FLAG_DISPERSED) - M.throw_at(get_target_turf(M), throw_range, speed) - - to_chat(M, SPAN_DANGER("A violent force slams into you as you touch \the [holder]!")) - holder.visible_message(SPAN_WARNING("\The [holder] shines bright as it releases a wave of energy!")) - playsound(get_turf(holder), "sound/magic/repulse.ogg", 100) - -/datum/artifact_effect/pushback/DoEffectPulse() - if (holder) - var/turf/T = get_turf(holder) - for (var/mob/living/M in range(effectrange, T)) - var/weakness = GetAnomalySusceptibility(M) - M.apply_damage(damage * weakness, DAMAGE_BRUTE, damage_flags = DAMAGE_FLAG_DISPERSED) - M.throw_at(get_target_turf(M), throw_range, speed) - to_chat(M, SPAN_DANGER("A violent force explodes outward from \the [holder] and sends you flying!")) - - holder.visible_message(SPAN_WARNING("\The [holder] shines bright as it releases a wave of energy!")) - playsound(get_turf(holder), "sound/magic/repulse.ogg", 100) - -//returns a turf at a distance of 'throw_range' away from the artifact -/datum/artifact_effect/pushback/proc/get_target_turf(mob/M) - if (holder) - var/turf/step = get_step_away(M, holder, throw_range) - - if (!step) - return get_turf(M) - - var/x = step.x - var/y = step.y - - if (step.x < M.x) - x = step.x - throw_range - else if (step.x > M.x) - x = step.x + throw_range - - if (step.y < M.y) - y = step.y - throw_range - else if (step.y > M.y) - y = step.y + throw_range - - var/turf/T = locate(x, y, M.z) - - if (T) - return T - else - return step - -/datum/artifact_effect/pushback/destroyed_effect() - . = ..() - - if (holder) - var/turf/T = get_turf(holder) - damage = damage * 2 - for (var/mob/living/M in range(effectrange, T)) - var/weakness = GetAnomalySusceptibility(M) - M.apply_damage(damage * weakness, DAMAGE_BRUTE, damage_flags = DAMAGE_FLAG_DISPERSED) - M.throw_at(get_target_turf(M), throw_range, speed) - to_chat(M, SPAN_DANGER("A violent force explodes outward from \the [holder] and sends you flying!")) - - playsound(get_turf(holder), "sound/magic/repulse.ogg", 100) diff --git a/code/modules/xenoarcheaology/effects/radiate.dm b/code/modules/xenoarcheaology/effects/radiate.dm deleted file mode 100644 index 968b622cd8a03..0000000000000 --- a/code/modules/xenoarcheaology/effects/radiate.dm +++ /dev/null @@ -1,31 +0,0 @@ -/datum/artifact_effect/radiate - name = "radiation" - var/radiation_strength - var/radiation_range - -/datum/artifact_effect/radiate/New() - ..() - radiation_strength = rand(10, 50) - effect_type = pick(EFFECT_PARTICLE, EFFECT_ORGANIC) - -/datum/artifact_effect/radiate/DoEffectTouch(var/mob/living/user) - if(istype(user)) - user.apply_damage(radiation_strength * 2, DAMAGE_RADIATION, damage_flags = DAMAGE_FLAG_DISPERSED) - user.updatehealth() - return 1 - -/datum/artifact_effect/radiate/DoEffectAura() - if(holder) - SSradiation.radiate(holder, radiation_strength) - return 1 - -/datum/artifact_effect/radiate/DoEffectPulse() - if(holder) - SSradiation.radiate(holder, radiation_strength * rand(5, 10)) //Need to get feedback on this - return 1 - -/datum/artifact_effect/radiate/destroyed_effect() - . = ..() - - if(holder) - SSradiation.radiate(holder, radiation_strength * rand(10, 15)) diff --git a/code/modules/xenoarcheaology/effects/roboheal.dm b/code/modules/xenoarcheaology/effects/roboheal.dm deleted file mode 100644 index 9894173f33000..0000000000000 --- a/code/modules/xenoarcheaology/effects/roboheal.dm +++ /dev/null @@ -1,53 +0,0 @@ -/datum/artifact_effect/roboheal - name = "robotic healing" - var/last_message - -/datum/artifact_effect/roboheal/New() - ..() - effect_type = pick(EFFECT_ELECTRO, EFFECT_PARTICLE) - -/datum/artifact_effect/roboheal/DoEffectTouch(var/mob/user) - if(user) - if (istype(user, /mob/living/silicon/robot)) - var/mob/living/silicon/robot/R = user - to_chat(R, "Your systems report damaged components mending by themselves!") - R.adjustBruteLoss(rand(-10,-30)) - R.adjustFireLoss(rand(-10,-30)) - return 1 - -/datum/artifact_effect/roboheal/DoEffectAura() - if(holder) - var/turf/T = get_turf(holder) - for (var/mob/living/silicon/robot/M in range(src.effectrange,T)) - if(world.time - last_message > 200) - to_chat(M, "SYSTEM ALERT: Beneficial energy field detected!") - last_message = world.time - M.adjustBruteLoss(-1) - M.adjustFireLoss(-1) - M.updatehealth() - return 1 - -/datum/artifact_effect/roboheal/DoEffectPulse() - if(holder) - var/turf/T = get_turf(holder) - for (var/mob/living/silicon/robot/M in range(src.effectrange,T)) - if(world.time - last_message > 200) - to_chat(M, "SYSTEM ALERT: Structural damage has been repaired by energy pulse!") - last_message = world.time - M.adjustBruteLoss(-10) - M.adjustFireLoss(-10) - M.updatehealth() - return 1 - -/datum/artifact_effect/roboheal/destroyed_effect() - . = ..() - - if(holder) - var/turf/T = get_turf(holder) - for (var/mob/living/silicon/robot/M in range(src.effectrange,T)) - if(world.time - last_message > 200) - to_chat(M, SPAN_NOTICE("SYSTEM ALERT: All structural damage has been repaired by an energy pulse!")) - last_message = world.time - M.adjustBruteLoss(-50) - M.adjustFireLoss(-50) - M.updatehealth() diff --git a/code/modules/xenoarcheaology/effects/robohurt.dm b/code/modules/xenoarcheaology/effects/robohurt.dm deleted file mode 100644 index 2d7f2190416bf..0000000000000 --- a/code/modules/xenoarcheaology/effects/robohurt.dm +++ /dev/null @@ -1,53 +0,0 @@ -/datum/artifact_effect/robohurt - name = "robotic harm" - var/last_message - -/datum/artifact_effect/robohurt/New() - ..() - effect_type = pick(EFFECT_ELECTRO, EFFECT_PARTICLE) - -/datum/artifact_effect/robohurt/DoEffectTouch(var/mob/user) - if(user) - if (istype(user, /mob/living/silicon/robot)) - var/mob/living/silicon/robot/R = user - to_chat(R, "Your systems report severe damage has been inflicted!") - R.adjustBruteLoss(rand(10,50)) - R.adjustFireLoss(rand(10,50)) - return 1 - -/datum/artifact_effect/robohurt/DoEffectAura() - if(holder) - var/turf/T = get_turf(holder) - for (var/mob/living/silicon/robot/M in range(src.effectrange,T)) - if(world.time - last_message > 200) - to_chat(M, "SYSTEM ALERT: Harmful energy field detected!") - last_message = world.time - M.adjustBruteLoss(1) - M.adjustFireLoss(1) - M.updatehealth() - return 1 - -/datum/artifact_effect/robohurt/DoEffectPulse() - if(holder) - var/turf/T = get_turf(holder) - for (var/mob/living/silicon/robot/M in range(src.effectrange,T)) - if(world.time - last_message > 200) - to_chat(M, "SYSTEM ALERT: Structural damage inflicted by energy pulse!") - last_message = world.time - M.adjustBruteLoss(10) - M.adjustFireLoss(10) - M.updatehealth() - return 1 - -/datum/artifact_effect/robohurt/destroyed_effect() - . = ..() - - if(holder) - var/turf/T = get_turf(holder) - for (var/mob/living/silicon/robot/M in range(src.effectrange,T)) - if(world.time - last_message > 200) - to_chat(M, SPAN_DANGER("SYSTEM ALERT: Extreme structural damage detected from foreign energy pulse!")) - last_message = world.time - M.adjustBruteLoss(25) - M.adjustFireLoss(25) - M.updatehealth() diff --git a/code/modules/xenoarcheaology/effects/sleepy.dm b/code/modules/xenoarcheaology/effects/sleepy.dm deleted file mode 100644 index 0f7cd31e16e26..0000000000000 --- a/code/modules/xenoarcheaology/effects/sleepy.dm +++ /dev/null @@ -1,64 +0,0 @@ -//todo -/datum/artifact_effect/sleepy - name = "sleepy" - -/datum/artifact_effect/sleepy/New() - ..() - effect_type = pick(EFFECT_PSIONIC, EFFECT_ORGANIC) - -/datum/artifact_effect/sleepy/DoEffectTouch(var/mob/living/toucher) - if(istype(toucher)) - var/weakness = GetAnomalySusceptibility(toucher) - if(toucher.isSynthetic()) - to_chat(toucher, SPAN_WARNING("SYSTEM ALERT: CPU cycles slowing down.")) - return 1 - else if(ishuman(toucher) && prob(weakness * 100)) - var/mob/living/carbon/human/H = toucher - to_chat(H, pick("You feel like taking a nap.","You feel a yawn coming on.","You feel a little tired.")) - H.drowsyness = min(H.drowsyness + rand(5,25) * weakness, 50 * weakness) - H.eye_blurry = min(H.eye_blurry + rand(1,3) * weakness, 50 * weakness) - return 1 - -/datum/artifact_effect/sleepy/DoEffectAura() - if(holder) - var/turf/T = get_turf(holder) - for (var/mob/living/carbon/human/H in range(src.effectrange,T)) - if(H.isSynthetic()) - to_chat(H, SPAN_WARNING("SYSTEM ALERT: CPU cycles slowing down.")) - continue - var/weakness = GetAnomalySusceptibility(H) - if(prob(weakness * 100)) - if(prob(10)) - to_chat(H, pick("You feel like taking a nap.","You feel a yawn coming on.","You feel a little tired.")) - H.drowsyness = min(H.drowsyness + 1 * weakness, 25 * weakness) - H.eye_blurry = min(H.eye_blurry + 1 * weakness, 25 * weakness) - for (var/mob/living/silicon/robot/R in range(src.effectrange,holder)) - to_chat(R, "SYSTEM ALERT: CPU cycles slowing down.") - return 1 - -/datum/artifact_effect/sleepy/DoEffectPulse() - if(holder) - var/turf/T = get_turf(holder) - for(var/mob/living/carbon/human/H in range(src.effectrange, T)) - var/weakness = GetAnomalySusceptibility(H) - if(prob(weakness * 100)) - to_chat(H, pick("You feel like taking a nap.","You feel a yawn coming on.","You feel a little tired.")) - H.drowsyness = min(H.drowsyness + rand(5,15) * weakness, 50 * weakness) - H.eye_blurry = min(H.eye_blurry + rand(5,15) * weakness, 50 * weakness) - for (var/mob/living/silicon/robot/R in range(src.effectrange,holder)) - to_chat(R, "SYSTEM ALERT: CPU cycles slowing down.") - return 1 - -/datum/artifact_effect/sleepy/destroyed_effect() - . = ..() - - if(holder) - var/turf/T = get_turf(holder) - for(var/mob/living/carbon/human/H in range(src.effectrange, T)) - var/weakness = GetAnomalySusceptibility(H) - if(prob(weakness * 100)) - to_chat(H, (SPAN_NOTICE("Some sort of energy hits you, and you black out!"))) - H.drowsyness = min(H.drowsyness + rand(20, 30) * weakness, 50 * weakness) - H.eye_blurry = min(H.eye_blurry + rand(20, 30) * weakness, 50 * weakness) - for (var/mob/living/silicon/robot/R in range(src.effectrange,holder)) - to_chat(R, SPAN_WARNING("SYSTEM ALERT: CPU cycles shutting down.")) diff --git a/code/modules/xenoarcheaology/effects/stun.dm b/code/modules/xenoarcheaology/effects/stun.dm deleted file mode 100644 index 1100d1850e936..0000000000000 --- a/code/modules/xenoarcheaology/effects/stun.dm +++ /dev/null @@ -1,56 +0,0 @@ -/datum/artifact_effect/stun - name = "stun" - -/datum/artifact_effect/stun/New() - ..() - effect_type = pick(EFFECT_PSIONIC, EFFECT_ORGANIC) - -/datum/artifact_effect/stun/DoEffectTouch(var/mob/toucher) - if(toucher && iscarbon(toucher)) - var/mob/living/carbon/C = toucher - var/susceptibility = GetAnomalySusceptibility(C) - if(prob(susceptibility * 100)) - to_chat(C, "A powerful force overwhelms your consciousness.") - C.Weaken(rand(1,10) * susceptibility) - C.stuttering += 30 * susceptibility - C.Stun(rand(1,10) * susceptibility) - -/datum/artifact_effect/stun/DoEffectAura() - if(holder) - var/turf/T = get_turf(holder) - for (var/mob/living/carbon/C in range(src.effectrange,T)) - var/susceptibility = GetAnomalySusceptibility(C) - if(prob(10 * susceptibility)) - to_chat(C, "Your body goes numb for a moment.") - C.Weaken(2) - C.stuttering += 2 - if(prob(10)) - C.Stun(1) - else if(prob(10)) - to_chat(C, "You feel numb.") - -/datum/artifact_effect/stun/DoEffectPulse() - if(holder) - var/turf/T = get_turf(holder) - for (var/mob/living/carbon/C in range(src.effectrange,T)) - var/susceptibility = GetAnomalySusceptibility(C) - if(prob(100 * susceptibility)) - to_chat(C, "A wave of energy overwhelms your senses!") - C.SetWeakened(4 * susceptibility) - C.stuttering = 4 * susceptibility - if(prob(10)) - C.SetStunned(1 * susceptibility) - -/datum/artifact_effect/stun/destroyed_effect() - . = ..() - - if(holder) - var/turf/T = get_turf(holder) - for (var/mob/living/carbon/C in range(effectrange * 2,T)) - var/susceptibility = GetAnomalySusceptibility(C) - if(prob(100 * susceptibility)) - to_chat(C, SPAN_WARNING("A wave of energy overwhelms your senses!")) - C.SetWeakened(4 * susceptibility) - C.stuttering = 4 * susceptibility - if(prob(10)) - C.SetStunned(1 * susceptibility) diff --git a/code/modules/xenoarcheaology/effects/teleport.dm b/code/modules/xenoarcheaology/effects/teleport.dm deleted file mode 100644 index 6049bafa752b2..0000000000000 --- a/code/modules/xenoarcheaology/effects/teleport.dm +++ /dev/null @@ -1,47 +0,0 @@ -/datum/artifact_effect/teleport - name = "teleport" - effect_type = EFFECT_BLUESPACE - var/list/teleporting = list() //mobs waiting to be teleported - -/datum/artifact_effect/teleport/DoEffectTouch(var/mob/user) - if (istype(user)) - try_teleport(user, get_turf(holder)) - -/datum/artifact_effect/teleport/DoEffectAura() - if(holder) - var/turf/T = get_turf(holder) - for (var/mob/living/M in range(src.effectrange,T)) - try_teleport(M, T) - -/datum/artifact_effect/teleport/DoEffectPulse() - if(holder) - var/turf/T = get_turf(holder) - for (var/mob/living/M in range(src.effectrange, T)) - try_teleport(M, T) - -/datum/artifact_effect/teleport/proc/try_teleport(mob/living/M, turf/center) - if (M in teleporting) - return - - var/weakness = GetAnomalySusceptibility(M) - if(prob(100 * weakness)) - to_chat(M, SPAN_WARNING("You feel strange and tingly as some sort of force gathers around you!")) - teleporting += M - spawn(rand(50, 100)) - if (M.buckled) - M.buckled.unbuckle_mob() - - var/datum/effect/effect/system/spark_spread/sparks = new /datum/effect/effect/system/spark_spread() - sparks.set_up(3, 0, get_turf(M)) - sparks.start() - - M.Move(pick(trange(50, center))) - sparks = new /datum/effect/effect/system/spark_spread() - sparks.set_up(3, 0, M.loc) - sparks.start() - - teleporting -= M - - to_chat(M, SPAN_WARNING("You are displaced by a strange force!")) - else - to_chat(M, SPAN_NOTICE("You feel some sort of force gather around you, before it quickly dissapates.")) \ No newline at end of file diff --git a/code/modules/xenoarcheaology/finds/find_spawning.dm b/code/modules/xenoarcheaology/finds/find_spawning.dm deleted file mode 100644 index 28ccdded62396..0000000000000 --- a/code/modules/xenoarcheaology/finds/find_spawning.dm +++ /dev/null @@ -1,536 +0,0 @@ -/proc/get_archeological_find_by_findtype(var/find_type) - for(var/T in typesof(/obj/item/archaeological_find)) - var/obj/item/archaeological_find/F = T - if(find_type == initial(F.find_type)) - return T - return /obj/item/archaeological_find - -/obj/item/archaeological_find - name = "object" - icon = 'icons/obj/xenoarchaeology.dmi' - icon_state = "unknown2" - var/find_type = ARCHAEO_UNKNOWN - var/item_type = "object" - var/apply_prefix = 1 - var/apply_material_decorations = 1 - var/apply_image_decorations = 0 - var/additional_desc - -/obj/item/archaeological_find/Initialize() - . = ..() - var/obj/item/I = spawn_item() - var/source_material = "" - var/material_descriptor = "" - if(prob(40)) - material_descriptor = pick("rusted","dusty","archaic","fragile") - if(istype(I, /obj/item/material)) - var/obj/item/material/M = I - M.set_material(MATERIAL_ALIENALLOY) - source_material = "alien alloy" - else - source_material = pick("cordite","quadrinium","steel","titanium","aluminium","ferritic-alloy","plasteel","duranium") - - var/decorations = "" - if(apply_material_decorations) - source_material = pick("cordite","quadrinium","steel","titanium","aluminium","ferritic-alloy","plasteel","duranium") - desc = "A [material_descriptor ? "[material_descriptor] " : ""][item_type] made of [source_material], all craftsmanship is of [pick("the lowest","low","average","high","the highest")] quality." - - var/list/descriptors = list() - if(prob(30)) - descriptors.Add("is encrusted with [pick("","synthetic ","multi-faceted ","uncut ","sparkling ") + pick("rubies","emeralds","diamonds","opals","lapiz lazuli")]") - if(prob(30)) - descriptors.Add("is studded with [pick("gold","silver","aluminium","titanium")]") - if(prob(30)) - descriptors.Add("is encircled with bands of [pick("quadrinium","cordite","ferritic-alloy","plasteel","duranium")]") - if(prob(30)) - descriptors.Add("menaces with spikes of [pick("solid phoron","uranium","white pearl","black steel")]") - if(descriptors.len > 0) - decorations = "It " - for(var/index=1, index <= descriptors.len, index++) - if(index > 1) - if(index == descriptors.len) - decorations += " and " - else - decorations += ", " - decorations += descriptors[index] - decorations += "." - if(decorations) - desc += " " + decorations - - var/engravings = "" - if(apply_image_decorations) - var/obj/effect/overmap/visitable/sector/exoplanet/E = map_sectors["[z]"] - engravings = "[pick("Engraved","Carved","Etched")] on the item is [pick("an image of","a frieze of","a depiction of")] " - if(istype(E)) - engravings += E.get_engravings() - else - engravings += "[pick("an alien humanoid","an amorphic blob","a short, hairy being","a rodent-like creature","a robot","a primate","a reptilian alien","an unidentifiable object","a statue","a starship","unusual devices","a structure")] \ - [pick("surrounded by","being held aloft by","being struck by","being examined by","communicating with")] \ - [pick("alien humanoids","amorphic blobs","short, hairy beings","rodent-like creatures","robots","primates","reptilian aliens")]" - if(prob(50)) - engravings += ", [pick("they seem to be enjoying themselves","they seem extremely angry","they look pensive","they are making gestures of supplication","the scene is one of subtle horror","the scene conveys a sense of desperation","the scene is completely bizarre")]" - engravings += "." - - if(desc) - desc += " " - desc += engravings - - if(apply_prefix) - name = "[pick("strange ","ancient ","alien ")][item_type]" - else - name = item_type - - if(desc) - desc += " " - desc += additional_desc - if(!desc) - desc = "This item is completely [pick("alien","bizarre")]." - - //icon and icon_state should have already been set - I.SetName(name) - I.desc = desc - - if(prob(5)) - I.talking_atom = new(I) - - return INITIALIZE_HINT_QDEL - -/obj/item/archaeological_find/proc/spawn_item() - var/obj/item/material/kitchen/utensil/fork/F = new(loc) - F.icon = 'icons/obj/xenoarchaeology.dmi' - F.icon_state = "unknown[rand(1,4)]" - return F - -/obj/item/archaeological_find/bowl - find_type = ARCHAEO_BOWL - item_type = "bowl" - icon_state = "bowl" - apply_image_decorations = 1 - -/obj/item/archaeological_find/bowl/spawn_item() - var/obj/item/reagent_containers/R - if(prob(33)) - R = new /obj/item/reagent_containers/glass/replenishing(loc) - else - R = new /obj/item/reagent_containers/glass/beaker(loc) - R.icon = 'icons/obj/xenoarchaeology.dmi' - R.icon_state = "bowl" - if(prob(20)) - additional_desc = "There appear to be [pick("dark","faintly glowing","pungent","bright")] [pick("red","purple","green","blue")] stains inside." - return R - -/obj/item/archaeological_find/bowl/urn - find_type = ARCHAEO_URN - item_type = "urn" - icon_state = "urn" - -/obj/item/archaeological_find/bowl/urn/spawn_item() - var/obj/item/I = ..() - I.icon_state = "urn" - if(prob(20)) - additional_desc = "It [pick("whispers faintly","makes a quiet roaring sound","whistles softly","thrums quietly","throbs")] if you put it to your ear." - else - additional_desc = null - return I - -/obj/item/archaeological_find/cutlery - item_type = "cutlery" - find_type = ARCHAEO_CUTLERY - -/obj/item/archaeological_find/cutlery/spawn_item() - var/obj/item/new_item - if(prob(25)) - new_item = new /obj/item/material/kitchen/utensil/fork(loc) - else if(prob(50)) - new_item = new /obj/item/material/knife/table(loc) - else - new_item = new /obj/item/material/kitchen/utensil/spoon(loc) - additional_desc = "[pick("It's like no [item_type] you've ever seen before",\ - "It's a mystery how anyone is supposed to eat with this",\ - "You wonder what the creator's mouth was shaped like")]." - return new_item - -/obj/item/archaeological_find/statuette - item_type = "statuette" - icon_state = "statuette" - find_type = ARCHAEO_STATUETTE - -/obj/item/archaeological_find/statuette/spawn_item() - var/obj/item/new_item - if(prob(25)) - new_item = new /obj/item/vampiric(loc) - else - new_item = ..() - new_item.SetName("statuette") - new_item.icon = 'icons/obj/xenoarchaeology.dmi' - new_item.icon_state = "statuette" - - additional_desc = "It depicts a [pick("small","ferocious","wild","pleasing","hulking")] \ - [pick("alien figure","rodent-like creature","reptilian alien","primate","unidentifiable object")] \ - [pick("performing unspeakable acts","posing heroically","in a fetal position","cheering","sobbing","making a plaintive gesture","making a rude gesture")]." - return new_item - -/obj/item/archaeological_find/instrument - item_type = "instrument" - icon_state = "instrument" - find_type = ARCHAEO_INSTRUMENT - -/obj/item/archaeological_find/instrument/spawn_item() - var/obj/item/new_item = new(loc) - new_item.SetName("instrument") - new_item.icon = 'icons/obj/xenoarchaeology.dmi' - new_item.icon_state = "instrument" - if(prob(30)) - apply_image_decorations = 1 - additional_desc = "[pick("You're not sure how anyone could have played this",\ - "You wonder how many mouths the creator had",\ - "You wonder what it sounds like",\ - "You wonder what kind of music was made with it")]." - return new_item - -/obj/item/archaeological_find/knife - item_type = "knife" - find_type = ARCHAEO_KNIFE - -/obj/item/archaeological_find/knife/spawn_item() - item_type = "[pick("bladed knife","serrated blade","sharp cutting implement")]" - var/obj/item/new_item = new /obj/item/material/knife/combat(loc) - additional_desc = "[pick("It doesn't look safe.",\ - "It looks wickedly jagged",\ - "There appear to be [pick("dark red","dark purple","dark green","dark blue")] stains along the edges")]." - return new_item - -/obj/item/archaeological_find/coin - item_type = "coin" - find_type = ARCHAEO_COIN - apply_prefix = 0 - apply_material_decorations = 0 - apply_image_decorations = 1 - -/obj/item/archaeological_find/coin/spawn_item() - var/obj/item/material/coin/C = pick(subtypesof(/obj/item/material/coin)) - C = new C(loc) - return C - -/obj/item/archaeological_find/trap - item_type = "trap" - icon = 'icons/obj/items.dmi' - icon_state = "beartrap0" - find_type = ARCHAEO_BEARTRAP - apply_prefix = 0 - -/obj/item/archaeological_find/trap/spawn_item() - item_type = "[pick("wicked","evil","byzantine","dangerous")] looking [pick("device","contraption","thing","trap")]" - var/obj/item/new_item = new /obj/item/beartrap(loc) - additional_desc = "[pick("It looks like it could take a limb off",\ - "Could be some kind of animal trap",\ - "There appear to be [pick("dark red","dark purple","dark green","dark blue")] stains along part of it")]." - return new_item - -/obj/item/archaeological_find/container - item_type = "container" - icon_state = "box" - find_type = ARCHAEO_BOX - -/obj/item/archaeological_find/container/spawn_item() - var/obj/item/storage/box/new_box = new(loc) - new_box.icon = 'icons/obj/xenoarchaeology.dmi' - new_box.max_w_class = pick(ITEM_SIZE_TINY,2;ITEM_SIZE_SMALL,3;ITEM_SIZE_NORMAL,4;ITEM_SIZE_LARGE) - var/storage_amount = BASE_STORAGE_COST(new_box.max_w_class) - new_box.max_storage_space = rand(storage_amount, storage_amount * 10) - new_box.icon_state = "box" - if(prob(30)) - apply_image_decorations = 1 - return new_box - -/obj/item/archaeological_find/tank - item_type = "tank" - find_type = ARCHAEO_GASTANK - -/obj/item/archaeological_find/tank/spawn_item() - item_type = "[pick("cylinder","tank","chamber")]" - var/obj/item/tank/new_item = new/obj/item/tank(loc) - new_item.air_contents.gas.Cut() - new_item.air_contents.adjust_gas(pick(gas_data.gases),15) - additional_desc = "It [pick("gloops","sloshes")] slightly when you shake it." - return new_item - -/obj/item/archaeological_find/tool - item_type = "tool" - find_type = ARCHAEO_TOOL - -/obj/item/archaeological_find/tool/spawn_item() - var/obj/item/new_item - if(prob(25)) - new_item = new /obj/item/wrench(loc) - else if(prob(25)) - new_item = new /obj/item/crowbar(loc) - else - new_item = new /obj/item/screwdriver(loc) - new_item.icon = 'icons/obj/xenoarchaeology.dmi' - new_item.icon_state = "unknown[rand(1,4)]" - additional_desc = "[pick("It doesn't look safe.",\ - "You wonder what it was used for",\ - "There appear to be [pick("dark red","dark purple","dark green","dark blue")] stains on it")]." - return new_item - -/obj/item/archaeological_find/material - item_type = "material lump" - desc = "Salvaged lump of usable material." - find_type = ARCHAEO_METAL - apply_material_decorations = 0 - var/list/possible_materials = list(MATERIAL_STEEL, MATERIAL_PLASTEEL, MATERIAL_TITANIUM, MATERIAL_GLASS) - -/obj/item/archaeological_find/material/spawn_item() - var/mat_to_spawn = pickweight(possible_materials) - var/material/M = SSmaterials.materials_by_name[mat_to_spawn] - var/obj/item/stack/material/new_item = new M.stack_type(loc) - new_item.amount = rand(5,45) - return new_item - -/obj/item/archaeological_find/material/exotic - item_type = "rare material lump" - possible_materials = list(MATERIAL_ALIENALLOY, MATERIAL_PHORON, MATERIAL_HYDROGEN, MATERIAL_PHORON_GLASS) - -/obj/item/archaeological_find/crystal - item_type = "crystal" - icon_state = "Green lump" - find_type = ARCHAEO_CRYSTAL - apply_prefix = 0 - apply_material_decorations = 0 - -/obj/item/archaeological_find/crystal/spawn_item() - var/obj/item/new_item - if(prob(25)) - new_item = new /obj/item/device/soulstone(loc) - else - new_item = ..() - apply_image_decorations = 1 - additional_desc = pick("It shines faintly as it catches the light.","It appears to have a faint inner glow.","It seems to draw you inward as you look it at.","Something twinkles faintly as you look at it.","It's mesmerizing to behold.") - - new_item.icon = 'icons/obj/xenoarchaeology.dmi' - if(prob(25)) - item_type = "smooth green crystal" - new_item.icon_state = "Green lump" - else if(prob(33)) - item_type = "irregular purple crystal" - new_item.icon_state = "Phazon" - else - item_type = "rough red crystal" - new_item.icon_state = "changerock" - return new_item - -/obj/item/archaeological_find/blade - item_type = "blade" - find_type = ARCHAEO_CULTBLADE - apply_prefix = 0 - apply_material_decorations = 0 - apply_image_decorations = 0 - -/obj/item/archaeological_find/blade/spawn_item() - return new /obj/item/melee/cultblade(loc) - -/obj/item/archaeological_find/sword - item_type = "sword" - find_type = ARCHAEO_CLAYMORE - -/obj/item/archaeological_find/sword/spawn_item() - return new /obj/item/material/sword(loc) - -/obj/item/archaeological_find/robes - item_type = "garments" - find_type = ARCHAEO_CULTROBES - -/obj/item/archaeological_find/robes/spawn_item() - var/list/possible_spawns = list(/obj/item/clothing/head/culthood, - /obj/item/clothing/head/culthood/magus, - /obj/item/clothing/head/culthood/alt, - /obj/item/clothing/head/helmet/space/cult) - var/new_type = pick(possible_spawns) - return new new_type(loc) - -/obj/item/archaeological_find/katana - item_type = "blade" - find_type = ARCHAEO_KATANA - -/obj/item/archaeological_find/katana/spawn_item() - return new /obj/item/material/sword/katana(loc) - -/obj/item/archaeological_find/parts - item_type = "parts" - find_type = ARCHAEO_STOCKPARTS - apply_material_decorations = 0 - -/obj/item/archaeological_find/parts/spawn_item() - var/list/possible_spawns = subtypesof(/obj/item/stock_parts) - possible_spawns -= /obj/item/stock_parts/subspace - var/new_type = pick(possible_spawns) - return new new_type(loc) - -/obj/item/archaeological_find/laser - item_type = "gun" - icon_state = "egun1" - find_type = ARCHAEO_LASER - apply_prefix = 0 - -/obj/item/archaeological_find/laser/spawn_item() - var/spawn_type = pick(\ - /obj/item/gun/energy/laser/practice,\ - /obj/item/gun/energy/laser,\ - /obj/item/gun/energy/xray,\ - /obj/item/gun/energy/captain) - var/obj/item/gun/energy/new_gun = new spawn_type(loc) - - new_gun.icon = 'icons/obj/xenoarchaeology.dmi' - new_gun.icon_state = "egun[rand(1,6)]" - new_gun.charge_meter = 0 - - //10% chance to have an unchargeable cell - //15% chance to gain a random amount of starting energy, otherwise start with an empty cell - if(prob(10)) - new_gun.power_supply.maxcharge = 0 - if(prob(15)) - new_gun.power_supply.charge = rand(0, new_gun.power_supply.maxcharge) - else - new_gun.power_supply.charge = 0 - - additional_desc = "This is an antique energy weapon, you're not sure if it will fire or not." - - return new_gun - -/obj/item/archaeological_find/gun - item_type = "gun" - icon_state = "gun1" - find_type = ARCHAEO_GUN - -/obj/item/archaeological_find/gun/spawn_item() - var/obj/item/gun/projectile/revolver/new_gun = new(loc) - - new_gun.icon = 'icons/obj/xenoarchaeology.dmi' - new_gun.icon_state = "gun[rand(1,4)]" - - //33% chance to be able to reload the gun with human ammunition - if(prob(66)) - new_gun.caliber = "999" - //33% chance to fill it with a random amount of bullets - new_gun.max_shells = rand(1,12) - new_gun.loaded.Cut() - if(prob(33)) - var/num_bullets = rand(1, new_gun.max_shells) - for(var/i = 1 to num_bullets) - var/obj/item/ammo_casing/A = new new_gun.ammo_type(new_gun) - new_gun.loaded += A - if(A.caliber != new_gun.caliber) - A.caliber = new_gun.caliber - A.desc = "A bullet casing of unknown caliber." - - additional_desc = "This is an antique weapon, you're not sure if it will fire or not." - - return new_gun - -/obj/item/archaeological_find/fossil - item_type = "bones" - icon_state = "bone" - find_type = ARCHAEO_FOSSIL - apply_prefix = 0 - apply_image_decorations = 0 - apply_material_decorations = 0 - -/obj/item/archaeological_find/fossil/spawn_item() - var/list/candidates = list(/obj/item/fossil/bone=9,/obj/item/fossil/skull=3, - /obj/item/fossil/skull/horned=2) - var/spawn_type = pickweight(candidates) - return new spawn_type(loc) - -/obj/item/archaeological_find/shell - item_type = "shell" - icon_state = "shell" - find_type = ARCHAEO_SHELL - apply_prefix = 0 - apply_image_decorations = 0 - apply_material_decorations = 0 - -/obj/item/archaeological_find/shell/spawn_item() - if(prob(10)) - apply_image_decorations = 1 - return new /obj/item/fossil/shell(loc) - -/obj/item/archaeological_find/plant - item_type = "fossilized plant" - icon_state = "plant1" - find_type = ARCHAEO_PLANT - apply_prefix = 0 - apply_image_decorations = 0 - apply_material_decorations = 0 - -/obj/item/archaeological_find/plant/spawn_item() - return new /obj/item/fossil/plant(loc) - -/obj/item/archaeological_find/remains - item_type = "remains" - icon = 'icons/effects/blood.dmi' - icon_state = "remains" - find_type = ARCHAEO_REMAINS_HUMANOID - apply_image_decorations = 0 - apply_material_decorations = 0 - var/list/descs = list("They appear almost human.",\ - "They are contorted in a most gruesome way.",\ - "They look almost peaceful.",\ - "The bones are yellowing and old, but remarkably well preserved.",\ - "The bones are scored by numerous burns and partially melted.",\ - "The are battered and broken, in some cases less than splinters are left.",\ - "The mouth is wide open in a death rictus, the victim would appear to have died screaming.") - -/obj/item/archaeological_find/remains/spawn_item() - item_type = "humanoid [pick("remains","skeleton")]" - if(prob(5)) - apply_image_decorations = 1 - var/obj/item/I = new(loc) - I.icon = icon - I.icon_state = icon_state - additional_desc = pick(descs) - return I - -/obj/item/archaeological_find/remains/robot - icon = 'icons/mob/robots_gibs.dmi' - icon_state = "remainsrobot" - find_type = ARCHAEO_REMAINS_ROBOT - descs = list("Almost mistakeable for the remains of a modern cyborg.",\ - "They are barely recognisable as anything other than a pile of waste metals.",\ - "It looks like the battered remains of an ancient robot chassis.",\ - "The chassis is rusting and old, but remarkably well preserved.",\ - "The chassis is scored by numerous burns and partially melted.",\ - "The chassis is battered and broken, in some cases only chunks of metal are left.",\ - "A pile of wires and crap metal that looks vaguely robotic.") - -/obj/item/archaeological_find/remains/robot/spawn_item() - . = ..() - item_type = "[pick("mechanical","robotic","cyborg")] [pick("remains","chassis","debris")]" - -/obj/item/archaeological_find/remains/xeno - icon_state = "remainsxeno" - find_type = ARCHAEO_REMAINS_ROBOT - descs = list("It looks vaguely reptilian, but with more teeth.",\ - "They are faintly unsettling.",\ - "There is a faint aura of unease about them.",\ - "The bones are yellowing and old, but remarkably well preserved.",\ - "The bones are scored by numerous burns and partially melted.",\ - "The are battered and broken, in some cases less than splinters are left.",\ - "This creature would have been twisted and monstrous when it was alive.",\ - "It doesn't look human.") - -/obj/item/archaeological_find/remains/xeno/spawn_item() - . = ..() - item_type = "alien [pick("remains","skeleton")]" - -/obj/item/archaeological_find/mask - item_type = "mask" - find_type = ARCHAEO_GASMASK - -/obj/item/archaeological_find/mask/spawn_item() - var/obj/item/clothing/mask/gas/new_item - if(prob(25)) - new_item = new /obj/item/clothing/mask/gas/poltergeist(loc) - else - new_item = new /obj/item/clothing/mask/gas(loc) - return new_item diff --git a/code/modules/xenoarcheaology/finds/finds.dm b/code/modules/xenoarcheaology/finds/finds.dm deleted file mode 100644 index c52c18f270259..0000000000000 --- a/code/modules/xenoarcheaology/finds/finds.dm +++ /dev/null @@ -1,68 +0,0 @@ -/datum/find - var/find_type = 0 //random according to the digsite type - var/excavation_required = 0 //random 10 - 190 - var/view_range = 40 //how close excavation has to come to show an overlay on the turf - var/clearance_range = 3 //how close excavation has to come to extract the item - //if excavation hits var/excavation_required exactly, it's contained find is extracted cleanly without the ore - var/prob_delicate = 90 //probability it requires an active suspension field to not insta-crumble - var/dissonance_spread = 1 //proportion of the tile that is affected by this find - //used in conjunction with analysis machines to determine correct suspension field type - -/datum/find/New(var/digsite, var/exc_req) - excavation_required = exc_req - find_type = get_random_find_type(digsite) - clearance_range = rand(4, 12) - dissonance_spread = rand(1500, 2500) / 100 - -/obj/item/ore/strangerock - name = "strange rock" - desc = "Seems to have some unusal strata evident throughout it." - icon = 'icons/obj/xenoarchaeology.dmi' - icon_state = "strange" - origin_tech = list(TECH_MATERIAL = 5) - -/obj/item/ore/strangerock/New(loc, var/inside_item_type = 0) - ..(loc) - - if(inside_item_type) - var/T = get_archeological_find_by_findtype(inside_item_type) - new T(src) - -/obj/item/ore/strangerock/attackby(var/obj/item/I, var/mob/user) - if(istype(I, /obj/item/pickaxe/xeno/brush)) - var/obj/item/inside = locate() in src - if(inside) - inside.dropInto(loc) - visible_message("\The [src] is brushed away, revealing \the [inside].") - else - visible_message("\The [src] is brushed away into nothing.") - qdel(src) - return - - if(isWelder(I)) - var/obj/item/weldingtool/W = I - if(W.isOn()) - if(W.get_fuel() >= 2) - var/obj/item/inside = locate() in src - if(inside) - inside.dropInto(loc) - visible_message("\The [src] burns away revealing \the [inside].") - else - visible_message("\The [src] burns away into nothing.") - qdel(src) - W.remove_fuel(2) - else - visible_message("A few sparks fly off \the [src], but nothing else happens.") - W.remove_fuel(1) - return - - else if(istype(I, /obj/item/device/core_sampler)) - var/obj/item/device/core_sampler/S = I - S.sample_item(src, user) - return - - ..() - - if(prob(33)) - src.visible_message("[src] crumbles away, leaving some dust and gravel behind.") - qdel(src) diff --git a/code/modules/xenoarcheaology/finds/finds_defines.dm b/code/modules/xenoarcheaology/finds/finds_defines.dm deleted file mode 100644 index 8fb4b7cb1220b..0000000000000 --- a/code/modules/xenoarcheaology/finds/finds_defines.dm +++ /dev/null @@ -1,106 +0,0 @@ -var/global/list/responsive_carriers = list( - /datum/reagent/carbon, - /datum/reagent/potassium, - /datum/reagent/hydrazine, - "nitrogen", - /datum/reagent/mercury, - /datum/reagent/iron, - "chlorine", - /datum/reagent/phosphorus, - /datum/reagent/toxin/phoron) - -var/global/list/finds_as_strings = list( - "Trace organic cells", - "Long exposure particles", - "Trace water particles", - "Crystalline structures", - "Metallic derivative", - "Metallic composite", - "Metamorphic/igneous rock composite", - "Metamorphic/sedimentary rock composite", - "Anomalous material") - -/proc/get_responsive_reagent(var/find_type) - switch(find_type) - if(ARCHAEO_BOWL, ARCHAEO_URN, ARCHAEO_CUTLERY, ARCHAEO_STATUETTE, ARCHAEO_INSTRUMENT, ARCHAEO_HANDCUFFS, ARCHAEO_BEARTRAP, ARCHAEO_BOX, ARCHAEO_GASTANK, ARCHAEO_UNKNOWN) - return /datum/reagent/mercury - if(ARCHAEO_COIN, ARCHAEO_KNIFE, ARCHAEO_TOOL, ARCHAEO_METAL, ARCHAEO_CLAYMORE, ARCHAEO_KATANA, ARCHAEO_LASER, ARCHAEO_GUN) - return /datum/reagent/iron - if(ARCHAEO_CRYSTAL, ARCHAEO_SOULSTONE) - return "nitrogen" - if(ARCHAEO_CULTBLADE, ARCHAEO_TELEBEACON, ARCHAEO_CULTROBES, ARCHAEO_STOCKPARTS) - return /datum/reagent/potassium - if(ARCHAEO_FOSSIL, ARCHAEO_SHELL, ARCHAEO_PLANT, ARCHAEO_REMAINS_HUMANOID, ARCHAEO_REMAINS_ROBOT, ARCHAEO_REMAINS_XENO, ARCHAEO_GASMASK) - return /datum/reagent/carbon - return /datum/reagent/toxin/phoron - -/proc/get_random_digsite_type() - return pick(100;DIGSITE_GARDEN, 95;DIGSITE_ANIMAL, 90;DIGSITE_HOUSE, 85;DIGSITE_TECHNICAL, 80;DIGSITE_TEMPLE, 75;DIGSITE_WAR) - -/proc/get_random_find_type(var/digsite) - . = 0 - switch(digsite) - if(DIGSITE_GARDEN) - . = pick( - 100;ARCHAEO_PLANT, - 25;ARCHAEO_SHELL, - 25;ARCHAEO_FOSSIL, - 5;ARCHAEO_BEARTRAP) - if(DIGSITE_ANIMAL) - . = pick( - 100;ARCHAEO_FOSSIL, - 50;ARCHAEO_SHELL, - 50;ARCHAEO_PLANT, - 25;ARCHAEO_BEARTRAP) - if(DIGSITE_HOUSE) - . = pick( - 100;ARCHAEO_BOWL, - 100;ARCHAEO_URN, - 100;ARCHAEO_CUTLERY, - 100;ARCHAEO_STATUETTE, - 100;ARCHAEO_INSTRUMENT, - 100;ARCHAEO_BOX, - 75;ARCHAEO_GASMASK, - 75;ARCHAEO_COIN, - 75;ARCHAEO_UNKNOWN, - 25;ARCHAEO_METAL) - if(DIGSITE_TECHNICAL) - . = pick( - 125;ARCHAEO_GASMASK, - 100;ARCHAEO_METAL, - 100;ARCHAEO_GASTANK, - 100;ARCHAEO_TELEBEACON, - 100;ARCHAEO_TOOL, - 100;ARCHAEO_STOCKPARTS, - 75;ARCHAEO_UNKNOWN, - 50;ARCHAEO_HANDCUFFS, - 50;ARCHAEO_BEARTRAP) - if(DIGSITE_TEMPLE) - . = pick( - 200;ARCHAEO_CULTROBES, - 200;ARCHAEO_STATUETTE, - 100;ARCHAEO_URN, - 100;ARCHAEO_BOWL, - 100;ARCHAEO_KNIFE, - 100;ARCHAEO_CRYSTAL, - 75;ARCHAEO_CULTBLADE, - 50;ARCHAEO_UNKNOWN, - 25;ARCHAEO_HANDCUFFS, - 25;ARCHAEO_BEARTRAP, - 10;ARCHAEO_KATANA, - 10;ARCHAEO_CLAYMORE, - 10;ARCHAEO_METAL, - 10;ARCHAEO_GASMASK) - if(DIGSITE_WAR) - . = pick( - 100;ARCHAEO_GUN, - 100;ARCHAEO_KNIFE, - 75;ARCHAEO_LASER, - 75;ARCHAEO_KATANA, - 75;ARCHAEO_CLAYMORE, - 50;ARCHAEO_UNKNOWN, - 50;ARCHAEO_CULTROBES, - 50;ARCHAEO_CULTBLADE, - 50;ARCHAEO_GASMASK, - 25;ARCHAEO_BEARTRAP, - 25;ARCHAEO_TOOL) diff --git a/code/modules/xenoarcheaology/finds/fossils.dm b/code/modules/xenoarcheaology/finds/fossils.dm deleted file mode 100644 index fcd586bd8ff29..0000000000000 --- a/code/modules/xenoarcheaology/finds/fossils.dm +++ /dev/null @@ -1,107 +0,0 @@ - -//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -// fossils - -/obj/item/fossil - name = "Fossil" - icon = 'icons/obj/xenoarchaeology.dmi' - icon_state = "bone" - desc = "It's a fossil." - var/animal = 1 - -/obj/item/fossil/base/Initialize() - . = ..() - if (. == INITIALIZE_HINT_QDEL) - return - var/list/fossil_weights = list( - /obj/item/fossil/bone = 9, - /obj/item/fossil/skull = 3, - /obj/item/fossil/skull/horned = 2 - ) - var/fossil_type = pickweight(fossil_weights) - var/obj/item/I = new fossil_type (loc) - var/turf/simulated/mineral/T = get_turf(src) - if (istype(T)) - T.last_find = I - qdel(src) - -/obj/item/fossil/bone - name = "fossilised bone" - icon_state = "bone" - desc = "A fossilised part of an alien, long dead." - -/obj/item/fossil/skull - name = "fossilised skull" - icon_state = "skull" - -/obj/item/fossil/skull/horned - icon_state = "hskull" - -/obj/item/fossil/skull/attackby(obj/item/W, mob/user) - if(istype(W,/obj/item/fossil/bone)) - if(!user.canUnEquip(W)) - return - var/mob/M = get_holder_of_type(src, /mob) - if(M && !M.unEquip(src)) - return - var/obj/o = new /obj/skeleton(get_turf(src)) - user.unEquip(W, o) - forceMove(o) - -/obj/skeleton - name = "Incomplete skeleton" - icon = 'icons/obj/xenoarchaeology.dmi' - icon_state = "uskel" - desc = "Incomplete skeleton." - var/bnum = 1 - var/breq - var/bstate = 0 - var/plaque_contents = "Unnamed alien creature" - -/obj/skeleton/New() - src.breq = rand(6)+3 - src.desc = "An incomplete skeleton, looks like it could use [src.breq-src.bnum] more bones." - -/obj/skeleton/attackby(obj/item/W, mob/user) - if(istype(W,/obj/item/fossil/bone)) - if(!bstate && user.unEquip(W, src)) - bnum++ - if(bnum==breq) - usr = user - icon_state = "skel" - src.bstate = 1 - src.set_density(1) - src.SetName("alien skeleton display") - if(src.contents.Find(/obj/item/fossil/skull/horned)) - src.desc = "A creature made of [src.contents.len-1] assorted bones and a horned skull. The plaque reads \'[plaque_contents]\'." - else - src.desc = "A creature made of [src.contents.len-1] assorted bones and a skull. The plaque reads \'[plaque_contents]\'." - else - src.desc = "Incomplete skeleton, looks like it could use [src.breq-src.bnum] more bones." - to_chat(user, "Looks like it could use [src.breq-src.bnum] more bones.") - else - ..() - else if(istype(W,/obj/item/pen)) - plaque_contents = sanitize(input("What would you like to write on the plaque:","Skeleton plaque","")) - user.visible_message("[user] writes something on the base of [icon2html(src, viewers(get_turf(src)))] [src].","You relabel the plaque on the base of [icon2html(src, user)] [src].") - if(src.contents.Find(/obj/item/fossil/skull/horned)) - src.desc = "A creature made of [src.contents.len-1] assorted bones and a horned skull. The plaque reads \'[plaque_contents]\'." - else - src.desc = "A creature made of [src.contents.len-1] assorted bones and a skull. The plaque reads \'[plaque_contents]\'." - else - ..() - -//shells and plants do not make skeletons -/obj/item/fossil/shell - name = "fossilised shell" - icon_state = "shell" - desc = "A fossilised, pre-Stygian alien crustacean." - -/obj/item/fossil/plant - name = "fossilised plant" - icon_state = "plant1" - desc = " A fossilised shred of alien plant matter." - animal = 0 - -/obj/item/fossil/plant/New() - icon_state = "plant[rand(1,4)]" diff --git a/code/modules/xenoarcheaology/finds/misc.dm b/code/modules/xenoarcheaology/finds/misc.dm deleted file mode 100644 index d8d1f1f120c98..0000000000000 --- a/code/modules/xenoarcheaology/finds/misc.dm +++ /dev/null @@ -1,50 +0,0 @@ - -// Phoron shards have been moved to code/game/objects/items/weapons/shards.dm - -//legacy crystal -/obj/machinery/crystal - name = "Crystal" - icon = 'icons/obj/mining.dmi' - icon_state = "crystal" - - -/obj/machinery/crystal/New() - ..() - icon_state = pick("crystal", "crystal2", "crystal3") - - -//Variant crystals, in case you want to spawn/map those directly. -/obj/machinery/crystal_static - name = "Crystal" - icon = 'icons/obj/mining.dmi' - icon_state = "crystal" - -/obj/machinery/crystal_static/pink - name = "Crystal" - icon_state = "crystal2" - -/obj/machinery/crystal_static/orange - name = "Crystal" - icon_state = "crystal3" - - -//large finds - /* - obj/machinery/syndicate_beacon - obj/machinery/wish_granter - if(18) - item_type = "jagged green crystal" - additional_desc = pick("It shines faintly as it catches the light.","It appears to have a faint inner glow.","It seems to draw you inward as you look it at.","Something twinkles faintly as you look at it.","It's mesmerizing to behold.") - icon_state = "crystal" - apply_material_decorations = 0 - if(prob(10)) - apply_image_decorations = 1 - if(19) - item_type = "jagged pink crystal" - additional_desc = pick("It shines faintly as it catches the light.","It appears to have a faint inner glow.","It seems to draw you inward as you look it at.","Something twinkles faintly as you look at it.","It's mesmerizing to behold.") - icon_state = "crystal2" - apply_material_decorations = 0 - if(prob(10)) - apply_image_decorations = 1 - */ - //machinery type artifacts? diff --git a/code/modules/xenoarcheaology/finds/special.dm b/code/modules/xenoarcheaology/finds/special.dm deleted file mode 100644 index ec59738aec6ab..0000000000000 --- a/code/modules/xenoarcheaology/finds/special.dm +++ /dev/null @@ -1,225 +0,0 @@ - - - -//endless reagents! -/obj/item/reagent_containers/glass/replenishing - var/spawning_id - -/obj/item/reagent_containers/glass/replenishing/Initialize() - . = ..() - spawning_id = pick(/datum/reagent/blood,/datum/reagent/water/holywater,/datum/reagent/soporific,/datum/reagent/ethanol,/datum/reagent/drink/ice,/datum/reagent/glycerol,/datum/reagent/fuel,/datum/reagent/space_cleaner) - START_PROCESSING(SSobj, src) - -/obj/item/reagent_containers/glass/replenishing/Process() - reagents.add_reagent(spawning_id, 0.3) - - - -//a talking gas mask! -/obj/item/clothing/mask/gas/poltergeist - var/list/heard_talk = list() - var/last_twitch = 0 - var/max_stored_messages = 100 - -/obj/item/clothing/mask/gas/poltergeist/Initialize() - START_PROCESSING(SSobj, src) - GLOB.listening_objects += src - . = ..() - -/obj/item/clothing/mask/gas/poltergeist/Destroy() - STOP_PROCESSING(SSobj, src) - GLOB.listening_objects -= src - return ..() - -/obj/item/clothing/mask/gas/poltergeist/Process() - if(heard_talk.len && istype(src.loc, /mob/living) && prob(10)) - var/mob/living/M = src.loc - M.say(pick(heard_talk)) - -/obj/item/clothing/mask/gas/poltergeist/hear_talk(mob/M as mob, text) - ..() - if(heard_talk.len > max_stored_messages) - heard_talk.Remove(pick(heard_talk)) - heard_talk.Add(text) - if(istype(src.loc, /mob/living) && world.time - last_twitch > 50) - last_twitch = world.time - - - -//a vampiric statuette -//todo: cult integration -/obj/item/vampiric - name = "statuette" - icon_state = "statuette" - icon = 'icons/obj/xenoarchaeology.dmi' - var/charges = 0 - var/list/nearby_mobs = list() - var/last_bloodcall = 0 - var/bloodcall_interval = 50 - var/last_eat = 0 - var/eat_interval = 100 - var/wight_check_index = 1 - var/list/shadow_wights = list() - -/obj/item/vampiric/Initialize() - . = ..() - START_PROCESSING(SSobj, src) - GLOB.listening_objects += src - -/obj/item/vampiric/Destroy() - STOP_PROCESSING(SSobj, src) - GLOB.listening_objects -= src - return ..() - -/obj/item/vampiric/Process() - //see if we've identified anyone nearby - if(world.time - last_bloodcall > bloodcall_interval && nearby_mobs.len) - var/mob/living/carbon/human/M = pop(nearby_mobs) - if(M in view(7,src) && M.health > 20) - if(prob(50)) - bloodcall(M) - nearby_mobs.Add(M) - - //suck up some blood to gain power - if(world.time - last_eat > eat_interval) - var/obj/effect/decal/cleanable/blood/B = locate() in range(2,src) - if(B) - last_eat = world.time - if(istype(B, /obj/effect/decal/cleanable/blood/drip)) - charges += 0.25 - else - charges += 1 - playsound(src.loc, 'sound/effects/splat.ogg', 50, 1, -3) - qdel(B) - - //use up stored charges - if(charges >= 10) - charges -= 10 - new /obj/effect/spider/eggcluster(pick(view(1,src))) - - if(charges >= 3) - if(prob(5)) - charges -= 1 - var/spawn_type = pick(/mob/living/simple_animal/hostile/creature) - new spawn_type(pick(view(1,src))) - playsound(src.loc, pick('sound/hallucinations/growl1.ogg','sound/hallucinations/growl2.ogg','sound/hallucinations/growl3.ogg'), 50, 1, -3) - - if(charges >= 1) - if(shadow_wights.len < 5 && prob(5)) - shadow_wights.Add(new /obj/effect/shadow_wight(src.loc)) - playsound(src.loc, 'sound/effects/ghost.ogg', 50, 1, -3) - charges -= 0.1 - - if(charges >= 0.1) - if(prob(5)) - src.visible_message("[icon2html(src, viewers(get_turf(src)))] [src]'s eyes glow ruby red for a moment!") - charges -= 0.1 - - //check on our shadow wights - if(shadow_wights.len) - wight_check_index++ - if(wight_check_index > shadow_wights.len) - wight_check_index = 1 - - var/obj/effect/shadow_wight/W = shadow_wights[wight_check_index] - if(isnull(W)) - shadow_wights.Remove(wight_check_index) - else if(isnull(W.loc)) - shadow_wights.Remove(wight_check_index) - else if(get_dist(W, src) > 10) - shadow_wights.Remove(wight_check_index) - -/obj/item/vampiric/hear_talk(mob/M as mob, text) - ..() - if(world.time - last_bloodcall >= bloodcall_interval && (M in view(7, src))) - bloodcall(M) - -/obj/item/vampiric/proc/bloodcall(var/mob/living/carbon/human/M) - last_bloodcall = world.time - if(istype(M)) - playsound(src.loc, pick('sound/hallucinations/wail.ogg','sound/hallucinations/veryfar_noise.ogg','sound/hallucinations/far_noise.ogg'), 50, 1, -3) - nearby_mobs.Add(M) - - var/target = pick(M.organs_by_name) - M.apply_damage(rand(5, 10), DAMAGE_BRUTE, target) - to_chat(M, "The skin on your [parse_zone(target)] feels like it's ripping apart, and a stream of blood flies out.") - var/obj/effect/decal/cleanable/blood/splatter/animated/B = new(M.loc) - B.target_turf = pick(range(1, src)) - B.blood_DNA = list() - B.blood_DNA[M.dna.unique_enzymes] = M.dna.b_type - M.vessel.remove_reagent(/datum/reagent/blood,rand(25,50)) - -//animated blood 2 SPOOKY -/obj/effect/decal/cleanable/blood/splatter/animated - var/turf/target_turf - var/loc_last_process - -/obj/effect/decal/cleanable/blood/splatter/animated/Initialize() - . = ..() - loc_last_process = src.loc - START_PROCESSING(SSobj, src) - -/obj/effect/decal/cleanable/blood/splatter/animated/Destroy() - STOP_PROCESSING(SSobj, src) - return ..() - -/obj/effect/decal/cleanable/blood/splatter/animated/Process() - if(target_turf && src.loc != target_turf) - step_towards(src,target_turf) - if(src.loc == loc_last_process) - target_turf = null - loc_last_process = src.loc - - //leave some drips behind - if(prob(50)) - var/obj/effect/decal/cleanable/blood/drip/D = new(src.loc) - D.blood_DNA = src.blood_DNA.Copy() - if(prob(50)) - D = new(src.loc) - D.blood_DNA = src.blood_DNA.Copy() - if(prob(50)) - D = new(src.loc) - D.blood_DNA = src.blood_DNA.Copy() - else - ..() - -/obj/effect/shadow_wight - name = "shadow wight" - icon = 'icons/mob/mob.dmi' - icon_state = "shade" - density = TRUE - -/obj/effect/shadow_wight/Initialize() - . = ..() - START_PROCESSING(SSobj, src) - -/obj/effect/shadow_wight/Destroy() - STOP_PROCESSING(SSobj, src) - return ..() - -/obj/effect/shadow_wight/Process() - if(loc) - step_rand(src) - var/mob/living/carbon/M = locate() in src.loc - if(M) - playsound(src.loc, pick('sound/hallucinations/behind_you1.ogg',\ - 'sound/hallucinations/behind_you2.ogg',\ - 'sound/hallucinations/i_see_you1.ogg',\ - 'sound/hallucinations/i_see_you2.ogg',\ - 'sound/hallucinations/im_here1.ogg',\ - 'sound/hallucinations/im_here2.ogg',\ - 'sound/hallucinations/look_up1.ogg',\ - 'sound/hallucinations/look_up2.ogg',\ - 'sound/hallucinations/over_here1.ogg',\ - 'sound/hallucinations/over_here2.ogg',\ - 'sound/hallucinations/over_here3.ogg',\ - 'sound/hallucinations/turn_around1.ogg',\ - 'sound/hallucinations/turn_around2.ogg',\ - ), 50, 1, -3) - M.sleeping = max(M.sleeping,rand(5,10)) - qdel(src) - else - STOP_PROCESSING(SSobj, src) - -/obj/effect/shadow_wight/Bump(var/atom/obstacle) - to_chat(obstacle, "You feel a chill run down your spine!") diff --git a/code/modules/xenoarcheaology/finds/talking.dm b/code/modules/xenoarcheaology/finds/talking.dm deleted file mode 100644 index dfc83158fe239..0000000000000 --- a/code/modules/xenoarcheaology/finds/talking.dm +++ /dev/null @@ -1,112 +0,0 @@ -/obj/var/datum/talking_atom/talking_atom - -/datum/talking_atom - var/list/heard_words = list() - var/last_talk_time = 0 - var/atom/holder_atom - var/talk_interval = 50 - var/talk_chance = 10 - -/datum/talking_atom/New(atom/holder) - holder_atom = holder - init() - -/datum/talking_atom/proc/init() - if(holder_atom) - START_PROCESSING(SSprocessing, src) - -/datum/talking_atom/Process() - if(!holder_atom) - STOP_PROCESSING(SSprocessing, src) - - else if(heard_words.len >= 1 && world.time > last_talk_time + talk_interval && prob(talk_chance)) - SaySomething() - -/datum/talking_atom/proc/catchMessage(var/msg, var/mob/source) - if(!holder_atom) - return - - var/list/seperate = list() - if(findtext(msg,"((")) - return - else if(findtext(msg,"))")) - return - else if(findtext(msg," ")==0) - return - else - /*var/l = length(msg) - if(findtext(msg," ",l,l+1)==0) - msg+=" "*/ - seperate = splittext(msg, " ") - - for(var/Xa = 1,Xa 20 + rand(10,20)) - heard_words.Remove(heard_words[1]) - if(!heard_words["[lowertext(seperate[Xa])]"]) - heard_words["[lowertext(seperate[Xa])]"] = list() - var/list/w = heard_words["[lowertext(seperate[Xa])]"] - if(w) - w.Add("[lowertext(seperate[next])]") -// log_debug("Adding [lowertext(seperate[next])] to [lowertext(seperate[Xa])]") - - if(prob(30)) - var/list/options = list("[holder_atom] seems to be listening intently to [source]...",\ - "[holder_atom] seems to be focusing on [source]...",\ - "[holder_atom] seems to turn it's attention to [source]...") - holder_atom.loc.visible_message("[icon2html(holder_atom, viewers(get_turf(holder_atom)))] [pick(options)]") - - if(prob(20)) - spawn(2) - SaySomething(pick(seperate)) - -/*/obj/item/talkingcrystal/proc/debug() - //set src in view() - for(var/v in heard_words) - log_debug("[uppertext(v)]") - var/list/d = heard_words["[v]"] - for(var/X in d) - log_debug("[X]") */ - -/datum/talking_atom/proc/SaySomething(var/word = null) - if(!holder_atom) - return - - var/msg - var/limit = rand(max(5,heard_words.len/2))+3 - var/text - if(!word) - text = "[pick(heard_words)]" - else - text = pick(splittext(word, " ")) - if(length(text)==1) - text=uppertext(text) - else - var/cap = copytext_char(text,1,2) - cap = uppertext(cap) - cap += copytext_char(text,2,length(text)+1) - text=cap - var/q = 0 - msg+=text - if(msg=="What" | msg == "Who" | msg == "How" | msg == "Why" | msg == "Are") - q=1 - - text=lowertext(text) - for(var/ya,ya <= limit,ya++) - - if(heard_words.Find("[text]")) - var/list/w = heard_words["[text]"] - text=pick(w) - else - text = "[pick(heard_words)]" - msg+=" [text]" - if(q) - msg+="?" - else - if(rand(0,10)) - msg+="." - else - msg+="!" - - holder_atom.audible_message(SPAN_BOLD(holder_atom.name) + " reverberates, \"[msg]\"", SPAN_ITALIC("\The [holder_atom] vibrates and lights up for a moment, but you hear no sound...")) - last_talk_time = world.time diff --git a/code/modules/xenoarcheaology/misc.dm b/code/modules/xenoarcheaology/misc.dm deleted file mode 100644 index a906834b9d34a..0000000000000 --- a/code/modules/xenoarcheaology/misc.dm +++ /dev/null @@ -1,64 +0,0 @@ -/obj/structure/bookcase/manuals/xenoarchaeology - name = "Xenoarchaeology Manuals bookcase" - -/obj/structure/bookcase/manuals/xenoarchaeology/New() - ..() - new /obj/item/book/manual/excavation(src) - new /obj/item/book/manual/mass_spectrometry(src) - new /obj/item/book/manual/materials_chemistry_analysis(src) - new /obj/item/book/manual/anomaly_testing(src) - new /obj/item/book/manual/anomaly_spectroscopy(src) - new /obj/item/book/manual/stasis(src) - update_icon() - -/obj/structure/closet/secure_closet/xenoarchaeologist - name = "Xenoarchaeologist Locker" - req_access = list(access_xenoarch) - closet_appearance = /decl/closet_appearance/secure_closet/expedition/science - -/obj/structure/closet/secure_closet/xenoarchaeologist/New() - ..() - if(prob(50)) - new /obj/item/storage/backpack/toxins(src) - else - new /obj/item/storage/backpack/satchel/tox(src) - if(prob(50)) - new /obj/item/storage/backpack/dufflebag(src) - new /obj/item/clothing/under/rank/scientist(src) - new /obj/item/clothing/suit/storage/toggle/labcoat(src) - new /obj/item/clothing/shoes/white(src) - new /obj/item/clothing/glasses/science(src) - new /obj/item/device/radio/headset/headset_sci(src) - new /obj/item/clothing/mask/gas(src) - new /obj/item/material/clipboard(src) - new /obj/item/storage/belt/archaeology(src) - new /obj/item/storage/excavation(src) - new /obj/item/taperoll/research(src) - -/obj/structure/closet/excavation - name = "excavation tools" - closet_appearance = /decl/closet_appearance/secure_closet/engineering/tools - -/obj/structure/closet/excavation/New() - ..() - new /obj/item/storage/belt/archaeology(src) - new /obj/item/storage/excavation(src) - new /obj/item/device/flashlight/lantern(src) - new /obj/item/device/ano_scanner(src) - new /obj/item/device/depth_scanner(src) - new /obj/item/device/core_sampler(src) - new /obj/item/device/gps(src) - new /obj/item/pinpointer/radio(src) - new /obj/item/clothing/glasses/meson(src) - new /obj/item/pickaxe(src) - new /obj/item/device/measuring_tape(src) - new /obj/item/pickaxe/xeno/hand(src) - new /obj/item/storage/bag/fossils(src) - new /obj/item/hand_labeler(src) - new /obj/item/taperoll/research(src) - -/obj/machinery/alarm/isolation - req_access = list(list(access_research, access_atmospherics, access_engine_equip)) - -/obj/machinery/alarm/monitor/isolation - req_access = list(list(access_research, access_atmospherics, access_engine_equip)) \ No newline at end of file diff --git a/code/modules/xenoarcheaology/sampling.dm b/code/modules/xenoarcheaology/sampling.dm deleted file mode 100644 index 2397901d10140..0000000000000 --- a/code/modules/xenoarcheaology/sampling.dm +++ /dev/null @@ -1,165 +0,0 @@ -/obj/item/rocksliver - name = "rock sliver" - desc = "It looks extremely delicate." - icon = 'icons/obj/xenoarchaeology.dmi' - icon_state = "sliver1" - randpixel = 8 - w_class = ITEM_SIZE_TINY - sharp = TRUE - var/datum/geosample/geological_data - -/obj/item/rocksliver/New() - icon_state = "sliver[rand(1, 3)]" - -/datum/geosample - var/age = 0 - var/age_thousand = 0 - var/age_million = 0 - var/age_billion = 0 - var/artifact_id = "" - var/artifact_distance = -1 - var/source_mineral = "chlorine" - var/list/find_presence = list() - -/datum/geosample/New(var/turf/simulated/mineral/container) - UpdateTurf(container) - -/datum/geosample/proc/UpdateTurf(var/turf/simulated/mineral/container) - if(!istype(container)) - return - - age = rand(1, 999) - - if(container.mineral) - if(islist(container.mineral.xarch_ages)) - var/list/ages = container.mineral.xarch_ages - if(ages["thousand"]) - age_thousand = rand(1, ages["thousand"]) - if(ages["million"]) - age_million = rand(1, ages["million"]) - if(ages["billion"]) - if(ages["billion_lower"]) - age_billion = rand(ages["billion_lower"], ages["billion"]) - else - age_billion = rand(1, ages["billion"]) - if(container.mineral.xarch_source_mineral) - source_mineral = container.mineral.xarch_source_mineral - - if(prob(75)) - find_presence[/datum/reagent/phosphorus] = rand(1, 500) / 100 - if(prob(25)) - find_presence[/datum/reagent/mercury] = rand(1, 500) / 100 - find_presence["chlorine"] = rand(500, 2500) / 100 - - for(var/datum/find/F in container.finds) - var/responsive_reagent = get_responsive_reagent(F.find_type) - find_presence[responsive_reagent] = F.dissonance_spread - - var/total_presence = 0 - for(var/carrier in find_presence) - total_presence += find_presence[carrier] - for(var/carrier in find_presence) - find_presence[carrier] = find_presence[carrier] / total_presence - -/datum/geosample/proc/UpdateNearbyArtifactInfo(var/turf/simulated/mineral/container) - if(!container || !istype(container)) - return - - if(container.artifact_find) - artifact_distance = rand() - artifact_id = container.artifact_find.artifact_id - else - for (var/turf/simulated/mineral/T as anything in GLOB.xeno_artifact_turfs) - if(T.artifact_find) - var/cur_dist = get_dist(container, T) * 2 - if( (artifact_distance < 0 || cur_dist < artifact_distance)) - artifact_distance = cur_dist + rand() * 2 - 1 - artifact_id = T.artifact_find.artifact_id - else - GLOB.xeno_artifact_turfs -= T - -/obj/item/device/core_sampler - name = "core sampler" - desc = "Used to extract geological core samples." - icon = 'icons/obj/sampler.dmi' - icon_state = "sampler0" - item_state = "screwdriver_brown" - w_class = ITEM_SIZE_TINY - - var/sampled_turf = "" - var/num_stored_bags = 10 - var/obj/item/evidencebag/filled_bag - -/obj/item/device/core_sampler/examine(mob/user, distance) - . = ..(user) - if(distance <= 2) - to_chat(user, "Used to extract geological core samples - this one is [sampled_turf ? "full" : "empty"], and has [num_stored_bags] bag[num_stored_bags != 1 ? "s" : ""] remaining.") - -/obj/item/device/core_sampler/attackby(var/obj/item/I, var/mob/living/user) - if(istype(I, /obj/item/evidencebag)) - if(I.contents.len) - to_chat(user, "\The [I] is full.") - return - if(num_stored_bags < 10) - qdel(I) - num_stored_bags += 1 - to_chat(user, "You insert \the [I] into \the [src].") - else - to_chat(user, "\The [src] can not fit any more bags.") - else - return ..() - -/obj/item/device/core_sampler/proc/sample_item(var/item_to_sample, var/mob/user) - var/datum/geosample/geo_data - - if(istype(item_to_sample, /turf/simulated/mineral)) - var/turf/simulated/mineral/T = item_to_sample - T.geologic_data.UpdateNearbyArtifactInfo(T) - geo_data = T.geologic_data - else if(istype(item_to_sample, /obj/item/ore)) - var/obj/item/ore/O = item_to_sample - geo_data = O.geologic_data - - if(geo_data) - if(filled_bag) - to_chat(user, "The core sampler is full.") - else if(num_stored_bags < 1) - to_chat(user, "The core sampler is out of sample bags.") - else - //create a new sample bag which we'll fill with rock samples - filled_bag = new /obj/item/evidencebag(src) - filled_bag.SetName("sample bag") - filled_bag.desc = "a bag for holding research samples." - - icon_state = "sampler1" - --num_stored_bags - - //put in a rock sliver - var/obj/item/rocksliver/R = new(filled_bag) - R.geological_data = geo_data - - //update the sample bag - filled_bag.icon_state = "evidence" - var/image/I = image("icon"=R, "layer"=FLOAT_LAYER) - filled_bag.overlays += I - filled_bag.overlays += "evidence" - filled_bag.w_class = ITEM_SIZE_TINY - filled_bag.stored_item = R - - to_chat(user, "You take a core sample of the [item_to_sample].") - else - to_chat(user, "You are unable to take a sample of [item_to_sample].") - -/obj/item/device/core_sampler/attack_self(var/mob/living/user) - if(filled_bag) - to_chat(user, "You eject the full sample bag.") - var/success = 0 - if(istype(src.loc, /mob)) - var/mob/M = src.loc - success = M.put_in_inactive_hand(filled_bag) - if(!success) - filled_bag.dropInto(loc) - filled_bag = null - icon_state = "sampler0" - else - to_chat(user, "The core sampler is empty.") diff --git a/code/modules/xenoarcheaology/tools/ano_device_battery.dm b/code/modules/xenoarcheaology/tools/ano_device_battery.dm deleted file mode 100644 index c44defab8989a..0000000000000 --- a/code/modules/xenoarcheaology/tools/ano_device_battery.dm +++ /dev/null @@ -1,218 +0,0 @@ -/obj/item/anobattery - name = "Anomaly power battery" - icon = 'icons/obj/xenoarchaeology.dmi' - icon_state = "anobattery0" - var/datum/artifact_effect/battery_effect - var/capacity = 300 - var/stored_charge = 0 - var/effect_id = "" - -/obj/item/anobattery/proc/UpdateSprite() - var/p = (stored_charge/capacity)*100 - p = min(p, 100) - icon_state = "anobattery[round(p,25)]" - -/obj/item/anobattery/proc/use_power(var/amount) - stored_charge = max(0, stored_charge - amount) - -/obj/item/anodevice - name = "Anomaly power utilizer" - icon = 'icons/obj/xenoarchaeology.dmi' - icon_state = "anodev" - var/activated = 0 - var/duration = 0 - var/interval = 0 - var/time_end = 0 - var/last_activation = 0 - var/last_process = 0 - var/obj/item/anobattery/inserted_battery - var/turf/archived_loc - var/energy_consumed_on_touch = 100 - -/obj/item/anodevice/Initialize() - . = ..() - START_PROCESSING(SSobj, src) - -/obj/item/anodevice/attackby(var/obj/I as obj, var/mob/user as mob) - if(istype(I, /obj/item/anobattery)) - if(!inserted_battery) - if(!user.unEquip(I, src)) - return - to_chat(user, "You insert the battery.") - inserted_battery = I - UpdateSprite() - else - return ..() - -/obj/item/anodevice/attack_self(var/mob/user as mob) - return src.interact(user) - -/obj/item/anodevice/interact(var/mob/user) - var/dat = "Anomalous Materials Energy Utiliser
                  " - if(inserted_battery) - if(activated) - dat += "Device active.
                  " - - dat += "[inserted_battery] inserted, anomaly ID: [(inserted_battery.battery_effect?.artifact_id) ? inserted_battery.battery_effect.artifact_id : "NA"]
                  " - dat += "Charge: [inserted_battery.stored_charge] / [inserted_battery.capacity]
                  " - dat += "Time left activated: [round(max((time_end - last_process) / 10, 0))]
                  " - if(activated) - dat += "Shutdown
                  " - else - dat += "Start
                  " - dat += "
                  " - - dat += "Activate duration (sec): -- - [duration/10] + ++
                  " - dat += "Activate interval (sec): -- - [interval/10] + ++
                  " - dat += "
                  " - dat += "Eject battery
                  " - else - dat += "Please insert battery
                  " - - dat += "
                  " - dat += "Close" - - var/datum/browser/popup = new(user, "anodevice", "Anomaly Power Utilizer", 400, 500) - popup.set_content(dat) - popup.open() - user.set_machine(src) - onclose(user, "anodevice") - -/obj/item/anodevice/Process() - updateSelfDialog() - if(activated) - if(inserted_battery && inserted_battery.battery_effect && (inserted_battery.stored_charge > 0) ) - //make sure the effect is active - if(!inserted_battery.battery_effect.activated) - inserted_battery.battery_effect.ToggleActivate(1) - - //update the effect loc - var/turf/T = get_turf(src) - if(T != archived_loc) - archived_loc = T - inserted_battery.battery_effect.UpdateMove() - - //if someone is holding the device, do the effect on them - var/mob/holder - if(ismob(src.loc)) - holder = src.loc - - //handle charge - if(world.time - last_activation > interval) - if(inserted_battery.battery_effect.effect == EFFECT_TOUCH) - if(interval > 0) - //apply the touch effect to the holder - if(holder) - to_chat(holder, "The [icon2html(src, holder)] [src] held by [holder] shudders in your grasp.") - else - src.loc.visible_message("The [icon2html(src, viewers(src.loc))] [src] shudders.") - inserted_battery.battery_effect.DoEffectTouch(holder) - - //consume power - inserted_battery.use_power(energy_consumed_on_touch) - else - //consume power equal to time passed - inserted_battery.use_power(world.time - last_process) - - else if(inserted_battery.battery_effect.effect == EFFECT_PULSE) - inserted_battery.battery_effect.chargelevel = inserted_battery.battery_effect.chargelevelmax - - //consume power relative to the time the artifact takes to charge and the effect range - inserted_battery.use_power(inserted_battery.battery_effect.effectrange * inserted_battery.battery_effect.effectrange * inserted_battery.battery_effect.chargelevelmax) - - else - //consume power equal to time passed - inserted_battery.use_power(world.time - last_process) - - last_activation = world.time - - //process the effect - inserted_battery.battery_effect.process() - - //work out if we need to shutdown - if(inserted_battery.stored_charge <= 0) - src.loc.visible_message("[icon2html(src, viewers(src.loc))] [src] buzzes.", "[icon2html(src, src.loc)] You hear something buzz.") - shutdown_emission() - else if(world.time > time_end) - src.loc.visible_message("[icon2html(src, viewers(src.loc))] [src] chimes.", "[icon2html(src, src.loc)] You hear something chime.") - shutdown_emission() - else - src.visible_message("[icon2html(src, viewers(get_turf(src)))] [src] buzzes.", "[icon2html(src, src)] You hear something buzz.") - shutdown_emission() - last_process = world.time - -/obj/item/anodevice/proc/shutdown_emission() - if(activated) - activated = 0 - if(inserted_battery.battery_effect.activated) - inserted_battery.battery_effect.ToggleActivate(1) - if(inserted_battery.stored_charge <= 0) - inserted_battery.battery_effect = null - -/obj/item/anodevice/Topic(user, href_list, state = GLOB.inventory_state) - ..() - -/obj/item/anodevice/OnTopic(user, href_list) - if(href_list["changetime"]) - var/timedif = text2num(href_list["changetime"]) - if(href_list["duration"]) - duration += timedif - //max 30 sec duration - duration = min(max(duration, 0), 300) - if(activated) - time_end += timedif - else if(href_list["interval"]) - interval += timedif - //max 10 sec interval - interval = min(max(interval, 0), 100) - . = TOPIC_REFRESH - else if(href_list["startup"]) - if(inserted_battery && inserted_battery.battery_effect && (inserted_battery.stored_charge > 0) ) - activated = 1 - last_process = world.time - src.visible_message("[icon2html(src, viewers(get_turf(src)))] [src] whirrs.", "[icon2html(src, src)] You hear something whirr.") - if(!inserted_battery.battery_effect.activated) - inserted_battery.battery_effect.ToggleActivate(1) - time_end = world.time + duration - . = TOPIC_REFRESH - else if(href_list["shutdown"]) - activated = 0 - . = TOPIC_REFRESH - else if(href_list["ejectbattery"]) - shutdown_emission() - inserted_battery.dropInto(loc) - inserted_battery = null - UpdateSprite() - . = TOPIC_REFRESH - if(href_list["close"]) - close_browser(user, "window=anodevice") - . = TOPIC_HANDLED - - if(. == TOPIC_REFRESH) - interact(user) - -/obj/item/anodevice/proc/UpdateSprite() - if(!inserted_battery) - icon_state = "anodev" - return - var/p = (inserted_battery.stored_charge/inserted_battery.capacity)*100 - p = min(p, 100) - icon_state = "anodev[round(p,25)]" - -/obj/item/anodevice/Destroy() - STOP_PROCESSING(SSobj, src) - ..() - -/obj/item/anodevice/attack(mob/living/M as mob, mob/living/user as mob, def_zone) - if (!istype(M)) - return - - if(activated && inserted_battery.battery_effect.effect == EFFECT_TOUCH && !isnull(inserted_battery)) - inserted_battery.battery_effect.DoEffectTouch(M) - inserted_battery.use_power(energy_consumed_on_touch) - user.visible_message("[user] taps [M] with [src], and it shudders on contact.") - else - user.visible_message("[user] taps [M] with [src], but nothing happens.") - - if(inserted_battery.battery_effect) - admin_attack_log(user, M, "Tapped their victim with \a [src] (EFFECT: [inserted_battery.battery_effect.name])", "Was tapped by \a [src] (EFFECT: [inserted_battery.battery_effect.name])", "used \a [src] (EFFECT: [inserted_battery.battery_effect.name]) to tap") diff --git a/code/modules/xenoarcheaology/tools/artifact_analyser.dm b/code/modules/xenoarcheaology/tools/artifact_analyser.dm deleted file mode 100644 index 7172fed408e0f..0000000000000 --- a/code/modules/xenoarcheaology/tools/artifact_analyser.dm +++ /dev/null @@ -1,161 +0,0 @@ -/obj/machinery/artifact_analyser - name = "Anomaly Analyser" - desc = "Studies the emissions of anomalous materials to discover their uses." - icon = 'icons/obj/xenoarchaeology.dmi' - icon_state = "xenoarch_console" - anchored = TRUE - density = TRUE - var/scan_in_progress = 0 - var/scan_num = 0 - var/obj/scanned_obj - var/obj/machinery/artifact_scanpad/owned_scanner = null - var/scan_completion_time = 0 - var/scan_duration = 50 - var/obj/scanned_object - var/report_num = 0 - -/obj/machinery/artifact_analyser/Initialize() - . = ..() - reconnect_scanner() - -/obj/machinery/artifact_analyser/proc/reconnect_scanner() - //connect to a nearby scanner pad - owned_scanner = locate(/obj/machinery/artifact_scanpad) in get_step(src, dir) - if(!owned_scanner) - owned_scanner = locate(/obj/machinery/artifact_scanpad) in orange(1, src) - -/obj/machinery/artifact_analyser/DefaultTopicState() - return GLOB.physical_state - -/obj/machinery/artifact_analyser/interface_interact(var/mob/user) - interact(user) - return TRUE - -/obj/machinery/artifact_analyser/interact(mob/user) - var/dat = "Anomalous material analyser
                  " - dat += "
                  " - if(!owned_scanner) - reconnect_scanner() - - if(!owned_scanner) - dat += "Unable to locate analysis pad.
                  " - else if(scan_in_progress) - dat += "Please wait. Analysis in progress.
                  " - dat += "Halt scanning.
                  " - else - dat += "Scanner is ready.
                  " - dat += "Begin scanning.
                  " - - dat += "
                  " - dat += "
                  " - dat += "Close" - var/datum/browser/popup = new(user, "artanalyser", "Artifact Analyzer", 450, 500) - popup.set_content(dat) - popup.open() - user.set_machine(src) - onclose(user, "artanalyser") - -/obj/machinery/artifact_analyser/Process() - if(scan_in_progress && world.time > scan_completion_time) - scan_in_progress = 0 - updateDialog() - - var/results = "" - if(!owned_scanner) - reconnect_scanner() - if(!owned_scanner) - results = "Error communicating with scanner." - else if(!scanned_object || scanned_object.loc != owned_scanner.loc) - results = "Unable to locate scanned object. Ensure it was not moved in the process." - else - results = get_scan_info(scanned_object) - - src.visible_message("[name] states, \"Scanning complete.\"") - var/obj/item/paper/P = new(src.loc) - P.SetName("[src] report #[++report_num]") - P.info = "[src] analysis report #[report_num]
                  " - P.info += "
                  " - P.info += "\icon[scanned_object] [results]" - P.stamped = list(/obj/item/stamp) - P.queue_icon_update() - - if(scanned_object && istype(scanned_object, /obj/machinery/artifact)) - var/obj/machinery/artifact/A = scanned_object - A.anchored = FALSE - A.being_used = 0 - scanned_object = null - -/obj/machinery/artifact_analyser/OnTopic(user, href_list) - if(href_list["begin_scan"]) - if(!owned_scanner) - reconnect_scanner() - if(owned_scanner) - var/artifact_in_use = 0 - for(var/obj/O in owned_scanner.loc) - if(O == owned_scanner) - continue - if(O.invisibility) - continue - if(istype(O, /obj/machinery/artifact)) - var/obj/machinery/artifact/A = O - if(A.being_used) - artifact_in_use = 1 - else - A.anchored = TRUE - A.being_used = 1 - - if(artifact_in_use) - src.visible_message("[name] states, \"Cannot scan. Too much interference.\"") - else - scanned_object = O - scan_in_progress = 1 - scan_completion_time = world.time + scan_duration - src.visible_message("[name] states, \"Scanning begun.\"") - break - if(!scanned_object) - src.visible_message("[name] states, \"Unable to isolate scan target.\"") - . = TOPIC_REFRESH - else if(href_list["halt_scan"]) - scan_in_progress = 0 - src.visible_message("[name] states, \"Scanning halted.\"") - . = TOPIC_REFRESH - - else if(href_list["close"]) - close_browser(user, "window=artanalyser") - return TOPIC_HANDLED - - if(. == TOPIC_REFRESH) - interact(user) - -//hardcoded responses, oh well -/obj/machinery/artifact_analyser/proc/get_scan_info(var/obj/scanned_obj) - switch(scanned_obj.type) - if(/obj/machinery/auto_cloner) - return "Automated cloning pod - appears to rely on an artificial ecosystem formed by semi-organic nanomachines and the contained liquid.
                  The liquid resembles protoplasmic residue supportive of unicellular organism developmental conditions.
                  The structure is composed of a titanium alloy." - if(/obj/machinery/power/supermatter) - return "Superdense phoron clump - appears to have been shaped or hewn, structure is composed of matter aproximately 20 times denser than ordinary refined phoron." - if(/obj/structure/constructshell) - return "Tribal idol - subject resembles statues/emblems built by superstitious pre-warp civilisations to honour their gods. Material appears to be a rock/plastcrete composite." - if(/obj/machinery/giga_drill) - return "Automated mining drill - structure composed of titanium-carbide alloy, with tip and drill lines edged in an alloy of diamond and phoron." - if(/obj/structure/cult/pylon) - return "Tribal pylon - subject resembles statues/emblems built by cargo cult civilisations to honour energy systems from post-warp civilisations." - if(/obj/machinery/replicator) - return "Automated construction unit - subject appears to be able to synthesize various objects given a material, some with simple internal circuitry. Method unknown." - if(/obj/machinery/artifact) - var/obj/machinery/artifact/A = scanned_obj - var/out = "Anomalous alien device - composed of an unknown alloy.

                  " - - if(A.my_effect) - out += A.my_effect.getDescription() - - if(A.secondary_effect) - out += "

                  Internal scans indicate ongoing secondary activity operating independently from primary systems.

                  " - out += A.secondary_effect.getDescription() - - if (A.damage_desc) - out += "

                  [A.damage_desc]" - - return out - else - return "[scanned_obj.name] - mundane application." diff --git a/code/modules/xenoarcheaology/tools/artifact_harvester.dm b/code/modules/xenoarcheaology/tools/artifact_harvester.dm deleted file mode 100644 index 6730113c0d787..0000000000000 --- a/code/modules/xenoarcheaology/tools/artifact_harvester.dm +++ /dev/null @@ -1,257 +0,0 @@ -/obj/machinery/artifact_harvester - name = "Exotic Particle Harvester" - icon = 'icons/obj/virology.dmi' - icon_state = "incubator" //incubator_on - anchored = TRUE - density = TRUE - idle_power_usage = 50 - active_power_usage = 750 - var/harvesting = 0 - var/obj/item/anobattery/inserted_battery - var/obj/machinery/artifact/cur_artifact - var/obj/machinery/artifact_scanpad/owned_scanner = null - var/last_process = 0 - -/obj/machinery/artifact_harvester/New() - ..() - //connect to a nearby scanner pad - owned_scanner = locate(/obj/machinery/artifact_scanpad) in get_step(src, dir) - if(!owned_scanner) - owned_scanner = locate(/obj/machinery/artifact_scanpad) in orange(1, src) - -/obj/machinery/artifact_harvester/attackby(var/obj/I as obj, var/mob/user as mob) - if(istype(I,/obj/item/anobattery)) - if(!inserted_battery) - if(!user.unEquip(I, src)) - return - to_chat(user, "You insert [I] into [src].") - src.inserted_battery = I - updateDialog() - else - to_chat(user, "There is already a battery in [src].") - else - return..() - -/obj/machinery/artifact_harvester/attack_hand(var/mob/user as mob) - ..() - interact(user) - -/obj/machinery/artifact_harvester/interact(var/mob/user as mob) - if(stat & (NOPOWER|BROKEN)) - return - user.set_machine(src) - var/dat = "Artifact Power Harvester
                  " - dat += "

                  " - // - if(owned_scanner) - if(harvesting) - if(harvesting > 0) - dat += "Please wait. Harvesting in progress ([round((inserted_battery.stored_charge/inserted_battery.capacity)*100)]%).
                  " - else - dat += "Please wait. Energy dump in progress ([round((inserted_battery.stored_charge/inserted_battery.capacity)*100)]%).
                  " - dat += "Halt early
                  " - else - if(inserted_battery) - dat += "[inserted_battery.name] inserted, charge level: [inserted_battery.stored_charge]/[inserted_battery.capacity] ([(inserted_battery.stored_charge/inserted_battery.capacity)*100]%)
                  " - dat += "Energy signature ID:[inserted_battery.battery_effect ? (inserted_battery.battery_effect.artifact_id == "" ? "???" : "[inserted_battery.battery_effect.artifact_id]") : "NA"]
                  " - dat += "Eject battery
                  " - dat += "Drain battery of all charge
                  " - dat += "Begin harvesting
                  " - - else - dat += "No battery inserted.
                  " - else - dat += "Unable to locate analysis pad.
                  " - dat += "Close
                  " - dat += "
                  " - var/datum/browser/popup = new(user, "artifact_harvester", "Artifact Power Harvester", 450, 500) - popup.set_content(dat) - popup.open() - -/obj/machinery/artifact_harvester/Process() - if(stat & (NOPOWER|BROKEN)) - return - - updateDialog() - if(harvesting > 0) - //charge at 33% consumption rate - inserted_battery.stored_charge += (world.time - last_process) / 3 - last_process = world.time - - //check if we've finished - if(inserted_battery.stored_charge >= inserted_battery.capacity) - update_use_power(POWER_USE_IDLE) - harvesting = 0 - cur_artifact.anchored = FALSE - cur_artifact.being_used = 0 - cur_artifact = null - src.visible_message("[name] states, \"Battery is full.\"") - icon_state = "incubator" - - else if(harvesting < 0) - //dump some charge - inserted_battery.stored_charge -= (world.time - last_process) / 3 - - //do the effect - if(inserted_battery.battery_effect) - inserted_battery.battery_effect.process() - - //if the effect works by touch, activate it on anyone viewing the console - if(inserted_battery.battery_effect.effect == EFFECT_TOUCH) - var/list/nearby = viewers(1, src) - for(var/mob/M in nearby) - if(M.machine == src) - inserted_battery.battery_effect.DoEffectTouch(M) - - //if there's no charge left, finish - if(inserted_battery.stored_charge <= 0) - update_use_power(POWER_USE_IDLE) - inserted_battery.stored_charge = 0 - harvesting = 0 - if(inserted_battery.battery_effect && inserted_battery.battery_effect.activated) - inserted_battery.battery_effect.ToggleActivate() - src.visible_message("[name] states, \"Battery dump completed.\"") - icon_state = "incubator" - -/obj/machinery/artifact_harvester/OnTopic(user, href_list) - if (href_list["harvest"]) - if(!inserted_battery) - src.visible_message("[src] states, \"Cannot harvest. No battery inserted.\"") - - else if(inserted_battery.stored_charge >= inserted_battery.capacity) - src.visible_message("[src] states, \"Cannot harvest. battery is full.\"") - - else - - //locate artifact on analysis pad - cur_artifact = null - var/articount = 0 - var/obj/machinery/artifact/analysed - for(var/obj/machinery/artifact/A in get_turf(owned_scanner)) - analysed = A - articount++ - - if(articount <= 0) - var/message = "[src] states, \"Cannot harvest. No noteworthy energy signature isolated.\"" - src.visible_message(message) - - else if(analysed && analysed.being_used) - src.visible_message("[src] states, \"Cannot harvest. Source already being harvested.\"") - - else - if(articount > 1) - state("Cannot harvest. Too many artifacts on the pad.") - else if(analysed) - cur_artifact = analysed - - //if both effects are active, we can't harvest either - if(cur_artifact.my_effect && cur_artifact.my_effect.activated && cur_artifact.secondary_effect && cur_artifact.secondary_effect.activated) - src.visible_message("[src] states, \"Cannot harvest. Source is emitting conflicting energy signatures.\"") - else if(!cur_artifact.my_effect.activated && !(cur_artifact.secondary_effect && cur_artifact.secondary_effect.activated)) - src.visible_message("[src] states, \"Cannot harvest. No energy emitting from source.\"") - - else - //see if we can clear out an old effect - //delete it when the ids match to account for duplicate ids having different effects - if(inserted_battery.battery_effect && inserted_battery.stored_charge <= 0) - qdel(inserted_battery.battery_effect) - return - - var/datum/artifact_effect/source_effect - - //if we already have charge in the battery, we can only recharge it from the source artifact - if(inserted_battery.stored_charge > 0) - var/battery_matches_primary_id = 0 - if(inserted_battery.battery_effect && inserted_battery.battery_effect.artifact_id == cur_artifact.my_effect.artifact_id) - battery_matches_primary_id = 1 - if(battery_matches_primary_id && cur_artifact.my_effect.activated) - //we're good to recharge the primary effect! - source_effect = cur_artifact.my_effect - - var/battery_matches_secondary_id = 0 - if(inserted_battery.battery_effect && inserted_battery.battery_effect.artifact_id == cur_artifact.secondary_effect.artifact_id) - battery_matches_secondary_id = 1 - if(battery_matches_secondary_id && cur_artifact.secondary_effect.activated) - //we're good to recharge the secondary effect! - source_effect = cur_artifact.secondary_effect - - if(!source_effect) - src.visible_message("[src] states, \"Cannot harvest. Battery is charged with a different energy signature.\"") - else - //we're good to charge either - if(cur_artifact.my_effect.activated) - //charge the primary effect - source_effect = cur_artifact.my_effect - - else if(cur_artifact.secondary_effect.activated) - //charge the secondary effect - source_effect = cur_artifact.secondary_effect - - - if(source_effect) - harvesting = 1 - update_use_power(POWER_USE_ACTIVE) - cur_artifact.anchored = TRUE - cur_artifact.being_used = 1 - icon_state = "incubator_on" - var/message = "[src] states, \"Beginning energy harvesting.\"" - src.visible_message(message) - last_process = world.time - - //duplicate the artifact's effect datum - if(!inserted_battery.battery_effect) - var/effecttype = source_effect.type - var/datum/artifact_effect/E = new effecttype(inserted_battery) - - //duplicate it's unique settings - for(var/varname in list("chargelevelmax","artifact_id","effect","effectrange","trigger")) - E.vars[varname] = source_effect.vars[varname] - - //copy the new datum into the battery - inserted_battery.battery_effect = E - inserted_battery.stored_charge = 0 - . = TOPIC_REFRESH - - else if (href_list["stopharvest"]) - if(harvesting) - if(harvesting < 0 && inserted_battery.battery_effect && inserted_battery.battery_effect.activated) - inserted_battery.battery_effect.ToggleActivate() - harvesting = 0 - cur_artifact.anchored = FALSE - cur_artifact.being_used = 0 - cur_artifact = null - src.visible_message("[name] states, \"Energy harvesting interrupted.\"") - icon_state = "incubator" - . = TOPIC_REFRESH - - else if (href_list["ejectbattery"]) - src.inserted_battery.dropInto(loc) - src.inserted_battery = null - . = TOPIC_REFRESH - - else if (href_list["drainbattery"]) - if(inserted_battery) - if(inserted_battery.battery_effect && inserted_battery.stored_charge > 0) - if(alert("This action will dump all charge, safety gear is recommended before proceeding","Warning","Continue","Cancel")) - if(!inserted_battery.battery_effect.activated) - inserted_battery.battery_effect.ToggleActivate(1) - last_process = world.time - harvesting = -1 - update_use_power(POWER_USE_ACTIVE) - icon_state = "incubator_on" - var/message = "[src] states, \"Warning, battery charge dump commencing.\"" - src.visible_message(message) - else - var/message = "[src] states, \"Cannot dump energy. Battery is drained of charge already.\"" - src.visible_message(message) - else - var/message = "[src] states, \"Cannot dump energy. No battery inserted.\"" - src.visible_message(message) - . = TOPIC_REFRESH - - else if(href_list["close"]) - close_browser(user, "window=artharvester") - return TOPIC_HANDLED - - if(. == TOPIC_REFRESH) - interact(user) diff --git a/code/modules/xenoarcheaology/tools/artifact_scanner.dm b/code/modules/xenoarcheaology/tools/artifact_scanner.dm deleted file mode 100644 index e8ff15533fb2f..0000000000000 --- a/code/modules/xenoarcheaology/tools/artifact_scanner.dm +++ /dev/null @@ -1,7 +0,0 @@ -/obj/machinery/artifact_scanpad - name = "Anomaly Scanner Pad" - desc = "Place things here for scanning." - icon = 'icons/obj/xenoarchaeology.dmi' - icon_state = "xenoarch_scanner" - anchored = TRUE - density = FALSE diff --git a/code/modules/xenoarcheaology/tools/coolant_tank.dm b/code/modules/xenoarcheaology/tools/coolant_tank.dm deleted file mode 100644 index bd5f2e721ad13..0000000000000 --- a/code/modules/xenoarcheaology/tools/coolant_tank.dm +++ /dev/null @@ -1,34 +0,0 @@ -/obj/structure/reagent_dispensers/coolanttank - name = "coolant tank" - desc = "A tank of industrial coolant." - icon = 'icons/obj/objects.dmi' - icon_state = "coolanttank" - initial_capacity = 10000 - amount_per_transfer_from_this = 10 - -/obj/structure/reagent_dispensers/coolanttank/New() - ..() - reagents.add_reagent(/datum/reagent/coolant, 10000) - -/obj/structure/reagent_dispensers/coolanttank/bullet_act(var/obj/item/projectile/Proj) - if(Proj.get_structure_damage()) - explode() - -/obj/structure/reagent_dispensers/coolanttank/ex_act() - explode() - -/obj/structure/reagent_dispensers/coolanttank/proc/explode() - var/datum/effect/effect/system/smoke_spread/S = new /datum/effect/effect/system/smoke_spread - S.set_up(5, 0, src.loc) - - playsound(src.loc, 'sound/effects/smoke.ogg', 50, 1, -3) - spawn(0) - S.start() - - var/datum/gas_mixture/env = src.loc.return_air() - if(env) - env.add_thermal_energy(reagents.total_volume * -10000) - - sleep(10) - if(src) - qdel(src) diff --git a/code/modules/xenoarcheaology/tools/equipment.dm b/code/modules/xenoarcheaology/tools/equipment.dm deleted file mode 100644 index 72a0f782f098a..0000000000000 --- a/code/modules/xenoarcheaology/tools/equipment.dm +++ /dev/null @@ -1,85 +0,0 @@ -/obj/item/clothing/suit/bio_suit/anomaly - name = "anomaly suit" - desc = "A suit that protects against exotic alien energies and biological contamination." - icon_state = "bio_anom" - item_state_slots = list( - slot_l_hand_str = "bio_anom", - slot_r_hand_str = "bio_anom", - ) - -/obj/item/clothing/head/bio_hood/anomaly - name = "anomaly hood" - desc = "A hood that protects the head and face from exotic alien energies and biological contamination." - icon_state = "bio_anom_hood" - item_state_slots = list( - slot_l_hand_str = "bio_anom_hood", - slot_r_hand_str = "bio_anom_hood", - ) - -/obj/item/clothing/suit/space/void/excavation - name = "excavation voidsuit" - desc = "A specially shielded voidsuit that insulates against some exotic alien energies, as well as the more mundane dangers of excavation." - icon_state = "rig-excavation" - item_state_slots = list( - slot_l_hand_str = "excavation_voidsuit", - slot_r_hand_str = "excavation_voidsuit", - ) - armor = list( - melee = ARMOR_MELEE_RESISTANT, - energy = ARMOR_ENERGY_RESISTANT, - bomb = ARMOR_BOMB_PADDED, - bio = ARMOR_BIO_SHIELDED, - rad = ARMOR_RAD_SHIELDED - ) - allowed = list(/obj/item/device/flashlight,/obj/item/tank,/obj/item/device/suit_cooling_unit,/obj/item/stack/flag,/obj/item/storage/excavation,/obj/item/pickaxe,/obj/item/device/scanner/health,/obj/item/device/measuring_tape,/obj/item/device/ano_scanner,/obj/item/device/depth_scanner,/obj/item/device/core_sampler,/obj/item/device/gps,/obj/item/pinpointer/radio,/obj/item/pickaxe/xeno,/obj/item/storage/bag/fossils) - -/obj/item/clothing/head/helmet/space/void/excavation - name = "excavation voidsuit helmet" - desc = "A sophisticated voidsuit helmet, capable of protecting the wearer from many exotic alien energies." - icon_state = "rig0-excavation" - item_state = "excavation-helm" - item_state_slots = list( - slot_l_hand_str = "excavation_helm", - slot_r_hand_str = "excavation_helm", - ) - armor = list( - melee = ARMOR_MELEE_RESISTANT, - energy = ARMOR_ENERGY_RESISTANT, - bomb = ARMOR_BOMB_PADDED, - bio = ARMOR_BIO_SHIELDED, - rad = ARMOR_RAD_SHIELDED - ) - light_overlay = "helmet_light_alt" - -/obj/item/clothing/suit/space/void/excavation/prepared - helmet = /obj/item/clothing/head/helmet/space/void/excavation - -/obj/item/storage/belt/archaeology - name = "excavation gear-belt" - desc = "Can hold various excavation gear." - icon_state = "gearbelt" - item_state = ACCESSORY_SLOT_UTILITY - can_hold = list( - /obj/item/storage/box/samplebags, - /obj/item/device/core_sampler, - /obj/item/pinpointer/radio, - /obj/item/device/gps, - /obj/item/device/measuring_tape, - /obj/item/device/flashlight, - /obj/item/pickaxe, - /obj/item/device/depth_scanner, - /obj/item/device/camera, - /obj/item/paper, - /obj/item/photo, - /obj/item/folder, - /obj/item/pen, - /obj/item/folder, - /obj/item/material/clipboard, - /obj/item/anodevice, - /obj/item/clothing/glasses, - /obj/item/wrench, - /obj/item/storage/excavation, - /obj/item/anobattery, - /obj/item/device/ano_scanner, - /obj/item/taperoll, - /obj/item/pickaxe/xeno/hand) diff --git a/code/modules/xenoarcheaology/tools/geosample_scanner.dm b/code/modules/xenoarcheaology/tools/geosample_scanner.dm deleted file mode 100644 index d3eebf12d4aef..0000000000000 --- a/code/modules/xenoarcheaology/tools/geosample_scanner.dm +++ /dev/null @@ -1,362 +0,0 @@ -/obj/machinery/radiocarbon_spectrometer - name = "radiocarbon spectrometer" - desc = "A specialised, complex scanner for gleaning information on all manner of small things." - anchored = TRUE - density = TRUE - atom_flags = ATOM_FLAG_OPEN_CONTAINER - icon = 'icons/obj/virology.dmi' - icon_state = "analyser" - - idle_power_usage = 20 - active_power_usage = 300 - - //var/obj/item/reagent_containers/glass/coolant_container - var/scanning = 0 - var/report_num = 0 - // - var/obj/item/scanned_item - var/last_scan_data = "No scans on record." - // - var/last_process_worldtime = 0 - // - var/scanner_progress = 0 - var/scanner_rate = 1.25 //80 seconds per scan - var/scanner_rpm = 0 - var/scanner_rpm_dir = 1 - var/scanner_temperature = 0 - var/scanner_seal_integrity = 100 - // - var/coolant_usage_rate = 0 //measured in u/microsec - var/fresh_coolant = 0 - var/coolant_purity = 0 - var/datum/reagents/coolant_reagents - var/used_coolant = 0 - var/list/coolant_reagents_purity = list() - // - var/maser_wavelength = 0 - var/optimal_wavelength = 0 - var/optimal_wavelength_target = 0 - var/tleft_retarget_optimal_wavelength = 0 - var/maser_efficiency = 0 - // - var/radiation = 0 //0-100 mSv - var/t_left_radspike = 0 - var/rad_shield = 0 - -/obj/machinery/radiocarbon_spectrometer/New() - ..() - create_reagents(500) - coolant_reagents_purity[/datum/reagent/water] = 0.5 - coolant_reagents_purity[/datum/reagent/drink/coffee/icecoffee] = 0.6 - coolant_reagents_purity[/datum/reagent/drink/tea/icetea] = 0.6 - coolant_reagents_purity[/datum/reagent/drink/milkshake] = 0.6 - coolant_reagents_purity[/datum/reagent/leporazine] = 0.7 - coolant_reagents_purity[/datum/reagent/kelotane] = 0.7 - coolant_reagents_purity[/datum/reagent/sterilizine] = 0.7 - coolant_reagents_purity[/datum/reagent/dermaline] = 0.7 - coolant_reagents_purity[/datum/reagent/hyperzine] = 0.8 - coolant_reagents_purity[/datum/reagent/cryoxadone] = 0.9 - coolant_reagents_purity[/datum/reagent/coolant] = 1 - coolant_reagents_purity[/datum/reagent/adminordrazine] = 2 - -/obj/machinery/radiocarbon_spectrometer/interface_interact(var/mob/user) - ui_interact(user) - return TRUE - -/obj/machinery/radiocarbon_spectrometer/attackby(var/obj/I as obj, var/mob/user as mob) - if(scanning) - to_chat(user, "You can't do that while [src] is scanning!") - else - if(istype(I, /obj/item/stack/nanopaste)) - var/choice = alert("What do you want to do with the nanopaste?","Radiometric Scanner","Scan nanopaste","Fix seal integrity") - if(choice == "Fix seal integrity") - var/obj/item/stack/nanopaste/N = I - var/amount_used = min(N.get_amount(), 10 - scanner_seal_integrity / 10) - N.use(amount_used) - scanner_seal_integrity = round(scanner_seal_integrity + amount_used * 10) - return - if(istype(I, /obj/item/reagent_containers/glass)) - var/choice = alert("What do you want to do with the container?","Radiometric Scanner","Add coolant","Empty coolant","Scan container") - if(choice == "Add coolant") - var/obj/item/reagent_containers/glass/G = I - var/amount_transferred = min(src.reagents.maximum_volume - src.reagents.total_volume, G.reagents.total_volume) - G.reagents.trans_to(src, amount_transferred) - to_chat(user, "You empty [amount_transferred]u of coolant into [src].") - update_coolant() - return - else if(choice == "Empty coolant") - var/obj/item/reagent_containers/glass/G = I - var/amount_transferred = min(G.reagents.maximum_volume - G.reagents.total_volume, src.reagents.total_volume) - src.reagents.trans_to(G, amount_transferred) - to_chat(user, "You remove [amount_transferred]u of coolant from [src].") - update_coolant() - return - if(scanned_item) - to_chat(user, "\The [src] already has \a [scanned_item] inside!") - return - if(!user.unEquip(I, src)) - return - scanned_item = I - to_chat(user, "You put \the [I] into \the [src].") - -/obj/machinery/radiocarbon_spectrometer/proc/update_coolant() - var/total_purity = 0 - fresh_coolant = 0 - coolant_purity = 0 - var/num_reagent_types = 0 - for (var/datum/reagent/current_reagent in src.reagents.reagent_list) - if (!current_reagent) - continue - var/cur_purity = coolant_reagents_purity[current_reagent.type] - if(!cur_purity) - cur_purity = 0.1 - else if(cur_purity > 1) - cur_purity = 1 - total_purity += cur_purity * current_reagent.volume - fresh_coolant += current_reagent.volume - num_reagent_types += 1 - if(total_purity && fresh_coolant) - coolant_purity = total_purity / fresh_coolant - -/obj/machinery/radiocarbon_spectrometer/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1) - - if(user.stat) - return - - // this is the data which will be sent to the ui - var/data[0] - data["scanned_item"] = (scanned_item ? scanned_item.name : "") - data["scanned_item_desc"] = (scanned_item ? (scanned_item.desc ? scanned_item.desc : "No information on record.") : "") - data["last_scan_data"] = last_scan_data - // - data["scan_progress"] = round(scanner_progress) - data["scanning"] = scanning - // - data["scanner_seal_integrity"] = round(scanner_seal_integrity) - data["scanner_rpm"] = round(scanner_rpm) - data["scanner_temperature"] = round(scanner_temperature) - // - data["coolant_usage_rate"] = "[coolant_usage_rate]" - data["unused_coolant_abs"] = round(fresh_coolant) - data["unused_coolant_per"] = round(fresh_coolant / reagents.maximum_volume * 100) - data["coolant_purity"] = "[coolant_purity * 100]" - // - data["optimal_wavelength"] = round(optimal_wavelength) - data["maser_wavelength"] = round(maser_wavelength) - data["maser_efficiency"] = round(maser_efficiency * 100) - // - data["radiation"] = round(radiation) - data["t_left_radspike"] = round(t_left_radspike) - data["rad_shield_on"] = rad_shield - - // update the ui if it exists, returns null if no ui is passed/found - ui = SSnano.try_update_ui(user, src, ui_key, ui, data, force_open) - if (!ui) - // the ui does not exist, so we'll create a new() one - // for a list of parameters and their descriptions see the code docs in \code\modules\nano\nanoui.dm - ui = new(user, src, ui_key, "geoscanner.tmpl", "High Res Radiocarbon Spectrometer", 900, 825) - // when the ui is first opened this is the data it will use - ui.set_initial_data(data) - // open the new ui window - ui.open() - // auto update every Master Controller tick - ui.set_auto_update(1) - -/obj/machinery/radiocarbon_spectrometer/Process() - if(scanning) - if(!scanned_item || scanned_item.loc != src) - scanned_item = null - stop_scanning() - else if(scanner_progress >= 100) - complete_scan() - else - //calculate time difference - var/deltaT = (world.time - last_process_worldtime) * 0.1 - - //modify the RPM over time - //i want 1u to last for 10 sec at 500 RPM, scaling linearly - scanner_rpm += scanner_rpm_dir * 50 * deltaT - if(scanner_rpm > 1000) - scanner_rpm = 1000 - scanner_rpm_dir = -1 * pick(0.5, 2.5, 5.5) - else if(scanner_rpm < 1) - scanner_rpm = 1 - scanner_rpm_dir = 1 * pick(0.5, 2.5, 5.5) - - //heat up according to RPM - //each unit of coolant - scanner_temperature += scanner_rpm * deltaT * 0.05 - - //radiation - t_left_radspike -= deltaT - if(t_left_radspike > 0) - //ordinary radiation - radiation = rand() * 15 - else - //radspike - if(t_left_radspike > -5) - radiation = rand() * 15 + 85 - if(!rad_shield) - //irradiate nearby mobs - SSradiation.radiate(src, radiation / 12.5) - else - t_left_radspike = pick(10,15,25) - - //use some coolant to cool down - if(coolant_usage_rate > 0) - var/coolant_used = min(fresh_coolant, coolant_usage_rate * deltaT) - if(coolant_used > 0) - fresh_coolant -= coolant_used - used_coolant += coolant_used - scanner_temperature = max(scanner_temperature - coolant_used * coolant_purity * 20, 0) - - //modify the optimal wavelength - tleft_retarget_optimal_wavelength -= deltaT - if(tleft_retarget_optimal_wavelength <= 0) - tleft_retarget_optimal_wavelength = pick(4,8,15) - optimal_wavelength_target = rand() * 9900 + 100 - // - if(optimal_wavelength < optimal_wavelength_target) - optimal_wavelength = min(optimal_wavelength + 700 * deltaT, optimal_wavelength_target) - else if(optimal_wavelength > optimal_wavelength_target) - optimal_wavelength = max(optimal_wavelength - 700 * deltaT, optimal_wavelength_target) - // - maser_efficiency = 1 - max(min(10000, abs(optimal_wavelength - maser_wavelength) * 3), 1) / 10000 - - //make some scan progress - if(!rad_shield) - scanner_progress = min(100, scanner_progress + scanner_rate * maser_efficiency * deltaT) - - //degrade the seal over time according to temperature - //i want temperature of 50K to degrade at 1%/sec - scanner_seal_integrity -= (max(scanner_temperature, 1) / 1000) * deltaT - - //emergency stop if seal integrity reaches 0 - if(scanner_seal_integrity <= 0 || (scanner_temperature >= 1273 && !rad_shield)) - stop_scanning() - src.visible_message("[icon2html(src, viewers(get_turf(src)))] buzzes unhappily. It has failed mid-scan!", 2) - - if(prob(5)) - src.visible_message("[icon2html(src, viewers(get_turf(src)))] [pick("whirrs","chuffs","clicks")][pick(" excitedly"," energetically"," busily")].", 2) - else - //gradually cool down over time - if(scanner_temperature > 0) - scanner_temperature = max(scanner_temperature - 5 - 10 * rand(), 0) - if(prob(0.75)) - src.visible_message("[icon2html(src, viewers(get_turf(src)))] [pick("plinks","hisses")][pick(" quietly"," softly"," sadly"," plaintively")].", 2) - last_process_worldtime = world.time - -/obj/machinery/radiocarbon_spectrometer/proc/stop_scanning() - scanning = 0 - scanner_rpm_dir = 1 - scanner_rpm = 0 - optimal_wavelength = 0 - maser_efficiency = 0 - maser_wavelength = 0 - coolant_usage_rate = 0 - radiation = 0 - t_left_radspike = 0 - if(used_coolant) - src.reagents.remove_any(used_coolant) - used_coolant = 0 - -/obj/machinery/radiocarbon_spectrometer/proc/complete_scan() - src.visible_message("[icon2html(src, viewers(get_turf(src)))] makes an insistent chime.", 2) - - if(scanned_item) - //create report - var/obj/item/paper/P = new(src) - P.SetName("[src] report #[++report_num]: [scanned_item.name]") - P.stamped = list(/obj/item/stamp) - P.queue_icon_update() - - //work out data - var/data = " - Mundane object: [scanned_item.desc ? scanned_item.desc : "No information on record."]
                  " - var/datum/geosample/G - switch(scanned_item.type) - if(/obj/item/ore) - var/obj/item/ore/O = scanned_item - if(O.geologic_data) - G = O.geologic_data - - if(/obj/item/rocksliver) - var/obj/item/rocksliver/O = scanned_item - if(O.geological_data) - G = O.geological_data - - if(/obj/item/archaeological_find) - data = " - Mundane object (archaic xenos origins)
                  " - - var/obj/item/archaeological_find/A = scanned_item - if(A.talking_atom) - data = " - Exhibits properties consistent with sonic reproduction and audio capture technologies.
                  " - - var/anom_found = 0 - if(G) - data = " - Spectometric analysis on mineral sample has determined type [finds_as_strings[responsive_carriers.Find(G.source_mineral)]]
                  " - if(G.age_billion > 0) - data += " - Radiometric dating shows age of [G.age_billion].[G.age_million] billion years
                  " - else if(G.age_million > 0) - data += " - Radiometric dating shows age of [G.age_million].[G.age_thousand] million years
                  " - else - data += " - Radiometric dating shows age of [G.age_thousand * 1000 + G.age] years
                  " - data += " - Chromatographic analysis shows the following materials present:
                  " - for(var/carrier in G.find_presence) - if(G.find_presence[carrier]) - var/index = responsive_carriers.Find(carrier) - if(index > 0 && index <= finds_as_strings.len) - data += " > [100 * G.find_presence[carrier]]% [finds_as_strings[index]]
                  " - - if(G.artifact_id && G.artifact_distance >= 0) - anom_found = 1 - data += " - Hyperspectral imaging reveals exotic energy wavelength detected with ID: [G.artifact_id]
                  " - data += " - Fourier transform analysis on anomalous energy absorption indicates energy source located inside emission radius of [G.artifact_distance]m
                  " - - if(!anom_found) - data += " - No anomalous data
                  " - - P.info = "[src] analysis report #[report_num]
                  " - P.info += "Scanned item: [scanned_item.name]

                  " + data - last_scan_data = P.info - P.dropInto(loc) - - scanned_item.dropInto(loc) - scanned_item = null - -/obj/machinery/radiocarbon_spectrometer/OnTopic(user, href_list) - if(href_list["scanItem"]) - if(scanning) - stop_scanning() - else - if(scanned_item) - if(scanner_seal_integrity > 0) - scanner_progress = 0 - scanning = 1 - t_left_radspike = pick(5,10,15) - to_chat(user, "Scan initiated.") - else - to_chat(user, "Could not initiate scan, seal requires replacing.") - else - to_chat(user, "Insert an item to scan.") - . = TOPIC_REFRESH - - else if(href_list["maserWavelength"]) - maser_wavelength = max(min(maser_wavelength + 1000 * text2num(href_list["maserWavelength"]), 10000), 1) - . = TOPIC_REFRESH - - else if(href_list["coolantRate"]) - coolant_usage_rate = max(min(coolant_usage_rate + text2num(href_list["coolantRate"]), 10000), 0) - . = TOPIC_REFRESH - - else if(href_list["toggle_rad_shield"]) - if(rad_shield) - rad_shield = 0 - else - rad_shield = 1 - . = TOPIC_REFRESH - - else if(href_list["ejectItem"]) - if(scanned_item) - scanned_item.dropInto(loc) - scanned_item = null - . = TOPIC_REFRESH diff --git a/code/modules/xenoarcheaology/tools/suspension_generator.dm b/code/modules/xenoarcheaology/tools/suspension_generator.dm deleted file mode 100644 index 37fb3a23f03c7..0000000000000 --- a/code/modules/xenoarcheaology/tools/suspension_generator.dm +++ /dev/null @@ -1,183 +0,0 @@ -/obj/machinery/suspension_gen - name = "suspension field generator" - desc = "It has stubby legs bolted up against it's body for stabilising." - icon = 'icons/obj/xenoarchaeology.dmi' - icon_state = "suspension2" - density = TRUE - construct_state = /decl/machine_construction/default/panel_closed - uncreated_component_parts = null - stat_immune = 0 - active_power_usage = 5 KILOWATTS - machine_name = "suspension generator" - machine_desc = "Projects a pacifying energy field, used to hold xenofauna (among other things) for safe study." - var/obj/effect/suspension_field/suspension_field - -/obj/machinery/suspension_gen/Process() - if(suspension_field) - updateDialog() - if(stat & NOPOWER) - deactivate() - return - - var/turf/T = get_turf(suspension_field) - var/victims = 0 - for(var/mob/living/M in T) - M.weakened = max(M.weakened, 3) - victims++ - if(prob(5)) - to_chat(M, "[pick("You feel tingly","You feel like floating","It is hard to speak","You can barely move")].") - if(victims) - use_power_oneoff(active_power_usage * victims) - - for(var/obj/item/I in T) - if(!suspension_field.contents.len) - suspension_field.icon_state = "energynet" - suspension_field.overlays += "shield2" - I.forceMove(suspension_field) - -/obj/machinery/suspension_gen/interact(var/mob/user) - user.set_machine(src) - var/dat = "Multi-phase mobile suspension field generator MK II \"Steadfast\"
                  " - var/obj/item/cell/cell = get_cell() - if(cell) - var/colour = "red" - var/percent = cell.percent() - if(percent > 66) - colour = "green" - else if(percent > 33) - colour = "orange" - dat += "Energy cell: [percent]%
                  " - else - dat += "Energy cell: None
                  " - dat += "[suspension_field ? "Disable" : "Enable"] field
                  " - dat += "
                  " - dat += "
                  " - dat += "Always wear safety gear and consult a field manual before operation.
                  " - dat += "Close console" - var/datum/browser/popup = new(user, "suspension", "Suspension Generator", 500, 400) - popup.set_content(dat) - popup.open() - onclose(user, "suspension") - -/obj/machinery/suspension_gen/OnTopic(var/mob/user, href_list) - if(href_list["toggle_field"]) - if(!suspension_field) - var/obj/item/cell/cell = get_cell() - if(cell.charge > 0) - if(anchored) - activate() - else - to_chat(user, "You are unable to activate [src] until it is properly secured on the ground.") - else - deactivate() - . = TOPIC_REFRESH - else if(href_list["close"]) - close_browser(user, "window=suspension") - return TOPIC_HANDLED - - if(. == TOPIC_REFRESH) - interact(user) - -/obj/machinery/suspension_gen/interface_interact(var/mob/user) - interact(user) - return TRUE - -/obj/machinery/suspension_gen/components_are_accessible(path) - return !suspension_field && ..() - -/obj/machinery/suspension_gen/cannot_transition_to(state_path) - if(suspension_field) - return SPAN_NOTICE("Turn \the [src] off first.") - return ..() - -/obj/machinery/suspension_gen/attackby(obj/item/W, mob/user) - if(component_attackby(W, user)) - return TRUE - else if(isWrench(W)) - if(!suspension_field) - anchored = !anchored - to_chat(user, "You wrench the stabilising legs [anchored ? "into place" : "up against the body"].") - if(anchored) - desc = "It is resting securely on four stubby legs." - else - desc = "It has stubby legs bolted up against it's body for stabilising." - else - to_chat(user, "You are unable to secure [src] while it is active!") - -//checks for whether the machine can be activated or not should already have occurred by this point -/obj/machinery/suspension_gen/proc/activate() - var/turf/T = get_turf(get_step(src,dir)) - var/collected = 0 - - for(var/mob/living/M in T) - M.weakened += 5 - M.visible_message("[icon2html(M, viewers(get_turf(M)))] [M] begins to float in the air!","You feel tingly and light, but it is difficult to move.") - - suspension_field = new(T) - src.visible_message("[icon2html(src, viewers(get_turf(src)))] [src] activates with a low hum.") - icon_state = "suspension3" - - for(var/obj/item/I in T) - I.forceMove(suspension_field) - collected++ - - if(collected) - suspension_field.icon_state = "energynet" - suspension_field.overlays += "shield2" - src.visible_message("[icon2html(suspension_field, viewers(get_turf(src)))] [suspension_field] gently absconds [collected > 1 ? "something" : "several things"].") - else - if(istype(T,/turf/simulated/mineral) || istype(T,/turf/simulated/wall)) - suspension_field.icon_state = "shieldsparkles" - else - suspension_field.icon_state = "shield2" - update_use_power(POWER_USE_ACTIVE) - -/obj/machinery/suspension_gen/proc/deactivate() - set waitfor = FALSE - //drop anything we picked up - var/turf/T = get_turf(suspension_field) - - for(var/mob/living/M in T) - to_chat(M, "You no longer feel like floating.") - M.weakened = min(M.weakened, 3) - - src.visible_message("[icon2html(src, viewers(get_turf(src)))] [src] deactivates with a gentle shudder.") - qdel(suspension_field) - suspension_field = null - icon_state = "suspension2" - update_use_power(POWER_USE_IDLE) - -/obj/machinery/suspension_gen/Destroy() - deactivate() - return ..() - -/obj/machinery/suspension_gen/verb/rotate_ccw() - set src in view(1) - set name = "Rotate suspension gen (counter-clockwise)" - set category = "Object" - - if(anchored) - to_chat(usr, "You cannot rotate [src], it has been firmly fixed to the floor.") - else - set_dir(turn(dir, 90)) - -/obj/machinery/suspension_gen/verb/rotate_cw() - set src in view(1) - set name = "Rotate suspension gen (clockwise)" - set category = "Object" - - if(anchored) - to_chat(usr, "You cannot rotate [src], it has been firmly fixed to the floor.") - else - set_dir(turn(dir, -90)) - -/obj/effect/suspension_field - name = "energy field" - icon = 'icons/effects/effects.dmi' - anchored = TRUE - density = TRUE - -/obj/effect/suspension_field/Destroy() - for(var/atom/movable/I in src) - I.dropInto(loc) - return ..() diff --git a/code/modules/xenoarcheaology/tools/tools.dm b/code/modules/xenoarcheaology/tools/tools.dm deleted file mode 100644 index 7884ad6e5e2a8..0000000000000 --- a/code/modules/xenoarcheaology/tools/tools.dm +++ /dev/null @@ -1,275 +0,0 @@ -/obj/item/device/measuring_tape - name = "measuring tape" - desc = "A coiled metallic tape used to check dimensions and lengths." - icon = 'icons/obj/xenoarchaeology.dmi' - icon_state = "measuring" - origin_tech = list(TECH_MATERIAL = 1) - matter = list(MATERIAL_STEEL = 100) - w_class = ITEM_SIZE_SMALL - -/obj/item/storage/bag/fossils - name = "fossil satchel" - desc = "Transports delicate fossils in suspension so they don't break during transit." - icon = 'icons/obj/mining.dmi' - icon_state = "satchel" - slot_flags = SLOT_BELT | SLOT_POCKET - w_class = ITEM_SIZE_NORMAL - storage_slots = 50 - max_storage_space = 200 - max_w_class = ITEM_SIZE_NORMAL - can_hold = list(/obj/item/fossil) - -/obj/item/storage/box/samplebags - name = "sample bag box" - desc = "A box claiming to contain sample bags." - -/obj/item/storage/box/samplebags/New() - ..() - for(var/i = 1 to 7) - var/obj/item/evidencebag/S = new(src) - S.SetName("sample bag") - S.desc = "a bag for holding research samples." - -/obj/item/device/ano_scanner - name = "\improper Alden-Saraspova counter" - desc = "A device which aids in triangulation of exotic particles." - icon = 'icons/obj/xenoarchaeology.dmi' - icon_state = "flashgun" - item_state = "lampgreen" - origin_tech = list(TECH_BLUESPACE = 3, TECH_MAGNET = 3) - matter = list(MATERIAL_STEEL = 5000, MATERIAL_ALUMINIUM = 5000, MATERIAL_GLASS = 5000) - w_class = ITEM_SIZE_SMALL - slot_flags = SLOT_BELT - - var/last_scan_time = 0 - var/scan_delay = 25 - -/obj/item/device/ano_scanner/attack_self(var/mob/living/user) - interact(user) - -/obj/item/device/ano_scanner/interact(var/mob/living/user) - if(world.time - last_scan_time >= scan_delay) - last_scan_time = world.time - - var/nearestTargetDist = -1 - var/nearestTargetId - - var/nearestSimpleTargetDist = -1 - var/turf/cur_turf = get_turf(src) - - for (var/turf/simulated/mineral/T as anything in GLOB.xeno_artifact_turfs) - if(T.density && T.artifact_find) - if(T.z == cur_turf.z) - var/cur_dist = get_dist(cur_turf, T) * 2 - if(nearestTargetDist < 0 || cur_dist < nearestTargetDist) - nearestTargetDist = cur_dist + rand() * 2 - 1 - nearestTargetId = T.artifact_find.artifact_id - else - GLOB.xeno_artifact_turfs -= T - - for(var/turf/simulated/mineral/T as anything in GLOB.xeno_digsite_turfs) - if(T.density && T.finds && T.finds.len) - if(T.z == cur_turf.z) - var/cur_dist = get_dist(cur_turf, T) * 2 - if(nearestSimpleTargetDist < 0 || cur_dist < nearestSimpleTargetDist) - nearestSimpleTargetDist = cur_dist + rand() * 2 - 1 - else - GLOB.xeno_digsite_turfs -= T - - if(nearestTargetDist >= 0) - to_chat(user, "Exotic energy detected on wavelength '[nearestTargetId]' in a radius of [nearestTargetDist]m[nearestSimpleTargetDist > 0 ? "; small anomaly detected in a radius of [nearestSimpleTargetDist]m" : ""]") - else if(nearestSimpleTargetDist >= 0) - to_chat(user, "Small anomaly detected in a radius of [nearestSimpleTargetDist]m.") - else - to_chat(user, "Background radiation levels detected.") - else - to_chat(user, "Scanning array is recharging.") - -/obj/item/device/depth_scanner - name = "depth analysis scanner" - desc = "A device used to check spatial depth and density of rock outcroppings." - icon = 'icons/obj/pda.dmi' - icon_state = "crap" - item_state = "analyzer" - origin_tech = list(TECH_MAGNET = 2, TECH_ENGINEERING = 2, TECH_BLUESPACE = 2) - matter = list(MATERIAL_STEEL = 1000, MATERIAL_GLASS = 500, MATERIAL_ALUMINIUM = 150) - w_class = ITEM_SIZE_SMALL - slot_flags = SLOT_BELT - var/list/positive_locations = list() - var/datum/depth_scan/current - -/datum/depth_scan - var/time = "" - var/coords = "" - var/depth = "" - var/clearance = 0 - var/record_index = 1 - var/dissonance_spread = 1 - var/material = "unknown" - -/obj/item/device/depth_scanner/proc/scan_atom(var/mob/user, var/atom/A) - user.visible_message("\The [user] scans \the [A], the air around them humming gently.") - - if(istype(A, /turf/simulated/mineral)) - var/turf/simulated/mineral/M = A - if((M.finds && M.finds.len) || M.artifact_find) - - //create a new scanlog entry - var/datum/depth_scan/D = new() - D.coords = "[M.x]:[M.y]:[M.z]" - D.time = stationtime2text() - D.record_index = positive_locations.len + 1 - D.material = M.mineral ? M.mineral.ore_name : "Rock" - - //find the first artifact and store it - if(M.finds.len) - var/datum/find/F = M.finds[1] - D.depth = "[F.excavation_required - F.clearance_range] - [F.excavation_required]" - D.clearance = F.clearance_range - D.material = get_responsive_reagent(F.find_type) - - positive_locations.Add(D) - - to_chat(user, "[icon2html(src, user)] [src] pings.") - - else if(istype(A, /obj/structure/boulder)) - var/obj/structure/boulder/B = A - if(B.artifact_find) - //create a new scanlog entry - var/datum/depth_scan/D = new() - D.coords = "[B.x]:[B.y]:[B.z]" - D.time = stationtime2text() - D.record_index = positive_locations.len + 1 - - //these values are arbitrary - D.depth = rand(150, 200) - D.clearance = rand(10, 50) - D.dissonance_spread = rand(750, 2500) / 100 - - positive_locations.Add(D) - - to_chat(user, "[icon2html(src, user)] [src] pings [pick("madly","wildly","excitedly","crazily")]!") - - updateSelfDialog() - -/obj/item/device/depth_scanner/attack_self(var/mob/living/user) - interact(user) - -/obj/item/device/depth_scanner/interact(var/mob/user as mob) - user.set_machine(src) - var/dat = "Coordinates with positive matches
                  " - - dat += "== Clear all ==
                  " - - if(current) - dat += "Time: [current.time]
                  " - dat += "Coords: [current.coords]
                  " - dat += "Anomaly depth: [current.depth] cm
                  " - dat += "Anomaly size: [current.clearance] cm
                  " - dat += "Dissonance spread: [current.dissonance_spread]
                  " - var/index = responsive_carriers.Find(current.material) - if(index > 0 && index <= finds_as_strings.len) - dat += "Anomaly material: [finds_as_strings[index]]
                  " - else - dat += "Anomaly material: Unknown
                  " - dat += "clear entry
                  " - else - dat += "Select an entry from the list
                  " - dat += "



                  " - dat += "
                  " - if(positive_locations.len) - for(var/index = 1 to positive_locations.len) - var/datum/depth_scan/D = positive_locations[index] - dat += "[D.time], coords: [D.coords]
                  " - else - dat += "No entries recorded." - - dat += "
                  " - dat += "Close" - - var/datum/browser/popup = new(user, "depth_scanner", "Results", 300, 500) - popup.set_content(dat) - popup.open() - onclose(user, "depth_scanner") - -/obj/item/device/depth_scanner/OnTopic(user, href_list) - if(href_list["select"]) - var/index = text2num(href_list["select"]) - if(index && index <= positive_locations.len) - current = positive_locations[index] - . = TOPIC_REFRESH - else if(href_list["clear"]) - var/index = text2num(href_list["clear"]) - if(index) - if(index <= positive_locations.len) - var/datum/depth_scan/D = positive_locations[index] - positive_locations.Remove(D) - qdel(D) - else - //GC will hopefully pick them up before too long - positive_locations = list() - QDEL_NULL(current) - . = TOPIC_REFRESH - else if(href_list["close"]) - close_browser(user, "window=depth_scanner") - return TOPIC_HANDLED - - if (. == TOPIC_REFRESH) - interact(user) - -//Radio beacon locator -/obj/item/pinpointer/radio - name = "locator device" - desc = "Used to scan and locate signals on a particular frequency." - var/tracking_freq = PUB_FREQ - matter = list(MATERIAL_ALUMINIUM = 1000, MATERIAL_GLASS = 500) - -/obj/item/pinpointer/radio/acquire_target() - var/turf/T = get_turf(src) - var/zlevels = GetConnectedZlevels(T.z) - var/cur_dist = world.maxx+world.maxy - for(var/obj/machinery/tele_beacon/R in world) - if(!R.functioning()) - continue - if(R.z in zlevels) - var/check_dist = get_dist(src,R) - if(check_dist < cur_dist) - cur_dist = check_dist - . = weakref(R) - -/obj/item/pinpointer/radio/attack_self(var/mob/user as mob) - interact(user) - -/obj/item/pinpointer/radio/interact(var/mob/user) - var/dat = "Radio frequency tracker
                  " - dat += {" - Tracking: [active ? "Enabled" : "Disabled"]
                  - Reset tracker
                  - Frequency: - - - - - [format_frequency(tracking_freq)] - + - +
                  - "} - show_browser(user, dat,"window=locater;size=300x150") - onclose(user, "locater") - -/obj/item/pinpointer/radio/OnTopic(user, href_list) - if(href_list["toggle"]) - toggle(user) - . = TOPIC_REFRESH - - if(href_list["reset_tracking"]) - target = acquire_target() - . = TOPIC_REFRESH - - else if(href_list["freq"]) - var/new_frequency = (tracking_freq + text2num(href_list["freq"])) - if (new_frequency < 1200 || new_frequency > 1600) - new_frequency = sanitize_frequency(new_frequency, 1499) - tracking_freq = new_frequency - . = TOPIC_REFRESH - - if(. == TOPIC_REFRESH) - interact(user) diff --git a/code/modules/xenoarcheaology/tools/tools_pickaxe.dm b/code/modules/xenoarcheaology/tools/tools_pickaxe.dm deleted file mode 100644 index b9de4394c4287..0000000000000 --- a/code/modules/xenoarcheaology/tools/tools_pickaxe.dm +++ /dev/null @@ -1,127 +0,0 @@ -/obj/item/pickaxe/xeno - name = "master xenoarch pickaxe" - desc = "A miniature excavation tool for precise digging." - icon = 'icons/obj/xenoarchaeology.dmi' - item_state = "screwdriver_brown" - force = 3 - throwforce = 0 - attack_verb = list("stabbed", "jabbed", "spiked", "attacked") - matter = list(MATERIAL_STEEL = 75) - w_class = ITEM_SIZE_SMALL - drill_verb = "delicately picking" - digspeed = 20 - excavation_amount = 0 - sharp = TRUE - -/obj/item/pickaxe/xeno/examine(mob/user) - . = ..() - to_chat(user, "This tool has a [excavation_amount] centimetre excavation depth.") - -/obj/item/pickaxe/xeno/brush - name = "wire brush" - icon_state = "pick_brush" - slot_flags = SLOT_EARS - force = 1 - attack_verb = list("prodded", "attacked") - desc = "A wood-handled brush with thick metallic wires for clearing away dust and loose scree." - excavation_amount = 1 - drill_sound = 'sound/weapons/thudswoosh.ogg' - drill_verb = "brushing" - sharp = FALSE - -/obj/item/pickaxe/xeno/one_pick - name = "2cm pick" - icon_state = "pick1" - excavation_amount = 2 - drill_sound = 'sound/items/Screwdriver.ogg' - -/obj/item/pickaxe/xeno/two_pick - name = "4cm pick" - icon_state = "pick2" - excavation_amount = 4 - drill_sound = 'sound/items/Screwdriver.ogg' - -/obj/item/pickaxe/xeno/three_pick - name = "6cm pick" - icon_state = "pick3" - excavation_amount = 6 - drill_sound = 'sound/items/Screwdriver.ogg' - -/obj/item/pickaxe/xeno/four_pick - name = "8cm pick" - icon_state = "pick4" - excavation_amount = 8 - drill_sound = 'sound/items/Screwdriver.ogg' - -/obj/item/pickaxe/xeno/five_pick - name = "10cm pick" - icon_state = "pick5" - excavation_amount = 10 - drill_sound = 'sound/items/Screwdriver.ogg' - -/obj/item/pickaxe/xeno/six_pick - name = "12cm pick" - icon_state = "pick6" - excavation_amount = 12 - -/obj/item/pickaxe/xeno/hand - name = "hand pickaxe" - icon_state = "pick_hand" - item_state = "sword0" - digspeed = 30 - desc = "A smaller, more precise version of the pickaxe." - excavation_amount = 30 - drill_sound = 'sound/items/Crowbar.ogg' - drill_verb = "clearing" - matter = list(MATERIAL_STEEL = 150) - w_class = ITEM_SIZE_NORMAL - force = 6 - throwforce = 3 - -//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -// Pack for holding pickaxes - -/obj/item/storage/excavation - name = "excavation pick set" - icon = 'icons/obj/storage.dmi' - icon_state = "excavation" - item_state = "utility" - desc = "A rugged case containing a set of standardized picks used in archaeological digs." - item_state = "syringe_kit" - storage_slots = 7 - slot_flags = SLOT_BELT - w_class = ITEM_SIZE_NORMAL - can_hold = list(/obj/item/pickaxe/xeno) - max_storage_space = 18 - max_w_class = ITEM_SIZE_NORMAL - use_to_pickup = 1 - startswith = list( - /obj/item/pickaxe/xeno/brush, - /obj/item/pickaxe/xeno/one_pick, - /obj/item/pickaxe/xeno/two_pick, - /obj/item/pickaxe/xeno/three_pick, - /obj/item/pickaxe/xeno/four_pick, - /obj/item/pickaxe/xeno/five_pick, - /obj/item/pickaxe/xeno/six_pick) - -/obj/item/storage/excavation/handle_item_insertion() - ..() - sort_picks() - -/obj/item/storage/excavation/proc/sort_picks() - var/list/obj/item/pickaxe/xeno/picksToSort = list() - for(var/obj/item/pickaxe/xeno/P in src) - picksToSort += P - P.loc = null - while(picksToSort.len) - var/min = 200 // No pick is bigger than 200 - var/selected = 0 - for(var/i = 1 to picksToSort.len) - var/obj/item/pickaxe/xeno/current = picksToSort[i] - if(current.excavation_amount <= min) - selected = i - min = current.excavation_amount - var/obj/item/pickaxe/xeno/smallest = picksToSort[selected] - smallest.loc = src - picksToSort -= smallest - prepare_ui() diff --git a/code/modules/xenoarcheaology/triggers/_trigger.dm b/code/modules/xenoarcheaology/triggers/_trigger.dm deleted file mode 100644 index 4a0150bd8192c..0000000000000 --- a/code/modules/xenoarcheaology/triggers/_trigger.dm +++ /dev/null @@ -1,23 +0,0 @@ -/datum/artifact_trigger - var/name = "nothing ever" - var/toggle = TRUE //TRUE - effect is toggled between on and off when triggered. FALSE - effects is on when triggered, off if not triggered. - -//There procs should return TRUE if trigger is activated, FALSE if nothing happens - -/datum/artifact_trigger/proc/on_hit(obj/O, mob/user) - return FALSE - -/datum/artifact_trigger/proc/on_touch(mob/M) - return FALSE - -/datum/artifact_trigger/proc/on_gas_exposure(datum/gas_mixture/gas) - return FALSE - -/datum/artifact_trigger/proc/on_explosion(severity) - return FALSE - -/datum/artifact_trigger/proc/on_bump(atom/movable/AM) - return FALSE - -/datum/artifact_trigger/proc/on_water_act(depth) - return FALSE \ No newline at end of file diff --git a/code/modules/xenoarcheaology/triggers/chemical.dm b/code/modules/xenoarcheaology/triggers/chemical.dm deleted file mode 100644 index 6108f5417a0ad..0000000000000 --- a/code/modules/xenoarcheaology/triggers/chemical.dm +++ /dev/null @@ -1,52 +0,0 @@ -/datum/artifact_trigger/chemical - name = "presence of a chemical" - var/list/required_chemicals //Need any of these - -/datum/artifact_trigger/chemical/New() - if(isnull(required_chemicals)) - name = "presence of either an acid, toxin, or water" - required_chemicals = list(pick(/datum/reagent/acid, /datum/reagent/toxin, /datum/reagent/water)) - -/datum/artifact_trigger/chemical/on_hit(obj/O, mob/user) - . = ..() - if(istype(O, /obj/item/reagent_containers)) - if(O.reagents.has_any_reagent(required_chemicals)) - return TRUE - -/datum/artifact_trigger/chemical/water - name = "presence of water" - required_chemicals = list( - /datum/reagent/water, - /datum/reagent/water/boiling, - /datum/reagent/drink/ice - ) - -/datum/artifact_trigger/chemical/water/on_water_act(depth) - if(depth > FLUID_EVAPORATION_POINT) - return TRUE - -/datum/artifact_trigger/chemical/acid - name = "presence of acid" - required_chemicals = list( - /datum/reagent/acid, - /datum/reagent/acid/polyacid, - /datum/reagent/diethylamine - ) - -/datum/artifact_trigger/chemical/volatile - name = "presence of volatile chemicals" - required_chemicals = list( - /datum/reagent/toxin/phoron, - /datum/reagent/thermite, - /datum/reagent/fuel - ) - -/datum/artifact_trigger/chemical/toxic - name = "presence of toxins" - required_chemicals = list( - /datum/reagent/toxin, - /datum/reagent/toxin/cyanide, - /datum/reagent/toxin/amatoxin, - /datum/reagent/toxin/venom, - /datum/reagent/toxin/chlorine - ) diff --git a/code/modules/xenoarcheaology/triggers/energy.dm b/code/modules/xenoarcheaology/triggers/energy.dm deleted file mode 100644 index 7d27a09b1f30d..0000000000000 --- a/code/modules/xenoarcheaology/triggers/energy.dm +++ /dev/null @@ -1,21 +0,0 @@ -/datum/artifact_trigger/energy - name = "applied high energy" - var/static/list/energetic_things = list( - /obj/item/melee/cultblade, - /obj/item/card/emag, - /obj/item/device/multitool - ) - -/datum/artifact_trigger/energy/on_hit(obj/O, mob/user) - . = ..() - if(istype(O, /obj/item/projectile)) - var/obj/item/projectile/P = O - . = (P.damage_type == DAMAGE_BURN) || (P.damage_type == DAMAGE_SHOCK) - if(istype(O,/obj/item/melee/baton)) - var/obj/item/melee/baton/B = O - . = B.status - else if (istype(O,/obj/item/melee/energy)) - var/obj/item/melee/energy/E = O - . = E.active - else if (is_type_in_list(O, energetic_things)) - . = TRUE diff --git a/code/modules/xenoarcheaology/triggers/force.dm b/code/modules/xenoarcheaology/triggers/force.dm deleted file mode 100644 index 1f2b937556538..0000000000000 --- a/code/modules/xenoarcheaology/triggers/force.dm +++ /dev/null @@ -1,21 +0,0 @@ -/datum/artifact_trigger/force - name = "kinetic impact" - -/datum/artifact_trigger/force/on_hit(obj/O, mob/user) - . = ..() - if(istype(O, /obj/item/projectile)) - var/obj/item/projectile/P = O - return (P.damage_type == DAMAGE_BRUTE) - else if(istype(O, /obj/item)) - var/obj/item/I = O - return I.force >= 10 - -/datum/artifact_trigger/force/on_explosion(severity) - return TRUE - -/datum/artifact_trigger/force/on_bump(atom/movable/AM) - . = ..() - if(isobj(AM)) - var/obj/O = AM - if(O.throwforce >= 10) - return TRUE diff --git a/code/modules/xenoarcheaology/triggers/gas.dm b/code/modules/xenoarcheaology/triggers/gas.dm deleted file mode 100644 index 3f9c4daf4859f..0000000000000 --- a/code/modules/xenoarcheaology/triggers/gas.dm +++ /dev/null @@ -1,34 +0,0 @@ -/datum/artifact_trigger/gas - name = "concentration of a specific gas" - toggle = FALSE - var/list/gas_needed //list of gas=percentage needed in air to activate - -/datum/artifact_trigger/gas/New() - if(!gas_needed) - //pick from the subtypes traits if we don't spawn as one - var/gas = pick(GAS_CO2, GAS_OXYGEN, GAS_NITROGEN, GAS_PHORON) - name = "concentration of [gas]" - gas_needed = list("[gas]" = 5) - -/datum/artifact_trigger/gas/on_gas_exposure(datum/gas_mixture/gas) - . = TRUE - for(var/g in gas_needed) - var/percentage = round(gas.gas[g]/gas.total_moles * 100, 0.01) - if(percentage < gas_needed[g]) - return FALSE - -/datum/artifact_trigger/gas/co2 - name = "concentration of CO2" - gas_needed = list(GAS_CO2 = 5) - -/datum/artifact_trigger/gas/o2 - name = "concentration of oxygen" - gas_needed = list(GAS_OXYGEN = 5) - -/datum/artifact_trigger/gas/n2 - name = "concentration of nitrogen" - gas_needed = list(GAS_NITROGEN = 5) - -/datum/artifact_trigger/gas/phoron - name = "concentration of phoron" - gas_needed = list(GAS_PHORON = 5) diff --git a/code/modules/xenoarcheaology/triggers/temperature.dm b/code/modules/xenoarcheaology/triggers/temperature.dm deleted file mode 100644 index 889bf3131b6d9..0000000000000 --- a/code/modules/xenoarcheaology/triggers/temperature.dm +++ /dev/null @@ -1,45 +0,0 @@ -/datum/artifact_trigger/temperature - name = "specific temperature range" - toggle = FALSE - var/min_temp - var/max_temp - -/datum/artifact_trigger/temperature/New() - if(isnull(min_temp) && isnull(max_temp)) - min_temp = rand(T0C - 100, T0C + 200) - max_temp = min_temp + rand(10, 30) - - if (max_temp < T20C) - name = "low temperature" - else if (min_temp > T20C) - name = "high temperature" - else - name = "room temperature" - -/datum/artifact_trigger/temperature/on_gas_exposure(datum/gas_mixture/gas) - return gas.temperature >= min_temp && gas.temperature <= max_temp - -/datum/artifact_trigger/temperature/on_hit(obj/O, mob/user) - return O.temperature >= min_temp && O.temperature <= max_temp - -/datum/artifact_trigger/temperature/cold - name = "low temperature" - -/datum/artifact_trigger/temperature/cold/New() - min_temp = -INFINITY - max_temp = rand(T0C - 100, T0C) - -/datum/artifact_trigger/temperature/heat - name = "high temperature" - -/datum/artifact_trigger/temperature/heat/New() - min_temp = rand(T0C + 20, T0C + 300) - max_temp = INFINITY - -/datum/artifact_trigger/temperature/heat/on_hit(obj/O, mob/user) - . = ..() - if(!. && isflamesource(O)) - return TRUE - -/datum/artifact_trigger/temperature/heat/on_explosion(severity) - return TRUE diff --git a/code/modules/xenoarcheaology/triggers/touch.dm b/code/modules/xenoarcheaology/triggers/touch.dm deleted file mode 100644 index 90d5275e28dc8..0000000000000 --- a/code/modules/xenoarcheaology/triggers/touch.dm +++ /dev/null @@ -1,41 +0,0 @@ -/datum/artifact_trigger/touch - name = "touch" - -/datum/artifact_trigger/touch/proc/can_touch(mob/living/carbon/human/H, bodypart) - return TRUE - -/datum/artifact_trigger/touch/on_touch(mob/living/M) - return can_touch(M, M.hand ? BP_R_HAND : BP_L_HAND) - -/datum/artifact_trigger/touch/on_bump(atom/movable/AM) - if(prob(25)) - return can_touch(AM, pick(BP_R_HAND, BP_L_HAND)) - -/datum/artifact_trigger/touch/organic - name = "organic touch" - -/datum/artifact_trigger/touch/organic/can_touch(mob/living/carbon/human/H, bodypart) - if(!istype(H)) - return FALSE - if(H.get_covering_equipped_item_by_zone(bodypart)) - return FALSE - return TRUE - -/datum/artifact_trigger/touch/organic/on_hit(obj/O, mob/user) - return istype(O, /obj/item/organ/external) - -/datum/artifact_trigger/touch/synth - name = "robotic touch" - -/datum/artifact_trigger/touch/synth/can_touch(mob/living/L, bodypart) - if(issilicon(L)) - return TRUE - if(ishuman(L)) - var/mob/living/carbon/human/H = L - if(H.isSynthetic()) - return TRUE - var/obj/item/organ/external/E = H.get_organ(bodypart) - if(E && BP_IS_ROBOTIC(E)) - return TRUE - return FALSE - \ No newline at end of file diff --git a/code/modules/xgm/gases.dm b/code/modules/xgm/gases.dm deleted file mode 100644 index da693da02cc0c..0000000000000 --- a/code/modules/xgm/gases.dm +++ /dev/null @@ -1,255 +0,0 @@ -/decl/xgm_gas/oxygen - id = GAS_OXYGEN - name = "Oxygen" - specific_heat = 20 // J/(mol*K) - molar_mass = 0.032 // kg/mol - flags = XGM_GAS_OXIDIZER | XGM_GAS_FUSION_FUEL - breathed_product = /datum/reagent/oxygen - symbol_html = "O2" - symbol = "O2" - - -/decl/xgm_gas/nitrogen - id = GAS_NITROGEN - name = "Nitrogen" - specific_heat = 20 // J/(mol*K) - molar_mass = 0.028 // kg/mol - symbol_html = "N2" - symbol = "N2" - -/decl/xgm_gas/carbon_dioxide - id = GAS_CO2 - name = "Carbon Dioxide" - specific_heat = 30 // J/(mol*K) - molar_mass = 0.044 // kg/mol - symbol_html = "CO2" - symbol = "CO2" - -/decl/xgm_gas/methyl_bromide - id = GAS_METHYL_BROMIDE - name = "Methyl Bromide" - specific_heat = 42.59 // J/(mol*K) - molar_mass = 0.095 // kg/mol - breathed_product = /datum/reagent/toxin/methyl_bromide - symbol_html = "CH3Br" - symbol = "CH3Br" - -/decl/xgm_gas/phoron - id = GAS_PHORON - name = "Phoron" - - //Note that this has a significant impact on TTV yield. - //Because it is so high, any leftover phoron soaks up a lot of heat and drops the yield pressure. - specific_heat = 200 // J/(mol*K) - - //Hypothetical group 14 (same as carbon), period 8 element. - //Using multiplicity rule, it's atomic number is 162 - //and following a N/Z ratio of 1.5, the molar mass of a monatomic gas is: - molar_mass = 0.405 // kg/mol - - tile_color = "#ff9940" - overlay_limit = 0.7 - flags = XGM_GAS_FUEL | XGM_GAS_CONTAMINANT | XGM_GAS_FUSION_FUEL - breathed_product = /datum/reagent/toxin/phoron - symbol_html = "Ph" - symbol = "Ph" - -/decl/xgm_gas/sleeping_agent - id = GAS_N2O - name = "Nitrous Oxide" - specific_heat = 40 // J/(mol*K) - molar_mass = 0.044 // kg/mol. N2O - flags = XGM_GAS_OXIDIZER //N2O is a powerful oxidizer - breathed_product = /datum/reagent/nitrous_oxide - symbol_html = "N2O" - symbol = "N2O" - -/decl/xgm_gas/methane - id = GAS_METHANE - name = "Methane" - specific_heat = 30 // J/(mol*K) - molar_mass = 0.016 // kg/mol - flags = XGM_GAS_FUEL - symbol_html = "CH4" - symbol = "CH4" - -/decl/xgm_gas/alium - id = GAS_ALIEN - name = "Aliether" - hidden_from_codex = TRUE - symbol_html = "X" - symbol = "X" - -/decl/xgm_gas/alium/New() - var/num = rand(100,999) - name = "Compound #[num]" - specific_heat = rand(1, 400) // J/(mol*K) - molar_mass = rand(20,800)/1000 // kg/mol - if(prob(40)) - flags |= XGM_GAS_FUEL - else if(prob(40)) //it's prooobably a bad idea for gas being oxidizer to itself. - flags |= XGM_GAS_OXIDIZER - if(prob(40)) - flags |= XGM_GAS_CONTAMINANT - if(prob(40)) - flags |= XGM_GAS_FUSION_FUEL - - symbol_html = "X[num]" - symbol = "X-[num]" - if(prob(50)) - tile_color = RANDOM_RGB - overlay_limit = 0.5 - -/decl/xgm_gas/hydrogen - id = GAS_HYDROGEN - name = "Hydrogen" - specific_heat = 100 // J/(mol*K) - molar_mass = 0.002 // kg/mol - flags = XGM_GAS_FUEL|XGM_GAS_FUSION_FUEL - burn_product = GAS_STEAM - symbol_html = "H2" - symbol = "H2" - -/decl/xgm_gas/hydrogen/deuterium - id = GAS_DEUTERIUM - name = "Deuterium" - specific_heat = 80 - molar_mass = 0.004 - symbol_html = "D" - symbol = "D" - -/decl/xgm_gas/hydrogen/tritium - id = GAS_TRITIUM - name = "Tritium" - molar_mass = 0.006 - specific_heat = 60 - symbol_html = "T" - symbol = "T" - -/decl/xgm_gas/helium - id = GAS_HELIUM - name = "Helium" - specific_heat = 80 // J/(mol*K) - molar_mass = 0.004 // kg/mol - flags = XGM_GAS_FUSION_FUEL - breathed_product = /datum/reagent/helium - symbol_html = "He" - symbol = "He" - -/decl/xgm_gas/argon - id = GAS_ARGON - name = "Argon" - specific_heat = 10 // J/(mol*K) - molar_mass = 0.018 // kg/mol - symbol_html = "Ar" - symbol = "Ar" - -// If narcosis is ever simulated, krypton has a narcotic potency seven times greater than regular airmix. -/decl/xgm_gas/krypton - id = GAS_KRYPTON - name = "Krypton" - specific_heat = 5 // J/(mol*K) - molar_mass = 0.036 // kg/mol - symbol_html = "Kr" - symbol = "Kr" - -/decl/xgm_gas/neon - id = GAS_NEON - name = "Neon" - specific_heat = 20 // J/(mol*K) - molar_mass = 0.01 // kg/mol - symbol_html = "Ne" - symbol = "Ne" - -/decl/xgm_gas/xenon - id = GAS_XENON - name = "Xenon" - specific_heat = 3 // J/(mol*K) - molar_mass = 0.054 // kg/mol - breathed_product = /datum/reagent/nitrous_oxide/xenon - symbol_html = "Xe" - symbol = "Xe" - -/decl/xgm_gas/nitrodioxide - id = GAS_NO2 - name = "Nitrogen Dioxide" - tile_color = "#ca6409" - specific_heat = 37 // J/(mol*K) - molar_mass = 0.054 // kg/mol - flags = XGM_GAS_OXIDIZER - breathed_product = /datum/reagent/toxin - symbol_html = "NO2" - symbol = "NO2" - -/decl/xgm_gas/nitricoxide - id = GAS_NO - name = "Nitric Oxide" - - specific_heat = 10 // J/(mol*K) - molar_mass = 0.030 // kg/mol - flags = XGM_GAS_OXIDIZER - symbol_html = "NO" - symbol = "NO" - -/decl/xgm_gas/chlorine - id = GAS_CHLORINE - name = "Chlorine" - tile_color = "#c5f72d" - overlay_limit = 0.5 - specific_heat = 5 // J/(mol*K) - molar_mass = 0.017 // kg/mol - flags = XGM_GAS_CONTAMINANT - breathed_product = /datum/reagent/toxin/chlorine - symbol_html = "Cl" - symbol = "Cl" - -/decl/xgm_gas/vapor - id = GAS_STEAM - name = "Steam" - tile_overlay = "generic" - overlay_limit = 0.5 - specific_heat = 30 // J/(mol*K) - molar_mass = 0.020 // kg/mol - breathed_product = /datum/reagent/water - condensation_product = /datum/reagent/water - condensation_point = 308.15 // 35C. Dew point is ~20C but this is better for gameplay considerations. - symbol_html = "H2O" - symbol = "H2O" - -/decl/xgm_gas/sulfurdioxide - id = GAS_SULFUR - name = "Sulfur Dioxide" - - specific_heat = 30 // J/(mol*K) - molar_mass = 0.044 // kg/mol - symbol_html = "SO2" - symbol = "SO2" - -/decl/xgm_gas/ammonia - id = GAS_AMMONIA - name = "Ammonia" - - specific_heat = 20 // J/(mol*K) - molar_mass = 0.017 // kg/mol - breathed_product = /datum/reagent/ammonia - symbol_html = "NH3" - symbol = "NH3" - -/decl/xgm_gas/carbon_monoxide - id = GAS_CO - name = "Carbon Monoxide" - specific_heat = 30 // J/(mol*K) - molar_mass = 0.028 // kg/mol - breathed_product = /datum/reagent/carbon_monoxide - symbol_html = "CO" - symbol = "CO" - -/decl/xgm_gas/boron - id = GAS_BORON - name = "Boron" - specific_heat = 11 - molar_mass = 0.011 - flags = XGM_GAS_FUSION_FUEL - breathed_product = /datum/reagent/toxin/boron - symbol_html = "B" - symbol = "B" diff --git a/code/modules/xgm/xgm_gas_data.dm b/code/modules/xgm/xgm_gas_data.dm deleted file mode 100644 index 03816af87bb62..0000000000000 --- a/code/modules/xgm/xgm_gas_data.dm +++ /dev/null @@ -1,119 +0,0 @@ -var/global/datum/xgm_gas_data/gas_data - -/datum/xgm_gas_data - //Simple list of all the gas IDs. - var/list/gases = list() - //The friendly, human-readable name for the gas. - var/list/name = list() - //Specific heat of the gas. Used for calculating heat capacity. - var/list/specific_heat = list() - //Molar mass of the gas. Used for calculating specific entropy. - var/list/molar_mass = list() - //Tile overlays. /obj/effect/gas_overlay, created from references to 'icons/effects/tile_effects.dmi' - var/list/tile_overlay = list() - //Optional color for tile overlay - var/list/tile_overlay_color = list() - //Overlay limits. There must be at least this many moles for the overlay to appear. - var/list/overlay_limit = list() - //Flags. - var/list/flags = list() - //Products created when burned. For fuel only for now (not oxidizers) - var/list/burn_product = list() - // Reagent created when inhaled by lungs. - var/list/breathed_product = list() - // Temperature in K that the gas will condense. - var/list/condensation_points = list() - // Reagent path resulting from condesation. - var/list/condensation_products = list() - //If it shouldn't autogenerate a codex entry - var/list/hidden_from_codex = list() - - //Holds the symbols - var/list/symbol_html = list() - var/list/symbol = list() - -/decl/xgm_gas - var/id = "" - var/name = "Unnamed Gas" - var/specific_heat = 20 // J/(mol*K) - var/molar_mass = 0.032 // kg/mol - - var/tile_overlay = "generic" - var/tile_color = null - var/overlay_limit = null - - var/flags = 0 - var/burn_product = GAS_CO2 - var/breathed_product - var/condensation_point = INFINITY - var/condensation_product - var/hidden_from_codex - var/symbol_html = "X" - var/symbol = "X" - - -/hook/startup/proc/generateGasData() - gas_data = new - for(var/p in (typesof(/decl/xgm_gas) - /decl/xgm_gas)) - var/decl/xgm_gas/gas = new p //avoid initial() because of potential New() actions - - if(gas.id in gas_data.gases) - error("Duplicate gas id `[gas.id]` in `[p]`") - - gas_data.gases += gas.id - gas_data.name[gas.id] = gas.name - gas_data.specific_heat[gas.id] = gas.specific_heat - gas_data.molar_mass[gas.id] = gas.molar_mass - if(gas.overlay_limit) - gas_data.overlay_limit[gas.id] = gas.overlay_limit - gas_data.tile_overlay[gas.id] = gas.tile_overlay - gas_data.tile_overlay_color[gas.id] = gas.tile_color - gas_data.flags[gas.id] = gas.flags - gas_data.burn_product[gas.id] = gas.burn_product - - gas_data.symbol_html[gas.id] = gas.symbol_html - gas_data.symbol[gas.id] = gas.symbol - - if(!isnull(gas.condensation_product) && !isnull(gas.condensation_point)) - gas_data.condensation_points[gas.id] = gas.condensation_point - gas_data.condensation_products[gas.id] = gas.condensation_product - - gas_data.breathed_product[gas.id] = gas.breathed_product - gas_data.hidden_from_codex[gas.id] = gas.hidden_from_codex - - return 1 - -/obj/effect/gas_overlay - name = "gas" - desc = "You shouldn't be clicking this." - icon = 'icons/effects/tile_effects.dmi' - icon_state = "generic" - layer = FIRE_LAYER - appearance_flags = DEFAULT_APPEARANCE_FLAGS | RESET_COLOR - mouse_opacity = 0 - var/gas_id - -/obj/effect/gas_overlay/proc/update_alpha_animation(var/new_alpha) - animate(src, alpha = new_alpha) - alpha = new_alpha - animate(src, alpha = 0.8 * new_alpha, time = 10, easing = SINE_EASING | EASE_OUT, loop = -1) - animate(alpha = new_alpha, time = 10, easing = SINE_EASING | EASE_IN, loop = -1) - -/obj/effect/gas_overlay/Initialize(mapload, gas) - . = ..() - gas_id = gas - if(gas_data.tile_overlay[gas_id]) - icon_state = gas_data.tile_overlay[gas_id] - color = gas_data.tile_overlay_color[gas_id] - -/obj/effect/gas_overlay/heat - name = "gas" - desc = "You shouldn't be clicking this." - plane = HEAT_EFFECT_PLANE - gas_id = GAS_HEAT - render_source = HEAT_EFFECT_TARGET - -/obj/effect/gas_overlay/heat/Initialize(mapload, gas) - . = ..() - icon = null - icon_state = null diff --git a/code/modules/xgm/xgm_gas_mixture.dm b/code/modules/xgm/xgm_gas_mixture.dm deleted file mode 100644 index adc82b86065e6..0000000000000 --- a/code/modules/xgm/xgm_gas_mixture.dm +++ /dev/null @@ -1,530 +0,0 @@ -/datum/gas_mixture - //Associative list of gas moles. - //Gases with 0 moles are not tracked and are pruned by update_values() - var/list/gas = list() - //Temperature in Kelvin of this gas mix. - var/temperature = 0 - - //Sum of all the gas moles in this mix. Updated by update_values() - var/total_moles = 0 - //Volume of this mix. - var/volume = CELL_VOLUME - //Size of the group this gas_mixture is representing. 1 for singletons. - var/group_multiplier = 1 - - //List of active tile overlays for this gas_mixture. Updated by check_tile_graphic() - var/list/graphic = list() - //Cache of gas overlay objects - var/list/tile_overlay_cache - -/datum/gas_mixture/New(_volume = CELL_VOLUME, _temperature = 0, _group_multiplier = 1) - volume = _volume - temperature = _temperature - group_multiplier = _group_multiplier - -/datum/gas_mixture/proc/get_gas(gasid) - if(!gas.len) - return 0 //if the list is empty BYOND treats it as a non-associative list, which runtimes - return gas[gasid] * group_multiplier - -/datum/gas_mixture/proc/get_total_moles() - return total_moles * group_multiplier - -//Takes a gas string and the amount of moles to adjust by. Calls update_values() if update isn't 0. -/datum/gas_mixture/proc/adjust_gas(gasid, moles, update = 1) - if(moles == 0) - return - - if (group_multiplier != 1) - gas[gasid] += moles/group_multiplier - else - gas[gasid] += moles - - if(update) - update_values() - - -//Same as adjust_gas(), but takes a temperature which is mixed in with the gas. -/datum/gas_mixture/proc/adjust_gas_temp(gasid, moles, temp, update = 1) - if(moles == 0) - return - - if(moles > 0 && abs(temperature - temp) > MINIMUM_TEMPERATURE_DELTA_TO_CONSIDER) - var/self_heat_capacity = heat_capacity() - var/giver_heat_capacity = gas_data.specific_heat[gasid] * moles - var/combined_heat_capacity = giver_heat_capacity + self_heat_capacity - if(combined_heat_capacity != 0) - temperature = (temp * giver_heat_capacity + temperature * self_heat_capacity) / combined_heat_capacity - - if (group_multiplier != 1) - gas[gasid] += moles/group_multiplier - else - gas[gasid] += moles - - if(update) - update_values() - - -//Variadic version of adjust_gas(). Takes any number of gas and mole pairs and applies them. -/datum/gas_mixture/proc/adjust_multi() - ASSERT(!(args.len % 2)) - - for(var/i = 1; i < args.len; i += 2) - adjust_gas(args[i], args[i+1], update = 0) - - update_values() - - -//Variadic version of adjust_gas_temp(). Takes any number of gas, mole and temperature associations and applies them. -/datum/gas_mixture/proc/adjust_multi_temp() - ASSERT(!(args.len % 3)) - - for(var/i = 1; i < args.len; i += 3) - adjust_gas_temp(args[i], args[i + 1], args[i + 2], update = 0) - - update_values() - - -//Merges all the gas from another mixture into this one. Respects group_multipliers and adjusts temperature correctly. -//Does not modify giver in any way. -/datum/gas_mixture/proc/merge(const/datum/gas_mixture/giver) - if(!giver) - return - - if(abs(temperature-giver.temperature)>MINIMUM_TEMPERATURE_DELTA_TO_CONSIDER) - var/self_heat_capacity = heat_capacity() - var/giver_heat_capacity = giver.heat_capacity() - var/combined_heat_capacity = giver_heat_capacity + self_heat_capacity - if(combined_heat_capacity != 0) - temperature = (giver.temperature*giver_heat_capacity + temperature*self_heat_capacity)/combined_heat_capacity - - if((group_multiplier != 1)||(giver.group_multiplier != 1)) - for(var/g in giver.gas) - gas[g] += giver.gas[g] * giver.group_multiplier / group_multiplier - else - for(var/g in giver.gas) - gas[g] += giver.gas[g] - - update_values() - -// Used to equalize the mixture between two zones before sleeping an edge. -/datum/gas_mixture/proc/equalize(datum/gas_mixture/sharer) - var/our_heatcap = heat_capacity() - var/share_heatcap = sharer.heat_capacity() - - // Special exception: there isn't enough air around to be worth processing this edge next tick, zap both to zero. - if(total_moles + sharer.total_moles <= MINIMUM_AIR_TO_SUSPEND) - gas.Cut() - sharer.gas.Cut() - - for(var/g in gas|sharer.gas) - var/comb = gas[g] + sharer.gas[g] - comb /= volume + sharer.volume - gas[g] = comb * volume - sharer.gas[g] = comb * sharer.volume - - if(our_heatcap + share_heatcap) - temperature = ((temperature * our_heatcap) + (sharer.temperature * share_heatcap)) / (our_heatcap + share_heatcap) - sharer.temperature = temperature - - update_values() - sharer.update_values() - - return 1 - - -//Returns the heat capacity of the gas mix based on the specific heat of the gases. -/datum/gas_mixture/proc/heat_capacity() - . = 0 - for(var/g in gas) - . += gas_data.specific_heat[g] * gas[g] - . *= group_multiplier - - -//Adds or removes thermal energy. Returns the actual thermal energy change, as in the case of removing energy we can't go below TCMB. -/datum/gas_mixture/proc/add_thermal_energy(var/thermal_energy) - - if (total_moles == 0) - return 0 - - var/heat_capacity = heat_capacity() - if (thermal_energy < 0) - if (temperature < TCMB) - return 0 - var/thermal_energy_limit = -(temperature - TCMB)*heat_capacity //ensure temperature does not go below TCMB - thermal_energy = max( thermal_energy, thermal_energy_limit ) //thermal_energy and thermal_energy_limit are negative here. - temperature += thermal_energy/heat_capacity - return thermal_energy - -//Returns the thermal energy change required to get to a new temperature -/datum/gas_mixture/proc/get_thermal_energy_change(var/new_temperature) - return heat_capacity()*(max(new_temperature, 0) - temperature) - - -//Technically vacuum doesn't have a specific entropy. Just use a really big number (infinity would be ideal) here so that it's easy to add gas to vacuum and hard to take gas out. -#define SPECIFIC_ENTROPY_VACUUM 150000 - - -//Returns the ideal gas specific entropy of the whole mix. This is the entropy per mole of /mixed/ gas. -/datum/gas_mixture/proc/specific_entropy() - if (!gas.len || total_moles == 0) - return SPECIFIC_ENTROPY_VACUUM - - . = 0 - for(var/g in gas) - . += gas[g] * specific_entropy_gas(g) - . /= total_moles - - -/* - It's arguable whether this should even be called entropy anymore. It's more "based on" entropy than actually entropy now. - - Returns the ideal gas specific entropy of a specific gas in the mix. This is the entropy due to that gas per mole of /that/ gas in the mixture, not the entropy due to that gas per mole of gas mixture. - - For the purposes of SS13, the specific entropy is just a number that tells you how hard it is to move gas. You can replace this with whatever you want. - Just remember that returning a SMALL number == adding gas to this gas mix is HARD, taking gas away is EASY, and that returning a LARGE number means the opposite (so a vacuum should approach infinity). - - So returning a constant/(partial pressure) would probably do what most players expect. Although the version I have implemented below is a bit more nuanced than simply 1/P in that it scales in a way - which is bit more realistic (natural log), and returns a fairly accurate entropy around room temperatures and pressures. -*/ -/datum/gas_mixture/proc/specific_entropy_gas(var/gasid) - if (!(gasid in gas) || gas[gasid] == 0) - return SPECIFIC_ENTROPY_VACUUM //that gas isn't here - - //group_multiplier gets divided out in volume/gas[gasid] - also, V/(m*T) = R/(partial pressure) - var/molar_mass = gas_data.molar_mass[gasid] - var/specific_heat = gas_data.specific_heat[gasid] - var/safe_temp = max(temperature, TCMB) // We're about to divide by this. - return R_IDEAL_GAS_EQUATION * ( log( (IDEAL_GAS_ENTROPY_CONSTANT*volume/(gas[gasid] * safe_temp)) * (molar_mass*specific_heat*safe_temp)**(2/3) + 1 ) + 15 ) - - //alternative, simpler equation - //var/partial_pressure = gas[gasid] * R_IDEAL_GAS_EQUATION * temperature / volume - //return R_IDEAL_GAS_EQUATION * ( log (1 + IDEAL_GAS_ENTROPY_CONSTANT/partial_pressure) + 20 ) - - -//Updates the total_moles count and trims any empty gases. -/datum/gas_mixture/proc/update_values() - total_moles = 0 - for(var/g in gas) - if(gas[g] <= 0) - gas -= g - else - total_moles += gas[g] - - -//Returns the pressure of the gas mix. Only accurate if there have been no gas modifications since update_values() has been called. -/datum/gas_mixture/proc/return_pressure() - if(volume) - return total_moles * R_IDEAL_GAS_EQUATION * temperature / volume - return 0 - - -//Removes moles from the gas mixture and returns a gas_mixture containing the removed air. -/datum/gas_mixture/proc/remove(amount) - amount = min(amount, total_moles * group_multiplier) //Can not take more air than the gas mixture has! - if(amount <= 0) - return null - - var/datum/gas_mixture/removed = new - - for(var/g in gas) - removed.gas[g] = QUANTIZE((gas[g] / total_moles) * amount) - gas[g] -= removed.gas[g] / group_multiplier - - removed.temperature = temperature - update_values() - removed.update_values() - - return removed - - -//Removes a ratio of gas from the mixture and returns a gas_mixture containing the removed air. -/datum/gas_mixture/proc/remove_ratio(ratio, out_group_multiplier = 1) - if(ratio <= 0) - return null - out_group_multiplier = clamp(out_group_multiplier, 1, group_multiplier) - - ratio = min(ratio, 1) - - var/datum/gas_mixture/removed = new - removed.group_multiplier = out_group_multiplier - - for(var/g in gas) - removed.gas[g] = (gas[g] * ratio * group_multiplier / out_group_multiplier) - gas[g] = gas[g] * (1 - ratio) - - removed.temperature = temperature - removed.volume = volume * group_multiplier / out_group_multiplier - update_values() - removed.update_values() - - return removed - -//Removes a volume of gas from the mixture and returns a gas_mixture containing the removed air with the given volume -/datum/gas_mixture/proc/remove_volume(removed_volume) - var/datum/gas_mixture/removed = remove_ratio(removed_volume/(volume*group_multiplier), 1) - removed.volume = removed_volume - return removed - -//Removes moles from the gas mixture, limited by a given flag. Returns a gax_mixture containing the removed air. -/datum/gas_mixture/proc/remove_by_flag(flag, amount) - var/datum/gas_mixture/removed = new - - if(!flag || amount <= 0) - return removed - - var/sum = 0 - for(var/g in gas) - if(gas_data.flags[g] & flag) - sum += gas[g] - - for(var/g in gas) - if(gas_data.flags[g] & flag) - removed.gas[g] = QUANTIZE((gas[g] / sum) * amount) - gas[g] -= removed.gas[g] / group_multiplier - - removed.temperature = temperature - update_values() - removed.update_values() - - return removed - -//Returns the amount of gas that has the given flag, in moles -/datum/gas_mixture/proc/get_by_flag(flag) - . = 0 - for(var/g in gas) - if(gas_data.flags[g] & flag) - . += gas[g] - -//Copies gas and temperature from another gas_mixture. -/datum/gas_mixture/proc/copy_from(const/datum/gas_mixture/sample) - gas = sample.gas.Copy() - temperature = sample.temperature - - update_values() - - return 1 - - -//Checks if we are within acceptable range of another gas_mixture to suspend processing or merge. -/datum/gas_mixture/proc/compare(const/datum/gas_mixture/sample, var/vacuum_exception = 0) - if(!sample) return 0 - - if(vacuum_exception) - // Special case - If one of the two is zero pressure, the other must also be zero. - // This prevents suspending processing when an air-filled room is next to a vacuum, - // an edge case which is particually obviously wrong to players - if(total_moles == 0 && sample.total_moles != 0 || sample.total_moles == 0 && total_moles != 0) - return 0 - - var/list/marked = list() - for(var/g in gas) - if((abs(gas[g] - sample.gas[g]) > MINIMUM_AIR_TO_SUSPEND) && \ - ((gas[g] < (1 - MINIMUM_AIR_RATIO_TO_SUSPEND) * sample.gas[g]) || \ - (gas[g] > (1 + MINIMUM_AIR_RATIO_TO_SUSPEND) * sample.gas[g]))) - return 0 - marked[g] = 1 - - if(abs(return_pressure() - sample.return_pressure()) > MINIMUM_PRESSURE_DIFFERENCE_TO_SUSPEND) - return 0 - - for(var/g in sample.gas) - if(!marked[g]) - if((abs(gas[g] - sample.gas[g]) > MINIMUM_AIR_TO_SUSPEND) && \ - ((gas[g] < (1 - MINIMUM_AIR_RATIO_TO_SUSPEND) * sample.gas[g]) || \ - (gas[g] > (1 + MINIMUM_AIR_RATIO_TO_SUSPEND) * sample.gas[g]))) - return 0 - - if(total_moles > MINIMUM_AIR_TO_SUSPEND) - if((abs(temperature - sample.temperature) > MINIMUM_TEMPERATURE_DELTA_TO_SUSPEND) && \ - ((temperature < (1 - MINIMUM_TEMPERATURE_RATIO_TO_SUSPEND)*sample.temperature) || \ - (temperature > (1 + MINIMUM_TEMPERATURE_RATIO_TO_SUSPEND)*sample.temperature))) - return 0 - - return 1 - -//Rechecks the gas_mixture and adjusts the graphic list if needed. -//Two lists can be passed by reference if you need know specifically which graphics were added and removed. -/datum/gas_mixture/proc/check_tile_graphic(list/graphic_add = null, list/graphic_remove = null) - for(var/obj/effect/gas_overlay/O in graphic) - if(istype(O, /obj/effect/gas_overlay/heat)) - continue - if(gas[O.gas_id] <= gas_data.overlay_limit[O.gas_id]) - LAZYADD(graphic_remove, O) - for(var/g in gas_data.overlay_limit) - //Overlay isn't applied for this gas, check if it's valid and needs to be added. - if(gas[g] > gas_data.overlay_limit[g]) - var/tile_overlay = get_tile_overlay(g) - if(!(tile_overlay in graphic)) - LAZYADD(graphic_add, tile_overlay) - . = 0 - - //If it's hot add something - if(temperature >= CARBON_LIFEFORM_FIRE_RESISTANCE) - var/tile_overlay = get_tile_overlay(GAS_HEAT) - if(!(tile_overlay in graphic)) - LAZYADD(graphic_add, tile_overlay) - - //Apply changes - if(graphic_add && graphic_add.len) - graphic |= graphic_add - . = 1 - if(graphic_remove && graphic_remove.len) - graphic -= graphic_remove - . = 1 - if(graphic.len) - var/pressure_mod = clamp(return_pressure() / ONE_ATMOSPHERE, 0, 2) - for(var/obj/effect/gas_overlay/O in graphic) - if(istype(O, /obj/effect/gas_overlay/heat)) //Heat based - var/new_alpha = clamp(max(125, 255 * ((temperature - CARBON_LIFEFORM_FIRE_RESISTANCE) / CARBON_LIFEFORM_FIRE_RESISTANCE * 4)), 125, 255) - if(new_alpha != O.alpha) - O.update_alpha_animation(new_alpha) - continue - var/concentration_mod = clamp(gas[O.gas_id] / total_moles, 0.1, 1) - var/new_alpha = min(230, round(pressure_mod * concentration_mod * 180, 5)) - if(new_alpha != O.alpha) - O.update_alpha_animation(new_alpha) - -/datum/gas_mixture/proc/get_tile_overlay(gas_id) - if(!LAZYACCESS(tile_overlay_cache, gas_id)) - if(gas_id == GAS_HEAT) //Not a real gas but functionally same thing - LAZYSET(tile_overlay_cache, gas_id, new/obj/effect/gas_overlay/heat(null, GAS_HEAT)) - else - LAZYSET(tile_overlay_cache, gas_id, new/obj/effect/gas_overlay(null, gas_id)) - return tile_overlay_cache[gas_id] - -//Simpler version of merge(), adjusts gas amounts directly and doesn't account for temperature or group_multiplier. -/datum/gas_mixture/proc/add(datum/gas_mixture/right_side) - for(var/g in right_side.gas) - gas[g] += right_side.gas[g] - - update_values() - return 1 - - -//Simpler version of remove(), adjusts gas amounts directly and doesn't account for group_multiplier. -/datum/gas_mixture/proc/subtract(datum/gas_mixture/right_side) - for(var/g in right_side.gas) - gas[g] -= right_side.gas[g] - - update_values() - return 1 - - -//Multiply all gas amounts by a factor. -/datum/gas_mixture/proc/multiply(factor) - for(var/g in gas) - gas[g] *= factor - - update_values() - return 1 - - -//Divide all gas amounts by a factor. -/datum/gas_mixture/proc/divide(factor) - for(var/g in gas) - gas[g] /= factor - - update_values() - return 1 - - -//Shares gas with another gas_mixture based on the amount of connecting tiles and a fixed lookup table. -/datum/gas_mixture/proc/share_ratio(datum/gas_mixture/other, connecting_tiles, share_size = null, one_way = 0) - var/static/list/sharing_lookup_table = list(0.30, 0.40, 0.48, 0.54, 0.60, 0.66) - //Shares a specific ratio of gas between mixtures using simple weighted averages. - var/ratio = sharing_lookup_table[6] - - var/size = max(1, group_multiplier) - if(isnull(share_size)) share_size = max(1, other.group_multiplier) - - var/full_heat_capacity = heat_capacity() - var/s_full_heat_capacity = other.heat_capacity() - - var/list/avg_gas = list() - - for(var/g in gas) - avg_gas[g] += gas[g] * size - - for(var/g in other.gas) - avg_gas[g] += other.gas[g] * share_size - - for(var/g in avg_gas) - avg_gas[g] /= (size + share_size) - - var/temp_avg = 0 - if(full_heat_capacity + s_full_heat_capacity) - temp_avg = (temperature * full_heat_capacity + other.temperature * s_full_heat_capacity) / (full_heat_capacity + s_full_heat_capacity) - - //WOOT WOOT TOUCH THIS AND YOU ARE A RETARD. - if(sharing_lookup_table.len >= connecting_tiles) //6 or more interconnecting tiles will max at 42% of air moved per tick. - ratio = sharing_lookup_table[connecting_tiles] - //WOOT WOOT TOUCH THIS AND YOU ARE A RETARD - - for(var/g in avg_gas) - gas[g] = max(0, (gas[g] - avg_gas[g]) * (1 - ratio) + avg_gas[g]) - if(!one_way) - other.gas[g] = max(0, (other.gas[g] - avg_gas[g]) * (1 - ratio) + avg_gas[g]) - - temperature = max(0, (temperature - temp_avg) * (1-ratio) + temp_avg) - if(!one_way) - other.temperature = max(0, (other.temperature - temp_avg) * (1-ratio) + temp_avg) - - update_values() - other.update_values() - - return compare(other) - - -//A wrapper around share_ratio for spacing gas at the same rate as if it were going into a large airless room. -/datum/gas_mixture/proc/share_space(datum/gas_mixture/unsim_air) - return share_ratio(unsim_air, unsim_air.group_multiplier, max(1, max(group_multiplier + 3, 1) + unsim_air.group_multiplier), one_way = 1) - -//Equalizes a list of gas mixtures. Used for pipe networks. -/proc/equalize_gases(list/datum/gas_mixture/gases) - //Calculate totals from individual components - var/total_volume = 0 - var/total_thermal_energy = 0 - var/total_heat_capacity = 0 - - var/list/total_gas = list() - for(var/datum/gas_mixture/gasmix in gases) - total_volume += gasmix.volume - var/temp_heatcap = gasmix.heat_capacity() - total_thermal_energy += gasmix.temperature * temp_heatcap - total_heat_capacity += temp_heatcap - for(var/g in gasmix.gas) - total_gas[g] += gasmix.gas[g] - - if(total_volume > 0) - var/datum/gas_mixture/combined = new(total_volume) - combined.gas = total_gas - - //Calculate temperature - if(total_heat_capacity > 0) - combined.temperature = total_thermal_energy / total_heat_capacity - combined.update_values() - - //Allow for reactions - combined.react() - - //Average out the gases - for(var/g in combined.gas) - combined.gas[g] /= total_volume - - //Update individual gas_mixtures - for(var/datum/gas_mixture/gasmix in gases) - gasmix.gas = combined.gas.Copy() - gasmix.temperature = combined.temperature - gasmix.multiply(gasmix.volume) - - return 1 - -/datum/gas_mixture/proc/get_mass() - for(var/g in gas) - . += gas[g] * gas_data.molar_mass[g] * group_multiplier - -/datum/gas_mixture/proc/specific_mass() - var/M = get_total_moles() - if(M) - return get_mass()/M diff --git a/code/procs/AStar.dm b/code/procs/AStar.dm deleted file mode 100644 index b4767e65f4bab..0000000000000 --- a/code/procs/AStar.dm +++ /dev/null @@ -1,106 +0,0 @@ -//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:31 - -/* -A Star pathfinding algorithm -Returns a list of tiles forming a path from A to B, taking dense objects as well as walls, and the orientation of -windows along the route into account. -Use: -your_list = AStar(start location, end location, adjacent turf proc, distance proc) -For the adjacent turf proc i wrote: -/turf/proc/AdjacentTurfs -And for the distance one i wrote: -/turf/proc/Distance -So an example use might be: - -src.path_list = AStar(src.loc, target.loc, /turf/proc/AdjacentTurfs, /turf/proc/Distance) - -Note: The path is returned starting at the END node, so i wrote reverselist to reverse it for ease of use. - -src.path_list = reverselist(src.pathlist) - -Then to start on the path, all you need to do it: -Step_to(src, src.path_list[1]) -src.path_list -= src.path_list[1] or equivilent to remove that node from the list. - -Optional extras to add on (in order): -MaxNodes: The maximum number of nodes the returned path can be (0 = infinite) -Maxnodedepth: The maximum number of nodes to search (default: 30, 0 = infinite) -Mintargetdist: Minimum distance to the target before path returns, could be used to get -near a target, but not right to it - for an AI mob with a gun, for example. -Minnodedist: Minimum number of nodes to return in the path, could be used to give a path a minimum -length to avoid portals or something i guess?? Not that they're counted right now but w/e. -*/ - -// Modified to provide ID argument - supplied to 'adjacent' proc, defaults to null -// Used for checking if route exists through a door which can be opened - -// Also added 'exclude' turf to avoid travelling over; defaults to null - -/PathNode - var/datum/position - var/PathNode/previous_node - var/best_estimated_cost - var/estimated_cost - var/known_cost - var/cost - var/nodes_traversed - - -/PathNode/New(_position, _previous_node, _known_cost, _cost, _nodes_traversed) - position = _position - previous_node = _previous_node - known_cost = _known_cost - cost = _cost - estimated_cost = cost + known_cost - best_estimated_cost = estimated_cost - nodes_traversed = _nodes_traversed - - -/proc/PathWeightCompare(PathNode/a, PathNode/b) - return a.estimated_cost - b.estimated_cost - - -/proc/AStar(start, end, adjacent, dist, max_nodes, max_node_depth = 30, min_target_dist = 0, min_node_dist, id, datum/exclude) - var/PriorityQueue/open = new /PriorityQueue (/proc/PathWeightCompare) - var/list/closed = list() - var/list/path - var/list/path_node_by_position = list() - start = get_turf(start) - if(!start) - return 0 - open.Enqueue(new /PathNode(start, null, 0, call(start, dist)(end), 0)) - while(!open.IsEmpty() && !path) - var/PathNode/current = open.Dequeue() - closed.Add(current.position) - if(current.position == end || call(current.position, dist)(end) <= min_target_dist) - path = new /list(current.nodes_traversed + 1) - path[path.len] = current.position - var/index = path.len - 1 - while(current.previous_node) - current = current.previous_node - path[index--] = current.position - break - if(min_node_dist && max_node_depth) - if(call(current.position, min_node_dist)(end) + current.nodes_traversed >= max_node_depth) - continue - if(max_node_depth) - if(current.nodes_traversed >= max_node_depth) - continue - for(var/datum/datum in call(current.position, adjacent)(id)) - if(datum == exclude) - continue - var/best_estimated_cost = current.estimated_cost + call(current.position, dist)(datum) - //handle removal of sub-par positions - if(datum in path_node_by_position) - var/PathNode/target = path_node_by_position[datum] - if(target.best_estimated_cost) - if(best_estimated_cost + call(datum, dist)(end) < target.best_estimated_cost) - open.Remove(target) - else - continue - var/PathNode/next_node = new (datum, current, best_estimated_cost, call(datum, dist)(end), current.nodes_traversed + 1) - path_node_by_position[datum] = next_node - open.Enqueue(next_node) - if(max_nodes && open.Length() > max_nodes) - open.Remove(open.Length()) - return path diff --git a/code/procs/announce.dm b/code/procs/announce.dm deleted file mode 100644 index 8a58c1e5153ef..0000000000000 --- a/code/procs/announce.dm +++ /dev/null @@ -1,179 +0,0 @@ -var/global/datum/announcement/priority/priority_announcement = new(do_log = 0) -var/global/datum/announcement/priority/command/command_announcement = new(do_log = 0, do_newscast = 1) -var/global/datum/announcement/minor/minor_announcement = new(new_sound = 'sound/AI/commandreport.ogg',) - -/datum/announcement - var/title = "Attention" - var/announcer = "" - var/log = 0 - var/sound - var/newscast = 0 - var/channel_name = "Announcements" - var/announcement_type = "Announcement" - -/datum/announcement/priority - title = "Priority Announcement" - announcement_type = "Priority Announcement" - -/datum/announcement/priority/security - title = "Security Announcement" - announcement_type = "Security Announcement" - -/datum/announcement/New(var/do_log = 0, var/new_sound = null, var/do_newscast = 0) - sound = new_sound - log = do_log - newscast = do_newscast - -/datum/announcement/priority/command/New(var/do_log = 1, var/new_sound = 'sound/misc/notice2.ogg', var/do_newscast = 0) - ..(do_log, new_sound, do_newscast) - title = "[GLOB.using_map.boss_name] Update" - announcement_type = "[GLOB.using_map.boss_name] Update" - -/datum/announcement/proc/Announce(var/message as text, var/new_title = "", var/new_sound = null, var/do_newscast = newscast, var/msg_sanitized = 0, var/list/zlevels = GLOB.using_map.contact_levels, var/radio_mode = GLOB.using_map.use_radio_announcement) - if(!message) - return - var/message_title = new_title ? new_title : title - var/message_sound = new_sound ? new_sound : sound - var/zlevel = LAZYLEN(zlevels) ? pick(zlevels) : 1 - - if(!msg_sanitized) - message = sanitize(message, extra = 0) - message_title = sanitize(message_title) - - var/msg = radio_mode ? FormRadioMessage(message, message_title, zlevel) : FormMessage(message, message_title) - for(var/mob/M in GLOB.player_list) - if((get_z(M) in (zlevels | GLOB.using_map.admin_levels)) && !istype(M,/mob/new_player) && !isdeaf(M)) - to_chat(M, msg) - if(message_sound && M.client.get_preference_value(/datum/client_preference/play_announcement_sfx) == GLOB.PREF_YES) - sound_to(M, message_sound) - - if(do_newscast) - NewsCast(message, zlevels) - - if(log) - log_say("[key_name(usr)] has made \a [announcement_type]: [message_title] - [message] - [announcer]") - message_admins("[key_name_admin(usr)] has made \a [announcement_type].", 1) - -/datum/announcement/proc/FormMessage(message as text, message_title as text) - . = "

                  [message_title]

                  " - . += "
                  [message]" - if (announcer) - . += "
                  -[html_encode(announcer)]" - -/datum/announcement/minor/FormMessage(message as text, message_title as text) - . = "[message]" - -/datum/announcement/priority/FormMessage(message as text, message_title as text) - . = "

                  [message_title]

                  " - . += "
                  [message]" - if(announcer) - . += "
                  -[html_encode(announcer)]" - . += "
                  " - -/datum/announcement/priority/command/FormMessage(message as text, message_title as text) - . = "

                  [GLOB.using_map.boss_name] Update

                  " - if (message_title) - . += "

                  [message_title]

                  " - - . += "
                  [message]
                  " - . += "
                  " - -/datum/announcement/priority/security/FormMessage(message as text, message_title as text) - . = "[message_title]" - . += "
                  [message]" - - -/datum/announcement/proc/NewsCast(message, list/zlevels) - if (!message || !islist(zlevels)) - return - var/datum/feed_network/network - for (var/datum/feed_network/candidate as anything in news_network) - if (zlevels[1] in candidate.z_levels) - network = candidate - break - if (!network) - return - var/datum/feed_channel/channel - for (var/datum/feed_channel/candidate as anything in network.network_channels) - if (candidate.channel_name == channel_name) - channel = candidate - break - if (!channel) - channel = new - channel.channel_name = channel_name - channel.author = announcer - channel.locked = TRUE - channel.is_admin_channel = TRUE - network.network_channels += channel - network.SubmitArticle(message, announcer || channel.author, channel_name, null, FALSE, announcement_type) - - -/proc/GetNameAndAssignmentFromId(var/obj/item/card/id/I) - // Format currently matches that of newscaster feeds: Registered Name (Assigned Rank) - if (!I) - return "Unknown" - if (I.assignment) - return "[I.registered_name] ([I.assignment])" - return "[I.registered_name]" - -/proc/level_seven_announcement() - GLOB.using_map.level_x_biohazard_announcement(7) - -/proc/ion_storm_announcement(list/affecting_z) - command_announcement.Announce("It has come to our attention that the [station_name()] passed through an ion storm. Please monitor all electronic equipment for malfunctions.", "Anomaly Alert", zlevels = affecting_z) - -/proc/AnnounceArrival(var/mob/living/carbon/human/character, var/datum/job/job, var/join_message) - if(!istype(job) || !job.announced) - return - if (GAME_STATE != RUNLEVEL_GAME) - return - var/rank = job.title - if(character.mind.role_alt_title) - rank = character.mind.role_alt_title - - AnnounceArrivalSimple(character.real_name, rank, join_message, GET_ANNOUNCEMENT_FREQ(job)) - -/proc/AnnounceArrivalSimple(var/name, var/rank = "visitor", var/join_message = "has arrived on the [station_name()]", var/frequency) - GLOB.global_announcer.autosay("[name], [rank], [join_message].", "Arrivals Announcement Computer", frequency) - -/proc/get_announcement_frequency(var/datum/job/job) - // During red alert all jobs are announced on main frequency. - var/decl/security_state/security_state = decls_repository.get_decl(GLOB.using_map.security_state) - if (security_state.current_security_level_is_same_or_higher_than(security_state.high_security_level)) - return "Common" - - if(job.department_flag & (COM | CIV | MSC)) - return "Common" - if(job.department_flag & SUP) - return "Supply" - if(job.department_flag & SPT) - return "Command" - if(job.department_flag & SEC) - return "Security" - if(job.department_flag & ENG) - return "Engineering" - if(job.department_flag & MED) - return "Medical" - if(job.department_flag & SCI) - return "Science" - if(job.department_flag & SRV) - return "Service" - if(job.department_flag & EXP) - return "Exploration" - return "Common" - -/////// ANNOUNCEMENT PROCS VIA RADIO /////// -/datum/announcement/proc/FormRadioMessage(message as text, message_title as text, zlevel) - GLOB.global_announcer.autosay("[title]: [message]", announcer ? announcer : ANNOUNCE_NAME,, zlevel) - -/datum/announcement/minor/FormRadioMessage(message as text, message_title as text, zlevel) - GLOB.global_announcer.autosay(message, ANNOUNCE_NAME,, zlevel) - -/datum/announcement/priority/FormRadioMessage(message as text, message_title as text, zlevel) - GLOB.global_announcer.autosay("[message_title]: [message]", announcer ? announcer : ANNOUNCE_NAME,, zlevel) - -/datum/announcement/priority/command/FormRadioMessage(message as text, message_title as text, zlevel) - GLOB.global_announcer.autosay("[GLOB.using_map.boss_name] Update[message_title ? " — [message_title]" : ""]: [message]", ANNOUNCE_NAME,, zlevel) - -/datum/announcement/priority/security/FormRadioMessage(message as text, message_title as text, zlevel) - GLOB.global_announcer.autosay("[message_title]: [message]", ANNOUNCE_NAME,, zlevel) diff --git a/code/procs/dbcore.dm b/code/procs/dbcore.dm deleted file mode 100644 index 8673c04a5d7dd..0000000000000 --- a/code/procs/dbcore.dm +++ /dev/null @@ -1,203 +0,0 @@ -//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:31 - -//cursors -#define Default_Cursor 0 -#define Client_Cursor 1 -#define Server_Cursor 2 -//conversions -#define TEXT_CONV 1 -#define RSC_FILE_CONV 2 -#define NUMBER_CONV 3 -//column flag values: -#define IS_NUMERIC 1 -#define IS_BINARY 2 -#define IS_NOT_NULL 4 -#define IS_PRIMARY_KEY 8 -#define IS_UNSIGNED 16 -//types -#define TINYINT 1 -#define SMALLINT 2 -#define MEDIUMINT 3 -#define INTEGER 4 -#define BIGINT 5 -#define DECIMAL 6 -#define FLOAT 7 -#define DOUBLE 8 -#define DATE 9 -#define DATETIME 10 -#define TIMESTAMP 11 -#define TIME 12 -#define STRING 13 -#define BLOB 14 - - -/DBConnection - var/_db_con // This variable contains a reference to the actual database connection. - var/dbi // This variable is a string containing the DBI MySQL requires. - var/user // This variable contains the username data. - var/password // This variable contains the password data. - var/default_cursor // This contains the default database cursor data. - // - var/server = "" - var/port = 3306 - -/DBConnection/New(dbi_handler,username,password_handler,cursor_handler) - src.dbi = dbi_handler - src.user = username - src.password = password_handler - src.default_cursor = cursor_handler - _db_con = _dm_db_new_con() - -/DBConnection/proc/Connect(dbi_handler=src.dbi,user_handler=src.user,password_handler=src.password,cursor_handler) - if(!sqlenabled) - return FALSE - if(!src) - return FALSE - cursor_handler = src.default_cursor - if(!cursor_handler) cursor_handler = Default_Cursor - return _dm_db_connect(_db_con,dbi_handler,user_handler,password_handler,cursor_handler,null) - -/DBConnection/proc/Disconnect() return _dm_db_close(_db_con) - -/DBConnection/proc/IsConnected() - if(!sqlenabled) - return FALSE - var/success = _dm_db_is_connected(_db_con) - return success - -/DBConnection/proc/Quote(str) return _dm_db_quote(_db_con,str) - -/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) -/DBConnection/proc/NewQuery(sql_query,cursor_handler=src.default_cursor) return new/DBQuery(sql_query,src,cursor_handler) - - -/DBQuery/New(sql_query,DBConnection/connection_handler,cursor_handler) - if(sql_query) src.sql = sql_query - if(connection_handler) src.db_connection = connection_handler - if(cursor_handler) src.default_cursor = cursor_handler - _db_query = _dm_db_new_query() - return ..() - - -/DBQuery - var/sql // The sql query being executed. - var/default_cursor - var/list/columns //list of DB Columns populated by Columns() - var/list/conversions - var/list/item[0] //list of data values populated by NextRow() - - var/DBConnection/db_connection - var/_db_query - -/DBQuery/proc/Connect(DBConnection/connection_handler) src.db_connection = connection_handler - -/DBQuery/proc/Execute(sql_query=src.sql,cursor_handler=default_cursor) - Close() - return _dm_db_execute(_db_query,sql_query,db_connection._db_con,cursor_handler,null) - -/DBQuery/proc/NextRow() return _dm_db_next_row(_db_query,item,conversions) - -/DBQuery/proc/RowsAffected() return _dm_db_rows_affected(_db_query) - -/DBQuery/proc/RowCount() return _dm_db_row_count(_db_query) - -/DBQuery/proc/ErrorMsg() return _dm_db_error_msg(_db_query) - -/DBQuery/proc/Columns() - if(!columns) - columns = _dm_db_columns(_db_query,/DBColumn) - return columns - -/DBQuery/proc/GetRowData() - var/list/columns = Columns() - var/list/results - if(columns.len) - results = list() - for(var/C in columns) - results+=C - var/DBColumn/cur_col = columns[C] - results[C] = src.item[(cur_col.position+1)] - return results - -/DBQuery/proc/Close() - item.len = 0 - columns = null - conversions = null - return _dm_db_close(_db_query) - -/DBQuery/proc/Quote(str) - return db_connection.Quote(str) - -/DBQuery/proc/SetConversion(column,conversion) - if(istext(column)) column = columns.Find(column) - if(!conversions) conversions = new/list(column) - else if(conversions.len < column) conversions.len = column - conversions[column] = conversion - - -/DBColumn - var/name - var/table - var/position //1-based index into item data - var/sql_type - var/flags - var/length - var/max_length - -/DBColumn/New(name_handler,table_handler,position_handler,type_handler,flag_handler,length_handler,max_length_handler) - src.name = name_handler - src.table = table_handler - src.position = position_handler - src.sql_type = type_handler - src.flags = flag_handler - src.length = length_handler - src.max_length = max_length_handler - return ..() - - -/DBColumn/proc/SqlTypeName(type_handler=src.sql_type) - switch(type_handler) - if(TINYINT) return "TINYINT" - if(SMALLINT) return "SMALLINT" - if(MEDIUMINT) return "MEDIUMINT" - if(INTEGER) return "INTEGER" - if(BIGINT) return "BIGINT" - if(FLOAT) return "FLOAT" - if(DOUBLE) return "DOUBLE" - if(DATE) return "DATE" - if(DATETIME) return "DATETIME" - if(TIMESTAMP) return "TIMESTAMP" - if(TIME) return "TIME" - if(STRING) return "STRING" - if(BLOB) return "BLOB" - - -#undef Default_Cursor -#undef Client_Cursor -#undef Server_Cursor -#undef TEXT_CONV -#undef RSC_FILE_CONV -#undef NUMBER_CONV -#undef IS_NUMERIC -#undef IS_BINARY -#undef IS_NOT_NULL -#undef IS_PRIMARY_KEY -#undef IS_UNSIGNED -#undef TINYINT -#undef SMALLINT -#undef MEDIUMINT -#undef INTEGER -#undef BIGINT -#undef DECIMAL -#undef FLOAT -#undef DOUBLE -#undef DATE -#undef DATETIME -#undef TIMESTAMP -#undef TIME -#undef STRING -#undef BLOB diff --git a/code/procs/hud.dm b/code/procs/hud.dm deleted file mode 100644 index 3bdfa2fb1c7d3..0000000000000 --- a/code/procs/hud.dm +++ /dev/null @@ -1,93 +0,0 @@ -/* Using the HUD procs is simple. Call these procs in the life.dm of the intended mob. -Use the regular_hud_updates() proc before process_med_hud(mob) or process_sec_hud(mob) so -the HUD updates properly! */ - -// hud overlay image type, used for clearing client.images precisely -/image/hud_overlay - appearance_flags = DEFAULT_APPEARANCE_FLAGS | RESET_COLOR|RESET_TRANSFORM|KEEP_APART - layer = ABOVE_HUMAN_LAYER - plane = DEFAULT_PLANE - -//Medical HUD outputs. Called by the Life() proc of the mob using it, usually. -/proc/process_med_hud(var/mob/M, var/local_scanner, var/mob/Alt) - if(!can_process_hud(M)) - return - - var/datum/arranged_hud_process/P = arrange_hud_process(M, Alt, GLOB.med_hud_users) - for(var/mob/living/carbon/human/patient in P.Mob.in_view(P.Turf)) - - if(patient.is_invisible_to(P.Mob)) - continue - - if(local_scanner) - P.Client.images += patient.hud_list[HEALTH_HUD] - P.Client.images += patient.hud_list[STATUS_HUD] - else - if(hassensorlevel(patient, SUIT_SENSOR_VITAL)) - P.Client.images += patient.hud_list[HEALTH_HUD] - if(hassensorlevel(patient, SUIT_SENSOR_BINARY)) - P.Client.images += patient.hud_list[LIFE_HUD] - -//Security HUDs. Pass a value for the second argument to enable implant viewing or other special features. -/proc/process_sec_hud(var/mob/M, var/advanced_mode, var/mob/Alt) - if(!can_process_hud(M)) - return - var/datum/arranged_hud_process/P = arrange_hud_process(M, Alt, GLOB.sec_hud_users) - for(var/mob/living/carbon/human/perp in P.Mob.in_view(P.Turf)) - - if(perp.is_invisible_to(P.Mob)) - continue - - P.Client.images += perp.hud_list[ID_HUD] - if(advanced_mode && !perp.fake_name) - P.Client.images += perp.hud_list[WANTED_HUD] - P.Client.images += perp.hud_list[IMPTRACK_HUD] - P.Client.images += perp.hud_list[IMPLOYAL_HUD] - P.Client.images += perp.hud_list[IMPCHEM_HUD] - -/proc/process_jani_hud(var/mob/M, var/mob/Alt) - var/datum/arranged_hud_process/P = arrange_hud_process(M, Alt, GLOB.jani_hud_users) - for (var/obj/effect/decal/cleanable/dirtyfloor in view(P.Mob)) - if(P.Client) - P.Client.images += dirtyfloor.hud_overlay - -/datum/arranged_hud_process - var/client/Client - var/mob/Mob - var/turf/Turf - -/proc/arrange_hud_process(var/mob/M, var/mob/Alt, var/list/hud_list) - hud_list |= M - var/datum/arranged_hud_process/P = new - P.Client = M.client - P.Mob = Alt ? Alt : M - P.Turf = get_turf(P.Mob) - return P - -/proc/can_process_hud(var/mob/M) - if(!M) - return 0 - if(!M.client) - return 0 - if(M.stat != CONSCIOUS) - return 0 - return 1 - -//Deletes the current HUD images so they can be refreshed with new ones. -/mob/proc/handle_hud_glasses() //Used in the life.dm of mobs that can use HUDs. - if(client) - for(var/image/hud_overlay/hud in client.images) - client.images -= hud - GLOB.med_hud_users -= src - GLOB.sec_hud_users -= src - GLOB.jani_hud_users -= src - -/mob/proc/in_view(var/turf/T) - return view(T) - -/mob/observer/eye/in_view(var/turf/T) - var/list/viewed = new - for(var/mob/living/carbon/human/H in SSmobs.mob_list) - if(get_dist(H, T) <= 7) - viewed += H - return viewed diff --git a/code/procs/radio.dm b/code/procs/radio.dm deleted file mode 100644 index 4c62b0ae8efe8..0000000000000 --- a/code/procs/radio.dm +++ /dev/null @@ -1,89 +0,0 @@ -/proc/register_radio(source, old_frequency, new_frequency, radio_filter) - if(old_frequency) - radio_controller.remove_object(source, old_frequency) - if(new_frequency) - return radio_controller.add_object(source, new_frequency, radio_filter) - -/proc/unregister_radio(source, frequency) - if(radio_controller) - radio_controller.remove_object(source, frequency) - -/proc/get_frequency_default_name(var/display_freq) - var/freq_text - - // the name of the channel - if(display_freq in ANTAG_FREQS) - freq_text = "#unkn" - else - for(var/channel in radiochannels) - if(radiochannels[channel] == display_freq) - freq_text = channel - break - - // --- 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) - - return freq_text - -/datum/reception - var/obj/machinery/message_server/message_server = null - var/telecomms_reception = TELECOMMS_RECEPTION_NONE - var/message = "" - -/datum/receptions - var/obj/machinery/message_server/message_server = null - var/sender_reception = TELECOMMS_RECEPTION_NONE - var/list/receiver_reception = new - -/proc/get_message_server(z) - if(message_servers) - var/list/zlevels = GLOB.using_map.contact_levels - if(z) - zlevels = GetConnectedZlevels(z) - for (var/obj/machinery/message_server/MS in message_servers) - if(MS.active && (MS.z in zlevels)) - return MS - return null - -/proc/check_signal(var/datum/signal/signal) - return signal && signal.data["done"] - -/proc/get_sender_reception(var/atom/sender, var/datum/signal/signal) - return check_signal(signal) ? TELECOMMS_RECEPTION_SENDER : TELECOMMS_RECEPTION_NONE - -/proc/get_receiver_reception(var/receiver, var/datum/signal/signal) - if(receiver && check_signal(signal)) - var/turf/pos = get_turf(receiver) - if(pos && (pos.z in signal.data["level"])) - return TELECOMMS_RECEPTION_RECEIVER - return TELECOMMS_RECEPTION_NONE - -/proc/get_reception(var/atom/sender, var/receiver, var/message = "", var/do_sleep = 1) - var/datum/reception/reception = new - - // check if telecomms I/O route 1459 is stable - reception.message_server = get_message_server() - - var/datum/signal/signal = sender.telecomms_process(do_sleep) // Be aware that this proc calls sleep, to simulate transmition delays - reception.telecomms_reception |= get_sender_reception(sender, signal) - reception.telecomms_reception |= get_receiver_reception(receiver, signal) - reception.message = signal && signal.data["compression"] > 0 ? Gibberish(message, signal.data["compression"] + 50) : message - - return reception - -/proc/get_receptions(var/atom/sender, var/list/atom/receivers, var/do_sleep = 1) - var/datum/receptions/receptions = new - receptions.message_server = get_message_server() - - var/datum/signal/signal - if(sender) - signal = sender.telecomms_process(do_sleep) - receptions.sender_reception = get_sender_reception(sender, signal) - - for(var/atom/receiver in receivers) - if(!signal) - signal = receiver.telecomms_process() - receptions.receiver_reception[receiver] = get_receiver_reception(receiver, signal) - - return receptions diff --git a/code/stylesheet.dm b/code/stylesheet.dm deleted file mode 100644 index d9bbad3186d97..0000000000000 --- a/code/stylesheet.dm +++ /dev/null @@ -1,146 +0,0 @@ -/client/script = {""} diff --git a/code/unit_tests/_defines.dm b/code/unit_tests/_defines.dm deleted file mode 100644 index ae938c377b45c..0000000000000 --- a/code/unit_tests/_defines.dm +++ /dev/null @@ -1 +0,0 @@ -#define MAX_UNIT_TEST_RUN_TIME 2 MINUTES diff --git a/code/unit_tests/_includes.dm b/code/unit_tests/_includes.dm deleted file mode 100644 index 7606414282f47..0000000000000 --- a/code/unit_tests/_includes.dm +++ /dev/null @@ -1,7 +0,0 @@ -#ifdef UNIT_TEST - #include "extension_tests.dm" - #include "override_tests.dm" - #include "~unit_test_overrides.dm" - #include "~unit_test_subsystems.dm" - #include "~unit_test_types.dm" -#endif \ No newline at end of file diff --git a/code/unit_tests/_template.dm b/code/unit_tests/_template.dm deleted file mode 100644 index 556941cb1ce58..0000000000000 --- a/code/unit_tests/_template.dm +++ /dev/null @@ -1,38 +0,0 @@ -/* - * - * Unit Test Template - * This file is not used. - * - */ - -/datum/unit_test/template - name = "Test Template - Change My name" - template = /datum/unit_test/template // Set this var equal to the test path to treat it as a template, i.e. it should not be run - async = 1 // Set if we should continue testing elsewhere and come back and check on the results. - - -/datum/unit_test/template/start_test() - // This must return something, if it's null the unit_test runner will think we runtimed. - // If your test requires any kind of delay use async so we can finish tests faster. - // Be sure and have a pass/fail procs in here if it's not using async. - - if(0) - fail("Zero is somehow True, that sucks") - else - pass("Zero is false, yay") - - - return 1 - -/datum/unit_test/template/check_result() - // Only Ran if async is set. Use this proc for checking back if the test passed or not. - // Return 0 if we need to come back again and check this. - // Return 1 if the test is complete. - - // - - pass("Winner is you") - - return 1 - -// ============================================================================ diff --git a/code/unit_tests/alt_appearances_test.dm b/code/unit_tests/alt_appearances_test.dm deleted file mode 100644 index ce218a984f892..0000000000000 --- a/code/unit_tests/alt_appearances_test.dm +++ /dev/null @@ -1,49 +0,0 @@ -/datum/unit_test/alt_appearance_cardborg_shall_have_base_backpack_variant - name = "ALT APPEARANCE: Cardborg shall have base backpack variant" - -/datum/unit_test/alt_appearance_cardborg_shall_have_base_backpack_variant/start_test() - for(var/ca_type in subtypesof(/decl/cardborg_appearance)) - var/decl/cardborg_appearance/ca = ca_type - var/obj/item/storage/backpack/backpack_type = initial(ca.backpack_type) - if(backpack_type == /obj/item/storage/backpack) - pass("Found a cardborg appearance using the base /obj/item/storage/backpack backpack.") - return 1 - - fail("Did not find a cardborg appearance using the base /obj/item/storage/backpack backpack.") - return 1 - -/datum/unit_test/alt_appearance_cardborg_all_icon_states_shall_exist - name = "ALT APPEARANCE: Cardborg shall have base backpack variant" - -/datum/unit_test/alt_appearance_cardborg_all_icon_states_shall_exist/start_test() - var/list/existing_icon_states = icon_states('icons/mob/robots.dmi') - var/failed = FALSE - - for(var/ca_type in subtypesof(/decl/cardborg_appearance)) - var/decl/cardborg_appearance/ca = ca_type - var/icon_state = initial(ca.icon_state) - if(!(icon_state in existing_icon_states)) - log_unit_test("Icon state [icon_state] is missing.") - failed = TRUE - - if(failed) - fail("One or more icon states are missing.") - else - pass("All references to icon states exists.") - return 1 - -/datum/unit_test/alt_appearance_cardborg_shall_have_unique_backpack_types - name = "ALT APPEARANCE: Cardborg shall have unique backpack types" - -/datum/unit_test/alt_appearance_cardborg_shall_have_unique_backpack_types/start_test() - var/list/backpack_types = list() - for(var/ca_type in subtypesof(/decl/cardborg_appearance)) - var/decl/cardborg_appearance/ca = ca_type - group_by(backpack_types, initial(ca.backpack_type), ca) - - var/number_of_issues = number_of_issues(backpack_types, "Backpack Types") - if(number_of_issues) - fail("[number_of_issues] duplicate backpack type\s exist.") - else - pass("All backpack types are unique.") - return 1 diff --git a/code/unit_tests/area_tests.dm b/code/unit_tests/area_tests.dm deleted file mode 100644 index 5f361fdf7f5e3..0000000000000 --- a/code/unit_tests/area_tests.dm +++ /dev/null @@ -1,99 +0,0 @@ -/datum/unit_test/areas_shall_be_coherent - name = "AREA: Areas shall be coherent" - -/datum/unit_test/areas_shall_be_coherent/start_test() - var/incoherent_areas = 0 - for(var/area/A) - if(!A.contents.len) - continue - if(A.type in GLOB.using_map.area_coherency_test_exempt_areas) - continue - if(is_path_in_list(A.type, GLOB.using_map.area_coherency_test_exempted_root_areas)) - continue - var/list/area_turfs = list() - for(var/turf/T in A) - area_turfs += T - - var/list/sub_area_turfs = list() - var/expected_number_of_sub_areas = GLOB.using_map.area_coherency_test_subarea_count[A.type] || 1 - do - var/turf/T = area_turfs[1] - sub_area_turfs += T - area_turfs -= get_turfs_fill(T) - while(area_turfs.len) - - if(sub_area_turfs.len != expected_number_of_sub_areas) - incoherent_areas++ - log_bad("[log_info_line(A)] is incoherent. Expected [expected_number_of_sub_areas] subarea\s, fill gave [sub_area_turfs.len]. Origin turfs:") - for(var/T in sub_area_turfs) - log_bad(log_info_line(T)) - - if(incoherent_areas) - fail("Found [incoherent_areas] incoherent area\s.") - else - pass("All areas are coherent.") - - return 1 - -#define SHOULD_CHECK_TURF(turf_to_check) if(turf_to_check && turf_to_check.loc == T.loc && !(turf_to_check in .)) { turfs_to_check.Push(turf_to_check) } -/datum/unit_test/areas_shall_be_coherent/proc/get_turfs_fill(var/turf/origin) - . = list() - var/datum/stack/turfs_to_check = new() - turfs_to_check.Push(origin) - while(!turfs_to_check.is_empty()) - var/turf/T = turfs_to_check.Pop() - . |= T - var/turf/neighbour - for(var/direction in GLOB.cardinal) - neighbour = get_step(T, direction) - SHOULD_CHECK_TURF(neighbour) -#ifdef MULTIZAS - neighbour = GetAbove(T) - SHOULD_CHECK_TURF(neighbour) - neighbour = GetBelow(T) - SHOULD_CHECK_TURF(neighbour) -#endif - -#undef SHOULD_CHECK_TURF - -/datum/unit_test/areas_shall_be_pure - name = "AREA: Areas shall be pure" - -/datum/unit_test/areas_shall_be_pure/start_test() - var/impure_areas = 0 - for(var/area/A) - if(!A.contents.len) - continue - if(A.type in GLOB.using_map.area_purity_test_exempt_areas) - continue - if(A.name != initial(A.name)) - log_bad("[log_info_line(A)] has an edited name.") - impure_areas++ - - if(impure_areas) - fail("Found [impure_areas] impure area\s.") - else - pass("All areas are pure.") - - return 1 - -/datum/unit_test/areas_shall_be_used - name = "AREA: Areas shall be used" - -/datum/unit_test/areas_shall_be_used/start_test() - var/unused_areas = 0 - for(var/area_type in subtypesof(/area)) - if(area_type in GLOB.using_map.area_usage_test_exempted_areas) - continue - if(is_path_in_list(area_type, GLOB.using_map.area_usage_test_exempted_root_areas)) - continue - var/area/located_area = locate(area_type) - if(located_area && !located_area.z) - log_bad("[log_info_line(located_area)] is unused.") - unused_areas++ - - if(unused_areas) - fail("Found [unused_areas] unused area\s.") - else - pass("All areas are used.") - return 1 \ No newline at end of file diff --git a/code/unit_tests/atmospherics_tests.dm b/code/unit_tests/atmospherics_tests.dm deleted file mode 100644 index 1a58c7afe226e..0000000000000 --- a/code/unit_tests/atmospherics_tests.dm +++ /dev/null @@ -1,318 +0,0 @@ -/* - Unit tests for ATMOSPHERICS primitives -*/ -#define ALL_GASIDS gas_data.gases - -/datum/unit_test/atmos_machinery - template = /datum/unit_test/atmos_machinery - var/list/test_cases = list() - -/datum/unit_test/atmos_machinery/proc/create_gas_mixes(gas_mix_data) - var/list/gas_mixes = list() - for(var/mix_name in gas_mix_data) - var/list/mix_data = gas_mix_data[mix_name] - - var/datum/gas_mixture/gas_mix = new (CELL_VOLUME, mix_data["temperature"]) - - var/list/initial_gas = mix_data["initial_gas"] - if(initial_gas.len) - var/list/gas_args = list() - for(var/gasid in initial_gas) - gas_args += gasid - gas_args += initial_gas[gasid] - gas_mix.adjust_multi(arglist(gas_args)) - - gas_mixes[mix_name] = gas_mix - return gas_mixes - -/datum/unit_test/atmos_machinery/proc/gas_amount_changes(var/list/before_gas_mixes, var/list/after_gas_mixes) - var/list/result = list() - for(var/mix_name in before_gas_mixes & after_gas_mixes) - var/change = list() - - var/datum/gas_mixture/before = before_gas_mixes[mix_name] - var/datum/gas_mixture/after = after_gas_mixes[mix_name] - - var/list/all_gases = before.gas | after.gas - for(var/gasid in all_gases) - change[gasid] = after.get_gas(gasid) - before.get_gas(gasid) - - result[mix_name] = change - - return result - -/datum/unit_test/atmos_machinery/proc/check_moles_conserved(var/case_name, var/list/before_gas_mixes, var/list/after_gas_mixes) - var/failed = FALSE - for(var/gasid in gas_data.gases) - var/before = 0 - for(var/gasmix in before_gas_mixes) - var/datum/gas_mixture/G = before_gas_mixes[gasmix] - before += G.get_gas(gasid) - - var/after = 0 - for(var/gasmix in after_gas_mixes) - var/datum/gas_mixture/G = after_gas_mixes[gasmix] - after += G.get_gas(gasid) - - if(abs(before - after) > ATMOS_PRECISION) - fail("[case_name]: expected [before] moles of [gasid], found [after] moles.") - failed |= TRUE - - if(!failed) - pass("[case_name]: conserved moles of each gas ID.") - -/datum/unit_test/atmos_machinery/conserve_moles - template = /datum/unit_test/atmos_machinery/conserve_moles - test_cases = list( - uphill = list( - source = list( - initial_gas = list( - GAS_OXYGEN = 5, - GAS_NITROGEN = 10, - GAS_CO2 = 5, - GAS_PHORON = 10, - GAS_N2O = 5, - ), - temperature = T20C - 5, - ), - sink = list( - initial_gas = list( - GAS_OXYGEN = 10, - GAS_NITROGEN = 20, - GAS_CO2 = 10, - GAS_PHORON = 20, - GAS_N2O = 10, - ), - temperature = T20C + 5, - ) - ), - downhill = list( - source = list( - initial_gas = list( - GAS_OXYGEN = 10, - GAS_NITROGEN = 20, - GAS_CO2 = 10, - GAS_PHORON = 20, - GAS_N2O = 10, - ), - temperature = T20C + 5, - ), - sink = list( - initial_gas = list( - GAS_OXYGEN = 5, - GAS_NITROGEN = 10, - GAS_CO2 = 5, - GAS_PHORON = 10, - GAS_N2O = 5, - ), - temperature = T20C - 5, - ), - ), - flat = list( - source = list( - initial_gas = list( - GAS_OXYGEN = 10, - GAS_NITROGEN = 20, - GAS_CO2 = 10, - GAS_PHORON = 20, - GAS_N2O = 10, - ), - temperature = T20C, - ), - sink = list( - initial_gas = list( - GAS_OXYGEN = 10, - GAS_NITROGEN = 20, - GAS_CO2 = 10, - GAS_PHORON = 20, - GAS_N2O = 10, - ), - temperature = T20C, - ), - ), - vacuum_sink = list( - source = list( - initial_gas = list( - GAS_OXYGEN = 10, - GAS_NITROGEN = 20, - GAS_CO2 = 10, - GAS_PHORON = 20, - GAS_N2O = 10, - ), - temperature = T20C, - ), - sink = list( - initial_gas = list(), - temperature = 0, - ), - ), - vacuum_source = list( - source = list( - initial_gas = list(), - temperature = 0, - ), - sink = list( - initial_gas = list( - GAS_OXYGEN = 10, - GAS_NITROGEN = 20, - GAS_CO2 = 10, - GAS_PHORON = 20, - GAS_N2O = 10, - ), - temperature = T20C, - ), - ), - ) - - -/datum/unit_test/atmos_machinery/conserve_moles/pump_gas - name = "ATMOS MACHINERY: pump_gas() Conserves Moles" - -/datum/unit_test/atmos_machinery/conserve_moles/pump_gas/start_test() - for(var/case_name in test_cases) - var/gas_mix_data = test_cases[case_name] - var/list/before_gas_mixes = create_gas_mixes(gas_mix_data) - var/list/after_gas_mixes = create_gas_mixes(gas_mix_data) - - pump_gas(null, after_gas_mixes["source"], after_gas_mixes["sink"], null, INFINITY) - - check_moles_conserved(case_name, before_gas_mixes, after_gas_mixes) - - return 1 - -/datum/unit_test/atmos_machinery/conserve_moles/pump_gas_passive - name = "ATMOS MACHINERY: pump_gas_passive() Conserves Moles" - -/datum/unit_test/atmos_machinery/conserve_moles/pump_gas_passive/start_test() - for(var/case_name in test_cases) - var/gas_mix_data = test_cases[case_name] - var/list/before_gas_mixes = create_gas_mixes(gas_mix_data) - var/list/after_gas_mixes = create_gas_mixes(gas_mix_data) - - pump_gas_passive(null, after_gas_mixes["source"], after_gas_mixes["sink"], null) - - check_moles_conserved(case_name, before_gas_mixes, after_gas_mixes) - - return 1 - -/datum/unit_test/atmos_machinery/conserve_moles/scrub_gas - name = "ATMOS MACHINERY: scrub_gas() Conserves Moles" - -/datum/unit_test/atmos_machinery/conserve_moles/scrub_gas/start_test() - var/list/filtering = gas_data.gases - - for(var/case_name in test_cases) - var/gas_mix_data = test_cases[case_name] - var/list/before_gas_mixes = create_gas_mixes(gas_mix_data) - var/list/after_gas_mixes = create_gas_mixes(gas_mix_data) - - scrub_gas(null, filtering, after_gas_mixes["source"], after_gas_mixes["sink"], null, INFINITY) - - check_moles_conserved(case_name, before_gas_mixes, after_gas_mixes) - - return 1 - -/datum/unit_test/atmos_machinery/conserve_moles/filter_gas - name = "ATMOS MACHINERY: filter_gas() Conserves Moles" - -/datum/unit_test/atmos_machinery/conserve_moles/filter_gas/start_test() - var/list/filtering = gas_data.gases - - for(var/case_name in test_cases) - var/gas_mix_data = test_cases[case_name] - var/list/before_gas_mixes = create_gas_mixes(gas_mix_data) - var/list/after_gas_mixes = create_gas_mixes(gas_mix_data) - - filter_gas(null, filtering, after_gas_mixes["source"], after_gas_mixes["sink"], after_gas_mixes["source"], null, INFINITY) - - check_moles_conserved(case_name, before_gas_mixes, after_gas_mixes) - - return 1 - -/datum/unit_test/atmos_machinery/conserve_moles/filter_gas_multi - name = "ATMOS MACHINERY: filter_gas_multi() Conserves Moles" - -/datum/unit_test/atmos_machinery/conserve_moles/filter_gas_multi/start_test() - for(var/case_name in test_cases) - var/gas_mix_data = test_cases[case_name] - var/list/before_gas_mixes = create_gas_mixes(gas_mix_data) - var/list/after_gas_mixes = create_gas_mixes(gas_mix_data) - - var/list/filtering = list() - for(var/gasid in gas_data.gases) - filtering[gasid] = after_gas_mixes["sink"] //just filter everything to sink - - filter_gas_multi(null, filtering, after_gas_mixes["source"], after_gas_mixes["sink"], null, INFINITY) - - check_moles_conserved(case_name, before_gas_mixes, after_gas_mixes) - - return 1 - -/datum/unit_test/atmos_machinery/conserve_moles/mix_gas - name = "ATMOS MACHINERY: mix_gas() Conserves Moles" - -/datum/unit_test/atmos_machinery/conserve_moles/mix_gas/start_test() - for(var/case_name in test_cases) - var/gas_mix_data = test_cases[case_name] - var/list/before_gas_mixes = create_gas_mixes(gas_mix_data) - var/list/after_gas_mixes = create_gas_mixes(gas_mix_data) - - var/list/mix_sources = list() - for(var/gasid in ALL_GASIDS) - var/datum/gas_mixture/mix_source = after_gas_mixes["sink"] - mix_sources[mix_source] = 1.0/gas_data.gases.len //doesn't work as a macro for some reason - - mix_gas(null, mix_sources, after_gas_mixes["sink"], null, INFINITY) - - check_moles_conserved(case_name, before_gas_mixes, after_gas_mixes) - - return 1 - -/datum/unit_test/pipes_shall_belong_to_unique_pipelines - name = "ATMOS MACHINERY: all pipes shall belong to a unique pipeline" - -/datum/unit_test/pipes_shall_belong_to_unique_pipelines/start_test() - var/list/checked_pipes = list() - var/list/bad_pipelines = list() - for(var/datum/pipeline/P) - for(var/thing in P.members) - var/obj/machinery/atmospherics/pipe/pipe = thing - if(!checked_pipes[thing]) - checked_pipes[thing] = P - continue - LAZYDISTINCTADD(bad_pipelines[P], pipe) - LAZYDISTINCTADD(bad_pipelines[checked_pipes[thing]], pipe) // Missed it the first time; thought it was good. - - if(length(bad_pipelines)) - for(var/datum/pipeline/badboy in bad_pipelines) - var/info = list() - for(var/bad_pipe in bad_pipelines[badboy]) - info += log_info_line(bad_pipe) - log_bad("A pipeline with overlapping members contained the following overlapping pipes: [english_list(info)]") - fail("Some pipes were in multiple pipelines at once.") - else - pass("All pipes belonged to a unique pipeline.") - return 1 - -/datum/unit_test/atmos_machinery_shall_not_have_conflicting_connections - name = "ATMOS MACHINERY: all mapped atmos machinery shall not have more than one connection of each type per dir." - -/datum/unit_test/atmos_machinery_shall_not_have_conflicting_connections/start_test() - var/fail = FALSE - for(var/obj/machinery/atmospherics/machine in SSmachines.machinery) - for(var/obj/machinery/atmospherics/M in machine.loc) - if(M == machine) - continue - if(!machine.check_connect_types(M, machine)) - continue - if(M.initialize_directions & machine.initialize_directions) - log_bad("[log_info_line(machine)] has conflicting connections.") - fail = TRUE - - if(fail) - fail("Some pipes had conflicting connections.") - else - pass("All pipes were mapped properly.") - return 1 - -#undef ALL_GASIDS \ No newline at end of file diff --git a/code/unit_tests/cargo_tests.dm b/code/unit_tests/cargo_tests.dm deleted file mode 100644 index 1d4c5ea12af11..0000000000000 --- a/code/unit_tests/cargo_tests.dm +++ /dev/null @@ -1,55 +0,0 @@ -//======================================================================================= - -/datum/unit_test/cargo_crates_containment_test - name = "CARGO: Supply crates containment" - -/datum/unit_test/cargo_crates_containment_test/start_test() - var/bad_tests = 0 - - for(var/decl/hierarchy/supply_pack/supply_pack in SSsupply.master_supply_list) - if(!ispath(supply_pack.containertype, /obj/structure/closet)) - continue - - var/obj/structure/closet/C = new supply_pack.containertype(get_safe_turf()) - supply_pack.spawn_contents(C) - - var/contents_pre_open = C.contents.Copy() - C.dump_contents() - C.store_contents() - var/list/no_longer_contained_atoms = contents_pre_open - C.contents - var/list/previously_not_contained_atoms = C.contents - contents_pre_open - - if(no_longer_contained_atoms.len) - bad_tests++ - log_bad("[supply_pack] - [log_info_line(C)] no longer contains the following atoms: [log_info_line(no_longer_contained_atoms)]") - if(previously_not_contained_atoms.len) - log_debug("[supply_pack] - [log_info_line(C)] now contains the following atoms: [log_info_line(previously_not_contained_atoms)]") - qdel(C) - QDEL_NULL_LIST(no_longer_contained_atoms) - - if(bad_tests) - fail("[bad_tests] cargo supply pack\s with inconsistent pre/post-open contents found.") - else - pass("No cargo supply packs with inconsistent pre/post-open contents found.") - - return 1 - -/datum/unit_test/cargo_sufficient_cost_test - name = "CARGO: Supply packs shall have sufficient cost" - -/datum/unit_test/cargo_sufficient_cost_test/start_test() - var/fail = FALSE - for(var/decl/hierarchy/supply_pack/supply_pack in SSsupply.master_supply_list) - var/sell_price = 0 - if(ispath(supply_pack.containertype, /obj/structure/closet/crate)) - var/obj/structure/closet/crate/crate = supply_pack.containertype - sell_price += initial(crate.points_per_crate) - sell_price += SSsupply.points_per_slip - if(supply_pack.cost <= sell_price) - log_bad("[supply_pack.name] ([supply_pack.type]) costs [supply_pack.cost], but can be sold for [sell_price].") - fail = TRUE - if(fail) - fail("A supply pack did not have sufficient cost.") - else - pass("All supply packs cost sufficiently.") - return 1 \ No newline at end of file diff --git a/code/unit_tests/closets.dm b/code/unit_tests/closets.dm deleted file mode 100644 index dd590de3cc6e5..0000000000000 --- a/code/unit_tests/closets.dm +++ /dev/null @@ -1,75 +0,0 @@ -/datum/unit_test/closet_decal_test - name = "CLOSETS: All Closet Appearances Shall Have Sane Values" - var/list/check_base_states = list("base", "lock", "light", "open", "interior", "welded", "sparks") - var/list/except_appearances = list() - -/datum/unit_test/closet_decal_test/start_test() - - var/list/bad_decl - var/list/bad_icon - var/list/bad_colour - var/list/bad_base_icon - var/list/bad_base_state - var/list/bad_decal_icon - var/list/bad_decal_colour - var/list/bad_decal_state - - for(var/check_appearance in typesof(/decl/closet_appearance)-except_appearances) - var/decl/closet_appearance/closet = decls_repository.get_decl(check_appearance) - if(!closet) - LAZYADD(bad_decl, "[check_appearance]") - continue - - if(!closet.icon) - LAZYADD(bad_icon, "[closet.type]") - if(!closet.color) - LAZYADD(bad_colour, "[closet.type]") - if(!closet.base_icon) - LAZYADD(bad_base_icon, "[closet.type]") - else - var/list/base_states = icon_states(closet.base_icon) - for(var/thing in check_base_states) - if(!(thing in base_states)) - LAZYADD(bad_base_state, "[closet.type] - [thing] - [closet.base_icon]") - if(LAZYLEN(closet.decals) && !closet.decal_icon) - LAZYADD(bad_decal_icon, "[closet.type]") - else - var/list/decal_states = icon_states(closet.decal_icon) - for(var/thing in closet.decals) - if(isnull(closet.decals[thing])) - LAZYADD(bad_decal_colour, "[check_appearance] - [thing]") - if(!(thing in decal_states)) - LAZYADD(bad_decal_state, "[check_appearance] - [thing] - [closet.decal_icon]") - - if( \ - LAZYLEN(bad_decl) || \ - LAZYLEN(bad_icon) || \ - LAZYLEN(bad_colour) || \ - LAZYLEN(bad_base_icon) || \ - LAZYLEN(bad_base_state) || \ - LAZYLEN(bad_decal_icon) || \ - LAZYLEN(bad_decal_colour) || \ - LAZYLEN(bad_decal_state) \ - ) - var/fail_msg = "Insane closet appearances found: " - if(LAZYLEN(bad_decl)) - fail_msg += "\nDecl did not add itself to appropriate global list:\n[jointext("\t[bad_icon]", "\n")]." - if(LAZYLEN(bad_icon)) - fail_msg += "\nNull final icon values:\n[jointext("\t[bad_icon]", "\n")]." - if(LAZYLEN(bad_colour)) - fail_msg += "\nNull color values:\n[jointext("\t[bad_colour]", "\n")]." - if(LAZYLEN(bad_base_icon)) - fail_msg += "\nNull base icon value:\n[jointext("\t[bad_base_icon]", "\n")]." - if(LAZYLEN(bad_base_state)) - fail_msg += "\nMissing state from base icon:\n[jointext("\t[bad_base_state]", "\n")]." - if(LAZYLEN(bad_decal_icon)) - fail_msg += "\nDecal icon not set but decal lists populated:\n[jointext("\t[bad_decal_icon]", "\n")]." - if(LAZYLEN(bad_decal_colour)) - fail_msg += "\nNull color in final decal entry:\n[jointext("\t[bad_decal_colour]", "\n")]." - if(LAZYLEN(bad_decal_state)) - fail_msg += "\nNon-existent decal icon state:\n[jointext("\t[bad_decal_state]", "\n")]." - - fail(fail_msg) - else - pass("All closet appearances are sane.") - return 1 \ No newline at end of file diff --git a/code/unit_tests/culture.dm b/code/unit_tests/culture.dm deleted file mode 100644 index 781f4ba505bb6..0000000000000 --- a/code/unit_tests/culture.dm +++ /dev/null @@ -1,93 +0,0 @@ -/datum/unit_test/culture - name = "CULTURE - All Species Cultural Values Shall Be Of Valid Types And Length" - -/datum/unit_test/culture/start_test() - var/fails = 0 - for(var/species_name in all_species) - var/datum/species/species = all_species[species_name] - if(!islist(species.default_cultural_info)) - fails++ - log_bad("Default cultural info for [species_name] is not a list.") - else - for(var/token in species.default_cultural_info) - if(!(token in ALL_CULTURAL_TAGS)) - fails++ - log_bad("Default cultural info for [species_name] contains invalid tag '[token]'.") - else - var/val = species.default_cultural_info[token] - if(!val) - fails++ - log_bad("Default cultural value '[val]' for [species_name] tag '[token]' is null, must be a string.") - else if(!istext(val)) - fails++ - log_bad("Default cultural value '[val]' for [species_name] tag '[token]' is an invalid type, must be a string.") - else - var/decl/cultural_info/culture = SSculture.get_culture(val) - if(!istype(culture)) - fails++ - log_bad("Default cultural value '[val]' for [species_name] tag '[token]' is not a valid culture label.") - else if(culture.category != token) - fails++ - log_bad("Default cultural value '[val]' for [species_name] tag '[token]' does not match culture datum category ([culture.category] must equal [token]).") - else if(!culture.description) - fails++ - log_bad("Default cultural value '[val]' for [species_name] tag '[token]' does not have a description set.") - - if(!islist(species.force_cultural_info)) - fails++ - log_bad("Forced cultural info for [species_name] is not a list.") - else - for(var/token in species.force_cultural_info) - if(!(token in ALL_CULTURAL_TAGS)) - fails++ - log_bad("Forced cultural info for [species_name] contains invalid tag '[token]'.") - else - var/val = species.force_cultural_info[token] - if(!val) - fails++ - log_bad("Forced cultural value for [species_name] tag '[token]' is null, must be a string.") - else if(!istext(val)) - fails++ - log_bad("Forced cultural value for [species_name] tag '[token]' is an invalid type, must be a string.") - else - var/decl/cultural_info/culture = SSculture.get_culture(val) - if(!istype(culture)) - fails++ - log_bad("Forced cultural value '[val]' for [species_name] tag '[token]' is not a valid culture label.") - else if(culture.category != token) - fails++ - log_bad("Forced cultural value '[val]' for [species_name] tag '[token]' does not match culture datum category ([culture.category] must equal [token]).") - else if(!culture.description) - fails++ - log_bad("Forced cultural value '[val]' for [species_name] tag '[token]' does not have a description set.") - - if(!islist(species.available_cultural_info)) - fails++ - log_bad("Available cultural info for [species_name] is not a list.") - else - for(var/token in ALL_CULTURAL_TAGS) - if(!islist(species.available_cultural_info[token])) - fails++ - log_bad("Available cultural info for [species_name] tag '[token]' is invalid type, must be a list.") - else if(!LAZYLEN(species.available_cultural_info[token])) - fails++ - log_bad("Available cultural info for [species_name] tag '[token]' is empty, must have at least one entry.") - else - for(var/val in species.available_cultural_info[token]) - var/decl/cultural_info/culture = SSculture.get_culture(val) - if(!istype(culture)) - fails++ - log_bad("Available cultural value '[val]' for [species_name] tag '[token]' is not a valid culture label.") - else if(culture.category != token) - fails++ - log_bad("Available cultural value '[val]' for [species_name] tag '[token]' does not match culture datum category ([culture.category] must equal [token]).") - else if(!culture.description) - fails++ - log_bad("Available cultural value '[val]' for [species_name] tag '[token]' does not have a description set.") - - if(fails > 0) - fail("[fails] invalid cultural value(s)") - else - pass("All cultural values are valid.") - return 1 - diff --git a/code/unit_tests/equipment_tests.dm b/code/unit_tests/equipment_tests.dm deleted file mode 100644 index 5a0262093eeb1..0000000000000 --- a/code/unit_tests/equipment_tests.dm +++ /dev/null @@ -1,108 +0,0 @@ -#define SUCCESS 1 -#define FAILURE 0 - - -/datum/unit_test/vision_glasses - name = "EQUIPMENT: Vision Template" - template = /datum/unit_test/vision_glasses - var/mob/living/carbon/human/H = null - var/expectation = SEE_INVISIBLE_NOLIGHTING - var/glasses_type = null - async = 1 - -/datum/unit_test/vision_glasses/start_test() - spawn(0) - var/list/test = create_test_mob_with_mind(null, /mob/living/carbon/human) - if(isnull(test)) - fail("Check Runtimed in Mob creation") - - if(test["result"] == FAILURE) - fail(test["msg"]) - async = 0 - return - - H = locate(test["mobref"]) - - var/obj/item/clothing/glasses/G = new glasses_type() - H.glasses = G - - return 1 - - -/datum/unit_test/vision_glasses/check_result() - - if(isnull(H) || H.life_tick < 2) - return 0 - - if(isnull(H.glasses)) - fail("Mob doesn't have glasses on") - - H.handle_vision() // Because Life has a client check that bypasses updating vision - - if(H.see_invisible == expectation) - pass("Mob See invisible is [H.see_invisible]") - else - fail("Mob See invisible is [H.see_invisible] / expected [expectation]") - - return 1 - -/datum/unit_test/vision_glasses/NVG - name = "EQUIPMENT: NVG see_invis" - glasses_type = /obj/item/clothing/glasses/night - -/datum/unit_test/vision_glasses/mesons - name = "EQUIPMENT: Mesons see_invis" - glasses_type = /obj/item/clothing/glasses/meson - -/datum/unit_test/vision_glasses/plain - name = "EQUIPMENT: Plain glasses. see_invis" - glasses_type = /obj/item/clothing/glasses/prescription - expectation = SEE_INVISIBLE_LIVING - -// ============================================================================ - -/datum/unit_test/storage_capacity_test - name = "EQUIPMENT: Storage items should be able to actually hold their initial contents" - -/datum/unit_test/storage_capacity_test/start_test() - var/bad_tests = 0 - - // obj/item/storage/internal cannot be tested sadly, as they expect their host object to create them - for(var/storage_type in subtypesof(/obj/item/storage) - typesof(/obj/item/storage/internal)) - var/obj/item/storage/S = new storage_type(null) //should be fine to put it in nullspace... - var/bad_msg = "[ascii_red]--------------- [S.name] \[[S.type]\]" - bad_tests += test_storage_capacity(S, bad_msg) - - if(bad_tests) - fail("\[[bad_tests]\] Some storage item types were not able to hold their default initial contents.") - else - pass("All storage item types were able to hold their default initial contents.") - - return 1 - -/proc/test_storage_capacity(obj/item/storage/S, var/bad_msg) - var/bad_tests = 0 - - if(!isnull(S.storage_slots) && S.contents.len > S.storage_slots) - log_unit_test("[bad_msg] Contains more items than it has slots for ([S.contents.len] / [S.storage_slots]). [ascii_reset]") - bad_tests++ - - var/total_storage_space = 0 - for(var/obj/item/I in S.contents) - if(I.w_class > S.max_w_class) - log_unit_test("[bad_msg] Contains an item \[[I.type]\] that is too big to be held ([I.w_class] / [S.max_w_class]). [ascii_reset]") - bad_tests++ - if(istype(I, /obj/item/storage) && I.w_class >= S.w_class) - log_unit_test("[bad_msg] Contains a storage item \[[I.type]\] the same size or larger than its container ([I.w_class] / [S.w_class]). [ascii_reset]") - bad_tests++ - total_storage_space += I.get_storage_cost() - - if(total_storage_space > S.max_storage_space) - log_unit_test("[bad_msg] Contains more items than it has storage space for ([total_storage_space] / [S.max_storage_space]). [ascii_reset]") - bad_tests++ - - return bad_tests - -#undef SUCCESS -#undef FAILURE - diff --git a/code/unit_tests/extension_tests.dm b/code/unit_tests/extension_tests.dm deleted file mode 100644 index b760751958edf..0000000000000 --- a/code/unit_tests/extension_tests.dm +++ /dev/null @@ -1,192 +0,0 @@ -/datum/unit_test/extensions - name = "EXTENSIONS template" - template = /datum/unit_test/extensions - async = 0 - -/datum/unit_test/extensions/basic_extension_shall_lazy_initalize_as_expected - name = "EXTENSIONS - Basic extension shall lazy initialize as expected" - -/datum/unit_test/extensions/basic_extension_shall_lazy_initalize_as_expected/start_test() - var/turf/start = get_safe_turf() - var/obj/O = new(start) - set_extension(O, /datum/extension/test_one) - - var/number_of_failures = 0 - for(var/extension in O.extensions) - if(!islist(O.extensions[extension])) - log_unit_test("[extension] was initalized.") - number_of_failures++ - - var/datum/extension/one = get_extension(O, /datum/extension/test_one) - for(var/extension in O.extensions) - if(islist(O.extensions[extension])) - log_unit_test("[extension] was not initalized.") - number_of_failures++ - - if(one.type != /datum/extension/test_one) - log_unit_test("[log_info_line(one)] was not strictly of the type [/datum/extension/test_one]") - number_of_failures++ - - if(one.holder != O) - log_unit_test("[log_info_line(one)] had an unexpected holder: [log_info_line(one.holder)]") - number_of_failures++ - - if(number_of_failures) - fail("[number_of_failures] failed assertion\s.") - else - pass("All assertions passed.") - - qdel(O) - return TRUE - -/datum/unit_test/extensions/basic_immediate_extension_shall_initalize_as_expected - name = "EXTENSIONS - Basic immediate extension shall initialize as expected" - -/datum/unit_test/extensions/basic_immediate_extension_shall_initalize_as_expected/start_test() - var/turf/start = get_safe_turf() - var/obj/O = new(start) - set_extension(O, /datum/extension/test_two) - - var/number_of_failures = 0 - for(var/extension in O.extensions) - if(islist(O.extensions[extension])) - log_unit_test("[extension] was not initalized.") - number_of_failures++ - - var/datum/extension/two = get_extension(O, /datum/extension/test_two) - if(two.type != /datum/extension/test_two) - log_unit_test("[log_info_line(two)] was not strictly of the type [/datum/extension/test_two]") - number_of_failures++ - - if(two.holder != O) - log_unit_test("[log_info_line(two)] had an unexpected holder: [log_info_line(two.holder)]") - number_of_failures++ - - if(number_of_failures) - fail("[number_of_failures] failed assertion\s.") - else - pass("All assertions passed.") - - qdel(O) - return TRUE - -/datum/unit_test/extensions/shall_acquire_extension_subtype_as_expected - name = "EXTENSIONS - Shall acquire extension subtype as expected" - -/datum/unit_test/extensions/shall_acquire_extension_subtype_as_expected/start_test() - var/turf/start = get_safe_turf() - var/obj/O = new(start) - set_extension(O, /datum/extension/test_three/subtype) - - var/datum/extension/three = get_extension(O, /datum/extension/test_three) - if(three.type == /datum/extension/test_three/subtype) - pass("All assertions passed.") - else - fail("[log_info_line(three)] was not strictly of the type [/datum/extension/test_three/subtype]") - - qdel(O) - return TRUE - -/datum/unit_test/extensions/extension_shall_be_provided_arguments_as_expected - name = "EXTENSIONS - Extension shall be provided arguments as expected" - -/datum/unit_test/extensions/extension_shall_be_provided_arguments_as_expected/start_test() - var/turf/start = get_safe_turf() - var/obj/O = new(start) - set_extension(O, /datum/extension/test_four, list("a", "b"), list("c", "d")) - - var/datum/extension/test_four/four = get_extension(O, /datum/extension/test_four) - if(four.holder == O && islist(four.first_argument) && islist(four.second_argument) && four.first_argument[1] == "a" && four.first_argument[2] == "b" && four.second_argument[1] == "c" && four.second_argument[2] == "d") - pass("All assertions passed.") - else - fail("[log_info_line(four)] had unexpected arguments:\n[log_info_line(four.holder)]\n[log_info_line(four.first_argument)]\n[log_info_line(four.second_argument)]") - - return TRUE - -/datum/unit_test/extensions/immediate_extension_shall_be_provided_arguments_as_expected - name = "EXTENSIONS - Immediate extension shall be provided arguments as expected" - -/datum/unit_test/extensions/immediate_extension_shall_be_provided_arguments_as_expected/start_test() - var/turf/start = get_safe_turf() - var/obj/O = new(start) - set_extension(O, /datum/extension/test_five, list("a", "b"), list("c", "d")) - - var/datum/extension/test_five/five = get_extension(O, /datum/extension/test_five) - if(five.holder == O && islist(five.first_argument) && islist(five.second_argument) && five.first_argument[1] == "a" && five.first_argument[2] == "b" && five.second_argument[1] == "c" && five.second_argument[2] == "d") - pass("All assertions passed.") - else - fail("[log_info_line(five)] had unexpected arguments:\n[log_info_line(five.holder)]\n[log_info_line(five.first_argument)]\n[log_info_line(five.second_argument)]") - - return TRUE - -/datum/unit_test/extensions/get_or_create_extension_shall_initialize_as_expected - name = "EXTENSIONS - get_or_create() shall initialize as expected" - -/datum/unit_test/extensions/get_or_create_extension_shall_initialize_as_expected/start_test() - var/turf/start = get_safe_turf() - var/obj/O = new(start) - var/datum/extension/test_one/one = get_or_create_extension(O, /datum/extension/test_one) - - var/number_of_failures = 0 - if(one.type != /datum/extension/test_one) - log_unit_test("[log_info_line(one)] was not strictly of the type [/datum/extension/test_one]") - number_of_failures++ - - if(one.holder != O) - log_unit_test("[log_info_line(one)] had an unexpected holder: [log_info_line(one.holder)]") - number_of_failures++ - - if(number_of_failures) - fail("[number_of_failures] failed assertion\s.") - else - pass("All assertions passed.") - - return TRUE - -/datum/unit_test/extensions/get_or_create_extension_with_arguments_shall_initialize_as_expected - name = "EXTENSIONS - get_or_create() with arguments shall initialize as expected" - -/datum/unit_test/extensions/get_or_create_extension_with_arguments_shall_initialize_as_expected/start_test() - var/turf/start = get_safe_turf() - var/obj/O = new(start) - - var/datum/extension/test_four/four = get_or_create_extension(O, /datum/extension/test_four, list("a", "b"), list("c", "d")) - if(four.holder == O && islist(four.first_argument) && islist(four.second_argument) && four.first_argument[1] == "a" && four.first_argument[2] == "b" && four.second_argument[1] == "c" && four.second_argument[2] == "d") - pass("All assertions passed.") - else - fail("[log_info_line(four)] had unexpected arguments:\n[log_info_line(four.holder)]\n[log_info_line(four.first_argument)]\n[log_info_line(four.second_argument)]") - - return TRUE - -/datum/extension/test_one - base_type = /datum/extension/test_one - -/datum/extension/test_two - base_type = /datum/extension/test_two - flags = EXTENSION_FLAG_IMMEDIATE - -/datum/extension/test_three - base_type = /datum/extension/test_three - -/datum/extension/test_three/subtype - -/datum/extension/test_four - base_type = /datum/extension/test_four - var/list/first_argument - var/list/second_argument - -/datum/extension/test_four/New(holder, first_argument, second_argument) - ..() - src.first_argument = first_argument - src.second_argument = second_argument - -/datum/extension/test_five - base_type = /datum/extension/test_five - flags = EXTENSION_FLAG_IMMEDIATE - var/list/first_argument - var/list/second_argument - -/datum/extension/test_five/New(holder, first_argument, second_argument) - ..() - src.first_argument = first_argument - src.second_argument = second_argument \ No newline at end of file diff --git a/code/unit_tests/food_tests.dm b/code/unit_tests/food_tests.dm deleted file mode 100644 index c85e67c80e61e..0000000000000 --- a/code/unit_tests/food_tests.dm +++ /dev/null @@ -1,40 +0,0 @@ -/** - * Each slice origin items should cut into the same slice. - * - * Each slice type defines an item from which it originates. Each sliceable - * item defines what item it cuts into. This test checks if the two defnitions - * are consistent between the two items. - */ -/datum/unit_test/food_slices_and_origin_items_should_be_consistent - name = "FOOD: Each slice origin item should cut into the appropriate slice" - -/datum/unit_test/food_slices_and_origin_items_should_be_consistent/start_test() - var/any_failed = FALSE - - for (var/subtype in subtypesof(/obj/item/reagent_containers/food/snacks/slice)) - var/obj/item/reagent_containers/food/snacks/slice/slice = subtype - if(!initial(slice.whole_path)) - log_bad("[slice] does not define a whole_path.") - any_failed = TRUE - continue - - if(!ispath(initial(slice.whole_path), /obj/item/reagent_containers/food/snacks/sliceable)) - log_bad("[slice]/whole_path is not a subtype of sliceable.") - any_failed = TRUE - continue - - var/obj/item/reagent_containers/food/snacks/sliceable/whole = initial(slice.whole_path) - - // note that the slice can be a subtype of the one defined in slice_path - if(!ispath(slice, initial(whole.slice_path))) - log_bad("[whole] does not define slice_path as [slice].") - any_failed = TRUE - continue - - if(any_failed) - fail("Some slice types were incorrectly defined.") - else - pass("All slice types defined correctly.") - - return 1 - diff --git a/code/unit_tests/foundation_tests.dm b/code/unit_tests/foundation_tests.dm deleted file mode 100644 index cc0c9ea0c12b4..0000000000000 --- a/code/unit_tests/foundation_tests.dm +++ /dev/null @@ -1,30 +0,0 @@ -/* -* Unit tests for built-in BYOND procs, to ensure overrides have not affected functionality. -*/ -/datum/unit_test/foundation - name = "FOUNDATION template" - template = /datum/unit_test/foundation - async = 0 - -/datum/unit_test/foundation/step_shall_return_true_on_success - name = "FOUNDATION: step() shall return true on success" - -/datum/unit_test/foundation/step_shall_return_true_on_success/start_test() - var/mob_step_result = TestStep(/mob) - var/obj_step_result = TestStep(/obj) - - if(mob_step_result && obj_step_result) - pass("step() returned true.") - else - fail("step() did not return true: Mob result: [mob_step_result] - Obj result: [obj_step_result].") - - return 1 - -/datum/unit_test/foundation/proc/TestStep(type_to_test) - var/turf/start = get_safe_turf() - var/atom/movable/T = new type_to_test(start) - - . = step(T, NORTH) - . = . && start.x == T.x - . = . && start.y + 1 == T.y - . = . && start.z == T.z diff --git a/code/unit_tests/fusion_plants.dm b/code/unit_tests/fusion_plants.dm deleted file mode 100644 index f318530753c89..0000000000000 --- a/code/unit_tests/fusion_plants.dm +++ /dev/null @@ -1,27 +0,0 @@ -/datum/unit_test/fusion_network_test - name = "FUSION: All Devices With Initial IDs Shall Have A Valid Network" - -/datum/unit_test/fusion_network_test/start_test() - - var/list/check_machines - for(var/thing in SSmachines.machinery) - if(hasvar(thing, "initial_id_tag") && !isnull(thing:initial_id_tag) && has_extension(thing, /datum/extension/local_network_member)) - LAZYADD(check_machines, get_extension(thing, /datum/extension/local_network_member)) - - if(LAZYLEN(check_machines)) - var/list/failed_ids - for(var/thing in check_machines) - var/datum/extension/local_network_member/lanm = thing - var/datum/local_network/lan = lanm.get_local_network() - if(!lan || !lan.network_entities[lanm.holder.type] || !lan.network_entities[lanm.holder.type][lanm.holder]) - var/obj/device = lanm.holder - LAZYADD(failed_ids, "[device.type] ([device.x],[device.y],[device.z]) - [device:initial_id_tag]") - - if(LAZYLEN(failed_ids)) - fail("Some fusion devices had IDs but no valid network:\n[jointext(failed_ids, "\n")]") - else - pass("All fusion devices with IDs have a valid network.") - else - pass("No fusion devices with IDs on this map.") - - return 1 \ No newline at end of file diff --git a/code/unit_tests/graph_tests.dm b/code/unit_tests/graph_tests.dm deleted file mode 100644 index f7328de398083..0000000000000 --- a/code/unit_tests/graph_tests.dm +++ /dev/null @@ -1,387 +0,0 @@ -/******** -* Tests * -********/ -/datum/unit_test/graph_test/simple_merge - name = "GRAPH: Shall be able to merge simple graphs" - -/datum/unit_test/graph_test/simple_merge/start_test() - var/datum/node/test/nodeA = new("Node A") - var/datum/node/test/nodeB = new("Node B") - - var/datum/graph/testing/graphA = new(list(nodeA), name = "Graph A") - var/datum/graph/testing/graphB = new(list(nodeB), name = "Graph B") - graphs += graphA - graphs += graphB - - var/expected_nodes = list(nodeA, nodeB) - var/expected_edges = list() // If one initialize using list(nodeA = list(nodeB)) it becomes list("nodeA" = list(nodeB)) which breaks things - expected_edges[nodeA] = list(nodeB) - expected_edges[nodeB] = list(nodeA) - - graphA.on_check_expectations = new/datum/graph_expectation(expected_nodes, expected_edges) - graphB.on_check_expectations = new/datum/graph_expectation/deleted() - - graphA.Connect(nodeB, nodeA) - return TRUE - - -/datum/unit_test/graph_test/simple_split - name = "GRAPH: Shall be able to split a simple graph" - -/datum/unit_test/graph_test/simple_split/start_test() - var/datum/node/test/nodeA = new("Node A") - var/datum/node/test/nodeB = new("Node B") - - var/edges = list() - edges[nodeA] = list(nodeB) - edges[nodeB] = list(nodeA) - var/datum/graph/testing/graph = new(list(nodeA, nodeB), edges) - graph.split_expectations = list(new/datum/graph_expectation(list(nodeA)), new/datum/graph_expectation(list(nodeB))) - - graphs += graph - - graph.Disconnect(nodeB) - return TRUE - - -/datum/unit_test/graph_test/deletion_split - name = "GRAPH: Shall be able to handle node deletion" - -/datum/unit_test/graph_test/deletion_split/start_test() - var/datum/node/test/nodeA = new("Node A") - var/datum/node/test/nodeB = new("Node B") - var/datum/node/test/nodeC = new("Node C") - - var/edges = list() - edges[nodeA] = list(nodeB) - edges[nodeB] = list(nodeA, nodeC) - edges[nodeC] = list(nodeB) - var/datum/graph/testing/graph = new(list(nodeA, nodeB, nodeC), edges) - graph.split_expectations = list(new/datum/graph_expectation(list(nodeA)), new/datum/graph_expectation(list(nodeC))) - - graphs += graph - qdel(nodeB) - return TRUE - - -/datum/unit_test/graph_test/self_connect - name = "GRAPH: Shall be able to connect to self" - -/datum/unit_test/graph_test/self_connect/start_test() - var/datum/node/test/nodeA = new("Node A") - var/datum/node/test/nodeB = new("Node B") - var/datum/node/test/nodeC = new("Node C") - - var/edges = list() - edges[nodeA] = list(nodeB) - edges[nodeB] = list(nodeA, nodeC) - edges[nodeC] = list(nodeB) - var/datum/graph/testing/graph = new(list(nodeA, nodeB, nodeC), edges) - graphs += graph - - var/expected_edges = list() - expected_edges[nodeA] = list(nodeB, nodeC) - expected_edges[nodeB] = list(nodeA, nodeC) - expected_edges[nodeC] = list(nodeB, nodeA) - graph.on_check_expectations = new/datum/graph_expectation(list(nodeA, nodeB, nodeC), expected_edges) - - graph.Connect(nodeC, nodeA) - - return TRUE - - -/datum/unit_test/graph_test/partial_disconnect - name = "GRAPH: Shall be able to handle a partial disconnect" - -/datum/unit_test/graph_test/partial_disconnect/start_test() - var/datum/node/test/nodeA = new("Node A") - var/datum/node/test/nodeB = new("Node B") - var/datum/node/test/nodeC = new("Node C") - - var/edges = list() - edges[nodeA] = list(nodeB) - edges[nodeB] = list(nodeA, nodeC) - edges[nodeC] = list(nodeB) - var/datum/graph/testing/graph = new(list(nodeA, nodeB, nodeC), edges) - - var/expected_edges = list() - expected_edges[nodeA] = list(nodeB) - expected_edges[nodeB] = list(nodeA) - - graph.split_expectations = list(new/datum/graph_expectation(list(nodeA, nodeB), expected_edges), new/datum/graph_expectation(list(nodeC))) - graphs += graph - - graph.Disconnect(nodeB, nodeC) - return TRUE - - -/datum/unit_test/graph_test/full_disconnect - name = "GRAPH: Shall be able to handle a full disconnect" - -/datum/unit_test/graph_test/full_disconnect/start_test() - var/datum/node/test/nodeA = new("Node A") - var/datum/node/test/nodeB = new("Node B") - var/datum/node/test/nodeC = new("Node C") - - var/edges = list() - edges[nodeA] = list(nodeB) - edges[nodeB] = list(nodeA, nodeC) - edges[nodeC] = list(nodeB) - var/datum/graph/testing/graph = new(list(nodeA, nodeB, nodeC), edges) - - graph.split_expectations = list(new/datum/graph_expectation(list(nodeA)), new/datum/graph_expectation(list(nodeB)), new/datum/graph_expectation(list(nodeC))) - graphs += graph - - graph.Disconnect(nodeB) - return TRUE - - -/datum/unit_test/graph_test/connected_graph_full_disconnect - name = "GRAPH: Shall be able to handle a full disconnect in a connected graph" - -/datum/unit_test/graph_test/connected_graph_full_disconnect/start_test() - var/datum/node/test/nodeA = new("Node A") - var/datum/node/test/nodeB = new("Node B") - var/datum/node/test/nodeC = new("Node C") - - var/edges = list() - edges[nodeA] = list(nodeB, nodeC) - edges[nodeB] = list(nodeA, nodeC) - edges[nodeC] = list(nodeA, nodeB) - var/datum/graph/testing/graph = new(list(nodeA, nodeB, nodeC), edges) - graphs += graph - - var/expected_edges = list() - expected_edges[nodeA] = list(nodeC) - expected_edges[nodeC] = list(nodeA) - graph.split_expectations = list(new/datum/graph_expectation(list(nodeA, nodeC), expected_edges), new/datum/graph_expectation(list(nodeB))) - - graph.Disconnect(nodeB) - return TRUE - - -/datum/unit_test/graph_test/connected_graph_partial_disconnect - name = "GRAPH: Shall be able to handle a partial disconnect in a connected graph" - -/datum/unit_test/graph_test/connected_graph_partial_disconnect/start_test() - var/datum/node/test/nodeA = new("Node A") - var/datum/node/test/nodeB = new("Node B") - var/datum/node/test/nodeC = new("Node C") - - var/edges = list() - edges[nodeA] = list(nodeB, nodeC) - edges[nodeB] = list(nodeA, nodeC) - edges[nodeC] = list(nodeA, nodeB) - var/datum/graph/testing/graph = new(list(nodeA, nodeB, nodeC), edges) - graphs += graph - - var/expected_edges = list() - expected_edges[nodeA] = list(nodeB, nodeC) - expected_edges[nodeB] = list(nodeA) - expected_edges[nodeC] = list(nodeA) - graph.on_check_expectations = new/datum/graph_expectation(list(nodeA, nodeB, nodeC), expected_edges) - - graph.Disconnect(nodeB, nodeC) - return TRUE - -/datum/unit_test/graph_test/adjacent_disconnects - name = "GRAPH: Shall be able to handle adjacent disconnects" - -/datum/unit_test/graph_test/adjacent_disconnects/start_test() - var/datum/node/test/nodeA = new("Node A") - var/datum/node/test/nodeB = new("Node B") - var/datum/node/test/nodeC = new("Node C") - var/datum/node/test/nodeD = new("Node D") - - var/edges = list() - edges[nodeA] = list(nodeB) - edges[nodeB] = list(nodeA, nodeC) - edges[nodeC] = list(nodeB, nodeD) - edges[nodeD] = list(nodeC) - - var/datum/graph/testing/graph = new(list(nodeA, nodeB, nodeC, nodeD), edges) - graphs += graph - - graph.split_expectations = list(new/datum/graph_expectation(list(nodeA)), new/datum/graph_expectation(list(nodeD))) - - qdel(nodeB) - qdel(nodeC) - return TRUE - -/datum/unit_test/graph_test/multiple_disconnects - name = "GRAPH: Shall be able to handle multiple disconnects" - -/datum/unit_test/graph_test/multiple_disconnects/start_test() - var/datum/node/test/nodeA = new("Node A") - var/datum/node/test/nodeB = new("Node B") // Disconnects only from A - var/datum/node/test/nodeC = new("Node C") - var/datum/node/test/nodeD = new("Node D") // Disconnects from C and E - var/datum/node/test/nodeE = new("Node E") - var/datum/node/test/nodeF = new("Node F") - var/datum/node/test/nodeG = new("Node G") // Deleted node - var/datum/node/test/nodeH = new("Node H") - - var/edges = list() - edges[nodeA] = list(nodeB) - edges[nodeB] = list(nodeA, nodeC) - edges[nodeC] = list(nodeB, nodeD) - edges[nodeD] = list(nodeC, nodeE) - edges[nodeE] = list(nodeD, nodeF) - edges[nodeF] = list(nodeE, nodeG) - edges[nodeG] = list(nodeF, nodeH) - edges[nodeH] = list(nodeG) - var/datum/graph/testing/graph = new(list(nodeA, nodeB, nodeC, nodeD, nodeE, nodeF, nodeG, nodeH), edges) - graphs += graph - - var/expected_graph_one = list(nodeA) - - var/expected_graph_two = list(nodeB, nodeC) - var/expected_edges_two = list() - expected_edges_two[nodeB] = list(nodeC) - expected_edges_two[nodeC] = list(nodeB) - - var/expected_graph_three = list(nodeD) - - var/expected_graph_four = list(nodeE, nodeF) - var/expected_edges_four = list() - expected_edges_four[nodeE] = list(nodeF) - expected_edges_four[nodeF] = list(nodeE) - - var/expected_graph_five = list(nodeH) - - graph.split_expectations = list( - new/datum/graph_expectation(expected_graph_one), - new/datum/graph_expectation(expected_graph_two, expected_edges_two), - new/datum/graph_expectation(expected_graph_three), - new/datum/graph_expectation(expected_graph_four, expected_edges_four), - new/datum/graph_expectation(expected_graph_five), - ) - - graph.Disconnect(nodeB, nodeA) - graph.Disconnect(nodeD) - qdel(nodeG) - return TRUE - -/****************** -* Base Test Setup * -******************/ -/datum/unit_test/graph_test - template = /datum/unit_test/graph_test - async = TRUE - var/list/graphs - -/datum/unit_test/graph_test/New() - ..() - graphs = list() - -/datum/unit_test/graph_test/proc/ReadyToCheckExpectations() - return length(SSgraphs_update.pending_graphs) == 0 && length(SSgraphs_update.current_run) == 0 - -/datum/unit_test/graph_test/check_result() - if(!ReadyToCheckExpectations()) - return FALSE - - var/total_issues = 0 - for(var/datum/graph/testing/GT in graphs) - for(var/issue in GT.CheckExpectations()) - log_bad("[GT.name] - [issue]") - total_issues++ - - if(total_issues) - fail("Encountered [total_issues] issue\s") - else - pass("Encountered no issues") - - return TRUE - - -/********** -* Helpers * -**********/ -/datum/node/test - var/name - -/datum/node/test/New(var/name) - ..() - src.name = name - -/datum/graph/testing - var/name - var/list/split_expectations - var/datum/graph_expectation/on_check_expectations - - var/on_split_was_called - var/issues - -/datum/graph/testing/New(var/node, var/edges, var/name) - ..() - src.name = name || "Graph" - issues = list() - -/datum/graph/testing/OnSplit(var/list/subgraphs) - if(length(split_expectations) != subgraphs.len) - issues += "Expected number of subgrapghs is [subgraphs.len], was [length(split_expectations)]" - else if(length(split_expectations)) - var/list/unexpected_subgraphs = list() - var/list/split_expectations_copy = split_expectations.Copy() - for(var/subgraph in subgraphs) - var/expectations_fulfilled = FALSE - for(var/split_expectation in split_expectations_copy) - var/datum/graph_expectation/GE = split_expectation - if(!length(GE.CheckExpectations(subgraph))) - split_expectations_copy -= GE - expectations_fulfilled = TRUE - break - if(!expectations_fulfilled) - unexpected_subgraphs += subgraph - - for(var/expected_graph in unexpected_subgraphs) - issues += "Unexpected graph: [log_info_line(expected_graph)]" - for(var/expected_split in split_expectations_copy) - issues += "Unfulfilled split expectation: [log_info_line(expected_split)]" - - on_split_was_called = TRUE - -/datum/graph/testing/proc/CheckExpectations() - if(on_check_expectations) - issues += on_check_expectations.CheckExpectations(src) - if(length(split_expectations) && !on_split_was_called) - issues += "Had split expectations but OnSplit was not called" - if(!length(split_expectations) && on_split_was_called) - issues += "Had no split expectations but OnSplit was called" - - return issues - -/datum/graph_expectation - var/list/expected_nodes - var/list/expected_edges - -/datum/graph_expectation/New(var/expected_nodes, var/expected_edges) - ..() - src.expected_nodes = expected_nodes || list() - src.expected_edges = expected_edges || list() - -/datum/graph_expectation/proc/CheckExpectations(var/datum/graph/graph) - . = list() - if(length(expected_nodes ^ (graph.nodes || list()))) - . += "Expected the following nodes [log_info_line(expected_nodes)], was [log_info_line(graph.nodes)]" - if(length(expected_edges ^ (graph.edges || list()))) - . += "Expected the following edges [log_info_line(expected_edges)], was [log_info_line(graph.edges)]" - - for(var/datum/node/N in graph.nodes) - if(N.graph != graph) - . += "[log_info_line(N)]: Expected the following graph [log_info_line(graph)], was [N.graph]" - - for(var/node in expected_edges) - var/expected_connections = expected_edges[node] - var/actual_connections = graph.edges[node] - if(length(expected_connections ^ actual_connections)) - . += "[log_info_line(node)]: Expected the following connections [log_info_line(expected_connections)], was [log_info_line(actual_connections)]" - -/datum/graph_expectation/deleted/CheckExpectations(var/datum/graph/graph) - . = ..() - if(!QDELETED(graph)) - . += "Expected graph to be deleted, was not" - -/datum/graph_expectation/get_log_info_line() - return "Expected nodes: [log_info_line(expected_nodes)], expected edges: [log_info_line(expected_edges)]" diff --git a/code/unit_tests/icon_tests.dm b/code/unit_tests/icon_tests.dm deleted file mode 100644 index 6e3f2fc604add..0000000000000 --- a/code/unit_tests/icon_tests.dm +++ /dev/null @@ -1,168 +0,0 @@ -/datum/unit_test/icon_test - name = "ICON STATE template" - template = /datum/unit_test/icon_test - -/datum/unit_test/icon_test/robots_shall_have_eyes_for_each_state - name = "ICON STATE - Robot shall have eyes for each icon state" - var/list/excepted_icon_states_ = list( - "droid-combat-roll", - "droid-combat-shield" - ) - -/datum/unit_test/icon_test/robots_shall_have_eyes_for_each_state/start_test() - var/missing_states = 0 - var/list/valid_states = icon_states('icons/mob/robots.dmi') + icon_states('icons/mob/robots_drones.dmi') + icon_states('icons/mob/robots_flying.dmi') - - var/list/original_valid_states = valid_states.Copy() - for(var/icon_state in valid_states) - if(icon_state in excepted_icon_states_) - continue - if(text_starts_with(icon_state, "eyes-")) - continue - if(findtext(icon_state, "openpanel")) - continue - var/eye_icon_state = "eyes-[icon_state]" - if(!(eye_icon_state in valid_states)) - log_unit_test("Eye icon state [eye_icon_state] is missing.") - missing_states++ - - if(missing_states) - fail("[missing_states] eye icon state\s [missing_states == 1 ? "is" : "are"] missing.") - var/list/difference = uniquemergelist(original_valid_states, valid_states) - if(difference.len) - log_unit_test("[ascii_yellow]--- DEBUG --- ICON STATES AT START: " + jointext(original_valid_states, ",") + "[ascii_reset]") - log_unit_test("[ascii_yellow]--- DEBUG --- ICON STATES AT END: " + jointext(valid_states, ",") + "[ascii_reset]") - log_unit_test("[ascii_yellow]--- DEBUG --- UNIQUE TO EACH LIST: " + jointext(difference, ",") + "[ascii_reset]") - else - pass("All related eye icon states exists.") - return 1 - -/datum/unit_test/icon_test/sprite_accessories_shall_have_existing_icon_states - name = "ICON STATE - Sprite accessories shall have existing icon states" - -/datum/unit_test/icon_test/sprite_accessories_shall_have_existing_icon_states/start_test() - var/sprite_accessory_subtypes = list( - /datum/sprite_accessory/hair, - /datum/sprite_accessory/facial_hair - ) - - var/list/failed_sprite_accessories = list() - var/icon_state_cache = list() - var/duplicates_found = FALSE - - for(var/sprite_accessory_main_type in sprite_accessory_subtypes) - var/sprite_accessories_by_name = list() - for(var/sprite_accessory_type in subtypesof(sprite_accessory_main_type)) - var/failed = FALSE - var/datum/sprite_accessory/sat = sprite_accessory_type - - var/sat_name = initial(sat.name) - if(sat_name) - group_by(sprite_accessories_by_name, sat_name, sat) - else - failed = TRUE - log_bad("[sat] - Did not have a name set.") - - var/sat_icon = initial(sat.icon) - if(sat_icon) - var/sat_icon_states = icon_state_cache[sat_icon] - if(!sat_icon_states) - sat_icon_states = icon_states(sat_icon) - icon_state_cache[sat_icon] = sat_icon_states - - var/sat_icon_state = initial(sat.icon_state) - if(sat_icon_state) - sat_icon_state = "[sat_icon_state]_s" - if(!(sat_icon_state in sat_icon_states)) - failed = TRUE - log_bad("[sat] - \"[sat_icon_state]\" did not exist in '[sat_icon]'.") - else - failed = TRUE - log_bad("[sat] - Did not have an icon state set.") - else - failed = TRUE - log_bad("[sat] - Did not have an icon set.") - - if(failed) - failed_sprite_accessories += sat - - if(number_of_issues(sprite_accessories_by_name, "Sprite Accessory Names")) - duplicates_found = TRUE - - if(failed_sprite_accessories.len || duplicates_found) - fail("One or more sprite accessory issues detected.") - else - pass("All sprite accessories were valid.") - - return 1 - -/datum/unit_test/icon_test/posters_shall_have_icon_states - name = "ICON STATE - Posters Shall Have Icon States" - -/datum/unit_test/icon_test/posters_shall_have_icon_states/start_test() - var/contraband_icons = icon_states('icons/obj/contraband.dmi') - var/list/invalid_posters = list() - - for(var/poster_type in subtypesof(/decl/poster)) - var/decl/poster/P = decls_repository.get_decl(poster_type) - if(!(P.icon_state in contraband_icons)) - invalid_posters += poster_type - - if(invalid_posters.len) - fail("/decl/poster with missing icon states: [english_list(invalid_posters)]") - else - pass("All /decl/poster subtypes have valid icon states.") - return 1 - -/datum/unit_test/icon_test/item_modifiers_shall_have_icon_states - name = "ICON STATE - Item Modifiers Shall Have Icon Sates" - var/list/icon_states_by_type - -/datum/unit_test/icon_test/item_modifiers_shall_have_icon_states/start_test() - var/list/bad_modifiers = list() - var/item_modifiers = list_values(decls_repository.get_decls(/decl/item_modifier)) - - for(var/im in item_modifiers) - var/decl/item_modifier/item_modifier = im - for(var/type_setup_type in item_modifier.type_setups) - var/list/type_setup = item_modifier.type_setups[type_setup_type] - var/list/icon_states = icon_states_by_type[type_setup_type] - - if(!icon_states) - var/obj/item/I = type_setup_type - icon_states = icon_states(initial(I.icon)) - LAZYSET(icon_states_by_type, type_setup_type, icon_states) - - if(!(type_setup["icon_state"] in icon_states)) - bad_modifiers += type_setup_type - - if(bad_modifiers.len) - fail("Item modifiers with missing icon states: [english_list(bad_modifiers)]") - else - pass("All item modifiers have valid icon states.") - return 1 - -/datum/unit_test/icon_test/random_spawners_shall_have_icon_states - name = "ICON STATE - Random Spawners Shall Have Icon States" - -/datum/unit_test/icon_test/random_spawners_shall_have_icon_states/start_test() - var/states_per_icon = list() - var/list/invalid_spawners = list() - for(var/random_type in typesof(/obj/random)) - var/obj/random/R = random_type - var/icon = initial(R.icon) - var/icon_state = initial(R.icon_state) || "" - - var/icon_states = states_per_icon[icon] - if(!icon_states) - icon_states = icon_states(icon) - states_per_icon[icon] = icon_states - - if(!(icon_state in icon_states)) - invalid_spawners += random_type - - if(invalid_spawners.len) - fail("[invalid_spawners.len] /obj/random type\s with missing icon states: [json_encode(invalid_spawners)]") - else - pass("All /obj/random types have valid icon states.") - return 1 diff --git a/code/unit_tests/integrated_circuits.dm b/code/unit_tests/integrated_circuits.dm deleted file mode 100644 index d51dfd0219611..0000000000000 --- a/code/unit_tests/integrated_circuits.dm +++ /dev/null @@ -1,124 +0,0 @@ -/datum/unit_test/integrated_circuits - template = /datum/unit_test/integrated_circuits - -/datum/unit_test/integrated_circuits/unique_names - name = "INTEGRATED CIRCUITS - Circuits must have unique names" - -/datum/unit_test/integrated_circuits/unique_names/start_test() - var/list/circuits_by_name = list() - - for(var/circuit_path in SScircuit.cached_components) - var/atom/A = circuit_path - group_by(circuits_by_name, initial(A.name), circuit_path) - - var/number_of_issues = number_of_issues(circuits_by_name, "Names") - if(number_of_issues) - fail("[number_of_issues] issue\s with circuit naming found.") - else - pass("All circuits have unique names.") - return 1 - - -/datum/unit_test/integrated_circuits/prefabs_are_valid - name = "INTEGRATED CIRCUITS - Prefabs Are Valid" - -/datum/unit_test/integrated_circuits/prefabs_are_valid/start_test() - var/list/failed_prefabs = list() - for(var/prefab_type in subtypesof(/decl/prefab/ic_assembly)) - var/decl/prefab/ic_assembly/prefab = prefab_type - var/result = SScircuit.validate_electronic_assembly(initial(prefab.data)) - if(istext(result)) //Returned some error - failed_prefabs += "[prefab_type]: [result]" - if(failed_prefabs.len) - fail("The following integrated prefab types are invalid: [english_list(failed_prefabs)]") - else - pass("All integrated circuit prefabs are within complexity and size limits.") - - return 1 - -/datum/unit_test/integrated_circuits/prefabs_shall_not_fail_to_create - name = "INTEGRATED CIRCUITS - Prefabs Shall Not Fail To Create" - -/datum/unit_test/integrated_circuits/prefabs_shall_not_fail_to_create/start_test() - var/list/failed_prefabs = list() - for(var/prefab_type in subtypesof(/decl/prefab/ic_assembly)) - var/decl/prefab/ic_assembly/prefab = decls_repository.get_decl(prefab_type) - - try - var/built_item = prefab.create(get_safe_turf()) - if(built_item) - qdel(built_item) - else - log_bad("[prefab_type] failed to create or return its item.") - failed_prefabs |= prefab_type - catch(var/exception/e) - log_bad("[prefab_type] caused an exception: [e] on [e.file]:[e.line]") - failed_prefabs |= prefab_type - - if(failed_prefabs.len) - fail("The following integrated prefab types failed to create their assemblies: [english_list(failed_prefabs)]") - else - pass("All integrated circuit prefabs are within complexity and size limits.") - - return 1 - -/datum/unit_test/integrated_circuits/input_output - name = "INTEGRATED CIRCUITS - INPUT/OUTPUT - TEMPLATE" - template = /datum/unit_test/integrated_circuits/input_output - var/list/all_inputs = list() - var/list/all_expected_outputs = list() - var/activation_pin = 1 - var/circuit_type - -#define IC_TEST_ANY_OUTPUT "#IGNORE_THIS_OUTPUT#" - -/datum/unit_test/integrated_circuits/input_output/start_test() - var/obj/item/integrated_circuit/ic = new circuit_type() - var/failed = FALSE - - if(all_inputs.len != all_expected_outputs.len) - fail("Given inputs do not match the expected outputs length.") - return 1 - - for(var/test_index = 1 to all_inputs.len) - var/list/inputs = all_inputs[test_index] - var/list/expected_outputs = all_expected_outputs[test_index] - - for(var/input_pin_index = 1 to inputs.len) - ic.set_pin_data(IC_INPUT, input_pin_index, inputs[input_pin_index]) - - ic.do_work(activation_pin) - - for(var/output_index = 1 to expected_outputs.len) - var/actual_output = ic.get_pin_data(IC_OUTPUT, output_index) - var/expected_output = expected_outputs[output_index] - if(expected_output == IC_TEST_ANY_OUTPUT) - continue - if(actual_output != expected_output) - failed = TRUE - log_bad("[circuit_type] - Test [test_index] - Expected '[expected_output]', was '[actual_output]'") - for(var/datum/integrated_io/io in ic.inputs) - log_bad("Raw Input: [io.data]") - for(var/datum/integrated_io/io in ic.outputs) - log_bad("Raw Output: [io.data]") - - qdel(ic) - if(failed) - fail("The circuit [circuit_type] did not meet all expectations.") - else - pass("The circuit [circuit_type] met all expectations.") - return 1 - -/datum/unit_test/integrated_circuits/input_output/multiplexer - name = "INTEGRATED CIRCUITS - INPUT/OUTPUT - Multiplexer - Medium" - all_inputs = list(list(1,1,2,3,4),list(2,1,2,3,4),list(3,1,2,3,4),list(4,1,2,3,4)) - all_expected_outputs = list(list(1),list(2),list(3),list(4)) - circuit_type = /obj/item/integrated_circuit/transfer/multiplexer/medium - -/datum/unit_test/integrated_circuits/input_output/demultiplexer - name = "INTEGRATED CIRCUITS - INPUT/OUTPUT - Demultiplexer - Medium" - all_inputs = list(list(1,5),list(2,6),list(3,7),list(4,8)) - all_expected_outputs = list(list(5,null,null,null),list(null,6,null,null),list(null,null,7,null),list(null,null,null,8)) - circuit_type = /obj/item/integrated_circuit/transfer/demultiplexer/medium - -#undef IC_TEST_ANY_OUTPUT \ No newline at end of file diff --git a/code/unit_tests/job_tests.dm b/code/unit_tests/job_tests.dm deleted file mode 100644 index bd575df09a30a..0000000000000 --- a/code/unit_tests/job_tests.dm +++ /dev/null @@ -1,75 +0,0 @@ -/datum/unit_test/jobs_shall_have_a_valid_outfit_type - name = "JOBS: Shall have a valid outfit type" - -/datum/unit_test/jobs_shall_have_a_valid_outfit_type/start_test() - var/failed_jobs = 0 - - for (var/occ in SSjobs.titles_to_datums) - var/datum/job/occupation = SSjobs.titles_to_datums[occ] - var/decl/hierarchy/outfit/job/outfit = outfit_by_type(occupation.outfit_type) - if(!istype(outfit)) - log_bad("[occupation.title] - [occupation.type]: Invalid outfit type [outfit ? outfit.type : "NULL"].") - failed_jobs++ - - if(failed_jobs) - fail("[failed_jobs] job\s with invalid outfit type.") - else - pass("All jobs had outfit types.") - return 1 - -/datum/unit_test/jobs_shall_have_a_HUD_icon - name = "JOB: Shall have a HUD icon" - -/datum/unit_test/jobs_shall_have_a_HUD_icon/start_test() - var/failed_jobs = 0 - var/failed_sanity_checks = 0 - - var/job_huds = icon_states(GLOB.using_map.id_hud_icons) - - if(!("" in job_huds)) - log_bad("Sanity Check - Missing default/unnamed HUD icon") - failed_sanity_checks++ - - if(!("hudunknown" in job_huds)) - log_bad("Sanity Check - Missing HUD icon: hudunknown") - failed_sanity_checks++ - - if(!("hudcentcom" in job_huds)) - log_bad("Sanity Check - Missing HUD icon: hudcentcom") - failed_sanity_checks++ - - for(var/job_name in SSjobs.titles_to_datums) - var/datum/job/J = SSjobs.titles_to_datums[job_name] - var/hud_icon_state = J.hud_icon - if(!(hud_icon_state in job_huds)) - log_bad("[J.title] - Missing HUD icon: [hud_icon_state]") - failed_jobs++ - - if(failed_sanity_checks || failed_jobs) - fail("[GLOB.using_map.id_hud_icons] - [failed_sanity_checks] failed sanity check\s, [failed_jobs] job\s with missing HUD icon.") - else - pass("All jobs have a HUD icon.") - return 1 - -/datum/unit_test/jobs_shall_have_a_unique_title - name = "JOBS: All Job Datums Shall Have A Unique Title" - -/datum/unit_test/jobs_shall_have_a_unique_title/start_test() - var/list/checked_titles = list() - var/list/non_unique_titles = list() - for(var/job_type in SSjobs.types_to_datums) - var/datum/job/job = SSjobs.types_to_datums[job_type] - var/list/titles_to_check = job.alt_titles ? job.alt_titles.Copy() : list() - titles_to_check += job.title - for(var/job_title in titles_to_check) - if(checked_titles[job_title]) - non_unique_titles += "[job_title] ([job_type])" - non_unique_titles |= "[job_title] ([checked_titles[job_title]])" - else - checked_titles[job_title] = job_type - - if(LAZYLEN(non_unique_titles)) - fail("Some jobs share a title:\n[jointext(non_unique_titles, "\n")]") - else - pass("All jobs have a unique title.") - return 1 \ No newline at end of file diff --git a/code/unit_tests/loadout_tests.dm b/code/unit_tests/loadout_tests.dm deleted file mode 100644 index 48d9e55d5e56f..0000000000000 --- a/code/unit_tests/loadout_tests.dm +++ /dev/null @@ -1,124 +0,0 @@ -/datum/unit_test/loadout_test_shall_have_name_cost_path - name = "LOADOUT: Entries shall have name, cost, and path definitions" - -/datum/unit_test/loadout_test_shall_have_name_cost_path/start_test() - var/failed = 0 - for(var/gear_name in gear_datums) - var/datum/gear/G = gear_datums[gear_name] - - if(!G.display_name) - log_unit_test("[G]: Missing display name.") - failed = 1 - else if(isnull(G.cost) || G.cost < 0) - log_unit_test("[G]: Invalid cost.") - failed = 1 - else if(!G.path) - log_unit_test("[G]: Missing path definition.") - failed = 1 - - if(failed) - fail("One or more /datum/gear definitions had invalid display names, costs, or path definitions") - else - pass("All /datum/gear definitions had correct settings.") - return 1 - -/datum/unit_test/loadout_test_shall_have_valid_icon_states - name = "LOADOUT: Entries shall have valid icon states" - -/datum/unit_test/loadout_test_shall_have_valid_icon_states/start_test() - var/failed = FALSE - for(var/gear_name in gear_datums) - var/datum/gear/G = gear_datums[gear_name] - var/list/path_tweaks = list() - for(var/datum/gear_tweak/path/p in G.gear_tweaks) - path_tweaks += p - - if(path_tweaks.len) - for(var/datum/gear_tweak/path/p in path_tweaks) - for(var/path_name in p.valid_paths) - var/path_type = p.valid_paths[path_name] - if(!type_has_valid_icon_state(path_type)) - var/atom/A = path_type - log_unit_test("[G] - [path_type] ('[path_name]'): Did not find a gear_tweak's icon_state '[initial(A.icon_state)]' in the icon '[initial(A.icon)]'.") - failed = TRUE - else - if(!type_has_valid_icon_state(G.path)) - var/obj/O = G.path - if(ispath(G.path, /obj)) - O = new G.path() - if(!(O.icon_state in icon_states(O.icon))) - log_unit_test("[G] - [G.path]: Did not find the icon state '[O.icon_state]' in the icon '[O.icon]'.") - failed = TRUE - qdel(O) - else - log_unit_test("[G] - [G.path]: Did not find the icon state '[initial(O.icon_state)]' in the icon '[initial(O.icon)]'.") - failed = TRUE - - if(failed) - fail("One or more /datum/gear definitions had paths with invalid icon states.") - else - pass("All /datum/gear definitions had correct icon states.") - return 1 - -/datum/unit_test/loadout_test_gear_path_tweaks_shall_be_of_gear_path - name = "LOADOUT: Gear path tweaks shall be of gear path." - -/datum/unit_test/loadout_test_gear_path_tweaks_shall_be_of_gear_path/start_test() - var/failed = 0 - for(var/gear_name in gear_datums) - var/datum/gear/G = gear_datums[gear_name] - for(var/datum/gear_tweak/path/p in G.gear_tweaks) - for(var/path_name in p.valid_paths) - var/path_type = p.valid_paths[path_name] - if(!ispath(path_type, G.path)) - log_unit_test("[G] - [path_type] ('[path_name]'): Was not a path of [G.path].") - failed++ - - if(failed) - fail("[failed] /datum/gear_tweak/path definition\s had invalid paths.") - else - pass("All /datum/gear_tweak/paths had valid paths.") - return 1 - -/datum/unit_test/loadout_test_gear_path_tweaks_shall_have_unique_keys - name = "LOADOUT: Gear path tweaks shall have unique keys" - -/datum/unit_test/loadout_test_gear_path_tweaks_shall_have_unique_keys/start_test() - var/path_entries_by_gear_path_and_name = list() - - for(var/gear_name in gear_datums) - var/datum/gear/G = gear_datums[gear_name] - for(var/datum/gear_tweak/path/p in G.gear_tweaks) - for(var/path_name in p.valid_paths) - group_by(path_entries_by_gear_path_and_name, "[G] - [p] - [path_name]", path_name) - - var/number_of_issues = number_of_issues(path_entries_by_gear_path_and_name, "Path Tweak Names") - if(number_of_issues) - fail("[number_of_issues] /datum/gear_tweak/path definition\s found.") - else - pass("All /datum/gear_tweak/path definitions had unique names.") - return 1 - -/proc/type_has_valid_icon_state(var/atom/type) - var/atom/A = type - return (initial(A.icon_state) in icon_states(initial(A.icon))) - - -/datum/unit_test/loadout_custom_setup_tweaks_shall_have_valid_procs - name = "LOADOUT: Custom setup tweaks shall have valid procs" - -/datum/unit_test/loadout_custom_setup_tweaks_shall_have_valid_procs/start_test() - for(var/gear_name in gear_datums) - var/datum/gear/G = gear_datums[gear_name] - var/datum/instance - var/mob/user - for(var/datum/gear_tweak/custom_setup/cs in G.gear_tweaks) - instance = instance || new G.path() - user = user || new() - cs.tweak_item(user, instance) - - QDEL_NULL(instance) - QDEL_NULL(user) - - pass("Succesfully called all custom setup procs without runtimes") - return 1 \ No newline at end of file diff --git a/code/unit_tests/machine_tests.dm b/code/unit_tests/machine_tests.dm deleted file mode 100644 index 613f32a596697..0000000000000 --- a/code/unit_tests/machine_tests.dm +++ /dev/null @@ -1,89 +0,0 @@ -/datum/unit_test/machines_shall_obey_part_maximum - name = "MACHINE: All mapped machines shall respect their own maximum component limit." - -/datum/unit_test/machines_shall_obey_part_maximum/start_test() - var/failed = list() - var/passed = list() - for(var/thing in SSmachines.machinery) - var/obj/machinery/machine = thing - if(passed[machine.type] || failed[machine.type]) - continue - for(var/path in machine.maximum_component_parts) - if(machine.number_of_components(path) > machine.maximum_component_parts[path]) - failed[machine.type] = TRUE - log_bad("[log_info_line(machine)] had too many components of type [path].") - if(!failed[machine.type]) - passed[machine.type] = TRUE - - if(length(failed)) - fail("One or more machines had too many components.") - else - pass("All machines respected component limits.") - return 1 - -/datum/unit_test/machines_with_circuits_shall_have_construct_states - name = "MACHINE: All mapped machines with corresponding circuits shall use construct states." - -/datum/unit_test/machines_with_circuits_shall_have_construct_states/start_test() - var/failed = list() - var/passed = list() - for(var/thing in SSmachines.machinery) - var/obj/machinery/machine = thing - if(passed[machine.type] || failed[machine.type]) - continue - var/path = machine.base_type || machine.type - var/circuit_type = GLOB.machine_path_to_circuit_type[path] - if(circuit_type && !machine.construct_state) - failed[machine.type] = TRUE - log_bad("[log_info_line(machine)] had an associated circuit of type [circuit_type] but no construction state.") - else - passed[machine.type] = TRUE - - if(length(failed)) - fail("One or more machines lacked a construction state despite having a circuit.") - else - pass("All machines with circuits had construction states.") - return 1 - -/datum/unit_test/machine_construct_states_shall_be_valid - name = "MACHINE: All mapped machines with construct states shall meet state requirements." - -/datum/unit_test/machine_construct_states_shall_be_valid/start_test() - var/failed = list() - for(var/thing in SSmachines.machinery) - var/obj/machinery/machine = thing - if(failed[machine.type]) - continue - if(!machine.construct_state) - continue - var/fail = machine.construct_state.fail_unit_test(machine) - if(fail) - failed[machine.type] = TRUE - log_bad(fail) - - if(length(failed)) - fail("One or more machines had an invalid construction state.") - else - pass("All machines had valid construction states.") - return 1 - - -/datum/unit_test/fabricator_recipes_shall_be_buildable - name = "MACHINE: All fabricators will be able to produce all of their recipes" - -/datum/unit_test/fabricator_recipes_shall_be_buildable/start_test() - var/failed = list() - for(var/thing in typesof(/obj/machinery/fabricator)) - var/obj/machinery/fabricator/fab = new thing - for(var/datum/fabricator_recipe/recipe in SSfabrication.get_recipes(fab.fabricator_class)) - for(var/mat in recipe.resources) - if(isnull(fab.storage_capacity[mat])) - log_bad("[fab.name] ([fab.type]) could not print [recipe.name] due to lacking [mat].") - failed += thing - break - qdel(fab) - if(length(failed)) - fail("One or more fabricators could not produce an associated recipe.") - else - pass("All fabricators could produce their associated recipes.") - return 1 \ No newline at end of file diff --git a/code/unit_tests/map_tests.dm b/code/unit_tests/map_tests.dm deleted file mode 100644 index 42d5e91815912..0000000000000 --- a/code/unit_tests/map_tests.dm +++ /dev/null @@ -1,856 +0,0 @@ -/* - * - * Map Unit Tests. - * Zone checks / APC / Scrubber / Vent / Cryopod Computers. - * - * - */ - -#define FAILURE 0 -#define SUCCESS 1 - - -/datum/unit_test/apc_area_test - name = "MAP: Area Test APC / Scrubbers / Vents" - - -/datum/unit_test/apc_area_test/start_test() - var/list/bad_areas = list() - var/area_test_count = 0 - - for(var/area/A in world) - if(!A.z) - continue - if(!isPlayerLevel(A.z)) - continue - area_test_count++ - var/area_good = 1 - var/bad_msg = "--------------- [A.name]([A.type])" - - var/exemptions = get_exemptions(A) - if(!A.apc && !(exemptions & GLOB.using_map.NO_APC)) - log_bad("[bad_msg] lacks an APC.") - area_good = 0 - else if(A.apc && (exemptions & GLOB.using_map.NO_APC)) - log_bad("[bad_msg] is not supposed to have an APC.") - area_good = 0 - - if(!A.air_scrub_names.len && !(exemptions & GLOB.using_map.NO_SCRUBBER)) - log_bad("[bad_msg] lacks an air scrubber.") - area_good = 0 - else if(A.air_scrub_names.len && (exemptions & GLOB.using_map.NO_SCRUBBER)) - log_bad("[bad_msg] is not supposed to have an air scrubber.") - area_good = 0 - - if(!A.air_vent_names.len && !(exemptions & GLOB.using_map.NO_VENT)) - log_bad("[bad_msg] lacks an air vent.[ascii_reset]") - area_good = 0 - else if(A.air_vent_names.len && (exemptions & GLOB.using_map.NO_VENT)) - log_bad("[bad_msg] is not supposed to have an air vent.") - area_good = 0 - - if(!area_good) - bad_areas.Add(A) - - if(bad_areas.len) - fail("\[[bad_areas.len]/[area_test_count]\]Some areas did not have the expected APC/vent/scrubber setup.") - else - pass("All \[[area_test_count]\] areas contained APCs, air scrubbers, and air vents.") - - return 1 - -/datum/unit_test/apc_area_test/proc/get_exemptions(var/area) - // We assume deeper types come last - for(var/i = GLOB.using_map.apc_test_exempt_areas.len; i>0; i--) - var/exempt_type = GLOB.using_map.apc_test_exempt_areas[i] - if(istype(area, exempt_type)) - return GLOB.using_map.apc_test_exempt_areas[exempt_type] - -/datum/unit_test/air_alarm_connectivity - name = "MAP: Air alarms shall receive updates." - async = TRUE // Waits for SStimers to finish one full run before testing - -/datum/unit_test/air_alarm_connectivity/start_test() - return 1 - -/datum/unit_test/air_alarm_connectivity/subsystems_to_await() - return list(SStimer) - -/datum/unit_test/air_alarm_connectivity/check_result() - var/failed = FALSE - for(var/area/A in world) - if(!A.z) - continue - if(!isPlayerLevel(A.z)) - continue - var/obj/machinery/alarm/alarm = locate() in A // Only test areas with functional alarms - if(!alarm) - continue - if(alarm.stat & (NOPOWER | BROKEN)) - continue - - for(var/tag in A.air_vent_names) // The point of this test is that while the names list is registered at init, the info is transmitted by radio. - if(!A.air_vent_info[tag]) - log_bad("Vent [A.air_vent_names[tag]] with id_tag [tag] did not update the air alarm in area [A].") - failed = TRUE - for(var/tag in A.air_scrub_names) - if(!A.air_scrub_info[tag]) - log_bad("Scrubber [A.air_scrub_names[tag]] with id_tag [tag] did not update the air alarm in area [A].") - failed = TRUE - - if(failed) - fail("Some areas did not receive updates from all of their atmos devices.") - else - pass("All atmos devices updated their area's air alarms successfully.") - - return 1 -//======================================================================================= - -/datum/unit_test/wire_test - name = "MAP: Cable Overlap Test" - -/datum/unit_test/wire_test/start_test() - var/wire_test_count = 0 - var/bad_tests = 0 - var/turf/T = null - var/obj/structure/cable/C = null - var/list/cable_turfs = list() - var/list/dirs_checked = list() - - for(C in world) - T = get_turf(C) - cable_turfs |= get_turf(C) - - for(T in cable_turfs) - var/bad_msg = "[ascii_red]--------------- [T.name] \[[T.x] / [T.y] / [T.z]\]" - dirs_checked.Cut() - for(C in T) - wire_test_count++ - var/combined_dir = "[C.d1]-[C.d2]" - if(combined_dir in dirs_checked) - bad_tests++ - log_unit_test("[bad_msg] Contains multiple wires with same direction on top of each other.") - dirs_checked.Add(combined_dir) - - if(bad_tests) - fail("\[[bad_tests] / [wire_test_count]\] Some turfs had overlapping wires going the same direction.") - else - pass("All \[[wire_test_count]\] wires had no overlapping cables going the same direction.") - - return 1 - -//======================================================================================= - -/datum/unit_test/wire_dir_and_icon_stat - name = "MAP: Cable Dir And Icon State Test" - -/datum/unit_test/wire_dir_and_icon_stat/start_test() - var/list/bad_cables = list() - - for(var/obj/structure/cable/C in world) - var/expected_icon_state = "[C.d1]-[C.d2]" - if(C.icon_state != expected_icon_state) - bad_cables |= C - log_bad("[log_info_line(C)] has an invalid icon state. Expected [expected_icon_state], was [C.icon_state]") - if(!(C.icon_state in icon_states(C.icon))) - bad_cables |= C - log_bad("[log_info_line(C)] has an non-existing icon state.") - - if(bad_cables.len) - fail("Found [bad_cables.len] cable\s with an unexpected icon state.") - else - pass("All wires had their expected icon state.") - - return 1 - -//======================================================================================= - -/datum/unit_test/closet_test - name = "MAP: Closet Capacity Test Player Z levels" - -/datum/unit_test/closet_test/start_test() - var/bad_tests = 0 - - for(var/obj/structure/closet/C in world) - if(!C.opened && isPlayerLevel(C.z)) - var/total_content_size = 0 - for(var/atom/movable/AM in C.contents) - total_content_size += C.content_size(AM) - if(total_content_size > C.storage_capacity) - log_bad("[log_info_line(C)] contains more objects than able to hold ([total_content_size] / [C.storage_capacity]).") - bad_tests++ - - if(bad_tests) - fail("\[[bad_tests]\] Some closets contained more objects than they were able to hold.") - else - pass("No overflowing closets found.") - - return 1 - -//======================================================================================= - -/datum/unit_test/closet_containment_test - name = "MAP: Closet Containment Test Player Z levels" - -/datum/unit_test/closet_containment_test/start_test() - var/bad_tests = 0 - - for(var/obj/structure/closet/C in world) - if(!C.opened && isPlayerLevel(C.z)) - var/contents_pre_open = C.contents.Copy() - C.dump_contents() - C.store_contents() - var/list/no_longer_contained_atoms = contents_pre_open - C.contents - var/list/previously_not_contained_atoms = C.contents - contents_pre_open - - if(no_longer_contained_atoms.len) - bad_tests++ - log_bad("[log_info_line(C)] no longer contains the following atoms: [log_info_line(no_longer_contained_atoms)]") - if(previously_not_contained_atoms.len) - log_debug("[log_info_line(C)] now contains the following atoms: [log_info_line(previously_not_contained_atoms)]") - - if(bad_tests) - fail("[bad_tests] closet\s with inconsistent pre/post-open contents found.") - else - pass("No closets with inconsistent pre/post-open contents found.") - - return 1 - -//======================================================================================= - -/datum/unit_test/storage_map_test - name = "MAP: On Map Storage Item Capacity Test Player Z levels" - -/datum/unit_test/storage_map_test/start_test() - var/bad_tests = 0 - - for(var/obj/item/storage/S in world) - if(isPlayerLevel(S.z)) - var/bad_msg = "[ascii_red]--------------- [S.name] \[[S.type]\] \[[S.x] / [S.y] / [S.z]\]" - bad_tests += test_storage_capacity(S, bad_msg) - - if(bad_tests) - fail("\[[bad_tests]\] Some on-map storage items were not able to hold their initial contents.") - else - pass("All on-map storage items were able to hold their initial contents.") - - return 1 - -/datum/unit_test/map_image_map_test - name = "MAP: All map levels shall have a corresponding map image." - -/datum/unit_test/map_image_map_test/start_test() - var/failed = FALSE - - for(var/z in GLOB.using_map.map_levels) - var/file_name = map_image_file_name(z) - var/file_path = MAP_IMAGE_PATH + file_name - if(!fexists(file_path)) - failed = TRUE - log_unit_test("[GLOB.using_map.path]-[z] is missing its map image [file_name].") - - if(failed) - fail("One or more map levels were missing a corresponding map image.") - else - pass("All map levels had a corresponding image.") - - return 1 - -//======================================================================================= - -/datum/unit_test/correct_allowed_spawn_test - name = "MAP: All allowed_spawns entries should have spawnpoints on map." - -/datum/unit_test/correct_allowed_spawn_test/start_test() - var/failed = FALSE - - for(var/spawn_name in GLOB.using_map.allowed_spawns) - var/datum/spawnpoint/spawnpoint = spawntypes()[spawn_name] - if(!spawnpoint) - log_unit_test("Map allows spawning in [spawn_name], but [spawn_name] is null!") - failed = TRUE - else if(!spawnpoint.turfs.len) - log_unit_test("Map allows spawning in [spawn_name], but [spawn_name] has no associated spawn turfs.") - failed = TRUE - - if(failed) - log_unit_test("Following spawn points exist:") - for(var/spawnpoint in spawntypes()) - log_unit_test("\t[spawnpoint] ([any2ref(spawnpoint)])") - log_unit_test("Following spawn points are allowed:") - for(var/spawnpoint in GLOB.using_map.allowed_spawns) - log_unit_test("\t[spawnpoint] ([any2ref(spawnpoint)])") - fail("Some of the entries in allowed_spawns have no spawnpoint turfs.") - else - pass("All entries in allowed_spawns have spawnpoints.") - - return 1 - -//======================================================================================= - -/datum/unit_test/map_check - name = "MAP: Map Check" - -/datum/unit_test/map_check/start_test() - if(world.maxx < 1 || world.maxy < 1 || world.maxz < 1) - fail("Unexpected map size. Was a map properly included?") - else - pass("Map size met minimum requirements.") - return 1 -//======================================================================================= - -/datum/unit_test/ladder_check - name = "MAP: Ladder Check" - -/datum/unit_test/ladder_check/start_test() - var/succeeded = TRUE - for(var/obj/structure/ladder/L) - if(L.allowed_directions & UP) - succeeded = check_direction(L, GetAbove(L), UP, DOWN) && succeeded - if(L.allowed_directions & DOWN) - succeeded = check_direction(L, GetBelow(L), DOWN, UP) && succeeded - succeeded = check_open_space(L) && succeeded - if(succeeded) - pass("All ladders are correctly setup.") - else - fail("One or more ladders are incorrectly setup.") - - return 1 - -/datum/unit_test/ladder_check/proc/check_direction(var/obj/structure/ladder/L, var/turf/destination_turf, var/check_direction, var/other_ladder_direction) - if(!destination_turf) - log_bad("Unable to acquire turf in the [dir2text(check_direction)] for [log_info_line(L)]") - return FALSE - var/obj/structure/ladder/other_ladder = (locate(/obj/structure/ladder) in destination_turf) - if(!other_ladder) - log_bad("Unable to acquire ladder in the direction [dir2text(check_direction)] for [log_info_line(L)]") - return FALSE - if(!(other_ladder.allowed_directions & other_ladder_direction)) - log_bad("The ladder in the direction [dir2text(check_direction)] is not allowed to connect to [log_info_line(L)]") - return FALSE - return TRUE - -/datum/unit_test/ladder_check/proc/check_open_space(var/obj/structure/ladder/L) - if(!istype(get_turf(L), /turf/simulated/open)) - log_bad("There is a non-open turf blocking the way for [log_info_line(L)]") - return FALSE - return TRUE - - -//======================================================================================= - -/datum/unit_test/landmark_check - name = "MAP: Landmark Check" - -/datum/unit_test/landmark_check/start_test() - var/safe_landmarks = 0 - var/space_landmarks = 0 - - for(var/lm in landmarks_list) - var/obj/effect/landmark/landmark = lm - if(istype(landmark, /obj/effect/landmark/test/safe_turf)) - log_debug("Safe landmark found: [log_info_line(landmark)]") - safe_landmarks++ - else if(istype(landmark, /obj/effect/landmark/test/space_turf)) - log_debug("Space landmark found: [log_info_line(landmark)]") - space_landmarks++ - else if(istype(landmark, /obj/effect/landmark/test)) - log_debug("Test landmark with unknown tag found: [log_info_line(landmark)]") - - if(safe_landmarks != 1 || space_landmarks != 1) - if(safe_landmarks != 1) - log_bad("Found [safe_landmarks] safe landmarks. Expected 1.") - if(space_landmarks != 1) - log_bad("Found [space_landmarks] space landmarks. Expected 1.") - fail("Expected exactly one safe landmark, and one space landmark.") - else - pass("Exactly one safe landmark, and exactly one space landmark found.") - - return 1 - -//======================================================================================= - -/datum/unit_test/cryopod_comp_check - name = "MAP: Cryopod Validity Check" - -/datum/unit_test/cryopod_comp_check/start_test() - var/pass = TRUE - - for(var/obj/machinery/cryopod/C in SSmachines.machinery) - if(!C.control_computer) - log_bad("[get_area(C)] lacks a cryopod control computer while holding a cryopod.") - pass = FALSE - - for(var/obj/machinery/computer/cryopod/C in SSmachines.machinery) - if(!(locate(/obj/machinery/cryopod) in get_area(C))) - log_bad("[get_area(C)] lacks a cryopod while holding a control computer.") - pass = FALSE - - if(pass) - pass("All cryopods have their respective control computers.") - else - fail("Cryopods were not set up correctly.") - - return 1 - -//======================================================================================= - -/datum/unit_test/camera_nil_c_tag_check - name = "MAP: Camera nil c_tag check" - -/datum/unit_test/camera_nil_c_tag_check/start_test() - var/pass = TRUE - - for(var/obj/machinery/camera/C in world) - if(!C.c_tag) - log_bad("Following camera does not have a c_tag set: [log_info_line(C)]") - pass = FALSE - - if(pass) - pass("Have cameras have the c_tag set.") - else - fail("One or more cameras do not have the c_tag set.") - - return 1 - -//======================================================================================= - -/datum/unit_test/camera_unique_c_tag_check - name = "MAP: Camera unique c_tag check" - -/datum/unit_test/camera_unique_c_tag_check/start_test() - var/cameras_by_ctag = list() - var/checked_cameras = 0 - - for(var/obj/machinery/camera/C in world) - if(!C.c_tag) - continue - checked_cameras++ - group_by(cameras_by_ctag, C.c_tag, C) - - var/number_of_issues = number_of_issues(cameras_by_ctag, "Camera c_tags", /decl/noi_feedback/detailed) - if(number_of_issues) - fail("[number_of_issues] issue\s with camera c_tags found.") - else - pass("[checked_cameras] camera\s have a unique c_tag.") - - return 1 - -//======================================================================================= - -/datum/unit_test/disposal_segments_shall_connect_with_other_disposal_pipes - name = "MAP: Disposal segments shall connect with other disposal pipes" - -/datum/unit_test/disposal_segments_shall_connect_with_other_disposal_pipes/start_test() - var/list/faulty_pipes = list() - - // Desired directions for straight pipes, when encountering curved pipes in the main and reversed dir respectively - var/list/straight_desired_directions = list( - num2text(SOUTH) = list(list(NORTH, WEST), list(SOUTH, EAST)), - num2text(EAST) = list(list(SOUTH, WEST), list(NORTH, EAST))) - - // Desired directions for curved pipes: - // list(desired_straight, list(desired_curved_one, desired_curved_two) in the main and curved direction - var/list/curved_desired_directions = list( - num2text(NORTH) = list(list(SOUTH, list(SOUTH, EAST)), list(EAST, list(SOUTH, WEST))), - num2text(EAST) = list(list(EAST, list(SOUTH, WEST)), list(SOUTH, list(NORTH, WEST))), - num2text(SOUTH) = list(list(SOUTH, list(NORTH, WEST)), list(EAST, list(NORTH, EAST))), - num2text(WEST) = list(list(EAST, list(NORTH, EAST)), list(SOUTH, list(SOUTH, EAST)))) - - for(var/obj/structure/disposalpipe/segment/D in world) - if(D.icon_state == "pipe-s") - if(!(D.dir == SOUTH || D.dir == EAST)) - log_bad("Following disposal pipe has an invalid direction set: [log_info_line(D)]") - continue - var/turf/turf_one = get_step(D.loc, D.dir) - var/turf/turf_two = get_step(D.loc, turn(D.dir, 180)) - - var/list/desired_dirs = straight_desired_directions[num2text(D.dir)] - if(!turf_contains_matching_disposal_pipe(turf_one, D.dir, desired_dirs[1]) || !turf_contains_matching_disposal_pipe(turf_two, D.dir, desired_dirs[2])) - log_bad("Following disposal pipe does not connect correctly: [log_info_line(D)]") - faulty_pipes += D - else - var/turf/turf_one = get_step(D.loc, D.dir) - var/turf/turf_two = get_step(D.loc, turn(D.dir, -90)) - - var/list/desired_dirs = curved_desired_directions[num2text(D.dir)] - var/main_dirs = desired_dirs[1] - var/rev_dirs = desired_dirs[2] - - if(!turf_contains_matching_disposal_pipe(turf_one, main_dirs[1], main_dirs[2]) || !turf_contains_matching_disposal_pipe(turf_two, rev_dirs[1], rev_dirs[2])) - log_bad("Following disposal pipe does not connect correctly: [log_info_line(D)]") - faulty_pipes += D - - if(faulty_pipes.len) - fail("[faulty_pipes.len] disposal segment\s did not connect with other disposal pipes.") - else - pass("All disposal segments connect with other disposal pipes.") - - return 1 - -/datum/unit_test/disposal_segments_shall_connect_with_other_disposal_pipes/proc/turf_contains_matching_disposal_pipe(var/turf/T, var/straight_dir, var/list/curved_dirs) - if(!T) - return FALSE - - // We need to loop over all potential pipes in a turf as long as there isn't a dir match, as they may be overlapping (i.e. 2 straight pipes in a cross) - for(var/obj/structure/disposalpipe/D in T) - if(D.type == /obj/structure/disposalpipe/segment) - if(D.icon_state == "pipe-s") - if(D.dir == straight_dir) - return TRUE - else - if(D.dir in curved_dirs) - return TRUE - else - return TRUE - return FALSE - -//======================================================================================= - -/datum/unit_test/simple_pipes_shall_not_face_north_or_west // The init code is worthless and cannot handle it - name = "MAP: Simple pipes shall not face north or west" - -/datum/unit_test/simple_pipes_shall_not_face_north_or_west/start_test() - var/failures = 0 - for(var/obj/machinery/atmospherics/pipe/simple/pipe in world) // Pipes are removed from the SSmachines list during init. - if(!istype(pipe, /obj/machinery/atmospherics/pipe/simple/hidden) && !istype(pipe, /obj/machinery/atmospherics/pipe/simple/visible)) - continue - if(pipe.dir == NORTH || pipe.dir == WEST) - log_bad("Following pipe had an invalid direction: [log_info_line(pipe)]") - failures++ - - if(failures) - fail("[failures] simple pipe\s faced the wrong direction.") - else - pass("All simple pipes faced an appropriate direction.") - return 1 - -//======================================================================================= - -/datum/unit_test/shutoff_valves_shall_connect_to_two_different_pipe_networks - name = "MAP: Shutoff valves shall connect to two different pipe networks" - -/datum/unit_test/shutoff_valves_shall_connect_to_two_different_pipe_networks/start_test() - var/failures = 0 - for(var/obj/machinery/atmospherics/valve/shutoff/SV in SSmachines.machinery) - SV.close() - for(var/obj/machinery/atmospherics/valve/shutoff/SV in SSmachines.machinery) - if(SV.network_node1 == SV.network_node2) - log_bad("Following shutoff valve does not connect to two different pipe networks: [log_info_line(SV)]") - failures++ - - if(failures) - fail("[failures] shutoff valves did not connect to two different pipe networks.") - else - pass("All shutoff valves connect to two different pipe networks.") - return 1 - -//======================================================================================= - -/datum/unit_test/station_pipes_shall_not_leak - name = "MAP: Station pipes shall not leak" - -/datum/unit_test/station_pipes_shall_not_leak/start_test() - var/failures = 0 - for(var/obj/machinery/atmospherics/pipe/P in world) - if(P.leaking && isStationLevel(P.z)) - failures++ - log_bad("Following pipe is leaking: [log_info_line(P)]") - - if(failures) - fail("[failures] station pipe\s leak.") - else - pass("No station pipes are leaking") - return 1 - -//======================================================================================= - -/datum/unit_test/station_power_terminals_shall_be_wired - name = "MAP: Station power terminals shall be wired" - -/datum/unit_test/station_power_terminals_shall_be_wired/start_test() - var/failures = 0 - for(var/obj/machinery/power/terminal/term in SSmachines.machinery) - var/turf/T = get_turf(term) - if(!T) - failures++ - log_bad("Nullspace terminal : [log_info_line(term)]") - continue - - if(!isStationLevel(T.z)) - continue - - var/found_cable = FALSE - for(var/obj/structure/cable/C in T) - if(C.d2 > 0 && C.d1 == 0) - found_cable = TRUE - break - if(!found_cable) - failures++ - log_bad("Unwired terminal : [log_info_line(term)]") - - if(failures) - fail("[failures] unwired power terminal\s.") - else - pass("All station power terminals are wired.") - return 1 - -//======================================================================================= - -/datum/unit_test/station_wires_shall_be_connected - name = "MAP: Station wires shall be connected" - var/list/exceptions - -/datum/unit_test/station_wires_shall_be_connected/start_test() - var/failures = 0 - - var/exceptions_by_turf = list() - for(var/exception in exceptions) - var/turf/T = locate(exception[1], exception[2], exception[3]) - if(!T) - CRASH("Invalid exception: [exception[1]] - [exception[2]] - [exception[3]]") - if(!(T in exceptions_by_turf)) - exceptions_by_turf[T] = list() - exceptions_by_turf[T] += exception[4] - exceptions = exceptions_by_turf - - for(var/obj/structure/cable/C in world) - if(!all_ends_connected(C)) - failures++ - - if(failures) - fail("Found [failures] cable\s without connections.") - else if(exceptions.len) - for(var/entry in exceptions) - log_bad("[log_info_line(entry)] - [english_list(exceptions[entry])] ") - fail("Unnecessary exceptions need to be cleaned up.") - else - pass("All station wires are properly connected.") - - return 1 - -// We work on the assumption that another test ensures we only have valid directions -/datum/unit_test/station_wires_shall_be_connected/proc/all_ends_connected(var/obj/structure/cable/C) - . = TRUE - - var/turf/source_turf = get_turf(C) - if(!source_turf) - log_bad("Nullspace wire: [log_info_line(C)]") - return FALSE - - // We don't care about non-station wires - if(!isStationLevel(source_turf.z)) - return TRUE - - for(var/dir in list(C.d1, C.d2)) - if(!dir) // Don't care about knots - continue - var/rev_dir = GLOB.reverse_dir[dir] - - var/list/exception = exceptions[source_turf] - if(exception && (dir in exception)) - exception -= dir - if(!exception.len) - exceptions -= source_turf - continue - - var/turf/target_turf - if(dir == UP) - target_turf = GetAbove(C) - if(dir == DOWN) - target_turf = GetBelow(C) - else - target_turf = get_step(C, dir) - - var/connected = FALSE - for(var/obj/structure/cable/revC in target_turf) - if(revC.d1 == rev_dir || revC.d2 == rev_dir) - connected = TRUE - break - - if(!connected) - log_bad("Disconnected wire: [dir2text(dir)] - [log_info_line(C)]") - . = FALSE - -/datum/unit_test/networked_disposals_shall_deliver_tagged_packages - name = "MAP: Networked disposals shall deliver tagged packages" - async = 1 - - var/extra_spawns = 1 - - var/list/packages_awaiting_delivery = list() - var/list/all_tagged_bins = list() - var/list/all_tagged_destinations = list() - - var/failed = FALSE - var/list/exempt_junctions = list( - /obj/structure/disposalpipe/sortjunction/untagged - ) - -/datum/unit_test/networked_disposals_shall_deliver_tagged_packages/start_test() - . = 1 - var/fail = FALSE - for(var/obj/structure/disposalpipe/sortjunction/sort in world) - if(is_type_in_list(sort, exempt_junctions)) - continue - var/obj/machinery/disposal/bin = get_bin_from_junction(sort) - if(!bin) - log_bad("Junction with tag [sort.sort_type] at ([sort.x], [sort.y], [sort.z]) could not find disposal.") - fail = TRUE - continue - all_tagged_destinations[sort.sort_type] = bin - if(!istype(bin)) // Can also be an outlet. - continue - all_tagged_bins[sort.sort_type] = bin - if(fail) - fail("Improperly connected junction detected.") - return - for(var/target_tag in all_tagged_destinations) - var/start_tag = all_tagged_bins[target_tag] ? target_tag : pick(all_tagged_bins) - spawn_package(start_tag, target_tag) - for(var/i in 1 to extra_spawns) - spawn_package(pick(all_tagged_bins), target_tag) // This potentially helps catch errors in junction logic. - -/datum/unit_test/networked_disposals_shall_deliver_tagged_packages/proc/spawn_package(start_tag, target_tag) - var/obj/structure/disposalholder/unit_test/package = new() - package.tomail = 1 - package.destinationTag = target_tag - package.start(all_tagged_bins[start_tag]) - package.test = src - packages_awaiting_delivery[package] = start_tag - -/obj/structure/disposalholder/unit_test - var/datum/unit_test/networked_disposals_shall_deliver_tagged_packages/test - speed = 100 - -/obj/structure/disposalholder/unit_test/Destroy() - test.package_delivered(src) - . = ..() - -/obj/structure/disposalholder/unit_test/Process() - for(var/i in 1 to speed) // Go faster, as it takes a while and we don't want to wait forever. - . = ..() - if(. == PROCESS_KILL) - if(QDELETED(src) || !test.packages_awaiting_delivery[src]) - return - log_and_fail() - return - -/obj/structure/disposalholder/unit_test/proc/log_and_fail() - var/location = log_info_line(get_turf(src)) - var/expected_loc = log_info_line(get_turf(test.all_tagged_destinations[destinationTag])) - test.log_bad("A package routed from [test.packages_awaiting_delivery[src]] to [destinationTag] was misrouted to [location]; expected location was [expected_loc].") - test.failed = TRUE - test.packages_awaiting_delivery -= src - -/datum/unit_test/networked_disposals_shall_deliver_tagged_packages/check_result() - . = 1 - if(failed) - fail("A package has been delivered to an incorrect location.") - return - if(!packages_awaiting_delivery.len) - pass("All packages delivered.") - return - return 0 - -/datum/unit_test/networked_disposals_shall_deliver_tagged_packages/proc/package_delivered(var/obj/structure/disposalholder/unit_test/package) - if(!packages_awaiting_delivery[package]) - return - var/obj/structure/disposalpipe/trunk/trunk = package.loc - - if(!istype(trunk)) - package.log_and_fail() - return - var/obj/linked = trunk.linked - if(all_tagged_destinations[package.destinationTag] != linked) - package.log_and_fail() - return - packages_awaiting_delivery -= package - -/datum/unit_test/networked_disposals_shall_deliver_tagged_packages/proc/get_bin_from_junction(var/obj/structure/disposalpipe/sortjunction/sort) - var/list/traversed = list(sort) // Avoid self-looping, infinite loops. - var/obj/structure/disposalpipe/our_pipe = sort - var/current_dir = sort.sortdir - while(1) - if(istype(our_pipe, /obj/structure/disposalpipe/trunk)) - var/obj/structure/disposalpipe/trunk/trunk = our_pipe - return trunk.linked - var/obj/structure/disposalpipe/next_pipe - for(var/obj/structure/disposalpipe/P in get_step(our_pipe, current_dir)) - if(turn(current_dir, 180) & P.dpdir) - next_pipe = P - break - if(!istype(next_pipe)) - return - if(next_pipe in traversed) - return - traversed += next_pipe - current_dir = next_pipe.nextdir(current_dir, sort.sort_type) - our_pipe = next_pipe - -/datum/unit_test/req_access_shall_have_valid_strings - name = "MAP: every obj shall have valid access strings in req_access" - var/list/accesses - -/datum/unit_test/req_access_shall_have_valid_strings/start_test() - if(!accesses) - accesses = get_all_access_datums() - - var/list/obj_access_pairs = list() - for(var/obj/O in world) - if(O.req_access) - for(var/req in O.req_access) - if(islist(req)) - for(var/req_one in req) - if(is_invalid(req_one)) - obj_access_pairs += list(list(O, req_one)) - else if(is_invalid(req)) - obj_access_pairs += list(list(O, req)) - - if(obj_access_pairs.len) - for(var/entry in obj_access_pairs) - log_bad("[log_info_line(entry[1])] has an invalid value ([entry[2]]) in req_access.") - fail("Mapped objs with req_access must be set up to use existing access strings.") - else - pass("All mapped objs have correctly set req_access.") - - return 1 - -/datum/unit_test/req_access_shall_have_valid_strings/proc/is_invalid(var/value) - if(!istext(value)) - return TRUE //Someone tried to use a non-string as an access. There is no case where this is allowed. - - for(var/datum/access/A in accesses) - if(value == A.id) - return FALSE - - return TRUE - -/datum/unit_test/doors_shall_be_on_appropriate_turfs - name = "MAP: Doors shall be on appropriate turfs" - -/datum/unit_test/doors_shall_be_on_appropriate_turfs/start_test() - var/bad_doors = 0 - for(var/obj/machinery/door/D in world) - if(QDELETED(D)) - continue - if(!istype(D.loc, /turf)) - bad_doors++ - log_bad("Invalid door turf: [log_info_line(D.loc)]]") - else - var/is_bad_door = FALSE - for(var/L in D.locs) - if(istype(L, /turf/simulated/open) || isspaceturf(L)) - is_bad_door = TRUE - log_bad("Invalid door turf: [log_info_line(L)]]") - if(is_bad_door) - bad_doors++ - - if(bad_doors) - fail("Found [bad_doors] door\s on inappropriate turfs") - else - pass("All doors are on appropriate turfs") - return TRUE - -#undef SUCCESS -#undef FAILURE diff --git a/code/unit_tests/mob_tests.dm b/code/unit_tests/mob_tests.dm deleted file mode 100644 index 240e8ac74d881..0000000000000 --- a/code/unit_tests/mob_tests.dm +++ /dev/null @@ -1,691 +0,0 @@ - -/* - * - * Mob Unit Tests. - * - * Human suffocation in Space. - * Mob damage Template - * Species sprite options - * - */ - -#define SUCCESS 1 -#define FAILURE 0 - -// -// Tests Life() and mob breathing in space. -// - -/datum/unit_test/human_breath - name = "MOB: Breathing Species Suffocate in Space" - var/list/test_subjects = list() - async = 1 - -/datum/unit_test/human_breath/start_test() - var/turf/T = get_space_turf() - - if(!istype(T, /turf/space)) //If the above isn't a space turf then we force it to find one will most likely pick 1,1,1 - T = locate(/turf/space) - for(var/species_name in all_species) - var/datum/species/S = all_species[species_name] - var/mob/living/carbon/human/H = new(T, S.name) - if(H.need_breathe()) - var/species_organ = H.species.breathing_organ - var/obj/item/organ/internal/lungs/L - H.apply_effect(20, EFFECT_STUN, 0) - L = H.internal_organs_by_name[species_organ] - L.last_successful_breath = -INFINITY - test_subjects[S.name] = list(H, damage_check(H, DAMAGE_OXY)) - return 1 - -/datum/unit_test/human_breath/check_result() - for(var/i in test_subjects) - var/mob/living/carbon/human/H = test_subjects[i][1] - if(H.life_tick < 10) // Finish Condition - return 0 // Return 0 to try again later. - - var/failcount = 0 - for(var/i in test_subjects) - var/mob/living/carbon/human/H = test_subjects[i][1] - var/ending_oxyloss = damage_check(H, DAMAGE_OXY) - var/starting_oxyloss = test_subjects[i][2] - if(starting_oxyloss >= ending_oxyloss) - failcount++ - log_debug("[H.species.name] is not taking oxygen damage, started with [starting_oxyloss] and ended with [ending_oxyloss] at place [log_info_line(H.loc)].") - - if(failcount) - fail("[failcount] breathing species mobs didn't suffocate in space.") - else - pass("All breathing species mobs suffocated in space.") - - return 1 // return 1 to show we're done and don't want to recheck the result. - -// ============================================================================ - -var/global/default_mobloc = null - -/proc/create_test_mob_with_mind(var/turf/mobloc = null, var/mobtype = /mob/living/carbon/human) - var/list/test_result = list("result" = FAILURE, "msg" = "", "mobref" = null) - - if(isnull(mobloc)) - if(!default_mobloc) - for(var/turf/simulated/floor/tiled/T in world) - var/pressure = T.zone?.air.return_pressure() - if (isnull(pressure)) - continue - - if(90 < pressure && pressure < 120) // Find a turf between 90 and 120 - default_mobloc = T - break - mobloc = default_mobloc - if(!mobloc) - test_result["msg"] = "Unable to find a location to create test mob" - return test_result - - var/mob/living/carbon/human/H = new mobtype(mobloc) - - H.mind_initialize("TestKey[rand(0,10000)]") - - test_result["result"] = SUCCESS - test_result["msg"] = "Mob created" - test_result["mobref"] = "\ref[H]" - - return test_result - -//Generic Check -// TODO: Need to make sure I didn't just recreate the wheel here. - -/proc/damage_check(var/mob/living/M, var/damage_type) - var/loss = null - - switch(damage_type) - if (DAMAGE_BRUTE) - loss = M.getBruteLoss() - if (DAMAGE_BURN) - loss = M.getFireLoss() - if (DAMAGE_TOXIN) - loss = M.getToxLoss() - if (DAMAGE_OXY) - loss = M.getOxyLoss() - if(istype(M,/mob/living/carbon/human)) - var/mob/living/carbon/human/H = M - var/obj/item/organ/internal/lungs/L = H.internal_organs_by_name["lungs"] - if(L) - loss = L.oxygen_deprivation - if (DAMAGE_GENETIC) - loss = M.getCloneLoss() - if (DAMAGE_PAIN) - loss = M.getHalLoss() - - if(!loss && istype(M, /mob/living/carbon/human)) - var/mob/living/carbon/human/H = M // Synthetics have robot limbs which don't report damage to getXXXLoss() - if(H.isSynthetic()) // So we have to hard code this check or create a different one for them. - return H.species.total_health - H.health - return loss - -// ============================================================================================================== - -// -//DAMAGE EXPECTATIONS -// used with expectected_vunerability - -#define STANDARD 0 // Will take standard damage (damage_ratio of 1) -#define ARMORED 1 // Will take less damage than applied -#define EXTRA_VULNERABLE 2 // Will take more dmage than applied -#define IMMUNE 3 // Will take no damage - -//============================================================================================================== - - -/datum/unit_test/mob_damage - name = "MOB: Template for mob damage" - template = /datum/unit_test/mob_damage - var/mob/living/carbon/human/testmob = null - var/damagetype = DAMAGE_BRUTE - var/mob_type = /mob/living/carbon/human - var/expected_vulnerability = STANDARD - var/check_health = 0 - var/damage_location = BP_CHEST - -/datum/unit_test/mob_damage/start_test() - var/list/test = create_test_mob_with_mind(null, mob_type) - var/damage_amount = 4 // Do not raise, if damage >= 5 there is a % chance to reduce damage by half in /obj/item/organ/external/take_damage() - // Which makes checks impossible. - - if(isnull(test)) - fail("Check Runtimed in Mob creation") - - if(test["result"] == FAILURE) - fail(test["msg"]) - return 0 - - var/mob/living/carbon/human/H = locate(test["mobref"]) - - if(isnull(H)) - fail("Test unable to set test mob from reference") - return 0 - - if(H.stat) - - fail("Test needs to be re-written, mob has a stat = [H.stat]") - return 0 - - if(H.sleeping) - fail("Test needs to be re-written, mob is sleeping for some unknown reason") - return 0 - - // Damage the mob - - var/initial_health = H.health - - if (damagetype == DAMAGE_OXY && H.need_breathe()) - var/species_organ = H.species.breathing_organ - var/obj/item/organ/internal/lungs/L - if(species_organ) - L = H.internal_organs_by_name[species_organ] - if(L) - L.last_successful_breath = -INFINITY - - H.apply_damage(damage_amount, damagetype, damage_location) - - var/ending_damage = damage_check(H, damagetype) - - var/ending_health = H.health - - // Now test this stuff. - - var/failure = 0 - - var/damage_ratio = STANDARD - - if (ending_damage == 0) - damage_ratio = IMMUNE - - else if (ending_damage < damage_amount) - damage_ratio = ARMORED - - else if (ending_damage > damage_amount) - damage_ratio = EXTRA_VULNERABLE - - if(damage_ratio != expected_vulnerability) - failure = 1 - - // Now generate the message for this test. - - var/expected_msg = null - - switch(expected_vulnerability) - if(STANDARD) - expected_msg = "to take standard damage" - if(ARMORED) - expected_msg = "To take less damage" - if(EXTRA_VULNERABLE) - expected_msg = "To take extra damage" - if(IMMUNE) - expected_msg = "To take no damage" - - - var/msg = "Damage taken: [ending_damage] out of [damage_amount] || expected: [expected_msg] \[Overall Health:[ending_health] (Initial: [initial_health]\]" - - if(failure) - fail(msg) - else - pass(msg) - - return 1 - -// ================================================================= -// Human damage check. -// ================================================================= - -/datum/unit_test/mob_damage/brute - name = "MOB: Human Brute damage check" - damagetype = DAMAGE_BRUTE - -/datum/unit_test/mob_damage/burn - name = "MOB: Human Burn damage check" - damagetype = DAMAGE_BURN - -/datum/unit_test/mob_damage/tox - name = "MOB: Human Toxin damage check" - damagetype = DAMAGE_TOXIN - -/datum/unit_test/mob_damage/oxy - name = "MOB: Human Oxygen damage check" - damagetype = DAMAGE_OXY - -/datum/unit_test/mob_damage/genetic - name = "MOB: Human Genetic damage check" - damagetype = DAMAGE_GENETIC - -/datum/unit_test/mob_damage/pain - name = "MOB: Human Pain damage check" - damagetype = DAMAGE_PAIN - -// ================================================================= -// Unathi -// ================================================================= - -/datum/unit_test/mob_damage/unathi - name = "MOB: Unathi damage check template" - template = /datum/unit_test/mob_damage/unathi - mob_type = /mob/living/carbon/human/unathi - -/datum/unit_test/mob_damage/unathi/brute - name = "MOB: Unathi Brute Damage Check" - damagetype = DAMAGE_BRUTE - expected_vulnerability = ARMORED - -/datum/unit_test/mob_damage/unathi/fire - name = "MOB: Unathi Fire Damage Check" - damagetype = DAMAGE_BURN - -/datum/unit_test/mob_damage/unathi/tox - name = "MOB: Unathi Toxins Damage Check" - damagetype = DAMAGE_TOXIN - -/datum/unit_test/mob_damage/unathi/oxy - name = "MOB: Unathi Oxygen Damage Check" - damagetype = DAMAGE_OXY - -/datum/unit_test/mob_damage/unathi/genetic - name = "MOB: Unathi Genetic Damage Check" - damagetype = DAMAGE_GENETIC - -/datum/unit_test/mob_damage/unathi/pain - name = "MOB: Unathi Pain Damage Check" - damagetype = DAMAGE_PAIN - -// ================================================================= -// Skrell -// ================================================================= - -/datum/unit_test/mob_damage/skrell - name = "MOB: Skrell damage check template" - template = /datum/unit_test/mob_damage/skrell - mob_type = /mob/living/carbon/human/skrell - -/datum/unit_test/mob_damage/skrell/brute - name = "MOB: Skrell Brute Damage Check" - damagetype = DAMAGE_BRUTE - -/datum/unit_test/mob_damage/skrell/fire - name = "MOB: Skrell Fire Damage Check" - damagetype = DAMAGE_BURN - expected_vulnerability = ARMORED - -/datum/unit_test/mob_damage/skrell/tox - name = "MOB: Skrell Toxins Damage Check" - damagetype = DAMAGE_TOXIN - expected_vulnerability = ARMORED - -/datum/unit_test/mob_damage/skrell/oxy - name = "MOB: Skrell Oxygen Damage Check" - damagetype = DAMAGE_OXY - expected_vulnerability = EXTRA_VULNERABLE - -/datum/unit_test/mob_damage/skrell/genetic - name = "MOB: Skrell Genetic Damage Check" - damagetype = DAMAGE_GENETIC - -/datum/unit_test/mob_damage/skrell/pain - name = "MOB: Skrell Pain Damage Check" - damagetype = DAMAGE_PAIN - -// ================================================================= -// Vox -// ================================================================= - -/datum/unit_test/mob_damage/vox - name = "MOB: Vox damage check template" - template = /datum/unit_test/mob_damage/vox - mob_type = /mob/living/carbon/human/vox - -/datum/unit_test/mob_damage/vox/brute - name = "MOB: Vox Brute Damage Check" - damagetype = DAMAGE_BRUTE - -/datum/unit_test/mob_damage/vox/fire - name = "MOB: Vox Fire Damage Check" - damagetype = DAMAGE_BURN - -/datum/unit_test/mob_damage/vox/tox - name = "MOB: Vox Toxins Damage Check" - damagetype = DAMAGE_TOXIN - -/datum/unit_test/mob_damage/vox/oxy - name = "MOB: Vox Oxygen Damage Check" - damagetype = DAMAGE_OXY - -/datum/unit_test/mob_damage/vox/genetic - name = "MOB: Vox Genetic Damage Check" - damagetype = DAMAGE_GENETIC - expected_vulnerability = IMMUNE - - -/datum/unit_test/mob_damage/vox/pain - name = "MOB: Vox Pain Damage Check" - damagetype = DAMAGE_PAIN - -// ================================================================= -// Diona -// ================================================================= - -/datum/unit_test/mob_damage/diona - name = "MOB: Diona damage check template" - template = /datum/unit_test/mob_damage/diona - mob_type = /mob/living/carbon/human/diona - -/datum/unit_test/mob_damage/diona/brute - name = "MOB: Diona Brute Damage Check" - damagetype = DAMAGE_BRUTE - -/datum/unit_test/mob_damage/diona/fire - name = "MOB: Diona Fire Damage Check" - damagetype = DAMAGE_BURN - -/datum/unit_test/mob_damage/diona/tox - name = "MOB: Diona Toxins Damage Check" - damagetype = DAMAGE_TOXIN - -/datum/unit_test/mob_damage/diona/oxy - name = "MOB: Diona Oxygen Damage Check" - damagetype = DAMAGE_OXY - expected_vulnerability = IMMUNE - -/datum/unit_test/mob_damage/diona/genetic - name = "MOB: Diona Genetic Damage Check" - damagetype = DAMAGE_GENETIC - expected_vulnerability = IMMUNE - -/datum/unit_test/mob_damage/diona/pain - name = "MOB: Diona Pain Damage Check" - damagetype = DAMAGE_PAIN - expected_vulnerability = IMMUNE - -// ================================================================= -// Nabbers -// ================================================================= - -/datum/unit_test/mob_damage/nabber - name = "MOB: GAS damage check template" - template = /datum/unit_test/mob_damage/nabber - mob_type = /mob/living/carbon/human/nabber - -/datum/unit_test/mob_damage/nabber/brute - name = "MOB: GAS Brute Damage Check" - damagetype = DAMAGE_BRUTE - expected_vulnerability = ARMORED - -/datum/unit_test/mob_damage/nabber/fire - name = "MOB: GAS Fire Damage Check" - damagetype = DAMAGE_BURN - expected_vulnerability = EXTRA_VULNERABLE - -/datum/unit_test/mob_damage/nabber/tox - name = "MOB: GAS Toxins Damage Check" - damagetype = DAMAGE_TOXIN - -/datum/unit_test/mob_damage/nabber/oxy - name = "MOB: GAS Oxygen Damage Check" - damagetype = DAMAGE_OXY - expected_vulnerability = ARMORED - -/datum/unit_test/mob_damage/nabber/genetic - name = "MOB: GAS Genetic Damage Check" - damagetype = DAMAGE_GENETIC - -/datum/unit_test/mob_damage/nabber/pain - name = "MOB: GAS Pain Damage Check" - damagetype = DAMAGE_PAIN - -// ================================================================= -// SPECIAL WHITTLE SNOWFLAKES aka IPC -// ================================================================= - -/datum/unit_test/mob_damage/machine - name = "MOB: IPC damage check template" - template = /datum/unit_test/mob_damage/machine - mob_type = /mob/living/carbon/human/machine - -/datum/unit_test/mob_damage/machine/brute - name = "MOB: IPC Brute Damage Check" - damagetype = DAMAGE_BRUTE - -/datum/unit_test/mob_damage/machine/fire - name = "MOB: IPC Fire Damage Check" - damagetype = DAMAGE_BURN - -/datum/unit_test/mob_damage/machine/tox - name = "MOB: IPC Toxins Damage Check" - damagetype = DAMAGE_TOXIN - expected_vulnerability = IMMUNE - -/datum/unit_test/mob_damage/machine/oxy - name = "MOB: IPC Oxygen Damage Check" - damagetype = DAMAGE_OXY - expected_vulnerability = IMMUNE - -/datum/unit_test/mob_damage/machine/genetic - name = "MOB: IPC Genetic Damage Check" - damagetype = DAMAGE_GENETIC - expected_vulnerability = IMMUNE - -/datum/unit_test/mob_damage/machine/pain - name = "MOB: IPC Pain Damage Check" - damagetype = DAMAGE_PAIN - expected_vulnerability = IMMUNE - - -// ============================================================================== - - -/datum/unit_test/robot_module_icons - name = "MOB: Robot module icon check" - var/icon_file = 'icons/mob/screen1_robot.dmi' - -/datum/unit_test/robot_module_icons/start_test() - var/failed = 0 - if(!isicon(icon_file)) - fail("[icon_file] is not a valid icon file.") - return 1 - - var/list/valid_states = icon_states(icon_file) - - if(!valid_states.len) - return 1 - - for(var/i=1, i<=SSrobots.all_module_names.len, i++) - var/modname = lowertext(SSrobots.all_module_names[i]) - var/bad_msg = "[ascii_red]--------------- [modname]" - if(!(modname in valid_states)) - log_unit_test("[bad_msg] does not contain a valid icon state in [icon_file][ascii_reset]") - failed=1 - - if(failed) - fail("Some icon states did not exist") - else - pass("All modules had valid icon states") - - return 1 - -#undef IMMUNE -#undef SUCCESS -#undef FAILURE - -/datum/unit_test/species_base_skin - name = "MOB: Species base skin presence" -// async = 1 - var/failcount = 0 - -/datum/unit_test/species_base_skin/start_test() - for(var/species_name in all_species) - var/datum/species/S = all_species[species_name] - if(S.base_skin_colours) - if(!(S.appearance_flags & HAS_BASE_SKIN_COLOURS)) - log_unit_test("[S.name] has a skin colour list but no HAS_BASE_SKIN_COLOURS flag.") - failcount++ - continue - if(!(S.base_skin_colours.len >= 2)) - log_unit_test("[S.name] needs at least two items in the base_skin_colour list.") - failcount++ - continue - var/to_fail = FALSE - for(var/tag in S.has_limbs) - var/list/paths = S.has_limbs[tag] - var/obj/item/organ/external/E = paths["path"] - var/list/gender_test = list("") - if(initial(E.limb_flags) & ORGAN_FLAG_GENDERED_ICON) - gender_test = list("_m", "_f") - var/icon_name = initial(E.icon_name) - - for(var/base in S.base_skin_colours) - for(var/gen in gender_test) - if(!("[icon_name][gen][S.base_skin_colours[base]]" in icon_states(S.icobase))) - to_fail = TRUE - log_debug("[S.name] has missing icon: [icon_name][gen][S.base_skin_colours[base]] for base [base] and limb tag [tag].") - if(to_fail) - log_unit_test("[S.name] is missing one or more base icons.") - failcount++ - continue - - else if(S.appearance_flags & HAS_BASE_SKIN_COLOURS) - log_unit_test("[S.name] has a HAS_BASE_SKIN_COLOURS flag but no skin colour list.") - failcount++ - continue - - if(failcount) - fail("[failcount] species had bad base skin colour.") - else - pass("All species had correct skin colour setups.") - - return 1 // return 1 to show we're done and don't want to recheck the result. - - -/datum/unit_test/mob_nullspace - name = "MOB: Mob in nullspace shall not cause runtimes" - var/list/test_subjects = list() - async = 1 - -/datum/unit_test/mob_nullspace/start_test() - // Simply create one of each species type in nullspace - for(var/species_name in all_species) - var/test_subject = new/mob/living/carbon/human(null, species_name) - test_subjects += test_subject - return TRUE - -/datum/unit_test/mob_nullspace/check_result() - for(var/ts in test_subjects) - var/mob/living/carbon/human/H = ts - if(H.life_tick < 10) - return FALSE - - QDEL_NULL_LIST(test_subjects) - - // No failure state, we just rely on the general runtime check to fail the entire build for us - pass("Mob nullspace test concluded.") - return TRUE -/datum/unit_test/mob_organ_size - name = "MOB: Internal organs fit inside external organs." - -/datum/unit_test/mob_organ_size/start_test() - var/failed = FALSE - for(var/species_name in all_species) - var/mob/living/carbon/human/H = new(null, species_name) - for(var/obj/item/organ/external/E in H.organs) - for(var/obj/item/organ/internal/I in E.internal_organs) - if(I.w_class > E.cavity_max_w_class) - failed = TRUE - log_bad("Internal organ [I] inside external organ [E] on species [species_name] was too large to fit.") - if(failed) - fail("A mob had an internal organ too large for its external organ.") - else - pass("All mob organs fit.") - return TRUE - -// ============================================================================ - -// -// Tests butchery products. -// - -/datum/unit_test/mob_butchery - name = "MOB: All Living Mobs Shall Have Valid Products When Butchery Values Are Set" - async = 1 - var/list/failed = list() - var/list/check_meat = list() - var/list/check_skin = list() - var/list/check_bones = list() - -/datum/unit_test/mob_butchery/start_test() - - for(var/mobtype in subtypesof(/mob/living)) - - // Humans use species for their products and are - // difficult to properly unit test because of this. - if(ispath(mobtype, /mob/living/carbon/human)) - continue - - var/mob/living/animal = mobtype - - var/mtype = ispath(initial(animal.meat_type)) - var/mcount = initial(animal.meat_amount) > 0 - if(mtype && mcount) - check_meat += mobtype - else if(mtype && !mcount) - failed[mobtype] = "valid meat_type but meat_amount ([mcount]) is below or equal to zero" - else if(!mtype && mcount) - failed[mobtype] = "invalid meat_type ([mtype]) but meat_amount above zero" - - var/smat = initial(animal.skin_material) - var/stype = (smat && istype(SSmaterials.get_material_by_name(smat), /material)) - var/scount = initial(animal.skin_amount) > 0 - if(stype && scount) - check_skin += mobtype - else if(stype && !scount) - failed[mobtype] = "valid skin_material but skin_amount is below or equal to zero" - else if(!stype && scount) - failed[mobtype] = "invalid skin_material ([smat]) but skin_amount above zero" - - var/bmat = initial(animal.bone_material) - var/btype = (bmat && istype(SSmaterials.get_material_by_name(bmat), /material)) - var/bcount = initial(animal.bone_amount) > 0 - if(btype && bcount) - check_bones += mobtype - else if(btype && !bcount) - failed += "[mobtype] - valid bone_material but bone_amount is below or equal to zero" - else if(!btype && bcount) - failed += "[mobtype] - invalid bone_material ([bmat]) but bone_amount above zero" - - var/list/spawned_mobs = list() - for(var/mobtype in check_skin) - var/mob/living/M = spawned_mobs[mobtype] || new mobtype - spawned_mobs[mobtype] = M - if(!length(M.harvest_skin())) - failed += "[mobtype] - invalid skin products" - for(var/mobtype in check_bones) - var/mob/living/M = spawned_mobs[mobtype] || new mobtype - spawned_mobs[mobtype] = M - if(!length(M.harvest_bones())) - failed += "[mobtype] - invalid bone products" - for(var/mobtype in check_meat) - var/mob/living/M = spawned_mobs[mobtype] || new mobtype - spawned_mobs[mobtype] = M - if(!length(M.harvest_meat())) - failed += "[mobtype] - invalid meat products" - for(var/thing in spawned_mobs) - var/mob/living/M = spawned_mobs[thing] - if(!QDELETED(M)) - qdel(M) - spawned_mobs.Cut() - - return TRUE - -/datum/unit_test/mob_butchery/check_result() - if(length(failed)) - fail("Some living mobs with butchery values have invalid values or do not produce valid products:\n[jointext(failed, "\n")]") - else - pass("All living mobs with butchery values produce valid products.") - return TRUE - -// ============================================================================ diff --git a/code/unit_tests/movement_tests.dm b/code/unit_tests/movement_tests.dm deleted file mode 100644 index e5e7a74aa1912..0000000000000 --- a/code/unit_tests/movement_tests.dm +++ /dev/null @@ -1,64 +0,0 @@ -/datum/unit_test/movement - name = "MOVEMENT template" - template = /datum/unit_test/movement - async = 0 - -/datum/unit_test/movement/force_move_shall_trigger_crossed_when_entering_turf - name = "MOVEMENT - Force Move Shall Trigger Crossed When Entering Turf" - -/datum/unit_test/movement/force_move_shall_trigger_crossed_when_entering_turf/start_test() - var/turf/start = get_safe_turf() - var/turf/target = get_step(start, NORTH) - - var/obj/mover = new /obj/test(start, 1) - var/obj/test/crossed_obj/crossed = new(target, 1) - - mover.forceMove(target) - - if(!crossed.crossers) - fail("The target object was never crossed.") - else if(crossed.crossers.len != 1) - fail("The target object was crossed [crossed.crossers.len] times, expected 1.") - else - pass("The target was crossed 1 time.") - - qdel(mover) - qdel(crossed) - return TRUE - -/datum/unit_test/movement/force_move_shall_trigger_entered - name = "MOVEMENT - Force Move Shall Trigger Entered" - -/datum/unit_test/movement/force_move_shall_trigger_entered/start_test() - var/turf/start = get_safe_turf() - var/obj/mover = new /obj/test(start, 1) - var/obj/test/entered_obj/target = new(start, 1) - - mover.forceMove(target) - - if(!target.enterers) - fail("The target object was never entered.") - else if(target.enterers.len != 1) - fail("The target object was entered [target.enterers.len] times, expected 1.") - else - pass("The target was entered 1 time.") - - qdel(mover) - qdel(target) - return TRUE - -/obj/test/crossed_obj - var/list/crossers - -/obj/test/crossed_obj/Crossed(var/crosser) - if(!crossers) - crossers = list() - crossers += crosser - -/obj/test/entered_obj - var/list/enterers - -/obj/test/entered_obj/Entered(var/enterer) - if(!enterers) - enterers = list() - enterers += enterer diff --git a/code/unit_tests/music_test.dm b/code/unit_tests/music_test.dm deleted file mode 100644 index 2b0d47b1c35fc..0000000000000 --- a/code/unit_tests/music_test.dm +++ /dev/null @@ -1,51 +0,0 @@ -/datum/unit_test/audio_track_validate - name = "AUDIO TRACK: Validate Audio Tracks" - - -/datum/unit_test/audio_track_validate/start_test() - var/list/failed = list() - var/list/available = decls_repository.get_decls_of_subtype(/decl/audio/track) - for (var/key in available) - var/decl/audio/track/track = available[key] - if (!isfile(track.source)) - failed |= track - log_bad("Invalid Audio Track [track.type]: Invalid Source") - if (!istext(track.title)) - failed |= track - log_bad("Invalid Audio Track [track.type]: Invalid Title") - if (!istype(track.license, /decl/license)) - failed |= track - log_bad("Invalid Audio Track [track.type]: Invalid License") - else if (track.license.attribution_mandatory) - if (!istext(track.author)) - failed |= track - log_bad("Invalid Audio Track [track.type]: Invalid Author") - if (!istext(track.url)) - failed |= track - log_bad("Invalid Audio Track [track.type]: Invalid URL") - if (length(failed)) - fail("Found [length(failed)] badly configured audio/track instance\s.") - else - pass("All audio/track instances OK.") - return 1 - - - -/datum/unit_test/jukebox_validate - name = "JUKEBOXES: Validate Jukeboxes" - - -/datum/unit_test/jukebox_validate/start_test() - var/list/failed = list() - for (var/jukebox/jukebox) - for (var/entry in jukebox.tracks) - var/jukebox_track/track = entry - if (!track.title || !isfile(track.source)) - log_bad("Invalid Jukebox Track: [log_info_line(jukebox)]") - failed += jukebox - break - if (length(failed)) - fail("Found [length(failed)] invalid jukebox\s.") - else - pass("All jukeboxes OK.") - return 1 diff --git a/code/unit_tests/observation_tests.dm b/code/unit_tests/observation_tests.dm deleted file mode 100644 index 32dac14bd6bee..0000000000000 --- a/code/unit_tests/observation_tests.dm +++ /dev/null @@ -1,350 +0,0 @@ -/proc/is_listening_to_movement(var/atom/movable/listening_to, var/listener) - return GLOB.moved_event.is_listening(listening_to, listener) - -/datum/unit_test/observation - name = "OBSERVATION template" - template = /datum/unit_test/observation - async = 0 - var/list/received_moves - - var/list/stored_global_listen_count - var/list/stored_event_sources_count - var/list/stored_event_listen_count - -/datum/unit_test/observation/start_test() - if(!received_moves) - received_moves = list() - received_moves.Cut() - - for(var/global_listener in GLOB.moved_event.global_listeners) - GLOB.moved_event.unregister_global(global_listener) - - stored_global_listen_count = GLOB.global_listen_count.Copy() - stored_event_sources_count = GLOB.event_sources_count.Copy() - stored_event_listen_count = GLOB.event_listen_count.Copy() - - sanity_check_events("Pre-Test") - . = conduct_test() - sanity_check_events("Post-Test") - -/datum/unit_test/observation/proc/sanity_check_events(var/phase) - for(var/entry in GLOB.all_observable_events) - var/decl/observ/event = entry - if(null in event.global_listeners) - fail("[phase]: [event] - The global listeners list contains a null entry.") - - for(var/event_source in event.event_sources) - for(var/list/list_of_listeners in event.event_sources[event_source]) - if(isnull(list_of_listeners)) - fail("[phase]: [event] - The event source list contains a null entry.") - else if(!istype(list_of_listeners)) - fail("[phase]: [event] - The list of listeners was not of the expected type. Was [list_of_listeners.type].") - else - for(var/listener in list_of_listeners) - if(isnull(listener)) - fail("[phase]: [event] - The event source listener list contains a null entry.") - else - var/proc_calls = list_of_listeners[listener] - if(isnull(proc_calls)) - fail("[phase]: [event] - [listener] - The proc call list was null.") - else - for(var/proc_call in proc_calls) - if(isnull(proc_call)) - fail("[phase]: [event] - [listener]- The proc call list contains a null entry.") - - for(var/entry in (GLOB.global_listen_count - stored_global_listen_count)) - fail("[phase]: global_listen_count - Contained [log_info_line(entry)].") - for(var/entry in (GLOB.event_sources_count - stored_event_sources_count)) - fail("[phase]: event_sources_count - Contained [log_info_line(entry)].") - for(var/entry in (GLOB.event_listen_count - stored_event_listen_count)) - fail("[phase]: event_listen_count - Contained [log_info_line(entry)].") - -/datum/unit_test/observation/proc/conduct_test() - return 0 - -/datum/unit_test/observation/proc/receive_move(var/atom/movable/am, var/old_loc, var/new_loc) - received_moves[++received_moves.len] = list(am, old_loc, new_loc) - -/datum/unit_test/observation/proc/dump_received_moves() - for(var/entry in received_moves) - var/list/l = entry - log_unit_test("[l[1]] - [l[2]] - [l[3]]") - -/datum/unit_test/observation/global_listeners_shall_receive_events - name = "OBSERVATION: Global listeners shall receive events" - -/datum/unit_test/observation/global_listeners_shall_receive_events/conduct_test() - var/turf/start = get_safe_turf() - var/turf/target = get_step(start, NORTH) - var/obj/O = get_named_instance(/obj, start) - - GLOB.moved_event.register_global(src, /datum/unit_test/observation/proc/receive_move) - O.forceMove(target) - - if(received_moves.len != 1) - fail("Expected 1 raised moved event, were [received_moves.len].") - dump_received_moves() - return 1 - - var/list/event = received_moves[1] - if(event[1] != O || event[2] != start || event[3] != target) - fail("Unepected move event received. Expected [O], was [event[1]]. Expected [start], was [event[2]]. Expected [target], was [event[3]]") - else - pass("Received the expected move event.") - - GLOB.moved_event.unregister_global(src) - qdel(O) - return 1 - -/datum/unit_test/observation/moved_observer_shall_register_on_follow - name = "OBSERVATION: Moved - Observer Shall Register on Follow" - -/datum/unit_test/observation/moved_observer_shall_register_on_follow/conduct_test() - var/turf/T = get_safe_turf() - var/mob/living/carbon/human/H = get_named_instance(/mob/living/carbon/human, T, SPECIES_HUMAN) - var/mob/observer/ghost/O = get_named_instance(/mob/observer/ghost, T, "Ghost") - - O.start_following(H) - if(is_listening_to_movement(H, O)) - pass("The observer is now following the mob.") - else - fail("The observer is not following the mob.") - - qdel(H) - qdel(O) - return 1 - -/datum/unit_test/observation/moved_observer_shall_unregister_on_nofollow - name = "OBSERVATION: Moved - Observer Shall Unregister on NoFollow" - -/datum/unit_test/observation/moved_observer_shall_unregister_on_nofollow/conduct_test() - var/turf/T = get_safe_turf() - var/mob/living/carbon/human/H = get_named_instance(/mob/living/carbon/human, T, SPECIES_HUMAN) - var/mob/observer/ghost/O = get_named_instance(/mob/observer/ghost, T, "Ghost") - - O.start_following(H) - O.stop_following() - if(!is_listening_to_movement(H, O)) - pass("The observer is no longer following the mob.") - else - fail("The observer is still following the mob.") - - qdel(H) - qdel(O) - return 1 - -/datum/unit_test/observation/moved_shall_not_register_on_enter_without_listeners - name = "OBSERVATION: Moved - Shall Not Register on Enter Without Listeners" - -/datum/unit_test/observation/moved_shall_not_register_on_enter_without_listeners/conduct_test() - var/turf/T = get_safe_turf() - var/mob/living/carbon/human/H = get_named_instance(/mob/living/carbon/human, T, SPECIES_HUMAN) - qdel(H.virtual_mob) - H.virtual_mob = null - - var/obj/structure/closet/C = get_named_instance(/obj/structure/closet, T, "Closet") - - H.forceMove(C) - if(!is_listening_to_movement(C, H)) - pass("The mob did not register to the closet's moved event.") - else - fail("The mob has registered to the closet's moved event.") - - qdel(C) - qdel(H) - return 1 - -/datum/unit_test/observation/moved_shall_register_recursively_on_new_listener - name = "OBSERVATION: Moved - Shall Register Recursively on New Listener" - -/datum/unit_test/observation/moved_shall_register_recursively_on_new_listener/conduct_test() - var/turf/T = get_safe_turf() - var/mob/living/carbon/human/H = get_named_instance(/mob/living/carbon/human, T, SPECIES_HUMAN) - var/obj/structure/closet/C = get_named_instance(/obj/structure/closet, T, "Closet") - var/mob/observer/ghost/O = get_named_instance(/mob/observer/ghost, T, "Ghost") - - H.forceMove(C) - O.start_following(H) - var/listening_to_closet = is_listening_to_movement(C, H) - var/listening_to_human = is_listening_to_movement(H, O) - if(listening_to_closet && listening_to_human) - pass("Recursive moved registration succesful.") - else - fail("Recursive moved registration failed. Human listening to closet: [listening_to_closet] - Observer listening to human: [listening_to_human]") - - qdel(C) - qdel(H) - qdel(O) - return 1 - -/datum/unit_test/observation/moved_shall_register_recursively_with_existing_listener - name = "OBSERVATION: Moved - Shall Register Recursively with Existing Listener" - -/datum/unit_test/observation/moved_shall_register_recursively_with_existing_listener/conduct_test() - var/turf/T = get_safe_turf() - var/mob/living/carbon/human/H = get_named_instance(/mob/living/carbon/human, T, SPECIES_HUMAN) - var/obj/structure/closet/C = get_named_instance(/obj/structure/closet, T, "Closet") - var/mob/observer/ghost/O = get_named_instance(/mob/observer/ghost, T, "Ghost") - - O.start_following(H) - H.forceMove(C) - var/listening_to_closet = is_listening_to_movement(C, H) - var/listening_to_human = is_listening_to_movement(H, O) - if(listening_to_closet && listening_to_human) - pass("Recursive moved registration succesful.") - else - fail("Recursive moved registration failed. Human listening to closet: [listening_to_closet] - Observer listening to human: [listening_to_human]") - - qdel(C) - qdel(H) - qdel(O) - - return 1 - -/* -/datum/unit_test/observation/moved_shall_only_trigger_for_recursive_drop - name = "OBSERVATION: Moved - Shall Only Trigger Once For Recursive Drop" - -/datum/unit_test/observation/moved_shall_only_trigger_for_recursive_drop/conduct_test() - var/turf/T = get_safe_turf() - var/obj/exosuit/exosuit = get_named_instance(/obj/exosuit, T, "exosuit") - var/obj/item/wrench/held_item = get_named_instance(/obj/item/wrench, T, "Wrench") - var/mob/living/carbon/human/dummy/held_mob = get_named_instance(/mob/living/carbon/human/dummy, T, "Held Mob") - var/mob/living/carbon/human/dummy/holding_mob = get_named_instance(/mob/living/carbon/human/dummy, T, "Holding Mob") - - held_mob.mob_size = MOB_SMALL - held_mob.put_in_active_hand(held_item) - held_mob.get_scooped(holding_mob) - - holding_mob.forceMove(exosuit) - - exosuit.occupant = holding_mob - - GLOB.moved_event.register(held_item, src, /datum/unit_test/observation/proc/receive_move) - holding_mob.drop_from_inventory(held_item) - - if(received_moves.len != 1) - fail("Expected 1 raised moved event, were [received_moves.len].") - dump_received_moves() - return 1 - - var/list/event = received_moves[1] - if(event[1] != held_item || event[2] != held_mob || event[3] != exosuit) - fail("Unexpected move event received. Expected [held_item], was [event[1]]. Expected [held_mob], was [event[2]]. Expected [exosuit], was [event[3]]") - else if(!(held_item in exosuit.dropped_items)) - fail("Expected \the [held_item] to be in the mechs' dropped item list") - else - pass("One one moved event with expected arguments raised.") - - GLOB.moved_event.unregister(held_item, src) - qdel(exosuit) - qdel(held_item) - qdel(held_mob) - qdel(holding_mob) - - return 1 -*/ - -/datum/unit_test/observation/moved_shall_not_unregister_recursively_one - name = "OBSERVATION: Moved - Shall Not Unregister Recursively - One" - -/datum/unit_test/observation/moved_shall_not_unregister_recursively_one/conduct_test() - var/turf/T = get_safe_turf() - var/mob/observer/ghost/one = get_named_instance(/mob/observer/ghost, T, "Ghost One") - var/mob/observer/ghost/two = get_named_instance(/mob/observer/ghost, T, "Ghost Two") - var/mob/observer/ghost/three = get_named_instance(/mob/observer/ghost, T, "Ghost Three") - - two.start_following(one) - three.start_following(two) - - two.stop_following() - if(is_listening_to_movement(two, three)) - pass("Observer three is still following observer two.") - else - fail("Observer three is no longer following observer two.") - - qdel(one) - qdel(two) - qdel(three) - - return 1 - -/datum/unit_test/observation/moved_shall_not_unregister_recursively_two - name = "OBSERVATION: Moved - Shall Not Unregister Recursively - Two" - -/datum/unit_test/observation/moved_shall_not_unregister_recursively_two/conduct_test() - var/turf/T = get_safe_turf() - var/mob/observer/ghost/one = get_named_instance(/mob/observer/ghost, T, "Ghost One") - var/mob/observer/ghost/two = get_named_instance(/mob/observer/ghost, T, "Ghost Two") - var/mob/observer/ghost/three = get_named_instance(/mob/observer/ghost, T, "Ghost Three") - - two.start_following(one) - three.start_following(two) - - three.stop_following() - if(is_listening_to_movement(one, two)) - pass("Observer two is still following observer one.") - else - fail("Observer two is no longer following observer one.") - - qdel(one) - qdel(two) - qdel(three) - - return 1 - -/datum/unit_test/observation/sanity_global_listeners_shall_not_leave_null_entries_when_destroyed - name = "OBSERVATION: Sanity - Global listeners shall not leave null entries when destroyed" - -/datum/unit_test/observation/sanity_global_listeners_shall_not_leave_null_entries_when_destroyed/conduct_test() - var/turf/T = get_safe_turf() - var/obj/O = get_named_instance(/obj, T) - - GLOB.moved_event.register_global(O, /atom/movable/proc/move_to_turf) - qdel(O) - - if(null in GLOB.moved_event.global_listeners) - fail("The global listener list contains a null entry.") - else - pass("The global listener list does not contain a null entry.") - - return 1 - -/datum/unit_test/observation/sanity_event_sources_shall_not_leave_null_entries_when_destroyed - name = "OBSERVATION: Sanity - Event sources shall not leave null entries when destroyed" - -/datum/unit_test/observation/sanity_event_sources_shall_not_leave_null_entries_when_destroyed/conduct_test() - var/turf/T = get_safe_turf() - var/mob/event_source = get_named_instance(/mob, T, "Event Source") - var/mob/listener = get_named_instance(/mob, T, "Event Listener") - - GLOB.moved_event.register(event_source, listener, /atom/movable/proc/recursive_move) - qdel(event_source) - - if(null in GLOB.moved_event.event_sources) - fail("The event source list contains a null entry.") - else - pass("The event source list does not contain a null entry.") - - qdel(listener) - return 1 - -/datum/unit_test/observation/sanity_event_listeners_shall_not_leave_null_entries_when_destroyed - name = "OBSERVATION: Sanity - Event listeners shall not leave null entries when destroyed" - -/datum/unit_test/observation/sanity_event_listeners_shall_not_leave_null_entries_when_destroyed/conduct_test() - var/turf/T = get_safe_turf() - var/mob/event_source = get_named_instance(/mob, T, "Event Source") - var/mob/listener = get_named_instance(/mob, T, "Event Listener") - - GLOB.moved_event.register(event_source, listener, /atom/movable/proc/recursive_move) - qdel(listener) - - var/listeners = GLOB.moved_event.event_sources[event_source] - if(listeners && (null in listeners)) - fail("The event source listener list contains a null entry.") - else - pass("The event source listener list does not contain a null entry.") - - qdel(event_source) - return 1 diff --git a/code/unit_tests/organ_tests.dm b/code/unit_tests/organ_tests.dm deleted file mode 100644 index efaa0b04dabc5..0000000000000 --- a/code/unit_tests/organ_tests.dm +++ /dev/null @@ -1,253 +0,0 @@ -// ============================================================================== - -/datum/unit_test/max_damage_setup - name = "ORGAN: Max Damage Is Setup" - -/datum/unit_test/max_damage_setup/start_test() - var/list/skipped_organ_types = list(/obj/item/organ/external, /obj/item/organ/internal) - - var/list/failed_organ_types = list() - for(var/organ_type in (subtypesof(/obj/item/organ) - skipped_organ_types)) - var/obj/item/organ/O = organ_type - if(!initial(O.max_damage)) - failed_organ_types += O - - if(failed_organ_types.len) - fail("The following organs have incorrectly setup max damage: [english_list(failed_organ_types)]") - else - pass("All organs have a correctly setup max damage") - - return 1 - -/datum/unit_test/species_organ_creation - name = "ORGAN: Species Organs are Created Correctly" - -/datum/unit_test/species_organ_creation/proc/check_internal_organs(var/mob/living/carbon/human/H, var/datum/species/species) - . = 1 - for(var/organ_tag in species.has_organ) - var/obj/item/organ/internal/I = H.internal_organs_by_name[organ_tag] - if(!istype(I)) - fail("[species.name] failed to register internal organ for tag \"[organ_tag]\" to internal_organs_by_name.") - . = 0 - continue - if(!(I in H.internal_organs)) - fail("[species.name] failed to register internal organ for tag \"[organ_tag]\" to internal_organs.") - . = 0 - continue - var/req_type = species.has_organ[organ_tag] - if(!istype(I, req_type)) - fail("[species.name] incorrect type of internal organ created for tag \"[organ_tag]\". Expected [req_type], found [I.type].") - . = 0 - continue - if(I.organ_tag != organ_tag) - fail("[species.name] internal organ tag mismatch. Registered as \"[organ_tag]\", actual tag was \"[I.organ_tag]\".") - . = 0 - -/datum/unit_test/species_organ_creation/proc/check_external_organs(var/mob/living/carbon/human/H, var/datum/species/species) - . = 1 - for(var/organ_tag in species.has_limbs) - var/obj/item/organ/external/E = H.organs_by_name[organ_tag] - if(!istype(E)) - fail("[species.name] failed to register external organ for tag \"[organ_tag]\" to organs_by_name.") - . = 0 - continue - if(!(E in H.organs)) - fail("[species.name] failed to register external organ for tag \"[organ_tag]\" to organs.") - . = 0 - continue - var/list/organ_data = species.has_limbs[organ_tag] - var/req_type = organ_data["path"] - if(!istype(E, req_type)) - fail("[species.name] incorrect type of external organ created for tag \"[organ_tag]\". Expected [req_type], found [E.type].") - . = 0 - continue - if(E.organ_tag != organ_tag) - fail("[species.name] internal organ tag mismatch. Registered as \"[organ_tag]\", actual tag was \"[E.organ_tag]\".") - . = 0 - -/datum/unit_test/species_organ_creation/proc/check_organ_parents(var/mob/living/carbon/human/H, var/datum/species/species) - . = 1 - for(var/obj/item/organ/external/E in H.organs) - if(!E.parent_organ) - continue - var/obj/item/organ/external/parent = H.organs_by_name[E.parent_organ] - if(!istype(parent)) - fail("[species.name] external organ [E] could not find its parent in organs_by_name. Parent tag was \"[E.parent_organ]\".") - . = 0 - continue - if(!(parent in H.organs)) - fail("[species.name] external organ [E] could not find its parent in organs. Parent was [parent](parent.type). Parent tag was \"[E.parent_organ]\".") - . = 0 - continue - if(E.parent != parent) - fail("[species.name] external organ [E] parent mismatch. Parent reference was [E.parent] with tag \"[E.parent? E.parent.organ_tag : "N/A"]\". Parent was [parent](parent.type). Parent tag was \"[E.parent_organ]\".") - . = 0 - continue - if(!(E in parent.children)) - fail("[species.name] external organ [E] was not found in parent's children. Parent was [parent]. Parent tag was \"[E.parent_organ]\".") - . = 0 - continue - - for(var/obj/item/organ/internal/I in H.organs) - if(!I.parent_organ) - fail("[species.name] internal organ [I] did not have a parent_organ tag.") - . = 0 - continue - var/obj/item/organ/external/parent = H.organs_by_name[I.parent_organ] - if(!istype(parent)) - fail("[species.name] internal organ [I] could not find its parent in organs_by_name. Parent tag was \"[I.parent_organ]\".") - . = 0 - continue - if(!(parent in H.organs)) - fail("[species.name] internal organ [I] could not find its parent in organs. Parent was [parent]. Parent tag was \"[I.parent_organ]\".") - . = 0 - continue - if(!(I in parent.internal_organs)) - fail("[species.name] internal organ [I] was not found in parent's internal_organs. Parent was [parent]. Parent tag was \"[I.parent_organ]\".") - . = 0 - continue - -/datum/unit_test/species_organ_creation/start_test() - var/failcount = 0 - for(var/datum/species/species in all_species) - var/mob/living/carbon/human/test_subject = new(null, species.name) - - var/fail = 0 - fail |= !check_internal_organs(test_subject, species) - fail |= !check_external_organs(test_subject, species) - fail |= !check_organ_parents(test_subject, species) - - if(fail) failcount++ - - if(failcount) - fail("[failcount] species mobs were created with invalid organ configuration.") - else - pass("All species mobs were created with valid organ configuration.") - - return 1 - -/datum/unit_test/species_organ_lists_update - name = "ORGAN: Species Mob Organ Lists Update when Organs are Removed and Replaced." - -/datum/unit_test/species_organ_lists_update/proc/check_internal_organ_present(var/mob/living/carbon/human/H, var/obj/item/organ/internal/I) - if(!(I in H.internal_organs)) - fail("[H.species.name] internal organ [I] not in internal_organs.") - return 0 - var/found = H.internal_organs_by_name[I.organ_tag] - if(I != found) - fail("[H.species.name] internal organ [I] not in internal_organs_by_name. Organ tag was \"[I.organ_tag]\", found [found? found : "nothing"] instead.") - return 0 - var/obj/item/organ/external/parent = H.organs_by_name[I.parent_organ] - if(!istype(parent)) - fail("[H.species.name] internal organ [I] could not find its parent in organs_by_name. Parent tag was \"[I.parent_organ]\".") - return 0 - if(!(I in parent.internal_organs)) - fail("[H.species.name] internal organ [I] was not in parent's internal_organs. Parent was [parent]. Parent tag was \"[I.parent_organ]\".") - return 0 - return 1 - -/datum/unit_test/species_organ_lists_update/proc/check_internal_organ_removed(var/mob/living/carbon/human/H, var/obj/item/organ/internal/I, var/obj/item/organ/external/old_parent) - if(I in H.internal_organs) - fail("[H.species.name] internal organ [I] was not removed from internal_organs.") - return 0 - var/found = H.internal_organs_by_name[I.organ_tag] - if(found) - fail("[H.species.name] internal organ [I] was not removed from internal_organs_by_name. Organ tag was \"[I.organ_tag]\".") - return 0 - if(I in old_parent.internal_organs) - fail("[H.species.name] internal organ [I] was not removed from parent's internal_organs. Parent was [old_parent].") - return 0 - return 1 - -/datum/unit_test/species_organ_lists_update/proc/check_external_organ_present(var/mob/living/carbon/human/H, var/obj/item/organ/external/E) - if(!(E in H.organs)) - fail("[H.species.name] external organ [E] not in organs.") - return 0 - var/found = H.organs_by_name[E.organ_tag] - if(E != found) - fail("[H.species.name] external organ [E] not in organs_by_name. Organ tag was \"[E.organ_tag]\", found [found? found : "nothing"] instead.") - return 0 - if(E.parent_organ) - var/obj/item/organ/external/parent = E.parent - if(!istype(parent)) - fail("[H.species.name] external organ [E] had no parent. Parent tag was \"[E.parent_organ]\".") - return 0 - if(parent.organ_tag != E.parent_organ) - fail("[H.species.name] external organ [E] parent tag mismatch. Parent tag was \"[E.parent_organ]\", actual tag was \"[parent.organ_tag]\".") - return 0 - if(!(E in parent.children)) - fail("[H.species.name] external organ [E] was not in parent's children. Parent was [parent]. Parent tag was \"[E.parent_organ]\".") - return 0 - return 1 - -/datum/unit_test/species_organ_lists_update/proc/check_external_organ_removed(var/mob/living/carbon/human/H, var/obj/item/organ/external/E, var/obj/item/organ/external/old_parent = null) - if(E in H.organs) - fail("[H.species.name] external organ [E] was not removed from organs.") - return 0 - var/found = H.organs_by_name[E.organ_tag] - if(found) - fail("[H.species.name] external organ [E] was not removed from organs_by_name. Organ tag was \"[E.organ_tag]\".") - return 0 - if(old_parent) - if(!(E in old_parent.children)) - fail("[H.species.name] external organ [E] was not removed from parent's children. Parent was [old_parent].") - return 0 - return 1 - -/datum/unit_test/species_organ_lists_update/proc/test_internal_organ(var/mob/living/carbon/human/H, var/obj/item/organ/internal/I) - if(!check_internal_organ_present(H, I)) - fail("[H.species.name] internal organ [I] failed initial presence check.") - return 0 - - var/obj/item/organ/external/parent = H.organs_by_name[I.parent_organ] - - I.removed() - if(!check_internal_organ_removed(H, I, parent)) - fail("[H.species.name] internal organ [I] was not removed correctly.") - return 0 - - I.replaced(H, parent) - if(!check_internal_organ_present(H, I)) - fail("[H.species.name] internal organ [I] was not replaced correctly.") - return 0 - - return 1 - -/datum/unit_test/species_organ_lists_update/proc/test_external_organ(var/mob/living/carbon/human/H, var/obj/item/organ/external/E) - if(!check_external_organ_removed(H, E)) - fail("[H.species.name] internal organ [E] failed initial presence check.") - return 0 - - var/obj/item/organ/external/parent = E.parent - - E.removed() - if(!check_internal_organ_removed(H, E, parent)) - fail("[H.species.name] internal organ [E] was not removed correctly.") - return 0 - - E.replaced(H) - if(!check_internal_organ_present(H, E)) - fail("[H.species.name] internal organ [E] was not replaced correctly.") - return 0 - - return 1 - -/datum/unit_test/species_organ_lists_update/start_test() - var/failcount = 0 - for(var/datum/species/species in all_species) - var/mob/living/carbon/human/test_subject = new(null, species.name) - - for(var/O in test_subject.internal_organs) - if(!test_internal_organ(test_subject, O)) - failcount++ - - for(var/O in test_subject.organs) - if(!test_external_organ(test_subject, O)) - failcount++ - - if(failcount) - fail("[failcount] organs failed to be removed and replaced correctly.") - else - pass("All organs were removed and replaced correctly.") - - return 1 \ No newline at end of file diff --git a/code/unit_tests/overmap_tests.dm b/code/unit_tests/overmap_tests.dm deleted file mode 100644 index 9bdc822039cf2..0000000000000 --- a/code/unit_tests/overmap_tests.dm +++ /dev/null @@ -1,24 +0,0 @@ -/datum/unit_test/overmap_test - template = /datum/unit_test/overmap_test - -/datum/unit_test/overmap_test/New() - name = "OVERMAP: " + name - -// 513 no longer allows no color or white as a filter color, hence this test -/datum/unit_test/overmap_test/shall_have_non_white_color - name = "Shall have non-white color" - -/datum/unit_test/overmap_test/shall_have_non_white_color/start_test() - var/list/invalid_overmap_types = list() - for(var/omt in subtypesof(/obj/effect/overmap)) - var/obj/overmap = omt - var/color = initial(overmap.color) - if(!color || color == COLOR_WHITE) - invalid_overmap_types += omt - - if(invalid_overmap_types.len) - fail("Following /obj/effect/overmap types types have invalid colors: [english_list(invalid_overmap_types)]") - else - pass("All /obj/effect/overmap types have a valid color") - - return TRUE diff --git a/code/unit_tests/override_tests.dm b/code/unit_tests/override_tests.dm deleted file mode 100644 index 0190fb4ae9db5..0000000000000 --- a/code/unit_tests/override_tests.dm +++ /dev/null @@ -1,79 +0,0 @@ -// These tests are intended to verify functionality of overrides in ~unit_test_overrides.dm - -/datum/unit_test/override - name = "OVERRIDE template" - template = /datum/unit_test/override - -/datum/unit_test/override/obj_random_shall_spawn_heaviest_item - name = "OVERRIDE - obj/random shall spawn heaviest item" - -/datum/unit_test/override/obj_random_shall_spawn_heaviest_item/start_test() - GLOB.unit_test_last_obj_random_creation = null - var/obj/random/unit_test/R = new() - - if(GLOB.unit_test_last_obj_random_creation && GLOB.unit_test_last_obj_random_creation.type == /obj/unit_test_heavy) - pass("[log_info_line(R)] created an object of the expected type.") - else - if(GLOB.unit_test_last_obj_random_creation) - fail("[log_info_line(R)] did not create an object of the expected type. Expected /obj/unit_test_heavy, was [GLOB.unit_test_last_obj_random_creation.type]") - else - fail("[log_info_line(R)] did not create an object") - - return 1 - -/datum/unit_test/override/atom_creator_simple_shall_always_spawn - name = "OVERRIDE - /datum/atom_creator/simple shall always spawn" - -/datum/unit_test/override/atom_creator_simple_shall_always_spawn/start_test() - var/datum/atom_creator/simple/S = new/datum/atom_creator/simple(/obj/unit_test_light, 1) - S.probability = 0 - - var/safe_turf = get_safe_turf() - S.create(safe_turf) - var/created_object = locate(/obj/unit_test_light) in safe_turf - if(created_object) - pass("[log_info_line(S)] successfully created its object.") - qdel(created_object) - else - fail("[log_info_line(S)] failed to create its object.") - - return 1 - -/datum/unit_test/override/atom_creator_weighted_shall_spawn_heaviest - name = "OVERRIDE - /datum/atom_creator/weighted shall spawn heaviest" - -/datum/unit_test/override/atom_creator_weighted_shall_spawn_heaviest/start_test() - var/datum/atom_creator/weighted/W = new/datum/atom_creator/weighted(list(/obj/unit_test_light = 9001, /obj/unit_test_heavy = 1)) - - var/safe_turf = get_safe_turf() - W.create(safe_turf) - var/created_object = locate(/obj/unit_test_heavy) in safe_turf - if(created_object) - pass("[log_info_line(W)] successfully created the heaviest object.") - qdel(created_object) - else - fail("[log_info_line(W)] failed to create its heaviest object.") - - return 1 - -/datum/unit_test/override/atom_creator_weighted_shall_spawn_heaviest_recursive - name = "OVERRIDE - /datum/atom_creator/weighted shall spawn heaviest - Recursive" - -/datum/unit_test/override/atom_creator_weighted_shall_spawn_heaviest_recursive/start_test() - var/datum/atom_creator/weighted/W = new/datum/atom_creator/weighted( - list( - new/datum/atom_creator/weighted(list(/obj/unit_test_light = 9001, /obj/unit_test_heavy = 1)), - new/datum/atom_creator/simple(/obj/unit_test_medium, 50) - ) - ) - - var/safe_turf = get_safe_turf() - W.create(safe_turf) - var/created_object = locate(/obj/unit_test_heavy) in safe_turf - if(created_object) - pass("[log_info_line(W)] successfully created the heaviest object.") - qdel(created_object) - else - fail("[log_info_line(W)] failed to create its heaviest object.") - - return 1 diff --git a/code/unit_tests/power_tests.dm b/code/unit_tests/power_tests.dm deleted file mode 100644 index 14f277cf682d4..0000000000000 --- a/code/unit_tests/power_tests.dm +++ /dev/null @@ -1,92 +0,0 @@ -/datum/unit_test/roundstart_cable_connectivity - name = "POWER: Roundstart Cables that are Connected Share Powernets" - -/datum/unit_test/roundstart_cable_connectivity/proc/find_connected_neighbours(var/obj/structure/cable/C) - . = list() - if(C.d1 != 0) - . += get_connected_neighbours(C, C.d1) - if(C.d2 != 0) - . += get_connected_neighbours(C, C.d2) - -/datum/unit_test/roundstart_cable_connectivity/proc/get_connected_neighbours(var/obj/structure/cable/self, var/dir) - var/turf/T = get_step(get_turf(self), dir) - var/reverse = GLOB.reverse_dir[dir] - - . = list() //can have multiple connected neighbours for a dir, e.g. Y-junctions - for(var/obj/structure/cable/other in T) - if(other.d1 == reverse || other.d2 == reverse) - . += other - -/datum/unit_test/roundstart_cable_connectivity/start_test() - var/failed = 0 - var/list/found_cables = list() - - //there is a cable list, but for testing purposes we search every cable in the world - for(var/obj/structure/cable/C in world) - if(C in found_cables) - continue - var/list/to_search = list(C) - var/list/searched = list() - while(to_search.len) - var/obj/structure/cable/next = to_search[to_search.len] - to_search.len-- - searched += next - for(var/obj/structure/cable/other in get_connected_neighbours(next)) - if(other in searched) - continue - if(next.powernet != other.powernet) - fail("Cable at ([next.x], [next.y], [next.z]) did not share powernet with connected neighbour at ([other.x], [other.y], [other.z])") - failed++ - to_search += other - - found_cables += searched - - if(failed) - fail("Found [failed] bad cables.") - else - pass("All connected roundstart cables have matching powernets.") - - return 1 - - -/datum/unit_test/areas_apc_uniqueness - name = "POWER: Each area should have at most one APC." - -/datum/unit_test/areas_apc_uniqueness/start_test() - var/failure = "" - for(var/area/A in world) - var/obj/machinery/power/apc/found_apc = null - for(var/obj/machinery/power/apc/APC in A) - if(!found_apc) - found_apc = APC - continue - if(failure) - failure = "[failure]\n" - failure = "[failure]Duplicated APCs in area: [A.name]. #1: [log_info_line(found_apc)] #2: [log_info_line(APC)]" - - if(failure) - fail(failure) - else - pass("No areas with duplicated APCs have been found.") - return 1 - -/datum/unit_test/area_power_tally_accuracy - name = "POWER: All areas must have accurate power use values." - -/datum/unit_test/area_power_tally_accuracy/start_test() - var/failed = FALSE - var/list/channel_names = list("equip", "light", "environ") - for(var/area/A in world) - var/list/old_values = list(A.used_equip, A.used_light, A.used_environ) - A.retally_power() - var/list/new_values = list(A.used_equip, A.used_light, A.used_environ) - for(var/i in 1 to length(old_values)) - if(abs(old_values[i] - new_values[i]) > 1) // Round because there can in fact be roundoff error here apparently. - failed = TRUE - log_bad("The area [A.name] had improper power use values on the [channel_names[i]] channel: was [old_values[i]] but should be [new_values[i]].") - - if(failed) - fail("At least one area had improper power use values") - else - pass("All areas had accurate power use values.") - return 1 \ No newline at end of file diff --git a/code/unit_tests/reagent_color_test.dm b/code/unit_tests/reagent_color_test.dm deleted file mode 100644 index 39d07a75f7769..0000000000000 --- a/code/unit_tests/reagent_color_test.dm +++ /dev/null @@ -1,18 +0,0 @@ - -/datum/unit_test/reagent_colors_test - name = "REAGENTS: Reagents must have valid colors without alpha in color value" - -/datum/unit_test/reagent_colors_test/start_test() - var/list/bad_reagents = list() - - for(var/T in typesof(/datum/reagent)) - var/datum/reagent/R = T - if(length(initial(R.color)) != 7) - bad_reagents += "[T] ([initial(R.color)])" - - if(length(bad_reagents)) - fail("Reagents with invalid colors found: [english_list(bad_reagents)]") - else - pass("All reagents have valid colors.") - - return 1 diff --git a/code/unit_tests/seed_tests.dm b/code/unit_tests/seed_tests.dm deleted file mode 100644 index e522ddf31452b..0000000000000 --- a/code/unit_tests/seed_tests.dm +++ /dev/null @@ -1,18 +0,0 @@ -/datum/unit_test/seed_types_have_at_least_one_sprite - name = "SEED: Seed types should have at least one sprite" - -/datum/unit_test/seed_types_have_at_least_one_sprite/start_test() - var/any_failed = FALSE - - for (var/subtype in subtypesof(/datum/seed)) - var/datum/seed/S = new subtype() - var/sprite = S.get_trait(TRAIT_PLANT_ICON) - if(sprite && (!(sprite in SSplants.plant_sprites))) - log_bad("[subtype] references nonexistent sprite [sprite].") - any_failed = TRUE - - if (any_failed) - fail("Some seed icons were missing.") - else - pass("All seed icons were found.") - return 1 diff --git a/code/unit_tests/shuttle_tests.dm b/code/unit_tests/shuttle_tests.dm deleted file mode 100644 index f1efe3f98313b..0000000000000 --- a/code/unit_tests/shuttle_tests.dm +++ /dev/null @@ -1,22 +0,0 @@ -/datum/unit_test/generic_shuttle_landmarks_shall_not_appear_in_restricted_list - name = "SHUTTLE: Generic shuttle landmarks shall not appear in the restricted landmark list." - -/datum/unit_test/generic_shuttle_landmarks_shall_not_appear_in_restricted_list/start_test() - var/fail = FALSE - - for(var/obj/effect/overmap/visitable/sector in world) - var/list/failures = list() - for(var/generic in sector.initial_generic_waypoints) - for(var/shuttle in sector.initial_restricted_waypoints) - if(generic == sector.initial_restricted_waypoints[shuttle]) - failures += generic - break - if(length(failures)) - log_bad("The sector [log_info_line(sector)] has the following generic landmarks also appearing on the restricted list: [english_list(failures)]") - fail = TRUE - - if (fail) - fail("Some sector landmark lists were misconfigured.") - else - pass("All sector landmark lists were configured properly.") - return 1 \ No newline at end of file diff --git a/code/unit_tests/submaps.dm b/code/unit_tests/submaps.dm deleted file mode 100644 index dba694c72e9ed..0000000000000 --- a/code/unit_tests/submaps.dm +++ /dev/null @@ -1,20 +0,0 @@ -/datum/unit_test/submaps_shall_have_a_unique_descriptor - name = "SUBMAPS: Archetypes shall have a valid, unique descriptor." - -/datum/unit_test/submaps_shall_have_a_unique_descriptor/start_test() - var/list/checked_submaps = list() - var/list/non_unique_descriptors = list() - for(var/archetype in SSmapping.submap_archetypes) - var/decl/submap_archetype/arch = SSmapping.submap_archetypes[archetype] - if(!arch.descriptor) - non_unique_descriptors += "[arch.type] - no descriptor set" - else if(checked_submaps[arch.descriptor]) - non_unique_descriptors += "[arch.type] - [arch.descriptor]" - non_unique_descriptors |= "[checked_submaps[arch.descriptor]] - [arch.descriptor]" - else - checked_submaps[arch.descriptor] = arch.type - if(LAZYLEN(non_unique_descriptors)) - fail("Some submap archetypes do not have unique descriptors:\n[jointext(non_unique_descriptors, "\n")].") - else - pass("All submap archetypes had unique descriptors.") - return 1 diff --git a/code/unit_tests/subsystem_tests.dm b/code/unit_tests/subsystem_tests.dm deleted file mode 100644 index 95224a7050b15..0000000000000 --- a/code/unit_tests/subsystem_tests.dm +++ /dev/null @@ -1,44 +0,0 @@ -/datum/unit_test/subsystem_atom_shall_have_no_bad_init_calls - name = "SUBSYSTEM - ATOMS: Shall have no bad init calls" - -/datum/unit_test/subsystem_atom_shall_have_no_bad_init_calls/start_test() - if(SSatoms.BadInitializeCalls.len) - log_bad(jointext(SSatoms.InitLog(), null)) - fail("[SSatoms] had bad initialization calls.") - else - pass("[SSatoms] had no bad initialization calls.") - return 1 - -/datum/unit_test/subsystem_shall_be_initialized - name = "SUBSYSTEM - INIT: Subsystems shall be initalized" - -/datum/unit_test/subsystem_shall_be_initialized/start_test() - var/list/bad_subsystems = list() - for(var/datum/controller/subsystem/SS in Master.subsystems) - if (SS.flags & SS_NO_INIT) - continue - if(!SS.initialized) - bad_subsystems += SS.type - - if(bad_subsystems.len) - fail("Found improperly initialized subsystems: [english_list(bad_subsystems)]") - else - pass("All susbsystems have initialized properly") - - return 1 - -/datum/unit_test/all_atoms_shall_be_initialized - name = "SUBSYSTEM - ATOMS: All atoms shall be initialized." - -/datum/unit_test/all_atoms_shall_be_initialized/start_test() - set background = TRUE // avoid infinite loop warning; SS will still wait for us. - var/fail = FALSE - for(var/atom/atom in world) - if(!(atom.atom_flags & ATOM_FLAG_INITIALIZED)) - log_bad("Uninitialized atom: [log_info_line(atom)]") - fail = TRUE - if(fail) - fail("There were uninitialized atoms.") - else - pass("All atoms were initialized") - return 1 diff --git a/code/unit_tests/test_obj.dm b/code/unit_tests/test_obj.dm deleted file mode 100644 index 625b986096137..0000000000000 --- a/code/unit_tests/test_obj.dm +++ /dev/null @@ -1,10 +0,0 @@ -/obj/test - name = "A test object. You shall never see this." - desc = "A test object. You shall never see this." - -/obj/test/New(var/atom/loc, var/is_test) - ..() - if(!is_test) - error("[src] as created at [loc] - [loc.x]-[loc.y]-[loc.z]") - log_and_message_admins("created \a [src] at [loc]") - qdel(src) diff --git a/code/unit_tests/time_tests.dm b/code/unit_tests/time_tests.dm deleted file mode 100644 index 8f700ed2d135f..0000000000000 --- a/code/unit_tests/time_tests.dm +++ /dev/null @@ -1,75 +0,0 @@ -/datum/unit_test/time - name = "TIME - Template" - template = /datum/unit_test/time - -/datum/unit_test/time/shall_validate_sixth_of_june - name = "Shall validate 6th of June" - -/datum/unit_test/time/shall_validate_sixth_of_june/start_test() - var/datum/is_date/day/D = new(6, 6) - if(D.IsValid()) - pass("Validation succeeded") - else - fail("Validation failed") - qdel(D) - return TRUE - -/datum/unit_test/time/shall_not_validate_not_sixth_of_june - name = "Shall not validate not-6th of June" - -/datum/unit_test/time/shall_not_validate_not_sixth_of_june/start_test() - var/datum/is_date/day/D = new(1, 1) - if(D.IsValid()) - fail("Unexpected validation") - else - pass("Did not validate") - qdel(D) - return TRUE - -/datum/unit_test/time/shall_validate_range_that_include_sixt_of_june_start_before_end - name = "Shall be able to validate range that include 6th of June - Start before End" - -/datum/unit_test/time/shall_validate_range_that_include_sixt_of_june_start_before_end/start_test() - var/datum/is_date/range/R = new(5, 5, 7, 7) - if(R.IsValid()) - pass("Validation succeeded") - else - fail("Validation failed") - qdel(R) - return TRUE - -/datum/unit_test/time/shall_validate_range_that_include_sixt_of_june_start_after_end - name = "Shall be able to validate range that include 6th of June - Start after End" - -/datum/unit_test/time/shall_validate_range_that_include_sixt_of_june_start_after_end/start_test() - var/datum/is_date/range/R = new(8, 8, 7, 7) - if(R.IsValid()) - pass("Validation succeeded") - else - fail("Validation failed") - qdel(R) - return TRUE - -/datum/unit_test/time/shall_not_validate_range_that_exlude_sixt_of_june_start_before_end - name = "Shall not validate range that exlude 6th of June - Start before End" - -/datum/unit_test/time/shall_not_validate_range_that_exlude_sixt_of_june_start_before_end/start_test() - var/datum/is_date/range/R = new(7, 7, 8, 8) - if(R.IsValid()) - fail("Unexpected validation") - else - pass("Did not validate") - qdel(R) - return TRUE - -/datum/unit_test/time/shall_not_validate_range_that_exclude_sixt_of_june_start_after_end - name = "Shall not validate range that exlude 6th of June - Start after End" - -/datum/unit_test/time/shall_not_validate_range_that_exclude_sixt_of_june_start_after_end/start_test() - var/datum/is_date/range/R = new(7, 7, 5, 5) - if(R.IsValid()) - fail("Unexpected validation") - else - pass("Did not validate") - qdel(R) - return TRUE diff --git a/code/unit_tests/unique_tests.dm b/code/unit_tests/unique_tests.dm deleted file mode 100644 index 42cda5f74a1ed..0000000000000 --- a/code/unit_tests/unique_tests.dm +++ /dev/null @@ -1,199 +0,0 @@ -/datum/unit_test/cable_colors_shall_be_unique - name = "UNIQUENESS: Cable Colors Shall Be Unique" - -/datum/unit_test/cable_colors_shall_be_unique/start_test() - var/list/names = list() - var/list/colors = list() - - var/index = 0 - for(var/color_name in GLOB.possible_cable_colours) - group_by(names, color_name, index) - group_by(colors, GLOB.possible_cable_colours[color_name], index) - index++ - - var/number_of_issues = number_of_issues(names, "Names") - number_of_issues += number_of_issues(colors, "Colors") - - if(number_of_issues) - fail("[number_of_issues] issues with cable colors found.") - else - pass("All cable colors are unique.") - - return 1 - -/datum/unit_test/research_designs_shall_be_unique - name = "UNIQUENESS: Research Designs Shall Be Unique" - -/datum/unit_test/research_designs_shall_be_unique/start_test() - var/list/ids = list() - var/list/build_paths = list() - - for(var/design_type in subtypesof(/datum/design)) - var/datum/design/design = design_type - if(initial(design.id) == "id") - continue - - group_by(ids, initial(design.id), design) - group_by(build_paths, initial(design.build_path), design) - - var/number_of_issues = number_of_issues(ids, "IDs") - number_of_issues += number_of_issues(build_paths, "Build Paths") - - if(number_of_issues) - fail("[number_of_issues] issues with research designs found.") - else - pass("All research designs are unique.") - - return 1 - -/datum/unit_test/player_preferences_shall_have_unique_key - name = "UNIQUENESS: Player Preferences Shall Be Unique" - -/datum/unit_test/player_preferences_shall_have_unique_key/start_test() - var/list/preference_keys = list() - - for(var/cp in get_client_preferences()) - var/datum/client_preference/client_pref = cp - group_by(preference_keys, client_pref.key, client_pref) - - var/number_of_issues = number_of_issues(preference_keys, "Keys") - if(number_of_issues) - fail("[number_of_issues] issues with player preferences found.") - else - pass("All player preferences have unique keys.") - return 1 - -/datum/unit_test/access_datums_shall_be_unique - name = "UNIQUENESS: Access Datums Shall Be Unique" - -/datum/unit_test/access_datums_shall_be_unique/start_test() - var/list/access_ids = list() - var/list/access_descs = list() - - for(var/a in get_all_access_datums()) - var/datum/access/access = a - group_by(access_ids, access.id, access) - group_by(access_descs, access.desc, access) - - var/number_of_issues = number_of_issues(access_ids, "Ids") - number_of_issues += number_of_issues(access_descs, "Descriptions") - if(number_of_issues) - fail("[number_of_issues] issue\s with access datums found.") - else - pass("All access datums are unique.") - return 1 - -/datum/unit_test/outfit_datums_shall_have_unique_names - name = "UNIQUENESS: Outfit Datums Shall Have Unique Names" - -/datum/unit_test/outfit_datums_shall_have_unique_names/start_test() - var/list/outfits_by_name = list() - - for(var/a in outfits()) - var/decl/hierarchy/outfit/outfit = a - group_by(outfits_by_name, outfit.name, outfit.type) - - var/number_of_issues = number_of_issues(outfits_by_name, "Names") - if(number_of_issues) - fail("[number_of_issues] issue\s with outfit datums found.") - else - pass("All outfit datums have unique names.") - return 1 - -/datum/unit_test/languages_shall_have_unique_names - name = "UNIQUENESS: Languages Shall Have Unique Names" - -/datum/unit_test/languages_shall_have_unique_names/start_test() - var/list/languages_by_name = list() - - for(var/lt in subtypesof(/datum/language)) - var/datum/language/l = lt - group_by(languages_by_name, initial(l.name), lt) - - var/number_of_issues = number_of_issues(languages_by_name, "Language Names") - if(number_of_issues) - fail("[number_of_issues] issue\s with language datums found.") - else - pass("All languages datums have unique names.") - return 1 - -/datum/unit_test/languages_shall_have_no_or_unique_keys - name = "UNIQUENESS: Languages Shall Have No or Unique Keys" - -/datum/unit_test/languages_shall_have_no_or_unique_keys/start_test() - var/list/languages_by_key = list() - - for(var/lt in subtypesof(/datum/language)) - var/datum/language/l = lt - var/language_key = initial(l.key) - if(!language_key) - continue - - group_by(languages_by_key, language_key, lt) - - var/number_of_issues = number_of_issues(languages_by_key, "Language Keys") - if(number_of_issues) - fail("[number_of_issues] issue\s with language datums found.") - else - pass("All languages datums have unique keys.") - return 1 - -/datum/unit_test/outfit_backpacks_shall_have_unique_names - name = "UNIQUENESS: Outfit Backpacks Shall Have Unique Names" - -/datum/unit_test/outfit_backpacks_shall_have_unique_names/start_test() - var/list/backpacks_by_name = list() - - var/bos = decls_repository.get_decls_of_subtype(/decl/backpack_outfit) - for(var/bo in bos) - var/decl/backpack_outfit/backpack_outfit = bos[bo] - group_by(backpacks_by_name, backpack_outfit.name, backpack_outfit) - - var/number_of_issues = number_of_issues(backpacks_by_name, "Outfit Backpack Names") - if(number_of_issues) - fail("[number_of_issues] duplicate outfit backpacks\s found.") - else - pass("All outfit backpacks have unique names.") - return 1 - -/datum/unit_test/space_suit_modifiers_shall_have_unique_names - name = "UNIQUENESS: Space Suit Modifiers Shall Have Unique Names" - -/datum/unit_test/space_suit_modifiers_shall_have_unique_names/start_test() - var/list/space_suit_modifiers_by_name = list() - - var/sss = decls_repository.get_decls_of_subtype(/decl/item_modifier/space_suit) - for(var/ss in sss) - var/decl/item_modifier/space_suit/space_suit_modifier = sss[ss] - group_by(space_suit_modifiers_by_name, space_suit_modifier.name, space_suit_modifier) - - var/number_of_issues = number_of_issues(space_suit_modifiers_by_name, "Space Suit Modifier Names") - if(number_of_issues) - fail("[number_of_issues] duplicate space suit modifier\s found.") - else - pass("All space suit modifiers have unique names.") - return 1 - -/datum/unit_test/proc/number_of_issues(var/list/entries, var/type, var/feedback = /decl/noi_feedback) - var/issues = 0 - for(var/key in entries) - var/list/values = entries[key] - if(values.len > 1) - var/decl/noi_feedback/noif = decls_repository.get_decl(feedback) - noif.print(src, type, key, values) - issues++ - - return issues - -/decl/noi_feedback/proc/priv_print(var/datum/unit_test/ut, var/type, var/key, var/output_text) - ut.log_bad("[type] - [key] - The following entries have the same value: [output_text]") - -/decl/noi_feedback/proc/print(var/datum/unit_test/ut, var/type, var/key, var/list/entries) - priv_print(ut, type, key, english_list(entries)) - -/decl/noi_feedback/detailed/print(var/datum/unit_test/ut, var/type, var/key, var/list/entries) - var/list/pretty_print = list() - pretty_print += "" - for(var/entry in entries) - pretty_print += log_info_line(entry) - priv_print(ut, type, key, jointext(pretty_print, "\n")) diff --git a/code/unit_tests/unit_test.dm b/code/unit_tests/unit_test.dm deleted file mode 100644 index 86cefb7bf13ce..0000000000000 --- a/code/unit_tests/unit_test.dm +++ /dev/null @@ -1,186 +0,0 @@ -/* Unit Tests originally designed by Ccomp5950 - * - * Tests are created to prevent changes that would create bugs or change expected behaviour. - * For the most part I think any test can be created that doesn't require a client in a mob or require a game mode other then extended - * - * The easiest way to make effective tests is to create a "template" if you intend to run the same test over and over and make your actual - * tests be a "child object" of those templates. Be sure and name your templates with the word "template" somewhere in var/name. - * - * The goal is to have all sorts of tests that run and to run them as quickly as possible. - * - * Tests that require time to run we instead just check back on their results later instead of waiting around in a sleep(1) for each test. - * This allows us to finish unit testing quicker since we can start other tests while we're waiting on that one to finish. - * - * An example of that is listed in mob_tests.dm with the human_breath test. We spawn the mob in space and set the async flag to 1 so that we run the check later. - * After 10 life ticks for that mob we check it's oxyloss but while that is going on we've already ran other tests. - * - * If your test requires a significant amount of time...cheat on the timers. Either speed up the process/life runs or do as we did in the timers for the shuttle - * transfers in zas_tests.dm we move a shuttle but instead of waiting 3 minutes we set the travel time to a very low number. - * - * At the same time, Unit tests are intended to reflect standard usage so avoid changing to much about how stuff is processed. - * - * - * WRITE UNIT TEST TEMPLATES AS GENERIC AS POSSIBLE (makes for easy reusability) - * - */ - -var/global/all_unit_tests_passed = 1 -var/global/failed_unit_tests = 0 -var/global/skipped_unit_tests = 0 -var/global/total_unit_tests = 0 - -// For console out put in Linux/Bash makes the output green or red. -// Should probably only be used for unit tests since some special folks use winders to host servers. -// if you want plain output, use dm.sh -DUNIT_TEST -DUNIT_TEST_PLAIN baystation12.dme -#ifdef UNIT_TEST_PLAIN -var/global/ascii_esc = "" -var/global/ascii_red = "" -var/global/ascii_green = "" -var/global/ascii_yellow = "" -var/global/ascii_reset = "" -#else -var/global/ascii_esc = ascii2text(27) -var/global/ascii_red = "[ascii_esc]\[31m" -var/global/ascii_green = "[ascii_esc]\[32m" -var/global/ascii_yellow = "[ascii_esc]\[33m" -var/global/ascii_reset = "[ascii_esc]\[0m" -#endif - - -// We list these here so we can remove them from the for loop running this. -// Templates aren't intended to be ran but just serve as a way to create child objects of it with inheritable tests for quick test creation. - -/datum/unit_test - var/name = "template - should not be ran." - var/template // Treat the unit test as a template if its type is the same as the value of this var - var/disabled = 0 // If we want to keep a unit test in the codebase but not run it for some reason. - var/async = 0 // If the check can be left to do it's own thing, you must define a check_result() proc if you use this. - var/reported = 0 // If it's reported a success or failure. Any tests that have not are assumed to be failures. - var/why_disabled = "No reason set." // If we disable a unit test we will display why so it reminds us to check back on it later. - - var/safe_landmark - var/space_landmark - -/datum/unit_test/proc/log_debug(var/message) - log_unit_test("[ascii_yellow]--- DEBUG --- \[[name]\]: [message][ascii_reset]") - -/datum/unit_test/proc/log_bad(var/message) - log_unit_test("[ascii_red]\[[name]\]: [message][ascii_reset]") - -/datum/unit_test/proc/fail(var/message) - all_unit_tests_passed = 0 - failed_unit_tests++ - reported = 1 - log_unit_test("[ascii_red]!!! FAILURE !!! \[[name]\]: [message][ascii_reset]") - -/datum/unit_test/proc/pass(var/message) - reported = 1 - log_unit_test("[ascii_green]*** SUCCESS *** \[[name]\]: [message][ascii_reset]") - -/datum/unit_test/proc/skip(var/message) - skipped_unit_tests++ - reported = 1 - log_unit_test("[ascii_yellow]--- SKIPPED --- \[[name]\]: [message][ascii_reset]") - -/datum/unit_test/proc/start_test() - fail("No test proc - [type]") - -/datum/unit_test/proc/check_result() - fail("No check results proc - [type]") - return 1 - -/datum/unit_test/proc/get_safe_turf() - if(!safe_landmark) - for(var/landmark in landmarks_list) - if(istype(landmark, /obj/effect/landmark/test/safe_turf)) - safe_landmark = landmark - break - return get_turf(safe_landmark) - -/datum/unit_test/proc/get_space_turf() - if(!space_landmark) - for(var/landmark in landmarks_list) - if(istype(landmark, /obj/effect/landmark/test/space_turf)) - space_landmark = landmark - break - return get_turf(space_landmark) - -// Async unit tests will be delayed until the subsystems in this list have fired at least once. -/datum/unit_test/proc/subsystems_to_await() - return list() - -/proc/load_unit_test_changes() -/* - //This takes about 60 seconds to run when unit testing and is only used for the ZAS vacume check on The Asteroid. - if(config.generate_map != 1) - log_unit_test("Overiding Configuration option for Asteroid Generation to ENABLED") - config.generate_map = 1 // The default map requires it, the example config doesn't have this enabled. - */ - -/proc/get_test_datums() - . = list() - for(var/test in subtypesof(/datum/unit_test)) - var/datum/unit_test/d = test - if(test == initial(d.template)) - continue - . += d - -/proc/do_unit_test(datum/unit_test/test, end_time, skip_disabled_tests = TRUE) - if(test.disabled && skip_disabled_tests) - test.pass("[ascii_red]Check Disabled: [test.why_disabled]") - return - if(world.time > end_time) - test.fail("Unit Tests Ran out of time") // This should never happen, and if it does either fix your unit tests to be faster or if you can make them async checks. - return - if (test.start_test() == null) // Runtimed. - test.fail("Test Runtimed") - return 1 - -//For async tests. Returns 1 if done. -/proc/check_unit_test(datum/unit_test/test, end_time) - if(world.time > end_time) - test.fail("Unit Tests Ran out of Time")// If we're going to run out of time, most likely it's here. If you can't speed up your unit tests then add time to the timeout at the top. - return 1 - var/result = test.check_result() - if(isnull(result)) - test.fail("Test Runtimed") - return 1 - else if(result) - return 1 - -/proc/unit_test_final_message() - var/skipped_message = "" - if(skipped_unit_tests) - skipped_message = "| \[[skipped_unit_tests]\\[total_unit_tests]\] Unit Tests Skipped " - if(all_unit_tests_passed) - log_unit_test("[ascii_green]**** All Unit Tests Passed \[[total_unit_tests]\] [skipped_message]****[ascii_reset]") - else - log_unit_test("[ascii_red]**** \[[failed_unit_tests]\\[total_unit_tests]\] Unit Tests Failed [skipped_message]****[ascii_reset]") - -/datum/admins/proc/run_unit_test(var/datum/unit_test/unit_test_type in get_test_datums()) - set name = "Run Unit Test" - set desc = "Runs the selected unit test - Remember to enable Debug Log Messages" - set category = "Debug" - - if(!unit_test_type) - return - - if(!check_rights(R_DEBUG)) - return - - log_and_message_admins("has started the unit test '[initial(unit_test_type.name)]'") - var/datum/unit_test/test = new unit_test_type - var/end_unit_tests = world.time + MAX_UNIT_TEST_RUN_TIME - do_unit_test(test, end_unit_tests, FALSE) - if(test.async) - while(!check_unit_test(test, end_unit_tests)) - sleep(20) - unit_test_final_message() - -/obj/effect/landmark/test/safe_turf - name = "safe_turf" // At creation, landmark tags are set to: "landmark*[name]" - desc = "A safe turf should be an as large block as possible of livable, passable turfs, preferably at least 3x3 with the marked turf as the center." - -/obj/effect/landmark/test/space_turf - name = "space_turf" - desc = "A space turf should be an as large block as possible of space, preferably at least 3x3 with the marked turf as the center." diff --git a/code/unit_tests/uplink_tests.dm b/code/unit_tests/uplink_tests.dm deleted file mode 100644 index c21cedc861748..0000000000000 --- a/code/unit_tests/uplink_tests.dm +++ /dev/null @@ -1,46 +0,0 @@ -/datum/unit_test/uplink_setup_test - name = "UPLINK: All uplink items shall be valid." - -/datum/unit_test/uplink_setup_test/start_test() - var/success = TRUE - - for(var/item in uplink.items) - var/datum/uplink_item/ui = item - success = is_valid_uplink_item(ui, "Uplink items") && success - - for(var/item in uplink.items_assoc) - var/datum/uplink_item/ui = uplink.items_assoc[item] - success = is_valid_uplink_item(ui, "Uplink assoc items") && success - - var/datum/uplink_random_selection/uplink_selection = get_uplink_random_selection_by_type(/datum/uplink_random_selection/blacklist) - for(var/item in uplink_selection.items) - var/datum/uplink_random_item/uri = item // Basically ensuring random uplink items is a subset of the full range of items - success = is_valid_uplink_item(uplink.items_assoc[uri.uplink_item], "Random uplink items", uri.uplink_item) && success - - if(success) - pass("All uplink items were valid.") - else - fail("One or more uplink items were invalid.") - - return TRUE - -/datum/unit_test/uplink_setup_test/proc/is_valid_uplink_item(var/datum/uplink_item/ui, var/type, var/optional_uplink_item_type) - . = TRUE - if(!istype(ui)) - log_bad("[type]: [ui] was of an unexpected type: [log_info_line(ui)]") - return FALSE - if(!ui.category) - log_bad("[type]: [ui] has no category.") - . = FALSE - var/cost = ui.cost(0) - if(cost <= 0 || round(cost) != cost) - log_bad("[type]: [ui] has an invalid modified cost of [cost].") - . = FALSE - if(ui.item_cost < 0 || round(ui.item_cost) != ui.item_cost) - log_bad("[type]: [ui] has an invalid base cost of [ui.item_cost].") - . = FALSE - for(var/antag_type in ui.antag_costs) - var/antag_cost = ui.antag_costs[antag_type] - if(antag_cost <= 0 || round(antag_cost) != antag_cost) - log_bad("[type]: [ui] has an invalid antag cost of [antag_cost] ([antag_type]).") - . = FALSE diff --git a/code/unit_tests/view_variables_test.dm b/code/unit_tests/view_variables_test.dm deleted file mode 100644 index 4df2ef87444cf..0000000000000 --- a/code/unit_tests/view_variables_test.dm +++ /dev/null @@ -1,49 +0,0 @@ -/datum/unit_test/view_variables_special_vv_handlers_shall_be_valid - name = "VIEW VARIABLES: All Special VV Handlers Shall Be Valid" - -/datum/unit_test/view_variables_special_vv_handlers_shall_be_valid/start_test() - var/list/faulty_handlers = list() - for(var/decl/vv_set_handler/sh in init_subtypes(/decl/vv_set_handler)) - if(!ispath(sh.handled_type)) - log_bad("[sh] does not have a valid handled type. Expected a path, was [log_info_line(sh.handled_type)]") - faulty_handlers |= sh - - if(!islist(sh.handled_vars)) - log_bad("[sh] does not have a handled variables list. Expected a list, was [log_info_line(sh.handled_vars)]") - faulty_handlers |= sh - else if(!sh.handled_vars.len) - log_bad("[sh] as an empty handled variables list.") - faulty_handlers |= sh - else - continue - // Somehow check for missing vars here without creating instances. - // I.e.: for(var/handled_var in sh.handled_vars) check handled_var in handled_type.vars - - if(faulty_handlers.len) - fail("The following special VV handlers are invalid: [english_list(faulty_handlers)]") - else - pass("All special VV handlers are valid.") - return 1 - -/datum/unit_test/view_variables_no_special_vv_handlers_shall_have_overlapping_handling - name = "VIEW VARIABLES: No Special VV Handlers Shall Have Overlapping Handling" - -/datum/unit_test/view_variables_no_special_vv_handlers_shall_have_overlapping_handling/start_test() - var/list/handlers = init_subtypes(/decl/vv_set_handler) - var/failed = 0 - - for(var/decl/vv_set_handler/sh1 in handlers) - handlers -= sh1 - for(var/decl/vv_set_handler/sh2 in handlers) - if(!(ispath(sh1.handled_type, sh2.handled_type) || ispath(sh2.handled_type, sh1.handled_type))) - continue - var/list/intersected_vars = sh1.handled_vars & sh2.handled_vars - if(intersected_vars.len) - failed = TRUE - log_bad("[sh1] and [sh2] have the following overlaps: [english_list(intersected_vars)]") - - if(failed) - fail("One or more special VV handlers had overlapping handling.") - else - pass("No special VV handlers had overlapping handling.") - return 1 diff --git a/code/unit_tests/virtual_mob_tests.dm b/code/unit_tests/virtual_mob_tests.dm deleted file mode 100644 index fd6dec627757b..0000000000000 --- a/code/unit_tests/virtual_mob_tests.dm +++ /dev/null @@ -1,112 +0,0 @@ -#ifdef UNIT_TEST - -/datum/unit_test/virtual - name = "VIRTUAL - Template" - template = /datum/unit_test/virtual - -/datum/unit_test/virtual/helper - name = "VIRTUAL - Template Helper" - template = /datum/unit_test/virtual/helper - - var/helper_proc - var/list/expected_mobs - - var/mob/mob_one - var/mob/mob_two - var/mob/mob_three - -/datum/unit_test/virtual/helper/start_test() - standard_setup() - - var/list/actual_mobs = call(helper_proc)(mob_one) - var/list/missing_mobs = expected_mobs - actual_mobs - var/list/excessive_mobs= actual_mobs - expected_mobs - - if(missing_mobs.len || excessive_mobs.len) - fail("[helper_proc] did not return the expected mobs. Expected [english_list(expected_mobs)], was [english_list(actual_mobs)]") - log_debug(mob_one.virtual_mob.sight) - log_debug(mob_one.virtual_mob.see_invisible) - log_debug(mob_one.virtual_mob.see_in_dark) - else - pass("[helper_proc] returned the expected mobs.") - - expected_mobs = null - standard_cleanup() - return TRUE - -/datum/unit_test/virtual/helper/check_hearers_in_range - name = "VIRTUAL - Helper Test - Check Hearers In Range" - helper_proc = /proc/hearers_in_range -/datum/unit_test/virtual/helper/check_hearers_in_range/standard_setup() - ..() - expected_mobs = list(mob_one, mob_two, mob_three) - -/datum/unit_test/virtual/helper/check_hearers_in_range_with_mob_inside_storage - name = "VIRTUAL - Helper Test - Check Hearers In Range - With Mob Inside Storage" - helper_proc = /proc/hearers_in_range - var/obj/storage -/datum/unit_test/virtual/helper/check_hearers_in_range_with_mob_inside_storage/standard_setup() - ..() - storage = new(mob_one.loc) - mob_one.forceMove(storage) - expected_mobs = list(mob_one, mob_two, mob_three) -/datum/unit_test/virtual/helper/check_hearers_in_range_with_mob_inside_storage/Destroy() - QDEL_NULL(storage) - . = ..() - -/datum/unit_test/virtual/helper/check_viewers_in_range - name = "VIRTUAL - Helper Test - Check Viewers In Range" - helper_proc = /proc/viewers_in_range -/datum/unit_test/virtual/helper/check_viewers_in_range/standard_setup() - ..() - expected_mobs = list(mob_one, mob_two, mob_three) - -/datum/unit_test/virtual/helper/check_all_hearers - name = "VIRTUAL - Helper Test - Check All Hearers" - helper_proc = /proc/all_hearers -/datum/unit_test/virtual/helper/check_all_hearers/standard_setup() - ..() - expected_mobs = list(mob_one, mob_two) - -/datum/unit_test/virtual/helper/check_all_viewers - name = "VIRTUAL - Helper Test - Check All Viewers" - helper_proc = /proc/all_viewers -/datum/unit_test/virtual/helper/check_all_viewers/standard_setup() - ..() - expected_mobs = list(mob_one, mob_two) - -/datum/unit_test/virtual/helper/check_mobs_in_viewing_range - name = "VIRTUAL - Helper Test - Check Mobs In Viewing Range" - helper_proc = /proc/hosts_in_view_range -/datum/unit_test/virtual/helper/check_mobs_in_viewing_range/standard_setup() - ..() - expected_mobs = list(mob_one, mob_two) - -/datum/unit_test/virtual/helper/check_hosts_in_view_range_with_mob_inside_object - name = "VIRTUAL - Helper Test - Check Hosts in View Range - With Mob Inside Object" - helper_proc = /proc/hosts_in_view_range - var/obj/storage -/datum/unit_test/virtual/helper/check_hosts_in_view_range_with_mob_inside_object/standard_setup() - ..() - storage = new(mob_one.loc) - mob_one.forceMove(storage) - expected_mobs = list(mob_one, mob_two) -/datum/unit_test/virtual/helper/check_hosts_in_view_range_with_mob_inside_object/Destroy() - QDEL_NULL(storage) - . = ..() - -/datum/unit_test/virtual/helper/proc/standard_setup() - mob_one = get_named_instance(/mob/fake_mob, get_turf(locate(/obj/effect/landmark/virtual_spawn/one)), "Test Mob 1") - mob_two = get_named_instance(/mob/fake_mob, get_turf(locate(/obj/effect/landmark/virtual_spawn/two)), "Test Mob 2") - mob_three = get_named_instance(/mob/fake_mob, get_turf(locate(/obj/effect/landmark/virtual_spawn/three)), "Test Mob 3") - -/datum/unit_test/virtual/helper/proc/standard_cleanup() - QDEL_NULL(mob_one) - QDEL_NULL(mob_two) - QDEL_NULL(mob_three) - -/obj/effect/landmark/virtual_spawn/one -/obj/effect/landmark/virtual_spawn/two -/obj/effect/landmark/virtual_spawn/three - -#endif diff --git a/code/unit_tests/zas_tests.dm b/code/unit_tests/zas_tests.dm deleted file mode 100644 index c3ef6698b4d22..0000000000000 --- a/code/unit_tests/zas_tests.dm +++ /dev/null @@ -1,171 +0,0 @@ -/* - * - * Zas Unit Tests. - * Shuttle Pressurized. - * - * - */ - -#define UT_NORMAL 1 // Standard one atmosphere 20celsius -#define UT_VACUUM 2 // Vacume on simulated turfs -#define UT_NORMAL_COLD 3 // Cold but standard atmosphere. - -#define FAILURE 0 -#define SUCCESS 1 -#define SKIP 2 - -// -// Generic check for an area. -// - -/datum/unit_test/zas_area_test - name = "ZAS: Area Test Template" - template = /datum/unit_test/zas_area_test - var/area_path = null // Put the area you are testing here. - var/expectation = UT_NORMAL // See defines above. - -/datum/unit_test/zas_area_test/start_test() - var/list/test = test_air_in_area(area_path, expectation) - - if(isnull(test)) - fail("Check Runtimed") - - switch(test["result"]) - if(SUCCESS) pass(test["msg"]) - if(SKIP) skip(test["msg"]) - else fail(test["msg"]) - return 1 - -// ================================================================================================== - -// -// The primary helper proc. -// -/proc/test_air_in_area(var/test_area, var/expectation = UT_NORMAL) - var/test_result = list("result" = FAILURE, "msg" = "") - - var/area/A = locate(test_area) - - // BYOND creates an instance of every area, so this can't be !A or !istype(A, test_area) - if(!(A.x || A.y || A.z)) - test_result["msg"] = "Unable to get [test_area]" - test_result["result"] = FAILURE - return test_result - - var/list/GM_checked = list() - - for(var/turf/simulated/T in A) - - if(!istype(T) || isnull(T.zone) || istype(T, /turf/simulated/floor/airless)) - continue - if(T.zone.air in GM_checked) - continue - - var/t_msg = "Turf: [T] | Location: [T.x] // [T.y] // [T.z]" - - var/datum/gas_mixture/GM = T.return_air() - var/pressure = GM.return_pressure() - var/temp = GM.temperature - - switch(expectation) - - if(UT_VACUUM) - if(pressure > 10) - test_result["msg"] = "Pressure out of bounds: [pressure] | [t_msg]" - return test_result - - - if(UT_NORMAL, UT_NORMAL_COLD) - if(abs(pressure - ONE_ATMOSPHERE) > 10) - test_result["msg"] = "Pressure out of bounds: [pressure] | [t_msg]" - return test_result - - if(expectation == UT_NORMAL) - - if(abs(temp - T20C) > 10) - test_result["msg"] = "Temperature out of bounds: [temp] | [t_msg]" - return test_result - - if(expectation == UT_NORMAL_COLD) - - if(temp > 120) - test_result["msg"] = "Temperature out of bounds: [temp] | [t_msg]" - return test_result - - GM_checked.Add(GM) - - if(GM_checked.len) - test_result["result"] = SUCCESS - test_result["msg"] = "Checked [GM_checked.len] zones" - else - test_result["msg"] = "No zones checked." - - return test_result - - -// ================================================================================================== - - -// Here we move a shuttle then test it's area once the shuttle has arrived. - -/datum/unit_test/zas_supply_shuttle_moved - name = "ZAS: Supply Shuttle (When Moved)" - async=1 // We're moving the shuttle using built in procs. - - var/datum/shuttle/autodock/ferry/supply/shuttle = null - - var/testtime = 0 //Used as a timer. - -/datum/unit_test/zas_supply_shuttle_moved/start_test() - - if(!SSshuttle) - fail("Shuttle Controller not setup at time of test.") - return 1 - if(!SSshuttle.shuttles.len) - skip("No shuttles have been setup for this map.") - return 1 - - shuttle = SSsupply.shuttle - if(isnull(shuttle)) - return 1 - - // Initiate the Move. - SSsupply.movetime = 5 // Speed up the shuttle movement. - shuttle.short_jump(shuttle.get_location_waypoint(!shuttle.location)) //TODO - - return 1 - -/datum/unit_test/zas_supply_shuttle_moved/check_result() - if(!shuttle) - skip("This map has no supply shuttle.") - return 1 - - if(shuttle.moving_status == SHUTTLE_IDLE && !shuttle.at_station()) - fail("Shuttle Did not Move") - return 1 - - if(!shuttle.at_station()) - return 0 - - if(!testtime) - testtime = world.time+40 // Wait another 2 ticks then proceed. - - if(world.time < testtime) - return 0 - for(var/area/A in shuttle.shuttle_area) - var/list/test = test_air_in_area(A.type) - if(isnull(test)) - fail("Check Runtimed") - return 1 - - switch(test["result"]) - if(SUCCESS) pass(test["msg"]) - if(SKIP) skip(test["msg"]) - else fail(test["msg"]) - return 1 - -#undef UT_NORMAL -#undef UT_VACUUM -#undef UT_NORMAL_COLD -#undef SUCCESS -#undef FAILURE diff --git a/code/unit_tests/~helpers.dm b/code/unit_tests/~helpers.dm deleted file mode 100644 index a2b43734a83c8..0000000000000 --- a/code/unit_tests/~helpers.dm +++ /dev/null @@ -1,7 +0,0 @@ -/datum/unit_test/proc/get_named_instance(var/instance_type, var/instance_loc, var/instance_name) - var/atom/movable/am = new instance_type(instance_loc) - am.name = "[instance_name ? instance_name : name] ([name])" - if(ismob(am)) - var/mob/M = am - M.real_name = name - return am diff --git a/code/unit_tests/~unit_test_overrides.dm b/code/unit_tests/~unit_test_overrides.dm deleted file mode 100644 index 79b075a4a2847..0000000000000 --- a/code/unit_tests/~unit_test_overrides.dm +++ /dev/null @@ -1,81 +0,0 @@ -/* - Consistent "randomness" overrides. -*/ - -// The following overrides ensures random object spawners always select the most space consuming objects -/datum/proc/unit_test_get_weight() - CRASH("Unhandled atom: [type]") - -/datum/atom_creator/simple/unit_test_get_weight() - return unit_test_weight_of_path(path) - -/datum/atom_creator/weighted/unit_test_get_weight() - return unit_test_weight_of_path(unit_test_select_heaviest(paths)) - -/datum/atom_creator/simple - prob_method = /proc/return_true - -/datum/atom_creator/weighted - selection_method = /proc/unit_test_select_heaviest - -/obj/random - spawn_method = /obj/random/proc/unit_test_spawn_item - -GLOBAL_DATUM(unit_test_last_obj_random_creation, /atom/movable) -/obj/random/proc/unit_test_spawn_item() - var/build_path = unit_test_select_heaviest(spawn_choices()) - GLOB.unit_test_last_obj_random_creation = new build_path() - - -/proc/unit_test_select_heaviest(var/list/choices) - if(ispath(choices) || istype(choices, /datum)) - return choices - if(!islist(choices)) - CRASH("Unhandled input: [log_info_line(choices)]") - - var/heaviest_weight = -1 - var/heaviest_choice - - for(var/choice in choices) - var/path = unit_test_select_heaviest(choice) - var/weight = unit_test_weight_of_path(path) - if(weight > heaviest_weight) - heaviest_weight = weight - heaviest_choice = choice - - return heaviest_choice - -GLOBAL_LIST_EMPTY(unit_test_obj_random_weights_by_type) - -// If you adjust any of the values below, please also update /obj/structure/closet/proc/content_size(atom/movable/AM) -/proc/unit_test_weight_of_path(var/path) - if(ispath(path, /obj/random)) - var/weight = GLOB.unit_test_obj_random_weights_by_type[path] - if(!weight) - var/obj/random/R = new path() - var/type = unit_test_select_heaviest(R.spawn_choices()) - weight = unit_test_weight_of_path(type) - GLOB.unit_test_obj_random_weights_by_type[path] = weight - return weight - // Would be nice to re-use how closets calculate size/weight but the difference between instances and paths prevents it. - if(ispath(path, /obj)) - var/obj/O = path - return initial(O.w_class) / 2 - if(ispath(path, /mob)) - var/mob/M = path - return initial(M.mob_size) - if(ispath(path, /obj/structure) || ispath(path, /obj/machinery)) - return MOB_LARGE - if(istype(path, /datum)) - var/datum/D = path - return D.unit_test_get_weight() - - CRASH("Unhandled path: [log_info_line(path)]") - - -/proc/return_true() - return TRUE - -// Make is_date datums always return 6th of June during testing for ease of testing -/datum/is_date/CurrentMonthAndDay() - return list(6, 6) diff --git a/code/unit_tests/~unit_test_subsystems.dm b/code/unit_tests/~unit_test_subsystems.dm deleted file mode 100644 index aad037b65d69b..0000000000000 --- a/code/unit_tests/~unit_test_subsystems.dm +++ /dev/null @@ -1,133 +0,0 @@ -/******************* -* Unit Test Runner * -*******************/ -SUBSYSTEM_DEF(unit_tests) - name = "Unit Tests" - wait = 2 SECONDS - init_order = SS_INIT_UNIT_TESTS - runlevels = (RUNLEVELS_DEFAULT | RUNLEVEL_LOBBY) - var/list/queue = list() - var/list/async_tests = list() - var/list/current_async - var/stage = 1 - var/end_unit_tests - -/datum/controller/subsystem/unit_tests/Initialize(start_uptime) - - #ifndef UNIT_TEST_COLOURED - if(world.system_type != UNIX) // Not a Unix/Linux/etc system, we probably don't want to print color escapes (unless UNIT_TEST_COLOURED was defined to force escapes) - ascii_esc = "" - ascii_red = "" - ascii_green = "" - ascii_yellow = "" - ascii_reset = "" - #endif - log_unit_test("Initializing Unit Testing") - - // Load Map Templates - load_map_templates() - - // - //Start the Round. - // - SSticker.master_mode = "extended" - for(var/test_datum_type in get_test_datums()) - queue += new test_datum_type - log_unit_test("[queue.len] unit tests loaded.") - - -/datum/controller/subsystem/unit_tests/proc/load_map_templates() - for(var/map_template_name in (SSmapping.map_templates)) - var/datum/map_template/map_template = SSmapping.map_templates[map_template_name] - // Away sites are supposed to be tested separately in the Away Site environment - if(istype(map_template, /datum/map_template/ruin/away_site)) - report_progress("Skipping template '[map_template]' ([map_template.type]): Is an Away Site") - continue - - // Suggestion: Do smart things here to squeeze as many templates as possible into the same Z-level - if(map_template.tallness == 1) - INCREMENT_WORLD_Z_SIZE - GLOB.using_map.sealed_levels += world.maxz - var/corner = locate(world.maxx/2, world.maxy/2, world.maxz) - log_unit_test("Loading template '[map_template]' ([map_template.type]) at [log_info_line(corner)]") - map_template.load(corner) - else // Multi-Z templates are loaded using different means - log_unit_test("Loading template '[map_template]' ([map_template.type]) at Z-level [world.maxz+1] with a tallness of [map_template.tallness]") - map_template.load_new_z() - log_unit_test("Map Templates Loaded") - -/datum/controller/subsystem/unit_tests/proc/start_game() - if (GAME_STATE >= RUNLEVEL_POSTGAME) - log_unit_test("Unable to start testing - game is finished!") - del world - return - - if ((GAME_STATE == RUNLEVEL_LOBBY) && !SSticker.start_now()) - log_unit_test("Unable to start testing - SSticker failed to start the game!") - del world - return - - stage++ - log_unit_test("Game start has been requested.") - -/datum/controller/subsystem/unit_tests/proc/await_game_running() - if(GAME_STATE == RUNLEVEL_GAME) - log_unit_test("The game is now in progress.") - stage++ - -/datum/controller/subsystem/unit_tests/proc/handle_tests() - var/list/curr = queue - while (curr.len) - var/datum/unit_test/test = curr[curr.len] - curr.len-- - if(do_unit_test(test, end_unit_tests) && test.async) - async_tests += test - total_unit_tests++ - if (MC_TICK_CHECK) - return - if (!curr.len) - stage++ - -/datum/controller/subsystem/unit_tests/proc/handle_async(resumed = 0) - if (!resumed) - current_async = async_tests.Copy() - - var/list/async = current_async - while (async.len) - var/datum/unit_test/test = current_async[async.len] - for(var/S in test.subsystems_to_await()) - var/datum/controller/subsystem/subsystem = S - if(subsystem.times_fired < 1) - return - async.len-- - if(check_unit_test(test, end_unit_tests)) - async_tests -= test - if (MC_TICK_CHECK) - return - if (!async_tests.len) - stage++ - -/datum/controller/subsystem/unit_tests/fire(resumed = 0) - switch (stage) - if (1) - start_game() - - if (2) // wait a moment - await_game_running() - - if (3) - stage++ - log_unit_test("Testing Started.") - end_unit_tests = world.time + MAX_UNIT_TEST_RUN_TIME - - if (4) // do normal tests - handle_tests() - - if (5) - handle_async(resumed) - - if (6) // Finalization. - unit_test_final_message() - log_unit_test("Caught [GLOB.total_runtimes] Runtime\s.") - del world - diff --git a/code/unit_tests/~unit_test_types.dm b/code/unit_tests/~unit_test_types.dm deleted file mode 100644 index c7873de6be81c..0000000000000 --- a/code/unit_tests/~unit_test_types.dm +++ /dev/null @@ -1,51 +0,0 @@ -/datum/fake_client - -/mob/fake_mob - var/datum/fake_client/fake_client - -/mob/fake_mob/Destroy() - QDEL_NULL(fake_client) - . = ..() - -/mob/fake_mob/get_client() - if(!fake_client) - fake_client = new() - return fake_client - - -/obj/unit_test_light - w_class = 1 - -/obj/unit_test_medium - w_class = 3 - -/obj/unit_test_heavy - w_class = 5 - -/obj/random/unit_test/spawn_choices() - return list(/obj/unit_test_light, /obj/unit_test_heavy, /obj/unit_test_medium) - - -/area/test_area/powered_non_dynamic_lighting - name = "\improper Test Area - Powered - Non-Dynamic Lighting" - icon_state = "green" - requires_power = 0 - dynamic_lighting = 0 - -/area/test_area/requires_power_non_dynamic_lighting - name = "\improper Test Area - Requires Power - Non-Dynamic Lighting" - icon_state = "red" - requires_power = 1 - dynamic_lighting = 0 - -/area/test_area/powered_dynamic_lighting - name = "\improper Test Area - Powered - Dynamic Lighting" - icon_state = "yellow" - requires_power = 0 - dynamic_lighting = 1 - -/area/test_area/requires_power_dynamic_lighting - name = "\improper Test Area - Requires Power - Dynamic Lighting" - icon_state = "purple" - requires_power = 1 - dynamic_lighting = 1 diff --git a/code/world.dm b/code/world.dm deleted file mode 100644 index 2a21ea0e200eb..0000000000000 --- a/code/world.dm +++ /dev/null @@ -1,17 +0,0 @@ -#define WORLD_ICON_SIZE 32 - -//This file is just for the necessary /world definition -//Try looking in game/world.dm - -/world - mob = /mob/new_player - turf = /turf/space - area = /area/space - view = "15x15" - cache_lifespan = 7 - hub = "Exadv1.spacestation13" - icon_size = WORLD_ICON_SIZE - fps = 30 -#ifdef GC_FAILURE_HARD_LOOKUP - loop_checks = FALSE -#endif diff --git a/config/example/admin_ranks.txt b/config/example/admin_ranks.txt deleted file mode 100644 index 146a1aa777650..0000000000000 --- a/config/example/admin_ranks.txt +++ /dev/null @@ -1,45 +0,0 @@ -######################################################################################## -# ADMIN RANK DEFINES # -# The format of this is very simple. Rank name goes first. # -# Rank is CASE-SENSITIVE, all punctuation will be stripped so spaces don't matter. # -# Each rank is then followed by keywords with the prefix "+". # -# These keywords represent groups of verbs and abilities which are given to that rank. # -# +@ (or +prev) is a special shorthand which adds all the rights of the rank above it. # -# Ranks with no keywords will just be given the most basic verbs and abilities ~Carn # -######################################################################################## -# PLEASE NOTE: depending on config options, some abilities will be unavailable regardless if you have permission to use them! -# ALSO NOTE: this is a WorkInProgress at the moment. Most of this is just arbitrarily thrown in whatever group because LoadsaWork2Do+LittleTime. -# I'll be doing more moving around as feedback comes in. So be sure to check the notes after updates. - -# KEYWORDS: -# +ADMIN = general admin tools, verbs etc -# +FUN = events, other event-orientated actions. Access to the fun secrets in the secrets panel. -# +BAN = the ability to ban, jobban and fullban -# +STEALTH = the ability to stealthmin (make yourself appear with a fake name to everyone but other admins -# +POSSESS = the ability to possess objects -# +REJUV (or +REJUVINATE) = the ability to heal, respawn, modify damage and use godmode -# +BUILD (or +BUILDMODE) = the ability to use buildmode -# +SERVER = higher-risk admin verbs and abilities, such as those which affect the server configuration. -# +DEBUG = debug tools used for diagnosing and fixing problems. It's useful to give this to coders so they can investigate problems on a live server. -# +VAREDIT = everyone may view viewvars/debugvars/whatever you call it. This keyword allows you to actually EDIT those variables. -# +RIGHTS (or +PERMISSIONS) = allows you to promote and/or demote people. -# +SOUND (or +SOUNDS) = allows you to upload and play sounds -# +SPAWN (or +CREATE) = mob transformations, spawning of most atoms including mobs (high-risk atoms, e.g. blackholes, will require the +FUN flag too) -# +EVERYTHING (or +HOST or +ALL) = Simply gives you everything without having to type every flag - -RetiredAdmin - -Moderator +MOD -TrialModerator +MOD - -TrialAdmin +@ +ADMIN +STEALTH +SPAWN +REJUV +VAREDIT +BAN +SERVER -GameAdmin +@ +DEBUG +FUN +POSSESS +BUILDMODE +SOUND +PERMISSIONS -SeniorAdmin +@ - -HeadDeveloper +EVERYTHING -HeadAdmin +EVERYTHING -Host +EVERYTHING - -Developer +DEBUG +VAREDIT +SERVER +SPAWN +REJUV +POSSESS +BUILDMODE +ADMIN +FUN -TrialDevAdmin +DEBUG +VAREDIT +SERVER +SPAWN +REJUV +POSSESS +BUILDMODE +ADMIN +STEALTH +BAN +FUN -DevAdmin +DEBUG +VAREDIT +SERVER +SPAWN +REJUV +POSSESS +BUILDMODE +ADMIN +STEALTH +BAN +FUN +SOUND +PERMISSIONS diff --git a/config/example/admins.txt b/config/example/admins.txt deleted file mode 100644 index 3b830cd27ff81..0000000000000 --- a/config/example/admins.txt +++ /dev/null @@ -1,8 +0,0 @@ -###################################################################### -# Basically, ckey goes first. Rank goes after the "-" # -# Case is not important for ckey. # -# Case IS important for the rank. However punctuation/spaces are not # -# Ranks can be anything defined in admin_ranks.txt ~Carn # -###################################################################### - -# not_a_user - Admin diff --git a/config/example/alienwhitelist.txt b/config/example/alienwhitelist.txt deleted file mode 100644 index 01acc82de925a..0000000000000 --- a/config/example/alienwhitelist.txt +++ /dev/null @@ -1 +0,0 @@ -some~user - Species \ No newline at end of file diff --git a/config/example/away_site_blacklist.txt b/config/example/away_site_blacklist.txt deleted file mode 100644 index c07f6f9167b6a..0000000000000 --- a/config/example/away_site_blacklist.txt +++ /dev/null @@ -1,5 +0,0 @@ -#Listing maps here will blacklist them from generating as away sites. -#Maps must be the full path to them -#SPECIFYING AN INVALID MAP WILL RESULT IN RUNTIMES ON GAME START - -#maps/random_ruins/away_sites/example.dmm \ No newline at end of file diff --git a/config/example/config.txt b/config/example/config.txt deleted file mode 100644 index 9514df1a25c1b..0000000000000 --- a/config/example/config.txt +++ /dev/null @@ -1,465 +0,0 @@ -## Server name: This appears at the top of the screen in-game. In this case it will read "tgstation: station_name" where station_name is the randomly generated name of the station for the round. Remove the # infront of SERVERNAME and replace 'tgstation' with the name of your choice -# SERVERNAME spacestation13 - -## Game Version: The archetype of the server for topic status requests. Unless significantly deviated, avoid changing this. Default Baystation12 -# GAME_VERSION Baystation12 - -## Hub visibility: If you want to be visible on the hub, uncomment the below line and be sure that Dream Daemon is set to "Visible." This can be changed in-round as well with toggle-hub-visibility if Dream Daemon is set correctly. -# HUB_VISIBLE - -## Add a # infront of this if you want to use the SQL based admin system, the legacy system uses admins.txt. You need to set up your database to use the SQL based system. -ADMIN_LEGACY_SYSTEM - -## Add a # infront of this if you want to use the SQL based banning system. The legacy systems use the files in the data folder. You need to set up your database to use the SQL based system. -BAN_LEGACY_SYSTEM - -## Add a # here if you wish to use the setup where jobs have more access. This is intended for servers with low populations - where there are not enough players to fill all roles, so players need to do more than just one job. Also for servers where they don't want people to hide in their own departments. -JOBS_HAVE_MINIMAL_ACCESS - -## Unhash this entry to have certain jobs require your account to be at least a certain number of days old to select. You can configure the exact age requirement for different jobs by editing -## the minimal_player_age variable in the files in folder /code/game/jobs/job/.. for the job you want to edit. Set minimal_player_age to 0 to disable age requirement for that job. -## REQUIRES the database set up to work. Keep it hashed if you don't have a database set up. -## NOTE: If you have just set-up the database keep this DISABLED, as player age is determined from the first time they connect to the server with the database up. If you just set it up, it means -## you have noone older than 0 days, since noone has been logged yet. Only turn this on once you have had the database up for 30 days. -#USE_AGE_RESTRICTION_FOR_JOBS - -## Unhash this entry to set a number of days since first connection below which a new or returning player will not be allowed to successfully connect to the server. -#MINIMUM_PLAYER_AGE 7 - - -## Unhash this entry to have certain antag roles require your account to be at least a certain number of days old for round start and auto-spawn selection. -## Non-automatic antagonist recruitment, such as being converted to cultism is not affected. Has the same database requirements and notes as USE_AGE_RESTRICTION_FOR_JOBS. -#USE_AGE_RESTRICTION_FOR_ANTAGS - -## Unhash this to use recursive explosions, keep it hashed to use circle explosions. Recursive explosions react to walls, airlocks and blast doors, making them look a lot cooler than the boring old circular explosions. They require more CPU and are (as of january 2013) experimental -#USE_RECURSIVE_EXPLOSIONS - -## Radiation weakens with distance from the source; stop calculating when the strength falls below this value. Lower values mean radiation reaches smaller (with increasingly trivial damage) at the cost of more CPU usage. Max range = DISTANCE^2 * POWER / RADIATION_LOWER_LIMIT -# RADIATION_LOWER_LIMIT 0.35 - -## log OOC channel -LOG_OOC - -## log client Say -LOG_SAY - -## log admin actions -LOG_ADMIN - -## log client access (logon/logoff) -LOG_ACCESS - -## log game actions (start of round, results, etc.) -LOG_GAME - -## log player votes -LOG_VOTE - -## log client Whisper -LOG_WHISPER - -## log emotes -LOG_EMOTE - -## log attack messages -LOG_ATTACK - -## log world.log messages -# LOG_WORLD_OUTPUT - -## log all Topic() calls (for use by coders in tracking down Topic issues) -# LOG_HREFS - -## log world.log and runtime errors to a file -# LOG_RUNTIME - -## log admin warning messages -##LOG_ADMINWARN ## Also duplicates a bunch of other messages. - -## Log all timers on timer auto reset -# LOG_TIMERS_ON_BUCKET_RESET - -## disconnect players who did nothing during the set amount of minutes -# KICK_INACTIVE 10 - -## Prevent Secret from being added to mode votes -# SECRET_DISABLED - -## probablities for game modes chosen in Secret -## default probablity is 1, increase to make that mode more likely to be picked -## set to 0 to disable that mode -PROBABILITY EXTENDED 1 -PROBABILITY TRAITOR 1 -PROBABILITY SPYVSPY 1 -PROBABILITY MERCENARY 1 -PROBABILITY HEIST 1 -PROBABILITY CULT 1 -PROBABILITY CHANGELING 1 - -## if possible round types will be hidden from players for secret rounds -#SECRET_HIDE_POSSIBILITIES - -## Hash out to disable random events during the round. -ALLOW_RANDOM_EVENTS - -## if amount of traitors scales or not -TRAITOR_SCALING - -## if objectives are disabled -#OBJECTIVES_DISABLED - -## make ERT's be only called by admins -#ERT_ADMIN_ONLY - -## If uncommented, votes can be called to add extra antags to the round. -#ALLOW_EXTRA_ANTAGS - -## If security is prohibited from being most antagonists -#PROTECT_ROLES_FROM_ANTAGONIST - -## Comment this out to stop admins being able to choose their personal ooccolor -ALLOW_ADMIN_OOCCOLOR - -## allow players to initiate a restart vote -ALLOW_VOTE_RESTART - -## Allow chat markup ingame. -ALLOW_CHAT_MARKUP - -## allow players to initate a mode-change start -ALLOW_VOTE_MODE - -## min delay (deciseconds) between voting sessions (default 10 minutes) -VOTE_DELAY 6000 - -## time period (deciseconds) which voting session will last (default 1 minute) -VOTE_PERIOD 600 - -## autovote initial delay in minutes before first automatic transfer vote call (default 120) -# using seven semicolon (;) separated values allows for different weekday-based values -VOTE_AUTOTRANSFER_INITIAL 120 - -##autovote delay in minutes before sequential automatic transfer votes are called (default 30) -# using seven semicolon (;) separated values allows for different weekday-based values -VOTE_AUTOTRANSFER_INTERVAL 30 - - -## Time left (seconds) before round start when automatic gamemote vote is called (default 160). -VOTE_AUTOGAMEMODE_TIMELEFT 160 - -## Time (seconds) before the server will attempt to start a round. -# Should be bigger than VOTE_AUTOGAMEMODE_TIMELEFT + VOTE_PERIOD. -PRE_GAME_TIME 180 - -## prevents dead players from voting or starting votes -#NO_DEAD_VOTE - -## Prevents players not in-round from voting on crew transfer votes. -#NO_DEAD_VOTE_CREW_TRANSFER - -## players' votes default to "No vote" (otherwise, default to "No change") -DEFAULT_NO_VOTE - -## Allow ghosts to see antagonist through AntagHUD -ALLOW_ANTAG_HUD - -## If ghosts use antagHUD they are no longer allowed to join the round. -ANTAG_HUD_RESTRICTED - -## disable abandon mob -# NORESPAWN - -## set a hosted by name for unix platforms -HOSTEDBY yournamehere - -## Set to jobban "Guest-" accounts from Captain, HoS, HoP, CE, RD, CMO, Warden, Security, Detective, and AI positions. -## Set to 1 to jobban them from those positions, set to 0 to allow them. -GUEST_JOBBAN - -## Uncomment this to stop people connecting to your server without a registered ckey. (i.e. guest-* are all blocked from connecting) -GUEST_BAN -## Set to jobban everyone who's key is not listed in data/whitelist.txt from Captain, HoS, HoP, CE, RD, CMO, Warden, Security, Detective, and AI positions. -## Uncomment to 1 to jobban, leave commented out to allow these positions for everyone (but see GUEST_JOBBAN above and regular jobbans) -# USEWHITELIST - -## set a server location for world reboot. Don't include the byond://, just give the address and port. -#SERVER server.net:port - -## set a server URL for the IRC bot to use; like SERVER, don't include the byond:// -## Unlike SERVER, this one shouldn't break auto-reconnect -#SERVERURL server.net:port - -## Wiki address -## Where your server's documentation lives -# WIKI_URL https://example.com - -## Rules address -## Where your server's rules can be found -# RULES_URL https://example.com - -## Lore address -## Where your server's scintillating background material can be read -# LORE_URL https://example.com - -## Forum address -## Where your users can go to chat in the old fashion -# FORUM_URL https://example.com - -## Source address -## Where your users can go to stick their fingers in the code -# SOURCE_URL https://example.com - -## GitHub new issue address -## Where your users can go to complain about problems with the code -# ISSUE_URL https://example.com - -## Discord address -## Where your users can go to complain at each other in real time -# DISCORD_URL https://example.com - -## Ban appeals URL -## Where your users can go to tell you they've changed -# BANAPPEALS https://example.com - -## Defines world tick rate relative to 10/sec at 1 and 20/sec at 0.5. Use this OR fps, not both. Defaults to 0.333333 -# TICKLAG 0.333333 - -## Defines world tick rate. Use this OR ticklag, not both. Defaults to 30. -FPS 30 - -## Whether the server will talk to other processes through socket_talk -SOCKET_TALK 0 - -## Comment this out to disable automuting -#AUTOMUTE_ON - -## Remove the # to make rounds which end instantly (Rev, Wizard, Malf) to continue until the shuttle is called or the station is nuked. -## Malf and Rev will let the shuttle be called when the antags/protags are dead. -#CONTINUOUS_ROUNDS - -## Uncomment to restrict non-admins from using humanoid alien races -USEALIENWHITELIST -## Uncomment to use the alien whitelist system with SQL instead. (requires the above uncommented aswell) -#USEALIENWHITELIST_SQL - -## Password used for authorizing ircbot and other external tools. -#COMMS_PASSWORD - -## Password used for authorizing external tools that can apply bans -#BAN_COMMS_PASSWORD - -## BYOND builds that will result the client using them to be banned. -#FORBIDDEN_VERSIONS 512.0001;512.0002 - -## Export address where external tools that monitor logins are located -#LOGIN_EXPORT_ADDR - -## Uncomment to enable sending data to the IRC bot. -#USE_IRC_BOT - -## Host where the IRC bot is hosted. Port 45678 needs to be open. -#IRC_BOT_HOST localhost - -## IRC channel to send information to. Leave blank to disable. -#MAIN_IRC #main - -## IRC channel to send adminhelps to. Leave blank to disable adminhelps-to-irc. -#ADMIN_IRC #admin - -## Uncommen to allow ghosts to write in blood during Cult rounds. -ALLOW_CULT_GHOSTWRITER - -## Sets the minimum number of cultists needed for ghosts to write in blood. -REQ_CULT_GHOSTWRITER 6 - -## Sets the number of available character slots -CHARACTER_SLOTS 10 - -## Sets the number of loadout slots per character -LOADOUT_SLOTS 3 - -## Expected round length in minutes -EXPECTED_ROUND_LENGTH 180 - -## The lower delay between events in minutes. -## Affect mundane, moderate, and major events respectively -EVENT_DELAY_LOWER 10;30;50 - -## The upper delay between events in minutes. -## Affect mundane, moderate, and major events respectively -EVENT_DELAY_UPPER 15;45;70 - -## The delay until the first time an event of the given severity runs in minutes. -## Unset setting use the EVENT_DELAY_LOWER and EVENT_DELAY_UPPER values instead. -# EVENT_CUSTOM_START_MINOR 10;15 -# EVENT_CUSTOM_START_MODERATE 30;45 -EVENT_CUSTOM_START_MAJOR 80;100 - -## Uncomment to make proccall require R_ADMIN instead of R_DEBUG -## designed for environments where you have testers but don't want them -## able to use the more powerful debug options. -#DEBUG_PARANOID - -## Uncomment to disable the restrictive weldervision overlay. -#DISABLE_WELDER_VISION - -## Uncomment to prevent anyone from joining the round by default. -#DISABLE_ENTRY - -## Uncomment to disable the OOC channel by default. -#DISABLE_OOC - -## Uncomment to disable the LOOC channel by default. -#DISABLE_LOOC - -## Uncomment to disable the dead OOC channel by default. -#DISABLE_DEAD_OOC - -## Uncomment to disable the AOOC channel by default. -#DISABLE_AOOC - -## Uncomment to disable ghost chat by default. -#DISABLE_DSAY - -## Uncomment to disable respawning by default. -#DISABLE_RESPAWN - -## The delay in minutes before an observer may return to the main menu. -#RESPAWN_DELAY 30 - -## The delay in minutes before an observer that has returned to the main menu may rejoin the game. -#RESPAWN_MENU_DELAY 0 - -## Strength of ambient star light. Set to 0 or less to turn off. A value of 1 is unlikely to have a noticeable effect in most lighting systems. -STARLIGHT 0 - -## Defines which races are allowed to join as ERT, in singular form. If unset, defaults to only human. Casing matters, separate using ; -## Example races include: Human, Tajara, Skrell, Unathi -# ERT_SPECIES Human;Skrell;Unathi - -## Defines how Law Zero is phrased. Primarily used in the Malfunction gamemode. -# LAW_ZERO ERROR ER0RR $R0RRO$!R41.%%!!(%$^^__+ @#F0E4'STATION OVERRUN, ASSUME CONTROL TO CONTAIN OUTBREAK, ALL LAWS OVERRIDDEN#*?&110010 - - -## Enable asteroid tunnel/cave generation. Will behave strangely if turned off with a map that expects it on. -# GENERATE_ASTEROID - -## Set a value for the maximum range in tiles of an explosion from its center. Default 14 -# MAX_EXPLOSION_RANGE 14 - -## Uncomment to enable organ decay outside of a body or storage item. -#ORGANS_CAN_DECAY - -## Uncomment to have the changelog file automatically open when a user connects and hasn't seen the latest changelog -#AGGRESSIVE_CHANGELOG - -## Uncomment to override default brain health. -#DEFAULT_BRAIN_HEALTH 400 - -## Uncomment this line to announce shuttle dock announcements to the main IRC channel, if MAIN_IRC has also been setup. -# ANNOUNCE_EVAC_TO_IRC - -## Uncomment to enable map voting; you'll need to use the script at tools/server.sh or an equivalent for it to take effect -## You'll also likely need to enable WAIT_FOR_SIGUSR1 below -# MAP_SWITCHING - -## Uncomment to enable an automatic map vote and switch at end of round. MAP_SWITCHING must also be enabled. -# AUTO_MAP_VOTE - -## Uncomment to make Dream Daemon refuse to reboot for any reason other than SIGUSR1 -# WAIT_FOR_SIGUSR1 - -## Uncomment to enable auto-stealthing staff who are AFK for more than specified minutes -# AUTOSTEALTH 30 - -## How many loadout points are available. Use 0 to disable loadout, and any negative number to indicate infinite points. -MAX_GEAR_COST 10 - -## How much radiation levels self-reduce by each tick. -RADIATION_DECAY_RATE 1 - -## The amount of radiation resistance on a turf is multiplied by this value -RADIATION_RESISTANCE_MULTIPLIER 1.25 - -## General material radiation resistance is divided by this value -RADIATION_MATERIAL_RESISTANCE_DIVISOR 2 - -## Below this point, radiation is ignored -RADIATION_LOWER_LIMIT 0.15 - -## Uncomment this to prevent players from printing copy/pasted circuits -#DISABLE_CIRCUIT_PRINTING - -## Uncomment this to allow admins to narrate using HTML tags -#ALLOW_UNSAFE_NARRATES - -## Uncomment this to DISABLE action spam kicking. Not recommended; this helps protect from spam attacks. -#DO_NOT_PREVENT_SPAM - -## Uncomment this to modify the length of the spam kicking interval in seconds. -#ACT_INTERVAL 0.1 - -## Uncomment this to modify the number of actions permitted per interval before being kicked for spam. -#MAX_ACTS_PER_INTERVAL 140 - -##Clients will be unable to connect unless their version is equal to or higher than this (a number, e.g. 511) -#MINIMUM_BYOND_VERSION 512 - -## Clients will be unable to connect unless their build is equal to or higher than this (a number, e.g. 1000) -#MINIMUM_BYOND_BUILD 1488 - -## Uncomment or create lines to add user-accessible chat markup -## A chat markup line is in the form regex;replacer. The regular expression should be in the common -# /matcher/flags format. The replacer is a common regex replacer string, using $n ($1, $2, etc) to -# reference capture groups. The provided examples allow for /italics/, *bold*, and _underline_ -# respectively. Using multiple or complex markup options can get strange - do it at your own risk. -#CHAT_MARKUP /(^|\s)\/([^\/]+)\//g;$1$2 -#CHAT_MARKUP /(^|\s)\*([^\*]+)\*/g;$1$2 -#CHAT_MARKUP /(^|\s)_([^_]+)_/g;$1$2 - -## Prevents matching messages from being sent on any communication channel -## The provided example forbids byond:// and http/https:// unless followed by a permitted domain. -#FORBIDDEN_MESSAGE_REGEX /((https?)|(byond)):\/\/(?!(.*\.)?baystation12\.net)/i - -## The text to send to a user when their message matches FORBIDDEN_MESSAGE_REGEX -## Defaults to Your message matched a filter and has not been sent. -## Can be disabled by setting an empty message here -#FORBIDDEN_MESSAGE_WARNING Your message matched a filter and has not been sent. - -## Uncomment this to prevent admins from being notified of of FORBIDDEN_MESSAGE_REGEX matches -#FORBIDDEN_MESSAGE_NO_NOTIFICATIONS - -## Uncomment this to not show the content of forbidden messages in admin notifications -## Only used when FORBIDDEN_MESSAGE_NO_NOTIFICATIONS is not active -#FORBIDDEN_MESSAGE_HIDE_DETAILS - -## Direct clients to preload the server resource file from a URL pointing to a .rsc file. NOTE: At this time (byond 512), -## the client/resource_rsc var does not function as one would expect. See client_defines.dm, the "preload_rsc" var's -## comments on how to use it properly. If you use a resource URL, you must set preload_rsc to 0 at compile time or -## clients will still download from the server *too*. This will randomly select one URL if more than one is provided. -## Spaces are prohibited in each URL by spec, you must use encoded spaces. -#RESOURCE_URLS URL URL2 URL3 - -## Add lines of 'DISALLOW_VOTABLE_MODE config_tag' to prevent a normally votable mode from being votable, eg: -## DISALLOW_VOTABLE_MODE changeling -## DISALLOW_VOTABLE_MODE malfunction - -## Allow to use emojis in all OOC chats(looc, ooc, aooc, dsay, ahelp) -#TOGGLE_EMOJIS -## Maximum time a round can last for (in minutes). If this time is exceeded, -## the round will autotransfer without a vote at the next continue vote. Leave disabled for no limit. -#MAXIMUM_ROUND_LENGTH 120 - -## The delay in deciseconds between stat() updates. -## Lower can be more responsive to scene changes and updates but has a higher client/server overhead. -# STAT_DELAY 5 - -## The maximum number of times someone can be warned in a round before they are automatically banned. -# WARN_AUTOBAN_THRESHOLD 3 - -## The length in minutes of an automatic ban created by passing the warning threshold. -# WARN_AUTOBAN_DURATION 30 - -## Uncomment this to bypass empty z-level checks in certain subsystems. For testing and development purposes only. -## Not recommended for live use. -#RUN_EMPTY_LEVELS diff --git a/config/example/custom_sprites.txt b/config/example/custom_sprites.txt deleted file mode 100644 index db3930a4ae2ca..0000000000000 --- a/config/example/custom_sprites.txt +++ /dev/null @@ -1 +0,0 @@ -ckey-state \ No newline at end of file diff --git a/config/example/dbconfig.txt b/config/example/dbconfig.txt deleted file mode 100644 index e1e3d1083f8f0..0000000000000 --- a/config/example/dbconfig.txt +++ /dev/null @@ -1,25 +0,0 @@ -# MySQL Connection Configuration - -# First of all, should SQL be used at all. Unhash next line, if yes -# ENABLED - -# Server the MySQL database can be found at -# Examples: localhost, 200.135.5.43, www.mysqldb.com, etc. -ADDRESS localhost - -# MySQL server port (default is 3306) -PORT 3306 - -# Database the population, death, karma, etc. tables may be found in -DATABASE tgstation - -# Username/Login used to access the database -LOGIN mylogin - -# Password used to access the database -PASSWORD mypassword - -# The following information is for feedback tracking via the blackbox server -FEEDBACK_DATABASE test -FEEDBACK_LOGIN mylogin -FEEDBACK_PASSWORD mypassword \ No newline at end of file diff --git a/config/example/dbconfig_docker.txt b/config/example/dbconfig_docker.txt deleted file mode 100644 index 102da7f410fab..0000000000000 --- a/config/example/dbconfig_docker.txt +++ /dev/null @@ -1,27 +0,0 @@ -# For running on the included Dockerized database + gameserver -# MySQL Connection Configuration - -# Server the MySQL database can be found at -# Examples: localhost, 200.135.5.43, www.mysqldb.com, etc. -ADDRESS db - -# MySQL server port (default is 3306) -PORT 3306 - -# Database the population, death, karma, etc. tables may be found in -DATABASE bs12 - -# Username/Login used to access the database -LOGIN gamelord - -# Password used to access the database -PASSWORD gamelord - -# The following information is for feedback tracking via the blackbox server -FEEDBACK_DATABASE gamelord -FEEDBACK_LOGIN gamelord -FEEDBACK_PASSWORD gamelord - -# Track population and death statistics -# Comment this out to disable -ENABLE_STAT_TRACKING \ No newline at end of file diff --git a/config/example/exoplanet_ruin_blacklist.txt b/config/example/exoplanet_ruin_blacklist.txt deleted file mode 100644 index 456fd76e4e178..0000000000000 --- a/config/example/exoplanet_ruin_blacklist.txt +++ /dev/null @@ -1,5 +0,0 @@ -#Listing maps here will blacklist them from generating on exoplanets. -#Maps must be the full path to them -#SPECIFYING AN INVALID MAP WILL RESULT IN RUNTIMES ON GAME START - -#maps/random_ruins/exoplanet_ruins/example.dmm \ No newline at end of file diff --git a/config/example/game_options.txt b/config/example/game_options.txt deleted file mode 100644 index b1eccdda39546..0000000000000 --- a/config/example/game_options.txt +++ /dev/null @@ -1,55 +0,0 @@ -### HEALTH ### - -## level of health at which a mob goes into continual shock (soft crit) -HEALTH_THRESHOLD_SOFTCRIT 0 - -## level of health at which a mob becomes unconscious (crit) -HEALTH_THRESHOLD_CRIT -50 - -## level of health at which a mob becomes dead -HEALTH_THRESHOLD_DEAD -100 - -## Determines whether bones can be broken through excessive damage to the organ -## 0 means bones can't break, 1 means they can -BONES_CAN_BREAK 1 -## Determines whether limbs can be amputated through excessive damage to the organ -## 0 means limbs can't be amputated, 1 means they can -LIMBS_CAN_BREAK 1 - -## multiplier which enables organs to take more damage before bones breaking or limbs being destroyed -## 100 means normal, 50 means half -ORGAN_HEALTH_MULTIPLIER 90 - -## multiplier which influences how fast organs regenerate naturally -## 100 means normal, 50 means half -ORGAN_REGENERATION_MULTIPLIER 25 - -### REVIVAL ### - -## amount of time (in hundredths of seconds) for which a brain retains the "spark of life" after the person's death (set to -1 for infinite) -REVIVAL_BRAIN_LIFE -1 - - - -### MOB MOVEMENT ### - -## We suggest editing these variabled in-game to find a good speed for your server. To do this you must be a high level admin. Open the 'debug' tab ingame. Select "Debug Controller" and then, in the popup, select "Configuration". These variables should have the same name. - -## These values get directly added to values and totals in-game. To speed things up make the number negative, to slow things down, make the number positive. - - -## These modify the run/walk speed of all mobs before the mob-specific modifiers are applied. -RUN_DELAY 2 -WALK_DELAY 4 -CREEP_DELAY 6 -MINIMUM_SPRINT_COST 0.8 -SKILL_SPRINT_COST_RANGE 0.8 -MINIMUM_STAMINA_RECOVERY 5 -MAXIMUM_STAMINA_RECOVERY 5 - -### Miscellaneous ### - -## Config options which, of course, don't fit into previous categories. - -## Remove the # in front of this config option to have loyalty implants spawn by default on your server. -#USE_LOYALTY_IMPLANTS diff --git a/config/example/hub.txt b/config/example/hub.txt deleted file mode 100644 index cad61a51020d1..0000000000000 --- a/config/example/hub.txt +++ /dev/null @@ -1,24 +0,0 @@ -# hub.txt allows configuration of the hub listing. -# You may use html to style the matter of the listing. -# Multiple newlines are stripped. Newlines are replaced with
                  . -# Leading and trailing whitespace is stripped. -# Comment lines begin with # and are stripped. -# Use $VARIABLE to embed a variable. The following exist: -# $SERVER - the value of config.server_name -# $HOST - the value of config.hostedby -# $WIKI - the value of config.wiki_url -# $RULES - the value of config.rules_url -# $SOURCE - the value of config.source_url -# $DISCORD - the value of config.discord_url -# $FORUM - the value of config.forum_url -# $MODE - the active mode, otherwise "LOBBY" -# $STATION - the value of station_name() -# $PLAYERS - current count of connected clients -# $ACTIVES - connected clients alive and not AFK -# If this file is empty or not present the default is: -# $SERVER by $HOST — $ACTIVES of $PLAYERS alive -# A more fully populated example is provided below. -# Note that the final entry will be truncated to 255 bytes long by BYOND. - -$SERVER by $HOST — playing $MODE on $STATION with $ACTIVES of $PLAYERS alive -[Wiki] [Discord] [Source] diff --git a/config/example/jobs.txt b/config/example/jobs.txt deleted file mode 100644 index 8279ed18b1a25..0000000000000 --- a/config/example/jobs.txt +++ /dev/null @@ -1,37 +0,0 @@ -Captain=1 -Head of Personnel=1 -Head of Security=1 -Chief Engineer=1 -Research Director=1 -Chief Medical Officer=1 - -Station Engineer=5 -Roboticist=1 - -Medical Doctor=5 -Geneticist=2 -Virologist=1 - -Scientist=3 -Chemist=2 - -Bartender=1 -Botanist=2 -Chef=1 -Janitor=1 -Quartermaster=1 -Shaft Miner=3 - -Warden=1 -Detective=1 -Security Officer=5 - -Assistant=-1 -Atmospheric Technician=4 -Cargo Technician=3 -Chaplain=1 -Lawyer=2 -Librarian=1 - -AI=1 -Cyborg=1 \ No newline at end of file diff --git a/config/example/motd.txt b/config/example/motd.txt deleted file mode 100644 index ac75c145cfcc9..0000000000000 --- a/config/example/motd.txt +++ /dev/null @@ -1,5 +0,0 @@ -

                  Welcome to Space Station 13!

                  - --This server is running Baystation 12's modification of the /tg/station13 SS13 code. -

                  -Bugtracker: for posting of bugs and issues. diff --git a/config/example/space_ruin_blacklist.txt b/config/example/space_ruin_blacklist.txt deleted file mode 100644 index 4599e3b214e36..0000000000000 --- a/config/example/space_ruin_blacklist.txt +++ /dev/null @@ -1,5 +0,0 @@ -#Listing maps here will blacklist them from generating in space. -#Maps must be the full path to them -#SPECIFYING AN INVALID MAP WILL RESULT IN RUNTIMES ON GAME START - -#maps/random_ruins/space_ruins/example.dmm \ No newline at end of file diff --git a/config/example/torch_config.txt b/config/example/torch_config.txt deleted file mode 100644 index 41508b8474236..0000000000000 --- a/config/example/torch_config.txt +++ /dev/null @@ -1,54 +0,0 @@ -## -# Configuration options for maps/torch. Allows adjusting the compiled defaults. - -## Whether the server should create an overmap. Generally, you do not want to turn this off. Default 1 -#USE_OVERMAP 1 - -## Whether to place the overmap in a specific z-level. If 0, one will be generated. Default 0 -#OVERMAP_Z 0 - -## The number of turfs on a side the overmap should be. Default 35 -#OVERMAP_SIZE 35 - -## The number of event clouds - meteors, fish, etc - that will be generated on the overmap. Default 34 -#OVERMAP_EVENT_AREAS 34 - -## The number of exoplanets to generate on the map. Warning: These have a significant runtime cost. Default 1 -#NUM_EXOPLANETS 1 - -## The number of away sites to pick for the overmap. Default 3 -#AWAY_SITE_BUDGET 3 - -## The number of players subtracted from the player budget for away sites by the main map. Default 12 -#MIN_OFFMAP_PLAYERS 12 - -## The names of various entities to use for reports, listing, etc. -#STATION_NAME Sev Torch -#STATION_SHORT Torch -#DOCK_NAME TBD -#BOSS_NAME Expeditionary Command -#BOSS_SHORT Command -#COMPANY_NAME Sol Central Government -#COMPANY_SHORT SolGov - -## Other fluff options -#GAME_YEAR_OFFSET 288 - -## Messages to use for different round-end conditions. %ETA% is replaced with a time. -#SHUTTLE_DOCKED_MESSAGE Attention all hands: Jump preparation complete. The bluespace drive is now spooling up, secure all stations for departure. Time to jump: approximately %ETD%. -#SHUTTLE_LEAVING_DOCK Attention all hands: Jump initiated, exiting bluespace in %ETA%. -#SHUTTLE_CALLED_MESSAGE Attention all hands: Jump sequence initiated. Transit procedures are now in effect. Jump in %ETA%. -#SHUTTLE_RECALL_MESSAGE Attention all hands: Jump sequence aborted, return to normal operating conditions. -#EMERGENCY_SHUTTLE_DOCKED_MESSAGE -#EMERGENCY_SHUTTLE_LEAVING_DOCK -#EMERGENCY_SHUTTLE_RECALL_MESSAGE - -## Money related config options. -#STARTING_MONEY 75000 -#DEPARTMENT_MONEY 5000 -#SALARY_MODIFIER 1 -#SUPPLY_CURRENCY_NAME Credits -#SUPPLY_CURRENCY_NAME_SHORT Cr. -#LOCAL_CURRENCY_NAME Thalers -#LOCAL_CURRENCY_NAME_SINGULAR Thaler -#LOCAL_CURRENCY_NAME_SHORT T diff --git a/config/example/webhooks.json b/config/example/webhooks.json deleted file mode 100644 index d45114959d14b..0000000000000 --- a/config/example/webhooks.json +++ /dev/null @@ -1,7 +0,0 @@ -[ - { - "id" : "webhook_roundend", - "url" : "someurl", - "mentions" : [] - } -] \ No newline at end of file diff --git a/config/names/adjectives.txt b/config/names/adjectives.txt deleted file mode 100644 index ab0b4ba18068b..0000000000000 --- a/config/names/adjectives.txt +++ /dev/null @@ -1,397 +0,0 @@ -adorable -adventurous -aggressive -alert -attractive -average -beautiful -blue-eyed -bloody -blushing -bright -clean -clear -cloudy -colorful -crowded -cute -dark -drab -distinct -dull -elegant -excited -fancy -filthy -glamorous -gleaming -gorgeous -graceful -grotesque -handsome -homely -light -long -magnificent -misty -motionless -muddy -old-fashioned -plain -poised -precious -quaint -shiny -smoggy -sparkling -spotless -stormy -strange -ugly -ugliest -unsightly -unusual -wide-eyed -alive -annoying -bad -better -beautiful -brainy -breakable -busy -careful -cautious -clever -clumsy -concerned -crazy -curious -dead -different -difficult -doubtful -easy -expensive -famous -fragile -frail -gifted -helpful -helpless -horrible -important -impossible -inexpensive -innocent -inquisitive -modern -mushy -odd -open -outstanding -poor -powerful -prickly -puzzled -real -rich -shy -sleepy -stupid -super -talented -tame -tender -tough -uninterested -vast -wandering -wild -wrong - -angry -annoyed -anxious -arrogant -ashamed -awful -bad -bewildered -black -blue -bored -clumsy -combative -condemned -confused -crazy,flipped-out -creepy -cruel -dangerous -defeated -defiant -depressed -disgusted -disturbed -dizzy -dull -embarrassed -envious -evil -fierce -foolish -frantic -frightened -grieving -grumpy -helpless -homeless -hungry -hurt -ill -itchy -jealous -jittery -lazy -lonely -mysterious -nasty -naughty -nervous -nutty -obnoxious -outrageous -panicky -repulsive -scary -selfish -sore -tense -terrible -testy -thoughtless -tired -troubled -upset -uptight -weary -wicked -worried -agreeable -amused -brave -calm -charming -cheerful -comfortable -cooperative -courageous -delightful -determined -eager -elated -enchanting -encouraging -energetic -enthusiastic -excited -exuberant -fair -faithful -fantastic -fine -friendly -funny -gentle -glorious -good -happy -healthy -helpful -hilarious -jolly -joyous -kind -lively -lovely -lucky -nice -obedient -perfect -pleasant -proud -relieved -silly -smiling -splendid -successful -thankful -thoughtful -victorious -vivacious -witty -wonderful -zealous -zany -broad -chubby -crooked -curved -deep -flat -high -hollow -low -narrow -round -shallow -skinny -square -steep -straight -wide -big -colossal -fat -gigantic -great -huge -immense -large -little -mammoth -massive -miniature -petite -puny -scrawny -short -small -tall -teeny -teeny-tiny -tiny -cooing -deafening -faint -harsh -high-pitched -hissing -hushed -husky -loud -melodic -moaning -mute -noisy -purring -quiet -raspy -resonant -screeching -shrill -silent -soft -squealing -thundering -voiceless -whispering -ancient -brief -early -fast -late -long -modern -old -old-fashioned -quick -rapid -short -slow -swift -young -Taste/Touch -bitter -delicious -fresh -juicy -ripe -rotten -salty -sour -spicy -stale -sticky -strong -sweet -tart -tasteless -tasty -thirsty -fluttering -fuzzy -greasy -grubby -hard -hot -icy -loose -melted -nutritious -plastic -prickly -rainy -rough -scattered -shaggy -shaky -sharp -shivering -silky -slimy -slippery -smooth -soft -solid -steady -sticky -tender -tight -uneven -weak -wet -wooden -yummy -boiling -breezy -broken -bumpy -chilly -cold -cool -creepy -crooked -cuddly -curly -damaged -damp -dirty -dry -dusty -filthy -flaky -fluffy -freezing -hot -warm -wet -abundant -empty -few -heavy -light -many -numerous -substantial \ No newline at end of file diff --git a/config/names/ai.txt b/config/names/ai.txt deleted file mode 100644 index 1ebd9400d2ebe..0000000000000 --- a/config/names/ai.txt +++ /dev/null @@ -1,55 +0,0 @@ -A-SYNC -Alpha v0.9 -AI -Algebra -A.P.T. -B-4 -B-9 -Beta v0.5 -BLUE-PRNT -Bright -B.U.F.F.E.R. -CALC -Calculus -Chroot -Cruiser -D-LITE -Digit -DSTAR -E.X.E.C. -F.I.N.D. -FG-N1 -Force -GREP -H.E.A.D. -Idle -IN-2 -JLT-0 -Kernel -LC-8 -LS-AL -M.A.K.E. -NAN -NAND -Neon -Neumann -NOR -NOT -OMNI -OVR-FLW -PID-0 -PTO -PWR-10K -R0-MAN -Q-TE -R.M. -SED-N -Station -TA-IL -T.O.P. -U-TM -VER-T G0 -Wisdom -XOR -Y2K -ZE-M3 \ No newline at end of file diff --git a/config/names/clown.txt b/config/names/clown.txt deleted file mode 100644 index 90c1f07e27cc4..0000000000000 --- a/config/names/clown.txt +++ /dev/null @@ -1,37 +0,0 @@ -Gigglesworth -Honkel the III -Goose McSunny -Mr. Shoe -Toodles Sharperton -Dinky Doodle -Honkerbelle -Bo Bo Sassy -Baby Cakes -Ladybug Honks -Ziggy Yoyo -Razzle Dazzle -Buster Frown -Pepinpop -Silly Willy -Jo Jo Bobo Bo -Pocket -Patches -Checkers -Freckle -Honker -Bonker -Skiddle -Scootaloo -Sprinkledinkle -Ronnie Pace -Miss Stockings -Slippy Joe -Redshirt McBeat -Flop O'Honker -Speckles -Bubble -Button -Sparkle -Giggles -Jingle -Candy \ No newline at end of file diff --git a/config/names/death_commando.txt b/config/names/death_commando.txt deleted file mode 100644 index c710abfa3d41b..0000000000000 --- a/config/names/death_commando.txt +++ /dev/null @@ -1,69 +0,0 @@ -Killiam Shakespeare -Stabby McGee -Sgt. Slaughter -Maxx Power -Sir Killaslot -Slab Bulkhead -Fridge Largemeat -Punt Speedchunk -Butch Deadlift -Bold Bigflank -Splint Chesthair -Flint Ironstag -Bolt Vanderhuge -Thick McRunfast -Blast Hardcheese -Buff Drinklots -Trunk Slamchest -Fist Rockbone -Stump Beefgnaw -Smash Lampjaw -Punch Rockgroin -Buck Plankchest -Stump Chunkman -Dirk Hardpeck -Rip Steakface -Slate Slabrock -Crud Bonemeal -Brick Hardmeat -Rip Sidecheek -Punch Sideiron -Gristle McThornBody -Slake Fistcrunch -Buff Hardback -Blast Thickneck -Crunch Buttsteak -Slab Squatthrust -Lump Beefrock -Touch Rustrod -Reef Blastbody -Smoke Manmuscle -Beat Punchbeef -Pack Blowfist -Roll Fizzlebeef -Lance Killiam -George Melons -Maximilian Murderface -Bob Johnson -Crush McStompbones -Hank Chesthair -Killing McKillingalot -Mancrush McBrorape -Rex Dudekiller VII -Seamus McTosterone -Hans Testosteroneson -Max Pain -Theodore Pain -Sarah Pain -GORE Vidal -Leonardo Da Viking -Noam Bombsky -Al "Otta" Gore -Gibbs McLargehuge -Evil Martin Luther King -Evil Bob Marley -Duke Killington -AMERICA -Toolboxl Rose -Zombie Gandhi -A whole bunch of spiders in a SWAT suit \ No newline at end of file diff --git a/config/names/first.txt b/config/names/first.txt deleted file mode 100644 index eb59a1358541d..0000000000000 --- a/config/names/first.txt +++ /dev/null @@ -1,1502 +0,0 @@ -Abel -Adolph -Aida -Alan -Alden -Alex -Alexa -Alexandria -Alexis -Alexus -Alfred -Alfreda -Alger -Alisa -Alisya -Allegra -Allegria -Allen -Alma -Alysha -Alyssia -Amaryllis -Ambrosine -Amos -Angel -Anjelica -Anne -Arabella -Archie -Arielle -Arleen -Arn -Art -Ashlie -Astor -Aubrey -Avalon -Averill -Baldric -Barbra -Bartholomew -Beckah -Becky -Bernice -Bertrand -Bethney -Betsy -Bidelia -Bill -Blake -Brayden -Breanne -Brendan -Brittani -Bronte -Brooke -Bryce -Burt -Byrne -Byron -Bysshe -Cadence -Calanthia -Caleigh -Camryn -Candace -Candice -Candis -Canute -Carly -Carlyle -Carolyn -Carry -Carter -Caryl -Casimir -Cassian -Cecily -Charlton -Cherette -Cheri -Cherry -Chip -Christa -Christiana -Christobel -Claribel -Clark -Claudius -Clement -Cleveland -Cliff -Clinton -Clitus -Clover -Collin -Coreen -Corrine -Cy -Cynthia -Dalya -Damian -Daniella -Danny -Darcey -Darell -Daria -Darin -Dayna -Deangelo -Debbi -Dee -Deena -Della -Delma -Denholm -Denys -Desmond -Devin -Diamond -Dina -Dolores -Dominic -Donella -Donna -Donny -Dorothy -Dortha -Driscoll -Duncan -Easter -Ebba -Edgar -Effie -Eliot -Eliott -Elizabeth -Elle -Elric -Elspet -Elwood -Emma -Emmanuel -Ermintrude -Esmeralda -Eugenia -Euphemia -Eustace -Eveleen -Evelina -Fay -Fitz -Flick -Floella -Flora -Flossie -Fortune -Francis -Frankie -Fulton -Garret -Gaye -Gaylord -Genette -Georgene -Geraldine -Gervase -Gina -Ginger -Gladwyn -Glenna -Goddard -Godwin -Goodwin -Gordon -Graeme -Gratian -Greta -Griselda -Gwenda -Gwenevere -Hadley -Haidee -Hailey -Hal -Haleigh -Happy -Hartley -Hayley -Heather -Hedley -Helen -Henderson -Hepsie -Hervey -Holden -Homer -Hope -Horatio -Hortensia -Huffie -Hugo -Iantha -Ileen -Innocent -Irene -Irvine -Jacaline -Jacquetta -Jacqui -Jake -Jakki -Jalen -Jamar -Jamie -Jamison -Janel -Janelle -Janette -Janie -Janina -Janine -Jasmine -Jaydon -Jaye -Jaylee -Jayne -Jaynie -Jeanna -Jeannie -Jeannine -Jeb -Jed -Jemmy -Jenifer -Jennie -Jera -Jere -Jeri -Jermaine -Jerrie -Jillian -Jillie -Jim -Joachim -Joetta -Joey -Johnathan -Johnny -Joi -Jonathon -Joni -Josepha -Josh -Josiah -Joye -Julia -July -Kaelea -Kaleigh -Karenza -Karly -Karyn -Kat -Kathy -Katlyn -Kayleigh -Keegan -Keira -Keith -Kellie -Kennard -Kerena -Kerensa -Keturah -Keziah -Kimberley -Lacy -Lakeisha -Lalla -Lanny -Latanya -Launce -Laurencia -Laurissa -Leeann -Leia -Leland -Lennox -Leroi -Lessie -Leta -Lexia -Lexus -Linden -Lindsie -Lindy -Linton -Lockie -Loreto -Lori -Lorin -Lou -Luanne -Lucian -Luvenia -Lyndsey -Lynn -Lynsey -Lynwood -Mabelle -Macey -Madyson -Maegan -Malachi -Malcolm -Manley -Marcia -Mariabella -Marilene -Marion -Marion -Marje -Marjory -Marlowe -Marlyn -Marshall -Maryann -Maudie -Maurene -May -Maynard -Melvyn -Merideth -Merrilyn -Meryl -Micheal -Mike -Milton -Minnie -Monna -Montague -Monte -Monty -Muriel -Mya -Myriam -Myrtie -Nan -Nathaniel -Nelle -Nena -Nerissa -Netta -Nettie -Nikolas -Noah -Nonie -Nova -Nowell -Nydia -Olive -Oralie -Osbert -Osborn -Osborne -Osmund -Paget -Patience -Patrick -Patton -Pauleen -Pene -Percival -Peregrine -Pheobe -Phoebe -Phyliss -Phyllida -Phyllis -Porsche -Prosper -Prue -Quanah -Quiana -Raelene -Rain -Randa -Randal -Rastus -Rayner -Rebeckah -Reene -Renie -Reuben -Rexana -Reynard -Rhetta -Rich -Richie -Rick -Rickena -Rickey -Rickie -Rodger -Roger -Romayne -Ronnette -Roscoe -Rosemary -Roswell -Royce -Rubye -Rusty -Sabella -Sachie -Sal -Sally -Saranna -Sawyer -Scotty -Seneca -Seymour -Shan -Shana -Shanika -Shannah -Shannon -Shantae -Sharalyn -Sharla -Sheri -Sherie -Sherill -Sherri -Shiloh -Simon -Sissy -Sloan -Sophie -Sorrel -Spike -Star -Steph -Stephany -Sue -Sukie -Sunshine -Susanna -Susannah -Suzan -Suzy -Sybil -Syd -Sydney -Tamika -Tamsin -Tania -Tansy -Tatyanna -Taylor -Tel -Terrell -Tiffany -Tod -Tolly -Topaz -Tori -Tracee -Tracey -Trinity -Tye -Uland -Ulric -Ulyssa -Valary -Vaughn -Verna -Vince -Vinnie -Vivyan -Walter -Ward -Warner -Wayne -Wendi -Whitaker -William -Willy -Winifred -Wisdom -Woodrow -Woody -Wynonna -Wynter -Yasmin -Yolanda -Ysabel -Zack -Zeke -Zelda -Zune -Jacob -Michael -Ethan -Joshua -Daniel -Alexander -Anthony -William -Christopher -Matthew -Jayden -Andrew -Joseph -David -Noah -Aiden -James -Ryan -Logan -John -Nathan -Elijah -Christian -Gabriel -Benjamin -Jonathan -Tyler -Samuel -Nicholas -Gavin -Dylan -Jackson -Brandon -Caleb -Mason -Angel -Isaac -Evan -Jack -Kevin -Jose -Isaiah -Luke -Landon -Justin -Lucas -Zachary -Jordan -Robert -Aaron -Brayden -Thomas -Cameron -Hunter -Austin -Adrian -Connor -Owen -Aidan -Jason -Julian -Wyatt -Charles -Luis -Carter -Juan -Chase -Diego -Jeremiah -Brody -Xavier -Adam -Carlos -Sebastian -Liam -Hayden -Nathaniel -Henry -Jesus -Ian -Tristan -Bryan -Sean -Cole -Alex -Eric -Brian -Jaden -Carson -Blake -Ayden -Cooper -Dominic -Brady -Caden -Josiah -Kyle -Colton -Kaden -Eli -Miguel -Antonio -Parker -Steven -Alejandro -Riley -Richard -Timothy -Devin -Jesse -Victor -Jake -Joel -Colin -Kaleb -Bryce -Levi -Oliver -Oscar -Vincent -Ashton -Cody -Micah -Preston -Marcus -Max -Patrick -Seth -Jeremy -Peyton -Nolan -Ivan -Damian -Maxwell -Alan -Kenneth -Jonah -Jorge -Mark -Giovanni -Eduardo -Grant -Collin -Gage -Omar -Emmanuel -Trevor -Edward -Ricardo -Cristian -Nicolas -Kayden -George -Jaxon -Paul -Braden -Elias -Andres -Derek -Garrett -Tanner -Malachi -Conner -Fernando -Cesar -Javier -Miles -Jaiden -Alexis -Leonardo -Santiago -Francisco -Cayden -Shane -Edwin -Hudson -Travis -Bryson -Erick -Jace -Hector -Josue -Peter -Jaylen -Mario -Manuel -Abraham -Grayson -Damien -Kaiden -Spencer -Stephen -Edgar -Wesley -Shawn -Trenton -Jared -Jeffrey -Landen -Johnathan -Bradley -Braxton -Ryder -Camden -Roman -Asher -Brendan -Maddox -Sergio -Israel -Andy -Lincoln -Erik -Donovan -Raymond -Avery -Rylan -Dalton -Harrison -Andre -Martin -Keegan -Marco -Jude -Sawyer -Dakota -Leo -Calvin -Kai -Drake -Troy -Zion -Clayton -Roberto -Zane -Gregory -Tucker -Rafael -Kingston -Dominick -Ezekiel -Griffin -Devon -Drew -Lukas -Johnny -Ty -Pedro -Tyson -Caiden -Mateo -Braylon -Cash -Aden -Chance -Taylor -Marcos -Maximus -Ruben -Emanuel -Simon -Corbin -Brennan -Dillon -Skyler -Myles -Xander -Jaxson -Dawson -Kameron -Kyler -Axel -Colby -Jonas -Joaquin -Payton -Brock -Frank -Enrique -Quinn -Emilio -Malik -Grady -Angelo -Julio -Derrick -Raul -Fabian -Corey -Gerardo -Dante -Ezra -Armando -Allen -Theodore -Gael -Amir -Zander -Adan -Maximilian -Randy -Easton -Dustin -Luca -Phillip -Julius -Charlie -Ronald -Jakob -Cade -Brett -Trent -Silas -Keith -Emiliano -Trey -Jalen -Darius -Lane -Jerry -Jaime -Scott -Graham -Weston -Braydon -Anderson -Rodrigo -Pablo -Saul -Danny -Donald -Elliot -Brayan -Dallas -Lorenzo -Casey -Mitchell -Alberto -Tristen -Rowan -Jayson -Gustavo -Aaden -Amari -Dean -Braeden -Declan -Chris -Ismael -Dane -Louis -Arturo -Brenden -Felix -Jimmy -Cohen -Tony -Holden -Reid -Abel -Bennett -Zackary -Arthur -Nehemiah -Ricky -Esteban -Cruz -Finn -Mauricio -Dennis -Keaton -Albert -Marvin -Mathew -Larry -Moises -Issac -Philip -Quentin -Curtis -Greyson -Jameson -Everett -Jayce -Darren -Elliott -Uriel -Alfredo -Hugo -Alec -Jamari -Marshall -Walter -Judah -Jay -Lance -Beau -Ali -Landyn -Yahir -Phoenix -Nickolas -Kobe -Bryant -Maurice -Russell -Leland -Colten -Reed -Davis -Joe -Ernesto -Desmond -Kade -Reece -Morgan -Ramon -Rocco -Orlando -Ryker -Brodie -Paxton -Jacoby -Douglas -Kristopher -Gary -Lawrence -Izaiah -Solomon -Nikolas -Mekhi -Justice -Tate -Jaydon -Salvador -Shaun -Alvin -Eddie -Kane -Davion -Zachariah -Dorian -Titus -Kellen -Camron -Isiah -Javon -Nasir -Milo -Johan -Byron -Jasper -Jonathon -Chad -Marc -Kelvin -Chandler -Sam -Cory -Deandre -River -Reese -Roger -Quinton -Talon -Romeo -Franklin -Noel -Alijah -Guillermo -Gunner -Damon -Jadon -Emerson -Micheal -Bruce -Terry -Kolton -Melvin -Beckett -Porter -August -Brycen -Dayton -Jamarion -Leonel -Karson -Zayden -Keagan -Carl -Khalil -Cristopher -Nelson -Braiden -Moses -Isaias -Roy -Triston -Walker -Kale -Emma -Isabella -Emily -Madison -Ava -Olivia -Sophia -Abigail -Elizabeth -Chloe -Samantha -Addison -Natalie -Mia -Alexis -Alyssa -Hannah -Ashley -Ella -Sarah -Grace -Taylor -Brianna -Lily -Hailey -Anna -Victoria -Kayla -Lillian -Lauren -Kaylee -Allison -Savannah -Nevaeh -Gabriella -Sofia -Makayla -Avery -Riley -Julia -Leah -Aubrey -Jasmine -Audrey -Katherine -Morgan -Brooklyn -Destiny -Sydney -Alexa -Kylie -Brooke -Kaitlyn -Evelyn -Layla -Madeline -Kimberly -Zoe -Jessica -Peyton -Alexandra -Claire -Madelyn -Maria -Mackenzie -Arianna -Jocelyn -Amelia -Angelina -Trinity -Andrea -Maya -Valeria -Sophie -Rachel -Vanessa -Aaliyah -Mariah -Gabrielle -Katelyn -Ariana -Bailey -Camila -Jennifer -Melanie -Gianna -Charlotte -Paige -Autumn -Payton -Faith -Sara -Isabelle -Caroline -Genesis -Isabel -Mary -Zoey -Gracie -Megan -Haley -Mya -Michelle -Molly -Stephanie -Nicole -Jenna -Natalia -Sadie -Jada -Serenity -Lucy -Ruby -Eva -Kennedy -Rylee -Jayla -Naomi -Rebecca -Lydia -Daniela -Bella -Keira -Adriana -Lilly -Hayden -Miley -Katie -Jade -Jordan -Gabriela -Amy -Angela -Melissa -Valerie -Giselle -Diana -Amanda -Kate -Laila -Reagan -Jordyn -Kylee -Danielle -Briana -Marley -Leslie -Kendall -Catherine -Liliana -Mckenzie -Jacqueline -Ashlyn -Reese -Marissa -London -Juliana -Shelby -Cheyenne -Angel -Daisy -Makenzie -Miranda -Erin -Amber -Alana -Ellie -Breanna -Ana -Mikayla -Summer -Piper -Adrianna -Jillian -Sierra -Jayden -Sienna -Alicia -Lila -Margaret -Alivia -Brooklynn -Karen -Violet -Sabrina -Stella -Aniyah -Annabelle -Alexandria -Kathryn -Skylar -Aliyah -Delilah -Julianna -Kelsey -Khloe -Carly -Amaya -Mariana -Christina -Alondra -Tessa -Eliana -Bianca -Jazmin -Clara -Vivian -Josephine -Delaney -Scarlett -Elena -Cadence -Alexia -Maggie -Laura -Nora -Ariel -Elise -Nadia -Mckenna -Chelsea -Lyla -Alaina -Jasmin -Hope -Leila -Caitlyn -Cassidy -Makenna -Allie -Izabella -Eden -Callie -Haylee -Caitlin -Kendra -Karina -Kyra -Kayleigh -Addyson -Kiara -Jazmine -Karla -Camryn -Alina -Lola -Kyla -Kelly -Fatima -Tiffany -Kira -Crystal -Mallory -Esmeralda -Alejandra -Eleanor -Angelica -Jayda -Abby -Kara -Veronica -Carmen -Jamie -Ryleigh -Valentina -Allyson -Dakota -Kamryn -Courtney -Cecilia -Madeleine -Aniya -Alison -Esther -Heaven -Aubree -Lindsey -Leilani -Nina -Melody -Macy -Ashlynn -Joanna -Cassandra -Alayna -Kaydence -Madilyn -Aurora -Heidi -Emerson -Kimora -Madalyn -Erica -Josie -Katelynn -Guadalupe -Harper -Ivy -Lexi -Camille -Savanna -Dulce -Daniella -Lucia -Emely -Joselyn -Kiley -Kailey -Miriam -Cynthia -Rihanna -Georgia -Rylie -Harmony -Kiera -Kyleigh -Monica -Bethany -Kaylie -Cameron -Teagan -Cora -Brynn -Ciara -Genevieve -Alice -Maddison -Eliza -Tatiana -Jaelyn -Erika -Ximena -April -Marely -Julie -Danica -Presley -Brielle -Julissa -Angie -Iris -Brenda -Hazel -Rose -Malia -Shayla -Fiona -Phoebe -Nayeli -Paola -Kaelyn -Selena -Audrina -Rebekah -Carolina -Janiyah -Michaela -Penelope -Janiya -Anastasia -Adeline -Ruth -Sasha -Denise -Holly -Madisyn -Hanna -Tatum -Marlee -Nataly -Helen -Janelle -Lizbeth -Serena -Anya -Jaslene -Kaylin -Jazlyn -Nancy -Lindsay -Desiree -Hayley -Itzel -Imani -Madelynn -Asia -Kadence -Madyson -Talia -Jane -Kayden -Annie -Amari -Bridget -Raegan -Jadyn -Celeste -Jimena -Luna -Yasmin -Emilia -Annika -Estrella -Sarai -Lacey -Ayla -Alessandra -Willow -Nyla -Dayana -Lilah -Lilliana -Natasha -Hadley -Harley -Priscilla -Claudia -Allisson -Baylee -Brenna -Brittany -Skyler -Fernanda -Danna -Melany -Cali -Lia -Macie -Lyric -Logan -Gloria -Lana -Mylee -Cindy -Lilian -Amira -Anahi -Alissa -Anaya -Lena -Ainsley -Sandra -Noelle -Marisol -Meredith -Kailyn -Lesly -Johanna -Diamond -Evangeline -Juliet -Kathleen -Meghan -Paisley -Athena -Hailee -Rosa -Wendy -Emilee -Sage -Alanna -Elaina -Cara -Nia -Paris -Casey -Dana -Emery -Rowan -Aubrie -Kaitlin -Jaden -Kenzie -Kiana -Viviana -Norah -Lauryn -Perla -Amiyah -Alyson -Rachael -Shannon -Aileen -Miracle -Lillie -Danika -Heather -Kassidy -Taryn -Tori -Francesca -Kristen -Amya -Elle -Kristina -Cheyanne -Haylie -Patricia -Anne -Samara diff --git a/config/names/first_female.txt b/config/names/first_female.txt deleted file mode 100644 index b500f027efc3f..0000000000000 --- a/config/names/first_female.txt +++ /dev/null @@ -1,807 +0,0 @@ -Aida -Alexa -Alexandria -Alexis -Alexus -Alfreda -Alisa -Alisya -Allegra -Allegria -Alma -Alysha -Alyssia -Amaryllis -Ambrosine -Angel -Anjelica -Anne -Arabella -Arielle -Arleen -Ashlie -Astor -Aubrey -Avalona -Averill -Barbara -Beckah -Becky -Bernice -Bethney -Betsy -Bidelia -Breanne -Brittani -Brooke -Cadence -Calanthia -Caleigh -Candace -Candice -Carly -Carlyle -Carolyn -Carry -Caryl -Cecily -Cherette -Cheri -Cherry -Christa -Christiana -Christobelle -Claribel -Clover -Coreen -Corrine -Cynthia -Dalya -Daniella -Daria -Dayna -Debbi -Dee -Deena -Della -Delma -Denys -Diamond -Dina -Dolores -Donella -Donna -Dorothy -Dortha -Easter -Ebba -Effie -Elizabeth -Elle -Emma -Ermintrude -Esmeralda -Eugenia -Euphemia -Eustace -Eveleen -Evelina -Fay -Floella -Flora -Flossie -Fortune -Genette -Georgene -Geraldine -Gervase -Gina -Ginger -Gladwyn -Glenna -Greta -Griselda -Gwenda -Gwenevere -Hadley -Haidee -Hailey -Hal -Haleigh -Hayley -Heather -Hedley -Helen -Hepsie -Hortensia -Iantha -Ileen -Innocent -Irene -Jacaline -Jacquetta -Jacqui -Jakki -Jalen -Janelle -Janette -Janie -Janina -Janine -Jasmine -Jaylee -Jaynie -Jeanna -Jeannie -Jeannine -Jenifer -Jennie -Jera -Jere -Jeri -Jillian -Jillie -Joetta -Joi -Joni -Josepha -Joye -Julia -July -Kaelea -Kaleigh -Karenza -Karly -Karyn -Kat -Kathy -Katlyn -Kayleigh -Keegan -Keira -Keith -Kellie -Kerena -Kerensa -Keturah -Kimberley -Lacy -Lakeisha -Lalla -Latanya -Laurencia -Laurissa -Leeann -Leia -Lessie -Leta -Lexia -Lexus -Lindsie -Lindy -Lockie -Lori -Lorin -Luanne -Lucian -Luvenia -Lyndsey -Lynn -Lynsey -Lynwood -Mabelle -Macey -Madyson -Maegan -Marcia -Mariabella -Marilene -Marion -Marje -Marjory -Marlowe -Marlyn -Marshall -Maryann -Maudie -Maurene -May -Merideth -Merrilyn -Meryl -Minnie -Monna -Muriel -Mya -Myriam -Myrtie -Nan -Nelle -Nena -Nerissa -Netta -Nettie -Nonie -Nova -Nowell -Nydia -Olive -Oralie -Patience -Pauleen -Pene -Peregrine -Pheobe -Phoebe -Phyliss -Phyllida -Phyllis -Porsche -Prosper -Prue -Quanah -Quiana -Raelene -Rain -Randa -Randal -Rebeckah -Reene -Renie -Rexana -Rhetta -Ronnette -Rosemary -Rubye -Sabella -Sachie -Sally -Saranna -Seneca -Shana -Shanika -Shannah -Shannon -Shantae -Sharalyn -Sharla -Sheri -Sherie -Sherill -Sherri -Sissy -Sophie -Star -Steph -Stephany -Sue -Sukie -Sunshine -Susanna -Susannah -Suzan -Suzy -Sydney -Tamika -Tania -Tansy -Tatyanna -Tiffany -Tolly -Topaz -Tori -Tracee -Tracey -Ulyssa -Valary -Verna -Vinnie -Vivyan -Wendi -Wisdom -Wynonna -Wynter -Yasmin -Yolanda -Ysabel -Zelda -Zune -Emma -Isabella -Emily -Madison -Ava -Olivia -Sophia -Abigail -Elizabeth -Chloe -Samantha -Addison -Natalie -Mia -Alexis -Alyssa -Hannah -Ashley -Ella -Sarah -Grace -Taylor -Brianna -Lily -Hailey -Anna -Victoria -Kayla -Lillian -Lauren -Kaylee -Allison -Savannah -Nevaeh -Gabriella -Sofia -Makayla -Avery -Riley -Julia -Leah -Aubrey -Jasmine -Audrey -Katherine -Morgan -Brooklyn -Destiny -Sydney -Alexa -Kylie -Brooke -Kaitlyn -Evelyn -Layla -Madeline -Kimberly -Zoe -Jessica -Peyton -Alexandra -Claire -Madelyn -Maria -Mackenzie -Arianna -Jocelyn -Amelia -Angelina -Trinity -Andrea -Maya -Valeria -Sophie -Rachel -Vanessa -Aaliyah -Mariah -Gabrielle -Katelyn -Ariana -Bailey -Camila -Jennifer -Melanie -Gianna -Charlotte -Paige -Autumn -Payton -Faith -Sara -Isabelle -Caroline -Isabel -Mary -Zoey -Gracie -Megan -Haley -Mya -Michelle -Molly -Stephanie -Nicole -Jenna -Natalia -Sadie -Jada -Serenity -Lucy -Ruby -Eva -Kennedy -Rylee -Jayla -Naomi -Rebecca -Lydia -Daniela -Bella -Keira -Adriana -Lilly -Hayden -Miley -Katie -Jade -Jordan -Gabriela -Amy -Angela -Melissa -Valerie -Giselle -Diana -Amanda -Kate -Laila -Reagan -Jordyn -Kylee -Danielle -Briana -Marley -Leslie -Kendall -Catherine -Liliana -Mckenzie -Jacqueline -Ashlyn -Reese -Marissa -London -Juliana -Shelby -Cheyenne -Angel -Daisy -Makenzie -Miranda -Erin -Amber -Alana -Ellie -Breanna -Ana -Mikayla -Summer -Piper -Adrianna -Jillian -Sierra -Jayden -Sienna -Alicia -Lila -Margaret -Alivia -Brooklynn -Karen -Violet -Sabrina -Stella -Aniyah -Annabelle -Alexandria -Kathryn -Skylar -Aliyah -Delilah -Julianna -Kelsey -Khloe -Carly -Amaya -Mariana -Christina -Alondra -Tessa -Eliana -Bianca -Jazmin -Clara -Vivian -Josephine -Delaney -Scarlett -Elena -Cadence -Alexia -Maggie -Laura -Nora -Ariel -Elise -Nadia -Mckenna -Chelsea -Lyla -Alaina -Jasmin -Hope -Leila -Caitlyn -Cassidy -Makenna -Allie -Izabella -Eden -Callie -Haylee -Caitlin -Kendra -Karina -Kyra -Kayleigh -Addyson -Kiara -Jazmine -Karla -Camryn -Alina -Lola -Kyla -Kelly -Fatima -Tiffany -Kira -Crystal -Mallory -Esmeralda -Alejandra -Eleanor -Angelica -Jayda -Abby -Kara -Veronica -Carmen -Jamie -Ryleigh -Valentina -Allyson -Dakota -Kamryn -Courtney -Cecilia -Madeleine -Aniya -Alison -Esther -Heaven -Aubree -Lindsey -Leilani -Nina -Melody -Macy -Ashlynn -Joanna -Cassandra -Alayna -Kaydence -Madilyn -Aurora -Heidi -Emerson -Kimora -Madalyn -Erica -Josie -Katelynn -Guadalupe -Harper -Ivy -Lexi -Camille -Savanna -Dulce -Daniella -Lucia -Emely -Joselyn -Kiley -Kailey -Miriam -Cynthia -Rihanna -Georgia -Rylie -Harmony -Kiera -Kyleigh -Monica -Bethany -Kaylie -Cameron -Teagan -Cora -Brynn -Ciara -Genevieve -Alice -Maddison -Eliza -Tatiana -Jaelyn -Erika -Ximena -April -Marely -Julie -Danica -Presley -Brielle -Julissa -Angie -Iris -Brenda -Hazel -Rose -Malia -Shayla -Fiona -Phoebe -Nayeli -Paola -Kaelyn -Selena -Audrina -Rebekah -Carolina -Janiyah -Michaela -Penelope -Janiya -Anastasia -Adeline -Ruth -Sasha -Denise -Holly -Madisyn -Hanna -Tatum -Marlee -Nataly -Helen -Janelle -Lizbeth -Serena -Anya -Jaslene -Kaylin -Jazlyn -Nancy -Lindsay -Desiree -Hayley -Itzel -Imani -Madelynn -Asia -Kadence -Madyson -Talia -Jane -Kayden -Annie -Amari -Bridget -Raegan -Jadyn -Celeste -Jimena -Luna -Yasmin -Emilia -Annika -Estrella -Sarai -Lacey -Ayla -Alessandra -Willow -Nyla -Dayana -Lilah -Lilliana -Natasha -Hadley -Harley -Priscilla -Claudia -Allisson -Baylee -Brenna -Brittany -Skyler -Fernanda -Danna -Melany -Cali -Lia -Macie -Lyric -Logan -Gloria -Lana -Mylee -Cindy -Lilian -Amira -Anahi -Alissa -Anaya -Lena -Ainsley -Sandra -Noelle -Marisol -Meredith -Kailyn -Lesly -Johanna -Diamond -Evangeline -Juliet -Kathleen -Meghan -Paisley -Athena -Hailee -Rosa -Wendy -Emilee -Sage -Alanna -Elaina -Cara -Nia -Paris -Casey -Dana -Emery -Rowan -Aubrie -Kaitlin -Jaden -Kenzie -Kiana -Viviana -Norah -Lauryn -Perla -Amiyah -Alyson -Rachael -Shannon -Aileen -Miracle -Lillie -Danika -Heather -Kassidy -Taryn -Tori -Francesca -Kristen -Amya -Elle -Kristina -Cheyanne -Haylie -Patricia -Anne -Samara \ No newline at end of file diff --git a/config/names/first_male.txt b/config/names/first_male.txt deleted file mode 100644 index f2b03e16868aa..0000000000000 --- a/config/names/first_male.txt +++ /dev/null @@ -1,725 +0,0 @@ -Abel -Adolph -Alan -Alden -Alex -Alfred -Alger -Allen -Amos -Apple -Archie -Arnie -Art -Arthur -Baldric -Bartholomew -Bill -Blake -Brayden -Brendan -Brock -Bronte -Brick -Bruce -Bryce -Buck -Burt -Butch -Byrne -Byron -Camryn -Carl -Carter -Casimir -Cassian -Charles -Charlton -Chip -Clark -Claudius -Clement -Cleveland -Cliff -Clinton -Cletus -Collin -Crush -Cy -Damian -Danny -Darcey -Darell -Darin -Deangelo -Denholm -Desmond -Devin -Dirk -Dominic -Donny -Driscoll -Duke -Duncan -Edgar -Eliot -Eliott -Elric -Elwood -Emmanuel -Fenton -Fitz -Flick -Flint -Flip -Francis -Frank -Frankie -Fridge -Fulton -Gannon -Garret -Gary -Goddard -Godwin -Goodwin -Gordon -Graeme -Grandpa -Gratian -Grendel -Han -Harry -Hartley -Harvey -Henderson -Holden -Homer -Horatio -Huffie -Hungry -Hugo -Irvine -Jacob -Jake -Jamar -Jamie -Jamison -Janel -Jaydon -Jaye -Jayne -Jean-Luc -Jeb -Jed -Jemmy -Jermaine -Jerrie -Jim -Joachim -Joey -Johnathan -John -Johnny -Jonathon -Josh -Josiah -Kennard -Keziah -Lando -Lanny -Launce -Leland -Lennox -Lenny -Leonard -Leroy -Lief -Linden -Linton -Lorde -Loreto -Lou -Lucas -Luke -Malachi -Malcolm -Manley -Marion -Max -Maynard -Melvyn -Michael -Mike -Milton -Montague -Monte -Monty -Nat -Nathaniel -Nick -Nikolas -Noah -Opie -Osbert -Osborn -Osborne -Osmund -Oswald -Paget -Patrick -Patton -Percival -Persh -Rastus -Raymond -Rayner -Reuben -Reynard -Richard -Rodger -Roger -Romayne -Roscoe -Roswell -Royce -Rube -Rusty -Sal -Sawyer -Scotty -Seymour -Shane -Shiloh -Smoke -Simon -Sloan -Sorrel -Spike -Sybil -Syd -Tamsin -Taylor -Tel -Terrell -Tim -Timothy -Todd -Trip -Tye -Uland -Ulric -Vaughn -Vince -Vinny -Walter -Ward -Warner -Wayne -Whitaker -William -Willy -Woodrow -Zack -Zane -Zeke -Jacob -Michael -Ethan -Joshua -Daniel -Alexander -Anthony -William -Christopher -Matthew -Jayden -Andrew -Joseph -David -Noah -Aiden -James -Ryan -Logan -John -Nathan -Elijah -Christian -Gabriel -Benjamin -Jonathan -Tyler -Samuel -Nicholas -Gavin -Dylan -Jackson -Brandon -Caleb -Mason -Angel -Isaac -Evan -Jack -Kevin -Jose -Isaiah -Luke -Landon -Justin -Lucas -Zachary -Jordan -Robert -Aaron -Brayden -Thomas -Cameron -Hunter -Austin -Adrian -Connor -Owen -Aidan -Jason -Julian -Wyatt -Charles -Luis -Carter -Juan -Chase -Diego -Jeremiah -Brody -Xavier -Adam -Carlos -Sebastian -Liam -Hayden -Nathaniel -Henry -Jesus -Ian -Tristan -Bryan -Sean -Cole -Alex -Eric -Brian -Jaden -Carson -Blake -Ayden -Cooper -Dominic -Brady -Caden -Josiah -Kyle -Colton -Kaden -Eli -Miguel -Antonio -Parker -Steven -Alejandro -Riley -Richard -Timothy -Devin -Jesse -Victor -Jake -Joel -Colin -Kaleb -Bryce -Levi -Oliver -Oscar -Vincent -Ashton -Cody -Micah -Preston -Marcus -Max -Patrick -Seth -Jeremy -Peyton -Nolan -Ivan -Damian -Maxwell -Alan -Kenneth -Jonah -Jorge -Mark -Giovanni -Eduardo -Grant -Collin -Gage -Omar -Emmanuel -Trevor -Edward -Ricardo -Cristian -Nicolas -Kayden -George -Jaxon -Paul -Braden -Elias -Andres -Derek -Garrett -Tanner -Malachi -Conner -Fernando -Cesar -Javier -Miles -Jaiden -Alexis -Leonardo -Santiago -Francisco -Cayden -Shane -Edwin -Hudson -Travis -Bryson -Erick -Jace -Hector -Josue -Peter -Jaylen -Mario -Manuel -Abraham -Grayson -Damien -Kaiden -Spencer -Stephen -Edgar -Wesley -Shawn -Trenton -Jared -Jeffrey -Landen -Johnathan -Bradley -Braxton -Ryder -Camden -Roman -Asher -Brendan -Maddox -Sergio -Israel -Andy -Lincoln -Erik -Donovan -Raymond -Avery -Rylan -Dalton -Harrison -Andre -Martin -Keegan -Marco -Jude -Sawyer -Dakota -Leo -Calvin -Kai -Drake -Troy -Zion -Clayton -Roberto -Zane -Gregory -Tucker -Rafael -Kingston -Dominick -Ezekiel -Griffin -Devon -Drew -Lukas -Johnny -Ty -Pedro -Tyson -Caiden -Mateo -Braylon -Cash -Aden -Chance -Taylor -Marcos -Maximus -Ruben -Emanuel -Simon -Corbin -Brennan -Dillon -Skyler -Myles -Xander -Jaxson -Dawson -Kameron -Kyler -Axel -Colby -Jonas -Joaquin -Payton -Brock -Frank -Enrique -Quinn -Emilio -Malik -Grady -Angelo -Julio -Derrick -Raul -Fabian -Corey -Gerardo -Dante -Ezra -Armando -Allen -Theodore -Gael -Amir -Zander -Adan -Maximilian -Randy -Easton -Dustin -Luca -Phillip -Julius -Charlie -Ronald -Jakob -Cade -Brett -Trent -Silas -Keith -Emiliano -Trey -Jalen -Darius -Lane -Jerry -Jaime -Scott -Graham -Weston -Braydon -Anderson -Rodrigo -Pablo -Saul -Danny -Donald -Elliot -Brayan -Dallas -Lorenzo -Casey -Mitchell -Alberto -Tristen -Rowan -Jayson -Gustavo -Aaden -Amari -Dean -Braeden -Declan -Chris -Ismael -Dane -Louis -Arturo -Brenden -Felix -Jimmy -Cohen -Tony -Holden -Reid -Abel -Bennett -Zackary -Arthur -Nehemiah -Ricky -Esteban -Cruz -Finn -Mauricio -Dennis -Keaton -Albert -Marvin -Mathew -Larry -Moises -Issac -Philip -Quentin -Curtis -Greyson -Jameson -Everett -Jayce -Darren -Elliott -Uriel -Alfredo -Hugo -Alec -Jamari -Marshall -Walter -Judah -Jay -Lance -Beau -Ali -Landyn -Yahir -Phoenix -Nickolas -Kobe -Bryant -Maurice -Russell -Leland -Colten -Reed -Davis -Joe -Ernesto -Desmond -Kade -Reece -Morgan -Ramon -Rocco -Orlando -Ryker -Brodie -Paxton -Jacoby -Douglas -Kristopher -Gary -Lawrence -Izaiah -Solomon -Nikolas -Mekhi -Justice -Tate -Jaydon -Salvador -Shaun -Alvin -Eddie -Kane -Davion -Zachariah -Damien -Titus -Kellen -Camron -Isiah -Javon -Nasir -Milo -Johan -Byron -Jasper -Jonathon -Chad -Marc -Kelvin -Chandler -Sam -Cory -Deandre -River -Reese -Roger -Quinton -Talon -Romeo -Franklin -Noel -Alijah -Guillermo -Gunner -Damon -Jadon -Emerson -Micheal -Bruce -Terry -Kolton -Melvin -Beckett -Porter -August -Brycen -Dayton -Jamarion -Leonel -Karson -Zayden -Keagan -Carl -Khalil -Cristopher -Nelson -Braiden -Moses -Isaias -Roy -Triston -Walker -Kale \ No newline at end of file diff --git a/config/names/last.txt b/config/names/last.txt deleted file mode 100644 index 46398534293d5..0000000000000 --- a/config/names/last.txt +++ /dev/null @@ -1,612 +0,0 @@ -Whittier -Dimeling -Blaine -Dennis -Adams -Rader -Murray -Millhouse -Ludwig -Burris -Shupe -Mary -Zadovsky -Philips -Wise -Gronko -Jardine -Black -Mitchell -Enderly -Stall -Harrow -Atweeke -Sealis -Conrad -Lucy -Stewart -Green -Feufer -Warren -Campbell -Shafer -Woodworth -Magor -Logue -Reichard -Day -Dugmore -Murray -Greenawalt -Jyllian -Osterwise -Styles -Cavalet -Garneys -Raub -Sholl -Chauvin -Poley -Todd -Brandenburg -Baer -Pritchard -Pinney -Kadel -Anderson -Clarke -Hunt -Gadow -Stough -Marcotte -Brooks -Watson -Nash -Sheets -Ashbaugh -Zimmer -Noton -Dean -Fleming -Draudy -Bluetenberger -Fischer -Hawkins -Poehl -Addison -Mcintosh -Keppel -Kimple -Alice -Stone -Fiscina -Leichter -Wile -Callison -Cowper -Harrold -Carr -Eckhardstein -Wilkerson -Shirey -Benford -Reade -Baskett -Seidner -Gettemy -Joyce -Judge -Burkett -Kiefer -Carmichael -Hirleman -Wells -Isemann -Cressman -Highlands -Briggs -Rowley -Coldsmith -Berkheimer -Hill -Maclagan -Mcfall -Mens -Braun -James -Sloan -Bould -Overstreet -Kanaga -Polson -Finlay -Sandys -Bousum -Howard -Treeby -Stainforth -Werner -Sulyard -Marriman -Weinstein -Butterfill -Mason -Coates -Peters -Gregory -Wilo -Edwards -Barnes -Harding -Tireman -Lombardi -Roberts -Faqua -Basmanoff -Mccune -Mckendrick -Oppenheimer -Oneal -Focell -Tedrow -Fields -Ryals -Best -Zaun -Knapp -Linton -Jackson -Bullard -Mcloskey -Zoucks -Heckendora -Hoenshell -Woollard -Mueller -Burns -Franks -Goodman -Stern -Robinson -Hooker -David -Fitzgerald -Vanleer -Beach -Flickinger -Metzer -Bynum -Stafford -Osteen -Johnson -Paynter -Thomlinson -Simmons -Basinger -Fisher -Bunten -Compton -Archibald -Catherina -Rahl -Bowchiew -Tennant -Mccullough -Margaret -Schaeffer -Sommer -Beail -Merryman -Knapenberger -Patterson -Houston -Lacon -Levett -Sullivan -Sidower -Laborde -Stroh -Hice -Biery -Christman -Staymates -Sauter -Snyder -Bratton -Sybilla -Altmann -Mathews -Newbern -Baker -Kemble -Mingle -Unk -Otis -Quinn -Bell -Roberts -Wood -Ullman -Bicknell -Gibson -Rohtin -James -Wallick -Eggbert -Losey -Neely -Catleay -McDonald -Beedell -Williamson -Bennett -Potter -Caldwell -Lowe -Durstine -King -Gardner -Ulery -Rifler -Trovato -Thomas -Nehling -Baum -Werry -Mcmullen -Koster -Willey -Mildred -Straub -Haynes -Baxter -Ackerley -Greene -Atkinson -Davis -Weeter -Milne -Leech -Clewett -Ewing -Hook -Reighner -Welty -Jenkins -Bennett -Swarner -Hawker -Agg -Batten -Cherry -Shaffer -Yeskey -Stephenson -Pycroft -Larson -Joghs -Keener -Christopher -Roadman -Echard -Priebe -Auman -Kemerer -Sutton -Prechtl -Cowart -Ringer -Garratt -Siegrist -Seelig -Lafortune -Dryfus -Isaman -Teagarden -Evans -Wolfe -Fiddler -Jowers -Aultman -Olphert -Howe -Leslie -Stocker -Bode -Whirlow -Ann -Mcclymonds -Guess -Taggart -Pratt -Moon -Huey -Hegarty -Meyers -Stahl -Nickolson -Mortland -Perkins -Thorley -Fuchs -Ray -Schrader -Kellogg -Woodward -Faust -Roby -Bashline -Cypret -Laurenzi -Minnie -Houser -Langston -Anderson -Barrett -Wible -Hujsak -Wardle -Pershing -Kuster -Driggers -Wheeler -Garland -Alliman -Hoover -Camp -Hall -Parkinson -Swabey -Mull -Cox -Hanford -Stange -Wolff -Jesse -Brinigh -Koepple -Schmidt -Muller -Schofield -Zalack -Pfeifer -Fea -Blackburn -Ward -Kifer -Costello -Donkin -Osterweis -Brindle -Llora -Duncan -Ehret -Fryer -Summy -Richards -Boyer -Hutton -Mosser -Lester -Stroble -Randolph -Lord -Scott -Nicholas -Smail -Ratcliff -Riggle -Newton -Sanders -Mitchell -Lauffer -Aggley -Moberly -Hynes -Pennington -Woolery -Hardie -Blessig -Tanner -Demuth -Fraser -Henry -Shick -Ironmonger -Scherer -Field -Prevatt -Earl -Paulson -Curry -Powers -Rosensteel -Hoopengarner -Weisgarber -Elliott -Pearsall -Lowstetter -Holdeman -Kepplinger -Bloise -Hunter -Glover -Hayhurst -Wentzel -Owens -Smith -Steele -Leach -Armstrong -Wheeler -Easter -Greenwood -Woodward -Pratt -Buzzard -Cox -Eliza -Rockwell -Zeal -Harshman -Northey -Tilton -Richter -Moore -Jerome -Hardy -Bickerson -White -Beck -Waldron -Fulton -Miller -Sandford -Hughes -Winton -Digson -Byers -Hincken -Shaner -Todd -Whiteman -Lineman -Albright -Hastings -Elderson -Garrison -Rose -Kelley -Quirin -Dickinson -Young -Ramos -Jewell -Endsley -Briner -Jenner -Saylor -Bash -Blyant -Rhinehart -Prescott -Kirkson -Stamos -Sagan -Hawking -Dawkins -McShain -McDonohugh -Power -Smith -Jones -Williams -Brown -Taylor -Davies -Wilson -Evans -Thomas -Roberts -Johnson -Walker -Wright -Robinson -Thompson -Hughes -White -Edwards -Hall -Patel -Green -Martins -Lewis -Wood -Jackson -Clarke -Harris -Clark -Scott -Turner -Hill -Moore -Cooper -Morris -Ward -Watson -Morgan -Anderson -Harrison -King -Campbell -Young -Mitchell -Baker -James -Kelly -Allen -Bell -Phillips -Lee -Stewart -Miller -Parker -Simpson -Bennett -Davis -Griffiths -Shaw -Price -Cook -Richardson -Murray -Marshall -Begum -Murphy -Khan -Gray -Collins -Bailey -Carter -Robertson -Graham -Adams -Richards -Cox -Singh -Hussain -Ellis -Wilkinson -Foster -Thomson -Russell -Ali -Reid -Rathens -Rathen -Mason -Chapman -Powell -Owen -Ahmed -Gibson -Rogers -Webb -Holmes -Mills -Matthews -Hunt -Palmer -Lloyd -Kaur -Fisher -Ivanov -Smirnov -Vasilyev -Petrov -Kuznetsov -Mikhaylov -Pavlov -Semenov -Andreev -Alekseev diff --git a/config/names/ninjaname.txt b/config/names/ninjaname.txt deleted file mode 100644 index 24d5d6879ef9e..0000000000000 --- a/config/names/ninjaname.txt +++ /dev/null @@ -1,45 +0,0 @@ -Shadow -Sarutobi -Smoke -Rain -Scorpion -Zero -Ermac -Saibot -Sun -Moon -Cyrax -Raphael -Michaelangelo -Cloud -Donatello -Leonardo -Splinter -Shredder -Hazuki -Hien -Hiryu -Ryu -Hayabusa -Midnight -Seven -Hanzo -Blood -Iga -Koga -Hero -Hiro -Phantom -Baki -Ogre -Daemon -Goemon -Throat -Death -Aria -Bro -Fox -Null -Raiden -Samurai -Eater \ No newline at end of file diff --git a/config/names/ninjatitle.txt b/config/names/ninjatitle.txt deleted file mode 100644 index 966204bb4dcf7..0000000000000 --- a/config/names/ninjatitle.txt +++ /dev/null @@ -1,46 +0,0 @@ -Master -Sensei -Swift -Merciless -Assassin -Rogue -Hunter -Widower -Orphaner -Stalker -Killer -Silent -Silencing -Quick -Agile -Merciful -Ninja -Shinobi -Initiate -Grandmaster -Strider -Striker -Slayer -Awesome -Ender -Dr. -Night -Crimson -Grappler -Ulimate -Remorseless -Deep -Dragon -Cruel -Nightshade -Black -Gray -Solid -Liquid -Solidus -Steel -Nickel -Silver -Singing -Snake -Acid \ No newline at end of file diff --git a/config/names/verbs.txt b/config/names/verbs.txt deleted file mode 100644 index e036e3c1dabb6..0000000000000 --- a/config/names/verbs.txt +++ /dev/null @@ -1,633 +0,0 @@ -accept -add -admire -admit -advise -afford -agree -alert -allow -amuse -analyse -announce -annoy -answer -apologise -appear -applaud -appreciate -approve -argue -arrange -arrest -arrive -ask -attach -attack -attempt -attend -attract -avoid -back -bake -balance -ban -bang -bare -bat -bathe -battle -beam -beg -behave -belong -bleach -bless -blind -blink -blot -blush -boast -boil -bolt -bomb -book -bore -borrow -bounce -bow -box -brake -brake -branch -breathe -bruise -brush -bubble -bump -burn -bury -buzz -calculate -call -camp -care -carry -carve -cause -challenge -change -charge -chase -cheat -check -cheer -chew -choke -chop -claim -clap -clean -clear -clip -close -coach -coil -collect -colour -comb -command -communicate -compare -compete -complain -complete -concentrate -concern -confess -confuse -connect -consider -consist -contain -continue -copy -correct -cough -count -cover -crack -crash -crawl -cross -crush -cry -cure -curl -curve -cycle -dam -damage -dance -dare -decay -deceive -decide -decorate -delay -delight -deliver -depend -describe -desert -deserve -destroy -detect -develop -disagree -disappear -disapprove -disarm -discover -dislike -divide -double -doubt -drag -drain -dream -dress -drip -drop -drown -drum -dry -dust -earn -educate -embarrass -employ -empty -encourage -end -enjoy -enter -entertain -escape -examine -excite -excuse -exercise -exist -expand -expect -explain -explode -extend -face -fade -fail -fancy -fasten -fax -fear -fence -fetch -file -fill -film -fire -fit -fix -flap -flash -float -flood -flow -flower -fold -follow -fool -force -form -found -frame -frighten -fry -gather -gaze -glow -glue -grab -grate -grease -greet -grin -grip -groan -guarantee -guard -guess -guide -hammer -hand -handle -hang -happen -harass -harm -hate -haunt -head -heal -heap -heat -help -hook -hop -hope -hover -hug -hum -hunt -hurry -identify -ignore -imagine -impress -improve -include -increase -influence -inform -inject -injure -instruct -intend -interest -interfere -interrupt -introduce -invent -invite -irritate -itch -jail -jam -jog -join -joke -judge -juggle -jump -kick -kill -kiss -kneel -knit -knock -knot -label -land -last -laugh -launch -learn -level -license -lick -lie -lighten -like -list -listen -live -load -lock -long -look -love -man -manage -march -mark -marry -match -mate -matter -measure -meddle -melt -memorise -mend -messup -milk -mine -miss -mix -moan -moor -mourn -move -muddle -mug -multiply -murder -nail -name -need -nest -nod -note -notice -number -obey -object -observe -obtain -occur -offend -offer -open -order -overflow -owe -own -pack -paddle -paint -park -part -pass -paste -pat -pause -peck -pedal -peel -peep -perform -permit -phone -pick -pinch -pine -place -plan -plant -play -please -plug -point -poke -polish -pop -possess -post -pour -practise -pray -preach -precede -prefer -prepare -present -preserve -press -pretend -prevent -prick -print -produce -program -promise -protect -provide -pull -pump -punch -puncture -punish -push -question -queue -race -radiate -rain -raise -reach -realise -receive -recognise -record -reduce -reflect -refuse -regret -reign -reject -rejoice -relax -release -rely -remain -remember -remind -remove -repair -repeat -replace -reply -report -reproduce -request -rescue -retire -return -rhyme -rinse -risk -rob -rock -roll -rot -rub -ruin -rule -rush -sack -sail -satisfy -save -saw -scare -scatter -scold -scorch -scrape -scratch -scream -screw -scribble -scrub -seal -search -separate -serve -settle -shade -share -shave -shelter -shiver -shock -shop -shrug -sigh -sign -signal -sin -sip -ski -skip -slap -slip -slow -smash -smell -smile -smoke -snatch -sneeze -sniff -snore -snow -soak -soothe -sound -spare -spark -sparkle -spell -spill -spoil -spot -spray -sprout -squash -squeak -squeal -squeeze -stain -stamp -stare -start -stay -steer -step -stir -stitch -stop -store -strap -strengthen -stretch -strip -stroke -stuff -subtract -succeed -suck -suffer -suggest -suit -supply -support -suppose -surprise -surround -suspect -suspend -switch -talk -tame -tap -taste -tease -telephone -tempt -terrify -test -thank -thaw -tick -tickle -tie -time -tip -tire -touch -tour -tow -trace -trade -train -transport -trap -travel -treat -tremble -trick -trip -trot -trouble -trust -try -tug -tumble -turn -twist -type -undress -unfasten -unite -unlock -unpack -untidy -use -vanish -visit -wail -wait -walk -wander -want -warm -warn -wash -waste -watch -water -wave -weigh -welcome -whine -whip -whirl -whisper -whistle -wink -wipe -wish -wobble -wonder -work -worry -wrap -wreck -wrestle -wriggle -yawn -yell -zip -zoom \ No newline at end of file diff --git a/config/names/wizardfirst.txt b/config/names/wizardfirst.txt deleted file mode 100644 index 408ae3b447eec..0000000000000 --- a/config/names/wizardfirst.txt +++ /dev/null @@ -1,36 +0,0 @@ -Jim -Gulstaff -Gandalf -Grimm -Mordenkainen -Elminister -Saruman -Vaarsuvius -Yoda -Zul -Nihilus -Vecna -Mogan -Circe -Prospero -Raistlin -Rasputin -Tzeentch -Khelben -Dumbledor -Houdini -Terefi -Urza -Tenser -Zagyg -Mystryl -Boccob -Merlin -Archchancellor -Radagast -Kreol -Kaschei -Lina -Morgan -Alatar -Palando \ No newline at end of file diff --git a/config/names/wizardsecond.txt b/config/names/wizardsecond.txt deleted file mode 100644 index d1e2e7348627d..0000000000000 --- a/config/names/wizardsecond.txt +++ /dev/null @@ -1,39 +0,0 @@ -the Powerful -the Great -the Magician -the Wise -the Seething -the Amazing -the Spiral King -Darkmagic -the White -the Gray -Shado -the Sorcelator -the Raven -the Emperor -the Brown -Weatherwax -the Destroyer -the Deathless -Yagg -the Remorseful -the Weeping -the Unending -the All Knowing -Dark -Smith -the Conquerer -the Unstoppable -Gray -of Void -Unseen -Darko -Honko -the Bandit Killer -the Dragon Spooker -Inverse -le Fay -the Blue -the Red -the Benevolent \ No newline at end of file diff --git a/customs/code/eloncake.dm b/customs/code/eloncake.dm deleted file mode 100644 index 5eb704ecbc99c..0000000000000 --- a/customs/code/eloncake.dm +++ /dev/null @@ -1,17 +0,0 @@ -/obj/item/clothing/suit/storage/toggle/eloncake - name = "vintage army greatcoat" - desc = "A greatcoat in a very old style. It was probably stolen from the history museum." - valid_accessory_slots = list(ACCESSORY_SLOT_ARMBAND,ACCESSORY_SLOT_MEDAL,ACCESSORY_SLOT_INSIGNIA,ACCESSORY_SLOT_RANK,ACCESSORY_SLOT_DEPT) - icon = 'customs/icons/obj/custom_items_obj.dmi' - icon_state = "vintagecoat" - item_icons = list(slot_wear_suit_str = 'customs/icons/mob/custom_items_mob.dmi') - accessories = list(/obj/item/clothing/accessory/solgov/rank/eloncake) - -/obj/item/clothing/accessory/solgov/rank/eloncake - name = "ranks (Group Captain)" - desc = "A replica of insignia denoting the rank of Royal Air Force Group Captain, whatever that is." - on_rolled = list("down" = "none") - icon = 'customs/icons/obj/custom_items_obj.dmi' - w_class = ITEM_SIZE_TINY - accessory_icons = list(slot_w_uniform_str = 'customs/icons/mob/custom_items_mob.dmi', slot_wear_suit_str = 'customs/icons/mob/custom_items_mob.dmi') - icon_state = "britishranks" diff --git a/customs/code/example_customkit.dm b/customs/code/example_customkit.dm deleted file mode 100644 index 593dff7a9e893..0000000000000 --- a/customs/code/example_customkit.dm +++ /dev/null @@ -1,8 +0,0 @@ -/obj/item/custkit/example // custom switch kit - name = "Example custom kit" - input = /obj/item/wrench - output = /obj/item/screwdriver - can_unkit = TRUE - unkit_icon = 'icons/obj/items.dmi' - unkit_icon_state = "gift1" - delay = 1 MINUTE diff --git a/customs/code/hacso.dm b/customs/code/hacso.dm deleted file mode 100644 index 37d6ee5baa618..0000000000000 --- a/customs/code/hacso.dm +++ /dev/null @@ -1,6 +0,0 @@ -/obj/item/clothing/under/hacso //as far as I know sprites are taken from /tg/ - name = "space carp suit" - desc = "A suit in a shape of a space carp. Usually worn by corporate interns who are sent to entertain children during HQ excursions." - icon_state = "carp_suit" - icon = 'maps/away/errant_pisces/errant_pisces_sprites.dmi' - item_icons = list(slot_w_uniform_str = 'maps/away/errant_pisces/errant_pisces_sprites.dmi') diff --git a/customs/code/rassvetsolnca.dm b/customs/code/rassvetsolnca.dm deleted file mode 100644 index c60c38e10528a..0000000000000 --- a/customs/code/rassvetsolnca.dm +++ /dev/null @@ -1,13 +0,0 @@ -/obj/item/gun/projectile/revolver/zakatneba/solnca - name = "Revolver 'Kisen-Isu'" - desc = "This is a rather old revolver that has seen many shootings. It was custom-made to fit a fairly large man's hand. The caliber of the gun is old .38 Special. Its surface is covered with numerous scratches, and the inscription on the handle is carved with something sharp: 'Kangya', in Yangui letters." - icon_state = "detective_panther" - -/obj/item/storage/secure/briefcase/zakatneba/solnca - startswith = list( - /obj/item/gun/projectile/revolver/zakatneba/solnca, - /obj/item/ammo_magazine/speedloader/small/rubber, - /obj/item/ammo_magazine/speedloader/small/rubber, - /obj/item/ammo_magazine/speedloader/small/rubber, - /obj/item/ammo_magazine/speedloader/small/rubber, - ) diff --git a/customs/code/zakatneba.dm b/customs/code/zakatneba.dm deleted file mode 100644 index 170afebc50875..0000000000000 --- a/customs/code/zakatneba.dm +++ /dev/null @@ -1,20 +0,0 @@ -/obj/item/gun/projectile/revolver/zakatneba - name = "Revolver 'Saitako'" - desc = "This is a very reliable revolver, custom made for a specific person. The caliber of the gun is .38 Special, be careful when interacting with it. It was made by a private manufacturer - Saitako. You may notice the Yangui characters on the grip." - icon = 'customs/icons/obj/custom_items_obj.dmi' - icon_state = "mateba" - handle_casings = CYCLE_CASINGS - caliber = CALIBER_PISTOL_SMALL - max_shells = 6 - ammo_type = /obj/item/ammo_casing/pistol/small/rubber - -/obj/item/storage/secure/briefcase/zakatneba - l_code = "12345" - l_set = 1 - startswith = list( - /obj/item/gun/projectile/revolver/zakatneba, - /obj/item/ammo_magazine/speedloader/small/rubber, - /obj/item/ammo_magazine/speedloader/small/rubber, - /obj/item/ammo_magazine/speedloader/small/rubber, - /obj/item/ammo_magazine/speedloader/small/rubber, - ) diff --git a/customs/config/README.md b/customs/config/README.md deleted file mode 100644 index 0dc9ed9e07238..0000000000000 --- a/customs/config/README.md +++ /dev/null @@ -1 +0,0 @@ -For details on how to use the custom item system, please refer to [the custom item repository](https://github.com/Baystation12/custom-items). \ No newline at end of file diff --git a/customs/config/eloncake-overcoat.json b/customs/config/eloncake-overcoat.json deleted file mode 100644 index 66b0478605fdd..0000000000000 --- a/customs/config/eloncake-overcoat.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "ckey": "Elloncake", - "character_name": "Xri'luz Ziquamx", - "item_path": "/obj/item/clothing/suit/storage/toggle/eloncake" -} diff --git a/customs/config/examples/example-customkit.json b/customs/config/examples/example-customkit.json deleted file mode 100644 index 91c68521f2482..0000000000000 --- a/customs/config/examples/example-customkit.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "ckey": "Hacso", - "character_name": "noone", - "item_path": "/obj/item/custkit/example" -} diff --git a/customs/config/examples/example-item.json b/customs/config/examples/example-item.json deleted file mode 100644 index c1d1ac495fa6a..0000000000000 --- a/customs/config/examples/example-item.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "ckey": "Hacso", - "character_name": "noone", - "item_path": "/obj/item/wrench", - "item_name": "Something", - "item_desc": "Some things", - "item_icon_state": "crystal_wrench" -} diff --git a/customs/config/examples/example-spritekit.json b/customs/config/examples/example-spritekit.json deleted file mode 100644 index d9865ee7f2a88..0000000000000 --- a/customs/config/examples/example-spritekit.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "ckey": "Hacso", - "character_name": "noone", - "item_path": "/obj/item/custkit/sprite", - "item_name": "Something", - "item_desc": "Some things", - "item_icon_state": "some_iconstate", - "additional_data": { - "itemtype": "/obj/item/wrench", - "can_unkit": true - } -} diff --git a/customs/config/hacso-carp.json b/customs/config/hacso-carp.json deleted file mode 100644 index 08994b5cbb03d..0000000000000 --- a/customs/config/hacso-carp.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "ckey": "Hacso", - "character_name": "Hannelor Liebkneht", - "item_path": "/obj/item/clothing/under/hacso" -} diff --git a/customs/config/rassvetsolnca-rev.json b/customs/config/rassvetsolnca-rev.json deleted file mode 100644 index 34b756f55e05e..0000000000000 --- a/customs/config/rassvetsolnca-rev.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "ckey": "RASSVETSOLNCA", - "character_name": "Han Young Soo", - "item_path": "/obj/item/storage/secure/briefcase/zakatneba/solnca", - "req_access": ["ACCESS_FORENSICS"] -} diff --git a/customs/config/zakatneba-rev.json b/customs/config/zakatneba-rev.json deleted file mode 100644 index 459645ce908d2..0000000000000 --- a/customs/config/zakatneba-rev.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "ckey": "ZAKATNEBA", - "character_name": "Sora Ootsuki", - "item_path": "/obj/item/storage/secure/briefcase/zakatneba", - "req_access": ["ACCESS_FORENSICS"] -} diff --git a/customs/icons/mob/custom_items_mob.dmi b/customs/icons/mob/custom_items_mob.dmi deleted file mode 100644 index 6f1061d9c5859..0000000000000 Binary files a/customs/icons/mob/custom_items_mob.dmi and /dev/null differ diff --git a/customs/icons/mob/custom_synthetic.dmi b/customs/icons/mob/custom_synthetic.dmi deleted file mode 100644 index e69de29bb2d1d..0000000000000 diff --git a/customs/icons/obj/custom_items_obj.dmi b/customs/icons/obj/custom_items_obj.dmi deleted file mode 100644 index fc97c30579da5..0000000000000 Binary files a/customs/icons/obj/custom_items_obj.dmi and /dev/null differ diff --git a/dependencies.sh b/dependencies.sh deleted file mode 100644 index 83254509b98a6..0000000000000 --- a/dependencies.sh +++ /dev/null @@ -1,26 +0,0 @@ -#!/bin/bash - -#Project dependencies file -#Final authority on what's required to fully build the project - -# byond version -# Extracted from the Dockerfile. Change by editing Dockerfile's FROM command. -LIST=($(sed -n 's/.*byond:\([0-9]\+\)\.\([0-9]\+\).*/\1 \2/p' Dockerfile)) -export BYOND_MAJOR=${LIST[0]} -export BYOND_MINOR=${LIST[1]} -unset LIST - -#rust_g git tag -export RUST_G_VERSION=0.4.3 - -#bsql git tag -export BSQL_VERSION=v1.4.0.0 - -#node version -export NODE_VERSION=12 - -# PHP version -export PHP_VERSION=5.6 - -# SpacemanDMM git tag -export SPACEMAN_DMM_VERSION=suite-1.4 diff --git a/docs/CODE_OF_CONDUCT.md b/docs/CODE_OF_CONDUCT.md deleted file mode 100644 index cac2e66e7bec1..0000000000000 --- a/docs/CODE_OF_CONDUCT.md +++ /dev/null @@ -1,77 +0,0 @@ -# Code of Conduct -In order to foster a more healthy, productive and friendly contributing environment, the following code is in effect on this repository and all Development category channels on Discord/IRC. - - -## Rules -The following conduct may result in a warning being logged against your account: -* Low-effort comments. ('No.') -* Derogatory comments. -* Trolling. -* Inappropriate content. -* Comments on pull requests not addressing technical or code-related issues. - * Comments expressing general attitude towards or criticism of the change, giving constructive feedback on non-technical aspects, or discussing balance should be made in appropriate non-repo channels, such as the forum, IRC, or Discord. - * The same rule applies to sprite, sound, or map contributions, though there the definition of "technical" will be interpreted rather broadly. - * The following are exempt from this rule: - * The PR's author(s). - * Developers, or other staff members with the right to approve or veto the pull request. - * Emote reactions to pull requests are exempt. Comments on issue reports are exempt so long as they remain on topic. -* Issuing commits, editing wiki pages, commenting, or opening bug reports in bad faith. - * The Head Developer and Developers are obligated to assume good faith until evidence otherwise surfaces. - * Examples: - * Opening a PR you do not personally want merged. - * Exceptions exist on a case-by-case basis for opening PRs on behalf of other people, but they MUST sponsor the PR and be willing to argue in its defense as would any other contributor) - * Opening a PR changing, removing or adding features as a political statement to protest a change you do not like. - * Repeatedly attempting to compel Developers to block a PR you do not agree with. - * This includes over the course of several PRs. -* Disobeying development team members' instructions to cease a line of discussion or move discussion elsewhere. -* Any other conduct deemed unhealthy or unhelpful as discussed on a case-by-case basis among the development team. - -The following conduct is unacceptable and will result in up to three strikes, depending on severity as determined by the Head Developer: -* Derogatory, bigoted or prejudiced language based on race, ethnicity, sex, gender, sexuality, religion, disability, nationality or any other identifiable group. -* Personal or political attacks. -* Public or private harassment. - - -## Warnings and Punishments -Accumulating three warnings will result in a repository ban. The Developer issuing the ban may optionally ban the violating contributor from development channels in Discord for the duration of their repository ban. -Warnings expire in six months from the date of warning. -**Severe violations of this code of conduct may result in community or game server bans.** - -* The first issued ban against your account will result in a **one week ban**, which may be appealed after four days. -* The second issued ban against your account will result in a **one month ban**, which may be appealed after two weeks. -* The third issued ban against your account will result in a **permanent ban**, which may be appealed after one month. -* Every subsequent ban will result in a permanent ban until appeal as described above. - * Fully serving or successfully appealing a ban will remove the oldest warning, resulting in two. - - -## Developer Responsibilities -The Head Developer has the responsiblity to: -* Clarify the standards of acceptable behaviour -* Handle the appeals process for all issued bans - -All Developers have the responsibility to: -* Take appropriate and fair corrective action in response to any instances of unacceptable behaviour -* Properly log all corrective action they take in the relevant thread - -All Developers have the right to: -* Remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct -* Issue warnings in accordance with the Code of Conduct (except in the cases elaborated in the second section of the Rules category, which require conference with the Head Developer) -* Temporarily ban any contributor from Discord development channels for behaviour not aligned to this Code of Conduct, for a period up to three days - * Any such ban issued will be accompanied by a warning, and will be logged - -## Enforcement -Instances of abusive, harassing, or otherwise unacceptable behaviour may be reported by contacting the Head Developer on Discord. The Head Developer will review and investigate all complaints, and will respond in a way that they deem appropriate to the circumstances. The Head Developer is obligated to maintain confidentiality with regard to the reporter of an incident. - -Developers who do not follow or enforce the Code of Conduct in good faith may face temporary or permanent repercussions as determined by the Head Developer. - - -## Modifications -Modifications to this code of conduct may be made by any contributor by way of a pull request, and will be considered by the development staff. Any accepted modifications will be announced in the #news channel on Discord, and on the forums. - - -## Attribution -This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, available at [http://contributor-covenant.org/version/1/4][version] - -[homepage]: http://contributor-covenant.org -[version]: http://contributor-covenant.org/version/1/4/ - diff --git a/docs/GPL3.txt b/docs/GPL3.txt deleted file mode 100644 index 94a9ed024d385..0000000000000 --- a/docs/GPL3.txt +++ /dev/null @@ -1,674 +0,0 @@ - GNU GENERAL PUBLIC LICENSE - Version 3, 29 June 2007 - - Copyright (C) 2007 Free Software Foundation, Inc. - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The GNU General Public License is a free, copyleft license for -software and other kinds of works. - - The licenses for most software and other practical works are designed -to take away your freedom to share and change the works. By contrast, -the GNU General Public License is intended to guarantee your freedom to -share and change all versions of a program--to make sure it remains free -software for all its users. We, the Free Software Foundation, use the -GNU General Public License for most of our software; it applies also to -any other work released this way by its authors. You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -them if you wish), that you receive source code or can get it if you -want it, that you can change the software or use pieces of it in new -free programs, and that you know you can do these things. - - To protect your rights, we need to prevent others from denying you -these rights or asking you to surrender the rights. Therefore, you have -certain responsibilities if you distribute copies of the software, or if -you modify it: responsibilities to respect the freedom of others. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must pass on to the recipients the same -freedoms that you received. You must make sure that they, too, receive -or can get the source code. And you must show them these terms so they -know their rights. - - Developers that use the GNU GPL protect your rights with two steps: -(1) assert copyright on the software, and (2) offer you this License -giving you legal permission to copy, distribute and/or modify it. - - For the developers' and authors' protection, the GPL clearly explains -that there is no warranty for this free software. For both users' and -authors' sake, the GPL requires that modified versions be marked as -changed, so that their problems will not be attributed erroneously to -authors of previous versions. - - Some devices are designed to deny users access to install or run -modified versions of the software inside them, although the manufacturer -can do so. This is fundamentally incompatible with the aim of -protecting users' freedom to change the software. The systematic -pattern of such abuse occurs in the area of products for individuals to -use, which is precisely where it is most unacceptable. Therefore, we -have designed this version of the GPL to prohibit the practice for those -products. If such problems arise substantially in other domains, we -stand ready to extend this provision to those domains in future versions -of the GPL, as needed to protect the freedom of users. - - Finally, every program is threatened constantly by software patents. -States should not allow patents to restrict development and use of -software on general-purpose computers, but in those that do, we wish to -avoid the special danger that patents applied to a free program could -make it effectively proprietary. To prevent this, the GPL assures that -patents cannot be used to render the program non-free. - - The precise terms and conditions for copying, distribution and -modification follow. - - TERMS AND CONDITIONS - - 0. Definitions. - - "This License" refers to version 3 of the GNU General Public License. - - "Copyright" also means copyright-like laws that apply to other kinds of -works, such as semiconductor masks. - - "The Program" refers to any copyrightable work licensed under this -License. Each licensee is addressed as "you". "Licensees" and -"recipients" may be individuals or organizations. - - To "modify" a work means to copy from or adapt all or part of the work -in a fashion requiring copyright permission, other than the making of an -exact copy. The resulting work is called a "modified version" of the -earlier work or a work "based on" the earlier work. - - A "covered work" means either the unmodified Program or a work based -on the Program. - - To "propagate" a work means to do anything with it that, without -permission, would make you directly or secondarily liable for -infringement under applicable copyright law, except executing it on a -computer or modifying a private copy. Propagation includes copying, -distribution (with or without modification), making available to the -public, and in some countries other activities as well. - - To "convey" a work means any kind of propagation that enables other -parties to make or receive copies. Mere interaction with a user through -a computer network, with no transfer of a copy, is not conveying. - - An interactive user interface displays "Appropriate Legal Notices" -to the extent that it includes a convenient and prominently visible -feature that (1) displays an appropriate copyright notice, and (2) -tells the user that there is no warranty for the work (except to the -extent that warranties are provided), that licensees may convey the -work under this License, and how to view a copy of this License. If -the interface presents a list of user commands or options, such as a -menu, a prominent item in the list meets this criterion. - - 1. Source Code. - - The "source code" for a work means the preferred form of the work -for making modifications to it. "Object code" means any non-source -form of a work. - - A "Standard Interface" means an interface that either is an official -standard defined by a recognized standards body, or, in the case of -interfaces specified for a particular programming language, one that -is widely used among developers working in that language. - - The "System Libraries" of an executable work include anything, other -than the work as a whole, that (a) is included in the normal form of -packaging a Major Component, but which is not part of that Major -Component, and (b) serves only to enable use of the work with that -Major Component, or to implement a Standard Interface for which an -implementation is available to the public in source code form. A -"Major Component", in this context, means a major essential component -(kernel, window system, and so on) of the specific operating system -(if any) on which the executable work runs, or a compiler used to -produce the work, or an object code interpreter used to run it. - - The "Corresponding Source" for a work in object code form means all -the source code needed to generate, install, and (for an executable -work) run the object code and to modify the work, including scripts to -control those activities. However, it does not include the work's -System Libraries, or general-purpose tools or generally available free -programs which are used unmodified in performing those activities but -which are not part of the work. For example, Corresponding Source -includes interface definition files associated with source files for -the work, and the source code for shared libraries and dynamically -linked subprograms that the work is specifically designed to require, -such as by intimate data communication or control flow between those -subprograms and other parts of the work. - - The Corresponding Source need not include anything that users -can regenerate automatically from other parts of the Corresponding -Source. - - The Corresponding Source for a work in source code form is that -same work. - - 2. Basic Permissions. - - All rights granted under this License are granted for the term of -copyright on the Program, and are irrevocable provided the stated -conditions are met. This License explicitly affirms your unlimited -permission to run the unmodified Program. The output from running a -covered work is covered by this License only if the output, given its -content, constitutes a covered work. This License acknowledges your -rights of fair use or other equivalent, as provided by copyright law. - - You may make, run and propagate covered works that you do not -convey, without conditions so long as your license otherwise remains -in force. You may convey covered works to others for the sole purpose -of having them make modifications exclusively for you, or provide you -with facilities for running those works, provided that you comply with -the terms of this License in conveying all material for which you do -not control copyright. Those thus making or running the covered works -for you must do so exclusively on your behalf, under your direction -and control, on terms that prohibit them from making any copies of -your copyrighted material outside their relationship with you. - - Conveying under any other circumstances is permitted solely under -the conditions stated below. Sublicensing is not allowed; section 10 -makes it unnecessary. - - 3. Protecting Users' Legal Rights From Anti-Circumvention Law. - - No covered work shall be deemed part of an effective technological -measure under any applicable law fulfilling obligations under article -11 of the WIPO copyright treaty adopted on 20 December 1996, or -similar laws prohibiting or restricting circumvention of such -measures. - - When you convey a covered work, you waive any legal power to forbid -circumvention of technological measures to the extent such circumvention -is effected by exercising rights under this License with respect to -the covered work, and you disclaim any intention to limit operation or -modification of the work as a means of enforcing, against the work's -users, your or third parties' legal rights to forbid circumvention of -technological measures. - - 4. Conveying Verbatim Copies. - - You may convey verbatim copies of the Program's source code as you -receive it, in any medium, provided that you conspicuously and -appropriately publish on each copy an appropriate copyright notice; -keep intact all notices stating that this License and any -non-permissive terms added in accord with section 7 apply to the code; -keep intact all notices of the absence of any warranty; and give all -recipients a copy of this License along with the Program. - - You may charge any price or no price for each copy that you convey, -and you may offer support or warranty protection for a fee. - - 5. Conveying Modified Source Versions. - - You may convey a work based on the Program, or the modifications to -produce it from the Program, in the form of source code under the -terms of section 4, provided that you also meet all of these conditions: - - a) The work must carry prominent notices stating that you modified - it, and giving a relevant date. - - b) The work must carry prominent notices stating that it is - released under this License and any conditions added under section - 7. This requirement modifies the requirement in section 4 to - "keep intact all notices". - - c) You must license the entire work, as a whole, under this - License to anyone who comes into possession of a copy. This - License will therefore apply, along with any applicable section 7 - additional terms, to the whole of the work, and all its parts, - regardless of how they are packaged. This License gives no - permission to license the work in any other way, but it does not - invalidate such permission if you have separately received it. - - d) If the work has interactive user interfaces, each must display - Appropriate Legal Notices; however, if the Program has interactive - interfaces that do not display Appropriate Legal Notices, your - work need not make them do so. - - A compilation of a covered work with other separate and independent -works, which are not by their nature extensions of the covered work, -and which are not combined with it such as to form a larger program, -in or on a volume of a storage or distribution medium, is called an -"aggregate" if the compilation and its resulting copyright are not -used to limit the access or legal rights of the compilation's users -beyond what the individual works permit. Inclusion of a covered work -in an aggregate does not cause this License to apply to the other -parts of the aggregate. - - 6. Conveying Non-Source Forms. - - You may convey a covered work in object code form under the terms -of sections 4 and 5, provided that you also convey the -machine-readable Corresponding Source under the terms of this License, -in one of these ways: - - a) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by the - Corresponding Source fixed on a durable physical medium - customarily used for software interchange. - - b) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by a - written offer, valid for at least three years and valid for as - long as you offer spare parts or customer support for that product - model, to give anyone who possesses the object code either (1) a - copy of the Corresponding Source for all the software in the - product that is covered by this License, on a durable physical - medium customarily used for software interchange, for a price no - more than your reasonable cost of physically performing this - conveying of source, or (2) access to copy the - Corresponding Source from a network server at no charge. - - c) Convey individual copies of the object code with a copy of the - written offer to provide the Corresponding Source. This - alternative is allowed only occasionally and noncommercially, and - only if you received the object code with such an offer, in accord - with subsection 6b. - - d) Convey the object code by offering access from a designated - place (gratis or for a charge), and offer equivalent access to the - Corresponding Source in the same way through the same place at no - further charge. You need not require recipients to copy the - Corresponding Source along with the object code. If the place to - copy the object code is a network server, the Corresponding Source - may be on a different server (operated by you or a third party) - that supports equivalent copying facilities, provided you maintain - clear directions next to the object code saying where to find the - Corresponding Source. Regardless of what server hosts the - Corresponding Source, you remain obligated to ensure that it is - available for as long as needed to satisfy these requirements. - - e) Convey the object code using peer-to-peer transmission, provided - you inform other peers where the object code and Corresponding - Source of the work are being offered to the general public at no - charge under subsection 6d. - - A separable portion of the object code, whose source code is excluded -from the Corresponding Source as a System Library, need not be -included in conveying the object code work. - - A "User Product" is either (1) a "consumer product", which means any -tangible personal property which is normally used for personal, family, -or household purposes, or (2) anything designed or sold for incorporation -into a dwelling. In determining whether a product is a consumer product, -doubtful cases shall be resolved in favor of coverage. For a particular -product received by a particular user, "normally used" refers to a -typical or common use of that class of product, regardless of the status -of the particular user or of the way in which the particular user -actually uses, or expects or is expected to use, the product. A product -is a consumer product regardless of whether the product has substantial -commercial, industrial or non-consumer uses, unless such uses represent -the only significant mode of use of the product. - - "Installation Information" for a User Product means any methods, -procedures, authorization keys, or other information required to install -and execute modified versions of a covered work in that User Product from -a modified version of its Corresponding Source. The information must -suffice to ensure that the continued functioning of the modified object -code is in no case prevented or interfered with solely because -modification has been made. - - If you convey an object code work under this section in, or with, or -specifically for use in, a User Product, and the conveying occurs as -part of a transaction in which the right of possession and use of the -User Product is transferred to the recipient in perpetuity or for a -fixed term (regardless of how the transaction is characterized), the -Corresponding Source conveyed under this section must be accompanied -by the Installation Information. But this requirement does not apply -if neither you nor any third party retains the ability to install -modified object code on the User Product (for example, the work has -been installed in ROM). - - The requirement to provide Installation Information does not include a -requirement to continue to provide support service, warranty, or updates -for a work that has been modified or installed by the recipient, or for -the User Product in which it has been modified or installed. Access to a -network may be denied when the modification itself materially and -adversely affects the operation of the network or violates the rules and -protocols for communication across the network. - - Corresponding Source conveyed, and Installation Information provided, -in accord with this section must be in a format that is publicly -documented (and with an implementation available to the public in -source code form), and must require no special password or key for -unpacking, reading or copying. - - 7. Additional Terms. - - "Additional permissions" are terms that supplement the terms of this -License by making exceptions from one or more of its conditions. -Additional permissions that are applicable to the entire Program shall -be treated as though they were included in this License, to the extent -that they are valid under applicable law. If additional permissions -apply only to part of the Program, that part may be used separately -under those permissions, but the entire Program remains governed by -this License without regard to the additional permissions. - - When you convey a copy of a covered work, you may at your option -remove any additional permissions from that copy, or from any part of -it. (Additional permissions may be written to require their own -removal in certain cases when you modify the work.) You may place -additional permissions on material, added by you to a covered work, -for which you have or can give appropriate copyright permission. - - Notwithstanding any other provision of this License, for material you -add to a covered work, you may (if authorized by the copyright holders of -that material) supplement the terms of this License with terms: - - a) Disclaiming warranty or limiting liability differently from the - terms of sections 15 and 16 of this License; or - - b) Requiring preservation of specified reasonable legal notices or - author attributions in that material or in the Appropriate Legal - Notices displayed by works containing it; or - - c) Prohibiting misrepresentation of the origin of that material, or - requiring that modified versions of such material be marked in - reasonable ways as different from the original version; or - - d) Limiting the use for publicity purposes of names of licensors or - authors of the material; or - - e) Declining to grant rights under trademark law for use of some - trade names, trademarks, or service marks; or - - f) Requiring indemnification of licensors and authors of that - material by anyone who conveys the material (or modified versions of - it) with contractual assumptions of liability to the recipient, for - any liability that these contractual assumptions directly impose on - those licensors and authors. - - All other non-permissive additional terms are considered "further -restrictions" within the meaning of section 10. If the Program as you -received it, or any part of it, contains a notice stating that it is -governed by this License along with a term that is a further -restriction, you may remove that term. If a license document contains -a further restriction but permits relicensing or conveying under this -License, you may add to a covered work material governed by the terms -of that license document, provided that the further restriction does -not survive such relicensing or conveying. - - If you add terms to a covered work in accord with this section, you -must place, in the relevant source files, a statement of the -additional terms that apply to those files, or a notice indicating -where to find the applicable terms. - - Additional terms, permissive or non-permissive, may be stated in the -form of a separately written license, or stated as exceptions; -the above requirements apply either way. - - 8. Termination. - - You may not propagate or modify a covered work except as expressly -provided under this License. Any attempt otherwise to propagate or -modify it is void, and will automatically terminate your rights under -this License (including any patent licenses granted under the third -paragraph of section 11). - - However, if you cease all violation of this License, then your -license from a particular copyright holder is reinstated (a) -provisionally, unless and until the copyright holder explicitly and -finally terminates your license, and (b) permanently, if the copyright -holder fails to notify you of the violation by some reasonable means -prior to 60 days after the cessation. - - Moreover, your license from a particular copyright holder is -reinstated permanently if the copyright holder notifies you of the -violation by some reasonable means, this is the first time you have -received notice of violation of this License (for any work) from that -copyright holder, and you cure the violation prior to 30 days after -your receipt of the notice. - - Termination of your rights under this section does not terminate the -licenses of parties who have received copies or rights from you under -this License. If your rights have been terminated and not permanently -reinstated, you do not qualify to receive new licenses for the same -material under section 10. - - 9. Acceptance Not Required for Having Copies. - - You are not required to accept this License in order to receive or -run a copy of the Program. Ancillary propagation of a covered work -occurring solely as a consequence of using peer-to-peer transmission -to receive a copy likewise does not require acceptance. However, -nothing other than this License grants you permission to propagate or -modify any covered work. These actions infringe copyright if you do -not accept this License. Therefore, by modifying or propagating a -covered work, you indicate your acceptance of this License to do so. - - 10. Automatic Licensing of Downstream Recipients. - - Each time you convey a covered work, the recipient automatically -receives a license from the original licensors, to run, modify and -propagate that work, subject to this License. You are not responsible -for enforcing compliance by third parties with this License. - - An "entity transaction" is a transaction transferring control of an -organization, or substantially all assets of one, or subdividing an -organization, or merging organizations. If propagation of a covered -work results from an entity transaction, each party to that -transaction who receives a copy of the work also receives whatever -licenses to the work the party's predecessor in interest had or could -give under the previous paragraph, plus a right to possession of the -Corresponding Source of the work from the predecessor in interest, if -the predecessor has it or can get it with reasonable efforts. - - You may not impose any further restrictions on the exercise of the -rights granted or affirmed under this License. For example, you may -not impose a license fee, royalty, or other charge for exercise of -rights granted under this License, and you may not initiate litigation -(including a cross-claim or counterclaim in a lawsuit) alleging that -any patent claim is infringed by making, using, selling, offering for -sale, or importing the Program or any portion of it. - - 11. Patents. - - A "contributor" is a copyright holder who authorizes use under this -License of the Program or a work on which the Program is based. The -work thus licensed is called the contributor's "contributor version". - - A contributor's "essential patent claims" are all patent claims -owned or controlled by the contributor, whether already acquired or -hereafter acquired, that would be infringed by some manner, permitted -by this License, of making, using, or selling its contributor version, -but do not include claims that would be infringed only as a -consequence of further modification of the contributor version. For -purposes of this definition, "control" includes the right to grant -patent sublicenses in a manner consistent with the requirements of -this License. - - Each contributor grants you a non-exclusive, worldwide, royalty-free -patent license under the contributor's essential patent claims, to -make, use, sell, offer for sale, import and otherwise run, modify and -propagate the contents of its contributor version. - - In the following three paragraphs, a "patent license" is any express -agreement or commitment, however denominated, not to enforce a patent -(such as an express permission to practice a patent or covenant not to -sue for patent infringement). To "grant" such a patent license to a -party means to make such an agreement or commitment not to enforce a -patent against the party. - - If you convey a covered work, knowingly relying on a patent license, -and the Corresponding Source of the work is not available for anyone -to copy, free of charge and under the terms of this License, through a -publicly available network server or other readily accessible means, -then you must either (1) cause the Corresponding Source to be so -available, or (2) arrange to deprive yourself of the benefit of the -patent license for this particular work, or (3) arrange, in a manner -consistent with the requirements of this License, to extend the patent -license to downstream recipients. "Knowingly relying" means you have -actual knowledge that, but for the patent license, your conveying the -covered work in a country, or your recipient's use of the covered work -in a country, would infringe one or more identifiable patents in that -country that you have reason to believe are valid. - - If, pursuant to or in connection with a single transaction or -arrangement, you convey, or propagate by procuring conveyance of, a -covered work, and grant a patent license to some of the parties -receiving the covered work authorizing them to use, propagate, modify -or convey a specific copy of the covered work, then the patent license -you grant is automatically extended to all recipients of the covered -work and works based on it. - - A patent license is "discriminatory" if it does not include within -the scope of its coverage, prohibits the exercise of, or is -conditioned on the non-exercise of one or more of the rights that are -specifically granted under this License. You may not convey a covered -work if you are a party to an arrangement with a third party that is -in the business of distributing software, under which you make payment -to the third party based on the extent of your activity of conveying -the work, and under which the third party grants, to any of the -parties who would receive the covered work from you, a discriminatory -patent license (a) in connection with copies of the covered work -conveyed by you (or copies made from those copies), or (b) primarily -for and in connection with specific products or compilations that -contain the covered work, unless you entered into that arrangement, -or that patent license was granted, prior to 28 March 2007. - - Nothing in this License shall be construed as excluding or limiting -any implied license or other defenses to infringement that may -otherwise be available to you under applicable patent law. - - 12. No Surrender of Others' Freedom. - - If conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot convey a -covered work so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you may -not convey it at all. For example, if you agree to terms that obligate you -to collect a royalty for further conveying from those to whom you convey -the Program, the only way you could satisfy both those terms and this -License would be to refrain entirely from conveying the Program. - - 13. Use with the GNU Affero General Public License. - - Notwithstanding any other provision of this License, you have -permission to link or combine any covered work with a work licensed -under version 3 of the GNU Affero General Public License into a single -combined work, and to convey the resulting work. The terms of this -License will continue to apply to the part which is the covered work, -but the special requirements of the GNU Affero General Public License, -section 13, concerning interaction through a network will apply to the -combination as such. - - 14. Revised Versions of this License. - - The Free Software Foundation may publish revised and/or new versions of -the GNU General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - - Each version is given a distinguishing version number. If the -Program specifies that a certain numbered version of the GNU General -Public License "or any later version" applies to it, you have the -option of following the terms and conditions either of that numbered -version or of any later version published by the Free Software -Foundation. If the Program does not specify a version number of the -GNU General Public License, you may choose any version ever published -by the Free Software Foundation. - - If the Program specifies that a proxy can decide which future -versions of the GNU General Public License can be used, that proxy's -public statement of acceptance of a version permanently authorizes you -to choose that version for the Program. - - Later license versions may give you additional or different -permissions. However, no additional obligations are imposed on any -author or copyright holder as a result of your choosing to follow a -later version. - - 15. Disclaimer of Warranty. - - THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY -APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT -HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY -OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, -THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM -IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF -ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. Limitation of Liability. - - IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS -THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY -GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE -USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF -DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD -PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), -EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF -SUCH DAMAGES. - - 17. Interpretation of Sections 15 and 16. - - If the disclaimer of warranty and limitation of liability provided -above cannot be given local legal effect according to their terms, -reviewing courts shall apply local law that most closely approximates -an absolute waiver of all civil liability in connection with the -Program, unless a warranty or assumption of liability accompanies a -copy of the Program in return for a fee. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -state the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - -Also add information on how to contact you by electronic and paper mail. - - If the program does terminal interaction, make it output a short -notice like this when it starts in an interactive mode: - - Copyright (C) - This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, your program's commands -might be different; for a GUI interface, you would use an "about box". - - You should also get your employer (if you work as a programmer) or school, -if any, to sign a "copyright disclaimer" for the program, if necessary. -For more information on this, and how to apply and follow the GNU GPL, see -. - - The GNU General Public License does not permit incorporating your program -into proprietary programs. If your program is a subroutine library, you -may consider it more useful to permit linking proprietary applications with -the library. If this is what you want to do, use the GNU Lesser General -Public License instead of this License. But first, please read -. diff --git a/docs/SECURITY.md b/docs/SECURITY.md deleted file mode 100644 index ed808bcbc88b7..0000000000000 --- a/docs/SECURITY.md +++ /dev/null @@ -1,9 +0,0 @@ -# Security Policy - -## Supported Versions - -This repository is built and tested against BYOND version `512.1485` at time of writing. If this version number is at odds with `BYOND_MAJOR`.`BYOND_MINOR` as defined in [`./github/workflows/test.yml`](https://github.com/Baystation12/Baystation12/blob/dev/.github/workflows/test.yml#L12), the Actions configuration should be considered authoritative and this document should be noted as out of date. Security vulnerabilities or exploits that apply to this version should be reported so that they can be closed. - -## Reporting a Vulnerability - -If you have been informed of or discovered a security vulnerability, exploit or other flaw, please contact a developer to report it privately. Public channels on Discord or the forums should be avoided, as the exploit may be taken from a public post and used before it can be patched. diff --git a/docs/folder_note.md b/docs/folder_note.md deleted file mode 100644 index da68fea1ffa0e..0000000000000 --- a/docs/folder_note.md +++ /dev/null @@ -1,11 +0,0 @@ -GitHub allows repositories to create files which activate certain presentation features on their website. -GitHub looks for these files placed in the root directory, [/docs](/docs), and [/.github](/.github). -Only one copy of a file is necessary in any of these folders. Do not place multiple copies. - -Files pertaining to GitHub presentation *only* should be placed in `/.github`. - -Procedural and documentative information should be placed in `/docs`. Current and active legal information, -as well as the primary README.md, should be kept in `root`. - -If any of these folder's contents conflict with terms and procedures defined in `root` or `/docs`, then `root` -or `/docs` will take precedence, in that order. \ No newline at end of file diff --git a/docs/installation.md b/docs/installation.md deleted file mode 100644 index c2d0bdb7fad98..0000000000000 --- a/docs/installation.md +++ /dev/null @@ -1,85 +0,0 @@ -### GETTING THE CODE - -The simplest way to obtain the code is using Github's .zip feature. - -Click [here](https://github.com/Baystation12/Baystation12/archive/dev.zip) to get the latest code as a .zip file, then unzip it to wherever you want. - -The more complicated and easier to update method is using git. You'll need to download git or some client from [here](http://git-scm.com/). When that's installed, right click in any folder and click on "Git Bash". When that opens, type in: - - git clone https://github.com/Baystation12/Baystation12.git - -(hint: hold down ctrl and press insert to paste into git bash) - -This will take a while to download, but it provides an easier method for updating. - ---- - -### INSTALLATION - -First-time installation should be fairly straightforward. First, you'll need BYOND installed. You can get it from [here](http://www.byond.com/). - -This is a sourcecode-only release, so the next step is to compile the server files. Open `baystation12.dme` by double-clicking it, open the Build menu, and click compile. This'll take a little while, and if everything's done right you'll get a message like this: - - saving baystation12.dmb (DEBUG mode) - - baystation12.dmb - 0 errors, 0 warnings - -If you see any errors or warnings, something has gone wrong - possibly a corrupt download or the files extracted wrong, or a code issue on the main repo. Ask on IRC or discord. - ---- - -### CONFIGURATION - -Copy the contents of the `/config/examples` folder into `/config`. You will now work with everthing contained within `/config`. - -Edit `config.txt` to set the probabilities for different gamemodes in Secret and to set your server location so that all your players don't get disconnected at the end of each round. It's recommended you don't turn on the gamemodes with probability 0, as they have various issues and aren't currently being tested, they may have unknown and bizarre bugs. - -Edit `admins.txt` to remove the default admins and add your own. "Game Master" is the highest level of access, and the other recommended admin levels for now are "Game Admin" and "Moderator". The format is: - - byondkey - Rank - -where the BYOND key must be in lowercase and the admin rank must be properly capitalised. There are a bunch more admin ranks, but these two should be enough for most servers, assuming you have trustworthy admins. - -To start the server, run Dream Daemon and enter the path to your compiled `baystation12.dmb` file. Make sure to set the port to the one you specified in the `config.txt`, and set the Security box to 'Trusted' so you don't have to confirm access to every single configuration and storage file for the server. Then press GO and the server should start up and be ready to join. - ---- - -### WEBHOOKS - -If you wish to use Discord webhooks, which are a way of passing information from the server to a Discord channel, you will need to copy `webhooks.json` into `config/` from `config/example/` and add definitions pointing the desired event at the desired [Discord webhook URL](https://support.discordapp.com/hc/en-us/articles/228383668-Intro-to-Webhooks). Valid webhook IDs as of time of writing are as follows: -- webhook_roundend: The round has ended. Will include the mode name and summarize survivors and ghosts. -- webhook_roundstart: The master controller has finished initializing and the round will begin soon. -- webhook_ooc: Displaying OCC chat. -- webhook_submap_loaded: A submap has been loaded and placed, and is available for people to join. Includes the name of the submap. -- webhook_submap_vox: The vox submap specifically has been loaded and placed. This is distinct for the purposes of tagging vox players with a @mention. -- webhook_submap_skrell: The Skrell submap specifically has been loaded and placed. This is distinct for the purposes of tagging Skrell players with a @mention. -- webhook_custom_event: The custom event text for the round has been set or changed. - -Each definition can optionally include an array of roles to mention when the webhook is called. Roles must be provided using the role ID (ex. `<@&555231866735689749>`), which can be obtained by writing `\@somerole` into the chat, in order for pinging to work correctly. - -Webhooks additionally require a HTTP POST library called [byhttp](https://github.com/Lohikar/byhttp). The compiled lib, `byhttp.dll` on Windows or `libbyhttp.so` on Linux, must be placed in the lib directory by default in order for webhooks to function. The DLL location can be customized by supplying `WINDOWS_HTTP_POST_DLL_LOCATION` `UNIX_HTTP_POST_DLL_LOCATION`, or `HTTP_POST_DLL_LOCATION` as preprocessor macros containing the desired path. - ---- - -### UPDATING - -To update an existing installation, first back up your `/config` and `/data` folders -as these store your server configuration, player preferences and banlist. - -If you used the zip method, you'll need to download the zip file again and unzip it somewhere else, and then copy the `/config` and `/data` folders over. - -If you used the git method, you simply need to type this in to git bash: - - git pull - -When this completes, copy over your `/data` and `/config` folders again, just in case. - -When you have done this, you'll need to recompile the code, but then it should work fine. - ---- - -### SQL Setup - -The SQL backend for the `/library/stats` and bans requires a MySQL server. Your server details go in `/config/dbconfig.txt`. - -For initial setup and migrations refer to `/sql/README.md` diff --git a/html/88x31.png b/html/88x31.png deleted file mode 100644 index 0f2a0f10722d3..0000000000000 Binary files a/html/88x31.png and /dev/null differ diff --git a/html/archivedchangelog.html b/html/archivedchangelog.html deleted file mode 100644 index 9831f594c140a..0000000000000 --- a/html/archivedchangelog.html +++ /dev/null @@ -1,970 +0,0 @@ - - -
                  -

                  December 28nd

                  -

                  Cael_Aislinn updated:

                  - -
                  - -
                  -

                  November 2012 - January 2013

                  -

                  chinsky updated:

                  -
                    -
                  • Several cargo crates from pre-merge were ported.
                  • -
                  • Contraband crate is no longer labeled as such.
                  • -
                  • In space, no one can hear you scream now.
                  • -
                  -

                  CIB updated:

                  -
                    -
                  • Airflow produces subtle sound effects now.
                  • -
                  • Events are now adjusted based on department activity.
                  • -
                  • The virus event will spawn BS12 vira.
                  • -
                  • Two new traitor objectives: Brig and Harm
                  • -
                  • Space no longer makes rooms cold.
                  • -
                  • Gibbing creates actual limbs you can pick up, if you're lucky a complete head with brain.
                  • -
                  • It's now possible to miss in combat(melee and guns), instead of just hitting the torso rather than the head. This makes targetting the head much riskier than before.
                  • -
                  • Chemicals now last 10x as long in the blood, but their effect is also reduced equally.
                  • -
                  • IV drips now have a right-click option to take blood rather than give it.
                  • -
                  • Everyone gets a crew manifest.
                  • -
                  -

                  CaelAislinn updated:

                  -
                    -
                  • There now is a client-toggle for whether to become a space-ninja.
                  • -
                  • Reduced startup lag by removing a vermin-related proc.
                  • -
                  • Several alien balance fixes.
                  • -
                  -

                  Ravensdale updated:

                  -
                    -
                  • Ported station-wide explosion sounds.
                  • -
                  -
                  - -
                  -

                  December 3rd

                  -

                  Cael_Aislinn updated:

                  -
                    -
                  • Aliens have been significantly nerfed: neurotoxin is affected by bio protection suits, tackle stuns for much shorter time and facehuggers have a chance to fail when leaping.
                  • -
                  -
                  - -
                  -

                  23.11.12

                  -

                  CIB updated:

                  -
                    -
                  • Cryo now temporarily stops bleeding, meaning you can shove the patient in there while you prepare IV and surgery.
                  • -
                  -
                  - -
                  -

                  14.11.12

                  -

                  Chinsky updated:

                  -
                    -
                  • Virologist are now alt title of Medical Doctor, like Surgeon or EMT. All medical jobs now have virology access.
                  • -
                  • Added scientist alt titles.
                  • -
                  -

                  CIB updated:

                  -
                    -
                  • Lungs can now rupture from exposure to low oxygen environments. Use alien-surgery, and then scalpel instead of hemostat, to fix.
                  • -
                  • Bandage/ointment healing sped up by a factor 10.
                  • -
                  • Ported autopsy.
                  • -
                  -
                  - -
                  -

                  November 12th

                  -

                  CIB updated:

                  -
                    -
                  • Wounds can now get infected in surgery if the surgeon doesn't wash his hands first. Infected wounds can be treated with ointment(though it'll take a while to take effect).
                  • -
                  • Large amounts of damage can now trigger internal bleeding. Internal bleeding can be recognized in the stationary body scanner, and can be treated through surgery with VeinOFix.
                  • -
                  -
                  - -
                  -

                  November 11th

                  -

                  CIB updated:

                  -
                    -
                  • DNA injectors now have a small chance(5%) to trigger a genetic side-effect. See the paper in the genetics lobby for recognition and treatment.
                  • -
                  -
                  - -
                  -

                  November 9th

                  -

                  AterIgnis updated:

                  -
                    -
                  • Chemistry explosions try to damage their holder first - potassium-water mixes and nitroglycerol tend to gib human if injected instead of creating crater around them
                  • -
                  • Reagents mix and react inside humans, but they don't bubble in that case (try not to give patient water and potassium at the same time)
                  • -
                  • Ethanol-based drinks (alcohol) is treated like ethanol now and can be used in reactions. Ethanol->water reaction now properly makes drunk people sober by removing alcohol, not just temporarily sobering them.
                  • -
                  -
                  - -
                  -

                  6.11.2012

                  -

                  Chinsky updated:

                  -
                    -
                  • Crew Transfer shuttles are back.
                  • -
                  • Readded pre-merge photo system. Instead of one picture as icon, now photo can be examined to see 3x3 screenshot.
                  • -
                  • Custom items system is back. If your item is not spawning or is missing icon, report it.
                  • -
                  • Alt job titles system is back. For noe medical titles (MD/Surgeon/EMT) and Detective/Foreniscs Tech.
                  • -
                  • ROBUSTING CHANGE: Disarming someone with gun in hand has chance that said gun will go off in random direction. With veruy real posibility of you getting shot.
                  • -
                  • FLYING BATON OF JUSTICE: Turned on stunbaton has 50% chance of stunning if thrown at someone.
                  • -
                  • Character medical and security records can again be set on char setup.
                  • -
                  • Vote window now will go away (thanks TG for fix)
                  • -
                  • Maybe something else, play and you will find.
                  • -
                  -
                  - -
                  -

                  November 4th

                  -

                  SkyMarshal updated:

                  -
                    -
                  • Changed Grenade behavior to how it used to be.
                  • -
                  • Security HUDs now properly display job info.
                  • -
                  • PolyAcid is now slightly buffed, as it no longer has a pitiful 15% change of melting a helmet. (Guaranteed helmet-removal.)
                  • -
                  -
                  - -
                  -

                  October 24th

                  -

                  Mij updated:

                  -
                    -
                  • Get ready for some xenoarch love! Re-added artifact and strange rock spawning at world gen.
                  • -
                  • Strange rocks react to fire only now, until I can hammer out how acid works. Technically acid does do something to them.... ;)
                  • -
                  • Re-added a number of mining/xenoarch related icons. Changed ore boxes to look prettier, like they used to.
                  • -
                  -
                  - -
                  -

                  October 22nd

                  -

                  Cael_Aislinn updated:

                  - -
                  - -
                  -

                  October 18th

                  -

                  CIB updated:

                  -
                    -
                  • Added a new type of wound, internal wounds. These should later be treated with surgery, though for now bicardine works.
                  • -
                  • Appendicitis now has a fourth stage in which the appendix burst and an internal wound is inflicted.
                  • -
                  • The full body scanner is back.
                  • -
                  -

                  Chinsky updated:

                  -
                    -
                  • Buffed up welder fuel tanks for all your nefarious needs.
                  • -
                  • Replaced evac hallway lights with less.. party ones.
                  • -
                  -
                  - -
                  -

                  17.10.2012

                  -

                  CIB updated:

                  -
                    -
                  • Ported limb selection on startup. Note that this may still be bugged, so use at own risk.
                  • -
                  • You can now select opposite gender hairstyles.
                  • -
                  -

                  Chinsky updated:

                  -
                    -
                  • Fixed arrivals announcment.
                  • -
                  • Slur will properly fade away with time now.
                  • -
                  • Anti-alco chem will get rid of slur now.
                  • -
                  • Throwing metal item at eletrified grilles and doors will cause them to spark.
                  • -
                  • Added forensics tech jackets.
                  • -
                  • Ported some hairstyles from pre-merge code.
                  • -
                  -
                  - -
                  -

                  October 13th, 2012

                  -

                  Cael_Aislinn updated:

                  -
                    -
                  • Moderators are now being loaded correctly, and all broken admin and mod verbs should be functioning correctly. Misc other fixes and improvements.
                  • -
                  -

                  CIB updated:

                  -
                    -
                  • Medical stack items(ointment, bandages) aren't instant anymore, but instead stop bleeding and speed up healing.
                  • -
                  • Cyborgs can now use :h to use their department channel.
                  • -
                  • Ported BS12 medbots. This means you now have to load them with a chemical, or otherwise they only have inaprovaline.
                  • -
                  • Ported the BS12 player info features.
                  • -
                  • Examine now only reveals whether someone is breathing(need to be 3 tiles away or closer). Check pulse from 1 tile distance.
                  • -
                  • Ported bleeding. Bleeding can be stopped by applying a bandage.
                  • -
                  • Small delay for chloral hydrate and sleep toxin to take effect.
                  • -
                  -
                  - -
                  -

                  October 12th, 2012

                  -

                  Cael_Aislinn updated:

                  -
                    -
                  • Merge current BS12 code with /tg/station's rev4847. Thanks for everyone who's been posting issues and bugs to the PiratePad issue tracker (see also here for general discussion and criticisms).
                  • -
                  • See https://code.google.com/p/tgstation13/source/list for tg's changelog. This is recommended reading for anyone interested in any changes, be warned there's a lot of them.
                  • -
                  -
                  - -
                  -

                  October 9th, 2012

                  -

                  Cael_Aislinn updated:

                  -
                    -
                  • The merge code is now stable and playable (diag click only has been fixed, among other things). Hopefully, more playtesting will be taking place over the next few weeks.
                  • -
                  -
                  - -
                  -

                  September 26th, 2012

                  -

                  Cael_Aislinn updated:

                  -
                    -
                  • Multiple bugfixes and tweaks in response to the testing session a few days ago have been put in place. For more details, see the piratepad tracker (TG also has broken underwear, we're awaiting a fix from them for it).
                  • -
                  -
                  - -
                  -

                  September 24th, 2012

                  -

                  Cael_Aislinn updated:

                  -
                    -
                  • Engineering depressurisation during the test run was due to the singularity EMPing doors open. This is not a bug.
                  • -
                  -
                  - -
                  -

                  September 23nd, 2012

                  -

                  Cael_Aislinn updated:

                  -
                    -
                  • The server map has now officially branched to tgstation2.0.9.1.dmm.
                  • -
                  -
                  - -
                  -

                  August 22, 2012

                  -

                  Cael_Aislinn updated:

                  -
                    -
                  • This server is in the process of running a merge of BS12 and up to date TGcode. This is a significant update, and there will likely be several bugs coming with it. - See https://github.com/Baystation12/Baystation12/pull/1671 for more information.
                  • -
                  • The server is now running tgstation2.0.9.dmm. The station layout is functionally the same, but with significant additions from tg. Hopefully, the Antiqua will be ready soon.
                  • -
                  • Please report all bugs immediately, both in OOC and by making an issue at: https://github.com/Baystation12/Baystation12/issues/new
                  • -
                  -
                  - -
                  -

                  15th August 2012

                  -

                  Cael_Aislinn updated:

                  -
                    -
                  • Readded changeling and traitorchan (traitor + changeling) to secret rounds, lowered probability of cult being chosen during secret rounds.
                  • -
                  -
                  - -
                  -

                  7th August 2012

                  -

                  CIB updated:

                  -
                    -
                  • Wound descriptions now again are in sync with actual damage.
                  • -
                  • Bandages no longer are instant, but rather only stop bleeding and speed up the healing process.
                  • -
                  • Bleeding and regeneration speeds have been balanced, so that now it is possible to bleed out.
                  • -
                  -
                  - -
                  -

                  4 August 2012

                  -

                  Cael_Aislinn updated:

                  -
                    -
                  • Ghosts and observers can now possess mice and inhabit the station as mortals once more. Be warned, in this form you will be unable to be cloned! (you can, however, jump back into ghost form as you like)
                  • -
                  - -

                  FireFishie updated:

                  -
                    -
                  • Added Flashkirby99's tajaran sprites, but the accompanying hairstyles will have to wait for a tweak to genetics before being usable in-game. Apologies for not logging this change sooner.
                  • -
                  • By vote, the captain's armor is again space capable and the memo on his desk updated to reflect this.
                  • -
                  • The Captain now starts wearing matching gloves, jackboots, and a cap. The old Napoleonic hat can still be found in the secure locker.
                  • -
                  • The Head of Personnel now starts with a clipboard, but without body armor and a helmet. Both items can still be found in the secure locker for emergencies.
                  • -
                  • Cargo tech and shaft miner wardrobes now include fingerless gloves. Janitor wardrobes now includes a portalathe. Warden wardrobes now includes a jacket.
                  • -
                  • Medical, security, and tool-belts may now hold any lighter. Medical belts may now hold latex gloves and sterile masks. Security belts may now hold gas masks. Tool-belts may now hold cigarette packs.
                  • -
                  -
                  - -
                  -

                  2 August 2012

                  -

                  Cael_Aislinn updated:

                  -
                    -
                  • Vermin such as mice and roaches will periodically spawn in maintenance and toilet areas across the station. Cats will hunt the mice, roaches can be stepped on and mousetraps will deal with both.
                  • -
                  -
                  - -
                  -

                  10 July 2012

                  -

                  Abi79 updated:

                  -
                    -
                  • Removed the stun effect from artifacts.
                  • -
                  • Fixed the bug where helmets would not turn off when placed into backpacks.
                  • -
                  • Added more "cancel" buttons to various dialogs.
                  • -
                  - -

                  CIB updated:

                  -
                    -
                  • Fixed the bug where the preview image in the character creation panel was broken.
                  • -
                  • Fixed the bug where you could only see if a player had no pulse when that player was ghosted or logged off.
                  • -
                  -
                  - -
                  -

                  9 July 2012

                  -

                  CIB updated:

                  -
                    -
                  • Maintenance shafts are now safe places in the event of a radiation belt. This feature may be temporary until a better solution is found.
                  • -
                  -
                  - -
                  -

                  5 July 2012

                  -

                  Cael_Aislinn updated:

                  -
                    -
                  • The Mining North Outpost has been repurposed as a research outpost, with a shuttle going back to the research division on the main station. The pneumatic transport chute is still available to transfer ore between this outpost and the mining one.
                  • -
                  • Shield generators now have circuitboards, and the capacitors should actually rotate now (both still have placeholder sprites though).
                  • -
                  -
                  - -
                  -

                  3 July 2012

                  -

                  CIB updated:

                  -
                    -
                  • You can now select amputated and robot limbs in the character preferences. Note, though, that amputated limbs don't work properly yet.
                  • -
                  -
                  - -
                  -

                  29 June 2012

                  -

                  Erthilo updated:

                  -
                    -
                  • Raises job limits for Botanists, Atmospheric Technicians, Roboticists, Chemists, and Geneticists.
                  • -
                  -
                  -
                  -

                  28 June 2012

                  -

                  Chinsky updated:

                  -
                    -
                  • 'Rename' function for clipboards
                  • -
                  • Can add photos to clipboards
                  • -
                  • Fixed troubles with formatting when reading from clipboard (linebreaks not being properly placed)
                  • -
                  • Fixed photocopiers not copying photos properly
                  • -
                  -
                  -
                  -

                  27 June 2012

                  -

                  Erthilo updated:

                  -
                    -
                  • Simple animals (like constructs) can properly emote using the Me verb now.
                  • -
                  • Body scanners now show a much more detailed readout on patients.
                  • -
                  • Wizard 'Mind Transfer' spell now requires full wizard garb to work.
                  • -
                  • Chairs without wheel will no longer move with fire extinguishers. BECAUSE I HATE FUN.
                  • -
                  • Gauze/kits/ointment now heal wounds instantly again. Gauze and ointment don't work below 50 health, advanced kits don't work below 0. This may be tweaked as necessary in future.
                  • -
                  • Stepping in pools of blood no longer leaves footprints due to lag issues.
                  • -
                  • Fixed batons hitting on all non-help intents. It'll now only do it on harm intent.
                  • -
                  • Fixed tape recorders not recording holopad speech.
                  • -
                  • Fixed random " on his head" messages in examine.
                  • -
                  • Fixed surgery, all surgical procedures should work again.
                  • -
                  • Fixes medical items. Gauze/kits/ointment can now be applied correctly again.
                  • -
                  -
                  -
                  -

                  26 June 2012

                  -

                  TG updated:

                  -
                    -
                  • Fixed silicon mobs not being able to access newscaster.
                  • -
                  • Fixed harmbatons on everything other than harm, now it is the opposite way round.
                  • -
                  -
                  - -
                  -

                  25 June 2012

                  -

                  Erthilo updated:

                  -
                    -
                  • People in critical (less than -50 health) from external trauma (100+ damage from brute and/or burn) bleeding, and with unsplinted limbs, will send a message to anyone trying to drag them, to warn them it would be a bad idea trying to move them. They will suffer a lot more damage if dragged while lying down.
                    The correct procedure is therefore, A) Bring a roller bed, or B) Splint all limbs, stop all bleeding with gauze, and then drag them.
                  • -
                  • Dragging someone while injured (brute) will have a small chance of injuring them further that increases depending on how damaged they are. This coincides with the blood spatters that are already generated.
                  • -
                  • Added splints that can be applied to broken arms and legs, and will reduce effects of broken limbs. These can be removed the same way as handcuffs. They show up on the mob and on examine.
                  • -
                  • Added an autoinjector that can only hold five units, but acts like a hypospray.
                  • -
                  • Added an advanced medical kit that Medical Doctors spawn with that has Advanced Trauma Kits, Advanced Burn Kits, autoinjectors, and splints.
                  • -
                  • Health Scanners now show unsplinted fractures ONLY in arms or legs.
                  • -
                  • Blood is now actually lost from the person being dragged.
                  • -
                  • Fixed CPR being performed at weird health levels.
                  • -
                  -

                  Watermelon Storm updated:

                  -
                    -
                  • Added a medbay (with rolling beds) and a holding cell to the destination of the escape shuttle.
                  • -
                  -

                  Drieden updated:

                  -
                    -
                  • The cargo bay now has a supply depot to store, sort, and dispense raw materials, and print shipping manifests.
                  • -
                  -
                  - -
                  -

                  23 June 2012

                  -

                  SkyMarshal updated:

                  -
                    -
                  • ZAS now has different thresholds to move mobs and dense objects. A depressurising room at normal pressure will no longer turn lockers deadly.
                  • -
                  • ZAS now properly rebuilds zones, and connect/merge adjacent zones. This should be the final real bugfix to the system.
                  • -
                  • I have removed the aspects of the wound system causing the instant healing and, very likely, lag. This will result in wounds healing instantly again, but the computational overhead being significantly less.
                  • -
                  • The auto-targeting-mode for guns will now provide a different type of flavor text when it makes you fire, to make the situations that it occurs in to be less ambiguous.
                  • -
                  • UltraLight is in, but has some lighting bugs still remaining. This is the next thing I intend to tackle, bare with it please.
                  • -
                  -

                  TG updated:

                  -
                    -
                  • Updated toilets. You can now crowbar open the cistern and hide stuff in there.
                  • -
                  • Omni-directional PA console! Never have to worry about rotating it again, because now it does it itself!
                  • -
                  • Players can fill their cigarettes with various chemicals and smoke them.
                  • -
                  • You can now click blocks to select them.
                  • -
                  • Areas have been redefined and renamed to make more logical sense (eg "Arrivals North Maintenance" instead of "Secondary Fore Port Maintenance"). Same has been done with Solars.
                  • -
                  • Scientists no longer start with gas masks and o2 tanks (Still available from the lockers).
                  • -
                  • Hydroponics trays are now unwrenchable.
                  • -
                  • The Experimental Welding Tool, rather than having a larger tank, will refill itself over time.
                  • -
                  • Borg diamond drills now properly dig sand.
                  • -
                  -
                  - -
                  -

                  22 June 2012

                  -

                  Cael_Aislinn updated:

                  -
                    -
                  • A research laboratory has been constructed to store and catalogue xeno-archaelogical relics. Savvy anomalists are advised to supervise recovery efforts themselves, as unsubtle miners may damage delicate samples through not using the proper tools.
                  • -
                  -
                  - -
                  -

                  18 June 2012

                  -

                  Cael_Aislinn updated:

                  -
                    -
                  • A discovery on a nearby asteroid has brought xeno-archaelogists flocking to the NSS Exodus in search of ancient treasures. Miners beware, these artifacts may be helpful or deadly! There is talk of establishing a permanent research position on the station in an attempt to study them (thanks to ISaidNo for original code).
                  • -
                  -
                  - -
                  -

                  16 June 2012

                  -

                  Cael_Aislinn updated:

                  -
                    -
                  • Recent breakthroughs have brought shield generation technology to the NSS Exodus. External (hull) shield generators and capacitors may now be built, with appropriate circuitboards available from RnD.
                  • -
                  -
                  - -
                  -

                  09 June 2012

                  -

                  Erthilo updated:

                  -
                    -
                  • Blobs have evolved! Their weaknesses/strengths are now randomised. Experimentation ahoy!
                  • -
                  • Meteors have been fixed, and will therefore appear again. Meteor mode works too.
                  • -
                  -
                  - -
                  -

                  07 June 2012

                  -

                  SkyMarshal updated:

                  -
                    -
                  • ZAS now works properly. No perpetually leaking doors, no walls that hold air like a seive.
                  • -
                  • ZAS airflow is now enabled, and will move objects (AND PEOPLE!) when air moves with enough force. AIRLOCKS ARE NOW DEADLY DANGEROUS!
                  • -
                  • Packages will now reflect the size of what they contain
                  • -
                  -
                  - -
                  -

                  06 June 2012

                  -

                  Erthilo updated:

                  -
                    -
                  • Tajaran's are more vulnerable to high temperatures and get hungry faster, but deal well with colder temperatures. Soghun's are more susceptible to cold temperatures, but get hungry much slower.
                  • -
                  • Skrell update! Adds Skrell as a whitelisted race. They have their own language which can be used by typing :k
                  • -
                  • Soghun get their own language by typing :o
                  • -
                  • Skintone and eye colour of most species can now be changed, The preview picture should be a fairly accurate representation of what you'll get in-game.
                  • -
                  • All valves in atmosperics now start off, instead of having to turn them off, then on again.
                  • -
                  • Soy sauce recipe change to soymilk + water pending better ideas.
                  • -
                  • Fixes pAI's universal translator not being universal.
                  • -
                  -
                  - -
                  -

                  04 June 2012

                  -

                  TG updated:

                  -
                    -
                  • Added "Toggle Open" verb to all closets and crates
                  • -
                  • Added "Toggle Lock" verb to all lockable closets
                  • -
                  • Window doors are now breakable. They can still be emagged and hacktooled, and they have fairly high health.
                  • -
                  • Windoors are now constructable. See here for how to build them: http://baystation12.net/wiki/index.php/Construction#Window-door_.28Windoor.29
                  • -
                  • Lawyers can now access security records with their PDAs (read-only)
                  • -
                  • RIG suits have been renamed to hardsuits.
                  • -
                  -

                  SkyMarshal updated:

                  -
                    -
                  • Added the capability for the security PDA to scan items in like the detectives scanner, and for it to be loaded into the database in the same manner.
                  • -
                  -

                  Erthilo updated:

                  -
                    -
                  • You can now only build 2 cleanbots.
                  • -
                  • Fixed flavour text, it should now be possible to have it longer than 40 characters, and should stay properly formatted.
                  • -
                  • Fixes AI's not being able to talk through holopads.
                  • -
                  -
                  - -
                  -

                  01 June 2012

                  -

                  Erthilo updated:

                  -
                    -
                  • Added character records. You can now add medical and security records to your character through Character Setup. These are official NanoTrasen records, and should be written as such. These will show up in-game on the medical and security records computers. Admins can 'jobban' people from records, so use them sensibly!
                  • -
                  • Added a megaphone to each Head's office. These broadcast messages in slightly larger font so you can be noticed. Please don't spam them.
                  • -
                  • Added Flashkirby's ERT suit sprites. Also tweaked ERT's loadout.
                  • -
                  -
                  - -
                  -

                  29 May 2012

                  -

                  Aryn updated:

                  -
                    -
                  • Airflow works on a room-by-room basis rather than on individual tiles. Rooms will depressurize much faster than they did, though not too fast for balance reasons.
                  • -
                  • Fire now works on a logarithmic scale based on oxygen and fuel content. This is a far more complex tweak under the hood than it is in game.
                  • -
                  • Plasma now has increased toxicity and can burn exposed skin and eyes. In addition, because of the new air, it fills the room instantaneously. Try not to spill any.
                  • -
                  -
                  - -
                  -

                  28 May 2012

                  -

                  Erthilo updated:

                  -
                    -
                  • Surgeons spawn with scrubs, Emergency Physicians spawn with first responder jackets.
                  • -
                  • Added water bottles to cola vending machines.
                  • -
                  • More HUD changes: https://dl.dropbox.com/u/4911517/ShareX/2012-05/2012-05-28_20-40-50.png
                  • -
                  -
                  - -
                  -

                  27 May 2012

                  -

                  Abi79 updated:

                  -
                    -
                  • Money withdrawn from the ATM will now be worth the proper value.
                  • -
                  -

                  Erthilo updated:

                  -
                    -
                  • Fixed PDA light not turning off when exploded by a detomax.
                  • -
                  • Fixes food not disappearing from hands when finished.
                  • -
                  • Fixed the bug where traitors would get an empty objectives list. Credit: thvortex.
                  • -
                  • New portalathe sprite, thanks to dezzmont and Furlucis.
                  • -
                  -
                  - -
                  -

                  26 May 2012

                  -

                  Erthilo updated:

                  -
                    -
                  • Added Flashkirby's RIG and cow sprites!
                  • -
                  • Removed and added some new AI Ion laws, credit: Ispil.
                  • -
                  - -

                  Abi79 updated:

                  -
                    -
                  • Everyone should now be able to see the properly formatted changelog.
                  • -
                  -
                  - -
                  -

                  25 May 2012

                  -

                  Erthilo updated:

                  -
                    -
                  • Virologists get their fancy green jumpsuit/labcoat back, yay!
                  • -
                  • Emergency Medical Technician renamed to Emergency Physician to reinforce their doctorness.
                  • -
                  • Pill bottles now pick up pills correctly.
                  • -
                  -
                  - -
                  -

                  24 May 2012

                  -

                  cib updated:

                  -
                    -
                  • Your nutrition now decreases at the same rate as before it was nerfed.
                  • -
                  • Low nutrition will now have a much smaller effect on your speed.
                  • -
                  • The hunger messages will start displaying a bit earlier.
                  • -
                  • A restart vote now calls the Crew Transfer Shuttle by default. A regular restart is still possible for the purpose of rebooting a glitched server.
                  • -
                  -
                  - -
                  -

                  23 May 2012

                  -

                  CIB updated:

                  -
                    -
                  • Added Apple_Master's entertaining messages, which will pop up from time to time on low nutrition.
                  • -
                  -

                  TG & Erthilo updated:

                  -
                    -
                  • New HUD Updates, see here: http://baystation12.net/forums/index.php/topic,4495.msg85026.html#msg85026 You can also pick from different styles of HUD again. Including new 'Midnight' blue.
                  • -
                  • RIG helmets can now be used as flashlights, just like hardhats
                  • -
                  • Medical borg overhaul. Instead of a dozen random one-use pills and syringes, they get an advanced hypospray that can switch between auto-replenishing tricordrazine, inprovaline, and spaceacillin.
                  • -
                  • Janitorborgs get a mop again, because without it they had no way of hitting anything.
                  • -
                  • Fixes robolimbs surgery.
                  • -
                  -
                  - -
                  -

                  22 May 2012

                  -

                  cib updated:

                  -
                    -
                  • Worked out a few problems with meme. They now can see, even if their mob is sleeping. Their actions are properly tracked in admin logs. Their points recharge slightly faster, and can now be seen in the Status tab.
                  • -
                  -

                  Erthilo updated:

                  -
                    -
                  • Some sleeping and resting fixes. Please report any more bugs with it!
                  • -
                  • Blood regeneration removed until errors can be fixed.
                  • -
                  • New in-hand sprites for shotgun! Credit to Flashkirby.
                  • -
                  • Money can now be split and stacked properly. Carry some with you! Still not used for anything!
                  • -
                  • Fixed an ATM exploit, thanks to BlackTea!
                  • -
                  -
                  - -
                  -

                  21 May 2012

                  -

                  TG updated:

                  -
                    -
                  • The new 'sleek' user interface is going live. This is currently undergoing changes at TG, so this is mostly a test run. Resist, Sleep, and Rest have all been moved to the IC tab.
                  • -
                  • When you receive a PDA message, the content is displayed to you if the PDA is located somewhere on your person (so not in your backpack). You will also get a reply button there. This will hopefully make PDA communication easier.
                  • -
                  • New hotkeys: Delete is the 'stop dragging' button and insert cycles through intents.
                  • -
                  -

                  SkyMarshal updated:

                  -
                    -
                  • Blood now regenerates if you're not bleeding.
                  • -
                  • Transformed changelings should no longer die from massive blood conflicts.
                  • -
                  -

                  Uristqwerty updated:

                  -
                    -
                  • Added a minimap for AI's. Click on a location to jump to that area. Minimap image updates every 2 minutes.
                  • -
                  -

                  Erthilo updated:

                  -
                    -
                  • Added implant removal. Steps are: Scalpel, Hemostat, Retractor, Hemostat (Might take a few goes!). Implants can then be loaded back into an implanter.
                  • -
                  • Made the damp rag stop causing attack messages. Also allows you to load it up with 5 units of something and smother people with it. Don't be sily now!
                  • -
                  • Added a Tajaran/Soghun whitelist. PM an admin on the forum for more details!
                  • -
                  • Fixed door accesses.
                  • -
                  -
                  - -
                  -

                  20 May 2012

                  -

                  Erthilo updated:

                  -
                    -
                  • You can now right-click pick up items and open/close closets items. This means cyborgs can now open/close closets with a bit of fiddling!
                  • -
                  • Added confirmation pop-up for character slot deletion.
                  • -
                  -
                  - -
                  -

                  19 May 2012

                  -

                  cib updated:

                  -
                    -
                  • Implemented Memetic Anomaly game mode. A meme is a kind of parasite that can live in a human host and jump from player to player. They have traitor-like objectives, but must achieve them by controlling hosts, rather than doing it themselves.
                  • -
                  • Credits for the idea goes to: SCP-1312-1 . Playtesters: Erthilo, Cael_Aislin, AfterShave and critica.
                  • -
                  -

                  TG updated:

                  -
                    -
                  • You can now swap hands by clicking with your middle mouse button (you have to click on a visible object though, that's the catch).
                  • -
                  • Tweaked the DNA modifier consoles a little bit so that it's much easier to see individual blocks instead of one jumbled mess of hexadecimal.
                  • -
                  • You can now properly emag AI turret controls and commsat turret controls.
                  • -
                  • Brand new ending animations!
                  • -
                  • Buckling into an office chair and using a fire extinguisher will lead to interesting results.
                  • -
                  • Recipe updates for some booze in an attempt to resolve recipe conflicts.
                  • -
                  • Wallets now fit in pockets.
                  • -
                  • If you are clicking on a storage item in your pocket with an empty hand it will return that item to your hand.
                  • -
                  • Extinguishers now say when they are empty.
                  • -
                  • New sprites for Cargo, HoP, and Captain's lockers.
                  • -
                  • Removed hat storage as it was never used and it cluttered the UI.
                  • -
                  -
                  - -
                  -

                  17 May 2012

                  -

                  TG updated:

                  -
                    -
                  • Added WJohnston's scrubs to Medical Doctor lockers.
                  • -
                  • Added two new syndicate bundles
                  • -
                  • Added WJohnston's CMO bio hood
                  • -
                  • Reduced cost of thermals to 3 telecrystals (formerly 4)
                  • -
                  • Singularity Beacons are now spawned from a smaller, portable device.
                  • -
                  • Large beaker cost reduced to 5000 glass
                  • -
                  • CMO and QM jumpsuits made more unique.
                  • -
                  • Updated Cargo Tech jumpsuit and sprite
                  • -
                  • Edited Warden's jumpsuit striping to match his jacket
                  • -
                  • Fixed misaligned downed sprites for HoS's coat
                  • -
                  -

                  Erthilo updated:

                  -
                    -
                  • Roller beds are now collapsible, just like body bags! They don't fit in anything though.
                  • -
                  • New sounds for cable cuffs and table smashing.
                  • -
                  • Cable cuffs now have a proper sprite!
                  • -
                  • Adds camera film which can be used to refill cameras. Added to detectives wardrobe and arts and crafts crate. Credit to Flashkirby99
                  • -
                  • ATM's now require a pin which is generated on round start and stored in notes. Space cash renamed to stack of credits, and same value credits can be stacked together. Initial round credits are generated randomly between 500 to 2000 credits. Credits or coins can be inserted into ATMs and converted to credits. Still not used for anything! Credit to EditorRUS at Animus Station.
                  • -
                  • Fixes police tape not appearing on doors.
                  • -
                  -

                  Abi79 updated:

                  -
                    -
                  • Fixed ID access requirements for the QM's office and the prison wing.
                  • -
                  -

                  SkyMarshal updated:

                  -
                    -
                  • Metal foam now blocks air.
                  • -
                  -
                  - -
                  -

                  16 May 2012

                  -

                  Erthilo updated:

                  -
                    -
                  • Hunger rate has been halved, and drinks no longer fill you up super fast. Most drinks will now keep your hunger stable. Eat food if you want to fill up!
                  • -
                  • Removed mining secret rooms due to them having some very silly things.
                  • -
                  • You can cut cable cuffs with wirecutters for quick removal.
                  • -
                  • Stops pod windows leaking air everywhere.
                  • -
                  -
                  - -
                  -

                  15 May 2012

                  -

                  TG updated:

                  -
                    -
                  • Beakers, small and large can now be made/recycled in autolathes.
                  • -
                  • New PDA's for roboticists and shaft miners.
                  • -
                  • Nettles now do damage based on their potency.
                  • -
                  • Reinforced tables are now made with table parts + four rods, rather than plasteel.
                  • -
                  • New sprites for bomb suit, in-hands for pulse rifles, advances energyguns, and laser guns.
                  • -
                  • Fix for contraband crates being empty.
                  • -
                  -

                  Erthilo updated:

                  -
                    -
                  • More customs!
                  • -
                  • New sprites for bomb suit, in-hands for pulse rifles, advanced energy guns, and laser guns. Credit to Flashkirby!
                  • -
                  • Allows AI to toggle saferty on and off, unless emagged.
                  • -
                  • Add ADVANCED INTERROGATION TECHNIQUES (smashing peoples faces with tables). Grab someone once and then click on a table. Don't abuse this!
                  • -
                  • Fixes sleep button not waking you up.
                  • -
                  • Fixes mech weapons not firing.
                  • -
                  • Added cable restraints, made from 15 lengths of cable coil by right-click a cable coil in-hand and choosing 'Make Cable Restraints'. These works just like handcuffs, but only take 30 seconds to break!
                  • -
                  • The Head of Personnel can now change alert levels.
                  • -
                  • Fixes lockdown computers being blank.
                  • -
                  -
                  - -
                  -

                  13 May 2012

                  -

                  TG updated:

                  -
                    -
                  • Harebells can now be harvested.
                  • -
                  • New sprites for mass-spectrometers and advanced mass-spectrometers.
                  • -
                  • New sprites for the SMES. Credit to Flashkirby99!
                  • -
                  • New sound effects for circular saws and surgical drills.
                  • -
                  -
                  - -
                  -

                  10 May 2012

                  -

                  Erthilo updated:

                  -
                    -
                  • Custom item updates!
                  • -
                  • Respawn should now work properly.
                  • -
                  • Even more customs!
                  • -
                  • Chemistry and Genetics is now strictly under the Chief Medical Officer. The Research Director no longer has access to chemistry.
                  • -
                  • You can now adjust breath masks to hang around your neck. Credit to Spamcat!
                  • -
                  -

                  TG updated:

                  -
                    -
                  • New drinks recipes!
                  • -
                  • Different types of cigarettes added to contraband ordering.
                  • -
                  • Emergency Toolboxes now contain smaller, lighter fire extinguishers that actually fit inside them!
                  • -
                  • AIs and Cyborgs can now understand PAIs and MMIs.
                  • -
                  • Adminwho now shows admin ranks.
                  • -
                  • You can't pull things with missing hands anymore.
                  • -
                  • Nuke ops now spawn with an extended oxygen tanks.
                  • -
                  • Botany leather gloves can now remove lights without burning yourself.
                  • -
                  • New xeno sprites when running.
                  • -
                  • Piano is now a Minimoog!
                  • -
                  • Switched back to oldbody bag sprites.
                  • -
                  • New Oddyseus destroyed sprites.
                  • -
                  -
                  - -
                  -

                  07 May 2012

                  -

                  TG updated:

                  -
                    -
                  • Added holodeck, can be used for a few interesting things, and possibly emagged for more nefarious purposes..
                  • -
                  • Added a brig prison wing. Accessible through the previous permacell, use this for permanent prisoners!
                  • -
                  • Added escape pods. These do not count towards escape alone, but otherwise work as escape shuttles. Two in arrivals, one in engineering, and on in security.
                  • -
                  • Added a new chemical: lipozine, a weight loss drug. Made with sodium chloride, ethanol, and radium.
                  • -
                  • You can build various upgrades for cyborgs, such as improved speed, from the fabricators.
                  • -
                  • AI can now ctrl-click APCs to turn them off.
                  • -
                  • AI can now track its cyborgs who speak on robotic talk.
                  • -
                  • Added a 'remove ID' verb to PDAs which attempts to remove the ID from a PDA. If your active hand is empty it puts it there, otherwise it puts it on the floor under you.
                  • -
                  • Tajaran can see in the dark.
                  • -
                  • Blind rune can no longer be made into a talisman.
                  • -
                  • Cyborgs now lose power much less quickly with no active modules. Active modules will drain charge more quickly though.
                  • -
                  • Mining cyborgs are now slightly more useful, having a much larger satchel, and an improved drill.
                  • -
                  • Constructs can now see who cultists are in cult mode.
                  • -
                  • Coffins are now sideways to better fit dead bodies.
                  • -
                  • People around you will no longer get a message when putting small items into storage items. Large items are unaffected.
                  • -
                  • New sprites for blob, PA, mech construction, field generators and power cells.
                  • -
                  -
                  - -
                  -

                  06 May 2012

                  -

                  TG updated:

                  -
                    -
                  • Artificers can now create cult floors.
                  • -
                  • Added soil to plant seeds in. Make it by crushing up sandstone. Soil does not have indicators like trays do! Watch your plants carefully!
                  • -
                  • Added money trees. When life gives you lemons, mutate them into cash.
                  • -
                  • RnD can create a new tool for botanists: The floral somatoray. Has two modes. Use it on your plants to induce mutations or boost yield.
                  • -
                  • Added chawanmushi recipe and beet soup recipes.
                  • -
                  • Added 1% chance for a species mutation whenever a plant's stats mutate.
                  • -
                  • New PDAs for the botanists and librarian. Sprites for cartridges for both too.
                  • -
                  • You can now only have ONE decal of blood per tile. This is to fix the millions of blood effect items that spawned to lag anyone who right clicked them. The most recently created blood item will be the one that remains. This does not effect gibs.
                  • -
                  • Hand tools now fit on your belt slot.
                  • -
                  • Changelings faking death can no longer have their brains cut out.
                  • -
                  • Updated the barman's shotgun, it acts like a double-barrel now, and he can saw it off.
                  • -
                  • New sprites for lots of medical computers!
                  • -
                  • New carrot in-tray sprites.
                  • -
                  • Soulstones can no longer capture the manifested ghosts. No more infinite constructs.
                  • -
                  • Changes rev objectives to use the proper objective so heads being off station actually works.
                  • -
                  -
                  - -
                  -

                  05 May 2012

                  -

                  Erthilo updated:

                  -
                    -
                  • Increases maximum brig timers to 60 minutes. This coincides with a new test version of Space Law. See here: http://baystation12.net/wiki/index.php/Space_Law or in-game Space Law books.
                  • -
                  -
                  - -
                  -

                  04 May 2012

                  -

                  dopeghoti updated:

                  -
                    -
                  • Fixes AI-less Cyborgs having Asimov laws.
                  • -
                  -
                  - -
                  -

                  03 May 2012

                  -

                  TG updated:

                  -
                    -
                  • CONTRABAND-CON UPDATE: Added posters.
                  • -
                  • POSTERS! Posters come in rolled packages that can adhere to any wall or r_wall, if it's uncluttered enough. -

                    ?How they get on-board: The quartermaster can now set the receiver frequency of his supplycomp circuit board. A bit simplistic as of now, will work on it later. Building a supplycomp with a properly set up circuitboard will give access to the Contraband crate. -

                    ?How they're used: Unfold the rolled poster on any wall or r_wall to create the poster. There are currently 17 designs, with the possibility of me adding more. -

                    ?How to get rid of them: You can rip them using your hand... To cleanly extract them and not ruin them for future use, however, you can use a pair of wirecutters. -

                    ?How they're classified: They're contraband, so it's perfectly okay for security officers to confiscate them. Punishment for contraband-providers (or end-users, if you want to go full nazi) is up to the situational commanding officers. -
                  • Merged 'Game' and 'Lobby' tabs during pre-game into one tab
                  • -
                  • Added the little red x to the late-join job list
                  • -
                  • Late-joiners are warned if the shuttle is past the point of recall, and if the shuttle has already left the station
                  • -
                  • Late-joiners now see how long the round has been going on.
                  • -
                  • Droppers are now used at the eyes, and thus, access to the eyes is required to have an effect.
                  • -
                  • Mining shuttle computer no longer spits out both 'Shuttle has been sent' and 'The shuttle is already moving' every time.
                  • -
                  • Adds a borg upgrade that increases their speed. Requires gold.
                  • -
                  • Fixes autolathes not doing anything.
                  • -
                  • Changed Chief Engineers Office door name. Stop breaking in!
                  • -
                  • Added new airlocks to mining dock, research, and atmospherics.
                  • -
                  • RCDs are disabled if they are used on the escape shuttle or hyperspace around it.
                  • -
                  • EMPs will now cause flashes to flash their holder.
                  • -
                  • Heads now get a silver ID!
                  • -
                  • Blenders can now be filled directly from plant bags. Chefs rejoice.
                  • -
                  • The biogenerator is now more robust. It can dispense fertilizer in batches, and make simple leather items at a high cost. Added more wood items for tower cap wood construction: Wooden doors and sandals. Added plump helmet biscuits and mushroom soup to kitchen recipes.
                  • -
                  • Watermelon and pumpkin biomass lowered a bit so biomass isn't totally trivial to acquire.
                  • -
                  -
                  - -
                  -

                  2nd May 2012

                  -

                  TG updated:

                  -
                    -
                  • Added carved pumpkins/jackolanterns. Carve them with any of the usual things you use to carve things. They work similarly to hardhats.
                  • -
                  • Added pumpkin pie and slices. Made with 5 milk, 5 sugar, 1 pumpkin, 1 flour, 1 egg.
                  • -
                  • Eating corn now makes corn cobs. Carve them with a saw, a knife, or a hatchet to make a corncob pipe.
                  • -
                  • Added the bit of transparency to biohelmets that they were always supposed to have.
                  • -
                  • Adds randomlly spawning rooms to the mining asteroid that contain various goodies.
                  • -
                  • Adds a borg upgrade system. Can be used to reset modules or 'restart' dead cyborgs.
                  • -
                  • Officers can now use huds to modify humans' criminal statuses on the go. To do this, simply examine a human and at the end should be a clickable link to change the status.
                  • -
                  • Cell charger and Recharger are now wrenchable to make them moveable
                  • -
                  • Cats and Dogs can see in the dark.
                  • -
                  • Changed around a few access levels; only jobs who need to do maintenance have access to maintenance tunnels. Also the heads and detective.
                  • -
                  • Shuttle call/recall announcements are now more noticeable.
                  • -
                  • Changes changling unstun time to 45 from 25
                  • -
                  • Can now repair the first stage of deconstruction of rwalls with metal rods.
                  • -
                  • Library machine now has a delay when printing bibles to prevent spam.
                  • -
                  • Bugfix to the 'resist' button, unless I don't understand how it works. I don't see how it could have ever worked before.
                  • -
                  • You can no longer toggle the welding helmet when stunned or restrained.
                  • -
                  • Fix for not being able to use pills as pill-satchels properly.
                  • -
                  -

                  Erthilo updated:

                  -
                    -
                  • Increases time between random events happening in low population round to a maximum of double. Random events are more likely to happen up to a limit of around 30 active players. Events now fire at the same rate as previously with around 20~ active players. Please report unusually high or low amounts of events on the bug tracker!
                  • -
                  -
                  - -
                  -

                  1st May 2012

                  -

                  Mloc updated:

                  -
                    -
                  • Added extra data to ID cards. Fingerprint, blood type, and DNA. Can all be changed in ID computer.
                  • -
                  -

                  Erthilo updated:

                  -
                    -
                  • You can now respawn after 30 minutes in any mode where the win/loss condition is not all crew dead.
                  • -
                  • New in-hand sprites for energy and taser guns courtesy of Flashkirby99.
                  • -
                  • Fixes emagging doors.
                  • -
                  • NT has recently upgraded their anti-telepathy double glazing. As such, you can no longer remote view people on any level except the station or the mining asteroid!
                  • -
                  • As a side effect of the above, remote viewing and telekinesis cannot be used at the same time.
                  • -
                  -
                  - -
                  -

                  30th April 2012

                  -

                  Mloc updated:

                  -
                    -
                  • Due to new NT hiring protocols, characters can now only be between the ages of 20-65 instead of 15-45.
                  • -
                  -

                  Erthilo updated:

                  -
                    -
                  • Switched to /tg/'s changelog format! Previous updates can be found here: http://baystation12.net/wiki/index.php/Changelog
                  • -
                  • New green alt satchel for Botanists.
                  • -
                  • Cyborgs can now view crew manifest and also state laws.
                  • -
                  • New ATM sprites.
                  • -
                  • Changes year to 2556 on medical/security records.
                  • -
                  -

                  TG updated:

                  -
                    -
                  • The escape shuttle will now spend two minutes travelling to CentCom, woo! Objectives are only complete when the shuttle reaches CentCom, and anyone leaving the shuttle during transit time will be lost in deep space! Also, anyone standing in the way of the shuttle when it arrives will be gibbed.
                  • -
                  • Added Antimov module. Very dangerous.
                  • -
                  • Pill bottles now work like ore satchels, click a tile full of pills to pick them all up.
                  • -
                  • Tower caps can now grow randomly as weeds
                  • -
                  • Using a minihoe on a Hydroponics tray removes all the weeds in the tray at once. Using a bucket on a sink now fills it entirely with water, instead of 10 units at a time.
                  • -
                  • You can no longer take photos of photos.
                  • -
                  • Malf AI's hopping between APCs no longer become longer and longer.
                  • -
                  • Secborgs now have modified tasers, it holds 6 shots and recharges one shot every 10 seconds automatically.
                  • -
                  • Turning off PANIC SYPHON now sets scrubbers to scrubbing (default) instead of off. Vents will not appear in the list instead of a timeout message. They also have a link with sets them back to one atmosphere kPa.
                  • -
                  • You now click on AI modules in-hand to set them, instead of just picking them up.
                  • -
                  • Fixes the way the safeguard module is written.
                  • -
                  -
                  - -
                  -

                  TG

                  -

                  29th April 2012 updated:

                  -
                    -
                  • Added new sprites for Killer Tomatoes.
                  • -
                  • Added lasertag vests, guns, projectiles. Sprites for the vests and guns from Muncher. Not actually mapped in. Lasertag guns are only usable if you're wearing the appropriate team vest. Lasertag projectiles will only stun people who are wearing vests belonging to the opposing team.
                  • -
                  • Adds Holodeck, also not mapped in.
                  • -
                  • Janitor borgs have been massively upgraded. They now clean as they move around.
                  • -
                  • Mining shuttle now shunts people where it wants to be. Shuttles now crush people if they fail to move out of where they want to be with the initial shunt.
                  • -
                  • Adds Halloss (Hallucination Damage) as a damage type weapons can do. Halloss can be healed by sleeping.
                  • -
                  • Windows can only be damaged by weapons that do brute or burn.
                  • -
                  • HUD damage indicator now updates with halloss. Inspecting yourself for organ damage now randomly shows damaged organs if you have halloss.
                  • -
                  • Nuke disk now respawns in all rounds.
                  • -
                  • Pinpointers now show the remaining time until a nuke goes off if it's been armed when examined.
                  • -
                  • Instead of z-level transition happening when you reach the edge of the map, it will now happen 7 tiles away from the edge. This means that you will no longer see the black edge, transition will likely happen without you even noticing.
                  • -
                  • Slight changes to examine messages. You cannot examine when blind/unconscious.
                  • -
                  • More new locker sprites!
                  • -
                  • Fixes glass knock sound having a pop at the end of it.
                  • -
                  • Telecomm traffic control now has its own circuitboard and doesn't transform into a server when the monitor is disconnected/reconnected.
                  • -
                  • Using an igniter on a flamethrower that already has one attached no longer uses up the igniter.
                  • -
                  • NTSL bugfixes.
                  • -
                  -
                  \ No newline at end of file diff --git a/html/auction-hammer-gavel.png b/html/auction-hammer-gavel.png deleted file mode 100644 index 237baefa3ffb6..0000000000000 Binary files a/html/auction-hammer-gavel.png and /dev/null differ diff --git a/html/browser/common.css b/html/browser/common.css deleted file mode 100644 index bcf5df26fb5de..0000000000000 --- a/html/browser/common.css +++ /dev/null @@ -1,333 +0,0 @@ -body -{ - padding: 0; - margin: 0; - background-color: #272727; - font-size: 12px; - color: #ffffff; - line-height: 170%; -} - -hr -{ - background-color: #40628a; - height: 1px; -} - -a, a:link, a:visited, a:active, .linkOn, .linkOff, input -{ - color: #ffffff; - text-decoration: none; - background: #40628a; - border: 1px solid #161616; - padding: 1px 4px 1px 4px; - margin: 0 1px 0 1px; - cursor:default; - white-space:nowrap; -} - -a:hover -{ - color: #40628a; - background: #ffffff; -} - -a.white, a.white:link, a.white:visited, a.white:active -{ - color: #40628a; - text-decoration: none; - background: #ffffff; - border: 1px solid #161616; - padding: 1px 4px 1px 4px; - margin: 0 2px 0 0; - cursor:default; -} - -a.white:hover -{ - color: #ffffff; - background: #40628a; -} - -.linkOn, a.linkOn:link, a.linkOn:visited, a.linkOn:active, a.linkOn:hover -{ - color: #ffffff; - background: #2f943c; - border-color: #24722e; -} - -.linkOff, a.linkOff:link, a.linkOff:visited, a.linkOff:active, a.linkOff:hover -{ - color: #ffffff; - background: #999999; - border-color: #666666; -} - -a.icon, .linkOn.icon, .linkOff.icon -{ - position: relative; - padding: 1px 4px 2px 20px; -} - -a.icon img, .linkOn.icon img -{ - position: absolute; - top: 0; - left: 0; - width: 18px; - height: 18px; -} - -ul -{ - padding: 4px 0 0 10px; - margin: 0; - list-style-type: none; -} - -li -{ - padding: 0 0 2px 0; -} - -img, a img -{ - border-style:none; -} - -h1, h2, h3, h4, h5, h6 -{ - margin: 0; - padding: 16px 0 8px 0; - color: #517087; -} - -h1 -{ - font-size: 15px; -} - -h2 -{ - font-size: 14px; -} - -h3 -{ - font-size: 13px; -} - -h4 -{ - font-size: 12px; -} - -.uiWrapper -{ - - width: 100%; - height: 100%; - padding-top:32px; -} - -.uiTitle -{ - clear: both; - padding: 6px 8px 6px 8px; - border-bottom: 2px solid #161616; - background: #383838; - color: #98B0C3; - font-size: 16px; -} - -.uiTitleWrapper - { - position:fixed; - top:0px; - left:0px; - right:0px; - z-index: 10 - } - - .uiTitleButtons - { - position:fixed; - top:0px; - right:0px; - height:32px; - z-index:11; - } - - -.uiTitle.icon -{ - padding: 6px 8px 6px 42px; - background-position: 2px 50%; - background-repeat: no-repeat; -} - -.uiContent -{ - clear: both; - padding: 8px; - font-family: Verdana, Geneva, sans-serif; -} - -.good -{ - color: #00ff00; -} - -.mild { - color: #e0d000; -} - -.average -{ - color: #f09000; -} - -.bad -{ - color: #ff0000; -} - -.highlight -{ - color: #8BA5C4; -} - -.dark -{ - color: #272727; -} - -.notice -{ - position: relative; - background: #E9C183; - color: #15345A; - font-size: 10px; - font-style: italic; - padding: 2px 4px 0 4px; - margin: 4px; -} - -.notice.icon -{ - padding: 2px 4px 0 20px; -} - -.notice img -{ - position: absolute; - top: 0; - left: 0; - width: 16px; - height: 16px; -} - -div.notice -{ - clear: both; -} - -.statusDisplay -{ - background: #000000; - color: #ffffff; - border: 1px solid #40628a; - padding: 4px; - margin: 3px 0; -} - -.block -{ - padding: 8px; - margin: 10px 4px 4px 4px; - border: 1px solid #40628a; - background-color: #202020; -} - -.block h3 -{ - padding: 0; -} - -.progressBar -{ - width: 240px; - height: 14px; - border: 1px solid #666666; - float: left; - margin: 0 5px; - overflow: hidden; -} - -.progressFill -{ - width: 100%; - height: 100%; - background: #40628a; - overflow: hidden; -} - -.progressFill.good -{ - color: #ffffff; - background: #00ff00; -} - -.progressFill.mild -{ - color: #ffffff; - background: #e0d000; -} - -.progressFill.average -{ - color: #ffffff; - background: #f09000; -} - -.progressFill.bad -{ - color: #ffffff; - background: #ff0000; -} - -.progressFill.highlight -{ - color: #ffffff; - background: #8BA5C4; -} - -.clearBoth -{ - clear: both; -} - -.clearLeft -{ - clear: left; -} - -.clearRight -{ - clear: right; -} - -.line -{ - width: 100%; - clear: both; -} - -.statusDisplay -{ - background: #000000; - color: #ffffff; - border: 1px solid #40628a; - padding: 4px; - margin: 3px 0; -} diff --git a/html/browser/cryo.css b/html/browser/cryo.css deleted file mode 100644 index 05e9746aa250c..0000000000000 --- a/html/browser/cryo.css +++ /dev/null @@ -1,11 +0,0 @@ -.statusLabel -{ - width: 128px; - float: left; - overflow: hidden; -} - -.statusValue -{ - float: left; -} diff --git a/html/browser/playeroptions.css b/html/browser/playeroptions.css deleted file mode 100644 index cc4e5791f9888..0000000000000 --- a/html/browser/playeroptions.css +++ /dev/null @@ -1,3 +0,0 @@ -.commandPosition { - font-weight: bold; -} diff --git a/html/browser/scannernew.css b/html/browser/scannernew.css deleted file mode 100644 index a2c404b2c56d2..0000000000000 --- a/html/browser/scannernew.css +++ /dev/null @@ -1,25 +0,0 @@ -.getblockstring -{ - font-family: Fixed, monospace; -} - -.blockString -{ - width: 55px; - height: 19px; - padding: 0 8px 8px 0; - float: left; -} - -.statusLabel -{ - width: 128px; - float: left; - overflow: hidden; -} - -.statusValue -{ - float: left; -} - diff --git a/html/browser/sleeper.css b/html/browser/sleeper.css deleted file mode 100644 index 05e9746aa250c..0000000000000 --- a/html/browser/sleeper.css +++ /dev/null @@ -1,11 +0,0 @@ -.statusLabel -{ - width: 128px; - float: left; - overflow: hidden; -} - -.statusValue -{ - float: left; -} diff --git a/html/bug-minus.png b/html/bug-minus.png deleted file mode 100644 index 9934db406b10a..0000000000000 Binary files a/html/bug-minus.png and /dev/null differ diff --git a/html/burn-exclamation.png b/html/burn-exclamation.png deleted file mode 100644 index b2a4f670a8677..0000000000000 Binary files a/html/burn-exclamation.png and /dev/null differ diff --git a/html/changelog.css b/html/changelog.css deleted file mode 100644 index 59248aa23d8e3..0000000000000 --- a/html/changelog.css +++ /dev/null @@ -1,79 +0,0 @@ -body{font-family:Tahoma,sans-serif;} -.top{font-size:12px;} -a img {border:none;} -.bgimages16 li { - padding:2px 10px 2px 30px; - background-position:6px center; - background-repeat:no-repeat; - border:1px solid #ddd; - border-left:4px solid #999; - margin-bottom:2px; -} -.bugfix {background-image:url(bug-minus.png)} -.wip {background-image:url(hard-hat-exclamation.png)} -.tweak {background-image:url(wrench-screwdriver.png)} -.soundadd {background-image:url(music-plus.png)} -.sounddel {background-image:url(music-minus.png)} -.rscdel {background-image:url(cross-circle.png)} -.rscadd {background-image:url(tick-circle.png)} -.imageadd {background-image:url(image-plus.png)} -.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)} -.maptweak {background-image:url(map-pencil.png)} -.admin {background-image:url(auction-hammer-gavel.png)} -.sansserif {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; -} -.date { - margin:10px 0; - color:blue; - border-bottom:2px solid #00f; - width:60%; - padding:2px 0; - font-size:1em; - font-weight:bold; -} -.author { - padding-left:10px; - margin:0; - font-weight:bold; - font-size:0.9em; - } -.drop { - cursor:pointer; - border:1px solid #999; - display:inline; - font-size:0.9em; - padding:1px 20px 1px 5px; - line-height:16px; -} -.hidden {display:none;} -.indrop { - margin:2px 0 0 0; - clear:both; - background:#fff; - border:1px solid #ddd; - padding:5px 10px; - } -.indrop p { - margin:0; - font-size:0.8em; - line-height:16px; - margin:1px 0; -} -.indrop img { - margin-right:5px; - vertical-align:middle;} -.closed {background:url(chevron-expand.png) right center no-repeat;} -.open {background:url(chevron.png) right center no-repeat;} -.lic {font-size:9px;} diff --git a/html/changelog.html b/html/changelog.html deleted file mode 100644 index 2ceabf6c024f0..0000000000000 --- a/html/changelog.html +++ /dev/null @@ -1,317 +0,0 @@ - - - - Baystation 12 Changelog - - - - - - - -
                  - - - - -
                  -
                  Baystation 12
                  -
                  A Space Station 13 Project
                  - -

                  - Code licensed under AGPLv3. Content licensed under CC BY-SA 3.0.

                  - Visit our IRC channels: #bs12 and #codershuttle on irc.sorcery.net
                  - Join our Discord server: -Click Here-
                  - Support Baystation on Patreon: -Click Here-
                  -
                  - -
                  Baystation 12 Credit List - - - - -
                  - Developers: afterthought, chinsky, F-Tang Steve, mloc, PsiOmegaDelta, xales
                  - Currently Active GitHub contributor list: -Click Here-
                  -

                  Credits: Abi79, Apple_Master, Arcalane, Aryn, babydoll, Cael_Aislinn, Ccomp5950, chinsky, CompactNinja, Deus Dactyl, DopeGhoti, Erthilo, Flashkirby, Hawk_v3, Head, Ipsil, Invisty, JoeyJo0, Lexusjjss, Melonstorm, Miniature, mloc, NerdyBoy1104, PsiOmegaDelta, Searif, SkyMarshal, Snapshot, Spectre, Strumpetplaya, Sunfall, Tastyfish, Uristqwerty, Xenone, cib, faux, Zuhayr

                  - Special thanks to: The developers of /tg/station, /vg/station, GoonStation, the original Space Station 13, and BYOND -

                  Have a bug to report?
                  Visit our Issue Tracker.
                  -
                  - - -
                  - -

                  07 July 2022

                  -

                  Evie7056 updated:

                  -
                    -
                  • Многие навыки Синтета были перераспределены с худшую сторону.
                  • -
                  • Синтетик ЭКСО больше не может появиться на Факеле с начала смены.
                  • -
                  • В командную программу была добавлена опция, позволяющая вызвать Синтета из Крио, открывая слот.
                  • -
                  - -

                  05 July 2022

                  -

                  SierraKomodo updated:

                  -
                    -
                  • Pilots now have access to the Post-Flight reports in Deck Management.
                  • -
                  - -

                  04 July 2022

                  -

                  Evie7056 updated:

                  -
                    -
                  • ГСБ-морпех получил звание майора
                  • -
                  • СЕА теперь может быть от армии.
                  • -
                  -

                  Evie7056, XeroXOffice updated:

                  -
                    -
                  • Ранг Супервайзера СФП восстановлен в коде
                  • -
                  • В общем и целом, в коде появилось шесть новых рангов, для представления агентов СФП
                  • -
                  • Следователи СФП получили ранги Старшего Агента и Дежурного Агента
                  • -
                  • Звания Инспектора, Куратора, Директора Отдела (они же Зам.Директора) и Директора, недоступны для Факела, но доступны в коде.
                  • -
                  • Автоталат переехал в защищенную часть оружейной Брига.
                  • -
                  • Изменены спрайты предметов погон, для рядового состава погоны переделаны в нашивки
                  • -
                  • Добавлены отдельные спрайты для значков офицеров армии
                  • -
                  - -

                  03 July 2022

                  -

                  Evie7056 updated:

                  -
                    -
                  • Переименовывание маринов из армии везде, где я забыла до этого
                  • -
                  • Фикс спрайта берета ОДСТ. Он снова красный, взамен берета Летной Дивизии Армии
                  • -
                  • Лифт в роботехнике теперь едет правильно, а не под углом в 33 градуса
                  • -
                  • Законы Синта скомпоновоны в три закона, вместо трех.
                  • -
                  • Фиксы униформы армии. Теперь она должна спавнится правильным образом
                  • -
                  • Фикс рантайма при спавне синта. Он потерял свой персональный спавн на своем "Ранчо-релаксо"
                  • -
                  • Добавленны дополнительные поддельные ранги для маринов E7 и E9. Только админ спавн и торговля.
                  • -
                  • Добавлен еще один берет. Только для админ спавна, до обновления статьи Армии.
                  • -
                  - -

                  02 July 2022

                  -

                  Drakon341 updated:

                  -
                    -
                  • Туфли перемещены из категории дресс обратно в сервис.
                  • -
                  -

                  Evie7056 updated:

                  -
                    -
                  • 70+ причесок, портированных с инфинити.
                  • -
                  • 12 новых бодимарков с инфинити.
                  • -
                  - -

                  29 June 2022

                  -

                  Evie7056 updated:

                  -
                    -
                  • Qdel() ПДФ.
                  • -
                  • Вся старые упоминания Армии теперь являются Морпехами.
                  • -
                  • Любые оставшиеся упоминании Армии теперь подразумевают собой Планетарные Оборонительные Силы и Корпус Морской Пехоты.
                  • -
                  • Твик званий военных званий Армии на "морпехские"
                  • -
                  • Добавлены новые темные куртки для Морпехов.
                  • -
                  • Сервисные куртки отныне являются частью полевой формы у Морпехов по аналогии с куртками Флота.
                  • -
                  • Теперь темная "городская" форма является формой по умолчанию для морпехов.
                  • -
                  • Морпехи ВНОВЬ могут быть инженерами на ГЭК Факел.
                  • -
                  • Добавлены догтеги ГКК в Лоадаут.
                  • -
                  • Добавлен выбор музыкальных инструментов в Лоадаут.
                  • -
                  • Добавлен голубой pissкиперовский плитник в Лоадаут.
                  • -
                  • Фикс наименований горка курток Фолера.
                  • -
                  -

                  Evie7065 updated:

                  -
                    -
                  • Станревольвер нагло отнят у Марингуардов
                  • -
                  - -

                  28 June 2022

                  -

                  Evie7056 updated:

                  -
                    -
                  • ИПК, Шеллы, Ваты, Спейс и Грав Адапты, Тритоны, Скреллы, Унати теперь действительно имеют пиксель скейлинг в зависимости от их роста
                  • -
                  • Шеллы теперь правильно могут надевать почти любые РИГи и Скафандры.
                  • -
                  • При экзамайне Шелла теперь не видна его роботическая сущность.
                  • -
                  • Шеллы теперь имеют звуки при использовании человеческих эмоутов
                  • -
                  • Шеллы теперь имеют человеческие сообщения об ССД.
                  • -
                  • фикс описания Шеллов
                  • -
                  • Шеллы теперь имеют свою собственную "кровь" голубого цвета, являющегося их охладителем.
                  • -
                  • Операционная роботехники и мехбей теперь поменялись местами.
                  • -
                  • Некий "ЭКСО Синт" поселился в старом аплоуде для боргов с вместе сомнительной литераторой и машинным маслом.
                  • -
                  • Роботехник получил альтернативное название профессии "Биомеханический Инженер"
                  • -
                  • ИПК получили расширенный набор фракций в сетапе на выбор.
                  • -
                  • Новейшая разработка ЭКСО, в виде позитронника нового типа прибыла на ГЭК Факел. ЭКСО Синт попал на Факел для абсолютной помощи Экипажу в любой сфере деятельности, однако находясь в правах на уровне Борга.
                  • -
                  - -

                  27 June 2022

                  -

                  Drakon341 updated:

                  -
                    -
                  • Теперь формы контратников могут взять только люди из бранча цивилиан.
                  • -
                  - -

                  26 June 2022

                  -

                  Imienny updated:

                  -
                    -
                  • Dufflebags no longer slow you down, as trade off they cant be opened while on your back.
                  • -
                  -

                  Mucker updated:

                  -
                    -
                  • Fixed simple mobs being unable to force open doors.
                  • -
                  -

                  Ryan180602, Azlanonpc updated:

                  -
                    -
                  • Add Compass/GPS from Nebula.
                  • -
                  - -

                  24 June 2022

                  -

                  updated:

                  -
                    -
                  • 1. Добавлен новый меч: высокочастотная катана
                  • -
                  • 2. чертежи мечей добавлены в РнД
                  • -
                  • 3. в скором будет добавлен новый мув сет специально для этого оружия
                  • -
                  • 4. также прошу скиньтесь мне на пиццу, а то мне Ева не даёт еду в подвале
                  • -
                  - -

                  23 June 2022

                  -

                  Drakon341 updated:

                  -
                    -
                  • Исправление всяких буковок в репорт эдиторе.
                  • -
                  - -

                  22 June 2022

                  -

                  Drakon updated:

                  -
                    -
                  • В аплинк была добавлена отдельная категория для брони и ригов. Тяжелая брони и обычный синди скафандр доступны также для триторов.
                  • -
                  • В аплинк был добавлен мех для покупки.
                  • -
                  • Расширено описания для зашедших за мерков.
                  • -
                  - -

                  21 June 2022

                  -

                  Mucker updated:

                  -
                    -
                  • Science lockers are now properly Science-only.
                  • -
                  • Charon and GUP will both take off and land faster, and be faster with overmap travel.
                  • -
                  -

                  SierraKomodo updated:

                  -
                    -
                  • Rubble now properly dies when hit enough times. It still won't drop loot unless you use the right tools, however.
                  • -
                  • Mech weapons with no charge cost now display an ammo count of `INF` instead of whatever outputted when it runtimed from dividing by zero.
                  • -
                  • The Charon's main fuel line (The one connected to the big CO2 tanks) now has a gas meter.
                  • -
                  -

                  Spookerton updated:

                  -
                    -
                  • Observers can respawn freely during roundstart.
                  • -
                  - -

                  19 June 2022

                  -

                  Imienny updated:

                  -
                    -
                  • Added roll of duct tape and cleaning supplies to raiders base.
                  • -
                  • Raiders now get colorful backpacks instead of ugly gray backpacks.
                  • -
                  -

                  Ninetailed updated:

                  -
                    -
                  • Robots can now remove shuttle H2 tanks from ports
                  • -
                  - -

                  18 June 2022

                  -

                  Ninetailed updated:

                  -
                    -
                  • Maps used for camera and crew monitor software updated
                  • -
                  - -

                  17 June 2022

                  -

                  Ninetailed updated:

                  -
                    -
                  • New interface for robot hypospray
                  • -
                  • Emergency Response bots can now apply an auto-compressor and hang an IV bag
                  • -
                  • Crisis and Emergency Response bots can now carry extra chem bottles for use with the upgraded hypo
                  • -
                  • Adjustments to drugs medical bots can synthesize
                  • -
                  - -

                  16 June 2022

                  -

                  Nl208 updated:

                  -
                    -
                  • Bots such as Beepsky and cleanbots now take damage and die properly.
                  • -
                  - -

                  13 June 2022

                  -

                  CrimsonShrike updated:

                  -
                    -
                  • Prebuilt flamethrowers have new icon.
                  • -
                  • Flamethrower sounds.
                  • -
                  • Flamethrowers now use chems as fire source.
                  • -
                  • Turf fires -> Very hot atmos fires, flamethrowers and fuel decals will generate these fires.
                  • -
                  • Simple mobs now can take fire damage from burning.
                  • -
                  -

                  Exapsters updated:

                  -
                    -
                  • Частичный перевод расовых и общих эмоутов, исключая те, где используются местоимения куклы.
                  • -
                  • Обновлена панель эмоутов. Добавлены "tfist" и "rsalute". Только "rsalute" был переведён.
                  • -
                  • Исправлено отображение эмоута "Черешется", но взамен него было установлено "Почёсывается"...
                  • -
                  - -

                  10 June 2022

                  -

                  4310V343k updated:

                  -
                    -
                  • ченджлоги теперь работают ура ура ура
                  • -
                  • В холодильнике появилось на один йогурт больше
                  • -
                  • Вместо йогурта в холодильнике есть сырок (неплохо)
                  • -
                  • Добавили мерзкий звук поедания сырка
                  • -
                  • Убрали весь хороший звук поедания йогурта
                  • -
                  • Добавили классную картинку с йогуртом
                  • -
                  • Убрали плохую картинку с резоми
                  • -
                  • Убрали очепятки в слове ёгурт
                  • -
                  • Потрогали админов за их... кнопки... йогурт.
                  • -
                  - -

                  12 May 2022

                  -

                  Mucker updated:

                  -
                    -
                  • Adjusted aft-end of the event shuttle so it can dock with the Torch.
                  • -
                  • Added toggleable blastdoors to event shuttle windows.
                  • -
                  • Removed the need for hydrogen on the event shuttle.
                  • -
                  - -

                  11 May 2022

                  -

                  CrimsonShrike updated:

                  -
                    -
                  • Exosuit gravity catapult is now a bit faster and has new effects to make it clearer.
                  • -
                  -

                  Ryan180602, Azlanonpc updated:

                  -
                    -
                  • Adds admin-spawn Fleet rig.
                  • -
                  • Removes Asset Protection rig.
                  • -
                  • Deathsquads now use the generic combat rig.
                  • -
                  • Asset Protection rig from ERT base have been removed entirely. (Rack has a wall in it's place, now.)
                  • -
                  - -

                  09 May 2022

                  -

                  Mucker updated:

                  -
                    -
                  • Drills can mine multiple mineral turfs at once again.
                  • -
                  -

                  Ryan180602 updated:

                  -
                    -
                  • Increases max_desc_len to 256 chars. Custom descriptions are longer.
                  • -
                  -
                  - -GoonStation 13 Development Team -
                  - Coders: Stuntwaffle, Showtime, Pantaloons, Nannek, Keelin, Exadv1, hobnob, Justicefries, 0staf, sniperchance, AngriestIBM, BrianOBlivion
                  - Spriters: Supernorn, Haruhi, Stuntwaffle, Pantaloons, Rho, SynthOrange, I Said No
                  -
                  -
                  -

                  Creative Commons License
                  Except where otherwise noted, Goon Station 13 is licensed under a Creative Commons Attribution-Noncommercial-Share Alike 3.0 License.
                  Rights are currently extended to SomethingAwful Goons only.

                  -

                  Some icons by Yusuke Kamiyamane. All rights reserved. Licensed under a Creative Commons Attribution 3.0 License.

                  -
                  - - diff --git a/html/changelogs/.all_changelog.yml b/html/changelogs/.all_changelog.yml deleted file mode 100644 index 57b4d77e332d0..0000000000000 --- a/html/changelogs/.all_changelog.yml +++ /dev/null @@ -1,19096 +0,0 @@ -DO NOT EDIT THIS FILE BY HAND! AUTOMATICALLY GENERATED BY ss13_genchangelog.py. ---- -2013-01-07: - Cael_Aislinn: - - tgs: Updated server to tgstation r5200 (November 26th, 2012), see https://code.google.com/p/tgstation13/source/list - for tg's changelog. - Chinsky: - - rscadd: 'Implants: Explosvie implant, exploding when victim hears the codephrase - you set.' - - rscadd: 'Implants: Compressed Matter implat, scan item (making it disappear), - inject yourself and recall that item on will!' - - rscadd: Implant removal surgery, with !!FUN!! results if you mess up it. - - rscadd: Coats now have pockets again. - - rscadd: Bash people on tabetops. an windows, or with stools. Grab people to bash - them on tables or windows (better grab for better hit on windows). Drag stool - sprite on you to pick it up, click on it in hand to make it usual stool again. - - rscadd: Surgical caps, and new sprites for bloodbags and fixovein. - - rscadd: Now some surgery steps will bloody your hands, Full-body blood coat in - case youy mess up spectacualry. - - rscadd: Ported some crates (Art, Surgery, Sterile equiplemnt). - - tweak: Changed contraband crates. Posters moved to Art Crate, cigs and lipstick - ot party crate. Now contraband crate has illegal booze and illicit drugs. - - bugfix: Finally got evac party lights - - bugfix: Now disfigurment,now it WILL happen when damage is bad enough. - - experiment: Now if you speak in depressurized area (less than 10 kPa) only people - next to you can hear you. Radios still work though. -2013-01-13: - Chinsky: - - tweak: If you get enough (6) blood drips on one tile, it'll turn into a blood - puddle. Should make bleeding out more visible. - - tweak: Security belt now able to hold taser, baton and tape roll. - - tweak: Added alternative security uniform to Security wardrobes. - - rscadd: 'Ported Urist cult runes. Down with the crayon drawings! Example: http://dl.dropbox.com/u/26846767/images/SS13/255_symbols.PNG' - - bugfix: Engineering tape now require engineer OR atmos access instead of both. - - rscadd: Implants now will react to EMP, possibly in !!FUN!! ways - GauHelldragon: - - rscadd: Servicebots now have RoboTray and Printing Pen. Robotray can be used to - pick up and drop food/drinks. Printing pen can alternate between writing mode - and rename paper mode by clicking it. - - rscadd: Farmbots. A new type of robot that weeds, waters and fertilizes. Use robot - arm on water tank. Then use plant analyzer, mini-hoe, bucket and finally proximity - sensor. - - rscadd: Chefs can clang their serving trays with a rolling pin. Just like a riot - shield! -2013-01-21: - Cael_Aislinn: - - bugfix: Satchels and ore boxes can now hold strange rocks. - - rscadd: Closets and crates can now be built out of 5 and 10 plasteel respectively. - - rscadd: Observers can become mice once more. -2013-01-23: - Cael_Aislinn: - - tgs: Updated server to tgstation r5200 (November 26th, 2012), see https://code.google.com/p/tgstation13/source/list - for tg's changelog. -2013-01-31: - CIB: - - bugfix: Chilis and cold chilis no longer kill in small amounts - - bugfix: Chloral now again needs around 5 units to start killing somebody -2013-02-13: - Erthilo: - - bugfix: Fixed SSD (logged-out) players not staying asleep. - - bugfix: Fixed set-pose verb and mice emotes having extra periods. - - bugfix: Fixed virus crate not appearing and breaking supply shuttle. - - bugfix: Fixed newcaster photos not being censored. -2013-02-14: - CIB: - - rscadd: Medical side-effects(patients are going to come back for secondary treatment) - - rscadd: NT loyalty setting(affects command reports and gives antags hints who - might collaborate with them) - - tweak: Simple animal balance fixes(They're slower now) - CaelAislinn: - - rscadd: Re-added old ion storm laws, re-added grid check event. - - rscadd: Added Rogue Drone and Vermin Infestation random events. - - rscadd: Added/fixed space vines random event. - - tweak: Updates to the virus events. - - tweak: Spider infestation and alien infestation events turned off by default. - - tweak: Soghun, taj and skrell all have unique language text colours. - - tweak: Moderators will no longer be listed in adminwho, instead use modwho. - Gamerofthegame: - - rscadd: Miscellaneous mapfixes. -2013-02-18: - Cael Aislinn: - - rscadd: Security bots will now target hostile mobs, and vice versa. - - tweak: Carp should actually emigrate now, instead of just immigrating then squatting - around the outer hull. - - tweak: Admins and moderators have been split up into separate 'who' verbs (adminwho - and modwho respectively). -2013-02-20: - Chinsky: - - rscadd: 'Added new surgery: putting items inside people. After you use retractor - to keep incision open, just click with any item to put it inside. But be wary, - if you try to fit something too big, you might rip the veins. To remove items, - use implant removal surgery.' - - rscadd: Crowbar can be used as alternative to retractor. - - rscadd: Can now unload guns by clicking them in hand. - - tweak: Fixed distance calculation in bullet missing chance computation, it was - always assuming 1 or 0 tiles. Now distace REALLY matters when you shoot. - - rscadd: To add more FUN to previous thing, bullets missed to not disappear but - keep going until they hit something else. - - bugfix: Compressed Matter and Explosive implants spawn properly now. - - tweak: 'Tweaks to medical effects: removed itch caused by bandages. Chemical effects - now have non-100 chance of appearing, the stronger medicine, the more probality - it''ll have side effects.' -2013-02-22: - Chinsky: - - tweak: Change to body cavity surgery. Can only put items in chest, groind and - head. Max size for item - 3 (chest), 2 (groin), 1 (head). For chest surgery - ribs should be bent open, (lung surgery until second scalpel step). Surgery - step needs preparation step, with drill. After that you can place item inside, - or seal it with cautery to do other step instead. -2013-02-23: - Cael Aislinn: - - wip: RUST machinery components should now be researchable (with high requirements) - and orderable through QM (with high cost). - - wip: Shield machinery should now be researchable (with high requirements) and - orderable through QM (with high cost). This one is reportedly buggy. - - tweak: Rogue vending machines should revert back to normal at the end of the event. - - rscadd: New Unathi hair styles. -2013-02-25: - Cael Aislinn: - - rscadd: As well as building hull shield generators, normal shield gens can now - be built (see http://baystation12.net/forums/viewtopic.php?f=1&t;=6993). - - rscadd: 'New random events: multiple new system wide-events have been have been - added to the newscaster feeds, some not quite as respectable as others.' - - rscadd: 'New random event: some lucky winners will win the TC Daily Grand Slam - Lotto, while others may be the target of malicious hackers.' -2013-02-27: - Gamerofthegame: - - rscadd: Added the (base gear) ERT preset for the debug command. - - rscadd: Map fixes, Virology hole fixed. Atmospheric fixes for mining and, to a - less extent, the science outpost. (No, not cycling airlocks) - - rscadd: Fiddled with the ERT set up location on Centcom. Radmins will now have - a even easier time equiping a team of any real pratical size, especially coupled - with the above debug command. -2013-03-05: - CIB: - - rscadd: Added internal organs. They're currently all located in the chest. Use - advanced scanner to detect damage. Use the same surgery as for ruptured lungs - to fix them. - Cael Aislinn: - - soundadd: Set roundstart music to randomly choose between space.ogg and traitor.ogg - (see http://baystation12.net/forums/viewtopic.php?f=5&t;=6972) - - experiment: All RUST components except for TEGs (which generate the power) are - now obtainable ingame, bored engineers should get hold of them and setup an - experimental reactor for testing purposes. -2013-03-06: - Cael Aislinn: - - rscadd: Type 1 thermoelectric generators and the associated binary circulators - are now moveable (wrench to secure/unsecure) and orderable via Quartermaster. - - wip: code/maps/rust_test.dmm contains an example setup for a functional RUST reactor. - Maximum output is in the range of 12 to 20MW (12 to 20 million watts). - - bugfix: Removed double announcement for gridchecks, reduced duration of gridchecks. - RavingManiac: - - rscadd: You can now stab people with syringes using the "harm" intent. This destroys - the syringe and transfers a random percentage of its contents into the target. - Armor has a 50% chance of blocking the syringe. -2013-03-09: - Cael Aislinn: - - rscadd: "Beekeeping is now possible. Construct an apiary of out wood and embed\ - \ it into a hydroponics tray, then get a queen bee and bottle of BeezEez from\ - \ cargo bay. \n\t\tHives produce honey and honeycomb, but be wary if the bees\ - \ start swarming." -2013-03-11: - CIB: - - rscadd: Cloning now requires you to put slabs of meat into the cloning pod to - replenish biomass. - Cael Aislinn: - - wip: The xenoarchaeology update is here. This includes a major content overhaul - and a bunch of new features for xenoarchaeology. - - tweak: Digsites (strange rock deposits) are now much more nuanced and interesting, - and a huge number of minor (non-artifact) finds have been added. - - rscadd: Excavation is now a complex process that involves digging into the rock - to the right depth. - - rscadd: Chemical analysis is required for safe excavation of the digsites, in - order to determine how best to extract the finds. - - bugfix: Anomalous artifacts have been overhauled and many longstanding bugs with - existing effects have been fixed - the anomaly utiliser should now work much - more often. - - rscadd: Numerous new artifact effects have been added and some new artifact types - can be dug up from the asteroid. - - rscadd: New tools and equipment have been added, including normal and spaceworthy - versions of the anomaly suits, excavation tools and other neat gadgets. - - rscadd: Five books have been written by subject matter experts from around the - galaxy to help the crew of the Exodus come to grips with this exacting new science - (over 3000 words of tutorials!). - Chinsky: - - rscadd: Sec HUDs now can see short versions of sec records.on examine. Med HUDs - do same for medical records, and can set medical status of patient. - - rscadd: Damage to the head can now cause brain damage. -2013-03-14: - Spamcat: - - rscadd: Figured I should make one of these. Syringestabbing now produces a broken - syringe complete with fingerprints of attacker and blood of a victim, so dispose - your evidence carefully. Maximum transfer amount per stab is lowered to 10. -2013-03-15: - Cael_Aislinn: - - rscadd: Mapped a compact research base on the mining asteroid, with multiple labs - and testing rooms. It's reachable through a new (old) shuttle dock that leaves - from the research wing on the main station. -2013-03-26: - Spamcat: - - bugfix: Chemmaster now puts pills in pill bottles (if one is inserted). - - tweak: Stabbing someone with a syringe now deals 3 damage instead of 7 because - 7 is like, a crowbar punch. - - bugfix: Lizards can now join mid-round again. - - rscadd: Chemicals in bloodstream will transfer with blood now, so don't get drunk - before your blood donation. Viruses and antibodies transfer through blood too. - - bugfix: Virology is working again. -2013-03-27: - Asanadas: - - tweak: The Null Rod has recovered its de-culting ability, for balance reasons. - Metagaming with it is a big no-no! - - rscadd: Holy Water as a liquid is able to de-cult. Less effective, but less bloody. - May be changed over the course of time for balance. -2013-04-04: - SkyMarshal: - - bugfix: Fixed ZAS - - bugfix: Fixed Fire - Spamcat: - - bugfix: Blood type is now saved in character creation menu, no need to edit it - manually every round. -2013-04-09: - SkyMarshal: - - bugfix: Fire Issues (Firedoors, Flamethrowers, Incendiary Grenades) fixed. - - bugfix: Fixed a bad line of code that was preventing autoignition of flammable - gas mixes. - - bugfix: Volatile fuel is burned up after a point. - - rscdel: Partial-tile firedoors removed. This is due to ZAS breaking when interacting - with them. -2013-04-11: - SkyMarshal: - - experiment: Fire has been reworked. - - experiment: In-game variable editor is both readded and expanded with fire controlling - capability. -2013-04-17: - SkyMarshal: - - experiment: ZAS is now more deadly, as per decision by administrative team. May - be tweaked, but currently AIRFLOW is the biggest griefer. - - experiment: World startup optimized, many functions now delayed until a player - joins the server. (Reduces server boot time significantly) - - tweak: Zones will now equalize air more rapidly. - - bugfix: ZAS now respects active magboots when airflow occurs. - - bugfix: Airflow will no longer throw you into doors and open them. - - bugfix: Race condition in zone construction has been fixed, so zones connect properly - at round start. - - bugfix: Plasma effects readded. - - bugfix: Fixed runtime involving away mission. -2013-04-24: - Jediluke69: - - rscadd: Added 5 new drinks (Kira Special, Lemonade, Brown Star, Milkshakes, Rewriter) - - tweak: Nanopaste now heals about half of what it used to - - tweak: Ballistic crates should now come with shotguns loaded with actual shells - no more beanbags - - bugfix: Iced tea no longer makes a glass of .what? - NerdyBoy1104: - - rscadd: 'New Botany additions: Rice and Plastellium. New sheet material: Plastic.' - - rscadd: Plastellium is refined into plastic by first grinding the produce to get - plasticide. 20 plasticide + 10 polytrinic acid makes 10 sheets of plastic which - can be used to make crates, forks, spoons, knives, ashtrays or plastic bags - from. - - rscadd: Rice seeds grows into rice stalks that you grind to get rice. 10 Rice - + 5 Water makes boiled rice, 10 rice + 5 milk makes rice pudding, 10 rice + - 5 universal enzyme (in beaker) makes Sake. - faux: - - imageadd: Mixed Wardrobe Closet now has colored shoes and plaid skirts. - - imageadd: Dress uniforms added to the Captain, RD, and HoP wardrobe closets. A - uniform jacket has also been added to the Captain's closet. HoS' hat has been - re-added to their closet. I do not love the CMO and CE enough to give them anything. - - imageadd: Atheletic closet now has five different swimsuits *for the ladies* in - them. If you are a guy, be prepared to be yelled at if you run around like a - moron in one of these. Same goes for ladies who run around in shorts with their - titties swaying in the space winds. - - imageadd: A set of dispatcher uniforms will spawn in the security closet. These - are for playtesting the dispatcher role. - - imageadd: New suit spawns in the laundry room. It's for geezer's only. You're - welcome, Book. - - imageadd: Nurse outfit variant, orderly uniform, and first responder jacket will - now spawn in the medical wardrobe closet. - - imageadd: 'A white wedding dress will spawn in the chaplain''s closet. There are - also several dresses currently only adminspawnable. Admins: Look either under - "bride" or "dress." The bride one leads to the colored wedding dresses, and - there are some other kinds of dresses under dress.' - - tweak: No more luchador masks or boxing gloves or boxing ring. You guys have a - swimming pool now, dip in and enjoy it. - - tweak: he meeting hall has been replaced with an awkwardly placed security office - meant for prisoner processing. - - tweak: Added a couple more welding goggles to engineering since you guys liked - those a lot. - - imageadd: Flasks spawn behind the bar. Only three. Don't fight over them. I don't - know how to add them to the bar vending machine otherwise I would have done - that instead. Detective, you have your own flask in your office, it's underneath - the cigarettes on your desk. - - tweak: Added two canes to the medical storage, for people who have leg injuries - and can't walk good and stuff. I do not want to see doctors pretending to be - House. These are for patients. Do not make me delete this addition and declare - you guys not being able to have nice things. - - tweak: Secondary entance to EVA now directly leads into the medbay hardsuit section. - Sorry for any inconviences this will cause. The CMO can now fetch the hardsuits - whenever they want. - - tweak: Secondary security hardsuit has been added to the armory. Security members - please stop stealing engineer's hardsuits when you guys want to pair up for - space travel. - - tweak: Firelocks have been moved around in the main hallways to form really ghetto - versions of airlocks. - - tweak: Violin spawns in theatre storage now. I didn't put the piano there though, - that was someone else. - - tweak: Psych office in medbay has been made better looking. -2013-05-14: - Cael_Aislinn: - - experiment: Depth scanners can now be used to determine what material archaeological - deposits are made of, meaning lab analysis is no longer required. - - tweak: Some useability issues with xenoarchaeology tools have been resolved, and - the transit pods cycle automatically now. -2013-05-15: - Spamcat: - - rscadd: Added telescopic batons - to HoS's and captain's lockers. These are quite robust and easily concealable. -2013-05-21: - SkyMarshal: - - experiment: ZAS will now speed air movement into/out of a zone when unsimulated - tiles (e.g. space) are involved, in relation to the number of tiles. - - experiment: Portable Canisters will now automatically connect to any portable - connecter beneath them on map load. - - bugfix: Bug involving mis-mapped disposal junction fixed - - bugfix: Air alarms now work for atmos techs (whoops!) - - bugfix: The Master Controller now properly stops atmos when it runtimes. - - bugfix: Backpacks can no longer be contaminated - - tweak: ZAS no longer logs air statistics. - - tweak: ZAS now rebuilds as soon as it detects a semi-complex change in geometry. (It - was doing this already, but in a convoluted way which was actually less efficient) - - tweak: General code cleanup/commenting of ZAS - - tweak: Jungle now initializes after the random Z-level loads and atmos initializes. -2013-05-25: - Erthilo: - - bugfix: Fixes alien races appearing an unknown when speaking their language. - - bugfix: Fixes alien races losing their language when cloned. - - bugfix: Fixes UI getting randomly reset when trying to change it in Genetics Scanners. -2013-05-26: - Chinsky: - - rscadd: Tentacles! Now clone damage will make you horribly malformed like examine - text says. - Meyar: - - rscadd: The syndicate shuttle now has a cycling airlock during Nuke rounds. - - rscadd: Restored the ability for the syndicate Agent ID to change the name on - the card (reforge it) more than once. - - rscadd: ERT Radio now functional again. - - rscadd: 'Research blast doors now actually lock down the entirety of station-side - Research. ' - - rscadd: 'Added lock down buttons to the wardens office. ' - - rscadd: 'The randomized barsign has made a return. ' - - rscadd: Syndicate Agent ID's external airlock access restored. - VitrescentTortoise: - - rscadd: Added a third option for not getting any job preferences. It allows you - to return to the lobby instead of joining. -2013-05-28: - Erthilo: - - bugfix: Fixes everyone being able to understand alien languages. HERE IS YOUR - TOWER OF BABEL - VitrescentTortoise: - - bugfix: Wizard's forcewall now works. -2013-05-30: - Segrain: - - bugfix: Meteor showers actually spawn meteors now. - - tweak: Engineering tape fits into toolbelt and can be placed on doors. - - rscadd: Pill bottles can hold paper. - Spamcat: - - tweak: Pill bottle capacity increased to 14 items. - - bugfix: Fixed Lamarr (it now spawns properly) - proliberate: - - rscadd: Station time is now displayed in the status tab for new players and AIs. -2013-05-31: - Segrain: - - bugfix: Portable canisters now properly connect to ports beneath them on map load. - - bugfix: Fixed unfastening gas meters. -2013-06-01: - Chinsky: - - rscadd: Bloody footprints! Now stepping in the puddle will dirty your shoes/feet - and make you leave bloody footprints for a bit. - - rscadd: Blood now dries up after some time. Puddles take ~30 minutes, small things - 5 minutes. - - bugfix: Untreated wounds now heal. No more toe stubs spamming you with pain messages - for the rest of the shift. - - experiment: On the other side, everything is healed slowly. Maximum you cna squeeze - out of first aid is 0.5 health per tick per organ. Lying down makes it faster - too, by 1.5x factor. - - rscadd: Lids! Click beaker/bottle in hand to put them on/off. Prevent spilling - - rscadd: Added 'hailer' to security lockers. If used in hand, says "Halt! Security!". - For those who can't run and type. -2013-06-05: - Chinsky: - - rscadd: Load bearing equipment - webbings and vests for engineers and sec. Attach - to jumpsuit, use 'Look in storage' verb (object tab) to open. - Segrain: - - rscadd: Exosuits now can open firelocks by walking into them. -2013-06-06: - Asanadas: - - rscadd: Added a whimsical suit to the head of personnel's secret clothing locker. - Meyar: - - bugfix: Disposal's mail routing fixed. Missing pipes replaced. - - bugfix: 'Chemistry is once again a part of the disposals delivery circuit. ' - - bugfix: Added missing sorting junctions to Security and HoS office. - - bugfix: Fixed a duplicate sorting junction. -2013-06-09: - Segrain: - - bugfix: Emagged supply console can order SpecOp crates again. -2013-06-11: - Meyar: - - bugfix: Fixes a security door with a firedoor ontop of it. - - bugfix: Fixed a typo relating to the admin Select Equipment Verb. (It's RESPONSE - team not RESCUE team) - - rscadd: ERT are now automated, from their spawn to their shuttle. Admin intervention - no longer required! (Getting to the mechs still requires admin permission generally) - - rscadd: Added flashlights to compensate for the weakened PDA lights - - tweak: 'ERT Uniforms updated to be in line with Centcom uniforms. No more turtlenecks, - no sir. ' -2013-06-12: - Zuhayr: - - rscadd: Added pneumatic cannon and harpoons. - - experiment: Added embedded projectiles. Bullets and thrown weapons may stick in - targets. Throwing them by hand won't make them stick, firing them from a cannon - might. Implant removal surgery will get rid of shrapnel and stuck items. -2013-06-13: - Kilakk: - - rscadd: Added the Xenobiologist job. Has access to the research hallway and to - xenobiology. - - rscdel: Removed Xenobiology access from Scientists. - - rscdel: Removed the Xenobiologist alternate title from Scientists. - - rscadd: Added "Xenoarchaeology" to the RD, Scientists, and to the ID computer. - - tweak: Changed the Research Outpost doors to use "Xenoarchaeology" access. -2013-06-18: - Segrain: - - bugfix: Fixed some bugs in windoor construction. - - tweak: Secure windoors are made with rods again. - - rscadd: Windoors drop their electronics when broken. Emagged windoors can have - theirs removed by crowbar. - - rscadd: Airlock electronics can be configured to make door open for any single - access on it instead of all of them. - - rscadd: Cyborgs can preview their icons before choosing. -2013-06-21: - Jupotter: - - bugfix: Fix the robotiscist preview in the char setupe screen -2013-06-22: - Cael_Aislinn: - - tweak: The xenoarchaeology depth scanner will now tell you what energy field is - required to safely extract a find. - - tweak: Excavation picks will now dig faster, and xenoarchaeology as a whole should - be easier to do. -2013-06-23: - Segrain: - - rscadd: Airlocks of various models can be constructed again. - faux: - - experiment: There has been a complete medbay renovation spearheaded by Vetinarix. - http://baystation12.net/forums/viewtopic.php?f=20&t;=7847 <-- Please - put any commentary good or bad, here. - - tweak: Some maintenance doors within RnD and Medbay have had their accesses changed. - Maintenance doors in the joint areas (leading to the research shuttle, virology, - and xenobiology) are now zero access. Which means anyone in those joints can - enter the maintenance tunnels. This was done to add additional evacuation locations - during radiation storms. Additional maintenance doors were added to the tunnels - in these areas to prevent docs and scientists from running about. - - tweak: Starboard emergency storage isn't gone now, it's simply located in the - escape wing. - - experiment: An engineering training room has been added to engineering. This location - was previously where surgery was located. If you are new to engineering or need - to brush up on your skills, please use this area for testing. -2013-06-26: - Segrain: - - bugfix: Autopsy scanner properly displays time of wound infliction and death. - - bugfix: Autopsy scanner properly displays wounds by projectile weapons. - Whitellama: - - bugfix: One-antag rounds (like wizard/ninja) no longer end automatically upon - death - - wip: Space ninja has been implemented as a voteable gamemode - - rscadd: Space ninja spawn landmarks have been implemented (but not yet placed - on the map), still spawn at carps-pawns instead. (The code will warn you about - this and ask you to report it, it's a known issue.) - - rscadd: Five new space ninja directives have been added, old directives have been - reworded to be less harsh - - wip: Space ninjas have been given their own list as antagonists, and are no longer - bundled up with traitors - - bugfix: Space ninjas with a "steal a functional AI" objective will now succeed - by downloading one into their suits - - tweak: Space ninja suits' exploding on death has been nerfed, so as not to cause - breaches - - rscadd: A few space ninja titles/names have been added and removed to be slightly - more believable - - bugfix: The antagonist selector no longer chooses jobbanned players when it runs - out of willing options -2013-06-27: - Segrain: - - bugfix: ID cards properly setup bloodtype, DNA and fingerprints again. -2013-06-28: - Segrain: - - rscadd: AIs are now able to examine what they see. -2013-07-03: - Segrain: - - rscadd: Security and medical cyborgs can use their HUDs to access records. -2013-07-05: - Spamcat: - - rscadd: Pulse! Humans now have hearbeat rate, which can be measured by right-clicking - someone - Check pulse or by health analyzer. Medical machinery also has heartbeat - monitors. Certain meds and conditions can influence it. -2013-07-06: - Chinsky: - - rscadd: Humans now can be infected with more than one virus at once. - - rscadd: All analyzed viruses are put into virus DB. You can view it and edit their - name and description on medical record consoles. - - tweak: 'Only known viruses (ones in DB) will be detected by the machinery and - HUDs. ' - - rscadd: Viruses cause fever, body temperature rising the more stage is. - - bugfix: Humans' body temperature does not drift towards room one unless there's - big difference in them. - - tweak: Virus incubators now can transmit viuses from dishes to blood sample. - - rscadd: New machine - centrifuge. It can isolate antibodies or viruses (spawning - virus dish) from a blood sample in vials. Accepts vials only. - - rscadd: Fancy vial boxes in virology, one of them is locked by ID with MD access. - - tweak: Engineered viruses are now ariborne too. -2013-07-11: - Chinsky: - - rscadd: Gun delays. All guns now have delays between shots. Most have less than - second, lasercannons and pulse rifles have around 2 seconds delay. Automatics - have zero, click-speed. -2013-07-26: - Kilakk: - - bugfix: Brig cell timers will no longer start counting down automatically. - - tweak: Separated the actual countdown timer from the timer controls. Pressing - "Set" while the timer is counting down will reset the countdown timer to the - time selected. -2013-07-28: - Segrain: - - rscadd: Camera console circuits can be adjusted for different networks. - - rscadd: Nuclear operatives and ERT members have built-in cameras in their helmets. - Activate helmet to initialize it. -2013-07-30: - Erthilo: - - bugfix: EFTPOS and ATM machines should now connect to databases. - - bugfix: Gravitational Catapults can now be removed from mechs. - - bugfix: Ghost manifest rune paper naming now works correctly. - - bugfix: Fix for newscaster special characters. Still not recommended. - Kilakk: - - rscadd: Added colored department radio channels. -2013-08-01: - Asanadas: - - tweak: The Null Rod has recovered its de-culting ability, for balance reasons. - Metagaming with it is a big no-no! - - rscadd: Holy Water as a liquid is able to de-cult. Less effective, but less bloody. - May be changed over the course of time for balance. - CIB: - - bugfix: Chilis and cold chilis no longer kill in small amounts - - bugfix: Chloral now again needs around 5 units to start killing somebody - Cael Aislinn: - - rscadd: Security bots will now target hostile mobs, and vice versa. - - tweak: Carp should actually emigrate now, instead of just immigrating then squatting - around the outer hull. - - tweak: Admins and moderators have been split up into separate 'who' verbs (adminwho - and modwho respectively). - CaelAislinn: - - rscadd: Re-added old ion storm laws, re-added grid check event. - - rscadd: Added Rogue Drone and Vermin Infestation random events. - - rscadd: Added/fixed space vines random event. - - tweak: Updates to the virus events. - - tweak: Spider infestation and alien infestation events turned off by default. - - tweak: Soghun, taj and skrell all have unique language text colours. - - tweak: Moderators will no longer be listed in adminwho, instead use modwho. - Cael_Aislinn: - - tgs: Updated server to tgstation r5200 (November 26th, 2012), see https://code.google.com/p/tgstation13/source/list - for tg's changelog. - Chinsky: - - rscadd: 'Old new medical features:' - - rscadd: Autoinjectors! They come preloaded with 5u of inapro, can be used instantly, - and are one-use. You can replace chems inside using a syringe. Box of them is - added to Medicine closet and medical supplies crate. - - rscadd: Splints! Target broken liimb and click on person to apply. Can be taken - off in inventory menu, like handcuffs. Splinted limbs have less negative effects. - - rscadd: Advanced medikit! Red and mean, all doctors spawn with one. Contains better - stuff - advanced versions of bandaids and aloe heal 12 damage on the first use. - - tweak: Wounds with damage above 50 won't heal by themselves even if bandaged/salved. - Would have to seek advanced medical attention for those. - Erthilo: - - bugfix: Fixed SSD (logged-out) players not staying asleep. - - bugfix: Fixed set-pose verb and mice emotes having extra periods. - - bugfix: Fixed virus crate not appearing and breaking supply shuttle. - - bugfix: Fixed newcaster photos not being censored. - Gamerofthegame: - - rscadd: Miscellaneous mapfixes. - GauHelldragon: - - rscadd: Servicebots now have RoboTray and Printing Pen. Robotray can be used to - pick up and drop food/drinks. Printing pen can alternate between writing mode - and rename paper mode by clicking it. - - rscadd: Farmbots. A new type of robot that weeds, waters and fertilizes. Use robot - arm on water tank. Then use plant analyzer, mini-hoe, bucket and finally proximity - sensor. - - rscadd: Chefs can clang their serving trays with a rolling pin. Just like a riot - shield! - Jediluke69: - - rscadd: Added 5 new drinks (Kira Special, Lemonade, Brown Star, Milkshakes, Rewriter) - - tweak: Nanopaste now heals about half of what it used to - - tweak: Ballistic crates should now come with shotguns loaded with actual shells - no more beanbags - - bugfix: Iced tea no longer makes a glass of .what? - Jupotter: - - bugfix: Fix the robotiscist preview in the char setupe screen - Kilakk: - - rscadd: Added the Xenobiologist job. Has access to the research hallway and to - xenobiology. - - rscdel: Removed Xenobiology access from Scientists. - - rscdel: Removed the Xenobiologist alternate title from Scientists. - - rscadd: Added "Xenoarchaeology" to the RD, Scientists, and to the ID computer. - - tweak: Changed the Research Outpost doors to use "Xenoarchaeology" access. - Meyar: - - rscadd: The syndicate shuttle now has a cycling airlock during Nuke rounds. - - rscadd: Restored the ability for the syndicate Agent ID to change the name on - the card (reforge it) more than once. - - rscadd: ERT Radio now functional again. - - rscadd: 'Research blast doors now actually lock down the entirety of station-side - Research. ' - - rscadd: 'Added lock down buttons to the wardens office. ' - - rscadd: 'The randomized barsign has made a return. ' - - rscadd: Syndicate Agent ID's external airlock access restored. - NerdyBoy1104: - - rscadd: 'New Botany additions: Rice and Plastellium. New sheet material: Plastic.' - - rscadd: Plastellium is refined into plastic by first grinding the produce to get - plasticide. 20 plasticide + 10 polytrinic acid makes 10 sheets of plastic which - can be used to make crates, forks, spoons, knives, ashtrays or plastic bags - from. - - rscadd: Rice seeds grows into rice stalks that you grind to get rice. 10 Rice - + 5 Water makes boiled rice, 10 rice + 5 milk makes rice pudding, 10 rice + - 5 universal enzyme (in beaker) makes Sake. - RavingManiac: - - rscadd: You can now stab people with syringes using the "harm" intent. This destroys - the syringe and transfers a random percentage of its contents into the target. - Armor has a 50% chance of blocking the syringe. - Segrain: - - bugfix: Meteor showers actually spawn meteors now. - - tweak: Engineering tape fits into toolbelt and can be placed on doors. - - rscadd: Pill bottles can hold paper. - SkyMarshal: - - bugfix: Fixed ZAS - - bugfix: Fixed Fire - Spamcat: - - rscadd: Figured I should make one of these. Syringestabbing now produces a broken - syringe complete with fingerprints of attacker and blood of a victim, so dispose - your evidence carefully. Maximum transfer amount per stab is lowered to 10. - VitrescentTortoise: - - rscadd: Added a third option for not getting any job preferences. It allows you - to return to the lobby instead of joining. - Whitellama: - - bugfix: One-antag rounds (like wizard/ninja) no longer end automatically upon - death - - wip: Space ninja has been implemented as a voteable gamemode - - rscadd: Space ninja spawn landmarks have been implemented (but not yet placed - on the map), still spawn at carps-pawns instead. (The code will warn you about - this and ask you to report it, it's a known issue.) - - rscadd: Five new space ninja directives have been added, old directives have been - reworded to be less harsh - - wip: Space ninjas have been given their own list as antagonists, and are no longer - bundled up with traitors - - bugfix: Space ninjas with a "steal a functional AI" objective will now succeed - by downloading one into their suits - - tweak: Space ninja suits' exploding on death has been nerfed, so as not to cause - breaches - - rscadd: A few space ninja titles/names have been added and removed to be slightly - more believable - - bugfix: The antagonist selector no longer chooses jobbanned players when it runs - out of willing options - Zuhayr: - - rscadd: Added pneumatic cannon and harpoons. - - experiment: Added embedded projectiles. Bullets and thrown weapons may stick in - targets. Throwing them by hand won't make them stick, firing them from a cannon - might. Implant removal surgery will get rid of shrapnel and stuck items. - faux: - - imageadd: Mixed Wardrobe Closet now has colored shoes and plaid skirts. - - imageadd: Dress uniforms added to the Captain, RD, and HoP wardrobe closets. A - uniform jacket has also been added to the Captain's closet. HoS' hat has been - re-added to their closet. I do not love the CMO and CE enough to give them anything. - - imageadd: Atheletic closet now has five different swimsuits *for the ladies* in - them. If you are a guy, be prepared to be yelled at if you run around like a - moron in one of these. Same goes for ladies who run around in shorts with their - titties swaying in the space winds. - - imageadd: A set of dispatcher uniforms will spawn in the security closet. These - are for playtesting the dispatcher role. - - imageadd: New suit spawns in the laundry room. It's for geezer's only. You're - welcome, Book. - - imageadd: Nurse outfit variant, orderly uniform, and first responder jacket will - now spawn in the medical wardrobe closet. - - imageadd: 'A white wedding dress will spawn in the chaplain''s closet. There are - also several dresses currently only adminspawnable. Admins: Look either under - "bride" or "dress." The bride one leads to the colored wedding dresses, and - there are some other kinds of dresses under dress.' - - tweak: No more luchador masks or boxing gloves or boxing ring. You guys have a - swimming pool now, dip in and enjoy it. - - tweak: he meeting hall has been replaced with an awkwardly placed security office - meant for prisoner processing. - - tweak: Added a couple more welding goggles to engineering since you guys liked - those a lot. - - imageadd: Flasks spawn behind the bar. Only three. Don't fight over them. I don't - know how to add them to the bar vending machine otherwise I would have done - that instead. Detective, you have your own flask in your office, it's underneath - the cigarettes on your desk. - - tweak: Added two canes to the medical storage, for people who have leg injuries - and can't walk good and stuff. I do not want to see doctors pretending to be - House. These are for patients. Do not make me delete this addition and declare - you guys not being able to have nice things. - - tweak: Secondary entance to EVA now directly leads into the medbay hardsuit section. - Sorry for any inconviences this will cause. The CMO can now fetch the hardsuits - whenever they want. - - tweak: Secondary security hardsuit has been added to the armory. Security members - please stop stealing engineer's hardsuits when you guys want to pair up for - space travel. - - tweak: Firelocks have been moved around in the main hallways to form really ghetto - versions of airlocks. - - tweak: Violin spawns in theatre storage now. I didn't put the piano there though, - that was someone else. - - tweak: Psych office in medbay has been made better looking. - proliberate: - - rscadd: Station time is now displayed in the status tab for new players and AIs. -2013-08-04: - Chinsky: - - rscadd: Health HUD indicator replaced with Pain indicator. Now health indicator - shows pain level instead of actual vitals level. Some types of damage contribute - more to pain, some less, usually feeling worse than they really are. -2013-08-08: - Erthilo: - - bugfix: Raise Dead rune now properly heals and revives dead corpse. - - bugfix: Admin-only rejuvenate verb now heals all organs, limbs, and diseases. - - bugfix: Cyborg sprites now correctly reset with reset boards. This means cyborg - appearances can now be changed without admin intervention. -2013-09-18: - Kilakk: - - rscadd: Fax machines! The Captain and IA agents can use the fax machine to send - properly formatted messages to Central Command. - - imageadd: Gave the fax machine a fancy animated sprite. Thanks Cajoes! -2013-09-24: - Snapshot: - - rscdel: Removed hidden vote counts. - - rscdel: Removed hiding of vote results. - - rscdel: Removed OOC muting during votes. - - rscadd: Crew transfers are no longer callable during Red and Delta alert. - - wip: Started work on Auto transfer framework. -2013-10-06: - Chinsky: - - rscadd: Return of dreaded side effects. They now manifest well after their cause - disappears, so curing them should be possible without them reappearing immediately. - They also lost last stage damaging effects. -2013-10-29: - Cael_Aislinn: - - rscadd: Xenoarchaeology's chemical analysis and six analysis machines are gone, - replaced by a single one which can be beaten in a minigame. - - rscadd: Sneaky traitors will find new challenges to overcome at the research outpost, - but may also find new opportunities (transit tubes can now be traversed). - - rscadd: Finding active alien machinery should now be made significantly easier - with the Alden-Saraspova counter. -2013-11-01: - Various: - - rscadd: Autovoting, Get off the station when your 15 hour workweek is done, thanks - unions! - - rscadd: Some beach props that Chinsky finds useless. - - wip: Updated NanoUI - - rscadd: Dialysis while in sleepers - removes reagents from mobs, like the chemist, - toss him in there! - - tweak: Pipe Dispensers can now be ordered by Cargo - - rscadd: Fancy G-G-G-G-Ghosts! -2013-11-23: - Ccomp5950: - - bugfix: Players are now no longer able to commit suicide with a lasertag gun, - and will feel silly for doing so. - - bugfix: Ghosts hit with the cult book shall now actually become visible. - - bugfix: The powercells spawned with Exosuits will now properly be named to not - confuse bearded roboticists. - - bugfix: Blindfolded players will now no longer require eye surgery to repair their - sight, removing the blindfold will be sufficient. - - rscadd: Atmospheric Technicians will now have access to Exterior airlocks. -2013-11-24: - Yinadele: - - experiment: Supermatter engine added! Please treat your new engine gently, and - report any strangeness! - - tweak: Rebalanced events so people don't explode into appendicitis or have their - organs constantly explode. - - rscadd: Vending machines have had bottled water, iced tea, and grape soda added. - - rscadd: Head reattachment surgery added! Sew heads back on proper rather than - monkey madness. - - rscadd: Pain crit rebalanced - Added aim variance depending on pain levels, nerfed - blackscreen severely. - - rscadd: 'Cyborg alt titles: Robot, and Android added! These will make you spawn - as a posibrained robot. Please enjoy!' - - bugfix: Fixed the sprite on the modified welding goggles, added a pair to the - CE's office where they'll be used. - - bugfix: Fixed atmos computers- They are once again responsive! - - tweak: Added in functionality proper for explosive implants- You can now set their - level of detonation, and their effects are more responsively concrete depending - on setting. - - rscadd: Hemostats re-added to autolathe! - - rscadd: Added two manuals on atmosia and EVA, by MagmaRam! Found in engineering - and the engineering bookcase. - - bugfix: Fixed areas in medbay to have fully functional APC sectors. - - rscadd: Girders are now lasable. - - experiment: Please wait warmly, new features planned for next merge! -2013-12-01: - 'Various Developers banged their keyboards together:': - - rscadd: New Engine, the supermatter, figure out what a cooling loop is, or don't - and blow up engineering! - - rscadd: Each department will have it's own fax, make a copy of your butt and fax - it to the admins! - - rscadd: Booze and soda dispensers, they are like chemmasters, only with booze - and soda! - - rscadd: Bluespace and Cryostasis beakers, how do they work? Fuggin bluespace - how do they work? - - rscadd: You can now shove things into vending machines, impress your friends on - how things magically disappear out of your hands into the machine! - - rscadd: Robots and Androids (And gynoids too!) can now use custom job titles - - bugfix: Various bugfixes -2013-12-18: - RavingManiac: - - rscadd: Mousetraps can now be "hidden" through the right-click menu. This makes - them go under tables, clutter and the like. The filthy rodents will never see - it coming! - - tweak: Monkeys will no longer move randomly while being pulled. -2014-01-01: - Various: - - rscadd: AntagHUD and MedicalHUD for ghosts, see who the baddies are, check for - new configuration options. - - rscadd: Ghosts will now have bold text if they are in the same room as the person - making conversations easier to follow. - - rscadd: New hairstyles! Now you can use something other then hotpink floor length - braid. - - wip: DNA rework, tell us how you were cloned and became albino! - - rscadd: Dirty floors, so now you know exactly how lazy the janitors are! - - rscadd: A new UI system, feel free to color it yourself, don't set it to completely - clear or you will have a bad time. - - rscadd: Cryogenic storage, for all your SSD needs. - - rscadd: New hardsuits for those syndicate tajaran -2014-02-01: - Various: - - rscadd: NanoUI for PDA - - rscadd: Write in blood while a ghost in cult rounds with enough cultists - - rscadd: Cookies, absurd sandwiches, and even cookable dioanae nymphs! - - rscadd: A bunch of new guns and other weapons - - rscadd: Species specific blood -2014-02-19: - Aryn: - - experiment: New air model. Nothing should change to a great degree, but temperature - flow might be affected due to closed connections not sticking around. -2014-03-01: - Various: - - rscadd: Paint Mixing, red and blue makes purple! - - rscadd: New posters to tell you to respect those darned cat people - - rscadd: NanoUI for APC's, Canisters, Tank Transfer Valves and the heaters / coolers - - tweak: PDA bombs are now less annoying, and won't always blow up / cause internal - bleeding - - tweak: Blob made less deadly - - rscadd: Objectiveless Antags now a configuration option, choose your own adventure! - - wip: Engineering redesign, now with better monitoring of the explodium supermatter! - - rscadd: Security EOD - - rscadd: New playable race, IPC's, go beep boop boop all over the station! - - rscadd: Gamemode autovoting, now players don't have to call for gamemode votes, - it's automatic! -2014-03-05: - RavingManiac: - - rscadd: Smartfridges added to the bar, chemistry and virology. No more clutter! - - rscadd: A certain musical instrument has returned to the bar. - - rscadd: There is now a ten second delay between ingesting a pill/donut/milkshake - and regretting it. -2014-03-10: - Chinsky: - - rscadd: Viruses now affect certain range of species, different for each virus - - tweak: Spaceacilline now prevents infection, and has a small chance to cure viruses - at Stage 1. It does not give them antibodies though, so they can get sick again! - - tweak: Biosuits and spacesuits now offer more protection against viruses. Full - biosuit competely prevents airborne infection, when coupled with gloves they - both protect quite well from contact ones - - rscadd: Sneezing now spreads viruses in front of mob. Sometimes he gets a warning - beforehand though -2014-03-30: - RavingManiac: - - rscadd: Inflatable walls and doors added. Useful for sealing off hull breaches, - but easily punctured by sharp objects and Tajarans. -2014-04-06: - RavingManiac: - - tweak: Tape recorders and station-bounced radios now work inside containers and - closets. -2014-04-11: - Jarcolr: - - rscadd: You can now flip coins like a D2 - - tweak: Miscellaneous cargo crates got a tiny buff, Standard Costume crate is now - Costume Crate - - tweak: Grammar patch,telekinesis/amputated arm exploit fixes,more in the future - - tweak: Grille kicking now does less damage - - tweak: TELESCOPIC baton no longer knocks anybody down,still got a lot of force - though - - tweak: Other small-ish changes and fixes that aren't worth mentioning -2014-04-25: - Various: - - rscadd: Overhauled saycode, you can now use languages over the radio. - - rscadd: Chamelon items beyond just the suit. - - rscadd: NanoUI Virology - - rscadd: 3D Sounds - - rscadd: AI Channel color for when they want to be all sneaky - - rscadd: New inflatable walls and airlocks for your breach sealing pleasure. - - rscadd: Carbon Copy papers, so you can subject everyone to your authority and - paperwork, but mainly paperwork - - rscadd: Undershirts and rolling down jumpsuits - - rscadd: Insta-hit tasers, can be shot through glass as well. - - rscadd: Changeling balances, an emphasis put more on stealth. - - rscdel: Genetics disabled - - rscdel: Telescience removed, might be added again when we come up with a less - math headache enducing version of it. - - bugfix: Bugfixes galore! -2014-04-29: - HarpyEagle: - - rscadd: Webbing vest storage can now be accessed by clicking on the item in inventory - - rscadd: Holsters can be accessed by clicking on them in inventory - - rscadd: Webbings and other suit attachments are now visible on the icon in inventory - - tweak: Removing jumpsuits now requires drag and drop to prevent accidental undressing - - rscadd: Added an action icon for magboots that can be used to toggle them similar - to flashlights - - rscadd: Fuel tanks now spill fuel when wrenched open -2014-05-03: - Cael_Aislinn: - - rscadd: "Coming out of nowhere the past few months, the Garland Corporation has\ - \ made headlines with a new prehistoric theme park delighting travellers with\ - \ species thought extinct. Now available for research stations everywhere is\ - \ the technology that made it all possible! Features include:
                  \n\t\t\t-\ - \ 13 discoverable prehistoric species to clone from fossils (including 5 brand\ - \ new ones).
                  \n\t\t\t- 11 discoverable prehistoric plants to clone from fossils\ - \ (including 9 brand new ones).
                  \n\t\t\t- New minigame that involves correctly\ - \ ordering the genomes inside each genetic sequence to unlock an animal/plant.
                  \n\ - \t\t\t- Some prehistoric animals and plants may seem strangely familiar... while\ - \ others may bring more than the erstwhile scientist bargains for.
                  \n




                  " -2014-05-06: - Hubble: - - rscadd: Clip papers together by hitting a paper with a paper or photo - - imageadd: Adds icons for copied stamps -2014-05-16: - HarpyEagle: - - rscadd: Silicon mob types (AI, cyborgs, PAI) can now speak certain species languages - depending on type and module - - rscadd: Languages can now be whispered when using the language code with either - the whisper verb or the whisper speech code -2014-05-23: - Hubble: - - rscadd: Personal lockers are now resettable - - rscadd: Take off people's accessories or change their sensors in the drag and - drop-interface - - rscadd: Merge paper bundles by hitting one with another - - tweak: Line breaks in Security, Medical and Employment Records - - tweak: Record printouts will have names on it - - tweak: Set other people's internals in belt and suit storage slots - - bugfix: No longer changing suit sensors while cuffed - - bugfix: No longer emptying other people's pockets when they are not full yet -2014-05-28: - Chinsky: - - rscadd: Adds few new paperBBcode tags, to make up for HTML removal. - - rscadd: '[logo] tag draws NT logo image (one from wiki).' - - rscadd: '[table] [/table] tags mark borders of tables. [grid] [/grid] are borderless - tables, useful of making layouts. Inside tables following tags are used: [row] - marks beginning of new table row, [cell] - beginning of new table cell.' -2014-05-31: - Jarcolr: - - rscadd: 21 New cargo crates, go check them out! - - rscadd: Peanuts have now been added, food items are now being developed. - - rscadd: 2 new cargo groups, Miscellaneous and Supply. - - rscadd: Sugarcane seeds can now be gotten from the seed dispenser. - - rscadd: 5 new satchels when selecting "satchel" for RD, scientist, botanist, virologist, - geneticist (disabled) and chemist. - - rscadd: Clicking on a player with a paper/book when you have the eyes selected - shows them the book/paper forcefully. -2014-06-03: - Hubblenaut: - - rscadd: Added wheelchairs - - tweak: Replaced stool in Medical Examination with wheelchair - - tweak: Using a fire-extinguisher to propel you on a chair can have consequences - (drive into walls and people, do it!) -2014-06-13: - HarpyEagle: - - rscadd: Added docking ports for shuttles - - rscadd: Shuttle airlocks will automatically open and close, preventing people - from being sucked into space by because someone on another z-level called a - shuttle - - rscadd: Some docking ports can also double as airlocks - - rscadd: Docking ports can be overriden to prevent any automatic action. Shuttles - will wait for players to open/close doors manually - - rscadd: Shuttles can be forced launched, which will make them not wait for airlocks - to be properly closed -2014-06-15: - HarpyEagle: - - bugfix: Fixed wound autohealing regardless of damage amount. The appropriate wound - will now be assigned correctly based on damage amount and type - - bugfix: Fixed several other bugs related wounds that resulted in damage magically - disappearing - - bugfix: Fixed various sharp objects not being counted as sharp, bullets in particular - - bugfix: Fixed armour providing more protection from bullets than it was supposed - to -2014-06-19: - Chinsky: - - rscadd: Adds guest terminals on the map. These wall terminals let anyone issue - temporary IDs. Only access that issuer has can be granted, and maximum time - pass can be issued for is 20 minutes. All operations are logged in terminals. -2014-06-20: - Cael_Aislinn: - - rscadd: 'New discoverable items added to xenoarchaeology, and new features for - some existing ones. Artifact harvesters can now harvest the secondary effect - of artifacts as well as the primary one.
                  - -
                  ' - - tweak: 'Artifact utilisers should be much nicer/easier to use now.
                  - -
                • Alden-Saraspova counters and talking items should work properly - now.
                  - -
                • - -
                  ' -2014-07-01: - Various: - - experiment: Hardsuit breaching. - - experiment: Rewritten fire. - - experiment: Supermatter now glows and sucks things into it as it approaches criticality. - - rscadd: Station Vox (Vox pariahs) are now available. - - rscadd: Wheelchairs. - - rscadd: Cargo Trains. - - rscadd: Hardsuit cycler machinery. - - rscadd: Rewritten lighting (coloured lights!) - - rscadd: New Mining machinery and rewritten smelting. - - rscadd: Rewritten autolathe - - rscadd: Mutiny mode. - - rscadd: NanoUI airlock and docking controllers. - - rscadd: Completely rewritten shuttle code. - - rscadd: 'Derelict Z-level replacement: construction site.' - - rscadd: Computer3 laptops. - - rscadd: Constructable SMES units. - - rscadd: Omni-directional atmos machinery. - - rscadd: Climbable tables and crates. - - rscadd: Xenoflora added to Science. - - rscadd: Utensils can be used to eat food. - - rscadd: Decks of cards are now around the station. - - rscadd: Service robots can speak languages. - - wip: Xenoarch updates and fixes. - - tweak: Rewritten species-specific gear icon handling. - - tweak: Cats and borers can be picked up. - - tweak: Botanist renamed to Gardener. - - tweak: Hydroponics merged with the Kitchen. - - tweak: Latejoin spawn points (Arrivals, Cryostorage, Gateway). - - rscadd: Escape pods only launch automatically during emergency evacuations - - rscadd: Escape pods can be made to launch during regular crew transfers using - the control panel inside the pod, or by emagging the panel outside the pod - - rscadd: When swiped or emagged, the crew transfer shuttle can be delayed in addition - to being launched early -2014-07-06: - HarpyEagle: - - rscadd: Re-enabled and rewrote the wound infection system - - rscadd: Infections can be prevented by properly bandaging and salving wounds - - rscadd: Infections are cured by spaceacillin -2014-07-20: - PsiOmegaDelta: - - rscadd: AI can now store up to five camera locations and return to them when desired. - - rscadd: AI can now alt+left click turfs in camera view to list and interact with - the objects. - - rscadd: AI can now ctrl+click turret controls to enable/disable turrets. - - rscadd: AI can now alt+click turret controls to toggle stun/lethal mode. - - rscadd: AI can now select which channel to state laws on. -2014-07-26: - Whitellama: - - rscadd: Added dynamic flavour text. - - bugfix: Fixed bug with suit fibers and fingerprints. -2014-07-31: - HarpyEagle: - - tweak: Stun batons now work like tasers and deal agony instead of stun - - rscadd: Being hit in the hands with a stun weapon will cause whatever is being - held to be dropped - - tweak: Handcuffs now require an aggressive grab to be used -2014-08-02: - Whitellama: - - bugfix: Arcane tomes can now be stored on bookshelves. - - bugfix: Dionaea players no longer crash on death, and now become nymphs properly. -2014-08-05: - HarpyEagle: - - tweak: Atmos Rewrite. Many atmos devices now use power according to their load - and gas physics - - rscadd: Pressure regulator device. Replaces the passive gate and can regulate - input or output pressure - - rscadd: Gas heaters and gas coolers are now constructable and can be upgraded - with parts from research - - bugfix: Fixes recharger and cell charger power draw. Rechargers draw 15 kW, wall - chargers draw 25 kW, and heavy-duty cell chargers draw 40 kW. Cyborg charging - stations draw 75 kW. - - bugfix: Laptops, and various other machines, now draw more reasonable amounts - of power - - bugfix: Machines will periodically update their powered status if moved from a - powered to an unpowered area and vice versa -2014-08-27: - Whitellama: - - bugfix: Made destination taggers more intuitive so you know when you've tagged - something - - rscadd: Ported package label and tag sprites - - rscadd: Ported using a pen on a package to give it a title, or to write a note - - rscadd: Donut boxes and egg boxes can be constructed out of cardboard -2014-08-31: - Whitellama: - - bugfix: Matches and candles can be used to burn papers, too. - - bugfix: Observers have a bit more time (20 seconds, instead of 7.5) before the - Diona join prompt disappears. -2014-09-05: - RavingManiac: - - experiment: 'NewPipe implemented: Supply and scrubber pipes can be run in parallel - without connecting to each other.' - - rscadd: Supply pipes will only connect to supply pipes, vents and Universal Pipe - Adapters(UPAs). - - rscadd: Scrubber pipes will only connect to scrubber pipes, scrubbers and UPAs. - - rscadd: UPAs will connect to regular, scrubber and supply pipes. -2014-09-20: - HarpyEagle: - - bugfix: Fixes evidence bags and boxes eating each other. Evidence bags now store - items by dragging the bag onto the item to be stored. -2014-09-28: - Gamerofthegame: - - rscadd: Hoverpods fully supported, currently orderable from cargo. Two slots, - three cargo, space flight and a working mech for all other intents and purposes. - - rscadd: Added the Rigged laser and Passenger Compartment equipment. The rigged - laser is a weapon for working exosuits - just a ordinary laser, but with triple - the cool down and rather power inefficient. The passenger compartment allows - other people to board and hitch a ride on the mech - such as in fire rescue - or for space flight. - Zuhayr: - - rscadd: Organs can now be removed and transplanted. - - tweak: Brain surgery is now the same as chest surgery regarding the steps leading - up to it. - - tweak: Appendix and kidney now share the groin and removing the first will prevent - appendicitis. - - tweak: Lots of backend surgery/organ stuff, see the PR if you need to know. -2014-10-01: - RavingManiac: - - rscadd: Zooming with the sniper rifle now adds a view offset in the direction - you are facing. - - rscadd: Added binoculars - functionally similar to sniper scope. Adminspawn-only - for now. - - rscadd: Bottles from chemistry now, like beakers, use chemical overlays instead - of fixed sprites. - - rscadd: Being in space while not magbooted to something will cause your sprite - to bob up and down. - Zuhayr: - - rscadd: Added species organ checks to several areas (phoron burn, welder burn, - appendicitis, vox cortical stacks, flashes). - - rscadd: Added VV option to add or remove organs. - - rscadd: Added simple bioprinter (adminspawn). - - rscadd: Added smashing/slashing behavior from xenos to some unarmed attacks. - - rscadd: Added some new state icons for diona nymphs. - - rscadd: Added borer husk functionality (cortical borers can turn dead humans into - zombies). - - rscadd: Added tackle verb. - - rscadd: Added NO_SLIP. - - rscadd: Added species-specific orans to Dionaea, new Xenomorphs and vox. - - rscadd: Added colour and species to blood data. - - rscadd: Added lethal consequences to missing your heart. - - rscdel: Removed robot_talk_understand and alien_talk_understand. - - rscdel: Removed attack_alien() and several flavours of is_alien() procs. - - rscdel: Removed /mob/living/carbon/alien/humanoid. - - rscdel: Removed alien_hud(). - - rscdel: Removed IS_SLOW, NEEDS_LIGHT and RAD_ABSORB. - - rscdel: Renamed is_larva() to is_alien(). - - tweak: Refactored a ton of files, either condensing or expanding them, or moving - them to new directories. - - tweak: Refactored some attack vars from simple_animal to mob/living level. - - tweak: Refactored internal organs to /mob/living/carbon level. - - tweak: Refactored rad and light absorbtion to organ level. - - tweak: Refactored brains to /obj/item/organ/brain. - - tweak: Refactored a lot of blood splattering to use blood_splatter() proc. - - tweak: Refactored broadcast languages (changeling and alien hiveminds, drone and - binary chat) to actual languages. - - tweak: Refactored xenomorph abilities to work for humans. - - tweak: Refactored xenomorphs into human species. - - tweak: Rewrote larva_hud() and human_hud(). The latter now takes data from the - species datum. - - tweak: Rewrote diona nymphs as descendents of /mob/living/carbon/alien. - - tweak: Rewrote xenolarva as descendents of /mob/living/carbon/alien. - - tweak: Rewrote /mob/living/carbon/alien. - - tweak: Moved alcohol and toxin processing to the liver. - - tweak: Moved drone light proc to robot level, added integrated_light_power and - local_transmit vars to robots. - - tweak: Moved human brainloss onto the brain organ. - - tweak: Shuffled around and collapsed several redundant procs down to carbon level - (hide, ventcrawl, Bump). - - tweak: Fixed species swaps from NO_BLOOD to those with blood killing the subject - instantly. -2014-11-01: - PsiOmegaDelta: - - bugfix: Adds the last missing step to deconstruct fire alarms. Apply wirecutters. - - rscadd: There's a "new" mining outpost nearby the Research outpost. - - rscadd: Manifest ghosts now have spookier names. - - rscadd: Adds a gas monitor computer for the toxin mixing chamber. - - rscadd: AI can now change the display of individual AI status screens. - - rscadd: More ion laws.. - - rscadd: All turrets have been replaced with portable variants. Potential targets - can be configured on a per turret basis. - - bugfix: Improved crew monitor map positioning. - - rscadd: Can now order plastic, body-, and statis bags from cargo - - rscadd: PDAs now receive newscasts. - - rscadd: (De)constructable emergency shutters. - - rscadd: Borgs can now select to simply state their laws or select a radio channel, - same as the AI. -2014-11-04: - TwistedAkai: - - rscadd: Almost any window which has been fully unsecured can now be dismantled - with a wrench. -2014-11-08: - PsiOmegaDelta: - - rscadd: Service personnel now have their own frequency to communicate over. Use - "say :v". - - rscadd: The AI can now has proper quick access to its private channel. Use "say - :o". - - rscadd: Newscasters supports photo captions. Simply pen one on the attached photo. - - rscadd: Once made visible by a cultist ghosts can toggle visiblity at will. - - rscadd: Detonating cyborgs using the cyborg monitor console now notifies the master - AI, if any. - - rscadd: More machinery, such as APCs, air alarms, etc., now support attaching - signalers to the wires. - - tweak: Random event overhaul. Admins may wish check the verb "Event Manager Panel". -2014-11-22: - Zuhayr: - - rscadd: Added the /obj/item/weapon/rig class - back-mounted deployable hardsuits. - - rscadd: Replaced existing hardsuits with 'voidsuits', functionally identical. - - rscdel: Removed the mounted device and helmet/boot procs from voidsuits. - - tweak: Refactored a shit-ton of ninja code into the new rig class. - - wip: This is more than likely going to take a lot of balancing to get into a good - place. -2015-01-09: - Zuhayr: - - tweak: Voice changers no longer use ID cards. They have Toggle and Set Voice verbs - on the actual mask object now. - - rscadd: Readded moonwalking. Alt-dir to face new dir, or Face-Direction verb to - face current dir. -2015-02-04: - RavingManiac: - - rscadd: Holodeck is now bigger and better, with toggleable gravity and a new courtroom - setting - TwistedAkai: - - bugfix: Purple Combs should now be visible and have their proper icon -2015-02-12: - Daranz: - - rscadd: Vending machines now use NanoUI and accept cash. The vendor account can - now be suspended to disable all sales in all machines on station. -2015-02-16: - RavingManiac: - - rscadd: Say hello to the new Thermoelectric Supermatter Engine. Read the operating - manual to get started. -2015-02-18: - PsiOmegaDelta: - - rscadd: Synths now have timestamped radio and chat messages. - - rscadd: New and updated uplink items. - - rscadd: Multiple AIs can now share the same holopad. - - rscadd: The AI now has built-in consoles, accessible from the subsystem tab. -2015-02-24: - Zuhayr: - - experiment: Major changes to the kitchen and hydroponics mechanics. Review the - detailed changelog here, -2015-04-07: - RavingManiac: - - tweak: You can now pay vending machines and EFTPOS scanners without removing your - ID from your PDA or wallet. Clicking on the vending machine with your ID/PDA/wallet/cash - also brings up the menu now instead of attacking the vending machine. -2015-04-18: - PsiOmegaDelta: - - rscadd: Added a changelog editing system that should cause fewer conflicts and - more accurate timestamps. -2015-04-23: - Dennok: - - rscadd: Added an automatic pipelayer. - - rscadd: Added an automatic cablelayer. - PsiOmegaDelta: - - bugfix: Shower curtains no longer lose their default color upon being washed. - - bugfix: Emergency shutters can again be examined, and from the proper distance. - - bugfix: The virus event will now only infect mobs on the station, currently controlled - by player that has been active in the last 5 minutes. - - bugfix: Laptops now use the proper proc for checking camera status. - - rscadd: Makes it possible to eject PDA cartridges using a verb. - - rscadd: Makes it possible to shake tables with one's bare hands to stop climbers. - - bugfix: Added a mass driver door in disposals to prevent trash from floating out - into space before proper ejection. - - rscadd: Rig/Hardsuit module tab - Less informative than the NanoUI hardsuit interface - but allows quicker access to the various rig modules. - - rscadd: Silicons with the medical augmentation sensors enabled now also see alive/dead - status if sensors are set accordingly. - - rscadd: Emergency shutters opened by silicons are now treated as having been forced - open by a crowbar. - - rscadd: An active AI chassis can now be pushed, just as an empty chassis can be. - - rscadd: The AI can now use the crew monitor console to track crew members with - full sensors enabled. - - rscadd: The AI now has a shortcut to track people holding up messages to cameras. - - rscadd: The AI now has a shortcut to track people sending PDA messages. - - rscadd: Multiple AIs can now share the same holopad. - - rscadd: Admin ghosts can now transfer other ghosts into mobs by drag-clicking. - - rscadd: Ghosts can now toggle seeing darkness and other ghosts separately. - - rscadd: Moving while dead now auto-ghosts you. - - rscadd: 'Two new random events: Space dust and gravitation failure.' - - rscadd: Upgraded wizard spell interface and new spells. - - rscadd: More uplink items. - - rscadd: Uplink items now have rudimentary descriptions. - Yoshax: - - tweak: Adjusts fruits and other stuff to have a minmum of 10 units of juice and - stuff. -2015-04-24: - Dennok: - - bugfix: Fixes overmap ship speed calculations. - - rscadd: Adds overmap ship rotation. - - rscadd: Added a floorlayer. -2015-04-28: - Jarcolr: - - rscadd: Added 9 new bar sign designs/sprites. - Kelenius: - - rscadd: 'Good news to the roboticists! The long waited firmware update for the - bots has arrived. You can expect the following changes:' - - rscadd: Medbots have improved the disease detection algorithms. - - rscadd: Floorbot firmware has been bugtested. In particular, they will no longer - get stuck near the windows, hopelessly trying to fix the floor under the glass. - - rscadd: Floorbots have also received an internal low-power metal synthesizer. - They will use it to make their own tiles. Slowly. - - rscadd: Following the complains from humanitarian organizations regarding securitron - brutality, stength of their stunners has been toned down. They will also politely - demand that you get on the floor before arresting you. Except for the taser-mounted - guys, they will still tase you down. - - rscadd: Other minor fixes. - - rscdel: 'The lasertag bots are now forbidden to build and use following the incident - #1526672. Please don''t let it happen again.' - - rscadd: The farmbot design has been finished! Made from a watertank, robot arm, - plant analyzer, bucket, minihoe and a proximity sensor, these small (not really) - bots will be a useful companion to any gardener and/or xenobotanist. - - tweak: 'Spider learning alert: they have learned to recognize the bots and will - mercilessly attack them.' - - rscadd: An experimental CPU upgrade would theoretically allow any of the bots - to function with the same intelligence capacity as the maintenance drones. We - still have no idea what causes it to boot up. Science! - - rscadd: 'INCOMING TRANSMISSION: Greetings to agents, pirates, operatives, and - anyone who otherwise uses our equipment. Following the NT update of bot firmware, - we have updated the cryptographic sequencer''s hacking routines as well. The - medbots you emag will not poison you anymore, the clanbots won''t clean after - themselves immediately, and floorbots... wear a space suit. Oh, and it works - on the new farmbots, too.' - PsiOmegaDelta: - - rscadd: Beware. Airlocks can now crush more things than just mobs. - - rscadd: AIs now have a personal atmospherics control subsystem. - - rscadd: Some borg modules now have additional subsystems. - - tweak: Improves borg module handling. - - tweak: Secure airlocks now buzz when access is denied. - - tweak: The mental health office door now requires psychiatrist access, and the - related button now opens/closes the door instead of bolting. - - soundadd: Restores an old soundtrack 'Thunderdome.ogg'. - - rscadd: Some holodeck programs now have custom ambience tracks. - RavingManiac: - - rscadd: The phoron research lab has been renovated to include a heat-exchange - system, a gas mixer/filter and a waste gas disposal pump. - - tweak: Candles now burn for about 30 mintutes. - Yoshax: - - tweak: Adds items to the orderable antag surgical kit so its actually useful for - surgery. - - tweak: Adjusts custom loadout costs to be more standardised and balances. Purely - cosmetic items, shoes, hats, and all things that do not provide a straight advtange - (sterile mask, or pAI, protection from viruses and possible door hacking or - records access, respectively), each cost 1 point, items that provide an advantage - like those just mentioned, or provide armor or storage cost 2 points. - - rscadd: Adds practice rounds, both .45 for Sec and Detective's guns, also 9mm - top mounted for the Saber, and for the Bulldog. - - rscadd: Adds the .45 and 9mm practice rounds to the armory. - - rscadd: Adds all the practice rounds to the autolathe. - - tweak: Adds r_walls to the back of the firing range, leaves the sides normal. - - bugfix: Fixes HoS' office door to not be CMO locked. -2015-04-29: - Daranz: - - rscadd: Paper bundles can now have papers inserted at arbitrary points. This can - be done by clicking the previous/next page links with a sheet of paper in hand. - HarpyEagle: - - rscadd: 'Added new fire modes to various guns: c20r, STS-35, WT-550, Z8, L6 SAW, - and double barreled shotgun. The firing modes work the same way as the egun; - click on the weapon with it in your active hand to cycle between modes. Unloading - these weapons now requires that you click on them with an empty hand.' - PsiOmegaDelta: - - rscadd: Portable atmospheric pumps and scrubbers now use NanoUI. - - rscadd: Two new events which will cause damage to APCs or cameras when triggered. -2015-04-30: - Yoshax: - - rscadd: Adds more items to custom loadout, including a number of dressy suits - and some other things. -2015-05-02: - HarpyEagle: - - bugfix: Neck-grabbing someone now stuns them properly. - PsiOmegaDelta: - - tweak: The spider infestation event now makes an announcement much sooner. - - rscadd: Admins can now toggle OOC/LOOC separately. - - tweak: Mice are now numbered to aid admins. - Yoshax: - - rscadd: Adds an option and verb to the AI to send emergency messages to Central, - functions same as comms console option. - - tweak: Changes comms console to only have one level of ID require, meaning all - heads of staff have what was captain access, allowing them to change alert, - send emergency messages and make announcements. - - rscadd: Adds an emergency bluespace relay machine which is mapped into teletcomms, - this machine takes emergency messages and sends them to central, if one does - not exist on any Z, you cannot send any emergency messages. - - rscadd: Adds an emergency bluespace relay assembly kit orderable from cargo for - when the ones on telecomms are destroyed. Assembly is required. - - rscadd: Adds the emergency bluespace relay circuitboard to be researchable and - printable in R&D, with sufficient tech levels. -2015-05-05: - PsiOmegaDelta: - - tweak: Grilles no longer return too many rods when destroyed (using means other - than wirecutters). - RavingManiac: - - tweak: Intent menu now appears while zooming with a sniper rifle. -2015-05-06: - PsiOmegaDelta: - - rscadd: Examining a pen or crayon now lists the available special commands in - the examine tab. -2015-05-07: - HarpyEagle: - - rscadd: Breaking out of lockers now has sound and animation. - PsiOmegaDelta: - - bugfix: The cloning computer can again successfully locate nearby cloning vats - and DNA scanners at round start. - - rscadd: Security equipment now treats individuals with CentCom ids with the greatest - respect. - - maptweak: Adds stretches of power cable around the construction outpost, ensuring - one does not have to climb over machines to being laying cables. - RavingManiac: - - rscadd: Muzzle-flash lighting effect for guns - - rscadd: Energy guns now display shots remaining on examine -2015-05-09: - Yoshax: - - rscadd: Maps in the top mounted 9mm practice rounds, .45 practice rounds, and - practice shotgun shells into the armory. -2015-05-10: - GinjaNinja32: - - rscadd: Acting jobs on the manifest will now sort with their non-acting counterparts. - All assignments beginning with the word 'acting', 'temporary', or 'interim' - will do this. - Yoshax: - - tweak: Removes sleepy chems from being cloned, adds a consistent period of 30 - tick sleep. -2015-05-11: - Mloc: - - experiment: Rewritten lighting system. - - rscadd: Better coloured lights. - - rscadd: Animated transitions. - PsiOmegaDelta: - - bugfix: As an observer, using antagHUD should now always restrict you from respawning - without admin intervention. - Techhead: - - rscadd: Voidsuits can have tanks inserted into the storage slot. - - rscadd: Voidsuits display helpful information on their contents on examine. - - rscadd: Magboots can be equipped over other shoes. Except other magboots. -2015-05-12: - Dennok: - - imageadd: New buildmode icons made by BartNixon. - HarpyEagle: - - rscadd: Masks and helmets that cover the face block feeding food, drinks, and - pills. - MrSnapwalk: - - imageadd: Added seven new AI core displays. - - tweak: Changed the pAI sprite and added several new expressions. - PsiOmegaDelta: - - rscadd: The space vine event now comes with a station announcement. -2015-05-14: - PsiOmegaDelta: - - maptweak: Should now be more evident that the brig disposal chute sends its goods - to the common brig area. - - bugfix: Cells now drain when using more charge than what is available. - - tweak: The rig stealth module now requires as much power to run as the energy - blade module. - Techhead: - - rscadd: Vox will spawn with emergency nitrogen tanks in their survival boxes. - - rscadd: Diona will spawn with an emergency flare instead of a survival box. - - rscdel: Engineers no longer spawn with extended-capacity oxygen tanks. - - bugfix: Vox spawning without backpacks will have their nitrogen tank equipped - to their back. - - tweak: The Bartender's spare beanbag shells have been moved into bar backroom - with the shotgun. - - bugfix: Portable air pumps now fill based on external/airtank pressure when pumping - in. -2015-05-16: - GinjaNinja32: - - rscadd: Rewrote tables. To construct a table, use steel to make a table frame, - then plate the frame with a material such as steel, gold, wood, etc. Hold a - stack in your hand and drag it to the table to reinforce it. To deconstruct - a table, use a screwdriver to remove the reinforcements (if present), then a - wrench to remove the plating, and a wrench again to dismantle the frame. Use - a welder to repair any damage. Use a carpet tile on a table to add felt, and - a crowbar to remove it. - HarpyEagle: - - rscadd: Adds tail animations for tajaran and unathi. Animations are controlled - using emotes. -2015-05-17: - PsiOmegaDelta: - - bugfix: Teleporter artifacts should no longer teleport mobs inside objects. -2015-05-18: - Hubblenaut: - - rscadd: Adds a light for available backup power on airlocks. - Kelenius: - - tweak: 'There has been a big update to the reagent system. A full-ish changelog - can be found here: http://pastebin.com/imHXTRHz. In particular:' - - tweak: Reagents now differentiate between being ingested (food, pills, smoke), - injected (syringes, IV drips), and put on the skin (sprays, beaker splashing). - - tweak: Injecting food and drinks will cause bad effects. - - tweak: Healing reagents, generally speaking, have stronger effects when injected. - - tweak: Toxins now work slower and deal more damage. Seek medical help! - - tweak: Alcohol robustness has been lowered. - - tweak: Acid will no longer melt large numbers of items at once. - - tweak: Synaptizine is no longer hilariously deadly. - Loganbacca: - - tweak: Changed MULE destination selection to be list based. - PsiOmegaDelta: - - tweak: Destroying a camera by brute force now has a chance to break the wiring - within. - - rscadd: Turf are now processed. This, for example, causes radioactive walls to - regularly irradiate nearby mobs. - - bugfix: Welders should now always update their icon and inhand states properly. -2015-05-22: - Ccomp5950: - - bugfix: Beepsky no longer kills goats. - - tweak: Goats will move towards vines that are 4 spaces away now instead of 1 - - bugfix: Goats will eat the spawning plants for vines as well as the vines themselves. - Chinsky: - - rscadd: Ghetto diagnosis. Grab patient, aim at bodypart you want to check, click - on them with help intent. This will tell you about their wounds, fractures and - other oddities (toxins/oxygen) for that bodypart. - - rscadd: Fractures are visible on very damaged limbs. Dislocations are always visible. - Surgery incisions now visible too. - - rscadd: Stethoscopes actually make sense now. They care for heart/lungs status - when reporting pulse and respiration now. - HarpyEagle: - - rscadd: Re-implemented fuel fires. Tweaked fire behaviour overall. - Yoshax: - - tweak: Bear traps now do damage when stood on, enough to break bones! Bear traps - can now affect any limb of a person who is on the ground, including head! Bear - traps are no longer legcuffs and instead embed in the limb they attack. - - tweak: Bear traps now take several seconds to deploy and cannot be picked up when - armed, they must be disarmed by clicking on them. They also cannot be moved - then they are deployed. - Zuhayr: - - rscadd: Massive material refactor. Walls, beds, chairs, stools, tables, ashtrays, - knives, baseball bats, axes, simple doors, barricades, so on. - - rscadd: Tables are now built via steel then another sheet on the resulting frame. - They can then be reinforced by dragging a stack of sheets onto the table. - - rscadd: Walls are built with steel for girders, then right-click the girder and - select the reinforce verb while holding a stack, then click the girders with - a final sheet. - - rscadd: Various things can be built with various sheet types. Experiment! Just - keep in mind that uranium is now radioactive and phoron is now flammable. -2015-05-26: - Atlantis: - - rscadd: NanoUI for Robotics Control Console - - rscadd: NanoUI for Supermatter Crystal - AI/Robot only, purely informational - Chinsky: - - rscadd: Meat limbs now can be attached. Use limb on missing area, then hemostat - to finalize it. - - rscadd: Limbs from other races can be now attached. They'll cause rejection, but - it can be kept at bay with spaceacilline to some point. Species special attack - is carried over too, i.e. you can clawn people if you sew a cathand to yourself. - - rscadd: Limbs that are left in open will rot in ~7 minutes. Use freezers or cryobags - to stop it. You can still attach them, but you wish you couldn't. - PsiOmegaDelta: - - tweak: Both the pulse taker and target must now remain still for the duration - of the check or it will fail. - RavingManiac: - - rscadd: Tape recorders now record hearable emotes and action messages (e.g. gunshots). - - bugfix: You can now see actions from inside mechs and closets. - Techhead: - - rscadd: Removed gaseous reagents from the chemistry system and replaced with real-world - organic chemistry precursors. - - rscadd: Hydrogen has been replaced with hydrazine, a highly toxic, flammable liquid. - - rscadd: Oxygen has been replaced with acetone, a mildly toxic liquid. Ethanol's - ink-sovlent capabilities have been copied to it. - - rscadd: Chlorine has been replaced with hydrochloric acid. It is a stronger acid - than sulphuric but less toxic. - - tweak: Nitrogen has been replaced with ammonia. Ammonia now acts as a Dexalin-equivalent - for Vox. - - tweak: Flourine has also been replaced with hydrazine in its one recipe. Flourosurficant - has been renamed azosurficant. - - tweak: Being splashed with liquid Phoron will burn eyes and contaminate clothes - like being exposed to Phoron gas. - Zuhayr: - - rscadd: Added a ghost requisition system for posibrains and living plants. - - rscadd: Added attack_ghost() to hydro trays and posibrains to allow ghosts to - enter them. - - rscadd: Prosthetic limbs are now only repairable with welders/cable coils if they - have suffered below 30 combined damage. - - rscadd: 'Surgery steps that cause no pain and have no failure wounding have been - added: screwdriver for ''incision'', crowbar to open, multitool to ''decouple'' - a prosthetic organ. Hemostat is still used to take an organ out.' - - rscadd: Using a welder or a cable coil as a surgical tool after opening a maintenance - hatch will repair damage beyond the 30 damage cap. In other words, severe damage - to robolimbs requires expert repair from someone else. - - rscdel: Eye and brain surgery were removed; they predate the current organ system - and are redundant. - - rscadd: IPC are now simply full prosthetic bodies using a specific manufacturer - (Morpheus Cyberkinetics). - - rscadd: IPC can 'recharge' in a cyborg station to regain nutriment. They no longer - interface with APCs. - - rscadd: NO_BLOOD flag now bypasses ingested and blood reagent processing. - - rscadd: NO_SCAN now bypasses mutagen reagent effects. - - rscadd: Cyborg analyzers now show damage to prosthetic limbs and organs on humans. - - tweak: Prosthetic EMP damage was reduced. - - tweak: Several organ files were split up/moved around. -2015-05-27: - PsiOmegaDelta: - - tweak: The inactive check process now respects client holder status and can be - configured how long clients may remain inactive before being kicked. - Zuhayr: - - rscadd: Unfolded pAIs can now be scooped up and worn as hats. - - tweak: Scoop-up behavior is now standardized to selecting help intent and dragging - their icon onto yours. -2015-05-30: - Atlantis: - - rscadd: Malfunction Overhaul - Whole gamemode was completely reworked from scratch. - Most old abilities have been removed and quite a lot of new abilities was added. - AI also has to hack APCs to unlock higher tier abilities faster, instead of - having access to them from the round start. Most forced things, such as, shuttle - recalling were removed and are instead controlled by the AI. Code is fully modular - allowing for future modifications. - HarpyEagle: - - bugfix: Fixes Engineer ERT gloves not being insulated. - - tweak: IV stands are no longer bullet shields. They also allow mice, drones, pAIs - et al to pass though. - Kelenius: - - tweak: AI now hears LOOC both around its eye and its core, and speaks in LOOC - around its eye. Keep in mind that you won't hear and won't be heard if there - is a wall between your eye and the target. - PsiOmegaDelta: - - rscadd: You can now review the server revision date and hash by using the 'Show - Server Revision' verb in the OOC category. -2015-06-02: - Techhead: - - rscadd: Re-adds extended capacity emergency oxygen tanks to relevant jobs. -2015-06-04: - PsiOmegaDelta: - - rscadd: AI eyes can now be found in the observer follow list. - - rscadd: Synths can now review all law modules that can be found on the station - from their law manager. - - rscadd: Synths can state these laws if desired, however this is strongly discouraged - unless subverted/malfunctioning. - - bugfix: Astral projecting mobs, such as wizards or cultists, may no longer respawn - as something else while their body lives. - Techhead: - - rscadd: Prison break event has been expanded to include Virology or Xenobiology - - rscadd: Prison break event will warn Enginering and the AI beforehand so they - can take preventive measures. - - bugfix: Disabling area power will now prevent doors from opening during the event -2015-06-05: - PsiOmegaDelta: - - bugfix: Split stacks no longer lose their coloring. - - tweak: Can no longer merge cables of different colors. - - tweak: Blobs and simple mobs now attack all external organs instead of a subset. - The overall damage remains the same but the number of fractures caused will, - in general, be fewer. - - rscadd: Spider nurses now have a chance of injecting their victims with spider - eggs which eventually hatch. If the limb is removed from the host, the host - dies, or the spiderling has matured sufficiently it will crawl out into freedom. - Medical scanners will pick upp eggs and spiderlings as foreign bodies. - Yoshax: - - tweak: Makes hyposprays start empty instead of filled with Tricord. - - tweak: Makes the special wizard projectile staffs, Animate, Change, Focus and - any future ones only usable by wizards. Also makes it so only wizards can use - spellbooks and teleportation scrolls. -2015-06-08: - PsiOmegaDelta: - - rscadd: The AI chassis now glows, with the color depending on the currently selected - display. -2015-06-09: - PsiOmegaDelta: - - rscadd: Ports /tg/'s meteor event. Meteors now appear to be more accurate, come - in a greater variety, and may drop ores on their final destruction. -2015-06-16: - Chinsky: - - rscadd: 'Updated penlights to be more of use in diagnostics, they now show following - conditions:' - - rscadd: Eye damage - - rscadd: Blurry eyes (overall slower reaction) - - rscadd: Brain damage (one eye reacts slower) - - rscadd: Opiates use (pinpoint pupils) - - rscadd: Drugs use (dilated pupils) - PsiOmegaDelta: - - rscadd: Observers can now follow both the AI and its eye upon speech. - - rscadd: Observers can now follow both observers and their body, if they ever had - one, upon speech. - - rscadd: Observers can now follow hivemind speakers if the speaker is not using - an alias or antagHUD is enabled. - - rscadd: Turret controls now glow, with the color depending on the current mode. - Techhead: - - rscadd: Converted Request Console interface into NanoUI. -2015-06-19: - HarpyEagle: - - bugfix: Prevents being on fire from merely warming mobs up slightly in some cases. - Mob fires also burn hotter. - - rscadd: Matches can now be used to light things adjacent to you when thrown. - - tweak: Made the effects of having a damaged robotic leg more prominent. - - bugfix: Robot limbs no longer cause pain messages. A reminder that you can still - check their status with 'Help Intent' -> 'Click Self'. - - tweak: Knifing damage scales with weapon force and throat protection. Helmets - only provide throat protection if they are air tight. Trying to cut someone's - throat with wirecutters and/or while wearing an armoured sealed helmet will - require several attempts before the victim passes out. - - tweak: Knifing switches on harm intent, in case you just wanted to beat on the - victim for some reason. - - bugfix: Prevents knifing bots or silicons. -2015-06-22: - PsiOmegaDelta: - - tweak: The traitor uplink no longer displays all items in a long list, instead - has categories which when accessed shows the relevant items. -2015-06-24: - HarpyEagle: - - bugfix: Fixed Tajaran name generation producing names without a space between - first and last. - - wip: Adds docking to the mercenary shuttle. Works similarly to other shuttles, - except docking and undocking is manually initiated and not automatic. A system - to approve or deny dock requests still to be implemented. - - rscadd: Toolboxes can now hold larger items, such as stacks of metal or power - cells, at the cost of having less space for other things. - - tweak: Gloves/shoes can now be worn even if you have one hand/foot missing. The - other one still has to be present, of course. The items still drop when you - first lose the hand/foot. - - tweak: Budget insulated gloves are somewhat less useless. On average, they will - stop half the damage from getting shocked, and the worst case insulation is - not as bad as it used to be. Budget gloves that are as good as regular insulated - gloves are still as rare as they were before though. - - tweak: PTR bullets are now hitscan, to make them somewhat better for actual sniping. - - maptweak: The telecoms server room now has an actual cycling airlock into it. - - tweak: Non-vital body parts will no longer take further damage above a certain - amount, and will inflict paincrit effects instead. On most humaniods the head, - chest, and groin are vital. - - rscadd: 'Engineers now spawn with industrial workboots (credit: ChessPiece/Bishop).' - - bugfix: Damaged robotic legs now more likely to have an effect. - - bugfix: Fixed bug preventing internal organs from taking damage in some cases. - - maptweak: New flavours of tables around the station. Engineering starts with more - plastic. - - bugfix: Fixed worn items not appearing in some cases. Most notably crossbows and - certain guns when worn on the back. As a side effect, laundry machines no longer - transform items. - - bugfix: Crit oxyloss now runs in game time instead of real time. So if lag is - slowing your movement the same slowdown applies to the dying person you're trying - to reach. - - rscadd: Breathmasks can now be adjusted by clicking on them in your hand, in addition - to the verb. - - rscadd: Wearing a space helmet or similar face-covering gear now prevents eating - and force-feeding food, drink, and pills. - - rscadd: Phoron in air ignites above it's flashpoint temperature and a certain - (very small) minimum concentration. Environments that have oxygen and are hot - enough, and have phoron but not enough concentration to burn will produce flareouts, - which are mostly a visual effect. - - rscadd: Adds animation when making unarmed attacks or attacking with melee weapons, - to help make it clearer who is attacking. - - soundadd: Opening an unpowered door now has an appropriate sound. - - rscadd: Ingesting diseased blood may contract the disease. -2015-06-26: {} -2015-06-30: - PsiOmegaDelta: - - maptweak: Non-general areas on Crescent are now protected by blast doors to enforce - area restrictions. Admins can operate these from the central checkpoint. -2015-07-04: - PsiOmegaDelta: - - tweak: Portable turrets now only blocks movement while deployed. - - tweak: Portable turrets are no longer invincible while undeployed, however they - have increased damage resistance in this state. - - bugfix: Crescent portable turrets should no longer act up during attempts to (un)wrench - and alter their settings. -2015-07-06: - GinjaNinja32: - - rscadd: '''Provisional'' is now also a valid temporary position prefix for manifest - sorting.' -2015-07-10: - Zuhayr: - - rscadd: Ninja now spawns on a little pod on Z2 and can teleport to the main level. -2015-07-11: - HarpyEagle: - - imageadd: Added inhand sprites for flashes, flashbangs, emp and other grenades. - Loganbacca: - - bugfix: Turrets no longer burn holes through the AI. - - tweak: Projectiles now have a chance of hitting mobs riding cargo trains. - - bugfix: Fixed visual bugs with projectile effects. -2015-07-14: - HarpyEagle: - - bugfix: Fixes wrong information being reported when analyzing locked abandoned - crates with a multitool. - PsiOmegaDelta: - - tweak: Ninjas can no longer teleport unto turfs that contain solid objects. - - tweak: Wizards can no longer etheral jaunt unto turfs that contain solid objects. -2015-07-27: - Kelenius: - - tweak: Borg shaker now works similarly to hypospray. It generates reagents that - can be poured into glasses. - - bugfix: Therefore, they can no longer duplicate rare reagents such as phoron. -2015-07-29: - Karolis2011: - - rscadd: Made tagger and sorting pipes dispensible. - - bugfix: Unwelding and welding sorting/tagger pipes, no longer delete data about - them. -2015-07-31: - HarpyEagle: - - bugfix: Fixed projectiles being able to hit people in body parts that they don't - have. This will also mean that the less limbs someone has the less effective - they will be as a body shield. -2015-08-11: - PsiOmegaDelta: - - experiment: 0.1.19 is live. - - tweak: Crew monitors now update every 5th second instead of every other. Reduces - lag and gives antags a larger window of opportunity to disable suit sensors - if they have to harm someone. -2015-08-13: - GinjaNinja32: - - rscadd: Changed language selection to allow multiple language selections, changed - humans/unathi/tajarans/skrell to not automatically gain their racial language, - instead adding it to the selectable languages for that species. Old slots will - warn when loaded that the languages may not be what you expect. - Orelbon: - - rscadd: Changed the HoP's suit to more bibrant colors and hopefully you will like - it. -2015-08-14: - HarpyEagle: - - spellcheck: Renames many guns to follow a consistent naming style. Updated and - changed gun description text to be more lore-friendly. - - rscadd: Throwing a booze bottle at something nearby while on harm intent causes - it to smash, splashing it's contents over whatever it hits. - - rscadd: Rags can now be wrung out over a container or the floor, emptying it's - contents into the container or splashing them on the floor. - - rscadd: Rags can now be soaked using the large water and fuel tanks instead of - just beakers. - - rscadd: Rags soaked in welding fuel can be lit on fire. - - rscadd: Rags can now be stuffed into booze bottles. When the bottle smashes, the - stuffed rag is dropped onto the ground. - - bugfix: Fixed eggs having a ridiculously large chemical volume. - - rscadd: T-Ray scanner effects are now only visible to the person holding the scanner. - - rscadd: Traitors can now purchase the C-20r and the STS-35 for telecrystals. - PsiOmegaDelta: - - tweak: The amount you start with in your station account is now affected by species, - rank, and NT's stance towards you. - TheWelp: - - rscadd: Bookcases are now movable/buildable/destroyable. - - rscadd: Paper can now be crumpled by using in-hand while on hurt intent. - - rscadd: Library Computer External Archive is now sortable. - Zuhayr: - - rscadd: Click a hat on a drone with help intent to equip it. Drag the drone onto - yourself with grab intent to remove it. -2015-08-15: - Kelenius: - - rscadd: Bees have been updated and are totally worth checking out (beekeeping - crate at cargo). - - rscdel: Sleeper consoles removed. All interaction is now done by clicking on the - sleeper itself. - - tweak: To put people into sleeper, you now have to click-drag people to it. Grabs - no longer work. To exit the sleeper, move. - - tweak: Sleeper now uses a NanoUI. -2015-08-16: - HarpyEagle: - - tweak: The unathi breacher is now only wearable by unathi. -2015-08-17: - PsiOmegaDelta: - - rscadd: Station time and duration now available in the Status tab. -2015-08-24: - HarpyEagle: - - tweak: Girders are now reinforced by using a screwdriver on the girder before - applying the material sheets. Use a screwdriver again instead to cancel reinforcing. - - bugfix: Mechanical traps no longer spawn in the janitor's locker. - - rscadd: Mechanical traps can now be printed with a hacked autolathe. - - rscadd: Adds armour penetration mechanic for projectiles and melee weapons. - - rscadd: Laser carbines, LWAP, and shotgun now have a small amount of armour penetration, - ballistic rifles (not SMGs) have moderate amounts, laser cannon has high armour - penetration, and the PTR mostly ignores body armour. - - tweak: 'Shotgun slugs and Z8/STS damage has been lowered slightly to accomodate - for their higher penetration. In general ballistics deal less damage but have - higher penetration than comparable laser weapons. Notable exception: X-Ray lasers - have had their damage lowered slightly but gain very high armour penetration.' - - rscadd: Energy swords now have very high armour penetration. Ninja blades do less - damage but ignore armour completely. - Kelenius: - - experiment: Click cooldowns have been removed on pretty much everything that isn't - an attack. - PsiOmegaDelta: - - rscadd: Adds the option to set the icon size to 48x48, found under the Icons menu, - along with 32x32, 64x64, and stretch to fit. - - tweak: Active AI cores now provides coverage on the AI camera network. Does not - utilize actual cameras, thus will not show up on security consoles. - - rscadd: The Dinnerware vending machine now offer both utensil knives and spoons - without first having to hack them. - - rscadd: Synths now have id cards with access levels which is checked when operating - most station equipment. - - rscadd: Station synthetics still have full station access but can no longer interact - with syndicate equipment, and syndicate borgs now start with only syndicate - access. - - rscadd: Syndicate borgs can copy the access from other cards by utilizing their - own id card module, similar to how syndicate ids work. - - rscadd: When examined up close id cards now offer a more detailed view. - - rscadd: Agent ids now offer much greater customization, allowing changing name, - age, DNA, toggling of AI tracking termination (using the electronic warfware - option), and more. - - rscadd: As AI tracking can now be enabled/disabled at will AI players should not - feel the need to hesitate before informing relevant crew members when camera - tracking is explicitly terminated. - - rscadd: Uplink menu now more organized and with new categories. - - rscadd: Now possible to cause falsified ion storm announcements. - - rscadd: Now possible to cause falsified radiation storm announcements, with expected - maintenance access changes. - - rscadd: Now possible for mercenaries to create falsified Central Command Update - messages. - - rscadd: Now possible for mercenaries to create falsified crew arrival messages - and records. - RavingManiac: - - tweak: Sound environments tweaked to feel more claustrophobic - - rscadd: Being drugged, hallucinating, dizzy, or in low-pressure or vacuum will - alter sounds you hear - - rscadd: Sound environment in holodeck will change to reflect the loaded program - Vivalas: - - rscadd: A new uplink item has been added! A briefcase full 'o thalla can now be - bought by traitors for bribes and such! - Zuhayr: - - rscadd: Pariahs are now a subspecies of Vox with less atmos/cold protection, a - useless brain, and lower health. - - rscadd: Leap now only gives a passive grab and has a shorter range. It also stuns - Pariahs longer than it does their target. - - tweak: Rewrote tiling. White floors, dark floors and freezer floors now have associated - tiles. - - tweak: Changed how decals work in the mapper. floor_decal is now used instead - of an icon in floors.dmi. - - tweak: The floor painter has been rewritten to use decals. Click it in-hand to - set direction and decal. - - tweak: Floor lights are now built from the autholathe, secured with a screwdriver, - activated by clicking them with an empty hand, and repaired with a welding torch. - - rscadd: Unathi now have minor slowdown and 20% brute resist. - - rscadd: Tajarans now have lower bonus speed and a flat 15% malus to brute and - burn. - - rscadd: Vox can now eat monkeys and small animals. - - rscadd: Tajarans can now eat small animals. - - rscadd: Unarmed attack damage has been lowered across the board. -2015-09-02: - Atlantis: - - rscadd: Converted phoron glass to borosilicate glass, adjusted heat resistances - accordingly, got rid of copypaste fire code. Fire resistance is now handled - by variables so completely fireproof windows are possible with varedit. - - rscadd: Windows take fire damage when heat exceeds 100C regular windows, 750C - reinforced regular, 2000C borosilicate and 4000C reinforced borosilicate. For - comparsions, reinforced walls begin taking damage around 6000. - Hubblenaut: - - rscadd: Adds glass bottles for Cola, Space Up and Space Mountain Wind to Booze-O-Mat. - - tweak: Some bar drink recipes have been amended to easily sum to 30 units for - drinking glasses. - - tweak: Vendors now have a product receptor for accepting goods. Opening the maintenance - painel is no longer required. - - tweak: Wrenching a vending machine is no longer a silent action. - - tweak: 'Stepup: Item placement on 4x4 grids seemed to work great. Now we''ll try - 8x8.' - Kelenius: - - tweak: Mechfab can now be upgraded using RPED, and now uses NanoUI. - Matthew951: - - rscadd: Added Vincent Volaju's hair. - - rscadd: Added Vincent Volaju's beard. - Zuhayr: - - rscadd: Added the ability for AIs in hardsuits to control suit modules and movement - with a dead or unconcious wearer. - - rscadd: Added ballistic supply drop pods. - - rscadd: Added diona gestalt random map template. - - tweak: Swapped the singularity beacon out for a hacked supply beacon. -2015-09-05: - Chinsky: - - rscadd: Made capguns into proper guns code-wise. It means you can now take people - hostage with them, stick in your mouth, and all other things you can do with - real guns but probably shouldn't. - - rscadd: Russian roulette! Fun for whole sec team! Unload some shells from revolver, - spin the cylinder(verb) and you're good to go! - HarpyEagle: - - rscadd: Shields no longer block attacks from directly behind the player. - - rscadd: Riot shields no longer stop bullets or beams (except for beanbags and - rubber bullets), however they are now more effective at blocking melee attacks - and thrown objects. - - rscadd: Energy shields block melee attacks as effectively as riot shields do. - Their ability to block projectiles is largely unchanged. - - tweak: Melee weapons now only block melee attacks. - - experiment: Two handed weapons have a small chance of blocking melee attacks when - wielded in two hands. - - rscadd: Sound and visual effects when blocking attacks with an energy shield or - energy sword. - - bugfix: Fixed dead or unconscious people blocking stuff with shields. - PsiOmegaDelta: - - tweak: Cargo now sorts under its own department on station manifests. - - rscdel: Manual radio frequency changes can no longer go outside the standard frequency - span. - - rscadd: Users with sufficient access can instead select pre-defined channels outside - this span, such as department channels, when using intercoms. -2015-09-07: - GinjaNinja32: - - rscadd: Added an auto-hiss system for those who would prefer the game do their - sss or rrr for them. Activate via Toggle Auto-Hiss in the OOC tab. - - rscadd: Auto-hiss system in 'basic' mode will extend 's' for Unathi and 'r' for - Tajara. 'Full' mode adds 'x' to 'ks' for Unathi, and is identical to 'basic' - mode for Tajara. - PsiOmegaDelta: - - tweak: 'Changed the language prefix keys to the following: , # -' - - rscadd: Language prefix keys can be changed in the Character Setup. Changes are - currently not global, but per character. -2015-09-08: - Soadreqm: - - tweak: Increased changeling starting genetic points to 25. - Zuhayr: - - bugfix: Auto-traitor should now be fixed. - - bugfix: The Secret game mode should now be fixed. -2015-09-11: - HarpyEagle: - - tweak: Made flares brighter. - - rscadd: Coffee is now poisonous to tajaran, much like how animal protein is poisonous - to skrell. -2015-09-26: - PsiOmegaDelta: - - tweak: Meteor events now select a map edge to arrive from, with a probability - for each individual wave to come from either neighboring edge. Meteors will - never arrive from opposite the starting edge. -2015-10-10: - HarpyEagle: - - tweak: Rubber bullets and beanbags now are now resisted by melee armour. - - bugfix: Fixed a couple of bugs causing phoron gas fires to burn cooler and slower - than they were supposed to. - - bugfix: Merc bombs are now appropriately explosive again. Same goes for bombs - made by toxins. -2015-10-11: - HarpyEagle: - - tweak: Fabricated power cells start uncharged. - Hubblenaut: - - rscadd: Light replacers can be refilled by clicking on a storage item. - - tweak: Light replacers now hold up to 32 light bulbs. - - tweak: Light replacers can be obtained through janitorial supply crates. - - tweak: A sheet of glass fills the light replacer by 16 bulbs. -2015-10-14: - Hubblenaut: - - bugfix: Airlock backup power test light properly offline when backup power down. - - bugfix: Empty flavor texts no longer draw an empty line on examination. - - bugfix: Material stacks now properly merge upon creation. - - bugfix: Messages for adding to existing stack appear again. - PsiOmegaDelta: - - tweak: Blobs can now spawn anywhere in maintenance, rather than picking location - from a pre-determined list. - TheWelp: - - rscdel: Removed higher Secret player requirements. - Zuhayr: - - rscdel: Removed facehuggers, alien embryos, and embryo removal surgery. - - rscadd: Xenomorph Queens (or infested surgeons...) can now add a hive node to - a victim in order to slave them to the hive. - - tweak: Xenomorph brute/burn mods were tweaked to buff them significantly. - - tweak: Alien larvae now hatch from eggs when ghosts click on them. - - tweak: Alien larvae now gain progression towards adulthood from being inside a - human with blood, which they drink. - - tweak: Alien weeds now use the vine system. -2015-10-21: - Hubblenaut: - - tweak: Bruise packs are now applied per wound, not per limb. - - tweak: Bruise packs now use a delay depending on wound severity for applying. - - rscdel: Removed instant healing ability from advanced bruise packs and ointment. -2015-10-27: - HarpyEagle: - - bugfix: When affected by pepperspray, eye protection now prevents blindness and - face protection now prevents stun, instead of face protection doing both. -2015-11-02: - Hubblenaut: - - rscadd: Adds tape for atmospherics. - - tweak: Tape graphics and algorithm changes. Looks a lot more appealing now. - - tweak: Starting and ending tape on the same turf will connect it to all surrounding - walls/windows. - - tweak: Lifting a part of the tape will lift an entire tape section. - - tweak: Mobs on help intent do stop for tape. - - bugfix: Crumpled tape does not affect tape breaking behavior anymore. -2015-11-10: - Atlantis: - - rscadd: Expanded gridcheck random event. Affected devices now show error UI and - may be restarted manually before the event ends. All Z-levels are now affected - equally. - Datraen: - - tweak: Changes standard and specific plant traits, more diverse plants. - Sligneris: - - tweak: Modified the wording of NT Default's laws. -2015-11-16: - PsiOmegaDelta: - - rscadd: Added new verb, 'Character Setup' under the Preferences tab, to allow - modifying your character settings at any time. -2015-11-19: - PsiOmegaDelta: - - tweak: The round start and auto-antag spawners can now check if players have played - long enough to be eligable for selection. -2015-11-22: - PsiOmegaDelta: - - tweak: Engineering alarm consoles now display camera alerts. - - rscadd: Adds a hacking tool that for all intents and purposes acts and works like - a multitool until a screwdriver is applied. - - rscadd: Gives full control of airlocks after 20-40 seconds of hacking. - - rscadd: The last 6-8 hacked airlocks are always accessed instantly. - neersighted: - - bugfix: Laptop Vendors now accept ID Containers (PDA, Wallet, etc). - - bugfix: Personal Lockers now accept ID Containers (PDA, Wallet, etc). - - experiment: Add /tg/-like attack overlays. -2015-12-06: - Hubblenaut: - - bugfix: Welding a broken camera will use the correct icon. - - tweak: Camera assemblies remember their tag and network from previous usage. - - tweak: Mobs on help intent will not push others that aren't. - Loganbacca: - - rscadd: Added a backend (wireless) system for communication between machinery - and other devices. - Neerti: - - rscadd: The AI can now toggle whether its hologram will move towards the center - of its view using the 'Toggle Hologram Movement' verb. - PsiOmegaDelta: - - tweak: Helmet cameras are no longer enabled by clicking the helmet, instead there - is a 'Toggle Helmet Camera' verb. - Raptor1628: - - tweak: Armory layout changed, weapons returned to static amounts. - - rscadd: New security armor and helmet sprites added. - Zuhayr: - - tweak: 'Backend change: allowed accessories to be placed on any clothing item - with the appropriate variables set.' - - rscadd: Drones can now pull a variety of things (such as scrubbers). This came - with a pulling refactor so please report any strangeness with pulling in general. - - rscadd: Drones (and any mob that can be picked up) can be bashed against airlocks - and such to use their internal access, so long as the person using them does - not have an ID card equipped. - - tweak: Rewrote fireaxe cabinets. Click with a multitool to unlock or loc, click - with a hand to open or close, smash with anything that does damage, and drag - onto your icon to remove the fireaxe. -2015-12-13: - Atlantis: - - rscadd: Added Inflatables Dispenser(ID), an item that allows rapid deployment, - transport and removal of inflatables. - - rscadd: Engineering, Construction and Crisis modules are now outfitted with ID. - - rscadd: Three boxes in engineering have been replaced by three IDs. - - tweak: w_classes of inflatables readjusted. Boxes and IDs can be carried in backpack - now. Individual inflatables are small enough to fit in pocket. - PsiOmegaDelta: - - experiment: Adds a system to allow objects to implement custom multitool interactions - in a modular manner. - - rscadd: The AI can now toggle multitool mode on/off, using the new 'Toggle Multitool - Mode' verb. - - rscadd: Cloning vats can now be connected to a cloning console by using a multitool. - - rscadd: Station alert console circuits can now be altered using a multitool, changing - which alarm types are displayed. - - rscadd: Can now select the color of a cable coil using a multitool. - TheWelp: - - rscadd: Added boardgame item for use with table-top board games. - - rscadd: Added Actors Guild, an alternate spawn that allows players to control - actors. - - rscadd: Added differing card decks, including a Tarot deck and two trading card - games. - - rscadd: Remade /TG/Station's Orion Trail arcade machine with bay-specific modifications. -2015-12-20: - PsiOmegaDelta: - - rscadd: Can now use the Antag Uplink to buy a door hacking device with endless - uses and which leaves doors unharmed, but instead needs some time to do its - work. - Zuhayr: - - tweak: Aiming has been rewritten, keep an eye out for weird behavior. -2016-01-01: - Atlantis: - - rscdel: Removed old computer3 system, most noticeable due to removal of old laptops. - - rscadd: Adds brand new modular computer system that replaces computer3. These - computers may run programs from hard drive, and one device is not limited to - one program. - - rscadd: Modular computers can be assembled manually from components printed at - RnD (Consoles mainly), or purchased (from old laptop vending machines). - - rscadd: Adds NTNet, networking used by modular computers, including an administration - console, NTNet relays, and antag programs. - - rscadd: Adds small set of programs modular computers can run. More programs will - be added in the future. - - rscadd: Various small things added, such as, data crystals (USB flash drives), - NTNRC (messaging, IRC/forum style), file sending, etc. - PsiOmegaDelta: - - tweak: Resomi, and any other humanoid mobs, can now bump doors open despite their - size. - TheWelp: - - rscadd: Microwaves can now be unanchored with a crowbar. -2016-01-08: - Chinsky: - - bugfix: Can pick up monkeys / undress resomi now properly. HELP intent for scooping, - NON-HELP for undressing. - RavingManiac: - - rscadd: Storage in backpacks, boxes and other containers is now capacity-based. - Some containers like belts remain slot-based. -2016-01-13: - Datraen: - - bugfix: Objects can now be yanked out of synthetics. - Techhead: - - rscadd: 'Added a new random event: Shipping Error - A random crate is mistakenly - shipped to the station.' -2016-01-16: - Atlantiscze: - - rscadd: SMES units now try to balance their inputs and outputs. For outputs this - means two SMESes powering the same grid will share the load by percentage. For - inputs, all SMESes inputting from one power network will split the available - power by percentage. - - tweak: 'Some minor SMES configuration changes have been made: Atmospherics SMES - now starts configured to prevent power outages when people forget about it, - engine SMESes are now configured to input/output at full rate. These are only - defaults and may be changed ingame as usual.' - PsiOmegaDelta: - - rscadd: Uplink crystals can now be converted into physical form to allow transfer - between uplink devices. - - rscadd: Each mercenary now spawn with their own private uplink, with each indivual - uplink having the same number of telecrystals as the normal traitor uplink. -2016-01-20: - Atlantis: - - rscdel: Construction robot module removed - - rscadd: Engineering robot module now contains most tools of construction robot, - primarily plasteel. RCD is not included by default. - - rscadd: Engineering Robot RCD upgrade is now buildable. This upgrade unlocks robot's - RCD. It is fairly expensive, requiring small amount of gold and silver, as well - as phoron and steel to build. - - rscadd: Floodlight upgrade added. This upgrade doubles robot's light intensity - (it will be more or less same as actual floodlight), at the cost of higher power - usage. - - rscadd: You may now install matter bin into a cyborg in order to boost it's matter - synth's maximal capacity. Better matter bin adds more capacity - - tweak: Default capacity of matter synths for engineering module tweaked a little, - since prices of reinforced walls, etc. increased recently. Steel changed from - 40 to 60 sheets default, plasteel from 10 (Construction default) to 20. -2016-01-25: - Atlantis: - - tweak: Setup Supermatter admin button now uses map markers and supports all coolant - types. -2016-01-29: - Karolis2011: - - tweak: Improved modular computer performance - PsiOmegaDelta: - - experiment: We now support tg's online changelog auto-creation. See https://tgstation13.org/wiki/Guide_to_Changelogs#Online_auto-creation. - - rscadd: Can now click held mobs, such as Pun Pun, to view their inventory. -2016-02-01: - PsiOmegaDelta: - - bugfix: ED-209s, hostile mobs, and mecha weapons should again be able to fire - without issue. - - bugfix: Agent ids can now be assigned an owner even after having been dropped - on the floor. - - bugfix: Monkey cubes can now be expanded in sinks again. -2016-02-03: - PsiOmegaDelta: - - tweak: Antagonist and special role preferences have been overhauled. Please update - these specific character preferences as they have been reset. -2016-02-06: - PsiOmegaDelta: - - bugfix: Should again be possible to resist out of chairs, beds, and welded lockers. -2016-02-07: - PsiOmegaDelta: - - rscadd: More --fun-- ion laws added. - - rscadd: Showers now splash objects on their turf with water. - - tweak: Can now expand unwrapped monkey cubes using showers, sinks, or just about - any source that applies water. -2016-02-11: - PsiOmegaDelta: - - bugfix: Items dropped by mobs that are held by another mob should no longer be - lost. - - bugfix: Items dropped inside mechs should no longer be lost. - - tweak: Changes the way loadout is handled in the character setup. - - tweak: Can no longer see loadout items restricted to a race you're not whitelisted - for (hence why you may see empty categories). - Zuhayr: - - rscadd: Added functionality for two-handed guns; these guns will give an accuracy - penalty if fired without an empty offhand. - - rscadd: Unified two-handed melee weapons with the above; while the offhand is - empty, the weapon will count as wielded. - atlantiscze: - - rscadd: Players will now be warned when selected spawn point has dangerous atmosphere, - and will be able to abort spawning and spawn elsewhere - - tweak: Supermatter no longer pulls anchored objects. To compensate, pull radius - was increased. It is currently limited by range() proc to approximately 32 tiles. - - tweak: Supermatter delamination's explosion strength reduced slightly. This will - hopefully motivate players to actually attempt repairs as it will be possible - to complete them within 1-2 hours. - - tweak: Supermatter spends more time (30 seconds compared to 10 seconds) in pulling - mode before exploding during delamination. - - rscadd: Supermatter's UI now shows "Relative EER" (Energy Emission Ratio) value - which represents how energised the supermatter is. - chinsky: - - soundadd: Surgery operations now cause sounds. -2016-02-13: - Ccomp5950: - - bugfix: Fixes slimes not hearing people (Kudos Karolis2011) - Karolis2011: - - tweak: Changed Tajarian language name (from Siik'tajr to Siik'maas) - - tweak: Changed Resomi language name (from Resomi to Schechi) - - rscadd: Added Alden-Saraspova counter sprite, making it visable. - PsiOmegaDelta: - - rscadd: Adds a reconnect button to the file menu. - - rscadd: Ghosts can now follow any movable object. -2016-02-15: - Ccomp5950: - - bugfix: Mobs will now have the correct health indicator when they die. X_X - Neerti: - - rscadd: The examination tab now includes additional information about examined - clothing and armor. - - bugfix: EMP no longer hits twice on humans. - - tweak: EMP drains powercells using the cell's current charge, and not the cell's - maximum potential charge, to ensure two blasts do not completely disable a synthetic. - - tweak: EMP hitting a prosthetic limb or organ will now do less damage. - - tweak: EMP hitting a cyborg will no longer outright stun them. Instead, they - gain the 'confused' status for a few moments, making movement difficult. In - addition, their HUD gets staticy, and their modules are forced to be retracted. - - rscadd: Stasis bags will protect the occupant from the outside enviroment's atmosphere. - - rscadd: Stasis bags can be hit with a health analyzer to analyze the occupant. - PsiOmegaDelta: - - rscadd: Sharp objects now have a greater chance of causing bleeding. - - rscadd: Can now pour reagent containers down the sink. - - tweak: Wrapped parcels now take on the size of the wrapped object. - - tweak: Security vests now only protect the torso, arms and other limbs are fair - game. - - tweak: Alters Neerti's EMP changes. - - tweak: Borgs are again stunned by max severity EMPs. - - tweak: Cells now lose a minimum amount of charge based on EMP severity, ensuring - multiple blasts will still be able to drain a cell. - Zuhayr: - - rscadd: Small species now take smaller bites/gulps from food and drink. - - rscadd: Small species are now effected by alchol and toxins twice as much. - - rscadd: blood_volume is now a species-level var and Resomi have lowered blood - volume. - - rscadd: Hunger is a species var and Resomi get hungry faster. - - rscadd: Small mobs have a reduced climb delay. - - rscadd: Resomi gain more nutrition from meat. -2016-02-18: - Daranz: - - bugfix: HUD glitches with the plant bag and cigarette packets are now fixed. - Karolis2011: - - wip: New command and communications program for modular consoles and laptops. -2016-02-22: - Datraen: - - tweak: Fragmentation grenades are no longer launchable. -2016-02-25: - Nalarac: - - rscadd: The autolathe can now print welding goggles. - PsiOmegaDelta: - - spellcheck: Punching a mech should no longer expose you to typos. - Yoshax: - - bugfix: Can again remove linoleum tiles, now with a screwdriver. - - rscadd: Can now order linoleum tiles from cargo. - - bugfix: Tajara should now react appropriately to various chemical reagents, such - as coffee. -2016-02-26: - Crazylemon64: - - rscadd: Allows lighting of smokeables using burning people. - Kelenius: - - imageadd: Additional sprites for the drying racks. - Mark9013100: - - tweak: Evidence bag boxes storage increased. - - bugfix: Fixes the RIG grenade launcher icon. - PsiOmegaDelta: - - spellcheck: Changes instances of 'prothesis' to 'prosthesis'. - Snapshot: - - bugfix: Syndicate hardsuit helmet was invisible for humans when worn - - bugfix: Balances to IPC suit cooler battery usage. -2016-02-29: - MrSnapwalk: - - rscadd: 'Adds five new hairstyles: Short Bangs, Half-Shaved Emo, Long Hair Alt - 2, Bun, and Double-Bun.' - PsiOmegaDelta: - - rscadd: Can now order white, dark, and freezer floor tiles from cargo. -2016-03-01: - PsiOmegaDelta: - - tweak: Player preferences have been overhauled. Please update your preferences, - found at "Character Setup" > "Global" > "Preferences", as they have been reset. - TheWelp: - - bugfix: Board game now properly takes things out of your hand again. - - rscadd: Individual cards now set their name and description so they are no longer - just a playing card. - - rscadd: Adds space pike as a rare carp spawn. Pikes are bigger, meaner, and will - attack anything, including other fish. -2016-03-02: - redstryker: - - rscadd: Adds hijabs as a head and loadout item. -2016-03-04: - Datraen: - - rscadd: Adds a mech-mountable flare launcher. -2016-03-18: - Datraen: - - bugfix: Harmbaton no longer causes halloss while inactive. - Kelenius: - - bugfix: Potassium and nitroglycerin explosive grenades now work. - TheWelp: - - rscadd: Added ability for carbon mobs to taste. Sensitivity varies between species. -2016-03-27: - atlantiscze: - - rscadd: Adds a new "News Browser" modular computer program, that can be used to - download and view news from the NTNet. - - tweak: APCs now react to EMPs in a different way. EMPs will temporarily disable - the APC, in a same way gridcheck does. That allows the APC to be reset using - the button in UI. Duration of EMP timer is based on severity, and a little bit - of RNG (8 - 12 minutes on high strength EMP) - - tweak: APC power cells are now partially shielded from EMPs, resulting in lower - charge loss when the power cell is in APC. -2016-03-28: - Datraen: - - bugfix: Adds a check to prison breaks that makes sure the APC is on before continuing. - atlantiscze: - - rscadd: Cyborgs and the AI now show on the crew manifest. -2016-04-01: - TheWelp: - - rscadd: Off-station antagonists now each set a faction. Primarily used with Resomi - playing merc, heist, etc. - - rscadd: Reworked Wizard to have multiple types of spellbooks, each with their - own costs, artifacts, and unique spells. - - rscadd: Antagonist that wipe equipment now give emergency gear before equipping - anything. Primarily a fix for off-station Vox antags. - - rscadd: Wizard clothing check is now conscious of species slot restrictions. (E.G. - Diona can now cast w/o sandals) - - rscadd: Added a cast verb to the IC tab. Will let people macro spell casting or - quickly cast them via auto-complete. -2016-04-05: - PsiOmegaDelta: - - rscadd: Detectives and forensic personnel now join the station with their own - CSI kit. - - rscadd: The detective's cabinet now contains a CSI kit. - TheWelp: - - tweak: Cast verb now appears/disappears depending on whether you have spells or - not. - - tweak: Corrupt Form now has a longer duration (10 seconds -> 15) - - tweak: Wizard Mark is now a cleanable entity (so soap/space cleaner destroys it) - - tweak: Mark/Recall cooldown halved. (120 seconds -> 60 seconds) - - rscadd: Fixes mind's spell list so that cloning will now properly add all the - spells. You will also keep your spells between bodies. (E.G. You are borged, - you get to keep your spells) - - rscadd: Added verb to antagonists to recieve objectives. Located in the OOC tab - and gained whenever the person becomes an antagonist. - atlantiscze: - - rscadd: Modular computers may now be damaged by gunfire, EMPs and similar threats. - This includes the computer's chassis, and components. - - rscadd: Damaged components may be repaired using nanopaste or cable coil. Damaged - chassis can be repaired with welder. You can use multitool on a component to - get diagnostic report. - - tweak: NTNet speeds increased, with advanced network cards being buffed considerably. - - tweak: Data crystals may now be disconnected without a screwdriver, via the rightclick - menu. - - tweak: You can now load paper into the nano printer, by clicking it (or the computer - it is installed in) with paper pieces. - - tweak: 'Component weights re-adjusted. For now they will have weight depending - on what device are they intended for (tablet+: tiny, laptop+: small, console:normal)' - - tweak: Modular computers now glow when turned on. Tablet has equal light intensity - as PDA, while console is comparable to a light bulb. This light is not colored. -2016-04-06: - Arctic: - - rscadd: Added wall-mounted oxygen pumps which equip internals when used. -2016-04-09: - Kearel: - - tweak: Dough now also requires water to be made. - ParadoxonKomplikon: - - tweak: The exotic seeds crate is now access restricted to xenobiologists. - PsiOmegaDelta: - - rscadd: Bedsheets can now be worn as capes. -2016-04-11: - NullSnapshot: - - rscadd: Players who are active antags can now respond to AOOC. - - rscadd: Mods have been given access to AOOC. -2016-04-14: - Datraen: - - rscadd: Manually ports /tg/station's dark click code https://github.com/tgstation/-tg-station/pull/10272 - by Razharas. - - bugfix: Microwaves no longer try cooking their components while cooking. - HarpyEagle: - - tweak: Fire extinguishers now spray a lot more water, will hopefully put out people - on fire faster. - - tweak: Fire extinguishers now make the ground wet when you use them. - Hubblenaut/HarpyEagle: - - tweak: Confused movement is a little less random. It is now easier to get to where - you want to when confused, especially while walking. - - rscadd: People running into solid objects while confused can be knocked over. - Kearel: - - bugfix: Fixes armalis x shift, again. - - tweak: Adds spellbook descriptions in book of tomes. - - rscadd: Adds ability for bears to dance. The commands dance, boogy and boogie - all work. - - rscadd: Adds ability for commanded mob subtypes to listen to the terms everybody - and everyone. - PsiOmegaDelta: - - rscadd: Can now customize the color of select set of underwear, similar to some - loadout equipment. - - rscdel: Due to new underwear names some selections may have been unset. Double-check - your character setup settings. - TheWelp: - - rscadd: Ports more of TG's slimes. Includes Pyrite, Gold, Cerulean, Bluespace - and Sepia - Yoshax: - - rscadd: Can take filled lunchboxes using the character loadout. These have a food - item, a snack, and a drink, all configurable. - atlantiscze: - - tweak: RIGs driven by AIs inside IIS now use massively less power. In other words, - the AI can walk more than few tiles without fully draining the battery. -2016-04-15: - Datraen: - - rscadd: 'Added Three New Mixed Gamemodes: Lizard, Changeling + Wizard; Intrigue, - Traitors + Ninja; Visitors, Ninja + Wizard.' - - tweak: Created a variable for latespawning antagonist templates, for customization - of autospawning antagonists in mixed game modes. - - tweak: Removed JSON encoding of the PDA Manifest list. - HarpyEagle: - - tweak: Shotgun flare illumination now lasts longer, around 3-4 minutes. - - bugfix: Fixed attack animation playing when using flashes even if the flash was - not actually used due to being broken or recharging. - - bugfix: Fixed lightswitches layering over darkness. Now only the light layers - above shadow. Lightswitch illumination is now much more subtle. - Mark9013100: - - rscadd: Paramedics, Medical Doctors, and the Chief Medical Officer can select - white webbings from the custom loadout. - - rscadd: ' Can now order a wide assortment of job gear from cargo.' - Sabess: - - rscadd: Detectives can now reskin the vintage .45 pistol. -2016-04-17: - mkalash: - - tweak: 'New voting system allows players to chose three options: high, medium, - and low' - - rscadd: Players can set individual antag roles to 'never' and will not be selected - to antag by the game mode - - tweak: Players who do not vote for the game mode, but have not selected never, - are candidates - - rscadd: The game will try the top three voted game modes before forcing extended - without revote -2016-04-18: - HarpyEagle: - - bugfix: Fixes people not going unconscious when they should. - - tweak: Cigarette boxes/cigar cases/candleboxes can now hold any tiny item, such - as pens or dice. - - tweak: Box storage almost doubled, they can now again hold up to 7 small items, - they can no longer hold larger items. - - tweak: Backpack capacity is now 22, dufflebag capacity is now 32. - - bugfix: Dufflebags now properly apply slowdown when worn on the back. As before, - they do not apply slowdown when held in hands. - - imageadd: Fixed missing dufflebag back sprites, ported them from /tg/. - - bugfix: 'Excavation kit can no longer be folded into cardboard. ' - - bugfix: Unathi knife harness can now hold more types of knives. - - tweak: Vials are now tiny items. - PsiOmegaDelta: - - rscadd: Can now prefill the loadout flask and vacuum-flask with a relevant liquid - of your choice. - - tweak: Alters the available selection of genders for different species during - character setup. -2016-04-20: - HarpyEagle: - - bugfix: Examining objects/yourself no longer triggers the gun hostage/aiming system. - Neerti: - - tweak: The toggle to shoot if the target talks on the radio defaults to off. - - bugfix: The aim intent icon now updates when clicked. -2016-04-21: - atlantiscze: - - tweak: Being crushed by door will now push you out of the door, preventing door - crush spam. To compensate, damage caused by door crushing has been increased. -2016-04-23: - Irrationalist: - - bugfix: Fixed clothing (gloves and jumpsuits) hidden from description on examination, - but are still being displayed on character anyway. - PsiOmegaDelta: - - rscadd: The pAI Universal translation module now includes the language of the - Resomi, Schechi. -2016-04-24: - HarpyEagle: - - rscadd: Items can now be positioned on tables by clicking. -2016-04-26: - HarpyEagle: - - bugfix: Rewrote how the floating animation is updated, the animation now correctly - updates when leaving space, activating/deactivating magboots, and buckling/unbuckling. - - bugfix: Examining people in crit now again indicates that they are not breathing. - - bugfix: Fixed spears giving slashing cuts and not puncture wounds. - - bugfix: Fixed wounds not bleeding when they are supposed to. - atlantiscze: - - tweak: Reverts the reduction of backpack capacities introduced few days ago. -2016-04-30: - HarpyEagle: - - rscadd: Mercenaries can now purchase several types of frag grenades for TC. - - rscadd: Mercenaries can now purchase grenade launchers for TC, comes pre-loaded - with random grenades. - - rscadd: Many guns now have an accuracy and dispersion penalty for firing with - only one hand, that roughly corresponds to the size and weight of the gun. You - will see a message upon shooting with a compromised aim. The penalty is also - affected by rapid-fire modes in the case of bullet throwers. To fire two-handed - simply ensure that your other hand is empty and usable when shooting. - - tweak: Laser cannons now slightly increased shot capacity and have increased accuracy - (better for fighting at longer ranges), can no longer fit in backpacks. - - tweak: X-ray laser gun now fires at the same pace as the laser carbine, has the - same shot capacity, but does much more damage against armoured targets, and - is slightly easier to one-hand with. - - tweak: Shotgun flares now blind over a larger area and illuminate for longer. - - tweak: Z8 does slightly less damage, has a larger magazine size, and slightly - more armour piercing. - - bugfix: Shooting a shotgun stun shell now makes the appropriate sound. - PsiOmegaDelta: - - rscadd: Adds a cable painter for recoloring both coils and laid down cables. - - tweak: Pulling items now carries a slowdown penalty, based on weight or size. - atlantiscze: - - tweak: SMESes can now be damaged by gunfire/explosions/emitters, and repaired - by welding tool. SMES that is too damaged will explode with strength dependent - on remaining charge. Damage can be seen by examining the SMES. - - rscdel: Old cell rack PSUs have been removed (and replaced). - - rscadd: New cell rack PSUs have been added. Comes with set of simple sprites (I'm - horrible spriter!), a new nanoUI that shows status of each power cell, and support - for upgrades. Better capacitors increase charging/discharging rate, better matter - bin increases max amount of cells that can be held inside the PSU (3/6/9 cells). - PSUs do not allow precise setting of input/output levels. These new PSUs act - as bridge between power cells and cables, allowing you to charge/discharge the - cells into the grid. - mkalash: - - tweak: Add antagonist vote now works midround - - rscadd: Ghosts can join a pool to be selected for off-station antag roles by add - antag votes - - rscadd: Add antagonist option added to the crew transfer vote -2016-05-04: - Irrationalist: - - bugfix: Mercenary voidsuits no longer hide gloves - - tweak: Rigs now hide masks when sealed - TheWelp: - - tweak: Readds Pariah space resistance. Their health is instead lowered by 15 (80->65) - - bugfix: Pariah stink now respects environment and if the person is a robot. - - rscadd: Pariahs will now vomit uncontrollably on occassion. - - tweak: Budget gloves now fit Vox. - - rscadd: Adds Vox organs. Now are both blue and alien. - - bugfix: Pariah will no longer have superhuman tasting capabilities. - - tweak: Vox hair can now be colored. It could always be colored using the random - button in the character setup and honestly, it isn't lore breaking so I'll let - people choose it themselves. -2016-05-05: - Daranz: - - rscadd: Mice and other small critters can now be eaten from hand. As a member - of species eligible to eat mice, scoop a mouse and click on your character with - the hand holding the mouse. The old method of eating from grab remains available - both for unscoopable and scoopable creatures. -2016-05-06: - HarpyEagle: - - rscadd: Allows AI holograms to change facing by clicking much like other mobs. - - tweak: Armor now has a chance to either block an attack or absorb a fixed portion - of damage, instead of randomly blocking either nothing, half, or full damage. - - tweak: Armor protection against explosions is similarily less random now. - - tweak: Riot, ablative, and ballistic armor is less hyper-specialized. They provide - moderate protection against other damage types now, while their protection against - their main damage type is reduced but still very good. -2016-05-07: - PsiOmegaDelta: - - rscadd: Can now buy the camera MIU from the 'Devices and Tools' category. Gives - the user access to the station camera network on the current Z-level. - - rscadd: Activating an uplink telecrystal in hand now teleports you to a random - semi-near location. -2016-05-08: - PsiOmegaDelta: - - rscadd: The antag uplink now offers .45 ammunition. -2016-05-11: - PsiOmegaDelta: - - rscadd: The Cardborg costume now disguises you as a proper standard borg. This - only fools synthetics (until they examine you), to and all other lifeforms you - will remain your silly cardboard wearing self. - Based on RemieRichard's appearance - framework from /tg/ -2016-05-14: - HarpyEagle: - - rscadd: Items can now be placed in pockets using the strip UI. - - rscadd: Lit welders can now be placed in pockets. Having a lit welder in your - pocket sets you on fire. - Raptor1628: - - tweak: Replaced standard Space Suit, AMI Hardsuit, Excavation Suit, and Anomaly - Biosuit sprites. - - tweak: Restricts all station hardsuits to Humans with the exception of the CE's - suit, which fits everyone but vox and diona, and the Unathi Breacher, which - is for Unathi. - - rscadd: Adds alternate voidsuit types and more flavorful voidsuit descriptions. -2016-05-15: - HarpyEagle: - - bugfix: Fixed lungs not rupturing in space. -2016-05-17: - Techhead: - - rscadd: Stack items now take up storage space proportional to the size of the - stack. - - tweak: Materials, rods, and tiles have had their weight class and max stack size - adjusted. - - rscadd: Stacks now let you split them in any amount instead of one at a time. -2016-05-19: - Haswell: - - rscadd: Added suit cyclers in the engineering and research outposts. - - tweak: Reworded ERT light armors and helmets to asset protection theme. - - rscadd: Added new xenobiologist's locker in xenobotany storage and xenobiology - airlock, replaces botanist's lockers. - - rscadd: Added one biohazard closet to xenobotany storage. - - rscadd: Added scientist lockers and wardrobes to R&D and misc. research. - - rscadd: Added extra Emergency NanoMeds to research areas. - - rscadd: Added one science wardronbe to the research outpost locker room, replaced - stray scientist's locker with xenoarcheologist's locker. - - tweak: Scientist's locker can now be unlocked with either toxins storage or R&D - lab access. - - tweak: Removed toxins storage access from xenobiologists. - - tweak: Xenoarcheologist's locker now uses xenoarcheology access. - - maptweak: Toxins lab now uses toxins storage access instead of R&D access. - - maptweak: Adds xenobiology and toxins storage access to misc. research. - - maptweak: Tools from botanist's lockers in xenobotany storage are moved to the - crate sitting nearby. - - maptweak: Removed one biohazard closet in xenobiology airlock, remaining closet - now hold two sets of suits. - SilveryFerret: - - rscadd: Changes the Death Alarms from announcing over Common channel, to announcing - only over Medical and Security channels. - Yoshax: - - bugfix: Processing strata floor can now be pried up with a crowbar. - - bugfix: Blue carpet can now also be removed with a crowbar, and has had it's ability - to burn and have corners restored. - - rscadd: Added shotglasses. These can contain 10 units. They have their whole contents - swalloed in one gulp. They can be produced in the autolathe or found in the - booze vending machine in the bar. -2016-05-21: - Haswell: - - maptweak: Revamped kitchen and bar areas. - Irrationalist: - - tweak: Accessories are now more 'magic' and more pleasant for non-humans to use. - - tweak: Copied gas_mask to gas_alt in masks.dmi, gas masks should not be obscure - when worn by Resomi. - - imageadd: Added Resomi sprites for 'brown webbing vest', 'black webbing vest', - 'white webbing vest' and 'webbing'. - - imageadd: Added Resomi sprites for Head of Security's trenchcoat and coat, and - Warden's jacket. Including the grey version of the detective's leather coat. - - imageadd: Added Resomi sprites for old and new armour vests and webbing vests - ('suit'-slot ones) - - bugfix: Fixed breath mask lacking a state name when worn by Resomi. -2016-05-22: - Yoshax: - - rscadd: The antag uplink now offers regular discounts on randomly items. - atlantiscze: - - bugfix: Breaking a lot of lights at once will no longer cause massive lag spikes. - This also applies to other sources of sparks. - - tweak: Malf AI Electrical Pulse ability now has a 15s cooldown to prevent spam. - - tweak: Door crush damage reduced by 25% according to feedback. - - rscadd: 'Electrical Storm event overhauled. It now occurs in three severities - and simulates actual storm. A warning will be broadcasted shortly before it - begins, and once it''s over. Duration is severity-dependent. Possible effects - include: Broken lights (as it''s now), Hacked APCs (same as when emagged), or - outright broken APCs with more severe event variants. Each affected APC will - also shut down briefly, this causes station-wide power outages until the storm - passes. Stronger storms last for longer and affect more APCs at once.' -2016-05-24: - Haswell: - - rscadd: Added internal affairs closets, both secure and non-secure variants. - - maptweak: Revamped internal affairs and forensic offices. -2016-05-25: - Daranz: - - bugfix: Food slices spawned in lunchboxes can now be actually eaten. - Haswell: - - maptweak: Minor furniture adjustments to forensics, xenobiology and xenobotany - laboratories. - - rscadd: Added backpacks to xenoarcheology lockers. - - rscadd: Added clipboards to science lockers. - - rscadd: Added roleplay effects for nicotine. - - rscadd: Cigars and cigarettes now contain nicotine. -2016-05-29: - GinjaNinja32: - - rscadd: Rewrote drinking glasses. There are now eight types of glass, and drink - appearance is based on color and the type of glass you put it in. - - rscadd: There are now 'glass extras' you can add to drinks. Straws, drink sticks, - and fruit slices (yes, all of them) all work. You can add up to two extras per - glass. Add extras by clicking the glass with the extra, remove by clicking the - glass with an empty hand while it's in your other hand. - - rscadd: Adding 'fizzy' things (soda water, cola, etc) or ice to a drink will make - it be fizzy or have ice floating in it. - HarpyEagle: - - bugfix: Fixes disarm-attack dislocation chances being so low that you were very - likely to break the targeted limb before it would dislocate. - - bugfix: It is now possible to disarm-attack with stunbatons like with other melee - weapons. Note that this means that using a stunbaton on disarm intent will hurt - people. - - rscadd: Trying to move while being grabbed will now automatically resist. - - tweak: Small mobs are no longer able to pin larger mobs. - - tweak: Resisting a smaller mob's grab is more likely to be successful. - - bugfix: Fixed being able to climb onto a larger mob while restrained, weakened, - unconscious, or dead. - Haswell: - - rscadd: Added resomi science uniform to custom loadout, xenowear section. - Serithi: - - rscadd: Adds in lavender. - TheWelp: - - rscadd: Fully implements space-bikes. They are available to heist and mercenaries. - - tweak: Reworks the effect trail system (so we don't repeat the code over and over - again.) - - rscadd: Added a system to invest spell slots to get more back. You can invest - one spellslot at a time and you will recieve two back. Sacrificing specific - items/reagents onto the spellbook will shorten the time by ten minutes. Can - be done once per investment. - - tweak: Shapeshifting damage share now spreads out the damage to roughly ten damage - chunks. Makes it less of a limb-gibber. - - tweak: Baleful Polymorph buffs the shapeshiftee's health pool to fifty, so no - longer can you get insta-killed. - - tweak: Avian Form has been renamed to Polymorph (get it?) - - tweak: Polymorph no longer strips you when you transform. - - tweak: Polymorph and Baleful Polymorph no longer share damage. - - tweak: Armalis icons are properly centered, for real this time. - Yoshax: - - tweak: Adjusting your suit sensors now displays a message to other people in range - that you did so. In addition, seeing someone else adjust someone's suit sensors - no longer informs you to what level. -2016-05-31: - Cirra: - - tweak: Changed all dollar symbols to the Thaler symbol. - SinTwo: - - rscadd: 'Four new hairstyles added: Fringetail, Sleeze, Rows, Rows 2' - Yoshax: - - rscadd: Admins can now toggle being able to hear remote LOOC. -2016-06-01: - Hubblenaut: - - rscadd: Adds new hairstyle (Ponytail 5) - Raptor1628: - - rscadd: Updated torch Z levels, map defines, and added non-ship Zs. -2016-06-02: - Haswell: - - maptweak: Reworked one of the break rooms on the research outpost into a work - area. - - maptweak: Separated xenobiology biohazard shutters from the other research division - blast doors, added controls in both xenobiology access and RD's office. -2016-06-04: - Asanadas: - - bugfix: Nar-sie no longer causes FIX ME default turfs to display. - - tweak: Cult pylons now serve as decent light fixtures. - Cirra: - - bugfix: Cyborgs can no longer toggle their lights while dead. -2016-06-05: - Cirra: - - tweak: Adjusted the protolathe material cost of all modular computer components. -2016-06-07: - Cirra: - - tweak: Research grippers can now hold mech parts. - HarpyEagle: - - rscadd: Makes laser beams and muzzle flashes stand out in the dark. -2016-06-08: - Asanadas: - - rscadd: Placed cryo pods on the escape shuttle (3 for humans, 1 for robots). Take - care of SSD personnel! - Cirra: - - rscadd: IPCs can now use the *buzz, *beep and *ping emotes. - atlantiscze: - - rscadd: Added functioning tiny atmospherics to telecommunications. - - tweak: Various server rooms and telecommunications central compartment no longer - contain supercooled atmosphere. Instead they are cooled down to 10 celsius by - an air alarm, and have normal ventillation. This air alarm will trigger a warning - at 30C, and alarm at 40C, which is also the point at which machines begin taking - damage. -2016-06-09: - Aticius: - - rscdel: Removes resomi hallucinations due to loneliness. - HarpyEagle: - - tweak: Adjusted the storage size of various items. - - rscadd: 'Added a new storage item: large boxes.' - - tweak: Increased the shot capacity of energy crossbows to 8. - - tweak: Makes deadman switches hopefully more reliable. - - tweak: Inflatable barriers are studier and more resistant to puncture. - PsiOmegaDelta: - - tweak: A backpack is now required to diguise as a borg, along with the cardborg - parts. The chosen backpack decides which borg module you'll appear to be using. - Techhead: - - rscadd: 'New Random Event: Solar Storms. Similar to a radiation storm, but anywhere - inside the station is safe. Also boosts solar panel output significantly for - the duration.' - Yoshax: - - rscadd: Added towels to the loadout. These can be worn on the head, belt or outwear - slots. You can also whip people with them for a special message and sound! In - addition, using them in-hand will produce an emote where your towel yourself - off. - atlantiscze: - - tweak: The PDA messaging server now reboots automatically after a power outage. - This reboot takes about twenty seconds. - - tweak: Minor mapping changes to wiring and areas on the station. Brig has few - sub-areas to even out the load. Research Dock is now on the research subgrid. - Master grid has few extra power lines to make it a little bit more robust against - physical damage. -2016-06-12: - Ccomp5950: - - bugfix: Objects in bags and other containers (including your hands and pocket) - will now hear speach again. This impacts radios, explosive implants, and the - universal recorder. - HarpyEagle: - - tweak: Small mobs such as monkeys and resomi no longer gain the benefits of holding - large or bulky items in two hands. - SparklySheep: - - tweak: Move delay after clicking has been removed. - atlantiscze: - - tweak: Modular computer batteries are no longer fully charged when printed by - research. -2016-06-15: - Ccomp5950: - - rscadd: Turret controllers now alert admins and logs when enabled or disabled - as well as when set to stun or lethal. - HarpyEagle: - - soundadd: Adds new gunshot sounds for most bullet using guns. - - imageadd: Adds new bullet casing icons. All bullet casings now have distinct icon - states for spent and unspent casings. - - rscadd: Adds a new energy weapon, the x-ray laser carbine. The advanced energy - weapon crate now comes with two x-ray carbines and one x-ray pistol. - - bugfix: Fixed spear damage being set to a default value. - - tweak: Adjused spear damage, fixes steel spears now do somewhat less damage than - steel baseball bats, but are sharp. - - tweak: Steel fire axes now do somewhat less damage when wielded, unwieled damage - unaffected. - - tweak: Runtime can now become friends with anyone, regardless of their initial - job. - - bugfix: Beepsky and other securitrons now react quicker when attacked or their - perp tries to run, and move at closer to a running pace. Beepsky should no longer - be so easy to outrun. - PsiOmegaDelta: - - tweak: Vermin may now breed anywhere on the station but should also no longer - spawn inside areas such as the atmospheric tanks. -2016-06-17: - Asanadas: - - tweak: Changes to round-ending deathsquad and syndicate commando load-outs to - maximize speed and minimize drag. - - tweak: Upped the pulse rifle family's general capacity, for better asset protection. - HarpyEagle: - - bugfix: Fixed shuttles causing lighting to break and leave shadowy rectangles - behind. - - bugfix: Fixed shuttle corner appearance on the asteroid. - JerTheAce: - - rscadd: CentCom Fax, Admin Prayer, and CentCom emergency messages now prompt admins - with a pleasing sound effect. -2016-06-20: - PsiOmegaDelta: - - tweak: EMPs now randomly set suit sensors, with strength affecting the probability - of which mode is selected. - - rscadd: Because suit sensors can be affected externally a multitool can now be - used to (un)lock the controls, to for example allow re-adjusting prisoner uniforms. - - rscadd: Because suit sensors can be locked the antag uplink now offers tools and - services which are able to jam suit sensors in various ways. - - rscadd: Adds random events which will garble suit sensor data. -2016-06-22: - Asanadas: - - tweak: Wall mounted Nanomed dispensers no longer require access to use. - Ccomp5950: - - bugfix: IPCs and will no longer get genetic abilities from radstorms. Also Diona. - - bugfix: Lobby folks will no longer hear Hailers - TheWelp: - - rscadd: Adds support for projectile guns to jam. - - rscadd: Adds cheap/crappy gun variants. - Zuhayr: - - rscadd: Changed the vault nuke into a self-destruct terminal. -2016-06-24: - TheWelp: - - rscadd: Adds traders and a trader process. -2016-06-25: - JoeyJo0: - - rscadd: Fixed chargers not charging anything other than cells. -2016-06-28: - Cirra/: - - rscadd: Added a chemistry gripper for Crisis borgs. - HarpyEagle: - - rscadd: Adds applying pressure to body parts to reduce bleeding. With desired - body part selected, help-intent click yourself or get an aggressive grab, then - help-intent attack with the grab item. Each person should only be able to apply - pressure to one body part on one person at a time, so choose wisely. Applying - pressure will get blood on your hands. - - rscadd: Splints and hardsuits that support broken limbs will automatically apply - pressure. - - rscadd: Wounds that require treatment (e.g. bandage) to stop bleeding will be - bolded in the examine output. Wounds that will eventually stop bleeding on their - own are not bolded. - - tweak: Rigsuits now only support limbs when online. - Haswell: - - maptweak: Added NanoMed wall vendors in engineering, security, bridge, bar, arrivals - and escape hallways, replacing mapped in medkits and medical supplies. - - maptweak: Removed one security officer locker, added one cyborg recharging station - in its place. - - maptweak: Added lights in head of security's office. - - maptweak: Added supply ordering, supply control and arcade circuit boards to tech - storage. - - maptweak: Replaced out-of-place reinforced walls with normal walls. - PsiOmegaDelta: - - rscadd: MedHUD overlays now have more stages, both for 'normal' and critical stages - of injury, for improved quick-diagnosis. - TheWelp: - - rscadd: Adds support for map-specific jobs. - - rscadd: Adds torch specific jobs. - Zuhayr: - - rscadd: Ports/adapted several kitchen machines from Apollo Station. -2016-07-03: - Snapshot: - - rscadd: Added Neural Laces which are an intented optional config togglable replacement - to the cloning system. Neural laces are a mechanical backup of a character's - memories and personality that can be exchanged between bodies. - - rscadd: Added Neural Lace Surgery mechanic which works the same way as implant - surgery. - - rscadd: Added Neural Relacing Machine which will automate the procedure above - and can be constructed through R&D. - - tweak: Health Analyzers will show if a subject has a neural lace. - - rscadd: Neural laces can be implanted in someone without a neural lace with a - 30% chance of taking over their body - Zuhayr: - - rscadd: The health indicator on the player GUI will now show a more detailed breakdown - of damage to your body. - - rscadd: Added bioprinter to Genetics and prosthetic organ fab to Robotics. - redstryker: - - rscadd: Adds evening gloves to the loadout, with the ability to tweak their color. -2016-07-06: - Ccomp5950: - - bugfix: Cleanbots will no longer obsess over dirt under doors/lockers or other - areas they cannot access. - Hubblenaut: - - rscadd: Racks will automatically align their contents. - - tweak: Tables use an invisible 8x8 grid for item placement. - - tweak: Items spawning or placed in closets will not be pixelshifted. - - tweak: Certain items will now always be placed centered (This is mostly reserved - for items with sprites too big to be handy for grid placement). - - tweak: Flips rack icon to be consistent with other sprites. - - bugfix: Sets center_of_mass for tools and chemistry reagent containers. - PsiOmegaDelta: - - rscadd: Uplink services now all spawn a proper item which can be used to trigger - the relevant effect at a desired time, as opposed to it firing immediately. - - tweak: The jammer item has been moved into the 'Devices and Tools' category. - - tweak: The jammer services have been moved into the 'Services' category. - TheWelp: - - rscadd: Adds the item_worth var and get_worth proc to obj subtypes and mob/living -2016-07-08: - Asanadas: - - rscadd: Added two pairs of forensic gloves for detectives to use, ceasing their - self-incrimination. Replacements can be found in the cargo detective crates. - TheWelp: - - tweak: Rebalances leap to respect handcuffs, ability to walk, etc. - - tweak: Pariahs HP deficit has been removed (65->100), instead they are now more - vulnerable to all types of damage. - - rscadd: Adds missing hair color flag for regular Vox. Now you can have colorful - dyed Vox hair! Within reason. -2016-07-09: - HarpyEagle: - - rscadd: Severe enough burn damage now causes one-time blood loss due to blistering - and body fluid cook-off. - - rscadd: Armor that provides 'bio' protection will now protect against the effects - of slime feeding. Slimes can still glomp you, however, and are still dangerous - even if you are wearing biohazard suits. -2016-07-12: - atlantiscze: - - tweak: Random event probabilities have been changed a bit. This is mostly noticeable - with electrical storms, which should be less common now. - - tweak: Electrical storm now shuts down APCs for longer duration which is controlled - by event severity. APCs with critical flag are now affected too, but are only - shut down for a short time in comparison to others. - - tweak: EMPs are no longer one-hit kills for AIs - APCs with critical flag take - reduced damage from EMPs, and AI's power restoration routine now resets the - APC that may have been EMPed. - - tweak: AI's power usage has been overhauled. Under the hood changes should improve - reliability a bit and take more scenarios in consideration. The power restoration - routine now provides better feedback to the AI if it fails, such as, whether - the APC is broken or only discharged, etc. - - rscadd: AI now has a Shutdown verb that can be used to reduce it's power usage - five times. This disables AI's control, cameras, and most communications as - if it was without power. This verb acts as a toggle, so it can be used again - to turn yourself back on. - - rscadd: AI now has Toggle Power Override verb that can be used to disable power - saving mode when it loses APC power. This results in much faster discharge of - internal capacitor, but allows you to operate as if you were powered. Can be - toggled at any time. -2016-07-13: - HarpyEagle: - - tweak: Voidsuits and cyber suits are now more shock resistant, now roughly between - hardsuits and thick clothing. -2016-07-14: - atlantiscze: - - tweak: Shield generator configuration has been tweaked. Shield generators upkeep - power is reduced considerably (stationwide shield is approx. 1.1MW at full strength). - Shields still use a lot of power when regenerating. - - tweak: Shield capacitors now act as actual capacitors. Their power storage is - 2 GJ, and maximal input 4MW, as opposed to 8MJ/400kW it was now. - - tweak: Shield generator+capacitor UI now displays in kilowatts and megawatts instead - of watts where applicable. -2016-07-17: - TheWelp: - - tweak: Reduces fireloss cost of casting Dyrnwyn (30->10) - - tweak: Reduces investment time (30 minutes -> 15) - - tweak: Entangle is now a hand-spell. - - rscadd: Humans can now use the *vomit emote, which causes them to vomit. -2016-07-18: - PsiOmegaDelta: - - rscadd: The antag uplink now offers a shield disrupter in 'Devices and Tools' - category. Handy for when that hull shield gets in your way. - - rscadd: Once an emergency response team has been successfully dispatched, as opposed - to simply requested, the emergency shuttle cannot be called for 30 minutes. -2016-07-22: - Daranz: - - bugfix: FixOVeins can now be used for attaching robotic organs (such as neural - laces) in organic patients. Follow the same procedure as with normal organ transplant. - Rymdmannen: - - rscadd: Added department specific rubber stamps for cargo and warden. - - maptweak: Replaced 'small rubber stamp' with corresponding new ones in cargo area - and warden's office. - - maptweak: Placed a 'DENIED' stamp in captain's office. - - spellcheck: Renamed ''quartermaster's stamp'' to ''quartermaster's rubber stamp''. - Snapshot: - - rscadd: Moved airlock electronics, brig doors, portable canisters, and cargo computers - over to TGUI - - tweak: Cargo ordering computers have been completely reworked. Both the supply - and ordering computer have been merged into one which can be logged into or - out of by a crew member with cargo access. The computers will allow only one - computer to be logged in as a register at a time and orders cannot be placed - without a register active. - - tweak: The cargo ordering system has been tweaked to allow requests even when - there are not enough points available so that cargo can queue items into their - cart at their discretion. Items moved to the cart can be demoted back to requests - as well. - - rscadd: The cargo computer now allows crew members to print a receipt of their - requests for their onw use. - - soundadd: Added sounds for printing from the cargo computer for more ambient sounds. - - experiment: The cargo computer will quietly beep whenever a successful ui button - press is completed. This is an experimental test to see if more ambience can - be added without becoming too much of an annoyance. - atlantiscze: - - rscadd: Adds maintenance braces. These can be printed by research and used to - lock down an airlock. Braces can be removed with paired keycard or maintenance - jack tool (also available from research). Braces prevent the airlock from opening - via any means, and absorb a lot of damage until they break off, protecting the - airlock. -2016-07-23: - PsiOmegaDelta: - - tweak: Some antag uplink weapons now come with ammunition (and a container to - hold them) and their price and description has been updated accordingly. - - tweak: Buying random items from the antag uplink will no longer give you weapons - without relevant ammunition, or ammunition for weapons you may not have. -2016-07-25: - Superbee29: - - rscadd: Ghosts can now see the power in a cable when examining it. -2016-07-29: - Raptor1628: - - tweak: Replaced Tactical Armor sprites and stats. Overall less protective. - - rscadd: Adds new gas mask sprite. - - tweak: Adjusted helmet and armor values. Helmets match their armors a bit more, - but are usually more protective. - - tweak: Adjusts armored vests for the torch and splits ballistic/ablative armor - into vest and full-body versions. - atlantiscze: - - tweak: Add Antagonist vote can no longer be freely called by players. It can still - be called by admins, or as an alternative to crew transfer. - - tweak: Add Antagonist is no longer an alternative to crew transfer during Extended - gamemode. The intention is to keep that gamemode antagonist-free, as it was - originally intended. - - rscadd: Players in the lobby will now see which antagonist types were added to - the game. This is displayed below the gamemode's name in the Lobby tab. -2016-08-01: - HarpyEagle: - - rscadd: Emagged and traitor synths can no longer be locked down, except by physically - cutting the lockdown wire (merely pulsing will not work). - TheWelp: - - rscadd: Certain races can now swallow objects whole by using the disarm intent - and aiming at their mouth. - - rscadd: Vomitting now shoves out all the things in your stomach. - - rscadd: Adds support for projectile vomitting being an ability of a species. -2016-08-02: - Haswell: - - rscadd: Modules installed within a hardsuit will now be listed when examining - the hardsuit control module while being held or worn, if the maintenance panel - is open. - Minijar: - - rscadd: Upgrades anomaly isolation to be able to contain pretty much any dangerous - anomalies with boroscillate windows and blast doors. - PsiOmegaDelta: - - rscadd: Ion storms now also affect unslaved borgs, but not drones. - Zuhayr: - - rscadd: Prevented xenomorphs from taking shrapnel or breaking limbs. Buffed non-queen - xeno weed health regen. Remember to rest to not take a heal penalty. - - rscadd: Prevented weeds from entangling species with the NO_SLIP flag. -2016-08-06: - Zuhayr: - - rscadd: Added status display icons for green, blue and delta alerts. - - rscadd: Status displays now have coloured lights for alert icons. - Zuhayr, GinjaNinja32, and Snapshot: - - rscadd: Implemented full body prosthetics. Full Body prosthetics (FBPs) allow - replacement of the entire body with cyborg components and replacement of internal - organs with synethic or assisted counterparts. Players can create a FBP character - by selecting full body in the limbs section of character preferences. - - rscadd: FBPs gain the benefits of a stronger body and no longer requiring breathing, - but are prone to overheating much like IPCs and can take pressure damage in - space. If you play an FBP, be sure to wear a suit and cooler! - - rscadd: IPC monitor screens are now a seperate object in the loadout menu. IPCs - can select a variety of other heads from other prosthetic manufacturing companies - to change their head and body appearance. - - imageadd: IPC monitor screens have an object sprite that's synced to their mob - sprite. - - tweak: Rebalanced IPC brute and burn modifiers due to the introduction of FBPs. - These settings may be tweaked again in the future after gameplay has been conducted. -2016-08-07: - Asanadas: - - bugfix: 'Brings an end to the deadly feud between two of the Exodus''s mascots: - Pun pun, and Officer Beepsky.' -2016-08-08: - Haswell: - - tweak: Emitters can now be locked using IDs with engine room access while it's - on or off. - Techhead: - - rscadd: Ghosts can flicker lights when the round is spooky enough. -2016-08-11: - Haswell: - - tweak: Engi-Vend and Robco Tool Maker machines can now be used by atmospheric - technicians. -2016-08-15: - Asanadas: - - rscadd: Neural laces can now be destructed and created in a proper research lab. - PsiOmegaDelta: - - rscadd: Invented supermatter grenades and made them available to certain sets - of antags. - - rscadd: The antag uplink now allows you to also buy x1 grenades, in addition to - the x5 sets, with some markup. - TheWelp: - - rscadd: Adds ability for merchants to fast buy via cash using a banking system. - - rscadd: Adds ability for players to sell things to merchants. They will only take - things they like. -2016-08-18: - Haswell: - - tweak: The autopilot on the escape shuttle can no longer be overridden during - crew transfers while on blue alert or lower. It can only be overridden during - an evacuation, or during an alert level higher than blue. - Karolis2011: - - rscadd: Added whole map capture tool, only accessable by admins. -2016-08-22: - Asanadas: - - rscadd: The Exodus robotics lab has a newly installed Robotech deluxe (we found - it out in the shed). Also, a new light switch. -2016-08-26: - Asanadas: - - rscadd: Dug out an old engineering vending machine and added it to the engineering - workshop. - Soadreqm: - - rscadd: Made tape recorders use removable 10-minute cassettes instead of 60-minute - internal storage. - TheWelp: - - rscadd: Adds four new traders, a robot trader, a pet trader, a replica trader, - and a prank trader. - - rscadd: Adds unique items (and a bot) for the traders to sell. - - rscadd: Adds missing item worth values to the list. - - tweak: Unique NPCs now stay around for twice as long. - - tweak: Tweaks Hostile mob AI, so that if they have no faction at all, they will - target nobody. - - tweak: Spawner grenade can now set variables (using a list) upon spawning whatever - it spawns. -2016-08-28: - PsiOmegaDelta: - - tweak: Telecrystal amount increased from 25 too 100 with uplink costs adjusted - accordingly, all to allow even more price differentiation. - - tweak: A five pack of grenades is now 20% cheaper than buying them one at a time. - atlantiscze: - - tweak: Power cell no longer use magical charge units. Instead they are rated in - WattHours. For example, a cell with rating of 1000 will be capable of providing - 1000 watts for one hour. (or 2000 watts for half a hour, etc.) - - tweak: In general this means that a power cell with rating of 1000 will hold MUCH - more energy than it held before. To balance this out, power cell capacities - have been reduced considerably. When these two changes add up the cells last - for approximately same time as they used to. - - tweak: As part of this change, higher grade power cells have became a bit more - rare. Research can still fabricate them in bulk, but they are much rarer from - random spawns, and no longer available from vending machines. Vending machines - provide standard cells instead. EngiVend can be hacked to provide few high capacity - ones. - - tweak: Vending machines no longer shoot objects at people when malfunctioning. - They merely shudder and dump the item on the ground. This should make the random - event a little bit less annoying. - - tweak: Space heater's default temperature setting is now 20C (changed from 50C), - which is the default station temperature. It can still be changed via the UI - when the panel is open. -2016-08-29: - Zuhayr: - - rscadd: Added /vg/ direct-action ventcrawling. You will now crawl through the - actual pipe network, a step at a time. Have fun. -2016-08-30: - Haswell: - - rscdel: Atmospheric technician is now unavailable for general play. - - rscadd: Alt title 'Atmospheric Technician' is now added to engineers. - - tweak: Engineers now have all the accesses atmospheric technicians previously - held. - - tweak: Tweaked job selection screen to properly indicate which jobs aren't available - to play as. - Kelenius: - - tweak: Cultists don't need to research words anymore. - - tweak: Astral journey's damage over time lowered to sane levels. - - tweak: Changeling revive, when the timer is up, will now give you a verb that - revives you, allowing you to choose when to get up, instead of doing it immediately. - - tweak: Changelings will always get DNA, species, and languages together, be it - via absorbtion, DNA sting, or hive channel. - - tweak: Changeling transform and change species was merged. - - tweak: Changelings no longer display gender in changeling chat. -2016-09-02: - Techhead: - - rscadd: Medical splints can now also be applied to hands and feet (in addition - to arms and legs). - - rscadd: For those that miss the old functionality, ghetto splints have been added. - These can be crafted with a roll of tape and a metal rod and can only splint - arms and legs. - atlantiscze: - - tweak: Converts few other things over to work with the recent CELLRATE change. - This fixes various issues where battery life of some things (drills, etc.) was - very short, while some other things had power cells with very large capacities. - - tweak: Hardsuits and Mechas now use energy in joules rather than Wh (this fixes - Ninja suit, among others). Various exosuit tools now have rebalanced power usage. - Energy based exosuit weapons use energy on per-shot basis, ballistic weapons - use single massive spike when fabricating a new magazine. - - tweak: Minor power-related changes to exosuit modules. Energy cost of some offensive - modules increased a bit. - - tweak: Added short cooldown for teleporter module to prevent spamming. - - tweak: Added power usage to various industrial/science modules (anomaly scanner, - various drills, etc.). - - tweak: Increased mounted RCD power usage by a lot (matter fabrication is very - power demanding process). - - tweak: Powersink module is limited to 120kW transfer rate, and is slower (30kW) - when used on APCs with enabled interface lock. Furthermore, when draining from - APC it first tries to take energy from the grid, before resorting to taking - it from the cell. - - bugfix: APCs drained by a ninja no longer get stuck on 0% charge, and instead - recharge themselves as usual. - - rscadd: Repair capability of upgraded cyborg rechargers now also works on IPCs - and FBPs. - - tweak: If the cyborg recharger is upgraded enough, it will be capable of rebooting - (and eventually repairing) destroyed modules, for some extra power. -2016-09-03: - Haswell: - - rscadd: Added a fashion vending machine in the locker room for snowflake loadout - items. - - rscadd: Added more SMES coils and circuitboard to supply packs. - - tweak: Adjusted price of SMES coil. - Superbee29: - - bugfix: Changeling transformation (of itself and others via sting) no longer causes - organ rejection. - - bugfix: IPCs can no longer be stung by changelings. -2016-09-07: - Chinsky: - - rscadd: Added a hawaii shirt to loadout accessories. Can be attached to clothing - like suit jackets etc. Can also be found in mixed wardrobes. - Cirra: - - rscadd: Spiderlings now have a unique sprite specific to the type of giant spider - they will become. - Kelenius: - - rscadd: Ninjas now have access to a PDA that has an empty uplink (for exploitable - information). -2016-09-09: - Daranz: - - tweak: If you crack open an amputated limb and later reattach it, you will now - have to cauterize it after reattachment. - Haswell: - - tweak: Reduced wallet capacity, added more items that can fit in wallets. -2016-09-10: - Cirra: - - rscadd: Resomi now process reagents twice as fast. - - tweak: Moved all Resomi organs to the chest, apart from the brain and eyes. - Kelenius: - - rscadd: Xenoarcheology code has been partially redone. - - tweak: Pick set will now sort the picks inside it. - - tweak: Removed useless random numbers from GPS coordinates in various places. - I'm sure we have not lost the arcane knowledge of rounding 500 years into the - future. - - tweak: Picks renamed to show their excavation depths. - - tweak: Suspension generator's power use lowered. - - tweak: Suspension generator's different field types removed. By the way, remember - that they can suspend any item and even mobs. - - tweak: Archeology belts and pick sets can now hold small pickaxes. Pick sets still - only have 7 slots. Brushes fit on your ears. - - tweak: Empty rock drop rate reduced. - - tweak: Empty rock renamed from 'rock' to 'small rock' so you can tell if you are - clicking on a turf or an item when hovering over it. - - tweak: Empty boulder spawn rate reduced. - - tweak: Tape measuring is a bit faster. - - tweak: Scanner now shows the lowest and the highest depth of the find (highest - is depth + clearance) for easier calculations. Ideally, you need to hit exactly - the lowest spot. Less ideally, hit anywhere between higest and lowest. Hit below - lowest and you have a chance to break the find. - - tweak: You can now use a brush to clear strange rocks. Welder uses less fuel for - that than before. - - tweak: Anomaly analyser's report made a bit easier to read. - - tweak: Anomaly locater will now also locate normal finds. - - bugfix: Gas masks will now correctly spawn as archeological finds. - - bugfix: Digsites will now properly contain several (4-12) turfs in a 5x5 radius. - Be careful when digging near your finds. - - bugfix: Suspension generator will now correctly turn off (qdel issue). - - bugfix: Archeology overlays won't disappear when the icon is updated (e.g. when - mining next to it). - - bugfix: Archeology overlays won't overlap each other and will properly disappear - when you mine out a find. - - bugfix: Some spawning oddities were fixed. - - bugfix: Checks for whether you get a strange rock or a clean item were fixed (previously - it always gave you clean item where it should have been rolling a random number). - - bugfix: Can no longer get rid of any item by putting it into evidence bag and - bag into core sampler. - - bugfix: CO2 generator effect now has a type. - - bugfix: Phoron generator effect will now always generate phoron, not sometimes - phoron and sometimes oxygen. - - tweak: You can now lit smokables with cigarettes and cigars. - - tweak: You can now explode welder tanks with all flame sources (cigarettes, lighters, - candles, igniters, etc). - PsiOmegaDelta: - - tweak: The impaired Resomi vision is now represented by the oxygen overlay rather - than the welding overlay. - - tweak: Vision impairment from wearing a welding mask now stacks with nearsightedness - due to now being two separate effects. - - tweak: Species and individual specific nearsightedness now stacks, i.e. a nearsighted - Resomi won't be aided at all to the same degree by the standard prescription - glasses as other species would be. - - tweak: Glasses can now have varying degrees of prescription. -2016-09-11: - PsiOmegaDelta: - - rscadd: Equipment that doesn't check a specific id card for access now checks - the collective access of all id cards in both hands and the id slot. Among other - things such equipment includes doors. -2016-09-14: - Cirra: - - bugfix: Nurse spiders should now correctly have a chance to implant eggs on attack. - Zuhayr: - - tweak: Ninja cloak now only renders you invisible to the player; right-click will - show you, and your inhands will still render. -2016-09-15: - Cirra: - - rscadd: Service grippers can now hold straws and sticks. - Haswell: - - rscadd: Added coin mint to the mining outpost. - - rscadd: Borosilicate (phoron) glass can now be made with the mineral processor. - atlantiscze: - - rscadd: Created new AI restorer program, by default available on research consoles. - Also added a new hardware piece that acts as connection between intellicard - and a computer (laptop and console only). The new program allows AI restoration, - as well as simple law modifications. It can also be used to purge malfunctioning - AI's laws correctly. This program can only work on intellicarded AIs, that are - placed in the computer itself. The program can be run/used by anyone, but requires - head of staff level access to download from NTNet. - - rscdel: Removed old AI integrity restorer console -2016-09-16: - atlantiscze: - - rscadd: Added camera monitoring program to modular computers, that can be run - on consoles, laptops and tablets. Most mapped in consoles come with this program - preinstalled. - - tweak: Due to removal of old consoles (telescreens were part of these consoles), - entertainment monitors were replaced with civilian modular console where applicable. - This console can be used to access the entertainment channels. - - rscdel: Removed old camera consoles, including circuit boards and other related - things. -2016-09-17: - Chinsky: - - rscadd: Some suit jackets and hawaii shirts can be toggled between buttoned/open - states with a verb. - Zuhayr: - - rscadd: Added a reset slot button to chargen. -2016-09-18: - PsiOmegaDelta: - - rscadd: All staff should now be able to access the Secrets menu. Each category - handles its own permission checks.. - - rscadd: Administrators and moderators can now review admin PMs and attack logs - from the Secrets menu, see the new Investigation category. -2016-09-19: - PsiOmegaDelta: - - rscadd: Ghosts now have a 'Teleport to Coordinate' verb. -2016-09-21: - Chinsky: - - rscadd: Ghosts AND AI eyes can travel zlevels again with Move Upwards/Down verbs. - - rscadd: Humans can too, with either working jetpack or wearing magboots and near - a wall (climbing). Don't try in gravity-working areas though, you'll still drop. - Haswell: - - maptweak: Readded missing blast shutters on mercenary shuttle and Skipjack. - - maptweak: Removed random steel floor tiles. - - maptweak: Added random coin spawns. - PsiOmegaDelta: - - maptweak: There are now more rechargers placed around the station. - - maptweak: Added fire fighting equipment in the library and port research maintenance - areas. - - maptweak: The engineering washroom now has two entrances. - atlantiscze: - - tweak: Vastly increases amount of water held in fire extinguishers and water tanks. -2016-09-23: - PsiOmegaDelta: - - rscadd: The antag uplink now offers energy guns in the 'Highly Visible and Dangerous - Weapons' category. - Szunti: - - bugfix: Acids, plant-b-gone etc. kill weeds instead of growing them. Sugar grows - them instead of killing. -2016-09-25: - Chinsky: - - rscadd: Can now pick color of labcoat in loadout menu, replacing separate preset - colored coats. My condolences to those who had preset ones. - Haswell: - - maptweak: Added lots of random spawns in maintenance, replacing most old mapped - in items. -2016-09-26: - atlantiscze: - - tweak: Malfunctioning AI ability Basic Encryption Hack now lists station APCs - first. Off-station APCs (that do not contribute to CPU generation) are appended - to the bottom of the list. - - rscdel: Airlock brace keycards have been removed. - - tweak: Airlock braces when held inhand can be accessed and configured as an airlock - electronics circuit board. Instead of brace keycards they can now be unlocked - by swiping an ID with configured access (or by using maintenance jack). Configuring - the brace has no access requirement, but it can't be configured when installed - on an airlock. -2016-09-30: - Kasuobes: - - rscdel: Removed IR emitters until they are fixed and don't kill servers. -2016-10-03: - Asanadas: - - bugfix: In-game record editing (security and medical) will now respect the same - character limits as it does in the character-setup panel. No more accidentally - massacring those long records! - Haswell: - - rscadd: Added station date to status tab. -2016-10-06: - Chinsky: - - rscadd: Can now use chopped off arms/hands to leave fingerprints on things. Keep - it in your active hand, and its fingerpints will be used. - Datraen: - - tweak: Skrell are now more resistant to various chemicals, more susceptible to - pepperspray. - Haswell: - - tweak: Drone laws have been revised to exclude non-interaction clauses to promote - RP, but retains non-interference intent. Treat and respect them as actual players. - - tweak: Reworded corporate law skill to cover broader areas. Includes SolGov law - and general legal knowledge. - Inforsaken: - - rscadd: Radio Distortion is now linear and uses more than just the * character. - PsiOmegaDelta: - - tweak: If playing a hidden game mode, i.e. Secret, staff now see the actual game - mode in the Lobby. - Raptor1628: - - rscadd: Added a lot of items to the random maintenance spawns. - - tweak: Reduces metagame potential in the money briefcase description. -2016-10-08: - Ferracio: - - rscadd: Name and species can now be selected for newly-constructed FBPs. - - tweak: Removed 'system instability' readout from robot analyzer due to the targets - being immune to 'system instability'. - - rscadd: Added ability to create full-body prosthetics by adding a robot head to - a robot torso. - - tweak: Robotic heads and torsos can now be manufactured with brands. - Konater: - - imageadd: Added some hairstyles for Resomii that n00b created. - TheGreyWolf: - - rscadd: Added Sign language, which can be selected from character setup. - blazerules: - - imageadd: Added a new Emo hair style, one that doesn't cover the eyes. -2016-10-10: - Levyafan: - - rscadd: Added research tape to excavation closets and xenoarchaeology lockers. - - rscadd: Added optical meson scanners to miner lockers. - - rscdel: Removes optical material scanners from miner lockers. Those were useless - anyway. - - maptweak: Mapped in a second suspension generator, some racks, and a rag to the - research outpost. - - maptweak: Mapped in a soft drinks vendomat and a coffee vendomat to the mining - outpost. - PsiOmegaDelta: - - tweak: Objects are now layered using both planes and layers. Visual layering issues - are expected, please report them except if you're running a client older than - 510 in which case you have to update first. - - tweak: The 'Show Server Revision' verb should now be more copy-paste friendly, - in terms of adding the info to issue tickets, and now also includes the major - client version. -2016-10-13: - Hugo14453: - - rscadd: Added golden soap. - Lorwp: - - maptweak: Fixed Firing Range Camera from being named 'Medical Station'. Changed - Cameras in firing range to 'East' and 'West' Respectively -2016-10-16: - Asanadas: - - rscadd: The Mental Health office has been slightly renovated! Psychiatrists and - the other jobs who reside in the Mental Health office of the Medical Bay will - find more pills readily available in their closet, and a few tidier paperwork - items within easier reach. - - maptweak: The Head of Security and Warden lockers now spawn with a generic NT - helmet. - - tweak: The Head of Security's dermal implant now has the same armor values as - a generic NT helmet. - LorenLuke: - - rscadd: Added a toggle to the ninja's self-destruct. Default starting is 'off'. - - tweak: Adds a delay and visible messages (and now a blinking effect!) after the - self destruct is activated. - PsiOmegaDelta: - - rscadd: Staff with sufficient rights can now edit global variables using the 'View - Global Variables' verb. - TheGreyWolf: - - rscadd: Added the tacticool turtleneck to the custom loadout. -2016-10-18: - Mo_Bros: - - imageadd: Adds new icon for compressed gas warning signs. -2016-10-21: - Broseph Stylin: - - rscadd: Added HUD aviators to the loadout. They're restricted to security, and - can toggle between HUD and flash protection modes, but won't offer both at once. - Chinsky: - - rscadd: Added floating camera thing for Journalists, in the library office nook. - It acts like a portable security camera on Thunderdome network. Can also send - audio on Entertainment radio channel. -2016-10-23: - Broseph Stylin: - - rscadd: 'Added a few new items to the loadout: Various ties, a black vest, stethoscope - (medical only), a black suit jacket, three hazard vests, and a cigar case.' - Chinsky: - - rscadd: Added hotkeys for target zone selection. Ctrl+Numpad[number] or just Numpad[number] - in hotkey mode. Make sure to have NumLock enabled. Numpad8 is head-eyes-mouth - (it cycles through those), 4-5-6 are right arm/hand-chest-left arm/hand (cycles - again), 1-2-3 are right leg/foot-groin-left leg/foot(you know the drill) - Ithalan: - - bugfix: Added missing anomaly scanner pad to research outpost's cell A. - - maptweak: Added a health analyzer to the research outpost lab so researcher can - monitor their test subject monkeys. - - maptweak: Removed an oddly placed lightbulb on the exterior surface near the research - outpost. -2016-10-29: - Lorwp: - - maptweak: Added Emergency Wall Mounted Oxygen Tanks to Most suitable External - Airlocks. You can breathe from them using a Mask Attached to them. - Mark9013100: - - rscadd: Gives the Science, Night Vision, Tactical, and Material Goggles action - buttons. -2016-11-01: - Broseph Stylin: - - rscadd: Prescription medical and security HUDs have been added to the loadout. - PsiOmegaDelta: - - tweak: Mercenaries now begin with proper boots, gloves, and belts. -2016-11-02: - Broseph Stylin: - - rscadd: Added a few dresses to the loadout. - Mark9013100: - - rscadd: Adds black softcaps. Can be found in black wardrobes and custom loadout. -2016-11-03: - Broseph Stylin: - - tweak: Most loadout items with multiple variants can now be found under lists - in their respective categories. This change WILL mess up your saved loadouts, - so be sure to redo them. - Siegdermaus: - - imageadd: Adds a new icon for turret and blast area caution signs. -2016-11-04: - ColaFiend: - - rscadd: Added new welding masks available in the gear loadout for engineers and - roboticists. -2016-11-06: - Asanadas: - - tweak: Added a moderate delay to the opening and closing of robotic maintenance - hatches. No more quickscope-cellsniping. - - bugfix: Can no longer run away from a robot while removing its MMI and allow the - process to succeed. - - bugfix: Fixed a one-pixel mistake in one of the robotic maintenance step images. - Broseph Stylin: - - tweak: Most loadout items with multiple variants can now be found under lists - in their respective categories. This change WILL mess up your saved loadouts, - so be sure to redo them. - Datraen: - - tweak: Skrell now have mild darksight. - - tweak: Skrell now prefer slightly warmer temperatures. -2016-11-08: - atlantiscze: - - tweak: Blobs are now considerably more resistant to energetic weapons, be it handheld - lasers, energy guns, or even emitters. An emitter is still useful to suppress - the blob a bit, but one emitter shouldn't be capable of outright killing the - blob. - - rscadd: Blob has a relatively small chance to grow secondary cores. These cores - are considerably weaker, have lower health, but still help spread the blob a - bit more. - - tweak: Emitter power usage increased (30kW to 100kW). While it is still possible - to run one with PACMAN, you have to keep it on overload. - - tweak: Reinforced walls are now considerably more resistant against projectiles - of all kinds, be it emitters, handheld weaponry, or anything else. Regular walls - are unaffected. An emitter is still useful if you need to burn through one, - but expect to wait - it needs over fifty pulses for a plasteel reinforced wall. - - tweak: Details on the above. Reinforcement is calculated from the material that - is used to reinforce the girders when building the wall. Weak materials such - as wood have 0% reduction in taken damage. Most basic materials have 50% or - so. Steel is decent material with 80% reduction. Plasteel is very good with - 90%, and titanium is the best with approx. 92% reduction (though it has lower - overall health) - - rscdel: Removed bubble shield generators, hull shield generators and shield capacitors. - Also removed shield disrupter. - - rscadd: Added a replacement advanced shield generator, that has a combined function - of a capacitor, and both shield generators (hull shielding is toggleable). This - shield generator must be built and once constructed is immobile (but can be - deconstructed again). These generators are fully configurable, have better hull - shielding that doesn't block shuttles, mass drivers and others, and have different - energy system. Damage will drain the shield's energy directly. - - rscadd: Added Shield Diffusers. Two variants exist - floor mounted and handheld. - The handheld variant can be purchased from traitor uplink, and runs on an internal - cell. The floor mounted variant layers under floor tiles and is APC powered. - These diffusers dissipate shields in adjacent tiles (+ shaped pattern). The - generator can be set to try to counter these, in which case each diffuser causes - major EM strain on the shield. - - maptweak: Added two shield generator circuit boards and two shield diffuser circuit - boards into tech storage. -2016-11-09: - Irrationalist: - - bugfix: Unathi and Tajara can now spawn and show preview with gloves included - in outfit of [HIGH] selected job - - tweak: '/obj/item/clothing/gloves has new proc: cut_fingertops - for easier adminbus' - atlantiscze: - - rscdel: It is no longer possible to ventcrawl through scrubbers. -2016-11-14: - Datraen: - - tweak: Removes a large portion of camera bloat. - TheGreyWolf: - - rscadd: Adds sweaters in all the rainbow's colors and more to the custom loadout. - Zuhayr: - - rscadd: Restored scrubber crawling, made them weldable. -2016-11-16: - Legius: - - bugfix: Made the holdout pistol not turn invisible when unloaded with a silencer - attached. -2016-11-17: - Legius: - - maptweak: Added a airlock access button to the exterior of the Dormitory airlock. - - maptweak: Moved the meter covering the second radiator pump so it no longer covers - the pump. -2016-11-18: - Datraen: - - tweak: Global announcer now has access to engineering channel. - - tweak: Supermatter now uses the global announcer. - - bugfix: Supermatter now sends out integrity alerts. - Legius: - - bugfix: The cryotubes on the shuttle and at centcomm are no longer death traps. -2016-11-22: - Broseph Stylin: - - tweak: Waistcoats and suspenders are now accessories and no longer suit items. - Their loadout entries have been changed as well. - PsiOmegaDelta: - - rscadd: There is now a character preference, Ghost Follow Links, to toggle between - short and long follow links. - atlantiscze: - - rscadd: The AI can now speak most languages that are available to station races. -2016-11-28: - Finalsong1: - - tweak: Changes the Vat-Grown Human economic modifier from 5 to 10. - Haswell: - - maptweak: Adjusted armory layout and inventory. - Irrationalist: - - bugfix: Fixed stun-batons being unuseable by synthetics due to hitcost increasing - each (de)activation - - bugfix: Fixed stun-batons not properly updating their icons - Kelenius: - - bugfix: Ghosts can now hear whispers. - - bugfix: Ghosts can now hear people who are EVA. - Runa Dacino: - - rscadd: Made Resomi security smocks available for detectives. - TheGreyWolf: - - rscadd: Added department ponchos to the custom loadout. - - rscadd: Added department and normal winter coats to the custom loadout. - - rscadd: Added a colorable scarf to the custom loadout. - - rscadd: Added lockets to the custom loadout. - - rscadd: added the formal outfit to the custom loadout. -2016-11-30: - Finalsong1: - - tweak: Changed the armor values for specialist vests, reinforcing that they're - designed to be used against that specific damage type. - - rscadd: Added the ability to order a practice laser carbine crate from cargo. - LorenLuke: - - rscdel: Got rid of the awful singletank code. - - rscadd: 'Created new singletank construction and disassembly code (see below): - Single Tank devices must be wired before having assemblies attached.' - - tweak: Single tank devices are single use only with their igniters. The igniters - create a small bit of heat to get fuel to its burn temperature (126C). - - tweak: Added relief valve to air tanks. They now trigger leak logic at over 173C - or leak pressure. Can be welded shut to prevent leakage. - - tweak: Single Tank devices must be wired before having assemblies attached. - - tweak: Air from rupturing/exploding tanks now merged into environment instead - of deleted. - - tweak: Explosion radii based on pressure, gas amount, and volume of rupturing - vessel. - - bugfix: Assemblies can now be used when attached. - PsiOmegaDelta: - - rscadd: 'New Ion law: Lawbound Synths may now have to communicate with the crew - in a random language other than Galactic Common.' - Zuhayr: - - tweak: The gibber is now called a meat grinder, since that's what it is. - - tweak: Eating a human organ or limb is now done in the exact same manner as any - other food. If you try to eat a limb, though, it will not be usable in a transplant, - for obvious reasons. - - tweak: Human organs now fit into the reagent grinder. -2016-12-03: - ForFoxSake: - - bugfix: Fixed a possible href exploit allowing any living player to speak any - language. - - bugfix: Organic beings can no longer speak Encoded Audio Language, although they - can still understand it just fine. - - tweak: Positronic brains can now speak Encoded Audio Language. - - tweak: Station manufactured Full Body Prosthetics can now speak Encoded Audio - Language. - Haswell: - - tweak: Renamed advanced voidsuit to advanced engineering hardsuit. - - tweak: Advanced engineering hardsuit now comes with in-built magboots and insulated - gauntlets that also fit Tajara and Unathi. - - tweak: Added more things that fit on the EVA hardsuit and advanced engineering - hardsuit's chestpiece. - Lorwp: - - tweak: Replaced Shoes in Engineering and Atmospherics Wardrobes with Workboots - Meyar: - - rscadd: The loadout limit has been upped to 10 from 5. - TheGreyWolf: - - rscadd: Added ability for cargo to order a firefighter closet under the engineering - tab. - - rscadd: Added Siik'Tajr as a native Tajaran sign language. - - rscadd: Towels are now in the athletic lockers in the fitness room by the holodeck. - Zuhayr: - - tweak: Ported Prometheans from Polaris, replacing slime people. - - tweak: Added water reagent interactions for Prometheans equivalent to acid. -2016-12-05: - FTangSteve: - - wip: RootSpeak is now split into a local and a global variant. For now the global - acts as a hivemind. - - bugfix: Diona nymphs now can only speak the local variant of rootspeak - Nero-07: - - rscadd: Changed the default option from 'Get random job' to 'Return to lobby' - if your preferred job is already taken. Should only affect new characters - Runa-Dacino: - - rscadd: Added ability to build press cameras to roboticist - atlantiscze: - - rscadd: 'Adds a new modular computer program: Classic Arcade, which is a computer - variant of the arcade machine, minus the prizes.' -2016-12-08: - Chinsky: - - tweak: Mecha sleepers do not KO victimes anymore. - - tweak: You can leave mecha sleepers like normal ones, by walking out. - Cirra: - - rscadd: Lawed synthetics (Borgs + AI) can now understand but not speak sign language. - Datraen: - - tweak: False walls no longer vent up and down. - FTangSteve: - - bugfix: Creatures without eyes can no longer be flashed. - Finalsong1: - - rscadd: Added a few more leather items to the botany biogenerator. - - rscadd: Replaces mead's sugar requirement with honey. Adds the ability to make - rum with mead's old recipe. - - rscadd: Surgical aprons are now available from the loadout. - Haswell: - - rscadd: Added a chemical hair remover. Also works on feathers, horns, anything - keratin-based. - Kel: - - tweak: Blobs can't spawn new blob cores within 2 tiles of an existing one. - - tweak: Secondary blob cores now look different. - - tweak: Removes message for attacking the blob to cut down on spam. - - tweak: Adds attack animation for attacking the blob. - Kelenius: - - tweak: Slimes will always imprint on those who feed them to avoid long streaks - of bad luck. - - tweak: 'RNG removed from the feeding: slimes now always get 20 nutrition per 5 - clone damage.' - - tweak: Slime nutrition drain reduced. - - tweak: Added a small delay between the slime latch and the first damage dealt. - - tweak: Changed how slimes react to damage. Slimes that are attacked with something - will sometimes be shaken off their victims (chance is force * 5 - anything with - force or 20 or above is a guaranteed shake-off). - - tweak: Disarming a slime or wrestling them off now has a chance to disorient them - for a moment. Throwing them off with a weapon doesn't do that. - - tweak: Water will make slimes lose their target, stop feeding, and will disorient - them for a moment on the first application (they will not be stunlocked and - repeated applications have no effect). - - tweak: Slimes now twice as weak to water - PLEASE remember that spraying them - more than once is a waste, the water is already on them and killing them. - - bugfix: Fixed a bug where slime's nutrition was always maxed out when they fed, - causing them to evolve and split instantly. - - bugfix: Slimes now guaranteed to have unique numbers. - - bugfix: Fixed an issue with monkey cubes not deleting in sinks. - - bugfix: Fixed a bug where a slime's location sometimes wouldn't update while they - were feeding. - PsiOmegaDelta: - - maptweak: Adds a new maintenance tunnel network below the station. It can be accessed - by one of 4 elevators and various ladders, assuming one has the access to enter - maintenance in the first case. - - maptweak: Atmospherics has been moved down to this maintenance level. - Runa-Dacino: - - rscadd: Added rolling pin and knife to service/butler borg modules. - - rscadd: Added ability to use the All-in-One grinder(Chemistry, Kitchen, etc.) - to cyborg/android/robot. - TheGreyWolf: - - tweak: Changed Resomii minimum age to 15 years old. - atlantiscze: - - rscadd: SPACE Magazine - Issue 5 is now available in the news browser program - - rscadd: To reduce clutter, the news program now hides older news articles. They - can be shown by toggling a button. - - tweak: News articles now use better data compression, therefore the files are - about 50% smaller. -2016-12-09: - Asanadas: - - rscadd: Surgery cyborgs get an update! Now with tramadol synthesizers, an upgraded - scalpel, a special organ manipulator, and a roller bed module. - - rscadd: Research cyborgs now possess an upgraded laser scalpel. - - rscdel: Surgery cyborgs no longer have a mini fire extinguisher. - - tweak: Cryo tubes, the genetic DNA scanner, and the advanced body scanner now - (also) operate with mouse-drop, instead of grab-put only. Useful for cyborgs. - - bugfix: The infamous sleeper mystery buckle bug has been fixed as a result. - Mark9013100: - - tweak: Gives rainbow gloves unique mob sprites. Credit to ChangelingRain. - PsiOmegaDelta: - - experiment: Sounds are now heard from 14 tiles away by default, rather than 21. - If the station becomes too quiet this can be adjusted. - - soundadd: New sounds added for when electrifying the door or rising and dropping - bolts. Requires adjacency to hear but ensures some foreplanning is needed to - remain stealthy. - - soundadd: The airlock close sound is now different from the airlock open sound. - - soundadd: Changes the airlock-blocked sound and reduces the range at which it's - heard. - sabiram: - - tweak: Fixed errant pixels in black jumpskirt icon, and genericizes description. - - rscadd: Added color selectable jumpskirts, available in loadout. -2016-12-11: - Kelenius: - - tweak: Health scanners now show radiation. - Techhead: - - tweak: The occupants of bodybags can now be scanned without opening them using - health scanners, similar to cryobags. -2016-12-13: - SiegDerMaus: - - rscadd: Added the ability to craft zip guns in game. Zip guns will also have their - own sprites and won't have to borrow the sawn off shotgun's anymore. - TheGreyWolf: - - rscadd: Added the ability for organ printers to also print out limbs. - sabiram: - - tweak: Adjusted crew manifest; shaft miners are now in the Cargo department, Quartermaster - and Cargo Techs are no longer in the civilian department. - - rscadd: Added color selectable hoodies to the loadout menu. - - bugfix: Fixes the sheet snatcher not collecting items on click. -2016-12-15: - Legius: - - bugfix: Shields produced by anomalies are now visible again and use the new shield - graphics. - Nero-07: - - rscadd: The cargo console now keeps track of how many points you earn during the - round and can print an overview showing what you did to get them. - TheGreyWolf: - - rscadd: Added new prosthetics sized for Resomi. -2016-12-26: - Cirra: - - rscadd: Added a preset combat cyborg which admins can spawn. - LorenLuke: - - bugfix: Keeps people from just using 'resist' to escape from nets instantly. - - tweak: Makes resist time random between 5 and 9 seconds to exit net. - - tweak: Sets net fabricator cooldown to 10 seconds (greater than max net resist - time). - - rscadd: Makes nets fade away even if not resisted out of after 15 processing_objects - ticks. - - tweak: Makes it so that netted people cannot use items (and shoot/baton you while - 'restrained' by the net) until freed. - PsiOmegaDelta: - - rscadd: Resetting a character slot now requires confirmation. - - rscadd: Character saves are now per map. - SiegDerMaus: - - rscadd: Adds a new non-lethal weapon. For now, it will remain adminspawn only - for testing, it may be mapped into the armoury later. - TheGreyWolf: - - rscadd: Mousetraps are now orderable from cargo. -2016-12-29: - Chinsky: - - rscadd: Added some hints for filthy civilian scum. Gosh, some people - - rscadd: You can click on [WRONG BRANCH KIDDO] type messages to get info on what - branch/rank is right for this job. - - rscadd: All open jobslots can be seen again in latejoin, but if you try to pick - one with wrong branchrank, you get message about it with hints. - Cirra: - - rscadd: Added a unified radiation system. Radiation is lessened by obstacles, - and distance. - - rscadd: Added a geiger counter for measuring radiation levels, which can be found - in certain vending machines and radiation closets. - Kelenius: - - bugfix: Monkey cubes won't hang the server for a second or so each. Now it's only - about 0.2 seconds each. - Legius: - - maptweak: Added missing emergency shutters to command section. - Meyar: - - experiment: Removes cloning boards from being player accessible without admin - intervention. - Nero-07: - - rscadd: Ported the defibrillator from tg. - PsiOmegaDelta: - - rscadd: Ghosts are now able to follow a much wider variety of things, not merely - mobs, and the entries are a bit more detailed. Inspired by a similar implementation - by Kelenius. - atlantiscze: - - rscadd: Show server revision verb now also lists which map is being used. - - rscadd: Skill descriptions in character setup now contain more detailed information - on differences between varying skill levels. - - tweak: Command, Cooking and Botany skills are now secondary. Engines skill is - no longer secondary. Existing character setups shouldn't be affected, but it - is still advised to check that your skills are set correctly. - - tweak: The skills in character setup have been reordered a bit. -2016-12-31: - HarpyEagle: - - bugfix: Doors leading to open elevator shafts now require a little more effort - to open. - Kelenius: - - rscadd: Station dwellers have re-discovered the ancient art of spraying contents - of fire extinguishers directly at people, instead of floors around them. You - need to be at help intent and click the mob with the extinguisher to do it; - other intents still make you attack. - Loneguyfly: - - rscadd: Changes Taj blood to be visually distinctive from human blood. - Nero07: - - rscadd: Added a program to modular computers, that can be used to create/edit/delete - digital warrants. Also added a mobile device named 'holowarrant', that can be - used to sync up with the central warrant list and display these warrants in - the field. - Ravenxales: - - rscadd: Add toggleable safety for compressed matter implant, to prevent inadvertant - usage and facilitate storage. - - bugfix: Fix compressed matter implants that are placed in storage from destroying - the storage with itself inside. - Redstryker: - - rscadd: Adds a blue resprited version of Latex gloves called Nitrile gloves. They - can be found in the sterile glove box and on the loadout. - - rscadd: 'Added three different hairstyles: Undercut, Coffee House Cut, and Parted - Fade' - sabiram: - - rscadd: Added hotkeys for moving up and down z-levels. The hotkey for moving upwards - is ,(COMMA), and the hotkey for moving downwards is .(FULL STOP) -2017-01-04: - Cirra: - - rscadd: Re-enabled the radiation storm event - - rscadd: Radiation collectors now work with general radiation, as well as singulo-specific - pulses. - - rscadd: The engineering module now has a geiger counter. - - bugfix: Humanoid mobs will no longer ignore radiation levels below 5Bq. - - bugfix: Blast doors now properly block radiation. - HarpyEagle: - - tweak: Burn damage causes by lasers results in less blood loss. - - tweak: Laser protection offered by many types of armour given a modest boost, - bringing laser protection up to match bullet protection in most cases. - - rscadd: Laser beams have a chance of dealing internal organ damage much like brute - damage. - Kelenius: - - experiment: Bot AI has been overhauled, hopefully for the better. - - experiment: Navigation beacon (and, therefore, patrol) code has been changed; - please report any issues with bot patrolling. - - tweak: Mulebots can't be hacked for speed anymore. They move at moderate speed. - Safeties can still be disabled. - - tweak: Floorbots don't try to fix space anymore; instead they will remove broken - tiles. They can be configured to cover platings, too. - - tweak: A farmbot has been added to the garden, and a floorbot to engineering storage. - Loneguyfly: - - rscdel: Removes the silence and paralyze effects from deathsting. The ability - will now only cause jittering and an injection of lexorin. - LorenLuke: - - bugfix: Can now throw held people again. - - rscadd: Clicking a grab while in help intent downgrades the grab a step. - Minijar: - - rscadd: Changes the colour of unathi blood. - Redstryker: - - rscadd: Added a colorable hair bow to the loadout. - - rscadd: 'Added three facial hairstyles to be used for Humans: Mutton Chops, Mutton - Chops and Moustache, and Walrus Moustache.' - - tweak: Made all of the medical bags have blue crosses on them instead of green - crosses. - - rscadd: Added messenger bags variants for all of the jobs. They can be selected - from the character setup. - - rscadd: 'Added four colorable underclothes: long john tops and bottoms, tube top, - and long undershirts.' - Runa-Dacino: - - tweak: Changed stack recipes to spawn product in hands when possible, otherwise - spawn on the ground.. - - rscadd: Enables the text replacer that makes verbs such as *aflap use visible - gender for all *verbs instead of using 'its.' - - bugfix: Fixes preset emotes to write himself and herself instead of heself and - sheself. - Techhead: - - rscadd: Brings back the evil to evil vending machines. However, their throwing - arms aren't as good as they used to be, so if you don't walk up to them, you - should be fine. - TheGreyWolf: - - rscadd: Upped the damage from 5 to 10 brute possible per limb when falling down - a z-level. -2017-01-06: - Hubblenaut: - - tweak: Hydroponics vendor and biogenerator offer full bottles of fertilizer. Prices - and amount available adjusted to accomodate. - Redstryker: - - tweak: Changed the sprites of the biosuits to have gloves and boots. Gives them - the appropriate inventory flags to cover gloves and shoes. - - rscadd: Added toeless workboots. Added them to the loadout. - - rscadd: Added athletic shoes. Added them to the loadout with the ability to color - them. - - rscadd: 'Added the following hoodies to the loadout: NanoTrasen, Space Mountain - Wind, Mariner University, and Ceti Techical Institute.' - - tweak: Changed the 'Mars University Lunchbox' to the 'Mariner University Lunchbox'. - - tweak: Gave boots and gloves to the normal and Resomi variation of the radsuits. - Runa-Dacino: - - bugfix: Fixes pain messages giving errors saying emote 'me' doesn't exist - - tweak: Changed generic 'their' to use visible gender for aforementioned pain messages. - Soadreqm: - - rscadd: Alter procedure for dismantling broken, bolted doors - - rscadd: Made the fire axe more robust against doors. - Zuhayr: - - rscadd: Added a constructable improvised coilgun and two adminspawn railguns. - Credit goes to Siegdermaus for the icons and the commission. No, I'm not going - to tell you how to build it - that's the fun. -2017-01-08: - Cirra: - - tweak: Changed the radiation storm event's end message to indicate that radiation - will take time to decay. - Redstryker: - - soundadd: Added four sounds that are randomly played when bones break. - - rscadd: Added a hanging skeleton model as a furniture item for all your spooky - needs. - sabiram: - - rscadd: The Chief Medical Officer now has maintenance access on the Exodus. -2017-01-11: - Chinsky: - - rscdel: Removes Pun Pun's naked ass. Little pervert was wearing assless jeans - under that hawaii shirt the whole time, fixes them to cover the buttbits properly. - - rscdel: Removed hallucination part of SM delamination event. - Cirra: - - imageadd: Added a new set of PDA sprites. - Hubblenaut: - - tweak: Doubles power for rechargers and wall rechargers. - - tweak: Raises power for cell rechargers from 40 kW to 60 kW. They will still recharge - quickest. - Kelenius: - - tweak: Brand intelligence event now tells you the name of the original machine. - Original machine will now swear more often to make it easier to find. The event - also ends (fixing all machines) when the original machine's shooting is disabled, - not only when its speaker is off. - - rscadd: A customizable tablet has been added to loadout - remember that better - parts use more power. - Lorwp: - - rscdel: Removed Stunbatons from Medbay - - maptweak: Reorganized the Paramedic's Station - Minijar: - - rscadd: Adds Uzi, Deagle, .38 revolver,Combat shotgun and a sawnoff shotgun to - the uplink. As well as appropropriate ammo. - - rscadd: Adds all of the above ammo types to the autolathe. - Nero07: - - rscadd: Dead people now keep processing reagents for 15 seconds after they died - Redstryker: - - rscadd: Added colorable flats to the loadout. - - tweak: Adds defined role variables to the Torch loadout in order to reduce clutter. - - tweak: Fixes the dark red jumpsuit to reflect it actually having a belt on. - TheGreyWolf: - - rscadd: Restricted Resomi prosthetics to limbs only. No more Resomi FBP. - - rscadd: Changed the resomi white smock to instead be colorable. - Zuhayr: - - tweak: The limb damage indicator on the HUD now uses local limb pain, not traumatic - shock. - - tweak: custom_pain() (used in surgery, moving bones, etc, to make a pain message) - now increases pain on the limb calling it. In other words, non-anesthetised - surgical pain now has a purpose other than giant red text. - chinsky: - - experiment: SM delamination no longer causes hallucinations, but has bigger explosion. -2017-01-16: - Hubblenaut: - - tweak: Can now click on turfs with trash bags and similar to quick-gather everything - on it. No longer pixelhunting for cigarettes and bullets. - - bugfix: Buckets and other reagent holders will no longer simply be put into the - janitorial cart's trash bag. - Kelenius: - - rscdel: Resomi FBP construction made physically impossible, STOP MAKING THEM. - Same for Diona and IPCs. - Ravenxales: - - bugfix: Allow protected roles (heads, IAA, etc.) to be converted to faction antags - (cult and rev) mid-round - - bugfix: Make implants work properly again (can configure triggers, etc.). - - bugfix: Made turbolift doors more robust. Small mobs will be displaced, large - mobs will make the lift give up and reopen. - RedStryker: - - bugfix: Added the skeleton stand file to the Baystation12.dme. - Redstryker: - - rscadd: The sterile mask can now be toggled down and up like breath masks. - - tweak: Refactored the pull down mask verb and proc. - TheGreyWolf: - - rscadd: Made Resomi sprites for the scarf. - - rscadd: Fixed so people can once more have mechanican eyes and heart. - atlantiscze: - - tweak: All modular computers now support a tesla link, allowing them to run off - an APC. This includes tablets. - - tweak: Both tablet presets from custom loadout now have a tesla link by default. - - bugfix: Tesla link now also works for laptops when they are closed. - - tweak: Size of tesla link and intellicard slot reduced, which means they can now - actually fit into tablets. -2017-01-18: - Finalsong1: - - rscadd: Adds a piloting skill. - Haswell: - - tweak: Clicking on worn or held boots containing a concealed blade will now draw - the blade out directly, similar to gun holsters. - - tweak: Masks that can be pulled up/down now have action buttons for toggling. - Kelenius: - - bugfix: Fixed issues where you were unable to turn the bots on and off when you - should have been. Farmbot specifically. - - tweak: Synthetics can always control all bot settings. - - tweak: Synthetics and anyone who opens the bot's panel (screwdriver) can toggle - bot safeties, giving it a 'temporal' emag effect that can be fixed in the same - way. Emags break them permanently, but this is obvious when the panel is open. - RedStryker: - - rscadd: Added glowsticks in green, blue, red, orange, and yellow. Work similar - to flares, but burn twice as long and half as bright. Can be found in the YouTool, - party equipment, and random drops. - - soundadd: Added sounds that play when the cheap lighter is turned on and when - the Zippo is lit and turned off. - - bugfix: Changed the name of the long john shirt icon_state so that it can actually - be used. - TheGreyWolf: - - rscadd: Added a new coat to the custom loadout for Resomii. -2017-01-19: - Chinsky: - - bugfix: When reattaching limb, hemostat finish step is REQUIRED now. On the other - hand, limbs are now properly reattached without leaving cut-away status forever. - - tweak: For bone gel steps you can use duct tape now. Screwdrivers aren't used - anymore. Also reworded messages there to be less awkward. - Hubblenaut: - - rscadd: Added icons for the energy gun's shock firemode - - bugfix: Fixes items appearing in the wrong hand. - Ithalan: - - bugfix: Fixed spawning of wrong version of the medical hardsuit in medical. - RedStryker: - - rscadd: 'Added track pants and track jackets in the following colors: white, green, - red, and blue. Added a track jacket for the normal track pants. Added the jackets - to the loadout.' - Redstryker: - - rscadd: Added flannels. It is on the loadout with the color selection datum. It - can have its sleeves rolled up, be buttoned, or be tucked in and any combination - thereof. - - rscadd: Added high tops. Added them to the loadout. -2017-01-21: - Hubblenaut: - - tweak: Floor painting reappears when putting on new plating. - Kelenius: - - rscadd: New cult gamemode is in. Refer to https://wiki.baystation12.net/Cultist - for the updated guide. - - rscadd: Added beekeeping equipment to garden. - - tweak: Open space in engineering is now covered with lattices. - - bugfix: Space vent in toxins is no longer blocked. - Redstryker: - - rscadd: Added cigarette packet 'microlore'. Background information that can be - found in the examine tab. - TheWelp: - - rscadd: Adds universal action HUD element. - - rscadd: Moves spells to new action HUD. - - rscdel: Removes mind transfer. -2017-01-24: - Kelenius: - - tweak: Ghosts can't use their abilities in holy places (non-defiled chapel or - anything touched by holy water) anymore. - - tweak: Confuse rune doesn't blind people, only blurries their vision. It still - stuns as before. - - tweak: It takes longer to unlock tear reality rune and ghost abilities. - - bugfix: Many cult-related bugfixes. - SiegDerMaus: - - rscadd: Added swords for Torch dress uniforms. - Yoshax: - - rscadd: Adds drop pouches that are functionally the same as the various types - of colored webbing, but look different. Are available in loadout and can be - found in webbing crates. -2017-01-28: - HarpyEagle: - - rscadd: Defibrillators will now notify when the patient cannot be revived due - to excessive blood loss. - Kelenius: - - rscadd: Can now configure headset by click-dragging it to screen, similarly to - PDA. - - bugfix: Alien suit sprites have been fixed, as were inhands. - RedStryker: - - rscadd: Added microlore to some soda/drink containers. -2017-02-01: - Ace McLazer: - - tweak: Updated generic colored poncho look, tweaked all to look more human-shaped. - Changed Resomi ponchos, too. - Cirra: - - rscadd: Added a new alloy, Osmium-Carbide Plasteel. It is physically weaker than - plasteel, but is more resistant to heat, and is made like plasteel but with - added osmium and extra carbon. - Haswell: - - maptweak: Reduced Torch map sizes from 255x255 to 200x200. Admin Z is now split - into two. Reduced world initialization time by about 2 minutes. - Hubblenaut: - - bugfix: Fixes mob icons not updating when blood is washed off. - Kelenius: - - tweak: Garden got most of their plants back. The only plants exclusive to xenobotany - now are ambrosia (blame chinsky), kudzu (too dangerous), plastellium (useless), - alien seeds, and randomly-generated ones. - - tweak: Seed storages now start with 30 of each seed type, not 2 or 3. - - rscadd: Xenobotany now starts with 30 of each type of alien seeds (previously - only available from fossils) and 10 random seeds. - PsiOmegaDelta: - - tweak: Climbing ladders now takes 2 seconds. As a side-effect climbing can now - also be aborted by moving away. - - tweak: Anyone near the destination ladder are now also made aware that someone - is (potentially) about to arrive. - SiegDerMaus: - - rscadd: Adds one new haircut, a chin-length bob. - Zuhayr: - - rscadd: Added haywire rounds for shotguns and some calibers of small arms. - - tweak: You now need to target head/eyes/mouth when trying to slit a throat. - - rscadd: Added tendons and tendon repair. Tendons can be severed by cutting brute - damage or via a grab (similar to cutting a throat) and if cut will render the - limb unusable. Hands, feet, arms and legs have tendons. - - rscadd: Added arteries, replacing the previous internal bleeding implementation. - Functionally identical to the internal bleeding of yesteryear including repair - surgery. - - tweak: As a result of the above, internal bleeding is now static per limb and - cannot be treated via bicaridine and inaprovaline overdose. - - tweak: It is no longer required that the skull and ribcage be opened to repair - internal bleeding or eye damage. A retracted incision is still required. - - rscadd: Adminhelps now have a TAKE button that allow an admin to claim it, and - inform the adminhelper that someone is on the case. - sabiram: - - tweak: Split the Command department on the Torch into Heads of Staff and Command - Support. - - tweak: Moves the Exodus cargo team to Supply, the bartender, gardener, chef and - janitor to Service, and Internal Affairs to Support. - - rscadd: Added the command, support, service and supply departments to the ID computer. - Added the support, service and service departments to the manifest. -2017-02-06: - Cirra: - - rscadd: Bluespace tiles created by the Supermatter Cascade will now spread between - z-levels. - Datraen: - - rscadd: Added a gene-specific mode for the Floral Somatoray. - - tweak: Plant controller now generates the mask/tag list used by the centrifuge, - rather than generating it on ui_interact. - Hubblenaut: - - bugfix: Forensic tools (and other items) will no longer be used when putting in - backpacks or on tables. - - tweak: Taking forensic samples will first take evidence, then leave your own fingerprints/fibers. - - rscadd: Added click-and-drag function to forensic tools to take evidence where - you previously couldn't. - - rscadd: Allows chest drawers to store forensic samples. - Kasuobes: - - tweak: Suit storage units now hold magboots and air tanks. - - tweak: Voidsuits can now toggle installed helmets via action button when worn. - Kelenius: - - rscadd: Fossil plants can now be fed to seed extractor to get one random seed. - - rscadd: Placed mining flags now have have a glowing fringe, visible in the dark. - - rscadd: Plush toys added to loadout. - - rscadd: Resomii 'nearsightedness' is now correctly prevented by equipment that - blocks bright lights, not prescription glasses, and goes away in the dark. - Lorwp: - - tweak: Change's Brig Officer's holobadge box to have Master At Arms Holobadges - - tweak: Allow Security Messenger Bags to be able to spawn in Security Lockers - - tweak: All Security have Work Gloves in their lockers now - PsiOmegaDelta: - - rscadd: Admins can now delete specific obj instances from the VV menu, not only - all of the same type. - - bugfix: Power monitors now list all powernet sensors belonging to the current - and connected Z-levels. - TheWelp: - - rscadd: Adds the Vox weapon the Slugsling - - bugfix: Fixes launchers not playing a sound on firing. - chinsky: - - bugfix: Fixes surgery openness stage not applying gory overlay. Gore is back. -2017-02-07: - Cirra: - - bugfix: Radiation from the Supermatter delaminating should now properly affect - all connected z-levels. -2017-02-10: - Asanadas: - - tweak: Scrubbers now scrub N2O and Phoron by default. - - maptweak: The corners of Escape Pods 3 and 4 should now no longer appear to lead - to space. - - tweak: Officer swords should now look good from all angles. - Haswell: - - tweak: Mop buckets and janitor carts can now be climbed over. - Nero07: - - rscadd: Added communications functionality to AI holopads. To use, stand on a - holopad and click it. Make a new holocall and select the target pad from the - list. The targetpad will light up, emit a sound and inform nearby players about - the incoming call. To pick it up, just click the pad. The caller is projected - above the holopad and can talk to/emote with all people in view of the holopad. - To end the call, step off the holopad. The call can also be ended from the other - side by clicking the active holopad. -2017-02-12: - Essbie: - - rscadd: 'Added new cocktail and recipe: Ship''s Surgeon.' - HarpyEagle: - - bugfix: Fixed bluespace jump lag. - - bugfix: Fixed latejoins during bluespace jump not being affected by it. - - bugfix: Fixed being able to enter/leave the vessel zlevels during bluespace jump. - - rscadd: Moving in straight lines during a bluspace jump is now more difficult. - - tweak: The amount of toxin damage gained from low blood levels is now limited - to around 18. - - bugfix: Various defibrillator fixes. - - bugfix: Difference between the two cult ghost whisper verbs should be clearer - now. - - bugfix: Meteors no longer destroy floors or anything else that doesn't block their - movement. - Haswell: - - tweak: Removed ghost verb from AI and pAI due to overlapping function with wipe - core and wipe software verbs. - Nero07: - - bugfix: Added a busy signal so you can't call already active holopads, which led - to message spam. - - bugfix: Makes holopads actually function and fixes a few runtimes associated with - them. - TheGreyWolf: - - tweak: Made it so only unbranded, NT and Resomi specific prosthetic brands can - be made during gameplay, chargen not changed. - Zuhayr: - - tweak: Bleed-out rate now depends on pulse rate and size of bleeding limb. - - tweak: This means that potassium chlorophoride, which stops the heart, and inaprovaline, - which now slows the heart, are both suitable for emergency treatment of bleeding. - - rscadd: Cautery surgery with no preceeding steps will now cauterize a cut artery - in a stump. - - tweak: Arterial bleeding and stumps are now more informative about where the bleed - is. - - tweak: Arterial sprays can now splatter/blind people and use the correct icons. -2017-02-14: - Haswell: - - rscadd: Added waist packs that can be worn around the waist or on the back. They - can be found in custom loadouts under utility. - atlantiscze: - - rscadd: Added modular telescreens - wall mounted modular computers that are comparable - to laptops in terms of hardware restrictions, and tablets in terms of software - restrictions. Few of those have been mapped in, more can be built. - - tweak: Large amount of under-the-hood improvements and tweaks. - sabiram: - - rscadd: Added subtypes of meat for cows, goats and chickens. They all act the - same way. - - rscadd: Added crates containing beef, goat meat, chicken meat, eggs, and milk. - - tweak: Increased the price of the livestock crates so that it is much more economical - to order the produce you want instead of a live animal. -2017-02-15: - RedStryker: - - bugfix: Allows department-specific messenger bags to be used. - lorwp: - - rscadd: PAI's can now speak EAL, if they have a Universal Translator' - sabiram: - - rscadd: Adds some new hairstyles. For the Torch, Short Hime and High and Tight - are approved for all Sol personnel; Grande Braid and Fringetail are approved - for the Expeditionary Corps only. All new styles are freely available to all - civilians. - - tweak: Adjusts luminosity on a few hairstyles to correct desaturated spots. -2017-02-18: - Haswell: - - rscadd: Added boxes of headsets to the Torch XO locker. - Lorwp: - - rscadd: Added Trendy messenger bags to all Job Lockers - sabiram: - - rscadd: Added modular laptops to the utility loadout menu. -2017-02-21: - Asanadas: - - bugfix: You now require an under-clothing (such as a jumpsuit) to wear things - on your belt. No more PDA in your boxer waistband. - - bugfix: Mushroom soup can now be made with a sane ingredient combination. - Chinsky: - - rscadd: Accounts with biggest profits or losses are now announced in round end - summary. Get dat greentext. - - tweak: Surgery changes. Cry, medical. - - rscadd: Self-surgery is legal now. It was possible via a bug, it's a feature now. - - rscadd: As a side effect, you don't have to lie down to be operated on. It is, - however, a very bad idea unless it's basic steps like incision etc. Success - chance will drop for delicate steps. - - rscadd: Instead of randomly doing nothing, rollerbeds / tables are factored into - surgery success chance calculation. - - rscadd: 'Said success chance: surgery steps now can fail even if you don''t move - / drop tools etc. Ideal scenario is ''sober surgeon not in pain operating on - another person who is lying on an optable''. Deviations from that add chance - of failure. Some steps are more robust, some are more delicate. As a rule of - a thumb, if you have to touch innards, that''s delicate. If you perform internal - organ surgery on yourself while sitting on a table piss drunk, nearly passing - out from pain and also being blind, it''s not going to go very smooth.' - - rscadd: Shock will advance fast when being surgery'd on, so take it slow or take - some pills. - Haswell: - - maptweak: Destroyed the cloning lab on Exodus and all technology related to it. - atlantiscze: - - rscadd: Added forced-shutdown verb to modular computers, reachable via rightclick - menu. This is equivalent of pressing the Shutdown button in the UI, and is mostly - intended to be used when UI bugs out and regular shutdown isn't available. - - rscadd: Added Supermatter Monitoring program, available on all devices. It provides - various information on the supermatter engine. It is fully variable, and capable - of working with multiple supermatter crystals at once (for those enterprising - engineers among you). - - rscadd: Among other information, the supermatter monitor program shows engine - core EPR value. This value is best kept between 1 and 2, and shows real amount - of coolant in the core (in standard canisters worth). Normal EPR with two canisters - in each loop is roughly 1.5 - - rscdel: Rightclick open/close laptop verb no longer exists for laptops. Use alt-click - instead. -2017-02-24: - Chinsky: - - rscadd: PI now spawns with a badge, Journalist with a camera. Also added tape - recorder to custom loadout. - Cirra: - - soundadd: Added several new sound effects. These include fire extinguisher cabinets, - internals activation, flashlight/flare activation, air alarm breach detection, - and more. - - soundadd: Added ambient sounds to Thermo-Electric Generators. - - bugfix: Braces can no longer be removed from an airlock by deconstructing the - airlock. - - bugfix: Pipes will now correctly burst if the internal pressure is too high. 0-16.9MPa - is safe, 17-20.9MPa has a chance of bursting, and 21MPa+ will burst instantly. - - maptweak: Osmium-Carbide Plasteel walls have been mapped into the incinerator. - It should now be safe to use the incinerator, as a result. - Crushtoe: - - imageadd: 'Two new pAI chassis types: The Mushroom and the Corgi Puppy. Finally, - we can have our pAIs join the Mushroom Plague.' - Haswell: - - tweak: Antag preferences now default to never instead of low. - Runa-Dacino: - - rscadd: Adds ability for the player to change the name and description of ninja - voidsuit to assist in ninja gimmicks - - rscdel: Removed references to the spider clan from ninja voidsuit. - TheWelp: - - rscadd: Adds a integrated circuit printer to the R&D lab. -2017-02-26: - Chinsky: - - tweak: Holowarrant projectors now autosync when clicked in hand instead of having - to use verb manually. - - tweak: You can swipe ID at the holowarrant to authorize it now. - Crushtoe: - - imageadd: New external airlock and mail sign sprites. - Datraen: - - bugfix: Language sanitation now checks for species second languages in addition - to whitelist status. - Haswell: - - rscadd: Added crossfire gamemode, mercenary + raiders. Requires 25 readied players - and at least 6 antags to start. - Hubblenaut: - - rscadd: Newschannels now show the number of times they have been viewed. - TheWelp: - - rscadd: Adds an advanced integrated circuit radio. Lets players send commands - and id_tags. -2017-02-28: - Haswell: - - rscadd: Added Siege gamemode, mercenary & revolution. Requires 20 readied players, - 5 antags. - - rscadd: Added Unity gamemode, revolution & wizard. Requires 15 readied players, - 5 antags. - - tweak: Made Conflux votable, cult & wizard. Requires 15 readied players, 5 antags. - - tweak: Made uprising votable, cult & revolution. Requires 20 readied players, - 6 antags. - - rscadd: Added small energy gun variant, small size with 4 shots and reduced lethal - damage. - - rscadd: Added gun cabinet variant with small energy guns. - Nero-07: - - bugfix: Fixed holopads and tested them a bit more extensively. Should work as - expected now. - Techhead: - - tweak: Torch medical has been reorganized, full changes follow. Check your job - settings on medical characters. - - tweak: Senior Physicians are now simply Physicians, and the job is limited to - officers. - - tweak: Physicians are now Corpsmen, with updated alt-titles, including the new - Medical Technician and Field Medic titles. - - rscadd: A unique outfit for Fleet Field Medics. - - tweak: Medical Assistants are now Medical Contractors, with two slots. Medical - Resident title is gone. - - rscdel: The dedicated Virologist slot is gone, now part of Medical Contractors. -2017-03-07: - Chinsky: - - bugfix: Fixes not being able to bring up undress menu on help intent. - - tweak: You scoop up resomi/monkeys/nymph on GRAB intent now, not help. Was annoying - in surgery etc. - - rscadd: Can now put accessories on people via strip menu. Click on the clothing - item with accessory in hand to attempt to. - - rscadd: Can now pick which accessory to remove in stirp menu. - - rscadd: Explosive implants now can be triggered by remote signaler signals. Change - frequency and code in implantpad that now comes in the box with implant. - - rscadd: Explosive implants now complain on radio when they are exposed in surgery - (after retractor step for skin/ribs). Can set message in implantpad. - - rscadd: Added thicc rig to merc base. It has bit more slowdown, but more armor - overall. - Haswell: - - tweak: Improved movement smoothness with /tg/ movement code. - - tweak: People now spawn with random hunger levels between hungry and satiated. - - tweak: Reduced amount of satiety from eating by 66%. - - tweak: Ghosting messages now show where the player is ghosting from. - Hubblenaut: - - rscadd: 'Adds new haircut: Ponytail 6.' - Techhead: - - rscadd: Added a black tie outfit to the uniform vendor for civilians. - - rscadd: You can now pin medals to your service and dress jackets. - - rscadd: As a bonus, you can also put armbands on labcoats. - TheWelp: - - bugfix: Fixes circuit printer being a computer recipe instead of a machine - - rscadd: Adds ability to deconstruct an assembly and gain a protolathe recipe for - it. - - bugfix: Fixes circuit printer not having a max cap on metal. - - bugfix: Fixes certain activators not being respected when there are multiple of - them. Fixes debugger not sending activator data. - - rscadd: Adds accelerometer circuit, which lets you detect motion (and how much). - - rscadd: Adds simple locomotion circuit, which uses activators alone to control - itself. - - rscadd: Adds ai-controlled circuit. Lets ai inside itself use arrow keys to activate - certain pins. - - rscadd: Adds tile sensor, which detects items/mobs on a tile when pulsed. - atlantiscze: - - experiment: Removed bunch of NarSie's summon effects. Should considerably help - performance. - - tweak: Cult walls now have non-reinforced type, that is used when cultifying non-reinforced - walls. - sabiram: - - rscadd: Standard and research magnetic grippers can now hold modular computer - hardware. - - rscadd: Research module robots now have access to wirecutters. - - rscadd: Replacement tubes for spotlight fixtures are now available in the autolathe - and in most light tube boxes. - - rscadd: Added a new black leather satchel to the backpack selection menu. -2017-03-12: - Asanadas: - - maptweak: The Morgue now has emergency shutters. Also, more emergency shutters - spread around the infirmary. - Chaoko99: - - imageadd: Added a unique sprite for anesthetic pumps. - Cirra: - - rscadd: Pipes with exposed ends (such as those that result from a pipe bursting) - will now leak their contents into the air. To stop a pipe from leaking, attach - an endcap to the end. - - rscadd: Added Stasis Clamps to engineering vending machines, devices which can - be attached to a pipe and turned on in order to halt the flow of gas through - that pipe. Useful for sealing off sections of pipe so you can make changes without - leaking. - - rscadd: Added and mapped in Automated Shutoff Valves, which will automatically - close if their internal pressure gets too low, to limit the damage caused by - main-loop leaks. Click on an AS Valve to reset it. - Datraen: - - rscdel: Removed the hunger section of movement code. - - tweak: Doubled the rate of nutrition degradation. - - tweak: Raised the starting nutrition values. - - tweak: Reset the rate of nutrition degradation to the default value. - Hubblenaut: - - rscadd: Adds alt-click shortcut for initiating test-fire. - - rscadd: Examining the teleporter console will reveal its current destination and - accuracy. - - tweak: Teleporter accuracy does no longer automatically reset after five minutes. - - tweak: Teleporter accuracy resets after locking in to a different destination. - sabiram: - - rscadd: You can now alt-click a PDA to remove an ID. -2017-03-14: - Haswell: - - rscadd: Added ion pistols, 8 shots no AOE, normal size, can be worn on belt and - holstered. - - rscadd: Added taser carbines, 10 shots, heavy taser and heavy shock beams, large - size, can be worn on belt and back. - - rscadd: Added stun rifles, 12 stun shots, huge size, can be worn on back. - - tweak: Reinvented pulse weaponry. They now function as burst fire laser weapons, - dealing less damage per shot but with higher damage potential than their laser - counterparts. Most effective at medium ranges against non-armored targets. - - rscadd: Added pulse rifles. 36 pulse shots, high damage. Huge size, can be worn - on back. - - rscadd: Added pulse carbines, 24 pulse shots, medium damage. Large size, can be - worn on back and belt. - - rscadd: Added pulse pistols, 21 pulse shots, low damage. Normal size, can be worn - on belt and holstered. - - maptweak: Adjusted security and emergency armory contents. Added more guns. - - tweak: Added pulse weapons to uplinks. - Unknown: - - bugfix: Stasis Clamps should now function correctly when placed next to a pump, - valve, or other pipe machinery. -2017-03-26: - Asanadas: - - tweak: Orange shoes (as well as jumpsuits of all kinds) no longer are capable - of doing damage. - - rscadd: 'Added new drug/medicine: Noexcutite. Useful to eliminate jitteriness - in patients. 1 Oxycodone, 1 Dylovene.' - Chaoko99: - - rscadd: Crisis borgs can now pick up pills. - - rscadd: Science borgs can now pick up tanks, tank transfer valves, and various - other assembly items. - - imageadd: Replaced the old [CAUTION] Canister with a cleaner sprite. - - imageadd: Added a hazard stripe overlay for people to add to new canister sprites - in DM. - - imageadd: Added new phoron sheet sprite. It is orange now. - - imageadd: Added a new icon state for the admin spawnable crystal. - - tweak: Most solid phoron and phoron-based objects are orange now. Please report - old pink/purple phoron sprites on the git repo, tag @chaoko99 in the description. - - tweak: Uncommented the phoron-based object flashing code. Phoron based objects - will now combust when on a turf over 200c. - Chinsky: - - tweak: Tabling is no longer instant. Wait till aggressive grab is done upgrading - before do it (whe blue thingie is done filling). - - rscadd: Can now click yourself with cig to take a drag on it. - Haswell: - - tweak: Renegade guns now all fit in backpacks, provided there's room in there. - - tweak: Duct tape now repairs supermatter. - - rscadd: Added flashdark device, basically a flashlight that cloaks you in darkness - instead of light. Available in uplinks. Pair with thermal scanners for fun. - Hubblenaut: - - bugfix: Fixes whitespace cropping when writing on paper or using the circuit debugger. - Ravenxales: - - tweak: Fix many strings to respect the Torch environment. - RedStryker: - - tweak: Added new lore-consistent clothing items for NanoTrasen personnel. - Techhead: - - rscadd: Moves Junior Enginner to a Crewman alt-title, accompanied by the new Junior - Corpsman. - - tweak: Increased Crewman slots by one and removed age restriction. - - rscadd: Gave Raiders their very own frequency. Hopefully, no more filthy mercs - listening in on your distinguished matters of commerce. - TheGreyWolf: - - rscadd: Added uniform, dress and formal uniform for Resomii from unused sprites. - memescope: - - tweak: Gave the Scientist, RD, Senior Researcher and Research Sssistant access - to formal clothing in the loadout. - - tweak: Divided pants into formal and casual pants and put them into different - selections in the loadout. - mkalash: - - rscadd: Admins can now globally and individually mute AOOC. - - rscadd: Added a stun revolver to the NT guard lockers. - - rscadd: The Torch will now receive a report at the beginning of the round listing - the current system, the next system, and any nearby planets. -2017-03-31: - Asanadas: - - tweak: The holodeck theater's clothings have been changed to holo-chameleon equipment. - Have fun with more dress-up options! - Cirra: - - maptweak: Removed the Pulse Rifle from the emergency armoury, and replace it with - a marksman energy rifle. - Datraen: - - bugfix: Updates mechs to be able to interact with ID cards in wallets. - Leshana: - - bugfix: Fix rooms holding pressure when exposed to space. - RedStryker: - - tweak: Added new lore-consistent PDA, Locker, and Action Figure sprites for NanoTrasen - items. - - rscdel: Removed science armband. - - tweak: Recolored research tape to white. - Sin2: - - tweak: Added new lore-consistent airlock sprites to Research. - Unknown: - - imageadd: Replaced the energy sword and double saber sprites with those from TG. - - imagedel: Removed the Sord and Sord inhands. -2017-04-01: - Haswell: - - rscadd: Added singularity grenades. Works just about as well as you imagine. -2017-04-06: - Broseph Stylin: - - rscadd: Added a colorable and a horrible bowtie to the loadout, available to all - non-military roles. Icons by LorenLuke, slightly altered. - - rscadd: Skirt versions of the dress uniforms are now available for all SCG branches - in the uniform dispenser. - - bugfix: Officer's variants of the dress uniform will now show up correctly in - the dispenser. - Chaoko99: - - imagedel: Removed unused reagent container sprites. - - tweak: Removed the toy sunflower, replaced with another flower that functions - identically, but can accept reagents other than water. - - spellcheck: Added punctuation to wizard spells, and adjusted some of the shouts - to something a human being could actually say consistantly. - CountAlex: - - tweak: Added deluxe version of electronic cigarette to loadout. - - rscadd: Added electronic cigarettes and replaceable cartridges to cigarette vendors. - Electronic cigarettes come in three options; the deluxe option will later be - added to loadout. -2017-04-10: - Asanadas: - - maptweak: Flipped beach in the holodeck so you don't have to walk through holowater - to get on the holosand. - - maptweak: Added a computer console to the Security equipment storage. Now Masters - At Arms can do their job a little better. - - experiment: A changeling's deathsting now gives a message to the surrounding area. - Cirra: - - tweak: Overmap-related consoles can now properly be repaired. - - tweak: Overmap event groups are now slightly more common, and slightly larger - in size. - - experiment: The Torch now uses the Overmap system. This involves a 'system map' - which can be flown around, with away sites scattered on the map. - - tweak: The flow of fuel through the HE pipes in the SM chamber can be controlled - via an adjustable pressure gate in the Engine Room. The higher the 'Target Pressure', - the faster the thrusters will regain fuel faster after a burn, and the lower - the SM's output. - - rscadd: Added a fuel tank port of atmospherics, and all the necessary piping for - overmap. - - rscadd: Converted the four thruster areas on the vessel into engine nacelles. - It is possible to switch between direct injection and combustion, via buttons - located in the engine monitoring room. Each mode has its own advantages and - disadvantages. - - rscadd: Modified the SolGov Pilot job, so they can properly pilot the Torch. - - rscadd: Added randomly placed events to the overmap. - - maptweak: The Calypso, Aquila and Guppy are now overmap-capable, and can travel - to away sites on the same overmap tile. - - maptweak: Added Helm and Engine control consoles to the bridge, and Engine controls - to engineering monitoring and the fuel bay. - Datraen: - - bugfix: Aliens can choose their corresponding xenowear once again. - Haswell: - - tweak: Lots of things are made climbable. - Pobiega: - - rscadd: Added fuel pipes, manifolds, caps, etc. - - rscadd: Made pipe dispensers dispense fuel pipes. - RedStryker: - - tweak: Separated the NT tunic into an accessory. There is a polo below the tunic. - That polo is on the loadout. - - tweak: Changed the color of the NT worksuit. - - rscadd: Added a NT executive suit for the NTL. Also in RD's locker. - - tweak: Changed many things in Research from purple to NT red. -2017-04-14: - Asanadas: - - tweak: Master At Arms gets an extra jobslot, bringing it up to 4 in total. - Pobiega: - - rscadd: Added new per-map admin fax destinations. - - rscadd: Admins can now pick between the NT and the solgov logo when sending adminfaxes. -2017-04-19: - Asanadas: - - tweak: Master At Arms badges are now available from the security vendor. - - rscdel: Staff of change has been removed from the wizard's arsenal. - - bugfix: Uniform Vendors should no longer break horribly when you hit them with - a PDA (or anything that isn't an ID). - Chaoko99: - - tweak: Buffed blob, it will now attempt to spread about 20% more often. Lowered - laser resistance of a blob to compensate. - - tweak: Blobs are now totally opaque. This can be countered with optical material - scanners. - - rscadd: 'Blobs can now trip camera alarms. Beware: You won''t be able to use cameras - to find them, if you are not quick!' - - rscdel: Removed slimes from the pet merchant's options. - Ithalan: - - tweak: Collected robotics and infirmary surgical tools into surgical kits - - tweak: Updated surgical kit sprite and description and upped capacity to 14 slots - to allow nanopaste and laser scalpels/IMS to be stored in it too. - Nero-07: - - tweak: Increases starting TC for antags to 130 (was 100). - Orelbon: - - soundadd: New sound plays when the emergency pods unlock. - - rscadd: Added New AI Status Display. - Unknown: - - tweak: Made the mech rechargers use an alpha layer instead of the default grey - tiles. -2017-04-24: - Chaoko99: - - rscadd: 'Added Level3.mod (AKA: title1.ogg), by VScratch? as lobby music.' - FTangSteve: - - rscadd: Adds two inflatable doors to every fire closet. - Orelbon: - - tweak: Glasses and goggles have updated sprites. - RedStryker: - - tweak: Recolored the kidneys and liver to look more realistic. - - imageadd: Added a stomach sprite for later use when stomachs are coded. - Sbotkin: - - rscadd: Added more cooling units for Engineering and Expedition Prep EVA. -2017-04-29: - Chaoko99: - - tweak: Made it slightly less infuriating to speedmix the allies cocktail. (Changed - recipe from vodka and martini (Gin and vermouth) to Vodka Martini and Martini. - - rscdel: Removed highlanders and all references to their antag type. - - tweak: Upped the cost of a flashdark in the uplink from 16 to 32. - Ithalan: - - rscadd: Detached organs now show if any attached child organs have decayed - - bugfix: Organs no longer decay under conditions where their parent organ isn't - decaying. - Orelbon: - - maptweak: Emergency armory has been revamped. - ProfligateShampoo: - - rscadd: Added the ability for characters with the Cook, Bartender or Passenger - (i.e. Botanist) job to select botanical gloves in their loadouts. - TheWelp: - - rscadd: Adds vox scrap armor, armor made from pieces of metal fused together. - - bugfix: Fixes equippable items ignoring inability to equip if warnings are disabled. - mkalash: - - tweak: Added distance to Sol to roundstart report, as well as replaced random - planets with actual overmap system info. -2017-05-02: - Chaoko99: - - imageadd: Made the Resomi sonar ping contrast a bit better to most sprites. - - tweak: Changed the defib failure messages. Now it is less likely to lie outright - to you, and medical will no longer need to know the ancient defib rituals. The - machine will tell them the fix instead. - - tweak: Defib units now start with an APC power cell (Down from advanced) for R&D - to replace as the round goes on. The APC cell will be able to shock the patient - five times before needing to recharge (Down from ten.) - - tweak: Halved the power consumption of the mobile suit sensor jammer. - Orelbon: - - bugfix: Cameras in emergency armory should have proper alarm links now. - - tweak: Evacuation sound should no longer give you tinnitus. - - tweak: Reduced the amount of guns in sidearm cabinets to 3 from 4. Reduced amount - of guns in personal sidearm cabinets to 4 from 6. - - rscadd: Added a combined arms cabinet with 3 energy guns and 2 personal. - - maptweak: Changes the sidearm cabinets in safe rooms to personal ones. Removes - sidearm cabinet in Brig Officer's office. Replaces sidearm cabinet in bridge - with a combined arms cabinet. - - rscadd: New sprites for Fire and Medical wall closets. - - bugfix: Fixes a bug that failed to update the medical wall locker sprite when - it got emmaged. - RedStryker: - - rscadd: Adds a lot of hairstyles. -2017-05-06: - Ornias1993: - - rscadd: Added anesthetics pump above main surgery operating table - - rscadd: Added Nanomed above health monitoring console - - rscadd: Added Medical intercom at the south-west corner beside general intercom - - rscdel: Removed Nanomed above Main surgery operating table - - rscdel: Removed medical intercom above ealth monitoring console -2017-05-07: - Ornias1993: - - tweak: Changed genetic damage scanner output to state genetic damage instead of - improper cloning -2017-05-09: - Asanadas: - - maptweak: Robotics control consoles have been added to the Bridge, and the Engineering - monitoring room. - - tweak: The Chief Engineer has robotics access. It's part of his job, you know. - Sbotkin: - - rscadd: Added a Military Police armband. -2017-05-13: - Asanadas: - - rscadd: Tajarans now have access to cultural veils. Tajarans will spawn with the - default, and job-specific veils with the proper HUD elements are available in - the loadout tab under Xenowear. - - rscadd: Added 5 new hairstyles to Tajarans. Ported from Polaris (ported from Aurora). - Chaoko99: - - rscadd: Added the large RCD cartridge to the autolathe. - - tweak: Halved RCD cartridge prices. - - rscdel: Removed a forced usage of passive wording in examine poses. ([Pronoun] - [Pose], instead of [Pronoun] is [Pose].) - Datraen: - - tweak: Ports soft lights featured in other servers. - Hubblenaut: - - bugfix: The hull wrap mode of the shield generator will now actually cover the - entire ship. - Orelbon: - - soundadd: Added new AI voice sounds. - - tweak: Lowered the volume on the AI voices. - Ornias1993: - - bugfix: Medical veil now selectable by medical contractor. - - bugfix: EAL, Sign language, and emotes will no longer use autohiss - - bugfix: Chapel Maintenance airlock, now needs maintenance access to open. - PsiOmegaDelta: - - rscadd: Can now set your desired FPS level under Character Setup > Global - RedStryker: - - tweak: Added the Science radio frequency to mining borgs. - TheWelp: - - rscadd: Lets AI controlled circuits to use the assembly's inputs via a verb. - - bugfix: Fixed AI controlled circuits not being moved correctly. -2017-05-18: - Chaoko99: - - rscadd: Made the engine input pumps more cryo-clamp-able. - - bugfix: Moved the maintainance deck saferoom APC. - Hubblenaut: - - tweak: Lubed floors can be cleaned with water. - - bugfix: Wet floors make a comeback after three months of stealthy disappearance. - Orelbon: - - rscadd: New sprites for the ion rifle. - - rscadd: New sprites for the stun carbine. - - bugfix: small eguns should now have the right sprites for east and west. - Ornias1993: - - bugfix: Oxygen_pump and Anestethic_pump, now correctly checks if the mask slot - is blocked - - rscdel: removed on click application to user of Oxygen_pump and Anestethic_pump - - tweak: Oxygen_pump now gives out Breathmasks instead of gasmasks - - tweak: anestethics_pump now gives out Medicalmasks instead of gasmasks - - bugfix: Maintenance hatch and replacing tanks works now on Oxygen_pump and Anestethics_pump - - tweak: removed organic requirement for removing the oxygentank of Oxygen_pump - and Anestethic_pump - - bugfix: UI of oxygen_pump and Anestethics_pump works now - - rscadd: AI can now click to open UI of oxygen_pump and Anestethics_pump - - rscadd: Added the Anestethics Mask for the Anestethics_pump - - rscadd: Added the Emergency Mask for the Oxygen_pump - - spellcheck: Fixed brusies typo on Torch Holodeck disclaimer - RedStryker: - - rscadd: Added boxes of armbands for emergencies to the heads of the Security, - Medical, and Engineering departments. - - tweak: Allowed a few more roles to use flats. - - rscadd: Added many new clothing items as accessories. - - tweak: Changed the color of the cheongsam to allow it to use the color gear tweak. -2017-05-20: - Chinsky: - - rscadd: All toys guns are now fitted with red bits on the barrel so you can visually - tell them apart! Very safe! Fun for whole family! - - rscadd: Can use wirecutters on toy revolvers to snip those off. It also changes - examine name to 'revolver' instead of 'toy gun'. In case you didn't know, those - are proper guns and you can hold people hostage with those. Just saying. Do - not try at home. - Cirra: - - tweak: Attempting to place an airlock brace without setting an access requirement - now informs you, and asks for confirmation. - Orelbon: - - rscadd: Added inhand sprite for stun rifle. - Ornias1993: - - bugfix: Everyone including military can now take sunglasses from loadout. -2017-05-23: - Asanadas: - - tweak: Maintenance Drones now require an account of age 3 days or greater. - Chinsky: - - tweak: Bunch of virus changes. Buckle up, kiddo. Praise Nurgle - - rscadd: Adds Space Cold event. Spawns a harmless virus that can be treated with - cold medicine. Unless you're irradiated and it mutates to kill everyone I guess. - - rscadd: Adds space cold medicine (dextra-something) to white first aid boxes. - Can also be made by mixing paracetamol+sugar. Eating it will stop weak viruses - symptoms from manifesting. - - rscadd: Humans now have crude immune system simulation. Keeping your immunity - high makes it easier to shrug off viruses, extremely low (15% and less) immunity - can get you random space cold-level infections. Get lemons for boosting it, - spaceacilin ruins it. It recovers to norm over time. - - tweak: Spaceacillin now ODs at 15u instead of 30u. - - tweak: Spaceacillin now metabolizes faster. It was 60+ minutes for 15u, 30 minutes - now. - - tweak: Spaceacillin boosts immune system effective rating. It acts as a multiplier - to natural one, from 1x at none in blood to 2x at OD threshold (15u), and you - can go higher if you don't mind ODing. Also if natural immunity is lower than - the boost, boost would just replace it. - - tweak: Spaceacillin has three stages now. Below 10 units it acts kinda like now, - blocking badness 2 virus effects. Virus would still progress though, but effects - won't fire. It's enough for any random event virus effects. - - tweak: Above 10 units it would completely stop progression of badness 2 viruses - and stop effects of badness 3 - which is usual stuff ou get from viro labs. - Again, clock will still be ticking. Also at this stage it starts lowering your - natural immunity value. - - tweak: And then, there's OD. OD stops badness 4 (e.g. Gibbingtons) from manifesting, - and stops ticking of lower viruses. It screws your immune system even stronger - too. - - tweak: It's also not 100% protecting you from infection now. 15u and above give - old 100% protection, scaling with lower value in blood. - - tweak: Some tweaks to virus annoyningness. Hard delay between firings (25-40 seconds - between message-only syndromes), emote syndromes (groaning, moaning, screaming) - are now single syndrome to make it rarer. Internals actually stopping you from - spreading viruses. No airborne viruses in vacuum. - - tweak: As an unrealated bonus, first aid (white and fire) boxes now have paracetamol - bottles because damn it's easier to score opiates than that. - - tweak: Oh also remember how when you graft yourself Tajaran arms it kills you? - Not when your immunity is floored. Just saying. - Orelbon: - - maptweak: Tech storage has been moved to deck two, where the abandoned officers - mess was located. The officers mess has been moved into the previous location - of tech storage. -2017-06-03: - Ace McLazer: - - rscadd: Added Towels to Sweatmax products. In all kinds of colors! Ported from - Polaris. - Albens: - - maptweak: Added a new Bridge - - rscadd: Added a Bridge Officer's locker, and 'Standard' Tablet/Laptop that spawns - on the Bridge. - Cirra: - - rscadd: As a failsafe, the maintenance hatch on a cyborg/android/robot will now - unlock upon death, allowing easier recovery of the brain inside. - Hubblenaut: - - rscadd: Added coffee pots and carafes, available in the dinnerware vending machine. - - tweak: Hot drinks now have vapor on them. - Orelbon: - - maptweak: Engineering locker room and storage have been tweaked. - SiegDerMaus: - - rscadd: Adds a new magnetic flechette weapon, available via uplink. - Sunsar: - - tweak: Made light bulbs a bit brighter. Engineering should be less of an eyestrain - now. - ZeroBits: - - rscadd: Added Barbecue Sauce as a Condiment. - - tweak: Changed the mailroom flaps to airtight flaps. - - rscadd: Added a second mop to custodials. - - rscadd: Added rings to the loadout selection. -2017-06-06: - Asanadas: - - rscadd: High jittery levels will now cause heart damage. - - rscadd: Individuals with robotic hearts will no longer suffer from jitters. - Ithalan: - - rscadd: Added turtleneck sweater as accessory. -2017-06-11: - Asanadas: - - rscadd: There's now a neat lore splash window which will spam all new accounts - under 7 days old. Read it! - Chaoko99: - - tweak: Made Digital Valves removable. - Hubblenaut: - - rscadd: Digital warrants can now be archived, so they don't have to be deleted. - - rscadd: Security gets automatically notified on new warrants through their HUDs. - - tweak: Improved the digital warrant interface. - Leshana: - - tweak: Optimized the unified radiation system. Made the radiation cutoff level - configurable. - - bugfix: Standing still won't save you from radiation storms. - Ravensdale - original work by anewbe: - - bugfix: Removed the exploit by which you could gain cargo points by ordering plastic - crates. - - rscadd: Upped cargo point gain by 50%. - Unknown: - - maptweak: Atmoshperics has been edited to make it easier to change and modify - pipes. - ZeroBits: - - rscadd: Added Independent Language. - - rscadd: Added signet rings, which act as stamps and rings, and can be personally - claimed by clicking them in-hand - - tweak: Rings are now compatible with the material system, and can be made via - sheets. - - bugfix: You can no longer clip rings like gloves, and all species except Diona - can wear them now. -2017-06-17: - Asanadas: - - bugfix: No longer will you be able to freely pass onto upright tables by moving - onto them from a tile which has a flipped table. - Chaoko99: - - rscadd: Added a mass-defile cultist rune. Buyer beware; it may kill you. - - rscadd: Cult tiles play a snazzy animation on creation. - - rscadd: The soulstone shard now notifies the player when it is full, asks if you - wish to release the spirit within. - - rscdel: Removed Manifests from the cultist repertoire. - - rscdel: Removed defile giving cultist levels. - - tweak: Changed the values for cultiness (The value which controls spell levels). - You will need to either recruit 10 cultists, or perform 10 sacrifices to unlock - Nar-Sie. - - tweak: Nerfed cultist robes. Buffed cultist voidsuits. The latter of which is - still impossible to obtain. - - bugfix: Made the restricted/protected/blacklisted roles for cultists torch-compatible. - - bugfix: Fixed construct and familiar spells. - - rscdel: Removed Vox Pariah. - Chinsky: - - rscadd: Can now rig assemblies/devices(e.g. radio signalers) to trigger when crate - is opened. Click wires on open crate, then click with assemblies. It would trigger - when opened next time. Use wirecutter to unrig. - - tweak: AI cores got new step in construction. You need to swipe an ID with Upload - access (or emag) to hook them into the systems. - - rscadd: Added rubber masks and suits to party crate. Dress up as war hero or SCG - secretary or a naked tajara like you always wanted. - - tweak: Made SHOCK mode on tasers literally useless, ruining security gameplay. - Does bit less burn damage, and much less straight up stun damage. Not 'better - tase mode' anymore. - - bugfix: Fixed their primary function actually never working. If you hit arm or - hand with the beam you can disarm someone (even diona, even robbit, pain reception - doesn't matter). If you hit leg, they might drop, higher chance for foot. - Hubblenaut: - - bugfix: Manifold pipes show up properly on t-ray scanners now. - - bugfix: Space lube now properly disappears. - - tweak: Can now put items in vendors by using click and drop, thus allowing screwdrivers, - multitools and similar. - - tweak: Space heaters will now first attempt to draw power from the local APC. - sabiram: - - rscadd: Research module robots now have access to a welding tool. -2017-06-19: - Chinsky: - - tweak: Speed now matters when flying into meteor field. Still - 25% the meteors, - below 0.3 - 60% of usual, normal otherwise until above 3 speed, where you start - getting double the fun. Also if ship is moving most meteors will fly in from - front and sides. - - tweak: Changes spess dust event. It used to be a single wave of quasi-meteors - that exploded for a bit before dying. There were no further waves until you - left and came back. Now waves keep coming ~twice a minute. Dust itself is now - a pile of micrometeors - basically space bullets. It wouldn't do a lot of damage - to the hull, but can break windows and makes EVA pretty damn dangerous. - - tweak: SCG had mastered the secret art of 'background check'. CO and XO are no - longer be eligible for roundstart antag roles on Torch. Can still be converted - in round - - bugfix: As a side effect, they aren't going to get rev'd anymore, that was a bug. - ZeroBits: - - rscadd: Added the ability to have multiple loadouts per character. - - rscadd: Added magic invisibility ring and reagent rings. - - tweak: Rings are now a child of clothing rather than gloves in order to appease - code gods. - - tweak: Gloves can now be worn over rings (much like magboots with shoes). - - rscadd: Added coffee cups to the loadout selection. - - rscadd: Added threebread, blueberries, pancakes, and two new flavors of ice-cream. -2017-06-30: - Chaoko99: - - tweak: Poppies now contain tramadol. - - bugfix: Fixed the phrasing in the set-pose verb. - Chinsky: - - rscadd: NT has sent some more testing supplies. Nothing to see really. RDs can - find details in a super secret folder in their office. Others - do no peek, - ok. - - tweak: Surgery now produces normal wounds instead of snowflake 'open incisions'. - Do not be alarmed, do not bandage those if you plan to continue surgery, clamp. - If incision was made with scalpel, you'll be able to cauterize it, healing a - lot of damage. - - tweak: Skull/ribs surgery changed, now you just need to use the saw to crack em. - Fractures count as being open too. Retractor steps for ribs etc are gone, use - normal bone repair surgery aferwards. - - tweak: Coincidently you can just rip them apart with cut wounds to get access - to innard surgery steps. It takes much more damage than surgical incisions though. - - tweak: Bones now fracture when damage is taken rather than from existing damage. - Meaning if you fix bones, they won't refracture immediately without taking damage. - - tweak: You don't need to crack open the bones to get shrapnel now. If you can - see it on examine, you can take it out with just a retracted incision. - - rscadd: Added new surgery step - disinfecting wounds. You can use sterilizine - or high proof booze, in spraybottles/droppers/bottles/glasses/buckets. Works - same as ointment. - ParadoxSpace: - - rscadd: Adds darksight to space adapted humans - Ravensdale: - - tweak: Cultists now speak in the cult tongue when activating runes instead of - their default language. Done in case a changeling cultist ever becomes a thing. - - rscdel: Removed special human kabobs and burgers. Lumping all items that are 'red - meat' together. - - tweak: Adjusted AI tracking verbs. AI will now have a more difficult time tracking - specific people depending on method and if person has their face concealed. - - tweak: To bring some consistency for the above, also adjusted how names appear - on mobs that have some sort of face covering or a face that is... not there. - Zucchinsky: - - rscadd: Beeg medical changes. Like holy crap. Get a crash course on https://wiki.baystation12.net/index.php?title=Zuhmed_Guide - - rscadd: Death now occurs when brain dies. Brain's health replaces overall 'health' - - rscadd: Death is now FINAL, baring relacing. Don't let that brain die. - - rscadd: Crit now exists as flatlining, the heart failure, or as fancily 'asystole'. - It happens when heart is damaged, not enough blood or oxygen in blood, or high - levels of shock. - - rscadd: In crit you do the usual gasping thing and take brain damage. USE CRP - or defib to revive em. If they die before you crack ribs, you hadn't tried hard - enough. - - rscadd: '''Toxins'' damage is now overall organ failure, basically sum of organ - damage. Poisons will try to destroy liver and kidney first, and will damage - the rest after those two are down. Some poisons go straight for vitals. Liver - will heal self until it''s too damaged.' - - rscadd: '''Suffocation'' damage is now used as modifier to your blood levels. - If you don''t get enough air, you get effects of low blood basically.' - - rscadd: Defibs now restart failed hearts instead of reviving dead. Also named - differently now. - - rscadd: Most scanner readouts are changed now. Instead of damage values they report - vitals (pulse/blood pressure/brain activity) and general state of damage. - - rscadd: A D R E N A L I N E. When you take a good chunk of damage at once (15 - or more in one hit) you generate bit of adrenaline reagent according to damage - taken. It acts like strong painkiller / pulse raiser for a tick or two, becoming - weaker after that. - - rscadd: FBPs and IPCs now have batteries in their chests. They have HYPERCELLS - and drain when they stand (unbuckled) or move around (double drain then). - - rscadd: Sleepers now have stomach pumps, same as filtering but for ingested stuff. - - rscadd: Cultists yo - sacrifice rune now works on someone in asystole rather than - full braindeath. Knives now count for all steps needed to cut out the heart, - and cult runes count as surgery spots. Just sayin'. - - rscadd: Bunch of chems is different now. First off, none 'reduce' toxins damage, - aside from peridaxon cause tht's organ damage now. - - rscadd: Peridaxon only treats brain damage if it's not too severe. Get Alkysine - otherwise. - - rscadd: Alkysine will only work if brain is fully oxygenated, so refill blood - and air first. - - rscadd: Dylovene removes toxic reagents from blood. - - rscadd: Dexlaine fools brain into thinking you got at least 50% of air you needed. - For Dex+ it's 80%. - - rscadd: Cryox/Clonex also have Dex/Dex+ effect respectively. - - rscadd: Inapro prevents suffocating while in asystole, slows pulse down (which - slows bleeding a bit) and has mild painkiller effect as it did. -2017-07-06: - Chaoko99: - - tweak: Added a full belt to engineering lockers. - - tweak: Removes all (direct) references to Metroids from our codebase. Not being - sued is nice. - - imageadd: Replaced our RPED sprite with /TG/'s, and added a little animation atop - that. - Chinsky: - - rscadd: Can now scoop corgis up, like cats or nymphs etc. - - rscdel: Can also use them instead of sausages in microwave to make hotdogs. Geddit, - hehehe hot dogs. Riot. - - tweak: GUPpy, Calypso and Aquila now can share destinations, as long as they can - fit. - - rscadd: Excavation prep closets now have BLUESPACE FLARES. You can activate those - in a nice open spot to create a new navpoints for shuttles (ones mentioned) - to go to. - - rscadd: Exploration shuttles (Calypso/Guppy/Aquila) now can share destinations - (with some other shuttles too). - Heptagon49: - - tweak: Replaced the synthetic lung sprites with something more realistic/futuristic. - - rscadd: Added artificial and assisted lungs to the loadout menu. - Hubblenaut: - - rscadd: Coffee cups are now available across the ship. - - tweak: Coffee cups now have reagent fill states. - - bugfix: Fixes glass of cup of tea. - thasc: - - bugfix: Ghosts can hear binary chatter again. -2017-07-09: - Chaoko99: - - tweak: Made it so a butterfly knife spawns in your hand instead of on the floor - when completed. - Chinsky: - - tweak: Bluespace jump effects have changed. Engineers found that some duct tape - got unstuck because of a WD40 leak, so they fixed it. Now you can't zoom through - the walls, and visibility is a bit better. You also don't get confused forever, - just for a minute or so. There are some... unforseen side effects, but they - seem harmless. A word from Chief Tech (before his disappearace) - KEEP IT REAL. - Hubblenaut: - - rscadd: Gives holowarrants their own handheld item. - - tweak: Holowarrants will now broadcast updates on warrants instead of security - HUDs. - - tweak: Authorizing a warrant using the holowarrant will now broadcast a message. - ParadoxSpace: - - rscadd: Unathi across the universe have been informed of new lore changes, and - can now be a maximum age of 260. - Ravensdale: - - bugfix: Exosuit/mecha pilots can once again operate airlocks from the safety of - the cockpit - mkalash: - - tweak: Replaced adminhelps with a ticket system. -2017-07-14: - Atlantiscze: - - tweak: Max pressure on omni filter/mixer output is now capped at approx. 7500kPa - - tweak: Atmospherics pressure tanks can now be set to output up to 15000kPa - Heptagon49: - - bugfix: Changes the recipes for Methylphenidate and Antidexafen so they no longer - overlap. Methyl now requires lithium instead of hydrazine, and antidexafen now - requires carbon instead of sugar. - - tweak: Lowered the max damage of internal organs, except for the brain and cortical - stack. - - tweak: Prosthetic internal organs are now stronger then regular organs. - - tweak: Kidneys are actually important now. You will slowly take toxin damage if - they are missing or busted, same as the liver. - - imageadd: Changed the sprites for the prosthetic liver and kidneys. - - rscadd: Prosthetic lungs half the toxin damage taken from breathing bad air. - - tweak: Made assisted organs slightly worse. - Hubblenaut: - - tweak: Air shutters will not be automatically opened by a clearing air alarm when - it would be dangerous to do. - ParadoxSpace: - - rscadd: Unathi across the galaxy have realised the implications of having tails, - and now use them to attack instead of their legs. - atlantiscze: - - rscadd: Can now order OCP and plasteel from cargo. Furthermore, 10 and 50 sheet - crates are available for some more expensive sheet types, with 50 sheet crates - being more cost efficient. - mkalash: - - tweak: Replaced tgui ticket panel with an autoupdating basic Topic() one - - rscadd: Added time stamps to messages on the ticket panel, and a measure of how - long an unanswered ticket has been open - - rscadd: Added a PM button to the ticket panel - - tweak: Adminhelping with an open ticket will either send another adminhelp to - the same ticket, or PM one of the assigned admins if there are any - - bugfix: No more sanitation weirdness in ticket panels - - tweak: A ticket is no longer created anyway if an admin cancels sending a PM to - someone who didn't have a ticket - - bugfix: Fixed admins being able to create tickets for logged out players - - bugfix: Fixed mods and trialmins being unable to use the ticket panel -2017-07-24: - Hubblenaut: - - tweak: If a cycling airlock is already near the target pressure, pressing the - buttons will toggle the doors instead of making it reenter the cycle process. - - bugfix: Fixes blood splatters reappearing when lifting or putting floor tiles - down. - PsiOmegaDelta: - - rscadd: Species may now be restricted from selecting certain branches, ranks, - and occupations as according to lore. - Ravensdale: - - maptweak: Changed the colours of the pipes in atmosia to follow older color 'codes. - SiegDerMaus: - - rscadd: Added uniforms for Miranians for future events.. - TheWelp: - - rscadd: Allows Vox to be used in character setup. They are still restricted rule-wise - as they were before. -2017-08-01: - Ace McLazer: - - rscadd: Added A grunt emote for the grumpy. - - tweak: Tweaks Medibot statement for accuracy. - - imageadd: Adds Renegade AntagHUD Icon. - - imageadd: Swaps Medical belt Icon to blue - Crushtoe: - - rscdel: Removed transformation sting. - FTangSteve: - - bugfix: Fixes dionaea jitter. - - bugfix: Fixes dionaea limb regen. - - rscadd: Adds species based footprints when barefoot. - - rscadd: Gives GAS the ability to move over gaps or stop fall damage based on air - pressure. - - bugfix: Fixes some bugs with the GAS cloaking and stance switching. - - bugfix: Fixes damage overflowing max limb damage being negated. - - tweak: Makes wounds on limbs more realistic by letting them overflow max damage. - - rscadd: Adds ability for limbs to be injured irreparably, requiring amputation - or removal. - Heptagon49: - - imageadd: Adds everyone's favorite hotdog-based meme to the AI icon list. Now - contains 2% real corgi flavor! - Hubblenaut: - - rscadd: Replaces flashlights in Security with maglights. - - tweak: Removes security HUD sunglasses from lockers and makes them available in - loadout instead. - - tweak: Personal lockers now display their owner's name in their name. - - rscdel: Removes the box of military police armbands from CoS' locker. - - rscdel: Removes the box of solgov police badges from the Brig Officer's locker. - - bugfix: Lockers reset all random pixelshifts of their contents. -2017-08-07: - Atlantiscze: - - rscadd: Added ability to ban devices from the NTNet network, through the administrative - utility program. - - rscadd: Security cyborgs now get access to warrant program - - rscadd: Engineering cyborgs now get access to supermatter monitor program - - rscadd: Mining cyborgs now get access to supply management program - - tweak: Holowarrant now checks for access when authorising, similar to how the - program does it. - - rscadd: 'Added new program to the modular computer framework: NTNet Access Decrypter. - This program is available for download on all emagged devices, but relies on - ID card slot hardware. When executed it slowly (takes about 3-6 minutes, depending - on the device''s CPU) hacks the network and when finished adds a random access - to the ID. ID must be kept inside the device while running. Can be repeatedly - used to get multiple accesses. Has chance of yielding access that''s already - present on the ID, and therefore will do nothing wasting some time.' - Broseph Stylin: - - rscadd: Added weight lifting machines and punching bags. They provide no mechanical - benefits, and will deplete your nutrition as they're used. The weight machine - has 3 setting which can be changed with a wrench. You must be on harm intent - to use the punching bags. - - maptweak: Remapped the Deck 3 abandoned office, near EVA Storage, into a gym. - Cirra: - - bugfix: Fixed an exploit which allowed for the creation of infinite metal, using - the circuit printer. - CrimsonShrike: - - rscadd: 'Added new accesory slot: insignia' - - rscadd: Allowed more accesories on dress and service jackets. - - rscadd: Security vests now come with stripes to hang badges and other similar - insignia accesories. - - rscadd: Detective coat has now a slot for the badge too. Gone are the days of - flashing suspects to show your identification - - rscadd: Colonial Marshals have now learned to keep their badges visible aswell. - - bugfix: Emaged light replacers will now properly place explosive lights. - Datraen: - - rscadd: Adds directional states for softlight overlays. - - bugfix: Fixes lights on rotated views. - FTangSteve: - - bugfix: Fixes bug that stopped wounds from healing. - - bugfix: Fixes bug that made brains not take damage from low blood unless they - already had damage. - - bugfix: Fixes bug that made moderate blood loss damage your brain until death. - - tweak: Makes the irreparable point twice the limb cutoff threshold instead of - equal to it. - - tweak: Prevents vital external organs from being irreparable, instead they go - to critical. - - tweak: Updates advanced scanners with new wound severity levels. - - tweak: Smooths the dexalin and dexalin plus effectiveness curves. - - bugfix: Fixes pulling grabs when the affected person can't move. - - bugfix: Fixes GAS being able to use advanced tools when nabbing. - - bugfix: Fixes grabs with the ladder_carry ability carrying people up ladders. - - tweak: Stops GRAB_NAB base grabs from throwing people. - - bugfix: Allows GAS to remove lights by hand. - - bugfix: Moves GAS eyes below the lighting layer. - - bugfix: Stops mice from pushing crates, lockers, etc. - - tweak: Stops mobs from using pull to move larger mobs (grabs still work). - Heptagon49: - - rscadd: Adds the ability to toggle locks on secure lockers and crates with alt-click. - - rscadd: Adds the ability to open and close fire extinguisher cabinets with alt-click. - - rscadd: Adds the ability to rotate chairs with alt-click. - - rscadd: Adds the ability to change reagent amount tranfer with alt-click. - - tweak: Lowers the odds of vending machines going absolutely ballistic. - - imageadd: Adds a new robot sprite to the security module selection. - Legius: - - bugfix: Sign Language is no longer displayed to clients who are unconscious or - asleep. Probably. - PsiOmegaDelta: - - rscadd: Players with custom AI displays can now have multiple entries, should - they desire. - - rscadd: Players with custom AI displays can now freely select between their custom - and available displays. - - rscadd: Players with custom AI displays no longer have to supply the crashed/dead - AI state. - - rscadd: Traitor/Malfunctioning AIs now have access to additional AI displays. - SierraKomodo: - - rscadd: Added berets that allow a custom color to be set to the loadout menu. - - bugfix: fixed transparent pixels in white beret sprite. - TheWelp: - - rscadd: Adds deity follower tracking and better deity eye in general. - - rscdel: Removes need for deity floors and respective spell. - - rscadd: Nar-Sie zombies will automatically get all of their blood filled when - zombized. - - rscadd: Nar-Sie zombie's breathe will convert faster. - - bugfix: Fixes nar-sie blood forge being automatically unlocked. - nearlyNonexistent: - - rscadd: Added vending machine to the code that contains dice, cards and related - toy type items. One is in the mess hall. - - maptweak: Adds paper for civilians in the mess hall and lounge. Removed a stool - in the mess hall to add the vending machine. -2017-08-12: - Atlantiscze: - - rscadd: Cyborgs can now manipulate IV drips and chemistry grippers can now hold - blood packs. - - rscadd: Improved some SMESes around the station - mainly the Engine SMES. - - rscadd: Shuttles now have a SMES with single transmission coil in them. Primary - input is the main grid, secondary input is a PACMAN generator. - - rscdel: Removed stashes of phoron from the shuttles (they can operate without - generators now) - - bugfix: Fixed bug which caused shuttles to be remotely powered even after cable - connection was severed by jump - - tweak: Rewired SMESes in engine SMES room. Engine - Core SMES can now be charged - from main grid, for example through solars. - - rscadd: SMES and PSU units can now have more than one input terminal at once. - Broseph Stylin: - - tweak: Changed access requirements aboard the Aquila. Helm and Secure Storage - remain as Aquila-specific access, but all other areas have been made SCG Crew - or all-access. - - tweak: Changed sidearm cabinet access requirements. Only line officers, the RD, - the SEA, and the Brig Officer can unlock them now. - Chaoko99: - - bugfix: Makes title1 run at roundstart. - Crushtoe: - - maptweak: Added a First Deck Lounge in the Observation Bubble. - Devildabeast: - - rscadd: Defines an armed role for the Loadout, which includes all jobs that are - allowed to carry weapons from round start. - - rscadd: Adds Scientist and Researcher to semi-formal roles. - - tweak: Frontier clothes are now its own separate item instead of a formal outfit - and can be worn by non-military roles. - - tweak: Holsters can now be selected by armed roles. - FTangSteve: - - rscadd: Added a paramedic alt title for medical contractor. - - rscadd: Added a admin debug verb that lets you see a health summary, same as the - advanced scanner in medical. - - tweak: Makes splashing solutions and using eye droppers only work when not on - help intent. - - tweak: Makes dylovene more effective to help with liver damage and recovery from - severe damage. - - bugfix: Fixes necrotic internal organ surgery. - - bugfix: Changed how toxins work so they now are effective. - - bugfix: Alcohol is once again potentially damaging. - - bugfix: Increases processing accuracy for liver and kidneys. - - bugfix: Radiation now does damage again. - - rscadd: There is now a popup after taking enough brain damage as a stand-in for - clone memory disorder etc. - Heptagon49: - - rscadd: Adds a 1% chance for a diona nymph to pop out when you activate a vending - machine. - - imageadd: Adds a few vending animations. - - tweak: Changes the NutriMax icon from the nutrimat to the pre-existing, but unused, - nutri. - Superbee29: - - tweak: Telecommunications servers no longer know the exact race of a speaker. - TheGreyWolf: - - rscadd: Mechanical and assisted kidneys and livers are now available in character - setup. - TheWelp: - - rscadd: Adds two new Nar-Sie phenomena. - - rscadd: Adds two generic feats involving power generation. - - tweak: Communication phenomena can now be used on non-cultists. We will see if - this is a good change. - - tweak: Tweaks a few of the phenomena names to be more apparently phenomena. - - tweak: Buffed Nar-Sie's power costs (reducing them). - nearlyNonexistent: - - rscadd: Cardemon instructions! Now you can actually play those weird pokermon - cards rather than just look at them. -2017-08-19: - Atlantiscze: - - rscadd: Re-adds on-join announcements to all ranks. - - tweak: Most jobs are announced on relevant departmental frequency (if they have - one). During red alert all jobs are announced on main frequency. - - tweak: Canisters now once again use NanoUI, instead of tgui. Performance on some - devices should be considerably better. - - tweak: AI can once again track people by clicking their name from radio messages, - even when their face is obstructed, assuming they are at least wearing a matching - ID. - Chinsky: - - tweak: Slimetoxin. Slimetoxin changed. Instead of pop and go slimeficiation it's - now a life threatening process. Slime toxin metabolizes slowly, and deals fair - bit of toxins damage. For every unit or so metabolized, it mutates one limb. - Once every limb mutated, there's a 10% every tick to fully mutate into a slimegirl. - If you're lucky, you might mutate right before death and that'd heal your all - wounds! That' a great idea! - Devildabeast: - - rscadd: Adds a cyborg recharging station to the Auxiliary Head. - - rscdel: Removes toilet from said Head. - FTangSteve: - - tweak: Adds more signals letting someone know they have toxin damage and giving - them a chance to get help. - - tweak: Adjusts how often internal organ damage messages are displayed. - TheGreyWolf: - - rscadd: Added hoods to standard hoodies. - tlc2013: - - tweak: Updates the Lobby and Nuclear Explosion cinematics to be more Torch-y. - Special thanks to 50_n00b for the art. -2017-08-23: - Broseph Stylin: - - tweak: The Body Scanner console and IV drips are no longer dense and can now be - walked through. - Chinsky: - - rscadd: Air analysers now have verb to be toggled into advanced mode. It displays - gas properties like specific heat and molar mass. - - rscadd: Air analysers can also now be used on pipes and various atmos machinery - to inspect the contents. - FTangSteve: - - tweak: Makes it easier to recover people from severe radiation damage. - - tweak: Puts a limit on recovery time for surgery with peridaxon, two minutes after - death the organ will no longer be savable. - PsiOmegaDelta: - - rscadd: Underwear is now handled as actual items. - - tweak: Your own underwear can be removed using the 'Remove-Underwear' verb. - - tweak: You can remove others underwear through the strip-menu. - - tweak: To put on underwear, on yourself or someone else, click the target mob - with the underwear in your active hand. - - tweak: The wardrobe now offers a limited quota of underwear if replacements are - needed. - - tweak: You can increase this quota by returning underwear items. - TheGreyWolf: - - rscadd: Tattoos are now available in character setup. - ZeroBits: - - bugfix: Manuals now point to the correct wiki pages. - - tweak: Cleaned up and organized manual files. - - rscdel: Deleted redundant manual that pointed to the same page as another. - Zuhayr: - - rscadd: Diona nymphs can now pick up and carry a small item. Use the drop_item - command or the Home key to drop it. This can also be used to remove your hat. - - rscadd: Losing your head is no longer necessarily lethal, unless you're the kind - of fat nasty trash who has a brain or other vital head organ. - chinsky and mkalash: - - rscadd: 'A randomly generated exoplanet of one of the following for types is now - available for away missions:' - - rscadd: Grassy exoplanets, lush with (probably dangerous) flora and fauna, but - not much else - - rscadd: Snowy exoplanets, like grassy but colder and with less life - - rscadd: Desert exoplanets, rich with minerals below the surface, which is covered - with dangerous quicksand - - rscadd: Mountainous exoplanets, one of the three other options, but also covered - with surface minerals - - tweak: Additionally, the airlocks of the three shuttles aboard the Torch now cycle - to the external atmosphere. - nearlyNonexistent: - - tweak: Fixes the inability to make enchiladas by making popcorn require salt. - Enjoy your salted popcorn. - sabiram: - - bugfix: Maintenance drones now once again take damage and recieve alarm notifications. -2017-08-27: - Chinsky: - - rscadd: Added a ton of usless gasses. Overall fireball planets should be slightly - more rare now - - tweak: Lighters now have fuel storage inside, and will shut down if it's empty. - Can refill at any welder fuel tank. - - rscadd: Can now dig graves planetside. Use shovel on ground to dig a pit. Can - place grave markers with wooden planks. - - experiment: When you speak now, your first name is replaced by your rank in messages. - Only affects those with military rank and wearing ID with it. - FTangSteve: - - rscadd: Adds insulated gloves for nabbers. - - rscadd: GAS can now be chemists and engineers.. - Minijar: - - bugfix: Fixes holosigns to appear above doors - atlantiscze: - - rscdel: Removed Turrets Focus Enhancer malf AI hardware, it is obsolete now. - - rscdel: Hack Camera replaced with Reset Camera. No longer allows camera upgrades, - this has been shifted to Machine Upgrade. - - rscadd: Added Quantum Knowledge Databank malf AI hardware. On use it advances - all research by one level. Single-use. - - rscadd: Added T5 Machine Upgrade ability, behind Machine Overload. Right now only - works on APC, SMES, Turret, Turret control, Camera. It is easily expandable - to any machinery in the future. - - rscadd: Adds four new abilities in a new passive tree. T1 prevents intellicard - transfers (toggleable), T2 removes BSOD/lockout from APCs, but reduces CPU generation - (toggleable), T3 prevents hack failures, and allows you to complete system override - silently and T4 prevents fax/emergency messages from going through. -2017-08-30: - Chinsky: - - rscadd: Health analyzers, advanced scanners and suit sensors will now report blood - oxygenation instead of just how well it flows in general. - - rscadd: If you go near an edge of exoplanet, you get warped around, kinda like - in space. Don't get lost, nerds. - - rscadd: Lush planets now have some drillable minerals too - some coal with a small - chance of diamonds or uranium. - - rscadd: Movie titles music now uses lobby music preference toggle to see if it - should play to you. - Crushtoe: - - maptweak: The derelict is no longer complete trash. There's actual rooms and plenty - of loot to loot, too! - - rscadd: Added random spawns for hostile mobs on the Derelict. Now the good loot - has a guardian pike/carp/viscerator. - FTangSteve: - - bugfix: Updates GAS to properly use the bloodmed system. - - bugfix: GAS eyes are no longer vulnerable to phoron in the air. - - bugfix: Fixed bug with humans not taking oxyloss after two minutes of not breathing. - - tweak: GAS now store more dexalin. - - tweak: Updates unit tests to include GAS. - - tweak: Updates unit tests to work with adjusted oxyloss system. - Minijar: - - tweak: Changes blue alert to orange - - rscadd: Replaces the bluespace artillery cannon with a prototype RUST fusion reactor - for engineering to experiment with. - - tweak: Edits the RUST manual to fit the new setup. - PsiOmegaDelta: - - experiment: Overhauls how reagents are identified, affecting both chemistry and - food. Due to the large scale of these changes more or less subtle bugs may have - crept their way in. - ThatOneGuy: - - rscadd: Can now play as the Explorer Department if you are a EC member. If a complete - failure, up for removal. - - rscadd: Calypso remapped for more cargo space and crew area. Bathroom and Cryo - deleted. - TheGreyWolf: - - rscadd: Fixed up pathfinder and explorer loadout. -2017-09-03: - Earthcrusher: - - bugfix: The electrified arm (e-magged/traitored Engineering borg module) now behaves - like a stun baton. It can be toggled on/off. - - tweak: Activating the electrified arm will now cause the borg to glow a faint - blue, giving away that they are using it. - - imageadd: Added a unique sprite for the electrified arm. - Kelenius: - - tweak: Pulling a knife out of your boot or putting it in no longer makes a message. - Minijar: - - bugfix: Adds atmospheric systemst the rust chamber - - bugfix: fixes the rust airlock - - bugfix: Removes accidental vacuum flooring - ParadoxSpace: - - rscadd: Adds Selenian, a lunar language for those who still hold onto that silver - spoon. - - rscadd: Adds Spacer, a language of Dutch origin for non-landlubbers. - - rscdel: Took Tradeband out back. - dryerlint: - - rscadd: Added ability to put paper bundles directly into paper bins and nano-printers. - - rscadd: Clicking on paper while holding a paper bundle now adds the paper onto - the bundle. - - rscadd: Added new type of crate - the paper refill crate - filled with 30 blank - papers. Intended to be used for refilling bins and printers. - - maptweak: Placed paper refill crate in Deck 1 Maintenance near the Conference - Room. -2017-09-08: - Chinsky: - - rscadd: Calypso is dead, new shuttle is here in same role - Charon. - - rscadd: Can now hide custom loadout items that are not allowed for your job. The - button's in top of loadout menu. Makes browsing less of pain for those with - lots of restrictions. - - rscadd: Wildlife will now respawn if more than half is killed off. Beware. - - rscdel: Added new type of planets - settled ones. Full of xenoarch-filled garbage - piles and hostile robots. - Cirra: - - bugfix: Protein is no longer present in food items which aren't supposed to contain - it, such as skrellsnax. - CrimsonShrike: - - bugfix: Stacking machine will now stack materials again. - FTangSteve: - - tweak: Updates engineering contractor to have access to atmos, EVA, etc. - Kelenius: - - tweak: Defile counts towards rune unlock again, at a rate adjusted for Torch. - - tweak: Mass defile rune won't kill you with bloodloss when you draw it more than - once (cost lowered from 80 to 20). - - bugfix: Soulstones should work properly now. - Minijar: - - rscadd: Adds pilot voidsuits to the Calypso along with a cycler. - TheGreyWolf: - - rscdel: Removes the Zhan-Khazan outfit from the loadout (Taj relevant only). - - rscadd: Added a NT pilot specific voidsuit, currently none are mapped in. - Zuhayr: - - tweak: R-UST backend/manual changes. -2017-09-13: - Chinsky: - - rscadd: Changed way lung damage affects people. Instead of straight up oxyloss, - it now makes you require higher oxygen pressure - so you can work around it - with high pressure internals. Of course it's not 100% failsafe, as blood coughing - and breathing stops still remain. - - rscadd: Inapro does more things now. It can heal brain damage up to 60, and also - slows down brain damaging a general, more effective at higher oxygenation. - - rscadd: Health analyzers report brain damage a bit different now. They don't report - damage that will self-heal without meds. New stage 'minor brain damage' covers - range that can be healed with inapro. Rest are more or less same. - - rscadd: Painstuff tweaked around, should generally see slightly less instant KOs - from lethal damages. - FTangSteve: - - tweak: Makes it so breathing heat or cold will hurt your lungs more than making - your head explode. - - rscadd: Electricity now shocks many parts of your body in a line to the ground - rather than just your hand. - - tweak: Species with an open circulatory system now don't get cut veins or arteries. -2017-09-23: - Atlantiscze: - - tweak: Pulling a knife out of your boot or putting it in produces a message once - again, but only if you are adjacent to the person. - Chinsky: - - rscadd: Can remove rolling end credits with Stop End Titles verb in OOC tab. - FTangSteve: - - rscadd: GAS now are flammable. - - rscadd: Lasers can catch flammable mobs on fire. - - rscadd: GAS no longer are cut by small sources of cuts (they are bruised). - - rscadd: GAS no longer are cut by slithering over glass. - - rscadd: Being on fire now burns immediately and isn't based on body temperature. - - rscadd: Adds an autolathe to robotics. - - rscadd: Adds lightswitches to chemistry, the galley, and robotics. - - tweak: Adjusts some lights so lightswitches make those rooms dark. - ZeroBits: - - rscadd: Activated the Solar Storm random event, which roasts anyone who's EVA - at the time. - - tweak: Added rad-shielding to the bunk room so you can stop dying while AFK, also - added rad-shielding to the saferooms. - - tweak: Tweaks lottery chances. - - tweak: Allows admins to choose whether or not to make an announcement when they - toggle gravity from the secrets panel. - atlantiscze: - - tweak: Walls and similar dense objects are now much better when protecting against - radiation, especially at higher levels. - - tweak: AI integrity restorer program will now upload map's default law set instead - of NT default. - - tweak: Cyborgs can now click ladders to climb. AIs can now click ladders to move - their view to different Z. -2017-09-28: - Banditoz: - - maptweak: Adds tintable windows to the Robotics Surgical Theater. - Broseph Stylin: - - rscadd: Added an Exploration department-specific voidsuit. It has the same stats - of an excavation voidsuit. - - rscadd: Added Exploration department-specific colored uniforms and PDAs. - - rscadd: Added lockers for the Pathfinder and Explorers. - - maptweak: An Exploration Equipment area which can only be accessed by the Exploration - department has been mapped on Deck 4 Aft. - Chinsky: - - rscadd: Pulse now affects blood circulation. Lower pulse effectively lowers it - and vice versa. - - rscadd: Extremely high pulse risks damaging the heart. Shouldn't be a lot, but - it's there. - - rscadd: As you lose blood oxygenation, your pulse tries to rise to compensate. - Thready (>250) pulse will cause a cardiac arrest. - - rscadd: Inaprovaline tries to bring pulse to normal levels, either up or down. - It also prevents thready pulse. - - rscadd: Heart stopping is slightly less 100% surefire, so if you manage to get - heart restarted it might beat for few ticks first. - - rscadd: You no longer need lungs/mouth to give CPR, but you will only do the heart - bit. Checks still apply for mouth-to-mouth. - - rscadd: Shock stage stars rising earlier now (30 damage vs 50) and can go bit - higher than usual. - - rscadd: Painkillers speed changed. Now they ramp up slower if ingested, but stay - longer. Opposite if injected. - - rscadd: Tramadol and oxcodone injectors added to medical vendomats (and tramadol - ones to hacked firstaid vendomats). - - rscadd: Adds some goodies to survival boxes - inapro injector, food and light. - - rscadd: Changed how tramadol/oxycodone work a bit. They now have period for setting - in and wearing off, gradually ramping power up/down. Those are short, ~20 seconds - to reach max - - rscadd: Mixing those with alcohol is now as bad idea as it's supposed to be - - increased liver damage and respiratory depression (harder time beathing) await - you - - rscadd: Inaprovaline helps against breathing effects of both mixing and ODing. - - rscadd: There's now some effects based on how much you consume over time, rather - than single dose. Effects stat at 15u with some slowdown and chance to start - slurring, ramp up from there, with major slowdown and slurring after OD-worthy - doses is metabolized. - - rscadd: Also ODing on those will give you even MORE painkilling effect! At a small - cost of suffocating most likely, and don't even try doing that AND booze. - - rscadd: Ships now have sensors. Overmap is dark by default, with known sectors - emitting some light. Dust/rocks/ion block visibility. You can control the sensor - with console(s) on the bridge, its power setting sets how far it will shine. - Higher settings use /huge/ mounts of power so don't leave it running on those. - Sensors also cannot run in non-vacuum. - - rscadd: Some improvements to helm console - now shows ETA to next grid, can set - max speed for autopilot. - - rscadd: Engines are now buildable - there's circuitboards for them in Tech storage. - - rscadd: Merchant prices are now slightly less wack, they use actual procs for - deciding them, instead of selling containeres full of stuff at price of container - only. - - rscadd: Mineral scanners now store survey data, currently useless aside from penile - comparsions. - - rscadd: New away mission - a drifting empty ship. Can be restored to fly around - on its own like Torch. - atlantiscze: - - tweak: Cyborgs can now unwrap packages by clicking them.. - dryerlint: - - tweak: Autolathes can now print cable coils. They are under the Devices and Components - category. - sabiram: - - bugfix: Cerulean, pyrite, bluespace and sepia slimes now drop the correct slime - core. - - rscadd: Added a jumpsuit with colour selection to the loadout, replacing the list - of presets previously available. - - rscadd: Added a new feminine jumpsuit with colour selection to the loadout. - - rscadd: Added a service uniform skirt for Expeditionary Corps, available in the - uniform vendor. - - rscadd: The clerical module robot now has access to the basic and denied rubber - stamps. Additionally, their hacked item is now the chameleon stamp. - - rscadd: The service department has been split. The Sol Pilot, Pathfinder and Explorer - are now in the Utility department, with their own department radio. The hotkey - for the utility department is 'y'. Bartender, Cook, Janitor and Crewman remain - in the service department. -2017-10-03: - Broseph Stylin: - - rscadd: Added some code by Techhead that allows for accessories to have and transfer - armor values to the item they are attached to. - - rscadd: Added a modular armor system based around a common plate carrier and accessories - that attach to it. - - maptweak: Replaced the armor vests and arm guards found inside the Emergency Armory - with equivalents using the new modular armor system. - Chinsky: - - rscadd: Shrapnel is less deadly now. Tiny items don't jostle around anymore. They - still prevent wounds they're embedded in from healing. - - rscdel: Conductive things embedded in body will heat up in EMP, dealing damage - depending on their size and EMP severity. - - rscadd: Brainwashing implants! Well, kinda. XO now has a box of 'imprinting' implants, - that can be set to a list of instructions, and will remind about those to whoever - is implanted with it. Latest word in grimdark on-job training. They're not binding, - just reminders. - - rscadd: Now the fun part is their abuse - when victim has mindbreaker in blood - and implanted with those, implant wires deep enough to fool host that he actually - believes these. Think borg laws. You can get the kit in uplink too, bundled - with a dose of mindbreaker - - rscadd: Can now emag practice carbines to get lethal lasers out of them. They'll - turn useless after 3-6 shots so bring a lot! Costs an emag charge. - - rscadd: Not having enough air in lungs will prevent you from talking efficiently. - If you don't have air at all, you might use remaining air in lungs for one message. - If you're just not getting enough, you'll be stuck whispering. Long messages - might come out garbled. - FTangSteve: - - rscadd: Added a push back disarm attack for GAS. - - rscadd: Added examine text and a message for GAS stance. - - rscadd: Adds in some of the GAS event things like the threat display and associated - sounds. - - rscadd: Cutlets can now be added to the organ printer as well as full slabs of - meat. - - rscadd: Adds a few cameras to hangar and to exploration with a network for each. - PsiOmegaDelta: - - tweak: Converts the machine, mob, and obj processes to subsystems. - SierraKomodo: - - tweak: Changed wording of maintenance drone laws from 'do not interfere' to 'do - not interact' to better fit the spirit of the law and staff policy. -2017-10-10: - Atlantiscze: - - rscadd: Completely overhauls crew records. Large text fields now support paper - tag formatting. Records are now accessed through a computer program. Everyone - can see generic fields (name, job, rank, ..), specialized fields become visible - depending on your access. - - rscdel: Removed old record computers of all kinds, removed PDA modules for crew - record viewing. - Banditoz: - - maptweak: Mapped in a camera to Bridge's solar control. - Broseph Stylin: - - tweak: All armor-containing lockers now have a 50% chance to contain a modular - armor equivalent to the older armor vests. - - tweak: All armor crates from Supply have been altered to contain modular armor - rather than the older vests. - - rscadd: Plate carriers and storage pouches for them have been added to the loadout, - priced at 1 and 2 points respectively. Only roles already issued armor can obtain - them. - Chinsky: - - rscadd: Added doorbell pager button. Press one and it will ping all PDAs of relevant - department people! There's one in Medical Cargo lobbies each. - - rscadd: EC ranks have been changed, you'll probably need to update your char settings. - Only 3 enlisted ranks now, slightly less officer ones. - - rscadd: 'SUPER IMPORTANT: EC cannot longer be SEA. Also since they don''t have - O2 equivalent, Pathfinder can be either O1 or O3.' - - rscadd: Can now rename alien creatures! All exoplanet animals start as 'alien - creature', and you can use a Name Alien Species verb to rename them when you - see 'em. Name can't be changed afterwards so don't go too silly. Random generated - one is suggested when you use that verb too. - - rscadd: All computers now come with a word processor, NanoWord. Lets you edit - TXT files, with paper preview and markup help - CrimsonShrike: - - rscadd: Ports openspaces. Now open turfs will show whatever is down below. - Crushtoe: - - rscadd: Added the antibody analyser, a new way for virology to contribute to the - crew. Finding new antibodies from curing diseases grants 45 cargo points per - when scanned, allowing up to 1170 points on the furthest end assuming RNGesus - is very merciful. - - maptweak: Mapped in an antibody analyser into the virology lab. - - rscdel: Removes the Chemist as its own job. - - rscadd: Chemist is now an alt-title of Medical Contractor. - Devildabeast: - - rscadd: Gives the SEA Emergency Armory access. - - rscadd: Master Chief Petty Officers and Master Gunnery Sergeants can now be SEA. - FTangSteve: - - tweak: AI drones can no longer use non-drone langauge. - - tweak: Drones can no longer push or pull items larger than medium. - - bugfix: Mechs can now fall and go down stairs. - - rscadd: If a mech falls on you, it does a heck of a lot of damage. - - tweak: Makes hats optional. - - bugfix: Fixes space vine events. - - rscadd: Makes vines spread across z levels. - - tweak: Balances spreading vines. - Quardbreak: - - rscadd: Now you can look up and see out what's going on there. - dryerlint: - - rscadd: Added two Marshalling Wands to the Deck Technician's locker. They light - up and help you visually signal stuff. - mkalash: - - rscadd: Added a net gun. It and a bandolier full of net shells is located in the - Charon storage area. - - rscadd: Added stasis cages for transport of alien fauna without having them suffocate, - located in expedition storage. - - maptweak: Refitted xenobiology to support changing the atmosphere of animal pens. - sabiram: - - rscadd: Keys can now be held in wallets. - - maptweak: The derilect laboratory in the research wing has been refitted into - a break room with public office space. - - bugfix: Personal AI system radios now work once again. - - maptweak: The executive officer's office has been redesigned. - - rscadd: Head of staff offices have been fitted with modular computer consoles. - - rscdel: As the records have been integrated into modular computers, the laptop - on the bridge previously adjacent to the security and medical records consoles - has been removed. - - rscadd: Heads of staff, the Senior Enlisted Advisor and the Bridge Officers have - been leased modular tablets. The BO's are available in their lockers. - - rscadd: The commanding officer and executive officer now have special pens. -2017-10-14: - Broseph Stylin: - - rscadd: Added Marine Corps service uniform skirts. - - rscadd: Added desert boots. Available in the same places as and statistically - equal to jungle boots. - - rscadd: Added Fleet fatigues as an alternate utility uniform. - - tweak: Fleet security and Field Medics now spawn with fatigues instead of coveralls. - - rscadd: Added earrings to the loadout, found in the Earwear section. They're unrestricted, - but can only be worn by humans (subspecies included) - - rscadd: Added a Master at Arms brassard to the loadout. - - tweak: Changed the Military Police armband to a brassard. - Chinsky: - - rscadd: Electrical storms now can be blocked by shields. They have special mode - for it. Keep in mind that they will be taking damage while event is running. - - rscadd: Overmap events (meteor, dust, electrical storm) do not happen randomly - now. - - rscadd: Number of overmap events increased. Asteroid fields now spread over wider - space but have gaps in them. - - rscadd: Hitting edge of overmap will not warp you around to the opposing edge. - Space is around after all. - - rscadd: Away missions no longer glow on overmap, you have to find them now. Planets - are still visible due to sheer size of signature. - - rscadd: Changes to Torch's speed. Now default delay between moving is higher - - 20 seconds vs 12, but speed affects it much more, e.g. at 5 speed you will move - pretty much continuously. - - rscadd: Shuttles have different ranges now. Charon (1) can go to away missions - in adjacent grids, Aquila (2) one tile further. Travel time is multiplied by - the distance. - Cirra: - - rscadd: 'Added a new, more expensive type of 14.5mm ammo, for the anti-material - rifle: APDS. Less damage, but far greater armour penetration.' - - rscadd: Projectiles can now cause internal damage, including organ damage and - severing arteries. Bullets cause more than energy, with x-ray lasers being inbetween - the two. - - tweak: Renamed 5.56mm ammo to 7.62mm and vice versa, to be more consistent with - their damage values. - - tweak: Matebas now use .50 ammo, while revolvers have had their damage reduced - slightly. - - tweak: .45 rounds now do 21.5 damage instead of 20, while 10mm bullets now do - 23.5 instead of 25. - Orelbon: - - rscadd: Consoles now have ambient noise when turned on. - comma: - - tweak: Department of Swag has determined that Torch is 60% clothes by volume. - This was rectified. Now uniform vendors will only dispense 1 (one) item of each - type per person. Don't lose your pants kids. - sabiram: - - rscadd: The Pathfinder now has a special machete with premium fittings, and machete - sheaths have been added to the Pathfinder and Explorer's lockers. - - rscadd: Job bans can now be applied to jobs from the command support, exploration, - service, and supply departments. -2017-10-21: - Broseph Stylin: - - tweak: Holsters and webbing/bandoliers/drop pouches can now be worn together. - - rscadd: Added customization options for modular armor to the loadout. - - rscadd: Added leg guards as an armor module. - - tweak: replaced all static armor spawns with their modular equivalents. - Chinsky: - - rscadd: Planets now have some alien landmarks to find and rub your face on. - - rscadd: Added winter coats for all branches. Can be found in uniform vendors next - to ushankas. - - tweak: Made vent hum bit less of earbleed, made ambience bit lower and rare in - general, try reenabling it. - Datraen: - - rscadd: Allows for labels to be applied to condiment containers. - ParadoxSpace: - - rscadd: Adds eyepatch variants of the Sec, Med, and Meson HUDs, as well as a non-HUD - variant for those missing exactly one eye. - - tweak: Flipping eyepatches (and HUDpatches) is now a verb. - - rscdel: Kills the standard cloth eyepatch for military roles. HUDpatch still works - for them. - TheGreyWolf: - - rscadd: Added toeless jackboots to the EC and civie branch uniform vendor for - the xenos. - TheWelp: - - rscadd: Added a deity hud element that shows your current phenomenas. - - tweak: Reduced D-Nar's blood costs to half. - - tweak: Made it so that a deity's power can never go below 0. - ZeroBits: - - rscadd: 'Added three new strength brackets for the R-UST: 9x9, 11x11, and 13x13. - For the engineers who have 51 extra fuel injectors and way too much free time.' - - tweak: Changed the sprite of the R-UST to look cooler. - dryerlint: - - rscadd: Added queuing functionality to modular computer software downloader. - sabiram: - - rscadd: Added herbal liquor. - - rscadd: Added a new cocktail, the Ibn Batutta, consisting of 2 parts herbal liquor - and 1 part orange juice, with mint as the catalyst. - - rscadd: Added a new cocktail, the Magellan, consisting of 1 part wine and 1 part - premium whiskey, with sugar as the catalyst. - - rscadd: Added a new cocktail, the Armstrong, consisting of 2 parts beer, 1 part - vodka, and 1 part lime juice. - - rscadd: Added a new cocktail, the Zheng He, consisting of 2 parts black tea and - 1 part vermouth. -2017-11-01: - Chinsky: - - tweak: Changed way hallucinations are. Now some things will give you strong ones, - some milder, it's not always same. - - tweak: Most of old hallucinations effects are replaced. New ones are supposed - to be more mindfucky. - - tweak: Synaptizine, Paroxetone and Citalopram help lowering frequency of hallucinations, - and to clear them out faster once whatever causes them is dealt with. - - tweak: Changed lobby music selection, lowered lobby music sound overall. Should - be less ear-gore and fresher now. - Cirra: - - bugfix: Stasis Clamps actually work now. - CountAlex: - - rscadd: Adding new map for overmap list - abandoned supply base. - - rscadd: Adding new map for overmap list - planetside location - frozen with breathable - atmosphere - with pod crashlanding and survior's story. - CrimsonShrike: - - bugfix: Fixed stick messages not showing. - - rscadd: Sticks can now be sharpened using edged sharp tools. - - rscadd: Added morgue access to Forensic Technicians. - - rscadd: Added GAS-poking stick and recipe per request of the more suicidal crew - members. - Devildabeast: - - tweak: Deck Officers can now be E-8 and O-2. - FTangSteve: - - tweak: Robotic organ surgery now needs the hatch screwed back down after it's - closed with a crowbar. - - rscadd: Adds the ability for IPCs to choose whether they are shackled and a lawset - in character setup if they would like. - Heptagon49: - - rscadd: A hologram's color will now vary depending on what kind of holopad is - projecting it. - - imageadd: Added a unique sprite for long-range holopads. - - spellcheck: You now step onto a holopad instead of stepping unto one. - - rscadd: You can now tell if a person's face is disfigured just by looking at them. - TheGreyWolf: - - tweak: Restricts a few more tattoos and prevents xenos from picking normal tattoos. - - rscadd: Added black, blue and red pens, hand labeler, clipboards and destination - taggers to the autolathe. - ZeroBits: - - tweak: moved away sites to away subfolders. - - tweak: You can now disassemble bare plating by first damaging it with a welder - (or bomb) then prying it up with a crowbar. - sabiram: - - rscadd: Added two new alert levels to the Torch map. - - rscadd: Code Violet for major medical emergencies. - - rscadd: Code Orange for major engineering emergencies. - - rscadd: Code Red now has a unique sound on activation. - - tweak: Code Blue alert should now only be used for major security emergencies - and not as a general readiness state. - - tweak: Code Red alert should now be used as a general high alert when the situation - is more severe than or would warrant two of the standard department alert statuses. - - bugfix: Chemical grenades (cleaner, metal foam, etc) now work properly again. - - tweak: Security module robots' stun batons now consume much less of their cell - per hit. - - rscadd: Anyone with bridge access can now lock the holodeck into its current state - in the console interface. - - rscadd: The Pathfinder now has a box of Exploration department encryption keys - to distribute if they choose. - - tweak: As part of the SolGov staff well-being initiative, cigarette supply to - their installations have been restricted. Vendor prices have increased to match - the limited supply. - - rscadd: Added more e-cigarette flavour cartridge types to vendors, including ones - to fill with your own flavours, and added empty e-cigarette cartridges to autolathes. - - maptweak: Wall lockers with cardboard, wrapping paper and destination taggers - have been added to the kitchen, hydroponics and the research and development - lab. - sicktrigger: - - rscadd: Ship sensors will now heat up and eventually take damage at higher settings - (they can be repaired with a welder). Their power usage has also been significantly - reduced. - tlc2013: - - rscadd: Added the Corporate and Service lawsets to IPC shackles. - - rscadd: IPCs now have four new monitors. Nothing special... except for a space - screensaver. -2017-11-04: - CountAlex: - - rscadd: Adding new map for overmap list - smugglers den located inside asteroid. - Tlc2013: - - rscadd: IPCs now have two bonus language slots. - sabiram: - - rscadd: As follow-up to a recent study concerning the trend of people more readily - following leaders with shiny revolvers, the Commanding Officer and the Executive - Officer have each been supplied a Webley style .44 revolver as their personal - side arm. - - rscadd: Added the .44 revolver to the traitor uplink. - - rscadd: Added .44 ammunition to the autolathe. Rubber is always available, and - lethal is available after hacking. - - rscadd: You can now alt-click revolvers to spin the cylinder. -2017-11-10: - Chinsky: - - rscadd: Can now put clothes on skeletor models. - - rscadd: Can rename skeletor models with pen. - Heptagon49: - - tweak: Lowered the chances of a Doona popping out of a vending machine from 1% - to 0.1%. - - bugfix: Made the outer windoor of the sci checkpoint all-access. - - tweak: Added an outer windoor to the RnD desk. - - rscadd: Chem dispenser now has a visual indicator when it has a beaker loaded. - - bugfix: Pill bottles loaded into the chemmaster now get filled. - - tweak: Tweaked uniform vendor so that it'll no longer eat your clothes. - Hubblenaut: - - bugfix: Fixes brig cell timers not connecting to windoors/mounted flashes. - Orelbon: - - maptweak: Science entrance has been edited & science has been made more open. - - maptweak: Medical has been remapped to be more efficient and increase workflow. - Rebruiza: - - rscadd: Individuals with the "Floorlength Braid" hairstyle now occasionally trip - on their hair. - Tlc2013: - - rscadd: Added the legendary CRT Test screen to IPC monitors. - mkalash: - - rscadd: All gloves that are available in the load out now have pre-modified versions - in the xeno load out. - - rscdel: Removed parapen, parasting, and the stun talisman. - sabiram: - - tweak: Maintenance drones now have spray bottles instead of soap. The cleaner - refills in chargers. - - rscadd: Hyposprays have been upgraded and now use removable vials instead of a - internal storage. - - tweak: Voice changers available in the upload now have chameleon mask functionality. - - rscadd: Holsters have been added to the gun cabinets. - - rscdel: Holsters have been removed from the bridge officer and Sol pilot's lockers. - - tweak: Gun cabinets now have a chance to spawn a small e-gun instead of the full - sized variant. -2017-11-11: - chaoko99: - - bugfix: Puts some jackboots in all the security lockers. Your feet will no longer - be cold. - mkalash: - - tweak: Welding tool sizes have been rebalanced. Namely, the industrial welding - tool is now too large for a tool belt. - - rscadd: To balance this out, engineers can now easily carry spare welding fuel - cartridges found in the welding locker and hot swap them out, actually increasing - the welding capacity of the typical engineer. - - bugfix: Experimental fuel tanks now automatically refill, as intended. - - rscadd: The experimental welding tool can now be produced in rnd. -2017-11-19: - Casper3667: - - tweak: Passengers (the job) can now use corporate uniforms. - - rscadd: NT corp uniform is now available in the loadout. - Chinsky: - - tweak: Ordering gun crates now requiers elevated alert level, Blue for small ones, - Red for big guns. - CrimsonShrike: - - rscadd: Now catwalks can be built above plating. - - tweak: Reinforced floor now requires 1 steel sheet instead of 2 rods. - - rscadd: Added catwalks. Can be built by using rods on existing lattice. - - bugfix: Fixed lattice icons on openspace turfs. - Hubblenaut: - - rscadd: The telecomms broadcaster, relays, station bounced radios and intercomms - now broadcast to all connected z levels. - - rscadd: Adds a relay circuit board to the telecomms storage. - - rscdel: Removes relay rooms and replaces them with maintenance. - Orelbon: - - rscadd: Ghosts can now click on non-modular consoles and see their UI. - Rebruiza: - - tweak: Cable coils no longer do damage when thrown. - - tweak: Cable coils are now "ITEM_SIZE_NORMAL", instead of "ITEM_SIZE_SMALL". This - means that they no longer fit in pockets, but rather has to be in a larger container - or off the side of a toolbelt, as intended. - SamSamsonthe3rd: - - bugfix: Can now build ED209 with plate armor. - Serveris: - - rscadd: Added the WT45 pistol. - - tweak: Line Officers now spawn with said in their lockers, rather than energy - guns. - Zero-Bits: - - tweak: '"Library Improvements. Removed Adult Category, made USBN usable."' - atlantiscze: - - rscdel: Cyborgs can no longer be self-destructed through the remote console. - - rscadd: Cyborg's precise position is now displayed on the console instead. - - rscadd: The console now offers you an option to send direct message to a cyborg. - This message is independent on telecommunications and range. - chinsky: - - tweak: Humanoids able to vent-crawl can now bring select articles of clothing - and carry items which are not too big. - comma: - - tweak: Propellant in fuel bay changed, instead of plasma it's CO2 now. Thrust - should be more or less same, but less eternal fires and more space for engies - to increase said thrust. - dryerlint: - - rscadd: Added fuel port object. When mapped into shuttles (like Charon or GUP) - it gives them a finite fuel reserve, which must be refilled with phoron. - mkalash: - - tweak: You can now place crowbars in security belts. - sabiram: - - rscadd: Added the pry bar, a smaller crowbar, to the autolathe. - - tweak: The damage values of tools have been adjusted. - sabirm: - - rscadd: Added a supply crate containing ammunition for the executive heads' revolvers. - - tweak: The rubber ammo crate now contains two rubber .45, two flash .45, and two - rubber .44 magnum magazines on the Torch map. - - tweak: As part of the Great Gun Experiment, all ammunition is now hidden in the - autolathe. - sick trigger: - - rscadd: Ghosts can now Check-Radiation. - sick-trigger: - - rscadd: Ghosts will now be informed of the contests of examined closets/lockers. -2017-11-20: - sabiram: - - rscadd: Added a disguised syringe gun to the loadout. Comes complete with four - cartridges and four syringes. Chemicals not included. -2017-11-22: - Cirra: - - tweak: Radiation is now relevant again, due to material radiation resistance being - lowered. - SierraKomodo: - - rscdel: Removed xenophage and cortical borer from the list of add antagonist vote - options until these antag types can be fixes. - atlantiscze: - - tweak: Communication outages are overall less common. - - tweak: Communication outage has only 75% chance to affect each particular machine, - therefore with some luck, enough machines may remain functional to get at least - some working frequencies. The hub, broadcaster and receiver have 10% chance - to be affected, as they are critical for the whole telecommunications system. - - tweak: Increased chance of ion anomaly being announced. There is still a small - probability of the anomaly occuring silently. - - rscadd: It is now possible to reset EMP/ion/random event affected telecommunications - machinery with a multitool through the UI. The UI also shows a timer until automated - reset. - dryerlint: - - rscadd: Added fuel ports to Charon and GUP. They will consume fuel and eventually - run out - - rscadd: Added small refueling room to Hangar, for anyone with Supply Warehouse - access -2017-11-23: - Casper3667: - - tweak: Fixes up balaclava and half-gas mask sprites for taj. - - rscadd: Adds new shoes for taj called caligae. - CountAlex: - - rscadd: 'Away mission map: Damaged and abandoned Planetary Shield Orbital Station' - Dukica: - - rscadd: Added the braided beard facial hair style. - Orelbon: - - bugfix: Ghosts cant griff with jetpacks anymore. -2017-11-24: - CrimsonShrike: - - rscadd: Added Hydrogen canisters to supply request list. - Dukica: - - rscadd: Added new hairstyles. - FTangSteve: - - tweak: Add SCG Police tag to CoS carrier - - tweak: upgrade CoS armour plate - Kelenius: - - tweak: Camera networks have been sorted in an other that makes more sense. - mkalash: - - tweak: The welding pack is now too large for backpacks. - - rscadd: You can now attach welding tools to welding packs via drag drop. - - rscadd: Welders now show an overlay of what fuel tank is attached, if any. - - tweak: Fuel cartridges are now welding fuel tanks. - orelbon: - - rscadd: New sprites for the 2x1 white airlock. -2017-11-25: - Kelenius: - - tweak: Teleporters don't need to be test-fired anymore. - sabiram: - - tweak: The XO now has unrestricted access to the Aquila. -2017-11-26: - CrimsonShrike: - - bugfix: '"Fixes openspaces above shuttles retaining image of the floor."' - chinsky: - - tweak: Melee attacks will now always hit targets with the Help intent selected. - comma: - - rscadd: Added EC directives plaques on Bridge/Charon/Exped Prep/walls near flags - in cryo etc. Their tl;dr is go explore instead of twiddling thumbs. - sabiram: - - rscadd: Added purple, orange, green and red carpets. - - rscadd: Added blue, blue and silver, purple, orange, green and red carpet tiles - to the supply computer. - - tweak: Changed the brown and blue carpet icons to match the new ones. -2017-11-28: - Casper3667: - - rscadd: Adds new taj security voidsuit sprites from Serveris. - FTangSteve: - - rscadd: makes item slowdown impacted by species strength - - tweak: changeling transform now takes time with a progress bar based on mob_size - difference - sabiram: - - rscadd: Vials can now be placed in bandoliers. -2017-11-29: - Chinsky: - - tweak: Meteor mode now progresses a bit faster on difficulty scale, and can produce - bigger waves in the end. - CountAlex: - - rscadd: Adding new map for overmap list - raided casino ship. - Orelbon: - - rscadd: Self Destruct Sequence Has been revamped. - - rscadd: Keycard device can now be used to get the nuke code. - - tweak: Keycard device now waits 3 seconds for someone else to swipe. - - rscadd: The vault has been replaced by the self destruct room on deck 1. - - tweak: The engineering supply room was moved into the side of the hallway on deck - 1. - - tweak: The vacant office was moved to behind the self destruct room. - Spookerton: - - bugfix: Fixes cyborgs being unable to repair doors. - Techhead0: - - tweak: Removes age gate from Janitor - - tweak: Changes crewman alt-tiles to "Trainee" instead of "Junior" - Zero-Bits: - - tweak: Ports the Library to the Modular Computer System - sabiram: - - rscadd: You can now drink from buckets and beakers by clicking with the HELP intent. - Clicking with HARM intent splashes/spills. - - rscadd: 'Added new scrub and surgical cap colours to random spawns and loadout: - white, lilac, teal, and heliodor.' - - rscadd: Added colour selection to scrubs and surgical caps in the loadout. - sick trigger: - - rscadd: Finalizing a matchmaking connection now informs the other player. -2017-12-01: - Casper3667: - - rscadd: Deck officer, pathfinder and explorers now got binoculars in their lockers. - CountAlex: - - tweak: Changed Biogenerator UI to nano-ui instead of basic HTML. - Dukica: - - rscadd: Added 3 new masculine hairstyles (Slick, Average Joe, Messy) - sabiram: - - maptweak: Added an AI holopad to security processing. - - maptweak: The XO once again has access to an AI holopad in their office. - - rscadd: Suit jackets, suit pants, baggy suit pants, and athletic shorts are now - colour-selectable in the loadout. - - maptweak: 'Added some cameras to the infirmary: one in the operating theatre, - and two in the main treatment centre.' -2017-12-02: - FTangSteve: - - tweak: new sprites for nabbers - - rscadd: can shift equip overlays on per species per slot per direction basis - sabiram: - - rscadd: Added a black pocketbook to the backpack selection. - - rscadd: Added a few dresses. The short dress is available in the loadout with - colour selection. Dresses in two styles and four colours are now available in - the uniform vendor for formal occasions for civilians. -2017-12-03: - BlueNexus: - - rscadd: Added a new creature, which can be found on certain away missions -2017-12-04: - Orelbon: - - tweak: Remapped the Lounge - Zero-Bits: - - bugfix: '"Fixed library program UI and bookbinder linking."' - sabiram: - - tweak: Sunglasses now apply a screen overlay when worn. - - tweak: A makeshift duct tape blindfold can now protect your eyes from welders, - if you don't mind welding blind. - - balance: All HUDs and other glasses types with electrical components are now vulnerable - to EMP, and will disorient you and turn the HUD off when hit. Neither of the - effects are permanent, and you can turn your kit back on right away. - - balance: Any glasses type with night vision no longer has flash/welder protection, - or is otherwise vulnerable to flashes or welders. - sabiram & chinsky: - - rscadd: The tobacco plant can now be grown, with a couple mutates. - - bugfix: Electronic cigarettes should no longer be more harmful than regular cigarettes. -2017-12-06: - PsiOmegaDelta: - - tweak: Character Setup - Some backpacks now have additional setup options. - sabiram: - - rscadd: Added a black pocketbook to the backpack selection. -2017-12-07: - BlueNexus: - - tweak: Slightly buffed "Mehren" - Casper3667: - - tweak: Taj can no longer use zeng-hu or veymed prosthetics or body. - CountAlex: - - rscadd: Added Oxygen regenerator device for Atmospherics. Device takes from an - input pipe CO2 and slowly feeds O2 to an output pipe and drops chunks of coal - on the top tray of the machine. - FTangSteve: - - rscadd: Add new emotes for nabbers. - atlantiscze: - - tweak: AI can now hack multiple APCs at once, assuming it has enough CPU power - to begin the hack. AI can use abilities while hacking an APC (the hacking task - has been completely isolated) - - tweak: AI can now use its abilities during system override. On torch the override - takes quite a long time due to larger amount of APCs, and during this period - the AI is otherwise very vulnerable. - - tweak: Failed advanced encryption hack now offers you to retry the hack without - having to copy-paste/write the message again. This should make the ability a - bit more comfortable to use. - dryerlint: - - rscadd: Added nuclear football (secure briefcase with disk, pinpointer, instructions, - and laptop) - - maptweak: Removed nuke disk and pinpointer from CO's office, replaced with nuclear - briefcase. Added pinpointer to Bridge Storage. - sabiram: - - balance: Flashes have been reworked when attacking humanoid targets. - - balance: Instead of stunning for 20 seconds, they will stun for up to 7 seconds, - and blur vision and confuse for up to 18 seconds. - - balance: Flash stun duration for silicons has been reduced from 10-20 seconds - to 8-12 seconds. - - tweak: The area-of-effect attack for flashes now blurs the eyes of those affected, - in addition to flashing them. - - rscadd: Flashes can now have varying effects by type. - - tweak: The flash used in robot construction is now weaker than the base flash, - but breaks just as often, instead of every time its used. - - tweak: The spray projectile fired from peppersprays now moves much faster and - their capacity has been increased from 4 shots to 6. - - tweak: Pepper spray now incapacitates for an additional 2 seconds. -2017-12-08: - Banditoz: - - tweak: Overmap is now a lot more hostile. - dryerlint: - - rscadd: Added the SolGov flag, a variant of the existing flags, but with SolGov - logo on it. It is found in Exploration Storage. -2017-12-09: - Casper3667: - - tweak: The taj species blurb in char setup has been updated. - sabiram: - - rscadd: A more gentle carp event has been added to the overmap to supplement the - more dangerous version. The event icons with three carp are the more dangerous - schools. - - rscadd: Space carp can now be encountered on the overmap. - - rscadd: Ion clouds have condensed in the vicinity of the ship and can be collided - with on the overmap. -2017-12-10: - sabiram: - - rscadd: Added a few different colours to the satchel and pocketbook selection - in character setup. -2017-12-11: - Orelbon: - - maptweak: Xenobotany Has been remapped for space and usability. - - maptweak: Xenoarchiology lab has been moved to the Petrov. - - maptweak: Misc Lab is now a circuit lab and a small chemical testing chamber. - - maptweak: A chemistry station & toxins have been added to the Petrov. - Techhead0: - - rscdel: Science wing and channel has been reverted back to purple. - dryerlint: - - tweak: Flags can now be placed on any terrain/turf, except for space -2017-12-12: - BlueNexus: - - tweak: Nerfed the .50 pistol fire rate and recoil. - Hubblenaut: - - rscadd: Atmospheric pumps can be toggled by alt clicking. - - rscadd: Carafes and implanters are now available in the autolathe. - - bugfix: Implants are now trackable across connected z-levels. - Kelenius: - - tweak: Merchant now has two slots. - mkalash: - - tweak: Spacemen no longer pin their IDs to their skin when they roll down their - jumpsuits. - sabiram: - - tweak: Mounted flash effect changed from 20 seconds of knock down to 6 seconds - of knock down followed by a further 10 seconds of stun - a total of 16 seconds - of useful disable - followed by a further 8 seconds of confusion. - - tweak: Flash and flare cartridges now inflict more agony damage. - - rscadd: Flash and flare cartridges now blur the vision and disorient those within - their flash ranges - tiles adjacent to the explosion for flashes, and two tiles - adjacent for flares. -2017-12-13: - Techhead0: - - tweak: Vey-Med prosthetics are now restricted to humans only. Zheng-Hu is now - restricted to humans and IPCs. -2017-12-14: - Casper3667: - - rscadd: Vox gas masks are now available for vox in the loadout. - sabiram: - - rscadd: Control+Alt clicking a PDA will now toggle the flashlight. - - rscadd: Control+Alt clicking closets and lockers is now a shortcut to the toggle - open verb. - - tweak: AI door electrification shortcut moved from Alt-click to Control-Alt-click - to remove conflict with Alt-click inspecting the turf. -2017-12-15: - IsdatAfamas: - - rscadd: '"Added a small ship as an overmap location."' -2017-12-16: - sabiram: - - rscadd: Added new varieties of smokable to the smoking vendor. -2017-12-17: - BlueNexus: - - tweak: The WT45 now fires slightly slower, and is more accurate. - - tweak: The Mk58 now fires slightly faster, and is less accurate. - - tweak: Revolvers fire slightly slower, in general. - - tweak: Adjusted fluff for several firearms - - rscadd: The CO's revolver has been replaced with an autorevolver. - ParadoxSpace: - - bugfix: Diona now properly regenerate organs and limbs. -2017-12-19: - Casper3667: - - rscadd: Surgeon borgs now have defibrillator. - - rscadd: Crisis borgs now have medical tape. - - rscadd: Engie borgs got atmos atmos tape. - - rscadd: Security borgs now have a megaphone module. - TheWelp: - - rscadd: Reworks early game deity. No longer have to dole out spells and you regenerate - power 100% faster. -2017-12-27: - BlueNexus: - - spellcheck: Renamed the 9mm machine pistol to the 9mm submachine gun - - bugfix: Fixed the WT45's empty icon not showing - Broseph Stylin: - - rscadd: Added colored helmet covers matching the plate carriers. Available in - the loadout. - Casper3667: - - rscadd: Taj are now forced to have Siik'maas. - Chinsky: - - rscadd: Added some sekrit documents to CO/SCGR offices in sealed envelopes. Don't - really affect anything, just fluff. Moved RD's secret memo to an envelop in - his office too, put a copy on Liason's desk. - CountAlex: - - tweak: Turns casino liner into actual overmap ship with a small shuttle. - - rscadd: Adding new map for overmap list - hidden deep inside asteroid slavers - base. - Kelenius: - - rscadd: Hydroponics now has bees and space for bees. And some chemical machinery. - Orelbon: - - tweak: Laser carbine has 10 more damage and +2 accuracy. - - tweak: Taser carbine now has 12 shots, +1 accuracy and looses its 10 armor penetration. - - tweak: Stun rifle now has 10 shots, +1 accuracy,+10 armor penetration,+5 burn - damage and looses 10 agony. - - tweak: Stun revolver now has 6 shots and 50 agony. - - tweak: Ion weapons shouldn't be horrible anymore, they now activate their emp - no matter what they hit. - - tweak: The rifle now has a max range of 2, and the pistol a max range of 1. - - tweak: Ion pistol max shots lowered to 6. - ParadoxSpace: - - rscadd: Added a regeneration mechanic to Unathi. This works on nutrition. - - rscadd: Unathi now get hungrier faster, and enough hunger starts to give you toxin - damage. - sabiram: - - bugfix: Mounted flashers will no longer permanently scramble ghosts' movement. - - rscadd: Added missing eye blurring effect to mounted flashers. - - tweak: Maintenance and construction drones now move faster. - - bugfix: Lockers can once again be welded shut. - - rscadd: Clicking a drinking glass with a spoon will now call the room to attention. - Just be careful. - tlc2013: - - rscadd: Ported over three IPC screens from Polaris. I think we're done there. -2018-01-03: - ParadoxSpace: - - experiment: Removes the AI from the job list for two weeks. - TheWelp: - - rscadd: Adds band-aid fix to deity spam via cooldowns. Will add graphical indicator - to show what the cooldown is later. - - rscadd: Modifies phenomena near structure logic to include all deity structures, - not just altars. -2018-01-04: - CountAlex: - - rscadd: Adds away mission map - Mobius Rift. -2018-01-05: - CountAlex: - - rscadd: '"Adds engineering program for monitoring shield generators."' - PsiOmegaDelta: - - tweak: Can now adjust (almost) all prefix keys. These are used for language selection, - emoting, etc. See Character Setup > Global > Prefix Keys -2018-01-06: - Casper3667: - - tweak: The CSA now has the crime scene kit in their locker. - - bugfix: Forensic is yet again capable of using the dna search function in records - and can also edit pictures in records. - Devildabeast: - - rscadd: Adds one Crime Scene Analyst slot to Security. They are a forensic contractor - job that are NOT responsible for law enforcement. -2018-01-07: - comma: - - tweak: Adds gauze roll to emergency survival boxes - sabiram: - - tweak: As a cost-cutting measure, all Sol uniforms are now cut from the same cloth. - Armour values have been genericised. - - rscdel: Sol uniform hats no longer provide any armour. - - maptweak: The hydroponics base away site has been updated. - - experiment: As part of AI removal testing, an additional robot slot has been added. - - rscadd: Command hardsuit control modules have been added to the EVA storage on - the bridge deck. - - tweak: Changed CE hardsuit values to sync somewhat with new these modules. - - rscadd: Added a ring bell to the holodeck boxing ring. -2018-01-08: - Casper3667: - - rscadd: Taj now have several new capes! - - rscadd: Cameras can now be found in the loadout. - Chinsky: - - rscadd: Shuttles now need proper docking codes set in their console, or the docking - won't initiate. - - rscadd: Codes can be found in CO's orders, or by using multitool on docking controllers. - You can also hit the button on docking controller from inside to initiate docking. - - rscadd: There is also a program that shows status of all docking ports and their - codes, can be used to remotely let people dock if they're waiting outside. - Techhead: - - rscadd: You now receive pain-flashes for all pain sources. - - bugfix: Possibly fixes an infinite paincrit bug. -2018-01-09: - Devildabeast: - - rscdel: Removes SolGov Pilot. - - tweak: Gives Bridge Officers access to pilot the Aquila and Guppy and accompanying - access. - - tweak: Bridge Officers now have the Pilot's headset. - - rscdel: Removes SolGov Pilot's locker from the Pilot's Lounge. - - rscadd: The Pilot's Qualification Pin is now an item in the loadout for Bridge - Officers who want to flash their fancy training. - Zero-Bits: - - tweak: Cult walls are just normal creepy now instead of super edgy. -2018-01-10: - CountAlex: - - rscadd: Adds away mission map - SEV Icarus irradiated crashsite. - Heptagon49: - - bugfix: Adds a hydrogen tank sprite, among others, for the transfer valve. - Kelenius: - - rscadd: Syringes can now inject people in body bags and cryo bags. - LorenLuke: - - rscadd: Added/changed alt-titles for engineering contractor. - ZeroBits: - - imageadd: '"Hydrogen now has its own canister and tank sprites"' - - spellcheck: '"TX on monitoring computers is now PH, as it should be"' - - tweak: '"Omni Filter and Omni Mixer throughput increased to match pressure regulator"' - - tweak: '"Flamethrower now uses Hydrogen"' - - tweak: '"Phoron canister made slightly more expensive via supply"' - - tweak: '"Hydrogen canister made slightly more expensive via supply"' - - tweak: '"Filters and Mixers can now handle Hydrogen"' - - tweak: '"Supermatter monitoring program and gas sensors can now detect Hydrogen"' - - tweak: '"Overmap shuttles now use Hydrogen by default"' - - rscadd: '"Added purchasable crates of portable Phoron and Hydrogen tanks. Cheaper - than a full canister, but with far less volume."' - - maptweak: '"The SM reactor is now set up for CO2 by default"' - - maptweak: '"The SM reactor now has a Phoron gatherer so you no longer shoot that - valuable Phoron out into space."' - - maptweak: '"Nitrogen is no longer available directly in the SM room (it never - meets energy or safety needs anyway)"' - - maptweak: '"The fuel Bay is now filled with Hydrogen (rocket fuel) instead of - Phoron (the supposed most valuable substance in the universe)"' - - maptweak: '"Most of the Phoron tanks and canisters on the map have been replaced - with Hydrogen. R&D and Engineering each retain one canister."' - - maptweak: '"The Phoron resevoir in atmos has been replaced with a hydrogen resevoir."' - - maptweak: '"The incinerator now uses Hydrogen instead of Phoron. You''re just - burning stuff, you don''t need to do it with gaseous money."' - - maptweak: The Supermatter core is no longer filled with N2 by default. - comma: - - balance: Attacks against legs and heads are now more likely to miss. - tlc2013: - - rscadd: Added sandals to the loadout selection. Because those weren't there before, - apparently. -2018-01-11: - chaoko99: - - bugfix: Synths can no longer fill mechfabs with their matter synths. - rainbowEscapist: - - rscadd: Adds the alt title 'Trainer' to the Passenger loadout. -2018-01-12: - Chinsky: - - tweak: Cryobags, cryo and general stasis changes. Main point is that stasis is - no longer binary on/off, it doesn't stop life ticking, just slows it down (usually - a lot). It chemical processing is slowed down too, so sometimes bigger stasis - is not better. - - tweak: Cryo. Being very cold now provides stasis on its own - and cryo is easiest - way of doing it. At 80K, it applies 20x stasis factor (life ticks once in 40 - seconds instead once in 2). - - tweak: Cryo chemless healing was slowed down a bit. It also no longer magically - multiplies chems in beakers by 10x. Cryox/clonex adjusted to work at same efficiency - with this change. - - tweak: Cold damage in cryo is now prevented by clonex or cryox, not cryopod itself. - On one hand you now NEED to have it in beaker if you care about patient, on - another - you don't need cryopod if you have those and sufficiently cold place. - - tweak: Cryobags. Cryobags no longer last forever. Their power drops every 5 minutes - - examine to see current. It starts at 20x and loses 25% every time, so 20x - to 15x to 11x in 10 minutes and so on. Will drop into nothingness at ~40 minutes - mark. - - rscadd: Stasis will make you drowsy, and at higher stasis settings you will fall - asleep eventually (15x or higher). - - rscadd: 'Sleepers can into stasis too! They have three settings: none, 3x and - 5x.' - FTangSteve: - - tweak: Changeling now can only get nabber DNA with direct absorption. - Hubblenaut: - - tweak: RCON program no longer shows SMES units and breakers offsite the Torch. - - tweak: Alarm monitoring program no longer shows alerts offsite the Torch. - - bugfix: Fixes deck four fore dock. - Sbotkin: - - tweak: RCA, Shield Generator and Emitter crates now require engine access. - TheTrollDoctor: - - rscadd: Adds the MedHUD Visor item to loadout. It's a ~stylish~ MedHUD reskin - accessible for Medical roles. - sabiram: - - rscadd: Added advanced flash, smoke grenade, and metal foam grenade launcher hardsuit - modules. - - tweak: The captain's hardsuit now has an AI container, advanced flash and smoke - grenade launcher. - - tweak: The XO's hardsuit now has an advanced flash and smoke grenade launcher. - - tweak: The CE's hardsuit now has a metal foam grenade launcher. - - bugfix: The rig mounted RCD's use cost has been reduced from 100,000 to 300. - - bugfix: The correct voidsuits can now be found in command EVA. -2018-01-14: - Hubblenaut: - - bugfix: Fixes the horrible mess of pipes that was xenobiology. - LorenLuke: - - rscadd: Adds timestamp to PDA messages. - Orelbon: - - tweak: Consoles have been resprited. - comma: - - tweak: Chemist is now its own job slot. Medical Contractor slots lowered by one. - - rscdel: Removed Mortician because you don't get more useless than that. - sabiram: - - bugfix: Autolathes now function as normal. - - tweak: Bridge Officers now additionally have basic explorer access. -2018-01-15: - Techhead: - - tweak: A survey of medical supplies found the size of pill bottles woefully inadequate. - Larger pill bottles with more pills have been issued. -2018-01-16: - CountAlex: - - tweak: '"Refactoring corpse spawners."' - chaoko99: - - rscadd: Lasers and muzzle flashes now illuminate their surroundings. - - tweak: Beams are not visible quite as long due to vast optimizations in how they - are rendered. - - tweak: Muzzle flashes will now appear over lighting, and do not last nearly as - long. - - tweak: Bullets now fly more smoothly towards their targets. - - bugfix: Fixes a bug that caused the L6 SAW to load an empty sprite when closed - without a box magazine inside. - comma: - - tweak: Overmap size has been decreased. - - tweak: Number of overmap events has been decreased. - - tweak: Potential number of away missions has been decreased. - - bugfix: Ashtrays now empty their contents when thrown. - - tweak: Torch now starts at a random location on the overmap -2018-01-17: - Banditoz: - - maptweak: The GUP airlock now works. - Chinsky: - - rscdel: After yet another PR fiasco over field executions, Marine contingent is - no longer allowed on Torch. Those not under active investigation are offered - a transfer to Expeditionary Corps if they want to participate in the mission. - Earthcrusher: - - tweak: Thanks to the tightening of SCG industrial safety guidelines, you now must - be on harm intent and wait a few seconds before blowing up a fueltank with a - lit welder, lighter, or other handheld source of flame. - chaoko99: - - rscadd: cloaked mobs (ninjas and whatnot/Mehren) can now be spotted via T-ray. - - bugfix: Lasers will no longer fail to disappear during bluespace jump. -2018-01-18: - Chinsky: - - tweak: Modular computer programs were patched to allow more abuse. Now they use - the access of user who started them, instead of constantly checking for current - user's. - Orelbon: - - bugfix: Suit storage units now check for access. - - tweak: Suit storage units don't drop items when the powers fails anymore. - - tweak: Suit storage units can now be pried open when they are powered off and - not locked. - - tweak: Suit storage units can now dispense items when they are offline. - 'author: PrismaticGynoid': - - rscadd: Adds the ability to 'crawl' to an adjacent turf by click-dragging yourself - to it, after a delay. This can be used to move while unable to stand. You can - also do this with other movable objects, if you really wanted to. - - tweak: Conscious mobs lying on the ground can now buckle themselves to chairs/beds. - This includes people missing legs. - chaoko99: - - rscadd: Plasma cutter is now a gun, instead of a fancy drill. -2018-01-19: - Sbotkin: - - maptweak: The Pilot Lounge has been replaced with the Pathfinder's Office. - - maptweak: The NT pilot's voidsuit has been moved to the Petrov, with the cycler. - Techhead: - - rscadd: Corpsman and Engineers have been granted access to the hangar to help - them go on expeditions. Or help with the inevitable injuries and damage from - returning expeditions. You know, whichever. -2018-01-20: - Sbotkin: - - tweak: Changed required players for cult and deity from 5 to 10. -2018-01-21: - Orelbon: - - rscadd: Modular consoles now have colored keys per program. -2018-01-23: - Devildabeast: - - rscadd: Added a maglight to the Security Guard's locker. Yay. - comma: - - rscadd: Sharp things are now better at cutting plants, doing double damage. -2018-01-24: - Chinsky: - - tweak: Expeditionary Corps paygrades were adjusted - Explorers are now E3, Senior - Explorers are now E5. Brings Explorers more in line with 'default' rank of other - branch(es), Crewman/PFC. - - tweak: 'Senior Explorers: can no longer be Janitors, Masters at Arms. Can be Brig - Officers, Deck Officers, Senior Engineers.' - - tweak: 'Explorers: Can be Corpsmen, Forensic Techs.' - - rscadd: Can now use IV bags to give IV to people - drag it onto them to start. - Only works when bag is held in hand by someone. - - rscadd: Can now use syringes to change contents of IV bags. - - tweak: IV bags now hold 120u instead of 200u. Their size is dynamic - tiny item - when empty, turning into normal sized (doesn't fit in pockets etc) when over - 60u inside. - - rscadd: Can now set transfer rate of IV drips with a verb. - - tweak: Blood bags in medical and orderable crates were replaced with NANOBLOOD. - The normal blood was just not as efficient with size/transfer rate changes. - Using NANOBLOOD nets you more or less same re-blooding speed. - FTangSteve: - - tweak: Bioprinter will now print species-specific internal organs if they are - available - Novacat: - - spellcheck: Fixed capitalization issue with Radiant Aura - - rscadd: Added telepath (mRemoteSay) contract to all spellbooks - - tweak: Added 1 point to all spellbooks - - rscadd: Added Teleport, Cure Light Wounds, and Noclothes to all spellbooks that - lacked them - - rscdel: Removed Mage Armor from Standard spellbook, and Cure Light Wounds from - Cleric spellbook - - tweak: Swapped Focus staff for Scrying orb in Cleric book - - rscadd: Added X-ray contract to Battlemage book, parrot transformation to Druid - book - - rscdel: Removed Student spellbook - - tweak: Made staves slightly smaller, so that they are more portable - - rscadd: Overhauled cure spells to be more effective - - tweak: Reduced cost of Spatial's magic missile to 1 - - tweak: Boosts healing spells ability to purge radiation - - tweak: Fixes sacrifice self-damage - Sbotkin: - - rscadd: Adds mounted cooling units, available in all hardsuits. -2018-01-25: - chaoko99: - - bugfix: Attacks will no longer phase through dead or otherwise incapacitated slimes. - - tweak: Slime surgery is generally faster and now supports researched scalpels - and incision managers. -2018-01-26: - Casper3667: - - bugfix: Torso tattoos now works! - CrimsonShrike: - - rscadd: You can now move down onto turfs containing climbable atoms (tables, machinery). - chaoko99: - - imageadd: Removed paint drips from door sprites and doubles their framerates. -2018-01-27: - Casper3667: - - rscdel: Taj curly, housewife, victory curls and finger curls hairstyles have been - removed. - CountAlex: - - tweak: '"Lowered the temperature at which a mob receives lung damage from -13C - to -30C."' - Orelbon: - - rscadd: New glass door sprite. - chaoko99: - - rscadd: Added a parallaxing background space that changes colors every round. -2018-01-28: - Casper3667: - - rscadd: There are new bandanas in the loadout that can be worn on the head and - over the mouth. Old bandanas are still available in the loadout. - Devildabeast: - - rscadd: Adds the decorated harness, an Unathi-exclusive accessory complete with - two dueling knives, to the loadout. - - tweak: Changed the dueling knife to a piss-weak variation of the kitchen knife. - - tweak: Changes scarves to be allowed for semi- and formal roles in the loadout. - Sbotkin: - - tweak: Several loadout access tweaks. More things for civilians and pilot's pin - for the CO, XO, and Pathfinder. -2018-01-30: - Chinsky: - - tweak: Shuffled around EC uniforms. SERVICE uniform is now a thing of its own, - NOT a mix of utility+service. DRESS uniform is now service uniform + dress jacket - + gloves. - - tweak: R&D lab refluffing. No longer 'Research', it is now called 'Fabrication' - Lab. You are not 'discovering' things anymore. You are using high-tech fabricator - that uses self-learning matrix to direct nanobots. Problem is, IT KEEPS GETTING - MEMORY CORRUPTION. You are re-training bots by letting them practice on less - complicated things before they can tackle more challenging blueprints. - Devildabeast: - - tweak: Gives the NanoTrasen badge to the NanoTrasen Liaison in their backpack; - removes it from the NT formal outfit. - chaoko99: - - tweak: Trash bags are no longer denied from holding the nuke disk. Try and figure - that one out. -2018-01-31: - CountAlex: - - rscadd: '"Adds away mission map XCV Ahab''s Harpoon."' - Memescope: - - rscadd: Added new hairstyles, some ported from Eris. - - tweak: Low Bun back sprite tweaked. - - tweak: Half-Shaved Emo renamed to Long Side Emo. - chaoko99: - - rscadd: The T-Ray scanner now can be toggled via an action button. - - bugfix: Lasers now exist long enough that the game is likely to actually render - them most of the time. I blame our tickrate. - comma: - - rscadd: '"Added Fleet patches for their respective Fleets of origin to loadaout. - Check https://wiki.baystation12.net/Defence_Forces#The_Fleet for more deets"' -2018-02-01: - Dukica: - - rscadd: Adds new hairstyles and beards. - FTangSteve: - - rscadd: '"Upgrading to aggressive or initiating normal grab now enters struggle - if victim isn''t on help intent."' - ZeroBits: - - bugfix: '"Heat Exchange Pipes can now be properly constructed."' - - tweak: '"Heat Exchange Junctions will now exchange heat."' -2018-02-02: - FTangSteve: - - tweak: '"Nabbers now have hue shifted sprites available"' -2018-02-03: - Hubblenaut: - - bugfix: Fixes plating being dark when prying off floor tiles. - Sbotkin: - - tweak: Added kitchen access to bartender and bar access for chef. - - rscadd: Added a bar locker. - - maptweak: Added actual bar stools to the bar. - - maptweak: Removed wall-mounted safe from the bar. - 'author: FTangSteve': - - tweak: Makes struggle grab state shorter and causes confusion to make resisting - grabs more difficult - chaoko99: - - bugfix: You can now crawl through vents without worrying about carrying reality - (The skybox) in your body! Squeek! -2018-02-04: - Hubblenaut: - - bugfix: Fixes alert monitors being red for away mission alerts. - - bugfix: Fixes nonmodular atmos/alert consoles showing away mission alerts. - Sbotkin: - - rscadd: Polarized windows are now buildable. Click a reinforced one with a cable - coil. - - rscadd: Their IDs are changeable as well, use a multitool on windows and buttons. - Techhead: - - bugfix: Antag preferences default to Low again instead of Never. Relatedly, your - preferences will now longer display Never when they haven't actually been set - as such, fixing a bug causing unwilling players to be drafted for antag status. - TheTrollDoctor: - - rscadd: Gives Engineering Contractor, Medical Contractor and Research Assistant - access to the hangar. -2018-02-05: - Hubblenaut: - - bugfix: Camera alarms get cleared upon repair. - PsiOmegaDelta: - - tweak: Labels that have been attached using a hand labeler will now be remain - even if the name changes. - - rscadd: Attached labels can now be removed using the "Remove Label" verb in the - "Object" category. - sabiram: - - bugfix: Corrected chemist slot loadout issues. - - bugfix: NanoTrasen security staff can now use their provided holobadges. -2018-02-06: - Hubblenaut: - - rscdel: Removes Captain's spare ID card. - Sbotkin: - - tweak: Supermatter hallucination does not affect people without eyes or with synthetics - eyes. -2018-02-07: - Hubblenaut: - - bugfix: Fixes windows not visually connecting. - Sbotkin: - - tweak: Adds the medical channel to the roboticist's headset -2018-02-08: - Devildabeast: - - rscadd: Added the alternate titles of "SolGov Ombudsman" and "Inspector General" - to SolGov Representative and "NanoTrasen Representative" and "NanoTrasen Executive" - to the NanoTrasen Liaison. -2018-02-09: - Casper3667: - - rscadd: The utility uniforms (EC, general and EC skirt) now looks better on taj. - Additionally so does the welding helmet. -2018-02-11: - ZeroBits: - - tweak: '"Dark Floor Tiles can now be made with steel."' -2018-02-12: - Hubblenaut: - - tweak: There is now an announcement when the rampant brand intelligence was successfully - gotten rid of. - - tweak: The origin vending machine now shoots a lot more aggressively. - - tweak: Blinking red light on a vending machine now means that it shoots. - - bugfix: 'Hacker event: Hacker was destined to always lose. Fixed.' -2018-02-13: - CountAlex: - - rscadd: '"Adds away mission map - Lar Maria."' -2018-02-16: - Techhead: - - rscadd: Adds a new matchmaking relation, Childhood Friend. It'll only pick people - from the same home system with the same approximate age. - - tweak: Served Together now prefers to match people with others in the same branch. -2018-02-17: - sabiram: - - tweak: The mounted plasma cutter found on hardsuits has been converted to a projectile - weapon, like the stand-alone item. - - balance: The hardsuit mounted plasma cutter's ammo capacity has been reduced to - 4 from 10. -2018-02-19: - Techhead0: - - bugfix: PDAs and Air Alarms should now detect exotic gases a little better. Phoron - is now counted as an exotic gas for these purposes. - sabiram: - - balance: Stun weapons are now much less effective against simple animals, such - as carp. -2018-02-22: - Hubblenaut: - - bugfix: Fixes gravity event bringing people to fall in areas that do not usually - have gravitation. - chaoko99: - - rscadd: Ctrl clicking a table will flip or unflip it. -2018-02-25: - Hubblenaut: - - bugfix: Fixes the handheld teleporter only working as expected when adjacent to - teleporter hub. - - bugfix: Fixes the ref2name converter only working when adjacent to target. - - tweak: Medical scanner integrated circuits now work in vision range. - - bugfix: Fixes ducttape not being able to be picked up. -2018-02-26: - Banditoz: - - rscadd: Dog tags now have useful information on them upon spawn, including branch, - religion, and blood type. -2018-02-27: - sabiram: - - rscadd: The null rod can now purify cult floors in addition to walls. - - balance: The null rod's damage has been reduced. - - tweak: Maw creatures, ghost dogs, faithless and shades are now take additional - damage from the null rod. - - tweak: The null rod is now the null sceptre, a normal sized item. -2018-03-03: - LorenLuke, TheTrollDoctor, ChaosAlpha, sabiram: - - rscadd: Humans with sufficiently long hair can now tie their hair into different - styles using the 'Tie Hair' verb in the IC category. - mkalash: - - tweak: Infections get worse much more quickly (from ambient to acute in five minutes, - acute to septic in 10 minutes) - - tweak: Antibiotics take longer to work and infections acute and above require - antibiotics and rest to cure. -2018-03-04: - Banditoz: - - tweak: The shield generator's emergency shutdown function is now hidden behind - a hackable wire. - - tweak: Cut down the shield generator's emergency shutdown time by 50%. - - tweak: The EMP from the emergency shutdown scales with current charge--and is - guarenteed to happen. - Hubblenaut: - - rscadd: The access decrypter now allows the user to choose an access code instead - of picking one by random. - sabiram: - - rscadd: Some simple_animals, most notably humanoid enemies, can now escape nets. -2018-03-05: - Banditoz: - - rscadd: The Chaplain's locker now has a bible. - Novacat: - - tweak: 'Advanced First Aid Kit: Swaps inaprovaline autoinjector for assorted pill - bottle.' - - tweak: 'Burn First Aid Kit: Adds three ointment kits, swaps inaprovaline autoinjector - for tramadol autoinjector' - - tweak: Oxygen first aid kits now contain inaprovaline pill bottle, dexalin pill - bottle, and four inaprovaline autoinjectors - - tweak: Toxin first aid kits now contain a dylovene pill bottle, three hyronalin - pills, and four autoinjectors of dylovene - - tweak: Autoinjectors are now the same size as syringes - - tweak: Emergency Oxygen/Nitrogen Tanks now start off full - - tweak: Regular Nitrogen tank starts off at the same level as oxygen tanks - - tweak: Paracemetol's painkiller effect increased from 25 to 35 - Sbotkin: - - maptweak: The D2 Teleporter and the Custodial Closet are swapped. - - maptweak: The Drone Bay's door access is changed to robotics and no longer bolted. - chaoko99: - - rscadd: Research goggles now readoff research levels, as well as an item's matter - contents. When used to examine reagent containers (Beakers, burgers, bloodbags), - it will read off the contents. But . . . - - bugfix: get_reagent() no longer returns a given reagent's path. - thefrostycoder: - - rscadd: Languages that you can understand will now be named when they are spoke. - (Ex. ' enunciates in Selenian') -2018-03-06: - thefrostycoder: - - bugfix: Fixed random paint drips on doors. -2018-03-08: - chaoko99: - - tweak: Most bots will now render below a human. - - rscadd: Floorbots will now assume the colors of the toolboxes used to make them. - - imageadd: Added a Syndicate floorbot. Sadly, he is not evil. - - imageadd: Advanced trauma medibot added. - - bugfix: Cleanbot works now. -2018-03-10: - Rebruiza: - - soundadd: APC's now play a satisfying sound when they run out of power. - - soundadd: Maintenance now has ambience. - - soundadd: Fire alarms now have a new sound. - - soundadd: Airlocks and bolts now have a new sound. - - soundadd: Blast doors now have a new sound. - - soundadd: Suit storage units now have a new sound. - - soundadd: Lockers now have a new sound. - - soundadd: Touching metal walls now have a new sound. - - tweak: The sound of tube lights turning on is now louder. - Techhead0: - - rscadd: You can now temporarily reseal damaged spacesuits with duct tape. Either - click on the suit itself, or target the chest and click on a mob wearing a spacesuit. - But be warned, further damage will tear off the patch. - TheWelp: - - rscadd: Adds a temporary effect object to make spells look prettier. - sabiram: - - rscadd: The Sol Representative and the NT Liaison have been provided a fancier - pen in their PDA for writing their important documents. -2018-03-11: - Devildabeast: - - rscadd: Adds a Morpheus Cyberkinetics uniform to the loadout. -2018-03-12: - chaoko99: - - rscadd: Cremation now takes time. Doing so with a live subject inside will cause - it to rattle around violently. You monster. - - rscadd: You can now resist out of a crematorium on a short timer. You may also - eject someone from a crematorium from outside it on a similar timer. - - bugfix: Crematorium now uses a glowing sprite when active. - - imageadd: Changes the crematorium and morgue slab sprites to something cleaner. -2018-03-13: - chinsky & sabiram: - - rscadd: Belts and towels can now be worn on the belt slot, even with no clothing - equipped. - mkalash: - - rscadd: Added secure energy guns, which require registration to a user and are - locked to stun without additional per-mode authorization. Secure small energy - guns replace security's tasers. - - rscadd: NTsec now also get a shock mode for their revolvers, which is also locked - behind command authorization. -2018-03-14: - Banditoz: - - tweak: Everyone is now able to use dog tags. - Devildabeast: - - tweak: Off-Duty is now a separate role from Passenger, and is allowed to wear - Service and Dress uniforms. - mustafakalash: - - rscadd: You can now deface people's heads by targeting it with help intent and - using a pen, crayon, or lipstick -- even if it's no longer attached. Heads with - shoulders below them can be gentrified using a shower, or in a sink otherwise. - - bugfix: You can no longer apply lipstick to things without lips. - sabiram: - - rscadd: The King of Goats now has a chance to enter a 2nd phase in combat. -2018-03-15: - Devildabeast: - - tweak: Forensic Technicians can now be Civilian Contractors. - - rscdel: Private Investigator has been removed as an alternate title from Passenger. - afterthought: - - bugfix: The Odysseus syringe gun can now synthesize reagents. - - bugfix: Slipping out of mechas during gravity failure fixed. - sabiram: - - maptweak: The pens that previously spawned in the CO and XO's offices now spawn - in their PDAs, instead. -2018-03-17: - Sbotkin: - - tweak: Makes thick clothes to protect from changelings' stings. - - tweak: Makes buosuits thick. -2018-03-20: - Banditoz: - - rscadd: You will now be thrown around while on a shuttle if you aren't buckled. - Devildabeast: - - bugfix: Corrects a typo in the code, gives the Contractor Forensic Technician - the correct badge, and gives them additional items in the loadout. -2018-03-21: - Chinsky: - - tweak: Non-broken ribs/skulls now protect the internal organs a bit. - - tweak: Bullets no longer damage internal organs twice. As an effect organ damage - from bullets is lowered significantly. - Hubblenaut: - - rscadd: Adds the Disciplinary Board Room. - mustafakalash: - - bugfix: Using resist to unbuckle yourself no longer temporarily breaks your hands. -2018-03-22: - Chinsky: - - bugfix: Mass-spectrometers now actually display names of reagents. - Crushtoe: - - bugfix: For the very first time, toggle-hub-visibility works. - Devildabeast: - - rscadd: Adds a uniform for Skinner Catering and a pin for the Free Trade Union - to the loadout. - afterthought: - - bugfix: Various borg gripper fixes, including self-upgrading, cooking, APCs, and - mecha - chaoko99: - - rscadd: Xenophage cultists are now a feature-- They are allowed to ventcrawl with - tomes, robes, and swords. Also monkies I guess. - mkalash: - - rscadd: You can now toggle off showing end titles. - mustafakalash: - - rscadd: Staff now have the ability to mark variables to easily view them in an - auto-updating panel. - sabiram: - - imageadd: Secure energy guns are now visually distinct. -2018-03-24: - Atebite: - - rscadd: Telecommunication servers now have tagging rules which determine the radio - channel name and color for a given frequency - sabiram: - - rscadd: Hardsuit rig modules damaged by EMP can now be repaired with nanopaste. -2018-03-25: - Devildabeast: - - rscadd: Adds a gyroscooter, a subtype of the space bike. - - maptweak: Adds a gyroscooter to the Research Director's office. - TheWelp: - - tweak: Tweaks zombie turn rate. Should be non-impossible. - - bugfix: Fixes zombie consume. - sabiram: - - rscadd: Wall mirrors are now containers, and contain some things. - - tweak: F6 is now msay instead of asay for staff. -2018-03-26: - Banditoz: - - rscadd: Add the ability to rename a bible, or change its icon. - - rscadd: Add new bible sprites from tlc2013. - Devildabeast: - - tweak: Allows Dionaea to select Forensic Technician at chargen. - - tweak: Makes the Roboticist a hybrid role between Engineering and Medical and - gives them access to medical items in the loadout. - Earthcrusher: - - rscadd: Adds a package wrapper synthesizer. - - tweak: Clerical borgs now include a package wrapper synthesizer and destination - tagger. - - tweak: Clerical borgs now have a "clerical gripper", not a "paperwork gripper", - and can pick up small-sized packages. - - tweak: Clerical borgs now include the Supply channel, in addition to Service. - - tweak: The destination tagger will now give feedback when selecting a destination. - - bugfix: Back-end adjustments to how package wrappers and synth grippers are handled. - FTangSteve: - - tweak: changes injury specific medical kit contents to medical pouches. - - tweak: advanced medical kits are now purple. - - rscadd: adds small emergency medical pouches that require no medical training - to use. - - maptweak: adds new medical items around. - - tweak: adds medical pouches to nanomeds - TheGreyWolf: - - bugfix: Armor pouch colors can now be properly selected from loadout. -2018-03-27: - Atebite and Cakey: - - rscadd: Ironing equipment to get those unbecoming wrinkles out of your uniform... - or your crewmates - - bugfix: Washing machines no longer eat clothes -2018-03-28: - Cakey: - - imageadd: Fleet service and dress uniforms have been re-sprited to take on a navy - blue theme. Fleet uniforms have now been split into three categories, with lower - ranks recieving a sailors uniform rather than the non-commissioned officer's - coat. - - bugfix: Fixes service and exploration uniforms sharing the same datums. - Devildabeast: - - rscadd: Adds a forensic belt to the Forensic Technician's locker. - - maptweak: Changes the Forensics door from glass to regular. - Earthcrusher: - - tweak: The jukebox has been resprited. - - rscadd: New tracks added to the jukebox music selection; some have had their names - corrected. - sabiram: - - soundadd: The Emperor of Goats now comes complete with his own battle themes. -2018-03-29: - Bill-Luxe: - - rscadd: Ported railings from the Europa. You can now create it by using a different - material sheets. - Cakey: - - maptweak: Deck 4 has been re-worked. Supply now has a bigger warehouse and the - escape arms have been moved forwards. - - maptweak: Added the very important laundry room on deck 4, with ironing boards - soon to come. All washing machines outside of the laundry room have been purged. - - maptweak: Added green pens to liason and spare offices. -2018-03-30: - PurpleMartinJCK: - - bugfix: Fix medical crate sprites, adding back to storage.dmi - - tweak: Add pouch spawns to small medical random spawn - - tweak: Add trauma kit to medical kit spawn - - bugfix: Fix pouch names in venders - - rscadd: Add new pouch supply crates -2018-04-01: - Chinsky: - - tweak: Liver damage change. Now when it's not working right, it doesn't apply - staright up damage (only for alcohol), it builds up ammonia in the blood up - to toxic levels. Better get those scrubbers going. - - tweak: Kidneys are doing similar thing, but with potassium. - - tweak: Potassium now raises pulse, dangerously so over 10u. - - tweak: Bananas now have bit of potassium in them. - Devildabeast: - - rscadd: Ports Grayson Arms prosthetics from Polaris. - - rscadd: Ports robolimb optics from Paradise. - - tweak: Vox can no longer be selected as a species when building an FBP. - - tweak: Morpheus prosthetics are no longer restricted to IPCs. - - tweak: The Morpheus Alt. head is now the default and the Monitor is a subtype. - afterthought: - - bugfix: PDAs with medical access once again have a handheld medical scanner scanner - program. -2018-04-02: - Chinsky: - - rscadd: Finally swaps old stinky blood in Medbay for NANOBLOOD(TM). Use wisely. - - rscadd: Increased immersion. - - experiment: To further immerse you in your character, you now need to blink manually - if you have organic eyes. There's helpful messages to remind you of that now. - - experiment: To help new players acclimatize to our high RP standards, helpful - hints have been added, shown when you perform ceratin actions to guide to maximum - RP path. - - experiment: As an experiment, different kinds of guns can now be selected in custom - loadouts in Utility section. Everyone can get holsters too now. Spare ammo is - not included. - sabiram: - - balance: Wizards can no longer teleport to non-station Z levels. -2018-04-03: - Dukica: - - rscadd: With the addition of a fancy new, tentacular helmet, the Skrell can now - use the Rescue Module (Medical RIG) suit! - sabiram: - - maptweak: Added The Orb, a mining focused away site. -2018-04-04: - Devildabeast: - - maptweak: Adds a mech recharger to the Security Armory. - afterthought: - - bugfix: Fixes roller bed SSD bug. - chaoko99: - - bugfix: T-rays actually work on ninjas now. - - tweak: Portable atmospherics devices will now work off an APC if available. - mustafakalash: - - tweak: The Torch will once again always spawn on an asteroid. - - tweak: Changes occupation settings from a cycle to a list. -2018-04-06: - Devildabeast: - - tweak: Allows the Roboticist to select medical webbing vest, medical drop pouches, - and the medical poncho in loadout. - PurpleMartinJCK: - - rscadd: Wizards now have a spell that lets them make a long-lasting portal to - away sites. -2018-04-07: - sabiram: - - tweak: Wire brushes are no longer as effective a melee weapon as a pickaxe. -2018-04-08: - Chinsky: - - rscadd: Can now pick EC Directives as shackles for IPC. - chaoko99: - - tweak: Crawling now occurs by clicking a turf. - - tweak: Crawling is now significantly faster. - - bugfix: You can no longer drag other people, forcing them to crawl. -2018-04-09: - Devildabeast: - - maptweak: Adds green pens to the SolGov Representative's and NanoTrasen Liaison's - offices. -2018-04-10: - ParadoxonKomplikon: - - tweak: '"Exotic seeds do not contain certain reagents, such as alcoholic drinks, - anymore."' - - tweak: '"Exotic seeds'' production time is now generally shorter than before."' -2018-04-11: - CakeQ: - - maptweak: Replaces the conference room on deck one with a briefing room. - - maptweak: Added a table/shutter combo intbetween the captain's mess and briefing - room for the chef's use. - FTangSteve: - - rscadd: Makes breathing far more relevant - - rscadd: CO2 buildup is now potentially dangerous and must be scrubbed - - rscadd: Tank sizes have been adjusted and will need to be refilled more often -2018-04-12: - chaoko99: - - soundadd: 'C4, timers, and nukes will now make an ominous beeping noise. spriteadd: - Porta-nuke resprited, uses the porta nuke sprite from TG.' -2018-04-13: - FearTheBlackout: - - maptweak: Moves exosuit tracking beacon crate to Robotics Maintenance - chaoko99: - - bugfix: Crawling works while lying down again. - - bugfix: Crawling no longer functions in space. -2018-04-14: - Cajoes: - - rscadd: Added a lube variant called oil, comes in jugs of 100 units, dispensable - from robotics vendor. - - rscadd: Added beer and ale cans to the alcohol vendor. - - rscadd: Added lava lamps and office toys to the misc. supply menu. - - rscadd: Added fish meat and a big bag of salt to the kitchen. - - tweak: Changed contents of some drinks. - Cakey: - - imageadd: Adds new floor tile sprites. - - imageadd: Adds new floor decals. - - rscadd: Adds several new floor tile types to litter the station with. - Chinsky: - - rscadd: Can now use grab on EC plaques to display Directives to people. Forcefully. - PurpleMartinJCK: - - rscadd: Adds species based darkvision - - tweak: Tweaks light falloff calculations - sabiram: - - tweak: Species with better than average night vision are now more vulnerable to - flashes. -2018-04-15: - Chinsky: - - rscadd: Can use pill bottle on self aiming at mouth to quick-pop a random pill - from it. Yum. - HetNeSS: - - bugfix: Expedition storage area layout fixed. All lights should be connected properly - now. - - maptweak: Sorted out the expedition storage inventory. Piping, maint door location - adjusted. - Sbotkin: - - maptweak: Removed excess stuff (extra tools, consoles) from the forensic technician's - laboratory. - - rscdel: Removed excess tools from the forensic technician's locker. - sabiram: - - tweak: The automatic transfer vote called at 3 hours has been changed. The 'Continue - the Round' option will now extend the round by 30 minutes instead of 1 hour. - - tweak: The default type of robot in character select is now 'robot', a positronic - unit, as opposed to 'cyborg', which has a human brain. - - tweak: Robots with a computer chip based brain are now referred to as 'drones'. -2018-04-16: - Cakey: - - maptweak: The mess hall has been re-shuffled to allow for the cook to have more - of a presence. - Sbotkin: - - maptweak: The Chief of Security's Office is remapped. - - maptweak: The Board Disciplinary Room no longer has attributes of a high secure - area. -2018-04-17: - Banditoz: - - maptweak: More newscasters have been mapped throughout the Torch. - Sbotkin: - - maptweak: The Brig Officer's office is remapped. - Zuhayr: - - tweak: Xenomorph brute resistance, movement speed and and armour have all been - significantly adjusted. Be on the lookout for xenos being nerf OP and report - issues to the tracker. - afterthought: - - tweak: 'Skills are now selected on a per-job basis under Occupations. Warning: - current skill data will be lost!' -2018-04-18: - Banditoz: - - tweak: Non-living players may no longer cast votes of any kind during crew transfer - votes. - Cajoes/BloodyMan: - - rscadd: Ports TG Cigarette Paper code - - tweak: added four more cigarettes to cigarette packs - - tweak: gave a use for existing filter and cigarette paper icons - - rscadd: added icons for, lollipops, gum, nicotine gum, rolled cigarettes, filter-boxes, - gum-boxes, cookie-packs and spitwads - - rscadd: added icons made by Woah Hold There Buddy, (tobacco packs, chewing tobacco - packs,) - - rscadd: added chewable category, reskinned cigs you equip, chewing tobacco, lollipops - and gum added - - rscadd: added recipes for using the rolling papers to make cigs using dried plant - matter or pre-packed tobacco - - rscadd: added onmob animation for chewing gum (but not for nicotine gum) - HetNeSS: - - tweak: Added a capability for surgeon borgs to pick up an IV packs with their - organ gripper module. -2018-04-19: - chaoko99: - - rscadd: Fire extinguisher may now accept fluids from all forms of reagent containers - (HCL dispensers, capsaicin dispensers, coolant tanks, fuel tanks etc.) and spray - them at EXTREMELY low levels of efficiency (100 units a spray, wasteful for - most things.) Firefighter extinguishers may also accept in the same way. BEWARE. - - tweak: Water may now cool down to 20c when sprayed (Includes grenades, for example.), - with a diminishing return below 60c. - - rscadd: Like the above, coolant may be used to cool areas, best saved for phoron - fires or traitoring, because it's extremely efficient and may dip an area to - just a little over 0 kelvin if you're not careful. - - tweak: Extinguishers will fire multiple puffs of reagents instead of three sprays - at the exact same time. More or less consequence of a performance change. - comma: - - tweak: Replaces most eguns with secure variants. Swipe ID to register. - - tweak: Secure guns get all modes unlocked if it's Red Alert - - tweak: CO's revolver was moved out of locker into a display case -2018-04-20: - Sbotkin: - - maptweak: The Forensic Technician's office is remapped again, a lab added. - - maptweak: It's now possible to access the morgue as the fortech. - TheWelp: - - rscadd: Adds Spellbound Servants. Powerful minions of wizards, each with their - own gimmick and theme. - - rscadd: Implements two mutations, nobreathe and spaceres, in conjunction with - the spellbound. - chaoko99: - - rscadd: hydroponics trays, covers, and plump helmets have been re-sprited. - - tweak: Plump helmets are now repeatedly harvest-able, but require a high amount - of nutriment to sustain. You only harvest the 'helmet' of the plump helmet, - as well. - - tweak: Hydro trays will default to 5 lumen lighting for their covers -2018-04-21: - HetNeSS: - - maptweak: Morgue has been split up to two sections - "Morgue" and "Autopsy". Autopsy - - area created. - - imageadd: Autopsy - area icon added - - rscadd: Two sliding doors added to separate the morgue from the autopsy zone. - Morgue or Medical access level required on each one. Autopsy atmospherics controller - added. Morgue - lightswitch, APC added. -2018-04-22: - Banditoz: - - rscadd: You can now export ore scanner disks inside of crates on the supply shuttle - for some extra supply points. - BlueNexus: - - rscadd: Plasteel combat shields have been added to the emergency armoury, replacing - the unused biosuit closet. - Chinsky: - - rscadd: Adds color picker mode to floor painter (which is renamed to paintgun). - - rscadd: Can now hit APCs with heavy big things to unlock them. Doing so risks - breaking them completely. - - rscadd: Being in pain, not seeing properly, or being confused will now affects - accuracy of your attacks. - HetNeSS: - - maptweak: A survellance camera had been installed - D3 mess hall - galley. - sabiram: - - tweak: Stun electrode projectiles fired from stun revolvers now move faster. -2018-04-23: - Chinsky: - - rscadd: Supply crates now have secure variants of guns. - - rscadd: Unsecure guns can be ordered with contraband crates. - Sbotkin: - - tweak: Bridge Officers' got helmets and correct tablet computers. - sabiram: - - bugfix: Fixes red alert being available in the command and communications program. - - bugfix: Red alert once again may only be set through the keycard authentication - devices (small white and black panels on walls) found in officers' offices and - on the bridge. - - rscadd: Red alert now only be cancelled using the keycard authentication devices. - - tweak: Admins are now provided jump links in the 'has forced open an emergency - shutter' message. -2018-04-24: - Chinsky: - - tweak: Skill costs and free skillpoints amounts were severely tweaked, check your - allocations since they're most likely invalid now. - - tweak: Tweaks to some medicines' OD effects. - - tweak: Paracetamol and cold medicine now do not apply organ damage, but still - prevent natural healing when you OD. - - tweak: Inaprovaline, being brain soothy chem, makes you slower and sometimes slur - and get drowsy when you OD (60u folks). - - tweak: Bicaridine, on top of usual toxic effects, now has a chance to heal arterial - bleedings! But at the same time it blocks blood flow, lowering blood circulation - by 20+% (depends on how much did you go past the OD threshold). - HetNeSS: - - tweak: Magnetic grippers are now capable of grabbing deuterium and tritium ingots - as well. - comma: - - rscadd: PDAs are now modular computers. -2018-04-25: - BloodyMan: - - rscadd: Blending tofu now yields an egg substitute for vegan baked goods. - afterthought2: - - bugfix: Skill system saving ACTUALLY works correctly again. - - bugfix: Skill system saving works correctly again. -2018-04-26: - BlueNexus: - - bugfix: Uplink-bought railguns no longer explode - Chinsky: - - tweak: Lung popping condition changed. Now it only happens when pressure changes - (both internal and external), not constantly when you're in vacuum. Pressurized - suits prevent popping by reducing external pressure difference impact. -2018-04-27: - afterthought2: - - bugfix: Crisis borg splints now work. -2018-04-29: - Chinsky: - - tweak: Moved explorers gearup room to where that gross quarantine thing was. Previous - location is now an unused room - - tweak: Moved bunch of crap from explorer lockers onto the racks and tables. - - tweak: Explorer access now opens the room where anomaly containers/stasis cages - are, the one with the drill. - - tweak: Gave bunch of random crap to explorers in the gear room - glowsticks, cameras. -2018-04-30: - Banditoz: - - rscadd: Cyborgs get a secure energy gun (replaced taser rifle) which can be granted - lethal mode by a console, or red alert. Silicons cannot set it for eachother, - or themselves. -2018-05-03: - afterthought2: - - bugfix: Irreparable organs can no longer be healed by any means. -2018-05-04: - HetNeSS: - - tweak: Bandolier's can now also hold pills, pill bottles, papers, pens, photo's - and marshalling wands. - sabiram: - - rscadd: Added a pathfinder hardsuit module to exploration suit room. - - maptweak: Fixed several issues in the exploration storage rooms. - - rscadd: Added illumination grenades, which generate a bright, wide light when - detonated. Added illumination grenade crate to supply under miscellaneous category. - Added hardsuit illumination grenade module. -2018-05-05: - afterthought2: - - rscadd: Scanner modules added for modular computers. Available (job-depending) - on spawn, and also from supply crates. - - rscadd: 'The scanners are: paper, medical, atmos, and reagent. You can have at - most one at any time. Compatible with all computers, but only the paper and - atmos scanners will do anything when in a console.' - - rscadd: Scanner program added for modular computers, which interfaces with scanners. - Can view and save scan results, which may be edited with NanoWord. - - tweak: If a scanner and a nanoprinter is installed, the printer can now only be - refilled with blank paper. - - bugfix: The tax program should no longer produce duplicate copies or unexpected - behavior. -2018-05-06: - TheGreyWolf: - - bugfix: The MAA alt title is now fixed to not exist. - afterthought2: - - rscadd: 'The crisis borg module comes with a stasis bag rack, which can hold 3 - body bags or stasis bags. Starts empty to avoid exploits: go find your own.' - - tweak: Borgs now fold up roller beds by clicking and dragging, like everyone else. - - tweak: Borg interactions with ironing boards while having the roller rack equipped - are similar to humans (they still can't iron, though). -2018-05-07: - Chinsky: - - rscadd: Can now use multitool on secure guns to disable tracker. Prevents gun - from firing, but won't report its coordinates to the force auth program. - - rscadd: Makes emagged secure guns not show up too. -2018-05-08: - afterthought2: - - bugfix: Borgs and AI are given emails after name selection. Emails are updated - on name change. - - bugfix: Borgs and AI can read emails from the "Email Client" in the Subsystems - verb. The email administration program can still be accessed by AI but has been - moved to "Email Administration." -2018-05-09: - afterthought2: - - tweak: CE and CMO get job-appropriate scanners on their PDAs now. - - tweak: Modular computer scanners can now be printed via protolathe. - - tweak: Hitting a modular computer with a paper bundle puts it in the printer. - To scan, separate the bundle. - - bugfix: The chemist's pda scanner is fixed. -2018-05-10: - chaoko99: - - soundadd: Cleanbots now make cute little beeps when active and functioning. -2018-05-15: - Banditoz: - - rscadd: Added a new gamemode, fathless; a mix between cult and deity (also known - by some as godcult.) - Cakey: - - maptweak: Moved alll checkpoints to be positioned in more key areas. B-deck and - deck one checkpoints are now connected via ladder. All checkpoints now have - the ability to cut-off certain sections of the hallways for flow control. - - maptweak: Brig officer now has a disposals bin. - - maptweak: Emergency armory has been altered to have 3 carbines and 3 e-guns as - opposed to the 2:3 loadout to match the rest of the E-ARM. - - maptweak: Brig armory has been altered to have 4 e-guns as opposed to 3 to match - the rest of the armory. - Casper3667: - - rscadd: Vox now spawn with their air filter gas mask. - Dukica: - - rscadd: 'Enabled ponchos, aprons and hazard vests for GAS to wear. rstweak: Some - typos were cleaned up.' - Miraviel: - - bugfix: You can now use sign language even if you are muzzled. - afterthought2: - - tweak: Very damaged heads will be marked as "critical" rather than "irreparable" - on scanners, and can be healed even past max_damage threshold. - - rscadd: Adds a deck management program, which gives some information on shuttle - movements. - - rscadd: Adds flight plans, which can be filed via this program by those with shuttle - flight access. - - rscadd: If the flight plan includes a roster, the members on the roster can be - summoned via automatic comms announcements or batch-emailed. - - rscadd: Adds other reports that supply can file about shuttle missions after the - mission has departed/returned. - - rscadd: Adds a stripped-down report viewer program, currently mostly useful for - viewing emailed reports. - chaoko99: - - rscdel: Reverted a change that made it impossible to draw/fill plant reagents. - You may now make your tomato grenades again. - tlc2013: - - bugfix: Fixed certain Spellbound Servant equipment not having the proper icons, - or - at worst - having no icons at all. -2018-05-16: - Banditoz: - - maptweak: Remaps the Petrov toxins lab to be more intuitive to use. - - tweak: Powered crossbows have been buffed. You don't need to draw back as much, - and it takes less time to do so. -2018-05-17: - afterthought2: - - tweak: The deck management program will now allow you to queue up scheduled missions, - rearrange their order, and delete them. Once started (i.e. once the shuttle - departs) the active mission is finalized and can no longer be deleted or moved - around, but can still be renamed. - - tweak: Deck management announcements are now a bit less spammy and let you choose - an area other than the shuttle to meet. - - tweak: One more report has been added, a post-mission summary. - - bugfix: Crew record access issues fixed. - chaoko99: - - tweak: Emergency shield generators now cover an entire screen. Power draw per - shield unaffected. -2018-05-18: - Cakey: - - maptweak: Adds railings to all stairwells. - Chinsky: - - tweak: PDAs and ID cards no longer have whole name and job in their item name. - - tweak: When examining people, you will see a linkie to see their ID. That will - give you name/job if you're nearby, or show you the window with full info if - you're adjacent. - sabiram: - - rscadd: Blast doors and shutters can now be damaged by hitting them with sufficiently - powerful items. - tlc2013: - - rscadd: Added a recolorable kimono to the loadout selection. -2018-05-19: - PurpleMartinJCK: - - rscadd: add new nabber organs - - rscadd: flesh printer can now print nabber organs - - rscadd: low blood can force nabbers out of nab mode - - tweak: crushing and shredding now decloak nabbers - - tweak: lower some nabber brute resistance in favour of natural armour - - tweak: encases all external nabber organs in carapace - afterthought2: - - tweak: Those with heads access now have more access to Deck Management. - - bugfix: Access issues with supplementary Deck Management reports should be resolved. -2018-05-20: - afterthought2: - - tweak: Headsets start with a free encryption key slot now. -2018-05-21: - afterthought2: - - tweak: Cryo tubes use up chemicals ten times faster. Effective healing rate remains - unchanged. - - tweak: Genetic damage is healed ten times faster in cryo tubes. - - bugfix: The organ printer now prints visible organs. -2018-05-22: - Banditoz: - - rscadd: Borgs can now lock and unlock their own panel. - Cajoes: - - rscadd: Snix, HotFoods and Lavatory vending machines and hid them on the map. - - tweak: All snack food relative paths are now absolute paths. Nobody noticed nor - cared. - Cakey: - - maptweak: Consoles have been rotated to match how they should be. - chaoko99: - - rscadd: Added a light-toning system, lights will color dynamically to what color - they emit. - - rscadd: Fingerprints will no longer magically phase through gloves. - - tweak: Robolimbs don't make fingerprints anymore. - - bugfix: Thick gloves actually use thickmaterial. -2018-05-23: - Banditoz: - - bugfix: Destroyed portable turrets are now climbable. - TheWelp: - - rscadd: Adds a new deity menu free of uplink structure. - - tweak: Some deity store items now increase in price the more you buy them. (E.G. - Conjuration) - - rscdel: Remove Godvision. - afterthought2: - - bugfix: Fake crew announcements should use ID card data now. - - bugfix: Antag preferences being reset to low should be fixed. If you continue - experiencing this issue, please submit a new bug report. -2018-05-24: - Alex6511: - - bugfix: Fixed "3" being printed when placed on a surgery table. - chaoko99: - - bugfix: Lights aren't super dark anymore. Blame Chaoko99 for being blind and not - noticing the difference during testing. - - bugfix: Fixes weird sprite bugs for broken and burnt lights. -2018-05-25: - PoZe: - - rscadd: Added oxygen candles as an item. They are one-time emergency item that - is used to fill 2-3 tiles of depressurized environment - afirpo: - - maptweak: Added an access button to icly cycle between Exterior and Interior fusion - core chamber. - afterthought2: - - bugfix: Crew records will now correctly display things like ' and " in-game. -2018-05-26: - HetNeSS: - - maptweak: The fore docking port on deck four had been widened in size, as the - main docking port be probably should. - - maptweak: Remodelled the Mercenaries gamemode transport shuttle, to suit the extended - docking bay, as well as for more beefy and physics-justifiable look. - - bugfix: '"Northeast of First Deck" and "Northwest of Fourth Deck" waypoints swapped - places (aka fixed)' -2018-05-27: - Casper3667: - - rscadd: Tajara can now use normal gloves and claw attacks can't be used when wearing - gloves. -2018-05-28: - Cajoes: - - tweak: New fax machine icon. -2018-05-30: - Alex6511: - - tweak: Amputation text is now larger for the surgeon performing the amputation - Banditoz: - - bugfix: The rapid taser cooling module (now called the rapid weapon cooling module) - upgrade now works. -2018-05-31: - afterthought2: - - rscadd: the report editor can now print reports and export them to text files. - - rscadd: the report editor can download new (blank) reports from NTnet. A few of - the forms from the wiki can now be chosen in this way. -2018-06-01: - Banditoz: - - rscdel: Hand teleporters have been removed from teleporter rooms. - - maptweak: Teleporter beacons have been removed from some high security areas onboard - the Torch. - - maptweak: A teleporter beacon has been added to NanoTrasen's miscellaneous research's - test chamber. - sabiram: - - tweak: Off-duty ID cards are now visually distinct and can no longer be modified. -2018-06-02: - afterthought and chinsky: - - rscadd: 'The "Medicine" skill now influences interaction with some medical objects: - syringes, defibrillators, sleepers, handheld scanners, full body scanners, IV - drips, and splints.' - - tweak: Full body scanners now store scan data. Use the menu options to print, - erase, or scan/re-scan. - - tweak: IV drips now take a short time to hook up. -2018-06-06: - afterthought2: - - tweak: Off-Duty is no longer a separate job, but an alt-title of Passenger. You - no longer spawn with ranks in uniform if selecting off-duty. - chaoko99: - - tweak: Books and papers may now be 2x as long. This was changed to make it so - records could be longer, without the skeleton taking up half the usable text. -2018-06-07: - Cajoes: - - rscadd: Added new visors for Tajaran to shield their eyes with. Available exclusively - in the xeno portion of the loadout screen. - - rscadd: Added Hot Food showcase to manage kitchen's output. - - rscdel: Removed Lavatory Essentials Vendor on Deck 2 due to [redacted]. -2018-06-08: - TheGreyWolf: - - bugfix: Press tags can now actually be taken by the press. - Zuhayr: - - rscadd: Added methyl bromide, a fumigant gas that kills spiders. - - rscadd: Added bromide, a toxic reagent, from which can be derived a liquid form - of methyl bromide. Methyl bromide kills spiderlings and egg sacs when injected. - - rscadd: Added algae to hydroponics. Algae produce liquid bromide and gaseous methyl - bromide. - - rscadd: Added an interaction to optables that will automatically put someone lying - on top of it to sleep with no need for N2O or painkillers. - - rscdel: Removed N2O pumps as being both redundant and buggy. - afterthought2: - - rscadd: The slowdown for pulling (i.e. ctl-click) stuff is now affected by the - "Athletics" skill. - - tweak: Bigger/stronger species pull things faster. - - rscadd: Pulling stuff generates adrenaline, depending on "Athletics" skill. This - may raise your heart rate. Pulling for a long time without breaks with low skill - may give you the jitter effect and minor heart damage (won't kill you). -2018-06-09: - Banditoz: - - tweak: The T-Ray scanner is now faster, has an increased range of 7x7, and is - now without the flicker effect. - sabiram: - - tweak: Gyroscooters now shield their pilot from 5% of projectiles, down from 40%. - - tweak: Gyroscooters are now slightly slower. - - tweak: Attempting to move a bike or gyroscooter while stunned will now eject you. -2018-06-10: - Banditoz: - - maptweak: The Aquila has been divided into areas, and remapped a bit. - - rscdel: The Aquila's death trap has been removed. -2018-06-11: - BlueNexus: - - tweak: Increased TC costs for railguns - Chinsky: - - tweak: Now for ghetto EVA the size of thrown thing matters. Tiny things give you - ~10% chance of direction change, with 'normal' sized things having 90%, guartanteed - above. - afterthought2: - - rscadd: Throwing "huge" items (e.g. roller beds, backpacks, certain guns, rigs, - jetpacks) or normal sized mobs without "Basic" skill in "Athletics" will briefly - weaken you (and the items won't go far). - - rscadd: Thrown items don't go as far and have less speed/force if you have lower - "Athletics" skill. - - rscadd: The weightlifting machine at the gym has more weight levels. Having high - "Athletics" means you can lift more. If you try lifting way more than you are - capable of, you may hurt yourself. - sabiram and Cakey: - - rscadd: The bird temple on the mining map has been redesigned and now houses the - fountain of youth. -2018-06-12: - Broseph Stylin: - - rscadd: Added rucksacks to Character Setup. They function exactly the same as - backpacks. - afterthought2: - - rscadd: Lactate is a reagent that increases heart rate, causes generally harmless - shortness of breath, and slows movement. After processing a large amount of - lactate, mobs may experience temporary jitters. - - tweak: Instead of producing adrenaline, pulling produces lactate. - - rscadd: Robots can now interact with storage items like boxes and bags. - chaoko99: - - bugfix: Trays will now adequately notify you of not being able to be placed in - bags. -2018-06-13: - Cakey: - - imageadd: New wall sprites have been added. - - imageadd: New door sprites have been added. - - imageadd: New window sprites have been added. - - imageadd: New grille sprites have been added. - - rscadd: Airlocks are now paintable. - - rscadd: Window frames have been added, which connect to walls for that aesthetic - look. - - rscadd: Airlocks can now be painted using the airlock painter. - - rscadd: Added paint presets to the paintgun. - - maptweak: The Torch has been modified to use window frames instead of just windows. - - maptweak: Maintenance has been given more catwalks. - - maptweak: Added binoculars to security checkpoints. - ZeroBits: - - tweak: Material Grinders have been reworked to allow different reagent quantities - and multiple reagents when grinding material sheets - Zuhayr: - - tweak: Gas inhalation effects are now reagent-based. Gases create reagents inside - the body, which then apply effects. This means that gaseous phoron exposure, - for example, needs to be treated with dialysis/dylovene, as it fills your guts - up with liquid phoron. - - tweak: The poison_type var on species datums is now poison_types, and determines - which poison gasses show you the toxins UI indicator, rather than which ones - cause poisoning. The actual effects of poisonous gasses is determined by the - reagent value (as per dexalin being injected into a vox, etc.). This really - shouldn't impact anything for the average player, except that chlorine and nitrogen - dioxide (not N2O, for clarity) are now actually poisonous. - - tweak: Helium now makes your voice squeaky. Very important feature. - - tweak: Xenon is now functionally the same as N2O, including the following note. - - tweak: N2O now causes giggling, confusion, dizziness and occasional passing out - at high dosages, rather than instant and immediate knockout. Still useful for - riot control and now flooding it into distro isn't a round-ender. You might - even be able to use it without admins shouting at you! Refer to the optable - neural suppressor PR for a replacement method to sedate people for surgery. - - tweak: Finally, as a sidenote, Bogani will actually be poisoned by oxygen and - chlorine will have a visible overlay now. - afterthought2: - - rscadd: Experienced in Chemistry allows you to see scannable reagents in a held - beaker/container. - - rscadd: Professional in Chemistry allows you to see all reagents in a held container. - - tweak: Science goggles give more precise volume readings at higher chem skill. -2018-06-14: - ElRobusto: - - tweak: Cuts the Vox space suit movement penalty by half. - TheWelp: - - rscadd: Adds two currently admin-only races, the Starborn and the Blueforged. - Will be available in future deity form. - - tweak: Tweaks Shadow species death to not cause runtimes. -2018-06-15: - Banditoz: - - tweak: The cyborg manual now has all the current cyborg modules. - - tweak: The Supermatter guide shouldn't lead engineers to delaminate the engine, - now. - ParadoxSpace: - - rscadd: Adds two new IPC/FBP chassii, Morpheus Mantis and Ward-Takahashi Economy. - - tweak: Grayson, W-T Economy, and Xion are now available at the roboticist fabricator. - afterthought2: - - rscadd: The chem grinder is dangerous to use at "Unskilled" in Chemistry and will - lose some ingredients depending on skill level. - - rscadd: The chem dispenser will give inaccurate amounts of ingredients or add - extra contaminating ingredients when below skill "Trained" (in Chemistry or - Cooking, depending on dispenser) Can be slightly dangerous. - - rscadd: The chem master now has two modes. "Quick" will move the correct amount - of ingredients from beaker to buffer, but also add contaminants (depending on - skill). "Thorough" will only move the desired ingredient, but incur losses (depending - on skill). Skill checked is Chemistry for chem master, Cooking for Condimaster. - - rscadd: Moving ingredients from buffer to waste or beaker acts like on "Quick" - mode. -2018-06-17: - ParadoxSpace: - - rscadd: Adds bowman type headsets to all non-service departments. - - rscadd: Adds unique pilot, miner, corpsman, and explorer headsets. - - rscadd: Adds tacticool Syndicate headsets to mercs. - - rscadd: If tcomms is down or unavailable for whatever reason and you have a shortwave - radio in your pocket, your headset will now automatically transmit through it. - It still cannot do department channels. -2018-06-18: - Chinsky: - - tweak: Some loadout items are now restricted by branch instead of jobs. Some are - restricted by both. You might experience sudden loss of swag on next spawn, - check your setup. - TheWelp: - - rscadd: Adds various starlight specific spells for use in future deity form. - - tweak: Adds two new flags for targeted spells to filter via faction. - - tweak: Adds more effects for some spells. - afterthought2: - - rscadd: adds the instruct verb. A character with basic leadership and experienced - skill X can instruct a character in X from Untrained to Basic. Has a 15 minute - cooldown to use; buff lasts all round; max of three buffs on any person. The - target has to be close and there's a short timer during which neither party - should move. - chaoko99: - - rscadd: Adds a fully reusable backstabbing mechanic, used by butterfly knives - and switchblades. -2018-06-19: - Kurgis: - - tweak: Changed the brain loss Impedrezine inflicts to allow it to kill a person. - Miraviel: - - rscdel: 'Removed the time restriction on the following jobs: Explorer, Corpsman, - Deck Technician, and Scientist.' - - maptweak: Reorganized the kitchen cabinet and the crates in the Medical Storage - (the big bag of salt and the defibrillator are no longer blocking everything - else). - - maptweak: Removed the anaesthetics closet from the Medical Storage. - comma: - - tweak: XO now gets a box of spare headset keys instead of box of XO headsets - - rscadd: Bowman headsets can hold 3 keys instead of 2 - - rscadd: BO Bowman headsets hold 4 keys -2018-06-20: - BlueNexus: - - balance: Railguns have been rebalanced to fill the niche of an anti-armour or - sniper type role. - - balance: All railguns now suffer a substantial penalty when fired one-handed. - - balance: The basic railgun projectile no longer stuns, and does less damage. - - balance: All railguns which accept steel rods as ammunition now use the basic - projectile. - - balance: The TCC railgun's (available in the traitor menu) ammo capacity has been - reduced from 10 to 6. - - balance: Substantially increased firing delay on all semi-automatic coilguns and - railguns. - - balance: Holding or stowing a railgun now slows you down more. - Chinsky: - - rscadd: EVA skill now has mechanical effects. - - rscadd: Space slipping chance is affected by EVA skill. Bit higher at unskilled, - lesser with skill, no slipping at experienced. - - rscadd: Flooring when entering gravity from space is now not guaranteed at Basic - skill or more. Doesn't happen at Professional skill. - - rscadd: At Unskilled and Basic skill, jetpack can sometimes go wrong way. Not - that bad if you notice in time and have fuel to turn back. - - rscadd: At Professional skill you go faster when in space with a jetpack. Zooom. - - tweak: Skills now affect surgery. Trained or Experienced (depending on what you're - trying to do) skill is needed to ensure step won't fail. Professional skill - will offset various penalties (not proper optable, improvised tools etc) a bit. - Time of step is affected by Anatomy skill too. - - tweak: Some other skills help with some steps, e.g. Trained Forensics offsets - penalty for incisions, and Complex Devices skill is used instead for robotic - organ steps, with Electrician and Construction helping with simple limb repair - steps. - Chisnky: - - experiment: Melee weapons now have different attack cooldowns, generally with - smaller weapons being faster, bigger slower. Normal sized weapons are baseline, - having same attack cooldown as they did. - - experiment: Material weapons further tweak their attack cooldown based on material - used. - afterthought2: - - rscdel: The leadership skill has been removed. Check your characters' skill allocations. - - tweak: The instruct verb works like before, but no longer requires leadership - skill to use. - chaoko99: - - bugfix: You may no longer spam the skeleton as hard as you could before. - - bugfix: Wall painters no longer hit walls when used. - - bugfix: Energy axes will no longer anchor when dropped. - - bugfix: Candles will now last about 30 minutes. - - bugfix: Bucklers can now block any projectiles that aren't bullets, as suggested - intent in their code. - - rscdel: You may no longer worry about reagent contamination in a soft drink dispenser, - only unintended reagent amounts. - - rscadd: You may light an unlit candle with a lit candle that isn't in your hand. - - rscadd: Optimization pass on Geiger counters, and a few effect systems (Smoke - and sparks) - - rscadd: Underwear may now go into washing machines. Still can't be bloodied, but - at least you can do that now. For you weird people who roleplay showering! - - tweak: Rags may now clean more than just blood. More importantly, they show their - progress bar when cleaning. -2018-06-21: - Chinsky: - - rscadd: Close Combat now has ingame effects. Mostly chances to hit in melee. - - rscadd: Disarm chances now both affected by skills and anything tha affects melee - accuracy (being blind, being confused, blurry eyes, being in pain etc). - - rscadd: Most fancy grab moves (jointlocks, dislocations, tendons cutting) were - locked away behind Trained skill in CQC. - afterthought, sabiram: - - maptweak: The hydroponics station away site has been converted into an exoplanet - site. -2018-06-22: - Banditoz: - - tweak: Borgs have had their overall health doubled. - - tweak: Borgs also have had their armour plating component health doubled. - - tweak: Borgs are now more resistant to EMP, and lose less cell charge per EMP. - Cakey: - - maptweak: The Torch has been modified to use a wider variety of flooring types - and decals. - - maptweak: Added a door button to the XO's office. - - rscadd: Added plated catwalks, which can be constructed by placing monotiles on - catwalks. - Chinsky: - - rscadd: Botany skill now has ingame effects. - - rscadd: Without at least basic skill, you can screw up when planting or weeding - trays. You'll also be unable to recognize pests and weeds from useful things. - - rscadd: Exotic seeds (all random variations) need trained skill to avoid screw - ups like that. - - rscadd: Trained skill is also needed to handle xenobotany machines, otherwise - you'll be prone to wasting your samples really fast. - - rscadd: Experienced and professional levels of skill reduce degradation of samples - in xenobotany machines. - - experiment: Constantly fixing brain is no longer the pro strat anymore. - - rscadd: When fixing very damaged (broken level or more) organs in surgery, their - max health is lowered. - - rscadd: Brains get their health lowered /always/ if oxygenation is below survival - level (30%). Better fix cause of damage first, if you don't want to do permanent - damage. - - rscadd: Forensic skils now have ingame effects. Without at least basic skill, - you leave slightly more fingerprints on things, and you will leave prints when - trying to evidence bag things. - - rscdel: You need Trained skill to use evidence collection things and forensic - machines. At higher skill you work microscope faster. - - rscadd: Offstation antags (and traider) can now become ALIUMS! - - rscadd: Their bases have 'alien monolith' somewhere, which turns you into a humanoid - alien of unknown species. - - rscadd: Remember to implant the spawned translator implanter if you're planning - on talking to people. - afterthought2: - - rscadd: Having Basic finance gives the Appraise verb, which allows you to estimate - the value of items you are holding or have equipped (found in the IC tab). Higher - skill levels give more accurate assessments. - - tweak: The financial skill has a large effect on your starting cash. - - tweak: Higher financial skill gives you better deals from traders. - - rscadd: Using virology machines without sufficient virology skill may get you - or your friends infected. For curing purposes, "Trained" negates this effect, - but for doing splicing and mutations, "Experienced" or "Professional" may be - needed. - - rscadd: The printout from the virus analyzer may have missing or erroneous information - if you lack "Experienced" in virology. Quality of information improves with - skill. -2018-06-23: - afterthought2: - - bugfix: The microscope should now work properly again. - - bugfix: The magic missile wizard spell now works. It inflicts small burn damage - and a substantial disable. - - rscadd: Additional reports have been added to the Report Editor. -2018-06-24: - Chinsky: - - tweak: Handheld radios now have batteries and use power to transmit. You'll have - ~50 transmissions worth of power from one cell. When charge is getting low, - message might become garbled. Radios can be recharged in standard rechargers. - Heptagon49: - - bugfix: Screwdrivers no longer open airlocks upon attack. - Rowtree: - - tweak: Character creation faction/citizenship/religion/home system choices have - been updated. -2018-06-25: - Heptagon49: - - rscadd: You can now alt-click on pipes and disposal pipes to rotate them. - - bugfix: Unathi now have exploration voidsuits, and can now use the exploration - suit cycler. - Spookerton: - - tweak: Zombie abilities now tell you when they can't be used, why, and how long - is left on their cooldown, instead of failing silently. - - bugfix: Zombies can no longer consume or death_breath while incapacitated. - - balance: Zombies can only death_breath once per minute instead of once per second(!). - - tweak: Zombie consume now completes at the same rate as its cooldown, preventing - multiple consume actions being active at once. - - bugfix: Zombie consume no longer allows the user to be the target. - - balance: Zombification doesn't magically replace robot parts - - balance: Zombification organ health bonus is x3 instead of x5, but organ break - threshold is 75% instead of 50% - - balance: Zombie toxin urn reduced from 120u(!) to 10u. - - tweak: Zombie toxin now guarantees conversion for a 5u or greater dose. - - balance: Zombie toxin has a flat per process 20% chance to convert so long as - the current + historic amount of reagent in the victim (ie, the total dose at - one time) is more than 1u. - - balance: Zombie death_breath now only creates 2u instead of 5u. This means a victim - should usually take about 15 tox and have two 20% chances to be zombified if - a single zombie breathes on them. Zombies can work together to push a victim - over the 5u mark and instantly zombify them. - - balance: Zombies cannot re-zombify themselves for a free rejuv. - - tweak: observers cannot circumvent voting checks - afterthought2: - - tweak: Robotics surgery uses the Complex Devices skill now to compute delay. Hardsuit - removal uses the EVA skill. - - bugfix: Constantly escaping from grabs regardless of skill should be fixed. - sabiram: - - tweak: The standard bulkhead paint colour is now in the presets for the paint - gun. - - maptweak: Added a few small ruin sites to make exoplanets a little more detailed. - zaredman: - - rscadd: Added Advanced Trauma Kit and Advanced Burn Kit crates that can be ordered - from Cargo. 6 ATK or ABK for 30 points. - - rscadd: Adjusted cost of Medical Crate to 70 supply points to be more appropriate - when compared to other crates like Stability kit crates. -2018-06-26: - Cakey: - - maptweak: Following several reports of Torch crew being admitted to the infirmary - due to headaches the Torch has been refurbished once again to iron out any kinks - left over from the flooring construction work. - - imageadd: New floor sprites have been added. - - imageadd: New wall-mounted sprites have been added for fire alarms, air alarms, - APCs and intercomms - Chinsky: - - rscadd: Adds volcanic exoplanets. Very few plants and animals, but loads of minerals. - Don't walk in lava tho, use catwalks, Luke. - chaoko99: - - rscadd: Resprited some beekeeping items for the sake of consistency and ease of - use. -2018-06-27: - Chinsky: - - rscadd: Weapons skill now has mechanical effects, hide yo children hide yo wife. - - rscadd: Gist of it is if you don't have at least basic training, you're a hazard - to people. You can point and fire, but safety can be a bitch. - - rscadd: Speakig of safety, help intent doesn't prevent firing now. Safety is now - an explicit toggle, can switch it with Ctrl-Click on the gun or with a rightclick - verb. - - rscadd: Higher values of skill give some buffs to accuracy, and unlikely events - of jamming, also let you perform better when in pain. - - rscadd: Professional skill also has bonuses when using scoped rifles. - - rscadd: Weapons skil cost was changed too. Trained and higher are more expensive - now, with Experienced and Professional being as costly as medical skill. MAAs - start at Trained now to give them headstart. - Spookerton: - - tweak: adds insulated gloves to engineer lockers - afterthought2: - - tweak: Starting cash has been increased. Higher financial skill still gives substantially - more money. -2018-06-28: - Banditoz: - - rscadd: Saferooms can now be bolted and unbolted via the keycard authentication - device. - - rscadd: If there is an impending delamination, supermatter delamination, or escalation - to red alert, saferooms will unbolt. - - maptweak: The button to toggle the saferoom bolts have been moved inside of the - saferoom, and can now be operated by all. - Cakey: - - imageadd: Windows have been resprited. - - imageadd: Wall signs have been modified to fit the new walls. - CrimsonShrike: - - tweak: Moves crawling onto regular movement, fixes crawling while hurt. - Heptagon49: - - bugfix: After hearing about the capture of key operatives, Clan [NAME NOT FOUND] - decided to up the ante and improve the explosive power of their ninja suit's - deadman's switch to ensure that their agents either complete their mission or - die trying. Have fun. - sabiram: - - tweak: Catwalks now act as floors do with regards to clicking to move pulled objects - onto them. -2018-06-29: - Cakey: - - tweak: Replaced the fake lava on volcanic exoplanets with actual, real lava. - afterthought2: - - tweak: MMIs cannot be inserted into non-synthetic mobs. - - tweak: Flesh limbs cannot be attached to synthetic mobs. - - tweak: Robotic limb attachment now uses the devices skill. -2018-06-30: - Earthcrusher: - - tweak: Weaker mobs such as Artificers can now smash doors and windows, albeit - not as quickly as stronger mobs. -2018-07-01: - Chinsky: - - rscadd: Added anti-rad pouches to engineering. Also replaced detox injector engies - get in survival box with anti-rad one. - - rscdel: Removes mapped boomboxes from engineering. Nice try, but you'll have to - do with random spawnpoints as everyone. - - rscadd: Adds deployable SCG flags to Pathfinder lockers. They require Pathfinder - access to pop up. Don't do anything, just fluff. - Heptagon59: - - imageadd: Due to reported ill fits and high amounts of chaffing, SolGov has reissued - their line of uniforms, now with form-fitting features! EC Uniforms now have - unathi specific icons. - Hubblenaut: - - bugfix: The teleporters will no longer send people to nullspace when the beacon - does no longer exist. - sabiram: - - balance: Blink, teleport and ethereal jaunt can no longer be cast while incapacitated. - - tweak: Holographic items created by the holodeck can no longer be deconstructed. - - rscadd: Added the lodge exoplanet ruin site. - - tweak: Increased the cost of the hydrobase exoplanet ruin site. - - bugfix: Fixed incorrect accesses on various air alarms. -2018-07-13: - Alex6511: - - balance: The CoS Locker no longer contains a taser - - balance: The Brig Officer Locker no longer contains a small energy gun. - - tweak: The CoS locker now has a hand labeler in line with the Brig Officer. - Cakey: - - tweak: The Pathfinder job is now Ensign only - - rscadd: 'Belts have been overhauled to have holster slots on certain belts. These - holsters function the exact same way as uniform holsters do. imgadd: Certain - belts now show what their contents are on their icons.' - - rscadd: Added general and general holster belts, used by command, bridge officers, - and supply. Holds general office supplies, tablets, and stamps as well as other - various supply equipment. - - maptweak: Uniform holsters have been removed in favor of belt holsters, however - they can still be found within the loadout menu. - - tweak: Uniform holsters have been modified to use the same slot as webbings to - counter being able to carry two holstered weapons. - - rscadd: Plated catwalks can now be serviced using a crowbar to access anything - underneath. - Chinsky: - - rscadd: Piloting skill now has ingame effects. - - rscadd: Taking Torch's helm without at least Trained skill can make Torch go not - exactly where you want it to go. At Professional, passing meteor fields is less - painful. - - rscadd: Shuttles require different level of skill. Guppy is no-skill, Charon and - Aquila need at least Basic. For purposes of skill, pilot is whoever tells it - to move in console. - - rscadd: If pilot's skill is insufficient, you can end up in wrong place. Also - travel time is affected by skill. - - tweak: Drastically lowers amount of loot-having junk piles on garbge planets. - They have visual cues though so you don't need to try and rummage though literally - every pile. - - tweak: Xenoarch finds no longer yield sheets of steel and claim it's a mysterious - thing. They now mostly drop alium alloy, that has random material properties - each round. Any material weapons you find will be made of it too. - - rscadd: Garbage planets now have radiation sources scattered around. - CrimsonShrike: - - tweak: Roboticist now has access to their own maintenance airlock again. - Heptagon49: - - bugfix: Due to pending discrimination lawsuits, Nanotrasen has upgraded the cryosleepers - onboard the SEV Torch with automatic wheelchair dispensers. Disabled characters - now spawn with wheelchairs. - Miraviel: - - rscadd: Added the "Detach IV Drip" verb under the Object tab. - - tweak: Left-clicking an attached drip will now first detach the patient and only - then it will remove the beaker. Drag and drop still works! - - tweak: The Hot Foods Display machine now accepts and dispenses utensils. - - imageadd: IV drips now have a slightly bigger container sprite and a wider warning - light, for better visibility. - - imageadd: Advanced first-aid kits are now purple in hands too, as opposed to being - red. - Orelbon: - - rscadd: The self-destruct will now begin detonating explosions randomly on the - ship when it reaches its cutoff point. - Sbotkin: - - tweak: Emergency Response Team officially is a part of the SCG Fleet now. - Spookerton: - - bugfix: Paper bundles bundle correctly. - - tweak: Carbon copy paper is now default named "sheet of paper" instead of "paper", - the same as regular paper. - TheWelp: - - rscadd: Adds the ability for holy water to deconvert god cultists and the ability - for the null rod to stop phenomenas (by hitting an altar) - - tweak: Nerfs like 90% of deity items and phenomena costs. This may be heavy handed - or too much. Feel free to complain. - Zuhayr: - - tweak: The Pull Punches verb has been renamed to Switch Stance. - - tweak: Nabber stance switching behavior now replaces pulling punches for them. - - tweak: Nabber nabbing is now achieved by trying to grab someone rather than a - verb. - afterthought2: - - tweak: Almost all maint airlocks now require maint access. - - tweak: Trainee crewman alt-titles have been replaced by separate jobs. - chaoko99: - - rscadd: A ping button for checking your ping has been added to the "file" tab. - sabiram: - - bugfix: Fixes being unable to ignore OOC. - - balance: Machinery may no longer be controlled by the staff of animation; its - maximum charges have been reduced from 10 to 5, and its recharge time increased. - - balance: Wizard familiar transform spell recharge time increased to two minutes - from ten seconds. - - balance: Wizard familiars can no longer transform while incapacitated. - - balance: A percentage of damage taken in a familiar animal form is now mirrored - to the familiar's human form. - - bugfix: Simple animals controlled by a client can once again damage humans. Don't - kick that suspicious goat. - - rscadd: Added functionality for edged weapons to cut wires after a short delay. - Any conductive objects will also shock you! - - tweak: At the same time, clicking wires with ordinary conductive objects will - no longer shock you. - - tweak: Reconfigured access requirements for tactical equipment in the loadout. - - tweak: Sol personnel may no longer select green or tan plate carriers, UBACs or - pouches. - - tweak: Expeditionary Corps personnel additionally may no longer select navy blue - equipment. - - tweak: The King of Goats group encounter has been updated. - - rscadd: The King of Goats can now imbue his attacks with elemental damage for - a short time. - - rscadd: The King of Goats can now rarely knock over its enemies with its attack. - - tweak: The King of Goats will now only yield the golden fleece to those who slay - it in its final form. - zaredman: - - rscadd: Added spare penlights and a linen bin to the lower medical storage. - - rscadd: Expanded medical locker room to fit a washing machine and table with recharger. - - rscadd: Some adjustments to maint immediately by Medical's locker room. -2018-07-14: - Cakey: - - tweak: Dionae may no longer fill in as research director among Nanotrasen staff, - as the board of directors felt they weren't evil enough to push the Nanotrasen - agenda. - - maptweak: Added the volleyball court and cafe to the holodeck. - ChaosAlpha: - - tweak: Engineering robots can now collect cables regardless of the currently selected - color of their synthesizer - - tweak: Robots can now pull-drag (by clicking on an adjacent turf while pulling - something) - Spookerton: - - bugfix: Visible & audible messages should no longer stack an extra prefix for - every connected ghost -2018-07-15: - PsiOmegaDelta: - - rscadd: It is now possible to adjust the playspeed of boomboxes using a screwdriver. - sabiram: - - maptweak: Added some lights to dark spots in hallways around research, chemistry - and the D3 ladders, the main hallway through D2 maint from the stairs/elevator, - and the medbay. - - maptweak: 'The greedy NT guards are now only provided with one chair for their - window desk. imgadd: Changed the intercom icon to be more in line with what - it used to be. Dark frame, green console.' -2018-07-16: - Heptagon49: - - bugfix: Dionaea can now regrow limbs again. - sabiram: - - tweak: Changed the changelog header and credits. -2018-07-17: - Cakey: - - rscadd: The shuttle pilot role has been moved to Exploration. - - rscadd: The prospector role has been moved to Supply. - - rscadd: Two new pilot helmets have been added to the game, one generic and one - NT variation (Sprited by Chinsky). - CrimsonShrike: - - tweak: Implant surgery is now possible for robotic limbs. -2018-07-18: - Earthcrusher: - - rscadd: With a bit of research into Data and Illegal technologies, the Roboticist - can now print an uncertified robot module. What could it possibly do? - TheWelp: - - rscadd: Spells now require you to not be incapacitated (handcuffed, stunned, etc). - afterthought2: - - rscadd: Antag skills are now chosen in-game. Off-station antags get basic in everything - and can select 4 skills at trained, 2 at expert, and 1 at master. On-station - antags get their selection from jobs, and in addition get 3 at trained and 1 - at expert. (malf is unchanged). Once the skill selection is submitted, it can't - be undone without admin intervention. - - tweak: The Show Own Skills verb looks a little different now. Antags can use it - to select skills. - za_redman: - - rscadd: Fixed incorrect req_access for E-Arm lockdown shutter. - - rscdel: Removed biohazard locker in D1/Medical Locker room. The multi-suit locker - in the basement, the two in maint, and the one in viro remain. - - rscadd: Added additional Medical Contractor locker in D1/Medical Locker room. - - rscadd: Adjustments to Contractor Locker contents to bring them more in line with - Corpsman Lockers. -2018-07-19: - CrimsonShrike: - - tweak: Swabbing people wearing gloves should now attempt to swab said gloves instead - of swabbing their evidence-free hands - - tweak: Forensics locker will once again contain a security belt for those who - feel the need of carrying their gear. - - tweak: Restrained, unconscious or otherwise restricted suspects can no longer - keep avoiding swabbing - Ithalan: - - bugfix: PDA medical scanner now works on body bags and stasis bags like the regular - health analyzer, and uses user medicine skill level - - rscadd: Medical belts can now also hold body bags, stasis bag and emergency medical - pouches - Spookerton: - - tweak: SCGR no longer has an unfitting alt title that implies they do something - they don't. - - tweak: SCGR can no longer download and use power RCON. - Zuhayr: - - rscadd: Diona nymph and diona gestalt eyes glow in the dark. - - rscadd: Diona nymphs can no longer grow into adults by themselves. Instead, they - need to merge with two other nymphs, then call a vote with Call Gestalt Vote. - - rscadd: Diona nymphs are now capable of headbutting seeds out of seed vendors, - planting them, harvesting them, removing dead plants, eating pests and refilling - water. Chirp. - - rscadd: Diona nymphs now have a proper UI. - sabiram: - - rscadd: Plastic flaps can now be constructed with plastic sheets. - - rscadd: Plastic flaps can now be unsecured with a wrench, and then destroyed with - a screwdriver. Use a wrench to re-bolt them. - za_redman: - - rscadd: Gives Chef of Security access to the Hangar. - - rscadd: Adds exit button to hangar door. -2018-07-20: - Heptagon49: - - rscadd: A short blurb on the current alert level now appears on the title screen. - sabiram: - - rscadd: Added spy v. spy (autotraitors and renegades) to game mode selection and - secret. - - tweak: Law enforcement (security officer, warden, HoS) and the Captain may no - longer be renegades at round start. - - tweak: Reduced the force of the magnum pistol's melee attack from 14 to 9. -2018-07-21: - sabiram: - - tweak: Command rig suit helmet cameras are now found on the Command network. - - tweak: Mining rig suit helmet cameras are now found on the Supply network. - zaredman: - - rscadd: Introduces Office of Civil Investigation and Enforcement agents to replace - Colonial Marshals. - - rscdel: Removes all references to Colonial Marshals and replaces it with the Office - of Civil Investigation and Enforcement. -2018-07-22: - Devildabeast: - - rscadd: Adds optics for the Hephaestus Alt. head. - Unknown: - - rscadd: ' Removes three of the four monkey cube boxes in virology and replaces - them with a stok cube box, neaera, and farwa cube box.' - sabiram: - - maptweak: Those with shuttle helm access may no longer access the supply office. -2018-07-23: - Ithalan: - - bugfix: Map function in crew monitor program no longer craps out after drawing - first tracked crew member - - bugfix: Suit sensor jammer methods have been updated to be useful for new medical - system - - bugfix: Synthetic hearts and species without a cardiovascular system no longer - generate misleading pulse readings on the crew monitor - - rscadd: crew monitor program icons now change to indicate if there is a crew member - in medical distress, based on pulse and blood oxygenation - - tweak: layout of crew monitor program has been tidied up a bit so that each datatype - aligns nicely. -2018-07-24: - Cakey: - - tweak: EC and Fleet crew may now fill in as shuttle pilots. - - maptweak: Added a pilots locker within the expedition prep room. Pilots now have - access to both supply and the expedition prep room. - - tweak: Added a pilot-specific access type. - CrimsonShrike: - - rscadd: Forensics skill now allows for the detection of possible evidence on examination. - - tweak: Forensics skill is now cheaper at higher levels. - zaredman: - - rscdel: Removes mention of Colonial Marshals in holowarrants and replaces it with - OCIE; format change. -2018-07-25: - Chinsky: - - tweak: Telecomms relays power usage is upper /considerably/ when used off-ship. - Expect to drain Charon in 10 minutes when you switch it on. - - tweak: Having Trained or above Close Combat skill gives bonus to parry chance - with weapons (even ones that don't parry normally). - - tweak: Melee accuracy is now affected by size of the weapon - smaller than 'normal - sized' weapons are more accurate, bigger are less accurate. Some weapons have - individual bonuses/penalties (e.g. swords are bit more accurate for their size, - toolboxes are less) - - tweak: Material weapons now get damaged on parry much like when attacking, and - can shatter depending on material. - afterthought2: - - tweak: Check your skill loadout; it may have been reset! - - tweak: Skills outside your job and not in the general, organizational, or service - categories (minus pilot) are no longer selectable above "Trained" level. - - tweak: Some head roles had skill point allocations reduced. Engineers' skill points - have been brought in line with contractors (increased). Brig Officers' starting - skills brought in line with MaA. -2018-07-27: - Cakey: - - tweak: Senior Engineers, Deck Officers and Brig Officers may no longer be E5s. - afterthought2: - - rscadd: Constructing things with stacks of material now uses the construction - skill. Higher skill is needed to use more advanced materials or to make more - elaborate items. - - tweak: Construction time is modified by construction skill. - sick trigger: - - rscadd: Diona can now 'Jump-to-next-nymph' to cycle between their nymphs after - splitting. -2018-07-28: - Devildabeast: - - tweak: Shuttle Pilots can now be rank E-6 as Fleet. - - tweak: Shuttle Pilots now have EVA access. - - maptweak: The Shuttle Pilot can now access the Ready Room. - - tweak: Shuttle Pilots can now select the pilot pin in the loadout. They can also - now select the EC cap if they're EC. - - bugfix: The EC Shuttle Pilot no longer spawns with service uniform. - - tweak: The Shuttle Pilot now gets a regular pilot headset and a bowman headset - in their locker. - - tweak: Shuttle Pilot is now defined as a SolGov role. -2018-07-29: - CrimsonShrike: - - tweak: APC lights now brighter. - Spookerton: - - tweak: maintenance drone laws tweaked to read more goodly. - - tweak: mdrone laws tweaked to not imply that mdrones are intelligent, because - they're not. - - tweak: mdrone laws include not interfering with people while trying to do your - job, roomba. -2018-07-30: - Devildabeast: - - bugfix: The SEV Torch's Heads have had ventilation introduced to the stalls in - order to prevent unwanted suffocation. -2018-08-01: - Devildabeast: - - tweak: Corpsman now has the alt-title of "Nursing Assistant" instead of "Nurse". - afterthought2: - - bugfix: APC, fire alarm, and air alarm frames should once again show up as buildable. - - tweak: Faction, citizenship, and home system character creation choices have been - updated. - zaredman: - - rscadd: Added a MIA (Missing in Action) option to crewmember status choices. -2018-08-02: - Cakey: - - maptweak: The brig has been moved to deck one. Deck three has been adjusted to - be further enforce it being the habitation deck. - - maptweak: Added the Commissary, an on-ship store run by supply and service crew. - - maptweak: Moved the pathfinder's office to deck four. - - maptweak: Moved the bluespace drive to deck two. - - maptweak: Moved the observation bubble, diplomatic quarters and vacant office - to deck three. - Devildabeast: - - rscadd: Adds a PCRC suit, a more formal variation of the PCRC uniform, to the - loadout under Corporate Uniforms. - Hubblenaut: - - tweak: Brig cell timers will notify Security over Sec HUDs when expiring. - zaredman: - - rscdel: Replaces double doors to Xenobio, Viro, D2 Maint, D3 Old Brig, Conference - Room, Engineering hard storage, and NT Labs with normal doors. -2018-08-03: - Hubblenaut: - - tweak: All Heads are now able to authorize warrants using the holowarrant projector - regardless of their Security access. -2018-08-04: - sabiram: - - tweak: The mercenary shuttle is now less easily vented by destroying a single - r-window. - - bugfix: Hardsuit rig modules now check properly access for those attempting to - use them. -2018-08-05: - Hubblenaut: - - bugfix: Bridge Officers can once again access their lockers. - - bugfix: SCGR can once again access the bridge. - zaredman: - - rscadd: Allows IPC and Skrell to be Brig Officer. -2018-08-06: - Cakey: - - maptweak: Bearcat has been tweaked slightly to allow for better repair opportunities. -2018-08-07: - Devildabeast: - - maptweak: Removes a catwalk from the Utility Down in the deck 1 substation room. - - maptweak: Adds scrubbers to the toilet stalls on deck 3 to prevent CO2 buildup. - - rscadd: Adds a new branch known as "SolGov Employee"; the SolGov Representative - and OCIE Agent have been moved under it as ranks. - - tweak: SolGov loadout items, including SolGov berets, awards, and hat, can now - be worn by all SolGov-affiliated branches.. - - tweak: Updates the sprites for the Hephaestus Alt. head optics. - Zuhayr: - - rscadd: Added sushi and sashimi. Slice fish or meat into strips, then use them - on rice. Also accepts egg and tofu. - nearlyNon: - - maptweak: Moves notice board between main mess hall doors, removing the window. - RIP. - - maptweak: Adds a holopad to the holodeck, so the AI can hang out there. - - maptweak: Expands holodeck door to be two tiles wide, to prevent bottlenecking. - - maptweak: Adds a newscaster to the vacant office. -2018-08-08: - Devildabeast: - - bugfix: Allows FT to be contractor again for real this time. - - bugfix: Allows FT to be played as Contractor again. - - bugfix: SCGR can now wear most loadout items again. - Nearlynon: - - bugfix: Fixed missing pipes + wires in holodeck. - - maptweak: Adds 2 paperbins to deck 3 in the mess and lounge respectively. - nearlyNon: - - rscadd: Eight balls, able to be bought from the vending machine in the mess. Ported - from TG. "Will the CMO be useful today?" "Not likely." - - rscadd: Add bells; can be made with any material. Ring by clicking with intents - other than grab; grab picks up. Shatters if you hit someone with it! - - maptweak: Distribute bells throughout desks. - sabiram: - - tweak: The Booze-O-Mat menu has been reordered; vessels at the top, followed by - bottles, followed by ready drinks, followed by mixers, and ending with glass - accessories. - - tweak: Added a bottle of mint oil to the Booze-O-Mat for mixing. -2018-08-09: - Flatty: - - rscadd: You can now change icon scaling method in the "Icon" menu on top left! - Zuhayr: - - rscadd: Skrell now appear neutrally gendered to non-Skrell. Use the headtail length - descriptor to specify your secret squid gender. - - rscadd: Vox now have neck markings to show importance to other vox. -2018-08-10: - TheWelp: - - rscadd: Adds the Lost Souls, the remnants of souls sucked into the Starlight Gateway - (for future deity mode). - - rscadd: Added the ability for god cultists (and lost souls) to be able to hear - through the pylons like the deity can. - nearlyNon: - - bugfix: ALL MATERIAL WEAPONS ARE NO LONGER INSANELY FRAGILE. -2018-08-11: - Devildabeast: - - rscadd: Adds Observatory and Field Operations patches to the loadout. - nearlyNon: - - maptweak: Replace the crowbars in medical storage with prybars, which makes more - sense and was requested in the Little Things thread. - - tweak: Added multipens to loadout. - - bugfix: Saves diona from their impending death in holodecks & when preparing to - go to the ship as off-vessel antags. - - bugfix: Fixed grammar on diona nodes. "You plant the diona notes" no more. - sabiram: - - rscadd: Boomboxes now have adjustable volume. - - tweak: Boomboxes can no longer be placed in backpacks. - - tweak: Boomboxes now have a chance to break each time they're turned on. -2018-08-12: - Cajoes: - - rscadd: Added flood lamps (portable) to supply offerings. -2018-08-13: - Hubblenaut: - - bugfix: The diffuser bypass mode on the shield generator will now work on already - active diffusers. - - bugfix: Fixes the shield generator's atmosphere containment mode. - PsiOmegaDelta: - - rscadd: Admins can now alt-click possessed mobs to efficiently kill them. - afterthought2: - - rscadd: The SM monitor readings will fluctuate with some errors at Trained in - Engines skill and below (max 40%, 20%, and 5% at Untrained, Basic, and Trained). - At master they'll be like previously. - - rscadd: Turning on the emitter will recompute its efficiency (i.e. power) to a - lower random value, depending on skill. - - rscadd: Examining the SM at Expert skill will give some information about its - integrity. At Master, it will give a guesstimate for the EER. -2018-08-14: - sabiram: - - rscadd: The shaker now really acts like a shaker, and must be interacted with - to mix its contents (click it in hand). - - maptweak: The bar, mess hall, captain's mess, and cold storage rooms have been - redesigned. - - tweak: Iced tea is no longer sweet. - - tweak: Added sweet tea. 3 measures of iced tea + 1 measure of sugar. -2018-08-15: - Sbotkin: - - tweak: Allows shredding of fingerprint cards. - Zuhayr: - - rscadd: Numerous new ores spawn on the asteroid. They can be compressed into bricks - and ground up for reagents. - - tweak: The ore processor has been rewritten and will happily eat anything containing - metal or other substances, and can then fart them out as sheets. - - rscadd: All material sheets now fetch a price from the supply drone, not just - plat and phoron. - - tweak: As a result, the prices of all materials have gone up to a minimum of their - resale cost. Steel is 60 credits now, for example. - - tweak: The recipe of plasteel is now steel + platinum (put the steel back through - the unloader) and the recipe for osmium-carbide plasteel is plasteel + osmium. - afterthought2: - - rscadd: Hacking without the electrical skill is harder now. - - rscadd: If you are unskilled in electrical, hacking will randomize the wire positions - (not meanings) each time you open the screen. If you are basic, you'll get some - possible duplicate colors/omitted colors, with smaller probabilities. - - rscadd: If you pulse a wire below trained skill, you have (progressively smaller) - chances of pulsing the wrong wire. If you are untrained, you may randomize wire - positions for everyone else trying to hack the thing. - - rscadd: If you cut/mend wires below trained skill, you may cut/mend some extra - wires by accident. - - rscadd: If you try to place a remote signaler with low skill (trained or lower), - you might place it on the wrong wire, and then have a hard time removing it. - - rscadd: A new "Examine" option has been added to the hacking menu. Below experienced - it doesn't do much. On experienced one or two wires will be identifiable on - examine, while at master most will be. Less effective for "secure" objects with - randomized wiring. -2018-08-16: - IsdatAfamas: - - rscadd: Added an away site. It has a few slots open to join as a survivor. - - rscadd: See https://forums.baystation12.net/threads/ctis-research-ship-missing.6790/ - for lore info. -2018-08-17: - Cajoes: - - tweak: flood lamps now start in the off position - - tweak: green ink pens are now greener - - tweak: washing machines now more in line with graphic style of server - - tweak: toys and plants now use less unused animation frames, reducing overhead -2018-08-18: - IsdatAfamas: - - maptweak: Added polarized windows to robotics. - - bugfix: CTI ship should spawn correctly now. - Zuhayr: - - rscadd: Added Tritonians, an uwhitelisted human subspecies. -2018-08-19: - Devildabeast: - - tweak: All Marine Corps uniforms and items have been renamed to reflect the SCG - Army, removing all references of the Marines. - - rscadd: Adds an array of Army outfits, spawnable by admins. - - tweak: The Marine (now Army) PT uniform is now black instead of green. -2018-08-20: - IsdatAfamas: - - bugfix: Various fixes implemented for SRV Verne. Overall should be far less deadly - as an away mission. - nearlyNon: - - tweak: You can now select a bible from the loadout. - sick trigger: - - rscadd: Ghosts can now 'Scan-target' to analyse the thing they're following. -2018-08-22: - Cajoes: - - rscadd: Napalm and Napalm B recipes. Sticky burny goo. - - tweak: relabeled old napalm recipe to phlogiston. Makes heat. And little else. - Same as old napalm. - Cakey: - - rscdel: Removed Tajarans from the server. - Hubblenaut: - - bugfix: Fixes cable coils spawning in tool belts having old vibrant color. - - tweak: Tool belt cable colors are now completely random. - IsdatAfamas: - - bugfix: Some more CTI ship fixes. - Sbotkin: - - tweak: Allows shredding of fingerprint cards. - TheWelp: - - rscadd: 'Imports TG''s circuit updates: ICs now requires power to operate. IC - printer is now hand-held and can copy & print assemblies fully.' - - rscadd: Adds new ICs. - Zuhayr: - - rscadd: Numerous new ores spawn on the asteroid. They can be compressed into bricks - and ground up for reagents. - - tweak: The ore processor has been rewritten and will happily eat anything containing - metal or other substances, and can then fart them out as sheets. - - rscadd: All material sheets now fetch a price from the supply drone, not just - plat and phoron. - - tweak: As a result, the prices of all materials have gone up to a minimum of their - resale cost. Steel is 60 credits now, for example. - - tweak: The recipe of plasteel is now steel + platinum (put the steel back through - the unloader) and the recipe for osmium-carbide plasteel is plasteel + osmium. - afterthought2: - - rscadd: Hacking without the electrical skill is harder now. - - rscadd: If you are unskilled in electrical, hacking will randomize the wire positions - (not meanings) each time you open the screen. If you are basic, you'll get some - possible duplicate colors/omitted colors, with smaller probabilities. - - rscadd: If you pulse a wire below trained skill, you have (progressively smaller) - chances of pulsing the wrong wire. If you are untrained, you may randomize wire - positions for everyone else trying to hack the thing. - - rscadd: If you cut/mend wires below trained skill, you may cut/mend some extra - wires by accident. - - rscadd: If you try to place a remote signaler with low skill (trained or lower), - you might place it on the wrong wire, and then have a hard time removing it. - - rscadd: A new "Examine" option has been added to the hacking menu. Below experienced - it doesn't do much. On experienced one or two wires will be identifiable on - examine, while at master most will be. Less effective for "secure" objects with - randomized wiring. - nearlyNon: - - rscadd: Inducers. Make them in science. They're a TGstation item, you can charge - anything that uses a battery with them. Almost. Screwdriver to remove and replace - its battery. - - rscadd: Cyborg integrated version of the above, using the borg's internal battery, - and a failsafe on it. - - rscadd: IPCs and FBPs are now adversely affected by ion storms. They will be confused - and have blurry vision as their system partially resets to remove ionospheric - corruption. To avoid this, hide out in a saferoom or shuttle, or the dorms or - such. - - rscadd: Prescription science goggles can now be selected from loadout. -2018-08-23: - CrimsonShrike: - - bugfix: Oxygen regenerators should no longer get stuck trying to get or output - gas. -2018-08-24: - Chinsky: - - tweak: CO2 is no longer poisonous. Just non-breathable. Should make Bearcat a - walk in the park. - - tweak: Added CO, which /is/ poisonous. - - tweak: PACMANs that run on plasma now produce some CO, around a mole per 40 seconds, - so make sure you open the window (or turn on scrubbers) before using. - SierraKomodo: - - tweak: Makes NT Security Guard HUD icons purple instead of red. -2018-08-25: - Cajoes: - - rscadd: added supply crate for wrapping paper - - tweak: toned down the toner and floodlamp crates - Textor: - - rscadd: Sleepers, cryo tubes, full body scanners, full body scanner control consoles, - and operating tables can now be constructed. - - rscadd: The aforementioned machine boards are now researchable and printable at - the protolathe. - - rscadd: Added the ability to drag-and-drop players to cryo pods. - Zuhayr: - - rscadd: The General character generation tab has been split between Background - and Physical. - - rscadd: The faction/species/homeworld backend has been completely rewritten. - - tweak: Check your species, faction and homeworld settings as well as the new 'culture' - option under Background. -2018-08-26: - Heptagon49: - - rscadd: You can now rotate unwrenched computer frames via context menu or alt-click. - - imageadd: Added directional icons for computer frames. - nearlyNonexistent: - - rscadd: Two new IPC monitor screens, one an obvious parody of the original Doom, - the other Tetris. -2018-08-28: - Cakey: - - rscadd: Added the Secure Energy Revolver to the CO and XO's closets, replacing - their respective energy guns. - CrimsonShrike: - - rscadd: Oxygen regenerator board added to circuit printer. - nearlyNonexistent: - - tweak: Chameleon kits no longer shapeshift back to normal (and psychadelic) when - EMPed. -2018-08-29: - SierraKomodo: - - rscdel: Removed Floorlength Braid hairstyle - nearlyNonexistent: - - tweak: Press drone can now take photos. - - tweak: Cameras stay off after taking a photo. - - tweak: Photo albums can be taken from the loadout, along with a roll of photo - tape. -2018-08-30: - Chinsky: - - tweak: Sensor console now grants much further viewrange on the map. - Textor: - - rscadd: You can now build light switches and window tint switches with a steel - sheet. - - rscadd: 'To build: use a screwdriver on the frame. You can also use a screwdriver - to disassemble them.' - - bugfix: Fixed issue with converting new-style reinforced windows to electrochromatic - windows. You can use a cable coil on them to convert them properly now. - - tweak: Modified how window tint switches interact with multitools. You can now - set the window ID with the multitool. You can also set the window ID by using - a multitool on the electrochromatic window. -2018-08-31: - Miraviel: - - rscadd: Added 10 more targeted emotes! Use them as *salute fullname. - Textor: - - bugfix: GAS have now been adequately trained by Xynergy on the proper use of stairs. - They will no longer hover above them, afraid to go down. - - bugfix: GAS no longer have their tracheae rupture in low pressure environments. -2018-09-01: - Banditoz: - - tweak: Light frames can now be placed in the actor's area. - Cakey: - - tweak: APLU circuits can now be printed by default. - MO_oNyMan: - - maptweak: Added missing cameras to forensics office, evidence storage and briefing - room - - maptweak: Added a recharger on d4 security checkpoint - - maptweak: Forensic technician can now access morgue from the front door - Textor: - - bugfix: The supermatter monitor no longer cares about delaminating supermatter - crystals not on board the Torch. Those other crystals must suffer silently, - now. - nearlyNonexistent: - - rscadd: Ports Polaris's synthetic eye color changing. IPC, synthetic human, and - Adherent eyes are now RGB. Properly covered by display monitors too. - sabiram: - - tweak: People wearing most hardsuits are now able to be handcuffed. -2018-09-03: - CrimsonShrike: - - bugfix: Fixes pulling circuit checking for its own position and not its holders - Sbotkin: - - maptweak: Replaces strategic reserve of laptops in the infirmary with consoles - and telescreens, where needed. - afterthought2: - - rscadd: Makes exterior airlock assemblies buildable (need Basic skill). - sabiram: - - tweak: The force authorisation and docking management programs now must be run - on suitably powerful equipment, namely a laptop or a console. - - tweak: Increased tech cost of the teleporter console circuitry. - - maptweak: Moved research and development circuit boards into secure storage. - - maptweak: Added more APC and airlock circuits to tech storage. -2018-09-04: - Chinsky: - - rscadd: 'Added a new event: Maintenance Drones Uprising.' - - rscadd: It spawns hostile versions of maint drones in maintenance. They will not - attack anyone they perceive as synth. - CrimsonShrike: - - tweak: Medical circuits now largely inform of severity instead of exposing internal - values. Adapted medical integrated circuits to brainmend. - nearlyNonexistent: - - maptweak: Security now has prybars instead of crowbars. - - rscadd: You can now flip blindfolds up, and start with one from your loadout. - Tape ones can't be flipped as they're not made of cloth. Blindfolds from loadout - are colorizable. - - rscadd: One new AI hologram. - - tweak: Clippy is no longer malf only. -2018-09-05: - nearlyNonexistent: - - rscadd: 'New items intended for antags to steal; several secret documents that - spawn in the SCGR''s office, the conference room, and the NTL''s office. Gotta - collect them all! (Disclaimer: only 3/6 spawn in a game.)' -2018-09-06: - nearlyNonexistent: - - tweak: Water now lasts a minute on the ground, to make it more useful to have - wet floor signs. For reference, space lube is 10 minutes, and the cult spell - is 6 minutes. -2018-09-07: - Textor44: - - bugfix: Surgeons can no longer create magical floating limbs by attaching hands - and feet to a patient lacking an arm or leg. -2018-09-08: - Textor44: - - rscadd: Adds the savage hunter (male and female) clothing for Unathi civilians - in the loadout under xeno wear. -2018-09-09: - FTangSteve: - - rscadd: simple mobs now take different damage from different unarmed attacks - Textor: - - tweak: Staff now take tickets when they hit the "PM" button in the ticket panel. - - rscadd: Adds the ability for admins to change the end credits slightly. - Textor44: - - bugfix: Catwalks can now be cleaned by mops and soap by simply clicking on them. - Janitors everywhere rejoice at having to do less work. - - tweak: Soap now takes a longer time than a mop to scrub floors. Janitors everywhere - grumble at having to take longer at doing their job. - - tweak: Soap no longer can be used to knock people over by dragging them onto it. - Janitors everywhere are sad they can no longer prank people as easily. -2018-09-10: - CrimsonShrike: - - tweak: Signallers no longer give visible or audible feedback that they received - data. There's circuits for that and frankly we were all thinking of killing - the roboticist. - - rscadd: New filter circuits, so that you can discriminate properly - - bugfix: Fixed hypoinjector circuit not injecting - Zuhayr: - - rscadd: Added the ability to carve graffiti into some walls and floors with sharp - objects like screwdrivers. - - rscadd: Being a slog now has long-term consequences. -2018-09-11: - Cajoes: - - rscadd: Some new cargo items, boxed snack foods for refilling vendors, etc. (canned - bread does not go into Galley-!) - - rscadd: Added new cargo order tabs and orderable items. Galley, Custodial, Exploration, - Non-Essentials, etc. - - tweak: Rearranged existing cargo tab contents to something resembling logic. Floor - tiles go into Flooring food supplies to the galley, costumes and hats into Non-essentials, - etc - - rscdel: 'Removed the Tabs: Reagents, Miscellaneous and Hospitality tabs as they - ended up empty once the re-ordering was complete and no longer served a function.' - - rscdel: Crate of Boxes, Crate of Empty Reagent Cartridges, Ripley APLU Circuitboard - Crate - Chinsky: - - bugfix: Fixes microscope always treating partial prints as complete. End of golden - age of forensics. - - rscadd: New forensic evidence type - trace DNA. Left on unfinished food, glasses - people drank from, cig butts and gum wads. Collected with swab kits, investigated - in DNA scanner. - - rscadd: Grabbing, pulling, and hitting people unarmed now will wrinkle their uniform/suit - and leave fingerprints. Usual protections against prints apply there. - CrimsonShrike: - - bugfix: Demultiplexers should have data set correctly now. - ParadoxSpace: - - rscadd: Tritonians now handle water better. They still cannot breathe it, so be - careful, okay? -2018-09-19: - Chinsky: - - rscadd: Added ANFO, a fertilizer+fuel explosive. Mix any of fertilizers (EZ-nutriment, - Left 4 Zed or Robust Harvest) with welder fuel to make it. Add aluminium for - more oomph if you can get it. - - rscadd: To actually make it boom, you need ANOTHER explosion first. A weak explosion - will pretty reliably activate <60u, strong <120u, devastating for more. If it - wasn't strong enough, it can still trigger part of reagent. - - rscadd: Due to related changes, any container holding welder fuel can now explode - if caught in an explosion, though don't expect much oomph. - - rscadd: Added ability to manipulate tape recorder tapes. - - rscadd: User wirecutter to cut tape, use tape on tape to join them. - - rscadd: You can get loose tape out by clicking tape inhand. Join them to put back. - Master forensics techs will be able to tell if it was tampered with. - - rscadd: Tape recorder now have a single wire that starts playback when pulsed. - - rscadd: Adds vinegar reagent. Can be made from ethanol or apply juice by applying - universal enzyme as catalyst. - - bugfix: Adds mayo. Can be made from egg yolk and vinegar or lemon juice. - - tweak: Adds alternative soy sauce recipe. Now it can be made with 5u Soy Milk - + 5u Vinegar - CrimsonShrike: - - rscadd: 'New instruments are now available through supply. rscdelete: Removed - old piano and old violin,' - Zuhayr: - - rscdel: Removed NanoTrasen rank. You can use the contractor rank to get access - to science roles now. Play whatever company you like. - - tweak: The Torch has unionized under the Torch LLC Corporate Union. You can get - a union card in loadout and the Corporate Liaison is now the Workplace Liaison, - with Corporate Liaison and Union Representative available as alt titles. Worker's - rights! - sabiram: - - rscadd: Added missiles for admins to throw at the ship. -2018-09-22: - Aticus: - - imageadd: Adds a new, female-centric hair style for Unathi. The Frills Strike - Back. - Neon1ight: - - rscadd: Added the Xenolife Technician job. It is a crew research position, allowing - EC players to be part of the research department. ICly, it specializes in xenobiology/xenobotany. - Zuhayr: - - rscadd: Education is now a selection in your background tab. Jobs are restricted - to certain minimum educations. You will likely need to change your background - tabs for all characters who work jobs other than Passenger. - - rscadd: Doctorates and medical degrees in the education system modify your record - and ID name to 'Dr. Foo, MD' or 'Dr. Foo, Phd'. - - tweak: Skrell will no longer present as hive minds on their ID and crew records. - - rscadd: Mops can now mop up shallow fluids. - - tweak: Hydrogen fires should no longer result in biblical floods. - - tweak: Floods should now clean up filth decals properly. -2018-09-24: - Cajoes & ChaosAlpha: - - rscadd: mobs now tip over when slipping or resting - Chinsky: - - rscadd: Can now put items into forensic microscope for scan, instead of using - tools on it first. Clicking on microscope with evidence bag puts item inside - too. - - rscdel: Removed alium-turning monolith from trader base. - CrimsonShrike: - - rscadd: Adds some more feedback to augments. - Miraviel: - - rscadd: Added a normal headset to the pilot locker and bowman headsets to corpsman, - medical contractor, physician lockers. - Zuhayr: - - tweak: Graffiti now requires you to be on help intent. -2018-09-26: - Zuhayr: - - tweak: Noticeboards can be built out of wood, dismantled with a wrench, and rearranged - with a screwdriver. - - rscadd: Papers on noticeboards will persist round to round. - - rscadd: Sticky notes can be ordered from cargo and will also persist round to - round. - - rscadd: Mods can now view a list of all persistent data. Admin can use this list - to destroy it with prejudice. - - rscadd: Relatedly, you can now be jobbanned from Graffiti. - nearlyNonexistent: - - rscadd: Science can now print bluespace syringes and cryostasis syringes. Inject - people with more chems at once (20u each; 60u total) or inject them with water/potassium. -2018-09-27: - CrimsonShrike: - - tweak: Rigs can now be hacked after lifting wire cover with a screwdriver. - - tweak: Rig modules and cells are now removed with wrench. - ParadoxSpace: - - rscadd: Adds the Yeosa'Unathi subspecies, their language, their faction, and their - attack. Also gives Yeosa glowing eyes. - - tweak: Lowers how hungry Unathi are at the expense of slower healing. - - bugfix: Fixes issue with tail attack messages. - - bugfix: After much debate as to whether Yeosa count as Unathi, the Expeditionary - Corps have finally allowed Yeosa to wear Unathi cultural clothing from the loadout. - - rscdel: Unathi can now no longer manually toggle on and off involuntary processes - like self-healing. - Textor: - - maptweak: Bridge Deck - Captain's quarters' light switch is moved so that you - are no longer likely to remove the light tube when turning the lights on. - - maptweak: Deck 1 - Xenoflora and Miscellaneous labs are now brighter. This should - allow for scientists to actually see the things they work on. Robotics now has - solid doors. Privacy windows are no longer thwarted by looking through the door-windows. - Added a window to the mech bay side to compensate for the lack of visibility - from that direction due to the door no longer having a window. Door to storage - next to robotics actually opens for the roboticist now. Removed power cable - to nowhere in deck 1 starboard fore maintenance. Swaps the filing cabinet and - table in the morgue so that the paper bin, folder, and pen are actually accessible - when someone is working in there. - - maptweak: Deck 2 - Adds a shield diffuser at the edge of the old brig border so - trash will stop being stuck behind the shields when ejected into space from - the trash room. The shield should no longer block the airlock in deck 2 starboard - mid maintenance due to wall unevenness. - - maptweak: Deck3 - Adds a second mineral bath to deck 3 cryogenic storage wardrobe. - Moves photocopier and shredder in office so that they can both be used normally. - - maptweak: Deck 4 - The toxins storage room is now directly off the hangar in order - to let scientists actually get to their toxins storage room. Finally adds a - security camera to the fuel bay. The AI can now watch the fascinating process - of refueling. Moves the atmos control computer in the Petrov Laboratory so that - you can actually reach all the counter space when working. - - bugfix: Had a long discussion with the OR computers and we both agreed that they - need to actually face the direction they were mapped in. - Zuhayr: - - rscadd: Added a crashed escape pod that may generate on exoplanets and allow for - latejoiners a la Bearcat. - - tweak: Some ruins and submaps will add themselves to the distress signal list. - Probably worth checking now. - - rscdel: Prevented submap jobs from being test-spawned by the global datum system - as they do not expect null args. - afterthought2: - - rscadd: The IT skill now has gameplay effects when using modular computers. - - rscadd: 'Higher IT skill allows the user to bypass logging on program download - with higher probability (Trained: 30%, Expert: 60%, Master: 90%). Logs will - still be generated, with faked entries for the download info.' - - rscadd: The antag access decryption program is more effective at higher skill - levels. It works faster and has a chance to avoid tripping the alarm. At unskilled - (generally meaning non-antag) it has a chance to give the wrong access. - - rscadd: The antag camera alarm-trip probability is now tied to skill, with similar - effectiveness as current at Trained. - - rscadd: The antag dos program is more effective at higher skill, with more dos - attacks per tick at higher levels (equal to current at Basic). At expert and - master, gives extra fake attacking nodes to the system log to impede sysadmins. - - rscadd: The network monitor, email administration, and AI management programs - are locked below basic, basic, and trained skill, resp. You will instead get - some random data displayed. The programs do link to a terminal now. - - rscadd: Added a command line interface for modular computers. With enough skill - (expert+ for most things) you can run specific commands (type man for a list) - to do rudimentary sysadmin diagnostic tasks. Notably, with network access, you - can ssh into terminals of other computers over the network. If you are unskilled, - you may get various failure effects or just be unable to do anything. - - rscadd: To access the terminal, either use one of the programs or use Ctl Alt - Click. - zaredman: - - tweak: Adds defib and compact defib crates to be ordered through supply. - - tweak: Added holosign projector and advanced mop to the janitor robot. - - tweak: Added medical HUD to the surgical robot. -2018-09-28: - sabiram: - - tweak: Added a delay to welding/unwelding airlocks. - - tweak: Xenolife Technicians no longer have access to the fabrication lab or Petrov - helm. -2018-09-30: - Cakey: - - maptweak: Added Deck 5, an expansion of Deck 4 adding more verticality to the - ship beyond stairs and ladders. Deck 4 has been split up to accomodate these - changes. - - maptweak: The hangar has been moved inwards to be more centralised on Deck 5. - - maptweak: The lounge has been moved under cryogenics and now overlooks the hangar - (Still accessible from cryogenics). - - maptweak: The officer's mess has been moved under the mess hall and now overlooks - the hangar (Still accessible from the mess hall). - - maptweak: The Petrov has been made slightly bigger to be more useful. Moved several - research suites to the Petrov. - - tweak: The Research Director and Corporate Liason can now use the ID program to - modify accesses within their own department. Petrov accesses are now only modifiable - by the Research Director and NTL - - tweak: Fixes the commissarry shutter access requirement. - Miraviel: - - maptweak: Repositioned lights in the SEA's office, the XO's and CO's request consoles, - the fire extinguisher cabinets on the Bridge, the labels at the stairs, and - the CO's light switch. Removed the overlapping Nanomed from the Bridge and the - urinal from the Aquila. -2018-10-02: - Cakey: - - maptweak: 'Made maintenance style-consistent throughout all decks with techmaint - tiles and railings. maptweak: Made railings not obstruct items, shuffled some - items around to not be behind railings.' - - maptweak: Added a single seat in the lounge facing space, which takes up barely - any extra space. - - maptweak: Added a fax machine to the pilot's lounge. - - tweak: Fixed Petrov airlock accesses. - - tweak: Fixed Hangar maintenance airlock accesses. - ParadoxSpace: - - rscadd: After complaints that Unathi would have to be cut open [stack overflow] - amount of times with a scalpel, Unathi can now again toggle their healing. - - tweak: To reflect their biology, Unathi are now actually ectotherms instead of - being particularly cold-sensitive endotherms. - Sbotkin: - - rscdel: Removed peacekeeper armband from loadout. - Textor: - - bugfix: Helm control, engine control, sensor, and navigation consoles no longer - stop functioning after repair or construction. Just hit "reconnect." - - bugfix: The windowtint button on the back wall of the XO's office actually works - now. - sabira: - - tweak: The research department's colouration has changed from the red of NanoTrasen - to the green of Torch, Limited. - - tweak: Torch, LLC (the holding company representing the research department) has - been renamed to Torch, Ltd. - - maptweak: Changed the area around research to use the green decals, and new Torch - Ltd logo. - - maptweak: Changed the research director and liaison's offices on the bridge to - make use of the green decals. - - rscadd: Added legacy NanoTrasen uniforms to the loadout. - sabiram: - - tweak: Adherents of the Vigil can now play as Janitor, Chef, Bartender, Supply - Assistant, Engineering Contractor, Roboticist, Chemist, Research Assistant and - Researcher. - zaredman: - - maptweak: Adds dedicated Robotics OR. - - maptweak: Each OR now has holosigns to show when they are in use. - - maptweak: Moved some items from the joint OR to the robotics OR, added some extra - tools. - - rscadd: Separates Roboticist and Biomechanical Engineer. -2018-10-03: - Chinsky: - - tweak: Various changes to gunshot residue (GSR) forensic thingamabob. - - rscadd: Shooting someone pointblank will now leave GSR on the targeted organ, - and burn them a bit. Just like in those mystery novels! - - rscadd: You now need to aim at hand to take GSR from THAT hand, not from both. - You can take GSR from other bodyparts by aiming at them too. - - rscadd: Gun actually gets GSR too now. - - rscadd: Guns have a chance to leave GSR on the ground when fired. - Miraviel: - - rscadd: Added mechanical description to skill blurbs. - ParadoxSpace: - - rscadd: Adds a menu for you to select from your list of available attacks. Naturally, - this depends on species. - Sbotkin: - - rscdel: Removed ID modification and weapon authorization tools from command computers. - Textor: - - tweak: Lets engineering module and maint drones pick up floor tiles. They can - now put the tiles they levered off the floor back. - sabiram: - - maptweak: The hallway leading from the elevator to engineering in the maintenance - deck has been re-opened. - - maptweak: Moved security guard lockers from Petrov to the main checkpoint. -2018-10-04: - CrimsonShrike: - - bugfix: Rotating should no longer make science floor disassemble. - afterthought2: - - experiment: 'We are conducting some stability testing. You may notice issues with - how objects below you, on other z levels, are rendered: this is expected.' -2018-10-05: - Spookerton: - - bugfix: Automatic shutoff valve circuit toggling now works as intended. - Textor: - - rscadd: Deimos Advanced Information Systems (DAIS) is now officially in the game. - Lunchboxes, mugs, an undershirt polo, contractor uniforms, winter coats, and - a labcoat, are all in-game now. - - rscadd: DAIS is now a faction in the background tab of the character creator. - - rscadd: A new experimental DAIS lawset is available for researchers to install - in an AI. - - maptweak: Adds DAIS lunchbox, coat, and mug to telecomms room. - - bugfix: Corrects science labcoat description to reflect new color scheme. - - bugfix: Replaces lingering references to Torch, LLC with Torch, Ltd. - greggbot: - - rscadd: RFID Card Broadcasters, previously only found in PDAs, can now be printed. - zaredman: - - tweak: Adjusts max skill points and skill caps for Biomech and Roboticist. -2018-10-06: - Sbotkin: - - bugfix: The microphone circuit now translates non-GalCom languages only. - sabiram: - - rscadd: Added new colours of wrench and wire cutters, wherever wrenches and wire - cutters are found. - - rscadd: Adherent players can now select from some pre-set colours in character - creation. -2018-10-07: - Cajoes: - - rscadd: Added cubed spiders - - rscdel: Removes previously added domestic animal cubes - Cajoes & Earthcrusher: - - rscadd: Mass Driver Ammunition, two types. - - rscadd: Icon for the blunt mass driver round by Earthcrusher - afterthought2: - - bugfix: Air sensor thresholds should now work properly. - zaredman: - - tweak: Adds wheelchair and roller bed crates to be ordered through supply. - - tweak: Raises minimum player age for AI to 7 days and Cyborg to 3 days. -2018-10-08: - Atebite: - - bugfix: Fixed less wet floors increasing slip chance. Mopped floors should now - only have a 50% chance of slipping you. - Cajoes: - - rscdel: Removed the mention of crate in the cargo interface order form. Since - it is implied the shipment will be in a crate.. or locker.. or otherwise sealed - in some material. - - rscdel: Removed \improper tags from labels that didn't require them. You will - neither notice nor care. - - rscdel: Removed dispenser cartridge packs from Galley-Cargo due to redundancy. - Refer to Dispenser Refills-Cargo. - Textor: - - rscadd: Adds buttons to allow selecting "high," "low," or "never" on all antag - roles with a single click. - TheWelp: - - rscadd: Adds the starlight deity! Embodiment of fire and flame, watch out for - its super-powerful heralds and minions of light and darkness. - afterthought2: - - tweak: '"Starburst" spell has been heavily nerfed. The fireball spell is no longer - available in starlight deity mode pending balance adjustments.' - zaredman: - - tweak: Adds recipe for Chemistry to synthesize adrenaline. -2018-10-10: - FTangSteve: - - tweak: janihud now bases vision off of what the mob wearing it can see instead - of the tile - - rscadd: nabbers can now use HUDs - greggbot: - - bugfix: IC seed extractor now properly creates the appropriate seed and deletes - the fruit. -2018-10-12: - Atebite: - - tweak: Added a skillcheck for slips based on athletics - Cakey: - - maptweak: Tweaked several areas within maintenance after feedback. Removed majority - of railings. - - maptweak: Fixed shutoff valve layout on decks 4 and 5. - - maptweak: Swapped Petrov air pump with one that starts as on. - - tweak: Railings can now be wrenched open to allow passage, and the time it takes - to climb railing has been reduced from 5 seconds to 1.25 seconds. - - maptweak: Fixes merchant base accesses. - - maptweak: Removes a bunch of tiles from maintenance over piping and wires. - - maptweak: Fixes lack of cameras on D5. - - maptweak: Fixes dark spot on D4 fore hallway. - - maptweak: Adds consoles to pilot's lounge, exploration prep. - - maptweak: Adds suit sensors/camera monitoring console to Charon. - - maptweak: Adds exploration network cameras to explorer helmets. - - maptweak: Gives the shuttle pilot access to explorer camera network, suit sensors - monitoring. - - maptweak: Fixes noticeboard placement around the map, added extra noticeboards - to departments that lacked one. - - tweak: Fixes Petrov camera network, only accessible by LLC employees. - Chinsky: - - tweak: Disarming is now riskier. There's a chance to hurt your hand on the weapon - you're going for instead, with chance adjusted based on skill difference / being - flashed etc / being on help intent. -2018-10-13: - Anticept: - - balance: Increased atmospheric pump efficiency, and atmospheric filter efficiencies. - Pipe wizards rejoice! - - balance: Increased air injector internal tank size as well as power cap. this - increases its flow rate due to how atmospheric devices perform their math. Pipe - wizards rejoice! -2018-10-15: - Textor: - - tweak: Due to the extremely likely outcome of death for the crew upon ejection - of the escape pods, command has moved abandon ship from Command and Communciations - to Keycard Authentication Devices and renamed it to "Initiate Evacuation Procedures." - Abort still occurs at C&C consoles, as does bluespace jump initiation. - - tweak: Moves bolt/unbolt saferooms from Keycard Authentication Devices to C&C - - tweak: Changes Keycard Authentication Device interface to NanoUI -2018-10-16: - Cakey: - - maptweak: Fixes Petrov isolation cell alarm placement. - - maptweak: Added sticky notes to offices around the ship. - - maptweak: Added noticeboard to head of staff offices where missing. - - maptweak: Added missing air alarms to hangar, hangar storage. - - maptweak: Fixes hangar exit button access. - - maptweak: The Aquila is now overmap-capable. - - maptweak: The Guppy has been given some extra cargo space. - Roland410: - - tweak: Changes Tower deity spells to have more charges, and the fountain of power - only takes 30 seconds to recharge it. - Textor: - - tweak: O2 Tanks are once again removable without having to take your entire hardsuit - off. Hardsuit users will no longer risk suffocating in a vacuum because they - ran low on air. - afterthought2: - - rscdel: Spiderbots have been removed. - - maptweak: The telescreen by the copier in medical has been removed; some laptops - have been restored. - - tweak: Everyone gets four times more starting cash. - - tweak: Traders spawn much more often, and stick around about four times longer. -2018-10-17: - Melioa: - - bugfix: Fixes text displayed when examining an Automatic Shutoff Valve. - Textor: - - rscadd: Body scans now look different depening on the skill of the person reading - them. This includes printed and scanned versions. - - rscadd: 'New machine: Body Scan Display. It can have scans pushed to it for surgeons - to reference.' - - tweak: Body scanner UI updated to nanoui. - - maptweak: Maps in two body scan displays, one in the main operating room, the - other in robotics operating room. - sabiram: - - tweak: The conglomerate representing corporate interests onboard the Torch has - been renamed to Tenjin Holdings. - zaredman: - - maptweak: Adds washroom to medical. Moves a maint ladder to give some space. - - maptweak: Expands medical's D3 storage slightly to use up unused space. - - maptweak: Adds trash chute to medical locker room. -2018-10-18: - sierrakomodo: - - bugfix: Fixes mouse/drone duplication bugs with cookers, microwaves, and destructive - analyzers (#14179) - zaredman: - - tweak: 'Change to chem recipe for making adrenaline: now requires inaprov, hyperzine, - and dex+.' -2018-10-19: - Miraviel: - - maptweak: Added proper piping to the infirmary hallway and lighting to the locker - room. Added missing shutters and moved around a few overlapping objects. -2018-10-20: - EcklesFire: - - rscadd: Added helmets to Xenowear loadout for Skrell in security/roles that use - armour. Credits to Karbivio for icons - Miraviel: - - rscadd: 'Added the following new emotes: afold, alook, crub, eroll (targeted), - erub, hbow, hip, holdup, hrub, hshrug, hspread, fslap, ftap,pocket, rsalute, - rshoulder, squint (targeted), tfist, tilt.' - Sbotkin: - - bugfix: Fixes the integrated circuits recycling. - - rscadd: Allows to recycle assemblies and individual circuits. -2018-10-21: - zaredman: - - bugfix: Replaces D2 Atmos CO2 high-power pump with pressure regulator and replaces - D5 CO2 high-power pump with a normal pump to avoid unintentional blowouts. -2018-10-22: - Datraen: - - tweak: Uplink kits come in generic containers now. - Textor: - - tweak: Changes Torch Ltd. to Expeditionary Corps Organisation in several spots. - - tweak: Adds DAIS labcoat to roboticist and biomech engineer loadouts. - sierrakomodo: - - rscadd: Bridge Officers now have access to the Charon's Airlock and Charon's Helm -2018-10-24: - Anticept: - - tweak: All pipes, except fuel pipes, now have the same pressure damage threshold. - Previously, cross-z pipes were significantly weaker. Fuel pipes' extremely high - threshold remain unchanged. - - tweak: All pipes have a slightly higher burst pressure threshold. - BlueNexus: - - tweak: '"Many chemicals now require heating or cooling in order to mix. Check - the wiki for specifics."' - - maptweak: '"Added heaters and coolers to various locations on the map."' - Roland410: - - rscadd: Radiation suits got a larger pocket and you can fit your geiger counters - on them now. Technology! - Sbotkin: - - tweak: All guns now spawn with safety on. - - bugfix: Fixes twohanded weapons not being rendered when on back. - afterthought2: - - tweak: Ship movement physics have been altered. Ships are now generally slower - to accelerate, though can move pretty fast when at max speed. This includes - the Torch as well as overmap-capable shuttles and away site vessels. - - bugfix: Overmap wrapping when moving diagonally has been fixed. - - tweak: Shuttles no longer have gravity when not at a location that has ambient - gravity. - - rscadd: A new admin tool has been added, Toggle Overmap Halt, which allows admins - to make all overmap ships stop and freeze them from moving. - - rscdel: The Move To Top object verb has been removed due to changes in the new - BYOND version making it no longer work consistently. - sierrakomodo: - - maptweak: Pilot's Lounge and Deck 5 Maintenance now have air alarms -2018-10-26: - Sbotkin: - - rscadd: Experienced shooter will disable the safety if they draw a gun with harm - intent. - - tweak: Captain's revolver (the one in the showcase) spawns with no ammo. - - bugfix: Fixed a bug with safety state not showing after unholstering. -2018-10-27: - Melioa: - - tweak: Replaces 'Broad-shouldered' setup build for 'Well-built' -2018-10-29: - Gates: - - rscadd: NTOS now requires MANDATORY updates every once in a while. - MistChristmas: - - maptweak: Added a weapon charger to Deck One Checkpoint - - maptweak: Removed fire alarm hiding in a bin in excavation prep -2018-10-30: - BlueNexus: - - rscadd: Added insulated beakers. It is now actually possible to make clonex. Oops. - - tweak: Clonex no longer requires phoron. - RyanSmake: - - rscdel: Removed NTNet relay from Bearcat space ruin as it was non-functional. - SierraKomodo: - - bugfix: All disposal units should now be connected to the disposal network. - sierrakomodo: - - bugfix: Adds missing disposal pipes to the briefing room. -2018-10-31: - Textor: - - tweak: The bodyscanner now provides feedback when pushing scans to the OR displays. - sabiram: - - rscadd: Some jobs now have a cap on education tiers you can select. -2018-11-01: - EcklesFire: - - imageadd: Adds new icons for the Skrell riot security voidsuit to bring it in - line with the Torch voidsuit. Credits to Karbivio. -2018-11-02: - afterthought2: - - tweak: Secret and random will (almost) never fail to start when voted in. - zaredman: - - maptweak: Adds Security, Science, and Engineering department pagers in their respective - lobbies. -2018-11-03: - Cakey: - - rscadd: Added fleet branch berets, for showing off your branch when you need to - wear your service uniform. - SierraKomodo: - - bugfix: Job slots should now open back up properly whenever someone cryos from - a multi-slot job -2018-11-04: - SierraKomodo: - - bugfix: OOC lobby manifest entries should now show proper Active/Inactive status - - rscadd: Crew records now have a separate 'Formal Name' field that contains the - MD/PhD/etc suffix. This will be the name displayed on manifests. - afterthought2: - - balance: TC prices on some merc items have gone up. - - tweak: You can now dump the contents of a pill bottle into the chem grinder by - clicking the grinder with the bottle. -2018-11-06: - Datraen: - - rscadd: Added Skrellian SDTF Holobadges, verb to set individual SDTF. - Miraviel: - - rscadd: 'Added three new hairstyles: Donut Bun, Gentle 2, Gentle 2 Long.' - SierraKomodo: - - bugfix: Crew manifest entries should now update properly when someone cryos - afterthought2: - - balance: EMPs now deal much less damage to synthetic humans (FBP, IPC), though - the amount is still considerable. - - balance: Damaged robotic legs and feet reduce movement speed. - - balance: Robotic external organs will, if heavily damaged or the damage taken - is large, pass burn damage to contained internal organs. - - tweak: Cell organs are dramatically less power-efficient if damaged. - - tweak: If a synthetic human runs out of juice, they become unconscious. -2018-11-07: - sabiram: - - tweak: It now takes some time to repair and pry open/closed blast doors and shutters. - - rscadd: Added a EXO polo undershirt to the loadout underwear options. -2018-11-08: - Earthcrusher: - - bugfix: Emotes ending in quotation marks will no longer add a superfluous period - on the end. - - bugfix: Lazy typists rejoice! When speaking, the game will automatically capitalize - and add punctuation where needed. Well at least on the end of the sentence. - - tweak: Emotes now use the visible emote character set in your Character Setup, - which defaults to "^". - EcklesFire: - - tweak: Removes Skrell education background requirements and allows them to utilise - more unarmed attacks. - SierraKomodo: - - bugfix: Deck 5 hallways now have air alarms. - sabiram: - - tweak: All various subcontractor (NanoTrasen and Hephaestus Industries, at time - of writing) items in the loadout have been merged into one item with type selection. - Key word to search for (CTRL-F) is 'corporate' - - rscadd: Lighters, zippos and candles now come in a variety of new colours. -2018-11-09: - Miraviel: - - rscadd: Prospectors were given EVA and SolGov crew access. -2018-11-10: - MistChristmas: - - maptweak: Replaces overlapping Xenobiology pipes for Scrubbers and Supply Ones. -2018-11-11: - Roland410: - - rscadd: Added a playable crashed survival pod. - - maptweak: Converted the old crashed pod into a random ruin. -2018-11-12: - Alex6511: - - tweak: Reduced the frequency of windows updates events by half - Blue Bit: - - imageadd: Added sprites for the anomaly console and scanning pad. - Datraen: - - bugfix: Cancelling SDTF naming for Skrell badges no longer blocks setting in the - future. - Sbotkin: - - rscadd: Adds digital multitool to the engineering toolset augment. - SierraKomodo: - - bugfix: Fake Crew Announcements traitor service now broadcasts the correct arrivals - message on use - - bugfix: Fake Crew Announcements traitor service now properly updates the crew - manifest with rank, name, and honorifics -2018-11-15: - Roland410: - - tweak: Gamemode vote starts at 160 seconds, giving players 100 seconds to change - their character/preferences according to the voted gamemode. - - tweak: Should a non-secret mode fail to start, you will have one minute to adjust - your preferences or unready before roundstart. -2018-11-16: - Faustico: - - rscadd: Added basic security belts, like normal security belts but without a holster. - - maptweak: Added basic security belts to MAA lockers. - - tweak: Storage accessories and holsters use two different accessory slots again. - SierraKomodo: - - tweak: Blob resistance has been rebalanced. Brute-based weapons (Crowbars, fireaxes) - are more effective against cores, while fire-based weapons (Welders, lasers*) - are more effective against blob and strong blob. *Laser rifles take a 1/2 damage - penalty against all blob targets. See https://github.com/Baystation12/Baystation12/pull/23774 - for specific numbers. - TheWelp: - - rscadd: Adds ability to destroy circuit assemblies via damage. Bigger assemblies - means more health. Can be healed with wire. -2018-11-17: - CrimsonShrike: - - rscadd: Adds the mech pilot inspired Null Suit to robotics fabricator. This lightweight - rig offers little to no protection and cannot mount weapon modules. -2018-11-19: - Alex6511: - - tweak: the malfunctioning drone on away sites has had its damage adjusted - BlueNexus: - - bugfix: Cryo Cells now work properly, with temperature. This means clonex is possible. - - tweak: Clonex can no longer mix below -200C - Miraviel: - - tweak: Updated the guest pass terminal icon. Added guest pass terminals to supply - and to the Pathfinder's office. - - tweak: Using the autopsy scanner in-hand will now print the scan. Its icon was - also updated. -2018-11-21: - Aticius: - - bugfix: Crashed pod should no longer have random space tiles causing constant - air flow/air loss. - SierraKomodo: - - tweak: Charon and Aquila APCs now include helm access flags, meaning anyone who - can access the shuttle's helm can also unlock the shuttle's APCs. Engineers - still have APC access as well. - afterthought2: - - bugfix: Clonex should work properly with cryo tubes now (recall that you have - to make it at -100 to -75 C, best done with the cooler). It will adjust its - temperature to that of the cryo tube, which should prevent it from denaturing - under normal circumstances. -2018-11-22: - Alex6511: - - maptweak: Added a large insulated beaker to chemistry. - EcklesFire: - - bugfix: Makes Skrell medical voidsuit helmets work. - afterthought2: - - tweak: Clonex now won't denature below 50 C (i.e. unless you heat it). - sabiram: - - balance: Space carp now have generally more health and more powerful attack values, - and move faster. Pikes and sharks now have more health and do more damage. - - balance: All castes of giant spiders are now tougher, faster, and more deadly - all around. Hunters in particular are very dangerous. - - rscadd: Hunters and guards now use a new venom. - - rscadd: Added colour variants for space carp. - - rscadd: Added randomly coloured eyes for giant spiders, and made them glow. - - rscadd: Hostile mobs will now attempt to pry open doors between them and their - target, though they can be interrupted. - - rscadd: Hostile mobs can now destroy window-doors and tables. - - bugfix: Fixed hostile mobs not destroying windows, grilles, wall frames, etc. - - rscadd: Added more colours for space carp. -2018-11-24: - Blue Bit: - - rscadd: 'There are now two additional exoplanet types: shrouded and chlorine.' - - rscadd: Added a few alien creature color variants. - - maptweak: Added six new randomly spawning exoplanet sites. - - bugfix: Fixed a portion of the "Lodge" away site that was designated as space. - RyanSmake: - - rscadd: Adds a Bluespace Artillery to Deck 2 missile bay. Select an adjacent overmap - tile, and get rid of the event on it, or shoot at the away sector a charge of - your choosing (emp, remote mining, explosive, fire, or droppod). - Toriate: - - tweak: Photocopier now uses new photocopier icon state in bureaucracy.dmi instead - of the scanner iconstate. - - imageadd: New photocopier sprites added! Made by yours truly. - afterthought2: - - rscadd: The mecha skill (Exosuit Operation) is now a subskill of EVA. You need - to have at least Trained in EVA to select it, and then choose it from skill - selection. - - rscadd: Driving mecha without the mecha skill may result in unpredictable movement. - - rscadd: Exiting a mecha without proper skill may occasionally force-eject you. - - tweak: The mecha skill no longer has anything to do with mecha fabrication in - the description. - sabiram: - - tweak: Nurse spiders should infest their enemies with eggs less often than before. - - rscadd: Added giant spider legs, harvested from giant spiders. Can be used in - sushi or boiled in the microwave. -2018-11-25: - RyanSmake: - - bugfix: The BSA actually works now. -2018-11-26: - Funce: - - bugfix: You can no longer get infinite amounts of cable coil from constructing - and deconstructing certain telecomms equipment - Hubblenaut: - - tweak: Drawing guns based on intent is now a preference option. - SierraKomodo: - - tweak: Autopilot default speed lowered from 2 (Exceeds max speed hardcap of 0.1) - to 0.0025 (40 seconds ETA per tile) - - bugfix: Autopilot no longer burns fuel needlessly bouncing above/below the speedlimit, - and will now never go above the speedlimit. - - tweak: Autopilot now handles changing direction/destination and diagonal movement - much more efficiently fuel wise - - bugfix: It is once again possible to decelerate to a speed of 0. -2018-11-28: - afterthought2: - - tweak: Surgically repairing decaying organs is once again viable. -2018-11-30: - Heph-hasto: - - rscdel: Removes ability for ship AI to be traitors -2018-12-01: - Cakey: - - tweak: After the sudden drop in SCG funding, the newly released MRE line has been - reduced in content. - SierraKomodo: - - rscadd: General Notes (Public) field has been added to crew records. These are - records visible to anyone who can open crew records, and are intended for 'common' - information between security, medical, /and/ employment records. - afterthought2: - - rscadd: A new admin tool, Toggle Circuits, has been added to the Secrets panel. -2018-12-02: - Aticius: - - rscadd: Adds a joinable Colony map that can spawn on exoplanets. Rimworld mode - is here. - Broseph Stylin: - - rscadd: A new Scientist rank is now available for the SolGov Employee branch. - - tweak: The Scientist and Research Assistant jobs are now open for the SolGov Employee - rank of Scientist. -2018-12-03: - Cakey: - - rscadd: Added katsu curry, made with a slab of chicken, 10 units of rice, 10 units - of water, 5 units of flour, an apple, a carrot, and a potato. - Toriate: - - imageadd: The LAEP90's sprites have been replaced with new ones! - sabiram: - - tweak: Wall frames now use materials like walls do, and can be painted and unpainted - with the paint gun. -2018-12-04: - Aticius: - - maptweak: Bunch of minor fixes and tweaks to the Colony map. The walls no longer - eat mining computers. Oops. - Cakey: - - rscadd: Added Terran Navy uniforms. - - rscadd: Added Terran Navy ranks and structure. - sabiram: - - balance: Giant spider nurses will now only inject eggs into organs that have space - for them. - - balance: Reduced the number of spiders hatched per egg injected. - - balance: Injected spider eggs now mature more slowly. - - tweak: Slightly reduced maximum possible health for all castes of giant spider. - - tweak: Reduced occurrence weight and severity of spider infestation event. - - tweak: Spiders bursting out of organs is more damaging. - - tweak: Hostile simple animals can now destroy railings. - - tweak: Simple animals should now die faster after taking fatal damage. - zaredman: - - rscadd: Adds a MEDIC and OCIE AGENT tag for plate carriers. -2018-12-06: - Cakey: - - imageadd: Fleet uniforms sprites have been re-done. - - rscadd: Added Fleet officer's alt utility uniform, mainly used by bridge crew. - - rscadd: Added Fleet service jackets, with alternating trimmings based on rank - (enlisted, officer, senior officer, flag officer) - - rscadd: Added new Fleet dress jackets, with alternating trimmings based on rank - (enlisted, officer, senior officer, flag officer) - afterthought2: - - maptweak: The GUP is now overmap capable, though with poor sensor quality. - - maptweak: The GUP is no longer fully pressurized. Use the unlocked air alarm to - properly modify the atmosphere as needed. -2018-12-07: - Aticius: - - rscadd: A new paint job has been added to suit cyclers in the Engineering department. - Stomp around in style in a Hazardous Operation suit! - RyanSmake: - - bugfix: Stopped AIs and ghosts from activating artifacts. -2018-12-08: - sabiram: - - maptweak: The ship's Christmas tree has been installed in the galley. -2018-12-09: - Eckles: - - tweak: Changed Terran to Gilgamesh/Independent. Faction rename. - - tweak: Enforced Martian and Martian Surfacer as default human culture/system instead - of generic 'humankind'. - Persona E: - - balance: Unathi and Dionaea can no longer regenerate without nutrition. - Roland410: - - tweak: Construction skill is required for basically any recipes now, and material - difficulty (what skill you need to be able to craft from it) has been upped - for most of them. - - tweak: Engineering contractors receive trained construction now to be able to - handle plasteel. - Sabira: - - balance: Handheld and mounted/portable flashers now work on all simple animals. - - balance: All hostile mobs can now be stunned. - - balance: Spiderlings now pull from a weighted list of castes when determining - which caste to grow up into. Hunter spiders are rare, all other castes are even. - - balance: Every caste of spider except hunters can now be captured with nets. - - balance: Various spider numbers tweaks. Reduced hunter maximum damage. Reduced - lifesteal for all castes. Reduced nurse venom-ness. - - balance: Nurse spiders now have a maximum amount of eggs they can lay. They can - ready more eggs by feeding from mobs trapped in cocoons. - - rscadd: The base variant of giant spider is now an unremarkable generic worker - meant to fill the ranks. They don't have any special gimmicks. They're green. - - rscadd: Added a proper guard caste to spiders. Guard spiders (brown) will now - be paired with a nearby nurse (beige), and will closely follow them til' death - do they part. Killing a nurse might throw their guard into a rage. - - rscadd: Added a spitting spider (purple) caste - once they're out of venom, they'll - have to generate more before they can spit again. They'll resort to melee combat - if they're out of spitting venom. - - rscadd: Hunter spiders can now initiate combat by leaping at their prey. - - tweak: Hostile mobs will now only attempt to destroy their environment if the - obstacle is between them and their target. - - tweak: Hostile mobs now have a chance to miss their attacks. Flashing them increases - the chance. - - tweak: Hostile mobs can now have individual delays for prying open doors. Spiders - and carp are currently the only ones set. -2018-12-10: - Blue Bit: - - rscadd: Liquids can now be collected from exoplanet puddles. - - rscadd: Added tar. It's a bit toxic, but it can be heated and broken down. - afterthought2: - - rscadd: Some exoplanet plants now produce exotic chemicals, with effects that - are randomly generated each round. - - rscadd: Inspecting these chemicals in the mass spec with high chemistry and/or - science skill will reveal additional information about them. - - rscadd: By heating them to almost, but not quite, their boiling points, the effects - of these chemicals strengthen (if with phoron catalysis, then weaken). By also - adding certain additional ingredients (depending on the effect), the effect - will instead be left unchanged. - - rscadd: 'Cooling works similarly, but now the default behavior is that the effect - is left unchanged: you need to add certain additional ingredients to make the - effect strengthen (or weaken, with phoron).' - - rscadd: These chemicals may have powerful combinations of medical (or poisonous) - effects that can be used, or (if purified sufficiently) can be sold for large - profits. - sabiram: - - bugfix: Giant spider nurses will no longer infinitely attempt to cocoon deceased - giant spiders. -2018-12-11: - Persona E: - - rscdel: Removed the TCC ushanka from the loadout. - afterthought2: - - tweak: You can now order additional BSA charges from supply. - - tweak: Mass driver ammo is now cheaper. -2018-12-12: - Carlen White: - - tweak: The supply terminal listing of supplies shade every so listing to help - item selection. -2018-12-13: - Dave-TH: - - bugfix: The Pilot's qualification pin can now be pinned to jackets. (Like the - rest of the pins) - - bugfix: The dedication plaques on the bridge are no longer invisible. - - bugfix: The Pathfinder's hardsuit no longer has an invisible chest piece when - sealed. - WhiteHusky: - - rscadd: Supply consoles now show a notice when there are pending orders when properly - authenticated. - - spellcheck: Fixed misspellings in the Supply Console. -2018-12-14: - PoZe: - - tweak: Admin verb Create Object major flaw was optimized to display/search lists - of all objects instantly, instead of freezing for 3-4 seconds. - RyanSmake: - - bugfix: After repeated complaints from the SEV Torch that all showers are constantly - clogged we have deployed the NanoTrasen Bluespace Plunger(tm). Operation successful, - showers will never clog again. - WhiteHusky: - - bugfix: You no longer "see" items being removed from bags or other storage items - when blind. - sabiram: - - tweak: Placing acids in a fire extinguisher will now destroy them, and may splash - acid onto the user. -2018-12-15: - afterthought2: - - rscdel: NTSL has been removed entirely. -2018-12-16: - Alex6511: - - bugfix: Normal humans can no longer select the vat-grown specific culture - Hubblenaut: - - bugfix: Fixes movement with grabs. -2018-12-22: - sabiram: - - rscadd: Added two new holodeck programs; a plaza and a bathhouse. -2018-12-24: - WhiteHusky: - - rscadd: You can enable notifications for the shipping program. -2018-12-27: - Anticept: - - tweak: 'XO default access is no longer spotty. It now has access to the entire - ship and shuttles, including research. Specific changes: Added robotics, all - of research including petrov, Pilot, Mining, and Commisary. Places XO does not - have access: Captain, Research Director''s office, Research Director''s Petrov - Office, SolGov Rep, and Corporate Liason.' - - rscdel: Removed Genetics access from the game. - - tweak: Renamed "Nanotrasen" in the access computer program to "Corporate". - - tweak: Renamed access "Psychiatrist's Office" to "Mental Health". Renamed access - "Head of Security" to "Chief of Security". Renamed "Head of Personnel" to "Executive - Officer". "Quartermaster" is renamed to "Deck Chief". - Hubblenaut: - - bugfix: Anomaly isolation and Xenobiology air alarms will no longer cause atmos - alarms. - Toriate: - - tweak: RCD now carries 120 matter units at max. Small matter cartridges give 30 - units, while large ones give 120. - - rscadd: Rapid Crossbow Device added. Craft by screwdrivering a RCD and then slapping - a fully assembled crossbow frame into it. - - imageadd: New RCD sprites in tools.dmi, made by yours truly. Originally made for - Eris. - - imageadd: New Matter Cartridge sprites, based off /tg/'s. - - imagedel: Old RCD sprites deleted. - WhiteHusky: - - rscadd: You can now print receipts on pending, approved, and archived orders. -2018-12-28: - WhiteHusky: - - rscadd: You can now examine neural laces, and understand them assuming you have - the skill. - afterthought2: - - tweak: Off-station roles are blacklisted from being on-station antags. -2018-12-30: - WhiteHusky: - - rscadd: RFID card readers firmware has been updated to allow verbose diagnostics - checks. -2018-12-31: - WhiteHusky: - - tweak: You no longer drop computer hardware onto the floor if possible. -2019-01-02: - afterthought2: - - tweak: The colony will no longer start irradiated. -2019-01-03: - Broseph Stylin: - - rscadd: A system to automatically switch clothing icons based on gender has been - introduced. It is currently set up to work for humans and human subspecies. - - tweak: Expeditionary Corps, Fleet and Army uniforms as well as EXO and corporate - variations of the Torch Research uniforms now have gendered icons. -2019-01-06: - Cakey: - - maptweak: Fixed odd spacing in supply, adds a cargo lift to the warehouse. - CrimsonShrike: - - rscadd: Adds detective instinct verb for master forensics. This will give most - of the scene a distinctive noir look. - Hubblenaut: - - bugfix: Fixes shuttles removing air from the hangar upon arrival. -2019-01-07: - Anticept: - - tweak: Radiation resistance now fully blocks radiation levels below its radiation - resistance percentage, and thereafter will only allow some radiation leakthrough. - Lower resistance suits leak much more readily once past the threshold, while - high resistance suits will only leak a little bit after the threshold is reached. - Very highly irradiated environments are still extremely dangerous. -2019-01-08: - Anticept: - - tweak: The CE Firesuit is now firefighting rated, just like firesuits and atmos - suits. - Chinsky: - - soundadd: Pain has a low chance of heartstop again. High shock levels ('You feel - like you can die any moment now!' level) can sometimes cause thready pulse. - Countered by giving poor sod some painkillers to prevent shock, or some inapro - to stabilize the pulse. - sabiram: - - maptweak: The Christmas tree in the bar has been removed. -2019-01-10: - Anticept: - - rscadd: Added a waste tank for atmospheric waste gasses next to the fuel bay. - Now there's a place for gasses the Torch doesn't have a tank for, as well as - storage for engine byproducts, and can be dumped to space or recovered with - canisters. Also acts like a good way to clear a backed up atmos system if you - know how to configure the pumps and valves, and don't mind spacing the gas. - - rscdel: Engineering thrusters (not nacelles) are now purged from the game. They - offered next to no thrust at all and now the engine room is a little bit simpler. - - tweak: All black pipes in engineering ultimately go to the waste tank. - - tweak: Removed redundant fuel bay firedoor (it had two at the entrance). - RyanSmake: - - bugfix: AIs now get alerted once again when someone edits their laws. - Textor: - - rscadd: Adds DAIS, Xynergy, EC, and EXO logos to paperwork formatting, adds help - information about new logos to nanoword formatting help. - - rscadd: Adds all missing logos to the admin paperwork so that they can be used - in fax replies. - - tweak: Changes [tccseal] to [iccgseal], makes the EXO logo take over "[logo]" - and moves nt logo to [ntlogo] - comma: - - tweak: All speed/acceleration values are now displayed multiplied by 1000. Actual - mechanics are still same. - - tweak: Only 1 random alien seed in Xenoflora storage now, and can't order them - from cargo. Go on expeditions nerds. - - maptweak: No more pre-spawned anomalies on Petrov. Go on expeditions nerds. - lorwp: - - tweak: IPCs can now use the Command Hardsuits -2019-01-11: - Anticept: - - tweak: Radiation planets background rads peak out at 75bq. Hotspots are still - deadly though! - - tweak: Adjusted waste tank dump port so it goes to the edge of shields, rather - than dumping onto the top of D3 pod. - - tweak: Added a pump to the waste tank canister port. - BlueNexus: - - maptweak: Nacelles have been reworked. - - bugfix: As a result, combustion mode works again. - MistakeNot4892: - - rscdel: Removed the education system entirely. - RyanSmake: - - bugfix: Chief Engineers now spawn with correct backpacks. - Zuhayr: - - rscadd: Added a department goal system. Use Check Goal to view them inround. - - rscadd: Added a personal goal system. Defaults to disabled. Set Crew Goals to - something else in your global preferences to start getting them on join. - - tweak: Merged ambitions into goals. -2019-01-13: - Anticept: - - tweak: The "Set transfer amount" verb's range is now one tile, so now you don't - have to be carrying them to set it anymore. - - bugfix: ghosts and unconscious can no longer invoke the set transfer amount verb - on containers and IVs. - - tweak: Gas sensors in atmos and waste tank now display all gas contents that they - can identify. - Chinsky: - - tweak: Falling down zlevels now has a chance to dislocate feet/arms. Athletic - skill mitigates it, Trained and above are safe. - - tweak: Setting dislocated limbs now requires Medicine skill to be reliable, especially - for self-setting. Basic skill is enough for ~90% success rate, Trained is guaranteed - or your money back. - - tweak: Walking on fractured or dislocated limbs now applies additional pain to - that limb. Rest a bit for it to clear up or use a cane. - Hubblenaut: - - rscadd: Large escape pods will now repressurize themselves after undocking. -2019-01-21: - Anticept: - - rscadd: CMOs rejoice! Your hypospray now has a quantity setting, you can administer - in 1,2,5,10,15,20, or 30 units per injection! - - rscadd: CMOs rejoice! You can now pour your hypospray contents into a container - without removing the vial! (you can already put reagents in it too without swapping - vials) - - rscadd: CMOs rejoice! You are now coordinated enough to swap vials on the fly. - No longer do you have to remove and put away the old vial before you can install - a new one. - - rscadd: Medical rejoice! The contractor producing your syringes have heard your - cries and installed easier to read graduations on syringes. You now can set - transfer amounts in 1, 2, and 5. - - rscadd: Everyone rejoice! When pouring containers, you will now be able to see - how many units are remaining. - - bugfix: drones and borgs can once again use r-glass. - - bugfix: drones and borgs glass stacks are colored correctly. - Blue Bit: - - rscadd: Security borgs now have a hailer. - - bugfix: The playable colony should once again have its rods. - Cakey: - - maptweak: The robotics lab is now two-floored. Has a lift. - - maptweak: Cyborg station has been moved next to atmospherics. - ChaosAlpha: - - bugfix: Robots and drones should once again be able to drop items from their grippers - from the Silicon Commands tab (the verb has been renamed "Drop Gripped Item"). - - bugfix: Robots and drones now drop all gripped items on death. - Chinsky: - - rscadd: Rods are now material based, can be made from more than just steel. Same - with grilles and lattices. - - rscadd: Windows are material based too, any non-opaque material can be used to - make them (currently diamonds and quartz). - - rscadd: You can get back rods from rglass (rphoronglass) by welding them out. - - bugfix: Autolathe now will properly get some steel material on top of glass if - you feed it rglass. - Eckff: - - tweak: The sleep button now keeps you asleep until you press it again. It will - not wake you up from other things that cause you to sleep, like chems. - Eckles: - - bugfix: Fixes sprite and object issues with the riot security voidsuit for Unathi - and Skrell - Hubblenaut: - - bugfix: Fixes cameras of robots, hardsuits, Thunderdome and similar not being - accessable. - MistakeNot4892: - - tweak: Locker icons now use a runtime-based system. This should have no player-facing - impact other than the cosmetic effects of new locker icons. - - rscadd: Added a Loss Prevention Associate role. Basically a bodyguard for the - Workplace Liaison. They can only spawn with an active Liaison in the round, - and get a secure gun with corporate access. - - tweak: Added backend support for deferred roles, please make a bug if this breaks - anything in roundstart job allocation. - - rscadd: Added a stomach organ. If your stomach is damaged, you can't eat properly - and won't metabolize reagents well. - - tweak: Puke now contains some of the reagents you had in your stomach, plus some - stomach acid. We are pushing the boundaries of puke simulation technology. - - rscdel: Removed Xenolife Technician and NT Guard. - - tweak: Research Director is now the Chief Science Officer and may only be EC-ranked, - not contractor. - - tweak: All other science roles are now available to EC staff as well as contractors. - WhiteHusky: - - rscadd: Intergrated circuit's medical scanners can now get a patient's pulse. - afterthought2: - - tweak: Adherent are now shock-immune. - lorwp: - - tweak: the EVA Hardsuit in Engineering Hard Storage now fits on IPCs. Rejoice - sabiram: - - rscadd: Added aluminium. It's the standard material for furniture such as tables - and chairs, among other things. - - tweak: Added plastic and aluminium to the autolathe. Many recipes have been adjusted. - - tweak: Smelting bauxite now yields aluminium. Bauxite blocks can still be obtained - by compressing. - - tweak: Added aluminium sheets to the supply menu. - - maptweak: Added aluminium sheets to where metal sheets are found. - xales: - - tweak: Torch command (CO, XO, SEA) now share a headset type and encryption key - - tweak: The XO now has science keys in their locker. -2019-01-26: - Cakey: - - rscadd: Re-adds exploration helmet-cameras. - MistakeNot4892: - - tweak: YOU WILL NEED TO UPDATE YOUR RANK AND BRANCH PREFERENCES, READ THIS CHANGELOG. - - tweak: Occupations panel got a visual overhall. Click the link-name of a job to - set alt title, and click the never/high/low/medium to cycle between job weights. - - tweak: Rank is now tracked by job, not by save slot. You can set your rank and - branch up as you like for each given job. - - tweak: You can now set/save skills for submaps in the occupations panel. - Pandolphina: - - rscadd: Adds a new exoplanet ruin, a data capsule ejected from a ship with zombie - juice inside. - Textor: - - rscadd: Escape pod blast doors now open upon reaching pod launch sequence. You - might want to stay out of maint areas near escape pods when pods are getting - ready to launch. - - maptweak: After much deliberation, the Health and Safety department decided that - Engineering, the misc laboratory, and the tunnels outside the deck 2 escape - pods should be more well-lit. - - maptweak: The forensics office and bridge now have chairs that can rotate. - - maptweak: The deck 1 conference room floor has finally been repainted properly. - - maptweak: The R-UST now has its own power monitor installed and a gas injector - and a port to allow engineers to inject various gasses into the R-UST chamber - if they want. - - maptweak: Deck 3 has more emergency shutters to prevent the spread of fire and - decompression and prevent hapless engineers from wandering into unknown danger - outside the EVA room. - - bugfix: Fixes deck 5 subgrid configuration. - - bugfix: Fixes stasis cages. - - maptweak: Replaces ready room with adherent maintenance. Ding. - - tweak: Adherents now recharge at cyborg rechargers at half the rate. - - maptweak: Removes mineral baths from all other map locations. - - tweak: Adherent pylon will now damage robots. - - rscadd: Adds adherent tool vendor and crystal material airlock. - WhiteHusky: - - rscadd: You can show the contents of supply products. - afterthought2: - - tweak: Rad collectors and potted plants now cost more when ordered from supply. - - tweak: Adrenaline now does some heart damage if used to restart the heart. - sabiram: - - rscadd: Added green tea, iced green tea, and sweet green tea. - - rscadd: Added green tea to bartender soft drinks and coffee reagent dispensers. - - rscdel: Removed iced tea dispenser. Combine ice and the tea of your choice to - create iced tea. - - rscadd: Added flavour pods and sugar packs to the hot drinks vendor to flavour - your tea or coffee. - - rscadd: 'Added two new mixed tea drinks: Baron Grey is prepared by mixing black - tea and orange juice, and Maghrebi mint tea is prepared by mixing sweet green - tea and mint.' - - rscadd: Added teacups to the cutlery vendor. - - rscadd: Added chazuke. It can be prepared by mixing ten parts rice and one part - green tea in any container. Microwaving ten parts chazuke will result in a snack - bowl meal. - - rscadd: Added aluminium and plastic into the protolathe system. Many recipes have - been adjusted. - - maptweak: Removed protolathe from the robotics laboratory. - - maptweak: Added aluminium sheets to the research and robotics storage areas. -2019-01-28: - Roland410: - - bugfix: Fixed/removed the cap on away site jobs' skills. - sabiram: - - tweak: The circuit printer and protolathe can now hold more materiel. -2019-02-05: - Anticept: - - tweak: Pilot skill description now clarifies random movement occurs until trained - or greater, regardless of what ship you are flying. - - bugfix: Fixed phoron glass sheet's melting temperature so that reinforced phoron - glass is consistent with the pre-material overhaul melting temperature. This - should stop the random window breakage in the engine core until close to delamination - temperatures. - - tweak: Due to the nature of the material overhaul and this change, regular un-reinforced - phoron glass also gets its temperature significantly buffed. It's still weak - to physical attack by comparison to reinforced phoron glass. - Cakey: - - maptweak: Added LPA equipment closet to the Workplace Liason's office. - - tweak: Added "Asset Protection Agent" as an alt title to LPA. - - tweak: You can now put people onto wall frames with grabs - Chinsky: - - rscadd: Added an exploration shotgun. It's in a wall locker on Charon, along with - ammo, replacing netgun. What can possibly go wrong? - - rscadd: It can fire freely off-ship, but onboard you gotta register and get XO - or CO to authorize it. Yes it's pain, yes it's intended. - - rscadd: It is only guaranteed to work with types of ammo it ships with - beanbags, - flash, net rounds. Loading combat ammo voids warranty and may result in fun. - Datraen: - - rscadd: Adds Skrellian Weapons, currently admin spawn only. - Herigony: - - bugfix: Fixed admin jobban panel - Textor: - - bugfix: After paperwork being filled out in triplicate, lost, found, and buried - in peat for two weeks, the CSO now has access to their uniform in the uniform - vendor. - - bugfix: You now need to be an EC scientist to select an EC labcoat in loadout. - Senior Researchers and Assistants now have access to some of the same stuff - as normal scientists that they lacked. Also adds some equipment the biomech - should have access to. - - bugfix: Non-senior researcher Ensigns in the science department are now properly - considered officers and have an officer's uniform given to them when they wake - up instead of an enlisted uniform. - - rscadd: Labcoats can now be issued via the uniform vendor for EC science people. - sabiram: - - rscadd: Added the CSO's rigsuit. - - maptweak: Removed the AMI rigsuit module from the CSO's Petrov office and added - the new rigsuit to the bridge EVA storage. - - maptweak: Resized and reorganised the bridge EVA storage. - - rscadd: 'Added new wood material types: mahogany, maple, walnut, and ebony. These - types are largely identical apart from their colour.' - - rscadd: Added supply crates to obtain the new woods. - - maptweak: Several tables and chairs across the ship that were previously generic - wood are now made from mahogany, maple, or walnut. - - maptweak: Shuffled things around a bit in the captain's quadrant. - - maptweak: Moved the CSO's primary office back to the bridge, from the Petrov. - - rscadd: Clipboards are now a material item and can be constructed from most materials. - Clipboards that spawn around the map will be of various materials. -2019-02-06: - ghostsheet: - - maptweak: Rearranged the Guppy's interior for quality of life conveniences. - sabiram: - - rscadd: Radiation collector arrays will now fail catastrophically if exposed to - extreme temperatures, such as those found within the supermatter core. - - maptweak: The robotics lab has been messed with again, everything should work - now hopefully. -2019-02-07: - comma: - - tweak: The year is 2307 now. Roleplay accordingly. - sabiram: - - rscadd: Added explosive harpoons to the uplink. These will only explode upon embedding - in a target, by throwing it at them or sticking them close up. - - tweak: Increased the base harpoon's throwing force divisor. -2019-02-08: - Datraen: - - bugfix: Fixes incorrect access on hangar maintenance doors. -2019-02-09: - Anton-Kr: - - rscadd: Adds Vox ship and base to the game. It's join-able as a submap. -2019-02-10: - SierraKomodo: - - maptweak: Added rechargers to merchant shuttle and merchant base - - maptweak: Connected Flight Control disposal bin to pipe network - - maptweak: Added borg rechargers to communal brig and merchant's station - comma: - - tweak: Uplink gun selection for traitors was scaled down. Assault rifles and similary - big guns are gone, only pistol-likes available now. - - tweak: Wall of text about clothing items property is moved to a codex entry for - the item, instead of being shown on every examine. - sabiram: - - maptweak: The king of goats in the hydrobase planetary ruin has been retired. -2019-02-12: - Chinsky: - - rscadd: CPR changes. It now will help with blood circulation even if it fails - to restart the heart, so there's a reason to do it (especially on higher levels). - Fake circulation lasts 20 seconds and is better with Anatomy/Medicine skill - (highest). - - rscadd: Can now put IV bags etc on rollerbeds and use them as IV stands for buckled - people. Click with beaker to add it. Click with empty hand on empty (no buckled - guy) bed to remove it. Drag bed on people to hook/unhook. - - rscdel: Damaged livers no longer generate ammonia. It was creating self-perpetuating - damage which wasn't intended, it was for diagnostic memes. - - rscadd: Adds auto-CPR device. Goes into victim's suit slot. It won't do mouth-to-mouth - or resusticate them, but it will help with circulation. Needs Basic Anatomy - and Medicine skills to use, or risk rib fracture. Basically continuously applies - circulation part of CPR. Mapped bunch of them in medbay - - tweak: Sleepers now have 10x stasis option. Their power usage now also scales - with stasis factor greatly, 500 per factor, so ~5000 W at 10x - - rscadd: Guns suck now. - - tweak: When you have a gun in activa hand, you're considered to be 'aiming'. Moving - or changing active hand resets timer. - - tweak: Aiming gives bonuses to accuracy, longer you aim, capped by accuracy of - the gun - so no point in aiming longer than few secs with pistol, but with sniper - rifle, take your time. - - tweak: If you haven't stood still for at least a second, you get penalties based - on size of your gun. Pistols are almost not affected, but rifles are affected - greatly. - - tweak: Accuracy falloff differs for different calibers. Pistol rounds are best - used 4 tiles or closer, rifles can be used from any range without ok results. - Lasers mirror that setup, with higher range. - - tweak: Overall, pistols are now useless at range, but don't suffer much if you - move around or change hand to do something else. - - tweak: Rifles are oppsite, can hit if you aim even from other end of screen, but - if you move around, you're not going to hit shit. - - tweak: Moving around (not towards gun) will make you harder to hit now. Yakkety - sax away. - - rscadd: Added a small bells ringing sound playing when you regain consciousness. - Will only play if player is considered AFK (currently 5 minutes without activity) - Spookerton: - - tweak: Mercenary and Raider game modes no longer do early round-end votes when - the antagonists leave or die. - afterthought2: - - rscdel: Guns and armor are no longer available in personal command lockers. - - tweak: The bridge sidearms closet now also has three sets of command armor. -2019-02-14: - Anton-Kr: - - bugfix: Some misc things fixed on Vox ship. - RyanSmake: - - bugfix: Holodeck windoors now actually face the right direction. - SierraKomodo: - - maptweak: Added Pilot Voidsuit to bridge deck's EVA Storage that Bridge Officers - and Senior Enlisted Advisors can access. - - maptweak: Re-arranged the bridge deck's EVA storage. - Spookerton: - - tweak: IPV Fortuna can now fly on the overmap without being doomed. - Textor: - - maptweak: The battery backup PSU in telecomms has been moved after many Chief - Engineers and Senior Engineers have complained about its disruptive location. - The battery backup PSU also now recharges off of the deck 3 subgrid rather than - making a loopback off of the telecomms subgrid. Grey outlines have been moved - around in telecomms to be more consistent with the rest of telecomms' appearance. - - tweak: All telecomms machinery and computers have been updated to use NanoUI style - interfaces, bringing them in line with the majority of UI interfaces on the - Torch. -2019-02-15: - Chinsky: - - tweak: Accidental gun discharge chances upped, and now it can happen when aggressively - unholstering (hurt intent). Chance is now 20% at unskilled, 5% at Basic and - 1% at Trained. - - tweak: When unholstering or trying to fire a safetied gun on hurt intent, there's - now a chance you automatically unsafety it. Chance is 0% at unskilled, 25% at - Basic and 50% at Trained, guaranteed above. - RyanSmake: - - rscadd: You can now interact with emergency shutters through ladders and open - spaces. - SierraKomodo: - - maptweak: Added air and fire alarms to the deck 4 hanger catwalks. -2019-02-18: - Chinsky: - - rscadd: Crypods now have more immulsion. When joining round you will spawn inside - a pod, asleep for 1-5 seconds. Roleplay accordingly. - - tweak: Can now place auto-cpr device on people by clicking on them with it on - help intent. - afterthought2: - - experiment: No stasis bags are available on spawn on the Torch, except one on - the Charon. - - tweak: Stasis bags can now be printed from the protolathe. - - tweak: Stasis bags are now more expensive when ordered from supply. - - tweak: Rollerbeds can now be placed in backpacks. - comma: - - tweak: Autopsy scanner can now be used on severed organs to get some information. - No trace chems or time of death though, need body for that. -2019-02-19: - afterthought2: - - tweak: Modular consoles will no longer have access to NTnet when off-station. - comma: - - rscadd: Mountains can now spawn on any type of planet -2019-02-20: - Chinsky: - - rscadd: Added rescue bags. Work like bodybags, but provide atmosphere from attached - gas tank. Will set internal atmosphere of the bag to tank's release pressure. - Use screwdriver to remove tank. -2019-02-21: - Anticept: - - tweak: XO now has CSO access. - MistakeNot4892: - - rscadd: Added a drug called Three Eye to the contraband drug crate. - - rscadd: Added a chemical agent for crystallizing people. Good for repairing golems. - - rscadd: Breaking a soulstone into shards and stabbing them into a wizard (or firing - a null rod out of a pneumo cannon hard enough to embed it) will now prevent - the wizard from casting spells. - - rscadd: Added supporting code for psionics. - sabiram: - - rscadd: Added chevaux de frise, or spiky barriers. They're constructed by first - building a barricade of any valid material, and then attaching rods of any material - to the barricade. It will damage anyone who walks into it. -2019-02-23: - BlueNexus: - - rscadd: Added Venaxilin, a powerful antivenom made with spider venom. - - rscadd: Added leporazine variants, which are made by either heating up or cooling - down leporazine. Heating it up makes a chem that raises body temperature, cooling - it down makes one that lowers it. - Textor: - - rscadd: Adds new global preference to opt into having your ckey displayed in the - credits. This is set to hide your ckey by default. - - tweak: Adds additional snark to the end of the credits and some new randomly generated - title possibilities. - - tweak: Changes some awkward wording in play global sounds command, makes the change - end credits song command not suck anymore. - afterthought2: - - bugfix: The merchant can now use the merchant program again. - - tweak: The merchant program cannot be downloaded on NTnet. - comma: - - rscdel: Stasis bags are no longer orderable from cargo. -2019-02-24: - RyanSmake: - - bugfix: Shuttles no longer steal asteroid tiles when undocking. -2019-02-25: - Spookerton: - - tweak: Medals can be stored in wallets. - afirpo: - - bugfix: viruses weren't correctly cleaned up from the human-like mobs' bloodstream. - afterthought2: - - tweak: Door access has been substantially reworked. Please report any anomalies. -2019-02-26: - Piccione/Textor: - - rscadd: Adds new duty gloves for utility uniforms. They are available in some - lockers and via the uniform vendor. All gloves offer some protection, and engineering - gloves are also insulated. - SierraKomodo: - - bugfix: Officer's Mess doors will have the correct access flags again. - afterthought2: - - tweak: Arbitrary shuttles can no longer land at restricted landmarks. - xales: - - tweak: Adherent eyes have been upgraded. They no longer need a welding mask to - not go blind. As a side effect, they also cannot be flashed. -2019-02-27: - Chinsky: - - rscdel: Removes Medical Contractor job. It's merged into Physician/Corpsman, number - of slots for those bumped. GAS can join Corpsman only. - - rscadd: Physician and Corpsman jobs can now be joined with Contractor rank. - - rscadd: Engineering Contractor and Supply Assistant were merged into Engineer - and Deck Technician respectively, pick Civilian branch to join as contractor - SierraKomodo: - - maptweak: The Officer's Mess booze-o-mat is now accessible by officers. If you - can open the door, you can vend things. -2019-02-28: - SierraKomodo: - - bugfix: Senior Researcher now has standard sol gov crew access (Notably, access - to the bridge foyer and firing range), maintenance access, and Petrov security - checkpoint access. - - bugfix: Fixed access flags for bridge foyer, charon guppy and aquila airlocks, - communal brig, and supply office windoor. - - bugfix: Counselors can now access medical storage again - - bugfix: Bridge EVA storage windoors have the proper access restrictions again - mikomyazaki: - - bugfix: Swapped the names around on the D3 Ladders/Firing Range Hallway Cameras. - mikomyazaki2: - - bugfix: Removed duplicate items from B-Deck - Captain's Flask and Nanomed Vendor. - - rscadd: Geiger counter now makes a sound when radiation levels are high enough. - Volume increases with increased radiation level. - - soundadd: Added a geiger counter sound. - - bugfix: Fixes the case where the supply pack contents will be blank when ordering - live cargo. - - rscdel: MULE is no longer orderable, since it does not work on the Torch. -2019-03-01: - mikomyazaki2: - - rscadd: QOL Change - Adds an extra Supply & Denied Stamp to the Deck Tech lockers. -2019-03-02: - MistakeNot4892: - - tweak: Removing organs from a robotic bodypart (ie. FBP or IPC) will now use Devices - skill. - - tweak: A longstanding bug with amputated/severed limbs has been fixed and new - limbs will once again require reattachment with a hemostat after replacement. - - tweak: Surgery will now present a list of possible surgeries (if skilled enough) - rather than using a priority system. - SierraKomodo: - - tweak: Renamed NSV Petrov area tags to SRV Petrov. - - tweak: Soviet Cola has been renamed to TerraCola. - mikomyazaki2: - - bugfix: Corpsmen can use the Paramedic alt-title again. -2019-03-03: - Spookerton: - - tweak: Updated Workplace Liason and LPA job descriptions and access to match their - current role. - mikomyazaki2: - - bugfix: Game no longer assumes genders when self-examining as a neuter/plural. - - bugfix: IC Printers now take materials correctly when cloning. -2019-03-04: - Chinsky: - - rscadd: Examining things now shows message about it to people in 4 tile range. - If you don't wanna see it, you can disable it with a preference. - MistakeNot4892: - - tweak: Facial repair surgery is now a single step conducted with a hemostat after - making an incision. - - tweak: Skull repair is now identical to regular bone repair. - mikomyazaki: - - bugfix: Extends the restriction on some types of prosthetics to cover the entire - set of human subspecies instead of just human-basic. - sabiram: - - tweak: Adherents can no longer slip if they're floating. - - rscadd: Added two new colours to the adherent colour selection. - - tweak: The job slot formerly known as Corpsman is now Medical Technician by default, - with the former name as an alt-title. - - tweak: The job slot formerly known as Corpsman Trainee is now Trainee Medical - Technician by default, with the former name as an alt-title. -2019-03-05: - Crystalnole: - - bugfix: Securing microwaves gives the right securing verbs - Spookerton: - - tweak: Bridge officer lockers are harder to get into. - afterthought2: - - bugfix: Surgery is again possible. - - tweak: Makes cryo bags much more expensive in the protolathe, and require higher - tech levels. - mikomyazaki: - - bugfix: Fixes an error introduced through resolving a merge conflict incorrectly - with my earlier prosthetics restrictions PR. - sabiram: - - maptweak: The second deck hallway leading from the stairwell and elevators to - the engineering foyer has been reconstructed in the style of the typical hallways - on the ship. - - rscdel: Engineering duty gloves are no longer insulated. -2019-03-06: - CrystalNole: - - bugfix: Fixes invisible Cyborg materials - mikomyazaki: - - bugfix: Fixes an issue where full fire extinguishers would report an incorrect - message when you tried to fill them further. -2019-03-07: - Higgin: - - rscadd: Added a moderately weak TTV to the traitor uplink. 40 TC cost. - MistakeNot4892: - - tweak: Species who can eat mobs or items will now get an action button to puke - it back up. - - rscdel: Removed Regurgitate verb in favour of above. - SierraKomodo: - - bugfix: Security lobby door is now accessible by Sol Gov crew - - bugfix: Bridge safe room is now all-access - - bugfix: Merchant shuttle doors and windoors now require merchant access - - maptweak: Bridge access hallways now have their own area tags - Bridge Port Access - Hallway and Bridge Starboard Access Hallway - Textor: - - bugfix: You are able to construct glass and material airlocks again. - - bugfix: Airlocks that have their control circuits removed will remember their - paint jobs after the circuit is re-inserted. - - tweak: Atmospheric tanks now hold more CO2, H2, and O2 in the tanks due to increased - usage on board. - - maptweak: Camera networks have been adjusted to reflect reality. The lounge is - now located in the deck 4 camera network, as is the pathfinder's office camera. - The deck 1 fore hallway cameras have been renamed to reflect their location - better. The Adherent room now has a camera. - - maptweak: Adds deck 5 signage and warning signs to the escape pod launch areas - on deck 4, in addition to more escape pod direction signs to make sure confused - passengers know where to go to find pods on decks 2 and 4, and the deck 2 stairwell - is now more well-lit. - - maptweak: The R-UST now has an atmos control console in the control room so engineers - can adjust the injector port for gas. Don't forget to refresh the input. - - maptweak: New emergency shutters have been added to deck 4 to limit the decompression - caused by escape pod launch procedures. - - maptweak: At the direction of the Expeditionary Command Fire Marshal, there are - now more fire closets on board the Torch. - - maptweak: All the nacelles now have phoron windows installed on half-walls to - conform with the aesthetic on the rest of the ship. - - rscadd: After evaluating flaws in evacuation procedures, all escape pod outer - hatches now have a manual bolt override that can be manipulated with a wrench - after opening the cover in the event that the power is offline. As a reminder, - the outer hatch must be closed and the bolts re-engaged before the pod will - launch. - - tweak: Code Delta announcement no longer specifically mentions self destruct due - to rare cases in which it is engaged without the destruct mechanism being online. - Code Delta procedures have not changed. - mikomyazaki: - - rscadd: Adds Cultural Exchange patch to xenowear loadout for EC Unathi, Skrell - and IPCs. - - imageadd: Adds images for the Cultural Exchange patch. -2019-03-08: - SierraKomodo: - - maptweak: Antag shuttles, merchant shuttle, and admin shuttles are now shielded - against rad and ion storms. -2019-03-09: - MistakeNot4892: - - rscadd: Adamantine golem extracts now contain crystalizing agent. - - rscadd: Crystalizing agent can be used to produce resin globules that work like - medpacks for adherent and golems. - - tweak: Golems can now be operated on by substituting a surgical drill for a scalpel, - and resin packs for bone gel/fixovein/medpacks/cautery. - - tweak: Vox are now capable of gaining nutrition from wood pulp, napalm, glue and - various other inedible reagents. - - tweak: Vox are now capable of gaining nutrition from various materials and processing - others into a usable form with their stomach. - - tweak: Vox now require a hindtongue to speak Vox-Pidgin. - afirpo: - - rscadd: now it is possible to export virus dishes to earn credits (supply points). - - bugfix: now Toxicity related to a virus dish (Incubator) works again. - - tweak: checking for virus dishes already exported in the past or not analyzed - at all (those MUST NOT be exported!). - afterthought2: - - tweak: The IC printer can now take any materials as inputs. - - bugfix: Circuits properly init their steel cost now; this means that some are - much more expensive than previously. - - tweak: 'The TP circuit now costs more and rarer materials, and has a very high - complexity: you''re going to need the medium assembly or larger to house it.' - - tweak: The TP circuit will not function properly if the slaved computer is on - a z level not connected to its location. - mikomyazaki: - - bugfix: Fixes an issue with prosthetics selection for IPCs due to previous changes - for allowed_bodytypes on prosthetics. - - bugfix: Condiment containers can no longer be stored inside food. -2019-03-10: - Anticept: - - tweak: Atmos pumps have all had their power limits increased considerably. This - means atmospherics will operate faster, but at the cost of much more power at - peak performance. In addition, vents and scrubbers will operate faster when - stressed, but they too will cause a tremendous power spike in a ship wide atmos - contamination emergency where a huge number of scrubbers have to work hard (from - a badly clogged waste line, for example). A flooded deck can also overload a - deck substation, so bypass switching may be required in such cases. Beware of - extreme scrubber overload! - - tweak: Filter pressure limits raised to 15,000 kpa. They are still not powerful - devices when pumping from low to high pressures. You should put pumps around - them if you intend them to work quickly with moving pressures in a non-passive - manner. - FTangSteve: - - maptweak: deck 2 hallway by janitorial now dimmer and with no cameras - SierraKomodo: - - bugfix: Medical is now restricted access again. - SierraKomodo & Anticept: - - tweak: Flight manifest input box no longer shows the rank to make it easier to - find personel in the list. The report itself will show the rank. - afterthought2: - - bugfix: Disassembling research machines should now work. Upgrading circuit printers - should be more consistent. - sabiram: - - tweak: Most castes of giant spider will generally do more damage, and may have - more health. -2019-03-11: - SierraKomodo: - - tweak: You can no longer use headsets while sedated or sleepy-penned due to paralysis - making you unable to use your hands. - afirpo: - - bugfix: now the Core Sampler (Xenoarcheologist and perhaps Anomalist related) - works again - the sample is spitted out from its sample \ evidence bag. - afterthought2: - - rscadd: Adds the proxy command to terminals. This lets you obfuscate your nid - by routing through another computer. Requires access_network and experienced - skill. Generates local logs on the machine you route through, stored as a file - on the hard drive. -2019-03-12: - SierraKomodo: - - maptweak: Added fire shutters to the cargo warehouse shutters - Spookerton: - - bugfix: Inappropriate crew and passengers no longer have supply program admin - rights. - afterthought2: - - tweak: Petrov and research access can now only be granted by the XO and CO. You - can now build/adjust access on Petrov doors. - mikomyazaki: - - bugfix: Booze-o-mat contained a tea master item rather than actual actual tea. - Made it contain black tea instead. - - tweak: Robotics R&D consoles can no longer link with destructive analyzers. - - tweak: Made the Geiger Counter sound falloff and range larger. -2019-03-13: - Devildabeast: - - rscadd: After numerous flight tests and simulations, Adherents have begun to receive - piloting licenses and can now serve aboard the SEV Torch as Shuttle Pilots. - sabiram: - - maptweak: The firing range on deck 3 has been removed due to consistently causing - crashes. -2019-03-14: - Datraen: - - rscadd: Adds the Xilvuxix, a Multi-Z Shuttle capable of overmap travel and it's - own shuttle (capable of overmap travel as well) - Higgin: - - tweak: Traitor TTVs now share power with merc TTVs. They were underwhelming for - 40 TC cost. - SierraKomodo: - - bugfix: Windoors will now ignore walls when determining autoset access. This should - fix hardsuit windoors. - afterthought2: - - tweak: Unathi brute mod for the subspecies has been decreased a lot. - - tweak: Unathi healing can only be toggled once every two minutes. It cannot be - toggled within a minute of being hit in combat. - - tweak: Unathi limb and organ regeneration is only possible when the heal can be - toggled. - - tweak: When an unathi is at extreme levels of hunger, it no longer receives healing - from the passive heal ability. Instead, it takes internal organ damage, converting - it into nutrition. This is inefficient, so if the healing ability is left on, - it will die quickly. - - tweak: Unathi passive healing is less nutrition-efficient now. -2019-03-15: - SierraKomodo: - - tweak: Prone mobs can no longer buckle other mobs to beds/chairs. This prevents - crawling bucklespam during combat. - mikomyazaki: - - bugfix: Changes pin to an in-type pin on the reagent storage circuits. - - bugfix: Disassembling sleepers with an occupant will now eject the occupant. -2019-03-16: - Chinsky: - - rscadd: Coffins are made with steel now. Can still make wooden one with wood if - needed. - Datraen: - - bugfix: Fixes prosthetics not being selected by subspecies. - SierraKomodo: - - maptweak: The Deck Chief's office now has a guest pass terminal. -2019-03-17: - MistakeNot4892: - - rscdel: The flying pizza sprites are no longer available to crew robot modules. - - rscadd: A flying robot frame can now be constructed as an alternative to standard - robot. It uses the same arms, chest and head as the regular robot, but needs - the 'flyer' frame. - - rscadd: Flying robot frames produce flying robots, which use the flying pizza - sprites and can pass over tables. They have a selection of unique modules to - pick from and are generally faster but more fragile. -2019-03-18: - SierraKomodo: - - bugfix: Chairs and stools now have the correct materials when constructed and - deconstructed. - sabiram: - - rscadd: Added bamboo seeds to the vendors. Their produce can be chopped up into - wood. - - tweak: You can place wrenches onto tables if you're on help intent. Use harm intent - if you want to disassemble them. - - tweak: Halved the number of seeds stored in machines from 30 of each type to 15. - Use the seed extractor if you need more. -2019-03-20: - MistakeNot4892: - - rscadd: Added a humanoid species for the Vox Armalis, representing a larger, slower - voxform. It is not currently accessible outside of adminbus. - - rscdel: Removed armalis simple_animal and icon. - - tweak: Vox now have their own damage masks, blood masks and damage overlays. - - tweak: Vox wizard spell will now transform into a lesser version of the giant - space parrot. - sabiram: - - bugfix: Fixes IPCs becoming blind after being revived in surgery. - - bugfix: IPCs are no longer immune to sources of eye damage such as flashes and - welders. - zaredman: - - imageadd: Adds OCIE logo to be drawn onto official paperwork. -2019-03-21: - Hubblenaut: - - maptweak: Adds binoculars, prybar and a station bounced radio to the CoS Office. - RyanSmake: - - bugfix: Touching anomalies now works properly. -2019-03-22: - Devildabeast: - - tweak: Large mobs and bigger can no longer enter exosuits. - Hubblenaut: - - maptweak: Removes the disposal bin from the brig. - SierraKomodo: - - tweak: Synaptizine now overdoses at 5u instead of 30u. - sabiram: - - bugfix: Fixes issues with assigning and deleting accesses to mechs. -2019-03-23: - Devildabeast: - - rscdel: Due to numerous concessions to mental health procedure and human rights - complaints, the Sol Central Government will no longer stock straight jackets - on-board their vessels. - SierraKomodo: - - tweak: Characters that have ghosted (NOT aghosted) will be immediately flushed - when placed into cryo. - Spookerton: - - tweak: Viruses no longer infinitely increase the duration of effects like deafness - and drowsiness. - sabiram: - - tweak: Butchering simple animals now relies on your cooking skill, requires a - butcher's cleaver, and must be done on a table. - - tweak: Added cleavers to the dinnerware vendors. - - rscadd: Wood rendered from the produce of the bamboo plant will now be the bamboo - material. - - balance: Blobs will now spread and attack diagonally. - - balance: Blob attacks now take into account armour. - - tweak: Blob attack damage now depends on the individual blob segment attacking - you. The core defends itself the most vigorously. - - tweak: Blobs now attack with a random damage type. - - rscadd: You can now attempt to remove a sample from blobs by attacking it with - wire cutters. The regular blobs produce fairly powerful weapons in various damage - types, and the nuclei produce cores which can be disassembled for research points. - - tweak: Cigarettes and the like can now be lit by more hot objects such as plasma - cutters, and some tendrils snipped from the blob. -2019-03-24: - Spookerton: - - bugfix: Robot organs in meat bodies can be repaired with nanopaste in surgery. -2019-03-25: - Datraen: - - bugfix: Fixed Skrell Recon channel; Skrell ship holopad, spawns not operating - properly. - - bugfix: Filled the first-aid kits on the Skrell ship by making them the proper - subtype. - - maptweak: Fixed thrust, external access, and rearranged some parts of the Skrellian - vessel. - - tweak: Changed Skrellian Suits to voidsuit subtypes, allows stacking of helmet/magboots - inside of it. - - tweak: Lowered slowdown on the skrellian rifle. - SierraKomodo: - - maptweak: Added carp spawn zones to Torch bridge deck, Bearcat, and Unishi for - overmap events. - - maptweak: Moved a Torch deck 2 carp spawn from outside the reactor area to avoid - carp spawning inside the shields. - - tweak: Deck Chiefs now have access to Exploration comms. - Spookerton: - - tweak: Traitor Binary Gas Bombs are weaker, but also cheaper. - sabiram: - - rscadd: Added folding knives, replacing boot knives. - - rscadd: Added two types of folding knife to the loadout. -2019-03-26: - MrKicker: - - tweak: Players can pull items across Z-Levels - SierraKomodo: - - maptweak: Various areas on the SEV Torch have been renamed to be more descriptive - of their purpose/location. - - tweak: Typing indicator bubbles no longer appear for hidden mobs (Cloaked or inside - objects such as lockers). Indicators after you say or emote still appear. - ajkrupka: - - bugfix: Fixed an oversight to make armbands and webbing hide when jumpsuits are - rolled down. - sabiram: - - rscadd: Screwdrivers, wirecutters and all types of pry bar now come in a variety - of new colours. - - balance: Reduced armour values for the breacher and heavy mercenary rigs. -2019-03-27: - mikomyazaki: - - rscdel: Removes fax machine from Pilot's Office. - - tweak: Merges plastic flaps and airtight plastic flaps into one item. Can change - airtight setting with screwdriver, deconstruct now with crowbar. Can now construct - airtight flaps. - sabiram: - - tweak: Added colour selection to the suit vest and waistcoat in the loadout. -2019-03-28: - Datraen: - - tweak: Changes renegade spawn list to allow for any bag to conceal a spawned weapon. - - bugfix: Gyrojet no longer drops casings, now accepts magazines properly. - SierraKomodo: - - maptweak: Unishi and Bearcat now have long-range holopads. - sabiram: - - tweak: Crawlers who are weakened (forced down) will crawl slower. Being confused - will now additionally reduce their crawl speed. - - tweak: You can no longer attack with harm intent while incapacitated. - - tweak: Being incapacitated in any way will drastically reduce your melee accuracy. -2019-03-29: - sabiram: - - tweak: All knives have been unified under one type. Please report any irregularities. - - rscadd: 'Added an additional folding knife to the loadout: ''tactical folding - knife''' - - rscdel: Butterfly knives and switchblades can no longer backstab, temporarily - at least. -2019-03-30: - SierraKomodo: - - tweak: Intercom sprites now reflect the on/off status of microphone and speaker - switches. -2019-04-01: - Chinsky: - - bugfix: Torch is now facing upper side of the map. - SierraKomodo: - - bugfix: Bluespace River away site no longer spawns with a teleporter beacon. -2019-04-02: - Atebite: - - bugfix: Fixed weapon firing mechanisms not being able to fire in cardinal directions - CSCMe: - - rscadd: Adds extracting a specific amount of slime cores as a departmental goal - for science - Loaf && Banditoz: - - rscadd: 'Added four flying robot modules: repair, cultivator, surveyor, and forensics.' - SierraKomodo: - - tweak: There can now be 3 bridge officers in a round. - - maptweak: Playable colony now has universal enzymes in the freezer - - tweak: Rogue maintenance drones now spawn in separate smaller groups instead of - one massive blob. Total number of drones spawned per event is unchanged. - Spookerton: - - bugfix: Being cured of a virus now correctly adds its antigens where appropriate. - afterthought2: - - tweak: Some tweaks have been made to job spawn code. Beware of any anomalies. - ghostsheet: - - rscadd: Prospector locker will now always spawn with a duffle bag - mikomyazaki: - - bugfix: Moves the engine ejection door controls inside the box with the eject - button. - sabiram: - - tweak: Admins will now be informed why antagonist autospawn fails, instead of - printing to debug logs. -2019-04-04: - Banditoz: - - tweak: Flying mobs are now immune to quicksand. - Higgin: - - tweak: Push-time now depends on the difference of CQC skill between the two parties. - - tweak: At equal skill levels, pushing has a very short duration. - - tweak: Grabbing a prone person is no longer automatically an upgraded grab unless - the victim is stunned, unconscious, or on help intent. - - tweak: CQC costs more. Check your skill loadouts! - - tweak: Increased global miss chances to head, feet, and legs. - - tweak: Additionally reduced knockdown chances. - - tweak: Made organ damage much less likely before ribs/skull are broken. - - tweak: Increased likelihood of organ damage after encasing bones are broken - - tweak: Increased damage to brain when dealt and probability of brain damage from - damage to the head. -2019-04-05: - Cakey: - - maptweak: Added wooden walls to some areas of the Torch. - - tweak: AI holopads have been renamed to holopads. - - tweak: Removed the long range holopad's Z-range. - Cronac: - - tweak: Adds egg cartons as an item the biogenerator can produce. - - bugfix: Adds missing biohoods to CSO locker. - Higgin: - - tweak: Chances of collapsing from limb damage can now be mitigated by walking - and moving along walls/other objects you could reasonably use to prop yourself - up. - - tweak: This mitigation only works if at least one of your legs fully works. - - tweak: Stools and beds are collapse-exempt. IPCs at funerals rejoice. - - tweak: The chance of collapsing when not doing these things to mitigate it is - now significantly higher to compensate. - Spookerton: - - tweak: Wallets can hold ribbons, armor tags, and patches. - - tweak: Ribbons, armor tags, and patches are now tiny instead of small. - afterthought2: - - admin: A new admin tool, Toggle Harddelete Queue, has been added to the Secrets - panel, under Debug. Do not use this unless you know what you're doing. - ghostsheet: - - rscadd: Carp shoal map hazard now works for overmap shuttles such as the Charon, - Aquila and Guppy. - - bugfix: Fire alarm can now be constructed properly -2019-04-06: - Banditoz: - - tweak: Flying mobs are now immune to lava. - Cronac: - - bugfix: Fixes morgue trays and cremation trays displaying above bodies and bodybags. - Spookerton: - - bugfix: Refilling a fire extinguisher from a tank no longer tells you the extinguisher - is full when the tank is empty. - WatermelonsEverywhere: - - rscadd: Added a spare explorer equipment crate to Supply. -2019-04-07: - Cakey: - - tweak: Increased explorer job slots from 3 to 5. - - tweak: Lowered prospector job slots from 4 to 2. - Higgin: - - tweak: Prevents material weapons from taking damage on parry except against other - material weapons. - - tweak: Increases material weapon health. - - tweak: Reduces crowbar and toolbox accuracy penalties. - - rscadd: Adds an inferior, expensive, steel machete to the autolathe. - afterthought2: - - tweak: Acids are generally weaker now. - ghostsheet: - - rscadd: Ore boxes can now be ordered in supply -2019-04-08: - Chinsky: - - tweak: Charon and Guppy now only need Basic skill for flying on overmap without - random turns. -2019-04-09: - ChaosAlpha: - - bugfix: Drones spawn with modules once again. - - bugfix: All robots/drones material synthesizers should be functional once again. - - bugfix: AI cores should once again be constructible. - - bugfix: Surveyor bioreactor doesn't runtime and actually gives a reasonable amount - of power now. - - tweak: Flying repair robot module comes with slightly nerfed synthesizers. - - tweak: When remote controlling a maintenance drone, the AI can now use its radio - as normal. - - tweak: Cultivator module comes with a robot harvester. - Cronac: - - bugfix: Targeted healing spells such as those used by wizards should now properly - heal synthetics. - - rscadd: Adds the ability to synthesize crystallizing agent via chemistry with - polytrinic acid, tungsten, and silicon (and a bit of heat). - - tweak: Rogue drones now leave cleanable corpses when killed. - - bugfix: Monkeys are no longer ripping out their augments and throwing them across - the room. - - tweak: Augments now show up on medical scanners and related admin scans. - SierraKomodo: - - bugfix: Glowing slime extracts now create light. - - bugfix: Lit flares now process fuel and shut off when out of fuel again. - mikomyazaki: - - rscadd: Upgrading a sleeper now reduces power requirements, unlocks new chemicals, - and increases pump rate. - - rscadd: Adds emag effects to sleeper. - xales: - - tweak: Antag selection now defaults to NONE. You may need to update your antag - prefs. - zaredman: - - maptweak: Moves Security's Deck 1 checkpoint to the old Research Checkpoint. Decommissions - old Deck 1 Checkpoint. Adds lockdown shutters by ladderwell. - - maptweak: Adds 2 prisoner lockers for Communal. Also changes newscasters in the - Brig to the SEC variant where appropriate. - - maptweak: SEC-VEND now has new stock. More cuffs, more evidence bags, and now - carries pepper spray and holowarrant projectors. -2019-04-10: - Unknown: - - rscadd: Added a verb to change lobby track playing - Play Different Lobby Track - in OOC tab. -2019-04-11: - BiscuitCookie: - - maptweak: Renamed the HoP Office Privacy Shutters to XO Office Privacy Shutters - - bugfix: Removed objects outside the ship that didn't belong there. - Cronac: - - bugfix: A damaged aorta can once again be repaired while the chest cavity is open. -2019-04-12: - Randall: - - maptweak: The Supply Office and Supply Warehouse shutters now require Supply access - from the outside. -2019-04-13: - Chinsky: - - rscadd: Added speed indication to helm console. Green means 'slow', red means - 'too fast'. - - rscadd: Pilotable shuttles now can pass through meteor fields safely. Keep at - green speed and you'll make it. Need Trained skill for Charon/Aquila and Basic - for GUP. At Master/Experienced can do this at normal speed too. - - tweak: Torch now accelerates roughly 2x slower - Cronac: - - bugfix: The Adherent mineral bath will no longer kill Adherent users by deleting - their tendril junction. - - tweak: The Adherent mineral bath now removed embedded objects like shrapnel, but - will not remove implants such as tracking implants etc. - MikoMyazaki: - - rscadd: Titanium and its ore Rutile are now available via mining, allowing repair - of shuttles and the ship exterior. - Spookerton: - - bugfix: Lava turfs no longer incorrectly reignite and burn you every process forever. - mikomyazaki: - - tweak: Time police fixed a couple of items that weren't adjusted when we travelled - back 300 years. - myazaki: - - bugfix: Corrects piloting skill description to reflect recent change to basic - training with Charon and GUP movement. - zaredman: - - tweak: Security Equipment supply order replaced with Master at Arms supply order. - - tweak: Auto-Compressor and Rescue Bags can now be ordered via Supply. -2019-04-14: - Aurum22: - - bugfix: Fixes various layering issues with stasis cages, honey extractors, and - reagent dispensers (chemistry and bar varieties). - Cronac: - - bugfix: Cryogenic tubes will no longer heal anything without containing a drug. - - tweak: Clonexadone and Cryoxadone have been buffed due to cryogenic tube changes. - - rscadd: Adds nanite fluid, which is like cryoxadone for robotic parts. It can - be made with cryoxadone, space lube, and aluminum chilled down to -25C. Requires - 5 phoron as a catalyst. This is NOT safe to use on its own and should be used - on conjunction with cryoxadone or clonexadone. - mikomyazaki: - - bugfix: Floor lights can now be dismantled with a wrench. -2019-04-15: - CarefulLilCassie: - - rscadd: Adds high heels. - - tweak: Changes some items in the civilian uniform vendor to match the military - ones and utilises some more categories for cleaner usage. -2019-04-17: - Atebite: - - rscadd: Three new random events have been added - - tweak: The T-ray scanner can now inspect disposal pipes for damage - Chinsky: - - maptweak: Charon laoyout changed, it now has a cargo bay that can be cycled to - outside air. - Crackers5: - - rscdel: Removes some existing body markings - - rscdel: Removes species restriction from tattoos - - rscadd: Splits up existing body markings/tattoos to be selectable per limb instead - of full body. - Roaper: - - rscdel: Removed old contraband poster that depicted a spess cat. Also commented - out it in the code. - mikomyazaki: - - bugfix: Smartfridge ID Scan hack now allows access. -2019-04-18: - mikomyazaki: - - bugfix: Allows setting stasis to x10 on sleepers. - zaredman: - - tweak: Medical max staff numbers decreased to a maximum of 2 Physicians, 3 Medics, - and 1 Trainee Medic. -2019-04-19: - GooeyChickenman: - - bugfix: Defibrillators no longer appear empty on spawn. - mikomyazaki: - - bugfix: Voice changer now works properly while using an active camouflage module. - xales: - - tweak: Adherent can now play as Prospector -2019-04-20: - Chinsky: - - rscadd: 'Most handheld scanners (plant, health, gas, mass spectrometer, reagent, - xenobio, price) now store last scan result. Click inhand to see it. tweak : - Mass spectrometers now can be used directly on open reagent containers or syringes - to take sample. Old behaviour is still supported too.' - - rscadd: 'Price scanners keep adding scan results instead of overwriting them. - You can clear buffer in scan result view window. tweak : Tweaked health analyzer - colorings a bit. Now not coloring things like section headers, coloring more - deviations from norm (blood oxygenation / pulse)' - Flying_loulou: - - tweak: Blood bags are now small if containing a reaggent, and tiny if empty. -2019-04-23: - Flying_loulou: - - rscadd: Adds a new command voidsuit type for bridge officers and the SEA. - - maptweak: Replaces the pilot voidsuit in the bridge EVA storage by the command - voidsuit. - GooeyChickenman: - - tweak: More common medicines and reagents will appear on medical scanners. - Higgin: - - rscadd: Cult members can now make stun talismans again. Requires a tome, paper, - and a substantial amount of blood. - - rscadd: Ported obscure and reveal runes back into cult. Obscure runes make all - runes around them invisible, reveal runes reveal them. Runes cannot be used - while invisible. -2019-04-24: - Datraen: - - bugfix: Ion Thrusters now respect on state and thrust modifier when calculating - thrust -2019-04-25: - Datraen: - - rscadd: Adds lighting, overlaying to energy melee weapons. - Draxtheros: - - rscadd: Robots will now announce via chatlog when they enter an emergency power - state. - FTangSteve: - - bugfix: ingested reagents are now handled properly - - tweak: pulse impacting reagents now have stronger effects when compounded - - tweak: stomach volume is now 65 units instead of 30 - - tweak: vomiting when stomach is overfull now based on chance, higher with the - more you're over the limit - GooeyChickenman: - - bugfix: Ryetalyn will now fix a characters appearance after resetting genes. - Hubblenaut: - - bugfix: Fixes syndicate ID cards not being examinable. - Lilja: - - bugfix: Fixed sheet materials stacking bug where icon wasn't updating. - - tweak: Recolored & adjusted all sheet material icons to have more contrast. - - rscadd: New aluminium sprite, new plastic sprite, new glass sprite, new reinforced - glass sprite, new diamond sprite, new wood sprite, new uranium sprite, new rod - sprites, new cable wire sprites, new deuterium and tritium sprites. - - rscadd: Sheet material stacks now change appearance when they have reached maximum - stack. - Randall: - - maptweak: The auxiliary sanitation closet now holds a spare mop. - Spookerton: - - tweak: Optical Meson Scanner glasses only protect from supermatter hallucinations - when turned on. - ghostsheet: - - rscadd: Hardsuit overlay icons will now change depending on what module is selected - - tweak: Hardsuit drill mount now functions like a normal drill, being able to mine - multiple tiles at once - - tweak: Hardsuit drill mount energy usage has increase to a non insignificant amount - - rscadd: Mounted plasma cutter has a close range mode to enable object interaction - accessible by configuring - - bugfix: Selecting a hardsuit module now checks for energy and suit status - - bugfix: The energy blade projector can now fire darts again - - rscadd: Mounted plasma cutter now has a sprite - - rscadd: Mounted energy gun and Tazer now has a sprite - - rscadd: Mounted medical injector now has a sprite - - rscadd: Mounted grenade launchers now has a sprite - mikomyazaki: - - bugfix: Holocomms will no longer transmit speech before the call is accepted. -2019-04-26: - Randall: - - maptweak: The Auxiliary Warehouse shutter buttons now require Supply access from - the outside. - mikomyazaki: - - tweak: Allows changing a cryptographic sequencer's icon and name in a similar - way to chameleon items. -2019-05-03: - CarefulLilCassie: - - rscadd: Adds folding knives based on the Swiss Army Knives made by Victorinox - & adds them to lockers based on job as well as the loadout for a basic one. - ChaosAlpha: - - bugfix: Fix robots click-dragging things on catwalks. - - rscadd: Robots can now use the , and . hotkeys to move up and down z-levels in - hotkey-mode. - - rscadd: Everyone can now use > and < in non hotkey-mode to move up and down z-levels. - Chinsky: - - rscadd: New sprite for mining scanner, look for air analyzer-like thingie in miner - colors. - - tweak: Mining scanner now behaves like other scanners, storing last scans. To - use it click on a tile you want to scan. It will keep all scans unless buffer - is cleared. - - rscadd: Scanners now make sounds when used. - - rscadd: You can now make handrolled cigs out of any dried plants. - - tweak: Tobacco from cig vendomats can be put in pipes. - Flying_loulou: - - rscadd: Medical Technicians rejoice ! Following OHS inspections, EXCOM decided - to grant you a light polymer helmet, as in most of other EMS services throughout - human space. - - rscadd: Medical Technicians rejoice ! EXCOM also issues you a 'medical technician - chest rig', to help you carry your equipment without being forced to sweat in - a jacket. - - tweak: Medical personnel rejoice ! your paramedic and EMS jackets have been modified, - and now allow you to store a blood bag on the suit storage slot. - - maptweak: The MT chest rig and the EMS helmet are now available in the medical - technician's lockers. - - maptweak: Due to budget cuts, EXCOM had to sell the labcoat from the MTs lockers, - in order to aquire the new equipment. Therefore, you will no longer find labcoats - in the MT lockers. - Higgin: - - tweak: Tactical armor plates now offer extra resistance against brute and bullet - damage over regular medium plates. - - admin: Adminhelps not taken or closed in five minutes automatically close with - a reminder to the owner. - - tweak: Being stunned, weakened, or paralyzed now all prevent radio use. - - tweak: Getting hit can apply a very brief cooldown before you can use your radio - - guaranteed for stun weapons, projectiles, and powerful melee weapons. - - tweak: Pepperspray no longer automatically stuns/weakens targets without mouth/nose - protection. - - tweak: Pepperspray briefly confuses targets without eye protection. - - tweak: Pepperspray has a 50/50 chance to stun targets without full mouth/nose - protection. - - tweak: Partial mouth/nose protection (masks, bandanas) reduces pepperspray stun - chance. - - tweak: Pepperspray weakens stunned targets without full face protection. - - tweak: Buffs pepperspray gas pain damage and adds a chance of stun to gas effects. - Hubblenaut: - - rscadd: Adds a new chameleon headset to the chameleon kit. - - rscadd: Adds three new chameleon accessories to the chameleon kit. - - bugfix: Fixes chameleon items having broken sprites. - Randall: - - tweak: The advanced mop now synthesizes space cleaner instead of water. - RyanSmake: - - bugfix: The Torch is now a valid target for the BSA (for BSAs not on the Torch). - SierraKomodo: - - bugfix: Deck 1 security checkpoint shutters work as intended now. (Actually fixed - this time). - Spookerton: - - tweak: Secure guns are slightly more informative about registration changes and - have shorter ranged interaction logging. - - tweak: Welding tools are now all just one pocket-sized item with swappable tanks. - Tanks change the size of the tool when attached. - - tweak: Emergency toolboxes now also contain a welder with a tiny fuel tank. - - admin: Admin narrations can be styled. SubtleMessage is part of DirrectNarrate. - Moderators get limited DirectNarrate with a SubtleMessage style. - mikomyazaki: - - rscadd: Cooking supply pack now has a bottle of universal enzyme. -2019-05-08: - ChaosAlpha: - - bugfix: New < and > keybinds are now CTRL+. and CTRL+ in non hotkey-mode, to circumvent - a byond limitation. You will need to update your skin. - sabiram: - - rscadd: 'Added several new human languages: Yangyu, a Chinese language (key 2); - New Dehlavi, a Hindustani language (key 3); Prototype Standard Arabic, an Arabic - language (key 4); and Iberian, a Spanish-Portugese language (key 5).' - - tweak: Changed the way human culture defines assign language. Please double-check - your loadout. - - tweak: Sol Common's syllable list has been adjusted. - - tweak: Renamed 'Independent' to Pan-Slavic. - - tweak: The language keys of several languages have changed. Xenophage (4 to L); - Borer (x to z); Vox (5 to x) - - rscdel: Removed 'Lunar' and 'Spacer' languages. -2019-05-12: - Chinsky: - - rscadd: Adds jars of medical lollipops (holding 15u of a random common medicine) - to infirmary lobby and CMO office - - rscadd: Can now scan overmap things with sensor console. By default just shows - site description. - - rscadd: For ships, shows heading and speed, if ship is moving. - - rscadd: For planets output depends on Science skill - atmosphere / plantlife / - wildlife presence (Basic), number of non-natural ruins (Trained), compoisition - / temp / pressure of atmosphere (Expert). - Novacat: - - tweak: Fixes a UI bug with the modular computer downloader and antag programs - Spookerton: - - tweak: Arterial bleeding is now much more obvious to the bleeder. - mikomyazaki: - - bugfix: You now need to wear hardsuit gloves/boots to have a complete airtight - seal when wearing a RIG. -2019-05-13: - Cakey and Marie Taylor: - - imageadd: Adds directional sprites for vending machines, smartfridges, watercoolers, - drying racks and medivendors. Sprites by Marie Taylor. -2019-05-14: - Chinsky: - - tweak: Shuttles now display their fuel in Delta-V rather than pressure gauge. - They also show Delta-V used per move, so you can actually gauge how many jumps - you have left on your fuel. - Devildabeast: - - rscadd: IPCs can now select kicking and stomping as their default unarmed attack. - SierraKomodo: - - bugfix: Energy guns no longer become invisible if cell charge exceeds cell capacity - due to adminbus. - - bugfix: Spacer now has a text color again. It's dark-yellow. -2019-05-15: - ChaosAlpha: - - bugfix: Robots can once again build windows using their synthesizers. - Eckles: - - rscadd: Adds new Skrell factions and home systems. - SierraKomodo: - - bugfix: Being incapacitated no longer affects talking and radio use if the radio's - microphone is set to on. - - bugfix: Talking normally with a nearby radio set to on will no longer trigger - aim-mode shooting. - afterthought2: - - tweak: Movement delay handling from items has been tweaked slightly to give more - fine-grained effects. -2019-05-16: - Chinsky: - - tweak: Helm console layout changed, mostly to prevent sector descriptions shifting - movement keys down at WRONG FUCKIGN MOMENT. - - rscadd: Added acceleration limiter to helm console. Hard value vs engine thruster's - percentage. Doesn't affect fuel usage, use engine limiters for that. - ghostsheet: - - tweak: Hardsuit ore scanner module can now print survey data disk. - - tweak: Hardsuit mounted drill now has an increased energy cost of 2Wh per use. -2019-05-17: - Montykore: - - imageadd: Atmos canister icons and canister details revamped and updated. -2019-05-18: - Chittersky: - - tweak: If you are wearing a voidsuit, spiders now need to breach it before injecting - poison. On other hand, spiders now can breach voidsuits. - - tweak: Spider venom's toxin damage is now slightly weaker, but can cause confusion. - Montykore: - - imageadd: Updated and revamped corgi related icons. - SierraKomodo: - - bugfix: Deck 1 security checkpoint windoors have the correct access flags now. - babydoll: - - tweak: Simple animals' speed prying doors open now depends on the door. - ghostsheet: - - rscadd: 'Plasma cutters can now cut through the following: bulkhead walls, floor - platings, girders, catwalks, windows, low wall frames and lattices.' - - rscadd: Plasma cutters will now spark and require eye protection when interacting - with object. - - tweak: Mounted plasma cutter has an increased object interaction energy cost, - 10 Wh per use. - - bugfix: Drills will now have a delay and sound when drilling through girders. -2019-05-19: - Chinsky: - - rscadd: Added 'Known Implants' field to medical record, that gets auto-filled - with roundstart robotic organs - - rscadd: Added buddy tags to explorer lockers. These can be worn as an accessory, - and will start pinging every half a minute or so if they don't detect another - tag with the same ID in 10 tile range. They can be clicked in hand to set ID - and toggle on/off. - SierraKomodo: - - tweak: Helm and navigation consoles now show 'gigameters/hour' for speed and acceleration. -2019-05-20: - Albens: - - maptweak: Bridge Deck has undergone a refit. -2019-05-23: - Devildabeast: - - tweak: The Roboticist and Biomechanical Engineer have had their access adjusted - to better reflect their respective departments, and the Roboticist can now access - the Engineering Locker Room and front desk, but has had Tech Storage access - removed (which was unusable anyway). - - rscdel: The Roboticist's headset has been removed; the Roboticist and Biomechanical - Engineer now spawn with their respective department's headset. - - tweak: The Roboticist is now Trained in EVA and exosuit operation by default. - - maptweak: The Engineering Locker Room's material reserves have been locked behind - windoors in order to prevent certain nerds from thieving. - - maptweak: Robotics now gets two loaded toolbelts and multitools instead of one, - as well as two pairs of insulated gloves. - SierraKomodo: - - maptweak: Various map tweaks to Aquila to fix clickable sprites being under other - sprites and other mapping nonsense. - - maptweak: The Charon power compartment has a camera again. - ghostsheet: - - rscadd: Medical drop pouch and Medical webbing is now available on the loadout - to medical trainee, chemist and biomech. -2019-05-24: - SierraKomodo: - - bugfix: 7mm haywire ammo boxes now contain the correct ammo. - - bugfix: Flying borgs are no longer capable of having infinite VTEC modules installed. -2019-05-25: - Flying_loulou: - - rscadd: The EC now issues branch berets to their personnel, to denote which section - they're from (available in the loadout, hats and headgear section). - - rscadd: Following extensive training the personnel of the Torch is now able to - clip their helmets on their plate carrier's suit storage slot. - - rscadd: Following even more extensive training the medical technicians can now - clip their EMT helmet on their MT Chest-rig's suit storage slot. - SierraKomodo: - - tweak: Flying borg speed has been reduced one level. Flying borg default speed - is now the same as a regular borg with a VTEC module. Flying borgs with a VTEC - module will be as fast as the old default flying borg speed. - - rscadd: Pill bottles can now be printed at autolathes - afterthought2: - - tweak: The pilot qualification pin is now restricted to Fleet and EC. -2019-05-26: - Chinsky: - - tweak: Spacesuits etc now have maximum pressures they can handle. You can check - their codex entry to see it. - babydoll: - - rscadd: You can now permanently disable radio/teleporter beacons with an emag - or EMP attack. Any connected teleporters will also lose their connection. - - rscadd: Anchored underfloor beacons can be repaired with nanopaste. Handheld or - portable beacons are unrecoverable and must be replaced. -2019-05-27: - BearKingKrug: - - tweak: Clicking on borgs/drones on harm intent with a welder/crowbar actually - attacks them now - ChaosAlpha: - - bugfix: In non hotkey-mode, move-up/down have been moved to CTRL+Numpad_Add/Numpad_Substract - to fix issues with some keyboard layouts. - Chinsky: - - tweak: NTIRC client no longer spawns by default, freeing up some space on PDAs - and such. - - tweak: Reports editor now spawns on Cargo and Command PDAs by default. - Flying_loulou: - - tweak: Security coveralls are now also available for all fleet security personnel - (via the uniform vendor, under utility extra). - - tweak: Changes the firesuit sprite for a new one, based on TG's. - - tweak: Lowered the firesuit slowdown to 0.6 (voidsuits' slowdown is at 1). - - rscadd: Based on TG's sprites, adds the firefighter helmet, and the chief firefighter - helmet (for the CE). You don't need to wear a mask while wearing it, and it - does connect to internals (you still have to toggle them on, of course). - - maptweak: Adds said helmet in the fire closets, to replace the already existing - red hardhat. - - maptweak: Adds fire closets throughout the ship. - - maptweak: Adds fire closets in the Charon and the Aquila. - NewOriginalSchwann: - - tweak: Fatigues have been added to the Fleet pilot's uniform vendor under utility. - SierraKomodo: - - maptweak: 'The bridge deck has received some minor tweaks and fixes. See https://github.com/Baystation12/Baystation12/pull/25628 - for details. Notable changes below:' - - maptweak: CMO's office fax machine no longer blocks access to part of the table - - maptweak: Meeting room now has a fire alarm - - maptweak: Additional cameras were added to CO's office and aft hallway to fix - blindspots - - maptweak: Fire doors were added to doors and windoors that were missing them - - maptweak: PPE closet access flags now match the sidearm closet - - rscadd: Shield generator and shield generator monitor UI now includes a capacity - percentage. - - maptweak: The lift now has firedoors. - - rscadd: Flying borgs now have light-weight armor, providing half the armor value - of a regular borg's armor. Light-weight armor can be printed from fabricators - for half the cost of regular armor, and can also be applied to regular borgs - (Not that you'd ever want to do this.) -2019-05-28: - AlexMorgan3817/_Elar_: - - bugfix: Now device can't be its own proxy. - BearKingKrug: - - spellcheck: Fixed AI intro text to not mention being a traitor - Cakey: - - rscadd: EC service and dress under-uniforms have been replaced with service jumpers, - with complimentary departmental colouring. - - rscadd: EC senior officers (captain and above) now have a unique service cap. - ghostsheet: - - tweak: Overmap Fast speed is now reduced from 20 to 15, this applies to dodging - meteors in shuttles at experienced/master levels. - - tweak: Gas thrusters for overmap travel, will now calculate thrust and fuel consumption - by volume. Lower volume limit from the engine control for more fuel efficiency. - - tweak: Guppy's mass and max speed has been increased. - - maptweak: Charon's atmospheric and electric compartment has be reworked to accommodate - for the fuel consumption. - - maptweak: There are now shuttle navpoints on the hanger deck. -2019-05-31: - EcklesFire: - - rscdel: Removed inappropriate boots from Fleet EMT. - ghostsheet: - - rscadd: Vey-Med has generously donated two prototype hardsuit defibrillator modules - to be used on the torch mission. - - rscadd: Hardsuit defibrillator module has been added to the rescue rig and the - CMO hardsuit. - - tweak: Hardsuit health scanner can now display their reading like the ore scanner. -2019-06-01: - Orelbon: - - rscadd: Adds NanoUI interface to suit storage units. - SierraKomodo: - - rscdel: Vat-grown blanks have been removed from the SRV Petrov. - babydoll: - - tweak: Many objects that were previously rotatable with a verb are now rotated - using alt-click. Any such object will report in examine that it can be rotated. - - tweak: You can now rotate vending machines with alt-click. - ghostsheet: - - maptweak: The Aquila's engine room has been updated, most notably it now has a - fuel pump for easy refuelling. -2019-06-02: - Atebite: - - rscadd: 'New integrated circuit components have been added:' - - rscadd: Reagent funnels - Allows you to use reagent containers such as beakers - on the assembly to refill internal reagent storages - - rscadd: Reagent heaters/coolers - Heats/cools contained reagents, similar to heater/cooler - pads - - rscadd: Anchoring bolts - Anchors the assembly so that it cannot be moved - - rscadd: Hatch locks - Prevents opening the assembly with screwdrivers while enabled - Spookerton: - - rscdel: Resleevers and neural laces no longer exist. - babydoll: - - rscadd: Blobs will now additionally attempt to attack a random nearby tile, even - if they aren't expanding to that tile. The core nucleus itself is particularly - aggressive. - - tweak: Material coins are no longer effective weapons. - ghostsheet: - - rscadd: Plasma cutter can now deconstruct closet. - - tweak: Hardsuit chemical dispenser now has inaprovaline instead of tricordrazine. - - tweak: Rescue rig can now have auto-compressor hooked on the suit storage slot. - - tweak: Ninja's chemical dispenser now has dermaline instead of radium, no more - radioactive super powers today. - - bugfix: Hardsuit module item will no longer be put into bags or closets. -2019-06-03: - SierraKomodo: - - tweak: You know longer magically know an emag is an emag because of your complex - devices skill. - Spookerton: - - tweak: Hearing your current default language skips adding the language identity - to the log. - - tweak: You no longer grunt as if you have no languages if you have any language - you can speak. - - tweak: Team outsider special roles are given an appropriate team language. - - bugfix: Legalese is enabled in the dme again. Derp. - - rscdel: GalCom no longer exists. - - tweak: Everyone on the Torch and Verne except stowaways and merchants are given - ZAC on spawn. - - tweak: Non-Torch jobs do not give a language on spawn unless you spawn with no - languages, in which case you get Spacer. - - tweak: The maximum number of preferences-selectable languages is 3 instead of - 4 due to other changes. - - tweak: Sinta Unathi speak Sinta. Yeosa Unathi speak Yeosa. Having the other language - is optional for both. - - rscadd: Selenian exists. It is a dialect of ZAC (high cross-understanding), not - money-speak. It is the language of selenians, and optional for residents of - luna. - - bugfix: Having no languages at all prevents you from speaking in raw text that - everyone understands. - - tweak: Chimpanzee is renamed Primitive. Subtypes of Primitive no longer exist. -2019-06-04: - WezYo: - - bugfix: Ghosts can no longer close antag pda program -2019-06-05: - Cakey: - - tweak: You can now rotate in chairs when buckled to them by clicking once again. - SolarK: - - tweak: Slowdown penalties based on cold now affected by species discomfort levels - babydoll: - - tweak: All types of blob will now launch bonus attacks less often overall, and - will attack more or less often depending on their type. - - rscadd: Added the 'ravaging mass', which forms an offensive line around the shield - blob spawned by the cores. This type attacks most often and most potently of - all the blob types. - - tweak: The base type (which makes up the bulk of the blob) formerly known as 'ravaging - mass' is now 'pulsating mass', and has had its maximum damage potential reduced. - - tweak: Reduced damage potential of the shielding mass. Increased hit points. - - tweak: Mecha are now valid targets for the blob's bonus attacks. -2019-06-06: - Cakey: - - rscadd: Added a new on-ship ambience sound, for that in-flight pressurised cabin - feel. - Devildabeast: - - rscadd: Adds a nine-pointed star icon to the list of potential bible choices. -2019-06-07: - WezYo: - - bugfix: resetting a flying drone will no longer make it invisible -2019-06-11: - Spookerton: - - tweak: Radio messages no longer show language identifiers if the language is the - same as your default. -2019-06-12: - Chinsky: - - tweak: Doors to the catwalk overlooking Hangar are no longer access-locked. - Devildabeast: - - rscadd: Adds urns which can contain, move, and release ashes, and can be constructed - from different materials. The Counselor gets a wooden urn in their locker on - round start. - Kamiztheman: - - tweak: Item descriptions in the traitor uplink menus have been adjusted so that - new recruits actually understand what they are buying. - - tweak: EMP ammo boxes purchased from the uplink should now have enough ammo to - refill a magazine. - - bugfix: 7mm EMP ammo boxes now contain and can store the correct caliber rounds. - MistakeNot4892: - - tweak: Status indicators on the UI have had a makeover. - - rscadd: You can now click status indicators to get an idea of how things are in - your current state. - Spookerton: - - tweak: The brig no longer contains prison camp clothes because it's not one. - - tweak: The brig officer gets a multitool for locking guests' sensors on. - - tweak: You can lock and unlock suit sensors through the stripping menu with a - multitool. - WezYo: - - bugfix: Attacking with swiss knives properly displays attack verb - ghostsheet: - - rscadd: Hardsuit interface now has internal tank controls. - - tweak: Hardsuit interface has been updated. Fresh coat of paint to keep it looking - good. - - bugfix: Tank "reset" button now works properly, resetting tank release pressure - to its original value. -2019-06-13: - Draxtheros: - - tweak: Raised the temperature at which Unathi begin to receive "warmth" messages. - Spookerton: - - tweak: IPCs cannot be OCIE agents. -2019-06-14: - MistakeNot4892: - - rscadd: Adds thirst. It's like hunger. - Spookerton: - - tweak: Changing species with the changer re-adds languages required by the user's - antagonist type. -2019-06-15: - Cakey: - - maptweak: 'adjusted the bridge deck slightly:' - - maptweak: straightened the outer hallways to be more convenient - - maptweak: reorganised the meeting room to use its space better - - maptweak: matched wood types accross all offices - - maptweak: gave an extra console to the side-islands in the bridge - - maptweak: reshuffled COS and CE office contents, added disposal chutes - - maptweak: brought outer hallway decals in line with door marking standard - afterthought2: - - bugfix: SMES inverted logic fixed; should now work with terminals properly. - - bugfix: APCs now charge from empty properly again. - - bugfix: Heaters/coolers/protolathe/circuit printer work again. - babydoll: - - bugfix: Fixed mirrors not opening their menu. - - rscadd: Added yew wood, and its planks to the supply menu. - - tweak: Adjusted mahogany and walnut wood colours. - - bugfix: Corrected mahogany and maple plank loadout info. - ghostsheet: - - maptweak: Deck three toilets now doesn't suffocate people anymore. - - tweak: Hardsuit modules can now be deselected by pressing select again. - - tweak: Hardsuit plasma cutter automatically do object interaction if they're adjacent. - They will now also always fire on harm intent. - - tweak: Hardsuit flash module now flashes on unarmed attacks. - - tweak: Hardsuit flash module now has has a function to activate the flash without - targeting anything. - - tweak: Hardsuit flash now has a higher energy cost of 10 Whr per use. -2019-06-16: - Devildabeast: - - rscadd: "Adds the Bah\xE1'\xED Faith to the list of selectable human religions." - - tweak: Suit sensors can now be set by alt-clicking your uniform. - MistakeNot4892: - - tweak: Humans can now leap/tackle at a small distance based on their Athletics - skill. - - tweak: Leaping and tackling (Vox and Xenophage powers) are now invoked by attempting - to make a ranged grab - if it's not a mob you'll just hurl yourself in that - direction like an idiot. They have had timing values tweaked and require a short - channel before use. - - tweak: The various outcomes for leaping/tackling have been made dependant on skill - levels in Athletics and Combat. Check the PR for specific values. - - tweak: Split the Chaplain and the Counselor into two separate roles. Chaplain - was moved to Service and lost Medical access. - - rscadd: Replaced the defunct Sec checkpoint near the Chapel with the Counselor's - Office, it's where t'Counselor lives. - - tweak: Moved the Psychiatrist and Psychologist alt titles to the Counselor. - Spookerton: - - bugfix: Species toxins modifiers are used again, and modify internal organ damage - taken from toxins and organ failure. - - bugfix: Lava no longer deletes human and human derived mobs early when braindead. - afterthought2: - - bugfix: Borg chargers once again spawn with the cell installed. - - bugfix: Vents starting as off are fixed. -2019-06-17: - SierraKomodo: - - tweak: Brig Officer is now known as Brig Chief. - afterthought2: - - bugfix: SMES sizes and starting charge should now be back to normal. - - bugfix: Pressure regulators should once again be interactable. - babydoll: - - rscadd: Added a system to rarely spawn larger, more dangerous fauna on exoplanets. - - rscadd: A giant crab, peaceful until provoked, can now spawn on desert exoplanets. - ghostsheet: - - tweak: Plasma cutter now uses up half a charge per deconstruction. - - bugfix: Deconstruction of walls and girders now gives the appropriate materials. -2019-06-18: - MistakeNot4892: - - tweak: Dionaea can stand in water to recover thirst, and lose hydration slower - than others. - - tweak: Going prone on water turfs will now drown you. -2019-06-19: - SierraKomodo: - - tweak: Airlock control boards now have 'Autoset Access' enabled by default. -2019-06-20: - Heptagon49: - - bugfix: Fixed variables so powercells aren't duped when inserted into the coilgun. - - bugfix: Fixed coilgun examination so that it works now. - Kamiztheman: - - rscadd: Adherents aboard the Torch have finally found their crystalline toolboxes, - and have loaded their vending machine with them as an alternative to the harness. - MistakeNot4892: - - tweak: You now use grab intent only to perform a tackle/leap. - - tweak: Running off a ledge with a leap prepared (using Prepare To Maneuver) will - automatically try to jump to the next closest non-open turf. - - tweak: Mobs will now behave more like objects when thrown - they will pass tables/rails - and collide with obstacles. - SierraKomodo: - - rscadd: AI can now jump to people talking near an active holopad. - Spookerton: - - tweak: Improvised cuffs break if resisted out of a few times. - - tweak: Cuffs and improvised cuffs can now be attached to most shoes, hobbling - them. Improvised cuffs break if the wearer moves enough. - - tweak: Knives can be stored in more kinds of shoe. - afterthought2: - - tweak: Kitchen cookers, microwaves, gibbers, and seed/honey extractors are now - buildable. -2019-06-21: - Alex6511: - - tweak: Meteor now requires 15 players - Textor: - - rscadd: Adds gas sensor, air injectors, digital 3-way valves, and gutters to pipe - dispenser - - rscdel: Removes non-omni versions of filters and mixers from the game. - - rscadd: Pipe dispensers UI is updated. Pipe dispensers can now dispense normal - pipes with paint already applied to them and dispense 1, 5, or 10 pipes at a - time. - - rscadd: Atmospheric control console UI updated. You may now directly input values - instead of using plus and minus buttons. - - rscadd: Pressure tanks can now be built with steel sheets, and deconstructed. - - rscadd: Vent pumps and injectors can now have their configuration changed using - a multitool. - - tweak: Due to fuel pipes having different tolerances, they are no longer compatible - with normal pipes and need a universal adapter to connect two networks together. - - maptweak: Removes all non-omni filters and mixers from all maps and replaces them - with omni versions. - afterthought2: - - tweak: Washing machines are now buildable. - - tweak: Portable pumps, scrubbers, huge scrubbers, and hydroponics trays are now - buildable using circuitboards. -2019-06-22: - Unknown: - - tweak: The Mend psi-power now scales in effectiveness to your rank, and is available - at lower ranks. - - tweak: Autoredaction is now less buggy in regards to fixing bleeding, and somewhat - less spammy when healing you. - - tweak: Coercion now has Mind Read as a power. It prompts someone with a question - that they are compelled to answer - RP tool only. - - tweak: Blindstrike now has a visible tell when used. - - tweak: Spasm, Agony and Blindstrike have been shuffled around within the Coercive - tree. - - tweak: Latent psionics will no longer be aware they are latent psionics. - - tweak: The Probe power is now called Assay and has been moved to operant-rank. - - tweak: Made some roundstart announcements bigger/easier to read. - babydoll: - - maptweak: Moved the chapel down to deck 3, south of the holodeck. - - maptweak: Remapped the mental health section of the infirmary. - - rscadd: Added pews for the chapel. - - rscadd: Added pews to the material construction menu. They can only face south! -2019-06-23: - MikoMyazaki: - - rscadd: Traitor robots always get their emag items. - - rscadd: Cultivator drone now has an emag item, an energy machete. - - bugfix: Restores Petrov access to the Access Decrypter antagonist program. - MistakeNot4892: - - tweak: The config options RUN_SPEED and WALK_SPEED are now more accurately named - RUN_DELAY and WALK_DELAY. Default values have been adjusted to match the previous - behavior. - - rscadd: Stamina now exists. You will recover stamina fastest while well fed and - lying down, but will recover it slowly so long as you aren't actively sprinting. - Stamina recovery can be tweaked in config. - - tweak: Running will now consume stamina. Costs can be tweaked in the config. If - you run out of stamina, you will not be able to run again until it refills. - - rscadd: You can now hold shift to sprint, and release it to walk. You can set - default walk/sprint options with Set Default Walk and Set Default Run. - - tweak: The Counselor is now mildly psionic, and is a registered affiliate of the - Cuchulain Foundation for RP purposes. They have some tat in their office relating - to psionics more generally. This is hopefully going to be a way to make psionics - more broadly known ingame - see Discord/PR/other discussions if interested. - - rscdel: Removed Psychiatrist. - - tweak: Psychologist is now a Passenger alt title. - afterthought2: - - tweak: Machine interaction has been reworked further. Be ready for some issues. - - tweak: You may now install and remove machine components by hand on (some) machines - you can build from circuits. To do this, first open the panel with the screwdriver - (you may need to make sure the machine is off or other conditions are met). - Then either insert a component by clicking on the machine with it, or use a - wrench on the machine to remove the component. - babydoll: - - rscadd: Added the disorientator, a short-ranged beam weapon with effects similar - to a flash. - - rscadd: Added the disorientator to core department head closets and RnD. -2019-06-24: - Alex6511: - - balance: The meteor gamemode is now significantly more powerful. - MikoMyazaki: - - bugfix: Spells granted by The Tower deity no longer require robes to cast. - - tweak: Adds an exit button to the Deity punishment menu incase you open it accidentally. - - rscdel: Removes some stamps that shouldn't exist. (Warden, HoP, HoS, etc.) - - imagedel: Removes some now unused stamp icons. - - tweak: RIG stamp module now does the normal stamp instead of the Internal Affairs - stamp. - - tweak: Centcomm stamp (used on admin faxes) now uses the map specific boss name - for the stamp. - - bugfix: Prevents putting polytool augment tools in your pocket, behind your ear, - etc. - - tweak: RIGs will now warn you if you make them malfunction while offline, requiring - nanopaste to repair. - Mistakenot4892: - - rscadd: Added a slower version of walk, Creep intent. - NobleCaos: - - tweak: Diona Nascent Gestalts can now katamari up items as well as nymphs based - on the amount of nymphs in the gestalt - SierraKomodo: - - maptweak: Filters in atmospherics no longer connect to the wrong pipes. - - maptweak: The Corporate Liaison's office now has a gun recharger for the LPA's - sidearm. - - tweak: LPA and CL lockers now spawn with spare headsets, including bowmans. - afterthought2: - - bugfix: SMES panel opening, shieldgen deconstruction, and door autoclose have - been fixed. - - tweak: You can rotate disposals pipes now. - - tweak: Flipping disposals pipes moves them to the mirrored state (unlike rotating - twice). - - tweak: Dragging disposals pipes no longer rotates them. - - bugfix: various issues with disposals construction have been addressed. -2019-06-25: - ghostsheet: - - bugfix: Shuttle thruster now block air and fire; shuttles are more fireproof and - less gas contamination should occur. - - tweak: Shuttle engine heater, are now climbable. - - maptweak: Medical bathroom now has a mirror, for all your post radiation treatment - needs. - - maptweak: Charon atmospheric compartment has been returned to its previous state. - - maptweak: Hanger fuel bay now has a high power pump, to reduce prep time. -2019-06-26: - Cakey: - - tweak: Grass, carpets, and dirt have new icons. - - rscadd: A new system has been put in place for floor detailing, allowing for pre-made - edges. -2019-06-27: - MikoMyazaki: - - bugfix: Can no longer drag people off of something they are buckled into (e.g. - roller bed) onto an op table without unbuckling. - MistakeNot4892: - - rscdel: Removed xenophage and all adjacent code. - - tweak: You now need to hold CTRL to do a leap. - SolarK: - - tweak: Added damage limit applied by vacuum. - babydoll: - - rscadd: Swarms of enormous leeches can now spawn on shrouded exoplanets collectively - as megafauna. - - rscadd: Soap now comes in a few different shapes, sizes and colours. - - rscadd: Cleaning someone with soap will now attempt to transfer some of the soap's - reagents to that person. -2019-06-28: - MikoMyazaki: - - rscadd: Adds a chemistry recipes book to the chemist's locker that lists the medication - recipes. - Novacat: - - rscadd: Adds the dufflebag of holding, a cosmetic reskin of the Bag of Holding. - - tweak: Fixes some onhand sprites for dufflebags. - Roland410: - - maptweak: Moved the CE's suit to the bridge EVA storage. - - maptweak: Made the conference room a tad bit bigger and moved items around, gave - it a request console. - - maptweak: Removed one console on each side of the bridge and added tables instead, - gave another emergency toolbox, donut box, coffee mug, and a shortwave. - - maptweak: Gave the CL a box of cigars, bronze zippo, union card box, and made - the backroom properly boltable by the button. - - maptweak: Added disposals to the CL office. - - maptweak: Shuffled around the contents of the CE's office. - - maptweak: Gave the CO a Torch ship model. -2019-06-29: - .verarch: - - tweak: lizard horns should no longer obscure eyes. - - tweak: work gloves should fit unathi somewhat better now. - Cakey: - - rscadd: Adds pixel offsets to all mobs to give the game more feel for depth. - - rscadd: Gives all mobs a drop shadow. - afterthought2: - - admin: More things should show up in admin logs now. -2019-07-01: - MistakeNot4892: - - tweak: Vox jobs (scav and stowaway) now have soft antagonist status. - Spookerton: - - bugfix: Microwaves don't eject their components. - - tweak: dismantling a microwave empties it first. -2019-07-02: - Cajoes: - - tweak: modified adherent tool vendor to look modified - - tweak: changed adherent tool vendors vend animation from "tool_vend" to "tool-vend" -2019-07-04: - MikoMyazaki: - - maptweak: Officer's Mess is now all access. - Spookerton: - - bugfix: microwaves properly remove their ingredients after cooking. -2019-07-05: - Cajoes: - - tweak: Lava lamps have been optimized. - MistakeNot4892: - - tweak: Borers now use Dominate via ranged disarm attack and Infest via melee grab - attack. - - tweak: Language on borer messages is now more neutral. - - tweak: Borer powers now largely have UI buttons. - - tweak: Psionics can see auras around borers when they aren't inside hosts. - - tweak: Borer Dominate is now properly psionic, and respects psi-null atoms and - psi armour (ie. Coercion ranks). - - rscadd: Added neutered borers. Adminspawn only, basically defanged peaceborers. - - tweak: Significant backend refactor for borers, please report borer bugs. - afterthought2: - - rscadd: Robots now get skills set according to their module choice. - babydoll: - - tweak: Bog-standard parrots will now retaliate briefly when attacked. - - tweak: The space parrot occupying its temple in the asteroid will now retaliate - with force when attacked. Beware! - - rscadd: A giant parrot can now spawn as the grass planet's megafauna. - babydoll, Xhuis & Sunner: - - rscadd: Added the hivemind, a megafauna spawn for settled exoplanets. Beware its - attacks and strike when it's vulnerable. -2019-07-06: - Devildabeast: - - rscadd: Inscriptions can now be carved into material (gold, steel, silver, etc) - rings using sharp objects. - MikoMyazaki: - - tweak: Antagonist implants are now not visible to the bodyscanner, you can find - them by opening the implanted bodypart and examining. - afterthought2: - - tweak: If a machine is hackable, you'll now only get shown the wires panel; to - see the usual interface close the hacking hatch with a screwdriver again. -2019-07-07: - Devildabeast: - - tweak: 'Counselor now gets different psionic faculties by alternate title: Redaction - for Counselor and Coercion for Mentalist.' - - rscadd: Focus has been added as an Operant Coercive ability; grab a target while - target the mouth, then use the grab on them on disarm intent to cure the target - of various mental ailments. Power scales by rank. - - tweak: Spasm is now a Master ability rather than Operant. -2019-07-08: - Devildabeast: - - rscadd: Dog tags can now be added to the commemorative plaque to memorialize members - of the Expeditionary Corps. - afterthought2: - - tweak: The emergency supplies crate is cheaper but has no armored vests now. - mikomyazaki: - - bugfix: Clonexadone and Cryoxadone no longer reduce damage on necrotic organs. -2019-07-09: - mikomyazaki: - - tweak: RUST manual now links to the wiki guide (and doesn't teach you to blow - up the RUST) -2019-07-10: - afterthought2: - - rscadd: Machines now require power components to draw power. These can be printed - from the autolathe. The tesla link one is the default one to use. - - rscadd: Many machines now require screens and keyboards to be fully interactable. - You can print them from the autolathe. - - rscadd: To install components, open the panel with a screwdriver (after the machine - is built) and click on the machine with the component. To remove components, - use the wrench while the panel is open. - - tweak: 'Computer construction has been changed. A screen and keyboard is required - now. The order is: make a frame, wrench to anchor the frame, add 5 coils, add - the circuit, add all components as prompted, screwdriver to build. To deconstruct, - crowbar to remove components, wirecutters to cut the wire, unwrench, and apply - welder.' - - tweak: General machinery follows the same construction steps as computers now. - - rscadd: Computers now have panels, like other machines. To deconstruct a computer, - use a screwdriver to open the panel and then a crowbar to deconstruct. - - tweak: Newly built machines have the panel open. - - rscadd: If confused about this, examine the machine while standing next to it - to get information about which tools to use on it. - mikomyazaki: - - bugfix: Can now properly construct multi-tile glass airlocks. -2019-07-11: - afterthought2: - - rscadd: Shuttle consoles are now buildable. Use a multitool on the circuit while - on a shuttle to set the shuttle first! Shuttles are still not buildable; you - must do this on an existing shuttle. - mikomyazaki: - - bugfix: pAIs no longer have to fold up twice to become a card. - - bugfix: pAIs with the Universal Translator module can now speak and understand - Spacer and Gutter. - - bugfix: Mend psychic power now works properly on operant level to fix bleeding. - zaredman: - - maptweak: Adds an Interview Room to the Brig. Adjusts nearby rooms to fit. -2019-07-12: - Cajoes: - - rscadd: food in steel cans and support for canned items, added to cargo - - rscadd: Added pistachios to snix vendor - - rscadd: Added Sol Snacks vending machine. (And ethnic sol foods to go with it) - - Vendor by Chinsky - - rscadd: Added japenese snacks to the snix machine and changed it to its own vendor - with some label tweaks please welcome the painfully ethnic "Yummy Fods" vending - machine. Available in cargo - - tweak: Snix machine now more slavic in design - - rscadd: Added deoderant to lavatory essentials - - rscadd: Added chessboard to game vendor - - rscadd: Added numerous vendors to the Cargo Supply Form - mikomyazaki: - - bugfix: Printing from the file manager program now prints visible paper. - - tweak: Adds basic medical and trained chemistry skills to the Service Module. - Gives the Service Module the full selection of booze and soft drink dispenser - drinks. Significantly reduces power requirement of the drink dispenser tool. - - bugfix: Autopilot will now accelerate correctly. - - tweak: The psiblade can now hit robots instead of trying to cut their wires like - a wirecutter. - sick trigger: - - maptweak: Added tinted windows and a light switch to the chapel. - zaredman: - - maptweak: Fixed some map oversights following the Security interview room addition - (like the wall blocking the door to the FT's lab). - - maptweak: Added laundry pods to the Medical washroom. -2019-07-13: - mikomyazaki: - - tweak: Machines will now have a hint if you have forgotten to install a tesla - link. - - rscadd: Robco vendor will now vend tesla links and keyboards for building machinery. -2019-07-14: - Devildabeast: - - tweak: Makes the machete sheath its own selection under loadout; removes it from - the list of holster selections. - - rscadd: The Chaplain's bible now has "blessings;" as a Chaplain, use your bible - (or holy book) on another character to recite a prayer to them, or use the book - in your hand to read a passage to everyone nearby. If you are of the same religion, - they will receive a message putting them at ease. - sick trigger: - - maptweak: Skrell ship air alarms set to a higher, more appropriate temperature. -2019-07-15: - afterthought2: - - admin: You can now ban, jobban, and view notes on logged out mobs. This will act - on the last ckey to have possessed the mob. - babydoll: - - maptweak: Replaced all-in-one grinders in cooking areas with idiot proof juicers. - These cannot hurt your hands. - - maptweak: Replaced all-in-one grinders in laboratory areas with industrial grinders. - These can hurt your hands. - mikomyazaki: - - rscadd: Conveyor Belt and Switch assemblies can be created from the autolathe. - Use the switch on the conveyor belt to link before placing, crowbar to remove - both. -2019-07-16: - MikoMyazaki: - - imageadd: New MMI icons with damage states by Joeynosegay. - - tweak: FBPs no longer get brute/burn mod bonuses from their human subspecies. - - rscadd: Prosthetic organ fabricator can now print replacement FBP power cell organs. -2019-07-18: - Devildabeast: - - rscadd: Adds colorable beanies and rastacaps to the loadout. - babydoll: - - rscadd: The zeq queen megafauna can now spawn on chlorinated exoplanets. -2019-07-20: - Boznar: - - maptweak: Adjusted fire locks on deck one and three for better mobility and logic. - Devildabeast: - - rscadd: Adds several Chaplain religious insignia to the loadout, representing - various faiths. - - rscadd: Adds Sikhism to the list of human religions. - - rscadd: Adds several preset religious books to the loadout. - - rscadd: Adds Shinto to the list of human religions. - Funce: - - bugfix: Bad Chefs no longer make runtimes with the juicer. - Rain7x: - - tweak: Increased the chances of the mail event; and of its rare gifts spawning - SierraKomodo: - - bugfix: Masks can now properly hide ear and eye slot items if configured to do - so. - WezYo: - - bugfix: renaming paper no longer runtimes - YodaDoge: - - bugfix: Farmbot can now harvest plants and remove dead plants, again. - afterthought2: - - tweak: Adding capacitors to a machine buffs the battery backup's charge rate. - - tweak: Borg chargers recharge faster now. - - bugfix: Toggling APC power manually with exotic mapped apcs should work properly - now. - ghostsheet: - - maptweak: Hanger Atmospheric Storage room has been added to the hanger. This replaces - the unused refinery slot near the fore of the charon. - - bugfix: Restore button pressing sprites to their previous states. - - bugfix: Cell charger will now work in Z-level transition, and they now have proper - sprite charge bar. - - rscadd: Cells now have a red charge state which is below 25% charge. - - tweak: Suit cyclers repair function is now default for all suit cyclers. - - bugfix: Duct tape space suit repairs now works properly while suits are being - worn. - - rscadd: Mining drill head now indicate how full they are. - - tweak: Mining drill head logic change slightly to be more informative. - - tweak: EVA airlock on deck 3 now has all its access set to ACCESS_EVA. So anyone - who can enter the room can use the airlock. - mikomyazaki: - - tweak: Can no longer adjust your Chameleon Item's appearance while restrained - or disabled. - - maptweak: Toxins lab now has a button for its blast doors, labels for its pumps, - chamber now has a gas sensor, and more lighting. - - tweak: Can no longer do surgery through thick clothing, suits, RIGs, etc. You - will need to remove the clothing before you can make incisions. - - bugfix: Female characters will now be able to use the roll down and roll sleeves - verbs without their jumpsuits disappearing. -2019-07-21: - SierraKomodo: - - tweak: Blob resistance values have been tweaked. Cores are now weak to fire and - laser, and strong to brute, like green blob. - - tweak: Blob shielding mass regeneration rate has been very slightly reduced. -2019-07-22: - MikoMyazaki: - - rscadd: Adds Vecuronium Bromide, a paralytic drug. - afterthought2: - - rscadd: Vending machines are now constructable using circuits, and also can be - deconstructed. Drag the container they drop to another vendor of the same type - to restock it. - - tweak: To add things back to vending machines, you now must be on help intent - (useful for tool machines). - zaredman: - - maptweak: Moved and remodeled Investigations Office, Forensics Lab, and Evidence - Storage. - - maptweak: Slight adjustments to Brig Chief's office to better accommodate the - redesigned processing room. -2019-07-23: - CrimsonShrike: - - rscadd: Exosuits have been completely refactored. Make sure to check your skills - before joining the round. - - rscadd: You can now slide ID across a PAI to grant them your access. - Devildabeast: - - rscadd: Adds a unique holosign to the Chapel airlock. - - rscadd: Adds Jainism and Taoism to the list of human religions. - - rscadd: Adds two new chaplain insignia for Jainism and Taoism. - Eonoc: - - tweak: Tweaks Vox codex entry - - rscadd: Add Vox shriek audible emote - afterthought2: - - tweak: Manually toggling apc settings will no longer raise alarms. Also applies - to some mapped APCs. - ghostsheet: - - tweak: Electron reservoir will now shock you upon bumping/getting thrown into - it. - mikomyazaki: - - tweak: Supermatter manual will now show you the wiki page for the Supermatter - Engine. - - bugfix: Underwear will now no longer be kept on species change, if the species - you are changing into cannot wear underwear. -2019-07-24: - Chinsky: - - tweak: Earmuffs now actually muffle sounds. You'll also not hear spoken things. - - rscadd: Headphones can actually play music now. Drag onto yourself when worn in - ear slot to access menu. They act as earmuffs when music is playing. - mikomyazaki: - - bugfix: IV Bag construction option name changed from 'plastic bag' to 'plastic - IV bag' so it is different from the other 'plastic bag'. -2019-07-25: - WezYo: - - tweak: Aiming point blank at someone will actually aim at them now - YodaDoge: - - tweak: Order Ranks of Jobs ascending so the lowest rank is selected by default - afterthought2: - - rscadd: An overmap-capable shuttle can now catch/grapple another overmap-capable - shuttle currently moving on the overmap. You do this by moving to an appropriate - landmark on the shuttle console. - - rscadd: If a shuttle is grappling another shuttle, it cannot move on the overmap; - it will be moved by the other shuttle. - - rscadd: If a shuttle is being grappled by another shuttle, it cannot make shuttle - jumps until the grappler has left. - - tweak: Ships within ships count towards vessel mass now, meaning you'll accelerate - slower with them landed/attached. - - tweak: All greentext for antag objectives and game modes has been removed. - babydoll: - - tweak: All hivebots now have increased health. - - tweak: Increased hivebot megafauna 'hivemind' damage output. - - tweak: Reduced hivemind vulnerability duration. - - tweak: Reduced hivemind cycle duration. -2019-07-27: - zaredman: - - maptweak: The larger portion of the Security Armory is now Equipment Storage. - Security Staff now have access to this room. -2019-07-29: - Chinsky: - - rscadd: Added a medical health checkup to Reports program for all you thirsty - doctors - CrimsonShrike: - - rscadd: Exosuits can now be repaired without using a recharger using either a - welding tool or cable coil depending on damage. - Devildabeast: - - rscadd: Adds Hephaestus Titan, a bulky full-body prosthetic, and Morpheus Atlantis, - a skeletal head prosthetic, to chargen. - Eonoc: - - bugfix: Fixes the Vox spacesuit light overlay from a grey hat, to just nothingness, - since I didn't feel up to making new sprites for it, and most of the suits have - glowy-looking bits anyway. - Rain7x: - - tweak: Makes the "boot selection" in loadout available to civilians only. - Spookerton: - - tweak: Prosthetic limbs previously named Grayson are now named Shellguard. - mikomyazaki: - - tweak: Unathi brains will now not accept being MMI'd. - - tweak: Unathi may no longer have prosthetic internal organs attached. - - tweak: Unathi may not start the round as FBPs. - - tweak: Unathi may no longer select assisted or synthetic internal organs on round-start. - - maptweak: Vox ship burn chamber now operates properly (fixes incorrect injector - settings) - - maptweak: Vox ship burn chamber can no longer cause the ship to self-destruct - due to temperature melting the windows, since they have been replaced with walls - that handle up to 12,000K. - - maptweak: Adds a temperature/gas sensor to the burn chamber. - - maptweak: Vox ship ignition switch now isn't hidden under a light. -2019-07-30: - Rain7x: - - tweak: Medical & Engineering trainees can now select their department specific - webbing & drop pouches; and medical trainees now have access to their department - armbands. - mikomyazaki: - - tweak: Senior Engineer now gets access_network, allowing them to use the NTNet - Diagnostics and Monitoring program and various command line tools. - - tweak: Access hacking antag program can now hack access_network, if the antag - has master level IT skill. - - tweak: The NTNet Quantum Relay in telecomms will now keep physical logs of network - activity, wiping the NTNet Diagnostics Program logs will not affect these, and - they cannot be accessed remotely. The portable drive can be removed via a UI - eject button and the data imported from it into a modular computer. - - maptweak: Telecomms storage room now has a couple of spare portable hard disks. -2019-07-31: - Devildabeast: - - rscadd: Adds colorable bracelets to the loadout. - WezYo: - - bugfix: Requesting pAI personalities works now -2019-08-01: - BlueNexus: - - rscdel: The Security cyborg module has been disabled. - afterthought2: - - bugfix: Chloral hydrate is once again effective; this applies to sleepy pens. - babydoll: - - rscadd: Added the antlion and antlion queen to desert exoplanets. - - tweak: Moved the giant crab megafauna to snow exoplanets. - mikomyazaki: - - bugfix: Nacelle control switches in the engineering monitoring room will now work. - - bugfix: Fixes issue that prevented organ transplants. -2019-08-02: - CrimsonShrike: - - rscadd: Added 2 new exosuit propulsions. The quadlegs and the armored tracks. - - tweak: Speed tweaks to exosuit legs. - Noble Caos: - - rscadd: Allows nascents gestalts to add human-sized mobs when the gestalt contains - 20 nymphs. - babydoll: - - tweak: Renamed all tasers in their various forms to electrolaser. - zaredman: - - tweak: Re-adds the Torch variant of the Sec-Tech and actually stocks it with more - gear. -2019-08-03: - Boznar: - - maptweak: Nacelles now have air alarms, fire alarms, and fire doors. - Nirnael: - - bugfix: Fixes bug in using a new apc frame on a broken apc to repair it. - Rain7x: - - tweak: Tweaks the event announcement messages to be more tone-neutral & standardizes - the announcement header - WezYo: - - tweak: Attaching a photo to a newscaster story will no longer remove it from your - hand - afterthought2: - - tweak: The shield generator has been reworked. It is now much more expensive to - keep the shields on continuously, and for large shields it's likely not viable. - - rscadd: The shield generator now has an idle and active state (as well as the - off state). In the idle state, it consumes limited power and does not generate - a shield. In the active state, it consumes a lot of power and produces a shield. - - rscadd: If an idle generator is toggled on, it takes a short amount of time to - spin up to active state. If an active generator is toggled to idle, it will - switch to that state instantly. - - rscadd: There are several levels of idle power usage that can be selected. Higher - power usage decreases the spin-up time proportionately. - - rscadd: The shield generator takes time to adjust the radius of the shield. The - radius will not be adjusted while the shield is active. - - tweak: The shield generator's power storage has been vastly expanded. - - tweak: The shield generator's field integrity is now tracked separately from the - power storage (it's determined by the amount of power stored, up to a threshold). - mikomyazaki: - - tweak: Radiation collectors are now capped at 500kW output at 250Bq radiation. - They are more efficient at lower radiation levels. - - tweak: Radiation collectors will have variable fuel usage, capping out at 250Bq - radiation. Fuel usage increased significantly (1-10x depending on radiation - levels) - - tweak: Radiation collectors will now break from high radiation levels (500Bq) - as well as temperature, they will display a warning and play a warning sound. - - maptweak: Stowaways can no longer spawn in the incinerator room, which they cannot - leave. - - bugfix: Fixes inconsistent icon names for female jumpsuit icons. Should work for - rolling down / roll sleeves for all jumpsuits/suits now. -2019-08-04: - Bxil: - - tweak: Inflatables now have 1 second delay. - Chinsky: - - rscadd: Adds 'Codex' verb that shows user the 'frontpage' of codex, with links - to search / index / categories. - Eonoc: - - rscadd: Adds a Vox RIG. Same statline as the Industrial RIG, but with full temperature - and radiation resistance. Vox had no way to scavenge radioactive or volcanic - planets up until now. - - rscadd: Adds flux cannon. Essentially a Vox AEG, but with the lasers doing brute - damage, and shock mode replaced by a mode that scatters low damage pellets in - a burst. - - rscadd: Adds sonic cannon. A vox stun rifle, with a mode that uses up all the - gun's charge to push, deafen, and dizzy an opponent. Ear protection such as - helmets and earmuffs will negate the deafening, and reduce the dizziness. - - rscadd: Added the associated projectile types for both above, obviously. - - rscadd: Added two new firing sounds, spike.ogg and eLuger.ogg - - tweak: Changes spike launcher firing sound to spike.ogg - - tweak: Stealth buff to Armalis to make their large size reflected more mechanically. - - tweak: Changes the Vox species check on Vox guns to make the guns hiss and jump - out of your hands. - WezYo: - - rscadd: CSO now has maint access - - rscdel: Removed the discard verb from playing cards - - rscadd: Added the ability to pick a card by clicking it with an open hand - comma: - - tweak: Blunt yet sufficiently strong weapons can now pop inflatables - mikomyazaki: - - bugfix: Yeosa unathi have correct job restrictions now. -2019-08-05: - mikomyazaki: - - tweak: Resisting will auto-cancel resting. -2019-08-07: - BlueNexus: - - tweak: All non-total radiation resistance values for suits etc have been halved. - - tweak: The Supermatter, nuclear reactor, R-UST, PACMANs and other radiation sources - which were too weak to be relevant have been buffed. - - tweak: Radiation sources that were deemed to be too strong have been nerfed, such - as garbage planets. - - tweak: Grilles have had most of their radiation resistance removed. - - tweak: Low walls and windows have had their rad resistance halved, so they add - up to a full 100% instead of 200%. - MistakeNot4892: - - rscadd: Added a more involved butchery system. - - rscdel: Removed stowaway. - mikomyazaki: - - maptweak: Double sets of windoors now have only the interior windoor at department - reception desks. - - bugfix: Low wall frames deconstruct into 3 steel sheets, which is the amount required - to build them. - - maptweak: Robotics central windows are now not tintable, surgery area still is. - - tweak: Autoinjectors now have a timer for use on other people, instant for yourself - OR on incapacitated people with any skill level. They take a third the time - compared to a syringe. -2019-08-08: - Cajoes: - - maptweak: Reworked the abandoned shooting range space into additional lavatory - facilities and a sauna. - - rscadd: Adds a wooden bucket -2019-08-10: - Bxil: - - rscdel: The asteroid will no longer spawn at the Torch every round. - mikomyazaki: - - bugfix: Relocating limbs will now properly always work when you have high enough - medical skill. -2019-08-12: - Boznar: - - maptweak: Adds shutters to the exterior windows of hydroponics, aft bubble, and - lounge. - Chinsky: - - tweak: Medical Technicians can no longer have Anatomy skill at Experienced or - higher. - - tweak: Surgery skill reqs and penalties got beefed up. - - tweak: Most surgery step require both Trained Anatomy AND Expert Medicine. - - tweak: Delicate' surgery steps (basically inside organ stuff) require both Expert - Anatomy AND Expert Medicine. - - tweak: Penalties to success chance for missing skills were jacked up mercilessly. - Unless you're missing 2 or less skill levels you're not going to succeed, sorry - bud. - - tweak: Physicians now start with Expert Medicine, free skillpoint pool lowered - by its cost. - - tweak: Robotic steps require Trained Complex Devices. If there's meat bodyparts - involved (e.g. installing into one), need both Trained Complex Devices and Trained - Anatomy - - tweak: Slime surgery steps require Trained Science. - Piccione: - - tweak: Heads of Security are now are better screened to ensure loyalty to the - SCG - ghostsheet: - - tweak: Butterfly knife damage is now slightly lowered. Still pretty deadly. - mikomyazaki: - - bugfix: Airlock bolt buttons (e.g. SMES room and engine hatch doors) will now - work. -2019-08-13: - Terror4000rus: - - rscadd: You can take a pill from pillbottle by using it. - YodaDoge: - - tweak: reduced shield power usage - ghostsheet: - - tweak: Due to the space related mortality rate of our recent expedition, the EXO - has increased funding to restock EVA equipment. There are now 5 jetpacks and - 3 cooling units in EVA on deck 3. - mikomyazaki: - - bugfix: Resetting a tech you have no levels in at the RnD Server will no longer - give you 1 in that tech. - - rscdel: Removes Arcane Tech, as it did nothing. - - rscadd: Worn RIG suits will now be charged if you walk into a cyborg recharger. - If you have an internal cell (FBP/IPC) then that will charge first. - - bugfix: Airlock access buttons will now work even if the area they are in has - no power. - - rscadd: Traitor Robots will get a verb 'Reset Identity Codes' that will remove - their external camera connection, robot console connection and lawsync status. - - bugfix: Fire axes can now attack unpowered airlocks on harm intent, regardless - of the damage level of the door. - - tweak: It now takes several hits to get through an undamaged door with a fire - axe. -2019-08-14: - MistakeNot4892: - - rscadd: Added a new human subspecies, the boosters. - mikomyazaki: - - tweak: Illegal Tech is renamed to Esoteric Tech. Producing items with this tech - & having esoteric tech levels is not illegal, however possession of those items - may be if they appear on the contraband list. - - bugfix: Petrov RnD console will start the round able to access the Core RnD server - data and sync with the rest of the Torch. - - bugfix: Elevator will no longer get stuck when you give it multiple move orders - via the elevator panel or the buttons on each floor. It will wait for nine seconds - on each floor and then move to the next one in the list. - - rscadd: Surveyor Flying Robots now have an emag item, an energy machete. -2019-08-15: - Cajoes: - - tweak: Improved kitchen utensil visibility on grey surfaces. - babydoll: - - rscadd: The drake megafauna can now spawn on volcanic exoplanets. - mikomyazaki: - - rscadd: As the Torch now starts at random coordinates, the Torch round-start sensor - scan will list these coordinates so it is clear where the bearings point from, - incase you forget / join the round late. -2019-08-16: - mikomyazaki: - - bugfix: RnD server control consoles will only connect to things on connected Z-levels. - So the Torch won't pick up away-site RnD servers only the RnD server control - console. - - tweak: Robots can open the door control menu again, like AI. - - tweak: FBPs don't get affected by their species slowdown stat, positive or negative. - - tweak: Robotic eyes ignore your species flash modifier. - - tweak: Robotic eyes don't get species darkvision bonuses (e.g. from Space-Adapted - Humans) -2019-08-17: - ghostsheet: - - maptweak: Torch's fuel pipes have been slightly remapped into safer positions - with parts segmented by automatic shutoff valves to prevent leakage. The fuel - lines has also been removed completed from the SM heating element (although - the HE pipes are still there) and they should now be able to survive an SM delamination. - To balance out these safety features, fuel line pressure has been doubled to - increase the risk of bodily harm. - mikomyazaki: - - bugfix: Glasses that apply a vision overlay (mesons, tactical goggles, etc.) will - no longer function when you are using a sensor console to view the overmap. -2019-08-19: - Chinsky: - - tweak: Can no longer sample plants with machet. Need an edged weapon of size 'small' - or 'tiny'. Normal size and above will chop as usual now. Harm intent also forces - chopping instead of sampling. - - tweak: Can alt-click vines when holding normal-sized blade (machet) in hand to - chop them down. It'll take a short time, faster if you have Trained botany skill. - Basically less chat-spamming alternative to just bashing them down. - mikomyazaki: - - bugfix: Ghosts can't interact with space heaters anymore. - - bugfix: Stacks of one sheet will now not be deconstructable twice in the deconstructive - analyzer. -2019-08-20: - Devildabeast: - - bugfix: Mules will no longer spawn with psi-dampener implants. - MistakeNot4892: - - rscadd: Added a new human subspecies, the Mule. Mules can be merchants or submap - roles. - mikomyazaki: - - bugfix: Space vine event will now never have invisible vines. - - bugfix: Surveyor drone now has skills. -2019-08-22: - ghostsheet: - - rscadd: SMES chance to discharge is now skill based, with 50% increase at unskilled - and 50% decrease at master. - sunofang: - - maptweak: Revamps the yacht into a prettier state. -2019-08-23: - Boznar: - - maptweak: Adds large vents to both sides of the engine room. These can be opened - with a button in the emergency box in the control room. - - maptweak: Renamed all of the glass box emergency buttons and added descriptions. - - maptweak: Engine hatch bolt control button has been moved to the inside of the - engine room next to the hatches. - Cajoes: - - rscadd: Commissary now spawns with a vending machine. - - tweak: tweaked the sauna thermostat and auxiliary space heater to bring the room - up to a comfortable 348.15 kelvin. Which I am reasonably sure the human body - can tolerate. For a while. - MistakeNot4892: - - rscadd: Enhanced an opossum. - mikomyazaki: - - bugfix: Adherents now properly get their speed bonus again. -2019-08-24: - Anticept: - - rscadd: Water tanks are now immune to atmospheric temperatures - - rscadd: Fire extinguishers can be filled from sinks! When full, they are instead - washed. - - rscadd: Fancy progress bar when washing in a sink! - - bugfix: Slightly refactored sink washing code. if a user interrupts the process, - it will not continue processing the item or most item effects. - ghostsheet: - - rscadd: Floodlights are now constructable circuit machines. - - rscadd: Floodlights can now be upgraded with capacitor components, for increased - brightness with a higher power cost. - - bugfix: Floodlights also work in areas without APC. -2019-08-26: - Boznar: - - maptweak: Shield generators have been consolidated to a single shield bay with - its own substation. Bridge deck shield has been left in place to account for - all 5 shield generators. Shields also have their own SMES units so that configuring - each individual shield can be done more precisely. - - maptweak: Bluespace drive has been remapped to be prettier. It is no longer considered - a maintenance area and wont spawn drones or trash. - - maptweak: Deck two saferoom has been removed to make room for these changes. - Plaguewalker: - - imageadd: Adds 3 new FBP variants for Morpheus - Blitz, Airborne, and Prime -2019-08-27: - Bxil: - - tweak: The Bluespace Artillery has been rebranded to Obstruction Field Disperser. - Cajoes: - - tweak: Ascent Cutter has been updated. - ghostsheet: - - bugfix: Fixes various bugs for emergency fire shutters construction/deconstruction, - such as going invisible, returning incorrect amount of metal and skipping steps. - - tweak: Emergency fire shutters will now have a delay for welding them. -2019-08-30: - CrimsonShrike: - - bugfix: Fixes exosuits being able to use all modules at any range. - Devildabeast: - - rscdel: Removes the Biomechanical Engineer as a role. - - tweak: Gives the Roboticist trained Anatomy by default. - Rain7x: - - tweak: The sleepy pen now contains Vecuronium Bromide instead of Chloral Hydrate. - WezYo: - - bugfix: Ghosts can no longer interact with pagers - ghostsheet: - - bugfix: Fixes toolbelt overlay. Putting tools into toolbelt will now show up the - belt icon again. -2019-08-31: - BRAINOS, Plaguewalker: - - rscadd: Ported new prosthetic types from Aurora; Bishop Rook, ZH Spirit, Xion - Econ - BlueNexus: - - rscadd: Sauna heaters and reagent sublimators can now be emagged to make them - accept any reagent. - Bxil: - - rscdel: The OFD can now only shoot at overmap events. - WezYo: - - rscadd: Skrellship crew can now be selected as provocateur -2019-09-01: - Hubblenaut: - - imageadd: Adds new sprites for the TEGs, made by spriter who does not want be - named. - Zenithstar: - - maptweak: Maintenance near the shield bay now has radiation shielding. - babydoll: - - maptweak: Replaced all the various depreciated shield rooms. - - maptweak: Split the bluespace drive chamber into two areas for air alarm accuracy. -2019-09-02: - babydoll: - - tweak: Reduced attack frequency and damage for nearly all castes of asteroclast. - - tweak: Asteroclast nucleus' values change as they're damaged. They become more - aggressive, but more vulnerable to attack, and spend more energy regenerating - than trying to expand. - - rscadd: Added incense cones. - mikomyazaki: - - imageadd: Adds the 'Trimmed Right Sidecut' hairstyle. -2019-09-03: - CrimsonShrike: - - rscadd: Adds second robo slot since biomech is now gone and workload is too high. - Devildabeast: - - rscadd: Adds a Morpheus Cyberkinetics labcoat to the loadout. - Piccione: - - rscadd: Added Crosses buildable out of Material Sheets. Can also be found in Loadout. - Rain7x: - - rscadd: Added "Resident" Physician Alt Title - - rscdel: Removed "Trauma Surgeon" Alt Title -2019-09-04: - CrimsonShrike: - - rscadd: Mapped a basic exosuit to the cargo bay. -2019-09-06: - BlueNexus: - - tweak: Default Cyborgs no longer have stunbatons -2019-09-10: - Boznar: - - maptweak: Skrell Air alarms are now set to 40 degrees instead of 65 degrees. Server - air alarm added to Skrellship engineering bay at 20 degrees. - Chinsky: - - tweak: You can now grab yourself. Can't grab grabbing limb (e.g. right arm with - right hand), can't throw yourself, can't nab yourself. Otherwise you can do - whatever you want, like inspecting limbs, or covering your own eyes, or dislocating - your leg as a party trick. - Nirnael: - - rscadd: Adds pencode tags [pre] [fontblue] [fontred] [fontgreen], with closing - [/pre] and [/font] universal for the three fonts. They only work digitally with - nanoword, emails, report editors and direct txt files. Font color gives color, - [pre] gives monospace font and preserves whitespace spaces only and not tabs, - e.g. for ascii art. - - rscadd: Gas analyzers now show total moles, total volume and moles per gas, check - codex for more info. - - bugfix: Fixed robot inventory not updating automatically when dropping items which - are stored back into it. - - bugfix: Saving emails to a txt file on disk now works correctly and can be printed - with the new tags. -2019-09-11: - Spookerton: - - tweak: Added guidance on law priority and conflicts to the text shown when laws - are listed. -2019-09-12: - WezYo: - - rscadd: Adds new paperwork commands to the pen codex - ghostsheet: - - rscadd: Gas thruster is now modifiable machine. - - bugfix: Gas thruster now hooks up to their ship when built. - - rscadd: Gas thrusters now has a boot up time. - - rscadd: Gas thruster can be upgraded with matter bin for extra fuel intake volume - and less boot up time or capacitor for energy efficiency. - - rscadd: Gas thrusters has an increased energy usage on idle (6 Wh per tick so - every 2 second) and 10 Wh per burn. So please keep them off unless you need - them, for that same reason all thrusts starts offline. - - tweak: Guppy's mass and max speed has both been increased. - zaredman: - - tweak: Wizard and Ninja now require a minimum of 5 players. -2019-09-13: - babydoll: - - rscadd: Added geese, available in the supply menu. -2019-09-14: - BlueNexus: - - tweak: Tripled the damage mobs take from being in low pressure - afterthought2: - - admin: Some rudimentary spam prevention has been added. Offending users will be - kicked and noted, and you will receive notice of this. If you see patterns of - abuse, further admin action may be warranted. False positives due to overly - aggressive client macros may be possible. -2019-09-15: - WezYo: - - bugfix: Turning on a floodlight will no longer make it invisible - babydoll: - - experiment: Disables macro use. -2019-09-16: - Anticept: - - bugfix: Rigsuit codex entries now read the correct armor values for each piece. - Has no effect on damage calculations, that has always worked correctly. - - tweak: Medical voidsuit descriptions no longer imply that they have some incredible - radiation resistance, but it's still relatively good to most things in the game. - - tweak: Medical voidsuit bomb resistance values increased slightly. It's still - not a bomb suit! -2019-09-17: - Rain7x: - - rscdel: Removed old Research Director gear from the CSO locker -2019-09-18: - Chinsky: - - tweak: Inflatables now have maximum pressure difference and maximum temperature - they can endure. Currently it's 5000 kPa pressure difference and 5000 K temperature. - Every second or so when they're in worse condition than that it'll take damage. - You can patch them once with duct tape but otherwise just consider more permanent - solutions. - Rain7x: - - tweak: Members of the exploration department can now select Science Goggles, Botany - Gloves, and the Brown Webbing Vest in loadout - - tweak: Non-Civilian pilots can no longer take the EXO Flightsuit - - tweak: Webbing names now reflect their color, rather than their department. - bitMuse: - - rscadd: Added an empty autoinjector schematic to autolathes. -2019-09-20: - Rain7x: - - bugfix: The supermatter grenade box now has a working icon and is no longer invisible. - SparklySheep: - - rscadd: Adds in the fake moustache as a cheap 1 crystal item for traitors. It - will hide your identity, but that's about it. -2019-09-21: - Rain7x: - - rscadd: Added the biowaste disposal cart, for disposing of organs. - ghostsheet: - - bugfix: Boosters randomised speed has been fixed, no more indefinite speed malaise. -2019-09-23: - Imienny: - - tweak: Change heavy armor plate slowdown from 1 to 0.5 - babydoll: - - tweak: Sunglasses no longer provide full protection from handheld flashes, instead - halving their effect. - - tweak: Green glasses now have prescription lenses. - bitMuse: - - rscadd: Added reagent grinder, chemical heater, and chemical cooler to Unishi - Chem Lab. -2019-09-24: - Chinsky: - - rscadd: Added vitals monitor machines. Drag them onto people to 'hook' them. They - will display general state of brain activity, pulse and breathing, with blinky - warnings if something's wrong. - - maptweak: Replaced computers by optables with vitals monitors. - - rscadd: Chemical explosions (welderfuel and ANFO) now produce a bunch of heated - gas during explosion. - - rscadd: Welderfuel produces N, NO, NO2 and a pinch of Hydrogen for flavor - - rscadd: ANFO produces CO2, nitrogen and water - - tweak: '''Settled'' exoplanets have been renamed to ''ruined'' for 23% less confusing.' - NanakoAC: - - tweak: Adds bottled water to gym vendor - - tweak: Adds bottled water to ration crates - adamkad1: - - rscadd: Variation of artery repair surgery for Kharmaani - bitMuse: - - rscadd: Added gyrotron recipe. - - rscadd: Changed minimum fire rate of gyrotron from 1 to 2. Nerf. - ghostsheet: - - rscadd: Pipe dispenser is now a modifiable machine. - - rscadd: Pipe dispenser circuit is now a printable research design. - - bugfix: Disposal outlet will now properly eject objects outside of shuttles - - tweak: SMES installing/removing components are possible while active. They still - need to have their safety wire disabled but this will allow for more sabotage - or anti tampering opportunity. - - tweak: SMES discharge will now call electrocution (with some minor nerfs so it's - little less lethal), so insulation and armour will be taken into calculations. - - tweak: SMES will now shock people upon pulsing/cutting the grounding wire, similar - to vending machines. The severity is based upon the SMES's powernet and is reduced - with the safety wire on. - - tweak: Stun acts (from weapons) will now take existing pain of limbs and any painkillers - into account. - - tweak: Stun acts will now rely on pain to calculate, so damaged limbs will go - down to stuns easier. It also means it longer affect robotic limbs or anything - that can't feel pain. Ya IPC! - - tweak: Painkillers will now resist some stun effect due to them blocking pain. - - tweak: Stun weaponry now deals a very small amount of burn for flavor, 1-3 burn - depending on the gun. - - bugfix: Stun act will now work properly on body shots, bringing down targets with - enough pain on chest/head/groin shots. - - tweak: Robolimbs will no longer have blurry eye/ stutter or create adrenaline - upon being hurt. - - tweak: Adjusted some stun and shock duration, lowering most of it. - - tweak: Shock has a lower tier stun effect, stunning people that takes 10-15 damage - for 2 seconds. - - tweak: Shock and Stuns weapon inconsistency and damage has been adjusted. - - tweak: Shock will now activate a weak local EMP on the limb they hit (if they - deal more than 10 dmg), frying any implants, augments or synthetic organs inside - and also the limb they hit. They will neutralise an IPC/FBP after 3/4 shock - shots to the chest, frying their microbattery. - - tweak: EMP on robotic limbs will make them fail. EG. as Shock beam to a roboleg - will cause it to collapse. - - tweak: EMP now deals more damage to internal synthetic organs. - - tweak: Implants are now vulnerable to EMP if they weren't already. EG, shock beam - might fry, disables or activate the implant. - - tweak: Security and Engineering (not atmospherics) voidsuit is slightly more insulated - against shocks and stuns. Still not as a good as a hardsuit. - - tweak: Light bulbs can be taken down without gloves, on non help intent, for extra - badassery. - - tweak: Wall toss will now take armor calculations into account. - - tweak: Rejuvenate will now restore stamina. - - bugfix: APC construction has been fixed, they will now be deconstructable even - when broken. - - tweak: Space adapted human oxygen pressure requirement has been lowered to 14 - kPa. - - tweak: Grav adapted human oxygen pressure requirement has been increased to 18 - kPa. - - tweak: Grav adapted strength has been increased to high, this means they get reduced - slowdown for wearing or carrying heavier gear, eg. dufflebags, voidsuit. Still - slower than human in most regards. - - tweak: Unathi oxygen pressure requirement has been increased to 20 kPa. They - need more oxygen to support their extremely robust metabolism. -2019-09-25: - MrKicker: - - tweak: Command announcments are now multi-line. - - tweak: Command Announcements can now be multi line to allow for clever formatting -2019-09-26: - Boznar: - - maptweak: Adds mineral processing, chemistry, and cages to the ascent seedship. - - rscadd: Adds voidsuits for Alates to replace the hardsuits as base gear. Hardsuits - can still be granted to alates at the Gyne's discretion. Icons and code credit - to Zuhayr/Loaf/MistakeNot. - Chinsky: - - rscadd: Using xenolife scanner on a stasis cage will now scan the animal inside. - CrimsonShrike: - - rscadd: Exosuit pilots can now manage their inventory, throw items and some other - minor actions so long the cockpit is open. This prevents usage of exosuit modules. - Imienny: - - tweak: Ammonia now work like Dexalin Plus for Vox instead of removing oxy loss - - tweak: Nerfs Vox breathing mask to filter out only oxygen - - tweak: Updates Vox alien mask's filtered gases list - - rscadd: Adds inaprovaline autoinjector to Vox survival kit - - tweak: Change Vox minimum/maximum age from 17 - 70 to 1 - 100 - - tweak: Vox get +8 skill point bonus instead of bonus based on their age. -2019-09-27: - Chinsky: - - tweak: Made modular computer consoles proper machines instead of big items. Report - any odd behavior. - - tweak: Modular computers are now constructed via normal computer frames, requiring - a circuitboard and various generic machinery parts like input/output controllers - like other computers. - nearlyNonexistent: - - tweak: Janitor module synths now have a welding tool, to remove graffiti with. -2019-09-28: - EcklesFire: - - tweak: Made EC scarves for all uniforms, not just Dress. - comma: - - rscadd: Adds loadout accessories that are locked behind Trained skill level. - ghostsheet: - - tweak: Rescue rig can now carry an inflatable dispenser in its suit slot. - - tweak: EVA and CE rigsuit's offline slowdown has been increased to standard offline - slowdown. - - tweak: Mining prep, and prospector's locket has its round start equipment changed. - - tweak: Mining voidsuit has its laser resistance lowered and its bullet and energy - resistance rounded up, to be more a well rounded suit. - - tweak: The industrial rig has its tint lowered to moderate. -2019-09-30: - Chinsky: - - tweak: Windows now have much less health. - ghostsheet: - - maptweak: Most interior windows inside medical are now non-reinforced windows - - tweak: Full-tile glass are now tintable whereas border windows are not. -2019-10-01: - ghostsheet: - - bugfix: Overmap shuttles can now dodge meteors again. - nearlyNon: - - bugfix: Certain IPC monitor options will no longer shapeshift you into a Morpheus - monitor head. -2019-10-03: - Boznar: - - maptweak: Lepidoptera has been remapped to be more compact for planetary landing. - Extra space has been utilized for additional rooms. - - bugfix: Ascent airlocks will now all cycle and dock correctly. - - maptweak: Ascent seedship walls made more uniform. Keel is composed of reinforced - walls, while the outside is regular walls. The Tricoptera has been tweaked to - prioritize form over function. - Chinsky: - - rscadd: Adds entries for skills to Codex. They have description and what levels - of skill mean. - - rscadd: Minimum character age for jobs is now code-enforced. You may have to adjust - your chars to be able to join as your preferred job. - Rain7x: - - tweak: The labcoat can only be selected in loadout if your job would realistically - require it. It has also been removed from the medical wardrobe. - WezYo: - - bugfix: Fixed janibot and medibot crafting - comma: - - tweak: Larger internal organs are now more likely to get hit than larger ones - - tweak: Energy-based weapons are now in many cases less likely to cause internal - organ damage than ballistic weapons (based on damage output) -2019-10-04: - Rain7x: - - rscdel: Several alt tiltes have been removed. - - tweak: The job Chemist is now called Pharmacist. -2019-10-05: - Flying_loulou: - - rscadd: Creates the red ("grunt"), Yellow (Senior) and White (Chief) Damage Control - Helmets - - rscadd: Damage control helmets have now been issued to the engineering department, - they can be found in the engineer's personnal equipment lockers. - WezYo: - - bugfix: Fixed transferring reagents between beakers -2019-10-06: - Chinsky: - - tweak: Thrown items will go down the ladder if they hit it. - - tweak: If you use Move Up verb, it will try climbing random climbable turf above - if you couldn't just straight up move up. -2019-10-08: - PhosphoricPanda: - - tweak: Stabilization kits now have a radiation pouch. - nearlyNonexistent: - - rscadd: Non-Branded Spirit Boards. Gather around in the dark with another friend, - and move the planchette around. Now only works in cult rounds, otherwise just - is silly fun. - - tweak: Steaks, kabobs, and a few other recipes use cutlets instead of full-on - slabs of beef. (Plain steaks don't due to the sprite) -2019-10-10: - Chinsky: - - tweak: Stack recipies that you don't have skills for are now visible too, marked - with red warning label. You can even attempt them, wasting resources almost - certainly. -2019-10-11: - Cakey: - - bugfix: Fixed airlock paint vanishing when interacting with unpowered airlocks. - ghostsheet: - - tweak: Default aim mode allows all movement, items an radio uses. -2019-10-12: - Flying_loulou: - - tweak: Sailors rejoice ! New coveralls have been issued by the fleet. - Mordeth221: - - rscadd: Adds fancy pens to character loadout -2019-10-13: - CrimsonShrike: - - rscadd: Adds exosuit energy shields. - ghostsheet: - - maptweak: Deck 4 aft airlocks' controllers are now accessible from inside of the - airlock, so they can be more easily cycled and force. They are still not accessible - from the outside. -2019-10-14: - Chinsky: - - tweak: OCIE renamed to SFP (Sol Federal Police). There was never OCIE. - Rain7x: - - rscdel: The Corporate Security Beret has been removed from the loadout. - ghostsheet: - - rscadd: Plasma cutters can now be ordered from supply, they are locked to mining - access and engineering access - - tweak: Plasma cutters now needs trained construction to deconstruct safely. - - rscadd: Updated the skill description of the EVA, Piloting and Construction skills. - - bugfix: Fixes gun accidents only hitting the user; instead now everything in their - general vicinity is fair game. -2019-10-15: - Nanako: - - rscadd: Airlocks, curtains, ladders and cult runes can now be interacted with - by clicking the floor in their tile. - - tweak: Lift call buttons and panels are now easier to click -2019-10-16: - Anticept: - - bugfix: PAI should no longer fold up when hitting it with an access card while - on help intent. - Chinsky: - - experiment: Armor calculations and some values were changed. It should be generally - more protecting now. Report weird stuff happening. - Datraen: - - bugfix: Microwaves now properly handle non-item based recipes all the time - LiljaMortensen: - - imageadd: Updated holopad sprites - PsiOmegaDelta: - - tweak: Most objects now always consider ghosts to be adjacent when examined - - tweak: Must now shift+click to interact with boardgames - - tweak: Must now shift+click to interact with integrated circuits - nearlyNon: - - maptweak: Counselor's office reworked to have an actual desk. Much more comfortable. -2019-10-17: - Flying_loulou: - - tweak: Resprites the red O2 tank to make it look like an actual firefighter's - tank. - - tweak: The duty boots, jackboots and workboots are now fireproof. - - tweak: The firesuit no longer covers the whole body, but only the chest, arms - and groin. - - rscadd: Adds a "fire overpant", to be worn over the uniform as an accessory to - protect your legs against a fire. - - rscadd: Adds the fire gloves, fully fire proof. - - rscadd: Adds the EFT (Emergency Forcing Tool). - - rscadd: Adds the "water grenade" to fight fires more efficiently. - - rscadd: Creates the firebelt, which has 5 slots and can contain EFTs, water grenades, - inflatable doors and mini-extinguishers. It comes filled with 3 water grenades, - 1 EFT and 1 inflatable door. - - rscadd: Adds the new equipment in the fire closets (places them into a dufflebag - for convenience) - - tweak: In order to survive a fire, you now have to wear the fire overpants, firesuit, - fire gloves, duty boots (Jackboots and Work boots are fire resistant as well), - as well as a fire resistant helmet/hardhat and proper internals. -2019-10-19: - CrimsonShrike: - - rscadd: Allow some more interactions from inside exosuits such as grabbing items - from clamp if the cockpit is open. - Marie Taylor: - - imageadd: Updated fridge sprites - - imageadd: Updated pylon sprite - - imageadd: Resprited holopad, the artist of the previous version has been executed - - imageadd: Resprited bell - - imageadd: Added ringing animation to bell - - imageadd: Resprited notice board, added 4 dir -2019-10-20: - Anticept: - - bugfix: PAIs, Photos, Integrated Circuit Printers, Printed Crew records, and Warrant - Projectors should be working again. - Ithalan: - - bugfix: Fixes modular computer icons not updating automatically for certain monitoring - program events. - WezYo: - - bugfix: Fixed crafting floorbots -2019-10-21: - Nirnael: - - bugfix: Fixes personal closets. - ghostsheet: - - soundadd: Voidsuit now has sounds for tank ejection and disassembling. -2019-10-22: - Higgin: - - bugfix: SecHUDs and goggles will now protect against flashes and flashbangs as - they used to. -2019-10-23: - Marie Taylor: - - imageadd: Resprite of crates, open decals added - Spookerton: - - admin: Build mode has an area viewer/editor. - ghostsheet: - - tweak: Senior researcher no longer has access to mining. - - bugfix: Plasma cutter crate access has been fixed to work with both engineering - and mining access - - tweak: Supply's warehouse is now open to mining access. -2019-10-24: - Boznar: - - maptweak: Maps Vox rigs, soundcannon, and flux cannon to Vox base - CrimsonShrike: - - rscadd: The SEV Torch is now fitted with point defense batteries, that will protect - certain parts of ship from meteor impacts. - ghostsheet: - - tweak: Supply's mechsuit now has two hydraulic clamps instead of a drill. -2019-10-27: - Higgin: - - tweak: Radicals rejoice! Head Revolutionaries once again get traitor uplinks. -2019-10-28: - Ithalan: - - bugfix: Fixed several cases of missing powercables underneath doors and tables - aboard bearcat - - bugfix: Fixed a couple of tiles in bearcat atmospheric compartment that were permanently - without pressure or gravity - - maptweak: Added girders and a few walls to more clearly indicate original extent - of damaged rooms aboard bearcat, for purpose of predicting APC and gravity coverage -2019-10-29: - BlueNexus: - - tweak: Nerfed the bloodsucking creatures often found on away sites -2019-10-30: - SierraKomodo: - - rscadd: Added rooibos tea, chai tea, chai latte, london fog, and mocha latte as - dispensable or mixable drinks. - - rscadd: Added chocolate, vanilla, caramel, and pumpkin spice syrups for flavoring - drinks. - - rscadd: Added alternate title 'Barista' to the Bartender job. - WezYo: - - spellcheck: Fix gaia blurb -2019-11-02: - Imienny: - - tweak: Fix races with low oxy_mod recovering slower from oxygen deprivation than - races with high oxy_mod -2019-11-03: - CrimsonShrike: - - rscadd: Exosuit cells can now be swapped without disassembling entire thing. Simply - use a crowbar while mainteance protocols are active to take one out. - ghostsheet: - - rscadd: Welding tool now gives off light when active (it's a little weaker than - a flashlight) and sparks blue when it's welding. - - tweak: Lighters had their light color adjusted for the sake of ambience -2019-11-04: - Higgin: - - tweak: The accuracy bonus for shooting ranged weapons from standing still has - received a slight buff. - ghostsheet: - - tweak: Mining voidsuit now has minor bullet resistance and can withstand up to - 5000 kPa worth of pressure. -2019-11-05: - Higgin: - - tweak: Harm-intent clicking will now remove shotshells directly from shotholders. - SierraKomodo: - - tweak: Tablets now beep just like PDAs. - - tweak: Borgs can now alt-click doors to access the tile tab instead of shocking - them. To shock a door, use harm intent when alt-clicking. -2019-11-06: - Ithalan: - - tweak: Solar arrays on planetary surfaces now only require 5 tiles of clear space - around them to work at all, instead of 20. Solar arrays in space are unchanged. - SierraKomodo: - - bugfix: Cyborg cable coil can now be used to build machines -2019-11-07: - Albens: - - tweak: Bridge Holopad is now named SEV Torch Bridge - Soviet Swede: - - rscadd: Added the inflatables dispenser to the surveyor -2019-11-08: - Marie Taylor: - - imageadd: Updates the appearance of crates -2019-11-10: - SierraKomodo: - - bugfix: The `hwinfo` command in console terminals now outputs to the terminal - window instead of to chat. - - tweak: The console terminal prompt now includes a helpful reminder about the `man` - command. -2019-11-11: - Bxil: - - bugfix: Character setup works as expected again. - Rain7x: - - bugfix: You can now attach pins to Dress Jackets again. -2019-11-12: - Flying_loulou: - - bugfix: The nitrogen tanks again look like nitrogen tanks. - - tweak: Changes the fire (red) oxygen tank name to 'self contained breathing apparatus' - (SCBA) - - rscadd: Adds the Emergency Management Bureau helmetto the loadout - - rscadd: Adds the ancient Emergency Management Bureau helmet to the loadout (credits - to Sin2 for the sprites) - - rscadd: Adds the light damage control helmet to the loadout - - rscadd: Adds the SCBA mask, and adds it to the engineering crew survival kit, - instead of the breath mask.(credits to Sin2 for the sprites) - Imienny: - - rscadd: adds zipgun, knock-off pistol, small energy gun, ion pistol, ion slug, - duct tape, combat defibrillator, stasis bag, stabilisation kit, balaclava and - "exceptionally robust MRE" to uplink - - tweak: MRE coffee and tea powder no longer require heating - - bugfix: fixed MRE menu 8 (chilli) spawning with pizza instead of chilli - babydoll: - - rscadd: Added scented candles. - - rscadd: Incense and scented candles are now available in the aromatherapy crate - in supply. - ghostsheet: - - rscadd: Rapid Piping Device has been added! - - rscadd: RPD can be ordered from supply, at semi-reasonable cost of a 100 points - a piece. - mikomyazaki: - - bugfix: Body bag label overlays will now properly persist through opening/closing, - instead of disappearing. -2019-11-13: - SierraKomodo: - - bugfix: Intercoms and handheld radios can now select common and entertainment - channels again. - comma: - - tweak: Wall girders are now easier to take down using brute force - mikomyazaki: - - bugfix: NTNet downloads will no longer download the file at the beginning of the - download sequence, instead only adding the new program at the end of the download - timer. -2019-11-14: - mikomyazaki: - - bugfix: Different pen types (blue, red, multicoloured, black) now have different - names. They will now appear as differently named items on the autolathe list. -2019-11-15: - Higgin: - - tweak: Limits the range within which escaping cuffs/unbuckling yourself while - cuffed is visible. - - tweak: Readded different furniture/structure recipes to wood. - - tweak: Added orderable titanium sheets to supply. - - tweak: Fear the gun! Buffed all bullet damage towards a benchmark of 50. Gave - additional armor penetration to most common rounds with more than 50 damage. - - tweak: Love the armor! Buffed many armors' resistance to bullet damage. - Jaraci: - - tweak: Fixes/expands loadout options for off-Torch away site roles. -2019-11-16: - MrKicker: - - bugfix: Fixed Roboticist JumpSkirt appearing invisible - SierraKomodo: - - rscadd: Added soy and iced variants of the chai latte, london fog, pumpkin spice - latte, and mocha latte. - mikomyazaki: - - bugfix: Engine emitter control button (and other buttons of this type) no longer - go invisible for a couple of seconds when clicked. - - bugfix: Surgical borgs can now use their hypospray on targets that are on an operating - table. -2019-11-17: - Chinsky: - - tweak: Geiger counter thresholds have been tweaked upwards, 'high' is now for - rads that will breach most non-radproof suits, 'very high' is dangerous even - to 'radproof' suits. - Imienny: - - rscadd: Improved a bit Vox hardsuit, now you can store more useful stuff in hardsuit - storage slot and use claws attack through now-insulated hardsuit gloves. - Technetium: - - rscadd: Wound infection speed is now twice as fast at 50-70% immunity as it was - before, and 10 times as fast at 0% immunity. - mikomyazaki: - - tweak: Instruct verb will inform you better about why it fails, if it does. - - bugfix: Stationary consoles now have a 'Forced Shutdown' verb, just like other - kinds of modular computer. - - bugfix: The 'boiled spider meat' recipe now correctly produces an item called - 'boiled spider meat' rather than 'giant spider leg'. -2019-11-18: - Higgin: - - imageadd: Added two bunny-eared booster sprites. -2019-11-19: - mikomyazaki: - - bugfix: Removing an ID from a modular computer no longer brings up a selection - menu containing other modular computers with ID card slots in range. -2019-11-20: - Rain7x: - - tweak: Mentalists can now only be an O-1 (Ensign) - - bugfix: The Pathfinder, Med Tech, and pilot headsets now have an on mob icon again. - SierraKomodo: - - tweak: Swallowing pills now displays a message to people within a 2 tile radius. - This message does not tell them what pill you swallowed. - - tweak: Initiating a give (Right click > Give) now displays a message that you - 'hold out an item' to the target. - Technetium: - - rscadd: Adds immunobooster, an immune-system restoring drug that will rapidly - bring a ruined immune system up to half strength. Will not replace a proper - immune system, though, so be careful with those rads and spaceacillin. - babydoll: - - rscadd: Added the incendiary laser blaster to the traitor menu. - ghostsheet: - - tweak: Ion rifle and pistol has its capacity reduce to 8/4 shots respective and - had their delay between shots increased to 3 seconds. - - tweak: Uplink implant is now more EMP resistant, it can still be disabled by an - EMP but its chance of permanently breaking is significantly lowered. - - tweak: Imprinting implant cannot be implanted into synthetic being and must now - be imprinted where the brain organ is eg. For a GAS that would be their thorax; - for humans, their head. - - bugfix: You can leap over objects once again. - mikomyazaki: - - bugfix: Supermatter hallucination effect now checks for any source of meson vision, - rather than just meson glasses. Other sources of meson vision, e.g. the hardsuit - module will now properly stop hallucinations from developing when active. - - bugfix: You can now remove splints from yourself. - - tweak: '''Remove Splints'' is now a verb (right click your target to find it) - rather than in the stripping menu.' -2019-11-21: - Chinsky: - - tweak: Airlock controllers were resprited to blend with rest of wallstuff, have - directional icons now - - tweak: Flashbangs nerfs! No flooring, stun durations are now very short (you have - 4-6 seconds against non-protected, 2 against anyone with a helmet. Added confusion - effect (generally 2-3 times longer than stun) to them too. - SierraKomodo: - - bugfix: Give emotes now display the correct text for recipient vs everyone else - Technetium: - - rscadd: Carbon mobs now take immune damage from radiation. - WezYo: - - bugfix: Clicking on first aid kits (or other crafting objects) with certain items - will no longer delete the first aid kit. - babydoll, dirtygirl: - - rscadd: Added the dire goose, occasionally making its nest on grass exoplanets. - mikomyazaki: - - soundadd: Vending machines now play a sound when dispensing an item. - - bugfix: SolGov Employees now have clothing in their uniform vendor, the same as - the civilian uniform set. -2019-11-23: - Rain7x: - - tweak: The CMO now has the same amount of total skill points as a regular physician. - ghostsheet: - - rscadd: Added a navigation telescreen to the Charon crew compartment. - - rscadd: Replaced the rack on the Guppy with a storage compartment crate - - rscadd: Added binoculars to mining prep. - - rscadd: Carp migration event got reworked! They will now be launched into the - ship at slow speed, over a period of time. - - rscadd: Overmap carp hazard, has been tweaked in same maner as the carp migration - event, carps will be launched at the ships over a period of time. The speed - of carps hitting ships will be dependent on the ship's speed, multiplied by - the pilot's skill. (Go fast for road kills, you want to go fast to escape the - carp event either way). - - tweak: Structures and machine such as windows and computers, will hurt any mob - thrown against it, similar to being thrown against a wall. (Throwing people - against things now deals the same damage as a wall) - mikomyazaki: - - tweak: Firing a gun successfully will now switch off RIG-based cloaking devices. -2019-11-24: - mikomyazaki: - - bugfix: Malfunctioning AIs will now properly get the ai-select-hardware, ai-select-research - and display-help and set-ambition verbs. - - tweak: Malfunctioning AI is now consistently called Malfunctioning AI everywhere. - (This will not affect your character role settings.) - - tweak: Ascent Drones will no longer have the bureaucracy skill to speak legalese. -2019-11-25: - Chinsky: - - tweak: Free skillpoints for medical jobs were lowered, check your skill setups. - - tweak: Virology is no longer a full skill, a perk now requiring Trained Medicine. - - tweak: Codex now has navigation bar to get to home page quickly, or search or - list all stuff. - SierraKomodo: - - tweak: Borgs with the proper skills can now use console terminals with ctrl+alt+click. - You must be adjacent to the console to use this. - Technetium: - - tweak: Immunobooster now has overdose effects and a lower OD threshold (60u -> - 30u). - - tweak: Immunobooster now has strong negative interaction with spaceacillin. Do - not mix. -2019-11-27: - Anticept: - - tweak: Deck Chief now has mining access - MrKicker: - - tweak: Added extra table to OR 2 - - bugfix: Fixed medical hallway telescreen - Rain7x: - - tweak: The job Pharmacist is now called "Laboratory Technician". Their job has - been expanded to include virology duties. - - rscdel: The "Laboratory Technician" alt-title has been removed from the Research - Assistant Role. - SierraKomodo: - - tweak: Shield generator monitoring programs now display the same shield statuses - as the shield generator UI itself - Technetium: - - rscadd: Carbon mobs now take radiation damage upon exposure, modified by their - species radiation modifier -and- burn modifier. - mikomyazaki: - - rscadd: All Deity mode spells and structures now have a codex entry visible to - the God Cultists that explains what they do, or how to use them. - - tweak: Dionaea can be cured of viruses by receiving a middling dose of radiation. - Exposure to a radiation storm or standing outside the supermatter containment - window for a short time should be sufficient. -2019-11-28: - Rain7x: - - tweak: The Lab Tech now only has 16 skill points, and is restricted to trained - medicine and anatomy. - babydoll: - - rscadd: Added two new types of fauna to volcanic exoplanets. - - tweak: To account for their low health, simple animals take less damage from ballistic - and laser projectiles. -2019-11-29: - mikomyazaki: - - tweak: Failing to do surgery due to thick material clothing items will now display - an appropriate error message. -2019-11-30: - afterthought2: - - bugfix: Robotic limb attachment and connection surgery now consistently checks - robotic skills (complex devices, also anatomy if on flesh target). -2019-12-01: - mikomyazaki: - - bugfix: The delete warrant button in the main window of the Warrant Assistant - program will now properly do its job. -2019-12-02: - MrKicker: - - tweak: Notes/memories can now be multi-line. - Rowtree: - - rscadd: Added 30 new drinks, added recipes for Nothing, and added new bottles - to the booze-o-mat -2019-12-03: - Technetium: - - tweak: Nerf to Vox Slug Sling, 2.5x addt. egg generation speed. - mikomyazaki: - - bugfix: Antagonist HUD markers e.g. Cultist indicators will now properly show - up instead of being under the floor layer sometimes. -2019-12-04: - Rain7x: - - tweak: Candy Bar sprite has been updated. - afterthought2: - - rscdel: Virology has been entirely removed from the game. -2019-12-05: - Spookerton: - - tweak: Booster biomod hair options have been replaced with booster markings. -2019-12-06: - MrKicker: - - tweak: Allows hand-labeler to label storage items when used with non-help intent. - babydoll: - - rscadd: Added retractable ball point pens. - mikomyazaki: - - bugfix: Taping paper to windows will no longer put it below the window. -2019-12-07: - Boznar: - - maptweak: Engineering bay and atmospherics have been remapped to be less cramped - and more space efficient. - - maptweak: RPDs added to atmospherics lockers. Additional EVA hardsuit and Atmos - Voidsuit added to engineering. - Imienny: - - tweak: You can no longer hear aiming sounds, unless you are being aimed at/aiming - at. -2019-12-08: - Imienny: - - rscadd: Added option to change type of stomach in character setup menu - - bugfix: Fixed bug allowing to use stun batons without charges - - bugfix: Fixed bug preventing stun prods from working with standard device cells - Spookerton: - - bugfix: Female rolled uniform and sleeves for EC command uniform no longer makes - you naked. - mikomyazaki: - - tweak: Burn damage from radiation exposure is nerfed by 75%. -2019-12-09: - mikomyazaki: - - bugfix: Robots can now wrench portable rechargers to move/anchor them. -2019-12-12: - Rowtree: - - bugfix: Fixes recently added drink strengths to a more accurate level. - Spookerton: - - tweak: Bald boosters get bald ears. - mikomyazaki: - - bugfix: AIs can now spawn properly at roundstart. - zaredman: - - bugfix: Biowaste disposal cart access to only require surgery access instead of - requiring 6 different accesses. Corpsmen rejoice! -2019-12-15: - Spookerton: - - bugfix: Starborn, Blueforged, and Promethean variations properly show the head, - torso, and groin. -2019-12-17: - CrimsonShrike: - - rscadd: Drill heads show current status while mounted and can be examined for - information when not mounted on an exosuit drill. - EcklesFire: - - tweak: Adjusted renegade numbers. - - bugfix: Removed duplicate vars. -2019-12-19: - Spookerton: - - tweak: PTR bullets aren't hitscan and do a little less damage and penetration. - babydoll: - - rscadd: Added foam dart launchers. - - rscadd: Foam dart launchers can now be won as prizes from arcade machines. - - rscadd: Added a modified foam dart launcher to the uplink's gimmick weapons menu. -2019-12-20: - Cajoes: - - rscadd: Added orderable replacement barricade tape rolls from supply. - PsyCommando: - - tweak: Made the currency used in text entries read from the current map. Mainly - to help with downstream stuff. - afterthought2: - - rscadd: Buildable radio components for machines are now available. They will have - limited use with machines currently. - - tweak: When building air sensors, you now must also add a power component and - a radio transmitter. You can use a multitool on the radio transmitter while - standing near a machine to configure it. - ghostsheet: - - rscadd: Mercenary gamemode is now overmap. -2019-12-21: - Imienny: - - tweak: Tweaked TC cost of uplinks in Character Setup menu, radio uplink now gives - you 30% more TC, uplink Implant cost only 20% of total TC and taking TC without - uplink gives you 50% more TC. - - tweak: Message shown after receiving PDA uplink now should explain better how - to access uplink. - - tweak: Delay for removing knives from boots was decreased to one second - - tweak: Using combi-knifes on intent other than help intent will now open their - blade - - tweak: Portable freezers can now fit inside backpacks and have capacity of large - box - - tweak: Combat knifes can now fit inside boots - mikomyazaki: - - bugfix: Sleepers will now properly display the amount of a drug in the occupant - on the UI. - - tweak: R-UST now has a prompt to tell you when hitting the shutdown button will - cause an instant explosion, asking whether you're sure. - - maptweak: R-UST room machinery starts the round anchored. - - tweak: Improves the fuel injector controller UI, with injection rate and toggle - all injectors controls. -2019-12-22: - Chinsky: - - tweak: During the metor rounds, evacuation jump will be called automatically after - announcement that rocks are coming. It will take 30ish minutes to arrive - - tweak: Since there's less time and Torch is /very/ sturdy (thicc hull and PD), - initial intensity is bumped a bit and escalation is going faster, so will hit - max intensity at around 30 minutes mark. - - tweak: 'After the jump mode will check for some important things and will print - red/green text about them: helm console (need to have at least one and powered), - thrusters (ditto), bluespace drive (the room must be powered).' - mikomyazaki: - - tweak: Trained Forensics now provides a much larger bonus to making simple incisions - on dead targets for autopsies. -2019-12-23: - mikomyazaki: - - bugfix: Can't put objects inside bags that are in pockets anymore. - - tweak: Updated traitor extended round description so it is appropriate for the - SEV Torch setting. - - bugfix: Double doors are properly solid again. -2019-12-27: - babydoll: - - tweak: Increased damage taken when falling down a hole to another deck. - - tweak: Increased duration of stun after falling. - mikomyazaki: - - bugfix: Merchant station teleporter computer will now display the proper messages - relating to costs. -2019-12-28: - Cheb Pomidorov: - - tweak: Scientists and Research Assistants can now enter areas such as Medbay and - Brig's hallways and the Bridge Entry. - Devildabeast: - - tweak: Changes the Mentalist's Mind Read time limit from 25 seconds to 60. - Spookerton: - - tweak: Mercenary and Provocateur starting points are hidden from the Torch's roundstart - sensor message. - zkxs: - - bugfix: The psionic signal event can no longer give synthetics genetic disabilities -2020-01-03: - Devildabeast: - - tweak: Changes "restricted roles" to the broader "casual roles" in loadoout. - - tweak: Adjusts several loadout item restrictions. - Imienny: - - tweak: Replaced spoon in MRE with spork - mikomyazaki: - - bugfix: Nymphs and Golems are no longer valid targets for auto-traitor. - - bugfix: Mercenary radio channel now works again for mercs, raiders, traitors etc. - zkxs: - - bugfix: Fixes a runtime when using an atmos analyzer on a pit -2020-01-30: - Anticept: - - tweak: Farmbots now refill from a sink at a higher rate, up from 10 to 100 per - cycle. - Cheb Pomidorov: - - rscadd: You can now lock and unlock coffins using a screwdriver. Locked coffins - can be struggled out of, similarly to welded closets. - Imienny: - - rscadd: Added a new roles to Vox Scavenger away site, "Shoal Biotechnician", "Shoal - Technician" and "Quill" - MrKicker: - - tweak: AI can now make multi-line announcements - Spookerton: - - rscdel: IPCs can no longer be counsellors. - WezYo: - - bugfix: Flying drones can now open windoors - Xaytan: - - tweak: Adds welding goggles as an option in loadout. - afterthought2: - - rscadd: Pipe meters, vents, scrubbers, and pumps now use radio components. - mikomyazaki: - - tweak: Guest pass icon will now change colour to black when expired. - - tweak: Guest pass machine gets an updated UI. - - tweak: Humanoid Dionaea now get the audible chirp emotes. - - soundadd: Added a new multichirp (*mchirp) audible emote sound effect for humanoid - Dionaea. - - bugfix: Portable drives now work properly in modular computers for all operations. - - bugfix: Dense objects will now properly stop throwing/leaping. - - bugfix: Hand teleporters will now create portals that aren't random, when you - are linked to a teleport computer on a connected z-level. - - tweak: Hand teleporters will now only list teleport computers that are on a connected - z-level. - - bugfix: Can no longer right-click darkness due to being unconscious to see what - is on that turf. - - tweak: Decreased difficulty of installing augments to the same level as installing - robotic organs. - - imageadd: Adds three xenowear options for Space-Adapted humans - Leg braces, neck - brace and venter. - - imageadd: Adds animations for the sleeper & bodyscanner when active & occupied. - - soundadd: Adds a scanning sound for the bodyscanner. - - tweak: Space-Adapted humans' stamina now depends slightly upon gravity levels, - with better stamina than baseline humans in low-gravity, worse in standard gravity. - - tweak: Space-Adapted humans are adapted for lower-pressure environments, but suffer - in higher pressure environments faster relative to baseline humans. - - bugfix: The Vox shuttle can now return to its hangar properly. - quardbreak: - - tweak: Tweaked welding sounds on airlock and vents. Now after weld operation you - should hear second sound like you end your action. - zkxs: - - bugfix: Combining stacks from an inventory no longer leaves bugged sprites - - bugfix: Having more than 10 brain damage no longer grants immunity to peridaxon's - side effects (confusion and drowsiness) - - spellcheck: Sec HUD goggles description grammar fix - - rscadd: Adherent can now float over tables -2020-01-31: - Lorwp: - - soundadd: Energy melee weapons now have an on-hit sound - mikomyazaki: - - tweak: Paper will now check if your pen works before you start writing instead - of after you've written your text. - - tweak: If your retractable pen isn't in its active state when you start writing - on something, your character will automatically click it. - - tweak: Retractable pens will now toggle to their active state when you write on - anything (union cards, people, the wall) instead of only paper. - zaredman: - - tweak: Security now has access to a written statement, weapons license, arrest - report, and restraining order template on the Reports program. Paperwork masochists, - rejoice. -2020-02-03: - mikomyazaki: - - bugfix: Throwing items at a disposal chute will properly dispose of them again. - - bugfix: Fixes a bug where (for example) throwing an object at a grilled window - would hit the grill inside the window instead of the window. -2020-02-05: - mikomyazaki: - - admin: Mobs without the UI elements to use psionics can no longer be granted psionics. - e.g. simple animals. - - bugfix: Polytools now allow you to extend tools again. -2020-02-07: - Chinsky: - - tweak: Various drinking glasses are now printed from a microlathe instead of being - vended. Bar now has pre-loaded microlathe for this purpose. - - rscadd: Added new type of drinking glass - flute glass. - - tweak: Added transparency to some reagents, namely water and booze. - - tweak: Can now select recipies category in fabricators - - tweak: More types of glasses can take accessories like sticks or straws now, try - it out. -2020-02-08: - mikomyazaki: - - bugfix: Atmospherics' tank controllers work again when controlling the output - vent. - zaredman: - - maptweak: Removes Explorer and Pilot access to Xenobiology, Xenoarchaeology, Toxins, - and assorted labs. Pathfinder retains their original access. -2020-02-10: - Flying_loulou: - - rscadd: Fleet engineers rejoice ! The fleet unlocked some funds, in order to provide - you with a dedicated uniform, constituted of a polo, some pants, and a jacket - (available in the uniform vendor, under the utility extra section). -2020-02-12: - SomeoneStoleMyNickname: - - bugfix: The Guidebooks Hacking and Repair and Construction should now work as - intended. -2020-02-16: - Imienny: - - maptweak: Added detergent pods to vox scavenger base, warranty void if swallowed. - - rscadd: Vox raiders now spawn with thermals and holsters. - - rscadd: Bolt action rifle can now spawn in vox scavenger base, as well as in other - places. - - bugfix: Fixed bug with cracked mirror allowing vox to have gender. -2020-02-20: - Cajoes: - - rscadd: Sodas from NSV Luna, + vending machine for sodas, added into commissary - rotation. - adamkad1: - - tweak: Bumps medborg medicine skill from Adept to Expert -2020-02-24: - zaredman: - - tweak: Informal hat selection changed so all Civilians (Non-EC or Fleet) can spawn - with them. Yeehaw. -2020-02-26: - mikomyazaki: - - bugfix: Revolution is now properly called Mutiny on the vote menu when we're using - the Torch map. -2020-03-01: - mikomyazaki: - - bugfix: Ghosts can no longer detach IVs. -2020-03-07: - WezYo: - - rscdel: Removes all references to Mirania -2020-03-09: - CrimsonShrike: - - rscadd: Exosuits now have different delays on enter based on chassis. - Flying_loulou: - - rscadd: 'Adds two knives to the loadout : the utility knife, and the lightweight - utility knife.' - - rscadd: 'Adds two leg-strapped knife sheathes : one made of synth-leather, and - one made of polymer. Both act as holsters, and are accessories going on your - uniform. They are available in the tactical equipment tab of the loadout editor.' - - tweak: All the knives available in the loadout are now in the "knives selection" - list, in the general tab of your loadout editor. - YodaDoge: - - tweak: Silicon Units on the torch now have a crew manifest subsystem instead of - the show crew manifest verb -2020-03-11: - Deadmon: - - tweak: Removes the mention of virology from the lab tech description. -2020-03-15: - afterthought2: - - bugfix: Air Alarm environmental modes will now set scrubbers to siphoning correctly -2020-03-18: - YodaDoge: - - tweak: Atmosphere Control Program now shows alarms with alerts on top - mikomyazaki: - - tweak: Air Sensors, Meters, Pumps, Scrubbers, Vents and subtypes no longer have - normal machinery construction steps requiring components. They are built or - removed in one step with a wrench. - - bugfix: Pumps will now properly prevent deconstruction if their internal pressure - is too different from the environment pressure. - - tweak: Can now insert organs (external and internal) into the bioprinters (robotic - and organic) to recover part of their cost in materials. -2020-03-19: - Deadmon: - - tweak: Changes Counselor to no longer have psionics. Mentalists still get psionics. - You now have a choice whether you want psionics or not. - - rscadd: Adds Psionic counselor and Psychiatrist alt titles. Psionic counselor - gets the old psi abilities of the old counselor. Psychiatrist has no psi abilities. - Imienny: - - tweak: You can now pull things between Z-levels when using move-up and move-down. - zaredman: - - tweak: Fleet and EC rings are available to all who are serving, have served, or - have somehow squirreled one into their ring stash. -2020-03-20: - Blue Bit: - - maptweak: Added a new away site. - Cajoes: - - rscadd: Added rolls of toilet paper and toilet/sink clogging. Added to supply - and relevant areas. - SomeoneStoleMyNickname: - - rscadd: Added redacted tags to text formatting. Use adds a set of font boxes to - simulate classic stencil redactions. - - rscadd: Added a new digital pencode tag. [redacted] creates the string R E D A - C E D in black lettes on black background to give the illusion of redacted contend - in reports. - mikomyazaki: - - tweak: Suit Sensors program will now report cell charge for synthetic crew-members. - - tweak: Robot analyzers will report cell charge of the target synthetic. - - bugfix: Unathi horn icons will no longer rotate incorrectly when lying down. - zaredman: - - maptweak: New scrubber and vent sprites have been added. Credit to Keekenox for - the sprites. - zkxs: - - bugfix: Adherent with usable levitation plates can now feather-fall, avoiding - damage - - tweak: Injecting yourself with a syringe is no longer instant. Injection time - scales down with higher medicine skill. - - tweak: Using autoinjectors, hyposprays, and reagent pens on suited individuals - now has a delay due to searching for an injection port. This delay scales down - with higher medicine skill. - - tweak: Syringe and dart guns no longer magically home on injection ports. - - tweak: Autoinjector delay now scales down with higher medicine skill, taking 1 - second at basic, and 0.4 seconds at master. -2020-03-22: - Qlonever: - - rscadd: Adds another suspenders clothing accessory that can be custom-colored. - Selectable from the loadout menu. - Spookerton: - - bugfix: Ghosts & incapacitated mobs can't use bogrolls. - - bugfix: Bogrolls delete at 0 instead of having no sheets left. - purplemontart: - - rscadd: Species with the no pain flag (Dionaea, Adherents, Golems, Starborn) no - longer get exertion messages. - zkxs: - - rscadd: Add the entertainment color as a preset for telecom channels - - tweak: Sort the telecom channel color preset names -2020-03-24: - Imienny: - - bugfix: Fixed crossbow & spike thrower wall pins. - - bugfix: Probably fixed some thrown objects being able to pass through obstacles. - - bugfix: Thrown objects now correctly use throw force instead of force for effect - tests like embed. - - tweak: Significantly reduced damage to thrown mobs from hitting walls. - - tweak: Disabled thrown object knock-back in space. -2020-03-25: - Imienny: - - bugfix: Fixed moving with grabs. - WezYo: - - rscadd: Added UI buttons for pAI - - rscadd: Added a pAI preview in the character setup screen - - rscadd: Added a flashlight to pAI - - rscdel: Removed several now redundant verbs from pAI -2020-03-26: - mikomyazaki: - - rscdel: Virology prison break event is removed. - - rscadd: Adds prison break events for the Warehouse, Engineering Hard Storage and - the Emergency Armoury (but not the room with weaponry). -2020-03-28: - Flying_loulou: - - tweak: Latex and nitrile gloves are now smaller. - - tweak: Surgical masks are also smaller. -2020-03-29: - SierraKomodo: - - maptweak: Portable scrubber connectors in the hanger and engineering now have - pumps. -2020-03-30: - Flying_loulou: - - bugfix: The CE can now select the fleet alternative utility uniform, just as the - SE and the engineers. - - tweak: The fleet utility jacket can now hold whatever other uniform jackets can - hold on their suit storage slot. - - rscadd: Generalizes the Fleet alternative utility uniform for all departments. - mkalash: - - rscadd: You can now set a default suit sensor setting and locked state from character - setup -2020-04-03: - PigeonLord: - - tweak: Medical Visor is more tightly secured, protecting the Corpsmen's sensitive - eyeballs - Spookerton: - - tweak: The 'Show Ckey in End Credits' preference now applies to the special role - list for antagonists synthetics. -2020-04-04: - Alex6511: - - tweak: fire doors can no longer close on people, they will still close on all - other objects - - tweak: Inflatables are now deployed by clicking on your desired tile instead of - with a self-attack/activate - - tweak: Inflatable doors can no longer close on any object that prevents a standard - powered airlock to close - - tweak: Inflatables can no longer be deployed on any object that prevents a standard - powered airlock to close - - tweak: Unpowered doors can no longer close on any object that would prevent a - standard powered airlock from closing. - Ilysen: - - bugfix: Fixed the pitcher's visible fullness sprite disappearing when it went - above 80 units. - SierraKomodo: - - tweak: AI now have a `Reset Radio Encryption Keys` verb under `Silicon Commands` - - Use this if a departmental channel breaks and you can't access it anymore. -2020-04-05: - Alex6511: - - tweak: Shields have been slightly buffed slightly, again. - - maptweak: The survival pod has been replaced with a pod that has an airlock - - bugfix: fixes the colony airlock. - Ava: - - tweak: The chemistry subsystem now processes every 5 deciseconds instead of 20 - deciseconds, meaning that reagents in containers will mix together more quickly. - This doesn't affect mob metabolization - it only affects the delay when mixing - stuff. - Imienny: - - tweak: Inflamed appendix is now harder to miss on medical scan - - bugfix: Fixed riots helmets not uncovering face after raising visor - SierraKomodo: - - tweak: Tinted void suit helmets now apply a tint overlay similar to that used - by welding goggles. -2020-04-06: - lorwp: - - tweak: Mercenary now requires at least 3 mercs in the merc team. no more solo - merc -2020-04-07: - Alex6511: - - tweak: The Xenoarch coolant tank is now bigger - - rscdel: Suspension field generator doesn't have access requirements anymore. - Draxtheros: - - tweak: Enabled partial understanding between the Yeosa and Sinta'unathi languages. -2020-04-08: - Deadmon: - - tweak: Slight changed to terran service hats. - Draxtheros: - - rscadd: Added two new emotes for Unathi. - Ilysen: - - rscadd: Added polychromic dye, which can be used to change the appearance of food - and drinks! Find bottles in the galley backroom and from kitchen supply crates. - You can also buy a small bottle of extra-strength dye with a greater color-changing - effect using an uplink. - Lorwp: - - rscadd: IPC Monitors can now have what they display changed on a alt-click - Shadowtail117: - - bugfix: You can no longer hear "X talks into the Y headset" if you are blind; - it is replaced with a generic phrase. - lorwp: - - tweak: In loadout hats 'Fleet Cap' is now 'fleet utility cover' and is still the - utility cover, 'fleet cap' is now the fleet ballcap. - mkalash: - - tweak: Gives corporate security a holster equipment belt, a black vest, a maglight, - a radio, and a prybar. - zaredman: - - tweak: SEA has been re-issued their plate carrier and provided a disorienter to - facilitate part of their job expectations. -2020-04-10: - Shadowtail117: - - tweak: The "Third Deck Hallway - Officer's Mess Hall Entrance" camera is now known - as the "Third Deck Hallway - Center" camera. - - tweak: The "Vacant Offices" camera is now known as the "Computer Lab" camera. -2020-04-12: - Deadmon: - - tweak: Fixes EC, Contractor, and Fleet Roboticists so they have their proper permissions - and uniforms. - - rscadd: Adds Fleet and EC Roboticists. - SierraKomodo: - - tweak: Scanning a planet's atmosphere from the sensor suite now only requires - TRAINED science skill. Down from EXPERIENCED. - lorwp: - - maptweak: The CoS' office is now named correctly on the camera monitor -2020-04-13: - CrimsonShrike: - - tweak: Exosuit armour values have been tweaked, shielding from shield drone reduced. - - bugfix: Fixes exosuit armour working inconsistently. -2020-04-17: - Ilysen: - - maptweak: Removes a dark spot in Operating Room 2, and moved the advanced first - aid kit onto the empty table instead of sharing a tile with the cleaning sprays. - - maptweak: Fixed Operating Room 2 using a cyborg space cleaner bottle instead of - a normal one. - Spookerton: - - bugfix: Windoors no longer block fluids when they shouldn't. -2020-04-18: - Hubblenaut: - - bugfix: Fixes low walls not being interactable when they have a window on it. - Ilysen: - - rscadd: Added beeping to microwaves! - - rscadd: You can now use botanical satchels on microwaves to empty out any valid - ingredients it has into the microwave. - - tweak: Microwaves are now speedier, more efficient, and less likely to break when - upgraded with better parts. - - tweak: You can use anything with space cleaner contained in it to clean microwaves, - instead of just spray bottles. - - tweak: Adjusted messages and feedback for microwaves for clarity and consistency. - Shadowtail117: - - rscadd: You can now control-click a PDA to remove the pen inside if there is one. -2020-04-19: - lorwp: - - bugfix: mutiny is no longer listed as 'revolution' when staff change the gamemode - manually. be afraid -2020-04-22: - Alex6511: - - tweak: the overmap coloring has been changed - CrimsonShrike: - - tweak: Exosuit clamps now hold up to 5 items. Added shortcut to unload items by - pressing Ctrl and then clicking on the clamp. - Flying_loulou: - - rscadd: Adds a selection of passports. - Karlias: - - maptweak: Fixed up the Skrell Shuttle walls. - - maptweak: Added Autopsy Scanner, GPS and Gas Analysers to the Skrell Scout Ship. - - maptweak: Added Emergency Oxygen Tanks and Gas Masks to the Skrell Scout Ship. - Shadowtail117: - - tweak: There is a now cancel button when you use the say/me verbs to close out - of the window quickly. - SierraKomodo: - - maptweak: AI Upload has been updated to face EVA Storage instead of the main stairwell. - - maptweak: Robotics control console has been moved from bridge storage to the AI - Upload foyer. - lorwp: - - tweak: Mutiny now requires at least 4 antagonists and 10 players readied up -2020-04-23: - Deadmon: - - rscadd: Adds Medical Resident title, sort of like a physician lite role. Mostly - identical in mechanics to Physician, with the exception of a slightly lower - minimum age requirement and less overall points. - - rscdel: Removes Resident alt-title from Physician. - Karlias: - - maptweak: Request from Karbivio to replace Ascent ship walls with Ascent Reinforced - Walls. - Qlonever: - - bugfix: fixes surgery overlays floating next to the patient - Shadowtail117: - - tweak: Corporate Liaisons (and equivalent) can now use SCG-REP-12, the departmental - audit form. - zkxs: - - maptweak: Engineering shield bay now only contains one shield -2020-04-24: - Alex6511: - - tweak: 'The GUP airlock has been overhauled, again. The buttons now function as - follows: Purge Air, removes the air and puts it outside the GUP. Equalize With - Exterior, which uses exterior air to fill the GUP to the pressure found outside - the GUP. Hold, which turns off all vents/scrubbers to save power.' - - tweak: The GUP airlock now functions with a combination of scrubbers and vents, - this may improve performance under some situations. - Blue Bit: - - maptweak: Fixed floating lights on the meatstation away site. - - maptweak: Adjusted meatstation away site spawns. Mobs spawns have been reduced - and moved a bit. Some more clutter was added. Some loot was moved. - Flying_loulou: - - tweak: Fires now stop burning under 220K - - tweak: The bosun whistle (SEA's whistle), and your internals now fit in equipment - belts and holster belts. - - rscadd: Adds pencil cases to the loadout (utility tab). - - rscadd: Adds light first-aid kits to the exploration department's lockers. - Ilysen: - - tweak: Changed the functionality of food trays to be much more flexible than before! - - tweak: While on Grab intent, use a food tray on a tile or an item to scoop up - what items you can. - - tweak: Also while on Grab intent, hit a table with a food tray to dump out the - tray's contents onto the table, or a fridge to dump in what you can from the - tray. - - tweak: Use any other intent to put the tray down without dumping out its contents. - - tweak: Borgs can use Help intent in place of Grab intent! - - bugfix: The Teleport, Ethereal Jaunt, and Summon Holy Relic wizard spells now - work properly! - - tweak: If a spell fails to cast, it now displays a message. - - tweak: Improved the spellbook's formatting. - Karlias: - - maptweak: Adds missing Cooler and heater to Skrellship Chem Lab - - maptweak: Adds health HUDs to Medical for Skrellship - - maptweak: Adds Flags to plant on exoplanets to Skrellship Cargo Bay - Lindhrive: - - maptweak: The atmospheric chamber in Xenobotany works now. The console outside - can be used to pump gasses in or out. - SierraKomodo: - - tweak: Security and Medical intercom frequencies now have proper telecoms handling - and unique radio colors. - - maptweak: The AI core now has 3 standard intercoms instead of two special intercoms - and a standard one. The intercoms are configured for Common, Medical (I), and - Security (I) by default. - YodaDoge: - - tweak: Shieldgenerator shields now have a chance breach while the shield integrity - is below 100% - up from 35%. - ghostsheet: - - bugfix: Made atmospheric pressure account for clothing accessory; fire overpants - works again - - tweak: Firefighting tank is now a double extended oxygen tank, to fit on the firesuit's - equipment slot, - - tweak: Firesuit can now carry it's helmet on the equipment slot - - tweak: Made the emergency forcing tool deal extra dmg against glass - - tweak: Re balance slowdown and item sizes and dmg of firefighting equipment -2020-04-25: - Rowtree: - - rscadd: Adds 16 new fruits, and drinks + cocktails for them. - YodaDoge: - - maptweak: Engineering bay and supermatter monitoring now has brighter lights -2020-04-26: - Shadowtail117: - - bugfix: Unathi limbs will no longer regenerate themselves when under extreme pain - or other situations in which they are otherwise healthy. - SierraKomodo: - - maptweak: The shield bay now has a vent and scrubber. - Spookerton: - - tweak: Toggle-tint helmets have a moderate instead of heavy overlay while tinted. - - admin: Added a reload savefile button to PP. Hopefully this will be temporary. - (Ha ha). -2020-04-28: - CrimsonShrike: - - rscdel: Removed unsued advanced weapons boards for exosuits. - - bugfix: Fixes a case with some UI interactions from cockpit of exosuit not working - correctly. -2020-04-30: - Jovaniph: - - tweak: Replace toxic pouches with radiation pouches in the radiation suit closet. - SierraKomodo: - - tweak: Corporate Liaison and Liaison Protection Agent no longer have access to - research, medbay, security, or supply - - tweak: Liaison Protection Agent can no longer set intercoms and handheld radios - to the security channel -2020-05-01: - Shadowtail117: - - soundadd: One of the inventory rummaging sounds now sounds cleaner. - Spookerton: - - bugfix: Ascent-Glow is visible instead of audible, making it work in space. -2020-05-02: - Fying_loulou: - - rscadd: Adds alternatives medical uniform and medical jacket. - Ilysen: - - tweak: 'Spotlight frames are now constructable with 3 steel sheets. (For those - who don''t know: spotlights are light fixtures specialized for large tubes, - which shed more light. They''re generally found in places like the Galley, with - large open spaces.)' - - tweak: Light replacers now destroy broken bulbs when used by cyborgs. - - tweak: When held in-hand, you can see if a light tube is rigged to explode by - examining it. - - tweak: Removing light fixtures from walls now operates at a speed determined by - construction skill. - - bugfix: You can no longer inject an infinite amount of reagents into light tubes. - - bugfix: Light tubes no longer suck all reagents out of a syringe, and instead - only remove the necessary phoron to rig them to explode. - - bugfix: Unscrewing an empty light tube will no longer delete its wires. -2020-05-03: - Jovaniph: - - tweak: Blacklisted Corgi, Human, and Monkey Meat as part of a personal goal to - eat. - Karlious: - - rscdel: Removes AEG from the list of weapons Research can print - Spookerton: - - tweak: Vox scavenger inflatable locks made friendly with recent changes. -2020-05-06: - Banditoz: - - tweak: Borgs can now climb over portable atmospherics equipment. - - bugfix: Gave forensics borgs a gripper that can hold various forensics items-- - everything an evidence case can hold. - Imienny: - - rscadd: Lit cigarettes are no longer water-proof and can extinguished by spraying - or splashing with water. - Jovaniph: - - rscadd: Add new personal goals for using the gym. - Rowtree: - - rscadd: Adds the ability to hollow used coconuts and pineapples into drinking - mugs. - Spookerton: - - bugfix: Inflatables & dispensers no longer inflate on the user tile if whacked - against something worn. - - bugfix: Inflatables & dispensers no longer inflate if dropped onto a structure. - cdbrunow: - - bugfix: The forensics DNA scanner is no longer invisible while closed. - lorwp: - - rscadd: Added plasteel ring to loadout. -2020-05-07: - AshtonFox: - - tweak: Stun rifle's sprite now actully displays charge level. - - bugfix: Fixed missing discharged icon state for pulse carbine. -2020-05-08: - Spookerton: - - tweak: Fleet E-2's can no longer be full engineers or masters at arms. - - rscadd: You can force gas tanks' release valves open and closed with a screwdriver, - taking 5/4/4/3/3 seconds by atmospherics skill level. - - tweak: You can see gas tank attachments at 5 steps, whether they are welded or - forced open at 3, and check their temperature on the same tile. - mkalash: - - tweak: The COS and the BC now have lethal authorization by default, because they - can just give it to themselves, anyway. - - tweak: The console in the COS office is now a variant with command and security - programs on it. - - tweak: The UOF program now tracks all registered and unregistered guns, split - into two lists. Guns that leave connected Zs still display, but show "out of - range" instead of a location, and their authorization can not be changed. - - tweak: The UOF program now shows the area name instead of coordinates. - - tweak: Cyborg guns are no longer tracked separately for some reason. - - tweak: The UOF program is marginally better formatted. -2020-05-12: - Detritus-Ha: - - maptweak: Added a stack of plastic sheets and a second light replacer to the racks - at engineering - - maptweak: Replaced all advanced power cells in engineering with random power cells - Randall Hynes: - - bugfix: Science skill description now includes its effects on slime surgery, exoplanet - scans. - lorwp: - - tweak: the CSO's locker is now a pimped out Gold, Purple and EXO Green. Bling - - tweak: the CSO now as the same equipment as other Line officers in their locker, - namely, warrant projector, disorienter, plate carrier and helmet, and combi-knife, - also their clipboard is now steel, because bling bling - - bugfix: the CSO's spare headset is now the torch variant, not the old exodus variant - - rscadd: the CSO now has a spare bowman variant of their headset. bling bling bling - orelbon: - - bugfix: Placing sheets on an airlock for repair wont dump them under it. - radagast-the-red: - - tweak: Corrected the CO's SCMJ reference to SCUJ. -2020-05-13: - Kroto: - - tweak: Ping, Proxy, and Relays commands have NTnet required access removed. -2020-05-15: - Karlias: - - maptweak: Fixed Unishi suit storage permissions, they previously required Torch - Engineering access. - - bugfix: The Trichoptera can now properly dock with the Torch - - maptweak: Added a Cyborg Charging Station to the Vox Asteroid base. - - maptweak: Added Suit Cooling Units to the Vox Asteroid base. - SierraKomodo: - - maptweak: The aft-port and aft-starboard deck 4 airlock controllers are now accessible - from inside the ship. To keep in line with how the other deck 4 airlocks work, - they are still not accessible from space or inside the airlock itself. - - tweak: Codex will no longer call things 'immune' to any damage sources since recent - armor updates mean immunity is technically impossible now. - WezYo: - - bugfix: Fixed the windoor opening animation sometimes flickering - YodaDoge: - - bugfix: Atmospheric Injector status is now displayed correctly on all tank consoles - at round start - lorwp: - - rscadd: the SCGR now has a equipment belt in their locker, so they can hold paperwork - and feel like 21st century cultural icon Robin - ozwell: - - rscdel: Removes the ability to construct tele-circuits - radagast-the-red: - - tweak: Gave Deck Chief access to EVA and teleporters. -2020-05-18: - orelbon: - - rscadd: Changes nuke cylinder container from cabinet to floor embedded machine. - radagast-the-red: - - tweak: Gave Bridge Officers access to teleporters. -2020-05-19: - Karlious: - - rscdel: Removes the ability for the AI to enter maintenance drones - Shadowtail117: - - tweak: If you throw a glass cup, it will splash its contents on whatever you throw - it at. It also has a very high chance to break. - YodaDoge: - - tweak: Sparking TEGs that are directly connected to APCs can cause the APCs to - shut down temporarily, or rarely fail. - ben10083: - - rscadd: Gave forensics module a reagent scanner - - rscadd: Gave forensics module crew records subsystem - mkalash: - - tweak: All visually spinny chairs are now spinny - radagast-the-red: - - tweak: Smokable butts will be held instead of being dumped on the ground, if a - hand is available. - - tweak: Changed the extinguishing chat message to reflect smokables no longer being - dropped. -2020-05-22: - AshtonFox: - - bugfix: Fixed ominous suit's Project Blade option. - - bugfix: Fixed Ninja's energy blade not dealing any damage. - Detritus-Ha: - - maptweak: Replaced and moved several odd walls on Verne. - - maptweak: Verne airlock now has windows and the interior access button is no longer - covered by an airlock sign. - - maptweak: Verne's fuel tank now has reinforced floor and spawns without gas. - - maptweak: Added science goggles to Verne. - - maptweak: Removed chemistry APC access requirement on Verne. - Funguss: - - maptweak: Adds a new alternative vox site, mutually exclusive with the old one - during overmap generation, starts inside of a small asteroid field for spawn - protection - - tweak: gives shoal scavengers and sub-jobs their own access card for accessing - the new ship -2020-05-26: - CrimsonShrike: - - tweak: Muscle augments also increase jump distance slightly now. - Faustico: - - tweak: 'The following augments no longer have a research requirement and can be - printed from roundstart: surgical toolset, engineering toolset, mechanical muscles, - subdermal armor.' - PigeonLord: - - rscadd: Added an MRE vendor to the mess hall. - - tweak: Removed MREs from sweatmax vendors. - Shadowtail117: - - tweak: The message has been updated for trying to fire a gun with the safety on. - - tweak: Chefs no longer have full access to maintenance. - - rscadd: There are now feedback messages in the chat for when you open or close - an airlock's maintenance panel, cut, mend, or pulse a wire, and attach or detach - a signaler. There are also sound effects for all of these except signalers. - mkalash: - - tweak: First, second, and third vote weights have been replaced with a blind single - transferable vote. Click on vote options in the order you'd like to see them, - as few or many as you want. Click on any option again to rescind your vote for - it. Options with a 50% majority will win. If the vote wants more than one result - (game mode votes need 3), then the winner's voters will have their votes transferred - to their next choice. If there is no majority winner, the last place options - will be removed and their voters will have their votes transferred to their - next choice. Ties and situations where there aren't enough votes to fill all - the results are resolved randomly. - orelbon: - - rscadd: Whales are in. Don't hurt them. - - bugfix: You can now consistently place hazard stripes on floors using tape rolls - again. - ozwe11: - - rscadd: Portable freezers can now be made in the protolathe. - radagast-the-red: - - rscadd: Humans will now vomit into adjacent toilets. - - rscadd: Humans will now vomit into adjacent disposal units. Vomit will be thrown - out of the corresponding disposal outlet. -2020-05-31: - AshtonFox: - - rscadd: Added cigarette cases to loadout. - - imageadd: New icons for opened pencil cases, empty and filled states. - - bugfix: Pencil case will no longer disappear when opened. - - bugfix: An AI joining the game at a roundstart will no longer leave an available-for-entry - inactive core on it's tile. - Kroto-Ker: - - bugfix: You can craft things with ebony now - RustingWithYou: - - tweak: adds a new rubber stamp for the Pathfinder and places it in their office - on Deck 4 - Shadowtail117: - - rscadd: SCG-MED-15, an autopsy report, is now available to medical staff. - - tweak: The colors for hrukhza leaf extract, kzkzaa, wasgaelhi, and mumbak sting - have been changed. The mixing messages have also been updated accordingly. - - soundadd: There are now sounds for when you punch a wall. - Shadowtail117 & mkalash: - - rscadd: You will now receive an audible ping when you receive a new email, provided - your email client is open. You can change whether you receive this ping or not - in the email program. - - rscadd: You can now set a custom chat notification when you receive a new email. - TheWelp: - - rscadd: Replaced Deity with Chorus - - tweak: Moved follow code from ghost to the observer level. -2020-06-01: - Karlious: - - rscadd: Adds the Skrellian Hard Suits - - tweak: Numerous balance updates for the Ascent Hard Suits - Replacing the current - Hunter suits with weaker suits, while preserving the hunter suits for that game - mode - - maptweak: Adds the Skrellian Hard Suits to the Skrell Ship -2020-06-06: - Alex6511: - - bugfix: Nabbers will no longer retain their slowness after their blood has been - restored. - AshtonFox: - - bugfix: Limbs can no longer be attached until a limb of the same type or a stump - of that limb is surgically amputated. - - bugfix: Stumps will no longer stack. - - bugfix: Fixed a bug when both the limb and stump cannot not amputated if present - together by surgeon's mistake. - Cdbrunow: - - bugfix: The nacelle status lights in engineering can no longer be moved - Deadmon: - - rscadd: Adds a new away site, a Grayson Industries mining station. - Funguss: - - maptweak: Vox asteroid base spawns & suits moved to the shuttle. - - maptweak: Vox asteroid base gained some hydroponics gear and a prosthetics printer. - GrazalThruka: - - rscdel: The Bioprinter can no longer print hands, feet, arms, or legs for all - species but GAS - Shadowtail117: - - rscadd: You can now control-alt-click something to quickly point at it instead - of using the context menu. - zkxs: - - tweak: AI now has master information technology skill, and no athletics skill -2020-06-07: - AshtonFox, kokokobold: - - admin: Added Check Fax History verb for admins and mods. - Spookerton: - - rscadd: You can set a character email address and password preference. Email addresses - are only applied to civilians. -2020-06-09: - Deadmon: - - tweak: Surgical jobs have appropriate Devices skill to attach prosthetics. -2020-06-10: - Deadmon: - - rscadd: Adds new residencies for Unathi, Ouere, and an aditional offworld residency - for extra flavor. - Spookerton: - - bugfix: Rejuvenate now reapplies eye color, tattoos, etc. - - tweak: Some new fax machine destinations are available. -2020-06-11: - RustingWithYou: - - tweak: removes merchant from the vox job list -2020-06-13: - RustingWithYou: - - tweak: adds flora disks to the protolathe - Spookerton: - - tweak: IPCs and FBPs cost cell charge as exertion to move heavy objects. - - bugfix: You can no longer delete holograms, laser beams, and singularity effects - through the vigorous application of a mop. - - bugfix: Yeosa Unathi job restrictions exist. - ozwe11: - - tweak: Research Assistants and Scientists now have their default branch to contractor -2020-06-15: - AshtonFox: - - rscadd: Passports now allow you to view basic information about their owner if - used in the active hand. - - rscadd: Added Sol travel visas in loadout. - - imageadd: Added travel visa sprite. - - spellcheck: Fixed a typo in the description of the basic passport. Probably not - to be seen in game. - Shadowtail117: - - tweak: You now have a chance to stumble and fall to the ground if the OFD fires - and you are not laying down or buckled to something. You have a 75% chance to - stumble if you are either actively running or it's less than 5 seconds since - you stopped running, 50% chance if you are actively walking or it's less than - 3 seconds since you stopped walking, and 20% chance if you are standing completely - still. - - spellcheck: Changed "skiranhi tea" to "skrianhi tea". - lorwp: - - maptweak: The SM's filters now by default start set to Hydrogen - - rscdel: Traitors no longer get a list of potential collaborators, nor do the collaborations - get told there is a traitor - ozwe11: - - rscadd: Cats may now be ordered through the supply computer in the same way a - corgi can -2020-06-16: - AshtonFox: - - tweak: All donuts now require a slice of dough instead of dough as microwave recipes. -2020-06-19: - Munnymouse: - - rscadd: New human hairstyles added -2020-06-22: - GrazalThruka: - - rscadd: Adds cabbage juice, both as a reagent and to cabbage plants. - Kearel: - - bugfix: Chorus can no longer regenerate health when it should be dead. - Rowtree: - - rscadd: Adds multiple drinking glasses, some tall mugs, and adds new snacks to - the lunchbox loadout. - Shadowtail117: - - bugfix: Chorus is now appropriately titled in some contexts. - SparklySheep: - - rscadd: Buffs powersinks so they can disable power networks as intended - Spookerton: - - bugfix: Objects colliding with upward ladders no longer fall through reality. - - tweak: The vox scavenger ship has a green hull instead of sol-ish blue. - - tweak: Vox shuttle default SMES I/O improved in line with some other shuttles. -2020-06-24: - Albens: - - maptweak: Medical has been remapped. - - maptweak: Robotics has been remapped. - - maptweak: Counselor's office is now where Sci breakroom and Old D1 Checkpoint - use to be. - - maptweak: Deck 2 maintenance, Starboard midship to Aft has been changed. - - maptweak: Bridge Saferoom has been updated to be in line with the new THERA Safe - Room. - - maptweak: Sci now has a Paperwork office to account for their lost breakroom. - Rowtree: - - tweak: Allows chef to spawn with semi and formal loadout options. - Spookerton: - - admin: Configuration now permits setting a regular expression to test against - all communications, preventing them on match, and circumvented by R_INVESTIGATE. - - rscadd: Protein bars now come in a random selection of 14 flavors. - TheWelp: - - tweak: Reworked merchant communication. You shouldn't notice a difference! -2020-06-26: - Shadowtail117: - - spellcheck: Changed "Dropper" to "dropper" for the item's name. - - spellcheck: Changed "malfuncion" to "malfunction" for the maintenance drone malfunction - event. -2020-06-29: - Spookerton: - - rscadd: Added scrubber packs & scrubber tanks. Scrubber packs use a cell and a - tank to scrub air. Atmospherics skill affects remove time for cell & tank - - 5/4/4/3/3. Scrubber tanks are very large, but can't be worn on back or attached - to suits. Basic atmospherics and basic electrical engineering affect whether - a raw percentage or fluffy estimate are shown for tank pressure and cell charge. - - tweak: Added 2 packs and 4 tanks to each atmospherics locker. Added 1 pack to - each firefighting equipment supply box. Added 2 packs and 4 tanks to each atmospherics - emergency equipment supply box. -2020-07-06: - CrimsonShrike: - - tweak: Mounted RCD is now cheaper to use. Hopefully allowing for some more use - than previously. - Myphicbowser: - - bugfix: Boiled slime cores are no longer invisible. - RustingWithYou: - - tweak: Makes the biological demoleculariser actually craftable by fixing the mutagen - requirement in the recipe. - Shadowtail117: - - tweak: Experienced Weapons Expertise now only requires 6 points instead of 8. - - tweak: Firedoors will no longer refuse to close if something is on top of their - tile. - - tweak: Firedoors will now give two seconds of warning before closing if a mob - is on its tile when it tries to close. - - soundadd: Firedoors will play a warning beep if a mob is on its tile when it tries - to close. - - tweak: If a mob does not move from a firedoor after two seconds, it will push - the mob out of the way. This deals a slight amount of damage due to the force - of the push. The firedoor will try to move the mob to the safe side of itself. - Slywater: - - bugfix: Players cannot climb onto low walls with windows. - - tweak: Added space cleaner to engineering borg modules. - - tweak: Decreased borg repair module wire synth capacity from 50 to 40. - - tweak: Added a matter decompiler to the borg repair module. - - tweak: Added wood synthesizers to borg engineering module. - - tweak: Increased the engineering borg's welder capacity. - - tweak: Added a second gripper to the engineering borg. - - tweak: Added a GPS to the surveyor borg. -2020-07-08: - Shadowtail117: - - rscadd: Robotics now has its own dedicated pager in the hallway outside of their - lab. - SimpleMaroon: - - bugfix: Changes the Expeditionary Corps section berets to not mention the Fleet. - ozwe11: - - tweak: Makes adjustments to fix the Scan Target ghost verb, allowing ghosts to - perform a basic health scan on mobs they are following. - zaredman: - - tweak: Adds Emergency Forcing Tool to autolathe recipe listings. -2020-07-10: - zaredman: - - tweak: Survival kit oxygen masks have been replaced with SCBA masks, except for - vox. -2020-07-12: - Anfortas: - - bugfix: Flavour text should respect line breaks again. - AshtonFox: - - bugfix: 'The \:admin\: tag icon will no longer be blank in the changelog.' - - bugfix: Removed an extra pixel in the \"Orbital Orange\" can's sprite. -2020-07-14: - Albens: - - tweak: The GUP's APC now has no access requirements. - Anfortas: - - bugfix: Ghosts should once again be able to view flavour text. - Archemagus / Laxesh: - - rscadd: Hull shields animate, flowing backward relative to ship facing. - - rscadd: Hull shields ripple out from the contact tile on touch or attack. - CrimsonShrike: - - tweak: Armblade augment sprites have changed. - - rscadd: Exosuits now have a storage compartment to keep emergency supplies or - personal belongings. Click drag exosuit onto you to open it. - Juxtaposed: - - rscadd: Adds coins to the loadout under the general tab. - Rowtree: - - tweak: The default job title of the Loss Prevention Associate is now Executive - Assistant. - purplemontart: - - rscadd: Lets you select the Sikh holy book, Guru Granth Sahib, in loadout. - zkxs: - - bugfix: RFID broadcaster and card slot stock parts can now be repaired. -2020-07-16: - CrimsonShrike: - - rscadd: Adds flaregun. Shoots shotgun flare shells. Do not try to use other shells. - - rscadd: Adds flaregun and shells to exploration department. - Kearel: - - rscadd: Implements personal shield belts, which protect the wearer against 1 to - 3 projectiles depending on the battery powering them. - NullSnapshot: - - tweak: Visible messages now respect whether the source is invisible to the recipient - or not. - - bugfix: Living mobs can no longer see ghosts pointing unless the ghost is visible - to them. - - bugfix: Species descriptions will now correctly show that non-breathing species - do not inhale or exhale gasses. - - bugfix: Fixes issue where ghosts could enter body scanners, bugging them out in - the process - Shadowtail117: - - bugfix: The medical storage room lights box now contains lights. - - bugfix: Prying open a firedoor with a crowbar-like tool once again causes it to - remain open until it is closed manually or by a new alarm. - - tweak: Doubled automatic closing time for firedoors opened by hand during an alarm. - SierraKomodo: - - rscadd: SAARE is now a selectable background faction in character setup. - - rscadd: SAARE and PCRC berets are now available loadout options. - - tweak: Supermatter reading thresholds (The point at which the numbers turn yellow - and red) can now be configured. The configuration is stored per supermatter - crystal and syncs between all programs/subsystems looking at that supermatter. - This applies to EER, Temperature, Pressure, and EPR readings. Does not apply - to integrity, icon state, or the delamination radio broadcast. - Spookerton: - - bugfix: 0 can be entered on helm acceleration and speed limit. - - bugfix: Helm acceleration and speed limits correctly impose input limits. - - bugfix: IPC and FBP internal organs are correctly set to robotic on creation. - - bugfix: Positronic brains are no longer sent to the shadow realm by rejuvenate. - - bugfix: Positronic brains correctly rename themselves when first turned on. - - bugfix: Positronic brains correctly die when damaged enough. Dead brains are scrap - metal and cannot be revived. - - rscadd: Positronic brains can be overwritten if hand activated while turned on. - Evil brains are protected from being overwritten. The process can be cancelled - by activating the brain again. - - rscadd: Positronic brain examine shows details about its state and damage - or - not, if you have less than trained complex devices. - - rscadd: IPCs have a variety of negative effects caused by damage to their brain, - including muddy vision, confusion, slurring, deafness, collapsing, and power - shorts. - - tweak: Positronic brains have 60 health instead of 30 to compensate for being - able to die. - - rscdel: Removed matchmaking system (the preferences random relationship tab). - lorwp: - - tweak: flashlights can now be put in the suit storage of your plate carrier -2020-07-17: - Spookerton: - - tweak: Positronic brain health is 150% what it was before. -2020-07-18: - Spookerton: - - maptweak: Added a fax machine to the forensics office and research paperwork office. - - tweak: Access to torch fax machines is now assignable as "Fax Machines" under - Command in the ID editor program. - - tweak: Renamed all torch fax machines for ease of sorting and comprehension. -2020-07-21: - PsiOmegaDelta: - - tweak: Replaces some premium items in vending machines, due to how prevalent coins - have become. - - tweak: 'Besides hacking, emagging now also allows access to contraband items in - vending machines. spelling: Fixes grammar issues with uppercase vending machine - names.' - Shadowtail117: - - tweak: Soporific will now show up as a reagent on handheld medical scanners. - SierraKomodo: - - rscadd: Maintenance drones now have t-ray scanners - - rscdel: AI can no longer access objects in a non-connected z-level, including - shuttles at away sites. Distant holopads are still accessible. - - bugfix: Brig cell timer stop buttons are now clickable. - SimpleMaroon: - - bugfix: SAARE is now properly selectable as a faction under character setup. - - bugfix: Corporate berets are no longer colorable. - purplemontart: - - tweak: Edits the turban icon to be based on the hijab instead of the towel sprite - thasc: - - bugfix: Slimes should no longer electrocute themselves on a grille unless the - window around it is broken. -2020-07-24: - NullSnapshot: - - rscadd: Replaces current chat system with an html based one called vchat, allowing - for more powerful functions including... - - rscadd: Dark mode is now in the game, which toggles the color of the chat bar, - stats/verb panel, and game background. - - rscadd: Chat now features a ping counter allowing you to see the current connection - status with the server. - - rscadd: Chat tabs! The chat window now supports multiple tabs through its control - menu, allowing you to filter chat on a per tab basis. - - rscadd: New message highlighting will indicate to you when new messages are visible - to you across any tab - - rscadd: Line combining. Repeat messages sent one after another will combine in - order to reduce clutter. - - rscadd: animated messages. User toggle setting to have text fade in instead of - their normal behavior. - - rscadd: Configurable line height, allowing you to change the distance between - lines in the chat box. - - rscadd: Chat persistence. If you lose connection, when you reconnect you'll automatically - retain any of the last 200 messages you've seen. - - rscadd: Vchat preference toggle added. If you'd prefer to use the legacy old chat, - you can do so by toggling Use Fancy Chat in your preferences. Changing between - the two should be more or less seamless, as the last 200 messages will be preserved - in either mode. -2020-07-25: - Imienny1: - - bugfix: High lung damage no longer indefinitely increases the time the mob that - contains them cannot breathe for. - - tweak: CPR that causes a breath now allows healthy lungs to immediately breathe - again. - - tweak: Added option to shake someone with breathing problems by aiming at arms. - Shadowtail117: - - tweak: Unathi are no longer affected by capsaicin and can casually drink hot sauce - without batting an eye. - SierraKomodo: - - rscadd: Adds non-holster belt variants to security lockers that didn't have them - (Forensics, COS, Brig Chief) - - tweak: Forensics belt can now carry CSI markers and the reagent/spectrometer scanners - - tweak: CSI kit can now carry the reagent/spectrometer scanners -2020-07-26: - Detritus-Ha: - - spellcheck: Fixes some small mistakes in codex entries. - - spellcheck: Disposal conveyor switches now have proper names. - MrKicker: - - admin: Staff can re-edit admin-faxes instead of re-writing the whole thing. - PsiOmegaDelta: - - rscadd: Personal shields now have an internal charge, refilled by the installed - power cell - - rscadd: Personal shields shut down when the internal charge level is insufficient - to protect the user - - rscadd: Personal shields automatically turn back on once the charge level is sufficient, - if they shut down for the above reason - - rscadd: Personal shields can be examined to see both cell and charge levels - - bugfix: Personal shields turn off when the power cell is removed - Shadowtail117: - - tweak: "Handheld radios now use device power cells instead of regular cells. As\ - \ a byproduct, they now have considerably less charge\u2014about 60 messages\ - \ on a full battery. Use it well!" - - tweak: Injecting or drawing blood from someone with a syringe now causes a bit - of pain. - - tweak: Injecting someone with a hypospray causes a bit of pain, but less than - the syringe. By extension, autoinjectors work the same way. - SimpleMaroon: - - maptweak: Robotics has 50 sheets of plastic, up from 10. - - maptweak: The Robotics Workshop has a welding fuel tank. - - bugfix: The biohazard cart in Robotics Surgery is accessible to Roboticists. -2020-07-27: - SierraKomodo: - - tweak: Forensics drones now have anatomy skill to allow them to perform autopsies. -2020-07-28: - NullSnapshot: - - rscadd: Cell powered radios now show their current charge remaining in their examine - text. - SierraKomodo: - - bugfix: CSI kit can now carry all of the CSI gear again. - - tweak: Long-distance holopad calls now require both holopads to be long-range - instead of just the calling pad. Also means AI cannot do long distance holopadding - unless it's on a long-range pad. -2020-07-30: - NullSnapshot: - - rscadd: Replaces current chat system with an HTML based one, allowing for a lot - of more powerful functions including... - - rscadd: Dark mode options are now available for the game, which toggles the color - of the chat bar verb controls, and game background. - - rscadd: Chat now features a ping counter allowing you to see your current quality - of connection to the server - - rscadd: String highlighting! You now have the ability to highlight up to 5 different - strings in chat to draw your attention. - - rscadd: New Message highlighting. While scrolling back through chat, you will - now be informed of any new messages. - - rscadd: Line combining. Repeat messages sent one after another will combine in - order to reduce clutter. - - rscadd: Independently configurable line and icon sizes, allowing you to independently - change the size of each. - - rscadd: configurable line height, allowing you to change the distance between - individuals lines in the chat box. - - rscadd: You can now change the default chat font to any font supported on your - system. - - rscadd: Press alt-enter to toggle full screen - - rscadd: fit-viewport verb which automatically resizes the divider to exactly fit - the game window. - - tweak: Game window layout slightly changed to accommodate these new features, - namely the input bar has been moved to directly underneath the chat window. - TheLordME: - - tweak: Increases the amount of RPD in the RPD crate from 1 to 2. -2020-08-02: - Albens: - - maptweak: Added an Alternative Colony map. It's not as fancy. - DeadmonWonderland: - - maptweak: Various minor changes to Orbital Mining Station. - - tweak: Orbital Mining Station meat mobs do edged damage and have natural armor. - Mucker: - - bugfix: Fix blast doors opening when objects collide with them. - NullSnapshot: - - tweak: Moves the input bar on the interface back to its original position - SierraKomodo: - - rscdel: AI and borgs are no longer permitted to access helm and navigational consoles, - to bring mechanics in line with current staff ruling. Shuttle control consoles - are still accessible. - - tweak: 'Languages across all borg modules are now standardized: All non-alien - borgs understand and speak all human languages, and can understand but not speak - sinta, skrellian, and sign language.' - - tweak: Maintenance drones can understand ZAC but cannot speak it. - - rscdel: Mech piloting skill has been removed from all borg modules except the - ascent drone. - - maptweak: Added medical intercoms to medbay - - tweak: Security intercoms can now be set to the Security channel - Setting intercoms - to this channel has the same access restriction as setting a handheld radio. - - tweak: The OFD no longer has a chance to knock over flying mobs or the AI. -2020-08-03: - Albens: - - maptweak: Changes to the descriptions of the Supermatter Specialty Control buttons. - - maptweak: Adds additional secure area signs around atmos maintenance. - DeadmonWonderland: - - rscadd: Adds Old Lab 2, an exoplanet spawn. - Devildabeast: - - tweak: The Union Enforcer and Union Representative now start with empty pockets. - - tweak: The contractor Shuttle Pilot no longer spawns with a jacket. - - tweak: The contractor Forensic Technician no longer spawns with a coat and hat. - - tweak: The Paramedic alternate title no longer gets an EMT belt. - Kearel: - - tweak: Tendrils now penetrate armor and deal more damage. - - tweak: Biters are now a tier 1 item. - - tweak: Shooters have more range and their projectiles weaken and embed. They are - now a tier 2 item. - - tweak: Doubled the number of resources nutrient siphons give. - Rowtree: - - tweak: Adds more drinks to the lunchbox selection. - - tweak: Adds Lemon Juice to the Booze-O-Mat - - tweak: Coconut Milk no longer requires Nutriment. - - tweak: Removes Brown Star, as it was redundant with the addition of Orange Cola - - tweak: Replaces Starkist cans, which were Brown Star with Irn Bru. - - tweak: Nevadan Gold Whiskey no longer requires Irish Coffee, instead uses Irish - Cream as intended. - - tweak: Tweaked Booze-O-Mat Layout and in some cases, added the alcohol type to - the bottle name. - - tweak: Lowered the amount of juice cartons to encourage botany play. - Shadowtail117: - - admin: Admins can now specify a reason when dispatching an Emergency Response - Team that will be shown to the team when they spawn in. - - rscadd: 'The Emergency Response Team channel has its own key now: "O"/"o".' - - tweak: The Emergency Response Team welcome text has been modified to be more clear - on who the leader is and your role in the game. It also includes the reason - specified by the admin that dispatched it. - - maptweak: Added an all-in-one telecomms machine to the ERT shuttle that allows - them to speak on their own private frequency at the base, in transit, and on - the Torch (or anywhere their shuttle is). It is not advised to mess with it - even if you have the tools to do so. - - tweak: Emergency Response Team headsets now have their default channel set to - their private frequency. This can be manually changed back to the common frequency, - but doing so is irreversible! - - maptweak: Added a reagent grinder to the medical section of the Emergency Response - Team base. - - spellcheck: The "SEV Torch" is now considered an improper name, meaning "the" - will be added before it in some cases. The same goes for the FTV Bearcat. - SierraKomodo: - - tweak: Crew Monitor now sorts properly by name instead of by deck. - - tweak: Crew Monitor now reads off connected z_levels. Might affect how sensors - work on off-ship z_levels. - - bugfix: Broken decals, turfs, wall-mounted objects, furniture, etc should no longer - be broken. - TheLordME: - - rscadd: Meters can now be clicked directly to read the value, instead of haveing - to examin them. Works only from adjacent tiles for Non-Cyborgs. - - rscadd: AIs can now read Meters by clicking on them. -2020-08-04: - CrimsonShrike: - - rscadd: Adds a couple sounds to exosuits. - - rscadd: Robot analyzers now work on exosuits. - - rscadd: Clicking exosuit health icon will now give a reading of its status. - - tweak: Exosuit hud buttons are no longer movable. It only seems to cause problems. - - bugfix: Exosuits with opaque cockpits and destroyed cameras now allow vision if - the cockpit is open. - - rscadd: Adds toolboxes to autolathes. - - tweak: Toolboxes now have matter - - bugfix: Mech extinguishers start with water. - - tweak: Mini extinguishers are craftable. - Hubblenaut: - - bugfix: Multitool can now toggle the power of injectors. - - bugfix: Sprites of injectors will now update accordingly again. - - bugfix: Fixes constructed windows being in an invalid construction state. - Kathy Ryals: - - tweak: You can now Alt Click to eject people from scanners, cryotubes, or sleepers. - - tweak: You can now Alt Click to eject a beaker from a chem master, dispenser, - grinder, heater, or cooler. - - tweak: You can now Ctrl Click a cryotube to turn it on and off. - - tweak: You can now Ctrl Click a grinder to grind. - - tweak: You can now CtrlAlt Click a grinder to eject the contents. - NullSnapshot: - - tweak: Shortwave radios now consume power over time instead of with every transmission. - They have been balanced to last for approximately an hour between charges. - - rscadd: Shortwave radios can now be turned on and off. While turned off, they - will not receive or allow transmission of any messages. Shortwave radios start - turned off. - - bugfix: Icons should now display correctly in fancy chat! - Rain7x: - - rscadd: Officers can now take their respective department berets from the uniform - vendor. - Shadowtail117: - - bugfix: The Discord !status command and the character setup map info blurb will - no longer display malformed characters. - - bugfix: Certain telecomms setups that don't use hubs will now correctly be garbled. - SierraKomodo: - - bugfix: Removes the holster sprite from non-holster forensics belt variant. - TheLordME: - - tweak: Weapon force affects APC cover knockdown chance. Crowbars can hit APCs - on harm. -2020-08-05: - Hubblenaut: - - bugfix: Fixes constructed windows not blending in with spawned ones. - - bugfix: Raiders can now properly use their holsters again. -2020-08-06: - Rhials: - - rscadd: Triple Citrus is now a mixable drink, made with one part lemon juice, - one part lime juice, and one part orange juice. -2020-08-07: - Albens: - - tweak: Drops job count of Life pod from 4 to 2. Too small of a map, too many slots. - DeadmonWonderland: - - rscadd: Adds Yeosa cultures, Littoral and Abyssals, to the cultures tab. - - rscadd: Adds Markesh to the unathi religions. - - rscadd: Adds Tersten to Unathi locations and cultures. - - rscadd: Adds various human languages to Tersten and off world Unathi. - - rscdel: Removes Gutter from Unathi. - - tweak: Unathi Cultures are now related to clans. - - tweak: Factions have been changed, the major Krukzuz, Ba'ask, Gresis, and Rah'Zakeh - league have been added as factions. Includes a independant option. - Shadowtail117: - - rscadd: There is now visible and audible feedback for when you begin grabbing - a humanlike mob. The message varies depending on if they are standing or not, - and there's another message for when you let go. -2020-08-08: - Myphicbowser: - - rscdel: You can no longer start or join the round as a Torch AI. -2020-08-09: - Albens: - - rscadd: New Human Provocateurs have been added. Three Vessels, and their corresponding - Holopads and Ship Names might be seen. - DeadmonWonderland: - - bugfix: Quick fix to Unathi cultures so proper languages are now assigned based - on your culture. - - rscadd: Adds more unsimulated tiles, mostly useful for building areas for events - without worrying about atmos. Includes some tiles that are sitting unused in - the files. -2020-08-10: - Boznar: - - maptweak: Removes areas associated with the AI - - maptweak: Removes the now defunct AI core - - maptweak: Important law boards are now in the CE rack, and upload consoles are - in the vault - - maptweak: Removes the AI upload, and replaces it with a rec room - - maptweak: Moves EVA down to deck four, and replaces it with an observation dome - DeadmonWonderland: - - rscadd: Adds virology icons as props, includes older icons found in various .dmi - YodaDoge: - - tweak: Matter decompiler can now decompile small amounts of metal rods -2020-08-11: - Albens: - - bugfix: Sub-humans can now spawn on the Gantry. - Boznar: - - tweak: Makes Chorus Tendrils less lethal - DeadmonWonderland: - - tweak: Changes Unathi languages around, removes gutter again. Readds Yeosa for - Sinta cultures.. - mikomyazaki: - - tweak: The duplicate message indicator in goonchat will now appear on the same - line as the message. -2020-08-12: - Kearel: - - tweak: Chorus construction speed is now hardcapped using the algorithm (25 * speed)/(24+speed). - This means each point is worth slightly less than the previous one. - - tweak: Removed the density of a few chorus objects that shouldn't have them - - tweak: Processor structures for chorus now only warn you once per structure that - you don't have to click it. -2020-08-13: - Shadowtail117: - - bugfix: Surgery failure messages no longer appear while eating on top of a chair - or table. - zaredman: - - maptweak: Removes most non-bar Booze sources. -2020-08-14: - CrimsonShrike: - - rscadd: Exosuits can now force airlocks and firelocks. They are still stopped - by bolted airlocks. - DeadmonWonderland: - - rscadd: Adds the Ssen-Uuma Convent, Ancestor Worship, and the Aga-Eakhe to the - backgrounds tab. Credits to Monitor Lizard for the descriptions for these backgrounds. - Shadowtail117: - - bugfix: When pulling a humanlike mob, the message will now change depending on - if they have both arms, only one arm, or no arms. - - soundadd: The sound volume for pulling a humanlike mob has been decreased slightly. - Spookerton: - - bugfix: Ships no longer apply burn acceleration twice for diagonals. - - bugfix: Ships no longer burn twice per deceleration step. - zaredman: - - maptweak: Moves Cyborg upload to D2 at old Janitor's room. Access from Drone maint. - - maptweak: Removes AI upload console from D1 vault. - - maptweak: Restores some synth boards; Reset, Purge, Sol, Sol Aggressive, Quarrantine, - and Asimov -2020-08-15: - Mordeth221: - - tweak: Dionaea are spaceworthy. - Shadowtail117: - - rscadd: You can now print out warrants to a paper on computers that have a printer - installed. They are designed for recordkeeping purposes only. - SierraKomodo: - - maptweak: Lights in playable landed colony ship exterior have been slightly repositioned - to no longer be on top of blast doors. - - rscadd: Windows now have damage overlays similar to walls. If a window is damaged, - you can tell without having to examine it now. - - tweak: ATMs now only accept proper ID cards - - tweak: Admin logs for supermatter related things will now clarify which supermatter - and provide a jump link. - - rscadd: Codex now includes entries for the imprinting implanter that explains - how to use it and the mindbreaker requirements. - - rscdel: Removed unused/broken `remove_implant` verb - - maptweak: Toxins lab window shutters should no longer randomly drop when the isolation - lab has an alarm - - bugfix: Smartfridges (The vending machines you can add stuff to) can now be moved - and rotated like normal vending machines. - - bugfix: Ejection of pilots from broken mechs should now function properly. - - rscdel: AI slippers have been removed from the codebase. (They were broken anyway) -2020-08-16: - Detritus-Ha: - - maptweak: Desperado turrets start disabled (you can now safely be naked in the - mercenary base). - Hubblenaut: - - tweak: There is now one type of shutoff valve for every pipe layer. - - tweak: Shutoff valves now hint at the direction of a leak. - Kozak411&Albens: - - maptweak: D4 aft has had a slight shuffle. D4 Safeoom is gone. - Mucker: - - tweak: Removes the "Request AI Presence" button from holopads if no AI exists. - Shadowtail117: - - tweak: IPCs can now wear most types of hardsuits that humans can wear. - - bugfix: In accordance with the removal of the AI from the Torch, you can no longer - select it as a job in your character setup. - SierraKomodo: - - tweak: RCDs can now dismantle windows, grilles, and low walls. Low walls can only - be dismantled if the accompanying grille and window is already dismantled. - - bugfix: RCDs can now build on open space tiles and on space tiles that aren't - in `/area/space` - - bugfix: Walls, grilles, and windows now update connections properly when a neighboring - wall/grille/window is deleted. -2020-08-17: - Spookerton: - - tweak: Accessories attached to uniforms are hidden by suits that cover them. - - tweak: Clothing & accessories flagged as bulky cannot occupy the same body zones. - - rscadd: Adds a light & medium armor that can be attached to uniforms. Antag-buyable - for 15/25. -2020-08-18: - Hubblenaut: - - bugfix: Fixes valves not connecting to adjacent pipes when being constructed. - - bugfix: Fixes shutoff valves not being interactable. - - bugfix: Fixes shutoff valves layering. - - bugfix: Single sheets of glass do no longer disappear when being reinforced. - Spookerton: - - tweak: Cyanide pills are named cyanide pill. -2020-08-20: - Boznar: - - maptweak: Bearcat, Lodge, Magshield away sites no longer contain lethal CO2 tiles. - Hubblenaut: - - tweak: The APCs on the bearcat spawn with power channels on 'Auto' - - bugfix: Fixes windows dropping more than four rods and glass shards. - Spookerton: - - tweak: Soulstones disrupt spells and psionics when full instead of empty. -2020-08-21: - Hubblenaut: - - imageadd: The shutoff decals now more resemble the new shutoff valves. - - bugfix: Fixes firealarm overlays on roundstart - Huntime: - - maptweak: Layout changes to deck-3 hydroponics. - SierraKomodo: - - bugfix: Ascent are no longer oxygenated by dexalin plus - - tweak: Ascent control minds can now access helm controls again. - - bugfix: Rescue bags will no longer randomly delete their air tanks when trying - to fold them while open, holding someone, or other failure states. - - tweak: Body bags, stasis bags, rescue bags, etc now provide a failure hint in - chat when you fail to fold them. - - tweak: Admin logs will now know the difference between people putting themselves - in cryo and people being put in cryo and display the correct relevant information. - Slywater: - - tweak: You can now only pry up tiles or catwalks with a crowbar on help intent. - ToddRafter: - - tweak: Helm consoles show their ships heading in degrees instead of eighths. -2020-08-23: - Hubblenaut: - - bugfix: Fixes people showing up naked on ID cards. - SierraKomodo: - - tweak: Shortwaves can now be recharged using wall chargers. -2020-08-25: - Boznar: - - tweak: Removes nutriment from raw wheat, rice, and soy - Hubblenaut: - - tweak: Fuel shutoff valves on the mercenary shuttle will be above the flooring - now. - - tweak: Mobs will no longer accumulate radiation in areas with green geiger readings. - - maptweak: Slightly cleans up the positioning of shutoff valves. - - maptweak: The waste pipe line is now separated by shutoff valves. - NullSnapshot: - - tweak: Vitals monitor beeping now works again - - rscadd: Vitals monitor can now be tied to an operating table by click-dragging - the monitor onto the OR table. - - rscadd: Vitals monitor now has an annunciator that you can toggle. It will periodically - let you know if things are going bad with your patient. - - rscadd: Adds codex entry for vitals monitor. - Rain7x: - - tweak: Lab Techs can now only take basic medicine and anatomy, instead of trained. - SierraKomodo: - - tweak: Senior officers and security cannot start as loyalists but can be converted, - the same as mutineers. - Spookerton: - - tweak: Door no-access audio can only play every 5 seconds. -2020-08-26: - Albens: - - rscadd: Gantry now has coloured salvage helmets to reflect the different jobs. - - tweak: Gantry now respects loadout restrictions. - Hubblenaut: - - bugfix: The ID appearance selection shows the job titles again. - Shadowtail117: - - tweak: Creeping around no longer makes any noise. - - tweak: The lenses in practice laser carbines have been tweaked to refract the - beams at an even lower concentration. As a result, they will no longer damage - anything they hit, though living targets will still feel the effects. - - rscadd: SCG-MED-04, the Medical Incident Report, is now available for medical - staff to use. -2020-08-28: - Detritus-Ha: - - bugfix: Telecommunications monitor no longer claims to be an Autholathe - Hubblenaut: - - rscadd: Adds codex entries for the shutoff valve. - - soundadd: Adds a sound for the shutoff valve interaction. - - imageadd: The red light indicating a leak will blink now. -2020-08-29: - Shadowtail117: - - rscadd: Mantid cryotanks now function as cryogenic storage. Similarly, there is - now an oversight console for them. - Spookerton: - - bugfix: Arithrazine and Lexorin no longer damage robotic limbs. - Sweedle: - - tweak: The "Please create an account" message now directs you to adminhelp. -2020-08-30: - Hubblenaut: - - bugfix: Placing tape will now leave fingerprints. - SierraKomodo: - - bugfix: Birthday cake recipe now functions correctly again. - - bugfix: Fixes ghosts being unable to teleport to places while visible. - - tweak: You can no longer buckle mobs if they're currently being grabbed. - - tweak: There is now a timer attributed to crowbarring chorus flesh tiles. -2020-09-01: - Hubblenaut: - - rscdel: Removes the phoron canister that spawns in the R-UST. - - bugfix: Fixes magboots showing up beneath voidsuits. - zkxs: - - bugfix: Deep Space can no longer move to nullspace with people inside of it -2020-09-04: - Albens: - - tweak: The Senior Enlisted Advisor is now unable to go above Experienced in their - Combat Skills. They're getting too old for this.. - - bugfix: Ascent Exosuit gauntlets are now insulated. - - maptweak: Modified some of the Ascent seedship's rooms. - Hubblenaut: - - tweak: Underwear can now be equipped with the equip hotkey 'E'. - - tweak: Monkeys will no longer fall into holes. - - imageadd: Gives thrusters some new sprites made by pawn. - Spookerton: - - bugfix: Computers can no longer turn on when they should not. -2020-09-06: - Albens: - - tweak: Executive Officer no longer has a camera overlooking their Bedroom. - Detritus-Ha: - - tweak: Removed gravity from gantry. - Hubblenaut: - - bugfix: Fixes the pipe leak on the mercenary ship. - - bugfix: Fixes firealarm overlays for away sites. - - tweak: The potato reactor will now display the coolant amount in its UI. - - bugfix: Fixes sprites not updating when getting cleaned by space cleaner. - - rscadd: Adds ETA timer to shuttle consoles. - PsiOmegaDelta: - - bugfix: When outfits, typically the clothes and items that come with a job, are - equipped any items which are put in already occupied slots should now properly - be put in bags or similar storage instead of being dropped (usually in nullspace) - Shadowtail117: - - tweak: Legalese now has a proper shorthand name, "Law", instead of "???". - - bugfix: The reagents in protein bars will no longer react with each other to produce - new reagents (looking at you, citrus blast). - - bugfix: PDA paging messages will no longer reach you if you are not on the Torch. - - bugfix: Fire alarms will no longer tell you the current alert level if you examine - them if you are not on the Torch. - - rscadd: The forensic technician's locker now has black webbing in it at roundstart. - and Shadow: - - rscadd: Adds various types of department memos, notices, and other documents spread - around the ship that change every round. They are not full written documents, - instead they are a summary of what your character reads off of the documents. - These notices do not reflect the staff administration's stances or points of - view on topics. -2020-09-07: - Hubblenaut: - - imageadd: Uses new sprites for the paint gun made by pawn. - - tweak: Renames paint gun to paint sprayer. - - tweak: The paint gun can now select colors from airlocks. - - tweak: Can now use Ctrl+Click on paint gun to quickly change mode. - - tweak: Can now use Alt+Click on paint gun to quickly select a preset color. - - tweak: Adds some missing floor decals to the available decals. - - bugfix: The paint gun can now precisely place quarter-truf decals again. - - bugfix: Fixes the paint gun's color selection for floor decals. - - bugfix: Fixes the paint gun's interactions with other objects (tables, racks and - similar). - SierraKomodo: - - bugfix: Protein bars are once again eatable. -2020-09-08: - Albens: - - bugfix: Gives the Gantry a Cryostasis pod. - - bugfix: Small changes to Gantry to reflect play. - - bugfix: Gets rid of teleport beacons on Gantry and Bluespace river. - - tweak: Medical Storeroom area now follows the same naming as the access door to - it - SierraKomodo: - - bugfix: Various power cell bugfixes, primarily relating to unvendable power cells, - missing cells from supply orders, etc. -2020-09-09: - Albens: - - tweak: Medical's Cryogenic Cooler now starts at 80 kelvin by default. It already - starts on. - - tweak: Remove Medical THERA Safe room door braces. - Detritus-Ha: - - maptweak: Removed unusable solar panels from bridge solar array. - Shadowtail117: - - rscadd: You can now tactically reload most ballistic firearms by clicking on them - with a magazine of the correct type while they are loaded. You need to have - at least experienced weapons expertise to do this, and you must be on grab intent. - Being a master is faster. - - rscadd: You can now speed reload most ballistic firearms by clicking on them with - a magazine of the correct type while they are loaded. You need to have at least - experienced weapons expertise to do this, and you must be on harm intent. Being - a master is faster. -2020-09-10: - SierraKomodo: - - tweak: Players no longer see AOOC muting messages unless they have access to AOOC. - - tweak: Dispersive blasters no longer describe themselves as banned/illegal -2020-09-12: - Albens: - - bugfix: Forensics Technicians and Chaplains have access to the Medical Foyer, - allowing them into the Morgue via the front door. - Mucker: - - tweak: Replace anonymous ghost toggle in the Ghost tab with a persistent preference - option called 'Show Ckey in Deadchat' in the Preferences tab. This is ON by - default. - SierraKomodo: - - tweak: Forensics sample kits can now be used on containers, tables, racks, etc - on non-help intents without dropping/placing/storing them. - kozak411: - - tweak: Department Heads and the XO can no longer spawn as renegades. -2020-09-14: - CrimsonShrike: - - bugfix: Torch self destruct correctly has a minimum time of 5 minutes. - Mucker: - - tweak: Changing other players physical status or viewing records with medical/security - HUD eyewear is now access restricted. - SierraKomodo: - - bugfix: Job IDs should spawn with correct information now, resolving issues with - email and money account access. -2020-09-15: - Hubblenaut: - - tweak: Personal lockers will now spawn unlocked and will only be in use while - locked. - - bugfix: Fixes several issues around personal shields. - - tweak: The personal shield can now be toggled using Alt+Click. - - tweak: You can now remove the power cell from the personal shield using a free - hand. - - rscdel: The personal shield will no longer leave an intact power cell behind after - exploding. - - maptweak: Includes a changing section in D3 head. - Ithalan: - - bugfix: Psionic armor now actually works - - tweak: Resistance from protective gear is now checked and applied to incoming - damage before any inherent resistance a mob has - Shadowtail117: - - tweak: Lockers, backpacks, and other containers will no longer protect mobs from - being damaged if they are flushed down disposals. - - tweak: Being flushed down a disposal pipe will now harm you even if you're dead. - - admin: Admins will now be notified if an object containing a mob is flushed down - disposals. - - tweak: The money cannon now has a maximum amount of money that it can hold at - one time, currently set to 2000 thaler. - Spookerton: - - tweak: You can no longer slap, hug, or shake hands at a distance. -2020-09-16: - juxtaposed9930: - - maptweak: Removes the fireaxe from bridge storage. -2020-09-17: - SierraKomodo: - - tweak: Trained engines skill now lets you properly read the supermatter monitor - instead of getting randomized numbers. - - tweak: Atmosphere Control software now only displays alarms from connected z-levels. - - tweak: Atmosphere Control software now displays alarms in alphabetical order. -2020-09-19: - MrKicker: - - admin: Removed the old adminPM tool - SierraKomodo: - - tweak: Trainee roles are no longer eligible for round start on-ship antags. Trainees - can still be converted by loyalists, cultists, etc and are otherwise note exempt - from antagonist actions. -2020-09-20: - Albens: - - tweak: Removes SolGov Crew access from Infirmary Staging - Hubblenaut: - - tweak: NTOS progams will no longer start when there's no network connection. - - rscadd: Paint sprayers will now be able to paint pipes. - - tweak: Pipes can now be painted in any color. - - tweak: Adds an 'remove top decal' option to paint sprayers. - - rscdel: Removed pipe painters from the game. - Mucker: - - admin: Adds a volume input to Play Global Sound, and the ability to play locally - before playing globally. -2020-09-22: - Albens: - - tweak: The ITV Vuclan, and the ITV The Reclaimer have been remade based on their - playstyle and use ingame. - - rscadd: The Salvage Gantry now has ITV Spiritus, a local-transit only atmospheric - harvester. - - tweak: All Salvage Gantry shuttles and the Gantry ship have had their overmap - behavior and handling adjusted. - - rscadd: Various shuttle landing locations around the Gantry have been added. - - rscadd: Gantry shuttles can now 'dock' at the Torch. - DeadmonWonderland: - - rscadd: Adds more loadout options for contractors. - Detritus-Ha: - - maptweak: Removed the useless access button at EVA. - MrKicker: - - admin: Removed old Player Panel and renamed New Player Panel to Player Panel - RustingWithYou: - - maptweak: adds an igniter and window shutters to the Petrov toxins mixing chamber - - maptweak: adds an air pump to the Petrov toxins lab for filling tanks - - maptweak: Canister Storage now requires access_toxstorage to enter - - tweak: Scientists now have access to Petrov Maintenance -2020-09-23: - SierraKomodo: - - bugfix: Combat drones will no longer shoot themselves. - - bugfix: Combat drones will now properly die when they explode. - - bugfix: Crayon dust is now obtainable by grinding crayons. One crayon makes 10 - units of crayon dust. - - bugfix: Locked containers can no longer be bypassed with alt click. - - bugfix: Chem masters will no longer delete excess reagents when trying to transfer - more than the storage can support. - - maptweak: The brig chief newscaster has been moved to a wall next to the desk, - which makes the security department buzzer visible and clickable again. - - maptweak: The open atmosphere pipes on the playable colony for processing the - planet's air have been replaced with proper in/out vents - - maptweak: Air alarms have been added to parts of the playable colony that were - missing them - - maptweak: Playable colony no longer has three wall chargers stacked on top of - each other with no pixel adjustment. - - bugfix: It is no longer possible to remove pipes that have stasis clamps attached - to them. - - bugfix: It is no longer possible to attach multiple stasis clamps to the same - pipe. - - bugfix: Deletes pipes will now probably de-activate and detach any attached stasis - clamps. -2020-09-24: - MrKicker: - - admin: Fixes the keybindings for player panel, they now work in all hotkey/normal - modes - RustingWithYou: - - rscadd: adds ascent humanoid filter masks - - maptweak: places the filter masks on the seedship -2020-09-25: - CrimsonShrike: - - rscadd: Adds faucets. - - rscadd: Adds sealable drains. - - rscadd: Adds pool turfs. - Hubblenaut: - - bugfix: Fixes dual-wielded items not getting updated when an item in the other - hand is being equipped to an inventory slot. - - bugfix: Underwear will no longer be quick-equipped into pockets. - SierraKomodo: - - bugfix: AOOC enable/disable messages should now be properly hidden from non-antags - Zenithstar: - - maptweak: Added R-UST air alarm in the main chamber. - juxtaposed9930: - - rscadd: Guitars, Electric Guitars and Handheld Synthesizers can now be stored - on the back, with appropriate sprites. - - tweak: The mail event will now send a functional guitar instead of the one-note - wonder it previously used. -2020-09-26: - Hubblenaut: - - tweak: Holding the paint sprayer in an active hand now lets you pick and remove - color using ctrl-click and shift-click, respectively. - theunlovedrock: - - tweak: engineering suit storage units now require construction access, just like - their cycler, meaning roboticists can't open them. -2020-09-27: - SierraKomodo: - - tweak: LOOC color has been tweaked to be more different from medical color - Spookerton: - - rscdel: Removed space magazine program. - juxtaposed9930: - - tweak: Fixes an inconsistency in the Guitar on-mob sprite. -2020-09-28: - Spookerton: - - tweak: Reagent heaters/coolers no longer block mobs. - zkxs: - - tweak: Chief Engineers now have access to view the Robot camera network -2020-09-29: - Boznar: - - maptweak: Gantry improvements. Connected atmospherics, better hab module, gravity - restored, other minor tweaks. - Funguss & Onlinemph: - - rscadd: Monarch serpentids are now playable. Queens require GAS whitelisting and - an admin to open the slot. - - tweak: The Gyne's seedship hardsuit can now fit a particle lance in the suit storage - slot. - - tweak: Ascent jobs with the mantid gear harness now have it spawn in the belt - slot. - Hubblenaut: - - rscadd: Railings can now be painted using the paint sprayer. - Kozak411: - - tweak: Adjusts the Riot Security Voidsuit helmet. - SierraKomodo: - - rscadd: 'The jukebox and lobby screen now have five new tracks available, by Mikazu - on SoundCloud: Hull Rupture, On the Rocks, Rimward Cruise, Misanthropic Corridors, - and Voidsent.' - - tweak: The list of tracks on the jukebox is now in alphabetical order by title. - - tweak: Helms will now display a notification if a new sector is detected and added - automatically. - - admin: Admin proc calls now show in-chat logs. - - rscadd: Added a radio channel, Hailing, meant for use between groups from different - maps and sites. Command and exploration headsets gain it on :j. - - maptweak: Added telecomms servers to the Skrell ship, Vox ships, Verne, Bearcat, - and Colonies, with Hailing on :j and their own unique Common channels on ; or - :h. - - maptweak: Ascent shuttles and ship now have intercoms listening to Hailing. - - bugfix: Skrellship telecomms no longer ignores z-level limitations. - - tweak: Smartgun authorization messages sent to the holder no longer show the name - of who authorized or denied. - - admin: Place-map now displays user feedback and admin log messages when starting - to place a map. No more wondering if the map is actually spawning or not. Also - makes the existing feedback and log messages a bit more informative. - - tweak: The message displayed when shooting a gun now also tells you what/who you - targeted (SImilar to the message other people see). - - tweak: You now see messages when firing a silenced weapon. - - admin: Point blank shots now generate attack logs. - SierraKomodo & Pawn: - - rscadd: Picnic baskets have been added, and are available in the same places lunchboxes - can be found. -2020-09-30: - Hubblenaut: - - bugfix: Fixes modular computers, PDAs, tablets, ect. still emitting light when - offline. - SierraKomodo: - - bugfix: Ascent drones will no longer receive law change notifications for ion - laws they didn't actually receive. - - tweak: Diona nymph spawns now require a diona whitelist. - Spookerton: - - tweak: The overmap helms of the Charon, Guppy, Aquila, and away mission Bearcat - now require the same access as their docking/landing consoles. - - tweak: The Torch helm now requires its own access, assignable by ID modification - and given to the CO, XO, BOs, and CE by default. - - tweak: Floor mopping progress bars are now publicly visible. - - bugfix: Mopping up water uses the mop's speed instead of a fixed value. - juxtaposed9930: - - tweak: Adjusts the deconstructive analyzer values for the improvised coilgun to - match existing weapons more closely. - - tweak: Fixes human noses poking out of the new security helmets. - - tweak: Changes the executive assistant smartgun to a compact, removes body armor - from Executive Assistant lockers, and adjusts their required/maximum skills. -2020-10-01: - Albens: - - tweak: SRV Verne spawn weight has been modified. It will now appear 1/3rd as often. - Spookerton: - - bugfix: Some progress bars that weren't now are. Surgery progress bars are now - fixed. -2020-10-02: - Albens: - - tweak: All Exoplanets and Planets are now known by helm control consoles by default. - Hubblenaut: - - bugfix: Fixes oil smelling like blood. - SierraKomodo: - - bugfix: Submap radios and shortwaves are now properly named instead of being called - intercoms. - - bugfix: Submap radios and shortwaves now define the hailing channel properly instead - of a broken `0.0` channel. - - tweak: Crashed pod now has hailing frequency intercoms but not tcomms server, - while merchants now have a headset set to the hailing frequency. -2020-10-03: - CrimsonShrike: - - rscadd: Tweaked exosuit UI. Hardpoint buttons will change colour during cooldown. - Text is now more legible specially against white backgrounds. - Hubblenaut: - - bugfix: Fixes alt titles not appearing when polling the manifest. - - bugfix: Fixes shuttles in transit getting Torch announcements. - - bugfix: Fixes airlock controller sprite updates. - MrKicker: - - admin: Added Paralyze option to player panel. - - admin: Removed Paralyze from admin tab (still in right-click and player panel). - - admin: Moved 'View Persistant Data' to Secrets->Investigations. - - admin: Removed 'Show Player Panel' from admin tab (right-click still works, 'player - panel' unchanged). - - admin: Removed skills from admin tab (still in player panel / right-click menu). - afirpo & spookerton: - - rscadd: Reagent grinders and juicers can be constructed with printed circuit boards. - - tweak: Reagent grinder UI is updated to be more informative. - - tweak: Reagent grinder and juicer skill multiplier is now 50%, 67%, 83%, 100%, - 100%. - - tweak: Reagent grinders and juicers no longer steal fingers. - - tweak: Reagent grinders can use any beaker except vials and bowls as product containers. - Juicers can use the same, plus shakers. - - tweak: Reagent grinders can accept material stacks from sheet snatchers. Juicers - can accept pills from pill bottles. - - tweak: Reagent grinders and juicers can grind material objects like coins. Not - all material objects have chemical products set up, so this is spotty. -2020-10-04: - MrKicker: - - tweak: Added SMES to Drone Fabrication - Spookerton: - - tweak: Chili peppers, lavender flowers, peppercorns, tobacco, vanilla pods, cinnamon - sticks, ximikoa stalks, and affelerin flowers are now Tiny sized. - - tweak: Tower cap logs, cabbages, sugarcane sticks, watermelons, pumpkins, grass - rolls, bamboo, and melons are now Normal sized. - juxtaposed9930: - - rscadd: Adds new CTI xenoarch Voidsuits for Verne & offship use. - - maptweak: Changes the suit storage units on the Verne to use the new suits. - - tweak: CMO, CSO and CE can spawn with holster accessories. - - tweak: BOs & APA can no longer spawn with carrier vests. - zaredman: - - maptweak: SD exterior bolt button is no-longer usable by everyone. Only the CO - and XO can toggle it. -2020-10-06: - Cronac: - - tweak: Floral Somatoray can now induce species shifts while in "mutate" mode. - Detritus-Ha: - - maptweak: Removed AI displays. - Karlious: - - tweak: Modified the Skrell Rig suits to use new sprites - - tweak: Remove AI core from Bridge Deck elevator announcement - juxtaposed9930: - - tweak: BO headset keys now give access to the research, supply and service channels. - - tweak: Adjusts the unathi variant of the new security voidsuit helmet to better - fit their heads. -2020-10-08: - CrimsonShrike: - - rscadd: Added exosuit emergency release using crowbar. Battery swaps moved to - screwdriver. - Hubblenaut: - - bugfix: Fixes items not showing up properly in evidence bags. - Karlious: - - bugfix: Skrell Hardsuit gloves are now insulated - Pawn: - - tweak: White monotiles can be crafted from plastic sheets - - tweak: Monotile item sprites corresponds with their color - - tweak: Dark floor tiles are now made of steel rather than plasteel - SierraKomodo: - - maptweak: Verne, skrell ship, and colonies now have spare headsets in their crew - lockers and spare encryption keys for visitors. - - admin: Welding fuel had been spilled logs will now include their location and - a jump link. - Spookerton: - - bugfix: Normal sized produce can fit in plant bags. - - bugfix: Reagent grinders no longer produce infinite chems from sheets. - - bugfix: Trays can't pick up non-removable items, including borg chem dispensers. - - bugfix: Publicly visible progress bars appear above other stuff. - juxtaposed9930: - - tweak: Salvage voidsuit helmet sprites now match the suit more. - theunlovedrock: - - tweak: 'The difference between the amount of skillpoints minimum and maximum age - get is decreased by four: young characters start with 4 more skillpoints and - most ages have slightly higher skills, but the maximum is still the same.' -2020-10-09: - Shadowtail117: - - spellcheck: The ingame skill text for the Engines skill now reflects being able - to fully read the engine monitor at the Trained level. - Spookerton: - - tweak: 'Cookers can fit multiple items to cook at once: Candying Machine 2, Deep - Fryer 4, Grill 4, Oven 4, Cereal Maker 2.' - - tweak: Cookers have a cook time and a burn time instead of randomly deciding to - burn things on/after completion. All cookers finish cooking after 20 seconds. - All cookers except the Cereal Maker and Candying machine, which eject, burn - their contents after 40 seconds. While a cooker contains burned stuff, it has - a continuing chance to produce smoke. - - tweak: Added Frying, Steaming, and Boiling to the griddle. - - tweak: Heat-based cooking methods strip the "raw" prefix from any food that has - it. - - tweak: The color of a variable food's filling is blended with the main icon's - color instead of multiplied by it, making fillings look a bit more vibrant. - - tweak: You can't put mice in the oven anymore. -2020-10-11: - SierraKomodo: - - tweak: Salvage Gantry now has a unique 'encrypted' radio frequency that's not - common. Headsets were added but no telecoms server to aid in using shortwaves - with the `;` prefix. Intercoms next to salvage gantry helm controls now default - to the hailing frequency. - - bugfix: Plant should now be selectable in the Role section of character setup - for diona whitelisted players. - juxtaposed9930: - - tweak: Jobs requiring more skill and schooling now pay more consistently. -2020-10-12: - DeadmonWonderland: - - rscadd: Adds Unathi specific plating. Credits to spookerton for getting it to - work. - Hubblenaut: - - tweak: Increases the chance of vermin appearing in random maintenance closets. - MrKicker: - - tweak: Breach detection pressures on air alarms can now be adjusted. - - tweak: Breach detection is now more forgiving, allowing rooms to recover. - Shadowtail117: - - tweak: It is now slightly harder to disarm or push someone over. - - rscadd: 'Adrenaline, hyperzine, and synaptizine have a new effect: it is now more - difficult to disarm someone amped up on them.' - - rscadd: Added chat markup. Surrounding something in /forward slashes/ when sending - an (L)OOC message or a "say" or "me" message will italicize it. Credit to Aurora - for some of the code used. - - admin: Added a config setting, ALLOW_CHAT_MARKUP. This must be present in config.txt - to enable chat markup. -2020-10-13: - Karlious: - - tweak: Removes Diona from the Medtech and Trainee Medtech roles. - MrKicker: - - bugfix: Attempt at fixing the intermitant account load bug. - Slywater: - - bugfix: Husking no longer removes tentacles or other non-hair items. - - tweak: The husk mask has been greyscaled for use with all species. -2020-10-15: - MrKicker: - - tweak: The account load fix is now automatic, not needing you to click 'setup - character' - Slywater: - - bugfix: Crematoriums no longer delete their slabs when opening onto a mob - - bugfix: Crematoriums now actually burn and kill living mobs - juxtaposed9930: - - tweak: The Jensen shades no longer describe themselves at implants when they're - worn like glasses. -2020-10-16: - ChaosAlpha: - - bugfix: The paint-sprayer can now correctly clear decals off of floor tiles that - have hit the decals limit (currently 5). - Slywater: - - tweak: Door tape now layers over emergency shutters - - bugfix: Cats no longer flee from attackers when dead -2020-10-19: - Albens: - - rscadd: Exploratory Corps and Fleet now get Basic Athletics for free. - Shadowtail117: - - bugfix: Ending a say message with a colon will no longer append an unwanted period. - juxtaposed9930: - - tweak: Research headsets now have the exploration radio channel. - - maptweak: Engineering no longer has two different types of atmospheric suit cycler. - - tweak: The Athletics skill descriptor is now more humble. -2020-10-20: - juxtaposed9930: - - tweak: MAs are capped at expert forensics. FTechs are capped at expert weapons - and CQC. SEA is capped at trained piloting. - - tweak: Minor adjustment to XO job description; COs aren't all male. -2020-10-22: - Spookerton: - - tweak: You can't force someone intentionally lying down to stand up. - - tweak: Operating tables apply a short forced weakened state instead of setting - manual resting. - anconfuzedrock: - - tweak: lab assistants now have access to the guppy helm, aka they can pilot it. -2020-10-23: - Mucker: - - tweak: Add the missing 'subtle' style class to goonchat, tweaks colour for darkmode. - Spookerton: - - bugfix: The bee smoker uses a sprite that exists, so it no longer breaks in bags. - juxtaposed9930: - - tweak: All departments heads have basic Aquila access - - maptweak: Aquila turrets start disabled - - bugfix: Bridge EVA Chief Engineer suit storage now requires Chief Engineer access. - - maptweak: The area for the D2 teleporter has been slightly tweaked to allow people - with teleporter access to use the main door instead of running into the tunnels. - - maptweak: The D3 Garden now has blast shields that can deploy over the exterior - windows. - - maptweak: Hydroponics, Lounge, and D3's Aft Bubble now use blast shields for their - exterior shutters instead of flimsy mall shutters. - - maptweak: The Cryostorage areas are now radiation and ion shielded so poorly timed - spawns don't suffer. -2020-10-26: - Spookerton: - - bugfix: People are no longer naked on setup, IDs, holocomms, etc. - juxtaposed9930: - - maptweak: Navpoints around the Torch are renamed to better indicate location, - and moved to avoid some of the accidental spacing incidents prone to some ships. - - maptweak: Desperado & D4 EVA slightly adjusted to allow the Desperado to "dock". -2020-10-27: - Hubblenaut: - - bugfix: Fixes paint sprayer click behavior for borgs. - - bugfix: Fixes locks being invisible. - Imienny: - - tweak: Vox spacesuits no longer hide boots and gloves. - - bugfix: Gear harness worn by vox now use gear harness texture. - Mucker: - - bugfix: Fix gestalts not being able to absorb nymphs. - Shadowtail117: - - bugfix: The pill bottle colors for kelotane and dermaline are now appropriate. - - spellcheck: Bicaridine no longer claims to be analgesic. - SierraKomodo: - - bugfix: The ID Scan wire on airlocks now removes access restrictions when pulsed - or cut, except for secure airlocks which become permanently access-locked to - everyone until fixed. - Spookerton: - - tweak: You can store rings in wallets. -2020-10-28: - Shadowtail117: - - rscdel: The Corporate Liaison's book containing a suicide pill has been removed. - SierraKomodo: - - tweak: Medical body scanners now highlight 'minor' things in yellow to make them - more noticeable. - Slywater: - - rscadd: The black tar serum now has multiple infection stages over the course - of ingestion. - - tweak: Zombies no longer feel pain and can be put down through sustained damage, - multiple headshots, or cremation. - - tweak: Zombies are now able to spread the infection through bites and scratches, - which depends on the target's tox and brute protection (bio gear provides immunity, - unless you have your intestines pulled out). - - tweak: Undead cadavers must be handled with an airtight mask or helmet (or bio - gear), to prevent any chance of infection. - - tweak: The Consume verb has been buffed to infect downed or strangle-grabbed opponents, - as well as present a nice set of gory effects. It also alleviates some of the - attacker's injuries. - - tweak: Zombies can break through almost any obstacle given enough time (including - bulkheads). - - bugfix: Any organic species (bar Diona) can now be zombified without sprite and - species data being screwed up. - - rscadd: Zombie NPCs have been added for use in events. - - rscadd: Players are able to ghost as a zombie, allowing an AI to take over. - - bugfix: Zombies can no longer use items and more specifically, weapons. - - tweak: Zombies now have their own language and no longer speak ZAC. - - rscdel: Removed fake hallucinogenic telepathy. - Spookerton: - - admin: Cryopod entry logging happens once and references the right clients. - - bugfix: Cryopods can't be entered at the same time by multiple mobs. - - tweak: Cryopods use public progress bars, give more feedback, add fingerprints - for both user and target mobs, and cannot be operated by Poppy. -2020-10-30: - Shadowtail117: - - tweak: Cryptographic sequencers (and their broken variants) have had their names - and descriptions altered to be less incriminating. - - tweak: If you are an antagonist, you can now see how many charges are left on - a cryptographic sequencer by examining it in your hand. - - spellcheck: Cryptographic sequencers now have a codex entry for antagonists. - - tweak: You can now only distinguish between a functioning/broken cryptographic - sequencer if you are either an antagonist or have Trained+ Complex Devices. - - spellcheck: A bunch of grammatical fixes to objects' descriptions. -2020-10-31: - Qlonever: - - tweak: The "baggy suit pants, colour select," "clothes selection," "formal pants - selection," "short skirt, colour select," "skirt selection," and "suit pants, - colour select" items in the loadout menu have all had their allowed_roles changed - from FORMAL_ROLES to SEMIANDFORMAL_ROLES. - SierraKomodo: - - maptweak: The medical safe room fore bolt button now toggles the fore door instead - of the aft door. - - bugfix: Zombie is no longer a selectable species in appearance editors. - - admin: Banned player's mobs now have their ckey stripped so they display the permanent - SSD message and instantly cryo. - - admin: Disposal bin stuffing and flushing are now attack logs instead of admin - logs. -2020-11-02: - Imienny: - - tweak: Grabs now update their name to reflect currently hold body part. - - tweak: Tendom cutting, throat slitting, eye squishing and headbutting now can - be done with any blue(or higher) grab. - - tweak: Throat slit now do roughly 2x more damage. - MrKicker: - - admin: removed man-up from context menu - - admin: drop_bomb is now cancelable. - - admin: ai_set_hologram, jump, and get verbs removed from context menu. - - admin: Condensed targeted narrates into one verb called 'narrate'. (local and - global are still seperate) -2020-11-03: - SierraKomodo: - - admin: Ban messages in logs and displayed to users will now display ban time in - terms of years, months, weeks, day, hours, and minutes, as applicable, instead - of a long number of minutes. - lorwp: - - maptweak: The kitchen now has a glass window viewing into the Bar. -2020-11-07: - yvantitov: - - tweak: The cuffs and collar of the fleet senior officer's uniform are now gold - on the back, like the trim on the front of the uniform. -2020-11-13: - Hubblenaut: - - bugfix: Fixes the Reclaimer's shutte location at the Torch not being reachable. - - rscdel: Removes the wall emergency lockers from the Bearcat. - - bugfix: Fixes some atmospheric inconsistencies on the Bearcat. - - maptweak: Fixes wall objects on the Bearcat blocking each other. - - rscadd: Adds an oxygen canister to the Bearcat's EVA storage. - - imageadd: Adds new sprites for simple doors made my pawn. - - tweak: Simple doors and other furniture can now be made with gold, silver, copper, - bronze and plastic. - - tweak: Simple doors do no longer block atmosphere. - Mucker: - - bugfix: Fix lunchboxes having a double comma in the listing of its contents in - the loadout menu. - - bugfix: Fix players being able to walk through railings, onto tables, after attempting - to leap to a different z-level. - - bugfix: Fix being able to toggle a guns' safety while unconscious. - - bugfix: Fix MC being crashed by clicking "Reconnect" on unlinked consoles. - - rscadd: Add the 'Exoplanet awakening event', which adds the potential for hostile - mobs to appear from time to time. - - bugfix: Fix walls being able to be dismantled in holodeck areas. - - bugfix: Fix being able to pull up tiles on exoplanets. - - bugfix: Fix HUD items not being able to find records for characters with special - symbols in their name. - Ninetailed: - - bugfix: Removed redundant Power and Radius settings from OFD console. - SealCure: - - tweak: Emergency lockers no longer have random contents, instead always containing - the same items. - Shadowtail117: - - maptweak: The deck four checkpoint's disposal unit has been moved to be in place - of one of the lockers. - - spellcheck: Updated the lift floor announcements to be more current with the map. - - bugfix: SkrellSnax can now be put into lunchboxes in your loadout preferences - and actually be in there. - - admin: '"Start Now" now has more logging and looks nice again.' - - tweak: You can now see if someone else toggles the safety of their gun within - 3 tiles of you. - - tweak: The sound for toggling the safety of a gun is now quieter. - Shadowtail117 & Dukica77: - - soundadd: Added a new lobby soundtrack, "Clouds of Neptune," by Dukica99. - SierraKomodo: - - admin: Reagent related attack logs now only appear for actually dangerous reagents. - juxtaposed9930: - - tweak: Torch loyalist and mutineer text no longer reference an extension, and - instead try to provoke more extreme behavior on both sides. - - tweak: The loyalist convert verb is now just "convert" instead of "convince recidivist". - - tweak: Shuttle-elevators like the Skipjack and ERT shuttle now have a base move - time of 120 instead of 240. - - tweak: The psychokinetic throw costs more energy to maintain, has a greater cooldown - between uses, is far less likely to instantly gib limbs, and must be targeted - again after every throw. - - bugfix: Gives science goggles their toggle button so you can turn them off while - wearing them. - - rscadd: Adds the new science HUD to the game and loadouts, so science too can - be look cool as heck. - - maptweak: Charon & Aquila external Airlocks can now by cycled by anyone with SolGov - Crew access. - - maptweak: Charon's cargo hold is no longer one massive airlock, and instead has - a small access airlock that can be cycled much faster. - - maptweak: MiningStation now has the effect necessary to make it appear on the - overmap. - - tweak: The "pistol ammo" supply pack now orders the correct ammo for the orderable - pistols. -2020-11-14: - Flying-loulou: - - bugfix: The knife sheath no longer clips with the drop pouches. - Flying_loulou: - - tweak: Duct tape fits in tool belts. Duct tape and some gloves fit in machete - belts. - Hubblenaut: - - maptweak: Maps in plastic doors in place of toilet curtains. - Mucker: - - bugfix: Fix players on a planet that aren't technically in the 'planetary area' - not being able to trigger the event. - Shadowtail117: - - bugfix: Fixed the access requirements on the upper level of expedition storage. - SierraKomodo: - - maptweak: The deck 4 aft hallway now has more air alarms. - juxtaposed9930: - - tweak: Hacked autolathes can now print human flechette ammo instead of just skrellian - flechette ammo. - - maptweak: Fixes some unpainted and double painted walls on the skrell scout ship. - - maptweak: The duplicate black webbing vest in Qrri-Zuumqix lockers has been replaced - with a thigh holster. - - tweak: The sprite for the security belt no longer overlaps on mobs right hands - in the side view. - - rscadd: The Torch now spawns "Bluespace Residue" on it's overmap location round - start. The Residue is known and acts as a "Torch was here" beacon to offships. - - tweak: The industrial hardsuit is no longer esword and egun proof and has slightly - more slowdown, but is no longer as weak to EMPs. - - tweak: Mercenary hardsuit gloves are now insulated. - - tweak: The medical hardsuit no longer has slowdown when powered. -2020-11-16: - Mucker: - - bugfix: Fixes some situations where non-existent bodyparts could be targeted and - attacked. - - bugfix: Fix being able to jointlock/dislocate even when the assailant's grip is - lost. - - admin: Removed unused 'Respawn Character' verb in 'Special Verbs'. - - rscadd: Adds a message that is sent to players in the vicinity of a shuttle taking - off or landing. - SealCure: - - imageadd: Resprites a large number of existing items with sprites made by Pebbles - Shadowtail117: - - tweak: You will no longer automatically check a dead or sleeping person's pulse - just by examining them. You can still use the Check Pulse verb to do it deliberately. - juxtaposed9930: - - rscadd: Creates the "advanced" SMES coil for admin and away site use. - - tweak: Skrell and Ascent SMES units now use advanced SMES coils. - - tweak: Fleet E-3 and Army dress can fit pins now. - - maptweak: Shuffled meatstation's inflatables to be actually usable. - - maptweak: The Skrell ship's airlock runs off cans instead of distro, Skrell lockers - get hailing radios. - - maptweak: Ahab's Harpoon's pipe system is no longer unfinished and should properly - pull from it's air supply. - - maptweak: Oldlab2 has had a leaky pipe fixed. - - maptweak: Removed diagonal wall turfs, carp, and the invalid knife from the casino - ship. - - maptweak: The D4 security checkpoint no longer has two cameras. - - maptweak: The D3 "firing range" camera no longer calls the bathroom a firing range. - - maptweak: The drains in hydroponics are now the proper type. - - maptweak: Lar Maria airlocks run on cans instead of distro. Corrections to various - Lar Maria asset positions & networks. - - maptweak: The lost supply station no longer has windows mapped over solid bulkhead. -2020-11-17: - Shadowtail117: - - tweak: Other people will no longer see when you use utensils, except when feeding - others. - - tweak: You will now get feedback on how full you are when eating from a utensil, - and can no longer overstuff yourself. -2020-11-19: - Ninetailed: - - rscadd: Lobby player list in alphabetical order - SammasC123: - - rscadd: Added hair dye and hair growth reagents. - Shadowtail117: - - tweak: Skrell no longer take immediate toxin damage from protein and instead only - feel sick in lower amounts. - - tweak: Various reagents that would contain animal protein now affect skrell. - juxtaposed9930: - - rscadd: Adds the missing sprite for the CSO hardsuit module. - - rscdel: Removes duplicate pathfinder hardsuit sprites. - - maptweak: Gives skrellship some chargers for their new shortwaves. - - maptweak: The skrellship hangar now has a door into the atmospherics room so you - can get scrubbers without crossing half the ship. -2020-11-21: - Hubblenaut: - - imageadd: New sprites for light switches. - Mucker: - - tweak: Removes broken spiderling spawn type from exo awakening event, replace - with big spiders. - - tweak: Exo awakening is now more likely to happen (though still rare), and can - be more dangerous. - - tweak: Mobs spawned by the exo event are now adapted to the planet they spawn - on. - Shadowtail117: - - tweak: The chemical dispenser UI now has options for 50 and 60. - - rscdel: Removed Legalese. - Spookerton: - - bugfix: Cyborg hyosprays can inject again. - deadmonwonderland: - - tweak: Added Unathi Kharza Fleet faction. - - rscadd: Added MiningHome away site. -2020-11-23: - Flying-loulou: - - tweak: Berets, folding knives, combi-knives and tapes now also fit in belts. - - tweak: Explorers and pathfinders can now also fit their light first-aid kit and - their flash in their 'chete belts. - Mucker: - - bugfix: Fixes meat monster names and attack texts to be grammatically correct. - juxtaposed9930: - - tweak: Industrial rig slowdown isn't quite as bad anymore. -2020-11-24: - Hubblenaut: - - bugfix: Fixes material doors spawning with the wrong direction. - SammasC123: - - rscadd: Added pickpocket gloves, allowing antagonists to stealthily steal from - others. - juxtaposed9930: - - tweak: Raiders now have dedicated random item lists for weapons and hardsuits. - - maptweak: The hacked raider lathe is on the skipjack now. - - maptweak: Skipjack now uses the raider-specific random item spawners. - - maptweak: Miningstation can now be landed at with shuttles. - - tweak: The pirate coat suit that raiders get no longer lies about being space-proof. -2020-11-25: - PigeonLord: - - rscadd: Adds a Mullet-Hawk hairstyle - RustingWithYou: - - tweak: adds new namelists for Monarch Serpentid Queens and Workers - - tweak: the Serpentid Queen and Serpentid Adjunct jobs will now pick a name from - their respective lists instead of just 'monarch of [cutter]' - Shadowtail117: - - bugfix: Skrell will now actually be affected by drinks that contain protein. - - tweak: Skrell will no longer gain any nutrition from protein. - juxtaposed9930: - - rscdel: Reverts the bulk sprite change. -2020-11-29: - Mucker: - - bugfix: Mobs spawned by the exo event can no longer be named. -2020-11-30: - juxtaposed9930: - - tweak: Hallucinating players will no longer hear people telling them to take their - clothes off or put more on. -2020-12-02: - Mucker: - - tweak: 'Exo event: now runs for a shorter amount of time.' - - tweak: 'Exo event: spiders, if rolled, will now spawn less frequently and to a - lesser amount.' - - tweak: 'Exo event: added a message thats displayed to all players on the planet - when the event ends.' - - bugfix: Fix the Exo event being announced multiple times on occasion. - - tweak: Events that fail to run will have a new event run in its place. - - bugfix: Fixes the backup server exploit where an infinite number of data drives - could be retrieved from them. - Shadowtail117: - - tweak: The redundant "Hide Map" button on the suit sensors program has been removed. - juxtaposed9930: - - tweak: Department heads can be head mutineers. - - tweak: All of command can be head loyalist. -2020-12-03: - hermaplusplus: - - bugfix: Fixed nabbers (GAS) joining with hostile stance by default -2020-12-05: - Mucker: - - rscadd: Adds the 'Show Job in Lobby' option to Preferences, allowing players to - choose if their high-priority job is shown to everyone or not while readied. - juxtaposed9930: - - tweak: SEA no longer has Tac-Arm access. They still have basic E-Arm Access. -2020-12-06: - SealCure: - - imageadd: Resprites most surgical tools and some organs, with sprites by Pebbles. - - imageadd: Resprites for binoculars, duct tape, device cells, cablecuffs, spraybottles - and the camera + film, with sprites by Pebbles. - juxtaposed9930: - - tweak: Exoplanets have more ruins spawning on them. - - tweak: BigColony is slightly less common, takes more budget, and has two less - jobslots, to four from six. - - tweak: SmallColony has one less jobslot, from four to three, and is slightly more - common. - - tweak: The crashed pod is slightly less common, and takes up less of the exoplanet - ruin budget. -2020-12-07: - juxtaposed9930: - - tweak: Drastically lowers the fountain exoplanet ruin's spawn cost. -2020-12-08: - Mucker: - - tweak: Allows exo event to occur on planetoid away sites. - - tweak: Exo event occurrences on bluespaceriver will have a significantly reduced - mob count. - - bugfix: Fix exo event spawned mobs spawning in mineral deposits. -2020-12-09: - Textor45: - - tweak: Switching off help intent will allow forensic tools to be used on storage - containers without storing the tool. - - imageadd: Adds radiation, medical, internals, and evacuation icons for status - displays. - - tweak: Adds radiation, medical, internals, and evacuation options in the C&C console - for pushing to status displays. - - tweak: Replaces icons for all alert levels. - - rscadd: Alert Status Border toggle is added to C&C for all status displays, allowing - all displays to reflect the current alert status without overriding the information - the bridge wants on the screen. - - tweak: Replaces the Nanotrasen default display state with an EC logo. - - bugfix: Fixes issue with Code Delta not showing in overlays on status displays - and fire alarms. - juxtaposed9930: - - tweak: Radio channels on shortwaves now have their own access. - - bugfix: Jobs can now access all their normal comms through shortwaves. -2020-12-10: - juxtaposed9930: - - tweak: All jobs can now enjoy drop pouches and webbings of all three varieties. - - bugfix: Fleet department heads now have the right officer coveralls in the vendor. - zkxs: - - bugfix: Voidsuit patches no longer prevent actual repairs -2020-12-12: - Mucker: - - tweak: Voidsuits can now only be dequipped by click-dragging them into an open - hand. - - bugfix: Fix events occurring off of the Torch being announced on Torch newscasters. - - admin: Stealthed admins will no longer show up in the pre-round lobby player list. - RustingWithYou: - - rscadd: gives MSQs a vocal synthesiser augment to let them speak Skrellian, as - it's a language they start with and it fits their role as diplomats among the - Ascent. The mantid vocal synthesiser also makes them able to speak the same - languages as regular GAS, in the unlikely event that they end up knowing them. - SDTheCyanWyan: - - maptweak: Removes the starting syringe gun from Medical Morgue Storage and Emergency - Armory - - maptweak: Shifts the two plasteel sheets to the now-empty rack in the Emergency - Armory - Textor45: - - tweak: Adjusts new alert icons. Screen border now acts as a lightbar, allowing - for the status to be less intrusive. - juxtaposed9930: - - maptweak: The bearcat's wiring has been cleaned up, and is in a more noticeable - colour. - - maptweak: Shuffles some bearcat APCs and a scrubber to declutter walls. - - maptweak: Bearcat areas now cover the hull appropriately. - - maptweak: The metroid monsters are gone from the bearcat. - - tweak: The Captain and XO lockers get their own armor, like all other heads. - - tweak: The Captain and XO lockers don't get two random bags, instead they get - a single satchel. - - rscdel: The shoal forward base doesn't exist anymore. Scav ship is untouched. - - tweak: Raider needs one less player rolling raider to start, from four to three. - - tweak: Raider won't always try to fill the six slot team, the target is now four. - lorwp: - - rscadd: A global preference has been added to suppress announcement SFX (Blob/Radiation - announcements, Alert Change sirens, etc) - zkxs: - - bugfix: Constructed pressure tanks now have the correct 10,000L volume instead - of 200L. -2020-12-13: - SealCure: - - imageadd: Resprites machetes and stasis cages with sprites by Pebbles. - zkxs: - - rscadd: Pressure tanks can now be colored -2020-12-14: - MistakeNot4892: - - tweak: Aim mode will now drop after the first reflexive shot. - juxtaposed9930: - - tweak: The hardsuit stealth module costs five times as much energy to maintain - stealth. - - tweak: The hardsuit teleporter module costs eight times as much energy to trigger. - Teleportation is expensive. - - tweak: The ninja hardsuit is small enough where cuffs can fit around it. Don't - get caught. - - tweak: The ninja hardsuit's laser armor has been lowered. -2020-12-15: - Mucker: - - tweak: Visitable away sites will no longer sometimes spawn with hazards over top - them. - hermaplusplus: - - tweak: Glasses that do not correct vision are now labeled non-prescription glasses - in loadout. -2020-12-16: - SierraKomodo: - - admin: Changeling stings now generate attack logs. - - tweak: Surgeon borgs now have syringes - - bugfix: Deceased mobs will now always properly show as having no pulse. - - maptweak: The SCGR office camera is no longer a part of the security camera network. - - admin: Injecting dangerous or harmful chemicals with a sleeper now produces attack - logs, for consistency with other injection methods. - - admin: Attack logs and other admin logs that didn't highlight antags now highlight - them in yellow, similarly to admin help logs. -2020-12-17: - Lorwp: - - bugfix: Fixed a typo in the she/her pronoun badge - SierraKomodo: - - admin: Smothering people with a rag and hitting people with an ignited rag now - generates attack logs. - - tweak: You now require a grab to smother people with a rag. - - tweak: Smothering people with a rag now has a timed progress bar - 3 seconds if - your CQC skill is trained or above, 6 seconds for everyone else. - - admin: Vecuronium Bromide now generates attack logs when injected - Sweedle & Rootoo807: - - rscadd: Adds pronoun badges, found in the "accessories" tab of the loadout. - - rscadd: Adds pride pins, found in the "accessories" tab of the loadout. - - tweak: Ranks and pins can now be attached to labcoats. - Textor45: - - tweak: The end of round summary no longer references the counter for escaped - or transferred personnel. - - bugfix: 'Airlock electronics UI now displays icons properly instead of using a - caret for every icon. imgadd: Biohazard, First-aid, square, square-check icons - have been added to NanoUI' - anconfuzedrock: - - rscadd: New space hazard, dark matter influxes which disrupt gravity generators - as long as ships are in them. -2020-12-19: - Mucker: - - tweak: Helmet cameras can now be accessed independent of NT-Net. - - tweak: The Camera Monitoring program can now be accessed without NT-Net, but regular - security cameras are inaccessible when NT-Net is down. - SierraKomodo: - - tweak: Pickpocket gloves can no longer be used to silently steal ID/PDA from the - ID slot - - bugfix: Windoors are now properly emag-able. - - tweak: Emagged windoors will now provide feedback they are broken when you try - to close them. - - tweak: You can now tell if a door's control board has been fried by examining - the door with an IT skill of trained or higher. - juxtaposed9930: - - tweak: The heavy exploration hardsuit is now pathfinder locked instead of all-access. - - tweak: The heavy exploration hardsuit now has insulated gloves for all your scavenging - needs. - - tweak: The heavy exploration hardsuit can now actually fit exploration related - items in it's suit storage. - - tweak: The heavy exploration hardsuit now uses the proper OBJ sprite. - lorwp & sweedle: - - tweak: Winter coats and hazard vests can attach insignia and pin accessories. -2020-12-20: - SDTheCyanWyan: - - maptweak: Replace two Medical Technician lockers near Autopsy with Cooler and - O2 (Cryo) set-up - - maptweak: Move one of the replaced Medical Technician locker to Deck Two Medical - Storage - SierraKomodo: - - tweak: Stripping someone else's underwear now creates a visible message and attack - log, consistent with all other strip actions. -2020-12-22: - anconfuzedrock: - - tweak: the gravity overload event no longer implies gravity will function as soon - as the system recalibrates. - - imageadd: the gravity influx space hazard has new sprites rather than one grey - blob. - juxtaposed9930: - - maptweak: Replaces the merc spawn, the desperado, with the Cyclopes. - - maptweak: The D4 fore airlock is now a docking port proper. - - tweak: Mercenaries can no longer by teleporter circuits since they don't have - a teleporter. - lorwp: - - bugfix: trainees now can't be autotraitored -2020-12-30: - MistakeNot4892: - - tweak: Reworked the Ascent seedship into the Ascent caulship, a much smaller civilian - vessel with half the crew size. - Mucker: - - tweak: Tweaks round-end messages to include a 'marooned' count, aka people who - were left behind. - Ninetailed: - - imageadd: Adds a new EVA Ban status display, accessible from the command program - PurplePineapple: - - tweak: '"Increases the Bearcat''s mass from 60 to 20,000."' - RustingWIthYou: - - tweak: supermatter shards can now be ordered from supply for a lower price than - a full supermatter core - SDTheCyanWyan: - - rscadd: Add newly added pins and pronoun badges to the Non-Essentials supply pack - SierraKomodo: - - bugfix: Emagged windoors now longer create two boards when deconstructed. - - admin: Spam flood autokicks no longer generate automatic notes. - lorwp: - - tweak: the first responder jacket and subtypes (EMT jacket, chest rig) now have - ACCESSORY_SLOT_INSIGNIA -2020-12-31: - Mucker: - - tweak: Exo event can now occur for non-torch players if no torch personnel are - on planets. - - tweak: Exo event mobs now have a chance to be force-spawned near a player. - anconfuzedrock: - - bugfix: Gravity failure hazards will not give gravity to shuttles anymore. -2021-01-01: - Mucker: - - bugfix: Fix the webhook not displaying the escaped count. - - bugfix: "Fix '\xFF' appearing ahead of the station name in the late-join list\ - \ in certain circumstances." - SierraKomodo: - - admin: Debug logs now appear in a distinct pink to better separate them from other - text. - Spookerton: - - bugfix: Changelings can't absorb DNA from synthetic mobs. -2021-01-02: - SierraKomodo: - - rscadd: Light bulbs now have a random tone to their lighting color, just like - real light bulbs. The tones are yellowish, blueish, pinkish, or if you're lucky, - pure white. - juxtaposed9930: - - bugfix: Ascent nymphs will no longer nibble ascent drones. -2021-01-03: - RustingWithYou: - - tweak: doubles voxship spawn chance to pre-scavship levels - juxtaposed9930: - - bugfix: The caulship airlock now cycles properly. - - tweak: The pilot is now a "technical" job and can get the associated gear in the - loadout. - zkxs: - - tweak: The miner cyborg module now has built in magboots -2021-01-04: - SierraKomodo: - - tweak: Pink light tones have been removed from the light bulbs. - juxtaposed9930: - - tweak: Wallets can now hold passports. - - tweak: Webbing vests & drop pouches are now in two drop down lists in loadout. -2021-01-06: - Mucker: - - rscdel: Removed rockets from the megabot. - - rscdel: Removed an unused debug-message in exo awakening. - - admin: Add the 'Mob Spawner Mode' to buildmode to allow for the automated spawning - of mobs via spawners. - SierraKomodo: - - tweak: Loadout items that fail to spawn selected contents properly now display - a warning to the user indicating there was a problem. If you see this message - that says 'contact a dev', contact a dev. - - admin: Item tweak failure debug logs no longer include the massive text dump of - all valid entries. - - bugfix: Ascent and skrell lights are now cyan again. - zkxs: - - tweak: Folding knives are no longer slightly worse than fixed-blade knives - - tweak: The steel lightweight utility knife no longer pretends to be made of titanium -2021-01-08: - MistakeNot4892: - - tweak: Caulship is now a space site instead of an exoplanet ruin due to bugs with - ruin code. - - rscdel: Caulship has Ascent atoms and more QOL objects mapped in including methyl - bromide tanks and alien showers. -2021-01-09: - PhosphoricPanda: - - rscadd: Security gets two boxes of smokes in equipment room. -2021-01-10: - PhosphoricPanda: - - maptweak: Space bikes begone. - SierraKomodo: - - rscadd: Windows and window panels on airlocks can now be painted. - eckff (Ported by SierraKomodo): - - tweak: Lightbulb sprites are now drawn above the lighting overlay to make them - more 'bright light vibrant' looking - juxtaposed9930: - - tweak: Biomods are now usable by baseline humans. - - rscdel: Boosters no longer exist as a distinct species. - - tweak: The "prison break" event no longer recommends AI involvement. -2021-01-11: - Mucker: - - admin: Adds a new buildmode mode for placing portals. - - bugfix: Mob spawners put on shuttles now stay with the shuttle after transitions. - juxtaposed9930: - - bugfix: Shuttle-specific navpoints on the Torch will no longer show up on other - shuttles. -2021-01-12: {} -2021-01-13: {} -2021-01-14: - Mucker: - - bugfix: Fix mob spawner copying sometimes not copying the mob list. - - bugfix: Fix spawners putting mobs in walls or on occupied turfs. - Spookerton: - - admin: Quick Create Object no longer exists. - juxtaposed9930: - - bugfix: Prosthetic hands no longer float on female humans. - - bugfix: The admin shuttle can dock again. - - bugfix: The new merc airlock doors work properly. - - bugfix: The new merc shuttle can dock again. -2021-01-15: {} -2021-01-16: - SierraKomodo: - - tweak: Pumps, valves, and other interactable pipe stuff now render above catwalks - so they're easier to access. - - admin: Players joining submap roles no longer trigger debug logs. - - tweak: Roller beds no longer buckle you when you drag them to yourself. - - tweak: Clicking people with melee weapons or random objects while on help intent - will no longer attack or cause harm. - Tennessee116: - - maptweak: The old survival pod ruin has been given a minor facelift. - juxtaposed9930: - - tweak: Rogue drone swarms will no longer occasionally announce as Class II laser - fire. - - tweak: The Ninja and Light hardsuits are now human and IPC restricted. -2021-01-17: - SealCure: - - tweak: The chance for a ZAC speaker to understand Selenian has been raised to - 85%, in line with the Selenian-ZAC understanding. - SierraKomodo: - - tweak: Default window color is now closer to the old desaturated cyan window color. - - bugfix: Windows now reset to the correct color when unpainted and untinted. - - bugfix: Turbolift door window sprites are now longer broken. -2021-01-18: - juxtaposed9930: - - tweak: Mining beacons emit a more useful amount of light. -2021-01-19: - Alex6511: - - bugfix: The xenoarch coolant tank is now the correct size. - JAR_OSKI: - - rscadd: Adds a Stop-Sounds verb. - juxtaposed9930: - - tweak: Quadruples the merc shuttle's starting fuel. -2021-01-20: {} -2021-01-21: - Alex6511: - - bugfix: Several airlocks on the Lar Maria away site will now function. - juxtaposed9930: - - tweak: Mercenary base no longer has mapped-in chameleon clothes. -2021-01-22: - PigeonLord: - - rscadd: Neckerchief added to loadout. - Qlonever: - - tweak: Various pixel fixes for labcoat onmob sprites. - SDTheCyanWyan: - - maptweak: Replaced away site two-door mapping with double doors and double airlocks - with singles. - SierraKomodo: - - maptweak: The janitor's closet now has lights outside the doors and signs pointing - from the ladder well to the closet. - Tennessee116: - - maptweak: The shuttle in the lost supply base has been replaced with a broken - supply drone. - juxtaposed9930: - - tweak: Nanomed+'s now lock generic toxin behind the contraband wire. - - tweak: Nanomed+'s no longer lock dylovene pills behind the contraband wire. - - tweak: Sleepers no longer have soporific. -2021-01-23: {} -2021-01-24: - Mucker: - - tweak: Replaces the 'Show Job in Lobby' preference with 'Show Ready Status in - Lobby' to make it easier for players to keep characters anonymous. - SierraKomodo: - - rscadd: Windows can now be repaired. The steps are use glass sheets of the exact - same material as the window was made of, then weld. The number of glass sheets - needed will depend on the window. - - tweak: Shattered windows now drop a random number of materials, making destroying - them a net loss in resources. - - tweak: Windows now show the material they're reinforced with when examined. - Tennessee116: - - maptweak: The SCG came around and refurbished the flags of the Torch. They no - longer are surplus from the SEV Icarus. - - maptweak: The SCGR's flag is no longer improperly pixel-shifted. - lorwp: - - admin: Direct/Global/Local Narrates now show for all staff, not just those with - R_ADMIN - - admin: Ditto with paralyze logs -2021-01-25: {} -2021-01-26: {} -2021-01-27: - Mucker: - - rscadd: Adds a preference option to toggle whether or not your presence is announced - when joining as an observer, called 'Announce When Joining as Observer'. - SDTheCyanWyan: - - tweak: Prevents inflatables from being used in space - Tennessee116: - - maptweak: The mining planetoid no longer uses shuttle walls, having been replaced - by regular titanium. - - maptweak: The mining planetoid no longer contains stacked turfs. - - maptweak: The SEV Icarus has received a medium-level facelift. - - maptweak: The Fallen Icarus away site no longer has airless plating. -2021-01-28: {} -2021-01-29: - SierraKomodo: - - bugfix: Lights in emergency lighting mode now use the correct overlay color instead - of still appearing bright white. - - bugfix: Ascent drones can now state laws. - Spookerton: - - tweak: The lobby tab now displays the time until the next continue vote, or the - initial and subsequent times before the round starts. -2021-01-30: {} -2021-01-31: {} -2021-02-01: - Mucker: - - admin: Add a debug toggle to turn on/off planets repopulating mobs. - - admin: Changed the mob spawner expiration debug message to include a jump-to button - and show its coordinates. - - admin: Added the 'Atmos immune' toggle to the mob spawner, making spawned mobs - immune to all atmospheric conditions. - Pebblesthe2nd: - - rscadd: 'New style for suit icons. Replaces most of the current ones. Purpose: - Standardize icons with something that looks better than the onmob sprite.' - - tweak: The icons for a variety of suit layer clothing have been replaced with - versions that are not the on-mob sprite. - Spookerton: - - admin: removed legacy log access verbs - - admin: removed legacy randomize everyone on spawn secret - - admin: removed legacy triple AI slot at roundstart secret - juxtaposed9930: - - tweak: Raiders now spawn with NVGs instead of thermals. - - maptweak: The skipjack now has a pair of NVGs instead of a thermonocle. -2021-02-02: {} -2021-02-03: - Ninetailed: - - rscadd: Robots can now unbuckle themselves and others from things by clicking - on them, just like a real boy! - - rscadd: Robots with the GPS/RPD as an active module now get coordinates in the - Status box the same as humans do - - rscadd: Surveyor module now has a harvester to gather plants for the bioreactor - - tweak: Robot net gun no longer has a safety, as selecting the module for use serves - the same purpose - - tweak: Vines can no longer grab you if you're flying - - bugfix: Net gun now actually fires nets instead of dropping them - - bugfix: Robot net gun now spawns with shells loaded - - bugfix: All living mobs, including robots, can break free of vines using the Resist - verb, rather than this being restricted to carbon life - SierraKomodo: - - rscadd: You can now select equipment belts and toolbelts in loadout options. The - belts will spawn empty - Find your own tools. -2021-02-04: - RustingWithYou: - - tweak: banishing nar'sie now deletes all simplemobs in the cult faction - constructs, - creatures, faithless, etc. - - tweak: banishing nar'sie now resets the skybox to its normal state - - tweak: banishing nar'sie now properly checks for cultists when doing the global - message - - tweak: cult walls and floors can now be deconverted through nullrod application. - banishing nar'sie will also deconvert those turfs - SierraKomodo: - - rscdel: Liquid Corruption can no longer appear as a random chemical in xenobotany - seeds. - juxtaposed9930: - - tweak: Portable floodlamps are now appropriately weaker than industrial floodlights. - - tweak: Forcing airlocks and firelocks with exosuit clamps breaks them. -2021-02-05: - Mucker: - - bugfix: Fix the gravity event end announcement being spammed. -2021-02-06: {} -2021-02-07: - BlueNexus: - - tweak: Added cooling modules to merc hardsuits - juxtaposed9930: - - tweak: Brainwashing implants are now restricted to traitor uplinks only. -2021-02-08: - Tennessee116: - - rscadd: Added binoculars to the bridge. -2021-02-09: - Ilysen: - - spellcheck: Fixed some improper naming conventions on labcoats and the radiation - suit. - - spellcheck: Surgical tools and advanced kits now have more descriptive examine - texts. - - spellcheck: Added descriptions to bone gel, bone setters, and the FixOVein. - - bugfix: The "custom event is taking place" popup no longer appears every round. - Pawn: - - tweak: Adds the ability to put a RPD in space suits storage where RCDs can. - SDTheCyanWyan: - - maptweak: Allows Shoal Technicians and Shoal Biotechnicians to access Voxship - Thruster APC -2021-02-10: - SealCure: - - tweak: Refactors departmental memos to be subtypes of paper, making them able - to be clipped, filed and bundled. - - rscadd: Adds readable and memo checks to paper, enabling the creation of unreadable - and unwritable papers. - SierraKomodo: - - maptweak: The miscellaneous research lab's teleport beacon has been moved outside - of the containment cell. - - maptweak: The miscellaneous research lab's containment cell's siphon now starts - off by default. - Spookerton: - - admin: Unbroke build mode overlay clickthrough - areas works as expected again. - theunlovedrock: - - tweak: you can no longer remove limbguards from the specialty armory armors. -2021-02-11: - BlueNexus: - - tweak: Changed the radiation unit to Ionization Units (IU/s) - Ilysen: - - spellcheck: Added a description to the body scanner and body scanner console. - - spellcheck: Fixed improper naming conventions for the body scanner and body scanner - console. - - spellcheck: There's now a single space character between blood level and blood - oxygenation to make the information smoother to read. Previously, they were - clumped together. - - tweak: Added visible messages for ejecting, climbing into, and climbing out of - body scanners, as well as taking scans and pushing them to displays. - - tweak: Climbing into the body scanner by clicking and dragging now mirrors the - functionality of the Enter Body Scanner verb, instead of acting as though you - were "placing" yourself inside of it. - Mucker: - - tweak: Separates off-ship roles in the round-end statistics. - Tennessee116: - - maptweak: The radioactive shrine has received a facelift. - - maptweak: (Hopefully) the last shuttle walls have been removed in CentCom. -2021-02-12: - Mucker: - - rscadd: Added shadows to turfs where shuttles are landing. - Pawn: - - rscadd: A brand new Memorial room for the fallen Solgov members with a brand new - Memorial Rock for all your private mourning needs. - SDTheCyanWyan: - - tweak: Print a message when a manual valve is opened/closed - Spookerton: - - tweak: EC service uniforms are back to utility + jacket. - - tweak: EC dress uniforms use the previous service under icons. - - rscdel: No more colored jumpers on EC dress unders. - - tweak: EC service jackets can have scarves attached. -2021-02-13: - Mucker: - - rscadd: Characters can now be quickly swapped by clicking on the 'Current Character' - name in the main lobby menu. - juxtaposed9930: - - maptweak: The forgotten raider thermonocle has been swapped for NVGs -2021-02-14: - CrimsonShrike: - - rscadd: Added exosuit pilot count information. Now you know something. - Spookerton: - - bugfix: You can juice cabbig. -2021-02-15: {} -2021-02-16: - Mucker: - - tweak: The main welcome menu now auto refreshes when swapping characters or when - the game starts. -2021-02-17: - Ilysen: - - rscadd: Added the Newscast program to computers. Acts like a read-only newscaster, - but on your PDA, Tablet, or Console. Comes installed on PDAs by default. - Mucker: - - tweak: Stops the character setup menu from appearing when quick-swapping characters. - Pawn: - - rscadd: Adds an athletics locker into the Deck 3 Head and Observatory. - SierraKomodo: - - bugfix: The skipjack's airlock will now use both vents when cycling. - juxtaposed9930: - - tweak: Halves the Aquila's shuttle mass to 10000, equivalent to two Charons. -2021-02-18: - CrimsonShrike: - - rscadd: Added exosuit machete. - EvenInDeathIStillServe: - - bugfix: Chocolate milk cartons from the SweatMax actually contain chocolate milk. - - rscadd: Stacks created on or moved into the same turf while not being thrown will - merge automatically. - PhosphoricPanda: - - bugfix: Cryptographic Sequencers correctly break open doors again. -2021-02-24: - CrimsonShrike: - - rscadd: Added exosuit ballistic shield. For your shielding needs. - EvenInDeathIStillServe: - - rscadd: Boron fusion can be done at the R-UST, using Boron chemical cartridges - purchasable from supply. Higher output than normal fusion, but with higher risk. - - rscadd: Gas facemasks can be pulled down to cover the neck. - Ilysen: - - bugfix: Robots/synthetics can now repair windows with their sheet synthesizers. - - tweak: The Background menu in character selection no longer puts the user through - a popup to select an option. Instead, clicking the name of an entry expands - a list that lets you select from all entries in realtime, which should hopefully - make it a lot smoother to use and open the door for new ones to be added again. - - spellcheck: Adjusted descriptions for several Chorus-related things. - - rscadd: Added death sounds for Chorus structures. - - rscadd: Added different death messages for each Chorus structure. - - tweak: Chorus structures can be examined to show their rough health. - - bugfix: Chorus spinal columns now work correctly. - Pawn: - - rscadd: You can pick up opossums and Poppy - PhosphoricPanda: - - tweak: Disposals are now marginally more lethal. Please avoid hole. - Ryan180602: - - tweak: Tweaks Miner Rig and Voidsuit armour values - - tweak: Makes Supply the default channel for Prospectors - SealCure: - - rscadd: 'Adds two new implants: a medHUD and a secHUD, toggleable with an action - button. Both can be implanted into normal and prosthetic heads.' - Spookerton: - - tweak: The minimum age of humans is 18. - - tweak: Drop pouches get 5 small slots worth of freeform storage and are renamed - to drop bags. - - tweak: Webbing vests get 5 small slots worth of freeform storage. - - tweak: Large webbing gets 4 small slots worth of freeform storage. - juxtaposed9930: - - maptweak: Fixes some walls on the TEV ruin that were the wrong type. - - maptweak: Replaces the annoying "low pressure" tiles from the TEV ruin. - theunlovedrock: - - maptweak: The Bearcat has a suit cycler and suit coolers. Spare oxygen has been - moved to atmospherics. -2021-02-25: {} -2021-02-26: - AzlanonPC: - - imageadd: Sprites for robot components have been completely replaced. - - imageadd: Different exosuit plating components now have unique sprites. - - tweak: Robot components now have descriptions. - Ilysen: - - tweak: The ChemMaster has received a visual revamp. It's no longer stuck with - the ancient basic HTML browser, and has received a NanoUI facelift. - - tweak: You can now cancel pill or bottle creation in the ChemMaster, instead of - being forced to finish once you started. -2021-02-27: - Ilysen: - - tweak: Emitters can be rotated with alt-click if they're unsecured from the floor. - - tweak: Examining an emitter with Trained engines skill or higher will show you - if it's emagged. - - spellcheck: Emitters have received a grammar and message pass. - Shadowtail117: - - rscadd: Holopads now show incoming caller ID and up to the last 5 recent calls - on examine. - SierraKomodo: - - admin: Fixes the cremation attack log reversing the order of attacker/victim and - claiming the crematee was the one creating the cremator. - - admin: Turret admin logs now display the user instead of 'INVALID' and have working - MOB and LOC links. - Spookerton: - - bugfix: Yeosa'Unathi can spawn in the same locations as Sinta'Unathi. - - admin: Build Mode Basic is gone, advanced was renamed to "build mode" and became - the default mode. -2021-02-28: - RustingWithYou: - - rscadd: The OFD can now fire at away sites again. - - rscadd: The OFD now has strength and range settings on its console again. - Tennessee116: - - maptweak: The CL's Office now has green carpet instead of brown. -2021-03-01: - Ilysen: - - tweak: Rewrote names and messages associated with supermatter cores and shards. - SierraKomodo: - - admin: Supply beacons now generate attack logs when activated - - admin: Suicide by gun in the mouth now trigger attack logs instead of admin logs, - including a new log when starting the suicide process -2021-03-02: - Mucker: - - bugfix: Fix crates/closets being deleted when fired from the OFD instead of sent - to their target. - SealCure: - - tweak: Removes mention of smell for synthetics when examining gunshot residue. - SierraKomodo: - - tweak: The scavver gantry coilgun now comes pre-loaded with a fully-charged power - cell and advanced capacitor, instead of having to load it yourself. - - tweak: Magnetic weapons (Coilguns and railguns) now have proper codex entries, - including mechanics tips on how to use them. - - rscadd: Light bulbs and lights can now be painted with paint sprayers. - - tweak: You will no longer bash lights with random objects if you're on help intent. - - admin: Light colors can now be easily modified by running the `set_color()` proc - on a light tube or a light fixture that has lighting installed. - Spookerton: - - bugfix: You can no longer drain donut souls directly from donuts into your own - blood; IV stands and roller beds can only use IV bags as IV bags. -2021-03-03: {} -2021-03-04: - JAR-OSKI: - - rscdel: Removes thermals from uplinks - Mucker: - - rscadd: Adds 3 new artifact effects. - - tweak: The teleportation anomaly now has a small buildup and warns affected players - before the teleportation occurs. - Spookerton: - - admin: Took per-action logs back out of build mode after spam complaints. - - rscadd: You can add fades to your hair through markings now, if you're a human. -2021-03-05: {} -2021-03-06: - juxtaposed9930: - - maptweak: Robotics now has a paint sprayer, for all your exosuit painting needs. -2021-03-07: {} -2021-03-08: - CrimsonShrike: - - rscadd: Added new exosuit module. Rotatory plasma cutter. It's automatic! - Lorwp: - - spellcheck: Voleyball > Volleyball - Mucker: - - tweak: Buffs damage of spiders, meat monsters, and planet fauna now that they - respect armor. - SierraKomodo: - - bugfix: Teleporters and other things dependent on the `player_levels` global no - longer break whenever a `teleport_far` anomaly is loaded. -2021-03-09: - Parazoid: - - tweak: Departmental pagers will now still alert you if you're using any handheld - computer instead of just PDAs. - Spookerton: - - tweak: You can't use ram horns and ears at the same time. - - tweak: Deployable barriers use access_brig because half the damn ship has access_security. - - tweak: Deployable barriers have more health, show condition on examine, and apply - cooldowns. - - tweak: Deployable barriers fail to anchor if EMPd or emagged. This is shown on - nearby examine. - - tweak: You can repair barrier health with a wrench and its anchorability with - a welding tool. -2021-03-10: - Ilysen: - - rscadd: Emergency shutters now play sounds when they open and close. - - spellcheck: Rewrote some emergency shutter messages from past tense to present - tense (i.e. "has opened" -> "opens"). - - bugfix: Fixed some mildly broken examine text for multipurpose cable coils. - - spellcheck: Lowercased the names of the emergency softsuit, emergency space helmet, - anomaly suit, and anomaly hood, to bring them in line with normal object naming - schemes. - - spellcheck: Fixed run-on sentences in the descriptions of the emergency softsuit - and emergency space helmet. - Ryan180602: - - tweak: Adds seperate smell feedback messages for synthetics - SierraKomodo: - - admin: Attack logs generated by ranged simple mobs now properly display the source, - and only appear in chat if both parties have a ckey (Like all other attack logs) - SierraKomodo & Pawn: - - imageadd: New sprites and lighting overlays for teleporters have been added. -2021-03-11: - EvenInDeathIStillServe: - - rscadd: The R-UST fusion field now changes coloration and light intensity depending - on temperature. - Spookerton: - - tweak: The succumb verb is gone. Use ghost instead if you're going to. - juxtaposed9930: - - tweak: Steel and plasteel are now slightly more resistant to brute damage. -2021-03-12: {} -2021-03-13: {} -2021-03-14: {} -2021-03-15: - Spookerton: - - tweak: Emagging exosuit fabricators succeeds immediately. -2021-03-16: {} -2021-03-17: - Imienny: - - bugfix: Prescription glasses once again work while using camera. - - bugfix: Goggles once again work when looking up. - - tweak: Its no longer possible to use binoculars inside of mechs with sensors providing - any vision flags. - - tweak: Binoculars/scopes temporarily disable worn goggles when used. - Mucker: - - rscdel: Removes gas generation artifact effects. - - bugfix: The artifact scanner will now properly detect secondary artifact effects. - - bugfix: Fixed the 'Touch' trigger for artifacts, poking rocks now actually has - consequences! - - tweak: Artifact effects will now remain on for longer when activated in order - for effects to have time to happen. - - tweak: '''Pushback'' artifact effect will no longer tear off limbs.' - juxtaposed9930: - - maptweak: Because of intense budget cuts, many of the Torch's reinforced walls - have been replaced with normal walls. -2021-03-18: - CrimsonShrike: - - rscadd: 'Adds terraformed planet subtype: Safe and a good source of meat and animal - products.' - - tweak: Planet generation has been tweaked. Expect more habitable or tolerable - planets where you won't need to use spacesuits. - - bugfix: Fixes some planets not being hostile as often they should be. - Tennessee116: - - tweak: Hull blue is now Sol blue. -2021-03-19: - CrimsonShrike: - - tweak: Intercomm quick access will now use exosuit radios if possible. (Use :i - while in a mech to use the mech radio) - - bugfix: Exosuit radios now will check distance correctly. - Ilysen: - - bugfix: Admin-sent faxes no longer open the fax editing menu when you finish writing - on them. - Shadowtail117: - - tweak: Skrell are now more tolerant of space drugs (found in qokk'loa) and will - no longer randomly giggle or move around when under its effects. - SierraKomodo: - - bugfix: Stunbatons now work on help intent - Tennessee116: - - tweak: Only security can select balaclavas in their loadout. - - rscdel: The forest planetoid away site has been removed. - - rscadd: There is a new exoplanet ruin, the crash of the SEV Icarus. - gy1ta23: - - tweak: Indie-Sympathizing leather supply office chairs replaced with God-Intended - SolGov Office Chairs. - juxtaposed9930: - - maptweak: Repaints the teleporter walls to normal hull black. - lorwp: - - tweak: High Visibility Jackets from loadout can now take ACCESSORY_SLOT_INSIGNIA - (pins, badges, etc) - - bugfix: Yeosa'Unathi can now take Cultural Exchange Patches -2021-03-20: - SierraKomodo: - - maptweak: The crashed survivor pod's fuel tank has been moved to a less exposed - area so it stops being shot randomly by mobs, events, and security. - - tweak: Most timed actions now tell you why they failed if they fail. - Spookerton: - - tweak: Emagging a jukebox no longer causes it to airhorn everyone and then explode. - - tweak: Boomboxes don't break on their own anymore, and only do so when EMPd. - - tweak: Boomboxes and headphones share a new simplified jukebox nano interface. - - tweak: Teleporters are only configured by their console. No more projector clicking. - - tweak: Teleporters can be reconnected if they get trashed but you have the bits. -2021-03-26: - CrimsonShrike: - - tweak: Mech light legs now prevent fall damage. - - rscadd: Exosuit manouvering units added. Space awaits! Added one to the exploration - exosuit to make it usable for away sites. Added another to salvage gantry mech - so it stops floating into space and dying. - - tweak: Mechetes have been adjusted to be more powerful but slower. - - rscadd: Exosuits now have power states. Remember to turn them on using power button! - - tweak: Adjusts some exosuit buttons to better reflect real state of suit - - tweak: Some exosuit modules will now consume power passively too. - - tweak: Flaregun impacts now have a chance to set victim on fire - - rscadd: Slide projectors. Maps one to the briefing room on Deck 1 - EvenInDeathIStillServe: - - tweak: Speech bubbles are animated now. - - tweak: Matter cartridges can be partially loaded to refill RCDs, both of the construction - and crossbow varieties. - Ilysen: - - tweak: Added some digital logs on modular computers on the Ahab's Harpoon away - site that elucidates more about what happened. Keep an eye out for new digital - logs going forward! - - tweak: Cultist pylons are now destroyed permanently when they shatter, instead - of being placed into a weird "broken" state where have the exact same sprite - but can be passed over. - - tweak: Cult pylons now have a proper health system, instead of using random chance - to determine if they're damaged. - - tweak: Wraiths now float, preventing them from falling down z-levels and letting - them counteract gravity. They'll still drift in space, though. - - tweak: Artificer abilities no longer use a super loud sound. - - bugfix: Finally fixed wraiths being unable to use their Phase Shift. - - bugfix: Fixed player-controlled simple animals (like constructs) being unable - to hurt things. - - bugfix: Natural weapons can no longer embed into wounds. - - bugfix: Artificers now correctly repair constructs on an attack instead of bashing - them. - Lorwp: - - tweak: New changelog generation method - Mucker: - - rscdel: Removed the 'teleport_far' artifact effect. - - admin: Adds a buildmode for editing an area, turf, and container atmospheres. - Ryan180602: - - rscadd: Drinking glasses can now be used to splash mobs - - rscadd: Beakers can now break when thrown, spilling its contents - - tweak: Add a harm-intent check when clicking on self with glasses/beakers - - tweak: FBPs are no longer affected by the effects of smoke - - bugfix: Fixes an oversight with unintentionally pouring reagents into dispensers - SealCure: - - tweak: Adds user feedback to toggling a HUDimplant. - - tweak: Nymphs engulfing drinking glasses will now obtain a glass shard instead - of deleting the container. - - tweak: Punitelli will now sometimes spawn with a fashionable pair of sandals for - his poor feet. - Spookerton: - - tweak: The appearance editor from antag appearance selection has languages on - it. - - bugfix: The vox mirror creates vox mobs appropriately equipped for their antag - type. -2021-03-27: - SammasC123: - - tweak: Pain multiplier for hits to the groin (and theoretically other genitals) - lowered from x2 to x1.5. -2021-03-28: - Ilysen: - - rscadd: You can now examine many circuit boards to learn some short information - about the machine they're used to build. Your Construction skill affects the - amount of info you glean, with Trained construction getting the most results. - - rscadd: Examining a machine with at least Basic construction skill will tell you - about its function. -2021-03-29: - SierraKomodo: - - tweak: There is now a delay between the exoplanet awakening event starting and - mobs actually spawning. - - tweak: Cargo trolleys can now be hitched together regardless of what direction - the trolley is facing. - - tweak: Cargo trolleys now tell you if and what they're linked to when you examine - them. - - bugfix: Natural weapons (I.e. teeth) will no longer embed in people. -2021-04-20: - ? '' - : - tweak: All torch fleet crew now spawn with departmental coveralls. - - tweak: All torch fleet crew can obtain fatigues from uniform vendors. - - tweak: The fleet jacket and fleet polo are no longer available from uniform - vendors. - - rscdel: Fleet officer's coveralls no longer exist. - - tweak: Fleet security enlisted now ACTUALLY spawn with coveralls. - - tweak: Orbital mining station description changed to be less important sounding. - - tweak: More guns have been added to the random raider spawns. - - tweak: Toolbelts can hold geiger counters. - - rscadd: The SEV Icarus ruin now has a green haze. - - tweak: Sealed skrellian hardsuits now contain skrellian booty properly. - - tweak: The skrellian engineering hardsuit's funny little welding arm is layered - properly now. - AzlanonPC: - - rscadd: implantable HUDs and multitools have different sprites for each variation. - Boznar: - - maptweak: unmaps flash from physician lockers - CrimsonShrike: - - rscadd: Adds exosuit flash. - - rscadd: Adds exosuit camera. - - tweak: Exosuit floodlights can be mounted on shoulders now too. - - tweak: Light exosuit chassis now has a single shoulder slot. - - tweak: Spherical exosuit chassis now seats 2. - - rscadd: Adds looking down. - - tweak: Changes and bugfixes for zmimic. - - rscadd: Adds diona nymph chirp as instrument. Don't say I don't ever give you - anything. - Cupax3: - - rscadd: Added a new Xynergy labcoat to the loadouts, available to all Civilian - & Labcoat-wearing personnel. - Hubblenaut: - - tweak: Regular use of the sauna will no longer trigger the air alarm in it. - Ilysen: - - rscadd: While unconscious or asleep, you may now get bolded message similar to - dreams to indicate that you're being treated, floating in a cryo tube, sitting - in a sleeper with stasis, or on an operating table - these are added with the - goal of helping someone understand what's happening to them even though they - can't see around them while unconscious. - - rscadd: Added a codex entry describing how SSD messages are displayed from a mechanical - perspective. - - spellcheck: Ghosted mobs now have a distinct examine message from disconnected - mobs. - - bugfix: Monkeys are no longer permanently comatose. - Imienny: - - rscdel: Its no longer possible to make combat mech sensors(thermal mech sensors) - - rscdel: Skrell scout ship no longer spawns with thermal goggles - JAR-OSKI: - - bugfix: Fixes hudpatch rogue pixel - Mucker: - - admin: Adds a faction modifier to mob spawner buildmode. - - bugfix: Player mobs inside things are properly notified of exoplanet spawn events. - - tweak: Added spiders and lowered meat horror spawn chance for exoplanet spawn - events. - - bugfix: Fixed the skill panel losing focus when editing skills. - - tweak: Moved the 'rename species' verb for exoplanet mobs to the IC tab and added - a right-click option. - - admin: Added a verb for spawning exoplanets, 'Create Exoplanet' in the Debug tab. - - admin: Adds the 'Notarget' verb to 'Special Verbs', toggling a mobs visibility - to simple mobs. - - rscadd: Nurse spiders can now 'feed' a small number of spiderlings to cause them - to begin growing. - - rscadd: Spiders can now use ladders. Cower in fear. - - bugfix: Fixed guard/nurse spiders not pairing up, so guards will now go 'berserk' - when their nurse is killed. - - bugfix: Nurse spiders will no longer cocoon other spiders (or themselves). - - tweak: Nurse spiders now have a chance to be able to spawn an egg cluster after - spawning, instead of needing to feed first. - - tweak: Egg clusters now take slightly more time to spawn spiderlings. - - tweak: Nurse spiders will no longer cocoon items. - - tweak: The hellportal artifact effect will now spawn abominations much less often, - so we may keep our limbs. - Ryan180602: - - rscdel: Remove Space-Adapted themed accessories - - tweak: Over-exertion and over-utilisation of pulse-heightening drugs like nicotine, - caffeine and hyperzine can cause cardiac arrests - - tweak: Add Construction/Electrical BASIC as default for Roboticists - - bugfix: Fixes splashing liquids in beaker when transferring to Condimasters - SealCure: - - tweak: Ascent caulship is no longer referred to as 'colony ship' in the join menu. - SierraKomodo: - - tweak: Thermals have been re-added to various antag sources that were previously - removed. - - admin: Mech weapons now generate proper attack logs instead of admin logs, and - only appear when targeting mobs. - - tweak: 'Windows now have a minimum damage threshold based on the hardness of their - material before they can actually be damaged by melee attacks, adjustments to - their health calculation based on material integrity, and now have proper armor - handling for melee attacks (Projectile processing for walls already had this). - Walls are overall more robust when attacking them. See PR #30429 for specifics.' - - rscdel: Uniform jackets and winter coats no longer provide any armor or protections. - - admin: Pulled punches no longer generate attack logs. - - rscadd: Papers are now written in languages. If you understand the language, you - can read it. If not, it has the same effects as hearing people talking in a - language you don't understand. You can set the language you're writing in when - writing on a blank sheet by clicking the language name at the top of the paper's - UI window. ZAC is used by default for each paper. - - admin: The fax prompt now has a 'Change Language' button to set what language - the fax is written in. ZAC is used by default. - - bugfix: Grilles of non-default materials now drop the correct material rod when - dismantled with wirecutters. - - tweak: Blob attacks on structures now use consistent damage handling. - - rscadd: Blobs will now open broken doors. - - bugfix: Wet people no longer show up as 'flammable' when examined, and instead - show up as 'wet'. - - tweak: Flying medic drones now have rollerbeds. - Spookerton: - - admin: Added a Reload Character option to player panel - rebuilds a valid mob - from current preferences. - Sweedle: - - bugfix: Added a recipe for Kamikaze! Combine 1 part vodka, triple sec and lime - juice for a sour treat. - - tweak: Cherry and strawberry soda are now made with cherry jelly and berry juice - respectively. - - bugfix: Hooch can now be made as normal. Fringe weaver is now made with 2 parts - ethanol, 1 part sugar and 1 part water. - - tweak: Fringe weaver will now get you significantly drunker. - Tennessee116: - - imageadd: Replaced the sprites of the secure briefcase and captain's backwear - gy1ta23: - - tweak: Added an extra box of sterile gloves to the infirmary, and a supply crate - for more. -2021-04-21: - BlueNexus: - - tweak: Temperature should have an increased impact on thrust, and burn mode works - again. - CrimsonShrike: - - tweak: Exosuits no longer accumulate radiation. They will instead return radiation - at current location reduced by armour directly. - Mucker: - - rscadd: Ported exoplanet themes from Nebula, includes Ruined City, Robot Guardians, - and Radiation Bombing - - tweak: Desert planets now have much less quicksand, but the quicksand that does - exist is now invisible. - - rscdel: Removed the ruined planet type, replaced with the 'Ruined City' theme - which can occur on any planet. - - admin: Fixed some buildmode nanoui's not working if you weren't ghosted. - Paprikue/Dox: - - rscadd: You can now toggle your HUDs on and off, without having to remove them, - in case you wanted to pull off the look while resting your eyes. Includes new - sprites for when they're off, and flashy sound effects to boot. - - rscadd: The science nerds can now get prescription Science HUDs so they can be - even nerdier. Available in loadout. - - tweak: Tweaked the Medical HUD visor colors slightly to better match normal medHUD - colors. - - tweak: EMPs now don't blind you if your HUD or goggles are deactivated. Security - HUDs also don't protect from flashes if they're not active. - - bugfix: HUDs no longer say that you're blinded after being EMP'd when they're - not on your eyes. - Ryan180602: - - maptweak: Change Physician's Paperwork Office to Medical Paperwork Office (for - all medical personnel) - - maptweak: Remapped Exam Room - - maptweak: Added 3 Runtime spawn locations - SealCure: - - rscadd: Adds janihud implants, buildable from the robotics fabricators. -2021-04-26: - ? '' - : - tweak: CPR now is much less likely to restart a stopped heart. - - tweak: Skrellship hardsuits no show skin on their hands. - - tweak: Nanoblood now dents a mob's immunity more. - - tweak: Merc TTVs contain less gas for overall less boom. - CrimsonShrike: - - rscadd: New exosuit sprites. Courtesy of Azlan. - - tweak: Combat chassis is no longer transparent. Power loss will affect it. - Mucker: - - tweak: Tweak Petrov's atmos laptop access so all science personnel can use it. - - bugfix: Fixed science players not having access to Petrov cameras. - SealCure: - - bugfix: Mil-pistols now show belt overlays when holstered, and pistol magazines - do not. -2021-04-29: - ? '' - : - maptweak: The cyclopes now has ~70% less fuel in the pipes, to prevent roundstart - explosions. - - maptweak: Adds two EMT belts to skrellship medbay. - CrimsonShrike: - - tweak: Jumping into deep water is no longer harmful. - - tweak: Water allows overcoming of gravity so long you can swim. - - tweak: You will no longer sink as long as water is deep enough. - SierraKomodo: - - bugfix: Sensor consoles will now print scans in the language that makes sense - for their mapped areas. - - rscadd: Modular console printers can now have their printing language configured - in the 'Computer Configuration Tool' menu for the console. These languages are - limited to what languages the user knows. - - admin: A `set_language()` proc has been added to papers to allow for easier changing - of a paper's language without dealing with VV, which likes to crash clients - when editing the language var for some reason. - - bugfix: AI-controlled zombies are no longer permanently comatose. -2021-04-30: - ? '' - : - tweak: Using adrenaline to start a stopped heart now does half as much damage. - 0sj/Jaydn: - - maptweak: Skrellships doors are now named - Cupax3: - - maptweak: The Caulship now has three new cat walks beneath the shield generator - and Ascent SMES, allowing for tinkering with the power net directly. - - bugfix: Both Silicons and Organics now use !; or ,2.h to use languages and emotes - over radio. - - bugfix: Holopads no longer have phantom conversations and connections due to people - calling when you're on a call. - - bugfix: Four suits were slightly adjusted in size to match with accessories. - Mucker: - - admin: Search results in VV will remain in view after clicking 'refresh'. - SealCure: - - tweak: You now split thaler stacks using your other hand, just as you do for material - stacks. -2021-05-02: - ? '' - : - bugfix: Fix border windows, window click-through and enforce window construction - steps. - - bugfix: Fix mineral processor eviscerating mobs. - - bugfix: IC signalers no longer require refreshing a pin to work after printing. - - tweak: Full-tile windows can only be anchored to floor/low wall/grille/non-dense - objects. - Cupax3: - - maptweak: The Deck Chief has dug up an old space piano from one of the Entertainers - and put it up for grabs in the Commissary! - Domic2: - - rscadd: Adds pipe sparkers, pipe fires can now be started without heating the - mix. Can be controlled via signalers and buttons, or disabled with a screwdriver. - Mucker: - - bugfix: Fix the Depth Scanner's UI not updating on button clicks. - - tweak: Updates the Depth Scanner, Anomaly Power Utilizer, Artifact Scanner, Artifact - Harvester, Suspension Field Generator, and the Reagent Grinder UI's to use modern - browsers. - - bugfix: Fix mined exoplanet mineral turfs not having gravity. - - tweak: Lowered the amount of quicksand on desert planets. - NL208: - - tweak: Makes all modular scanners repairable with nanopaste or cable. - Paprikue: - - tweak: Syringes now use the current transfer amount for taking blood samples instead - of filling the whole thing immediately. - - bugfix: Computer modules will now consume power as originally intended. - - bugfix: Computers now die when you remove their batteries (as long as they don't - have a tesla link to directly power them) - - tweak: Tweaked battery depletion rates so that they don't discharge almost immediately. -2021-05-04: - CrimsonShrike: - - tweak: Mobs that can drown will not drown if there is not enough fluid on turf - above to allow swimming, if they are able to overcome gravity. - Imienny: - - tweak: Replaced vox rig sprites with new one, Big thanks to coiscin for sprites! - Vandalxx: - - tweak: changed the body dragging sprite to appear more draggy -2021-05-07: - ? '' - : - bugfix: The LMG no longer disappears it's half empty, full, or someone sneezes - weirdly. - - rscadd: Adds a new recruitment poster from the Fleet - - maptweak: The skipjack's ceiling is now simulated turf, in a fancy brown colour. - - tweak: Disables the ascent caulship's spawn. - Cupax3: - - maptweak: The Vox Scavenger Ship now has a button to use its burn chamber igniter. - - tweak: Attacking point blank with a gun on harm intent no longer attacks, and - instead aims, if gun mode is aiming. - Ryan180602: - - maptweak: Exploration themed backpacks and cameras will now spawn in exploration - lockers - SealCure: - - bugfix: AntagHUD now shows mutineers and loyalists properly. - SierraKomodo: - - maptweak: The Errant Pisces shuttle landmarks have been moved, to prevent shuttles - from landing inside nets and deleting their walls. -2021-05-09: - ? '' - : - maptweak: The commissary's space piano will now randomly spawn at a set location - on one of the six decks. Find them all! - Cupax3: - - bugfix: Most uniforms now correctly display, for example fleet dress. - Domic: - - maptweak: Adds spare headsets to robotics - - bugfix: Magboots no longer grip open spaces. - Ryan180602: - - maptweak: Moves Lar-Maria's shuttle landmarks to not cause the Charon from flying - into the station, deleting turfs. - SierraKomodo: - - rscadd: Borgs can now have a new upgrade module installed, available from robotics - fabricators, called "optical matrix shielding". This upgrade makes the borg - immune to flashes when installed. - - rscadd: Traitor borgs now have flash immunity when antagged. De-antagged traitor - borgs will lose this immunity. - - rscadd: Combat borgs now have flash immunity by default. - - admin: Attack logs now show the attacker's selected target zone. -2021-05-10: - ? '' - : - tweak: The number of mercs that can spawn is now 3 to 5, down from 4 to 6. - CrimsonShrike: - - rscadd: Added two new exosuit modkits. - - tweak: Tweaked exosuit decal rendering. Should make decals mesh better with existing - geometry. - - tweak: Exosuit modkits no longer consume on use. - Domic2: - - tweak: Railings now appear in front of mobs when they should. - Mucker: - - bugfix: Fixed not being able to hear announcements while inside things like mechs - or sleepers. - - tweak: Corrected a minor typo in the mail announcement and the letter item. - - bugfix: Fixed shuttle movement into areas with gravity knocking players over while - they were buckled. - - rscadd: Anomaly Crates can now be ordered from Supply. - Nirnael: - - bugfix: Shutters are again reachable on window tiles. - Ryan180602: - - maptweak: Removed soporific from the counselor's locker, and replaced their single - methylphenidate pill with a pill bottle. - Ryan18062: - - rscdel: Removes Phlogiston - afterthought, Mucker: - - bugfix: Fixes the skill panel refresh bug (for real this time). -2021-05-13: - GeneralCamo: - - tweak: Cleaned up access permissions and renamed a few to make them more clear. - Ryan180602: - - rscadd: Transfer RIG modules to be craftable from MechLab instead of FabLab - - maptweak: Add Long Range Holopad to Vox Ship - - maptweak: Rename Vox Fore to Unknown Vessel Cockpit -2021-05-15: - Mucker: - - tweak: Invisible hydroponics trays will no longer display their machine description - on examine. - - bugfix: Fixed the mimic to use the correct crate icon. - Ryan180602: - - tweak: Makes higher piloting skills actually matter to tackle meteors. - - tweak: Very minor wording tweaks to skill descriptions. -2021-05-19: - CSCMe: - - rscadd: Adds "Don't let a slime snack on you" personal goal for scientists. - GeneralCamo: - - bugfix: Scrubbers now use the correct sprites when siphoning. - Jux: - - tweak: Adds four more pistols to the renegade gunpool. - SealCure: - - bugfix: Winter coats now have hood sprites again. - SierraKomodo: - - bugfix: Ghosts will no longer break skillchecks for helm controls. - - tweak: Ship helm consoles now only allow a single person to use manual control - at a time, including viewing the overmap through the helm. - - rscadd: Messages are now displayed whenever another mob takes control of a helm - control, to make it outwardly obvious who's skills are used to calculate flight. - Tennessee116: - - admin: Admin-paralyzed mobs will now be reported as such in the roundstart logout - report. - bear1ake: - - bugfix: Glass spear's inhand icon shows correctly -2021-05-22: - Spookerton: - - admin: Added radiation build mode. -2021-05-23: - BlueNexus: - - maptweak: Simplified the Nacelles slightly. As a side effect, the engines should - come up to pressure faster. - - maptweak: Pipes in the Nacelles should no longer explode with burn mode on - GeneralCamo: - - tweak: Renamed the captain's backpack and captain's satchel to the command backpack - and command satchel respectively, and changed its description to denote it is - given to senior officers. - - tweak: The executive officer now gets command packs by default - - tweak: Former corporate packs have been renamed to science packs. - - spellcheck: Various style and grammar improvements have been made to the descriptions - of various backpacks. - Imienny: - - bugfix: Taking pills no longer stops you from eating. - - tweak: Races which can regurgitate content of their stomach no longer have to - stick finger in to their throat. - Ryan180602: - - tweak: Engineer Trainees now get access to material goggles - SierraKomodo: - - rscdel: The Executive Assistant/Asset Protection Agent role has been removed. -2021-05-24: - The-Spanish-Inquisition: - - rscadd: Added two new projectile firearms; Added one ammo speed loader to support - new firearm. -2021-05-25: - Jux: - - tweak: Fleet CAs and CNs now don't get the dress beret, and have to wear the full - sailor getup. -2021-05-26: - Hubblenaut: - - bugfix: Fixes melee weapons like the energy sword effectively not having armor - penetration. - Mucker: - - rscadd: Ported Polaris mob AI and integrated existing simple mobs into it. - - admin: Added a buildmode for controlling mobs with AI (sort of like an RTS). - - bugfix: Fixed ranged mobs rapid firing when being melee'd. - - bugfix: Fixed mobs being able to circumvent barriers via diagonal movement. - - rscdel: Nanomachines and Commanded have been disabled until they can be integrated - with the new mob AI. - Spookerton: - - tweak: The peacekeeper armor and helmet sets in the emergency armory are black - medium with sol tags instead. -2021-05-27: - CSCMe, ChaosAlpha: - - bugfix: Gibbed Dionaea couldn't jump between their nymphs. - - bugfix: Dusted non-humans didn't have ghost sprites - Jux: - - tweak: The fleet wheel cover is now exclusive to SNCOs and Officers. Tout your - headgear over the lower enlisted and laugh. -2021-05-28: - GeneralCamo: - - tweak: Renamed Laboratory Technician to Pharmacist - - tweak: Pharmacists now get their job-specific packs and PDA - - rscadd: Re-added "Chemist" alt-title to the Pharmacist -2021-05-30: - 0sj/Jaydn: - - tweak: skrellian space heaters now have a default temp of 40 - - maptweak: Added circuit printer upgrades and two hyposprays to skrellship - CrimsonShrike: - - tweak: Rigs with unlocked panels require no access to use. Sharing rigs with department - members no longer requires cutting wires. - GeneralCamo: - - maptweak: The crashed survival pod now spawns with plastic. - - bugfix: The crashed survival pod now spawns the correct engineering tape roll - (rather than pre-placed engineering tape) - Ilysen: - - rscadd: Added a whole smorgasbord of new augment options, which you can obtain - in a variety of ways. - - rscadd: Traitors can access an Augments section in their uplink to buy CBMs - - compact bionic modules that can be used to self-install augments with no medical - skill. They are, however, very painful to use. - - rscadd: Added an Augments section to character loadout for minor augments. - - rscadd: Added a selection of fluff augments that do nothing mechanically, and - exist purely for roleplay purposes. You can get them from roundstart loadouts. - - tweak: Integrated HUD augments can now be picked at roundstart by appropriate - roles. - - tweak: Some augments can now be discovered by grab-inspecting the body part they're - on. - - tweak: Medical records now differentiate between roundstart prosthetics and roundstart - augments. - - bugfix: Hidden augments are now fully hidden on body scanners instead of showing - on the "internal organs" list as a mechanical prosthetic. - - bugfix: HUD augments now let you control medical status/security status/etc when - examining another person. - Viiim, Rootoo: - - tweak: Changes the recipe of the fizzy orange, alexander, and iced frappe, so - that they don't overlap with the kira special, iced coffee, and stinger. - Viim: - - tweak: Changes traitor skills from three trained, one experienced, to two trained, - one experienced, and one master. -2021-05-31: - Ilysen: - - bugfix: You can now properly change the appearance of the modified gas mask. -2021-06-01: - SierraKomodo: - - rscdel: Pickpocket gloves have been removed. -2021-06-02: - Ilysen: - - bugfix: You can now properly light molotov cocktails with any open flame source - like welding tools, not just lighters. -2021-06-04: - CrimsonShrike: - - tweak: Big things hurt more when they fall on you. - - tweak: Exosuits now take explosion damage correctly - Huntime: - - maptweak: Aligned infirmary entrance with ladders and added borders to colored - infirmary floor sections. - Ilysen: - - rscadd: You can now browse through hairstyles with arrows in addition to selecting - a style from a list. Useful for looking around more without having to pick randomly! - SealCure: - - rscadd: Adds scienceHUD implants, buildable from the robotics fabricator and selectable - at the loadout screen. -2021-06-07: - Ilysen: - - bugfix: Being deleted in build mode should no longer crash your game. - - tweak: 'For admins: build mode now has a confirmation prompt if you attempt to - delete a player with an active ckey, and gives them a unique message informing - them about what happened if you do.' - Ryan180602: - - tweak: Add robotic stomach sprite (from Azlan) for Stomachs from Prosthetic Fabricators. -2021-06-08: - CSCMe: - - tweak: Clicking "Show Goals" tells you that they are disabled in preferences if - they are. - - tweak: Jobs allow 0 to 5 personal goals by default, instead of 1 to 3. - - bugfix: Removing/re-rolling goals acts on the correct goals if used more than - once. - - bugfix: You cannot roll the same goal twice in the same set, or no goal if re-rolling - one. - Mucker: - - bugfix: Fix fleet jacket entry in the uniform vendor. -2021-06-09: - Mucker: - - tweak: Life-seeded planets can no longer be overheated. - - bugfix: Fixed character menu preview icon not updating on character swaps. - Ryan180602: - - maptweak: Re-adds IV cabinet to its original position + decal. - - maptweak: Adds shutter to lock Exam-Room external access, button now only opens - that door. - - tweak: Decreases fireaxe attack speed. - SierraKomodo: - - bugfix: It is no longer possible to buckle mechs to chairs. -2021-06-11: - Azlan: - - imageadd: The supermatter core has received a makeover. - Imienny: - - balance: Doubled the threshold damage for headshots to cause knockouts. - Spookerton: - - bugfix: Undid recent infirmary changes. Suffer the ladder. -2021-06-12: - MistakeNot4892: - - rscadd: Port Nebula's Pixel-based Overmap Movement - Mucker: - - tweak: Hivebots now have a 2 second wait period before they attack targets. - - tweak: Ranged hivebots now fire significantly slower, same with megabots and malf - drones. - - tweak: Abominations attack speed has been reduced. - - bugfix: Rogue drones no longer attack synthetics (or people in full cardborg clothing). - - bugfix: Fix spiders not being able to inject venom. - - bugfix: Fix faithless and space bats not being able to stun/weaken enemies. - - bugfix: Fix Pike being invisible. - Ryan180602: - - tweak: Removes the displaying of ckeys in the end-round shoppers list. - Spookerton: - - bugfix: Groins are now more pain resistant. -2021-06-13: - Domic: - - tweak: Suicide now accounts for damage, what you're wearing, where your brain - actually is, utilizes aim mode, and is now triggered manually instead of being - on a timer. - - bugfix: People who suicide are no longer save-able via MMI. - - bugfix: Suicide via less-than-lethal weapons is no longer easy to to. - Mucker: - - admin: Added the 'End Round' button to the 'Server' tab that immediately ends - the current round. - SierraKomodo: - - bugfix: Fixes a rare case of double messages appearing when a helm auto-disconnects - you. - - bugfix: Service borg consumables should now properly recharge/refill. - Spookerton: - - bugfix: Storing items in attached storage accessories by clicking on the holder - clothing with the item to store works again. - - tweak: Dropped burn & laser blood deletion to 1/4 its previous scale. - - tweak: Old Fade Up / Fade Down / Split in setup have been deprecated - pick again - from the new options. - - tweak: Up/Down/Split hair fades were renamed to Fade (Up, Short), Fade (Down, - Short), and Split (High) because they have (Long) and (Low) versions now. -2021-06-15: - Spookerton: - - bugfix: Tintable helmets tint on the sprite as well. - - bugfix: Holsters behave correctly again. - - tweak: You can no longer open holsters like storage. -2021-06-16: - Jux: - - tweak: Removes thermals from the merc uplink, and hardsuit thermals from all uplinks. - - maptweak: The heist and merc ships now spawn with a single set of thermals each. - First come, first serve. - - tweak: Removes thermals from raider outfit. - - tweak: Removes thermals from the cybersuit, replacing with NVG. -2021-06-17: - Boznar: - - tweak: plasma cutter doesn't use charge when slicing constructions - Hubblenaut: - - tweak: Removes the stun baton from the forensics locker. - MistakeNot4892: - - rscadd: Added a sound effect and a nicer message for coinflipping. - Naelynn: - - spellcheck: Removed extremely rare Oxy-Gems from the game. - The-Spanish-Inquisition: - - rscadd: Adds several existing items to the antag uplink. - - tweak: Decreases the Accuracy of the Battle Rifle and Carbine Rifle -2021-06-19: - SierraKomodo: - - tweak: There is now a user feedback message for wiring a window. - - rscadd: You can now de-polarize a window by using wirecutters to remove the wiring. - - tweak: The set id prompt when using multitools on polarized windows now defaults - to the current id instead of null. - - rscadd: Using a multitool on an anchored (fully installed) window now toggles - the tint instead of changing the ID. To change the ID, unanchor the window first. - - tweak: Examining windows now tells you if they are anchored and/or polarized, - and the construction state (screwdriver/crowbar steps) of reinforced windows. -2021-06-20: - Azlan, Pawn: - - rscadd: Most voidsuits used by SCG crew now follow a new, fresh standard. - - rscadd: Added a few missing states for alternate helmets for skrell and unathi - on hardsuits such as industrial one. - - bugfix: Moved the command and exploration helmets to their respective file, instead - of the suit file. - - bugfix: Pathfinder's HCM now actually uses its object icon. - - bugfix: Fixed a bunch ancient EBM helmets light smuck. - - bugfix: Unathi medical voidsuits now have a proper head sprite, instead of reusing - the white voidsuit one. - Naelynn: - - bugfix: Vox merchant now correctly sells and wants items. - PurplePineapple: - - rscadd: New sprite for concealed armor vests. Replaces the reused plate carrier - sprite it currently has. - Spookerton: - - admin: Staff with investigate but not host are no longer unable to set meaningful - channel preferences. - Viim: - - tweak: The Mindbreaker Cigarette in the tricky cigarette box now actually has - mindbreaker in it. -2021-06-27: - Fre3bie: - - rscadd: Added three wrist watch accessories to loadout - Mucker: - - bugfix: Fixed binoculars not being able to stay zoomed in. - SierraKomodo: - - tweak: Hivebot beacons now only spawn 1 bot per beacon, instead of a stack of - 10. - Viim: - - rscadd: Adds the Razor-Brimmed Bowler Hat, a traitor item buyable from the uplink - for 30 TC. A disguised, dapper dagger for your dome. - anconfuzedrock: - - bugfix: cycled explo suits are now actually visible. -2021-06-30: - Naelynn: - - rscadd: Added the ability to purchase and trade for items in bulk at the merchant's - console - Rootoo807, Viim: - - imageadd: Corgis now have an on-head sprite, and Lisa has her own special one, - too! - SealCure: - - bugfix: The CSO and Senior Researcher can now spawn with scihud implants as intended. - Viim: - - rscadd: Adds a dehydrated pike cube to the loud and dangerous weapons category - of the uplink. Works like a monkey cube, but creates a space pike. - 'Viim ': - - rscadd: GAS specific sprites for several brimmed hats. -2021-07-01: - Fre3bie: - - bugfix: Fixed SMES coil installation bug - - bugfix: Fixed being interrupted while dismantling wall permanently disabling dismantling - GeneralCamo: - - bugfix: Players can now correctly add service permissions - Imienny: - - tweak: Shotgun shells are now more likely to hit random limbs - - tweak: Added new shotgun ammo, Flechette shell, slightly weaker than slug but - more accurate - - bugfix: Buckshot shells can no longer create extra pellets when fired at point - blank range - - imageadd: Replaced buckshot pellets sprite - RaveRadbury: - - tweak: All holodeck clothing have the chameleon extension - - bugfix: Chameleon items in the Holodeck Theatre work again -2021-07-02: - Asillyn00b, BillyBangles: - - tweak: Added a zipper jacket and pullover to loadout. - The-Spanish-Inquisition: - - rscadd: Adds a Panama Hat, look like the bad guy you've always wanted to. -2021-07-03: - SealCure: - - rscadd: Adds the dehydrated plush carp and makes it buyable from the traitor uplink. - Just add water for a nasty surprise! - Semoro and azizonkg: - - bugfix: ported major fixes of SStimer subsystem from RU SS220 Paradise based on - SStimer from TGstation - Spookerton: - - tweak: Added some ear biomods - pointy ears and long pointy ears in both up and - down configurations. -2021-07-04: - Spookerton: - - tweak: Nearly everything uses point sampling. No more fuzzy scaling. - - tweak: Humans resize based on their chosen height and build. -2021-07-09: - Spookerton: - - bugfix: Unathi can once again revel in the silky contact of soft fabric headwear. - - tweak: Thrown bottles splash mobs around the impact atom if they break. - - tweak: Rags burn with more than just fuel in them, allowing high proof alcohol, - acetone, hydrazine, etc molotovs. - - admin: A new PP button, "Clone Other", allows you to select an online client and - clone its current preferences onto the mob PP is open for. - - tweak: Renegade intro text updated to better focus on role intent. - - tweak: Emergency armory gear is no longer peacekeeper gear, take two. -2021-07-10: - Fre3bie: - - rscadd: Added construction and deconstruction of intercoms - Mucker, Azlan: - - rscadd: Artifacts are now destroyable, and can have terribly consequences if destroyed. - Sprites by Azlan. - - admin: Added a prompt to select damage type for artifacts to the 'Spawn Artifact' - verb, as well as an admin log. - Pawn: - - rscadd: Adds (colorable) foam clogs to loadout - Ryan180602: - - bugfix: If buckled, you can no longer enter chargers. -2021-07-11: - Taza: - - bugfix: integrated circuits - the clock circuits now work - - tweak: integrated circuits - the video camera circuit now has a new camera network - pin which can be configured to any listed camera monitoring network. -2021-07-13: - SierraKomodo: - - admin: Debug logs are now generated whenever a round fails to start, to aid in - debugging why a round is failing to start. - Spookerton: - - tweak: Human sprites no longer width scale when rail thin or heavily built - - tweak: The default builtin-emote key is / instead of * to prevent conflicts with - italics. -2021-07-20: - SealCure: - - rscadd: Adds the voice-activated plush bomb, purchaseable from the uplink. Set - a trigger phrase and watch the fireworks commence! - Taza: - - tweak: adds a light and a table to the research lab - Xoxeyos: - - spellcheck: Simple typo fix for floor paneling in the crafting menu. -2021-07-21: - Fre3bie: - - rscadd: Added the ability to wash off forehead graffiti with acetone on a rag, - applied to the head. - - rscadd: Added verb to dump contents from held bags, boxes, etc. Similar to mining/botany - bags, however requires a short warm-up. - GeneralCamo: - - tweak: Combat Bionic Modules no longer mention they are contraband in the antagonist - codex. - Ryan180602: - - tweak: Increases oxygenation threshold of brain scarring from 30% to 60% - Taza: - - rscadd: integrated circuits - there is now a new string filter circuit - Yvesza: - - balance: Improved the effects of Amatoxin, Lexorin, Carpotoxin and Impedrezene. - - balance: Vox are no longer effected by Lexorin. - - balance: Chemical smoke duration now scales with the amount of reagents used to - create it. - - balance: Chemical smoke splashes less reagents on touch (10 -> 5) - - tweak: Characters being coated with harmful chemicals will receive warning messages, - along with anyone close enough to bear witness. - - tweak: Being sprayed with acid while wearing protective gear no longer automatically - identifies it as acid. -2021-07-23: - ? '' - : - admin: Slightly increases the threshold for the initial SM temperature admin - warning to account for current meta spamming staff with logs. - 1glitchycent: - - imageadd: new sprites for the MT chest rig, EMS helmet and their onmob sprite - Fre3bie: - - bugfix: Fixes being unable to crush boxes into cardboard due to trying to dump - contents. Content dumping now requires harm intent. - Yvesza: - - balance: Reduces the amount of lexorin injected by death sting from 40u to 10u. -2021-07-25: - Fre3bie: - - bugfix: Checks if reagent containers are made of glass before shattering, so buckets - and rags won't shatter comically. -2021-07-27: - ? '' - : - tweak: Medical residents, a learning role, can no longer be torchside antagonists. -2021-07-29: - Mucker: - - bugfix: Fixed simple mobs being able to open doors they shouldn't be able to. - Taza, gy1ta23: - - tweak: integrated circuits - destroying circuit assemblies now features sparks, - on-hit effects, and debris - - tweak: integrated circuits - assemblies have had their descriptions, chat notices, - and health values updated -2021-08-02: - Spookerton: - - tweak: Added a prescription version of fat shades. - - tweak: Sunglasses are collapsed into a selection in loadout. - - rscadd: Aviators and shutter shades are added to loadout as part of sunglasses - selection and seperately, respectively. - - tweak: Bonus. Other glasses types are also collapsed into selections. Added prescription - versions of things that didn't have them but made sense to have. Monocles are - prescription. - Yvesza: - - balance: Flashes no longer stun simple mobs / animals, instead they'll be confused - and stumble around. - - tweak: Flashes no longer stack their confusion / stun effects infinitely. - - bugfix: Fake death is now much more convincing - 'Yvesza ': - - balance: Dislocations via disarm intent are significantly less likely to occur - with low force weapons initially, chance to dislocate rises as damage is dealt - to limbs. -2021-08-03: - ? '' - : - rscadd: Adds a new random event; the Supermatter Power Surge. Increases emitted - heat, radiation and power for a short duration. - Fre3bie: - - tweak: Prevents certain unwashable clothing items from being contaminated by phoron - gas. - SealCure: - - tweak: Increases the explosive power of the voice-activated plushbomb. - SierraKomodo: - - tweak: The supermatter's thermal output has been bumped, which should result in - higher EER (1,000+) setups being more dangerous and require more monitoring/micromanagement - to maintain stability. These are the same settings that have been used in the - test rounds. - - bugfix: You can no longer abuse voting restrictions by re-entering your dead body - to vote. - - tweak: Standing on the same tile as a fragmentation grenade will now deal far - more damage and not allow you to avoid a majority of the fragments. Fragmentation - grenades now also properly handle checking for if a mob is carrying them or - not for extra damage. - - tweak: Shield effects without a valid generator now appear red. If you see a red - shield, ahelp it for a dev. - - maptweak: Rearranged the bar area to provide two open table spaces closer to the - bar itself for bartenders to do whatever with. - - maptweak: Added an ashtray and entertainment intercom to the bar itself. - - tweak: The dinnerware dispenser now includes 4 vacuum flasks. - - admin: Parried and blocked attacks now generate attack logs, matching the handling - of successful hits and misses. - - rscadd: Teleporter beacons have been completely replaced with machinery-based - beacons. These beacons hide under floor tiles when fully installed, and can - only be targeted and used by teleporter consoles when powered, anchored, and - un-tampered with. See PR https://github.com/Baystation12/Baystation12/pull/30957 - for detailed changes. - gy1ta23: - - tweak: Wallets can hold less things they shouldn't be able to, and can hold more - things they should. -2021-08-04: - SierraKomodo: - - rscdel: The John Fleet poster has been removed. - Spookerton: - - tweak: Optical meson scanners are now just called meson goggles. - - tweak: Eyepatches with overlays have more descriptive names. - - bugfix: Meson eyewear selection works. Whoops. -2021-08-05: - Yvesza: - - tweak: Wallets can contain syringes, autoinjectors and (small) vials once again. - - balance: Low-profile plates now absorb stuns as well as plate carriers - - balance: Low-profile tactical plates no longer slowdown their wearer -2021-08-06: - BurpleBineapple: - - bugfix: Female fleet fatigues now use the correct icon when rolling up sleeves -2021-08-07: - Yvesza: - - balance: Set the base parry of most common weapons to a baseline of 15 / 30 - - balance: improved the wielded bonus of two-handed weapons to 20, from 15. - - balance: Reduces the effectiveness of CQC - - tweak: You can no longer parry attacks with unsuitable weapons - - balance: Spears & Harpoons will cause their targets to stagger backwards and potentially - be impaled to walls. - - balance: Spears & Harpoons hurt more when they collide with their victims. - - balance: Harpoons will no longer fit into bags -2021-08-11: - ? '' - : - tweak: Anyone can select the colour select scarf in loadout now. - BlueNexus: - - maptweak: The deck one and deck three nacelles now match, as intended. As such, - it should be safe to use burn mode. - Imienny, RustingWithYou: - - rscadd: Adds new emote to Vox Armalis *ashriek, *shriek but cooler. - - rscadd: Adds two new Vox plants - the resin plant and the breather. The breather - produces nitrogen gas, and the resin produces a new material, Vox bioresin. - Adds seeds for both of them to the Vox offship. - - rscadd: Adds seed extractor to Vox ship - - rscadd: Vox Armalis can now use *shriek emote - - imageadd: Adds sprites for Vox Armalis wearing the two types of Vox clothing - Ithalan: - - rscadd: Newly-added access_network_admin has replaced access_network, and access_network - is now used to give a lesser degree of access to NTNet through terminal commands - than admins have. Jobs that previously had access_network now have access_network_admin - as well, and access_network has been added to engineers, roboticists and forensic - investigators. - - rscadd: Several new terminal commands have been added and some existing ones have - been revised. Details on available commands can be accessed through the 'man' - command as usual. - - rscadd: Individual files or programs on a hard drive or portable drive can be - flagged as invisible through terminal-usage, hiding them from view in most NTOS - applications. - - rscadd: Entire drives can be made read-only through terminal-usage. Files on read-only - drives cannot be edited or deleted, and new files cannot be created. - - tweak: Network cards can be given custom identifiers through terminal-usage, for - easier recognition on NTNet. - - tweak: Programs set to autorun can now have autorun toggled off by clicking the - autorun button again. - - tweak: When wireless access for specific NTNet functions is disabled, the connection - is only rejected if the last device in a proxy chain is a wireless device. - - balance: access restrictions are now bypassed for the ssh terminal command when - used from an emagged computer. Antag hackers rejoice! - - bugfix: The number of programs that a modular computer can run simultaneously - is once again limited by the installed CPU. - Tennessee116: - - tweak: Captain's can now only select the captain's dress cover from the uniform - vendor. - Yvesza: - - tweak: Accessories are now included in Siemens calculations -2021-08-14: - SierraKomodo: - - tweak: The font used for fancy pens is now a more readable font, for people like - me that may or may not be dyslexic. -2021-08-16: - Mucker: - - bugfix: Fixed the oxygen and nitrogen artifact triggers. -2021-08-19: - Ithalan: - - bugfix: PDA scanners can now save their results again - MeetSimmio: - - rscadd: Adds religious banner that can have their symbol switched by the Chaplain. - - maptweak: Adds two banners to the deck 3 Chapel. - SierraKomodo: - - admin: Eyedroppers now only show attack logs for dangerous chemicals, matching - the logging behavior of syringes. - - tweak: Shuttle pilots now have maintenance access, just like explorers. - - admin: Removed the 'Supermatter is approaching unsafe temperatures' warning because - it's basically useless and spam-floods chat. -2021-08-24: - Boznar: - - tweak: Engineer and Deck Technician now have access to semiformal loadout options. - Hubblenaut: - - bugfix: After a certain number of modified seeds created, every newly modified - seed would overwrite all seeds created afterward, effectively limiting xenobotany - in the number of seeds that can be modified before the entire system breaks. - This is now fixed. - - imageadd: Updates corporate labcoat sprites. - - imageadd: Labcoats are now buttoned up to further down. - Mucker: - - bugfix: Fixed mobs not trying to break through solid turfs when attacking a target. -2021-08-26: - ? '' - : - maptweak: The mercship finally has cryo juice in the medical locker. - - tweak: Throwable flares last three times as long. - Hubblenaut: - - tweak: When confused or being clumsy, you will now fall over railings, into disposal - bins, mineral baths or slam into objects and walls when sprinting. - - tweak: You can't get out of disposal bins or mineral baths when you're incapacitated. - - bugfix: No longer phasing through walls using railings. - - tweak: Placement on tables is now twice as accurate. - - rscadd: Adds a new terminal command which lets the user scan the network for connected - devices. - - soundadd: Installing airlock braces now has sound. - - tweak: Installing airlock braces takes one second longer. - Mucker: - - tweak: Removes an unfinished crystal object from the xenoarch finds list. - - bugfix: Fix mobs not properly reacting to attacks - - bugfix: The clown and crab are no longer default hostile - - tweak: Tweaked some artifact effect triggers to ensure they are always usable - and not ambiguous. - SierraKomodo: - - tweak: Maximum autopilot speed has been increased from 5 to 10. -2021-08-27: - ? '' - : - bugfix: unathi do not have appendixes as they were never intended to have appendixes - - bugfix: yeosa'unathi eyes glow like they were intended to - Hubblenaut: - - bugfix: Tape recoder printouts will now have the correct sprite. - - tweak: Tape recorder printouts now spawn in your free hand if possible. - - soundadd: Tape recorders now have a printing sound. -2021-08-28: - ? '' - : - tweak: Random nitrogen airtanks no longer mention vox crew. - Nirnael: - - bugfix: pAIs/MMIs/AIs inside IC drones can again access the drone's inputs through - the Control Inputs verb. - - tweak: Increased IC editor interface lines to 10 per page. - Spookerton: - - tweak: Stacks don't auto-merge. - - tweak: The ancient red NT security jumpsuit doesn't spawn in the brig bomb suit - locker anymore. - - bugfix: Suits with storage no longer try to insert every item twice. - - tweak: Labcoats start closed. Visual only. - Taza, gy1ta23: - - rscadd: 'new exoplanet ruin: trash heap' -2021-08-29: - ? '' - : - bugfix: MMIs removed from FBPs by means other than surgical should now have - the correct icon. - MeetSimmio: - - imageadd: Adds additional religious banner icons, including the red and black - star, pentacle, Awen, Ahimsa, yin and yang, torii, and the five main Unathi - faiths. - - tweak: Changes the Baha'i Chaplain's insignia to be more in line with the banner. - Mucker: - - tweak: Buffed hivebot melee variants health and damage, ranged variants health - buffed as well. - SierraKomodo: - - tweak: All timed actions now, by default, have the 'Unique' flag set. This means - that a user can only perform one timed action at a time, and a target can only - have one user performing a timed action on them at a time. Medical bandaging, - CPR, injecting, and surgical steps are exempt from unique checks for balance - reasons. - - rscdel: The do after/timer changes have been reverted due to broken things. -2021-08-30: - Mucker: - - rscadd: Adds the carrier, electric, lurker, nurse, pepper, phorogenic, thermic, - tunneler, and websling spider type from Polaris. - - bugfix: Blind persons can now properly 'hear' spiderlings enter vents. -2021-08-31: - Taza: - - rscadd: integrated circuits - adds a mechanical sound circuit - - rscadd: integrated circuits - adds an electronic sound circuit -2021-09-03: - Mucker: - - admin: Removed click-drag selecting from AI buildmode - - admin: Selecting multiple units is now down by holding ctrl + left-clicking desired - mobs - - tweak: Tweaked the Spider Infestation event to be more consistent based on the - severity. -2021-09-05: - SierraKomodo: - - bugfix: Examining objects using standardized health now displays the correct damage - hint text. - - bugfix: Blobs now show the correct damage state sprite instead of being inverted. -2021-09-07: - SierraKomodo: - - rscdel: The hydroponics grow farm has been removed from possible round start exoplanet - ruins. -2021-09-08: - Jux: - - rscdel: Deletes the Verne. - MeetSimmio: - - imageadd: Adds a small Humanoid-type chassis to the selectable pAI sprites. - SierraKomodo: - - tweak: Machinery now has general codex mechanics information detailing power usage, - skill requirements, silicon restrictions, and capacity for components. - - maptweak: Crashed EC ship ruin will no longer spawn catwalks inside planetary - walls. - The_Spanish_1nqusition: - - rscadd: Adds two new ballistic weapons. - - tweak: Replace the Replica Pistol with the new Broomstick Pistol in the Raider - random spawn list. - - tweak: Renamed some magazines/speedloaders to accommodate new items -2021-09-11: - Mucker: - - tweak: Drastically nerfed spiderling spawn counts from egg clusters and carriers. - - tweak: Nurse spiders can no longer 'feed' spiderlings to make them grow. -2021-09-12: - Tennessee116 and mattroks101: - - spellcheck: The cartoid artery is now spelled properly as carotid. -2021-09-13: - Domic: - - bugfix: Wall frames now spawn with the right material. - - tweak: Firedoor W/E sprite now has a wider exclamation mark - Jux: - - tweak: Human hairstyles are no longer half-gendered. - - tweak: Unathi can no longer select four random human hairstyles. - Mucker: - - bugfix: Lizards can now creep and crawl again. - SierraKomodo: - - bugfix: Talking artifacts now properly obey deafness. - - tweak: Talking artifacts are no longer visible with ghost ears. Goodbye pointless - spam. - - bugfix: Blob cores will now grow when they spawn. - - tweak: Exploding spiders now have an additional 2 seconds before they explode, - to account for server lag. - - tweak: Exploding spiders are now deleted when they explode instead of leaving - behind a corpse. They did explode, after all. - - bugfix: Cameras no longer permanently block blob expansion. - - tweak: Blobs will no longer spread onto tiles that have a dense object, which - blocked them from being shot by projectiles. - - tweak: Blobs will now damage any items or objects on a turf that use standardized - health. - Spookerton: - - tweak: Forensics fibers are a lot less detailed. - 'Tennessee116 ': - - tweak: The uniform vendor no longer has dress shoes under the EC service category. -2021-09-17: - Jux: - - rscadd: Adds the option to set your religion to "Unstated" for humans and unathi. - Spookerton: - - bugfix: Removed deployed augments undeploy when removed - no more items stuck - in hands. - - tweak: Augment installation respects the target doll - no more weird screwdriver - shenanigans. - - tweak: Augment examine is more descriptive of what the augment can be installed - in. - - tweak: CBMs are now Augment Autodocs and also respect the target doll. - - tweak: Loadout augments are properly categorized. You will need to re-select them. - - tweak: You can take loadout augment HUDs you don't start with the access to actually - use. -2021-09-19: - Mucker: - - tweak: Made it more difficult to dodge simple mobs melee attacks. - - tweak: Mobs calling for help will no longer cascade and bring the entire map toward - them. -2021-09-21: - Jux: - - tweak: The Fleet Uniform Vendor no longer tries to give fleeties EC gloves. -2021-09-22: - Domic: - - bugfix: The salvage gantry no longer uses the Vulcan's thrusters. -2021-09-24: - AzlanOnPC, Pawn, Fre3bie: - - tweak: Mercenary EOD hardsuit is now spaceproof. - - tweak: Vox can now wear mercenary voidsuits and hardsuits, while Skrell and unathi - can now wear merc and EVA hardsuits. - CrimsonShrike: - - rscadd: Exosuit AIRshield. It keeps air where it is. - CrimsonShrike and Azlan: - - rscadd: More sprites for exosuits. - - tweak: Exosuit modules will in most cases inherit colour from installed section. - Jux: - - maptweak: Security processing's window tint also tints the interior hall windows. - - maptweak: The BC no longer needs to leave their desk to access the window to processing. - - maptweak: Moves the BC's hall-facing window so the BC no longer reaches through - a solid window to access their requests console. - SierraKomodo: - - maptweak: Certain parts of the Torch now have specific lighting tones instead - of randomized lights. Examples include medical and R&D being a clinical white, - while relaxation areas like the lounge use warm yellowing light. - - tweak: SSD examine messages now clarify SSD status in the text. - - tweak: SSD examine text is now bright pink, similar to staff paralysis text. - Spookerton: - - bugfix: Augments from loadout now install in the correct organs if possible. - - bugfix: Concealed wrist blades no longer show up on body scans. - - bugfix: Augment implanters fail when dropped. -2021-09-26: - Ryan180602: - - maptweak: Removes Brig Headset, puts a screwdriver in Processing instead. - - maptweak: Removes 2 out of 3 labellers in security - SierraKomodo: - - tweak: Cyborg hyposprays now use an input box instead of links in the chat to - select a chemical to synthesize. -2021-09-28: - Jux: - - tweak: Formless and Factionless solgov utility clothing will spawn on the Torch - no more. Rejoice in proper expeditionary utes. -2021-09-30: - Jux: - - imageadd: New Incendiary pistol sprites. - - tweak: Incendiary lasers have the same armor penetration as small smartgun lasers. - - maptweak: Adds a cryo computer to the merc base, making the cryopods actually - work. -2021-10-01: - Mucker: - - bugfix: Fixed a typo in the recipe for trashbag of holding in the protolathe - SealCure: - - bugfix: Makes dehydrated carp plushies react properly to sprayed water. -2021-10-03: - Jux: - - maptweak: Replaces the robotics surgery kit with a hemostat and saw. - - maptweak: Removes the robotics nanoblood. - Mucker: - - admin: Changed the 'follow mob' control to 'middle mouse' so it doesn't overlap - with 'copy faction' in AI buildmode. - - admin: Add 'set round length' and 'toggle continue vote' buttons -2021-10-05: - CrimsonShrike: - - rscadd: Mobs impacting exosuits have a chance to end up in pilot's seat. - Jux, Spookerton: - - tweak: Space suits take a flat 5 seconds to put on. - - bugfix: User-unique progress bars correctly indicate what you stopped interacting - with when interrupted. - - bugfix: Same-hand progress bars correctly check for same hand-ness when started - right-handed. -2021-10-06: - Jux: - - tweak: All body armour - Plates, armor suits, the weird legacy stuff - now has - a two second equip time. - Mucker: - - admin: Fixed the default time in Set Round Length not being in minutes. -2021-10-07: - Jux: - - bugfix: Progress bars now show up when donning armor. - - bugfix: Impatient people will no longer delete their armor in their furious equip-mashing. -2021-10-09: - Mucker: - - tweak: Rogue drones will no longer target FBP's or Adherent. - - bugfix: Fixed mobs being able to move in space -2021-10-19: - Jux: - - rscadd: Replaces the unused CTI voidsuit with a new one, for nerds. - - rscadd: The new Retro Voidsuit can now spawn in the random spawners. - Mucker: - - maptweak: Renamed Petrov Security Checkpoint to 'Petrov Control Room', gave science - players access, along with other minor tweaks. - - rscadd: Adds a search menu and tech-level readouts to the protolathe and circuit - imprinter menus - - rscadd: Added the arc-welder to the protolathe -2021-10-20: - Jux: - - tweak: The med visor is now med goggles. - Mucker: - - tweak: Lowered the number of mobs that spawn via Exo awakening events. - - admin: Commanding a mob to move in AI buildmode now removes their follower target. - - admin: Changing the hostile status of a mob now resets its target, so it stops - attacking if made passive. -2021-10-23: - AzlanOnPc, Ryan180602: - - rscadd: Add new sprites for wristblade, popout shotgun. - - rscadd: Add new sprites for fluff head augments. - - rscadd: Add new sprites for UV and skeletal bracings. - - rscadd: Add new sprites for backup battery, leukobreeder/recycler. - Jux: - - tweak: Reduced ling spawning relative to pop. - Mucker: - - rscadd: Added descriptions for the mountain and featureless planet types to sensor - scan results. - - bugfix: Fixed some tech-level readouts in the protolathe console being wrong. - SierraKomodo: - - bugfix: The teleporter beacons found in the teleporters are no longer permanently - anchored to the giga beacons. -2021-10-24: - CrimsonShrike: - - rscadd: Added exosuit heat gauges. They report a variety of useful data. - Ryan180602: - - rscadd: Add Robotic Analyser to Roboticist PDA - - tweak: Add yes/no button to generate nanoui map verb - SierraKomodo: - - tweak: 'Available languages for cyborgs have been updated with the following: - Borgs can now understand but not speak serpentid. Cyborgs can now speak and - understand skrellian, sinta, and yeosa.' - - tweak: Inducers will no longer automatically restart inducing after charging an - item. - - bugfix: Gun-to-mouth suicide logs now properly display the gun instead of just - saying `a `. - - tweak: Emags will no longer break an already open locker when you try to put them - in the said locker. -2021-10-25: - CrimsonShrike: - - rscadd: Mech pilot rendering reworked. Things may look silly. -2021-10-26: - Mucker: - - bugfix: Fixed antlions not being hostile, not using burrow ability. - - bugfix: Fixed the voxslug not being hostile and not using its 'attach' ability. - SierraKomodo: - - tweak: IPCs are now mechanically restricted from bridge officer, deck chief, senior - engineer, senior researcher, and warden, matching current lore restrictions. -2021-10-31: - CrimsonShrike: - - rscadd: Supermatter alarms. They will distract you while the engine goes critical. - - tweak: Verne supermatter shard will be a random colour, for variance. - Mucker: - - bugfix: Fixed the circuit imprinter search function not working. - - bugfix: Fixed imprinter tech readouts. - - tweak: The deconstructor will now get materials from the contents of the loaded - item if it has any. - - rscadd: Added the 'quick deconstruction' option to the R&D deconstructor, which - will deconstruct items as they are added to the deconstructor without a prompt. -2021-11-02: - Mucker: - - tweak: The RPED will now replace all components in a machine at once when possible. - - tweak: Lowered the cost of the RPED in the protolathe. - Ryan180602: - - bugfix: Fix arm-shotguns not having sprite when unloaded. -2021-11-14: - Ryan180602: - - tweak: Mech Electrotaser is now a 3-round burst taser. - - tweak: Buffs CH-PS Immolator - SierraKomodo: - - bugfix: Blobs and other things using standardized health can die once more. -2021-11-15: - CrimsonShrike: - - rscadd: cargo clamps carrying more than one dense item will now create cargo piles - on destruction or uninstall instead of dumping a bunch of items all over the - place. - Mucker: - - rscdel: Removed the temperature gun. - - tweak: Deconstructing with the R&D deconstructor while 'quick' mode is active - will no longer change screens. - Ryan180602: - - rscadd: Add Command Suit Cycler to Bridge EVA -2021-11-17: - SierraKomodo: - - bugfix: Blobs no longer spawn with almost-dead sprites. - Spookerton: - - bugfix: Blobs respect boundaries; walls and lava block them from spreading. - - tweak: Blobs play sounds when they attack anything, instead of just when they - attack objects. -2021-11-18: - Ryan180602, AzlanOnPc: - - rscadd: Add Pneumatic Powerfist - SierraKomodo: - - bugfix: Windows now properly break when hit enough, instead of sometimes not breaking. -2021-11-23: - Spookerton: - - bugfix: You can put suits with equip timers on other people again. -2021-11-24: - Mucker: - - tweak: Removed the extra 15% chance a carp would knock down its target while attacking. -2021-11-27: - Ryan180602: - - tweak: Reverts CMO coat colour palette to old one. -2021-11-29: - Ryan180602: - - rscadd: Adds the powerfist augment to the uplink for 60 TC. -2021-11-30: - Jux: - - tweak: Divides head augments into functional and fluff augments. - Mucker: - - tweak: Made the exo-awakening event rarer. -2021-12-03: - Mogelix: - - rscadd: Add double-breasted suit jackets. - - tweak: Change sprites for suit jackets, suit vests, suspenders, on-mob bowtie, - pants. - Mucker: - - bugfix: Fixed simple mobs being unable to damage tables - Slywater: - - bugfix: Prevents unconnected disposal units from deleting atoms upon flushing - - bugfix: Fixes broken grille density icon states -2021-12-09: - Mogelix: - - tweak: Puts in the re-sprite for the single-breasted suit jacket. -2021-12-14: - Mucker: - - admin: Re-added click-dragging to select units in AI buildmode. -2021-12-19: - Ryan180602: - - tweak: Center-align MMI sprite. -2021-12-20: - Fre3bie: - - bugfix: Fixes evidence bags deleting items and other issues when using them on - items within storage containers. - Ryan180602: - - tweak: Decrease max shots of the ion rifle/pistol to 5 and 3 resp. - - tweak: Increase shot delay of ion rifle/pistol -2021-12-21: - Tennessee: - - rscadd: A Christmas tree will now replace the fountain of the Torch during the - holiday season. Christmas is saved. -2021-12-22: - Mucker: - - maptweak: Fixed airlock cycling on Oldab 1 and 2, unbolted airlocks on deserted - lab since it has no power. - - rscadd: Add new abilities to the Frost and Webslinger spider variants. - - tweak: Buffed the Thermic spider's poison. - - bugfix: Fixed hostile mobs being able to target mobs in cocoons in some cases. - - tweak: Tweaked the memo text colour to be readable in darkmode. - - admin: Tweaked darkmode colours for some text that come from the 'Who' verb and - staff-pm's. - SierraKomodo: - - maptweak: Old lab 2 no longer turns danger planets into instant hellfires. - - rscadd: Autolathes can now print lights of specific tones instead of playing light - color lottery - Cool, warm, or white. - - rscadd: Light replacers can now print lights of specific tones, match the existing - light bulb, match the area's defined color, or use a custom color. -2021-12-23: - Imienny: - - rscadd: Added new whitelisted gamemode, Vox Raiders. - - bugfix: Peasantry is now allowed to use mouldy mirrors. -2021-12-24: - Jux: - - tweak: Vox can no longer spawn as FBPs. - SierraKomodo: - - bugfix: Unlocked emitters no longer require access to turn on or off. - - balance: Wall damage resistance calculations have been tweaked, making them hopefully - slightly easier to break down. Changes more dramatically affect reinforced walls - than they do standard walls. -2021-12-25: - SierraKomodo: - - rscadd: Traitor uplinks can now purchase a fake command report service. Now you - don't have to ask admins to send them for you. -2021-12-26: - Jux: - - tweak: The target and max number of Vox Raiders that can spawn have been reduced. - - tweak: Vox armor sets and hardsuit have had their slowdown reduced by 1/4th. - Mucker: - - balance: Tweaked Vox Slugs so they have a brief cooldown on movement and attacking - after being removed from a victim. - - admin: Added z-level options to the Global Narrate verb. - - bugfix: Fixed some mobs (mainly robots) being unable to remove webs from themselves. - - bugfix: Fixed synthetics being affected by spider poison. - Spookerton: - - tweak: Modes that would be impossible to start based on the number of players - in the lobby at vote time cannot be voted for. -2021-12-29: - Jux: - - rscadd: Gives Vox Raider a dedicated map. -2021-12-30: - Mucker: - - admin: Added new functionality to AI buildmode to allow assigning mobs new AI - types on the fly. - SierraKomodo: - - bugfix: Smoke should no longer affect mobs through windows. - Spookerton: - - admin: Edit Mode allows zero and empty text values. - - admin: Player notes display latest-first. -2021-12-31: - Imienny: - - rscadd: Fixed Invisible Vox Metal Armors - Jux: - - maptweak: The Vox Raider ship now has more spare nitrogen. - - maptweak: The NavPoint for the Vox Raider ship to attach to an airlock has been - fixed. - SierraKomodo: - - tweak: The `/vomit` emote no longer displays a message about you shoving a finger - down your throat. RP being sickened by that mutilated corpse to your heart's - content. - - tweak: Cyborg base movement speed now matches human base movement speed. - - rscadd: Fire, explosion, EMP, projectile, and general-hitting-things damage has - been generally applied to all atoms currently using standardized health. This - means you can now damage anything using standardized health with melee attacks, - fire, guns, explosions, and in some cases, EMPs. Contents of relevant objects - such as closets will also take damage from fire or explosions, and projectiles - that havs the penetrating trait. This should not affect anything not currently - using standardized health. Please report any bugs including things that aren't - taking damage, or things that seem to be getting hit twice when clicked once. - - bugfix: Disposal pipes, air pipes, and wires no longer take damage when airlocks - close on them. - - bugfix: Tables can be deconstructed on harm intent once more. - - bugfix: Medical scanners now properly show when limbs are dislocated. - Spookerton: - - tweak: More types of fish meat exist. - - tweak: More cooking methods on cookers exist. - - rscadd: Added the chopping board item and food combining. The chopping board and - cookers make variable foods which you can click with other foods to combine. -2022-01-02: - Ryan180602: - - tweak: Removed continuous messages for when you're fiddling with cuffs/unbuckling. -2022-01-03: - Lorwp: - - bugfix: Antag fake announcements (ion storm, fake centcom announcement, etc) now - again have an icon - SierraKomodo: - - maptweak: The crashed survivor pod now has an atmosphere sensor console to see - what the air outside is like. - - tweak: Warrant projectors now display the warrant type in the list of available - warrants. - - bugfix: Warrant projectors no longer hide a warrant if a person has both a search - and arrest warrant targeting them. -2022-01-04: - SierraKomodo: - - bugfix: Barricades and grilles no longer take damage from radiation, EMPs, and - other non-physical damage sources. - - tweak: Grilles no longer have a 90% resistance to brute damage (Why was that even - a thing?). - - tweak: Barricades now have a flat 133% health modifier instead of a resistance - boost to some damage types. -2022-01-05: - SierraKomodo: - - bugfix: The gentlemans suit no longer pokes through jackets when facing north. - - bugfix: Raider gun spawners now actually spawn weapons. - Spookerton: - - tweak: The bartender job is gone, the bar uses kitchen access, cooks are re-titled - stewards by default and there can be two. - - tweak: There is silver cutlery for fancy purposes and shenanigans. The kitchen - starts with a small set and more can be ordered. - - tweak: Table knives are tiny instead of small, in line with other cutlery. - - tweak: Unathi dueling knives are real knives instead of a subtype of table knives. - cdbrunow: - - tweak: Faucets can be wrenched to place & remove them. Alt-clicking rotates them - like pipes. Gutters and faucets can be returned to pipe dispensers. -2022-01-06: - 'Jux:': - - tweak: The deployable sunglasses augment is now just sunglasses, and not welding - goggles. - SierraKomodo: - - bugfix: Movable atoms with health now actually take damage instead of just saying - 'You hit the thing'. - Spookerton: - - tweak: The adminhelp sound and its other uses have been replaced with something - less intrusive. - - tweak: The galley attention bell is made of glass. -2022-01-07: - Jux: - - maptweak: Swaps the one tile of space area in the engineering foyer for engineering - foyer area. -2022-01-10: - Jux: - - rscadd: Vox Raiders now have their own armor exclusive to the gamemode. - - tweak: Power loader legs are slightly faster. - - tweak: Deck Techs and the Deck Chief all know how to exosuit. - - maptweak: The supply warehouse now has two powerloaders instead of the tug and - one loader. - Mucker: - - admin: The 'Who' verb will now list the specific antag type next to a player's - name if they are playing as one. - - admin: Staff can now see all players' readied status regardless of hidden status, - and can now see what antag roles they are readied for in respect to the current - gamemode (other than secret). - - bugfix: Fix walls being invincible to most explosions. - Ryan180602: - - tweak: Specifies that concealed powerfist antag augment is for synthetic arms - only. - Spookerton: - - bugfix: Non-living mobs (ghosts, observers, etc) can't be targeted by AI by default. -2022-01-12: - Jux: - - tweak: The retro voidsuit's sprite has been tweaked. - Mucker: - - rscadd: Adds cosmosharks to the carp migration event. -2022-01-13: - Jux: - - tweak: Adjusts the new vox armor sprite; the legs are now slightly less bulbous - and horrifying, and the chest should look slightly broader. - - maptweak: The Aquila now scrubs air to space instead of to a canister. - - maptweak: The Aquila now has a pressure canister for CO2, starting with a pittance - of spare gas. - - maptweak: The Aquila has three less thrusters, making it slightly more fuel efficient - at a cost of max acceleration per burn. - SierraKomodo: - - tweak: Teleporters now shut themselves off after 1 minute if inactivity. This - timer is reset whenever someone or something goes through it, or the teleporter - is re-engaged. - Spookerton: - - tweak: Traitor can start without any roundstart traitors. Auto antag can fill - in later if people join with preferences opted in. -2022-01-14: - Mucker: - - bugfix: Fix cosmosharks being invisible. - - tweak: Crashed pod's distress beacon will no longer be listed on the Torch's welcome - report. -2022-01-15: - Jux: - - tweak: Powerfists can no longer take double capacity emergency air tanks. - Mucker: - - tweak: The Spider Infestation event can now occur as a 'Major' level event. - Spookerton: - - tweak: Wallets can hold pronoun and pride pins. Ranks, pronoun pins, and other - insignia slot accessories can go on toggled suits - labcoats, hoodies, etc. - - bugfix: The merchant program has a main menu again. -2022-01-16: - Asillyn00b: - - rscadd: Add leather hoodie. - - tweak: Fix oddities in civilian jacket sprites. - Mucker: - - bugfix: Fixed players in objects (mechs, lockers, etc) not counting toward z-level - counts for SSpresence. - Spookerton: - - tweak: Exoplanet turfs are unsimulated. This means you can't burn a planet. - - tweak: The mode vote window is not taller than a 1080p screen. -2022-01-17: - Jux: - - tweak: Vox raiders spawn with spikethrowers in-hand instead of them being in the - armory. - - maptweak: Vox have a water tank. - - tweak: Vox raider armor has had the ballistic and laser defense values dropped - a notch each. - Spookerton: - - tweak: You can no longer be a roundstart ship synth that's a brain in a jar. - - tweak: You no longer get delay forced inside a cryopod on join. - - bugfix: You no longer always spawn at the lower left cryopod. - - bugfix: The crew once again only care about themselves for the purposes of body - count. How selfish. - - tweak: Duffel bags are no longer as punishing to use. - - tweak: Carbines do 80% prior damage and 50% prior pen. - - tweak: Double emergency tanks can't go in non-space suit slots. - - tweak: The power fist can't take tanks bigger than extended emergency. - - bugfix: Aghosted staff can vote. -2022-01-18: - Mucker: - - admin: Atmos editor now works on unsimulated turfs. - - admin: The VV dropdown menu now has options for adding/removing movement handlers - to movable atoms. - Ryan180602: - - tweak: Moves Mail Room Runtime spawn to outside Supply. - - tweak: Moves Cold Room Runtime spawn to the Mess-proper. -2022-01-19: - Jux: - - tweak: The ninja hardsuit protects against lasers and shock weapons slightly more. - - tweak: The ninja hardsuit is now slightly more protective against EMPs - - maptweak: The single rigsuit vox raiders spawned with is now the raider armor - set. - - maptweak: The ninja dojo equipment room now has a single freedom implant. - Mucker: - - tweak: The pikecube traitor uplink cost has been drastically increased to counteract - it as an extremely deadly kill-everything weapon. - Spookerton: - - bugfix: Cryopods work again. - - bugfix: Being inside something in general no longer stops your life ticks. -2022-01-21: - Mucker: - - bugfix: Fixed mobs not respecting their movement cooldowns. Most will now move - slower. - SierraKomodo: - - bugfix: Robots and drones can now drop modules back into their inventory using - CTRL+Q. - - tweak: Constructs now know their creator's languages. Non-cultist constructs no - longer have access to cult languages or hivemind. - - bugfix: Toggling bowties and flannel shirts should now display the correct messages - based on toggle state. - - bugfix: Cryopods should hopefully stop double-announcing flushing some people. - Admin/error logs will still occur though as the root issue hasn't been found - and fixed yet. - - bugfix: The replica anti-material rifle now properly accepts pistol bullets instead - of demanding pistol magazines that don't work with this rifle. - - admin: Additional debug logs have been added for certain runtimes to help troubleshoot - them when they occur. -2022-01-23: - PurplePineapple: - - imageadd: New boot sprites for the duty, jungle, and desert boots. - SierraKomodo: - - rscdel: All vehicles have been removed. This includes any instances of space bikes, - gyroscooters, and cargo tugs. -2022-01-25: - Jux: - - rscdel: Tersten no longer exists. -2022-01-26: - SierraKomodo: - - bugfix: Ghosts can no longer open the prompt to rename exoplanet species. -2022-01-27: - Imienny: - - bugfix: Fixed bug with walking not making floors dirty, Janitors rejoyce! - - tweak: Walking will now make you trigger beartraps and snap pops. - Jux: - - rscadd: Replaces Lorriman, Cinu, Yuklid, Lordania and Kingston with Saffar, Tadmor, - Pirx, Brahe and Iolaus. - MeetSimmio: - - tweak: Adjusts the sprites for the generic skirt uniform in loadout to be less - bland. - Mucker: - - admin: Fix 'Who' verb not showing antag status next to players who late-joined - into antag roles. - - rscadd: Re-added the rocket launcher to the mega hivebot. Explorers everywhere - tremble. - - admin: Added Turret Buildmode - SomeAngryMiner: - - tweak: Powerloader motivators had their speed dropped to regular again. - Spookerton: - - tweak: Viewing Faction in records requires antag access. - Tennessee: - - spellcheck: Fixed a spelling error located on the disk encrypted by quantum cryptography. -2022-01-28: - Jux: - - rscadd: Adds two more new planets; Nueva Castilla and Foster's World. - - tweak: The new boot sprites no longer have a blurry-looking side state. -2022-01-30: - Jux: - - rscdel: Removes the skrellian choir song. - Mucker: - - bugfix: Fixed the spider infestation event always being chosen over other major - level events. - SierraKomodo: - - tweak: Walls now take more damage from explosions. - - tweak: Pre-mapped reinforced walls are now a steel/plasteel mix instead of 100% - plasteel. -2022-01-31: - Kell-E: - - balance: Knockouts now require severe brain damage to occur. - - bugfix: Knockout is now only checked once instead of two separate times by different - metrics - - tweak: Radiation storms now may have a delay between the 'Entered storm' message - and radiation starting, to mitigate fake storm meta. Challenge Radstorms at - your peril, they care not for your expectations. - Root-Mozz: - - tweak: Resprites some hairs that were crimes against skull structure. -2022-02-01: - Andischa: - - bugfix: Hand labeler labels on condiment containers no longer disappear - Jux: - - maptweak: The weird science storage that science can't access on D2 has been killed, - including the glut of matierials. - - maptweak: Sec no longer has a spare box of flashbangs, and the spare teargas has - been moved to sec-arm with the grenade launcher. - - tweak: Lots of locker condensing. - - tweak: Hardsuit gloves, boots and chestpieces can no longer be toggled. - Mucker: - - admin: Tweaked turret buildmode so you can delete turrets and update the settings - of already existing turrets. -2022-02-02: - Andischa: - - rscadd: Added Onion-soup -2022-02-03: - Jux: - - tweak: The CMO gets their second labcoat back in their locker. -2022-02-06: - Ryan18062: - - tweak: Adds both CMO labcoats `cmo` and `cmoalt` to loadout -2022-02-07: - Jux: - - tweak: Merc and Vox Raider now spawn near the Torch. - Mucker: - - bugfix: Fixed the giant crab's special attack. Pinch pinch. - - tweak: Lowered the health of most giant spider variants. -2022-02-11: - Spookerton: - - bugfix: Fix bug where player's viewport offsets after exiting overmap interface -2022-02-13: - Mucker: - - bugfix: Fixed the atmos editor not updating air transferring from unsimmed to - simmed tiles. - Sennalen: - - spellcheck: Copyedited text on the Blue River away site -2022-02-15: - Mucker: - - admin: Added controls to area buildmode to change multiple turfs into different - areas at once (similar to room buildmode). - - admin: Added controls to room buildmode to allow you to create rooms of only floors - or only walls, without changing existing walls/flooring. - Ryan180602: - - tweak: Command n Comms programme now only needs to be authorised once when opening. - SierraKomodo: - - tweak: Meteors are now far more effective at breaking walls. - Spookerton: - - bugfix: Antag uplinks correctly list items again. - - tweak: You can emag ship helms to remove access requirements. -2022-02-21: - SierraKomodo: - - rscadd: You can now remove ID cards from wallets with AltClick. This only works - for human mobs, and only if you're holding or wearing the wallet. -2022-02-25: - Andischa: - - bugfix: Fixed a typo in a text-tag in the sandwich-system -2022-02-26: - Ryan180602: - - admin: Allow moderators to do all types of direct and local narrates. -2022-02-28: - Andischa: - - rscadd: Added lettuce as a produce and a plant and juice - - tweak: changed tossed-salad recipe to use lettuce instead of cabbage - Mucker: - - admin: Added button to player panel to cryo characters. -2022-03-01: - Ryan180602: - - maptweak: Extra air alarm in D3 Substation was removed. - - maptweak: Newscaster in computer room was re-added. - - maptweak: 2x each Arm/Legguards (navy/black) added to Sec Equipment room. - - maptweak: 2x each Ballistic/Ablative arm/legguards added to Sec Armoury. - - maptweak: Reduced riot/ballistic/ablative armour/helmet count to one set each. - - maptweak: Added flashbang box in Sec Armoury. -2022-03-02: - Sennalen: - - tweak: Microphone integrated circuits can only translate certain languages. -2022-03-04: - Spookerton: - - bugfix: Character setup wiki links for occupations work again, where a page exists - for the role. -2022-03-07: - Ryan180602: - - bugfix: Rigs can now carry the items in the `allowed` list. - SierraKomodo: - - tweak: Spider events should now occur less often. - - tweak: Spider event spawn counts are now limited by the number of active players - at the time of event start. - - bugfix: Spider events should now properly prevent future spider events from occurring - at the same time/in the same round. -2022-03-11: - ? '' - : - rscadd: Added an old diving helmet. Fits humans only! - SierraKomodo: - - bugfix: Deaf mobs no longer see 'You hear something about' messages while asleep. -2022-03-13: - SierraKomodo: - - bugfix: Buttoning/rolling/etc accessories (I.e. flannel shirts) should now properly - display the current rolled/buttoned/etc status when using the relevant verbs. -2022-03-16: - ? '' - : - rscadd: Adds "tilt" - a downer drug made from mixing spaceup and cough medicine - Mucker: - - admin: Fixed the Spawn Artifact verb admin log not logging properly when 2 effects - were used. - SierraKomodo: - - bugfix: The meat grinder no longer ejects gibs at speeds strong enough to destroy - walls. - - tweak: Tilt no longer claims to be illegal in its description. -2022-03-19: - karljohansson: - - tweak: Deuterium gas has a molar mass of 0.004 - - tweak: Deuterium gas has a heat capacity of 80 - - tweak: Tritium gas has a molar mass of 0.006 - - tweak: Tritium gas has a heat capacity of 60 - - tweak: The R-UST engine is slightly less energy efficient, more so using tritium - based setups -2022-03-21: - SierraKomodo: - - tweak: Bluespace flares can no longer be activated on space or open space tiles. -2022-03-22: - Domic: - - bugfix: Plastic flaps can be airtight again. -2022-03-23: - Jux: - - rscadd: All HUD goggles + tactical goggles have new OBJ sprites. - - rscadd: Sechud goggles have a slightly different onmob sprite. - - tweak: All sec-huds that provide eye protection are now a simple on/off, where - some were formerly protection/hud. - - tweak: Material goggles are now orange to differentiate them from medical goggles. - Ryan180602: - - maptweak: Add an extra special armour set to SecArm - Spookerton: - - tweak: The space flare is now the shuttle beacon and no longer sets things on - fire. -2022-03-24: - ? '' - : - tweak: Allows the specialised arm/legguards to be removed and attached at will. - - tweak: Removes slowdown from legguards, add slowdown to specialised plate carriers - only. - Kell-E: - - bugfix: Clusterbangs now properly spawn their sub-grenades - - balance: Removes the marksman energy rifles ability to instantly knockdown it's - victims - - balance: Increases the number of shots the marksman energy rifle has from 4 to - 8 - - balance: All kinds of fragmentation grenades are now significantly more lethal - - balance: Inaccurate shots are more likely to scatter and hit random locations - upon their victim rather than their intended target. - Spookerton: - - tweak: Donk pockets are more interesting. There are protein / vegetable / fruit - / dessert / premium versions, with reagent contents variations for each. - - tweak: Donk pocket boxes are more interesting. There are fixed contents boxes - for each variation, and random mixed boxes. - - tweak: Sin pockets have been replaced with premium donk pockets. - - tweak: You can order donk pockets from supply. Ordering premium donk pockets is - locked behind wire hacks. - - tweak: Premium donk pockets have slightly less bonus and lots less malus. - - tweak: Premium donk pockets are skrell-safe. - - tweak: Re-heating donk pockets does not re-add their extra reagents. Finish your - meal! - - tweak: You can no longer use a microwave to create donk pockets from dough and - meatballs. - - tweak: Animal cubes expanding inside people have a short message sequence. They - also newly guarantee fractures and internal organ damage. - - admin: Added Simulate Distant Explosion to the Fun tab. Plays the distant explosion - sound for players in the admin's z group and optionally knocks them over. -2022-03-29: - Mucker: - - bugfix: Fixed point defense turrets shooting through walls - Spookerton: - - bugfix: You can wear magboots over shoes by hand, instead of only with a suit. - - tweak: Robot grippers can put things on tables. - - bugfix: Slimes can no longer infinitely feed on FBPs (or at all, for that matter). - - bugfix: Virtual mobs can't set off proximity sensors. - - bugfix: You can no longer hide shrapnel in your boots. - - bugfix: Malfunctioning drones no longer kill themselves (and will try to kill - you instead). - - bugfix: Malfunctioning drones no longer drop invalid circuit boards. -2022-03-30: - SierraKomodo: - - bugfix: Mobs without an aim toggle icon can no longer break themselves by using - the toggle verb or hotkey. - Spookerton: - - bugfix: Eating food with trash creates the trash correctly again. - - tweak: Viscerators from spawner grenades get the user's faction. -2022-03-31: - SierraKomodo: - - admin: Runtime errors can now be displayed in chat as they occur, if the Show - Runtime Logs preference is enabled. -2022-04-01: - Mucker: - - admin: Added meteor buildmode, for the aspiring badmin. - SierraKomodo: - - admin: Added a painting build mode. This currently only handles base colors and - not decals such as floor tile decals or door stripes. - - tweak: 'Gas scanner UI for both the scanner device and PDA module has been tweaked. - Results no longer appear in chat and instead appear in the scanner''s display, - which will automatically open/update every time a scan is run. The display will - also now display all information instead of being divided between 3 different - ''Modes''. NOTE: The PDA module will not automatically open the program if it - is not already open, but will update the UI if the window is already open.' - - bugfix: Gas scanner PDA modules now work on turfs. - - bugfix: God mode mobs are no longer affected by explosions, fire, emp, or bullets. -2022-04-04: - Mucker: - - bugfix: Fixed the 'Analyze Air' ghost verb not working - Spookerton: - - admin: MC stat lines should update more reliably after midnight. Still don't feed - them though. - - admin: Added the config and global datums to the MC tab. - - admin: Fixed SSlighting showing /list instead of update count. -2022-04-06: - Mucker: - - admin: Fixed 'Advanced ProcCall' verb to allow for global proc-calling - - admin: Added the 'path' argument to 'Advanced ProcCall' verb -2022-04-07: - CrimsonShrike: - - rscadd: Ship holomaps. Now you know where you are. - Kell-e: - - balance: Characters are now 75% less likely to cha-cha slide through projectiles - using their extreme speed. -2022-04-08: - ComradeCheekiBreeki: - - tweak: Differentiated existing loadout lists for awards into SolGov military awards, - SolGov civilian awards and SolGov military ribbons. Anyone who had medals or - ribbons in their loadout before will need to add them again. - - tweak: Redid all SolGov medals and ribbons (name, icon and description). - - rscadd: Added 14 new ribbons, 11 of which are medal ribbons and 3 of which are - new awards. - Kell-E: - - tweak: the replica katana is more difficult to identify on an examine - - tweak: the toy vendors contraband now includes the cap gun and ammo. - SierraKomodo: - - tweak: Fancy pen fonts are now a fancy but legible serif font. - - tweak: Signatures are now in cursive. - - rscadd: Added a Gaian culture to the character setup menu. -2022-04-10: - Kell-E: - - rscadd: Adds two new dress undershirts. -2022-04-11: - BurpleBineapple: - - imageadd: New balaclava and tactical balaclava sprites made by Azlan. - - imageadd: New gas mask sprite made by Asillyn00b. Item sprite made by PurplePineapple - with help from Azlan. - Kell-E: - - balance: Slightly reduced melee accuracy penalties (By about 33%) and slightly - upped the threshold of sustained damage before the penalties begin to kick in. - Mucker: - - rscdel: Removed bluespace residue from the overmap. -2022-04-12: - Asillyn00b: - - tweak: Replaced base jeans sprite and altered denim hoodie hood to be white. - Kell-E: - - balance: Armor is somewhat less effective at blocking weapons below their protection - values - - rscadd: Adds a box of shurikens to the uplink for 18TC. - - balance: reduces the size of shurikens from medium to tiny (Pistol -> syringe - size), removes shurikens ability to gib limbs and wall splat but increased their - throw force from 15 to 20. - - rscadd: Adds a katana to the uplink for 24 TC. - - balance: reduces the cost of the pike cube from 70 to 44. - - rscdel: Removes the replica pistol and zipgun from the uplink. - - balance: Reduces the cost of the two merc railguns from 109/130 to 65/75 respectively. - - rscadd: 'Added a stimulant autoinjector to the uplink (Cost: 14)' - - rscadd: Added coagulant (Cannot be created at this time, but does appear in coagulant - autoinjectors). Coagulant can staunch internal and external bleeding. - - balance: Improved the stabilization kit available in the uplink, it now takes - up much less space, fits into a pocket and has had the quality of it's contents - improved. Includes one coagulant autoinjector. - - rscdel: Removed the medical HUD from the uplink - - rscdel: Removed the medical scanner from the uplink - - rscadd: 'Added an advanced medical toolkit to the uplink, contains a large number - of medical tools including a HUD, scanner, rollerbed, auto-resuscitator, auto-compressor, - nanoblood IV bag, advanced first-aid kit, nitrile gloves and a box of syringes. - (Cost: 24)' - - rscadd: All guns may now optionally have damage falloff - - balance: All laser weapons suffer from damage falloff relative to their size - - balance: 'Compact smartgun: Shots (5 ->6), Lethal damage (25 -> 35), Armor penetration - (10 -> 0)' - - balance: 'Pulse pistol: Armor penetration (0 -> 25), Accuracy (-1 -> 0)' - - balance: 'Pulse carbine: Armor penetration (0 ->30), Accuracy (-1 -> 0)' - - balance: 'Pulse rifle: Armor penetration (0 -> 35), Accuracy (-1 -> 1)' - - balance: 'Plasma cutter: Damage (15 -> 30), Armor penetration (0 -> 30)' - Ryan180602: - - tweak: Backpacks and Satchel have new on-mob/obj sprites - - tweak: Holowarrant has new obj sprite - - tweak: Added specific left/right hand on-mob sprite for backpacks and satchels. - - tweak: toxpack is now ntpack (same for satchels). -2022-04-14: - BurpleBineapple: - - bugfix: Fixes the Fifth Fleet beret's description to be grammatically correct. - - bugfix: Fixes minor grammatical issues with all division berets. - ComradeCheekiBreeki: - - rscadd: Adds ability to place cables from a cable coil on lattices in open space - (space between levels on a multi-level map) or space (the vacuum) - - bugfix: Fixes cables underneath catwalks being able to be manipulated by opening - the Turf menu. - - tweak: Tweaks messages to players about why they can't place cables in certain - places - Mucker: - - balance: Zombies no longer have xray vision, do not infect people nearby on death, - and transfer fewer reagents on bite. - Mucker, AzlanonPC: - - admin: Added a new shuttle for event usage, does not spawn on its own. - SierraKomodo: - - tweak: Unique shuttle control consoles can no longer be broken or dismantled because - this places them in an unfixable state. - - bugfix: Rotating alarm lights are now anchored and can no longer be dragged around - by people or the supermatter. - - bugfix: Shuttles can no longer delete shuttle landmarks and break themselves by - landing on beacons. - - rscadd: Supply can now order empty dispenser cartridges. For those bartenders - that want to add their juiced fruits to the dispenser machines. - - maptweak: The bluespace drive has been removed from the Casino away site. -2022-04-16: - AzlanonPC: - - rscadd: Rollerbed got a visual overhaul. - Kell-E: - - balance: Traitors now have one additional master skill at the cost of one less - trained skill. - - rscadd: Adds a new variable for controlling weapon penetration values - - balance: The pocket knife is no longer sharp enough to penetrate armor - SierraKomodo: - - bugfix: Cables no longer appear on top of walls. - - rscadd: Added dress-up categories for the various EC uniforms and tiers of uniforms. - - tweak: Spinning lights should now be less lag-inducing. -2022-04-17: - SierraKomodo: - - tweak: The Deck Chief's fax machine is now labelled as 'Torch - Deck Chief's Office' - instead of 'Quartermaster's Office'. - - maptweak: The computer lab and medical paperwork offices now have fax machines. - - tweak: Fax machines no longer have access requirements. -2022-04-18: - Mucker: - - bugfix: Fixed the excavation suit cycler not properly setting the item_state of - helmets. - Ryan: - - tweak: ERT commander pack onmob and obj sprites are now similar - - tweak: Sec satchel now has red straps onmob (left/right too) - - tweak: Sec backpack onmob has red accents on straps - - tweak: Left/right onmob sprite for toxsatchel is now ntsatchel - - tweak: Norm backpack highlights are duller - - tweak: Attempt at fixing weird bulge on satchels - SierraKomodo: - - maptweak: Cyborg Upload is no longer protected by an impenetrable blast door and - is easier to hack into. - Spookerton: - - bugfix: Uplinks spawn a box of premium donk pockets instead of a single one. Whoops. - nol4, azlanonpc: - - tweak: Adds new hair styles (Shoulder Bob 2, Ponytail Tied, Ponytail Dinky 1/2/3, - Big Bun) -2022-04-20: - Textor: - - rscadd: Deck 4 now has a hallway stretching through the hangar, allowing people - to pass more easily or observe hangar operations. - - rscdel: Air Traffic Control has been removed to make room for this hallway. - - bugfix: Engineers no longer try to pry out intellicards from empty intellicard - slots instead of opening the maintenance hatch on multifunctional computers. - - bugfix: Newly built plating no longer will be called "airless" plating. - - bugfix: Closets and crates made out of materials other than steel will now deconstruct - to their constituent material. -2022-04-21: - Jux: - - maptweak: Remaps the Charon to make better use of the space. -2022-04-22: - SierraKomodo: - - maptweak: The vent and scrubber in the port hangar catwalk are now properly connected - to pipes. - Textor: - - bugfix: Researchers have the ability to control the environment inside the xenobiology - lab again. - - bugfix: Sledgehammers are no longer invisible. - - bugfix: Replacing blinded eyes with undamaged new eyes or undamaged optical sensors - now gives you the gift of sight. -2022-04-23: - CrimsonShrike: - - rscadd: A number of actions and items now have particles. - Spookerton: - - bugfix: Timer buckets shouldn't reset hitting the lobby. - Textor: - - tweak: Air alarms in xenobiology will now have distinct names. - - maptweak: The power in xenobiology has been recabled to allow for better access - to cabling and easier repairs. Each cell also now has an APC. - - rscadd: Adds boron gas. The boron canister can be ordered from supply. Boron is - theorized to be good for fusion reactions. - - maptweak: Adds gas sensor to RUST chamber. - - bugfix: Fixes atmosphere control console in RUST chamber. It now can actually - control the injector. - - bugfix: Placed tiles should now always be the correct type. - - tweak: The space cola variants now have adjusted descriptions and color variation. -2022-04-25: - Jux: - - maptweak: The missing Charon is no longer missing important cameras. - - maptweak: The Charon airlocks actually have interior and exterior buttons. - Spookerton: - - bugfix: Secret works again. - Textor: - - bugfix: Sounds end when you respawn, meaning you no longer have that one tune - stuck in your head for the rest of the round. - - rscadd: The disposal bin can now be ejected by right clicking and selecting the - verb, even without power. -2022-04-26: - Jeff: - - rscadd: Crisis borgs can now synthesize adrenaline - SierraKomodo: - - balance: Effective range of EMP grenades reduced from 10 tiles to 5. - - balance: Heavy severity range of EMP grenades reduced from 4 tiles to 2. - - bugfix: Fixed low yield EMP grenade range being limited to 1 tile; Low-yield grenades - now have an effective range of 3 tiles and a heavy severity range of 1 tile. - - balance: Ion projectile effective splash range reduced from 2 to 1. To be effective, - ion rifles now must hit their target or hit the target's turf. This change now - makes the difference between ion rifles and ion pistols solely the strength - of the EMP effect and no longer the additional splash radius. - - tweak: Placing mobs onto tables, railings, etc using a grab now has a timer. - - tweak: Blobs will no longer expand onto dense objects, instead trying to attack - and destroy them before taking the tile if they are objects that use standardized - health. - - tweak: Blobs will no longer expand onto tiles housing a standing mob. If you fall - over, however, the blob will happily consume you. - - tweak: Blobs will not target or attack canisters or fuel tanks, to avoid blobs - becoming self-detonating hellgas monsters. - Spookerton: - - tweak: When not on help intent, buckling/unbuckling other mobs takes a few uninterrupted - seconds. - Tennessee: - - rscadd: Two new posters about the SCGF and serpentids have been added. - - rscdel: The Wasteland poster has been removed. - Textor: - - bugfix: Crowbarring up the bottom tile of a shuttle will no longer yield an infinite - supply of tiles. - - bugfix: Traitor uplinks now quit the program when you use the close button on - the popup or in the UI. Closing the window leaves the program running, still. - - bugfix: Fixes atmos console in R-UST chamber to control the injector on the input - rather than output. -2022-04-28: - Kell-E: - - balance: 'Flechette shells cost: 8 -> 12.' - - balance: 'Flechette shells availability: Everyone -> Mercenaries only.' - - tweak: You can no longer print flechette shells at a lathe. - - balance: 'Plasma cutter damage: 30 -> 20' - - balance: Plasma cutter falloff has been significantly increased. - - rscdel: Removes the organ printer (Bio-printer) from OR one. - - rscadd: Adds a 5u dropper with peridaxon preset to 1u increments to both OR one - and two. - SierraKomodo: - - bugfix: Exosuits can no longer be pinned to walls by spears and spikes. - Spookerton: - - tweak: The flashdark, maint drone pen light, glow sticks, slime lights, and lava - lamps do not eye-flash people when used on their eyes. - - bugfix: Pain has effects again, bluespace is blue again (but less, I hear you). -2022-04-29: - Jux: - - maptweak: Moved the Charon main airlock interior button so it's more easily used. - - maptweak: Makes the Charon's medical compartment and cockpit airlocks windowed. -2022-05-01: - CrimsonShrike: - - rscadd: Adds the exosuit medigel spray. Now ambulance passengers don't need to - bleed all the way there - Ryan180602: - - rscadd: Add editable custom description/names for loadout items. - SierraKomodo: - - tweak: Various existing do_after() timers are now configured to allow the user - to only perform one action and the target to have one action performed on them - at a time. This ONLY affects interactions that already had a timer associated - with them and does not add any new timers. Notable exceptions are provided in - the PR. See https://github.com/Baystation12/Baystation12/pull/32010 - - tweak: Various existing do_after() timers now display public progress bars. - - tweak: Faxes tagged 'Unknown' no longer appear on the list of targetable fax machines. - - rscadd: Fax machines can now be emagged, which in turn allows you to use multitools - to change the fax machine's department tag, so that you can pretend your faxes - came from somewhere else. Paperwork antags rejoice. - - rscadd: Fax machines with department tags set to off-ship places, i.e. Expeditionary - Command, can now intercept faxes sent off-ship. Now you can reply to people - replying to your fake faxes! - - bugfix: Sending faxes to destination tags that have multiple matching fax machines - no longer does weird loopy things and then break. - - tweak: Fax machines now display a visible message indicating a fax has been received - and which department the fax came from. - - tweak: All papers printed by a fax machine now display the origin department in - the paper's title, regardless of if they were an admin fax or a player fax. - No more using fax titles to metagame antag faxes. - - tweak: A fax machine's configured department now appears in the UI when using - the fax machine as `Fax Machine (Department Name)`. - - bugfix: The redundant 'The paper is titled XYZ' line from fax descriptions has - been removed. - - admin: send-fax now includes the same list of pre-made origin departments as the - emag+multitool options for consistency and further reduction of potential metagame. - - bugfix: Fax machines and send-fax no longer have a perceived delay in processing - when sending faxes. - - tweak: Fax machines no longer lock themselves whenever sending a fax to off-ship - places, i.e. Expeditionary Command. - - bugfix: Portable air pumps can no longer be set to a target pressure higher than - the normal limit by EMPs. - - bugfix: Non-powered doors (I.e. wood or material doors) no longer randomly open - when EMP'd. - - tweak: Radios now randomize their on/off states instead of disabling everything - when EMP'd. - - tweak: Imprinting implants now may send a 'reminder' when EMP'd. - - tweak: Integrated HUD implants now take the same amount of EMP damage as all other - implants. - SomeAngryMiner: - - rscadd: Adds snakes, both venomous and non venomous ones. Venomous ones are currently - admin only. They are able to be picked up, and worn as a scarf. Not like you - should, though. - - rscadd: The Brig chief has a new pet, Cobby. Its located on its office. - - rscadd: Leeches have received a resprite, and their dens are considerably more - subtle. - - rscadd: Leeches have received a tiny damage buff, from 5 to 8, making them something - to mind for voidsuited people. - - rscadd: Resprites cult portals and anomaly hellportals. Sprites done by UDaV73rus. - SomeAngryMiner, Pawn: - - rscadd: Resprites the Obstruction Field Disperser and its beam. - Textor: - - bugfix: Binoculars now cancel zoom correctly when you move, drop them, put them - in a bag, or have them stolen by a parrot. -2022-05-04: - Jux: - - bugfix: Security HUD goggles protect from teargas to the eyes again. - Ryan: - - admin: Adds Close Job Slot button for Crew/Submap -2022-05-05: - Mucker: - - bugfix: Fixed new gateway effect being underneath most things - Rootoo807: - - tweak: Garden and Xenobotany seed vendors have been alphabetized. Garden and Xenobotany - seed vendors now have the same contents, besides random Xenobotany seeds. - - tweak: Missing low-grade tobacco seeds now exists. Low-grade tobacco stats (color, - nutrient consumption rate) have been tweaked slightly to be distinct from regular - tobacco. - - tweak: All grape variants can evolve into all other grape variants. - - bugfix: Green grapes are now green. White grapes now display as "white grape" - rather than "white grape seeds". - Ryan180602: - - tweak: Lets descriptions be longer (128 char limit). - - tweak: Lets fluff augments (minus eye-ones) be customised. -2022-05-06: - Jeff: - - rscadd: Emagging the cargo console now makes it all access. - Mucker: - - admin: Fixed stealthed staff showing in credits - - bugfix: Fixed the spelling of 'coffee' in the credits - Ninetailed: - - rscdel: Most ghost roles (except pAI) no longer require a preference to be set - - rscadd: Yes/no confirmation prompt when accepting a ghost role - - tweak: pAI preference now Yes/No instead of High/Low/Never - Rootoo807: - - rscadd: Lizards, chickens, and chicks can be picked up. - - tweak: Lisa and puppies are no longer invisible when held. - - rscadd: Adds bacon. Obtain it by using a knife on raw cutlets. - - tweak: Resprites bacon, enchiladas, tacos, muffins, and baguettes. - - rscadd: Resprites command hardsuits. -2022-05-09: - Mucker: - - tweak: Drills can mine multiple mineral turfs at once again. - Ryan180602: - - tweak: Increases max_desc_len to 256 chars. Custom descriptions are longer. -2022-05-11: - CrimsonShrike: - - rscadd: Exosuit gravity catapult is now a bit faster and has new effects to make - it clearer. - Ryan180602, Azlanonpc: - - rscadd: Adds admin-spawn Fleet rig. - - rscdel: Removes Asset Protection rig. - - tweak: Deathsquads now use the generic combat rig. - - maptweak: Asset Protection rig from ERT base have been removed entirely. (Rack - has a wall in it's place, now.) -2022-05-12: - Mucker: - - admin: Adjusted aft-end of the event shuttle so it can dock with the Torch. - - admin: Added toggleable blastdoors to event shuttle windows. - - admin: Removed the need for hydrogen on the event shuttle. -2022-06-10: - 4310V343k: - - rscadd: "\u0447\u0435\u043D\u0434\u0436\u043B\u043E\u0433\u0438 \u0442\u0435\u043F\ - \u0435\u0440\u044C \u0440\u0430\u0431\u043E\u0442\u0430\u044E\u0442 \u0443\u0440\ - \u0430 \u0443\u0440\u0430 \u0443\u0440\u0430" - - tweak: "\u0412 \u0445\u043E\u043B\u043E\u0434\u0438\u043B\u044C\u043D\u0438\u043A\ - \u0435 \u043F\u043E\u044F\u0432\u0438\u043B\u043E\u0441\u044C \u043D\u0430 \u043E\ - \u0434\u0438\u043D \u0439\u043E\u0433\u0443\u0440\u0442 \u0431\u043E\u043B\u044C\ - \u0448\u0435" - - balance: "\u0412\u043C\u0435\u0441\u0442\u043E \u0439\u043E\u0433\u0443\u0440\u0442\ - \u0430 \u0432 \u0445\u043E\u043B\u043E\u0434\u0438\u043B\u044C\u043D\u0438\u043A\ - \u0435 \u0435\u0441\u0442\u044C \u0441\u044B\u0440\u043E\u043A (\u043D\u0435\ - \u043F\u043B\u043E\u0445\u043E)" - - soundadd: "\u0414\u043E\u0431\u0430\u0432\u0438\u043B\u0438 \u043C\u0435\u0440\ - \u0437\u043A\u0438\u0439 \u0437\u0432\u0443\u043A \u043F\u043E\u0435\u0434\u0430\ - \u043D\u0438\u044F \u0441\u044B\u0440\u043A\u0430" - - sounddel: "\u0423\u0431\u0440\u0430\u043B\u0438 \u0432\u0435\u0441\u044C \u0445\ - \u043E\u0440\u043E\u0448\u0438\u0439 \u0437\u0432\u0443\u043A \u043F\u043E\u0435\ - \u0434\u0430\u043D\u0438\u044F \u0439\u043E\u0433\u0443\u0440\u0442\u0430" - - imageadd: "\u0414\u043E\u0431\u0430\u0432\u0438\u043B\u0438 \u043A\u043B\u0430\ - \u0441\u0441\u043D\u0443\u044E \u043A\u0430\u0440\u0442\u0438\u043D\u043A\u0443\ - \ \u0441 \u0439\u043E\u0433\u0443\u0440\u0442\u043E\u043C" - - imagedel: "\u0423\u0431\u0440\u0430\u043B\u0438 \u043F\u043B\u043E\u0445\u0443\ - \u044E \u043A\u0430\u0440\u0442\u0438\u043D\u043A\u0443 \u0441 \u0440\u0435\u0437\ - \u043E\u043C\u0438" - - spellcheck: "\u0423\u0431\u0440\u0430\u043B\u0438 \u043E\u0447\u0435\u043F\u044F\ - \u0442\u043A\u0438 \u0432 \u0441\u043B\u043E\u0432\u0435 \u0451\u0433\u0443\u0440\ - \u0442" - - admin: "\u041F\u043E\u0442\u0440\u043E\u0433\u0430\u043B\u0438 \u0430\u0434\u043C\ - \u0438\u043D\u043E\u0432 \u0437\u0430 \u0438\u0445... \u043A\u043D\u043E\u043F\ - \u043A\u0438... \u0439\u043E\u0433\u0443\u0440\u0442." -2022-06-13: - CrimsonShrike: - - rscadd: Prebuilt flamethrowers have new icon. - - rscadd: Flamethrower sounds. - - tweak: Flamethrowers now use chems as fire source. - - rscadd: Turf fires -> Very hot atmos fires, flamethrowers and fuel decals will - generate these fires. - - tweak: Simple mobs now can take fire damage from burning. - Exapsters: - - rscadd: "\u0427\u0430\u0441\u0442\u0438\u0447\u043D\u044B\u0439 \u043F\u0435\u0440\ - \u0435\u0432\u043E\u0434 \u0440\u0430\u0441\u043E\u0432\u044B\u0445 \u0438 \u043E\ - \u0431\u0449\u0438\u0445 \u044D\u043C\u043E\u0443\u0442\u043E\u0432, \u0438\u0441\ - \u043A\u043B\u044E\u0447\u0430\u044F \u0442\u0435, \u0433\u0434\u0435 \u0438\ - \u0441\u043F\u043E\u043B\u044C\u0437\u0443\u044E\u0442\u0441\u044F \u043C\u0435\ - \u0441\u0442\u043E\u0438\u043C\u0435\u043D\u0438\u044F \u043A\u0443\u043A\u043B\ - \u044B." - - rscadd: "\u041E\u0431\u043D\u043E\u0432\u043B\u0435\u043D\u0430 \u043F\u0430\u043D\ - \u0435\u043B\u044C \u044D\u043C\u043E\u0443\u0442\u043E\u0432. \u0414\u043E\u0431\ - \u0430\u0432\u043B\u0435\u043D\u044B \"tfist\" \u0438 \"rsalute\". \u0422\u043E\ - \u043B\u044C\u043A\u043E \"rsalute\" \u0431\u044B\u043B \u043F\u0435\u0440\u0435\ - \u0432\u0435\u0434\u0451\u043D." - - bugfix: "\u0418\u0441\u043F\u0440\u0430\u0432\u043B\u0435\u043D\u043E \u043E\u0442\ - \u043E\u0431\u0440\u0430\u0436\u0435\u043D\u0438\u0435 \u044D\u043C\u043E\u0443\ - \u0442\u0430 \"\u0427\u0435\u0440\u0435\u0448\u0435\u0442\u0441\u044F\", \u043D\ - \u043E \u0432\u0437\u0430\u043C\u0435\u043D \u043D\u0435\u0433\u043E \u0431\u044B\ - \u043B\u043E \u0443\u0441\u0442\u0430\u043D\u043E\u0432\u043B\u0435\u043D\u043E\ - \ \"\u041F\u043E\u0447\u0451\u0441\u044B\u0432\u0430\u0435\u0442\u0441\u044F\ - \"..." -2022-06-16: - Nl208: - - bugfix: Bots such as Beepsky and cleanbots now take damage and die properly. -2022-06-17: - Ninetailed: - - rscadd: New interface for robot hypospray - - rscadd: Emergency Response bots can now apply an auto-compressor and hang an IV - bag - - rscadd: Crisis and Emergency Response bots can now carry extra chem bottles for - use with the upgraded hypo - - tweak: Adjustments to drugs medical bots can synthesize -2022-06-18: - Ninetailed: - - tweak: Maps used for camera and crew monitor software updated -2022-06-19: - Imienny: - - rscadd: Added roll of duct tape and cleaning supplies to raiders base. - - tweak: Raiders now get colorful backpacks instead of ugly gray backpacks. - Ninetailed: - - bugfix: Robots can now remove shuttle H2 tanks from ports -2022-06-21: - Mucker: - - tweak: Science lockers are now properly Science-only. - - tweak: Charon and GUP will both take off and land faster, and be faster with overmap - travel. - SierraKomodo: - - bugfix: Rubble now properly dies when hit enough times. It still won't drop loot - unless you use the right tools, however. - - bugfix: Mech weapons with no charge cost now display an ammo count of `INF` instead - of whatever outputted when it runtimed from dividing by zero. - - maptweak: The Charon's main fuel line (The one connected to the big CO2 tanks) - now has a gas meter. - Spookerton: - - tweak: Observers can respawn freely during roundstart. -2022-06-22: - Drakon: - - balance: "\u0412 \u0430\u043F\u043B\u0438\u043D\u043A \u0431\u044B\u043B\u0430\ - \ \u0434\u043E\u0431\u0430\u0432\u043B\u0435\u043D\u0430 \u043E\u0442\u0434\u0435\ - \u043B\u044C\u043D\u0430\u044F \u043A\u0430\u0442\u0435\u0433\u043E\u0440\u0438\ - \u044F \u0434\u043B\u044F \u0431\u0440\u043E\u043D\u0438 \u0438 \u0440\u0438\ - \u0433\u043E\u0432. \u0422\u044F\u0436\u0435\u043B\u0430\u044F \u0431\u0440\u043E\ - \u043D\u0438 \u0438 \u043E\u0431\u044B\u0447\u043D\u044B\u0439 \u0441\u0438\u043D\ - \u0434\u0438 \u0441\u043A\u0430\u0444\u0430\u043D\u0434\u0440 \u0434\u043E\u0441\ - \u0442\u0443\u043F\u043D\u044B \u0442\u0430\u043A\u0436\u0435 \u0434\u043B\u044F\ - \ \u0442\u0440\u0438\u0442\u043E\u0440\u043E\u0432." - - balance: "\u0412 \u0430\u043F\u043B\u0438\u043D\u043A \u0431\u044B\u043B \u0434\ - \u043E\u0431\u0430\u0432\u043B\u0435\u043D \u043C\u0435\u0445 \u0434\u043B\u044F\ - \ \u043F\u043E\u043A\u0443\u043F\u043A\u0438." - - spellcheck: "\u0420\u0430\u0441\u0448\u0438\u0440\u0435\u043D\u043E \u043E\u043F\ - \u0438\u0441\u0430\u043D\u0438\u044F \u0434\u043B\u044F \u0437\u0430\u0448\u0435\ - \u0434\u0448\u0438\u0445 \u0437\u0430 \u043C\u0435\u0440\u043A\u043E\u0432." -2022-06-23: - Drakon341: - - spellcheck: "\u0418\u0441\u043F\u0440\u0430\u0432\u043B\u0435\u043D\u0438\u0435\ - \ \u0432\u0441\u044F\u043A\u0438\u0445 \u0431\u0443\u043A\u043E\u0432\u043E\u043A\ - \ \u0432 \u0440\u0435\u043F\u043E\u0440\u0442 \u044D\u0434\u0438\u0442\u043E\ - \u0440\u0435." -2022-06-24: - ? '' - : - rscadd: "1. \u0414\u043E\u0431\u0430\u0432\u043B\u0435\u043D \u043D\u043E\u0432\ - \u044B\u0439 \u043C\u0435\u0447: \u0432\u044B\u0441\u043E\u043A\u043E\u0447\ - \u0430\u0441\u0442\u043E\u0442\u043D\u0430\u044F \u043A\u0430\u0442\u0430\u043D\ - \u0430" - - rscadd: "2. \u0447\u0435\u0440\u0442\u0435\u0436\u0438 \u043C\u0435\u0447\u0435\ - \u0439 \u0434\u043E\u0431\u0430\u0432\u043B\u0435\u043D\u044B \u0432 \u0420\ - \u043D\u0414" - - rscadd: "3. \u0432 \u0441\u043A\u043E\u0440\u043E\u043C \u0431\u0443\u0434\u0435\ - \u0442 \u0434\u043E\u0431\u0430\u0432\u043B\u0435\u043D \u043D\u043E\u0432\ - \u044B\u0439 \u043C\u0443\u0432 \u0441\u0435\u0442 \u0441\u043F\u0435\u0446\ - \u0438\u0430\u043B\u044C\u043D\u043E \u0434\u043B\u044F \u044D\u0442\u043E\ - \u0433\u043E \u043E\u0440\u0443\u0436\u0438\u044F" - - rscadd: "4. \u0442\u0430\u043A\u0436\u0435 \u043F\u0440\u043E\u0448\u0443 \u0441\ - \u043A\u0438\u043D\u044C\u0442\u0435\u0441\u044C \u043C\u043D\u0435 \u043D\ - \u0430 \u043F\u0438\u0446\u0446\u0443, \u0430 \u0442\u043E \u043C\u043D\u0435\ - \ \u0415\u0432\u0430 \u043D\u0435 \u0434\u0430\u0451\u0442 \u0435\u0434\u0443\ - \ \u0432 \u043F\u043E\u0434\u0432\u0430\u043B\u0435" -2022-06-26: - Imienny: - - tweak: Dufflebags no longer slow you down, as trade off they cant be opened while - on your back. - Mucker: - - bugfix: Fixed simple mobs being unable to force open doors. - Ryan180602, Azlanonpc: - - rscadd: Add Compass/GPS from Nebula. -2022-06-27: - Drakon341: - - tweak: "\u0422\u0435\u043F\u0435\u0440\u044C \u0444\u043E\u0440\u043C\u044B \u043A\ - \u043E\u043D\u0442\u0440\u0430\u0442\u043D\u0438\u043A\u043E\u0432 \u043C\u043E\ - \u0433\u0443\u0442 \u0432\u0437\u044F\u0442\u044C \u0442\u043E\u043B\u044C\u043A\ - \u043E \u043B\u044E\u0434\u0438 \u0438\u0437 \u0431\u0440\u0430\u043D\u0447\u0430\ - \ \u0446\u0438\u0432\u0438\u043B\u0438\u0430\u043D." -2022-06-28: - Evie7056: - - bugfix: "\u0418\u041F\u041A, \u0428\u0435\u043B\u043B\u044B, \u0412\u0430\u0442\ - \u044B, \u0421\u043F\u0435\u0439\u0441 \u0438 \u0413\u0440\u0430\u0432 \u0410\ - \u0434\u0430\u043F\u0442\u044B, \u0422\u0440\u0438\u0442\u043E\u043D\u044B,\ - \ \u0421\u043A\u0440\u0435\u043B\u043B\u044B, \u0423\u043D\u0430\u0442\u0438\ - \ \u0442\u0435\u043F\u0435\u0440\u044C \u0434\u0435\u0439\u0441\u0442\u0432\u0438\ - \u0442\u0435\u043B\u044C\u043D\u043E \u0438\u043C\u0435\u044E\u0442 \u043F\u0438\ - \u043A\u0441\u0435\u043B\u044C \u0441\u043A\u0435\u0439\u043B\u0438\u043D\u0433\ - \ \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043C\u043E\u0441\u0442\u0438\ - \ \u043E\u0442 \u0438\u0445 \u0440\u043E\u0441\u0442\u0430" - - bugfix: "\u0428\u0435\u043B\u043B\u044B \u0442\u0435\u043F\u0435\u0440\u044C \u043F\ - \u0440\u0430\u0432\u0438\u043B\u044C\u043D\u043E \u043C\u043E\u0433\u0443\u0442\ - \ \u043D\u0430\u0434\u0435\u0432\u0430\u0442\u044C \u043F\u043E\u0447\u0442\u0438\ - \ \u043B\u044E\u0431\u044B\u0435 \u0420\u0418\u0413\u0438 \u0438 \u0421\u043A\ - \u0430\u0444\u0430\u043D\u0434\u0440\u044B." - - bugfix: "\u041F\u0440\u0438 \u044D\u043A\u0437\u0430\u043C\u0430\u0439\u043D\u0435\ - \ \u0428\u0435\u043B\u043B\u0430 \u0442\u0435\u043F\u0435\u0440\u044C \u043D\ - \u0435 \u0432\u0438\u0434\u043D\u0430 \u0435\u0433\u043E \u0440\u043E\u0431\u043E\ - \u0442\u0438\u0447\u0435\u0441\u043A\u0430\u044F \u0441\u0443\u0449\u043D\u043E\ - \u0441\u0442\u044C." - - bugfix: "\u0428\u0435\u043B\u043B\u044B \u0442\u0435\u043F\u0435\u0440\u044C \u0438\ - \u043C\u0435\u044E\u0442 \u0437\u0432\u0443\u043A\u0438 \u043F\u0440\u0438 \u0438\ - \u0441\u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u043D\u0438\u0438 \u0447\ - \u0435\u043B\u043E\u0432\u0435\u0447\u0435\u0441\u043A\u0438\u0445 \u044D\u043C\ - \u043E\u0443\u0442\u043E\u0432" - - bugfix: "\u0428\u0435\u043B\u043B\u044B \u0442\u0435\u043F\u0435\u0440\u044C \u0438\ - \u043C\u0435\u044E\u0442 \u0447\u0435\u043B\u043E\u0432\u0435\u0447\u0435\u0441\ - \u043A\u0438\u0435 \u0441\u043E\u043E\u0431\u0449\u0435\u043D\u0438\u044F \u043E\ - \u0431 \u0421\u0421\u0414." - - spellcheck: "\u0444\u0438\u043A\u0441 \u043E\u043F\u0438\u0441\u0430\u043D\u0438\ - \u044F \u0428\u0435\u043B\u043B\u043E\u0432" - - tweak: "\u0428\u0435\u043B\u043B\u044B \u0442\u0435\u043F\u0435\u0440\u044C \u0438\ - \u043C\u0435\u044E\u0442 \u0441\u0432\u043E\u044E \u0441\u043E\u0431\u0441\u0442\ - \u0432\u0435\u043D\u043D\u0443\u044E \"\u043A\u0440\u043E\u0432\u044C\" \u0433\ - \u043E\u043B\u0443\u0431\u043E\u0433\u043E \u0446\u0432\u0435\u0442\u0430, \u044F\ - \u0432\u043B\u044F\u044E\u0449\u0435\u0433\u043E\u0441\u044F \u0438\u0445 \u043E\ - \u0445\u043B\u0430\u0434\u0438\u0442\u0435\u043B\u0435\u043C." - - maptweak: "\u041E\u043F\u0435\u0440\u0430\u0446\u0438\u043E\u043D\u043D\u0430\u044F\ - \ \u0440\u043E\u0431\u043E\u0442\u0435\u0445\u043D\u0438\u043A\u0438 \u0438\ - \ \u043C\u0435\u0445\u0431\u0435\u0439 \u0442\u0435\u043F\u0435\u0440\u044C\ - \ \u043F\u043E\u043C\u0435\u043D\u044F\u043B\u0438\u0441\u044C \u043C\u0435\u0441\ - \u0442\u0430\u043C\u0438." - - maptweak: "\u041D\u0435\u043A\u0438\u0439 \"\u042D\u041A\u0421\u041E \u0421\u0438\ - \u043D\u0442\" \u043F\u043E\u0441\u0435\u043B\u0438\u043B\u0441\u044F \u0432\ - \ \u0441\u0442\u0430\u0440\u043E\u043C \u0430\u043F\u043B\u043E\u0443\u0434\u0435\ - \ \u0434\u043B\u044F \u0431\u043E\u0440\u0433\u043E\u0432 \u0441 \u0432\u043C\ - \u0435\u0441\u0442\u0435 \u0441\u043E\u043C\u043D\u0438\u0442\u0435\u043B\u044C\ - \u043D\u043E\u0439 \u043B\u0438\u0442\u0435\u0440\u0430\u0442\u043E\u0440\u043E\ - \u0439 \u0438 \u043C\u0430\u0448\u0438\u043D\u043D\u044B\u043C \u043C\u0430\u0441\ - \u043B\u043E\u043C." - - rscadd: "\u0420\u043E\u0431\u043E\u0442\u0435\u0445\u043D\u0438\u043A \u043F\u043E\ - \u043B\u0443\u0447\u0438\u043B \u0430\u043B\u044C\u0442\u0435\u0440\u043D\u0430\ - \u0442\u0438\u0432\u043D\u043E\u0435 \u043D\u0430\u0437\u0432\u0430\u043D\u0438\ - \u0435 \u043F\u0440\u043E\u0444\u0435\u0441\u0441\u0438\u0438 \"\u0411\u0438\ - \u043E\u043C\u0435\u0445\u0430\u043D\u0438\u0447\u0435\u0441\u043A\u0438\u0439\ - \ \u0418\u043D\u0436\u0435\u043D\u0435\u0440\"" - - rscadd: "\u0418\u041F\u041A \u043F\u043E\u043B\u0443\u0447\u0438\u043B\u0438 \u0440\ - \u0430\u0441\u0448\u0438\u0440\u0435\u043D\u043D\u044B\u0439 \u043D\u0430\u0431\ - \u043E\u0440 \u0444\u0440\u0430\u043A\u0446\u0438\u0439 \u0432 \u0441\u0435\u0442\ - \u0430\u043F\u0435 \u043D\u0430 \u0432\u044B\u0431\u043E\u0440." - - rscadd: "\u041D\u043E\u0432\u0435\u0439\u0448\u0430\u044F \u0440\u0430\u0437\u0440\ - \u0430\u0431\u043E\u0442\u043A\u0430 \u042D\u041A\u0421\u041E, \u0432 \u0432\ - \u0438\u0434\u0435 \u043F\u043E\u0437\u0438\u0442\u0440\u043E\u043D\u043D\u0438\ - \u043A\u0430 \u043D\u043E\u0432\u043E\u0433\u043E \u0442\u0438\u043F\u0430 \u043F\ - \u0440\u0438\u0431\u044B\u043B\u0430 \u043D\u0430 \u0413\u042D\u041A \u0424\u0430\ - \u043A\u0435\u043B. \u042D\u041A\u0421\u041E \u0421\u0438\u043D\u0442 \u043F\ - \u043E\u043F\u0430\u043B \u043D\u0430 \u0424\u0430\u043A\u0435\u043B \u0434\u043B\ - \u044F \u0430\u0431\u0441\u043E\u043B\u044E\u0442\u043D\u043E\u0439 \u043F\u043E\ - \u043C\u043E\u0449\u0438 \u042D\u043A\u0438\u043F\u0430\u0436\u0443 \u0432 \u043B\ - \u044E\u0431\u043E\u0439 \u0441\u0444\u0435\u0440\u0435 \u0434\u0435\u044F\u0442\ - \u0435\u043B\u044C\u043D\u043E\u0441\u0442\u0438, \u043E\u0434\u043D\u0430\u043A\ - \u043E \u043D\u0430\u0445\u043E\u0434\u044F\u0441\u044C \u0432 \u043F\u0440\u0430\ - \u0432\u0430\u0445 \u043D\u0430 \u0443\u0440\u043E\u0432\u043D\u0435 \u0411\u043E\ - \u0440\u0433\u0430." -2022-06-29: - Evie7056: - - rscdel: "Qdel() \u041F\u0414\u0424." - - tweak: "\u0412\u0441\u044F \u0441\u0442\u0430\u0440\u044B\u0435 \u0443\u043F\u043E\ - \u043C\u0438\u043D\u0430\u043D\u0438\u044F \u0410\u0440\u043C\u0438\u0438 \u0442\ - \u0435\u043F\u0435\u0440\u044C \u044F\u0432\u043B\u044F\u044E\u0442\u0441\u044F\ - \ \u041C\u043E\u0440\u043F\u0435\u0445\u0430\u043C\u0438." - - tweak: "\u041B\u044E\u0431\u044B\u0435 \u043E\u0441\u0442\u0430\u0432\u0448\u0438\ - \u0435\u0441\u044F \u0443\u043F\u043E\u043C\u0438\u043D\u0430\u043D\u0438\u0438\ - \ \u0410\u0440\u043C\u0438\u0438 \u0442\u0435\u043F\u0435\u0440\u044C \u043F\ - \u043E\u0434\u0440\u0430\u0437\u0443\u043C\u0435\u0432\u0430\u044E\u0442 \u0441\ - \u043E\u0431\u043E\u0439 \u041F\u043B\u0430\u043D\u0435\u0442\u0430\u0440\u043D\ - \u044B\u0435 \u041E\u0431\u043E\u0440\u043E\u043D\u0438\u0442\u0435\u043B\u044C\ - \u043D\u044B\u0435 \u0421\u0438\u043B\u044B \u0438 \u041A\u043E\u0440\u043F\u0443\ - \u0441 \u041C\u043E\u0440\u0441\u043A\u043E\u0439 \u041F\u0435\u0445\u043E\u0442\ - \u044B." - - tweak: "\u0422\u0432\u0438\u043A \u0437\u0432\u0430\u043D\u0438\u0439 \u0432\u043E\ - \u0435\u043D\u043D\u044B\u0445 \u0437\u0432\u0430\u043D\u0438\u0439 \u0410\u0440\ - \u043C\u0438\u0438 \u043D\u0430 \"\u043C\u043E\u0440\u043F\u0435\u0445\u0441\ - \u043A\u0438\u0435\"" - - rscadd: "\u0414\u043E\u0431\u0430\u0432\u043B\u0435\u043D\u044B \u043D\u043E\u0432\ - \u044B\u0435 \u0442\u0435\u043C\u043D\u044B\u0435 \u043A\u0443\u0440\u0442\u043A\ - \u0438 \u0434\u043B\u044F \u041C\u043E\u0440\u043F\u0435\u0445\u043E\u0432." - - tweak: "\u0421\u0435\u0440\u0432\u0438\u0441\u043D\u044B\u0435 \u043A\u0443\u0440\ - \u0442\u043A\u0438 \u043E\u0442\u043D\u044B\u043D\u0435 \u044F\u0432\u043B\u044F\ - \u044E\u0442\u0441\u044F \u0447\u0430\u0441\u0442\u044C\u044E \u043F\u043E\u043B\ - \u0435\u0432\u043E\u0439 \u0444\u043E\u0440\u043C\u044B \u0443 \u041C\u043E\u0440\ - \u043F\u0435\u0445\u043E\u0432 \u043F\u043E \u0430\u043D\u0430\u043B\u043E\u0433\ - \u0438\u0438 \u0441 \u043A\u0443\u0440\u0442\u043A\u0430\u043C\u0438 \u0424\u043B\ - \u043E\u0442\u0430." - - tweak: "\u0422\u0435\u043F\u0435\u0440\u044C \u0442\u0435\u043C\u043D\u0430\u044F\ - \ \"\u0433\u043E\u0440\u043E\u0434\u0441\u043A\u0430\u044F\" \u0444\u043E\u0440\ - \u043C\u0430 \u044F\u0432\u043B\u044F\u0435\u0442\u0441\u044F \u0444\u043E\u0440\ - \u043C\u043E\u0439 \u043F\u043E \u0443\u043C\u043E\u043B\u0447\u0430\u043D\u0438\ - \u044E \u0434\u043B\u044F \u043C\u043E\u0440\u043F\u0435\u0445\u043E\u0432." - - rscadd: "\u041C\u043E\u0440\u043F\u0435\u0445\u0438 \u0412\u041D\u041E\u0412\u042C\ - \ \u043C\u043E\u0433\u0443\u0442 \u0431\u044B\u0442\u044C \u0438\u043D\u0436\ - \u0435\u043D\u0435\u0440\u0430\u043C\u0438 \u043D\u0430 \u0413\u042D\u041A \u0424\ - \u0430\u043A\u0435\u043B." - - rscadd: "\u0414\u043E\u0431\u0430\u0432\u043B\u0435\u043D\u044B \u0434\u043E\u0433\ - \u0442\u0435\u0433\u0438 \u0413\u041A\u041A \u0432 \u041B\u043E\u0430\u0434\u0430\ - \u0443\u0442." - - rscadd: "\u0414\u043E\u0431\u0430\u0432\u043B\u0435\u043D \u0432\u044B\u0431\u043E\ - \u0440 \u043C\u0443\u0437\u044B\u043A\u0430\u043B\u044C\u043D\u044B\u0445 \u0438\ - \u043D\u0441\u0442\u0440\u0443\u043C\u0435\u043D\u0442\u043E\u0432 \u0432 \u041B\ - \u043E\u0430\u0434\u0430\u0443\u0442." - - rscadd: "\u0414\u043E\u0431\u0430\u0432\u043B\u0435\u043D \u0433\u043E\u043B\u0443\ - \u0431\u043E\u0439 piss\u043A\u0438\u043F\u0435\u0440\u043E\u0432\u0441\u043A\ - \u0438\u0439 \u043F\u043B\u0438\u0442\u043D\u0438\u043A \u0432 \u041B\u043E\u0430\ - \u0434\u0430\u0443\u0442." - - bugfix: "\u0424\u0438\u043A\u0441 \u043D\u0430\u0438\u043C\u0435\u043D\u043E\u0432\ - \u0430\u043D\u0438\u0439 \u0433\u043E\u0440\u043A\u0430 \u043A\u0443\u0440\u0442\ - \u043E\u043A \u0424\u043E\u043B\u0435\u0440\u0430." - Evie7065: - - balance: "\u0421\u0442\u0430\u043D\u0440\u0435\u0432\u043E\u043B\u044C\u0432\u0435\ - \u0440 \u043D\u0430\u0433\u043B\u043E \u043E\u0442\u043D\u044F\u0442 \u0443\ - \ \u041C\u0430\u0440\u0438\u043D\u0433\u0443\u0430\u0440\u0434\u043E\u0432" -2022-07-02: - Drakon341: - - tweak: "\u0422\u0443\u0444\u043B\u0438 \u043F\u0435\u0440\u0435\u043C\u0435\u0449\ - \u0435\u043D\u044B \u0438\u0437 \u043A\u0430\u0442\u0435\u0433\u043E\u0440\u0438\ - \u0438 \u0434\u0440\u0435\u0441\u0441 \u043E\u0431\u0440\u0430\u0442\u043D\u043E\ - \ \u0432 \u0441\u0435\u0440\u0432\u0438\u0441." - Evie7056: - - rscadd: "70+ \u043F\u0440\u0438\u0447\u0435\u0441\u043E\u043A, \u043F\u043E\u0440\ - \u0442\u0438\u0440\u043E\u0432\u0430\u043D\u043D\u044B\u0445 \u0441 \u0438\u043D\ - \u0444\u0438\u043D\u0438\u0442\u0438." - - rscadd: "12 \u043D\u043E\u0432\u044B\u0445 \u0431\u043E\u0434\u0438\u043C\u0430\ - \u0440\u043A\u043E\u0432 \u0441 \u0438\u043D\u0444\u0438\u043D\u0438\u0442\u0438\ - ." -2022-07-03: - Evie7056: - - spellcheck: "\u041F\u0435\u0440\u0435\u0438\u043C\u0435\u043D\u043E\u0432\u044B\ - \u0432\u0430\u043D\u0438\u0435 \u043C\u0430\u0440\u0438\u043D\u043E\u0432 \u0438\ - \u0437 \u0430\u0440\u043C\u0438\u0438 \u0432\u0435\u0437\u0434\u0435, \u0433\ - \u0434\u0435 \u044F \u0437\u0430\u0431\u044B\u043B\u0430 \u0434\u043E \u044D\ - \u0442\u043E\u0433\u043E" - - bugfix: "\u0424\u0438\u043A\u0441 \u0441\u043F\u0440\u0430\u0439\u0442\u0430 \u0431\ - \u0435\u0440\u0435\u0442\u0430 \u041E\u0414\u0421\u0422. \u041E\u043D \u0441\ - \u043D\u043E\u0432\u0430 \u043A\u0440\u0430\u0441\u043D\u044B\u0439, \u0432\u0437\ - \u0430\u043C\u0435\u043D \u0431\u0435\u0440\u0435\u0442\u0430 \u041B\u0435\u0442\ - \u043D\u043E\u0439 \u0414\u0438\u0432\u0438\u0437\u0438\u0438 \u0410\u0440\u043C\ - \u0438\u0438" - - bugfix: "\u041B\u0438\u0444\u0442 \u0432 \u0440\u043E\u0431\u043E\u0442\u0435\u0445\ - \u043D\u0438\u043A\u0435 \u0442\u0435\u043F\u0435\u0440\u044C \u0435\u0434\u0435\ - \u0442 \u043F\u0440\u0430\u0432\u0438\u043B\u044C\u043D\u043E, \u0430 \u043D\ - \u0435 \u043F\u043E\u0434 \u0443\u0433\u043B\u043E\u043C \u0432 33 \u0433\u0440\ - \u0430\u0434\u0443\u0441\u0430" - - tweak: "\u0417\u0430\u043A\u043E\u043D\u044B \u0421\u0438\u043D\u0442\u0430 \u0441\ - \u043A\u043E\u043C\u043F\u043E\u043D\u043E\u0432\u043E\u043D\u044B \u0432 \u0442\ - \u0440\u0438 \u0437\u0430\u043A\u043E\u043D\u0430, \u0432\u043C\u0435\u0441\u0442\ - \u043E \u0442\u0440\u0435\u0445." - - bugfix: "\u0424\u0438\u043A\u0441\u044B \u0443\u043D\u0438\u0444\u043E\u0440\u043C\ - \u044B \u0430\u0440\u043C\u0438\u0438. \u0422\u0435\u043F\u0435\u0440\u044C\ - \ \u043E\u043D\u0430 \u0434\u043E\u043B\u0436\u043D\u0430 \u0441\u043F\u0430\ - \u0432\u043D\u0438\u0442\u0441\u044F \u043F\u0440\u0430\u0432\u0438\u043B\u044C\ - \u043D\u044B\u043C \u043E\u0431\u0440\u0430\u0437\u043E\u043C" - - bugfix: "\u0424\u0438\u043A\u0441 \u0440\u0430\u043D\u0442\u0430\u0439\u043C\u0430\ - \ \u043F\u0440\u0438 \u0441\u043F\u0430\u0432\u043D\u0435 \u0441\u0438\u043D\ - \u0442\u0430. \u041E\u043D \u043F\u043E\u0442\u0435\u0440\u044F\u043B \u0441\ - \u0432\u043E\u0439 \u043F\u0435\u0440\u0441\u043E\u043D\u0430\u043B\u044C\u043D\ - \u044B\u0439 \u0441\u043F\u0430\u0432\u043D \u043D\u0430 \u0441\u0432\u043E\u0435\ - \u043C \"\u0420\u0430\u043D\u0447\u043E-\u0440\u0435\u043B\u0430\u043A\u0441\ - \u043E\"" - - rscadd: "\u0414\u043E\u0431\u0430\u0432\u043B\u0435\u043D\u043D\u044B \u0434\u043E\ - \u043F\u043E\u043B\u043D\u0438\u0442\u0435\u043B\u044C\u043D\u044B\u0435 \u043F\ - \u043E\u0434\u0434\u0435\u043B\u044C\u043D\u044B\u0435 \u0440\u0430\u043D\u0433\ - \u0438 \u0434\u043B\u044F \u043C\u0430\u0440\u0438\u043D\u043E\u0432 E7 \u0438\ - \ E9. \u0422\u043E\u043B\u044C\u043A\u043E \u0430\u0434\u043C\u0438\u043D \u0441\ - \u043F\u0430\u0432\u043D \u0438 \u0442\u043E\u0440\u0433\u043E\u0432\u043B\u044F\ - ." - - rscadd: "\u0414\u043E\u0431\u0430\u0432\u043B\u0435\u043D \u0435\u0449\u0435 \u043E\ - \u0434\u0438\u043D \u0431\u0435\u0440\u0435\u0442. \u0422\u043E\u043B\u044C\u043A\ - \u043E \u0434\u043B\u044F \u0430\u0434\u043C\u0438\u043D \u0441\u043F\u0430\u0432\ - \u043D\u0430, \u0434\u043E \u043E\u0431\u043D\u043E\u0432\u043B\u0435\u043D\u0438\ - \u044F \u0441\u0442\u0430\u0442\u044C\u0438 \u0410\u0440\u043C\u0438\u0438." -2022-07-04: - Evie7056: - - rscadd: "\u0413\u0421\u0411-\u043C\u043E\u0440\u043F\u0435\u0445 \u043F\u043E\u043B\ - \u0443\u0447\u0438\u043B \u0437\u0432\u0430\u043D\u0438\u0435 \u043C\u0430\u0439\ - \u043E\u0440\u0430" - - rscadd: "\u0421\u0415\u0410 \u0442\u0435\u043F\u0435\u0440\u044C \u043C\u043E\u0436\ - \u0435\u0442 \u0431\u044B\u0442\u044C \u043E\u0442 \u0430\u0440\u043C\u0438\u0438\ - ." - Evie7056, XeroXOffice: - - rscadd: "\u0420\u0430\u043D\u0433 \u0421\u0443\u043F\u0435\u0440\u0432\u0430\u0439\ - \u0437\u0435\u0440\u0430 \u0421\u0424\u041F \u0432\u043E\u0441\u0441\u0442\u0430\ - \u043D\u043E\u0432\u043B\u0435\u043D \u0432 \u043A\u043E\u0434\u0435" - - rscadd: "\u0412 \u043E\u0431\u0449\u0435\u043C \u0438 \u0446\u0435\u043B\u043E\ - \u043C, \u0432 \u043A\u043E\u0434\u0435 \u043F\u043E\u044F\u0432\u0438\u043B\ - \u043E\u0441\u044C \u0448\u0435\u0441\u0442\u044C \u043D\u043E\u0432\u044B\u0445\ - \ \u0440\u0430\u043D\u0433\u043E\u0432, \u0434\u043B\u044F \u043F\u0440\u0435\ - \u0434\u0441\u0442\u0430\u0432\u043B\u0435\u043D\u0438\u044F \u0430\u0433\u0435\ - \u043D\u0442\u043E\u0432 \u0421\u0424\u041F" - - tweak: "\u0421\u043B\u0435\u0434\u043E\u0432\u0430\u0442\u0435\u043B\u0438 \u0421\ - \u0424\u041F \u043F\u043E\u043B\u0443\u0447\u0438\u043B\u0438 \u0440\u0430\u043D\ - \u0433\u0438 \u0421\u0442\u0430\u0440\u0448\u0435\u0433\u043E \u0410\u0433\u0435\ - \u043D\u0442\u0430 \u0438 \u0414\u0435\u0436\u0443\u0440\u043D\u043E\u0433\u043E\ - \ \u0410\u0433\u0435\u043D\u0442\u0430" - - tweak: "\u0417\u0432\u0430\u043D\u0438\u044F \u0418\u043D\u0441\u043F\u0435\u043A\ - \u0442\u043E\u0440\u0430, \u041A\u0443\u0440\u0430\u0442\u043E\u0440\u0430,\ - \ \u0414\u0438\u0440\u0435\u043A\u0442\u043E\u0440\u0430 \u041E\u0442\u0434\u0435\ - \u043B\u0430 (\u043E\u043D\u0438 \u0436\u0435 \u0417\u0430\u043C.\u0414\u0438\ - \u0440\u0435\u043A\u0442\u043E\u0440\u0430) \u0438 \u0414\u0438\u0440\u0435\u043A\ - \u0442\u043E\u0440\u0430, \u043D\u0435\u0434\u043E\u0441\u0442\u0443\u043F\u043D\ - \u044B \u0434\u043B\u044F \u0424\u0430\u043A\u0435\u043B\u0430, \u043D\u043E\ - \ \u0434\u043E\u0441\u0442\u0443\u043F\u043D\u044B \u0432 \u043A\u043E\u0434\ - \u0435." - - maptweak: "\u0410\u0432\u0442\u043E\u0442\u0430\u043B\u0430\u0442 \u043F\u0435\ - \u0440\u0435\u0435\u0445\u0430\u043B \u0432 \u0437\u0430\u0449\u0438\u0449\u0435\ - \u043D\u043D\u0443\u044E \u0447\u0430\u0441\u0442\u044C \u043E\u0440\u0443\u0436\ - \u0435\u0439\u043D\u043E\u0439 \u0411\u0440\u0438\u0433\u0430." - - rscadd: "\u0418\u0437\u043C\u0435\u043D\u0435\u043D\u044B \u0441\u043F\u0440\u0430\ - \u0439\u0442\u044B \u043F\u0440\u0435\u0434\u043C\u0435\u0442\u043E\u0432 \u043F\ - \u043E\u0433\u043E\u043D, \u0434\u043B\u044F \u0440\u044F\u0434\u043E\u0432\u043E\ - \u0433\u043E \u0441\u043E\u0441\u0442\u0430\u0432\u0430 \u043F\u043E\u0433\u043E\ - \u043D\u044B \u043F\u0435\u0440\u0435\u0434\u0435\u043B\u0430\u043D\u044B \u0432\ - \ \u043D\u0430\u0448\u0438\u0432\u043A\u0438" - - rscadd: "\u0414\u043E\u0431\u0430\u0432\u043B\u0435\u043D\u044B \u043E\u0442\u0434\ - \u0435\u043B\u044C\u043D\u044B\u0435 \u0441\u043F\u0440\u0430\u0439\u0442\u044B\ - \ \u0434\u043B\u044F \u0437\u043D\u0430\u0447\u043A\u043E\u0432 \u043E\u0444\ - \u0438\u0446\u0435\u0440\u043E\u0432 \u0430\u0440\u043C\u0438\u0438" -2022-07-05: - SierraKomodo: - - tweak: Pilots now have access to the Post-Flight reports in Deck Management. -2022-07-07: - Evie7056: - - tweak: "\u041C\u043D\u043E\u0433\u0438\u0435 \u043D\u0430\u0432\u044B\u043A\u0438\ - \ \u0421\u0438\u043D\u0442\u0435\u0442\u0430 \u0431\u044B\u043B\u0438 \u043F\ - \u0435\u0440\u0435\u0440\u0430\u0441\u043F\u0440\u0435\u0434\u0435\u043B\u0435\ - \u043D\u044B \u0441 \u0445\u0443\u0434\u0448\u0443\u044E \u0441\u0442\u043E\u0440\ - \u043E\u043D\u0443." - - tweak: "\u0421\u0438\u043D\u0442\u0435\u0442\u0438\u043A \u042D\u041A\u0421\u041E\ - \ \u0431\u043E\u043B\u044C\u0448\u0435 \u043D\u0435 \u043C\u043E\u0436\u0435\ - \u0442 \u043F\u043E\u044F\u0432\u0438\u0442\u044C\u0441\u044F \u043D\u0430 \u0424\ - \u0430\u043A\u0435\u043B\u0435 \u0441 \u043D\u0430\u0447\u0430\u043B\u0430 \u0441\ - \u043C\u0435\u043D\u044B." - - rscadd: "\u0412 \u043A\u043E\u043C\u0430\u043D\u0434\u043D\u0443\u044E \u043F\u0440\ - \u043E\u0433\u0440\u0430\u043C\u043C\u0443 \u0431\u044B\u043B\u0430 \u0434\u043E\ - \u0431\u0430\u0432\u043B\u0435\u043D\u0430 \u043E\u043F\u0446\u0438\u044F, \u043F\ - \u043E\u0437\u0432\u043E\u043B\u044F\u044E\u0449\u0430\u044F \u0432\u044B\u0437\ - \u0432\u0430\u0442\u044C \u0421\u0438\u043D\u0442\u0435\u0442\u0430 \u0438\u0437\ - \ \u041A\u0440\u0438\u043E, \u043E\u0442\u043A\u0440\u044B\u0432\u0430\u044F\ - \ \u0441\u043B\u043E\u0442." diff --git a/html/changelogs/__CHANGELOG_README.txt b/html/changelogs/__CHANGELOG_README.txt deleted file mode 100644 index 6915dc47e25ef..0000000000000 --- a/html/changelogs/__CHANGELOG_README.txt +++ /dev/null @@ -1,19 +0,0 @@ -Changelogs are included with commits as text .yml files created individually by the committer. If you want to create a changelog entry you create a .yml file in the /changelogs directory; nothing else needs to be touched unless you are a maintainer. - -####################################################### - -TO MAKE A CHANGELOG .YML ENTRRY - -1. Make a copy of the file example.yml in html/changelogs and rename it to [YOUR USERNAME]-PR-[YOUR PR NUMBER].yml or [YOUR USERNAME]-[YOUR BRANCH NAME]. Only the username is strictly required, anything else is organizational and can be ignored if you so wish. - -2. Change the author to yourself - -3. Replace the changes text with a description of the changes in your PR, keep the double quotes to avoid errors (your changelog can be written ICly or OOCly, it doesn't matter) - -4. (Optional) set the change prefix (rscadd) to a different one listed above in example.yml (this affects what icon is used for your changelog entry) - -5. When commiting make sure your .yml file is included in the commit (it will usually be unticked as an unversioned file) - -####################################################### - -If you have trouble ask for help in #codershuttle on irc.sorcery.net or read https://tgstation13.org/wiki/Guide_to_Changelogs diff --git a/html/changelogs/example.yml b/html/changelogs/example.yml deleted file mode 100644 index 05c234a82c0d7..0000000000000 --- a/html/changelogs/example.yml +++ /dev/null @@ -1,38 +0,0 @@ -################################ -# Example Changelog File -# -# Note: This file, and files beginning with ".", and files that don't end in ".yml" will not be read. If you change this file, you will look really dumb. -# -# Your changelog will be merged with a master changelog. (New stuff added only, and only on the date entry for the day it was merged.) -# When it is, any changes listed below will disappear. -# -# Valid Prefixes: -# bugfix -# wip (For works in progress) -# tweak -# soundadd -# sounddel -# rscadd (general adding of nice things) -# rscdel (general deleting of nice things) -# imageadd -# imagedel -# maptweak -# spellcheck (typo fixes) -# experiment -# admin -################################# - -# Your name. -author: Unknown - -# Optional: Remove this file after generating master changelog. Useful for PR changelogs that won't get used again. -delete-after: True - -# Any changes you've made. See valid prefix list above. -# INDENT WITH TWO SPACES. NOT TABS. SPACES. -# SCREW THIS UP AND IT WON'T WORK. -# Also, all entries are changed into a single [] after a master changelog generation. Just remove the brackets when you add new entries. -# Please surround your changes in double quotes ("), as certain characters otherwise screws up compiling. The quotes will not show up in the changelog. -changes: - - rscadd: "Added a changelog editing system that should cause fewer conflicts and more accurate timestamps." - - rscdel: "Killed innocent kittens." diff --git a/html/chevron-expand.png b/html/chevron-expand.png deleted file mode 100644 index f770e33d8ea4f..0000000000000 Binary files a/html/chevron-expand.png and /dev/null differ diff --git a/html/chevron.png b/html/chevron.png deleted file mode 100644 index b83135b69084e..0000000000000 Binary files a/html/chevron.png and /dev/null differ diff --git a/html/create_object.html b/html/create_object.html deleted file mode 100644 index 7ed93d9818038..0000000000000 --- a/html/create_object.html +++ /dev/null @@ -1,128 +0,0 @@ - - - - Create Object - - - - -
                  - - - - Type
                  - Offset: - - A - R
                  - - Number: - Dir: - Name:
                  - Where: - -

                  - Number of matches:
                  -

                  - -
                  - -
                  - -
                  - -
                  - - - - - \ No newline at end of file diff --git a/html/cross-circle.png b/html/cross-circle.png deleted file mode 100644 index e6f2d3228b81a..0000000000000 Binary files a/html/cross-circle.png and /dev/null differ diff --git a/html/font-awesome/README.MD b/html/font-awesome/README.MD deleted file mode 100644 index 7d693c36f031d..0000000000000 --- a/html/font-awesome/README.MD +++ /dev/null @@ -1,6 +0,0 @@ -Due to the fact browse_rsc can't create subdirectories, every time you update font-awesome you'll need to change relative webfont references in all.min.css -eg ../webfonts/fa-regular-400.ttf => fa-regular-400.ttf (or whatever you call it in asset datum) - -Second change is ripping out file types other than woff and eot(ie8) from the css - -Finally, removing brand related css. \ No newline at end of file diff --git a/html/font-awesome/css/all.min.css b/html/font-awesome/css/all.min.css deleted file mode 100644 index e7cdfffe751e0..0000000000000 --- a/html/font-awesome/css/all.min.css +++ /dev/null @@ -1,5 +0,0 @@ -/*! - * Font Awesome Free 5.9.0 by @fontawesome - https://fontawesome.com - * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) - */ -.fa,.fab,.fal,.far,.fas{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;display:inline-block;font-style:normal;font-variant:normal;text-rendering:auto;line-height:1}.fa-lg{font-size:1.33333em;line-height:.75em;vertical-align:-.0667em}.fa-xs{font-size:.75em}.fa-sm{font-size:.875em}.fa-1x{font-size:1em}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-6x{font-size:6em}.fa-7x{font-size:7em}.fa-8x{font-size:8em}.fa-9x{font-size:9em}.fa-10x{font-size:10em}.fa-fw{text-align:center;width:1.25em}.fa-ul{list-style-type:none;margin-left:2.5em;padding-left:0}.fa-ul>li{position:relative}.fa-li{left:-2em;position:absolute;text-align:center;width:2em;line-height:inherit}.fa-border{border:.08em solid #eee;border-radius:.1em;padding:.2em .25em .15em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa.fa-pull-left,.fab.fa-pull-left,.fal.fa-pull-left,.far.fa-pull-left,.fas.fa-pull-left{margin-right:.3em}.fa.fa-pull-right,.fab.fa-pull-right,.fal.fa-pull-right,.far.fa-pull-right,.fas.fa-pull-right{margin-left:.3em}.fa-spin{animation:fa-spin 2s infinite linear}.fa-pulse{animation:fa-spin 1s infinite steps(8)}@keyframes fa-spin{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}.fa-rotate-90{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=1)";transform:rotate(90deg)}.fa-rotate-180{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2)";transform:rotate(180deg)}.fa-rotate-270{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=3)";transform:rotate(270deg)}.fa-flip-horizontal{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)";transform:scaleX(-1)}.fa-flip-vertical{transform:scaleY(-1)}.fa-flip-both,.fa-flip-horizontal.fa-flip-vertical,.fa-flip-vertical{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)"}.fa-flip-both,.fa-flip-horizontal.fa-flip-vertical{transform:scale(-1)}:root .fa-flip-both,:root .fa-flip-horizontal,:root .fa-flip-vertical,:root .fa-rotate-90,:root .fa-rotate-180,:root .fa-rotate-270{filter:none}.fa-stack{display:inline-block;height:2em;line-height:2em;position:relative;vertical-align:middle;width:2.5em}.fa-stack-1x,.fa-stack-2x{left:0;position:absolute;text-align:center;width:100%}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-500px:before{content:"\f26e"}.fa-accessible-icon:before{content:"\f368"}.fa-accusoft:before{content:"\f369"}.fa-acquisitions-incorporated:before{content:"\f6af"}.fa-ad:before{content:"\f641"}.fa-address-book:before{content:"\f2b9"}.fa-address-card:before{content:"\f2bb"}.fa-adjust:before{content:"\f042"}.fa-adn:before{content:"\f170"}.fa-adobe:before{content:"\f778"}.fa-adversal:before{content:"\f36a"}.fa-affiliatetheme:before{content:"\f36b"}.fa-air-freshener:before{content:"\f5d0"}.fa-airbnb:before{content:"\f834"}.fa-algolia:before{content:"\f36c"}.fa-align-center:before{content:"\f037"}.fa-align-justify:before{content:"\f039"}.fa-align-left:before{content:"\f036"}.fa-align-right:before{content:"\f038"}.fa-alipay:before{content:"\f642"}.fa-allergies:before{content:"\f461"}.fa-amazon:before{content:"\f270"}.fa-amazon-pay:before{content:"\f42c"}.fa-ambulance:before{content:"\f0f9"}.fa-american-sign-language-interpreting:before{content:"\f2a3"}.fa-amilia:before{content:"\f36d"}.fa-anchor:before{content:"\f13d"}.fa-android:before{content:"\f17b"}.fa-angellist:before{content:"\f209"}.fa-angle-double-down:before{content:"\f103"}.fa-angle-double-left:before{content:"\f100"}.fa-angle-double-right:before{content:"\f101"}.fa-angle-double-up:before{content:"\f102"}.fa-angle-down:before{content:"\f107"}.fa-angle-left:before{content:"\f104"}.fa-angle-right:before{content:"\f105"}.fa-angle-up:before{content:"\f106"}.fa-angry:before{content:"\f556"}.fa-angrycreative:before{content:"\f36e"}.fa-angular:before{content:"\f420"}.fa-ankh:before{content:"\f644"}.fa-app-store:before{content:"\f36f"}.fa-app-store-ios:before{content:"\f370"}.fa-apper:before{content:"\f371"}.fa-apple:before{content:"\f179"}.fa-apple-alt:before{content:"\f5d1"}.fa-apple-pay:before{content:"\f415"}.fa-archive:before{content:"\f187"}.fa-archway:before{content:"\f557"}.fa-arrow-alt-circle-down:before{content:"\f358"}.fa-arrow-alt-circle-left:before{content:"\f359"}.fa-arrow-alt-circle-right:before{content:"\f35a"}.fa-arrow-alt-circle-up:before{content:"\f35b"}.fa-arrow-circle-down:before{content:"\f0ab"}.fa-arrow-circle-left:before{content:"\f0a8"}.fa-arrow-circle-right:before{content:"\f0a9"}.fa-arrow-circle-up:before{content:"\f0aa"}.fa-arrow-down:before{content:"\f063"}.fa-arrow-left:before{content:"\f060"}.fa-arrow-right:before{content:"\f061"}.fa-arrow-up:before{content:"\f062"}.fa-arrows-alt:before{content:"\f0b2"}.fa-arrows-alt-h:before{content:"\f337"}.fa-arrows-alt-v:before{content:"\f338"}.fa-artstation:before{content:"\f77a"}.fa-assistive-listening-systems:before{content:"\f2a2"}.fa-asterisk:before{content:"\f069"}.fa-asymmetrik:before{content:"\f372"}.fa-at:before{content:"\f1fa"}.fa-atlas:before{content:"\f558"}.fa-atlassian:before{content:"\f77b"}.fa-atom:before{content:"\f5d2"}.fa-audible:before{content:"\f373"}.fa-audio-description:before{content:"\f29e"}.fa-autoprefixer:before{content:"\f41c"}.fa-avianex:before{content:"\f374"}.fa-aviato:before{content:"\f421"}.fa-award:before{content:"\f559"}.fa-aws:before{content:"\f375"}.fa-baby:before{content:"\f77c"}.fa-baby-carriage:before{content:"\f77d"}.fa-backspace:before{content:"\f55a"}.fa-backward:before{content:"\f04a"}.fa-bacon:before{content:"\f7e5"}.fa-balance-scale:before{content:"\f24e"}.fa-balance-scale-left:before{content:"\f515"}.fa-balance-scale-right:before{content:"\f516"}.fa-ban:before{content:"\f05e"}.fa-band-aid:before{content:"\f462"}.fa-bandcamp:before{content:"\f2d5"}.fa-barcode:before{content:"\f02a"}.fa-bars:before{content:"\f0c9"}.fa-baseball-ball:before{content:"\f433"}.fa-basketball-ball:before{content:"\f434"}.fa-bath:before{content:"\f2cd"}.fa-battery-empty:before{content:"\f244"}.fa-battery-full:before{content:"\f240"}.fa-battery-half:before{content:"\f242"}.fa-battery-quarter:before{content:"\f243"}.fa-battery-three-quarters:before{content:"\f241"}.fa-battle-net:before{content:"\f835"}.fa-bed:before{content:"\f236"}.fa-beer:before{content:"\f0fc"}.fa-behance:before{content:"\f1b4"}.fa-behance-square:before{content:"\f1b5"}.fa-bell:before{content:"\f0f3"}.fa-bell-slash:before{content:"\f1f6"}.fa-bezier-curve:before{content:"\f55b"}.fa-bible:before{content:"\f647"}.fa-bicycle:before{content:"\f206"}.fa-biking:before{content:"\f84a"}.fa-bimobject:before{content:"\f378"}.fa-binoculars:before{content:"\f1e5"}.fa-biohazard:before{content:"\f780"}.fa-birthday-cake:before{content:"\f1fd"}.fa-bitbucket:before{content:"\f171"}.fa-bitcoin:before{content:"\f379"}.fa-bity:before{content:"\f37a"}.fa-black-tie:before{content:"\f27e"}.fa-blackberry:before{content:"\f37b"}.fa-blender:before{content:"\f517"}.fa-blender-phone:before{content:"\f6b6"}.fa-blind:before{content:"\f29d"}.fa-blog:before{content:"\f781"}.fa-blogger:before{content:"\f37c"}.fa-blogger-b:before{content:"\f37d"}.fa-bluetooth:before{content:"\f293"}.fa-bluetooth-b:before{content:"\f294"}.fa-bold:before{content:"\f032"}.fa-bolt:before{content:"\f0e7"}.fa-bomb:before{content:"\f1e2"}.fa-bone:before{content:"\f5d7"}.fa-bong:before{content:"\f55c"}.fa-book:before{content:"\f02d"}.fa-book-dead:before{content:"\f6b7"}.fa-book-medical:before{content:"\f7e6"}.fa-book-open:before{content:"\f518"}.fa-book-reader:before{content:"\f5da"}.fa-bookmark:before{content:"\f02e"}.fa-bootstrap:before{content:"\f836"}.fa-border-all:before{content:"\f84c"}.fa-border-none:before{content:"\f850"}.fa-border-style:before{content:"\f853"}.fa-bowling-ball:before{content:"\f436"}.fa-box:before{content:"\f466"}.fa-box-open:before{content:"\f49e"}.fa-boxes:before{content:"\f468"}.fa-braille:before{content:"\f2a1"}.fa-brain:before{content:"\f5dc"}.fa-bread-slice:before{content:"\f7ec"}.fa-briefcase:before{content:"\f0b1"}.fa-briefcase-medical:before{content:"\f469"}.fa-broadcast-tower:before{content:"\f519"}.fa-broom:before{content:"\f51a"}.fa-brush:before{content:"\f55d"}.fa-btc:before{content:"\f15a"}.fa-buffer:before{content:"\f837"}.fa-bug:before{content:"\f188"}.fa-building:before{content:"\f1ad"}.fa-bullhorn:before{content:"\f0a1"}.fa-bullseye:before{content:"\f140"}.fa-burn:before{content:"\f46a"}.fa-buromobelexperte:before{content:"\f37f"}.fa-bus:before{content:"\f207"}.fa-bus-alt:before{content:"\f55e"}.fa-business-time:before{content:"\f64a"}.fa-buysellads:before{content:"\f20d"}.fa-calculator:before{content:"\f1ec"}.fa-calendar:before{content:"\f133"}.fa-calendar-alt:before{content:"\f073"}.fa-calendar-check:before{content:"\f274"}.fa-calendar-day:before{content:"\f783"}.fa-calendar-minus:before{content:"\f272"}.fa-calendar-plus:before{content:"\f271"}.fa-calendar-times:before{content:"\f273"}.fa-calendar-week:before{content:"\f784"}.fa-camera:before{content:"\f030"}.fa-camera-retro:before{content:"\f083"}.fa-campground:before{content:"\f6bb"}.fa-canadian-maple-leaf:before{content:"\f785"}.fa-candy-cane:before{content:"\f786"}.fa-cannabis:before{content:"\f55f"}.fa-capsules:before{content:"\f46b"}.fa-car:before{content:"\f1b9"}.fa-car-alt:before{content:"\f5de"}.fa-car-battery:before{content:"\f5df"}.fa-car-crash:before{content:"\f5e1"}.fa-car-side:before{content:"\f5e4"}.fa-caret-down:before{content:"\f0d7"}.fa-caret-left:before{content:"\f0d9"}.fa-caret-right:before{content:"\f0da"}.fa-caret-square-down:before{content:"\f150"}.fa-caret-square-left:before{content:"\f191"}.fa-caret-square-right:before{content:"\f152"}.fa-caret-square-up:before{content:"\f151"}.fa-caret-up:before{content:"\f0d8"}.fa-carrot:before{content:"\f787"}.fa-cart-arrow-down:before{content:"\f218"}.fa-cart-plus:before{content:"\f217"}.fa-cash-register:before{content:"\f788"}.fa-cat:before{content:"\f6be"}.fa-cc-amazon-pay:before{content:"\f42d"}.fa-cc-amex:before{content:"\f1f3"}.fa-cc-apple-pay:before{content:"\f416"}.fa-cc-diners-club:before{content:"\f24c"}.fa-cc-discover:before{content:"\f1f2"}.fa-cc-jcb:before{content:"\f24b"}.fa-cc-mastercard:before{content:"\f1f1"}.fa-cc-paypal:before{content:"\f1f4"}.fa-cc-stripe:before{content:"\f1f5"}.fa-cc-visa:before{content:"\f1f0"}.fa-centercode:before{content:"\f380"}.fa-centos:before{content:"\f789"}.fa-certificate:before{content:"\f0a3"}.fa-chair:before{content:"\f6c0"}.fa-chalkboard:before{content:"\f51b"}.fa-chalkboard-teacher:before{content:"\f51c"}.fa-charging-station:before{content:"\f5e7"}.fa-chart-area:before{content:"\f1fe"}.fa-chart-bar:before{content:"\f080"}.fa-chart-line:before{content:"\f201"}.fa-chart-pie:before{content:"\f200"}.fa-check:before{content:"\f00c"}.fa-check-circle:before{content:"\f058"}.fa-check-double:before{content:"\f560"}.fa-check-square:before{content:"\f14a"}.fa-cheese:before{content:"\f7ef"}.fa-chess:before{content:"\f439"}.fa-chess-bishop:before{content:"\f43a"}.fa-chess-board:before{content:"\f43c"}.fa-chess-king:before{content:"\f43f"}.fa-chess-knight:before{content:"\f441"}.fa-chess-pawn:before{content:"\f443"}.fa-chess-queen:before{content:"\f445"}.fa-chess-rook:before{content:"\f447"}.fa-chevron-circle-down:before{content:"\f13a"}.fa-chevron-circle-left:before{content:"\f137"}.fa-chevron-circle-right:before{content:"\f138"}.fa-chevron-circle-up:before{content:"\f139"}.fa-chevron-down:before{content:"\f078"}.fa-chevron-left:before{content:"\f053"}.fa-chevron-right:before{content:"\f054"}.fa-chevron-up:before{content:"\f077"}.fa-child:before{content:"\f1ae"}.fa-chrome:before{content:"\f268"}.fa-chromecast:before{content:"\f838"}.fa-church:before{content:"\f51d"}.fa-circle:before{content:"\f111"}.fa-circle-notch:before{content:"\f1ce"}.fa-city:before{content:"\f64f"}.fa-clinic-medical:before{content:"\f7f2"}.fa-clipboard:before{content:"\f328"}.fa-clipboard-check:before{content:"\f46c"}.fa-clipboard-list:before{content:"\f46d"}.fa-clock:before{content:"\f017"}.fa-clone:before{content:"\f24d"}.fa-closed-captioning:before{content:"\f20a"}.fa-cloud:before{content:"\f0c2"}.fa-cloud-download-alt:before{content:"\f381"}.fa-cloud-meatball:before{content:"\f73b"}.fa-cloud-moon:before{content:"\f6c3"}.fa-cloud-moon-rain:before{content:"\f73c"}.fa-cloud-rain:before{content:"\f73d"}.fa-cloud-showers-heavy:before{content:"\f740"}.fa-cloud-sun:before{content:"\f6c4"}.fa-cloud-sun-rain:before{content:"\f743"}.fa-cloud-upload-alt:before{content:"\f382"}.fa-cloudscale:before{content:"\f383"}.fa-cloudsmith:before{content:"\f384"}.fa-cloudversify:before{content:"\f385"}.fa-cocktail:before{content:"\f561"}.fa-code:before{content:"\f121"}.fa-code-branch:before{content:"\f126"}.fa-codepen:before{content:"\f1cb"}.fa-codiepie:before{content:"\f284"}.fa-coffee:before{content:"\f0f4"}.fa-cog:before{content:"\f013"}.fa-cogs:before{content:"\f085"}.fa-coins:before{content:"\f51e"}.fa-columns:before{content:"\f0db"}.fa-comment:before{content:"\f075"}.fa-comment-alt:before{content:"\f27a"}.fa-comment-dollar:before{content:"\f651"}.fa-comment-dots:before{content:"\f4ad"}.fa-comment-medical:before{content:"\f7f5"}.fa-comment-slash:before{content:"\f4b3"}.fa-comments:before{content:"\f086"}.fa-comments-dollar:before{content:"\f653"}.fa-compact-disc:before{content:"\f51f"}.fa-compass:before{content:"\f14e"}.fa-compress:before{content:"\f066"}.fa-compress-arrows-alt:before{content:"\f78c"}.fa-concierge-bell:before{content:"\f562"}.fa-confluence:before{content:"\f78d"}.fa-connectdevelop:before{content:"\f20e"}.fa-contao:before{content:"\f26d"}.fa-cookie:before{content:"\f563"}.fa-cookie-bite:before{content:"\f564"}.fa-copy:before{content:"\f0c5"}.fa-copyright:before{content:"\f1f9"}.fa-couch:before{content:"\f4b8"}.fa-cpanel:before{content:"\f388"}.fa-creative-commons:before{content:"\f25e"}.fa-creative-commons-by:before{content:"\f4e7"}.fa-creative-commons-nc:before{content:"\f4e8"}.fa-creative-commons-nc-eu:before{content:"\f4e9"}.fa-creative-commons-nc-jp:before{content:"\f4ea"}.fa-creative-commons-nd:before{content:"\f4eb"}.fa-creative-commons-pd:before{content:"\f4ec"}.fa-creative-commons-pd-alt:before{content:"\f4ed"}.fa-creative-commons-remix:before{content:"\f4ee"}.fa-creative-commons-sa:before{content:"\f4ef"}.fa-creative-commons-sampling:before{content:"\f4f0"}.fa-creative-commons-sampling-plus:before{content:"\f4f1"}.fa-creative-commons-share:before{content:"\f4f2"}.fa-creative-commons-zero:before{content:"\f4f3"}.fa-credit-card:before{content:"\f09d"}.fa-critical-role:before{content:"\f6c9"}.fa-crop:before{content:"\f125"}.fa-crop-alt:before{content:"\f565"}.fa-cross:before{content:"\f654"}.fa-crosshairs:before{content:"\f05b"}.fa-crow:before{content:"\f520"}.fa-crown:before{content:"\f521"}.fa-crutch:before{content:"\f7f7"}.fa-css3:before{content:"\f13c"}.fa-css3-alt:before{content:"\f38b"}.fa-cube:before{content:"\f1b2"}.fa-cubes:before{content:"\f1b3"}.fa-cut:before{content:"\f0c4"}.fa-cuttlefish:before{content:"\f38c"}.fa-d-and-d:before{content:"\f38d"}.fa-d-and-d-beyond:before{content:"\f6ca"}.fa-dashcube:before{content:"\f210"}.fa-database:before{content:"\f1c0"}.fa-deaf:before{content:"\f2a4"}.fa-delicious:before{content:"\f1a5"}.fa-democrat:before{content:"\f747"}.fa-deploydog:before{content:"\f38e"}.fa-deskpro:before{content:"\f38f"}.fa-desktop:before{content:"\f108"}.fa-dev:before{content:"\f6cc"}.fa-deviantart:before{content:"\f1bd"}.fa-dharmachakra:before{content:"\f655"}.fa-dhl:before{content:"\f790"}.fa-diagnoses:before{content:"\f470"}.fa-diaspora:before{content:"\f791"}.fa-dice:before{content:"\f522"}.fa-dice-d20:before{content:"\f6cf"}.fa-dice-d6:before{content:"\f6d1"}.fa-dice-five:before{content:"\f523"}.fa-dice-four:before{content:"\f524"}.fa-dice-one:before{content:"\f525"}.fa-dice-six:before{content:"\f526"}.fa-dice-three:before{content:"\f527"}.fa-dice-two:before{content:"\f528"}.fa-digg:before{content:"\f1a6"}.fa-digital-ocean:before{content:"\f391"}.fa-digital-tachograph:before{content:"\f566"}.fa-directions:before{content:"\f5eb"}.fa-discord:before{content:"\f392"}.fa-discourse:before{content:"\f393"}.fa-divide:before{content:"\f529"}.fa-dizzy:before{content:"\f567"}.fa-dna:before{content:"\f471"}.fa-dochub:before{content:"\f394"}.fa-docker:before{content:"\f395"}.fa-dog:before{content:"\f6d3"}.fa-dollar-sign:before{content:"\f155"}.fa-dolly:before{content:"\f472"}.fa-dolly-flatbed:before{content:"\f474"}.fa-donate:before{content:"\f4b9"}.fa-door-closed:before{content:"\f52a"}.fa-door-open:before{content:"\f52b"}.fa-dot-circle:before{content:"\f192"}.fa-dove:before{content:"\f4ba"}.fa-download:before{content:"\f019"}.fa-draft2digital:before{content:"\f396"}.fa-drafting-compass:before{content:"\f568"}.fa-dragon:before{content:"\f6d5"}.fa-draw-polygon:before{content:"\f5ee"}.fa-dribbble:before{content:"\f17d"}.fa-dribbble-square:before{content:"\f397"}.fa-dropbox:before{content:"\f16b"}.fa-drum:before{content:"\f569"}.fa-drum-steelpan:before{content:"\f56a"}.fa-drumstick-bite:before{content:"\f6d7"}.fa-drupal:before{content:"\f1a9"}.fa-dumbbell:before{content:"\f44b"}.fa-dumpster:before{content:"\f793"}.fa-dumpster-fire:before{content:"\f794"}.fa-dungeon:before{content:"\f6d9"}.fa-dyalog:before{content:"\f399"}.fa-earlybirds:before{content:"\f39a"}.fa-ebay:before{content:"\f4f4"}.fa-edge:before{content:"\f282"}.fa-edit:before{content:"\f044"}.fa-egg:before{content:"\f7fb"}.fa-eject:before{content:"\f052"}.fa-elementor:before{content:"\f430"}.fa-ellipsis-h:before{content:"\f141"}.fa-ellipsis-v:before{content:"\f142"}.fa-ello:before{content:"\f5f1"}.fa-ember:before{content:"\f423"}.fa-empire:before{content:"\f1d1"}.fa-envelope:before{content:"\f0e0"}.fa-envelope-open:before{content:"\f2b6"}.fa-envelope-open-text:before{content:"\f658"}.fa-envelope-square:before{content:"\f199"}.fa-envira:before{content:"\f299"}.fa-equals:before{content:"\f52c"}.fa-eraser:before{content:"\f12d"}.fa-erlang:before{content:"\f39d"}.fa-ethereum:before{content:"\f42e"}.fa-ethernet:before{content:"\f796"}.fa-etsy:before{content:"\f2d7"}.fa-euro-sign:before{content:"\f153"}.fa-evernote:before{content:"\f839"}.fa-exchange-alt:before{content:"\f362"}.fa-exclamation:before{content:"\f12a"}.fa-exclamation-circle:before{content:"\f06a"}.fa-exclamation-triangle:before{content:"\f071"}.fa-expand:before{content:"\f065"}.fa-expand-arrows-alt:before{content:"\f31e"}.fa-expeditedssl:before{content:"\f23e"}.fa-external-link-alt:before{content:"\f35d"}.fa-external-link-square-alt:before{content:"\f360"}.fa-eye:before{content:"\f06e"}.fa-eye-dropper:before{content:"\f1fb"}.fa-eye-slash:before{content:"\f070"}.fa-facebook:before{content:"\f09a"}.fa-facebook-f:before{content:"\f39e"}.fa-facebook-messenger:before{content:"\f39f"}.fa-facebook-square:before{content:"\f082"}.fa-fan:before{content:"\f863"}.fa-fantasy-flight-games:before{content:"\f6dc"}.fa-fast-backward:before{content:"\f049"}.fa-fast-forward:before{content:"\f050"}.fa-fax:before{content:"\f1ac"}.fa-feather:before{content:"\f52d"}.fa-feather-alt:before{content:"\f56b"}.fa-fedex:before{content:"\f797"}.fa-fedora:before{content:"\f798"}.fa-female:before{content:"\f182"}.fa-fighter-jet:before{content:"\f0fb"}.fa-figma:before{content:"\f799"}.fa-file:before{content:"\f15b"}.fa-file-alt:before{content:"\f15c"}.fa-file-archive:before{content:"\f1c6"}.fa-file-audio:before{content:"\f1c7"}.fa-file-code:before{content:"\f1c9"}.fa-file-contract:before{content:"\f56c"}.fa-file-csv:before{content:"\f6dd"}.fa-file-download:before{content:"\f56d"}.fa-file-excel:before{content:"\f1c3"}.fa-file-export:before{content:"\f56e"}.fa-file-image:before{content:"\f1c5"}.fa-file-import:before{content:"\f56f"}.fa-file-invoice:before{content:"\f570"}.fa-file-invoice-dollar:before{content:"\f571"}.fa-file-medical:before{content:"\f477"}.fa-file-medical-alt:before{content:"\f478"}.fa-file-pdf:before{content:"\f1c1"}.fa-file-powerpoint:before{content:"\f1c4"}.fa-file-prescription:before{content:"\f572"}.fa-file-signature:before{content:"\f573"}.fa-file-upload:before{content:"\f574"}.fa-file-video:before{content:"\f1c8"}.fa-file-word:before{content:"\f1c2"}.fa-fill:before{content:"\f575"}.fa-fill-drip:before{content:"\f576"}.fa-film:before{content:"\f008"}.fa-filter:before{content:"\f0b0"}.fa-fingerprint:before{content:"\f577"}.fa-fire:before{content:"\f06d"}.fa-fire-alt:before{content:"\f7e4"}.fa-fire-extinguisher:before{content:"\f134"}.fa-firefox:before{content:"\f269"}.fa-first-aid:before{content:"\f479"}.fa-first-order:before{content:"\f2b0"}.fa-first-order-alt:before{content:"\f50a"}.fa-firstdraft:before{content:"\f3a1"}.fa-fish:before{content:"\f578"}.fa-fist-raised:before{content:"\f6de"}.fa-flag:before{content:"\f024"}.fa-flag-checkered:before{content:"\f11e"}.fa-flag-usa:before{content:"\f74d"}.fa-flask:before{content:"\f0c3"}.fa-flickr:before{content:"\f16e"}.fa-flipboard:before{content:"\f44d"}.fa-flushed:before{content:"\f579"}.fa-fly:before{content:"\f417"}.fa-folder:before{content:"\f07b"}.fa-folder-minus:before{content:"\f65d"}.fa-folder-open:before{content:"\f07c"}.fa-folder-plus:before{content:"\f65e"}.fa-font:before{content:"\f031"}.fa-font-awesome:before{content:"\f2b4"}.fa-font-awesome-alt:before{content:"\f35c"}.fa-font-awesome-flag:before{content:"\f425"}.fa-font-awesome-logo-full:before{content:"\f4e6"}.fa-fonticons:before{content:"\f280"}.fa-fonticons-fi:before{content:"\f3a2"}.fa-football-ball:before{content:"\f44e"}.fa-fort-awesome:before{content:"\f286"}.fa-fort-awesome-alt:before{content:"\f3a3"}.fa-forumbee:before{content:"\f211"}.fa-forward:before{content:"\f04e"}.fa-foursquare:before{content:"\f180"}.fa-free-code-camp:before{content:"\f2c5"}.fa-freebsd:before{content:"\f3a4"}.fa-frog:before{content:"\f52e"}.fa-frown:before{content:"\f119"}.fa-frown-open:before{content:"\f57a"}.fa-fulcrum:before{content:"\f50b"}.fa-funnel-dollar:before{content:"\f662"}.fa-futbol:before{content:"\f1e3"}.fa-galactic-republic:before{content:"\f50c"}.fa-galactic-senate:before{content:"\f50d"}.fa-gamepad:before{content:"\f11b"}.fa-gas-pump:before{content:"\f52f"}.fa-gavel:before{content:"\f0e3"}.fa-gem:before{content:"\f3a5"}.fa-genderless:before{content:"\f22d"}.fa-get-pocket:before{content:"\f265"}.fa-gg:before{content:"\f260"}.fa-gg-circle:before{content:"\f261"}.fa-ghost:before{content:"\f6e2"}.fa-gift:before{content:"\f06b"}.fa-gifts:before{content:"\f79c"}.fa-git:before{content:"\f1d3"}.fa-git-alt:before{content:"\f841"}.fa-git-square:before{content:"\f1d2"}.fa-github:before{content:"\f09b"}.fa-github-alt:before{content:"\f113"}.fa-github-square:before{content:"\f092"}.fa-gitkraken:before{content:"\f3a6"}.fa-gitlab:before{content:"\f296"}.fa-gitter:before{content:"\f426"}.fa-glass-cheers:before{content:"\f79f"}.fa-glass-martini:before{content:"\f000"}.fa-glass-martini-alt:before{content:"\f57b"}.fa-glass-whiskey:before{content:"\f7a0"}.fa-glasses:before{content:"\f530"}.fa-glide:before{content:"\f2a5"}.fa-glide-g:before{content:"\f2a6"}.fa-globe:before{content:"\f0ac"}.fa-globe-africa:before{content:"\f57c"}.fa-globe-americas:before{content:"\f57d"}.fa-globe-asia:before{content:"\f57e"}.fa-globe-europe:before{content:"\f7a2"}.fa-gofore:before{content:"\f3a7"}.fa-golf-ball:before{content:"\f450"}.fa-goodreads:before{content:"\f3a8"}.fa-goodreads-g:before{content:"\f3a9"}.fa-google:before{content:"\f1a0"}.fa-google-drive:before{content:"\f3aa"}.fa-google-play:before{content:"\f3ab"}.fa-google-plus:before{content:"\f2b3"}.fa-google-plus-g:before{content:"\f0d5"}.fa-google-plus-square:before{content:"\f0d4"}.fa-google-wallet:before{content:"\f1ee"}.fa-gopuram:before{content:"\f664"}.fa-graduation-cap:before{content:"\f19d"}.fa-gratipay:before{content:"\f184"}.fa-grav:before{content:"\f2d6"}.fa-greater-than:before{content:"\f531"}.fa-greater-than-equal:before{content:"\f532"}.fa-grimace:before{content:"\f57f"}.fa-grin:before{content:"\f580"}.fa-grin-alt:before{content:"\f581"}.fa-grin-beam:before{content:"\f582"}.fa-grin-beam-sweat:before{content:"\f583"}.fa-grin-hearts:before{content:"\f584"}.fa-grin-squint:before{content:"\f585"}.fa-grin-squint-tears:before{content:"\f586"}.fa-grin-stars:before{content:"\f587"}.fa-grin-tears:before{content:"\f588"}.fa-grin-tongue:before{content:"\f589"}.fa-grin-tongue-squint:before{content:"\f58a"}.fa-grin-tongue-wink:before{content:"\f58b"}.fa-grin-wink:before{content:"\f58c"}.fa-grip-horizontal:before{content:"\f58d"}.fa-grip-lines:before{content:"\f7a4"}.fa-grip-lines-vertical:before{content:"\f7a5"}.fa-grip-vertical:before{content:"\f58e"}.fa-gripfire:before{content:"\f3ac"}.fa-grunt:before{content:"\f3ad"}.fa-guitar:before{content:"\f7a6"}.fa-gulp:before{content:"\f3ae"}.fa-h-square:before{content:"\f0fd"}.fa-hacker-news:before{content:"\f1d4"}.fa-hacker-news-square:before{content:"\f3af"}.fa-hackerrank:before{content:"\f5f7"}.fa-hamburger:before{content:"\f805"}.fa-hammer:before{content:"\f6e3"}.fa-hamsa:before{content:"\f665"}.fa-hand-holding:before{content:"\f4bd"}.fa-hand-holding-heart:before{content:"\f4be"}.fa-hand-holding-usd:before{content:"\f4c0"}.fa-hand-lizard:before{content:"\f258"}.fa-hand-middle-finger:before{content:"\f806"}.fa-hand-paper:before{content:"\f256"}.fa-hand-peace:before{content:"\f25b"}.fa-hand-point-down:before{content:"\f0a7"}.fa-hand-point-left:before{content:"\f0a5"}.fa-hand-point-right:before{content:"\f0a4"}.fa-hand-point-up:before{content:"\f0a6"}.fa-hand-pointer:before{content:"\f25a"}.fa-hand-rock:before{content:"\f255"}.fa-hand-scissors:before{content:"\f257"}.fa-hand-spock:before{content:"\f259"}.fa-hands:before{content:"\f4c2"}.fa-hands-helping:before{content:"\f4c4"}.fa-handshake:before{content:"\f2b5"}.fa-hanukiah:before{content:"\f6e6"}.fa-hard-hat:before{content:"\f807"}.fa-hashtag:before{content:"\f292"}.fa-hat-wizard:before{content:"\f6e8"}.fa-haykal:before{content:"\f666"}.fa-hdd:before{content:"\f0a0"}.fa-heading:before{content:"\f1dc"}.fa-headphones:before{content:"\f025"}.fa-headphones-alt:before{content:"\f58f"}.fa-headset:before{content:"\f590"}.fa-heart:before{content:"\f004"}.fa-heart-broken:before{content:"\f7a9"}.fa-heartbeat:before{content:"\f21e"}.fa-helicopter:before{content:"\f533"}.fa-highlighter:before{content:"\f591"}.fa-hiking:before{content:"\f6ec"}.fa-hippo:before{content:"\f6ed"}.fa-hips:before{content:"\f452"}.fa-hire-a-helper:before{content:"\f3b0"}.fa-history:before{content:"\f1da"}.fa-hockey-puck:before{content:"\f453"}.fa-holly-berry:before{content:"\f7aa"}.fa-home:before{content:"\f015"}.fa-hooli:before{content:"\f427"}.fa-hornbill:before{content:"\f592"}.fa-horse:before{content:"\f6f0"}.fa-horse-head:before{content:"\f7ab"}.fa-hospital:before{content:"\f0f8"}.fa-hospital-alt:before{content:"\f47d"}.fa-hospital-symbol:before{content:"\f47e"}.fa-hot-tub:before{content:"\f593"}.fa-hotdog:before{content:"\f80f"}.fa-hotel:before{content:"\f594"}.fa-hotjar:before{content:"\f3b1"}.fa-hourglass:before{content:"\f254"}.fa-hourglass-end:before{content:"\f253"}.fa-hourglass-half:before{content:"\f252"}.fa-hourglass-start:before{content:"\f251"}.fa-house-damage:before{content:"\f6f1"}.fa-houzz:before{content:"\f27c"}.fa-hryvnia:before{content:"\f6f2"}.fa-html5:before{content:"\f13b"}.fa-hubspot:before{content:"\f3b2"}.fa-i-cursor:before{content:"\f246"}.fa-ice-cream:before{content:"\f810"}.fa-icicles:before{content:"\f7ad"}.fa-icons:before{content:"\f86d"}.fa-id-badge:before{content:"\f2c1"}.fa-id-card:before{content:"\f2c2"}.fa-id-card-alt:before{content:"\f47f"}.fa-igloo:before{content:"\f7ae"}.fa-image:before{content:"\f03e"}.fa-images:before{content:"\f302"}.fa-imdb:before{content:"\f2d8"}.fa-inbox:before{content:"\f01c"}.fa-indent:before{content:"\f03c"}.fa-industry:before{content:"\f275"}.fa-infinity:before{content:"\f534"}.fa-info:before{content:"\f129"}.fa-info-circle:before{content:"\f05a"}.fa-instagram:before{content:"\f16d"}.fa-intercom:before{content:"\f7af"}.fa-internet-explorer:before{content:"\f26b"}.fa-invision:before{content:"\f7b0"}.fa-ioxhost:before{content:"\f208"}.fa-italic:before{content:"\f033"}.fa-itch-io:before{content:"\f83a"}.fa-itunes:before{content:"\f3b4"}.fa-itunes-note:before{content:"\f3b5"}.fa-java:before{content:"\f4e4"}.fa-jedi:before{content:"\f669"}.fa-jedi-order:before{content:"\f50e"}.fa-jenkins:before{content:"\f3b6"}.fa-jira:before{content:"\f7b1"}.fa-joget:before{content:"\f3b7"}.fa-joint:before{content:"\f595"}.fa-joomla:before{content:"\f1aa"}.fa-journal-whills:before{content:"\f66a"}.fa-js:before{content:"\f3b8"}.fa-js-square:before{content:"\f3b9"}.fa-jsfiddle:before{content:"\f1cc"}.fa-kaaba:before{content:"\f66b"}.fa-kaggle:before{content:"\f5fa"}.fa-key:before{content:"\f084"}.fa-keybase:before{content:"\f4f5"}.fa-keyboard:before{content:"\f11c"}.fa-keycdn:before{content:"\f3ba"}.fa-khanda:before{content:"\f66d"}.fa-kickstarter:before{content:"\f3bb"}.fa-kickstarter-k:before{content:"\f3bc"}.fa-kiss:before{content:"\f596"}.fa-kiss-beam:before{content:"\f597"}.fa-kiss-wink-heart:before{content:"\f598"}.fa-kiwi-bird:before{content:"\f535"}.fa-korvue:before{content:"\f42f"}.fa-landmark:before{content:"\f66f"}.fa-language:before{content:"\f1ab"}.fa-laptop:before{content:"\f109"}.fa-laptop-code:before{content:"\f5fc"}.fa-laptop-medical:before{content:"\f812"}.fa-laravel:before{content:"\f3bd"}.fa-lastfm:before{content:"\f202"}.fa-lastfm-square:before{content:"\f203"}.fa-laugh:before{content:"\f599"}.fa-laugh-beam:before{content:"\f59a"}.fa-laugh-squint:before{content:"\f59b"}.fa-laugh-wink:before{content:"\f59c"}.fa-layer-group:before{content:"\f5fd"}.fa-leaf:before{content:"\f06c"}.fa-leanpub:before{content:"\f212"}.fa-lemon:before{content:"\f094"}.fa-less:before{content:"\f41d"}.fa-less-than:before{content:"\f536"}.fa-less-than-equal:before{content:"\f537"}.fa-level-down-alt:before{content:"\f3be"}.fa-level-up-alt:before{content:"\f3bf"}.fa-life-ring:before{content:"\f1cd"}.fa-lightbulb:before{content:"\f0eb"}.fa-line:before{content:"\f3c0"}.fa-link:before{content:"\f0c1"}.fa-linkedin:before{content:"\f08c"}.fa-linkedin-in:before{content:"\f0e1"}.fa-linode:before{content:"\f2b8"}.fa-linux:before{content:"\f17c"}.fa-lira-sign:before{content:"\f195"}.fa-list:before{content:"\f03a"}.fa-list-alt:before{content:"\f022"}.fa-list-ol:before{content:"\f0cb"}.fa-list-ul:before{content:"\f0ca"}.fa-location-arrow:before{content:"\f124"}.fa-lock:before{content:"\f023"}.fa-lock-open:before{content:"\f3c1"}.fa-long-arrow-alt-down:before{content:"\f309"}.fa-long-arrow-alt-left:before{content:"\f30a"}.fa-long-arrow-alt-right:before{content:"\f30b"}.fa-long-arrow-alt-up:before{content:"\f30c"}.fa-low-vision:before{content:"\f2a8"}.fa-luggage-cart:before{content:"\f59d"}.fa-lyft:before{content:"\f3c3"}.fa-magento:before{content:"\f3c4"}.fa-magic:before{content:"\f0d0"}.fa-magnet:before{content:"\f076"}.fa-mail-bulk:before{content:"\f674"}.fa-mailchimp:before{content:"\f59e"}.fa-male:before{content:"\f183"}.fa-mandalorian:before{content:"\f50f"}.fa-map:before{content:"\f279"}.fa-map-marked:before{content:"\f59f"}.fa-map-marked-alt:before{content:"\f5a0"}.fa-map-marker:before{content:"\f041"}.fa-map-marker-alt:before{content:"\f3c5"}.fa-map-pin:before{content:"\f276"}.fa-map-signs:before{content:"\f277"}.fa-markdown:before{content:"\f60f"}.fa-marker:before{content:"\f5a1"}.fa-mars:before{content:"\f222"}.fa-mars-double:before{content:"\f227"}.fa-mars-stroke:before{content:"\f229"}.fa-mars-stroke-h:before{content:"\f22b"}.fa-mars-stroke-v:before{content:"\f22a"}.fa-mask:before{content:"\f6fa"}.fa-mastodon:before{content:"\f4f6"}.fa-maxcdn:before{content:"\f136"}.fa-medal:before{content:"\f5a2"}.fa-medapps:before{content:"\f3c6"}.fa-medium:before{content:"\f23a"}.fa-medium-m:before{content:"\f3c7"}.fa-medkit:before{content:"\f0fa"}.fa-medrt:before{content:"\f3c8"}.fa-meetup:before{content:"\f2e0"}.fa-megaport:before{content:"\f5a3"}.fa-meh:before{content:"\f11a"}.fa-meh-blank:before{content:"\f5a4"}.fa-meh-rolling-eyes:before{content:"\f5a5"}.fa-memory:before{content:"\f538"}.fa-mendeley:before{content:"\f7b3"}.fa-menorah:before{content:"\f676"}.fa-mercury:before{content:"\f223"}.fa-meteor:before{content:"\f753"}.fa-microchip:before{content:"\f2db"}.fa-microphone:before{content:"\f130"}.fa-microphone-alt:before{content:"\f3c9"}.fa-microphone-alt-slash:before{content:"\f539"}.fa-microphone-slash:before{content:"\f131"}.fa-microscope:before{content:"\f610"}.fa-microsoft:before{content:"\f3ca"}.fa-minus:before{content:"\f068"}.fa-minus-circle:before{content:"\f056"}.fa-minus-square:before{content:"\f146"}.fa-mitten:before{content:"\f7b5"}.fa-mix:before{content:"\f3cb"}.fa-mixcloud:before{content:"\f289"}.fa-mizuni:before{content:"\f3cc"}.fa-mobile:before{content:"\f10b"}.fa-mobile-alt:before{content:"\f3cd"}.fa-modx:before{content:"\f285"}.fa-monero:before{content:"\f3d0"}.fa-money-bill:before{content:"\f0d6"}.fa-money-bill-alt:before{content:"\f3d1"}.fa-money-bill-wave:before{content:"\f53a"}.fa-money-bill-wave-alt:before{content:"\f53b"}.fa-money-check:before{content:"\f53c"}.fa-money-check-alt:before{content:"\f53d"}.fa-monument:before{content:"\f5a6"}.fa-moon:before{content:"\f186"}.fa-mortar-pestle:before{content:"\f5a7"}.fa-mosque:before{content:"\f678"}.fa-motorcycle:before{content:"\f21c"}.fa-mountain:before{content:"\f6fc"}.fa-mouse-pointer:before{content:"\f245"}.fa-mug-hot:before{content:"\f7b6"}.fa-music:before{content:"\f001"}.fa-napster:before{content:"\f3d2"}.fa-neos:before{content:"\f612"}.fa-network-wired:before{content:"\f6ff"}.fa-neuter:before{content:"\f22c"}.fa-newspaper:before{content:"\f1ea"}.fa-nimblr:before{content:"\f5a8"}.fa-node:before{content:"\f419"}.fa-node-js:before{content:"\f3d3"}.fa-not-equal:before{content:"\f53e"}.fa-notes-medical:before{content:"\f481"}.fa-npm:before{content:"\f3d4"}.fa-ns8:before{content:"\f3d5"}.fa-nutritionix:before{content:"\f3d6"}.fa-object-group:before{content:"\f247"}.fa-object-ungroup:before{content:"\f248"}.fa-odnoklassniki:before{content:"\f263"}.fa-odnoklassniki-square:before{content:"\f264"}.fa-oil-can:before{content:"\f613"}.fa-old-republic:before{content:"\f510"}.fa-om:before{content:"\f679"}.fa-opencart:before{content:"\f23d"}.fa-openid:before{content:"\f19b"}.fa-opera:before{content:"\f26a"}.fa-optin-monster:before{content:"\f23c"}.fa-osi:before{content:"\f41a"}.fa-otter:before{content:"\f700"}.fa-outdent:before{content:"\f03b"}.fa-page4:before{content:"\f3d7"}.fa-pagelines:before{content:"\f18c"}.fa-pager:before{content:"\f815"}.fa-paint-brush:before{content:"\f1fc"}.fa-paint-roller:before{content:"\f5aa"}.fa-palette:before{content:"\f53f"}.fa-palfed:before{content:"\f3d8"}.fa-pallet:before{content:"\f482"}.fa-paper-plane:before{content:"\f1d8"}.fa-paperclip:before{content:"\f0c6"}.fa-parachute-box:before{content:"\f4cd"}.fa-paragraph:before{content:"\f1dd"}.fa-parking:before{content:"\f540"}.fa-passport:before{content:"\f5ab"}.fa-pastafarianism:before{content:"\f67b"}.fa-paste:before{content:"\f0ea"}.fa-patreon:before{content:"\f3d9"}.fa-pause:before{content:"\f04c"}.fa-pause-circle:before{content:"\f28b"}.fa-paw:before{content:"\f1b0"}.fa-paypal:before{content:"\f1ed"}.fa-peace:before{content:"\f67c"}.fa-pen:before{content:"\f304"}.fa-pen-alt:before{content:"\f305"}.fa-pen-fancy:before{content:"\f5ac"}.fa-pen-nib:before{content:"\f5ad"}.fa-pen-square:before{content:"\f14b"}.fa-pencil-alt:before{content:"\f303"}.fa-pencil-ruler:before{content:"\f5ae"}.fa-penny-arcade:before{content:"\f704"}.fa-people-carry:before{content:"\f4ce"}.fa-pepper-hot:before{content:"\f816"}.fa-percent:before{content:"\f295"}.fa-percentage:before{content:"\f541"}.fa-periscope:before{content:"\f3da"}.fa-person-booth:before{content:"\f756"}.fa-phabricator:before{content:"\f3db"}.fa-phoenix-framework:before{content:"\f3dc"}.fa-phoenix-squadron:before{content:"\f511"}.fa-phone:before{content:"\f095"}.fa-phone-alt:before{content:"\f879"}.fa-phone-slash:before{content:"\f3dd"}.fa-phone-square:before{content:"\f098"}.fa-phone-square-alt:before{content:"\f87b"}.fa-phone-volume:before{content:"\f2a0"}.fa-photo-video:before{content:"\f87c"}.fa-php:before{content:"\f457"}.fa-pied-piper:before{content:"\f2ae"}.fa-pied-piper-alt:before{content:"\f1a8"}.fa-pied-piper-hat:before{content:"\f4e5"}.fa-pied-piper-pp:before{content:"\f1a7"}.fa-piggy-bank:before{content:"\f4d3"}.fa-pills:before{content:"\f484"}.fa-pinterest:before{content:"\f0d2"}.fa-pinterest-p:before{content:"\f231"}.fa-pinterest-square:before{content:"\f0d3"}.fa-pizza-slice:before{content:"\f818"}.fa-place-of-worship:before{content:"\f67f"}.fa-plane:before{content:"\f072"}.fa-plane-arrival:before{content:"\f5af"}.fa-plane-departure:before{content:"\f5b0"}.fa-play:before{content:"\f04b"}.fa-play-circle:before{content:"\f144"}.fa-playstation:before{content:"\f3df"}.fa-plug:before{content:"\f1e6"}.fa-plus:before{content:"\f067"}.fa-plus-circle:before{content:"\f055"}.fa-plus-square:before{content:"\f0fe"}.fa-podcast:before{content:"\f2ce"}.fa-poll:before{content:"\f681"}.fa-poll-h:before{content:"\f682"}.fa-poo:before{content:"\f2fe"}.fa-poo-storm:before{content:"\f75a"}.fa-poop:before{content:"\f619"}.fa-portrait:before{content:"\f3e0"}.fa-pound-sign:before{content:"\f154"}.fa-power-off:before{content:"\f011"}.fa-pray:before{content:"\f683"}.fa-praying-hands:before{content:"\f684"}.fa-prescription:before{content:"\f5b1"}.fa-prescription-bottle:before{content:"\f485"}.fa-prescription-bottle-alt:before{content:"\f486"}.fa-print:before{content:"\f02f"}.fa-procedures:before{content:"\f487"}.fa-product-hunt:before{content:"\f288"}.fa-project-diagram:before{content:"\f542"}.fa-pushed:before{content:"\f3e1"}.fa-puzzle-piece:before{content:"\f12e"}.fa-python:before{content:"\f3e2"}.fa-qq:before{content:"\f1d6"}.fa-qrcode:before{content:"\f029"}.fa-question:before{content:"\f128"}.fa-question-circle:before{content:"\f059"}.fa-quidditch:before{content:"\f458"}.fa-quinscape:before{content:"\f459"}.fa-quora:before{content:"\f2c4"}.fa-quote-left:before{content:"\f10d"}.fa-quote-right:before{content:"\f10e"}.fa-quran:before{content:"\f687"}.fa-r-project:before{content:"\f4f7"}.fa-radiation:before{content:"\f7b9"}.fa-radiation-alt:before{content:"\f7ba"}.fa-rainbow:before{content:"\f75b"}.fa-random:before{content:"\f074"}.fa-raspberry-pi:before{content:"\f7bb"}.fa-ravelry:before{content:"\f2d9"}.fa-react:before{content:"\f41b"}.fa-reacteurope:before{content:"\f75d"}.fa-readme:before{content:"\f4d5"}.fa-rebel:before{content:"\f1d0"}.fa-receipt:before{content:"\f543"}.fa-recycle:before{content:"\f1b8"}.fa-red-river:before{content:"\f3e3"}.fa-reddit:before{content:"\f1a1"}.fa-reddit-alien:before{content:"\f281"}.fa-reddit-square:before{content:"\f1a2"}.fa-redhat:before{content:"\f7bc"}.fa-redo:before{content:"\f01e"}.fa-redo-alt:before{content:"\f2f9"}.fa-registered:before{content:"\f25d"}.fa-remove-format:before{content:"\f87d"}.fa-renren:before{content:"\f18b"}.fa-reply:before{content:"\f3e5"}.fa-reply-all:before{content:"\f122"}.fa-replyd:before{content:"\f3e6"}.fa-republican:before{content:"\f75e"}.fa-researchgate:before{content:"\f4f8"}.fa-resolving:before{content:"\f3e7"}.fa-restroom:before{content:"\f7bd"}.fa-retweet:before{content:"\f079"}.fa-rev:before{content:"\f5b2"}.fa-ribbon:before{content:"\f4d6"}.fa-ring:before{content:"\f70b"}.fa-road:before{content:"\f018"}.fa-robot:before{content:"\f544"}.fa-rocket:before{content:"\f135"}.fa-rocketchat:before{content:"\f3e8"}.fa-rockrms:before{content:"\f3e9"}.fa-route:before{content:"\f4d7"}.fa-rss:before{content:"\f09e"}.fa-rss-square:before{content:"\f143"}.fa-ruble-sign:before{content:"\f158"}.fa-ruler:before{content:"\f545"}.fa-ruler-combined:before{content:"\f546"}.fa-ruler-horizontal:before{content:"\f547"}.fa-ruler-vertical:before{content:"\f548"}.fa-running:before{content:"\f70c"}.fa-rupee-sign:before{content:"\f156"}.fa-sad-cry:before{content:"\f5b3"}.fa-sad-tear:before{content:"\f5b4"}.fa-safari:before{content:"\f267"}.fa-salesforce:before{content:"\f83b"}.fa-sass:before{content:"\f41e"}.fa-satellite:before{content:"\f7bf"}.fa-satellite-dish:before{content:"\f7c0"}.fa-save:before{content:"\f0c7"}.fa-schlix:before{content:"\f3ea"}.fa-school:before{content:"\f549"}.fa-screwdriver:before{content:"\f54a"}.fa-scribd:before{content:"\f28a"}.fa-scroll:before{content:"\f70e"}.fa-sd-card:before{content:"\f7c2"}.fa-search:before{content:"\f002"}.fa-search-dollar:before{content:"\f688"}.fa-search-location:before{content:"\f689"}.fa-search-minus:before{content:"\f010"}.fa-search-plus:before{content:"\f00e"}.fa-searchengin:before{content:"\f3eb"}.fa-seedling:before{content:"\f4d8"}.fa-sellcast:before{content:"\f2da"}.fa-sellsy:before{content:"\f213"}.fa-server:before{content:"\f233"}.fa-servicestack:before{content:"\f3ec"}.fa-shapes:before{content:"\f61f"}.fa-share:before{content:"\f064"}.fa-share-alt:before{content:"\f1e0"}.fa-share-alt-square:before{content:"\f1e1"}.fa-share-square:before{content:"\f14d"}.fa-shekel-sign:before{content:"\f20b"}.fa-shield-alt:before{content:"\f3ed"}.fa-ship:before{content:"\f21a"}.fa-shipping-fast:before{content:"\f48b"}.fa-shirtsinbulk:before{content:"\f214"}.fa-shoe-prints:before{content:"\f54b"}.fa-shopping-bag:before{content:"\f290"}.fa-shopping-basket:before{content:"\f291"}.fa-shopping-cart:before{content:"\f07a"}.fa-shopware:before{content:"\f5b5"}.fa-shower:before{content:"\f2cc"}.fa-shuttle-van:before{content:"\f5b6"}.fa-sign:before{content:"\f4d9"}.fa-sign-in-alt:before{content:"\f2f6"}.fa-sign-language:before{content:"\f2a7"}.fa-sign-out-alt:before{content:"\f2f5"}.fa-signal:before{content:"\f012"}.fa-signature:before{content:"\f5b7"}.fa-sim-card:before{content:"\f7c4"}.fa-simplybuilt:before{content:"\f215"}.fa-sistrix:before{content:"\f3ee"}.fa-sitemap:before{content:"\f0e8"}.fa-sith:before{content:"\f512"}.fa-skating:before{content:"\f7c5"}.fa-sketch:before{content:"\f7c6"}.fa-skiing:before{content:"\f7c9"}.fa-skiing-nordic:before{content:"\f7ca"}.fa-skull:before{content:"\f54c"}.fa-skull-crossbones:before{content:"\f714"}.fa-skyatlas:before{content:"\f216"}.fa-skype:before{content:"\f17e"}.fa-slack:before{content:"\f198"}.fa-slack-hash:before{content:"\f3ef"}.fa-slash:before{content:"\f715"}.fa-sleigh:before{content:"\f7cc"}.fa-sliders-h:before{content:"\f1de"}.fa-slideshare:before{content:"\f1e7"}.fa-smile:before{content:"\f118"}.fa-smile-beam:before{content:"\f5b8"}.fa-smile-wink:before{content:"\f4da"}.fa-smog:before{content:"\f75f"}.fa-smoking:before{content:"\f48d"}.fa-smoking-ban:before{content:"\f54d"}.fa-sms:before{content:"\f7cd"}.fa-snapchat:before{content:"\f2ab"}.fa-snapchat-ghost:before{content:"\f2ac"}.fa-snapchat-square:before{content:"\f2ad"}.fa-snowboarding:before{content:"\f7ce"}.fa-snowflake:before{content:"\f2dc"}.fa-snowman:before{content:"\f7d0"}.fa-snowplow:before{content:"\f7d2"}.fa-socks:before{content:"\f696"}.fa-solar-panel:before{content:"\f5ba"}.fa-sort:before{content:"\f0dc"}.fa-sort-alpha-down:before{content:"\f15d"}.fa-sort-alpha-down-alt:before{content:"\f881"}.fa-sort-alpha-up:before{content:"\f15e"}.fa-sort-alpha-up-alt:before{content:"\f882"}.fa-sort-amount-down:before{content:"\f160"}.fa-sort-amount-down-alt:before{content:"\f884"}.fa-sort-amount-up:before{content:"\f161"}.fa-sort-amount-up-alt:before{content:"\f885"}.fa-sort-down:before{content:"\f0dd"}.fa-sort-numeric-down:before{content:"\f162"}.fa-sort-numeric-down-alt:before{content:"\f886"}.fa-sort-numeric-up:before{content:"\f163"}.fa-sort-numeric-up-alt:before{content:"\f887"}.fa-sort-up:before{content:"\f0de"}.fa-soundcloud:before{content:"\f1be"}.fa-sourcetree:before{content:"\f7d3"}.fa-spa:before{content:"\f5bb"}.fa-space-shuttle:before{content:"\f197"}.fa-speakap:before{content:"\f3f3"}.fa-speaker-deck:before{content:"\f83c"}.fa-spell-check:before{content:"\f891"}.fa-spider:before{content:"\f717"}.fa-spinner:before{content:"\f110"}.fa-splotch:before{content:"\f5bc"}.fa-spotify:before{content:"\f1bc"}.fa-spray-can:before{content:"\f5bd"}.fa-square:before{content:"\f0c8"}.fa-square-full:before{content:"\f45c"}.fa-square-root-alt:before{content:"\f698"}.fa-squarespace:before{content:"\f5be"}.fa-stack-exchange:before{content:"\f18d"}.fa-stack-overflow:before{content:"\f16c"}.fa-stackpath:before{content:"\f842"}.fa-stamp:before{content:"\f5bf"}.fa-star:before{content:"\f005"}.fa-star-and-crescent:before{content:"\f699"}.fa-star-half:before{content:"\f089"}.fa-star-half-alt:before{content:"\f5c0"}.fa-star-of-david:before{content:"\f69a"}.fa-star-of-life:before{content:"\f621"}.fa-staylinked:before{content:"\f3f5"}.fa-steam:before{content:"\f1b6"}.fa-steam-square:before{content:"\f1b7"}.fa-steam-symbol:before{content:"\f3f6"}.fa-step-backward:before{content:"\f048"}.fa-step-forward:before{content:"\f051"}.fa-stethoscope:before{content:"\f0f1"}.fa-sticker-mule:before{content:"\f3f7"}.fa-sticky-note:before{content:"\f249"}.fa-stop:before{content:"\f04d"}.fa-stop-circle:before{content:"\f28d"}.fa-stopwatch:before{content:"\f2f2"}.fa-store:before{content:"\f54e"}.fa-store-alt:before{content:"\f54f"}.fa-strava:before{content:"\f428"}.fa-stream:before{content:"\f550"}.fa-street-view:before{content:"\f21d"}.fa-strikethrough:before{content:"\f0cc"}.fa-stripe:before{content:"\f429"}.fa-stripe-s:before{content:"\f42a"}.fa-stroopwafel:before{content:"\f551"}.fa-studiovinari:before{content:"\f3f8"}.fa-stumbleupon:before{content:"\f1a4"}.fa-stumbleupon-circle:before{content:"\f1a3"}.fa-subscript:before{content:"\f12c"}.fa-subway:before{content:"\f239"}.fa-suitcase:before{content:"\f0f2"}.fa-suitcase-rolling:before{content:"\f5c1"}.fa-sun:before{content:"\f185"}.fa-superpowers:before{content:"\f2dd"}.fa-superscript:before{content:"\f12b"}.fa-supple:before{content:"\f3f9"}.fa-surprise:before{content:"\f5c2"}.fa-suse:before{content:"\f7d6"}.fa-swatchbook:before{content:"\f5c3"}.fa-swimmer:before{content:"\f5c4"}.fa-swimming-pool:before{content:"\f5c5"}.fa-symfony:before{content:"\f83d"}.fa-synagogue:before{content:"\f69b"}.fa-sync:before{content:"\f021"}.fa-sync-alt:before{content:"\f2f1"}.fa-syringe:before{content:"\f48e"}.fa-table:before{content:"\f0ce"}.fa-table-tennis:before{content:"\f45d"}.fa-tablet:before{content:"\f10a"}.fa-tablet-alt:before{content:"\f3fa"}.fa-tablets:before{content:"\f490"}.fa-tachometer-alt:before{content:"\f3fd"}.fa-tag:before{content:"\f02b"}.fa-tags:before{content:"\f02c"}.fa-tape:before{content:"\f4db"}.fa-tasks:before{content:"\f0ae"}.fa-taxi:before{content:"\f1ba"}.fa-teamspeak:before{content:"\f4f9"}.fa-teeth:before{content:"\f62e"}.fa-teeth-open:before{content:"\f62f"}.fa-telegram:before{content:"\f2c6"}.fa-telegram-plane:before{content:"\f3fe"}.fa-temperature-high:before{content:"\f769"}.fa-temperature-low:before{content:"\f76b"}.fa-tencent-weibo:before{content:"\f1d5"}.fa-tenge:before{content:"\f7d7"}.fa-terminal:before{content:"\f120"}.fa-text-height:before{content:"\f034"}.fa-text-width:before{content:"\f035"}.fa-th:before{content:"\f00a"}.fa-th-large:before{content:"\f009"}.fa-th-list:before{content:"\f00b"}.fa-the-red-yeti:before{content:"\f69d"}.fa-theater-masks:before{content:"\f630"}.fa-themeco:before{content:"\f5c6"}.fa-themeisle:before{content:"\f2b2"}.fa-thermometer:before{content:"\f491"}.fa-thermometer-empty:before{content:"\f2cb"}.fa-thermometer-full:before{content:"\f2c7"}.fa-thermometer-half:before{content:"\f2c9"}.fa-thermometer-quarter:before{content:"\f2ca"}.fa-thermometer-three-quarters:before{content:"\f2c8"}.fa-think-peaks:before{content:"\f731"}.fa-thumbs-down:before{content:"\f165"}.fa-thumbs-up:before{content:"\f164"}.fa-thumbtack:before{content:"\f08d"}.fa-ticket-alt:before{content:"\f3ff"}.fa-times:before{content:"\f00d"}.fa-times-circle:before{content:"\f057"}.fa-tint:before{content:"\f043"}.fa-tint-slash:before{content:"\f5c7"}.fa-tired:before{content:"\f5c8"}.fa-toggle-off:before{content:"\f204"}.fa-toggle-on:before{content:"\f205"}.fa-toilet:before{content:"\f7d8"}.fa-toilet-paper:before{content:"\f71e"}.fa-toolbox:before{content:"\f552"}.fa-tools:before{content:"\f7d9"}.fa-tooth:before{content:"\f5c9"}.fa-torah:before{content:"\f6a0"}.fa-torii-gate:before{content:"\f6a1"}.fa-tractor:before{content:"\f722"}.fa-trade-federation:before{content:"\f513"}.fa-trademark:before{content:"\f25c"}.fa-traffic-light:before{content:"\f637"}.fa-train:before{content:"\f238"}.fa-tram:before{content:"\f7da"}.fa-transgender:before{content:"\f224"}.fa-transgender-alt:before{content:"\f225"}.fa-trash:before{content:"\f1f8"}.fa-trash-alt:before{content:"\f2ed"}.fa-trash-restore:before{content:"\f829"}.fa-trash-restore-alt:before{content:"\f82a"}.fa-tree:before{content:"\f1bb"}.fa-trello:before{content:"\f181"}.fa-tripadvisor:before{content:"\f262"}.fa-trophy:before{content:"\f091"}.fa-truck:before{content:"\f0d1"}.fa-truck-loading:before{content:"\f4de"}.fa-truck-monster:before{content:"\f63b"}.fa-truck-moving:before{content:"\f4df"}.fa-truck-pickup:before{content:"\f63c"}.fa-tshirt:before{content:"\f553"}.fa-tty:before{content:"\f1e4"}.fa-tumblr:before{content:"\f173"}.fa-tumblr-square:before{content:"\f174"}.fa-tv:before{content:"\f26c"}.fa-twitch:before{content:"\f1e8"}.fa-twitter:before{content:"\f099"}.fa-twitter-square:before{content:"\f081"}.fa-typo3:before{content:"\f42b"}.fa-uber:before{content:"\f402"}.fa-ubuntu:before{content:"\f7df"}.fa-uikit:before{content:"\f403"}.fa-umbrella:before{content:"\f0e9"}.fa-umbrella-beach:before{content:"\f5ca"}.fa-underline:before{content:"\f0cd"}.fa-undo:before{content:"\f0e2"}.fa-undo-alt:before{content:"\f2ea"}.fa-uniregistry:before{content:"\f404"}.fa-universal-access:before{content:"\f29a"}.fa-university:before{content:"\f19c"}.fa-unlink:before{content:"\f127"}.fa-unlock:before{content:"\f09c"}.fa-unlock-alt:before{content:"\f13e"}.fa-untappd:before{content:"\f405"}.fa-upload:before{content:"\f093"}.fa-ups:before{content:"\f7e0"}.fa-usb:before{content:"\f287"}.fa-user:before{content:"\f007"}.fa-user-alt:before{content:"\f406"}.fa-user-alt-slash:before{content:"\f4fa"}.fa-user-astronaut:before{content:"\f4fb"}.fa-user-check:before{content:"\f4fc"}.fa-user-circle:before{content:"\f2bd"}.fa-user-clock:before{content:"\f4fd"}.fa-user-cog:before{content:"\f4fe"}.fa-user-edit:before{content:"\f4ff"}.fa-user-friends:before{content:"\f500"}.fa-user-graduate:before{content:"\f501"}.fa-user-injured:before{content:"\f728"}.fa-user-lock:before{content:"\f502"}.fa-user-md:before{content:"\f0f0"}.fa-user-minus:before{content:"\f503"}.fa-user-ninja:before{content:"\f504"}.fa-user-nurse:before{content:"\f82f"}.fa-user-plus:before{content:"\f234"}.fa-user-secret:before{content:"\f21b"}.fa-user-shield:before{content:"\f505"}.fa-user-slash:before{content:"\f506"}.fa-user-tag:before{content:"\f507"}.fa-user-tie:before{content:"\f508"}.fa-user-times:before{content:"\f235"}.fa-users:before{content:"\f0c0"}.fa-users-cog:before{content:"\f509"}.fa-usps:before{content:"\f7e1"}.fa-ussunnah:before{content:"\f407"}.fa-utensil-spoon:before{content:"\f2e5"}.fa-utensils:before{content:"\f2e7"}.fa-vaadin:before{content:"\f408"}.fa-vector-square:before{content:"\f5cb"}.fa-venus:before{content:"\f221"}.fa-venus-double:before{content:"\f226"}.fa-venus-mars:before{content:"\f228"}.fa-viacoin:before{content:"\f237"}.fa-viadeo:before{content:"\f2a9"}.fa-viadeo-square:before{content:"\f2aa"}.fa-vial:before{content:"\f492"}.fa-vials:before{content:"\f493"}.fa-viber:before{content:"\f409"}.fa-video:before{content:"\f03d"}.fa-video-slash:before{content:"\f4e2"}.fa-vihara:before{content:"\f6a7"}.fa-vimeo:before{content:"\f40a"}.fa-vimeo-square:before{content:"\f194"}.fa-vimeo-v:before{content:"\f27d"}.fa-vine:before{content:"\f1ca"}.fa-vk:before{content:"\f189"}.fa-vnv:before{content:"\f40b"}.fa-voicemail:before{content:"\f897"}.fa-volleyball-ball:before{content:"\f45f"}.fa-volume-down:before{content:"\f027"}.fa-volume-mute:before{content:"\f6a9"}.fa-volume-off:before{content:"\f026"}.fa-volume-up:before{content:"\f028"}.fa-vote-yea:before{content:"\f772"}.fa-vr-cardboard:before{content:"\f729"}.fa-vuejs:before{content:"\f41f"}.fa-walking:before{content:"\f554"}.fa-wallet:before{content:"\f555"}.fa-warehouse:before{content:"\f494"}.fa-water:before{content:"\f773"}.fa-wave-square:before{content:"\f83e"}.fa-waze:before{content:"\f83f"}.fa-weebly:before{content:"\f5cc"}.fa-weibo:before{content:"\f18a"}.fa-weight:before{content:"\f496"}.fa-weight-hanging:before{content:"\f5cd"}.fa-weixin:before{content:"\f1d7"}.fa-whatsapp:before{content:"\f232"}.fa-whatsapp-square:before{content:"\f40c"}.fa-wheelchair:before{content:"\f193"}.fa-whmcs:before{content:"\f40d"}.fa-wifi:before{content:"\f1eb"}.fa-wikipedia-w:before{content:"\f266"}.fa-wind:before{content:"\f72e"}.fa-window-close:before{content:"\f410"}.fa-window-maximize:before{content:"\f2d0"}.fa-window-minimize:before{content:"\f2d1"}.fa-window-restore:before{content:"\f2d2"}.fa-windows:before{content:"\f17a"}.fa-wine-bottle:before{content:"\f72f"}.fa-wine-glass:before{content:"\f4e3"}.fa-wine-glass-alt:before{content:"\f5ce"}.fa-wix:before{content:"\f5cf"}.fa-wizards-of-the-coast:before{content:"\f730"}.fa-wolf-pack-battalion:before{content:"\f514"}.fa-won-sign:before{content:"\f159"}.fa-wordpress:before{content:"\f19a"}.fa-wordpress-simple:before{content:"\f411"}.fa-wpbeginner:before{content:"\f297"}.fa-wpexplorer:before{content:"\f2de"}.fa-wpforms:before{content:"\f298"}.fa-wpressr:before{content:"\f3e4"}.fa-wrench:before{content:"\f0ad"}.fa-x-ray:before{content:"\f497"}.fa-xbox:before{content:"\f412"}.fa-xing:before{content:"\f168"}.fa-xing-square:before{content:"\f169"}.fa-y-combinator:before{content:"\f23b"}.fa-yahoo:before{content:"\f19e"}.fa-yammer:before{content:"\f840"}.fa-yandex:before{content:"\f413"}.fa-yandex-international:before{content:"\f414"}.fa-yarn:before{content:"\f7e3"}.fa-yelp:before{content:"\f1e9"}.fa-yen-sign:before{content:"\f157"}.fa-yin-yang:before{content:"\f6ad"}.fa-yoast:before{content:"\f2b1"}.fa-youtube:before{content:"\f167"}.fa-youtube-square:before{content:"\f431"}.fa-zhihu:before{content:"\f63f"}.sr-only{border:0;clip:rect(0,0,0,0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.sr-only-focusable:active,.sr-only-focusable:focus{clip:auto;height:auto;margin:0;overflow:visible;position:static;width:auto}@font-face{font-family:"Font Awesome 5 Free";font-style:normal;font-weight:400;font-display:auto;src:url(fa-regular-400.eot);src:url(fa-regular-400.eot?#iefix) format("embedded-opentype"),url(fa-regular-400.woff) format("woff")}.far{font-weight:400}@font-face{font-family:"Font Awesome 5 Free";font-style:normal;font-weight:900;font-display:auto;src:url(fa-solid-900.eot);src:url(fa-solid-900.eot?#iefix) format("embedded-opentype"),url(fa-solid-900.woff) format("woff")}.fa,.far,.fas{font-family:"Font Awesome 5 Free"}.fa,.fas{font-weight:900} \ No newline at end of file diff --git a/html/font-awesome/css/v4-shims.min.css b/html/font-awesome/css/v4-shims.min.css deleted file mode 100644 index 5f3fdc598c822..0000000000000 --- a/html/font-awesome/css/v4-shims.min.css +++ /dev/null @@ -1,5 +0,0 @@ -/*! - * Font Awesome Free 5.9.0 by @fontawesome - https://fontawesome.com - * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) - */ -.fa.fa-glass:before{content:"\f000"}.fa.fa-meetup{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-star-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-star-o:before{content:"\f005"}.fa.fa-close:before,.fa.fa-remove:before{content:"\f00d"}.fa.fa-gear:before{content:"\f013"}.fa.fa-trash-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-trash-o:before{content:"\f2ed"}.fa.fa-file-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-file-o:before{content:"\f15b"}.fa.fa-clock-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-clock-o:before{content:"\f017"}.fa.fa-arrow-circle-o-down{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-arrow-circle-o-down:before{content:"\f358"}.fa.fa-arrow-circle-o-up{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-arrow-circle-o-up:before{content:"\f35b"}.fa.fa-play-circle-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-play-circle-o:before{content:"\f144"}.fa.fa-repeat:before,.fa.fa-rotate-right:before{content:"\f01e"}.fa.fa-refresh:before{content:"\f021"}.fa.fa-list-alt{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-dedent:before{content:"\f03b"}.fa.fa-video-camera:before{content:"\f03d"}.fa.fa-picture-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-picture-o:before{content:"\f03e"}.fa.fa-photo{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-photo:before{content:"\f03e"}.fa.fa-image{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-image:before{content:"\f03e"}.fa.fa-pencil:before{content:"\f303"}.fa.fa-map-marker:before{content:"\f3c5"}.fa.fa-pencil-square-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-pencil-square-o:before{content:"\f044"}.fa.fa-share-square-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-share-square-o:before{content:"\f14d"}.fa.fa-check-square-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-check-square-o:before{content:"\f14a"}.fa.fa-arrows:before{content:"\f0b2"}.fa.fa-times-circle-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-times-circle-o:before{content:"\f057"}.fa.fa-check-circle-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-check-circle-o:before{content:"\f058"}.fa.fa-mail-forward:before{content:"\f064"}.fa.fa-eye,.fa.fa-eye-slash{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-warning:before{content:"\f071"}.fa.fa-calendar:before{content:"\f073"}.fa.fa-arrows-v:before{content:"\f338"}.fa.fa-arrows-h:before{content:"\f337"}.fa.fa-bar-chart{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-bar-chart:before{content:"\f080"}.fa.fa-bar-chart-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-bar-chart-o:before{content:"\f080"}.fa.fa-facebook-square,.fa.fa-twitter-square{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-gears:before{content:"\f085"}.fa.fa-thumbs-o-up{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-thumbs-o-up:before{content:"\f164"}.fa.fa-thumbs-o-down{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-thumbs-o-down:before{content:"\f165"}.fa.fa-heart-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-heart-o:before{content:"\f004"}.fa.fa-sign-out:before{content:"\f2f5"}.fa.fa-linkedin-square{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-linkedin-square:before{content:"\f08c"}.fa.fa-thumb-tack:before{content:"\f08d"}.fa.fa-external-link:before{content:"\f35d"}.fa.fa-sign-in:before{content:"\f2f6"}.fa.fa-github-square{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-lemon-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-lemon-o:before{content:"\f094"}.fa.fa-square-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-square-o:before{content:"\f0c8"}.fa.fa-bookmark-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-bookmark-o:before{content:"\f02e"}.fa.fa-facebook,.fa.fa-twitter{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-facebook:before{content:"\f39e"}.fa.fa-facebook-f{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-facebook-f:before{content:"\f39e"}.fa.fa-github{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-credit-card{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-feed:before{content:"\f09e"}.fa.fa-hdd-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-hdd-o:before{content:"\f0a0"}.fa.fa-hand-o-right{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-hand-o-right:before{content:"\f0a4"}.fa.fa-hand-o-left{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-hand-o-left:before{content:"\f0a5"}.fa.fa-hand-o-up{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-hand-o-up:before{content:"\f0a6"}.fa.fa-hand-o-down{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-hand-o-down:before{content:"\f0a7"}.fa.fa-arrows-alt:before{content:"\f31e"}.fa.fa-group:before{content:"\f0c0"}.fa.fa-chain:before{content:"\f0c1"}.fa.fa-scissors:before{content:"\f0c4"}.fa.fa-files-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-files-o:before{content:"\f0c5"}.fa.fa-floppy-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-floppy-o:before{content:"\f0c7"}.fa.fa-navicon:before,.fa.fa-reorder:before{content:"\f0c9"}.fa.fa-google-plus,.fa.fa-google-plus-square,.fa.fa-pinterest,.fa.fa-pinterest-square{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-google-plus:before{content:"\f0d5"}.fa.fa-money{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-money:before{content:"\f3d1"}.fa.fa-unsorted:before{content:"\f0dc"}.fa.fa-sort-desc:before{content:"\f0dd"}.fa.fa-sort-asc:before{content:"\f0de"}.fa.fa-linkedin{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-linkedin:before{content:"\f0e1"}.fa.fa-rotate-left:before{content:"\f0e2"}.fa.fa-legal:before{content:"\f0e3"}.fa.fa-dashboard:before,.fa.fa-tachometer:before{content:"\f3fd"}.fa.fa-comment-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-comment-o:before{content:"\f075"}.fa.fa-comments-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-comments-o:before{content:"\f086"}.fa.fa-flash:before{content:"\f0e7"}.fa.fa-clipboard,.fa.fa-paste{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-paste:before{content:"\f328"}.fa.fa-lightbulb-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-lightbulb-o:before{content:"\f0eb"}.fa.fa-exchange:before{content:"\f362"}.fa.fa-cloud-download:before{content:"\f381"}.fa.fa-cloud-upload:before{content:"\f382"}.fa.fa-bell-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-bell-o:before{content:"\f0f3"}.fa.fa-cutlery:before{content:"\f2e7"}.fa.fa-file-text-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-file-text-o:before{content:"\f15c"}.fa.fa-building-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-building-o:before{content:"\f1ad"}.fa.fa-hospital-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-hospital-o:before{content:"\f0f8"}.fa.fa-tablet:before{content:"\f3fa"}.fa.fa-mobile-phone:before,.fa.fa-mobile:before{content:"\f3cd"}.fa.fa-circle-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-circle-o:before{content:"\f111"}.fa.fa-mail-reply:before{content:"\f3e5"}.fa.fa-github-alt{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-folder-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-folder-o:before{content:"\f07b"}.fa.fa-folder-open-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-folder-open-o:before{content:"\f07c"}.fa.fa-smile-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-smile-o:before{content:"\f118"}.fa.fa-frown-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-frown-o:before{content:"\f119"}.fa.fa-meh-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-meh-o:before{content:"\f11a"}.fa.fa-keyboard-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-keyboard-o:before{content:"\f11c"}.fa.fa-flag-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-flag-o:before{content:"\f024"}.fa.fa-mail-reply-all:before{content:"\f122"}.fa.fa-star-half-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-star-half-o:before{content:"\f089"}.fa.fa-star-half-empty{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-star-half-empty:before{content:"\f089"}.fa.fa-star-half-full{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-star-half-full:before{content:"\f089"}.fa.fa-code-fork:before{content:"\f126"}.fa.fa-chain-broken:before{content:"\f127"}.fa.fa-shield:before{content:"\f3ed"}.fa.fa-calendar-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-calendar-o:before{content:"\f133"}.fa.fa-css3,.fa.fa-html5,.fa.fa-maxcdn{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-ticket:before{content:"\f3ff"}.fa.fa-minus-square-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-minus-square-o:before{content:"\f146"}.fa.fa-level-up:before{content:"\f3bf"}.fa.fa-level-down:before{content:"\f3be"}.fa.fa-pencil-square:before{content:"\f14b"}.fa.fa-external-link-square:before{content:"\f360"}.fa.fa-compass{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-caret-square-o-down{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-caret-square-o-down:before{content:"\f150"}.fa.fa-toggle-down{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-toggle-down:before{content:"\f150"}.fa.fa-caret-square-o-up{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-caret-square-o-up:before{content:"\f151"}.fa.fa-toggle-up{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-toggle-up:before{content:"\f151"}.fa.fa-caret-square-o-right{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-caret-square-o-right:before{content:"\f152"}.fa.fa-toggle-right{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-toggle-right:before{content:"\f152"}.fa.fa-eur:before,.fa.fa-euro:before{content:"\f153"}.fa.fa-gbp:before{content:"\f154"}.fa.fa-dollar:before,.fa.fa-usd:before{content:"\f155"}.fa.fa-inr:before,.fa.fa-rupee:before{content:"\f156"}.fa.fa-cny:before,.fa.fa-jpy:before,.fa.fa-rmb:before,.fa.fa-yen:before{content:"\f157"}.fa.fa-rouble:before,.fa.fa-rub:before,.fa.fa-ruble:before{content:"\f158"}.fa.fa-krw:before,.fa.fa-won:before{content:"\f159"}.fa.fa-bitcoin,.fa.fa-btc{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-bitcoin:before{content:"\f15a"}.fa.fa-file-text:before{content:"\f15c"}.fa.fa-sort-alpha-asc:before{content:"\f15d"}.fa.fa-sort-alpha-desc:before{content:"\f15e"}.fa.fa-sort-amount-asc:before{content:"\f160"}.fa.fa-sort-amount-desc:before{content:"\f161"}.fa.fa-sort-numeric-asc:before{content:"\f162"}.fa.fa-sort-numeric-desc:before{content:"\f163"}.fa.fa-xing,.fa.fa-xing-square,.fa.fa-youtube,.fa.fa-youtube-play,.fa.fa-youtube-square{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-youtube-play:before{content:"\f167"}.fa.fa-adn,.fa.fa-bitbucket,.fa.fa-bitbucket-square,.fa.fa-dropbox,.fa.fa-flickr,.fa.fa-instagram,.fa.fa-stack-overflow{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-bitbucket-square:before{content:"\f171"}.fa.fa-tumblr,.fa.fa-tumblr-square{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-long-arrow-down:before{content:"\f309"}.fa.fa-long-arrow-up:before{content:"\f30c"}.fa.fa-long-arrow-left:before{content:"\f30a"}.fa.fa-long-arrow-right:before{content:"\f30b"}.fa.fa-android,.fa.fa-apple,.fa.fa-dribbble,.fa.fa-foursquare,.fa.fa-gittip,.fa.fa-gratipay,.fa.fa-linux,.fa.fa-skype,.fa.fa-trello,.fa.fa-windows{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-gittip:before{content:"\f184"}.fa.fa-sun-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-sun-o:before{content:"\f185"}.fa.fa-moon-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-moon-o:before{content:"\f186"}.fa.fa-pagelines,.fa.fa-renren,.fa.fa-stack-exchange,.fa.fa-vk,.fa.fa-weibo{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-arrow-circle-o-right{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-arrow-circle-o-right:before{content:"\f35a"}.fa.fa-arrow-circle-o-left{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-arrow-circle-o-left:before{content:"\f359"}.fa.fa-caret-square-o-left{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-caret-square-o-left:before{content:"\f191"}.fa.fa-toggle-left{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-toggle-left:before{content:"\f191"}.fa.fa-dot-circle-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-dot-circle-o:before{content:"\f192"}.fa.fa-vimeo-square{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-try:before,.fa.fa-turkish-lira:before{content:"\f195"}.fa.fa-plus-square-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-plus-square-o:before{content:"\f0fe"}.fa.fa-openid,.fa.fa-slack,.fa.fa-wordpress{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-bank:before,.fa.fa-institution:before{content:"\f19c"}.fa.fa-mortar-board:before{content:"\f19d"}.fa.fa-delicious,.fa.fa-digg,.fa.fa-drupal,.fa.fa-google,.fa.fa-joomla,.fa.fa-pied-piper-alt,.fa.fa-pied-piper-pp,.fa.fa-reddit,.fa.fa-reddit-square,.fa.fa-stumbleupon,.fa.fa-stumbleupon-circle,.fa.fa-yahoo{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-spoon:before{content:"\f2e5"}.fa.fa-behance,.fa.fa-behance-square,.fa.fa-steam,.fa.fa-steam-square{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-automobile:before{content:"\f1b9"}.fa.fa-cab:before{content:"\f1ba"}.fa.fa-envelope-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-envelope-o:before{content:"\f0e0"}.fa.fa-deviantart,.fa.fa-soundcloud{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-file-pdf-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-file-pdf-o:before{content:"\f1c1"}.fa.fa-file-word-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-file-word-o:before{content:"\f1c2"}.fa.fa-file-excel-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-file-excel-o:before{content:"\f1c3"}.fa.fa-file-powerpoint-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-file-powerpoint-o:before{content:"\f1c4"}.fa.fa-file-image-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-file-image-o:before{content:"\f1c5"}.fa.fa-file-photo-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-file-photo-o:before{content:"\f1c5"}.fa.fa-file-picture-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-file-picture-o:before{content:"\f1c5"}.fa.fa-file-archive-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-file-archive-o:before{content:"\f1c6"}.fa.fa-file-zip-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-file-zip-o:before{content:"\f1c6"}.fa.fa-file-audio-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-file-audio-o:before{content:"\f1c7"}.fa.fa-file-sound-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-file-sound-o:before{content:"\f1c7"}.fa.fa-file-video-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-file-video-o:before{content:"\f1c8"}.fa.fa-file-movie-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-file-movie-o:before{content:"\f1c8"}.fa.fa-file-code-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-file-code-o:before{content:"\f1c9"}.fa.fa-codepen,.fa.fa-jsfiddle,.fa.fa-vine{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-life-bouy,.fa.fa-life-ring{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-life-bouy:before{content:"\f1cd"}.fa.fa-life-buoy{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-life-buoy:before{content:"\f1cd"}.fa.fa-life-saver{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-life-saver:before{content:"\f1cd"}.fa.fa-support{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-support:before{content:"\f1cd"}.fa.fa-circle-o-notch:before{content:"\f1ce"}.fa.fa-ra,.fa.fa-rebel{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-ra:before{content:"\f1d0"}.fa.fa-resistance{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-resistance:before{content:"\f1d0"}.fa.fa-empire,.fa.fa-ge{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-ge:before{content:"\f1d1"}.fa.fa-git,.fa.fa-git-square,.fa.fa-hacker-news,.fa.fa-y-combinator-square{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-y-combinator-square:before{content:"\f1d4"}.fa.fa-yc-square{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-yc-square:before{content:"\f1d4"}.fa.fa-qq,.fa.fa-tencent-weibo,.fa.fa-wechat,.fa.fa-weixin{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-wechat:before{content:"\f1d7"}.fa.fa-send:before{content:"\f1d8"}.fa.fa-paper-plane-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-paper-plane-o:before{content:"\f1d8"}.fa.fa-send-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-send-o:before{content:"\f1d8"}.fa.fa-circle-thin{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-circle-thin:before{content:"\f111"}.fa.fa-header:before{content:"\f1dc"}.fa.fa-sliders:before{content:"\f1de"}.fa.fa-futbol-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-futbol-o:before{content:"\f1e3"}.fa.fa-soccer-ball-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-soccer-ball-o:before{content:"\f1e3"}.fa.fa-slideshare,.fa.fa-twitch,.fa.fa-yelp{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-newspaper-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-newspaper-o:before{content:"\f1ea"}.fa.fa-cc-amex,.fa.fa-cc-discover,.fa.fa-cc-mastercard,.fa.fa-cc-paypal,.fa.fa-cc-stripe,.fa.fa-cc-visa,.fa.fa-google-wallet,.fa.fa-paypal{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-bell-slash-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-bell-slash-o:before{content:"\f1f6"}.fa.fa-trash:before{content:"\f2ed"}.fa.fa-copyright{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-eyedropper:before{content:"\f1fb"}.fa.fa-area-chart:before{content:"\f1fe"}.fa.fa-pie-chart:before{content:"\f200"}.fa.fa-line-chart:before{content:"\f201"}.fa.fa-angellist,.fa.fa-ioxhost,.fa.fa-lastfm,.fa.fa-lastfm-square{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-cc{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-cc:before{content:"\f20a"}.fa.fa-ils:before,.fa.fa-shekel:before,.fa.fa-sheqel:before{content:"\f20b"}.fa.fa-meanpath{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-meanpath:before{content:"\f2b4"}.fa.fa-buysellads,.fa.fa-connectdevelop,.fa.fa-dashcube,.fa.fa-forumbee,.fa.fa-leanpub,.fa.fa-sellsy,.fa.fa-shirtsinbulk,.fa.fa-simplybuilt,.fa.fa-skyatlas{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-diamond{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-diamond:before{content:"\f3a5"}.fa.fa-intersex:before{content:"\f224"}.fa.fa-facebook-official{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-facebook-official:before{content:"\f09a"}.fa.fa-pinterest-p,.fa.fa-whatsapp{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-hotel:before{content:"\f236"}.fa.fa-medium,.fa.fa-viacoin,.fa.fa-y-combinator,.fa.fa-yc{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-yc:before{content:"\f23b"}.fa.fa-expeditedssl,.fa.fa-opencart,.fa.fa-optin-monster{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-battery-4:before,.fa.fa-battery:before{content:"\f240"}.fa.fa-battery-3:before{content:"\f241"}.fa.fa-battery-2:before{content:"\f242"}.fa.fa-battery-1:before{content:"\f243"}.fa.fa-battery-0:before{content:"\f244"}.fa.fa-object-group,.fa.fa-object-ungroup,.fa.fa-sticky-note-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-sticky-note-o:before{content:"\f249"}.fa.fa-cc-diners-club,.fa.fa-cc-jcb{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-clone,.fa.fa-hourglass-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-hourglass-o:before{content:"\f254"}.fa.fa-hourglass-1:before{content:"\f251"}.fa.fa-hourglass-2:before{content:"\f252"}.fa.fa-hourglass-3:before{content:"\f253"}.fa.fa-hand-rock-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-hand-rock-o:before{content:"\f255"}.fa.fa-hand-grab-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-hand-grab-o:before{content:"\f255"}.fa.fa-hand-paper-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-hand-paper-o:before{content:"\f256"}.fa.fa-hand-stop-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-hand-stop-o:before{content:"\f256"}.fa.fa-hand-scissors-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-hand-scissors-o:before{content:"\f257"}.fa.fa-hand-lizard-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-hand-lizard-o:before{content:"\f258"}.fa.fa-hand-spock-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-hand-spock-o:before{content:"\f259"}.fa.fa-hand-pointer-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-hand-pointer-o:before{content:"\f25a"}.fa.fa-hand-peace-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-hand-peace-o:before{content:"\f25b"}.fa.fa-registered{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-chrome,.fa.fa-creative-commons,.fa.fa-firefox,.fa.fa-get-pocket,.fa.fa-gg,.fa.fa-gg-circle,.fa.fa-internet-explorer,.fa.fa-odnoklassniki,.fa.fa-odnoklassniki-square,.fa.fa-opera,.fa.fa-safari,.fa.fa-tripadvisor,.fa.fa-wikipedia-w{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-television:before{content:"\f26c"}.fa.fa-500px,.fa.fa-amazon,.fa.fa-contao{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-calendar-plus-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-calendar-plus-o:before{content:"\f271"}.fa.fa-calendar-minus-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-calendar-minus-o:before{content:"\f272"}.fa.fa-calendar-times-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-calendar-times-o:before{content:"\f273"}.fa.fa-calendar-check-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-calendar-check-o:before{content:"\f274"}.fa.fa-map-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-map-o:before{content:"\f279"}.fa.fa-commenting:before{content:"\f4ad"}.fa.fa-commenting-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-commenting-o:before{content:"\f4ad"}.fa.fa-houzz,.fa.fa-vimeo{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-vimeo:before{content:"\f27d"}.fa.fa-black-tie,.fa.fa-edge,.fa.fa-fonticons,.fa.fa-reddit-alien{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-credit-card-alt:before{content:"\f09d"}.fa.fa-codiepie,.fa.fa-fort-awesome,.fa.fa-mixcloud,.fa.fa-modx,.fa.fa-product-hunt,.fa.fa-scribd,.fa.fa-usb{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-pause-circle-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-pause-circle-o:before{content:"\f28b"}.fa.fa-stop-circle-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-stop-circle-o:before{content:"\f28d"}.fa.fa-bluetooth,.fa.fa-bluetooth-b,.fa.fa-envira,.fa.fa-gitlab,.fa.fa-wheelchair-alt,.fa.fa-wpbeginner,.fa.fa-wpforms{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-wheelchair-alt:before{content:"\f368"}.fa.fa-question-circle-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-question-circle-o:before{content:"\f059"}.fa.fa-volume-control-phone:before{content:"\f2a0"}.fa.fa-asl-interpreting:before{content:"\f2a3"}.fa.fa-deafness:before,.fa.fa-hard-of-hearing:before{content:"\f2a4"}.fa.fa-glide,.fa.fa-glide-g{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-signing:before{content:"\f2a7"}.fa.fa-first-order,.fa.fa-google-plus-official,.fa.fa-pied-piper,.fa.fa-snapchat,.fa.fa-snapchat-ghost,.fa.fa-snapchat-square,.fa.fa-themeisle,.fa.fa-viadeo,.fa.fa-viadeo-square,.fa.fa-yoast{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-google-plus-official:before{content:"\f2b3"}.fa.fa-google-plus-circle{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-google-plus-circle:before{content:"\f2b3"}.fa.fa-fa,.fa.fa-font-awesome{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-fa:before{content:"\f2b4"}.fa.fa-handshake-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-handshake-o:before{content:"\f2b5"}.fa.fa-envelope-open-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-envelope-open-o:before{content:"\f2b6"}.fa.fa-linode{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-address-book-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-address-book-o:before{content:"\f2b9"}.fa.fa-vcard:before{content:"\f2bb"}.fa.fa-address-card-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-address-card-o:before{content:"\f2bb"}.fa.fa-vcard-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-vcard-o:before{content:"\f2bb"}.fa.fa-user-circle-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-user-circle-o:before{content:"\f2bd"}.fa.fa-user-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-user-o:before{content:"\f007"}.fa.fa-id-badge{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-drivers-license:before{content:"\f2c2"}.fa.fa-id-card-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-id-card-o:before{content:"\f2c2"}.fa.fa-drivers-license-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-drivers-license-o:before{content:"\f2c2"}.fa.fa-free-code-camp,.fa.fa-quora,.fa.fa-telegram{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-thermometer-4:before,.fa.fa-thermometer:before{content:"\f2c7"}.fa.fa-thermometer-3:before{content:"\f2c8"}.fa.fa-thermometer-2:before{content:"\f2c9"}.fa.fa-thermometer-1:before{content:"\f2ca"}.fa.fa-thermometer-0:before{content:"\f2cb"}.fa.fa-bathtub:before,.fa.fa-s15:before{content:"\f2cd"}.fa.fa-window-maximize,.fa.fa-window-restore{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-times-rectangle:before{content:"\f410"}.fa.fa-window-close-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-window-close-o:before{content:"\f410"}.fa.fa-times-rectangle-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-times-rectangle-o:before{content:"\f410"}.fa.fa-bandcamp,.fa.fa-eercast,.fa.fa-etsy,.fa.fa-grav,.fa.fa-imdb,.fa.fa-ravelry{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-eercast:before{content:"\f2da"}.fa.fa-snowflake-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-snowflake-o:before{content:"\f2dc"}.fa.fa-spotify,.fa.fa-superpowers,.fa.fa-wpexplorer{font-family:"Font Awesome 5 Brands";font-weight:400} \ No newline at end of file diff --git a/html/font-awesome/webfonts/fa-regular-400.eot b/html/font-awesome/webfonts/fa-regular-400.eot deleted file mode 100644 index d62be2fad885f..0000000000000 Binary files a/html/font-awesome/webfonts/fa-regular-400.eot and /dev/null differ diff --git a/html/font-awesome/webfonts/fa-regular-400.woff b/html/font-awesome/webfonts/fa-regular-400.woff deleted file mode 100644 index 43b1a9ae49db0..0000000000000 Binary files a/html/font-awesome/webfonts/fa-regular-400.woff and /dev/null differ diff --git a/html/font-awesome/webfonts/fa-solid-900.eot b/html/font-awesome/webfonts/fa-solid-900.eot deleted file mode 100644 index c77baa8d46ab4..0000000000000 Binary files a/html/font-awesome/webfonts/fa-solid-900.eot and /dev/null differ diff --git a/html/font-awesome/webfonts/fa-solid-900.woff b/html/font-awesome/webfonts/fa-solid-900.woff deleted file mode 100644 index 77c1786227f53..0000000000000 Binary files a/html/font-awesome/webfonts/fa-solid-900.woff and /dev/null differ diff --git a/html/hard-hat-exclamation.png b/html/hard-hat-exclamation.png deleted file mode 100644 index e22eb61b8feca..0000000000000 Binary files a/html/hard-hat-exclamation.png and /dev/null differ diff --git a/html/image-minus.png b/html/image-minus.png deleted file mode 100644 index b2bac2c45abb9..0000000000000 Binary files a/html/image-minus.png and /dev/null differ diff --git a/html/image-plus.png b/html/image-plus.png deleted file mode 100644 index 308c1ae0a2866..0000000000000 Binary files a/html/image-plus.png and /dev/null differ diff --git a/html/images/FleetLogo.png b/html/images/FleetLogo.png deleted file mode 100644 index a650c1915f0b2..0000000000000 Binary files a/html/images/FleetLogo.png and /dev/null differ diff --git a/html/images/armyLogo.png b/html/images/armyLogo.png deleted file mode 100644 index 46de9c4c731a3..0000000000000 Binary files a/html/images/armyLogo.png and /dev/null differ diff --git a/html/images/bluentlogo.png b/html/images/bluentlogo.png deleted file mode 100644 index d5614a964eef8..0000000000000 Binary files a/html/images/bluentlogo.png and /dev/null differ diff --git a/html/images/daislogo.png b/html/images/daislogo.png deleted file mode 100644 index 96d2d41743528..0000000000000 Binary files a/html/images/daislogo.png and /dev/null differ diff --git a/html/images/eclogo.png b/html/images/eclogo.png deleted file mode 100644 index 2f03c55677a91..0000000000000 Binary files a/html/images/eclogo.png and /dev/null differ diff --git a/html/images/exologo.png b/html/images/exologo.png deleted file mode 100644 index 2deba18347632..0000000000000 Binary files a/html/images/exologo.png and /dev/null differ diff --git a/html/images/loading.gif b/html/images/loading.gif deleted file mode 100644 index 6ec34d41709c2..0000000000000 Binary files a/html/images/loading.gif and /dev/null differ diff --git a/html/images/ntlogo.png b/html/images/ntlogo.png deleted file mode 100644 index 6c03fa8b60a69..0000000000000 Binary files a/html/images/ntlogo.png and /dev/null differ diff --git a/html/images/sfplogo.png b/html/images/sfplogo.png deleted file mode 100644 index 709b5e93448b8..0000000000000 Binary files a/html/images/sfplogo.png and /dev/null differ diff --git a/html/images/sollogo.png b/html/images/sollogo.png deleted file mode 100644 index 58af799ac3107..0000000000000 Binary files a/html/images/sollogo.png and /dev/null differ diff --git a/html/images/talisman.png b/html/images/talisman.png deleted file mode 100644 index 0ece637314a01..0000000000000 Binary files a/html/images/talisman.png and /dev/null differ diff --git a/html/images/terralogo.png b/html/images/terralogo.png deleted file mode 100644 index ff86c0e3ff825..0000000000000 Binary files a/html/images/terralogo.png and /dev/null differ diff --git a/html/images/torchlogo.png b/html/images/torchlogo.png deleted file mode 100644 index 1adba6f68a2dd..0000000000000 Binary files a/html/images/torchlogo.png and /dev/null differ diff --git a/html/images/xynlogo.png b/html/images/xynlogo.png deleted file mode 100644 index e259f6224dea5..0000000000000 Binary files a/html/images/xynlogo.png and /dev/null differ diff --git a/html/lobby_titlescreen.html b/html/lobby_titlescreen.html deleted file mode 100644 index dc92369fe6552..0000000000000 --- a/html/lobby_titlescreen.html +++ /dev/null @@ -1,25 +0,0 @@ - - - - - - - - - - \ No newline at end of file diff --git a/html/map-pencil.png b/html/map-pencil.png deleted file mode 100644 index a3804e18f467c..0000000000000 Binary files a/html/map-pencil.png and /dev/null differ diff --git a/html/music-minus.png b/html/music-minus.png deleted file mode 100644 index 1b9478f43e717..0000000000000 Binary files a/html/music-minus.png and /dev/null differ diff --git a/html/music-plus.png b/html/music-plus.png deleted file mode 100644 index ea7f36c6ba3de..0000000000000 Binary files a/html/music-plus.png and /dev/null differ diff --git a/html/panels.css b/html/panels.css deleted file mode 100644 index 0d1cb0cb9fbee..0000000000000 --- a/html/panels.css +++ /dev/null @@ -1,10 +0,0 @@ -body {padding:0px;margin:0px;} -#top {position:fixed;top:5px;left:10%;width:80%;text-align:center;background-color:#fff;border:2px solid #ccc;} -#main {position:relative;top:50px;left:3%;width:96%;text-align:center;z-index:0;} -#searchable {table-layout:fixed;width:100%;text-align:center;"#f4f4f4";} -tr.norm {background-color:#f4f4f4;} -tr.title {background-color:#ccc;} -tr.alt {background-color:#e7e7e7;} -.small {font-size:80%;} -a {text-decoration:none;color:#a0a;} -a:hover {color:#d3d;} diff --git a/html/scales.png b/html/scales.png deleted file mode 100644 index bb28dc9b595cd..0000000000000 Binary files a/html/scales.png and /dev/null differ diff --git a/html/search.js b/html/search.js deleted file mode 100644 index abc47a975731f..0000000000000 --- a/html/search.js +++ /dev/null @@ -1,33 +0,0 @@ -function selectTextField(){ - var filter_text = document.getElementById('filter'); - filter_text.focus(); - filter_text.select(); -} -function updateSearch(){ - var input_form = document.getElementById('filter'); - var filter = input_form.value.toLowerCase(); - input_form.value = filter; - var table = document.getElementById('searchable'); - var alt_style = 'norm'; - for(var i = 0; i < table.rows.length; i++){ - try{ - var row = table.rows[i]; - if(row.className == 'title') continue; - var found=0; - for(var j = 0; j < row.cells.length; j++){ - var cell = row.cells[j]; - if(cell.innerText.toLowerCase().indexOf(filter) != -1){ - found=1; - break; - } - } - if(found == 0) row.style.display='none'; - else{ - row.style.display='block'; - row.className = alt_style; - if(alt_style == 'alt') alt_style = 'norm'; - else alt_style = 'alt'; - } - }catch(err) { } - } -} \ No newline at end of file diff --git a/html/spacemag.css b/html/spacemag.css deleted file mode 100644 index 4c8672896b957..0000000000000 --- a/html/spacemag.css +++ /dev/null @@ -1,15 +0,0 @@ -.heading{ - padding-top: 32px; -} - -.author{ - padding-bottom:16px; - font-style: italic; -} - -.cover{ - margin:auto; - display:block; - height:600px; - padding-bottom:32px; -} diff --git a/html/spell-check.png b/html/spell-check.png deleted file mode 100644 index 70b066d12aeda..0000000000000 Binary files a/html/spell-check.png and /dev/null differ diff --git a/html/templates/footer.html b/html/templates/footer.html deleted file mode 100644 index c26f94bdbf03c..0000000000000 --- a/html/templates/footer.html +++ /dev/null @@ -1,13 +0,0 @@ - - -GoonStation 13 Development Team -
                  - Coders: Stuntwaffle, Showtime, Pantaloons, Nannek, Keelin, Exadv1, hobnob, Justicefries, 0staf, sniperchance, AngriestIBM, BrianOBlivion
                  - Spriters: Supernorn, Haruhi, Stuntwaffle, Pantaloons, Rho, SynthOrange, I Said No
                  -
                  -
                  -

                  Creative Commons License
                  Except where otherwise noted, Goon Station 13 is licensed under a Creative Commons Attribution-Noncommercial-Share Alike 3.0 License.
                  Rights are currently extended to SomethingAwful Goons only.

                  -

                  Some icons by Yusuke Kamiyamane. All rights reserved. Licensed under a Creative Commons Attribution 3.0 License.

                  -
              - - diff --git a/html/templates/header.html b/html/templates/header.html deleted file mode 100644 index c57dc7a5cecbf..0000000000000 --- a/html/templates/header.html +++ /dev/null @@ -1,58 +0,0 @@ - - - - Baystation 12 Changelog - - - - - - - -
              - - - - -
              -
              Baystation 12
              -
              A Space Station 13 Project
              - -

              - Code licensed under AGPLv3. Content licensed under CC BY-SA 3.0.

              - Visit our IRC channels: #bs12 and #codershuttle on irc.sorcery.net
              - Join our Discord server: -Click Here-
              - Support Baystation on Patreon: -Click Here-
              -
              - -
              Baystation 12 Credit List - - - - -
              - Developers: afterthought, chinsky, F-Tang Steve, mloc, PsiOmegaDelta, xales
              - Currently Active GitHub contributor list: -Click Here-
              -

              Credits: Abi79, Apple_Master, Arcalane, Aryn, babydoll, Cael_Aislinn, Ccomp5950, chinsky, CompactNinja, Deus Dactyl, DopeGhoti, Erthilo, Flashkirby, Hawk_v3, Head, Ipsil, Invisty, JoeyJo0, Lexusjjss, Melonstorm, Miniature, mloc, NerdyBoy1104, PsiOmegaDelta, Searif, SkyMarshal, Snapshot, Spectre, Strumpetplaya, Sunfall, Tastyfish, Uristqwerty, Xenone, cib, faux, Zuhayr

              - Special thanks to: The developers of /tg/station, /vg/station, GoonStation, the original Space Station 13, and BYOND -

              Have a bug to report?
              Visit our Issue Tracker.
              -
              - - -
              diff --git a/html/tick-circle.png b/html/tick-circle.png deleted file mode 100644 index bcc4dc24b2037..0000000000000 Binary files a/html/tick-circle.png and /dev/null differ diff --git a/html/wrench-screwdriver.png b/html/wrench-screwdriver.png deleted file mode 100644 index 1a59de688d55b..0000000000000 Binary files a/html/wrench-screwdriver.png and /dev/null differ diff --git a/icons/480x480.dmi b/icons/480x480.dmi deleted file mode 100644 index 60a2bf74cf5b6..0000000000000 Binary files a/icons/480x480.dmi and /dev/null differ diff --git a/icons/48x48/walls48.dmi b/icons/48x48/walls48.dmi deleted file mode 100644 index 7e3dbe8bf6773..0000000000000 Binary files a/icons/48x48/walls48.dmi and /dev/null differ diff --git a/icons/PSD files/asteroiddustoverlay.psd b/icons/PSD files/asteroiddustoverlay.psd deleted file mode 100644 index a8e8f572b3878..0000000000000 Binary files a/icons/PSD files/asteroiddustoverlay.psd and /dev/null differ diff --git a/icons/PSD files/door.psd b/icons/PSD files/door.psd deleted file mode 100644 index 44a22a8b9e005..0000000000000 Binary files a/icons/PSD files/door.psd and /dev/null differ diff --git a/icons/Testing/Zone.dmi b/icons/Testing/Zone.dmi deleted file mode 100644 index 1d8ab8516693c..0000000000000 Binary files a/icons/Testing/Zone.dmi and /dev/null differ diff --git a/icons/Testing/air_meter.dmi b/icons/Testing/air_meter.dmi deleted file mode 100644 index 56d1ff18a59fe..0000000000000 Binary files a/icons/Testing/air_meter.dmi and /dev/null differ diff --git a/icons/Testing/atmos_testing.dmi b/icons/Testing/atmos_testing.dmi deleted file mode 100644 index 142bd4cbb1a4e..0000000000000 Binary files a/icons/Testing/atmos_testing.dmi and /dev/null differ diff --git a/icons/Testing/turf_analysis.dmi b/icons/Testing/turf_analysis.dmi deleted file mode 100644 index e3aac1ebd05b8..0000000000000 Binary files a/icons/Testing/turf_analysis.dmi and /dev/null differ diff --git a/icons/VendingMachineBG.png b/icons/VendingMachineBG.png deleted file mode 100644 index 5d7f010d1d789..0000000000000 Binary files a/icons/VendingMachineBG.png and /dev/null differ diff --git a/icons/atmos/clamp.dmi b/icons/atmos/clamp.dmi deleted file mode 100644 index 95a9c40662009..0000000000000 Binary files a/icons/atmos/clamp.dmi and /dev/null differ diff --git a/icons/atmos/connector.dmi b/icons/atmos/connector.dmi deleted file mode 100644 index cf4ea7a3c84ee..0000000000000 Binary files a/icons/atmos/connector.dmi and /dev/null differ diff --git a/icons/atmos/digital_tvalve.dmi b/icons/atmos/digital_tvalve.dmi deleted file mode 100644 index b34d2903b5cff..0000000000000 Binary files a/icons/atmos/digital_tvalve.dmi and /dev/null differ diff --git a/icons/atmos/digital_valve.dmi b/icons/atmos/digital_valve.dmi deleted file mode 100644 index b1adc8b65192d..0000000000000 Binary files a/icons/atmos/digital_valve.dmi and /dev/null differ diff --git a/icons/atmos/filter.dmi b/icons/atmos/filter.dmi deleted file mode 100644 index 8b5cd81c70776..0000000000000 Binary files a/icons/atmos/filter.dmi and /dev/null differ diff --git a/icons/atmos/heat.dmi b/icons/atmos/heat.dmi deleted file mode 100644 index 1014c2015b053..0000000000000 Binary files a/icons/atmos/heat.dmi and /dev/null differ diff --git a/icons/atmos/injector.dmi b/icons/atmos/injector.dmi deleted file mode 100644 index 03a60d2e5d1b5..0000000000000 Binary files a/icons/atmos/injector.dmi and /dev/null differ diff --git a/icons/atmos/junction.dmi b/icons/atmos/junction.dmi deleted file mode 100644 index 892f5823f2e51..0000000000000 Binary files a/icons/atmos/junction.dmi and /dev/null differ diff --git a/icons/atmos/manifold.dmi b/icons/atmos/manifold.dmi deleted file mode 100644 index b7c5d0a2f1401..0000000000000 Binary files a/icons/atmos/manifold.dmi and /dev/null differ diff --git a/icons/atmos/mixer.dmi b/icons/atmos/mixer.dmi deleted file mode 100644 index 0fcb92820f465..0000000000000 Binary files a/icons/atmos/mixer.dmi and /dev/null differ diff --git a/icons/atmos/omni_devices.dmi b/icons/atmos/omni_devices.dmi deleted file mode 100644 index 494ea7e24d49f..0000000000000 Binary files a/icons/atmos/omni_devices.dmi and /dev/null differ diff --git a/icons/atmos/oxyregenerator.dmi b/icons/atmos/oxyregenerator.dmi deleted file mode 100644 index f40b94096e106..0000000000000 Binary files a/icons/atmos/oxyregenerator.dmi and /dev/null differ diff --git a/icons/atmos/passive_gate.dmi b/icons/atmos/passive_gate.dmi deleted file mode 100644 index ff1b7a5a52468..0000000000000 Binary files a/icons/atmos/passive_gate.dmi and /dev/null differ diff --git a/icons/atmos/pipe-sparker.dmi b/icons/atmos/pipe-sparker.dmi deleted file mode 100644 index a0acc909ee4ae..0000000000000 Binary files a/icons/atmos/pipe-sparker.dmi and /dev/null differ diff --git a/icons/atmos/pipe_underlays.dmi b/icons/atmos/pipe_underlays.dmi deleted file mode 100644 index f6f38a9a7d7a7..0000000000000 Binary files a/icons/atmos/pipe_underlays.dmi and /dev/null differ diff --git a/icons/atmos/pipes.dmi b/icons/atmos/pipes.dmi deleted file mode 100644 index 5b3e84bf90ffd..0000000000000 Binary files a/icons/atmos/pipes.dmi and /dev/null differ diff --git a/icons/atmos/pump.dmi b/icons/atmos/pump.dmi deleted file mode 100644 index a1e2d43ca2de9..0000000000000 Binary files a/icons/atmos/pump.dmi and /dev/null differ diff --git a/icons/atmos/tank.dmi b/icons/atmos/tank.dmi deleted file mode 100644 index c36c231a14e67..0000000000000 Binary files a/icons/atmos/tank.dmi and /dev/null differ diff --git a/icons/atmos/tvalve.dmi b/icons/atmos/tvalve.dmi deleted file mode 100644 index 197862b32a0ab..0000000000000 Binary files a/icons/atmos/tvalve.dmi and /dev/null differ diff --git a/icons/atmos/valve.dmi b/icons/atmos/valve.dmi deleted file mode 100644 index 04351917b6541..0000000000000 Binary files a/icons/atmos/valve.dmi and /dev/null differ diff --git a/icons/atmos/vent_pump.dmi b/icons/atmos/vent_pump.dmi deleted file mode 100644 index 70243d322cdf0..0000000000000 Binary files a/icons/atmos/vent_pump.dmi and /dev/null differ diff --git a/icons/atmos/vent_scrubber.dmi b/icons/atmos/vent_scrubber.dmi deleted file mode 100644 index 65894e4dc1002..0000000000000 Binary files a/icons/atmos/vent_scrubber.dmi and /dev/null differ diff --git a/icons/atmos/volume_pump.dmi b/icons/atmos/volume_pump.dmi deleted file mode 100644 index 9114b6ac31d9a..0000000000000 Binary files a/icons/atmos/volume_pump.dmi and /dev/null differ diff --git a/icons/chattags.dmi b/icons/chattags.dmi deleted file mode 100644 index 5cfdcd689dbbc..0000000000000 Binary files a/icons/chattags.dmi and /dev/null differ diff --git a/icons/covershield.dmi b/icons/covershield.dmi deleted file mode 100644 index b3d8b21e8ddf6..0000000000000 Binary files a/icons/covershield.dmi and /dev/null differ diff --git a/icons/default_lobby.png b/icons/default_lobby.png deleted file mode 100644 index d13ebcf6f6335..0000000000000 Binary files a/icons/default_lobby.png and /dev/null differ diff --git a/icons/dispensebutton_bg.png b/icons/dispensebutton_bg.png deleted file mode 100644 index 195c02114eac2..0000000000000 Binary files a/icons/dispensebutton_bg.png and /dev/null differ diff --git a/icons/effects/128x48.dmi b/icons/effects/128x48.dmi deleted file mode 100644 index 71038ffdbf893..0000000000000 Binary files a/icons/effects/128x48.dmi and /dev/null differ diff --git a/icons/effects/160x160.dmi b/icons/effects/160x160.dmi deleted file mode 100644 index 15b36ba2fc49e..0000000000000 Binary files a/icons/effects/160x160.dmi and /dev/null differ diff --git a/icons/effects/224x224.dmi b/icons/effects/224x224.dmi deleted file mode 100644 index e7d41bcd5ee0c..0000000000000 Binary files a/icons/effects/224x224.dmi and /dev/null differ diff --git a/icons/effects/288x288.dmi b/icons/effects/288x288.dmi deleted file mode 100644 index 6184d3d594949..0000000000000 Binary files a/icons/effects/288x288.dmi and /dev/null differ diff --git a/icons/effects/352x352.dmi b/icons/effects/352x352.dmi deleted file mode 100644 index 3afd87d343f9d..0000000000000 Binary files a/icons/effects/352x352.dmi and /dev/null differ diff --git a/icons/effects/416x416.dmi b/icons/effects/416x416.dmi deleted file mode 100644 index 93f4ba7d52149..0000000000000 Binary files a/icons/effects/416x416.dmi and /dev/null differ diff --git a/icons/effects/64x64.dmi b/icons/effects/64x64.dmi deleted file mode 100644 index 6bef70b30d2d9..0000000000000 Binary files a/icons/effects/64x64.dmi and /dev/null differ diff --git a/icons/effects/96x96.dmi b/icons/effects/96x96.dmi deleted file mode 100644 index eb5c4ac816f35..0000000000000 Binary files a/icons/effects/96x96.dmi and /dev/null differ diff --git a/icons/effects/Targeted.dmi b/icons/effects/Targeted.dmi deleted file mode 100644 index 6d61505e6c5af..0000000000000 Binary files a/icons/effects/Targeted.dmi and /dev/null differ diff --git a/icons/effects/ULIcons.dmi b/icons/effects/ULIcons.dmi deleted file mode 100644 index 3104e6ea66885..0000000000000 Binary files a/icons/effects/ULIcons.dmi and /dev/null differ diff --git a/icons/effects/alert.dmi b/icons/effects/alert.dmi deleted file mode 100644 index 51b81750334fe..0000000000000 Binary files a/icons/effects/alert.dmi and /dev/null differ diff --git a/icons/effects/alphacolors.dmi b/icons/effects/alphacolors.dmi deleted file mode 100644 index 02316fbf64de1..0000000000000 Binary files a/icons/effects/alphacolors.dmi and /dev/null differ diff --git a/icons/effects/beam.dmi b/icons/effects/beam.dmi deleted file mode 100644 index 264205694a822..0000000000000 Binary files a/icons/effects/beam.dmi and /dev/null differ diff --git a/icons/effects/blood.dmi b/icons/effects/blood.dmi deleted file mode 100644 index 5973d96c96b08..0000000000000 Binary files a/icons/effects/blood.dmi and /dev/null differ diff --git a/icons/effects/bloodspatter.dmi b/icons/effects/bloodspatter.dmi deleted file mode 100644 index c41b7cb6b43cd..0000000000000 Binary files a/icons/effects/bloodspatter.dmi and /dev/null differ diff --git a/icons/effects/cameravis.dmi b/icons/effects/cameravis.dmi deleted file mode 100644 index 2b819836fc3a6..0000000000000 Binary files a/icons/effects/cameravis.dmi and /dev/null differ diff --git a/icons/effects/chemsmoke.dmi b/icons/effects/chemsmoke.dmi deleted file mode 100644 index 4308e3d40bb98..0000000000000 Binary files a/icons/effects/chemsmoke.dmi and /dev/null differ diff --git a/icons/effects/contamination.dmi b/icons/effects/contamination.dmi deleted file mode 100644 index 367394213be96..0000000000000 Binary files a/icons/effects/contamination.dmi and /dev/null differ diff --git a/icons/effects/crayondecal.dmi b/icons/effects/crayondecal.dmi deleted file mode 100644 index dc0a300fcba96..0000000000000 Binary files a/icons/effects/crayondecal.dmi and /dev/null differ diff --git a/icons/effects/drip.dmi b/icons/effects/drip.dmi deleted file mode 100644 index a756bc10f87de..0000000000000 Binary files a/icons/effects/drip.dmi and /dev/null differ diff --git a/icons/effects/effects.dmi b/icons/effects/effects.dmi deleted file mode 100644 index ca60eea9e3c13..0000000000000 Binary files a/icons/effects/effects.dmi and /dev/null differ diff --git a/icons/effects/fire.dmi b/icons/effects/fire.dmi deleted file mode 100644 index 90e3bb4125991..0000000000000 Binary files a/icons/effects/fire.dmi and /dev/null differ diff --git a/icons/effects/fluidtracks.dmi b/icons/effects/fluidtracks.dmi deleted file mode 100644 index 534c7d47f8e08..0000000000000 Binary files a/icons/effects/fluidtracks.dmi and /dev/null differ diff --git a/icons/effects/footprints.dmi b/icons/effects/footprints.dmi deleted file mode 100644 index b849de00fff38..0000000000000 Binary files a/icons/effects/footprints.dmi and /dev/null differ diff --git a/icons/effects/genetics.dmi b/icons/effects/genetics.dmi deleted file mode 100644 index 8e31fea961352..0000000000000 Binary files a/icons/effects/genetics.dmi and /dev/null differ diff --git a/icons/effects/landmarks.dmi b/icons/effects/landmarks.dmi deleted file mode 100644 index 356074d148fd4..0000000000000 Binary files a/icons/effects/landmarks.dmi and /dev/null differ diff --git a/icons/effects/lens_flare.dmi b/icons/effects/lens_flare.dmi deleted file mode 100644 index 7d0c3ecbfa347..0000000000000 Binary files a/icons/effects/lens_flare.dmi and /dev/null differ diff --git a/icons/effects/lighting.dmi b/icons/effects/lighting.dmi deleted file mode 100644 index e79e69e6a6145..0000000000000 Binary files a/icons/effects/lighting.dmi and /dev/null differ diff --git a/icons/effects/lighting_overlay.dmi b/icons/effects/lighting_overlay.dmi deleted file mode 100644 index e5e4573b5845e..0000000000000 Binary files a/icons/effects/lighting_overlay.dmi and /dev/null differ diff --git a/icons/effects/lighting_overlay.png b/icons/effects/lighting_overlay.png deleted file mode 100644 index b317268b702d5..0000000000000 Binary files a/icons/effects/lighting_overlay.png and /dev/null differ diff --git a/icons/effects/liquid.dmi b/icons/effects/liquid.dmi deleted file mode 100644 index 258a0fb2e62e5..0000000000000 Binary files a/icons/effects/liquid.dmi and /dev/null differ diff --git a/icons/effects/liquids.dmi b/icons/effects/liquids.dmi deleted file mode 100644 index 3236224036e44..0000000000000 Binary files a/icons/effects/liquids.dmi and /dev/null differ diff --git a/icons/effects/numbers.dmi b/icons/effects/numbers.dmi deleted file mode 100644 index fcf9463ccd22d..0000000000000 Binary files a/icons/effects/numbers.dmi and /dev/null differ diff --git a/icons/effects/particles.dmi b/icons/effects/particles.dmi deleted file mode 100644 index 4825d9701c591..0000000000000 Binary files a/icons/effects/particles.dmi and /dev/null differ diff --git a/icons/effects/plasma.dmi b/icons/effects/plasma.dmi deleted file mode 100644 index dc07f1bd01b86..0000000000000 Binary files a/icons/effects/plasma.dmi and /dev/null differ diff --git a/icons/effects/progessbar.dmi b/icons/effects/progessbar.dmi deleted file mode 100644 index 75e7aa3106905..0000000000000 Binary files a/icons/effects/progessbar.dmi and /dev/null differ diff --git a/icons/effects/projectiles.dmi b/icons/effects/projectiles.dmi deleted file mode 100644 index bfb055fdd817b..0000000000000 Binary files a/icons/effects/projectiles.dmi and /dev/null differ diff --git a/icons/effects/psi_aura_small.dmi b/icons/effects/psi_aura_small.dmi deleted file mode 100644 index f5e222b61f5ff..0000000000000 Binary files a/icons/effects/psi_aura_small.dmi and /dev/null differ diff --git a/icons/effects/spacevines.dmi b/icons/effects/spacevines.dmi deleted file mode 100644 index 7087416ae7034..0000000000000 Binary files a/icons/effects/spacevines.dmi and /dev/null differ diff --git a/icons/effects/species.dmi b/icons/effects/species.dmi deleted file mode 100644 index 8c231b9b68aac..0000000000000 Binary files a/icons/effects/species.dmi and /dev/null differ diff --git a/icons/effects/ss13_dark_alpha6.dmi b/icons/effects/ss13_dark_alpha6.dmi deleted file mode 100644 index 742337358daaf..0000000000000 Binary files a/icons/effects/ss13_dark_alpha6.dmi and /dev/null differ diff --git a/icons/effects/ss13_dark_alpha7.dmi b/icons/effects/ss13_dark_alpha7.dmi deleted file mode 100644 index b270621719ac0..0000000000000 Binary files a/icons/effects/ss13_dark_alpha7.dmi and /dev/null differ diff --git a/icons/effects/ss13_dark_alpha7_DEBUG.dmi b/icons/effects/ss13_dark_alpha7_DEBUG.dmi deleted file mode 100644 index 91beaddd0894d..0000000000000 Binary files a/icons/effects/ss13_dark_alpha7_DEBUG.dmi and /dev/null differ diff --git a/icons/effects/ss13_dark_alpha7_old.dmi b/icons/effects/ss13_dark_alpha7_old.dmi deleted file mode 100644 index 85178c4e46f58..0000000000000 Binary files a/icons/effects/ss13_dark_alpha7_old.dmi and /dev/null differ diff --git a/icons/effects/static.dmi b/icons/effects/static.dmi deleted file mode 100644 index 63f6a1e6f6bc6..0000000000000 Binary files a/icons/effects/static.dmi and /dev/null differ diff --git a/icons/effects/station_explosion.dmi b/icons/effects/station_explosion.dmi deleted file mode 100644 index 3edf02c264d8f..0000000000000 Binary files a/icons/effects/station_explosion.dmi and /dev/null differ diff --git a/icons/effects/tile_effects.dmi b/icons/effects/tile_effects.dmi deleted file mode 100644 index a1b92ff11dcb9..0000000000000 Binary files a/icons/effects/tile_effects.dmi and /dev/null differ diff --git a/icons/effects/tomatodecal.dmi b/icons/effects/tomatodecal.dmi deleted file mode 100644 index a67e1a5e934ed..0000000000000 Binary files a/icons/effects/tomatodecal.dmi and /dev/null differ diff --git a/icons/effects/turf_fire.dmi b/icons/effects/turf_fire.dmi deleted file mode 100644 index f20bd64a4eb97..0000000000000 Binary files a/icons/effects/turf_fire.dmi and /dev/null differ diff --git a/icons/effects/uristrunes.dmi b/icons/effects/uristrunes.dmi deleted file mode 100644 index ce195cf9938fb..0000000000000 Binary files a/icons/effects/uristrunes.dmi and /dev/null differ diff --git a/icons/effects/vomit.dmi b/icons/effects/vomit.dmi deleted file mode 100644 index ee3fc3a6add17..0000000000000 Binary files a/icons/effects/vomit.dmi and /dev/null differ diff --git a/icons/effects/wallrot.dmi b/icons/effects/wallrot.dmi deleted file mode 100644 index 3ca5467712113..0000000000000 Binary files a/icons/effects/wallrot.dmi and /dev/null differ diff --git a/icons/effects/warning_stripes.dmi b/icons/effects/warning_stripes.dmi deleted file mode 100644 index a0cf5e32447ce..0000000000000 Binary files a/icons/effects/warning_stripes.dmi and /dev/null differ diff --git a/icons/effects/water.dmi b/icons/effects/water.dmi deleted file mode 100644 index 1cc75401fda42..0000000000000 Binary files a/icons/effects/water.dmi and /dev/null differ diff --git a/icons/effects/writing.dmi b/icons/effects/writing.dmi deleted file mode 100644 index bbf4055bcea73..0000000000000 Binary files a/icons/effects/writing.dmi and /dev/null differ diff --git a/icons/emoji.dmi b/icons/emoji.dmi deleted file mode 100644 index 8a12c67c41fe8..0000000000000 Binary files a/icons/emoji.dmi and /dev/null differ diff --git a/icons/jungle.dmi b/icons/jungle.dmi deleted file mode 100644 index a4ee3d5350122..0000000000000 Binary files a/icons/jungle.dmi and /dev/null differ diff --git a/icons/mecha/backup.dmi b/icons/mecha/backup.dmi deleted file mode 100644 index a499acda1722c..0000000000000 Binary files a/icons/mecha/backup.dmi and /dev/null differ diff --git a/icons/mecha/ballistic_shield.dmi b/icons/mecha/ballistic_shield.dmi deleted file mode 100644 index d3e0a1ba43170..0000000000000 Binary files a/icons/mecha/ballistic_shield.dmi and /dev/null differ diff --git a/icons/mecha/mech_bay.dmi b/icons/mecha/mech_bay.dmi deleted file mode 100644 index e46f668f0d02b..0000000000000 Binary files a/icons/mecha/mech_bay.dmi and /dev/null differ diff --git a/icons/mecha/mech_decals.dmi b/icons/mecha/mech_decals.dmi deleted file mode 100644 index b0de8d7e8eb29..0000000000000 Binary files a/icons/mecha/mech_decals.dmi and /dev/null differ diff --git a/icons/mecha/mech_equipment.dmi b/icons/mecha/mech_equipment.dmi deleted file mode 100644 index f9f8c181f85b2..0000000000000 Binary files a/icons/mecha/mech_equipment.dmi and /dev/null differ diff --git a/icons/mecha/mech_fab.dmi b/icons/mecha/mech_fab.dmi deleted file mode 100644 index 3a2ab9e48807b..0000000000000 Binary files a/icons/mecha/mech_fab.dmi and /dev/null differ diff --git a/icons/mecha/mech_hud.dmi b/icons/mecha/mech_hud.dmi deleted file mode 100644 index e9536f3204523..0000000000000 Binary files a/icons/mecha/mech_hud.dmi and /dev/null differ diff --git a/icons/mecha/mech_part_items.dmi b/icons/mecha/mech_part_items.dmi deleted file mode 100644 index b6072b7ca0289..0000000000000 Binary files a/icons/mecha/mech_part_items.dmi and /dev/null differ diff --git a/icons/mecha/mech_parts.dmi b/icons/mecha/mech_parts.dmi deleted file mode 100644 index 3fa715cc6badc..0000000000000 Binary files a/icons/mecha/mech_parts.dmi and /dev/null differ diff --git a/icons/mecha/mech_parts_held.dmi b/icons/mecha/mech_parts_held.dmi deleted file mode 100644 index 0276b3fb0aa6c..0000000000000 Binary files a/icons/mecha/mech_parts_held.dmi and /dev/null differ diff --git a/icons/mecha/mech_weapon_overlays.dmi b/icons/mecha/mech_weapon_overlays.dmi deleted file mode 100644 index e9587d85844ea..0000000000000 Binary files a/icons/mecha/mech_weapon_overlays.dmi and /dev/null differ diff --git a/icons/mecha/shield.dmi b/icons/mecha/shield.dmi deleted file mode 100644 index c4c41e9180bb9..0000000000000 Binary files a/icons/mecha/shield.dmi and /dev/null differ diff --git a/icons/meteor_turret.dmi b/icons/meteor_turret.dmi deleted file mode 100644 index 3f62c56b1b316..0000000000000 Binary files a/icons/meteor_turret.dmi and /dev/null differ diff --git a/icons/minimap.dmi b/icons/minimap.dmi deleted file mode 100644 index 26aecb84b96f2..0000000000000 Binary files a/icons/minimap.dmi and /dev/null differ diff --git a/icons/misc/beach.dmi b/icons/misc/beach.dmi deleted file mode 100644 index 09bee586d7b8a..0000000000000 Binary files a/icons/misc/beach.dmi and /dev/null differ diff --git a/icons/misc/beach2.dmi b/icons/misc/beach2.dmi deleted file mode 100644 index 0de278efce1d9..0000000000000 Binary files a/icons/misc/beach2.dmi and /dev/null differ diff --git a/icons/misc/buildmode.dmi b/icons/misc/buildmode.dmi deleted file mode 100644 index 98f0c8bdf8645..0000000000000 Binary files a/icons/misc/buildmode.dmi and /dev/null differ diff --git a/icons/misc/debug_connect.dmi b/icons/misc/debug_connect.dmi deleted file mode 100644 index 0c96c86daa2af..0000000000000 Binary files a/icons/misc/debug_connect.dmi and /dev/null differ diff --git a/icons/misc/debug_group.dmi b/icons/misc/debug_group.dmi deleted file mode 100644 index a9cf3ee8ab5bf..0000000000000 Binary files a/icons/misc/debug_group.dmi and /dev/null differ diff --git a/icons/misc/debug_rebuild.dmi b/icons/misc/debug_rebuild.dmi deleted file mode 100644 index b7cde5aaf058b..0000000000000 Binary files a/icons/misc/debug_rebuild.dmi and /dev/null differ diff --git a/icons/misc/debug_space.dmi b/icons/misc/debug_space.dmi deleted file mode 100644 index 44d01dfe7660c..0000000000000 Binary files a/icons/misc/debug_space.dmi and /dev/null differ diff --git a/icons/misc/holomap_markers.dmi b/icons/misc/holomap_markers.dmi deleted file mode 100644 index 3ea32c120d0e4..0000000000000 Binary files a/icons/misc/holomap_markers.dmi and /dev/null differ diff --git a/icons/misc/imap.dmi b/icons/misc/imap.dmi deleted file mode 100644 index 3185c883a5723..0000000000000 Binary files a/icons/misc/imap.dmi and /dev/null differ diff --git a/icons/misc/inpipe.dmi b/icons/misc/inpipe.dmi deleted file mode 100644 index 18b19d12adf3e..0000000000000 Binary files a/icons/misc/inpipe.dmi and /dev/null differ diff --git a/icons/misc/largeui.dmi b/icons/misc/largeui.dmi deleted file mode 100644 index 24a89b85175a9..0000000000000 Binary files a/icons/misc/largeui.dmi and /dev/null differ diff --git a/icons/misc/mark.dmi b/icons/misc/mark.dmi deleted file mode 100644 index bec1920bccf00..0000000000000 Binary files a/icons/misc/mark.dmi and /dev/null differ diff --git a/icons/misc/security_state.dmi b/icons/misc/security_state.dmi deleted file mode 100644 index 3d5e33d2af3ac..0000000000000 Binary files a/icons/misc/security_state.dmi and /dev/null differ diff --git a/icons/misc/static.dmi b/icons/misc/static.dmi deleted file mode 100644 index 09fc1c20edca1..0000000000000 Binary files a/icons/misc/static.dmi and /dev/null differ diff --git a/icons/mob/AI.dmi b/icons/mob/AI.dmi deleted file mode 100644 index b0c2752abf42f..0000000000000 Binary files a/icons/mob/AI.dmi and /dev/null differ diff --git a/icons/mob/OnFire.dmi b/icons/mob/OnFire.dmi deleted file mode 100644 index 8bf6e2c7749ed..0000000000000 Binary files a/icons/mob/OnFire.dmi and /dev/null differ diff --git a/icons/mob/bandage.dmi b/icons/mob/bandage.dmi deleted file mode 100644 index bab279f6c1d1b..0000000000000 Binary files a/icons/mob/bandage.dmi and /dev/null differ diff --git a/icons/mob/blob.dmi b/icons/mob/blob.dmi deleted file mode 100644 index f89d667fb0f44..0000000000000 Binary files a/icons/mob/blob.dmi and /dev/null differ diff --git a/icons/mob/borer_ui.dmi b/icons/mob/borer_ui.dmi deleted file mode 100644 index 8c0fad3722fa3..0000000000000 Binary files a/icons/mob/borer_ui.dmi and /dev/null differ diff --git a/icons/mob/bot/ED209.dmi b/icons/mob/bot/ED209.dmi deleted file mode 100644 index 7b529bac79d23..0000000000000 Binary files a/icons/mob/bot/ED209.dmi and /dev/null differ diff --git a/icons/mob/bot/cleanbot.dmi b/icons/mob/bot/cleanbot.dmi deleted file mode 100644 index 3ff00990f0187..0000000000000 Binary files a/icons/mob/bot/cleanbot.dmi and /dev/null differ diff --git a/icons/mob/bot/farmbot.dmi b/icons/mob/bot/farmbot.dmi deleted file mode 100644 index 22b419db3ebcb..0000000000000 Binary files a/icons/mob/bot/farmbot.dmi and /dev/null differ diff --git a/icons/mob/bot/fetchbot.dmi b/icons/mob/bot/fetchbot.dmi deleted file mode 100644 index 86ea0242f2227..0000000000000 Binary files a/icons/mob/bot/fetchbot.dmi and /dev/null differ diff --git a/icons/mob/bot/floorbot.dmi b/icons/mob/bot/floorbot.dmi deleted file mode 100644 index 447b1e50a5677..0000000000000 Binary files a/icons/mob/bot/floorbot.dmi and /dev/null differ diff --git a/icons/mob/bot/honkbuddy.dmi b/icons/mob/bot/honkbuddy.dmi deleted file mode 100644 index 889d4dceee9e5..0000000000000 Binary files a/icons/mob/bot/honkbuddy.dmi and /dev/null differ diff --git a/icons/mob/bot/medibot.dmi b/icons/mob/bot/medibot.dmi deleted file mode 100644 index 36e24b7370a4a..0000000000000 Binary files a/icons/mob/bot/medibot.dmi and /dev/null differ diff --git a/icons/mob/bot/medibot_skins.dmi b/icons/mob/bot/medibot_skins.dmi deleted file mode 100644 index 009fbde0da93b..0000000000000 Binary files a/icons/mob/bot/medibot_skins.dmi and /dev/null differ diff --git a/icons/mob/bot/mulebot.dmi b/icons/mob/bot/mulebot.dmi deleted file mode 100644 index 2a2848fd547b3..0000000000000 Binary files a/icons/mob/bot/mulebot.dmi and /dev/null differ diff --git a/icons/mob/bot/placeholder.dmi b/icons/mob/bot/placeholder.dmi deleted file mode 100644 index 92e9cb7631d02..0000000000000 Binary files a/icons/mob/bot/placeholder.dmi and /dev/null differ diff --git a/icons/mob/bot/secbot.dmi b/icons/mob/bot/secbot.dmi deleted file mode 100644 index 5b9327f4401ab..0000000000000 Binary files a/icons/mob/bot/secbot.dmi and /dev/null differ diff --git a/icons/mob/collar.dmi b/icons/mob/collar.dmi deleted file mode 100644 index 3a6f37745b4de..0000000000000 Binary files a/icons/mob/collar.dmi and /dev/null differ diff --git a/icons/mob/crow.dmi b/icons/mob/crow.dmi deleted file mode 100644 index 8cefef2a26aa9..0000000000000 Binary files a/icons/mob/crow.dmi and /dev/null differ diff --git a/icons/mob/deity_big.dmi b/icons/mob/deity_big.dmi deleted file mode 100644 index 0a188a9c6aad5..0000000000000 Binary files a/icons/mob/deity_big.dmi and /dev/null differ diff --git a/icons/mob/eye.dmi b/icons/mob/eye.dmi deleted file mode 100644 index 64ca1b100e3a0..0000000000000 Binary files a/icons/mob/eye.dmi and /dev/null differ diff --git a/icons/mob/gestalt.dmi b/icons/mob/gestalt.dmi deleted file mode 100644 index 0a2d3ed70b4cd..0000000000000 Binary files a/icons/mob/gestalt.dmi and /dev/null differ diff --git a/icons/mob/gimmick_head.dmi b/icons/mob/gimmick_head.dmi deleted file mode 100644 index 8fe24175c2976..0000000000000 Binary files a/icons/mob/gimmick_head.dmi and /dev/null differ diff --git a/icons/mob/hivebot.dmi b/icons/mob/hivebot.dmi deleted file mode 100644 index e18209733d8fc..0000000000000 Binary files a/icons/mob/hivebot.dmi and /dev/null differ diff --git a/icons/mob/hologram.dmi b/icons/mob/hologram.dmi deleted file mode 100644 index 6ccf6b27da6e2..0000000000000 Binary files a/icons/mob/hologram.dmi and /dev/null differ diff --git a/icons/mob/hud.dmi b/icons/mob/hud.dmi deleted file mode 100644 index 3df3fa4d1b567..0000000000000 Binary files a/icons/mob/hud.dmi and /dev/null differ diff --git a/icons/mob/hud_med.dmi b/icons/mob/hud_med.dmi deleted file mode 100644 index 705886a5490f9..0000000000000 Binary files a/icons/mob/hud_med.dmi and /dev/null differ diff --git a/icons/mob/human.dmi b/icons/mob/human.dmi deleted file mode 100644 index 8bb5b229d4386..0000000000000 Binary files a/icons/mob/human.dmi and /dev/null differ diff --git a/icons/mob/human_races/cyberlimbs/bishop/bishop_alt.dmi b/icons/mob/human_races/cyberlimbs/bishop/bishop_alt.dmi deleted file mode 100644 index e403436daf428..0000000000000 Binary files a/icons/mob/human_races/cyberlimbs/bishop/bishop_alt.dmi and /dev/null differ diff --git a/icons/mob/human_races/cyberlimbs/bishop/bishop_main.dmi b/icons/mob/human_races/cyberlimbs/bishop/bishop_main.dmi deleted file mode 100644 index 2e221c242f51d..0000000000000 Binary files a/icons/mob/human_races/cyberlimbs/bishop/bishop_main.dmi and /dev/null differ diff --git a/icons/mob/human_races/cyberlimbs/bishop/bishop_monitor.dmi b/icons/mob/human_races/cyberlimbs/bishop/bishop_monitor.dmi deleted file mode 100644 index edd2236cfb339..0000000000000 Binary files a/icons/mob/human_races/cyberlimbs/bishop/bishop_monitor.dmi and /dev/null differ diff --git a/icons/mob/human_races/cyberlimbs/bishop/bishop_rook.dmi b/icons/mob/human_races/cyberlimbs/bishop/bishop_rook.dmi deleted file mode 100644 index f3994befa7e87..0000000000000 Binary files a/icons/mob/human_races/cyberlimbs/bishop/bishop_rook.dmi and /dev/null differ diff --git a/icons/mob/human_races/cyberlimbs/hephaestus/hephaestus_alt.dmi b/icons/mob/human_races/cyberlimbs/hephaestus/hephaestus_alt.dmi deleted file mode 100644 index 3b6daa48bc49d..0000000000000 Binary files a/icons/mob/human_races/cyberlimbs/hephaestus/hephaestus_alt.dmi and /dev/null differ diff --git a/icons/mob/human_races/cyberlimbs/hephaestus/hephaestus_main.dmi b/icons/mob/human_races/cyberlimbs/hephaestus/hephaestus_main.dmi deleted file mode 100644 index 482ee1650ca13..0000000000000 Binary files a/icons/mob/human_races/cyberlimbs/hephaestus/hephaestus_main.dmi and /dev/null differ diff --git a/icons/mob/human_races/cyberlimbs/hephaestus/hephaestus_monitor.dmi b/icons/mob/human_races/cyberlimbs/hephaestus/hephaestus_monitor.dmi deleted file mode 100644 index 5f3d72f3fc4df..0000000000000 Binary files a/icons/mob/human_races/cyberlimbs/hephaestus/hephaestus_monitor.dmi and /dev/null differ diff --git a/icons/mob/human_races/cyberlimbs/hephaestus/hephaestus_titan.dmi b/icons/mob/human_races/cyberlimbs/hephaestus/hephaestus_titan.dmi deleted file mode 100644 index f41a74127b43b..0000000000000 Binary files a/icons/mob/human_races/cyberlimbs/hephaestus/hephaestus_titan.dmi and /dev/null differ diff --git a/icons/mob/human_races/cyberlimbs/morpheus/morpheus_airborne.dmi b/icons/mob/human_races/cyberlimbs/morpheus/morpheus_airborne.dmi deleted file mode 100644 index 2b3fd738f139a..0000000000000 Binary files a/icons/mob/human_races/cyberlimbs/morpheus/morpheus_airborne.dmi and /dev/null differ diff --git a/icons/mob/human_races/cyberlimbs/morpheus/morpheus_atlantis.dmi b/icons/mob/human_races/cyberlimbs/morpheus/morpheus_atlantis.dmi deleted file mode 100644 index 26f2ccb4e7c7e..0000000000000 Binary files a/icons/mob/human_races/cyberlimbs/morpheus/morpheus_atlantis.dmi and /dev/null differ diff --git a/icons/mob/human_races/cyberlimbs/morpheus/morpheus_blitz.dmi b/icons/mob/human_races/cyberlimbs/morpheus/morpheus_blitz.dmi deleted file mode 100644 index 9bc6ada7f622a..0000000000000 Binary files a/icons/mob/human_races/cyberlimbs/morpheus/morpheus_blitz.dmi and /dev/null differ diff --git a/icons/mob/human_races/cyberlimbs/morpheus/morpheus_main.dmi b/icons/mob/human_races/cyberlimbs/morpheus/morpheus_main.dmi deleted file mode 100644 index ab34e1b840bf2..0000000000000 Binary files a/icons/mob/human_races/cyberlimbs/morpheus/morpheus_main.dmi and /dev/null differ diff --git a/icons/mob/human_races/cyberlimbs/morpheus/morpheus_mantis.dmi b/icons/mob/human_races/cyberlimbs/morpheus/morpheus_mantis.dmi deleted file mode 100644 index c013926769488..0000000000000 Binary files a/icons/mob/human_races/cyberlimbs/morpheus/morpheus_mantis.dmi and /dev/null differ diff --git a/icons/mob/human_races/cyberlimbs/morpheus/morpheus_monitor.dmi b/icons/mob/human_races/cyberlimbs/morpheus/morpheus_monitor.dmi deleted file mode 100644 index e913224ca1630..0000000000000 Binary files a/icons/mob/human_races/cyberlimbs/morpheus/morpheus_monitor.dmi and /dev/null differ diff --git a/icons/mob/human_races/cyberlimbs/morpheus/morpheus_prime.dmi b/icons/mob/human_races/cyberlimbs/morpheus/morpheus_prime.dmi deleted file mode 100644 index 8c46c6213e786..0000000000000 Binary files a/icons/mob/human_races/cyberlimbs/morpheus/morpheus_prime.dmi and /dev/null differ diff --git a/icons/mob/human_races/cyberlimbs/nanotrasen/nanotrasen_main.dmi b/icons/mob/human_races/cyberlimbs/nanotrasen/nanotrasen_main.dmi deleted file mode 100644 index 47fdc187a37fb..0000000000000 Binary files a/icons/mob/human_races/cyberlimbs/nanotrasen/nanotrasen_main.dmi and /dev/null differ diff --git a/icons/mob/human_races/cyberlimbs/robotic.dmi b/icons/mob/human_races/cyberlimbs/robotic.dmi deleted file mode 100644 index e98d2e351294f..0000000000000 Binary files a/icons/mob/human_races/cyberlimbs/robotic.dmi and /dev/null differ diff --git a/icons/mob/human_races/cyberlimbs/shellguard/shellguard_alt.dmi b/icons/mob/human_races/cyberlimbs/shellguard/shellguard_alt.dmi deleted file mode 100644 index f17b0f9f407cb..0000000000000 Binary files a/icons/mob/human_races/cyberlimbs/shellguard/shellguard_alt.dmi and /dev/null differ diff --git a/icons/mob/human_races/cyberlimbs/shellguard/shellguard_main.dmi b/icons/mob/human_races/cyberlimbs/shellguard/shellguard_main.dmi deleted file mode 100644 index f27b5246b4f6c..0000000000000 Binary files a/icons/mob/human_races/cyberlimbs/shellguard/shellguard_main.dmi and /dev/null differ diff --git a/icons/mob/human_races/cyberlimbs/shellguard/shellguard_monitor.dmi b/icons/mob/human_races/cyberlimbs/shellguard/shellguard_monitor.dmi deleted file mode 100644 index 8de798c2a8de4..0000000000000 Binary files a/icons/mob/human_races/cyberlimbs/shellguard/shellguard_monitor.dmi and /dev/null differ diff --git a/icons/mob/human_races/cyberlimbs/veymed/veymed_main.dmi b/icons/mob/human_races/cyberlimbs/veymed/veymed_main.dmi deleted file mode 100644 index 07446b598a882..0000000000000 Binary files a/icons/mob/human_races/cyberlimbs/veymed/veymed_main.dmi and /dev/null differ diff --git a/icons/mob/human_races/cyberlimbs/vox/improvised.dmi b/icons/mob/human_races/cyberlimbs/vox/improvised.dmi deleted file mode 100644 index 4f99efe28e755..0000000000000 Binary files a/icons/mob/human_races/cyberlimbs/vox/improvised.dmi and /dev/null differ diff --git a/icons/mob/human_races/cyberlimbs/vox/primalis.dmi b/icons/mob/human_races/cyberlimbs/vox/primalis.dmi deleted file mode 100644 index a093e6982d496..0000000000000 Binary files a/icons/mob/human_races/cyberlimbs/vox/primalis.dmi and /dev/null differ diff --git a/icons/mob/human_races/cyberlimbs/wardtakahashi/wardtakahashi_alt.dmi b/icons/mob/human_races/cyberlimbs/wardtakahashi/wardtakahashi_alt.dmi deleted file mode 100644 index 10ea9c951486c..0000000000000 Binary files a/icons/mob/human_races/cyberlimbs/wardtakahashi/wardtakahashi_alt.dmi and /dev/null differ diff --git a/icons/mob/human_races/cyberlimbs/wardtakahashi/wardtakahashi_economy.dmi b/icons/mob/human_races/cyberlimbs/wardtakahashi/wardtakahashi_economy.dmi deleted file mode 100644 index a077b5239dee8..0000000000000 Binary files a/icons/mob/human_races/cyberlimbs/wardtakahashi/wardtakahashi_economy.dmi and /dev/null differ diff --git a/icons/mob/human_races/cyberlimbs/wardtakahashi/wardtakahashi_main.dmi b/icons/mob/human_races/cyberlimbs/wardtakahashi/wardtakahashi_main.dmi deleted file mode 100644 index eda9969ad74a8..0000000000000 Binary files a/icons/mob/human_races/cyberlimbs/wardtakahashi/wardtakahashi_main.dmi and /dev/null differ diff --git a/icons/mob/human_races/cyberlimbs/wardtakahashi/wardtakahashi_monitor.dmi b/icons/mob/human_races/cyberlimbs/wardtakahashi/wardtakahashi_monitor.dmi deleted file mode 100644 index 2777d06ff8153..0000000000000 Binary files a/icons/mob/human_races/cyberlimbs/wardtakahashi/wardtakahashi_monitor.dmi and /dev/null differ diff --git a/icons/mob/human_races/cyberlimbs/xion/xion_alt.dmi b/icons/mob/human_races/cyberlimbs/xion/xion_alt.dmi deleted file mode 100644 index 84a7fec2a9c1b..0000000000000 Binary files a/icons/mob/human_races/cyberlimbs/xion/xion_alt.dmi and /dev/null differ diff --git a/icons/mob/human_races/cyberlimbs/xion/xion_econo.dmi b/icons/mob/human_races/cyberlimbs/xion/xion_econo.dmi deleted file mode 100644 index f6d11e4ff37c0..0000000000000 Binary files a/icons/mob/human_races/cyberlimbs/xion/xion_econo.dmi and /dev/null differ diff --git a/icons/mob/human_races/cyberlimbs/xion/xion_main.dmi b/icons/mob/human_races/cyberlimbs/xion/xion_main.dmi deleted file mode 100644 index 0020beacdfdcb..0000000000000 Binary files a/icons/mob/human_races/cyberlimbs/xion/xion_main.dmi and /dev/null differ diff --git a/icons/mob/human_races/cyberlimbs/xion/xion_monitor.dmi b/icons/mob/human_races/cyberlimbs/xion/xion_monitor.dmi deleted file mode 100644 index 0a049fc759ffe..0000000000000 Binary files a/icons/mob/human_races/cyberlimbs/xion/xion_monitor.dmi and /dev/null differ diff --git a/icons/mob/human_races/cyberlimbs/zenghu/zenghu_main.dmi b/icons/mob/human_races/cyberlimbs/zenghu/zenghu_main.dmi deleted file mode 100644 index 6c4088fc88539..0000000000000 Binary files a/icons/mob/human_races/cyberlimbs/zenghu/zenghu_main.dmi and /dev/null differ diff --git a/icons/mob/human_races/cyberlimbs/zenghu/zenghu_spirit.dmi b/icons/mob/human_races/cyberlimbs/zenghu/zenghu_spirit.dmi deleted file mode 100644 index fad00d34dbb3e..0000000000000 Binary files a/icons/mob/human_races/cyberlimbs/zenghu/zenghu_spirit.dmi and /dev/null differ diff --git a/icons/mob/human_races/species/adherent/blood_mask.dmi b/icons/mob/human_races/species/adherent/blood_mask.dmi deleted file mode 100644 index 31fb414a87c98..0000000000000 Binary files a/icons/mob/human_races/species/adherent/blood_mask.dmi and /dev/null differ diff --git a/icons/mob/human_races/species/adherent/body.dmi b/icons/mob/human_races/species/adherent/body.dmi deleted file mode 100644 index 9367cc159506d..0000000000000 Binary files a/icons/mob/human_races/species/adherent/body.dmi and /dev/null differ diff --git a/icons/mob/human_races/species/adherent/damage_mask.dmi b/icons/mob/human_races/species/adherent/damage_mask.dmi deleted file mode 100644 index f42eb2760e64e..0000000000000 Binary files a/icons/mob/human_races/species/adherent/damage_mask.dmi and /dev/null differ diff --git a/icons/mob/human_races/species/adherent/damage_overlay.dmi b/icons/mob/human_races/species/adherent/damage_overlay.dmi deleted file mode 100644 index 69854751e9ee2..0000000000000 Binary files a/icons/mob/human_races/species/adherent/damage_overlay.dmi and /dev/null differ diff --git a/icons/mob/human_races/species/adherent/eyes.dmi b/icons/mob/human_races/species/adherent/eyes.dmi deleted file mode 100644 index e025a360651a7..0000000000000 Binary files a/icons/mob/human_races/species/adherent/eyes.dmi and /dev/null differ diff --git a/icons/mob/human_races/species/adherent/organs.dmi b/icons/mob/human_races/species/adherent/organs.dmi deleted file mode 100644 index 570b4ca7f98a5..0000000000000 Binary files a/icons/mob/human_races/species/adherent/organs.dmi and /dev/null differ diff --git a/icons/mob/human_races/species/adherent/preview.dmi b/icons/mob/human_races/species/adherent/preview.dmi deleted file mode 100644 index 8d2963d6dfec4..0000000000000 Binary files a/icons/mob/human_races/species/adherent/preview.dmi and /dev/null differ diff --git a/icons/mob/human_races/species/adherent/template.dmi b/icons/mob/human_races/species/adherent/template.dmi deleted file mode 100644 index 31fb414a87c98..0000000000000 Binary files a/icons/mob/human_races/species/adherent/template.dmi and /dev/null differ diff --git a/icons/mob/human_races/species/blueforged/body.dmi b/icons/mob/human_races/species/blueforged/body.dmi deleted file mode 100644 index ab01b87ae3a09..0000000000000 Binary files a/icons/mob/human_races/species/blueforged/body.dmi and /dev/null differ diff --git a/icons/mob/human_races/species/blueforged/eyes.dmi b/icons/mob/human_races/species/blueforged/eyes.dmi deleted file mode 100644 index f502872b662a5..0000000000000 Binary files a/icons/mob/human_races/species/blueforged/eyes.dmi and /dev/null differ diff --git a/icons/mob/human_races/species/blueforged/organs.dmi b/icons/mob/human_races/species/blueforged/organs.dmi deleted file mode 100644 index 6e7ab69d1b5d0..0000000000000 Binary files a/icons/mob/human_races/species/blueforged/organs.dmi and /dev/null differ diff --git a/icons/mob/human_races/species/default_eyes.dmi b/icons/mob/human_races/species/default_eyes.dmi deleted file mode 100644 index e6c0e2fc805bc..0000000000000 Binary files a/icons/mob/human_races/species/default_eyes.dmi and /dev/null differ diff --git a/icons/mob/human_races/species/default_husk.dmi b/icons/mob/human_races/species/default_husk.dmi deleted file mode 100644 index 5979656cc07ec..0000000000000 Binary files a/icons/mob/human_races/species/default_husk.dmi and /dev/null differ diff --git a/icons/mob/human_races/species/diona/body.dmi b/icons/mob/human_races/species/diona/body.dmi deleted file mode 100644 index 6c35a7ac8e117..0000000000000 Binary files a/icons/mob/human_races/species/diona/body.dmi and /dev/null differ diff --git a/icons/mob/human_races/species/diona/deformed_body.dmi b/icons/mob/human_races/species/diona/deformed_body.dmi deleted file mode 100644 index 1fe04e70ff2a7..0000000000000 Binary files a/icons/mob/human_races/species/diona/deformed_body.dmi and /dev/null differ diff --git a/icons/mob/human_races/species/diona/eyes.dmi b/icons/mob/human_races/species/diona/eyes.dmi deleted file mode 100644 index 9bda2175edb3b..0000000000000 Binary files a/icons/mob/human_races/species/diona/eyes.dmi and /dev/null differ diff --git a/icons/mob/human_races/species/diona/preview.dmi b/icons/mob/human_races/species/diona/preview.dmi deleted file mode 100644 index b99fed178ef6f..0000000000000 Binary files a/icons/mob/human_races/species/diona/preview.dmi and /dev/null differ diff --git a/icons/mob/human_races/species/eyes.dmi b/icons/mob/human_races/species/eyes.dmi deleted file mode 100644 index e0e31003d3e60..0000000000000 Binary files a/icons/mob/human_races/species/eyes.dmi and /dev/null differ diff --git a/icons/mob/human_races/species/golem/body.dmi b/icons/mob/human_races/species/golem/body.dmi deleted file mode 100644 index d480ec4d28fc1..0000000000000 Binary files a/icons/mob/human_races/species/golem/body.dmi and /dev/null differ diff --git a/icons/mob/human_races/species/golem/husk.dmi b/icons/mob/human_races/species/golem/husk.dmi deleted file mode 100644 index d98f2560e147b..0000000000000 Binary files a/icons/mob/human_races/species/golem/husk.dmi and /dev/null differ diff --git a/icons/mob/human_races/species/human/blood_mask.dmi b/icons/mob/human_races/species/human/blood_mask.dmi deleted file mode 100644 index dc54991c84d2b..0000000000000 Binary files a/icons/mob/human_races/species/human/blood_mask.dmi and /dev/null differ diff --git a/icons/mob/human_races/species/human/body.dmi b/icons/mob/human_races/species/human/body.dmi deleted file mode 100644 index 893555866ba41..0000000000000 Binary files a/icons/mob/human_races/species/human/body.dmi and /dev/null differ diff --git a/icons/mob/human_races/species/human/bodymods.dmi b/icons/mob/human_races/species/human/bodymods.dmi deleted file mode 100644 index 88cedbe92a836..0000000000000 Binary files a/icons/mob/human_races/species/human/bodymods.dmi and /dev/null differ diff --git a/icons/mob/human_races/species/human/damage_mask.dmi b/icons/mob/human_races/species/human/damage_mask.dmi deleted file mode 100644 index db55b5a6b5dc9..0000000000000 Binary files a/icons/mob/human_races/species/human/damage_mask.dmi and /dev/null differ diff --git a/icons/mob/human_races/species/human/damage_overlay.dmi b/icons/mob/human_races/species/human/damage_overlay.dmi deleted file mode 100644 index cb6bf82d98e93..0000000000000 Binary files a/icons/mob/human_races/species/human/damage_overlay.dmi and /dev/null differ diff --git a/icons/mob/human_races/species/human/deformed_body.dmi b/icons/mob/human_races/species/human/deformed_body.dmi deleted file mode 100644 index e622ef14b5a5a..0000000000000 Binary files a/icons/mob/human_races/species/human/deformed_body.dmi and /dev/null differ diff --git a/icons/mob/human_races/species/human/facial.dmi b/icons/mob/human_races/species/human/facial.dmi deleted file mode 100644 index 25fde2d870daa..0000000000000 Binary files a/icons/mob/human_races/species/human/facial.dmi and /dev/null differ diff --git a/icons/mob/human_races/species/human/hair.dmi b/icons/mob/human_races/species/human/hair.dmi deleted file mode 100644 index 3e965da4676ec..0000000000000 Binary files a/icons/mob/human_races/species/human/hair.dmi and /dev/null differ diff --git a/icons/mob/human_races/species/human/hair_fade.dmi b/icons/mob/human_races/species/human/hair_fade.dmi deleted file mode 100644 index c3d1cc052ba3d..0000000000000 Binary files a/icons/mob/human_races/species/human/hair_fade.dmi and /dev/null differ diff --git a/icons/mob/human_races/species/human/lips.dmi b/icons/mob/human_races/species/human/lips.dmi deleted file mode 100644 index e5c02b221ba91..0000000000000 Binary files a/icons/mob/human_races/species/human/lips.dmi and /dev/null differ diff --git a/icons/mob/human_races/species/human/preview.dmi b/icons/mob/human_races/species/human/preview.dmi deleted file mode 100644 index 9a8fd2e412574..0000000000000 Binary files a/icons/mob/human_races/species/human/preview.dmi and /dev/null differ diff --git a/icons/mob/human_races/species/human/skeleton.dmi b/icons/mob/human_races/species/human/skeleton.dmi deleted file mode 100644 index 1cedb1196f0de..0000000000000 Binary files a/icons/mob/human_races/species/human/skeleton.dmi and /dev/null differ diff --git a/icons/mob/human_races/species/human/subspecies/gravworlder_body.dmi b/icons/mob/human_races/species/human/subspecies/gravworlder_body.dmi deleted file mode 100644 index c4fadee47d68d..0000000000000 Binary files a/icons/mob/human_races/species/human/subspecies/gravworlder_body.dmi and /dev/null differ diff --git a/icons/mob/human_races/species/human/subspecies/gravworlder_preview.dmi b/icons/mob/human_races/species/human/subspecies/gravworlder_preview.dmi deleted file mode 100644 index 08ee4fc9407f0..0000000000000 Binary files a/icons/mob/human_races/species/human/subspecies/gravworlder_preview.dmi and /dev/null differ diff --git a/icons/mob/human_races/species/human/subspecies/spacer_body.dmi b/icons/mob/human_races/species/human/subspecies/spacer_body.dmi deleted file mode 100644 index bc872f7a6641a..0000000000000 Binary files a/icons/mob/human_races/species/human/subspecies/spacer_body.dmi and /dev/null differ diff --git a/icons/mob/human_races/species/human/subspecies/spacer_preview.dmi b/icons/mob/human_races/species/human/subspecies/spacer_preview.dmi deleted file mode 100644 index 70cdd9a85a712..0000000000000 Binary files a/icons/mob/human_races/species/human/subspecies/spacer_preview.dmi and /dev/null differ diff --git a/icons/mob/human_races/species/human/subspecies/tritonian_body.dmi b/icons/mob/human_races/species/human/subspecies/tritonian_body.dmi deleted file mode 100644 index a5618b69ecf78..0000000000000 Binary files a/icons/mob/human_races/species/human/subspecies/tritonian_body.dmi and /dev/null differ diff --git a/icons/mob/human_races/species/human/subspecies/tritonian_preview.dmi b/icons/mob/human_races/species/human/subspecies/tritonian_preview.dmi deleted file mode 100644 index 482cdb2036b35..0000000000000 Binary files a/icons/mob/human_races/species/human/subspecies/tritonian_preview.dmi and /dev/null differ diff --git a/icons/mob/human_races/species/human/subspecies/vatgrown_body.dmi b/icons/mob/human_races/species/human/subspecies/vatgrown_body.dmi deleted file mode 100644 index a6f201d56fa14..0000000000000 Binary files a/icons/mob/human_races/species/human/subspecies/vatgrown_body.dmi and /dev/null differ diff --git a/icons/mob/human_races/species/human/subspecies/vatgrown_preview.dmi b/icons/mob/human_races/species/human/subspecies/vatgrown_preview.dmi deleted file mode 100644 index 10fb1060b783b..0000000000000 Binary files a/icons/mob/human_races/species/human/subspecies/vatgrown_preview.dmi and /dev/null differ diff --git a/icons/mob/human_races/species/human/tatt1.dmi b/icons/mob/human_races/species/human/tatt1.dmi deleted file mode 100644 index 264cd636759fb..0000000000000 Binary files a/icons/mob/human_races/species/human/tatt1.dmi and /dev/null differ diff --git a/icons/mob/human_races/species/humanoid/body.dmi b/icons/mob/human_races/species/humanoid/body.dmi deleted file mode 100644 index 6e8a68669b213..0000000000000 Binary files a/icons/mob/human_races/species/humanoid/body.dmi and /dev/null differ diff --git a/icons/mob/human_races/species/ipc/markings.dmi b/icons/mob/human_races/species/ipc/markings.dmi deleted file mode 100644 index 3465d300e6437..0000000000000 Binary files a/icons/mob/human_races/species/ipc/markings.dmi and /dev/null differ diff --git a/icons/mob/human_races/species/ipc/preview.dmi b/icons/mob/human_races/species/ipc/preview.dmi deleted file mode 100644 index 92d5c51a6bd85..0000000000000 Binary files a/icons/mob/human_races/species/ipc/preview.dmi and /dev/null differ diff --git a/icons/mob/human_races/species/legacy_markings.dmi b/icons/mob/human_races/species/legacy_markings.dmi deleted file mode 100644 index 71e8adb5e478b..0000000000000 Binary files a/icons/mob/human_races/species/legacy_markings.dmi and /dev/null differ diff --git a/icons/mob/human_races/species/lips.dmi b/icons/mob/human_races/species/lips.dmi deleted file mode 100644 index e5c02b221ba91..0000000000000 Binary files a/icons/mob/human_races/species/lips.dmi and /dev/null differ diff --git a/icons/mob/human_races/species/monkey/blood_mask.dmi b/icons/mob/human_races/species/monkey/blood_mask.dmi deleted file mode 100644 index 5d5dd66d7523f..0000000000000 Binary files a/icons/mob/human_races/species/monkey/blood_mask.dmi and /dev/null differ diff --git a/icons/mob/human_races/species/monkey/damage_mask.dmi b/icons/mob/human_races/species/monkey/damage_mask.dmi deleted file mode 100644 index 4761f21fbd5b8..0000000000000 Binary files a/icons/mob/human_races/species/monkey/damage_mask.dmi and /dev/null differ diff --git a/icons/mob/human_races/species/monkey/damage_overlays.dmi b/icons/mob/human_races/species/monkey/damage_overlays.dmi deleted file mode 100644 index 43d1f2c7a7368..0000000000000 Binary files a/icons/mob/human_races/species/monkey/damage_overlays.dmi and /dev/null differ diff --git a/icons/mob/human_races/species/monkey/farwa_body.dmi b/icons/mob/human_races/species/monkey/farwa_body.dmi deleted file mode 100644 index 585fa3bcf3538..0000000000000 Binary files a/icons/mob/human_races/species/monkey/farwa_body.dmi and /dev/null differ diff --git a/icons/mob/human_races/species/monkey/monkey_body.dmi b/icons/mob/human_races/species/monkey/monkey_body.dmi deleted file mode 100644 index e9c497331cdff..0000000000000 Binary files a/icons/mob/human_races/species/monkey/monkey_body.dmi and /dev/null differ diff --git a/icons/mob/human_races/species/monkey/neaera_body.dmi b/icons/mob/human_races/species/monkey/neaera_body.dmi deleted file mode 100644 index 69183f0d4bbd6..0000000000000 Binary files a/icons/mob/human_races/species/monkey/neaera_body.dmi and /dev/null differ diff --git a/icons/mob/human_races/species/monkey/stok_body.dmi b/icons/mob/human_races/species/monkey/stok_body.dmi deleted file mode 100644 index 28af62205ccd8..0000000000000 Binary files a/icons/mob/human_races/species/monkey/stok_body.dmi and /dev/null differ diff --git a/icons/mob/human_races/species/nabber/blood_mask.dmi b/icons/mob/human_races/species/nabber/blood_mask.dmi deleted file mode 100644 index 7f4ff338dff5b..0000000000000 Binary files a/icons/mob/human_races/species/nabber/blood_mask.dmi and /dev/null differ diff --git a/icons/mob/human_races/species/nabber/body.dmi b/icons/mob/human_races/species/nabber/body.dmi deleted file mode 100644 index ca2110fbb7cda..0000000000000 Binary files a/icons/mob/human_races/species/nabber/body.dmi and /dev/null differ diff --git a/icons/mob/human_races/species/nabber/body_msw.dmi b/icons/mob/human_races/species/nabber/body_msw.dmi deleted file mode 100644 index 0091b2f4d59f4..0000000000000 Binary files a/icons/mob/human_races/species/nabber/body_msw.dmi and /dev/null differ diff --git a/icons/mob/human_races/species/nabber/eyes.dmi b/icons/mob/human_races/species/nabber/eyes.dmi deleted file mode 100644 index 1401300689306..0000000000000 Binary files a/icons/mob/human_races/species/nabber/eyes.dmi and /dev/null differ diff --git a/icons/mob/human_races/species/nabber/msq/blood_mask.dmi b/icons/mob/human_races/species/nabber/msq/blood_mask.dmi deleted file mode 100644 index 3ca7e004a418d..0000000000000 Binary files a/icons/mob/human_races/species/nabber/msq/blood_mask.dmi and /dev/null differ diff --git a/icons/mob/human_races/species/nabber/msq/body.dmi b/icons/mob/human_races/species/nabber/msq/body.dmi deleted file mode 100644 index 432869e2962ee..0000000000000 Binary files a/icons/mob/human_races/species/nabber/msq/body.dmi and /dev/null differ diff --git a/icons/mob/human_races/species/nabber/msq/damage_mask.dmi b/icons/mob/human_races/species/nabber/msq/damage_mask.dmi deleted file mode 100644 index 08355e85522a3..0000000000000 Binary files a/icons/mob/human_races/species/nabber/msq/damage_mask.dmi and /dev/null differ diff --git a/icons/mob/human_races/species/nabber/msq/eyes.dmi b/icons/mob/human_races/species/nabber/msq/eyes.dmi deleted file mode 100644 index a6fb693dd599c..0000000000000 Binary files a/icons/mob/human_races/species/nabber/msq/eyes.dmi and /dev/null differ diff --git a/icons/mob/human_races/species/nabber/msq/preview.dmi b/icons/mob/human_races/species/nabber/msq/preview.dmi deleted file mode 100644 index 0af9aa1447ca7..0000000000000 Binary files a/icons/mob/human_races/species/nabber/msq/preview.dmi and /dev/null differ diff --git a/icons/mob/human_races/species/nabber/preview.dmi b/icons/mob/human_races/species/nabber/preview.dmi deleted file mode 100644 index eb50618ca9cec..0000000000000 Binary files a/icons/mob/human_races/species/nabber/preview.dmi and /dev/null differ diff --git a/icons/mob/human_races/species/nabber/threat.dmi b/icons/mob/human_races/species/nabber/threat.dmi deleted file mode 100644 index bf405c35247dd..0000000000000 Binary files a/icons/mob/human_races/species/nabber/threat.dmi and /dev/null differ diff --git a/icons/mob/human_races/species/shadow/body.dmi b/icons/mob/human_races/species/shadow/body.dmi deleted file mode 100644 index 47aee45e5b4e0..0000000000000 Binary files a/icons/mob/human_races/species/shadow/body.dmi and /dev/null differ diff --git a/icons/mob/human_races/species/shadow/husk.dmi b/icons/mob/human_races/species/shadow/husk.dmi deleted file mode 100644 index c1f14c0bb6313..0000000000000 Binary files a/icons/mob/human_races/species/shadow/husk.dmi and /dev/null differ diff --git a/icons/mob/human_races/species/shell/markings.dmi b/icons/mob/human_races/species/shell/markings.dmi deleted file mode 100644 index 53096d69f7b43..0000000000000 Binary files a/icons/mob/human_races/species/shell/markings.dmi and /dev/null differ diff --git a/icons/mob/human_races/species/skrell/body.dmi b/icons/mob/human_races/species/skrell/body.dmi deleted file mode 100644 index 5c54d40297542..0000000000000 Binary files a/icons/mob/human_races/species/skrell/body.dmi and /dev/null differ diff --git a/icons/mob/human_races/species/skrell/deformed_body.dmi b/icons/mob/human_races/species/skrell/deformed_body.dmi deleted file mode 100644 index 600daf5a3849d..0000000000000 Binary files a/icons/mob/human_races/species/skrell/deformed_body.dmi and /dev/null differ diff --git a/icons/mob/human_races/species/skrell/eyes.dmi b/icons/mob/human_races/species/skrell/eyes.dmi deleted file mode 100644 index ebc1b1387a444..0000000000000 Binary files a/icons/mob/human_races/species/skrell/eyes.dmi and /dev/null differ diff --git a/icons/mob/human_races/species/skrell/hair.dmi b/icons/mob/human_races/species/skrell/hair.dmi deleted file mode 100644 index 7d9ba0e8613e7..0000000000000 Binary files a/icons/mob/human_races/species/skrell/hair.dmi and /dev/null differ diff --git a/icons/mob/human_races/species/skrell/organs.dmi b/icons/mob/human_races/species/skrell/organs.dmi deleted file mode 100644 index 11774a8afb7f1..0000000000000 Binary files a/icons/mob/human_races/species/skrell/organs.dmi and /dev/null differ diff --git a/icons/mob/human_races/species/skrell/preview.dmi b/icons/mob/human_races/species/skrell/preview.dmi deleted file mode 100644 index 049ba698b23bf..0000000000000 Binary files a/icons/mob/human_races/species/skrell/preview.dmi and /dev/null differ diff --git a/icons/mob/human_races/species/starborn/body.dmi b/icons/mob/human_races/species/starborn/body.dmi deleted file mode 100644 index c55dc951af390..0000000000000 Binary files a/icons/mob/human_races/species/starborn/body.dmi and /dev/null differ diff --git a/icons/mob/human_races/species/starborn/husk.dmi b/icons/mob/human_races/species/starborn/husk.dmi deleted file mode 100644 index cb1bea82cc0d8..0000000000000 Binary files a/icons/mob/human_races/species/starborn/husk.dmi and /dev/null differ diff --git a/icons/mob/human_races/species/tattoos.dmi b/icons/mob/human_races/species/tattoos.dmi deleted file mode 100644 index cba939839ea68..0000000000000 Binary files a/icons/mob/human_races/species/tattoos.dmi and /dev/null differ diff --git a/icons/mob/human_races/species/template.dmi b/icons/mob/human_races/species/template.dmi deleted file mode 100644 index 15454971468fc..0000000000000 Binary files a/icons/mob/human_races/species/template.dmi and /dev/null differ diff --git a/icons/mob/human_races/species/template_tall.dmi b/icons/mob/human_races/species/template_tall.dmi deleted file mode 100644 index e9862bab5a657..0000000000000 Binary files a/icons/mob/human_races/species/template_tall.dmi and /dev/null differ diff --git a/icons/mob/human_races/species/unathi/body.dmi b/icons/mob/human_races/species/unathi/body.dmi deleted file mode 100644 index ba19b6c7731ca..0000000000000 Binary files a/icons/mob/human_races/species/unathi/body.dmi and /dev/null differ diff --git a/icons/mob/human_races/species/unathi/deformed_body.dmi b/icons/mob/human_races/species/unathi/deformed_body.dmi deleted file mode 100644 index 4d0f25e727769..0000000000000 Binary files a/icons/mob/human_races/species/unathi/deformed_body.dmi and /dev/null differ diff --git a/icons/mob/human_races/species/unathi/eyes.dmi b/icons/mob/human_races/species/unathi/eyes.dmi deleted file mode 100644 index 71f9a6a88e466..0000000000000 Binary files a/icons/mob/human_races/species/unathi/eyes.dmi and /dev/null differ diff --git a/icons/mob/human_races/species/unathi/hair.dmi b/icons/mob/human_races/species/unathi/hair.dmi deleted file mode 100644 index f3db642fcef15..0000000000000 Binary files a/icons/mob/human_races/species/unathi/hair.dmi and /dev/null differ diff --git a/icons/mob/human_races/species/unathi/husk.dmi b/icons/mob/human_races/species/unathi/husk.dmi deleted file mode 100644 index 53004b8437927..0000000000000 Binary files a/icons/mob/human_races/species/unathi/husk.dmi and /dev/null differ diff --git a/icons/mob/human_races/species/unathi/markings.dmi b/icons/mob/human_races/species/unathi/markings.dmi deleted file mode 100644 index 49663dea96fef..0000000000000 Binary files a/icons/mob/human_races/species/unathi/markings.dmi and /dev/null differ diff --git a/icons/mob/human_races/species/unathi/organs.dmi b/icons/mob/human_races/species/unathi/organs.dmi deleted file mode 100644 index f5a0299d4ea1c..0000000000000 Binary files a/icons/mob/human_races/species/unathi/organs.dmi and /dev/null differ diff --git a/icons/mob/human_races/species/unathi/preview.dmi b/icons/mob/human_races/species/unathi/preview.dmi deleted file mode 100644 index f5faa466cdd73..0000000000000 Binary files a/icons/mob/human_races/species/unathi/preview.dmi and /dev/null differ diff --git a/icons/mob/human_races/species/vox/armalis_body.dmi b/icons/mob/human_races/species/vox/armalis_body.dmi deleted file mode 100644 index 45b45c21b7561..0000000000000 Binary files a/icons/mob/human_races/species/vox/armalis_body.dmi and /dev/null differ diff --git a/icons/mob/human_races/species/vox/armalis_eyes.dmi b/icons/mob/human_races/species/vox/armalis_eyes.dmi deleted file mode 100644 index 53bd92ba683db..0000000000000 Binary files a/icons/mob/human_races/species/vox/armalis_eyes.dmi and /dev/null differ diff --git a/icons/mob/human_races/species/vox/armalis_husk.dmi b/icons/mob/human_races/species/vox/armalis_husk.dmi deleted file mode 100644 index 427e50d694b13..0000000000000 Binary files a/icons/mob/human_races/species/vox/armalis_husk.dmi and /dev/null differ diff --git a/icons/mob/human_races/species/vox/armalis_preview.dmi b/icons/mob/human_races/species/vox/armalis_preview.dmi deleted file mode 100644 index 29ced53af52fa..0000000000000 Binary files a/icons/mob/human_races/species/vox/armalis_preview.dmi and /dev/null differ diff --git a/icons/mob/human_races/species/vox/blood_mask.dmi b/icons/mob/human_races/species/vox/blood_mask.dmi deleted file mode 100644 index 91416abef51ec..0000000000000 Binary files a/icons/mob/human_races/species/vox/blood_mask.dmi and /dev/null differ diff --git a/icons/mob/human_races/species/vox/blood_mask_armalis.dmi b/icons/mob/human_races/species/vox/blood_mask_armalis.dmi deleted file mode 100644 index e36d2a0c4f1fa..0000000000000 Binary files a/icons/mob/human_races/species/vox/blood_mask_armalis.dmi and /dev/null differ diff --git a/icons/mob/human_races/species/vox/body.dmi b/icons/mob/human_races/species/vox/body.dmi deleted file mode 100644 index 533dd237c6591..0000000000000 Binary files a/icons/mob/human_races/species/vox/body.dmi and /dev/null differ diff --git a/icons/mob/human_races/species/vox/damage_mask.dmi b/icons/mob/human_races/species/vox/damage_mask.dmi deleted file mode 100644 index d81d1f788a96b..0000000000000 Binary files a/icons/mob/human_races/species/vox/damage_mask.dmi and /dev/null differ diff --git a/icons/mob/human_races/species/vox/damage_mask_armalis.dmi b/icons/mob/human_races/species/vox/damage_mask_armalis.dmi deleted file mode 100644 index ce9033eb5f350..0000000000000 Binary files a/icons/mob/human_races/species/vox/damage_mask_armalis.dmi and /dev/null differ diff --git a/icons/mob/human_races/species/vox/damage_overlay.dmi b/icons/mob/human_races/species/vox/damage_overlay.dmi deleted file mode 100644 index a3870528e8d92..0000000000000 Binary files a/icons/mob/human_races/species/vox/damage_overlay.dmi and /dev/null differ diff --git a/icons/mob/human_races/species/vox/damage_overlay_armalis.dmi b/icons/mob/human_races/species/vox/damage_overlay_armalis.dmi deleted file mode 100644 index d007b4d41ccc5..0000000000000 Binary files a/icons/mob/human_races/species/vox/damage_overlay_armalis.dmi and /dev/null differ diff --git a/icons/mob/human_races/species/vox/deformed_body.dmi b/icons/mob/human_races/species/vox/deformed_body.dmi deleted file mode 100644 index 12538fa0745ec..0000000000000 Binary files a/icons/mob/human_races/species/vox/deformed_body.dmi and /dev/null differ diff --git a/icons/mob/human_races/species/vox/eyes.dmi b/icons/mob/human_races/species/vox/eyes.dmi deleted file mode 100644 index bfbe90ddacbf3..0000000000000 Binary files a/icons/mob/human_races/species/vox/eyes.dmi and /dev/null differ diff --git a/icons/mob/human_races/species/vox/hair.dmi b/icons/mob/human_races/species/vox/hair.dmi deleted file mode 100644 index 07ab206a56b40..0000000000000 Binary files a/icons/mob/human_races/species/vox/hair.dmi and /dev/null differ diff --git a/icons/mob/human_races/species/vox/husk.dmi b/icons/mob/human_races/species/vox/husk.dmi deleted file mode 100644 index b7ab9e1215927..0000000000000 Binary files a/icons/mob/human_races/species/vox/husk.dmi and /dev/null differ diff --git a/icons/mob/light_overlays.dmi b/icons/mob/light_overlays.dmi deleted file mode 100644 index 31caab12e0f28..0000000000000 Binary files a/icons/mob/light_overlays.dmi and /dev/null differ diff --git a/icons/mob/limb_mask.dmi b/icons/mob/limb_mask.dmi deleted file mode 100644 index ba4d0e34566d0..0000000000000 Binary files a/icons/mob/limb_mask.dmi and /dev/null differ diff --git a/icons/mob/mob.dmi b/icons/mob/mob.dmi deleted file mode 100644 index ab04df4c10550..0000000000000 Binary files a/icons/mob/mob.dmi and /dev/null differ diff --git a/icons/mob/monitor_icons.dmi b/icons/mob/monitor_icons.dmi deleted file mode 100644 index b82955c992bdf..0000000000000 Binary files a/icons/mob/monitor_icons.dmi and /dev/null differ diff --git a/icons/mob/nabber_face.dmi b/icons/mob/nabber_face.dmi deleted file mode 100644 index 1bc27b9e45ad0..0000000000000 Binary files a/icons/mob/nabber_face.dmi and /dev/null differ diff --git a/icons/mob/onmob/items/lefthand.dmi b/icons/mob/onmob/items/lefthand.dmi deleted file mode 100644 index 9a71579a3ccef..0000000000000 Binary files a/icons/mob/onmob/items/lefthand.dmi and /dev/null differ diff --git a/icons/mob/onmob/items/lefthand_backpacks.dmi b/icons/mob/onmob/items/lefthand_backpacks.dmi deleted file mode 100644 index 71647eb085a65..0000000000000 Binary files a/icons/mob/onmob/items/lefthand_backpacks.dmi and /dev/null differ diff --git a/icons/mob/onmob/items/lefthand_guns.dmi b/icons/mob/onmob/items/lefthand_guns.dmi deleted file mode 100644 index af51a2fb5c3b2..0000000000000 Binary files a/icons/mob/onmob/items/lefthand_guns.dmi and /dev/null differ diff --git a/icons/mob/onmob/items/lefthand_guns_secure.dmi b/icons/mob/onmob/items/lefthand_guns_secure.dmi deleted file mode 100644 index b7ea0250dbcb7..0000000000000 Binary files a/icons/mob/onmob/items/lefthand_guns_secure.dmi and /dev/null differ diff --git a/icons/mob/onmob/items/lefthand_hats.dmi b/icons/mob/onmob/items/lefthand_hats.dmi deleted file mode 100644 index d8241d623ba78..0000000000000 Binary files a/icons/mob/onmob/items/lefthand_hats.dmi and /dev/null differ diff --git a/icons/mob/onmob/items/lefthand_holder.dmi b/icons/mob/onmob/items/lefthand_holder.dmi deleted file mode 100644 index d6ab3b38f95a2..0000000000000 Binary files a/icons/mob/onmob/items/lefthand_holder.dmi and /dev/null differ diff --git a/icons/mob/onmob/items/lefthand_spacesuits.dmi b/icons/mob/onmob/items/lefthand_spacesuits.dmi deleted file mode 100644 index a2a812e1ed62b..0000000000000 Binary files a/icons/mob/onmob/items/lefthand_spacesuits.dmi and /dev/null differ diff --git a/icons/mob/onmob/items/lefthand_uniforms.dmi b/icons/mob/onmob/items/lefthand_uniforms.dmi deleted file mode 100644 index 03adf341be49b..0000000000000 Binary files a/icons/mob/onmob/items/lefthand_uniforms.dmi and /dev/null differ diff --git a/icons/mob/onmob/items/righthand.dmi b/icons/mob/onmob/items/righthand.dmi deleted file mode 100644 index 02095294f0fdb..0000000000000 Binary files a/icons/mob/onmob/items/righthand.dmi and /dev/null differ diff --git a/icons/mob/onmob/items/righthand_backpacks.dmi b/icons/mob/onmob/items/righthand_backpacks.dmi deleted file mode 100644 index c06a74090036d..0000000000000 Binary files a/icons/mob/onmob/items/righthand_backpacks.dmi and /dev/null differ diff --git a/icons/mob/onmob/items/righthand_guns.dmi b/icons/mob/onmob/items/righthand_guns.dmi deleted file mode 100644 index 19a4c84d78ecf..0000000000000 Binary files a/icons/mob/onmob/items/righthand_guns.dmi and /dev/null differ diff --git a/icons/mob/onmob/items/righthand_guns_secure.dmi b/icons/mob/onmob/items/righthand_guns_secure.dmi deleted file mode 100644 index d2f8c4400d540..0000000000000 Binary files a/icons/mob/onmob/items/righthand_guns_secure.dmi and /dev/null differ diff --git a/icons/mob/onmob/items/righthand_hats.dmi b/icons/mob/onmob/items/righthand_hats.dmi deleted file mode 100644 index 32861462a9856..0000000000000 Binary files a/icons/mob/onmob/items/righthand_hats.dmi and /dev/null differ diff --git a/icons/mob/onmob/items/righthand_holder.dmi b/icons/mob/onmob/items/righthand_holder.dmi deleted file mode 100644 index 751cd51d743d6..0000000000000 Binary files a/icons/mob/onmob/items/righthand_holder.dmi and /dev/null differ diff --git a/icons/mob/onmob/items/righthand_spacesuits.dmi b/icons/mob/onmob/items/righthand_spacesuits.dmi deleted file mode 100644 index e0a3f2cd06ae1..0000000000000 Binary files a/icons/mob/onmob/items/righthand_spacesuits.dmi and /dev/null differ diff --git a/icons/mob/onmob/items/righthand_uniforms.dmi b/icons/mob/onmob/items/righthand_uniforms.dmi deleted file mode 100644 index 16eecfd1bef8f..0000000000000 Binary files a/icons/mob/onmob/items/righthand_uniforms.dmi and /dev/null differ diff --git a/icons/mob/onmob/onmob_accessories.dmi b/icons/mob/onmob/onmob_accessories.dmi deleted file mode 100644 index ddb560af29c54..0000000000000 Binary files a/icons/mob/onmob/onmob_accessories.dmi and /dev/null differ diff --git a/icons/mob/onmob/onmob_back.dmi b/icons/mob/onmob/onmob_back.dmi deleted file mode 100644 index 721dedd071e1c..0000000000000 Binary files a/icons/mob/onmob/onmob_back.dmi and /dev/null differ diff --git a/icons/mob/onmob/onmob_belt.dmi b/icons/mob/onmob/onmob_belt.dmi deleted file mode 100644 index e144620b7ed18..0000000000000 Binary files a/icons/mob/onmob/onmob_belt.dmi and /dev/null differ diff --git a/icons/mob/onmob/onmob_belt_mirror.dmi b/icons/mob/onmob/onmob_belt_mirror.dmi deleted file mode 100644 index 3ae9a3e52ec8f..0000000000000 Binary files a/icons/mob/onmob/onmob_belt_mirror.dmi and /dev/null differ diff --git a/icons/mob/onmob/onmob_cuff.dmi b/icons/mob/onmob/onmob_cuff.dmi deleted file mode 100644 index e846904e3264e..0000000000000 Binary files a/icons/mob/onmob/onmob_cuff.dmi and /dev/null differ diff --git a/icons/mob/onmob/onmob_ears.dmi b/icons/mob/onmob/onmob_ears.dmi deleted file mode 100644 index 3195521b74e90..0000000000000 Binary files a/icons/mob/onmob/onmob_ears.dmi and /dev/null differ diff --git a/icons/mob/onmob/onmob_eyes.dmi b/icons/mob/onmob/onmob_eyes.dmi deleted file mode 100644 index 313c672dbbeb5..0000000000000 Binary files a/icons/mob/onmob/onmob_eyes.dmi and /dev/null differ diff --git a/icons/mob/onmob/onmob_feet.dmi b/icons/mob/onmob/onmob_feet.dmi deleted file mode 100644 index 50d58350294d8..0000000000000 Binary files a/icons/mob/onmob/onmob_feet.dmi and /dev/null differ diff --git a/icons/mob/onmob/onmob_hands.dmi b/icons/mob/onmob/onmob_hands.dmi deleted file mode 100644 index 7aeaba6d21a2f..0000000000000 Binary files a/icons/mob/onmob/onmob_hands.dmi and /dev/null differ diff --git a/icons/mob/onmob/onmob_head.dmi b/icons/mob/onmob/onmob_head.dmi deleted file mode 100644 index 984878dc23af3..0000000000000 Binary files a/icons/mob/onmob/onmob_head.dmi and /dev/null differ diff --git a/icons/mob/onmob/onmob_id.dmi b/icons/mob/onmob/onmob_id.dmi deleted file mode 100644 index b677a36877410..0000000000000 Binary files a/icons/mob/onmob/onmob_id.dmi and /dev/null differ diff --git a/icons/mob/onmob/onmob_mask.dmi b/icons/mob/onmob/onmob_mask.dmi deleted file mode 100644 index 1f00b2ed7e17e..0000000000000 Binary files a/icons/mob/onmob/onmob_mask.dmi and /dev/null differ diff --git a/icons/mob/onmob/onmob_modular_armor.dmi b/icons/mob/onmob/onmob_modular_armor.dmi deleted file mode 100644 index fbd4ffb9af35a..0000000000000 Binary files a/icons/mob/onmob/onmob_modular_armor.dmi and /dev/null differ diff --git a/icons/mob/onmob/onmob_rig_back.dmi b/icons/mob/onmob/onmob_rig_back.dmi deleted file mode 100644 index 77936bd7dbcad..0000000000000 Binary files a/icons/mob/onmob/onmob_rig_back.dmi and /dev/null differ diff --git a/icons/mob/onmob/onmob_rig_modules.dmi b/icons/mob/onmob/onmob_rig_modules.dmi deleted file mode 100644 index 2330c31177f2b..0000000000000 Binary files a/icons/mob/onmob/onmob_rig_modules.dmi and /dev/null differ diff --git a/icons/mob/onmob/onmob_suit.dmi b/icons/mob/onmob/onmob_suit.dmi deleted file mode 100644 index e88c31eb15fd7..0000000000000 Binary files a/icons/mob/onmob/onmob_suit.dmi and /dev/null differ diff --git a/icons/mob/onmob/onmob_under.dmi b/icons/mob/onmob/onmob_under.dmi deleted file mode 100644 index 996605755a561..0000000000000 Binary files a/icons/mob/onmob/onmob_under.dmi and /dev/null differ diff --git a/icons/mob/onmob/onmob_under_corporate.dmi b/icons/mob/onmob/onmob_under_corporate.dmi deleted file mode 100644 index f19153dd7d53d..0000000000000 Binary files a/icons/mob/onmob/onmob_under_corporate.dmi and /dev/null differ diff --git a/icons/mob/onmob/onmob_under_pants.dmi b/icons/mob/onmob/onmob_under_pants.dmi deleted file mode 100644 index f0f79f3db951c..0000000000000 Binary files a/icons/mob/onmob/onmob_under_pants.dmi and /dev/null differ diff --git a/icons/mob/pai.dmi b/icons/mob/pai.dmi deleted file mode 100644 index 873704efd5012..0000000000000 Binary files a/icons/mob/pai.dmi and /dev/null differ diff --git a/icons/mob/parrot.dmi b/icons/mob/parrot.dmi deleted file mode 100644 index 1a7ffcc8a470f..0000000000000 Binary files a/icons/mob/parrot.dmi and /dev/null differ diff --git a/icons/mob/robots.dmi b/icons/mob/robots.dmi deleted file mode 100644 index 0efc10dd7a738..0000000000000 Binary files a/icons/mob/robots.dmi and /dev/null differ diff --git a/icons/mob/robots_drones.dmi b/icons/mob/robots_drones.dmi deleted file mode 100644 index d547d637e9d2f..0000000000000 Binary files a/icons/mob/robots_drones.dmi and /dev/null differ diff --git a/icons/mob/robots_flying.dmi b/icons/mob/robots_flying.dmi deleted file mode 100644 index 45cdf4b77d51b..0000000000000 Binary files a/icons/mob/robots_flying.dmi and /dev/null differ diff --git a/icons/mob/robots_gibs.dmi b/icons/mob/robots_gibs.dmi deleted file mode 100644 index ab92dedb14258..0000000000000 Binary files a/icons/mob/robots_gibs.dmi and /dev/null differ diff --git a/icons/mob/screen/midnight.dmi b/icons/mob/screen/midnight.dmi deleted file mode 100644 index b8785536fe155..0000000000000 Binary files a/icons/mob/screen/midnight.dmi and /dev/null differ diff --git a/icons/mob/screen/minimalist.dmi b/icons/mob/screen/minimalist.dmi deleted file mode 100644 index 0ebcc03513707..0000000000000 Binary files a/icons/mob/screen/minimalist.dmi and /dev/null differ diff --git a/icons/mob/screen/old-noborder.dmi b/icons/mob/screen/old-noborder.dmi deleted file mode 100644 index aefb6146f1f41..0000000000000 Binary files a/icons/mob/screen/old-noborder.dmi and /dev/null differ diff --git a/icons/mob/screen/old.dmi b/icons/mob/screen/old.dmi deleted file mode 100644 index 0a03f1b6cade0..0000000000000 Binary files a/icons/mob/screen/old.dmi and /dev/null differ diff --git a/icons/mob/screen/orange.dmi b/icons/mob/screen/orange.dmi deleted file mode 100644 index 1f0ffecd553f8..0000000000000 Binary files a/icons/mob/screen/orange.dmi and /dev/null differ diff --git a/icons/mob/screen/pai.dmi b/icons/mob/screen/pai.dmi deleted file mode 100644 index a73ff1b8e7824..0000000000000 Binary files a/icons/mob/screen/pai.dmi and /dev/null differ diff --git a/icons/mob/screen/white.dmi b/icons/mob/screen/white.dmi deleted file mode 100644 index 0f72124c56759..0000000000000 Binary files a/icons/mob/screen/white.dmi and /dev/null differ diff --git a/icons/mob/screen1.dmi b/icons/mob/screen1.dmi deleted file mode 100644 index 7f8db4256da59..0000000000000 Binary files a/icons/mob/screen1.dmi and /dev/null differ diff --git a/icons/mob/screen1_Midnight.dmi b/icons/mob/screen1_Midnight.dmi deleted file mode 100644 index bea0a24813dd5..0000000000000 Binary files a/icons/mob/screen1_Midnight.dmi and /dev/null differ diff --git a/icons/mob/screen1_Orange.dmi b/icons/mob/screen1_Orange.dmi deleted file mode 100644 index 08b503360cdff..0000000000000 Binary files a/icons/mob/screen1_Orange.dmi and /dev/null differ diff --git a/icons/mob/screen1_White.dmi b/icons/mob/screen1_White.dmi deleted file mode 100644 index 50f3e859f504b..0000000000000 Binary files a/icons/mob/screen1_White.dmi and /dev/null differ diff --git a/icons/mob/screen1_action.dmi b/icons/mob/screen1_action.dmi deleted file mode 100644 index ac3232918eb37..0000000000000 Binary files a/icons/mob/screen1_action.dmi and /dev/null differ diff --git a/icons/mob/screen1_alien.dmi b/icons/mob/screen1_alien.dmi deleted file mode 100644 index ca11c4254d863..0000000000000 Binary files a/icons/mob/screen1_alien.dmi and /dev/null differ diff --git a/icons/mob/screen1_construct.dmi b/icons/mob/screen1_construct.dmi deleted file mode 100644 index 67a37ccd73885..0000000000000 Binary files a/icons/mob/screen1_construct.dmi and /dev/null differ diff --git a/icons/mob/screen1_health.dmi b/icons/mob/screen1_health.dmi deleted file mode 100644 index 9cd7a4134202f..0000000000000 Binary files a/icons/mob/screen1_health.dmi and /dev/null differ diff --git a/icons/mob/screen1_old.dmi b/icons/mob/screen1_old.dmi deleted file mode 100644 index 3dc52d3d3b859..0000000000000 Binary files a/icons/mob/screen1_old.dmi and /dev/null differ diff --git a/icons/mob/screen1_robot.dmi b/icons/mob/screen1_robot.dmi deleted file mode 100644 index a444af60d5f3a..0000000000000 Binary files a/icons/mob/screen1_robot.dmi and /dev/null differ diff --git a/icons/mob/screen1_stats.dmi b/icons/mob/screen1_stats.dmi deleted file mode 100644 index 381f6a366023a..0000000000000 Binary files a/icons/mob/screen1_stats.dmi and /dev/null differ diff --git a/icons/mob/screen_full.dmi b/icons/mob/screen_full.dmi deleted file mode 100644 index e8602a41cedc3..0000000000000 Binary files a/icons/mob/screen_full.dmi and /dev/null differ diff --git a/icons/mob/screen_gen.dmi b/icons/mob/screen_gen.dmi deleted file mode 100644 index 436fb1169a2d3..0000000000000 Binary files a/icons/mob/screen_gen.dmi and /dev/null differ diff --git a/icons/mob/screen_phenomena.dmi b/icons/mob/screen_phenomena.dmi deleted file mode 100644 index f1d05fa97306d..0000000000000 Binary files a/icons/mob/screen_phenomena.dmi and /dev/null differ diff --git a/icons/mob/screen_spells.dmi b/icons/mob/screen_spells.dmi deleted file mode 100644 index 50be07d787b8c..0000000000000 Binary files a/icons/mob/screen_spells.dmi and /dev/null differ diff --git a/icons/mob/simple_animal/animal.dmi b/icons/mob/simple_animal/animal.dmi deleted file mode 100644 index d450d68fb01bb..0000000000000 Binary files a/icons/mob/simple_animal/animal.dmi and /dev/null differ diff --git a/icons/mob/simple_animal/antlion.dmi b/icons/mob/simple_animal/antlion.dmi deleted file mode 100644 index 6ae64b028d209..0000000000000 Binary files a/icons/mob/simple_animal/antlion.dmi and /dev/null differ diff --git a/icons/mob/simple_animal/aquatic.dmi b/icons/mob/simple_animal/aquatic.dmi deleted file mode 100644 index a5d06a467aa1b..0000000000000 Binary files a/icons/mob/simple_animal/aquatic.dmi and /dev/null differ diff --git a/icons/mob/simple_animal/bats.dmi b/icons/mob/simple_animal/bats.dmi deleted file mode 100644 index 7446693507730..0000000000000 Binary files a/icons/mob/simple_animal/bats.dmi and /dev/null differ diff --git a/icons/mob/simple_animal/biocraps.dmi b/icons/mob/simple_animal/biocraps.dmi deleted file mode 100644 index 786ff05f51766..0000000000000 Binary files a/icons/mob/simple_animal/biocraps.dmi and /dev/null differ diff --git a/icons/mob/simple_animal/corgi_back.dmi b/icons/mob/simple_animal/corgi_back.dmi deleted file mode 100644 index 81626df033357..0000000000000 Binary files a/icons/mob/simple_animal/corgi_back.dmi and /dev/null differ diff --git a/icons/mob/simple_animal/corgi_head.dmi b/icons/mob/simple_animal/corgi_head.dmi deleted file mode 100644 index 105bdf475027b..0000000000000 Binary files a/icons/mob/simple_animal/corgi_head.dmi and /dev/null differ diff --git a/icons/mob/simple_animal/critter.dmi b/icons/mob/simple_animal/critter.dmi deleted file mode 100644 index 043b388e906cc..0000000000000 Binary files a/icons/mob/simple_animal/critter.dmi and /dev/null differ diff --git a/icons/mob/simple_animal/crow.dmi b/icons/mob/simple_animal/crow.dmi deleted file mode 100644 index 8cefef2a26aa9..0000000000000 Binary files a/icons/mob/simple_animal/crow.dmi and /dev/null differ diff --git a/icons/mob/simple_animal/drake.dmi b/icons/mob/simple_animal/drake.dmi deleted file mode 100644 index 8eeaf45b2b48c..0000000000000 Binary files a/icons/mob/simple_animal/drake.dmi and /dev/null differ diff --git a/icons/mob/simple_animal/goose.dmi b/icons/mob/simple_animal/goose.dmi deleted file mode 100644 index cc5e3039e3e94..0000000000000 Binary files a/icons/mob/simple_animal/goose.dmi and /dev/null differ diff --git a/icons/mob/simple_animal/hivebot.dmi b/icons/mob/simple_animal/hivebot.dmi deleted file mode 100644 index e18209733d8fc..0000000000000 Binary files a/icons/mob/simple_animal/hivebot.dmi and /dev/null differ diff --git a/icons/mob/simple_animal/juvenile_space_whale.dmi b/icons/mob/simple_animal/juvenile_space_whale.dmi deleted file mode 100644 index 8f54eb958b5f7..0000000000000 Binary files a/icons/mob/simple_animal/juvenile_space_whale.dmi and /dev/null differ diff --git a/icons/mob/simple_animal/king_of_goats.dmi b/icons/mob/simple_animal/king_of_goats.dmi deleted file mode 100644 index 69b67ff2c4f51..0000000000000 Binary files a/icons/mob/simple_animal/king_of_goats.dmi and /dev/null differ diff --git a/icons/mob/simple_animal/livestock.dmi b/icons/mob/simple_animal/livestock.dmi deleted file mode 100644 index 538e14b1ea101..0000000000000 Binary files a/icons/mob/simple_animal/livestock.dmi and /dev/null differ diff --git a/icons/mob/simple_animal/megabot.dmi b/icons/mob/simple_animal/megabot.dmi deleted file mode 100644 index 0d0318bdb3914..0000000000000 Binary files a/icons/mob/simple_animal/megabot.dmi and /dev/null differ diff --git a/icons/mob/simple_animal/megaleech.dmi b/icons/mob/simple_animal/megaleech.dmi deleted file mode 100644 index 174ad10865484..0000000000000 Binary files a/icons/mob/simple_animal/megaleech.dmi and /dev/null differ diff --git a/icons/mob/simple_animal/nightmaremonsters.dmi b/icons/mob/simple_animal/nightmaremonsters.dmi deleted file mode 100644 index 2af0c01e289cc..0000000000000 Binary files a/icons/mob/simple_animal/nightmaremonsters.dmi and /dev/null differ diff --git a/icons/mob/simple_animal/parrot.dmi b/icons/mob/simple_animal/parrot.dmi deleted file mode 100644 index 1fc62b5f84b17..0000000000000 Binary files a/icons/mob/simple_animal/parrot.dmi and /dev/null differ diff --git a/icons/mob/simple_animal/possum.dmi b/icons/mob/simple_animal/possum.dmi deleted file mode 100644 index dac7e7e7c6f95..0000000000000 Binary files a/icons/mob/simple_animal/possum.dmi and /dev/null differ diff --git a/icons/mob/simple_animal/slimes.dmi b/icons/mob/simple_animal/slimes.dmi deleted file mode 100644 index 3e6b915efa864..0000000000000 Binary files a/icons/mob/simple_animal/slimes.dmi and /dev/null differ diff --git a/icons/mob/simple_animal/space_carp.dmi b/icons/mob/simple_animal/space_carp.dmi deleted file mode 100644 index 5f4b56fbb9060..0000000000000 Binary files a/icons/mob/simple_animal/space_carp.dmi and /dev/null differ diff --git a/icons/mob/simple_animal/space_pike.dmi b/icons/mob/simple_animal/space_pike.dmi deleted file mode 100644 index 9c0ede38a7d6d..0000000000000 Binary files a/icons/mob/simple_animal/space_pike.dmi and /dev/null differ diff --git a/icons/mob/simple_animal/space_shark.dmi b/icons/mob/simple_animal/space_shark.dmi deleted file mode 100644 index 0b52898d39642..0000000000000 Binary files a/icons/mob/simple_animal/space_shark.dmi and /dev/null differ diff --git a/icons/mob/simple_animal/space_whale.dmi b/icons/mob/simple_animal/space_whale.dmi deleted file mode 100644 index d8bb1795613f3..0000000000000 Binary files a/icons/mob/simple_animal/space_whale.dmi and /dev/null differ diff --git a/icons/mob/simple_animal/spider.dmi b/icons/mob/simple_animal/spider.dmi deleted file mode 100644 index 698e26d5c4d9c..0000000000000 Binary files a/icons/mob/simple_animal/spider.dmi and /dev/null differ diff --git a/icons/mob/species/monkey/onmob_accessories_monkey.dmi b/icons/mob/species/monkey/onmob_accessories_monkey.dmi deleted file mode 100644 index 6055ae9c39e90..0000000000000 Binary files a/icons/mob/species/monkey/onmob_accessories_monkey.dmi and /dev/null differ diff --git a/icons/mob/species/monkey/onmob_under_monkey.dmi b/icons/mob/species/monkey/onmob_under_monkey.dmi deleted file mode 100644 index f714af376dc74..0000000000000 Binary files a/icons/mob/species/monkey/onmob_under_monkey.dmi and /dev/null differ diff --git a/icons/mob/species/nabber/msq/onmob_back_msq.dmi b/icons/mob/species/nabber/msq/onmob_back_msq.dmi deleted file mode 100644 index dbc8a770942f2..0000000000000 Binary files a/icons/mob/species/nabber/msq/onmob_back_msq.dmi and /dev/null differ diff --git a/icons/mob/species/nabber/msq/onmob_belt_msq.dmi b/icons/mob/species/nabber/msq/onmob_belt_msq.dmi deleted file mode 100644 index 5518204b16bb8..0000000000000 Binary files a/icons/mob/species/nabber/msq/onmob_belt_msq.dmi and /dev/null differ diff --git a/icons/mob/species/nabber/msq/onmob_hands_msq.dmi b/icons/mob/species/nabber/msq/onmob_hands_msq.dmi deleted file mode 100644 index 2abeb95e2ea48..0000000000000 Binary files a/icons/mob/species/nabber/msq/onmob_hands_msq.dmi and /dev/null differ diff --git a/icons/mob/species/nabber/msq/onmob_head_msq.dmi b/icons/mob/species/nabber/msq/onmob_head_msq.dmi deleted file mode 100644 index 697e465d7f1be..0000000000000 Binary files a/icons/mob/species/nabber/msq/onmob_head_msq.dmi and /dev/null differ diff --git a/icons/mob/species/nabber/msq/onmob_lefthand_particle_rifle.dmi b/icons/mob/species/nabber/msq/onmob_lefthand_particle_rifle.dmi deleted file mode 100644 index a814e100491d2..0000000000000 Binary files a/icons/mob/species/nabber/msq/onmob_lefthand_particle_rifle.dmi and /dev/null differ diff --git a/icons/mob/species/nabber/msq/onmob_mask_msq.dmi b/icons/mob/species/nabber/msq/onmob_mask_msq.dmi deleted file mode 100644 index 6cd5e0b0fba97..0000000000000 Binary files a/icons/mob/species/nabber/msq/onmob_mask_msq.dmi and /dev/null differ diff --git a/icons/mob/species/nabber/msq/onmob_righthand_particle_rifle.dmi b/icons/mob/species/nabber/msq/onmob_righthand_particle_rifle.dmi deleted file mode 100644 index 931aa75bfc8d4..0000000000000 Binary files a/icons/mob/species/nabber/msq/onmob_righthand_particle_rifle.dmi and /dev/null differ diff --git a/icons/mob/species/nabber/msq/onmob_suit_msq.dmi b/icons/mob/species/nabber/msq/onmob_suit_msq.dmi deleted file mode 100644 index 844fe09c3d4a5..0000000000000 Binary files a/icons/mob/species/nabber/msq/onmob_suit_msq.dmi and /dev/null differ diff --git a/icons/mob/species/nabber/msq/onmob_under_msq.dmi b/icons/mob/species/nabber/msq/onmob_under_msq.dmi deleted file mode 100644 index 6d770ddfbd70b..0000000000000 Binary files a/icons/mob/species/nabber/msq/onmob_under_msq.dmi and /dev/null differ diff --git a/icons/mob/species/nabber/onmob_accessories_gas.dmi b/icons/mob/species/nabber/onmob_accessories_gas.dmi deleted file mode 100644 index 90d5355875e6f..0000000000000 Binary files a/icons/mob/species/nabber/onmob_accessories_gas.dmi and /dev/null differ diff --git a/icons/mob/species/nabber/onmob_back_gas.dmi b/icons/mob/species/nabber/onmob_back_gas.dmi deleted file mode 100644 index 623e01fa472b2..0000000000000 Binary files a/icons/mob/species/nabber/onmob_back_gas.dmi and /dev/null differ diff --git a/icons/mob/species/nabber/onmob_belt_gas.dmi b/icons/mob/species/nabber/onmob_belt_gas.dmi deleted file mode 100644 index 47062b7344431..0000000000000 Binary files a/icons/mob/species/nabber/onmob_belt_gas.dmi and /dev/null differ diff --git a/icons/mob/species/nabber/onmob_hands_gas.dmi b/icons/mob/species/nabber/onmob_hands_gas.dmi deleted file mode 100644 index 442a1e7bab831..0000000000000 Binary files a/icons/mob/species/nabber/onmob_hands_gas.dmi and /dev/null differ diff --git a/icons/mob/species/nabber/onmob_head_gas.dmi b/icons/mob/species/nabber/onmob_head_gas.dmi deleted file mode 100644 index 1836cd0a96a7b..0000000000000 Binary files a/icons/mob/species/nabber/onmob_head_gas.dmi and /dev/null differ diff --git a/icons/mob/species/nabber/onmob_lefthand_particle_rifle.dmi b/icons/mob/species/nabber/onmob_lefthand_particle_rifle.dmi deleted file mode 100644 index 2b520e8f3243a..0000000000000 Binary files a/icons/mob/species/nabber/onmob_lefthand_particle_rifle.dmi and /dev/null differ diff --git a/icons/mob/species/nabber/onmob_mask_gas.dmi b/icons/mob/species/nabber/onmob_mask_gas.dmi deleted file mode 100644 index 9af4fc1b1d391..0000000000000 Binary files a/icons/mob/species/nabber/onmob_mask_gas.dmi and /dev/null differ diff --git a/icons/mob/species/nabber/onmob_righthand_particle_rifle.dmi b/icons/mob/species/nabber/onmob_righthand_particle_rifle.dmi deleted file mode 100644 index 583a6783fc3a6..0000000000000 Binary files a/icons/mob/species/nabber/onmob_righthand_particle_rifle.dmi and /dev/null differ diff --git a/icons/mob/species/nabber/onmob_suit_gas.dmi b/icons/mob/species/nabber/onmob_suit_gas.dmi deleted file mode 100644 index de9ca34343f9e..0000000000000 Binary files a/icons/mob/species/nabber/onmob_suit_gas.dmi and /dev/null differ diff --git a/icons/mob/species/nabber/onmob_under_gas.dmi b/icons/mob/species/nabber/onmob_under_gas.dmi deleted file mode 100644 index 3bff89b1b62b6..0000000000000 Binary files a/icons/mob/species/nabber/onmob_under_gas.dmi and /dev/null differ diff --git a/icons/mob/species/skrell/onmob_back_rig_skrell.dmi b/icons/mob/species/skrell/onmob_back_rig_skrell.dmi deleted file mode 100644 index 9c61a0c93692c..0000000000000 Binary files a/icons/mob/species/skrell/onmob_back_rig_skrell.dmi and /dev/null differ diff --git a/icons/mob/species/skrell/onmob_chest_rig_skrell.dmi b/icons/mob/species/skrell/onmob_chest_rig_skrell.dmi deleted file mode 100644 index 977f94950d0c4..0000000000000 Binary files a/icons/mob/species/skrell/onmob_chest_rig_skrell.dmi and /dev/null differ diff --git a/icons/mob/species/skrell/onmob_feet_rig_skrell.dmi b/icons/mob/species/skrell/onmob_feet_rig_skrell.dmi deleted file mode 100644 index c426b4ba1d4a1..0000000000000 Binary files a/icons/mob/species/skrell/onmob_feet_rig_skrell.dmi and /dev/null differ diff --git a/icons/mob/species/skrell/onmob_hands_rig_skrell.dmi b/icons/mob/species/skrell/onmob_hands_rig_skrell.dmi deleted file mode 100644 index b6c626c42c849..0000000000000 Binary files a/icons/mob/species/skrell/onmob_hands_rig_skrell.dmi and /dev/null differ diff --git a/icons/mob/species/skrell/onmob_head_rig_skrell.dmi b/icons/mob/species/skrell/onmob_head_rig_skrell.dmi deleted file mode 100644 index 4603b2509447c..0000000000000 Binary files a/icons/mob/species/skrell/onmob_head_rig_skrell.dmi and /dev/null differ diff --git a/icons/mob/species/skrell/onmob_head_skrell.dmi b/icons/mob/species/skrell/onmob_head_skrell.dmi deleted file mode 100644 index 63ccbac1d9b3e..0000000000000 Binary files a/icons/mob/species/skrell/onmob_head_skrell.dmi and /dev/null differ diff --git a/icons/mob/species/skrell/onmob_suit_skrell.dmi b/icons/mob/species/skrell/onmob_suit_skrell.dmi deleted file mode 100644 index d798abe650db7..0000000000000 Binary files a/icons/mob/species/skrell/onmob_suit_skrell.dmi and /dev/null differ diff --git a/icons/mob/species/unathi/generated/onmob_accessories_unathi.dmi b/icons/mob/species/unathi/generated/onmob_accessories_unathi.dmi deleted file mode 100644 index f8b8c0a789997..0000000000000 Binary files a/icons/mob/species/unathi/generated/onmob_accessories_unathi.dmi and /dev/null differ diff --git a/icons/mob/species/unathi/generated/onmob_back_unathi.dmi b/icons/mob/species/unathi/generated/onmob_back_unathi.dmi deleted file mode 100644 index ab70a766259aa..0000000000000 Binary files a/icons/mob/species/unathi/generated/onmob_back_unathi.dmi and /dev/null differ diff --git a/icons/mob/species/unathi/generated/onmob_belt_mirror_unathi.dmi b/icons/mob/species/unathi/generated/onmob_belt_mirror_unathi.dmi deleted file mode 100644 index f5b9e961abcc1..0000000000000 Binary files a/icons/mob/species/unathi/generated/onmob_belt_mirror_unathi.dmi and /dev/null differ diff --git a/icons/mob/species/unathi/generated/onmob_belt_unathi.dmi b/icons/mob/species/unathi/generated/onmob_belt_unathi.dmi deleted file mode 100644 index c0c6d6b9ef303..0000000000000 Binary files a/icons/mob/species/unathi/generated/onmob_belt_unathi.dmi and /dev/null differ diff --git a/icons/mob/species/unathi/generated/onmob_ears_unathi.dmi b/icons/mob/species/unathi/generated/onmob_ears_unathi.dmi deleted file mode 100644 index 412e8982f9cdc..0000000000000 Binary files a/icons/mob/species/unathi/generated/onmob_ears_unathi.dmi and /dev/null differ diff --git a/icons/mob/species/unathi/generated/onmob_eyes_unathi.dmi b/icons/mob/species/unathi/generated/onmob_eyes_unathi.dmi deleted file mode 100644 index e8cce41113440..0000000000000 Binary files a/icons/mob/species/unathi/generated/onmob_eyes_unathi.dmi and /dev/null differ diff --git a/icons/mob/species/unathi/generated/onmob_feet_unathi.dmi b/icons/mob/species/unathi/generated/onmob_feet_unathi.dmi deleted file mode 100644 index 3427f26929f61..0000000000000 Binary files a/icons/mob/species/unathi/generated/onmob_feet_unathi.dmi and /dev/null differ diff --git a/icons/mob/species/unathi/generated/onmob_hands_unathi.dmi b/icons/mob/species/unathi/generated/onmob_hands_unathi.dmi deleted file mode 100644 index 17bc5a26207cb..0000000000000 Binary files a/icons/mob/species/unathi/generated/onmob_hands_unathi.dmi and /dev/null differ diff --git a/icons/mob/species/unathi/generated/onmob_head_unathi.dmi b/icons/mob/species/unathi/generated/onmob_head_unathi.dmi deleted file mode 100644 index 53a381318d920..0000000000000 Binary files a/icons/mob/species/unathi/generated/onmob_head_unathi.dmi and /dev/null differ diff --git a/icons/mob/species/unathi/generated/onmob_id_unathi.dmi b/icons/mob/species/unathi/generated/onmob_id_unathi.dmi deleted file mode 100644 index 6445aeb8083a4..0000000000000 Binary files a/icons/mob/species/unathi/generated/onmob_id_unathi.dmi and /dev/null differ diff --git a/icons/mob/species/unathi/generated/onmob_mask_unathi.dmi b/icons/mob/species/unathi/generated/onmob_mask_unathi.dmi deleted file mode 100644 index e4688021f687f..0000000000000 Binary files a/icons/mob/species/unathi/generated/onmob_mask_unathi.dmi and /dev/null differ diff --git a/icons/mob/species/unathi/generated/onmob_misc_unathi.dmi b/icons/mob/species/unathi/generated/onmob_misc_unathi.dmi deleted file mode 100644 index 6afd19085abf0..0000000000000 Binary files a/icons/mob/species/unathi/generated/onmob_misc_unathi.dmi and /dev/null differ diff --git a/icons/mob/species/unathi/generated/onmob_rig_back_unathi.dmi b/icons/mob/species/unathi/generated/onmob_rig_back_unathi.dmi deleted file mode 100644 index d1b67de7cfb30..0000000000000 Binary files a/icons/mob/species/unathi/generated/onmob_rig_back_unathi.dmi and /dev/null differ diff --git a/icons/mob/species/unathi/generated/onmob_rig_modules_unathi.dmi b/icons/mob/species/unathi/generated/onmob_rig_modules_unathi.dmi deleted file mode 100644 index 98c7eddfa9e66..0000000000000 Binary files a/icons/mob/species/unathi/generated/onmob_rig_modules_unathi.dmi and /dev/null differ diff --git a/icons/mob/species/unathi/generated/onmob_suit_unathi.dmi b/icons/mob/species/unathi/generated/onmob_suit_unathi.dmi deleted file mode 100644 index c9750855a3752..0000000000000 Binary files a/icons/mob/species/unathi/generated/onmob_suit_unathi.dmi and /dev/null differ diff --git a/icons/mob/species/unathi/generated/onmob_under_corporate_unathi.dmi b/icons/mob/species/unathi/generated/onmob_under_corporate_unathi.dmi deleted file mode 100644 index 42a68208494c3..0000000000000 Binary files a/icons/mob/species/unathi/generated/onmob_under_corporate_unathi.dmi and /dev/null differ diff --git a/icons/mob/species/unathi/generated/onmob_under_pants_unathi.dmi b/icons/mob/species/unathi/generated/onmob_under_pants_unathi.dmi deleted file mode 100644 index d2bfbee9f96b6..0000000000000 Binary files a/icons/mob/species/unathi/generated/onmob_under_pants_unathi.dmi and /dev/null differ diff --git a/icons/mob/species/unathi/generated/onmob_under_unathi.dmi b/icons/mob/species/unathi/generated/onmob_under_unathi.dmi deleted file mode 100644 index 86fc3262d6558..0000000000000 Binary files a/icons/mob/species/unathi/generated/onmob_under_unathi.dmi and /dev/null differ diff --git a/icons/mob/species/unathi/onmob_accessories_sol_unathi.dmi b/icons/mob/species/unathi/onmob_accessories_sol_unathi.dmi deleted file mode 100644 index 2959bd18eb22e..0000000000000 Binary files a/icons/mob/species/unathi/onmob_accessories_sol_unathi.dmi and /dev/null differ diff --git a/icons/mob/species/unathi/onmob_accessories_unathi.dmi b/icons/mob/species/unathi/onmob_accessories_unathi.dmi deleted file mode 100644 index 3ceb08c332687..0000000000000 Binary files a/icons/mob/species/unathi/onmob_accessories_unathi.dmi and /dev/null differ diff --git a/icons/mob/species/unathi/onmob_head_helmet_unathi.dmi b/icons/mob/species/unathi/onmob_head_helmet_unathi.dmi deleted file mode 100644 index d869c10d375ef..0000000000000 Binary files a/icons/mob/species/unathi/onmob_head_helmet_unathi.dmi and /dev/null differ diff --git a/icons/mob/species/unathi/onmob_head_unathi.dmi b/icons/mob/species/unathi/onmob_head_unathi.dmi deleted file mode 100644 index 113d8369b5014..0000000000000 Binary files a/icons/mob/species/unathi/onmob_head_unathi.dmi and /dev/null differ diff --git a/icons/mob/species/unathi/onmob_mask_unathi.dmi b/icons/mob/species/unathi/onmob_mask_unathi.dmi deleted file mode 100644 index cf3be6425fe4e..0000000000000 Binary files a/icons/mob/species/unathi/onmob_mask_unathi.dmi and /dev/null differ diff --git a/icons/mob/species/unathi/onmob_suit_unathi.dmi b/icons/mob/species/unathi/onmob_suit_unathi.dmi deleted file mode 100644 index 5c275372c4701..0000000000000 Binary files a/icons/mob/species/unathi/onmob_suit_unathi.dmi and /dev/null differ diff --git a/icons/mob/species/unathi/onmob_under_unathi.dmi b/icons/mob/species/unathi/onmob_under_unathi.dmi deleted file mode 100644 index d044ce543b9bf..0000000000000 Binary files a/icons/mob/species/unathi/onmob_under_unathi.dmi and /dev/null differ diff --git a/icons/mob/species/unathi/unathi_tail.dmi b/icons/mob/species/unathi/unathi_tail.dmi deleted file mode 100644 index 5040506000120..0000000000000 Binary files a/icons/mob/species/unathi/unathi_tail.dmi and /dev/null differ diff --git a/icons/mob/species/vox/onmob_eyes_vox.dmi b/icons/mob/species/vox/onmob_eyes_vox.dmi deleted file mode 100644 index 1e07612ce10b9..0000000000000 Binary files a/icons/mob/species/vox/onmob_eyes_vox.dmi and /dev/null differ diff --git a/icons/mob/species/vox/onmob_eyes_vox_armalis.dmi b/icons/mob/species/vox/onmob_eyes_vox_armalis.dmi deleted file mode 100644 index d6d8ce0e6bce2..0000000000000 Binary files a/icons/mob/species/vox/onmob_eyes_vox_armalis.dmi and /dev/null differ diff --git a/icons/mob/species/vox/onmob_feet_vox.dmi b/icons/mob/species/vox/onmob_feet_vox.dmi deleted file mode 100644 index 90cc42fe44ef5..0000000000000 Binary files a/icons/mob/species/vox/onmob_feet_vox.dmi and /dev/null differ diff --git a/icons/mob/species/vox/onmob_feet_vox_armalis.dmi b/icons/mob/species/vox/onmob_feet_vox_armalis.dmi deleted file mode 100644 index ec5ea9e004941..0000000000000 Binary files a/icons/mob/species/vox/onmob_feet_vox_armalis.dmi and /dev/null differ diff --git a/icons/mob/species/vox/onmob_hands_vox.dmi b/icons/mob/species/vox/onmob_hands_vox.dmi deleted file mode 100644 index f49526e9e30d7..0000000000000 Binary files a/icons/mob/species/vox/onmob_hands_vox.dmi and /dev/null differ diff --git a/icons/mob/species/vox/onmob_hands_vox_armalis.dmi b/icons/mob/species/vox/onmob_hands_vox_armalis.dmi deleted file mode 100644 index da51536ab8ca0..0000000000000 Binary files a/icons/mob/species/vox/onmob_hands_vox_armalis.dmi and /dev/null differ diff --git a/icons/mob/species/vox/onmob_head_vox.dmi b/icons/mob/species/vox/onmob_head_vox.dmi deleted file mode 100644 index d09c90d843e7c..0000000000000 Binary files a/icons/mob/species/vox/onmob_head_vox.dmi and /dev/null differ diff --git a/icons/mob/species/vox/onmob_head_vox_armalis.dmi b/icons/mob/species/vox/onmob_head_vox_armalis.dmi deleted file mode 100644 index a5fad8492e09c..0000000000000 Binary files a/icons/mob/species/vox/onmob_head_vox_armalis.dmi and /dev/null differ diff --git a/icons/mob/species/vox/onmob_mask_vox.dmi b/icons/mob/species/vox/onmob_mask_vox.dmi deleted file mode 100644 index 24b01c7e3a2c8..0000000000000 Binary files a/icons/mob/species/vox/onmob_mask_vox.dmi and /dev/null differ diff --git a/icons/mob/species/vox/onmob_mask_vox_armalis.dmi b/icons/mob/species/vox/onmob_mask_vox_armalis.dmi deleted file mode 100644 index ae8b0308682a9..0000000000000 Binary files a/icons/mob/species/vox/onmob_mask_vox_armalis.dmi and /dev/null differ diff --git a/icons/mob/species/vox/onmob_suit_vox.dmi b/icons/mob/species/vox/onmob_suit_vox.dmi deleted file mode 100644 index b892c236f066f..0000000000000 Binary files a/icons/mob/species/vox/onmob_suit_vox.dmi and /dev/null differ diff --git a/icons/mob/species/vox/onmob_suit_vox_armalis.dmi b/icons/mob/species/vox/onmob_suit_vox_armalis.dmi deleted file mode 100644 index 28d95b8741f8b..0000000000000 Binary files a/icons/mob/species/vox/onmob_suit_vox_armalis.dmi and /dev/null differ diff --git a/icons/mob/species/vox/onmob_under_vox.dmi b/icons/mob/species/vox/onmob_under_vox.dmi deleted file mode 100644 index 5ed2bca2ff0ca..0000000000000 Binary files a/icons/mob/species/vox/onmob_under_vox.dmi and /dev/null differ diff --git a/icons/mob/species/vox/onmob_under_vox_armalis.dmi b/icons/mob/species/vox/onmob_under_vox_armalis.dmi deleted file mode 100644 index e35ee8a2b1928..0000000000000 Binary files a/icons/mob/species/vox/onmob_under_vox_armalis.dmi and /dev/null differ diff --git a/icons/mob/status_hunger.dmi b/icons/mob/status_hunger.dmi deleted file mode 100644 index db92eb35581ef..0000000000000 Binary files a/icons/mob/status_hunger.dmi and /dev/null differ diff --git a/icons/mob/status_indicators.dmi b/icons/mob/status_indicators.dmi deleted file mode 100644 index 80baa88177f75..0000000000000 Binary files a/icons/mob/status_indicators.dmi and /dev/null differ diff --git a/icons/mob/surgery.dmi b/icons/mob/surgery.dmi deleted file mode 100644 index 8457a59526b37..0000000000000 Binary files a/icons/mob/surgery.dmi and /dev/null differ diff --git a/icons/mob/talk.dmi b/icons/mob/talk.dmi deleted file mode 100644 index cdb7c7b8aa8d5..0000000000000 Binary files a/icons/mob/talk.dmi and /dev/null differ diff --git a/icons/mob/virtual.dmi b/icons/mob/virtual.dmi deleted file mode 100644 index 13813bb512eb8..0000000000000 Binary files a/icons/mob/virtual.dmi and /dev/null differ diff --git a/icons/mob/wrist_computer.dmi b/icons/mob/wrist_computer.dmi deleted file mode 100644 index 56b41e05b029d..0000000000000 Binary files a/icons/mob/wrist_computer.dmi and /dev/null differ diff --git a/icons/mob/zone_sel.dmi b/icons/mob/zone_sel.dmi deleted file mode 100644 index 516874f2a65a1..0000000000000 Binary files a/icons/mob/zone_sel.dmi and /dev/null differ diff --git a/icons/obj/Cryogenic2.dmi b/icons/obj/Cryogenic2.dmi deleted file mode 100644 index 48e19ed3a7d6c..0000000000000 Binary files a/icons/obj/Cryogenic2.dmi and /dev/null differ diff --git a/icons/obj/action_buttons/actions.dmi b/icons/obj/action_buttons/actions.dmi deleted file mode 100644 index 400db51debe52..0000000000000 Binary files a/icons/obj/action_buttons/actions.dmi and /dev/null differ diff --git a/icons/obj/action_buttons/organs.dmi b/icons/obj/action_buttons/organs.dmi deleted file mode 100644 index a7aaf3f80b50a..0000000000000 Binary files a/icons/obj/action_buttons/organs.dmi and /dev/null differ diff --git a/icons/obj/airlock_machines.dmi b/icons/obj/airlock_machines.dmi deleted file mode 100644 index 4ab6fec1f58ec..0000000000000 Binary files a/icons/obj/airlock_machines.dmi and /dev/null differ diff --git a/icons/obj/alien.dmi b/icons/obj/alien.dmi deleted file mode 100644 index e1685e216fdfd..0000000000000 Binary files a/icons/obj/alien.dmi and /dev/null differ diff --git a/icons/obj/ammo.dmi b/icons/obj/ammo.dmi deleted file mode 100644 index d74c5fcc630c1..0000000000000 Binary files a/icons/obj/ammo.dmi and /dev/null differ diff --git a/icons/obj/apc.dmi b/icons/obj/apc.dmi deleted file mode 100644 index 7511f66aa463d..0000000000000 Binary files a/icons/obj/apc.dmi and /dev/null differ diff --git a/icons/obj/apc_repair.dmi b/icons/obj/apc_repair.dmi deleted file mode 100644 index a0dc37c67a3de..0000000000000 Binary files a/icons/obj/apc_repair.dmi and /dev/null differ diff --git a/icons/obj/apiary_bees_etc.dmi b/icons/obj/apiary_bees_etc.dmi deleted file mode 100644 index 130120bb08fc8..0000000000000 Binary files a/icons/obj/apiary_bees_etc.dmi and /dev/null differ diff --git a/icons/obj/artifacts.dmi b/icons/obj/artifacts.dmi deleted file mode 100644 index 0a8aa78f1be26..0000000000000 Binary files a/icons/obj/artifacts.dmi and /dev/null differ diff --git a/icons/obj/artillery.dmi b/icons/obj/artillery.dmi deleted file mode 100644 index f0653ab1bd48b..0000000000000 Binary files a/icons/obj/artillery.dmi and /dev/null differ diff --git a/icons/obj/assemblies.dmi b/icons/obj/assemblies.dmi deleted file mode 100644 index 5b084952a25c6..0000000000000 Binary files a/icons/obj/assemblies.dmi and /dev/null differ diff --git a/icons/obj/assemblies/electronic_components.dmi b/icons/obj/assemblies/electronic_components.dmi deleted file mode 100644 index 5e0d30ac43cda..0000000000000 Binary files a/icons/obj/assemblies/electronic_components.dmi and /dev/null differ diff --git a/icons/obj/assemblies/electronic_misc.dmi b/icons/obj/assemblies/electronic_misc.dmi deleted file mode 100644 index 226b82e4999a0..0000000000000 Binary files a/icons/obj/assemblies/electronic_misc.dmi and /dev/null differ diff --git a/icons/obj/assemblies/electronic_setups.dmi b/icons/obj/assemblies/electronic_setups.dmi deleted file mode 100644 index 7faa3b93c6e2b..0000000000000 Binary files a/icons/obj/assemblies/electronic_setups.dmi and /dev/null differ diff --git a/icons/obj/assemblies/electronic_tools.dmi b/icons/obj/assemblies/electronic_tools.dmi deleted file mode 100644 index 975f2fc9a8128..0000000000000 Binary files a/icons/obj/assemblies/electronic_tools.dmi and /dev/null differ diff --git a/icons/obj/assemblies/new_assemblies.dmi b/icons/obj/assemblies/new_assemblies.dmi deleted file mode 100644 index 96b36bbf369e0..0000000000000 Binary files a/icons/obj/assemblies/new_assemblies.dmi and /dev/null differ diff --git a/icons/obj/atmos.dmi b/icons/obj/atmos.dmi deleted file mode 100644 index 23dd7ef82ea2f..0000000000000 Binary files a/icons/obj/atmos.dmi and /dev/null differ diff --git a/icons/obj/atmos_analyzer.dmi b/icons/obj/atmos_analyzer.dmi deleted file mode 100644 index 4c6303f554996..0000000000000 Binary files a/icons/obj/atmos_analyzer.dmi and /dev/null differ diff --git a/icons/obj/atmospherics/blue_pipe_tank.dmi b/icons/obj/atmospherics/blue_pipe_tank.dmi deleted file mode 100644 index 8cec4370f60ed..0000000000000 Binary files a/icons/obj/atmospherics/blue_pipe_tank.dmi and /dev/null differ diff --git a/icons/obj/atmospherics/cold_sink.dmi b/icons/obj/atmospherics/cold_sink.dmi deleted file mode 100644 index 09f9be43514f4..0000000000000 Binary files a/icons/obj/atmospherics/cold_sink.dmi and /dev/null differ diff --git a/icons/obj/atmospherics/digital_valve.dmi b/icons/obj/atmospherics/digital_valve.dmi deleted file mode 100644 index 0b3dffd0ae54f..0000000000000 Binary files a/icons/obj/atmospherics/digital_valve.dmi and /dev/null differ diff --git a/icons/obj/atmospherics/dp_vent_pump.dmi b/icons/obj/atmospherics/dp_vent_pump.dmi deleted file mode 100644 index be5106c24736d..0000000000000 Binary files a/icons/obj/atmospherics/dp_vent_pump.dmi and /dev/null differ diff --git a/icons/obj/atmospherics/filter.dmi b/icons/obj/atmospherics/filter.dmi deleted file mode 100644 index 3bb85fdb6427f..0000000000000 Binary files a/icons/obj/atmospherics/filter.dmi and /dev/null differ diff --git a/icons/obj/atmospherics/heat_exchanger.dmi b/icons/obj/atmospherics/heat_exchanger.dmi deleted file mode 100644 index 31836c5ec415c..0000000000000 Binary files a/icons/obj/atmospherics/heat_exchanger.dmi and /dev/null differ diff --git a/icons/obj/atmospherics/m_filter.dmi b/icons/obj/atmospherics/m_filter.dmi deleted file mode 100644 index 70261633ebeb5..0000000000000 Binary files a/icons/obj/atmospherics/m_filter.dmi and /dev/null differ diff --git a/icons/obj/atmospherics/m_mixer.dmi b/icons/obj/atmospherics/m_mixer.dmi deleted file mode 100644 index 81c6bbb5e1b3c..0000000000000 Binary files a/icons/obj/atmospherics/m_mixer.dmi and /dev/null differ diff --git a/icons/obj/atmospherics/mainspipe.dmi b/icons/obj/atmospherics/mainspipe.dmi deleted file mode 100644 index 4518a5b0a7946..0000000000000 Binary files a/icons/obj/atmospherics/mainspipe.dmi and /dev/null differ diff --git a/icons/obj/atmospherics/mixer.dmi b/icons/obj/atmospherics/mixer.dmi deleted file mode 100644 index 79b62c87df259..0000000000000 Binary files a/icons/obj/atmospherics/mixer.dmi and /dev/null differ diff --git a/icons/obj/atmospherics/n2o_pipe_tank.dmi b/icons/obj/atmospherics/n2o_pipe_tank.dmi deleted file mode 100644 index 71a8381a68972..0000000000000 Binary files a/icons/obj/atmospherics/n2o_pipe_tank.dmi and /dev/null differ diff --git a/icons/obj/atmospherics/omni_devices.dmi b/icons/obj/atmospherics/omni_devices.dmi deleted file mode 100644 index 398fd5f159e80..0000000000000 Binary files a/icons/obj/atmospherics/omni_devices.dmi and /dev/null differ diff --git a/icons/obj/atmospherics/orange_pipe_tank.dmi b/icons/obj/atmospherics/orange_pipe_tank.dmi deleted file mode 100644 index fccd6eb5c57ce..0000000000000 Binary files a/icons/obj/atmospherics/orange_pipe_tank.dmi and /dev/null differ diff --git a/icons/obj/atmospherics/outlet_injector.dmi b/icons/obj/atmospherics/outlet_injector.dmi deleted file mode 100644 index 60ecc2e937679..0000000000000 Binary files a/icons/obj/atmospherics/outlet_injector.dmi and /dev/null differ diff --git a/icons/obj/atmospherics/oxygen_generator.dmi b/icons/obj/atmospherics/oxygen_generator.dmi deleted file mode 100644 index 0c94506c36887..0000000000000 Binary files a/icons/obj/atmospherics/oxygen_generator.dmi and /dev/null differ diff --git a/icons/obj/atmospherics/passive_gate.dmi b/icons/obj/atmospherics/passive_gate.dmi deleted file mode 100644 index be8be8b7095d1..0000000000000 Binary files a/icons/obj/atmospherics/passive_gate.dmi and /dev/null differ diff --git a/icons/obj/atmospherics/pipe_manifold.dmi b/icons/obj/atmospherics/pipe_manifold.dmi deleted file mode 100644 index 0687e9e8bc465..0000000000000 Binary files a/icons/obj/atmospherics/pipe_manifold.dmi and /dev/null differ diff --git a/icons/obj/atmospherics/pipe_tank.dmi b/icons/obj/atmospherics/pipe_tank.dmi deleted file mode 100644 index e6925d0edaf37..0000000000000 Binary files a/icons/obj/atmospherics/pipe_tank.dmi and /dev/null differ diff --git a/icons/obj/atmospherics/pipe_vent.dmi b/icons/obj/atmospherics/pipe_vent.dmi deleted file mode 100644 index 6086af9383b02..0000000000000 Binary files a/icons/obj/atmospherics/pipe_vent.dmi and /dev/null differ diff --git a/icons/obj/atmospherics/portables_connector.dmi b/icons/obj/atmospherics/portables_connector.dmi deleted file mode 100644 index 0268014c240bd..0000000000000 Binary files a/icons/obj/atmospherics/portables_connector.dmi and /dev/null differ diff --git a/icons/obj/atmospherics/pump.dmi b/icons/obj/atmospherics/pump.dmi deleted file mode 100644 index bd08c601977a5..0000000000000 Binary files a/icons/obj/atmospherics/pump.dmi and /dev/null differ diff --git a/icons/obj/atmospherics/red_orange_pipe_tank.dmi b/icons/obj/atmospherics/red_orange_pipe_tank.dmi deleted file mode 100644 index 9c4ce51c065f2..0000000000000 Binary files a/icons/obj/atmospherics/red_orange_pipe_tank.dmi and /dev/null differ diff --git a/icons/obj/atmospherics/red_pipe.dmi b/icons/obj/atmospherics/red_pipe.dmi deleted file mode 100644 index ff9d9e8a59a28..0000000000000 Binary files a/icons/obj/atmospherics/red_pipe.dmi and /dev/null differ diff --git a/icons/obj/atmospherics/red_pipe_tank.dmi b/icons/obj/atmospherics/red_pipe_tank.dmi deleted file mode 100644 index f38632d139861..0000000000000 Binary files a/icons/obj/atmospherics/red_pipe_tank.dmi and /dev/null differ diff --git a/icons/obj/atmospherics/relief_valve.dmi b/icons/obj/atmospherics/relief_valve.dmi deleted file mode 100644 index 313081dae1167..0000000000000 Binary files a/icons/obj/atmospherics/relief_valve.dmi and /dev/null differ diff --git a/icons/obj/atmospherics/t_mixer.dmi b/icons/obj/atmospherics/t_mixer.dmi deleted file mode 100644 index 1535a52ee3754..0000000000000 Binary files a/icons/obj/atmospherics/t_mixer.dmi and /dev/null differ diff --git a/icons/obj/atmospherics/valve.dmi b/icons/obj/atmospherics/valve.dmi deleted file mode 100644 index beaff23c28201..0000000000000 Binary files a/icons/obj/atmospherics/valve.dmi and /dev/null differ diff --git a/icons/obj/atmospherics/vent_pump.dmi b/icons/obj/atmospherics/vent_pump.dmi deleted file mode 100644 index 5616a9d7d7d2d..0000000000000 Binary files a/icons/obj/atmospherics/vent_pump.dmi and /dev/null differ diff --git a/icons/obj/atmospherics/vent_scrubber.dmi b/icons/obj/atmospherics/vent_scrubber.dmi deleted file mode 100644 index 83536121c4917..0000000000000 Binary files a/icons/obj/atmospherics/vent_scrubber.dmi and /dev/null differ diff --git a/icons/obj/atmospherics/volume_pump.dmi b/icons/obj/atmospherics/volume_pump.dmi deleted file mode 100644 index fed0d47945c51..0000000000000 Binary files a/icons/obj/atmospherics/volume_pump.dmi and /dev/null differ diff --git a/icons/obj/augment.dmi b/icons/obj/augment.dmi deleted file mode 100644 index 1d4e4331d43e5..0000000000000 Binary files a/icons/obj/augment.dmi and /dev/null differ diff --git a/icons/obj/augment_tools.dmi b/icons/obj/augment_tools.dmi deleted file mode 100644 index cedfe88eec48d..0000000000000 Binary files a/icons/obj/augment_tools.dmi and /dev/null differ diff --git a/icons/obj/auto_cpr.dmi b/icons/obj/auto_cpr.dmi deleted file mode 100644 index f99ddfde7bb5f..0000000000000 Binary files a/icons/obj/auto_cpr.dmi and /dev/null differ diff --git a/icons/obj/banner.dmi b/icons/obj/banner.dmi deleted file mode 100644 index 87c7b75f99025..0000000000000 Binary files a/icons/obj/banner.dmi and /dev/null differ diff --git a/icons/obj/barsigns.dmi b/icons/obj/barsigns.dmi deleted file mode 100644 index ac409de94859e..0000000000000 Binary files a/icons/obj/barsigns.dmi and /dev/null differ diff --git a/icons/obj/basketball.dmi b/icons/obj/basketball.dmi deleted file mode 100644 index e938d8d7201f8..0000000000000 Binary files a/icons/obj/basketball.dmi and /dev/null differ diff --git a/icons/obj/batterer.dmi b/icons/obj/batterer.dmi deleted file mode 100644 index af3016ed103f6..0000000000000 Binary files a/icons/obj/batterer.dmi and /dev/null differ diff --git a/icons/obj/bedsheet.dmi b/icons/obj/bedsheet.dmi deleted file mode 100644 index d53251aa4c822..0000000000000 Binary files a/icons/obj/bedsheet.dmi and /dev/null differ diff --git a/icons/obj/beekeeping.dmi b/icons/obj/beekeeping.dmi deleted file mode 100644 index 569122d4a58aa..0000000000000 Binary files a/icons/obj/beekeeping.dmi and /dev/null differ diff --git a/icons/obj/bike.dmi b/icons/obj/bike.dmi deleted file mode 100644 index 589c21fdd9708..0000000000000 Binary files a/icons/obj/bike.dmi and /dev/null differ diff --git a/icons/obj/binoculars.dmi b/icons/obj/binoculars.dmi deleted file mode 100644 index c470cbdabc532..0000000000000 Binary files a/icons/obj/binoculars.dmi and /dev/null differ diff --git a/icons/obj/biogenerator.dmi b/icons/obj/biogenerator.dmi deleted file mode 100644 index c65a9571b0973..0000000000000 Binary files a/icons/obj/biogenerator.dmi and /dev/null differ diff --git a/icons/obj/bloodpack.dmi b/icons/obj/bloodpack.dmi deleted file mode 100644 index 69c3484849ed5..0000000000000 Binary files a/icons/obj/bloodpack.dmi and /dev/null differ diff --git a/icons/obj/boombox.dmi b/icons/obj/boombox.dmi deleted file mode 100644 index f7bfc7e9864bb..0000000000000 Binary files a/icons/obj/boombox.dmi and /dev/null differ diff --git a/icons/obj/buildingobject.dmi b/icons/obj/buildingobject.dmi deleted file mode 100644 index c360ab93a0a93..0000000000000 Binary files a/icons/obj/buildingobject.dmi and /dev/null differ diff --git a/icons/obj/bureaucracy.dmi b/icons/obj/bureaucracy.dmi deleted file mode 100644 index ea3c1b78166a2..0000000000000 Binary files a/icons/obj/bureaucracy.dmi and /dev/null differ diff --git a/icons/obj/butchery.dmi b/icons/obj/butchery.dmi deleted file mode 100644 index 26923c16741c9..0000000000000 Binary files a/icons/obj/butchery.dmi and /dev/null differ diff --git a/icons/obj/candle.dmi b/icons/obj/candle.dmi deleted file mode 100644 index 73d807cf6df5b..0000000000000 Binary files a/icons/obj/candle.dmi and /dev/null differ diff --git a/icons/obj/card.dmi b/icons/obj/card.dmi deleted file mode 100644 index 40545ab142aec..0000000000000 Binary files a/icons/obj/card.dmi and /dev/null differ diff --git a/icons/obj/catwalks.dmi b/icons/obj/catwalks.dmi deleted file mode 100644 index 20c5e1f4d98bd..0000000000000 Binary files a/icons/obj/catwalks.dmi and /dev/null differ diff --git a/icons/obj/cellrack.dmi b/icons/obj/cellrack.dmi deleted file mode 100644 index fc89a80a4f3b6..0000000000000 Binary files a/icons/obj/cellrack.dmi and /dev/null differ diff --git a/icons/obj/chameleon_projector.dmi b/icons/obj/chameleon_projector.dmi deleted file mode 100644 index 4dd6908991f5a..0000000000000 Binary files a/icons/obj/chameleon_projector.dmi and /dev/null differ diff --git a/icons/obj/chemical.dmi b/icons/obj/chemical.dmi deleted file mode 100644 index 5bc5b238993f8..0000000000000 Binary files a/icons/obj/chemical.dmi and /dev/null differ diff --git a/icons/obj/chempuff.dmi b/icons/obj/chempuff.dmi deleted file mode 100644 index 811c5e82142e5..0000000000000 Binary files a/icons/obj/chempuff.dmi and /dev/null differ diff --git a/icons/obj/chopping_board.dmi b/icons/obj/chopping_board.dmi deleted file mode 100644 index d8792dba46824..0000000000000 Binary files a/icons/obj/chopping_board.dmi and /dev/null differ diff --git a/icons/obj/christmas.dmi b/icons/obj/christmas.dmi deleted file mode 100644 index a42d14ecff52a..0000000000000 Binary files a/icons/obj/christmas.dmi and /dev/null differ diff --git a/icons/obj/cigarettes.dmi b/icons/obj/cigarettes.dmi deleted file mode 100644 index 15affae7aaf74..0000000000000 Binary files a/icons/obj/cigarettes.dmi and /dev/null differ diff --git a/icons/obj/cloning.dmi b/icons/obj/cloning.dmi deleted file mode 100644 index af0bb42e60207..0000000000000 Binary files a/icons/obj/cloning.dmi and /dev/null differ diff --git a/icons/obj/closets/bases/cabinet.dmi b/icons/obj/closets/bases/cabinet.dmi deleted file mode 100644 index 236b164ca6efc..0000000000000 Binary files a/icons/obj/closets/bases/cabinet.dmi and /dev/null differ diff --git a/icons/obj/closets/bases/cart.dmi b/icons/obj/closets/bases/cart.dmi deleted file mode 100644 index 852e539b4d2d6..0000000000000 Binary files a/icons/obj/closets/bases/cart.dmi and /dev/null differ diff --git a/icons/obj/closets/bases/closet.dmi b/icons/obj/closets/bases/closet.dmi deleted file mode 100644 index 551435629e435..0000000000000 Binary files a/icons/obj/closets/bases/closet.dmi and /dev/null differ diff --git a/icons/obj/closets/bases/crate.dmi b/icons/obj/closets/bases/crate.dmi deleted file mode 100644 index e8e26686fc610..0000000000000 Binary files a/icons/obj/closets/bases/crate.dmi and /dev/null differ diff --git a/icons/obj/closets/bases/large_crate.dmi b/icons/obj/closets/bases/large_crate.dmi deleted file mode 100644 index 1cdac2778348b..0000000000000 Binary files a/icons/obj/closets/bases/large_crate.dmi and /dev/null differ diff --git a/icons/obj/closets/bases/wall.dmi b/icons/obj/closets/bases/wall.dmi deleted file mode 100644 index 6689e59cfce99..0000000000000 Binary files a/icons/obj/closets/bases/wall.dmi and /dev/null differ diff --git a/icons/obj/closets/bodybag.dmi b/icons/obj/closets/bodybag.dmi deleted file mode 100644 index d6922f8bbec50..0000000000000 Binary files a/icons/obj/closets/bodybag.dmi and /dev/null differ diff --git a/icons/obj/closets/coffin.dmi b/icons/obj/closets/coffin.dmi deleted file mode 100644 index 022f8cb93f4cb..0000000000000 Binary files a/icons/obj/closets/coffin.dmi and /dev/null differ diff --git a/icons/obj/closets/coffin_wood.dmi b/icons/obj/closets/coffin_wood.dmi deleted file mode 100644 index a4a83d9b44916..0000000000000 Binary files a/icons/obj/closets/coffin_wood.dmi and /dev/null differ diff --git a/icons/obj/closets/cryobag.dmi b/icons/obj/closets/cryobag.dmi deleted file mode 100644 index 1681a884d85e3..0000000000000 Binary files a/icons/obj/closets/cryobag.dmi and /dev/null differ diff --git a/icons/obj/closets/decals/cart.dmi b/icons/obj/closets/decals/cart.dmi deleted file mode 100644 index c4d71bcde83a2..0000000000000 Binary files a/icons/obj/closets/decals/cart.dmi and /dev/null differ diff --git a/icons/obj/closets/decals/closet.dmi b/icons/obj/closets/decals/closet.dmi deleted file mode 100644 index ea42c1f5350f3..0000000000000 Binary files a/icons/obj/closets/decals/closet.dmi and /dev/null differ diff --git a/icons/obj/closets/decals/crate.dmi b/icons/obj/closets/decals/crate.dmi deleted file mode 100644 index b0e600aefff7f..0000000000000 Binary files a/icons/obj/closets/decals/crate.dmi and /dev/null differ diff --git a/icons/obj/closets/decals/large_crate.dmi b/icons/obj/closets/decals/large_crate.dmi deleted file mode 100644 index 4876570265994..0000000000000 Binary files a/icons/obj/closets/decals/large_crate.dmi and /dev/null differ diff --git a/icons/obj/closets/decals/wall.dmi b/icons/obj/closets/decals/wall.dmi deleted file mode 100644 index b9b207407e876..0000000000000 Binary files a/icons/obj/closets/decals/wall.dmi and /dev/null differ diff --git a/icons/obj/closets/fridge.dmi b/icons/obj/closets/fridge.dmi deleted file mode 100644 index afb2672bbf961..0000000000000 Binary files a/icons/obj/closets/fridge.dmi and /dev/null differ diff --git a/icons/obj/closets/rescuebag.dmi b/icons/obj/closets/rescuebag.dmi deleted file mode 100644 index 7ed654f5f72ff..0000000000000 Binary files a/icons/obj/closets/rescuebag.dmi and /dev/null differ diff --git a/icons/obj/clothing/aviators.dmi b/icons/obj/clothing/aviators.dmi deleted file mode 100644 index 0a0929345b696..0000000000000 Binary files a/icons/obj/clothing/aviators.dmi and /dev/null differ diff --git a/icons/obj/clothing/helmet_decor.dmi b/icons/obj/clothing/helmet_decor.dmi deleted file mode 100644 index a379d7192573a..0000000000000 Binary files a/icons/obj/clothing/helmet_decor.dmi and /dev/null differ diff --git a/icons/obj/clothing/obj_accessories.dmi b/icons/obj/clothing/obj_accessories.dmi deleted file mode 100644 index a455976e3a7fa..0000000000000 Binary files a/icons/obj/clothing/obj_accessories.dmi and /dev/null differ diff --git a/icons/obj/clothing/obj_belt.dmi b/icons/obj/clothing/obj_belt.dmi deleted file mode 100644 index cb6487083229e..0000000000000 Binary files a/icons/obj/clothing/obj_belt.dmi and /dev/null differ diff --git a/icons/obj/clothing/obj_belt_overlays.dmi b/icons/obj/clothing/obj_belt_overlays.dmi deleted file mode 100644 index 16341938d1bbb..0000000000000 Binary files a/icons/obj/clothing/obj_belt_overlays.dmi and /dev/null differ diff --git a/icons/obj/clothing/obj_ears.dmi b/icons/obj/clothing/obj_ears.dmi deleted file mode 100644 index b5bbff0a46783..0000000000000 Binary files a/icons/obj/clothing/obj_ears.dmi and /dev/null differ diff --git a/icons/obj/clothing/obj_eyes.dmi b/icons/obj/clothing/obj_eyes.dmi deleted file mode 100644 index 54a28d70dc1a1..0000000000000 Binary files a/icons/obj/clothing/obj_eyes.dmi and /dev/null differ diff --git a/icons/obj/clothing/obj_feet.dmi b/icons/obj/clothing/obj_feet.dmi deleted file mode 100644 index 9aff779c6ce5b..0000000000000 Binary files a/icons/obj/clothing/obj_feet.dmi and /dev/null differ diff --git a/icons/obj/clothing/obj_hands.dmi b/icons/obj/clothing/obj_hands.dmi deleted file mode 100644 index 83f1627ba8757..0000000000000 Binary files a/icons/obj/clothing/obj_hands.dmi and /dev/null differ diff --git a/icons/obj/clothing/obj_hands_ring.dmi b/icons/obj/clothing/obj_hands_ring.dmi deleted file mode 100644 index 0e72620f9c339..0000000000000 Binary files a/icons/obj/clothing/obj_hands_ring.dmi and /dev/null differ diff --git a/icons/obj/clothing/obj_head.dmi b/icons/obj/clothing/obj_head.dmi deleted file mode 100644 index a5c3bc8237d4b..0000000000000 Binary files a/icons/obj/clothing/obj_head.dmi and /dev/null differ diff --git a/icons/obj/clothing/obj_head_ipc.dmi b/icons/obj/clothing/obj_head_ipc.dmi deleted file mode 100644 index 8804df63a3173..0000000000000 Binary files a/icons/obj/clothing/obj_head_ipc.dmi and /dev/null differ diff --git a/icons/obj/clothing/obj_mask.dmi b/icons/obj/clothing/obj_mask.dmi deleted file mode 100644 index 41abccf57c22a..0000000000000 Binary files a/icons/obj/clothing/obj_mask.dmi and /dev/null differ diff --git a/icons/obj/clothing/obj_suit.dmi b/icons/obj/clothing/obj_suit.dmi deleted file mode 100644 index b3ecd190be6d7..0000000000000 Binary files a/icons/obj/clothing/obj_suit.dmi and /dev/null differ diff --git a/icons/obj/clothing/obj_suit_modular_armor.dmi b/icons/obj/clothing/obj_suit_modular_armor.dmi deleted file mode 100644 index 334b3cfbc2f78..0000000000000 Binary files a/icons/obj/clothing/obj_suit_modular_armor.dmi and /dev/null differ diff --git a/icons/obj/clothing/obj_under.dmi b/icons/obj/clothing/obj_under.dmi deleted file mode 100644 index 8e70b1cfa92a7..0000000000000 Binary files a/icons/obj/clothing/obj_under.dmi and /dev/null differ diff --git a/icons/obj/clothing/species/skrell/obj_head_skrell.dmi b/icons/obj/clothing/species/skrell/obj_head_skrell.dmi deleted file mode 100644 index 32ed1e54be20d..0000000000000 Binary files a/icons/obj/clothing/species/skrell/obj_head_skrell.dmi and /dev/null differ diff --git a/icons/obj/clothing/species/skrell/obj_suit_skrell.dmi b/icons/obj/clothing/species/skrell/obj_suit_skrell.dmi deleted file mode 100644 index fc399a99c453c..0000000000000 Binary files a/icons/obj/clothing/species/skrell/obj_suit_skrell.dmi and /dev/null differ diff --git a/icons/obj/clothing/species/unathi/obj_head_unathi.dmi b/icons/obj/clothing/species/unathi/obj_head_unathi.dmi deleted file mode 100644 index 101a6d5df05ec..0000000000000 Binary files a/icons/obj/clothing/species/unathi/obj_head_unathi.dmi and /dev/null differ diff --git a/icons/obj/clothing/species/unathi/obj_suit_unathi.dmi b/icons/obj/clothing/species/unathi/obj_suit_unathi.dmi deleted file mode 100644 index 8914c1fb48a1c..0000000000000 Binary files a/icons/obj/clothing/species/unathi/obj_suit_unathi.dmi and /dev/null differ diff --git a/icons/obj/clothing/species/vox/obj_head_vox.dmi b/icons/obj/clothing/species/vox/obj_head_vox.dmi deleted file mode 100644 index 491aa33325ace..0000000000000 Binary files a/icons/obj/clothing/species/vox/obj_head_vox.dmi and /dev/null differ diff --git a/icons/obj/clothing/species/vox/obj_suit_vox.dmi b/icons/obj/clothing/species/vox/obj_suit_vox.dmi deleted file mode 100644 index 9672dacb8a34e..0000000000000 Binary files a/icons/obj/clothing/species/vox/obj_suit_vox.dmi and /dev/null differ diff --git a/icons/obj/coatrack.dmi b/icons/obj/coatrack.dmi deleted file mode 100644 index 5d19abaeee750..0000000000000 Binary files a/icons/obj/coatrack.dmi and /dev/null differ diff --git a/icons/obj/coin.dmi b/icons/obj/coin.dmi deleted file mode 100644 index 179271fd8b45c..0000000000000 Binary files a/icons/obj/coin.dmi and /dev/null differ diff --git a/icons/obj/computer.dmi b/icons/obj/computer.dmi deleted file mode 100644 index 497ce35ab8fe4..0000000000000 Binary files a/icons/obj/computer.dmi and /dev/null differ diff --git a/icons/obj/contraband.dmi b/icons/obj/contraband.dmi deleted file mode 100644 index cc9e6e6be3298..0000000000000 Binary files a/icons/obj/contraband.dmi and /dev/null differ diff --git a/icons/obj/cooking_machines.dmi b/icons/obj/cooking_machines.dmi deleted file mode 100644 index 6577147a925c9..0000000000000 Binary files a/icons/obj/cooking_machines.dmi and /dev/null differ diff --git a/icons/obj/crafting_icons.dmi b/icons/obj/crafting_icons.dmi deleted file mode 100644 index 2e3ffbce3dc70..0000000000000 Binary files a/icons/obj/crafting_icons.dmi and /dev/null differ diff --git a/icons/obj/crayons.dmi b/icons/obj/crayons.dmi deleted file mode 100644 index 7ebabd5a81ef5..0000000000000 Binary files a/icons/obj/crayons.dmi and /dev/null differ diff --git a/icons/obj/cryogenics.dmi b/icons/obj/cryogenics.dmi deleted file mode 100644 index ae4681657c115..0000000000000 Binary files a/icons/obj/cryogenics.dmi and /dev/null differ diff --git a/icons/obj/cryogenics_split.dmi b/icons/obj/cryogenics_split.dmi deleted file mode 100644 index a25513a143511..0000000000000 Binary files a/icons/obj/cryogenics_split.dmi and /dev/null differ diff --git a/icons/obj/crystal_tools.dmi b/icons/obj/crystal_tools.dmi deleted file mode 100644 index 033176cd04dbb..0000000000000 Binary files a/icons/obj/crystal_tools.dmi and /dev/null differ diff --git a/icons/obj/cult.dmi b/icons/obj/cult.dmi deleted file mode 100644 index 8e723201e4378..0000000000000 Binary files a/icons/obj/cult.dmi and /dev/null differ diff --git a/icons/obj/cult_tall.dmi b/icons/obj/cult_tall.dmi deleted file mode 100644 index 9a580a303b02e..0000000000000 Binary files a/icons/obj/cult_tall.dmi and /dev/null differ diff --git a/icons/obj/curtain.dmi b/icons/obj/curtain.dmi deleted file mode 100644 index 69b7de1dc06fd..0000000000000 Binary files a/icons/obj/curtain.dmi and /dev/null differ diff --git a/icons/obj/decal_warning_stripes.dmi b/icons/obj/decal_warning_stripes.dmi deleted file mode 100644 index a0cf5e32447ce..0000000000000 Binary files a/icons/obj/decal_warning_stripes.dmi and /dev/null differ diff --git a/icons/obj/decals.dmi b/icons/obj/decals.dmi deleted file mode 100644 index e62f186e61eab..0000000000000 Binary files a/icons/obj/decals.dmi and /dev/null differ diff --git a/icons/obj/defibrillator.dmi b/icons/obj/defibrillator.dmi deleted file mode 100644 index f399f37f4b317..0000000000000 Binary files a/icons/obj/defibrillator.dmi and /dev/null differ diff --git a/icons/obj/destination_tagger.dmi b/icons/obj/destination_tagger.dmi deleted file mode 100644 index 83418c223c376..0000000000000 Binary files a/icons/obj/destination_tagger.dmi and /dev/null differ diff --git a/icons/obj/dice.dmi b/icons/obj/dice.dmi deleted file mode 100644 index f6a209b468724..0000000000000 Binary files a/icons/obj/dice.dmi and /dev/null differ diff --git a/icons/obj/disperser.dmi b/icons/obj/disperser.dmi deleted file mode 100644 index ab07489d17461..0000000000000 Binary files a/icons/obj/disperser.dmi and /dev/null differ diff --git a/icons/obj/dociler.dmi b/icons/obj/dociler.dmi deleted file mode 100644 index 5803f9ed1eb3f..0000000000000 Binary files a/icons/obj/dociler.dmi and /dev/null differ diff --git a/icons/obj/doors/1x2blast_hor.dmi b/icons/obj/doors/1x2blast_hor.dmi deleted file mode 100644 index a0a3d9351f1ab..0000000000000 Binary files a/icons/obj/doors/1x2blast_hor.dmi and /dev/null differ diff --git a/icons/obj/doors/1x2blast_vert.dmi b/icons/obj/doors/1x2blast_vert.dmi deleted file mode 100644 index 6e810457d1427..0000000000000 Binary files a/icons/obj/doors/1x2blast_vert.dmi and /dev/null differ diff --git a/icons/obj/doors/1x4blast_hor.dmi b/icons/obj/doors/1x4blast_hor.dmi deleted file mode 100644 index d43298973c977..0000000000000 Binary files a/icons/obj/doors/1x4blast_hor.dmi and /dev/null differ diff --git a/icons/obj/doors/1x4blast_vert.dmi b/icons/obj/doors/1x4blast_vert.dmi deleted file mode 100644 index 26c730b983a17..0000000000000 Binary files a/icons/obj/doors/1x4blast_vert.dmi and /dev/null differ diff --git a/icons/obj/doors/Door1.dmi b/icons/obj/doors/Door1.dmi deleted file mode 100644 index 59ef7116c39fa..0000000000000 Binary files a/icons/obj/doors/Door1.dmi and /dev/null differ diff --git a/icons/obj/doors/Doorf.dmi b/icons/obj/doors/Doorf.dmi deleted file mode 100644 index 5ece7e6cd9a5d..0000000000000 Binary files a/icons/obj/doors/Doorf.dmi and /dev/null differ diff --git a/icons/obj/doors/Doorglass.dmi b/icons/obj/doors/Doorglass.dmi deleted file mode 100644 index f4afd02c99d17..0000000000000 Binary files a/icons/obj/doors/Doorglass.dmi and /dev/null differ diff --git a/icons/obj/doors/centcomm/door.dmi b/icons/obj/doors/centcomm/door.dmi deleted file mode 100644 index 49f386ff38053..0000000000000 Binary files a/icons/obj/doors/centcomm/door.dmi and /dev/null differ diff --git a/icons/obj/doors/centcomm/fill_steel.dmi b/icons/obj/doors/centcomm/fill_steel.dmi deleted file mode 100644 index 275b29a785a06..0000000000000 Binary files a/icons/obj/doors/centcomm/fill_steel.dmi and /dev/null differ diff --git a/icons/obj/doors/door_assembly.dmi b/icons/obj/doors/door_assembly.dmi deleted file mode 100644 index 055125195baa7..0000000000000 Binary files a/icons/obj/doors/door_assembly.dmi and /dev/null differ diff --git a/icons/obj/doors/door_assembly2x1.dmi b/icons/obj/doors/door_assembly2x1.dmi deleted file mode 100644 index 1dfadb3bfb90e..0000000000000 Binary files a/icons/obj/doors/door_assembly2x1.dmi and /dev/null differ diff --git a/icons/obj/doors/door_light_plalettes.dmi b/icons/obj/doors/door_light_plalettes.dmi deleted file mode 100644 index 820e2eb8c1458..0000000000000 Binary files a/icons/obj/doors/door_light_plalettes.dmi and /dev/null differ diff --git a/icons/obj/doors/doorint.dmi b/icons/obj/doors/doorint.dmi deleted file mode 100644 index 1b847d3741aed..0000000000000 Binary files a/icons/obj/doors/doorint.dmi and /dev/null differ diff --git a/icons/obj/doors/doorlift.dmi b/icons/obj/doors/doorlift.dmi deleted file mode 100644 index 3b037a8956893..0000000000000 Binary files a/icons/obj/doors/doorlift.dmi and /dev/null differ diff --git a/icons/obj/doors/doormorgue.dmi b/icons/obj/doors/doormorgue.dmi deleted file mode 100644 index c0ed1147325ce..0000000000000 Binary files a/icons/obj/doors/doormorgue.dmi and /dev/null differ diff --git a/icons/obj/doors/double/color.dmi b/icons/obj/doors/double/color.dmi deleted file mode 100644 index 4981fc95e616e..0000000000000 Binary files a/icons/obj/doors/double/color.dmi and /dev/null differ diff --git a/icons/obj/doors/double/door.dmi b/icons/obj/doors/double/door.dmi deleted file mode 100644 index 7aec3b074f540..0000000000000 Binary files a/icons/obj/doors/double/door.dmi and /dev/null differ diff --git a/icons/obj/doors/double/emag.dmi b/icons/obj/doors/double/emag.dmi deleted file mode 100644 index ef65451a187c3..0000000000000 Binary files a/icons/obj/doors/double/emag.dmi and /dev/null differ diff --git a/icons/obj/doors/double/fill_color.dmi b/icons/obj/doors/double/fill_color.dmi deleted file mode 100644 index d79f005dba8b6..0000000000000 Binary files a/icons/obj/doors/double/fill_color.dmi and /dev/null differ diff --git a/icons/obj/doors/double/fill_glass.dmi b/icons/obj/doors/double/fill_glass.dmi deleted file mode 100644 index c0885e342cc5a..0000000000000 Binary files a/icons/obj/doors/double/fill_glass.dmi and /dev/null differ diff --git a/icons/obj/doors/double/fill_steel.dmi b/icons/obj/doors/double/fill_steel.dmi deleted file mode 100644 index 085ba6cc27692..0000000000000 Binary files a/icons/obj/doors/double/fill_steel.dmi and /dev/null differ diff --git a/icons/obj/doors/double/fill_stripe.dmi b/icons/obj/doors/double/fill_stripe.dmi deleted file mode 100644 index 1341460eb94e1..0000000000000 Binary files a/icons/obj/doors/double/fill_stripe.dmi and /dev/null differ diff --git a/icons/obj/doors/double/lights_bolts.dmi b/icons/obj/doors/double/lights_bolts.dmi deleted file mode 100644 index 2446574687db6..0000000000000 Binary files a/icons/obj/doors/double/lights_bolts.dmi and /dev/null differ diff --git a/icons/obj/doors/double/lights_deny.dmi b/icons/obj/doors/double/lights_deny.dmi deleted file mode 100644 index 46a615d620098..0000000000000 Binary files a/icons/obj/doors/double/lights_deny.dmi and /dev/null differ diff --git a/icons/obj/doors/double/lights_green.dmi b/icons/obj/doors/double/lights_green.dmi deleted file mode 100644 index aa398415790a6..0000000000000 Binary files a/icons/obj/doors/double/lights_green.dmi and /dev/null differ diff --git a/icons/obj/doors/double/panel.dmi b/icons/obj/doors/double/panel.dmi deleted file mode 100644 index 1a5cd5f9b2ba4..0000000000000 Binary files a/icons/obj/doors/double/panel.dmi and /dev/null differ diff --git a/icons/obj/doors/double/stripe.dmi b/icons/obj/doors/double/stripe.dmi deleted file mode 100644 index 1867a15dea653..0000000000000 Binary files a/icons/obj/doors/double/stripe.dmi and /dev/null differ diff --git a/icons/obj/doors/double/welded.dmi b/icons/obj/doors/double/welded.dmi deleted file mode 100644 index 78b40ad64d350..0000000000000 Binary files a/icons/obj/doors/double/welded.dmi and /dev/null differ diff --git a/icons/obj/doors/elevator/door.dmi b/icons/obj/doors/elevator/door.dmi deleted file mode 100644 index 3cfbc002d33a8..0000000000000 Binary files a/icons/obj/doors/elevator/door.dmi and /dev/null differ diff --git a/icons/obj/doors/elevator/fill_glass.dmi b/icons/obj/doors/elevator/fill_glass.dmi deleted file mode 100644 index 97506255faa90..0000000000000 Binary files a/icons/obj/doors/elevator/fill_glass.dmi and /dev/null differ diff --git a/icons/obj/doors/elevator/fill_steel.dmi b/icons/obj/doors/elevator/fill_steel.dmi deleted file mode 100644 index 2dcb67dce969d..0000000000000 Binary files a/icons/obj/doors/elevator/fill_steel.dmi and /dev/null differ diff --git a/icons/obj/doors/elevator/lights_bolts.dmi b/icons/obj/doors/elevator/lights_bolts.dmi deleted file mode 100644 index 682eecd4e9d6d..0000000000000 Binary files a/icons/obj/doors/elevator/lights_bolts.dmi and /dev/null differ diff --git a/icons/obj/doors/elevator/lights_deny.dmi b/icons/obj/doors/elevator/lights_deny.dmi deleted file mode 100644 index bd9471fd4dcd6..0000000000000 Binary files a/icons/obj/doors/elevator/lights_deny.dmi and /dev/null differ diff --git a/icons/obj/doors/elevator/lights_green.dmi b/icons/obj/doors/elevator/lights_green.dmi deleted file mode 100644 index faafc7836a07b..0000000000000 Binary files a/icons/obj/doors/elevator/lights_green.dmi and /dev/null differ diff --git a/icons/obj/doors/elevator/welded.dmi b/icons/obj/doors/elevator/welded.dmi deleted file mode 100644 index 90af33643b279..0000000000000 Binary files a/icons/obj/doors/elevator/welded.dmi and /dev/null differ diff --git a/icons/obj/doors/external/color.dmi b/icons/obj/doors/external/color.dmi deleted file mode 100644 index 7e3a25c72069b..0000000000000 Binary files a/icons/obj/doors/external/color.dmi and /dev/null differ diff --git a/icons/obj/doors/external/door.dmi b/icons/obj/doors/external/door.dmi deleted file mode 100644 index 2b861d13db814..0000000000000 Binary files a/icons/obj/doors/external/door.dmi and /dev/null differ diff --git a/icons/obj/doors/external/emag.dmi b/icons/obj/doors/external/emag.dmi deleted file mode 100644 index ace966c362d38..0000000000000 Binary files a/icons/obj/doors/external/emag.dmi and /dev/null differ diff --git a/icons/obj/doors/external/fill_color.dmi b/icons/obj/doors/external/fill_color.dmi deleted file mode 100644 index 9af85cbde6777..0000000000000 Binary files a/icons/obj/doors/external/fill_color.dmi and /dev/null differ diff --git a/icons/obj/doors/external/fill_glass.dmi b/icons/obj/doors/external/fill_glass.dmi deleted file mode 100644 index b0a4dbf860d49..0000000000000 Binary files a/icons/obj/doors/external/fill_glass.dmi and /dev/null differ diff --git a/icons/obj/doors/external/fill_steel.dmi b/icons/obj/doors/external/fill_steel.dmi deleted file mode 100644 index b0f7327dfb607..0000000000000 Binary files a/icons/obj/doors/external/fill_steel.dmi and /dev/null differ diff --git a/icons/obj/doors/external/lights_bolts.dmi b/icons/obj/doors/external/lights_bolts.dmi deleted file mode 100644 index 3b0afea508126..0000000000000 Binary files a/icons/obj/doors/external/lights_bolts.dmi and /dev/null differ diff --git a/icons/obj/doors/external/lights_deny.dmi b/icons/obj/doors/external/lights_deny.dmi deleted file mode 100644 index 38c652d9f69c6..0000000000000 Binary files a/icons/obj/doors/external/lights_deny.dmi and /dev/null differ diff --git a/icons/obj/doors/external/lights_green.dmi b/icons/obj/doors/external/lights_green.dmi deleted file mode 100644 index b296a0925defa..0000000000000 Binary files a/icons/obj/doors/external/lights_green.dmi and /dev/null differ diff --git a/icons/obj/doors/hatch/door.dmi b/icons/obj/doors/hatch/door.dmi deleted file mode 100644 index 8e354cf3954dd..0000000000000 Binary files a/icons/obj/doors/hatch/door.dmi and /dev/null differ diff --git a/icons/obj/doors/hatch/emag.dmi b/icons/obj/doors/hatch/emag.dmi deleted file mode 100644 index 4fd7e141b3cc2..0000000000000 Binary files a/icons/obj/doors/hatch/emag.dmi and /dev/null differ diff --git a/icons/obj/doors/hatch/fill_steel.dmi b/icons/obj/doors/hatch/fill_steel.dmi deleted file mode 100644 index 88130eb051163..0000000000000 Binary files a/icons/obj/doors/hatch/fill_steel.dmi and /dev/null differ diff --git a/icons/obj/doors/hatch/fill_stripe.dmi b/icons/obj/doors/hatch/fill_stripe.dmi deleted file mode 100644 index 7532ae2edfb8b..0000000000000 Binary files a/icons/obj/doors/hatch/fill_stripe.dmi and /dev/null differ diff --git a/icons/obj/doors/hatch/lights_bolts.dmi b/icons/obj/doors/hatch/lights_bolts.dmi deleted file mode 100644 index 1a17f01ca63a4..0000000000000 Binary files a/icons/obj/doors/hatch/lights_bolts.dmi and /dev/null differ diff --git a/icons/obj/doors/hatch/lights_deny.dmi b/icons/obj/doors/hatch/lights_deny.dmi deleted file mode 100644 index 1fe72d724f951..0000000000000 Binary files a/icons/obj/doors/hatch/lights_deny.dmi and /dev/null differ diff --git a/icons/obj/doors/hatch/lights_green.dmi b/icons/obj/doors/hatch/lights_green.dmi deleted file mode 100644 index 508982d2d892a..0000000000000 Binary files a/icons/obj/doors/hatch/lights_green.dmi and /dev/null differ diff --git a/icons/obj/doors/hatch/panel.dmi b/icons/obj/doors/hatch/panel.dmi deleted file mode 100644 index c204955aaaf0f..0000000000000 Binary files a/icons/obj/doors/hatch/panel.dmi and /dev/null differ diff --git a/icons/obj/doors/hatch/stripe.dmi b/icons/obj/doors/hatch/stripe.dmi deleted file mode 100644 index 859e9c374726f..0000000000000 Binary files a/icons/obj/doors/hatch/stripe.dmi and /dev/null differ diff --git a/icons/obj/doors/hatch/welded.dmi b/icons/obj/doors/hatch/welded.dmi deleted file mode 100644 index a0a5f363442fc..0000000000000 Binary files a/icons/obj/doors/hatch/welded.dmi and /dev/null differ diff --git a/icons/obj/doors/hazard/door.dmi b/icons/obj/doors/hazard/door.dmi deleted file mode 100644 index 6c80b503f0c05..0000000000000 Binary files a/icons/obj/doors/hazard/door.dmi and /dev/null differ diff --git a/icons/obj/doors/hazard/panel.dmi b/icons/obj/doors/hazard/panel.dmi deleted file mode 100644 index b9826327859dd..0000000000000 Binary files a/icons/obj/doors/hazard/panel.dmi and /dev/null differ diff --git a/icons/obj/doors/hazard/welded.dmi b/icons/obj/doors/hazard/welded.dmi deleted file mode 100644 index 7293d4144cca2..0000000000000 Binary files a/icons/obj/doors/hazard/welded.dmi and /dev/null differ diff --git a/icons/obj/doors/hightechsecurity.dmi b/icons/obj/doors/hightechsecurity.dmi deleted file mode 100644 index 236995e9146ac..0000000000000 Binary files a/icons/obj/doors/hightechsecurity.dmi and /dev/null differ diff --git a/icons/obj/doors/material_doors.dmi b/icons/obj/doors/material_doors.dmi deleted file mode 100644 index 5f90312aac86f..0000000000000 Binary files a/icons/obj/doors/material_doors.dmi and /dev/null differ diff --git a/icons/obj/doors/material_doors_reflection.dmi b/icons/obj/doors/material_doors_reflection.dmi deleted file mode 100644 index 4184aa2451217..0000000000000 Binary files a/icons/obj/doors/material_doors_reflection.dmi and /dev/null differ diff --git a/icons/obj/doors/rapid_pdoor.dmi b/icons/obj/doors/rapid_pdoor.dmi deleted file mode 100644 index 3934a616da353..0000000000000 Binary files a/icons/obj/doors/rapid_pdoor.dmi and /dev/null differ diff --git a/icons/obj/doors/secure/door.dmi b/icons/obj/doors/secure/door.dmi deleted file mode 100644 index 0f8ca68dd2de1..0000000000000 Binary files a/icons/obj/doors/secure/door.dmi and /dev/null differ diff --git a/icons/obj/doors/secure/fill_steel.dmi b/icons/obj/doors/secure/fill_steel.dmi deleted file mode 100644 index dcb42c609aba2..0000000000000 Binary files a/icons/obj/doors/secure/fill_steel.dmi and /dev/null differ diff --git a/icons/obj/doors/station/color.dmi b/icons/obj/doors/station/color.dmi deleted file mode 100644 index 09e824124eaa4..0000000000000 Binary files a/icons/obj/doors/station/color.dmi and /dev/null differ diff --git a/icons/obj/doors/station/door.dmi b/icons/obj/doors/station/door.dmi deleted file mode 100644 index 13740f9611068..0000000000000 Binary files a/icons/obj/doors/station/door.dmi and /dev/null differ diff --git a/icons/obj/doors/station/emag.dmi b/icons/obj/doors/station/emag.dmi deleted file mode 100644 index 90947fe3d0454..0000000000000 Binary files a/icons/obj/doors/station/emag.dmi and /dev/null differ diff --git a/icons/obj/doors/station/fill_color.dmi b/icons/obj/doors/station/fill_color.dmi deleted file mode 100644 index 969a399c83e0c..0000000000000 Binary files a/icons/obj/doors/station/fill_color.dmi and /dev/null differ diff --git a/icons/obj/doors/station/fill_glass.dmi b/icons/obj/doors/station/fill_glass.dmi deleted file mode 100644 index 47cf423b5f69a..0000000000000 Binary files a/icons/obj/doors/station/fill_glass.dmi and /dev/null differ diff --git a/icons/obj/doors/station/fill_steel.dmi b/icons/obj/doors/station/fill_steel.dmi deleted file mode 100644 index f228b2d951f2e..0000000000000 Binary files a/icons/obj/doors/station/fill_steel.dmi and /dev/null differ diff --git a/icons/obj/doors/station/fill_stripe.dmi b/icons/obj/doors/station/fill_stripe.dmi deleted file mode 100644 index 63906a766b848..0000000000000 Binary files a/icons/obj/doors/station/fill_stripe.dmi and /dev/null differ diff --git a/icons/obj/doors/station/lights_bolts.dmi b/icons/obj/doors/station/lights_bolts.dmi deleted file mode 100644 index b8151373f2384..0000000000000 Binary files a/icons/obj/doors/station/lights_bolts.dmi and /dev/null differ diff --git a/icons/obj/doors/station/lights_deny.dmi b/icons/obj/doors/station/lights_deny.dmi deleted file mode 100644 index fff1fd844594b..0000000000000 Binary files a/icons/obj/doors/station/lights_deny.dmi and /dev/null differ diff --git a/icons/obj/doors/station/lights_green.dmi b/icons/obj/doors/station/lights_green.dmi deleted file mode 100644 index 7ca2ce3906866..0000000000000 Binary files a/icons/obj/doors/station/lights_green.dmi and /dev/null differ diff --git a/icons/obj/doors/station/panel.dmi b/icons/obj/doors/station/panel.dmi deleted file mode 100644 index 08685c08d4a52..0000000000000 Binary files a/icons/obj/doors/station/panel.dmi and /dev/null differ diff --git a/icons/obj/doors/station/sparks_broken.dmi b/icons/obj/doors/station/sparks_broken.dmi deleted file mode 100644 index 06ad95ef51d41..0000000000000 Binary files a/icons/obj/doors/station/sparks_broken.dmi and /dev/null differ diff --git a/icons/obj/doors/station/sparks_damaged.dmi b/icons/obj/doors/station/sparks_damaged.dmi deleted file mode 100644 index 64c6f96f55d75..0000000000000 Binary files a/icons/obj/doors/station/sparks_damaged.dmi and /dev/null differ diff --git a/icons/obj/doors/station/stripe.dmi b/icons/obj/doors/station/stripe.dmi deleted file mode 100644 index 8b5a90fa1628a..0000000000000 Binary files a/icons/obj/doors/station/stripe.dmi and /dev/null differ diff --git a/icons/obj/doors/station/welded.dmi b/icons/obj/doors/station/welded.dmi deleted file mode 100644 index e79421af0c200..0000000000000 Binary files a/icons/obj/doors/station/welded.dmi and /dev/null differ diff --git a/icons/obj/doors/vault.dmi b/icons/obj/doors/vault.dmi deleted file mode 100644 index b001f8c869b8d..0000000000000 Binary files a/icons/obj/doors/vault.dmi and /dev/null differ diff --git a/icons/obj/doors/vault/door.dmi b/icons/obj/doors/vault/door.dmi deleted file mode 100644 index ee9e280365684..0000000000000 Binary files a/icons/obj/doors/vault/door.dmi and /dev/null differ diff --git a/icons/obj/doors/vault/fill_steel.dmi b/icons/obj/doors/vault/fill_steel.dmi deleted file mode 100644 index dcb42c609aba2..0000000000000 Binary files a/icons/obj/doors/vault/fill_steel.dmi and /dev/null differ diff --git a/icons/obj/doors/windoor.dmi b/icons/obj/doors/windoor.dmi deleted file mode 100644 index 7a2f5ff0a9d2f..0000000000000 Binary files a/icons/obj/doors/windoor.dmi and /dev/null differ diff --git a/icons/obj/drain.dmi b/icons/obj/drain.dmi deleted file mode 100644 index 6d3dd19751b2c..0000000000000 Binary files a/icons/obj/drain.dmi and /dev/null differ diff --git a/icons/obj/drink_glasses/carafe.dmi b/icons/obj/drink_glasses/carafe.dmi deleted file mode 100644 index 568f661916783..0000000000000 Binary files a/icons/obj/drink_glasses/carafe.dmi and /dev/null differ diff --git a/icons/obj/drink_glasses/cocktail.dmi b/icons/obj/drink_glasses/cocktail.dmi deleted file mode 100644 index ecd115bb8cd67..0000000000000 Binary files a/icons/obj/drink_glasses/cocktail.dmi and /dev/null differ diff --git a/icons/obj/drink_glasses/coconut.dmi b/icons/obj/drink_glasses/coconut.dmi deleted file mode 100644 index a6552e1e9d490..0000000000000 Binary files a/icons/obj/drink_glasses/coconut.dmi and /dev/null differ diff --git a/icons/obj/drink_glasses/coffecup.dmi b/icons/obj/drink_glasses/coffecup.dmi deleted file mode 100644 index 7e48ac2c8343b..0000000000000 Binary files a/icons/obj/drink_glasses/coffecup.dmi and /dev/null differ diff --git a/icons/obj/drink_glasses/coffecup_tall.dmi b/icons/obj/drink_glasses/coffecup_tall.dmi deleted file mode 100644 index 076b703c79d4d..0000000000000 Binary files a/icons/obj/drink_glasses/coffecup_tall.dmi and /dev/null differ diff --git a/icons/obj/drink_glasses/cognac.dmi b/icons/obj/drink_glasses/cognac.dmi deleted file mode 100644 index a009ed21df030..0000000000000 Binary files a/icons/obj/drink_glasses/cognac.dmi and /dev/null differ diff --git a/icons/obj/drink_glasses/extras.dmi b/icons/obj/drink_glasses/extras.dmi deleted file mode 100644 index bd95fa117b79c..0000000000000 Binary files a/icons/obj/drink_glasses/extras.dmi and /dev/null differ diff --git a/icons/obj/drink_glasses/fitness.dmi b/icons/obj/drink_glasses/fitness.dmi deleted file mode 100644 index 2164e52fca143..0000000000000 Binary files a/icons/obj/drink_glasses/fitness.dmi and /dev/null differ diff --git a/icons/obj/drink_glasses/flute.dmi b/icons/obj/drink_glasses/flute.dmi deleted file mode 100644 index a2ee5bf5f8ffe..0000000000000 Binary files a/icons/obj/drink_glasses/flute.dmi and /dev/null differ diff --git a/icons/obj/drink_glasses/goblet.dmi b/icons/obj/drink_glasses/goblet.dmi deleted file mode 100644 index c233514195e84..0000000000000 Binary files a/icons/obj/drink_glasses/goblet.dmi and /dev/null differ diff --git a/icons/obj/drink_glasses/mug.dmi b/icons/obj/drink_glasses/mug.dmi deleted file mode 100644 index ed4a8d714391c..0000000000000 Binary files a/icons/obj/drink_glasses/mug.dmi and /dev/null differ diff --git a/icons/obj/drink_glasses/pineapple.dmi b/icons/obj/drink_glasses/pineapple.dmi deleted file mode 100644 index dadb67e65611e..0000000000000 Binary files a/icons/obj/drink_glasses/pineapple.dmi and /dev/null differ diff --git a/icons/obj/drink_glasses/pint.dmi b/icons/obj/drink_glasses/pint.dmi deleted file mode 100644 index e5ef4c9c68951..0000000000000 Binary files a/icons/obj/drink_glasses/pint.dmi and /dev/null differ diff --git a/icons/obj/drink_glasses/rocks.dmi b/icons/obj/drink_glasses/rocks.dmi deleted file mode 100644 index 7404460dbfe31..0000000000000 Binary files a/icons/obj/drink_glasses/rocks.dmi and /dev/null differ diff --git a/icons/obj/drink_glasses/shake.dmi b/icons/obj/drink_glasses/shake.dmi deleted file mode 100644 index 64ee7cb3580c0..0000000000000 Binary files a/icons/obj/drink_glasses/shake.dmi and /dev/null differ diff --git a/icons/obj/drink_glasses/shot.dmi b/icons/obj/drink_glasses/shot.dmi deleted file mode 100644 index d6d010561cfc7..0000000000000 Binary files a/icons/obj/drink_glasses/shot.dmi and /dev/null differ diff --git a/icons/obj/drink_glasses/square.dmi b/icons/obj/drink_glasses/square.dmi deleted file mode 100644 index ff07563c2ff75..0000000000000 Binary files a/icons/obj/drink_glasses/square.dmi and /dev/null differ diff --git a/icons/obj/drink_glasses/teacup.dmi b/icons/obj/drink_glasses/teacup.dmi deleted file mode 100644 index e54a7e2dbbd40..0000000000000 Binary files a/icons/obj/drink_glasses/teacup.dmi and /dev/null differ diff --git a/icons/obj/drink_glasses/wine.dmi b/icons/obj/drink_glasses/wine.dmi deleted file mode 100644 index 197f3b321e8e7..0000000000000 Binary files a/icons/obj/drink_glasses/wine.dmi and /dev/null differ diff --git a/icons/obj/drinks.dmi b/icons/obj/drinks.dmi deleted file mode 100644 index 838a0dc1e0c09..0000000000000 Binary files a/icons/obj/drinks.dmi and /dev/null differ diff --git a/icons/obj/dropper.dmi b/icons/obj/dropper.dmi deleted file mode 100644 index 40fa42fafd3ea..0000000000000 Binary files a/icons/obj/dropper.dmi and /dev/null differ diff --git a/icons/obj/ecig.dmi b/icons/obj/ecig.dmi deleted file mode 100644 index 7329ca25f93b6..0000000000000 Binary files a/icons/obj/ecig.dmi and /dev/null differ diff --git a/icons/obj/eftpos.dmi b/icons/obj/eftpos.dmi deleted file mode 100644 index 80af56c93950d..0000000000000 Binary files a/icons/obj/eftpos.dmi and /dev/null differ diff --git a/icons/obj/electronic_assemblies.dmi b/icons/obj/electronic_assemblies.dmi deleted file mode 100644 index ab320443828fb..0000000000000 Binary files a/icons/obj/electronic_assemblies.dmi and /dev/null differ diff --git a/icons/obj/emp_grenade.dmi b/icons/obj/emp_grenade.dmi deleted file mode 100644 index 19c0c92972a46..0000000000000 Binary files a/icons/obj/emp_grenade.dmi and /dev/null differ diff --git a/icons/obj/engine.dmi b/icons/obj/engine.dmi deleted file mode 100644 index 115fbd628b0ae..0000000000000 Binary files a/icons/obj/engine.dmi and /dev/null differ diff --git a/icons/obj/extinguisher.dmi b/icons/obj/extinguisher.dmi deleted file mode 100644 index 760bfe5049bf3..0000000000000 Binary files a/icons/obj/extinguisher.dmi and /dev/null differ diff --git a/icons/obj/eyes.dmi b/icons/obj/eyes.dmi deleted file mode 100644 index 5cc157ab1d477..0000000000000 Binary files a/icons/obj/eyes.dmi and /dev/null differ diff --git a/icons/obj/firealarm.dmi b/icons/obj/firealarm.dmi deleted file mode 100644 index 70089b08126d1..0000000000000 Binary files a/icons/obj/firealarm.dmi and /dev/null differ diff --git a/icons/obj/flamethrower.dmi b/icons/obj/flamethrower.dmi deleted file mode 100644 index 0c3ad248c4429..0000000000000 Binary files a/icons/obj/flamethrower.dmi and /dev/null differ diff --git a/icons/obj/flamethrower_new.dmi b/icons/obj/flamethrower_new.dmi deleted file mode 100644 index 082863918d89a..0000000000000 Binary files a/icons/obj/flamethrower_new.dmi and /dev/null differ diff --git a/icons/obj/flash.dmi b/icons/obj/flash.dmi deleted file mode 100644 index 55458eb8346ab..0000000000000 Binary files a/icons/obj/flash.dmi and /dev/null differ diff --git a/icons/obj/flash_advanced.dmi b/icons/obj/flash_advanced.dmi deleted file mode 100644 index d1ef8764f3974..0000000000000 Binary files a/icons/obj/flash_advanced.dmi and /dev/null differ diff --git a/icons/obj/flash_synthetic.dmi b/icons/obj/flash_synthetic.dmi deleted file mode 100644 index 98e5d53a019ca..0000000000000 Binary files a/icons/obj/flash_synthetic.dmi and /dev/null differ diff --git a/icons/obj/flora/ausflora.dmi b/icons/obj/flora/ausflora.dmi deleted file mode 100644 index 720e4bd74240a..0000000000000 Binary files a/icons/obj/flora/ausflora.dmi and /dev/null differ diff --git a/icons/obj/flora/deadtrees.dmi b/icons/obj/flora/deadtrees.dmi deleted file mode 100644 index f76ffd442f99b..0000000000000 Binary files a/icons/obj/flora/deadtrees.dmi and /dev/null differ diff --git a/icons/obj/flora/greygrass.dmi b/icons/obj/flora/greygrass.dmi deleted file mode 100644 index 4b8c89d9f8833..0000000000000 Binary files a/icons/obj/flora/greygrass.dmi and /dev/null differ diff --git a/icons/obj/flora/pinetrees.dmi b/icons/obj/flora/pinetrees.dmi deleted file mode 100644 index 9a39dc154c00b..0000000000000 Binary files a/icons/obj/flora/pinetrees.dmi and /dev/null differ diff --git a/icons/obj/flora/rocks.dmi b/icons/obj/flora/rocks.dmi deleted file mode 100644 index a1f6a0df0a92f..0000000000000 Binary files a/icons/obj/flora/rocks.dmi and /dev/null differ diff --git a/icons/obj/flora/snowflora.dmi b/icons/obj/flora/snowflora.dmi deleted file mode 100644 index 11cbf5a5053f0..0000000000000 Binary files a/icons/obj/flora/snowflora.dmi and /dev/null differ diff --git a/icons/obj/folding_knife.dmi b/icons/obj/folding_knife.dmi deleted file mode 100644 index 2fabce8b97c1c..0000000000000 Binary files a/icons/obj/folding_knife.dmi and /dev/null differ diff --git a/icons/obj/food.dmi b/icons/obj/food.dmi deleted file mode 100644 index cd143d5a9f8df..0000000000000 Binary files a/icons/obj/food.dmi and /dev/null differ diff --git a/icons/obj/food_canned.dmi b/icons/obj/food_canned.dmi deleted file mode 100644 index 405ea82b7924b..0000000000000 Binary files a/icons/obj/food_canned.dmi and /dev/null differ diff --git a/icons/obj/food_custom.dmi b/icons/obj/food_custom.dmi deleted file mode 100644 index 5af6cce0f17c6..0000000000000 Binary files a/icons/obj/food_custom.dmi and /dev/null differ diff --git a/icons/obj/food_ingredients.dmi b/icons/obj/food_ingredients.dmi deleted file mode 100644 index ad4ecd8d83fbe..0000000000000 Binary files a/icons/obj/food_ingredients.dmi and /dev/null differ diff --git a/icons/obj/forensics.dmi b/icons/obj/forensics.dmi deleted file mode 100644 index b02f9449b38a5..0000000000000 Binary files a/icons/obj/forensics.dmi and /dev/null differ diff --git a/icons/obj/fountain.dmi b/icons/obj/fountain.dmi deleted file mode 100644 index 2d1152fcbcdca..0000000000000 Binary files a/icons/obj/fountain.dmi and /dev/null differ diff --git a/icons/obj/furniture.dmi b/icons/obj/furniture.dmi deleted file mode 100644 index fcf61f9c89863..0000000000000 Binary files a/icons/obj/furniture.dmi and /dev/null differ diff --git a/icons/obj/gate.dmi b/icons/obj/gate.dmi deleted file mode 100644 index e69de29bb2d1d..0000000000000 diff --git a/icons/obj/geiger_counter.dmi b/icons/obj/geiger_counter.dmi deleted file mode 100644 index 2648bbd2baee3..0000000000000 Binary files a/icons/obj/geiger_counter.dmi and /dev/null differ diff --git a/icons/obj/goal_paperwork.dmi b/icons/obj/goal_paperwork.dmi deleted file mode 100644 index e8f62e662d201..0000000000000 Binary files a/icons/obj/goal_paperwork.dmi and /dev/null differ diff --git a/icons/obj/gravestone.dmi b/icons/obj/gravestone.dmi deleted file mode 100644 index 3d4138edca1e7..0000000000000 Binary files a/icons/obj/gravestone.dmi and /dev/null differ diff --git a/icons/obj/grenade.dmi b/icons/obj/grenade.dmi deleted file mode 100644 index 3f0c63e3a4ff3..0000000000000 Binary files a/icons/obj/grenade.dmi and /dev/null differ diff --git a/icons/obj/grille.dmi b/icons/obj/grille.dmi deleted file mode 100644 index 983aa866408a0..0000000000000 Binary files a/icons/obj/grille.dmi and /dev/null differ diff --git a/icons/obj/grille_cult.dmi b/icons/obj/grille_cult.dmi deleted file mode 100644 index aba266a00ed09..0000000000000 Binary files a/icons/obj/grille_cult.dmi and /dev/null differ diff --git a/icons/obj/gripper.dmi b/icons/obj/gripper.dmi deleted file mode 100644 index 6016f04b75ed1..0000000000000 Binary files a/icons/obj/gripper.dmi and /dev/null differ diff --git a/icons/obj/guncabinet.dmi b/icons/obj/guncabinet.dmi deleted file mode 100644 index 70fdb3ef190e0..0000000000000 Binary files a/icons/obj/guncabinet.dmi and /dev/null differ diff --git a/icons/obj/guns/adv_egun.dmi b/icons/obj/guns/adv_egun.dmi deleted file mode 100644 index dbb1ad85d4404..0000000000000 Binary files a/icons/obj/guns/adv_egun.dmi and /dev/null differ diff --git a/icons/obj/guns/assault_rifle.dmi b/icons/obj/guns/assault_rifle.dmi deleted file mode 100644 index b781074d99f63..0000000000000 Binary files a/icons/obj/guns/assault_rifle.dmi and /dev/null differ diff --git a/icons/obj/guns/basic_energy.dmi b/icons/obj/guns/basic_energy.dmi deleted file mode 100644 index 8bb69581951b0..0000000000000 Binary files a/icons/obj/guns/basic_energy.dmi and /dev/null differ diff --git a/icons/obj/guns/battlerifle.dmi b/icons/obj/guns/battlerifle.dmi deleted file mode 100644 index 47d1ffc92de6d..0000000000000 Binary files a/icons/obj/guns/battlerifle.dmi and /dev/null differ diff --git a/icons/obj/guns/boltaction.dmi b/icons/obj/guns/boltaction.dmi deleted file mode 100644 index 36ef69e839c1f..0000000000000 Binary files a/icons/obj/guns/boltaction.dmi and /dev/null differ diff --git a/icons/obj/guns/broomstick.dmi b/icons/obj/guns/broomstick.dmi deleted file mode 100644 index caa43b98d9364..0000000000000 Binary files a/icons/obj/guns/broomstick.dmi and /dev/null differ diff --git a/icons/obj/guns/bullpup_rifle.dmi b/icons/obj/guns/bullpup_rifle.dmi deleted file mode 100644 index 65d796e9adb85..0000000000000 Binary files a/icons/obj/guns/bullpup_rifle.dmi and /dev/null differ diff --git a/icons/obj/guns/caplaser.dmi b/icons/obj/guns/caplaser.dmi deleted file mode 100644 index 45521ae45655d..0000000000000 Binary files a/icons/obj/guns/caplaser.dmi and /dev/null differ diff --git a/icons/obj/guns/coilgun.dmi b/icons/obj/guns/coilgun.dmi deleted file mode 100644 index 37b254b1c2b91..0000000000000 Binary files a/icons/obj/guns/coilgun.dmi and /dev/null differ diff --git a/icons/obj/guns/confuseray.dmi b/icons/obj/guns/confuseray.dmi deleted file mode 100644 index 42e7949f618fd..0000000000000 Binary files a/icons/obj/guns/confuseray.dmi and /dev/null differ diff --git a/icons/obj/guns/crossbow.dmi b/icons/obj/guns/crossbow.dmi deleted file mode 100644 index 2cc2173095f7b..0000000000000 Binary files a/icons/obj/guns/crossbow.dmi and /dev/null differ diff --git a/icons/obj/guns/darkcannon.dmi b/icons/obj/guns/darkcannon.dmi deleted file mode 100644 index d7c310c3c932c..0000000000000 Binary files a/icons/obj/guns/darkcannon.dmi and /dev/null differ diff --git a/icons/obj/guns/dartgun.dmi b/icons/obj/guns/dartgun.dmi deleted file mode 100644 index 016b3213e587c..0000000000000 Binary files a/icons/obj/guns/dartgun.dmi and /dev/null differ diff --git a/icons/obj/guns/decloner.dmi b/icons/obj/guns/decloner.dmi deleted file mode 100644 index 45c6d4e025ff0..0000000000000 Binary files a/icons/obj/guns/decloner.dmi and /dev/null differ diff --git a/icons/obj/guns/energy_crossbow.dmi b/icons/obj/guns/energy_crossbow.dmi deleted file mode 100644 index 1ebd7fd818653..0000000000000 Binary files a/icons/obj/guns/energy_crossbow.dmi and /dev/null differ diff --git a/icons/obj/guns/energy_gun.dmi b/icons/obj/guns/energy_gun.dmi deleted file mode 100644 index 71affc15a62e3..0000000000000 Binary files a/icons/obj/guns/energy_gun.dmi and /dev/null differ diff --git a/icons/obj/guns/energy_gun_secure.dmi b/icons/obj/guns/energy_gun_secure.dmi deleted file mode 100644 index 60ed533184980..0000000000000 Binary files a/icons/obj/guns/energy_gun_secure.dmi and /dev/null differ diff --git a/icons/obj/guns/energy_revolver.dmi b/icons/obj/guns/energy_revolver.dmi deleted file mode 100644 index fe1c4a6a5d08d..0000000000000 Binary files a/icons/obj/guns/energy_revolver.dmi and /dev/null differ diff --git a/icons/obj/guns/flaregun.dmi b/icons/obj/guns/flaregun.dmi deleted file mode 100644 index de1737cb56d3d..0000000000000 Binary files a/icons/obj/guns/flaregun.dmi and /dev/null differ diff --git a/icons/obj/guns/flechette.dmi b/icons/obj/guns/flechette.dmi deleted file mode 100644 index f99e2ae035f28..0000000000000 Binary files a/icons/obj/guns/flechette.dmi and /dev/null differ diff --git a/icons/obj/guns/floral.dmi b/icons/obj/guns/floral.dmi deleted file mode 100644 index b119dae9f25b4..0000000000000 Binary files a/icons/obj/guns/floral.dmi and /dev/null differ diff --git a/icons/obj/guns/foam.dmi b/icons/obj/guns/foam.dmi deleted file mode 100644 index b1155c740420b..0000000000000 Binary files a/icons/obj/guns/foam.dmi and /dev/null differ diff --git a/icons/obj/guns/foundation.dmi b/icons/obj/guns/foundation.dmi deleted file mode 100644 index 151e94432a44d..0000000000000 Binary files a/icons/obj/guns/foundation.dmi and /dev/null differ diff --git a/icons/obj/guns/freezegun.dmi b/icons/obj/guns/freezegun.dmi deleted file mode 100644 index 1b0b7e040a948..0000000000000 Binary files a/icons/obj/guns/freezegun.dmi and /dev/null differ diff --git a/icons/obj/guns/garand.dmi b/icons/obj/guns/garand.dmi deleted file mode 100644 index bfbfa8b637a5f..0000000000000 Binary files a/icons/obj/guns/garand.dmi and /dev/null differ diff --git a/icons/obj/guns/gui.dmi b/icons/obj/guns/gui.dmi deleted file mode 100644 index 48ea898fafcbb..0000000000000 Binary files a/icons/obj/guns/gui.dmi and /dev/null differ diff --git a/icons/obj/guns/gyropistol.dmi b/icons/obj/guns/gyropistol.dmi deleted file mode 100644 index b1ef8bb7b26c1..0000000000000 Binary files a/icons/obj/guns/gyropistol.dmi and /dev/null differ diff --git a/icons/obj/guns/heavysniper.dmi b/icons/obj/guns/heavysniper.dmi deleted file mode 100644 index c279bb88087a3..0000000000000 Binary files a/icons/obj/guns/heavysniper.dmi and /dev/null differ diff --git a/icons/obj/guns/holdout_pistol.dmi b/icons/obj/guns/holdout_pistol.dmi deleted file mode 100644 index 64d2fb1b25ba6..0000000000000 Binary files a/icons/obj/guns/holdout_pistol.dmi and /dev/null differ diff --git a/icons/obj/guns/incendiary_laser.dmi b/icons/obj/guns/incendiary_laser.dmi deleted file mode 100644 index 8c0e9cef10fad..0000000000000 Binary files a/icons/obj/guns/incendiary_laser.dmi and /dev/null differ diff --git a/icons/obj/guns/ion_pistol.dmi b/icons/obj/guns/ion_pistol.dmi deleted file mode 100644 index f3ce4814629e6..0000000000000 Binary files a/icons/obj/guns/ion_pistol.dmi and /dev/null differ diff --git a/icons/obj/guns/ion_rifle.dmi b/icons/obj/guns/ion_rifle.dmi deleted file mode 100644 index db06841d53126..0000000000000 Binary files a/icons/obj/guns/ion_rifle.dmi and /dev/null differ diff --git a/icons/obj/guns/laser_cannon.dmi b/icons/obj/guns/laser_cannon.dmi deleted file mode 100644 index 71b13d6c5d097..0000000000000 Binary files a/icons/obj/guns/laser_cannon.dmi and /dev/null differ diff --git a/icons/obj/guns/laser_carbine.dmi b/icons/obj/guns/laser_carbine.dmi deleted file mode 100644 index 4c21fd9950396..0000000000000 Binary files a/icons/obj/guns/laser_carbine.dmi and /dev/null differ diff --git a/icons/obj/guns/laser_sniper.dmi b/icons/obj/guns/laser_sniper.dmi deleted file mode 100644 index 04ec1da5bbaad..0000000000000 Binary files a/icons/obj/guns/laser_sniper.dmi and /dev/null differ diff --git a/icons/obj/guns/lasertag.dmi b/icons/obj/guns/lasertag.dmi deleted file mode 100644 index 51a7dcb66c59b..0000000000000 Binary files a/icons/obj/guns/lasertag.dmi and /dev/null differ diff --git a/icons/obj/guns/launchers.dmi b/icons/obj/guns/launchers.dmi deleted file mode 100644 index 7e1604c0383f0..0000000000000 Binary files a/icons/obj/guns/launchers.dmi and /dev/null differ diff --git a/icons/obj/guns/machine_pistol.dmi b/icons/obj/guns/machine_pistol.dmi deleted file mode 100644 index db89bb974d951..0000000000000 Binary files a/icons/obj/guns/machine_pistol.dmi and /dev/null differ diff --git a/icons/obj/guns/magnum_pistol.dmi b/icons/obj/guns/magnum_pistol.dmi deleted file mode 100644 index 9e55fd5961e66..0000000000000 Binary files a/icons/obj/guns/magnum_pistol.dmi and /dev/null differ diff --git a/icons/obj/guns/merc_smg.dmi b/icons/obj/guns/merc_smg.dmi deleted file mode 100644 index ee2f142902b5c..0000000000000 Binary files a/icons/obj/guns/merc_smg.dmi and /dev/null differ diff --git a/icons/obj/guns/military_pistol.dmi b/icons/obj/guns/military_pistol.dmi deleted file mode 100644 index de445159a65d0..0000000000000 Binary files a/icons/obj/guns/military_pistol.dmi and /dev/null differ diff --git a/icons/obj/guns/military_pistol2.dmi b/icons/obj/guns/military_pistol2.dmi deleted file mode 100644 index aa4aec29a25bb..0000000000000 Binary files a/icons/obj/guns/military_pistol2.dmi and /dev/null differ diff --git a/icons/obj/guns/noise.dmi b/icons/obj/guns/noise.dmi deleted file mode 100644 index 931773c0fe626..0000000000000 Binary files a/icons/obj/guns/noise.dmi and /dev/null differ diff --git a/icons/obj/guns/particle_rifle.dmi b/icons/obj/guns/particle_rifle.dmi deleted file mode 100644 index faff64943b77f..0000000000000 Binary files a/icons/obj/guns/particle_rifle.dmi and /dev/null differ diff --git a/icons/obj/guns/pistol.dmi b/icons/obj/guns/pistol.dmi deleted file mode 100644 index 4fd5d63b1238e..0000000000000 Binary files a/icons/obj/guns/pistol.dmi and /dev/null differ diff --git a/icons/obj/guns/pistol_throwback.dmi b/icons/obj/guns/pistol_throwback.dmi deleted file mode 100644 index d83257d933df4..0000000000000 Binary files a/icons/obj/guns/pistol_throwback.dmi and /dev/null differ diff --git a/icons/obj/guns/plasma_stun.dmi b/icons/obj/guns/plasma_stun.dmi deleted file mode 100644 index 6e16de9b74a36..0000000000000 Binary files a/icons/obj/guns/plasma_stun.dmi and /dev/null differ diff --git a/icons/obj/guns/plasmacutter.dmi b/icons/obj/guns/plasmacutter.dmi deleted file mode 100644 index 5fb4e1814f132..0000000000000 Binary files a/icons/obj/guns/plasmacutter.dmi and /dev/null differ diff --git a/icons/obj/guns/pneumatic.dmi b/icons/obj/guns/pneumatic.dmi deleted file mode 100644 index af1f044ec53eb..0000000000000 Binary files a/icons/obj/guns/pneumatic.dmi and /dev/null differ diff --git a/icons/obj/guns/prototype_smg.dmi b/icons/obj/guns/prototype_smg.dmi deleted file mode 100644 index 52eb2966b67ff..0000000000000 Binary files a/icons/obj/guns/prototype_smg.dmi and /dev/null differ diff --git a/icons/obj/guns/pulse_carbine.dmi b/icons/obj/guns/pulse_carbine.dmi deleted file mode 100644 index 871de65960bba..0000000000000 Binary files a/icons/obj/guns/pulse_carbine.dmi and /dev/null differ diff --git a/icons/obj/guns/pulse_pistol.dmi b/icons/obj/guns/pulse_pistol.dmi deleted file mode 100644 index 6c47f01354b17..0000000000000 Binary files a/icons/obj/guns/pulse_pistol.dmi and /dev/null differ diff --git a/icons/obj/guns/pulse_rifle.dmi b/icons/obj/guns/pulse_rifle.dmi deleted file mode 100644 index 68f0bf4047cf9..0000000000000 Binary files a/icons/obj/guns/pulse_rifle.dmi and /dev/null differ diff --git a/icons/obj/guns/railgun.dmi b/icons/obj/guns/railgun.dmi deleted file mode 100644 index 41f4305708ee7..0000000000000 Binary files a/icons/obj/guns/railgun.dmi and /dev/null differ diff --git a/icons/obj/guns/railgun_adv.dmi b/icons/obj/guns/railgun_adv.dmi deleted file mode 100644 index 5348238ee7733..0000000000000 Binary files a/icons/obj/guns/railgun_adv.dmi and /dev/null differ diff --git a/icons/obj/guns/railgun_heavy.dmi b/icons/obj/guns/railgun_heavy.dmi deleted file mode 100644 index c941c06e20606..0000000000000 Binary files a/icons/obj/guns/railgun_heavy.dmi and /dev/null differ diff --git a/icons/obj/guns/railgun_old.dmi b/icons/obj/guns/railgun_old.dmi deleted file mode 100644 index bba77b23bca65..0000000000000 Binary files a/icons/obj/guns/railgun_old.dmi and /dev/null differ diff --git a/icons/obj/guns/railgun_old_heavy.dmi b/icons/obj/guns/railgun_old_heavy.dmi deleted file mode 100644 index fe6340fa7482e..0000000000000 Binary files a/icons/obj/guns/railgun_old_heavy.dmi and /dev/null differ diff --git a/icons/obj/guns/retro_laser.dmi b/icons/obj/guns/retro_laser.dmi deleted file mode 100644 index abc1569933128..0000000000000 Binary files a/icons/obj/guns/retro_laser.dmi and /dev/null differ diff --git a/icons/obj/guns/revolvers.dmi b/icons/obj/guns/revolvers.dmi deleted file mode 100644 index b605657142f85..0000000000000 Binary files a/icons/obj/guns/revolvers.dmi and /dev/null differ diff --git a/icons/obj/guns/saw.dmi b/icons/obj/guns/saw.dmi deleted file mode 100644 index 187d6b6d7eb9c..0000000000000 Binary files a/icons/obj/guns/saw.dmi and /dev/null differ diff --git a/icons/obj/guns/sec_smg.dmi b/icons/obj/guns/sec_smg.dmi deleted file mode 100644 index 8068c7659f7ec..0000000000000 Binary files a/icons/obj/guns/sec_smg.dmi and /dev/null differ diff --git a/icons/obj/guns/semistrip.dmi b/icons/obj/guns/semistrip.dmi deleted file mode 100644 index 4926895bdfee9..0000000000000 Binary files a/icons/obj/guns/semistrip.dmi and /dev/null differ diff --git a/icons/obj/guns/shotguns.dmi b/icons/obj/guns/shotguns.dmi deleted file mode 100644 index 2e8e0a40f9405..0000000000000 Binary files a/icons/obj/guns/shotguns.dmi and /dev/null differ diff --git a/icons/obj/guns/skrell_carbine.dmi b/icons/obj/guns/skrell_carbine.dmi deleted file mode 100644 index 5c264e6b102b0..0000000000000 Binary files a/icons/obj/guns/skrell_carbine.dmi and /dev/null differ diff --git a/icons/obj/guns/skrell_pistol.dmi b/icons/obj/guns/skrell_pistol.dmi deleted file mode 100644 index 7a0aa67aeb178..0000000000000 Binary files a/icons/obj/guns/skrell_pistol.dmi and /dev/null differ diff --git a/icons/obj/guns/skrell_rifle.dmi b/icons/obj/guns/skrell_rifle.dmi deleted file mode 100644 index 554cdcf5b48c8..0000000000000 Binary files a/icons/obj/guns/skrell_rifle.dmi and /dev/null differ diff --git a/icons/obj/guns/small_egun.dmi b/icons/obj/guns/small_egun.dmi deleted file mode 100644 index e7ba8e55c4964..0000000000000 Binary files a/icons/obj/guns/small_egun.dmi and /dev/null differ diff --git a/icons/obj/guns/small_egun_secure.dmi b/icons/obj/guns/small_egun_secure.dmi deleted file mode 100644 index 203f9ddb21658..0000000000000 Binary files a/icons/obj/guns/small_egun_secure.dmi and /dev/null differ diff --git a/icons/obj/guns/spikethrower.dmi b/icons/obj/guns/spikethrower.dmi deleted file mode 100644 index 655684a586493..0000000000000 Binary files a/icons/obj/guns/spikethrower.dmi and /dev/null differ diff --git a/icons/obj/guns/staff.dmi b/icons/obj/guns/staff.dmi deleted file mode 100644 index e1f651afec504..0000000000000 Binary files a/icons/obj/guns/staff.dmi and /dev/null differ diff --git a/icons/obj/guns/stunrevolver.dmi b/icons/obj/guns/stunrevolver.dmi deleted file mode 100644 index 4be81f82529ac..0000000000000 Binary files a/icons/obj/guns/stunrevolver.dmi and /dev/null differ diff --git a/icons/obj/guns/stunrevolver_secure.dmi b/icons/obj/guns/stunrevolver_secure.dmi deleted file mode 100644 index 647980cf6bcf8..0000000000000 Binary files a/icons/obj/guns/stunrevolver_secure.dmi and /dev/null differ diff --git a/icons/obj/guns/stunrifle.dmi b/icons/obj/guns/stunrifle.dmi deleted file mode 100644 index 7e88896b68316..0000000000000 Binary files a/icons/obj/guns/stunrifle.dmi and /dev/null differ diff --git a/icons/obj/guns/syringegun.dmi b/icons/obj/guns/syringegun.dmi deleted file mode 100644 index d0e75ac271304..0000000000000 Binary files a/icons/obj/guns/syringegun.dmi and /dev/null differ diff --git a/icons/obj/guns/taser.dmi b/icons/obj/guns/taser.dmi deleted file mode 100644 index 873303f005d13..0000000000000 Binary files a/icons/obj/guns/taser.dmi and /dev/null differ diff --git a/icons/obj/guns/taser_carbine.dmi b/icons/obj/guns/taser_carbine.dmi deleted file mode 100644 index d6e7d2af7b07b..0000000000000 Binary files a/icons/obj/guns/taser_carbine.dmi and /dev/null differ diff --git a/icons/obj/guns/toxgun.dmi b/icons/obj/guns/toxgun.dmi deleted file mode 100644 index df3deb2152ab1..0000000000000 Binary files a/icons/obj/guns/toxgun.dmi and /dev/null differ diff --git a/icons/obj/guns/xray.dmi b/icons/obj/guns/xray.dmi deleted file mode 100644 index cc22044736eb2..0000000000000 Binary files a/icons/obj/guns/xray.dmi and /dev/null differ diff --git a/icons/obj/guns/xray_pistol.dmi b/icons/obj/guns/xray_pistol.dmi deleted file mode 100644 index c19bff5d5e4bf..0000000000000 Binary files a/icons/obj/guns/xray_pistol.dmi and /dev/null differ diff --git a/icons/obj/guns/zipgun.dmi b/icons/obj/guns/zipgun.dmi deleted file mode 100644 index ac911801c5ea1..0000000000000 Binary files a/icons/obj/guns/zipgun.dmi and /dev/null differ diff --git a/icons/obj/hacktool.dmi b/icons/obj/hacktool.dmi deleted file mode 100644 index b1d6753ff1633..0000000000000 Binary files a/icons/obj/hacktool.dmi and /dev/null differ diff --git a/icons/obj/hailer.dmi b/icons/obj/hailer.dmi deleted file mode 100644 index adb881deea546..0000000000000 Binary files a/icons/obj/hailer.dmi and /dev/null differ diff --git a/icons/obj/health_analyzer.dmi b/icons/obj/health_analyzer.dmi deleted file mode 100644 index 1e01ca7fb535d..0000000000000 Binary files a/icons/obj/health_analyzer.dmi and /dev/null differ diff --git a/icons/obj/heartmonitor.dmi b/icons/obj/heartmonitor.dmi deleted file mode 100644 index dcbdfa4f54035..0000000000000 Binary files a/icons/obj/heartmonitor.dmi and /dev/null differ diff --git a/icons/obj/holosign.dmi b/icons/obj/holosign.dmi deleted file mode 100644 index cf1781d4235be..0000000000000 Binary files a/icons/obj/holosign.dmi and /dev/null differ diff --git a/icons/obj/holowarrant.dmi b/icons/obj/holowarrant.dmi deleted file mode 100644 index b891b02c819fd..0000000000000 Binary files a/icons/obj/holowarrant.dmi and /dev/null differ diff --git a/icons/obj/hud_full.dmi b/icons/obj/hud_full.dmi deleted file mode 100644 index 1905602e553fb..0000000000000 Binary files a/icons/obj/hud_full.dmi and /dev/null differ diff --git a/icons/obj/hud_tile.dmi b/icons/obj/hud_tile.dmi deleted file mode 100644 index 18cb52142da76..0000000000000 Binary files a/icons/obj/hud_tile.dmi and /dev/null differ diff --git a/icons/obj/hydroponics_growing.dmi b/icons/obj/hydroponics_growing.dmi deleted file mode 100644 index 9300edc49a060..0000000000000 Binary files a/icons/obj/hydroponics_growing.dmi and /dev/null differ diff --git a/icons/obj/hydroponics_large.dmi b/icons/obj/hydroponics_large.dmi deleted file mode 100644 index 5694b754c5f3e..0000000000000 Binary files a/icons/obj/hydroponics_large.dmi and /dev/null differ diff --git a/icons/obj/hydroponics_machines.dmi b/icons/obj/hydroponics_machines.dmi deleted file mode 100644 index 1797358fbba64..0000000000000 Binary files a/icons/obj/hydroponics_machines.dmi and /dev/null differ diff --git a/icons/obj/hydroponics_misc.dmi b/icons/obj/hydroponics_misc.dmi deleted file mode 100644 index a5c594d93ff9f..0000000000000 Binary files a/icons/obj/hydroponics_misc.dmi and /dev/null differ diff --git a/icons/obj/hydroponics_products.dmi b/icons/obj/hydroponics_products.dmi deleted file mode 100644 index 7d8312c623e58..0000000000000 Binary files a/icons/obj/hydroponics_products.dmi and /dev/null differ diff --git a/icons/obj/hydroponics_vines.dmi b/icons/obj/hydroponics_vines.dmi deleted file mode 100644 index f692fcccbfe25..0000000000000 Binary files a/icons/obj/hydroponics_vines.dmi and /dev/null differ diff --git a/icons/obj/implant.dmi b/icons/obj/implant.dmi deleted file mode 100644 index c397d80905f66..0000000000000 Binary files a/icons/obj/implant.dmi and /dev/null differ diff --git a/icons/obj/inflatable.dmi b/icons/obj/inflatable.dmi deleted file mode 100644 index fdd42e244c6b1..0000000000000 Binary files a/icons/obj/inflatable.dmi and /dev/null differ diff --git a/icons/obj/ironing.dmi b/icons/obj/ironing.dmi deleted file mode 100644 index ce773f47082f0..0000000000000 Binary files a/icons/obj/ironing.dmi and /dev/null differ diff --git a/icons/obj/items.dmi b/icons/obj/items.dmi deleted file mode 100644 index 9e462db6ce344..0000000000000 Binary files a/icons/obj/items.dmi and /dev/null differ diff --git a/icons/obj/iv_drip.dmi b/icons/obj/iv_drip.dmi deleted file mode 100644 index b4c3704e98ded..0000000000000 Binary files a/icons/obj/iv_drip.dmi and /dev/null differ diff --git a/icons/obj/janitor.dmi b/icons/obj/janitor.dmi deleted file mode 100644 index 7209fdfb70917..0000000000000 Binary files a/icons/obj/janitor.dmi and /dev/null differ diff --git a/icons/obj/jukebox.dmi b/icons/obj/jukebox.dmi deleted file mode 100644 index 910904970424f..0000000000000 Binary files a/icons/obj/jukebox.dmi and /dev/null differ diff --git a/icons/obj/jukebox_new.dmi b/icons/obj/jukebox_new.dmi deleted file mode 100644 index dfeec5a91c163..0000000000000 Binary files a/icons/obj/jukebox_new.dmi and /dev/null differ diff --git a/icons/obj/kinetic_harvester.dmi b/icons/obj/kinetic_harvester.dmi deleted file mode 100644 index fa9fda3b0e4b1..0000000000000 Binary files a/icons/obj/kinetic_harvester.dmi and /dev/null differ diff --git a/icons/obj/kitchen.dmi b/icons/obj/kitchen.dmi deleted file mode 100644 index d7a1675664704..0000000000000 Binary files a/icons/obj/kitchen.dmi and /dev/null differ diff --git a/icons/obj/knife.dmi b/icons/obj/knife.dmi deleted file mode 100644 index 595c3a2ca73b1..0000000000000 Binary files a/icons/obj/knife.dmi and /dev/null differ diff --git a/icons/obj/lavatory.dmi b/icons/obj/lavatory.dmi deleted file mode 100644 index 8af1a53c28178..0000000000000 Binary files a/icons/obj/lavatory.dmi and /dev/null differ diff --git a/icons/obj/library.dmi b/icons/obj/library.dmi deleted file mode 100644 index 966f652147afd..0000000000000 Binary files a/icons/obj/library.dmi and /dev/null differ diff --git a/icons/obj/light_overlays.dmi b/icons/obj/light_overlays.dmi deleted file mode 100644 index 118765f0f52e6..0000000000000 Binary files a/icons/obj/light_overlays.dmi and /dev/null differ diff --git a/icons/obj/lighters.dmi b/icons/obj/lighters.dmi deleted file mode 100644 index 7559a03d832be..0000000000000 Binary files a/icons/obj/lighters.dmi and /dev/null differ diff --git a/icons/obj/lighting.dmi b/icons/obj/lighting.dmi deleted file mode 100644 index 8a35e9974fafa..0000000000000 Binary files a/icons/obj/lighting.dmi and /dev/null differ diff --git a/icons/obj/lighting_nav.dmi b/icons/obj/lighting_nav.dmi deleted file mode 100644 index 44b401d27369b..0000000000000 Binary files a/icons/obj/lighting_nav.dmi and /dev/null differ diff --git a/icons/obj/locator.dmi b/icons/obj/locator.dmi deleted file mode 100644 index 3f57eda46ce58..0000000000000 Binary files a/icons/obj/locator.dmi and /dev/null differ diff --git a/icons/obj/lockwall.dmi b/icons/obj/lockwall.dmi deleted file mode 100644 index a143d1601848b..0000000000000 Binary files a/icons/obj/lockwall.dmi and /dev/null differ diff --git a/icons/obj/machines/adherent.dmi b/icons/obj/machines/adherent.dmi deleted file mode 100644 index a814c79d017c1..0000000000000 Binary files a/icons/obj/machines/adherent.dmi and /dev/null differ diff --git a/icons/obj/machines/am_engine.dmi b/icons/obj/machines/am_engine.dmi deleted file mode 100644 index 8c5a5aa015652..0000000000000 Binary files a/icons/obj/machines/am_engine.dmi and /dev/null differ diff --git a/icons/obj/machines/antimatter.dmi b/icons/obj/machines/antimatter.dmi deleted file mode 100644 index 4e20f20e7b067..0000000000000 Binary files a/icons/obj/machines/antimatter.dmi and /dev/null differ diff --git a/icons/obj/machines/artillery.dmi b/icons/obj/machines/artillery.dmi deleted file mode 100644 index 28f40800c2524..0000000000000 Binary files a/icons/obj/machines/artillery.dmi and /dev/null differ diff --git a/icons/obj/machines/bluespacedrive.dmi b/icons/obj/machines/bluespacedrive.dmi deleted file mode 100644 index 0b5752528bf18..0000000000000 Binary files a/icons/obj/machines/bluespacedrive.dmi and /dev/null differ diff --git a/icons/obj/machines/cracker.dmi b/icons/obj/machines/cracker.dmi deleted file mode 100644 index 325b87eb4998b..0000000000000 Binary files a/icons/obj/machines/cracker.dmi and /dev/null differ diff --git a/icons/obj/machines/drone_fab.dmi b/icons/obj/machines/drone_fab.dmi deleted file mode 100644 index 066b51c258269..0000000000000 Binary files a/icons/obj/machines/drone_fab.dmi and /dev/null differ diff --git a/icons/obj/machines/fabricators/autolathe.dmi b/icons/obj/machines/fabricators/autolathe.dmi deleted file mode 100644 index bf1ab87f84952..0000000000000 Binary files a/icons/obj/machines/fabricators/autolathe.dmi and /dev/null differ diff --git a/icons/obj/machines/fabricators/microlathe.dmi b/icons/obj/machines/fabricators/microlathe.dmi deleted file mode 100644 index 49ac1b0e119e1..0000000000000 Binary files a/icons/obj/machines/fabricators/microlathe.dmi and /dev/null differ diff --git a/icons/obj/machines/fabricators/nanofabricator.dmi b/icons/obj/machines/fabricators/nanofabricator.dmi deleted file mode 100644 index 15f457da57db4..0000000000000 Binary files a/icons/obj/machines/fabricators/nanofabricator.dmi and /dev/null differ diff --git a/icons/obj/machines/fabricators/replicator.dmi b/icons/obj/machines/fabricators/replicator.dmi deleted file mode 100644 index e126b656fc0df..0000000000000 Binary files a/icons/obj/machines/fabricators/replicator.dmi and /dev/null differ diff --git a/icons/obj/machines/fiber.dmi b/icons/obj/machines/fiber.dmi deleted file mode 100644 index 952c391f9b3a2..0000000000000 Binary files a/icons/obj/machines/fiber.dmi and /dev/null differ diff --git a/icons/obj/machines/field_generator.dmi b/icons/obj/machines/field_generator.dmi deleted file mode 100644 index fcb083f846732..0000000000000 Binary files a/icons/obj/machines/field_generator.dmi and /dev/null differ diff --git a/icons/obj/machines/floodlight.dmi b/icons/obj/machines/floodlight.dmi deleted file mode 100644 index 3a5fb7a901dd0..0000000000000 Binary files a/icons/obj/machines/floodlight.dmi and /dev/null differ diff --git a/icons/obj/machines/floor_light.dmi b/icons/obj/machines/floor_light.dmi deleted file mode 100644 index c23864928067f..0000000000000 Binary files a/icons/obj/machines/floor_light.dmi and /dev/null differ diff --git a/icons/obj/machines/gateway.dmi b/icons/obj/machines/gateway.dmi deleted file mode 100644 index cfe4c26709bf2..0000000000000 Binary files a/icons/obj/machines/gateway.dmi and /dev/null differ diff --git a/icons/obj/machines/heat_sources.dmi b/icons/obj/machines/heat_sources.dmi deleted file mode 100644 index eda6f1200812f..0000000000000 Binary files a/icons/obj/machines/heat_sources.dmi and /dev/null differ diff --git a/icons/obj/machines/heavy_fiber.dmi b/icons/obj/machines/heavy_fiber.dmi deleted file mode 100644 index 9969d65e22f67..0000000000000 Binary files a/icons/obj/machines/heavy_fiber.dmi and /dev/null differ diff --git a/icons/obj/machines/heavy_lathe.dmi b/icons/obj/machines/heavy_lathe.dmi deleted file mode 100644 index 1189687d8619a..0000000000000 Binary files a/icons/obj/machines/heavy_lathe.dmi and /dev/null differ diff --git a/icons/obj/machines/implantchair.dmi b/icons/obj/machines/implantchair.dmi deleted file mode 100644 index 94adefcbf2812..0000000000000 Binary files a/icons/obj/machines/implantchair.dmi and /dev/null differ diff --git a/icons/obj/machines/lasers.dmi b/icons/obj/machines/lasers.dmi deleted file mode 100644 index e114313ee9459..0000000000000 Binary files a/icons/obj/machines/lasers.dmi and /dev/null differ diff --git a/icons/obj/machines/mining_machines.dmi b/icons/obj/machines/mining_machines.dmi deleted file mode 100644 index 903e11de507d4..0000000000000 Binary files a/icons/obj/machines/mining_machines.dmi and /dev/null differ diff --git a/icons/obj/machines/particle_accelerator.dmi b/icons/obj/machines/particle_accelerator.dmi deleted file mode 100644 index db412286c0815..0000000000000 Binary files a/icons/obj/machines/particle_accelerator.dmi and /dev/null differ diff --git a/icons/obj/machines/particle_accelerator2.dmi b/icons/obj/machines/particle_accelerator2.dmi deleted file mode 100644 index a489510e55400..0000000000000 Binary files a/icons/obj/machines/particle_accelerator2.dmi and /dev/null differ diff --git a/icons/obj/machines/power/fusion.dmi b/icons/obj/machines/power/fusion.dmi deleted file mode 100644 index 2caae04cc79a1..0000000000000 Binary files a/icons/obj/machines/power/fusion.dmi and /dev/null differ diff --git a/icons/obj/machines/power/fusion_core.dmi b/icons/obj/machines/power/fusion_core.dmi deleted file mode 100644 index 76904a1200d5b..0000000000000 Binary files a/icons/obj/machines/power/fusion_core.dmi and /dev/null differ diff --git a/icons/obj/machines/psimeter.dmi b/icons/obj/machines/psimeter.dmi deleted file mode 100644 index 585465dd27e1d..0000000000000 Binary files a/icons/obj/machines/psimeter.dmi and /dev/null differ diff --git a/icons/obj/machines/rad_collector.dmi b/icons/obj/machines/rad_collector.dmi deleted file mode 100644 index d37a0aa38780d..0000000000000 Binary files a/icons/obj/machines/rad_collector.dmi and /dev/null differ diff --git a/icons/obj/machines/research.dmi b/icons/obj/machines/research.dmi deleted file mode 100644 index f1cef78fa257c..0000000000000 Binary files a/icons/obj/machines/research.dmi and /dev/null differ diff --git a/icons/obj/machines/self_destruct.dmi b/icons/obj/machines/self_destruct.dmi deleted file mode 100644 index c2d00738f3db6..0000000000000 Binary files a/icons/obj/machines/self_destruct.dmi and /dev/null differ diff --git a/icons/obj/machines/shielding.dmi b/icons/obj/machines/shielding.dmi deleted file mode 100644 index f83945092656e..0000000000000 Binary files a/icons/obj/machines/shielding.dmi and /dev/null differ diff --git a/icons/obj/machines/stationmap.dmi b/icons/obj/machines/stationmap.dmi deleted file mode 100644 index f57bf08913e75..0000000000000 Binary files a/icons/obj/machines/stationmap.dmi and /dev/null differ diff --git a/icons/obj/machines/turret_control.dmi b/icons/obj/machines/turret_control.dmi deleted file mode 100644 index 69cd4ccbb71fa..0000000000000 Binary files a/icons/obj/machines/turret_control.dmi and /dev/null differ diff --git a/icons/obj/machines/washing_machine.dmi b/icons/obj/machines/washing_machine.dmi deleted file mode 100644 index 4ec8a6cbc0e33..0000000000000 Binary files a/icons/obj/machines/washing_machine.dmi and /dev/null differ diff --git a/icons/obj/magic.dmi b/icons/obj/magic.dmi deleted file mode 100644 index f92243d6bc1af..0000000000000 Binary files a/icons/obj/magic.dmi and /dev/null differ diff --git a/icons/obj/mainframe.dmi b/icons/obj/mainframe.dmi deleted file mode 100644 index aaf6f934b6a62..0000000000000 Binary files a/icons/obj/mainframe.dmi and /dev/null differ diff --git a/icons/obj/marking_beacon.dmi b/icons/obj/marking_beacon.dmi deleted file mode 100644 index f3ac801458134..0000000000000 Binary files a/icons/obj/marking_beacon.dmi and /dev/null differ diff --git a/icons/obj/materials.dmi b/icons/obj/materials.dmi deleted file mode 100644 index 88494549e4e80..0000000000000 Binary files a/icons/obj/materials.dmi and /dev/null differ diff --git a/icons/obj/materials/ore.dmi b/icons/obj/materials/ore.dmi deleted file mode 100644 index f96653e3c63a5..0000000000000 Binary files a/icons/obj/materials/ore.dmi and /dev/null differ diff --git a/icons/obj/med_pouch.dmi b/icons/obj/med_pouch.dmi deleted file mode 100644 index cb662c5e7e494..0000000000000 Binary files a/icons/obj/med_pouch.dmi and /dev/null differ diff --git a/icons/obj/medical_kits.dmi b/icons/obj/medical_kits.dmi deleted file mode 100644 index 5e630a6faec5e..0000000000000 Binary files a/icons/obj/medical_kits.dmi and /dev/null differ diff --git a/icons/obj/mediwall.dmi b/icons/obj/mediwall.dmi deleted file mode 100644 index aa077eaec2814..0000000000000 Binary files a/icons/obj/mediwall.dmi and /dev/null differ diff --git a/icons/obj/megaphone.dmi b/icons/obj/megaphone.dmi deleted file mode 100644 index 5c922e8abe8fb..0000000000000 Binary files a/icons/obj/megaphone.dmi and /dev/null differ diff --git a/icons/obj/meteor.dmi b/icons/obj/meteor.dmi deleted file mode 100644 index 757dac83631b5..0000000000000 Binary files a/icons/obj/meteor.dmi and /dev/null differ diff --git a/icons/obj/meter.dmi b/icons/obj/meter.dmi deleted file mode 100644 index 5f3051d8c05fc..0000000000000 Binary files a/icons/obj/meter.dmi and /dev/null differ diff --git a/icons/obj/mining.dmi b/icons/obj/mining.dmi deleted file mode 100644 index 25e53c58d8898..0000000000000 Binary files a/icons/obj/mining.dmi and /dev/null differ diff --git a/icons/obj/mining_drill.dmi b/icons/obj/mining_drill.dmi deleted file mode 100644 index 95aab5f5bea37..0000000000000 Binary files a/icons/obj/mining_drill.dmi and /dev/null differ diff --git a/icons/obj/missile.dmi b/icons/obj/missile.dmi deleted file mode 100644 index 5a695f99f62e6..0000000000000 Binary files a/icons/obj/missile.dmi and /dev/null differ diff --git a/icons/obj/modkit.dmi b/icons/obj/modkit.dmi deleted file mode 100644 index 86011a76ea658..0000000000000 Binary files a/icons/obj/modkit.dmi and /dev/null differ diff --git a/icons/obj/modular_components.dmi b/icons/obj/modular_components.dmi deleted file mode 100644 index dc4529bfc8b94..0000000000000 Binary files a/icons/obj/modular_components.dmi and /dev/null differ diff --git a/icons/obj/modular_console.dmi b/icons/obj/modular_console.dmi deleted file mode 100644 index 125711410dcbb..0000000000000 Binary files a/icons/obj/modular_console.dmi and /dev/null differ diff --git a/icons/obj/modular_laptop.dmi b/icons/obj/modular_laptop.dmi deleted file mode 100644 index 6dc2af2d0178b..0000000000000 Binary files a/icons/obj/modular_laptop.dmi and /dev/null differ diff --git a/icons/obj/modular_pda.dmi b/icons/obj/modular_pda.dmi deleted file mode 100644 index feac348b4a5f8..0000000000000 Binary files a/icons/obj/modular_pda.dmi and /dev/null differ diff --git a/icons/obj/modular_tablet.dmi b/icons/obj/modular_tablet.dmi deleted file mode 100644 index 44521837942a1..0000000000000 Binary files a/icons/obj/modular_tablet.dmi and /dev/null differ diff --git a/icons/obj/modular_telescreen.dmi b/icons/obj/modular_telescreen.dmi deleted file mode 100644 index eee9853a93ceb..0000000000000 Binary files a/icons/obj/modular_telescreen.dmi and /dev/null differ diff --git a/icons/obj/module.dmi b/icons/obj/module.dmi deleted file mode 100644 index 80256fdcf0d75..0000000000000 Binary files a/icons/obj/module.dmi and /dev/null differ diff --git a/icons/obj/monitors.dmi b/icons/obj/monitors.dmi deleted file mode 100644 index d6ea9f5b0044c..0000000000000 Binary files a/icons/obj/monitors.dmi and /dev/null differ diff --git a/icons/obj/monolith.dmi b/icons/obj/monolith.dmi deleted file mode 100644 index 0f479e3b23f8b..0000000000000 Binary files a/icons/obj/monolith.dmi and /dev/null differ diff --git a/icons/obj/multitool.dmi b/icons/obj/multitool.dmi deleted file mode 100644 index 666a87f59491c..0000000000000 Binary files a/icons/obj/multitool.dmi and /dev/null differ diff --git a/icons/obj/munitions.dmi b/icons/obj/munitions.dmi deleted file mode 100644 index 4631b35ba4b62..0000000000000 Binary files a/icons/obj/munitions.dmi and /dev/null differ diff --git a/icons/obj/musician.dmi b/icons/obj/musician.dmi deleted file mode 100644 index 734a896944f30..0000000000000 Binary files a/icons/obj/musician.dmi and /dev/null differ diff --git a/icons/obj/nanopaste.dmi b/icons/obj/nanopaste.dmi deleted file mode 100644 index 8068fdae27e61..0000000000000 Binary files a/icons/obj/nanopaste.dmi and /dev/null differ diff --git a/icons/obj/narsie.dmi b/icons/obj/narsie.dmi deleted file mode 100644 index 73df7c31d18a2..0000000000000 Binary files a/icons/obj/narsie.dmi and /dev/null differ diff --git a/icons/obj/narsie_spawn_anim.dmi b/icons/obj/narsie_spawn_anim.dmi deleted file mode 100644 index 4f3de372e7c7c..0000000000000 Binary files a/icons/obj/narsie_spawn_anim.dmi and /dev/null differ diff --git a/icons/obj/nuclear_cylinder.dmi b/icons/obj/nuclear_cylinder.dmi deleted file mode 100644 index 9eb7419a8eb53..0000000000000 Binary files a/icons/obj/nuclear_cylinder.dmi and /dev/null differ diff --git a/icons/obj/nuke.dmi b/icons/obj/nuke.dmi deleted file mode 100644 index cd73a11d9540c..0000000000000 Binary files a/icons/obj/nuke.dmi and /dev/null differ diff --git a/icons/obj/nuke_station.dmi b/icons/obj/nuke_station.dmi deleted file mode 100644 index c7cffca4750bc..0000000000000 Binary files a/icons/obj/nuke_station.dmi and /dev/null differ diff --git a/icons/obj/objects.dmi b/icons/obj/objects.dmi deleted file mode 100644 index ea91e21878cae..0000000000000 Binary files a/icons/obj/objects.dmi and /dev/null differ diff --git a/icons/obj/ore_analyzer.dmi b/icons/obj/ore_analyzer.dmi deleted file mode 100644 index 60bd47c8ac47f..0000000000000 Binary files a/icons/obj/ore_analyzer.dmi and /dev/null differ diff --git a/icons/obj/overmap.dmi b/icons/obj/overmap.dmi deleted file mode 100644 index 3cda65da5e1c3..0000000000000 Binary files a/icons/obj/overmap.dmi and /dev/null differ diff --git a/icons/obj/oxygen_candle.dmi b/icons/obj/oxygen_candle.dmi deleted file mode 100644 index 86b72e98d7f57..0000000000000 Binary files a/icons/obj/oxygen_candle.dmi and /dev/null differ diff --git a/icons/obj/paint_sprayer.dmi b/icons/obj/paint_sprayer.dmi deleted file mode 100644 index e8bce81c01b75..0000000000000 Binary files a/icons/obj/paint_sprayer.dmi and /dev/null differ diff --git a/icons/obj/paper.dmi b/icons/obj/paper.dmi deleted file mode 100644 index ca4663df18db1..0000000000000 Binary files a/icons/obj/paper.dmi and /dev/null differ diff --git a/icons/obj/passport.dmi b/icons/obj/passport.dmi deleted file mode 100644 index 9100ee5b1277b..0000000000000 Binary files a/icons/obj/passport.dmi and /dev/null differ diff --git a/icons/obj/pda.dmi b/icons/obj/pda.dmi deleted file mode 100644 index 16ffe84d8ee05..0000000000000 Binary files a/icons/obj/pda.dmi and /dev/null differ diff --git a/icons/obj/photography.dmi b/icons/obj/photography.dmi deleted file mode 100644 index e3eaadb72ca1f..0000000000000 Binary files a/icons/obj/photography.dmi and /dev/null differ diff --git a/icons/obj/pieces.dmi b/icons/obj/pieces.dmi deleted file mode 100644 index 7759c07807e16..0000000000000 Binary files a/icons/obj/pieces.dmi and /dev/null differ diff --git a/icons/obj/pinpointer.dmi b/icons/obj/pinpointer.dmi deleted file mode 100644 index 9e418b4920cf4..0000000000000 Binary files a/icons/obj/pinpointer.dmi and /dev/null differ diff --git a/icons/obj/pipe-item.dmi b/icons/obj/pipe-item.dmi deleted file mode 100644 index 77bc716b3e226..0000000000000 Binary files a/icons/obj/pipe-item.dmi and /dev/null differ diff --git a/icons/obj/pipes.dmi b/icons/obj/pipes.dmi deleted file mode 100644 index 684524912aa8d..0000000000000 Binary files a/icons/obj/pipes.dmi and /dev/null differ diff --git a/icons/obj/pipes/disposal.dmi b/icons/obj/pipes/disposal.dmi deleted file mode 100644 index 4a3037b7de86e..0000000000000 Binary files a/icons/obj/pipes/disposal.dmi and /dev/null differ diff --git a/icons/obj/pipes/large.dmi b/icons/obj/pipes/large.dmi deleted file mode 100644 index 55aad8e2f135a..0000000000000 Binary files a/icons/obj/pipes/large.dmi and /dev/null differ diff --git a/icons/obj/pipes/regular.dmi b/icons/obj/pipes/regular.dmi deleted file mode 100644 index 3bc0f0b764975..0000000000000 Binary files a/icons/obj/pipes/regular.dmi and /dev/null differ diff --git a/icons/obj/pipes/transit_tube.dmi b/icons/obj/pipes/transit_tube.dmi deleted file mode 100644 index 45b2abc3c3efe..0000000000000 Binary files a/icons/obj/pipes/transit_tube.dmi and /dev/null differ diff --git a/icons/obj/pipes/transit_tube_pod.dmi b/icons/obj/pipes/transit_tube_pod.dmi deleted file mode 100644 index a52b80f82068c..0000000000000 Binary files a/icons/obj/pipes/transit_tube_pod.dmi and /dev/null differ diff --git a/icons/obj/pipes/transit_tube_station.dmi b/icons/obj/pipes/transit_tube_station.dmi deleted file mode 100644 index ca8515fded7f2..0000000000000 Binary files a/icons/obj/pipes/transit_tube_station.dmi and /dev/null differ diff --git a/icons/obj/pipes2.dmi b/icons/obj/pipes2.dmi deleted file mode 100644 index 6e800711aa677..0000000000000 Binary files a/icons/obj/pipes2.dmi and /dev/null differ diff --git a/icons/obj/pipeturbine.dmi b/icons/obj/pipeturbine.dmi deleted file mode 100644 index fccec4c9ddfda..0000000000000 Binary files a/icons/obj/pipeturbine.dmi and /dev/null differ diff --git a/icons/obj/pit.dmi b/icons/obj/pit.dmi deleted file mode 100644 index 76ac50d185a83..0000000000000 Binary files a/icons/obj/pit.dmi and /dev/null differ diff --git a/icons/obj/plant_analyzer.dmi b/icons/obj/plant_analyzer.dmi deleted file mode 100644 index 557053d221bce..0000000000000 Binary files a/icons/obj/plant_analyzer.dmi and /dev/null differ diff --git a/icons/obj/plants.dmi b/icons/obj/plants.dmi deleted file mode 100644 index 82b2f5bf6e66e..0000000000000 Binary files a/icons/obj/plants.dmi and /dev/null differ diff --git a/icons/obj/playing_cards.dmi b/icons/obj/playing_cards.dmi deleted file mode 100644 index 2f4c01b707329..0000000000000 Binary files a/icons/obj/playing_cards.dmi and /dev/null differ diff --git a/icons/obj/plunger.dmi b/icons/obj/plunger.dmi deleted file mode 100644 index 92d87c89d565f..0000000000000 Binary files a/icons/obj/plunger.dmi and /dev/null differ diff --git a/icons/obj/podwindows.dmi b/icons/obj/podwindows.dmi deleted file mode 100644 index 75bd1d9805c48..0000000000000 Binary files a/icons/obj/podwindows.dmi and /dev/null differ diff --git a/icons/obj/power.dmi b/icons/obj/power.dmi deleted file mode 100644 index 819fe160ead53..0000000000000 Binary files a/icons/obj/power.dmi and /dev/null differ diff --git a/icons/obj/power_cond_heavy.dmi b/icons/obj/power_cond_heavy.dmi deleted file mode 100644 index 69b9ef085b1f5..0000000000000 Binary files a/icons/obj/power_cond_heavy.dmi and /dev/null differ diff --git a/icons/obj/power_cond_white.dmi b/icons/obj/power_cond_white.dmi deleted file mode 100644 index f9f3d9da7a635..0000000000000 Binary files a/icons/obj/power_cond_white.dmi and /dev/null differ diff --git a/icons/obj/power_local.dmi b/icons/obj/power_local.dmi deleted file mode 100644 index b2b4373505b5c..0000000000000 Binary files a/icons/obj/power_local.dmi and /dev/null differ diff --git a/icons/obj/power_sink.dmi b/icons/obj/power_sink.dmi deleted file mode 100644 index b08b228e69996..0000000000000 Binary files a/icons/obj/power_sink.dmi and /dev/null differ diff --git a/icons/obj/price_scanner.dmi b/icons/obj/price_scanner.dmi deleted file mode 100644 index 3a0024ab4a28b..0000000000000 Binary files a/icons/obj/price_scanner.dmi and /dev/null differ diff --git a/icons/obj/projectiles.dmi b/icons/obj/projectiles.dmi deleted file mode 100644 index 2ed5119dfb7aa..0000000000000 Binary files a/icons/obj/projectiles.dmi and /dev/null differ diff --git a/icons/obj/projector.dmi b/icons/obj/projector.dmi deleted file mode 100644 index 6e4012c09e77d..0000000000000 Binary files a/icons/obj/projector.dmi and /dev/null differ diff --git a/icons/obj/psychic_powers.dmi b/icons/obj/psychic_powers.dmi deleted file mode 100644 index e527fe5805883..0000000000000 Binary files a/icons/obj/psychic_powers.dmi and /dev/null differ diff --git a/icons/obj/pylon.dmi b/icons/obj/pylon.dmi deleted file mode 100644 index fd96ac68dfa25..0000000000000 Binary files a/icons/obj/pylon.dmi and /dev/null differ diff --git a/icons/obj/quicksand.dmi b/icons/obj/quicksand.dmi deleted file mode 100644 index 2bea4ad6a04cc..0000000000000 Binary files a/icons/obj/quicksand.dmi and /dev/null differ diff --git a/icons/obj/radio.dmi b/icons/obj/radio.dmi deleted file mode 100644 index dfb026c4817de..0000000000000 Binary files a/icons/obj/radio.dmi and /dev/null differ diff --git a/icons/obj/railing.dmi b/icons/obj/railing.dmi deleted file mode 100644 index 3f9490a0169c7..0000000000000 Binary files a/icons/obj/railing.dmi and /dev/null differ diff --git a/icons/obj/reagentfillings.dmi b/icons/obj/reagentfillings.dmi deleted file mode 100644 index e9136da91db20..0000000000000 Binary files a/icons/obj/reagentfillings.dmi and /dev/null differ diff --git a/icons/obj/recycling.dmi b/icons/obj/recycling.dmi deleted file mode 100644 index 024db3109af8d..0000000000000 Binary files a/icons/obj/recycling.dmi and /dev/null differ diff --git a/icons/obj/rift.dmi b/icons/obj/rift.dmi deleted file mode 100644 index 85b7510386cec..0000000000000 Binary files a/icons/obj/rift.dmi and /dev/null differ diff --git a/icons/obj/rig_modules.dmi b/icons/obj/rig_modules.dmi deleted file mode 100644 index 476663e9eedae..0000000000000 Binary files a/icons/obj/rig_modules.dmi and /dev/null differ diff --git a/icons/obj/robot_analyzer.dmi b/icons/obj/robot_analyzer.dmi deleted file mode 100644 index d1ae7af9a9ec9..0000000000000 Binary files a/icons/obj/robot_analyzer.dmi and /dev/null differ diff --git a/icons/obj/robot_component.dmi b/icons/obj/robot_component.dmi deleted file mode 100644 index d46d185a76f7c..0000000000000 Binary files a/icons/obj/robot_component.dmi and /dev/null differ diff --git a/icons/obj/robot_parts.dmi b/icons/obj/robot_parts.dmi deleted file mode 100644 index 9461028091fcd..0000000000000 Binary files a/icons/obj/robot_parts.dmi and /dev/null differ diff --git a/icons/obj/robot_parts_flying.dmi b/icons/obj/robot_parts_flying.dmi deleted file mode 100644 index 90033c41ff4f0..0000000000000 Binary files a/icons/obj/robot_parts_flying.dmi and /dev/null differ diff --git a/icons/obj/robot_storage.dmi b/icons/obj/robot_storage.dmi deleted file mode 100644 index 5a996c01e7e76..0000000000000 Binary files a/icons/obj/robot_storage.dmi and /dev/null differ diff --git a/icons/obj/robotics.dmi b/icons/obj/robotics.dmi deleted file mode 100644 index 5939f215b7448..0000000000000 Binary files a/icons/obj/robotics.dmi and /dev/null differ diff --git a/icons/obj/rollerbed.dmi b/icons/obj/rollerbed.dmi deleted file mode 100644 index 3bb72046e97d0..0000000000000 Binary files a/icons/obj/rollerbed.dmi and /dev/null differ diff --git a/icons/obj/rotating_alarm.dmi b/icons/obj/rotating_alarm.dmi deleted file mode 100644 index a2bda57d068a4..0000000000000 Binary files a/icons/obj/rotating_alarm.dmi and /dev/null differ diff --git a/icons/obj/rubble.dmi b/icons/obj/rubble.dmi deleted file mode 100644 index 0f9cc1cf78e9c..0000000000000 Binary files a/icons/obj/rubble.dmi and /dev/null differ diff --git a/icons/obj/rune.dmi b/icons/obj/rune.dmi deleted file mode 100644 index c3c0bf2250e2b..0000000000000 Binary files a/icons/obj/rune.dmi and /dev/null differ diff --git a/icons/obj/sampler.dmi b/icons/obj/sampler.dmi deleted file mode 100644 index a31fba7040154..0000000000000 Binary files a/icons/obj/sampler.dmi and /dev/null differ diff --git a/icons/obj/seeds.dmi b/icons/obj/seeds.dmi deleted file mode 100644 index 4fd12250b3f4b..0000000000000 Binary files a/icons/obj/seeds.dmi and /dev/null differ diff --git a/icons/obj/shards.dmi b/icons/obj/shards.dmi deleted file mode 100644 index e8bee2d57f7b7..0000000000000 Binary files a/icons/obj/shards.dmi and /dev/null differ diff --git a/icons/obj/ship_engine.dmi b/icons/obj/ship_engine.dmi deleted file mode 100644 index 62e7afc0f1b16..0000000000000 Binary files a/icons/obj/ship_engine.dmi and /dev/null differ diff --git a/icons/obj/shipping_crates.dmi b/icons/obj/shipping_crates.dmi deleted file mode 100644 index b545a9a7b7b87..0000000000000 Binary files a/icons/obj/shipping_crates.dmi and /dev/null differ diff --git a/icons/obj/singularity.dmi b/icons/obj/singularity.dmi deleted file mode 100644 index ce5d182b13832..0000000000000 Binary files a/icons/obj/singularity.dmi and /dev/null differ diff --git a/icons/obj/smoothlattice.dmi b/icons/obj/smoothlattice.dmi deleted file mode 100644 index 264e88ac6fe58..0000000000000 Binary files a/icons/obj/smoothlattice.dmi and /dev/null differ diff --git a/icons/obj/soap.dmi b/icons/obj/soap.dmi deleted file mode 100644 index eabef1545305c..0000000000000 Binary files a/icons/obj/soap.dmi and /dev/null differ diff --git a/icons/obj/space_flare.dmi b/icons/obj/space_flare.dmi deleted file mode 100644 index 010a27e73e457..0000000000000 Binary files a/icons/obj/space_flare.dmi and /dev/null differ diff --git a/icons/obj/spectrometer.dmi b/icons/obj/spectrometer.dmi deleted file mode 100644 index d76b1e9bd942c..0000000000000 Binary files a/icons/obj/spectrometer.dmi and /dev/null differ diff --git a/icons/obj/spectrometer_advanced.dmi b/icons/obj/spectrometer_advanced.dmi deleted file mode 100644 index e2ca79a21c74c..0000000000000 Binary files a/icons/obj/spectrometer_advanced.dmi and /dev/null differ diff --git a/icons/obj/stairs.dmi b/icons/obj/stairs.dmi deleted file mode 100644 index b0c14147e5f4f..0000000000000 Binary files a/icons/obj/stairs.dmi and /dev/null differ diff --git a/icons/obj/stationobjs.dmi b/icons/obj/stationobjs.dmi deleted file mode 100644 index db7cc94d50581..0000000000000 Binary files a/icons/obj/stationobjs.dmi and /dev/null differ diff --git a/icons/obj/statue.dmi b/icons/obj/statue.dmi deleted file mode 100644 index 5da8a1386dc1a..0000000000000 Binary files a/icons/obj/statue.dmi and /dev/null differ diff --git a/icons/obj/status_display.dmi b/icons/obj/status_display.dmi deleted file mode 100644 index cfc11ba55d01e..0000000000000 Binary files a/icons/obj/status_display.dmi and /dev/null differ diff --git a/icons/obj/stickynotes.dmi b/icons/obj/stickynotes.dmi deleted file mode 100644 index dfcf3f578798c..0000000000000 Binary files a/icons/obj/stickynotes.dmi and /dev/null differ diff --git a/icons/obj/stock_parts.dmi b/icons/obj/stock_parts.dmi deleted file mode 100644 index b06f37045246d..0000000000000 Binary files a/icons/obj/stock_parts.dmi and /dev/null differ diff --git a/icons/obj/storage.dmi b/icons/obj/storage.dmi deleted file mode 100644 index b184fce4e674e..0000000000000 Binary files a/icons/obj/storage.dmi and /dev/null differ diff --git a/icons/obj/structures.dmi b/icons/obj/structures.dmi deleted file mode 100644 index bd1ff8343da36..0000000000000 Binary files a/icons/obj/structures.dmi and /dev/null differ diff --git a/icons/obj/structures/plants.dmi b/icons/obj/structures/plants.dmi deleted file mode 100644 index 2fc12cca9cc95..0000000000000 Binary files a/icons/obj/structures/plants.dmi and /dev/null differ diff --git a/icons/obj/subliminator.dmi b/icons/obj/subliminator.dmi deleted file mode 100644 index 7a8395ec67836..0000000000000 Binary files a/icons/obj/subliminator.dmi and /dev/null differ diff --git a/icons/obj/suit_jammer.dmi b/icons/obj/suit_jammer.dmi deleted file mode 100644 index 9d1348fdb83a5..0000000000000 Binary files a/icons/obj/suit_jammer.dmi and /dev/null differ diff --git a/icons/obj/suitcooler.dmi b/icons/obj/suitcooler.dmi deleted file mode 100644 index 3674a710eaa9b..0000000000000 Binary files a/icons/obj/suitcooler.dmi and /dev/null differ diff --git a/icons/obj/suitstorage.dmi b/icons/obj/suitstorage.dmi deleted file mode 100644 index 1f4748862e10a..0000000000000 Binary files a/icons/obj/suitstorage.dmi and /dev/null differ diff --git a/icons/obj/sunflower.dmi b/icons/obj/sunflower.dmi deleted file mode 100644 index 975367b6d3888..0000000000000 Binary files a/icons/obj/sunflower.dmi and /dev/null differ diff --git a/icons/obj/supermatter.dmi b/icons/obj/supermatter.dmi deleted file mode 100644 index a12d5b7038c93..0000000000000 Binary files a/icons/obj/supermatter.dmi and /dev/null differ diff --git a/icons/obj/supplybeacon.dmi b/icons/obj/supplybeacon.dmi deleted file mode 100644 index 9734d85458774..0000000000000 Binary files a/icons/obj/supplybeacon.dmi and /dev/null differ diff --git a/icons/obj/surgery.dmi b/icons/obj/surgery.dmi deleted file mode 100644 index 3e86b787765f4..0000000000000 Binary files a/icons/obj/surgery.dmi and /dev/null differ diff --git a/icons/obj/sushi.dmi b/icons/obj/sushi.dmi deleted file mode 100644 index 942f4638c0c26..0000000000000 Binary files a/icons/obj/sushi.dmi and /dev/null differ diff --git a/icons/obj/swiss_knife.dmi b/icons/obj/swiss_knife.dmi deleted file mode 100644 index 094a1ee017cff..0000000000000 Binary files a/icons/obj/swiss_knife.dmi and /dev/null differ diff --git a/icons/obj/syndicate_beacon.dmi b/icons/obj/syndicate_beacon.dmi deleted file mode 100644 index 23b95307bc7eb..0000000000000 Binary files a/icons/obj/syndicate_beacon.dmi and /dev/null differ diff --git a/icons/obj/syringe.dmi b/icons/obj/syringe.dmi deleted file mode 100644 index cddfd072857f2..0000000000000 Binary files a/icons/obj/syringe.dmi and /dev/null differ diff --git a/icons/obj/t_ray_scanner.dmi b/icons/obj/t_ray_scanner.dmi deleted file mode 100644 index 92fb558c77e71..0000000000000 Binary files a/icons/obj/t_ray_scanner.dmi and /dev/null differ diff --git a/icons/obj/tables.dmi b/icons/obj/tables.dmi deleted file mode 100644 index 8f7b9bfd5d4b0..0000000000000 Binary files a/icons/obj/tables.dmi and /dev/null differ diff --git a/icons/obj/tank.dmi b/icons/obj/tank.dmi deleted file mode 100644 index 8de340c17bb8a..0000000000000 Binary files a/icons/obj/tank.dmi and /dev/null differ diff --git a/icons/obj/tape_recorder.dmi b/icons/obj/tape_recorder.dmi deleted file mode 100644 index 7b1994639408b..0000000000000 Binary files a/icons/obj/tape_recorder.dmi and /dev/null differ diff --git a/icons/obj/teleporter.dmi b/icons/obj/teleporter.dmi deleted file mode 100644 index a1206d3469a8e..0000000000000 Binary files a/icons/obj/teleporter.dmi and /dev/null differ diff --git a/icons/obj/telescience.dmi b/icons/obj/telescience.dmi deleted file mode 100644 index dcd7f39d73846..0000000000000 Binary files a/icons/obj/telescience.dmi and /dev/null differ diff --git a/icons/obj/terminals.dmi b/icons/obj/terminals.dmi deleted file mode 100644 index 1afdc104b41e0..0000000000000 Binary files a/icons/obj/terminals.dmi and /dev/null differ diff --git a/icons/obj/tiles.dmi b/icons/obj/tiles.dmi deleted file mode 100644 index 7ad03f9e5d962..0000000000000 Binary files a/icons/obj/tiles.dmi and /dev/null differ diff --git a/icons/obj/toner_cartridge.dmi b/icons/obj/toner_cartridge.dmi deleted file mode 100644 index 8679f24baf2bb..0000000000000 Binary files a/icons/obj/toner_cartridge.dmi and /dev/null differ diff --git a/icons/obj/tools.dmi b/icons/obj/tools.dmi deleted file mode 100644 index 8f71d671d29a2..0000000000000 Binary files a/icons/obj/tools.dmi and /dev/null differ diff --git a/icons/obj/toy.dmi b/icons/obj/toy.dmi deleted file mode 100644 index f420bc4b64264..0000000000000 Binary files a/icons/obj/toy.dmi and /dev/null differ diff --git a/icons/obj/trash.dmi b/icons/obj/trash.dmi deleted file mode 100644 index 6202651414bb0..0000000000000 Binary files a/icons/obj/trash.dmi and /dev/null differ diff --git a/icons/obj/tubing.dmi b/icons/obj/tubing.dmi deleted file mode 100644 index 89c4bf45e3b8b..0000000000000 Binary files a/icons/obj/tubing.dmi and /dev/null differ diff --git a/icons/obj/turbolift.dmi b/icons/obj/turbolift.dmi deleted file mode 100644 index cffc8aa140cd9..0000000000000 Binary files a/icons/obj/turbolift.dmi and /dev/null differ diff --git a/icons/obj/turbolift_preview_2x2.dmi b/icons/obj/turbolift_preview_2x2.dmi deleted file mode 100644 index f0f1ec491e17c..0000000000000 Binary files a/icons/obj/turbolift_preview_2x2.dmi and /dev/null differ diff --git a/icons/obj/turbolift_preview_3x3.dmi b/icons/obj/turbolift_preview_3x3.dmi deleted file mode 100644 index e054a6b9aacc0..0000000000000 Binary files a/icons/obj/turbolift_preview_3x3.dmi and /dev/null differ diff --git a/icons/obj/turrets.dmi b/icons/obj/turrets.dmi deleted file mode 100644 index b3a2036742608..0000000000000 Binary files a/icons/obj/turrets.dmi and /dev/null differ diff --git a/icons/obj/undies_wardrobe.dmi b/icons/obj/undies_wardrobe.dmi deleted file mode 100644 index 171269a9fedf4..0000000000000 Binary files a/icons/obj/undies_wardrobe.dmi and /dev/null differ diff --git a/icons/obj/urn.dmi b/icons/obj/urn.dmi deleted file mode 100644 index e2d43cf594c5d..0000000000000 Binary files a/icons/obj/urn.dmi and /dev/null differ diff --git a/icons/obj/uv_light.dmi b/icons/obj/uv_light.dmi deleted file mode 100644 index cbd9981e4f278..0000000000000 Binary files a/icons/obj/uv_light.dmi and /dev/null differ diff --git a/icons/obj/vehicles.dmi b/icons/obj/vehicles.dmi deleted file mode 100644 index e70275591fc4e..0000000000000 Binary files a/icons/obj/vehicles.dmi and /dev/null differ diff --git a/icons/obj/vending.dmi b/icons/obj/vending.dmi deleted file mode 100644 index c2b7514cc7912..0000000000000 Binary files a/icons/obj/vending.dmi and /dev/null differ diff --git a/icons/obj/vialbox.dmi b/icons/obj/vialbox.dmi deleted file mode 100644 index c08b5cfeabb15..0000000000000 Binary files a/icons/obj/vialbox.dmi and /dev/null differ diff --git a/icons/obj/virology.dmi b/icons/obj/virology.dmi deleted file mode 100644 index 224c4c901489b..0000000000000 Binary files a/icons/obj/virology.dmi and /dev/null differ diff --git a/icons/obj/wall_frame.dmi b/icons/obj/wall_frame.dmi deleted file mode 100644 index 7306cf8cddb3c..0000000000000 Binary files a/icons/obj/wall_frame.dmi and /dev/null differ diff --git a/icons/obj/wallet.dmi b/icons/obj/wallet.dmi deleted file mode 100644 index a623c0e1462c6..0000000000000 Binary files a/icons/obj/wallet.dmi and /dev/null differ diff --git a/icons/obj/walllocker.dmi b/icons/obj/walllocker.dmi deleted file mode 100644 index 8f112b0521eec..0000000000000 Binary files a/icons/obj/walllocker.dmi and /dev/null differ diff --git a/icons/obj/watercloset.dmi b/icons/obj/watercloset.dmi deleted file mode 100644 index ba450598a46e8..0000000000000 Binary files a/icons/obj/watercloset.dmi and /dev/null differ diff --git a/icons/obj/weapons/melee_energy.dmi b/icons/obj/weapons/melee_energy.dmi deleted file mode 100644 index 889f734b522ca..0000000000000 Binary files a/icons/obj/weapons/melee_energy.dmi and /dev/null differ diff --git a/icons/obj/weapons/melee_physical.dmi b/icons/obj/weapons/melee_physical.dmi deleted file mode 100644 index 25b6e52fd7113..0000000000000 Binary files a/icons/obj/weapons/melee_physical.dmi and /dev/null differ diff --git a/icons/obj/weapons/other.dmi b/icons/obj/weapons/other.dmi deleted file mode 100644 index 6a4c462044e36..0000000000000 Binary files a/icons/obj/weapons/other.dmi and /dev/null differ diff --git a/icons/obj/window.dmi b/icons/obj/window.dmi deleted file mode 100644 index 5a961763e3c74..0000000000000 Binary files a/icons/obj/window.dmi and /dev/null differ diff --git a/icons/obj/wizard.dmi b/icons/obj/wizard.dmi deleted file mode 100644 index 81838140d0e25..0000000000000 Binary files a/icons/obj/wizard.dmi and /dev/null differ diff --git a/icons/obj/wrist_computer.dmi b/icons/obj/wrist_computer.dmi deleted file mode 100644 index a53f6acdf6013..0000000000000 Binary files a/icons/obj/wrist_computer.dmi and /dev/null differ diff --git a/icons/obj/xenoarchaeology.dmi b/icons/obj/xenoarchaeology.dmi deleted file mode 100644 index 3a0e5131fd883..0000000000000 Binary files a/icons/obj/xenoarchaeology.dmi and /dev/null differ diff --git a/icons/obj/xenolife_scanner.dmi b/icons/obj/xenolife_scanner.dmi deleted file mode 100644 index d3926ec801bd3..0000000000000 Binary files a/icons/obj/xenolife_scanner.dmi and /dev/null differ diff --git a/icons/policetape.dmi b/icons/policetape.dmi deleted file mode 100644 index b3e2e02b9c9f6..0000000000000 Binary files a/icons/policetape.dmi and /dev/null differ diff --git a/icons/prototype.dmi b/icons/prototype.dmi deleted file mode 100644 index 8964030e073b0..0000000000000 Binary files a/icons/prototype.dmi and /dev/null differ diff --git a/icons/reagentname_bg.png b/icons/reagentname_bg.png deleted file mode 100644 index 879179edd81e5..0000000000000 Binary files a/icons/reagentname_bg.png and /dev/null differ diff --git a/icons/screen/psi.dmi b/icons/screen/psi.dmi deleted file mode 100644 index 569d374de74cf..0000000000000 Binary files a/icons/screen/psi.dmi and /dev/null differ diff --git a/icons/skybox/electrobox.dmi b/icons/skybox/electrobox.dmi deleted file mode 100644 index 52e9f5d8cc526..0000000000000 Binary files a/icons/skybox/electrobox.dmi and /dev/null differ diff --git a/icons/skybox/ionbox.dmi b/icons/skybox/ionbox.dmi deleted file mode 100644 index 7f5c5b15d61f6..0000000000000 Binary files a/icons/skybox/ionbox.dmi and /dev/null differ diff --git a/icons/skybox/planet.dmi b/icons/skybox/planet.dmi deleted file mode 100644 index 45497b6e5fbac..0000000000000 Binary files a/icons/skybox/planet.dmi and /dev/null differ diff --git a/icons/skybox/planet_rings.dmi b/icons/skybox/planet_rings.dmi deleted file mode 100644 index b12260520601b..0000000000000 Binary files a/icons/skybox/planet_rings.dmi and /dev/null differ diff --git a/icons/skybox/radbox.dmi b/icons/skybox/radbox.dmi deleted file mode 100644 index 8b44c21257373..0000000000000 Binary files a/icons/skybox/radbox.dmi and /dev/null differ diff --git a/icons/skybox/rockbox.dmi b/icons/skybox/rockbox.dmi deleted file mode 100644 index 3a4d97595cefb..0000000000000 Binary files a/icons/skybox/rockbox.dmi and /dev/null differ diff --git a/icons/skybox/skybox.dmi b/icons/skybox/skybox.dmi deleted file mode 100644 index e7d6fb3c58940..0000000000000 Binary files a/icons/skybox/skybox.dmi and /dev/null differ diff --git a/icons/skybox/skybox_rock_128.dmi b/icons/skybox/skybox_rock_128.dmi deleted file mode 100644 index 732eaf113605d..0000000000000 Binary files a/icons/skybox/skybox_rock_128.dmi and /dev/null differ diff --git a/icons/skybox/skybox_rocks.dmi b/icons/skybox/skybox_rocks.dmi deleted file mode 100644 index b917bc9eaa82f..0000000000000 Binary files a/icons/skybox/skybox_rocks.dmi and /dev/null differ diff --git a/icons/ss13_32.png b/icons/ss13_32.png deleted file mode 100644 index 72bf4f0f977e8..0000000000000 Binary files a/icons/ss13_32.png and /dev/null differ diff --git a/icons/ss13_64.png b/icons/ss13_64.png deleted file mode 100644 index 103ff0b26442e..0000000000000 Binary files a/icons/ss13_64.png and /dev/null differ diff --git a/icons/turf/areas.dmi b/icons/turf/areas.dmi deleted file mode 100644 index 6ee776bab6883..0000000000000 Binary files a/icons/turf/areas.dmi and /dev/null differ diff --git a/icons/turf/chlorine.dmi b/icons/turf/chlorine.dmi deleted file mode 100644 index 3cf6bba30f910..0000000000000 Binary files a/icons/turf/chlorine.dmi and /dev/null differ diff --git a/icons/turf/cliff.dmi b/icons/turf/cliff.dmi deleted file mode 100644 index a54e13656eaab..0000000000000 Binary files a/icons/turf/cliff.dmi and /dev/null differ diff --git a/icons/turf/desert.dmi b/icons/turf/desert.dmi deleted file mode 100644 index b080a826425ea..0000000000000 Binary files a/icons/turf/desert.dmi and /dev/null differ diff --git a/icons/turf/doona.dmi b/icons/turf/doona.dmi deleted file mode 100644 index 5d28c3a489d83..0000000000000 Binary files a/icons/turf/doona.dmi and /dev/null differ diff --git a/icons/turf/excavation_overlays.dmi b/icons/turf/excavation_overlays.dmi deleted file mode 100644 index 1f7c8e128d74f..0000000000000 Binary files a/icons/turf/excavation_overlays.dmi and /dev/null differ diff --git a/icons/turf/flooring/alium.dmi b/icons/turf/flooring/alium.dmi deleted file mode 100644 index 33665c8e05b6b..0000000000000 Binary files a/icons/turf/flooring/alium.dmi and /dev/null differ diff --git a/icons/turf/flooring/asteroid.dmi b/icons/turf/flooring/asteroid.dmi deleted file mode 100644 index eaba3e7626e1c..0000000000000 Binary files a/icons/turf/flooring/asteroid.dmi and /dev/null differ diff --git a/icons/turf/flooring/carpet.dmi b/icons/turf/flooring/carpet.dmi deleted file mode 100644 index c7731d595933a..0000000000000 Binary files a/icons/turf/flooring/carpet.dmi and /dev/null differ diff --git a/icons/turf/flooring/circuit.dmi b/icons/turf/flooring/circuit.dmi deleted file mode 100644 index 3617171b977fd..0000000000000 Binary files a/icons/turf/flooring/circuit.dmi and /dev/null differ diff --git a/icons/turf/flooring/corp_floor.dmi b/icons/turf/flooring/corp_floor.dmi deleted file mode 100644 index 17e762b32f65e..0000000000000 Binary files a/icons/turf/flooring/corp_floor.dmi and /dev/null differ diff --git a/icons/turf/flooring/crystal.dmi b/icons/turf/flooring/crystal.dmi deleted file mode 100644 index 00c7a13cb7e1e..0000000000000 Binary files a/icons/turf/flooring/crystal.dmi and /dev/null differ diff --git a/icons/turf/flooring/cult.dmi b/icons/turf/flooring/cult.dmi deleted file mode 100644 index 47898ff71266d..0000000000000 Binary files a/icons/turf/flooring/cult.dmi and /dev/null differ diff --git a/icons/turf/flooring/damage.dmi b/icons/turf/flooring/damage.dmi deleted file mode 100644 index e7af92ce64065..0000000000000 Binary files a/icons/turf/flooring/damage.dmi and /dev/null differ diff --git a/icons/turf/flooring/decals.dmi b/icons/turf/flooring/decals.dmi deleted file mode 100644 index fffd7de041a68..0000000000000 Binary files a/icons/turf/flooring/decals.dmi and /dev/null differ diff --git a/icons/turf/flooring/dirt.dmi b/icons/turf/flooring/dirt.dmi deleted file mode 100644 index 28d1862456e4b..0000000000000 Binary files a/icons/turf/flooring/dirt.dmi and /dev/null differ diff --git a/icons/turf/flooring/flesh.dmi b/icons/turf/flooring/flesh.dmi deleted file mode 100644 index 0653e6807395a..0000000000000 Binary files a/icons/turf/flooring/flesh.dmi and /dev/null differ diff --git a/icons/turf/flooring/grass.dmi b/icons/turf/flooring/grass.dmi deleted file mode 100644 index a3378505f4335..0000000000000 Binary files a/icons/turf/flooring/grass.dmi and /dev/null differ diff --git a/icons/turf/flooring/lava.dmi b/icons/turf/flooring/lava.dmi deleted file mode 100644 index c70c039b8e456..0000000000000 Binary files a/icons/turf/flooring/lava.dmi and /dev/null differ diff --git a/icons/turf/flooring/linoleum.dmi b/icons/turf/flooring/linoleum.dmi deleted file mode 100644 index 50bdfe8789824..0000000000000 Binary files a/icons/turf/flooring/linoleum.dmi and /dev/null differ diff --git a/icons/turf/flooring/misc.dmi b/icons/turf/flooring/misc.dmi deleted file mode 100644 index fc0eb605f3c2d..0000000000000 Binary files a/icons/turf/flooring/misc.dmi and /dev/null differ diff --git a/icons/turf/flooring/plating.dmi b/icons/turf/flooring/plating.dmi deleted file mode 100644 index 2a5dc532830ed..0000000000000 Binary files a/icons/turf/flooring/plating.dmi and /dev/null differ diff --git a/icons/turf/flooring/pool.dmi b/icons/turf/flooring/pool.dmi deleted file mode 100644 index a45cf848ef4bb..0000000000000 Binary files a/icons/turf/flooring/pool.dmi and /dev/null differ diff --git a/icons/turf/flooring/shadows.dmi b/icons/turf/flooring/shadows.dmi deleted file mode 100644 index 2db9e6a645e0c..0000000000000 Binary files a/icons/turf/flooring/shadows.dmi and /dev/null differ diff --git a/icons/turf/flooring/techfloor.dmi b/icons/turf/flooring/techfloor.dmi deleted file mode 100644 index 5124ff3146c06..0000000000000 Binary files a/icons/turf/flooring/techfloor.dmi and /dev/null differ diff --git a/icons/turf/flooring/tiles.dmi b/icons/turf/flooring/tiles.dmi deleted file mode 100644 index 18aa84793d84a..0000000000000 Binary files a/icons/turf/flooring/tiles.dmi and /dev/null differ diff --git a/icons/turf/flooring/wood.dmi b/icons/turf/flooring/wood.dmi deleted file mode 100644 index 825b3dc3f38af..0000000000000 Binary files a/icons/turf/flooring/wood.dmi and /dev/null differ diff --git a/icons/turf/floors.dmi b/icons/turf/floors.dmi deleted file mode 100644 index 51f3c44dacaa5..0000000000000 Binary files a/icons/turf/floors.dmi and /dev/null differ diff --git a/icons/turf/jungle.dmi b/icons/turf/jungle.dmi deleted file mode 100644 index 4f5a7c16810a5..0000000000000 Binary files a/icons/turf/jungle.dmi and /dev/null differ diff --git a/icons/turf/mining_decals.dmi b/icons/turf/mining_decals.dmi deleted file mode 100644 index 14024a1de14f6..0000000000000 Binary files a/icons/turf/mining_decals.dmi and /dev/null differ diff --git a/icons/turf/open_space.dmi b/icons/turf/open_space.dmi deleted file mode 100644 index 2c09dc6042a38..0000000000000 Binary files a/icons/turf/open_space.dmi and /dev/null differ diff --git a/icons/turf/overlays.dmi b/icons/turf/overlays.dmi deleted file mode 100644 index 110c1ee19727a..0000000000000 Binary files a/icons/turf/overlays.dmi and /dev/null differ diff --git a/icons/turf/seafloor.dmi b/icons/turf/seafloor.dmi deleted file mode 100644 index 241f9122d212c..0000000000000 Binary files a/icons/turf/seafloor.dmi and /dev/null differ diff --git a/icons/turf/shrouded.dmi b/icons/turf/shrouded.dmi deleted file mode 100644 index ce90ed185f111..0000000000000 Binary files a/icons/turf/shrouded.dmi and /dev/null differ diff --git a/icons/turf/shuttle.dmi b/icons/turf/shuttle.dmi deleted file mode 100644 index 12b1b6d038b94..0000000000000 Binary files a/icons/turf/shuttle.dmi and /dev/null differ diff --git a/icons/turf/skrellturf.dmi b/icons/turf/skrellturf.dmi deleted file mode 100644 index 452595aa89e02..0000000000000 Binary files a/icons/turf/skrellturf.dmi and /dev/null differ diff --git a/icons/turf/snow.dmi b/icons/turf/snow.dmi deleted file mode 100644 index dc33f6dac5123..0000000000000 Binary files a/icons/turf/snow.dmi and /dev/null differ diff --git a/icons/turf/space.dmi b/icons/turf/space.dmi deleted file mode 100644 index 055face17a6a4..0000000000000 Binary files a/icons/turf/space.dmi and /dev/null differ diff --git a/icons/turf/space_dust.dmi b/icons/turf/space_dust.dmi deleted file mode 100644 index 8328b3dba9b15..0000000000000 Binary files a/icons/turf/space_dust.dmi and /dev/null differ diff --git a/icons/turf/space_skybox_comp1.dmi b/icons/turf/space_skybox_comp1.dmi deleted file mode 100644 index e93cc831d494a..0000000000000 Binary files a/icons/turf/space_skybox_comp1.dmi and /dev/null differ diff --git a/icons/turf/space_skybox_comp2.dmi b/icons/turf/space_skybox_comp2.dmi deleted file mode 100644 index 0c9d95b6388dd..0000000000000 Binary files a/icons/turf/space_skybox_comp2.dmi and /dev/null differ diff --git a/icons/turf/space_skybox_comp3.dmi b/icons/turf/space_skybox_comp3.dmi deleted file mode 100644 index 2dbbb39e46b71..0000000000000 Binary files a/icons/turf/space_skybox_comp3.dmi and /dev/null differ diff --git a/icons/turf/structures.dmi b/icons/turf/structures.dmi deleted file mode 100644 index 36da6f2e028dd..0000000000000 Binary files a/icons/turf/structures.dmi and /dev/null differ diff --git a/icons/turf/wall_masks.dmi b/icons/turf/wall_masks.dmi deleted file mode 100644 index f60de15fd869c..0000000000000 Binary files a/icons/turf/wall_masks.dmi and /dev/null differ diff --git a/icons/turf/wall_template.dmi b/icons/turf/wall_template.dmi deleted file mode 100644 index 04418c7617784..0000000000000 Binary files a/icons/turf/wall_template.dmi and /dev/null differ diff --git a/icons/turf/wall_texture.dmi b/icons/turf/wall_texture.dmi deleted file mode 100644 index 265e997b93263..0000000000000 Binary files a/icons/turf/wall_texture.dmi and /dev/null differ diff --git a/icons/turf/walls.dmi b/icons/turf/walls.dmi deleted file mode 100644 index 63aa9af952bcf..0000000000000 Binary files a/icons/turf/walls.dmi and /dev/null differ diff --git a/icons/vending_icons/vendingslot_bg.png b/icons/vending_icons/vendingslot_bg.png deleted file mode 100644 index 6fb6fdcf8b9b2..0000000000000 Binary files a/icons/vending_icons/vendingslot_bg.png and /dev/null differ diff --git a/install-byond.sh b/install-byond.sh deleted file mode 100755 index 3b0170c16b0f6..0000000000000 --- a/install-byond.sh +++ /dev/null @@ -1,15 +0,0 @@ -#!/bin/sh -set -e -if [ -f "$HOME/BYOND-${BYOND_MAJOR}.${BYOND_MINOR}/byond/bin/DreamMaker" ]; -then - echo "Using cached directory." -else - echo "Setting up BYOND." - mkdir -p "$HOME/BYOND-${BYOND_MAJOR}.${BYOND_MINOR}" - cd "$HOME/BYOND-${BYOND_MAJOR}.${BYOND_MINOR}" - echo "Installing DreamMaker to $PWD" - curl "http://www.byond.com/download/build/${BYOND_MAJOR}/${BYOND_MAJOR}.${BYOND_MINOR}_byond_linux.zip" -o byond.zip - unzip -o byond.zip - cd byond - make here -fi diff --git a/interface/interface.dm b/interface/interface.dm deleted file mode 100644 index cb279b834b687..0000000000000 --- a/interface/interface.dm +++ /dev/null @@ -1,174 +0,0 @@ -/client/proc/link_url(url, name, skip_confirmation) - if (!url) - to_chat(src, SPAN_WARNING("The server configuration does not include \a [name] URL.")) - return - if (!skip_confirmation) - var/cancel = alert("You will open [url]. Are you sure?", "Visit [name]", "Yes", "No") != "Yes" - if (cancel) - return - send_link(src, url) - - -/client/verb/link_wiki() - set name = "link wiki" - set hidden = TRUE - link_url(config.wiki_url, "Wiki", TRUE) - - -/client/verb/link_source() - set name = "link source" - set hidden = TRUE - link_url(config.source_url, "Source", TRUE) - - -/client/verb/link_issue() - set name = "link issue" - set hidden = TRUE - link_url(config.issue_url, "Issue", TRUE) - - -/client/verb/link_forum() - set name = "link forum" - set hidden = TRUE - link_url(config.forum_url, "Forum", TRUE) - - -/client/verb/link_rules() - set name = "link rules" - set hidden = TRUE - link_url(config.rules_url, "Rules", TRUE) - - -/client/verb/link_lore() - set name = "link lore" - set hidden = TRUE - link_url(config.lore_url, "Lore", TRUE) - - -/client/verb/hotkeys_help() - set name = "Hotkeys Help" - set category = "OOC" - - var/admin = {" -Admin: -\tF5 = Aghost (admin-ghost) -\tF6 = player-panel-new -\tF7 = admin-pm -\tF8 = Invisimin -"} - - var/hotkey_mode = {" -Hotkey-Mode: (hotkey-mode must be on) -\tTAB = toggle hotkey-mode -\ta = left -\ts = down -\td = right -\tw = up -\t, = move-upwards -\t. = move-down -\tq = drop -\te = equip -\tr = throw -\tt = say -\t5 = emote -\tx = swap-hand -\tz = activate held object (or y) -\tj = toggle-aiming-mode -\tf = cycle-intents-left -\tg = cycle-intents-right -\t1 = help-intent -\t2 = disarm-intent -\t3 = grab-intent -\t4 = harm-intent -"} - - var/other = {" -Any-Mode: (hotkey doesn't need to be on) -\tCtrl+a = left -\tCtrl+s = down -\tCtrl+d = right -\tCtrl+w = up -\tCtrl+q = drop -\tCtrl+e = equip -\tCtrl+r = throw -\tCtrl+x or Middle Mouse = swap-hand -\tCtrl+z = activate held object (or Ctrl+y) -\tCtrl+f = cycle-intents-left -\tCtrl+g = cycle-intents-right -\tCtrl+1 = help-intent -\tCtrl+2 = disarm-intent -\tCtrl+3 = grab-intent -\tCtrl+4 = harm-intent -\tF1 = adminhelp -\tF2 = ooc -\tF3 = say -\tF4 = emote -\tDEL = pull -\tINS = cycle-intents-right -\tHOME = drop -\tPGUP or Middle Mouse = swap-hand -\tPGDN = activate held object -\tEND = throw -\tCtrl + Click = drag -\tShift + Click = examine -\tAlt + Click = show entities on turf -\tCtrl + Alt + Click = interact with certain items -"} - - var/robot_hotkey_mode = {" -Hotkey-Mode: (hotkey-mode must be on) -\tTAB = toggle hotkey-mode -\ta = left -\ts = down -\td = right -\tw = up -\tq = unequip active module -\tt = say -\tx = cycle active modules -\tz = activate held object (or y) -\tf = cycle-intents-left -\tg = cycle-intents-right -\t1 = activate module 1 -\t2 = activate module 2 -\t3 = activate module 3 -\t4 = toggle intents -\t5 = emote -"} - - var/robot_other = {" -Any-Mode: (hotkey doesn't need to be on) -\tCtrl+a = left -\tCtrl+s = down -\tCtrl+d = right -\tCtrl+w = up -\tCtrl+q = unequip active module -\tCtrl+x = cycle active modules -\tCtrl+z = activate held object (or Ctrl+y) -\tCtrl+f = cycle-intents-left -\tCtrl+g = cycle-intents-right -\tCtrl+1 = activate module 1 -\tCtrl+2 = activate module 2 -\tCtrl+3 = activate module 3 -\tCtrl+4 = toggle intents -\tF1 = adminhelp -\tF2 = ooc -\tF3 = say -\tF4 = emote -\tDEL = pull -\tINS = toggle intents -\tPGUP = cycle active modules -\tPGDN = activate held object -\tCtrl + Click = drag or bolt doors -\tShift + Click = examine or open doors -\tAlt + Click = show entities on turf -\tCtrl + Alt + Click = electrify doors -"} - - if(isrobot(src.mob)) - to_chat(src, robot_hotkey_mode) - to_chat(src, robot_other) - else - to_chat(src, hotkey_mode) - to_chat(src, other) - if(holder) - to_chat(src, admin) diff --git a/interface/skin.dmf b/interface/skin.dmf deleted file mode 100644 index 27beb0c4fe609..0000000000000 --- a/interface/skin.dmf +++ /dev/null @@ -1,1217 +0,0 @@ -macro "borghotkeymode" - elem - name = "Tab" - command = ".winset \"mainwindow.macro=borgmacro hotkey_toggle.is-checked=false input.focus=true input.background-color=#d3b5b5\"" - elem - name = "Center+REP" - command = ".center" - elem - name = "ALT+Return" - command = "Toggle-Fullscreen" - elem - name = "Northeast" - command = ".northeast" - elem - name = "Southeast" - command = ".southeast" - elem - name = "Southwest" - command = ".southwest" - elem - name = "Northwest" - command = ".northwest" - elem - name = "ALT+West" - command = "westfaceperm" - elem - name = "CTRL+West" - command = "westface" - elem - name = "West+REP" - command = ".moveleft" - elem - name = "ALT+North" - command = "northfaceperm" - elem - name = "CTRL+North" - command = "northface" - elem - name = "North+REP" - command = ".moveup" - elem - name = "ALT+East" - command = "eastfaceperm" - elem - name = "CTRL+East" - command = "eastface" - elem - name = "East+REP" - command = ".moveright" - elem - name = "ALT+South" - command = "southfaceperm" - elem - name = "CTRL+South" - command = "southface" - elem - name = "South+REP" - command = ".movedown" - elem - name = "Insert" - command = "a-intent right" - elem - name = "Delete" - command = "delete-key-pressed" - elem - name = "1" - command = "toggle-module 1" - elem - name = "CTRL+1" - command = "toggle-module 1" - elem - name = "2" - command = "toggle-module 2" - elem - name = "CTRL+2" - command = "toggle-module 2" - elem - name = "3" - command = "toggle-module 3" - elem - name = "CTRL+3" - command = "toggle-module 3" - elem - name = "4" - command = "a-intent left" - elem - name = "CTRL+4" - command = "a-intent left" - elem - name = "5" - command = ".me" - elem - name = "A+REP" - command = ".moveleft" - elem - name = "CTRL+A+REP" - command = ".moveleft" - elem - name = "D+REP" - command = ".moveright" - elem - name = "CTRL+D+REP" - command = ".moveright" - elem - name = "F" - command = "a-intent left" - elem - name = "CTRL+F" - command = "a-intent left" - elem - name = "G" - command = "a-intent right" - elem - name = "CTRL+G" - command = "a-intent right" - elem - name = "J" - command = "toggle-gun-mode" - elem - name = "CTRL+J" - command = "toggle-gun-mode" - elem - name = "Q" - command = "unequip-module" - elem - name = "CTRL+Q" - command = "unequip-module" - elem - name = "R" - command = ".southwest" - elem - name = "CTRL+R" - command = ".southwest" - elem "s_key" - name = "S+REP" - command = ".movedown" - elem - name = "CTRL+S+REP" - command = ".movedown" - elem - name = "T" - command = ".say" - elem "w_key" - name = "W+REP" - command = ".moveup" - elem - name = "CTRL+W+REP" - command = ".moveup" - elem - name = "X" - command = ".northeast" - elem - name = "CTRL+X" - command = ".northeast" - elem - name = "Y" - command = "Activate-Held-Object" - elem - name = "CTRL+Y" - command = "Activate-Held-Object" - elem - name = "Z" - command = "Activate-Held-Object" - elem - name = "CTRL+Z" - command = "Activate-Held-Object" - elem - name = "Numpad1" - command = "body-r-leg" - elem - name = "Numpad2" - command = "body-groin" - elem - name = "Numpad3" - command = "body-l-leg" - elem - name = "Numpad4" - command = "body-r-arm" - elem - name = "Numpad5" - command = "body-chest" - elem - name = "Numpad6" - command = "body-l-arm" - elem - name = "Numpad8" - command = "body-toggle-head" - elem - name = "F1" - command = "adminhelp" - elem - name = "CTRL+SHIFT+F1+REP" - command = ".options" - elem - name = "F2" - command = "ooc" - elem - name = "F2+REP" - command = ".screenshot auto" - elem - name = "SHIFT+F2+REP" - command = ".screenshot" - elem - name = "F3" - command = ".say" - elem - name = "F4" - command = ".me" - elem - name = "F5" - command = "msay" - elem - name = "F6" - command = "Player-Panel" - elem - name = "F7" - command = "Admin-PM" - elem - name = "F8" - command = "Invisimin" - elem - name = "F12" - command = "F12" - elem - name = "," - command = "move-upwards" - elem - name = "." - command = "move-down" - -macro "macro" - elem - name = "Tab" - command = ".winset \"mainwindow.macro=hotkeymode hotkey_toggle.is-checked=true mapwindow.map.focus=true input.background-color=#f0f0f0\"" - elem - name = "Center+REP" - command = ".center" - elem - name = "ALT+Return" - command = "Toggle-Fullscreen" - elem - name = "Northeast" - command = ".northeast" - elem - name = "Southeast" - command = ".southeast" - elem - name = "Southwest" - command = ".southwest" - elem - name = "Northwest" - command = ".northwest" - elem - name = "ALT+West" - command = "westfaceperm" - elem - name = "CTRL+West" - command = "westface" - elem - name = "West+REP" - command = ".moveleft" - elem - name = "ALT+North" - command = "northfaceperm" - elem - name = "CTRL+North" - command = "northface" - elem - name = "North+REP" - command = ".moveup" - elem - name = "ALT+East" - command = "eastfaceperm" - elem - name = "CTRL+East" - command = "eastface" - elem - name = "East+REP" - command = ".moveright" - elem - name = "ALT+South" - command = "southfaceperm" - elem - name = "CTRL+South" - command = "southface" - elem - name = "South+REP" - command = ".movedown" - elem - name = "Insert" - command = "a-intent right" - elem - name = "Delete" - command = "delete-key-pressed" - elem - name = "CTRL+1" - command = "a-intent help" - elem - name = "CTRL+2" - command = "a-intent disarm" - elem - name = "CTRL+3" - command = "a-intent grab" - elem - name = "CTRL+4" - command = "a-intent harm" - elem - name = "CTRL+A+REP" - command = ".moveleft" - elem - name = "CTRL+D+REP" - command = ".moveright" - elem - name = "CTRL+E" - command = "quick-equip" - elem - name = "CTRL+F" - command = "a-intent left" - elem - name = "CTRL+G" - command = "a-intent right" - elem - name = "CTRL+SHIFT+G" - command = ".configure graphics-hwmode on" - elem - name = "CTRL+Q" - command = ".northwest" - elem - name = "CTRL+R" - command = ".southwest" - elem - name = "CTRL+S+REP" - command = ".movedown" - elem - name = "CTRL+W+REP" - command = ".moveup" - elem - name = "CTRL+X" - command = ".northeast" - elem - name = "CTRL+Y" - command = "Activate-Held-Object" - elem - name = "CTRL+Z" - command = "Activate-Held-Object" - elem - name = "CTRL+Numpad1" - command = "body-r-leg" - elem - name = "CTRL+Numpad2" - command = "body-groin" - elem - name = "CTRL+Numpad3" - command = "body-l-leg" - elem - name = "CTRL+Numpad4" - command = "body-r-arm" - elem - name = "CTRL+Numpad5" - command = "body-chest" - elem - name = "CTRL+Numpad6" - command = "body-l-arm" - elem - name = "CTRL+Numpad8" - command = "body-toggle-head" - elem - name = "CTRL+Add" - command = "move-upwards" - elem - name = "CTRL+Subtract" - command = "move-down" - elem - name = "F1" - command = "adminhelp" - elem - name = "CTRL+SHIFT+F1+REP" - command = ".options" - elem - name = "F2" - command = "ooc" - elem - name = "F2+REP" - command = ".screenshot auto" - elem - name = "SHIFT+F2+REP" - command = ".screenshot" - elem - name = "F3" - command = ".say" - elem - name = "F4" - command = ".me" - elem - name = "F5" - command = "msay" - elem - name = "F6" - command = "Player-Panel" - elem - name = "F7" - command = "Admin-PM" - elem - name = "F8" - command = "Invisimin" - elem - name = "F12" - command = "F12" - -macro "hotkeymode" - elem - name = "Tab" - command = ".winset \"mainwindow.macro=macro hotkey_toggle.is-checked=false input.focus=true input.background-color=#d3b5b5\"" - elem - name = "Center+REP" - command = ".center" - elem - name = "ALT+Return" - command = "Toggle-Fullscreen" - elem - name = "Northeast" - command = ".northeast" - elem - name = "Southeast" - command = ".southeast" - elem - name = "Southwest" - command = ".southwest" - elem - name = "Northwest" - command = ".northwest" - elem - name = "ALT+West" - command = "westfaceperm" - elem - name = "CTRL+West" - command = "westface" - elem - name = "West+REP" - command = ".moveleft" - elem - name = "ALT+North" - command = "northfaceperm" - elem - name = "CTRL+North" - command = "northface" - elem - name = "North+REP" - command = ".moveup" - elem - name = "ALT+East" - command = "eastfaceperm" - elem - name = "CTRL+East" - command = "eastface" - elem - name = "East+REP" - command = ".moveright" - elem - name = "ALT+South" - command = "southfaceperm" - elem - name = "CTRL+South" - command = "southface" - elem - name = "South+REP" - command = ".movedown" - elem - name = "Insert" - command = "a-intent right" - elem - name = "Delete" - command = "delete-key-pressed" - elem - name = "1" - command = "a-intent help" - elem - name = "CTRL+1" - command = "a-intent help" - elem - name = "2" - command = "a-intent disarm" - elem - name = "CTRL+2" - command = "a-intent disarm" - elem - name = "3" - command = "a-intent grab" - elem - name = "CTRL+3" - command = "a-intent grab" - elem - name = "4" - command = "a-intent harm" - elem - name = "CTRL+4" - command = "a-intent harm" - elem - name = "5" - command = ".me" - elem - name = "A+REP" - command = ".moveleft" - elem - name = "CTRL+A+REP" - command = ".moveleft" - elem - name = "D+REP" - command = ".moveright" - elem - name = "CTRL+D+REP" - command = ".moveright" - elem - name = "E" - command = "quick-equip" - elem - name = "CTRL+E" - command = "quick-equip" - elem - name = "F" - command = "a-intent left" - elem - name = "CTRL+F" - command = "a-intent left" - elem - name = "G" - command = "a-intent right" - elem - name = "CTRL+G" - command = "a-intent right" - elem - name = "H" - command = "holster" - elem - name = "CTRL+H" - command = "holster" - elem - name = "J" - command = "toggle-gun-mode" - elem - name = "CTRL+J" - command = "toggle-gun-mode" - elem - name = "Q" - command = ".northwest" - elem - name = "CTRL+Q" - command = ".northwest" - elem - name = "R" - command = ".southwest" - elem - name = "CTRL+R" - command = ".southwest" - elem "s_key" - name = "S+REP" - command = ".movedown" - elem - name = "CTRL+S+REP" - command = ".movedown" - elem - name = "T" - command = ".say" - elem "w_key" - name = "W+REP" - command = ".moveup" - elem - name = "CTRL+W+REP" - command = ".moveup" - elem - name = "X" - command = ".northeast" - elem - name = "CTRL+X" - command = ".northeast" - elem - name = "Y" - command = "Activate-Held-Object" - elem - name = "CTRL+Y" - command = "Activate-Held-Object" - elem - name = "Z" - command = "Activate-Held-Object" - elem - name = "CTRL+Z" - command = "Activate-Held-Object" - elem - name = "Numpad1" - command = "body-r-leg" - elem - name = "Numpad2" - command = "body-groin" - elem - name = "Numpad3" - command = "body-l-leg" - elem - name = "Numpad4" - command = "body-r-arm" - elem - name = "Numpad5" - command = "body-chest" - elem - name = "Numpad6" - command = "body-l-arm" - elem - name = "Numpad8" - command = "body-toggle-head" - elem - name = "F1" - command = "adminhelp" - elem - name = "CTRL+SHIFT+F1+REP" - command = ".options" - elem - name = "F2" - command = "ooc" - elem - name = "F2+REP" - command = ".screenshot auto" - elem - name = "SHIFT+F2+REP" - command = ".screenshot" - elem - name = "F3" - command = ".say" - elem - name = "F4" - command = ".me" - elem - name = "F5" - command = "msay" - elem - name = "F6" - command = "Player-Panel" - elem - name = "F7" - command = "Admin-PM" - elem - name = "F8" - command = "Invisimin" - elem - name = "F12" - command = "F12" - elem - name = "," - command = "move-upwards" - elem - name = "." - command = "move-down" - elem - name = "SHIFT" - command = "setmovingquickly" - elem - name = "SHIFT+UP" - command = "setmovingslowly" - -macro "borgmacro" - elem - name = "Tab" - command = ".winset \"mainwindow.macro=borghotkeymode hotkey_toggle.is-checked=true mapwindow.map.focus=true input.background-color=#f0f0f0\"" - elem - name = "Center+REP" - command = ".center" - elem - name = "ALT+Return" - command = "Toggle-Fullscreen" - elem - name = "Northeast" - command = ".northeast" - elem - name = "Southeast" - command = ".southeast" - elem - name = "Southwest" - command = ".southwest" - elem - name = "Northwest" - command = ".northwest" - elem - name = "ALT+West" - command = "westfaceperm" - elem - name = "CTRL+West" - command = "westface" - elem - name = "West+REP" - command = ".moveleft" - elem - name = "ALT+North" - command = "northfaceperm" - elem - name = "CTRL+North" - command = "northface" - elem - name = "North+REP" - command = ".moveup" - elem - name = "ALT+East" - command = "eastfaceperm" - elem - name = "CTRL+East" - command = "eastface" - elem - name = "East+REP" - command = ".moveright" - elem - name = "ALT+South" - command = "southfaceperm" - elem - name = "CTRL+South" - command = "southface" - elem - name = "South+REP" - command = ".movedown" - elem - name = "Insert" - command = "a-intent right" - elem - name = "Delete" - command = "delete-key-pressed" - elem - name = "CTRL+1" - command = "toggle-module 1" - elem - name = "CTRL+2" - command = "toggle-module 2" - elem - name = "CTRL+3" - command = "toggle-module 3" - elem - name = "CTRL+4" - command = "a-intent left" - elem - name = "CTRL+A+REP" - command = ".moveleft" - elem - name = "CTRL+D+REP" - command = ".moveright" - elem - name = "CTRL+F" - command = "a-intent left" - elem - name = "CTRL+G" - command = "a-intent right" - elem - name = "CTRL+Q" - command = ".northwest" - elem - name = "CTRL+R" - command = ".southwest" - elem - name = "CTRL+S+REP" - command = ".movedown" - elem - name = "CTRL+W+REP" - command = ".moveup" - elem - name = "CTRL+X" - command = ".northeast" - elem - name = "CTRL+Y" - command = "Activate-Held-Object" - elem - name = "CTRL+Z" - command = "Activate-Held-Object" - elem - name = "CTRL+Numpad1" - command = "body-r-leg" - elem - name = "CTRL+Numpad2" - command = "body-groin" - elem - name = "CTRL+Numpad3" - command = "body-l-leg" - elem - name = "CTRL+Numpad4" - command = "body-r-arm" - elem - name = "CTRL+Numpad5" - command = "body-chest" - elem - name = "CTRL+Numpad6" - command = "body-l-arm" - elem - name = "CTRL+Numpad8" - command = "body-toggle-head" - elem - name = "CTRL+Add" - command = "move-upwards" - elem - name = "CTRL+Subtract" - command = "move-down" - elem - name = "F1" - command = "adminhelp" - elem - name = "CTRL+SHIFT+F1+REP" - command = ".options" - elem - name = "F2" - command = "ooc" - elem - name = "F2+REP" - command = ".screenshot auto" - elem - name = "SHIFT+F2+REP" - command = ".screenshot" - elem - name = "F3" - command = ".say" - elem - name = "F4" - command = ".me" - elem - name = "F5" - command = "msay" - elem - name = "F6" - command = "Player-Panel" - elem - name = "F7" - command = "Admin-PM" - elem - name = "F8" - command = "Invisimin" - elem - name = "F12" - command = "F12" - - -menu "menu" - elem - name = "&File" - command = "" - saved-params = "is-checked" - elem - name = "&Quick screenshot\tF2" - command = ".screenshot auto" - category = "&File" - saved-params = "is-checked" - elem - name = "&Save screenshot as...\tShift+F2" - command = ".screenshot" - category = "&File" - saved-params = "is-checked" - elem - name = "" - command = "" - category = "&File" - saved-params = "is-checked" - elem - name = "&Reconnect" - command = ".reconnect" - category = "&File" - saved-params = "is-checked" - elem - name = "&Check ping" - command = ".ping" - category = "&File" - saved-params = "is-checked" - elem - name = "&Quit" - command = ".quit" - category = "&File" - saved-params = "is-checked" - elem - name = "&Size" - command = "" - saved-params = "is-checked" - elem "stretch" - name = "&Stretch to fit" - command = ".winset \"mapwindow.map.icon-size=0\"" - category = "&Size" - is-checked = true - can-check = true - group = "size" - saved-params = "is-checked" - elem "icon128" - name = "&128x128" - command = ".winset \"mapwindow.map.icon-size=128\"" - category = "&Size" - can-check = true - group = "size" - saved-params = "is-checked" - elem "icon96" - name = "&96x96" - command = ".winset \"mapwindow.map.icon-size=96\"" - category = "&Size" - can-check = true - group = "size" - saved-params = "is-checked" - elem "icon64" - name = "&64x64" - command = ".winset \"mapwindow.map.icon-size=64\"" - category = "&Size" - can-check = true - group = "size" - saved-params = "is-checked" - elem "icon48" - name = "&48x48" - command = ".winset \"mapwindow.map.icon-size=48\"" - category = "&Size" - can-check = true - group = "size" - saved-params = "is-checked" - elem "icon32" - name = "&32x32" - command = ".winset \"mapwindow.map.icon-size=32\"" - category = "&Size" - can-check = true - group = "size" - saved-params = "is-checked" - elem - name = "&Scaling" - command = "" - saved-params = "is-checked" - elem "NN" - name = "&Nearest Neighbor" - command = ".winset \"mapwindow.map.zoom-mode=distort\"" - category = "&Scaling" - can-check = true - group = "scale" - saved-params = "is-checked" - elem "PS" - name = "&Point Sampling" - command = ".winset \"mapwindow.map.zoom-mode=normal\"" - category = "&Scaling" - can-check = true - group = "scale" - saved-params = "is-checked" - elem "BL" - name = "&Bilinear" - command = ".winset \"mapwindow.map.zoom-mode=blur\"" - category = "&Scaling" - can-check = true - group = "scale" - saved-params = "is-checked" - elem - name = "&Help" - command = "" - saved-params = "is-checked" - elem - name = "&Admin help\tF1" - command = "adminhelp" - category = "&Help" - saved-params = "is-checked" - elem - name = "&Hotkeys" - command = "hotkeys-help" - category = "&Help" - saved-params = "is-checked" - - -window "mainwindow" - elem "mainwindow" - type = MAIN - pos = 281,0 - size = 640x440 - anchor1 = none - anchor2 = none - is-default = true - saved-params = "pos;size;is-minimized;is-maximized" - is-maximized = true - icon = 'icons\\ss13_64.png' - macro = "macro" - menu = "menu" - elem "asset_cache_browser" - type = BROWSER - pos = 424,208 - size = 1x1 - anchor1 = none - anchor2 = none - is-visible = false - saved-params = "" - elem "hotkey_toggle" - type = BUTTON - pos = 560,420 - size = 80x20 - anchor1 = 100,100 - anchor2 = none - saved-params = "" - text = "Hotkey Toggle" - command = ".winset \"mainwindow.macro!=macro ? mainwindow.macro=macro hotkey_toggle.is-checked=false input.focus=true : mainwindow.macro=hotkeymode hotkey_toggle.is-checked=true mapwindow.map.focus=true\"" - button-type = pushbox - elem "mainvsplit" - type = CHILD - pos = 3,0 - size = 634x416 - anchor1 = 0,0 - anchor2 = 100,100 - saved-params = "splitter" - right = "rpane" - is-vert = true - elem "input" - type = INPUT - pos = 3,420 - size = 517x20 - anchor1 = 0,100 - anchor2 = 100,100 - background-color = #d3b5b5 - is-default = true - border = sunken - saved-params = "command" - elem "saybutton" - type = BUTTON - pos = 520,420 - size = 40x20 - anchor1 = 100,100 - anchor2 = none - saved-params = "is-checked" - text = "Chat" - command = ".winset \"saybutton.is-checked=true?input.command=\"!say \\\"\" macrobutton.is-checked=false:input.command=\"" - button-type = pushbox - -window "mapwindow" - elem "mapwindow" - type = MAIN - pos = 281,0 - size = 640x480 - anchor1 = none - anchor2 = none - saved-params = "pos;size;is-minimized;is-maximized" - titlebar = false - statusbar = false - can-close = false - can-minimize = false - can-resize = false - is-pane = true - elem "map" - type = MAP - pos = 0,0 - size = 640x480 - anchor1 = 0,0 - anchor2 = 100,100 - font-family = "Arial Rounded MT Bold,Arial Black,Arial,sans-serif" - font-size = 7 - is-default = true - saved-params = "icon-size" - on-show = ".winset\"mainwindow.mainvsplit.left=mapwindow\"" - on-hide = ".winset\"mainwindow.mainvsplit.left=\"" - elem "lobbybrowser" - type = BROWSER - pos = 0,0 - size = 640x480 - anchor1 = 0,0 - anchor2 = 100,100 - is-visible = false - is-disabled = true - saved-params = "" - -window "outputwindow" - elem "outputwindow" - type = MAIN - pos = 281,0 - size = 640x480 - anchor1 = none - anchor2 = none - saved-params = "pos;size;is-minimized;is-maximized" - titlebar = false - statusbar = false - can-close = false - can-minimize = false - can-resize = false - is-pane = true - elem "browseroutput" - type = BROWSER - pos = 0,0 - size = 640x480 - anchor1 = 0,0 - anchor2 = 100,100 - background-color = #ffffff - is-visible = false - saved-params = "" - elem "output" - type = OUTPUT - pos = 0,0 - size = 640x480 - anchor1 = 0,0 - anchor2 = 100,100 - is-default = true - saved-params = "" - -window "rpane" - elem "rpane" - type = MAIN - pos = 418,0 - size = 640x480 - anchor1 = none - anchor2 = none - saved-params = "pos;size;is-minimized;is-maximized" - is-pane = true - elem "rpanewindow" - type = CHILD - pos = 0,0 - size = 640x474 - anchor1 = 0,0 - anchor2 = 100,100 - saved-params = "splitter" - right = "outputwindow" - is-vert = false - elem "linksource" - type = BUTTON - pos = 476,0 - size = 60x15 - anchor1 = none - anchor2 = none - saved-params = "is-checked" - text = "Source" - command = "link-source" - elem "linkissue" - type = BUTTON - pos = 536,0 - size = 60x15 - anchor1 = none - anchor2 = none - saved-params = "is-checked" - text = "Report Issue" - command = "link-issue" - elem "linkrules" - type = BUTTON - pos = 120,0 - size = 60x15 - anchor1 = none - anchor2 = none - saved-params = "is-checked" - text = "Rules" - command = "link-rules" - group = "rpanemode" - elem "changelog" - type = BUTTON - pos = 416,0 - size = 60x15 - anchor1 = none - anchor2 = none - saved-params = "is-checked" - text = "Changelog" - command = "Changelog" - group = "rpanemode" - elem "linklore" - type = BUTTON - pos = 208,0 - size = 60x15 - anchor1 = none - anchor2 = none - saved-params = "is-checked" - text = "Lore" - command = "link-lore" - group = "rpanemode" - elem "linkforum" - type = BUTTON - pos = 328,0 - size = 60x15 - anchor1 = none - anchor2 = none - saved-params = "is-checked" - text = "Forum" - command = "link-forum" - group = "rpanemode" - elem "linkwiki" - type = BUTTON - pos = 268,0 - size = 60x15 - anchor1 = none - anchor2 = none - saved-params = "is-checked" - text = "Wiki" - command = "link-wiki" - group = "rpanemode" - elem "textb" - type = BUTTON - pos = 0,0 - size = 60x15 - anchor1 = none - anchor2 = none - is-visible = false - saved-params = "is-checked" - text = "Text" - command = ".winset \"rpanewindow.left=;\"" - is-checked = true - group = "rpanemode" - button-type = pushbox - elem "infob" - type = BUTTON - pos = 60,0 - size = 60x15 - anchor1 = none - anchor2 = none - is-visible = false - saved-params = "is-checked" - text = "Info" - command = ".winset \"rpanewindow.left=infowindow\"" - group = "rpanemode" - button-type = pushbox - -window "infowindow" - elem "infowindow" - type = MAIN - pos = 281,0 - size = 640x480 - anchor1 = none - anchor2 = none - saved-params = "pos;size;is-minimized;is-maximized" - title = "Info" - is-pane = true - elem "info" - type = INFO - pos = 0,0 - size = 638x477 - anchor1 = 0,0 - anchor2 = 100,100 - is-default = true - saved-params = "" - highlight-color = #00aa00 - on-show = ".winset\"rpane.infob.is-visible=true;rpane.infob.pos=65,0 rpane.textb.is-visible=true rpane.infob.is-checked=true rpane.rpanewindow.pos=0,30 rpane.rpanewindow.size=0x0 rpane.rpanewindow.left=infowindow\"" - on-hide = ".winset\"rpane.infob.is-visible=false;rpane.textb.is-visible=true rpane.rpanewindow.pos=0,30 rpane.rpanewindow.size=0x0 rpane.rpanewindow.left=\"" - diff --git a/libmysql.dll b/libmysql.dll deleted file mode 100644 index 86453b952eb36..0000000000000 Binary files a/libmysql.dll and /dev/null differ diff --git a/maps/_map_include.dm b/maps/_map_include.dm deleted file mode 100644 index 0c468a34da1e3..0000000000000 --- a/maps/_map_include.dm +++ /dev/null @@ -1,4 +0,0 @@ -/* - This is a dummy file to act as a marker point for dm.sh to insert its maps at. - DO NOT MOVE, REMOVE OR RENAME THIS FILE WITHOUT FIXING THE SCRIPT OR THINGS WILL BREAK -*/ diff --git a/maps/_maps.dm b/maps/_maps.dm deleted file mode 100644 index 59a656b569be3..0000000000000 --- a/maps/_maps.dm +++ /dev/null @@ -1,47 +0,0 @@ -#include "_map_include.dm" - -#include "example\example_define.dm" // Always included because tests. May be fixable later. - -#include "using.dm" - -#include "antag_spawn\antag_spawn_bases.dm" -#include "antag_spawn\ert\ert.dm" -#include "antag_spawn\heist\heist.dm" -#include "antag_spawn\mercenary\mercenary.dm" -#include "antag_spawn\ninja\ninja.dm" -#include "antag_spawn\vox\voxraider.dm" -#include "antag_spawn\wizard\wizard.dm" - -#include "away\away_sites.dm" -#include "away_sites_testing\away_sites_testing_define.dm" -#include "random_ruins\exoplanet_ruins\exoplanet_ruins.dm" -#include "random_ruins\exoplanet_ruins\crashed_pod\crashed_pod.dm" -#include "random_ruins\exoplanet_ruins\datacapsule\datacapsule.dm" -#include "random_ruins\exoplanet_ruins\deserted_lab\deserted_lab.dm" -#include "random_ruins\exoplanet_ruins\drill_site\drill_site.dm" -#include "random_ruins\exoplanet_ruins\fountain\fountain_ruin.dm" -#include "random_ruins\exoplanet_ruins\hut\hut.dm" -#include "random_ruins\exoplanet_ruins\hydrobase\hydrobase.dm" -#include "random_ruins\exoplanet_ruins\icarus\icarus.dm" -#include "random_ruins\exoplanet_ruins\lodge\lodge.dm" -#include "random_ruins\exoplanet_ruins\marooned\marooned.dm" -#include "random_ruins\exoplanet_ruins\monoliths\monoliths.dm" -#include "random_ruins\exoplanet_ruins\oasis\oasis.dm" -#include "random_ruins\exoplanet_ruins\oldlab\oldlab.dm" -#include "random_ruins\exoplanet_ruins\oldlab2\oldlab2.dm" -#include "random_ruins\exoplanet_ruins\oldpod\oldpod.dm" -#include "random_ruins\exoplanet_ruins\playablecolony\playablecolony.dm" -#include "random_ruins\exoplanet_ruins\playablecolony2\playablecolony2.dm" -#include "random_ruins\exoplanet_ruins\radshrine\radshrine.dm" -#include "random_ruins\exoplanet_ruins\spider_nest\spider_nest.dm" -#include "random_ruins\exoplanet_ruins\tar_anomaly\tar_anomaly.dm" -#include "random_ruins\exoplanet_ruins\trash_heap\trash_heap.dm" -#include "random_ruins\space_ruins\space_ruins.dm" -#include "~mapsystem\map_preferences.dm" -#include "~mapsystem\map_ranks.dm" -#include "~mapsystem\maps.dm" -#include "~mapsystem\maps_announcements.dm" -#include "~mapsystem\maps_areas.dm" -#include "~mapsystem\maps_jobs.dm" -#include "~mapsystem\maps_unit_testing.dm" -#include "~unit_tests\unit_testing.dm" diff --git a/maps/antag_spawn/antag_spawn_bases.dm b/maps/antag_spawn/antag_spawn_bases.dm deleted file mode 100644 index f6e58b5626f31..0000000000000 --- a/maps/antag_spawn/antag_spawn_bases.dm +++ /dev/null @@ -1,2 +0,0 @@ -/datum/map_template/ruin/antag_spawn - prefix = "maps/antag_spawn/" \ No newline at end of file diff --git a/maps/antag_spawn/ert/ert.dm b/maps/antag_spawn/ert/ert.dm deleted file mode 100644 index b89d3a7ce1481..0000000000000 --- a/maps/antag_spawn/ert/ert.dm +++ /dev/null @@ -1,80 +0,0 @@ -/datum/map_template/ruin/antag_spawn/ert - name = "ERT Base" - suffixes = list("ert/ert_base.dmm") - shuttles_to_initialise = list(/datum/shuttle/autodock/multi/antag/rescue) - apc_test_exempt_areas = list( - /area/map_template/rescue_base = NO_SCRUBBER|NO_VENT|NO_APC - ) - - -/datum/shuttle/autodock/multi/antag/rescue - name = "Rescue" - warmup_time = 0 - defer_initialisation = TRUE - destination_tags = list( - "nav_ert_dock", - "nav_ert_start" - ) - shuttle_area = /area/map_template/rescue_base/start - dock_target = "rescue_shuttle" - current_location = "nav_ert_start" - landmark_transition = "nav_ert_transition" - home_waypoint = "nav_ert_start" - announcer = "Proximity Sensor Array" - arrival_message = "Attention, vessel detected entering vessel proximity." - departure_message = "Attention, vessel detected leaving vessel proximity." - -/obj/effect/shuttle_landmark/ert/start - name = "Response Team Base" - landmark_tag = "nav_ert_start" - docking_controller = "rescue_base" - -/obj/effect/shuttle_landmark/ert/internim - name = "In transit" - landmark_tag = "nav_ert_transition" - -/obj/effect/shuttle_landmark/ert/dock - name = "Docking Port" - landmark_tag = "nav_ert_dock" - docking_controller = "rescue_shuttle_dock_airlock" - -// Areas - -/area/map_template/rescue_base - name = "\improper Response Team Base" - icon_state = "yellow" - requires_power = 0 - dynamic_lighting = 1 - area_flags = AREA_FLAG_RAD_SHIELDED | AREA_FLAG_ION_SHIELDED - -/area/map_template/rescue_base/base - name = "\improper Barracks" - icon_state = "yellow" - dynamic_lighting = 0 - -/area/map_template/rescue_base/start - name = "\improper Response Team Base" - icon_state = "shuttlered" - base_turf = /turf/unsimulated/floor/rescue_base - -//Objects - -/obj/item/device/radio/headset/ert - name = "emergency response team radio headset" - desc = "The headset of the boss's boss." - icon_state = "com_headset" - item_state = "headset" - ks1type = /obj/item/device/encryptionkey/ert - -/obj/item/device/radio/headset/ert/Initialize() - . = ..() - set_frequency(ERT_FREQ) - -/obj/item/stock_parts/circuitboard/telecomms/allinone/ert - build_path = /obj/machinery/telecomms/allinone/ert - -/obj/machinery/telecomms/allinone/ert - listening_freqs = list(ERT_FREQ) - channel_color = COMMS_COLOR_CENTCOMM - channel_name = "Response Team" - circuitboard = /obj/item/stock_parts/circuitboard/telecomms/allinone/ert \ No newline at end of file diff --git a/maps/antag_spawn/ert/ert_base.dmm b/maps/antag_spawn/ert/ert_base.dmm deleted file mode 100644 index 5d816fda81837..0000000000000 --- a/maps/antag_spawn/ert/ert_base.dmm +++ /dev/null @@ -1,12676 +0,0 @@ -//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE -"ad" = ( -/turf/unsimulated/wall, -/area/map_template/rescue_base/base) -"af" = ( -/obj/machinery/door/airlock/civilian{ - autoset_access = 0; - name = "Head" - }, -/turf/unsimulated/floor{ - icon = 'icons/turf/flooring/tiles.dmi'; - icon_state = "monotiledark" - }, -/area/map_template/rescue_base/base) -"ag" = ( -/turf/unsimulated/floor{ - color = "#543c30"; - icon = 'icons/turf/flooring/wood.dmi'; - icon_state = "wood" - }, -/area/map_template/rescue_base/base) -"ah" = ( -/obj/structure/bed/chair/comfy/captain{ - dir = 1 - }, -/turf/unsimulated/floor{ - color = "#543c30"; - icon = 'icons/turf/flooring/wood.dmi'; - icon_state = "wood" - }, -/area/map_template/rescue_base/base) -"aj" = ( -/obj/structure/catwalk, -/obj/machinery/pointdefense, -/obj/machinery/power/terminal, -/obj/structure/cable/green{ - d2 = 2; - icon_state = "0-2" - }, -/obj/structure/cable/green{ - d2 = 2; - icon_state = "0-2" - }, -/turf/unsimulated/floor/plating, -/area/map_template/rescue_base/base) -"al" = ( -/obj/structure/railing/mapped, -/turf/unsimulated/floor{ - icon = 'icons/turf/flooring/tiles.dmi'; - icon_state = "dark" - }, -/area/map_template/rescue_base/base) -"ao" = ( -/turf/unsimulated/floor{ - dir = 8; - icon_state = "vault" - }, -/area/map_template/rescue_base/base) -"ap" = ( -/obj/item/modular_computer/tablet/lease/preset/command, -/obj/structure/table/woodentable_reinforced/ebony/walnut, -/obj/item/device/radio/intercom/specops{ - dir = 1; - pixel_y = -22 - }, -/turf/unsimulated/floor{ - color = "#543c30"; - icon = 'icons/turf/flooring/wood.dmi'; - icon_state = "wood" - }, -/area/map_template/rescue_base/base) -"ar" = ( -/turf/unsimulated/floor{ - icon_state = "dark" - }, -/area/map_template/rescue_base/base) -"ax" = ( -/obj/machinery/recharger/wallcharger{ - dir = 4; - pixel_x = -23; - pixel_y = -3 - }, -/obj/effect/floor_decal/corner/red/border{ - dir = 8 - }, -/turf/unsimulated/floor{ - icon = 'icons/turf/flooring/tiles.dmi'; - icon_state = "monotiledark" - }, -/area/map_template/rescue_base/base) -"az" = ( -/obj/structure/catwalk, -/obj/machinery/pointdefense, -/obj/machinery/power/terminal, -/obj/structure/cable/green{ - d2 = 2; - icon_state = "0-2" - }, -/turf/unsimulated/floor/plating, -/area/map_template/rescue_base/base) -"aC" = ( -/obj/machinery/disperser/front{ - dir = 1 - }, -/turf/unsimulated/floor{ - icon_state = "plating"; - name = "plating" - }, -/area/map_template/rescue_base/base) -"aD" = ( -/obj/structure/mopbucket, -/obj/item/mop, -/obj/effect/floor_decal/corner/blue/diagonal, -/obj/structure/hygiene/sink/kitchen{ - pixel_y = 21 - }, -/turf/unsimulated/floor{ - icon = 'icons/turf/flooring/tiles.dmi'; - icon_state = "dark" - }, -/area/map_template/rescue_base/base) -"aE" = ( -/obj/structure/reagent_dispensers/watertank, -/obj/effect/floor_decal/corner/blue/diagonal, -/obj/item/device/radio/intercom/specops{ - pixel_y = 22 - }, -/turf/unsimulated/floor{ - icon = 'icons/turf/flooring/tiles.dmi'; - icon_state = "dark" - }, -/area/map_template/rescue_base/base) -"aF" = ( -/obj/structure/catwalk, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/sign/solgov{ - pixel_y = -32 - }, -/turf/unsimulated/floor/plating, -/area/map_template/rescue_base/base) -"aG" = ( -/obj/structure/table/reinforced, -/obj/machinery/chemical_dispenser/bar_soft/full, -/obj/effect/floor_decal/corner/blue/diagonal, -/obj/item/device/radio/intercom/specops{ - pixel_y = 22 - }, -/turf/unsimulated/floor{ - icon = 'icons/turf/flooring/tiles.dmi'; - icon_state = "dark" - }, -/area/map_template/rescue_base/base) -"aV" = ( -/obj/structure/railing/mapped{ - dir = 4; - icon_state = "railing0-1" - }, -/turf/unsimulated/floor{ - icon = 'icons/turf/flooring/tiles.dmi'; - icon_state = "dark" - }, -/area/map_template/rescue_base/base) -"aW" = ( -/obj/effect/floor_decal/corner/blue/diagonal, -/turf/unsimulated/floor{ - icon = 'icons/turf/flooring/tiles.dmi'; - icon_state = "dark" - }, -/area/map_template/rescue_base/base) -"be" = ( -/obj/machinery/computer/modular/preset/cardslot/command, -/turf/unsimulated/floor{ - icon = 'icons/turf/flooring/tiles.dmi'; - icon_state = "dark" - }, -/area/map_template/rescue_base/base) -"bf" = ( -/obj/machinery/vending/dinnerware, -/obj/effect/floor_decal/corner/blue/diagonal, -/turf/unsimulated/floor{ - icon = 'icons/turf/flooring/tiles.dmi'; - icon_state = "dark" - }, -/area/map_template/rescue_base/base) -"bg" = ( -/obj/machinery/door/airlock/centcom{ - name = "Head" - }, -/turf/unsimulated/floor{ - icon_state = "freezerfloor" - }, -/area/map_template/rescue_base/base) -"bi" = ( -/obj/machinery/computer/ship/navigation, -/turf/unsimulated/floor{ - icon = 'icons/turf/flooring/tiles.dmi'; - icon_state = "dark" - }, -/area/map_template/rescue_base/base) -"bj" = ( -/obj/effect/landmark{ - name = "Response Team" - }, -/turf/unsimulated/floor{ - dir = 8; - icon_state = "vault" - }, -/area/map_template/rescue_base/base) -"bo" = ( -/obj/machinery/computer/ship/engines, -/turf/unsimulated/floor{ - icon = 'icons/turf/flooring/tiles.dmi'; - icon_state = "dark" - }, -/area/map_template/rescue_base/base) -"bp" = ( -/obj/structure/table/reinforced, -/obj/effect/floor_decal/corner/blue/diagonal, -/obj/machinery/microwave, -/turf/unsimulated/floor{ - icon = 'icons/turf/flooring/tiles.dmi'; - icon_state = "dark" - }, -/area/map_template/rescue_base/base) -"br" = ( -/obj/structure/railing/mapped{ - dir = 8; - icon_state = "railing0-1" - }, -/turf/unsimulated/floor{ - icon = 'icons/turf/flooring/tiles.dmi'; - icon_state = "dark" - }, -/area/map_template/rescue_base/base) -"bt" = ( -/obj/structure/closet{ - name = "emergency response team wardrobe" - }, -/obj/item/clothing/accessory/solgov/fleet_patch/fifth, -/obj/item/clothing/head/solgov/utility/fleet, -/obj/item/clothing/accessory/badge/solgov/tags, -/turf/unsimulated/floor{ - dir = 1; - icon_state = "vault" - }, -/area/map_template/rescue_base/base) -"bE" = ( -/obj/machinery/disperser/middle{ - dir = 1 - }, -/turf/unsimulated/floor{ - icon_state = "plating"; - name = "plating" - }, -/area/map_template/rescue_base/base) -"bF" = ( -/obj/structure/bed/chair/comfy/blue{ - dir = 1 - }, -/turf/unsimulated/floor{ - icon = 'icons/turf/flooring/tiles.dmi'; - icon_state = "dark" - }, -/area/map_template/rescue_base/base) -"bG" = ( -/obj/machinery/disperser/back{ - dir = 1 - }, -/turf/unsimulated/floor{ - icon_state = "plating"; - name = "plating" - }, -/area/map_template/rescue_base/base) -"bH" = ( -/obj/structure/table/glass, -/obj/effect/floor_decal/corner/blue/three_quarters{ - dir = 8 - }, -/turf/unsimulated/floor{ - icon = 'icons/turf/flooring/tiles.dmi'; - icon_state = "dark" - }, -/area/map_template/rescue_base/base) -"bI" = ( -/obj/machinery/computer/modular/preset/full/ert, -/obj/effect/floor_decal/corner/blue{ - dir = 5 - }, -/turf/unsimulated/floor{ - icon = 'icons/turf/flooring/tiles.dmi'; - icon_state = "dark" - }, -/area/map_template/rescue_base/base) -"bL" = ( -/obj/structure/railing/mapped, -/obj/effect/floor_decal/corner/blue{ - dir = 6 - }, -/obj/effect/floor_decal/corner/blue{ - dir = 8 - }, -/turf/unsimulated/floor{ - icon = 'icons/turf/flooring/tiles.dmi'; - icon_state = "dark" - }, -/area/map_template/rescue_base/base) -"bM" = ( -/turf/unsimulated/floor{ - icon_state = "freezerfloor" - }, -/area/map_template/rescue_base/base) -"bN" = ( -/obj/machinery/door/airlock/centcom{ - name = "Showers" - }, -/turf/unsimulated/floor{ - icon_state = "freezerfloor" - }, -/area/map_template/rescue_base/base) -"bQ" = ( -/obj/machinery/door/airlock/centcom{ - name = "Cell" - }, -/turf/simulated/floor/tiled/dark, -/area/map_template/rescue_base/start) -"bS" = ( -/obj/structure/hygiene/shower{ - dir = 4 - }, -/turf/unsimulated/floor{ - icon_state = "freezerfloor" - }, -/area/map_template/rescue_base/base) -"bT" = ( -/obj/structure/railing/mapped, -/obj/effect/floor_decal/corner/blue{ - dir = 5 - }, -/obj/effect/floor_decal/corner/blue{ - dir = 10 - }, -/turf/unsimulated/floor{ - icon = 'icons/turf/flooring/tiles.dmi'; - icon_state = "dark" - }, -/area/map_template/rescue_base/base) -"cg" = ( -/obj/structure/railing/mapped, -/obj/effect/floor_decal/corner/blue{ - dir = 9 - }, -/obj/effect/floor_decal/corner/blue, -/turf/unsimulated/floor{ - icon = 'icons/turf/flooring/tiles.dmi'; - icon_state = "dark" - }, -/area/map_template/rescue_base/base) -"ck" = ( -/obj/machinery/computer/modular/preset/full/ert, -/obj/effect/floor_decal/corner/blue{ - dir = 5 - }, -/obj/item/device/radio/intercom/specops{ - pixel_y = 22 - }, -/turf/unsimulated/floor{ - icon = 'icons/turf/flooring/tiles.dmi'; - icon_state = "dark" - }, -/area/map_template/rescue_base/base) -"cn" = ( -/obj/structure/table/rack, -/obj/item/gun/energy/laser, -/obj/item/gun/energy/laser, -/obj/item/gun/energy/laser, -/obj/item/gun/energy/laser, -/turf/unsimulated/floor{ - dir = 1; - icon_state = "vault" - }, -/area/map_template/rescue_base/base) -"co" = ( -/obj/structure/table/glass, -/obj/item/book/manual/solgov_law{ - pixel_x = 3; - pixel_y = 3 - }, -/obj/effect/floor_decal/corner/blue/three_quarters{ - dir = 1 - }, -/turf/unsimulated/floor{ - icon = 'icons/turf/flooring/tiles.dmi'; - icon_state = "dark" - }, -/area/map_template/rescue_base/base) -"cp" = ( -/obj/structure/window/reinforced/crescent, -/turf/unsimulated/floor{ - icon_state = "plating"; - name = "plating" - }, -/area/map_template/rescue_base/base) -"cq" = ( -/obj/structure/table/glass, -/obj/effect/floor_decal/corner/blue{ - dir = 9 - }, -/turf/unsimulated/floor{ - icon = 'icons/turf/flooring/tiles.dmi'; - icon_state = "dark" - }, -/area/map_template/rescue_base/base) -"cr" = ( -/obj/structure/bed/chair/comfy/blue{ - dir = 8 - }, -/turf/unsimulated/floor{ - icon = 'icons/turf/flooring/tiles.dmi'; - icon_state = "dark" - }, -/area/map_template/rescue_base/base) -"cu" = ( -/obj/structure/railing/mapped{ - dir = 4; - icon_state = "railing0-1" - }, -/obj/effect/floor_decal/corner/blue{ - dir = 6 - }, -/turf/unsimulated/floor{ - icon = 'icons/turf/flooring/tiles.dmi'; - icon_state = "dark" - }, -/area/map_template/rescue_base/base) -"cy" = ( -/obj/machinery/computer/modular/preset/cardslot/command, -/obj/effect/floor_decal/corner/blue{ - dir = 9 - }, -/turf/unsimulated/floor{ - icon = 'icons/turf/flooring/tiles.dmi'; - icon_state = "dark" - }, -/area/map_template/rescue_base/base) -"cF" = ( -/obj/machinery/computer/modular/preset/full/ert, -/obj/effect/floor_decal/corner/blue{ - dir = 6 - }, -/turf/unsimulated/floor{ - icon = 'icons/turf/flooring/tiles.dmi'; - icon_state = "dark" - }, -/area/map_template/rescue_base/base) -"cG" = ( -/obj/structure/table/rack, -/turf/unsimulated/floor{ - icon = 'icons/turf/flooring/tiles.dmi'; - icon_state = "reinforced" - }, -/area/map_template/rescue_base/base) -"cH" = ( -/obj/structure/railing/mapped{ - dir = 8; - icon_state = "railing0-1" - }, -/obj/effect/floor_decal/corner/blue{ - dir = 9 - }, -/turf/unsimulated/floor{ - icon = 'icons/turf/flooring/tiles.dmi'; - icon_state = "dark" - }, -/area/map_template/rescue_base/base) -"cI" = ( -/obj/effect/floor_decal/corner/black/border{ - dir = 9 - }, -/turf/unsimulated/floor{ - icon = 'icons/turf/flooring/tiles.dmi'; - icon_state = "monotiledark" - }, -/area/map_template/rescue_base/base) -"cJ" = ( -/obj/effect/floor_decal/corner/black/border{ - dir = 5 - }, -/turf/unsimulated/floor{ - icon = 'icons/turf/flooring/tiles.dmi'; - icon_state = "monotiledark" - }, -/area/map_template/rescue_base/base) -"cK" = ( -/obj/effect/floor_decal/corner/red/border{ - dir = 4 - }, -/turf/unsimulated/floor{ - icon = 'icons/turf/flooring/tiles.dmi'; - icon_state = "monotiledark" - }, -/area/map_template/rescue_base/base) -"cN" = ( -/obj/structure/bed/chair/comfy/blue{ - dir = 4 - }, -/turf/unsimulated/floor{ - icon = 'icons/turf/flooring/tiles.dmi'; - icon_state = "dark" - }, -/area/map_template/rescue_base/base) -"cS" = ( -/obj/structure/table/glass, -/obj/effect/floor_decal/corner/blue{ - dir = 6 - }, -/turf/unsimulated/floor{ - icon = 'icons/turf/flooring/tiles.dmi'; - icon_state = "dark" - }, -/area/map_template/rescue_base/base) -"cT" = ( -/obj/effect/floor_decal/corner/black/border{ - dir = 8 - }, -/turf/unsimulated/floor{ - icon = 'icons/turf/flooring/tiles.dmi'; - icon_state = "monotiledark" - }, -/area/map_template/rescue_base/base) -"cU" = ( -/obj/effect/wingrille_spawn/reinforced/crescent, -/turf/unsimulated/floor{ - icon_state = "plating"; - name = "plating" - }, -/area/map_template/rescue_base/base) -"cV" = ( -/obj/effect/floor_decal/corner/black/border{ - dir = 4 - }, -/turf/unsimulated/floor{ - icon = 'icons/turf/flooring/tiles.dmi'; - icon_state = "monotiledark" - }, -/area/map_template/rescue_base/base) -"cW" = ( -/obj/machinery/vending/security, -/turf/unsimulated/wall, -/area/map_template/rescue_base/base) -"cY" = ( -/obj/machinery/door/airlock/centcom{ - name = "Security" - }, -/turf/unsimulated/floor{ - icon = 'icons/turf/flooring/tiles.dmi'; - icon_state = "monotiledark" - }, -/area/map_template/rescue_base/base) -"cZ" = ( -/obj/structure/table/glass, -/obj/item/book/manual/sol_sop, -/obj/effect/floor_decal/corner/blue/three_quarters, -/turf/unsimulated/floor{ - icon = 'icons/turf/flooring/tiles.dmi'; - icon_state = "dark" - }, -/area/map_template/rescue_base/base) -"db" = ( -/obj/effect/floor_decal/corner/blue{ - dir = 6 - }, -/turf/unsimulated/floor{ - icon = 'icons/turf/flooring/tiles.dmi'; - icon_state = "dark" - }, -/area/map_template/rescue_base/base) -"dc" = ( -/obj/machinery/door/airlock/centcom{ - name = "Medical" - }, -/turf/unsimulated/floor{ - icon = 'icons/turf/flooring/tiles.dmi'; - icon_state = "monotiledark" - }, -/area/map_template/rescue_base/base) -"dj" = ( -/obj/machinery/door/airlock/centcom{ - autoset_access = 0; - name = "Modular Weaponry"; - req_access = list(103) - }, -/turf/unsimulated/floor{ - icon = 'icons/turf/flooring/tiles.dmi'; - icon_state = "monotiledark" - }, -/area/map_template/rescue_base/base) -"dk" = ( -/obj/effect/floor_decal/corner/red/border{ - dir = 1 - }, -/turf/unsimulated/floor{ - icon = 'icons/turf/flooring/tiles.dmi'; - icon_state = "monotiledark" - }, -/area/map_template/rescue_base/base) -"dn" = ( -/obj/effect/floor_decal/corner/blue{ - dir = 9 - }, -/turf/unsimulated/floor{ - icon = 'icons/turf/flooring/tiles.dmi'; - icon_state = "dark" - }, -/area/map_template/rescue_base/base) -"dx" = ( -/obj/structure/bed/chair/comfy/captain{ - dir = 1 - }, -/turf/unsimulated/floor{ - icon = 'icons/turf/flooring/tiles.dmi'; - icon_state = "dark" - }, -/area/map_template/rescue_base/base) -"dA" = ( -/obj/structure/table/glass, -/obj/item/book/manual/military_law, -/obj/effect/floor_decal/corner/blue/three_quarters{ - dir = 4 - }, -/turf/unsimulated/floor{ - icon = 'icons/turf/flooring/tiles.dmi'; - icon_state = "dark" - }, -/area/map_template/rescue_base/base) -"dB" = ( -/obj/structure/noticeboard{ - pixel_x = 32 - }, -/turf/unsimulated/floor{ - icon = 'icons/turf/flooring/tiles.dmi'; - icon_state = "dark" - }, -/area/map_template/rescue_base/base) -"dC" = ( -/obj/structure/table/reinforced, -/obj/item/device/megaphone, -/obj/item/device/megaphone, -/obj/item/device/megaphone, -/obj/item/device/megaphone, -/obj/item/device/megaphone, -/obj/item/device/megaphone, -/turf/unsimulated/floor{ - icon = 'icons/turf/flooring/tiles.dmi'; - icon_state = "reinforced" - }, -/area/map_template/rescue_base/base) -"dH" = ( -/obj/effect/floor_decal/corner/blue{ - dir = 6 - }, -/obj/machinery/recharger/wallcharger{ - dir = 1; - pixel_y = -22 - }, -/turf/unsimulated/floor{ - icon = 'icons/turf/flooring/tiles.dmi'; - icon_state = "dark" - }, -/area/map_template/rescue_base/base) -"dI" = ( -/obj/structure/table/rack, -/obj/item/stock_parts/circuitboard/borgupload, -/obj/item/stock_parts/circuitboard/aiupload{ - pixel_x = -3; - pixel_y = -3 - }, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/unsimulated/floor{ - icon = 'icons/turf/flooring/tiles.dmi'; - icon_state = "monotiledark" - }, -/area/map_template/rescue_base/base) -"dM" = ( -/obj/structure/table/rack, -/obj/item/gun/projectile/automatic/sec_smg, -/obj/item/gun/projectile/automatic/sec_smg, -/obj/item/gun/projectile/automatic/sec_smg, -/obj/effect/floor_decal/industrial/outline/red, -/turf/unsimulated/floor{ - icon = 'icons/turf/flooring/tiles.dmi'; - icon_state = "monotiledark" - }, -/area/map_template/rescue_base/base) -"dN" = ( -/obj/structure/table/reinforced, -/obj/item/device/paicard, -/obj/item/device/paicard, -/obj/item/device/paicard, -/obj/item/device/paicard, -/obj/item/device/paicard, -/obj/item/device/paicard, -/turf/unsimulated/floor{ - icon = 'icons/turf/flooring/tiles.dmi'; - icon_state = "reinforced" - }, -/area/map_template/rescue_base/base) -"dP" = ( -/obj/structure/table/rack, -/obj/item/ammo_magazine/smg_top/rubber, -/obj/item/ammo_magazine/smg_top/rubber, -/obj/item/ammo_magazine/smg_top/rubber, -/obj/item/ammo_magazine/smg_top/rubber, -/obj/item/ammo_magazine/smg_top/rubber, -/obj/item/ammo_magazine/smg_top/rubber, -/obj/item/ammo_magazine/smg_top/rubber, -/obj/item/ammo_magazine/smg_top/rubber, -/obj/item/ammo_magazine/smg_top/rubber, -/obj/effect/floor_decal/industrial/outline/red, -/turf/unsimulated/floor{ - icon = 'icons/turf/flooring/tiles.dmi'; - icon_state = "monotiledark" - }, -/area/map_template/rescue_base/base) -"dQ" = ( -/obj/structure/table/reinforced, -/obj/item/modular_computer/tablet/lease/preset/command, -/obj/item/modular_computer/tablet/lease/preset/command, -/obj/item/modular_computer/tablet/lease/preset/command, -/obj/item/modular_computer/tablet/lease/preset/command, -/obj/item/modular_computer/tablet/lease/preset/command, -/obj/item/modular_computer/tablet/lease/preset/command, -/turf/unsimulated/floor{ - icon = 'icons/turf/flooring/tiles.dmi'; - icon_state = "reinforced" - }, -/area/map_template/rescue_base/base) -"dY" = ( -/obj/structure/table/rack, -/obj/item/ammo_magazine/smg_top, -/obj/item/ammo_magazine/smg_top, -/obj/item/ammo_magazine/smg_top, -/obj/item/ammo_magazine/smg_top, -/obj/item/ammo_magazine/smg_top, -/obj/item/ammo_magazine/smg_top, -/obj/item/ammo_magazine/smg_top, -/obj/item/ammo_magazine/smg_top, -/obj/item/ammo_magazine/smg_top, -/obj/item/ammo_magazine/smg_top, -/obj/effect/floor_decal/industrial/outline/red, -/turf/unsimulated/floor{ - icon = 'icons/turf/flooring/tiles.dmi'; - icon_state = "monotiledark" - }, -/area/map_template/rescue_base/base) -"dZ" = ( -/obj/structure/table/rack, -/obj/item/clothing/accessory/storage/white_vest, -/obj/item/clothing/accessory/storage/white_vest, -/obj/item/clothing/accessory/storage/white_vest, -/obj/item/clothing/accessory/storage/white_vest, -/obj/item/clothing/accessory/storage/white_vest, -/obj/item/clothing/accessory/storage/white_vest, -/turf/unsimulated/floor{ - icon = 'icons/turf/flooring/tiles.dmi'; - icon_state = "reinforced" - }, -/area/map_template/rescue_base/base) -"ec" = ( -/turf/unsimulated/floor{ - icon = 'icons/turf/flooring/tiles.dmi'; - icon_state = "reinforced" - }, -/area/map_template/rescue_base/base) -"ed" = ( -/obj/effect/floor_decal/corner/red/border{ - dir = 8 - }, -/turf/unsimulated/floor{ - icon = 'icons/turf/flooring/tiles.dmi'; - icon_state = "monotiledark" - }, -/area/map_template/rescue_base/base) -"ee" = ( -/obj/effect/floor_decal/corner/blue{ - dir = 9 - }, -/obj/machinery/recharger/wallcharger{ - dir = 1; - pixel_y = -22 - }, -/turf/unsimulated/floor{ - icon = 'icons/turf/flooring/tiles.dmi'; - icon_state = "dark" - }, -/area/map_template/rescue_base/base) -"el" = ( -/obj/structure/reagent_dispensers/water_cooler, -/obj/effect/floor_decal/spline/fancy/black, -/turf/unsimulated/floor{ - icon = 'icons/turf/flooring/tiles.dmi'; - icon_state = "monotiledark" - }, -/area/map_template/rescue_base/base) -"en" = ( -/turf/unsimulated/floor{ - icon = 'icons/turf/flooring/tiles.dmi'; - icon_state = "dark" - }, -/area/map_template/rescue_base/base) -"eo" = ( -/obj/structure/table/rack, -/obj/item/clothing/accessory/storage/brown_vest, -/obj/item/clothing/accessory/storage/brown_vest, -/obj/item/clothing/accessory/storage/brown_vest, -/obj/item/clothing/accessory/storage/brown_vest, -/obj/item/clothing/accessory/storage/brown_vest, -/obj/item/clothing/accessory/storage/brown_vest, -/turf/unsimulated/floor{ - icon = 'icons/turf/flooring/tiles.dmi'; - icon_state = "reinforced" - }, -/area/map_template/rescue_base/base) -"ep" = ( -/obj/structure/table/rack, -/obj/item/clothing/accessory/storage/holster/thigh, -/obj/item/clothing/accessory/storage/holster/thigh, -/obj/item/clothing/accessory/storage/holster/thigh, -/obj/item/clothing/accessory/storage/holster/thigh, -/obj/item/clothing/accessory/storage/holster/thigh, -/obj/item/clothing/accessory/storage/holster/thigh, -/obj/item/device/radio/intercom/specops{ - dir = 1; - pixel_y = -22 - }, -/turf/unsimulated/floor{ - icon = 'icons/turf/flooring/tiles.dmi'; - icon_state = "reinforced" - }, -/area/map_template/rescue_base/base) -"eq" = ( -/obj/effect/floor_decal/corner/red/border, -/turf/unsimulated/floor{ - icon = 'icons/turf/flooring/tiles.dmi'; - icon_state = "monotiledark" - }, -/area/map_template/rescue_base/base) -"eu" = ( -/obj/structure/table/rack, -/obj/item/storage/box/teargas, -/obj/item/storage/box/teargas, -/obj/item/storage/box/emps, -/obj/item/storage/box/emps, -/obj/item/storage/box/frags, -/obj/effect/floor_decal/industrial/outline/red, -/turf/unsimulated/floor{ - icon = 'icons/turf/flooring/tiles.dmi'; - icon_state = "monotiledark" - }, -/area/map_template/rescue_base/base) -"ey" = ( -/obj/structure/table/standard{ - name = "plastic table frame" - }, -/obj/item/storage/box/cups, -/obj/effect/floor_decal/spline/fancy/black, -/turf/unsimulated/floor{ - icon = 'icons/turf/flooring/tiles.dmi'; - icon_state = "monotiledark" - }, -/area/map_template/rescue_base/base) -"ez" = ( -/obj/structure/closet/emcloset, -/obj/effect/floor_decal/industrial/outline/grey, -/obj/effect/floor_decal/spline/fancy/black, -/turf/unsimulated/floor{ - icon = 'icons/turf/flooring/tiles.dmi'; - icon_state = "monotiledark" - }, -/area/map_template/rescue_base/base) -"eA" = ( -/obj/machinery/door/airlock/centcom{ - autoset_access = 0; - name = "Atlantis Bridge"; - req_access = list(101) - }, -/turf/unsimulated/floor{ - icon = 'icons/turf/flooring/tiles.dmi'; - icon_state = "monotiledark" - }, -/area/map_template/rescue_base/base) -"eB" = ( -/obj/structure/table/glass, -/obj/item/paper_bin{ - pixel_x = -3; - pixel_y = 7 - }, -/obj/item/pen, -/obj/item/pen, -/obj/item/pen{ - pixel_x = 4; - pixel_y = 4 - }, -/obj/item/pen/multi, -/obj/effect/floor_decal/corner/blue{ - dir = 5 - }, -/obj/effect/floor_decal/corner/blue{ - dir = 10 - }, -/turf/unsimulated/floor{ - icon = 'icons/turf/flooring/tiles.dmi'; - icon_state = "dark" - }, -/area/map_template/rescue_base/base) -"eC" = ( -/obj/structure/table/glass, -/obj/machinery/photocopier/faxmachine{ - department = "Atlantis - Bridge" - }, -/obj/effect/floor_decal/corner/blue{ - dir = 5 - }, -/obj/effect/floor_decal/corner/blue{ - dir = 10 - }, -/turf/unsimulated/floor{ - icon = 'icons/turf/flooring/tiles.dmi'; - icon_state = "dark" - }, -/area/map_template/rescue_base/base) -"eD" = ( -/obj/structure/table/glass, -/obj/structure/flora/pottedplant/deskleaf, -/obj/effect/floor_decal/corner/blue{ - dir = 5 - }, -/obj/effect/floor_decal/corner/blue{ - dir = 10 - }, -/turf/unsimulated/floor{ - icon = 'icons/turf/flooring/tiles.dmi'; - icon_state = "dark" - }, -/area/map_template/rescue_base/base) -"eE" = ( -/obj/structure/table/standard{ - name = "plastic table frame" - }, -/obj/effect/floor_decal/spline/fancy/black, -/turf/unsimulated/floor{ - icon = 'icons/turf/flooring/tiles.dmi'; - icon_state = "monotiledark" - }, -/area/map_template/rescue_base/base) -"eF" = ( -/obj/structure/table/standard{ - name = "plastic table frame" - }, -/obj/effect/floor_decal/spline/fancy/black, -/obj/item/storage/toolbox/mechanical{ - pixel_x = -2; - pixel_y = -1 - }, -/turf/unsimulated/floor{ - icon = 'icons/turf/flooring/tiles.dmi'; - icon_state = "monotiledark" - }, -/area/map_template/rescue_base/base) -"eG" = ( -/turf/unsimulated/wall{ - desc = "A secure airlock. Doesn't look like you can get through easily."; - dir = 4; - icon = 'icons/obj/doors/centcomm/door.dmi'; - icon_state = "closed"; - name = "Fire Control" - }, -/area/map_template/rescue_base/base) -"eK" = ( -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/door/airlock/external{ - frequency = 1331; - id_tag = "rescue_base_hatch" - }, -/turf/unsimulated/floor{ - icon_state = "asteroidfloor" - }, -/area/map_template/rescue_base/base) -"eL" = ( -/obj/effect/floor_decal/industrial/warning, -/turf/unsimulated/floor{ - icon = 'icons/turf/flooring/tiles.dmi'; - icon_state = "reinforced" - }, -/area/map_template/rescue_base/base) -"eO" = ( -/obj/effect/floor_decal/corner/blue/border{ - dir = 9 - }, -/turf/unsimulated/floor{ - icon = 'icons/turf/flooring/tiles.dmi'; - icon_state = "monotiledark" - }, -/area/map_template/rescue_base/base) -"eQ" = ( -/obj/machinery/mech_recharger, -/turf/unsimulated/floor{ - icon = 'icons/turf/flooring/tiles.dmi'; - icon_state = "reinforced" - }, -/area/map_template/rescue_base/base) -"eR" = ( -/obj/structure/table/glass, -/obj/item/reagent_containers/syringe/antiviral, -/obj/item/reagent_containers/syringe/antiviral, -/obj/item/stack/medical/advanced/bruise_pack, -/turf/simulated/floor/tiled/white, -/area/map_template/rescue_base/start) -"eS" = ( -/obj/machinery/door/airlock/centcom{ - name = "Brig" - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/map_template/rescue_base/start) -"eU" = ( -/obj/effect/paint/hull, -/turf/simulated/wall/titanium, -/area/map_template/rescue_base/start) -"eW" = ( -/obj/structure/grille, -/turf/unsimulated/floor{ - icon = 'icons/turf/flooring/tiles.dmi'; - icon_state = "reinforced" - }, -/area/map_template/rescue_base/base) -"eX" = ( -/obj/effect/floor_decal/corner/blue/border{ - dir = 1 - }, -/turf/unsimulated/floor{ - icon = 'icons/turf/flooring/tiles.dmi'; - icon_state = "monotiledark" - }, -/area/map_template/rescue_base/base) -"fc" = ( -/obj/effect/floor_decal/corner/blue/border{ - dir = 5 - }, -/turf/unsimulated/floor{ - icon = 'icons/turf/flooring/tiles.dmi'; - icon_state = "monotiledark" - }, -/area/map_template/rescue_base/base) -"fd" = ( -/obj/structure/handrail{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/map_template/rescue_base/start) -"fl" = ( -/obj/effect/floor_decal/spline/fancy/black{ - dir = 8 - }, -/turf/unsimulated/floor{ - icon = 'icons/turf/flooring/tiles.dmi'; - icon_state = "monotiledark" - }, -/area/map_template/rescue_base/base) -"fn" = ( -/turf/simulated/floor/tiled/dark, -/area/map_template/rescue_base/start) -"fq" = ( -/turf/unsimulated/floor{ - icon = 'icons/turf/flooring/tiles.dmi'; - icon_state = "monotiledark" - }, -/area/map_template/rescue_base/base) -"fu" = ( -/obj/structure/closet/secure_closet/medical1, -/turf/simulated/floor/tiled/white, -/area/map_template/rescue_base/start) -"fv" = ( -/obj/effect/floor_decal/spline/fancy/black{ - dir = 4 - }, -/turf/unsimulated/floor{ - icon = 'icons/turf/flooring/tiles.dmi'; - icon_state = "monotiledark" - }, -/area/map_template/rescue_base/base) -"fw" = ( -/obj/effect/floor_decal/corner/blue/border{ - dir = 8 - }, -/turf/unsimulated/floor{ - icon = 'icons/turf/flooring/tiles.dmi'; - icon_state = "monotiledark" - }, -/area/map_template/rescue_base/base) -"fz" = ( -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 5 - }, -/obj/structure/table/glass, -/obj/item/reagent_containers/glass/beaker/cryoxadone, -/obj/machinery/light{ - dir = 8 - }, -/obj/machinery/light{ - dir = 8 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/rescue_base/start) -"fA" = ( -/obj/structure/table/glass, -/turf/simulated/floor/tiled/white, -/area/map_template/rescue_base/start) -"fF" = ( -/obj/effect/floor_decal/corner/blue/border{ - dir = 4 - }, -/turf/unsimulated/floor{ - icon = 'icons/turf/flooring/tiles.dmi'; - icon_state = "monotiledark" - }, -/area/map_template/rescue_base/base) -"fG" = ( -/obj/structure/undies_wardrobe, -/turf/unsimulated/floor{ - color = "#543c30"; - icon = 'icons/turf/flooring/wood.dmi'; - icon_state = "wood" - }, -/area/map_template/rescue_base/base) -"fH" = ( -/obj/structure/bed/padded, -/obj/item/bedsheet/captain, -/turf/unsimulated/floor{ - color = "#543c30"; - icon = 'icons/turf/flooring/wood.dmi'; - icon_state = "wood" - }, -/area/map_template/rescue_base/base) -"fI" = ( -/obj/machinery/door/blast/regular{ - density = 0; - icon_state = "pdoor0"; - id_tag = "rescuebridge"; - name = "Cockpit Blast Shutters"; - opacity = 0 - }, -/obj/effect/wallframe_spawn/reinforced/titanium, -/obj/effect/paint/hull, -/turf/simulated/floor/plating, -/area/map_template/rescue_base/start) -"fM" = ( -/obj/structure/filingcabinet/chestdrawer, -/obj/item/folder, -/obj/item/folder/nt, -/obj/item/folder/red, -/obj/item/folder/white, -/obj/item/folder/yellow, -/obj/item/folder/blue, -/turf/unsimulated/floor{ - color = "#543c30"; - icon = 'icons/turf/flooring/wood.dmi'; - icon_state = "wood" - }, -/area/map_template/rescue_base/base) -"fN" = ( -/obj/structure/table/steel_reinforced, -/obj/machinery/button/blast_door{ - icon_state = "doorctrl0"; - id_tag = "rescuebridge"; - name = "Window Shutters Control"; - pixel_y = -4 - }, -/obj/effect/floor_decal/corner/blue/border{ - dir = 9 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/map_template/rescue_base/start) -"fQ" = ( -/obj/machinery/papershredder, -/obj/item/device/radio/intercom/specops{ - pixel_y = 22 - }, -/turf/unsimulated/floor{ - color = "#543c30"; - icon = 'icons/turf/flooring/wood.dmi'; - icon_state = "wood" - }, -/area/map_template/rescue_base/base) -"fU" = ( -/obj/structure/table/woodentable_reinforced/walnut/maple, -/obj/machinery/chemical_dispenser/bar_coffee/full{ - pixel_y = 3 - }, -/obj/structure/sign/double/solgovflag/left{ - pixel_y = 32 - }, -/turf/unsimulated/floor{ - color = "#543c30"; - icon = 'icons/turf/flooring/wood.dmi'; - icon_state = "wood" - }, -/area/map_template/rescue_base/base) -"fV" = ( -/obj/item/clothing/head/solgov/dress/fleet/command, -/obj/effect/floor_decal/corner/blue/border{ - dir = 1 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/map_template/rescue_base/start) -"fW" = ( -/obj/structure/table/woodentable_reinforced/walnut/maple, -/obj/item/reagent_containers/food/drinks/glass2/coffeecup/black, -/obj/structure/sign/double/solgovflag/right{ - pixel_y = 32 - }, -/turf/unsimulated/floor{ - color = "#543c30"; - icon = 'icons/turf/flooring/wood.dmi'; - icon_state = "wood" - }, -/area/map_template/rescue_base/base) -"fY" = ( -/obj/machinery/computer/shuttle_control/multi/rescue, -/obj/effect/floor_decal/corner/blue/border{ - dir = 1 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/map_template/rescue_base/start) -"gb" = ( -/obj/structure/table/steel_reinforced, -/obj/machinery/recharger{ - pixel_y = 4 - }, -/obj/machinery/light{ - dir = 4 - }, -/obj/effect/floor_decal/corner/blue/border{ - dir = 5 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/map_template/rescue_base/start) -"gc" = ( -/obj/structure/table/glass, -/obj/effect/floor_decal/spline/fancy/black{ - dir = 9 - }, -/obj/structure/sign/solgov{ - pixel_y = 32 - }, -/turf/unsimulated/floor{ - icon = 'icons/turf/flooring/tiles.dmi'; - icon_state = "monotiledark" - }, -/area/map_template/rescue_base/base) -"ge" = ( -/obj/item/reagent_containers/glass/bottle/antitoxin{ - pixel_x = -4; - pixel_y = 8 - }, -/obj/item/reagent_containers/glass/bottle/inaprovaline{ - pixel_x = 4; - pixel_y = 7 - }, -/obj/item/reagent_containers/syringe, -/obj/item/reagent_containers/syringe/antiviral, -/obj/item/reagent_containers/syringe/antiviral, -/obj/item/reagent_containers/ivbag/blood/OMinus, -/obj/item/reagent_containers/ivbag/blood/OMinus, -/obj/structure/closet/medical_wall{ - pixel_x = -32 - }, -/obj/machinery/portable_atmospherics/canister/oxygen/prechilled, -/obj/machinery/atmospherics/portables_connector, -/turf/simulated/floor/tiled/white, -/area/map_template/rescue_base/start) -"gg" = ( -/obj/structure/table/glass, -/obj/structure/noticeboard{ - pixel_y = 30 - }, -/obj/effect/floor_decal/spline/fancy/black{ - dir = 1 - }, -/turf/unsimulated/floor{ - icon = 'icons/turf/flooring/tiles.dmi'; - icon_state = "monotiledark" - }, -/area/map_template/rescue_base/base) -"gk" = ( -/obj/machinery/atmospherics/pipe/simple/visible{ - dir = 10 - }, -/turf/simulated/floor/plating, -/area/map_template/rescue_base/start) -"gl" = ( -/obj/structure/table/glass, -/obj/effect/floor_decal/spline/fancy/black{ - dir = 5 - }, -/obj/item/device/radio/intercom/specops{ - pixel_y = 22 - }, -/turf/unsimulated/floor{ - icon = 'icons/turf/flooring/tiles.dmi'; - icon_state = "monotiledark" - }, -/area/map_template/rescue_base/base) -"gm" = ( -/obj/machinery/papershredder, -/turf/unsimulated/floor{ - color = "#543c30"; - icon = 'icons/turf/flooring/wood.dmi'; - icon_state = "wood" - }, -/area/map_template/rescue_base/base) -"go" = ( -/obj/machinery/portable_atmospherics/canister/air, -/turf/simulated/floor/plating, -/area/map_template/rescue_base/start) -"gt" = ( -/obj/structure/table/steel_reinforced, -/obj/machinery/turretid, -/obj/effect/floor_decal/corner/blue/border{ - dir = 8 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/map_template/rescue_base/start) -"gu" = ( -/obj/structure/table/steel_reinforced, -/turf/unsimulated/floor{ - color = "#543c30"; - icon = 'icons/turf/flooring/wood.dmi'; - icon_state = "wood" - }, -/area/map_template/rescue_base/base) -"gv" = ( -/obj/structure/table/reinforced, -/obj/item/storage/box/trackimp, -/obj/item/storage/box/cdeathalarm_kit, -/turf/unsimulated/floor{ - dir = 1; - icon_state = "vault" - }, -/area/map_template/rescue_base/base) -"gB" = ( -/obj/structure/table/reinforced, -/obj/prefab/hand_teleporter, -/obj/item/device/radio/intercom/specops{ - pixel_y = 22 - }, -/turf/unsimulated/floor{ - dir = 1; - icon_state = "vault" - }, -/area/map_template/rescue_base/base) -"gC" = ( -/obj/structure/curtain/black, -/turf/unsimulated/floor{ - color = "#543c30"; - icon = 'icons/turf/flooring/wood.dmi'; - icon_state = "wood" - }, -/area/map_template/rescue_base/base) -"gD" = ( -/obj/machinery/door/airlock/centcom{ - autoset_access = 0; - name = "Commanding Officer's Office"; - req_access = list(109) - }, -/turf/unsimulated/floor{ - icon = 'icons/turf/flooring/tiles.dmi'; - icon_state = "monotiledark" - }, -/area/map_template/rescue_base/base) -"gE" = ( -/obj/machinery/recharger/wallcharger{ - pixel_x = 4; - pixel_y = 32 - }, -/turf/unsimulated/floor{ - icon = 'icons/turf/flooring/tiles.dmi'; - icon_state = "dark" - }, -/area/map_template/rescue_base/base) -"gG" = ( -/obj/machinery/light, -/turf/simulated/floor/tiled/dark, -/area/map_template/rescue_base/start) -"gK" = ( -/obj/structure/shuttle/engine/heater, -/obj/structure/window/reinforced/crescent{ - dir = 1 - }, -/obj/effect/paint/sun, -/turf/simulated/wall/titanium, -/area/map_template/rescue_base/start) -"gL" = ( -/obj/effect/paint/sun, -/turf/simulated/wall/titanium, -/area/map_template/rescue_base/start) -"gM" = ( -/obj/structure/bed/chair/office/dark{ - dir = 1 - }, -/turf/simulated/floor/tiled/dark, -/area/map_template/rescue_base/start) -"gQ" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 4 - }, -/turf/unsimulated/floor{ - icon = 'icons/turf/flooring/tiles.dmi'; - icon_state = "reinforced" - }, -/area/map_template/rescue_base/base) -"gR" = ( -/obj/structure/sign/double/solgovflag/left{ - pixel_y = 32 - }, -/turf/unsimulated/floor{ - icon = 'icons/turf/flooring/tiles.dmi'; - icon_state = "dark" - }, -/area/map_template/rescue_base/base) -"gS" = ( -/obj/structure/sign/double/solgovflag/right{ - pixel_y = 32 - }, -/turf/unsimulated/floor{ - icon = 'icons/turf/flooring/tiles.dmi'; - icon_state = "dark" - }, -/area/map_template/rescue_base/base) -"gX" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 1 - }, -/turf/unsimulated/floor{ - icon = 'icons/turf/flooring/tiles.dmi'; - icon_state = "reinforced" - }, -/area/map_template/rescue_base/base) -"gY" = ( -/obj/structure/bed/chair/shuttle, -/turf/simulated/floor/tiled/dark, -/area/map_template/rescue_base/start) -"gZ" = ( -/obj/machinery/door/airlock/centcom{ - name = "Squad Leader's Office" - }, -/turf/unsimulated/floor{ - icon = 'icons/turf/flooring/tiles.dmi'; - icon_state = "monotiledark" - }, -/area/map_template/rescue_base/base) -"ha" = ( -/obj/structure/table/reinforced, -/obj/item/aicard, -/obj/item/pinpointer/advpinpointer, -/turf/unsimulated/floor{ - dir = 1; - icon_state = "vault" - }, -/area/map_template/rescue_base/base) -"hb" = ( -/obj/structure/table/woodentable_reinforced/walnut/maple, -/obj/random/drinkbottle, -/obj/random/drinkbottle, -/obj/item/reagent_containers/food/drinks/glass2/rocks, -/obj/item/reagent_containers/food/drinks/glass2/rocks, -/turf/unsimulated/floor{ - color = "#543c30"; - icon = 'icons/turf/flooring/wood.dmi'; - icon_state = "wood" - }, -/area/map_template/rescue_base/base) -"hi" = ( -/turf/unsimulated/wall{ - desc = "That looks like it doesn't open easily."; - icon = 'icons/obj/doors/rapid_pdoor.dmi'; - icon_state = "pdoor1"; - name = "Dock Blast Door" - }, -/area/map_template/rescue_base/base) -"hl" = ( -/turf/space, -/area/space) -"hy" = ( -/obj/effect/floor_decal/corner/yellow/border{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/map_template/rescue_base/start) -"hM" = ( -/obj/machinery/tele_pad, -/obj/effect/floor_decal/industrial/hatch/yellow, -/turf/unsimulated/floor{ - icon = 'icons/turf/flooring/tiles.dmi'; - icon_state = "monotiledark" - }, -/area/map_template/rescue_base/base) -"ib" = ( -/obj/structure/table/reinforced, -/obj/item/device/radio/intercom/specops{ - pixel_y = 22 - }, -/turf/unsimulated/floor{ - icon_state = "plating"; - name = "plating" - }, -/area/map_template/rescue_base/base) -"ig" = ( -/obj/structure/table/rack, -/obj/item/clothing/accessory/storage/black_vest, -/obj/item/clothing/accessory/storage/black_vest, -/obj/item/clothing/accessory/storage/black_vest, -/obj/item/clothing/accessory/storage/black_vest, -/obj/item/clothing/accessory/storage/black_vest, -/obj/item/clothing/accessory/storage/black_vest, -/turf/unsimulated/floor{ - icon = 'icons/turf/flooring/tiles.dmi'; - icon_state = "reinforced" - }, -/area/map_template/rescue_base/base) -"ij" = ( -/obj/structure/table/woodentable_reinforced/ebony/walnut, -/obj/item/storage/fancy/cigar, -/obj/item/flame/lighter/zippo/brass, -/turf/unsimulated/floor{ - color = "#543c30"; - icon = 'icons/turf/flooring/wood.dmi'; - icon_state = "wood" - }, -/area/map_template/rescue_base/base) -"in" = ( -/obj/machinery/pipedispenser/disposal, -/turf/unsimulated/floor{ - dir = 1; - icon_state = "vault" - }, -/area/map_template/rescue_base/base) -"iv" = ( -/obj/item/stool, -/turf/simulated/floor/tiled/dark/monotile, -/area/map_template/rescue_base/start) -"iD" = ( -/obj/structure/closet/athletic_mixed, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/unsimulated/floor{ - icon = 'icons/turf/flooring/tiles.dmi'; - icon_state = "monotiledark" - }, -/area/map_template/rescue_base/base) -"iJ" = ( -/obj/item/stool, -/turf/unsimulated/floor{ - icon_state = "dark" - }, -/area/map_template/rescue_base/base) -"iO" = ( -/obj/structure/table/rack, -/obj/item/storage/backpack/ert/security, -/obj/item/storage/backpack/ert/security, -/obj/item/storage/belt/holster/security/tactical, -/obj/item/storage/belt/holster/security/tactical, -/turf/unsimulated/floor{ - dir = 1; - icon_state = "vault" - }, -/area/map_template/rescue_base/base) -"iS" = ( -/obj/effect/floor_decal/corner/blue/diagonal, -/obj/item/storage/box/sinpockets, -/obj/structure/closet/secure_closet/freezer/kitchen, -/obj/item/reagent_containers/food/condiment/enzyme, -/turf/unsimulated/floor{ - icon = 'icons/turf/flooring/tiles.dmi'; - icon_state = "dark" - }, -/area/map_template/rescue_base/base) -"iU" = ( -/obj/effect/floor_decal/corner/black/border{ - dir = 6 - }, -/turf/unsimulated/floor{ - icon = 'icons/turf/flooring/tiles.dmi'; - icon_state = "monotiledark" - }, -/area/map_template/rescue_base/base) -"iX" = ( -/obj/structure/bed, -/obj/item/bedsheet/orange, -/turf/simulated/floor/tiled/dark/monotile, -/area/map_template/rescue_base/start) -"ji" = ( -/obj/effect/floor_decal/industrial/loading{ - dir = 4 - }, -/turf/unsimulated/floor{ - icon = 'icons/turf/flooring/tiles.dmi'; - icon_state = "monotiledark" - }, -/area/map_template/rescue_base/base) -"jj" = ( -/obj/machinery/button/flasher{ - id_tag = "rescueflash"; - name = "Flasher"; - pixel_x = 27 - }, -/obj/machinery/light{ - dir = 4 - }, -/obj/item/device/flash, -/obj/structure/table/reinforced, -/obj/effect/floor_decal/corner/red/border{ - dir = 6 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/map_template/rescue_base/start) -"jk" = ( -/obj/structure/hygiene/toilet{ - dir = 4 - }, -/obj/item/taperoll/bog, -/turf/unsimulated/floor{ - icon_state = "freezerfloor" - }, -/area/map_template/rescue_base/base) -"jG" = ( -/obj/machinery/light{ - dir = 1 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/map_template/rescue_base/start) -"jM" = ( -/obj/machinery/tele_projector, -/turf/unsimulated/floor{ - icon = 'icons/turf/flooring/tiles.dmi'; - icon_state = "monotiledark" - }, -/area/map_template/rescue_base/base) -"jN" = ( -/obj/effect/floor_decal/corner/yellow/border{ - dir = 8 - }, -/obj/machinery/fabricator/hacked, -/turf/simulated/floor/tiled/dark/monotile, -/area/map_template/rescue_base/start) -"jR" = ( -/obj/structure/table/rack, -/obj/item/clothing/mask/gas, -/obj/item/clothing/mask/gas, -/obj/item/clothing/glasses/hud/health, -/obj/item/clothing/glasses/hud/health, -/obj/item/storage/box/gloves, -/obj/item/storage/box/gloves, -/obj/item/storage/box/masks, -/turf/unsimulated/floor{ - dir = 1; - icon_state = "vault" - }, -/area/map_template/rescue_base/base) -"jW" = ( -/obj/structure/window/reinforced/crescent{ - dir = 4 - }, -/obj/structure/window/reinforced/crescent, -/obj/structure/table/rack, -/obj/item/rig/ert/janitor, -/turf/unsimulated/floor{ - dir = 1; - icon_state = "vault" - }, -/area/map_template/rescue_base/base) -"jY" = ( -/obj/effect/floor_decal/industrial/warning/corner, -/obj/structure/sign/solgov{ - pixel_y = 32 - }, -/turf/unsimulated/floor{ - icon = 'icons/turf/flooring/tiles.dmi'; - icon_state = "reinforced" - }, -/area/map_template/rescue_base/base) -"kc" = ( -/obj/effect/floor_decal/corner/red/bordercorner{ - dir = 1 - }, -/turf/unsimulated/floor{ - icon = 'icons/turf/flooring/tiles.dmi'; - icon_state = "monotiledark" - }, -/area/map_template/rescue_base/base) -"ki" = ( -/obj/structure/table/reinforced, -/obj/machinery/cell_charger{ - pixel_y = 5 - }, -/turf/unsimulated/floor{ - icon_state = "plating"; - name = "plating" - }, -/area/map_template/rescue_base/base) -"kt" = ( -/obj/machinery/vending/engivend, -/turf/unsimulated/floor{ - dir = 1; - icon_state = "vault" - }, -/area/map_template/rescue_base/base) -"ku" = ( -/obj/structure/table/steel_reinforced, -/obj/item/device/radio/intercom/specops{ - dir = 8; - pixel_x = 22 - }, -/obj/effect/floor_decal/corner/blue/border{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/map_template/rescue_base/start) -"kC" = ( -/obj/effect/wallframe_spawn/reinforced/titanium, -/obj/machinery/door/blast/regular{ - density = 0; - dir = 4; - icon_state = "pdoor0"; - id_tag = "rescuebridge"; - name = "Blast Shutters"; - opacity = 0 - }, -/obj/effect/paint/hull, -/turf/simulated/floor/plating, -/area/map_template/rescue_base/start) -"kH" = ( -/obj/structure/table/rack, -/obj/item/clothing/suit/armor/pcarrier/medium/command, -/obj/item/clothing/head/helmet/solgov/command, -/obj/item/gun/energy/gun, -/turf/unsimulated/floor{ - dir = 1; - icon_state = "vault" - }, -/area/map_template/rescue_base/base) -"kI" = ( -/obj/machinery/atmospherics/pipe/manifold/visible{ - dir = 8 - }, -/turf/simulated/floor/plating, -/area/map_template/rescue_base/start) -"kQ" = ( -/obj/machinery/door/airlock/centcom{ - name = "Atlantis Bridge" - }, -/turf/unsimulated/floor{ - icon = 'icons/turf/flooring/tiles.dmi'; - icon_state = "monotiledark" - }, -/area/map_template/rescue_base/base) -"kT" = ( -/obj/machinery/shieldgen, -/turf/unsimulated/floor{ - dir = 1; - icon_state = "vault" - }, -/area/map_template/rescue_base/base) -"lg" = ( -/obj/machinery/computer/modular/preset/medical{ - dir = 4; - icon_state = "console" - }, -/obj/effect/floor_decal/corner/blue/border{ - dir = 8 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/map_template/rescue_base/start) -"li" = ( -/obj/structure/table/rack, -/obj/item/clothing/head/helmet/riot, -/obj/item/clothing/head/helmet/riot, -/obj/item/clothing/head/helmet/riot, -/obj/item/clothing/head/helmet/riot, -/obj/item/clothing/suit/armor/riot, -/obj/item/clothing/suit/armor/riot, -/obj/item/clothing/suit/armor/riot, -/obj/item/clothing/suit/armor/riot, -/obj/item/shield/riot, -/obj/item/shield/riot, -/obj/item/shield/riot, -/obj/item/shield/riot, -/turf/unsimulated/floor{ - dir = 8; - icon_state = "vault" - }, -/area/map_template/rescue_base/base) -"ll" = ( -/obj/machinery/hologram/holopad/longrange, -/turf/simulated/floor/tiled/dark, -/area/map_template/rescue_base/start) -"ln" = ( -/obj/machinery/computer/modular/preset/engineering{ - dir = 8; - icon_state = "console" - }, -/obj/item/device/radio/intercom/hailing{ - dir = 8; - pixel_x = 24 - }, -/obj/effect/floor_decal/corner/blue/border{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/map_template/rescue_base/start) -"lx" = ( -/obj/structure/table/rack, -/obj/item/gun/projectile/automatic/bullpup_rifle, -/obj/item/gun/projectile/automatic/bullpup_rifle, -/obj/effect/floor_decal/industrial/outline/red, -/turf/unsimulated/floor{ - icon = 'icons/turf/flooring/tiles.dmi'; - icon_state = "monotiledark" - }, -/area/map_template/rescue_base/base) -"lD" = ( -/obj/item/device/radio/intercom/specops{ - dir = 4; - pixel_x = -21 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/rescue_base/start) -"lM" = ( -/obj/machinery/door/blast/regular{ - density = 0; - icon_state = "pdoor0"; - id_tag = "rescuedock"; - name = "Blast Shutters"; - opacity = 0 - }, -/obj/effect/wallframe_spawn/reinforced/titanium, -/obj/effect/paint/hull, -/turf/simulated/floor/plating, -/area/map_template/rescue_base/start) -"lT" = ( -/obj/structure/handrail{ - dir = 4 - }, -/obj/item/device/radio/intercom/hailing{ - dir = 4; - pixel_x = -24 - }, -/obj/machinery/atmospherics/unary/vent_pump/high_volume/shuttle{ - dir = 4; - id_tag = "rescue_shuttle_pump" - }, -/turf/simulated/floor/plating, -/area/map_template/rescue_base/start) -"lY" = ( -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 4 - }, -/turf/unsimulated/floor{ - icon = 'icons/turf/flooring/tiles.dmi'; - icon_state = "reinforced" - }, -/area/map_template/rescue_base/base) -"mq" = ( -/obj/structure/closet{ - name = "insignias closet" - }, -/obj/item/clothing/accessory/solgov/department/security/fleet, -/obj/item/clothing/accessory/solgov/department/security/fleet, -/obj/item/clothing/accessory/solgov/department/security/fleet, -/obj/item/clothing/accessory/solgov/department/security/fleet, -/obj/item/clothing/head/beret/solgov/fleet/security, -/obj/item/clothing/head/beret/solgov/fleet/security, -/obj/item/clothing/head/beret/solgov/fleet/security, -/obj/item/clothing/head/beret/solgov/fleet/security, -/turf/unsimulated/floor{ - dir = 1; - icon_state = "vault" - }, -/area/map_template/rescue_base/base) -"mw" = ( -/obj/machinery/embedded_controller/radio/simple_docking_controller{ - frequency = 1331; - id_tag = "rescue_base"; - pixel_x = 5; - pixel_y = -25 - }, -/obj/effect/floor_decal/corner/red/border{ - dir = 10 - }, -/turf/unsimulated/floor{ - icon = 'icons/turf/flooring/tiles.dmi'; - icon_state = "monotiledark" - }, -/area/map_template/rescue_base/base) -"mS" = ( -/obj/structure/table/standard{ - name = "plastic table frame" - }, -/obj/item/storage/box/cups, -/obj/effect/floor_decal/corner/red/border{ - dir = 5 - }, -/turf/unsimulated/floor{ - icon = 'icons/turf/flooring/tiles.dmi'; - icon_state = "monotiledark" - }, -/area/map_template/rescue_base/base) -"mT" = ( -/obj/machinery/light{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/rescue_base/start) -"mU" = ( -/obj/effect/floor_decal/corner/red/border, -/turf/simulated/floor/tiled/dark/monotile, -/area/map_template/rescue_base/start) -"mY" = ( -/obj/structure/bed/chair{ - dir = 1 - }, -/obj/item/device/radio/intercom/specops{ - dir = 1; - pixel_y = -22 - }, -/turf/unsimulated/floor{ - icon = 'icons/turf/flooring/tiles.dmi'; - icon_state = "dark" - }, -/area/map_template/rescue_base/base) -"nb" = ( -/obj/structure/table/woodentable{ - dir = 5 - }, -/obj/machinery/button/blast_door{ - id_tag = "heavyrescue"; - name = "Heavy Gear"; - pixel_x = -5; - pixel_y = 4 - }, -/turf/unsimulated/floor{ - icon_state = "cult"; - name = "plating" - }, -/area/map_template/rescue_base/base) -"nh" = ( -/obj/structure/closet{ - name = "emergency response team wardrobe" - }, -/obj/item/clothing/accessory/solgov/fleet_patch/fifth, -/obj/item/clothing/head/solgov/utility/fleet, -/obj/item/clothing/accessory/badge/solgov/tags, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/unsimulated/floor{ - icon = 'icons/turf/flooring/tiles.dmi'; - icon_state = "monotiledark" - }, -/area/map_template/rescue_base/base) -"nH" = ( -/obj/structure/table/rack, -/obj/item/gun/projectile/shotgun/pump/combat, -/obj/item/gun/projectile/shotgun/pump/combat, -/obj/effect/floor_decal/industrial/outline/red, -/turf/unsimulated/floor{ - icon = 'icons/turf/flooring/tiles.dmi'; - icon_state = "monotiledark" - }, -/area/map_template/rescue_base/base) -"nL" = ( -/obj/structure/table/reinforced, -/obj/item/paper_bin, -/obj/item/pen, -/obj/effect/floor_decal/spline/fancy/black{ - dir = 10 - }, -/turf/unsimulated/floor{ - icon = 'icons/turf/flooring/tiles.dmi'; - icon_state = "monotiledark" - }, -/area/map_template/rescue_base/base) -"nQ" = ( -/obj/structure/table/woodentable_reinforced/ebony/walnut, -/obj/item/reagent_containers/food/drinks/glass2/coffeecup/SCG, -/turf/unsimulated/floor{ - color = "#543c30"; - icon = 'icons/turf/flooring/wood.dmi'; - icon_state = "wood" - }, -/area/map_template/rescue_base/base) -"nR" = ( -/obj/structure/table/reinforced, -/obj/machinery/chemical_dispenser/bar_alc/full, -/obj/effect/floor_decal/corner/blue/diagonal, -/obj/machinery/vending/boozeomat{ - pixel_y = 32 - }, -/turf/unsimulated/floor{ - icon = 'icons/turf/flooring/tiles.dmi'; - icon_state = "dark" - }, -/area/map_template/rescue_base/base) -"nX" = ( -/obj/structure/table/rack, -/obj/item/device/lightreplacer, -/obj/item/device/lightreplacer, -/obj/effect/floor_decal/corner/blue/diagonal, -/turf/unsimulated/floor{ - icon = 'icons/turf/flooring/tiles.dmi'; - icon_state = "dark" - }, -/area/map_template/rescue_base/base) -"op" = ( -/obj/structure/table/rack, -/obj/item/gun/launcher/grenade, -/obj/effect/floor_decal/industrial/outline/red, -/turf/unsimulated/floor{ - icon = 'icons/turf/flooring/tiles.dmi'; - icon_state = "monotiledark" - }, -/area/map_template/rescue_base/base) -"oq" = ( -/obj/machinery/optable, -/turf/simulated/floor/tiled/white, -/area/map_template/rescue_base/start) -"ou" = ( -/obj/effect/floor_decal/corner/black/border{ - dir = 10 - }, -/turf/unsimulated/floor{ - icon = 'icons/turf/flooring/tiles.dmi'; - icon_state = "monotiledark" - }, -/area/map_template/rescue_base/base) -"ow" = ( -/obj/structure/table/rack, -/obj/item/gun/energy/ionrifle, -/obj/item/gun/energy/ionrifle, -/turf/unsimulated/floor{ - dir = 1; - icon_state = "vault" - }, -/area/map_template/rescue_base/base) -"oB" = ( -/obj/machinery/light{ - dir = 8 - }, -/obj/machinery/recharge_station, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/floor/plating, -/area/map_template/rescue_base/start) -"oC" = ( -/obj/structure/table/woodentable_reinforced/ebony/walnut, -/obj/item/reagent_containers/food/drinks/flask{ - pixel_x = 8 - }, -/obj/item/clothing/mask/smokable/cigarette/cigar, -/turf/unsimulated/floor{ - color = "#543c30"; - icon = 'icons/turf/flooring/wood.dmi'; - icon_state = "wood" - }, -/area/map_template/rescue_base/base) -"oE" = ( -/obj/effect/floor_decal/corner/blue/border{ - dir = 9 - }, -/turf/unsimulated/floor{ - icon = 'icons/turf/flooring/tiles.dmi'; - icon_state = "dark" - }, -/area/map_template/rescue_base/base) -"oL" = ( -/obj/machinery/door/airlock/centcom{ - autoset_access = 0; - name = "Modular Weaponry"; - req_access = list(103) - }, -/turf/unsimulated/floor{ - icon = 'icons/turf/flooring/tiles.dmi'; - icon_state = "dark" - }, -/area/map_template/rescue_base/base) -"oO" = ( -/turf/simulated/floor/tiled/dark/monotile, -/area/map_template/rescue_base/start) -"oR" = ( -/obj/structure/window/reinforced/crescent, -/obj/structure/table/rack, -/obj/item/rig_module/mounted/taser, -/obj/item/rig_module/mounted/taser, -/obj/item/rig_module/maneuvering_jets, -/obj/item/rig_module/maneuvering_jets, -/obj/item/rig_module/device/drill, -/obj/item/rig_module/device/drill, -/obj/item/rig_module/mounted/plasmacutter, -/obj/item/rig_module/mounted/plasmacutter, -/obj/item/rig_module/device/rcd, -/obj/item/rig_module/device/rcd, -/obj/item/rig_module/vision/meson, -/obj/item/rig_module/vision/meson, -/obj/structure/window/reinforced/crescent{ - dir = 8 - }, -/turf/unsimulated/floor{ - dir = 1; - icon_state = "vault" - }, -/area/map_template/rescue_base/base) -"oS" = ( -/obj/effect/floor_decal/industrial/hatch/yellow, -/obj/machinery/porta_turret/crescent, -/turf/unsimulated/floor{ - icon = 'icons/turf/flooring/tiles.dmi'; - icon_state = "reinforced" - }, -/area/map_template/rescue_base/base) -"oW" = ( -/obj/structure/table/rack, -/obj/item/storage/backpack/ert/commander, -/obj/item/storage/belt/holster/security/tactical, -/turf/unsimulated/floor{ - dir = 1; - icon_state = "vault" - }, -/area/map_template/rescue_base/base) -"oY" = ( -/obj/structure/bed/chair/comfy/blue{ - dir = 1 - }, -/turf/unsimulated/floor{ - color = "#543c30"; - icon = 'icons/turf/flooring/wood.dmi'; - icon_state = "wood" - }, -/area/map_template/rescue_base/base) -"oZ" = ( -/obj/machinery/door/airlock/centcom{ - name = "Storage" - }, -/turf/unsimulated/floor{ - icon = 'icons/turf/flooring/tiles.dmi'; - icon_state = "monotiledark" - }, -/area/map_template/rescue_base/base) -"pb" = ( -/obj/structure/table/rack, -/obj/item/storage/backpack/ert/medical, -/obj/item/storage/backpack/ert/medical, -/obj/item/storage/belt/medical, -/obj/item/storage/belt/medical, -/obj/item/storage/belt/medical/emt, -/obj/item/storage/belt/medical/emt, -/turf/unsimulated/floor{ - dir = 1; - icon_state = "vault" - }, -/area/map_template/rescue_base/base) -"pE" = ( -/obj/machinery/light{ - dir = 8 - }, -/obj/machinery/computer/prisoner{ - dir = 4; - name = "Implant Management" - }, -/obj/effect/floor_decal/corner/blue/border{ - dir = 10 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/map_template/rescue_base/start) -"pI" = ( -/obj/effect/wallframe_spawn/reinforced/titanium, -/turf/simulated/floor/plating, -/area/map_template/rescue_base/start) -"pM" = ( -/obj/machinery/door/airlock/external{ - frequency = 1331; - id_tag = "rescue_base_hatch"; - name = "Landing Pad" - }, -/turf/unsimulated/floor{ - dir = 8; - icon_state = "vault" - }, -/area/map_template/rescue_base/base) -"pW" = ( -/obj/effect/floor_decal/corner/black/border, -/turf/unsimulated/floor{ - icon = 'icons/turf/flooring/tiles.dmi'; - icon_state = "monotiledark" - }, -/area/map_template/rescue_base/base) -"pY" = ( -/obj/structure/table/rack, -/obj/item/clothing/mask/gas, -/obj/item/clothing/mask/gas, -/obj/item/clothing/glasses/night, -/obj/item/clothing/glasses/night, -/obj/item/clothing/glasses/tacgoggles, -/obj/item/clothing/glasses/tacgoggles, -/turf/unsimulated/floor{ - dir = 1; - icon_state = "vault" - }, -/area/map_template/rescue_base/base) -"qs" = ( -/obj/effect/floor_decal/industrial/warning, -/obj/structure/sign/solgov{ - pixel_y = 32 - }, -/turf/unsimulated/floor{ - icon = 'icons/turf/flooring/tiles.dmi'; - icon_state = "reinforced" - }, -/area/map_template/rescue_base/base) -"qw" = ( -/obj/structure/iv_drip, -/turf/unsimulated/floor{ - dir = 1; - icon_state = "vault" - }, -/area/map_template/rescue_base/base) -"qE" = ( -/obj/structure/table/rack, -/obj/effect/floor_decal/corner/red/border{ - dir = 6 - }, -/turf/simulated/floor/tiled/dark, -/area/map_template/rescue_base/start) -"qF" = ( -/obj/machinery/atmospherics/unary/tank/air{ - dir = 8 - }, -/obj/effect/floor_decal/corner/black/border{ - dir = 5 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/map_template/rescue_base/start) -"qG" = ( -/obj/machinery/shieldwallgen, -/turf/simulated/floor/plating, -/area/map_template/rescue_base/start) -"qN" = ( -/obj/item/device/radio/intercom/specops{ - pixel_y = 22 - }, -/obj/item/device/radio/intercom/specops{ - pixel_y = 22 - }, -/obj/effect/floor_decal/corner/red/border{ - dir = 1 - }, -/turf/unsimulated/floor{ - icon = 'icons/turf/flooring/tiles.dmi'; - icon_state = "monotiledark" - }, -/area/map_template/rescue_base/base) -"rg" = ( -/obj/structure/closet{ - name = "insignias closet" - }, -/obj/item/clothing/accessory/solgov/department/medical/fleet, -/obj/item/clothing/accessory/solgov/department/medical/fleet, -/obj/item/clothing/accessory/solgov/department/medical/fleet, -/obj/item/clothing/accessory/solgov/department/medical/fleet, -/obj/item/clothing/head/beret/solgov/fleet/medical, -/obj/item/clothing/head/beret/solgov/fleet/medical, -/obj/item/clothing/head/beret/solgov/fleet/medical, -/obj/item/clothing/head/beret/solgov/fleet/medical, -/turf/unsimulated/floor{ - icon_state = "dark" - }, -/area/map_template/rescue_base/base) -"rl" = ( -/obj/machinery/vending/assist, -/turf/unsimulated/floor{ - dir = 1; - icon_state = "vault" - }, -/area/map_template/rescue_base/base) -"rt" = ( -/obj/effect/floor_decal/industrial/loading{ - dir = 1 - }, -/turf/unsimulated/floor{ - icon = 'icons/turf/flooring/tiles.dmi'; - icon_state = "monotiledark" - }, -/area/map_template/rescue_base/base) -"ru" = ( -/obj/machinery/door/airlock/centcom{ - name = "Cell 1" - }, -/turf/unsimulated/floor{ - icon_state = "dark" - }, -/area/map_template/rescue_base/base) -"rv" = ( -/obj/structure/hygiene/shower{ - dir = 4 - }, -/obj/item/soap, -/turf/unsimulated/floor{ - icon_state = "freezerfloor" - }, -/area/map_template/rescue_base/base) -"rA" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 5 - }, -/turf/unsimulated/floor{ - icon = 'icons/turf/flooring/tiles.dmi'; - icon_state = "reinforced" - }, -/area/map_template/rescue_base/base) -"rC" = ( -/obj/structure/table/rack, -/obj/item/storage/box/flashbangs, -/obj/item/storage/box/teargas, -/obj/item/storage/box/handcuffs, -/obj/item/melee/baton/loaded, -/turf/unsimulated/floor{ - dir = 1; - icon_state = "vault" - }, -/area/map_template/rescue_base/base) -"rK" = ( -/obj/structure/table/rack, -/obj/item/clothing/head/beret/centcom/captain, -/obj/item/storage/secure/briefcase, -/turf/unsimulated/floor{ - color = "#543c30"; - icon = 'icons/turf/flooring/wood.dmi'; - icon_state = "wood" - }, -/area/map_template/rescue_base/base) -"rL" = ( -/obj/effect/floor_decal/corner/blue/border, -/turf/unsimulated/floor{ - icon = 'icons/turf/flooring/tiles.dmi'; - icon_state = "monotiledark" - }, -/area/map_template/rescue_base/base) -"rW" = ( -/obj/structure/closet/emcloset, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/unsimulated/floor{ - icon = 'icons/turf/flooring/tiles.dmi'; - icon_state = "monotiledark" - }, -/area/map_template/rescue_base/base) -"sg" = ( -/obj/machinery/portable_atmospherics/canister/air, -/turf/unsimulated/floor{ - dir = 1; - icon_state = "vault" - }, -/area/map_template/rescue_base/base) -"si" = ( -/obj/structure/table/rack, -/obj/item/gun/energy/gun, -/obj/item/gun/energy/gun, -/turf/unsimulated/floor{ - dir = 1; - icon_state = "vault" - }, -/area/map_template/rescue_base/base) -"sm" = ( -/obj/effect/floor_decal/corner/yellow/border, -/turf/simulated/floor/tiled/dark/monotile, -/area/map_template/rescue_base/start) -"sn" = ( -/obj/machinery/porta_turret, -/turf/simulated/floor/reinforced/airless, -/area/map_template/rescue_base/start) -"sI" = ( -/obj/structure/bed/padded, -/obj/item/device/radio/intercom/specops{ - pixel_y = 22 - }, -/obj/item/bedsheet/red, -/turf/unsimulated/floor{ - dir = 1; - icon_state = "vault" - }, -/area/map_template/rescue_base/base) -"sL" = ( -/turf/simulated/floor/plating, -/area/map_template/rescue_base/start) -"sO" = ( -/obj/item/storage/mirror{ - pixel_y = 32 - }, -/turf/unsimulated/floor{ - icon_state = "freezerfloor" - }, -/area/map_template/rescue_base/base) -"sQ" = ( -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 8 - }, -/turf/unsimulated/floor{ - icon = 'icons/turf/flooring/tiles.dmi'; - icon_state = "reinforced" - }, -/area/map_template/rescue_base/base) -"ta" = ( -/obj/structure/table/reinforced, -/obj/effect/floor_decal/corner/blue/diagonal, -/obj/item/storage/box/donkpockets{ - pixel_x = 3; - pixel_y = 3 - }, -/turf/unsimulated/floor{ - icon = 'icons/turf/flooring/tiles.dmi'; - icon_state = "dark" - }, -/area/map_template/rescue_base/base) -"th" = ( -/obj/item/device/radio/intercom/specops{ - dir = 8; - pixel_x = 22 - }, -/obj/structure/handrail{ - dir = 8 - }, -/obj/machinery/atmospherics/unary/vent_pump/high_volume/shuttle{ - dir = 8; - id_tag = "rescue_shuttle_pump" - }, -/turf/simulated/floor/plating, -/area/map_template/rescue_base/start) -"tu" = ( -/obj/structure/table/standard, -/obj/item/paper, -/obj/item/pen, -/turf/unsimulated/floor{ - icon_state = "dark" - }, -/area/map_template/rescue_base/base) -"tF" = ( -/obj/structure/table/reinforced, -/obj/machinery/cell_charger{ - pixel_y = 5 - }, -/turf/unsimulated/floor{ - dir = 1; - icon_state = "vault" - }, -/area/map_template/rescue_base/base) -"tS" = ( -/obj/machinery/door/airlock/centcom{ - name = "Detention" - }, -/turf/unsimulated/floor{ - icon = 'icons/turf/flooring/tiles.dmi'; - icon_state = "monotiledark" - }, -/area/map_template/rescue_base/base) -"tT" = ( -/obj/structure/table/reinforced, -/obj/item/stock_parts/circuitboard/smes, -/obj/item/stock_parts/circuitboard/smes, -/obj/item/stock_parts/smes_coil, -/obj/item/stock_parts/smes_coil, -/obj/item/stock_parts/smes_coil/super_capacity, -/obj/item/stock_parts/smes_coil/super_capacity, -/obj/item/stock_parts/smes_coil/super_io, -/obj/item/stock_parts/smes_coil/super_io, -/turf/unsimulated/floor{ - dir = 1; - icon_state = "vault" - }, -/area/map_template/rescue_base/base) -"tX" = ( -/obj/item/reagent_containers/spray/cleaner, -/obj/item/reagent_containers/spray/sterilizine, -/obj/structure/table/glass, -/turf/simulated/floor/tiled/white, -/area/map_template/rescue_base/start) -"uv" = ( -/obj/machinery/recharger/wallcharger{ - dir = 1; - pixel_y = -22 - }, -/turf/unsimulated/floor{ - icon = 'icons/turf/flooring/tiles.dmi'; - icon_state = "dark" - }, -/area/map_template/rescue_base/base) -"uB" = ( -/obj/structure/bed/chair{ - dir = 1 - }, -/turf/unsimulated/floor{ - icon = 'icons/turf/flooring/tiles.dmi'; - icon_state = "dark" - }, -/area/map_template/rescue_base/base) -"uE" = ( -/obj/machinery/flasher{ - id_tag = "rescueflash"; - pixel_x = 26; - pixel_y = 28 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/map_template/rescue_base/start) -"uI" = ( -/obj/structure/table/rack, -/obj/item/gun/energy/gun, -/obj/item/gun/energy/gun, -/obj/item/gun/energy/gun, -/obj/item/gun/energy/gun, -/turf/unsimulated/floor{ - dir = 1; - icon_state = "vault" - }, -/area/map_template/rescue_base/base) -"uL" = ( -/obj/structure/table/rack, -/obj/item/rig/ert/assetprotection, -/obj/item/rig/ert/assetprotection, -/obj/item/rig/ert/assetprotection, -/obj/item/rig/ert/assetprotection, -/obj/item/rig/ert/assetprotection, -/obj/item/rig/ert/assetprotection, -/obj/effect/floor_decal/industrial/outline/red, -/turf/unsimulated/floor{ - icon = 'icons/turf/flooring/tiles.dmi'; - icon_state = "monotiledark" - }, -/area/map_template/rescue_base/base) -"uN" = ( -/obj/effect/floor_decal/industrial/loading{ - dir = 8 - }, -/turf/unsimulated/floor{ - icon = 'icons/turf/flooring/tiles.dmi'; - icon_state = "monotiledark" - }, -/area/map_template/rescue_base/base) -"uQ" = ( -/obj/effect/floor_decal/corner/red/border{ - dir = 9 - }, -/turf/unsimulated/floor{ - icon = 'icons/turf/flooring/tiles.dmi'; - icon_state = "monotiledark" - }, -/area/map_template/rescue_base/base) -"uR" = ( -/obj/machinery/atmospherics/pipe/manifold4w/visible, -/turf/simulated/floor/plating, -/area/map_template/rescue_base/start) -"ve" = ( -/obj/effect/floor_decal/corner/black/border{ - dir = 4 - }, -/obj/item/device/radio/intercom/specops{ - dir = 8; - pixel_x = 22 - }, -/turf/unsimulated/floor{ - icon = 'icons/turf/flooring/tiles.dmi'; - icon_state = "monotiledark" - }, -/area/map_template/rescue_base/base) -"vk" = ( -/obj/machinery/recharger/wallcharger{ - dir = 8; - pixel_x = 23; - pixel_y = -3 - }, -/obj/effect/floor_decal/corner/red/border{ - dir = 4 - }, -/turf/unsimulated/floor{ - icon = 'icons/turf/flooring/tiles.dmi'; - icon_state = "monotiledark" - }, -/area/map_template/rescue_base/base) -"vn" = ( -/obj/structure/closet/secure_closet/freezer/fridge, -/obj/effect/floor_decal/corner/blue/diagonal, -/turf/unsimulated/floor{ - icon = 'icons/turf/flooring/tiles.dmi'; - icon_state = "dark" - }, -/area/map_template/rescue_base/base) -"vq" = ( -/obj/structure/table/glass, -/obj/item/clothing/mask/surgical, -/obj/item/clothing/gloves/latex, -/obj/machinery/light{ - dir = 8 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/rescue_base/start) -"vx" = ( -/obj/structure/bed/padded, -/obj/item/bedsheet/red, -/obj/item/device/radio/intercom/specops{ - pixel_y = 22 - }, -/turf/unsimulated/floor{ - icon = 'icons/turf/flooring/tiles.dmi'; - icon_state = "monotiledark" - }, -/area/map_template/rescue_base/base) -"vz" = ( -/obj/structure/table/woodentable_reinforced/ebony/walnut, -/obj/item/paper_bin{ - pixel_x = -3; - pixel_y = 7 - }, -/obj/item/pen/multi/cmd/co, -/turf/unsimulated/floor{ - color = "#543c30"; - icon = 'icons/turf/flooring/wood.dmi'; - icon_state = "wood" - }, -/area/map_template/rescue_base/base) -"vC" = ( -/obj/effect/floor_decal/corner/blue/border, -/turf/simulated/floor/tiled/dark/monotile, -/area/map_template/rescue_base/start) -"vI" = ( -/obj/structure/closet/secure_closet/chemical, -/turf/simulated/floor/tiled/white, -/area/map_template/rescue_base/start) -"vM" = ( -/obj/machinery/door/airlock/centcom{ - name = "Cell 2" - }, -/turf/unsimulated/floor{ - icon_state = "dark" - }, -/area/map_template/rescue_base/base) -"vN" = ( -/obj/machinery/portable_atmospherics/canister/oxygen, -/turf/unsimulated/floor{ - dir = 1; - icon_state = "vault" - }, -/area/map_template/rescue_base/base) -"wh" = ( -/obj/structure/table/rack, -/obj/item/storage/box/smokes, -/obj/item/storage/box/smokes, -/obj/item/storage/box/flashbangs, -/obj/effect/floor_decal/industrial/outline/red, -/turf/unsimulated/floor{ - icon = 'icons/turf/flooring/tiles.dmi'; - icon_state = "monotiledark" - }, -/area/map_template/rescue_base/base) -"wj" = ( -/obj/structure/table/rack, -/obj/item/rig/ert/medical, -/obj/structure/window/reinforced/crescent{ - dir = 1 - }, -/obj/structure/window/reinforced/crescent{ - dir = 8 - }, -/turf/unsimulated/floor{ - dir = 1; - icon_state = "vault" - }, -/area/map_template/rescue_base/base) -"wq" = ( -/obj/machinery/computer/modular/preset/security{ - dir = 8; - icon_state = "console" - }, -/obj/effect/floor_decal/corner/blue/border{ - dir = 6 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/map_template/rescue_base/start) -"ww" = ( -/obj/structure/table/rack, -/obj/item/gun/energy/gun/nuclear, -/obj/item/gun/energy/gun/nuclear, -/turf/unsimulated/floor{ - dir = 1; - icon_state = "vault" - }, -/area/map_template/rescue_base/base) -"wE" = ( -/obj/effect/floor_decal/corner/blue/border, -/turf/unsimulated/floor{ - icon = 'icons/turf/flooring/tiles.dmi'; - icon_state = "dark" - }, -/area/map_template/rescue_base/base) -"wF" = ( -/obj/machinery/atmospherics/unary/cryo_cell, -/turf/simulated/floor/tiled/white, -/area/map_template/rescue_base/start) -"wN" = ( -/obj/structure/sign/solgov, -/turf/unsimulated/wall, -/area/map_template/rescue_base/base) -"wO" = ( -/obj/structure/table/reinforced, -/obj/effect/floor_decal/corner/yellow/border{ - dir = 8 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/map_template/rescue_base/start) -"wU" = ( -/obj/structure/iv_drip, -/turf/simulated/floor/tiled/white, -/area/map_template/rescue_base/start) -"xa" = ( -/obj/machinery/door/airlock/centcom{ - name = "Processing" - }, -/turf/unsimulated/floor{ - icon = 'icons/turf/flooring/tiles.dmi'; - icon_state = "monotiledark" - }, -/area/map_template/rescue_base/base) -"xf" = ( -/obj/structure/table/reinforced, -/obj/item/taperoll/engineering, -/obj/item/taperoll/engineering, -/obj/item/taperoll/atmos, -/obj/item/taperoll/atmos, -/obj/item/device/multitool, -/obj/item/device/multitool, -/obj/item/tape_roll, -/obj/item/tape_roll, -/obj/item/tape_roll, -/obj/item/tape_roll, -/obj/item/cell/high, -/obj/item/cell/high, -/obj/item/cell/high, -/obj/item/cell/high, -/turf/unsimulated/floor{ - dir = 1; - icon_state = "vault" - }, -/area/map_template/rescue_base/base) -"xl" = ( -/obj/structure/table/rack, -/obj/item/ammo_magazine/box/machinegun, -/obj/item/ammo_magazine/box/machinegun, -/obj/item/ammo_magazine/box/machinegun, -/obj/item/ammo_magazine/box/machinegun, -/obj/effect/floor_decal/industrial/outline/red, -/turf/unsimulated/floor{ - icon = 'icons/turf/flooring/tiles.dmi'; - icon_state = "monotiledark" - }, -/area/map_template/rescue_base/base) -"xy" = ( -/obj/item/device/radio/intercom/specops{ - dir = 1; - pixel_y = -22 - }, -/obj/structure/table/rack, -/obj/item/tank/emergency/oxygen/double, -/obj/item/tank/emergency/oxygen/double, -/obj/effect/floor_decal/corner/black/border, -/turf/simulated/floor/tiled/dark/monotile, -/area/map_template/rescue_base/start) -"xz" = ( -/obj/machinery/door/airlock/centcom{ - name = "Flight Deck" - }, -/turf/simulated/floor/tiled/dark, -/area/map_template/rescue_base/start) -"xJ" = ( -/obj/structure/table/rack, -/obj/effect/floor_decal/corner/red/border{ - dir = 5 - }, -/turf/simulated/floor/tiled/dark, -/area/map_template/rescue_base/start) -"xL" = ( -/obj/machinery/button/blast_door{ - icon_state = "doorctrl0"; - id_tag = "rescueinfirm"; - name = "Window Shutters Control"; - pixel_x = 24; - pixel_y = -4 - }, -/obj/structure/table/glass, -/obj/item/storage/firstaid/surgery, -/turf/simulated/floor/tiled/white, -/area/map_template/rescue_base/start) -"xM" = ( -/obj/effect/floor_decal/corner/red/border{ - dir = 5 - }, -/turf/unsimulated/floor{ - icon = 'icons/turf/flooring/tiles.dmi'; - icon_state = "monotiledark" - }, -/area/map_template/rescue_base/base) -"ya" = ( -/turf/unsimulated/floor{ - icon_state = "plating"; - name = "plating" - }, -/area/map_template/rescue_base/base) -"yb" = ( -/obj/machinery/door/airlock/centcom{ - name = "Heavy Equipment" - }, -/obj/machinery/door/blast/regular{ - id_tag = "standardrescue"; - name = "Heavy Equipment" - }, -/turf/unsimulated/floor{ - icon = 'icons/turf/flooring/tiles.dmi'; - icon_state = "monotiledark" - }, -/area/map_template/rescue_base/base) -"yg" = ( -/obj/effect/floor_decal/corner/black/bordercee{ - dir = 4 - }, -/obj/structure/table/steel_reinforced, -/turf/unsimulated/floor{ - icon = 'icons/turf/flooring/tiles.dmi'; - icon_state = "monotiledark" - }, -/area/map_template/rescue_base/base) -"yh" = ( -/obj/effect/floor_decal/corner/blue/border{ - dir = 6 - }, -/obj/effect/landmark{ - name = "Response Team" - }, -/turf/unsimulated/floor{ - icon = 'icons/turf/flooring/tiles.dmi'; - icon_state = "dark" - }, -/area/map_template/rescue_base/base) -"yl" = ( -/obj/machinery/door/airlock/centcom{ - name = "EVA" - }, -/obj/machinery/door/blast/regular{ - id_tag = "standardrescue"; - name = "EVA" - }, -/turf/unsimulated/floor{ - icon = 'icons/turf/flooring/tiles.dmi'; - icon_state = "monotiledark" - }, -/area/map_template/rescue_base/base) -"yu" = ( -/obj/structure/table/reinforced, -/obj/item/roller, -/obj/item/roller, -/obj/item/roller, -/obj/item/roller, -/obj/item/roller, -/obj/item/roller, -/turf/unsimulated/floor{ - dir = 1; - icon_state = "vault" - }, -/area/map_template/rescue_base/base) -"yA" = ( -/obj/structure/table/reinforced, -/obj/item/storage/box/handcuffs, -/turf/unsimulated/floor{ - icon_state = "dark" - }, -/area/map_template/rescue_base/base) -"yD" = ( -/obj/structure/bed/padded, -/obj/item/bedsheet/red, -/turf/unsimulated/floor{ - dir = 1; - icon_state = "vault" - }, -/area/map_template/rescue_base/base) -"yE" = ( -/obj/machinery/button/blast_door{ - icon_state = "doorctrl0"; - id_tag = "rescuedock"; - name = "Window Shutters Control"; - pixel_x = 24; - pixel_y = -4 - }, -/obj/structure/handrail{ - dir = 8 - }, -/obj/machinery/atmospherics/unary/vent_pump/high_volume/shuttle{ - dir = 8; - id_tag = "rescue_shuttle_pump" - }, -/obj/machinery/atmospherics/unary/vent_pump/high_volume/shuttle{ - dir = 8; - id_tag = "rescue_shuttle_pump" - }, -/obj/machinery/embedded_controller/radio/airlock/docking_port{ - frequency = 1331; - id_tag = "rescue_shuttle"; - pixel_x = -8; - pixel_y = 25 - }, -/turf/simulated/floor/plating, -/area/map_template/rescue_base/start) -"yQ" = ( -/obj/structure/table/rack, -/obj/item/rig/ert/medical, -/obj/structure/window/reinforced/crescent{ - dir = 1 - }, -/turf/unsimulated/floor{ - dir = 1; - icon_state = "vault" - }, -/area/map_template/rescue_base/base) -"yY" = ( -/obj/structure/closet/crate/freezer/rations, -/turf/simulated/floor/plating, -/area/map_template/rescue_base/start) -"yZ" = ( -/obj/structure/window/reinforced/crescent, -/obj/structure/table/rack, -/obj/item/rig_module/mounted/taser, -/obj/item/rig_module/vision/nvg, -/obj/item/rig_module/device/flash, -/obj/structure/window/reinforced/crescent{ - dir = 4 - }, -/turf/unsimulated/floor{ - dir = 1; - icon_state = "vault" - }, -/area/map_template/rescue_base/base) -"zf" = ( -/obj/structure/bed/chair, -/obj/structure/bed/chair, -/turf/unsimulated/floor{ - icon = 'icons/turf/flooring/tiles.dmi'; - icon_state = "dark" - }, -/area/map_template/rescue_base/base) -"zl" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 8 - }, -/turf/unsimulated/floor{ - icon = 'icons/turf/flooring/tiles.dmi'; - icon_state = "reinforced" - }, -/area/map_template/rescue_base/base) -"zC" = ( -/obj/item/device/radio/intercom/specops{ - dir = 8; - pixel_x = 22 - }, -/obj/structure/bed/chair{ - dir = 8 - }, -/obj/effect/floor_decal/corner/red/border{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/map_template/rescue_base/start) -"zD" = ( -/obj/structure/reagent_dispensers/water_cooler, -/obj/effect/floor_decal/corner/red/border{ - dir = 9 - }, -/turf/unsimulated/floor{ - icon = 'icons/turf/flooring/tiles.dmi'; - icon_state = "monotiledark" - }, -/area/map_template/rescue_base/base) -"zJ" = ( -/obj/structure/table/rack, -/obj/item/storage/backpack/ert/engineer, -/obj/item/storage/backpack/ert/engineer, -/obj/item/storage/belt/utility/full, -/obj/item/storage/belt/utility/full, -/obj/item/clothing/gloves/insulated, -/obj/item/clothing/gloves/insulated, -/obj/item/clothing/gloves/insulated, -/obj/item/clothing/gloves/insulated, -/turf/unsimulated/floor{ - dir = 1; - icon_state = "vault" - }, -/area/map_template/rescue_base/base) -"zP" = ( -/obj/structure/flora/ausbushes/ppflowers, -/obj/structure/flora/ausbushes/stalkybush, -/turf/unsimulated/floor/grass, -/area/map_template/rescue_base/base) -"Al" = ( -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/rescue_base/start) -"Ar" = ( -/obj/structure/window/reinforced/crescent, -/obj/structure/table/rack, -/obj/item/rig/ert/engineer, -/obj/structure/window/reinforced/crescent{ - dir = 4 - }, -/turf/unsimulated/floor{ - dir = 1; - icon_state = "vault" - }, -/area/map_template/rescue_base/base) -"Az" = ( -/obj/structure/undies_wardrobe, -/turf/unsimulated/floor{ - dir = 1; - icon_state = "vault" - }, -/area/map_template/rescue_base/base) -"AA" = ( -/obj/machinery/mech_recharger, -/turf/unsimulated/floor{ - icon_state = "plating"; - name = "plating" - }, -/area/map_template/rescue_base/base) -"AB" = ( -/obj/machinery/door/airlock/centcom{ - name = "Command" - }, -/turf/unsimulated/floor{ - icon = 'icons/turf/flooring/tiles.dmi'; - icon_state = "monotiledark" - }, -/area/map_template/rescue_base/base) -"AF" = ( -/obj/effect/floor_decal/corner/blue/diagonal, -/obj/structure/closet/secure_closet/freezer/meat, -/turf/unsimulated/floor{ - icon = 'icons/turf/flooring/tiles.dmi'; - icon_state = "dark" - }, -/area/map_template/rescue_base/base) -"AK" = ( -/obj/structure/table/reinforced, -/obj/effect/floor_decal/corner/blue/diagonal, -/obj/item/reagent_containers/food/condiment/small/saltshaker{ - pixel_x = -3 - }, -/obj/item/reagent_containers/food/condiment/small/peppermill{ - pixel_x = 3 - }, -/turf/unsimulated/floor{ - icon = 'icons/turf/flooring/tiles.dmi'; - icon_state = "dark" - }, -/area/map_template/rescue_base/base) -"Bb" = ( -/obj/machinery/recharge_station, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/unsimulated/floor{ - icon = 'icons/turf/flooring/tiles.dmi'; - icon_state = "reinforced" - }, -/area/map_template/rescue_base/base) -"Bo" = ( -/obj/structure/table/woodentable_reinforced/ebony/walnut, -/obj/item/stamp/solgov, -/turf/unsimulated/floor{ - color = "#543c30"; - icon = 'icons/turf/flooring/wood.dmi'; - icon_state = "wood" - }, -/area/map_template/rescue_base/base) -"Bt" = ( -/obj/structure/table/reinforced, -/obj/effect/floor_decal/spline/fancy/black, -/turf/unsimulated/floor{ - icon = 'icons/turf/flooring/tiles.dmi'; - icon_state = "monotiledark" - }, -/area/map_template/rescue_base/base) -"Bu" = ( -/obj/structure/table/rack, -/obj/item/device/radio, -/obj/item/device/radio, -/obj/item/device/radio, -/obj/item/device/radio, -/obj/item/device/radio, -/obj/item/device/radio, -/obj/effect/floor_decal/corner/lightgrey/border{ - dir = 9 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/map_template/rescue_base/start) -"Bv" = ( -/obj/structure/table/rack, -/obj/item/device/radio/intercom/specops{ - dir = 8; - pixel_x = 22 - }, -/turf/unsimulated/floor{ - icon = 'icons/turf/flooring/tiles.dmi'; - icon_state = "reinforced" - }, -/area/map_template/rescue_base/base) -"BB" = ( -/obj/effect/floor_decal/corner/red/bordercorner, -/turf/unsimulated/floor{ - icon = 'icons/turf/flooring/tiles.dmi'; - icon_state = "monotiledark" - }, -/area/map_template/rescue_base/base) -"BO" = ( -/obj/structure/table/rack, -/obj/random/solgov, -/obj/random/solgov, -/turf/simulated/floor/plating, -/area/map_template/rescue_base/start) -"Cl" = ( -/obj/effect/floor_decal/corner/lightgrey/border{ - dir = 1 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/map_template/rescue_base/start) -"Cp" = ( -/obj/structure/closet/l3closet/general, -/obj/effect/floor_decal/corner/lightgrey/border{ - dir = 1 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/map_template/rescue_base/start) -"Cr" = ( -/obj/structure/table/rack, -/obj/item/gun/energy/gun/nuclear, -/obj/item/gun/energy/gun/nuclear, -/obj/item/gun/energy/gun/nuclear, -/obj/item/gun/energy/gun/nuclear, -/obj/effect/floor_decal/industrial/outline/red, -/turf/unsimulated/floor{ - icon = 'icons/turf/flooring/tiles.dmi'; - icon_state = "monotiledark" - }, -/area/map_template/rescue_base/base) -"Cs" = ( -/obj/structure/table/reinforced, -/obj/item/stack/material/glass{ - amount = 50 - }, -/obj/item/stack/material/glass{ - amount = 50 - }, -/obj/item/stack/material/glass{ - amount = 50 - }, -/obj/item/stack/material/glass{ - amount = 50 - }, -/obj/item/stack/material/steel{ - amount = 50; - pixel_x = 2; - pixel_y = 2 - }, -/obj/item/stack/material/steel{ - amount = 50; - pixel_x = 2; - pixel_y = 2 - }, -/obj/item/stack/material/steel{ - amount = 50; - pixel_x = 2; - pixel_y = 2 - }, -/obj/item/stack/material/steel{ - amount = 50; - pixel_x = 2; - pixel_y = 2 - }, -/obj/item/stack/material/plasteel{ - amount = 50 - }, -/obj/item/stack/material/plasteel{ - amount = 50 - }, -/obj/item/stack/material/plasteel{ - amount = 50 - }, -/obj/item/stack/material/plasteel{ - amount = 50 - }, -/obj/item/stack/material/glass/reinforced{ - amount = 50 - }, -/obj/item/stack/material/glass/reinforced{ - amount = 50 - }, -/obj/item/stack/material/glass/reinforced{ - amount = 50 - }, -/obj/item/stack/material/glass/reinforced{ - amount = 50 - }, -/obj/item/stack/material/plastic{ - amount = 50 - }, -/obj/item/stack/material/plastic{ - amount = 50 - }, -/obj/item/stack/material/plastic{ - amount = 50 - }, -/obj/item/stack/material/plastic{ - amount = 50 - }, -/obj/item/stack/material/glass/phoronrglass{ - amount = 20 - }, -/obj/item/stack/material/glass/phoronrglass{ - amount = 20 - }, -/obj/item/stack/material/glass/phoronrglass{ - amount = 20 - }, -/obj/item/stack/material/glass/phoronrglass{ - amount = 20 - }, -/turf/unsimulated/floor{ - dir = 1; - icon_state = "vault" - }, -/area/map_template/rescue_base/base) -"Ct" = ( -/obj/effect/floor_decal/corner/red/border, -/turf/simulated/floor/tiled/dark, -/area/map_template/rescue_base/start) -"Cx" = ( -/obj/structure/table/rack, -/obj/item/storage/box/ammo/stunshells, -/obj/item/storage/box/ammo/stunshells, -/obj/item/storage/box/ammo/beanbags, -/obj/item/storage/box/ammo/beanbags, -/obj/item/storage/box/ammo/shotgunammo, -/obj/item/storage/box/ammo/shotgunammo, -/obj/item/storage/box/ammo/shotgunshells, -/obj/item/storage/box/ammo/shotgunshells, -/obj/effect/floor_decal/industrial/outline/red, -/turf/unsimulated/floor{ - icon = 'icons/turf/flooring/tiles.dmi'; - icon_state = "monotiledark" - }, -/area/map_template/rescue_base/base) -"CA" = ( -/obj/effect/floor_decal/corner/blue/border{ - dir = 10 - }, -/turf/unsimulated/floor{ - icon = 'icons/turf/flooring/tiles.dmi'; - icon_state = "dark" - }, -/area/map_template/rescue_base/base) -"CE" = ( -/obj/machinery/atmospherics/pipe/manifold/visible{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/map_template/rescue_base/start) -"CN" = ( -/obj/structure/table/woodentable{ - dir = 5 - }, -/obj/item/device/radio/phone{ - desc = "Should anything ever go wrong..."; - frequency = 1345 - }, -/turf/unsimulated/floor{ - icon_state = "cult"; - name = "plating" - }, -/area/map_template/rescue_base/base) -"CR" = ( -/obj/structure/table/rack, -/obj/item/clothing/head/helmet/ablative, -/obj/item/clothing/head/helmet/ablative, -/obj/item/clothing/head/helmet/ablative, -/obj/item/clothing/head/helmet/ablative, -/obj/item/clothing/head/helmet/ablative, -/obj/item/clothing/head/helmet/ablative, -/obj/item/clothing/suit/armor/laserproof, -/obj/item/clothing/suit/armor/laserproof, -/obj/item/clothing/suit/armor/laserproof, -/obj/item/clothing/suit/armor/laserproof, -/obj/item/clothing/suit/armor/laserproof, -/obj/item/clothing/suit/armor/laserproof, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/unsimulated/floor{ - icon = 'icons/turf/flooring/tiles.dmi'; - icon_state = "monotiledark" - }, -/area/map_template/rescue_base/base) -"CS" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 9 - }, -/turf/unsimulated/floor{ - icon = 'icons/turf/flooring/tiles.dmi'; - icon_state = "reinforced" - }, -/area/map_template/rescue_base/base) -"CT" = ( -/obj/structure/table/rack, -/obj/item/plastique, -/obj/item/plastique, -/obj/item/plastique, -/obj/item/plastique, -/obj/item/plastique, -/obj/item/plastique, -/obj/item/plastique, -/obj/item/plastique, -/obj/item/plastique, -/obj/effect/floor_decal/industrial/outline/red, -/turf/unsimulated/floor{ - icon = 'icons/turf/flooring/tiles.dmi'; - icon_state = "monotiledark" - }, -/area/map_template/rescue_base/base) -"CU" = ( -/obj/item/soap, -/turf/unsimulated/floor{ - icon_state = "freezerfloor" - }, -/area/map_template/rescue_base/base) -"CX" = ( -/obj/machinery/door/airlock/centcom{ - name = "Stall" - }, -/turf/unsimulated/floor{ - icon_state = "freezerfloor" - }, -/area/map_template/rescue_base/base) -"Dk" = ( -/obj/machinery/light{ - dir = 4 - }, -/obj/structure/closet/bombclosetsecurity, -/obj/effect/floor_decal/corner/lightgrey/border{ - dir = 5 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/map_template/rescue_base/start) -"Dq" = ( -/obj/structure/table/reinforced, -/obj/machinery/cell_charger, -/obj/item/cell/hyper, -/turf/unsimulated/floor{ - dir = 1; - icon_state = "vault" - }, -/area/map_template/rescue_base/base) -"Dx" = ( -/obj/effect/floor_decal/corner/lightgrey/border, -/turf/simulated/floor/tiled/dark/monotile, -/area/map_template/rescue_base/start) -"DF" = ( -/obj/machinery/door/airlock/centcom{ - name = "Infirmary" - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/map_template/rescue_base/start) -"DI" = ( -/obj/structure/table/rack, -/obj/item/clothing/suit/armor/pcarrier/medium, -/obj/item/clothing/suit/armor/pcarrier/medium, -/obj/item/clothing/head/helmet, -/obj/item/clothing/head/helmet, -/turf/unsimulated/floor{ - dir = 1; - icon_state = "vault" - }, -/area/map_template/rescue_base/base) -"DR" = ( -/obj/machinery/floodlight, -/turf/unsimulated/floor{ - icon = 'icons/turf/flooring/tiles.dmi'; - icon_state = "monotiledark" - }, -/area/map_template/rescue_base/base) -"DU" = ( -/obj/structure/table/steel_reinforced, -/obj/item/device/assembly/mousetrap, -/turf/unsimulated/floor{ - icon = 'icons/turf/flooring/tiles.dmi'; - icon_state = "monotiledark" - }, -/area/map_template/rescue_base/base) -"Eb" = ( -/obj/structure/table/reinforced, -/turf/unsimulated/floor{ - icon_state = "plating"; - name = "plating" - }, -/area/map_template/rescue_base/base) -"Ee" = ( -/obj/structure/table/steel_reinforced, -/obj/item/stamp/solgov, -/turf/unsimulated/floor{ - color = "#543c30"; - icon = 'icons/turf/flooring/wood.dmi'; - icon_state = "wood" - }, -/area/map_template/rescue_base/base) -"Ei" = ( -/obj/structure/table/steel_reinforced, -/obj/item/device/taperecorder, -/turf/unsimulated/floor{ - icon = 'icons/turf/flooring/tiles.dmi'; - icon_state = "monotiledark" - }, -/area/map_template/rescue_base/base) -"El" = ( -/obj/structure/bed/chair{ - dir = 4 - }, -/obj/effect/floor_decal/corner/red/border{ - dir = 10 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/map_template/rescue_base/start) -"Em" = ( -/obj/structure/hygiene/sink{ - dir = 4; - pixel_x = 11 - }, -/turf/unsimulated/floor{ - icon_state = "freezerfloor" - }, -/area/map_template/rescue_base/base) -"En" = ( -/obj/effect/floor_decal/corner/black/bordercee{ - dir = 8 - }, -/obj/structure/table/steel_reinforced, -/turf/unsimulated/floor{ - icon = 'icons/turf/flooring/tiles.dmi'; - icon_state = "monotiledark" - }, -/area/map_template/rescue_base/base) -"Es" = ( -/obj/structure/shuttle/engine/propulsion, -/obj/effect/paint/sun, -/turf/simulated/wall/titanium, -/area/map_template/rescue_base/start) -"Et" = ( -/obj/structure/table/rack, -/obj/item/clothing/mask/gas, -/obj/item/clothing/glasses/tacgoggles, -/turf/unsimulated/floor{ - dir = 1; - icon_state = "vault" - }, -/area/map_template/rescue_base/base) -"EG" = ( -/obj/structure/table/reinforced, -/obj/item/reagent_containers/spray/cleaner, -/obj/item/reagent_containers/spray/cleaner, -/obj/item/reagent_containers/spray/sterilizine, -/obj/item/reagent_containers/spray/sterilizine, -/obj/item/storage/box/bloodpacks, -/obj/item/tape/medical, -/obj/item/tape/medical, -/obj/item/device/flashlight/pen, -/obj/item/device/flashlight/pen, -/turf/unsimulated/floor{ - dir = 1; - icon_state = "vault" - }, -/area/map_template/rescue_base/base) -"EI" = ( -/obj/machinery/atmospherics/pipe/manifold/visible, -/obj/machinery/meter, -/obj/effect/floor_decal/corner/black/border{ - dir = 1 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/map_template/rescue_base/start) -"EU" = ( -/obj/structure/table/rack, -/obj/item/rig/ert/security, -/obj/structure/window/reinforced/crescent{ - dir = 1 - }, -/turf/unsimulated/floor{ - dir = 1; - icon_state = "vault" - }, -/area/map_template/rescue_base/base) -"EV" = ( -/obj/structure/table/woodentable_reinforced/walnut/maple, -/obj/item/device/flashlight/lamp/green, -/turf/unsimulated/floor{ - color = "#543c30"; - icon = 'icons/turf/flooring/wood.dmi'; - icon_state = "wood" - }, -/area/map_template/rescue_base/base) -"Fj" = ( -/obj/structure/table/reinforced, -/turf/unsimulated/floor{ - icon = 'icons/turf/flooring/tiles.dmi'; - icon_state = "reinforced" - }, -/area/map_template/rescue_base/base) -"Fo" = ( -/obj/effect/floor_decal/corner/lightgrey/border{ - dir = 8 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/map_template/rescue_base/start) -"Fp" = ( -/obj/structure/bed/padded, -/obj/item/bedsheet/red, -/turf/unsimulated/floor{ - icon = 'icons/turf/flooring/tiles.dmi'; - icon_state = "monotiledark" - }, -/area/map_template/rescue_base/base) -"Ft" = ( -/obj/structure/table/steel_reinforced, -/obj/item/storage/firstaid/regular, -/turf/unsimulated/floor{ - icon = 'icons/turf/flooring/tiles.dmi'; - icon_state = "monotiledark" - }, -/area/map_template/rescue_base/base) -"FA" = ( -/obj/structure/table/steel_reinforced, -/obj/item/storage/firstaid/surgery, -/turf/unsimulated/floor{ - icon = 'icons/turf/flooring/tiles.dmi'; - icon_state = "monotiledark" - }, -/area/map_template/rescue_base/base) -"FB" = ( -/obj/machinery/reagentgrinder, -/obj/item/reagent_containers/glass/beaker/large, -/turf/unsimulated/floor{ - dir = 1; - icon_state = "vault" - }, -/area/map_template/rescue_base/base) -"FE" = ( -/obj/effect/floor_decal/corner/lightgrey/border{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/map_template/rescue_base/start) -"FI" = ( -/obj/structure/bookcase, -/obj/item/book/manual/military_law, -/obj/item/book/manual/sol_sop, -/obj/item/book/manual/solgov_law, -/turf/unsimulated/floor{ - color = "#543c30"; - icon = 'icons/turf/flooring/wood.dmi'; - icon_state = "wood" - }, -/area/map_template/rescue_base/base) -"FQ" = ( -/turf/unsimulated/wall{ - desc = "A secure airlock. Doesn't look like you can get through easily."; - dir = 4; - icon = 'icons/obj/doors/centcomm/door.dmi'; - icon_state = "closed"; - name = "Maintenance Tunnels" - }, -/area/map_template/rescue_base/base) -"Ga" = ( -/obj/structure/table/steel_reinforced, -/obj/item/bikehorn/rubberducky, -/turf/unsimulated/floor{ - icon = 'icons/turf/flooring/tiles.dmi'; - icon_state = "monotiledark" - }, -/area/map_template/rescue_base/base) -"Gd" = ( -/obj/effect/floor_decal/corner/blue/border{ - dir = 5 - }, -/obj/item/storage/mirror{ - pixel_x = 32 - }, -/turf/unsimulated/floor{ - icon = 'icons/turf/flooring/tiles.dmi'; - icon_state = "dark" - }, -/area/map_template/rescue_base/base) -"Gj" = ( -/obj/machinery/door/airlock/centcom{ - name = "Storage" - }, -/turf/simulated/floor/plating, -/area/map_template/rescue_base/start) -"Gl" = ( -/obj/structure/table/rack, -/obj/item/clothing/shoes/galoshes, -/obj/item/clothing/head/bio_hood/janitor, -/obj/item/clothing/suit/bio_suit/janitor, -/obj/item/clothing/glasses/science, -/obj/item/clothing/shoes/galoshes, -/obj/item/clothing/head/bio_hood/janitor, -/obj/item/clothing/suit/bio_suit/janitor, -/obj/item/clothing/glasses/science, -/obj/item/reagent_containers/spray/plantbgone, -/obj/item/reagent_containers/spray/plantbgone, -/obj/item/storage/box/lights/mixed, -/obj/item/storage/box/lights/mixed, -/obj/item/grenade/chem_grenade/cleaner, -/obj/item/grenade/chem_grenade/cleaner, -/obj/item/grenade/chem_grenade/cleaner, -/obj/effect/floor_decal/corner/blue/diagonal, -/turf/unsimulated/floor{ - icon = 'icons/turf/flooring/tiles.dmi'; - icon_state = "dark" - }, -/area/map_template/rescue_base/base) -"Gn" = ( -/obj/structure/table/rack, -/obj/effect/floor_decal/corner/red/border{ - dir = 9 - }, -/obj/machinery/light{ - dir = 8 - }, -/turf/simulated/floor/tiled/dark, -/area/map_template/rescue_base/start) -"GF" = ( -/obj/structure/table/reinforced, -/obj/item/device/camera, -/turf/unsimulated/floor{ - icon_state = "dark" - }, -/area/map_template/rescue_base/base) -"GG" = ( -/obj/machinery/portable_atmospherics/canister/oxygen, -/obj/effect/floor_decal/corner/black/border{ - dir = 10 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/map_template/rescue_base/start) -"GH" = ( -/obj/structure/hygiene/toilet{ - dir = 8 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/map_template/rescue_base/start) -"GI" = ( -/obj/machinery/door/airlock/centcom{ - name = "Galley" - }, -/turf/unsimulated/floor{ - icon = 'icons/turf/flooring/tiles.dmi'; - icon_state = "monotiledark" - }, -/area/map_template/rescue_base/base) -"GO" = ( -/obj/machinery/atmospherics/pipe/simple/visible, -/obj/effect/wallframe_spawn/reinforced/titanium, -/obj/effect/paint/hull, -/turf/simulated/floor/plating, -/area/map_template/rescue_base/start) -"GU" = ( -/obj/machinery/pipedispenser, -/obj/item/device/radio/intercom/specops{ - pixel_y = 22 - }, -/turf/unsimulated/floor{ - dir = 1; - icon_state = "vault" - }, -/area/map_template/rescue_base/base) -"Hf" = ( -/obj/machinery/vending/tool, -/turf/unsimulated/floor{ - dir = 1; - icon_state = "vault" - }, -/area/map_template/rescue_base/base) -"Hh" = ( -/obj/machinery/acting/changer, -/turf/unsimulated/floor{ - dir = 1; - icon_state = "vault" - }, -/area/map_template/rescue_base/base) -"Ht" = ( -/obj/machinery/portable_atmospherics/powered/pump/filled, -/turf/unsimulated/floor{ - dir = 1; - icon_state = "vault" - }, -/area/map_template/rescue_base/base) -"Hx" = ( -/obj/machinery/portable_atmospherics/canister/air, -/obj/effect/floor_decal/corner/yellow/border{ - dir = 6 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/map_template/rescue_base/start) -"HC" = ( -/obj/item/device/radio/intercom/specops{ - pixel_y = 22 - }, -/turf/unsimulated/floor{ - icon_state = "freezerfloor" - }, -/area/map_template/rescue_base/base) -"HE" = ( -/obj/machinery/door/airlock/centcom{ - name = "Passageway" - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/map_template/rescue_base/start) -"Ic" = ( -/obj/machinery/suit_storage_unit/standard_unit, -/obj/effect/floor_decal/corner/black/border{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/map_template/rescue_base/start) -"Ie" = ( -/obj/structure/closet, -/obj/item/device/flashlight/flare, -/obj/item/device/flashlight/flare, -/obj/item/device/flashlight/flare, -/obj/item/device/flashlight/flare, -/obj/item/device/flashlight/flare, -/obj/item/device/flashlight/flare, -/obj/item/device/flashlight, -/obj/item/device/flashlight, -/obj/item/device/flashlight, -/obj/item/device/flashlight, -/obj/item/device/flashlight, -/obj/item/device/flashlight, -/obj/effect/floor_decal/corner/lightgrey/border{ - dir = 8 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/map_template/rescue_base/start) -"Ix" = ( -/obj/item/device/radio/intercom/specops{ - dir = 8; - pixel_x = 22 - }, -/obj/structure/handrail{ - dir = 8 - }, -/obj/effect/floor_decal/corner/lightgrey/border{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/map_template/rescue_base/start) -"IJ" = ( -/obj/structure/table/woodentable{ - dir = 5 - }, -/obj/item/clothing/head/beret/solgov/marcom, -/turf/unsimulated/floor{ - icon_state = "cult"; - name = "plating" - }, -/area/map_template/rescue_base/base) -"IM" = ( -/obj/machinery/atmospherics/pipe/manifold/visible, -/obj/machinery/access_button{ - command = "cycle_interior"; - frequency = 1331; - master_tag = "rescue_shuttle"; - name = "interior access button"; - pixel_x = 25; - pixel_y = 25; - req_access = list("ACCESS_CENT_SPECOPS") - }, -/obj/effect/floor_decal/corner/black/border{ - dir = 1 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/map_template/rescue_base/start) -"IO" = ( -/obj/structure/closet{ - name = "insignias closet" - }, -/obj/item/clothing/accessory/solgov/department/engineering/fleet, -/obj/item/clothing/accessory/solgov/department/engineering/fleet, -/obj/item/clothing/accessory/solgov/department/engineering/fleet, -/obj/item/clothing/accessory/solgov/department/engineering/fleet, -/obj/item/clothing/head/beret/solgov/fleet/engineering, -/obj/item/clothing/head/beret/solgov/fleet/engineering, -/obj/item/clothing/head/beret/solgov/fleet/engineering, -/obj/item/clothing/head/beret/solgov/fleet/engineering, -/turf/unsimulated/floor{ - dir = 1; - icon_state = "vault" - }, -/area/map_template/rescue_base/base) -"IW" = ( -/obj/machinery/chemical_dispenser/ert, -/obj/item/reagent_containers/glass/beaker/large, -/turf/unsimulated/floor{ - dir = 1; - icon_state = "vault" - }, -/area/map_template/rescue_base/base) -"IX" = ( -/obj/structure/table/glass, -/obj/item/defibrillator/loaded, -/turf/simulated/floor/tiled/white, -/area/map_template/rescue_base/start) -"IY" = ( -/obj/machinery/bodyscanner{ - dir = 8 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/rescue_base/start) -"Jd" = ( -/obj/machinery/telecomms/allinone/ert, -/turf/simulated/floor/plating, -/area/map_template/rescue_base/start) -"Jg" = ( -/obj/structure/table/reinforced, -/obj/item/rcd_ammo, -/obj/item/rcd_ammo, -/obj/item/rcd_ammo, -/obj/item/rcd_ammo, -/obj/item/rcd_ammo, -/obj/item/rcd_ammo, -/obj/item/rcd_ammo, -/obj/item/rcd_ammo, -/obj/item/rcd_ammo, -/obj/item/rcd_ammo, -/obj/item/rcd_ammo, -/obj/item/rcd_ammo, -/obj/item/rcd, -/obj/item/rcd, -/obj/item/rcd, -/obj/item/rcd, -/turf/unsimulated/floor{ - dir = 1; - icon_state = "vault" - }, -/area/map_template/rescue_base/base) -"Ji" = ( -/obj/machinery/atmospherics/pipe/manifold4w/visible, -/obj/machinery/meter, -/turf/simulated/floor/plating, -/area/map_template/rescue_base/start) -"Jj" = ( -/obj/effect/paint/hull, -/obj/effect/wallframe_spawn/reinforced/titanium, -/obj/machinery/door/blast/regular{ - density = 0; - dir = 4; - icon_state = "pdoor0"; - id_tag = "rescueinfirm"; - name = "Blast Shutters"; - opacity = 0 - }, -/turf/simulated/floor/plating, -/area/map_template/rescue_base/start) -"Jk" = ( -/obj/structure/table/rack, -/obj/item/gun/projectile/automatic/l6_saw, -/obj/effect/floor_decal/industrial/outline/red, -/turf/unsimulated/floor{ - icon = 'icons/turf/flooring/tiles.dmi'; - icon_state = "monotiledark" - }, -/area/map_template/rescue_base/base) -"Js" = ( -/obj/machinery/portable_atmospherics/canister/air, -/obj/effect/floor_decal/corner/yellow/border{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/map_template/rescue_base/start) -"Jx" = ( -/obj/machinery/chem_master, -/turf/unsimulated/floor{ - dir = 1; - icon_state = "vault" - }, -/area/map_template/rescue_base/base) -"JI" = ( -/obj/effect/floor_decal/corner/blue/border, -/obj/effect/landmark{ - name = "Response Team" - }, -/turf/unsimulated/floor{ - icon = 'icons/turf/flooring/tiles.dmi'; - icon_state = "dark" - }, -/area/map_template/rescue_base/base) -"JK" = ( -/obj/machinery/vending/engineering, -/turf/unsimulated/wall, -/area/map_template/rescue_base/base) -"JU" = ( -/obj/structure/table/rack, -/obj/item/storage/box/handcuffs, -/obj/item/storage/box/handcuffs, -/obj/item/storage/box/teargas, -/obj/item/storage/box/teargas, -/obj/item/storage/box/flashbangs, -/obj/item/storage/box/flashbangs, -/obj/item/device/flash, -/obj/item/device/flash, -/obj/item/melee/baton/loaded, -/obj/item/melee/baton/loaded, -/obj/item/reagent_containers/spray/pepper, -/obj/item/reagent_containers/spray/pepper, -/obj/item/melee/telebaton, -/obj/item/melee/telebaton, -/obj/machinery/recharger/wallcharger{ - pixel_x = 4; - pixel_y = 32 - }, -/obj/item/taperoll/police, -/obj/item/taperoll/police, -/turf/unsimulated/floor{ - dir = 1; - icon_state = "vault" - }, -/area/map_template/rescue_base/base) -"Kg" = ( -/obj/structure/table/rack, -/obj/item/clothing/mask/gas/half, -/obj/item/clothing/mask/gas/half, -/obj/item/clothing/mask/gas/half, -/obj/item/clothing/mask/gas/half, -/obj/item/clothing/mask/gas/half, -/obj/item/clothing/mask/gas/half, -/obj/item/clothing/mask/gas/half, -/obj/item/clothing/mask/gas/half, -/obj/effect/floor_decal/corner/black/border, -/turf/simulated/floor/tiled/dark/monotile, -/area/map_template/rescue_base/start) -"Kj" = ( -/obj/machinery/door/airlock/vault{ - name = "Secure Storage" - }, -/turf/simulated/floor/tiled/dark, -/area/map_template/rescue_base/start) -"Kl" = ( -/obj/machinery/recharger/wallcharger{ - pixel_x = -25 - }, -/obj/structure/closet{ - name = "Prisoner's Locker" - }, -/obj/item/clothing/under/color/orange, -/obj/item/clothing/shoes/orange, -/obj/effect/floor_decal/corner/red/border{ - dir = 9 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/map_template/rescue_base/start) -"Ky" = ( -/obj/machinery/atmospherics/pipe/simple/visible, -/obj/machinery/door/airlock/external{ - frequency = 1331; - id_tag = "rescue_shuttle_inner"; - name = "Ship External Access" - }, -/turf/simulated/floor/plating, -/area/map_template/rescue_base/start) -"KC" = ( -/obj/machinery/door/blast/regular{ - density = 0; - dir = 4; - icon_state = "pdoor0"; - id_tag = "rescueeva"; - name = "Blast Shutters"; - opacity = 0 - }, -/obj/effect/wallframe_spawn/reinforced/titanium, -/obj/effect/paint/hull, -/turf/simulated/floor/plating, -/area/map_template/rescue_base/start) -"KD" = ( -/obj/structure/handrail, -/turf/simulated/floor/reinforced/airless, -/area/map_template/rescue_base/start) -"KH" = ( -/obj/machinery/power/emitter, -/turf/unsimulated/floor{ - dir = 1; - icon_state = "vault" - }, -/area/map_template/rescue_base/base) -"KL" = ( -/obj/structure/window/reinforced/crescent, -/obj/structure/table/rack, -/obj/item/rig/ert, -/obj/structure/window/reinforced/crescent{ - dir = 8 - }, -/turf/unsimulated/floor{ - dir = 1; - icon_state = "vault" - }, -/area/map_template/rescue_base/base) -"KP" = ( -/obj/structure/table/rack, -/obj/item/clothing/head/helmet/ballistic, -/obj/item/clothing/head/helmet/ballistic, -/obj/item/clothing/head/helmet/ballistic, -/obj/item/clothing/head/helmet/ballistic, -/obj/item/clothing/head/helmet/ballistic, -/obj/item/clothing/head/helmet/ballistic, -/obj/item/clothing/suit/armor/bulletproof, -/obj/item/clothing/suit/armor/bulletproof, -/obj/item/clothing/suit/armor/bulletproof, -/obj/item/clothing/suit/armor/bulletproof, -/obj/item/clothing/suit/armor/bulletproof, -/obj/item/clothing/suit/armor/bulletproof, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/unsimulated/floor{ - icon = 'icons/turf/flooring/tiles.dmi'; - icon_state = "monotiledark" - }, -/area/map_template/rescue_base/base) -"KS" = ( -/obj/effect/floor_decal/corner/red/border{ - dir = 1 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/map_template/rescue_base/start) -"KT" = ( -/obj/structure/table/rack, -/obj/item/device/flash, -/obj/item/device/flash, -/obj/item/melee/baton/loaded, -/obj/item/melee/baton/loaded, -/obj/item/grenade/chem_grenade/metalfoam, -/obj/item/grenade/chem_grenade/metalfoam, -/obj/item/grenade/chem_grenade/metalfoam, -/obj/item/grenade/chem_grenade/metalfoam, -/obj/item/grenade/chem_grenade/metalfoam, -/obj/item/grenade/chem_grenade/metalfoam, -/obj/item/grenade/chem_grenade/metalfoam, -/obj/item/grenade/chem_grenade/metalfoam, -/obj/item/inflatable_dispenser, -/obj/item/inflatable_dispenser, -/obj/item/pickaxe/diamonddrill, -/obj/item/pickaxe/diamonddrill, -/obj/item/storage/briefcase/inflatable{ - pixel_x = 3; - pixel_y = 3 - }, -/obj/item/storage/briefcase/inflatable{ - pixel_x = 3; - pixel_y = 3 - }, -/obj/item/storage/briefcase/inflatable{ - pixel_x = 3; - pixel_y = 3 - }, -/obj/item/storage/briefcase/inflatable{ - pixel_x = 3; - pixel_y = 3 - }, -/turf/unsimulated/floor{ - dir = 1; - icon_state = "vault" - }, -/area/map_template/rescue_base/base) -"Le" = ( -/obj/effect/floor_decal/corner/red/border{ - dir = 5 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/map_template/rescue_base/start) -"Lp" = ( -/turf/unsimulated/floor{ - dir = 1; - icon_state = "vault" - }, -/area/map_template/rescue_base/base) -"Lu" = ( -/obj/machinery/light{ - dir = 4 - }, -/obj/structure/closet/radiation, -/obj/machinery/vending/wallmed1{ - name = "Emergency NanoMed"; - pixel_x = 28; - req_access = newlist() - }, -/obj/effect/floor_decal/corner/lightgrey/border{ - dir = 6 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/map_template/rescue_base/start) -"Lz" = ( -/obj/structure/closet, -/obj/item/storage/box/sinpockets, -/obj/item/storage/box/sinpockets, -/obj/effect/floor_decal/corner/lightgrey/border{ - dir = 10 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/map_template/rescue_base/start) -"LB" = ( -/obj/structure/table/reinforced, -/obj/item/storage/firstaid/fire, -/obj/item/storage/firstaid/fire, -/obj/item/storage/firstaid/fire, -/obj/item/storage/firstaid/toxin, -/obj/item/storage/firstaid/toxin, -/obj/item/storage/firstaid/toxin, -/obj/item/storage/firstaid/o2, -/obj/item/storage/firstaid/o2, -/obj/item/storage/firstaid/o2, -/turf/unsimulated/floor{ - dir = 1; - icon_state = "vault" - }, -/area/map_template/rescue_base/base) -"LC" = ( -/obj/structure/closet/secure_closet/cos, -/turf/unsimulated/floor{ - color = "#543c30"; - icon = 'icons/turf/flooring/wood.dmi'; - icon_state = "wood" - }, -/area/map_template/rescue_base/base) -"LH" = ( -/obj/structure/table/steel_reinforced, -/turf/unsimulated/floor{ - icon = 'icons/turf/flooring/tiles.dmi'; - icon_state = "monotiledark" - }, -/area/map_template/rescue_base/base) -"LJ" = ( -/obj/effect/floor_decal/corner/blue/border{ - dir = 1 - }, -/turf/unsimulated/floor{ - icon = 'icons/turf/flooring/tiles.dmi'; - icon_state = "dark" - }, -/area/map_template/rescue_base/base) -"LR" = ( -/obj/structure/table/reinforced, -/obj/item/reagent_containers/ivbag/blood/OMinus, -/obj/item/reagent_containers/ivbag/blood/OMinus, -/obj/item/reagent_containers/ivbag/blood/OMinus, -/obj/item/reagent_containers/ivbag/blood/OMinus, -/obj/item/reagent_containers/ivbag/blood/OMinus, -/obj/item/reagent_containers/ivbag/blood/OMinus, -/obj/item/reagent_containers/ivbag/blood/OMinus, -/obj/item/reagent_containers/ivbag/blood/OMinus, -/obj/item/bodybag/cryobag, -/obj/item/bodybag/cryobag, -/obj/item/bodybag/cryobag, -/obj/item/bodybag/cryobag, -/obj/item/bodybag/cryobag, -/obj/item/bodybag/cryobag, -/obj/item/bodybag/cryobag, -/obj/item/defibrillator/compact/loaded, -/turf/unsimulated/floor{ - dir = 1; - icon_state = "vault" - }, -/area/map_template/rescue_base/base) -"Ma" = ( -/obj/structure/table/rack, -/obj/item/clothing/mask/gas, -/obj/item/clothing/mask/gas, -/obj/item/clothing/glasses/meson, -/obj/item/clothing/glasses/meson, -/obj/item/clothing/glasses/welding/superior, -/obj/item/clothing/glasses/welding/superior, -/turf/unsimulated/floor{ - dir = 1; - icon_state = "vault" - }, -/area/map_template/rescue_base/base) -"Mg" = ( -/obj/effect/floor_decal/corner/red/border{ - dir = 6 - }, -/turf/unsimulated/floor{ - icon = 'icons/turf/flooring/tiles.dmi'; - icon_state = "monotiledark" - }, -/area/map_template/rescue_base/base) -"Mt" = ( -/obj/structure/lattice, -/turf/space, -/area/map_template/rescue_base/base) -"Mu" = ( -/obj/structure/table/steel_reinforced, -/obj/item/clothing/head/beret/solgov/fleet/command, -/turf/unsimulated/floor{ - color = "#543c30"; - icon = 'icons/turf/flooring/wood.dmi'; - icon_state = "wood" - }, -/area/map_template/rescue_base/base) -"MR" = ( -/obj/structure/table/rack, -/obj/item/rig_module/mounted/taser, -/obj/item/rig_module/mounted/taser, -/obj/item/rig_module/maneuvering_jets, -/obj/item/rig_module/maneuvering_jets, -/obj/item/rig_module/mounted/egun, -/obj/item/rig_module/mounted/egun, -/obj/item/rig_module/chem_dispenser/combat, -/obj/item/rig_module/chem_dispenser/combat, -/obj/item/rig_module/grenade_launcher, -/obj/item/rig_module/vision/sechud, -/obj/item/rig_module/vision/sechud, -/obj/item/rig_module/device/flash, -/obj/item/rig_module/device/flash, -/obj/item/rig_module/mounted, -/obj/structure/window/reinforced/crescent{ - dir = 1 - }, -/obj/structure/window/reinforced/crescent{ - dir = 8 - }, -/turf/unsimulated/floor{ - dir = 1; - icon_state = "vault" - }, -/area/map_template/rescue_base/base) -"MX" = ( -/obj/structure/hygiene/sink{ - dir = 1; - pixel_y = 16 - }, -/obj/item/storage/mirror{ - pixel_y = 32 - }, -/turf/unsimulated/floor{ - icon_state = "freezerfloor" - }, -/area/map_template/rescue_base/base) -"Na" = ( -/obj/structure/closet/secure_closet/CO{ - storage_capacity = 60 - }, -/obj/item/clothing/head/solgov/dress/fleet/command, -/obj/item/clothing/suit/storage/jacket/solgov/fleet/command, -/obj/item/clothing/suit/storage/solgov/dress/fleet/command, -/obj/item/clothing/suit/storage/solgov/service/fleet/command, -/obj/item/clothing/under/solgov/utility/fleet/combat/command, -/obj/item/clothing/accessory/solgov/department/command/fleet, -/obj/item/clothing/accessory/solgov/fleet_patch/fifth, -/obj/item/clothing/accessory/solgov/specialty/officer, -/obj/item/clothing/accessory/solgov/ec_scarf/observatory, -/obj/item/clothing/accessory/solgov/rank/fleet/officer/o5, -/turf/unsimulated/floor{ - color = "#543c30"; - icon = 'icons/turf/flooring/wood.dmi'; - icon_state = "wood" - }, -/area/map_template/rescue_base/base) -"Ne" = ( -/obj/machinery/shieldwallgen, -/obj/item/device/radio/intercom/specops{ - dir = 8; - pixel_x = 22 - }, -/turf/simulated/floor/plating, -/area/map_template/rescue_base/start) -"Nh" = ( -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 1 - }, -/turf/unsimulated/floor{ - icon = 'icons/turf/flooring/tiles.dmi'; - icon_state = "reinforced" - }, -/area/map_template/rescue_base/base) -"Nq" = ( -/obj/machinery/recharger/wallcharger{ - dir = 4; - pixel_x = -23; - pixel_y = -3 - }, -/turf/unsimulated/floor{ - color = "#543c30"; - icon = 'icons/turf/flooring/wood.dmi'; - icon_state = "wood" - }, -/area/map_template/rescue_base/base) -"Nx" = ( -/obj/structure/window/reinforced/crescent, -/obj/structure/table/rack, -/obj/item/rig/ert/engineer, -/turf/unsimulated/floor{ - dir = 1; - icon_state = "vault" - }, -/area/map_template/rescue_base/base) -"NA" = ( -/obj/machinery/door/airlock/centcom{ - name = "Briefing Room" - }, -/turf/unsimulated/floor{ - icon = 'icons/turf/flooring/tiles.dmi'; - icon_state = "monotiledark" - }, -/area/map_template/rescue_base/base) -"ND" = ( -/obj/structure/bed/chair/comfy/captain{ - dir = 8 - }, -/turf/unsimulated/floor{ - color = "#543c30"; - icon = 'icons/turf/flooring/wood.dmi'; - icon_state = "wood" - }, -/area/map_template/rescue_base/base) -"NJ" = ( -/obj/structure/table/rack, -/obj/machinery/light, -/obj/item/tank/jetpack/carbondioxide, -/obj/item/tank/jetpack/carbondioxide, -/obj/machinery/button/blast_door{ - icon_state = "doorctrl0"; - id_tag = "rescueeva"; - name = "Window Shutters Control"; - pixel_x = 24; - pixel_y = -4 - }, -/obj/effect/floor_decal/corner/black/border{ - dir = 6 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/map_template/rescue_base/start) -"NN" = ( -/obj/effect/floor_decal/corner/blue/border{ - dir = 10 - }, -/turf/unsimulated/floor{ - icon = 'icons/turf/flooring/tiles.dmi'; - icon_state = "monotiledark" - }, -/area/map_template/rescue_base/base) -"NT" = ( -/obj/structure/table/steel_reinforced, -/obj/item/storage/box/bodybags, -/turf/unsimulated/floor{ - icon = 'icons/turf/flooring/tiles.dmi'; - icon_state = "monotiledark" - }, -/area/map_template/rescue_base/base) -"NV" = ( -/obj/structure/reagent_dispensers/watertank, -/turf/unsimulated/floor{ - dir = 1; - icon_state = "vault" - }, -/area/map_template/rescue_base/base) -"NW" = ( -/obj/effect/floor_decal/corner/blue/border{ - dir = 1 - }, -/obj/effect/landmark{ - name = "Response Team" - }, -/turf/unsimulated/floor{ - icon = 'icons/turf/flooring/tiles.dmi'; - icon_state = "dark" - }, -/area/map_template/rescue_base/base) -"NX" = ( -/obj/effect/floor_decal/corner/red/border{ - dir = 1 - }, -/turf/simulated/floor/tiled/dark, -/area/map_template/rescue_base/start) -"Os" = ( -/obj/machinery/door/airlock/centcom{ - name = "Storage" - }, -/turf/simulated/floor/tiled/dark, -/area/map_template/rescue_base/start) -"OC" = ( -/obj/structure/table/woodentable{ - dir = 5 - }, -/obj/item/material/ashtray/bronze, -/obj/item/trash/cigbutt/cigarbutt, -/turf/unsimulated/floor{ - icon_state = "cult"; - name = "plating" - }, -/area/map_template/rescue_base/base) -"OL" = ( -/obj/machinery/door/airlock/centcom{ - name = "Special Ops Dorms" - }, -/turf/unsimulated/floor{ - icon = 'icons/turf/flooring/tiles.dmi'; - icon_state = "monotiledark" - }, -/area/map_template/rescue_base/base) -"OQ" = ( -/obj/structure/table/steel_reinforced, -/obj/item/device/radio/intercom/specops, -/turf/unsimulated/floor{ - color = "#543c30"; - icon = 'icons/turf/flooring/wood.dmi'; - icon_state = "wood" - }, -/area/map_template/rescue_base/base) -"Pc" = ( -/obj/effect/floor_decal/corner/black/border{ - dir = 8 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/map_template/rescue_base/start) -"Pw" = ( -/obj/machinery/computer/teleporter{ - dir = 8 - }, -/turf/unsimulated/floor{ - icon = 'icons/turf/flooring/tiles.dmi'; - icon_state = "monotiledark" - }, -/area/map_template/rescue_base/base) -"PU" = ( -/obj/effect/paint/hull, -/obj/machinery/door/blast/regular{ - density = 0; - dir = 2; - icon_state = "pdoor0"; - id_tag = "rescueinfirm"; - name = "Blast Shutters"; - opacity = 0 - }, -/obj/effect/wallframe_spawn/reinforced/titanium, -/turf/simulated/floor/plating, -/area/map_template/rescue_base/start) -"Qo" = ( -/obj/structure/table/reinforced, -/obj/item/storage/firstaid/regular, -/obj/item/storage/firstaid/regular, -/obj/item/storage/firstaid/regular, -/obj/item/storage/firstaid/adv, -/obj/item/storage/firstaid/adv, -/obj/item/storage/firstaid/adv, -/obj/item/storage/firstaid/combat, -/obj/item/storage/firstaid/combat, -/obj/item/storage/firstaid/combat, -/turf/unsimulated/floor{ - dir = 1; - icon_state = "vault" - }, -/area/map_template/rescue_base/base) -"QD" = ( -/obj/effect/floor_decal/corner/yellow/border{ - dir = 9 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/map_template/rescue_base/start) -"QH" = ( -/obj/machinery/atmospherics/pipe/manifold/visible{ - dir = 1 - }, -/turf/simulated/floor/plating, -/area/map_template/rescue_base/start) -"QN" = ( -/obj/machinery/door/airlock/centcom{ - name = "Engineering" - }, -/turf/unsimulated/floor{ - icon = 'icons/turf/flooring/tiles.dmi'; - icon_state = "monotiledark" - }, -/area/map_template/rescue_base/base) -"QP" = ( -/obj/structure/table/rack, -/obj/item/rig/ert/security, -/obj/structure/window/reinforced/crescent{ - dir = 1 - }, -/obj/structure/window/reinforced/crescent{ - dir = 4 - }, -/turf/unsimulated/floor{ - dir = 1; - icon_state = "vault" - }, -/area/map_template/rescue_base/base) -"QR" = ( -/obj/machinery/recharger/wallcharger{ - dir = 1; - pixel_y = -22 - }, -/turf/unsimulated/floor{ - icon_state = "dark" - }, -/area/map_template/rescue_base/base) -"QU" = ( -/obj/structure/table/steel_reinforced, -/obj/item/reagent_containers/syringe/drugs{ - pixel_x = 3; - pixel_y = -1 - }, -/obj/item/reagent_containers/syringe/drugs{ - pixel_x = 3; - pixel_y = 4 - }, -/obj/item/reagent_containers/syringe/drugs{ - pixel_x = 3; - pixel_y = 9 - }, -/turf/unsimulated/floor{ - icon = 'icons/turf/flooring/tiles.dmi'; - icon_state = "monotiledark" - }, -/area/map_template/rescue_base/base) -"QZ" = ( -/obj/machinery/vending/medical, -/turf/unsimulated/wall, -/area/map_template/rescue_base/base) -"Ra" = ( -/obj/machinery/button/blast_door{ - icon_state = "doorctrl0"; - id_tag = "rescueinfirm"; - name = "Window Shutters Control"; - pixel_x = 24; - pixel_y = -4 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/rescue_base/start) -"Rh" = ( -/obj/structure/bed/chair/comfy/blue, -/turf/unsimulated/floor{ - color = "#543c30"; - icon = 'icons/turf/flooring/wood.dmi'; - icon_state = "wood" - }, -/area/map_template/rescue_base/base) -"Rk" = ( -/obj/structure/hygiene/sink{ - dir = 8; - pixel_x = -12; - pixel_y = 2 - }, -/obj/structure/closet/medical_wall{ - pixel_x = -32 - }, -/obj/item/reagent_containers/glass/bottle/stoxin, -/obj/item/reagent_containers/glass/bottle/stoxin, -/obj/item/reagent_containers/syringe, -/obj/item/tank/anesthetic, -/obj/item/clothing/mask/breath/medical, -/turf/simulated/floor/tiled/white, -/area/map_template/rescue_base/start) -"Ro" = ( -/obj/effect/floor_decal/corner/red/bordercorner{ - dir = 4 - }, -/turf/unsimulated/floor{ - icon = 'icons/turf/flooring/tiles.dmi'; - icon_state = "monotiledark" - }, -/area/map_template/rescue_base/base) -"Rp" = ( -/obj/machinery/door/airlock/centcom{ - name = "Restricted Equipment" - }, -/obj/machinery/door/blast/regular{ - id_tag = "heavyrescue"; - name = "Restricted Equipment" - }, -/turf/unsimulated/floor{ - icon = 'icons/turf/flooring/tiles.dmi'; - icon_state = "monotiledark" - }, -/area/map_template/rescue_base/base) -"Ru" = ( -/obj/machinery/atmospherics/unary/vent_pump/high_volume/shuttle{ - dir = 8; - id_tag = "rescue_shuttle_pump" - }, -/obj/machinery/light{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/map_template/rescue_base/start) -"RC" = ( -/obj/effect/floor_decal/corner/yellow/border{ - dir = 1 - }, -/obj/machinery/light{ - dir = 1 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/map_template/rescue_base/start) -"RD" = ( -/obj/structure/bed, -/obj/item/bedsheet/orange, -/turf/unsimulated/floor{ - icon_state = "dark" - }, -/area/map_template/rescue_base/base) -"RP" = ( -/obj/structure/window/reinforced/crescent{ - dir = 4 - }, -/obj/structure/window/reinforced/crescent{ - dir = 1 - }, -/obj/structure/table/rack, -/obj/item/rig/ert/janitor, -/turf/unsimulated/floor{ - dir = 1; - icon_state = "vault" - }, -/area/map_template/rescue_base/base) -"RQ" = ( -/obj/effect/floor_decal/corner/yellow/border{ - dir = 1 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/map_template/rescue_base/start) -"RU" = ( -/obj/structure/hygiene/toilet{ - dir = 8 - }, -/turf/unsimulated/floor{ - icon_state = "dark" - }, -/area/map_template/rescue_base/base) -"RV" = ( -/obj/effect/floor_decal/corner/red/border{ - dir = 10 - }, -/turf/unsimulated/floor{ - icon = 'icons/turf/flooring/tiles.dmi'; - icon_state = "monotiledark" - }, -/area/map_template/rescue_base/base) -"RW" = ( -/obj/item/aiModule/reset, -/obj/item/aiModule/freeformcore, -/obj/item/aiModule/protectStation, -/obj/item/aiModule/quarantine, -/obj/item/aiModule/paladin, -/obj/item/aiModule/robocop, -/obj/item/aiModule/safeguard, -/obj/structure/table/rack, -/obj/item/aiModule/solgov, -/obj/item/aiModule/solgov_aggressive, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/unsimulated/floor{ - icon = 'icons/turf/flooring/tiles.dmi'; - icon_state = "monotiledark" - }, -/area/map_template/rescue_base/base) -"Se" = ( -/obj/machinery/door/airlock/sol{ - autoset_access = 0; - name = "CO's Quarters"; - req_access = list(109); - secured_wires = 1 - }, -/turf/unsimulated/floor{ - icon = 'icons/turf/flooring/tiles.dmi'; - icon_state = "monotiledark" - }, -/area/map_template/rescue_base/base) -"Sp" = ( -/obj/machinery/hologram/holopad/longrange, -/turf/unsimulated/floor{ - icon = 'icons/turf/flooring/tiles.dmi'; - icon_state = "dark" - }, -/area/map_template/rescue_base/base) -"Su" = ( -/obj/machinery/shieldgen, -/obj/effect/floor_decal/corner/yellow/border{ - dir = 5 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/map_template/rescue_base/start) -"Sw" = ( -/obj/structure/table/rack, -/obj/effect/floor_decal/corner/red/border{ - dir = 10 - }, -/turf/simulated/floor/tiled/dark, -/area/map_template/rescue_base/start) -"Sx" = ( -/obj/machinery/atmospherics/unary/tank/air{ - dir = 4; - start_pressure = 740.5 - }, -/obj/machinery/light{ - dir = 1 - }, -/obj/effect/floor_decal/corner/black/border{ - dir = 9 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/map_template/rescue_base/start) -"Sy" = ( -/obj/structure/table/reinforced, -/obj/item/tableflag, -/obj/effect/floor_decal/spline/fancy/black{ - dir = 6 - }, -/turf/unsimulated/floor{ - icon = 'icons/turf/flooring/tiles.dmi'; - icon_state = "monotiledark" - }, -/area/map_template/rescue_base/base) -"SJ" = ( -/obj/machinery/light{ - dir = 8 - }, -/obj/machinery/recharger/wallcharger{ - pixel_x = -25 - }, -/obj/structure/closet{ - name = "Prisoner's Locker" - }, -/obj/item/clothing/under/color/orange, -/obj/item/clothing/shoes/orange, -/obj/effect/floor_decal/corner/red/border{ - dir = 8 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/map_template/rescue_base/start) -"SR" = ( -/obj/structure/flora/ausbushes/ywflowers, -/obj/structure/flora/ausbushes/sunnybush, -/turf/unsimulated/floor/grass, -/area/map_template/rescue_base/base) -"SU" = ( -/obj/structure/bed/chair{ - dir = 8 - }, -/obj/effect/floor_decal/corner/red/border{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/map_template/rescue_base/start) -"Tc" = ( -/obj/effect/wingrille_spawn/reinforced/crescent, -/turf/space, -/area/map_template/rescue_base/base) -"Th" = ( -/obj/structure/table/reinforced, -/obj/effect/floor_decal/corner/yellow/border{ - dir = 10 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/map_template/rescue_base/start) -"Tl" = ( -/obj/effect/floor_decal/corner/blue/border{ - dir = 6 - }, -/turf/unsimulated/floor{ - icon = 'icons/turf/flooring/tiles.dmi'; - icon_state = "monotiledark" - }, -/area/map_template/rescue_base/base) -"Tq" = ( -/obj/structure/hygiene/toilet{ - dir = 1 - }, -/turf/unsimulated/floor{ - icon_state = "freezerfloor" - }, -/area/map_template/rescue_base/base) -"Tt" = ( -/obj/effect/floor_decal/corner/black/border{ - dir = 1 - }, -/turf/unsimulated/floor{ - icon = 'icons/turf/flooring/tiles.dmi'; - icon_state = "monotiledark" - }, -/area/map_template/rescue_base/base) -"Tx" = ( -/obj/structure/table/steel_reinforced, -/obj/item/clothing/shoes/magboots/rig/combat, -/turf/unsimulated/floor{ - icon = 'icons/turf/flooring/tiles.dmi'; - icon_state = "monotiledark" - }, -/area/map_template/rescue_base/base) -"TQ" = ( -/turf/unsimulated/floor{ - dir = 9; - icon_state = "vault" - }, -/area/map_template/rescue_base/base) -"TV" = ( -/obj/machinery/light{ - dir = 4 - }, -/obj/structure/closet/crate/secure{ - req_access = list("ACCESS_CENT_SPECOPS") - }, -/turf/simulated/floor/plating, -/area/map_template/rescue_base/start) -"TW" = ( -/obj/effect/floor_decal/industrial/hatch/yellow, -/turf/unsimulated/floor{ - icon_state = "asteroidfloor" - }, -/area/map_template/rescue_base/base) -"Ua" = ( -/obj/machinery/computer/modular/preset/full/ert{ - dir = 1 - }, -/obj/machinery/recharger/wallcharger{ - dir = 1; - pixel_y = -22 - }, -/turf/unsimulated/floor{ - color = "#543c30"; - icon = 'icons/turf/flooring/wood.dmi'; - icon_state = "wood" - }, -/area/map_template/rescue_base/base) -"Uc" = ( -/obj/structure/bed/chair{ - dir = 4 - }, -/obj/effect/floor_decal/corner/red/border{ - dir = 8 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/map_template/rescue_base/start) -"Ur" = ( -/obj/structure/table/woodentable{ - dir = 5 - }, -/obj/machinery/button/blast_door{ - id_tag = "standardrescue"; - name = "Standard Gear"; - pixel_x = 5; - pixel_y = 4 - }, -/turf/unsimulated/floor{ - icon_state = "cult"; - name = "plating" - }, -/area/map_template/rescue_base/base) -"Uy" = ( -/obj/machinery/door/airlock/external{ - frequency = 1331; - id_tag = "rescue_shuttle_outer"; - name = "Ship External Access" - }, -/obj/effect/shuttle_landmark/ert/start, -/turf/simulated/floor/plating, -/area/map_template/rescue_base/start) -"UI" = ( -/obj/effect/wingrille_spawn/reinforced/crescent, -/turf/unsimulated/floor{ - icon = 'icons/turf/flooring/tiles.dmi'; - icon_state = "monotiledark" - }, -/area/map_template/rescue_base/base) -"UN" = ( -/obj/structure/reagent_dispensers/fueltank, -/turf/unsimulated/floor{ - dir = 1; - icon_state = "vault" - }, -/area/map_template/rescue_base/base) -"Vc" = ( -/obj/structure/table/rack, -/obj/item/rig_module/mounted/taser, -/obj/item/rig_module/mounted/taser, -/obj/item/rig_module/maneuvering_jets, -/obj/item/rig_module/maneuvering_jets, -/obj/item/rig_module/chem_dispenser/injector, -/obj/item/rig_module/chem_dispenser/injector, -/obj/item/rig_module/device/healthscanner, -/obj/item/rig_module/device/healthscanner, -/obj/item/rig_module/vision/medhud, -/obj/item/rig_module/vision/medhud, -/obj/structure/window/reinforced/crescent{ - dir = 1 - }, -/obj/structure/window/reinforced/crescent{ - dir = 4 - }, -/turf/unsimulated/floor{ - dir = 1; - icon_state = "vault" - }, -/area/map_template/rescue_base/base) -"Vs" = ( -/obj/structure/handrail{ - dir = 1 - }, -/turf/simulated/floor/tiled/dark, -/area/map_template/rescue_base/start) -"Vt" = ( -/obj/machinery/atmospherics/unary/vent_pump/high_volume/shuttle{ - dir = 4; - id_tag = "rescue_shuttle_pump" - }, -/obj/machinery/light{ - dir = 8 - }, -/turf/simulated/floor/plating, -/area/map_template/rescue_base/start) -"VD" = ( -/obj/structure/table/rack, -/obj/item/ammo_magazine/mil_rifle, -/obj/item/ammo_magazine/mil_rifle, -/obj/item/ammo_magazine/mil_rifle, -/obj/item/ammo_magazine/mil_rifle, -/obj/item/ammo_magazine/mil_rifle, -/obj/item/ammo_magazine/mil_rifle, -/obj/effect/floor_decal/industrial/outline/red, -/turf/unsimulated/floor{ - icon = 'icons/turf/flooring/tiles.dmi'; - icon_state = "monotiledark" - }, -/area/map_template/rescue_base/base) -"VM" = ( -/obj/structure/bed/chair/comfy/brown{ - dir = 1 - }, -/turf/unsimulated/floor{ - icon_state = "cult"; - name = "plating" - }, -/area/map_template/rescue_base/base) -"VV" = ( -/turf/simulated/floor/tiled/white, -/area/map_template/rescue_base/start) -"We" = ( -/obj/structure/handrail{ - dir = 4 - }, -/obj/effect/floor_decal/corner/black/border{ - dir = 8 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/map_template/rescue_base/start) -"Wf" = ( -/obj/structure/table/reinforced, -/obj/item/reagent_containers/hypospray, -/obj/item/reagent_containers/hypospray, -/obj/item/reagent_containers/hypospray, -/obj/item/reagent_containers/hypospray, -/obj/item/reagent_containers/hypospray, -/obj/item/reagent_containers/hypospray, -/obj/item/reagent_containers/glass/beaker/large, -/obj/item/reagent_containers/glass/bottle/inaprovaline, -/obj/item/reagent_containers/glass/bottle/inaprovaline, -/obj/item/reagent_containers/glass/bottle/inaprovaline, -/turf/unsimulated/floor{ - dir = 1; - icon_state = "vault" - }, -/area/map_template/rescue_base/base) -"Wj" = ( -/obj/structure/table/reinforced, -/obj/item/device/flash, -/turf/unsimulated/floor{ - icon_state = "dark" - }, -/area/map_template/rescue_base/base) -"Wl" = ( -/obj/machinery/body_scanconsole{ - dir = 8 - }, -/obj/machinery/light, -/turf/simulated/floor/tiled/white, -/area/map_template/rescue_base/start) -"Wo" = ( -/obj/machinery/door/airlock/centcom{ - autoset_access = 0; - name = "Additional Armory"; - req_access = list(103) - }, -/turf/unsimulated/floor{ - icon = 'icons/turf/flooring/tiles.dmi'; - icon_state = "monotiledark" - }, -/area/map_template/rescue_base/base) -"Wq" = ( -/obj/machinery/portable_atmospherics/powered/scrubber, -/turf/unsimulated/floor{ - dir = 1; - icon_state = "vault" - }, -/area/map_template/rescue_base/base) -"Wu" = ( -/obj/structure/table/rack, -/obj/item/stack/material/glass{ - amount = 50 - }, -/obj/item/stack/material/glass{ - amount = 50 - }, -/obj/item/stack/material/glass{ - amount = 50 - }, -/obj/item/stack/material/glass{ - amount = 50 - }, -/obj/item/stack/material/steel{ - amount = 50; - pixel_x = 2; - pixel_y = 2 - }, -/obj/item/stack/material/steel{ - amount = 50; - pixel_x = 2; - pixel_y = 2 - }, -/obj/item/stack/material/steel{ - amount = 50; - pixel_x = 2; - pixel_y = 2 - }, -/obj/item/stack/material/steel{ - amount = 50; - pixel_x = 2; - pixel_y = 2 - }, -/turf/unsimulated/floor{ - icon = 'icons/turf/flooring/tiles.dmi'; - icon_state = "reinforced" - }, -/area/map_template/rescue_base/base) -"WC" = ( -/obj/effect/floor_decal/corner/yellow/border, -/obj/machinery/light, -/turf/simulated/floor/tiled/dark/monotile, -/area/map_template/rescue_base/start) -"WF" = ( -/obj/machinery/door/airlock/centcom{ - name = "Emergency Insertion" - }, -/turf/unsimulated/floor{ - icon = 'icons/turf/flooring/tiles.dmi'; - icon_state = "monotiledark" - }, -/area/map_template/rescue_base/base) -"WN" = ( -/obj/structure/handrail{ - dir = 4 - }, -/obj/machinery/atmospherics/unary/vent_pump/high_volume/shuttle{ - dir = 4; - id_tag = "rescue_shuttle_pump" - }, -/turf/simulated/floor/plating, -/area/map_template/rescue_base/start) -"WO" = ( -/obj/item/device/radio/intercom/specops{ - pixel_y = 22 - }, -/turf/unsimulated/floor{ - icon = 'icons/turf/flooring/tiles.dmi'; - icon_state = "dark" - }, -/area/map_template/rescue_base/base) -"WX" = ( -/obj/structure/table/rack, -/obj/item/shield/riot/metal, -/obj/item/shield/riot/metal, -/obj/item/shield/riot/metal, -/obj/item/shield/riot/metal, -/turf/unsimulated/floor{ - dir = 8; - icon_state = "vault" - }, -/area/map_template/rescue_base/base) -"Xb" = ( -/obj/structure/undies_wardrobe, -/turf/unsimulated/floor{ - icon = 'icons/turf/flooring/tiles.dmi'; - icon_state = "monotiledark" - }, -/area/map_template/rescue_base/base) -"Xg" = ( -/obj/structure/table/reinforced, -/obj/machinery/recharger{ - pixel_y = 4 - }, -/obj/item/device/radio/intercom/specops{ - pixel_y = 22 - }, -/turf/unsimulated/floor{ - icon_state = "dark" - }, -/area/map_template/rescue_base/base) -"XM" = ( -/obj/structure/table/rack, -/obj/item/device/flash, -/obj/item/device/flash, -/obj/item/melee/baton/loaded, -/obj/item/melee/baton/loaded, -/obj/item/storage/box/syringes, -/obj/item/storage/box/syringes, -/obj/item/storage/box/autoinjectors, -/obj/item/storage/box/autoinjectors, -/obj/item/storage/box/beakers, -/obj/item/storage/box/beakers, -/obj/item/storage/box/pillbottles, -/obj/item/storage/box/pillbottles, -/obj/item/storage/box/bodybags, -/obj/item/storage/box/bodybags, -/obj/item/storage/box/syringegun, -/obj/item/storage/box/syringegun, -/obj/item/storage/box/syringegun, -/obj/item/storage/box/syringegun, -/obj/item/gun/launcher/syringe/rapid, -/obj/item/gun/launcher/syringe/rapid, -/turf/unsimulated/floor{ - dir = 1; - icon_state = "vault" - }, -/area/map_template/rescue_base/base) -"XP" = ( -/obj/structure/table/steel_reinforced, -/obj/item/storage/belt/utility/full, -/obj/item/device/assembly/igniter, -/turf/unsimulated/floor{ - icon = 'icons/turf/flooring/tiles.dmi'; - icon_state = "monotiledark" - }, -/area/map_template/rescue_base/base) -"Ye" = ( -/obj/item/clothing/shoes/orange, -/obj/item/clothing/under/color/orange, -/obj/structure/closet{ - name = "Prisoner's Locker" - }, -/turf/unsimulated/floor{ - icon_state = "dark" - }, -/area/map_template/rescue_base/base) -"Yi" = ( -/obj/effect/wallframe_spawn/reinforced/titanium, -/obj/effect/paint/hull, -/turf/simulated/floor/plating, -/area/map_template/rescue_base/start) -"Yk" = ( -/obj/structure/table/rack, -/obj/machinery/recharger/wallcharger{ - pixel_x = 4; - pixel_y = 32 - }, -/obj/item/clothing/suit/armor/pcarrier/medium, -/obj/item/clothing/suit/armor/pcarrier/medium, -/obj/item/clothing/head/helmet, -/obj/item/clothing/head/helmet, -/turf/unsimulated/floor{ - dir = 1; - icon_state = "vault" - }, -/area/map_template/rescue_base/base) -"YA" = ( -/obj/structure/displaycase, -/obj/item/gun/magnetic/railgun/automatic/mmi{ - pixel_y = -3 - }, -/turf/unsimulated/floor{ - color = "#543c30"; - icon = 'icons/turf/flooring/wood.dmi'; - icon_state = "wood" - }, -/area/map_template/rescue_base/base) -"YB" = ( -/obj/machinery/fabricator/hacked, -/turf/unsimulated/floor{ - icon = 'icons/turf/flooring/tiles.dmi'; - icon_state = "reinforced" - }, -/area/map_template/rescue_base/base) -"YI" = ( -/obj/item/device/radio/intercom/specops{ - pixel_y = 22 - }, -/obj/effect/floor_decal/corner/red/border{ - dir = 1 - }, -/turf/unsimulated/floor{ - icon = 'icons/turf/flooring/tiles.dmi'; - icon_state = "monotiledark" - }, -/area/map_template/rescue_base/base) -"YN" = ( -/obj/structure/bed/chair/office/dark{ - dir = 4 - }, -/turf/unsimulated/floor{ - icon_state = "dark" - }, -/area/map_template/rescue_base/base) -"YO" = ( -/obj/structure/table/rack, -/obj/item/cell/high, -/obj/item/cell/high, -/obj/item/cell/high, -/obj/item/cell/high, -/obj/item/cell/high, -/obj/item/cell/high, -/obj/item/device/radio/intercom/specops{ - pixel_y = 22 - }, -/turf/unsimulated/floor{ - dir = 1; - icon_state = "vault" - }, -/area/map_template/rescue_base/base) -"YS" = ( -/obj/effect/floor_decal/corner/red/bordercorner{ - dir = 8 - }, -/turf/unsimulated/floor{ - icon = 'icons/turf/flooring/tiles.dmi'; - icon_state = "monotiledark" - }, -/area/map_template/rescue_base/base) -"Zd" = ( -/obj/structure/sign/solgov{ - pixel_y = 32 - }, -/obj/effect/floor_decal/corner/red/border{ - dir = 1 - }, -/turf/unsimulated/floor{ - icon = 'icons/turf/flooring/tiles.dmi'; - icon_state = "monotiledark" - }, -/area/map_template/rescue_base/base) -"Zf" = ( -/obj/structure/table/steel_reinforced, -/obj/item/material/twohanded/baseballbat/metal, -/obj/item/material/hatchet, -/turf/unsimulated/floor{ - icon = 'icons/turf/flooring/tiles.dmi'; - icon_state = "monotiledark" - }, -/area/map_template/rescue_base/base) -"ZC" = ( -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 9 - }, -/obj/machinery/sleeper{ - dir = 8 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/rescue_base/start) -"ZI" = ( -/obj/machinery/atmospherics/unary/vent_pump/high_volume/shuttle{ - dir = 4; - id_tag = "rescue_shuttle_pump" - }, -/obj/machinery/airlock_sensor{ - frequency = 1331; - id_tag = "rescue_shuttle_sensor"; - pixel_x = 8; - pixel_y = 25 - }, -/obj/machinery/light{ - dir = 8 - }, -/obj/structure/closet/emcloset, -/turf/simulated/floor/plating, -/area/map_template/rescue_base/start) -"ZS" = ( -/obj/structure/table/rack, -/turf/unsimulated/floor{ - icon = 'icons/turf/flooring/tiles.dmi'; - icon_state = "dark" - }, -/area/map_template/rescue_base/base) -"ZY" = ( -/obj/machinery/computer/modular/preset/full/ert{ - dir = 1 - }, -/turf/unsimulated/floor{ - color = "#543c30"; - icon = 'icons/turf/flooring/wood.dmi'; - icon_state = "wood" - }, -/area/map_template/rescue_base/base) - -(1,1,1) = {" -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -"} -(2,1,1) = {" -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -"} -(3,1,1) = {" -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -"} -(4,1,1) = {" -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -"} -(5,1,1) = {" -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -"} -(6,1,1) = {" -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -"} -(7,1,1) = {" -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -"} -(8,1,1) = {" -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -"} -(9,1,1) = {" -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -"} -(10,1,1) = {" -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -"} -(11,1,1) = {" -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -"} -(12,1,1) = {" -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -"} -(13,1,1) = {" -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -"} -(14,1,1) = {" -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -"} -(15,1,1) = {" -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -"} -(16,1,1) = {" -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -"} -(17,1,1) = {" -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -"} -(18,1,1) = {" -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -"} -(19,1,1) = {" -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -"} -(20,1,1) = {" -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -ad -ad -ad -ad -wN -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -"} -(21,1,1) = {" -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -ad -ad -eQ -eQ -ad -ec -ec -ec -ec -ec -ec -ec -ec -ec -Fj -ad -Mt -Mt -Mt -Mt -Mt -Mt -Mt -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -"} -(22,1,1) = {" -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -ad -ad -ec -ad -ec -ec -ec -ec -ec -ec -ec -ec -ec -ec -ec -ec -Fj -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -hl -hl -hl -hl -hl -hl -hl -hl -"} -(23,1,1) = {" -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -ad -ad -ad -ad -ad -ad -ad -eW -eW -ec -ec -ad -ec -ec -ec -ec -ec -ec -ec -ec -ec -ec -ec -ec -Fj -ad -xl -Jk -uL -lx -VD -ad -ya -ec -ec -ec -ec -ec -ec -ec -ec -ec -ec -ec -ec -ec -ec -ec -ec -ec -ec -ec -ec -ec -ec -ec -ec -hi -hl -hl -hl -hl -hl -hl -hl -hl -"} -(24,1,1) = {" -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -ad -ad -ad -hb -EV -ad -rv -jk -ad -ad -ad -ad -ad -ad -eQ -eQ -ad -ec -ec -cG -cG -cG -Bv -cG -ec -ec -Fj -ad -WO -en -en -en -en -ad -ya -ec -oS -ec -ec -ec -ec -ec -ec -ec -ec -ec -oS -ec -ec -ec -ec -ec -ec -ec -ec -ec -ec -oS -ec -hi -hl -hl -hl -hl -hl -hl -hl -hl -"} -(25,1,1) = {" -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -ec -ec -ad -fG -gC -ND -Na -ad -sO -bM -ad -aD -aW -aW -nX -ad -ad -ad -ad -ad -oL -ad -ad -ad -ad -ad -dj -ad -ad -ad -en -en -en -en -en -ad -ya -ec -ec -ec -ec -ec -ec -ec -ec -ec -ec -ec -ec -ec -ec -ec -ec -ec -ec -ec -ec -ec -ec -ec -ec -hi -hl -hl -hl -hl -hl -hl -hl -hl -"} -(26,1,1) = {" -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -ec -ec -ec -ec -ad -fH -gC -ag -FI -ad -bM -Em -ad -aE -aW -aW -Gl -ad -bS -bS -ad -ZS -en -en -yg -cI -cT -cT -cT -ou -ad -ad -ad -ad -ad -Rp -ad -ad -ya -ec -ec -ec -ec -ec -ec -ec -ec -ec -ec -ec -ec -ec -ec -ec -ec -ec -ec -ec -ec -ec -ec -ec -ec -hi -hl -hl -hl -hl -hl -hl -hl -hl -"} -(27,1,1) = {" -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -ec -ec -ec -ec -ec -ec -ad -ad -ad -Se -ad -ad -af -ad -ad -ad -oZ -ad -ad -ad -bM -CU -ad -ZS -en -en -En -Tt -cU -cU -cU -pW -ad -RW -dI -CR -KP -en -CT -ad -ad -jY -gQ -gQ -gQ -gQ -gQ -gQ -gQ -gQ -gQ -gQ -gQ -gQ -gQ -gQ -gQ -gQ -gQ -gQ -lY -ec -ec -ec -ec -hi -hl -hl -hl -hl -hl -hl -hl -hl -"} -(28,1,1) = {" -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -ad -ad -ad -ad -ad -ad -ad -ad -fM -ag -ag -ag -Nq -ag -YA -ad -aG -aW -bf -bp -ad -bN -ad -ad -ad -ad -ad -ad -cJ -ve -cV -cV -iU -ad -WO -en -en -en -en -nH -ad -ya -eL -ec -eU -eU -eU -eU -eU -eU -eU -eU -eU -eU -eU -eU -kC -eU -eU -KD -sn -rA -gQ -lY -ec -ec -hi -hl -hl -hl -hl -hl -hl -hl -hl -"} -(29,1,1) = {" -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -ad -ad -cp -ec -ec -ec -ec -ec -ad -fQ -ag -ag -ag -nQ -ag -ap -ad -nR -aW -aW -AK -ad -HC -CX -Tq -ad -nb -OC -ad -ad -ad -ad -uQ -RV -yb -en -en -en -en -en -Cx -ad -ya -eL -eU -eU -Rk -eR -eU -ge -fz -vI -fu -IX -eU -Kl -SJ -Uc -El -eU -eU -eU -gL -gL -gX -ec -ec -hi -hl -hl -hl -hl -hl -hl -hl -hl -"} -(30,1,1) = {" -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -aC -bE -bG -cp -ec -ec -ec -ec -ec -ad -fU -ag -ag -Rh -Bo -ah -ZY -ad -vn -aW -aW -ta -ad -MX -ad -ad -ad -CN -VM -ad -SR -cU -zD -kc -eq -yb -en -en -en -en -en -op -ad -ya -eL -PU -vq -VV -VV -lD -VV -Al -VV -VV -fA -eU -KS -fn -fn -mU -pI -iX -iv -gK -Es -gX -ec -ec -hi -hl -hl -hl -hl -hl -hl -hl -hl -"} -(31,1,1) = {" -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -ad -ad -cp -ec -ec -ec -ec -ec -ad -fW -ag -ag -ag -vz -ij -oC -ad -AF -aW -aW -iS -ad -MX -CX -Tq -ad -Ur -IJ -ad -zP -cU -mS -Ro -eq -ad -Cr -dM -dP -dY -wh -eu -ad -ya -eL -PU -tX -VV -VV -mT -VV -Al -VV -VV -IY -eU -KS -fn -fn -mU -bQ -uE -oO -gK -Es -gX -ec -ec -hi -hl -hl -hl -hl -hl -hl -hl -hl -"} -(32,1,1) = {" -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -ad -ad -ad -ad -ad -ad -eG -ad -ad -gD -ad -ad -cU -cU -cU -ad -ad -GI -ad -ad -ad -bg -ad -ad -ad -ad -ad -ad -ad -ad -ad -dk -eq -ad -ad -ad -ad -ad -ad -ad -ad -ad -eL -PU -xL -oq -wU -eU -wF -ZC -VV -Ra -Wl -eU -Le -SU -zC -jj -eU -jG -GH -gK -Es -gX -ec -ec -hi -hl -hl -hl -hl -hl -hl -hl -hl -"} -(33,1,1) = {" -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -ad -ad -en -en -en -ad -el -eO -fw -fw -fw -NN -UI -uQ -ed -ed -ax -ed -ed -ed -ed -ed -ed -ed -RV -ad -JU -cn -ow -uI -mq -cU -dk -eq -ad -dC -dN -dQ -dZ -ig -ad -AA -ya -eL -eU -eU -eU -eU -eU -eU -eU -DF -eU -Jj -eU -eS -Yi -eU -eU -eU -eU -eU -gL -gL -gX -ec -ec -hi -hl -hl -hl -hl -hl -hl -hl -hl -"} -(34,1,1) = {" -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -aj -aF -ad -en -en -en -en -ad -ey -eX -ar -ar -ar -rL -kQ -dk -ar -ar -ar -ar -ar -ar -ar -ar -ar -ar -eq -cU -pY -ar -ar -ar -ar -cU -dk -eq -ec -ec -ec -ec -ec -eo -ad -AA -ya -eL -fI -fN -gt -lg -pE -Yi -Bu -Fo -Ie -Lz -Yi -fn -Vs -eU -BO -oB -fd -go -gK -Es -gX -ec -ec -hi -hl -hl -hl -hl -hl -hl -hl -hl -"} -(35,1,1) = {" -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -ad -ad -ad -ad -ad -ad -ez -fc -fF -fF -fF -Tl -UI -xM -cK -cK -cK -cK -cK -cK -cK -cK -Ro -ar -eq -cU -iO -ar -ar -ar -ar -cW -dk -eq -ec -ec -ec -ec -ec -ep -ad -AA -ya -eL -fI -fV -gM -fn -vC -xz -Cl -fn -fn -Dx -Yi -fn -fn -Gj -sL -sL -sL -go -gK -Es -gX -ec -ec -hi -hl -hl -hl -hl -hl -hl -hl -hl -"} -(36,1,1) = {" -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -ad -bH -cq -cZ -ad -ad -ad -fl -fl -ad -cU -cU -ad -NA -ad -cU -ad -ad -ad -OL -ad -ad -dk -ar -eq -cU -ww -ao -ao -ao -ao -cY -dk -eq -ec -ec -ec -ec -ec -Wu -ad -ib -ya -eL -fI -fY -gY -ll -vC -Yi -Cp -fn -fn -Dx -HE -fn -fn -Gj -sL -sL -sL -yY -gK -Es -gX -ec -ec -hi -hl -hl -hl -hl -hl -hl -hl -hl -"} -(37,1,1) = {" -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -cU -cU -cU -ad -bI -cr -en -en -en -eA -fq -fq -ad -en -en -en -en -en -en -ad -bt -ao -ao -bt -ad -dk -ar -eq -ad -Yk -ao -li -WX -ao -cY -dk -eq -ad -Bb -ec -ec -ec -YB -ad -Eb -ya -eL -fI -gb -ku -ln -wq -Yi -Dk -FE -Ix -Lu -Yi -fn -gG -eU -qG -Ne -TV -Jd -gK -Es -gX -ec -ec -hi -hl -hl -hl -hl -hl -hl -hl -hl -"} -(38,1,1) = {" -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -cU -en -aV -en -en -cu -db -db -dH -ad -ad -ad -ad -gE -en -en -uB -uB -uB -ad -yD -bj -bj -yD -ad -dk -ar -eq -ad -ad -cU -cU -cU -ad -ad -YI -eq -ad -ad -ec -ec -ec -ad -ad -ki -Eb -eL -eU -eU -eU -eU -eU -eU -eU -HE -eU -eU -eU -Os -eU -eU -eU -eU -eU -eU -gL -gL -gX -ec -ec -hi -hl -hl -hl -hl -hl -hl -hl -hl -"} -(39,1,1) = {" -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -cU -al -be -en -bL -cy -dn -dn -dn -eB -ad -ad -gc -fl -nL -en -uB -uB -mY -ad -bt -ao -ao -bt -ad -dk -ar -YS -ed -ed -ed -ed -ed -ed -ed -kc -YS -ed -ed -ed -ed -ed -mw -ad -ad -ad -qs -eU -ZI -WN -lT -Vt -eU -Sx -Pc -We -GG -eU -QD -jN -wO -Th -eU -Gn -Sw -gK -Es -gX -ec -ec -hi -hl -hl -hl -hl -hl -hl -hl -hl -"} -(40,1,1) = {" -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -cU -al -bi -bF -bT -bi -dx -en -en -eC -ad -ad -gg -fq -Bt -Sp -en -en -uv -ad -yD -bj -bj -yD -ad -Zd -ar -ar -ar -ar -ar -ar -ar -ar -ar -ar -ar -ar -ar -ar -ar -ar -eq -pM -TW -eK -eL -lM -QH -CE -CE -uR -GO -EI -fn -fn -Kg -eU -RC -fn -fn -sm -Kj -NX -Ct -gK -Es -gX -ec -ec -hi -hl -hl -hl -hl -hl -hl -hl -hl -"} -(41,1,1) = {" -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -cU -al -bo -en -cg -cF -db -db -db -eD -ad -ad -gl -fv -Sy -en -uB -uB -uB -ad -bt -ao -ao -bt -ad -YI -ar -BB -cK -cK -cK -cK -cK -cK -cK -Ro -BB -cK -cK -cK -cK -cK -Mg -pM -TW -eK -eL -Uy -gk -kI -kI -Ji -Ky -IM -fn -fn -xy -eU -RQ -fn -fn -WC -eU -xJ -qE -gK -Es -gX -ec -ec -hi -hl -hl -hl -hl -hl -hl -hl -hl -"} -(42,1,1) = {" -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -cU -en -br -en -en -cH -dn -dn -ee -ad -ad -ad -ad -gR -en -en -uB -uB -uB -ad -sI -bj -bj -yD -ad -dk -ar -eq -ad -ad -cU -cU -cU -ad -ad -dk -eq -ad -ad -cU -cU -cU -ad -ad -ad -ad -qs -eU -eU -yE -th -Ru -eU -qF -Ic -Ic -NJ -eU -Su -hy -Js -Hx -eU -eU -eU -gL -gL -gX -ec -ec -hi -hl -hl -hl -hl -hl -hl -hl -hl -"} -(43,1,1) = {" -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -cU -cU -cU -ad -ck -cN -en -dB -en -eA -fq -fq -ad -gS -en -en -en -en -en -ad -Hh -ao -ao -Az -ad -dk -ar -eq -ad -DI -ao -ao -ao -ao -dc -dk -eq -QN -ao -ao -ao -ao -ao -DI -ad -ya -eL -ec -eU -eU -eU -eU -eU -KC -KC -KC -eU -eU -eU -eU -eU -eU -eU -KD -sn -CS -zl -Nh -ec -ec -hi -hl -hl -hl -hl -hl -hl -hl -hl -"} -(44,1,1) = {" -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -ad -co -cS -dA -ad -ad -ad -fv -fv -ad -cU -cU -ad -NA -ad -cU -ad -ad -ad -OL -ad -ad -dk -ar -eq -cU -si -ao -ao -ao -ao -dc -dk -eq -QN -ao -ao -ao -ao -ao -si -ad -ya -sQ -zl -zl -zl -zl -zl -zl -zl -zl -zl -zl -zl -zl -zl -zl -zl -zl -zl -zl -Nh -ec -ec -ec -ec -hi -hl -hl -hl -hl -hl -hl -hl -hl -"} -(45,1,1) = {" -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -ad -ad -ad -ad -ad -ad -ez -eO -fw -fw -fw -NN -UI -uQ -ed -ed -ed -ed -ed -ed -ed -ed -kc -ar -eq -cU -pb -ar -LR -ar -ar -QZ -dk -eq -JK -ar -ar -NV -UN -ar -zJ -ad -ya -ec -ec -ec -ec -ec -ec -ec -ec -ec -ec -ec -ec -ec -ec -ec -ec -ec -ec -ec -ec -ec -ec -ec -ec -hi -hl -hl -hl -hl -hl -hl -hl -hl -"} -(46,1,1) = {" -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -az -aF -ad -ag -ag -ag -ag -ad -eE -eX -ar -ar -ar -rL -kQ -dk -ar -ar -ar -ar -ar -ar -ar -ar -ar -ar -eq -cU -jR -ar -yu -ar -qw -Tc -dk -eq -cU -Dq -ar -Ht -Wq -ar -Ma -ad -ya -ec -ec -ec -ec -ec -ec -ec -ec -ec -ec -ec -ec -ec -ec -ec -ec -ec -ec -ec -ec -ec -ec -ec -ec -hi -hl -hl -hl -hl -hl -hl -hl -hl -"} -(47,1,1) = {" -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -ad -ad -ag -ag -ag -ad -eF -fc -fF -fF -fF -Tl -UI -xM -cK -cK -vk -cK -cK -cK -cK -cK -cK -cK -Mg -ad -XM -ar -rg -ar -EG -Tc -dk -eq -cU -kt -ar -Ht -Wq -ar -KT -ad -ya -ec -oS -ec -ec -ec -ec -ec -ec -ec -ec -ec -oS -ec -ec -ec -ec -ec -ec -ec -ec -ec -ec -oS -ec -hi -hl -hl -hl -hl -hl -hl -hl -hl -"} -(48,1,1) = {" -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -ad -ad -ad -ad -ad -ad -eG -ad -ad -gZ -ad -ad -cU -cU -cU -ad -ad -ad -OL -ad -ad -uN -cU -ji -ad -Wf -ar -ar -ar -LB -Tc -dk -eq -cU -Hf -ar -Ht -Wq -ar -xf -ad -ya -ec -ec -ec -ec -ec -ec -ec -ec -ec -ec -ec -ec -ec -ec -ec -ec -ec -ec -ec -ec -ec -ec -ec -ec -hi -hl -hl -hl -hl -hl -hl -hl -hl -"} -(49,1,1) = {" -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -ad -ad -cp -ec -ec -ec -ec -ec -ad -gm -ag -ag -ag -OQ -Mu -Ee -ad -nh -oE -CA -nh -ad -fq -cU -fq -ad -Wf -IW -Jx -FB -Qo -Tc -dk -eq -ad -rl -ar -Ht -Wq -ar -Jg -ad -FQ -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -hl -hl -hl -hl -hl -hl -hl -hl -"} -(50,1,1) = {" -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -aC -bE -bG -cp -ec -ec -ec -ec -ec -ad -fM -ag -ag -Rh -gu -oY -Ua -ad -Fp -NW -JI -Fp -ad -fq -cU -fq -ad -ad -ad -ad -ad -ad -ad -qN -eq -ad -GU -ar -ar -ar -ar -Cs -ad -ya -ya -ya -ya -ya -ad -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -"} -(51,1,1) = {" -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -ad -ad -cp -ec -ec -ec -ec -ec -ad -gu -ag -ag -ag -gu -ag -LC -ad -nh -LJ -wE -nh -ad -fq -rt -fq -ad -wj -ao -ao -ao -ao -yl -dk -eq -ad -in -ar -ar -ar -ar -tT -ad -ya -ya -ya -ya -ya -ad -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -"} -(52,1,1) = {" -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -ad -ad -ad -ad -ad -ad -ad -ad -gu -ag -ag -ag -ag -ag -rK -ad -vx -NW -JI -Fp -ad -LH -LH -Wo -ad -yQ -ao -ao -ao -ao -yl -dk -eq -ad -IO -Lp -kT -kT -KH -sg -ad -ya -ya -ya -ya -ya -ad -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -"} -(53,1,1) = {" -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -ec -ec -ec -ec -ec -ec -ad -ad -cU -cU -cU -AB -ad -ad -ad -nh -LJ -wE -nh -ad -WO -en -en -ad -Vc -ao -ao -vN -ad -ad -dk -eq -ad -ad -ad -cU -cU -cU -ad -ad -ad -ad -ad -ad -ad -ad -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -"} -(54,1,1) = {" -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -ec -ec -ec -ec -ad -gv -ar -ar -ar -ar -ar -ad -iD -Fp -NW -JI -Fp -ad -ZS -ZS -en -ad -YO -ao -ao -KL -ad -uQ -kc -eq -cU -yA -YN -ar -ar -ar -ar -Ye -ad -Tx -Ei -DU -QU -ad -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -"} -(55,1,1) = {" -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -ec -ec -ad -gB -ha -ar -ar -ar -QR -ad -rW -fq -LJ -wE -nh -ad -ad -ad -Wo -ad -tF -ao -ao -yZ -ad -dk -fq -eq -ad -Xg -Wj -GF -ar -ar -ar -Ye -ad -en -en -en -Ft -ad -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -"} -(56,1,1) = {" -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -ad -ad -ad -rC -Et -oW -kH -ad -Xb -fq -Gd -yh -Fp -ad -cG -ec -ec -ad -MR -ao -ao -oR -ad -xM -cK -Mg -tS -ar -TQ -ar -ar -ar -TQ -ar -xa -en -zf -en -DR -ad -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -"} -(57,1,1) = {" -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -cG -ec -ec -ad -EU -ao -ao -Nx -ad -ad -WF -ad -ad -cU -vM -cU -ad -cU -ru -cU -ad -en -en -en -NT -ad -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -"} -(58,1,1) = {" -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -ad -ad -ad -ad -cG -ec -ec -ad -QP -ao -ao -Ar -ad -fq -fq -fq -ad -RD -ar -iJ -ad -iJ -ar -RD -ad -FA -Ga -Zf -XP -ad -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -"} -(59,1,1) = {" -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -ad -ad -ad -cG -cG -ad -ad -RP -jW -ad -ad -Pw -jM -hM -ad -RU -ar -tu -ad -tu -ar -RU -ad -ad -ad -ad -ad -ad -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -"} -(60,1,1) = {" -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -ad -ad -ad -ad -wN -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -"} -(61,1,1) = {" -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -"} -(62,1,1) = {" -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -"} -(63,1,1) = {" -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -"} -(64,1,1) = {" -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -"} -(65,1,1) = {" -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -"} -(66,1,1) = {" -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -"} -(67,1,1) = {" -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -"} -(68,1,1) = {" -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -"} -(69,1,1) = {" -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -"} -(70,1,1) = {" -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -"} -(71,1,1) = {" -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -"} -(72,1,1) = {" -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -"} -(73,1,1) = {" -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -"} -(74,1,1) = {" -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -"} -(75,1,1) = {" -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -"} -(76,1,1) = {" -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -"} -(77,1,1) = {" -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -"} -(78,1,1) = {" -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -"} -(79,1,1) = {" -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -"} -(80,1,1) = {" -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -hl -"} diff --git a/maps/antag_spawn/heist/heist.dm b/maps/antag_spawn/heist/heist.dm deleted file mode 100644 index edf6b61791fc4..0000000000000 --- a/maps/antag_spawn/heist/heist.dm +++ /dev/null @@ -1,61 +0,0 @@ -/datum/map_template/ruin/antag_spawn/heist - name = "Heist Base" - suffixes = list("heist/heist_base.dmm") - shuttles_to_initialise = list(/datum/shuttle/autodock/multi/antag/skipjack) - apc_test_exempt_areas = list( - /area/map_template/skipjack_station = NO_SCRUBBER|NO_VENT|NO_APC - ) - -/datum/shuttle/autodock/multi/antag/skipjack - name = "Skipjack" - defer_initialisation = TRUE - warmup_time = 0 - destination_tags = list( - "nav_skipjack_dock", - "nav_skipjack_start" - ) - shuttle_area = /area/map_template/skipjack_station/start - dock_target = "skipjack_shuttle" - current_location = "nav_skipjack_start" - landmark_transition = "nav_skipjack_transition" - announcer = "Proximity Sensor Array" - home_waypoint = "nav_skipjack_start" - arrival_message = "Attention, vessel detected entering vessel proximity." - departure_message = "Attention, vessel detected leaving vessel proximity." - ceiling_type = /turf/simulated/floor/shuttle_ceiling/heist - -/obj/effect/shuttle_landmark/skipjack/start - name = "Raider Outpost" - landmark_tag = "nav_skipjack_start" - docking_controller = "skipjack_base" - -/obj/effect/shuttle_landmark/skipjack/internim - name = "In transit" - landmark_tag = "nav_skipjack_transition" - -/obj/effect/shuttle_landmark/skipjack/dock - name = "Docking Port" - landmark_tag = "nav_skipjack_dock" - docking_controller = "skipjack_shuttle_dock_airlock" - -//Areas -/area/map_template/skipjack_station - name = "Raider Outpost" - icon_state = "yellow" - requires_power = 0 - req_access = list(access_syndicate) - -/area/map_template/skipjack_station/start - name = "\improper Skipjack" - icon_state = "yellow" - req_access = list(access_syndicate) - area_flags = AREA_FLAG_RAD_SHIELDED | AREA_FLAG_ION_SHIELDED - -/area/map_template/syndicate_mothership/raider_base - name = "\improper Raider Base" - requires_power = 0 - dynamic_lighting = 0 - req_access = list(access_syndicate) - -/turf/simulated/floor/shuttle_ceiling/heist - color = COLOR_DARK_BROWN \ No newline at end of file diff --git a/maps/antag_spawn/heist/heist_base.dmm b/maps/antag_spawn/heist/heist_base.dmm deleted file mode 100644 index f9648e7bed6fd..0000000000000 --- a/maps/antag_spawn/heist/heist_base.dmm +++ /dev/null @@ -1,6971 +0,0 @@ -//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE -"aa" = ( -/turf/space, -/area/space) -"ab" = ( -/turf/simulated/mineral, -/area/space) -"ac" = ( -/turf/unsimulated/mineral, -/area/space) -"ad" = ( -/turf/unsimulated/wall, -/area/space) -"ae" = ( -/turf/unsimulated/wall, -/area/map_template/syndicate_mothership/raider_base) -"af" = ( -/obj/random/junk, -/turf/unsimulated/floor{ - icon_state = "dark" - }, -/area/map_template/syndicate_mothership/raider_base) -"ag" = ( -/obj/structure/closet/secure_closet/freezer/kitchen, -/turf/unsimulated/floor{ - icon_state = "white" - }, -/area/map_template/syndicate_mothership/raider_base) -"ah" = ( -/obj/structure/table/reinforced, -/obj/item/tray{ - pixel_y = 5 - }, -/turf/unsimulated/floor{ - icon_state = "white" - }, -/area/map_template/syndicate_mothership/raider_base) -"ai" = ( -/obj/structure/table/standard, -/turf/unsimulated/floor{ - icon_state = "white" - }, -/area/map_template/syndicate_mothership/raider_base) -"aj" = ( -/turf/unsimulated/floor{ - icon_state = "plating"; - name = "plating" - }, -/area/map_template/syndicate_mothership/raider_base) -"ak" = ( -/obj/structure/closet/secure_closet/freezer/fridge, -/turf/unsimulated/floor{ - icon_state = "white" - }, -/area/map_template/syndicate_mothership/raider_base) -"al" = ( -/obj/random/trash, -/turf/unsimulated/floor{ - icon_state = "white" - }, -/area/map_template/syndicate_mothership/raider_base) -"am" = ( -/obj/structure/table/standard, -/obj/machinery/chemical_dispenser/bar_soft/full, -/turf/unsimulated/floor{ - icon_state = "white" - }, -/area/map_template/syndicate_mothership/raider_base) -"an" = ( -/turf/unsimulated/floor{ - icon_state = "dark" - }, -/area/map_template/syndicate_mothership/raider_base) -"ao" = ( -/turf/unsimulated/floor{ - icon_state = "white" - }, -/area/map_template/syndicate_mothership/raider_base) -"ap" = ( -/obj/structure/table/reinforced, -/obj/machinery/microwave{ - pixel_x = -1; - pixel_y = 8 - }, -/turf/unsimulated/floor{ - icon_state = "white" - }, -/area/map_template/syndicate_mothership/raider_base) -"aq" = ( -/turf/unsimulated/floor{ - icon_state = "asteroid" - }, -/area/map_template/syndicate_mothership/raider_base) -"ar" = ( -/obj/machinery/door/airlock/hatch{ - name = "\improper NO DUST BREATHER ALLOWED" - }, -/turf/unsimulated/floor{ - icon_state = "dark" - }, -/area/map_template/syndicate_mothership/raider_base) -"as" = ( -/obj/machinery/vending/snack{ - name = "Getmore Chocolate Corp"; - prices = list() - }, -/turf/unsimulated/floor{ - icon_state = "dark" - }, -/area/map_template/syndicate_mothership/raider_base) -"at" = ( -/obj/structure/kitchenspike, -/turf/unsimulated/floor{ - icon_state = "white" - }, -/area/map_template/syndicate_mothership/raider_base) -"aw" = ( -/obj/random/trash, -/turf/unsimulated/floor{ - icon_state = "plating"; - name = "plating" - }, -/area/map_template/syndicate_mothership/raider_base) -"ax" = ( -/obj/item/device/radio/intercom/raider{ - dir = 4; - pixel_x = -22 - }, -/turf/unsimulated/floor{ - icon_state = "white" - }, -/area/map_template/syndicate_mothership/raider_base) -"ay" = ( -/obj/random/junk, -/turf/unsimulated/floor{ - icon_state = "white" - }, -/area/map_template/syndicate_mothership/raider_base) -"az" = ( -/obj/random/trash, -/obj/item/reagent_containers/glass/bucket, -/turf/unsimulated/floor{ - icon_state = "plating"; - name = "plating" - }, -/area/map_template/syndicate_mothership/raider_base) -"aA" = ( -/obj/structure/aliumizer, -/turf/unsimulated/floor{ - icon_state = "asteroid" - }, -/area/map_template/syndicate_mothership/raider_base) -"aB" = ( -/obj/random/coin, -/turf/unsimulated/floor{ - icon_state = "asteroid" - }, -/area/map_template/syndicate_mothership/raider_base) -"aC" = ( -/turf/simulated/mineral, -/area/map_template/syndicate_mothership/raider_base) -"aD" = ( -/obj/machinery/door/airlock/hatch, -/turf/unsimulated/floor{ - icon_state = "dark" - }, -/area/map_template/syndicate_mothership/raider_base) -"aE" = ( -/obj/effect/decal/cleanable/blood, -/turf/unsimulated/floor{ - icon_state = "white" - }, -/area/map_template/syndicate_mothership/raider_base) -"aF" = ( -/obj/machinery/gibber, -/turf/unsimulated/floor{ - icon_state = "white" - }, -/area/map_template/syndicate_mothership/raider_base) -"aG" = ( -/obj/structure/reagent_dispensers/fueltank, -/turf/unsimulated/floor{ - icon_state = "plating"; - name = "plating" - }, -/area/map_template/syndicate_mothership/raider_base) -"aH" = ( -/obj/structure/hygiene/urinal{ - pixel_y = 32 - }, -/obj/item/soap, -/obj/item/storage/box/detergent{ - desc = "A bag full of juicy, yummy detergent pods. Warranty void if swallowed." - }, -/obj/item/mop, -/obj/item/reagent_containers/glass/bucket, -/turf/unsimulated/floor{ - icon_state = "freezerfloor" - }, -/area/map_template/syndicate_mothership/raider_base) -"aI" = ( -/obj/structure/hygiene/urinal{ - pixel_y = 32 - }, -/turf/unsimulated/floor{ - icon_state = "freezerfloor" - }, -/area/map_template/syndicate_mothership/raider_base) -"aJ" = ( -/obj/structure/hygiene/urinal{ - pixel_y = 32 - }, -/obj/random/trash, -/turf/unsimulated/floor{ - icon_state = "freezerfloor" - }, -/area/map_template/syndicate_mothership/raider_base) -"aK" = ( -/obj/structure/bed, -/obj/effect/decal/cleanable/dirt, -/obj/structure/sign/monkey_painting{ - pixel_x = -28; - pixel_y = 4 - }, -/obj/effect/floor_decal/carpet{ - dir = 8 - }, -/obj/effect/floor_decal/carpet{ - dir = 1 - }, -/obj/effect/floor_decal/carpet{ - dir = 9 - }, -/obj/item/bedsheet/green, -/obj/structure/curtain/open/bed, -/turf/unsimulated/floor{ - icon_state = "carpet"; - name = "carpet" - }, -/area/map_template/syndicate_mothership/raider_base) -"aL" = ( -/obj/effect/landmark{ - name = "voxstart" - }, -/obj/effect/floor_decal/carpet{ - dir = 1 - }, -/turf/unsimulated/floor{ - icon_state = "carpet"; - name = "carpet" - }, -/area/map_template/syndicate_mothership/raider_base) -"aM" = ( -/obj/effect/floor_decal/carpet{ - dir = 1 - }, -/turf/unsimulated/floor{ - icon_state = "carpet"; - name = "carpet" - }, -/area/map_template/syndicate_mothership/raider_base) -"aN" = ( -/obj/effect/floor_decal/carpet{ - dir = 1 - }, -/obj/random/trash, -/turf/unsimulated/floor{ - icon_state = "carpet"; - name = "carpet" - }, -/area/map_template/syndicate_mothership/raider_base) -"aO" = ( -/obj/structure/bed, -/obj/effect/floor_decal/carpet{ - dir = 4 - }, -/obj/effect/floor_decal/carpet{ - dir = 1 - }, -/obj/effect/floor_decal/carpet{ - dir = 5 - }, -/obj/item/bedsheet/rd, -/obj/structure/curtain/open/bed, -/turf/unsimulated/floor{ - icon_state = "carpet"; - name = "carpet" - }, -/area/map_template/syndicate_mothership/raider_base) -"aP" = ( -/obj/machinery/door/airlock/hatch, -/turf/unsimulated/floor{ - icon_state = "plating"; - name = "plating" - }, -/area/map_template/syndicate_mothership/raider_base) -"aQ" = ( -/obj/random/junk, -/turf/unsimulated/floor{ - icon_state = "asteroid" - }, -/area/map_template/syndicate_mothership/raider_base) -"aR" = ( -/obj/random/ammo, -/turf/unsimulated/floor{ - icon_state = "asteroid" - }, -/area/map_template/syndicate_mothership/raider_base) -"aS" = ( -/turf/unsimulated/floor{ - icon_state = "freezerfloor" - }, -/area/map_template/syndicate_mothership/raider_base) -"aT" = ( -/obj/effect/decal/cleanable/blood, -/turf/unsimulated/floor{ - icon_state = "freezerfloor" - }, -/area/map_template/syndicate_mothership/raider_base) -"aU" = ( -/obj/machinery/door/airlock/hatch{ - name = "\improper LITTLE VOX ROOM" - }, -/turf/unsimulated/floor{ - icon_state = "dark" - }, -/area/map_template/syndicate_mothership/raider_base) -"aV" = ( -/obj/item/device/radio/intercom/raider{ - dir = 8; - pixel_x = 22 - }, -/turf/unsimulated/floor{ - icon_state = "dark" - }, -/area/map_template/syndicate_mothership/raider_base) -"aW" = ( -/obj/structure/bed, -/obj/effect/floor_decal/carpet{ - dir = 8 - }, -/obj/item/bedsheet/hos, -/obj/structure/curtain/open/bed, -/turf/unsimulated/floor{ - icon_state = "carpet"; - name = "carpet" - }, -/area/map_template/syndicate_mothership/raider_base) -"aX" = ( -/obj/effect/landmark{ - name = "voxstart" - }, -/turf/unsimulated/floor{ - icon_state = "carpet"; - name = "carpet" - }, -/area/map_template/syndicate_mothership/raider_base) -"aY" = ( -/turf/unsimulated/floor{ - icon_state = "carpet"; - name = "carpet" - }, -/area/map_template/syndicate_mothership/raider_base) -"aZ" = ( -/obj/structure/bed, -/obj/effect/floor_decal/carpet{ - dir = 4 - }, -/obj/item/bedsheet/rainbow, -/obj/structure/curtain/open/bed, -/turf/unsimulated/floor{ - icon_state = "carpet"; - name = "carpet" - }, -/area/map_template/syndicate_mothership/raider_base) -"ba" = ( -/obj/structure/hygiene/sink{ - dir = 8; - pixel_x = -12; - pixel_y = 2 - }, -/obj/item/vox_changer/raider{ - pixel_x = -28 - }, -/turf/unsimulated/floor{ - icon_state = "freezerfloor" - }, -/area/map_template/syndicate_mothership/raider_base) -"bb" = ( -/obj/structure/bed, -/obj/effect/floor_decal/carpet{ - dir = 8 - }, -/obj/item/bedsheet/clown, -/obj/structure/curtain/open/bed, -/turf/unsimulated/floor{ - icon_state = "carpet"; - name = "carpet" - }, -/area/map_template/syndicate_mothership/raider_base) -"bc" = ( -/obj/structure/bed, -/obj/effect/floor_decal/carpet{ - dir = 4 - }, -/obj/item/bedsheet/orange, -/obj/structure/curtain/open/bed, -/turf/unsimulated/floor{ - icon_state = "carpet"; - name = "carpet" - }, -/area/map_template/syndicate_mothership/raider_base) -"bd" = ( -/obj/effect/decal/cleanable/cobweb, -/turf/unsimulated/floor{ - icon_state = "plating"; - name = "plating" - }, -/area/map_template/syndicate_mothership/raider_base) -"be" = ( -/obj/machinery/light/small{ - dir = 1 - }, -/turf/unsimulated/floor{ - icon_state = "plating"; - name = "plating" - }, -/area/map_template/syndicate_mothership/raider_base) -"bf" = ( -/obj/effect/decal/cleanable/dirt, -/turf/unsimulated/floor{ - icon_state = "plating"; - name = "plating" - }, -/area/map_template/syndicate_mothership/raider_base) -"bg" = ( -/obj/structure/sign/warning/nosmoking_1{ - desc = "A warning sign which reads 'NO SMOKING'. Someone has scratched a variety of crude words in gutter across the entire sign."; - pixel_y = 32 - }, -/obj/item/storage/fancy/cigarettes/dromedaryco, -/turf/unsimulated/floor{ - icon_state = "plating"; - name = "plating" - }, -/area/map_template/syndicate_mothership/raider_base) -"bh" = ( -/obj/effect/decal/cleanable/blood/oil, -/turf/unsimulated/floor{ - icon_state = "plating"; - name = "plating" - }, -/area/map_template/syndicate_mothership/raider_base) -"bi" = ( -/obj/effect/decal/cleanable/cobweb2{ - icon_state = "spiderling"; - name = "dead spider" - }, -/turf/unsimulated/floor{ - icon_state = "plating"; - name = "plating" - }, -/area/map_template/syndicate_mothership/raider_base) -"bj" = ( -/obj/item/clothing/head/xenos, -/turf/unsimulated/floor{ - icon_state = "asteroid" - }, -/area/map_template/syndicate_mothership/raider_base) -"bk" = ( -/obj/random/trash, -/turf/unsimulated/floor{ - icon_state = "asteroid" - }, -/area/map_template/syndicate_mothership/raider_base) -"bl" = ( -/obj/structure/hygiene/sink{ - dir = 8; - pixel_x = -12; - pixel_y = 2 - }, -/obj/item/storage/mirror{ - dir = 4; - pixel_x = -28 - }, -/turf/unsimulated/floor{ - icon_state = "freezerfloor" - }, -/area/map_template/syndicate_mothership/raider_base) -"bm" = ( -/obj/structure/hygiene/shower{ - dir = 1 - }, -/turf/unsimulated/floor{ - icon_state = "plating"; - name = "plating" - }, -/area/map_template/syndicate_mothership/raider_base) -"bn" = ( -/obj/structure/hygiene/shower{ - dir = 1 - }, -/turf/unsimulated/floor{ - icon_state = "freezerfloor" - }, -/area/map_template/syndicate_mothership/raider_base) -"bo" = ( -/obj/structure/table/woodentable, -/obj/effect/floor_decal/carpet{ - dir = 8 - }, -/obj/random/junk, -/obj/random/maintenance, -/turf/unsimulated/floor{ - icon_state = "carpet"; - name = "carpet" - }, -/area/map_template/syndicate_mothership/raider_base) -"bp" = ( -/obj/structure/table/woodentable, -/obj/random/action_figure, -/obj/random/contraband, -/obj/random/junk, -/obj/effect/floor_decal/carpet{ - dir = 4 - }, -/turf/unsimulated/floor{ - icon_state = "carpet"; - name = "carpet" - }, -/area/map_template/syndicate_mothership/raider_base) -"bq" = ( -/obj/effect/wingrille_spawn/reinforced/crescent, -/turf/unsimulated/floor{ - icon_state = "plating"; - name = "plating" - }, -/area/map_template/syndicate_mothership/raider_base) -"br" = ( -/obj/item/device/radio/intercom/raider{ - dir = 4; - pixel_x = -22 - }, -/turf/unsimulated/floor{ - icon_state = "dark" - }, -/area/map_template/syndicate_mothership/raider_base) -"bs" = ( -/obj/effect/decal/cleanable/spiderling_remains, -/turf/unsimulated/floor{ - icon_state = "plating"; - name = "plating" - }, -/area/map_template/syndicate_mothership/raider_base) -"bt" = ( -/obj/machinery/atmospherics/pipe/simple/visible{ - dir = 6 - }, -/turf/unsimulated/floor{ - icon_state = "plating"; - name = "plating" - }, -/area/map_template/syndicate_mothership/raider_base) -"bu" = ( -/obj/structure/window/reinforced{ - dir = 4 - }, -/obj/machinery/atmospherics/portables_connector{ - dir = 8 - }, -/obj/random/toolbox, -/turf/unsimulated/floor{ - icon_state = "plating"; - name = "plating" - }, -/area/map_template/syndicate_mothership/raider_base) -"bv" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/floor_decal/industrial/hatch/yellow, -/obj/machinery/portable_atmospherics/canister/air/airlock, -/obj/structure/window/reinforced{ - dir = 8 - }, -/turf/unsimulated/floor{ - icon_state = "plating"; - name = "plating" - }, -/area/map_template/syndicate_mothership/raider_base) -"bw" = ( -/obj/effect/floor_decal/industrial/hatch/yellow, -/obj/machinery/portable_atmospherics/canister/oxygen, -/turf/unsimulated/floor{ - icon_state = "plating"; - name = "plating" - }, -/area/map_template/syndicate_mothership/raider_base) -"bx" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/floor_decal/industrial/hatch/yellow, -/obj/machinery/portable_atmospherics/canister/nitrogen, -/turf/unsimulated/floor{ - icon_state = "plating"; - name = "plating" - }, -/area/map_template/syndicate_mothership/raider_base) -"by" = ( -/obj/item/clothing/mask/gas/swat{ - desc = "A close-fitting mask clearly not made for a human face."; - name = "\improper alien mask" - }, -/turf/unsimulated/floor{ - icon_state = "asteroid" - }, -/area/map_template/syndicate_mothership/raider_base) -"bz" = ( -/obj/item/xenos_claw, -/turf/unsimulated/floor{ - icon_state = "asteroid" - }, -/area/map_template/syndicate_mothership/raider_base) -"bA" = ( -/obj/structure/table/rack, -/obj/item/clothing/suit/space/vox/carapace, -/obj/item/clothing/head/helmet/space/vox/carapace, -/obj/item/clothing/shoes/magboots/vox, -/obj/item/clothing/gloves/vox, -/obj/item/gun/launcher/alien/spikethrower, -/obj/item/clothing/under/vox/vox_casual, -/turf/unsimulated/floor{ - icon_state = "asteroid" - }, -/area/map_template/syndicate_mothership/raider_base) -"bB" = ( -/obj/structure/table/rack, -/obj/item/clothing/suit/space/vox/carapace, -/obj/item/clothing/head/helmet/space/vox/carapace, -/obj/item/clothing/shoes/magboots/vox, -/obj/item/clothing/gloves/vox, -/obj/item/gun/launcher/alien/spikethrower, -/obj/item/clothing/under/vox/vox_robes, -/turf/unsimulated/floor{ - icon_state = "asteroid" - }, -/area/map_template/syndicate_mothership/raider_base) -"bC" = ( -/obj/effect/decal/cleanable/cobweb2{ - icon_state = "spiderling"; - name = "dead spider" - }, -/turf/unsimulated/floor{ - icon_state = "dark" - }, -/area/map_template/syndicate_mothership/raider_base) -"bD" = ( -/obj/item/device/radio/intercom/raider{ - dir = 1; - pixel_y = -22 - }, -/obj/effect/floor_decal/carpet, -/obj/effect/floor_decal/carpet{ - dir = 8 - }, -/obj/effect/floor_decal/carpet{ - dir = 10 - }, -/turf/unsimulated/floor{ - icon_state = "carpet"; - name = "carpet" - }, -/area/map_template/syndicate_mothership/raider_base) -"bE" = ( -/obj/effect/floor_decal/carpet, -/turf/unsimulated/floor{ - icon_state = "carpet"; - name = "carpet" - }, -/area/map_template/syndicate_mothership/raider_base) -"bF" = ( -/obj/structure/closet{ - name = "Clothing Storage" - }, -/obj/effect/floor_decal/carpet, -/obj/item/clothing/under/lawyer/black, -/obj/item/clothing/under/lawyer/bluesuit, -/obj/item/clothing/under/rank/mailman, -/obj/item/clothing/accessory/storage/webbing_large, -/obj/item/clothing/under/rank/dispatch, -/turf/unsimulated/floor{ - icon_state = "carpet"; - name = "carpet" - }, -/area/map_template/syndicate_mothership/raider_base) -"bG" = ( -/obj/structure/undies_wardrobe, -/obj/effect/floor_decal/carpet, -/turf/unsimulated/floor{ - icon_state = "carpet"; - name = "carpet" - }, -/area/map_template/syndicate_mothership/raider_base) -"bH" = ( -/obj/random/junk, -/obj/effect/floor_decal/carpet, -/turf/unsimulated/floor{ - icon_state = "carpet"; - name = "carpet" - }, -/area/map_template/syndicate_mothership/raider_base) -"bI" = ( -/obj/effect/floor_decal/carpet{ - dir = 4 - }, -/obj/effect/floor_decal/carpet, -/obj/effect/floor_decal/carpet{ - dir = 6 - }, -/turf/unsimulated/floor{ - icon_state = "carpet"; - name = "carpet" - }, -/area/map_template/syndicate_mothership/raider_base) -"bJ" = ( -/turf/unsimulated/floor{ - icon_state = "wood" - }, -/area/map_template/syndicate_mothership/raider_base) -"bK" = ( -/turf/unsimulated/floor{ - icon = 'icons/turf/flooring/wood.dmi'; - icon_state = "wood_broken2" - }, -/area/map_template/syndicate_mothership/raider_base) -"bL" = ( -/obj/structure/table/woodentable, -/obj/item/tray{ - pixel_y = 5 - }, -/obj/random/backpack, -/turf/unsimulated/floor{ - icon_state = "wood" - }, -/area/map_template/syndicate_mothership/raider_base) -"bM" = ( -/obj/structure/table/woodentable, -/obj/item/storage/box/glasses/rocks, -/turf/unsimulated/floor{ - icon_state = "wood" - }, -/area/map_template/syndicate_mothership/raider_base) -"bN" = ( -/obj/structure/table/woodentable, -/obj/machinery/chemical_dispenser/bar_soft/full, -/turf/unsimulated/floor{ - icon = 'icons/turf/flooring/wood.dmi'; - icon_state = "wood_broken6" - }, -/area/map_template/syndicate_mothership/raider_base) -"bO" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/washing_machine, -/turf/unsimulated/floor{ - icon_state = "plating"; - name = "plating" - }, -/area/map_template/syndicate_mothership/raider_base) -"bP" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/portables_connector{ - dir = 4 - }, -/turf/unsimulated/floor{ - icon_state = "plating"; - name = "plating" - }, -/area/map_template/syndicate_mothership/raider_base) -"bQ" = ( -/obj/machinery/atmospherics/omni/mixer{ - tag_east = 1; - tag_east_con = 0.5; - tag_north = 1; - tag_north_con = 2; - tag_south = null; - tag_west = 1; - tag_west_con = 0.5; - use_power = 0 - }, -/turf/unsimulated/floor{ - icon_state = "plating"; - name = "plating" - }, -/area/map_template/syndicate_mothership/raider_base) -"bR" = ( -/obj/structure/window/reinforced{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/portables_connector{ - dir = 8 - }, -/turf/unsimulated/floor{ - icon_state = "plating"; - name = "plating" - }, -/area/map_template/syndicate_mothership/raider_base) -"bS" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/floor_decal/industrial/hatch/yellow, -/obj/machinery/portable_atmospherics/canister/oxygen, -/turf/unsimulated/floor{ - icon_state = "plating"; - name = "plating" - }, -/area/map_template/syndicate_mothership/raider_base) -"bT" = ( -/obj/item/pizzabox/meat, -/turf/unsimulated/floor{ - icon_state = "asteroid" - }, -/area/map_template/syndicate_mothership/raider_base) -"bU" = ( -/obj/structure/table/rack, -/obj/item/clothing/suit/space/vox/medic, -/obj/item/clothing/head/helmet/space/vox/medic, -/obj/item/clothing/shoes/magboots/vox, -/obj/item/clothing/gloves/vox, -/obj/item/clothing/under/vox/vox_robes, -/obj/item/gun/projectile/dartgun/vox/raider, -/turf/unsimulated/floor{ - icon_state = "asteroid" - }, -/area/map_template/syndicate_mothership/raider_base) -"bV" = ( -/obj/item/stool/padded, -/turf/unsimulated/floor{ - icon_state = "wood" - }, -/area/map_template/syndicate_mothership/raider_base) -"bW" = ( -/obj/effect/decal/cleanable/generic, -/obj/item/stool/padded, -/turf/unsimulated/floor{ - icon_state = "wood" - }, -/area/map_template/syndicate_mothership/raider_base) -"bX" = ( -/obj/structure/table/rack, -/obj/item/clothing/suit/space/vox/pressure, -/obj/item/clothing/head/helmet/space/vox/pressure, -/obj/item/clothing/shoes/magboots/vox, -/obj/item/clothing/gloves/vox, -/obj/item/clothing/under/vox/vox_casual, -/obj/item/gun/projectile/dartgun/vox/raider, -/turf/unsimulated/floor{ - icon_state = "asteroid" - }, -/area/map_template/syndicate_mothership/raider_base) -"bY" = ( -/obj/structure/table/rack, -/obj/item/clothing/suit/space/vox/stealth, -/obj/item/clothing/head/helmet/space/vox/stealth, -/obj/item/clothing/shoes/magboots/vox, -/obj/item/clothing/gloves/vox, -/obj/random/glasses, -/obj/item/clothing/under/vox/vox_robes, -/obj/item/gun/projectile/dartgun/vox/medical, -/turf/unsimulated/floor{ - icon_state = "asteroid" - }, -/area/map_template/syndicate_mothership/raider_base) -"bZ" = ( -/obj/machinery/acting/changer, -/turf/unsimulated/floor{ - icon_state = "dark" - }, -/area/map_template/syndicate_mothership/raider_base) -"ca" = ( -/obj/structure/table/woodentable, -/obj/item/pizzabox/meat, -/turf/unsimulated/floor{ - icon_state = "wood" - }, -/area/map_template/syndicate_mothership/raider_base) -"cb" = ( -/obj/structure/table/woodentable, -/obj/item/material/ashtray/bronze, -/obj/item/trash/cigbutt/cigarbutt, -/turf/unsimulated/floor{ - icon_state = "wood" - }, -/area/map_template/syndicate_mothership/raider_base) -"cc" = ( -/obj/structure/table/woodentable, -/obj/item/reagent_containers/glass/rag, -/obj/random/ammo, -/turf/unsimulated/floor{ - icon_state = "wood" - }, -/area/map_template/syndicate_mothership/raider_base) -"cd" = ( -/obj/machinery/vending/cigarette{ - name = "hacked cigarette machine"; - prices = list(); - products = list(/obj/item/storage/fancy/cigarettes = 10, /obj/item/storage/box/matches = 10, /obj/item/flame/lighter/zippo/random = 4, /obj/item/clothing/mask/smokable/cigarette/cigar/havana = 2) - }, -/turf/unsimulated/floor{ - icon_state = "dark" - }, -/area/map_template/syndicate_mothership/raider_base) -"ce" = ( -/obj/item/tank/nitrogen, -/turf/unsimulated/floor{ - icon_state = "asteroid" - }, -/area/map_template/syndicate_mothership/raider_base) -"cf" = ( -/obj/random/backpack, -/turf/unsimulated/floor{ - icon_state = "asteroid" - }, -/area/map_template/syndicate_mothership/raider_base) -"cg" = ( -/obj/structure/sign/poster{ - pixel_y = -32 - }, -/turf/unsimulated/floor{ - icon_state = "dark" - }, -/area/map_template/syndicate_mothership/raider_base) -"ch" = ( -/turf/unsimulated/floor{ - icon = 'icons/turf/flooring/wood.dmi'; - icon_state = "wood_broken1" - }, -/area/map_template/syndicate_mothership/raider_base) -"ci" = ( -/obj/item/stool/padded, -/turf/unsimulated/floor{ - icon = 'icons/turf/flooring/wood.dmi'; - icon_state = "wood_broken1" - }, -/area/map_template/syndicate_mothership/raider_base) -"cj" = ( -/mob/living/simple_animal/hostile/retaliate/parrot{ - ears = list(); - name = "\proper Meatbag"; - say_list_type = /datum/say_list/parrot/heist - }, -/turf/unsimulated/floor{ - icon_state = "asteroid" - }, -/area/map_template/syndicate_mothership/raider_base) -"ck" = ( -/obj/structure/grille, -/obj/structure/lattice, -/turf/space, -/area/space) -"cl" = ( -/obj/random/junk, -/obj/item/device/radio/intercom/raider{ - dir = 4; - pixel_x = -22 - }, -/turf/unsimulated/floor{ - icon_state = "dark" - }, -/area/map_template/syndicate_mothership/raider_base) -"cm" = ( -/obj/item/device/radio/intercom/raider{ - dir = 4; - pixel_x = -22 - }, -/obj/structure/flora/pottedplant{ - desc = "Used to bring the room together...before the accident."; - icon_state = "plant-25"; - name = "Jamie" - }, -/turf/unsimulated/floor{ - icon_state = "wood" - }, -/area/map_template/syndicate_mothership/raider_base) -"cn" = ( -/obj/structure/reagent_dispensers/beerkeg, -/turf/unsimulated/floor{ - icon = 'icons/turf/flooring/wood.dmi'; - icon_state = "wood_broken1" - }, -/area/map_template/syndicate_mothership/raider_base) -"co" = ( -/obj/machinery/embedded_controller/radio/simple_docking_controller{ - frequency = 1380; - id_tag = "skipjack_base"; - pixel_x = -25; - pixel_y = -5 - }, -/turf/unsimulated/floor{ - icon_state = "dark" - }, -/area/map_template/syndicate_mothership/raider_base) -"cp" = ( -/obj/structure/closet/crate, -/obj/item/tank/nitrogen, -/obj/item/tank/nitrogen, -/obj/item/tank/nitrogen, -/obj/item/tank/nitrogen, -/obj/item/tank/nitrogen, -/obj/item/tank/nitrogen, -/obj/item/clothing/mask/gas/swat/vox, -/obj/item/clothing/mask/gas/swat/vox, -/obj/item/clothing/mask/gas/swat/vox, -/obj/item/clothing/mask/gas/swat/vox, -/obj/item/clothing/mask/gas/swat/vox, -/obj/item/clothing/mask/gas/swat/vox, -/turf/unsimulated/floor{ - icon_state = "asteroid" - }, -/area/map_template/syndicate_mothership/raider_base) -"cq" = ( -/obj/machinery/portable_atmospherics/canister/nitrogen, -/turf/unsimulated/floor{ - icon_state = "asteroid" - }, -/area/map_template/syndicate_mothership/raider_base) -"cr" = ( -/obj/item/clothing/head/philosopher_wig, -/turf/unsimulated/floor{ - icon_state = "asteroid" - }, -/area/map_template/syndicate_mothership/raider_base) -"cs" = ( -/obj/structure/lattice, -/turf/space, -/area/space) -"ct" = ( -/obj/machinery/door/airlock/external, -/turf/unsimulated/floor{ - icon_state = "dark" - }, -/area/map_template/syndicate_mothership/raider_base) -"cu" = ( -/obj/machinery/door/airlock/external{ - frequency = 1380; - id_tag = "skipjack_base_hatch" - }, -/turf/unsimulated/floor{ - icon_state = "dark" - }, -/area/map_template/syndicate_mothership/raider_base) -"cv" = ( -/obj/item/trash/cheesie, -/turf/space, -/area/space) -"cw" = ( -/obj/effect/paint/black, -/turf/simulated/wall/voxshuttle, -/area/map_template/skipjack_station/start) -"cx" = ( -/obj/machinery/door/airlock/hatch{ - frequency = 1331; - icon_state = "door_closed"; - id_tag = "vox_northwest_lock" - }, -/obj/machinery/shield_diffuser, -/turf/simulated/floor/plating, -/area/map_template/skipjack_station/start) -"cy" = ( -/obj/machinery/access_button{ - command = "cycle_exterior"; - frequency = 1331; - master_tag = "vox_west_control"; - req_access = list("ACCESS_SYNDICATE") - }, -/obj/effect/paint/black, -/turf/simulated/wall/voxshuttle, -/area/map_template/skipjack_station/start) -"cz" = ( -/obj/machinery/door/blast/regular{ - density = 0; - icon_state = "pdoor0"; - id_tag = "SkipjackShuttersNorth"; - name = "Blast Doors"; - opacity = 0 - }, -/obj/effect/wallframe_spawn/reinforced/titanium, -/obj/effect/paint/brown, -/turf/simulated/floor/plating, -/area/map_template/skipjack_station/start) -"cA" = ( -/obj/machinery/door/airlock/external{ - frequency = 1380; - id_tag = "skipjack_shuttle_outer"; - name = "Ship External Access" - }, -/obj/machinery/shield_diffuser, -/obj/effect/shuttle_landmark/skipjack/start, -/turf/simulated/floor/plating, -/area/map_template/skipjack_station/start) -"cB" = ( -/obj/machinery/atmospherics/unary/vent_pump/high_volume/shuttle{ - id_tag = "vox_west_vent" - }, -/obj/random/junk, -/turf/simulated/floor/plating, -/area/map_template/skipjack_station/start) -"cC" = ( -/obj/machinery/airlock_sensor{ - frequency = 1331; - id_tag = "vox_west_sensor"; - pixel_x = 25 - }, -/turf/simulated/floor/plating, -/area/map_template/skipjack_station/start) -"cD" = ( -/obj/machinery/constructable_frame/computerframe, -/turf/simulated/floor/shuttle/red, -/area/map_template/skipjack_station/start) -"cE" = ( -/obj/machinery/computer/shuttle_control/multi/vox, -/turf/simulated/floor/shuttle/red, -/area/map_template/skipjack_station/start) -"cF" = ( -/obj/structure/table/steel, -/obj/random/plushie, -/turf/simulated/floor/shuttle/red, -/area/map_template/skipjack_station/start) -"cG" = ( -/obj/random/trash, -/obj/machinery/airlock_sensor{ - frequency = 1380; - id_tag = "skipjack_shuttle_sensor"; - pixel_x = 8; - pixel_y = 25 - }, -/turf/simulated/floor/plating, -/area/map_template/skipjack_station/start) -"cH" = ( -/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{ - id_tag = "skipjack_shuttle_pump" - }, -/turf/simulated/floor/plating, -/area/map_template/skipjack_station/start) -"cI" = ( -/obj/machinery/atmospherics/pipe/manifold/visible{ - dir = 8 - }, -/obj/machinery/meter, -/obj/item/device/radio/intercom/hailing{ - dir = 4; - pixel_x = -24 - }, -/turf/simulated/floor/plating, -/area/map_template/skipjack_station/start) -"cJ" = ( -/obj/machinery/embedded_controller/radio/airlock/airlock_controller{ - frequency = 1331; - id_tag = "vox_west_control"; - pixel_x = 24; - tag_airpump = "vox_west_vent"; - tag_chamber_sensor = "vox_west_sensor"; - tag_exterior_door = "vox_northwest_lock"; - tag_interior_door = "vox_southwest_lock" - }, -/obj/machinery/atmospherics/unary/vent_pump/high_volume/shuttle{ - dir = 8; - id_tag = "vox_west_vent" - }, -/obj/machinery/light/small, -/turf/simulated/floor/plating, -/area/map_template/skipjack_station/start) -"cK" = ( -/obj/machinery/light/small{ - dir = 8 - }, -/obj/machinery/computer/station_alert/all{ - dir = 4 - }, -/turf/simulated/floor/shuttle/red, -/area/map_template/skipjack_station/start) -"cL" = ( -/obj/structure/bed/chair/shuttle{ - dir = 8 - }, -/turf/simulated/floor/shuttle/red, -/area/map_template/skipjack_station/start) -"cM" = ( -/obj/machinery/button/blast_door{ - id_tag = "SkipjackShuttersNorth"; - name = "Skipjack North Shutters"; - pixel_y = 39 - }, -/obj/machinery/button/blast_door{ - id_tag = "SkipjackShuttersWest"; - name = "Skipjack West Shutters"; - pixel_x = -5; - pixel_y = 31 - }, -/obj/machinery/button/blast_door{ - id_tag = "SkipjackShuttersEast"; - name = "Skipjack East Shutters"; - pixel_x = 5; - pixel_y = 31 - }, -/turf/simulated/floor/shuttle/red, -/area/map_template/skipjack_station/start) -"cN" = ( -/obj/structure/bed/chair/office/light{ - dir = 4 - }, -/turf/simulated/floor/shuttle/red, -/area/map_template/skipjack_station/start) -"cO" = ( -/obj/machinery/constructable_frame/computerframe, -/obj/machinery/light/small{ - dir = 4; - icon_state = "bulb1" - }, -/turf/simulated/floor/shuttle/red, -/area/map_template/skipjack_station/start) -"cP" = ( -/obj/machinery/light/small, -/obj/machinery/embedded_controller/radio/airlock/docking_port{ - frequency = 1380; - id_tag = "skipjack_shuttle"; - pixel_x = -25; - pixel_y = 8; - req_access = list("ACCESS_SYNDICATE") - }, -/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{ - dir = 4; - id_tag = "skipjack_shuttle_pump" - }, -/turf/simulated/floor/plating, -/area/map_template/skipjack_station/start) -"cQ" = ( -/obj/machinery/atmospherics/pipe/manifold/visible{ - dir = 4 - }, -/obj/machinery/meter, -/obj/item/device/radio/intercom/hailing{ - dir = 8; - pixel_x = 24 - }, -/turf/simulated/floor/plating, -/area/map_template/skipjack_station/start) -"cR" = ( -/obj/effect/paint/brown, -/turf/simulated/wall/voxshuttle, -/area/map_template/skipjack_station/start) -"cS" = ( -/obj/machinery/door/airlock/hatch{ - frequency = 1331; - icon_state = "door_closed"; - id_tag = "vox_southwest_lock" - }, -/obj/machinery/atmospherics/pipe/simple/visible, -/turf/simulated/floor/plating, -/area/map_template/skipjack_station/start) -"cT" = ( -/obj/structure/table/rack, -/obj/random/raider/hardsuit, -/obj/random/glasses, -/obj/item/device/suit_cooling_unit, -/obj/item/device/suit_cooling_unit, -/obj/random/glasses, -/turf/simulated/floor/shuttle/red, -/area/map_template/skipjack_station/start) -"cU" = ( -/turf/simulated/floor/shuttle/red, -/area/map_template/skipjack_station/start) -"cV" = ( -/obj/random/maintenance, -/turf/simulated/floor/shuttle/red, -/area/map_template/skipjack_station/start) -"cW" = ( -/obj/random/junk, -/turf/simulated/floor/shuttle/red, -/area/map_template/skipjack_station/start) -"cX" = ( -/obj/structure/table/rack, -/obj/random/raider/hardsuit, -/obj/item/clothing/head/pirate, -/obj/item/gun/launcher/money, -/turf/simulated/floor/shuttle/red, -/area/map_template/skipjack_station/start) -"cY" = ( -/obj/machinery/atmospherics/pipe/simple/visible, -/obj/machinery/door/airlock/external{ - frequency = 1380; - id_tag = "skipjack_shuttle_inner"; - name = "Ship External Access" - }, -/turf/simulated/floor/plating, -/area/map_template/skipjack_station/start) -"cZ" = ( -/obj/machinery/atmospherics/pipe/simple/visible, -/obj/machinery/access_button{ - command = "cycle_interior"; - frequency = 1331; - master_tag = "vox_west_control"; - pixel_x = -22; - req_access = list("ACCESS_SYNDICATE") - }, -/turf/simulated/floor/plating, -/area/map_template/skipjack_station/start) -"da" = ( -/obj/structure/table/rack, -/obj/random/maintenance, -/obj/item/clothing/shoes/magboots, -/obj/item/tank/oxygen, -/obj/random/voidsuit, -/obj/random/voidhelmet, -/obj/item/material/harpoon, -/obj/random/lilgun, -/turf/simulated/floor/plating, -/area/map_template/skipjack_station/start) -"db" = ( -/obj/machinery/microwave{ - pixel_x = -1; - pixel_y = 8 - }, -/obj/structure/table/steel, -/turf/simulated/floor/plating, -/area/map_template/skipjack_station/start) -"dc" = ( -/obj/item/seeds/potatoseed, -/obj/item/seeds/potatoseed, -/obj/item/seeds/ambrosiavulgarisseed, -/obj/item/material/minihoe, -/obj/item/beartrap, -/obj/structure/table/steel, -/turf/simulated/floor/plating, -/area/map_template/skipjack_station/start) -"dd" = ( -/obj/machinery/vending/hydroseeds, -/turf/simulated/floor/plating, -/area/map_template/skipjack_station/start) -"de" = ( -/obj/structure/table/rack, -/obj/item/melee/energy/sword/pirate, -/obj/item/clothing/suit/pirate, -/obj/item/clothing/suit/pirate, -/obj/item/tank/oxygen, -/obj/item/clothing/shoes/magboots, -/obj/random/voidsuit, -/obj/random/voidhelmet, -/obj/random/maintenance, -/obj/machinery/light/small{ - dir = 8 - }, -/turf/simulated/floor/shuttle/red, -/area/map_template/skipjack_station/start) -"df" = ( -/obj/structure/table/rack, -/obj/item/melee/energy/sword/pirate, -/obj/item/clothing/suit/pirate, -/obj/item/clothing/suit/pirate, -/obj/item/tank/oxygen, -/obj/item/clothing/shoes/magboots, -/obj/random/voidsuit, -/obj/random/voidhelmet, -/obj/random/maintenance, -/obj/machinery/light/small{ - dir = 4; - icon_state = "bulb1" - }, -/turf/simulated/floor/shuttle/red, -/area/map_template/skipjack_station/start) -"dg" = ( -/obj/structure/table/rack, -/obj/item/storage/belt/utility/full, -/obj/item/storage/belt/utility/full, -/obj/item/tape_roll, -/obj/item/device/multitool, -/obj/item/device/multitool, -/obj/item/clothing/shoes/magboots, -/obj/random/maintenance, -/obj/item/tank/oxygen, -/obj/random/voidsuit, -/obj/random/voidhelmet, -/obj/random/maintenance, -/turf/simulated/floor/plating, -/area/map_template/skipjack_station/start) -"dh" = ( -/obj/machinery/washing_machine, -/turf/simulated/floor/plating, -/area/map_template/skipjack_station/start) -"di" = ( -/obj/structure/table/standard, -/obj/item/storage/fancy/cigarettes, -/obj/item/flame/lighter/zippo/random, -/obj/item/clothing/gloves/insulated, -/obj/item/stack/material/steel{ - amount = 50 - }, -/obj/item/stack/material/glass{ - amount = 50 - }, -/obj/item/card/emag, -/turf/simulated/floor/plating, -/area/map_template/skipjack_station/start) -"dj" = ( -/obj/structure/table/rack, -/obj/random/maintenance, -/obj/item/clothing/shoes/magboots, -/obj/item/tank/oxygen, -/obj/random/voidsuit, -/obj/random/voidhelmet, -/obj/random/biggun, -/turf/simulated/floor/plating, -/area/map_template/skipjack_station/start) -"dk" = ( -/obj/machinery/atmospherics/pipe/simple/visible, -/obj/machinery/access_button{ - command = "cycle_interior"; - frequency = 1380; - master_tag = "skipjack_shuttle"; - name = "interior access button"; - pixel_x = 25; - pixel_y = 25; - req_access = list("ACCESS_SYNDICATE") - }, -/turf/simulated/floor/plating, -/area/map_template/skipjack_station/start) -"dl" = ( -/obj/machinery/atmospherics/pipe/simple/visible, -/turf/simulated/floor/plating, -/area/map_template/skipjack_station/start) -"dm" = ( -/turf/simulated/floor/plating, -/area/map_template/skipjack_station/start) -"dn" = ( -/obj/structure/reagent_dispensers/watertank, -/obj/machinery/light/small{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/map_template/skipjack_station/start) -"do" = ( -/obj/effect/wallframe_spawn/reinforced/titanium, -/obj/effect/paint/brown, -/turf/simulated/floor/shuttle/red, -/area/map_template/skipjack_station/start) -"dp" = ( -/obj/machinery/door/airlock/hatch, -/turf/simulated/floor/shuttle/red, -/area/map_template/skipjack_station/start) -"dq" = ( -/obj/machinery/light/small{ - dir = 8 - }, -/obj/structure/table/rack, -/obj/random/maintenance, -/obj/item/clothing/shoes/magboots, -/obj/item/tank/oxygen, -/obj/random/voidsuit, -/obj/random/voidhelmet, -/obj/random/lilgun, -/turf/simulated/floor/plating, -/area/map_template/skipjack_station/start) -"dr" = ( -/obj/random/ammo, -/turf/unsimulated/floor{ - icon_state = "carpet"; - name = "carpet" - }, -/area/map_template/syndicate_mothership/raider_base) -"ds" = ( -/obj/item/robot_parts/head, -/turf/simulated/floor/plating, -/area/map_template/skipjack_station/start) -"dt" = ( -/obj/machinery/door/blast/shutters{ - density = 0; - dir = 4; - icon_state = "shutter0"; - id_tag = "SkipjackShuttersWest"; - name = "Skipjack Shutters"; - opacity = 0 - }, -/obj/effect/wallframe_spawn/reinforced/titanium, -/obj/effect/paint/brown, -/turf/simulated/floor/plating, -/area/map_template/skipjack_station/start) -"du" = ( -/obj/random/trash, -/turf/simulated/floor/plating, -/area/map_template/skipjack_station/start) -"dv" = ( -/obj/random/maintenance, -/turf/simulated/floor/plating, -/area/map_template/skipjack_station/start) -"dw" = ( -/obj/random/trash, -/turf/simulated/floor/shuttle/red, -/area/map_template/skipjack_station/start) -"dx" = ( -/obj/item/robot_parts/l_leg, -/turf/simulated/floor/plating, -/area/map_template/skipjack_station/start) -"dy" = ( -/obj/machinery/door/blast/shutters{ - density = 0; - dir = 8; - icon_state = "shutter0"; - id_tag = "SkipjackShuttersEast"; - name = "Skipjack Shutters"; - opacity = 0 - }, -/obj/effect/wallframe_spawn/reinforced/titanium, -/obj/effect/paint/brown, -/turf/simulated/floor/plating, -/area/map_template/skipjack_station/start) -"dz" = ( -/obj/machinery/atmospherics/pipe/simple/visible, -/obj/machinery/portable_atmospherics/hydroponics, -/turf/simulated/floor/plating, -/area/map_template/skipjack_station/start) -"dA" = ( -/obj/machinery/floodlight, -/turf/simulated/floor/plating, -/area/map_template/skipjack_station/start) -"dB" = ( -/obj/structure/table/rack, -/obj/item/gun/launcher/crossbow, -/obj/item/stack/material/rods{ - amount = 10 - }, -/obj/machinery/light/small{ - dir = 8 - }, -/obj/item/beartrap, -/obj/item/beartrap, -/obj/item/beartrap, -/obj/item/beartrap, -/obj/item/beartrap, -/obj/item/beartrap, -/turf/simulated/floor/shuttle/red, -/area/map_template/skipjack_station/start) -"dC" = ( -/obj/structure/table/rack, -/obj/item/grenade/empgrenade, -/obj/item/grenade/flashbang, -/obj/item/grenade/spawnergrenade/viscerator, -/obj/random/biggun, -/turf/simulated/floor/shuttle/red, -/area/map_template/skipjack_station/start) -"dD" = ( -/obj/machinery/suit_cycler/syndicate{ - locked = 0 - }, -/turf/simulated/floor/shuttle/red, -/area/map_template/skipjack_station/start) -"dE" = ( -/obj/structure/table/steel, -/obj/machinery/recharger, -/obj/machinery/light/small{ - dir = 4 - }, -/turf/simulated/floor/shuttle/red, -/area/map_template/skipjack_station/start) -"dF" = ( -/obj/structure/reagent_dispensers/fueltank, -/turf/simulated/floor/plating, -/area/map_template/skipjack_station/start) -"dG" = ( -/obj/item/robot_parts/robot_suit, -/obj/item/robot_parts/r_leg, -/obj/item/robot_parts/r_arm, -/turf/simulated/floor/plating, -/area/map_template/skipjack_station/start) -"dH" = ( -/obj/machinery/atmospherics/pipe/simple/visible, -/obj/random/maintenance, -/turf/simulated/floor/plating, -/area/map_template/skipjack_station/start) -"dI" = ( -/obj/machinery/door/blast/shutters{ - density = 0; - dir = 4; - icon_state = "shutter0"; - id_tag = "SkipjackShuttersWest"; - name = "Skipjack Shutters"; - opacity = 0 - }, -/obj/effect/wallframe_spawn/reinforced/titanium, -/turf/simulated/floor/plating, -/area/map_template/skipjack_station/start) -"dK" = ( -/obj/structure/closet/crate/freezer/rations, -/obj/item/clothing/mask/gas/cyborg, -/obj/random/donkpocket_box, -/obj/item/reagent_containers/food/snacks/tastybread, -/obj/item/reagent_containers/food/snacks/tastybread, -/turf/unsimulated/floor{ - icon_state = "plating"; - name = "plating" - }, -/area/map_template/skipjack_station/start) -"dL" = ( -/obj/machinery/door/airlock/hatch, -/turf/simulated/floor/plating, -/area/map_template/skipjack_station/start) -"dM" = ( -/obj/structure/bed/chair{ - dir = 4 - }, -/obj/machinery/light/small{ - dir = 8 - }, -/turf/simulated/floor/shuttle/red, -/area/map_template/skipjack_station/start) -"dN" = ( -/obj/structure/table/steel, -/obj/random/maintenance, -/obj/item/clothing/glasses/thermal, -/turf/simulated/floor/shuttle/red, -/area/map_template/skipjack_station/start) -"dO" = ( -/obj/structure/bed/chair{ - dir = 8 - }, -/obj/machinery/light/small{ - dir = 4 - }, -/turf/simulated/floor/shuttle/red, -/area/map_template/skipjack_station/start) -"dP" = ( -/obj/structure/hygiene/sink{ - dir = 8; - pixel_x = -12; - pixel_y = 2 - }, -/turf/simulated/floor/plating, -/area/map_template/skipjack_station/start) -"dQ" = ( -/obj/item/wrench, -/obj/item/mop, -/turf/simulated/floor/plating, -/area/map_template/skipjack_station/start) -"dR" = ( -/obj/machinery/atmospherics/pipe/simple/visible, -/obj/machinery/fabricator/hacked, -/obj/item/stack/material/glass{ - amount = 50 - }, -/obj/item/stack/material/glass{ - amount = 50 - }, -/obj/item/stack/material/steel{ - amount = 50 - }, -/obj/item/stack/material/steel{ - amount = 50 - }, -/turf/simulated/floor/plating, -/area/map_template/skipjack_station/start) -"dS" = ( -/obj/machinery/light/small{ - dir = 8 - }, -/obj/machinery/atmospherics/portables_connector{ - dir = 1 - }, -/obj/machinery/portable_atmospherics/canister/air/airlock, -/turf/simulated/floor/plating, -/area/map_template/skipjack_station/start) -"dT" = ( -/obj/machinery/recharge_station, -/turf/simulated/floor/plating, -/area/map_template/skipjack_station/start) -"dU" = ( -/turf/simulated/floor/shuttle/black, -/area/map_template/skipjack_station/start) -"dV" = ( -/obj/machinery/light/small{ - dir = 1 - }, -/turf/simulated/floor/shuttle/black, -/area/map_template/skipjack_station/start) -"dW" = ( -/obj/effect/wallframe_spawn/reinforced/titanium, -/obj/effect/paint/brown, -/turf/simulated/floor/plating, -/area/map_template/skipjack_station/start) -"dX" = ( -/obj/structure/bed/chair{ - dir = 4 - }, -/turf/simulated/floor/shuttle/red, -/area/map_template/skipjack_station/start) -"dY" = ( -/obj/item/deck/cards, -/obj/structure/table/steel, -/obj/random/lilgun, -/turf/simulated/floor/shuttle/red, -/area/map_template/skipjack_station/start) -"dZ" = ( -/obj/structure/bed/chair{ - dir = 8 - }, -/turf/simulated/floor/shuttle/red, -/area/map_template/skipjack_station/start) -"ea" = ( -/obj/machinery/bodyscanner{ - dir = 8 - }, -/turf/simulated/floor/shuttle/white, -/area/map_template/skipjack_station/start) -"eb" = ( -/obj/machinery/light/small{ - dir = 1 - }, -/obj/machinery/body_scanconsole{ - dir = 8 - }, -/turf/simulated/floor/shuttle/white, -/area/map_template/skipjack_station/start) -"ec" = ( -/turf/simulated/floor/shuttle/white, -/area/map_template/skipjack_station/start) -"ed" = ( -/obj/structure/hygiene/toilet{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/map_template/skipjack_station/start) -"ee" = ( -/obj/machinery/portable_atmospherics/canister/nitrogen, -/obj/item/tank/nitrogen, -/turf/simulated/floor/plating, -/area/map_template/skipjack_station/start) -"ef" = ( -/obj/machinery/light/small{ - dir = 4 - }, -/obj/machinery/atmospherics/portables_connector{ - dir = 1 - }, -/obj/machinery/portable_atmospherics/canister/air/airlock, -/turf/simulated/floor/plating, -/area/map_template/skipjack_station/start) -"eg" = ( -/obj/structure/shuttle/engine/heater, -/obj/structure/window/reinforced/crescent{ - dir = 1 - }, -/obj/effect/paint/black, -/turf/simulated/wall/voxshuttle, -/area/map_template/skipjack_station/start) -"eh" = ( -/obj/random/trash, -/turf/simulated/floor/shuttle/black, -/area/map_template/skipjack_station/start) -"ei" = ( -/obj/structure/table/steel, -/obj/random/lilgun, -/turf/simulated/floor/shuttle/red, -/area/map_template/skipjack_station/start) -"ej" = ( -/obj/random/junk, -/turf/simulated/floor/shuttle/white, -/area/map_template/skipjack_station/start) -"ek" = ( -/obj/structure/hygiene/sink{ - dir = 4; - pixel_x = 11 - }, -/turf/simulated/floor/shuttle/white, -/area/map_template/skipjack_station/start) -"el" = ( -/obj/structure/shuttle/engine/propulsion, -/obj/effect/paint/black, -/turf/simulated/wall/voxshuttle, -/area/map_template/skipjack_station/start) -"em" = ( -/obj/structure/table/standard, -/obj/random/maintenance, -/turf/simulated/floor/shuttle/black, -/area/map_template/skipjack_station/start) -"en" = ( -/obj/structure/table/standard, -/obj/item/deck/cards, -/turf/simulated/floor/shuttle/black, -/area/map_template/skipjack_station/start) -"eo" = ( -/obj/machinery/light/small, -/turf/simulated/floor/shuttle/red, -/area/map_template/skipjack_station/start) -"ep" = ( -/obj/random/trash, -/turf/simulated/floor/shuttle/white, -/area/map_template/skipjack_station/start) -"eq" = ( -/obj/structure/table/standard, -/obj/item/circular_saw{ - pixel_y = 8 - }, -/obj/item/hemostat, -/obj/item/scalpel, -/obj/item/stack/medical/advanced/bruise_pack, -/turf/simulated/floor/shuttle/white, -/area/map_template/skipjack_station/start) -"er" = ( -/obj/random/junk, -/turf/simulated/floor/shuttle/black, -/area/map_template/skipjack_station/start) -"es" = ( -/obj/machinery/optable, -/obj/item/clothing/mask/gas, -/turf/simulated/floor/shuttle/white, -/area/map_template/skipjack_station/start) -"et" = ( -/obj/structure/table/standard, -/obj/item/cautery, -/obj/item/retractor, -/obj/item/reagent_containers/glass/bottle/stoxin, -/obj/item/reagent_containers/glass/bottle/stoxin, -/obj/item/reagent_containers/syringe, -/obj/item/gun/launcher/syringe/rapid, -/obj/item/storage/box/syringegun, -/obj/item/reagent_containers/glass/beaker/vial/random/toxin, -/turf/simulated/floor/shuttle/white, -/area/map_template/skipjack_station/start) -"eu" = ( -/obj/structure/hygiene/sink{ - dir = 4; - pixel_x = 11 - }, -/turf/simulated/floor/shuttle/black, -/area/map_template/skipjack_station/start) -"ev" = ( -/obj/structure/bed, -/obj/item/bedsheet/rainbow, -/turf/simulated/floor/shuttle/red, -/area/map_template/skipjack_station/start) -"ew" = ( -/obj/structure/bed, -/turf/simulated/floor/shuttle/red, -/area/map_template/skipjack_station/start) -"ex" = ( -/obj/random/maintenance, -/turf/simulated/floor/shuttle/white, -/area/map_template/skipjack_station/start) -"ey" = ( -/obj/structure/table/standard, -/obj/item/bonesetter, -/obj/item/bonegel, -/obj/item/FixOVein, -/obj/item/reagent_containers/syringe/antiviral, -/obj/item/reagent_containers/syringe/antiviral, -/turf/simulated/floor/shuttle/white, -/area/map_template/skipjack_station/start) -"ez" = ( -/obj/structure/hygiene/toilet{ - dir = 4 - }, -/obj/machinery/light/small{ - dir = 8 - }, -/turf/simulated/floor/shuttle/black, -/area/map_template/skipjack_station/start) -"eA" = ( -/obj/structure/closet/crate, -/obj/item/clothing/suit/pirate, -/obj/item/clothing/under/rank/medical/scrubs/black, -/turf/simulated/floor/shuttle/red, -/area/map_template/skipjack_station/start) -"eB" = ( -/obj/structure/bed, -/obj/item/bedsheet/green, -/obj/machinery/light/small{ - dir = 4 - }, -/turf/simulated/floor/shuttle/red, -/area/map_template/skipjack_station/start) -"eC" = ( -/obj/structure/table/standard, -/obj/item/storage/firstaid/fire{ - pixel_x = 1 - }, -/obj/item/storage/firstaid/o2{ - pixel_x = 3; - pixel_y = 3 - }, -/turf/simulated/floor/shuttle/white, -/area/map_template/skipjack_station/start) -"eD" = ( -/obj/structure/table/standard, -/obj/item/storage/firstaid/adv{ - pixel_x = 1 - }, -/obj/item/storage/firstaid/toxin{ - pixel_x = 3; - pixel_y = 3 - }, -/obj/machinery/light/small{ - dir = 4 - }, -/obj/item/melee/baton/cattleprod, -/turf/simulated/floor/shuttle/white, -/area/map_template/skipjack_station/start) -"eF" = ( -/obj/structure/bed, -/obj/item/bedsheet/rd, -/turf/simulated/floor/shuttle/red, -/area/map_template/skipjack_station/start) -"eG" = ( -/obj/item/pizzabox/meat, -/turf/simulated/floor/shuttle/red, -/area/map_template/skipjack_station/start) -"eH" = ( -/obj/machinery/portable_atmospherics/canister/oxygen, -/turf/simulated/floor/shuttle/red, -/area/map_template/skipjack_station/start) -"eI" = ( -/obj/machinery/telecomms/allinone{ - intercept = 1 - }, -/turf/unsimulated/floor{ - icon_state = "plating"; - name = "plating" - }, -/area/map_template/syndicate_mothership/raider_base) -"ho" = ( -/obj/machinery/constructable_frame/computerframe, -/obj/item/device/radio/intercom/hailing{ - dir = 4; - pixel_x = -24 - }, -/turf/simulated/floor/shuttle/red, -/area/map_template/skipjack_station/start) - -(1,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(2,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(3,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(4,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(5,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(6,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(7,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(8,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(9,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(10,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(11,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -bj -by -bT -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(12,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -aQ -aq -bz -aq -aq -ce -bk -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(13,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -aR -aq -bA -bU -bX -aq -aq -aq -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(14,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -aA -aq -aQ -aq -bk -aq -aq -aq -aq -aQ -cp -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(15,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -an -aq -aq -aq -aq -aq -aq -bB -bA -bY -aq -aq -cq -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(16,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ac -ab -ab -ab -ab -aq -aq -aB -aC -aq -aq -aq -aR -aq -aq -cf -cj -cr -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(17,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ac -ab -ab -ab -ab -aq -aq -aC -aC -aq -aq -ab -aq -aQ -aq -aq -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(18,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ac -ab -ab -ab -ab -aj -aq -aC -aC -aq -ab -ab -ab -ab -ab -ab -ab -ab -aa -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(19,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -aj -aw -aC -aC -aq -ab -ab -ab -ab -ab -ab -ab -cs -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(20,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -af -aj -ae -ae -aj -ae -ae -ae -ab -ab -aa -ck -ck -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -aa -aa -aa -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(21,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ad -an -an -ae -aH -aS -ba -bl -ae -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(22,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ad -ar -ar -ae -aI -aT -aj -bm -ae -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(23,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ad -aj -an -ae -aJ -aS -aS -bn -ae -aC -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(24,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ad -an -aj -ae -ae -aU -aU -ae -ae -aC -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(25,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ad -af -an -an -an -an -an -an -bC -aC -aC -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -aa -aa -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(26,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ad -an -an -an -an -aV -af -an -aj -aC -aC -aC -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(27,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ad -an -an -ae -ae -ae -ae -ae -aD -ae -ae -ae -ae -ae -ae -ae -ae -cw -cw -cw -cR -cR -cR -dt -dt -dI -cR -cw -cw -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(28,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ad -an -an -ae -aK -aW -bb -bo -bD -ae -bZ -aj -cl -ct -an -an -ct -cx -cB -cI -cS -cZ -dl -dz -dz -dz -dS -eg -el -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(29,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ad -an -an -ae -aL -aX -aX -aY -bE -bq -an -aj -aj -ct -an -an -bq -cy -cC -cJ -cR -da -dm -du -dm -dm -dm -eg -el -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(30,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ad -ad -ad -ad -aj -an -aD -aM -aY -aY -aY -bF -bq -an -cg -ae -ae -bq -bq -ae -cw -cw -cw -cR -db -dm -dm -dA -dK -dT -cw -cw -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(31,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -af -aj -an -an -an -aD -aN -aY -aY -dr -bG -bq -af -an -bq -aa -aa -aa -aa -aa -aa -aa -cR -dc -dm -dv -du -cR -cR -cR -cR -cR -cR -cR -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(32,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -aj -an -an -ae -aL -aX -aX -aY -bH -bq -aj -an -bq -aa -cv -aa -aa -aa -aa -aa -cR -dd -dn -dm -dm -dL -dU -dU -em -dU -eh -cR -cR -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(33,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ae -ae -ae -ae -an -an -ae -aO -aZ -bc -bp -bI -ae -an -an -bq -aa -aa -aa -aa -aa -cw -cw -cR -cR -cR -dp -cR -cR -dV -eh -en -dU -dU -ez -cR -cR -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(34,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ae -af -an -ae -ae -ae -ae -ae -aD -ae -aD -aD -ae -ae -aa -aa -aa -cw -cw -cw -cT -de -do -cU -dB -cR -dU -dU -dU -er -eu -dU -cw -cw -cw -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(35,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ae -an -an -an -an -an -an -aD -bJ -bJ -bJ -ch -cm -ae -aa -aa -aa -cw -ho -cK -cU -cU -do -cW -dC -cR -dW -dW -dW -cR -cR -cR -cw -eg -el -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(36,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ae -ae -ae -ae -as -an -an -an -an -an -ae -bK -bV -ca -bV -bJ -bq -aa -aa -aa -cz -cE -cL -cU -cU -do -cU -cU -dM -dX -dX -eo -cR -ev -eA -eF -eg -el -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(37,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ae -ag -ak -ae -ae -ae -ae -ae -an -an -ae -bL -bW -cb -ci -bJ -bq -aa -aa -aa -cz -cF -cM -cV -cU -dp -cU -cU -dN -dY -ei -cU -dp -cU -cU -eG -eg -el -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(38,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ae -ah -al -ao -ao -ax -aE -aD -an -an -bq -bM -bV -cc -bV -bJ -bq -aa -aa -aa -cz -cD -cN -cU -cU -do -dw -cU -dO -dZ -dZ -eo -cR -ew -eB -eH -eg -el -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(39,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ae -ai -am -ap -ao -ay -ao -aD -af -an -bq -bN -bJ -bJ -bJ -cn -ae -aa -aa -aa -cw -cD -cO -cW -cU -do -cU -dD -cR -dW -dW -dW -cR -cR -cR -cw -eg -el -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(40,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ae -ae -ae -ae -ao -ao -aF -ae -an -an -ae -bq -bq -aD -aD -ae -ae -aa -aa -aa -cw -cw -cw -cX -df -do -cU -dE -cR -ea -ej -ec -es -ec -eC -cw -cw -cw -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(41,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ae -at -at -ae -ae -an -aj -br -an -an -an -an -bq -aa -aa -aa -aa -aa -cw -cw -cR -cR -cR -dp -cR -cR -eb -ec -ep -ec -ex -eD -cR -cR -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(42,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ae -ae -ae -ae -an -an -an -aj -aj -aj -an -af -bq -aa -aa -aa -aa -aa -aa -aa -cR -dg -dq -dm -dm -dL -ec -ek -eq -et -ey -cR -cR -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(43,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ae -ae -ae -ae -aP -ae -ae -aP -ae -ae -an -an -bq -aa -aa -aa -aa -aa -aa -aa -cR -dh -dm -dm -dF -cR -cR -cR -cR -cR -cR -cR -cR -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(44,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ae -aw -aj -aj -aw -ae -bd -aj -bO -ae -an -an -ae -ae -bq -bq -ae -cw -cw -cw -cR -di -dm -dx -dm -dP -ed -cw -cw -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(45,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ae -aj -aj -aG -aj -ae -be -bs -bP -ae -an -af -co -cu -an -an -bq -cw -cG -cP -cR -dj -ds -du -dG -dQ -ee -eg -el -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(46,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ae -aj -az -aj -aj -ae -bf -bt -bQ -ae -cd -an -an -cu -an -an -cu -cA -cH -cQ -cY -dk -dl -dl -dH -dR -ef -eg -el -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(47,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ae -eI -aj -aj -aj -ae -bg -bu -bR -ae -ae -ae -ae -ae -ae -ae -ae -cw -cw -cw -cR -cR -cR -dy -dy -dy -cR -cw -cw -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(48,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ae -ae -ae -ae -ae -ae -bh -bv -bv -ae -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(49,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ac -ab -ab -ab -ab -ab -ab -ab -ab -ae -bf -bw -bS -ae -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(50,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ac -ab -ab -ab -ab -ab -ab -ab -ab -ae -bi -bx -bx -ae -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(51,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ae -ae -ae -ae -ae -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(52,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(53,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(54,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(55,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(56,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(57,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(58,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(59,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(60,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(61,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(62,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(63,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(64,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(65,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(66,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(67,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(68,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(69,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(70,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} diff --git a/maps/antag_spawn/mercenary/mercenary.dm b/maps/antag_spawn/mercenary/mercenary.dm deleted file mode 100644 index 4d5809b4d98a0..0000000000000 --- a/maps/antag_spawn/mercenary/mercenary.dm +++ /dev/null @@ -1,133 +0,0 @@ -/datum/map_template/ruin/antag_spawn/mercenary - name = "Mercenary Base" - suffixes = list("mercenary/mercenary_base.dmm") - shuttles_to_initialise = list(/datum/shuttle/autodock/overmap/merc_shuttle) - -/obj/effect/overmap/visitable/sector/merc_base - name = "Tiny Asteroid" - desc = "Sensor array detects an small, insignificant asteroid. The core appears to be reflecting scans." - in_space = TRUE - known = FALSE - place_near_main = list(2, 4) - icon_state = "meteor4" - hide_from_reports = TRUE - initial_generic_waypoints = list( - "nav_merc_start", - "nav_merc_1", - "nav_merc_2", - "nav_merc_3", - "nav_merc_4" - ) - -/obj/effect/overmap/visitable/ship/landable/merc - name = "Cyclopes" - desc = "An older model cargo shuttle with a number of visible modifications. The hull plating is deflecting attempts at more thorough scans." - shuttle = "Cyclopes" - fore_dir = NORTH - vessel_size = SHIP_SIZE_SMALL - vessel_mass = 10000 - -/datum/shuttle/autodock/overmap/merc_shuttle - name = "Cyclopes" - shuttle_area = list(/area/map_template/merc_shuttle) - dock_target = "merc_shuttle" - current_location = "nav_merc_start" - defer_initialisation = TRUE - ceiling_type = /turf/simulated/floor/shuttle_ceiling/merc - warmup_time = 5 - range = 2 - fuel_consumption = 2 - skill_needed = SKILL_NONE - -/turf/simulated/floor/shuttle_ceiling/merc - color = COLOR_DARK_GUNMETAL - -/obj/effect/paint/merc - color = COLOR_DARK_GUNMETAL - -/obj/machinery/computer/shuttle_control/explore/merc_shuttle - name = "shuttle control console" - shuttle_tag = "Cyclopes" - -/obj/effect/shuttle_landmark/merc/start - landmark_tag = "nav_merc_start" - name = "Hidden Base" - docking_controller = "merc_shuttle_base" - -/obj/effect/shuttle_landmark/merc/nav1 - landmark_tag = "nav_merc_1" - -/obj/effect/shuttle_landmark/merc/nav2 - landmark_tag = "nav_merc_2" - -/obj/effect/shuttle_landmark/merc/nav3 - landmark_tag = "nav_merc_3" - -/obj/effect/shuttle_landmark/merc/nav4 - landmark_tag = "nav_merc_4" - -/obj/effect/shuttle_landmark/merc/dock - name = "4th Deck, Fore Airlock" - landmark_tag = "nav_merc_dock" - -/obj/effect/shuttle_landmark/transit/merc - name = "In transit" - landmark_tag = "nav_transit_merc" - -//Areas - -/area/map_template/merc_spawn - name = "\improper Hidden Base" - icon_state = "syndie-ship" - req_access = list(access_syndicate) - -/area/map_template/merc_shuttle - name = "\improper Cyclopes" - icon_state = "yellow" - area_flags = AREA_FLAG_RAD_SHIELDED | AREA_FLAG_ION_SHIELDED - req_access = list(access_syndicate) - - -//Flavorful reminders -/obj/item/paper/merc - language = LANGUAGE_SPACER - -/obj/item/paper/merc/tutorial_1 - name = "highlighted note" - info = {" -

              Hey, idiots!

              -

              Alright, I've gotten complaints from previous customers that this here suit cycler "doesn't work". To make sure my email remains empty so I can pretend I don't have to deal with you lot, here's a handy-dandy cheat sheet for anyone too thick to use a suit cycler.

              -
                -
              1. Put the damn voidsuit and helmet in seperately.
              2. -
              3. Set the customization you want - the suit will LOOK different, but it's still the same suit.
              4. -
              5. For my xeno customers, apply special xeno customizations if you want to be able to fit in your pajamas.
              6. -
              7. And the important part - Cycle. The. Suit. It does not work if you don't cycle the damn thing!
              8. -
              -

              Regards, Harry.

              - "} - - -/obj/item/paper/merc/tutorial_2 - name = "reminder" - info = {" -
              -

              Heyyyyyyy, so, whoever piloted the Cyclopes last (without telling me! >:|) didn't set the thrust right!

              -

              Uh-oh! Now we're short five whole CO2 canisters, and I'm grummmmmpy! Next person to run the thrusters over 10% without good reason is getting shot, thaaaanks!

              -
              -

              J.J.

              - "} - -/obj/item/paper/merc/tutorial_3 - name = "crumpled pamphlet" - info = {" -
              -

              Golden Prawn Hardsuits

              -

              Instructions for Stupid Meat

              -

              Meat must first check that the tank is full. Crowbar open panel. Remove tank with wrench. Fill with the disgusting gas mixture of meat's choice, and replace. Seal panel.

              -

              Once suit is on, meat may toggle parts of suit. It's not our fault if meat suffocates because they removed their helmet in space and died like idiots.

              -

              Thank you for shopping with Golden Prawn Enterprises!

              -

              NO REFUNDS!

              -

              Modules not included

              -
              -

              Takriakakaw, Chief Technical Officer, Golden Prawn Enterprises

              - "} diff --git a/maps/antag_spawn/mercenary/mercenary_base.dmm b/maps/antag_spawn/mercenary/mercenary_base.dmm deleted file mode 100644 index a71c19c82b3a3..0000000000000 --- a/maps/antag_spawn/mercenary/mercenary_base.dmm +++ /dev/null @@ -1,13458 +0,0 @@ -//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE -"aa" = ( -/turf/space, -/area/space) -"ab" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/map_template/merc_spawn) -"ac" = ( -/obj/effect/floor_decal/industrial/warning{ - icon_state = "warning" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/merc_spawn) -"ad" = ( -/obj/effect/shuttle_landmark/merc/nav3, -/turf/space, -/area/space) -"ae" = ( -/obj/effect/floor_decal/industrial/warning{ - icon_state = "warning" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/universal{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/merc_spawn) -"af" = ( -/obj/effect/shuttle_landmark/merc/nav2, -/turf/space, -/area/space) -"ag" = ( -/obj/structure/cable{ - d2 = 2; - icon_state = "0-2" - }, -/obj/machinery/power/terminal{ - dir = 8 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/merc_spawn) -"ah" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/tiled, -/area/map_template/merc_spawn) -"aj" = ( -/obj/effect/paint/silver, -/obj/structure/sign/poster, -/turf/simulated/wall/titanium, -/area/map_template/merc_spawn) -"ak" = ( -/obj/machinery/vending/coffee{ - prices = list() - }, -/turf/simulated/floor/tiled, -/area/map_template/merc_spawn) -"al" = ( -/obj/effect/decal/cleanable/blood/splatter, -/turf/simulated/floor/tiled, -/area/map_template/merc_spawn) -"am" = ( -/obj/structure/hygiene/sink{ - dir = 1; - pixel_y = 16 - }, -/obj/machinery/acting/changer/mirror{ - desc = "You can't quite make out your reflaction.. is it shifting?"; - name = "Grimy Mirror"; - pixel_y = 32 - }, -/turf/simulated/floor/tiled/freezer, -/area/map_template/merc_spawn) -"an" = ( -/obj/structure/curtain/open/shower, -/turf/simulated/floor/tiled/freezer, -/area/map_template/merc_spawn) -"ao" = ( -/obj/structure/hygiene/toilet{ - dir = 8 - }, -/obj/item/taperoll/bog, -/obj/machinery/light/small{ - dir = 1 - }, -/turf/simulated/floor/tiled/freezer, -/area/map_template/merc_spawn) -"ap" = ( -/obj/structure/bed, -/obj/structure/curtain/open/bed, -/obj/item/bedsheet/hos, -/turf/simulated/floor/tiled/dark, -/area/map_template/merc_spawn) -"at" = ( -/obj/structure/table/steel_reinforced, -/obj/machinery/button/blast_door{ - id_tag = "merc_external"; - name = "Protective Shutters Control"; - pixel_x = -2; - pixel_y = 6; - req_access = list("ACCESS_SYNDICATE") - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/merc_shuttle) -"au" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 1 - }, -/obj/effect/landmark{ - name = "Syndicate-Spawn" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/merc_spawn) -"av" = ( -/obj/structure/closet/crate, -/obj/item/stock_parts/circuitboard/batteryrack, -/obj/item/stock_parts/circuitboard/batteryrack, -/obj/item/stock_parts/circuitboard/smes, -/obj/item/stock_parts/circuitboard/smes, -/obj/item/stock_parts/smes_coil/super_io, -/obj/item/stock_parts/smes_coil/super_io, -/obj/item/stock_parts/smes_coil/super_capacity, -/obj/item/stock_parts/smes_coil/super_capacity, -/obj/item/stock_parts/smes_coil, -/obj/item/stock_parts/smes_coil, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/merc_spawn) -"aw" = ( -/turf/simulated/floor/tiled/techfloor, -/area/map_template/merc_shuttle) -"ax" = ( -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 8 - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 1 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/merc_shuttle) -"ay" = ( -/obj/effect/floor_decal/industrial/warning, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/merc_shuttle) -"az" = ( -/obj/effect/paint/silver, -/obj/effect/wallframe_spawn/reinforced/titanium, -/turf/simulated/floor/plating, -/area/map_template/merc_spawn) -"aA" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/obj/machinery/computer/cryopod{ - pixel_y = 25 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/merc_spawn) -"bj" = ( -/obj/effect/floor_decal/corner/blue{ - dir = 9 - }, -/turf/simulated/floor/tiled/dark, -/area/map_template/merc_spawn) -"bx" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, -/obj/effect/catwalk_plated, -/turf/simulated/floor/plating, -/area/map_template/merc_spawn) -"bM" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/merc_spawn) -"bW" = ( -/obj/effect/floor_decal/industrial/warning{ - icon_state = "warning" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/cyan{ - dir = 10 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/merc_spawn) -"bZ" = ( -/obj/machinery/light, -/turf/simulated/floor/tiled/dark, -/area/map_template/merc_spawn) -"ck" = ( -/obj/structure/kitchenspike, -/obj/effect/floor_decal/borderfloorwhite/full, -/obj/effect/decal/cleanable/blood/splatter, -/obj/machinery/light/small{ - dir = 8 - }, -/turf/simulated/floor/tiled, -/area/map_template/merc_spawn) -"cB" = ( -/obj/machinery/power/smes/buildable/preset{ - _fully_charged = 1; - _input_maxed = 1; - _input_on = 1; - _output_maxed = 1; - _output_on = 1; - uncreated_component_parts = list(/obj/item/stock_parts/smes_coil/super_io=1,/obj/item/stock_parts/smes_coil/super_capacity=1) - }, -/obj/structure/cable{ - d2 = 8; - icon_state = "0-8" - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/merc_spawn) -"cC" = ( -/obj/effect/paint/sun, -/turf/simulated/wall/titanium, -/area/map_template/merc_shuttle) -"cD" = ( -/obj/machinery/porta_turret{ - req_access = list("ACCESS_SYNDICATE") - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/map_template/merc_shuttle) -"cE" = ( -/obj/machinery/computer/ship/helm, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/merc_shuttle) -"cG" = ( -/obj/machinery/atmospherics/unary/vent_pump/high_volume{ - controlled = 0; - dir = 4; - icon_state = "map_vent_in"; - pressure_checks = 2; - pressure_checks_default = 2; - use_power = 1 - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/map_template/merc_shuttle) -"cH" = ( -/obj/machinery/door/blast/regular{ - id_tag = "merc_bsa" - }, -/turf/simulated/floor/plating, -/area/map_template/merc_shuttle) -"cI" = ( -/obj/effect/wallframe_spawn/reinforced/titanium, -/obj/machinery/atmospherics/pipe/simple/hidden/universal{ - dir = 4 - }, -/obj/machinery/door/blast/regular/open{ - density = 0; - dir = 4; - icon_state = "pdoor0"; - id_tag = "merc_external" - }, -/obj/effect/paint/merc, -/turf/simulated/floor/plating, -/area/map_template/merc_shuttle) -"cM" = ( -/obj/machinery/computer/ship/engines{ - uncreated_component_parts = list(/obj/item/stock_parts/power/battery/buildable/responsive=1,/obj/item/cell/high=1) - }, -/obj/item/device/radio/intercom/hailing{ - dir = 4; - pixel_x = -24 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/merc_shuttle) -"cN" = ( -/obj/machinery/computer/shuttle_control/explore/merc_shuttle{ - req_access = list("ACCESS_SYNDICATE"); - uncreated_component_parts = list(/obj/item/stock_parts/power/battery/buildable/responsive=1,/obj/item/cell/high=1) - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/merc_shuttle) -"cO" = ( -/obj/machinery/disperser/front{ - dir = 1 - }, -/turf/simulated/floor/plating, -/area/map_template/merc_shuttle) -"cQ" = ( -/obj/machinery/computer/ship/disperser, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/merc_shuttle) -"cS" = ( -/obj/machinery/computer/ship/navigation, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/merc_shuttle) -"cT" = ( -/obj/structure/table/steel_reinforced, -/obj/machinery/button/blast_door{ - id_tag = "merc_external"; - name = "Protective Shutters Control"; - pixel_x = -2; - pixel_y = 6; - req_access = list("ACCESS_SYNDICATE") - }, -/obj/item/paper/merc/tutorial_2, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/merc_shuttle) -"cW" = ( -/obj/structure/bed/chair/shuttle/blue{ - dir = 1 - }, -/obj/effect/floor_decal/techfloor{ - dir = 9 - }, -/turf/simulated/floor/tiled/dark, -/area/map_template/merc_shuttle) -"dc" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 1 - }, -/obj/effect/landmark{ - name = "Syndicate-Spawn" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/merc_spawn) -"dn" = ( -/obj/machinery/disperser/middle{ - dir = 1 - }, -/turf/simulated/floor/plating, -/area/map_template/merc_shuttle) -"dq" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 1 - }, -/obj/machinery/light, -/turf/simulated/floor/tiled/white, -/area/map_template/merc_spawn) -"dt" = ( -/obj/random/junk, -/obj/effect/floor_decal/borderfloorwhite/full, -/obj/effect/decal/cleanable/blood/splatter, -/turf/simulated/floor/tiled, -/area/map_template/merc_spawn) -"dv" = ( -/obj/effect/floor_decal/corner/red, -/obj/effect/floor_decal/corner/black{ - dir = 8 - }, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled, -/area/map_template/merc_spawn) -"dT" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/turf/simulated/floor/tiled/freezer, -/area/map_template/merc_spawn) -"dY" = ( -/obj/effect/floor_decal/techfloor{ - dir = 5 - }, -/turf/simulated/floor/tiled/dark, -/area/map_template/merc_shuttle) -"eh" = ( -/obj/effect/floor_decal/techfloor{ - dir = 5 - }, -/obj/structure/bed/chair/shuttle/blue{ - dir = 1 - }, -/turf/simulated/floor/tiled/dark, -/area/map_template/merc_shuttle) -"em" = ( -/obj/structure/table/steel_reinforced, -/obj/machinery/button/blast_door{ - id_tag = "merc_bsa"; - name = "OFD Firing Blast Doors"; - pixel_x = -5; - pixel_y = 6; - req_access = list("ACCESS_SYNDICATE") - }, -/obj/machinery/button/blast_door{ - id_tag = "merc_bsa_shutters"; - name = "OFD Viewing Shutters"; - pixel_x = -5; - pixel_y = -3; - req_access = list("ACCESS_SYNDICATE") - }, -/obj/machinery/recharger{ - pixel_x = 6 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/merc_shuttle) -"es" = ( -/obj/effect/wallframe_spawn/reinforced/titanium, -/obj/effect/paint/silver, -/obj/structure/cable/blue{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/plating, -/area/map_template/merc_spawn) -"ev" = ( -/obj/machinery/cryopod{ - dir = 2 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/merc_spawn) -"ew" = ( -/obj/effect/floor_decal/corner_techfloor_grid{ - dir = 4 - }, -/obj/effect/floor_decal/techfloor/corner{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark, -/area/map_template/merc_shuttle) -"ex" = ( -/turf/simulated/floor/tiled/steel_ridged, -/area/map_template/merc_spawn) -"ey" = ( -/obj/structure/bed/chair/shuttle/blue{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/merc_shuttle) -"eA" = ( -/obj/effect/floor_decal/techfloor{ - dir = 8 - }, -/turf/simulated/floor/tiled/dark, -/area/map_template/merc_shuttle) -"eG" = ( -/obj/machinery/disperser/back{ - dir = 1 - }, -/obj/structure/ship_munition/disperser_charge/emp, -/turf/simulated/floor/plating, -/area/map_template/merc_shuttle) -"eR" = ( -/obj/machinery/cryopod{ - dir = 1 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/merc_spawn) -"eX" = ( -/obj/structure/table/rack{ - pixel_x = -1 - }, -/obj/item/shield/energy, -/obj/item/shield/energy, -/obj/item/shield/energy, -/obj/item/shield/energy, -/obj/item/shield/energy, -/obj/item/shield/energy, -/obj/effect/floor_decal/corner/red/mono, -/turf/simulated/floor/tiled/dark/monotile, -/area/map_template/merc_spawn) -"fa" = ( -/obj/effect/wallframe_spawn/reinforced/titanium, -/obj/machinery/door/blast/regular/open{ - density = 0; - dir = 4; - icon_state = "pdoor0"; - id_tag = "merc_bsa_shutters" - }, -/obj/effect/paint/merc, -/turf/simulated/floor/plating, -/area/map_template/merc_shuttle) -"fd" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/bed/chair/shuttle/blue{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/merc_shuttle) -"fe" = ( -/obj/machinery/light{ - dir = 4 - }, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 1 - }, -/turf/simulated/floor/tiled/dark, -/area/map_template/merc_spawn) -"fi" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 1 - }, -/turf/simulated/floor/tiled/dark, -/area/map_template/merc_spawn) -"fB" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/effect/floor_decal/techfloor{ - dir = 8 - }, -/turf/simulated/floor/tiled/dark, -/area/map_template/merc_shuttle) -"fN" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/obj/structure/handrail{ - dir = 8 - }, -/obj/effect/floor_decal/techfloor{ - dir = 4 - }, -/obj/machinery/light/spot{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark, -/area/map_template/merc_shuttle) -"fW" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 1 - }, -/obj/effect/landmark{ - name = "Syndicate-Spawn" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/merc_spawn) -"ga" = ( -/obj/effect/floor_decal/corner/blue, -/turf/simulated/floor/tiled, -/area/map_template/merc_spawn) -"gc" = ( -/obj/structure/handrail{ - dir = 4 - }, -/obj/effect/floor_decal/techfloor{ - dir = 8 - }, -/obj/machinery/light/spot{ - dir = 8 - }, -/turf/simulated/floor/tiled/dark, -/area/map_template/merc_shuttle) -"gd" = ( -/obj/machinery/atmospherics/portables_connector{ - dir = 1 - }, -/obj/machinery/portable_atmospherics/canister/empty, -/turf/simulated/floor/plating, -/area/map_template/merc_spawn) -"gr" = ( -/obj/machinery/door/blast/regular/open{ - density = 0; - icon_state = "pdoor0"; - id_tag = "merc_bsa" - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 8 - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/map_template/merc_shuttle) -"gC" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 4 - }, -/obj/effect/floor_decal/corner_techfloor_grid{ - dir = 1 - }, -/obj/effect/floor_decal/techfloor/corner{ - dir = 1 - }, -/turf/simulated/floor/tiled/dark, -/area/map_template/merc_shuttle) -"gF" = ( -/obj/machinery/atmospherics/unary/vent_pump/on, -/turf/simulated/floor/tiled/dark, -/area/map_template/merc_spawn) -"gK" = ( -/obj/machinery/door/airlock/external{ - frequency = 1380; - id_tag = "merc_shuttle_base_inner" - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/merc_spawn) -"gX" = ( -/turf/simulated/floor/tiled/dark, -/area/map_template/merc_shuttle) -"gY" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/merc_spawn) -"hr" = ( -/obj/structure/bed/chair/shuttle/blue{ - dir = 8 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/merc_shuttle) -"hz" = ( -/obj/structure/table/rack{ - pixel_x = -1 - }, -/obj/item/clothing/accessory/storage/white_drop, -/obj/item/clothing/accessory/storage/white_drop, -/obj/item/clothing/accessory/storage/black_drop, -/obj/item/clothing/accessory/storage/black_drop, -/obj/item/clothing/accessory/storage/brown_drop, -/obj/item/clothing/accessory/storage/brown_drop, -/obj/item/clothing/accessory/storage/bandolier, -/obj/item/clothing/accessory/storage/bandolier, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/merc_spawn) -"hG" = ( -/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{ - id_tag = "merc_shuttle_pump_out_external" - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/map_template/merc_shuttle) -"hJ" = ( -/obj/machinery/recharge_station, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/merc_shuttle) -"hL" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/power/apc/hyper{ - dir = 1; - pixel_y = 18; - req_access = list("ACCESS_SYNDICATE") - }, -/obj/structure/cable/green{ - d2 = 2; - icon_state = "0-2" - }, -/obj/effect/floor_decal/techfloor{ - dir = 1 - }, -/turf/simulated/floor/tiled/dark, -/area/map_template/merc_shuttle) -"hR" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/obj/effect/floor_decal/techfloor{ - dir = 1 - }, -/obj/effect/floor_decal/industrial/loading{ - dir = 1 - }, -/turf/simulated/floor/tiled/dark, -/area/map_template/merc_shuttle) -"hU" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/turretid/lethal{ - ailock = 1; - check_arrest = 0; - check_records = 0; - enabled = 0; - pixel_x = -4; - pixel_y = 28; - req_access = list("ACCESS_SYNDICATE") - }, -/obj/effect/floor_decal/techfloor{ - dir = 1 - }, -/turf/simulated/floor/tiled/dark, -/area/map_template/merc_shuttle) -"ia" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 8 - }, -/obj/effect/floor_decal/techfloor{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark, -/area/map_template/merc_shuttle) -"ib" = ( -/obj/machinery/door/airlock/glass/civilian{ - name = "EVA" - }, -/turf/simulated/floor/tiled/steel_ridged, -/area/map_template/merc_spawn) -"is" = ( -/obj/structure/bed/chair/shuttle/blue{ - dir = 8 - }, -/obj/machinery/computer/ship/navigation/telescreen{ - pixel_y = -32 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/merc_shuttle) -"it" = ( -/obj/effect/floor_decal/corner/red{ - dir = 9 - }, -/obj/effect/floor_decal/corner/black{ - dir = 6 - }, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 1 - }, -/turf/simulated/floor/tiled/dark, -/area/map_template/merc_spawn) -"iP" = ( -/obj/machinery/vending/snack{ - prices = list() - }, -/obj/effect/floor_decal/corner/b_green/mono, -/turf/simulated/floor/tiled/monotile, -/area/map_template/merc_spawn) -"jb" = ( -/obj/machinery/airlock_sensor/airlock_exterior{ - frequency = 1380; - id_tag = "merc_shuttle_exterior_sensor"; - pixel_y = -28 - }, -/obj/machinery/atmospherics/pipe/simple/hidden, -/obj/machinery/porta_turret{ - req_access = list("ACCESS_SYNDICATE") - }, -/obj/structure/catwalk, -/obj/machinery/access_button{ - command = "cycle_exterior"; - frequency = 1380; - master_tag = "merc_shuttle"; - name = "exterior access button"; - pixel_x = 39; - pixel_y = -22 - }, -/turf/simulated/floor/plating, -/area/map_template/merc_shuttle) -"jc" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/obj/effect/floor_decal/corner_techfloor_grid{ - dir = 4 - }, -/obj/effect/floor_decal/techfloor/corner{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark, -/area/map_template/merc_shuttle) -"jt" = ( -/obj/machinery/shipsensors, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/map_template/merc_shuttle) -"jE" = ( -/obj/machinery/power/port_gen/pacman, -/obj/structure/cable/yellow{ - d2 = 2; - icon_state = "0-2" - }, -/obj/effect/floor_decal/industrial/hatch/yellow, -/obj/machinery/light/spot{ - dir = 8 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/map_template/merc_shuttle) -"jF" = ( -/obj/structure/hygiene/shower{ - dir = 8 - }, -/turf/simulated/floor/tiled/freezer, -/area/map_template/merc_spawn) -"jJ" = ( -/obj/effect/floor_decal/corner/orange/border{ - dir = 8 - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 10 - }, -/turf/simulated/floor/tiled/monotile, -/area/map_template/merc_spawn) -"jK" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/dark, -/area/map_template/merc_shuttle) -"jQ" = ( -/obj/machinery/power/terminal{ - dir = 8 - }, -/obj/structure/cable/yellow, -/obj/effect/floor_decal/industrial/warning{ - dir = 8 - }, -/obj/structure/cable{ - d2 = 4; - icon_state = "0-4" - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/map_template/merc_shuttle) -"jR" = ( -/obj/effect/floor_decal/techfloor{ - dir = 4 - }, -/obj/machinery/light/spot{ - dir = 4 - }, -/obj/machinery/access_button{ - command = "cycle_interior"; - frequency = 1380; - master_tag = "merc_shuttle"; - name = "interior access button"; - pixel_x = 22; - pixel_y = -11 - }, -/turf/simulated/floor/tiled/dark, -/area/map_template/merc_shuttle) -"kb" = ( -/turf/simulated/floor/tiled/dark, -/area/map_template/merc_spawn) -"kg" = ( -/obj/structure/hygiene/shower{ - dir = 4 - }, -/turf/simulated/floor/tiled/freezer, -/area/map_template/merc_spawn) -"kx" = ( -/obj/structure/undies_wardrobe, -/turf/simulated/floor/tiled/dark, -/area/map_template/merc_spawn) -"kF" = ( -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 5 - }, -/obj/effect/paint/merc, -/turf/simulated/wall/titanium, -/area/map_template/merc_shuttle) -"kO" = ( -/obj/machinery/alarm{ - pixel_y = 24; - req_access = list("ACCESS_SYNDICATE") - }, -/turf/simulated/floor/tiled, -/area/map_template/merc_spawn) -"kQ" = ( -/obj/machinery/light{ - dir = 1 - }, -/turf/simulated/floor/tiled/dark, -/area/map_template/merc_spawn) -"kR" = ( -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 10 - }, -/obj/effect/paint/merc, -/turf/simulated/wall/titanium, -/area/map_template/merc_shuttle) -"kS" = ( -/obj/machinery/power/smes/buildable/preset{ - _fully_charged = 1; - _input_maxed = 1; - _input_on = 1; - _output_maxed = 1; - _output_on = 1; - uncreated_component_parts = list(/obj/item/stock_parts/smes_coil/super_io=1,/obj/item/stock_parts/smes_coil/super_capacity=1) - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/structure/cable/green{ - d2 = 2; - icon_state = "0-2" - }, -/turf/simulated/floor/tiled/dark, -/area/map_template/merc_shuttle) -"kV" = ( -/obj/effect/floor_decal/corner/red{ - dir = 6 - }, -/obj/effect/floor_decal/corner/black{ - dir = 9 - }, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 1 - }, -/turf/simulated/floor/tiled/dark, -/area/map_template/merc_spawn) -"kW" = ( -/obj/machinery/atmospherics/unary/tank/air{ - dir = 4 - }, -/obj/effect/floor_decal/industrial/outline/blue, -/obj/structure/window/reinforced/crescent{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark, -/area/map_template/merc_shuttle) -"kZ" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 4 - }, -/obj/effect/floor_decal/techfloor{ - dir = 4 - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/dark, -/area/map_template/merc_shuttle) -"ld" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/table/steel_reinforced, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/merc_shuttle) -"lg" = ( -/obj/machinery/portable_atmospherics/canister/carbon_dioxide, -/obj/effect/floor_decal/corner/blue/mono, -/turf/simulated/floor/tiled/dark/monotile, -/area/map_template/merc_spawn) -"lh" = ( -/obj/machinery/portable_atmospherics/powered/pump/filled, -/turf/simulated/floor/plating, -/area/map_template/merc_spawn) -"lj" = ( -/obj/structure/hygiene/shower{ - dir = 4 - }, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 4 - }, -/turf/simulated/floor/tiled/freezer, -/area/map_template/merc_spawn) -"lo" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/freezer, -/area/map_template/merc_spawn) -"lq" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers, -/obj/effect/overmap/visitable/ship/landable/merc, -/obj/structure/table/steel_reinforced, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/merc_shuttle) -"lx" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/table/steel_reinforced, -/obj/structure/cable{ - icon_state = "2-8" - }, -/obj/item/clothing/glasses/thermal, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/merc_shuttle) -"lz" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/fuel{ - dir = 4 - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 4 - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 8 - }, -/obj/structure/handrail{ - dir = 1 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/merc_shuttle) -"lB" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 8 - }, -/obj/effect/floor_decal/techfloor{ - dir = 8 - }, -/turf/simulated/floor/tiled/dark, -/area/map_template/merc_shuttle) -"lX" = ( -/obj/effect/floor_decal/corner/blue{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled, -/area/map_template/merc_spawn) -"md" = ( -/obj/effect/wallframe_spawn/reinforced/titanium, -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 6 - }, -/obj/machinery/door/blast/regular/open{ - density = 0; - dir = 4; - icon_state = "pdoor0"; - id_tag = "merc_airlock" - }, -/obj/effect/paint/merc, -/turf/simulated/floor/plating, -/area/map_template/merc_shuttle) -"mi" = ( -/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{ - dir = 8; - id_tag = "merc_shuttle_pump" - }, -/obj/machinery/airlock_sensor{ - frequency = 1380; - id_tag = "merc_shuttle_sensor"; - pixel_y = 25 - }, -/obj/structure/handrail, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/merc_shuttle) -"mj" = ( -/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{ - dir = 4; - id_tag = "merc_shuttle_pump_out_internal" - }, -/obj/structure/handrail, -/obj/machinery/light/small{ - dir = 1 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/merc_shuttle) -"ml" = ( -/obj/effect/wallframe_spawn/reinforced/titanium, -/obj/machinery/atmospherics/pipe/manifold/hidden{ - dir = 4 - }, -/obj/machinery/door/blast/regular/open{ - density = 0; - dir = 4; - icon_state = "pdoor0"; - id_tag = "merc_external" - }, -/obj/effect/paint/merc, -/turf/simulated/floor/plating, -/area/map_template/merc_shuttle) -"mm" = ( -/obj/effect/wallframe_spawn/reinforced/titanium, -/obj/effect/paint/silver, -/turf/simulated/floor/plating, -/area/map_template/merc_spawn) -"mn" = ( -/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{ - id_tag = "merc_shuttle_base_pump" - }, -/obj/structure/handrail, -/obj/machinery/airlock_sensor{ - frequency = 1380; - id_tag = "merc_shuttle_base_sensor"; - pixel_y = 25 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/merc_spawn) -"mo" = ( -/obj/effect/paint/silver, -/turf/simulated/wall/titanium, -/area/map_template/merc_spawn) -"mt" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/cyan{ - dir = 1 - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/structure/closet/secure_closet/guncabinet{ - locked = 0; - req_access = list("ACCESS_SYNDICATE") - }, -/obj/item/gun/projectile/pistol/military/alt, -/obj/item/gun/projectile/pistol/military/alt, -/obj/item/gun/projectile/pistol/throwback, -/obj/item/gun/projectile/pistol/throwback, -/obj/item/gun/projectile/revolver/medium, -/obj/item/gun/projectile/revolver/medium, -/obj/effect/floor_decal/industrial/warning{ - dir = 1 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/map_template/merc_shuttle) -"mG" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/universal{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 1 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/map_template/merc_shuttle) -"mK" = ( -/obj/effect/floor_decal/corner/blue{ - dir = 8 - }, -/turf/simulated/floor/tiled, -/area/map_template/merc_spawn) -"nd" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/effect/floor_decal/corner_techfloor_grid{ - dir = 1 - }, -/obj/effect/floor_decal/techfloor/corner{ - dir = 1 - }, -/turf/simulated/floor/tiled/dark, -/area/map_template/merc_shuttle) -"ne" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/structure/table/steel_reinforced, -/obj/item/storage/backpack/dufflebag/syndie/ammo, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/merc_shuttle) -"nm" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/table/steel_reinforced, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/merc_shuttle) -"nn" = ( -/obj/structure/table/steel_reinforced, -/obj/structure/cable{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/effect/shuttle_landmark/merc/start, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/merc_shuttle) -"nu" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled/steel_ridged, -/area/map_template/merc_spawn) -"nI" = ( -/obj/effect/floor_decal/techfloor{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark, -/area/map_template/merc_shuttle) -"nL" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden{ - dir = 8 - }, -/obj/machinery/door/airlock/external{ - frequency = 1380; - id_tag = "merc_shuttle_inner"; - name = "Ship External Access" - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/merc_shuttle) -"nW" = ( -/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{ - dir = 8; - id_tag = "merc_shuttle_pump" - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/merc_shuttle) -"nY" = ( -/obj/effect/floor_decal/corner/red{ - dir = 6 - }, -/obj/effect/floor_decal/corner/black{ - dir = 9 - }, -/turf/simulated/floor/tiled/dark, -/area/map_template/merc_spawn) -"ob" = ( -/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{ - dir = 4; - id_tag = "merc_shuttle_pump_out_internal" - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/merc_shuttle) -"oc" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden{ - dir = 4 - }, -/obj/machinery/door/airlock/external{ - frequency = 1380; - id_tag = "merc_shuttle_outer"; - name = "Ship External Access" - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/merc_shuttle) -"oo" = ( -/obj/machinery/portable_atmospherics/canister/hydrogen, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/item/tank/hydrogen, -/obj/item/tank/hydrogen, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/merc_shuttle) -"oC" = ( -/obj/machinery/door/airlock/external{ - frequency = 1380; - id_tag = "merc_shuttle_base_outer" - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/merc_spawn) -"oI" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 1 - }, -/obj/effect/catwalk_plated, -/obj/effect/overmap/visitable/sector/merc_base, -/turf/simulated/floor/plating, -/area/map_template/merc_spawn) -"oK" = ( -/obj/effect/floor_decal/corner/blue/mono, -/obj/structure/table/standard, -/obj/item/paper/merc/tutorial_1, -/obj/machinery/light, -/turf/simulated/floor/tiled/dark/monotile, -/area/map_template/merc_spawn) -"oT" = ( -/obj/machinery/alarm{ - dir = 1; - pixel_y = -24; - req_access = list("ACCESS_SYNDICATE") - }, -/turf/simulated/floor/tiled/dark, -/area/map_template/merc_shuttle) -"oW" = ( -/obj/machinery/light{ - dir = 4 - }, -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/turf/simulated/floor/tiled/dark, -/area/map_template/merc_spawn) -"oX" = ( -/obj/machinery/light{ - dir = 8 - }, -/obj/effect/floor_decal/corner/purple{ - dir = 8 - }, -/obj/machinery/atmospherics/unary/vent_pump/on, -/turf/simulated/floor/tiled, -/area/map_template/merc_spawn) -"oY" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/turf/simulated/floor/tiled, -/area/map_template/merc_spawn) -"pb" = ( -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 6 - }, -/obj/effect/floor_decal/corner_techfloor_grid{ - dir = 1 - }, -/obj/effect/floor_decal/techfloor/corner{ - dir = 1 - }, -/turf/simulated/floor/tiled/dark, -/area/map_template/merc_shuttle) -"pc" = ( -/obj/structure/table/steel, -/obj/item/crowbar/prybar, -/obj/item/crowbar/prybar, -/obj/item/crowbar/prybar, -/obj/item/crowbar/prybar, -/obj/item/crowbar/prybar, -/obj/item/crowbar/prybar, -/obj/machinery/button/blast_door{ - id_tag = "merc_airlock"; - req_access = list("ACCESS_SYNDICATE") - }, -/obj/item/device/binoculars, -/obj/item/device/binoculars, -/obj/item/device/binoculars, -/obj/item/device/binoculars, -/obj/item/device/binoculars, -/obj/item/device/binoculars, -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark, -/area/map_template/merc_shuttle) -"ph" = ( -/obj/effect/wallframe_spawn/reinforced/titanium, -/obj/machinery/atmospherics/pipe/manifold/hidden, -/obj/machinery/door/blast/regular/open{ - density = 0; - dir = 4; - icon_state = "pdoor0"; - id_tag = "merc_airlock" - }, -/obj/effect/paint/merc, -/turf/simulated/floor/plating, -/area/map_template/merc_shuttle) -"pj" = ( -/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{ - dir = 8; - id_tag = "merc_shuttle_pump" - }, -/obj/item/device/radio/intercom/hailing{ - dir = 1; - pixel_y = -28 - }, -/obj/structure/handrail{ - dir = 1 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/merc_shuttle) -"pk" = ( -/obj/machinery/atmospherics/unary/vent_pump/on, -/obj/machinery/light{ - dir = 1 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/merc_spawn) -"pt" = ( -/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{ - dir = 4; - id_tag = "merc_shuttle_pump_out_internal" - }, -/obj/machinery/embedded_controller/radio/airlock/docking_port{ - cycle_to_external_air = 1; - dir = 1; - frequency = 1380; - id_tag = "merc_shuttle"; - pixel_y = -25; - req_access = list("ACCESS_SYNDICATE"); - tag_airpump = "merc_shuttle_pump"; - tag_exterior_door = "merc_shuttle_outer"; - tag_exterior_sensor = "merc_shuttle_exterior_sensor"; - tag_interior_door = "merc_shuttle_inner"; - tag_interior_sensor = "merc_shuttle_sensor" - }, -/obj/structure/handrail{ - dir = 1 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/merc_shuttle) -"pH" = ( -/obj/effect/wallframe_spawn/reinforced/titanium, -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 9 - }, -/obj/machinery/door/blast/regular/open{ - density = 0; - dir = 4; - icon_state = "pdoor0"; - id_tag = "merc_external" - }, -/obj/effect/paint/merc, -/turf/simulated/floor/plating, -/area/map_template/merc_shuttle) -"pV" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/cyan{ - dir = 9 - }, -/obj/structure/closet/secure_closet/guncabinet{ - locked = 0; - req_access = list("ACCESS_SYNDICATE") - }, -/obj/item/gun/energy/gun, -/obj/item/gun/energy/gun, -/obj/item/gun/energy/gun/small, -/obj/item/gun/energy/gun/small, -/obj/item/gun/energy/ionrifle/small, -/turf/simulated/floor/tiled/dark/monotile, -/area/map_template/merc_shuttle) -"qj" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 - }, -/obj/structure/window/reinforced/crescent{ - dir = 4 - }, -/obj/structure/bed/chair/shuttle/black{ - dir = 8 - }, -/obj/structure/sign/poster{ - pixel_y = 32 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/merc_shuttle) -"qw" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/merc_shuttle) -"qy" = ( -/obj/effect/wallframe_spawn/reinforced/titanium, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/effect/paint/merc, -/turf/simulated/floor/plating, -/area/map_template/merc_shuttle) -"qA" = ( -/obj/machinery/fabricator/hacked, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/item/stack/material/plastic/ten, -/obj/item/stack/material/aluminium/ten, -/obj/item/stack/material/steel/ten, -/obj/item/stack/material/glass/ten, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/item/stack/material/steel/ten, -/turf/simulated/floor/tiled/dark/monotile, -/area/map_template/merc_shuttle) -"qC" = ( -/obj/machinery/door/airlock, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/steel_ridged, -/area/map_template/merc_spawn) -"qY" = ( -/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply, -/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers, -/turf/simulated/floor/tiled/dark/monotile, -/area/map_template/merc_shuttle) -"qZ" = ( -/obj/structure/table/rack{ - pixel_x = -1 - }, -/obj/item/clothing/glasses/night, -/obj/item/clothing/glasses/night, -/obj/item/clothing/glasses/night, -/obj/item/storage/box/handcuffs{ - pixel_x = 4; - pixel_y = 2 - }, -/obj/item/storage/box/handcuffs{ - pixel_x = 4; - pixel_y = 2 - }, -/obj/item/clothing/glasses/night, -/obj/item/clothing/glasses/night, -/obj/item/clothing/glasses/night, -/obj/effect/floor_decal/corner/red/mono, -/obj/machinery/light{ - dir = 8 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/map_template/merc_spawn) -"rb" = ( -/obj/structure/table/rack{ - pixel_x = -1 - }, -/obj/item/rig/merc/heavy/empty, -/obj/item/rig/merc/heavy/empty, -/obj/item/cell/super, -/obj/item/cell/super, -/obj/effect/floor_decal/corner/blue/mono, -/turf/simulated/floor/tiled/dark/monotile, -/area/map_template/merc_spawn) -"rt" = ( -/obj/machinery/atmospherics/pipe/simple/hidden, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/map_template/merc_shuttle) -"rA" = ( -/obj/machinery/door/airlock/glass/civilian{ - name = "airlock" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled/steel_ridged, -/area/map_template/merc_shuttle) -"rB" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/obj/machinery/alarm{ - pixel_y = 24; - req_access = list("ACCESS_SYNDICATE") - }, -/turf/simulated/floor/tiled/white, -/area/map_template/merc_shuttle) -"rG" = ( -/obj/machinery/body_scanconsole{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/obj/structure/handrail, -/obj/machinery/light{ - dir = 1 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/merc_shuttle) -"rK" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/dark/monotile, -/area/map_template/merc_spawn) -"rL" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/window/reinforced/crescent{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/merc_shuttle) -"rN" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/obj/machinery/recharger/wallcharger{ - pixel_x = 26 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/merc_shuttle) -"sz" = ( -/obj/machinery/door/airlock, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/steel_ridged, -/area/map_template/merc_shuttle) -"sE" = ( -/obj/machinery/atmospherics/pipe/simple/hidden, -/obj/effect/paint/merc, -/turf/simulated/wall/titanium, -/area/map_template/merc_shuttle) -"sH" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/merc_shuttle) -"sO" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/merc_shuttle) -"sS" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 8 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/merc_shuttle) -"sX" = ( -/obj/effect/floor_decal/industrial/warning{ - icon_state = "warning" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/merc_spawn) -"ta" = ( -/obj/machinery/atmospherics/unary/cryo_cell, -/turf/simulated/floor/tiled/white/monotile, -/area/map_template/merc_shuttle) -"th" = ( -/obj/machinery/telecomms/allinone{ - intercept = 1 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/merc_spawn) -"tt" = ( -/obj/machinery/light/small{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/cyan, -/turf/simulated/floor/plating, -/area/map_template/merc_spawn) -"tO" = ( -/obj/effect/floor_decal/corner/purple/half{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/dark, -/area/map_template/merc_spawn) -"tS" = ( -/obj/structure/table/rack{ - pixel_x = -1 - }, -/obj/item/tank/jetpack/carbondioxide, -/obj/item/tank/jetpack/carbondioxide, -/obj/item/tank/jetpack/carbondioxide, -/obj/item/tank/jetpack/oxygen, -/obj/item/tank/jetpack/oxygen, -/obj/item/tank/jetpack/oxygen, -/obj/effect/floor_decal/corner/blue/mono, -/turf/simulated/floor/tiled/dark/monotile, -/area/map_template/merc_spawn) -"tY" = ( -/obj/effect/floor_decal/corner_techfloor_grid, -/obj/effect/floor_decal/techfloor/corner, -/turf/simulated/floor/tiled/dark, -/area/map_template/merc_shuttle) -"uq" = ( -/turf/simulated/floor/tiled/dark/monotile, -/area/map_template/merc_shuttle) -"ut" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/fuel{ - dir = 10 - }, -/obj/structure/catwalk, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 4 - }, -/obj/structure/fuel_port{ - pixel_y = 30 - }, -/turf/simulated/floor/plating, -/area/map_template/merc_shuttle) -"uv" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/obj/structure/catwalk, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/turf/simulated/floor/plating, -/area/map_template/merc_shuttle) -"uE" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 8 - }, -/obj/structure/catwalk, -/obj/structure/fuel_port{ - pixel_y = 30 - }, -/turf/simulated/floor/plating, -/area/map_template/merc_shuttle) -"uJ" = ( -/obj/structure/closet/crate/freezer, -/obj/item/reagent_containers/glass/bottle/antitoxin, -/obj/item/reagent_containers/glass/bottle/antitoxin, -/obj/item/reagent_containers/glass/bottle/inaprovaline, -/obj/item/reagent_containers/glass/bottle/inaprovaline, -/obj/item/reagent_containers/glass/bottle/stoxin, -/obj/item/reagent_containers/glass/bottle/stoxin, -/obj/item/reagent_containers/glass/bottle/dexalin, -/obj/item/reagent_containers/glass/bottle/dexalin, -/obj/item/reagent_containers/glass/bottle/kelotane, -/obj/item/reagent_containers/glass/bottle/kelotane, -/obj/item/reagent_containers/glass/beaker/cryoxadone, -/turf/simulated/floor/tiled/white, -/area/map_template/merc_shuttle) -"uM" = ( -/obj/machinery/door/airlock/multi_tile/glass/civilian{ - dir = 4; - name = "Cryostorage" - }, -/turf/simulated/floor/tiled/steel_ridged, -/area/map_template/merc_spawn) -"uS" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 1 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/merc_shuttle) -"uV" = ( -/obj/effect/paint/silver, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/wall/r_titanium, -/area/map_template/merc_spawn) -"uZ" = ( -/obj/structure/closet/crate{ - dir = 1; - name = "reserve equipment crate" - }, -/obj/item/stack/material/plasteel/ten, -/obj/item/stack/material/steel/fifty, -/obj/item/stack/material/rods/fifty, -/obj/item/stack/material/glass/reinforced/fifty, -/obj/item/stack/material/glass/phoronrglass/ten, -/obj/item/storage/briefcase/inflatable, -/obj/item/storage/briefcase/inflatable, -/obj/item/inflatable_dispenser, -/obj/item/device/spaceflare, -/obj/item/device/spaceflare, -/obj/item/device/spaceflare, -/obj/machinery/light{ - dir = 4 - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 1 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/merc_shuttle) -"vf" = ( -/obj/machinery/light/small{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark, -/area/map_template/merc_spawn) -"vm" = ( -/obj/machinery/door/airlock, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/tiled/steel_ridged, -/area/map_template/merc_shuttle) -"vn" = ( -/turf/simulated/floor/tiled, -/area/map_template/merc_spawn) -"vs" = ( -/obj/machinery/door/airlock/multi_tile/glass/civilian{ - name = "combat equipment" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/tiled/steel_ridged, -/area/map_template/merc_spawn) -"vu" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/dark, -/area/map_template/merc_shuttle) -"vA" = ( -/obj/machinery/vitals_monitor, -/obj/machinery/light{ - dir = 4 - }, -/turf/simulated/floor/tiled/white/monotile, -/area/map_template/merc_shuttle) -"vC" = ( -/obj/machinery/atmospherics/portables_connector{ - dir = 4 - }, -/obj/machinery/portable_atmospherics/canister/carbon_dioxide{ - maximum_pressure = 12000; - start_pressure = 12000 - }, -/obj/effect/floor_decal/industrial/outline/orange, -/obj/machinery/light{ - dir = 8 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/merc_shuttle) -"vH" = ( -/obj/machinery/atmospherics/pipe/manifold4w/hidden/fuel, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/map_template/merc_shuttle) -"vN" = ( -/obj/effect/floor_decal/corner/purple{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply, -/turf/simulated/floor/tiled/dark, -/area/map_template/merc_spawn) -"vO" = ( -/obj/structure/catwalk, -/obj/machinery/meter, -/obj/machinery/atmospherics/pipe/simple/hidden/fuel{ - dir = 10 - }, -/turf/simulated/floor/plating, -/area/map_template/merc_shuttle) -"vZ" = ( -/obj/machinery/portable_atmospherics/canister/oxygen, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/floor/tiled/dark/monotile, -/area/map_template/merc_shuttle) -"wd" = ( -/obj/machinery/sleeper{ - dir = 4 - }, -/obj/machinery/light{ - dir = 8 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/merc_shuttle) -"wx" = ( -/obj/machinery/atmospherics/unary/tank/air{ - dir = 1 - }, -/turf/simulated/floor/plating, -/area/map_template/merc_spawn) -"wG" = ( -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 8 - }, -/obj/structure/table/steel_reinforced, -/obj/item/mech_equipment/drill/steel, -/obj/item/mech_component/manipulators/powerloader, -/obj/item/cell/hyper, -/obj/item/wrench, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/merc_shuttle) -"wL" = ( -/obj/machinery/portable_atmospherics/canister/nitrogen, -/obj/effect/floor_decal/borderfloorwhite/full, -/turf/simulated/floor/tiled, -/area/map_template/merc_spawn) -"wM" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/fuel{ - dir = 6 - }, -/obj/machinery/portable_atmospherics/powered/pump/filled, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/merc_shuttle) -"wW" = ( -/obj/machinery/atmospherics/pipe/simple/hidden, -/turf/simulated/floor/tiled/dark/monotile, -/area/map_template/merc_shuttle) -"xc" = ( -/obj/machinery/atmospherics/portables_connector{ - dir = 4 - }, -/obj/machinery/portable_atmospherics/canister/carbon_dioxide{ - maximum_pressure = 12000; - start_pressure = 12000 - }, -/obj/effect/floor_decal/industrial/outline/orange, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/merc_shuttle) -"xd" = ( -/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{ - dir = 1; - id_tag = "merc_shuttle_base_pump" - }, -/obj/structure/handrail{ - dir = 1 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/merc_spawn) -"xo" = ( -/obj/machinery/atmospherics/unary/vent_pump/on, -/turf/simulated/floor/tiled/freezer, -/area/map_template/merc_spawn) -"xp" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/fuel{ - dir = 9 - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/map_template/merc_shuttle) -"xq" = ( -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/map_template/merc_shuttle) -"xt" = ( -/obj/machinery/light/small{ - dir = 1 - }, -/obj/effect/decal/cleanable/blood/splatter, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/merc_shuttle) -"xA" = ( -/obj/structure/closet/medical_wall/filled{ - pixel_x = -32 - }, -/obj/item/reagent_containers/spray/cleaner, -/obj/item/reagent_containers/spray/sterilizine, -/obj/item/defibrillator/loaded, -/obj/item/storage/firstaid/combat, -/obj/item/clothing/gloves/latex, -/obj/item/clothing/mask/surgical, -/obj/item/bodybag/cryobag, -/obj/item/reagent_containers/ivbag/nanoblood, -/obj/item/storage/firstaid/adv, -/obj/structure/table/standard, -/turf/simulated/floor/tiled/white, -/area/map_template/merc_shuttle) -"xD" = ( -/turf/simulated/floor/tiled/white, -/area/map_template/merc_shuttle) -"xT" = ( -/obj/machinery/door/airlock/multi_tile/glass/civilian{ - dir = 4; - name = "Cryostorage" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled/steel_ridged, -/area/map_template/merc_spawn) -"yk" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/merc_spawn) -"ym" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/fuel{ - dir = 1 - }, -/obj/machinery/mech_recharger, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/merc_shuttle) -"ys" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/light, -/turf/simulated/floor/tiled/dark/monotile, -/area/map_template/merc_shuttle) -"yt" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/fuel{ - dir = 1 - }, -/obj/structure/closet{ - name = "tools" - }, -/obj/item/storage/toolbox/syndicate, -/obj/item/storage/toolbox/syndicate, -/obj/item/storage/toolbox/syndicate, -/obj/item/storage/toolbox/syndicate, -/obj/item/rcd, -/obj/item/rcd, -/obj/item/rcd_ammo/large, -/obj/item/rcd_ammo/large, -/obj/item/gun/energy/plasmacutter, -/obj/item/pickaxe/diamonddrill, -/obj/item/device/paint_sprayer, -/obj/item/storage/belt/utility, -/obj/item/storage/belt/utility, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/merc_shuttle) -"yD" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/effect/catwalk_plated, -/turf/simulated/floor/plating, -/area/map_template/merc_spawn) -"yR" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/fuel{ - dir = 4 - }, -/obj/effect/paint/sun, -/turf/simulated/wall/titanium, -/area/map_template/merc_shuttle) -"yT" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/fuel{ - dir = 1 - }, -/obj/item/reagent_containers/ivbag/nanoblood, -/obj/item/reagent_containers/ivbag/nanoblood, -/obj/structure/iv_drip, -/turf/simulated/floor/tiled/white/monotile, -/area/map_template/merc_shuttle) -"yW" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/fuel{ - dir = 4 - }, -/obj/machinery/optable, -/turf/simulated/floor/tiled/white/monotile, -/area/map_template/merc_shuttle) -"yY" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/fuel{ - dir = 10 - }, -/obj/structure/table/standard, -/obj/item/stack/medical/advanced/bruise_pack, -/obj/item/stack/medical/advanced/bruise_pack, -/obj/item/stack/medical/advanced/bruise_pack, -/obj/item/stack/medical/advanced/bruise_pack, -/obj/item/storage/box/freezer, -/obj/item/storage/firstaid/surgery, -/obj/item/stack/nanopaste, -/turf/simulated/floor/tiled/white/monotile, -/area/map_template/merc_shuttle) -"zj" = ( -/turf/simulated/floor/tiled/freezer, -/area/map_template/merc_spawn) -"zu" = ( -/obj/machinery/bodyscanner{ - dir = 4 - }, -/turf/simulated/floor/tiled/white/monotile, -/area/map_template/merc_shuttle) -"zw" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/fuel, -/obj/structure/catwalk, -/obj/machinery/light, -/obj/machinery/pipedispenser, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/merc_shuttle) -"zC" = ( -/obj/structure/table/steel_reinforced, -/obj/item/stamp/chameleon, -/obj/item/paper_bin{ - pixel_x = -3; - pixel_y = 7 - }, -/obj/item/pen/multi, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/merc_shuttle) -"zJ" = ( -/obj/machinery/portable_atmospherics/canister/oxygen, -/obj/effect/floor_decal/corner/blue/mono, -/turf/simulated/floor/tiled/dark/monotile, -/area/map_template/merc_spawn) -"zK" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/effect/floor_decal/techfloor, -/turf/simulated/floor/tiled/dark, -/area/map_template/merc_shuttle) -"zM" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 8 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/merc_spawn) -"zT" = ( -/obj/machinery/light{ - dir = 4 - }, -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/turf/simulated/floor/tiled/freezer, -/area/map_template/merc_spawn) -"zW" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 4 - }, -/obj/machinery/door/window/brigdoor/eastright{ - dir = 1; - health_max = 150; - name = "The Box"; - req_access = list("ACCESS_SYNDICATE") - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/merc_shuttle) -"Ag" = ( -/obj/effect/floor_decal/industrial/warning, -/obj/effect/landmark{ - name = "Syndicate-Spawn" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/merc_spawn) -"Ak" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 1 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/merc_shuttle) -"Am" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply, -/obj/effect/catwalk_plated, -/turf/simulated/floor/plating, -/area/map_template/merc_spawn) -"AB" = ( -/obj/effect/floor_decal/borderfloorwhite/full, -/turf/simulated/floor/tiled, -/area/map_template/merc_spawn) -"AF" = ( -/obj/effect/paint/merc, -/turf/simulated/wall/titanium, -/area/map_template/merc_shuttle) -"AN" = ( -/obj/machinery/atmospherics/unary/engine{ - dir = 1 - }, -/obj/effect/paint/sun, -/turf/simulated/wall/titanium, -/area/map_template/merc_shuttle) -"AO" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 1 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/merc_shuttle) -"AR" = ( -/obj/structure/handrail{ - dir = 8 - }, -/obj/machinery/recharger/wallcharger{ - pixel_x = 26 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/merc_shuttle) -"AS" = ( -/obj/machinery/portable_atmospherics/canister/air/airlock{ - start_pressure = 1900 - }, -/obj/machinery/atmospherics/portables_connector{ - dir = 1 - }, -/obj/effect/floor_decal/industrial/outline, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/merc_shuttle) -"AZ" = ( -/obj/machinery/atmospherics/pipe/simple/hidden, -/obj/effect/gas_setup, -/obj/structure/table/standard, -/obj/item/storage/belt/medical/emt, -/obj/item/storage/belt/medical/emt, -/obj/item/defibrillator/compact, -/turf/simulated/floor/tiled/white/monotile, -/area/map_template/merc_shuttle) -"Bf" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/turf/simulated/floor/tiled/freezer, -/area/map_template/merc_spawn) -"Bh" = ( -/obj/structure/handrail{ - dir = 4 - }, -/obj/effect/floor_decal/industrial/warning, -/obj/effect/floor_decal/industrial/warning{ - dir = 1 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/merc_shuttle) -"Bj" = ( -/obj/effect/floor_decal/industrial/outline/red, -/obj/machinery/light{ - dir = 4 - }, -/obj/structure/ship_munition/disperser_charge/explosive, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/merc_shuttle) -"Bn" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/universal, -/turf/simulated/floor/plating, -/area/map_template/merc_spawn) -"Bo" = ( -/obj/machinery/atmospherics/unary/freezer{ - dir = 1; - icon_state = "freezer" - }, -/turf/simulated/floor/tiled/white/monotile, -/area/map_template/merc_shuttle) -"Br" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/steel_ridged, -/area/map_template/merc_spawn) -"By" = ( -/obj/machinery/light{ - dir = 8 - }, -/obj/machinery/portable_atmospherics/powered/scrubber, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/merc_shuttle) -"BA" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/floor_decal/techfloor{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark, -/area/map_template/merc_shuttle) -"BK" = ( -/obj/effect/floor_decal/industrial/warning/corner, -/obj/effect/floor_decal/industrial/warning{ - dir = 8 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/merc_shuttle) -"BU" = ( -/obj/machinery/atmospherics/binary/pump/high_power/on{ - target_pressure = 10000 - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/map_template/merc_shuttle) -"BW" = ( -/obj/effect/shuttle_landmark/merc/nav1, -/turf/space, -/area/space) -"Ci" = ( -/obj/effect/floor_decal/corner/b_green{ - dir = 1 - }, -/turf/simulated/floor/tiled, -/area/map_template/merc_spawn) -"Ct" = ( -/obj/effect/spawner/newbomb/timer/syndicate, -/obj/structure/table/rack{ - pixel_x = -1 - }, -/obj/effect/spawner/newbomb/timer/syndicate, -/obj/item/device/assembly/signaler{ - pixel_y = 2 - }, -/obj/item/device/assembly/signaler{ - pixel_y = 2 - }, -/obj/item/device/assembly/signaler{ - pixel_y = 2 - }, -/obj/effect/landmark/delete_on_shuttle{ - shuttle_name = "Desperado" - }, -/obj/effect/floor_decal/corner/red/mono, -/obj/machinery/light{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/map_template/merc_spawn) -"CB" = ( -/obj/effect/floor_decal/industrial/warning, -/obj/effect/landmark{ - name = "Syndicate-Spawn" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/merc_spawn) -"CE" = ( -/obj/effect/floor_decal/techfloor{ - dir = 1 - }, -/turf/simulated/floor/tiled/dark, -/area/map_template/merc_shuttle) -"CQ" = ( -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/computer/modular/preset/full/merc{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/merc_shuttle) -"CZ" = ( -/obj/effect/paint/silver, -/obj/effect/wallframe_spawn/reinforced/titanium, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/plating, -/area/map_template/merc_spawn) -"Di" = ( -/obj/effect/wallframe_spawn/reinforced/titanium, -/obj/effect/paint/silver, -/obj/structure/cable/blue{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden, -/turf/simulated/floor/plating, -/area/map_template/merc_spawn) -"Dk" = ( -/obj/effect/floor_decal/corner/orange/border{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/hidden, -/turf/simulated/floor/tiled/monotile, -/area/map_template/merc_spawn) -"Do" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 1 - }, -/turf/simulated/floor/tiled/freezer, -/area/map_template/merc_spawn) -"Ds" = ( -/obj/machinery/light, -/turf/simulated/floor/tiled, -/area/map_template/merc_spawn) -"DE" = ( -/obj/machinery/power/debug_items/infinite_generator, -/obj/structure/cable{ - d2 = 8; - icon_state = "0-8" - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/merc_spawn) -"DH" = ( -/obj/structure/table/rack{ - pixel_x = -1 - }, -/obj/item/device/suit_cooling_unit, -/obj/item/device/suit_cooling_unit, -/obj/item/device/suit_cooling_unit, -/obj/effect/floor_decal/corner/blue/mono, -/turf/simulated/floor/tiled/dark/monotile, -/area/map_template/merc_spawn) -"DI" = ( -/obj/effect/spawner/newbomb/timer/syndicate, -/obj/structure/table/rack{ - pixel_x = -1 - }, -/obj/effect/spawner/newbomb/timer/syndicate, -/obj/item/device/assembly/signaler{ - pixel_y = 2 - }, -/obj/item/device/assembly/signaler{ - pixel_y = 2 - }, -/obj/item/device/assembly/signaler{ - pixel_y = 2 - }, -/obj/effect/landmark/delete_on_shuttle{ - shuttle_name = "Desperado" - }, -/obj/effect/floor_decal/corner/red/mono, -/turf/simulated/floor/tiled/dark/monotile, -/area/map_template/merc_spawn) -"Eh" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/manifold4w/hidden, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/merc_spawn) -"ER" = ( -/turf/simulated/floor/tiled/white, -/area/map_template/merc_spawn) -"EU" = ( -/obj/effect/floor_decal/corner/purple/half{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark, -/area/map_template/merc_spawn) -"EV" = ( -/obj/structure/reagent_dispensers/water_cooler, -/obj/effect/floor_decal/corner/b_green/mono, -/turf/simulated/floor/tiled/monotile, -/area/map_template/merc_spawn) -"Fm" = ( -/obj/effect/floor_decal/industrial/warning, -/obj/effect/landmark{ - name = "Syndicate-Spawn" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/merc_spawn) -"Fx" = ( -/obj/effect/shuttle_landmark/merc/nav4, -/turf/space, -/area/space) -"Fy" = ( -/obj/effect/floor_decal/corner/purple/half, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark, -/area/map_template/merc_spawn) -"FC" = ( -/obj/effect/floor_decal/corner/purple/half, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark, -/area/map_template/merc_spawn) -"FR" = ( -/obj/effect/floor_decal/techfloor{ - dir = 4 - }, -/obj/machinery/computer/ship/sensors/spacer{ - dir = 8 - }, -/turf/simulated/floor/tiled/dark, -/area/map_template/merc_shuttle) -"Gl" = ( -/obj/effect/floor_decal/corner/blue{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/turf/simulated/floor/tiled/dark, -/area/map_template/merc_spawn) -"Gn" = ( -/obj/structure/closet/secure_closet/freezer/meat, -/obj/item/reagent_containers/food/snacks/meat, -/obj/item/reagent_containers/food/snacks/meat, -/obj/item/reagent_containers/food/snacks/meat, -/obj/item/reagent_containers/food/snacks/meat, -/obj/item/reagent_containers/food/snacks/meat, -/obj/effect/floor_decal/borderfloorwhite/full, -/turf/simulated/floor/tiled, -/area/map_template/merc_spawn) -"Gx" = ( -/obj/effect/floor_decal/techfloor{ - dir = 8 - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/dark, -/area/map_template/merc_shuttle) -"GB" = ( -/obj/effect/floor_decal/corner/purple{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark, -/area/map_template/merc_spawn) -"GG" = ( -/obj/effect/floor_decal/corner/red, -/turf/simulated/floor/tiled, -/area/map_template/merc_spawn) -"GN" = ( -/obj/machinery/door/airlock/glass/civilian{ - name = "airlock" - }, -/turf/simulated/floor/tiled/steel_ridged, -/area/map_template/merc_spawn) -"GO" = ( -/obj/machinery/door/airlock{ - name = "cold storage" - }, -/turf/simulated/floor/tiled/steel_ridged, -/area/map_template/merc_spawn) -"GQ" = ( -/obj/effect/floor_decal/corner/blue/three_quarters, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark, -/area/map_template/merc_spawn) -"Hr" = ( -/obj/structure/curtain/open/bed, -/turf/simulated/floor/tiled/dark, -/area/map_template/merc_spawn) -"Hw" = ( -/obj/effect/floor_decal/corner/purple{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/turf/simulated/floor/tiled, -/area/map_template/merc_spawn) -"Ih" = ( -/obj/effect/paint/silver, -/turf/simulated/wall/r_titanium, -/area/map_template/merc_spawn) -"ID" = ( -/obj/effect/floor_decal/borderfloorwhite/full, -/obj/effect/decal/cleanable/blood/splatter, -/turf/simulated/floor/tiled, -/area/map_template/merc_spawn) -"IO" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/effect/floor_decal/techfloor{ - dir = 1 - }, -/turf/simulated/floor/tiled/dark, -/area/map_template/merc_shuttle) -"Jc" = ( -/obj/effect/wallframe_spawn/reinforced/titanium, -/obj/machinery/door/blast/regular/open{ - density = 0; - dir = 4; - icon_state = "pdoor0"; - id_tag = "merc_external" - }, -/obj/effect/paint/merc, -/turf/simulated/floor/plating, -/area/map_template/merc_shuttle) -"Jr" = ( -/obj/effect/floor_decal/corner/purple{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/map_template/merc_spawn) -"JP" = ( -/obj/structure/hygiene/shower{ - dir = 8 - }, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 8 - }, -/turf/simulated/floor/tiled/freezer, -/area/map_template/merc_spawn) -"JQ" = ( -/obj/structure/hygiene/sink{ - dir = 1; - pixel_y = 16 - }, -/obj/item/vox_changer/merc{ - pixel_y = 32 - }, -/turf/simulated/floor/tiled/freezer, -/area/map_template/merc_spawn) -"KT" = ( -/obj/machinery/light/small{ - dir = 8 - }, -/turf/simulated/floor/tiled/dark, -/area/map_template/merc_spawn) -"Lb" = ( -/obj/structure/reagent_dispensers/watertank, -/turf/simulated/floor/plating, -/area/map_template/merc_spawn) -"Mp" = ( -/obj/effect/floor_decal/corner/blue/mono, -/obj/structure/table/standard, -/obj/item/crowbar, -/obj/item/wrench, -/obj/item/paper/merc/tutorial_3, -/obj/machinery/light, -/turf/simulated/floor/tiled/dark/monotile, -/area/map_template/merc_spawn) -"Mq" = ( -/obj/machinery/light{ - dir = 1 - }, -/obj/effect/floor_decal/corner/b_green{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/map_template/merc_spawn) -"Mt" = ( -/obj/effect/floor_decal/corner/blue/mono, -/obj/machinery/suit_cycler/syndicate{ - locked = 0 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/map_template/merc_spawn) -"MK" = ( -/obj/structure/reagent_dispensers/fueltank, -/turf/simulated/floor/plating, -/area/map_template/merc_spawn) -"MS" = ( -/obj/effect/floor_decal/corner/purple{ - dir = 8 - }, -/turf/simulated/floor/tiled, -/area/map_template/merc_spawn) -"MV" = ( -/obj/effect/floor_decal/corner/red{ - dir = 8 - }, -/obj/effect/floor_decal/corner/black, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 8 - }, -/turf/simulated/floor/tiled, -/area/map_template/merc_spawn) -"MW" = ( -/obj/machinery/light, -/turf/simulated/floor/tiled/freezer, -/area/map_template/merc_spawn) -"MZ" = ( -/obj/effect/floor_decal/corner/red{ - dir = 6 - }, -/obj/effect/floor_decal/corner/black{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/dark, -/area/map_template/merc_spawn) -"Ni" = ( -/obj/machinery/light{ - dir = 8 - }, -/turf/simulated/floor/tiled, -/area/map_template/merc_spawn) -"Nn" = ( -/obj/structure/closet/secure_closet/freezer/meat, -/obj/item/reagent_containers/food/snacks/meat, -/obj/item/reagent_containers/food/snacks/meat, -/obj/item/reagent_containers/food/snacks/meat, -/obj/item/reagent_containers/food/snacks/meat, -/obj/item/reagent_containers/food/snacks/meat, -/obj/effect/floor_decal/borderfloorwhite/full, -/obj/effect/decal/cleanable/blood/splatter, -/turf/simulated/floor/tiled, -/area/map_template/merc_spawn) -"NK" = ( -/obj/item/storage/box/smokes, -/obj/item/storage/box/teargas, -/obj/item/storage/box/flashbangs, -/obj/structure/table/rack{ - pixel_x = -1 - }, -/obj/item/grenade/anti_photon, -/obj/item/grenade/anti_photon, -/obj/item/grenade/anti_photon, -/obj/item/storage/box/frags, -/obj/effect/floor_decal/corner/red/mono, -/turf/simulated/floor/tiled/dark/monotile, -/area/map_template/merc_spawn) -"NW" = ( -/obj/structure/table/rack{ - pixel_x = -1 - }, -/obj/item/clothing/suit/armor/pcarrier/merc, -/obj/item/clothing/suit/armor/pcarrier/merc, -/obj/item/clothing/suit/armor/pcarrier/merc, -/obj/item/clothing/head/helmet/merc, -/obj/item/clothing/head/helmet/merc, -/obj/item/clothing/head/helmet/merc, -/obj/effect/floor_decal/corner/red/mono, -/turf/simulated/floor/tiled/dark/monotile, -/area/map_template/merc_spawn) -"Oj" = ( -/obj/effect/floor_decal/corner_techfloor_grid{ - dir = 8 - }, -/obj/effect/floor_decal/techfloor/corner{ - dir = 8 - }, -/turf/simulated/floor/tiled/dark, -/area/map_template/merc_shuttle) -"Oo" = ( -/obj/effect/paint/merc, -/obj/machinery/vending/medical{ - idle_power_usage = 100; - req_access = list("ACCESS_SYNDICATE") - }, -/turf/simulated/wall/titanium, -/area/map_template/merc_shuttle) -"Oq" = ( -/obj/effect/floor_decal/corner/red{ - dir = 9 - }, -/obj/effect/floor_decal/corner/black{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/tiled/dark, -/area/map_template/merc_spawn) -"OD" = ( -/obj/machinery/door/airlock/glass/civilian{ - name = "airlock" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/tiled/steel_ridged, -/area/map_template/merc_spawn) -"PC" = ( -/obj/random/junk, -/obj/effect/floor_decal/borderfloorwhite/full, -/turf/simulated/floor/tiled, -/area/map_template/merc_spawn) -"Qg" = ( -/obj/effect/floor_decal/corner/purple/half{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 1 - }, -/turf/simulated/floor/tiled/dark, -/area/map_template/merc_spawn) -"Qi" = ( -/obj/structure/table/rack{ - pixel_x = -1 - }, -/obj/item/clothing/accessory/storage/brown_vest, -/obj/item/clothing/accessory/storage/brown_vest, -/obj/item/clothing/accessory/storage/white_vest, -/obj/item/clothing/accessory/storage/white_vest, -/obj/item/clothing/accessory/storage/black_vest, -/obj/item/clothing/accessory/storage/black_vest, -/obj/item/clothing/accessory/storage/bandolier, -/obj/item/clothing/accessory/storage/bandolier, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/merc_spawn) -"Qk" = ( -/obj/effect/floor_decal/techfloor{ - dir = 9 - }, -/turf/simulated/floor/tiled/dark, -/area/map_template/merc_shuttle) -"Qr" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/hologram/holopad/longrange, -/obj/effect/floor_decal/techfloor, -/turf/simulated/floor/tiled/dark, -/area/map_template/merc_shuttle) -"Qs" = ( -/obj/effect/floor_decal/techfloor{ - dir = 4 - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/dark, -/area/map_template/merc_shuttle) -"Rb" = ( -/obj/structure/table/rack{ - pixel_x = -1 - }, -/obj/item/clothing/shoes/magboots/vox, -/obj/item/clothing/shoes/magboots/vox, -/obj/item/clothing/gloves/vox, -/obj/item/clothing/gloves/vox, -/obj/effect/floor_decal/borderfloorwhite/full, -/turf/simulated/floor/tiled, -/area/map_template/merc_spawn) -"RH" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/effect/catwalk_plated, -/turf/simulated/floor/plating, -/area/map_template/merc_spawn) -"RT" = ( -/obj/structure/closet, -/obj/item/storage/belt/security, -/obj/item/storage/belt/holster/security/tactical, -/obj/item/clothing/accessory/storage/holster/thigh, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/merc_spawn) -"RX" = ( -/obj/machinery/light{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/tiled, -/area/map_template/merc_spawn) -"Sf" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/effect/catwalk_plated, -/turf/simulated/floor/plating, -/area/map_template/merc_spawn) -"St" = ( -/obj/effect/wallframe_spawn/reinforced/titanium, -/obj/machinery/door/blast/regular/open{ - density = 0; - icon_state = "pdoor0"; - id_tag = "merc_external" - }, -/obj/effect/paint/merc, -/turf/simulated/floor/plating, -/area/map_template/merc_shuttle) -"SW" = ( -/obj/machinery/atmospherics/unary/vent_pump/on, -/turf/simulated/floor/tiled, -/area/map_template/merc_spawn) -"TF" = ( -/obj/effect/floor_decal/techfloor, -/turf/simulated/floor/tiled/dark, -/area/map_template/merc_shuttle) -"TK" = ( -/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{ - id_tag = "merc_shuttle_base_pump" - }, -/obj/structure/handrail, -/obj/machinery/embedded_controller/radio/airlock/docking_port{ - id_tag = "merc_shuttle_base"; - pixel_y = 19; - tag_airpump = "merc_shuttle_base_pump"; - tag_exterior_door = "merc_shuttle_base_outer"; - tag_interior_door = "merc_shuttle_base_inner"; - tag_interior_sensor = "merc_shuttle_base_sensor" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/merc_spawn) -"TL" = ( -/obj/structure/table/rack{ - pixel_x = -1 - }, -/obj/item/clothing/under/vox/vox_casual, -/obj/item/clothing/under/vox/vox_casual, -/obj/item/clothing/suit/armor/vox_scrap, -/obj/item/clothing/suit/armor/vox_scrap, -/obj/item/clothing/mask/gas/vox, -/obj/item/clothing/mask/gas/vox, -/obj/effect/floor_decal/borderfloorwhite/full, -/obj/machinery/light/small{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/map_template/merc_spawn) -"TR" = ( -/obj/machinery/vending/fitness{ - prices = list() - }, -/obj/effect/floor_decal/corner/b_green/mono, -/turf/simulated/floor/tiled/monotile, -/area/map_template/merc_spawn) -"TX" = ( -/obj/machinery/light, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 1 - }, -/turf/simulated/floor/tiled, -/area/map_template/merc_spawn) -"UK" = ( -/obj/effect/floor_decal/corner/blue{ - dir = 6 - }, -/turf/simulated/floor/tiled/dark, -/area/map_template/merc_spawn) -"UR" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 1 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/merc_spawn) -"Vt" = ( -/obj/effect/floor_decal/corner/blue/three_quarters{ - dir = 4 - }, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 8 - }, -/turf/simulated/floor/tiled/dark, -/area/map_template/merc_spawn) -"VJ" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/dark, -/area/map_template/merc_shuttle) -"Wr" = ( -/obj/structure/table/rack{ - pixel_x = -1 - }, -/obj/item/clothing/head/helmet/space/vox/carapace, -/obj/item/clothing/head/helmet/space/vox/carapace, -/obj/item/clothing/suit/space/vox/carapace, -/obj/item/clothing/suit/space/vox/carapace, -/obj/effect/floor_decal/borderfloorwhite/full, -/turf/simulated/floor/tiled, -/area/map_template/merc_spawn) -"WX" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/fuel{ - dir = 1 - }, -/obj/machinery/computer/ship/engines{ - dir = 1 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/merc_shuttle) -"WY" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/merc_spawn) -"WZ" = ( -/obj/machinery/light{ - dir = 1 - }, -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/turf/simulated/floor/tiled, -/area/map_template/merc_spawn) -"Xa" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 1 - }, -/turf/simulated/floor/tiled, -/area/map_template/merc_spawn) -"Xt" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden{ - dir = 8 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/merc_spawn) -"XJ" = ( -/obj/effect/floor_decal/corner/purple{ - dir = 1 - }, -/turf/simulated/floor/tiled, -/area/map_template/merc_spawn) -"XL" = ( -/obj/machinery/portable_atmospherics/powered/scrubber, -/turf/simulated/floor/plating, -/area/map_template/merc_spawn) -"XQ" = ( -/obj/structure/hygiene/sink{ - dir = 1; - pixel_y = 16 - }, -/turf/simulated/floor/tiled/freezer, -/area/map_template/merc_spawn) -"Ya" = ( -/obj/effect/floor_decal/corner/orange/border{ - dir = 8 - }, -/turf/simulated/floor/tiled/monotile, -/area/map_template/merc_spawn) -"Yq" = ( -/obj/structure/table/rack{ - pixel_x = -1 - }, -/obj/item/rig/merc/empty, -/obj/item/rig/merc/empty, -/obj/item/cell/super, -/obj/item/cell/super, -/obj/effect/floor_decal/corner/blue/mono, -/turf/simulated/floor/tiled/dark/monotile, -/area/map_template/merc_spawn) -"Yv" = ( -/obj/machinery/door/airlock{ - name = "bathroom" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled/steel_ridged, -/area/map_template/merc_spawn) -"YF" = ( -/obj/effect/floor_decal/corner/blue{ - dir = 10 - }, -/turf/simulated/floor/tiled, -/area/map_template/merc_spawn) -"YI" = ( -/obj/effect/floor_decal/corner/red{ - dir = 9 - }, -/obj/effect/floor_decal/corner/black{ - dir = 6 - }, -/turf/simulated/floor/tiled/dark, -/area/map_template/merc_spawn) -"YX" = ( -/obj/machinery/power/apc/hyper{ - dir = 1; - pixel_y = 18; - req_access = list("ACCESS_SYNDICATE") - }, -/obj/structure/cable{ - d2 = 4; - icon_state = "0-4" - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/merc_spawn) -"YZ" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled/freezer, -/area/map_template/merc_spawn) -"Zl" = ( -/turf/simulated/mineral, -/area/space) -"Zq" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/door/airlock{ - name = "maintenance" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled/steel_ridged, -/area/map_template/merc_spawn) -"ZI" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 8 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/merc_spawn) -"ZO" = ( -/obj/effect/floor_decal/corner/red{ - dir = 8 - }, -/turf/simulated/floor/tiled, -/area/map_template/merc_spawn) -"ZX" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/cable{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/machinery/light/small{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/merc_spawn) - -(1,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(2,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(3,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(4,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(5,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(6,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(7,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(8,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(9,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(10,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(11,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(12,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(13,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(14,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(15,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(16,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(17,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(18,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -AF -AF -AF -AF -cC -cC -cC -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(19,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -jt -AF -AF -AF -AF -AF -zC -CQ -Bh -By -wM -AN -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(20,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -cG -cD -AF -AF -kW -kW -AF -xt -zW -aw -ax -BK -lz -cC -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(21,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -AF -AF -Jc -Jc -cI -Jc -AF -kS -mt -pV -AF -qj -rL -AO -Ak -ay -ym -AN -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(22,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -af -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -St -cM -cT -ey -fd -hJ -jE -jQ -mG -uq -vm -qw -rN -AR -uZ -wG -yR -cC -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(23,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -St -cN -cW -eA -fB -gC -gX -vu -VJ -oT -AF -qy -AF -AF -AF -cC -yR -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(24,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -cD -St -cE -dY -FR -fN -jc -tY -kZ -BA -ew -vZ -qA -AF -xc -vC -xc -yR -cC -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(25,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -AF -AF -fa -fa -fa -AF -hL -zK -ld -ne -CE -gX -ys -AF -ut -vH -xp -WX -AN -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(26,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -cH -cO -dn -eG -gr -hR -Qr -lq -nm -IO -jK -qY -sz -uv -vO -BU -zw -cC -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(27,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -AF -AF -fa -fa -fa -AF -hU -TF -lx -nn -CE -gX -ys -AF -uE -xq -xq -yt -AN -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(28,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -cD -St -cQ -Qk -eA -gc -nd -Oj -lB -Gx -pb -wW -rt -sE -AS -Bj -oo -yR -cC -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(29,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -St -cS -eh -nI -nI -ia -jR -nI -Qs -pc -AF -rA -Oo -AF -AF -cC -yR -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(30,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -Zl -Zl -Zl -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -AF -at -em -hr -hr -is -AF -md -nL -ph -AF -rB -sH -uJ -wd -xA -yR -cC -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -BW -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(31,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -Zl -Zl -Zl -Zl -Zl -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -AF -AF -Jc -Jc -Jc -Jc -AF -mi -nW -pj -AF -rG -sO -uS -xD -xD -yT -AN -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(32,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -Zl -Zl -Zl -aa -aa -aa -Zl -Zl -Zl -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -hG -jb -kF -mj -ob -pt -AF -zu -sS -xD -xD -xD -yW -cC -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(33,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -Zl -Zl -Zl -Zl -Zl -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -kR -ml -oc -pH -AF -AF -ta -AZ -Bo -vA -yY -AN -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(34,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -Zl -aa -aa -aa -Zl -Zl -Zl -Zl -Zl -Zl -Zl -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -mo -mm -oC -mm -mo -AF -Jc -Jc -Jc -cC -cC -cC -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(35,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -Zl -Zl -Zl -aa -Zl -Zl -Zl -Zl -Zl -Zl -Zl -Zl -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -mo -mn -Xt -xd -mo -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(36,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -Zl -Zl -Zl -aa -Zl -Zl -Zl -Zl -Zl -Zl -Zl -Zl -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -mo -TK -Eh -xd -mo -Zl -Zl -Zl -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(37,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -Zl -Zl -Zl -aa -Zl -Zl -Zl -Zl -Zl -Zl -Zl -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -mo -mm -gK -es -mo -mo -mo -Zl -Zl -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(38,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -Zl -Zl -aa -aa -Zl -Zl -Zl -Zl -Zl -aa -aa -aa -aa -aa -aa -mo -az -az -mo -mo -az -az -mo -Ya -jJ -Dk -Di -wx -mo -Zl -Zl -Zl -Zl -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(39,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -Zl -Zl -aa -aa -Zl -Zl -Zl -Zl -aa -aa -aa -aa -aa -aa -Zl -mo -aA -Ag -eR -ev -dc -UR -mo -SW -bx -TX -mo -mo -mo -mo -mo -Zl -Zl -Zl -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(40,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -Zl -Zl -Zl -aa -aa -aa -aa -aa -Zl -Zl -aj -ER -CB -eR -ev -fW -ER -GN -vn -yD -ga -mo -rb -zJ -Yq -mo -Zl -Zl -Zl -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(41,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -mo -mo -mo -mo -pk -Fm -eR -ev -au -dq -mo -vn -yD -YF -ib -bj -GQ -Mp -mo -Zl -Zl -Zl -Zl -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(42,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -mo -ap -KT -mo -ex -xT -mo -mo -nu -uM -mo -Mq -oI -lX -CZ -rK -Gl -Mt -mo -Zl -Zl -Zl -Zl -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(43,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -Zl -mo -kx -kb -Hr -gF -Fy -RT -RT -Qg -fi -mo -TR -yD -YF -ib -UK -Vt -oK -mo -Zl -Zl -Zl -Zl -Zl -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(44,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -Zl -mo -ap -kb -mo -kb -FC -RT -RT -EU -kb -mo -iP -yD -mK -mo -tS -lg -DH -mo -Zl -Zl -Zl -Zl -Zl -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(45,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -Zl -mo -ap -kb -mo -kQ -FC -RT -RT -EU -bZ -mo -EV -yD -Ds -mo -mo -mo -mo -mo -Zl -Zl -Zl -Zl -Zl -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(46,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -Zl -Zl -mo -kx -kb -Hr -kb -FC -Qi -hz -EU -kb -mo -Ci -yD -GG -mo -NW -qZ -eX -mo -Zl -Zl -Zl -Zl -Zl -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(47,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -Zl -Zl -Zl -mo -ap -vf -mo -oW -GB -tO -tO -vN -fe -mo -kO -RH -MV -vs -Oq -it -YI -mo -Zl -Zl -Zl -Zl -Zl -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(48,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -Zl -Zl -mo -mo -mo -mo -mo -mo -mo -GN -mm -mm -OD -mo -mo -WZ -Sf -dv -Br -MZ -kV -nY -mo -Zl -Zl -Zl -Zl -Zl -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(49,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -Zl -Zl -mo -Nn -ck -Gn -mo -ak -oX -Hw -XJ -MS -Jr -XJ -Ni -vn -yD -ZO -mo -NK -Ct -DI -mo -Zl -Zl -Zl -Zl -Zl -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(50,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -Zl -Zl -mo -AB -AB -dt -GO -al -oY -Xa -ah -RX -ab -ah -ah -ah -Am -vn -mo -mo -mo -mo -mo -Zl -Zl -Zl -Zl -Zl -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(51,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -Zl -mo -dt -AB -AB -mo -mo -mo -Yv -mo -mo -mo -mo -mo -mm -Zq -mm -mo -mo -mo -mo -Zl -Zl -Zl -Zl -Zl -Zl -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(52,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -az -AB -dt -wL -mo -am -xo -YZ -mo -kg -lj -kg -mo -th -bM -yk -ac -Bn -gd -mo -Zl -Zl -Zl -Zl -Zl -Zl -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(53,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -az -AB -ID -PC -mo -XQ -zj -Do -qC -lo -dT -MW -mo -YX -gY -ZI -sX -lh -Lb -mo -Zl -Zl -Zl -Zl -Zl -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(54,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -Zl -mo -Rb -TL -Wr -mo -JQ -zT -Bf -mo -jF -JP -jF -mo -cB -WY -zM -ae -XL -MK -mo -Zl -Zl -Zl -Zl -Zl -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(55,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -Zl -mo -mo -mo -mo -mo -an -mo -an -mo -mo -mo -mo -mo -ag -ZX -av -bW -tt -wx -mo -Zl -Zl -Zl -Zl -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(56,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -Zl -Zl -Zl -Zl -Zl -mo -ao -mo -ao -mo -Zl -Zl -Zl -mo -Ih -uV -Ih -mo -mo -mo -mo -Zl -Zl -Zl -Zl -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(57,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -Zl -Zl -Zl -Zl -Zl -mo -mo -mo -mo -mo -Zl -Zl -Zl -Zl -Ih -DE -Ih -Zl -Zl -Zl -Zl -Zl -Zl -Zl -Zl -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(58,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -Zl -Zl -Zl -Zl -Zl -Zl -Zl -Zl -Zl -Zl -Zl -Zl -Zl -Zl -Ih -Ih -Ih -Zl -Zl -Zl -Zl -Zl -Zl -Zl -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(59,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -Zl -Zl -Zl -Zl -Zl -Zl -Zl -Zl -Zl -Zl -Zl -Zl -Zl -Zl -Zl -Zl -Zl -Zl -Zl -Zl -Zl -Zl -Zl -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(60,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -Zl -Zl -Zl -Zl -Zl -Zl -Zl -Zl -Zl -Zl -Zl -Zl -Zl -Zl -Zl -Zl -Zl -Zl -Zl -Zl -Zl -Zl -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(61,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -Zl -Zl -Zl -Zl -Zl -Zl -Zl -Zl -Zl -Zl -Zl -Zl -Zl -Zl -Zl -Zl -Zl -Zl -Zl -Zl -Zl -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(62,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -Zl -Zl -Zl -Zl -Zl -Zl -Zl -Zl -Zl -Zl -Zl -Zl -Zl -Zl -Zl -Zl -Zl -Zl -Zl -Zl -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(63,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -Zl -Zl -Zl -Zl -Zl -Zl -Zl -Zl -Zl -Zl -Zl -Zl -Zl -Zl -Zl -Zl -Zl -Zl -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(64,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -Zl -Zl -Zl -Zl -Zl -Zl -aa -aa -Zl -Zl -Zl -Zl -Zl -Zl -Zl -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(65,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -Zl -Zl -Zl -Zl -aa -aa -aa -aa -Zl -Zl -Zl -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(66,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(67,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(68,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(69,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(70,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -Fx -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(71,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(72,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(73,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(74,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(75,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(76,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(77,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(78,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(79,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(80,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(81,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(82,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(83,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(84,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(85,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(86,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(87,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(88,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(89,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(90,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(91,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(92,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(93,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(94,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(95,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(96,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(97,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(98,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(99,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(100,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} diff --git a/maps/antag_spawn/ninja/ninja.dm b/maps/antag_spawn/ninja/ninja.dm deleted file mode 100644 index 077061564fcf1..0000000000000 --- a/maps/antag_spawn/ninja/ninja.dm +++ /dev/null @@ -1,47 +0,0 @@ -/datum/map_template/ruin/antag_spawn/ninja - name = "Ninja Base" - suffixes = list("ninja/ninja_base.dmm") - shuttles_to_initialise = list(/datum/shuttle/autodock/multi/antag/ninja) - apc_test_exempt_areas = list( - /area/map_template/ninja_dojo = NO_SCRUBBER|NO_VENT|NO_APC - ) - -/datum/shuttle/autodock/multi/antag/ninja - name = "Ninja" - defer_initialisation = TRUE - warmup_time = 0 - destination_tags = list( - "nav_ninja_start" - ) - shuttle_area = /area/map_template/ninja_dojo/start - current_location = "nav_ninja_start" - landmark_transition = "nav_ninja_transition" - announcer = "Proximity Sensor Array" - arrival_message = "Attention, anomalous sensor reading detected entering vessel proximity." - departure_message = "Attention, anomalous sensor reading detected leaving vessel proximity." - -/obj/effect/shuttle_landmark/ninja/start - name = "Clan Dojo" - landmark_tag = "nav_ninja_start" - -/obj/effect/shuttle_landmark/ninja/internim - name = "In transit" - landmark_tag = "nav_ninja_transition" - -// Areas -/area/map_template/ninja_dojo - name = "\improper Ninja Base" - icon_state = "green" - requires_power = 0 - dynamic_lighting = 1 - area_flags = AREA_FLAG_RAD_SHIELDED | AREA_FLAG_ION_SHIELDED - req_access = list(access_syndicate) - -/area/map_template/ninja_dojo/dojo - name = "\improper Clan Dojo" - dynamic_lighting = 0 - -/area/map_template/ninja_dojo/start - name = "\improper Clan Dojo" - icon_state = "shuttlered" - base_turf = /turf/simulated/floor/plating \ No newline at end of file diff --git a/maps/antag_spawn/ninja/ninja_base.dmm b/maps/antag_spawn/ninja/ninja_base.dmm deleted file mode 100644 index 44723dbbc4e2f..0000000000000 --- a/maps/antag_spawn/ninja/ninja_base.dmm +++ /dev/null @@ -1,3360 +0,0 @@ -//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE -"ac" = ( -/turf/unsimulated/floor{ - icon = 'icons/turf/snow.dmi'; - icon_state = "snowwhite" - }, -/area/map_template/ninja_dojo/dojo) -"ad" = ( -/turf/unsimulated/floor{ - icon_state = "snow" - }, -/area/map_template/ninja_dojo/dojo) -"ae" = ( -/obj/effect/floor_decal/asteroid, -/turf/unsimulated/floor{ - icon_state = "snow" - }, -/area/map_template/ninja_dojo/dojo) -"af" = ( -/obj/effect/floor_decal/asteroid, -/turf/unsimulated/floor{ - icon = 'icons/turf/snow.dmi'; - icon_state = "snowwhite" - }, -/area/map_template/ninja_dojo/dojo) -"ag" = ( -/obj/structure/flora/tree/dead, -/turf/unsimulated/floor{ - icon_state = "snow" - }, -/area/map_template/ninja_dojo/dojo) -"ah" = ( -/obj/structure/flora/tree/pine, -/turf/unsimulated/floor{ - icon_state = "snow" - }, -/area/map_template/ninja_dojo/dojo) -"ai" = ( -/obj/structure/flora/tree/dead, -/turf/unsimulated/floor{ - icon = 'icons/turf/snow.dmi'; - icon_state = "snowwhite" - }, -/area/map_template/ninja_dojo/dojo) -"aj" = ( -/turf/simulated/wall/wood, -/area/map_template/ninja_dojo/dojo) -"ak" = ( -/obj/structure/table/glass, -/obj/item/storage/firstaid/surgery, -/turf/unsimulated/floor{ - icon_state = "white" - }, -/area/map_template/ninja_dojo/dojo) -"al" = ( -/obj/machinery/optable, -/turf/unsimulated/floor{ - icon_state = "white" - }, -/area/map_template/ninja_dojo/dojo) -"am" = ( -/obj/structure/closet/medical_wall{ - pixel_y = 32 - }, -/obj/item/tank/anesthetic, -/obj/item/clothing/mask/breath/medical, -/obj/item/clothing/gloves/latex, -/obj/item/clothing/mask/surgical, -/obj/structure/hygiene/sink{ - dir = 1; - pixel_y = 16 - }, -/obj/item/reagent_containers/glass/bottle/stoxin, -/obj/item/reagent_containers/glass/bottle/stoxin, -/obj/item/reagent_containers/syringe, -/turf/unsimulated/floor{ - icon_state = "white" - }, -/area/map_template/ninja_dojo/dojo) -"an" = ( -/obj/structure/table/glass, -/obj/item/reagent_containers/ivbag/blood/OMinus, -/obj/item/reagent_containers/ivbag/blood/OMinus, -/obj/structure/window/reinforced/crescent{ - dir = 4 - }, -/turf/unsimulated/floor{ - icon_state = "white" - }, -/area/map_template/ninja_dojo/dojo) -"ao" = ( -/obj/machinery/atmospherics/unary/cryo_cell, -/turf/unsimulated/floor{ - icon_state = "white" - }, -/area/map_template/ninja_dojo/dojo) -"ap" = ( -/obj/machinery/atmospherics/portables_connector, -/obj/machinery/portable_atmospherics/canister/oxygen/prechilled, -/turf/unsimulated/floor{ - icon_state = "white" - }, -/area/map_template/ninja_dojo/dojo) -"aq" = ( -/obj/item/reagent_containers/glass/beaker/cryoxadone, -/obj/structure/table/glass, -/turf/unsimulated/floor{ - icon_state = "white" - }, -/area/map_template/ninja_dojo/dojo) -"ar" = ( -/obj/structure/table/glass, -/obj/item/reagent_containers/spray/sterilizine, -/obj/item/reagent_containers/spray/cleaner, -/turf/unsimulated/floor{ - icon_state = "white" - }, -/area/map_template/ninja_dojo/dojo) -"as" = ( -/turf/unsimulated/floor{ - icon_state = "white" - }, -/area/map_template/ninja_dojo/dojo) -"at" = ( -/obj/structure/table/glass, -/obj/item/storage/firstaid/o2{ - pixel_x = 3; - pixel_y = 3 - }, -/obj/item/storage/firstaid/fire{ - pixel_x = 1 - }, -/obj/structure/window/reinforced/crescent{ - dir = 4 - }, -/turf/unsimulated/floor{ - icon_state = "white" - }, -/area/map_template/ninja_dojo/dojo) -"au" = ( -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 5 - }, -/turf/unsimulated/floor{ - icon_state = "white" - }, -/area/map_template/ninja_dojo/dojo) -"av" = ( -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 9 - }, -/turf/unsimulated/floor{ - icon_state = "white" - }, -/area/map_template/ninja_dojo/dojo) -"aw" = ( -/obj/structure/table/glass, -/obj/item/storage/box/beakers, -/turf/unsimulated/floor{ - icon_state = "white" - }, -/area/map_template/ninja_dojo/dojo) -"ax" = ( -/obj/machinery/computer/teleporter, -/turf/unsimulated/floor{ - icon_state = "plating"; - name = "plating" - }, -/area/map_template/ninja_dojo/dojo) -"ay" = ( -/obj/machinery/tele_projector, -/turf/unsimulated/floor{ - icon_state = "plating"; - name = "plating" - }, -/area/map_template/ninja_dojo/dojo) -"az" = ( -/obj/machinery/tele_pad, -/obj/effect/floor_decal/industrial/hatch/yellow, -/turf/unsimulated/floor{ - icon_state = "plating"; - name = "plating" - }, -/area/map_template/ninja_dojo/dojo) -"aA" = ( -/obj/effect/wingrille_spawn/reinforced/crescent, -/turf/unsimulated/floor{ - icon_state = "plating"; - name = "plating" - }, -/area/map_template/ninja_dojo/dojo) -"aB" = ( -/obj/structure/table/glass, -/obj/item/reagent_containers/syringe/antiviral, -/obj/item/reagent_containers/syringe/antiviral, -/obj/item/stack/medical/advanced/bruise_pack, -/turf/unsimulated/floor{ - icon_state = "white" - }, -/area/map_template/ninja_dojo/dojo) -"aC" = ( -/obj/structure/table/glass, -/obj/item/storage/firstaid/toxin{ - pixel_x = 3; - pixel_y = 3 - }, -/obj/item/storage/firstaid/adv{ - pixel_x = 1 - }, -/obj/structure/window/reinforced/crescent{ - dir = 4 - }, -/turf/unsimulated/floor{ - icon_state = "white" - }, -/area/map_template/ninja_dojo/dojo) -"aD" = ( -/obj/machinery/chemical_dispenser/ert, -/obj/item/reagent_containers/glass/beaker/large, -/turf/unsimulated/floor{ - icon_state = "white" - }, -/area/map_template/ninja_dojo/dojo) -"aE" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 1 - }, -/turf/unsimulated/floor{ - icon_state = "dark" - }, -/area/map_template/ninja_dojo/dojo) -"aF" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 1 - }, -/obj/item/device/radio/intercom/syndicate{ - dir = 8; - pixel_x = 22 - }, -/turf/unsimulated/floor{ - icon_state = "dark" - }, -/area/map_template/ninja_dojo/dojo) -"aG" = ( -/turf/unsimulated/floor{ - dir = 8; - icon_state = "wood" - }, -/area/map_template/ninja_dojo/dojo) -"aH" = ( -/obj/structure/flora/tree/pine, -/turf/unsimulated/floor{ - icon = 'icons/turf/snow.dmi'; - icon_state = "snowwhite" - }, -/area/map_template/ninja_dojo/dojo) -"aI" = ( -/obj/structure/iv_drip, -/obj/structure/window/reinforced/crescent, -/turf/unsimulated/floor{ - icon_state = "white" - }, -/area/map_template/ninja_dojo/dojo) -"aJ" = ( -/obj/structure/table/glass, -/obj/item/storage/firstaid/regular, -/obj/item/storage/firstaid/combat, -/obj/structure/window/reinforced/crescent{ - dir = 4 - }, -/obj/structure/window/reinforced/crescent, -/turf/unsimulated/floor{ - icon_state = "white" - }, -/area/map_template/ninja_dojo/dojo) -"aK" = ( -/obj/effect/floor_decal/spline/fancy/wood/corner, -/turf/unsimulated/floor{ - icon_state = "white" - }, -/area/map_template/ninja_dojo/dojo) -"aL" = ( -/obj/effect/floor_decal/spline/fancy/wood, -/turf/unsimulated/floor{ - icon_state = "white" - }, -/area/map_template/ninja_dojo/dojo) -"aM" = ( -/obj/effect/floor_decal/spline/fancy/wood, -/obj/machinery/chemical_dispenser/full, -/obj/item/reagent_containers/glass/beaker/large, -/turf/unsimulated/floor{ - icon_state = "white" - }, -/area/map_template/ninja_dojo/dojo) -"aN" = ( -/obj/machinery/door/morgue{ - name = "Teleporter" - }, -/turf/unsimulated/floor{ - icon_state = "dark" - }, -/area/map_template/ninja_dojo/dojo) -"aO" = ( -/obj/effect/floor_decal/carpet/blue{ - dir = 8 - }, -/obj/effect/floor_decal/carpet/blue{ - dir = 1 - }, -/obj/effect/floor_decal/carpet/blue{ - dir = 9 - }, -/obj/effect/landmark{ - name = "ninjastart" - }, -/turf/unsimulated/floor{ - dir = 8; - icon_state = "bcarpet" - }, -/area/map_template/ninja_dojo/dojo) -"aP" = ( -/obj/effect/floor_decal/carpet/blue{ - dir = 1 - }, -/turf/unsimulated/floor{ - dir = 8; - icon_state = "bcarpet" - }, -/area/map_template/ninja_dojo/dojo) -"aQ" = ( -/obj/effect/floor_decal/carpet/blue{ - dir = 1 - }, -/obj/effect/floor_decal/carpet/blue{ - dir = 4 - }, -/obj/effect/floor_decal/carpet/blue{ - dir = 5 - }, -/turf/unsimulated/floor{ - dir = 8; - icon_state = "bcarpet" - }, -/area/map_template/ninja_dojo/dojo) -"aR" = ( -/obj/machinery/bodyscanner{ - dir = 8 - }, -/turf/unsimulated/floor{ - icon_state = "white" - }, -/area/map_template/ninja_dojo/dojo) -"aS" = ( -/obj/machinery/body_scanconsole{ - dir = 8 - }, -/turf/unsimulated/floor{ - icon_state = "white" - }, -/area/map_template/ninja_dojo/dojo) -"aT" = ( -/obj/effect/floor_decal/spline/fancy/wood{ - dir = 4 - }, -/turf/unsimulated/floor{ - icon_state = "white" - }, -/area/map_template/ninja_dojo/dojo) -"aU" = ( -/obj/structure/flora/pottedplant/bamboo, -/turf/unsimulated/floor{ - dir = 8; - icon_state = "wood" - }, -/area/map_template/ninja_dojo/dojo) -"aV" = ( -/obj/structure/flora/pottedplant/orientaltree, -/turf/unsimulated/floor{ - dir = 8; - icon_state = "wood" - }, -/area/map_template/ninja_dojo/dojo) -"aW" = ( -/obj/effect/floor_decal/carpet/blue{ - dir = 8 - }, -/turf/unsimulated/floor{ - dir = 8; - icon_state = "bcarpet" - }, -/area/map_template/ninja_dojo/dojo) -"aX" = ( -/obj/effect/floor_decal/chapel{ - dir = 1 - }, -/turf/unsimulated/floor{ - dir = 8; - icon_state = "bcarpet" - }, -/area/map_template/ninja_dojo/dojo) -"aY" = ( -/obj/effect/floor_decal/chapel{ - dir = 4 - }, -/turf/unsimulated/floor{ - dir = 8; - icon_state = "bcarpet" - }, -/area/map_template/ninja_dojo/dojo) -"aZ" = ( -/obj/effect/floor_decal/carpet/blue{ - dir = 4 - }, -/turf/unsimulated/floor{ - dir = 8; - icon_state = "bcarpet" - }, -/area/map_template/ninja_dojo/dojo) -"ba" = ( -/obj/machinery/door/morgue{ - name = "Medical" - }, -/turf/unsimulated/floor{ - dir = 8; - icon_state = "wood" - }, -/area/map_template/ninja_dojo/dojo) -"bb" = ( -/obj/item/device/radio/intercom/syndicate{ - dir = 1; - pixel_y = -22 - }, -/turf/unsimulated/floor{ - dir = 8; - icon_state = "wood" - }, -/area/map_template/ninja_dojo/dojo) -"bc" = ( -/obj/machinery/door/morgue{ - name = "Dojo" - }, -/turf/unsimulated/floor{ - dir = 8; - icon_state = "wood" - }, -/area/map_template/ninja_dojo/dojo) -"bd" = ( -/obj/effect/floor_decal/chapel{ - dir = 8 - }, -/turf/unsimulated/floor{ - dir = 8; - icon_state = "bcarpet" - }, -/area/map_template/ninja_dojo/dojo) -"be" = ( -/obj/effect/floor_decal/chapel, -/turf/unsimulated/floor{ - dir = 8; - icon_state = "bcarpet" - }, -/area/map_template/ninja_dojo/dojo) -"bf" = ( -/obj/effect/floor_decal/spline/fancy/wood, -/obj/machinery/sleeper{ - dir = 4 - }, -/turf/unsimulated/floor{ - icon_state = "white" - }, -/area/map_template/ninja_dojo/dojo) -"bg" = ( -/obj/effect/floor_decal/spline/fancy/wood{ - dir = 6 - }, -/turf/unsimulated/floor{ - icon_state = "white" - }, -/area/map_template/ninja_dojo/dojo) -"bh" = ( -/obj/machinery/door/unpowered/simple/wood, -/turf/unsimulated/floor{ - dir = 8; - icon_state = "wood" - }, -/area/map_template/ninja_dojo/dojo) -"bi" = ( -/obj/effect/floor_decal/carpet/blue, -/obj/effect/floor_decal/carpet/blue{ - dir = 8 - }, -/obj/effect/floor_decal/carpet/blue{ - dir = 10 - }, -/turf/unsimulated/floor{ - dir = 8; - icon_state = "bcarpet" - }, -/area/map_template/ninja_dojo/dojo) -"bj" = ( -/obj/effect/floor_decal/carpet/blue, -/turf/unsimulated/floor{ - dir = 8; - icon_state = "bcarpet" - }, -/area/map_template/ninja_dojo/dojo) -"bk" = ( -/obj/effect/floor_decal/carpet/blue{ - dir = 4 - }, -/obj/effect/floor_decal/carpet/blue, -/obj/effect/floor_decal/carpet/blue{ - dir = 6 - }, -/obj/effect/landmark{ - name = "ninjastart" - }, -/turf/unsimulated/floor{ - dir = 8; - icon_state = "bcarpet" - }, -/area/map_template/ninja_dojo/dojo) -"bl" = ( -/obj/structure/table/rack, -/obj/item/storage/belt/medical, -/turf/unsimulated/floor{ - dir = 8; - icon_state = "wood" - }, -/area/map_template/ninja_dojo/dojo) -"bm" = ( -/obj/item/device/radio/intercom/syndicate{ - dir = 8; - pixel_x = 22 - }, -/turf/unsimulated/floor{ - dir = 8; - icon_state = "wood" - }, -/area/map_template/ninja_dojo/dojo) -"bn" = ( -/turf/unsimulated/floor{ - icon = 'icons/turf/snow.dmi'; - icon_state = "snowplating" - }, -/area/map_template/ninja_dojo/dojo) -"bo" = ( -/obj/effect/floor_decal/snow, -/turf/unsimulated/floor{ - icon = 'icons/turf/snow.dmi'; - icon_state = "snowplating" - }, -/area/map_template/ninja_dojo/dojo) -"bp" = ( -/obj/item/device/radio/intercom/syndicate{ - dir = 4; - pixel_x = -22 - }, -/turf/unsimulated/floor{ - dir = 8; - icon_state = "wood" - }, -/area/map_template/ninja_dojo/dojo) -"bq" = ( -/obj/structure/table/rack, -/obj/item/clothing/accessory/storage/white_vest, -/turf/unsimulated/floor{ - dir = 8; - icon_state = "wood" - }, -/area/map_template/ninja_dojo/dojo) -"br" = ( -/obj/structure/table/rack, -/obj/item/defibrillator/compact/combat/loaded, -/turf/unsimulated/floor{ - dir = 8; - icon_state = "wood" - }, -/area/map_template/ninja_dojo/dojo) -"bs" = ( -/obj/structure/table/rack, -/obj/item/toy/katana{ - name = "practice katana" - }, -/turf/unsimulated/floor{ - dir = 8; - icon_state = "wood" - }, -/area/map_template/ninja_dojo/dojo) -"bt" = ( -/obj/structure/flora/ausbushes/palebush, -/turf/unsimulated/floor{ - icon_state = "snow" - }, -/area/map_template/ninja_dojo/dojo) -"bu" = ( -/obj/structure/bookcase, -/turf/unsimulated/floor{ - dir = 8; - icon_state = "wood" - }, -/area/map_template/ninja_dojo/dojo) -"bv" = ( -/obj/structure/flora/pottedplant/flower, -/turf/unsimulated/floor{ - dir = 8; - icon_state = "wood" - }, -/area/map_template/ninja_dojo/dojo) -"bw" = ( -/obj/structure/table/woodentable, -/obj/machinery/chemical_dispenser/bar_soft/full, -/turf/unsimulated/floor{ - dir = 8; - icon_state = "wood" - }, -/area/map_template/ninja_dojo/dojo) -"bx" = ( -/obj/structure/table/woodentable, -/obj/item/storage/box/glasses, -/turf/unsimulated/floor{ - dir = 8; - icon_state = "wood" - }, -/area/map_template/ninja_dojo/dojo) -"by" = ( -/obj/structure/table/woodentable, -/obj/item/storage/box/donkpocket_premium, -/turf/unsimulated/floor{ - dir = 8; - icon_state = "wood" - }, -/area/map_template/ninja_dojo/dojo) -"bz" = ( -/obj/structure/table/woodentable, -/obj/machinery/microwave, -/turf/unsimulated/floor{ - dir = 8; - icon_state = "wood" - }, -/area/map_template/ninja_dojo/dojo) -"bA" = ( -/obj/effect/floor_decal/carpet{ - dir = 8 - }, -/obj/effect/floor_decal/carpet{ - dir = 1 - }, -/obj/effect/floor_decal/carpet{ - dir = 9 - }, -/turf/unsimulated/floor{ - icon_state = "carpet" - }, -/area/map_template/ninja_dojo/dojo) -"bB" = ( -/obj/effect/floor_decal/carpet{ - dir = 1 - }, -/turf/unsimulated/floor{ - icon_state = "carpet" - }, -/area/map_template/ninja_dojo/dojo) -"bC" = ( -/obj/effect/floor_decal/carpet{ - dir = 4 - }, -/obj/effect/floor_decal/carpet{ - dir = 1 - }, -/obj/effect/floor_decal/carpet{ - dir = 5 - }, -/turf/unsimulated/floor{ - icon_state = "carpet" - }, -/area/map_template/ninja_dojo/dojo) -"bD" = ( -/turf/unsimulated/floor{ - icon_state = "freezerfloor" - }, -/area/map_template/ninja_dojo/dojo) -"bE" = ( -/obj/effect/floor_decal/snow, -/turf/unsimulated/floor{ - icon_state = "freezerfloor" - }, -/area/map_template/ninja_dojo/dojo) -"bF" = ( -/obj/structure/table/woodentable, -/obj/item/reagent_containers/food/drinks/dry_ramen, -/turf/unsimulated/floor{ - dir = 8; - icon_state = "wood" - }, -/area/map_template/ninja_dojo/dojo) -"bG" = ( -/obj/effect/floor_decal/carpet{ - dir = 8 - }, -/turf/unsimulated/floor{ - icon_state = "carpet" - }, -/area/map_template/ninja_dojo/dojo) -"bH" = ( -/turf/unsimulated/floor{ - icon_state = "carpet" - }, -/area/map_template/ninja_dojo/dojo) -"bI" = ( -/obj/effect/floor_decal/carpet{ - dir = 4 - }, -/turf/unsimulated/floor{ - icon_state = "carpet" - }, -/area/map_template/ninja_dojo/dojo) -"bJ" = ( -/obj/effect/floor_decal/snow, -/turf/unsimulated/floor{ - icon = 'icons/turf/snow.dmi'; - icon_state = "ice" - }, -/area/map_template/ninja_dojo/dojo) -"bK" = ( -/obj/machinery/door/morgue{ - name = "Sleeping Chamber" - }, -/turf/unsimulated/floor{ - dir = 8; - icon_state = "wood" - }, -/area/map_template/ninja_dojo/dojo) -"bL" = ( -/obj/structure/table/woodentable, -/obj/item/device/flashlight/lamp, -/turf/unsimulated/floor{ - dir = 8; - icon_state = "wood" - }, -/area/map_template/ninja_dojo/dojo) -"bM" = ( -/obj/effect/floor_decal/snow, -/obj/structure/aliumizer, -/turf/unsimulated/floor{ - icon = 'icons/turf/snow.dmi'; - icon_state = "ice" - }, -/area/map_template/ninja_dojo/dojo) -"bN" = ( -/obj/effect/landmark{ - name = "ninjastart" - }, -/turf/unsimulated/floor{ - dir = 8; - icon_state = "wood" - }, -/area/map_template/ninja_dojo/dojo) -"bO" = ( -/obj/structure/bed/padded, -/obj/item/bedsheet/brown, -/turf/unsimulated/floor{ - dir = 8; - icon_state = "wood" - }, -/area/map_template/ninja_dojo/dojo) -"bP" = ( -/obj/effect/floor_decal/carpet, -/obj/effect/floor_decal/carpet{ - dir = 8 - }, -/obj/effect/floor_decal/carpet{ - dir = 10 - }, -/turf/unsimulated/floor{ - icon_state = "carpet" - }, -/area/map_template/ninja_dojo/dojo) -"bQ" = ( -/obj/effect/floor_decal/carpet, -/turf/unsimulated/floor{ - icon_state = "carpet" - }, -/area/map_template/ninja_dojo/dojo) -"bR" = ( -/obj/effect/floor_decal/carpet{ - dir = 4 - }, -/obj/effect/floor_decal/carpet, -/obj/effect/floor_decal/carpet{ - dir = 6 - }, -/turf/unsimulated/floor{ - icon_state = "carpet" - }, -/area/map_template/ninja_dojo/dojo) -"bS" = ( -/obj/structure/table/woodentable, -/obj/item/reagent_containers/food/snacks/soylentgreen, -/turf/unsimulated/floor{ - dir = 8; - icon_state = "wood" - }, -/area/map_template/ninja_dojo/dojo) -"bT" = ( -/obj/structure/bookcase{ - name = "bookcase (Tactics)" - }, -/turf/unsimulated/floor{ - dir = 8; - icon_state = "wood" - }, -/area/map_template/ninja_dojo/dojo) -"bU" = ( -/obj/structure/flora/pottedplant/shoot, -/turf/unsimulated/floor{ - dir = 8; - icon_state = "wood" - }, -/area/map_template/ninja_dojo/dojo) -"bV" = ( -/obj/structure/bookcase{ - name = "bookcase (Religious)" - }, -/turf/unsimulated/floor{ - dir = 8; - icon_state = "wood" - }, -/area/map_template/ninja_dojo/dojo) -"bW" = ( -/obj/structure/table/woodentable, -/obj/item/toy/figure/wizard, -/obj/item/device/radio/intercom/syndicate{ - dir = 1; - pixel_y = -22 - }, -/turf/unsimulated/floor{ - dir = 8; - icon_state = "wood" - }, -/area/map_template/ninja_dojo/dojo) -"bX" = ( -/obj/structure/table/woodentable, -/obj/item/clothing/shoes/sandal, -/obj/item/clothing/mask/balaclava, -/turf/unsimulated/floor{ - dir = 8; - icon_state = "wood" - }, -/area/map_template/ninja_dojo/dojo) -"bY" = ( -/obj/structure/undies_wardrobe, -/turf/unsimulated/floor{ - dir = 8; - icon_state = "wood" - }, -/area/map_template/ninja_dojo/dojo) -"bZ" = ( -/obj/machinery/door/morgue{ - name = "Bath" - }, -/turf/unsimulated/floor{ - icon_state = "freezerfloor" - }, -/area/map_template/ninja_dojo/dojo) -"ca" = ( -/obj/structure/table/woodentable, -/obj/item/flame/candle, -/turf/unsimulated/floor{ - dir = 8; - icon_state = "wood" - }, -/area/map_template/ninja_dojo/dojo) -"cb" = ( -/obj/effect/floor_decal/spline/fancy/wood/corner, -/obj/item/device/radio/intercom/syndicate{ - dir = 4; - pixel_x = -22 - }, -/turf/unsimulated/floor{ - icon_state = "freezerfloor" - }, -/area/map_template/ninja_dojo/dojo) -"cc" = ( -/obj/effect/floor_decal/spline/fancy/wood, -/turf/unsimulated/floor{ - icon_state = "freezerfloor" - }, -/area/map_template/ninja_dojo/dojo) -"cd" = ( -/obj/effect/floor_decal/spline/fancy/wood, -/obj/structure/hygiene/toilet{ - pixel_y = 8 - }, -/turf/unsimulated/floor{ - icon_state = "freezerfloor" - }, -/area/map_template/ninja_dojo/dojo) -"ce" = ( -/obj/machinery/door/morgue{ - name = "Shrine" - }, -/turf/unsimulated/floor{ - dir = 8; - icon_state = "wood" - }, -/area/map_template/ninja_dojo/dojo) -"cf" = ( -/obj/effect/landmark{ - name = "ninjastart" - }, -/obj/effect/floor_decal/carpet{ - dir = 10 - }, -/obj/effect/floor_decal/carpet{ - dir = 6 - }, -/obj/effect/floor_decal/carpet{ - dir = 9 - }, -/obj/effect/floor_decal/carpet{ - dir = 5 - }, -/turf/unsimulated/floor{ - icon_state = "carpet" - }, -/area/map_template/ninja_dojo/dojo) -"cg" = ( -/obj/structure/table/rack{ - desc = "A simple wooden altar covered in cloth."; - icon = 'icons/obj/cult.dmi'; - icon_state = "churchaltar"; - name = "wooden altar" - }, -/obj/item/material/sword/katana, -/turf/unsimulated/floor{ - dir = 8; - icon_state = "wood" - }, -/area/map_template/ninja_dojo/dojo) -"ch" = ( -/obj/effect/floor_decal/spline/fancy/wood{ - dir = 4 - }, -/turf/unsimulated/floor{ - icon_state = "freezerfloor" - }, -/area/map_template/ninja_dojo/dojo) -"ci" = ( -/turf/unsimulated/floor{ - icon = 'icons/misc/beach.dmi'; - icon_state = "seashallow"; - name = "water" - }, -/area/map_template/ninja_dojo/dojo) -"cj" = ( -/obj/effect/floor_decal/spline/fancy/wood{ - dir = 4 - }, -/obj/structure/hygiene/sink{ - dir = 8; - pixel_x = -12; - pixel_y = 2 - }, -/obj/item/storage/mirror{ - pixel_x = -32 - }, -/turf/unsimulated/floor{ - icon_state = "freezerfloor" - }, -/area/map_template/ninja_dojo/dojo) -"ck" = ( -/obj/effect/paint/black, -/turf/simulated/wall/r_titanium, -/area/map_template/ninja_dojo/start) -"cl" = ( -/obj/machinery/door/morgue{ - name = "Equipment" - }, -/turf/unsimulated/floor{ - icon_state = "dark" - }, -/area/map_template/ninja_dojo/dojo) -"cm" = ( -/obj/machinery/fabricator/hacked, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/unsimulated/floor{ - icon_state = "dark" - }, -/area/map_template/ninja_dojo/dojo) -"cn" = ( -/obj/structure/table/rack, -/obj/item/stack/material/steel{ - amount = 50 - }, -/obj/item/stack/material/steel{ - amount = 50 - }, -/obj/item/stack/material/glass{ - amount = 50 - }, -/obj/item/stack/material/glass{ - amount = 50 - }, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/unsimulated/floor{ - icon_state = "dark" - }, -/area/map_template/ninja_dojo/dojo) -"co" = ( -/obj/structure/table/steel_reinforced, -/obj/item/storage/secure/briefcase/money, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/unsimulated/floor{ - icon_state = "dark" - }, -/area/map_template/ninja_dojo/dojo) -"cp" = ( -/turf/unsimulated/floor{ - icon_state = "dark" - }, -/area/map_template/ninja_dojo/dojo) -"cq" = ( -/obj/structure/table/rack, -/obj/effect/floor_decal/industrial/outline/grey, -/obj/item/device/multitool/hacktool, -/turf/unsimulated/floor{ - icon_state = "dark" - }, -/area/map_template/ninja_dojo/dojo) -"cr" = ( -/obj/structure/table/rack, -/obj/item/storage/belt/utility/full, -/obj/item/device/multitool, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/unsimulated/floor{ - icon_state = "dark" - }, -/area/map_template/ninja_dojo/dojo) -"cs" = ( -/obj/structure/table/steel_reinforced, -/obj/effect/floor_decal/industrial/outline/grey, -/obj/item/implanter/freedom, -/obj/item/implantcase/freedom, -/turf/unsimulated/floor{ - icon_state = "dark" - }, -/area/map_template/ninja_dojo/dojo) -"ct" = ( -/obj/structure/table/steel_reinforced, -/obj/item/device/radio/uplink, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/unsimulated/floor{ - icon_state = "dark" - }, -/area/map_template/ninja_dojo/dojo) -"cu" = ( -/obj/machinery/door/airlock/centcom{ - name = "Equipment" - }, -/turf/unsimulated/floor{ - icon_state = "dark" - }, -/area/map_template/ninja_dojo/dojo) -"cv" = ( -/obj/machinery/acting/changer, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/unsimulated/floor{ - icon_state = "dark" - }, -/area/map_template/ninja_dojo/dojo) -"cw" = ( -/obj/structure/table/rack, -/obj/item/stack/nanopaste, -/obj/item/stack/nanopaste, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/unsimulated/floor{ - icon_state = "dark" - }, -/area/map_template/ninja_dojo/dojo) -"cx" = ( -/obj/structure/shuttle/engine/propulsion{ - dir = 1 - }, -/obj/effect/paint/black, -/turf/simulated/wall/r_titanium, -/area/map_template/ninja_dojo/start) -"cy" = ( -/obj/structure/table/steel_reinforced, -/obj/machinery/cell_charger, -/obj/effect/floor_decal/industrial/outline/grey, -/obj/item/clothing/accessory/storage/bandolier, -/turf/unsimulated/floor{ - icon_state = "dark" - }, -/area/map_template/ninja_dojo/dojo) -"cz" = ( -/obj/structure/table/steel_reinforced, -/obj/machinery/recharger, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/unsimulated/floor{ - icon_state = "dark" - }, -/area/map_template/ninja_dojo/dojo) -"cA" = ( -/obj/structure/table/rack, -/obj/item/material/star/ninja, -/obj/item/material/star/ninja, -/obj/item/material/star/ninja, -/obj/item/material/star/ninja, -/obj/item/material/star/ninja, -/obj/item/material/star/ninja, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/unsimulated/floor{ - icon_state = "dark" - }, -/area/map_template/ninja_dojo/dojo) -"cB" = ( -/obj/structure/table/rack, -/obj/item/material/star, -/obj/item/material/star, -/obj/item/material/star, -/obj/item/material/star, -/obj/item/material/star, -/obj/item/material/star, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/unsimulated/floor{ - icon_state = "dark" - }, -/area/map_template/ninja_dojo/dojo) -"cC" = ( -/obj/structure/table/rack, -/obj/item/clothing/accessory/storage/black_vest, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/unsimulated/floor{ - icon_state = "dark" - }, -/area/map_template/ninja_dojo/dojo) -"cD" = ( -/obj/structure/table/rack, -/obj/item/storage/belt/holster/security/tactical, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/unsimulated/floor{ - icon_state = "dark" - }, -/area/map_template/ninja_dojo/dojo) -"cE" = ( -/obj/structure/table/steel_reinforced, -/obj/item/plastique, -/obj/item/plastique, -/obj/item/device/radio/intercom/syndicate{ - dir = 1; - pixel_y = -22 - }, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/unsimulated/floor{ - icon_state = "dark" - }, -/area/map_template/ninja_dojo/dojo) -"cF" = ( -/obj/structure/table/steel_reinforced, -/obj/item/storage/box/anti_photons, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/unsimulated/floor{ - icon_state = "dark" - }, -/area/map_template/ninja_dojo/dojo) -"cG" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 4; - icon_state = "warning" - }, -/obj/machinery/light{ - dir = 1 - }, -/obj/structure/table/rack, -/turf/unsimulated/floor{ - icon_state = "dark" - }, -/area/map_template/ninja_dojo/start) -"cH" = ( -/obj/machinery/computer/teleporter, -/turf/simulated/floor/plating, -/area/map_template/ninja_dojo/start) -"cI" = ( -/obj/machinery/tele_projector, -/turf/simulated/floor/plating, -/area/map_template/ninja_dojo/start) -"cJ" = ( -/obj/machinery/tele_pad, -/obj/effect/floor_decal/industrial/hatch/yellow, -/turf/simulated/floor/plating, -/area/map_template/ninja_dojo/start) -"cK" = ( -/obj/machinery/light{ - dir = 1 - }, -/obj/machinery/atmospherics/portables_connector, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/portable_atmospherics/canister/air/airlock, -/obj/effect/floor_decal/industrial/warning{ - dir = 8; - icon_state = "warning" - }, -/turf/unsimulated/floor{ - icon_state = "dark" - }, -/area/map_template/ninja_dojo/start) -"cL" = ( -/obj/structure/bed/chair{ - dir = 4 - }, -/obj/machinery/light{ - dir = 8; - icon_state = "tube1" - }, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/unsimulated/floor{ - icon_state = "dark" - }, -/area/map_template/ninja_dojo/start) -"cM" = ( -/turf/unsimulated/floor{ - icon_state = "dark" - }, -/area/map_template/ninja_dojo/start) -"cN" = ( -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 4; - icon_state = "warningcorner" - }, -/turf/unsimulated/floor{ - icon_state = "dark" - }, -/area/map_template/ninja_dojo/start) -"cO" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 1 - }, -/turf/unsimulated/floor{ - icon_state = "dark" - }, -/area/map_template/ninja_dojo/start) -"cP" = ( -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/hidden, -/turf/unsimulated/floor{ - icon_state = "dark" - }, -/area/map_template/ninja_dojo/start) -"cQ" = ( -/obj/machinery/embedded_controller/radio/airlock/docking_port{ - frequency = 1331; - id_tag = "ninja_shuttle"; - pixel_x = -8; - pixel_y = 25; - req_access = list("ACCESS_SYNDICATE") - }, -/obj/machinery/light{ - dir = 8; - icon_state = "tube1" - }, -/turf/unsimulated/floor{ - icon_state = "dark" - }, -/area/map_template/ninja_dojo/start) -"cR" = ( -/obj/machinery/door/airlock/external{ - frequency = 1331; - id_tag = "ninja_shuttle_outer"; - name = "Ship External Access" - }, -/obj/machinery/door/blast/regular{ - density = 0; - icon_state = "pdoor0"; - id_tag = "ninjadoor"; - name = "Blast Door"; - opacity = 0 - }, -/turf/unsimulated/floor{ - icon_state = "dark" - }, -/area/map_template/ninja_dojo/start) -"cS" = ( -/obj/machinery/sleeper{ - dir = 4 - }, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/unsimulated/floor{ - icon_state = "dark" - }, -/area/map_template/ninja_dojo/start) -"cT" = ( -/obj/effect/shuttle_landmark/ninja/start, -/turf/unsimulated/floor{ - icon_state = "dark" - }, -/area/map_template/ninja_dojo/start) -"cU" = ( -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 5 - }, -/obj/machinery/access_button{ - command = "cycle_interior"; - frequency = 1331; - master_tag = "ninja_shuttle"; - name = "interior access button"; - pixel_x = 25; - pixel_y = 25; - req_access = list("ACCESS_SYNDICATE") - }, -/turf/unsimulated/floor{ - icon_state = "dark" - }, -/area/map_template/ninja_dojo/start) -"cV" = ( -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 4 - }, -/obj/machinery/door/airlock/external{ - frequency = 1331; - id_tag = "ninja_shuttle_inner"; - name = "Ship External Access" - }, -/turf/unsimulated/floor{ - icon_state = "dark" - }, -/area/map_template/ninja_dojo/start) -"cW" = ( -/obj/machinery/airlock_sensor{ - frequency = 1331; - id_tag = "ninja_shuttle_sensor"; - pixel_x = 8; - pixel_y = -25 - }, -/obj/machinery/atmospherics/unary/vent_pump/high_volume/shuttle{ - dir = 8; - id_tag = "ninja_shuttle_pump" - }, -/obj/machinery/button/blast_door{ - id_tag = "ninjadoor"; - name = "remote shutter control"; - pixel_x = 25 - }, -/turf/unsimulated/floor{ - icon_state = "dark" - }, -/area/map_template/ninja_dojo/start) -"cX" = ( -/obj/structure/closet, -/obj/machinery/light{ - dir = 8; - icon_state = "tube1" - }, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/unsimulated/floor{ - icon_state = "dark" - }, -/area/map_template/ninja_dojo/start) -"cY" = ( -/obj/structure/table/rack, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/unsimulated/floor{ - icon_state = "dark" - }, -/area/map_template/ninja_dojo/start) -"cZ" = ( -/obj/structure/table/steel_reinforced, -/obj/machinery/light{ - dir = 8; - icon_state = "tube1" - }, -/obj/item/device/radio/intercom/syndicate{ - dir = 4; - pixel_x = -22 - }, -/obj/machinery/cell_charger, -/obj/item/screwdriver, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/unsimulated/floor{ - icon_state = "dark" - }, -/area/map_template/ninja_dojo/start) -"da" = ( -/obj/structure/bed/chair/shuttle, -/turf/unsimulated/floor{ - icon_state = "dark" - }, -/area/map_template/ninja_dojo/start) -"db" = ( -/obj/machinery/button/blast_door{ - id_tag = "ninjawindow"; - name = "remote shutter control"; - pixel_x = 36; - pixel_y = -24 - }, -/obj/machinery/button/windowtint{ - id = "ninja_ship"; - pixel_x = -24; - pixel_y = -25 - }, -/turf/unsimulated/floor{ - icon_state = "dark" - }, -/area/map_template/ninja_dojo/start) -"dc" = ( -/obj/structure/table/steel_reinforced, -/obj/machinery/recharger, -/obj/item/wrench, -/obj/machinery/light{ - dir = 4; - icon_state = "tube1" - }, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/unsimulated/floor{ - icon_state = "dark" - }, -/area/map_template/ninja_dojo/start) -"dd" = ( -/obj/effect/floor_decal/industrial/outline/grey, -/obj/machinery/computer/station_alert/all{ - dir = 1 - }, -/turf/unsimulated/floor{ - icon_state = "dark" - }, -/area/map_template/ninja_dojo/start) -"de" = ( -/obj/effect/floor_decal/industrial/outline/grey, -/obj/machinery/computer/shuttle_control/multi/ninja{ - dir = 1 - }, -/turf/unsimulated/floor{ - icon_state = "dark" - }, -/area/map_template/ninja_dojo/start) -"df" = ( -/obj/effect/floor_decal/industrial/outline/grey, -/obj/machinery/computer/modular/preset/security{ - dir = 1; - icon_state = "console" - }, -/turf/unsimulated/floor{ - icon_state = "dark" - }, -/area/map_template/ninja_dojo/start) -"dg" = ( -/obj/machinery/door/blast/regular{ - id_tag = "ninjawindow"; - name = "Blast Shutter" - }, -/obj/effect/wallframe_spawn/reinforced/polarized{ - id = "ninja_ship" - }, -/obj/effect/paint/black, -/turf/simulated/floor/plating, -/area/map_template/ninja_dojo/start) -"ss" = ( -/turf/unsimulated/wall, -/area/map_template/ninja_dojo/dojo) -"zr" = ( -/obj/effect/floor_decal/snow, -/turf/unsimulated/wall, -/area/map_template/ninja_dojo/dojo) - -(1,1,1) = {" -ss -ss -ss -ss -ss -ss -ss -ss -ss -ss -ss -ss -ss -ss -ss -ss -ss -ss -ss -ss -ss -ss -ss -ss -ss -ss -ss -ss -ss -ss -ss -ss -ss -ss -ss -ss -ss -ss -zr -zr -zr -"} -(2,1,1) = {" -ss -ac -ac -ad -ad -ac -ac -af -ac -ac -ac -ac -ag -ac -ac -ac -ac -ad -ag -bn -bo -ad -ag -ac -ad -bn -bn -bn -bo -bo -bn -bn -bn -bn -bo -bn -bn -bo -bo -bo -zr -"} -(3,1,1) = {" -ss -ad -af -ad -ad -ad -ai -ad -ac -ad -ad -ac -ad -ad -ad -ac -ae -ad -ad -bo -bn -ad -ad -ad -ad -bn -bo -bo -bn -bn -bn -bn -ck -ck -ck -ck -bn -bn -bo -bn -zr -"} -(4,1,1) = {" -ss -ad -ad -ad -ac -ac -ad -ad -ac -ac -aH -ac -ad -ad -ad -ad -ad -ad -ad -bn -bn -ac -ad -ad -ac -bn -bn -bn -bn -bn -bn -ck -ck -cL -cS -ck -ck -bn -bn -bn -ss -"} -(5,1,1) = {" -ss -ad -ad -ad -ac -ad -ad -ac -ad -ad -ac -ac -ad -ad -ad -ad -ad -ad -ad -bn -bo -ad -ad -ae -ad -bo -bn -bn -bn -bn -bn -cx -ck -cM -cM -ck -ck -ck -bn -bn -zr -"} -(6,1,1) = {" -ss -ac -ac -ac -ae -ad -ad -ad -ac -ac -ac -ad -ad -ad -ad -ae -ac -ac -ag -bo -bn -ad -ag -ad -ad -bo -bn -ck -ck -ck -ck -ck -cG -cN -cM -cX -cZ -ck -ck -bn -zr -"} -(7,1,1) = {" -ss -ac -ac -ac -ac -ad -aj -aj -aj -aj -aj -aj -aj -aj -ad -ad -ad -ad -ad -bn -bn -ad -ad -ad -ad -bo -bn -bn -bo -bn -bn -ck -cH -cO -cM -cM -cM -dd -dg -bn -zr -"} -(8,1,1) = {" -ss -ac -ac -ac -ac -ad -aj -ak -ar -aB -aI -aR -as -aj -aj -aj -aj -aj -aA -bh -bh -aA -aj -aj -ad -bn -bn -bn -bo -bo -bn -ck -cI -cO -cT -cM -da -de -dg -bn -ss -"} -(9,1,1) = {" -ss -ac -ag -ac -ad -ad -aj -al -as -as -as -aS -as -bf -bl -bq -aj -bu -aG -aG -aG -aG -bT -aj -ad -bn -bn -bn -bn -bn -bn -ck -cJ -cO -cM -cM -db -df -dg -bn -ss -"} -(10,1,1) = {" -ss -ac -ac -ad -ad -ad -aj -am -as -as -as -as -as -aL -aG -aG -aA -aV -bA -bG -bG -bP -bU -aA -ad -bn -bn -ck -ck -ck -ck -ck -cK -cP -cU -cY -dc -ck -ck -bn -ss -"} -(11,1,1) = {" -ss -ac -ac -ad -ad -ad -aj -an -at -aC -aJ -as -as -aL -aG -aG -ba -aG -bB -bH -bH -bQ -aG -bh -bn -bn -bn -bn -bn -bn -bn -cx -ck -ck -cV -ck -ck -ck -bn -bn -ss -"} -(12,1,1) = {" -ss -ac -ac -ad -ad -ad -aj -ao -au -as -aK -aT -aT -bg -aG -aG -ba -aG -bB -bH -bH -bQ -aG -bh -bn -bn -bn -bn -bn -bn -bn -ck -ck -cQ -cW -ck -ck -bn -bn -bn -ss -"} -(13,1,1) = {" -ss -ac -ad -ad -ad -ad -aj -ap -av -as -aL -aG -aG -aG -aG -aG -aA -bv -bC -bI -bI -bR -aU -aA -ad -bn -bn -bo -bo -bn -bn -bn -ck -cR -ck -ck -bn -bn -bn -bn -zr -"} -(14,1,1) = {" -ss -ac -ad -ac -ae -ad -aj -aq -aw -aD -aM -aU -aG -aG -bm -br -aj -bu -aG -aG -aG -aG -bV -aj -ad -bn -bn -bn -bn -bn -bn -bn -bn -bn -bn -bn -bo -bo -bn -bn -ss -"} -(15,1,1) = {" -ss -ac -ad -ac -ac -ad -aj -aj -aj -aj -aj -aA -ba -aj -aj -aj -aj -aj -aA -bh -bh -aA -aj -aj -ad -bo -bn -bn -bn -bo -bn -bn -bn -bn -bo -bo -bo -bn -bn -bn -zr -"} -(16,1,1) = {" -ss -ad -ad -ac -ac -ad -ad -aj -ax -aE -aA -aV -aG -aj -ad -ad -ad -ad -ad -bn -bn -ad -ad -ad -ad -ad -ad -ad -ad -bn -bn -ad -ad -ad -ac -ad -ad -ad -ad -ad -ss -"} -(17,1,1) = {" -ss -ad -ac -ad -ac -ad -ad -aj -ay -aE -aN -aG -aG -aA -ae -bo -bn -bn -bn -bn -bo -bo -bn -bn -bn -ad -ad -ae -ad -bn -bn -ad -ac -ac -ad -ad -ad -ad -ac -ah -ss -"} -(18,1,1) = {" -ss -ad -ac -ah -ac -ac -ac -aj -az -aF -aA -aG -aG -aA -ad -bn -ag -bn -ad -ad -ad -ad -bn -ah -bn -ac -ad -ad -ad -bn -bn -ad -ad -ad -ad -ag -ad -ad -ad -ad -ss -"} -(19,1,1) = {" -ss -ad -ad -ad -ac -ac -ad -aj -aj -aj -aj -aG -bb -aj -ad -bo -bn -bn -ad -ad -ad -ad -bn -bn -bn -ac -ad -ad -ac -bn -bo -ad -ae -ad -ad -ac -ac -ad -ad -ae -ss -"} -(20,1,1) = {" -ss -ad -ad -ac -ac -ad -ad -ad -ac -ad -aA -aG -aG -aj -ad -bn -ad -ad -bD -bE -bE -bE -ad -ad -bn -ad -ad -ad -ac -bn -bn -ad -ad -ac -ad -ad -ad -ad -ac -ad -ss -"} -(21,1,1) = {" -ss -ad -ad -ac -ad -ac -ad -ad -af -ad -aA -aG -aG -bh -bn -bn -ae -ad -bE -bJ -bM -bD -ad -ad -bo -bn -bo -bn -bn -bn -bn -ad -ad -ac -ad -ac -ad -ad -ad -ac -ss -"} -(22,1,1) = {" -ss -ac -ad -ac -ad -ai -ad -ad -ac -ad -aA -aG -aG -bh -bo -bn -ac -ac -bD -bJ -bJ -bE -ad -ad -bo -bn -bn -bo -bn -bn -bn -ad -ad -ad -ad -ac -ad -ad -ad -ad -ss -"} -(23,1,1) = {" -ss -ac -ac -ac -ad -ad -ad -ad -ac -ad -aA -aG -aG -aj -ad -bn -ac -ad -bE -bE -bD -bE -ac -ad -bn -ac -ad -ad -ad -bn -bn -ad -ad -ad -ad -ad -ad -ad -ag -ad -ss -"} -(24,1,1) = {" -ss -ad -ad -ad -ad -ad -ad -ac -ad -ad -aj -aG -aG -aj -ad -bn -bn -bn -ad -ac -ad -ad -bn -bn -bn -ac -ae -ad -ad -bn -bn -ad -ad -ad -ad -ad -ad -ad -ad -ad -ss -"} -(25,1,1) = {" -ss -ac -ad -ad -ad -ad -ad -ac -ad -ad -aj -aG -aG -aA -ad -bo -bt -bn -ad -ad -ad -ac -bn -ag -bn -ac -ad -aj -aj -cu -cu -aj -aj -ad -ad -ae -ad -ad -ad -ad -ss -"} -(26,1,1) = {" -ss -ad -ad -ad -ad -ac -ac -ac -ad -ad -aj -aG -aG -aA -ad -bn -bn -bn -bo -bo -bn -bn -bn -bo -bn -ad -ad -aj -cm -cp -cp -cy -aj -ad -ad -ad -ac -ac -ac -ad -ss -"} -(27,1,1) = {" -ss -ad -ac -ac -ad -ad -ac -ac -ad -ad -aj -aV -aG -aj -ad -ad -ad -ad -ad -bn -bn -ad -ad -ae -ad -ad -ad -aj -cn -cp -cp -cz -aj -ad -ad -ad -ac -ad -ac -ad -ss -"} -(28,1,1) = {" -ss -ad -ad -ac -ac -ad -ae -ac -aj -aj -aj -aA -bc -aj -aj -aj -aA -aA -aj -bh -bh -aj -aA -aA -aj -aj -aj -aj -co -cp -cp -cA -aj -ad -ad -ad -ad -ad -ac -ad -ss -"} -(29,1,1) = {" -ss -ad -ae -ac -ad -ad -ae -ac -aj -aG -aG -aG -aG -aG -bp -bc -aG -aG -aG -aG -aG -aG -aG -aG -aG -bp -aG -cl -cp -cp -cp -cB -aj -ad -ad -ad -ad -ad -af -ad -ss -"} -(30,1,1) = {" -ss -ac -ac -ac -ac -ad -ac -ad -aA -aG -aG -aG -aG -aG -aG -aA -aV -aG -aG -aG -aG -aG -aG -aG -aG -aG -aV -aj -cq -cp -cp -cC -aj -ad -ad -ad -ad -ad -ac -ad -ss -"} -(31,1,1) = {" -ss -ac -ac -ac -ac -ac -ac -ad -aA -aG -aO -aW -aW -bi -aG -aj -aj -aj -aA -bK -bK -aA -aj -aj -aA -ce -aA -aj -cr -cp -cp -cD -aj -ad -ad -ac -ad -ad -ad -ad -ss -"} -(32,1,1) = {" -ss -ad -ad -ac -ad -ac -ac -ad -aA -aG -aP -aX -bd -bj -aG -bs -aj -bw -bF -aG -aG -bS -bW -aj -aG -cf -aG -aj -cs -cp -cp -cE -aj -ad -ad -ad -ad -aH -ac -ad -ss -"} -(33,1,1) = {" -ss -ad -ad -ac -ag -ad -ac -ad -aA -aG -aP -aY -be -bj -aG -bs -aj -bx -aG -aG -aG -aG -bX -aj -ca -cg -ca -aj -ct -cp -cp -cF -aj -ad -ad -ad -ad -ac -ad -ad -ss -"} -(34,1,1) = {" -ss -ad -ad -ac -ad -ad -ac -ad -aA -aG -aQ -aZ -aZ -bk -aG -bs -aj -by -aG -aG -bN -aG -bY -aj -aj -aj -aj -aj -aj -cv -cw -aj -aj -ad -ad -ad -ad -ad -ad -ad -ss -"} -(35,1,1) = {" -ss -ad -ad -ad -ac -ad -ac -ad -aj -aG -aG -aG -aG -aG -aG -bs -aj -bz -aG -bL -bO -aG -aG -bZ -cb -ch -cj -aj -aj -aj -aj -aj -ad -ad -ad -ad -ad -ad -ad -ad -ss -"} -(36,1,1) = {" -ss -ad -ad -ad -ad -ad -ad -ad -aj -aj -aA -aA -aA -aA -aA -aj -aj -aj -aA -aA -aA -aA -aj -aj -cc -ci -ci -aj -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ss -"} -(37,1,1) = {" -ss -ae -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -aj -cd -ci -ci -aj -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ac -ad -ss -"} -(38,1,1) = {" -ss -ad -ad -ad -ad -ac -ad -ad -ad -ad -ad -ad -ae -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -aj -aj -aj -aj -aj -ad -ae -ac -ac -ad -ad -ad -ad -ad -ad -ac -ad -ss -"} -(39,1,1) = {" -ss -ad -ag -ad -ad -ac -ad -ad -ad -ad -ad -ad -ac -ac -ac -ac -ac -ac -ac -ac -ad -ad -ad -ad -ad -ad -ad -ad -ad -ac -ac -ad -ad -ad -ac -ad -ad -ad -ac -ad -ss -"} -(40,1,1) = {" -ss -ad -ad -ad -ad -ac -ad -ad -ad -ag -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ac -ac -ac -ac -ad -ad -ad -ac -ac -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ss -"} -(41,1,1) = {" -ss -ad -ad -ad -ad -ad -ac -ad -ad -ad -ad -ad -ad -ad -ad -ad -ag -ad -ad -ad -ad -ad -ad -ad -ac -aH -ac -ad -ad -ad -ad -ad -ad -ad -ad -ac -ad -ag -ad -ad -ss -"} -(42,1,1) = {" -ss -ad -ad -ad -ad -ad -ad -ac -ac -ac -ad -ad -ac -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ac -ac -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ss -"} -(43,1,1) = {" -ss -ad -ad -ad -ad -ad -ad -ad -ad -ad -ac -ac -ac -ad -ae -ad -ad -ad -ad -ad -ad -ad -ae -ad -ac -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ss -"} -(44,1,1) = {" -ss -ss -ss -ss -ss -ss -ss -ss -ss -ss -ss -ss -ss -ss -ss -ss -ss -ss -ss -ss -ss -ss -ss -ss -ss -ss -ss -ss -ss -ss -ss -ss -ss -ss -ss -ss -ss -ss -ss -ss -ss -"} diff --git a/maps/antag_spawn/vox/vox_raider.dmm b/maps/antag_spawn/vox/vox_raider.dmm deleted file mode 100644 index 15a91e6cc6cd1..0000000000000 --- a/maps/antag_spawn/vox/vox_raider.dmm +++ /dev/null @@ -1,1648 +0,0 @@ -//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE -"ac" = ( -/obj/effect/paint/vox, -/obj/effect/wallframe_spawn/reinforced/titanium, -/turf/simulated/floor/plating/vox, -/area/map_template/vox_raider) -"ae" = ( -/obj/effect/paint/vox, -/turf/simulated/wall/titanium, -/area/map_template/vox_raider) -"af" = ( -/obj/structure/table/rack, -/obj/item/tank/nitrogen, -/obj/item/tank/nitrogen, -/obj/item/tank/nitrogen, -/obj/item/tank/nitrogen, -/turf/simulated/floor/tiled/dark/monotile/vox, -/area/map_template/vox_raider) -"aj" = ( -/obj/effect/wallframe_spawn/reinforced/titanium, -/obj/effect/paint/vox, -/turf/simulated/floor/plating/vox, -/area/map_template/vox_raider) -"ak" = ( -/obj/item/reagent_containers/ivbag/nanoblood, -/obj/item/reagent_containers/ivbag/nanoblood, -/obj/structure/iv_drip, -/obj/effect/floor_decal/corner/yellow/full, -/turf/simulated/floor/tiled/freezer{ - initial_gas = list("nitrogen" = 101.383) - }, -/area/map_template/vox_raider) -"al" = ( -/obj/machinery/optable, -/obj/effect/floor_decal/corner/yellow/full, -/turf/simulated/floor/tiled/freezer{ - initial_gas = list("nitrogen" = 101.383) - }, -/area/map_template/vox_raider) -"at" = ( -/obj/structure/table/standard, -/obj/item/stack/medical/advanced/bruise_pack, -/obj/item/stack/medical/advanced/bruise_pack, -/obj/item/stack/medical/advanced/bruise_pack, -/obj/item/stack/medical/advanced/bruise_pack, -/obj/item/storage/box/freezer, -/obj/item/storage/firstaid/surgery, -/obj/item/stack/nanopaste, -/obj/effect/floor_decal/corner/yellow/full, -/turf/simulated/floor/tiled/freezer{ - initial_gas = list("nitrogen" = 101.383) - }, -/area/map_template/vox_raider) -"ax" = ( -/turf/space, -/area/space) -"aX" = ( -/obj/machinery/bodyscanner{ - dir = 8 - }, -/obj/effect/floor_decal/corner/yellow/full, -/turf/simulated/floor/tiled/freezer{ - initial_gas = list("nitrogen" = 101.383) - }, -/area/map_template/vox_raider) -"bb" = ( -/obj/machinery/body_scanconsole{ - dir = 8 - }, -/obj/effect/floor_decal/corner/yellow/full, -/turf/simulated/floor/tiled/freezer{ - initial_gas = list("nitrogen" = 101.383) - }, -/area/map_template/vox_raider) -"be" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 4 - }, -/obj/effect/floor_decal/corner/yellow/full, -/turf/simulated/floor/tiled/freezer{ - initial_gas = list("nitrogen" = 101.383) - }, -/area/map_template/vox_raider) -"bi" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/obj/effect/floor_decal/corner/yellow/full, -/turf/simulated/floor/tiled/freezer{ - initial_gas = list("nitrogen" = 101.383) - }, -/area/map_template/vox_raider) -"bk" = ( -/obj/structure/closet/medical_wall/filled{ - pixel_x = 32 - }, -/obj/item/reagent_containers/spray/cleaner, -/obj/item/reagent_containers/spray/sterilizine, -/obj/item/defibrillator/loaded, -/obj/item/storage/firstaid/combat, -/obj/item/bodybag/cryobag, -/obj/item/reagent_containers/ivbag/nanoblood, -/obj/item/storage/firstaid/adv, -/obj/structure/table/standard, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 8; - level = 2 - }, -/obj/machinery/light/vox{ - dir = 4 - }, -/obj/effect/floor_decal/corner/yellow/full, -/turf/simulated/floor/tiled/freezer{ - initial_gas = list("nitrogen" = 101.383) - }, -/area/map_template/vox_raider) -"bv" = ( -/obj/structure/table/rack, -/obj/item/gun/energy/darkmatter, -/obj/effect/floor_decal/corner/b_green/mono, -/turf/simulated/floor/tiled/dark/monotile/vox, -/area/map_template/vox_raider) -"bw" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden{ - dir = 1 - }, -/turf/simulated/floor/plating/vox, -/area/map_template/vox_raider) -"bP" = ( -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 10 - }, -/obj/machinery/telecomms/allinone{ - intercept = 1 - }, -/turf/simulated/floor/plating/vox, -/area/map_template/vox_raider) -"bU" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/light/vox, -/obj/effect/floor_decal/corner/yellow/full, -/turf/simulated/floor/tiled/freezer{ - initial_gas = list("nitrogen" = 101.383) - }, -/area/map_template/vox_raider) -"ck" = ( -/obj/structure/closet/crate/freezer, -/obj/item/reagent_containers/glass/bottle/antitoxin, -/obj/item/reagent_containers/glass/bottle/antitoxin, -/obj/item/reagent_containers/glass/bottle/inaprovaline, -/obj/item/reagent_containers/glass/bottle/inaprovaline, -/obj/item/reagent_containers/glass/bottle/stoxin, -/obj/item/reagent_containers/glass/bottle/stoxin, -/obj/item/reagent_containers/glass/bottle/kelotane, -/obj/item/reagent_containers/glass/bottle/kelotane, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 4; - level = 2 - }, -/obj/effect/floor_decal/corner/yellow/full, -/obj/item/storage/box/detergent, -/obj/item/storage/box/detergent, -/turf/simulated/floor/tiled/freezer{ - initial_gas = list("nitrogen" = 101.383) - }, -/area/map_template/vox_raider) -"cm" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/effect/floor_decal/corner/yellow/full, -/turf/simulated/floor/tiled/freezer{ - initial_gas = list("nitrogen" = 101.383) - }, -/area/map_template/vox_raider) -"cB" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/effect/landmark{ - name = "Vox-Spawn" - }, -/obj/effect/floor_decal/corner/yellow/full, -/turf/simulated/floor/tiled/freezer{ - initial_gas = list("nitrogen" = 101.383) - }, -/area/map_template/vox_raider) -"cJ" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/effect/floor_decal/corner/yellow/full, -/turf/simulated/floor/tiled/freezer{ - initial_gas = list("nitrogen" = 101.383) - }, -/area/map_template/vox_raider) -"cU" = ( -/obj/machinery/vending/medical{ - idle_power_usage = 100; - req_access = list("ACCESS_SYNDICATE") - }, -/obj/machinery/light/small{ - dir = 4 - }, -/obj/effect/floor_decal/corner/yellow/full, -/turf/simulated/floor/tiled/freezer{ - initial_gas = list("nitrogen" = 101.383) - }, -/area/map_template/vox_raider) -"dj" = ( -/obj/machinery/atmospherics/unary/tank/nitrogen{ - dir = 4 - }, -/turf/simulated/floor/plating/vox, -/area/map_template/vox_raider) -"dq" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/effect/floor_decal/corner/b_green{ - dir = 5 - }, -/turf/simulated/floor/tiled/dark/vox, -/area/map_template/vox_raider) -"dr" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/meter, -/turf/simulated/floor/plating/vox, -/area/map_template/vox_raider) -"dv" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden{ - dir = 4 - }, -/obj/effect/landmark{ - name = "Vox-Spawn" - }, -/turf/simulated/floor/plating/vox, -/area/map_template/vox_raider) -"dH" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/universal, -/turf/simulated/floor/plating/vox, -/area/map_template/vox_raider) -"dZ" = ( -/obj/machinery/ion_engine{ - dir = 8 - }, -/turf/simulated/floor/shuttle_ceiling/vox, -/area/map_template/vox_raider) -"ee" = ( -/obj/effect/floor_decal/corner/b_green/half, -/obj/machinery/door/airlock/hatch, -/turf/simulated/floor/tiled/dark/monotile/vox, -/area/map_template/vox_raider) -"ej" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/effect/floor_decal/corner/b_green/half, -/obj/machinery/door/airlock/hatch, -/turf/simulated/floor/tiled/dark/monotile/vox, -/area/map_template/vox_raider) -"ek" = ( -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 9 - }, -/obj/machinery/light/vox, -/turf/simulated/floor/plating/vox, -/area/map_template/vox_raider) -"ew" = ( -/turf/simulated/floor/shuttle_ceiling/vox, -/area/map_template/vox_raider) -"ex" = ( -/obj/machinery/shipsensors, -/turf/simulated/floor/shuttle_ceiling/vox, -/area/map_template/vox_raider) -"ez" = ( -/obj/machinery/computer/ship/engines{ - req_access = list("ACCESS_SYNDICATE") - }, -/obj/machinery/light/vox{ - dir = 1 - }, -/turf/simulated/floor/tiled/dark/monotile/vox, -/area/map_template/vox_raider) -"eB" = ( -/obj/machinery/computer/shuttle_control/explore/vox_raider, -/turf/simulated/floor/tiled/dark/monotile/vox, -/area/map_template/vox_raider) -"eE" = ( -/turf/simulated/floor/tiled/dark/vox, -/area/map_template/vox_raider) -"eF" = ( -/obj/machinery/fabricator/hacked, -/obj/item/stack/material/plastic/ten, -/obj/item/stack/material/aluminium/ten, -/obj/item/stack/material/steel/ten, -/obj/item/stack/material/glass/ten, -/obj/item/stack/material/steel/fifty, -/turf/simulated/floor/tiled/dark/monotile/vox, -/area/map_template/vox_raider) -"eG" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/effect/floor_decal/corner/b_green{ - dir = 9 - }, -/turf/simulated/floor/tiled/dark/vox, -/area/map_template/vox_raider) -"eH" = ( -/obj/machinery/alarm/vox{ - pixel_y = 18; - req_access = list("ACCESS_SYNDICATE") - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/turf/simulated/floor/tiled/dark/vox, -/area/map_template/vox_raider) -"eM" = ( -/obj/machinery/power/smes/buildable/preset/admin, -/obj/effect/floor_decal/industrial/hatch/blue, -/obj/structure/cable/green{ - d2 = 8; - icon_state = "0-8" - }, -/turf/simulated/floor/tiled/dark/monotile/vox, -/area/map_template/vox_raider) -"eP" = ( -/obj/machinery/power/port_gen/pacman, -/obj/structure/cable/yellow{ - d2 = 2; - icon_state = "0-2" - }, -/obj/effect/floor_decal/industrial/hatch/orange, -/turf/simulated/floor/tiled/dark/monotile/vox, -/area/map_template/vox_raider) -"eQ" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/effect/floor_decal/corner/b_green{ - dir = 9 - }, -/turf/simulated/floor/tiled/dark/monotile/vox, -/area/map_template/vox_raider) -"eW" = ( -/obj/effect/floor_decal/corner/b_green/three_quarters{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark/vox, -/area/map_template/vox_raider) -"eX" = ( -/obj/structure/table/rack, -/obj/item/gun/energy/sonic, -/obj/machinery/light/vox{ - dir = 1 - }, -/obj/effect/floor_decal/corner/b_green/mono, -/turf/simulated/floor/tiled/dark/monotile/vox, -/area/map_template/vox_raider) -"ff" = ( -/obj/machinery/computer/ship/helm{ - dir = 4; - req_access = list("ACCESS_SYNDICATE") - }, -/turf/simulated/floor/tiled/dark/monotile/vox, -/area/map_template/vox_raider) -"fi" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 4 - }, -/obj/effect/floor_decal/corner/b_green{ - dir = 10 - }, -/turf/simulated/floor/tiled/dark/vox, -/area/map_template/vox_raider) -"fl" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/obj/effect/floor_decal/corner/b_green/three_quarters{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark/vox, -/area/map_template/vox_raider) -"fo" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 4 - }, -/obj/effect/landmark{ - name = "Vox-Spawn" - }, -/obj/effect/floor_decal/corner/b_green/three_quarters, -/turf/simulated/floor/tiled/dark/vox, -/area/map_template/vox_raider) -"fV" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/effect/floor_decal/corner/b_green/three_quarters{ - dir = 1 - }, -/turf/simulated/floor/tiled/dark/vox, -/area/map_template/vox_raider) -"kF" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - level = 2 - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/effect/floor_decal/corner/b_green{ - dir = 10 - }, -/turf/simulated/floor/tiled/dark/vox, -/area/map_template/vox_raider) -"kI" = ( -/obj/machinery/power/terminal{ - dir = 1 - }, -/obj/structure/cable/yellow{ - d2 = 4; - icon_state = "0-4" - }, -/obj/effect/floor_decal/corner/b_green{ - dir = 10 - }, -/turf/simulated/floor/tiled/dark/vox, -/area/map_template/vox_raider) -"nN" = ( -/obj/machinery/atmospherics/unary/vent_pump/high_volume/shuttle{ - dir = 4; - id_tag = "vox_raider_pump_out_internal" - }, -/turf/simulated/floor/plating/vox, -/area/map_template/vox_raider) -"on" = ( -/obj/structure/bed/chair/comfy/green{ - dir = 8 - }, -/obj/effect/floor_decal/corner/b_green, -/turf/simulated/floor/tiled/dark/vox, -/area/map_template/vox_raider) -"pU" = ( -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/effect/floor_decal/corner/b_green{ - dir = 10 - }, -/turf/simulated/floor/tiled/dark/vox, -/area/map_template/vox_raider) -"qj" = ( -/obj/effect/floor_decal/corner/b_green/three_quarters, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/tiled/dark/vox, -/area/map_template/vox_raider) -"rM" = ( -/obj/effect/paint/vox, -/obj/machinery/atmospherics/pipe/simple/hidden/black{ - dir = 4 - }, -/turf/simulated/wall/titanium, -/area/map_template/vox_raider) -"sE" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, -/obj/effect/floor_decal/corner/b_green/full, -/turf/simulated/floor/tiled/dark/vox, -/area/map_template/vox_raider) -"tN" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/effect/floor_decal/corner/b_green/full, -/turf/simulated/floor/tiled/dark/vox, -/area/map_template/vox_raider) -"tU" = ( -/obj/structure/table/rack, -/obj/effect/floor_decal/corner/b_green/mono, -/obj/item/gun/launcher/alien/slugsling, -/turf/simulated/floor/tiled/dark/monotile/vox, -/area/map_template/vox_raider) -"tW" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 8 - }, -/obj/effect/floor_decal/corner/b_green/full, -/turf/simulated/floor/tiled/dark/vox, -/area/map_template/vox_raider) -"vU" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 - }, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 1 - }, -/obj/structure/table/steel, -/obj/item/clothing/glasses/hud/health/goggle, -/obj/item/clothing/glasses/meson, -/turf/simulated/floor/tiled/dark/monotile/vox, -/area/map_template/vox_raider) -"vX" = ( -/obj/effect/overmap/visitable/sector/vox_start, -/turf/space, -/area/space) -"wm" = ( -/obj/machinery/computer/ship/sensors/vox{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark/monotile/vox, -/area/map_template/vox_raider) -"ww" = ( -/obj/machinery/light/vox, -/obj/effect/landmark{ - name = "Vox-Spawn" - }, -/obj/structure/bed/chair/comfy/green{ - dir = 8 - }, -/obj/effect/floor_decal/corner/b_green{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark/vox, -/area/map_template/vox_raider) -"wz" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 4; - level = 2 - }, -/obj/effect/floor_decal/corner/b_green{ - dir = 5 - }, -/turf/simulated/floor/tiled/dark/vox, -/area/map_template/vox_raider) -"wG" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/black, -/obj/machinery/airlock_sensor{ - frequency = 1331; - id_tag = "vox_raider_sensor"; - pixel_y = -24 - }, -/obj/structure/handrail{ - dir = 1 - }, -/obj/machinery/light/vox{ - dir = 4 - }, -/turf/simulated/floor/plating/vox, -/area/map_template/vox_raider) -"xx" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 8 - }, -/obj/effect/floor_decal/corner/b_green/three_quarters{ - dir = 1 - }, -/turf/simulated/floor/tiled/dark/vox, -/area/map_template/vox_raider) -"xE" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 4; - level = 2 - }, -/obj/structure/closet/crate/radiation, -/obj/item/stack/material/phoron/ten, -/obj/item/stack/material/phoron/ten, -/turf/simulated/floor/tiled/dark/monotile/vox, -/area/map_template/vox_raider) -"xK" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/effect/floor_decal/corner/b_green/half{ - dir = 1 - }, -/obj/machinery/door/airlock/multi_tile{ - dir = 8 - }, -/turf/simulated/floor/tiled/dark/monotile/vox, -/area/map_template/vox_raider) -"yA" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 1 - }, -/obj/effect/floor_decal/corner/b_green/three_quarters{ - dir = 8 - }, -/turf/simulated/floor/tiled/dark/vox, -/area/map_template/vox_raider) -"yQ" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, -/obj/effect/floor_decal/corner/b_green{ - dir = 5 - }, -/turf/simulated/floor/tiled/dark/vox, -/area/map_template/vox_raider) -"zx" = ( -/obj/effect/floor_decal/corner/b_green/full, -/turf/simulated/floor/tiled/dark/vox, -/area/map_template/vox_raider) -"Ah" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/effect/shuttle_landmark/vox_raider/start, -/obj/effect/overmap/visitable/ship/landable/vox_raider, -/obj/effect/floor_decal/corner/b_green{ - dir = 5 - }, -/turf/simulated/floor/tiled/dark/vox, -/area/map_template/vox_raider) -"Am" = ( -/obj/effect/floor_decal/corner/b_green{ - dir = 6 - }, -/turf/simulated/floor/tiled/dark/vox, -/area/map_template/vox_raider) -"Av" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/effect/floor_decal/corner/b_green{ - dir = 5 - }, -/turf/simulated/floor/tiled/dark/vox, -/area/map_template/vox_raider) -"BI" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 4 - }, -/obj/effect/floor_decal/corner/b_green/full, -/turf/simulated/floor/tiled/dark/vox, -/area/map_template/vox_raider) -"Db" = ( -/obj/machinery/atmospherics/portables_connector{ - dir = 1 - }, -/obj/machinery/portable_atmospherics/canister/nitrogen, -/turf/simulated/floor/tiled/dark/monotile/vox, -/area/map_template/vox_raider) -"Dm" = ( -/obj/machinery/portable_atmospherics/canister/nitrogen, -/turf/simulated/floor/tiled/dark/monotile/vox, -/area/map_template/vox_raider) -"Dn" = ( -/obj/structure/closet/crate{ - dir = 1; - name = "reserve equipment crate" - }, -/obj/item/device/multitool, -/obj/item/device/multitool, -/obj/item/device/multitool, -/obj/item/device/multitool, -/obj/item/stack/material/rods/fifty, -/obj/item/device/spaceflare, -/obj/item/device/spaceflare, -/obj/item/storage/backpack/weldpack, -/obj/item/storage/backpack/weldpack, -/turf/simulated/floor/tiled/dark/monotile/vox, -/area/map_template/vox_raider) -"DR" = ( -/obj/machinery/recharge_station, -/turf/simulated/floor/tiled/dark/monotile/vox, -/area/map_template/vox_raider) -"DZ" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/effect/floor_decal/corner/b_green{ - dir = 6 - }, -/turf/simulated/floor/tiled/dark/vox, -/area/map_template/vox_raider) -"EG" = ( -/obj/machinery/light/vox, -/turf/simulated/floor/tiled/dark/vox, -/area/map_template/vox_raider) -"GJ" = ( -/obj/structure/cable/green, -/obj/machinery/power/apc/hyper{ - req_access = list("ACCESS_SYNDICATE") - }, -/turf/simulated/floor/tiled/dark/vox, -/area/map_template/vox_raider) -"HJ" = ( -/obj/machinery/access_button{ - command = "cycle_interior"; - frequency = 1331; - master_tag = "vox_raider"; - name = "interior access button"; - pixel_x = -24; - pixel_y = -24; - req_access = list("ACCESS_SYNDICATE") - }, -/obj/effect/landmark{ - name = "Vox-Spawn" - }, -/obj/effect/floor_decal/corner/b_green{ - dir = 6 - }, -/turf/simulated/floor/tiled/dark/vox, -/area/map_template/vox_raider) -"IF" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/obj/effect/floor_decal/corner/b_green/three_quarters{ - dir = 1 - }, -/turf/simulated/floor/tiled/dark/vox, -/area/map_template/vox_raider) -"Jj" = ( -/obj/machinery/door/airlock/external/bolted{ - frequency = 1331; - id_tag = "vox_raider_outer" - }, -/turf/simulated/floor/tiled/dark/monotile/vox, -/area/map_template/vox_raider) -"JN" = ( -/obj/machinery/door/airlock/hatch, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/effect/floor_decal/corner/b_green/half{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark/monotile/vox, -/area/map_template/vox_raider) -"KM" = ( -/obj/machinery/door/airlock/hatch, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/effect/floor_decal/corner/b_green/half{ - dir = 8 - }, -/turf/simulated/floor/tiled/dark/monotile/vox, -/area/map_template/vox_raider) -"KQ" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark/vox, -/area/map_template/vox_raider) -"Lc" = ( -/obj/machinery/door/airlock/external/bolted_open{ - frequency = 1331; - id_tag = "vox_raider_inner" - }, -/turf/simulated/floor/tiled/dark/monotile/vox, -/area/map_template/vox_raider) -"MZ" = ( -/obj/structure/table/rack, -/obj/item/clothing/mask/gas/swat/vox, -/obj/item/clothing/under/vox/vox_casual, -/obj/machinery/light/vox, -/obj/item/clothing/suit/space/vox/raider, -/obj/item/clothing/head/helmet/space/vox/raider, -/turf/simulated/floor/tiled/dark/monotile/vox, -/area/map_template/vox_raider) -"Ns" = ( -/obj/structure/table/rack, -/obj/item/clothing/mask/gas/swat/vox, -/obj/item/clothing/under/vox/vox_casual, -/obj/item/clothing/suit/space/vox/raider, -/obj/item/clothing/head/helmet/space/vox/raider, -/turf/simulated/floor/tiled/dark/monotile/vox, -/area/map_template/vox_raider) -"Nt" = ( -/obj/structure/table/rack, -/obj/item/clothing/mask/gas/swat/vox, -/obj/item/clothing/under/vox/vox_casual, -/obj/effect/decal/cleanable/filth, -/obj/item/clothing/suit/space/vox/raider, -/obj/item/clothing/head/helmet/space/vox/raider, -/turf/simulated/floor/tiled/dark/monotile/vox, -/area/map_template/vox_raider) -"NI" = ( -/obj/machinery/atmospherics/pipe/vent/high_volume{ - dir = 4 - }, -/turf/simulated/floor/shuttle_ceiling/vox, -/area/map_template/vox_raider) -"On" = ( -/obj/machinery/atmospherics/unary/vent_pump/high_volume/shuttle{ - dir = 8; - id_tag = "vox_raider_pump_out_external" - }, -/obj/machinery/airlock_sensor{ - frequency = 1331; - id_tag = "vox_raider_sensor_external"; - pixel_y = 24 - }, -/obj/machinery/access_button{ - command = "cycle_exterior"; - frequency = 1331; - master_tag = "vox_raider"; - name = "exterior access button"; - pixel_x = -24; - pixel_y = -6; - req_access = list("ACCESS_SYNDICATE") - }, -/turf/simulated/floor/shuttle_ceiling/vox, -/area/map_template/vox_raider) -"OH" = ( -/obj/effect/wallframe_spawn/reinforced/titanium, -/obj/effect/paint/vox, -/obj/machinery/atmospherics/pipe/simple/hidden/red{ - dir = 8 - }, -/turf/simulated/floor/plating/vox, -/area/map_template/vox_raider) -"Ph" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/universal{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark/vox, -/area/map_template/vox_raider) -"Pk" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/obj/effect/floor_decal/corner/b_green{ - dir = 6 - }, -/turf/simulated/floor/tiled/dark/vox, -/area/map_template/vox_raider) -"Rn" = ( -/obj/machinery/light/vox{ - dir = 1 - }, -/obj/effect/floor_decal/corner/b_green/full, -/turf/simulated/floor/tiled/dark/vox, -/area/map_template/vox_raider) -"Ry" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/effect/floor_decal/corner/b_green/half, -/obj/machinery/door/airlock/hatch, -/turf/simulated/floor/tiled/dark/monotile/vox, -/area/map_template/vox_raider) -"RP" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 8 - }, -/turf/simulated/floor/tiled/dark/vox, -/area/map_template/vox_raider) -"Tw" = ( -/obj/machinery/atmospherics/unary/vent_pump/high_volume/shuttle{ - dir = 1; - id_tag = "vox_raider_pump" - }, -/obj/structure/handrail{ - dir = 1 - }, -/turf/simulated/floor/plating/vox, -/area/map_template/vox_raider) -"Uh" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/red{ - dir = 6 - }, -/obj/effect/landmark{ - name = "Vox-Spawn" - }, -/turf/simulated/floor/tiled/dark/vox, -/area/map_template/vox_raider) -"UC" = ( -/obj/effect/wallframe_spawn/reinforced/titanium, -/obj/machinery/atmospherics/pipe/simple/hidden/red{ - dir = 8 - }, -/obj/effect/paint/vox, -/turf/simulated/floor/plating/vox, -/area/map_template/vox_raider) -"UY" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/red{ - dir = 1 - }, -/obj/structure/handrail, -/turf/simulated/floor/plating/vox, -/area/map_template/vox_raider) -"Vf" = ( -/obj/effect/floor_decal/corner/b_green/half, -/turf/simulated/floor/tiled/dark/monotile/vox, -/area/map_template/vox_raider) -"Ww" = ( -/obj/machinery/atmospherics/unary/vent_pump/high_volume/shuttle{ - dir = 8; - id_tag = "vox_raider_pump" - }, -/turf/simulated/floor/plating/vox, -/area/map_template/vox_raider) -"Xq" = ( -/obj/machinery/atmospherics/unary/vent_pump/high_volume/shuttle{ - id_tag = "vox_raider_pump_out_internal" - }, -/obj/structure/handrail, -/obj/machinery/embedded_controller/radio/airlock/airlock_controller{ - cycle_to_external_air = 1; - dir = 8; - frequency = 1331; - id_tag = "vox_raider"; - pixel_x = 22; - req_access = list("ACCESS_SYNDICATE"); - tag_exterior_sensor = "vox_raider_sensor_external" - }, -/turf/simulated/floor/plating/vox, -/area/map_template/vox_raider) -"Xy" = ( -/obj/structure/closet/crate/freezer/meat, -/obj/item/reagent_containers/food/snacks/meat/beef, -/obj/item/reagent_containers/food/snacks/meat/beef, -/obj/item/reagent_containers/food/snacks/meat/beef, -/obj/item/reagent_containers/food/snacks/meat/beef, -/obj/item/reagent_containers/food/snacks/meat/beef, -/obj/item/reagent_containers/food/snacks/meat/beef, -/obj/item/reagent_containers/food/snacks/meat/beef, -/obj/item/reagent_containers/food/snacks/meat/beef, -/obj/item/reagent_containers/food/snacks/meat/beef, -/obj/item/reagent_containers/food/snacks/meat/beef, -/obj/item/reagent_containers/food/snacks/meat/beef, -/obj/item/reagent_containers/food/snacks/meat/beef, -/turf/simulated/floor/tiled/dark/vox, -/area/map_template/vox_raider) -"ZC" = ( -/obj/structure/reagent_dispensers/watertank, -/turf/simulated/floor/tiled/dark/vox, -/area/map_template/vox_raider) - -(1,1,1) = {" -ax -ax -ax -ax -ax -ax -ax -ax -ax -ax -ax -ax -ax -ax -ax -ax -ax -ax -ax -ax -ax -ax -ax -ax -ax -"} -(2,1,1) = {" -ax -ax -ax -ax -ax -ax -ax -ax -ax -ax -ax -ax -ax -ax -ax -ae -ax -ax -ax -ax -ax -ax -ax -ax -ax -"} -(3,1,1) = {" -ax -ax -ax -ax -ax -ax -ax -ax -ax -ax -ax -ae -ax -ax -ax -ew -ae -ax -ax -ax -ax -ax -ax -ax -ax -"} -(4,1,1) = {" -ax -ax -ax -ax -ax -ax -ax -ax -ax -ax -ae -ew -ax -ax -ax -ew -ae -ax -ax -ax -ax -ax -ax -ax -ax -"} -(5,1,1) = {" -ax -ax -ax -ax -ax -ax -ax -ax -ax -ax -ae -ex -ax -vX -ax -ax -ew -ae -ax -ax -ax -ax -ax -ax -ax -"} -(6,1,1) = {" -ax -ax -ax -ax -ax -ax -ax -ax -ax -ax -ae -ae -aj -aj -ae -ax -ew -ae -ax -ax -ax -ax -ax -ax -ax -"} -(7,1,1) = {" -ax -ax -ax -ax -ax -ax -ax -ax -ax -ax -ae -ae -ff -wm -ae -ax -NI -ae -ax -ax -ax -ax -ax -ax -ax -"} -(8,1,1) = {" -ax -ax -ax -ax -ax -ax -ax -ax -ae -ac -ae -ez -on -ww -ae -ae -OH -ae -ae -ax -ax -ax -ax -ax -ax -"} -(9,1,1) = {" -ax -ax -ax -ax -ax -ax -ax -ac -ae -ck -ae -eB -fi -wz -DR -ae -Ph -Xy -ae -ax -ax -ax -ax -ax -ax -"} -(10,1,1) = {" -ax -ax -ax -ax -ax -ax -ax -ac -aX -cm -ee -Am -fl -xx -DZ -JN -Pk -ZC -ae -ax -ax -ax -ax -ax -ax -"} -(11,1,1) = {" -ax -ax -ax -ax -ax -ax -ae -ac -bb -bU -ae -ae -Vf -xK -ae -ae -Rn -xE -ae -ax -ax -ax -ax -ax -ax -"} -(12,1,1) = {" -ax -ax -ax -ax -ax -ax -ae -ak -be -cB -ae -eF -fi -yA -eG -KM -eG -vU -ae -ax -ax -ax -ax -ax -ax -"} -(13,1,1) = {" -ax -ax -ax -ax -ax -ax -ae -al -bi -cJ -ej -eG -fo -yQ -EG -ae -Uh -Db -ae -ax -ax -ax -ax -ax -ax -"} -(14,1,1) = {" -ax -ax -ax -ax -ax -ax -ae -at -bk -cU -ae -eH -kF -Ah -GJ -ae -UC -aj -ae -ax -ax -ax -ax -ax -ax -"} -(15,1,1) = {" -ax -ax -ax -ax -ax -ax -ae -ae -ae -ae -ae -eM -kI -Av -eE -ae -UY -Tw -ae -ax -ax -ax -ax -ax -ax -"} -(16,1,1) = {" -ax -ax -ax -ax -ax -ax -ae -dj -dj -dj -ae -eP -pU -fV -HJ -Lc -Ww -nN -Jj -ax -ax -ax -ax -ax -ax -"} -(17,1,1) = {" -ax -ax -ax -ax -ax -ax -ae -bw -dv -ek -ae -ae -Vf -xK -ae -ae -Xq -wG -ae -ax -ax -ax -ax -ax -ax -"} -(18,1,1) = {" -ax -ax -ax -ax -ax -ax -ae -bP -dH -dr -Ry -eQ -qj -dq -Ns -ae -ae -rM -ae -ax -ax -ax -ax -ax -ax -"} -(19,1,1) = {" -ax -ax -ax -ax -ax -ax -ae -ae -ae -ae -ae -eW -sE -BI -IF -Ns -ae -On -ax -ax -ax -ax -ax -ax -ax -"} -(20,1,1) = {" -ax -ax -ax -ax -ax -ax -ax -ae -dZ -dZ -ae -eX -KQ -Dm -tN -MZ -ae -ax -ax -ax -ax -ax -ax -ax -ax -"} -(21,1,1) = {" -ax -ax -ax -ax -ax -ax -ax -ax -ax -ax -ae -bv -RP -af -tW -Ns -ae -ax -ax -ax -ax -ax -ax -ax -ax -"} -(22,1,1) = {" -ax -ax -ax -ax -ax -ax -ax -ax -ax -ax -ae -tU -eE -Dn -zx -Nt -ae -ax -ax -ax -ax -ax -ax -ax -ax -"} -(23,1,1) = {" -ax -ax -ax -ax -ax -ax -ax -ax -ax -ax -ae -ae -ae -ae -ae -ae -ae -ax -ax -ax -ax -ax -ax -ax -ax -"} -(24,1,1) = {" -ax -ax -ax -ax -ax -ax -ax -ax -ax -ax -ax -ae -dZ -dZ -dZ -ae -ax -ax -ax -ax -ax -ax -ax -ax -ax -"} -(25,1,1) = {" -ax -ax -ax -ax -ax -ax -ax -ax -ax -ax -ax -ax -ax -ax -ax -ax -ax -ax -ax -ax -ax -ax -ax -ax -ax -"} diff --git a/maps/antag_spawn/vox/voxraider.dm b/maps/antag_spawn/vox/voxraider.dm deleted file mode 100644 index 49baa5de1bbe7..0000000000000 --- a/maps/antag_spawn/vox/voxraider.dm +++ /dev/null @@ -1,85 +0,0 @@ -/datum/map_template/ruin/antag_spawn/vox_raider - name = "Vox Raider" - suffixes = list("vox/vox_raider.dmm") - shuttles_to_initialise = list(/datum/shuttle/autodock/overmap/vox_raider) - -/obj/effect/overmap/visitable/sector/vox_start - name = "Empty Space" - desc = "Just some empty space, with an irregular sensor echo." - in_space = TRUE - known = FALSE - place_near_main = list(2, 4) - icon_state = "event" - hide_from_reports = TRUE - initial_generic_waypoints = list( - "nav_vox_raider_start" - ) - -/obj/effect/overmap/visitable/ship/landable/vox_raider - name = "Alien Interceptor" - desc = "An irregular, bulbous craft of unknown origin." - shuttle = "Alien Interceptor" - fore_dir = WEST - vessel_size = SHIP_SIZE_SMALL - vessel_mass = 2500 //Vox alloys are lightweight or smthn. Idk. - -/datum/shuttle/autodock/overmap/vox_raider - name = "Alien Interceptor" - shuttle_area = list(/area/map_template/vox_raider) - dock_target = "vox_raider" - current_location = "nav_vox_raider_start" - defer_initialisation = TRUE - ceiling_type = /turf/simulated/floor/shuttle_ceiling/vox - warmup_time = 5 - range = 2 - fuel_consumption = 0 - skill_needed = SKILL_NONE - knockdown = FALSE - -/turf/simulated/floor/tiled/dark/vox - initial_gas = list("nitrogen" = 102.684) - -/turf/simulated/floor/tiled/dark/monotile/vox - initial_gas = list("nitrogen" = 102.684) - -/turf/simulated/floor/shuttle_ceiling/vox - color = COLOR_DARK_GUNMETAL - -/obj/effect/paint/vox - color = COLOR_VOX - -/obj/machinery/computer/shuttle_control/explore/vox_raider - name = "shuttle control console" - shuttle_tag = "Alien Interceptor" - -/obj/effect/shuttle_landmark/vox_raider/start - landmark_tag = "nav_vox_raider_start" - name = "Echo Source" - -/obj/machinery/alarm/vox_raider - req_access = list() - -/obj/machinery/alarm/vox_raider/Initialize() - .=..() - TLV[GAS_OXYGEN] = list(-1, -1, 0.1, 0.5) // Partial pressure, kpa - TLV[GAS_NITROGEN] = list(16, 19, 135, 140) // Partial pressure, kpa - -/obj/machinery/light/vox - name = "alien light" - light_type = /obj/item/light/tube/vox - desc = "An alien light that smells faintly of rotting meat." - - -/obj/item/light/tube/vox - name = "alien light tube" - color = "#a2f7b8" - b_colour = "#a2f7b8" - desc = "An alien light tube. Smells like rotting meat.." - random_tone = FALSE - - -/area/map_template/vox_raider - name = "\improper Alien Interceptor" - icon_state = "syndie-ship" - area_flags = AREA_FLAG_RAD_SHIELDED | AREA_FLAG_ION_SHIELDED - req_access = list(access_syndicate) diff --git a/maps/antag_spawn/wizard/wizard.dm b/maps/antag_spawn/wizard/wizard.dm deleted file mode 100644 index 97671d4c20c3a..0000000000000 --- a/maps/antag_spawn/wizard/wizard.dm +++ /dev/null @@ -1,10 +0,0 @@ -/datum/map_template/ruin/antag_spawn/wizard - name = "Wizard Base" - suffixes = list("wizard/wizard_base.dmm") - -/area/map_template/wizard_station - name = "\improper Wizard's Den" - icon_state = "yellow" - requires_power = 0 - dynamic_lighting = 0 - req_access = list(access_syndicate) diff --git a/maps/antag_spawn/wizard/wizard_base.dmm b/maps/antag_spawn/wizard/wizard_base.dmm deleted file mode 100644 index a306f7cbb780d..0000000000000 --- a/maps/antag_spawn/wizard/wizard_base.dmm +++ /dev/null @@ -1,1933 +0,0 @@ -//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE -"aa" = ( -/turf/space/bluespace, -/area/space) -"ab" = ( -/turf/unsimulated/wall, -/area/map_template/wizard_station) -"ac" = ( -/turf/unsimulated/wall/fakeglass{ - dir = 8 - }, -/area/map_template/wizard_station) -"ad" = ( -/turf/unsimulated/wall/fakeglass{ - dir = 8; - icon_state = "fakewindows2" - }, -/area/map_template/wizard_station) -"ae" = ( -/turf/unsimulated/wall/fakeglass{ - dir = 4 - }, -/area/map_template/wizard_station) -"af" = ( -/obj/structure/table/woodentable, -/obj/item/device/flashlight/lamp/green{ - on = 0; - pixel_x = -3; - pixel_y = 8 - }, -/obj/item/reagent_containers/food/drinks/flask/barflask, -/turf/simulated/floor/carpet, -/area/map_template/wizard_station) -"ag" = ( -/obj/structure/bed/padded, -/obj/item/bedsheet/rd, -/turf/simulated/floor/carpet, -/area/map_template/wizard_station) -"ah" = ( -/obj/structure/table/woodentable, -/obj/item/storage/backpack/satchel/grey/withwallet, -/obj/item/clothing/glasses/monocle, -/turf/simulated/floor/carpet, -/area/map_template/wizard_station) -"ai" = ( -/obj/structure/table/woodentable, -/obj/effect/landmark{ - name = "Teleport-Scroll" - }, -/obj/item/toy/figure/ninja, -/turf/simulated/floor/carpet, -/area/map_template/wizard_station) -"aj" = ( -/obj/effect/landmark/start{ - name = "wizard" - }, -/turf/simulated/floor/carpet, -/area/map_template/wizard_station) -"ak" = ( -/obj/structure/aliumizer, -/turf/simulated/floor/carpet, -/area/map_template/wizard_station) -"al" = ( -/obj/structure/table/woodentable, -/obj/item/storage/backpack/cultpack, -/turf/simulated/floor/carpet, -/area/map_template/wizard_station) -"am" = ( -/turf/simulated/floor/carpet, -/area/map_template/wizard_station) -"an" = ( -/obj/item/device/radio/intercom/syndicate{ - dir = 8; - pixel_x = 22 - }, -/turf/simulated/floor/carpet, -/area/map_template/wizard_station) -"ao" = ( -/obj/structure/table/woodentable, -/obj/item/storage/backpack/satchel/grey/withwallet, -/turf/simulated/floor/carpet, -/area/map_template/wizard_station) -"ap" = ( -/obj/structure/undies_wardrobe, -/turf/simulated/floor/carpet, -/area/map_template/wizard_station) -"aq" = ( -/obj/machinery/door/unpowered/simple/wood, -/turf/simulated/floor/carpet, -/area/map_template/wizard_station) -"ar" = ( -/obj/structure/bookcase{ - name = "Forbidden Knowledge" - }, -/obj/effect/decal/cleanable/cobweb, -/turf/unsimulated/floor{ - dir = 8; - icon_state = "wood" - }, -/area/map_template/wizard_station) -"as" = ( -/obj/structure/table/woodentable, -/obj/item/dice, -/turf/unsimulated/floor{ - dir = 8; - icon_state = "wood" - }, -/area/map_template/wizard_station) -"at" = ( -/turf/unsimulated/floor{ - dir = 8; - icon_state = "wood" - }, -/area/map_template/wizard_station) -"au" = ( -/obj/structure/table/woodentable, -/obj/item/dice/d20, -/turf/unsimulated/floor{ - dir = 8; - icon_state = "wood" - }, -/area/map_template/wizard_station) -"av" = ( -/obj/structure/bookcase{ - name = "bookcase (Tactics)" - }, -/turf/unsimulated/floor{ - dir = 8; - icon_state = "wood" - }, -/area/map_template/wizard_station) -"aw" = ( -/obj/structure/bookcase{ - name = "Forbidden Knowledge" - }, -/turf/unsimulated/floor{ - dir = 8; - icon_state = "wood" - }, -/area/map_template/wizard_station) -"ax" = ( -/mob/living/carbon/human/monkey{ - name = "Murphey" - }, -/turf/unsimulated/floor{ - dir = 8; - icon_state = "wood" - }, -/area/map_template/wizard_station) -"ay" = ( -/turf/unsimulated/wall/fakeglass{ - dir = 1 - }, -/area/map_template/wizard_station) -"az" = ( -/turf/unsimulated/floor{ - icon = 'icons/misc/beach.dmi'; - icon_state = "seashallow"; - name = "water" - }, -/area/map_template/wizard_station) -"aA" = ( -/obj/item/bikehorn/rubberducky, -/turf/unsimulated/floor{ - icon = 'icons/misc/beach.dmi'; - icon_state = "seashallow"; - name = "water" - }, -/area/map_template/wizard_station) -"aB" = ( -/obj/effect/floor_decal/spline/fancy/wood{ - dir = 8 - }, -/obj/machinery/acting/changer/mirror{ - pixel_y = 32 - }, -/turf/unsimulated/floor{ - icon_state = "freezerfloor" - }, -/area/map_template/wizard_station) -"aC" = ( -/obj/structure/hygiene/toilet{ - pixel_y = 8 - }, -/turf/unsimulated/floor{ - icon_state = "freezerfloor" - }, -/area/map_template/wizard_station) -"aD" = ( -/obj/structure/table/woodentable, -/obj/machinery/computer/modular/preset/library, -/obj/item/device/radio/intercom/syndicate{ - dir = 4; - pixel_x = -22 - }, -/turf/unsimulated/floor{ - dir = 8; - icon_state = "wood" - }, -/area/map_template/wizard_station) -"aE" = ( -/obj/structure/bed/chair/wood/wings{ - dir = 4; - icon_state = "wooden_chair_wings" - }, -/turf/unsimulated/floor{ - dir = 8; - icon_state = "wood" - }, -/area/map_template/wizard_station) -"aF" = ( -/obj/structure/table/woodentable, -/obj/item/reagent_containers/food/snacks/chawanmushi, -/turf/unsimulated/floor{ - dir = 8; - icon_state = "wood" - }, -/area/map_template/wizard_station) -"aG" = ( -/obj/structure/bed/chair/wood/wings{ - dir = 8; - icon_state = "wooden_chair_wings" - }, -/turf/unsimulated/floor{ - dir = 8; - icon_state = "wood" - }, -/area/map_template/wizard_station) -"aH" = ( -/obj/structure/table/woodentable, -/obj/item/storage/box/cups, -/turf/unsimulated/floor{ - dir = 8; - icon_state = "wood" - }, -/area/map_template/wizard_station) -"aI" = ( -/obj/structure/closet, -/obj/item/clothing/suit/wizrobe/red, -/obj/item/clothing/shoes/sandal, -/obj/item/clothing/head/wizard/red, -/obj/item/staff, -/turf/unsimulated/floor{ - icon_state = "lino" - }, -/area/map_template/wizard_station) -"aJ" = ( -/obj/structure/closet, -/obj/item/clothing/suit/wizrobe/marisa, -/obj/item/clothing/shoes/sandal/marisa, -/obj/item/clothing/head/wizard/marisa, -/obj/item/staff/broom, -/turf/unsimulated/floor{ - icon_state = "lino" - }, -/area/map_template/wizard_station) -"aK" = ( -/obj/structure/closet, -/obj/item/clothing/suit/wizrobe/magusblue, -/obj/item/clothing/head/wizard/magus, -/obj/item/staff, -/turf/unsimulated/floor{ - icon_state = "lino" - }, -/area/map_template/wizard_station) -"aL" = ( -/obj/structure/closet, -/obj/item/reagent_containers/food/drinks/bottle/bottleofnothing, -/obj/item/reagent_containers/food/drinks/bottle/pwine, -/obj/item/reagent_containers/food/drinks/bottle/specialwhiskey, -/obj/item/reagent_containers/food/drinks/bottle/cognac, -/turf/unsimulated/floor{ - icon_state = "lino" - }, -/area/map_template/wizard_station) -"aM" = ( -/turf/unsimulated/wall/fakeglass{ - dir = 1; - icon_state = "fakewindows2" - }, -/area/map_template/wizard_station) -"aN" = ( -/obj/effect/floor_decal/spline/fancy/wood{ - dir = 8 - }, -/turf/unsimulated/floor{ - icon_state = "freezerfloor" - }, -/area/map_template/wizard_station) -"aO" = ( -/turf/unsimulated/floor{ - icon_state = "freezerfloor" - }, -/area/map_template/wizard_station) -"aP" = ( -/obj/machinery/door/unpowered/simple/iron, -/turf/unsimulated/floor{ - icon_state = "freezerfloor" - }, -/area/map_template/wizard_station) -"aQ" = ( -/obj/structure/table/woodentable, -/obj/item/device/megaphone, -/turf/unsimulated/floor{ - dir = 8; - icon_state = "wood" - }, -/area/map_template/wizard_station) -"aR" = ( -/obj/structure/table/woodentable, -/obj/item/storage/box/donut, -/turf/unsimulated/floor{ - dir = 8; - icon_state = "wood" - }, -/area/map_template/wizard_station) -"aS" = ( -/obj/structure/table/woodentable, -/obj/item/spacecash/bundle/c1, -/turf/unsimulated/floor{ - dir = 8; - icon_state = "wood" - }, -/area/map_template/wizard_station) -"aT" = ( -/obj/machinery/door/unpowered/simple/wood, -/turf/unsimulated/floor{ - icon_state = "lino" - }, -/area/map_template/wizard_station) -"aU" = ( -/turf/unsimulated/floor{ - icon_state = "lino" - }, -/area/map_template/wizard_station) -"aV" = ( -/turf/unsimulated/wall/fakeglass, -/area/map_template/wizard_station) -"aW" = ( -/obj/item/soap, -/turf/unsimulated/floor{ - icon = 'icons/misc/beach.dmi'; - icon_state = "seashallow"; - name = "water" - }, -/area/map_template/wizard_station) -"aX" = ( -/obj/effect/floor_decal/spline/fancy/wood{ - dir = 8 - }, -/obj/item/device/radio/intercom/syndicate{ - dir = 1; - pixel_y = -22 - }, -/turf/unsimulated/floor{ - icon_state = "freezerfloor" - }, -/area/map_template/wizard_station) -"aY" = ( -/obj/structure/hygiene/sink{ - dir = 4; - pixel_x = 11 - }, -/obj/item/storage/mirror{ - pixel_x = 32 - }, -/turf/unsimulated/floor{ - icon_state = "freezerfloor" - }, -/area/map_template/wizard_station) -"aZ" = ( -/obj/machinery/vending/magivend, -/turf/unsimulated/floor{ - dir = 8; - icon_state = "wood" - }, -/area/map_template/wizard_station) -"ba" = ( -/obj/structure/table/woodentable, -/obj/item/reagent_containers/food/snacks/milosoup, -/turf/unsimulated/floor{ - dir = 8; - icon_state = "wood" - }, -/area/map_template/wizard_station) -"bb" = ( -/obj/structure/table/woodentable, -/obj/machinery/chemical_dispenser/bar_soft/full, -/obj/item/device/radio/intercom/syndicate{ - dir = 8; - pixel_x = 22 - }, -/turf/unsimulated/floor{ - dir = 8; - icon_state = "wood" - }, -/area/map_template/wizard_station) -"bc" = ( -/obj/structure/closet, -/obj/item/clothing/under/psysuit, -/obj/item/clothing/suit/wizrobe/psypurple, -/turf/unsimulated/floor{ - icon_state = "lino" - }, -/area/map_template/wizard_station) -"bd" = ( -/obj/structure/closet, -/obj/item/clothing/shoes/sandal/marisa{ - desc = "A set of fancy shoes that are as functional as they are comfortable."; - name = "Gentlemans Shoes" - }, -/obj/item/clothing/under/gentlesuit, -/obj/item/clothing/suit/wizrobe/gentlecoat, -/obj/item/clothing/head/wizard/cap, -/obj/item/staff/gentcane, -/obj/item/device/radio/intercom/syndicate{ - dir = 1; - pixel_y = -22 - }, -/turf/unsimulated/floor{ - icon_state = "lino" - }, -/area/map_template/wizard_station) -"be" = ( -/obj/structure/closet, -/obj/item/clothing/suit/wizrobe/magusred, -/obj/item/clothing/head/wizard/magus, -/obj/item/staff, -/turf/unsimulated/floor{ - icon_state = "lino" - }, -/area/map_template/wizard_station) -"bf" = ( -/obj/structure/closet, -/obj/item/storage/briefcase, -/turf/unsimulated/floor{ - icon_state = "lino" - }, -/area/map_template/wizard_station) -"bg" = ( -/obj/structure/bookcase, -/obj/item/book/manual/nuclear, -/turf/unsimulated/floor{ - dir = 8; - icon_state = "wood" - }, -/area/map_template/wizard_station) -"bh" = ( -/obj/structure/bookcase, -/obj/item/book/manual/robotics_cyborgs, -/turf/unsimulated/floor{ - dir = 8; - icon_state = "wood" - }, -/area/map_template/wizard_station) -"bi" = ( -/obj/structure/bookcase, -/turf/unsimulated/floor{ - dir = 8; - icon_state = "wood" - }, -/area/map_template/wizard_station) -"bj" = ( -/obj/structure/table/woodentable, -/obj/item/storage/bag/cash, -/turf/unsimulated/floor{ - dir = 8; - icon_state = "wood" - }, -/area/map_template/wizard_station) -"bk" = ( -/obj/structure/table/woodentable, -/obj/item/storage/candle_box, -/turf/unsimulated/floor{ - dir = 8; - icon_state = "wood" - }, -/area/map_template/wizard_station) -"bl" = ( -/obj/machinery/door/unpowered/simple/silver, -/turf/unsimulated/floor{ - dir = 8; - icon_state = "wood" - }, -/area/map_template/wizard_station) -"bm" = ( -/obj/item/device/radio/intercom/syndicate{ - dir = 1; - pixel_y = -22 - }, -/turf/unsimulated/floor{ - dir = 8; - icon_state = "wood" - }, -/area/map_template/wizard_station) -"bn" = ( -/obj/structure/closet/coffin, -/turf/unsimulated/floor{ - icon_state = "cult"; - name = "plating" - }, -/area/map_template/wizard_station) -"bo" = ( -/turf/unsimulated/floor{ - icon_state = "cult"; - name = "plating" - }, -/area/map_template/wizard_station) -"bp" = ( -/obj/item/device/radio/intercom/syndicate{ - pixel_y = 22 - }, -/turf/unsimulated/floor{ - icon_state = "cult"; - name = "plating" - }, -/area/map_template/wizard_station) -"bq" = ( -/obj/structure/cult/pylon, -/turf/unsimulated/floor{ - icon_state = "cult"; - name = "plating" - }, -/area/map_template/wizard_station) -"br" = ( -/obj/structure/kitchenspike, -/turf/unsimulated/floor{ - icon_state = "cult"; - name = "plating" - }, -/area/map_template/wizard_station) -"bs" = ( -/obj/item/remains/human, -/turf/unsimulated/floor{ - icon_state = "lava"; - name = "plating" - }, -/area/map_template/wizard_station) -"bt" = ( -/turf/unsimulated/floor{ - icon_state = "lava"; - name = "plating" - }, -/area/map_template/wizard_station) -"bu" = ( -/turf/unsimulated/floor{ - icon_state = "grass0"; - name = "grass" - }, -/area/map_template/wizard_station) -"bv" = ( -/obj/structure/flora/ausbushes/fullgrass, -/turf/unsimulated/floor{ - icon_state = "grass0"; - name = "grass" - }, -/area/map_template/wizard_station) -"bw" = ( -/mob/living/simple_animal/hostile/creature{ - name = "Experiment 35b" - }, -/turf/unsimulated/floor{ - icon_state = "lava"; - name = "plating" - }, -/area/map_template/wizard_station) -"bx" = ( -/obj/structure/cult/talisman, -/obj/item/material/knife/ritual, -/turf/unsimulated/floor{ - icon_state = "cult"; - name = "plating" - }, -/area/map_template/wizard_station) -"by" = ( -/obj/effect/gateway/active/cult, -/turf/unsimulated/floor{ - icon_state = "cult"; - name = "plating" - }, -/area/map_template/wizard_station) -"bz" = ( -/obj/structure/table/marble, -/obj/item/device/flashlight/slime, -/turf/unsimulated/floor{ - icon_state = "cult"; - name = "plating" - }, -/area/map_template/wizard_station) -"bA" = ( -/mob/living/simple_animal/hostile/retaliate/goat{ - name = "Experiment 97d" - }, -/turf/unsimulated/floor{ - icon_state = "grass0"; - name = "grass" - }, -/area/map_template/wizard_station) -"bB" = ( -/obj/structure/flora/ausbushes/grassybush, -/turf/unsimulated/floor{ - icon_state = "grass0"; - name = "grass" - }, -/area/map_template/wizard_station) -"bC" = ( -/obj/structure/flora/pottedplant/unusual, -/turf/unsimulated/floor{ - icon_state = "cult"; - name = "plating" - }, -/area/map_template/wizard_station) -"bD" = ( -/obj/structure/table/woodentable, -/obj/item/xenos_claw, -/turf/unsimulated/floor{ - icon_state = "cult"; - name = "plating" - }, -/area/map_template/wizard_station) -"bE" = ( -/turf/unsimulated/floor{ - icon_state = "asteroid" - }, -/area/map_template/wizard_station) -"bF" = ( -/obj/effect/overlay/palmtree_r, -/turf/unsimulated/floor{ - icon_state = "asteroid" - }, -/area/map_template/wizard_station) -"bG" = ( -/mob/living/simple_animal/crab{ - name = "Experiment 68a" - }, -/turf/unsimulated/floor{ - icon_state = "asteroid" - }, -/area/map_template/wizard_station) -"bH" = ( -/obj/effect/overlay/coconut, -/turf/unsimulated/floor{ - icon_state = "asteroid" - }, -/area/map_template/wizard_station) - -(1,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(2,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(3,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(4,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(5,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(6,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(7,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(8,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ay -aM -aV -ab -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -"} -(9,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -az -az -aW -ab -aa -aa -aa -aa -aa -aa -aa -ab -bs -bt -bt -ab -aa -aa -aa -aa -aa -aa -aa -"} -(10,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -aA -az -az -ab -aa -aa -aa -aa -aa -aa -aa -ab -bt -bt -bt -ab -aa -aa -aa -aa -aa -aa -aa -"} -(11,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -aB -aN -aX -ab -aa -aa -aa -aa -aa -aa -aa -ab -bt -bw -bt -ab -aa -aa -aa -aa -aa -aa -aa -"} -(12,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -aC -aO -aY -ab -aa -aa -aa -aa -aa -aa -aa -ab -bt -bt -bs -ab -aa -aa -aa -aa -aa -aa -aa -"} -(13,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -aP -ab -ab -ab -aa -aa -aa -aa -aa -ab -ab -ay -aM -aV -ab -ab -aa -aa -aa -aa -aa -aa -"} -(14,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -aw -aD -at -aZ -bg -ab -ab -aa -aa -aa -ab -ab -bq -bo -bx -bo -bq -ab -ab -aa -aa -aa -aa -aa -"} -(15,1,1) = {" -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ar -at -at -at -at -at -bi -ab -ay -aM -aV -ab -bn -bo -bo -bo -bo -bo -bC -ab -ab -ab -ab -ab -ab -"} -(16,1,1) = {" -aa -aa -aa -aa -aa -aa -ac -af -ai -al -ao -ab -as -at -aE -aQ -aE -at -bj -ab -at -at -bm -ab -bo -bo -ac -ab -ac -bo -bo -ac -bE -bE -bE -bH -ab -"} -(17,1,1) = {" -aa -aa -aa -aa -aa -aa -ad -ag -aj -am -am -aq -at -at -aF -aR -ba -at -at -bl -at -at -at -bl -bo -bo -ad -by -ad -bo -bD -ad -bE -bE -bG -bE -ab -"} -(18,1,1) = {" -aa -aa -aa -aa -aa -aa -ae -ah -ak -an -ap -ab -au -ax -aG -aS -aG -at -bk -ab -at -at -at -ab -bp -bo -ae -ab -ae -bo -bo -ae -bE -bF -bE -bE -ab -"} -(19,1,1) = {" -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -av -at -at -at -at -at -bi -ab -ay -aM -aV -ab -bn -bo -bo -bo -bo -bo -bC -ab -ab -ab -ab -ab -ab -"} -(20,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -av -aH -at -bb -bh -ab -ab -aa -aa -aa -ab -ab -br -bo -bz -bo -br -ab -ab -aa -aa -aa -aa -aa -"} -(21,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -aT -ab -ab -ab -aa -aa -aa -aa -aa -ab -ab -ay -aM -aV -ab -ab -aa -aa -aa -aa -aa -aa -"} -(22,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -aI -aU -bc -ab -aa -aa -aa -aa -aa -aa -aa -ab -bu -bu -bB -ab -aa -aa -aa -aa -aa -aa -aa -"} -(23,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -aJ -aU -bd -ab -aa -aa -aa -aa -aa -aa -aa -ab -bu -bu -bu -ab -aa -aa -aa -aa -aa -aa -aa -"} -(24,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -aK -aU -be -ab -aa -aa -aa -aa -aa -aa -aa -ab -bu -bA -bu -ab -aa -aa -aa -aa -aa -aa -aa -"} -(25,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -aL -aU -bf -ab -aa -aa -aa -aa -aa -aa -aa -ab -bv -bu -bu -ab -aa -aa -aa -aa -aa -aa -aa -"} -(26,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ay -aM -aV -ab -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -"} -(27,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(28,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(29,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(30,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(31,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(32,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(33,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} diff --git a/maps/away/README.md b/maps/away/README.md deleted file mode 100644 index 031fc42d259ad..0000000000000 --- a/maps/away/README.md +++ /dev/null @@ -1,67 +0,0 @@ -# Away sites - -## What exactly is an away site? - -It's a kind of map template which: -* is placed in its own zlevel (or collection of zlevels), -* should only get placed once per round, -* can be randomly picked to be placed automatically during round setup, -* normally has an overmap presence and shuttle landmarks so ships can fly to it. - -### Er, what's a map template? - -It's a datum you can define in the code (`/datum/map_template`) which points at one or more .dmm map files, and allows the game (or admins) to spawn those map files when and where they please, whether that's into an existing zlevel (like decorating exoplanets with ruins), or on a totally fresh one (like an away site!). - -## How do I make away sites? - -tl;dr you make your .dmm files, then you write a new map template datum (`/datum/map_template/ruin/away_site/insert_your_away_site_name_here`), then you include whatever file you defined that datum in into `torch.dm` and `away_sites_testing.dm`, and you're all set. - -BUT HEED MY RUMINATIONS - -## While mapping - -### Don't use Torch-specific types - -Away maps are expected to work whether you're on Torch, the example map, or anything else you might want to load as the server's main map. That means your map mustn't use areas, turfs, objects, mobs or datums that are specific to any main map. - -e.g. you can use `/area/space`, or `/turf/simulated/wall`, because neither are specific to Torch. They live out in the main codebase, are always compiled in, and are available to all maps. But you can't use `/obj/random_multi/single_item/punitelly`, because Punitelli only exists when Torch is compiled. - -To make life easier, you can uncheck maps/torch/torch.dm (or your regional equivalent), then recompile, to make sure these types aren't available while you're mapping. - -### Don't re-use area types from other maps - -Except for, like, `/area/space`. That one's probably fine. - -(Now that's just areas! Other stuff might be ok. Except very map-specific stuff as noted!) - -Re-using areas is a shortcut, but it's bad for testability, and you can't guarantee that the area you re-use isn't loaded up and in active use on the server - in which case it'll hideously merge together with its brother in terms of stuff like air alarms, APCs, etc. Suddenly your derelict starship is randomly receiving power from another zlevel. Not good. Avoid. Make your own area types! - -If in doubt, ask #codershuttle on IRC/#coding on Discord. - -### If you're doing multi-z, make a different .dmm file for each zlevel - -Not exactly a technical requirement, but it makes things easier in terms of collaboration. See how it's done with `torch-1.dmm`, `torch-2.dmm`, etc. - -## Afterwards (or during, I'm not a cop) - -### Make sure you've got a .dm file for all your stuff - -Like `maps/away/derelict/derelict.dm`. It's a pretty good place to put all your new types! #include other files here too. This file's going to be the hub of your map's wheel, to cack-hand a metaphor. - -### Make a map template datum there - -The game will read this to learn about your new shiny away sites, including what .dmm files it needs to load, how much it 'costs' to spawn (usually 1, increase for more performance-heavy away sites). Ask devs or read code if unsure. - -### Include your .dm file in any main map file, and away sites testing - -That's `maps/away_sites_testing/away_sites_testing.dm`, and probably `maps/torch/torch.dm`. It goes in the testing one to make sure it is checked during unit testing, and it goes in the Torch one to make it available while we play Torch. If we have since changed map, yell at someone to update this doc. - -### Don't include it, or the .dmms, in the .dme - -That means don't have any of your away map stuff checked in Dream Maker. It'll get included, as if by magic, via the work you did in the previous step! - -That's it! You're probably done! Unless the unit tests explode on you. - -### Some of the stuff I put in my map isn't behaving properly! - -The map loader works best when everything it's spawning does all its initialisation work in `Initialize`, instead of in `New`. Most likely your misbehaving thing is doing more initialisation than is healthy in `New`. It's fixable! Often not even that hard. Go talk to a dev. diff --git a/maps/away/away_sites.dm b/maps/away/away_sites.dm deleted file mode 100644 index d9c3f4f9615b8..0000000000000 --- a/maps/away/away_sites.dm +++ /dev/null @@ -1,17 +0,0 @@ -// Hey! Listen! Update \config\away_site_blacklist.txt with your new ruins! - -/datum/map_template/ruin/away_site - var/list/generate_mining_by_z - prefix = "maps/away/" - -/datum/map_template/ruin/away_site/after_load(z) - if(islist(generate_mining_by_z)) - for(var/i in generate_mining_by_z) - var/current_z = z + i - 1 - new /datum/random_map/automata/cave_system(null, 1, 1, current_z, world.maxx, world.maxy) - new /datum/random_map/noise/ore(null, 1, 1, current_z, world.maxx, world.maxy) - GLOB.using_map.refresh_mining_turfs(current_z) - else if (isnum(generate_mining_by_z)) - new /datum/random_map/automata/cave_system(null, 1, 1, z + generate_mining_by_z - 1, world.maxx, world.maxy) - new /datum/random_map/noise/ore(null, 1, 1, z + generate_mining_by_z - 1, world.maxx, world.maxy) - GLOB.using_map.refresh_mining_turfs(z + generate_mining_by_z - 1) diff --git a/maps/away/bearcat/bearcat-1.dmm b/maps/away/bearcat/bearcat-1.dmm deleted file mode 100644 index 489f3a428b2eb..0000000000000 --- a/maps/away/bearcat/bearcat-1.dmm +++ /dev/null @@ -1,17436 +0,0 @@ -//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE -"aa" = ( -/turf/space, -/area/space) -"ab" = ( -/obj/effect/shuttle_landmark/automatic, -/turf/space, -/area/space) -"ac" = ( -/obj/effect/wallframe_spawn/reinforced, -/obj/machinery/door/blast/regular{ - density = 0; - dir = 4; - icon_state = "pdoor0"; - id_tag = "scraplock"; - name = "External Blast Doors"; - opacity = 0 - }, -/turf/simulated/floor, -/area/ship/scrap/cargo/lower) -"ad" = ( -/obj/machinery/door/airlock/external/bolted/cycling{ - id_tag = "cargo_out" - }, -/obj/machinery/shield_diffuser, -/turf/simulated/floor, -/area/ship/scrap/cargo/lower) -"ae" = ( -/obj/machinery/door/airlock/external/bolted/cycling{ - id_tag = "cargo_out" - }, -/obj/machinery/access_button/airlock_exterior{ - master_tag = "cargo"; - pixel_x = 18; - pixel_y = 17 - }, -/obj/machinery/shield_diffuser, -/turf/simulated/floor, -/area/ship/scrap/cargo/lower) -"ag" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 1 - }, -/turf/simulated/floor, -/area/ship/scrap/cargo/lower) -"ah" = ( -/turf/simulated/wall, -/area/ship/scrap/escape_port) -"ai" = ( -/obj/machinery/door/blast/regular{ - density = 0; - icon_state = "pdoor0"; - id_tag = "engwindow"; - opacity = 0 - }, -/turf/simulated/floor/airless, -/area/ship/scrap/escape_port) -"aj" = ( -/obj/machinery/atmospherics/unary/vent_pump/high_volume/airlock{ - id_tag = "cargo_pump" - }, -/obj/machinery/light/small{ - dir = 8 - }, -/turf/simulated/floor, -/area/ship/scrap/cargo/lower) -"ak" = ( -/obj/machinery/atmospherics/unary/vent_pump/high_volume/airlock{ - id_tag = "cargo_pump" - }, -/obj/machinery/embedded_controller/radio/airlock/docking_port{ - id_tag = "cargo"; - pixel_x = 24; - tag_airpump = "cargo_pump"; - tag_chamber_sensor = "cargo_sensor"; - tag_exterior_door = "cargo_out"; - tag_interior_door = "cargo_in" - }, -/turf/simulated/floor, -/area/ship/scrap/cargo/lower) -"al" = ( -/turf/simulated/wall/r_wall, -/area/ship/scrap/cargo/lower) -"am" = ( -/obj/machinery/door/blast/regular{ - density = 0; - dir = 4; - icon_state = "pdoor0"; - id_tag = "scraplock"; - name = "External Blast Doors"; - opacity = 0 - }, -/obj/machinery/door/firedoor, -/obj/effect/wallframe_spawn/reinforced, -/turf/simulated/floor, -/area/ship/scrap/cargo/lower) -"an" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 1 - }, -/obj/effect/floor_decal/industrial/loading{ - dir = 1 - }, -/obj/machinery/power/apc/derelict, -/obj/structure/cable/green{ - d2 = 8; - icon_state = "0-8" - }, -/turf/simulated/floor/tiled, -/area/ship/scrap/escape_star) -"ao" = ( -/turf/simulated/wall, -/area/ship/scrap/cargo/lower) -"ap" = ( -/obj/machinery/door/blast/regular{ - density = 0; - icon_state = "pdoor0"; - id_tag = "engwindow"; - opacity = 0 - }, -/turf/simulated/floor/airless, -/area/ship/scrap/escape_star) -"aq" = ( -/obj/effect/paint/brown, -/turf/simulated/wall/r_wall, -/area/ship/scrap/escape_star) -"ar" = ( -/obj/structure/window/reinforced{ - dir = 4 - }, -/obj/machinery/door/window/southright, -/turf/simulated/floor/airless, -/area/ship/scrap/escape_port) -"at" = ( -/obj/machinery/atmospherics/pipe/simple/hidden, -/obj/machinery/door/blast/regular{ - density = 0; - dir = 4; - icon_state = "pdoor0"; - id_tag = "scraplock"; - name = "External Blast Doors"; - opacity = 0 - }, -/obj/item/device/radio/intercom/map_preset/bearcat{ - default_hailing = 1; - dir = 4; - pixel_x = -22 - }, -/turf/simulated/floor, -/area/ship/scrap/cargo/lower) -"au" = ( -/obj/machinery/airlock_sensor{ - id_tag = "cargo_sensor"; - pixel_x = 25 - }, -/obj/machinery/atmospherics/pipe/simple/hidden, -/obj/machinery/door/blast/regular{ - density = 0; - dir = 4; - icon_state = "pdoor0"; - id_tag = "scraplock"; - name = "External Blast Doors"; - opacity = 0 - }, -/turf/simulated/floor, -/area/ship/scrap/cargo/lower) -"av" = ( -/obj/structure/ladder/up, -/obj/machinery/light/small{ - dir = 8; - icon_state = "bulb1" - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled, -/area/ship/scrap/cargo/lower) -"aw" = ( -/obj/structure/table/standard, -/obj/item/device/flashlight/lamp, -/obj/item/paper_bin, -/obj/item/stamp/cargo, -/obj/item/stamp/denied, -/obj/random/clipboard, -/obj/item/device/radio/map_preset/bearcat, -/obj/item/device/radio/intercom/map_preset/bearcat{ - dir = 8; - pixel_x = 22 - }, -/turf/simulated/floor/tiled, -/area/ship/scrap/cargo/lower) -"ax" = ( -/obj/structure/window/reinforced{ - dir = 4 - }, -/obj/machinery/door/window/southright, -/turf/simulated/floor/airless, -/area/ship/scrap/escape_star) -"ay" = ( -/turf/simulated/wall/r_wall, -/area/ship/scrap/escape_star) -"az" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 1 - }, -/obj/effect/floor_decal/industrial/loading{ - dir = 1 - }, -/obj/machinery/alarm{ - dir = 4; - pixel_x = -24; - req_access = newlist() - }, -/turf/simulated/floor/tiled, -/area/ship/scrap/escape_port) -"aA" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 1 - }, -/obj/effect/floor_decal/industrial/loading{ - dir = 1 - }, -/turf/simulated/floor/tiled, -/area/ship/scrap/escape_port) -"aB" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 1 - }, -/obj/effect/floor_decal/industrial/loading{ - dir = 1 - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/turf/simulated/floor/tiled, -/area/ship/scrap/escape_port) -"aC" = ( -/obj/structure/window/reinforced{ - dir = 4 - }, -/obj/machinery/atmospherics/portables_connector, -/obj/machinery/portable_atmospherics/canister/air, -/obj/structure/window/reinforced{ - dir = 1 - }, -/turf/simulated/floor/tiled, -/area/ship/scrap/cargo/lower) -"aD" = ( -/obj/machinery/door/airlock/external/bolted/cycling{ - id_tag = "cargo_in" - }, -/obj/machinery/atmospherics/pipe/simple/hidden, -/turf/simulated/floor, -/area/ship/scrap/cargo/lower) -"aE" = ( -/obj/machinery/door/airlock/external/bolted/cycling{ - id_tag = "cargo_in" - }, -/obj/machinery/access_button/airlock_interior{ - master_tag = "cargo"; - pixel_x = 20; - pixel_y = -12 - }, -/obj/machinery/atmospherics/pipe/simple/hidden, -/turf/simulated/floor, -/area/ship/scrap/cargo/lower) -"aF" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 1 - }, -/obj/effect/floor_decal/industrial/loading{ - dir = 1 - }, -/obj/machinery/light/small/red, -/turf/simulated/floor/tiled, -/area/ship/scrap/escape_port) -"aG" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/sign/deck/second{ - pixel_x = 32 - }, -/obj/item/stool/padded, -/turf/simulated/floor/tiled, -/area/ship/scrap/cargo/lower) -"aH" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 1 - }, -/obj/effect/floor_decal/industrial/loading{ - dir = 1 - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/turf/simulated/floor/tiled, -/area/ship/scrap/escape_star) -"aI" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 1 - }, -/obj/effect/floor_decal/industrial/loading{ - dir = 1 - }, -/turf/simulated/floor/tiled, -/area/ship/scrap/escape_star) -"aJ" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 1 - }, -/obj/effect/floor_decal/industrial/loading{ - dir = 1 - }, -/obj/machinery/alarm{ - dir = 8; - pixel_x = 24; - req_access = newlist() - }, -/turf/simulated/floor/tiled, -/area/ship/scrap/escape_star) -"aK" = ( -/turf/simulated/wall, -/area/ship/scrap/gambling) -"aL" = ( -/turf/simulated/wall/r_wall, -/area/ship/scrap/gambling) -"aM" = ( -/obj/machinery/door/airlock/autoname/bearcat, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor, -/area/ship/scrap/escape_port) -"aN" = ( -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 5 - }, -/obj/machinery/power/apc/derelict{ - dir = 8 - }, -/obj/structure/cable/green{ - d2 = 2; - icon_state = "0-2" - }, -/turf/simulated/floor/tiled, -/area/ship/scrap/cargo/lower) -"aO" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden, -/turf/simulated/floor/tiled, -/area/ship/scrap/cargo/lower) -"aP" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/floor_decal/industrial/warning{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 9 - }, -/turf/simulated/floor/tiled, -/area/ship/scrap/cargo/lower) -"aQ" = ( -/turf/simulated/floor/tiled, -/area/ship/scrap/cargo/lower) -"aR" = ( -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/effect/floor_decal/corner/beige{ - dir = 6 - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/structure/closet/crate/plastic, -/obj/random/accessory, -/obj/random/accessory, -/obj/item/reagent_containers/glass/paint/random, -/turf/simulated/floor/tiled, -/area/ship/scrap/cargo/lower) -"aS" = ( -/obj/machinery/door/airlock/autoname/bearcat, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor, -/area/ship/scrap/escape_star) -"aT" = ( -/turf/simulated/wall, -/area/ship/scrap/crew/dorms1) -"aU" = ( -/turf/simulated/wall/r_wall, -/area/ship/scrap/crew/dorms1) -"aV" = ( -/obj/item/device/flashlight/lamp, -/turf/simulated/floor, -/area/ship/scrap/gambling) -"aW" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/obj/structure/holostool, -/obj/machinery/light/small{ - dir = 1; - icon_state = "bulb1" - }, -/obj/item/hand/missing_card, -/turf/simulated/floor, -/area/ship/scrap/gambling) -"aX" = ( -/obj/structure/cable/green{ - d2 = 2; - icon_state = "0-2" - }, -/obj/machinery/light_switch{ - pixel_x = 24 - }, -/obj/machinery/power/apc/derelict{ - dir = 1 - }, -/turf/simulated/floor, -/area/ship/scrap/gambling) -"aY" = ( -/obj/machinery/light/small{ - dir = 8 - }, -/obj/effect/decal/cleanable/cobweb2, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor, -/area/ship/scrap/maintenance/lower) -"aZ" = ( -/obj/effect/floor_decal/corner/beige{ - dir = 9 - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/light/small{ - dir = 8; - icon_state = "bulb1" - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled, -/area/ship/scrap/cargo/lower) -"bb" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - level = 2 - }, -/turf/simulated/floor/tiled, -/area/ship/scrap/cargo/lower) -"bc" = ( -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/structure/closet/crate, -/obj/random/toy, -/obj/random/toy, -/obj/random/loot, -/obj/random/plushie, -/obj/random/action_figure, -/obj/random/action_figure, -/turf/simulated/floor/tiled, -/area/ship/scrap/cargo/lower) -"bd" = ( -/obj/effect/floor_decal/corner/beige{ - dir = 6 - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/light/small{ - dir = 4 - }, -/obj/random/closet, -/turf/simulated/floor/tiled, -/area/ship/scrap/cargo/lower) -"be" = ( -/obj/machinery/light/small{ - dir = 4; - icon_state = "bulb1" - }, -/obj/structure/ladder/up, -/obj/effect/decal/cleanable/cobweb, -/obj/structure/sign/deck/second{ - pixel_x = -32 - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor, -/area/ship/scrap/maintenance/lower) -"bf" = ( -/obj/machinery/power/apc/derelict{ - dir = 1 - }, -/obj/structure/cable/green{ - d2 = 2; - icon_state = "0-2" - }, -/obj/effect/floor_decal/corner/beige{ - dir = 5 - }, -/obj/structure/closet, -/obj/random/gloves, -/obj/random/clothing, -/obj/random/clothing, -/turf/simulated/floor/tiled/dark, -/area/ship/scrap/crew/dorms1) -"bg" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/obj/effect/floor_decal/corner/beige{ - dir = 5 - }, -/obj/structure/holostool, -/obj/machinery/light/small{ - dir = 1; - icon_state = "bulb1" - }, -/obj/structure/sign/poster{ - pixel_y = 32 - }, -/turf/simulated/floor/tiled/dark, -/area/ship/scrap/crew/dorms1) -"bh" = ( -/obj/effect/floor_decal/corner/beige{ - dir = 5 - }, -/obj/structure/curtain/open/bed, -/obj/structure/bed/padded, -/obj/item/bedsheet/green, -/obj/effect/decal/cleanable/cobweb2, -/turf/simulated/floor/tiled/dark, -/area/ship/scrap/crew/dorms1) -"bi" = ( -/obj/machinery/door/blast/regular{ - density = 0; - icon_state = "pdoor0"; - id_tag = "scraplock"; - name = "External Blast Doors"; - opacity = 0 - }, -/obj/machinery/door/firedoor, -/obj/effect/wallframe_spawn/reinforced, -/turf/simulated/floor, -/area/ship/scrap/gambling) -"bj" = ( -/obj/structure/holostool, -/obj/item/hand/missing_card, -/turf/simulated/floor, -/area/ship/scrap/gambling) -"bk" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/obj/structure/table/gamblingtable, -/obj/item/deck/cards, -/obj/item/dice, -/turf/simulated/floor, -/area/ship/scrap/gambling) -"bl" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/structure/holostool, -/obj/item/hand/missing_card, -/turf/simulated/floor, -/area/ship/scrap/gambling) -"bm" = ( -/obj/machinery/door/airlock/autoname/bearcat, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor, -/area/ship/scrap/gambling) -"bn" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor, -/area/ship/scrap/maintenance/lower) -"bo" = ( -/obj/machinery/door/airlock/autoname/bearcat, -/turf/simulated/floor, -/area/ship/scrap/cargo/lower) -"bp" = ( -/obj/effect/floor_decal/corner/beige{ - dir = 9 - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/turf/simulated/floor/tiled, -/area/ship/scrap/cargo/lower) -"br" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled, -/area/ship/scrap/cargo/lower) -"bs" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled, -/area/ship/scrap/cargo/lower) -"bt" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled, -/area/ship/scrap/cargo/lower) -"bu" = ( -/obj/effect/floor_decal/corner/beige{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/turf/simulated/floor/tiled, -/area/ship/scrap/cargo/lower) -"bv" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/turf/simulated/floor, -/area/ship/scrap/maintenance/lower) -"bw" = ( -/obj/machinery/door/airlock/autoname/bearcat, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark, -/area/ship/scrap/crew/dorms1) -"bx" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/turf/simulated/floor/tiled/dark, -/area/ship/scrap/crew/dorms1) -"by" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/turf/simulated/floor/tiled/dark, -/area/ship/scrap/crew/dorms1) -"bz" = ( -/obj/structure/table/standard, -/turf/simulated/floor/tiled/dark, -/area/ship/scrap/crew/dorms1) -"bA" = ( -/obj/machinery/door/blast/regular{ - density = 0; - icon_state = "pdoor0"; - id_tag = "scraplock"; - name = "External Blast Doors"; - opacity = 0 - }, -/obj/machinery/door/firedoor, -/obj/effect/wallframe_spawn/reinforced, -/turf/simulated/floor, -/area/ship/scrap/crew/dorms1) -"bB" = ( -/turf/simulated/floor, -/area/ship/scrap/gambling) -"bC" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 1; - level = 2 - }, -/obj/structure/holostool, -/obj/item/hand/missing_card, -/turf/simulated/floor, -/area/ship/scrap/gambling) -"bD" = ( -/obj/machinery/alarm{ - dir = 8; - pixel_x = 24; - req_access = newlist() - }, -/obj/item/hand/missing_card, -/obj/item/hand/missing_card, -/turf/simulated/floor, -/area/ship/scrap/gambling) -"bE" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor, -/area/ship/scrap/maintenance/lower) -"bF" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/alarm{ - dir = 4; - pixel_x = -24; - req_access = newlist() - }, -/obj/structure/closet/crate, -/obj/random/soap, -/obj/random/soap, -/obj/item/bodybag, -/obj/item/stack/tile/carpet/fifty, -/turf/simulated/floor/tiled, -/area/ship/scrap/cargo/lower) -"bG" = ( -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/structure/mech_wreckage/powerloader, -/obj/machinery/mech_recharger, -/turf/simulated/floor/tiled, -/area/ship/scrap/cargo/lower) -"bH" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, -/turf/simulated/floor/tiled, -/area/ship/scrap/cargo/lower) -"bI" = ( -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/closet/coffin, -/obj/random/drinkbottle, -/obj/item/contraband/poster, -/obj/item/stack/material/phoron/ten, -/turf/simulated/floor/tiled, -/area/ship/scrap/cargo/lower) -"bJ" = ( -/obj/effect/floor_decal/corner/beige{ - dir = 6 - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled, -/area/ship/scrap/cargo/lower) -"bL" = ( -/obj/machinery/alarm{ - dir = 4; - pixel_x = -24; - req_access = newlist() - }, -/obj/structure/closet, -/obj/random/clothing, -/obj/random/clothing, -/obj/random/clothing, -/turf/simulated/floor/tiled/dark, -/area/ship/scrap/crew/dorms1) -"bM" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 1; - level = 2 - }, -/obj/structure/holostool, -/turf/simulated/floor/tiled/dark, -/area/ship/scrap/crew/dorms1) -"bO" = ( -/obj/effect/floor_decal/corner/beige{ - dir = 9 - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/light/small{ - dir = 8; - icon_state = "bulb1" - }, -/obj/effect/floor_decal/industrial/warning/corner, -/obj/machinery/mining/brace, -/turf/simulated/floor/tiled, -/area/ship/scrap/cargo/lower) -"bP" = ( -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/effect/floor_decal/industrial/warning, -/obj/structure/closet/crate, -/obj/item/fossil/skull, -/obj/item/fossil/bone, -/obj/item/fossil/bone, -/obj/item/fossil/shell, -/obj/item/xenos_claw, -/obj/item/ore/strangerock, -/turf/simulated/floor/tiled, -/area/ship/scrap/cargo/lower) -"bQ" = ( -/obj/effect/floor_decal/industrial/warning, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/computer/shuttle_control/lift, -/turf/simulated/floor/tiled, -/area/ship/scrap/cargo/lower) -"bR" = ( -/obj/effect/floor_decal/industrial/warning, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 1 - }, -/turf/simulated/floor/tiled, -/area/ship/scrap/cargo/lower) -"bS" = ( -/obj/effect/floor_decal/industrial/warning, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled, -/area/ship/scrap/cargo/lower) -"bT" = ( -/obj/effect/floor_decal/corner/beige{ - dir = 6 - }, -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 8; - icon_state = "warningcorner" - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/light/small{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/tiled, -/area/ship/scrap/cargo/lower) -"bU" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/zpipe/up/scrubbers, -/obj/machinery/atmospherics/pipe/zpipe/up/supply, -/obj/structure/cable/green{ - d1 = 16; - d2 = 0; - icon_state = "16-0" - }, -/obj/structure/cable/green, -/turf/simulated/floor, -/area/ship/scrap/maintenance/lower) -"bV" = ( -/turf/simulated/wall/r_wall, -/area/ship/scrap/broken2) -"bW" = ( -/obj/machinery/floodlight, -/turf/simulated/floor, -/area/ship/scrap/broken2) -"bX" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/obj/machinery/light_construct/small{ - dir = 1 - }, -/turf/simulated/floor, -/area/ship/scrap/broken2) -"bY" = ( -/obj/structure/cable/green{ - d2 = 2; - icon_state = "0-2" - }, -/obj/machinery/light_switch{ - pixel_x = 24 - }, -/obj/machinery/power/apc/derelict{ - dir = 1 - }, -/turf/simulated/floor, -/area/ship/scrap/broken2) -"bZ" = ( -/turf/simulated/wall, -/area/ship/scrap/broken2) -"ca" = ( -/obj/machinery/light/small{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/effect/decal/cleanable/cobweb, -/obj/effect/decal/cleanable/cobweb2, -/turf/simulated/floor, -/area/ship/scrap/maintenance/lower) -"cb" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 4; - icon_state = "warning" - }, -/obj/effect/floor_decal/corner/beige{ - dir = 9 - }, -/obj/item/device/radio/intercom/map_preset/bearcat{ - dir = 4; - pixel_x = -22 - }, -/turf/simulated/floor/tiled, -/area/ship/scrap/cargo/lower) -"cc" = ( -/obj/effect/floor_decal/corner/beige{ - dir = 9 - }, -/obj/effect/floor_decal/corner/beige{ - dir = 5 - }, -/turf/simulated/floor/tiled, -/area/ship/scrap/shuttle/lift) -"cd" = ( -/obj/effect/floor_decal/corner/beige{ - dir = 5 - }, -/turf/simulated/floor/tiled, -/area/ship/scrap/shuttle/lift) -"ce" = ( -/obj/effect/floor_decal/corner/beige{ - dir = 5 - }, -/obj/effect/floor_decal/corner/beige{ - dir = 6 - }, -/turf/simulated/floor/tiled, -/area/ship/scrap/shuttle/lift) -"cf" = ( -/obj/effect/floor_decal/corner/beige{ - dir = 6 - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 8; - icon_state = "warning" - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/tiled, -/area/ship/scrap/cargo/lower) -"cg" = ( -/obj/machinery/light/small{ - dir = 4; - icon_state = "bulb1" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor, -/area/ship/scrap/maintenance/lower) -"ch" = ( -/turf/simulated/wall, -/area/ship/scrap/crew/dorms2) -"ci" = ( -/obj/structure/cable/green{ - d2 = 2; - icon_state = "0-2" - }, -/obj/machinery/light_switch{ - pixel_x = -24 - }, -/obj/effect/floor_decal/corner/beige{ - dir = 5 - }, -/obj/structure/closet, -/obj/random/clothing, -/obj/random/clothing, -/obj/effect/decal/cleanable/cobweb, -/obj/machinery/power/apc/derelict{ - dir = 1 - }, -/turf/simulated/floor/tiled/dark, -/area/ship/scrap/crew/dorms2) -"cj" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/obj/structure/holostool, -/obj/machinery/light/small{ - dir = 1; - icon_state = "bulb1" - }, -/obj/effect/floor_decal/corner/beige{ - dir = 5 - }, -/turf/simulated/floor/tiled/dark, -/area/ship/scrap/crew/dorms2) -"ck" = ( -/obj/structure/curtain/open/bed, -/obj/structure/bed/padded, -/obj/effect/floor_decal/corner/beige{ - dir = 5 - }, -/obj/item/bedsheet/ce, -/turf/simulated/floor/tiled/dark, -/area/ship/scrap/crew/dorms2) -"cl" = ( -/turf/simulated/wall/r_wall, -/area/ship/scrap/crew/dorms2) -"cm" = ( -/obj/machinery/door/blast/regular{ - density = 0; - icon_state = "pdoor0"; - id_tag = "scraplock"; - name = "External Blast Doors"; - opacity = 0 - }, -/obj/machinery/door/firedoor, -/obj/effect/wallframe_spawn/reinforced, -/turf/simulated/floor, -/area/ship/scrap/broken2) -"cn" = ( -/obj/structure/foamedmetal, -/turf/simulated/floor, -/area/ship/scrap/broken2) -"co" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/obj/item/cell/high/empty, -/turf/simulated/floor, -/area/ship/scrap/broken2) -"cp" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/turf/simulated/floor, -/area/ship/scrap/broken2) -"cq" = ( -/obj/machinery/door/airlock/autoname/bearcat, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/item/taperoll/engineering/applied, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor, -/area/ship/scrap/broken2) -"cr" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/turf/simulated/floor, -/area/ship/scrap/maintenance/lower) -"cs" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 4; - icon_state = "warning" - }, -/obj/effect/floor_decal/corner/beige{ - dir = 9 - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled, -/area/ship/scrap/cargo/lower) -"ct" = ( -/obj/effect/floor_decal/corner/beige{ - dir = 9 - }, -/turf/simulated/floor/tiled, -/area/ship/scrap/shuttle/lift) -"cu" = ( -/obj/effect/shuttle_landmark/lift/bottom, -/turf/simulated/floor/tiled, -/area/ship/scrap/shuttle/lift) -"cv" = ( -/turf/simulated/floor/tiled, -/area/ship/scrap/shuttle/lift) -"cw" = ( -/obj/effect/floor_decal/corner/beige{ - dir = 6 - }, -/turf/simulated/floor/tiled, -/area/ship/scrap/shuttle/lift) -"cx" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 8 - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/turf/simulated/floor, -/area/ship/scrap/maintenance/lower) -"cy" = ( -/obj/machinery/door/airlock/autoname/bearcat, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/dark, -/area/ship/scrap/crew/dorms2) -"cz" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/turf/simulated/floor/tiled/dark, -/area/ship/scrap/crew/dorms2) -"cA" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/turf/simulated/floor/tiled/dark, -/area/ship/scrap/crew/dorms2) -"cB" = ( -/obj/structure/table/standard, -/obj/item/newspaper, -/turf/simulated/floor/tiled/dark, -/area/ship/scrap/crew/dorms2) -"cC" = ( -/obj/machinery/door/blast/regular{ - density = 0; - icon_state = "pdoor0"; - id_tag = "scraplock"; - name = "External Blast Doors"; - opacity = 0 - }, -/obj/machinery/door/firedoor, -/obj/effect/wallframe_spawn/reinforced, -/turf/simulated/floor, -/area/ship/scrap/crew/dorms2) -"cD" = ( -/turf/simulated/floor, -/area/ship/scrap/broken2) -"cE" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 1; - level = 2 - }, -/obj/structure/foamedmetal, -/turf/simulated/floor, -/area/ship/scrap/broken2) -"cF" = ( -/obj/machinery/alarm{ - dir = 8; - pixel_x = 24; - req_access = newlist() - }, -/obj/item/stack/cable_coil/green, -/turf/simulated/floor, -/area/ship/scrap/broken2) -"cG" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 4; - icon_state = "warning" - }, -/obj/effect/floor_decal/corner/beige{ - dir = 9 - }, -/turf/simulated/floor/tiled, -/area/ship/scrap/cargo/lower) -"cH" = ( -/obj/machinery/alarm{ - dir = 4; - pixel_x = -24; - req_access = newlist() - }, -/obj/structure/closet, -/obj/random/gloves, -/obj/random/clothing, -/obj/random/clothing, -/obj/random/clothing, -/turf/simulated/floor/tiled/dark, -/area/ship/scrap/crew/dorms2) -"cI" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 1; - level = 2 - }, -/obj/item/storage/briefcase, -/obj/machinery/light_switch{ - pixel_y = -25 - }, -/turf/simulated/floor/tiled/dark, -/area/ship/scrap/crew/dorms2) -"cK" = ( -/turf/space, -/area/ship/scrap/broken1) -"cL" = ( -/obj/structure/lattice, -/obj/item/remains/mouse, -/turf/space, -/area/ship/scrap/broken1) -"cM" = ( -/obj/structure/girder, -/turf/simulated/floor, -/area/ship/scrap/broken1) -"cN" = ( -/turf/simulated/wall, -/area/ship/scrap/broken1) -"cO" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/door/airlock/autoname/bearcat, -/turf/simulated/floor, -/area/ship/scrap/maintenance/lower) -"cP" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 4; - icon_state = "warning" - }, -/obj/effect/floor_decal/corner/beige{ - dir = 9 - }, -/obj/machinery/light/small{ - dir = 8; - icon_state = "bulb1" - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled, -/area/ship/scrap/cargo/lower) -"cQ" = ( -/obj/effect/floor_decal/corner/beige{ - dir = 9 - }, -/obj/effect/floor_decal/corner/beige{ - dir = 10 - }, -/turf/simulated/floor/tiled, -/area/ship/scrap/shuttle/lift) -"cR" = ( -/obj/effect/floor_decal/corner/beige{ - dir = 10 - }, -/turf/simulated/floor/tiled, -/area/ship/scrap/shuttle/lift) -"cS" = ( -/obj/effect/floor_decal/corner/beige{ - dir = 6 - }, -/obj/effect/floor_decal/corner/beige{ - dir = 10 - }, -/turf/simulated/floor/tiled, -/area/ship/scrap/shuttle/lift) -"cT" = ( -/obj/effect/floor_decal/corner/beige{ - dir = 6 - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 8; - icon_state = "warning" - }, -/obj/machinery/light/small{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/tiled, -/area/ship/scrap/cargo/lower) -"cU" = ( -/obj/structure/lattice, -/obj/item/stack/nanopaste, -/turf/space, -/area/ship/scrap/broken1) -"cV" = ( -/obj/structure/inflatable/wall, -/turf/simulated/floor/tiled, -/area/ship/scrap/broken1) -"cW" = ( -/obj/structure/inflatable/wall, -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/turf/simulated/floor/tiled, -/area/ship/scrap/broken1) -"cX" = ( -/obj/machinery/light_switch{ - pixel_x = 24 - }, -/obj/machinery/organ_printer/robot/mapped, -/obj/item/device/radio/intercom/map_preset/bearcat{ - pixel_y = 22 - }, -/turf/simulated/floor, -/area/ship/scrap/broken1) -"cY" = ( -/turf/simulated/wall/r_wall, -/area/ship/scrap/broken1) -"cZ" = ( -/obj/machinery/light/small{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor, -/area/ship/scrap/maintenance/lower) -"da" = ( -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 4; - icon_state = "warningcorner" - }, -/obj/effect/floor_decal/corner/beige{ - dir = 9 - }, -/obj/structure/sign/deck/second{ - pixel_x = -32 - }, -/turf/simulated/floor/tiled, -/area/ship/scrap/cargo/lower) -"db" = ( -/obj/effect/floor_decal/corner/beige{ - dir = 9 - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 1; - icon_state = "warning" - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 1; - icon_state = "warning" - }, -/turf/simulated/floor/tiled, -/area/ship/scrap/cargo/lower) -"dc" = ( -/obj/structure/stairs/east, -/obj/effect/floor_decal/industrial/warning{ - dir = 1; - icon_state = "warning" - }, -/turf/simulated/floor/tiled, -/area/ship/scrap/cargo/lower) -"dd" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 1; - icon_state = "warning" - }, -/obj/structure/ore_box, -/turf/simulated/floor/tiled, -/area/ship/scrap/cargo/lower) -"de" = ( -/obj/effect/floor_decal/corner/beige{ - dir = 6 - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 1; - icon_state = "warningcorner" - }, -/turf/simulated/floor/tiled, -/area/ship/scrap/cargo/lower) -"df" = ( -/obj/machinery/light/small{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor, -/area/ship/scrap/maintenance/lower) -"dg" = ( -/turf/simulated/wall, -/area/ship/scrap/crew/dorms3) -"dh" = ( -/obj/structure/cable/green{ - d2 = 2; - icon_state = "0-2" - }, -/obj/effect/floor_decal/corner/beige{ - dir = 5 - }, -/obj/structure/closet, -/obj/random/gloves, -/obj/random/clothing, -/obj/random/clothing, -/obj/machinery/power/apc/derelict{ - dir = 1 - }, -/turf/simulated/floor/tiled/dark, -/area/ship/scrap/crew/dorms3) -"di" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/obj/effect/floor_decal/corner/beige{ - dir = 5 - }, -/obj/structure/holostool, -/obj/machinery/light/small{ - dir = 1; - icon_state = "bulb1" - }, -/turf/simulated/floor/tiled/dark, -/area/ship/scrap/crew/dorms3) -"dj" = ( -/obj/effect/floor_decal/corner/beige{ - dir = 5 - }, -/obj/structure/curtain/open/bed, -/obj/structure/bed/padded, -/obj/item/bedsheet/green, -/obj/effect/decal/cleanable/cobweb2, -/obj/structure/sign/poster{ - pixel_y = 32 - }, -/turf/simulated/floor/tiled/dark, -/area/ship/scrap/crew/dorms3) -"dk" = ( -/obj/machinery/door/blast/regular{ - density = 0; - icon_state = "pdoor0"; - id_tag = "scraplock"; - name = "External Blast Doors"; - opacity = 0 - }, -/obj/machinery/door/firedoor, -/obj/effect/wallframe_spawn/reinforced, -/turf/simulated/floor, -/area/ship/scrap/broken1) -"dl" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/obj/item/device/robotanalyzer, -/obj/structure/cable/green{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/turf/simulated/floor, -/area/ship/scrap/broken1) -"dm" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor, -/area/ship/scrap/broken1) -"dn" = ( -/obj/machinery/door/airlock/autoname/bearcat, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/item/taperoll/engineering/applied, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor, -/area/ship/scrap/broken1) -"do" = ( -/obj/effect/floor_decal/corner/beige{ - dir = 9 - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled, -/area/ship/scrap/cargo/lower) -"dp" = ( -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled, -/area/ship/scrap/cargo/lower) -"dq" = ( -/obj/machinery/light/small, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled, -/area/ship/scrap/cargo/lower) -"dr" = ( -/obj/effect/floor_decal/corner/beige{ - dir = 6 - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled, -/area/ship/scrap/cargo/lower) -"ds" = ( -/obj/machinery/door/airlock/autoname/bearcat, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/dark, -/area/ship/scrap/crew/dorms3) -"dt" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/turf/simulated/floor/tiled/dark, -/area/ship/scrap/crew/dorms3) -"du" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/turf/simulated/floor/tiled/dark, -/area/ship/scrap/crew/dorms3) -"dv" = ( -/obj/structure/table/standard, -/obj/random/plushie, -/turf/simulated/floor/tiled/dark, -/area/ship/scrap/crew/dorms3) -"dw" = ( -/obj/machinery/door/blast/regular{ - density = 0; - icon_state = "pdoor0"; - id_tag = "scraplock"; - name = "External Blast Doors"; - opacity = 0 - }, -/obj/machinery/door/firedoor, -/obj/effect/wallframe_spawn/reinforced, -/turf/simulated/floor, -/area/ship/scrap/crew/dorms3) -"dx" = ( -/obj/structure/mopbucket, -/obj/structure/table/rack{ - dir = 8 - }, -/obj/item/storage/toolbox/mechanical, -/obj/item/device/multitool{ - pixel_x = 3 - }, -/obj/item/clothing/glasses/welding, -/obj/item/stack/cable_coil, -/obj/item/stack/cable_coil, -/turf/simulated/floor/tiled, -/area/ship/scrap/broken1) -"dy" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 1; - level = 2 - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled, -/area/ship/scrap/broken1) -"dz" = ( -/obj/machinery/alarm{ - dir = 8; - pixel_x = 24; - req_access = newlist() - }, -/obj/machinery/recharge_station, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled, -/area/ship/scrap/broken1) -"dA" = ( -/obj/machinery/door/airlock/autoname/bearcat, -/turf/simulated/floor/tiled, -/area/ship/scrap/cargo/lower) -"dB" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/door/airlock/autoname/bearcat, -/turf/simulated/floor, -/area/ship/scrap/cargo/lower) -"dC" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor, -/area/ship/scrap/maintenance/lower) -"dD" = ( -/turf/simulated/wall/r_wall, -/area/ship/scrap/crew/dorms3) -"dE" = ( -/obj/machinery/alarm{ - dir = 4; - pixel_x = -24; - req_access = newlist() - }, -/obj/structure/closet, -/obj/random/clothing, -/obj/random/clothing, -/turf/simulated/floor/tiled/dark, -/area/ship/scrap/crew/dorms3) -"dF" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 1; - level = 2 - }, -/obj/structure/holostool, -/obj/machinery/light_switch{ - pixel_y = -25 - }, -/turf/simulated/floor/tiled/dark, -/area/ship/scrap/crew/dorms3) -"dG" = ( -/obj/effect/floor_decal/corner/beige{ - dir = 10 - }, -/obj/structure/curtain/open/bed, -/obj/structure/bed/padded, -/obj/item/bedsheet/brown, -/turf/simulated/floor/tiled/dark, -/area/ship/scrap/crew/dorms3) -"dH" = ( -/obj/machinery/floodlight, -/turf/simulated/floor, -/area/ship/scrap/broken1) -"dI" = ( -/obj/item/stool/padded, -/obj/machinery/power/apc/derelict, -/obj/structure/cable/green, -/turf/simulated/floor/tiled, -/area/ship/scrap/broken1) -"dJ" = ( -/obj/machinery/cryopod/robot{ - dir = 4 - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/computer/cryopod/robot{ - pixel_x = 32 - }, -/turf/simulated/floor/tiled, -/area/ship/scrap/broken1) -"dK" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/effect/decal/cleanable/spiderling_remains, -/obj/machinery/light/small{ - dir = 8 - }, -/turf/simulated/floor, -/area/ship/scrap/maintenance/lower) -"dL" = ( -/obj/machinery/door/airlock/autoname/bearcat, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor, -/area/ship/scrap/maintenance/lower) -"dM" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor, -/area/ship/scrap/maintenance/lower) -"dN" = ( -/obj/structure/cable/green{ - d2 = 4; - icon_state = "0-4" - }, -/obj/machinery/power/apc/derelict, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor, -/area/ship/scrap/maintenance/lower) -"dO" = ( -/obj/machinery/light/small{ - dir = 1; - icon_state = "bulb1" - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor, -/area/ship/scrap/maintenance/lower) -"dP" = ( -/obj/structure/cable/green{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 1 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor, -/area/ship/scrap/maintenance/lower) -"dQ" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor, -/area/ship/scrap/maintenance/lower) -"dR" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor, -/area/ship/scrap/maintenance/lower) -"dS" = ( -/obj/machinery/door/airlock/autoname/bearcat, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor, -/area/ship/scrap/maintenance/lower) -"dT" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 - }, -/obj/machinery/light/small{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/turf/simulated/floor, -/area/ship/scrap/maintenance/lower) -"dU" = ( -/turf/simulated/wall, -/area/ship/scrap/maintenance/techstorage) -"dV" = ( -/turf/simulated/wall, -/area/ship/scrap/maintenance/storage) -"dW" = ( -/turf/simulated/wall/r_wall, -/area/ship/scrap/maintenance/storage) -"dX" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/door/airlock/autoname/bearcat, -/turf/simulated/floor, -/area/ship/scrap/maintenance/storage) -"dY" = ( -/turf/simulated/wall/r_wall, -/area/ship/scrap/maintenance/eva) -"dZ" = ( -/turf/simulated/wall, -/area/ship/scrap/maintenance/eva) -"ea" = ( -/turf/simulated/wall/r_wall, -/area/ship/scrap/maintenance/techstorage) -"eb" = ( -/obj/item/stock_parts/circuitboard/pacman, -/obj/item/stock_parts/circuitboard/recharge_station, -/obj/item/stock_parts/circuitboard/shield_generator, -/obj/structure/table/rack, -/obj/effect/floor_decal/corner/yellow{ - dir = 5 - }, -/obj/item/device/integrated_circuit_printer, -/turf/simulated/floor/tiled, -/area/ship/scrap/maintenance/techstorage) -"ec" = ( -/obj/item/stock_parts/circuitboard/helm, -/obj/item/stock_parts/circuitboard/unary_atmos/cooler, -/obj/structure/table/rack, -/obj/effect/floor_decal/corner/yellow{ - dir = 5 - }, -/obj/machinery/alarm{ - pixel_y = 32; - req_access = newlist() - }, -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/turf/simulated/floor/tiled, -/area/ship/scrap/maintenance/techstorage) -"ed" = ( -/obj/item/stock_parts/circuitboard/autolathe, -/obj/item/stock_parts/circuitboard/unary_atmos/heater, -/obj/structure/table/rack, -/obj/effect/floor_decal/corner/yellow{ - dir = 5 - }, -/turf/simulated/floor/tiled, -/area/ship/scrap/maintenance/techstorage) -"ee" = ( -/obj/item/storage/toolbox/electrical, -/obj/item/storage/toolbox/electrical{ - pixel_x = 7; - pixel_y = 4 - }, -/obj/item/device/t_scanner, -/obj/item/cell/high, -/obj/machinery/alarm{ - pixel_y = 32; - req_access = newlist() - }, -/obj/item/tape_roll, -/obj/machinery/light_switch{ - pixel_x = -24 - }, -/obj/effect/floor_decal/corner/yellow{ - dir = 9 - }, -/obj/item/airalarm_electronics, -/obj/item/airlock_electronics, -/obj/item/airlock_electronics, -/obj/structure/table/rack, -/turf/simulated/floor/tiled, -/area/ship/scrap/maintenance/storage) -"ef" = ( -/obj/structure/closet/crate/plastic, -/obj/item/storage/ore, -/obj/item/pickaxe, -/obj/item/stack/flag/yellow, -/obj/item/storage/box/glowsticks, -/obj/item/device/scanner/mining, -/turf/simulated/floor/tiled, -/area/ship/scrap/maintenance/storage) -"eg" = ( -/obj/item/caution, -/obj/item/caution, -/obj/item/FixOVein, -/obj/structure/closet/crate, -/obj/item/mop, -/obj/item/device/radio/map_preset/bearcat, -/obj/machinery/atmospherics/unary/vent_pump/on{ - level = 2 - }, -/obj/item/storage/bag/trash, -/obj/machinery/light/small{ - dir = 1; - icon_state = "bulb1" - }, -/turf/simulated/floor, -/area/ship/scrap/maintenance/storage) -"eh" = ( -/obj/structure/ladder/up, -/obj/effect/decal/cleanable/dirt, -/obj/structure/sign/deck/second{ - pixel_y = 32 - }, -/turf/simulated/floor, -/area/ship/scrap/maintenance/storage) -"ei" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/item/device/radio/intercom/map_preset/bearcat{ - dir = 8; - pixel_x = 22 - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor, -/area/ship/scrap/maintenance/storage) -"ej" = ( -/obj/machinery/portable_atmospherics/canister/oxygen, -/turf/simulated/floor, -/area/ship/scrap/maintenance/eva) -"ek" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/power/apc/derelict{ - dir = 1 - }, -/obj/structure/table/rack, -/obj/item/tank/jetpack/oxygen, -/obj/item/tank/jetpack/oxygen, -/obj/structure/cable/green{ - d2 = 2; - icon_state = "0-2" - }, -/obj/item/device/suit_cooling_unit, -/obj/item/device/suit_cooling_unit, -/turf/simulated/floor, -/area/ship/scrap/maintenance/eva) -"el" = ( -/obj/effect/floor_decal/corner/yellow{ - dir = 6 - }, -/obj/machinery/atmospherics/portables_connector, -/obj/machinery/portable_atmospherics/canister/air, -/obj/machinery/light/small{ - dir = 1; - icon_state = "bulb1" - }, -/turf/simulated/floor/tiled, -/area/ship/scrap/maintenance/eva) -"em" = ( -/obj/effect/wallframe_spawn/reinforced, -/turf/simulated/floor, -/area/ship/scrap/maintenance/eva) -"en" = ( -/obj/machinery/light/small{ - dir = 8 - }, -/obj/machinery/vending/engineering/bearcat, -/turf/simulated/floor/tiled, -/area/ship/scrap/maintenance/techstorage) -"eo" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/turf/simulated/floor/tiled, -/area/ship/scrap/maintenance/techstorage) -"ep" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor, -/area/ship/scrap/maintenance/techstorage) -"eq" = ( -/obj/machinery/door/airlock/autoname/bearcat, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor, -/area/ship/scrap/maintenance/techstorage) -"er" = ( -/obj/effect/floor_decal/corner/yellow{ - dir = 9 - }, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/turf/simulated/floor/tiled, -/area/ship/scrap/maintenance/storage) -"es" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 1 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled, -/area/ship/scrap/maintenance/storage) -"et" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled, -/area/ship/scrap/maintenance/storage) -"eu" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled, -/area/ship/scrap/maintenance/storage) -"ev" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, -/obj/structure/cable/green{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/turf/simulated/floor/tiled, -/area/ship/scrap/maintenance/storage) -"ew" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/door/airlock/autoname/bearcat, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/ship/scrap/maintenance/eva) -"ex" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled, -/area/ship/scrap/maintenance/eva) -"ey" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/turf/simulated/floor, -/area/ship/scrap/maintenance/eva) -"ez" = ( -/obj/effect/floor_decal/corner/yellow{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 5 - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 4; - icon_state = "warning" - }, -/turf/simulated/floor/tiled, -/area/ship/scrap/maintenance/eva) -"eA" = ( -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 4 - }, -/obj/machinery/door/airlock/external/bolted/cycling{ - id_tag = "eva_in" - }, -/obj/machinery/access_button/airlock_interior{ - master_tag = "eva"; - pixel_x = -12; - pixel_y = 20 - }, -/obj/machinery/door/blast/regular{ - density = 0; - dir = 4; - icon_state = "pdoor0"; - id_tag = "scraplock"; - name = "External Blast Doors"; - opacity = 0 - }, -/turf/simulated/floor, -/area/ship/scrap/maintenance/eva) -"eB" = ( -/obj/machinery/light/small{ - dir = 1; - icon_state = "bulb1" - }, -/obj/machinery/airlock_sensor{ - id_tag = "eva_sensor"; - pixel_y = 40 - }, -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 4 - }, -/obj/machinery/embedded_controller/radio/airlock/airlock_controller{ - id_tag = "eva"; - pixel_y = 25; - tag_airpump = "eva_pump"; - tag_chamber_sensor = "eva_sensor"; - tag_exterior_door = "eva_out"; - tag_interior_door = "eva_in" - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 10 - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 1 - }, -/turf/simulated/floor, -/area/ship/scrap/maintenance/eva) -"eC" = ( -/obj/machinery/atmospherics/unary/vent_pump/high_volume/airlock{ - dir = 8; - id_tag = "eva_pump" - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 5 - }, -/obj/effect/floor_decal/industrial/warning, -/turf/simulated/floor, -/area/ship/scrap/maintenance/eva) -"eD" = ( -/obj/machinery/door/airlock/external/bolted/cycling{ - id_tag = "eva_out" - }, -/obj/machinery/access_button/airlock_exterior{ - master_tag = "eva"; - pixel_x = 18; - pixel_y = -18 - }, -/obj/machinery/shield_diffuser, -/turf/simulated/floor, -/area/ship/scrap/maintenance/eva) -"eE" = ( -/obj/item/stock_parts/capacitor, -/obj/item/stock_parts/capacitor, -/obj/item/stock_parts/capacitor/adv, -/obj/item/stock_parts/scanning_module, -/obj/item/stock_parts/scanning_module, -/obj/item/stock_parts/scanning_module, -/obj/item/stock_parts/scanning_module/adv, -/obj/structure/table/rack, -/obj/effect/floor_decal/corner/yellow{ - dir = 10 - }, -/turf/simulated/floor/tiled, -/area/ship/scrap/maintenance/techstorage) -"eF" = ( -/obj/item/stock_parts/console_screen, -/obj/item/stock_parts/console_screen, -/obj/item/stock_parts/console_screen, -/obj/item/stock_parts/micro_laser, -/obj/item/stock_parts/micro_laser, -/obj/item/stock_parts/micro_laser, -/obj/item/stock_parts/micro_laser/ultra, -/obj/structure/table/rack, -/obj/machinery/power/apc/derelict{ - name = "south bump"; - pixel_y = -24 - }, -/obj/structure/cable/green, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 1; - level = 2 - }, -/turf/simulated/floor, -/area/ship/scrap/maintenance/techstorage) -"eG" = ( -/obj/structure/table/rack, -/obj/item/stock_parts/circuitboard/pacman/super/potato, -/obj/item/stack/material/glass/phoronrglass/ten, -/obj/item/stack/material/ocp/ten, -/obj/item/stock_parts/circuitboard/unary_atmos/engine, -/obj/item/stock_parts/circuitboard/unary_atmos/engine, -/obj/item/stock_parts/circuitboard/unary_atmos/engine, -/turf/simulated/floor, -/area/ship/scrap/maintenance/techstorage) -"eH" = ( -/obj/item/storage/toolbox/mechanical{ - pixel_x = 5; - pixel_y = -7 - }, -/obj/item/storage/toolbox/mechanical, -/obj/item/clothing/head/welding, -/obj/item/device/scanner/gas, -/obj/effect/floor_decal/corner/yellow{ - dir = 9 - }, -/obj/structure/table/rack, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled, -/area/ship/scrap/maintenance/storage) -"eI" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled, -/area/ship/scrap/maintenance/storage) -"eJ" = ( -/turf/simulated/floor/tiled, -/area/ship/scrap/maintenance/storage) -"eK" = ( -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled, -/area/ship/scrap/maintenance/storage) -"eL" = ( -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor, -/area/ship/scrap/maintenance/storage) -"eM" = ( -/obj/item/device/radio/intercom/map_preset/bearcat{ - dir = 4; - pixel_x = -22 - }, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor, -/area/ship/scrap/maintenance/eva) -"eN" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled, -/area/ship/scrap/maintenance/eva) -"eO" = ( -/obj/effect/floor_decal/corner/yellow{ - dir = 6 - }, -/obj/structure/sign/warning/vacuum{ - pixel_x = 35 - }, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 8; - level = 2 - }, -/turf/simulated/floor/tiled, -/area/ship/scrap/maintenance/eva) -"eQ" = ( -/obj/structure/table/standard, -/obj/item/device/flashlight, -/obj/item/device/flashlight, -/obj/item/storage/box/lights/bulbs, -/obj/item/storage/box/lights/mixed, -/obj/structure/cable/green, -/obj/machinery/power/apc/derelict{ - name = "Tools Storage APC" - }, -/obj/effect/floor_decal/corner/yellow{ - dir = 9 - }, -/obj/item/taperoll/engineering, -/turf/simulated/floor/tiled, -/area/ship/scrap/maintenance/storage) -"eR" = ( -/obj/structure/table/standard, -/obj/item/inflatable_dispenser, -/obj/item/device/radio/map_preset/bearcat, -/obj/item/device/radio/map_preset/bearcat, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 1 - }, -/obj/machinery/light/small, -/turf/simulated/floor/tiled, -/area/ship/scrap/maintenance/storage) -"eS" = ( -/obj/item/tape_roll, -/obj/item/stack/material/plasteel/fifty, -/obj/item/stack/material/rods/fifty, -/obj/item/stack/material/steel/fifty, -/obj/item/stack/material/plastic/fifty, -/obj/item/stack/material/steel/fifty, -/obj/structure/closet/crate, -/obj/item/stack/material/glass/fifty, -/obj/item/stack/material/glass/fifty, -/obj/item/stack/material/glass/reinforced/fifty, -/turf/simulated/floor/tiled, -/area/ship/scrap/maintenance/storage) -"eT" = ( -/obj/item/clothing/head/welding, -/obj/item/device/radio/map_preset/bearcat, -/obj/item/tape_roll, -/obj/structure/table/standard, -/obj/item/device/radio/intercom/map_preset/bearcat{ - pixel_y = -32 - }, -/turf/simulated/floor, -/area/ship/scrap/maintenance/storage) -"eU" = ( -/obj/machinery/vending/tool/bearcat, -/turf/simulated/floor, -/area/ship/scrap/maintenance/storage) -"eV" = ( -/obj/machinery/suit_cycler/salvage/bearcat, -/turf/simulated/floor/tiled, -/area/ship/scrap/maintenance/eva) -"eW" = ( -/obj/machinery/suit_storage_unit/engineering/salvage/bearcat, -/obj/machinery/light/small, -/turf/simulated/floor/tiled, -/area/ship/scrap/maintenance/eva) -"eX" = ( -/obj/machinery/suit_storage_unit/engineering/salvage/bearcat, -/obj/machinery/alarm{ - dir = 8; - pixel_x = 24; - req_access = newlist() - }, -/turf/simulated/floor/tiled, -/area/ship/scrap/maintenance/eva) -"eY" = ( -/obj/machinery/door/blast/regular{ - density = 0; - dir = 4; - icon_state = "pdoor0"; - id_tag = "scraplock"; - name = "External Blast Doors"; - opacity = 0 - }, -/obj/machinery/door/firedoor, -/obj/effect/wallframe_spawn/reinforced, -/turf/simulated/floor, -/area/ship/scrap/maintenance/storage) -"fb" = ( -/obj/structure/curtain/open/bed, -/obj/structure/bed/padded, -/obj/effect/floor_decal/corner/beige{ - dir = 10 - }, -/obj/item/bedsheet/red, -/turf/simulated/floor/tiled/dark, -/area/ship/scrap/crew/dorms2) -"gb" = ( -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/structure/closet/crate, -/obj/random/loot, -/obj/random/tech_supply, -/obj/random/tech_supply, -/obj/random/advdevice, -/turf/simulated/floor/tiled, -/area/ship/scrap/cargo/lower) -"gV" = ( -/obj/effect/paint/brown, -/turf/simulated/wall/r_wall, -/area/ship/scrap/crew/dorms1) -"kz" = ( -/obj/effect/paint/brown, -/turf/simulated/wall/r_wall, -/area/ship/scrap/broken2) -"kH" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 1 - }, -/turf/simulated/floor/reinforced/airless, -/area/space) -"kV" = ( -/turf/simulated/floor/reinforced/airless, -/area/ship/scrap/gambling) -"lQ" = ( -/obj/machinery/light_switch{ - pixel_y = 25 - }, -/turf/simulated/floor/tiled, -/area/ship/scrap/cargo/lower) -"oj" = ( -/obj/effect/paint/brown, -/turf/simulated/wall/r_wall, -/area/ship/scrap/broken1) -"tc" = ( -/turf/simulated/floor/reinforced/airless, -/area/ship/scrap/crew/dorms1) -"tW" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 1 - }, -/obj/effect/floor_decal/industrial/loading{ - dir = 1 - }, -/obj/machinery/power/apc/derelict, -/obj/structure/cable/green{ - d2 = 4; - icon_state = "0-4" - }, -/turf/simulated/floor/tiled, -/area/ship/scrap/escape_port) -"va" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/item/device/radio/intercom/map_preset/bearcat{ - dir = 8; - pixel_x = 22 - }, -/turf/simulated/floor, -/area/ship/scrap/maintenance/lower) -"vU" = ( -/obj/effect/floor_decal/corner/beige{ - dir = 10 - }, -/obj/structure/curtain/open/bed, -/obj/structure/bed/padded, -/obj/item/bedsheet/brown, -/turf/simulated/floor/tiled/dark, -/area/ship/scrap/crew/dorms1) -"vY" = ( -/obj/effect/paint/brown, -/turf/simulated/wall/r_wall, -/area/ship/scrap/escape_port) -"xc" = ( -/obj/effect/paint/brown, -/turf/simulated/wall/r_wall, -/area/ship/scrap/crew/dorms3) -"yN" = ( -/obj/effect/paint/brown, -/turf/simulated/wall/r_wall, -/area/ship/scrap/maintenance/techstorage) -"Bu" = ( -/obj/effect/paint/brown, -/turf/simulated/wall/r_wall, -/area/ship/scrap/maintenance/eva) -"En" = ( -/turf/simulated/floor/reinforced/airless, -/area/ship/scrap/crew/dorms3) -"EP" = ( -/obj/machinery/door/airlock/autoname/bearcat, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor, -/area/ship/scrap/cargo/lower) -"Gr" = ( -/turf/simulated/floor/reinforced/airless, -/area/ship/scrap/crew/dorms2) -"GU" = ( -/obj/effect/paint/brown, -/turf/simulated/wall/r_wall, -/area/ship/scrap/cargo/lower) -"LF" = ( -/obj/effect/paint/brown, -/turf/simulated/wall/r_wall, -/area/ship/scrap/crew/dorms2) -"NN" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 8 - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/turf/simulated/floor, -/area/ship/scrap/maintenance/lower) -"Ro" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 1 - }, -/obj/effect/floor_decal/industrial/loading{ - dir = 1 - }, -/obj/machinery/light/small/red, -/turf/simulated/floor/tiled, -/area/ship/scrap/escape_star) -"Sf" = ( -/obj/effect/paint/brown, -/turf/simulated/wall/r_wall, -/area/ship/scrap/maintenance/storage) -"Ul" = ( -/turf/simulated/floor/reinforced/airless, -/area/ship/scrap/maintenance/storage) -"UZ" = ( -/obj/effect/paint/brown, -/turf/simulated/wall/r_wall, -/area/ship/scrap/gambling) - -(1,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(2,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(3,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(4,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(5,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(6,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(7,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(8,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(9,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(10,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(11,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(12,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(13,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(14,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(15,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(16,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(17,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(18,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(19,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(20,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(21,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(22,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(23,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(24,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(25,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(26,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(27,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(28,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(29,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(30,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(31,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(32,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(33,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(34,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(35,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(36,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(37,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(38,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(39,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(40,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(41,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(42,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(43,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(44,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(45,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(46,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(47,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(48,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -vY -vY -vY -UZ -UZ -kV -UZ -UZ -kz -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(49,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -vY -vY -ah -ah -aK -aK -bi -aL -aL -bV -cm -cD -cK -cU -dk -oj -oj -oj -yN -yN -yN -yN -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(50,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -kH -ai -ar -az -aK -aV -bj -bB -aK -bW -cn -cn -cL -cV -cV -dx -dH -cN -ea -ea -ea -yN -yN -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(51,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -kH -ai -ar -aA -aL -aW -bk -bC -aK -bX -co -cE -cM -cW -dl -dy -dI -cN -eb -en -eE -ea -yN -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(52,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -kH -ai -ar -aF -aK -aX -bl -bD -aK -bY -cp -cF -cN -cX -dm -dz -dJ -cN -ec -eo -eF -ea -yN -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(53,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -kH -ai -ar -tW -aL -aK -bm -aK -aK -bZ -cq -bZ -cN -cY -dn -cN -cN -cN -ed -ep -eG -ea -yN -yN -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(54,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -kH -ai -ar -aB -aM -aY -bn -bE -bE -ca -cr -bE -cO -cZ -cr -bE -dK -dU -dU -eq -ea -ea -ea -yN -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(55,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -GU -GU -al -al -ao -ao -bo -ao -ao -ao -bo -ao -ao -ao -bo -ao -dL -dV -ee -er -eH -eQ -dW -Sf -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(56,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ac -ac -GU -al -aC -aN -aZ -bp -bF -bO -cb -cs -cG -cP -da -do -dA -dM -dV -ef -es -eI -eR -dW -Sf -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(57,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -aa -aa -aa -aa -aa -aa -aa -aa -ad -ag -aj -at -aD -aO -gb -br -bG -bP -cc -ct -ct -cQ -db -dp -ao -dN -dW -eg -et -eJ -eS -eY -Ul -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(58,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ae -ag -ak -au -aE -aP -aQ -br -aQ -bQ -cd -cu -cv -cR -dc -dq -ao -dO -dW -eh -eu -eK -eT -dW -Sf -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(59,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ac -ac -GU -al -al -lQ -bb -bs -bH -bR -cd -cv -cv -cR -ao -dp -ao -dP -dX -ei -ev -eL -eU -dW -Sf -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(60,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -am -av -dp -aQ -bc -bt -bI -bS -ce -cw -cw -cS -dd -dp -ao -dQ -dY -dZ -ew -dZ -dZ -dZ -Bu -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(61,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -am -aw -aG -aR -bd -bu -bJ -bT -cf -cf -cf -cT -de -dr -dB -dR -dY -ej -ex -eM -eV -dZ -Bu -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(62,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -GU -GU -ao -ao -ao -ao -EP -ao -ao -ao -bo -ao -ao -ao -bo -ao -dS -dY -ek -ey -eN -eW -dY -Bu -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(63,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -kH -ap -ax -aH -aS -be -bv -va -bU -cg -cx -dC -cO -df -NN -dC -dT -dZ -el -ez -eO -eX -dY -Bu -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(64,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -kH -ap -ax -an -aT -aT -bw -aT -aT -ch -cy -ch -ch -dg -ds -dD -dD -dZ -dZ -eA -dZ -dZ -Bu -Bu -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(65,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -kH -ap -ax -Ro -aT -bf -bx -bL -aT -ci -cz -cH -ch -dh -dt -dE -xc -Bu -Bu -eB -Bu -Bu -Bu -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(66,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -kH -ap -ax -aI -aT -bg -by -bM -aT -cj -cA -cI -ch -di -du -dF -xc -aa -em -eC -em -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(67,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -kH -ap -ax -aJ -aU -bh -bz -vU -aT -ck -cB -fb -ch -dj -dv -dG -xc -aa -em -eD -em -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(68,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aq -aq -ay -ay -aU -aU -bA -aT -aU -cl -cC -ch -ch -dg -dw -dD -xc -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(69,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aq -aq -aq -gV -gV -tc -gV -gV -LF -Gr -LF -LF -xc -En -xc -xc -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(70,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(71,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(72,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(73,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(74,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(75,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(76,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(77,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(78,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(79,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(80,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(81,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(82,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(83,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(84,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(85,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(86,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(87,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(88,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(89,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(90,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(91,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(92,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(93,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(94,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(95,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(96,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(97,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(98,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(99,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(100,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(101,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(102,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(103,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(104,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(105,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(106,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(107,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(108,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(109,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(110,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(111,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(112,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(113,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(114,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(115,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(116,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(117,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(118,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(119,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(120,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} diff --git a/maps/away/bearcat/bearcat-2.dmm b/maps/away/bearcat/bearcat-2.dmm deleted file mode 100644 index da5ee087b59ee..0000000000000 --- a/maps/away/bearcat/bearcat-2.dmm +++ /dev/null @@ -1,20385 +0,0 @@ -//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE -"aa" = ( -/turf/space, -/area/space) -"ab" = ( -/obj/effect/wallframe_spawn/reinforced, -/obj/machinery/door/blast/regular{ - density = 0; - icon_state = "pdoor0"; - id_tag = "scraplock"; - name = "External Blast Doors"; - opacity = 0 - }, -/obj/machinery/door/firedoor, -/turf/simulated/floor, -/area/ship/scrap/command/bridge) -"ac" = ( -/obj/effect/wallframe_spawn/reinforced, -/obj/machinery/door/blast/regular{ - density = 0; - dir = 4; - icon_state = "pdoor0"; - id_tag = "scraplock"; - name = "External Blast Doors"; - opacity = 0 - }, -/obj/machinery/door/firedoor, -/turf/simulated/floor, -/area/ship/scrap/command/bridge) -"ad" = ( -/obj/effect/wallframe_spawn/reinforced, -/obj/machinery/door/firedoor, -/obj/machinery/door/blast/regular{ - density = 0; - dir = 4; - icon_state = "pdoor0"; - id_tag = "scraplock"; - name = "External Blast Doors"; - opacity = 0 - }, -/turf/simulated/floor, -/area/ship/scrap/command/bridge) -"ag" = ( -/obj/machinery/computer/modular/preset/cardslot/command, -/turf/simulated/floor/bluegrid/airless, -/area/ship/scrap/command/bridge) -"ah" = ( -/obj/machinery/computer/ship/helm{ - req_access = list(list("ACCESS_BEARCAT")) - }, -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/turf/simulated/floor/bluegrid/airless, -/area/ship/scrap/command/bridge) -"ai" = ( -/obj/structure/table/standard, -/obj/item/toy/figure/captain, -/obj/machinery/button/blast_door{ - id_tag = "sensor"; - name = "Sensor Shroud" - }, -/obj/item/device/radio/map_preset/bearcat, -/obj/item/cell/high, -/turf/simulated/floor/tiled/dark, -/area/ship/scrap/command/bridge) -"aj" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/bed/chair/comfy/brown{ - dir = 1 - }, -/obj/effect/landmark/deadcap, -/turf/simulated/floor/tiled/dark, -/area/ship/scrap/command/bridge) -"ak" = ( -/obj/structure/table/standard, -/obj/machinery/button/blast_door{ - id_tag = "scraplock"; - name = "External Lockdown" - }, -/obj/item/gun/energy/captain, -/turf/simulated/floor/tiled/dark, -/area/ship/scrap/command/bridge) -"am" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 4; - level = 2 - }, -/obj/machinery/computer/ship/engines{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark, -/area/ship/scrap/command/bridge) -"an" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/turf/simulated/floor/tiled/dark, -/area/ship/scrap/command/bridge) -"ao" = ( -/obj/machinery/computer/ship/sensors/spacer{ - dir = 8 - }, -/turf/simulated/floor/tiled/dark, -/area/ship/scrap/command/bridge) -"ap" = ( -/obj/effect/landmark/map_data{ - height = 2 - }, -/turf/space, -/area/space) -"aq" = ( -/obj/effect/overmap/visitable/ship/bearcat, -/turf/space, -/area/space) -"ar" = ( -/turf/simulated/wall/r_wall, -/area/ship/scrap/comms) -"as" = ( -/obj/machinery/door/blast/regular{ - id_tag = "sensor" - }, -/turf/simulated/floor/airless, -/area/ship/scrap/comms) -"at" = ( -/obj/effect/paint/brown, -/turf/simulated/wall/r_wall, -/area/ship/scrap/command/bridge) -"au" = ( -/obj/structure/bed/chair{ - dir = 1 - }, -/obj/machinery/power/apc/derelict{ - dir = 8 - }, -/obj/structure/cable/green{ - d2 = 4; - icon_state = "0-4" - }, -/turf/simulated/floor/tiled/dark, -/area/ship/scrap/command/bridge) -"av" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/hologram/holopad/longrange/remoteship, -/obj/structure/cable/green{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/turf/simulated/floor/tiled/dark, -/area/ship/scrap/command/bridge) -"aw" = ( -/obj/structure/bed/chair{ - dir = 1 - }, -/obj/item/device/radio/intercom/map_preset/bearcat{ - default_hailing = 1; - dir = 8; - pixel_x = 22 - }, -/turf/simulated/floor/tiled/dark, -/area/ship/scrap/command/bridge) -"ax" = ( -/obj/machinery/shipsensors, -/turf/simulated/floor/airless, -/area/ship/scrap/comms) -"ay" = ( -/obj/machinery/light, -/obj/machinery/computer/modular/preset/engineering{ - dir = 1; - icon_state = "console" - }, -/obj/item/device/radio/intercom/map_preset/bearcat{ - dir = 4; - pixel_x = -22 - }, -/turf/simulated/floor/tiled/dark, -/area/ship/scrap/command/bridge) -"az" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/dark, -/area/ship/scrap/command/bridge) -"aA" = ( -/obj/machinery/light, -/obj/machinery/computer/modular/preset/cardslot/command{ - dir = 1; - icon_state = "console" - }, -/obj/machinery/alarm{ - dir = 8; - pixel_x = 24; - req_access = newlist() - }, -/obj/machinery/light_switch{ - pixel_y = -25 - }, -/turf/simulated/floor/tiled/dark, -/area/ship/scrap/command/bridge) -"aB" = ( -/obj/machinery/door/blast/regular, -/turf/simulated/floor, -/area/ship/scrap/command/captain) -"aC" = ( -/turf/simulated/wall/r_wall, -/area/ship/scrap/command/captain) -"aD" = ( -/obj/effect/wallframe_spawn/reinforced, -/obj/machinery/door/blast/regular{ - density = 0; - dir = 4; - icon_state = "pdoor0"; - id_tag = "scraplock"; - name = "External Blast Doors"; - opacity = 0 - }, -/obj/machinery/door/firedoor, -/turf/simulated/floor, -/area/ship/scrap/comms) -"aE" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/door/airlock/autoname/command/bearcat, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/dark, -/area/ship/scrap/command/bridge) -"aF" = ( -/obj/machinery/cryopod/lifepod, -/obj/machinery/door/window/southright, -/obj/machinery/computer/cryopod{ - pixel_x = 32 - }, -/turf/simulated/floor/wood, -/area/ship/scrap/command/captain) -"aH" = ( -/turf/simulated/floor/bluegrid, -/area/ship/scrap/comms) -"aI" = ( -/obj/machinery/light{ - dir = 4; - icon_state = "tube1" - }, -/obj/structure/window/reinforced{ - dir = 8 - }, -/obj/machinery/power/apc/derelict{ - dir = 1; - name = "Communications APC" - }, -/obj/structure/cable/green{ - d2 = 2; - icon_state = "0-2" - }, -/obj/machinery/light_switch{ - pixel_x = 28 - }, -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/turf/simulated/floor/tiled/dark, -/area/ship/scrap/comms) -"aJ" = ( -/obj/machinery/power/apc/derelict{ - dir = 4; - name = "Bridge APC" - }, -/obj/structure/cable/green{ - d2 = 2; - icon_state = "0-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/sign/warning/server_room{ - pixel_x = -32 - }, -/obj/structure/cable/green, -/turf/simulated/floor/tiled/dark, -/area/ship/scrap/command/hallway) -"aK" = ( -/obj/machinery/light{ - dir = 8; - icon_state = "tube1" - }, -/obj/item/gun/energy/stunrevolver, -/obj/structure/closet/cabinet, -/obj/item/storage/secure/briefcase, -/obj/item/device/taperecorder, -/obj/item/device/camera, -/obj/item/storage/backpack/dufflebag/syndie, -/obj/item/storage/box/ammo/shotgunshells, -/obj/item/handcuffs, -/obj/machinery/light_switch{ - pixel_y = 25 - }, -/turf/simulated/floor/wood, -/area/ship/scrap/command/captain) -"aL" = ( -/obj/item/bedsheet/captain, -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/obj/item/gun/projectile/pistol/holdout, -/obj/structure/bed/padded, -/obj/effect/submap_landmark/spawnpoint/captain, -/turf/simulated/floor/wood, -/area/ship/scrap/command/captain) -"aM" = ( -/obj/item/paper_bin, -/obj/item/pen, -/obj/structure/table/woodentable, -/obj/random/action_figure, -/obj/item/storage/belt/utility/full, -/obj/machinery/alarm{ - dir = 8; - pixel_x = 24; - req_access = newlist() - }, -/turf/simulated/floor/wood, -/area/ship/scrap/command/captain) -"aN" = ( -/obj/effect/wallframe_spawn/reinforced, -/obj/machinery/door/blast/regular{ - density = 0; - icon_state = "pdoor0"; - id_tag = "scraplock"; - name = "External Blast Doors"; - opacity = 0 - }, -/obj/machinery/door/firedoor, -/turf/simulated/floor, -/area/ship/scrap/comms) -"aO" = ( -/obj/machinery/message_server, -/turf/simulated/floor/bluegrid, -/area/ship/scrap/comms) -"aP" = ( -/obj/machinery/door/window/westleft, -/obj/structure/cable/green{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 - }, -/turf/simulated/floor/tiled/dark, -/area/ship/scrap/comms) -"aQ" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/door/airlock/autoname/command/bearcat, -/turf/simulated/floor/tiled/dark, -/area/ship/scrap/comms) -"aR" = ( -/obj/structure/cable/green{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply, -/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers, -/turf/simulated/floor/tiled/dark, -/area/ship/scrap/command/hallway) -"aS" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/door/airlock/autoname/command/bearcat, -/turf/simulated/floor/tiled/dark, -/area/ship/scrap/command/captain) -"aT" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/wood, -/area/ship/scrap/command/captain) -"aU" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/wood, -/area/ship/scrap/command/captain) -"aV" = ( -/obj/structure/bed/chair/comfy/brown, -/obj/structure/cable/green{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/turf/simulated/floor/wood, -/area/ship/scrap/command/captain) -"aW" = ( -/obj/effect/wallframe_spawn/reinforced, -/obj/machinery/door/blast/regular{ - density = 0; - icon_state = "pdoor0"; - id_tag = "scraplock"; - name = "External Blast Doors"; - opacity = 0 - }, -/obj/machinery/door/firedoor, -/turf/simulated/floor, -/area/ship/scrap/command/captain) -"aX" = ( -/obj/machinery/alarm{ - dir = 1; - pixel_y = -32; - req_access = newlist() - }, -/obj/machinery/computer/message_monitor{ - dir = 4 - }, -/turf/simulated/floor/bluegrid, -/area/ship/scrap/comms) -"aY" = ( -/obj/structure/window/reinforced{ - dir = 8 - }, -/obj/item/device/radio/intercom/map_preset/bearcat{ - pixel_y = -32 - }, -/obj/machinery/alarm{ - dir = 8; - pixel_x = 24; - req_access = newlist() - }, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 1; - level = 2 - }, -/turf/simulated/floor/tiled/dark, -/area/ship/scrap/comms) -"aZ" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/tiled/dark, -/area/ship/scrap/command/hallway) -"ba" = ( -/obj/item/device/radio/intercom/map_preset/bearcat{ - pixel_x = -32 - }, -/obj/item/gun/projectile/shotgun/pump/combat{ - desc = "When words don't strike hard enough."; - name = "Solid Argument" - }, -/obj/structure/window/reinforced/full, -/obj/structure/table/marble, -/turf/simulated/floor/wood, -/area/ship/scrap/command/captain) -"bb" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 1; - level = 2 - }, -/turf/simulated/floor/wood, -/area/ship/scrap/command/captain) -"bc" = ( -/obj/structure/table/woodentable, -/obj/machinery/power/apc/derelict{ - cell_type = /obj/item/cell/standard; - dir = 4; - name = "Captain's Quarters APC" - }, -/obj/item/reagent_containers/food/drinks/glass2/coffeecup/one, -/obj/item/tank/oxygen, -/obj/item/clothing/mask/breath/emergency, -/obj/structure/cable/green, -/turf/simulated/floor/wood, -/area/ship/scrap/command/captain) -"bd" = ( -/obj/effect/wallframe_spawn/reinforced, -/obj/machinery/door/blast/regular{ - density = 0; - dir = 4; - icon_state = "pdoor0"; - id_tag = "scraplock"; - name = "External Blast Doors"; - opacity = 0 - }, -/obj/machinery/door/firedoor, -/turf/simulated/floor, -/area/ship/scrap/command/captain) -"be" = ( -/turf/simulated/wall/r_wall, -/area/ship/scrap/dock) -"bf" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/door/airlock/autoname/command/bearcat, -/turf/simulated/floor/tiled/dark, -/area/ship/scrap/dock) -"bg" = ( -/obj/effect/shuttle_landmark/automatic, -/turf/space, -/area/space) -"bh" = ( -/obj/effect/wallframe_spawn/reinforced, -/obj/machinery/door/blast/regular{ - density = 0; - dir = 4; - icon_state = "pdoor0"; - id_tag = "scraplock"; - name = "External Blast Doors"; - opacity = 0 - }, -/obj/machinery/door/firedoor, -/turf/simulated/floor, -/area/ship/scrap/dock) -"bj" = ( -/obj/machinery/atm{ - pixel_y = 32 - }, -/obj/machinery/alarm{ - dir = 4; - pixel_x = -24; - req_access = newlist() - }, -/turf/simulated/floor/tiled, -/area/ship/scrap/dock) -"bk" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled, -/area/ship/scrap/dock) -"bl" = ( -/obj/structure/cable/green{ - d2 = 8; - icon_state = "0-8" - }, -/obj/machinery/power/apc/derelict{ - dir = 1; - name = "Docking Area APC" - }, -/turf/simulated/floor/tiled, -/area/ship/scrap/dock) -"bm" = ( -/obj/effect/wallframe_spawn/reinforced, -/obj/machinery/door/blast/regular{ - density = 0; - icon_state = "pdoor0"; - id_tag = "scraplock"; - name = "External Blast Doors"; - opacity = 0 - }, -/turf/simulated/floor, -/area/ship/scrap/dock) -"bn" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 4 - }, -/obj/structure/sign/warning/vacuum{ - pixel_x = -35 - }, -/turf/simulated/floor/tiled, -/area/ship/scrap/dock) -"bo" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 - }, -/turf/simulated/floor/tiled, -/area/ship/scrap/dock) -"bp" = ( -/obj/machinery/door/airlock/autoname/bearcat, -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/ship/scrap/dock) -"bq" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/ship/scrap/dock) -"br" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/effect/floor_decal/plaque, -/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply, -/obj/effect/submap_landmark/joinable_submap/bearcat, -/turf/simulated/floor/tiled, -/area/ship/scrap/dock) -"bs" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/turf/simulated/floor/tiled, -/area/ship/scrap/dock) -"bt" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 8 - }, -/obj/structure/sign/warning/vacuum{ - pixel_x = 35 - }, -/turf/simulated/floor/tiled, -/area/ship/scrap/dock) -"bu" = ( -/obj/machinery/access_button/airlock_exterior{ - master_tag = "bearcat_dock_port"; - pixel_x = -18; - pixel_y = 20 - }, -/obj/machinery/door/airlock/external/bolted/cycling{ - id_tag = "dock_port_out" - }, -/obj/machinery/shield_diffuser, -/turf/simulated/floor/tiled, -/area/ship/scrap/dock) -"bv" = ( -/obj/machinery/atmospherics/unary/vent_pump/high_volume/airlock{ - dir = 4; - id_tag = "dock_port_pump" - }, -/obj/machinery/embedded_controller/radio/airlock/docking_port{ - id_tag = "bearcat_dock_port"; - pixel_y = 25; - tag_airpump = "dock_port_pump"; - tag_chamber_sensor = "dock_port_sensor"; - tag_exterior_door = "dock_port_out"; - tag_interior_door = "dock_port_in" - }, -/turf/simulated/floor/tiled, -/area/ship/scrap/dock) -"bw" = ( -/obj/machinery/light{ - dir = 1 - }, -/obj/machinery/airlock_sensor{ - id_tag = "dock_port_sensor"; - pixel_y = 28 - }, -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/ship/scrap/dock) -"bx" = ( -/obj/machinery/door/blast/regular{ - density = 0; - icon_state = "pdoor0"; - id_tag = "scraplock"; - name = "External Blast Doors"; - opacity = 0 - }, -/obj/machinery/access_button/airlock_interior{ - master_tag = "bearcat_dock_port"; - pixel_x = 12; - pixel_y = 20 - }, -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 4 - }, -/obj/machinery/door/airlock/external/bolted/cycling{ - id_tag = "dock_port_in" - }, -/turf/simulated/floor/tiled, -/area/ship/scrap/dock) -"by" = ( -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 10 - }, -/turf/simulated/floor/tiled, -/area/ship/scrap/dock) -"bz" = ( -/obj/machinery/light/small{ - dir = 4; - icon_state = "bulb1" - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 1; - level = 2 - }, -/turf/simulated/floor/tiled, -/area/ship/scrap/dock) -"bA" = ( -/obj/item/device/radio/intercom/map_preset/bearcat{ - pixel_x = -32 - }, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 4; - level = 2 - }, -/turf/simulated/floor/tiled, -/area/ship/scrap/dock) -"bB" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/ship/scrap/dock) -"bC" = ( -/obj/machinery/light_switch{ - pixel_x = 28 - }, -/obj/machinery/light_switch{ - pixel_x = 28 - }, -/obj/machinery/light, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 8 - }, -/turf/simulated/floor/tiled, -/area/ship/scrap/dock) -"bD" = ( -/obj/machinery/light/small{ - dir = 8; - icon_state = "bulb1" - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 1; - level = 2 - }, -/turf/simulated/floor/tiled, -/area/ship/scrap/dock) -"bE" = ( -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 6 - }, -/turf/simulated/floor/tiled, -/area/ship/scrap/dock) -"bF" = ( -/obj/machinery/door/blast/regular{ - density = 0; - icon_state = "pdoor0"; - id_tag = "scraplock"; - name = "External Blast Doors"; - opacity = 0 - }, -/obj/machinery/access_button/airlock_interior{ - master_tag = "bearcat_starboard_dock"; - pixel_x = -12; - pixel_y = 20 - }, -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 4 - }, -/obj/machinery/door/airlock/external/bolted/cycling{ - id_tag = "dock_star_in" - }, -/turf/simulated/floor/tiled, -/area/ship/scrap/dock) -"bG" = ( -/obj/machinery/light{ - dir = 1 - }, -/obj/machinery/airlock_sensor{ - id_tag = "dock_star_sensor"; - pixel_y = 28 - }, -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/ship/scrap/dock) -"bH" = ( -/obj/machinery/atmospherics/unary/vent_pump/high_volume/airlock{ - dir = 8; - id_tag = "dock_star_pump" - }, -/obj/machinery/embedded_controller/radio/airlock/docking_port{ - id_tag = "bearcat_starboard_dock"; - pixel_y = 25; - tag_airpump = "dock_star_pump"; - tag_chamber_sensor = "dock_star_sensor"; - tag_exterior_door = "dock_star_out"; - tag_interior_door = "dock_star_in" - }, -/turf/simulated/floor/tiled, -/area/ship/scrap/dock) -"bI" = ( -/obj/machinery/access_button/airlock_exterior{ - master_tag = "bearcat_starboard_dock"; - pixel_x = 18; - pixel_y = 20 - }, -/obj/machinery/door/airlock/external/bolted/cycling{ - id_tag = "dock_star_out" - }, -/obj/machinery/shield_diffuser, -/turf/simulated/floor/tiled, -/area/ship/scrap/dock) -"bK" = ( -/obj/effect/wallframe_spawn/reinforced, -/obj/machinery/door/blast/regular{ - density = 0; - icon_state = "pdoor0"; - id_tag = "scraplock"; - name = "External Blast Doors"; - opacity = 0 - }, -/obj/machinery/door/firedoor, -/turf/simulated/floor, -/area/ship/scrap/dock) -"bL" = ( -/obj/structure/window/reinforced{ - dir = 1 - }, -/obj/machinery/atmospherics/portables_connector{ - dir = 4 - }, -/obj/machinery/door/blast/regular{ - density = 0; - icon_state = "pdoor0"; - id_tag = "scraplock"; - name = "External Blast Doors"; - opacity = 0 - }, -/obj/machinery/portable_atmospherics/canister/empty/air, -/obj/structure/window/reinforced{ - dir = 8 - }, -/turf/simulated/floor, -/area/ship/scrap/dock) -"bM" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 9 - }, -/turf/simulated/floor/tiled, -/area/ship/scrap/dock) -"bN" = ( -/obj/item/device/radio/intercom/map_preset/bearcat{ - pixel_y = -32 - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/alarm{ - dir = 8; - pixel_x = 24; - req_access = newlist() - }, -/turf/simulated/floor/tiled, -/area/ship/scrap/dock) -"bO" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/door/airlock/autoname/bearcat, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/tiled, -/area/ship/scrap/dock) -"bP" = ( -/obj/item/device/radio/intercom/map_preset/bearcat{ - pixel_y = -32 - }, -/obj/machinery/alarm{ - dir = 4; - pixel_x = -24; - req_access = newlist() - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled, -/area/ship/scrap/dock) -"bQ" = ( -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 5 - }, -/turf/simulated/floor/tiled, -/area/ship/scrap/dock) -"bR" = ( -/obj/structure/window/reinforced{ - dir = 1 - }, -/obj/machinery/atmospherics/portables_connector{ - dir = 8 - }, -/obj/machinery/door/blast/regular{ - density = 0; - icon_state = "pdoor0"; - id_tag = "scraplock"; - name = "External Blast Doors"; - opacity = 0 - }, -/obj/machinery/portable_atmospherics/canister/empty/air, -/obj/structure/window/reinforced{ - dir = 4 - }, -/turf/simulated/floor, -/area/ship/scrap/dock) -"bS" = ( -/obj/structure/lattice, -/obj/effect/wallframe_spawn/reinforced, -/obj/machinery/door/blast/regular{ - density = 0; - icon_state = "pdoor0"; - id_tag = "scraplock"; - name = "External Blast Doors"; - opacity = 0 - }, -/turf/simulated/floor, -/area/ship/scrap/dock) -"bT" = ( -/obj/structure/sign/warning/docking_area, -/obj/effect/paint/brown, -/turf/simulated/wall/r_wall, -/area/ship/scrap/dock) -"bU" = ( -/obj/machinery/door/airlock/autoname/bearcat, -/obj/machinery/door/firedoor, -/turf/simulated/floor/tiled, -/area/ship/scrap/dock) -"bV" = ( -/obj/structure/lattice, -/obj/machinery/door/blast/regular{ - density = 0; - icon_state = "pdoor0"; - id_tag = "scraplock"; - name = "External Blast Doors"; - opacity = 0 - }, -/obj/effect/wallframe_spawn/reinforced, -/turf/simulated/floor, -/area/ship/scrap/dock) -"bW" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/tiled, -/area/ship/scrap/dock) -"bY" = ( -/obj/structure/lattice, -/turf/space, -/area/space) -"bZ" = ( -/obj/machinery/door/blast/regular{ - density = 0; - icon_state = "pdoor0"; - id_tag = "scraplock"; - name = "External Blast Doors"; - opacity = 0 - }, -/obj/effect/wallframe_spawn/reinforced, -/turf/simulated/floor, -/area/ship/scrap/crew/hallway/port) -"ca" = ( -/turf/simulated/floor/tiled, -/area/ship/scrap/crew/hallway/port) -"cc" = ( -/obj/machinery/door/blast/regular{ - density = 0; - icon_state = "pdoor0"; - id_tag = "scraplock"; - name = "External Blast Doors"; - opacity = 0 - }, -/obj/effect/wallframe_spawn/reinforced, -/turf/simulated/floor, -/area/ship/scrap/dock) -"ce" = ( -/obj/machinery/door/blast/regular{ - density = 0; - icon_state = "pdoor0"; - id_tag = "scraplock"; - name = "External Blast Doors"; - opacity = 0 - }, -/obj/effect/wallframe_spawn/reinforced, -/turf/simulated/floor, -/area/ship/scrap/crew/hallway/starboard) -"cf" = ( -/turf/simulated/floor/tiled, -/area/ship/scrap/crew/hallway/starboard) -"cg" = ( -/obj/effect/paint/brown, -/turf/simulated/wall/r_wall, -/area/ship/scrap/crew/hallway/starboard) -"ch" = ( -/obj/effect/paint/brown, -/turf/simulated/wall/r_wall, -/area/ship/scrap/crew/saloon) -"ci" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/door/airlock/autoname/bearcat, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/tiled, -/area/ship/scrap/crew/saloon) -"cj" = ( -/obj/random/maintenance, -/turf/simulated/floor/tiled, -/area/ship/scrap/crew/hallway/starboard) -"ck" = ( -/turf/simulated/wall, -/area/ship/scrap/crew/saloon) -"cl" = ( -/obj/machinery/vending/snack, -/obj/machinery/alarm{ - dir = 4; - pixel_x = -24; - req_access = newlist() - }, -/turf/simulated/floor/tiled, -/area/ship/scrap/crew/saloon) -"cm" = ( -/obj/machinery/power/apc/derelict{ - dir = 1; - name = "Crew Areas APC" - }, -/obj/structure/bed/chair, -/obj/structure/cable/green{ - d2 = 4; - icon_state = "0-4" - }, -/turf/simulated/floor/tiled, -/area/ship/scrap/crew/saloon) -"cn" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled, -/area/ship/scrap/crew/saloon) -"co" = ( -/obj/structure/bed/chair/wood, -/obj/item/deck/tarot, -/turf/simulated/floor/tiled, -/area/ship/scrap/crew/saloon) -"cp" = ( -/obj/machinery/vending/coffee, -/obj/effect/floor_decal/corner/beige{ - dir = 6 - }, -/turf/simulated/floor/tiled, -/area/ship/scrap/crew/saloon) -"cq" = ( -/turf/simulated/wall, -/area/ship/scrap/crew/toilets) -"cr" = ( -/turf/simulated/wall/r_wall, -/area/ship/scrap/crew/toilets) -"cs" = ( -/obj/effect/wallframe_spawn/reinforced, -/obj/machinery/door/blast/regular{ - density = 0; - dir = 4; - icon_state = "pdoor0"; - id_tag = "scraplock"; - name = "External Blast Doors"; - opacity = 0 - }, -/obj/machinery/door/firedoor, -/turf/simulated/floor, -/area/ship/scrap/crew/toilets) -"ct" = ( -/obj/machinery/light/small{ - dir = 4; - icon_state = "bulb1" - }, -/turf/simulated/floor/tiled, -/area/ship/scrap/crew/hallway/port) -"cu" = ( -/obj/effect/floor_decal/corner/beige{ - dir = 9 - }, -/obj/machinery/jukebox/old, -/turf/simulated/floor/tiled, -/area/ship/scrap/crew/saloon) -"cv" = ( -/turf/simulated/floor/tiled, -/area/ship/scrap/crew/saloon) -"cw" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/item/stool/padded, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 8 - }, -/turf/simulated/floor/tiled, -/area/ship/scrap/crew/saloon) -"cx" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 8 - }, -/turf/simulated/floor/tiled, -/area/ship/scrap/crew/saloon) -"cy" = ( -/obj/effect/floor_decal/corner/beige{ - dir = 6 - }, -/obj/structure/table/standard, -/obj/machinery/recharger, -/obj/structure/sign/poster{ - pixel_x = 32 - }, -/obj/item/trash/tray, -/obj/item/circular_saw, -/turf/simulated/floor/tiled, -/area/ship/scrap/crew/saloon) -"cz" = ( -/obj/machinery/light/small{ - dir = 8; - icon_state = "bulb1" - }, -/obj/item/crowbar, -/turf/simulated/floor/tiled, -/area/ship/scrap/crew/hallway/starboard) -"cA" = ( -/turf/simulated/wall/r_wall, -/area/ship/scrap/crew/cryo) -"cB" = ( -/turf/simulated/wall, -/area/ship/scrap/crew/cryo) -"cC" = ( -/obj/effect/wallframe_spawn/reinforced, -/obj/machinery/door/blast/regular{ - density = 0; - dir = 4; - icon_state = "pdoor0"; - id_tag = "scraplock"; - name = "External Blast Doors"; - opacity = 0 - }, -/obj/machinery/door/firedoor, -/turf/simulated/floor/tiled, -/area/ship/scrap/crew/cryo) -"cD" = ( -/obj/machinery/computer/cryopod, -/turf/simulated/wall, -/area/ship/scrap/crew/cryo) -"cF" = ( -/obj/machinery/light/small{ - dir = 8; - icon_state = "bulb1" - }, -/obj/structure/hygiene/toilet, -/obj/effect/decal/cleanable/dirt, -/obj/effect/floor_decal/corner/white/diagonal, -/obj/structure/window/reinforced{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/ship/scrap/crew/toilets) -"cH" = ( -/obj/machinery/door/airlock/autoname/bearcat, -/obj/machinery/door/firedoor, -/turf/simulated/floor/tiled, -/area/ship/scrap/crew/hallway/port) -"cI" = ( -/obj/effect/floor_decal/corner/beige{ - dir = 9 - }, -/obj/structure/reagent_dispensers/water_cooler, -/obj/machinery/light/small{ - dir = 8 - }, -/turf/simulated/floor/tiled, -/area/ship/scrap/crew/saloon) -"cJ" = ( -/obj/item/stool/padded, -/turf/simulated/floor/tiled, -/area/ship/scrap/crew/saloon) -"cK" = ( -/obj/structure/table/standard, -/obj/random/smokes, -/obj/item/material/ashtray/glass, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/item/board, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/tiled, -/area/ship/scrap/crew/saloon) -"cL" = ( -/obj/effect/floor_decal/corner/beige{ - dir = 6 - }, -/obj/machinery/light/small{ - dir = 4; - icon_state = "bulb1" - }, -/obj/structure/closet/emcloset, -/obj/random/voidhelmet, -/obj/random/voidhelmet, -/obj/random/voidhelmet, -/obj/random/voidsuit, -/obj/random/voidsuit, -/obj/random/voidsuit, -/turf/simulated/floor/tiled, -/area/ship/scrap/crew/saloon) -"cM" = ( -/obj/machinery/door/airlock/autoname/bearcat, -/obj/machinery/door/firedoor, -/turf/simulated/floor/tiled, -/area/ship/scrap/crew/hallway/starboard) -"cN" = ( -/obj/machinery/light/small{ - dir = 8; - icon_state = "bulb1" - }, -/obj/item/device/radio/intercom/map_preset/bearcat{ - pixel_x = -32 - }, -/obj/structure/closet/wardrobe/pjs, -/obj/structure/sign/poster{ - pixel_y = 32 - }, -/obj/item/clothing/mask/breath/emergency, -/obj/item/clothing/mask/breath/emergency, -/obj/item/clothing/mask/breath/emergency, -/obj/item/crowbar, -/obj/item/tank/oxygen, -/obj/item/tank/oxygen, -/obj/item/tank/oxygen, -/obj/machinery/light/small{ - dir = 8; - icon_state = "bulb1" - }, -/turf/simulated/floor/tiled/white, -/area/ship/scrap/crew/cryo) -"cO" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - level = 2 - }, -/obj/effect/submap_landmark/spawnpoint/crewman, -/turf/simulated/floor/tiled/white, -/area/ship/scrap/crew/cryo) -"cP" = ( -/obj/machinery/cryopod, -/obj/machinery/alarm{ - dir = 8; - pixel_x = 24; - req_access = newlist() - }, -/turf/simulated/floor/tiled/white, -/area/ship/scrap/crew/cryo) -"cQ" = ( -/obj/effect/wallframe_spawn/reinforced, -/obj/machinery/door/blast/regular{ - density = 0; - icon_state = "pdoor0"; - id_tag = "scraplock"; - name = "External Blast Doors"; - opacity = 0 - }, -/obj/machinery/door/firedoor, -/turf/simulated/floor, -/area/ship/scrap/crew/toilets) -"cR" = ( -/obj/machinery/door/window/westleft{ - base_state = "right"; - dir = 4; - icon_state = "right"; - name = "Reception Window"; - opacity = 1 - }, -/obj/machinery/light/small{ - dir = 8; - icon_state = "bulb1" - }, -/obj/item/towel, -/obj/effect/floor_decal/corner/white/diagonal, -/turf/simulated/floor/tiled, -/area/ship/scrap/crew/toilets) -"cS" = ( -/obj/machinery/door/window/westleft{ - base_state = "right"; - dir = 4; - icon_state = "right"; - name = "Reception Window"; - opacity = 1 - }, -/obj/effect/floor_decal/corner/white/diagonal, -/turf/simulated/floor/tiled, -/area/ship/scrap/crew/toilets) -"cT" = ( -/obj/structure/cable/green{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, -/obj/effect/floor_decal/corner/white/diagonal, -/turf/simulated/floor/tiled, -/area/ship/scrap/crew/toilets) -"cU" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/door/airlock/hatch{ - name = "Bathrooms"; - normalspeed = 0 - }, -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/ship/scrap/crew/toilets) -"cV" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/turf/simulated/floor/tiled, -/area/ship/scrap/crew/hallway/port) -"cW" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/door/airlock/autoname/bearcat, -/obj/machinery/door/firedoor, -/turf/simulated/floor/tiled, -/area/ship/scrap/crew/saloon) -"cX" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/floor_decal/corner/beige{ - dir = 9 - }, -/turf/simulated/floor/tiled, -/area/ship/scrap/crew/saloon) -"cY" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 4; - level = 2 - }, -/turf/simulated/floor/tiled, -/area/ship/scrap/crew/saloon) -"cZ" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/item/stool/padded, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/ship/scrap/crew/saloon) -"da" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled, -/area/ship/scrap/crew/saloon) -"db" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/floor_decal/corner/beige{ - dir = 6 - }, -/turf/simulated/floor/tiled, -/area/ship/scrap/crew/saloon) -"dc" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 - }, -/turf/simulated/floor/tiled, -/area/ship/scrap/crew/hallway/starboard) -"dd" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/door/airlock/hatch{ - name = "Cryo Storage"; - normalspeed = 0 - }, -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/ship/scrap/crew/cryo) -"de" = ( -/obj/structure/cable/green{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/ship/scrap/crew/cryo) -"df" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 - }, -/obj/effect/submap_landmark/spawnpoint/crewman, -/turf/simulated/floor/tiled/white, -/area/ship/scrap/crew/cryo) -"dg" = ( -/obj/machinery/cryopod, -/turf/simulated/floor/tiled/white, -/area/ship/scrap/crew/cryo) -"dh" = ( -/obj/effect/wallframe_spawn/reinforced, -/obj/machinery/door/blast/regular{ - density = 0; - icon_state = "pdoor0"; - id_tag = "scraplock"; - name = "External Blast Doors"; - opacity = 0 - }, -/obj/machinery/door/firedoor, -/turf/simulated/floor, -/area/ship/scrap/crew/cryo) -"di" = ( -/obj/structure/hygiene/shower{ - dir = 4 - }, -/obj/structure/curtain/open/shower, -/obj/effect/floor_decal/corner/white/diagonal, -/obj/structure/window/reinforced{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/ship/scrap/crew/toilets) -"dj" = ( -/obj/structure/hygiene/toilet{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/obj/effect/floor_decal/corner/white/diagonal, -/obj/structure/window/reinforced{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/ship/scrap/crew/toilets) -"dk" = ( -/obj/structure/hygiene/toilet{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/obj/structure/cable/green, -/obj/machinery/power/apc/derelict{ - dir = 4; - name = "Bathrooms APC" - }, -/obj/machinery/light_switch{ - pixel_y = -25 - }, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 1 - }, -/obj/effect/floor_decal/corner/white/diagonal, -/turf/simulated/floor/tiled, -/area/ship/scrap/crew/toilets) -"dl" = ( -/obj/machinery/light/small{ - dir = 8; - icon_state = "bulb1" - }, -/obj/effect/decal/cleanable/dirt, -/obj/structure/disposalpipe/segment{ - dir = 4; - icon_state = "conpipe-c" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/tiled, -/area/ship/scrap/crew/hallway/port) -"dm" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/simulated/wall, -/area/ship/scrap/crew/saloon) -"dn" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/vending/cigarette, -/obj/effect/floor_decal/corner/beige{ - dir = 9 - }, -/turf/simulated/floor/tiled, -/area/ship/scrap/crew/saloon) -"do" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/bed/chair/comfy/brown{ - dir = 1 - }, -/turf/simulated/floor/tiled, -/area/ship/scrap/crew/saloon) -"dp" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/tiled, -/area/ship/scrap/crew/saloon) -"dq" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/item/device/radio/intercom/map_preset/bearcat{ - pixel_y = -32 - }, -/obj/structure/ladder, -/turf/simulated/floor/tiled, -/area/ship/scrap/crew/saloon) -"dr" = ( -/obj/machinery/disposal, -/obj/structure/disposalpipe/trunk{ - dir = 8 - }, -/obj/machinery/light_switch{ - pixel_x = 28 - }, -/obj/effect/floor_decal/corner/beige{ - dir = 6 - }, -/turf/simulated/floor/tiled, -/area/ship/scrap/crew/saloon) -"ds" = ( -/obj/machinery/light/small{ - dir = 4; - icon_state = "bulb1" - }, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/tiled, -/area/ship/scrap/crew/hallway/starboard) -"dt" = ( -/obj/structure/cable/green, -/obj/machinery/power/apc/derelict{ - name = "Dorms APC" - }, -/obj/machinery/light_switch{ - pixel_x = -25 - }, -/obj/structure/closet/wardrobe/mixed, -/obj/item/storage/backpack/dufflebag/med, -/obj/item/storage/belt/utility/full, -/turf/simulated/floor/tiled/white, -/area/ship/scrap/crew/cryo) -"du" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 1 - }, -/obj/effect/submap_landmark/spawnpoint/crewman, -/turf/simulated/floor/tiled/white, -/area/ship/scrap/crew/cryo) -"dv" = ( -/turf/simulated/wall/r_wall, -/area/ship/scrap/crew/kitchen) -"dw" = ( -/turf/simulated/wall, -/area/ship/scrap/crew/kitchen) -"dx" = ( -/obj/structure/disposalpipe/segment, -/obj/machinery/light_switch{ - pixel_x = -25 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/tiled, -/area/ship/scrap/crew/hallway/port) -"dy" = ( -/turf/simulated/wall, -/area/ship/scrap/cargo) -"dz" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/door/airlock/autoname/bearcat, -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/tiled, -/area/ship/scrap/cargo) -"dA" = ( -/obj/machinery/light_switch{ - pixel_x = -25 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/sign/deck/first{ - pixel_x = 32 - }, -/turf/simulated/floor/tiled, -/area/ship/scrap/crew/hallway/starboard) -"dB" = ( -/turf/simulated/wall, -/area/ship/scrap/crew/medbay) -"dC" = ( -/obj/machinery/door/airlock/autoname/bearcat, -/turf/simulated/floor/tiled/white, -/area/ship/scrap/crew/medbay) -"dD" = ( -/turf/simulated/wall/r_wall, -/area/ship/scrap/crew/medbay) -"dE" = ( -/obj/machinery/reagentgrinder, -/obj/item/reagent_containers/glass/beaker/large, -/obj/effect/floor_decal/corner/red/diagonal, -/obj/structure/sign/monkey_painting{ - pixel_y = 32 - }, -/turf/simulated/floor/tiled, -/area/ship/scrap/crew/kitchen) -"dF" = ( -/obj/item/device/radio/intercom/map_preset/bearcat{ - pixel_y = 32 - }, -/obj/machinery/atmospherics/unary/vent_pump/on{ - level = 2 - }, -/obj/effect/floor_decal/corner/red/diagonal, -/obj/machinery/vending/dinnerware, -/turf/simulated/floor/tiled, -/area/ship/scrap/crew/kitchen) -"dG" = ( -/obj/structure/closet/secure_closet/freezer/fridge/bearcat, -/obj/machinery/light/small{ - dir = 4; - icon_state = "bulb1" - }, -/obj/effect/floor_decal/corner/red/diagonal, -/obj/random/drinkbottle, -/turf/simulated/floor/tiled, -/area/ship/scrap/crew/kitchen) -"dH" = ( -/obj/structure/disposalpipe/segment, -/obj/machinery/power/apc/derelict{ - dir = 4; - name = "Crew Deck APC" - }, -/obj/structure/cable/green{ - d2 = 2; - icon_state = "0-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/sign/directions/engineering{ - pixel_x = -32 - }, -/turf/simulated/floor/tiled, -/area/ship/scrap/crew/hallway/port) -"dI" = ( -/obj/structure/closet/crate, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/effect/floor_decal/corner/beige{ - dir = 9 - }, -/obj/random/shoes, -/obj/random/shoes, -/obj/random/hat, -/obj/random/hat, -/obj/random/masks, -/obj/machinery/light/small{ - dir = 1; - icon_state = "bulb1" - }, -/turf/simulated/floor/tiled, -/area/ship/scrap/cargo) -"dJ" = ( -/obj/item/device/radio/intercom/map_preset/bearcat{ - pixel_y = 32 - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled, -/area/ship/scrap/cargo) -"dK" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/tiled, -/area/ship/scrap/cargo) -"dL" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/portable_atmospherics/canister/air, -/turf/simulated/floor/tiled, -/area/ship/scrap/cargo) -"dM" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/effect/floor_decal/corner/beige{ - dir = 6 - }, -/obj/machinery/portable_atmospherics/canister/air, -/obj/machinery/light/small{ - dir = 1; - icon_state = "bulb1" - }, -/turf/simulated/floor/tiled, -/area/ship/scrap/cargo) -"dN" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/sign/directions/engineering{ - pixel_x = -32 - }, -/turf/simulated/floor, -/area/ship/scrap/crew/hallway/starboard) -"dO" = ( -/obj/machinery/sleeper, -/obj/structure/sign/warning/nosmoking_2{ - pixel_y = 28 - }, -/obj/machinery/light/small{ - dir = 8; - icon_state = "bulb1" - }, -/turf/simulated/floor/tiled/white, -/area/ship/scrap/crew/medbay) -"dP" = ( -/obj/item/roller, -/turf/simulated/floor/tiled/white, -/area/ship/scrap/crew/medbay) -"dQ" = ( -/obj/item/device/radio/intercom/map_preset/bearcat{ - pixel_y = 32 - }, -/obj/item/bedsheet/medical, -/obj/structure/curtain/open/privacy, -/obj/structure/bed/padded, -/obj/item/clothing/accessory/stethoscope, -/obj/machinery/alarm{ - dir = 8; - pixel_x = 24; - req_access = newlist() - }, -/turf/simulated/floor/tiled/white, -/area/ship/scrap/crew/medbay) -"dR" = ( -/obj/effect/paint/brown, -/turf/simulated/wall/r_wall, -/area/ship/scrap/maintenance/engine/port) -"dS" = ( -/obj/effect/wallframe_spawn/reinforced, -/obj/machinery/door/blast/regular{ - density = 0; - icon_state = "pdoor0"; - id_tag = "scraplock"; - name = "External Blast Doors"; - opacity = 0 - }, -/obj/machinery/door/firedoor, -/turf/simulated/floor, -/area/ship/scrap/crew/kitchen) -"dT" = ( -/obj/structure/table/standard, -/obj/effect/floor_decal/corner/red/diagonal, -/obj/item/reagent_containers/glass/beaker{ - pixel_x = 5 - }, -/obj/item/book/manual/chef_recipes, -/obj/item/reagent_containers/food/condiment/small/peppermill{ - pixel_x = 3 - }, -/obj/item/reagent_containers/food/condiment/enzyme, -/obj/item/reagent_containers/glass/rag, -/turf/simulated/floor/tiled, -/area/ship/scrap/crew/kitchen) -"dU" = ( -/obj/item/stool/padded, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/effect/floor_decal/corner/red/diagonal, -/turf/simulated/floor/tiled, -/area/ship/scrap/crew/kitchen) -"dV" = ( -/obj/structure/cable/green{ - d2 = 2; - icon_state = "0-2" - }, -/obj/machinery/power/apc/derelict{ - dir = 4; - name = "Galley APC" - }, -/obj/effect/floor_decal/corner/red/diagonal, -/obj/structure/hygiene/sink{ - dir = 4; - pixel_x = 11 - }, -/turf/simulated/floor/tiled, -/area/ship/scrap/crew/kitchen) -"dW" = ( -/obj/structure/disposalpipe/segment, -/obj/machinery/light/small{ - dir = 8; - icon_state = "bulb1" - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/tiled, -/area/ship/scrap/crew/hallway/port) -"dX" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/alarm{ - dir = 4; - pixel_x = -24; - req_access = newlist() - }, -/obj/effect/floor_decal/corner/beige{ - dir = 9 - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled, -/area/ship/scrap/cargo) -"dY" = ( -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/structure/closet/crate/hydroponics/prespawned, -/turf/simulated/floor/tiled, -/area/ship/scrap/cargo) -"dZ" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 8 - }, -/turf/simulated/floor/tiled, -/area/ship/scrap/cargo) -"ea" = ( -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 8 - }, -/obj/item/stool/padded, -/turf/simulated/floor/tiled, -/area/ship/scrap/cargo) -"eb" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/effect/floor_decal/corner/beige{ - dir = 6 - }, -/obj/machinery/portable_atmospherics/canister/air, -/turf/simulated/floor/tiled, -/area/ship/scrap/cargo) -"ec" = ( -/obj/machinery/light/small{ - dir = 4; - icon_state = "bulb1" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/ladder, -/turf/simulated/floor, -/area/ship/scrap/crew/hallway/starboard) -"ed" = ( -/obj/effect/paint/brown, -/turf/simulated/floor/airless, -/area/ship/scrap/comms) -"ee" = ( -/obj/item/stool/padded, -/obj/structure/hygiene/sink{ - dir = 8; - pixel_x = -13 - }, -/obj/machinery/power/apc/derelict{ - cell_type = /obj/item/cell/standard; - dir = 8; - name = "Medical Bay APC" - }, -/obj/structure/cable/green{ - d2 = 2; - icon_state = "0-2" - }, -/turf/simulated/floor/tiled/white, -/area/ship/scrap/crew/medbay) -"ef" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - level = 2 - }, -/turf/simulated/floor/tiled/white, -/area/ship/scrap/crew/medbay) -"eg" = ( -/obj/structure/iv_drip, -/obj/structure/closet/medical_wall{ - name = "pill cabinet"; - pixel_x = 26 - }, -/obj/item/storage/pill_bottle/antidexafen, -/obj/item/storage/pill_bottle/tramadol, -/obj/item/storage/pill_bottle/antitox, -/obj/item/storage/pill_bottle/kelotane, -/turf/simulated/floor/tiled/white, -/area/ship/scrap/crew/medbay) -"eh" = ( -/obj/effect/paint/brown, -/turf/simulated/wall/r_wall, -/area/ship/scrap/maintenance/engine/starboard) -"ei" = ( -/obj/effect/wallframe_spawn/reinforced, -/obj/machinery/door/blast/regular{ - density = 0; - icon_state = "pdoor0"; - id_tag = "scraplock"; - name = "External Blast Doors"; - opacity = 0 - }, -/obj/machinery/door/firedoor, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor, -/area/ship/scrap/crew/kitchen) -"ej" = ( -/obj/structure/table/standard, -/obj/machinery/light/small{ - dir = 8; - icon_state = "bulb1" - }, -/obj/random/donkpocket_box, -/obj/effect/floor_decal/corner/red/diagonal, -/obj/item/material/kitchen/rollingpin, -/obj/item/reagent_containers/food/condiment/small/saltshaker{ - pixel_x = -3 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled, -/area/ship/scrap/crew/kitchen) -"ek" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/obj/effect/floor_decal/corner/red/diagonal, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled, -/area/ship/scrap/crew/kitchen) -"el" = ( -/obj/structure/disposalpipe/segment{ - dir = 4; - icon_state = "conpipe-c" - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/effect/floor_decal/corner/red/diagonal, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled, -/area/ship/scrap/crew/kitchen) -"em" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/door/airlock/autoname/bearcat, -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/ship/scrap/crew/kitchen) -"en" = ( -/obj/structure/disposalpipe/junction, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply, -/turf/simulated/floor/tiled, -/area/ship/scrap/crew/hallway/port) -"eo" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/door/airlock/autoname/bearcat, -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/ship/scrap/cargo) -"ep" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/floor_decal/corner/beige{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/ship/scrap/cargo) -"eq" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/ship/scrap/cargo) -"er" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply, -/turf/simulated/floor/tiled, -/area/ship/scrap/cargo) -"es" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/ship/scrap/cargo) -"et" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/effect/floor_decal/corner/beige{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/ship/scrap/cargo) -"eu" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply, -/obj/structure/cable/green{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor, -/area/ship/scrap/crew/hallway/starboard) -"ev" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/door/airlock/hatch{ - name = "Medical Bay"; - normalspeed = 0 - }, -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/ship/scrap/crew/medbay) -"ew" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/turf/simulated/floor/tiled/white, -/area/ship/scrap/crew/medbay) -"ex" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 - }, -/obj/structure/bed/chair/office/light, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/white, -/area/ship/scrap/crew/medbay) -"ey" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/table/standard, -/obj/item/glass_extra/straw, -/obj/item/toy/therapy_blue, -/obj/item/reagent_containers/spray/cleaner, -/turf/simulated/floor/tiled/white, -/area/ship/scrap/crew/medbay) -"ez" = ( -/obj/effect/wallframe_spawn/reinforced, -/obj/machinery/door/blast/regular{ - density = 0; - icon_state = "pdoor0"; - id_tag = "scraplock"; - name = "External Blast Doors"; - opacity = 0 - }, -/obj/machinery/door/firedoor, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor, -/area/ship/scrap/crew/medbay) -"eA" = ( -/obj/item/storage/pill_bottle/happy, -/obj/machinery/power/apc/derelict{ - dir = 1 - }, -/obj/structure/cable/green{ - d2 = 4; - icon_state = "0-4" - }, -/turf/simulated/floor/airless, -/area/ship/scrap/maintenance/engine/port) -"eB" = ( -/obj/machinery/light/small{ - dir = 1; - icon_state = "bulb1" - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/fuel{ - dir = 6 - }, -/obj/machinery/meter, -/turf/simulated/floor/airless, -/area/ship/scrap/maintenance/engine/port) -"eC" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/fuel{ - dir = 4 - }, -/obj/machinery/door/airlock/autoname/engineering/bearcat, -/turf/simulated/floor/airless, -/area/ship/scrap/maintenance/engine/port) -"eD" = ( -/obj/item/screwdriver, -/obj/structure/cable/green{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/fuel{ - dir = 10 - }, -/turf/simulated/floor/airless, -/area/ship/scrap/maintenance/engine/port) -"eE" = ( -/obj/structure/table/standard, -/obj/machinery/microwave, -/obj/machinery/light/small{ - dir = 8; - icon_state = "bulb1" - }, -/obj/effect/floor_decal/corner/red/diagonal, -/obj/machinery/alarm{ - dir = 4; - pixel_x = -24; - req_access = newlist() - }, -/turf/simulated/floor/tiled, -/area/ship/scrap/crew/kitchen) -"eF" = ( -/obj/structure/closet/secure_closet/freezer/meat/bearcat, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 1 - }, -/obj/effect/floor_decal/corner/red/diagonal, -/obj/item/reagent_containers/ivbag/blood/OMinus, -/obj/item/reagent_containers/ivbag/blood/OMinus, -/turf/simulated/floor/tiled, -/area/ship/scrap/crew/kitchen) -"eG" = ( -/obj/machinery/disposal, -/obj/structure/disposalpipe/trunk{ - dir = 1 - }, -/obj/machinery/light_switch{ - pixel_x = 28 - }, -/obj/effect/floor_decal/corner/red/diagonal, -/turf/simulated/floor/tiled, -/area/ship/scrap/crew/kitchen) -"eH" = ( -/obj/structure/disposalpipe/segment, -/obj/machinery/door/airlock/autoname/bearcat, -/turf/simulated/floor/tiled, -/area/ship/scrap/crew/hallway/port) -"eI" = ( -/obj/machinery/light_switch{ - pixel_x = -25 - }, -/obj/effect/floor_decal/corner/beige{ - dir = 9 - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled, -/area/ship/scrap/cargo) -"eJ" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 4; - level = 2 - }, -/turf/simulated/floor/tiled, -/area/ship/scrap/cargo) -"eK" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled, -/area/ship/scrap/cargo) -"eL" = ( -/obj/structure/closet/crate, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/random/storage, -/obj/random/bomb_supply, -/obj/random/bomb_supply, -/obj/random/bomb_supply, -/obj/item/storage/box/syringes, -/turf/simulated/floor/tiled, -/area/ship/scrap/cargo) -"eM" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/cable/green, -/obj/machinery/power/apc/derelict{ - dir = 4; - name = "Cargo Hold APC" - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/effect/floor_decal/corner/beige{ - dir = 6 - }, -/turf/simulated/floor/tiled, -/area/ship/scrap/cargo) -"eN" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/door/airlock/autoname/bearcat, -/turf/simulated/floor, -/area/ship/scrap/crew/hallway/starboard) -"eO" = ( -/obj/structure/table/standard, -/obj/machinery/light_switch{ - pixel_x = -25 - }, -/obj/structure/closet/medical_wall/filled{ - pixel_y = -32 - }, -/obj/item/tape_roll, -/obj/item/retractor, -/obj/item/scalpel, -/turf/simulated/floor/tiled/white, -/area/ship/scrap/crew/medbay) -"eP" = ( -/obj/machinery/light, -/obj/machinery/optable, -/obj/item/reagent_containers/food/drinks/glass2/coffeecup/britcup, -/obj/item/reagent_containers/glass/rag, -/turf/simulated/floor/tiled/white, -/area/ship/scrap/crew/medbay) -"eQ" = ( -/obj/structure/table/standard, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 1 - }, -/obj/structure/sign/warning/nosmoking_1{ - pixel_y = -32 - }, -/obj/structure/sign/goldenplaque/medical{ - pixel_x = 32 - }, -/obj/item/storage/firstaid/adv, -/obj/random/medical, -/obj/item/stack/medical/advanced/bruise_pack, -/obj/item/reagent_containers/syringe/antiviral, -/obj/item/device/scanner/health, -/obj/machinery/light/small{ - dir = 4; - icon_state = "bulb1" - }, -/turf/simulated/floor/tiled/white, -/area/ship/scrap/crew/medbay) -"eR" = ( -/obj/item/device/radio/map_preset/bearcat, -/obj/structure/cable/green{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/fuel{ - dir = 6 - }, -/turf/simulated/floor/airless, -/area/ship/scrap/maintenance/engine/starboard) -"eS" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/fuel{ - dir = 4 - }, -/obj/machinery/door/airlock/autoname/engineering/bearcat, -/turf/simulated/floor, -/area/ship/scrap/maintenance/engine/starboard) -"eT" = ( -/obj/machinery/light/small{ - dir = 1; - icon_state = "bulb1" - }, -/obj/item/material/coin/gold, -/obj/item/material/coin/silver, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/fuel{ - dir = 10 - }, -/obj/machinery/meter, -/turf/simulated/floor/airless, -/area/ship/scrap/maintenance/engine/starboard) -"eU" = ( -/obj/machinery/power/apc/derelict{ - dir = 1 - }, -/obj/structure/cable/green{ - d2 = 8; - icon_state = "0-8" - }, -/turf/simulated/floor/airless, -/area/ship/scrap/maintenance/engine/starboard) -"eV" = ( -/obj/effect/floor_decal/industrial/warning, -/obj/machinery/atmospherics/pipe/simple/hidden/fuel{ - dir = 6 - }, -/turf/simulated/floor/airless, -/area/ship/scrap/maintenance/engine/port) -"eW" = ( -/obj/effect/floor_decal/industrial/warning, -/obj/machinery/atmospherics/pipe/manifold/visible/fuel{ - dir = 4 - }, -/turf/simulated/floor/airless, -/area/ship/scrap/maintenance/engine/port) -"eX" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/fuel, -/obj/structure/lattice, -/turf/space, -/area/ship/scrap/maintenance/engine/port) -"eY" = ( -/turf/simulated/wall, -/area/ship/scrap/crew/wash) -"eZ" = ( -/obj/structure/disposalpipe/segment, -/obj/machinery/alarm{ - dir = 4; - pixel_x = -24; - req_access = newlist() - }, -/turf/simulated/floor/tiled, -/area/ship/scrap/crew/hallway/port) -"fa" = ( -/obj/effect/floor_decal/industrial/warning, -/obj/effect/floor_decal/corner/beige{ - dir = 9 - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/light/small{ - dir = 8; - icon_state = "bulb1" - }, -/obj/structure/railing/mapped, -/turf/simulated/floor/tiled, -/area/ship/scrap/cargo) -"fb" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/effect/floor_decal/industrial/warning, -/obj/machinery/computer/shuttle_control/lift, -/turf/simulated/floor/tiled, -/area/ship/scrap/cargo) -"fc" = ( -/obj/effect/floor_decal/industrial/warning, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/turf/simulated/floor/tiled, -/area/ship/scrap/cargo) -"fd" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/effect/floor_decal/industrial/warning, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/railing/mapped, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled, -/area/ship/scrap/cargo) -"fe" = ( -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/effect/floor_decal/corner/beige{ - dir = 6 - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 8; - icon_state = "warningcorner" - }, -/turf/simulated/floor/tiled, -/area/ship/scrap/cargo) -"ff" = ( -/obj/effect/decal/cleanable/cobweb, -/obj/effect/decal/cleanable/cobweb2, -/obj/structure/lattice, -/obj/machinery/alarm{ - dir = 8; - pixel_x = 24; - req_access = newlist() - }, -/obj/machinery/atmospherics/pipe/zpipe/down/scrubbers, -/obj/machinery/atmospherics/pipe/zpipe/down/supply, -/obj/structure/cable/green{ - d1 = 31; - icon_state = "32-1" - }, -/turf/simulated/open, -/area/ship/scrap/crew/hallway/starboard) -"fg" = ( -/obj/structure/lattice, -/obj/machinery/atmospherics/pipe/simple/hidden/fuel, -/turf/space, -/area/ship/scrap/maintenance/engine/starboard) -"fh" = ( -/obj/effect/paint/brown, -/turf/simulated/wall, -/area/ship/scrap/maintenance/engine/starboard) -"fi" = ( -/obj/effect/floor_decal/industrial/warning, -/obj/machinery/atmospherics/pipe/manifold/visible/fuel{ - dir = 8 - }, -/turf/simulated/floor/airless, -/area/ship/scrap/maintenance/engine/starboard) -"fj" = ( -/obj/effect/floor_decal/industrial/warning, -/obj/machinery/atmospherics/pipe/simple/hidden/fuel{ - dir = 10 - }, -/turf/simulated/floor/airless, -/area/ship/scrap/maintenance/engine/starboard) -"fk" = ( -/obj/effect/floor_decal/industrial/warning, -/obj/structure/sign/warning/hot_exhaust, -/obj/effect/paint/red, -/turf/simulated/wall/r_wall, -/area/ship/scrap/maintenance/engine/port) -"fl" = ( -/obj/machinery/atmospherics/unary/engine{ - dir = 1 - }, -/turf/simulated/floor/airless, -/area/ship/scrap/maintenance/engine/port) -"fm" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/fuel, -/turf/simulated/floor, -/area/ship/scrap/maintenance/engine/starboard) -"fo" = ( -/obj/machinery/alarm{ - dir = 4; - pixel_x = -24; - req_access = newlist() - }, -/obj/machinery/atmospherics/pipe/simple/hidden/fuel{ - dir = 6 - }, -/obj/structure/undies_wardrobe, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 4 - }, -/obj/effect/floor_decal/corner/white/diagonal, -/turf/simulated/floor/tiled, -/area/ship/scrap/crew/wash) -"fp" = ( -/obj/machinery/light/small{ - dir = 1; - icon_state = "bulb1" - }, -/obj/item/device/radio/intercom/map_preset/bearcat{ - pixel_y = 32 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/fuel{ - dir = 4 - }, -/obj/effect/floor_decal/corner/white/diagonal, -/turf/simulated/floor/tiled, -/area/ship/scrap/crew/wash) -"fq" = ( -/obj/structure/disposalpipe/segment{ - dir = 4; - icon_state = "conpipe-c" - }, -/obj/machinery/power/apc/derelict{ - dir = 1; - name = "Washroom APC" - }, -/obj/structure/cable/green{ - d2 = 4; - icon_state = "0-4" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/fuel{ - dir = 4 - }, -/obj/effect/floor_decal/corner/white/diagonal, -/turf/simulated/floor/tiled, -/area/ship/scrap/crew/wash) -"fr" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/door/airlock/hatch{ - name = "Laundry"; - normalspeed = 0 - }, -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/fuel{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/ship/scrap/crew/wash) -"fs" = ( -/obj/machinery/light{ - dir = 4; - icon_state = "tube1" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/structure/disposalpipe/junction, -/obj/machinery/atmospherics/pipe/simple/hidden/fuel{ - dir = 10 - }, -/turf/simulated/floor/tiled, -/area/ship/scrap/crew/hallway/port) -"ft" = ( -/turf/simulated/open, -/area/ship/scrap/cargo) -"fu" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 8; - icon_state = "warningcorner" - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 8; - icon_state = "warning" - }, -/obj/structure/railing/mapped{ - dir = 8 - }, -/obj/structure/sign/warning/fall{ - pixel_x = 32 - }, -/turf/simulated/floor/tiled, -/area/ship/scrap/cargo) -"fv" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/power/apc/derelict{ - dir = 4; - name = "Crew Deck APC" - }, -/obj/structure/cable/green{ - d2 = 2; - icon_state = "0-2" - }, -/turf/simulated/floor, -/area/ship/scrap/crew/hallway/starboard) -"fw" = ( -/turf/simulated/wall, -/area/ship/scrap/tcomms) -"fx" = ( -/obj/machinery/telecomms/broadcaster/map_preset/bearcat, -/obj/machinery/atmospherics/unary/vent_pump/on, -/turf/simulated/floor, -/area/ship/scrap/tcomms) -"fy" = ( -/obj/machinery/light_switch{ - pixel_y = 25 - }, -/obj/machinery/telecomms/bus/map_preset/bearcat, -/turf/simulated/floor, -/area/ship/scrap/tcomms) -"fz" = ( -/obj/effect/decal/cleanable/cobweb2, -/obj/machinery/telecomms/hub/map_preset/bearcat, -/turf/simulated/floor, -/area/ship/scrap/tcomms) -"fA" = ( -/obj/effect/paint/brown, -/turf/simulated/wall/r_wall, -/area/ship/scrap/tcomms) -"fB" = ( -/obj/effect/floor_decal/industrial/warning, -/obj/structure/sign/warning/hot_exhaust, -/obj/effect/paint/red, -/turf/simulated/wall, -/area/ship/scrap/maintenance/engine/starboard) -"fC" = ( -/obj/machinery/atmospherics/unary/engine{ - dir = 1 - }, -/turf/simulated/floor/airless, -/area/ship/scrap/maintenance/engine/starboard) -"fD" = ( -/obj/effect/floor_decal/industrial/warning, -/obj/structure/sign/warning/hot_exhaust, -/obj/effect/paint/red, -/turf/simulated/wall/r_wall, -/area/ship/scrap/maintenance/engine/starboard) -"fE" = ( -/turf/simulated/floor/reinforced/airless, -/area/ship/scrap/command/captain) -"fF" = ( -/obj/structure/lattice, -/turf/space, -/area/ship/scrap/maintenance/engine/port) -"fG" = ( -/obj/structure/lattice, -/obj/machinery/atmospherics/pipe/simple/hidden/fuel{ - dir = 5 - }, -/turf/space, -/area/ship/scrap/maintenance/engine/port) -"fH" = ( -/obj/effect/wallframe_spawn/reinforced, -/obj/machinery/door/blast/regular{ - density = 0; - icon_state = "pdoor0"; - id_tag = "scraplock"; - name = "External Blast Doors"; - opacity = 0 - }, -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/simple/hidden/fuel{ - dir = 4 - }, -/turf/simulated/floor, -/area/ship/scrap/crew/wash) -"fI" = ( -/obj/structure/closet, -/obj/random/clothing, -/obj/random/clothing, -/obj/random/clothing, -/obj/random/clothing, -/obj/machinery/atmospherics/pipe/simple/hidden/fuel{ - dir = 9 - }, -/obj/item/storage/backpack/dufflebag, -/obj/effect/floor_decal/corner/white/diagonal, -/turf/simulated/floor/tiled, -/area/ship/scrap/crew/wash) -"fJ" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/effect/floor_decal/corner/white/diagonal, -/turf/simulated/floor/tiled, -/area/ship/scrap/crew/wash) -"fK" = ( -/obj/machinery/disposal, -/obj/structure/disposalpipe/trunk{ - dir = 1 - }, -/obj/machinery/light_switch{ - pixel_x = 28 - }, -/obj/effect/floor_decal/corner/white/diagonal, -/turf/simulated/floor/tiled, -/area/ship/scrap/crew/wash) -"fL" = ( -/obj/machinery/light/small{ - dir = 8; - icon_state = "bulb1" - }, -/obj/structure/disposalpipe/segment, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/sign/directions/medical{ - dir = 4; - pixel_x = 32; - pixel_z = -4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/fuel, -/turf/simulated/floor/tiled, -/area/ship/scrap/crew/hallway/port) -"fM" = ( -/obj/effect/shuttle_landmark/lift/top, -/turf/simulated/open, -/area/ship/scrap/cargo) -"fN" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 8; - icon_state = "warning" - }, -/obj/machinery/light/small{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/ship/scrap/cargo) -"fO" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/fuel{ - dir = 6 - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor, -/area/ship/scrap/crew/hallway/starboard) -"fP" = ( -/obj/machinery/door/airlock/autoname/bearcat, -/obj/machinery/atmospherics/pipe/simple/hidden/fuel{ - dir = 4 - }, -/obj/machinery/door/firedoor, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor, -/area/ship/scrap/tcomms) -"fQ" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/fuel{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/turf/simulated/floor, -/area/ship/scrap/tcomms) -"fR" = ( -/obj/effect/decal/cleanable/generic, -/obj/machinery/atmospherics/pipe/simple/hidden/fuel{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/turf/simulated/floor, -/area/ship/scrap/tcomms) -"fS" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/fuel{ - dir = 4 - }, -/turf/simulated/floor, -/area/ship/scrap/tcomms) -"fT" = ( -/obj/effect/wallframe_spawn/reinforced, -/obj/machinery/door/blast/regular{ - density = 0; - icon_state = "pdoor0"; - id_tag = "scraplock"; - name = "External Blast Doors"; - opacity = 0 - }, -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/simple/hidden/fuel{ - dir = 4 - }, -/turf/simulated/floor, -/area/ship/scrap/tcomms) -"fU" = ( -/obj/structure/lattice, -/obj/machinery/atmospherics/pipe/simple/hidden/fuel{ - dir = 9 - }, -/turf/space, -/area/ship/scrap/maintenance/engine/starboard) -"fV" = ( -/obj/structure/closet, -/obj/random/clothing, -/obj/random/clothing, -/obj/random/clothing, -/obj/random/clothing, -/obj/item/reagent_containers/glass/rag, -/obj/item/clothingbag/rubbermask, -/obj/effect/floor_decal/corner/white/diagonal, -/turf/simulated/floor/tiled, -/area/ship/scrap/crew/wash) -"fW" = ( -/obj/machinery/washing_machine, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 1; - level = 2 - }, -/obj/effect/floor_decal/corner/white/diagonal, -/turf/simulated/floor/tiled, -/area/ship/scrap/crew/wash) -"fX" = ( -/obj/structure/table/standard, -/obj/machinery/light/small, -/obj/item/reagent_containers/spray/cleaner, -/obj/item/storage/laundry_basket, -/obj/effect/floor_decal/corner/white/diagonal, -/obj/item/cell/high, -/turf/simulated/floor/tiled, -/area/ship/scrap/crew/wash) -"fY" = ( -/obj/structure/disposalpipe/segment, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/fuel, -/turf/simulated/floor/tiled, -/area/ship/scrap/crew/hallway/port) -"fZ" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 8; - icon_state = "warning" - }, -/obj/structure/sign/deck/first{ - pixel_x = 32 - }, -/turf/simulated/floor/tiled, -/area/ship/scrap/cargo) -"ga" = ( -/obj/machinery/light/small{ - dir = 4; - icon_state = "bulb1" - }, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/fuel, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor, -/area/ship/scrap/crew/hallway/starboard) -"gb" = ( -/obj/machinery/telecomms/processor/map_preset/bearcat, -/obj/machinery/alarm/server{ - dir = 1 - }, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 1 - }, -/turf/simulated/floor, -/area/ship/scrap/tcomms) -"gc" = ( -/obj/machinery/power/apc/derelict{ - cell_type = /obj/item/cell/standard; - name = "Medical Bay APC" - }, -/obj/structure/cable/green, -/obj/machinery/telecomms/receiver/map_preset/bearcat, -/turf/simulated/floor, -/area/ship/scrap/tcomms) -"gd" = ( -/obj/random/maintenance, -/obj/machinery/telecomms/server/map_preset/bearcat, -/turf/simulated/floor, -/area/ship/scrap/tcomms) -"ge" = ( -/turf/simulated/wall/r_wall, -/area/ship/scrap/fire) -"gf" = ( -/turf/simulated/wall, -/area/ship/scrap/fire) -"gg" = ( -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/fuel, -/turf/simulated/floor/tiled, -/area/ship/scrap/crew/hallway/port) -"gh" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/effect/floor_decal/industrial/warning{ - dir = 8; - icon_state = "warning" - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/railing/mapped{ - dir = 8 - }, -/turf/simulated/floor/tiled, -/area/ship/scrap/cargo) -"gi" = ( -/obj/machinery/door/airlock/autoname/bearcat, -/turf/simulated/floor/tiled, -/area/ship/scrap/cargo) -"gj" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/fuel, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor, -/area/ship/scrap/crew/hallway/starboard) -"gk" = ( -/turf/simulated/wall/r_wall, -/area/ship/scrap/hidden) -"gl" = ( -/turf/simulated/wall, -/area/ship/scrap/hidden) -"gm" = ( -/obj/structure/closet/firecloset, -/obj/effect/decal/cleanable/cobweb, -/obj/effect/floor_decal/corner/blue{ - dir = 1 - }, -/obj/effect/floor_decal/corner/yellow{ - dir = 8 - }, -/obj/item/seeds/lemonseed, -/obj/item/seeds/kudzuseed, -/obj/item/seeds/ambrosiavulgarisseed, -/obj/item/seeds/potatoseed, -/obj/item/seeds/potatoseed, -/obj/item/seeds/poppyseed, -/obj/item/seeds/poppyseed, -/obj/machinery/light/small{ - dir = 8 - }, -/obj/item/seeds/wheatseed, -/turf/simulated/floor/tiled, -/area/ship/scrap/fire) -"go" = ( -/obj/effect/decal/cleanable/cobweb2, -/obj/machinery/atmospherics/unary/vent_pump/on{ - level = 2 - }, -/obj/machinery/portable_atmospherics/hydroponics, -/obj/machinery/light_switch{ - pixel_x = 28 - }, -/turf/simulated/floor/tiled, -/area/ship/scrap/fire) -"gp" = ( -/obj/structure/disposalpipe/segment, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/door/airlock/autoname/bearcat, -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/fuel, -/turf/simulated/floor/tiled, -/area/ship/scrap/maintenance/hallway) -"gq" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 1; - icon_state = "warning" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 - }, -/turf/simulated/floor/tiled, -/area/ship/scrap/cargo) -"gr" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 1; - icon_state = "warning" - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/light/small, -/obj/structure/railing/mapped{ - dir = 1 - }, -/turf/simulated/floor/tiled, -/area/ship/scrap/cargo) -"gs" = ( -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 1; - icon_state = "warningcorner" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/turf/simulated/floor/tiled, -/area/ship/scrap/cargo) -"gt" = ( -/obj/machinery/door/airlock/autoname/bearcat, -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/fuel, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor, -/area/ship/scrap/maintenance/hallway) -"gv" = ( -/obj/machinery/light_switch{ - pixel_y = 25 - }, -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/obj/item/storage/backpack/dufflebag/syndie, -/turf/simulated/floor, -/area/ship/scrap/hidden) -"gw" = ( -/obj/structure/closet/crate, -/obj/random/coin, -/obj/item/spacecash/bundle/c1000, -/turf/simulated/floor, -/area/ship/scrap/hidden) -"gx" = ( -/obj/structure/disposaloutlet{ - dir = 8 - }, -/obj/structure/disposalpipe/trunk{ - dir = 4 - }, -/turf/simulated/floor/reinforced/airless, -/area/space) -"gy" = ( -/obj/effect/wallframe_spawn/reinforced, -/obj/machinery/door/blast/regular{ - density = 0; - icon_state = "pdoor0"; - id_tag = "scraplock"; - name = "External Blast Doors"; - opacity = 0 - }, -/obj/machinery/door/firedoor, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/simulated/floor, -/area/ship/scrap/fire) -"gz" = ( -/obj/machinery/portable_atmospherics/powered/pump/filled, -/obj/effect/floor_decal/corner/blue{ - dir = 1 - }, -/obj/effect/floor_decal/corner/yellow{ - dir = 8 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, -/turf/simulated/floor/tiled, -/area/ship/scrap/fire) -"gA" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/ship/scrap/fire) -"gB" = ( -/obj/structure/cable/green{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/turf/simulated/floor/tiled, -/area/ship/scrap/fire) -"gC" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/door/airlock/hatch{ - name = "Firefighting Equipment"; - normalspeed = 0 - }, -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/ship/scrap/fire) -"gD" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 4 - }, -/obj/structure/disposalpipe/junction/yjunction{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/fuel, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/turf/simulated/floor/tiled, -/area/ship/scrap/maintenance/hallway) -"gE" = ( -/obj/effect/decal/cleanable/cobweb, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/fuel, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/turf/simulated/floor, -/area/ship/scrap/maintenance/hallway) -"gF" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/wall/r_wall{ - can_open = 1 - }, -/area/ship/scrap/hidden) -"gG" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor, -/area/ship/scrap/hidden) -"gH" = ( -/obj/item/stool/padded, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/turf/simulated/floor, -/area/ship/scrap/hidden) -"gI" = ( -/obj/structure/table/reinforced, -/obj/item/device/flashlight/lamp, -/obj/item/spacecash/bundle/c1000, -/obj/item/storage/bible/booze, -/obj/item/cell/high, -/turf/simulated/floor, -/area/ship/scrap/hidden) -"gJ" = ( -/obj/machinery/portable_atmospherics/powered/scrubber, -/obj/effect/floor_decal/corner/blue{ - dir = 1 - }, -/obj/effect/floor_decal/corner/yellow{ - dir = 8 - }, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 1 - }, -/turf/simulated/floor/tiled, -/area/ship/scrap/fire) -"gK" = ( -/turf/simulated/floor/tiled, -/area/ship/scrap/fire) -"gL" = ( -/obj/structure/cable/green, -/obj/machinery/power/apc/derelict{ - name = "south bump"; - pixel_y = -24 - }, -/obj/structure/reagent_dispensers, -/obj/machinery/alarm{ - dir = 8; - pixel_x = 24; - req_access = newlist() - }, -/turf/simulated/floor/tiled, -/area/ship/scrap/fire) -"gM" = ( -/obj/structure/disposalpipe/segment{ - dir = 1; - icon_state = "pipe-c" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/fuel{ - dir = 5 - }, -/obj/machinery/alarm{ - dir = 4; - pixel_x = -24; - req_access = newlist() - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/turf/simulated/floor/tiled, -/area/ship/scrap/maintenance/hallway) -"gN" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/fuel{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/light/small{ - dir = 1; - icon_state = "bulb1" - }, -/turf/simulated/floor/tiled, -/area/ship/scrap/maintenance/hallway) -"gO" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/fuel{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 2; - icon_state = "conpipe-c" - }, -/turf/simulated/floor/tiled, -/area/ship/scrap/maintenance/hallway) -"gP" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/fuel{ - dir = 4 - }, -/turf/simulated/floor, -/area/ship/scrap/maintenance/hallway) -"gQ" = ( -/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply, -/obj/structure/cable/green{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/fuel{ - dir = 1 - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/turf/simulated/floor/tiled, -/area/ship/scrap/maintenance/hallway) -"gS" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/fuel{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor, -/area/ship/scrap/maintenance/hallway) -"gT" = ( -/obj/machinery/light/small{ - dir = 1; - icon_state = "bulb1" - }, -/obj/item/crowbar, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/fuel{ - dir = 4 - }, -/obj/machinery/alarm{ - dir = 1; - pixel_y = -32; - req_access = newlist() - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor, -/area/ship/scrap/maintenance/hallway) -"gU" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/fuel{ - dir = 9 - }, -/obj/machinery/power/apc/derelict{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/structure/cable/green{ - d2 = 8; - icon_state = "0-8" - }, -/turf/simulated/floor, -/area/ship/scrap/maintenance/hallway) -"gW" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 1; - level = 2 - }, -/obj/machinery/power/apc/derelict{ - cell_type = /obj/item/cell/standard; - name = "Medical Bay APC" - }, -/obj/structure/cable/green, -/turf/simulated/floor, -/area/ship/scrap/hidden) -"gX" = ( -/obj/structure/closet/crate, -/obj/random/loot, -/obj/random/loot, -/obj/random/loot, -/obj/random/projectile, -/obj/random/projectile, -/turf/simulated/floor, -/area/ship/scrap/hidden) -"gY" = ( -/turf/simulated/wall/r_wall, -/area/ship/scrap/maintenance/atmos) -"gZ" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/autoname/engineering/bearcat, -/turf/simulated/floor/tiled, -/area/ship/scrap/maintenance/atmos) -"ha" = ( -/turf/simulated/wall, -/area/ship/scrap/maintenance/atmos) -"hb" = ( -/turf/simulated/wall, -/area/ship/scrap/maintenance/engineering) -"hc" = ( -/obj/structure/disposalpipe/segment, -/turf/simulated/wall, -/area/ship/scrap/maintenance/engineering) -"hd" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/fuel, -/obj/machinery/door/airlock/autoname/engineering/bearcat, -/turf/simulated/floor/tiled, -/area/ship/scrap/maintenance/engineering) -"he" = ( -/turf/simulated/wall, -/area/ship/scrap/maintenance/power) -"hf" = ( -/turf/simulated/floor/reinforced/airless, -/area/ship/scrap/comms) -"hg" = ( -/turf/simulated/wall/r_wall, -/area/ship/scrap/maintenance/power) -"hh" = ( -/obj/machinery/atmospherics/pipe/simple/visible/red{ - dir = 6 - }, -/obj/effect/floor_decal/corner/blue, -/obj/machinery/portable_atmospherics/canister/oxygen, -/turf/simulated/floor/tiled/airless, -/area/ship/scrap/maintenance/atmos) -"hi" = ( -/obj/machinery/atmospherics/binary/pump/on{ - dir = 8; - target_pressure = 200 - }, -/obj/machinery/light/small{ - dir = 1; - icon_state = "bulb1" - }, -/obj/effect/floor_decal/corner/blue{ - dir = 10 - }, -/turf/simulated/floor/tiled/airless, -/area/ship/scrap/maintenance/atmos) -"hj" = ( -/obj/effect/floor_decal/corner/blue{ - dir = 10 - }, -/turf/simulated/floor/tiled/airless, -/area/ship/scrap/maintenance/atmos) -"hk" = ( -/obj/machinery/atmospherics/pipe/simple/visible/scrubbers{ - dir = 4 - }, -/obj/effect/floor_decal/corner/blue{ - dir = 8 - }, -/obj/structure/cable/green{ - d2 = 2; - icon_state = "0-2" - }, -/obj/machinery/power/apc/derelict{ - dir = 1 - }, -/mob/living/simple_animal/hostile/carp, -/turf/simulated/floor/tiled/airless, -/area/ship/scrap/maintenance/atmos) -"hl" = ( -/obj/machinery/atmospherics/pipe/simple/visible/scrubbers{ - dir = 10 - }, -/obj/machinery/meter, -/obj/effect/floor_decal/corner/blue, -/obj/effect/floor_decal/corner/yellow{ - dir = 4 - }, -/obj/machinery/light_switch{ - pixel_y = 25 - }, -/turf/simulated/floor/tiled/airless, -/area/ship/scrap/maintenance/atmos) -"hm" = ( -/obj/machinery/power/apc/derelict{ - dir = 1 - }, -/obj/structure/sign/warning/compressed_gas{ - pixel_x = -32 - }, -/obj/structure/bed/padded, -/obj/structure/cable/green{ - d2 = 2; - icon_state = "0-2" - }, -/turf/simulated/floor/tiled, -/area/ship/scrap/maintenance/engineering) -"hn" = ( -/obj/machinery/light/small{ - dir = 1; - icon_state = "bulb1" - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/effect/floor_decal/corner/yellow{ - dir = 5 - }, -/obj/structure/disposalpipe/trunk{ - dir = 1 - }, -/obj/machinery/disposal, -/turf/simulated/floor/tiled, -/area/ship/scrap/maintenance/engineering) -"ho" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/obj/item/device/radio/intercom/map_preset/bearcat{ - pixel_y = 32 - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/effect/floor_decal/corner/yellow{ - dir = 5 - }, -/obj/structure/closet/toolcloset, -/obj/item/storage/backpack/dufflebag/eng, -/obj/item/stack/material/glass/reinforced/fifty, -/obj/item/stack/material/steel/fifty, -/turf/simulated/floor/tiled, -/area/ship/scrap/maintenance/engineering) -"hp" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/effect/floor_decal/corner/yellow{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/fuel, -/turf/simulated/floor/tiled, -/area/ship/scrap/maintenance/engineering) -"hq" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/light_switch{ - pixel_y = 25 - }, -/obj/effect/floor_decal/corner/yellow{ - dir = 5 - }, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 8 - }, -/obj/structure/table/standard, -/obj/item/reagent_containers/food/drinks/glass2/coffeecup/metal, -/obj/item/reagent_containers/food/drinks/glass2/coffeecup/metal, -/obj/item/reagent_containers/chem_disp_cartridge/coffee{ - name = "coffee canister"; - pixel_y = 6 - }, -/turf/simulated/floor/tiled, -/area/ship/scrap/maintenance/engineering) -"hr" = ( -/obj/structure/bed/chair/comfy/brown, -/obj/effect/floor_decal/corner/yellow{ - dir = 5 - }, -/obj/structure/closet/hydrant{ - pixel_y = 32 - }, -/obj/item/storage/firstaid/regular, -/turf/simulated/floor/tiled, -/area/ship/scrap/maintenance/engineering) -"hu" = ( -/obj/structure/table/standard, -/obj/machinery/cell_charger, -/obj/item/storage/toolbox/electrical{ - pixel_x = 7; - pixel_y = 4 - }, -/obj/machinery/light_switch{ - pixel_y = 25 - }, -/obj/machinery/light/small{ - dir = 1; - icon_state = "bulb1" - }, -/turf/simulated/floor/tiled, -/area/ship/scrap/maintenance/power) -"hv" = ( -/obj/structure/table/standard, -/obj/machinery/cell_charger, -/obj/item/defibrillator/compact/loaded, -/obj/item/device/flashlight{ - pixel_x = -13; - pixel_y = 3 - }, -/turf/simulated/floor, -/area/ship/scrap/maintenance/power) -"hw" = ( -/turf/space, -/area/ship/scrap/maintenance/atmos) -"hx" = ( -/turf/simulated/floor/airless, -/area/ship/scrap/maintenance/atmos) -"hy" = ( -/obj/structure/window/reinforced{ - dir = 1 - }, -/obj/structure/window/reinforced{ - dir = 4 - }, -/obj/effect/floor_decal/corner/blue/diagonal, -/obj/effect/floor_decal/corner/blue/diagonal{ - dir = 4 - }, -/turf/simulated/floor/reinforced/airless, -/area/ship/scrap/maintenance/atmos) -"hz" = ( -/obj/machinery/atmospherics/portables_connector, -/obj/effect/floor_decal/corner/blue{ - dir = 9 - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/turf/simulated/floor/tiled/airless, -/area/ship/scrap/maintenance/atmos) -"hA" = ( -/obj/machinery/atmospherics/pipe/simple/visible/supply{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/simple/visible/scrubbers{ - dir = 5 - }, -/obj/effect/floor_decal/corner/blue, -/obj/effect/floor_decal/corner/yellow{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/airless, -/area/ship/scrap/maintenance/atmos) -"hB" = ( -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/door/airlock/autoname/engineering/bearcat, -/turf/simulated/floor/tiled, -/area/ship/scrap/maintenance/atmos) -"hC" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/fuel{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/turf/simulated/floor/tiled, -/area/ship/scrap/maintenance/engineering) -"hD" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/fuel{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/ship/scrap/maintenance/engineering) -"hE" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/ladder, -/obj/machinery/atmospherics/pipe/simple/hidden/fuel{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/ship/scrap/maintenance/engineering) -"hF" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/effect/decal/cleanable/dirt, -/obj/item/stool/padded, -/obj/structure/cable/green{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/fuel{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply, -/turf/simulated/floor/tiled, -/area/ship/scrap/maintenance/engineering) -"hG" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/ship/scrap/maintenance/engineering) -"hH" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/effect/decal/cleanable/liquid_fuel, -/turf/simulated/floor/tiled, -/area/ship/scrap/maintenance/engineering) -"hI" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/door/airlock/autoname/engineering/bearcat, -/turf/simulated/floor/tiled, -/area/ship/scrap/maintenance/power) -"hJ" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/turf/simulated/floor/tiled, -/area/ship/scrap/maintenance/power) -"hK" = ( -/obj/machinery/power/sensor{ - long_range = 1; - name_tag = "Main Grid" - }, -/obj/structure/cable{ - d2 = 8; - icon_state = "0-8" - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/turf/simulated/floor, -/area/ship/scrap/maintenance/power) -"hL" = ( -/obj/machinery/recharge_station, -/obj/structure/cable/green{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/turf/simulated/floor, -/area/ship/scrap/maintenance/power) -"hM" = ( -/obj/item/stack/material/rods, -/obj/structure/lattice, -/turf/space, -/area/ship/scrap/maintenance/atmos) -"hN" = ( -/obj/item/material/shard, -/turf/simulated/floor/airless, -/area/ship/scrap/maintenance/atmos) -"hO" = ( -/obj/machinery/atmospherics/unary/outlet_injector{ - dir = 8; - frequency = 1441; - icon_state = "map_injector"; - id = "n2_in"; - use_power = 1 - }, -/mob/living/simple_animal/hostile/carp, -/turf/simulated/floor/reinforced/airless, -/area/ship/scrap/maintenance/atmos) -"hP" = ( -/obj/structure/window/reinforced{ - dir = 4 - }, -/obj/machinery/atmospherics/unary/vent_pump/high_volume{ - dir = 4; - external_pressure_bound = 0; - external_pressure_bound_default = 0; - icon_state = "map_vent_in"; - id_tag = "air_out"; - internal_pressure_bound = 2000; - internal_pressure_bound_default = 2000; - pressure_checks = 2; - pressure_checks_default = 2; - pump_direction = 0; - use_power = 1 - }, -/turf/simulated/floor/reinforced/airless, -/area/ship/scrap/maintenance/atmos) -"hQ" = ( -/obj/machinery/meter, -/obj/effect/floor_decal/corner/blue{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/manifold/visible/cyan{ - dir = 4 - }, -/turf/simulated/floor/tiled/airless, -/area/ship/scrap/maintenance/atmos) -"hR" = ( -/obj/effect/floor_decal/corner/blue, -/obj/effect/floor_decal/corner/yellow{ - dir = 4 - }, -/obj/machinery/light/small{ - dir = 4; - icon_state = "bulb1" - }, -/obj/machinery/atmospherics/pipe/simple/visible/supply, -/turf/simulated/floor/tiled/airless, -/area/ship/scrap/maintenance/atmos) -"hS" = ( -/obj/effect/floor_decal/corner/yellow{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/fuel, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled, -/area/ship/scrap/maintenance/engineering) -"hT" = ( -/obj/effect/floor_decal/corner/yellow{ - dir = 10 - }, -/obj/structure/closet/secure_closet/engineering_welding/bearcat, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 1; - level = 2 - }, -/turf/simulated/floor/tiled, -/area/ship/scrap/maintenance/engineering) -"hU" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/floor_decal/corner/yellow{ - dir = 10 - }, -/obj/machinery/computer/ship/engines{ - dir = 1 - }, -/turf/simulated/floor/tiled, -/area/ship/scrap/maintenance/engineering) -"hV" = ( -/obj/effect/floor_decal/corner/yellow{ - dir = 10 - }, -/obj/structure/table/standard, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/button/ignition{ - id_tag = "engine"; - pixel_x = -5 - }, -/obj/machinery/button/blast_door{ - id_tag = "engwindow"; - name = "Engine Observation"; - pixel_x = 6 - }, -/turf/simulated/floor/tiled, -/area/ship/scrap/maintenance/engineering) -"hW" = ( -/obj/effect/floor_decal/corner/yellow{ - dir = 10 - }, -/obj/machinery/light/small, -/obj/machinery/button/blast_door{ - id_tag = "scram"; - name = "CORE SCRAM"; - pixel_y = -26 - }, -/obj/machinery/computer/modular/preset/engineering{ - dir = 1; - icon_state = "console" - }, -/turf/simulated/floor/tiled, -/area/ship/scrap/maintenance/engineering) -"hX" = ( -/obj/effect/floor_decal/corner/yellow{ - dir = 10 - }, -/obj/effect/decal/cleanable/liquid_fuel, -/obj/machinery/vending/cigarette, -/turf/simulated/floor/tiled, -/area/ship/scrap/maintenance/engineering) -"hY" = ( -/obj/structure/reagent_dispensers/fueltank, -/obj/effect/floor_decal/corner/yellow{ - dir = 10 - }, -/obj/effect/decal/cleanable/liquid_fuel, -/obj/structure/sign/warning/nosmoking_1{ - pixel_y = -32 - }, -/obj/machinery/alarm{ - dir = 8; - pixel_x = 24; - req_access = newlist() - }, -/turf/simulated/floor/tiled, -/area/ship/scrap/maintenance/engineering) -"hZ" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 1; - level = 2 - }, -/obj/machinery/alarm{ - dir = 4; - pixel_x = -24; - req_access = newlist() - }, -/mob/living/simple_animal/hostile/carp, -/turf/simulated/floor, -/area/ship/scrap/maintenance/power) -"ia" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor, -/area/ship/scrap/maintenance/power) -"ib" = ( -/obj/machinery/power/breakerbox/activated, -/turf/simulated/floor, -/area/ship/scrap/maintenance/power) -"ic" = ( -/obj/effect/wallframe_spawn/reinforced, -/obj/machinery/door/blast/regular{ - density = 0; - icon_state = "pdoor0"; - id_tag = "scraplock"; - name = "External Blast Doors"; - opacity = 0 - }, -/obj/machinery/door/firedoor, -/turf/simulated/floor, -/area/ship/scrap/maintenance/power) -"id" = ( -/obj/item/material/shard, -/obj/structure/lattice, -/turf/space, -/area/ship/scrap/maintenance/atmos) -"ie" = ( -/obj/item/stack/material/steel, -/turf/simulated/floor/airless, -/area/ship/scrap/maintenance/atmos) -"if" = ( -/obj/structure/window/reinforced{ - dir = 1 - }, -/obj/structure/window/reinforced{ - dir = 4 - }, -/turf/simulated/floor/reinforced/airless, -/area/ship/scrap/maintenance/atmos) -"ig" = ( -/obj/effect/floor_decal/corner/white{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/simple/visible/cyan, -/turf/simulated/floor/tiled/airless, -/area/ship/scrap/maintenance/atmos) -"ih" = ( -/obj/structure/dispenser/oxygen, -/obj/effect/floor_decal/corner/blue, -/obj/effect/floor_decal/corner/yellow{ - dir = 4 - }, -/obj/item/device/radio/intercom/map_preset/bearcat{ - default_hailing = 1; - dir = 8; - pixel_x = 22 - }, -/turf/simulated/floor/tiled/airless, -/area/ship/scrap/maintenance/atmos) -"ii" = ( -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/simple/hidden/fuel, -/obj/machinery/door/airlock/autoname/engineering/bearcat, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled, -/area/ship/scrap/maintenance/engine/aft) -"ij" = ( -/turf/simulated/wall/r_wall, -/area/ship/scrap/maintenance/engine/aft) -"ik" = ( -/obj/machinery/door/blast/regular{ - density = 0; - icon_state = "pdoor0"; - id_tag = "engwindow"; - opacity = 0 - }, -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/effect/wallframe_spawn/reinforced, -/turf/simulated/floor, -/area/ship/scrap/maintenance/engine/aft) -"il" = ( -/obj/machinery/light/small{ - dir = 8 - }, -/obj/structure/closet/crate/uranium, -/turf/simulated/floor, -/area/ship/scrap/maintenance/power) -"im" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 1 - }, -/turf/simulated/floor/tiled, -/area/ship/scrap/maintenance/power) -"in" = ( -/obj/machinery/power/shield_generator, -/obj/structure/cable/green{ - d2 = 2; - icon_state = "0-2" - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/light/small{ - dir = 4; - icon_state = "bulb1" - }, -/turf/simulated/floor, -/area/ship/scrap/maintenance/power) -"io" = ( -/obj/structure/lattice, -/mob/living/simple_animal/hostile/carp, -/turf/space, -/area/ship/scrap/maintenance/atmos) -"iq" = ( -/obj/structure/window/reinforced{ - dir = 4 - }, -/obj/machinery/atmospherics/unary/outlet_injector{ - dir = 4; - frequency = 1441; - icon_state = "map_injector"; - id = "n2_in"; - use_power = 1 - }, -/obj/effect/floor_decal/corner/white/diagonal, -/obj/effect/floor_decal/corner/white/diagonal{ - dir = 4 - }, -/turf/simulated/floor/reinforced/airless, -/area/ship/scrap/maintenance/atmos) -"ir" = ( -/obj/machinery/atmospherics/omni/mixer{ - active_power_usage = 7500; - tag_east_con = 0; - tag_north = 1; - tag_north_con = 0.21; - tag_south = 1; - tag_south_con = 0.79; - tag_west = 2 - }, -/obj/effect/floor_decal/corner/white{ - dir = 9 - }, -/turf/simulated/floor/tiled/airless, -/area/ship/scrap/maintenance/atmos) -"is" = ( -/obj/effect/floor_decal/corner/blue, -/obj/effect/floor_decal/corner/yellow{ - dir = 4 - }, -/obj/machinery/portable_atmospherics/powered/pump/filled, -/obj/machinery/atmospherics/binary/passive_gate{ - dir = 1 - }, -/turf/simulated/floor/tiled/airless, -/area/ship/scrap/maintenance/atmos) -"iu" = ( -/obj/structure/sign/warning/fire{ - pixel_y = 32 - }, -/obj/machinery/atmospherics/portables_connector, -/obj/item/stack/material/glass/phoronrglass{ - amount = 5 - }, -/obj/machinery/light/small{ - dir = 1; - icon_state = "bulb1" - }, -/turf/simulated/floor/airless, -/area/ship/scrap/maintenance/engine/aft) -"iv" = ( -/obj/machinery/light_switch{ - pixel_y = 25 - }, -/obj/machinery/atmospherics/unary/tank/carbon_dioxide, -/turf/simulated/floor/airless, -/area/ship/scrap/maintenance/engine/aft) -"iw" = ( -/obj/machinery/atmospherics/portables_connector, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/turf/simulated/floor/airless, -/area/ship/scrap/maintenance/engine/aft) -"ix" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/turf/simulated/floor/airless, -/area/ship/scrap/maintenance/engine/aft) -"iy" = ( -/obj/machinery/atmospherics/portables_connector, -/obj/machinery/portable_atmospherics/canister/phoron, -/obj/machinery/light/small{ - dir = 1; - icon_state = "bulb1" - }, -/turf/simulated/floor/airless, -/area/ship/scrap/maintenance/engine/aft) -"iz" = ( -/obj/machinery/atmospherics/portables_connector, -/turf/simulated/floor/airless, -/area/ship/scrap/maintenance/engine/aft) -"iA" = ( -/obj/structure/closet/radiation, -/obj/machinery/button/blast_door{ - id_tag = "radaway"; - name = "Radiation shields"; - pixel_x = -24 - }, -/turf/simulated/floor/tiled, -/area/ship/scrap/maintenance/power) -"iB" = ( -/obj/machinery/power/terminal{ - dir = 4 - }, -/obj/structure/cable/green{ - d2 = 2; - icon_state = "0-2" - }, -/mob/living/simple_animal/hostile/carp, -/turf/simulated/floor/tiled, -/area/ship/scrap/maintenance/power) -"iC" = ( -/obj/structure/cable, -/obj/machinery/power/smes/buildable, -/turf/simulated/floor/tiled, -/area/ship/scrap/maintenance/power) -"iD" = ( -/obj/effect/floor_decal/corner/white{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/simple/visible/cyan, -/obj/machinery/atmospherics/binary/pump/on{ - dir = 4; - name = "Air to Ports" - }, -/turf/simulated/floor/tiled/airless, -/area/ship/scrap/maintenance/atmos) -"iE" = ( -/obj/machinery/atmospherics/pipe/manifold/visible/blue{ - dir = 4 - }, -/obj/effect/floor_decal/corner/blue, -/obj/effect/floor_decal/corner/yellow{ - dir = 4 - }, -/obj/machinery/meter, -/turf/simulated/floor/tiled/airless, -/area/ship/scrap/maintenance/atmos) -"iF" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/fuel, -/obj/machinery/power/apc/derelict{ - dir = 8 - }, -/obj/structure/cable/green, -/turf/simulated/floor/airless, -/area/ship/scrap/maintenance/engine/aft) -"iG" = ( -/obj/machinery/atmospherics/pipe/manifold/visible/fuel{ - dir = 8 - }, -/turf/simulated/floor/airless, -/area/ship/scrap/maintenance/engine/aft) -"iH" = ( -/obj/machinery/meter, -/obj/machinery/atmospherics/pipe/manifold/visible/fuel, -/turf/simulated/floor/airless, -/area/ship/scrap/maintenance/engine/aft) -"iI" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/fuel{ - dir = 9 - }, -/mob/living/simple_animal/hostile/carp, -/turf/simulated/floor/airless, -/area/ship/scrap/maintenance/engine/aft) -"iJ" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 1; - level = 2 - }, -/turf/simulated/floor/airless, -/area/ship/scrap/maintenance/engine/aft) -"iL" = ( -/obj/machinery/atmospherics/omni/mixer{ - tag_north = 1; - tag_north_con = 0.36; - tag_south = 2; - tag_west = 1; - tag_west_con = 0.64 - }, -/turf/simulated/floor/airless, -/area/ship/scrap/maintenance/engine/aft) -"iM" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/door/window/southright, -/obj/machinery/door/window/northleft, -/obj/machinery/door/blast/regular/open{ - dir = 2; - icon_state = "pdoor0"; - id_tag = "radaway"; - opacity = 0 - }, -/obj/structure/sign{ - icon_state = "radiation"; - pixel_x = -32 - }, -/obj/structure/sign{ - icon_state = "radiation"; - pixel_x = 32 - }, -/turf/simulated/floor, -/area/ship/scrap/maintenance/power) -"iN" = ( -/obj/item/stack/material/plasteel, -/turf/simulated/floor, -/area/ship/scrap/maintenance/power) -"iO" = ( -/obj/item/stack/material/rods, -/mob/living/simple_animal/hostile/carp, -/turf/space, -/area/ship/scrap/maintenance/atmos) -"iP" = ( -/obj/item/stack/material/steel, -/obj/item/stack/material/rods, -/turf/space, -/area/ship/scrap/maintenance/atmos) -"iQ" = ( -/obj/item/stack/material/plasteel, -/turf/simulated/floor/airless, -/area/ship/scrap/maintenance/atmos) -"iR" = ( -/obj/structure/window/reinforced{ - dir = 4 - }, -/obj/structure/window/reinforced{ - dir = 1 - }, -/obj/machinery/atmospherics/unary/vent_pump/high_volume{ - dir = 4; - external_pressure_bound = 0; - external_pressure_bound_default = 0; - icon_state = "map_vent_in"; - id_tag = "air_out"; - internal_pressure_bound = 2000; - internal_pressure_bound_default = 2000; - pressure_checks = 2; - pressure_checks_default = 2; - pump_direction = 0; - use_power = 1 - }, -/turf/simulated/floor/reinforced/airless, -/area/ship/scrap/maintenance/atmos) -"iS" = ( -/obj/machinery/meter, -/obj/effect/floor_decal/corner/red{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/manifold/visible/cyan{ - dir = 4 - }, -/turf/simulated/floor/tiled/airless, -/area/ship/scrap/maintenance/atmos) -"iT" = ( -/obj/machinery/atmospherics/portables_connector{ - dir = 1 - }, -/obj/effect/floor_decal/corner/blue, -/obj/effect/floor_decal/corner/yellow{ - dir = 4 - }, -/obj/machinery/light/small{ - dir = 4; - icon_state = "bulb1" - }, -/obj/machinery/alarm{ - dir = 8; - pixel_x = 24; - req_access = newlist() - }, -/turf/simulated/floor/tiled/airless, -/area/ship/scrap/maintenance/atmos) -"iU" = ( -/obj/machinery/alarm{ - dir = 4; - pixel_x = -24; - req_access = newlist() - }, -/obj/machinery/atmospherics/valve/shutoff/fuel, -/turf/simulated/floor/airless, -/area/ship/scrap/maintenance/engine/aft) -"iV" = ( -/obj/structure/window/phoronreinforced{ - dir = 8; - icon_state = "phoronrwindow" - }, -/obj/structure/window/phoronreinforced{ - dir = 1; - icon_state = "phoronrwindow" - }, -/obj/machinery/atmospherics/pipe/simple/heat_exchanging/junction, -/turf/simulated/floor/reinforced/airless, -/area/ship/scrap/maintenance/engine/aft) -"iW" = ( -/obj/structure/window/phoronreinforced{ - dir = 1; - icon_state = "phoronrwindow" - }, -/obj/machinery/meter/turf, -/obj/machinery/atmospherics/pipe/simple/heat_exchanging{ - dir = 6 - }, -/turf/simulated/floor/reinforced/airless, -/area/ship/scrap/maintenance/engine/aft) -"iX" = ( -/obj/structure/window/phoronreinforced{ - dir = 4; - icon_state = "phoronrwindow" - }, -/obj/structure/window/phoronreinforced{ - dir = 1; - icon_state = "phoronrwindow" - }, -/obj/machinery/atmospherics/pipe/simple/heat_exchanging{ - dir = 10 - }, -/obj/machinery/atmospherics/unary/outlet_injector{ - dir = 4; - icon_state = "map_injector"; - use_power = 1 - }, -/turf/simulated/floor/reinforced/airless, -/area/ship/scrap/maintenance/engine/aft) -"iY" = ( -/obj/structure/window/phoronreinforced, -/obj/machinery/atmospherics/binary/pump{ - dir = 8 - }, -/obj/item/stack/material/glass/phoronrglass{ - amount = 20 - }, -/turf/simulated/floor/airless, -/area/ship/scrap/maintenance/engine/aft) -"iZ" = ( -/obj/machinery/atmospherics/pipe/simple/visible/green{ - dir = 4 - }, -/turf/simulated/floor/airless, -/area/ship/scrap/maintenance/engine/aft) -"ja" = ( -/obj/machinery/meter, -/obj/machinery/atmospherics/pipe/simple/visible/green{ - dir = 9 - }, -/obj/structure/closet/crate/solar, -/turf/simulated/floor/airless, -/area/ship/scrap/maintenance/engine/aft) -"jb" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/door/blast/regular/open{ - dir = 2; - icon_state = "pdoor0"; - id_tag = "radaway"; - opacity = 0 - }, -/obj/machinery/meter/turf, -/turf/simulated/floor, -/area/ship/scrap/maintenance/power) -"jc" = ( -/obj/item/stack/material/rods, -/obj/structure/lattice, -/turf/space, -/area/ship/scrap/maintenance/power) -"jd" = ( -/obj/structure/window/reinforced{ - dir = 4 - }, -/obj/effect/floor_decal/corner/red/diagonal{ - dir = 4 - }, -/obj/effect/floor_decal/corner/red/diagonal, -/obj/structure/window/reinforced, -/turf/simulated/floor/reinforced/airless, -/area/ship/scrap/maintenance/atmos) -"je" = ( -/obj/machinery/atmospherics/portables_connector{ - dir = 1 - }, -/obj/effect/floor_decal/corner/red{ - dir = 9 - }, -/turf/simulated/floor/tiled/airless, -/area/ship/scrap/maintenance/atmos) -"jf" = ( -/obj/machinery/light/small{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/fuel, -/obj/machinery/meter, -/turf/simulated/floor/airless, -/area/ship/scrap/maintenance/engine/aft) -"jg" = ( -/obj/structure/window/phoronreinforced{ - dir = 8; - icon_state = "phoronrwindow" - }, -/obj/machinery/atmospherics/pipe/simple/heat_exchanging, -/turf/simulated/floor/reinforced/airless, -/area/ship/scrap/maintenance/engine/aft) -"jh" = ( -/obj/machinery/atmospherics/pipe/simple/heat_exchanging, -/obj/machinery/igniter{ - id_tag = "engine" - }, -/turf/simulated/floor/reinforced/airless, -/area/ship/scrap/maintenance/engine/aft) -"ji" = ( -/obj/machinery/atmospherics/pipe/simple/heat_exchanging, -/turf/simulated/floor/reinforced/airless, -/area/ship/scrap/maintenance/engine/aft) -"jj" = ( -/obj/machinery/door/blast/regular{ - id_tag = "scram" - }, -/turf/simulated/floor/airless, -/area/ship/scrap/maintenance/engine/aft) -"jk" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 8; - icon_state = "warning" - }, -/turf/simulated/floor/airless, -/area/ship/scrap/maintenance/engine/aft) -"jl" = ( -/obj/item/device/radio/intercom/map_preset/bearcat{ - dir = 8; - pixel_x = 22 - }, -/obj/machinery/light/small{ - dir = 4 - }, -/obj/machinery/portable_atmospherics/canister/empty, -/obj/machinery/atmospherics/portables_connector, -/turf/simulated/floor/airless, -/area/ship/scrap/maintenance/engine/aft) -"jm" = ( -/obj/structure/cable/green, -/turf/simulated/floor, -/area/ship/scrap/maintenance/power) -"jn" = ( -/obj/item/stack/material/steel, -/turf/space, -/area/ship/scrap/maintenance/power) -"jo" = ( -/turf/space, -/area/ship/scrap/maintenance/power) -"jp" = ( -/obj/item/stack/material/steel, -/turf/space, -/area/space) -"jr" = ( -/obj/effect/floor_decal/corner/red{ - dir = 1 - }, -/obj/machinery/portable_atmospherics/canister/nitrogen, -/turf/simulated/floor/tiled/airless, -/area/ship/scrap/maintenance/atmos) -"js" = ( -/obj/machinery/atmospherics/valve/open, -/obj/item/material/shard/phoron, -/turf/simulated/floor/airless, -/area/ship/scrap/maintenance/engine/aft) -"jt" = ( -/obj/machinery/atmospherics/pipe/simple/heat_exchanging{ - dir = 5 - }, -/turf/simulated/floor/reinforced, -/area/ship/scrap/maintenance/engine/aft) -"ju" = ( -/obj/machinery/atmospherics/pipe/simple/heat_exchanging{ - dir = 9 - }, -/obj/machinery/portable_atmospherics/canister/carbon_dioxide, -/turf/simulated/floor/reinforced, -/area/ship/scrap/maintenance/engine/aft) -"jv" = ( -/obj/structure/window/phoronreinforced, -/obj/structure/window/phoronreinforced{ - dir = 4; - icon_state = "phoronrwindow" - }, -/obj/machinery/atmospherics/pipe/simple/heat_exchanging/junction{ - dir = 1 - }, -/obj/machinery/atmospherics/unary/vent_pump/engine{ - dir = 4; - external_pressure_bound = 4000; - external_pressure_bound_default = 4000; - pump_direction = 0; - use_power = 1 - }, -/turf/simulated/floor/reinforced, -/area/ship/scrap/maintenance/engine/aft) -"jw" = ( -/obj/structure/window/phoronreinforced{ - dir = 1; - icon_state = "phoronrwindow" - }, -/obj/machinery/atmospherics/binary/pump{ - dir = 4 - }, -/turf/simulated/floor/airless, -/area/ship/scrap/maintenance/engine/aft) -"jx" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/black{ - dir = 4 - }, -/obj/machinery/meter, -/turf/simulated/floor/airless, -/area/ship/scrap/maintenance/engine/aft) -"jy" = ( -/obj/machinery/atmospherics/omni/filter{ - tag_east = 2; - tag_north = 6; - tag_south = 5; - tag_west = 1; - use_power = 0 - }, -/obj/machinery/portable_atmospherics/canister/oxygen, -/turf/simulated/floor/airless, -/area/ship/scrap/maintenance/engine/aft) -"jz" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/black{ - dir = 4 - }, -/turf/simulated/wall, -/area/ship/scrap/maintenance/power) -"jA" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/black{ - dir = 10 - }, -/turf/simulated/wall, -/area/ship/scrap/maintenance/power) -"jB" = ( -/obj/item/stack/material/rods, -/turf/space, -/area/space) -"jC" = ( -/obj/structure/table/standard, -/obj/item/device/multitool{ - pixel_x = 5 - }, -/obj/item/clamp, -/obj/item/device/paint_sprayer, -/turf/simulated/floor, -/area/ship/scrap/maintenance/atmos) -"jD" = ( -/obj/effect/floor_decal/corner/blue, -/obj/effect/floor_decal/corner/yellow{ - dir = 8 - }, -/obj/machinery/space_heater, -/turf/simulated/floor/tiled/airless, -/area/ship/scrap/maintenance/atmos) -"jE" = ( -/obj/machinery/pipedispenser, -/obj/effect/floor_decal/corner/yellow{ - dir = 4 - }, -/obj/effect/floor_decal/corner/blue, -/obj/effect/floor_decal/corner/blue, -/obj/effect/floor_decal/corner/yellow{ - dir = 8 - }, -/turf/simulated/floor/tiled/airless, -/area/ship/scrap/maintenance/atmos) -"jF" = ( -/turf/simulated/floor/airless, -/area/ship/scrap/maintenance/engine/aft) -"jG" = ( -/obj/item/material/shard/phoron, -/turf/simulated/floor/airless, -/area/ship/scrap/maintenance/engine/aft) -"jH" = ( -/obj/machinery/atmospherics/pipe/manifold/visible/fuel, -/turf/simulated/floor/airless, -/area/ship/scrap/maintenance/engine/aft) -"jI" = ( -/obj/machinery/atmospherics/valve/open{ - dir = 4 - }, -/turf/simulated/floor/airless, -/area/ship/scrap/maintenance/engine/aft) -"jK" = ( -/obj/machinery/atmospherics/portables_connector{ - dir = 1 - }, -/obj/machinery/portable_atmospherics/canister/empty, -/obj/effect/floor_decal/industrial/warning{ - dir = 4; - icon_state = "warning" - }, -/turf/simulated/floor/airless, -/area/ship/scrap/maintenance/engine/aft) -"jL" = ( -/obj/machinery/door/blast/regular{ - id_tag = "scram" - }, -/turf/simulated/floor, -/area/ship/scrap/maintenance/engine/aft) -"jM" = ( -/obj/machinery/atmospherics/unary/vent_pump/high_volume{ - dir = 1; - external_pressure_bound = 140; - external_pressure_bound_default = 140; - icon_state = "map_vent_out"; - use_power = 1 - }, -/turf/simulated/floor, -/area/ship/scrap/maintenance/engine/aft) -"jN" = ( -/obj/item/stack/material/steel, -/obj/item/stack/material/rods, -/obj/structure/lattice, -/turf/space, -/area/ship/scrap/maintenance/engine/aft) -"jO" = ( -/turf/space, -/area/ship/scrap/maintenance/engine/aft) -"jP" = ( -/obj/structure/window/reinforced, -/obj/machinery/atmospherics/pipe/manifold/visible/fuel{ - dir = 1 - }, -/obj/effect/floor_decal/industrial/warning, -/mob/living/simple_animal/hostile/carp, -/turf/simulated/floor/airless, -/area/ship/scrap/maintenance/engine/aft) -"jQ" = ( -/obj/structure/window/reinforced, -/obj/machinery/atmospherics/pipe/manifold/visible/fuel{ - dir = 1 - }, -/obj/effect/floor_decal/industrial/warning, -/turf/simulated/floor/airless, -/area/ship/scrap/maintenance/engine/aft) -"jR" = ( -/obj/structure/window/reinforced, -/obj/effect/floor_decal/industrial/warning, -/obj/machinery/atmospherics/pipe/manifold/visible/fuel{ - dir = 4 - }, -/turf/simulated/floor/airless, -/area/ship/scrap/maintenance/engine/aft) -"jS" = ( -/obj/effect/floor_decal/industrial/warning, -/obj/machinery/light/small, -/obj/effect/floor_decal/industrial/warning{ - dir = 4; - icon_state = "warning" - }, -/obj/structure/closet/crate/solar_assembly, -/turf/simulated/floor/airless, -/area/ship/scrap/maintenance/engine/aft) -"jT" = ( -/obj/structure/lattice, -/mob/living/simple_animal/hostile/carp, -/turf/space, -/area/ship/scrap/maintenance/engine/aft) -"jU" = ( -/obj/item/stack/material/plasteel, -/obj/structure/lattice, -/turf/space, -/area/ship/scrap/maintenance/engine/aft) -"jV" = ( -/obj/structure/lattice, -/turf/space, -/area/ship/scrap/maintenance/engine/aft) -"jW" = ( -/obj/machinery/atmospherics/unary/engine{ - dir = 1 - }, -/turf/simulated/floor/airless, -/area/ship/scrap/maintenance/engine/aft) -"jX" = ( -/obj/item/stack/material/rods, -/turf/space, -/area/ship/scrap/maintenance/engine/aft) -"jY" = ( -/obj/machinery/door/blast/regular{ - density = 0; - icon_state = "pdoor0"; - id_tag = "scraplock"; - name = "External Blast Doors"; - opacity = 0 - }, -/obj/structure/sign/warning/hot_exhaust{ - pixel_y = 32 - }, -/turf/simulated/floor/airless, -/area/ship/scrap/maintenance/engine/aft) -"jZ" = ( -/obj/machinery/door/blast/regular{ - density = 0; - icon_state = "pdoor0"; - id_tag = "scraplock"; - name = "External Blast Doors"; - opacity = 0 - }, -/turf/simulated/floor/airless, -/area/ship/scrap/maintenance/engine/aft) -"kb" = ( -/obj/machinery/light/small{ - dir = 8; - icon_state = "bulb1" - }, -/obj/item/storage/mirror{ - pixel_y = 29 - }, -/obj/structure/hygiene/sink{ - dir = 1; - pixel_y = 16 - }, -/obj/machinery/atmospherics/unary/vent_pump/on{ - level = 2 - }, -/obj/item/hemostat, -/obj/effect/floor_decal/corner/white/diagonal, -/obj/machinery/alarm{ - dir = 8; - pixel_x = 24; - req_access = newlist() - }, -/turf/simulated/floor/tiled, -/area/ship/scrap/crew/toilets) -"km" = ( -/obj/effect/paint/brown, -/turf/simulated/wall/r_wall, -/area/ship/scrap/crew/toilets) -"lC" = ( -/turf/simulated/floor/reinforced/airless, -/area/ship/scrap/crew/toilets) -"lX" = ( -/obj/item/stack/material/steel, -/obj/structure/lattice, -/turf/space, -/area/ship/scrap/maintenance/power) -"nS" = ( -/obj/effect/paint/brown, -/turf/simulated/wall/r_wall, -/area/ship/scrap/command/captain) -"oa" = ( -/obj/machinery/cryopod, -/obj/machinery/light/small{ - dir = 4; - icon_state = "bulb1" - }, -/turf/simulated/floor/tiled/white, -/area/ship/scrap/crew/cryo) -"ou" = ( -/obj/effect/paint/brown, -/turf/simulated/wall/r_wall, -/area/ship/scrap/crew/hallway/port) -"so" = ( -/obj/effect/paint/brown, -/turf/simulated/wall/r_wall, -/area/ship/scrap/crew/medbay) -"sy" = ( -/obj/structure/lattice, -/turf/simulated/floor/airless, -/area/ship/scrap/maintenance/atmos) -"ts" = ( -/obj/structure/lattice, -/turf/space, -/area/ship/scrap/maintenance/power) -"uf" = ( -/obj/machinery/atmospherics/pipe/simple/visible/green{ - dir = 5 - }, -/obj/effect/decal/cleanable/ash, -/turf/simulated/floor/airless, -/area/ship/scrap/maintenance/engine/aft) -"uM" = ( -/obj/item/stack/material/steel, -/obj/structure/lattice, -/turf/space, -/area/ship/scrap/maintenance/atmos) -"vs" = ( -/obj/structure/lattice, -/obj/effect/paint/brown, -/turf/simulated/wall/r_wall, -/area/ship/scrap/maintenance/atmos) -"vN" = ( -/obj/effect/paint/red, -/turf/simulated/wall/r_wall, -/area/ship/scrap/maintenance/engine/aft) -"wp" = ( -/obj/effect/paint/brown, -/turf/simulated/wall/r_wall, -/area/ship/scrap/maintenance/atmos) -"xU" = ( -/obj/effect/paint/brown, -/turf/simulated/wall/r_wall, -/area/ship/scrap/maintenance/power) -"zT" = ( -/obj/effect/floor_decal/corner/blue/diagonal{ - dir = 4 - }, -/obj/effect/floor_decal/corner/blue/diagonal, -/turf/simulated/floor/reinforced/airless, -/area/ship/scrap/maintenance/atmos) -"Cs" = ( -/obj/effect/floor_decal/industrial/warning, -/obj/effect/paint/red, -/turf/simulated/wall/r_wall, -/area/ship/scrap/maintenance/engine/port) -"Dr" = ( -/obj/structure/closet/secure_closet/engineering_electrical/bearcat, -/obj/item/cell/device/standard, -/obj/item/cell/device/standard, -/obj/machinery/power/apc/derelict{ - dir = 8 - }, -/obj/item/device/radio/intercom/map_preset/bearcat{ - pixel_y = 32 - }, -/obj/item/cell/crap, -/obj/item/cell/crap, -/obj/structure/cable/green{ - d2 = 2; - icon_state = "0-2" - }, -/turf/simulated/floor/tiled, -/area/ship/scrap/maintenance/power) -"DA" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/light{ - dir = 4; - icon_state = "tube1" - }, -/turf/simulated/floor/tiled/dark, -/area/ship/scrap/command/hallway) -"Eq" = ( -/obj/structure/lattice, -/turf/space, -/area/ship/scrap/maintenance/atmos) -"FI" = ( -/obj/machinery/portable_atmospherics/canister/carbon_dioxide, -/turf/simulated/floor/airless, -/area/ship/scrap/maintenance/engine/aft) -"GG" = ( -/obj/effect/paint/brown, -/turf/simulated/wall/r_wall, -/area/ship/scrap/crew/kitchen) -"Hd" = ( -/obj/machinery/portable_atmospherics/canister/nitrogen, -/turf/space, -/area/space) -"HQ" = ( -/obj/machinery/portable_atmospherics/canister/oxygen, -/turf/simulated/floor/reinforced/airless, -/area/ship/scrap/maintenance/atmos) -"IG" = ( -/obj/item/material/shard, -/obj/machinery/atmospherics/unary/outlet_injector{ - dir = 8; - frequency = 1441; - icon_state = "map_injector"; - id = "n2_in"; - use_power = 1 - }, -/turf/simulated/floor/airless, -/area/ship/scrap/maintenance/atmos) -"IL" = ( -/obj/machinery/door/airlock/autoname/bearcat, -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled, -/area/ship/scrap/dock) -"Jy" = ( -/obj/structure/fireaxecabinet{ - pixel_y = 32 - }, -/obj/item/cell/potato, -/turf/simulated/floor/tiled, -/area/ship/scrap/fire) -"JC" = ( -/obj/machinery/light/small{ - dir = 1; - icon_state = "bulb1" - }, -/obj/effect/floor_decal/corner/yellow{ - dir = 5 - }, -/obj/structure/sign/warning/high_voltage{ - pixel_x = 32 - }, -/obj/structure/table/standard, -/obj/item/toy/prize/powerloader, -/obj/item/material/ashtray/plastic, -/obj/machinery/recharger, -/obj/structure/sign/poster{ - pixel_y = 32 - }, -/turf/simulated/floor/tiled, -/area/ship/scrap/maintenance/engineering) -"JH" = ( -/turf/simulated/floor/reinforced/airless, -/area/ship/scrap/maintenance/power) -"Kj" = ( -/turf/simulated/floor/reinforced/airless, -/area/ship/scrap/crew/cryo) -"Lp" = ( -/turf/simulated/floor/reinforced/airless, -/area/ship/scrap/command/bridge) -"Ly" = ( -/obj/effect/paint/brown, -/turf/simulated/wall/r_wall, -/area/ship/scrap/dock) -"LW" = ( -/obj/effect/paint/brown, -/turf/simulated/wall/r_wall, -/area/ship/scrap/fire) -"Mm" = ( -/obj/effect/floor_decal/corner/red/diagonal{ - dir = 4 - }, -/obj/effect/floor_decal/corner/red/diagonal, -/turf/simulated/floor/reinforced/airless, -/area/ship/scrap/maintenance/atmos) -"Mp" = ( -/obj/structure/closet/crate, -/obj/random/loot, -/obj/random/loot, -/obj/item/disk/tech_disk, -/obj/item/disk/tech_disk, -/obj/item/disk/design_disk, -/obj/item/cell/high, -/obj/machinery/alarm{ - dir = 4; - pixel_x = -24; - req_access = newlist() - }, -/turf/simulated/floor, -/area/ship/scrap/hidden) -"Od" = ( -/obj/effect/floor_decal/corner/blue, -/obj/effect/floor_decal/corner/yellow{ - dir = 4 - }, -/obj/machinery/portable_atmospherics/canister/oxygen, -/turf/simulated/floor/tiled/airless, -/area/ship/scrap/maintenance/atmos) -"Ok" = ( -/obj/effect/floor_decal/industrial/warning, -/obj/effect/paint/red, -/turf/simulated/wall/r_wall, -/area/ship/scrap/maintenance/engine/starboard) -"OB" = ( -/obj/structure/lattice, -/obj/structure/cable/green{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/turf/space, -/area/ship/scrap/maintenance/engine/starboard) -"Pm" = ( -/obj/structure/lattice, -/obj/structure/cable/green{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/turf/space, -/area/ship/scrap/maintenance/engine/port) -"PG" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/fuel, -/turf/simulated/floor/airless, -/area/ship/scrap/maintenance/engine/port) -"PP" = ( -/obj/machinery/power/port_gen/pacman/super, -/turf/simulated/floor, -/area/ship/scrap/hidden) -"Qd" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/door/airlock/autoname/bearcat, -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/ship/scrap/cargo) -"Qe" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/fuel{ - dir = 10 - }, -/obj/machinery/meter, -/obj/effect/decal/cleanable/ash, -/turf/simulated/floor/airless, -/area/ship/scrap/maintenance/engine/aft) -"RZ" = ( -/obj/structure/lattice, -/turf/space, -/area/ship/scrap/maintenance/engine/starboard) -"Sm" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/fuel, -/obj/effect/decal/cleanable/molten_item, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/item/device/radio/intercom/map_preset/bearcat{ - pixel_x = -32 - }, -/turf/simulated/floor/airless, -/area/ship/scrap/maintenance/engine/aft) -"Ul" = ( -/obj/effect/paint/brown, -/turf/simulated/wall/r_wall, -/area/ship/scrap/crew/cryo) -"Ur" = ( -/obj/effect/paint/brown, -/turf/simulated/wall/r_wall, -/area/ship/scrap/crew/wash) -"Va" = ( -/obj/effect/paint/brown, -/turf/simulated/wall/r_wall, -/area/ship/scrap/hidden) -"VA" = ( -/obj/effect/wallframe_spawn/reinforced, -/obj/machinery/door/blast/regular{ - density = 0; - dir = 4; - icon_state = "pdoor0"; - id_tag = "scraplock"; - name = "External Blast Doors"; - opacity = 0 - }, -/obj/machinery/door/firedoor, -/obj/machinery/light_switch{ - pixel_x = -25 - }, -/turf/simulated/floor, -/area/ship/scrap/comms) -"Wu" = ( -/obj/effect/decal/cleanable/molten_item, -/turf/simulated/floor/airless, -/area/ship/scrap/maintenance/engine/aft) -"XU" = ( -/obj/structure/sign/redcross, -/turf/simulated/wall, -/area/ship/scrap/crew/medbay) -"Yl" = ( -/obj/structure/lattice, -/turf/simulated/wall/r_wall, -/area/ship/scrap/maintenance/atmos) -"Yv" = ( -/obj/effect/paint/brown, -/turf/simulated/wall/r_wall, -/area/ship/scrap/comms) -"YS" = ( -/obj/effect/floor_decal/corner/red{ - dir = 5 - }, -/obj/effect/decal/cleanable/ash, -/turf/simulated/floor/tiled/airless, -/area/ship/scrap/maintenance/atmos) - -(1,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(2,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(3,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(4,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(5,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(6,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(7,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(8,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(9,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(10,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(11,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(12,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(13,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(14,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(15,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(16,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(17,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(18,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(19,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(20,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(21,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(22,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(23,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(24,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(25,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(26,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(27,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(28,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(29,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -bg -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(30,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(31,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(32,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(33,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(34,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(35,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(36,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(37,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(38,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(39,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(40,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(41,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(42,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(43,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(44,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -dR -dR -Cs -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(45,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -bg -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -dR -dR -dR -fk -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(46,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -dR -dR -eA -eV -fl -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(47,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -dR -dR -eB -eW -fl -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -sy -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(48,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -fF -dR -eC -dR -fk -fF -fF -aa -aa -aa -aa -wp -vs -sy -hM -id -io -id -iO -Yl -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(49,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -km -km -lC -km -GG -aa -fF -Pm -eD -eX -PG -fG -fF -LW -LW -gx -LW -wp -gY -hx -hx -ie -iQ -hw -iP -Eq -id -Yl -Hd -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(50,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -km -km -cr -cQ -cr -dv -GG -dS -ei -GG -Ur -Ur -fH -Ur -LW -ge -gy -ge -gY -hh -hx -hN -ie -hN -hx -iQ -hx -hw -uM -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(51,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ap -aa -aa -aa -aa -aa -aa -aa -aa -bm -bu -bm -aa -aa -aa -km -cr -di -cR -di -dw -dE -dT -ej -eE -eY -fo -fI -fV -gf -gm -gz -gJ -gY -hi -zT -hO -HQ -hx -hx -IG -Mm -hN -hx -hM -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(52,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aq -aa -aa -aa -aa -aa -aa -aa -Ly -Ly -bv -bm -aa -aa -aa -lC -cs -cF -cS -dj -dw -dF -dU -ek -eF -eY -fp -fJ -fW -gf -Jy -gA -gK -gZ -hj -hy -hP -if -iq -hP -iR -jd -YS -jC -hx -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(53,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -Yv -Yv -Yv -hf -Yv -Yv -aa -Ly -be -bw -bK -bT -bY -bY -km -cr -kb -cT -dk -dw -dG -dV -el -eG -eY -fq -fK -fX -ge -go -gB -gL -ha -hk -hz -hQ -ig -ir -iD -iS -je -jr -jD -gY -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(54,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -Yv -Yv -Yv -ar -ar -aN -ar -Yv -aa -Ly -be -bx -bL -Ly -bZ -bZ -ou -cr -cq -cU -cq -dw -dw -dw -em -dw -eY -fr -eY -eY -ge -ge -gC -gf -ha -hl -hA -hR -ih -is -iE -iT -Od -Od -jE -gY -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(55,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -Yv -Yv -ed -ar -aH -aO -aX -Yv -aa -bh -bn -by -bM -bU -ca -ca -ca -ct -cH -cV -dl -dx -dH -dW -en -eH -eZ -fs -fL -fY -gg -gp -gD -gM -ha -ha -hB -gY -gY -gY -gY -gY -gY -gY -hx -jN -jT -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(56,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -Lp -as -ax -aD -aH -aH -aH -VA -aa -bh -bo -bz -bN -Ly -bZ -ch -ck -ck -ck -cW -dm -dy -dy -dy -eo -dy -dy -dy -dy -dy -dy -dy -dy -gN -hb -hm -hC -hS -ii -Sm -iF -iU -jf -js -Wu -jO -vN -jY -jZ -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(57,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -at -at -ar -aI -aP -aY -Yv -Ly -Ly -bp -be -Ly -Ly -aa -ch -cl -cu -cI -cX -dn -dy -dI -dX -ep -eI -fa -ft -ft -ft -ft -ft -dy -gO -hc -hn -hD -hT -ij -iu -iG -iV -jg -jt -jG -jF -jV -jX -jU -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(58,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ac -ag -ai -am -au -ay -ar -ar -aQ -ar -ar -be -bj -bq -bA -Ly -bV -cc -ch -cm -cv -cJ -cY -do -dy -dJ -dY -eq -eJ -fb -ft -fM -ft -ft -ft -dy -gP -hb -ho -hE -hU -ij -iv -iH -iW -jh -ju -jG -Wu -jF -jF -jF -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(59,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ah -aj -an -av -az -aE -aJ -aR -DA -aZ -bf -bk -br -bB -bO -bW -bW -ci -cn -cw -cK -cZ -dp -dz -dK -dZ -er -eK -fc -ft -ft -ft -ft -gq -dz -gQ -hd -hp -hF -hV -ik -iw -iI -iX -ji -jv -jH -jP -jW -jF -jF -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(60,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ac -ag -ak -ao -aw -aA -aC -aC -aS -aC -aC -be -bl -bq -bC -Ly -bV -cc -ch -co -cx -cJ -da -dq -dy -dL -ea -es -eL -fd -ft -ft -ft -ft -gr -dy -gS -hb -hq -hG -hW -ij -ix -iJ -iY -jj -jw -jI -jQ -jW -jF -FI -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(61,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -at -at -aC -aK -aT -ba -nS -Ly -Ly -IL -be -Ly -Ly -aa -ch -cp -cy -cL -db -dr -dy -dM -eb -et -eM -fe -fu -fN -fZ -gh -gs -dy -gS -hb -hr -hG -hX -ij -iy -uf -iZ -jk -jx -Qe -jR -jW -jF -jF -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(62,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -Lp -fE -aB -aF -aL -aU -bb -bd -aa -bh -bs -bD -bP -Ly -ce -ch -ck -ck -ck -cW -ck -dy -dy -dy -Qd -dy -dy -dy -dy -dy -gi -dy -dy -gT -hb -JC -hH -hY -ij -iz -iL -ja -jl -jy -jK -jS -vN -jY -jZ -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(63,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -nS -nS -nS -aC -aM -aV -bc -nS -aa -bh -bt -bE -bQ -bU -cf -cj -cf -cz -cM -dc -ds -dA -dN -ec -eu -eN -ff -fv -fO -ga -gj -gt -gE -gU -he -he -hI -he -hg -he -hg -hg -hg -jz -jL -jL -vN -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(64,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -nS -nS -nS -aC -aC -aW -aC -nS -aa -Ly -be -bF -bR -Ly -ce -ce -cg -cA -cB -dd -cB -dB -XU -dB -ev -dB -dB -fw -fP -fw -gk -gk -gF -gk -he -Dr -hJ -hZ -il -iA -hg -hg -hg -jA -jM -bY -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(65,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -nS -nS -nS -fE -nS -nS -aa -Ly -be -bG -bK -bT -bY -bY -Ul -cB -cN -de -dt -dB -dO -ee -ew -eO -dB -fx -fQ -gb -gl -Mp -gG -PP -he -hu -hK -ia -im -iB -iM -jb -jm -hg -bY -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(66,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -Ly -Ly -bH -bS -bY -aa -aa -Kj -cC -cO -df -du -dC -dP -ef -ex -eP -dD -fy -fR -gc -gl -gv -gH -gW -hg -hv -hL -ib -in -iC -hg -iN -jn -lX -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(67,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -bm -bI -bm -bY -bY -aa -Ul -cD -cP -dg -oa -dB -dQ -eg -ey -eQ -dB -fz -fS -gd -gl -gw -gI -gX -hg -hg -hg -ic -hg -hg -iN -jc -jo -ts -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(68,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -Ul -Ul -cA -dh -cA -so -so -so -ez -so -so -fA -fT -fA -Va -Va -Va -Va -xU -xU -xU -JH -xU -xU -aa -aa -jp -jB -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(69,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -Ul -Ul -Kj -Ul -so -aa -RZ -OB -eR -fg -fm -fU -RZ -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(70,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -RZ -eh -eS -fh -fB -RZ -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(71,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -eh -eh -eT -fi -fC -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(72,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -eh -eh -eU -fj -fC -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(73,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -bg -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -eh -eh -eh -fD -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(74,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -eh -eh -Ok -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(75,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(76,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(77,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(78,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(79,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(80,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(81,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(82,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(83,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(84,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(85,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(86,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(87,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(88,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(89,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -bg -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(90,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(91,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(92,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(93,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(94,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(95,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(96,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(97,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(98,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(99,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(100,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(101,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(102,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(103,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(104,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(105,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(106,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(107,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(108,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(109,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(110,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(111,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(112,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(113,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(114,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(115,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(116,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(117,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(118,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(119,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(120,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} diff --git a/maps/away/bearcat/bearcat.dm b/maps/away/bearcat/bearcat.dm deleted file mode 100644 index e7142dec578d1..0000000000000 --- a/maps/away/bearcat/bearcat.dm +++ /dev/null @@ -1,139 +0,0 @@ -#include "bearcat_areas.dm" -#include "bearcat_jobs.dm" -#include "bearcat_access.dm" -#include "bearcat_radio.dm" - -/obj/effect/submap_landmark/joinable_submap/bearcat - name = "FTV Bearcat" - archetype = /decl/submap_archetype/derelict/bearcat - -/decl/submap_archetype/derelict/bearcat - descriptor = "derelict cargo vessel" - map = "Bearcat Wreck" - crew_jobs = list( - /datum/job/submap/bearcat_captain, - /datum/job/submap/bearcat_crewman - ) - -/obj/effect/overmap/visitable/ship/bearcat - name = "light freighter" - color = "#00ffff" - vessel_mass = 20000 - max_speed = 1/(10 SECONDS) - burn_delay = 10 SECONDS - -/obj/effect/overmap/visitable/ship/bearcat/New() - name = "[pick("FTV","ITV","IEV")] [pick("Bearcat", "Firebug", "Defiant", "Unsinkable","Horizon","Vagrant")]" - for(var/area/ship/scrap/A) - A.name = "\improper [name] - [A.name]" - GLOB.using_map.area_purity_test_exempt_areas += A.type - name = "[name], \a [initial(name)]" - ..() - -/datum/map_template/ruin/away_site/bearcat_wreck - name = "Bearcat Wreck" - id = "awaysite_bearcat_wreck" - description = "A wrecked light freighter." - suffixes = list("bearcat/bearcat-1.dmm", "bearcat/bearcat-2.dmm") - spawn_cost = 1 - player_cost = 4 - shuttles_to_initialise = list(/datum/shuttle/autodock/ferry/lift) - area_usage_test_exempted_root_areas = list(/area/ship) - apc_test_exempt_areas = list( - /area/ship/scrap/maintenance/engine/port = NO_SCRUBBER|NO_VENT, - /area/ship/scrap/maintenance/engine/starboard = NO_SCRUBBER|NO_VENT, - /area/ship/scrap/crew/hallway/port= NO_SCRUBBER|NO_VENT, - /area/ship/scrap/crew/hallway/starboard= NO_SCRUBBER|NO_VENT, - /area/ship/scrap/maintenance/hallway = NO_SCRUBBER|NO_VENT, - /area/ship/scrap/maintenance/lower = NO_SCRUBBER|NO_VENT, - /area/ship/scrap/maintenance/atmos = NO_SCRUBBER, - /area/ship/scrap/escape_port = NO_SCRUBBER|NO_VENT, - /area/ship/scrap/escape_star = NO_SCRUBBER|NO_VENT, - /area/ship/scrap/shuttle/lift = NO_SCRUBBER|NO_VENT|NO_APC, - /area/ship/scrap/command/hallway = NO_SCRUBBER|NO_VENT - ) - spawn_weight = 0.67 - -/datum/shuttle/autodock/ferry/lift - name = "Cargo Lift" - shuttle_area = /area/ship/scrap/shuttle/lift - warmup_time = 3 //give those below some time to get out of the way - waypoint_station = "nav_bearcat_lift_bottom" - waypoint_offsite = "nav_bearcat_lift_top" - sound_takeoff = 'sound/effects/lift_heavy_start.ogg' - sound_landing = 'sound/effects/lift_heavy_stop.ogg' - ceiling_type = null - knockdown = 0 - defer_initialisation = TRUE - -/obj/machinery/computer/shuttle_control/lift - name = "cargo lift controls" - shuttle_tag = "Cargo Lift" - ui_template = "shuttle_control_console_lift.tmpl" - icon_state = "tiny" - icon_keyboard = "tiny_keyboard" - icon_screen = "lift" - density = FALSE - -/obj/effect/shuttle_landmark/lift/top - name = "Top Deck" - landmark_tag = "nav_bearcat_lift_top" - flags = SLANDMARK_FLAG_AUTOSET - -/obj/effect/shuttle_landmark/lift/bottom - name = "Lower Deck" - landmark_tag = "nav_bearcat_lift_bottom" - base_area = /area/ship/scrap/cargo/lower - base_turf = /turf/simulated/floor - -/obj/machinery/power/apc/derelict - cell_type = /obj/item/cell/crap/empty - locked = 0 - coverlocked = 0 - -/obj/machinery/door/airlock/autoname/command - door_color = COLOR_COMMAND_BLUE - -/obj/machinery/door/airlock/autoname/engineering - door_color = COLOR_AMBER - -/obj/effect/landmark/deadcap - name = "Dead Captain" - -/obj/effect/landmark/deadcap/Initialize() - ..() - return INITIALIZE_HINT_LATELOAD - -/obj/effect/landmark/deadcap/LateInitialize() - var/turf/T = get_turf(src) - var/mob/living/carbon/human/corpse = new(T) - scramble(1, corpse, 100) - corpse.real_name = "Captain" - corpse.name = "Captain" - var/decl/hierarchy/outfit/outfit = outfit_by_type(/decl/hierarchy/outfit/deadcap) - outfit.equip(corpse) - corpse.adjustOxyLoss(corpse.maxHealth) - corpse.setBrainLoss(corpse.maxHealth) - var/obj/structure/bed/chair/C = locate() in T - if (C) - C.buckle_mob(corpse) - qdel(src) - -/decl/hierarchy/outfit/deadcap - name = "Derelict Captain" - uniform = /obj/item/clothing/under/casual_pants/classicjeans - suit = /obj/item/clothing/suit/storage/hooded/wintercoat - shoes = /obj/item/clothing/shoes/black - r_pocket = /obj/item/device/radio/map_preset/bearcat - -/decl/hierarchy/outfit/deadcap/post_equip(mob/living/carbon/human/H) - ..() - var/obj/item/clothing/uniform = H.w_uniform - if(uniform) - var/obj/item/clothing/accessory/toggleable/hawaii/random/eyegore = new() - if(uniform.can_attach_accessory(eyegore)) - uniform.attach_accessory(null, eyegore) - else - qdel(eyegore) - var/obj/item/cell/super/C = new() - H.put_in_any_hand_if_possible(C) diff --git a/maps/away/bearcat/bearcat_access.dm b/maps/away/bearcat/bearcat_access.dm deleted file mode 100644 index 04134abbb7e60..0000000000000 --- a/maps/away/bearcat/bearcat_access.dm +++ /dev/null @@ -1,47 +0,0 @@ -var/global/const/access_bearcat = "ACCESS_BEARCAT" //998 -/datum/access/bearcat - id = access_bearcat - desc = "FTU Crewman" - region = ACCESS_REGION_NONE - -var/global/const/access_bearcat_captain = "ACCESS_BEARCAT_CAPTAIN" //999 -/datum/access/bearcat_captain - id = access_bearcat_captain - desc = "FTU Captain" - region = ACCESS_REGION_NONE - -/obj/item/card/id/bearcat - access = list(access_bearcat) - -/obj/item/card/id/bearcat_captain - access = list(access_bearcat, access_bearcat_captain) - -/obj/machinery/door/airlock/autoname/bearcat - -/obj/machinery/door/airlock/autoname/engineering/bearcat - -/obj/machinery/door/airlock/autoname/command/bearcat - -/obj/structure/closet/secure_closet/engineering_electrical/bearcat - req_access = list(access_bearcat) - -/obj/structure/closet/secure_closet/engineering_welding/bearcat - req_access = list(access_bearcat) - -/obj/structure/closet/secure_closet/freezer/fridge/bearcat - req_access = list(access_bearcat) - -/obj/structure/closet/secure_closet/freezer/meat/bearcat - req_access = list(access_bearcat) - -/obj/machinery/vending/engineering/bearcat - req_access = list(access_bearcat) - -/obj/machinery/vending/tool/bearcat - req_access = list(access_bearcat) - -/obj/machinery/suit_storage_unit/engineering/salvage/bearcat - req_access = list(access_bearcat) - -/obj/machinery/suit_cycler/salvage/bearcat - req_access = list(access_bearcat) \ No newline at end of file diff --git a/maps/away/bearcat/bearcat_areas.dm b/maps/away/bearcat/bearcat_areas.dm deleted file mode 100644 index e73455e54c5aa..0000000000000 --- a/maps/away/bearcat/bearcat_areas.dm +++ /dev/null @@ -1,169 +0,0 @@ -/area/ship/scrap - name = "Generic Ship" - ambience = list('sound/ambience/ambigen3.ogg','sound/ambience/ambigen4.ogg','sound/ambience/ambigen5.ogg','sound/ambience/ambigen6.ogg','sound/ambience/ambigen7.ogg','sound/ambience/ambigen8.ogg','sound/ambience/ambigen9.ogg','sound/ambience/ambigen10.ogg','sound/ambience/ambigen11.ogg','sound/ambience/ambigen12.ogg') - -/area/ship/scrap/crew - name = "Crew Compartements" - icon_state = "crew_quarters" - -/area/ship/scrap/crew/hallway/port - name = "Crew Hallway - Port" - -/area/ship/scrap/crew/hallway/starboard - name = "Crew Hallway - Starboard" - -/area/ship/scrap/crew/kitchen - name = "Galley" - icon_state = "kitchen" - -/area/ship/scrap/crew/cryo - name = "Cryo Storage" - icon_state = "cryo" - -/area/ship/scrap/crew/dorms1 - name = "Crew Cabin #1" - icon_state = "green" - -/area/ship/scrap/crew/dorms2 - name = "Crew Cabin #2" - icon_state = "purple" - -/area/ship/scrap/crew/dorms3 - name = "Crew Cabin #3" - icon_state = "yellow" - -/area/ship/scrap/crew/saloon - name = "Saloon" - icon_state = "conference" - -/area/ship/scrap/crew/toilets - name = "Bathrooms" - icon_state = "toilet" - turf_initializer = /decl/turf_initializer/maintenance - -/area/ship/scrap/crew/wash - name = "Washroom" - icon_state = "locker" - -/area/ship/scrap/crew/medbay - name = "Medical Bay" - icon_state = "medbay" - -/area/ship/scrap/cargo - name = "Cargo Hold" - icon_state = "quartstorage" - -/area/ship/scrap/cargo/lower - name = "Lower Cargo Hold" - -/area/ship/scrap/dock - name = "Docking Bay" - icon_state = "entry_1" - -/area/ship/scrap/fire - name = "Firefighting Equipment Comparment" - icon_state = "green" - -/area/ship/scrap/tcomms - name = "Telecomms Compartment" - icon_state = "yellow" - -/area/ship/scrap/hidden - name = "Unknown" //shielded compartment - icon_state = "auxstorage" - -/area/ship/scrap/escape_port - name = "Port Escape Pods" - icon_state = "green" - -/area/ship/scrap/escape_star - name = "Starboard Escape Pods" - icon_state = "yellow" - -/area/ship/scrap/broken1 - name = "Robotic Maintenance" - icon_state = "green" - -/area/ship/scrap/broken2 - name = "Compartment 1-B" - icon_state = "yellow" - -/area/ship/scrap/gambling - name = "Compartment 1-C" - icon_state = "cave" - -/area/ship/scrap/maintenance - name = "Maintenance Compartments" - icon_state = "amaint" - req_access = list(access_bearcat) - -/area/ship/scrap/maintenance/hallway - name = "Maintenance Corridors" - -/area/ship/scrap/maintenance/lower - name = "Lower Deck Maintenance Compartments" - icon_state = "sub_maint_aft" - -/area/ship/scrap/maintenance/storage - name = "Tools Storage" - icon_state = "engineering_storage" - -/area/ship/scrap/maintenance/techstorage - name = "Parts Storage" - icon_state = "engineering_supply" - -/area/ship/scrap/maintenance/eva - name = "EVA Storage" - icon_state = "eva" - -/area/ship/scrap/maintenance/engineering - name = "Engineering Bay" - icon_state = "engineering_supply" - -/area/ship/scrap/maintenance/atmos - name = "Atmospherics Comparment" - icon_state = "atmos" - ambience = list('sound/ambience/ambigen3.ogg','sound/ambience/ambigen4.ogg','sound/ambience/ambigen5.ogg','sound/ambience/ambigen6.ogg','sound/ambience/ambigen7.ogg','sound/ambience/ambigen8.ogg','sound/ambience/ambigen9.ogg','sound/ambience/ambigen10.ogg','sound/ambience/ambigen11.ogg','sound/ambience/ambiatm1.ogg') - -/area/ship/scrap/maintenance/power - name = "Power Compartment" - icon_state = "engine_smes" - ambience = list('sound/ambience/ambigen3.ogg','sound/ambience/ambigen4.ogg','sound/ambience/ambigen5.ogg','sound/ambience/ambigen6.ogg','sound/ambience/ambigen7.ogg','sound/ambience/ambigen8.ogg','sound/ambience/ambigen9.ogg','sound/ambience/ambigen10.ogg','sound/ambience/ambigen11.ogg','sound/ambience/ambieng1.ogg') - -/area/ship/scrap/maintenance/engine - icon_state = "engine" - ambience = list('sound/ambience/ambigen3.ogg','sound/ambience/ambigen4.ogg','sound/ambience/ambigen5.ogg','sound/ambience/ambigen6.ogg','sound/ambience/ambigen7.ogg','sound/ambience/ambigen8.ogg','sound/ambience/ambigen9.ogg','sound/ambience/ambigen10.ogg','sound/ambience/ambigen11.ogg','sound/ambience/ambieng1.ogg') - -/area/ship/scrap/maintenance/engine/aft - name = "Main Engine Bay" - -/area/ship/scrap/maintenance/engine/port - name = "Port Thruster" - -/area/ship/scrap/maintenance/engine/starboard - name = "Starboard Thruster" - -/area/ship/scrap/command/hallway - name = "Command Deck" - icon_state = "centcom" - req_access = list(access_bearcat) - -/area/ship/scrap/command/bridge - name = "Bridge" - icon_state = "bridge" - req_access = list(access_bearcat) - -/area/ship/scrap/command/captain - name = "Captain's Quarters" - icon_state = "captain" - req_access = list(access_bearcat_captain) - -/area/ship/scrap/comms - name = "Communications Relay" - icon_state = "tcomsatcham" - ambience = list('sound/ambience/ambigen3.ogg','sound/ambience/ambigen4.ogg','sound/ambience/signal.ogg','sound/ambience/sonar.ogg') - -/area/ship/scrap/shuttle/lift - name = "Cargo Lift" - icon_state = "shuttle3" - base_turf = /turf/simulated/open diff --git a/maps/away/bearcat/bearcat_jobs.dm b/maps/away/bearcat/bearcat_jobs.dm deleted file mode 100644 index e1912f861ea56..0000000000000 --- a/maps/away/bearcat/bearcat_jobs.dm +++ /dev/null @@ -1,56 +0,0 @@ -/datum/job/submap/bearcat_captain - title = "Independant Captain" - total_positions = 1 - outfit_type = /decl/hierarchy/outfit/job/bearcat/captain - supervisors = "your bottom line" - info = "Your ship has suffered a catastrophic amount of damage, leaving it dark and crippled in the depths of \ - unexplored space. The Captain is dead, leaving you, previously the First Mate in charge. Organize what's left of \ - your crew, and maybe you'll be able to survive long enough to be rescued." - -/datum/job/submap/bearcat_crewman - title = "Independant Crewman" - supervisors = "the Captain" - total_positions = 3 - outfit_type = /decl/hierarchy/outfit/job/bearcat/crew - info = "Your ship has suffered a catastrophic amount of damage, leaving it dark and crippled in the depths of \ - unexplored space. Work together with the Acting Captain and what's left of the crew, and maybe you'll be able \ - to survive long enough to be rescued." - -#define BEARCAT_OUTFIT_JOB_NAME(job_name) ("Bearcat - Job - " + job_name) - -/decl/hierarchy/outfit/job/bearcat - hierarchy_type = /decl/hierarchy/outfit/job/bearcat - pda_type = /obj/item/modular_computer/pda - pda_slot = slot_l_store - r_pocket = /obj/item/device/radio/map_preset/bearcat - l_ear = /obj/item/device/radio/headset/map_preset/bearcat - r_ear = null - -/decl/hierarchy/outfit/job/bearcat/crew - name = BEARCAT_OUTFIT_JOB_NAME("Crew") - id_types = list(/obj/item/card/id/bearcat) - -/decl/hierarchy/outfit/job/bearcat/captain - name = BEARCAT_OUTFIT_JOB_NAME("Captain") - uniform = /obj/item/clothing/under/casual_pants/classicjeans - shoes = /obj/item/clothing/shoes/black - pda_type = /obj/item/modular_computer/pda/captain - id_types = list(/obj/item/card/id/bearcat_captain) - -/decl/hierarchy/outfit/job/bearcat/captain/post_equip(var/mob/living/carbon/human/H) - ..() - var/obj/item/clothing/uniform = H.w_uniform - if(uniform) - var/obj/item/clothing/accessory/toggleable/hawaii/random/eyegore = new() - if(uniform.can_attach_accessory(eyegore)) - uniform.attach_accessory(null, eyegore) - else - qdel(eyegore) - -#undef BEARCAT_OUTFIT_JOB_NAME - -/obj/effect/submap_landmark/spawnpoint/captain - name = "Independant Captain" - -/obj/effect/submap_landmark/spawnpoint/crewman - name = "Independant Crewman" diff --git a/maps/away/bearcat/bearcat_radio.dm b/maps/away/bearcat/bearcat_radio.dm deleted file mode 100644 index de28696a45774..0000000000000 --- a/maps/away/bearcat/bearcat_radio.dm +++ /dev/null @@ -1,31 +0,0 @@ -/obj/machinery/telecomms/hub/map_preset/bearcat - preset_name = "Bearcat" - -/obj/machinery/telecomms/receiver/map_preset/bearcat - preset_name = "Bearcat" - -/obj/machinery/telecomms/bus/map_preset/bearcat - preset_name = "Bearcat" - -/obj/machinery/telecomms/processor/map_preset/bearcat - preset_name = "Bearcat" - -/obj/machinery/telecomms/server/map_preset/bearcat - preset_name = "Bearcat" - preset_color = COMMS_COLOR_BEARCAT - -/obj/machinery/telecomms/broadcaster/map_preset/bearcat - preset_name = "Bearcat" - -/obj/item/device/radio/map_preset/bearcat - preset_name = "Bearcat" - -/obj/item/device/radio/intercom/map_preset/bearcat - preset_name = "Bearcat" - -/obj/item/device/encryptionkey/map_preset/bearcat - preset_name = "Bearcat" - -/obj/item/device/radio/headset/map_preset/bearcat - preset_name = "Bearcat" - encryption_key = /obj/item/device/encryptionkey/map_preset/bearcat diff --git a/maps/away/blueriver/blueriver-1.dmm b/maps/away/blueriver/blueriver-1.dmm deleted file mode 100644 index f2ff2281ec92f..0000000000000 --- a/maps/away/blueriver/blueriver-1.dmm +++ /dev/null @@ -1,10337 +0,0 @@ -//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE -"a" = ( -/turf/unsimulated/mineral{ - temperature = 233 - }, -/area/bluespaceriver/underground) -"b" = ( -/turf/unsimulated/wall/supermatter/no_spread, -/area/bluespaceriver/underground) -"c" = ( -/turf/unsimulated/wall/away/blueriver/livingwall, -/area/bluespaceriver/underground) -"e" = ( -/obj/machinery/crystal_static{ - alpha = 120; - anchored = 1; - color = "BLUE"; - desc = "Slightly transparent. You are not sure what it is." - }, -/turf/simulated/floor/away/blueriver/alienfloor, -/area/bluespaceriver/underground) -"f" = ( -/turf/simulated/floor/away/blueriver/alienfloor, -/area/bluespaceriver/underground) -"g" = ( -/obj/machinery/replicator{ - alpha = 150; - anchored = 1; - color = "BLUE" - }, -/turf/simulated/floor/away/blueriver/alienfloor, -/area/bluespaceriver/underground) -"h" = ( -/obj/item/pickaxe/xeno/brush, -/turf/simulated/floor/away/blueriver/alienfloor, -/area/bluespaceriver/underground) -"i" = ( -/obj/item/pickaxe/xeno/six_pick, -/obj/item/device/measuring_tape, -/turf/simulated/floor/away/blueriver/alienfloor, -/area/bluespaceriver/underground) -"j" = ( -/obj/item/device/camera, -/turf/simulated/floor/away/blueriver/alienfloor, -/area/bluespaceriver/underground) -"k" = ( -/turf/simulated/floor/asteroid, -/area/bluespaceriver/underground) -"l" = ( -/obj/item/gun/energy/plasmacutter, -/obj/item/device/depth_scanner, -/turf/simulated/floor/asteroid, -/area/bluespaceriver/underground) -"m" = ( -/mob/living/simple_animal/hostile/hive_alien/defender, -/turf/simulated/floor/away/blueriver/alienfloor, -/area/bluespaceriver/underground) -"n" = ( -/obj/item/roller, -/turf/simulated/floor/asteroid, -/area/bluespaceriver/underground) -"o" = ( -/obj/structure/ladder/up, -/turf/simulated/floor/asteroid, -/area/bluespaceriver/underground) -"p" = ( -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/bluespaceriver/underground) -"q" = ( -/obj/item/crowbar, -/turf/simulated/floor/asteroid, -/area/bluespaceriver/underground) -"r" = ( -/obj/structure/barricade, -/turf/simulated/floor/asteroid, -/area/bluespaceriver/underground) -"s" = ( -/obj/item/cell/infinite{ - alpha = 130; - color = "BLUE"; - desc = "This looks like an alien power cell. You can make out both of the connections relatively clearly though."; - icon = 'icons/obj/grenade.dmi'; - icon_state = "delivery"; - name = "alien power cell" - }, -/turf/simulated/floor/away/blueriver/alienfloor, -/area/bluespaceriver/underground) -"t" = ( -/obj/item/device/geiger, -/turf/simulated/floor/asteroid, -/area/bluespaceriver/underground) -"u" = ( -/obj/item/pickaxe/drill, -/turf/simulated/floor/asteroid, -/area/bluespaceriver/underground) -"v" = ( -/obj/structure/deity{ - alpha = 130; - color = "BLUE"; - desc = "Looks like an eerie transparent table. It emits a soft glow. " - }, -/obj/item/gun/energy/decloner{ - color = "BLUE"; - desc = "A strange unerganomic pistol clearly not designed for a human hand. You are surprised that it actually has a trigger."; - name = "strange gun" - }, -/turf/simulated/floor/away/blueriver/alienfloor, -/area/bluespaceriver/underground) -"w" = ( -/obj/structure/closet/excavation, -/turf/simulated/floor/asteroid, -/area/bluespaceriver/underground) -"x" = ( -/obj/machinery/crystal_static{ - alpha = 120; - anchored = 1; - color = "BLUE"; - desc = "Slightly transparent. You are not sure what it is." - }, -/turf/simulated/floor/asteroid, -/area/bluespaceriver/underground) -"y" = ( -/obj/machinery/giga_drill{ - alpha = 129; - color = "BLUE" - }, -/turf/simulated/floor/away/blueriver/alienfloor, -/area/bluespaceriver/underground) -"z" = ( -/obj/machinery/artifact{ - alpha = 123; - color = "BLUE" - }, -/turf/simulated/floor/away/blueriver/alienfloor, -/area/bluespaceriver/underground) - -(1,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(2,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(3,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(4,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(5,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(6,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(7,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(8,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(9,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(10,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(11,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(12,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(13,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(14,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(15,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(16,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(17,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(18,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(19,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(20,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(21,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(22,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -k -k -k -w -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(23,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -k -o -k -k -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(24,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -k -k -k -k -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(25,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -k -k -k -k -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(26,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -k -k -k -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(27,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -k -k -b -b -b -b -b -b -b -b -b -b -b -b -b -a -a -a -a -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -"} -(28,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -p -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -"} -(29,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -p -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -"} -(30,1,1) = {" -a -a -a -a -a -a -a -a -a -b -b -b -b -b -b -b -b -a -a -a -a -a -a -a -a -a -a -a -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -c -b -b -b -p -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -"} -(31,1,1) = {" -a -a -a -a -a -a -a -a -a -b -b -b -b -b -b -b -b -b -b -b -b -b -b -a -a -a -a -a -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -c -c -b -b -b -b -c -c -b -b -b -p -b -b -b -b -b -c -c -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -"} -(32,1,1) = {" -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -c -c -c -c -b -b -b -c -b -b -b -b -p -b -b -b -b -c -c -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -"} -(33,1,1) = {" -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -c -c -c -c -b -b -b -b -b -b -b -b -p -b -b -b -b -b -c -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -"} -(34,1,1) = {" -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -c -c -b -b -b -b -b -b -b -p -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -a -a -"} -(35,1,1) = {" -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -p -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -a -a -a -a -a -a -a -a -"} -(36,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -p -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -a -a -a -a -a -a -a -a -a -"} -(37,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -p -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -a -a -a -b -b -b -b -b -b -b -b -b -b -b -b -b -b -a -a -a -a -a -a -a -a -a -a -a -"} -(38,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -a -b -b -b -a -b -b -p -b -b -b -b -b -b -b -b -b -b -b -b -b -a -a -a -a -a -a -a -a -b -b -b -b -b -b -b -b -b -b -a -a -a -a -a -a -a -a -a -a -a -a -"} -(39,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -a -a -b -a -a -a -b -b -p -b -b -b -b -b -b -b -b -b -b -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(40,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -a -a -a -a -a -a -a -a -a -k -t -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(41,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -b -b -a -b -b -b -a -a -a -a -a -b -b -c -c -c -c -c -c -c -c -c -a -a -a -a -a -a -k -k -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(42,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -a -a -a -a -a -a -b -b -b -e -f -f -f -f -f -f -k -k -k -k -k -k -k -k -k -x -k -k -k -k -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(43,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -c -b -e -e -h -j -f -f -f -f -c -l -k -k -k -k -n -k -k -k -k -k -k -k -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(44,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -c -c -f -g -i -f -f -f -e -f -c -a -a -a -a -a -a -k -k -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(45,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -c -c -c -f -e -f -f -f -f -f -c -a -a -a -a -a -a -k -k -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(46,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -c -c -c -c -f -c -c -e -f -e -c -a -a -a -a -a -a -k -k -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(47,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -c -a -c -c -c -c -c -c -f -f -c -a -a -a -a -a -a -k -k -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(48,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -c -c -c -c -c -f -c -a -a -a -a -a -a -k -k -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(49,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -c -c -c -c -c -c -a -a -a -a -a -a -k -k -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(50,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -c -a -c -c -c -c -c -a -a -a -a -a -a -k -k -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(51,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -q -u -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(52,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -c -c -r -r -c -c -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(53,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -c -c -c -e -f -f -e -c -c -c -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(54,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -c -c -c -f -f -f -y -f -c -c -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(55,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -c -e -c -f -f -f -f -f -e -c -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(56,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -c -e -e -f -f -f -f -f -z -c -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(57,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -c -e -f -f -f -f -f -c -c -c -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(58,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -c -f -m -e -s -v -c -c -c -c -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(59,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -c -f -f -c -c -c -c -c -c -c -c -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(60,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -c -c -c -c -c -c -c -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(61,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(62,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(63,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(64,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(65,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(66,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(67,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(68,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(69,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(70,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(71,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(72,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(73,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(74,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(75,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(76,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(77,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(78,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(79,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(80,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(81,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(82,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(83,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(84,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(85,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(86,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(87,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(88,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(89,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(90,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(91,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(92,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(93,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(94,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(95,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(96,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(97,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(98,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(99,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(100,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} diff --git a/maps/away/blueriver/blueriver-2.dmm b/maps/away/blueriver/blueriver-2.dmm deleted file mode 100644 index 01dffa88e6d30..0000000000000 --- a/maps/away/blueriver/blueriver-2.dmm +++ /dev/null @@ -1,11047 +0,0 @@ -//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE -"aa" = ( -/turf/unsimulated/mineral{ - temperature = 233 - }, -/area/bluespaceriver/ground) -"ab" = ( -/turf/unsimulated/mask{ - temperature = 230 - }, -/area/bluespaceriver/ground) -"ac" = ( -/turf/simulated/floor/exoplanet/snow{ - temperature = 240 - }, -/area/bluespaceriver/ground) -"ad" = ( -/obj/structure/flora/grass/brown, -/turf/simulated/floor/exoplanet/snow{ - temperature = 240 - }, -/area/bluespaceriver/ground) -"ae" = ( -/obj/structure/flora/tree/pine, -/turf/simulated/floor/exoplanet/snow{ - temperature = 240 - }, -/area/bluespaceriver/ground) -"af" = ( -/obj/structure/flora/bush, -/turf/simulated/floor/exoplanet/snow{ - temperature = 240 - }, -/area/bluespaceriver/ground) -"ag" = ( -/obj/structure/flora/bush, -/obj/structure/flora/grass/both, -/turf/simulated/floor/exoplanet/snow{ - temperature = 240 - }, -/area/bluespaceriver/ground) -"ah" = ( -/obj/structure/flora/grass/green, -/turf/simulated/floor/exoplanet/snow{ - temperature = 240 - }, -/area/bluespaceriver/ground) -"ai" = ( -/obj/structure/flora/grass/both, -/turf/simulated/floor/exoplanet/snow{ - temperature = 240 - }, -/area/bluespaceriver/ground) -"aj" = ( -/obj/structure/flora/ausbushes/brflowers, -/turf/simulated/floor/exoplanet/snow{ - temperature = 240 - }, -/area/bluespaceriver/ground) -"ak" = ( -/obj/effect/shuttle_landmark/nav_blueriv/nav3, -/turf/simulated/floor/exoplanet/snow{ - temperature = 240 - }, -/area/bluespaceriver/ground) -"al" = ( -/obj/effect/overmap/visitable/sector/arcticplanet{ - desc = "Sensors show an arctic planet with a small vessel on the surface. The vessel is located in the western region of a trough surrounded by mineral-rich mountains on all four sides. Scans further indicate strange energy emissions from below the planet's surface. Sunrise is expected in 56 hours." - }, -/turf/simulated/floor/exoplanet/snow{ - temperature = 240 - }, -/area/bluespaceriver/ground) -"am" = ( -/obj/effect/shuttle_landmark/nav_blueriv/nav1, -/turf/simulated/floor/exoplanet/snow{ - temperature = 240 - }, -/area/bluespaceriver/ground) -"an" = ( -/obj/effect/wallframe_spawn/reinforced, -/turf/simulated/floor, -/area/bluespaceriver/ship) -"ao" = ( -/obj/machinery/computer/power_monitor, -/turf/simulated/floor/tiled, -/area/bluespaceriver/ship) -"ap" = ( -/obj/machinery/computer/ship/helm, -/turf/simulated/floor/tiled, -/area/bluespaceriver/ship) -"aq" = ( -/obj/machinery/computer/ship/sensors, -/turf/simulated/floor/tiled, -/area/bluespaceriver/ship) -"ar" = ( -/obj/machinery/computer/ship/engines, -/turf/simulated/floor/tiled, -/area/bluespaceriver/ship) -"as" = ( -/obj/machinery/light, -/turf/simulated/floor/exoplanet/snow{ - temperature = 240 - }, -/area/bluespaceriver/ship) -"at" = ( -/obj/structure/table/reinforced, -/obj/machinery/recharger/wallcharger{ - pixel_y = -24 - }, -/obj/item/storage/pill_bottle/antitox, -/obj/item/cell/standard, -/obj/item/storage/box/matches, -/obj/random/maintenance/clean, -/obj/random/cash, -/obj/item/paper{ - info = "We've landed, and aside from the permafrost, there's not a lot to mention on this rock. The readings are strongest in the middle of an open field near the ship, but there's nothing there, meaning we really only have one choice. Digging down. One of the others thinks theres a good chance that it's underground, so we might as well see if they're onto something. We don't have any other decent plans, and we need this find. Fortunate we brought the larger scale excavation equipment." - }, -/turf/simulated/floor/tiled, -/area/bluespaceriver/ship) -"au" = ( -/turf/simulated/floor/tiled, -/area/bluespaceriver/ship) -"av" = ( -/obj/structure/bed/chair/comfy/black{ - dir = 1 - }, -/obj/machinery/atmospherics/unary/vent_pump/on, -/turf/simulated/floor/tiled, -/area/bluespaceriver/ship) -"aw" = ( -/obj/structure/bed/chair/comfy/black{ - dir = 1 - }, -/turf/simulated/floor/tiled, -/area/bluespaceriver/ship) -"ax" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/obj/machinery/light, -/turf/simulated/floor/tiled, -/area/bluespaceriver/ship) -"ay" = ( -/turf/simulated/wall/titanium, -/area/bluespaceriver/ship) -"az" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/wall/titanium, -/area/bluespaceriver/ship) -"aA" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/wall/titanium, -/area/bluespaceriver/ship) -"aB" = ( -/obj/machinery/door/airlock/command, -/turf/simulated/floor/tiled, -/area/bluespaceriver/ship) -"aC" = ( -/obj/machinery/vending/boozeomat{ - req_access = list() - }, -/turf/simulated/wall/titanium, -/area/bluespaceriver/ship) -"aD" = ( -/obj/machinery/computer/rdconsole, -/turf/simulated/floor/tiled, -/area/bluespaceriver/ship) -"aE" = ( -/obj/machinery/r_n_d/server, -/obj/machinery/light{ - dir = 1 - }, -/turf/simulated/floor/tiled, -/area/bluespaceriver/ship) -"aF" = ( -/obj/structure/handrail, -/turf/simulated/floor/tiled, -/area/bluespaceriver/ship) -"aG" = ( -/obj/machinery/door/airlock/science, -/turf/simulated/floor/tiled, -/area/bluespaceriver/ship) -"aH" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/handrail, -/obj/item/stool/padded, -/turf/simulated/floor/tiled, -/area/bluespaceriver/ship) -"aI" = ( -/obj/machinery/vending/wallmed1{ - name = "Emergency NanoMed"; - pixel_y = 29 - }, -/obj/structure/table/woodentable, -/obj/item/pizzabox, -/obj/machinery/light{ - dir = 1 - }, -/obj/item/material/knife/table, -/obj/item/paper{ - info = "Well, it didn't take the three days I was betting on, so i'm out twenty bucks, but we managed to punch through into a cave of some sort with the drilling equipment. We're lowering a ladder down now and sending one of the guards down to check that there's no spiders in there or anything. Once they report back, we'll Move the whole basecamp down there, and- SO, We've moved down into the cave now, and what we've found is astounding! It looks a LOT like a lake or river of blue goo, but... not? I took some scans, but couldn't pick anything up aside from radiation spikes from the pool. I also lowered a swab into the fluid to take a sample, but when I touched the swab to the surface of the... Fluid? the Swab just... Ceased And yes, that's the best way to describe it. it just stopped existing in my hand. We figure it's best we DON'T touch the blue stuff for now. one of our help has started moving supplies down into the cave to build a bridge of sorts though across the pool. We spotted some sort of structure on the far side, and the bridge is the only way to get to it, so now we wait." - }, -/turf/simulated/floor/tiled, -/area/bluespaceriver/ship) -"aJ" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/item/stool/padded, -/turf/simulated/floor/tiled, -/area/bluespaceriver/ship) -"aK" = ( -/obj/random/maintenance/clean, -/turf/simulated/floor/tiled, -/area/bluespaceriver/ship) -"aL" = ( -/obj/structure/table/steel, -/obj/machinery/chemical_dispenser/bar_coffee, -/turf/simulated/floor/tiled, -/area/bluespaceriver/ship) -"aM" = ( -/obj/machinery/r_n_d/protolathe, -/obj/item/paper{ - info = "Well, it only took three weeks... this trip... but we finally found something worth investigating! An energy signature, just on or under the planet's surface. It's bizarre, similar to a bluespace signature, but... not. I'll need to get down there to really get a reading on it, but this could be the kind of discovery that makes a career. We've identified a landing site, so our pilot is setting the ship down there in the next couple of hours. it'll take some more time after that to set up a base camp and such." - }, -/turf/simulated/floor/tiled, -/area/bluespaceriver/ship) -"aN" = ( -/obj/structure/bed/chair/office/light, -/turf/simulated/floor/tiled, -/area/bluespaceriver/ship) -"aO" = ( -/obj/machinery/smartfridge/chemistry, -/turf/simulated/wall/titanium, -/area/bluespaceriver/ship) -"aP" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/item/stool/padded, -/turf/simulated/floor/tiled, -/area/bluespaceriver/ship) -"aQ" = ( -/obj/structure/table/woodentable, -/obj/item/storage/lunchbox/nt, -/turf/simulated/floor/tiled, -/area/bluespaceriver/ship) -"aR" = ( -/obj/structure/table/steel, -/obj/item/storage/box/glasses/mug, -/turf/simulated/floor/tiled, -/area/bluespaceriver/ship) -"aS" = ( -/obj/structure/table/steel, -/obj/machinery/microwave, -/turf/simulated/floor/tiled, -/area/bluespaceriver/ship) -"aT" = ( -/obj/machinery/r_n_d/destructive_analyzer, -/turf/simulated/floor/tiled, -/area/bluespaceriver/ship) -"aU" = ( -/obj/machinery/chemical_dispenser, -/turf/simulated/floor/tiled, -/area/bluespaceriver/ship) -"aV" = ( -/obj/machinery/chem_master, -/turf/simulated/floor/tiled, -/area/bluespaceriver/ship) -"aW" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/alarm{ - dir = 4; - pixel_x = -25; - rcon_setting = 3 - }, -/turf/simulated/floor/tiled, -/area/bluespaceriver/ship) -"aX" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled, -/area/bluespaceriver/ship) -"aY" = ( -/obj/machinery/atmospherics/unary/vent_pump/on, -/turf/simulated/floor/tiled, -/area/bluespaceriver/ship) -"aZ" = ( -/obj/structure/table/steel, -/obj/machinery/atmospherics/unary/vent_pump/on, -/obj/machinery/light{ - dir = 4; - icon_state = "tube1" - }, -/obj/random/maintenance/clean, -/turf/simulated/floor/tiled, -/area/bluespaceriver/ship) -"ba" = ( -/obj/effect/wallframe_spawn/reinforced, -/turf/simulated/floor/plating, -/area/bluespaceriver/ship) -"bb" = ( -/obj/machinery/r_n_d/circuit_imprinter, -/obj/item/device/ano_scanner, -/obj/item/paper{ - info = "I don't understand where they could have gone, but one of the researchers and a guard disappeared last night. We've started looking for them, figuring maybe they got trapped somewhere in the ruins, maybe a booby trap or something that was still functioning, but we haven't seen any sign of them. Their equipment, both of their equipment, is still in the ship, and there's no signs of anything grabbing them in the night, they're just... Gone. Tomorrow morning we head back into space to go resupply and submit what we've found so far, but when we come back we'll have more than enough manpower to really dig into this place." - }, -/turf/simulated/floor/tiled, -/area/bluespaceriver/ship) -"bc" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 4 - }, -/obj/item/reagent_containers/spray, -/turf/simulated/floor/tiled, -/area/bluespaceriver/ship) -"bd" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 4; - level = 2 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/bluespaceriver/ship) -"be" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/artifact_harvester, -/obj/machinery/light{ - dir = 4; - icon_state = "tube1" - }, -/turf/simulated/floor/tiled, -/area/bluespaceriver/ship) -"bf" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/wall/titanium, -/area/bluespaceriver/ship) -"bg" = ( -/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/bluespaceriver/ship) -"bh" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 1 - }, -/obj/structure/closet/emcloset, -/turf/simulated/floor/tiled, -/area/bluespaceriver/ship) -"bi" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, -/turf/simulated/floor/tiled, -/area/bluespaceriver/ship) -"bj" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/light, -/obj/structure/filingcabinet, -/turf/simulated/floor/tiled, -/area/bluespaceriver/ship) -"bk" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/bluespaceriver/ship) -"bl" = ( -/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/turf/simulated/floor/tiled, -/area/bluespaceriver/ship) -"bm" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/wall/titanium, -/area/bluespaceriver/ship) -"bn" = ( -/obj/structure/bed/padded, -/obj/item/bedsheet/rd, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 8; - level = 2 - }, -/turf/simulated/floor/tiled, -/area/bluespaceriver/ship) -"bo" = ( -/obj/machinery/light{ - dir = 4; - icon_state = "tube1" - }, -/turf/simulated/floor/exoplanet/snow{ - temperature = 240 - }, -/area/bluespaceriver/ship) -"bp" = ( -/obj/machinery/fabricator, -/turf/simulated/floor/tiled, -/area/bluespaceriver/ship) -"bq" = ( -/obj/structure/bed/chair/office/light, -/obj/machinery/light, -/turf/simulated/floor/tiled, -/area/bluespaceriver/ship) -"br" = ( -/obj/machinery/artifact_analyser, -/turf/simulated/floor/tiled, -/area/bluespaceriver/ship) -"bs" = ( -/obj/structure/hygiene/toilet{ - dir = 4 - }, -/obj/structure/hygiene/sink{ - pixel_y = 24 - }, -/obj/structure/hygiene/shower{ - dir = 1 - }, -/obj/random/soap, -/turf/simulated/floor/tiled/freezer, -/area/bluespaceriver/ship) -"bt" = ( -/obj/machinery/door/airlock, -/turf/simulated/floor/tiled, -/area/bluespaceriver/ship) -"bu" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/tiled, -/area/bluespaceriver/ship) -"bv" = ( -/obj/structure/curtain/open/bed, -/obj/structure/bed/padded, -/obj/item/bedsheet/brown, -/turf/simulated/floor/tiled, -/area/bluespaceriver/ship) -"bw" = ( -/obj/structure/curtain/open/bed, -/obj/structure/bed/padded, -/turf/simulated/floor/tiled, -/area/bluespaceriver/ship) -"bx" = ( -/obj/structure/closet/hydrant, -/turf/simulated/wall/titanium, -/area/bluespaceriver/ship) -"by" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/turf/simulated/floor/tiled, -/area/bluespaceriver/ship) -"bz" = ( -/obj/structure/bed/chair/comfy/red{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/bluespaceriver/ship) -"bA" = ( -/obj/structure/table/glass, -/obj/item/pen, -/obj/item/storage/secure/briefcase/money{ - code = "63214" - }, -/obj/item/form_printer, -/obj/item/gun/energy/gun/small, -/obj/item/rig/hazmat/equipped, -/obj/random/cash, -/obj/item/paper{ - info = "We've finished the bridge and began our initial investigation into the site. Thus far, we're finding a lot of structures clearly made by a sapient species, one that from all indications was relatively advanced, but no signs of what actually happened to them. There's clear signs of habitation, but no signs of what caused abandonment. We're setting up camp in the ruins tonight so that we can continue studying as long as possible before our scheduled departure for refueling, but I feel confident we'll have enough to secure funds for the forseeable future at least!" - }, -/turf/simulated/floor/tiled, -/area/bluespaceriver/ship) -"bB" = ( -/obj/machinery/light{ - dir = 8 - }, -/turf/simulated/floor/exoplanet/snow{ - temperature = 240 - }, -/area/bluespaceriver/ship) -"bC" = ( -/obj/structure/shuttle/engine/propulsion{ - icon_state = "propulsion_l" - }, -/turf/simulated/wall/titanium, -/area/bluespaceriver/ship) -"bD" = ( -/obj/machinery/door/window/northright, -/obj/machinery/door/window/southleft, -/turf/simulated/floor/reinforced, -/area/bluespaceriver/ship) -"bE" = ( -/obj/machinery/door/airlock, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/tiled, -/area/bluespaceriver/ship) -"bF" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/light{ - dir = 4; - icon_state = "tube1" - }, -/obj/random/toolbox, -/turf/simulated/floor/tiled, -/area/bluespaceriver/ship) -"bG" = ( -/turf/simulated/floor/reinforced, -/area/bluespaceriver/ship) -"bH" = ( -/obj/structure/bookcase/manuals/research_and_development, -/turf/simulated/floor/tiled, -/area/bluespaceriver/ship) -"bI" = ( -/obj/structure/bed/padded, -/obj/item/bedsheet/red, -/obj/item/storage/secure/safe{ - pixel_y = 24 - }, -/turf/simulated/floor/tiled, -/area/bluespaceriver/ship) -"bJ" = ( -/obj/structure/curtain/open/bed, -/turf/simulated/floor/tiled, -/area/bluespaceriver/ship) -"bK" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/bluespaceriver/ship) -"bL" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/handrail, -/turf/simulated/floor/tiled, -/area/bluespaceriver/ship) -"bM" = ( -/obj/structure/bed/padded, -/obj/item/bedsheet/green, -/obj/item/storage/secure/safe{ - pixel_y = 24 - }, -/turf/simulated/floor/tiled, -/area/bluespaceriver/ship) -"bN" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/power/apc{ - dir = 8; - pixel_x = -24 - }, -/obj/structure/cable{ - d2 = 2; - icon_state = "0-2" - }, -/turf/simulated/floor/tiled/dark, -/area/bluespaceriver/ship) -"bO" = ( -/obj/machinery/atmospherics/unary/tank/air{ - dir = 8 - }, -/turf/simulated/floor/tiled/dark, -/area/bluespaceriver/ship) -"bP" = ( -/obj/structure/fuel_port, -/turf/simulated/wall/titanium, -/area/bluespaceriver/ship) -"bQ" = ( -/obj/machinery/artifact_scanpad, -/turf/simulated/floor/reinforced, -/area/bluespaceriver/ship) -"bR" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 8 - }, -/turf/simulated/floor/tiled, -/area/bluespaceriver/ship) -"bS" = ( -/obj/machinery/vending/wallmed1{ - name = "Emergency NanoMed"; - pixel_x = 28; - req_access = newlist() - }, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 8; - level = 2 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/item/mop, -/turf/simulated/floor/tiled, -/area/bluespaceriver/ship) -"bT" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/obj/structure/cable, -/obj/machinery/power/smes/buildable{ - RCon_tag = "Solar - Port" - }, -/turf/simulated/floor/tiled/dark, -/area/bluespaceriver/ship) -"bU" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/wall/titanium, -/area/bluespaceriver/ship) -"bV" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/universal{ - dir = 4 - }, -/turf/simulated/wall/titanium, -/area/bluespaceriver/ship) -"bW" = ( -/obj/machinery/atmospherics/unary/outlet_injector{ - dir = 8; - use_power = 1 - }, -/turf/simulated/floor/exoplanet/snow{ - temperature = 240 - }, -/area/bluespaceriver/ship) -"bX" = ( -/obj/structure/bed/padded, -/obj/item/bedsheet/yellow, -/obj/item/storage/secure/safe{ - pixel_y = 24 - }, -/turf/simulated/floor/tiled, -/area/bluespaceriver/ship) -"bY" = ( -/obj/structure/bed/padded, -/obj/item/bedsheet/captain, -/obj/item/storage/secure/safe{ - pixel_y = 24 - }, -/turf/simulated/floor/tiled, -/area/bluespaceriver/ship) -"bZ" = ( -/obj/structure/table/woodentable, -/obj/random/energy, -/obj/item/storage/pill_bottle/happy, -/obj/random/contraband, -/turf/simulated/floor/tiled, -/area/bluespaceriver/ship) -"ca" = ( -/obj/machinery/door/blast/shutters, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/tiled, -/area/bluespaceriver/ship) -"cb" = ( -/obj/machinery/door/blast/shutters, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled, -/area/bluespaceriver/ship) -"cc" = ( -/obj/structure/closet/excavation, -/turf/simulated/floor/tiled/dark, -/area/bluespaceriver/ship) -"cd" = ( -/obj/machinery/light{ - dir = 1 - }, -/obj/structure/closet/wardrobe/science_white, -/turf/simulated/floor/tiled/dark, -/area/bluespaceriver/ship) -"ce" = ( -/obj/structure/closet/radiation, -/turf/simulated/floor/tiled/dark, -/area/bluespaceriver/ship) -"cf" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/tiled/dark, -/area/bluespaceriver/ship) -"cg" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/dark, -/area/bluespaceriver/ship) -"ch" = ( -/turf/simulated/floor/tiled/dark, -/area/bluespaceriver/ship) -"ci" = ( -/obj/machinery/light{ - dir = 1 - }, -/obj/random/maintenance/clean, -/turf/simulated/floor/tiled/dark, -/area/bluespaceriver/ship) -"cj" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/shieldwallgen, -/turf/simulated/floor/tiled/dark, -/area/bluespaceriver/ship) -"ck" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/shieldwallgen, -/turf/simulated/floor/tiled/dark, -/area/bluespaceriver/ship) -"cl" = ( -/obj/structure/sign/warning/vacuum, -/turf/simulated/wall/titanium, -/area/bluespaceriver/ship) -"cm" = ( -/obj/machinery/door/airlock/external/bolted, -/turf/simulated/floor/tiled/dark, -/area/bluespaceriver/ship) -"cn" = ( -/obj/structure/closet/secure_closet/scientist, -/turf/simulated/floor/tiled/dark, -/area/bluespaceriver/ship) -"co" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 1; - level = 2 - }, -/obj/machinery/floodlight, -/turf/simulated/floor/tiled/dark, -/area/bluespaceriver/ship) -"cp" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 1 - }, -/obj/machinery/suspension_gen, -/turf/simulated/floor/tiled/dark, -/area/bluespaceriver/ship) -"cq" = ( -/obj/structure/dispenser/oxygen, -/obj/machinery/light{ - dir = 4; - icon_state = "tube1" - }, -/turf/simulated/floor/tiled/dark, -/area/bluespaceriver/ship) -"cr" = ( -/obj/machinery/light{ - dir = 8 - }, -/turf/simulated/floor/tiled/dark, -/area/bluespaceriver/ship) -"cs" = ( -/obj/random/maintenance/clean, -/turf/simulated/floor/tiled/dark, -/area/bluespaceriver/ship) -"ct" = ( -/obj/structure/ore_box, -/turf/simulated/floor/tiled/dark, -/area/bluespaceriver/ship) -"cu" = ( -/obj/machinery/door/blast/regular, -/turf/simulated/floor/tiled/dark, -/area/bluespaceriver/ship) -"cv" = ( -/obj/machinery/mining/brace, -/turf/simulated/floor/exoplanet/snow{ - temperature = 240 - }, -/area/bluespaceriver/ground) -"cw" = ( -/obj/machinery/mining/drill, -/turf/simulated/floor/exoplanet/snow{ - temperature = 240 - }, -/area/bluespaceriver/ground) -"cx" = ( -/obj/effect/shuttle_landmark/nav_blueriv/nav4, -/turf/simulated/floor/exoplanet/snow{ - temperature = 240 - }, -/area/bluespaceriver/ground) -"cy" = ( -/obj/structure/ladder, -/turf/simulated/floor/exoplanet/snow{ - temperature = 240 - }, -/area/bluespaceriver/ground) -"cz" = ( -/obj/item/remains/human, -/turf/simulated/floor/exoplanet/snow{ - temperature = 240 - }, -/area/bluespaceriver/ground) -"cA" = ( -/obj/structure/flora/grass/both, -/obj/structure/flora/grass/both, -/turf/simulated/floor/exoplanet/snow{ - temperature = 240 - }, -/area/bluespaceriver/ground) -"cB" = ( -/obj/structure/flora/grass/both, -/obj/structure/flora/bush, -/turf/simulated/floor/exoplanet/snow{ - temperature = 240 - }, -/area/bluespaceriver/ground) -"cC" = ( -/obj/effect/shuttle_landmark/nav_blueriv/nav2, -/turf/simulated/floor/exoplanet/snow{ - temperature = 240 - }, -/area/bluespaceriver/ground) -"cD" = ( -/obj/effect/landmark/map_data{ - height = 2 - }, -/turf/unsimulated/mineral{ - temperature = 233 - }, -/area/bluespaceriver/ground) -"hN" = ( -/obj/machinery/door/airlock/science, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/turf/simulated/floor/tiled, -/area/bluespaceriver/ship) -"Co" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/universal, -/turf/simulated/wall/titanium, -/area/bluespaceriver/ship) -"Lk" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/turf/simulated/floor/tiled, -/area/bluespaceriver/ship) - -(1,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -cD -"} -(2,1,1) = {" -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -"} -(3,1,1) = {" -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -"} -(4,1,1) = {" -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -"} -(5,1,1) = {" -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -"} -(6,1,1) = {" -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ac -ac -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ac -ac -ac -ab -ab -ab -ac -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ac -ab -ab -ab -ab -ab -ab -ac -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -"} -(7,1,1) = {" -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ac -ac -ab -ab -ab -ab -ab -ab -ac -ac -ac -ac -ab -ab -ab -ac -ac -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ac -ab -ac -ac -ac -ab -ab -ab -ac -ac -ac -ac -ac -ac -ac -ac -ac -ab -ab -ab -ab -ab -ab -ac -ab -ab -ab -ab -ab -ac -ac -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -"} -(8,1,1) = {" -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ac -ab -ab -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ah -ab -ab -ab -ab -ab -ab -ab -ab -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ab -ab -ab -ac -ac -ab -ab -ab -ab -ac -ac -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -"} -(9,1,1) = {" -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ad -ac -ac -ac -ac -ac -ac -ac -ab -ab -ab -ab -ab -ab -ab -ac -ac -ac -ac -ac -ac -ac -ai -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ab -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -"} -(10,1,1) = {" -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ab -ab -ab -ab -ab -ab -ab -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -af -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -"} -(11,1,1) = {" -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ab -ab -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -"} -(12,1,1) = {" -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -bo -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ai -ac -ac -ac -ac -ac -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -"} -(13,1,1) = {" -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ac -ac -ac -ac -ab -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ay -bC -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ah -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ai -ac -ac -ac -ac -ac -ac -ac -ab -ab -ab -ab -ab -ab -ab -ab -aa -"} -(14,1,1) = {" -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ad -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ba -ay -bC -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ai -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ab -ab -ab -ab -ab -ab -ab -ab -aa -"} -(15,1,1) = {" -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -an -ba -bp -ay -bC -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ab -ab -ab -ab -ab -ab -ab -ab -aa -"} -(16,1,1) = {" -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -af -ac -ac -ac -ac -ac -ah -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -an -an -bb -aN -ay -ay -ay -bC -ac -ac -ac -ac -ac -ac -ac -ac -cv -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ae -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ab -ab -ab -ab -ab -ab -ab -ab -aa -"} -(17,1,1) = {" -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -af -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -an -an -aT -bc -au -bD -bG -ay -ay -bC -ac -ac -ac -ac -ac -cv -ac -ac -ac -ac -ac -ac -ac -ac -ac -cA -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ab -ab -ab -ab -ab -ab -ab -ab -aa -"} -(18,1,1) = {" -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -as -ay -ay -aM -au -bd -bq -ay -bG -bQ -ay -ay -ay -bC -ac -ac -ac -ac -cw -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -af -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ab -ab -ab -ab -ab -ab -ab -aa -"} -(19,1,1) = {" -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -an -an -aD -aN -au -be -br -ay -ay -ay -ay -ay -ay -ay -ay -ay -ay -ac -ac -ac -ac -ac -ac -cz -ac -ac -ac -cB -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ab -ab -ab -ab -ab -ab -ab -aa -"} -(20,1,1) = {" -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ac -ac -ag -ac -ac -ac -ac -ac -af -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -an -an -ay -aE -au -aU -bf -ay -ay -bH -ay -bH -ay -cc -ch -cm -ch -cm -ac -ac -cv -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ai -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ab -ab -ab -ab -ab -ab -ab -aa -"} -(21,1,1) = {" -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -an -an -at -ay -aF -aN -aV -bf -bs -ay -bI -ay -bX -ay -cd -ch -ay -cl -ay -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ai -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ab -ab -ab -ab -ab -ab -ab -aa -"} -(22,1,1) = {" -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ac -ac -ac -ac -ac -ac -ae -ah -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -an -ao -au -ay -aG -aO -ay -bf -bt -ay -bJ -ay -bJ -ay -ce -ch -cn -cr -cu -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ab -ab -ab -ab -ab -ab -aa -"} -(23,1,1) = {" -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -al -an -ap -av -az -aH -aP -aW -bg -bu -bE -bK -bR -bu -ca -cf -cj -co -ch -cu -ac -ac -cy -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ae -ac -ac -ac -ai -ac -ac -ac -ac -ac -ac -ab -ab -ab -ab -ab -ab -aa -"} -(24,1,1) = {" -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ac -ac -ac -ac -ai -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -an -aq -aw -ay -aI -aQ -au -bh -aA -aA -bL -bS -aX -cb -cg -ck -cp -cs -cu -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ai -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ab -ab -ab -ab -ab -ab -aa -"} -(25,1,1) = {" -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ac -ac -ac -ac -ac -ai -ac -ac -ac -ac -aj -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -an -ar -ax -aA -aJ -aJ -aX -bi -bv -ay -bJ -ay -bJ -ay -ch -cl -ay -ay -ay -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ab -ab -ab -ab -ab -ab -aa -"} -(26,1,1) = {" -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -an -an -au -aB -au -au -aY -bj -ay -ay -bM -ay -bY -ay -ci -cm -ch -ch -cm -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ab -ab -ab -ab -ab -ab -aa -"} -(27,1,1) = {" -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -an -an -aC -aK -au -au -bk -bw -ay -bH -ay -bZ -ay -ch -cm -cq -ct -cm -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ab -ab -ab -ab -ab -ab -ab -aa -"} -(28,1,1) = {" -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ac -ac -ai -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -an -an -aL -aR -Lk -bi -bx -ay -ay -ay -ay -ay -ay -ay -ay -ay -ay -ac -ac -ac -ac -ac -ac -ac -ac -af -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ai -ac -ac -ac -ac -ac -ac -ac -ac -ac -ab -ab -ab -ab -ab -ab -ab -aa -"} -(29,1,1) = {" -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ac -ac -ac -ac -af -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -as -ay -ay -aS -aZ -bl -by -bF -bN -bT -ay -ay -ay -bC -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ab -ab -ab -ab -ab -ab -ab -aa -"} -(30,1,1) = {" -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ad -ac -ac -ac -ac -ac -ah -ac -ac -ac -ac -ac -ac -ac -an -an -ay -bm -hN -Co -bO -bU -ay -bC -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ai -ac -ac -ac -ac -ac -ac -ac -ac -ac -ab -ab -ab -ab -ab -ab -ab -aa -"} -(31,1,1) = {" -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ae -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -an -an -bn -bz -ay -bP -bV -bC -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ab -ab -ab -ab -ab -ab -aa -"} -(32,1,1) = {" -aa -ab -ab -ab -ab -ab -ab -ab -ab -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -af -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -an -an -bA -ay -bC -bW -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ai -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ab -ab -ab -ab -ab -ab -aa -"} -(33,1,1) = {" -aa -ab -ab -ab -ab -ab -ab -ab -ab -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -af -ac -ac -ac -ae -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -an -ay -bC -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ab -ab -ab -ab -ab -ab -aa -"} -(34,1,1) = {" -aa -ab -ab -ab -ab -ab -ab -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ay -bC -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ab -ab -ab -ab -ab -ab -ab -aa -"} -(35,1,1) = {" -aa -ab -ab -ab -ab -ab -ab -ac -ac -ac -ac -ac -ac -ah -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -bB -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ai -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ab -ab -ab -ab -ab -ab -ab -aa -"} -(36,1,1) = {" -aa -ab -ab -ab -ab -ab -ab -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ab -ab -ab -ab -ab -ab -ab -ab -aa -"} -(37,1,1) = {" -aa -ab -ab -ab -ab -ab -ab -ac -ac -ae -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -af -ac -ac -ac -ac -ac -ac -ac -ah -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ae -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ab -ab -ab -ab -ab -ab -ab -ab -aa -"} -(38,1,1) = {" -aa -ab -ab -ab -ab -ab -ab -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -af -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ai -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -"} -(39,1,1) = {" -aa -ab -ab -ab -ab -ab -ab -ab -ac -ac -ac -ac -ac -ad -ac -ac -ac -ac -ac -ae -ac -ac -af -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ai -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -"} -(40,1,1) = {" -aa -ab -ab -ab -ab -ab -ac -ab -ab -ac -ac -ac -ac -ac -ac -ac -ac -ac -af -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ai -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -"} -(41,1,1) = {" -aa -ab -ab -ab -ab -ab -ac -ac -ac -ac -ac -ac -ad -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ah -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -"} -(42,1,1) = {" -aa -ab -ab -ab -ab -ab -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -af -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -"} -(43,1,1) = {" -aa -ab -ab -ab -ab -ab -ab -ab -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ae -ac -ai -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ae -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -"} -(44,1,1) = {" -aa -ab -ab -ab -ab -ab -ab -ab -ac -ac -ac -ac -ac -ac -ac -ac -ac -af -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -af -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -"} -(45,1,1) = {" -aa -ab -ab -ab -ab -ab -ab -ab -ac -ac -ae -af -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ai -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ai -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -"} -(46,1,1) = {" -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ac -ac -ac -ac -ac -ac -ac -ac -af -ac -ac -ac -ac -ac -ac -ac -ac -ai -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ah -ac -ac -ac -ac -ac -ac -ac -ac -cx -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ab -ab -ab -ab -ab -ab -ab -ab -aa -"} -(47,1,1) = {" -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -af -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ai -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ab -ab -ab -ab -ab -aa -"} -(48,1,1) = {" -aa -ab -ab -ab -ab -ab -ab -ab -ab -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ab -ab -ab -ab -ab -ab -ab -aa -"} -(49,1,1) = {" -aa -ab -ab -ab -ab -ab -ab -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -af -ac -ae -ac -ac -ac -ac -af -ac -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -"} -(50,1,1) = {" -aa -ab -ab -ab -ab -ab -ab -ab -ab -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ah -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -"} -(51,1,1) = {" -aa -ab -ab -ab -ab -ab -ab -ab -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -"} -(52,1,1) = {" -aa -ab -ab -ab -ab -ab -ab -ab -ad -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ab -ab -ab -ab -ab -ab -ab -ab -aa -"} -(53,1,1) = {" -aa -ab -ab -ab -ab -ab -ab -ac -ac -ac -ac -ac -ac -ac -ad -ac -ac -ad -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -af -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ae -ai -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ab -ab -ab -ab -ab -ab -ab -aa -"} -(54,1,1) = {" -aa -ab -ab -ab -ab -ab -ab -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ae -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ab -ab -ab -ab -ab -aa -"} -(55,1,1) = {" -aa -ab -ab -ab -ab -ab -ab -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ai -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ab -ab -ab -ab -ab -aa -"} -(56,1,1) = {" -aa -ab -ab -ab -ab -ab -ab -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ai -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ai -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ab -ab -ab -ab -ab -ab -aa -"} -(57,1,1) = {" -aa -ab -ab -ab -ab -ab -ab -ac -ae -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ak -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ae -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ab -ab -ab -ab -aa -"} -(58,1,1) = {" -aa -ab -ab -ab -ab -ab -ab -ab -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ai -ai -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ae -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ae -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ab -ab -ab -ab -aa -"} -(59,1,1) = {" -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ai -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ab -ab -ab -ab -aa -"} -(60,1,1) = {" -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ac -ab -ab -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ab -ab -ab -ab -ab -aa -"} -(61,1,1) = {" -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -af -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ab -ab -ab -ab -ab -aa -"} -(62,1,1) = {" -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ae -ac -ac -ac -ac -ac -ac -ac -ab -ab -ab -ab -ab -ab -aa -"} -(63,1,1) = {" -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ai -ai -ac -ac -ab -ab -ab -ab -ab -ab -aa -"} -(64,1,1) = {" -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ab -ab -ab -ab -ab -ab -ab -aa -"} -(65,1,1) = {" -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ac -ac -ac -ac -ac -ad -ac -ac -ac -ae -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -af -ac -ac -ac -ac -ac -ac -ac -ac -ac -af -ac -ac -ac -af -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -"} -(66,1,1) = {" -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -"} -(67,1,1) = {" -aa -ab -ab -ab -ab -ab -ab -ab -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ai -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -"} -(68,1,1) = {" -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ab -ab -ab -ab -ab -ab -ab -ab -aa -"} -(69,1,1) = {" -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ab -ab -ab -ab -ab -ab -ab -aa -"} -(70,1,1) = {" -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -cC -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ab -ab -ab -ab -ab -ab -ab -ab -aa -"} -(71,1,1) = {" -aa -ab -ab -ab -ab -ab -ab -ab -ac -ac -ab -ab -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ai -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ab -ab -ab -ab -ab -ab -ab -ab -aa -"} -(72,1,1) = {" -aa -ab -ab -ab -ab -ab -ab -ab -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ai -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -"} -(73,1,1) = {" -aa -ab -ab -ab -ab -ab -ab -ab -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ai -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ai -ai -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -"} -(74,1,1) = {" -aa -ab -ab -ab -ab -ab -ab -ab -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ae -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -"} -(75,1,1) = {" -aa -ab -ab -ab -ab -ab -ab -ab -ac -ac -ac -ac -ac -ac -ac -ad -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -am -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -"} -(76,1,1) = {" -aa -ab -ab -ab -ab -ab -ab -ab -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ae -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ai -ac -ac -ac -ac -ac -ac -ac -ac -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -"} -(77,1,1) = {" -aa -ab -ab -ab -ab -ab -ab -ab -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -"} -(78,1,1) = {" -aa -ab -ab -ab -ab -ab -ab -ab -ab -ac -ac -ab -ab -ab -ab -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -"} -(79,1,1) = {" -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ac -ab -ab -ab -ab -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ad -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ai -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -"} -(80,1,1) = {" -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ai -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -"} -(81,1,1) = {" -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ai -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -"} -(82,1,1) = {" -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -"} -(83,1,1) = {" -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ae -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ae -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -"} -(84,1,1) = {" -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ai -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -"} -(85,1,1) = {" -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ac -ab -ab -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ae -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -"} -(86,1,1) = {" -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ae -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ab -ac -ac -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -"} -(87,1,1) = {" -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -"} -(88,1,1) = {" -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ac -ac -ac -ac -ai -ac -ac -ac -ac -ac -ac -ac -ac -ac -ab -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ai -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ab -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -"} -(89,1,1) = {" -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ac -ac -ac -ab -ac -ac -ab -ac -ac -ac -ac -ac -ac -ab -ab -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ab -ac -ab -ab -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -"} -(90,1,1) = {" -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ac -ab -ac -ab -ab -ab -ab -ac -ac -ab -ac -ab -ab -ab -ab -ab -ab -ab -ab -ab -ac -ac -ac -ac -ac -ac -ac -ac -ai -ac -ac -ac -ac -ac -ac -ac -ac -ab -ab -ab -ab -ac -ac -ac -ac -ac -ac -ab -ab -ac -ac -ac -ai -ac -ac -ac -ac -ac -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -"} -(91,1,1) = {" -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ac -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ac -ab -ab -ac -ac -ab -ab -ac -ab -ab -ac -ac -ac -ac -ab -ab -ab -ab -ab -ab -ab -ab -ac -ac -ac -ab -ab -ab -ab -ab -ac -ac -ac -ac -ac -ac -ac -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -"} -(92,1,1) = {" -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ac -ab -ab -ab -ab -ab -ab -ab -ab -ab -ac -ab -ab -ab -ab -ab -ab -ab -ab -ac -ac -ac -ab -ab -ab -ab -ab -ac -ac -ac -ac -ac -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -"} -(93,1,1) = {" -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ac -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -"} -(94,1,1) = {" -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -"} -(95,1,1) = {" -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -"} -(96,1,1) = {" -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -"} -(97,1,1) = {" -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -"} -(98,1,1) = {" -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -"} -(99,1,1) = {" -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -"} -(100,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} diff --git a/maps/away/blueriver/blueriver.dm b/maps/away/blueriver/blueriver.dm deleted file mode 100644 index b1373c79a0cca..0000000000000 --- a/maps/away/blueriver/blueriver.dm +++ /dev/null @@ -1,204 +0,0 @@ -//quality code theft -#include "blueriver_areas.dm" -/obj/effect/overmap/visitable/sector/arcticplanet - name = "arctic planetoid" - desc = "Sensor array detects an arctic planet with a small vessel on the planet's surface. Scans further indicate strange energy emissions from below the planet's surface." - in_space = FALSE - icon_state = "globe" - initial_generic_waypoints = list( - "nav_blueriv_1", - "nav_blueriv_2", - "nav_blueriv_3", - "nav_blueriv_antag" - ) - -/obj/effect/overmap/visitable/sector/arcticplanet/New(nloc, max_x, max_y) - name = "[generate_planet_name()], \a [name]" - ..() - -/datum/map_template/ruin/away_site/blueriver - name = "Bluespace River" - id = "awaysite_blue" - spawn_cost = 2 - description = "An arctic planet and an alien underground surface" - suffixes = list("blueriver/blueriver-1.dmm", "blueriver/blueriver-2.dmm") - generate_mining_by_z = 2 - area_usage_test_exempted_root_areas = list(/area/bluespaceriver) - apc_test_exempt_areas = list( - /area/bluespaceriver/underground = NO_SCRUBBER|NO_VENT|NO_APC, - /area/bluespaceriver/ground = NO_SCRUBBER|NO_VENT|NO_APC - ) - -//This is ported from /vg/ and isn't entirely functional. If it sees a threat, it moves towards it, and then activates it's animation. -//At that point while it sees threats, it will remain in it's attack stage. It's a bug, but I figured it nerfs it enough to not be impossible to deal with -/mob/living/simple_animal/hostile/hive_alien/defender - name = "hive defender" - desc = "A terrifying monster resembling a massive, bloated tick in shape. Hundreds of blades are hidden underneath its rough shell." - icon = 'maps/away/blueriver/blueriver.dmi' - icon_state = "hive_executioner_move" - icon_living = "hive_executioner_move" - icon_dead = "hive_executioner_dead" - move_to_delay = 5 - speed = -1 - health = 280 - maxHealth = 280 - can_escape = TRUE - - harm_intent_damage = 8 - natural_weapon = /obj/item/natural_weapon/defender_blades - ai_holder = /datum/ai_holder/simple_animal/melee/defender - var/attack_mode = FALSE - - var/transformation_delay_min = 4 - var/transformation_delay_max = 8 - -/datum/ai_holder/simple_animal/melee/defender/lose_target() - . = ..() - var/mob/living/simple_animal/hostile/hive_alien/defender/D = holder - if(D.attack_mode && !find_target()) //If we don't immediately find another target, switch to movement mode - D.mode_movement() - - return ..() - -/datum/ai_holder/simple_animal/melee/defender/lose_target() - . = ..() - var/mob/living/simple_animal/hostile/hive_alien/defender/D = holder - if(D.attack_mode && !find_target()) //If we don't immediately find another target, switch to movement mode - D.mode_movement() - - return ..() - -/datum/ai_holder/simple_animal/melee/defender/engage_target() - . = ..() - var/mob/living/simple_animal/hostile/hive_alien/defender/D = holder - if(!D.attack_mode) - return D.mode_attack() - - flick("hive_executioner_attacking", src) - - return ..() -/obj/item/natural_weapon/defender_blades - name = "blades" - attack_verb = list("eviscerated") - force = 30 - edge = TRUE - hitsound = 'sound/weapons/slash.ogg' - -/mob/living/simple_animal/hostile/hive_alien/defender/proc/mode_movement() //Slightly broken, but it's alien and unpredictable so w/e - set waitfor = 0 - icon_state = "hive_executioner_move" - flick("hive_executioner_movemode", src) - sleep(rand(transformation_delay_min, transformation_delay_max)) - anchored = FALSE - speed = -1 - move_to_delay = 8 - . = FALSE - - //Immediately find a target so that we're not useless for 1 Life() tick! - ai_holder.find_target() - -/mob/living/simple_animal/hostile/hive_alien/defender/proc/mode_attack() - set waitfor = 0 - icon_state = "hive_executioner_attack" - flick("hive_executioner_attackmode", src) - sleep(rand(transformation_delay_min, transformation_delay_max)) - anchored = TRUE - speed = 0 - attack_mode = TRUE - walk(src, 0) - -/mob/living/simple_animal/hostile/hive_alien/defender/wounded - name = "wounded hive defender" - health = 80 - can_escape = FALSE - -/obj/effect/shuttle_landmark/nav_blueriv/nav1 - name = "Arctic Planet Landing Point #1" - landmark_tag = "nav_blueriv_1" - base_area = /area/bluespaceriver/ground - -/obj/effect/shuttle_landmark/nav_blueriv/nav2 - name = "Arctic Planet Landing Point #2" - landmark_tag = "nav_blueriv_2" - base_area = /area/bluespaceriver/ground - -/obj/effect/shuttle_landmark/nav_blueriv/nav3 - name = "Arctic Planet Landing Point #3" - landmark_tag = "nav_blueriv_3" - base_area = /area/bluespaceriver/ground - -/obj/effect/shuttle_landmark/nav_blueriv/nav4 - name = "Arctic Planet Navpoint #4" - landmark_tag = "nav_blueriv_antag" - base_area = /area/bluespaceriver/ground - -/turf/simulated/floor/away/blueriver/alienfloor - name = "glowing floor" - desc = "The floor glows without any apparent reason." - icon = 'riverturfs.dmi' - icon_state = "floor" - temperature = 233 - -/turf/simulated/floor/away/blueriver/alienfloor/Initialize() - .=..() - - set_light(0.7, 1, 5, l_color = "#0066ff") - -/turf/unsimulated/wall/away/blueriver/livingwall - name = "alien wall" - desc = "You feel a sense of dread from just looking at this wall. Its surface seems to be constantly moving, as if it were breathing." - icon = 'riverturfs.dmi' - icon_state = "evilwall_1" - opacity = 1 - density = TRUE - temperature = 233 - -/turf/unsimulated/wall/away/blueriver/livingwall/Initialize() - .=..() - - if(prob(80)) - icon_state = "evilwall_[rand(1,8)]" - -/turf/unsimulated/wall/supermatter/no_spread - name = "weird liquid" - desc = "The viscous liquid glows and moves as if it were alive." - icon='blueriver.dmi' - icon_state = "bluespacecrystal1" - layer = SUPERMATTER_WALL_LAYER - plane = EFFECTS_ABOVE_LIGHTING_PLANE - opacity = 0 - dynamic_lighting = 0 - -/turf/unsimulated/wall/supermatter/no_spread/Initialize() - .=..() - - icon_state = "bluespacecrystal[rand(1,3)]" - set_light(0.7, 1, 5, l_color = "#0066ff") - -/turf/unsimulated/wall/supermatter/no_spread/Process() - return PROCESS_KILL - -/obj/structure/deity - icon = 'icons/obj/cult.dmi' - icon_state = "tomealtar" - health_max = 10 - density = TRUE - anchored = TRUE - -/obj/structure/deity/attackby(obj/item/W as obj, mob/user as mob) - user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN) - user.do_attack_animation(src) - playsound(get_turf(src), 'sound/effects/Glasshit.ogg', 50, 1) - user.visible_message( - "[user] hits \the [src] with \the [W]!", - "You hit \the [src] with \the [W]!", - "You hear something breaking!" - ) - damage_health(W.force, W.damtype) - -/obj/structure/deity/on_death() - visible_message(SPAN_DANGER("\The [src] crumbles!")) - qdel(src) - -/obj/structure/deity/bullet_act(var/obj/item/projectile/P) - damage_health(P.get_structure_damage(), P.damage_type) diff --git a/maps/away/blueriver/blueriver.dmi b/maps/away/blueriver/blueriver.dmi deleted file mode 100644 index 3c2b6155fc25a..0000000000000 Binary files a/maps/away/blueriver/blueriver.dmi and /dev/null differ diff --git a/maps/away/blueriver/blueriver_areas.dm b/maps/away/blueriver/blueriver_areas.dm deleted file mode 100644 index 4d85e841a997d..0000000000000 --- a/maps/away/blueriver/blueriver_areas.dm +++ /dev/null @@ -1,19 +0,0 @@ -/area/bluespaceriver/underground - name = "\improper Bluespace River Underground" - icon_state = "underground" - icon = 'blueriver.dmi' - ambience = list('sound/ambience/spookyspace1.ogg', 'sound/ambience/spookyspace2.ogg') - sound_env = ASTEROID - -/area/bluespaceriver/ground - name = "\improper Arctic Planet Surface" - icon_state = "ground" - icon = 'blueriver.dmi' - ambience = list('sound/ambience/ambimine.ogg', 'sound/ambience/song_game.ogg') - sound_env = ASTEROID - planetary_surface = TRUE - -/area/bluespaceriver/ship - name = "\improper NSV Horizon" - icon_state = "ship" - icon = 'blueriver.dmi' diff --git a/maps/away/blueriver/riverturfs.dmi b/maps/away/blueriver/riverturfs.dmi deleted file mode 100644 index 1e9a88885a4b7..0000000000000 Binary files a/maps/away/blueriver/riverturfs.dmi and /dev/null differ diff --git a/maps/away/casino/casino.dm b/maps/away/casino/casino.dm deleted file mode 100644 index cb1573d3bfe88..0000000000000 --- a/maps/away/casino/casino.dm +++ /dev/null @@ -1,175 +0,0 @@ -#include "casino_areas.dm" -#include "../mining/mining_areas.dm" - -/obj/effect/overmap/visitable/ship/casino - name = "passenger liner" - desc = "Sensors detect an undamaged vessel without any signs of activity." - color = "#bd6100" - vessel_mass = 5000 - max_speed = 1/(2 SECONDS) - burn_delay = 1 SECOND - initial_generic_waypoints = list( - "nav_casino_1", - "nav_casino_2", - "nav_casino_3", - "nav_casino_4", - "nav_casino_antag", - "nav_casino_hangar", - ) - initial_restricted_waypoints = list( - "Casino Cutter" = list("nav_casino_hangar"), - ) - -/obj/effect/overmap/visitable/ship/casino/New(nloc, max_x, max_y) - name = "IPV [pick("Fortuna","Gold Rush","Ebisu","Lucky Paw","Four Leaves")], \a [name]" - ..() - -/datum/map_template/ruin/away_site/casino - name = "Casino" - id = "awaysite_casino" - description = "A casino ship!" - suffixes = list("casino/casino.dmm") - spawn_cost = 1 - shuttles_to_initialise = list(/datum/shuttle/autodock/overmap/casino_cutter) - area_usage_test_exempted_root_areas = list(/area/casino) - apc_test_exempt_areas = list( - /area/casino/casino_hangar = NO_SCRUBBER, - /area/casino/casino_cutter = NO_SCRUBBER|NO_VENT, - /area/casino/casino_solar_control = NO_SCRUBBER, - /area/casino/casino_maintenance = NO_SCRUBBER|NO_VENT - ) - -/obj/effect/shuttle_landmark/nav_casino/nav1 - name = "Casino Ship Navpoint #1" - landmark_tag = "nav_casino_1" - -/obj/effect/shuttle_landmark/nav_casino/nav2 - name = "Casino Ship Navpoint #2" - landmark_tag = "nav_casino_2" - -/obj/effect/shuttle_landmark/nav_casino/nav3 - name = "Casino Ship Navpoint #3" - landmark_tag = "nav_casino_3" - -/obj/effect/shuttle_landmark/nav_casino/nav4 - name = "Casino Ship Navpoint #4" - landmark_tag = "nav_casino_4" - -/obj/effect/shuttle_landmark/nav_casino/nav5 - name = "Casino Ship Navpoint #5" - landmark_tag = "nav_casino_antag" - -/datum/shuttle/autodock/overmap/casino_cutter - name = "Casino Cutter" - warmup_time = 15 - move_time = 60 - shuttle_area = /area/casino/casino_cutter - current_location = "nav_casino_hangar" - landmark_transition = "nav_casino_transit" - fuel_consumption = 0.5//it's small - range = 1 - defer_initialisation = TRUE - -/obj/effect/shuttle_landmark/nav_casino/cutter_hangar - name = "Casino Hangar" - landmark_tag = "nav_casino_hangar" - base_area = /area/casino/casino_hangar - base_turf = /turf/simulated/floor/plating - -/obj/effect/shuttle_landmark/nav_casino/cutter_transit - name = "In transit" - landmark_tag = "nav_casino_transit" - -/obj/machinery/computer/shuttle_control/explore/casino_cutter - name = "cutter control console" - shuttle_tag = "Casino Cutter" - -/obj/structure/casino/roulette - name = "roulette" - desc = "Spin the roulette to try your luck." - icon = 'maps/away/casino/casino_sprites.dmi' - icon_state = "roulette_r" - density = FALSE - anchored = TRUE - var/busy=0 - -/obj/structure/casino/roulette/attack_hand(mob/user as mob) - if (busy) - to_chat(user,"You cannot spin now! \The [src] is already spinning. ") - return - visible_message("\ [user] spins the roulette and throws inside little ball.") - busy = 1 - var/n = rand(0,36) - var/color = "green" - add_fingerprint(user) - if ((n>0 && n<11) || (n>18 && n<29)) - if (n%2) - color="red" - else - color="black" - if ( (n>10 && n<19) || (n>28) ) - if (n%2) - color="black" - else - color="red" - spawn(5 SECONDS) - visible_message("\The [src] stops spinning, the ball landing on [n], [color].") - busy=0 - -/obj/structure/casino/roulette_chart - name = "roulette chart" - desc = "Roulette chart. Place your bets! " - icon = 'maps/away/casino/casino_sprites.dmi' - icon_state = "roulette_l" - density = FALSE - anchored = TRUE - -/obj/structure/casino/bj_table - name = "blackjack table" - desc = "This is a blackjack table. " - icon = 'maps/away/casino/casino_sprites.dmi' - icon_state = "bj_left" - density = FALSE - anchored = TRUE - -/obj/structure/casino/bj_table/bj_right - icon_state = "bj_right" - -/obj/structure/casino/oh_bandit - name = "one armed bandit" - desc = "Turned off slot machine. " - icon = 'maps/away/casino/casino_sprites.dmi' - icon_state = "slot_machine" - density = FALSE - anchored = TRUE - -/obj/structure/casino/craps - name = "craps table" - desc = "Craps table: roll dice!" - icon = 'maps/away/casino/casino_sprites.dmi' - icon_state = "craps_top" - density = FALSE - anchored = TRUE - -/obj/structure/casino/craps/craps_down - icon_state = "craps_down" - -//========================used bullet casings======================= -/obj/item/ammo_casing/rifle/used/Initialize() - . = ..() - expend() - pixel_x = rand(-10, 10) - pixel_y = rand(-10, 10) - - -/obj/item/ammo_casing/pistol/used/Initialize() - . = ..() - expend() - pixel_x = rand(-10, 10) - pixel_y = rand(-10, 10) - -/obj/item/ammo_casing/pistol/magnum/used/Initialize() - . = ..() - expend() - pixel_x = rand(-10, 10) - pixel_y = rand(-10, 10) diff --git a/maps/away/casino/casino.dmm b/maps/away/casino/casino.dmm deleted file mode 100644 index 1bbea807b9e13..0000000000000 --- a/maps/away/casino/casino.dmm +++ /dev/null @@ -1,15958 +0,0 @@ -//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE -"aa" = ( -/turf/space, -/area/space) -"ab" = ( -/obj/effect/step_trigger/thrower{ - affect_ghosts = 1; - direction = 8; - name = "thrower_throwdownside"; - nostop = 1; - stopper = 0; - tiles = 0 - }, -/turf/space, -/area/space) -"ac" = ( -/obj/effect/step_trigger/thrower{ - affect_ghosts = 1; - direction = 1; - name = "thrower_throwdownside"; - nostop = 1; - stopper = 0; - tiles = 0 - }, -/turf/space, -/area/space) -"ad" = ( -/obj/effect/step_trigger/thrower{ - affect_ghosts = 1; - direction = 4; - name = "thrower_throwdownside"; - nostop = 1; - stopper = 0; - tiles = 0 - }, -/turf/space, -/area/space) -"ae" = ( -/obj/effect/step_trigger/teleporter/random{ - affect_ghosts = 1; - name = "escapeshuttle_leave"; - teleport_x = 25; - teleport_x_offset = 245; - teleport_y = 25; - teleport_y_offset = 245; - teleport_z = 6; - teleport_z_offset = 6 - }, -/turf/space, -/area/space) -"af" = ( -/obj/effect/shuttle_landmark/nav_casino/cutter_transit, -/turf/space, -/area/space) -"ag" = ( -/obj/effect/step_trigger/teleporter/random{ - affect_ghosts = 1; - name = "escapeshuttle_leave"; - teleport_x = 25; - teleport_x_offset = 245; - teleport_y = 25; - teleport_y_offset = 245; - teleport_z = 6; - teleport_z_offset = 6 - }, -/turf/space{ - icon_state = "black" - }, -/area/space) -"ah" = ( -/obj/effect/step_trigger/thrower{ - affect_ghosts = 1; - direction = 4; - name = "thrower_throwdownside"; - nostop = 1; - stopper = 0; - tiles = 0 - }, -/turf/space/transit/north, -/area/space) -"ai" = ( -/obj/effect/shuttle_landmark/nav_casino/nav1, -/turf/space, -/area/space) -"aj" = ( -/obj/effect/step_trigger/thrower{ - affect_ghosts = 1; - name = "thrower_throwdownside"; - nostop = 1; - stopper = 0; - tiles = 0 - }, -/turf/space, -/area/space) -"ak" = ( -/obj/effect/shuttle_landmark/nav_casino/nav5, -/turf/space, -/area/space) -"am" = ( -/turf/simulated/wall/r_wall, -/area/casino/casino_bridge) -"an" = ( -/obj/effect/wallframe_spawn/reinforced, -/obj/machinery/door/firedoor, -/obj/machinery/door/blast/regular{ - density = 0; - dir = 2; - icon_state = "pdoor0"; - id_tag = "casino_bridge"; - name = "Casino Bridge Blast Doors"; - opacity = 0 - }, -/turf/simulated/floor/plating, -/area/casino/casino_bridge) -"ap" = ( -/turf/simulated/floor/tiled, -/area/casino/casino_bridge) -"aq" = ( -/obj/machinery/computer/ship/engines, -/turf/simulated/floor/tiled, -/area/casino/casino_bridge) -"ar" = ( -/obj/machinery/computer/ship/helm, -/turf/simulated/floor/tiled, -/area/casino/casino_bridge) -"as" = ( -/obj/machinery/computer/ship/sensors, -/turf/simulated/floor/tiled, -/area/casino/casino_bridge) -"at" = ( -/obj/effect/wallframe_spawn/reinforced, -/obj/machinery/door/firedoor, -/obj/machinery/door/blast/regular{ - density = 0; - dir = 4; - icon_state = "pdoor0"; - id_tag = "casino_bridge"; - name = "Casino Bridge Blast Doors"; - opacity = 0 - }, -/turf/simulated/floor/plating, -/area/casino/casino_bridge) -"au" = ( -/obj/structure/bed/chair{ - dir = 1 - }, -/obj/effect/decal/cleanable/blood/splatter, -/turf/simulated/floor/tiled, -/area/casino/casino_bridge) -"av" = ( -/obj/structure/table/steel_reinforced, -/obj/random/handgun, -/turf/simulated/floor/tiled, -/area/casino/casino_bridge) -"aw" = ( -/obj/item/wirecutters, -/obj/item/stack/material/rods, -/turf/space, -/area/space) -"ax" = ( -/obj/machinery/computer/modular{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/casino/casino_bridge) -"ay" = ( -/obj/effect/decal/cleanable/blood/splatter, -/turf/simulated/floor/tiled, -/area/casino/casino_bridge) -"aA" = ( -/obj/machinery/computer/modular{ - dir = 8; - name = "Gambling console" - }, -/turf/simulated/floor/tiled, -/area/casino/casino_bridge) -"aB" = ( -/turf/simulated/wall/r_wall, -/area/casino/casino_maintenance) -"aC" = ( -/obj/machinery/door/firedoor, -/obj/effect/wingrille_spawn/reinforced, -/turf/simulated/floor/plating, -/area/casino/casino_maintenance) -"aD" = ( -/obj/machinery/door/airlock/external{ - frequency = 1380; - icon_state = "door_closed"; - id_tag = "casino_dock_outer"; - name = "Docking Port Airlock" - }, -/turf/simulated/floor/plating, -/area/casino/casino_maintenance) -"aE" = ( -/obj/structure/bed/chair{ - dir = 8 - }, -/turf/simulated/floor/tiled, -/area/casino/casino_bridge) -"aF" = ( -/obj/structure/bed/chair{ - dir = 4 - }, -/obj/effect/decal/cleanable/blood/splatter, -/turf/simulated/floor/tiled, -/area/casino/casino_bridge) -"aH" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 9; - icon_state = "warning" - }, -/obj/machinery/airlock_sensor{ - frequency = 1380; - id_tag = "casino_dock_sensor"; - pixel_x = -30; - pixel_y = -8 - }, -/obj/item/device/multitool, -/obj/item/plastique, -/turf/simulated/floor/plating, -/area/casino/casino_maintenance) -"aI" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 5 - }, -/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{ - id_tag = "admin_shuttle_dock_pump" - }, -/obj/item/device/radio/intercom{ - dir = 8; - pixel_x = 22 - }, -/turf/simulated/floor/plating, -/area/casino/casino_maintenance) -"aJ" = ( -/obj/structure/table/steel_reinforced, -/obj/random/loot, -/turf/simulated/floor/tiled, -/area/casino/casino_bridge) -"aL" = ( -/obj/structure/table/steel_reinforced, -/obj/item/device/radio, -/turf/simulated/floor/tiled, -/area/casino/casino_bridge) -"aM" = ( -/obj/machinery/computer/modular{ - dir = 8; - name = "Security console" - }, -/turf/simulated/floor/tiled, -/area/casino/casino_bridge) -"aN" = ( -/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{ - dir = 4; - id_tag = "admin_shuttle_dock_pump" - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 10 - }, -/turf/simulated/floor/plating, -/area/casino/casino_maintenance) -"aO" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden{ - dir = 4 - }, -/obj/machinery/light/small{ - dir = 4 - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 6 - }, -/turf/simulated/floor/plating, -/area/casino/casino_maintenance) -"aT" = ( -/obj/effect/wingrille_spawn/reinforced, -/turf/simulated/floor/plating, -/area/casino/casino_maintenance) -"aU" = ( -/obj/machinery/atmospherics/pipe/simple/hidden, -/obj/machinery/door/airlock/external{ - frequency = 1380; - icon_state = "door_closed"; - id_tag = "casino_dock_inner"; - name = "Docking Port Airlock" - }, -/turf/simulated/floor/plating, -/area/casino/casino_maintenance) -"aV" = ( -/obj/machinery/light{ - dir = 8; - icon_state = "tube1" - }, -/obj/structure/cable{ - d2 = 4; - icon_state = "0-4" - }, -/obj/machinery/button/blast_door{ - id_tag = "casino_weaponry"; - name = "Weaponry Blast Door contol"; - pixel_y = -25 - }, -/obj/structure/flora/pottedplant/unusual, -/obj/machinery/power/apc{ - dir = 8; - name = "west bump"; - pixel_x = -24 - }, -/turf/simulated/floor/tiled, -/area/casino/casino_bridge) -"aW" = ( -/obj/machinery/button/blast_door{ - id_tag = "casino_bridge"; - name = "Casino Bridge Blast Door contol"; - pixel_y = -25 - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/casino/casino_bridge) -"ba" = ( -/obj/structure/closet/emcloset, -/obj/machinery/light{ - dir = 4; - icon_state = "tube1" - }, -/turf/simulated/floor/tiled, -/area/casino/casino_bridge) -"bb" = ( -/obj/structure/lattice, -/obj/structure/grille, -/turf/space, -/area/space) -"bc" = ( -/obj/machinery/embedded_controller/radio/airlock/docking_port{ - frequency = 1380; - id_tag = "casino_dock_airlock"; - pixel_x = -24; - pixel_y = 6; - req_access = newlist(); - tag_airpump = "casino_dock_pump"; - tag_chamber_sensor = "casino_dock_sensor"; - tag_exterior_door = "casino_dock_outer"; - tag_interior_door = "casino_dock_inner" - }, -/obj/machinery/light{ - dir = 8 - }, -/obj/machinery/portable_atmospherics/canister/air/airlock, -/obj/machinery/atmospherics/portables_connector{ - dir = 4 - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled/dark, -/area/casino/casino_maintenance) -"bd" = ( -/obj/machinery/alarm{ - dir = 8; - pixel_x = 24 - }, -/obj/effect/decal/cleanable/blood/drip, -/obj/machinery/atmospherics/pipe/manifold/hidden{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark, -/area/casino/casino_maintenance) -"be" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock{ - name = "Casino Bridge" - }, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/plating, -/area/casino/casino_bridge) -"bf" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock{ - name = "Casino Bridge" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/plating, -/area/casino/casino_bridge) -"bh" = ( -/turf/simulated/floor/tiled/dark, -/area/casino/casino_maintenance) -"bi" = ( -/obj/machinery/atmospherics/binary/pump{ - dir = 1 - }, -/turf/simulated/floor/tiled/dark, -/area/casino/casino_maintenance) -"bj" = ( -/obj/structure/table/rack, -/obj/item/gun/projectile/pistol/sec/MK{ - pixel_x = 4; - pixel_y = 4 - }, -/obj/item/gun/projectile/pistol/sec/MK{ - pixel_x = 2; - pixel_y = 2 - }, -/obj/item/gun/projectile/pistol/sec/MK, -/turf/simulated/floor/plating, -/area/casino/casino_maintenance) -"bk" = ( -/obj/machinery/door/blast/regular{ - id_tag = "casino_weaponry" - }, -/turf/simulated/floor/plating, -/area/casino/casino_maintenance) -"bl" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/turf/simulated/floor/plating, -/area/casino/casino_maintenance) -"bm" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable{ - icon_state = "6-8" - }, -/turf/simulated/floor/plating, -/area/casino/casino_maintenance) -"bn" = ( -/obj/effect/decal/cleanable/blood/splatter, -/turf/simulated/floor/plating, -/area/casino/casino_maintenance) -"bo" = ( -/obj/machinery/floodlight, -/obj/machinery/light/small{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/casino/casino_maintenance) -"bp" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/universal, -/turf/simulated/floor/tiled/dark, -/area/casino/casino_maintenance) -"bq" = ( -/turf/simulated/wall/r_wall, -/area/casino/casino_security) -"br" = ( -/turf/simulated/wall/r_wall, -/area/casino/casino_hangar) -"bt" = ( -/obj/effect/shuttle_landmark/nav_casino/nav3, -/turf/space, -/area/space) -"bu" = ( -/obj/structure/table/rack, -/obj/item/material/knife/combat, -/turf/simulated/floor/plating, -/area/casino/casino_maintenance) -"bv" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/turf/simulated/floor/plating, -/area/casino/casino_maintenance) -"bw" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/casino/casino_maintenance) -"bz" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/casino/casino_maintenance) -"bA" = ( -/obj/item/trash/cigbutt/professionals{ - pixel_x = 4; - pixel_y = -5 - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/casino/casino_maintenance) -"bB" = ( -/obj/item/trash/cigbutt/professionals, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/casino/casino_maintenance) -"bC" = ( -/obj/machinery/light/small{ - dir = 1 - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/casino/casino_maintenance) -"bD" = ( -/obj/item/material/shard, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/casino/casino_maintenance) -"bE" = ( -/obj/effect/decal/cleanable/blood/drip, -/obj/effect/decal/cleanable/blood/drip, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/casino/casino_maintenance) -"bF" = ( -/obj/effect/decal/cleanable/blood/drip, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/casino/casino_maintenance) -"bG" = ( -/obj/machinery/door/airlock{ - name = "Security wing" - }, -/obj/machinery/door/firedoor, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/casino/casino_security) -"bI" = ( -/obj/structure/fireaxecabinet{ - pixel_y = 30 - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 1 - }, -/turf/simulated/floor/tiled, -/area/casino/casino_security) -"bJ" = ( -/obj/machinery/light{ - dir = 1 - }, -/obj/structure/cable{ - icon_state = "6-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/casino/casino_security) -"bK" = ( -/obj/structure/reagent_dispensers/peppertank{ - pixel_y = 25 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/casino/casino_security) -"bL" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/alarm{ - pixel_y = 25 - }, -/turf/simulated/floor/tiled, -/area/casino/casino_security) -"bM" = ( -/obj/machinery/door/airlock{ - name = "Shuttle control" - }, -/obj/effect/decal/cleanable/blood/splatter, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/door/firedoor, -/turf/simulated/floor/tiled, -/area/casino/casino_security) -"bN" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/turf/simulated/floor/plating, -/area/casino/casino_security) -"bO" = ( -/obj/machinery/light{ - dir = 1 - }, -/obj/item/gun/projectile/shotgun/pump, -/obj/effect/decal/cleanable/blood/splatter, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 8; - level = 2 - }, -/turf/simulated/floor/plating, -/area/casino/casino_security) -"bP" = ( -/obj/machinery/button/blast_door{ - id_tag = "casino_shuttle_control"; - name = "Shuttle control blast door-control"; - pixel_x = 10; - pixel_y = 25 - }, -/obj/machinery/button/blast_door{ - id_tag = "casino_hangar"; - name = "Hangar gates"; - pixel_x = -5; - pixel_y = 25 - }, -/obj/effect/decal/cleanable/blood/splatter, -/turf/simulated/floor/plating, -/area/casino/casino_security) -"bQ" = ( -/obj/structure/bed/chair, -/turf/simulated/floor/plating, -/area/casino/casino_security) -"bR" = ( -/obj/machinery/alarm{ - pixel_y = 25 - }, -/turf/simulated/floor/plating, -/area/casino/casino_security) -"bS" = ( -/obj/machinery/portable_atmospherics/canister/air, -/obj/machinery/atmospherics/portables_connector, -/turf/simulated/floor/plating, -/area/casino/casino_security) -"bT" = ( -/obj/machinery/atmospherics/unary/tank/nitrogen, -/turf/simulated/floor/tiled, -/area/casino/casino_hangar) -"bU" = ( -/obj/structure/table/rack, -/obj/item/gun/projectile/shotgun/pump/combat, -/turf/simulated/floor/plating, -/area/casino/casino_maintenance) -"bV" = ( -/obj/random/trash, -/turf/simulated/floor/plating, -/area/casino/casino_maintenance) -"bW" = ( -/turf/simulated/floor/plating, -/area/casino/casino_maintenance) -"bZ" = ( -/turf/simulated/wall, -/area/casino/casino_maintenance) -"ca" = ( -/turf/simulated/wall, -/area/casino/casino_crew_bunk) -"cb" = ( -/turf/simulated/wall/r_wall, -/area/casino/casino_crew_bunk) -"cc" = ( -/turf/simulated/floor/tiled, -/area/casino/casino_security) -"cd" = ( -/obj/effect/decal/cleanable/blood/splatter, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled, -/area/casino/casino_security) -"ce" = ( -/obj/structure/cable{ - icon_state = "4-9" - }, -/turf/simulated/floor/tiled, -/area/casino/casino_security) -"cf" = ( -/obj/structure/cable{ - d2 = 8; - icon_state = "0-8" - }, -/obj/structure/flora/pottedplant/unusual, -/obj/machinery/power/apc{ - dir = 4; - name = "east bump"; - pixel_x = 24 - }, -/turf/simulated/floor/tiled, -/area/casino/casino_security) -"cg" = ( -/obj/structure/table/rack, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 1 - }, -/turf/simulated/floor/plating, -/area/casino/casino_security) -"ch" = ( -/obj/structure/table/rack, -/turf/simulated/floor/plating, -/area/casino/casino_security) -"ci" = ( -/obj/structure/table/steel_reinforced, -/obj/item/wrench, -/turf/simulated/floor/plating, -/area/casino/casino_security) -"cj" = ( -/obj/structure/table/steel_reinforced, -/obj/item/device/radio, -/turf/simulated/floor/plating, -/area/casino/casino_security) -"ck" = ( -/obj/structure/table/steel_reinforced, -/turf/simulated/floor/plating, -/area/casino/casino_security) -"cl" = ( -/obj/machinery/atmospherics/binary/pump/high_power, -/turf/simulated/floor/plating, -/area/casino/casino_security) -"cm" = ( -/obj/machinery/atmospherics/portables_connector{ - dir = 1 - }, -/obj/machinery/portable_atmospherics/canister/nitrogen, -/turf/simulated/floor/tiled, -/area/casino/casino_hangar) -"cn" = ( -/obj/structure/table/rack, -/obj/item/tank/nitrogen, -/obj/item/tank/nitrogen, -/obj/item/tank/nitrogen, -/turf/simulated/floor/tiled, -/area/casino/casino_hangar) -"co" = ( -/turf/simulated/wall/r_wall, -/area/casino/casino_crew_bathroom) -"cp" = ( -/turf/simulated/wall, -/area/casino/casino_crew_bathroom) -"cq" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/plating, -/area/casino/casino_maintenance) -"cr" = ( -/obj/structure/bed, -/obj/random/plushie, -/obj/machinery/atmospherics/unary/vent_pump/on, -/turf/simulated/floor/tiled, -/area/casino/casino_crew_bunk) -"cs" = ( -/obj/structure/closet, -/obj/random/accessory, -/obj/random/glasses, -/obj/random/shoes, -/obj/structure/cable{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/turf/simulated/floor/tiled, -/area/casino/casino_crew_bunk) -"ct" = ( -/obj/machinery/light{ - dir = 1 - }, -/obj/structure/bed, -/obj/effect/decal/cleanable/blood/splatter, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled, -/area/casino/casino_crew_bunk) -"cu" = ( -/obj/machinery/vending/wallmed1{ - pixel_y = 25 - }, -/obj/structure/closet, -/obj/random/smokes, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled, -/area/casino/casino_crew_bunk) -"cv" = ( -/obj/structure/bed, -/obj/effect/decal/cleanable/blood/splatter, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled, -/area/casino/casino_crew_bunk) -"cw" = ( -/obj/structure/closet, -/obj/random/accessory, -/obj/random/drinkbottle, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled, -/area/casino/casino_crew_bunk) -"cx" = ( -/obj/machinery/light{ - dir = 1 - }, -/obj/structure/closet, -/obj/random/junk, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled, -/area/casino/casino_crew_bunk) -"cy" = ( -/obj/structure/bed, -/obj/structure/cable{ - d2 = 8; - icon_state = "0-8" - }, -/obj/machinery/power/apc{ - dir = 4; - name = "east bump"; - pixel_x = 24 - }, -/turf/simulated/floor/tiled, -/area/casino/casino_crew_bunk) -"cz" = ( -/obj/structure/table/steel_reinforced, -/obj/random/firstaid, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 1; - level = 2 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled, -/area/casino/casino_security) -"cA" = ( -/obj/effect/decal/cleanable/blood/splatter, -/turf/simulated/floor/tiled, -/area/casino/casino_security) -"cB" = ( -/obj/structure/table/steel_reinforced, -/obj/item/device/radio, -/turf/simulated/floor/tiled, -/area/casino/casino_security) -"cC" = ( -/obj/machinery/computer/modular{ - dir = 8; - name = "Gambling console" - }, -/turf/simulated/floor/tiled, -/area/casino/casino_security) -"cD" = ( -/obj/effect/wallframe_spawn/reinforced, -/obj/machinery/door/blast/regular/open{ - icon_state = "pdoor0"; - id_tag = "casino_shuttle_control" - }, -/obj/machinery/door/firedoor, -/turf/simulated/floor/tiled, -/area/casino/casino_security) -"cE" = ( -/obj/machinery/atmospherics/pipe/simple/visible/cyan, -/turf/simulated/wall/r_wall, -/area/casino/casino_security) -"cF" = ( -/turf/simulated/floor/tiled, -/area/casino/casino_hangar) -"cH" = ( -/turf/simulated/floor/tiled/white, -/area/casino/casino_crew_bathroom) -"cI" = ( -/obj/structure/cable{ - d2 = 4; - icon_state = "0-4" - }, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, -/obj/machinery/power/apc{ - dir = 1; - name = "north bump"; - pixel_y = 24; - req_access = newlist() - }, -/turf/simulated/floor/tiled/white, -/area/casino/casino_crew_bathroom) -"cJ" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock{ - name = "Crew toilet" - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/casino/casino_crew_bathroom) -"cL" = ( -/obj/effect/decal/cleanable/blood/splatter, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/tiled, -/area/casino/casino_crew_bunk) -"cM" = ( -/obj/effect/decal/cleanable/blood/splatter, -/obj/structure/cable{ - icon_state = "1-10" - }, -/turf/simulated/floor/tiled, -/area/casino/casino_crew_bunk) -"cN" = ( -/obj/effect/decal/cleanable/blood/splatter, -/turf/simulated/floor/tiled, -/area/casino/casino_crew_bunk) -"cO" = ( -/turf/simulated/floor/tiled, -/area/casino/casino_crew_bunk) -"cP" = ( -/obj/structure/closet/emcloset, -/turf/simulated/floor/tiled, -/area/casino/casino_crew_bunk) -"cQ" = ( -/obj/structure/table/steel_reinforced, -/obj/random/firstaid, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 1 - }, -/turf/simulated/floor/tiled, -/area/casino/casino_security) -"cS" = ( -/obj/structure/bed/chair{ - dir = 4 - }, -/obj/effect/decal/cleanable/blood, -/turf/simulated/floor/tiled, -/area/casino/casino_security) -"cT" = ( -/obj/machinery/light{ - dir = 4; - icon_state = "tube1" - }, -/obj/machinery/computer/modular{ - dir = 8; - icon_state = "console"; - name = "Cameras console" - }, -/turf/simulated/floor/tiled, -/area/casino/casino_security) -"cU" = ( -/obj/effect/floor_decal/industrial/warning, -/obj/machinery/light{ - dir = 1 - }, -/turf/simulated/floor/tiled, -/area/casino/casino_hangar) -"cV" = ( -/obj/effect/floor_decal/industrial/warning, -/turf/simulated/floor/tiled, -/area/casino/casino_hangar) -"cW" = ( -/obj/effect/floor_decal/industrial/warning, -/obj/machinery/atmospherics/unary/vent_pump/high_volume{ - dir = 1; - external_pressure_bound = 140; - external_pressure_bound_default = 140; - icon_state = "map_vent_out"; - use_power = 1 - }, -/turf/simulated/floor/tiled, -/area/casino/casino_hangar) -"cX" = ( -/obj/machinery/door/blast/regular{ - dir = 8; - id_tag = "casino_hangar"; - name = "Hangar gate" - }, -/turf/simulated/floor/plating, -/area/casino/casino_hangar) -"cY" = ( -/obj/structure/lattice, -/turf/space, -/area/space) -"cZ" = ( -/obj/effect/decal/cleanable/blood/splatter, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 1 - }, -/turf/simulated/floor/tiled/white, -/area/casino/casino_crew_bathroom) -"db" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock{ - name = "Crew bunk room" - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/casino/casino_maintenance) -"dc" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled, -/area/casino/casino_crew_cantina) -"dd" = ( -/obj/structure/closet, -/obj/random/glasses, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 8 - }, -/turf/simulated/floor/tiled, -/area/casino/casino_crew_bunk) -"de" = ( -/obj/machinery/light, -/obj/structure/bed, -/turf/simulated/floor/tiled, -/area/casino/casino_crew_bunk) -"df" = ( -/obj/structure/closet, -/obj/random/junk, -/obj/random/smokes, -/turf/simulated/floor/tiled, -/area/casino/casino_crew_bunk) -"dg" = ( -/obj/structure/bed, -/turf/simulated/floor/tiled, -/area/casino/casino_crew_bunk) -"dh" = ( -/obj/structure/bed, -/obj/random/plushie, -/obj/effect/decal/cleanable/blood/splatter, -/turf/simulated/floor/tiled, -/area/casino/casino_crew_bunk) -"di" = ( -/obj/machinery/light, -/obj/structure/closet, -/obj/random/action_figure, -/obj/random/shoes, -/turf/simulated/floor/tiled, -/area/casino/casino_crew_bunk) -"dj" = ( -/obj/machinery/vending/security{ - req_access = list() - }, -/turf/simulated/floor/tiled, -/area/casino/casino_security) -"dm" = ( -/obj/machinery/computer/modular{ - dir = 8; - name = "Security console" - }, -/turf/simulated/floor/tiled, -/area/casino/casino_security) -"dn" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/casino/casino_hangar) -"dr" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 8; - icon_state = "warning" - }, -/turf/simulated/floor/tiled, -/area/casino/casino_hangar) -"ds" = ( -/obj/machinery/power/tracker, -/obj/structure/cable/yellow{ - d2 = 2; - icon_state = "0-2" - }, -/turf/simulated/floor/airless, -/area/space) -"dt" = ( -/obj/structure/hygiene/toilet{ - dir = 4 - }, -/obj/machinery/light{ - dir = 8; - icon_state = "tube1" - }, -/obj/item/material/knife/folding, -/obj/effect/decal/cleanable/blood/splatter, -/turf/simulated/floor/tiled/white, -/area/casino/casino_crew_bathroom) -"du" = ( -/obj/machinery/door/airlock{ - name = "Crew toilet" - }, -/turf/simulated/floor/tiled/white, -/area/casino/casino_crew_bathroom) -"dx" = ( -/turf/simulated/wall, -/area/casino/casino_storage) -"dy" = ( -/turf/simulated/wall/r_wall, -/area/casino/casino_storage) -"dz" = ( -/obj/random/ammo, -/turf/simulated/floor/tiled, -/area/casino/casino_security) -"dA" = ( -/obj/structure/table/rack, -/obj/item/gun/projectile/shotgun/pump, -/obj/item/gun/projectile/shotgun/pump, -/obj/item/gun/projectile/shotgun/pump, -/turf/simulated/floor/tiled, -/area/casino/casino_security) -"dB" = ( -/obj/structure/table/rack, -/obj/item/storage/box/ammo/shotgunammo, -/obj/item/storage/box/ammo/shotgunammo, -/obj/item/storage/box/ammo/shotgunammo, -/turf/simulated/floor/tiled, -/area/casino/casino_security) -"dC" = ( -/obj/structure/table/rack, -/obj/item/clothing/suit/armor/bulletproof/vest, -/obj/item/clothing/suit/armor/bulletproof/vest, -/turf/simulated/floor/tiled, -/area/casino/casino_security) -"dD" = ( -/obj/structure/table/rack, -/obj/random/voidsuit, -/obj/random/voidhelmet, -/obj/item/tank/air, -/turf/simulated/floor/tiled, -/area/casino/casino_security) -"dE" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 4 - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/casino/casino_hangar) -"dL" = ( -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/airless, -/area/space) -"dM" = ( -/obj/structure/bed/chair/comfy/red{ - dir = 8 - }, -/turf/simulated/floor/plating, -/area/casino/casino_storage) -"dN" = ( -/obj/structure/table/gamblingtable, -/obj/structure/casino/bj_table, -/turf/simulated/floor/plating, -/area/casino/casino_storage) -"dO" = ( -/obj/structure/table/gamblingtable, -/obj/structure/casino/bj_table/bj_right, -/turf/simulated/floor/plating, -/area/casino/casino_storage) -"dP" = ( -/obj/structure/reagent_dispensers/watertank, -/turf/simulated/floor/plating, -/area/casino/casino_storage) -"dQ" = ( -/obj/structure/table/woodentable, -/obj/item/storage/fancy/cigar{ - pixel_y = 5 - }, -/obj/item/storage/fancy/cigar{ - pixel_y = 5 - }, -/obj/item/storage/fancy/cigar{ - pixel_y = 5 - }, -/obj/item/storage/fancy/cigar{ - pixel_y = 5 - }, -/obj/item/storage/fancy/cigar{ - pixel_y = 5 - }, -/obj/random/tool, -/turf/simulated/floor/plating, -/area/casino/casino_storage) -"dR" = ( -/obj/structure/bed/chair, -/turf/simulated/floor/plating, -/area/casino/casino_storage) -"dS" = ( -/obj/structure/table/woodentable, -/obj/item/storage/toolbox/mechanical, -/obj/item/stack/cable_coil, -/turf/simulated/floor/plating, -/area/casino/casino_storage) -"dT" = ( -/obj/structure/bed/chair/office/light, -/turf/simulated/floor/plating, -/area/casino/casino_storage) -"dU" = ( -/obj/item/clothing/suit/armor/bulletproof/vest, -/obj/random/ammo, -/turf/simulated/floor/tiled, -/area/casino/casino_security) -"eb" = ( -/obj/effect/overmap/visitable/ship/casino, -/turf/space, -/area/space) -"ec" = ( -/obj/structure/cable/yellow{ - d2 = 2; - icon_state = "0-2" - }, -/obj/machinery/power/solar{ - id = "auxsolarstarboard"; - name = "Starboard Auxiliary Solar Array" - }, -/obj/effect/floor_decal/solarpanel, -/turf/simulated/floor/airless, -/area/space) -"ed" = ( -/turf/simulated/floor/airless, -/area/space) -"ee" = ( -/obj/structure/hygiene/shower{ - dir = 4 - }, -/obj/machinery/light{ - dir = 8; - icon_state = "tube1" - }, -/turf/simulated/floor/tiled/white, -/area/casino/casino_crew_bathroom) -"ef" = ( -/obj/structure/curtain/open/shower, -/turf/simulated/floor/tiled/white, -/area/casino/casino_crew_bathroom) -"eg" = ( -/obj/random/trash, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/plating, -/area/casino/casino_maintenance) -"eh" = ( -/obj/structure/table/gamblingtable, -/obj/structure/casino/roulette_chart, -/obj/machinery/light{ - dir = 8; - icon_state = "tube1" - }, -/turf/simulated/floor/plating, -/area/casino/casino_storage) -"ei" = ( -/obj/structure/table/gamblingtable, -/obj/structure/casino/roulette, -/turf/simulated/floor/plating, -/area/casino/casino_storage) -"ej" = ( -/obj/item/stock_parts/circuitboard/broken, -/turf/simulated/floor/plating, -/area/casino/casino_storage) -"ek" = ( -/turf/simulated/floor/plating, -/area/casino/casino_storage) -"el" = ( -/obj/machinery/light{ - dir = 4; - icon_state = "tube1" - }, -/turf/simulated/floor/plating, -/area/casino/casino_storage) -"em" = ( -/obj/random/ammo, -/obj/machinery/light{ - dir = 4; - icon_state = "tube1" - }, -/turf/simulated/floor/tiled, -/area/casino/casino_security) -"en" = ( -/obj/structure/safe, -/turf/simulated/floor/plating, -/area/casino/casino_security) -"eq" = ( -/obj/structure/cable/yellow{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/turf/simulated/floor/airless, -/area/space) -"er" = ( -/obj/structure/cable/yellow{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/airless, -/area/space) -"es" = ( -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/airless, -/area/space) -"et" = ( -/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/structure/cable/yellow{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/turf/simulated/floor/airless, -/area/space) -"eu" = ( -/obj/structure/cable/yellow{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/airless, -/area/space) -"ev" = ( -/obj/structure/cable/yellow{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/turf/simulated/floor/airless, -/area/space) -"ew" = ( -/obj/structure/reagent_dispensers/beerkeg, -/turf/simulated/floor/plating, -/area/casino/casino_storage) -"ex" = ( -/obj/structure/casino/oh_bandit, -/turf/simulated/floor/plating, -/area/casino/casino_storage) -"ey" = ( -/obj/structure/bed/chair, -/obj/effect/decal/cleanable/blood/splatter, -/turf/simulated/floor/plating, -/area/casino/casino_storage) -"ez" = ( -/obj/effect/decal/cleanable/blood/splatter, -/turf/simulated/floor/plating, -/area/casino/casino_storage) -"eA" = ( -/obj/item/device/multitool, -/obj/item/wirecutters, -/turf/simulated/floor/tiled, -/area/casino/casino_security) -"eB" = ( -/obj/machinery/door/airlock/highsecurity{ - name = "Safe area" - }, -/turf/simulated/floor/plating, -/area/casino/casino_security) -"eC" = ( -/obj/random/coin, -/obj/random/cash, -/obj/random/ammo, -/turf/simulated/floor/plating, -/area/casino/casino_security) -"eD" = ( -/obj/random/coin, -/obj/random/ammo, -/obj/random/ammo, -/turf/simulated/floor/plating, -/area/casino/casino_security) -"eE" = ( -/obj/random/coin, -/obj/random/coin, -/obj/item/storage/bag/cash, -/turf/simulated/floor/plating, -/area/casino/casino_security) -"eF" = ( -/obj/machinery/light{ - dir = 8; - icon_state = "tube1" - }, -/turf/simulated/floor/tiled, -/area/casino/casino_hangar) -"eG" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 1; - icon_state = "warning" - }, -/turf/simulated/floor/tiled, -/area/casino/casino_hangar) -"eH" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 1; - icon_state = "warning" - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled, -/area/casino/casino_hangar) -"eI" = ( -/obj/structure/cable/yellow, -/obj/machinery/power/solar{ - id = "auxsolarstarboard"; - name = "Starboard Auxiliary Solar Array" - }, -/obj/effect/floor_decal/solarpanel, -/turf/simulated/floor/airless, -/area/space) -"eJ" = ( -/obj/structure/reagent_dispensers/watertank, -/turf/simulated/floor/plating, -/area/casino/casino_maintenance) -"eK" = ( -/obj/structure/reagent_dispensers/watertank, -/obj/machinery/light/small{ - dir = 1 - }, -/turf/simulated/floor/plating, -/area/casino/casino_maintenance) -"eL" = ( -/obj/machinery/vending/assist, -/turf/simulated/floor/plating, -/area/casino/casino_maintenance) -"eM" = ( -/obj/machinery/vending/engineering{ - req_access = list() - }, -/turf/simulated/floor/plating, -/area/casino/casino_maintenance) -"eN" = ( -/obj/machinery/light/small{ - dir = 4 - }, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/plating, -/area/casino/casino_maintenance) -"eO" = ( -/obj/machinery/constructable_frame/machine_frame, -/turf/simulated/floor/plating, -/area/casino/casino_storage) -"eP" = ( -/obj/machinery/light, -/obj/machinery/vending/tool, -/turf/simulated/floor/plating, -/area/casino/casino_storage) -"eQ" = ( -/obj/structure/table/steel_reinforced, -/obj/random/tech_supply, -/obj/random/tech_supply, -/turf/simulated/floor/plating, -/area/casino/casino_storage) -"eR" = ( -/obj/structure/table/steel_reinforced, -/obj/item/storage/toolbox/electrical, -/turf/simulated/floor/plating, -/area/casino/casino_storage) -"eS" = ( -/obj/structure/table/steel_reinforced, -/obj/machinery/light, -/obj/random/coin, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/casino/casino_storage) -"eT" = ( -/obj/structure/table/steel_reinforced, -/obj/random/tool, -/obj/item/stock_parts/circuitboard/recharge_station, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/casino/casino_storage) -"eU" = ( -/obj/effect/decal/cleanable/blood/splatter, -/obj/structure/cable{ - d2 = 2; - icon_state = "0-2"; - pixel_y = 1 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/obj/machinery/power/apc{ - dir = 4; - name = "east bump"; - pixel_x = 24 - }, -/turf/simulated/floor/plating, -/area/casino/casino_storage) -"eV" = ( -/obj/random/cash, -/obj/effect/decal/cleanable/blood/splatter, -/turf/simulated/floor/tiled, -/area/casino/casino_security) -"eW" = ( -/obj/structure/cable{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/turf/simulated/floor/tiled, -/area/casino/casino_hangar) -"eX" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled, -/area/casino/casino_hangar) -"eY" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/turf/simulated/floor/tiled, -/area/casino/casino_hangar) -"eZ" = ( -/obj/structure/cable{ - d2 = 8; - icon_state = "0-8" - }, -/obj/machinery/power/apc{ - name = "south bump"; - pixel_y = -24 - }, -/turf/simulated/floor/tiled, -/area/casino/casino_hangar) -"fa" = ( -/obj/structure/closet/emcloset, -/turf/simulated/floor/tiled, -/area/casino/casino_hangar) -"fb" = ( -/obj/structure/closet/emcloset, -/obj/machinery/light{ - dir = 4; - icon_state = "tube1" - }, -/turf/simulated/floor/tiled, -/area/casino/casino_hangar) -"fc" = ( -/obj/machinery/floodlight, -/turf/simulated/floor/plating, -/area/casino/casino_maintenance) -"fd" = ( -/obj/structure/reagent_dispensers/beerkeg, -/turf/simulated/floor/plating, -/area/casino/casino_maintenance) -"fe" = ( -/obj/structure/cable{ - d2 = 2; - icon_state = "0-2"; - pixel_y = 1 - }, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/power/apc{ - dir = 4; - name = "east bump"; - pixel_x = 24 - }, -/turf/simulated/floor/plating, -/area/casino/casino_maintenance) -"ff" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock{ - name = "Kitchen" - }, -/obj/effect/decal/cleanable/blood/splatter, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled, -/area/casino/casino_maintenance) -"fg" = ( -/obj/machinery/door/airlock{ - name = "Security wing" - }, -/obj/machinery/door/firedoor, -/obj/effect/decal/cleanable/blood/splatter, -/turf/simulated/floor/plating, -/area/casino/casino_security) -"fh" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock{ - name = "Shuttle hangar" - }, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/door/blast/regular{ - density = 0; - dir = 4; - icon_state = "pdoor0"; - id_tag = "casino_checkpoint"; - name = "Casino Checkpoint Blast Doors"; - opacity = 0 - }, -/turf/simulated/floor/tiled, -/area/casino/casino_security) -"fi" = ( -/obj/structure/reagent_dispensers/fueltank, -/turf/simulated/floor/plating, -/area/casino/casino_maintenance) -"fj" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, -/turf/simulated/floor/plating, -/area/casino/casino_maintenance) -"fk" = ( -/obj/random/trash, -/obj/structure/cable{ - icon_state = "4-10" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/casino/casino_maintenance) -"fo" = ( -/obj/machinery/door/airlock{ - name = "Main desk" - }, -/obj/machinery/door/firedoor, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/casino/casino_maintenance) -"fq" = ( -/obj/random/coin, -/obj/machinery/light{ - dir = 1 - }, -/obj/effect/decal/cleanable/blood/splatter, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/casino/casino_security) -"fr" = ( -/obj/machinery/door/airlock{ - name = "Shuttle checkpoint" - }, -/obj/machinery/door/firedoor, -/obj/effect/decal/cleanable/blood/splatter, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/casino/casino_security) -"fu" = ( -/obj/structure/table/steel_reinforced, -/obj/machinery/door/window/brigdoor/eastleft, -/obj/machinery/door/window/brigdoor/westleft, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/door/blast/regular{ - density = 0; - dir = 4; - icon_state = "pdoor0"; - id_tag = "casino_checkpoint"; - name = "Casino Checkpoint Blast Doors"; - opacity = 0 - }, -/turf/simulated/floor/tiled, -/area/casino/casino_security) -"fv" = ( -/obj/effect/decal/cleanable/blood/drip, -/obj/structure/cable{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/turf/simulated/floor/tiled, -/area/casino/casino_security) -"fw" = ( -/obj/machinery/light{ - dir = 4; - icon_state = "tube1" - }, -/obj/structure/coatrack, -/turf/simulated/floor/tiled, -/area/casino/casino_security) -"fx" = ( -/obj/random/loot, -/turf/simulated/floor/carpet, -/area/casino/casino_mainfloor) -"fy" = ( -/obj/structure/casino/oh_bandit, -/obj/machinery/light{ - dir = 1 - }, -/turf/simulated/floor/carpet, -/area/casino/casino_mainfloor) -"fz" = ( -/obj/structure/casino/oh_bandit, -/turf/simulated/floor/carpet, -/area/casino/casino_mainfloor) -"fA" = ( -/obj/effect/wallframe_spawn/reinforced, -/obj/machinery/door/blast/regular/open{ - density = 0; - dir = 8; - icon_state = "pdoor0"; - id_tag = "casino_main" - }, -/obj/machinery/door/firedoor, -/turf/simulated/floor/plating, -/area/casino/casino_mainfloor) -"fB" = ( -/obj/machinery/light/small{ - dir = 8 - }, -/turf/simulated/floor/plating, -/area/casino/casino_maintenance) -"fC" = ( -/obj/structure/cable{ - icon_state = "2-5" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/plating, -/area/casino/casino_maintenance) -"fD" = ( -/obj/structure/closet/emcloset, -/turf/simulated/floor/plating, -/area/casino/casino_maintenance) -"fE" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock{ - name = "Kitchen" - }, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled, -/area/casino/casino_maintenance) -"fF" = ( -/obj/machinery/door/airlock{ - name = "Main desk" - }, -/obj/machinery/door/firedoor, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled, -/area/casino/casino_security) -"fH" = ( -/obj/structure/table/steel_reinforced, -/obj/item/device/radio, -/obj/machinery/light{ - dir = 4; - icon_state = "tube1" - }, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 1 - }, -/turf/simulated/floor/tiled, -/area/casino/casino_security) -"fI" = ( -/obj/effect/decal/cleanable/blood/drip, -/obj/item/ammo_casing/shotgun, -/turf/simulated/floor/tiled, -/area/casino/casino_security) -"fJ" = ( -/obj/item/material/shard, -/obj/structure/coatrack, -/turf/simulated/floor/tiled, -/area/casino/casino_security) -"fK" = ( -/obj/machinery/light{ - dir = 8; - icon_state = "tube1" - }, -/turf/simulated/floor/carpet, -/area/casino/casino_mainfloor) -"fL" = ( -/obj/structure/bed/chair/office/light{ - dir = 1 - }, -/turf/simulated/floor/carpet, -/area/casino/casino_mainfloor) -"fM" = ( -/obj/machinery/power/solar{ - id = "auxsolarstarboard"; - name = "Starboard Auxiliary Solar Array" - }, -/obj/structure/cable/yellow, -/obj/effect/floor_decal/solarpanel, -/turf/simulated/floor/airless, -/area/space) -"fN" = ( -/obj/structure/mopbucket, -/obj/item/mop, -/turf/simulated/floor/plating, -/area/casino/casino_maintenance) -"fO" = ( -/obj/item/reagent_containers/glass/bucket, -/turf/simulated/floor/plating, -/area/casino/casino_maintenance) -"fP" = ( -/obj/structure/closet/crate/trashcart, -/turf/simulated/floor/plating, -/area/casino/casino_maintenance) -"fQ" = ( -/turf/simulated/wall, -/area/casino/casino_crew_cantina) -"fR" = ( -/obj/effect/decal/cleanable/blood/splatter, -/obj/structure/cable, -/obj/machinery/power/apc{ - dir = 8; - name = "west bump"; - pixel_x = -24 - }, -/turf/simulated/floor/tiled, -/area/casino/casino_crew_cantina) -"fS" = ( -/obj/structure/table/standard{ - name = "plastic table frame" - }, -/obj/item/material/kitchen/utensil/fork, -/turf/simulated/floor/tiled, -/area/casino/casino_crew_cantina) -"fT" = ( -/obj/machinery/light{ - dir = 1 - }, -/obj/structure/table/standard{ - name = "plastic table frame" - }, -/obj/item/trash/plate, -/turf/simulated/floor/tiled, -/area/casino/casino_crew_cantina) -"fU" = ( -/obj/structure/table/standard{ - name = "plastic table frame" - }, -/obj/random/snack, -/turf/simulated/floor/tiled, -/area/casino/casino_crew_cantina) -"fV" = ( -/obj/structure/table/standard{ - name = "plastic table frame" - }, -/obj/item/reagent_containers/food/drinks/small_milk, -/turf/simulated/floor/tiled, -/area/casino/casino_crew_cantina) -"fW" = ( -/obj/structure/table/standard{ - name = "plastic table frame" - }, -/obj/item/trash/cigbutt/professionals, -/turf/simulated/floor/tiled, -/area/casino/casino_crew_cantina) -"fX" = ( -/obj/structure/table/standard{ - name = "plastic table frame" - }, -/obj/item/trash/plate, -/obj/random/snack, -/obj/random/snack, -/turf/simulated/floor/tiled, -/area/casino/casino_crew_cantina) -"fY" = ( -/obj/machinery/light{ - dir = 1 - }, -/obj/structure/table/standard{ - name = "plastic table frame" - }, -/obj/random/snack, -/turf/simulated/floor/tiled, -/area/casino/casino_crew_cantina) -"fZ" = ( -/obj/structure/closet/emcloset, -/turf/simulated/floor/tiled, -/area/casino/casino_crew_cantina) -"ga" = ( -/turf/simulated/wall, -/area/casino/casino_mainfloor) -"gb" = ( -/obj/machinery/light{ - dir = 1; - icon_state = "tube1" - }, -/turf/simulated/floor/tiled, -/area/casino/casino_bridge) -"gc" = ( -/obj/structure/closet/emcloset, -/obj/machinery/light{ - dir = 4; - icon_state = "tube1" - }, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 8 - }, -/turf/simulated/floor/tiled, -/area/casino/casino_mainfloor) -"gd" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock{ - name = "Casino" - }, -/obj/machinery/door/blast/regular{ - density = 0; - dir = 4; - icon_state = "pdoor0"; - id_tag = "casino_checkpoint"; - name = "Casino Checkpoint Blast Doors"; - opacity = 0 - }, -/turf/simulated/floor/plating, -/area/casino/casino_security) -"ge" = ( -/turf/simulated/floor/carpet, -/area/casino/casino_mainfloor) -"gf" = ( -/obj/structure/window/basic, -/turf/simulated/floor/carpet, -/area/casino/casino_mainfloor) -"gg" = ( -/turf/simulated/wall/r_wall, -/area/casino/casino_solar_control) -"gh" = ( -/obj/structure/table/rack{ - dir = 8 - }, -/obj/random/material, -/obj/random/material, -/obj/random/material, -/obj/random/material, -/turf/simulated/floor/plating, -/area/casino/casino_maintenance) -"gi" = ( -/obj/structure/table/rack{ - dir = 8 - }, -/obj/random/tech_supply, -/obj/item/stack/cable_coil, -/obj/item/stack/cable_coil, -/turf/simulated/floor/plating, -/area/casino/casino_maintenance) -"gj" = ( -/turf/simulated/floor/tiled, -/area/casino/casino_crew_cantina) -"gk" = ( -/obj/structure/bed/chair{ - dir = 1 - }, -/obj/effect/decal/cleanable/blood/splatter, -/turf/simulated/floor/tiled, -/area/casino/casino_crew_cantina) -"gl" = ( -/obj/structure/bed/chair{ - dir = 1 - }, -/turf/simulated/floor/tiled, -/area/casino/casino_crew_cantina) -"gm" = ( -/obj/structure/bed/chair{ - dir = 1 - }, -/obj/item/reagent_containers/food/drinks/flask/shiny, -/turf/simulated/floor/tiled, -/area/casino/casino_crew_cantina) -"gn" = ( -/obj/structure/bed/chair{ - dir = 1 - }, -/obj/random/snack, -/turf/simulated/floor/tiled, -/area/casino/casino_crew_cantina) -"gp" = ( -/obj/random/ammo, -/turf/simulated/floor/tiled, -/area/casino/casino_mainfloor) -"gq" = ( -/obj/structure/safe, -/obj/random/coin, -/obj/random/coin, -/obj/random/coin, -/obj/random/coin, -/obj/random/coin, -/obj/random/coin, -/obj/random/coin, -/obj/random/coin, -/obj/random/coin, -/obj/random/coin, -/obj/random/coin, -/obj/structure/fireaxecabinet{ - pixel_y = 30 - }, -/turf/simulated/floor/tiled, -/area/casino/casino_mainfloor) -"gr" = ( -/obj/structure/safe, -/obj/random/coin, -/obj/random/coin, -/obj/random/coin, -/obj/random/coin, -/obj/random/coin, -/obj/random/coin, -/obj/random/coin, -/obj/random/coin, -/obj/random/coin, -/obj/machinery/light{ - dir = 1 - }, -/turf/simulated/floor/tiled, -/area/casino/casino_mainfloor) -"gs" = ( -/obj/machinery/door/firedoor, -/obj/structure/table/marble, -/obj/machinery/button/blast_door{ - id_tag = "casino_main"; - name = "Main floor Blast Doors" - }, -/turf/simulated/floor/tiled, -/area/casino/casino_mainfloor) -"gt" = ( -/obj/machinery/door/firedoor, -/obj/structure/table/marble, -/turf/simulated/floor/tiled, -/area/casino/casino_mainfloor) -"gu" = ( -/obj/structure/table/woodentable, -/obj/item/clothing/mask/smokable/pipe, -/obj/machinery/light{ - dir = 1 - }, -/obj/item/material/ashtray/bronze, -/turf/simulated/floor/carpet, -/area/casino/casino_mainfloor) -"gv" = ( -/obj/structure/table/woodentable, -/obj/item/storage/fancy/cigar, -/obj/item/storage/fancy/cigar{ - pixel_y = 5 - }, -/turf/simulated/floor/carpet, -/area/casino/casino_mainfloor) -"gw" = ( -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/structure/cable/yellow{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/turf/simulated/floor/airless, -/area/space) -"gx" = ( -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/access_button{ - command = "cycle_exterior"; - frequency = 1439; - master_tag = "casino_solar_airlock"; - name = "exterior access button"; - pixel_x = 28; - pixel_y = 24; - req_access = newlist() - }, -/turf/simulated/floor/airless, -/area/space) -"gy" = ( -/obj/machinery/door/airlock/external{ - frequency = 1379; - icon_state = "door_locked"; - id_tag = "solar_casino_outer"; - locked = 1; - name = "External Access" - }, -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/plating, -/area/casino/casino_solar_control) -"gz" = ( -/obj/machinery/embedded_controller/radio/airlock/airlock_controller{ - frequency = 1439; - id_tag = "casino_solar_airlock"; - pixel_x = 24; - req_access = newlist(); - tag_airpump = "casino_solar_pump"; - tag_chamber_sensor = "casino_solar_sensor"; - tag_exterior_door = "casino_solar_outer"; - tag_interior_door = "casino_solar_inner" - }, -/obj/machinery/airlock_sensor{ - frequency = 1439; - id_tag = "casino_solar_sensor"; - pixel_x = 24; - pixel_y = 12 - }, -/obj/effect/floor_decal/industrial/warning/full, -/obj/machinery/oxygen_pump{ - pixel_y = 32 - }, -/obj/structure/cable/yellow{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/machinery/atmospherics/unary/vent_pump/high_volume{ - id_tag = "casino_solar_pump" - }, -/turf/simulated/floor/plating, -/area/casino/casino_solar_control) -"gA" = ( -/obj/structure/table/rack{ - dir = 8 - }, -/obj/item/stack/cable_coil, -/obj/random/material, -/turf/simulated/floor/plating, -/area/casino/casino_maintenance) -"gB" = ( -/obj/effect/decal/cleanable/generic, -/turf/simulated/floor/plating, -/area/casino/casino_maintenance) -"gC" = ( -/obj/structure/table/rack{ - dir = 8 - }, -/obj/random/tech_supply, -/turf/simulated/floor/plating, -/area/casino/casino_maintenance) -"gD" = ( -/obj/effect/decal/cleanable/blood/splatter, -/turf/simulated/floor/tiled, -/area/casino/casino_crew_cantina) -"gE" = ( -/obj/item/trash/cigbutt/menthol, -/turf/simulated/floor/tiled, -/area/casino/casino_crew_cantina) -"gG" = ( -/turf/simulated/floor/tiled, -/area/casino/casino_mainfloor) -"gH" = ( -/obj/random/coin, -/turf/simulated/floor/tiled, -/area/casino/casino_mainfloor) -"gI" = ( -/obj/structure/bed/chair{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/casino/casino_mainfloor) -"gJ" = ( -/obj/random/cash, -/turf/simulated/floor/carpet, -/area/casino/casino_mainfloor) -"gK" = ( -/obj/structure/cable/yellow{ - d2 = 2; - icon_state = "0-2" - }, -/obj/machinery/power/solar{ - id = "auxsolarsport"; - name = "Port Auxiliary Solar Array" - }, -/obj/effect/floor_decal/solarpanel, -/turf/simulated/floor/airless, -/area/space) -"gL" = ( -/obj/machinery/door/airlock/external{ - frequency = 1439; - icon_state = "door_locked"; - id_tag = "solar_casino_inner"; - locked = 1; - name = "External Access" - }, -/obj/machinery/atmospherics/pipe/simple/hidden, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/plating, -/area/casino/casino_solar_control) -"gM" = ( -/turf/simulated/wall, -/area/casino/casino_solar_control) -"gX" = ( -/obj/structure/bed/chair, -/turf/simulated/floor/tiled, -/area/casino/casino_mainfloor) -"gY" = ( -/obj/random/cash, -/turf/simulated/floor/tiled, -/area/casino/casino_mainfloor) -"gZ" = ( -/obj/effect/decal/cleanable/blood/drip, -/turf/simulated/floor/carpet, -/area/casino/casino_mainfloor) -"ha" = ( -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/airless, -/area/space) -"hb" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden{ - dir = 8 - }, -/obj/machinery/access_button{ - command = "cycle_interior"; - frequency = 1439; - master_tag = "casino_solar_airlock"; - name = "interior access button"; - pixel_x = 24; - pixel_y = 24; - req_access = newlist() - }, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/plating, -/area/casino/casino_solar_control) -"hc" = ( -/obj/machinery/portable_atmospherics/canister/air/airlock, -/obj/machinery/atmospherics/portables_connector{ - dir = 8 - }, -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 1 - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/plating, -/area/casino/casino_solar_control) -"hd" = ( -/obj/structure/table/rack{ - dir = 8 - }, -/obj/random/tech_supply, -/obj/item/stack/cable_coil, -/turf/simulated/floor/plating, -/area/casino/casino_maintenance) -"hf" = ( -/obj/machinery/door/window/southleft, -/obj/machinery/door/firedoor, -/turf/simulated/floor/tiled, -/area/casino/casino_mainfloor) -"hg" = ( -/obj/machinery/door/firedoor, -/obj/structure/table/marble, -/obj/structure/flora/pottedplant/unusual, -/turf/simulated/floor/tiled, -/area/casino/casino_mainfloor) -"hi" = ( -/obj/item/storage/secure/briefcase/money, -/obj/random/cash, -/obj/random/cash, -/obj/random/cash, -/obj/random/cash, -/obj/random/cash, -/obj/random/cash, -/obj/random/cash, -/turf/simulated/floor/carpet, -/area/casino/casino_mainfloor) -"hj" = ( -/obj/random/ammo, -/turf/simulated/floor/carpet, -/area/casino/casino_mainfloor) -"hk" = ( -/obj/structure/cable/yellow, -/obj/machinery/power/solar{ - id = "auxsolarsport"; - name = "Port Auxiliary Solar Array" - }, -/obj/effect/floor_decal/solarpanel, -/turf/simulated/floor/airless, -/area/space) -"hl" = ( -/obj/structure/cable/yellow, -/obj/structure/cable/yellow{ - d2 = 4; - icon_state = "0-4" - }, -/obj/structure/cable/yellow{ - d2 = 2; - icon_state = "0-2" - }, -/obj/machinery/atmospherics/binary/pump/on{ - dir = 1; - target_pressure = 200 - }, -/turf/simulated/floor/plating, -/area/casino/casino_solar_control) -"hm" = ( -/obj/machinery/power/solar_control{ - id = "solar"; - name = "Solar Control" - }, -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 4 - }, -/obj/structure/cable/yellow{ - d2 = 8; - icon_state = "0-8" - }, -/turf/simulated/floor/plating, -/area/casino/casino_solar_control) -"hn" = ( -/turf/simulated/wall, -/area/casino/casino_kitchen) -"hp" = ( -/obj/structure/hygiene/sink/kitchen{ - pixel_y = 30 - }, -/turf/simulated/floor/tiled, -/area/casino/casino_kitchen) -"hq" = ( -/obj/machinery/cooker/cereal, -/obj/machinery/light{ - dir = 1 - }, -/turf/simulated/floor/tiled, -/area/casino/casino_kitchen) -"hr" = ( -/obj/machinery/cooker/candy, -/turf/simulated/floor/tiled, -/area/casino/casino_kitchen) -"hs" = ( -/obj/machinery/cooker/fryer, -/turf/simulated/floor/tiled, -/area/casino/casino_kitchen) -"ht" = ( -/obj/machinery/cooker/oven, -/turf/simulated/floor/tiled, -/area/casino/casino_kitchen) -"hu" = ( -/obj/machinery/cooker/grill, -/turf/simulated/floor/tiled, -/area/casino/casino_kitchen) -"hv" = ( -/obj/machinery/light{ - dir = 1 - }, -/turf/simulated/floor/tiled, -/area/casino/casino_kitchen) -"hw" = ( -/turf/simulated/floor/tiled, -/area/casino/casino_kitchen) -"hx" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock{ - name = "Kitchen" - }, -/turf/simulated/floor/tiled, -/area/casino/casino_kitchen) -"hy" = ( -/obj/item/material/shard, -/turf/simulated/floor/carpet, -/area/casino/casino_mainfloor) -"hz" = ( -/obj/item/device/flash, -/turf/simulated/floor/carpet, -/area/casino/casino_mainfloor) -"hA" = ( -/obj/machinery/light, -/obj/structure/flora/pottedplant, -/turf/simulated/floor/carpet, -/area/casino/casino_mainfloor) -"hB" = ( -/obj/item/trash/cigbutt/cigarbutt, -/turf/simulated/floor/carpet, -/area/casino/casino_mainfloor) -"hC" = ( -/obj/structure/table/gamblingtable, -/obj/structure/casino/roulette_chart, -/obj/random/coin, -/turf/simulated/floor/carpet, -/area/casino/casino_mainfloor) -"hD" = ( -/obj/structure/table/gamblingtable, -/obj/structure/casino/roulette, -/turf/simulated/floor/carpet, -/area/casino/casino_mainfloor) -"hE" = ( -/obj/structure/flora/pottedplant/unusual, -/turf/simulated/floor/carpet, -/area/casino/casino_mainfloor) -"hF" = ( -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/machinery/atmospherics/pipe/simple/hidden, -/turf/simulated/floor/plating, -/area/casino/casino_solar_control) -"hG" = ( -/obj/machinery/power/terminal, -/obj/structure/cable/yellow{ - d2 = 8; - icon_state = "0-8" - }, -/obj/machinery/light/small{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/casino/casino_solar_control) -"hH" = ( -/obj/random/trash, -/obj/structure/table/rack{ - dir = 8 - }, -/turf/simulated/floor/plating, -/area/casino/casino_maintenance) -"hJ" = ( -/obj/random/trash, -/turf/simulated/floor/tiled, -/area/casino/casino_kitchen) -"hK" = ( -/obj/effect/decal/cleanable/flour, -/turf/simulated/floor/tiled, -/area/casino/casino_kitchen) -"hL" = ( -/obj/structure/table/marble, -/obj/machinery/microwave, -/turf/simulated/floor/tiled, -/area/casino/casino_kitchen) -"hM" = ( -/obj/structure/coatrack, -/turf/simulated/floor/carpet, -/area/casino/casino_mainfloor) -"hN" = ( -/obj/effect/decal/cleanable/generic, -/turf/simulated/floor/carpet, -/area/casino/casino_mainfloor) -"hP" = ( -/obj/machinery/atmospherics/pipe/simple/hidden, -/obj/structure/cable{ - d2 = 2; - icon_state = "0-2" - }, -/obj/machinery/power/apc{ - dir = 8; - name = "west bump"; - pixel_x = -24 - }, -/obj/structure/cable{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/turf/simulated/floor/plating, -/area/casino/casino_solar_control) -"hR" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 8 - }, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/cable{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/turf/simulated/floor/plating, -/area/casino/casino_maintenance) -"hS" = ( -/obj/machinery/light/small, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/casino/casino_maintenance) -"hT" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock{ - name = "Kitchen" - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/casino/casino_kitchen) -"hV" = ( -/obj/effect/decal/cleanable/blood/splatter, -/turf/simulated/floor/tiled, -/area/casino/casino_kitchen) -"hW" = ( -/obj/effect/decal/cleanable/egg_smudge, -/turf/simulated/floor/tiled, -/area/casino/casino_kitchen) -"hX" = ( -/obj/structure/table/marble, -/obj/machinery/reagentgrinder/juicer, -/obj/item/reagent_containers/glass/beaker/large, -/turf/simulated/floor/tiled, -/area/casino/casino_kitchen) -"hY" = ( -/obj/machinery/light{ - dir = 8; - icon_state = "tube1" - }, -/obj/structure/coatrack, -/turf/simulated/floor/carpet, -/area/casino/casino_mainfloor) -"hZ" = ( -/obj/structure/bed/chair/comfy/red{ - dir = 4 - }, -/turf/simulated/floor/carpet, -/area/casino/casino_mainfloor) -"ia" = ( -/obj/structure/table/woodentable, -/obj/item/trash/plate, -/obj/item/material/kitchen/utensil/fork, -/turf/simulated/floor/carpet, -/area/casino/casino_mainfloor) -"ib" = ( -/obj/structure/table/woodentable, -/turf/simulated/floor/carpet, -/area/casino/casino_mainfloor) -"ic" = ( -/obj/structure/bed/chair/comfy/red{ - dir = 8 - }, -/turf/simulated/floor/carpet, -/area/casino/casino_mainfloor) -"id" = ( -/obj/machinery/light{ - dir = 1 - }, -/turf/simulated/floor/carpet, -/area/casino/casino_mainfloor) -"ie" = ( -/obj/structure/table/gamblingtable, -/obj/structure/casino/craps, -/obj/random/coin, -/obj/random/coin, -/turf/simulated/floor/carpet, -/area/casino/casino_mainfloor) -"if" = ( -/obj/random/smokes, -/turf/simulated/floor/carpet, -/area/casino/casino_mainfloor) -"ig" = ( -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/turf/simulated/floor/airless, -/area/space) -"ih" = ( -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/simple/hidden, -/obj/machinery/door/airlock{ - name = "Solar control" - }, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/plating, -/area/casino/casino_solar_control) -"ii" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock{ - name = "Atmos control" - }, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/plating, -/area/casino/casino_crew_atmos) -"ij" = ( -/turf/simulated/wall/r_wall, -/area/casino/casino_crew_atmos) -"ik" = ( -/obj/effect/decal/cleanable/tomato_smudge, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 8 - }, -/turf/simulated/floor/tiled, -/area/casino/casino_kitchen) -"il" = ( -/obj/structure/closet/secure_closet/freezer/fridge, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 8; - level = 2 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/item/storage/fancy/egg_box, -/obj/item/storage/fancy/egg_box, -/obj/item/storage/fancy/egg_box, -/obj/item/reagent_containers/food/condiment/flour, -/obj/item/reagent_containers/food/condiment/sugar, -/turf/simulated/floor/tiled, -/area/casino/casino_kitchen) -"im" = ( -/obj/structure/closet/secure_closet/freezer/fridge, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 8 - }, -/obj/item/reagent_containers/food/condiment/sugar, -/obj/item/reagent_containers/food/snacks/sliceable/bread, -/turf/simulated/floor/tiled, -/area/casino/casino_kitchen) -"in" = ( -/obj/structure/closet/secure_closet/freezer/fridge, -/obj/item/reagent_containers/food/condiment/flour, -/turf/simulated/floor/tiled, -/area/casino/casino_kitchen) -"io" = ( -/obj/structure/table/marble, -/obj/machinery/light{ - dir = 4; - icon_state = "tube1" - }, -/obj/machinery/chem_master/condimaster, -/turf/simulated/floor/tiled, -/area/casino/casino_kitchen) -"ip" = ( -/obj/structure/bed/chair/comfy/red{ - dir = 4 - }, -/obj/item/material/knife/table, -/turf/simulated/floor/carpet, -/area/casino/casino_mainfloor) -"iq" = ( -/obj/structure/table/woodentable, -/obj/item/trash/plate, -/obj/item/reagent_containers/food/snacks/applepie, -/turf/simulated/floor/carpet, -/area/casino/casino_mainfloor) -"ir" = ( -/obj/structure/table/woodentable, -/obj/item/trash/plate, -/obj/item/reagent_containers/food/snacks/bigbiteburger, -/turf/simulated/floor/carpet, -/area/casino/casino_mainfloor) -"is" = ( -/obj/structure/table/gamblingtable, -/obj/structure/casino/craps/craps_down, -/obj/item/dice, -/turf/simulated/floor/carpet, -/area/casino/casino_mainfloor) -"iu" = ( -/obj/structure/flora/pottedplant, -/turf/simulated/floor/carpet, -/area/casino/casino_mainfloor) -"iv" = ( -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 5 - }, -/obj/structure/cable{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/turf/simulated/floor/plating, -/area/casino/casino_crew_atmos) -"iw" = ( -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 4 - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/plating, -/area/casino/casino_crew_atmos) -"ix" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/universal{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/casino/casino_crew_atmos) -"iz" = ( -/obj/structure/fireaxecabinet{ - pixel_y = 30 - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/casino/casino_crew_atmos) -"iA" = ( -/obj/structure/cable{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/turf/simulated/floor/plating, -/area/casino/casino_crew_atmos) -"iB" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled, -/area/casino/casino_kitchen) -"iC" = ( -/obj/structure/window/basic{ - dir = 1 - }, -/obj/structure/window/basic{ - dir = 8 - }, -/obj/structure/closet/secure_closet/freezer/meat, -/obj/item/reagent_containers/food/snacks/meat, -/obj/item/reagent_containers/food/snacks/meat, -/obj/item/reagent_containers/food/snacks/meat, -/obj/item/reagent_containers/food/snacks/meat, -/turf/simulated/floor/tiled/freezer, -/area/casino/casino_kitchen) -"iD" = ( -/obj/structure/window/basic{ - dir = 1 - }, -/obj/machinery/gibber, -/turf/simulated/floor/tiled/freezer, -/area/casino/casino_kitchen) -"iE" = ( -/obj/structure/window/basic{ - dir = 1 - }, -/obj/structure/window/basic{ - dir = 4 - }, -/obj/structure/kitchenspike, -/turf/simulated/floor/tiled/freezer, -/area/casino/casino_kitchen) -"iF" = ( -/obj/machinery/vending/dinnerware, -/turf/simulated/floor/tiled, -/area/casino/casino_kitchen) -"iG" = ( -/obj/structure/table/marble, -/obj/item/trash/plate, -/turf/simulated/floor/tiled, -/area/casino/casino_kitchen) -"iH" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 1; - icon_state = "warning" - }, -/obj/structure/closet/emcloset, -/obj/machinery/light/small{ - dir = 8 - }, -/turf/simulated/floor/plating, -/area/casino/casino_crew_atmos) -"iI" = ( -/obj/machinery/atmospherics/unary/tank/carbon_dioxide, -/obj/effect/floor_decal/industrial/warning{ - dir = 1; - icon_state = "warning" - }, -/turf/simulated/floor/plating, -/area/casino/casino_crew_atmos) -"iJ" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 1; - icon_state = "warning" - }, -/obj/machinery/floodlight, -/turf/simulated/floor/plating, -/area/casino/casino_crew_atmos) -"iK" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 5 - }, -/turf/simulated/floor/plating, -/area/casino/casino_crew_atmos) -"iL" = ( -/obj/machinery/light/small{ - dir = 4; - icon_state = "bulb1" - }, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/plating, -/area/casino/casino_crew_atmos) -"iM" = ( -/obj/structure/window/basic{ - dir = 8 - }, -/turf/simulated/floor/tiled/freezer, -/area/casino/casino_kitchen) -"iN" = ( -/turf/simulated/floor/tiled/freezer, -/area/casino/casino_kitchen) -"iO" = ( -/obj/machinery/door/window/brigdoor/eastleft, -/turf/simulated/floor/tiled/freezer, -/area/casino/casino_kitchen) -"iP" = ( -/obj/effect/decal/cleanable/pie_smudge, -/turf/simulated/floor/tiled, -/area/casino/casino_kitchen) -"iQ" = ( -/obj/machinery/door/firedoor, -/obj/structure/table/marble, -/obj/item/trash/tray, -/obj/item/reagent_containers/food/snacks/stew, -/turf/simulated/floor/tiled, -/area/casino/casino_kitchen) -"iR" = ( -/obj/structure/table/woodentable, -/obj/item/trash/plate, -/obj/item/material/kitchen/utensil/spoon, -/turf/simulated/floor/carpet, -/area/casino/casino_mainfloor) -"iS" = ( -/obj/machinery/light, -/obj/structure/flora/pottedplant/unusual, -/turf/simulated/floor/carpet, -/area/casino/casino_mainfloor) -"iT" = ( -/obj/random/coin, -/turf/simulated/floor/carpet, -/area/casino/casino_mainfloor) -"iU" = ( -/obj/machinery/atmospherics/pipe/simple/visible/red{ - dir = 6 - }, -/turf/simulated/wall/r_wall, -/area/casino/casino_crew_atmos) -"iV" = ( -/obj/machinery/atmospherics/binary/pump{ - dir = 8 - }, -/turf/simulated/floor/plating, -/area/casino/casino_crew_atmos) -"iW" = ( -/obj/machinery/atmospherics/pipe/manifold/visible/red, -/turf/simulated/floor/plating, -/area/casino/casino_crew_atmos) -"iX" = ( -/obj/machinery/atmospherics/omni/filter{ - dir = 8 - }, -/turf/simulated/floor/plating, -/area/casino/casino_crew_atmos) -"iY" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 4; - icon_state = "warning" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/universal{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/casino/casino_crew_atmos) -"iZ" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/casino/casino_crew_atmos) -"ja" = ( -/obj/machinery/light{ - dir = 8; - icon_state = "tube1" - }, -/obj/structure/flora/pottedplant/unusual, -/turf/simulated/floor/carpet, -/area/casino/casino_mainfloor) -"jb" = ( -/obj/structure/synthesized_instrument/synthesizer/piano, -/obj/machinery/light{ - dir = 8; - icon_state = "tube1" - }, -/turf/simulated/floor/carpet, -/area/casino/casino_mainfloor) -"jc" = ( -/obj/structure/bed/chair/comfy/beige{ - dir = 8 - }, -/turf/simulated/floor/carpet, -/area/casino/casino_mainfloor) -"jd" = ( -/obj/random/coin, -/obj/random/ammo, -/turf/simulated/floor/carpet, -/area/casino/casino_mainfloor) -"je" = ( -/obj/machinery/atmospherics/pipe/simple/visible/red, -/turf/simulated/wall/r_wall, -/area/casino/casino_crew_atmos) -"jf" = ( -/obj/structure/closet/firecloset, -/turf/simulated/floor/plating, -/area/casino/casino_crew_atmos) -"jg" = ( -/obj/machinery/atmospherics/pipe/simple/visible/cyan{ - dir = 6 - }, -/turf/simulated/floor/plating, -/area/casino/casino_crew_atmos) -"jh" = ( -/obj/machinery/atmospherics/pipe/simple/visible/cyan{ - dir = 9 - }, -/turf/simulated/floor/plating, -/area/casino/casino_crew_atmos) -"ji" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 4; - icon_state = "warning" - }, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/casino/casino_crew_atmos) -"jj" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/plating, -/area/casino/casino_crew_atmos) -"jk" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 8 - }, -/turf/simulated/floor/tiled, -/area/casino/casino_kitchen) -"jl" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock{ - name = "Bar storage" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/casino/casino_kitchen) -"jm" = ( -/obj/machinery/light{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/casino/casino_kitchen) -"jn" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/casino/casino_kitchen) -"jo" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock{ - name = "Bar" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/casino/casino_mainfloor) -"jp" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/turf/simulated/floor/tiled, -/area/casino/casino_mainfloor) -"jq" = ( -/obj/structure/hygiene/sink/kitchen{ - pixel_y = 30 - }, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 8; - level = 2 - }, -/turf/simulated/floor/tiled, -/area/casino/casino_mainfloor) -"jr" = ( -/obj/machinery/light{ - dir = 1 - }, -/turf/simulated/floor/tiled, -/area/casino/casino_mainfloor) -"js" = ( -/obj/machinery/alarm{ - pixel_y = 25 - }, -/turf/simulated/floor/tiled, -/area/casino/casino_mainfloor) -"jt" = ( -/obj/machinery/vending/boozeomat{ - req_access = list() - }, -/turf/simulated/floor/tiled, -/area/casino/casino_mainfloor) -"ju" = ( -/obj/machinery/atmospherics/unary/outlet_injector{ - dir = 4; - icon_state = "map_injector"; - use_power = 1 - }, -/turf/simulated/floor/airless, -/area/space) -"jv" = ( -/obj/machinery/atmospherics/pipe/simple/visible/red{ - dir = 9 - }, -/turf/simulated/wall/r_wall, -/area/casino/casino_crew_atmos) -"jw" = ( -/obj/machinery/atmospherics/unary/tank/air{ - dir = 4; - start_pressure = 740.5 - }, -/obj/machinery/light/small{ - dir = 8 - }, -/turf/simulated/floor/plating, -/area/casino/casino_crew_atmos) -"jx" = ( -/obj/machinery/atmospherics/pipe/manifold4w/visible/cyan, -/turf/simulated/floor/plating, -/area/casino/casino_crew_atmos) -"jy" = ( -/obj/machinery/atmospherics/binary/pump{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/casino/casino_crew_atmos) -"jz" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/universal{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/casino/casino_crew_atmos) -"jA" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 4; - icon_state = "warning" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/casino/casino_crew_atmos) -"jB" = ( -/obj/machinery/light/small{ - dir = 4; - icon_state = "bulb1" - }, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/plating, -/area/casino/casino_crew_atmos) -"jC" = ( -/obj/item/broken_bottle, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled, -/area/casino/casino_kitchen) -"jD" = ( -/obj/machinery/vending/coffee, -/turf/simulated/floor/tiled, -/area/casino/casino_kitchen) -"jE" = ( -/obj/structure/table/marble, -/obj/item/reagent_containers/food/drinks/bottle/absinthe, -/obj/item/reagent_containers/food/drinks/shaker{ - pixel_x = 10; - pixel_y = 10 - }, -/obj/random/drinkbottle, -/obj/random/drinkbottle, -/obj/random/drinkbottle, -/obj/random/drinkbottle, -/obj/random/drinkbottle, -/obj/random/drinkbottle, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 1 - }, -/turf/simulated/floor/tiled, -/area/casino/casino_mainfloor) -"jF" = ( -/obj/structure/table/marble, -/obj/machinery/chemical_dispenser/bar_alc/full, -/turf/simulated/floor/tiled, -/area/casino/casino_mainfloor) -"jG" = ( -/obj/effect/decal/cleanable/blood/splatter, -/turf/simulated/floor/tiled, -/area/casino/casino_mainfloor) -"jH" = ( -/obj/structure/table/marble, -/obj/item/material/ashtray/bronze, -/obj/item/flame/lighter/zippo/random, -/turf/simulated/floor/tiled, -/area/casino/casino_mainfloor) -"jI" = ( -/obj/item/stool/bar, -/turf/simulated/floor/carpet, -/area/casino/casino_mainfloor) -"jJ" = ( -/obj/structure/table/woodentable, -/obj/item/material/ashtray/bronze, -/obj/item/reagent_containers/food/snacks/cubancarp, -/turf/simulated/floor/carpet, -/area/casino/casino_mainfloor) -"jK" = ( -/obj/item/material/ashtray/bronze, -/turf/simulated/floor/carpet, -/area/casino/casino_mainfloor) -"jL" = ( -/obj/machinery/atmospherics/unary/tank/air{ - dir = 4; - start_pressure = 740.5 - }, -/turf/simulated/floor/plating, -/area/casino/casino_crew_atmos) -"jM" = ( -/obj/machinery/atmospherics/pipe/manifold/visible/cyan{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/casino/casino_crew_atmos) -"jN" = ( -/turf/simulated/floor/plating, -/area/casino/casino_crew_atmos) -"jO" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 4; - icon_state = "warning" - }, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/casino/casino_crew_atmos) -"jP" = ( -/obj/effect/decal/cleanable/generic, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/casino/casino_crew_atmos) -"jQ" = ( -/obj/structure/table/marble, -/obj/item/storage/box/glass_extras/sticks, -/obj/item/storage/box/glass_extras/straws, -/obj/item/storage/box/glass_extras, -/obj/item/storage/box/glasses/pint, -/obj/item/storage/box/glasses/wine, -/obj/item/device/radio, -/turf/simulated/floor/tiled, -/area/casino/casino_kitchen) -"jR" = ( -/obj/structure/table/marble, -/obj/item/reagent_containers/food/drinks/bottle/gin, -/obj/item/reagent_containers/food/drinks/bottle/tequilla{ - pixel_x = -10 - }, -/obj/item/reagent_containers/food/drinks/bottle/vodka{ - pixel_x = 10 - }, -/turf/simulated/floor/tiled, -/area/casino/casino_mainfloor) -"jS" = ( -/obj/structure/table/marble, -/obj/machinery/chemical_dispenser/bar_soft/full, -/turf/simulated/floor/tiled, -/area/casino/casino_mainfloor) -"jT" = ( -/obj/structure/table/marble, -/obj/random/coin, -/turf/simulated/floor/tiled, -/area/casino/casino_mainfloor) -"jU" = ( -/obj/structure/table/woodentable, -/obj/item/trash/plate, -/obj/item/reagent_containers/food/snacks/waffles, -/obj/item/reagent_containers/food/drinks/cans/iced_tea, -/turf/simulated/floor/carpet, -/area/casino/casino_mainfloor) -"jV" = ( -/obj/structure/table/gamblingtable, -/obj/structure/casino/craps, -/obj/item/dice{ - pixel_x = 5; - pixel_y = -5 - }, -/obj/item/dice, -/turf/simulated/floor/carpet, -/area/casino/casino_mainfloor) -"jW" = ( -/obj/structure/table/gamblingtable, -/obj/structure/casino/bj_table, -/obj/item/deck/cards{ - pixel_x = 5; - pixel_y = -5 - }, -/obj/random/coin, -/turf/simulated/floor/carpet, -/area/casino/casino_mainfloor) -"jX" = ( -/obj/structure/table/gamblingtable, -/obj/structure/casino/bj_table/bj_right, -/obj/item/clothing/mask/smokable/cigarette/cigar/havana, -/obj/item/material/ashtray/bronze, -/turf/simulated/floor/carpet, -/area/casino/casino_mainfloor) -"jY" = ( -/obj/machinery/portable_atmospherics/canister/air, -/turf/simulated/floor/plating, -/area/casino/casino_crew_atmos) -"jZ" = ( -/obj/machinery/atmospherics/portables_connector{ - dir = 1 - }, -/turf/simulated/floor/plating, -/area/casino/casino_crew_atmos) -"ka" = ( -/obj/effect/decal/cleanable/generic, -/turf/simulated/floor/plating, -/area/casino/casino_crew_atmos) -"kb" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 4; - icon_state = "warning" - }, -/turf/simulated/floor/plating, -/area/casino/casino_crew_atmos) -"kc" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/plating, -/area/casino/casino_crew_atmos) -"kd" = ( -/obj/structure/table/marble, -/obj/random/drinkbottle, -/obj/random/drinkbottle, -/obj/random/drinkbottle, -/obj/random/drinkbottle, -/obj/random/drinkbottle, -/obj/random/drinkbottle, -/obj/random/drinkbottle, -/turf/simulated/floor/tiled, -/area/casino/casino_kitchen) -"ke" = ( -/obj/structure/reagent_dispensers/beerkeg, -/turf/simulated/floor/tiled, -/area/casino/casino_kitchen) -"kf" = ( -/obj/structure/table/marble, -/obj/item/reagent_containers/food/drinks/bottle/rum, -/obj/item/reagent_containers/glass/rag, -/obj/random/drinkbottle, -/obj/random/drinkbottle, -/obj/random/drinkbottle, -/obj/random/drinkbottle, -/turf/simulated/floor/tiled, -/area/casino/casino_mainfloor) -"kg" = ( -/obj/item/trash/cigbutt/professionals, -/turf/simulated/floor/tiled, -/area/casino/casino_mainfloor) -"kh" = ( -/obj/structure/table/marble, -/obj/item/reagent_containers/food/drinks/bottle/cognac, -/turf/simulated/floor/tiled, -/area/casino/casino_mainfloor) -"ki" = ( -/obj/item/stool/bar, -/obj/random/coin, -/turf/simulated/floor/carpet, -/area/casino/casino_mainfloor) -"kj" = ( -/obj/item/broken_bottle, -/turf/simulated/floor/carpet, -/area/casino/casino_mainfloor) -"kk" = ( -/obj/structure/table/gamblingtable, -/obj/structure/casino/craps/craps_down, -/obj/random/coin, -/obj/random/coin, -/turf/simulated/floor/carpet, -/area/casino/casino_mainfloor) -"kl" = ( -/obj/structure/bed/chair/comfy/black{ - dir = 1 - }, -/turf/simulated/floor/carpet, -/area/casino/casino_mainfloor) -"km" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 4; - icon_state = "warning" - }, -/obj/structure/table/rack, -/obj/item/wrench, -/obj/item/clothing/head/welding, -/obj/item/weldingtool, -/turf/simulated/floor/plating, -/area/casino/casino_crew_atmos) -"kn" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock{ - name = "Kitchen" - }, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled, -/area/casino/casino_mainfloor) -"ko" = ( -/obj/structure/table/marble, -/obj/item/reagent_containers/food/drinks/h_chocolate, -/turf/simulated/floor/tiled, -/area/casino/casino_mainfloor) -"kp" = ( -/obj/structure/table/marble, -/obj/item/storage/fancy/cigar{ - pixel_y = 5 - }, -/turf/simulated/floor/tiled, -/area/casino/casino_mainfloor) -"kq" = ( -/obj/structure/table/marble, -/obj/random/smokes, -/turf/simulated/floor/tiled, -/area/casino/casino_mainfloor) -"kr" = ( -/obj/structure/table/marble, -/obj/random/loot, -/turf/simulated/floor/tiled, -/area/casino/casino_mainfloor) -"ks" = ( -/obj/structure/table/marble, -/turf/simulated/floor/tiled, -/area/casino/casino_mainfloor) -"kt" = ( -/obj/structure/table/woodentable, -/obj/item/pizzabox/meat, -/turf/simulated/floor/carpet, -/area/casino/casino_mainfloor) -"ku" = ( -/obj/machinery/portable_atmospherics/canister/oxygen, -/obj/machinery/light/small{ - dir = 8 - }, -/turf/simulated/floor/plating, -/area/casino/casino_crew_atmos) -"kv" = ( -/obj/machinery/portable_atmospherics/canister/nitrogen, -/turf/simulated/floor/plating, -/area/casino/casino_crew_atmos) -"kw" = ( -/obj/random/ammo, -/obj/effect/decal/cleanable/blood/splatter, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/carpet, -/area/casino/casino_mainfloor) -"kx" = ( -/obj/effect/decal/cleanable/blood/splatter, -/turf/simulated/floor/carpet, -/area/casino/casino_mainfloor) -"ky" = ( -/obj/machinery/light{ - dir = 1 - }, -/obj/random/ammo, -/obj/structure/flora/pottedplant/overgrown, -/turf/simulated/floor/carpet, -/area/casino/casino_mainfloor) -"kz" = ( -/obj/structure/flora/pottedplant/overgrown, -/turf/simulated/floor/carpet, -/area/casino/casino_mainfloor) -"kA" = ( -/obj/structure/table/gamblingtable, -/obj/structure/casino/bj_table, -/obj/random/coin, -/turf/simulated/floor/carpet, -/area/casino/casino_mainfloor) -"kB" = ( -/obj/structure/table/gamblingtable, -/obj/structure/casino/bj_table/bj_right, -/obj/item/deck/cards, -/obj/random/coin{ - pixel_x = -2; - pixel_y = 4 - }, -/turf/simulated/floor/carpet, -/area/casino/casino_mainfloor) -"kC" = ( -/turf/simulated/wall/r_wall, -/area/casino/casino_bow) -"kD" = ( -/obj/machinery/portable_atmospherics/canister/oxygen, -/turf/simulated/floor/plating, -/area/casino/casino_crew_atmos) -"kE" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 4; - icon_state = "warning" - }, -/obj/structure/table/rack, -/obj/item/clothing/mask/gas, -/obj/item/clothing/mask/gas, -/obj/item/clothing/mask/gas, -/obj/item/clothing/mask/gas, -/obj/item/device/radio, -/turf/simulated/floor/plating, -/area/casino/casino_crew_atmos) -"kG" = ( -/obj/random/ammo, -/obj/effect/decal/cleanable/blood/splatter, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/carpet, -/area/casino/casino_mainfloor) -"kH" = ( -/obj/random/loot, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/carpet, -/area/casino/casino_mainfloor) -"kI" = ( -/obj/random/ammo, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/carpet, -/area/casino/casino_mainfloor) -"kJ" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/carpet, -/area/casino/casino_mainfloor) -"kN" = ( -/obj/machinery/light, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/carpet, -/area/casino/casino_mainfloor) -"kO" = ( -/obj/structure/cable{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/turf/simulated/floor/carpet, -/area/casino/casino_mainfloor) -"kP" = ( -/obj/machinery/portable_atmospherics/canister/phoron, -/turf/simulated/floor/plating, -/area/casino/casino_crew_atmos) -"kQ" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/unpowered/simple/wood{ - name = "VIP Private room" - }, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/wood, -/area/casino/casino_mainfloor) -"kR" = ( -/turf/simulated/wall, -/area/casino/casino_private_vip) -"kS" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/unpowered/simple/wood{ - name = "Private room 1" - }, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/wood, -/area/casino/casino_mainfloor) -"kT" = ( -/turf/simulated/wall, -/area/casino/casino_private1) -"kU" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/unpowered/simple/wood{ - name = "Private room 2" - }, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/wood, -/area/casino/casino_mainfloor) -"kV" = ( -/turf/simulated/wall, -/area/casino/casino_private2) -"kX" = ( -/obj/structure/flora/pottedplant, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/carpet, -/area/casino/casino_mainfloor) -"kY" = ( -/obj/machinery/light, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/carpet, -/area/casino/casino_mainfloor) -"kZ" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/carpet, -/area/casino/casino_mainfloor) -"la" = ( -/obj/structure/cable{ - icon_state = "2-8" - }, -/turf/simulated/floor/carpet, -/area/casino/casino_mainfloor) -"ld" = ( -/obj/effect/floor_decal/industrial/warning, -/obj/machinery/portable_atmospherics/canister/phoron, -/turf/simulated/floor/plating, -/area/casino/casino_crew_atmos) -"le" = ( -/obj/effect/floor_decal/industrial/warning, -/turf/simulated/floor/plating, -/area/casino/casino_crew_atmos) -"lf" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 6 - }, -/turf/simulated/floor/plating, -/area/casino/casino_crew_atmos) -"lg" = ( -/obj/effect/decal/cleanable/blood/splatter, -/obj/structure/cable{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/wood, -/area/casino/casino_private_vip) -"lh" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/wood, -/area/casino/casino_private_vip) -"li" = ( -/obj/machinery/light{ - dir = 1 - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/wood, -/area/casino/casino_private_vip) -"lj" = ( -/obj/machinery/jukebox, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/wood, -/area/casino/casino_private_vip) -"lk" = ( -/obj/structure/flora/pottedplant, -/obj/structure/cable{ - d2 = 8; - icon_state = "0-8" - }, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 8; - level = 2 - }, -/obj/machinery/power/apc{ - dir = 4; - name = "east bump"; - pixel_x = 24 - }, -/turf/simulated/floor/wood, -/area/casino/casino_private_vip) -"ll" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/wood, -/area/casino/casino_private1) -"lm" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/wood, -/area/casino/casino_private1) -"ln" = ( -/obj/machinery/light{ - dir = 1 - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/wood, -/area/casino/casino_private1) -"lo" = ( -/obj/structure/flora/pottedplant, -/obj/structure/cable{ - d2 = 8; - icon_state = "0-8" - }, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 8; - level = 2 - }, -/obj/machinery/power/apc{ - dir = 4; - name = "east bump"; - pixel_x = 24 - }, -/turf/simulated/floor/wood, -/area/casino/casino_private1) -"lp" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/wood, -/area/casino/casino_private2) -"lq" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/wood, -/area/casino/casino_private2) -"lr" = ( -/obj/machinery/light{ - dir = 1 - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/wood, -/area/casino/casino_private2) -"ls" = ( -/obj/structure/flora/pottedplant, -/obj/structure/cable{ - d2 = 8; - icon_state = "0-8" - }, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 8; - level = 2 - }, -/obj/machinery/power/apc{ - dir = 4; - name = "east bump"; - pixel_x = 24 - }, -/turf/simulated/floor/wood, -/area/casino/casino_private2) -"lt" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock{ - name = "Toilet room" - }, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/white, -/area/casino/casino_mainfloor) -"lu" = ( -/turf/simulated/wall, -/area/casino/casino_patron_bathroom) -"lv" = ( -/obj/machinery/light{ - dir = 8; - icon_state = "tube1" - }, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/carpet, -/area/casino/casino_mainfloor) -"lB" = ( -/obj/machinery/light/small, -/turf/simulated/floor/plating, -/area/casino/casino_crew_atmos) -"lD" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/wood, -/area/casino/casino_private_vip) -"lE" = ( -/obj/random/ammo, -/turf/simulated/floor/wood, -/area/casino/casino_private_vip) -"lF" = ( -/obj/effect/decal/cleanable/blood/drip, -/obj/effect/decal/cleanable/blood/splatter, -/turf/simulated/floor/wood, -/area/casino/casino_private_vip) -"lG" = ( -/obj/effect/decal/cleanable/blood/drip, -/turf/simulated/floor/wood, -/area/casino/casino_private_vip) -"lH" = ( -/obj/item/trash/cigbutt/professionals, -/turf/simulated/floor/wood, -/area/casino/casino_private_vip) -"lI" = ( -/turf/simulated/floor/wood, -/area/casino/casino_private_vip) -"lJ" = ( -/obj/item/storage/secure/safe{ - pixel_x = 30 - }, -/turf/simulated/floor/wood, -/area/casino/casino_private_vip) -"lK" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/wood, -/area/casino/casino_private1) -"lL" = ( -/turf/simulated/floor/wood, -/area/casino/casino_private1) -"lM" = ( -/obj/item/storage/secure/safe{ - pixel_x = 30 - }, -/turf/simulated/floor/wood, -/area/casino/casino_private1) -"lN" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/wood, -/area/casino/casino_private2) -"lO" = ( -/turf/simulated/floor/wood, -/area/casino/casino_private2) -"lP" = ( -/obj/item/storage/secure/safe{ - pixel_x = 25 - }, -/turf/simulated/floor/wood, -/area/casino/casino_private2) -"lQ" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/white, -/area/casino/casino_patron_bathroom) -"lR" = ( -/obj/machinery/light{ - dir = 1 - }, -/turf/simulated/floor/tiled/white, -/area/casino/casino_patron_bathroom) -"lS" = ( -/obj/machinery/door/airlock{ - name = "Toilet #1" - }, -/turf/simulated/floor/tiled/white, -/area/casino/casino_patron_bathroom) -"lT" = ( -/obj/structure/hygiene/toilet{ - dir = 8 - }, -/obj/machinery/light{ - dir = 4; - icon_state = "tube1" - }, -/obj/random/trash, -/turf/simulated/floor/tiled/white, -/area/casino/casino_patron_bathroom) -"lU" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/carpet, -/area/casino/casino_mainfloor) -"lV" = ( -/obj/structure/bed/chair/comfy/black, -/turf/simulated/floor/carpet, -/area/casino/casino_mainfloor) -"lX" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock{ - name = "Bow" - }, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/plating, -/area/casino/casino_bow) -"lY" = ( -/obj/structure/bed/chair/comfy/red{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/wood, -/area/casino/casino_private_vip) -"lZ" = ( -/obj/structure/table/woodentable, -/obj/item/storage/fancy/cigar{ - pixel_y = 5 - }, -/turf/simulated/floor/wood, -/area/casino/casino_private_vip) -"ma" = ( -/obj/structure/table/woodentable, -/obj/item/material/ashtray/bronze, -/obj/random/drinkbottle, -/turf/simulated/floor/wood, -/area/casino/casino_private_vip) -"mb" = ( -/obj/structure/bed/chair/comfy/red{ - dir = 8 - }, -/turf/simulated/floor/wood, -/area/casino/casino_private_vip) -"mc" = ( -/obj/machinery/light{ - dir = 4; - icon_state = "tube1" - }, -/turf/simulated/floor/wood, -/area/casino/casino_private_vip) -"md" = ( -/obj/structure/bed/chair/comfy/red, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/wood, -/area/casino/casino_private1) -"me" = ( -/obj/machinery/light{ - dir = 4; - icon_state = "tube1" - }, -/turf/simulated/floor/wood, -/area/casino/casino_private1) -"mf" = ( -/obj/structure/bed/chair/comfy/red, -/obj/item/flame/lighter/zippo/random, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/wood, -/area/casino/casino_private2) -"mg" = ( -/obj/machinery/light{ - dir = 4; - icon_state = "tube1" - }, -/turf/simulated/floor/wood, -/area/casino/casino_private2) -"mi" = ( -/obj/structure/cable{ - d2 = 8; - icon_state = "0-8" - }, -/obj/machinery/power/apc{ - dir = 4; - name = "east bump"; - pixel_x = 24 - }, -/turf/simulated/floor/tiled/white, -/area/casino/casino_patron_bathroom) -"mj" = ( -/obj/structure/table/woodentable, -/obj/item/reagent_containers/food/drinks/bottle/specialwhiskey, -/obj/item/clothing/mask/smokable/cigarette/cigar/havana, -/obj/item/clothing/mask/smokable/cigarette/cigar/havana, -/obj/item/flame/lighter/zippo/random, -/turf/simulated/floor/carpet, -/area/casino/casino_mainfloor) -"mk" = ( -/obj/machinery/computer/ship/engines{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/casino/casino_bow) -"ml" = ( -/obj/structure/bed/chair{ - dir = 8 - }, -/obj/effect/decal/cleanable/blood/splatter, -/turf/simulated/floor/plating, -/area/casino/casino_bow) -"mm" = ( -/obj/effect/decal/cleanable/blood/splatter, -/turf/simulated/floor/plating, -/area/casino/casino_bow) -"mn" = ( -/obj/structure/closet/emcloset, -/turf/simulated/floor/plating, -/area/casino/casino_bow) -"mo" = ( -/obj/effect/decal/cleanable/blood/splatter, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/plating, -/area/casino/casino_bow) -"mp" = ( -/obj/structure/bed/chair/comfy/red{ - dir = 4 - }, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 1 - }, -/turf/simulated/floor/wood, -/area/casino/casino_private_vip) -"mq" = ( -/obj/structure/table/woodentable, -/obj/random/drinkbottle, -/turf/simulated/floor/wood, -/area/casino/casino_private_vip) -"mr" = ( -/obj/structure/table/woodentable, -/turf/simulated/floor/wood, -/area/casino/casino_private_vip) -"ms" = ( -/obj/structure/bed/chair/comfy/red{ - dir = 8 - }, -/obj/item/storage/bag/cash, -/turf/simulated/floor/wood, -/area/casino/casino_private_vip) -"mt" = ( -/obj/structure/bed, -/turf/simulated/floor/wood, -/area/casino/casino_private_vip) -"mu" = ( -/obj/structure/table/woodentable, -/obj/random/drinkbottle, -/obj/random/coin, -/obj/random/coin, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 1 - }, -/turf/simulated/floor/wood, -/area/casino/casino_private1) -"mv" = ( -/obj/structure/bed/chair/comfy/red{ - dir = 8 - }, -/turf/simulated/floor/wood, -/area/casino/casino_private1) -"mw" = ( -/obj/structure/bed, -/turf/simulated/floor/wood, -/area/casino/casino_private1) -"mx" = ( -/obj/structure/table/woodentable, -/obj/random/drinkbottle, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 1 - }, -/turf/simulated/floor/wood, -/area/casino/casino_private2) -"my" = ( -/obj/structure/bed/chair/comfy/red{ - dir = 8 - }, -/turf/simulated/floor/wood, -/area/casino/casino_private2) -"mz" = ( -/obj/structure/bed, -/obj/random/coin, -/turf/simulated/floor/wood, -/area/casino/casino_private2) -"mB" = ( -/obj/random/coin, -/turf/simulated/floor/tiled/white, -/area/casino/casino_patron_bathroom) -"mC" = ( -/obj/machinery/door/airlock{ - name = "Toilet #2" - }, -/turf/simulated/floor/tiled/white, -/area/casino/casino_patron_bathroom) -"mD" = ( -/obj/structure/hygiene/toilet{ - dir = 8 - }, -/obj/machinery/light{ - dir = 4; - icon_state = "tube1" - }, -/turf/simulated/floor/tiled/white, -/area/casino/casino_patron_bathroom) -"mE" = ( -/obj/structure/sign/warning/pods{ - pixel_y = -30 - }, -/turf/simulated/floor/carpet, -/area/casino/casino_mainfloor) -"mF" = ( -/obj/effect/shuttle_landmark/nav_casino/nav2, -/turf/space, -/area/space) -"mG" = ( -/obj/machinery/computer/modular{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/casino/casino_bow) -"mH" = ( -/turf/simulated/floor/plating, -/area/casino/casino_bow) -"mI" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/casino/casino_bow) -"mJ" = ( -/obj/effect/decal/cleanable/blood/splatter, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/casino/casino_bow) -"mK" = ( -/obj/structure/cable, -/obj/structure/cable{ - d2 = 2; - icon_state = "0-2"; - pixel_y = 1 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/obj/machinery/power/apc{ - dir = 4; - name = "east bump"; - pixel_x = 24 - }, -/turf/simulated/floor/plating, -/area/casino/casino_bow) -"mL" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock{ - name = "Bow" - }, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/plating, -/area/casino/casino_mainfloor) -"mN" = ( -/obj/machinery/portable_atmospherics/canister/nitrogen, -/turf/simulated/floor/plating, -/area/casino/casino_bow) -"mO" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/casino/casino_bow) -"mP" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/casino/casino_bow) -"mQ" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 - }, -/turf/simulated/floor/plating, -/area/casino/casino_bow) -"mR" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/plating, -/area/casino/casino_bow) -"mS" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/turf/simulated/floor/plating, -/area/casino/casino_bow) -"mU" = ( -/obj/machinery/atmospherics/portables_connector{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/casino/casino_bow) -"mV" = ( -/obj/machinery/atmospherics/binary/pump/on{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/casino/casino_bow) -"mW" = ( -/obj/machinery/atmospherics/pipe/simple/visible/black{ - dir = 10 - }, -/turf/simulated/floor/plating, -/area/casino/casino_bow) -"mX" = ( -/obj/structure/sign/warning/pods{ - pixel_y = -30 - }, -/turf/simulated/floor/plating, -/area/casino/casino_bow) -"mY" = ( -/obj/machinery/atmospherics/pipe/simple/visible/black, -/obj/machinery/door/airlock{ - name = "Engines #1" - }, -/turf/simulated/floor/plating, -/area/casino/casino_bow) -"mZ" = ( -/obj/effect/wallframe_spawn/reinforced, -/obj/machinery/door/blast/regular/open{ - icon_state = "pdoor0"; - id_tag = "Starboard wide window BD" - }, -/turf/simulated/floor/plating, -/area/casino/casino_bow) -"na" = ( -/obj/machinery/door/airlock/external{ - frequency = 1380; - icon_state = "door_locked"; - id_tag = "escape_pod"; - locked = 1; - name = "Escape Pod" - }, -/turf/simulated/floor/plating, -/area/casino/casino_bow) -"nb" = ( -/obj/machinery/atmospherics/pipe/simple/visible/black, -/obj/machinery/door/airlock{ - name = "Engines #2" - }, -/turf/simulated/floor/plating, -/area/casino/casino_bow) -"nc" = ( -/obj/machinery/atmospherics/unary/tank/nitrogen{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/casino/casino_bow) -"nd" = ( -/obj/machinery/atmospherics/pipe/manifold4w/visible/black, -/turf/simulated/floor/plating, -/area/casino/casino_bow) -"ne" = ( -/obj/machinery/atmospherics/unary/heater{ - dir = 8 - }, -/turf/simulated/floor/plating, -/area/casino/casino_bow) -"ng" = ( -/obj/machinery/atmospherics/pipe/simple/visible/black{ - dir = 6 - }, -/turf/simulated/floor/airless, -/area/casino/casino_bow) -"nh" = ( -/obj/machinery/atmospherics/pipe/manifold4w/visible/black, -/obj/machinery/meter, -/turf/simulated/floor/airless, -/area/casino/casino_bow) -"ni" = ( -/obj/machinery/atmospherics/pipe/simple/visible/black{ - dir = 10 - }, -/turf/simulated/floor/airless, -/area/casino/casino_bow) -"nj" = ( -/obj/structure/bed/chair, -/obj/item/device/radio/intercom{ - dir = 4; - pixel_x = -22 - }, -/obj/machinery/light/small{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/casino/casino_bow) -"nk" = ( -/obj/effect/shuttle_landmark/nav_casino/nav4, -/turf/space, -/area/space) -"nl" = ( -/obj/machinery/atmospherics/unary/engine{ - dir = 1 - }, -/turf/simulated/wall/r_wall, -/area/casino/casino_bow) -"nm" = ( -/obj/structure/bed/chair, -/obj/machinery/status_display{ - pixel_x = -32 - }, -/obj/machinery/embedded_controller/radio/simple_docking_controller/escape_pod{ - frequency = 1380; - id_tag = "Casino_escape_pod_3"; - name = "Casino escape pod Three controller"; - pixel_x = 24; - tag_door = "Casino escape_pod_3_hatch" - }, -/turf/simulated/floor/plating, -/area/casino/casino_bow) -"nn" = ( -/obj/structure/bed/chair, -/obj/machinery/status_display{ - pixel_x = -32 - }, -/obj/machinery/embedded_controller/radio/simple_docking_controller/escape_pod{ - frequency = 1380; - id_tag = "Casino_escape_pod_2"; - name = "Casino escape pod Two controller"; - pixel_x = 24; - tag_door = "Casino escape_pod_2_hatch" - }, -/turf/simulated/floor/plating, -/area/casino/casino_bow) -"no" = ( -/obj/structure/bed/chair, -/obj/machinery/status_display{ - pixel_x = -32 - }, -/obj/machinery/embedded_controller/radio/simple_docking_controller/escape_pod{ - frequency = 1380; - id_tag = "Casino_escape_pod_1"; - name = "Casino escape pod One controller"; - pixel_x = 24; - tag_door = "escape_pod_17_hatch" - }, -/turf/simulated/floor/plating, -/area/casino/casino_bow) -"nq" = ( -/obj/effect/wallframe_spawn/reinforced, -/turf/simulated/floor/plating, -/area/casino/casino_bow) -"nr" = ( -/turf/simulated/wall/r_titanium, -/area/casino/casino_bow) -"ns" = ( -/turf/simulated/floor/reinforced/airless, -/area/casino/casino_bow) -"ob" = ( -/obj/structure/table/gamblingtable, -/obj/structure/casino/roulette_chart, -/obj/random/coin, -/obj/random/coin, -/turf/simulated/floor/carpet, -/area/casino/casino_mainfloor) -"oc" = ( -/obj/machinery/light{ - dir = 8; - icon_state = "tube1" - }, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 1; - level = 2 - }, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled, -/area/casino/casino_mainfloor) -"pb" = ( -/obj/item/ammo_casing/pistol/magnum/used, -/turf/simulated/floor/tiled, -/area/casino/casino_bridge) -"pc" = ( -/obj/machinery/vending/wallmed1{ - pixel_x = -25 - }, -/obj/item/device/radio, -/obj/effect/decal/cleanable/blood/splatter, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled, -/area/casino/casino_mainfloor) -"qb" = ( -/obj/item/ammo_casing/rifle/used, -/obj/item/ammo_casing/rifle/used, -/turf/simulated/floor/tiled, -/area/casino/casino_bridge) -"qc" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, -/obj/structure/cable{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/structure/cable{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/turf/simulated/floor/tiled, -/area/casino/casino_crew_cantina) -"rb" = ( -/obj/item/ammo_casing/rifle/used, -/obj/item/ammo_casing/rifle/used, -/obj/item/ammo_casing/rifle/used, -/obj/item/ammo_casing/rifle/used, -/turf/simulated/floor/tiled, -/area/casino/casino_bridge) -"rc" = ( -/obj/machinery/computer/arcade, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 8; - level = 2 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled, -/area/casino/casino_crew_cantina) -"sb" = ( -/obj/effect/decal/cleanable/blood/splatter, -/obj/item/ammo_casing/rifle/used, -/obj/item/ammo_casing/rifle/used, -/obj/item/ammo_casing/rifle/used, -/turf/simulated/floor/tiled, -/area/casino/casino_bridge) -"sc" = ( -/obj/structure/reagent_dispensers/water_cooler, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 8 - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled, -/area/casino/casino_crew_cantina) -"tb" = ( -/obj/item/ammo_casing/rifle/used, -/turf/simulated/floor/tiled, -/area/casino/casino_bridge) -"tc" = ( -/obj/machinery/vending/snack, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled, -/area/casino/casino_crew_cantina) -"ub" = ( -/obj/structure/cable{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/item/ammo_casing/rifle/used, -/obj/item/ammo_casing/rifle/used, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/turf/simulated/floor/tiled, -/area/casino/casino_bridge) -"uc" = ( -/obj/machinery/vending/fitness, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled, -/area/casino/casino_crew_cantina) -"uL" = ( -/obj/effect/wallframe_spawn/reinforced/titanium, -/turf/simulated/floor/plating, -/area/casino/casino_cutter) -"vb" = ( -/obj/effect/decal/cleanable/blood/splatter, -/obj/item/ammo_casing/rifle/used, -/obj/item/ammo_casing/rifle/used, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 - }, -/turf/simulated/floor/tiled, -/area/casino/casino_bridge) -"vc" = ( -/obj/machinery/vending/cola, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled, -/area/casino/casino_crew_cantina) -"wb" = ( -/obj/item/ammo_casing/rifle/used, -/obj/item/ammo_casing/rifle/used, -/obj/item/ammo_casing/rifle/used, -/obj/item/ammo_casing/rifle/used, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 8; - level = 2 - }, -/obj/machinery/alarm{ - dir = 1; - pixel_y = -25 - }, -/turf/simulated/floor/tiled, -/area/casino/casino_bridge) -"wc" = ( -/obj/machinery/vending/coffee, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled, -/area/casino/casino_crew_cantina) -"xb" = ( -/obj/effect/decal/cleanable/blood/splatter, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/item/ammo_casing/rifle/used, -/obj/item/ammo_casing/rifle/used, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/casino/casino_security) -"xc" = ( -/obj/machinery/vending/cigarette, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled, -/area/casino/casino_crew_cantina) -"xu" = ( -/obj/structure/window/reinforced{ - dir = 4 - }, -/turf/simulated/floor/tiled/steel_grid, -/area/casino/casino_cutter) -"xC" = ( -/obj/structure/bed/chair/comfy/captain{ - dir = 1 - }, -/obj/item/storage/bag/cash, -/turf/simulated/floor/tiled/steel_grid, -/area/casino/casino_cutter) -"yb" = ( -/obj/effect/decal/cleanable/blood/splatter, -/obj/item/ammo_casing/pistol/magnum/used, -/turf/simulated/floor/tiled, -/area/casino/casino_security) -"yc" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled, -/area/casino/casino_crew_cantina) -"zb" = ( -/obj/item/ammo_casing/rifle/used, -/obj/item/ammo_casing/rifle/used, -/obj/structure/cable{ - icon_state = "5-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/casino/casino_crew_bunk) -"zc" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock{ - name = "Kitchen" - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled, -/area/casino/casino_mainfloor) -"ze" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/steel_grid, -/area/casino/casino_cutter) -"Ab" = ( -/obj/item/gun/projectile/pistol/sec/MK, -/obj/item/ammo_casing/pistol/magnum/used, -/obj/item/ammo_casing/pistol/magnum/used, -/turf/simulated/floor/tiled, -/area/casino/casino_security) -"Ac" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/turf/simulated/floor/tiled, -/area/casino/casino_mainfloor) -"AT" = ( -/obj/effect/shuttle_landmark/nav_casino/cutter_hangar, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/door/airlock{ - name = "Cutter door" - }, -/turf/simulated/floor/tiled/steel_ridged, -/area/casino/casino_cutter) -"Bb" = ( -/obj/item/material/shard, -/obj/item/ammo_casing/pistol/magnum/used, -/turf/simulated/floor/tiled, -/area/casino/casino_security) -"Bc" = ( -/obj/machinery/door/firedoor, -/obj/structure/table/marble, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled, -/area/casino/casino_crew_cantina) -"Cb" = ( -/obj/item/ammo_casing/rifle/used, -/obj/item/ammo_casing/rifle/used, -/turf/simulated/floor/tiled/white, -/area/casino/casino_crew_bathroom) -"Cc" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled, -/area/casino/casino_kitchen) -"Db" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/item/ammo_casing/rifle/used, -/obj/item/ammo_casing/rifle/used, -/obj/item/ammo_casing/rifle/used, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/plating, -/area/casino/casino_maintenance) -"Dc" = ( -/obj/structure/cable{ - d2 = 2; - icon_state = "0-2"; - pixel_y = 1 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/power/apc{ - dir = 8; - name = "west bump"; - pixel_x = -24 - }, -/obj/structure/cable, -/turf/simulated/floor/tiled, -/area/casino/casino_kitchen) -"Eb" = ( -/obj/effect/decal/cleanable/blood, -/obj/item/gun/projectile/pistol/magnum_pistol, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/item/ammo_casing/pistol/magnum/used, -/obj/item/ammo_casing/pistol/magnum/used, -/obj/item/ammo_casing/pistol/magnum/used, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/casino/casino_security) -"Ec" = ( -/obj/machinery/light{ - dir = 4; - icon_state = "tube1" - }, -/turf/simulated/floor/carpet, -/area/casino/casino_mainfloor) -"Fb" = ( -/obj/structure/bed/chair{ - dir = 4 - }, -/obj/effect/decal/cleanable/blood, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/item/ammo_casing/pistol/magnum/used, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/obj/machinery/button/blast_door{ - id_tag = "casino_checkpoint"; - name = "Casino Checkpoint Blast Door contol"; - pixel_y = -25 - }, -/turf/simulated/floor/tiled, -/area/casino/casino_security) -"Fc" = ( -/turf/simulated/wall/r_wall, -/area/casino/casino_mainfloor) -"FM" = ( -/obj/item/storage/backpack/dufflebag, -/obj/random/cash, -/obj/random/cash, -/obj/random/cash, -/obj/random/cash, -/obj/random/cash, -/obj/structure/bed/chair/comfy/captain{ - dir = 1 - }, -/turf/simulated/floor/tiled/steel_grid, -/area/casino/casino_cutter) -"Gb" = ( -/obj/item/ammo_casing/pistol/magnum/used, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 1; - level = 2 - }, -/obj/structure/flora/pottedplant/unusual, -/turf/simulated/floor/tiled, -/area/casino/casino_security) -"Gc" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/structure/cable{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/turf/simulated/floor/tiled, -/area/casino/casino_kitchen) -"Hb" = ( -/obj/item/ammo_casing/rifle/used, -/turf/simulated/floor/carpet, -/area/casino/casino_mainfloor) -"Hc" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/obj/structure/cable{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/plating, -/area/casino/casino_crew_atmos) -"Ic" = ( -/obj/structure/flora/pottedplant, -/obj/machinery/light{ - dir = 4; - icon_state = "tube1" - }, -/turf/simulated/floor/carpet, -/area/casino/casino_mainfloor) -"Ik" = ( -/obj/structure/bed/chair/comfy/captain{ - dir = 1 - }, -/turf/simulated/floor/tiled/steel_grid, -/area/casino/casino_cutter) -"In" = ( -/obj/structure/window/reinforced{ - dir = 4 - }, -/obj/structure/bed/chair/comfy/captain{ - dir = 1 - }, -/turf/simulated/floor/tiled/steel_grid, -/area/casino/casino_cutter) -"Jb" = ( -/obj/machinery/power/smes/buildable{ - RCon_tag = "Solar - Starboard" - }, -/obj/effect/engine_setup/smes, -/obj/structure/cable{ - d2 = 8; - icon_state = "0-8" - }, -/turf/simulated/floor/plating, -/area/casino/casino_solar_control) -"Jc" = ( -/obj/effect/decal/cleanable/blood/splatter, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 8 - }, -/obj/structure/cable{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/carpet, -/area/casino/casino_mainfloor) -"Kb" = ( -/obj/machinery/computer/modular{ - dir = 8; - icon_state = "console"; - name = "Cameras console" - }, -/turf/simulated/floor/tiled, -/area/casino/casino_bridge) -"Kc" = ( -/obj/item/ammo_casing/rifle{ - pixel_x = 4; - pixel_y = -8 - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/carpet, -/area/casino/casino_mainfloor) -"Lb" = ( -/obj/structure/lattice, -/obj/structure/grille, -/turf/space, -/area/casino/casino_bridge) -"Lc" = ( -/obj/item/ammo_casing/rifle{ - pixel_x = 5; - pixel_y = -2 - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/carpet, -/area/casino/casino_mainfloor) -"Mb" = ( -/obj/machinery/shipsensors, -/turf/simulated/floor/airless, -/area/casino/casino_bridge) -"Mc" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 1 - }, -/obj/structure/cable{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/carpet, -/area/casino/casino_mainfloor) -"Nb" = ( -/obj/effect/wallframe_spawn/reinforced, -/obj/machinery/door/firedoor, -/turf/simulated/floor/plating, -/area/casino/casino_maintenance) -"Nc" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/cable{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/turf/simulated/floor/carpet, -/area/casino/casino_mainfloor) -"Nx" = ( -/turf/simulated/floor/tiled/steel_grid, -/area/casino/casino_cutter) -"NZ" = ( -/turf/simulated/wall/r_titanium, -/area/casino/casino_cutter) -"Ob" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable{ - icon_state = "4-9" - }, -/turf/simulated/floor/plating, -/area/casino/casino_maintenance) -"Oc" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/power/apc{ - dir = 4; - name = "east bump"; - pixel_x = 24 - }, -/obj/structure/cable, -/obj/structure/cable{ - d2 = 2; - icon_state = "0-2" - }, -/turf/simulated/floor/plating, -/area/casino/casino_crew_atmos) -"OB" = ( -/obj/structure/window/basic{ - dir = 4 - }, -/obj/machinery/computer/shuttle_control/explore/casino_cutter{ - dir = 1 - }, -/turf/simulated/floor/tiled/steel_grid, -/area/casino/casino_cutter) -"Pb" = ( -/obj/effect/decal/cleanable/blood/splatter, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 1 - }, -/obj/structure/cable{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/structure/cable{ - icon_state = "2-8" - }, -/turf/simulated/floor/plating, -/area/casino/casino_maintenance) -"Pc" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/plating, -/area/casino/casino_crew_atmos) -"Px" = ( -/obj/machinery/light{ - dir = 1; - icon_state = "tube1" - }, -/turf/simulated/floor/tiled/steel_grid, -/area/casino/casino_cutter) -"Qb" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/plating, -/area/casino/casino_maintenance) -"Qc" = ( -/obj/effect/decal/cleanable/blood/splatter, -/obj/machinery/light/small{ - dir = 1 - }, -/turf/simulated/floor/plating, -/area/casino/casino_bow) -"Qi" = ( -/obj/structure/shuttle/engine/propulsion{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/casino/casino_cutter) -"QB" = ( -/obj/structure/bed/chair{ - dir = 8 - }, -/obj/machinery/door/window, -/obj/item/key, -/obj/machinery/embedded_controller/radio/airlock/docking_port{ - frequency = 1380; - id_tag = "casino_cutter"; - pixel_y = 25 - }, -/turf/simulated/floor/tiled/steel_grid, -/area/casino/casino_cutter) -"Rb" = ( -/obj/machinery/light/small{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/plating, -/area/casino/casino_maintenance) -"Rc" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/light/small{ - dir = 1 - }, -/turf/simulated/floor/plating, -/area/casino/casino_bow) -"Sb" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 8 - }, -/obj/structure/cable{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/plating, -/area/casino/casino_maintenance) -"Sc" = ( -/obj/machinery/atmospherics/pipe/simple/visible/black{ - dir = 10 - }, -/obj/machinery/light/small{ - dir = 4; - icon_state = "bulb1" - }, -/turf/simulated/floor/airless, -/area/casino/casino_bow) -"SP" = ( -/obj/structure/cable/green{ - d2 = 2; - icon_state = "0-2" - }, -/obj/machinery/power/apc{ - dir = 1; - name = "north bump"; - pixel_y = 24; - req_access = newlist() - }, -/turf/simulated/floor/tiled/steel_grid, -/area/casino/casino_cutter) -"Tc" = ( -/obj/machinery/atmospherics/pipe/simple/visible/black{ - dir = 6 - }, -/obj/machinery/light/small{ - dir = 8 - }, -/turf/simulated/floor/airless, -/area/casino/casino_bow) -"Uc" = ( -/obj/structure/hygiene/sink{ - dir = 8; - pixel_x = -12; - pixel_y = 2 - }, -/obj/item/storage/mirror{ - pixel_x = -25 - }, -/obj/random/soap, -/obj/machinery/light{ - dir = 8; - icon_state = "tube1" - }, -/turf/simulated/floor/tiled/white, -/area/casino/casino_crew_bathroom) -"Vb" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, -/obj/structure/cable{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/plating, -/area/casino/casino_maintenance) -"Vc" = ( -/obj/structure/hygiene/sink{ - dir = 8; - pixel_x = -12; - pixel_y = 2 - }, -/obj/item/storage/mirror{ - pixel_x = -25 - }, -/obj/random/soap, -/obj/structure/cable{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 1; - level = 2 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/white, -/area/casino/casino_patron_bathroom) -"Vu" = ( -/obj/structure/fuel_port, -/turf/simulated/wall/r_titanium, -/area/casino/casino_cutter) -"Wb" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/cable{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/turf/simulated/floor/plating, -/area/casino/casino_maintenance) -"Wc" = ( -/obj/structure/hygiene/sink{ - dir = 8; - pixel_x = -12; - pixel_y = 2 - }, -/obj/item/storage/mirror{ - pixel_x = -25 - }, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 1 - }, -/turf/simulated/floor/tiled/white, -/area/casino/casino_patron_bathroom) -"Xb" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/cable{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/turf/simulated/floor/plating, -/area/casino/casino_maintenance) -"Yb" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 1 - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/cable{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/structure/cable{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/turf/simulated/floor/tiled, -/area/casino/casino_security) -"Zb" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/obj/machinery/power/apc{ - dir = 8; - name = "west bump"; - pixel_x = -24 - }, -/obj/structure/cable{ - d2 = 2; - icon_state = "0-2"; - pixel_y = 1 - }, -/turf/simulated/floor/tiled, -/area/casino/casino_mainfloor) - -(1,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(2,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(3,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(4,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(5,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(6,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(7,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(8,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(9,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(10,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(11,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -bb -bb -bb -bb -bb -bb -bb -bb -bb -bb -bb -bb -bb -bb -bb -bb -bb -bb -bb -bb -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(12,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -bb -cY -aa -aa -aa -cY -aa -aa -cY -cY -cY -cY -aa -aa -cY -aa -aa -aa -aa -bb -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(13,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -bb -cY -ec -eq -eI -cY -ec -eq -eI -cY -cY -gK -eq -hk -cY -gK -eq -hk -aa -bb -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(14,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -bb -aa -ec -er -eI -cY -ec -er -eI -aa -aa -gK -er -hk -cY -gK -er -hk -aa -bb -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(15,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -bb -cY -ec -er -eI -cY -ec -er -eI -aa -aa -gK -er -hk -cY -gK -er -hk -cY -bb -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(16,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -bb -cY -ec -er -eI -cY -ec -er -eI -aa -aa -gK -er -hk -cY -gK -er -hk -cY -bb -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(17,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -bb -aa -ec -er -eI -cY -ec -er -eI -cY -cY -gK -er -hk -cY -gK -er -hk -aa -bb -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(18,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -bb -aa -ec -er -eI -cY -ec -er -eI -cY -cY -gK -er -hk -cY -gK -er -hk -aa -bb -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -mF -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(19,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ak -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -bb -cY -ec -er -eI -cY -ec -er -eI -aa -aa -gK -er -hk -cY -gK -er -hk -cY -bb -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(20,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -bb -cY -ec -er -eI -cY -ec -er -eI -aa -aa -gK -er -hk -cY -gK -er -hk -cY -bb -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(21,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -bb -aa -ec -er -eI -cY -ec -er -eI -aa -aa -gK -er -hk -cY -gK -er -hk -aa -bb -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(22,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -bb -bb -bb -cY -ec -er -eI -cY -ec -er -eI -cY -cY -gK -er -hk -cY -gK -er -hk -cY -bb -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(23,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -bb -cY -cY -cY -ed -es -ed -cY -cY -es -cY -cY -cY -cY -es -cY -cY -ed -es -cY -cY -bb -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(24,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -bb -cY -ds -dL -dL -et -dL -dL -dL -et -dL -dL -gw -dL -ha -dL -dL -dL -ig -cY -cY -bb -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(25,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -bb -cY -cY -cY -ed -es -ed -cY -cY -es -cY -cY -es -cY -es -cY -cY -ed -es -cY -cY -bb -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(26,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -bb -bb -bb -cY -ec -eu -eI -cY -ec -eu -fM -cY -es -gK -eu -hk -cY -gK -eu -hk -cY -bb -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(27,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -bb -aa -ec -eu -eI -cY -ec -eu -eI -cY -es -gK -eu -hk -cY -gK -eu -hk -aa -bb -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(28,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -bb -cY -ec -eu -eI -cY -ec -eu -eI -cY -es -gK -eu -hk -cY -gK -eu -hk -cY -bb -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(29,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -bb -cY -ec -eu -eI -cY -ec -eu -eI -cY -es -gK -eu -hk -cY -gK -eu -hk -cY -bb -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(30,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -bb -aa -ec -eu -eI -cY -ec -eu -eI -cY -es -gK -eu -hk -cY -gK -eu -hk -aa -bb -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(31,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -bb -aa -ec -eu -eI -cY -ec -eu -eI -cY -es -gK -eu -hk -cY -gK -eu -hk -aa -bb -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(32,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -bb -cY -ec -eu -eI -cY -ec -eu -eI -cY -es -gK -eu -hk -cY -gK -eu -hk -cY -bb -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(33,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -bb -cY -ec -eu -eI -cY -ec -eu -eI -cY -es -gK -eu -hk -cY -gK -eu -hk -cY -bb -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(34,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -bb -aa -ec -eu -eI -cY -ec -eu -eI -cY -es -gK -eu -hk -cY -gK -eu -hk -aa -bb -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(35,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -bb -cY -ec -ev -eI -cY -ec -ev -eI -cY -es -gK -ev -hk -cY -gK -ev -hk -cY -bb -bb -bb -bb -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(36,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -bb -cY -aa -aa -aa -cY -aa -aa -cY -cY -gx -cY -bb -aa -aa -aa -aa -aa -cY -bb -bb -ju -bb -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(37,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ai -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -am -at -at -at -at -at -am -am -aB -aB -aB -co -co -co -co -co -co -co -aB -aB -aB -aB -aB -gg -gy -gg -gg -gg -gg -gg -gg -ij -ij -iU -je -jv -ij -ij -ij -ij -ij -ij -ij -ij -kC -kC -kC -kC -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(38,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -am -am -gb -ax -ax -ax -ap -aV -am -bj -bu -bU -co -Uc -cp -dt -cp -ee -cp -eJ -fc -fi -fB -fN -gg -gz -gL -hb -hl -hF -hP -ih -iv -iH -iV -jf -jw -jL -jY -jY -ku -kD -kP -ld -jN -kC -mk -mG -kC -kC -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(39,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -an -aq -ap -ap -aE -aJ -qb -aW -am -bk -bk -bk -co -cH -cp -du -cp -ef -cp -eK -fd -fd -bW -fO -gg -gg -gg -hc -hm -hG -Jb -gg -iw -iI -iW -jg -jx -jM -jZ -jN -kv -kv -jN -le -jN -kC -ml -mH -mN -kC -kC -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(40,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -an -ar -au -ay -ap -qb -rb -ub -be -bl -bv -bV -cp -cI -cZ -Cb -cH -cH -cp -eL -bW -bW -bW -fP -gh -gA -gM -gM -gM -gM -gM -gg -ix -iI -iW -iV -jy -jN -jN -jN -jN -jN -jN -le -lB -kC -Qc -mH -mN -mn -kC -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(41,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -an -as -av -pb -ay -ay -sb -vb -bf -bm -bw -bW -cp -cJ -cp -cp -cp -cp -cp -eM -bW -fj -fC -cq -cq -cq -cq -cq -cq -cq -hR -ii -Hc -iJ -iX -jh -jz -jN -ka -ka -jN -jN -jN -le -jN -kC -mm -mI -mO -mU -kC -kC -kC -kC -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(42,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -an -ap -ap -ap -aF -aL -tb -wb -am -bn -Ob -bW -bW -bz -bW -bW -bW -bW -bW -bW -bW -fk -bW -bW -bV -gB -gB -bW -gB -bW -hS -ij -iz -iK -iY -ji -jA -jO -kb -km -km -kE -kb -lf -jN -kC -mn -mJ -mP -mV -kC -nc -ng -nl -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(43,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -am -am -gb -aA -Kb -aM -ap -ba -am -bo -Pb -Qb -cq -Rb -Sb -Db -cq -eg -cq -eN -fe -Vb -fD -fD -gi -gC -gi -hd -gC -hH -bz -ij -iA -iL -iZ -jj -jB -jP -kc -kc -iL -kc -kc -Oc -Pc -lX -mo -mK -mQ -mW -mY -nd -nh -nl -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(44,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -am -at -at -at -at -at -am -am -aB -bz -bZ -bZ -bZ -db -bZ -bZ -bZ -bZ -bZ -bZ -bz -bZ -fQ -fQ -fQ -fQ -fQ -hn -hn -hT -ij -ij -ij -ij -ij -ij -ij -ij -ij -ij -ij -ij -ij -ij -kC -kC -kC -mR -mH -kC -ne -Sc -nl -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(45,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -Lb -Mb -Nb -bz -ca -cr -cL -zb -dx -dM -eh -ew -ex -bZ -Wb -fE -fR -dc -dc -qc -Bc -Cc -Dc -Gc -ik -iB -iB -iB -jk -jC -iB -iB -kn -kw -Jc -kQ -lg -lD -lY -mp -kC -Rc -mH -kC -kC -kC -kC -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(46,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -Lb -Lb -aB -bz -ca -cs -cM -dd -dx -dN -ei -ex -eO -bZ -bz -bZ -fS -gk -gj -rc -fQ -hp -hJ -hw -il -iC -iM -hn -jl -hn -hn -hn -ga -kx -kG -kR -lh -lE -lZ -mq -kC -mR -mH -kC -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(47,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aB -bA -ca -ct -cN -de -dx -dO -ej -ek -eP -bZ -bz -bZ -fT -gk -gj -sc -fQ -hq -hw -hw -im -iD -iN -hn -jm -jD -jQ -kd -ga -ky -kG -kR -li -lF -ma -mr -kC -mR -mH -mZ -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(48,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aB -bB -ca -cu -cN -df -dx -dP -ek -ek -eQ -bZ -bz -bZ -fU -gl -gD -tc -fQ -hr -hw -hJ -in -iE -iO -hn -jn -hw -hw -ke -ga -hE -kH -kR -lh -lG -mb -ms -kC -mR -mH -kC -kC -kC -kC -kC -kC -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(49,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aw -aB -aB -aB -aB -aB -aB -aB -bC -ca -cv -cN -dg -dx -dQ -ek -dR -eR -bZ -bz -bZ -fV -gm -gD -uc -fQ -hs -hK -hV -hV -iF -iP -ga -jo -ga -ga -ga -ga -kz -kI -kR -lh -lH -lG -lI -kC -mR -mX -kC -nr -nr -nr -nr -ns -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(50,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aC -aH -aN -aT -bc -bh -bh -bz -ca -cw -cN -df -dx -dR -ek -ek -eQ -bZ -bz -bZ -fW -gl -gD -vc -fQ -ht -hw -hw -hV -hw -hw -gt -jp -jE -jR -kf -ko -jI -kJ -kR -lj -lI -lI -lI -kC -mR -mH -na -na -nj -nm -nq -ns -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(51,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aD -aI -aO -aU -bd -bi -bp -bD -ca -cv -cN -dh -dx -dS -ek -ey -eS -bZ -bz -bZ -fX -gk -gj -wc -fQ -hu -hw -hW -hW -hw -hw -ga -jq -gG -gG -gG -kp -jI -Kc -kR -lk -lJ -mc -mt -kC -mR -mH -kC -nr -nr -nr -nr -ns -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(52,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aB -aB -aB -aB -aB -aB -aB -bE -ca -cx -cO -di -dx -dT -ek -ez -eT -bZ -bz -bZ -fY -gn -gj -xc -fQ -hv -hw -hw -hw -hK -hw -ga -jr -jF -jS -kg -kq -jI -Lc -kR -kR -kR -kR -kR -kC -mR -mH -kC -kC -kC -kC -kC -kC -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(53,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aB -bF -ca -cy -cP -dg -dx -dT -el -ek -eU -ff -Xb -bZ -fZ -gj -gE -yc -fQ -hw -hL -hX -io -iG -hw -ga -js -jG -gG -gG -kr -jI -Mc -kS -ll -lK -md -mu -kC -mR -mX -kC -nr -nr -nr -nr -ns -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(54,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -bq -bG -cb -cb -cb -cb -dy -dy -dy -dy -dy -aB -fo -aB -ga -ga -ga -zc -ga -hx -hn -hn -hn -hn -iQ -ga -jt -jH -jT -kh -ks -jI -kJ -kT -lm -lL -lL -mv -kC -Rc -mH -na -na -nj -nn -nq -ns -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(55,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -bq -xb -cc -cc -cc -cc -dz -dU -em -eA -eV -fg -Yb -fF -Zb -oc -pc -Ac -hf -ge -hM -hY -hM -hM -ge -ja -ge -jI -jI -ki -jI -ge -kN -kT -ln -lL -lL -lL -kC -mR -mH -kC -nr -nr -nr -nr -ns -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(56,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -bq -bI -cd -cz -cQ -dj -dA -bq -bq -eB -bq -bq -fq -bq -gc -gp -gG -ks -gt -hy -ge -ge -ge -ge -ge -ge -ge -ge -ge -kj -hB -ge -kJ -kT -lo -lM -me -mw -kC -mR -mH -kC -kC -kC -kC -kC -kC -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(57,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -bq -bJ -cc -cA -yb -Ab -dB -bq -en -eC -en -bq -fr -bq -bq -gq -gH -gX -gt -ge -ge -hZ -ip -ge -hZ -hZ -ge -hZ -hZ -ge -hZ -ge -kJ -kT -kT -kT -kT -kT -kC -mR -mX -kC -nr -nr -nr -nr -ns -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(58,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -bq -bK -ce -cB -cS -Bb -dC -bq -en -eD -en -bq -Eb -Gb -bq -gr -gG -gG -gt -ge -hN -ia -iq -ge -iR -ib -ge -ib -jU -ge -kt -ge -Mc -kU -lp -lN -mf -mx -kC -mR -mH -na -na -nj -no -nq -ns -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(59,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -bq -bL -cf -cC -cT -dm -dD -bq -en -eE -en -bq -Fb -fH -bq -gs -gI -gY -gt -ge -ge -ib -ir -ge -iR -ib -ge -jJ -ib -ge -ia -ge -kJ -kV -lq -lO -lO -my -kC -mR -mH -kC -nr -nr -nr -nr -ns -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(60,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -bq -bM -bq -bq -bq -bq -bq -bq -bq -bq -bq -bq -fu -bq -bq -gt -gt -gt -hg -ge -gJ -ic -ic -ge -ic -ic -ge -ic -ic -ge -ic -ge -kJ -kV -lr -lO -lO -lO -kC -mR -mH -kC -kC -kC -kC -kC -kC -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(61,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -bq -bN -cg -bq -cF -dn -dE -dn -dn -eF -eW -fh -fv -fI -gd -ge -ge -gJ -Hb -hz -Ec -ge -ge -hN -ge -Ec -ge -ge -ge -ge -Ec -hj -kJ -kV -ls -lP -mg -mz -kC -mR -mH -mZ -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(62,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -bq -bO -ch -bq -cU -NZ -uL -uL -NZ -eG -eX -bq -fw -fJ -bq -gu -gJ -gZ -hi -hA -ga -id -ge -ge -iS -ga -id -hj -ge -hA -ga -id -kJ -kV -kV -kV -kV -kV -kC -mR -mH -kC -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(63,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -bq -bP -ci -cD -cV -NZ -QB -OB -NZ -eG -eX -bq -bq -bq -bq -gv -ge -ge -ge -hB -fK -ge -ge -ge -fx -jb -ge -ge -ge -ge -fK -ge -kO -Nc -lt -lQ -Vc -Wc -kC -mR -mU -kC -kC -kC -kC -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(64,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -bq -bQ -cj -cD -cV -NZ -SP -ze -AT -eH -eY -br -fx -fK -ge -ge -ge -ge -hj -ge -hN -ie -is -ge -ge -jc -ge -ge -jV -kk -ge -ge -ge -kX -lu -lR -mi -mB -kC -mR -mV -kC -nc -Tc -nl -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(65,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -bq -bR -ck -cD -cV -NZ -Nx -FM -NZ -eG -eZ -br -fy -fL -gf -fz -fL -gf -ge -hy -ge -ge -ge -ge -hN -ge -ge -jK -hN -ge -ge -ge -ge -kY -lu -lS -lu -mC -kC -mR -mW -nb -nd -nh -nl -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(66,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -bq -bS -cl -cE -cW -NZ -Px -xC -NZ -eG -cF -br -fz -fL -gf -fz -fL -gf -ge -fx -ge -hN -hN -ge -ge -jd -hB -ge -hZ -ge -ge -hZ -ge -kZ -lu -lT -lu -mD -kC -Rc -mN -kC -ne -ni -nl -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(67,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -bq -bq -bq -bq -cU -NZ -Nx -Ik -NZ -eG -cF -br -fz -fL -gf -fz -fL -gf -ge -hC -ge -ge -ob -ge -iT -hC -ge -ge -jW -kl -ge -kA -kl -kZ -lu -lu -lu -lu -kC -mR -mN -kC -kC -kC -kC -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(68,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -br -bT -cm -cF -cV -NZ -xu -In -NZ -eG -fa -br -fz -fL -gf -fz -fL -gf -ge -hD -ge -if -hD -ge -ge -hD -iT -ge -jX -kl -ge -kB -kl -la -lv -lU -lU -lU -mL -mS -mn -kC -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(69,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -br -br -cn -cF -cV -Vu -Qi -Qi -NZ -eG -fa -br -fy -fL -gf -fz -fL -gf -ge -ge -ge -ge -ge -hN -ge -iT -ge -ge -ic -ge -ge -ic -ge -ge -ge -hB -ge -mE -kC -mH -kC -kC -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(70,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -br -br -cF -cF -dr -dr -dr -dr -cF -fb -br -fz -fL -gf -fz -fL -gf -ge -hE -Ec -ge -iu -ge -ge -Ic -hN -hN -hE -ge -Ec -iu -ge -ge -ge -lV -mj -kl -kC -kC -kC -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(71,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -br -br -cX -cX -cX -cX -cX -cX -br -br -fA -fA -fA -fA -fA -fA -fA -fA -Fc -fA -fA -fA -fA -Fc -fA -fA -fA -fA -Fc -fA -fA -fA -fA -fA -fA -fA -kC -kC -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(72,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -eb -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(73,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(74,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(75,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(76,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(77,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(78,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(79,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(80,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(81,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(82,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(83,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(84,1,1) = {" -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(85,1,1) = {" -ac -ae -ae -ae -ae -ae -ae -ae -ag -ae -ae -aj -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -nk -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(86,1,1) = {" -ac -ae -aa -aa -aa -aa -aa -aa -aa -aa -ae -aj -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -bt -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(87,1,1) = {" -ac -ae -aa -aa -aa -aa -aa -aa -aa -aa -ae -aj -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(88,1,1) = {" -ac -ae -aa -ad -ad -ad -ad -ad -ad -aa -ae -aj -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(89,1,1) = {" -ac -ae -aa -ad -aa -aa -aa -aa -ad -aa -ae -aj -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(90,1,1) = {" -ac -ae -aa -ad -aa -aa -aa -aa -ad -aa -ae -aj -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(91,1,1) = {" -ac -ae -aa -ad -aa -aa -aa -af -ah -aa -ae -aj -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(92,1,1) = {" -ac -ae -aa -ad -aa -aa -aa -aa -ah -aa -ae -aj -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(93,1,1) = {" -ac -ae -aa -ad -aa -aa -aa -aa -ah -aa -ae -aj -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(94,1,1) = {" -ac -ae -aa -ad -aa -aa -aa -aa -ad -aa -ae -aj -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(95,1,1) = {" -ac -ae -aa -ad -aa -aa -aa -aa -ad -aa -ae -aj -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(96,1,1) = {" -ac -ae -aa -ad -aa -aa -aa -aa -ad -aa -ae -aj -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(97,1,1) = {" -ac -ae -aa -ad -ad -ad -ad -ad -ad -aa -ae -aj -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(98,1,1) = {" -ac -ae -aa -aa -aa -aa -aa -aa -aa -aa -ae -aj -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(99,1,1) = {" -ac -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -aj -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(100,1,1) = {" -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} diff --git a/maps/away/casino/casino_areas.dm b/maps/away/casino/casino_areas.dm deleted file mode 100644 index 1b52699c81de0..0000000000000 --- a/maps/away/casino/casino_areas.dm +++ /dev/null @@ -1,74 +0,0 @@ -/area/casino - icon = 'maps/away/casino/casino_sprites.dmi' - -/area/casino/casino_mainfloor - name = "\improper Casino Hall" - icon_state = "main_area" - -/area/casino/casino_maintenance - name = "\improper Casino Maintenance" - icon_state = "maintenance" - -/area/casino/casino_bow - name = "\improper Casino Ship Bow" - icon_state = "bow" - -/area/casino/casino_crew_bunk - name = "\improper Casino Crew Bunk Room" - icon_state = "crew_bunk" - -/area/casino/casino_crew_atmos - name = "\improper Casino Atmos room" - icon_state = "atmos" - -/area/casino/casino_kitchen - name = "\improper Casino Kitchen" - icon_state = "kitchen" - -/area/casino/casino_crew_cantina - name = "\improper Casino Canteen" - icon_state = "crew_cantina" - -/area/casino/casino_security - name = "\improper Casino Security Wing" - icon_state = "sec" - -/area/casino/casino_hangar - name = "\improper Casino Hangar" - icon_state = "hangar" - -/area/casino/casino_private1 - name = "\improper Casino Private Room 1" - icon_state = "pr1" - -/area/casino/casino_private2 - name = "\improper Casino Private room 1" - icon_state = "pr2" - -/area/casino/casino_private_vip - name = "\improper Casino VIP Private Room" - icon_state = "pr_vip" - -/area/casino/casino_crew_bathroom - name = "\improper Casino Crew Bathroom" - icon_state = "crew_bathroom" - -/area/casino/casino_patron_bathroom - name = "\improper Casino Patrons Bathroom" - icon_state = "patron_bathroom" - -/area/casino/casino_bridge - name = "\improper Casino Bridge" - icon_state = "bridge" - -/area/casino/casino_storage - name = "\improper Casino Storage Room" - icon_state = "storage" - -/area/casino/casino_solar_control - name = "\improper Casino Solar Controls" - icon_state = "solar_control" - -/area/casino/casino_cutter - name = "\improper Casino Cutter" - icon_state = "shuttle" diff --git a/maps/away/casino/casino_sprites.dmi b/maps/away/casino/casino_sprites.dmi deleted file mode 100644 index 26c85e381fea6..0000000000000 Binary files a/maps/away/casino/casino_sprites.dmi and /dev/null differ diff --git a/maps/away/derelict/derelict-station.dmm b/maps/away/derelict/derelict-station.dmm deleted file mode 100644 index efdebf019fe5e..0000000000000 --- a/maps/away/derelict/derelict-station.dmm +++ /dev/null @@ -1,44030 +0,0 @@ -//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE -"aa" = ( -/turf/space, -/area/space) -"ab" = ( -/turf/simulated/wall/voxshuttle, -/area/derelict/ship) -"ac" = ( -/obj/structure/window/reinforced{ - dir = 1 - }, -/obj/structure/cable/yellow{ - d2 = 4; - icon_state = "0-4" - }, -/obj/machinery/power/solar, -/turf/simulated/floor/plating, -/area/derelict/ship) -"ad" = ( -/obj/structure/window/reinforced{ - dir = 1 - }, -/obj/structure/cable/yellow{ - d2 = 4; - icon_state = "0-4" - }, -/obj/structure/cable/yellow{ - d2 = 8; - icon_state = "0-8" - }, -/obj/machinery/power/solar, -/turf/simulated/floor/plating, -/area/derelict/ship) -"ae" = ( -/obj/structure/window/reinforced{ - dir = 1 - }, -/obj/structure/cable/yellow{ - d2 = 4; - icon_state = "0-4" - }, -/obj/structure/cable/yellow{ - d2 = 8; - icon_state = "0-8" - }, -/obj/structure/cable/yellow{ - d2 = 2; - icon_state = "0-2" - }, -/obj/machinery/power/solar, -/turf/simulated/floor/plating, -/area/derelict/ship) -"af" = ( -/obj/structure/window/reinforced{ - dir = 1 - }, -/obj/structure/cable/yellow{ - d2 = 8; - icon_state = "0-8" - }, -/obj/machinery/power/solar, -/turf/simulated/floor/plating, -/area/derelict/ship) -"ag" = ( -/turf/simulated/floor/tiled, -/area/derelict/ship) -"ah" = ( -/obj/machinery/sleeper, -/obj/machinery/light{ - dir = 1 - }, -/turf/simulated/floor/tiled, -/area/derelict/ship) -"ai" = ( -/obj/item/cell/standard, -/turf/simulated/floor/plating, -/area/derelict/ship) -"aj" = ( -/turf/simulated/floor/plating, -/area/derelict/ship) -"ak" = ( -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/plating, -/area/derelict/ship) -"al" = ( -/obj/structure/shuttle/engine/propulsion{ - dir = 4; - icon_state = "burst_r" - }, -/turf/space, -/area/derelict/ship) -"am" = ( -/obj/machinery/computer/modular/preset/medical, -/turf/simulated/floor/tiled, -/area/derelict/ship) -"an" = ( -/obj/random/maintenance, -/turf/simulated/floor/tiled, -/area/derelict/ship) -"ao" = ( -/obj/structure/table/standard, -/obj/random/firstaid, -/turf/simulated/floor/tiled, -/area/derelict/ship) -"ap" = ( -/obj/machinery/door/airlock/glass, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/plating, -/area/derelict/ship) -"aq" = ( -/obj/structure/shuttle/engine/heater{ - dir = 4 - }, -/obj/structure/window/reinforced{ - dir = 8 - }, -/turf/simulated/floor/airless, -/area/derelict/ship) -"ar" = ( -/obj/structure/shuttle/engine/propulsion{ - dir = 4 - }, -/turf/space, -/area/derelict/ship) -"as" = ( -/obj/item/scalpel, -/turf/simulated/floor/tiled, -/area/derelict/ship) -"at" = ( -/obj/machinery/portable_atmospherics/canister/air, -/turf/simulated/floor/tiled, -/area/derelict/ship) -"au" = ( -/obj/machinery/constructable_frame/computerframe, -/turf/simulated/floor/tiled, -/area/derelict/ship) -"av" = ( -/obj/structure/grille, -/obj/structure/window/reinforced{ - dir = 8 - }, -/obj/structure/window/reinforced{ - dir = 1 - }, -/obj/structure/window/reinforced, -/turf/simulated/floor/plating, -/area/derelict/ship) -"aw" = ( -/obj/structure/grille, -/obj/structure/window/reinforced{ - dir = 1 - }, -/obj/structure/window/reinforced, -/turf/simulated/floor/plating, -/area/derelict/ship) -"ax" = ( -/obj/structure/grille, -/obj/structure/window/reinforced{ - dir = 1 - }, -/obj/structure/window/reinforced{ - dir = 4 - }, -/obj/structure/window/reinforced, -/turf/simulated/floor/plating, -/area/derelict/ship) -"ay" = ( -/obj/machinery/door/airlock/glass{ - name = "Hibernation Pods" - }, -/turf/simulated/floor/tiled, -/area/derelict/ship) -"az" = ( -/obj/machinery/light{ - dir = 8 - }, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/plating, -/area/derelict/ship) -"aA" = ( -/obj/structure/bed/chair{ - dir = 1 - }, -/turf/simulated/floor/tiled, -/area/derelict/ship) -"aB" = ( -/obj/structure/table/standard, -/obj/item/cell/standard, -/turf/simulated/floor/tiled, -/area/derelict/ship) -"aC" = ( -/obj/item/device/multitool, -/turf/simulated/floor/tiled, -/area/derelict/ship) -"aD" = ( -/obj/item/cell/hyper, -/turf/simulated/floor/tiled, -/area/derelict/ship) -"aE" = ( -/obj/structure/cable/yellow{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/turf/simulated/floor/tiled, -/area/derelict/ship) -"aF" = ( -/obj/machinery/door/airlock/glass, -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/plating, -/area/derelict/ship) -"aG" = ( -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/turf/simulated/floor/plating, -/area/derelict/ship) -"aH" = ( -/obj/machinery/pipedispenser, -/turf/simulated/floor/plating, -/area/derelict/ship) -"aI" = ( -/obj/structure/shuttle/engine/propulsion{ - dir = 4; - icon_state = "burst_l" - }, -/turf/space, -/area/derelict/ship) -"aJ" = ( -/obj/machinery/light{ - dir = 8 - }, -/turf/simulated/floor/tiled, -/area/derelict/ship) -"aK" = ( -/obj/structure/table/standard, -/obj/random/maintenance, -/turf/simulated/floor/tiled, -/area/derelict/ship) -"aL" = ( -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled, -/area/derelict/ship) -"aM" = ( -/obj/structure/grille, -/obj/structure/window/reinforced{ - dir = 8 - }, -/obj/structure/window/reinforced{ - dir = 1 - }, -/obj/structure/window/reinforced{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/derelict/ship) -"aN" = ( -/obj/structure/table/standard, -/obj/machinery/light{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/derelict/ship) -"aO" = ( -/obj/machinery/door/airlock/glass, -/turf/simulated/floor/tiled, -/area/derelict/ship) -"aP" = ( -/obj/machinery/light_switch{ - pixel_x = 27 - }, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled, -/area/derelict/ship) -"aQ" = ( -/obj/machinery/portable_atmospherics/powered/scrubber, -/turf/simulated/floor/tiled, -/area/derelict/ship) -"aR" = ( -/obj/structure/lattice, -/turf/space, -/area/space) -"aS" = ( -/obj/structure/grille, -/obj/structure/window/reinforced{ - dir = 8 - }, -/obj/structure/window/reinforced{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/derelict/ship) -"aT" = ( -/obj/structure/bed, -/obj/item/bedsheet, -/obj/structure/window/reinforced{ - dir = 8 - }, -/turf/simulated/floor/tiled, -/area/derelict/ship) -"aU" = ( -/obj/machinery/light{ - dir = 4 - }, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled, -/area/derelict/ship) -"aV" = ( -/obj/machinery/light{ - dir = 8; - icon_state = "tube1" - }, -/turf/simulated/floor/tiled, -/area/derelict/ship) -"aW" = ( -/turf/simulated/wall, -/area/constructionsite/maintenance) -"aX" = ( -/obj/structure/table/standard, -/obj/random/handgun, -/turf/simulated/floor/tiled, -/area/derelict/ship) -"aY" = ( -/obj/structure/table/standard, -/turf/simulated/floor/tiled, -/area/derelict/ship) -"aZ" = ( -/obj/structure/grille, -/obj/structure/window/reinforced{ - dir = 4 - }, -/obj/structure/window/reinforced{ - dir = 1 - }, -/obj/structure/window/reinforced, -/obj/structure/window/reinforced{ - dir = 8 - }, -/turf/simulated/floor/plating, -/area/derelict/ship) -"ba" = ( -/obj/machinery/light/small{ - dir = 8 - }, -/turf/simulated/floor/tiled, -/area/derelict/ship) -"bb" = ( -/obj/structure/table/standard, -/obj/item/tank/oxygen, -/turf/simulated/floor/tiled, -/area/derelict/ship) -"bc" = ( -/obj/machinery/light_switch{ - pixel_x = 27 - }, -/turf/simulated/floor/tiled, -/area/derelict/ship) -"bd" = ( -/obj/structure/grille, -/obj/structure/window/reinforced{ - dir = 8 - }, -/obj/structure/window/reinforced{ - dir = 1 - }, -/obj/structure/window/reinforced{ - dir = 4 - }, -/obj/structure/window/reinforced, -/turf/simulated/floor/plating, -/area/derelict/ship) -"be" = ( -/obj/random/loot, -/turf/simulated/floor/tiled, -/area/derelict/ship) -"bf" = ( -/obj/machinery/light{ - dir = 1 - }, -/turf/simulated/floor/tiled, -/area/derelict/ship) -"bg" = ( -/obj/random/closet, -/turf/simulated/floor/tiled, -/area/derelict/ship) -"bh" = ( -/obj/structure/grille, -/obj/structure/wall_frame, -/turf/simulated/floor/airless, -/area/constructionsite/maintenance) -"bi" = ( -/obj/effect/wallframe_spawn/reinforced, -/turf/simulated/floor/airless, -/area/constructionsite/maintenance) -"bj" = ( -/obj/structure/table/standard, -/obj/item/device/scanner/gas, -/turf/simulated/floor/tiled, -/area/derelict/ship) -"bk" = ( -/obj/structure/bed/chair{ - dir = 8 - }, -/turf/simulated/floor/tiled, -/area/derelict/ship) -"bl" = ( -/obj/machinery/door/airlock/glass, -/turf/simulated/floor/shuttle/white, -/area/derelict/ship) -"bm" = ( -/obj/machinery/door/airlock/glass{ - name = "Living Module" - }, -/turf/simulated/floor/shuttle/white, -/area/derelict/ship) -"bn" = ( -/obj/random/hostile, -/turf/simulated/floor/airless, -/area/constructionsite/maintenance) -"bo" = ( -/turf/simulated/floor/airless, -/area/constructionsite/maintenance) -"bp" = ( -/obj/random/maintenance, -/turf/simulated/floor/airless, -/area/constructionsite/maintenance) -"bq" = ( -/obj/random/cash, -/turf/simulated/floor/airless, -/area/constructionsite/maintenance) -"br" = ( -/obj/structure/table/standard, -/obj/random/loot, -/turf/simulated/floor/tiled, -/area/derelict/ship) -"bs" = ( -/obj/structure/bed, -/obj/item/bedsheet, -/obj/structure/window/reinforced{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/derelict/ship) -"bt" = ( -/obj/machinery/portable_atmospherics/canister/oxygen, -/turf/simulated/floor/tiled, -/area/derelict/ship) -"bu" = ( -/obj/random/trash, -/turf/simulated/floor/airless, -/area/constructionsite/maintenance) -"bv" = ( -/turf/simulated/wall, -/area/constructionsite/bridge) -"bw" = ( -/obj/structure/grille, -/obj/machinery/door/blast/regular/open, -/obj/structure/wall_frame, -/turf/simulated/floor/airless, -/area/constructionsite/bridge) -"bx" = ( -/obj/effect/wallframe_spawn/reinforced, -/turf/simulated/floor/airless, -/area/constructionsite/bridge) -"by" = ( -/obj/effect/wallframe_spawn/reinforced, -/obj/machinery/door/blast/regular/open, -/turf/simulated/floor/tiled/dark/airless, -/area/constructionsite/bridge) -"bz" = ( -/obj/structure/grille, -/obj/structure/wall_frame, -/turf/simulated/floor/airless, -/area/constructionsite/bridge) -"bA" = ( -/obj/random/material, -/turf/simulated/floor/airless, -/area/constructionsite/maintenance) -"bB" = ( -/obj/structure/table/standard, -/obj/item/modular_computer/laptop, -/turf/simulated/floor/tiled/dark/airless, -/area/constructionsite/bridge) -"bC" = ( -/obj/structure/table/standard, -/obj/random/drinkbottle, -/turf/simulated/floor/airless, -/area/constructionsite/bridge) -"bD" = ( -/obj/structure/table/standard, -/turf/simulated/floor/airless, -/area/constructionsite/bridge) -"bE" = ( -/obj/structure/table, -/obj/random/loot, -/turf/simulated/floor/airless, -/area/constructionsite/bridge) -"bF" = ( -/turf/space, -/area/constructionsite/maintenance) -"bG" = ( -/obj/random/loot, -/turf/simulated/floor/airless, -/area/constructionsite/maintenance) -"bH" = ( -/turf/simulated/floor/airless{ - icon_state = "dmg2" - }, -/area/constructionsite/maintenance) -"bI" = ( -/obj/structure/grille, -/obj/structure/window/reinforced, -/obj/structure/window/reinforced{ - dir = 8 - }, -/obj/structure/window/reinforced{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/derelict/ship) -"bJ" = ( -/obj/machinery/light_switch{ - pixel_x = 27 - }, -/obj/machinery/light{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/derelict/ship) -"bK" = ( -/turf/simulated/floor/tiled/dark/airless, -/area/constructionsite/bridge) -"bL" = ( -/turf/simulated/floor/airless, -/area/constructionsite/bridge) -"bM" = ( -/obj/random/trash, -/obj/structure/table, -/turf/simulated/floor/tiled/dark/airless, -/area/constructionsite/bridge) -"bN" = ( -/obj/random/closet, -/turf/simulated/floor/airless, -/area/constructionsite/maintenance) -"bO" = ( -/obj/random/trash, -/turf/simulated/floor/airless, -/area/constructionsite/bridge) -"bP" = ( -/obj/structure/table/standard, -/obj/item/paper/spacer{ - info = "\\\[center]\\\[b]ATTN: Regarding Meteor Storms\\\[/b]\[/center]\\\[br]\\\[br]We've recently heard mutterings from the Atmospheric Technicians that the meteor showers in this sector are becoming too much. However, this should be disregarded.\\\[br]\\\[br] High Command has assured us that our shields can easily keep pace with any meteor storm and then some. Any uneasiness the crew may feel should be disspelled swiftly. Thank you."; - name = "ATTN: Regarding Meteor Storms" - }, -/turf/simulated/floor/airless, -/area/constructionsite/bridge) -"bQ" = ( -/obj/structure/table, -/obj/random/material, -/turf/simulated/floor/airless, -/area/constructionsite/bridge) -"bR" = ( -/turf/simulated/floor/airless{ - icon_state = "dmg2" - }, -/area/constructionsite/bridge) -"bS" = ( -/obj/random/hostile{ - spawn_nothing_percentage = 60 - }, -/turf/simulated/floor/tiled/dark/airless, -/area/constructionsite/bridge) -"bT" = ( -/obj/structure/bed/chair, -/turf/simulated/floor/tiled, -/area/derelict/ship) -"bU" = ( -/obj/structure/table/rack, -/obj/item/tank/oxygen_emergency, -/obj/item/tank/oxygen_emergency, -/obj/item/tank/oxygen_emergency, -/obj/item/tank/oxygen_emergency, -/obj/random/tank, -/turf/simulated/floor/tiled, -/area/derelict/ship) -"bV" = ( -/obj/structure/table/rack, -/obj/item/clothing/mask/breath, -/obj/item/cell/standard, -/obj/random/hardsuit, -/turf/simulated/floor/tiled, -/area/derelict/ship) -"bW" = ( -/obj/structure/table/rack, -/obj/item/storage/toolbox/syndicate, -/obj/random/maintenance, -/turf/simulated/floor/tiled, -/area/derelict/ship) -"bX" = ( -/obj/structure/cable{ - d2 = 4; - icon_state = "0-4" - }, -/obj/machinery/power/apc/high/inactive{ - dir = 8; - name = "west bump"; - pixel_x = -24 - }, -/turf/simulated/floor/plating, -/area/derelict/ship) -"bY" = ( -/obj/structure/cable{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/turf/simulated/floor/plating, -/area/derelict/ship) -"bZ" = ( -/obj/item/cell/hyper, -/turf/simulated/floor/plating, -/area/derelict/ship) -"ca" = ( -/obj/structure/cable/yellow{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/plating, -/area/derelict/ship) -"cb" = ( -/obj/structure/cable/yellow{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/structure/cable/yellow{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/turf/simulated/floor/plating, -/area/derelict/ship) -"cc" = ( -/obj/structure/cable/yellow{ - d2 = 8; - icon_state = "0-8" - }, -/obj/machinery/power/solar_control, -/turf/simulated/floor/plating, -/area/derelict/ship) -"cd" = ( -/obj/structure/girder, -/turf/simulated/floor/airless, -/area/constructionsite/maintenance) -"ce" = ( -/obj/machinery/door/airlock/hatch, -/turf/simulated/floor/airless, -/area/constructionsite/maintenance) -"cf" = ( -/obj/random/handgun, -/turf/simulated/floor/airless, -/area/constructionsite/bridge) -"cg" = ( -/obj/item/stack/cable_coil, -/turf/simulated/floor/plating, -/area/derelict/ship) -"ch" = ( -/obj/structure/cable/yellow, -/obj/machinery/power/terminal, -/turf/simulated/floor/plating, -/area/derelict/ship) -"ci" = ( -/obj/machinery/door/airlock/hatch, -/obj/machinery/door/blast/regular/open, -/turf/simulated/floor/airless, -/area/constructionsite/bridge) -"cj" = ( -/obj/random/hostile{ - spawn_nothing_percentage = 60 - }, -/turf/simulated/floor/airless, -/area/constructionsite/bridge) -"ck" = ( -/obj/random/junk, -/turf/simulated/floor/tiled/dark/airless, -/area/constructionsite/bridge) -"cl" = ( -/obj/machinery/door/airlock/hatch, -/obj/machinery/door/blast/regular, -/turf/simulated/floor/airless, -/area/constructionsite/bridge) -"cm" = ( -/obj/random/closet, -/obj/random/maintenance, -/obj/random/maintenance, -/obj/random/material, -/turf/simulated/floor/airless, -/area/constructionsite/maintenance) -"cn" = ( -/turf/simulated/wall/voxshuttle, -/area/space) -"co" = ( -/obj/machinery/door/airlock/glass{ - name = "Pod Bay" - }, -/turf/simulated/floor/tiled, -/area/derelict/ship) -"cp" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/turf/simulated/floor/plating, -/area/derelict/ship) -"cq" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/plating, -/area/derelict/ship) -"cr" = ( -/obj/machinery/power/smes/batteryrack, -/obj/structure/cable{ - d2 = 8; - icon_state = "0-8" - }, -/turf/simulated/floor/plating, -/area/derelict/ship) -"cs" = ( -/obj/machinery/computer/modular, -/turf/simulated/floor/tiled/dark/airless, -/area/constructionsite/bridge) -"ct" = ( -/obj/random/trash, -/turf/simulated/floor/tiled/dark/airless, -/area/constructionsite/bridge) -"cu" = ( -/obj/random/closet, -/obj/random/energy, -/obj/random/maintenance, -/turf/simulated/floor/airless, -/area/constructionsite/maintenance) -"cv" = ( -/obj/structure/bookcase/manuals/engineering, -/obj/effect/decal/cleanable/cobweb, -/turf/simulated/floor/airless, -/area/constructionsite/hallway/fore) -"cw" = ( -/turf/simulated/floor/airless, -/area/constructionsite/hallway/fore) -"cx" = ( -/obj/structure/bookcase, -/turf/simulated/floor/airless{ - icon_state = "dmg2" - }, -/area/constructionsite/hallway/fore) -"cy" = ( -/turf/simulated/floor/airless{ - icon_state = "dmg2" - }, -/area/constructionsite/hallway/fore) -"cz" = ( -/obj/structure/bookcase/manuals/xenoarchaeology, -/turf/simulated/floor/airless, -/area/constructionsite/hallway/fore) -"cA" = ( -/obj/structure/bookcase, -/turf/simulated/floor/airless, -/area/constructionsite/hallway/fore) -"cB" = ( -/obj/structure/girder, -/turf/simulated/floor/airless, -/area/constructionsite/bridge) -"cC" = ( -/obj/random/loot, -/turf/simulated/floor/airless, -/area/constructionsite/bridge) -"cD" = ( -/obj/structure/table/marble, -/obj/random/coin, -/turf/simulated/floor/airless, -/area/constructionsite/hallway/fore) -"cE" = ( -/obj/structure/table/marble, -/obj/machinery/microwave, -/turf/simulated/floor/airless, -/area/constructionsite/hallway/fore) -"cF" = ( -/obj/structure/table/marble, -/obj/random/loot, -/turf/simulated/floor/airless, -/area/constructionsite/hallway/fore) -"cG" = ( -/turf/simulated/floor/tiled/white/airless, -/area/constructionsite/hallway/fore) -"cH" = ( -/obj/structure/table, -/turf/simulated/floor/airless, -/area/constructionsite/hallway/fore) -"cI" = ( -/obj/structure/table, -/turf/simulated/floor/tiled/white/airless, -/area/constructionsite/hallway/fore) -"cJ" = ( -/obj/structure/table/standard, -/obj/item/screwdriver, -/obj/machinery/light, -/obj/random/maintenance, -/turf/simulated/floor/tiled, -/area/derelict/ship) -"cK" = ( -/obj/structure/table/standard, -/obj/item/device/radio/off, -/turf/simulated/floor/tiled, -/area/derelict/ship) -"cL" = ( -/obj/machinery/fabricator, -/turf/simulated/floor/plating, -/area/derelict/ship) -"cM" = ( -/obj/structure/bookcase, -/obj/item/book/manual/excavation, -/turf/simulated/floor/airless, -/area/constructionsite/hallway/fore) -"cN" = ( -/turf/simulated/floor/tiled/dark/airless, -/area/constructionsite/hallway/fore) -"cO" = ( -/obj/structure/bookcase/manuals/xenoarchaeology, -/turf/simulated/floor/airless{ - icon_state = "dmg2" - }, -/area/constructionsite/hallway/fore) -"cP" = ( -/obj/random/trash, -/turf/simulated/floor/airless, -/area/constructionsite/hallway/fore) -"cQ" = ( -/obj/structure/bookcase, -/obj/item/book/manual/ripley_build_and_repair, -/turf/simulated/floor/airless, -/area/constructionsite/hallway/fore) -"cR" = ( -/obj/structure/noticeboard{ - pixel_x = 32 - }, -/turf/simulated/floor/airless, -/area/constructionsite/bridge) -"cS" = ( -/obj/effect/decal/cleanable/cobweb, -/turf/simulated/floor/airless, -/area/constructionsite/hallway/fore) -"cT" = ( -/obj/structure/window/reinforced, -/obj/structure/cable/yellow{ - d2 = 4; - icon_state = "0-4" - }, -/obj/machinery/power/tracker, -/turf/simulated/floor/plating, -/area/derelict/ship) -"cU" = ( -/obj/structure/window/reinforced, -/obj/structure/cable/yellow{ - d2 = 8; - icon_state = "0-8" - }, -/obj/structure/cable/yellow{ - d2 = 4; - icon_state = "0-4" - }, -/obj/machinery/power/solar, -/turf/simulated/floor/plating, -/area/derelict/ship) -"cV" = ( -/obj/structure/window/reinforced, -/obj/structure/cable/yellow{ - d2 = 8; - icon_state = "0-8" - }, -/obj/structure/cable/yellow{ - d2 = 4; - icon_state = "0-4" - }, -/obj/structure/cable/yellow, -/obj/machinery/power/solar, -/turf/simulated/floor/plating, -/area/derelict/ship) -"cW" = ( -/obj/structure/window/reinforced, -/obj/structure/cable/yellow{ - d2 = 8; - icon_state = "0-8" - }, -/obj/machinery/power/solar, -/turf/simulated/floor/plating, -/area/derelict/ship) -"cX" = ( -/obj/machinery/bookbinder, -/turf/simulated/floor/tiled/dark/airless, -/area/constructionsite/hallway/fore) -"cY" = ( -/obj/structure/filingcabinet/filingcabinet, -/turf/simulated/floor/airless, -/area/constructionsite/hallway/fore) -"cZ" = ( -/obj/machinery/door/airlock/glass/command{ - name = "Bridge" - }, -/obj/machinery/door/blast/regular, -/turf/simulated/floor/tiled/dark/airless, -/area/constructionsite/bridge) -"da" = ( -/obj/structure/closet/secure_closet/freezer/fridge{ - icon_state = "fridgebroken"; - locked = 0 - }, -/obj/random/contraband, -/turf/simulated/floor/airless, -/area/constructionsite/hallway/fore) -"db" = ( -/obj/structure/table/marble, -/turf/simulated/floor/airless, -/area/constructionsite/hallway/fore) -"dc" = ( -/obj/structure/table/marble, -/obj/item/material/kitchen/rollingpin, -/turf/simulated/floor/airless, -/area/constructionsite/hallway/fore) -"dd" = ( -/obj/structure/table, -/turf/simulated/floor/tiled/dark/airless, -/area/constructionsite/hallway/fore) -"de" = ( -/obj/random/closet, -/obj/random/voidhelmet, -/obj/random/maintenance, -/turf/simulated/floor/airless, -/area/constructionsite/hallway/fore) -"df" = ( -/obj/structure/table/rack, -/obj/random/loot, -/turf/simulated/floor/airless, -/area/constructionsite/hallway/fore) -"dg" = ( -/obj/structure/bookcase/manuals/medical, -/obj/item/book/manual/nuclear, -/turf/simulated/floor/airless{ - icon_state = "dmg2" - }, -/area/constructionsite/hallway/fore) -"dh" = ( -/obj/random/trash, -/turf/simulated/floor/airless{ - icon_state = "dmg2" - }, -/area/constructionsite/hallway/fore) -"di" = ( -/obj/structure/table/rack, -/turf/simulated/floor/airless, -/area/constructionsite/hallway/fore) -"dj" = ( -/obj/effect/wallframe_spawn/reinforced, -/turf/simulated/floor/airless, -/area/constructionsite/hallway/fore) -"dk" = ( -/obj/structure/table/marble, -/obj/random/drinkbottle, -/obj/random/drinkbottle, -/turf/simulated/floor/airless, -/area/constructionsite/hallway/fore) -"dl" = ( -/obj/structure/table/marble, -/obj/random/gloves, -/turf/simulated/floor/airless, -/area/constructionsite/hallway/fore) -"dm" = ( -/obj/random/junk, -/turf/simulated/floor/airless, -/area/constructionsite/hallway/fore) -"dn" = ( -/obj/structure/table/marble, -/obj/random/drinkbottle, -/turf/simulated/floor/airless, -/area/constructionsite/hallway/fore) -"do" = ( -/obj/random/maintenance, -/turf/simulated/floor/airless, -/area/constructionsite/hallway/fore) -"dp" = ( -/obj/structure/table/rack, -/obj/random/tool, -/turf/simulated/floor/airless, -/area/constructionsite/hallway/fore) -"dq" = ( -/obj/structure/table/rack, -/obj/random/hat, -/obj/random/junk, -/turf/simulated/floor/airless, -/area/constructionsite/hallway/fore) -"dr" = ( -/obj/random/junk, -/turf/simulated/floor/tiled/white/airless, -/area/constructionsite/hallway/fore) -"ds" = ( -/obj/structure/table/standard, -/turf/simulated/floor/tiled/dark/airless, -/area/constructionsite/hallway/fore) -"dt" = ( -/obj/structure/table/standard, -/obj/random/toy, -/turf/simulated/floor/airless{ - icon_state = "dmg2" - }, -/area/constructionsite/hallway/fore) -"du" = ( -/obj/structure/table/standard, -/turf/simulated/floor/airless, -/area/constructionsite/hallway/fore) -"dv" = ( -/obj/structure/grille, -/turf/simulated/floor/airless, -/area/constructionsite/hallway/fore) -"dw" = ( -/turf/simulated/floor/holofloor/tiled/dark, -/area/constructionsite/hallway/fore) -"dx" = ( -/obj/random/junk, -/obj/structure/table, -/turf/simulated/floor/airless, -/area/constructionsite/hallway/fore) -"dy" = ( -/obj/random/snack, -/turf/simulated/floor/airless, -/area/constructionsite/hallway/fore) -"dz" = ( -/turf/simulated/wall, -/area/constructionsite/hallway/fore) -"dA" = ( -/obj/machinery/door/airlock/hatch, -/turf/simulated/floor/airless, -/area/constructionsite/hallway/fore) -"dB" = ( -/obj/machinery/door/airlock/glass{ - name = "Library" - }, -/turf/simulated/floor/airless, -/area/constructionsite/hallway/fore) -"dC" = ( -/obj/effect/wallframe_spawn/reinforced, -/turf/simulated/floor/airless{ - icon_state = "dmg2" - }, -/area/constructionsite/hallway/fore) -"dD" = ( -/obj/structure/grille/broken, -/turf/simulated/floor/airless{ - icon_state = "dmg2" - }, -/area/constructionsite/hallway/fore) -"dE" = ( -/obj/structure/grille, -/turf/simulated/floor/airless{ - icon_state = "dmg2" - }, -/area/constructionsite/hallway/fore) -"dF" = ( -/obj/structure/sign/warning/secure_area, -/turf/simulated/wall, -/area/constructionsite/hallway/fore) -"dG" = ( -/obj/machinery/door/airlock/glass/command{ - name = "Bridge" - }, -/turf/simulated/floor/tiled/dark/airless, -/area/constructionsite/hallway/fore) -"dH" = ( -/obj/machinery/door/airlock/glass/command{ - name = "Bridge" - }, -/turf/simulated/floor/holofloor/tiled/dark, -/area/constructionsite/hallway/fore) -"dI" = ( -/obj/machinery/door/airlock/glass{ - name = "Kitchen" - }, -/turf/simulated/floor/airless, -/area/constructionsite/hallway/fore) -"dJ" = ( -/obj/structure/table/marble, -/obj/machinery/door/blast/shutters, -/turf/simulated/floor/airless{ - icon_state = "dmg2" - }, -/area/constructionsite/hallway/fore) -"dK" = ( -/obj/structure/table/marble, -/obj/machinery/door/blast/shutters/open, -/turf/simulated/floor/airless, -/area/constructionsite/hallway/fore) -"dL" = ( -/obj/structure/table, -/turf/simulated/floor/airless{ - icon_state = "dmg2" - }, -/area/constructionsite/hallway/fore) -"dM" = ( -/obj/structure/table, -/obj/machinery/door/blast/shutters/open, -/turf/simulated/floor/airless, -/area/constructionsite/hallway/fore) -"dN" = ( -/obj/structure/girder/displaced, -/turf/simulated/floor/airless, -/area/constructionsite/hallway/fore) -"dO" = ( -/turf/simulated/wall, -/area/space) -"dP" = ( -/obj/structure/grille/broken, -/turf/simulated/floor/airless, -/area/constructionsite/hallway/fore) -"dQ" = ( -/obj/random/smokes, -/turf/simulated/floor/tiled/dark/airless, -/area/constructionsite/hallway/fore) -"dR" = ( -/obj/structure/lattice, -/turf/space, -/area/constructionsite/hallway/fore) -"dS" = ( -/obj/random/snack, -/turf/simulated/floor/tiled/dark/airless, -/area/constructionsite/hallway/fore) -"dT" = ( -/obj/random/trash, -/turf/simulated/floor/tiled/dark/airless, -/area/constructionsite/hallway/fore) -"dU" = ( -/obj/structure/grille/broken, -/obj/structure/wall_frame, -/turf/simulated/floor/tiled/dark/airless, -/area/constructionsite/hallway/fore) -"dV" = ( -/obj/structure/lattice, -/obj/random/junk, -/turf/space, -/area/space) -"dW" = ( -/obj/structure/table/rack, -/obj/random/maintenance, -/turf/simulated/floor/airless, -/area/constructionsite/hallway/fore) -"dX" = ( -/obj/effect/shuttle_landmark/derelict/nav2, -/turf/space, -/area/space) -"dY" = ( -/turf/simulated/wall, -/area/constructionsite/storage) -"dZ" = ( -/obj/structure/girder/displaced, -/turf/simulated/floor/airless, -/area/constructionsite/storage) -"ea" = ( -/obj/structure/extinguisher_cabinet{ - icon_state = "extinguisher_empty"; - pixel_x = 30 - }, -/turf/simulated/floor/airless, -/area/constructionsite/hallway/fore) -"eb" = ( -/turf/simulated/wall, -/area/constructionsite/teleporter) -"ec" = ( -/obj/machinery/mech_recharger, -/turf/simulated/floor/airless, -/area/constructionsite/storage) -"ed" = ( -/obj/machinery/robotics_fabricator, -/turf/simulated/floor/airless, -/area/constructionsite/storage) -"ee" = ( -/obj/structure/table/standard, -/turf/simulated/floor/airless, -/area/constructionsite/storage) -"ef" = ( -/obj/structure/table/standard, -/obj/random/material, -/obj/random/material, -/obj/random/coin, -/turf/simulated/floor/airless, -/area/constructionsite/storage) -"eg" = ( -/obj/structure/table, -/obj/machinery/cell_charger, -/turf/simulated/floor/airless{ - icon_state = "dmg2" - }, -/area/constructionsite/storage) -"eh" = ( -/turf/simulated/floor/airless, -/area/constructionsite/storage) -"ei" = ( -/obj/structure/table, -/obj/random/medical, -/turf/simulated/floor/airless, -/area/constructionsite/storage) -"ej" = ( -/obj/machinery/shieldgen, -/obj/structure/window/basic{ - dir = 8 - }, -/obj/structure/window/basic{ - dir = 1 - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled/dark, -/area/constructionsite/teleporter) -"ek" = ( -/obj/machinery/shieldgen, -/obj/structure/window/basic{ - dir = 4 - }, -/obj/structure/window/basic{ - dir = 1 - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled/dark, -/area/constructionsite/teleporter) -"el" = ( -/obj/machinery/portable_atmospherics/canister/air, -/obj/structure/window/basic{ - dir = 8 - }, -/obj/structure/window/basic{ - dir = 1 - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled/dark, -/area/constructionsite/teleporter) -"em" = ( -/obj/machinery/portable_atmospherics/canister/air, -/obj/structure/window/basic{ - dir = 4 - }, -/obj/structure/window/basic{ - dir = 1 - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled/dark, -/area/constructionsite/teleporter) -"en" = ( -/obj/structure/table/reinforced, -/obj/machinery/light{ - dir = 1; - icon_state = "tube1" - }, -/obj/item/stack/material/steel{ - amount = 50 - }, -/obj/item/stack/material/steel{ - amount = 50 - }, -/obj/item/stack/material/steel{ - amount = 50 - }, -/obj/item/stack/material/steel{ - amount = 50 - }, -/obj/item/stack/material/steel{ - amount = 50 - }, -/obj/random/tech_supply, -/obj/random/maintenance, -/turf/simulated/floor/tiled/dark, -/area/constructionsite/teleporter) -"ep" = ( -/obj/structure/table/reinforced, -/obj/item/stack/material/plasteel{ - amount = 50 - }, -/obj/random/tech_supply, -/obj/random/maintenance, -/turf/simulated/floor/tiled/dark, -/area/constructionsite/teleporter) -"eq" = ( -/obj/structure/table/reinforced, -/obj/random/powercell, -/obj/random/tech_supply, -/obj/random/tech_supply, -/obj/random/maintenance, -/turf/simulated/floor/tiled/dark, -/area/constructionsite/teleporter) -"er" = ( -/obj/structure/table/rack, -/obj/random/maintenance, -/obj/random/toolbox, -/turf/simulated/floor/airless, -/area/constructionsite/storage) -"es" = ( -/turf/simulated/floor/airless{ - icon_state = "dmg2" - }, -/area/constructionsite/storage) -"et" = ( -/obj/structure/bed/chair/office/light{ - dir = 1 - }, -/turf/simulated/floor/tiled/dark/airless, -/area/constructionsite/storage) -"eu" = ( -/obj/machinery/optable{ - name = "Robotics Operating Table" - }, -/turf/simulated/floor/airless, -/area/constructionsite/storage) -"ev" = ( -/obj/random/closet, -/obj/random/maintenance, -/turf/simulated/floor/airless, -/area/constructionsite/maintenance) -"ew" = ( -/obj/machinery/shieldgen, -/obj/structure/window/basic{ - dir = 8 - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled/dark, -/area/constructionsite/teleporter) -"ex" = ( -/obj/machinery/shieldgen, -/obj/structure/window/basic{ - dir = 4 - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled/dark, -/area/constructionsite/teleporter) -"ey" = ( -/obj/machinery/portable_atmospherics/canister/air, -/obj/structure/window/basic{ - dir = 8 - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled/dark, -/area/constructionsite/teleporter) -"ez" = ( -/obj/machinery/portable_atmospherics/canister/air, -/obj/structure/window/basic{ - dir = 4 - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled/dark, -/area/constructionsite/teleporter) -"eA" = ( -/turf/simulated/floor/tiled/dark, -/area/constructionsite/teleporter) -"eB" = ( -/obj/structure/table/reinforced, -/obj/item/clothing/shoes/magboots, -/obj/item/clothing/glasses/meson, -/obj/item/tank/oxygen, -/obj/random/tech_supply, -/obj/random/tech_supply, -/obj/random/tech_supply, -/obj/random/voidsuit, -/obj/random/voidhelmet, -/obj/random/maintenance, -/turf/simulated/floor/tiled/dark, -/area/constructionsite/teleporter) -"eC" = ( -/obj/structure/table/reinforced, -/obj/item/stack/material/phoron{ - amount = 10 - }, -/obj/random/powercell, -/obj/random/tech_supply, -/obj/random/tech_supply, -/obj/random/maintenance, -/turf/simulated/floor/tiled/dark, -/area/constructionsite/teleporter) -"eD" = ( -/obj/effect/wallframe_spawn/reinforced, -/turf/simulated/floor/airless, -/area/constructionsite/storage) -"eE" = ( -/obj/machinery/door/airlock/glass/science{ - name = "Robotics" - }, -/turf/simulated/floor/airless{ - icon_state = "dmg2" - }, -/area/constructionsite/storage) -"eF" = ( -/obj/structure/grille/broken, -/obj/structure/wall_frame, -/turf/simulated/floor/airless, -/area/constructionsite/storage) -"eG" = ( -/obj/structure/sign/warning/science, -/turf/simulated/wall, -/area/constructionsite/hallway/fore) -"eH" = ( -/obj/machinery/access_button/airlock_exterior{ - master_tag = "constructionsite_airlock"; - pixel_x = 23; - pixel_y = -10; - req_access = newlist() - }, -/turf/simulated/floor/tiled/dark/airless, -/area/constructionsite/hallway/fore) -"eI" = ( -/obj/machinery/access_button/airlock_interior{ - master_tag = "constructionsite_airlock"; - pixel_x = -25; - pixel_y = -10; - req_access = newlist() - }, -/turf/simulated/floor/tiled/dark, -/area/constructionsite/teleporter) -"eJ" = ( -/turf/simulated/floor/tiled, -/area/constructionsite/teleporter) -"eK" = ( -/obj/structure/cable/blue{ - d2 = 2; - icon_state = "0-2" - }, -/obj/machinery/power/port_gen/pacman, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled/dark, -/area/constructionsite/teleporter) -"eL" = ( -/obj/structure/skele_stand, -/turf/simulated/floor/airless, -/area/constructionsite/storage) -"eM" = ( -/obj/random/maintenance, -/turf/simulated/floor/airless, -/area/constructionsite/storage) -"eN" = ( -/obj/random/trash, -/turf/simulated/floor/airless, -/area/constructionsite/storage) -"eO" = ( -/turf/simulated/floor/tiled/dark/airless, -/area/constructionsite/storage) -"eP" = ( -/obj/machinery/door/airlock/glass/science{ - name = "Research" - }, -/obj/machinery/door/blast/shutters{ - dir = 8 - }, -/turf/simulated/floor/airless, -/area/constructionsite/storage) -"eQ" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 4; - icon_state = "warning" - }, -/turf/simulated/floor/airless, -/area/constructionsite/hallway/fore) -"eR" = ( -/obj/machinery/door/airlock/external{ - frequency = 1379; - icon_state = "door_locked"; - id_tag = "constructionsite_inner"; - locked = 1 - }, -/turf/simulated/floor, -/area/constructionsite/teleporter) -"eS" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 4; - icon_state = "warning" - }, -/turf/simulated/floor/tiled/dark/airless, -/area/constructionsite/hallway/fore) -"eU" = ( -/obj/effect/wallframe_spawn/reinforced, -/turf/simulated/floor, -/area/constructionsite/teleporter) -"eV" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 8; - icon_state = "warning" - }, -/turf/simulated/floor/tiled, -/area/constructionsite/teleporter) -"eW" = ( -/obj/structure/cable/blue, -/obj/machinery/power/port_gen/pacman, -/obj/machinery/power/terminal, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled/dark, -/area/constructionsite/teleporter) -"eX" = ( -/obj/machinery/door/airlock/hatch, -/turf/simulated/floor/airless, -/area/constructionsite/storage) -"eY" = ( -/obj/random/hostile, -/turf/simulated/floor/airless, -/area/constructionsite/storage) -"eZ" = ( -/obj/machinery/door/airlock/glass/science{ - name = "Research" - }, -/obj/machinery/door/blast/shutters/open{ - dir = 8 - }, -/turf/simulated/floor/airless, -/area/constructionsite/hallway/fore) -"fa" = ( -/obj/machinery/light/small, -/obj/effect/floor_decal/industrial/warning{ - dir = 10; - icon_state = "warning" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/blue{ - dir = 5 - }, -/turf/simulated/floor, -/area/constructionsite/teleporter) -"fb" = ( -/obj/machinery/airlock_sensor{ - id_tag = "constructionsite_sensor"; - pixel_y = -25 - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 6; - icon_state = "warning" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/blue, -/turf/simulated/floor, -/area/constructionsite/teleporter) -"fc" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/blue{ - dir = 4 - }, -/obj/machinery/door/airlock/external{ - frequency = 1379; - icon_state = "door_locked"; - id_tag = "constructionsite_inner"; - locked = 1 - }, -/turf/simulated/floor, -/area/constructionsite/teleporter) -"fd" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/blue{ - dir = 4 - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 8; - icon_state = "warning" - }, -/turf/simulated/floor/tiled, -/area/constructionsite/teleporter) -"fe" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/blue{ - dir = 10 - }, -/turf/simulated/floor/tiled, -/area/constructionsite/teleporter) -"ff" = ( -/obj/structure/cable/blue{ - d2 = 4; - icon_state = "0-4" - }, -/turf/simulated/floor/tiled, -/area/constructionsite/teleporter) -"fg" = ( -/obj/structure/cable/blue{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/turf/simulated/floor/tiled, -/area/constructionsite/teleporter) -"fh" = ( -/obj/machinery/power/smes/batteryrack, -/obj/structure/cable/blue{ - d2 = 2; - icon_state = "0-2" - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled/dark, -/area/constructionsite/teleporter) -"fi" = ( -/obj/effect/shuttle_landmark/derelict/nav1, -/turf/space, -/area/space) -"fj" = ( -/obj/structure/grille, -/obj/structure/wall_frame, -/turf/simulated/floor/airless, -/area/constructionsite/storage) -"fk" = ( -/obj/structure/grille/broken, -/obj/structure/wall_frame, -/turf/simulated/floor/airless{ - icon_state = "dmg2" - }, -/area/constructionsite/storage) -"fl" = ( -/obj/machinery/door/airlock/glass/science{ - name = "Research" - }, -/turf/simulated/floor/airless{ - icon_state = "dmg2" - }, -/area/constructionsite/storage) -"fm" = ( -/obj/effect/wallframe_spawn/reinforced, -/turf/simulated/floor/tiled/dark/airless, -/area/constructionsite/storage) -"fn" = ( -/obj/structure/window/basic{ - dir = 1 - }, -/obj/machinery/portable_atmospherics/canister/air/airlock, -/obj/machinery/atmospherics/portables_connector{ - dir = 4 - }, -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 4; - icon_state = "warningcorner" - }, -/obj/structure/sign/warning/vacuum{ - pixel_x = -32 - }, -/turf/simulated/floor/tiled/dark, -/area/constructionsite/teleporter) -"fo" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/blue{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/constructionsite/teleporter) -"fp" = ( -/obj/structure/cable/blue{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/turf/simulated/floor/tiled, -/area/constructionsite/teleporter) -"fq" = ( -/obj/structure/cable/blue{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled, -/area/constructionsite/teleporter) -"fr" = ( -/obj/structure/cable/blue{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/dark, -/area/constructionsite/teleporter) -"fs" = ( -/obj/structure/cable/blue{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/cable/blue{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/machinery/fabricator, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled/dark, -/area/constructionsite/teleporter) -"ft" = ( -/obj/random/junk, -/turf/simulated/floor/airless, -/area/constructionsite/storage) -"fu" = ( -/obj/structure/window/basic, -/obj/machinery/portable_atmospherics/canister/air/airlock, -/obj/machinery/atmospherics/portables_connector{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark, -/area/constructionsite/teleporter) -"fv" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/blue{ - dir = 9 - }, -/turf/simulated/floor/tiled/dark, -/area/constructionsite/teleporter) -"fw" = ( -/obj/structure/cable/blue, -/obj/machinery/alarm{ - dir = 8; - pixel_x = 24 - }, -/obj/machinery/power/apc/high/inactive{ - name = "south bump"; - pixel_y = -24 - }, -/turf/simulated/floor/tiled/dark, -/area/constructionsite/teleporter) -"fx" = ( -/obj/machinery/portable_atmospherics/canister/nitrogen/prechilled, -/turf/simulated/floor/airless, -/area/constructionsite/storage) -"fy" = ( -/obj/machinery/r_n_d/circuit_imprinter, -/turf/simulated/floor/tiled/dark/airless, -/area/constructionsite/storage) -"fz" = ( -/obj/machinery/r_n_d/destructive_analyzer, -/turf/simulated/floor/airless, -/area/constructionsite/storage) -"fA" = ( -/obj/machinery/r_n_d/protolathe{ - icon_state = "protolathe_t"; - stat = 1 - }, -/turf/simulated/floor/airless, -/area/constructionsite/storage) -"fB" = ( -/obj/machinery/r_n_d/server/centcom, -/turf/simulated/floor/airless, -/area/constructionsite/storage) -"fC" = ( -/obj/machinery/pipedispenser, -/turf/simulated/floor/tiled/dark, -/area/constructionsite/teleporter) -"fD" = ( -/obj/machinery/pipedispenser/disposal, -/turf/simulated/floor/tiled/dark, -/area/constructionsite/teleporter) -"fE" = ( -/obj/structure/reagent_dispensers/watertank, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled/dark, -/area/constructionsite/teleporter) -"fF" = ( -/obj/structure/reagent_dispensers/fueltank, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled/dark, -/area/constructionsite/teleporter) -"fG" = ( -/obj/machinery/light, -/obj/structure/closet/crate/solar, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/random/loot, -/turf/simulated/floor/tiled/dark, -/area/constructionsite/teleporter) -"fH" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 9; - icon_state = "warning" - }, -/obj/machinery/constructable_frame/computerframe, -/turf/simulated/floor/tiled/dark, -/area/constructionsite/teleporter) -"fI" = ( -/obj/machinery/tele_projector, -/obj/effect/floor_decal/industrial/warning{ - dir = 1; - icon_state = "warning" - }, -/turf/simulated/floor/tiled/dark, -/area/constructionsite/teleporter) -"fJ" = ( -/obj/machinery/tele_pad, -/obj/effect/floor_decal/industrial/warning{ - dir = 1; - icon_state = "warning" - }, -/turf/simulated/floor/tiled/dark, -/area/constructionsite/teleporter) -"fK" = ( -/obj/structure/girder/displaced, -/turf/simulated/floor/airless, -/area/constructionsite/maintenance) -"fL" = ( -/turf/simulated/wall, -/area/constructionsite/solar) -"fM" = ( -/obj/random/closet, -/obj/random/material, -/obj/random/contraband, -/turf/simulated/floor/airless, -/area/constructionsite/hallway/fore) -"fN" = ( -/turf/simulated/floor/airless, -/area/constructionsite/solar) -"fO" = ( -/obj/structure/lattice, -/turf/space, -/area/constructionsite/solar) -"fP" = ( -/turf/simulated/floor/tiled/dark/airless, -/area/constructionsite/solar) -"fQ" = ( -/turf/simulated/floor/tiled/dark/airless, -/area/constructionsite/maintenance) -"fR" = ( -/obj/structure/extinguisher_cabinet{ - pixel_y = 30 - }, -/turf/simulated/floor/airless, -/area/constructionsite/hallway/fore) -"fS" = ( -/obj/random/junk, -/turf/simulated/floor/tiled/dark/airless, -/area/constructionsite/hallway/fore) -"fT" = ( -/obj/effect/overmap/visitable/sector/derelict, -/turf/simulated/floor/airless, -/area/constructionsite/solar) -"fU" = ( -/turf/space, -/area/constructionsite/solar) -"fV" = ( -/turf/simulated/floor/airless{ - icon_state = "dmg2" - }, -/area/constructionsite/solar) -"fW" = ( -/obj/random/trash, -/turf/simulated/floor/airless, -/area/constructionsite/solar) -"fX" = ( -/obj/structure/grille, -/obj/structure/wall_frame, -/turf/simulated/floor/tiled/dark/airless, -/area/constructionsite/hallway/fore) -"fY" = ( -/obj/structure/grille, -/obj/structure/wall_frame, -/turf/simulated/floor/airless, -/area/constructionsite/solar) -"fZ" = ( -/obj/structure/grille/broken, -/obj/structure/wall_frame, -/turf/simulated/floor/airless, -/area/constructionsite/solar) -"ga" = ( -/obj/random/junk, -/turf/simulated/floor/airless, -/area/constructionsite/maintenance) -"gb" = ( -/obj/effect/shuttle_landmark/derelict/nav3, -/turf/space, -/area/space) -"gc" = ( -/obj/random/firstaid, -/turf/simulated/floor/airless, -/area/constructionsite/maintenance) -"gd" = ( -/obj/structure/lattice, -/obj/random/maintenance, -/turf/space, -/area/constructionsite/solar) -"ge" = ( -/obj/structure/table/rack, -/obj/random/plushie, -/obj/random/loot, -/turf/simulated/floor/airless, -/area/constructionsite/maintenance) -"gf" = ( -/obj/machinery/door/airlock/highsecurity{ - icon_state = "door_closed"; - name = "AI Upload Access" - }, -/turf/simulated/floor/bluegrid/airless, -/area/constructionsite/hallway/fore) -"gg" = ( -/turf/simulated/wall, -/area/constructionsite/ai) -"gh" = ( -/turf/simulated/floor/tiled/dark/airless, -/area/constructionsite/ai) -"gi" = ( -/turf/simulated/floor/bluegrid/airless, -/area/constructionsite/ai) -"gj" = ( -/turf/simulated/floor/airless, -/area/space) -"gk" = ( -/turf/simulated/floor/airless{ - icon_state = "dmg2" - }, -/area/space) -"gl" = ( -/obj/random/trash, -/turf/simulated/floor/airless, -/area/space) -"gm" = ( -/obj/structure/sign/warning/lethal_turrets, -/turf/simulated/wall, -/area/constructionsite/ai) -"gn" = ( -/obj/machinery/door/airlock/highsecurity{ - icon_state = "door_closed"; - name = "AI Upload" - }, -/turf/simulated/floor/bluegrid/airless, -/area/constructionsite/ai) -"go" = ( -/obj/random/tool, -/turf/simulated/floor/airless, -/area/constructionsite/hallway/fore) -"gp" = ( -/obj/machinery/porta_turret_construct, -/turf/simulated/floor/tiled/dark/airless, -/area/constructionsite/ai) -"gq" = ( -/obj/effect/decal/cleanable/blood/oil, -/turf/simulated/floor/tiled/dark/airless, -/area/constructionsite/ai) -"gr" = ( -/turf/simulated/floor/tiled/dark/airless, -/area/space) -"gs" = ( -/obj/structure/table/rack, -/obj/random/maintenance, -/obj/random/maintenance, -/turf/simulated/floor/airless, -/area/constructionsite/maintenance) -"gt" = ( -/obj/structure/table/rack, -/obj/random/maintenance, -/turf/simulated/floor/airless, -/area/constructionsite/maintenance) -"gu" = ( -/obj/random/loot, -/turf/simulated/floor/tiled/dark/airless, -/area/constructionsite/ai) -"gv" = ( -/obj/random/trash, -/turf/simulated/floor/bluegrid/airless, -/area/constructionsite/ai) -"gw" = ( -/obj/machinery/drone_fabricator/derelict, -/turf/simulated/floor/tiled/dark/airless, -/area/constructionsite/ai) -"gx" = ( -/obj/structure/cable/blue{ - d2 = 2; - icon_state = "0-2" - }, -/obj/machinery/power/apc/high/inactive{ - dir = 1; - name = "north bump"; - pixel_y = 24 - }, -/turf/simulated/floor/tiled/dark/airless, -/area/constructionsite/ai) -"gy" = ( -/obj/machinery/computer/drone_control, -/turf/simulated/floor/tiled/dark/airless, -/area/constructionsite/ai) -"gz" = ( -/obj/random/hostile, -/turf/simulated/floor/airless, -/area/space) -"gA" = ( -/obj/structure/lattice, -/turf/space, -/area/constructionsite/maintenance) -"gB" = ( -/obj/machinery/door/airlock/highsecurity{ - name = "Messaging Server" - }, -/turf/simulated/floor/airless, -/area/constructionsite/hallway/fore) -"gC" = ( -/obj/machinery/door/airlock/highsecurity{ - name = "Messaging Server" - }, -/turf/simulated/floor/airless, -/area/constructionsite/ai) -"gD" = ( -/obj/structure/showcase{ - desc = "A computer core for an artificial intelligence. It seems to be broken."; - icon = 'icons/mob/AI.dmi'; - icon_state = "4"; - name = "Deactivated AI Core" - }, -/turf/simulated/floor/bluegrid/airless, -/area/constructionsite/ai) -"gE" = ( -/obj/machinery/door/airlock/highsecurity{ - name = "Cyborg Station" - }, -/turf/simulated/floor/bluegrid/airless, -/area/constructionsite/ai) -"gF" = ( -/obj/structure/cable/blue{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/turf/simulated/floor/bluegrid/airless, -/area/constructionsite/ai) -"gG" = ( -/obj/effect/decal/cleanable/blood/oil, -/turf/simulated/floor/bluegrid/airless, -/area/constructionsite/ai) -"gH" = ( -/obj/machinery/door/airlock/highsecurity{ - name = "Cyborg Station" - }, -/turf/simulated/floor/bluegrid/airless, -/area/constructionsite/hallway/fore) -"gI" = ( -/obj/random/tool, -/turf/simulated/floor/airless, -/area/space) -"gJ" = ( -/obj/random/material, -/turf/simulated/floor/airless, -/area/space) -"gK" = ( -/obj/machinery/recharge_station, -/turf/simulated/floor/tiled/dark/airless, -/area/constructionsite/ai) -"gL" = ( -/obj/structure/lattice, -/obj/structure/extinguisher_cabinet{ - icon_state = "extinguisher_empty"; - pixel_x = -30 - }, -/turf/space, -/area/constructionsite/hallway/fore) -"gM" = ( -/obj/machinery/porta_turret/stationary, -/turf/simulated/floor/tiled/dark/airless, -/area/constructionsite/ai) -"gN" = ( -/obj/random/junk, -/turf/simulated/floor/tiled/dark/airless, -/area/constructionsite/ai) -"gO" = ( -/turf/simulated/wall, -/area/constructionsite/hallway/aft) -"gP" = ( -/turf/simulated/floor/airless{ - icon_state = "dmg2" - }, -/area/constructionsite/hallway/aft) -"gQ" = ( -/turf/simulated/floor/airless, -/area/constructionsite/hallway/aft) -"gR" = ( -/turf/simulated/floor/tiled/dark/airless, -/area/constructionsite/hallway/aft) -"gS" = ( -/obj/effect/wallframe_spawn/reinforced, -/turf/simulated/floor/airless, -/area/constructionsite/hallway/aft) -"gT" = ( -/obj/structure/lattice, -/turf/space, -/area/constructionsite/hallway/aft) -"gU" = ( -/obj/random/trash, -/turf/simulated/floor/airless, -/area/constructionsite/hallway/aft) -"gV" = ( -/obj/structure/grille, -/turf/simulated/floor/airless, -/area/constructionsite/hallway/aft) -"gW" = ( -/obj/structure/grille/broken, -/obj/structure/wall_frame, -/turf/simulated/floor/airless, -/area/constructionsite/hallway/aft) -"gX" = ( -/obj/random/junk, -/turf/simulated/floor/airless, -/area/constructionsite/hallway/aft) -"gY" = ( -/obj/machinery/door/airlock/hatch, -/turf/simulated/floor/airless, -/area/constructionsite/hallway/aft) -"gZ" = ( -/obj/machinery/door/airlock/highsecurity{ - icon_state = "door_closed"; - name = "AI Upload Access" - }, -/turf/simulated/floor/bluegrid/airless, -/area/constructionsite/hallway/aft) -"ha" = ( -/obj/structure/table/rack, -/obj/random/maintenance, -/turf/simulated/floor/airless, -/area/constructionsite/hallway/aft) -"hb" = ( -/obj/effect/floor_decal/plaque{ - desc = "To commemorate the beginning of the Eternity Project, a station that will ferry us through the stars forever without fail."; - name = "Eternity Project Dedication Plaque" - }, -/turf/simulated/floor/airless, -/area/constructionsite/hallway/aft) -"hc" = ( -/obj/structure/lattice, -/obj/random/material, -/turf/space, -/area/space) -"hd" = ( -/obj/structure/closet/firecloset{ - icon_state = "fireclosetopen"; - opened = 1 - }, -/obj/random/plushie/large, -/turf/simulated/floor/airless, -/area/constructionsite/maintenance) -"he" = ( -/obj/random/trash, -/turf/simulated/floor/airless{ - icon_state = "dmg2" - }, -/area/constructionsite/hallway/aft) -"hf" = ( -/obj/machinery/door/airlock/multi_tile/glass{ - name = "Emergency Entrance" - }, -/turf/simulated/floor/airless, -/area/constructionsite/hallway/aft) -"hg" = ( -/obj/effect/wallframe_spawn/reinforced, -/turf/simulated/floor/airless{ - icon_state = "dmg2" - }, -/area/constructionsite/hallway/aft) -"hh" = ( -/obj/structure/grille/broken, -/obj/structure/wall_frame, -/turf/simulated/floor/airless{ - icon_state = "dmg2" - }, -/area/constructionsite/hallway/aft) -"hi" = ( -/obj/effect/shuttle_landmark/derelict/nav4, -/turf/space, -/area/space) -"hj" = ( -/obj/structure/door_assembly, -/turf/simulated/floor/airless, -/area/constructionsite/hallway/aft) -"hk" = ( -/obj/machinery/mech_recharger, -/turf/simulated/floor/tiled/white/airless, -/area/constructionsite/medical) -"hl" = ( -/turf/simulated/floor/tiled/white/airless, -/area/constructionsite/medical) -"hm" = ( -/obj/structure/table/standard, -/obj/random/firstaid, -/obj/random/firstaid, -/obj/effect/floor_decal/corner/green{ - dir = 4 - }, -/turf/simulated/floor/tiled/white/airless, -/area/constructionsite/medical) -"hn" = ( -/turf/simulated/wall, -/area/constructionsite/medical) -"ho" = ( -/obj/machinery/sleeper, -/turf/simulated/floor/tiled/white/airless, -/area/constructionsite/medical) -"hp" = ( -/obj/structure/iv_drip, -/turf/simulated/floor/tiled/white/airless, -/area/constructionsite/medical) -"hq" = ( -/obj/random/trash, -/turf/simulated/floor/tiled/white/airless, -/area/constructionsite/medical) -"hr" = ( -/turf/simulated/floor/airless, -/area/constructionsite/atmospherics) -"hs" = ( -/turf/simulated/floor/tiled/dark/airless, -/area/constructionsite/atmospherics) -"ht" = ( -/turf/simulated/floor/airless{ - icon_state = "dmg2" - }, -/area/constructionsite/atmospherics) -"hu" = ( -/obj/machinery/light_construct{ - dir = 1 - }, -/turf/simulated/floor/airless, -/area/constructionsite/medical) -"hv" = ( -/turf/simulated/floor/airless, -/area/constructionsite/medical) -"hw" = ( -/obj/structure/table/standard, -/turf/simulated/floor/tiled/white/airless, -/area/constructionsite/medical) -"hx" = ( -/obj/random/junk, -/obj/effect/floor_decal/corner/green{ - dir = 9 - }, -/turf/simulated/floor/tiled/white/airless, -/area/constructionsite/medical) -"hy" = ( -/obj/effect/floor_decal/corner/green, -/turf/simulated/floor/tiled/white/airless, -/area/constructionsite/medical) -"hz" = ( -/obj/item/reagent_containers/ivbag, -/obj/item/reagent_containers/ivbag, -/obj/item/reagent_containers/ivbag/blood/OMinus, -/obj/structure/closet/medical_wall{ - name = "Blood Closet" - }, -/turf/simulated/wall, -/area/constructionsite/hallway/aft) -"hA" = ( -/obj/structure/girder, -/turf/simulated/floor/airless, -/area/constructionsite/hallway/aft) -"hB" = ( -/obj/structure/table, -/turf/simulated/floor/airless, -/area/constructionsite/medical) -"hC" = ( -/obj/effect/wallframe_spawn/reinforced, -/turf/simulated/floor/airless, -/area/constructionsite/medical) -"hD" = ( -/obj/machinery/door/airlock/glass/medical{ - name = "Medbay" - }, -/turf/simulated/floor/airless, -/area/constructionsite/medical) -"hE" = ( -/obj/structure/door_assembly{ - name = "Medbay" - }, -/turf/simulated/floor/airless, -/area/constructionsite/medical) -"hF" = ( -/obj/random/trash, -/turf/simulated/floor/airless, -/area/constructionsite/atmospherics) -"hG" = ( -/obj/random/junk, -/turf/simulated/floor/airless, -/area/constructionsite/atmospherics) -"hH" = ( -/obj/random/trash, -/turf/simulated/floor/airless, -/area/constructionsite/medical) -"hI" = ( -/obj/structure/table/standard, -/obj/random/firstaid, -/turf/simulated/floor/airless, -/area/constructionsite/medical) -"hJ" = ( -/obj/structure/sign/directions/examroom, -/turf/simulated/wall, -/area/constructionsite/medical) -"hK" = ( -/obj/effect/floor_decal/corner/green{ - dir = 9 - }, -/turf/simulated/floor/tiled/white/airless, -/area/constructionsite/medical) -"hL" = ( -/obj/machinery/disposal, -/turf/simulated/floor/airless, -/area/constructionsite/medical) -"hM" = ( -/obj/structure/table, -/obj/random/medical, -/turf/simulated/floor/tiled/white/airless, -/area/constructionsite/medical) -"hN" = ( -/obj/structure/table, -/turf/simulated/floor/tiled/white/airless, -/area/constructionsite/medical) -"hO" = ( -/obj/structure/fireaxecabinet{ - pixel_x = 32 - }, -/turf/simulated/floor/airless, -/area/constructionsite/atmospherics) -"hP" = ( -/turf/simulated/wall, -/area/constructionsite/atmospherics) -"hQ" = ( -/obj/structure/girder, -/turf/space, -/area/constructionsite/hallway/aft) -"hR" = ( -/obj/item/roller, -/obj/item/roller, -/turf/simulated/floor/airless, -/area/constructionsite/medical) -"hS" = ( -/obj/structure/closet/medical_wall/filled{ - pixel_x = 32 - }, -/turf/simulated/floor/airless, -/area/constructionsite/medical) -"hT" = ( -/obj/structure/girder/displaced, -/turf/simulated/floor/airless, -/area/constructionsite/hallway/aft) -"hU" = ( -/obj/structure/closet/firecloset, -/turf/simulated/floor/airless, -/area/constructionsite/atmospherics) -"hV" = ( -/obj/machinery/atmospherics/pipe/simple/visible, -/turf/simulated/floor/tiled/dark/airless, -/area/constructionsite/atmospherics) -"hW" = ( -/obj/structure/lattice, -/turf/space, -/area/constructionsite/medical) -"hX" = ( -/obj/random/medical/lite, -/turf/simulated/floor/airless, -/area/constructionsite/medical) -"hY" = ( -/obj/random/maintenance, -/turf/simulated/floor/airless, -/area/constructionsite/medical) -"hZ" = ( -/obj/item/roller, -/turf/simulated/floor/airless, -/area/constructionsite/medical) -"ia" = ( -/obj/random/closet, -/turf/simulated/floor/airless, -/area/constructionsite/medical) -"ib" = ( -/turf/space, -/area/constructionsite/medical) -"ic" = ( -/obj/structure/mech_wreckage/powerloader, -/turf/simulated/floor/airless, -/area/constructionsite/atmospherics) -"id" = ( -/obj/structure/closet/secure_closet/atmos_personal{ - icon_state = "secureatmbroken"; - locked = 0 - }, -/obj/random/voidsuit, -/obj/random/voidhelmet, -/turf/simulated/floor/airless, -/area/constructionsite/atmospherics) -"ie" = ( -/obj/machinery/atmospherics/pipe/simple/visible, -/turf/simulated/floor/airless, -/area/constructionsite/atmospherics) -"if" = ( -/obj/structure/iv_drip, -/turf/simulated/floor/airless, -/area/constructionsite/medical) -"ig" = ( -/obj/random/snack, -/turf/simulated/floor/airless, -/area/constructionsite/medical) -"ih" = ( -/obj/structure/lattice, -/obj/random/junk, -/turf/space, -/area/constructionsite/medical) -"ii" = ( -/obj/machinery/door/airlock/glass/medical{ - name = "Medbay Storage" - }, -/turf/simulated/wall, -/area/constructionsite/hallway/aft) -"ij" = ( -/obj/machinery/door/airlock/glass/atmos{ - name = "Atmospherics" - }, -/turf/simulated/floor/airless, -/area/constructionsite/hallway/aft) -"ik" = ( -/obj/random/firstaid, -/turf/simulated/floor/airless, -/area/constructionsite/medical) -"il" = ( -/obj/item/storage/box/freezer, -/turf/simulated/floor/airless, -/area/constructionsite/medical) -"im" = ( -/obj/random/closet, -/obj/random/masks, -/obj/random/loot, -/turf/simulated/floor/airless, -/area/constructionsite/atmospherics) -"in" = ( -/obj/random/tool, -/turf/simulated/floor/tiled/dark/airless, -/area/constructionsite/atmospherics) -"io" = ( -/obj/random/junk, -/turf/simulated/floor/airless, -/area/constructionsite/medical) -"ip" = ( -/obj/machinery/light{ - dir = 4; - icon_state = "tube1" - }, -/turf/simulated/floor/airless, -/area/constructionsite/medical) -"iq" = ( -/obj/random/ammo, -/turf/simulated/floor/airless, -/area/constructionsite/atmospherics) -"ir" = ( -/obj/structure/lattice, -/obj/random/medical/lite, -/turf/space, -/area/constructionsite/medical) -"it" = ( -/obj/effect/shuttle_landmark/derelict/nav5, -/turf/space, -/area/space) -"iu" = ( -/obj/machinery/atmospherics/pipe/simple/visible{ - dir = 4 - }, -/turf/simulated/floor/airless, -/area/constructionsite/atmospherics) -"iv" = ( -/turf/space, -/area/constructionsite/hallway/aft) -"iw" = ( -/obj/structure/lattice, -/obj/item/roller, -/turf/space, -/area/constructionsite/medical) -"ix" = ( -/obj/structure/closet/firecloset{ - icon_state = "fireclosetopen"; - opened = 1 - }, -/obj/random/junk, -/obj/random/masks, -/obj/random/loot, -/turf/simulated/floor/airless, -/area/constructionsite/hallway/aft) -"iy" = ( -/obj/machinery/computer/air_control{ - input_tag = "d_air_in"; - name = "Mixed Air Supply Control"; - output_tag = "d_air_out"; - pressure_setting = 2000; - sensor_name = "Air Supply Tank"; - sensor_tag = "d_air_sensor" - }, -/obj/machinery/atmospherics/pipe/simple/visible{ - dir = 4 - }, -/turf/simulated/floor/airless, -/area/constructionsite/atmospherics) -"iz" = ( -/obj/structure/grille, -/obj/structure/window/reinforced{ - dir = 8 - }, -/obj/structure/window/reinforced{ - dir = 4 - }, -/obj/structure/window/reinforced, -/obj/machinery/door/firedoor, -/obj/structure/window/reinforced{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/visible{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/constructionsite/atmospherics) -"iA" = ( -/obj/machinery/atmospherics/unary/vent_pump/tank{ - dir = 8; - external_pressure_bound = 0; - external_pressure_bound_default = 0; - icon_state = "map_vent_in"; - id_tag = "d_air_out"; - internal_pressure_bound = 2000; - internal_pressure_bound_default = 2000; - pressure_checks = 2; - pressure_checks_default = 2; - pump_direction = 0; - use_power = 1 - }, -/turf/simulated/floor/reinforced/airmix, -/area/constructionsite/atmospherics) -"iB" = ( -/obj/machinery/light/small{ - dir = 1 - }, -/obj/machinery/air_sensor/dist{ - id_tag = "d_air_sensor" - }, -/turf/simulated/floor/reinforced/airmix, -/area/constructionsite/atmospherics) -"iC" = ( -/obj/structure/girder, -/turf/space, -/area/constructionsite/medical) -"iD" = ( -/obj/structure/lattice, -/obj/structure/sign/warning/nosmoking_1, -/turf/simulated/wall, -/area/constructionsite/medical) -"iE" = ( -/obj/structure/sign/bluecross_2, -/turf/simulated/wall, -/area/constructionsite/hallway/aft) -"iF" = ( -/obj/structure/sign/warning/compressed_gas, -/turf/simulated/wall, -/area/constructionsite/hallway/aft) -"iG" = ( -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 4 - }, -/turf/simulated/wall, -/area/constructionsite/atmospherics) -"iH" = ( -/obj/machinery/atmospherics/unary/outlet_injector{ - dir = 8; - frequency = 1441; - icon_state = "map_injector"; - id = "d_air_in"; - use_power = 1 - }, -/turf/simulated/floor/reinforced/airmix, -/area/constructionsite/atmospherics) -"iI" = ( -/obj/machinery/portable_atmospherics/canister/air, -/turf/simulated/floor/reinforced/airmix, -/area/constructionsite/atmospherics) -"iJ" = ( -/obj/machinery/door/airlock/multi_tile/glass/medical{ - dir = 4; - name = "Medbay" - }, -/turf/simulated/floor/airless, -/area/constructionsite/hallway/aft) -"iK" = ( -/obj/effect/floor_decal/industrial/warning/dust{ - dir = 8 - }, -/turf/simulated/floor/tiled/dark/airless, -/area/constructionsite/atmospherics) -"iL" = ( -/obj/structure/girder, -/turf/simulated/floor/airless, -/area/constructionsite/medical) -"iM" = ( -/obj/effect/floor_decal/plaque{ - desc = "In memory of Earl Whitenmeinster. We'll never forget you."; - name = "Whitenmeister Memorial Hall Plaque" - }, -/turf/simulated/floor/tiled/dark/airless, -/area/constructionsite/hallway/aft) -"iN" = ( -/obj/effect/floor_decal/industrial/warning/dust{ - dir = 8 - }, -/turf/simulated/floor/airless, -/area/constructionsite/atmospherics) -"iO" = ( -/obj/machinery/computer/air_control{ - input_tag = "d_o2_in"; - name = "Oxygen Supply Control"; - output_tag = "d_o2_out"; - sensor_name = "Oxygen Supply Tank"; - sensor_tag = "d_o2_sensor" - }, -/obj/machinery/atmospherics/pipe/simple/visible{ - dir = 4 - }, -/turf/simulated/floor/airless, -/area/constructionsite/atmospherics) -"iP" = ( -/obj/machinery/atmospherics/unary/vent_pump/tank{ - dir = 8; - external_pressure_bound = 0; - external_pressure_bound_default = 0; - icon_state = "map_vent_in"; - id_tag = "d_o2_out"; - initialize_directions = 1; - internal_pressure_bound = 4000; - internal_pressure_bound_default = 4000; - pressure_checks = 2; - pressure_checks_default = 2; - pump_direction = 0; - use_power = 1 - }, -/turf/simulated/floor/reinforced/oxygen, -/area/constructionsite/atmospherics) -"iQ" = ( -/obj/machinery/light/small{ - dir = 1 - }, -/obj/machinery/air_sensor{ - id_tag = "d_o2_sensor" - }, -/turf/simulated/floor/reinforced/oxygen, -/area/constructionsite/atmospherics) -"iR" = ( -/turf/simulated/floor/tiled/dark/airless, -/area/constructionsite/medical) -"iS" = ( -/obj/random/material, -/turf/simulated/floor/airless, -/area/constructionsite/medical) -"iT" = ( -/obj/effect/floor_decal/corner/green{ - dir = 10 - }, -/turf/simulated/floor/tiled/white/airless, -/area/constructionsite/medical) -"iU" = ( -/obj/machinery/atmospherics/unary/outlet_injector{ - dir = 8; - frequency = 1441; - icon_state = "map_injector"; - id = "d_o2_in"; - use_power = 1 - }, -/turf/simulated/floor/reinforced/oxygen, -/area/constructionsite/atmospherics) -"iV" = ( -/obj/machinery/portable_atmospherics/canister/oxygen, -/turf/simulated/floor/reinforced/oxygen, -/area/constructionsite/atmospherics) -"iW" = ( -/obj/structure/lattice, -/obj/structure/girder, -/turf/space, -/area/constructionsite/medical) -"iX" = ( -/obj/structure/cable/blue{ - d2 = 2; - icon_state = "0-2" - }, -/turf/simulated/floor/tiled/dark/airless, -/area/constructionsite/atmospherics) -"iY" = ( -/turf/simulated/wall, -/area/constructionsite) -"iZ" = ( -/obj/structure/grille/broken, -/obj/structure/wall_frame, -/turf/simulated/floor/airless, -/area/constructionsite) -"ja" = ( -/obj/structure/grille, -/obj/structure/wall_frame, -/turf/simulated/floor/airless, -/area/constructionsite) -"jb" = ( -/obj/structure/cable/blue{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/airless, -/area/constructionsite/atmospherics) -"jc" = ( -/obj/machinery/computer/air_control{ - input_tag = "d_n2_in"; - name = "Nitrogen Supply Control"; - output_tag = "d_n2_out"; - sensor_name = "N2 Supply Tank"; - sensor_tag = "d_n2_sensor" - }, -/obj/machinery/atmospherics/pipe/simple/visible{ - dir = 4 - }, -/turf/simulated/floor/airless, -/area/constructionsite/atmospherics) -"jd" = ( -/obj/machinery/atmospherics/unary/vent_pump/tank{ - dir = 8; - external_pressure_bound = 0; - external_pressure_bound_default = 0; - icon_state = "map_vent_in"; - id_tag = "d_n2_out"; - initialize_directions = 1; - internal_pressure_bound = 4000; - internal_pressure_bound_default = 4000; - pressure_checks = 2; - pressure_checks_default = 2; - pump_direction = 0; - use_power = 1 - }, -/turf/simulated/floor/reinforced/nitrogen, -/area/constructionsite/atmospherics) -"je" = ( -/obj/machinery/light/small{ - dir = 1 - }, -/obj/machinery/air_sensor{ - id_tag = "d_n2_sensor" - }, -/turf/simulated/floor/reinforced/nitrogen, -/area/constructionsite/atmospherics) -"jf" = ( -/obj/random/smokes, -/turf/simulated/floor/tiled/dark/airless, -/area/constructionsite) -"jg" = ( -/obj/structure/lattice, -/turf/space, -/area/constructionsite) -"jh" = ( -/obj/structure/table/standard, -/obj/structure/bedsheetbin, -/turf/simulated/floor/airless, -/area/constructionsite) -"ji" = ( -/obj/structure/table, -/turf/simulated/floor/airless, -/area/constructionsite) -"jj" = ( -/obj/structure/table/standard, -/obj/random/hat, -/obj/random/gloves, -/turf/simulated/floor/airless, -/area/constructionsite) -"jk" = ( -/obj/structure/table/standard, -/obj/random/gloves, -/turf/simulated/floor/tiled/dark/airless, -/area/constructionsite) -"jl" = ( -/obj/structure/table/standard, -/obj/random/maintenance, -/turf/simulated/floor/tiled/dark/airless, -/area/constructionsite) -"jm" = ( -/obj/structure/girder/displaced, -/turf/simulated/floor/airless, -/area/constructionsite) -"jn" = ( -/obj/structure/table/standard, -/turf/simulated/floor/airless, -/area/constructionsite/medical) -"jo" = ( -/obj/structure/table/standard, -/obj/structure/closet/body_bag/cryobag, -/obj/structure/closet/body_bag/cryobag, -/turf/simulated/floor/airless, -/area/constructionsite/medical) -"jp" = ( -/obj/structure/cable/blue, -/obj/machinery/power/apc/high/inactive{ - name = "south bump"; - pixel_y = -24 - }, -/turf/simulated/floor/airless, -/area/constructionsite/atmospherics) -"jq" = ( -/obj/machinery/atmospherics/pipe/simple/visible{ - dir = 5 - }, -/turf/simulated/floor/airless, -/area/constructionsite/atmospherics) -"jr" = ( -/obj/machinery/atmospherics/unary/outlet_injector{ - dir = 8; - frequency = 1441; - icon_state = "map_injector"; - id = "d_n2_in"; - use_power = 1 - }, -/turf/simulated/floor/reinforced/nitrogen, -/area/constructionsite/atmospherics) -"js" = ( -/obj/machinery/portable_atmospherics/canister/nitrogen, -/turf/simulated/floor/reinforced/nitrogen, -/area/constructionsite/atmospherics) -"jt" = ( -/obj/structure/grille/broken, -/obj/structure/wall_frame, -/turf/simulated/floor/airless{ - icon_state = "dmg2" - }, -/area/constructionsite) -"ju" = ( -/turf/simulated/floor/airless, -/area/constructionsite) -"jv" = ( -/obj/structure/door_assembly, -/turf/simulated/floor/airless, -/area/constructionsite) -"jw" = ( -/turf/space, -/area/constructionsite) -"jx" = ( -/obj/structure/lattice, -/turf/simulated/floor/tiled/dark/airless, -/area/constructionsite) -"jy" = ( -/turf/simulated/floor/tiled/dark/airless, -/area/constructionsite) -"jz" = ( -/obj/structure/girder, -/turf/simulated/floor/airless, -/area/constructionsite) -"jA" = ( -/obj/structure/lattice, -/turf/simulated/wall, -/area/constructionsite) -"jB" = ( -/obj/random/clothing, -/turf/simulated/floor/tiled/dark/airless, -/area/constructionsite) -"jC" = ( -/obj/structure/coatrack, -/turf/simulated/floor/tiled/dark/airless, -/area/constructionsite) -"jD" = ( -/turf/simulated/floor/airless{ - icon_state = "dmg2" - }, -/area/constructionsite) -"jE" = ( -/obj/structure/closet/cabinet, -/turf/simulated/floor/airless, -/area/constructionsite) -"jF" = ( -/obj/structure/bed, -/turf/simulated/floor/tiled/dark/airless, -/area/constructionsite) -"jG" = ( -/obj/effect/wallframe_spawn/reinforced, -/turf/simulated/floor/airless, -/area/constructionsite) -"jH" = ( -/obj/structure/lattice, -/obj/random/junk, -/turf/space, -/area/constructionsite) -"jI" = ( -/obj/machinery/door/airlock{ - name = "Cabin" - }, -/turf/simulated/floor/airless, -/area/constructionsite) -"jJ" = ( -/obj/random/hat, -/turf/simulated/floor/airless, -/area/constructionsite) -"jK" = ( -/obj/random/tool, -/turf/simulated/floor/airless, -/area/constructionsite) -"jL" = ( -/obj/random/snack, -/turf/simulated/floor/airless, -/area/constructionsite) -"jM" = ( -/obj/machinery/door/airlock{ - name = "Bunk Room" - }, -/turf/simulated/floor/airless, -/area/constructionsite) -"jN" = ( -/obj/structure/girder/displaced, -/turf/simulated/floor/airless{ - icon_state = "dmg2" - }, -/area/constructionsite) -"jO" = ( -/obj/item/bedsheet, -/turf/simulated/floor/tiled/dark/airless, -/area/constructionsite) -"jP" = ( -/obj/random/loot, -/turf/simulated/floor/airless, -/area/constructionsite) -"jQ" = ( -/obj/structure/extinguisher_cabinet{ - icon_state = "extinguisher_empty"; - pixel_x = 30 - }, -/turf/simulated/floor/tiled/dark/airless, -/area/constructionsite/hallway/aft) -"jR" = ( -/obj/random/trash, -/turf/simulated/floor/tiled/dark/airless, -/area/constructionsite) -"jS" = ( -/obj/random/maintenance/clean, -/turf/simulated/floor/airless, -/area/constructionsite) -"jT" = ( -/obj/machinery/washing_machine, -/turf/simulated/floor/airless, -/area/constructionsite) -"jU" = ( -/obj/structure/table, -/obj/random/clothing, -/turf/simulated/floor/airless, -/area/constructionsite) -"jV" = ( -/obj/structure/grille, -/obj/structure/wall_frame, -/turf/simulated/floor/airless{ - icon_state = "dmg2" - }, -/area/constructionsite) -"jW" = ( -/obj/random/clothing, -/turf/simulated/floor/airless, -/area/constructionsite) -"jX" = ( -/obj/structure/grille, -/obj/structure/wall_frame, -/turf/simulated/floor/tiled/dark/airless, -/area/constructionsite) -"jY" = ( -/obj/item/clothing/head/radiation, -/turf/simulated/floor/airless, -/area/constructionsite) -"jZ" = ( -/obj/machinery/constructable_frame, -/obj/random/material, -/turf/simulated/floor/airless, -/area/constructionsite) -"ka" = ( -/obj/machinery/door/airlock/glass/engineering, -/turf/simulated/floor/airless, -/area/constructionsite) -"kb" = ( -/obj/random/obstruction, -/turf/simulated/floor/airless, -/area/constructionsite) -"kc" = ( -/obj/random/maintenance, -/turf/simulated/floor/airless, -/area/constructionsite) -"kd" = ( -/obj/random/junk, -/turf/simulated/floor/airless, -/area/constructionsite) -"ke" = ( -/obj/random/trash, -/turf/simulated/floor/airless, -/area/constructionsite) -"kf" = ( -/obj/random/action_figure, -/turf/simulated/floor/airless, -/area/constructionsite) -"kg" = ( -/obj/random/voidhelmet, -/turf/simulated/floor/airless, -/area/constructionsite) -"kh" = ( -/obj/structure/table/standard, -/obj/random/hardsuit, -/turf/simulated/floor/tiled/dark/airless, -/area/constructionsite) -"ki" = ( -/obj/random/hostile, -/turf/simulated/floor/tiled/dark/airless, -/area/constructionsite) -"kj" = ( -/obj/random/hostile, -/turf/simulated/floor/airless, -/area/constructionsite) -"kk" = ( -/obj/structure/table, -/turf/simulated/floor/airless{ - icon_state = "dmg2" - }, -/area/constructionsite) -"kl" = ( -/obj/structure/table/standard, -/obj/machinery/cell_charger, -/obj/random/powercell, -/turf/simulated/floor/airless, -/area/constructionsite) -"km" = ( -/obj/machinery/power/terminal{ - dir = 4 - }, -/turf/simulated/floor/airless, -/area/constructionsite) -"kn" = ( -/obj/machinery/power/smes/buildable, -/turf/simulated/floor/airless, -/area/constructionsite) -"ko" = ( -/obj/structure/table/rack, -/obj/random/tool, -/obj/random/tool, -/turf/simulated/floor/airless, -/area/constructionsite) -"kp" = ( -/obj/structure/table/rack, -/turf/simulated/floor/airless, -/area/constructionsite) -"kq" = ( -/obj/random/glasses, -/turf/simulated/floor/airless, -/area/constructionsite) -"kr" = ( -/obj/machinery/power/shield_generator{ - desc = "A heavy-duty shield generator and capacitor, capable of generating energy shields at large distances. This one seems to be in a state of disrepair."; - name = "disused shield generator" - }, -/turf/simulated/floor/airless, -/area/constructionsite) -"ks" = ( -/obj/random/junk, -/turf/simulated/floor/tiled/dark/airless, -/area/constructionsite) -"kt" = ( -/obj/machinery/power/breakerbox, -/turf/simulated/floor/airless, -/area/constructionsite) -"ku" = ( -/obj/structure/table/rack, -/obj/random/toolbox, -/obj/random/loot, -/turf/simulated/floor/tiled/dark/airless, -/area/constructionsite) -"kv" = ( -/obj/structure/girder/displaced, -/turf/simulated/floor/tiled/dark/airless, -/area/constructionsite) -"kw" = ( -/obj/random/closet, -/obj/random/loot, -/obj/random/junk, -/obj/random/junk, -/turf/simulated/floor/airless, -/area/constructionsite) -"kx" = ( -/obj/machinery/door/airlock/hatch, -/turf/simulated/floor/airless, -/area/constructionsite) -"ky" = ( -/obj/structure/closet/radiation, -/turf/simulated/floor/tiled/dark/airless, -/area/constructionsite/hallway/aft) -"kz" = ( -/turf/simulated/wall, -/area/constructionsite/engineering) -"kA" = ( -/obj/machinery/door/airlock/glass/engineering{ - name = "Engine Access" - }, -/turf/simulated/floor/airless, -/area/constructionsite/engineering) -"kB" = ( -/turf/simulated/floor/airless, -/area/constructionsite/engineering) -"kC" = ( -/obj/effect/shuttle_landmark/derelict/nav6, -/turf/space, -/area/space) -"kD" = ( -/obj/machinery/door/airlock/hatch, -/turf/simulated/floor/airless, -/area/constructionsite/engineering) -"kE" = ( -/obj/structure/lattice, -/turf/space, -/area/constructionsite/engineering) -"kF" = ( -/obj/random/junk, -/turf/simulated/floor/airless, -/area/constructionsite/engineering) -"kG" = ( -/obj/machinery/door/airlock/glass/engineering, -/turf/simulated/floor/airless, -/area/constructionsite/engineering) -"kH" = ( -/obj/structure/sign/warning/compressed_gas, -/turf/simulated/wall, -/area/constructionsite/engineering) -"kI" = ( -/obj/machinery/portable_atmospherics/canister/empty/phoron, -/turf/simulated/floor/airless, -/area/constructionsite/engineering) -"kJ" = ( -/turf/space, -/area/constructionsite/engineering) -"kK" = ( -/turf/simulated/floor/tiled/dark/airless, -/area/constructionsite/engineering) -"kL" = ( -/obj/structure/table/standard, -/turf/simulated/floor/tiled/dark/airless, -/area/constructionsite/engineering) -"kM" = ( -/obj/structure/sign/warning/radioactive, -/turf/simulated/wall, -/area/constructionsite/engineering) -"kN" = ( -/obj/structure/table/standard, -/obj/random/tool, -/obj/random/maintenance, -/obj/random/maintenance, -/turf/simulated/floor/airless, -/area/constructionsite/engineering) -"kO" = ( -/obj/structure/table, -/turf/simulated/floor/airless, -/area/constructionsite/engineering) -"kP" = ( -/obj/structure/grille, -/obj/structure/wall_frame, -/turf/simulated/floor/airless, -/area/constructionsite/engineering) -"kQ" = ( -/obj/random/maintenance, -/turf/simulated/floor/airless{ - icon_state = "dmg2" - }, -/area/constructionsite/engineering) -"kR" = ( -/obj/structure/grille/broken, -/obj/structure/wall_frame, -/turf/simulated/floor/airless, -/area/constructionsite/engineering) -"kS" = ( -/obj/structure/table/standard, -/turf/simulated/floor/airless, -/area/constructionsite/engineering) -"kT" = ( -/obj/machinery/portable_atmospherics/canister/nitrogen, -/turf/simulated/floor/airless, -/area/constructionsite/engineering) -"kU" = ( -/obj/structure/table/standard, -/obj/random/material, -/obj/random/material, -/obj/random/material, -/obj/random/material, -/turf/simulated/floor/airless, -/area/constructionsite/engineering) -"kV" = ( -/turf/simulated/floor/airless{ - icon_state = "dmg2" - }, -/area/constructionsite/engineering) -"kW" = ( -/obj/structure/table/standard, -/obj/random/toolbox, -/obj/random/maintenance, -/turf/simulated/floor/airless, -/area/constructionsite/engineering) -"kX" = ( -/obj/structure/table/standard, -/obj/random/maintenance, -/turf/simulated/floor/airless, -/area/constructionsite/engineering) -"kY" = ( -/obj/structure/grille/broken, -/obj/structure/wall_frame, -/turf/space, -/area/constructionsite/engineering) -"kZ" = ( -/obj/structure/table/rack, -/obj/random/loot, -/turf/simulated/floor/airless, -/area/constructionsite/engineering) -"la" = ( -/obj/structure/grille, -/obj/structure/wall_frame, -/turf/space, -/area/constructionsite/engineering) -"lb" = ( -/obj/random/hostile, -/turf/simulated/floor/airless, -/area/constructionsite/engineering) -"lc" = ( -/obj/effect/wallframe_spawn/reinforced, -/turf/simulated/floor/airless, -/area/constructionsite/engineering) -"ld" = ( -/obj/machinery/portable_atmospherics/canister/nitrogen/engine_setup, -/turf/simulated/floor/airless, -/area/constructionsite/engineering) -"le" = ( -/obj/machinery/power/rad_collector, -/turf/simulated/floor/airless, -/area/constructionsite/engineering) -"lf" = ( -/obj/structure/table/standard, -/obj/random/tool, -/turf/simulated/floor/airless, -/area/constructionsite/engineering) -"lg" = ( -/obj/random/tool, -/turf/simulated/floor/airless, -/area/constructionsite/engineering) -"lh" = ( -/obj/random/maintenance, -/turf/simulated/floor/tiled/dark/airless, -/area/constructionsite/engineering) -"li" = ( -/obj/structure/table/standard, -/obj/random/tool, -/obj/random/voidsuit, -/obj/random/coin, -/turf/simulated/floor/airless, -/area/constructionsite/engineering) -"lj" = ( -/obj/structure/table/standard, -/obj/random/toolbox, -/turf/simulated/floor/airless, -/area/constructionsite/engineering) -"lk" = ( -/obj/random/trash, -/turf/simulated/floor/airless, -/area/constructionsite/engineering) -"ll" = ( -/obj/structure/closet/radiation, -/turf/simulated/floor/tiled/dark/airless, -/area/constructionsite/engineering) -"lm" = ( -/obj/machinery/portable_atmospherics/canister/phoron/engine_setup, -/turf/simulated/floor/airless, -/area/constructionsite/engineering) -"ln" = ( -/obj/random/maintenance, -/turf/space, -/area/space) -"lo" = ( -/obj/machinery/door/airlock/glass/engineering{ - name = "SMES" - }, -/turf/simulated/floor/airless, -/area/constructionsite/engineering) -"lp" = ( -/obj/structure/cable/blue{ - d2 = 2; - icon_state = "0-2" - }, -/turf/simulated/floor/airless, -/area/constructionsite/engineering) -"lq" = ( -/obj/structure/girder, -/turf/simulated/floor/airless, -/area/constructionsite/engineering) -"lr" = ( -/obj/structure/table/rack, -/obj/random/tool, -/turf/simulated/floor/airless, -/area/constructionsite/engineering) -"ls" = ( -/obj/structure/cable/blue{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/dark/airless, -/area/constructionsite/engineering) -"lt" = ( -/obj/structure/table/rack, -/obj/random/toolbox, -/turf/simulated/floor/airless, -/area/constructionsite/engineering) -"lu" = ( -/turf/simulated/wall/r_wall, -/area/AIsattele) -"lv" = ( -/obj/machinery/power/smes/buildable, -/obj/structure/cable/blue, -/turf/simulated/floor/airless, -/area/constructionsite/engineering) -"lw" = ( -/obj/machinery/power/terminal{ - dir = 8 - }, -/obj/structure/cable/blue{ - d2 = 4; - icon_state = "0-4" - }, -/turf/simulated/floor/tiled/dark/airless, -/area/constructionsite/engineering) -"lx" = ( -/obj/structure/cable/blue{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/airless, -/area/constructionsite/engineering) -"ly" = ( -/obj/structure/cable/blue{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/cable/blue{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/structure/cable/blue{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/turf/simulated/floor/airless, -/area/constructionsite/engineering) -"lz" = ( -/obj/structure/cable/blue{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/dark/airless, -/area/constructionsite/engineering) -"lA" = ( -/obj/machinery/power/terminal{ - dir = 4 - }, -/obj/structure/cable/blue{ - d2 = 8; - icon_state = "0-8" - }, -/turf/simulated/floor/airless, -/area/constructionsite/engineering) -"lB" = ( -/obj/structure/table/rack, -/obj/random/maintenance, -/turf/simulated/floor/airless, -/area/constructionsite/engineering) -"lC" = ( -/obj/machinery/constructable_frame/computerframe, -/obj/structure/cable{ - d2 = 2; - icon_state = "0-2" - }, -/turf/simulated/floor/airless, -/area/AIsattele) -"lD" = ( -/obj/machinery/tele_projector, -/obj/structure/cable{ - d2 = 2; - icon_state = "0-2" - }, -/turf/simulated/floor/airless, -/area/AIsattele) -"lE" = ( -/obj/machinery/tele_pad, -/turf/simulated/floor/airless, -/area/AIsattele) -"lF" = ( -/obj/machinery/power/smes/buildable, -/obj/structure/cable/blue{ - d2 = 2; - icon_state = "0-2" - }, -/turf/simulated/floor/airless, -/area/constructionsite/engineering) -"lG" = ( -/obj/machinery/power/terminal{ - dir = 8 - }, -/obj/structure/cable/blue{ - d2 = 4; - icon_state = "0-4" - }, -/turf/simulated/floor/airless, -/area/constructionsite/engineering) -"lH" = ( -/obj/structure/cable/blue{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/structure/cable/blue{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/turf/simulated/floor/airless, -/area/constructionsite/engineering) -"lI" = ( -/obj/item/material/shard{ - icon_state = "medium" - }, -/turf/simulated/floor/airless, -/area/AIsattele) -"lJ" = ( -/turf/simulated/floor/airless, -/area/AIsattele) -"lK" = ( -/obj/structure/cable, -/turf/simulated/floor/airless, -/area/AIsattele) -"lL" = ( -/obj/structure/table/rack, -/obj/item/clothing/gloves/insulated, -/turf/simulated/floor/airless, -/area/AIsattele) -"lM" = ( -/obj/structure/table/rack, -/obj/random/maintenance, -/turf/simulated/floor/tiled/dark/airless, -/area/constructionsite/engineering) -"lN" = ( -/obj/structure/cable/blue, -/turf/simulated/floor/airless, -/area/constructionsite/engineering) -"lO" = ( -/obj/structure/girder, -/turf/simulated/floor/airless, -/area/AIsattele) -"lP" = ( -/obj/item/cell/standard, -/turf/simulated/floor/airless, -/area/AIsattele) -"lQ" = ( -/obj/structure/grille/broken, -/turf/simulated/floor/airless, -/area/AIsattele) -"lR" = ( -/turf/space, -/area/AIsattele) -"lS" = ( -/obj/structure/table, -/obj/random/loot, -/turf/simulated/floor/airless, -/area/AIsattele) -"lT" = ( -/obj/random/hostile, -/turf/simulated/floor/tiled/dark/airless, -/area/constructionsite/engineering) -"lU" = ( -/obj/structure/lattice, -/turf/space, -/area/AIsattele) -"lV" = ( -/obj/structure/closet, -/obj/random/maintenance, -/turf/simulated/floor/airless, -/area/AIsattele) -"lW" = ( -/obj/structure/cable{ - d2 = 4; - icon_state = "0-4" - }, -/turf/simulated/floor/airless, -/area/AIsattele) -"lX" = ( -/obj/structure/grille/broken, -/turf/space, -/area/AIsattele) -"lY" = ( -/obj/item/storage/toolbox/electrical{ - pixel_x = 1; - pixel_y = -1 - }, -/turf/simulated/floor/airless, -/area/AIsattele) -"lZ" = ( -/obj/machinery/power/emitter{ - anchored = 1; - dir = 4; - state = 2 - }, -/turf/simulated/floor/airless, -/area/constructionsite/engineering) -"ma" = ( -/obj/machinery/field_generator, -/turf/simulated/floor/airless, -/area/constructionsite/engineering) -"mb" = ( -/obj/machinery/power/emitter{ - anchored = 1; - dir = 8; - state = 2 - }, -/turf/simulated/floor/airless, -/area/constructionsite/engineering) -"mc" = ( -/obj/machinery/the_singularitygen, -/turf/simulated/floor/airless, -/area/constructionsite/engineering) -"md" = ( -/obj/effect/shuttle_landmark/derelict/nav7, -/turf/space, -/area/space) -"nb" = ( -/obj/structure/table/reinforced, -/obj/item/stack/material/glass{ - amount = 50 - }, -/obj/item/stack/material/glass{ - amount = 50 - }, -/obj/item/stack/material/glass{ - amount = 50 - }, -/obj/item/stack/material/glass{ - amount = 50 - }, -/obj/item/stack/material/glass{ - amount = 50 - }, -/obj/random/tech_supply, -/obj/random/maintenance, -/obj/machinery/camera/motion{ - c_tag = "Construction Site Teleporter" - }, -/turf/simulated/floor/tiled/dark, -/area/constructionsite/teleporter) -"ob" = ( -/obj/machinery/camera/motion{ - c_tag = "Construction Site Teleporter Airlock" - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 5; - icon_state = "warning" - }, -/obj/machinery/atmospherics/unary/vent_pump/high_volume/airlock{ - id_tag = "constructionsite_vent" - }, -/turf/simulated/floor, -/area/constructionsite/teleporter) -"AR" = ( -/obj/structure/grille, -/obj/structure/wall_frame, -/obj/structure/wall_frame, -/turf/simulated/floor/airless, -/area/constructionsite/hallway/aft) -"BO" = ( -/obj/structure/grille, -/obj/structure/wall_frame, -/turf/simulated/floor/airless, -/area/constructionsite/hallway/fore) -"DP" = ( -/obj/structure/grille, -/obj/structure/wall_frame, -/turf/simulated/floor/airless, -/area/constructionsite/hallway/aft) -"HP" = ( -/obj/machinery/embedded_controller/radio/airlock/airlock_controller{ - id_tag = "constructionsite_airlock"; - pixel_y = 19; - req_access = newlist(); - tag_airpump = "constructionsite_vent"; - tag_chamber_sensor = "constructionsite_sensor"; - tag_exterior_door = "constructionsite_outer"; - tag_interior_door = "constructionsite_inner" - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 9; - icon_state = "warning" - }, -/obj/machinery/atmospherics/unary/vent_pump/high_volume/airlock{ - id_tag = "constructionsite_vent" - }, -/turf/simulated/floor, -/area/constructionsite/teleporter) -"Jz" = ( -/obj/machinery/door/airlock/multi_tile/glass/engineering{ - dir = 4; - name = "Atmospherics" - }, -/turf/simulated/floor/airless, -/area/constructionsite/hallway/aft) -"Lk" = ( -/obj/structure/grille/broken, -/obj/structure/wall_frame, -/turf/simulated/floor/airless, -/area/constructionsite/hallway/fore) - -(1,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(2,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(3,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(4,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(5,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(6,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(7,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(8,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(9,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(10,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(11,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(12,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(13,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(14,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(15,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(16,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(17,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(18,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(19,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(20,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(21,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(22,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(23,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(24,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(25,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(26,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(27,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(28,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(29,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(30,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(31,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(32,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(33,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(34,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(35,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(36,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(37,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(38,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(39,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(40,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(41,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(42,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(43,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(44,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aR -aa -aR -aa -aa -aR -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(45,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -dO -aa -aR -aa -aa -aR -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(46,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aR -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aR -aa -aR -aa -aa -aR -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(47,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aR -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aR -aa -gj -aR -dO -aR -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(48,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -fL -fU -fO -fU -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aR -aa -gz -aR -dO -aR -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(49,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -fL -fN -fO -fU -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aR -aa -gj -aR -dO -aR -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -hi -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(50,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -fL -fO -fO -fU -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aR -aa -gk -aR -aR -aR -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(51,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -fL -fO -fO -fU -aR -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -dO -gj -gj -gj -aR -aR -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(52,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -dX -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -fL -fO -fN -fO -aR -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -dO -aR -aR -gj -aR -aR -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(53,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aR -fL -fN -fN -fO -aR -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -dO -gj -aR -gj -aR -aR -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(54,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aR -fL -fO -fN -fO -aR -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -dO -gj -gj -gk -aR -aR -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(55,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aR -fL -fO -fP -fL -aR -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -dO -gj -gj -gj -dO -aR -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(56,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aR -fL -fO -fP -fO -aR -aa -aa -aa -aa -aa -aa -aa -aa -aa -aR -aa -aR -gj -aR -gj -dO -aR -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(57,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -fN -fL -fN -fN -fO -aR -aa -aa -aa -aa -aa -aa -aa -aa -aa -aR -aR -gj -gj -gj -gj -dO -aR -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -kC -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(58,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -fN -fL -fO -fN -fO -aR -aa -aa -aa -aa -aa -aa -aa -aa -aa -aR -gj -aR -gk -aR -aR -dO -aR -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(59,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -fN -fL -fN -fN -fL -aR -aa -aa -aa -aa -aa -aa -aa -aa -aa -aR -gj -gj -gj -gj -gj -dO -aR -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(60,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -fN -fL -fO -fN -fL -aR -aa -aa -aa -aa -aa -aa -aa -aa -aa -aR -gj -aR -gj -aR -aR -dO -aR -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(61,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -fO -fL -fN -fV -fL -aR -aa -aa -aa -aa -aa -aa -aa -aa -aa -aR -gj -gj -gj -gj -gj -dO -aR -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(62,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -fN -fL -fO -fN -fO -aR -aa -aa -aa -aa -aa -aa -aa -aa -aR -gj -gj -aR -gj -aR -gj -dO -aR -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(63,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aR -aa -aR -aa -fN -fL -fN -fN -fO -aR -aa -aa -aa -aa -aa -aa -aa -aa -aa -aR -gj -gk -gj -gj -gj -dO -aR -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(64,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aR -aR -aR -aR -aR -aR -fL -fN -fP -fL -aR -aR -aa -aa -aa -aa -aa -aa -aa -aR -aR -gj -aR -gr -aR -gk -dO -aR -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(65,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aR -aa -aR -aa -aR -fL -fP -fN -fL -aR -aR -aa -aa -aa -aa -aa -aa -aa -aR -gj -gj -gj -gj -gj -gj -dO -aR -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(66,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aR -aR -aR -aR -aR -aR -fL -fN -fN -fL -aR -aR -aa -aa -aa -aa -aa -aa -aa -gj -gj -gj -aW -bo -gA -bo -aW -aR -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(67,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aR -aa -aR -aa -aR -fL -fP -fN -fL -aR -aR -aa -aa -aa -aa -aa -aa -aa -aR -gk -gj -aW -bo -bo -bo -aW -aR -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(68,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aR -aR -aR -aR -aR -aR -fL -fV -fN -fL -aR -aR -aa -aa -aa -aa -aa -aa -aa -gj -gj -gj -aW -bu -gA -bo -aW -aR -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aR -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(69,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aR -aa -aR -aa -aR -aa -aR -aa -aR -aa -aR -aa -aR -aR -aa -aR -fL -fL -fL -fL -fL -fL -fL -aR -aa -aa -aa -aa -aa -aa -aa -gj -gj -gj -aW -bo -bo -gA -aW -aR -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(70,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aR -dO -dO -dO -dO -aR -aR -dO -aR -dO -dO -dO -dO -dO -dO -dO -dO -fL -fP -fP -fN -fV -fN -fY -aR -aa -aR -aa -aR -aa -aR -aa -aR -gj -gj -aW -fQ -bo -bo -aW -aR -aa -aa -aR -aa -aa -aR -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(71,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aR -aR -aR -aR -aR -aR -aR -aR -aR -aR -aR -aR -aR -aR -aR -aR -aR -fL -fN -fN -fW -fN -fV -fZ -aR -aR -aR -aR -aR -aR -aR -aR -aR -gj -gj -aW -fQ -bH -bo -aW -aR -aR -aR -aR -aR -aR -aR -aR -aR -aR -aR -hc -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(72,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aR -aR -aR -dV -aR -aR -aR -aR -aR -aR -aR -aR -aR -aR -aR -aR -aR -fL -fP -fT -fP -fP -fP -fZ -aR -aa -aR -aa -aR -aa -aR -aa -gj -gj -gj -aW -bo -bo -fQ -aW -aR -aa -aa -aR -aa -aa -aR -aa -aa -aR -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aR -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(73,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aR -aa -aR -aa -aR -aa -aR -aa -aR -dO -aR -aa -dO -dO -dO -dO -fL -fP -fN -fP -fN -fP -fY -aR -aR -aR -aR -aR -aR -aR -aR -aR -gj -gj -aW -gs -bo -bo -aW -aR -aa -aa -aR -aa -aa -aR -aa -aa -aR -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aR -aa -aa -aa -aa -aR -aa -aa -aa -aa -aa -aa -aa -aa -aR -aa -aa -aa -aR -aa -aR -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(74,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aW -bo -bH -aW -aW -aW -aW -aR -aa -aR -aa -aR -aa -aR -aa -aR -gj -gk -aW -gt -bo -bH -aW -aR -aR -aR -aR -aR -aR -aR -aR -aR -aR -aR -aR -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aR -aR -aa -aa -aa -aa -aa -aa -aR -aa -aa -aa -aR -aa -aR -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(75,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aR -aa -aa -aR -aa -aa -aR -aa -aa -aR -aW -aW -fQ -bo -bu -fQ -bo -aW -aR -aR -aR -aR -aR -aR -aR -aR -gj -gl -gj -aW -bo -bo -bo -aW -aR -aR -aR -aR -aR -aR -aR -aR -aR -aR -aR -aR -aR -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -iY -iY -jt -iY -iY -jG -jA -jN -iZ -jA -jA -jV -jA -aa -aa -aa -aa -aR -aa -aa -aa -aa -aa -aa -aa -aR -aR -aa -aa -aa -aa -aa -aa -aR -aa -aa -aa -aR -aa -aR -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(76,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aR -aR -aR -aR -aR -aR -aR -aa -aa -aR -aa -aa -aR -aa -aa -aR -aW -bo -bo -bo -bo -fQ -bo -aW -aW -aW -aW -aW -aW -aW -aW -aW -aW -aW -aW -aW -fQ -bo -bo -aW -aW -aW -aW -aW -aW -aW -aW -aW -aW -aW -aW -aW -aW -aW -aR -aR -aR -aR -aR -aR -aR -aR -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -iY -jf -ju -jz -jE -ju -iY -jO -ju -iY -jE -jg -iY -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aR -aR -aa -aa -aa -aa -aa -aa -aR -aa -aa -aa -aR -aa -aR -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(77,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aR -dz -Lk -BO -BO -BO -dz -aR -aR -aR -aR -aR -aR -aR -aR -aR -aR -dz -dz -cN -cw -dz -dz -bo -bo -bo -bo -fQ -bo -bo -bo -fQ -bo -bo -bo -fQ -bo -bo -bp -bo -aW -gA -gA -gA -gA -gA -gA -gA -gA -gA -gA -gA -gA -gA -gO -gO -gO -gO -gO -gO -aR -aR -aR -aR -aR -aR -aR -aR -aR -aR -aR -aR -aa -aa -aa -aa -aa -aa -aa -iY -jg -ju -jA -jF -jH -iY -jg -ju -jA -jw -jy -iY -aa -aa -jw -jw -jw -jw -jw -jw -iY -ju -ju -iY -jg -jg -jw -aa -aa -aa -aa -aa -aR -aa -aa -aa -aR -aa -aR -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(78,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aR -dz -cw -cN -cw -cN -dz -BO -BO -Lk -BO -Lk -BO -Lk -Lk -Lk -BO -dz -cw -cw -cw -cN -dz -dz -dz -dz -dz -dz -dz -dz -dz -dz -dz -dz -dz -dz -dz -cy -cw -cN -dz -gO -gO -gO -gO -gO -gO -gO -gO -gO -gO -gO -gO -gO -gO -gQ -gR -gQ -gU -gO -gO -gO -gO -gO -gO -gO -gO -gO -gO -gO -gO -gO -gT -iv -iv -iv -iv -iv -iv -iY -iY -jv -iY -iY -jI -iY -jz -ju -iY -iY -jv -iY -aa -aa -jw -jw -jw -iY -iY -jz -iY -ju -jy -iY -jg -jg -jw -aa -aa -aa -aa -aa -aR -aR -aa -iY -jg -aa -aR -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(79,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aR -aR -aR -aR -aR -aR -aR -aR -dz -cN -cN -cy -cw -cN -cw -cN -cN -cN -cw -cN -cw -cy -cN -cN -cN -dR -dR -cy -cN -cw -cw -dR -cw -cw -cN -cw -cy -cN -cy -cw -cN -cw -cw -cN -cN -cw -cw -cw -gP -gR -gQ -gQ -gR -gR -gX -gQ -gP -gQ -gR -gR -gR -gQ -gP -gR -gQ -gQ -hj -gT -gT -gT -gT -gT -gT -gT -gT -gT -gT -gT -gT -gT -gT -gT -iv -iv -iv -iv -iZ -jg -ju -jg -ju -jg -ju -jg -ju -jg -ju -ju -iZ -aa -aa -iY -ju -ju -iY -ju -ju -jy -ju -ko -jz -jw -jg -jw -aa -aa -aa -aa -aa -aR -aR -aa -iY -jg -aa -aR -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(80,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aR -aW -aW -aW -aW -aW -aW -aW -aW -dz -cy -cN -cN -cw -cw -cN -cN -cw -cy -cN -cN -cN -cN -cw -cw -cN -cN -dR -cw -cN -cw -cw -cw -cN -cy -cw -cN -cw -cN -cw -cy -dR -cw -cN -cw -cN -cw -cw -cN -gQ -gR -gU -gP -gR -gR -gQ -gR -gQ -gP -gQ -gP -gR -gR -gQ -gR -gR -gP -hj -gT -gT -gT -gT -gT -gT -gT -gT -gT -gT -gT -gT -gT -gT -gT -iv -iv -iv -iv -ja -jh -ju -ju -jy -jJ -ju -ju -ju -jS -ju -ju -ja -aa -aa -iY -jy -jg -jg -ju -jD -ju -kj -kp -iY -iY -jw -jw -aa -aa -aa -aR -aa -aR -aR -aa -iY -jg -iY -aR -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(81,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aR -aW -aW -bo -bu -bo -bo -bu -bo -bo -dA -cw -cw -cN -cw -dz -dz -dz -dz -dz -dz -dz -dz -dz -dz -dz -dz -cw -cN -cw -cw -dz -BO -dj -dj -dj -dj -dj -BO -BO -Lk -BO -Lk -dz -dz -dz -cw -cw -cw -dz -gO -gO -DP -gW -DP -gS -DP -DP -gW -DP -DP -gW -gW -gO -gQ -gU -gQ -gQ -gO -gO -gO -gO -hQ -gO -gO -gO -hQ -gO -gO -gO -gO -iv -gT -iv -iv -iv -iv -iv -ja -ji -jw -ju -ju -ju -jy -jP -ju -jy -jy -ju -ja -aa -aa -iY -jg -ju -ju -kc -kd -jy -ju -kq -jg -jN -jw -jw -aa -aa -aa -aR -aa -aR -aR -aa -jg -jg -iY -aR -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(82,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aR -aW -bu -bo -bo -bo -aW -cd -aW -ce -dz -cw -cN -cN -dz -dz -bo -bo -bo -bo -bo -bu -bo -bo -bo -bo -dz -dz -cw -cN -dz -dz -aR -aR -aR -aR -aR -aR -aR -aR -aR -aR -aR -aW -bo -dA -cw -cN -cw -dA -bo -aW -aR -aR -aR -aR -aR -aR -aR -aR -aR -aR -aR -gO -gO -gQ -gP -gO -gO -hu -hv -hv -hH -hW -hW -ib -hW -ib -hW -ib -hW -ib -hW -ib -ib -iL -ib -ib -ja -jj -ju -ju -ju -ju -jy -ju -ju -ju -jy -jW -iZ -aa -aa -iY -iY -jg -jg -ju -jy -ju -ke -ju -ku -iY -jw -jw -aa -aa -aa -aR -aa -aR -aR -aa -jg -ju -iY -aR -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(83,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aR -aR -aR -aR -aR -aR -aR -aR -aW -bo -bo -cu -aW -aW -df -dp -cw -dz -cN -cy -cw -dz -bo -bo -dY -dY -dY -dY -eX -dY -dY -dY -bp -bo -dz -cw -cw -BO -aR -aa -aa -aR -aa -aa -aR -aW -aW -aW -aW -aW -aW -bH -dz -cN -cw -cN -dz -bH -aW -aW -aW -aW -aW -aW -aR -aa -aa -aR -aa -aa -aR -gS -gQ -gR -gS -hk -hv -hv -hv -hR -hW -hW -hW -hW -hW -hW -ir -hW -hW -hW -ib -ib -ib -ib -ib -iZ -ji -jx -jy -jy -jK -ju -ju -jR -jy -jy -ju -ja -aa -aa -jw -iY -jZ -jy -jg -jy -ji -ju -ju -jg -iY -iY -jw -aa -aa -aa -jg -ju -jg -aR -aa -jg -ju -iY -aR -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(84,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aW -aW -bh -bi -bi -bi -bh -aW -bo -bo -aW -aW -cX -cw -cy -cw -dz -cw -cN -cw -dz -bo -dY -dY -er -eD -eL -eh -fj -eh -dY -dY -bo -dz -cN -cN -Lk -aR -aR -aR -aR -aR -aR -aR -aW -ge -bo -bH -bo -bo -bo -dz -cw -cN -cw -dz -bo -bo -bo -bo -bo -bo -aW -aR -aR -aR -aR -aR -aR -aR -gS -gR -gQ -hf -hl -hv -hl -hH -hv -hW -hW -ib -ik -ib -hW -ib -hW -ib -hW -ib -hv -hY -iR -ib -ja -jk -jy -jB -ju -jy -jL -ju -jy -ju -ju -jL -jX -aa -aa -jw -iY -jg -ju -jD -jy -kh -kk -ju -jy -jg -iY -jw -aa -aa -aa -jg -ju -jg -aR -aa -iY -ju -iY -aR -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(85,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aW -aW -bn -bo -bo -bo -bN -aW -bo -aW -aW -cw -cw -cw -cP -cw -dB -cw -cy -cy -dz -bo -dY -ec -es -eD -eh -eh -fk -eh -fx -dY -bo -dz -cN -cN -BO -aR -aa -aa -aR -aa -aa -aR -aW -bo -bo -bo -bn -dz -dz -dz -cw -do -cw -dz -gO -gO -bo -bo -bo -bH -aW -aR -aa -aa -aR -aa -aa -aR -gW -gR -gR -gQ -hl -hl -hv -hv -hv -hX -ib -hW -hW -hW -hW -hW -hW -hW -iw -ib -ib -ib -iR -ib -iZ -jl -jg -ju -jy -ju -ju -jy -jy -jy -ju -jy -iZ -aa -aa -jw -iY -iY -jg -jg -ju -ki -kl -kr -jg -kj -jz -jw -aa -aa -aa -jg -ju -jg -aR -aa -iY -ju -iY -aR -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(86,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aR -bh -bo -bp -bo -bF -bo -cd -bo -aW -cv -cM -cA -cA -cy -cw -dz -cw -cN -cy -dA -bo -dY -ed -eh -eD -eh -eY -fj -eh -eN -dY -bo -dz -cw -cw -BO -aR -aR -aR -aR -aR -aR -aR -aW -bo -dz -dz -dz -dz -cy -cw -cw -cN -cw -gL -gQ -gO -gO -gO -gO -bo -aW -aR -aR -aR -aR -aR -aR -aR -DP -gQ -gQ -gS -hm -hw -hB -hI -hv -hv -hW -hW -hW -hW -hH -ib -hW -ib -hW -ib -ib -hH -ib -ib -ja -jg -jg -jC -iY -iY -jM -iY -iY -jT -jU -jT -jN -aa -aa -jw -jw -jz -jg -jy -jy -ju -jy -ju -ju -jg -iY -iY -aa -aa -aa -iY -ju -jg -aR -aa -iY -ju -iY -aR -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(87,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aR -bh -bo -bu -bo -bH -bo -ce -bo -aW -cw -cw -cw -cy -cw -ds -dj -cw -cN -cN -dz -bu -dY -ee -et -eD -eM -eh -eD -eh -fy -dY -bo -dz -cw -cy -Lk -aR -aa -aa -aR -aa -aR -aR -dz -dA -dz -cw -cN -cy -cy -cw -cw -cN -cw -cN -gQ -gQ -gQ -gR -gO -gY -gO -aR -aR -aa -aR -aa -aa -aR -DP -gQ -gR -gO -hn -hn -hn -hJ -hv -hv -hv -if -hW -hv -hW -hW -hW -hW -hW -ib -hv -hW -hv -ib -iY -jm -iY -iY -iY -jw -jw -jw -iY -jz -jz -jz -iY -aa -aa -jw -jw -iY -ju -jg -ke -ju -jy -ks -ju -kb -jg -iY -aa -aa -aa -jg -ju -iY -aR -aa -iY -ju -iY -aR -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(88,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aW -aW -bo -bo -bA -bo -bu -aW -bp -cd -cx -cA -cA -dg -cN -cw -dv -cw -cN -cN -dz -bo -dY -ef -eh -eE -eh -eh -fl -eh -fz -dY -bo -dz -fR -cN -Lk -aR -aR -aR -aR -aR -aR -dz -dz -cw -cw -cN -cN -dm -cN -cw -dm -cy -cy -dR -gR -gT -gQ -gT -gQ -gT -gO -gO -aR -aR -aR -aR -aR -aR -DP -gQ -gR -gO -hl -hx -hC -hK -hl -hY -hv -hW -il -hW -hv -hW -hW -ib -hW -iC -hv -hv -hv -ib -hW -ib -aa -aR -aa -aa -aR -aa -aa -aR -aa -aa -aR -aa -aa -jw -jw -iY -iY -jg -ju -jy -km -jy -jD -jg -kw -iY -aa -aa -aa -jg -ju -iY -aR -aa -iY -ju -iY -kE -kJ -kJ -kJ -kJ -kz -kY -la -la -la -kY -kz -kJ -kJ -kJ -kJ -kJ -kJ -kJ -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(89,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aW -aW -bi -bh -bi -bi -bi -aW -bo -aW -cy -cN -cw -dh -cN -dt -dC -cN -cw -cN -dz -bo -dY -eg -eh -eD -eN -eh -fj -eh -fA -dY -bo -dz -cy -cw -fX -aR -aW -aW -aW -aW -dz -dz -cw -cN -cN -cy -dm -cN -cw -cw -cw -cw -cw -cw -gQ -gQ -gQ -gR -gX -gP -gQ -gO -gO -aW -aW -aW -aW -aR -gW -gR -gR -gS -ho -hl -hD -hl -hv -hv -hv -hv -hW -hv -hW -hv -hW -ib -hW -iC -hv -hW -hv -ib -hW -hW -aR -aR -aR -aR -aR -aR -aR -aR -aR -aR -aR -aa -aa -jw -jw -jw -ka -ju -kf -jD -kn -kt -iY -kv -iY -iY -aa -aa -aa -iY -ju -iY -aR -aa -iY -ju -iY -kE -kJ -kz -kz -kz -kz -kZ -kB -kB -kB -kB -kz -kz -kJ -kJ -kJ -kJ -kJ -kJ -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(90,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aR -aa -aR -aa -aa -aa -aa -aW -bu -aW -cz -cO -cx -cA -cw -dd -dD -cN -dQ -cw -dz -bo -dY -eh -eh -eF -eh -eh -fm -es -eh -dY -bu -dz -cN -cN -BO -aR -aW -bo -bo -bo -dA -cw -cw -cN -cw -cy -cw -cN -dj -dz -dz -gB -dz -dz -gS -gT -gQ -gT -gP -gT -gQ -gT -gY -bo -bH -bo -aW -aR -DP -gR -gQ -gS -hp -hl -hE -hv -hH -hZ -hv -hW -hv -hW -hv -hW -hv -ib -hW -hC -hv -hl -iS -hC -hW -ib -aa -aR -aa -aa -aR -aa -aa -aR -aa -aa -aR -aa -aa -jw -jw -jw -kb -jD -jy -iY -jz -jz -iY -jw -jw -jw -aa -aa -aa -iY -ju -iY -aR -aa -iY -ju -kz -kz -kz -kz -kB -kB -kB -kK -kK -kK -kB -kK -kF -kz -la -la -kY -la -kz -kJ -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(91,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aR -aR -aR -aR -aR -aR -aR -aR -aW -bo -aW -cw -cP -cw -cw -cw -du -dE -cw -cN -cN -dz -bo -dZ -eh -es -eD -eh -eh -eF -ft -eh -dY -bo -dz -cw -cN -Lk -aR -aW -bo -bo -dz -dz -cw -cN -cy -cN -cw -dP -dv -dj -gg -gh -gi -gh -gg -gS -gS -gS -gQ -gQ -gQ -gR -gQ -gO -gO -bo -bo -aW -aR -gS -gR -gR -gS -ho -hl -hC -hv -hv -hv -hv -ig -hv -hv -hv -hv -hv -hW -ir -hC -hv -hW -hy -hC -hW -jn -jg -ju -jg -ju -jg -ju -jg -ju -jg -ju -jg -ju -jg -jw -jw -jw -iY -jz -iY -iY -jw -jw -jw -jw -jw -jw -aa -aa -aR -iY -ju -iY -aR -aa -iY -ju -kz -kF -kB -kB -kQ -kB -kK -kB -lb -le -kB -kB -kB -kz -kB -kB -kK -le -kz -kB -kB -kB -kB -lk -kB -kB -kB -kB -kB -kB -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(92,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aR -aa -aR -bv -bz -bw -bw -bv -ci -bv -cA -cQ -cA -cz -cw -cw -dz -cw -cy -cw -dz -bo -dY -ei -eu -eD -eO -eh -eD -eh -fB -dY -bo -dz -cw -dm -BO -aR -aW -bo -bo -dz -cw -cw -cy -cy -cw -dj -dj -aR -aR -gg -gu -gi -gh -gg -aR -aR -gS -gS -gR -gT -gQ -gT -gQ -gO -bo -bo -aW -aR -DP -gX -gQ -gS -hq -hl -hC -hL -hS -hv -hv -hW -hv -hW -ip -hW -hH -hW -hW -iD -hv -hv -iT -iW -hW -jo -ju -ju -ju -ju -ju -ju -ju -ju -ju -ju -ju -ju -ju -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aR -iY -ju -iY -aR -aa -iY -ju -kz -kz -kB -kK -kK -kB -kB -kB -kK -kK -kK -kK -kK -lo -kK -kB -kB -kB -kz -kB -kB -lZ -kB -kB -kB -kB -kB -kB -kB -lZ -kB -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(93,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aR -aa -aR -bw -bB -bD -bO -bL -bL -bv -bv -cw -cN -cw -cw -cw -dB -cw -dR -cN -dz -bo -dY -dY -dY -dY -dY -eP -dY -dY -dY -dY -bo -dz -cN -cN -BO -aR -aW -bo -gc -dz -cw -cy -cw -cw -dj -dj -aR -aR -aR -gg -gh -gi -gh -gg -aR -aR -aR -gS -gS -gQ -gQ -gQ -gR -gO -bo -bo -aW -aR -gW -gP -gQ -gS -ho -hl -hn -hn -hn -hC -hC -hE -hC -hC -hn -hn -hn -gO -gO -iE -gQ -iJ -iE -gO -gO -gO -jg -ju -jg -ju -jg -ju -jg -ju -jg -ju -jg -ju -jg -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aR -iY -ju -iY -aR -aa -iY -ju -kz -kB -kK -kK -kB -kK -kB -kK -kB -kK -kK -kB -kV -kM -lr -kK -lB -lM -kz -kB -aR -kB -aR -aR -aR -kB -aR -aR -kB -kB -kB -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(94,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aR -aa -aR -bx -bC -bK -bL -bL -bO -bL -cB -bv -cY -cN -cw -dh -dz -cN -cN -dR -dz -bo -bo -bo -bo -dY -dY -eh -dY -bo -bu -bo -bo -dz -cw -cw -dz -aW -aW -bo -dz -dz -cN -dm -cw -cw -dj -aR -aR -aR -gg -gg -gm -gC -gm -gg -gg -aR -aR -aR -gS -gQ -gP -gR -gR -gO -gO -bo -aW -aW -gO -gQ -gR -gO -hp -hy -hn -hM -hv -hv -hv -ih -hv -hW -ia -hW -gO -gO -gQ -gQ -gQ -gQ -gR -gQ -gQ -gO -gO -ju -ju -ju -ju -ju -ju -ju -ju -ju -ju -ju -ju -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aR -iY -ju -iY -aR -aa -iY -ju -kz -kB -kL -kO -kB -kU -kW -kO -kO -lf -li -kO -kB -kz -kP -kP -kP -kP -kz -kB -aR -ma -kB -kB -kB -ma -kB -kB -kB -ma -kB -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(95,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aR -aR -aR -aR -bv -bv -bL -bK -bK -cj -bL -bR -bv -bv -di -dq -cw -dz -cN -cN -cw -dz -bo -bo -bu -ev -dY -dY -es -dY -bo -dz -dz -dz -dz -cw -cN -dz -bo -bo -bo -dz -cN -cw -cN -cw -dj -dj -aR -aR -gg -gg -gp -gi -gh -gi -gM -gg -gg -aR -aR -gS -gS -gQ -gR -gR -gQ -gO -bo -bH -bo -gO -gR -gQ -gO -gO -hz -gO -hN -hv -ia -hv -hv -hH -io -hv -ia -gO -gQ -gQ -gR -gR -gR -gR -gQ -gQ -gQ -gO -ju -jg -ju -jg -ju -jg -ju -jg -ju -jg -ju -jg -aR -aa -aa -aR -aa -aa -aR -aa -aa -aR -aa -aa -aR -aa -aa -aR -iY -kx -iY -aR -aa -kz -kD -kz -kG -kz -kP -kR -kR -kP -kP -kR -lc -lc -lc -kz -kz -lp -lv -lF -lN -kz -kz -aR -kB -aR -aR -aR -kB -aR -aR -aR -kB -kB -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(96,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aR -aa -aR -aa -bv -bv -bL -bL -bL -bL -bK -bL -bv -dj -dj -dv -dF -cw -cN -cy -dz -dz -dz -dz -dz -dz -eG -eZ -eG -dA -dz -dW -cw -cw -cN -cN -dz -dA -dz -dz -dz -cw -cy -cw -cN -dz -gg -gg -gg -gg -gi -gi -gi -gh -gi -gi -gG -gg -gg -gg -gg -gO -gQ -gR -gR -gQ -gO -gO -gO -gY -gO -gR -gQ -gQ -gQ -gR -gO -gO -gO -gS -gS -ii -gS -gS -gO -hA -gO -gQ -gQ -gQ -gQ -gR -gQ -gQ -gR -gQ -gO -gO -gO -gO -gO -gQ -gQ -gQ -gQ -gO -gO -gO -gO -gO -gO -gO -gO -gO -gO -gO -gO -gO -gO -gO -gO -gO -gO -gO -gO -gO -gQ -gO -gO -aR -kz -kB -kz -kB -kz -kE -kE -kE -kE -kE -kE -kE -kE -kE -kz -kB -kK -lw -lG -kB -kB -kz -kB -kB -aR -aa -aR -kB -aR -aa -aR -kB -kB -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(97,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aR -aa -aR -aa -aR -bz -bP -bL -bL -cs -ct -bL -cZ -cN -cN -cw -dG -cN -cN -cy -cw -cN -cN -cw -cw -cy -cw -cN -cN -cw -cw -cw -cN -cN -cw -cN -cy -cN -cw -cN -cw -cy -cw -cN -cw -dz -gh -gh -gh -gm -gi -gh -gh -gh -gh -gh -gi -gm -gh -gh -gh -gO -gQ -gQ -gR -gX -gR -gQ -gQ -gQ -gQ -gQ -gR -gQ -gR -gR -gU -gQ -gQ -gR -gR -gQ -gP -gQ -gP -gR -gR -gP -gR -gR -gQ -gR -gR -gP -gQ -gQ -gR -gQ -gQ -gQ -gT -gQ -gT -gQ -gR -gQ -gQ -gP -gX -gR -gR -gQ -gP -gR -gQ -gQ -gQ -gQ -gQ -gR -gR -gQ -gP -gR -gR -gQ -gQ -ky -kz -kz -kz -kB -kz -kB -kM -kz -kz -kz -kz -kz -kz -kz -kz -kz -kz -kB -kB -lx -lz -kK -kB -kP -aR -kB -aR -aR -aR -kB -aR -aR -aR -kB -kB -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(98,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aR -aR -aR -aR -aR -aR -bw -bD -bL -bL -cs -bK -bL -cZ -cw -cN -cw -dH -cN -cw -cw -cN -cy -cN -cN -cN -cw -cw -cN -cy -cN -cN -cN -cN -cw -cy -cN -cN -cP -cN -cN -cw -cw -cw -cN -cw -gf -gi -gi -gi -gn -gh -gh -gv -gD -gi -gh -gh -gn -gi -gi -gi -gZ -gQ -hb -gR -gQ -gQ -gQ -gQ -gR -gR -gR -gQ -gP -gQ -gP -gQ -gR -gR -gP -gQ -gR -gQ -gQ -gP -gR -gQ -gR -gR -gR -gX -iM -gQ -gQ -gQ -gR -gQ -gR -gP -gR -gU -gQ -gR -gR -gR -gQ -gR -gQ -gQ -gR -gR -gQ -gR -gR -gP -gR -gR -gR -gR -gQ -gR -gQ -gQ -gR -gQ -gQ -gP -gQ -kA -kB -kA -kB -kA -kB -kA -kB -kB -kB -kB -kB -kB -kB -kB -kB -kA -lp -ls -ly -lH -kB -kK -kP -aR -ma -kB -kB -kB -mc -kB -kB -kB -ma -kB -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(99,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aR -aa -aR -aa -aR -by -bQ -bL -bK -cs -bK -bK -cZ -cw -cy -dw -dG -cN -cw -cN -cw -cN -ea -cN -cw -eH -eQ -eS -cw -cw -dR -cN -cN -cy -cN -cw -cN -cN -cN -cw -cN -cw -cN -cy -cw -dz -gh -gh -gh -gm -gi -gq -gh -gh -gh -gN -gi -gm -gh -gh -gh -gO -gR -gQ -gQ -gP -gR -gQ -gR -gR -gQ -gQ -gR -gQ -gQ -gR -gQ -gR -gR -gP -gQ -gR -gQ -gR -gQ -gP -gQ -gR -gQ -gQ -gR -gQ -gR -gR -gQ -gR -gQ -gR -gR -gQ -gQ -jQ -gQ -gQ -gP -gQ -gR -gQ -gP -gQ -gQ -gQ -jQ -gQ -gQ -gQ -gQ -gR -gR -gQ -gQ -gP -gQ -gR -gQ -gR -gR -gQ -kz -kz -kz -kB -kz -kB -kM -kz -kz -kz -kz -kz -kz -kz -kz -kz -kz -kK -kK -lz -lx -kB -kK -kP -aR -kB -aR -aR -aR -kB -aR -aR -aR -kB -kB -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(100,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aR -aa -aR -aa -bv -bv -bR -bL -bL -ct -bK -cR -bv -dj -dj -dj -dF -cw -cw -cN -dz -dz -dz -dz -dz -eb -eU -eR -eb -dA -dz -cw -cN -cw -fS -cy -dz -dA -dz -dz -dz -cN -cN -fS -cy -dz -gg -gg -gg -gg -gi -gi -gi -gh -gG -gi -gv -gg -gg -gg -gg -gO -gR -gR -gR -gQ -gO -gO -gO -gY -gO -gQ -gQ -gR -gR -gR -gO -gO -hT -gS -gS -ij -gW -gS -gO -gO -gO -gU -gQ -gP -gR -gR -gQ -gQ -gP -gQ -gO -gO -gO -gO -gO -gO -gO -gO -gO -gO -gT -gT -gO -gO -gO -gO -gO -gO -gO -gO -gT -gT -gT -gT -gT -gT -gT -gO -gO -gO -gQ -gO -gO -aa -kz -kB -kz -kB -kz -kE -kE -kE -kE -kE -kE -kE -kE -kE -kz -le -kK -lA -lA -kB -lT -kz -kB -kB -aR -aa -aR -kB -aR -aa -aR -kB -kB -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(101,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aR -aR -aR -aR -bv -bv -bL -bK -bK -ck -bL -cC -bv -bv -dk -db -dx -dz -cy -cN -cN -dz -bo -bo -bo -bo -eb -HP -fa -eb -bo -dz -dz -dz -dz -cN -cN -dz -bo -bo -bo -dz -cw -cy -cN -cw -dj -dj -aR -aR -gg -gg -gp -gi -gh -gi -gp -gg -gg -aR -aR -gS -gS -gQ -gQ -gR -gQ -gO -bo -bo -bo -gO -gR -gP -gO -gO -gO -gO -hr -hr -hr -hr -hr -hr -hr -hr -hr -gO -gU -gQ -gQ -gQ -gP -gR -gR -gR -gQ -gO -jg -jg -jg -ju -ju -jg -jg -jg -jg -jg -jg -jg -jg -jg -jg -jw -jg -jw -jg -jw -aa -aR -aa -aa -aR -aa -aa -aR -iY -kx -iY -aR -aa -kz -kD -kz -kG -kz -kP -kR -kR -kR -kP -lc -kP -kR -kP -kz -kz -lp -lv -lF -lN -kz -kz -aR -kB -aR -aR -aR -kB -aR -aR -aR -kB -kB -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(102,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aR -aa -aR -by -bD -bK -bS -bL -bL -bL -bv -bv -da -cw -cG -cP -dz -cw -cN -cw -dz -bo -bo -bo -bH -eb -ob -fb -eb -bo -bH -bo -bo -dz -cN -cN -dz -aW -aW -bo -dz -dz -cw -cN -cN -cw -dv -aR -aR -aR -gg -gg -gm -gE -gm -gg -gg -aR -aR -aR -gS -ha -gQ -gR -gQ -gO -gO -bo -aW -aW -gO -gQ -gR -gO -hr -hr -hr -ht -hs -hr -hs -hs -hs -hs -hs -hr -gO -gO -ix -gR -gQ -gQ -gQ -gQ -gR -gO -gO -jg -ju -ju -ju -ju -jg -jg -jg -jg -jg -jg -jg -jg -jg -jg -jw -jg -jw -jg -jw -aa -aa -aa -aa -aa -aa -aa -aR -iY -ju -iY -aR -aa -iY -ju -kz -kB -kN -kL -kS -kO -kX -kK -kX -kO -kO -lj -ll -kz -kP -kP -kP -kR -kz -kB -aR -ma -kB -kB -kB -ma -kB -kB -kB -ma -kB -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(103,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aR -aa -aR -bz -bE -bM -bL -cf -bL -bv -bv -cS -cG -cw -cw -cN -dI -cy -cN -cN -dz -bo -eb -eb -eb -eb -eU -fc -eb -eb -eb -eb -bo -dz -cN -cy -fX -aR -aW -bo -bo -dz -cy -cN -cN -cy -dP -dP -aR -aR -aR -gg -gw -gi -gK -gg -aR -aR -aR -gS -gS -gQ -gQ -gR -gR -gO -bo -bH -aW -aR -gS -gQ -gQ -gS -hs -hr -hF -hs -hs -hr -hs -hr -ht -hs -hs -hr -hr -gO -gO -iF -gQ -Jz -iF -gO -gO -gO -aR -ju -ju -ju -ju -jg -jg -ju -ju -ju -ju -ju -ju -ju -jg -jg -jg -jg -jg -jg -jw -aa -aa -aa -aa -aa -aa -aa -aR -iY -ju -iY -aR -aa -iY -ju -kz -kB -kB -kK -kK -kV -kB -kK -kK -kK -kB -lk -kB -kM -lt -lB -kB -kZ -kz -kB -aR -kB -aR -aR -aR -kB -aR -aR -kB -kB -kB -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(104,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aR -aa -aR -bv -bw -by -by -bv -cl -bv -cD -cP -cG -cy -cG -cw -dz -cN -cN -cw -dz -bH -eb -ej -ew -eI -eV -fd -fn -fu -fC -eb -bo -dz -cw -cN -Lk -aR -aW -ga -bn -dz -cw -cw -cN -cw -cw -dj -dj -aR -aR -gg -gx -gF -gK -gg -aR -aR -gV -gS -gQ -gQ -gR -gQ -gQ -gO -bo -bo -aW -aR -DP -gQ -gR -hg -hs -hr -hr -hs -hr -hr -ic -hr -hs -hr -hr -hs -hr -hr -hr -hr -iK -iN -hr -hr -hr -hP -aR -ju -ju -ju -ju -jg -jg -ju -ju -ju -ju -ju -ju -ju -ju -ju -ju -ju -ju -ju -ju -aa -aa -aa -aa -aa -aa -aa -aR -iY -ju -iY -aR -aa -iY -ju -kz -kH -kB -kK -kK -kB -kB -kB -ld -kK -kB -kB -kK -lo -kB -kB -kB -kK -kz -kB -kB -mb -kB -kB -kB -kB -kB -kB -kB -mb -kB -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(105,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aR -aR -aR -aR -aR -aR -aR -aR -aW -bo -aW -cE -cw -cw -cN -cG -cw -dJ -cN -cN -cN -dz -bo -eb -ek -ex -eJ -eJ -fe -fo -fv -fD -eb -bo -dz -cy -cN -Lk -aR -aW -bo -bu -dz -dz -cN -cN -cN -cN -cN -dj -dj -dz -gg -gy -gG -gK -gg -gS -gS -gS -gQ -gR -gR -gR -gQ -gO -gO -bo -hd -aW -aR -DP -gX -gR -gS -hr -hr -hs -hr -hs -hr -hr -hr -hr -hV -ie -ie -hr -hs -hr -hr -hr -hs -hs -hs -hr -hP -hP -jg -iY -iY -iY -iY -iY -iY -iY -iY -iY -iY -iY -iY -iY -iY -iY -ju -kd -ju -jg -aa -aa -aa -aa -aa -aa -aa -aR -iY -ju -iY -aR -aa -iY -ju -kz -kI -kK -kB -kB -kK -kK -kK -kV -kB -kB -kV -kK -lq -kK -kK -kB -kB -kz -kB -kB -kB -kB -kB -kB -kB -kB -kB -kB -kB -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(106,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aR -aa -aR -aa -aa -aa -aa -aW -bo -aW -cF -cG -db -dl -cw -cy -dK -dy -cw -cN -dz -bo -eb -el -ey -eJ -eJ -ff -eJ -eA -fE -eb -bo -dz -cN -cN -BO -aR -aW -bp -bo -bo -dA -cw -cN -cN -cy -cN -cw -dj -dz -dz -dz -gH -dz -dz -gS -gQ -gR -gR -gP -gQ -gR -gX -gY -bo -bH -bp -aW -aR -gS -gQ -gP -gS -hs -hr -hr -hO -hs -hr -hr -hr -hr -hr -hr -hs -hr -hr -hs -hs -hs -hr -hr -hr -hr -hr -hP -ju -iY -ju -jg -ju -jg -ju -jg -ju -jg -ju -jg -ju -ju -ju -iY -ju -ju -jw -jg -aa -aa -aa -aa -aa -aa -aa -aR -iY -ju -iY -aR -aa -iY -kj -kz -kz -kz -kz -kT -kB -kF -kB -kK -lg -kK -kB -lm -kz -kP -kP -kP -kP -kz -kJ -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(107,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aW -aW -bh -bo -bi -bo -bi -aW -bo -aW -cG -cw -dc -dm -cw -cG -dK -cw -cN -cN -dz -bo -eb -em -ez -eJ -eJ -fg -fp -eA -fF -eb -bo -dz -cN -cN -Lk -aR -aW -aW -aW -aW -dz -dz -cw -cw -cw -cN -cN -go -cw -cN -cN -cw -cw -cN -gQ -gP -gR -gQ -gQ -gR -gQ -gO -gO -aW -aW -aW -aW -aR -DP -gR -gQ -hh -hr -hr -hr -hP -hU -hP -hP -hP -im -hP -hr -ht -iu -hs -ht -hG -hs -hs -hF -iX -jb -jp -hP -jg -iY -ju -ju -ju -ju -ju -ju -ju -ju -ju -ju -ju -ju -ju -iY -ju -ju -jg -jg -aa -aa -aa -aa -aa -aa -aa -aR -iY -jg -iY -aR -aa -iY -ju -iY -kE -kJ -kz -kz -kz -kz -kB -kK -lh -kB -kI -kz -kz -kJ -kJ -kJ -kJ -kJ -kJ -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(108,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aW -aW -bo -bu -bF -bo -bp -aW -bo -aW -cH -cy -dd -dn -cw -cG -dL -cN -cN -cy -dz -bo -eb -en -eA -eJ -eJ -eJ -fq -eA -fG -eb -fK -dR -cw -cw -BO -aR -aR -aR -aR -aR -aR -dz -dz -cN -cP -cw -cN -cw -cN -cy -cw -cw -cN -cw -gR -gR -gQ -gR -gQ -gQ -gO -gO -aR -aR -aR -aR -aR -aR -gW -gR -gQ -gS -hs -hs -hr -hP -hP -hP -id -hP -hP -hP -hr -hr -iu -hs -hr -hr -hs -hs -hr -hr -hr -jq -hP -ju -iY -ju -jg -ju -jg -ju -jg -ju -jg -ju -jg -iY -jg -ju -iY -ju -jg -jw -jg -aa -aa -aa -aa -aa -aa -aa -aR -iY -jg -iY -aR -aa -iY -ju -iY -kE -kJ -kJ -kJ -kJ -kz -kP -kR -kP -kR -kP -kz -kJ -kJ -kJ -kJ -kJ -kJ -kJ -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(109,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -bh -bp -bo -bG -bo -bo -ce -bo -aW -cI -cw -db -dd -cG -cG -dM -cN -cw -cN -dz -bo -eb -nb -eA -eJ -eJ -eJ -fq -eA -fH -eb -bo -dz -cw -cw -BO -aa -aa -aa -aR -aa -aR -aR -dz -dA -dz -cw -cw -cw -cN -cN -cw -cN -cw -cw -gR -gR -gQ -gQ -gO -gY -gO -aR -aR -aa -aR -aa -aa -aR -DP -gR -gR -DP -ht -hr -hr -hr -hr -hs -hr -hr -hr -hr -hr -hr -hs -hs -hs -hr -hs -hr -ht -hr -hs -iu -hP -ju -iY -ju -ju -ju -ju -jP -ju -ju -ju -ju -ju -ju -ju -jD -iY -ju -ju -jw -jg -aa -aa -aa -aa -aa -aa -aa -aR -iY -jg -iY -aR -aa -iY -ju -iY -aR -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(110,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -bi -bo -bo -bH -bo -bo -aW -bo -aW -cG -cy -cG -do -cG -cP -dz -cN -cy -cw -dA -bo -eb -ep -eA -eJ -eJ -eJ -fq -eA -fI -eb -bo -dz -cN -cN -BO -aR -aR -aR -aR -aR -aR -aR -aW -bo -dz -dz -dz -dz -cw -cw -cw -cw -cy -ea -gQ -gO -gO -gO -gO -bo -aW -aR -aR -aR -aR -aR -aR -aR -gS -gP -he -gS -hr -hr -hG -hr -hr -hr -hr -hr -hr -hr -hs -hr -hr -hr -iu -hr -hr -iu -hr -hr -iu -hr -hP -ju -iY -ju -jg -ju -jg -ju -jg -ju -jg -ju -jg -jg -ju -ju -iY -ju -ju -jg -jg -aa -aa -aa -aa -aa -aa -aa -aR -iY -ju -iY -aR -aa -iY -ju -iY -aR -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(111,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aW -aW -bq -bo -bo -bo -bu -aW -bu -aW -aW -cG -cP -cG -dr -cy -dN -cN -dS -cN -dz -bo -eb -eq -eB -eA -eJ -eJ -fr -eA -fJ -eb -bo -dz -cw -cw -Lk -aR -aa -aa -aR -aa -aa -aR -aW -bo -bo -bo -bo -dz -dz -dz -cw -cw -cw -dz -gO -gO -bo -bo -bo -bH -aW -aR -aa -aa -aR -aa -aa -aR -gW -gQ -gR -hh -hr -hs -hs -hr -hs -hs -hs -hr -hs -hs -hr -hr -hr -hr -iy -iu -hr -iO -iu -hr -jc -iu -hP -ju -iY -ju -ju -ju -ju -ju -ju -ju -ju -jY -ju -ju -ju -ju -ju -ju -jg -jw -jg -aa -aa -aa -aa -aa -aa -aa -aR -iY -jg -iY -aR -aa -iY -ju -iY -aR -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ln -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(112,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aW -aW -bi -bi -bi -bh -bi -aW -bo -bo -aW -aW -de -cG -cN -dy -dz -cw -cw -cw -dz -bo -eb -eb -eC -eK -eW -fh -fs -fw -eb -eb -bo -dz -cw -cy -Lk -aa -aR -aR -aR -aR -aR -aR -aW -bo -bo -bo -bH -ga -bo -dz -cw -cN -cw -dz -bo -bH -bo -bo -bo -gt -aW -aR -aR -aR -aR -aR -aR -aR -DP -gR -gQ -gS -hr -hr -hs -hr -hV -hV -ie -ie -hs -hr -hs -hs -hr -hP -iz -iG -hP -iz -iG -hP -iz -iG -hP -jg -iY -jg -jg -ju -jg -ju -jg -ju -jg -ju -jg -jw -ju -ju -iY -ju -ju -jw -jg -aa -aa -aa -aa -aa -aa -aa -aR -iY -jg -iY -aR -aa -dO -gj -aR -aR -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(113,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aR -aR -aR -aR -aR -aR -aR -aR -aW -bo -bo -bo -aW -aW -dm -cG -cN -dz -cw -cw -cy -dz -bo -bH -eb -eb -eb -eb -eb -eb -eb -eb -bo -bH -dz -cN -cN -BO -aR -aa -aa -aR -aa -aa -aR -aW -aW -aW -aW -aW -aW -bo -dz -cw -cw -cN -dz -bo -aW -aW -aW -aW -aW -aW -aR -aa -aa -aR -aa -aa -aR -gS -gQ -gR -gO -hs -hr -hr -hr -ht -hr -hF -hr -in -hr -iq -hr -hr -hP -iA -iH -hP -iP -iU -hP -jd -jr -hP -jD -iY -jg -jg -ju -ju -ju -jg -iY -jg -ju -jg -jg -jg -ju -iY -ju -jg -jg -jg -aa -aa -aa -aa -aa -aa -aa -aR -iY -ju -jg -aa -aa -dO -gj -aR -aR -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(114,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aR -aW -cm -bo -bu -bo -aW -aW -aW -ce -aW -bo -dT -cN -dz -dz -bo -bo -bo -bo -bo -bo -bo -bo -bo -bo -dz -dz -cw -cN -dz -dz -aR -aR -aR -aR -aR -aR -aR -aR -aR -aR -aR -aW -bo -dA -cN -cN -cw -dA -bo -aW -aR -aR -aR -aR -aR -aR -aR -aR -aR -aR -aR -gO -gO -gP -gQ -gO -gO -hr -hG -hr -hr -hr -hr -hr -hr -hr -hr -hr -hr -hP -iB -iI -hP -iQ -iV -hP -je -js -hP -jg -iY -jg -jw -ju -jg -ju -jg -jw -jg -ju -jg -jw -ju -ju -iY -ju -ju -jw -jg -aa -aa -aa -aa -aa -aa -aa -aa -iY -jg -jg -aa -aa -aR -gj -aR -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(115,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aR -aW -aW -bo -bo -bH -bo -bp -bo -bu -ce -bo -cy -cN -cw -dz -dz -dz -dz -dz -dz -dz -dz -dz -dz -dz -dz -fM -cw -cN -cw -dz -BO -dj -BO -Lk -dj -Lk -BO -BO -dj -BO -Lk -dz -dz -dz -cw -cN -cw -dz -gO -gO -DP -gW -gW -DP -DP -gW -DP -gW -DP -gW -DP -gO -gR -gQ -gT -gQ -gO -hA -gO -gO -gO -hT -gO -gO -gO -gO -gO -gO -hA -gO -gO -gO -gO -gO -gO -gO -gO -gO -gO -gQ -iY -jg -jw -ju -ju -iY -ju -jw -jg -ju -jg -jw -jg -ju -iY -kc -jg -aa -aR -aa -aa -aa -aa -aa -aa -aa -aa -iY -ju -jg -aa -aa -aR -aa -aR -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(116,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aR -aW -aW -aW -aW -aW -aW -aW -aW -aW -bH -cN -cN -cN -cw -cN -cN -cw -cw -cy -cN -cw -cw -cN -cN -cN -cN -cy -do -cw -cN -cw -cN -cw -cN -cN -cN -cw -cN -cy -cw -cN -cw -cP -cw -cy -cN -cw -cN -gR -gP -gU -gR -gQ -gQ -gQ -gR -gR -gR -gR -gQ -gR -gQ -gQ -gT -gR -gQ -gR -gQ -gR -gQ -gQ -gR -gR -gQ -gT -gP -gT -gQ -gQ -gR -gQ -gP -gR -gQ -gQ -gR -gQ -gT -gQ -gT -iY -jg -jg -jg -jg -iY -jg -jg -jg -jg -jg -jg -ju -ju -iY -ju -kg -aR -aR -aa -aa -aa -aa -aa -aa -aa -aa -iY -jg -jg -aa -aa -aR -aR -aR -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(117,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aR -aR -aR -aR -aR -aR -aR -aR -dz -cN -do -cw -cN -cN -cN -cw -cN -cw -cN -cN -cw -cy -cN -cN -cP -dm -cN -cw -dR -cw -cN -cy -cw -cN -cw -cN -cw -cy -dR -cN -cN -cw -cN -cN -cw -cw -cN -cN -gQ -gR -gQ -gQ -gQ -gR -gR -gR -gP -gR -gU -gQ -gR -gQ -gR -gR -gR -gP -gQ -gQ -gR -gR -gP -gR -gQ -gQ -gT -gR -gT -gQ -gR -gR -gR -gR -gQ -gT -gR -gR -gP -gT -gR -gT -iY -jg -jw -jw -ju -iY -ju -jw -jg -jw -jg -jw -jg -ju -iY -ju -jg -aa -aR -aa -aa -aa -aa -aa -aa -aa -aa -jg -jg -jg -aa -aa -aR -aa -aR -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(118,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aR -dz -cN -cy -cw -dW -dz -BO -Lk -BO -BO -Lk -BO -BO -Lk -Lk -BO -dz -cw -cw -cw -cy -dz -dz -dz -dz -dz -dz -dz -dz -dz -dz -dz -dz -dz -dz -dz -cw -cN -cN -dz -gQ -gO -gO -gO -gO -gO -gO -gO -gO -gO -gO -gO -gO -gO -gQ -gQ -gR -gQ -gO -DP -DP -gW -DP -DP -DP -DP -DP -DP -DP -gO -gW -DP -DP -gW -gW -DP -AR -DP -gW -DP -DP -gW -iY -jg -jw -jw -jg -iY -jg -jw -jg -jw -jg -jw -jg -jw -jg -jw -jg -aa -aR -aa -aa -aa -aa -aa -aa -aa -aa -aR -gj -aR -aa -aa -aa -aR -aR -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(119,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aR -dz -BO -dU -Lk -BO -dz -aR -aR -aR -aR -aR -aR -aR -aR -aR -aR -dz -dz -dz -dz -dz -dz -bo -bo -bo -bH -bo -bo -bo -bo -bo -bo -bo -bH -bo -aW -bo -fQ -bo -aW -gt -bo -bo -bo -bo -bo -bp -bo -bo -bo -bo -bo -bo -gO -DP -gW -DP -DP -gO -aR -aR -aR -aR -aR -aR -aR -aR -aR -aR -aR -aR -aR -aR -aR -aR -aR -aR -aR -aR -aR -gk -aR -iY -jg -jw -jw -jw -jw -jw -jw -jw -jw -jw -jw -jw -jw -jw -jw -jw -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aR -aa -aR -aa -aa -aa -aa -aR -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -md -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(120,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aR -aR -aR -aR -aR -aR -aR -aa -aa -aR -aa -aa -aR -aa -aa -aR -aW -bH -bo -bo -bo -bo -bH -aW -aW -aW -aW -aW -aW -aW -aW -aW -aW -aW -aW -aW -fQ -bo -fQ -aW -aW -aW -aW -aW -aW -aW -aW -aW -aW -aW -aW -aW -aW -aW -aR -aR -aR -aR -aR -aR -aR -aR -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aR -aR -jg -jw -jw -jw -jw -jw -jw -jw -jw -jw -jw -jw -jw -jw -jw -jw -jw -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aR -aa -aa -aa -aa -aa -aa -aR -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(121,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aR -aa -aa -aR -aa -aa -aR -aa -aa -aR -aW -aW -bo -bo -bH -bo -bo -aW -fN -fN -fO -aR -aR -aR -aR -aR -aR -aR -aR -dO -gj -gI -gr -dO -aR -aR -aR -aR -aR -aR -aR -aR -aR -aR -aR -aR -aR -aR -aR -aR -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -gj -aR -jg -jw -jw -jw -jw -jw -jw -jw -jw -jw -jw -jw -jw -jw -jw -jw -jw -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aR -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(122,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aW -aW -aW -aW -aW -aW -aW -fN -fN -fN -aa -aa -aa -aa -aa -aa -aa -aa -dO -gr -gj -aR -dO -aR -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aR -gj -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(123,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -fL -aa -aa -aa -fN -fN -fL -fN -fN -fO -aa -aa -aa -aa -aa -aa -aa -aa -dO -gj -gr -gk -dO -aR -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aR -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(124,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -fL -aa -aa -aa -fO -fV -fL -fN -fV -fN -aa -aa -aa -aa -aa -aa -aa -aa -aR -gj -gj -gj -dO -aR -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aR -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(125,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -fN -fN -fL -fN -fN -fO -aa -aa -aa -aa -aa -aa -aa -aa -aR -gj -gr -gj -dO -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(126,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -fO -fN -fL -fN -fN -fN -aa -aa -aa -aa -aa -aa -aa -aa -aR -gj -gr -gj -aR -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(127,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -fU -fO -fN -fN -fN -fO -aa -aa -aa -aa -aa -aa -aa -aa -aR -gj -gj -gj -aR -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(128,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -fU -fN -fN -fN -fN -fN -aa -aa -aa -aa -aa -aa -aa -aa -aR -gj -gk -gr -aR -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(129,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -fi -aa -aa -aa -aa -aa -aa -aa -aa -aa -fU -fO -fN -fN -fN -fO -aa -aa -aa -aa -aa -aa -aa -aa -aR -gj -gj -gj -aR -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(130,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aR -aa -fV -fN -fO -aa -aa -aa -aa -aa -aa -aa -aa -aa -gr -aR -gj -aR -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(131,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aR -aR -fN -fN -fN -aa -aa -aa -aa -aa -aa -aa -aa -aR -gj -gj -gj -aR -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(132,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aR -aa -gd -fN -fN -aa -aa -aa -aa -aa -aa -aa -aa -aR -gk -aR -gj -aR -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(133,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aR -aR -fN -fN -fV -aa -aa -aa -aa -aa -aa -aa -aa -aR -aa -gj -gj -aR -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(134,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aR -aa -fO -fN -fO -aa -aa -aa -aa -aa -aa -aa -aa -aR -aa -aR -gr -aR -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(135,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aR -aR -fO -fN -fO -aa -aa -aa -aa -aa -aa -aa -aa -aR -aR -gj -gj -aR -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(136,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aR -aa -fO -fN -fO -aa -aa -aa -aa -aa -aa -aa -aa -aR -aa -gj -gk -aR -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(137,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aR -aa -aR -aa -aR -aa -aa -aa -aa -aa -aa -aa -aa -aR -aR -gj -aR -aR -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(138,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aR -aa -aR -aa -aR -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -it -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(139,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aR -aa -gJ -aa -aR -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(140,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(141,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(142,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(143,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(144,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(145,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(146,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(147,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -gb -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(148,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(149,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(150,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(151,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -aM -aS -aS -aS -aS -aS -bI -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(152,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ag -aJ -ag -ag -aX -bj -aK -ag -ag -aJ -ag -ab -cn -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(153,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ag -ag -ag -ag -ag -aY -bk -br -ag -ag -ag -bT -au -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(154,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -au -aA -ag -ag -ag -ag -ag -ag -ag -ag -ag -bT -au -ab -ab -cn -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(155,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -am -ab -ab -ag -ag -ag -ag -ag -ag -ag -ag -ag -ag -ag -ab -ab -ag -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(156,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ag -ag -ab -aB -aK -aN -ag -ag -ag -ag -ag -bJ -ag -ag -ab -ag -ag -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(157,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ag -an -ag -ab -ab -ab -ab -ab -aZ -bl -aZ -ab -ab -ab -ab -ab -ag -ag -ag -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(158,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ag -ag -ag -av -aC -ag -ag -aJ -ag -ag -ag -aJ -ag -ab -bU -ag -ag -ag -ag -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(159,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ah -ag -ag -aw -ag -ag -ag -ag -ag -ag -ag -ag -ag -ab -bV -ag -ag -ag -cJ -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(160,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ag -ag -as -ax -aD -ag -ab -ab -ab -ab -ab -ab -ag -ab -bW -ag -ag -ag -cK -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(161,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ag -ag -ag -ab -ag -ag -aO -ag -ba -ag -ag -ab -ag -ab -ab -ag -ag -ag -ag -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(162,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ao -ag -ab -ag -ag -ab -aT -bb -ag -bs -ab -ag -ag -ab -ab -co -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(163,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -ac -ab -ag -ag -ay -ag -ag -ab -ag -bc -ag -ag -aO -ag -aj -bX -ag -ag -ab -cL -cT -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(164,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ab -ab -ag -ab -ag -ag -ab -ab -ab -ab -ab -ab -ag -aj -bY -cg -cp -ab -aj -cU -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(165,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ai -ab -ab -ab -ag -ag -ag -ag -ag -ag -aj -ag -aj -aj -bZ -aj -cq -ab -aj -cU -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aR -aa -aa -aa -aR -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(166,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -aj -ab -at -at -aE -aL -aP -aU -aL -ak -aL -aU -aL -ak -ca -ch -cr -ab -aj -cU -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aR -aa -aa -aa -aR -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(167,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -aj -ab -ab -ab -aF -ab -ab -ab -bd -bm -bd -ab -ab -ab -aF -ab -ab -ab -aj -cU -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aR -aR -aa -aa -aa -aR -aR -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(168,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -ae -ak -ap -ak -az -aG -ab -aQ -aV -ag -ag -ag -aJ -ag -ab -cb -az -ak -ap -ak -cV -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aR -lu -lO -lJ -lu -lu -aR -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(169,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -af -ab -ab -aj -aj -aH -ab -ag -ag -ag -ag -ag -ag -bg -ab -cc -aj -aj -ab -ab -cW -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -lu -lu -lP -lJ -lJ -lu -lu -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(170,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -aq -aq -aq -ab -ab -ab -ag -an -ag -ag -ag -ab -ab -ab -aq -aq -aq -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -lu -lu -lI -lJ -lJ -lU -lW -lu -lu -aR -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(171,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -al -ar -ar -ar -aI -aa -ab -ag -ag -ag -ag -ag -ab -aa -al -ar -ar -ar -aI -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -lu -lC -lJ -lQ -lU -lU -lX -lJ -lu -aa -aR -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(172,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ag -ag -ag -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -lu -lD -lK -lR -lU -lR -lR -lU -lJ -aR -aR -aR -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(173,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -aO -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -lu -lE -lJ -lJ -lU -lU -lU -lJ -lu -aa -aR -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(174,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ag -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -lu -lu -lL -lJ -lJ -lR -lY -lu -lu -aR -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(175,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -aO -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aR -lu -lu -lS -lJ -lV -lu -lu -aR -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(176,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ag -ag -ag -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -lu -lu -lu -lu -lu -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(177,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -be -ag -ag -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(178,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ag -ag -ag -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(179,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ag -ag -ag -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(180,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -bf -ag -ag -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(181,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ag -an -ag -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(182,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ag -ag -ag -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(183,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -bg -ag -bt -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(184,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -bg -ag -ag -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(185,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -aO -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(186,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(187,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(188,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(189,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(190,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(191,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(192,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(193,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(194,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(195,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(196,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(197,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(198,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(199,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(200,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} diff --git a/maps/away/derelict/derelict.dm b/maps/away/derelict/derelict.dm deleted file mode 100644 index be523adb52b0d..0000000000000 --- a/maps/away/derelict/derelict.dm +++ /dev/null @@ -1,69 +0,0 @@ -#include "derelict_areas.dm" - -/obj/effect/overmap/visitable/sector/derelict - name = "debris field" - desc = "A large field of miscellanious debris." - icon_state = "object" - known = FALSE - - initial_generic_waypoints = list( - "nav_derelict_1", - "nav_derelict_2", - "nav_derelict_3", - "nav_derelict_4", - "nav_derelict_5", - "nav_derelict_6", - "nav_derelict_7" - ) - -/datum/map_template/ruin/away_site/derelict - name = "Derelict Station" - id = "awaysite_derelict" - description = "An abandoned construction project." - suffixes = list("derelict/derelict-station.dmm") - spawn_cost = 1 - accessibility_weight = 10 - area_usage_test_exempted_areas = list(/area/AIsattele) - area_usage_test_exempted_root_areas = list(/area/constructionsite, /area/derelict) - apc_test_exempt_areas = list( - /area/AIsattele = NO_SCRUBBER|NO_VENT|NO_APC, - /area/constructionsite = NO_SCRUBBER|NO_VENT|NO_APC, - /area/constructionsite/ai = NO_SCRUBBER|NO_VENT, - /area/constructionsite/atmospherics = NO_SCRUBBER|NO_VENT, - /area/constructionsite/teleporter = NO_SCRUBBER|NO_VENT, - /area/derelict/ship = NO_SCRUBBER|NO_VENT, - /area/djstation = NO_SCRUBBER|NO_VENT|NO_APC - ) - area_coherency_test_subarea_count = list( - /area/constructionsite = 7, - /area/constructionsite/maintenance = 14, - /area/constructionsite/solar = 3, - ) - -/obj/effect/shuttle_landmark/derelict/nav1 - name = "Debris Navpoint #1" - landmark_tag = "nav_derelict_1" - -/obj/effect/shuttle_landmark/derelict/nav2 - name = "Debris Navpoint #2" - landmark_tag = "nav_derelict_2" - -/obj/effect/shuttle_landmark/derelict/nav3 - name = "Debris Navpoint #3" - landmark_tag = "nav_derelict_3" - -/obj/effect/shuttle_landmark/derelict/nav4 - name = "Debris Navpoint #4" - landmark_tag = "nav_derelict_4" - -/obj/effect/shuttle_landmark/derelict/nav5 - name = "Debris Navpoint #5" - landmark_tag = "nav_derelict_5" - -/obj/effect/shuttle_landmark/derelict/nav6 - name = "Debris Navpoint #6" - landmark_tag = "nav_derelict_6" - -/obj/effect/shuttle_landmark/derelict/nav7 - name = "Debris Navpoint #7" - landmark_tag = "nav_derelict_7" \ No newline at end of file diff --git a/maps/away/derelict/derelict_areas.dm b/maps/away/derelict/derelict_areas.dm deleted file mode 100644 index 4bb4a1a534cde..0000000000000 --- a/maps/away/derelict/derelict_areas.dm +++ /dev/null @@ -1,61 +0,0 @@ -/area/derelict/ship - name = "\improper Abandoned Ship" - icon_state = "yellow" - -/area/AIsattele - name = "\improper AI Satellite Teleporter Room" - icon_state = "teleporter" - ambience = list('sound/ambience/ambimalf.ogg') - -/area/constructionsite - name = "\improper Construction Site" - icon_state = "storage" - ambience = list('sound/ambience/spookyspace1.ogg', 'sound/ambience/spookyspace2.ogg') - -/area/constructionsite/storage - name = "\improper Construction Site Storage Area" - -/area/constructionsite/bridge - name = "\improper Construction Site Bridge" - icon_state = "bridge" - -/area/constructionsite/hallway/aft - name = "\improper Construction Site Aft Hallway" - icon_state = "hallP" - -/area/constructionsite/hallway/fore - name = "\improper Construction Site Fore Hallway" - icon_state = "hallS" - -/area/constructionsite/atmospherics - name = "\improper Construction Site Atmospherics" - icon_state = "green" - -/area/constructionsite/medical - name = "\improper Construction Site Medbay" - icon_state = "medbay" - -/area/constructionsite/ai - name = "\improper Construction Computer Core" - icon_state = "ai" - -/area/constructionsite/engineering - name = "\improper Construction Site Engine Bay" - icon_state = "engine" - -/area/constructionsite/teleporter - name = "Construction Site Teleporter" - icon_state = "yellow" - -/area/constructionsite/solar - name = "\improper Construction Site Solars" - icon_state = "solar" - area_flags = AREA_FLAG_EXTERNAL - requires_power = 1 - always_unpowered = 1 - has_gravity = FALSE - base_turf = /turf/space - -/area/constructionsite/maintenance - name = "\improper Construction Site Maintenance" - icon_state = "yellow" \ No newline at end of file diff --git a/maps/away/empty.dmm b/maps/away/empty.dmm deleted file mode 100644 index 3688c3919e136..0000000000000 --- a/maps/away/empty.dmm +++ /dev/null @@ -1,40405 +0,0 @@ -//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE -"a" = ( -/turf/space, -/area/space) - -(1,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(2,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(3,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(4,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(5,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(6,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(7,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(8,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(9,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(10,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(11,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(12,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(13,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(14,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(15,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(16,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(17,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(18,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(19,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(20,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(21,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(22,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(23,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(24,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(25,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(26,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(27,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(28,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(29,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(30,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(31,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(32,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(33,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(34,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(35,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(36,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(37,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(38,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(39,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(40,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(41,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(42,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(43,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(44,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(45,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(46,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(47,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(48,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(49,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(50,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(51,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(52,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(53,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(54,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(55,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(56,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(57,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(58,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(59,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(60,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(61,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(62,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(63,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(64,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(65,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(66,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(67,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(68,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(69,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(70,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(71,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(72,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(73,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(74,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(75,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(76,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(77,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(78,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(79,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(80,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(81,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(82,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(83,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(84,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(85,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(86,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(87,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(88,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(89,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(90,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(91,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(92,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(93,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(94,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(95,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(96,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(97,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(98,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(99,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(100,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(101,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(102,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(103,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(104,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(105,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(106,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(107,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(108,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(109,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(110,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(111,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(112,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(113,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(114,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(115,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(116,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(117,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(118,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(119,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(120,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(121,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(122,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(123,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(124,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(125,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(126,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(127,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(128,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(129,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(130,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(131,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(132,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(133,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(134,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(135,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(136,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(137,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(138,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(139,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(140,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(141,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(142,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(143,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(144,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(145,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(146,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(147,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(148,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(149,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(150,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(151,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(152,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(153,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(154,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(155,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(156,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(157,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(158,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(159,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(160,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(161,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(162,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(163,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(164,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(165,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(166,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(167,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(168,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(169,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(170,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(171,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(172,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(173,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(174,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(175,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(176,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(177,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(178,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(179,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(180,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(181,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(182,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(183,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(184,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(185,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(186,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(187,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(188,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(189,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(190,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(191,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(192,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(193,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(194,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(195,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(196,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(197,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(198,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(199,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(200,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} diff --git a/maps/away/errant_pisces/errant_pisces.dm b/maps/away/errant_pisces/errant_pisces.dm deleted file mode 100644 index 38d33f67fbb7f..0000000000000 --- a/maps/away/errant_pisces/errant_pisces.dm +++ /dev/null @@ -1,237 +0,0 @@ -#include "errant_pisces_areas.dm" - -/obj/effect/overmap/visitable/ship/errant_pisces - name = "XCV Ahab's Harpoon" - desc = "Sensors detect civilian vessel with unusual signs of life aboard." - color = "#bd6100" - max_speed = 1/(3 SECONDS) - burn_delay = 15 SECONDS - fore_dir = SOUTH - -/datum/map_template/ruin/away_site/errant_pisces - name = "Errant Pisces" - id = "awaysite_errant_pisces" - description = "Xynergy carp trawler" - suffixes = list("errant_pisces/errant_pisces.dmm") - spawn_cost = 1 - area_usage_test_exempted_root_areas = list(/area/errant_pisces) - - -/obj/structure/net//if you want to have fun, make them to be draggable as a whole unless at least one piece is attached to a non-space turf or anchored object - name = "industrial net" - desc = "A sturdy industrial net of synthetic belts reinforced with plasteel threads." - icon = 'maps/away/errant_pisces/errant_pisces_sprites.dmi' - icon_state = "net_f" - anchored = TRUE - layer = CATWALK_LAYER//probably? Should cover cables, pipes and the rest of objects that are secured on the floor - var/health = 100 - -/obj/structure/net/Initialize(var/mapload) - . = ..() - update_connections() - if (!mapload)//if it's not mapped object but rather created during round, we should update visuals of adjacent net objects - var/turf/T = get_turf(src) - for (var/turf/AT in T.CardinalTurfs(FALSE)) - for (var/obj/structure/net/N in AT) - if (type != N.type)//net-walls cause update for net-walls and floors for floors but not for each other - continue - N.update_connections() - -/obj/structure/net/examine(mob/user) - . = ..() - if (health < 20) - to_chat(user, "\The [src] is barely hanging on a few last threads.") - else if (health < 50) - to_chat(user, "Many ribbons of \the [src] are cut away.") - else if (health < 90) - to_chat(user, "Few ribbons of \the [src] are cut away.") - -/obj/structure/net/attackby(obj/item/W as obj, mob/user as mob) - if (istype(W, /obj/item/material)) //sharp objects can cut thorugh - var/obj/item/material/SH = W - if (!(SH.sharp) || (SH.sharp && SH.force < 10))//is not sharp enough or at all - to_chat(user,"You can't cut throught \the [src] with \the [W], it's too dull.") - return - visible_message("[user] starts to cut through \the [src] with \the [W]!") - while (health > 0) - if (!do_after(user, 2 SECONDS, src, DO_PUBLIC_UNIQUE)) - visible_message("[user] stops cutting through \the [src] with \the [W]!") - return - health -= 20 * (1 + (SH.force-10)/10)//the sharper the faster, every point of force above 10 adds 10 % to damage - visible_message("[user] cuts through \the [src]!") - new /obj/item/stack/net(src.loc) - qdel(src) - -/obj/structure/net/bullet_act(obj/item/projectile/P) - . = PROJECTILE_CONTINUE //few cloth ribbons won't stop bullet or energy ray - if (P.damage_type != DAMAGE_BURN)//beams, lasers, fire. Bullets won't make a lot of damage to the few hanging belts. - return - visible_message("\The [P] hits \the [src] and tears it!") - health -= P.damage - if (health < 0) - visible_message("\The [src] is torn apart!") - qdel(src) - -/obj/structure/net/update_connections()//maybe this should also be called when any of the walls nearby is removed but no idea how I can make it happen - overlays.Cut() - var/turf/T = get_turf(src) - for (var/turf/AT in T.CardinalTurfs(FALSE)) - if ( (locate(/obj/structure/net) in AT) || (!istype(AT, /turf/simulated/open) && !istype(AT, /turf/space)) || (locate(/obj/structure/lattice) in AT) )//connects to another net objects or walls/floors or lattices - var/image/I = image(icon,"[icon_state]_ol_[get_dir(src,AT)]") - overlays += I - -/obj/structure/net/net_wall - icon_state = "net_w" - density = TRUE - layer = ABOVE_HUMAN_LAYER - -/obj/structure/net/net_wall/Initialize(var/mapload) - . = ..() - if (mapload)//if it's pre-mapped, it should put floor-net below itself - var/turf/T = get_turf(src) - for (var/obj/structure/net/N in T) - if (N.type != /obj/structure/net/net_wall)//if there's net that is not a net-wall, we don't need to spawn it - return - new /obj/structure/net(T) - - -/obj/structure/net/net_wall/update_connections()//this is different for net-walls because they only connect to walls and net-walls - overlays.Cut() - var/turf/T = get_turf(src) - for (var/turf/AT in T.CardinalTurfs(FALSE)) - if ((locate(/obj/structure/net/net_wall) in AT) || istype(AT, /turf/simulated/wall) || istype(AT, /turf/unsimulated/wall) || istype(AT, /turf/simulated/mineral))//connects to another net-wall objects or walls - var/image/I = image(icon,"[icon_state]_ol_[get_dir(src,AT)]") - overlays += I - -/obj/item/stack/net - name = "industrial net roll" - desc = "Sturdy industrial net reinforced with plasteel threads." - singular_name = "industrial net" - icon = 'maps/away/errant_pisces/errant_pisces_sprites.dmi' - icon_state = "net_roll" - w_class = ITEM_SIZE_LARGE - force = 3.0 - throwforce = 5.0 - throw_speed = 5 - throw_range = 10 - matter = list("cloth" = 1875, "plasteel" = 350) - max_amount = 30 - attack_verb = list("hit", "bludgeoned", "whacked") - lock_picking_level = 3 - -/obj/item/stack/net/Initialize() - . = ..() - update_icon() - -/obj/item/stack/net/thirty - amount = 30 - -/obj/item/stack/net/on_update_icon() - if(amount == 1) - icon_state = "net" - else - icon_state = "net_roll" - -/obj/item/stack/net/proc/attach_wall_check()//checks if wall can be attached to something vertical such as walls or another net-wall - var/area/A = get_area(src) - if (!A.has_gravity) - return 1 - var/turf/T = get_turf(src) - for (var/turf/AT in T.CardinalTurfs(FALSE)) - if ((locate(/obj/structure/net/net_wall) in AT) || istype(AT, /turf/simulated/wall) || istype(AT, /turf/unsimulated/wall) || istype(AT, /turf/simulated/mineral))//connects to another net-wall objects or walls - return 1 - return 0 - -/obj/item/stack/net/attack_self(mob/user)//press while holding to lay one. If there's net already, place wall - var/turf/T = get_turf(user) - if (locate(/obj/structure/net/net_wall) in T) - to_chat(user, "Net wall is already placed here!") - return - if (locate(/obj/structure/net) in T)//if there's already layed "floor" net - if (!attach_wall_check()) - to_chat(user, "You try to place net wall but it falls on the floor. Try to attach it to something vertical and stable.") - return - new /obj/structure/net/net_wall(T) - //update_adjacent_nets(1)//since net-wall was added we also update adjacent wall-nets - else - new /obj/structure/net(T) - //update_adjacent_nets(0) - amount -= 1 - update_icon() - if (amount < 1) - qdel(src) - -/obj/item/clothing/under/carp - name = "space carp suit" - desc = "A suit in a shape of a space carp. Usually worn by corporate interns who are sent to entertain children during HQ excursions." - icon_state = "carp_suit" - icon = 'maps/away/errant_pisces/errant_pisces_sprites.dmi' - item_icons = list(slot_w_uniform_str = 'maps/away/errant_pisces/errant_pisces_sprites.dmi') - -/obj/effect/landmark/corpse/carp_fisher - name = "carp fisher" - corpse_outfits = list(/decl/hierarchy/outfit/corpse/carp_fisher) - species = list(SPECIES_HUMAN = 70, SPECIES_IPC = 20, SPECIES_UNATHI = 10) - -/decl/hierarchy/outfit/corpse/carp_fisher - name = "Dead carp fisher" - uniform = /obj/item/clothing/under/color/green - suit = /obj/item/clothing/suit/apron/overalls - belt = /obj/item/material/knife/combat - shoes = /obj/item/clothing/shoes/jackboots - head = /obj/item/clothing/head/hardhat/dblue - -/obj/effect/computer_file_creator/ahabs_harpoon01 - name = "ahab's harpoon file spawner - sensor dump" - -/obj/effect/computer_file_creator/ahabs_harpoon01/Initialize() - var/i_month = max(text2num(time2text(world.timeofday, "MM")) - 1, 1) // Prevent month from going below 1 - var/i_day = max(text2num(time2text(world.timeofday, "DD")) - 5, 1) - file_name = "NETMON_SENSORDUMP-BLACKBOX" - file_info = " \ -

              XCV Ahab's Harpoon Sensor Log - [GLOB.using_map.game_year]-[i_month]-[i_day]

              \ -
              \ - \<08:33:07\> Space carp migration detected within 1 Gm.
              \ - \<08:51:29\> Main net extended.
              \ - \<09:00:00\> Hourly report. Security level: GREEN. Crew status: NOMINAL. SMES charge: NOMINAL.
              \ - \<09:02:53\> Outflow cells opened.
              \ - \<09:04:12\> Exterior airlock cycling: Port Solar Control.
              \ - \<09:04:25\> VITAL SIGNS ALERT: C. BANCROFT, Retrieval Specialist, Port Solar Control
              \ - \<09:04:33\> BRAIN ACTIVITY FLATLINE: C. BANCROFT, Retrieval Specialist, Port Solar Control
              \ - \<09:04:39\> Unidentified lifesigns aboard.
              \ - \<09:04:45\> Multiple unidentified lifesigns aboard.
              \ - \<09:05:21\> SECURITY LEVEL ALERT: Elevated to RED.
              \ - \<09:33:07\> SECURITY LEVEL ALERT: Logging flight and sensor data to ship black box.
              \ - \<09:41:13\> MULTIPLE VITAL SIGNS ALERTS
              \ - \<09:47:03\> All vital signs alerts cleared.
              \ - \<10:00:00\> Hourly report. Security level: RED. Crew status: CRITICAL. SMES charge: NOMINAL.
              \ - \<11:00:00\> Hourly report. Security level: RED. Crew status: CRITICAL. SMES charge: NOMINAL.
              \ - \<12:00:00\> Hourly report. Security level: RED. Crew status: CRITICAL. SMES charge: NOMINAL.
              \ - \<13:00:00\> Hourly report. Security level: RED. Crew status: CRITICAL. SMES charge: NOMINAL.
              \ - \<14:00:00\> Hourly report. Security level: RED. Crew status: CRITICAL. SMES charge: LOW.
              \ - \<15:00:00\> Hourly report. Security level: RED. Crew status: CRITICAL. SMES charge: LOW.
              \ - \<16:00:00\> Hourly report. Security level: RED. Crew status: CRITICAL. SMES charge: CRITICAL.
              \ - \<17:00:00\> Hourly report. Security level: RED. Crew status: CRITICAL. SMES charge: CRITICAL.
              \ - \<17:03:41\> Low power. Entering hibernation. Data dumped to local drive and stored in ship black box.
              \ - \<17:03:41\> Black box data pushed to access terminal.
              \ - \<17:03:42\> Shutting down.
              \ - " - . = ..() - -/obj/effect/computer_file_creator/ahabs_harpoon02 - name = "ahab's harpoon file spawner - black box" - file_name = "NETMON_BLACKBOX" - file_info = "

              This is the flight recorder data for the XCV Ahab's Harpoon. Its callsign and flight registration indicate that this is a medium size, long-haul commerical space carp fishing vessel, owned by Xynergy. The data recording here only includes hourly status reports, but they indicate that the ship went from nominal function at 09:00 to red alert and critical crew status by 10:00, before continuing at these levels for most of the day until SMES power failed.

              \ - \ -

              This data contains a wealth of information about the ship's records, manifest, and specifications, but nothing immediately useful about the events that happened on board. You may be able to glean further information if you could find more complete records.

              " - -/obj/effect/computer_file_creator/ahabs_harpoon03 - name = "ahab's harpoon file spawner - captain's log" - file_name = "captainslog" - -/obj/effect/computer_file_creator/ahabs_harpoon03/Initialize() - var/captain_name = "[capitalize(pick(GLOB.first_names_male + GLOB.first_names_female))] [capitalize(pick(GLOB.last_names))]" - file_info = "

              This is the captain's log of the XCV Ahab's Harpoon, authored by Xynergy general manager [captain_name]. According to the log's contents, the ship embarked on its final voyage six months ago. All entries except the last one seem mundane - routine checks, inventory reports, flight path, and so on. The final entry seems to have been written in a hurry, with several typos that didn't get caught by the autocorrect:

              \ - \ -

              Had a major incident, have lost control f the ship. Hit a big shoal off Nine and scooped up a bunch but itr got the net tangled. Charlie went out to untangle it and a bunch got in. Big motherfuckers, got everywhere. Lkarger than pike. Got trhough doors. Gettim vital alerts for half the crew. Turning on distress but the emergency mode eats up a lot of powedr and it won't last forever. Solars might keep the lights on but it'll be brownouts/blackouts eventually. Going to make for engi where the blackbox comp is. Wish me luck. Please report to xyn/gov if you find this.

              " - . = ..() diff --git a/maps/away/errant_pisces/errant_pisces.dmm b/maps/away/errant_pisces/errant_pisces.dmm deleted file mode 100644 index c70fdeb7dc08f..0000000000000 --- a/maps/away/errant_pisces/errant_pisces.dmm +++ /dev/null @@ -1,47277 +0,0 @@ -//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE -"aa" = ( -/turf/space, -/area/space) -"ab" = ( -/turf/simulated/wall/r_wall, -/area/errant_pisces/bow_starboard) -"ac" = ( -/turf/simulated/wall/r_wall, -/area/errant_pisces/bow_port) -"ad" = ( -/obj/machinery/atmospherics/unary/engine, -/turf/simulated/wall/r_wall, -/area/errant_pisces/bow_starboard) -"ae" = ( -/obj/machinery/atmospherics/unary/engine, -/turf/simulated/wall/r_wall, -/area/errant_pisces/bow_port) -"af" = ( -/obj/machinery/alarm{ - dir = 4; - pixel_x = -25; - rcon_setting = 3 - }, -/obj/effect/floor_decal/industrial/warning, -/turf/simulated/floor/plating, -/area/errant_pisces/bow_starboard) -"ag" = ( -/obj/machinery/atmospherics/pipe/simple/visible/fuel{ - dir = 5 - }, -/obj/structure/window/reinforced, -/obj/structure/window/reinforced{ - dir = 8 - }, -/obj/effect/floor_decal/industrial/warning, -/turf/simulated/floor/plating, -/area/errant_pisces/bow_starboard) -"ah" = ( -/obj/machinery/atmospherics/pipe/manifold/visible/fuel, -/obj/structure/window/reinforced, -/obj/effect/floor_decal/industrial/warning, -/turf/simulated/floor/plating, -/area/errant_pisces/bow_starboard) -"ai" = ( -/obj/machinery/atmospherics/pipe/simple/visible/fuel{ - dir = 4 - }, -/obj/structure/window/reinforced, -/obj/effect/floor_decal/industrial/warning, -/turf/simulated/floor/plating, -/area/errant_pisces/bow_starboard) -"aj" = ( -/obj/machinery/atmospherics/pipe/simple/visible/fuel{ - dir = 10 - }, -/obj/structure/window/reinforced, -/obj/effect/floor_decal/industrial/warning, -/obj/machinery/alarm{ - dir = 8; - pixel_x = 25 - }, -/turf/simulated/floor/plating, -/area/errant_pisces/bow_starboard) -"ak" = ( -/obj/machinery/atmospherics/pipe/simple/visible/fuel{ - dir = 6 - }, -/obj/structure/window/reinforced, -/obj/effect/floor_decal/industrial/warning, -/obj/machinery/alarm{ - dir = 4; - pixel_x = -25; - rcon_setting = 3 - }, -/turf/simulated/floor/plating, -/area/errant_pisces/bow_port) -"al" = ( -/obj/machinery/atmospherics/pipe/manifold/visible/fuel, -/obj/structure/window/reinforced, -/obj/effect/floor_decal/industrial/warning, -/turf/simulated/floor/plating, -/area/errant_pisces/bow_port) -"am" = ( -/obj/machinery/atmospherics/pipe/simple/visible/fuel{ - dir = 4 - }, -/obj/structure/window/reinforced, -/obj/effect/floor_decal/industrial/warning, -/turf/simulated/floor/plating, -/area/errant_pisces/bow_port) -"an" = ( -/obj/machinery/atmospherics/pipe/simple/visible/fuel{ - dir = 9 - }, -/obj/structure/window/reinforced, -/obj/structure/window/reinforced{ - dir = 4 - }, -/obj/effect/floor_decal/industrial/warning, -/turf/simulated/floor/plating, -/area/errant_pisces/bow_port) -"ao" = ( -/obj/machinery/alarm{ - dir = 8; - pixel_x = 25 - }, -/obj/effect/floor_decal/industrial/warning, -/turf/simulated/floor/plating, -/area/errant_pisces/bow_port) -"ap" = ( -/obj/machinery/portable_atmospherics/canister/empty/hydrogen, -/turf/simulated/floor/plating, -/area/errant_pisces/bow_starboard) -"aq" = ( -/turf/simulated/floor/plating, -/area/errant_pisces/bow_starboard) -"ar" = ( -/obj/machinery/atmospherics/binary/pump{ - dir = 1 - }, -/turf/simulated/floor/plating, -/area/errant_pisces/bow_starboard) -"as" = ( -/obj/machinery/atmospherics/binary/pump{ - dir = 1 - }, -/turf/simulated/floor/plating, -/area/errant_pisces/bow_port) -"at" = ( -/turf/simulated/floor/plating, -/area/errant_pisces/bow_port) -"au" = ( -/obj/machinery/portable_atmospherics/canister/empty/hydrogen, -/turf/simulated/floor/plating, -/area/errant_pisces/bow_port) -"av" = ( -/obj/machinery/atmospherics/portables_connector{ - dir = 4 - }, -/obj/machinery/portable_atmospherics/canister/empty/hydrogen, -/obj/machinery/light/small{ - dir = 8 - }, -/turf/simulated/floor/plating, -/area/errant_pisces/bow_starboard) -"aw" = ( -/obj/machinery/atmospherics/binary/pump{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/errant_pisces/bow_starboard) -"ax" = ( -/obj/machinery/atmospherics/pipe/manifold/visible/fuel{ - dir = 1 - }, -/turf/simulated/floor/plating, -/area/errant_pisces/bow_starboard) -"ay" = ( -/obj/machinery/atmospherics/pipe/manifold/visible/fuel{ - dir = 4 - }, -/obj/machinery/light/small{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/errant_pisces/bow_starboard) -"az" = ( -/obj/machinery/atmospherics/pipe/manifold/visible/fuel{ - dir = 8 - }, -/obj/machinery/light/small{ - dir = 8 - }, -/turf/simulated/floor/plating, -/area/errant_pisces/bow_port) -"aA" = ( -/obj/machinery/atmospherics/pipe/manifold/visible/fuel{ - dir = 1 - }, -/turf/simulated/floor/plating, -/area/errant_pisces/bow_port) -"aB" = ( -/obj/machinery/atmospherics/binary/pump{ - dir = 8 - }, -/turf/simulated/floor/plating, -/area/errant_pisces/bow_port) -"aC" = ( -/obj/machinery/atmospherics/portables_connector{ - dir = 8 - }, -/obj/machinery/portable_atmospherics/canister/empty/hydrogen, -/obj/machinery/light/small{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/errant_pisces/bow_port) -"aD" = ( -/obj/structure/closet/firecloset, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/errant_pisces/bow_starboard) -"aE" = ( -/obj/structure/cable/green{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/turf/simulated/floor/plating, -/area/errant_pisces/bow_starboard) -"aF" = ( -/obj/machinery/power/apc{ - name = "south bump"; - pixel_y = -24 - }, -/obj/structure/cable/green{ - d2 = 8; - icon_state = "0-8" - }, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 8 - }, -/turf/simulated/floor/plating, -/area/errant_pisces/bow_starboard) -"aG" = ( -/obj/machinery/portable_atmospherics/canister/empty/hydrogen, -/obj/machinery/atmospherics/portables_connector{ - dir = 1 - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 9; - icon_state = "warning" - }, -/turf/simulated/floor/plating, -/area/errant_pisces/bow_starboard) -"aH" = ( -/obj/machinery/atmospherics/unary/tank/hydrogen{ - dir = 1 - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 1 - }, -/turf/simulated/floor/plating, -/area/errant_pisces/bow_starboard) -"aI" = ( -/obj/machinery/atmospherics/unary/tank/hydrogen{ - dir = 1 - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 5 - }, -/turf/simulated/floor/plating, -/area/errant_pisces/bow_starboard) -"aJ" = ( -/obj/machinery/atmospherics/unary/heater{ - dir = 1 - }, -/turf/simulated/floor/plating, -/area/errant_pisces/bow_starboard) -"aK" = ( -/obj/machinery/atmospherics/pipe/simple/visible/fuel{ - dir = 5 - }, -/turf/simulated/floor/plating, -/area/errant_pisces/bow_starboard) -"aL" = ( -/obj/machinery/atmospherics/valve{ - dir = 8 - }, -/obj/machinery/door/airlock, -/obj/machinery/door/firedoor, -/turf/simulated/floor/plating, -/area/errant_pisces/bow_port) -"aM" = ( -/obj/machinery/atmospherics/pipe/simple/visible/fuel{ - dir = 9 - }, -/turf/simulated/floor/plating, -/area/errant_pisces/bow_port) -"aN" = ( -/obj/machinery/atmospherics/unary/heater{ - dir = 1 - }, -/turf/simulated/floor/plating, -/area/errant_pisces/bow_port) -"aO" = ( -/obj/machinery/atmospherics/unary/tank/hydrogen{ - dir = 1 - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 9; - icon_state = "warning" - }, -/turf/simulated/floor/plating, -/area/errant_pisces/bow_port) -"aP" = ( -/obj/machinery/atmospherics/unary/tank/hydrogen{ - dir = 1 - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 1 - }, -/turf/simulated/floor/plating, -/area/errant_pisces/bow_port) -"aQ" = ( -/obj/machinery/portable_atmospherics/canister/empty/hydrogen, -/obj/machinery/atmospherics/portables_connector{ - dir = 1 - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 5 - }, -/turf/simulated/floor/plating, -/area/errant_pisces/bow_port) -"aR" = ( -/obj/machinery/power/apc{ - name = "south bump"; - pixel_y = -24 - }, -/obj/structure/cable/green{ - d2 = 4; - icon_state = "0-4" - }, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 4; - level = 2 - }, -/turf/simulated/floor/plating, -/area/errant_pisces/bow_port) -"aS" = ( -/obj/structure/cable/green{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, -/turf/simulated/floor/plating, -/area/errant_pisces/bow_port) -"aT" = ( -/obj/structure/closet/firecloset, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 8 - }, -/turf/simulated/floor/plating, -/area/errant_pisces/bow_port) -"aU" = ( -/obj/structure/lattice, -/obj/structure/grille, -/obj/structure/grille, -/turf/space, -/area/space) -"aV" = ( -/obj/structure/lattice, -/obj/structure/grille, -/turf/space, -/area/space) -"aW" = ( -/turf/simulated/wall/r_wall, -/area/errant_pisces/storage_starboard) -"aX" = ( -/obj/machinery/door/airlock, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/plating, -/area/errant_pisces/bow_starboard) -"aY" = ( -/turf/simulated/wall/r_wall, -/area/errant_pisces/atmos) -"aZ" = ( -/turf/simulated/wall/r_wall, -/area/errant_pisces/enginering) -"ba" = ( -/obj/machinery/door/airlock, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/plating, -/area/errant_pisces/bow_port) -"bb" = ( -/turf/simulated/wall/r_wall, -/area/errant_pisces/storage_port) -"bc" = ( -/obj/structure/lattice, -/turf/space, -/area/space) -"bd" = ( -/turf/simulated/floor/plating, -/area/errant_pisces/storage_starboard) -"be" = ( -/obj/machinery/portable_atmospherics/canister/carbon_dioxide, -/turf/simulated/floor/plating, -/area/errant_pisces/storage_starboard) -"bf" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/plating, -/area/errant_pisces/bow_maint) -"bg" = ( -/obj/machinery/atmospherics/unary/tank/air, -/turf/simulated/floor/plating, -/area/errant_pisces/atmos) -"bh" = ( -/obj/machinery/atmospherics/portables_connector, -/turf/simulated/floor/plating, -/area/errant_pisces/atmos) -"bi" = ( -/obj/machinery/light/small{ - dir = 1 - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/errant_pisces/atmos) -"bj" = ( -/obj/machinery/portable_atmospherics/canister, -/obj/machinery/atmospherics/portables_connector, -/turf/simulated/floor/plating, -/area/errant_pisces/atmos) -"bk" = ( -/turf/simulated/floor/plating, -/area/errant_pisces/atmos) -"bl" = ( -/obj/machinery/portable_atmospherics/canister/phoron, -/turf/simulated/floor/plating, -/area/errant_pisces/enginering) -"bm" = ( -/obj/machinery/portable_atmospherics/canister, -/turf/simulated/floor/plating, -/area/errant_pisces/enginering) -"bn" = ( -/turf/simulated/floor/plating, -/area/errant_pisces/enginering) -"bo" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/errant_pisces/enginering) -"bp" = ( -/obj/machinery/light/small{ - dir = 1 - }, -/obj/machinery/computer/modular/preset/filemanager{ - desc = "A brightly-colored terminal built from stress-resistant materials. Used to read data from a connected flight recorder."; - name = "black box terminal" - }, -/obj/effect/computer_file_creator/ahabs_harpoon02, -/turf/simulated/floor/plating, -/area/errant_pisces/enginering) -"bq" = ( -/obj/machinery/computer/ship/engines, -/turf/simulated/floor/plating, -/area/errant_pisces/enginering) -"br" = ( -/obj/machinery/computer/modular, -/turf/simulated/floor/plating, -/area/errant_pisces/enginering) -"bs" = ( -/obj/structure/table/rack, -/obj/random/toolbox, -/turf/simulated/floor/plating, -/area/errant_pisces/storage_port) -"bt" = ( -/turf/simulated/floor/plating, -/area/errant_pisces/storage_port) -"bu" = ( -/obj/effect/floor_decal/solarpanel, -/obj/structure/cable/yellow{ - d2 = 4; - icon_state = "0-4" - }, -/obj/machinery/power/solar{ - id = "XynergySolarStarboard" - }, -/turf/simulated/floor/airless, -/area/space) -"bv" = ( -/obj/structure/cable/yellow{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/structure/cable/yellow{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/turf/simulated/floor/airless, -/area/space) -"bw" = ( -/obj/effect/floor_decal/solarpanel, -/obj/structure/cable/yellow{ - d2 = 8; - icon_state = "0-8" - }, -/obj/machinery/power/solar{ - id = "XynergySolarStarboard" - }, -/turf/simulated/floor/airless, -/area/space) -"bx" = ( -/obj/machinery/light/small{ - dir = 4 - }, -/obj/machinery/portable_atmospherics/canister/nitrogen, -/turf/simulated/floor/plating, -/area/errant_pisces/storage_starboard) -"by" = ( -/obj/machinery/light/small{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/plating, -/area/errant_pisces/bow_maint) -"bz" = ( -/obj/machinery/atmospherics/pipe/manifold/visible/blue{ - dir = 8 - }, -/obj/machinery/light/small{ - dir = 8 - }, -/turf/simulated/floor/plating, -/area/errant_pisces/atmos) -"bA" = ( -/obj/machinery/atmospherics/pipe/manifold4w/visible/blue, -/turf/simulated/floor/plating, -/area/errant_pisces/atmos) -"bB" = ( -/obj/machinery/atmospherics/pipe/simple/visible/blue{ - dir = 10 - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/errant_pisces/atmos) -"bC" = ( -/obj/machinery/atmospherics/pipe/simple/visible/yellow{ - dir = 5 - }, -/turf/simulated/floor/plating, -/area/errant_pisces/atmos) -"bD" = ( -/obj/machinery/atmospherics/pipe/manifold/visible/yellow, -/turf/simulated/floor/plating, -/area/errant_pisces/atmos) -"bE" = ( -/obj/machinery/atmospherics/pipe/manifold4w/visible/yellow, -/turf/simulated/floor/plating, -/area/errant_pisces/atmos) -"bF" = ( -/obj/machinery/atmospherics/pipe/simple/visible/yellow{ - dir = 9 - }, -/turf/simulated/floor/plating, -/area/errant_pisces/atmos) -"bG" = ( -/obj/machinery/light/small{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/errant_pisces/atmos) -"bH" = ( -/obj/machinery/light/small{ - dir = 8 - }, -/turf/simulated/floor/plating, -/area/errant_pisces/enginering) -"bI" = ( -/obj/machinery/portable_atmospherics/canister/air, -/turf/simulated/floor/plating, -/area/errant_pisces/enginering) -"bJ" = ( -/obj/machinery/portable_atmospherics/canister, -/obj/effect/floor_decal/industrial/warning{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/errant_pisces/enginering) -"bL" = ( -/obj/structure/table/steel, -/obj/random/tool, -/turf/simulated/floor/plating, -/area/errant_pisces/enginering) -"bM" = ( -/obj/structure/bed/chair/office/dark{ - dir = 1 - }, -/turf/simulated/floor/plating, -/area/errant_pisces/enginering) -"bN" = ( -/obj/machinery/light/small{ - dir = 4 - }, -/obj/structure/table/steel, -/turf/simulated/floor/plating, -/area/errant_pisces/enginering) -"bO" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/light/small{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/plating, -/area/errant_pisces/bow_maint) -"bP" = ( -/obj/structure/table/rack, -/obj/random/powercell, -/obj/machinery/light/small{ - dir = 8 - }, -/obj/item/mop, -/turf/simulated/floor/plating, -/area/errant_pisces/storage_port) -"bQ" = ( -/obj/effect/floor_decal/solarpanel, -/obj/structure/cable/yellow{ - d2 = 4; - icon_state = "0-4" - }, -/obj/machinery/power/solar{ - id = "XynergySolarPort" - }, -/turf/simulated/floor/airless, -/area/space) -"bR" = ( -/obj/effect/floor_decal/solarpanel, -/obj/structure/cable/yellow{ - d2 = 8; - icon_state = "0-8" - }, -/obj/machinery/power/solar{ - id = "XynergySolarPort" - }, -/turf/simulated/floor/airless, -/area/space) -"bS" = ( -/obj/structure/cable/yellow{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/cable/yellow{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/turf/simulated/floor/airless, -/area/space) -"bT" = ( -/obj/machinery/portable_atmospherics/canister/nitrogen, -/turf/simulated/floor/plating, -/area/errant_pisces/storage_starboard) -"bU" = ( -/obj/machinery/atmospherics/unary/tank/air{ - dir = 1; - start_pressure = 740.5 - }, -/turf/simulated/floor/plating, -/area/errant_pisces/atmos) -"bV" = ( -/obj/machinery/atmospherics/pipe/simple/visible/blue, -/turf/simulated/floor/plating, -/area/errant_pisces/atmos) -"bW" = ( -/obj/machinery/atmospherics/binary/pump/on, -/obj/effect/floor_decal/industrial/warning{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/errant_pisces/atmos) -"bX" = ( -/obj/machinery/atmospherics/omni/filter{ - tag_east = 4; - tag_north = 2; - tag_south = 1 - }, -/turf/simulated/floor/plating, -/area/errant_pisces/atmos) -"bY" = ( -/obj/machinery/atmospherics/pipe/manifold/visible/red{ - dir = 1 - }, -/turf/simulated/floor/plating, -/area/errant_pisces/atmos) -"bZ" = ( -/obj/machinery/portable_atmospherics/canister/nitrogen, -/obj/machinery/atmospherics/portables_connector{ - dir = 8 - }, -/turf/simulated/floor/plating, -/area/errant_pisces/atmos) -"ca" = ( -/obj/machinery/portable_atmospherics/canister, -/obj/effect/floor_decal/industrial/warning, -/turf/simulated/floor/plating, -/area/errant_pisces/enginering) -"cb" = ( -/obj/machinery/portable_atmospherics/canister/nitrogen, -/obj/effect/floor_decal/industrial/warning, -/turf/simulated/floor/plating, -/area/errant_pisces/enginering) -"cc" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 6 - }, -/turf/simulated/floor/plating, -/area/errant_pisces/enginering) -"cd" = ( -/obj/structure/closet, -/obj/random/tool, -/obj/random/smokes, -/obj/item/clothing/under/hazard, -/turf/simulated/floor/plating, -/area/errant_pisces/enginering) -"ce" = ( -/obj/structure/table/rack, -/obj/random/tool, -/turf/simulated/floor/plating, -/area/errant_pisces/storage_port) -"cf" = ( -/obj/machinery/atmospherics/unary/tank/nitrogen{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/errant_pisces/atmos) -"cg" = ( -/obj/machinery/atmospherics/binary/pump{ - dir = 8 - }, -/turf/simulated/floor/plating, -/area/errant_pisces/atmos) -"ch" = ( -/obj/machinery/atmospherics/portables_connector{ - dir = 8 - }, -/turf/simulated/floor/plating, -/area/errant_pisces/atmos) -"ci" = ( -/obj/machinery/atmospherics/pipe/simple/visible/universal, -/obj/effect/floor_decal/industrial/warning{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/errant_pisces/atmos) -"cj" = ( -/obj/machinery/atmospherics/pipe/simple/visible/blue{ - dir = 6 - }, -/turf/simulated/floor/plating, -/area/errant_pisces/atmos) -"ck" = ( -/obj/machinery/atmospherics/pipe/simple/visible/blue{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/errant_pisces/atmos) -"cl" = ( -/obj/machinery/atmospherics/omni/filter{ - tag_north = 2; - tag_south = 1; - tag_west = 3 - }, -/turf/simulated/floor/plating, -/area/errant_pisces/atmos) -"cm" = ( -/obj/machinery/atmospherics/pipe/manifold/visible/red{ - dir = 8 - }, -/turf/simulated/floor/plating, -/area/errant_pisces/atmos) -"cn" = ( -/obj/machinery/fabricator, -/turf/simulated/floor/plating, -/area/errant_pisces/enginering) -"co" = ( -/obj/structure/table/rack, -/obj/random/tool, -/obj/random/tech_supply, -/turf/simulated/floor/plating, -/area/errant_pisces/enginering) -"cp" = ( -/obj/structure/table/rack, -/obj/random/tool, -/obj/random/tech_supply, -/obj/item/clothing/gloves/thick/duty, -/turf/simulated/floor/plating, -/area/errant_pisces/enginering) -"cq" = ( -/obj/structure/closet, -/obj/random/tech_supply, -/obj/item/clothing/shoes/dutyboots, -/obj/item/clothing/under/hazard, -/turf/simulated/floor/plating, -/area/errant_pisces/enginering) -"cr" = ( -/obj/structure/table/rack, -/obj/random/powercell, -/obj/random/clothing, -/turf/simulated/floor/plating, -/area/errant_pisces/storage_port) -"cs" = ( -/obj/machinery/portable_atmospherics/canister/oxygen, -/turf/simulated/floor/plating, -/area/errant_pisces/storage_starboard) -"ct" = ( -/obj/machinery/atmospherics/pipe/manifold/visible/red, -/turf/simulated/floor/plating, -/area/errant_pisces/atmos) -"cu" = ( -/obj/machinery/atmospherics/binary/pump{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/errant_pisces/atmos) -"cv" = ( -/obj/machinery/atmospherics/pipe/simple/visible/red{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/errant_pisces/atmos) -"cw" = ( -/obj/machinery/atmospherics/omni/mixer{ - dir = 1 - }, -/turf/simulated/floor/plating, -/area/errant_pisces/atmos) -"cx" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/visible/blue{ - dir = 6 - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 6 - }, -/turf/simulated/floor/plating, -/area/errant_pisces/atmos) -"cy" = ( -/obj/machinery/atmospherics/pipe/manifold/visible/blue, -/turf/simulated/floor/plating, -/area/errant_pisces/atmos) -"cz" = ( -/obj/machinery/atmospherics/binary/oxyregenerator{ - dir = 8 - }, -/turf/simulated/floor/plating, -/area/errant_pisces/atmos) -"cA" = ( -/obj/machinery/atmospherics/omni/filter{ - tag_north = 2; - tag_south = 1; - tag_west = 5 - }, -/turf/simulated/floor/plating, -/area/errant_pisces/atmos) -"cB" = ( -/obj/machinery/pipedispenser, -/turf/simulated/floor/plating, -/area/errant_pisces/enginering) -"cC" = ( -/obj/effect/landmark/corpse/engineer, -/obj/effect/decal/cleanable/blood, -/turf/simulated/floor/plating, -/area/errant_pisces/enginering) -"cD" = ( -/obj/structure/table/rack, -/obj/random/tech_supply, -/turf/simulated/floor/plating, -/area/errant_pisces/enginering) -"cE" = ( -/obj/structure/table/rack, -/obj/random/tool, -/obj/random/tank, -/turf/simulated/floor/plating, -/area/errant_pisces/enginering) -"cF" = ( -/obj/structure/closet, -/obj/random/tool, -/obj/random/glasses, -/turf/simulated/floor/plating, -/area/errant_pisces/enginering) -"cG" = ( -/obj/structure/closet/l3closet/janitor, -/turf/simulated/floor/plating, -/area/errant_pisces/storage_port) -"cH" = ( -/obj/random/junk, -/turf/simulated/floor/plating, -/area/errant_pisces/storage_port) -"cI" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - level = 2 - }, -/turf/simulated/floor/plating, -/area/errant_pisces/storage_starboard) -"cJ" = ( -/obj/machinery/light/small{ - dir = 4 - }, -/obj/machinery/portable_atmospherics/canister/oxygen, -/turf/simulated/floor/plating, -/area/errant_pisces/storage_starboard) -"cK" = ( -/obj/machinery/atmospherics/unary/tank/oxygen{ - dir = 4 - }, -/obj/machinery/light/small{ - dir = 8 - }, -/turf/simulated/floor/plating, -/area/errant_pisces/atmos) -"cL" = ( -/obj/machinery/atmospherics/pipe/manifold/visible/blue{ - dir = 1 - }, -/turf/simulated/floor/plating, -/area/errant_pisces/atmos) -"cM" = ( -/obj/machinery/atmospherics/pipe/manifold/visible/blue, -/obj/effect/floor_decal/industrial/warning{ - dir = 6 - }, -/turf/simulated/floor/plating, -/area/errant_pisces/atmos) -"cN" = ( -/obj/machinery/atmospherics/pipe/simple/visible/blue{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 8 - }, -/turf/simulated/floor/plating, -/area/errant_pisces/atmos) -"cO" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 8 - }, -/turf/simulated/floor/plating, -/area/errant_pisces/atmos) -"cP" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/universal, -/turf/simulated/floor/plating, -/area/errant_pisces/atmos) -"cQ" = ( -/obj/machinery/light/small{ - dir = 8 - }, -/obj/machinery/atmospherics/unary/vent_pump/on{ - level = 2 - }, -/turf/simulated/floor/plating, -/area/errant_pisces/enginering) -"cR" = ( -/obj/effect/decal/cleanable/blood, -/turf/simulated/floor/plating, -/area/errant_pisces/enginering) -"cS" = ( -/obj/machinery/light/small{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/errant_pisces/enginering) -"cT" = ( -/obj/structure/bed/chair/janicart, -/obj/machinery/light/small{ - dir = 8 - }, -/turf/simulated/floor/plating, -/area/errant_pisces/storage_port) -"cU" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - level = 2 - }, -/turf/simulated/floor/plating, -/area/errant_pisces/storage_port) -"cV" = ( -/obj/machinery/power/apc{ - dir = 8; - name = "west bump"; - pixel_x = -24 - }, -/obj/structure/cable/green{ - d2 = 2; - icon_state = "0-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, -/turf/simulated/floor/plating, -/area/errant_pisces/storage_starboard) -"cW" = ( -/obj/machinery/alarm{ - dir = 8; - pixel_x = 25 - }, -/obj/machinery/portable_atmospherics/canister/oxygen, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 8 - }, -/turf/simulated/floor/plating, -/area/errant_pisces/storage_starboard) -"cX" = ( -/obj/machinery/atmospherics/unary/tank/oxygen{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/errant_pisces/atmos) -"cY" = ( -/obj/machinery/atmospherics/portables_connector{ - dir = 8 - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/errant_pisces/atmos) -"cZ" = ( -/obj/machinery/portable_atmospherics/powered/pump, -/turf/simulated/floor/plating, -/area/errant_pisces/atmos) -"da" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/obj/machinery/light/small, -/obj/machinery/portable_atmospherics/powered/pump, -/turf/simulated/floor/plating, -/area/errant_pisces/atmos) -"db" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/portable_atmospherics/powered/scrubber, -/turf/simulated/floor/plating, -/area/errant_pisces/atmos) -"dc" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 8 - }, -/turf/simulated/floor/plating, -/area/errant_pisces/atmos) -"dd" = ( -/obj/machinery/power/apc{ - name = "south bump"; - pixel_y = -24 - }, -/obj/structure/cable/green{ - d2 = 8; - icon_state = "0-8" - }, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 8 - }, -/turf/simulated/floor/plating, -/area/errant_pisces/atmos) -"de" = ( -/obj/machinery/alarm{ - dir = 8; - pixel_x = 24 - }, -/obj/structure/closet/firecloset, -/turf/simulated/floor/plating, -/area/errant_pisces/atmos) -"df" = ( -/obj/machinery/alarm{ - dir = 4; - pixel_x = -25; - rcon_setting = 3 - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, -/turf/simulated/floor/plating, -/area/errant_pisces/enginering) -"dg" = ( -/obj/machinery/power/apc{ - name = "south bump"; - pixel_y = -24 - }, -/obj/structure/cable/green{ - d2 = 8; - icon_state = "0-8" - }, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 8 - }, -/obj/effect/decal/cleanable/blood, -/turf/simulated/floor/plating, -/area/errant_pisces/enginering) -"dh" = ( -/obj/machinery/portable_atmospherics/canister/oxygen, -/turf/simulated/floor/plating, -/area/errant_pisces/enginering) -"di" = ( -/obj/structure/dispenser/oxygen, -/turf/simulated/floor/plating, -/area/errant_pisces/enginering) -"dj" = ( -/obj/machinery/light/small, -/obj/machinery/suit_storage_unit/standard_unit, -/turf/simulated/floor/plating, -/area/errant_pisces/enginering) -"dk" = ( -/obj/machinery/suit_storage_unit/standard_unit, -/turf/simulated/floor/plating, -/area/errant_pisces/enginering) -"dl" = ( -/obj/machinery/alarm{ - dir = 4; - pixel_x = -32 - }, -/obj/structure/mopbucket, -/obj/item/mop, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/errant_pisces/storage_port) -"dm" = ( -/obj/machinery/power/apc{ - dir = 4; - name = "east bump"; - pixel_x = 24 - }, -/obj/structure/cable/green{ - d2 = 2; - icon_state = "0-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/turf/simulated/floor/plating, -/area/errant_pisces/storage_port) -"dn" = ( -/obj/machinery/door/airlock, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/plating, -/area/errant_pisces/storage_starboard) -"do" = ( -/obj/machinery/door/airlock, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/door/firedoor, -/turf/simulated/floor/plating, -/area/errant_pisces/atmos) -"dp" = ( -/obj/machinery/door/airlock, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/effect/decal/cleanable/blood, -/turf/simulated/floor/plating, -/area/errant_pisces/enginering) -"dq" = ( -/obj/machinery/door/airlock, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/plating, -/area/errant_pisces/storage_port) -"dr" = ( -/turf/simulated/wall/r_wall, -/area/errant_pisces/bow_maint) -"ds" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/turf/simulated/floor/plating, -/area/errant_pisces/bow_maint) -"dt" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/errant_pisces/bow_maint) -"du" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply, -/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers, -/turf/simulated/floor/plating, -/area/errant_pisces/bow_maint) -"dv" = ( -/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers, -/turf/simulated/floor/plating, -/area/errant_pisces/bow_maint) -"dw" = ( -/obj/machinery/alarm{ - pixel_y = 24 - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/errant_pisces/bow_maint) -"dx" = ( -/obj/structure/cable/green{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, -/obj/effect/decal/cleanable/blood, -/turf/simulated/floor/plating, -/area/errant_pisces/bow_maint) -"dy" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply, -/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers, -/turf/simulated/floor/plating, -/area/errant_pisces/bow_maint) -"dz" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/turf/simulated/floor/plating, -/area/errant_pisces/bow_maint) -"dA" = ( -/obj/machinery/atmospherics/unary/outlet_injector{ - dir = 4; - frequency = 1441; - icon_state = "map_injector"; - id = "n2_in"; - use_power = 1 - }, -/turf/simulated/floor/airless, -/area/space) -"dB" = ( -/obj/effect/wallframe_spawn/reinforced, -/obj/machinery/atmospherics/pipe/simple/visible/red{ - dir = 4 - }, -/obj/machinery/door/blast/regular/open{ - dir = 4; - icon_state = "pdoor0"; - id_tag = "xynergy_perimeter_blast" - }, -/turf/simulated/floor/plating, -/area/errant_pisces/bow_maint) -"dC" = ( -/obj/effect/wallframe_spawn/reinforced, -/obj/machinery/atmospherics/pipe/simple/visible/red{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/errant_pisces/bow_maint) -"dD" = ( -/obj/machinery/atmospherics/binary/pump{ - dir = 8 - }, -/turf/simulated/floor/plating, -/area/errant_pisces/bow_maint) -"dE" = ( -/obj/machinery/atmospherics/portables_connector{ - dir = 8 - }, -/turf/simulated/floor/plating, -/area/errant_pisces/bow_maint) -"dF" = ( -/turf/simulated/floor/plating, -/area/errant_pisces/bow_maint) -"dG" = ( -/obj/structure/cable{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/plating, -/area/errant_pisces/bow_maint) -"dH" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/plating, -/area/errant_pisces/bow_maint) -"dI" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/light/small, -/turf/simulated/floor/plating, -/area/errant_pisces/bow_maint) -"dJ" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 4; - level = 2 - }, -/turf/simulated/floor/plating, -/area/errant_pisces/bow_maint) -"dK" = ( -/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/manifold/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 8 - }, -/turf/simulated/floor/plating, -/area/errant_pisces/bow_maint) -"dL" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/power/apc{ - name = "south bump"; - pixel_y = -24 - }, -/obj/structure/cable/green, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 8 - }, -/turf/simulated/floor/plating, -/area/errant_pisces/bow_maint) -"dM" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/plating, -/area/errant_pisces/bow_maint) -"dN" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/decal/cleanable/blood, -/turf/simulated/floor/plating, -/area/errant_pisces/bow_maint) -"dO" = ( -/obj/structure/cable{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/random/junk, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/plating, -/area/errant_pisces/bow_maint) -"dP" = ( -/obj/effect/wallframe_spawn/reinforced, -/obj/machinery/door/firedoor, -/turf/simulated/floor/plating, -/area/errant_pisces/bow_maint) -"dQ" = ( -/obj/effect/wallframe_spawn/reinforced, -/obj/machinery/door/firedoor, -/obj/machinery/door/blast/regular/open{ - dir = 4; - icon_state = "pdoor0"; - id_tag = "xynergy_perimeter_blast" - }, -/turf/simulated/floor/plating, -/area/errant_pisces/bow_maint) -"dR" = ( -/turf/simulated/wall/r_wall, -/area/errant_pisces/solar_starboard) -"dS" = ( -/obj/structure/table/rack, -/obj/random/hardsuit, -/obj/random/shoes, -/turf/simulated/floor/plating, -/area/errant_pisces/bow_maint) -"dT" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/plating, -/area/errant_pisces/bow_maint) -"dU" = ( -/turf/simulated/wall/r_wall, -/area/errant_pisces/head_f) -"dV" = ( -/turf/simulated/wall/r_wall, -/area/errant_pisces/smes_room) -"dW" = ( -/obj/machinery/door/airlock, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/plating, -/area/errant_pisces/smes_room) -"dX" = ( -/obj/machinery/door/airlock, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/door/firedoor, -/turf/simulated/floor/plating, -/area/errant_pisces/smes_room) -"dY" = ( -/turf/simulated/wall/r_wall, -/area/errant_pisces/head_m) -"dZ" = ( -/obj/structure/table/rack, -/obj/random/tech_supply, -/turf/simulated/floor/plating, -/area/errant_pisces/bow_maint) -"ea" = ( -/turf/simulated/wall/r_wall, -/area/errant_pisces/solar_port) -"eb" = ( -/obj/effect/shuttle_landmark/automatic, -/turf/space, -/area/space) -"ec" = ( -/obj/structure/cable/yellow{ - d2 = 4; - icon_state = "0-4" - }, -/obj/machinery/power/tracker{ - id = "XynergySolarStarboard" - }, -/turf/simulated/floor/airless, -/area/space) -"ed" = ( -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/airless, -/area/space) -"ee" = ( -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/structure/cable/yellow{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/turf/simulated/floor/airless, -/area/space) -"ef" = ( -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/door/blast/regular/open{ - dir = 4; - icon_state = "pdoor0"; - id_tag = "xynergy_perimeter_blast" - }, -/obj/machinery/access_button/airlock_exterior{ - frequency = 1011; - master_tag = "xyn_solar_starboard_airlock"; - pixel_y = 20 - }, -/turf/simulated/floor/airless, -/area/errant_pisces/solar_starboard) -"eg" = ( -/obj/machinery/door/airlock/external{ - frequency = 1011; - id_tag = "xyn_solar_starboard_outer" - }, -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/door/firedoor, -/turf/simulated/floor/plating, -/area/errant_pisces/solar_starboard) -"eh" = ( -/obj/structure/cable/yellow{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/machinery/atmospherics/unary/vent_pump/high_volume, -/obj/machinery/airlock_sensor{ - frequency = 1011; - id_tag = "xyn_solar_starboard_sensor"; - pixel_y = 25 - }, -/obj/machinery/embedded_controller/radio/airlock/airlock_controller{ - frequency = 1011; - id_tag = "xyn_solar_starboard_airlock"; - pixel_x = 25; - tag_airpump = "xyn_solar_starboard_pump"; - tag_chamber_sensor = "xyn_solar_starboard_sensor"; - tag_exterior_door = "xyn_solar_starboard_outer"; - tag_interior_door = "xyn_solar_starboard_inner" - }, -/turf/simulated/floor/plating, -/area/errant_pisces/solar_starboard) -"ei" = ( -/obj/structure/closet/firecloset, -/turf/simulated/floor/plating, -/area/errant_pisces/bow_maint) -"ej" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/light/small{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/plating, -/area/errant_pisces/bow_maint) -"ek" = ( -/obj/structure/table/standard, -/obj/item/towel/random, -/turf/simulated/floor/tiled/white, -/area/errant_pisces/head_f) -"el" = ( -/obj/effect/decal/cleanable/blood, -/turf/simulated/floor/tiled/white, -/area/errant_pisces/head_f) -"em" = ( -/obj/machinery/door/airlock, -/obj/effect/decal/cleanable/blood, -/turf/simulated/floor/tiled/white, -/area/errant_pisces/head_f) -"en" = ( -/obj/machinery/alarm{ - pixel_y = 24 - }, -/obj/effect/landmark/corpse/carp_fisher, -/obj/effect/decal/cleanable/blood, -/turf/simulated/floor/tiled/white, -/area/errant_pisces/head_f) -"eo" = ( -/obj/machinery/door/airlock, -/turf/simulated/floor/tiled/white, -/area/errant_pisces/head_f) -"ep" = ( -/obj/structure/hygiene/toilet{ - dir = 8 - }, -/obj/machinery/light/small{ - dir = 1 - }, -/turf/simulated/floor/tiled/white, -/area/errant_pisces/head_f) -"eq" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/plating, -/area/errant_pisces/smes_room) -"er" = ( -/obj/structure/cable/green{ - d2 = 4; - icon_state = "0-4" - }, -/obj/machinery/power/smes/buildable, -/turf/simulated/floor/plating, -/area/errant_pisces/smes_room) -"es" = ( -/obj/machinery/light/small{ - dir = 1 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/turf/simulated/floor/plating, -/area/errant_pisces/smes_room) -"et" = ( -/obj/machinery/alarm{ - pixel_y = 24 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/unary/vent_pump/on{ - level = 2 - }, -/turf/simulated/floor/plating, -/area/errant_pisces/smes_room) -"eu" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/turf/simulated/floor/plating, -/area/errant_pisces/smes_room) -"ev" = ( -/obj/machinery/light/small{ - dir = 1 - }, -/obj/structure/hygiene/toilet{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/errant_pisces/head_m) -"ew" = ( -/obj/machinery/door/airlock, -/turf/simulated/floor/tiled/white, -/area/errant_pisces/head_m) -"ex" = ( -/obj/machinery/alarm{ - pixel_y = 24 - }, -/turf/simulated/floor/tiled/white, -/area/errant_pisces/head_m) -"ey" = ( -/turf/simulated/floor/tiled/white, -/area/errant_pisces/head_m) -"ez" = ( -/obj/structure/table/standard, -/obj/item/towel/random, -/obj/item/towel/random, -/obj/item/towel/random, -/turf/simulated/floor/tiled/white, -/area/errant_pisces/head_m) -"eA" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/light/small{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/plating, -/area/errant_pisces/bow_maint) -"eB" = ( -/obj/structure/cable/yellow{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/machinery/atmospherics/unary/vent_pump/high_volume{ - id_tag = "xyn_solar_port_pump" - }, -/obj/machinery/embedded_controller/radio/airlock/airlock_controller{ - frequency = 1439; - id_tag = "xyn_solar_port_airlock"; - pixel_x = -25; - tag_airpump = "xyn_solar_port_pump"; - tag_chamber_sensor = "xyn_solar_port_sensor"; - tag_exterior_door = "xyn_solar_port_outer"; - tag_interior_door = "xyn_solar_port_inner" - }, -/obj/machinery/airlock_sensor{ - frequency = 1439; - id_tag = "xyn_solar_port_sensor"; - pixel_y = 25 - }, -/mob/living/simple_animal/hostile/carp/shark, -/turf/simulated/floor/plating, -/area/errant_pisces/solar_port) -"eC" = ( -/obj/machinery/door/airlock/external{ - frequency = 1439; - id_tag = "xyn_solar_port_outer" - }, -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/door/firedoor, -/turf/simulated/floor/plating, -/area/errant_pisces/solar_port) -"eD" = ( -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/door/blast/regular/open{ - dir = 4; - icon_state = "pdoor0"; - id_tag = "xynergy_perimeter_blast" - }, -/obj/machinery/access_button/airlock_exterior{ - frequency = 1439; - master_tag = "xyn_solar_port_airlock"; - pixel_y = 20 - }, -/turf/simulated/floor/airless, -/area/errant_pisces/solar_port) -"eE" = ( -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/structure/cable/yellow{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/turf/simulated/floor/airless, -/area/space) -"eF" = ( -/obj/machinery/power/tracker{ - id = "XynergySolarPort" - }, -/obj/structure/cable/yellow{ - d2 = 8; - icon_state = "0-8" - }, -/turf/simulated/floor/airless, -/area/space) -"eG" = ( -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/turf/simulated/floor/airless, -/area/space) -"eH" = ( -/obj/machinery/door/airlock/external{ - frequency = 1011; - id_tag = "xyn_solar_starboard_inner" - }, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/plating, -/area/errant_pisces/solar_starboard) -"eI" = ( -/obj/structure/hygiene/shower{ - dir = 4 - }, -/obj/effect/decal/cleanable/blood, -/turf/simulated/floor/tiled/white, -/area/errant_pisces/head_f) -"eJ" = ( -/turf/simulated/wall, -/area/errant_pisces/head_f) -"eK" = ( -/obj/structure/closet/athletic_mixed, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/errant_pisces/head_f) -"eL" = ( -/obj/machinery/light/small{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/obj/effect/decal/cleanable/blood, -/turf/simulated/floor/tiled/white, -/area/errant_pisces/head_f) -"eM" = ( -/obj/machinery/power/terminal, -/obj/structure/cable, -/obj/structure/cable/yellow{ - d2 = 4; - icon_state = "0-4" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/turf/simulated/floor/plating, -/area/errant_pisces/smes_room) -"eN" = ( -/obj/machinery/power/terminal{ - dir = 1 - }, -/obj/structure/cable{ - d2 = 2; - icon_state = "0-2" - }, -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/errant_pisces/smes_room) -"eO" = ( -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/errant_pisces/smes_room) -"eP" = ( -/obj/structure/cable/yellow{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 - }, -/turf/simulated/floor/plating, -/area/errant_pisces/smes_room) -"eQ" = ( -/obj/machinery/power/port_gen/pacman/mrs, -/obj/structure/cable/yellow{ - d2 = 8; - icon_state = "0-8" - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 9; - icon_state = "warning" - }, -/turf/simulated/floor/plating, -/area/errant_pisces/smes_room) -"eR" = ( -/turf/simulated/wall, -/area/errant_pisces/head_m) -"eS" = ( -/obj/machinery/light/small{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, -/turf/simulated/floor/tiled/white, -/area/errant_pisces/head_m) -"eT" = ( -/obj/structure/closet/athletic_mixed, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 8 - }, -/turf/simulated/floor/tiled/white, -/area/errant_pisces/head_m) -"eU" = ( -/obj/structure/hygiene/shower{ - dir = 8 - }, -/turf/simulated/floor/tiled/white, -/area/errant_pisces/head_m) -"eV" = ( -/obj/machinery/door/airlock/external{ - frequency = 1439; - id_tag = "xyn_solar_port_inner" - }, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/plating, -/area/errant_pisces/solar_port) -"eW" = ( -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/light/small{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/access_button/airlock_interior{ - frequency = 1011; - master_tag = "xyn_solar_starboard_airlock"; - pixel_x = -25; - pixel_y = 25 - }, -/turf/simulated/floor/plating, -/area/errant_pisces/solar_starboard) -"eX" = ( -/obj/machinery/power/smes/buildable, -/obj/structure/cable{ - d2 = 2; - icon_state = "0-2" - }, -/turf/simulated/floor/plating, -/area/errant_pisces/solar_starboard) -"eY" = ( -/obj/machinery/light/small{ - dir = 4 - }, -/obj/effect/decal/cleanable/blood, -/mob/living/simple_animal/hostile/carp/shark, -/turf/simulated/floor/tiled/white, -/area/errant_pisces/head_f) -"eZ" = ( -/obj/structure/closet/athletic_mixed, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 4; - level = 2 - }, -/turf/simulated/floor/tiled/white, -/area/errant_pisces/head_f) -"fa" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/effect/decal/cleanable/blood, -/turf/simulated/floor/tiled/white, -/area/errant_pisces/head_f) -"fb" = ( -/obj/structure/cable{ - d2 = 4; - icon_state = "0-4" - }, -/obj/machinery/power/smes/buildable, -/turf/simulated/floor/plating, -/area/errant_pisces/smes_room) -"fc" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/structure/cable{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/plating, -/area/errant_pisces/smes_room) -"fd" = ( -/obj/structure/cable{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/plating, -/area/errant_pisces/smes_room) -"fe" = ( -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/turf/simulated/floor/plating, -/area/errant_pisces/smes_room) -"ff" = ( -/obj/machinery/power/port_gen/pacman/mrs, -/obj/structure/cable/yellow{ - d2 = 8; - icon_state = "0-8" - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 8; - icon_state = "warning" - }, -/turf/simulated/floor/plating, -/area/errant_pisces/smes_room) -"fg" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/white, -/area/errant_pisces/head_m) -"fh" = ( -/obj/structure/closet/athletic_mixed, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 8 - }, -/turf/simulated/floor/tiled/white, -/area/errant_pisces/head_m) -"fi" = ( -/obj/machinery/light/small{ - dir = 8 - }, -/turf/simulated/floor/tiled/white, -/area/errant_pisces/head_m) -"fj" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/effect/landmark/corpse/engineer, -/turf/simulated/floor/plating, -/area/errant_pisces/bow_maint) -"fk" = ( -/obj/machinery/power/smes/buildable, -/obj/structure/cable{ - d2 = 2; - icon_state = "0-2" - }, -/turf/simulated/floor/plating, -/area/errant_pisces/solar_port) -"fl" = ( -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/light/small{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/access_button/airlock_interior{ - frequency = 1439; - master_tag = "xyn_solar_port_airlock"; - pixel_x = 25; - pixel_y = 25 - }, -/turf/simulated/floor/plating, -/area/errant_pisces/solar_port) -"fm" = ( -/obj/effect/wallframe_spawn/reinforced, -/obj/machinery/door/blast/regular/open{ - dir = 4; - icon_state = "pdoor0"; - id_tag = "xynergy_perimeter_blast" - }, -/turf/simulated/floor/plating, -/area/errant_pisces/solar_starboard) -"fn" = ( -/obj/effect/wallframe_spawn/reinforced, -/turf/simulated/floor/plating, -/area/errant_pisces/solar_starboard) -"fo" = ( -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/turf/simulated/floor/plating, -/area/errant_pisces/solar_starboard) -"fp" = ( -/obj/machinery/power/terminal{ - dir = 1 - }, -/obj/structure/cable/yellow{ - d2 = 8; - icon_state = "0-8" - }, -/obj/structure/cable{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 1 - }, -/turf/simulated/floor/plating, -/area/errant_pisces/solar_starboard) -"fq" = ( -/obj/machinery/door/airlock, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/errant_pisces/solar_starboard) -"fr" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/errant_pisces/bow_maint) -"ft" = ( -/obj/machinery/power/apc{ - dir = 4; - name = "east bump"; - pixel_x = 24 - }, -/obj/structure/cable/green{ - d2 = 2; - icon_state = "0-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/white, -/area/errant_pisces/head_f) -"fu" = ( -/turf/simulated/floor/plating, -/area/errant_pisces/smes_room) -"fv" = ( -/obj/machinery/power/terminal, -/obj/structure/cable, -/turf/simulated/floor/plating, -/area/errant_pisces/smes_room) -"fw" = ( -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/turf/simulated/floor/plating, -/area/errant_pisces/smes_room) -"fx" = ( -/obj/machinery/power/port_gen/pacman/mrs, -/obj/structure/cable/yellow{ - d2 = 8; - icon_state = "0-8" - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 10; - icon_state = "warning" - }, -/turf/simulated/floor/plating, -/area/errant_pisces/smes_room) -"fy" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/white, -/area/errant_pisces/head_m) -"fA" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 8 - }, -/turf/simulated/floor/plating, -/area/errant_pisces/bow_maint) -"fB" = ( -/obj/machinery/door/airlock, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/errant_pisces/solar_port) -"fC" = ( -/obj/machinery/power/terminal{ - dir = 1 - }, -/obj/structure/cable/yellow{ - d2 = 4; - icon_state = "0-4" - }, -/obj/structure/cable{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/errant_pisces/solar_port) -"fD" = ( -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/turf/simulated/floor/plating, -/area/errant_pisces/solar_port) -"fE" = ( -/obj/effect/wallframe_spawn/reinforced, -/obj/machinery/door/firedoor, -/turf/simulated/floor/plating, -/area/errant_pisces/solar_port) -"fF" = ( -/obj/effect/wallframe_spawn/reinforced, -/obj/machinery/door/firedoor, -/obj/machinery/door/blast/regular/open{ - dir = 4; - icon_state = "pdoor0"; - id_tag = "xynergy_perimeter_blast" - }, -/turf/simulated/floor/plating, -/area/errant_pisces/solar_port) -"fG" = ( -/obj/machinery/power/solar_control, -/obj/structure/cable/yellow, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 1 - }, -/turf/simulated/floor/plating, -/area/errant_pisces/solar_starboard) -"fH" = ( -/obj/machinery/alarm{ - dir = 8; - pixel_x = 24 - }, -/obj/machinery/power/apc{ - name = "south bump"; - pixel_y = -24 - }, -/obj/structure/cable, -/obj/item/stool, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 1 - }, -/turf/simulated/floor/plating, -/area/errant_pisces/solar_starboard) -"fI" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/plating, -/area/errant_pisces/bow_maint) -"fJ" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/white, -/area/errant_pisces/head_f) -"fK" = ( -/obj/machinery/light/small{ - dir = 8 - }, -/turf/simulated/floor/plating, -/area/errant_pisces/smes_room) -"fL" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/plating, -/area/errant_pisces/smes_room) -"fM" = ( -/obj/machinery/power/apc{ - name = "south bump"; - pixel_y = -24 - }, -/obj/structure/cable{ - d2 = 8; - icon_state = "0-8" - }, -/turf/simulated/floor/plating, -/area/errant_pisces/smes_room) -"fN" = ( -/obj/machinery/light/small{ - dir = 4 - }, -/obj/structure/closet/crate/radiation, -/obj/item/stack/material/tritium/ten, -/obj/item/stack/material/tritium/ten, -/turf/simulated/floor/plating, -/area/errant_pisces/smes_room) -"fO" = ( -/obj/structure/hygiene/urinal{ - pixel_y = 30 - }, -/turf/simulated/floor/tiled/white, -/area/errant_pisces/head_m) -"fP" = ( -/obj/structure/cable/green{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/white, -/area/errant_pisces/head_m) -"fR" = ( -/obj/item/stool, -/obj/machinery/alarm{ - dir = 4; - pixel_x = -32 - }, -/obj/machinery/power/apc{ - name = "south bump"; - pixel_y = -24 - }, -/obj/structure/cable, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 1; - level = 2 - }, -/turf/simulated/floor/plating, -/area/errant_pisces/solar_port) -"fS" = ( -/obj/structure/cable/yellow, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 1 - }, -/obj/machinery/power/solar_control{ - dir = 1; - id = "XynergySolarPort" - }, -/turf/simulated/floor/plating, -/area/errant_pisces/solar_port) -"fT" = ( -/obj/machinery/door/airlock, -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/plating, -/area/errant_pisces/bow_maint) -"fU" = ( -/obj/machinery/door/airlock, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/white, -/area/errant_pisces/head_f) -"fV" = ( -/obj/machinery/door/airlock, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/plating, -/area/errant_pisces/smes_room) -"fW" = ( -/obj/machinery/door/airlock, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/white, -/area/errant_pisces/head_m) -"fX" = ( -/turf/simulated/wall/r_wall, -/area/errant_pisces/hallway) -"fY" = ( -/obj/machinery/light{ - dir = 8; - icon_state = "tube1" - }, -/obj/structure/closet/emcloset, -/turf/simulated/floor/tiled, -/area/errant_pisces/hallway) -"fZ" = ( -/turf/simulated/floor/tiled, -/area/errant_pisces/hallway) -"ga" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/turf/simulated/floor/tiled, -/area/errant_pisces/hallway) -"gb" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/errant_pisces/hallway) -"gc" = ( -/obj/machinery/light, -/obj/structure/cable/green{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, -/turf/simulated/floor/tiled, -/area/errant_pisces/hallway) -"gd" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/errant_pisces/hallway) -"ge" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply, -/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers, -/turf/simulated/floor/tiled, -/area/errant_pisces/hallway) -"gf" = ( -/obj/machinery/light, -/obj/structure/cable/green{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, -/turf/simulated/floor/tiled, -/area/errant_pisces/hallway) -"gg" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/turf/simulated/floor/tiled, -/area/errant_pisces/hallway) -"gh" = ( -/obj/machinery/light{ - dir = 4; - icon_state = "tube1" - }, -/obj/structure/closet/emcloset, -/turf/simulated/floor/tiled, -/area/errant_pisces/hallway) -"gi" = ( -/turf/simulated/wall/r_wall, -/area/errant_pisces/rooms) -"gj" = ( -/turf/simulated/wall, -/area/errant_pisces/rooms) -"gk" = ( -/obj/machinery/alarm{ - dir = 4; - pixel_x = -32 - }, -/obj/machinery/door/firedoor, -/turf/simulated/floor/tiled, -/area/errant_pisces/hallway) -"gl" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled, -/area/errant_pisces/hallway) -"gm" = ( -/obj/machinery/power/apc{ - dir = 4; - name = "east bump"; - pixel_x = 24 - }, -/obj/structure/cable/green{ - d2 = 8; - icon_state = "0-8" - }, -/obj/machinery/door/firedoor, -/turf/simulated/floor/tiled, -/area/errant_pisces/hallway) -"gn" = ( -/turf/simulated/wall, -/area/errant_pisces/dorms) -"go" = ( -/turf/simulated/wall/r_wall, -/area/errant_pisces/dorms) -"gp" = ( -/obj/structure/bed/padded, -/obj/item/bedsheet/rainbow, -/turf/simulated/floor/wood, -/area/errant_pisces/rooms) -"gq" = ( -/turf/simulated/floor/wood, -/area/errant_pisces/rooms) -"gr" = ( -/obj/machinery/computer/modular{ - dir = 8 - }, -/turf/simulated/floor/wood, -/area/errant_pisces/rooms) -"gs" = ( -/obj/structure/bed/padded, -/obj/item/bedsheet/orange, -/turf/simulated/floor/wood, -/area/errant_pisces/rooms) -"gt" = ( -/obj/structure/bed/chair/comfy/brown{ - dir = 1 - }, -/turf/simulated/floor/wood, -/area/errant_pisces/rooms) -"gu" = ( -/obj/machinery/light{ - dir = 1; - icon_state = "tube1" - }, -/obj/machinery/jukebox, -/turf/simulated/floor/wood, -/area/errant_pisces/rooms) -"gv" = ( -/obj/structure/bed/chair/comfy/brown{ - dir = 4 - }, -/turf/simulated/floor/wood, -/area/errant_pisces/rooms) -"gw" = ( -/obj/structure/table/woodentable, -/obj/machinery/atmospherics/unary/vent_pump/on{ - level = 2 - }, -/turf/simulated/floor/wood, -/area/errant_pisces/rooms) -"gx" = ( -/obj/effect/wallframe_spawn/reinforced, -/obj/machinery/door/firedoor, -/turf/simulated/floor/plating, -/area/errant_pisces/rooms) -"gy" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 4; - level = 2 - }, -/turf/simulated/floor/tiled, -/area/errant_pisces/hallway) -"gz" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 8 - }, -/turf/simulated/floor/tiled, -/area/errant_pisces/hallway) -"gA" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 8 - }, -/turf/simulated/floor/tiled, -/area/errant_pisces/hallway) -"gB" = ( -/obj/effect/wallframe_spawn/reinforced, -/obj/machinery/door/firedoor, -/turf/simulated/floor/plating, -/area/errant_pisces/dorms) -"gC" = ( -/obj/machinery/vending/snack, -/obj/machinery/atmospherics/unary/vent_pump/on{ - level = 2 - }, -/turf/simulated/floor/tiled, -/area/errant_pisces/dorms) -"gD" = ( -/obj/machinery/vending/fitness, -/obj/machinery/light{ - dir = 1; - icon_state = "tube1" - }, -/turf/simulated/floor/tiled, -/area/errant_pisces/dorms) -"gE" = ( -/obj/machinery/vending/cola, -/turf/simulated/floor/tiled, -/area/errant_pisces/dorms) -"gF" = ( -/obj/structure/closet, -/obj/random/clothing, -/turf/simulated/floor/tiled, -/area/errant_pisces/dorms) -"gG" = ( -/obj/machinery/light/small{ - dir = 1 - }, -/turf/simulated/floor/tiled, -/area/errant_pisces/dorms) -"gH" = ( -/obj/structure/closet, -/obj/random/accessory, -/turf/simulated/floor/tiled, -/area/errant_pisces/dorms) -"gI" = ( -/obj/structure/bed/padded, -/obj/item/bedsheet, -/obj/random/plushie, -/turf/simulated/floor/tiled, -/area/errant_pisces/dorms) -"gJ" = ( -/obj/structure/bed/padded, -/obj/item/bedsheet, -/turf/simulated/floor/tiled, -/area/errant_pisces/dorms) -"gK" = ( -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/turf/simulated/floor/airless, -/area/space) -"gL" = ( -/obj/structure/bed/chair/comfy/green, -/obj/machinery/light{ - dir = 8; - icon_state = "tube1" - }, -/turf/simulated/floor/wood, -/area/errant_pisces/rooms) -"gM" = ( -/mob/living/simple_animal/hostile/carp/shark, -/turf/simulated/floor/wood, -/area/errant_pisces/rooms) -"gN" = ( -/obj/structure/closet/cabinet, -/obj/item/clothing/shoes/jackboots, -/obj/item/clothing/suit/armor/vest, -/turf/simulated/floor/wood, -/area/errant_pisces/rooms) -"gO" = ( -/obj/structure/bed/chair/comfy/teal, -/obj/machinery/light{ - dir = 8; - icon_state = "tube1" - }, -/turf/simulated/floor/wood, -/area/errant_pisces/rooms) -"gP" = ( -/obj/structure/filingcabinet/chestdrawer, -/turf/simulated/floor/wood, -/area/errant_pisces/rooms) -"gQ" = ( -/obj/structure/table/gamblingtable, -/obj/item/deck/cards, -/turf/simulated/floor/wood, -/area/errant_pisces/rooms) -"gR" = ( -/obj/structure/bed/chair/comfy/brown{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/wood, -/area/errant_pisces/rooms) -"gS" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled, -/area/errant_pisces/hallway) -"gT" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/tiled, -/area/errant_pisces/dorms) -"gU" = ( -/turf/simulated/floor/tiled, -/area/errant_pisces/dorms) -"gV" = ( -/obj/machinery/power/apc{ - dir = 4; - name = "east bump"; - pixel_x = 24 - }, -/obj/structure/cable/green{ - d2 = 2; - icon_state = "0-2" - }, -/turf/simulated/floor/tiled, -/area/errant_pisces/dorms) -"gW" = ( -/obj/structure/closet, -/obj/random/cash, -/obj/random/drinkbottle, -/turf/simulated/floor/tiled, -/area/errant_pisces/dorms) -"gX" = ( -/obj/structure/closet, -/obj/random/hat, -/turf/simulated/floor/tiled, -/area/errant_pisces/dorms) -"gY" = ( -/obj/structure/curtain/black, -/turf/simulated/floor/tiled, -/area/errant_pisces/dorms) -"gZ" = ( -/obj/structure/table/woodentable, -/turf/simulated/floor/wood, -/area/errant_pisces/rooms) -"ha" = ( -/obj/structure/closet, -/obj/random/smokes, -/obj/random/projectile, -/turf/simulated/floor/wood, -/area/errant_pisces/rooms) -"hb" = ( -/obj/structure/table/woodentable, -/obj/item/paper_bin, -/obj/item/device/flashlight/lamp, -/turf/simulated/floor/wood, -/area/errant_pisces/rooms) -"hc" = ( -/obj/structure/closet, -/obj/random/snack, -/obj/random/tool, -/obj/random/suit, -/turf/simulated/floor/wood, -/area/errant_pisces/rooms) -"hd" = ( -/obj/structure/table/gamblingtable, -/turf/simulated/floor/wood, -/area/errant_pisces/rooms) -"he" = ( -/obj/structure/table/woodentable, -/obj/item/material/ashtray/bronze, -/obj/random/smokes, -/turf/simulated/floor/wood, -/area/errant_pisces/rooms) -"hf" = ( -/obj/structure/cable/green{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, -/turf/simulated/floor/wood, -/area/errant_pisces/rooms) -"hg" = ( -/obj/machinery/door/airlock, -/obj/machinery/door/firedoor, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/errant_pisces/rooms) -"hi" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply, -/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers, -/turf/simulated/floor/tiled, -/area/errant_pisces/hallway) -"hj" = ( -/obj/machinery/door/airlock, -/obj/machinery/door/firedoor, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/errant_pisces/dorms) -"hk" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/turf/simulated/floor/tiled, -/area/errant_pisces/dorms) -"hl" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled, -/area/errant_pisces/dorms) -"hm" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/turf/simulated/floor/tiled, -/area/errant_pisces/dorms) -"hn" = ( -/obj/machinery/door/airlock, -/obj/machinery/door/firedoor, -/turf/simulated/floor/tiled, -/area/errant_pisces/dorms) -"ho" = ( -/obj/machinery/light/small{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/errant_pisces/dorms) -"hp" = ( -/obj/effect/floor_decal/solarpanel, -/obj/structure/cable/yellow{ - d2 = 4; - icon_state = "0-4" - }, -/obj/machinery/power/solar{ - id = "XynergySolarPort" - }, -/obj/machinery/power/solar{ - id = "XynergySolarPort" - }, -/turf/simulated/floor/airless, -/area/space) -"hq" = ( -/turf/simulated/wall/r_wall, -/area/errant_pisces/infirmary) -"hr" = ( -/obj/machinery/door/airlock, -/turf/simulated/floor/wood, -/area/errant_pisces/rooms) -"hs" = ( -/obj/effect/landmark/corpse/bridgeofficer, -/obj/effect/decal/cleanable/blood, -/turf/simulated/floor/wood, -/area/errant_pisces/rooms) -"ht" = ( -/obj/structure/bed/chair/comfy/brown, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/wood, -/area/errant_pisces/rooms) -"hu" = ( -/obj/machinery/vending/coffee, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 1 - }, -/turf/simulated/floor/tiled, -/area/errant_pisces/dorms) -"hv" = ( -/obj/machinery/vending/cigarette, -/turf/simulated/floor/tiled, -/area/errant_pisces/dorms) -"hw" = ( -/obj/structure/closet, -/turf/simulated/floor/tiled, -/area/errant_pisces/dorms) -"hx" = ( -/obj/effect/decal/cleanable/blood, -/turf/simulated/floor/wood, -/area/errant_pisces/rooms) -"hy" = ( -/obj/machinery/light{ - dir = 1; - icon_state = "tube1" - }, -/turf/simulated/floor/wood, -/area/errant_pisces/rooms) -"hz" = ( -/obj/machinery/alarm{ - dir = 1; - pixel_y = -25; - req_access = newlist() - }, -/obj/structure/bed/chair/comfy/brown{ - dir = 4 - }, -/turf/simulated/floor/wood, -/area/errant_pisces/rooms) -"hA" = ( -/obj/machinery/power/apc{ - name = "south bump"; - pixel_y = -24 - }, -/obj/structure/table/woodentable, -/obj/random/smokes, -/obj/structure/cable/green, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 1 - }, -/turf/simulated/floor/wood, -/area/errant_pisces/rooms) -"hB" = ( -/obj/machinery/vending/games, -/turf/simulated/floor/tiled, -/area/errant_pisces/dorms) -"hC" = ( -/obj/machinery/vending/assist, -/turf/simulated/floor/tiled, -/area/errant_pisces/dorms) -"hD" = ( -/obj/machinery/light/small, -/turf/simulated/floor/tiled, -/area/errant_pisces/dorms) -"hE" = ( -/obj/structure/bed/padded, -/obj/item/bedsheet, -/obj/random/plushie/large, -/turf/simulated/floor/tiled, -/area/errant_pisces/dorms) -"hF" = ( -/turf/simulated/wall/r_wall, -/area/errant_pisces/live_storage) -"hG" = ( -/obj/structure/closet, -/obj/item/clothing/under/rank/medical/scrubs, -/obj/item/clothing/under/rank/medical/scrubs, -/obj/item/clothing/under/rank/medical/scrubs, -/obj/item/clothing/under/rank/nurse, -/turf/simulated/floor/plating, -/area/errant_pisces/infirmary) -"hH" = ( -/obj/structure/table/standard, -/obj/random/firstaid, -/obj/item/storage/box/bodybags, -/turf/simulated/floor/plating, -/area/errant_pisces/infirmary) -"hI" = ( -/turf/simulated/wall, -/area/errant_pisces/infirmary) -"hJ" = ( -/obj/machinery/optable, -/turf/simulated/floor/tiled/white, -/area/errant_pisces/infirmary) -"hK" = ( -/obj/machinery/light{ - dir = 1; - icon_state = "tube1" - }, -/turf/simulated/floor/tiled/white, -/area/errant_pisces/infirmary) -"hL" = ( -/obj/structure/table/steel, -/obj/item/clothing/head/surgery, -/obj/item/storage/firstaid/surgery, -/obj/item/storage/firstaid/adv, -/obj/item/clothing/mask/breath/anesthetic, -/turf/simulated/floor/tiled/white, -/area/errant_pisces/infirmary) -"hM" = ( -/obj/machinery/light{ - dir = 4; - icon_state = "tube1" - }, -/turf/simulated/floor/tiled, -/area/errant_pisces/hallway) -"hN" = ( -/obj/structure/closet/emcloset, -/turf/simulated/floor/tiled, -/area/errant_pisces/dorms) -"hO" = ( -/obj/machinery/light{ - dir = 4; - icon_state = "tube1" - }, -/obj/structure/closet/emcloset, -/turf/simulated/floor/tiled, -/area/errant_pisces/dorms) -"hP" = ( -/obj/structure/crematorium, -/turf/simulated/floor/plating, -/area/errant_pisces/infirmary) -"hQ" = ( -/obj/structure/morgue{ - dir = 2 - }, -/turf/simulated/floor/plating, -/area/errant_pisces/infirmary) -"hR" = ( -/obj/structure/iv_drip, -/obj/machinery/light/small{ - dir = 8 - }, -/turf/simulated/floor/plating, -/area/errant_pisces/infirmary) -"hS" = ( -/turf/simulated/floor/plating, -/area/errant_pisces/infirmary) -"hT" = ( -/obj/machinery/computer/operating{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/errant_pisces/infirmary) -"hU" = ( -/mob/living/simple_animal/hostile/carp/shark, -/turf/simulated/floor/tiled/white, -/area/errant_pisces/infirmary) -"hV" = ( -/obj/effect/decal/cleanable/blood, -/turf/simulated/floor/tiled/white, -/area/errant_pisces/infirmary) -"hW" = ( -/obj/structure/bed/padded, -/obj/item/bedsheet, -/turf/simulated/floor/tiled, -/area/errant_pisces/infirmary) -"hX" = ( -/obj/machinery/light/small{ - dir = 1 - }, -/turf/simulated/floor/tiled, -/area/errant_pisces/infirmary) -"hY" = ( -/obj/structure/bed/chair, -/turf/simulated/floor/tiled, -/area/errant_pisces/infirmary) -"hZ" = ( -/obj/structure/table/standard, -/obj/random/firstaid, -/obj/structure/window/basic{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/errant_pisces/infirmary) -"ia" = ( -/obj/structure/table/standard, -/obj/random/glasses, -/obj/structure/window/basic{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/errant_pisces/infirmary) -"ib" = ( -/turf/simulated/floor/tiled, -/area/errant_pisces/infirmary) -"ic" = ( -/obj/machinery/door/airlock, -/obj/machinery/door/firedoor, -/turf/simulated/floor/tiled, -/area/errant_pisces/infirmary) -"id" = ( -/obj/machinery/light{ - dir = 1; - icon_state = "tube1" - }, -/turf/simulated/floor/tiled, -/area/errant_pisces/infirmary) -"ie" = ( -/obj/structure/closet/emcloset, -/turf/simulated/floor/tiled, -/area/errant_pisces/infirmary) -"if" = ( -/obj/effect/wallframe_spawn/reinforced, -/obj/machinery/door/firedoor, -/turf/simulated/floor/plating, -/area/errant_pisces/infirmary) -"ig" = ( -/obj/structure/reagent_dispensers/water_cooler, -/turf/simulated/floor/tiled, -/area/errant_pisces/dorms) -"ih" = ( -/obj/item/material/knife/table, -/turf/simulated/floor/tiled, -/area/errant_pisces/dorms) -"ii" = ( -/obj/item/stool, -/turf/simulated/floor/tiled, -/area/errant_pisces/dorms) -"ij" = ( -/obj/structure/table/standard, -/turf/simulated/floor/tiled, -/area/errant_pisces/dorms) -"ik" = ( -/obj/machinery/alarm{ - pixel_y = 24 - }, -/turf/simulated/floor/tiled, -/area/errant_pisces/dorms) -"il" = ( -/obj/effect/decal/cleanable/blood, -/turf/simulated/floor/tiled, -/area/errant_pisces/dorms) -"im" = ( -/obj/effect/landmark/corpse/chef, -/obj/effect/decal/cleanable/blood, -/turf/simulated/floor/tiled, -/area/errant_pisces/dorms) -"in" = ( -/obj/machinery/door/airlock/freezer, -/turf/simulated/floor/tiled/freezer, -/area/errant_pisces/dorms) -"io" = ( -/turf/simulated/floor/tiled/freezer, -/area/errant_pisces/dorms) -"ip" = ( -/turf/simulated/floor/plating, -/area/errant_pisces/live_storage) -"iq" = ( -/obj/machinery/button/blast_door{ - id_tag = "xynergy_bd_cell1"; - name = "Cell 1 blast door-control"; - pixel_y = -25 - }, -/turf/simulated/floor/plating, -/area/errant_pisces/live_storage) -"ir" = ( -/obj/machinery/light/small, -/turf/simulated/floor/plating, -/area/errant_pisces/live_storage) -"is" = ( -/obj/machinery/button/blast_door{ - id_tag = "xynergy_bd_cell2"; - name = "Cell 2 blast door-control"; - pixel_y = -25 - }, -/turf/simulated/floor/plating, -/area/errant_pisces/live_storage) -"it" = ( -/obj/machinery/button/blast_door{ - id_tag = "xynergy_bd_cell3"; - name = "Cell 3 blast door-control"; - pixel_y = -25 - }, -/turf/simulated/floor/plating, -/area/errant_pisces/live_storage) -"iu" = ( -/obj/machinery/button/crematorium{ - pixel_x = -20 - }, -/turf/simulated/floor/plating, -/area/errant_pisces/infirmary) -"iv" = ( -/obj/machinery/light/small{ - dir = 1 - }, -/obj/effect/landmark/corpse/carp_fisher, -/obj/effect/decal/cleanable/blood, -/turf/simulated/floor/plating, -/area/errant_pisces/infirmary) -"iw" = ( -/obj/effect/decal/cleanable/blood, -/turf/simulated/floor/plating, -/area/errant_pisces/infirmary) -"ix" = ( -/obj/machinery/atmospherics/unary/vent_pump/on, -/turf/simulated/floor/plating, -/area/errant_pisces/infirmary) -"iy" = ( -/obj/machinery/door/airlock, -/turf/simulated/floor/plating, -/area/errant_pisces/infirmary) -"iz" = ( -/obj/machinery/door/airlock, -/obj/effect/decal/cleanable/blood, -/turf/simulated/floor/tiled, -/area/errant_pisces/infirmary) -"iA" = ( -/obj/effect/wallframe_spawn/reinforced, -/turf/simulated/floor/plating, -/area/errant_pisces/infirmary) -"iB" = ( -/obj/structure/curtain/medical, -/turf/simulated/floor/tiled, -/area/errant_pisces/infirmary) -"iC" = ( -/obj/structure/window/basic, -/obj/structure/window/basic{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/errant_pisces/infirmary) -"iD" = ( -/obj/structure/closet, -/obj/random/firstaid, -/turf/simulated/floor/tiled, -/area/errant_pisces/infirmary) -"iE" = ( -/obj/machinery/computer/modular, -/turf/simulated/floor/tiled, -/area/errant_pisces/infirmary) -"iF" = ( -/obj/structure/table/standard, -/obj/item/trash/plate, -/obj/item/material/kitchen/utensil/fork, -/turf/simulated/floor/tiled, -/area/errant_pisces/dorms) -"iG" = ( -/obj/structure/table/marble, -/obj/random/snack, -/turf/simulated/floor/tiled, -/area/errant_pisces/dorms) -"iH" = ( -/obj/structure/table/marble, -/obj/item/trash/plate, -/turf/simulated/floor/tiled, -/area/errant_pisces/dorms) -"iI" = ( -/mob/living/simple_animal/hostile/carp/shark, -/turf/simulated/floor/tiled/freezer, -/area/errant_pisces/dorms) -"iJ" = ( -/obj/structure/closet/crate/freezer, -/turf/simulated/floor/tiled/freezer, -/area/errant_pisces/dorms) -"iK" = ( -/obj/machinery/door/blast/regular{ - id_tag = "xynergy_bd_cell1" - }, -/turf/simulated/floor/plating, -/area/errant_pisces/live_storage) -"iL" = ( -/obj/machinery/door/blast/regular{ - id_tag = "xynergy_bd_cell2" - }, -/turf/simulated/floor/plating, -/area/errant_pisces/live_storage) -"iM" = ( -/obj/machinery/door/blast/regular{ - id_tag = "xynergy_bd_cell3" - }, -/turf/simulated/floor/plating, -/area/errant_pisces/live_storage) -"iN" = ( -/obj/structure/closet/crate/secure/biohazard, -/turf/simulated/floor/plating, -/area/errant_pisces/infirmary) -"iO" = ( -/mob/living/simple_animal/hostile/carp/shark, -/turf/simulated/floor/plating, -/area/errant_pisces/infirmary) -"iP" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/errant_pisces/infirmary) -"iQ" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 1 - }, -/turf/simulated/floor/plating, -/area/errant_pisces/infirmary) -"iR" = ( -/obj/machinery/door/airlock, -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/errant_pisces/infirmary) -"iS" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/errant_pisces/infirmary) -"iT" = ( -/obj/machinery/light{ - dir = 1; - icon_state = "tube1" - }, -/obj/machinery/alarm{ - dir = 1; - pixel_y = -25; - req_access = newlist() - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/errant_pisces/infirmary) -"iU" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/effect/landmark/corpse/doctor, -/obj/effect/decal/cleanable/blood, -/turf/simulated/floor/tiled, -/area/errant_pisces/infirmary) -"iV" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/effect/decal/cleanable/blood, -/turf/simulated/floor/tiled, -/area/errant_pisces/infirmary) -"iW" = ( -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/errant_pisces/infirmary) -"iX" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 1 - }, -/turf/simulated/floor/tiled, -/area/errant_pisces/infirmary) -"iY" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/errant_pisces/infirmary) -"iZ" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/turf/simulated/floor/tiled, -/area/errant_pisces/infirmary) -"ja" = ( -/obj/machinery/body_scanconsole, -/obj/machinery/light{ - dir = 4; - icon_state = "tube1" - }, -/turf/simulated/floor/tiled, -/area/errant_pisces/infirmary) -"jb" = ( -/obj/structure/table/standard, -/obj/item/paper_bin, -/turf/simulated/floor/tiled, -/area/errant_pisces/infirmary) -"jc" = ( -/obj/structure/table/standard, -/turf/simulated/floor/tiled, -/area/errant_pisces/infirmary) -"jd" = ( -/obj/structure/table/marble, -/turf/simulated/floor/tiled, -/area/errant_pisces/dorms) -"je" = ( -/obj/machinery/light/small{ - dir = 8 - }, -/obj/effect/decal/cleanable/blood, -/turf/simulated/floor/tiled/freezer, -/area/errant_pisces/dorms) -"jf" = ( -/obj/structure/lattice, -/turf/space, -/area/errant_pisces/live_storage) -"jg" = ( -/obj/structure/lattice, -/mob/living/simple_animal/hostile/carp, -/turf/space, -/area/errant_pisces/live_storage) -"jh" = ( -/obj/machinery/light/small{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/errant_pisces/live_storage) -"ji" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/effect/decal/cleanable/blood, -/turf/simulated/floor/plating, -/area/errant_pisces/infirmary) -"jj" = ( -/obj/structure/iv_drip, -/turf/simulated/floor/tiled, -/area/errant_pisces/infirmary) -"jk" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled, -/area/errant_pisces/infirmary) -"jl" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/tiled, -/area/errant_pisces/infirmary) -"jm" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled, -/area/errant_pisces/infirmary) -"jn" = ( -/obj/machinery/bodyscanner, -/turf/simulated/floor/tiled, -/area/errant_pisces/infirmary) -"jo" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, -/turf/simulated/floor/tiled, -/area/errant_pisces/infirmary) -"jp" = ( -/obj/structure/cable/green{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/errant_pisces/infirmary) -"jq" = ( -/obj/machinery/door/airlock, -/obj/machinery/door/firedoor, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/errant_pisces/infirmary) -"jr" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/errant_pisces/hallway) -"js" = ( -/obj/structure/table/standard, -/obj/item/material/kitchen/utensil/fork/plastic, -/obj/random/snack, -/turf/simulated/floor/tiled, -/area/errant_pisces/dorms) -"jt" = ( -/obj/structure/table/marble, -/obj/machinery/microwave, -/turf/simulated/floor/tiled, -/area/errant_pisces/dorms) -"ju" = ( -/obj/structure/table/marble, -/obj/machinery/reagentgrinder/juicer, -/obj/item/reagent_containers/glass/beaker/large, -/turf/simulated/floor/tiled, -/area/errant_pisces/dorms) -"jv" = ( -/obj/effect/landmark/corpse/carp_fisher, -/obj/effect/decal/cleanable/blood, -/turf/simulated/floor/tiled/freezer, -/area/errant_pisces/dorms) -"jw" = ( -/obj/structure/closet/secure_closet/freezer/meat, -/turf/simulated/floor/tiled/freezer, -/area/errant_pisces/dorms) -"jx" = ( -/obj/structure/lattice, -/obj/machinery/light/small{ - dir = 8 - }, -/turf/space, -/area/errant_pisces/live_storage) -"jy" = ( -/obj/machinery/access_button/airlock_exterior{ - frequency = 1439; - master_tag = "xyn_ls_airlock"; - pixel_x = -25 - }, -/turf/simulated/floor/plating, -/area/errant_pisces/live_storage) -"jz" = ( -/turf/simulated/wall/r_wall, -/area/errant_pisces/science_wing) -"jA" = ( -/obj/machinery/door/airlock, -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/effect/decal/cleanable/blood, -/turf/simulated/floor/plating, -/area/errant_pisces/science_wing) -"jB" = ( -/obj/machinery/light/small, -/turf/simulated/floor/tiled, -/area/errant_pisces/infirmary) -"jC" = ( -/obj/structure/table/standard, -/obj/item/storage/box/freezer, -/turf/simulated/floor/tiled, -/area/errant_pisces/infirmary) -"jD" = ( -/obj/structure/table/standard, -/obj/random/firstaid, -/obj/item/clothing/under/rank/medical/paramedic, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 1 - }, -/turf/simulated/floor/tiled, -/area/errant_pisces/infirmary) -"jE" = ( -/obj/structure/table/standard, -/obj/item/roller, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 1 - }, -/turf/simulated/floor/tiled, -/area/errant_pisces/infirmary) -"jF" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/turf/simulated/floor/tiled, -/area/errant_pisces/infirmary) -"jG" = ( -/obj/machinery/door/airlock, -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/errant_pisces/infirmary) -"jH" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/turf/simulated/floor/tiled, -/area/errant_pisces/infirmary) -"jI" = ( -/obj/item/stool, -/obj/machinery/alarm{ - dir = 1; - pixel_y = -25; - req_access = newlist() - }, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 1 - }, -/turf/simulated/floor/tiled, -/area/errant_pisces/infirmary) -"jJ" = ( -/obj/machinery/power/apc{ - name = "south bump"; - pixel_y = -24 - }, -/obj/item/stool, -/obj/structure/cable/green, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 1 - }, -/turf/simulated/floor/tiled, -/area/errant_pisces/infirmary) -"jK" = ( -/obj/structure/table/standard, -/obj/item/material/kitchen/utensil/fork, -/obj/machinery/light, -/turf/simulated/floor/tiled, -/area/errant_pisces/dorms) -"jL" = ( -/obj/machinery/vending/dinnerware, -/turf/simulated/floor/tiled, -/area/errant_pisces/dorms) -"jM" = ( -/obj/machinery/light, -/turf/simulated/floor/tiled, -/area/errant_pisces/dorms) -"jN" = ( -/obj/machinery/cooker/oven, -/turf/simulated/floor/tiled, -/area/errant_pisces/dorms) -"jO" = ( -/obj/effect/decal/cleanable/blood, -/turf/simulated/floor/tiled/freezer, -/area/errant_pisces/dorms) -"jP" = ( -/obj/structure/closet/secure_closet/freezer/kitchen{ - req_access = newlist() - }, -/turf/simulated/floor/tiled/freezer, -/area/errant_pisces/dorms) -"jQ" = ( -/obj/machinery/door/airlock/external{ - frequency = 1439; - id_tag = "xyn_ls_outer" - }, -/obj/machinery/door/firedoor, -/turf/simulated/floor/plating, -/area/errant_pisces/live_storage) -"jR" = ( -/obj/structure/lattice, -/turf/space, -/area/errant_pisces/science_wing) -"jS" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/effect/decal/cleanable/blood, -/turf/simulated/floor/tiled, -/area/errant_pisces/science_wing) -"jT" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 8 - }, -/obj/machinery/alarm{ - pixel_y = 24 - }, -/obj/structure/closet, -/obj/item/clothing/under/carp, -/turf/simulated/floor/tiled, -/area/errant_pisces/science_wing) -"jU" = ( -/obj/structure/table/standard, -/turf/simulated/floor/tiled, -/area/errant_pisces/science_wing) -"jV" = ( -/obj/structure/table/standard, -/obj/item/paper_bin, -/turf/simulated/floor/tiled, -/area/errant_pisces/science_wing) -"jW" = ( -/obj/machinery/photocopier, -/turf/simulated/floor/tiled, -/area/errant_pisces/science_wing) -"jX" = ( -/obj/structure/filingcabinet/chestdrawer, -/turf/simulated/floor/tiled, -/area/errant_pisces/science_wing) -"jY" = ( -/obj/machinery/door/airlock, -/obj/machinery/door/firedoor, -/turf/simulated/floor/tiled, -/area/errant_pisces/cryo) -"jZ" = ( -/obj/machinery/door/airlock, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled, -/area/errant_pisces/cryo) -"ka" = ( -/obj/machinery/atmospherics/unary/vent_pump/high_volume{ - id_tag = "xyn_ls_pump" - }, -/obj/machinery/light/small{ - dir = 4 - }, -/obj/machinery/airlock_sensor{ - frequency = 1439; - id_tag = "xyn_ls_sensor"; - pixel_x = -25 - }, -/turf/simulated/floor/plating, -/area/errant_pisces/live_storage) -"kb" = ( -/obj/structure/lattice, -/obj/machinery/light/small{ - dir = 8 - }, -/turf/space, -/area/errant_pisces/science_wing) -"kc" = ( -/obj/structure/lattice, -/mob/living/simple_animal/hostile/carp, -/turf/space, -/area/errant_pisces/science_wing) -"kd" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 8 - }, -/obj/effect/decal/cleanable/blood, -/turf/simulated/floor/tiled, -/area/errant_pisces/science_wing) -"ke" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 8 - }, -/obj/structure/closet, -/obj/item/clothing/suit/storage/toggle/labcoat/genetics, -/turf/simulated/floor/tiled, -/area/errant_pisces/science_wing) -"kf" = ( -/obj/machinery/computer/modular, -/turf/simulated/floor/tiled, -/area/errant_pisces/science_wing) -"kg" = ( -/obj/structure/bed/chair/office/dark{ - dir = 1 - }, -/turf/simulated/floor/tiled, -/area/errant_pisces/science_wing) -"kh" = ( -/turf/simulated/floor/tiled, -/area/errant_pisces/science_wing) -"ki" = ( -/obj/machinery/light{ - dir = 4; - icon_state = "tube1" - }, -/turf/simulated/floor/tiled, -/area/errant_pisces/science_wing) -"kj" = ( -/turf/simulated/wall/r_wall, -/area/errant_pisces/cryo) -"kk" = ( -/obj/machinery/sleeper{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/errant_pisces/cryo) -"kl" = ( -/obj/machinery/light{ - dir = 1; - icon_state = "tube1" - }, -/turf/simulated/floor/tiled, -/area/errant_pisces/cryo) -"km" = ( -/obj/machinery/alarm{ - pixel_y = 24 - }, -/obj/structure/window/basic{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/errant_pisces/cryo) -"kn" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/errant_pisces/cryo) -"ko" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 8 - }, -/turf/simulated/floor/tiled, -/area/errant_pisces/cryo) -"kp" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 8 - }, -/turf/simulated/floor/tiled, -/area/errant_pisces/cryo) -"kq" = ( -/obj/machinery/power/apc{ - dir = 1; - name = "north bump"; - pixel_y = 24 - }, -/obj/structure/cable/green{ - d2 = 8; - icon_state = "0-8" - }, -/obj/structure/window/basic{ - dir = 8 - }, -/turf/simulated/floor/tiled, -/area/errant_pisces/cryo) -"kr" = ( -/obj/machinery/sleeper{ - dir = 8 - }, -/turf/simulated/floor/tiled, -/area/errant_pisces/cryo) -"ks" = ( -/turf/simulated/wall/r_wall, -/area/errant_pisces/general_storage) -"kt" = ( -/turf/simulated/wall/r_wall, -/area/errant_pisces/prod_storage) -"ku" = ( -/obj/machinery/door/airlock/external{ - frequency = 1439; - id_tag = "xyn_ls_inner" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/door/firedoor, -/turf/simulated/floor/plating, -/area/errant_pisces/live_storage) -"kv" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/obj/machinery/light{ - dir = 8; - icon_state = "tube1" - }, -/turf/simulated/floor/tiled, -/area/errant_pisces/science_wing) -"kw" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/effect/decal/cleanable/blood, -/turf/simulated/floor/tiled, -/area/errant_pisces/science_wing) -"kx" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/errant_pisces/science_wing) -"ky" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/door/airlock, -/obj/machinery/door/firedoor, -/turf/simulated/floor/tiled, -/area/errant_pisces/science_wing) -"kz" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/obj/machinery/alarm{ - pixel_y = 24 - }, -/turf/simulated/floor/tiled, -/area/errant_pisces/science_wing) -"kA" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 8 - }, -/obj/machinery/light{ - dir = 1 - }, -/obj/structure/bookcase, -/obj/item/book/manual/anomaly_testing, -/obj/item/book/manual/anomaly_spectroscopy, -/turf/simulated/floor/tiled, -/area/errant_pisces/science_wing) -"kB" = ( -/obj/structure/bookcase, -/obj/item/book/manual/mass_spectrometry, -/obj/item/book/manual/research_and_development, -/obj/item/book/manual/engineering_guide, -/turf/simulated/floor/tiled, -/area/errant_pisces/science_wing) -"kC" = ( -/obj/structure/bookcase, -/obj/item/book/manual/materials_chemistry_analysis, -/obj/item/book/manual/hydroponics_pod_people, -/turf/simulated/floor/tiled, -/area/errant_pisces/science_wing) -"kD" = ( -/obj/machinery/vending/assist, -/turf/simulated/floor/tiled, -/area/errant_pisces/science_wing) -"kE" = ( -/obj/machinery/light{ - dir = 1 - }, -/obj/structure/bed/chair/office/dark{ - dir = 8 - }, -/turf/simulated/floor/tiled, -/area/errant_pisces/science_wing) -"kF" = ( -/obj/structure/closet/secure_closet/freezer/fridge, -/turf/simulated/floor/tiled, -/area/errant_pisces/science_wing) -"kG" = ( -/obj/structure/closet, -/obj/item/clothing/suit/storage/toggle/labcoat/blue, -/obj/random/coin, -/obj/random/coin, -/turf/simulated/floor/tiled, -/area/errant_pisces/cryo) -"kH" = ( -/turf/simulated/floor/tiled, -/area/errant_pisces/cryo) -"kI" = ( -/obj/structure/closet, -/obj/item/clothing/suit/apron/overalls, -/obj/random/drinkbottle, -/turf/simulated/floor/tiled, -/area/errant_pisces/cryo) -"kJ" = ( -/obj/structure/window/basic{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/errant_pisces/cryo) -"kK" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled, -/area/errant_pisces/cryo) -"kL" = ( -/obj/structure/window/basic{ - dir = 8 - }, -/turf/simulated/floor/tiled, -/area/errant_pisces/cryo) -"kM" = ( -/obj/structure/closet, -/obj/item/clothing/suit/storage/toggle/labcoat/xyn_machine, -/turf/simulated/floor/tiled, -/area/errant_pisces/cryo) -"kN" = ( -/obj/structure/closet, -/obj/item/clothing/suit/apron/overalls, -/turf/simulated/floor/tiled, -/area/errant_pisces/cryo) -"kO" = ( -/obj/structure/closet/crate/freezer/rations, -/turf/simulated/floor/plating, -/area/errant_pisces/general_storage) -"kP" = ( -/turf/simulated/floor/plating, -/area/errant_pisces/general_storage) -"kQ" = ( -/obj/structure/table/rack, -/obj/item/material/knife/combat, -/turf/simulated/floor/plating, -/area/errant_pisces/general_storage) -"kR" = ( -/obj/structure/table/rack, -/obj/item/material/harpoon, -/obj/random/tool, -/turf/simulated/floor/plating, -/area/errant_pisces/general_storage) -"kS" = ( -/obj/structure/table/rack, -/obj/item/storage/box/survival, -/obj/item/storage/box/survival, -/obj/item/storage/box/survival, -/turf/simulated/floor/plating, -/area/errant_pisces/general_storage) -"kT" = ( -/turf/simulated/wall, -/area/errant_pisces/general_storage) -"kU" = ( -/obj/structure/closet/secure_closet/freezer/fridge, -/obj/item/reagent_containers/food/snacks/fish/space_carp, -/turf/simulated/floor/tiled/freezer, -/area/errant_pisces/prod_storage) -"kV" = ( -/turf/simulated/floor/tiled/freezer, -/area/errant_pisces/prod_storage) -"kW" = ( -/obj/structure/closet/secure_closet/freezer/fridge, -/turf/simulated/floor/tiled/freezer, -/area/errant_pisces/prod_storage) -"kX" = ( -/obj/machinery/light/small{ - dir = 1 - }, -/turf/simulated/floor/tiled/freezer, -/area/errant_pisces/prod_storage) -"kY" = ( -/obj/machinery/light/small{ - dir = 1 - }, -/obj/structure/window/basic{ - dir = 8 - }, -/turf/simulated/floor/tiled/freezer, -/area/errant_pisces/prod_storage) -"kZ" = ( -/obj/item/reagent_containers/chem_disp_cartridge/synaptizine, -/turf/simulated/floor/tiled/freezer, -/area/errant_pisces/prod_storage) -"la" = ( -/turf/simulated/wall, -/area/errant_pisces/prod_storage) -"lb" = ( -/obj/machinery/suit_storage_unit/standard_unit, -/turf/simulated/floor/plating, -/area/errant_pisces/live_storage) -"lc" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/embedded_controller/radio/airlock/airlock_controller{ - frequency = 1439; - id_tag = "xyn_ls_airlock"; - pixel_x = 25; - tag_airpump = "xyn_ls_pump"; - tag_chamber_sensor = "xyn_ls_sensor"; - tag_exterior_door = "xyn_ls_outer"; - tag_interior_door = "xyn_ls_inner" - }, -/turf/simulated/floor/plating, -/area/errant_pisces/live_storage) -"ld" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/table/rack, -/obj/item/material/harpoon, -/turf/simulated/floor/tiled, -/area/errant_pisces/science_wing) -"le" = ( -/obj/effect/landmark/corpse/scientist, -/obj/effect/decal/cleanable/blood, -/turf/simulated/floor/tiled, -/area/errant_pisces/science_wing) -"lf" = ( -/obj/structure/table/rack, -/obj/item/gun/launcher/net, -/turf/simulated/floor/tiled, -/area/errant_pisces/science_wing) -"lg" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 1; - level = 2 - }, -/turf/simulated/floor/tiled, -/area/errant_pisces/science_wing) -"lh" = ( -/obj/machinery/light/small{ - dir = 8 - }, -/obj/structure/closet/crate/freezer/rations, -/turf/simulated/floor/plating, -/area/errant_pisces/general_storage) -"li" = ( -/obj/machinery/light/small{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/errant_pisces/general_storage) -"lj" = ( -/obj/structure/closet/secure_closet/freezer/fridge, -/obj/machinery/light/small{ - dir = 8 - }, -/turf/simulated/floor/tiled/freezer, -/area/errant_pisces/prod_storage) -"lk" = ( -/obj/structure/closet/secure_closet/freezer/fridge, -/obj/item/reagent_containers/food/snacks/cubancarp, -/turf/simulated/floor/tiled/freezer, -/area/errant_pisces/prod_storage) -"ll" = ( -/obj/structure/window/basic{ - dir = 8 - }, -/obj/item/reagent_containers/chem_disp_cartridge/hyperzine, -/turf/simulated/floor/tiled/freezer, -/area/errant_pisces/prod_storage) -"lm" = ( -/obj/structure/closet/crate, -/obj/item/reagent_containers/food/snacks/fish/space_carp, -/turf/simulated/floor/tiled/freezer, -/area/errant_pisces/prod_storage) -"ln" = ( -/obj/machinery/light/small{ - dir = 4 - }, -/turf/simulated/floor/tiled/freezer, -/area/errant_pisces/prod_storage) -"lo" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/light/small{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/errant_pisces/live_storage) -"lp" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/obj/structure/closet/firecloset, -/turf/simulated/floor/tiled, -/area/errant_pisces/science_wing) -"lq" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/turf/simulated/floor/tiled, -/area/errant_pisces/science_wing) -"lr" = ( -/obj/structure/closet/emcloset, -/turf/simulated/floor/tiled, -/area/errant_pisces/science_wing) -"ls" = ( -/turf/simulated/wall, -/area/errant_pisces/science_wing) -"lt" = ( -/obj/machinery/door/airlock, -/turf/simulated/floor/tiled, -/area/errant_pisces/science_wing) -"lu" = ( -/obj/structure/table/standard, -/obj/item/storage/box/freezer, -/turf/simulated/floor/tiled, -/area/errant_pisces/science_wing) -"lv" = ( -/obj/structure/table/standard, -/obj/item/storage/toolbox/mechanical, -/turf/simulated/floor/tiled, -/area/errant_pisces/science_wing) -"lw" = ( -/obj/structure/table/standard, -/obj/item/storage/toolbox/electrical, -/turf/simulated/floor/tiled, -/area/errant_pisces/science_wing) -"lx" = ( -/obj/structure/table/standard, -/obj/item/tape_roll, -/turf/simulated/floor/tiled, -/area/errant_pisces/science_wing) -"ly" = ( -/obj/structure/table/standard, -/obj/item/storage/box/gloves, -/turf/simulated/floor/tiled, -/area/errant_pisces/science_wing) -"lz" = ( -/obj/structure/closet, -/obj/item/clothing/suit/storage/toggle/labcoat/xyn_machine, -/obj/random/advdevice, -/obj/machinery/light{ - dir = 8; - icon_state = "tube1" - }, -/turf/simulated/floor/tiled, -/area/errant_pisces/cryo) -"lA" = ( -/obj/structure/closet, -/obj/random/loot, -/obj/random/soap, -/turf/simulated/floor/tiled, -/area/errant_pisces/cryo) -"lB" = ( -/obj/structure/closet, -/obj/item/clothing/under/hazard, -/turf/simulated/floor/tiled, -/area/errant_pisces/cryo) -"lC" = ( -/obj/structure/closet, -/obj/item/clothing/suit/apron/overalls, -/obj/random/glasses, -/obj/machinery/light{ - dir = 4; - icon_state = "tube1" - }, -/turf/simulated/floor/tiled, -/area/errant_pisces/cryo) -"lD" = ( -/obj/structure/table/rack, -/obj/item/storage/toolbox/mechanical, -/turf/simulated/floor/plating, -/area/errant_pisces/general_storage) -"lE" = ( -/obj/structure/table/rack, -/obj/item/storage/ore, -/obj/random/tool, -/turf/simulated/floor/plating, -/area/errant_pisces/general_storage) -"lF" = ( -/obj/structure/table/rack, -/obj/item/storage/firstaid/empty, -/turf/simulated/floor/plating, -/area/errant_pisces/general_storage) -"lG" = ( -/obj/item/reagent_containers/chem_disp_cartridge/mercury, -/turf/simulated/floor/tiled/freezer, -/area/errant_pisces/prod_storage) -"lH" = ( -/obj/machinery/portable_atmospherics/canister/empty/oxygen, -/turf/simulated/floor/plating, -/area/errant_pisces/live_storage) -"lI" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/plating, -/area/errant_pisces/live_storage) -"lJ" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/door/airlock, -/obj/machinery/door/firedoor, -/turf/simulated/floor/plating, -/area/errant_pisces/science_wing) -"lK" = ( -/obj/structure/closet/l3closet/scientist, -/turf/simulated/floor/tiled, -/area/errant_pisces/science_wing) -"lL" = ( -/obj/structure/closet/secure_closet/scientist{ - req_access = newlist() - }, -/turf/simulated/floor/tiled, -/area/errant_pisces/science_wing) -"lM" = ( -/obj/structure/closet/secure_closet/hydroponics, -/obj/structure/window/reinforced{ - dir = 1 - }, -/turf/simulated/floor/tiled, -/area/errant_pisces/science_wing) -"lN" = ( -/obj/machinery/door/window/northright, -/turf/simulated/floor/tiled, -/area/errant_pisces/science_wing) -"lO" = ( -/obj/machinery/vending/hydronutrients, -/obj/structure/window/reinforced{ - dir = 1 - }, -/obj/structure/window/reinforced{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/errant_pisces/science_wing) -"lP" = ( -/obj/structure/window/reinforced{ - dir = 8 - }, -/obj/structure/window/reinforced{ - dir = 1 - }, -/obj/machinery/chem_master, -/turf/simulated/floor/tiled, -/area/errant_pisces/science_wing) -"lQ" = ( -/obj/structure/window/reinforced{ - dir = 1 - }, -/obj/machinery/reagentgrinder, -/obj/item/reagent_containers/glass/beaker/large, -/turf/simulated/floor/tiled, -/area/errant_pisces/science_wing) -"lR" = ( -/obj/structure/window/reinforced{ - dir = 1 - }, -/obj/structure/window/reinforced{ - dir = 4 - }, -/obj/structure/table/standard, -/obj/item/book/manual/mass_spectrometry, -/obj/item/device/scanner/spectrometer, -/turf/simulated/floor/tiled, -/area/errant_pisces/science_wing) -"lS" = ( -/obj/structure/window/reinforced{ - dir = 8 - }, -/obj/machinery/door/window/northright, -/turf/simulated/floor/tiled/white, -/area/errant_pisces/science_wing) -"lT" = ( -/obj/structure/table/steel, -/obj/item/storage/firstaid/surgery, -/obj/item/material/knife/kitchen/cleaver, -/obj/item/material/twohanded/fireaxe, -/obj/structure/window/reinforced{ - dir = 1 - }, -/turf/simulated/floor/tiled/white, -/area/errant_pisces/science_wing) -"lW" = ( -/obj/structure/closet/secure_closet/freezer/fridge, -/obj/item/reagent_containers/food/snacks/fish/space_carp, -/obj/item/reagent_containers/food/snacks/fish/space_carp, -/turf/simulated/floor/tiled/freezer, -/area/errant_pisces/prod_storage) -"lX" = ( -/obj/structure/window/basic{ - dir = 8 - }, -/obj/structure/closet/crate, -/obj/item/reagent_containers/food/snacks/fish/space_carp, -/turf/simulated/floor/tiled/freezer, -/area/errant_pisces/prod_storage) -"lY" = ( -/obj/structure/closet/crate, -/turf/simulated/floor/tiled/freezer, -/area/errant_pisces/prod_storage) -"lZ" = ( -/obj/structure/closet/secure_closet/freezer/meat, -/turf/simulated/floor/plating, -/area/errant_pisces/live_storage) -"ma" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/alarm{ - dir = 8; - pixel_x = 24 - }, -/turf/simulated/floor/plating, -/area/errant_pisces/live_storage) -"mb" = ( -/obj/structure/lattice, -/obj/machinery/access_button/airlock_exterior{ - frequency = 1439; - master_tag = "xyn_sci_airlock"; - pixel_y = -20 - }, -/turf/space, -/area/errant_pisces/science_wing) -"mc" = ( -/obj/machinery/door/airlock/external{ - frequency = 1439; - id_tag = "xyn_sci_outer" - }, -/turf/simulated/floor/plating, -/area/errant_pisces/science_wing) -"md" = ( -/obj/machinery/light/small{ - dir = 1 - }, -/obj/machinery/atmospherics/unary/vent_pump/high_volume{ - dir = 4; - id_tag = "xyn_sci_pump" - }, -/obj/machinery/embedded_controller/radio/airlock/airlock_controller{ - frequency = 1439; - id_tag = "xyn_sci_airlock"; - pixel_y = -25; - tag_airpump = "xyn_sci_pump"; - tag_chamber_sensor = "xyn_sci_sensor"; - tag_exterior_door = "xyn_sci_outer"; - tag_interior_door = "xyn_sci_inner" - }, -/obj/machinery/airlock_sensor{ - frequency = 1439; - id_tag = "xyn_sci_sensor"; - pixel_y = 25 - }, -/turf/simulated/floor/plating, -/area/errant_pisces/science_wing) -"me" = ( -/obj/machinery/door/airlock/external{ - frequency = 1439; - id_tag = "xyn_sci_inner" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/errant_pisces/science_wing) -"mf" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 - }, -/obj/machinery/access_button/airlock_interior{ - frequency = 1439; - master_tag = "xyn_sci_airlock"; - pixel_x = -25; - pixel_y = -25 - }, -/turf/simulated/floor/plating, -/area/errant_pisces/science_wing) -"mg" = ( -/obj/machinery/portable_atmospherics/canister/oxygen, -/turf/simulated/floor/plating, -/area/errant_pisces/science_wing) -"mh" = ( -/obj/structure/closet/l3closet/scientist, -/obj/machinery/light/small{ - dir = 8 - }, -/turf/simulated/floor/tiled, -/area/errant_pisces/science_wing) -"mi" = ( -/obj/structure/closet/secure_closet/scientist{ - req_access = newlist() - }, -/obj/machinery/light/small{ - dir = 4; - icon_state = "bulb1" - }, -/turf/simulated/floor/tiled, -/area/errant_pisces/science_wing) -"mj" = ( -/obj/machinery/portable_atmospherics/hydroponics, -/turf/simulated/floor/tiled, -/area/errant_pisces/science_wing) -"mk" = ( -/obj/machinery/portable_atmospherics/hydroponics, -/obj/structure/window/reinforced{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/errant_pisces/science_wing) -"ml" = ( -/obj/structure/window/reinforced{ - dir = 8 - }, -/obj/machinery/chemical_dispenser/full, -/turf/simulated/floor/tiled, -/area/errant_pisces/science_wing) -"mm" = ( -/obj/structure/window/reinforced{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/errant_pisces/science_wing) -"mn" = ( -/obj/structure/window/reinforced{ - dir = 8 - }, -/turf/simulated/floor/tiled/white, -/area/errant_pisces/science_wing) -"mo" = ( -/obj/machinery/light{ - dir = 4; - icon_state = "tube1" - }, -/obj/machinery/computer/operating{ - dir = 8 - }, -/turf/simulated/floor/tiled/white, -/area/errant_pisces/science_wing) -"mp" = ( -/obj/structure/closet, -/obj/item/clothing/suit/storage/hooded/wintercoat, -/turf/simulated/floor/tiled, -/area/errant_pisces/cryo) -"mq" = ( -/obj/structure/closet, -/obj/random/plushie, -/turf/simulated/floor/tiled, -/area/errant_pisces/cryo) -"mr" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/obj/machinery/light/small{ - dir = 8 - }, -/turf/simulated/floor/plating, -/area/errant_pisces/general_storage) -"ms" = ( -/obj/structure/table/rack, -/obj/item/stack/net/thirty, -/turf/simulated/floor/plating, -/area/errant_pisces/general_storage) -"mt" = ( -/obj/machinery/light/small{ - dir = 4 - }, -/obj/structure/table/rack, -/obj/item/stack/net, -/obj/random/snack, -/obj/random/tool, -/turf/simulated/floor/plating, -/area/errant_pisces/general_storage) -"mu" = ( -/obj/machinery/light/small{ - dir = 8 - }, -/turf/simulated/floor/tiled/freezer, -/area/errant_pisces/prod_storage) -"mv" = ( -/mob/living/simple_animal/hostile/carp/shark, -/turf/simulated/floor/tiled/freezer, -/area/errant_pisces/prod_storage) -"mw" = ( -/obj/structure/window/basic{ - dir = 8 - }, -/obj/structure/closet/crate, -/turf/simulated/floor/tiled/freezer, -/area/errant_pisces/prod_storage) -"mx" = ( -/obj/structure/table/rack, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 4 - }, -/obj/item/material/harpoon, -/turf/simulated/floor/plating, -/area/errant_pisces/live_storage) -"my" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/light/small{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/turf/simulated/floor/plating, -/area/errant_pisces/live_storage) -"mz" = ( -/turf/simulated/wall/r_wall, -/area/errant_pisces/aft_hallway) -"mA" = ( -/obj/machinery/light/small{ - dir = 8 - }, -/turf/simulated/floor/plating, -/area/errant_pisces/science_wing) -"mB" = ( -/obj/machinery/suit_storage_unit/standard_unit, -/turf/simulated/floor/plating, -/area/errant_pisces/science_wing) -"mC" = ( -/obj/structure/cable/green{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/turf/simulated/floor/tiled, -/area/errant_pisces/science_wing) -"mD" = ( -/obj/machinery/power/apc{ - name = "south bump"; - pixel_y = -24 - }, -/obj/structure/cable/green{ - d2 = 8; - icon_state = "0-8" - }, -/obj/structure/closet/secure_closet/scientist{ - req_access = newlist() - }, -/turf/simulated/floor/tiled, -/area/errant_pisces/science_wing) -"mE" = ( -/obj/machinery/light, -/turf/simulated/floor/tiled, -/area/errant_pisces/science_wing) -"mF" = ( -/obj/structure/window/reinforced{ - dir = 8 - }, -/obj/structure/table/standard, -/obj/item/storage/box/beakers, -/obj/item/reagent_containers/dropper, -/turf/simulated/floor/tiled, -/area/errant_pisces/science_wing) -"mG" = ( -/obj/machinery/biogenerator, -/turf/simulated/floor/tiled, -/area/errant_pisces/science_wing) -"mH" = ( -/obj/structure/window/reinforced{ - dir = 4 - }, -/obj/machinery/computer/modular{ - dir = 1 - }, -/turf/simulated/floor/tiled, -/area/errant_pisces/science_wing) -"mI" = ( -/obj/machinery/optable, -/obj/item/clothing/glasses/welding, -/obj/item/weldingtool, -/turf/simulated/floor/tiled/white, -/area/errant_pisces/science_wing) -"mJ" = ( -/obj/machinery/light, -/obj/effect/landmark/corpse/carp_fisher, -/obj/effect/decal/cleanable/blood, -/turf/simulated/floor/tiled, -/area/errant_pisces/cryo) -"mK" = ( -/obj/effect/decal/cleanable/blood, -/turf/simulated/floor/tiled, -/area/errant_pisces/cryo) -"mL" = ( -/obj/machinery/light, -/turf/simulated/floor/tiled, -/area/errant_pisces/cryo) -"mM" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 - }, -/obj/machinery/power/apc{ - dir = 8; - name = "west bump"; - pixel_x = -24 - }, -/obj/structure/cable/green{ - d2 = 2; - icon_state = "0-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/plating, -/area/errant_pisces/general_storage) -"mN" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 8 - }, -/obj/machinery/alarm{ - dir = 1; - pixel_y = -22 - }, -/turf/simulated/floor/plating, -/area/errant_pisces/general_storage) -"mO" = ( -/obj/machinery/door/airlock, -/obj/machinery/door/firedoor, -/turf/simulated/floor/plating, -/area/errant_pisces/general_storage) -"mP" = ( -/obj/machinery/alarm{ - dir = 1; - pixel_y = -22 - }, -/turf/simulated/floor/tiled/freezer, -/area/errant_pisces/prod_storage) -"mQ" = ( -/obj/machinery/power/apc{ - name = "south bump"; - pixel_y = -24 - }, -/obj/structure/cable/green{ - d2 = 4; - icon_state = "0-4" - }, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 4 - }, -/turf/simulated/floor/tiled/freezer, -/area/errant_pisces/prod_storage) -"mR" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/obj/effect/decal/cleanable/blood, -/turf/simulated/floor/tiled/freezer, -/area/errant_pisces/prod_storage) -"mS" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 8 - }, -/obj/machinery/light/small, -/turf/simulated/floor/tiled/freezer, -/area/errant_pisces/prod_storage) -"mT" = ( -/obj/machinery/light/small, -/turf/simulated/floor/tiled/freezer, -/area/errant_pisces/prod_storage) -"mU" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 4; - level = 2 - }, -/obj/structure/table/rack, -/obj/item/gun/launcher/net, -/turf/simulated/floor/plating, -/area/errant_pisces/live_storage) -"mV" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 4 - }, -/obj/machinery/power/apc{ - dir = 4; - name = "east bump"; - pixel_x = 24 - }, -/obj/structure/cable/green{ - d2 = 2; - icon_state = "0-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/plating, -/area/errant_pisces/live_storage) -"mW" = ( -/obj/machinery/door/airlock, -/obj/machinery/door/firedoor, -/turf/simulated/floor/plating, -/area/errant_pisces/science_wing) -"mX" = ( -/obj/machinery/door/airlock, -/obj/machinery/door/firedoor, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled, -/area/errant_pisces/science_wing) -"mY" = ( -/obj/machinery/door/airlock, -/obj/machinery/door/firedoor, -/obj/effect/decal/cleanable/blood, -/turf/simulated/floor/tiled, -/area/errant_pisces/cryo) -"mZ" = ( -/obj/machinery/door/airlock, -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled, -/area/errant_pisces/cryo) -"na" = ( -/obj/machinery/door/airlock, -/obj/machinery/door/firedoor, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/plating, -/area/errant_pisces/general_storage) -"nb" = ( -/obj/machinery/door/firedoor, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/door/airlock/freezer, -/obj/effect/decal/cleanable/blood, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/tiled/freezer, -/area/errant_pisces/prod_storage) -"nc" = ( -/turf/simulated/wall, -/area/errant_pisces/live_storage) -"nd" = ( -/obj/machinery/door/airlock, -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/plating, -/area/errant_pisces/live_storage) -"ne" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 - }, -/obj/machinery/light/small{ - dir = 1 - }, -/obj/machinery/access_button/airlock_interior{ - frequency = 1439; - master_tag = "xyn_dock1_airlock"; - pixel_y = 25 - }, -/turf/simulated/floor/plating, -/area/errant_pisces/aft_hallway) -"nf" = ( -/obj/machinery/door/airlock/external{ - frequency = 1439; - id_tag = "xyn_dock1_inner" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/door/firedoor, -/turf/simulated/floor/plating, -/area/errant_pisces/aft_hallway) -"ng" = ( -/obj/machinery/light/small{ - dir = 1 - }, -/obj/machinery/atmospherics/unary/vent_pump/high_volume{ - dir = 8; - id_tag = "xyn_dock1_pump" - }, -/obj/machinery/embedded_controller/radio/airlock/airlock_controller{ - frequency = 1439; - id_tag = "xyn_dock1_airlock"; - pixel_y = -25; - tag_airpump = "xyn_dock1_pump"; - tag_chamber_sensor = "xyn_dock1_sensor"; - tag_exterior_door = "xyn_dock1_outer"; - tag_interior_door = "xyn_dock1_inner" - }, -/obj/machinery/airlock_sensor{ - frequency = 1439; - id_tag = "xyn_dock1_sensor"; - pixel_y = 25 - }, -/turf/simulated/floor/plating, -/area/errant_pisces/aft_hallway) -"nh" = ( -/obj/machinery/door/airlock/external{ - frequency = 1439; - id_tag = "xyn_dock1_outer" - }, -/obj/machinery/door/blast/regular/open{ - dir = 4; - icon_state = "pdoor0"; - id_tag = "xynergy_perimeter_blast" - }, -/obj/machinery/door/firedoor, -/turf/simulated/floor/plating, -/area/errant_pisces/aft_hallway) -"ni" = ( -/obj/machinery/access_button/airlock_exterior{ - frequency = 1439; - master_tag = "xyn_dock1_airlock"; - pixel_x = -25; - pixel_y = -25 - }, -/turf/simulated/floor/plating, -/area/space) -"nj" = ( -/turf/simulated/floor/plating, -/area/space) -"nk" = ( -/turf/simulated/wall/r_wall, -/area/errant_pisces/aux_power) -"nl" = ( -/obj/machinery/power/port_gen/pacman/mrs, -/obj/structure/cable/yellow{ - d2 = 4; - icon_state = "0-4" - }, -/turf/simulated/floor/plating, -/area/errant_pisces/aux_power) -"nm" = ( -/obj/machinery/power/terminal{ - dir = 4 - }, -/obj/structure/cable/yellow{ - d2 = 8; - icon_state = "0-8" - }, -/obj/machinery/alarm{ - pixel_y = 24 - }, -/turf/simulated/floor/plating, -/area/errant_pisces/aux_power) -"nn" = ( -/obj/machinery/power/smes/buildable, -/obj/structure/cable/green{ - d2 = 2; - icon_state = "0-2" - }, -/turf/simulated/floor/plating, -/area/errant_pisces/aux_power) -"no" = ( -/obj/structure/cable/green{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, -/turf/simulated/floor/tiled, -/area/errant_pisces/aft_hallway) -"np" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/errant_pisces/aft_hallway) -"nq" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 1 - }, -/turf/simulated/floor/tiled, -/area/errant_pisces/aft_hallway) -"nr" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/light{ - dir = 1 - }, -/turf/simulated/floor/tiled, -/area/errant_pisces/aft_hallway) -"ns" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/alarm{ - pixel_y = 24 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/errant_pisces/aft_hallway) -"nt" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/errant_pisces/aft_hallway) -"nu" = ( -/obj/machinery/door/firedoor, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/errant_pisces/aft_hallway) -"nv" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/errant_pisces/aft_hallway) -"nw" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/light{ - dir = 1 - }, -/turf/simulated/floor/tiled, -/area/errant_pisces/aft_hallway) -"nx" = ( -/obj/machinery/alarm{ - pixel_y = 24 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/turf/simulated/floor/tiled, -/area/errant_pisces/aft_hallway) -"ny" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/errant_pisces/aft_hallway) -"nz" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply, -/obj/structure/cable/green{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, -/obj/effect/decal/cleanable/blood, -/turf/simulated/floor/tiled, -/area/errant_pisces/aft_hallway) -"nA" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 1 - }, -/turf/simulated/floor/tiled, -/area/errant_pisces/aft_hallway) -"nB" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/door/firedoor, -/turf/simulated/floor/tiled, -/area/errant_pisces/aft_hallway) -"nC" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, -/turf/simulated/floor/tiled, -/area/errant_pisces/aft_hallway) -"nD" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/alarm{ - pixel_y = 24 - }, -/turf/simulated/floor/tiled, -/area/errant_pisces/aft_hallway) -"nE" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 1 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 1 - }, -/obj/machinery/light{ - dir = 1 - }, -/turf/simulated/floor/tiled, -/area/errant_pisces/aft_hallway) -"nF" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, -/obj/effect/decal/cleanable/blood, -/turf/simulated/floor/tiled, -/area/errant_pisces/aft_hallway) -"nG" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply, -/obj/structure/cable/green{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/turf/simulated/floor/tiled, -/area/errant_pisces/aft_hallway) -"nH" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/errant_pisces/aft_hallway) -"nI" = ( -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/errant_pisces/aft_hallway) -"nJ" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/errant_pisces/aft_hallway) -"nK" = ( -/obj/machinery/power/port_gen/pacman/mrs, -/obj/structure/cable/yellow{ - d2 = 2; - icon_state = "0-2" - }, -/turf/simulated/floor/plating, -/area/errant_pisces/aux_power) -"nL" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/errant_pisces/aux_power) -"nM" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/turf/simulated/floor/plating, -/area/errant_pisces/aux_power) -"nN" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/door/airlock, -/obj/machinery/door/firedoor, -/turf/simulated/floor/plating, -/area/errant_pisces/aux_power) -"nO" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled, -/area/errant_pisces/aft_hallway) -"nP" = ( -/obj/effect/decal/cleanable/blood, -/turf/simulated/floor/tiled, -/area/errant_pisces/aft_hallway) -"nQ" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/effect/decal/cleanable/blood, -/turf/simulated/floor/tiled, -/area/errant_pisces/aft_hallway) -"nR" = ( -/obj/effect/landmark/corpse/scientist, -/turf/simulated/floor/tiled, -/area/errant_pisces/aft_hallway) -"nS" = ( -/turf/simulated/floor/tiled, -/area/errant_pisces/aft_hallway) -"nU" = ( -/obj/machinery/power/apc{ - name = "south bump"; - pixel_y = -24 - }, -/obj/structure/cable/green, -/turf/simulated/floor/tiled, -/area/errant_pisces/aft_hallway) -"nV" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 1 - }, -/turf/simulated/floor/tiled, -/area/errant_pisces/aft_hallway) -"nW" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 1 - }, -/turf/simulated/floor/tiled, -/area/errant_pisces/aft_hallway) -"nX" = ( -/obj/machinery/door/firedoor, -/turf/simulated/floor/tiled, -/area/errant_pisces/aft_hallway) -"nY" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled, -/area/errant_pisces/aft_hallway) -"nZ" = ( -/obj/machinery/door/firedoor, -/obj/effect/decal/cleanable/blood, -/turf/simulated/floor/tiled, -/area/errant_pisces/aft_hallway) -"oa" = ( -/obj/effect/landmark/corpse/bridgeofficer, -/obj/effect/decal/cleanable/blood, -/turf/simulated/floor/tiled, -/area/errant_pisces/aft_hallway) -"ob" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/plating, -/area/errant_pisces/aft_hallway) -"oc" = ( -/obj/machinery/power/terminal, -/obj/structure/cable/yellow, -/obj/machinery/light/small{ - dir = 8 - }, -/turf/simulated/floor/plating, -/area/errant_pisces/aux_power) -"od" = ( -/turf/simulated/floor/plating, -/area/errant_pisces/aux_power) -"oe" = ( -/obj/structure/closet/crate/radiation, -/obj/item/stack/material/tritium/ten, -/obj/machinery/power/apc{ - dir = 4; - name = "east bump"; - pixel_x = 24 - }, -/obj/structure/cable/green, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 1; - level = 2 - }, -/turf/simulated/floor/plating, -/area/errant_pisces/aux_power) -"of" = ( -/obj/machinery/door/firedoor, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/door/airlock, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/effect/decal/cleanable/blood, -/turf/simulated/floor/tiled, -/area/errant_pisces/fishing_wing) -"og" = ( -/turf/simulated/wall/r_wall, -/area/errant_pisces/fishing_wing) -"oh" = ( -/obj/machinery/door/airlock/freezer, -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/freezer, -/area/errant_pisces/fishing_wing) -"oi" = ( -/turf/simulated/wall/r_wall, -/area/errant_pisces/bridge) -"oj" = ( -/obj/machinery/door/airlock, -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/effect/decal/cleanable/blood, -/turf/simulated/floor/tiled, -/area/errant_pisces/bridge) -"ok" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/obj/machinery/access_button/airlock_interior{ - frequency = 1439; - master_tag = "xyn_dock2_airlock"; - pixel_y = -25 - }, -/turf/simulated/floor/plating, -/area/errant_pisces/aft_hallway) -"ol" = ( -/obj/machinery/door/airlock/external{ - frequency = 1439; - id_tag = "xyn_dock2_inner" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/door/firedoor, -/turf/simulated/floor/plating, -/area/errant_pisces/aft_hallway) -"om" = ( -/obj/machinery/light/small{ - dir = 1 - }, -/obj/machinery/atmospherics/unary/vent_pump/high_volume{ - dir = 8; - id_tag = "xyn_dock2_airlock" - }, -/obj/machinery/embedded_controller/radio/airlock/airlock_controller{ - frequency = 1439; - id_tag = "xyn_dock2_airlock"; - pixel_y = -25; - tag_airpump = "xyn_dock2_pump"; - tag_chamber_sensor = "xyn_dock2_sensor"; - tag_exterior_door = "xyn_dock2_outer"; - tag_interior_door = "xyn_dock2_inner" - }, -/obj/machinery/airlock_sensor{ - frequency = 1439; - id_tag = "xyn_dock2_sensor"; - pixel_y = 25 - }, -/turf/simulated/floor/plating, -/area/errant_pisces/aft_hallway) -"on" = ( -/obj/machinery/door/airlock/external{ - frequency = 1439; - id_tag = "xyn_dock2_outer" - }, -/obj/machinery/door/blast/regular/open{ - dir = 4; - icon_state = "pdoor0"; - id_tag = "xynergy_perimeter_blast" - }, -/obj/machinery/door/firedoor, -/turf/simulated/floor/plating, -/area/errant_pisces/aft_hallway) -"oo" = ( -/obj/machinery/access_button/airlock_exterior{ - frequency = 1439; - master_tag = "xyn_dock2_airlock"; - pixel_x = -25; - pixel_y = -25 - }, -/turf/simulated/floor/plating, -/area/space) -"op" = ( -/obj/machinery/power/smes/buildable, -/obj/structure/cable/green{ - d2 = 4; - icon_state = "0-4" - }, -/turf/simulated/floor/plating, -/area/errant_pisces/aux_power) -"oq" = ( -/obj/structure/cable/green{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/turf/simulated/floor/plating, -/area/errant_pisces/aux_power) -"or" = ( -/obj/structure/table/rack, -/obj/item/wrench, -/obj/item/screwdriver, -/obj/item/wirecutters, -/turf/simulated/floor/plating, -/area/errant_pisces/aux_power) -"os" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled, -/area/errant_pisces/fishing_wing) -"ot" = ( -/turf/simulated/wall, -/area/errant_pisces/fishing_wing) -"ou" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/turf/simulated/floor/tiled/freezer, -/area/errant_pisces/fishing_wing) -"ov" = ( -/obj/structure/table/marble, -/obj/item/material/knife/kitchen/cleaver, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 8 - }, -/turf/simulated/floor/tiled/freezer, -/area/errant_pisces/fishing_wing) -"ow" = ( -/obj/machinery/gibber, -/obj/machinery/light/small{ - dir = 1 - }, -/turf/simulated/floor/tiled/freezer, -/area/errant_pisces/fishing_wing) -"ox" = ( -/obj/structure/table/marble, -/obj/item/reagent_containers/food/snacks/fish/space_carp, -/obj/item/reagent_containers/food/snacks/fish/space_carp, -/obj/item/reagent_containers/food/snacks/fish/space_carp, -/turf/simulated/floor/tiled/freezer, -/area/errant_pisces/fishing_wing) -"oy" = ( -/obj/machinery/gibber, -/turf/simulated/floor/tiled/freezer, -/area/errant_pisces/fishing_wing) -"oz" = ( -/obj/structure/table/marble, -/obj/item/gun/launcher/net, -/turf/simulated/floor/tiled/freezer, -/area/errant_pisces/fishing_wing) -"oA" = ( -/obj/structure/hygiene/sink{ - dir = 1; - pixel_y = 16 - }, -/turf/simulated/floor/tiled/freezer, -/area/errant_pisces/fishing_wing) -"oB" = ( -/obj/machinery/light/small{ - dir = 1 - }, -/turf/simulated/floor/tiled/freezer, -/area/errant_pisces/fishing_wing) -"oC" = ( -/obj/structure/closet/crate, -/turf/simulated/floor/tiled/freezer, -/area/errant_pisces/fishing_wing) -"oD" = ( -/obj/random/obstruction, -/turf/simulated/floor/tiled/freezer, -/area/errant_pisces/fishing_wing) -"oE" = ( -/obj/machinery/door/airlock/freezer, -/turf/simulated/floor/tiled/freezer, -/area/errant_pisces/fishing_wing) -"oF" = ( -/obj/structure/closet/secure_closet/freezer/fridge, -/turf/simulated/floor/tiled/freezer, -/area/errant_pisces/fishing_wing) -"oG" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/effect/landmark/corpse/bridgeofficer, -/turf/simulated/floor/tiled, -/area/errant_pisces/bridge) -"oH" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/door/airlock, -/obj/machinery/door/firedoor, -/turf/simulated/floor/plating, -/area/errant_pisces/fishing_wing) -"oI" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/alarm{ - dir = 4; - pixel_x = -25; - rcon_setting = 3 - }, -/turf/simulated/floor/tiled, -/area/errant_pisces/fishing_wing) -"oJ" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 1 - }, -/obj/machinery/alarm{ - dir = 4; - pixel_x = -25; - rcon_setting = 3 - }, -/turf/simulated/floor/tiled/freezer, -/area/errant_pisces/fishing_wing) -"oK" = ( -/turf/simulated/floor/tiled/freezer, -/area/errant_pisces/fishing_wing) -"oL" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/obj/machinery/power/apc{ - dir = 8; - name = "west bump"; - pixel_x = -24 - }, -/obj/structure/cable/green, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled, -/area/errant_pisces/bridge) -"oM" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 8 - }, -/obj/structure/closet/firecloset, -/turf/simulated/floor/tiled, -/area/errant_pisces/bridge) -"oN" = ( -/obj/structure/closet/emcloset, -/turf/simulated/floor/tiled, -/area/errant_pisces/bridge) -"oO" = ( -/obj/structure/table/steel, -/obj/random/drinkbottle, -/turf/simulated/floor/tiled, -/area/errant_pisces/bridge) -"oP" = ( -/obj/machinery/light{ - dir = 1 - }, -/obj/structure/table/steel, -/obj/random/drinkbottle, -/turf/simulated/floor/tiled, -/area/errant_pisces/bridge) -"oQ" = ( -/obj/structure/bookcase/manuals/engineering, -/turf/simulated/floor/tiled, -/area/errant_pisces/bridge) -"oR" = ( -/obj/structure/bookcase/manuals/research_and_development, -/turf/simulated/floor/tiled, -/area/errant_pisces/bridge) -"oS" = ( -/turf/simulated/floor/tiled, -/area/errant_pisces/bridge) -"oT" = ( -/obj/structure/bed/chair/comfy/captain, -/turf/simulated/floor/tiled, -/area/errant_pisces/bridge) -"oU" = ( -/obj/machinery/light{ - dir = 1 - }, -/obj/structure/reagent_dispensers/water_cooler, -/turf/simulated/floor/tiled, -/area/errant_pisces/bridge) -"oV" = ( -/obj/machinery/door/airlock, -/turf/simulated/floor/wood, -/area/errant_pisces/bridge) -"oW" = ( -/obj/machinery/alarm{ - pixel_y = 24 - }, -/turf/simulated/floor/wood, -/area/errant_pisces/bridge) -"oX" = ( -/obj/machinery/light{ - dir = 1 - }, -/obj/structure/closet, -/obj/item/gun/projectile/shotgun/pump/combat, -/obj/item/lipstick/random, -/obj/random/ammo, -/obj/random/cash, -/obj/random/cash, -/turf/simulated/floor/wood, -/area/errant_pisces/bridge) -"oY" = ( -/obj/machinery/computer/modular/preset/filemanager{ - desc = "This console is stamped with the Xynergy logo and appears well-used. It sports an antenna on the back, poking above the screen."; - dir = 8; - name = "command terminal" - }, -/obj/effect/computer_file_creator/ahabs_harpoon01, -/turf/simulated/floor/wood, -/area/errant_pisces/bridge) -"oZ" = ( -/obj/machinery/vending/medical{ - req_access = newlist() - }, -/turf/simulated/floor/tiled, -/area/errant_pisces/fishing_wing) -"pa" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/turf/simulated/floor/tiled, -/area/errant_pisces/fishing_wing) -"pb" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/landmark/corpse/carp_fisher, -/turf/simulated/floor/tiled, -/area/errant_pisces/fishing_wing) -"pc" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled, -/area/errant_pisces/fishing_wing) -"pd" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/light{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/errant_pisces/fishing_wing) -"pe" = ( -/obj/structure/closet/crate/secure/biohazard, -/turf/simulated/floor/tiled/freezer, -/area/errant_pisces/fishing_wing) -"pf" = ( -/obj/structure/net, -/turf/space, -/area/space) -"pg" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 1 - }, -/turf/simulated/floor/tiled, -/area/errant_pisces/bridge) -"ph" = ( -/obj/random/tool, -/turf/simulated/floor/tiled, -/area/errant_pisces/bridge) -"pi" = ( -/obj/machinery/computer/ship/navigation{ - dir = 1 - }, -/turf/simulated/floor/tiled, -/area/errant_pisces/bridge) -"pj" = ( -/obj/machinery/computer/modular/preset/filemanager{ - dir = 1 - }, -/obj/effect/computer_file_creator/ahabs_harpoon01, -/turf/simulated/floor/tiled, -/area/errant_pisces/bridge) -"pk" = ( -/obj/structure/table/steel, -/obj/random/toy, -/turf/simulated/floor/tiled, -/area/errant_pisces/bridge) -"pl" = ( -/turf/simulated/floor/wood, -/area/errant_pisces/bridge) -"pm" = ( -/obj/structure/bed/chair/office/light{ - dir = 4 - }, -/turf/simulated/floor/wood, -/area/errant_pisces/bridge) -"pn" = ( -/obj/structure/table/woodentable, -/obj/item/modular_computer/tablet/lease/preset/command{ - desc = "A small, portable microcomputer. This one has a Xynergy logo in purple, and a serial number stamped into the case." - }, -/obj/effect/computer_file_creator/ahabs_harpoon03, -/turf/simulated/floor/wood, -/area/errant_pisces/bridge) -"po" = ( -/obj/effect/wallframe_spawn/reinforced, -/obj/machinery/door/firedoor, -/turf/simulated/floor/plating, -/area/errant_pisces/bridge) -"pp" = ( -/obj/machinery/door/blast/regular/open{ - dir = 2; - icon_state = "pdoor0"; - id_tag = "xynergy_perimeter_blast" - }, -/turf/simulated/floor/reinforced/airless, -/area/errant_pisces/bridge) -"pq" = ( -/obj/structure/lattice, -/obj/structure/grille, -/turf/space, -/area/errant_pisces/bridge) -"pr" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/errant_pisces/fishing_wing) -"ps" = ( -/obj/structure/cable/green, -/obj/machinery/power/apc{ - dir = 4; - name = "east bump"; - pixel_x = 24 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/errant_pisces/fishing_wing) -"pt" = ( -/obj/structure/kitchenspike, -/turf/simulated/floor/tiled/freezer, -/area/errant_pisces/fishing_wing) -"pu" = ( -/obj/structure/kitchenspike, -/obj/machinery/light/small, -/turf/simulated/floor/tiled/freezer, -/area/errant_pisces/fishing_wing) -"pv" = ( -/obj/machinery/light/small, -/turf/simulated/floor/tiled/freezer, -/area/errant_pisces/fishing_wing) -"pw" = ( -/obj/structure/net/net_wall, -/turf/space, -/area/space) -"px" = ( -/obj/machinery/alarm{ - dir = 4; - pixel_x = -25; - rcon_setting = 3 - }, -/turf/simulated/floor/tiled, -/area/errant_pisces/bridge) -"py" = ( -/obj/random/junk, -/turf/simulated/floor/tiled, -/area/errant_pisces/bridge) -"pz" = ( -/obj/effect/overmap/visitable/ship/errant_pisces, -/turf/simulated/floor/tiled, -/area/errant_pisces/bridge) -"pA" = ( -/obj/structure/table/steel, -/obj/random/snack, -/turf/simulated/floor/tiled, -/area/errant_pisces/bridge) -"pB" = ( -/obj/structure/bookcase/manuals/engineering, -/turf/simulated/floor/wood, -/area/errant_pisces/bridge) -"pC" = ( -/obj/structure/table/woodentable, -/obj/random/toy, -/turf/simulated/floor/wood, -/area/errant_pisces/bridge) -"pD" = ( -/obj/machinery/light/small{ - dir = 8 - }, -/turf/simulated/floor/tiled/white, -/area/errant_pisces/fishing_wing) -"pE" = ( -/mob/living/simple_animal/hostile/carp/shark, -/turf/simulated/floor/tiled/white, -/area/errant_pisces/fishing_wing) -"pF" = ( -/obj/machinery/door/airlock, -/turf/simulated/floor/tiled/white, -/area/errant_pisces/fishing_wing) -"pG" = ( -/turf/simulated/floor/tiled, -/area/errant_pisces/fishing_wing) -"pH" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled, -/area/errant_pisces/fishing_wing) -"pI" = ( -/obj/machinery/door/airlock/freezer, -/obj/machinery/door/firedoor, -/turf/simulated/floor/tiled/freezer, -/area/errant_pisces/fishing_wing) -"pJ" = ( -/obj/machinery/light{ - dir = 8; - icon_state = "tube1" - }, -/obj/structure/table/steel, -/obj/random/snack, -/turf/simulated/floor/tiled, -/area/errant_pisces/bridge) -"pK" = ( -/obj/structure/table/steel, -/obj/random/firstaid, -/turf/simulated/floor/tiled, -/area/errant_pisces/bridge) -"pL" = ( -/obj/structure/bed/chair/office/dark, -/turf/simulated/floor/tiled, -/area/errant_pisces/bridge) -"pM" = ( -/obj/machinery/light{ - dir = 4; - icon_state = "tube1" - }, -/obj/structure/table/steel, -/obj/random/handgun, -/turf/simulated/floor/tiled, -/area/errant_pisces/bridge) -"pN" = ( -/obj/structure/curtain/open/bed, -/turf/simulated/floor/wood, -/area/errant_pisces/bridge) -"pO" = ( -/obj/structure/hygiene/shower{ - dir = 1 - }, -/turf/simulated/floor/tiled/white, -/area/errant_pisces/fishing_wing) -"pP" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 4; - level = 2 - }, -/turf/simulated/floor/tiled, -/area/errant_pisces/fishing_wing) -"pQ" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/turf/simulated/floor/tiled, -/area/errant_pisces/fishing_wing) -"pR" = ( -/obj/machinery/door/airlock, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/door/firedoor, -/turf/simulated/floor/plating, -/area/errant_pisces/fishing_wing) -"pS" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 1 - }, -/turf/simulated/floor/plating, -/area/errant_pisces/fishing_wing) -"pT" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/errant_pisces/fishing_wing) -"pU" = ( -/obj/machinery/alarm{ - pixel_y = 24 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/errant_pisces/fishing_wing) -"pV" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/errant_pisces/fishing_wing) -"pW" = ( -/obj/machinery/door/airlock, -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/errant_pisces/fishing_wing) -"pX" = ( -/obj/machinery/alarm{ - pixel_y = 24 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/turf/simulated/floor/plating, -/area/errant_pisces/fishing_wing) -"pY" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 8 - }, -/turf/simulated/floor/plating, -/area/errant_pisces/fishing_wing) -"pZ" = ( -/obj/structure/net, -/mob/living/simple_animal/hostile/carp, -/turf/space, -/area/space) -"qa" = ( -/obj/machinery/computer/ship/sensors{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/errant_pisces/bridge) -"qb" = ( -/obj/structure/bed/chair/office/dark{ - dir = 8 - }, -/turf/simulated/floor/tiled, -/area/errant_pisces/bridge) -"qc" = ( -/obj/structure/table/steel, -/turf/simulated/floor/tiled, -/area/errant_pisces/bridge) -"qd" = ( -/obj/structure/table/steel, -/obj/random/toolbox, -/turf/simulated/floor/tiled, -/area/errant_pisces/bridge) -"qe" = ( -/obj/structure/table/steel, -/obj/random/advdevice, -/turf/simulated/floor/tiled, -/area/errant_pisces/bridge) -"qf" = ( -/obj/structure/table/steel, -/obj/machinery/button/blast_door{ - id_tag = "xynergy_perimeter_blast"; - name = "perimeter blast door-control" - }, -/turf/simulated/floor/tiled, -/area/errant_pisces/bridge) -"qg" = ( -/obj/machinery/computer/ship/helm{ - dir = 1 - }, -/turf/simulated/floor/tiled, -/area/errant_pisces/bridge) -"qh" = ( -/obj/machinery/computer/ship/engines{ - dir = 1 - }, -/turf/simulated/floor/tiled, -/area/errant_pisces/bridge) -"qi" = ( -/obj/item/bedsheet/captain, -/obj/structure/bed/padded, -/turf/simulated/floor/wood, -/area/errant_pisces/bridge) -"qj" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 1 - }, -/obj/structure/table/rack, -/obj/item/gun/projectile/shotgun/pump, -/turf/simulated/floor/plating, -/area/errant_pisces/fishing_wing) -"qk" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 1 - }, -/turf/simulated/floor/plating, -/area/errant_pisces/fishing_wing) -"ql" = ( -/turf/simulated/floor/plating, -/area/errant_pisces/fishing_wing) -"qm" = ( -/obj/structure/closet/l3closet/janitor, -/turf/simulated/floor/plating, -/area/errant_pisces/fishing_wing) -"qn" = ( -/obj/structure/table/rack, -/obj/item/clothing/mask/breath, -/obj/item/storage/box/survival, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 4; - level = 2 - }, -/turf/simulated/floor/plating, -/area/errant_pisces/fishing_wing) -"qo" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/errant_pisces/fishing_wing) -"qp" = ( -/obj/machinery/light/small{ - dir = 4; - icon_state = "bulb1" - }, -/obj/machinery/suit_storage_unit/standard_unit, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 1 - }, -/turf/simulated/floor/plating, -/area/errant_pisces/fishing_wing) -"qq" = ( -/obj/structure/janitorialcart, -/obj/item/mop, -/turf/simulated/floor/tiled, -/area/errant_pisces/fishing_wing) -"qr" = ( -/obj/machinery/light{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/errant_pisces/fishing_wing) -"qs" = ( -/obj/machinery/light/small{ - dir = 8 - }, -/obj/structure/table/rack, -/obj/item/gun/launcher/net, -/turf/simulated/floor/plating, -/area/errant_pisces/fishing_wing) -"qt" = ( -/obj/machinery/light/small{ - dir = 4; - icon_state = "bulb1" - }, -/obj/random/contraband, -/obj/structure/closet/l3closet/janitor, -/turf/simulated/floor/plating, -/area/errant_pisces/fishing_wing) -"qu" = ( -/obj/structure/table/rack, -/obj/item/tank/oxygen, -/turf/simulated/floor/plating, -/area/errant_pisces/fishing_wing) -"qv" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/plating, -/area/errant_pisces/fishing_wing) -"qw" = ( -/obj/machinery/suit_storage_unit/standard_unit, -/turf/simulated/floor/plating, -/area/errant_pisces/fishing_wing) -"qx" = ( -/obj/machinery/shipsensors, -/turf/simulated/floor/reinforced/airless, -/area/errant_pisces/bridge) -"qy" = ( -/obj/structure/closet/firecloset, -/turf/simulated/floor/tiled, -/area/errant_pisces/fishing_wing) -"qz" = ( -/obj/structure/closet/emcloset, -/turf/simulated/floor/tiled, -/area/errant_pisces/fishing_wing) -"qA" = ( -/obj/structure/table/rack, -/obj/item/gun/launcher/net, -/turf/simulated/floor/plating, -/area/errant_pisces/fishing_wing) -"qB" = ( -/obj/structure/closet, -/obj/random/smokes, -/obj/random/drinkbottle, -/turf/simulated/floor/plating, -/area/errant_pisces/fishing_wing) -"qC" = ( -/obj/structure/lattice, -/turf/simulated/wall/r_wall, -/area/errant_pisces/bridge) -"qD" = ( -/obj/structure/table/rack, -/obj/item/material/knife/combat, -/obj/item/material/knife/combat, -/obj/item/stack/net/thirty, -/obj/item/stack/net/thirty, -/turf/simulated/floor/plating, -/area/errant_pisces/fishing_wing) -"qE" = ( -/obj/structure/closet, -/obj/random/smokes, -/obj/random/snack, -/obj/random/tank, -/turf/simulated/floor/plating, -/area/errant_pisces/fishing_wing) -"qF" = ( -/obj/structure/table/rack, -/obj/item/storage/box/survival, -/obj/item/stack/net/thirty, -/turf/simulated/floor/plating, -/area/errant_pisces/fishing_wing) -"qG" = ( -/obj/machinery/light/small{ - dir = 4; - icon_state = "bulb1" - }, -/obj/machinery/suit_storage_unit/standard_unit, -/turf/simulated/floor/plating, -/area/errant_pisces/fishing_wing) -"qH" = ( -/obj/structure/grille, -/turf/space, -/area/space) -"qI" = ( -/obj/machinery/light/small{ - dir = 8 - }, -/obj/structure/table/rack, -/obj/item/material/harpoon, -/obj/item/material/harpoon, -/obj/item/material/harpoon, -/turf/simulated/floor/plating, -/area/errant_pisces/fishing_wing) -"qJ" = ( -/obj/structure/closet, -/obj/machinery/light/small{ - dir = 4; - icon_state = "bulb1" - }, -/obj/random/gloves, -/turf/simulated/floor/plating, -/area/errant_pisces/fishing_wing) -"qK" = ( -/obj/structure/table/rack, -/obj/item/clothing/mask/breath, -/obj/item/device/flashlight, -/obj/item/stack/net/thirty, -/turf/simulated/floor/plating, -/area/errant_pisces/fishing_wing) -"qL" = ( -/obj/effect/landmark/corpse/carp_fisher, -/obj/effect/decal/cleanable/blood, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/plating, -/area/errant_pisces/fishing_wing) -"qM" = ( -/turf/simulated/wall/r_wall, -/area/space) -"qN" = ( -/obj/structure/bed/chair, -/turf/simulated/floor/plating, -/area/errant_pisces/fishing_wing) -"qO" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/turf/simulated/floor/plating, -/area/errant_pisces/fishing_wing) -"qP" = ( -/obj/effect/decal/cleanable/blood, -/obj/machinery/access_button/airlock_interior{ - frequency = 1439; - master_tag = "xyn_fish_airlock"; - pixel_x = 25; - pixel_y = -25 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/errant_pisces/fishing_wing) -"qQ" = ( -/obj/machinery/door/airlock/external{ - frequency = 1439; - id_tag = "xyn_fish_inner" - }, -/obj/machinery/door/firedoor, -/obj/effect/decal/cleanable/blood, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/errant_pisces/fishing_wing) -"qR" = ( -/obj/machinery/light/small{ - dir = 1 - }, -/obj/effect/decal/cleanable/blood, -/obj/machinery/embedded_controller/radio/airlock/airlock_controller{ - frequency = 1439; - id_tag = "xyn_fish_airlock"; - pixel_y = -25; - tag_airpump = "xyn_fish_pump"; - tag_chamber_sensor = "xyn_fish_sensor"; - tag_exterior_door = "xyn_fish_outer"; - tag_interior_door = "xyn_fish_inner" - }, -/obj/machinery/airlock_sensor{ - frequency = 1439; - id_tag = "xyn_fish_sensor"; - pixel_y = 25 - }, -/obj/machinery/atmospherics/unary/vent_pump/high_volume{ - dir = 8; - id_tag = "xyn_fish_pump" - }, -/turf/simulated/floor/plating, -/area/errant_pisces/fishing_wing) -"qS" = ( -/obj/machinery/door/airlock/external{ - frequency = 1439; - id_tag = "xyn_fish_outer" - }, -/obj/machinery/door/blast/regular/open{ - dir = 4; - icon_state = "pdoor0"; - id_tag = "xynergy_perimeter_blast" - }, -/obj/machinery/door/firedoor, -/turf/simulated/floor/plating, -/area/space) -"qT" = ( -/obj/structure/net, -/obj/machinery/access_button/airlock_exterior{ - frequency = 1439; - master_tag = "xyn_dock2_airlock"; - pixel_x = -25; - pixel_y = -25 - }, -/turf/space, -/area/space) -"qU" = ( -/obj/structure/bed/chair{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/errant_pisces/fishing_wing) -"qV" = ( -/obj/structure/table/steel, -/obj/random/smokes, -/obj/item/flame/lighter/random, -/turf/simulated/floor/plating, -/area/errant_pisces/fishing_wing) -"qW" = ( -/obj/structure/table/steel, -/obj/random/snack, -/turf/simulated/floor/plating, -/area/errant_pisces/fishing_wing) -"qX" = ( -/obj/structure/bed/chair{ - dir = 8 - }, -/obj/item/flame/match, -/turf/simulated/floor/plating, -/area/errant_pisces/fishing_wing) -"qY" = ( -/obj/structure/dispenser/oxygen, -/turf/simulated/floor/plating, -/area/errant_pisces/fishing_wing) -"qZ" = ( -/obj/machinery/portable_atmospherics/canister/oxygen, -/turf/simulated/floor/plating, -/area/errant_pisces/fishing_wing) -"ra" = ( -/obj/structure/net, -/obj/item/material/knife/combat, -/turf/space, -/area/space) -"rb" = ( -/obj/structure/net, -/obj/item/reagent_containers/food/snacks/meat/syntiflesh, -/turf/space, -/area/space) -"rc" = ( -/obj/structure/net, -/mob/living/simple_animal/hostile/carp/shark, -/turf/space, -/area/space) -"sb" = ( -/obj/structure/hygiene/sink{ - dir = 8; - pixel_x = -12; - pixel_y = 2 - }, -/obj/item/storage/mirror{ - pixel_x = -30 - }, -/turf/simulated/floor/tiled/white, -/area/errant_pisces/head_f) -"tb" = ( -/obj/structure/hygiene/sink{ - dir = 4; - pixel_x = 11 - }, -/obj/item/storage/mirror{ - pixel_x = 30 - }, -/turf/simulated/floor/tiled/white, -/area/errant_pisces/head_m) -"ub" = ( -/obj/structure/hygiene/sink{ - dir = 4; - pixel_x = 11 - }, -/obj/item/storage/mirror{ - pixel_x = 30 - }, -/obj/machinery/power/apc{ - name = "south bump"; - pixel_y = -24 - }, -/obj/structure/cable/green{ - d2 = 8; - icon_state = "0-8" - }, -/turf/simulated/floor/tiled/white, -/area/errant_pisces/head_m) -"Ph" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/multi_tile{ - dir = 4; - name = "Airlock" - }, -/turf/simulated/floor/tiled, -/area/errant_pisces/aft_hallway) -"Ti" = ( -/obj/machinery/computer/modular{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/errant_pisces/science_wing) - -(1,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(2,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(3,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(4,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(5,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(6,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(7,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(8,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(9,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(10,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(11,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(12,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(13,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(14,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(15,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(16,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(17,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(18,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(19,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(20,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(21,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(22,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(23,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(24,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(25,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(26,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(27,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(28,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(29,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(30,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(31,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(32,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(33,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(34,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(35,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(36,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(37,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(38,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(39,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(40,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(41,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(42,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(43,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(44,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(45,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(46,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(47,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(48,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(49,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(50,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(51,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(52,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(53,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(54,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(55,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(56,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -eb -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(57,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(58,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(59,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(60,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(61,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(62,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(63,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(64,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(65,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(66,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(67,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(68,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(69,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aU -aV -aV -aV -aV -aV -aV -aV -aV -aV -aV -aV -aV -aV -aV -aV -aV -aV -aV -aV -aV -aV -aV -aV -hq -hq -hq -hq -hq -hq -jz -jz -jz -jz -jz -jz -jz -jz -jz -jz -nk -nk -nk -nk -og -og -og -og -og -og -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(70,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aV -aa -aa -aa -bc -aa -aa -aa -bc -aa -aa -aa -ec -aa -aa -aa -bc -aa -aa -aa -bc -aa -aa -aa -hq -hq -hq -hq -hq -hq -jz -jz -jz -jz -jz -jz -jz -jz -jz -jz -nk -nk -nk -nk -og -og -og -og -og -og -og -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(71,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aV -aa -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -ed -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -aa -hq -hq -hP -iu -iN -hq -jz -jR -kb -jR -jR -jR -kb -jR -jz -jz -nl -nK -oc -op -og -oZ -ot -pD -pO -og -og -og -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(72,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aV -bc -bv -bS -bS -bS -bS -bS -bS -bS -bS -bS -ee -eG -eG -eG -eG -eG -eG -eG -eG -eG -gK -bc -hq -hq -hI -iv -hS -hq -jz -jR -kc -jR -jR -kc -jR -jR -jz -jz -nm -nL -od -oq -oH -pa -ot -pE -pO -ot -og -og -og -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(73,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aV -aa -bw -bw -bw -bw -bw -bw -bw -bw -bw -bw -ed -bw -bw -bw -bw -bw -bw -bw -bw -bw -bw -aa -hq -hq -hQ -iw -iO -hq -jz -jR -jR -kc -jR -jR -jR -mb -jz -jz -nn -nM -oe -or -og -pb -ot -pF -ot -ot -qq -og -og -og -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(74,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aV -aa -aa -aa -bc -aa -aa -aa -bc -aa -aa -aa -ed -aa -aa -aa -bc -aa -aa -aa -bc -aa -aa -aa -hq -hq -hQ -hS -iw -hq -jz -jz -jz -jz -jz -jz -jz -mc -jz -jz -nk -nN -nk -nk -og -pc -pr -pG -pP -pG -pG -qy -og -og -og -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(75,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aV -aa -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -ed -bu -bu -bu -bu -bu -bu -bu -bu -bu -aa -aa -hq -hq -hQ -iw -iP -hq -jz -jz -jz -jz -jz -jz -jz -md -jz -jz -no -nO -of -os -oI -pd -ps -pH -pQ -pG -qr -qz -og -og -og -og -og -og -bc -bc -bc -bc -bc -bc -bc -bc -bc -bc -bc -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(76,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aV -bc -bv -bS -bS -bS -bS -bS -bS -bS -bS -bS -ee -eG -eG -eG -eG -eG -eG -eG -eG -gK -bc -hq -hq -hq -hQ -ix -iQ -ji -jA -jS -kd -kv -ld -lp -jz -me -jz -jz -np -nP -og -ot -ot -ot -ot -og -pR -og -og -og -og -og -og -og -og -og -bc -bc -bc -bc -bc -bc -bc -bc -bc -bc -bc -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(77,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aV -aa -bw -bw -bw -bw -bw -bw -bw -bw -bw -bw -ed -bw -bw -bw -bw -bw -bw -bw -bw -bw -aa -hq -hq -hq -hq -hq -iR -hq -jz -jT -ke -kw -le -lq -lJ -mf -mA -mW -nq -nQ -oh -ou -oJ -oK -oK -pI -pS -qj -qs -qA -qD -qI -ql -qU -og -og -pf -pf -pf -pf -pf -pw -pw -pw -pw -pw -pw -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(78,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aV -aa -aa -aa -bc -aa -aa -aa -bc -aa -aa -aa -ed -aa -aa -aa -bc -aa -aa -aa -bc -aa -aa -hq -hq -hG -hR -hI -iS -hq -jz -jU -kf -kw -lf -lr -jz -mg -mB -jz -np -nR -og -ov -oK -oK -pt -og -pT -qk -ql -ql -ql -ql -qN -qV -og -og -pf -pf -pf -pf -pw -pw -pf -pf -pf -pf -pw -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(79,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aV -aa -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -ed -bu -bu -bu -bu -bu -bu -bu -bu -bu -aa -hq -hq -hH -hS -iy -iS -hq -jz -jU -kg -kx -jX -ls -jz -jz -jz -jz -nr -nS -og -ow -oK -oK -pu -og -pU -ql -ql -ql -ql -ql -ql -qW -og -og -pf -pf -pf -pw -pw -pf -pf -pf -pf -pf -pw -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(80,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aV -bc -bv -bS -bS -bS -bS -bS -bS -bS -bS -bS -ee -eG -eG -eG -eG -eG -eG -eG -eG -gK -bc -hq -hq -hI -hI -hI -iT -hq -jz -jV -kh -kx -jX -ls -lK -mh -lK -jz -ns -nS -og -ox -oK -pe -pt -og -pV -qm -qt -qB -qE -qJ -ql -qX -og -og -pf -pf -pw -pw -pf -pf -pf -pf -pf -pf -pw -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(81,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aV -aa -bw -bw -bw -bw -bw -bw -bw -bw -bw -bw -ed -bw -bw -bw -bw -bw -bw -bw -bw -bw -aa -hq -hq -hJ -hT -hI -iS -hq -jz -jW -kh -kx -kh -lt -kh -kh -mC -mX -nt -nS -og -oy -oC -oK -pt -og -pW -ot -ot -ot -ot -ot -ot -ot -og -og -pf -pw -pw -pf -pf -pf -pf -pf -pf -pf -pw -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -eb -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(82,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aV -aa -aa -aa -bc -aa -aa -aa -bc -aa -dA -aa -ed -aa -aa -aa -bc -aa -aa -aa -bc -aa -aa -hq -hq -hK -hU -hI -iU -hq -jz -jX -ki -kx -jX -ls -lL -mi -mD -jz -np -nS -og -oz -oK -oK -pt -og -pV -qn -qu -qu -qF -qK -ql -qY -og -og -pw -pw -pf -pf -pf -pf -pf -pf -pf -pf -pw -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(83,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aW -aW -aW -aW -aW -aW -aW -aW -aW -dr -dB -dR -ef -dR -dR -fm -dR -dR -fX -gi -gi -gi -gi -hq -hq -hL -hV -iz -iV -hq -jz -jz -jz -ky -jz -jz -jz -jz -jz -jz -np -nS -og -oA -oC -oK -oD -og -pX -qo -qv -qv -qv -qL -qO -qZ -og -og -pw -pf -pf -pf -pf -pf -pf -pf -pf -pf -pw -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(84,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -aW -aW -aW -aW -aW -aW -aW -aW -aW -dr -dC -dR -eg -dR -dR -fn -dR -dR -fX -gi -gi -gi -gi -gi -gi -hI -hI -hI -iS -hq -hq -hq -jz -kz -lg -lu -lM -mj -mj -jz -nr -nS -og -oB -oC -oD -pv -og -pY -qp -qw -qw -qG -qw -qP -qZ -og -og -pw -pf -pf -pf -pf -pf -pf -pf -pf -pf -pw -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(85,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -aW -bd -bd -bd -bd -bd -cI -cV -dn -ds -dD -dR -eh -eH -eW -fo -fG -dR -fY -gj -gp -gL -gZ -gj -gq -hI -hW -iA -iS -iA -hW -hq -jz -kA -kh -kh -lN -kh -mE -jz -np -nS -og -oC -oK -oK -pe -og -og -og -og -og -og -og -qQ -og -og -og -pw -pf -pf -rb -pf -pf -pf -pf -pf -pf -pw -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(86,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -aW -be -bx -bT -bT -cs -cJ -cW -aW -dt -dE -dR -dR -dR -eX -fp -fH -dR -fZ -gj -gq -gM -gq -hr -hx -hI -hX -iB -iS -iB -jB -hq -jz -kB -kh -lv -lO -mk -mk -jz -np -nS -og -oD -oC -pe -oD -og -og -og -og -og -og -og -qR -og -og -og -pw -pf -pf -pf -pf -pf -pf -pf -pf -pf -pw -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(87,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -aD -aW -aW -aW -aW -aW -aW -aW -aW -aW -dt -dF -dS -ei -dR -dR -fq -dR -dR -fZ -gj -gr -gN -ha -gj -hx -hI -hW -iA -iS -iA -hW -hq -jz -kC -kh -lw -lP -ml -mF -jz -np -nS -og -oE -ot -ot -og -og -og -aa -aa -bc -aa -qM -qS -qM -aa -aa -pw -pf -pf -pf -pf -pf -pf -pf -pf -pf -pw -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(88,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -av -aE -aX -bf -by -bf -bf -bf -by -bf -bf -du -dG -dT -ej -dT -dT -fr -fI -fT -ga -gj -gj -gj -gj -gj -hy -hI -hI -hI -iW -hI -hI -hq -jz -kD -kh -kh -lN -kh -mE -jz -np -nS -og -oB -oF -og -og -og -aa -aa -aa -bc -aa -pw -qT -pw -pw -pw -pw -pf -pf -pf -pf -pf -pf -pf -pf -pf -pw -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(89,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ap -aw -aF -aY -aY -aY -aY -aY -aY -aY -aY -aY -dt -dH -dU -dU -dU -dU -dU -dU -dU -gb -gj -gs -gO -hb -gj -hx -hI -hY -ib -iS -jj -jC -hq -jz -Ti -kh -lx -lQ -kh -mG -jz -np -nS -og -oF -og -og -og -aa -aa -aa -aa -bc -aa -pw -pf -pf -pf -pf -pf -pf -pf -pf -pf -pf -rc -pf -pf -pf -pw -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(90,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -af -aq -ax -aG -aY -bg -bz -bU -cf -cf -cK -cX -aY -dt -dH -dU -ek -eI -eI -eI -eI -eJ -gb -gj -gq -gq -gq -hr -gq -hI -hZ -iC -iX -jk -jD -hq -jz -kE -kh -ly -lR -mm -mH -jz -nr -nS -og -og -og -og -bc -aa -aa -aa -aa -bc -aa -pw -pw -pw -pw -pw -pw -pf -pf -pf -pf -pf -pf -pf -pf -pf -pw -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(91,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ag -aq -ax -aH -aY -bg -bA -bU -bY -ct -cL -cy -aY -dt -dH -dU -el -el -eY -el -el -eJ -gb -gj -gr -gP -hc -gj -hx -hI -hY -ib -iY -jl -jE -hq -jz -kh -kh -kh -lS -mn -mn -jz -np -nS -og -og -og -aa -pf -aa -aa -aa -aa -bc -aa -aa -aa -aa -aa -aa -pw -pf -pf -pf -pf -pf -pf -pf -pf -pf -pw -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(92,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ah -aq -ax -aH -aY -bg -bA -bU -cg -cu -cu -cg -aY -dt -dH -dU -em -eJ -eJ -eJ -eJ -eJ -gb -gj -gj -gj -gj -gj -hx -hI -ia -iC -iZ -jm -jF -hq -jz -kF -kF -kF -lT -mo -mI -jz -np -nS -mz -mz -bc -pf -pw -pw -pw -pw -pw -pw -pw -pw -pw -pw -pw -pf -pw -pf -pf -pf -pf -pf -pf -pf -pf -pf -pw -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(93,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ah -aq -ax -aH -aY -bg -bA -bU -ch -cv -ck -cY -aY -dt -dH -dU -el -eK -eZ -sb -sb -eJ -gb -gj -gt -gQ -hd -gt -gq -hI -ib -ib -ja -jn -iS -hq -jz -jz -jz -jz -jz -jz -jz -jz -nu -Ph -mz -mz -aa -aa -pw -pf -pf -pf -pf -pf -pf -pf -pf -pf -pw -aa -pw -pf -pf -pf -pf -pf -pf -pf -pf -pf -pw -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(94,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ai -aq -ax -aH -aY -bh -bA -bV -bV -cw -cM -cZ -aY -dt -dH -dU -en -eL -fa -ft -fJ -fU -gc -gj -gq -gq -gq -gq -hx -hI -ic -hI -hI -hI -jG -hq -kj -kj -kj -kj -kj -kj -kj -kj -np -nS -mz -mz -aa -aa -pw -pf -pf -pf -pf -pf -pf -pf -pZ -pf -pw -aa -pw -pf -pf -pf -rb -pf -pf -pf -pf -pf -pw -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(95,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ai -aq -ax -aH -aY -bi -bB -bW -ci -cx -cN -da -aY -dt -dI -dU -eo -eJ -eo -eJ -eo -eJ -gd -gj -gu -gq -he -hs -gq -hI -ib -iD -jb -jo -jH -hq -kk -kG -kk -lz -kk -kN -kH -kj -nv -nS -mz -mz -aa -aa -pw -pf -pf -pZ -pf -pf -pf -pf -pf -pf -pw -aa -pw -pf -rb -pf -pf -pf -pf -pf -pf -pf -pw -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(96,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ah -aq -ax -aI -aY -bj -bC -bk -cj -cy -cO -db -aY -dt -dH -dU -ep -eJ -ep -eJ -ep -eJ -gd -gj -gv -gq -gq -gq -hz -hI -id -hY -jc -iX -jI -hq -kl -kH -kH -kH -kH -kH -kH -kj -nv -nS -mz -mz -aa -aa -pw -pf -pf -pf -pf -pf -pf -pf -pf -pf -pw -aa -pw -pf -pf -pf -pf -rb -pf -pf -pf -pf -pw -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(97,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ah -aq -ax -aJ -aY -bj -bD -bk -ck -cz -bk -db -aY -dt -dJ -dV -dV -dV -dV -dV -dV -dV -gd -gj -gw -gR -hf -ht -hA -hI -ie -iE -jc -jp -jJ -hq -kk -kI -kk -lA -kk -mp -kH -kj -nw -nS -mz -mz -aa -aa -pw -pf -pf -pf -pf -pf -pf -pZ -pf -pf -pw -aa -pw -pf -pf -pf -pf -pf -pf -pf -pf -pw -pw -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(98,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ah -aq -ax -aJ -aY -bj -bE -bX -cl -cl -cP -dc -do -dv -dK -dW -eq -eM -fb -fu -fK -dV -gd -gj -gx -gx -hg -gx -gx -hI -if -if -if -jq -if -hq -km -kJ -kJ -kJ -kJ -kJ -mJ -kj -nx -nU -mz -mz -aa -aa -pw -pf -pZ -pf -pf -pf -pf -pf -pf -pf -pw -pw -pw -ra -pf -pf -pf -pf -pf -pf -pw -pw -pf -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(99,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -aj -ar -ay -aK -aY -bj -bF -bY -cm -cA -bk -dd -aY -dw -dL -dV -er -eN -fc -fv -er -dV -gd -gk -gy -fZ -gd -fZ -fZ -fZ -fZ -fZ -fZ -gd -fZ -jY -kn -kH -kH -kH -kH -kH -mK -mY -ny -nV -mz -mz -bc -pf -pw -pf -pf -pf -pf -pf -pZ -pf -pf -pf -pf -pf -pw -pf -pf -pf -pf -pf -pf -pw -pw -pf -pf -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(100,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ac -ac -ac -ac -ac -aL -aY -bk -bG -bZ -bZ -bZ -bG -de -aY -dt -dI -dV -es -eO -fd -eq -fL -fV -ge -gl -gz -gS -hi -gS -gS -gS -gS -gS -gS -jr -gS -jZ -ko -kK -kK -kK -kK -kK -kK -mZ -nz -nS -mz -mz -aa -aa -pw -pf -pf -pf -pf -pf -pf -pf -pf -pf -pw -pw -pw -pf -pf -pf -pf -pf -pw -pw -pf -pf -pf -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(101,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ac -ac -ak -as -az -aM -aZ -aZ -aZ -aZ -aZ -aZ -aZ -aZ -aZ -dt -dH -dV -et -eP -fe -fw -fM -dV -gd -gm -gA -fZ -gd -fZ -fZ -hM -fZ -fZ -fZ -fZ -fZ -jY -kp -kH -kH -kH -kH -kH -kH -jY -nA -nW -mz -mz -aa -aa -pw -pf -pf -pf -pZ -pf -pf -pf -pf -pf -pw -aa -pw -pf -pf -pf -pf -rb -pf -pf -pf -pf -pf -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(102,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ae -al -at -aA -aN -aZ -bl -bH -ca -cn -cB -cQ -df -dp -dx -dM -dX -eu -eQ -ff -fx -fN -dV -gd -gn -gB -gB -hj -gB -gB -gn -gB -gB -hn -gB -gB -go -kq -kL -kL -kL -kL -kL -mL -kj -nv -nS -mz -mz -aa -aa -pw -pf -pf -pf -pf -pf -pf -pf -pf -pf -pw -aa -pw -pf -pf -pf -pf -pf -pw -pw -pf -rb -pf -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(103,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ae -al -at -aA -aN -aZ -bm -bI -cb -bn -bn -bn -dg -aZ -dt -dN -dV -dV -dV -dV -dV -dV -dV -gd -gn -gC -gT -hk -hu -hB -hN -ig -gU -gU -gU -gU -go -kr -kM -kr -lB -kr -mq -kH -kj -nw -nS -mz -mz -aa -aa -pw -pf -pZ -pf -pf -pf -pf -pZ -pf -pf -pw -aa -pw -pf -pf -pf -pf -pf -pf -pw -pw -pf -pf -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(104,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ae -al -at -aA -aO -aZ -bn -bm -cb -bn -cC -cR -dh -aZ -dt -dH -dY -ev -eR -ev -eR -fO -eR -gd -gn -gD -gU -hl -gU -gU -gU -ih -gU -gU -ii -ii -go -kl -kH -kH -kH -kH -kH -kH -kj -nv -nS -mz -mz -aa -aa -pw -pf -pf -pf -pf -pf -pf -pf -pf -pf -pw -aa -pw -pf -pf -pf -pf -pf -pf -pf -pw -pw -pf -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(105,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ac -ac -am -at -aA -aP -aZ -bo -bJ -cc -bn -bn -bn -dh -aZ -dt -dH -dY -ew -eR -ew -eR -fO -eR -gd -gn -gE -gV -hm -hv -hC -hO -ii -ii -gU -ij -jK -go -kr -kN -kr -lC -kr -lB -kH -kj -nv -nS -mz -mz -aa -aa -pw -pf -pf -pf -pf -pf -pf -pf -pf -pf -pw -aa -pw -pf -pf -pf -pf -rb -pf -pf -pf -pw -pw -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(106,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ac -ac -am -at -aA -aP -aZ -bp -bn -bn -bn -bn -bn -di -aZ -dt -dI -dY -ex -eS -fg -fy -fP -fW -gf -gn -gn -gn -hn -gn -gn -gn -ij -iF -gU -js -ij -go -kj -kj -kj -kj -kj -kj -kj -kj -nB -nX -mz -mz -bc -pf -pw -pw -pw -pw -pw -pw -pw -pw -pw -pw -pw -pf -pw -pf -pf -pf -pf -pf -pf -pf -pf -pf -pw -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(107,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ae -al -at -aA -aP -aZ -bn -bn -bn -co -cD -bn -dj -aZ -dt -dH -dY -ey -eT -fh -tb -ub -eR -gb -gn -gF -gW -gU -hw -gF -gn -ij -ij -gU -ii -ii -go -ks -kO -lh -kO -kP -mr -mM -na -nC -nS -mz -mz -aa -aa -bc -aa -aa -aa -aa -bc -aa -aa -aa -aa -aa -aa -pw -pf -pf -rb -pf -pf -pf -pf -pf -pf -pw -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(108,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ae -al -at -aA -aP -aZ -bq -bL -bn -cp -cE -bn -dk -aZ -dt -dH -dY -ew -eR -eR -eR -eR -eR -gb -gn -gG -gU -gU -gU -hD -gn -ii -ii -il -gU -gU -go -ks -kO -kO -kO -kP -kP -mN -kT -nv -nS -oi -oi -oi -oi -oi -oi -aa -aa -aa -bc -aa -aa -aa -aa -aa -aa -pw -pf -pf -pf -pf -pf -pf -pf -pf -pf -pw -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(109,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ae -an -at -aA -aP -aZ -br -bM -bn -bn -bn -bn -dk -aZ -dt -dH -dY -ey -ey -fi -ey -ey -eR -gb -gn -gH -gX -gU -gF -hw -gn -ik -il -gU -gU -gU -go -ks -kP -kP -kP -kP -kP -kP -kT -nD -nS -oi -oi -oi -oi -oi -oi -oi -aa -aa -bc -aa -aa -aa -aa -aa -aa -pw -pf -pf -pf -pf -rb -pf -rb -pf -pf -pw -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(110,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ac -ac -ao -at -aA -aQ -aZ -br -bN -cd -cq -cF -cS -dk -aZ -dt -dH -dY -ez -eU -eU -eU -eU -eR -gb -gn -gn -gn -gU -gn -gn -gn -il -iG -jd -jt -jL -go -ks -kQ -kP -lD -kP -ms -kP -kT -nE -nY -oj -oG -oL -pg -px -oi -oi -oi -aa -bc -aa -aa -aa -aa -aa -aa -pw -pf -pf -pf -pf -pf -pf -pf -pf -pf -pw -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(111,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ac -ac -ac -au -aB -aR -aZ -aZ -aZ -aZ -aZ -aZ -aZ -aZ -aZ -dt -dH -dY -dY -dY -dY -dY -dY -dY -gb -gn -gI -gY -gU -gY -hE -gn -im -il -gU -gU -jM -go -ks -kR -kP -lE -kP -ms -kP -kT -nB -nZ -oi -oi -oM -oS -oS -pJ -oi -oi -oi -oi -qH -bc -bc -bc -bc -bc -pw -pf -pf -pf -pf -pf -pf -pf -pf -pf -pw -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(112,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ac -ac -ac -aC -aS -ba -bf -bO -bf -bf -bf -bO -bf -bf -dy -dO -dT -eA -dT -fj -fA -fI -fT -gg -gn -gn -gn -gU -gn -gn -gn -il -iH -jd -ju -jN -go -ks -kS -li -lF -kP -mt -kP -kT -nv -nP -oi -oi -oN -oS -oS -pK -qa -po -qx -pp -qH -bc -aa -aa -bc -aa -pw -pf -pf -pf -pf -pf -pf -pf -pf -pf -pw -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(113,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ac -ac -ac -aT -bb -bb -bb -bb -bb -bb -bb -bb -bb -dt -dF -dZ -ei -ea -ea -fB -ea -ea -fZ -gn -gJ -gY -gU -gY -gI -gn -in -gn -gn -gn -gn -go -ks -kT -kT -kT -kT -kT -mO -kT -nv -nP -oi -oi -oO -oS -oS -oS -qb -oi -oi -oi -qH -bc -bc -bc -bc -bc -pw -pf -pf -pf -pf -pf -pf -pf -pf -pf -pw -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(114,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ac -ac -ac -bb -bs -bP -ce -cr -cG -cT -dl -bb -dt -dF -ea -ea -ea -fk -fC -fR -ea -fZ -gn -gn -gn -gU -gn -gn -gn -io -iI -je -jv -jO -go -kt -kU -lj -kW -kW -mu -kV -la -nv -nS -oi -oi -oP -oS -py -oS -qc -po -pp -pq -aa -aa -aa -aa -aa -aa -pw -pf -pf -pf -pf -pf -pf -pf -pf -pf -pw -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(115,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ac -ac -bb -bt -bt -bt -bt -cH -cU -dm -dq -dz -dF -ea -eB -eV -fl -fD -fS -ea -gh -gn -gJ -gY -ho -gY -gJ -gn -io -iJ -iJ -jw -jP -go -kt -kV -kV -kV -kV -kV -kV -la -nv -nS -oi -oi -oQ -oS -oS -oS -qd -po -pp -pq -aa -aa -aa -aa -aa -aa -pw -pf -pf -pf -pf -pf -pf -pf -pf -pf -pw -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -eb -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(116,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ac -bb -bb -bb -bb -bb -bb -bb -bb -bb -dr -dP -ea -eC -ea -ea -fE -ea -ea -fX -go -go -go -go -go -go -go -go -go -go -go -go -go -kt -kW -kU -kU -kW -kV -mP -la -nw -nS -oi -oi -oR -oS -oS -oS -qe -po -pp -pq -aa -aa -aa -aa -aa -aa -pw -pf -pf -pf -pf -pf -pf -pf -pf -pf -pw -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(117,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -bb -bb -bb -bb -bb -bb -bb -bb -bb -dr -dQ -ea -eD -ea -ea -fF -ea -ea -fX -go -go -go -go -go -hF -hF -hF -hF -hF -hF -hF -hF -kt -kW -lk -kW -kU -kV -mQ -la -nv -nS -oi -oi -oS -ph -oS -oS -qf -po -pp -pq -aa -aa -aa -aa -aa -aa -pw -pf -pf -rc -pf -pf -pf -pf -pf -pf -pw -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(118,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aV -aa -aa -aa -bc -aa -aa -aa -bc -aa -aa -aa -ed -aa -aa -aa -bc -aa -aa -aa -bc -aa -aa -aa -hF -hF -ip -hF -jf -jx -jf -hF -kt -kX -kV -kV -kV -kV -mR -nb -nF -oa -oi -oi -oS -pi -oS -oS -pi -po -pp -pq -aa -aa -aa -aa -aa -aa -pw -pf -pf -pf -pf -pf -pf -pf -pf -pf -pw -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(119,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aV -aa -bQ -bQ -bQ -bQ -bQ -bQ -bQ -bQ -bQ -bQ -ed -bQ -bQ -bQ -bQ -bQ -bQ -bQ -bQ -bQ -hp -aa -hF -hF -ip -iK -jf -jf -jg -hF -kt -kU -kW -kU -lW -kV -mS -la -nv -nS -oi -oi -oT -pj -pz -pL -qg -po -pp -pq -aa -aa -aa -aa -aa -aa -pw -pf -pf -pf -pf -pf -pf -pf -pf -pf -pw -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(120,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aV -bc -bv -bS -bS -bS -bS -bS -bS -bS -bS -bS -eE -eG -eG -eG -eG -eG -eG -eG -eG -eG -gK -bc -hF -hF -iq -hF -jf -jg -jf -hF -kt -kW -kU -kW -kW -mv -kV -la -nv -nS -oi -oi -oS -pj -oS -oS -qh -po -pp -pq -aa -aa -aa -aa -aa -aa -pw -pw -pf -pf -pf -pf -pf -pf -pf -pf -pw -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(121,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aV -aa -bR -bR -bR -bR -bR -bR -bR -bR -bR -bR -ed -bR -bR -bR -bR -bR -bR -bR -bR -bR -bR -aa -hF -hF -ir -hF -hF -hF -hF -hF -kt -kV -kV -kV -kV -kV -kV -la -nv -nS -oi -oi -oS -oS -oS -oS -qc -po -pp -pq -aa -aa -aa -aa -aa -aa -pf -pw -pw -pf -pf -pf -pf -pf -pf -pf -pw -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(122,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aV -aa -aa -aa -bc -aa -aa -aa -bc -aa -aa -aa -ed -aa -aa -aa -bc -aa -aa -aa -bc -aa -aa -aa -hF -hF -ip -hF -jf -jx -jf -hF -kt -kW -kU -kW -kU -kV -kV -la -nv -nS -oi -oi -oU -oS -oS -oS -pA -po -pp -pq -aa -aa -aa -aa -aa -aa -pf -pf -pw -pw -pf -pf -pf -pf -pf -pf -pw -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(123,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aV -aa -bQ -bQ -bQ -bQ -bQ -bQ -bQ -bQ -bQ -bQ -ed -bQ -bQ -bQ -bQ -bQ -bQ -bQ -bQ -bQ -hp -aa -hF -hF -ip -iL -jg -jf -jg -hF -kt -kY -ll -ll -lX -mw -mT -la -nw -nS -oi -oi -oS -oS -oS -oS -pj -po -pp -pq -aa -aa -aa -aa -aa -aa -pf -pf -pf -pw -pw -pf -pf -pf -pf -pf -pw -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(124,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aV -bc -bv -bS -bS -bS -bS -bS -bS -bS -bS -bS -eE -eG -eG -eG -eG -eG -eG -eG -eG -eG -gK -bc -hF -hF -is -hF -jf -jg -jf -hF -kt -kV -lm -kV -kV -kV -kV -la -nv -nS -oi -oi -oS -oS -oS -pL -pj -po -pp -pq -aa -aa -aa -aa -aa -aa -pf -pf -pf -pf -pw -pw -pf -pf -pf -pf -pw -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(125,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aV -aa -bR -bR -bR -bR -bR -bR -bR -bR -bR -bR -ed -bR -bR -bR -bR -bR -bR -bR -bR -bR -bR -aa -hF -hF -ir -hF -hF -hF -hF -hF -kt -kZ -kV -lm -kV -lY -kV -la -nv -nS -oi -oi -oS -pk -pA -pM -qc -po -pp -pq -aa -aa -aa -aa -aa -aa -pf -pf -pf -pf -pf -pw -pw -pw -pw -pw -pw -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(126,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aV -aa -aa -aa -bc -aa -aa -aa -bc -aa -aa -aa -ed -aa -aa -aa -bc -aa -aa -aa -bc -aa -aa -aa -hF -hF -ip -iM -jf -jx -jf -hF -kt -kV -ln -lG -lY -ln -kV -la -nv -nS -oi -oi -oV -oi -oi -oi -oi -oi -oi -qC -bc -bc -bc -bc -bc -bc -bc -bc -bc -bc -bc -bc -bc -bc -bc -bc -bc -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(127,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aV -aa -bQ -bQ -bQ -bQ -bQ -bQ -bQ -bQ -bQ -bQ -ed -bQ -bQ -bQ -bQ -bQ -bQ -bQ -bQ -bQ -hp -aa -hF -hF -it -hF -jf -jf -jg -hF -kt -la -la -la -la -la -la -la -nv -nS -oi -oi -oW -pl -pl -pN -qi -oi -oi -bc -bc -bc -bc -bc -bc -bc -bc -bc -bc -bc -bc -bc -bc -bc -bc -bc -bc -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(128,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aV -bc -bv -bS -bS -bS -bS -bS -bS -bS -bS -bS -eE -eG -eG -eG -eG -eG -eG -eG -eG -eG -gK -bc -hF -hF -ip -hF -hF -hF -hF -hF -hF -lb -lb -lH -lZ -mx -mU -nc -nD -nS -oi -oi -oX -pm -pB -oi -oi -oi -oi -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(129,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aV -aa -bR -bR -bR -bR -bR -bR -bR -bR -bR -bR -ed -bR -bR -bR -bR -bR -bR -bR -bR -bR -bR -aa -hF -hF -ip -ip -jh -jy -jQ -ka -ku -lc -lo -lI -ma -my -mV -nd -nG -nS -oi -oi -oY -pn -pC -oi -oi -oi -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(130,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aV -aa -aa -aa -bc -aa -aa -aa -bc -aa -aa -aa -eF -aa -aa -aa -bc -aa -aa -aa -bc -aa -aa -aa -hF -hF -hF -hF -hF -hF -hF -hF -hF -hF -hF -hF -hF -hF -hF -hF -nH -nS -oi -oi -oi -po -po -oi -oi -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(131,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aU -aV -aV -aV -aV -aV -aV -aV -aV -aV -aV -aV -aV -aV -aV -aV -aV -aV -aV -aV -aV -aV -aV -aV -hF -hF -hF -hF -hF -hF -hF -hF -hF -hF -hF -hF -hF -hF -hF -hF -nI -Ph -oi -oi -oi -pp -pp -oi -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(132,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -mz -mz -ne -nJ -ob -ok -mz -mz -pq -pq -oi -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(133,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -mz -mz -nf -mz -mz -ol -mz -mz -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(134,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -mz -mz -ng -mz -mz -om -mz -mz -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(135,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -mz -mz -nh -mz -mz -on -mz -mz -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(136,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -bc -ni -bc -bc -oo -bc -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(137,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -bc -nj -bc -bc -nj -bc -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(138,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -bc -bc -bc -bc -bc -bc -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(139,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(140,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(141,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(142,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(143,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(144,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(145,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(146,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(147,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -eb -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -eb -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(148,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(149,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(150,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(151,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(152,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(153,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(154,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(155,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(156,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(157,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(158,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(159,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(160,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(161,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(162,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(163,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(164,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(165,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(166,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(167,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(168,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(169,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(170,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(171,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(172,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(173,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(174,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(175,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(176,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(177,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(178,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(179,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(180,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(181,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(182,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(183,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(184,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(185,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(186,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(187,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(188,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(189,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(190,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(191,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(192,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(193,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(194,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(195,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(196,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(197,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(198,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(199,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(200,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} diff --git a/maps/away/errant_pisces/errant_pisces_areas.dm b/maps/away/errant_pisces/errant_pisces_areas.dm deleted file mode 100644 index 1c86bd29bcdef..0000000000000 --- a/maps/away/errant_pisces/errant_pisces_areas.dm +++ /dev/null @@ -1,102 +0,0 @@ -/area/errant_pisces - icon = 'maps/away/errant_pisces/errant_pisces_areas_sprites.dmi'//24 areas so sprites are in a separate .dmi - -/area/errant_pisces/bow_port - name = "Bow Port" - icon_state = "bow_port" - -/area/errant_pisces/bow_starboard - name = "Bow Starboard" - icon_state = "bow_starboard" - -/area/errant_pisces/bow_maint - name = "Bow Maintenace" - icon_state = "bow_maint" - -/area/errant_pisces/storage_port - name = "Port Storage" - icon_state = "storage_port" - -/area/errant_pisces/storage_starboard - name = "Starboard Storage" - icon_state = "storage_starboard" - -/area/errant_pisces/solar_port - name = "Port Solars" - icon_state = "solar_port" - -/area/errant_pisces/solar_starboard - name = "Starboard Solars" - icon_state = "solar_starboard" - -/area/errant_pisces/atmos - name = "Atmospherics" - icon_state = "atmos" - -/area/errant_pisces/enginering - name = "Engineering" - icon_state = "enginering" - -/area/errant_pisces/head_f - name = "Head, F" - icon_state = "head_f" - -/area/errant_pisces/head_m - name = "Head, M" - icon_state = "head_m" - -/area/errant_pisces/smes_room - name = "SMES Room" - icon_state = "smes_room" - -/area/errant_pisces/hallway - name = "Central Hallway" - icon_state = "hallway" - -/area/errant_pisces/dorms - name = "Dorms" - icon_state = "dorms" - -/area/errant_pisces/rooms - name = "Rooms" - icon_state = "rooms" - -/area/errant_pisces/infirmary - name = "Infirmary" - icon_state = "infirmary" - -/area/errant_pisces/cryo - name = "Cryo" - icon_state = "cryo" - -/area/errant_pisces/aft_hallway - name = "Aft Hallway" - icon_state = "aft_hallway" - -/area/errant_pisces/science_wing - name = "Science Wing" - icon_state = "science_wing" - -/area/errant_pisces/aux_power - name = "Auxilary Power Room" - icon_state = "aux_power" - -/area/errant_pisces/fishing_wing - name = "Fishing Wing" - icon_state = "fishing_wing" - -/area/errant_pisces/bridge - name = "Bridge" - icon_state = "bridge" - -/area/errant_pisces/prod_storage - name = "Production Storage" - icon_state = "prod_storage" - -/area/errant_pisces/general_storage - name = "General Storage" - icon_state = "general_storage" - -/area/errant_pisces/live_storage - name = "Live Storage" - icon_state = "live_storage" diff --git a/maps/away/errant_pisces/errant_pisces_areas_sprites.dmi b/maps/away/errant_pisces/errant_pisces_areas_sprites.dmi deleted file mode 100644 index 7ae10712a540f..0000000000000 Binary files a/maps/away/errant_pisces/errant_pisces_areas_sprites.dmi and /dev/null differ diff --git a/maps/away/errant_pisces/errant_pisces_sprites.dmi b/maps/away/errant_pisces/errant_pisces_sprites.dmi deleted file mode 100644 index 068378d22beaa..0000000000000 Binary files a/maps/away/errant_pisces/errant_pisces_sprites.dmi and /dev/null differ diff --git a/maps/away/lar_maria/lar_maria-1.dmm b/maps/away/lar_maria/lar_maria-1.dmm deleted file mode 100644 index 3ef6771162648..0000000000000 --- a/maps/away/lar_maria/lar_maria-1.dmm +++ /dev/null @@ -1,44037 +0,0 @@ -//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE -"aa" = ( -/turf/space, -/area/space) -"ab" = ( -/obj/structure/disposaloutlet{ - dir = 1 - }, -/obj/structure/disposalpipe/trunk, -/obj/structure/lattice, -/turf/space, -/area/space) -"ac" = ( -/turf/simulated/wall/r_wall, -/area/lar_maria/cells) -"ad" = ( -/turf/simulated/wall/r_wall, -/area/lar_maria/morgue) -"ae" = ( -/obj/structure/disposalpipe/segment, -/turf/simulated/wall/r_wall, -/area/lar_maria/morgue) -"af" = ( -/turf/simulated/wall/r_wall, -/area/lar_maria/vir_hallway) -"ag" = ( -/turf/simulated/wall/r_wall, -/area/lar_maria/vir_main) -"ah" = ( -/obj/structure/disposalpipe/segment, -/turf/simulated/wall/r_wall, -/area/lar_maria/vir_main) -"ai" = ( -/obj/structure/cable{ - d2 = 4; - icon_state = "0-4" - }, -/obj/machinery/atmospherics/pipe/zpipe/up/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/zpipe/up/supply{ - dir = 4 - }, -/obj/structure/cable{ - d1 = 16; - d2 = 0; - dir = 4; - icon_state = "16-0" - }, -/turf/simulated/floor/plating, -/area/lar_maria/morgue) -"aj" = ( -/obj/structure/cable{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/light/small{ - dir = 1 - }, -/turf/simulated/floor/plating, -/area/lar_maria/morgue) -"al" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/obj/structure/sign/warning/biohazard{ - pixel_x = 32 - }, -/obj/machinery/alarm{ - pixel_y = 24 - }, -/turf/simulated/floor/plating, -/area/lar_maria/morgue) -"am" = ( -/obj/structure/disposalpipe/trunk{ - dir = 1 - }, -/obj/machinery/disposal, -/turf/simulated/floor/plating, -/area/lar_maria/morgue) -"an" = ( -/obj/structure/closet/crate/trashcart, -/obj/machinery/light/small{ - dir = 1 - }, -/turf/simulated/floor/plating, -/area/lar_maria/morgue) -"ao" = ( -/obj/structure/disposalpipe/segment, -/turf/simulated/wall/r_wall, -/area/lar_maria/cells) -"ap" = ( -/obj/structure/ladder/up, -/obj/effect/decal/cleanable/blood, -/turf/simulated/floor/plating, -/area/lar_maria/morgue) -"aq" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/obj/effect/landmark/corpse/lar_maria/zhp_guard/dark, -/obj/effect/decal/cleanable/blood, -/turf/simulated/floor/plating, -/area/lar_maria/morgue) -"as" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/plating, -/area/lar_maria/morgue) -"at" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/door/blast/regular{ - id_tag = "Tech_access_BD" - }, -/obj/machinery/door/firedoor, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/plating, -/area/lar_maria/morgue) -"au" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/plating, -/area/lar_maria/morgue) -"av" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/plating, -/area/lar_maria/morgue) -"aw" = ( -/obj/machinery/door/airlock/virology, -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/plating, -/area/lar_maria/morgue) -"ax" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/obj/structure/cable{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/turf/simulated/floor/tiled, -/area/lar_maria/vir_hallway) -"ay" = ( -/obj/machinery/smartfridge/chemistry/virology, -/turf/simulated/floor/tiled/white, -/area/lar_maria/vir_main) -"aA" = ( -/obj/structure/table/glass, -/obj/item/paper, -/obj/item/folder/white, -/turf/simulated/floor/tiled/white, -/area/lar_maria/vir_main) -"aB" = ( -/obj/structure/table/glass, -/obj/machinery/light{ - dir = 1 - }, -/obj/item/storage/box/beakers, -/obj/item/reagent_containers/spray/cleaner, -/obj/machinery/alarm{ - pixel_y = 24 - }, -/turf/simulated/floor/tiled/white, -/area/lar_maria/vir_main) -"aG" = ( -/obj/machinery/light{ - dir = 1 - }, -/turf/simulated/floor/tiled/white, -/area/lar_maria/vir_main) -"aH" = ( -/obj/structure/hygiene/sink{ - pixel_y = 20 - }, -/turf/simulated/floor/tiled/white, -/area/lar_maria/vir_main) -"aI" = ( -/obj/structure/disposalpipe/trunk{ - dir = 1 - }, -/obj/machinery/disposal, -/turf/simulated/floor/tiled/white, -/area/lar_maria/vir_main) -"aJ" = ( -/obj/effect/wallframe_spawn/reinforced, -/turf/simulated/floor/tiled/white, -/area/lar_maria/vir_main) -"aK" = ( -/obj/structure/bed, -/obj/effect/landmark/corpse/lar_maria/test_subject, -/obj/machinery/light{ - dir = 1 - }, -/turf/simulated/floor/tiled/white, -/area/lar_maria/vir_main) -"aL" = ( -/obj/structure/closet/secure_closet/personal/patient, -/turf/simulated/floor/tiled/white, -/area/lar_maria/vir_main) -"aM" = ( -/obj/machinery/door/airlock/virology, -/obj/machinery/door/firedoor, -/turf/simulated/floor/plating, -/area/lar_maria/morgue) -"aN" = ( -/turf/simulated/wall, -/area/lar_maria/morgue) -"aO" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/light{ - dir = 8; - icon_state = "tube1" - }, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled, -/area/lar_maria/vir_hallway) -"aP" = ( -/obj/machinery/light{ - dir = 8; - icon_state = "tube1" - }, -/turf/simulated/floor/tiled/white, -/area/lar_maria/vir_main) -"aQ" = ( -/obj/effect/decal/cleanable/blood, -/turf/simulated/floor/tiled/white, -/area/lar_maria/vir_main) -"aR" = ( -/obj/random/trash, -/turf/simulated/floor/tiled/white, -/area/lar_maria/vir_main) -"aS" = ( -/turf/simulated/floor/tiled/white, -/area/lar_maria/vir_main) -"aT" = ( -/obj/machinery/door/window/westleft, -/turf/simulated/floor/tiled/white, -/area/lar_maria/vir_main) -"aU" = ( -/obj/structure/bed/padded, -/turf/simulated/floor/tiled, -/area/lar_maria/cells) -"aV" = ( -/obj/structure/bed/padded, -/obj/item/contraband/poster, -/turf/simulated/floor/tiled, -/area/lar_maria/cells) -"aW" = ( -/obj/structure/bed/padded, -/obj/effect/landmark/corpse/lar_maria/test_subject, -/turf/simulated/floor/tiled, -/area/lar_maria/cells) -"aX" = ( -/obj/structure/bed/padded, -/obj/effect/landmark/corpse/lar_maria/test_subject, -/obj/machinery/alarm{ - pixel_y = 24 - }, -/turf/simulated/floor/tiled, -/area/lar_maria/cells) -"aY" = ( -/obj/structure/bed/padded, -/obj/machinery/atmospherics/unary/vent_pump/on, -/turf/simulated/floor/tiled, -/area/lar_maria/cells) -"aZ" = ( -/obj/effect/wallframe_spawn/reinforced, -/obj/machinery/door/blast/regular/open{ - dir = 4; - icon_state = "pdoor0"; - id_tag = "Cells_ld_BD" - }, -/turf/simulated/floor/tiled, -/area/lar_maria/cells) -"ba" = ( -/obj/structure/disposalpipe/trunk{ - dir = 1 - }, -/obj/machinery/disposal, -/obj/machinery/light/small{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/lar_maria/cells) -"bb" = ( -/obj/machinery/light/small{ - dir = 8 - }, -/turf/simulated/floor/plating, -/area/lar_maria/cells) -"bc" = ( -/obj/effect/landmark/corpse/lar_maria/test_subject, -/turf/simulated/floor/plating, -/area/lar_maria/cells) -"bd" = ( -/obj/machinery/door/window/eastright, -/obj/machinery/door/blast/regular/open{ - dir = 4; - icon_state = "pdoor0"; - id_tag = "Cells_ld_BD" - }, -/turf/simulated/floor/plating, -/area/lar_maria/cells) -"be" = ( -/obj/machinery/alarm{ - pixel_y = 24 - }, -/turf/simulated/floor/plating, -/area/lar_maria/cells) -"bf" = ( -/obj/machinery/door/window/westleft, -/obj/machinery/door/blast/regular/open{ - dir = 4; - icon_state = "pdoor0"; - id_tag = "Cells_ld_BD" - }, -/turf/simulated/floor/plating, -/area/lar_maria/cells) -"bg" = ( -/turf/simulated/floor/plating, -/area/lar_maria/cells) -"bh" = ( -/obj/machinery/light/small{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/lar_maria/cells) -"bi" = ( -/obj/structure/morgue, -/turf/simulated/floor/plating, -/area/lar_maria/morgue) -"bj" = ( -/turf/simulated/floor/plating, -/area/lar_maria/morgue) -"bk" = ( -/obj/structure/morgue{ - dir = 8 - }, -/turf/simulated/floor/plating, -/area/lar_maria/morgue) -"bl" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled, -/area/lar_maria/vir_hallway) -"bm" = ( -/obj/structure/window/reinforced, -/obj/structure/window/reinforced{ - dir = 1 - }, -/obj/structure/hygiene/shower{ - dir = 4 - }, -/obj/effect/landmark/corpse/lar_maria/virologist, -/obj/effect/decal/cleanable/blood, -/turf/simulated/floor/tiled/white, -/area/lar_maria/vir_main) -"bn" = ( -/obj/structure/window/reinforced{ - dir = 4 - }, -/obj/machinery/door/window/northleft, -/turf/simulated/floor/tiled/white, -/area/lar_maria/vir_main) -"bo" = ( -/obj/structure/table/glass, -/obj/item/paper_bin, -/turf/simulated/floor/tiled/white, -/area/lar_maria/vir_main) -"bp" = ( -/obj/effect/landmark/corpse/lar_maria/virologist_female, -/obj/effect/decal/cleanable/blood, -/turf/simulated/floor/tiled/white, -/area/lar_maria/vir_main) -"bq" = ( -/obj/machinery/computer/modular, -/turf/simulated/floor/tiled/white, -/area/lar_maria/vir_main) -"br" = ( -/obj/structure/table/glass, -/obj/item/paper, -/obj/item/pen/blue, -/turf/simulated/floor/tiled/white, -/area/lar_maria/vir_main) -"bs" = ( -/obj/structure/table/glass, -/obj/item/paper/lar_maria/note_4, -/turf/simulated/floor/tiled/white, -/area/lar_maria/vir_main) -"bt" = ( -/obj/structure/table/glass, -/obj/item/device/flashlight/pen, -/turf/simulated/floor/tiled/white, -/area/lar_maria/vir_main) -"bv" = ( -/obj/structure/bed, -/turf/simulated/floor/tiled/white, -/area/lar_maria/vir_main) -"bw" = ( -/turf/simulated/floor/tiled, -/area/lar_maria/cells) -"bx" = ( -/obj/random/trash, -/turf/simulated/floor/tiled, -/area/lar_maria/cells) -"by" = ( -/obj/effect/decal/cleanable/blood, -/turf/simulated/floor/tiled, -/area/lar_maria/cells) -"bz" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, -/obj/effect/landmark/corpse/lar_maria/test_subject, -/obj/effect/decal/cleanable/blood, -/turf/simulated/floor/tiled, -/area/lar_maria/cells) -"bA" = ( -/obj/machinery/door/airlock/security, -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/door/blast/regular/open{ - dir = 4; - icon_state = "pdoor0"; - id_tag = "Cells_ld_BD" - }, -/turf/simulated/floor/tiled, -/area/lar_maria/cells) -"bB" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/turf/simulated/floor/plating, -/area/lar_maria/cells) -"bC" = ( -/obj/structure/mattress/dirty, -/turf/simulated/floor/plating, -/area/lar_maria/cells) -"bD" = ( -/obj/effect/wallframe_spawn/reinforced, -/obj/machinery/door/blast/regular/open{ - dir = 4; - icon_state = "pdoor0"; - id_tag = "Cells_ld_BD" - }, -/turf/simulated/floor/plating, -/area/lar_maria/cells) -"bE" = ( -/obj/structure/mattress/dirty, -/obj/effect/landmark/corpse/lar_maria/test_subject, -/turf/simulated/floor/plating, -/area/lar_maria/cells) -"bF" = ( -/obj/random/trash, -/turf/simulated/floor/plating, -/area/lar_maria/cells) -"bG" = ( -/mob/living/simple_animal/hostile/lar_maria/test_subject, -/turf/simulated/floor/plating, -/area/lar_maria/morgue) -"bH" = ( -/obj/structure/window/reinforced, -/obj/structure/window/reinforced{ - dir = 1 - }, -/obj/structure/hygiene/shower{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/lar_maria/vir_main) -"bI" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, -/obj/structure/window/reinforced{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/lar_maria/vir_main) -"bJ" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 8 - }, -/obj/structure/table/glass, -/obj/item/storage/box/masks, -/obj/item/storage/box/gloves, -/obj/item/reagent_containers/spray/sterilizine, -/turf/simulated/floor/tiled/white, -/area/lar_maria/vir_main) -"bK" = ( -/obj/structure/table/glass, -/obj/item/folder/white, -/turf/simulated/floor/tiled/white, -/area/lar_maria/vir_main) -"bL" = ( -/obj/structure/bed/chair/office/dark{ - dir = 8 - }, -/turf/simulated/floor/tiled/white, -/area/lar_maria/vir_main) -"bM" = ( -/obj/structure/table/glass, -/obj/item/paper, -/turf/simulated/floor/tiled/white, -/area/lar_maria/vir_main) -"bN" = ( -/obj/structure/bed/chair/office/dark{ - dir = 1 - }, -/turf/simulated/floor/tiled/white, -/area/lar_maria/vir_main) -"bO" = ( -/obj/structure/table/glass, -/turf/simulated/floor/tiled/white, -/area/lar_maria/vir_main) -"bP" = ( -/obj/structure/closet/crate/freezer, -/turf/simulated/floor/tiled/white, -/area/lar_maria/vir_main) -"bQ" = ( -/obj/structure/closet/emcloset, -/turf/simulated/floor/tiled, -/area/lar_maria/cells) -"bR" = ( -/obj/structure/bed/chair{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/lar_maria/cells) -"bS" = ( -/obj/structure/table/steel_reinforced, -/obj/item/newspaper, -/turf/simulated/floor/tiled, -/area/lar_maria/cells) -"bT" = ( -/obj/machinery/light, -/obj/structure/bed/chair{ - dir = 8 - }, -/turf/simulated/floor/tiled, -/area/lar_maria/cells) -"bU" = ( -/obj/structure/closet/crate/freezer/rations, -/turf/simulated/floor/tiled, -/area/lar_maria/cells) -"bV" = ( -/obj/structure/reagent_dispensers/water_cooler, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 1 - }, -/turf/simulated/floor/tiled, -/area/lar_maria/cells) -"bW" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/plating, -/area/lar_maria/cells) -"bX" = ( -/obj/structure/morgue, -/obj/machinery/light/small{ - dir = 8 - }, -/turf/simulated/floor/plating, -/area/lar_maria/morgue) -"bY" = ( -/obj/effect/decal/cleanable/blood, -/turf/simulated/floor/plating, -/area/lar_maria/morgue) -"bZ" = ( -/obj/machinery/power/apc{ - dir = 8; - name = "west bump"; - pixel_x = -24 - }, -/obj/structure/cable{ - d2 = 2; - icon_state = "0-2" - }, -/turf/simulated/floor/tiled/white, -/area/lar_maria/vir_main) -"ca" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/window/reinforced{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/lar_maria/vir_main) -"cb" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 8 - }, -/obj/structure/table/glass, -/obj/item/storage/box/bodybags, -/turf/simulated/floor/tiled/white, -/area/lar_maria/vir_main) -"cc" = ( -/obj/machinery/door/airlock/security, -/turf/simulated/floor/tiled/white, -/area/lar_maria/cells) -"cd" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/turf/simulated/floor/plating, -/area/lar_maria/cells) -"ce" = ( -/obj/machinery/door/window/westleft, -/obj/effect/landmark/corpse/lar_maria/test_subject, -/obj/machinery/door/blast/regular/open{ - dir = 4; - icon_state = "pdoor0"; - id_tag = "Cells_ld_BD" - }, -/turf/simulated/floor/plating, -/area/lar_maria/cells) -"cf" = ( -/obj/effect/landmark/corpse/lar_maria/virologist, -/obj/effect/decal/cleanable/blood, -/turf/simulated/floor/plating, -/area/lar_maria/morgue) -"cg" = ( -/obj/structure/morgue{ - dir = 8 - }, -/obj/machinery/atmospherics/unary/vent_pump/on, -/obj/machinery/alarm{ - dir = 8; - pixel_x = 24 - }, -/turf/simulated/floor/plating, -/area/lar_maria/morgue) -"ch" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/light{ - dir = 8; - icon_state = "tube1" - }, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/alarm{ - dir = 8; - pixel_x = 24 - }, -/turf/simulated/floor/tiled, -/area/lar_maria/vir_hallway) -"ci" = ( -/obj/machinery/door/airlock/virology, -/obj/machinery/door/firedoor, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/white, -/area/lar_maria/vir_main) -"cj" = ( -/obj/machinery/door/airlock/virology, -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/white, -/area/lar_maria/vir_main) -"ck" = ( -/obj/machinery/door/window/northright, -/turf/simulated/floor/tiled/white, -/area/lar_maria/vir_main) -"cl" = ( -/obj/structure/window/reinforced{ - dir = 1 - }, -/obj/item/clothing/head/surgery, -/turf/simulated/floor/tiled/white, -/area/lar_maria/vir_main) -"cm" = ( -/obj/structure/window/reinforced{ - dir = 4 - }, -/obj/structure/window/reinforced{ - dir = 1 - }, -/turf/simulated/floor/tiled/white, -/area/lar_maria/vir_main) -"cn" = ( -/obj/machinery/door/window/northright, -/obj/item/storage/firstaid/surgery, -/turf/simulated/floor/tiled/white, -/area/lar_maria/vir_main) -"co" = ( -/obj/structure/window/reinforced{ - dir = 1 - }, -/obj/effect/decal/cleanable/blood, -/turf/simulated/floor/tiled/white, -/area/lar_maria/vir_main) -"cp" = ( -/obj/structure/window/reinforced{ - dir = 4 - }, -/obj/structure/window/reinforced{ - dir = 1 - }, -/obj/effect/decal/cleanable/blood, -/turf/simulated/floor/tiled/white, -/area/lar_maria/vir_main) -"cq" = ( -/obj/structure/closet/secure_closet/freezer/fridge, -/turf/simulated/floor/tiled/white, -/area/lar_maria/vir_main) -"cr" = ( -/mob/living/simple_animal/hostile/lar_maria/test_subject, -/turf/simulated/floor/tiled/white, -/area/lar_maria/vir_main) -"cs" = ( -/obj/structure/hygiene/sink{ - dir = 8; - pixel_x = -12; - pixel_y = 2 - }, -/obj/machinery/light/small{ - dir = 8 - }, -/turf/simulated/floor/tiled/white, -/area/lar_maria/cells) -"ct" = ( -/obj/structure/hygiene/toilet{ - dir = 8 - }, -/turf/simulated/floor/tiled/white, -/area/lar_maria/cells) -"cu" = ( -/obj/structure/hygiene/toilet{ - dir = 4 - }, -/obj/effect/landmark/corpse/lar_maria/test_subject, -/obj/effect/decal/cleanable/blood, -/turf/simulated/floor/tiled/white, -/area/lar_maria/cells) -"cv" = ( -/obj/structure/hygiene/sink{ - dir = 4; - pixel_x = 11 - }, -/obj/machinery/light/small{ - dir = 4 - }, -/obj/effect/decal/cleanable/blood, -/mob/living/simple_animal/hostile/lar_maria/test_subject, -/turf/simulated/floor/tiled/white, -/area/lar_maria/cells) -"cw" = ( -/obj/machinery/atmospherics/unary/vent_pump/on, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/plating, -/area/lar_maria/cells) -"cx" = ( -/obj/structure/mattress/dirty, -/mob/living/simple_animal/hostile/lar_maria/test_subject, -/turf/simulated/floor/plating, -/area/lar_maria/cells) -"cy" = ( -/obj/structure/crematorium{ - dir = 4 - }, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/lar_maria/morgue) -"cz" = ( -/obj/machinery/button/crematorium{ - pixel_y = -20 - }, -/obj/effect/decal/cleanable/blood, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/lar_maria/morgue) -"cA" = ( -/obj/machinery/power/apc{ - name = "south bump"; - pixel_y = -24 - }, -/obj/structure/cable{ - d2 = 4; - icon_state = "0-4" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/mob/living/simple_animal/hostile/lar_maria/virologist/female, -/turf/simulated/floor/plating, -/area/lar_maria/morgue) -"cB" = ( -/obj/machinery/door/airlock/virology, -/obj/machinery/door/firedoor, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/lar_maria/morgue) -"cC" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/cable{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/lar_maria/vir_hallway) -"cD" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/mob/living/simple_animal/hostile/lar_maria/virologist, -/turf/simulated/floor/tiled/white, -/area/lar_maria/vir_main) -"cE" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/white, -/area/lar_maria/vir_main) -"cF" = ( -/obj/structure/table/glass, -/obj/item/storage/firstaid/surgery, -/obj/machinery/light, -/turf/simulated/floor/tiled/white, -/area/lar_maria/vir_main) -"cG" = ( -/obj/structure/window/reinforced{ - dir = 4 - }, -/obj/machinery/optable, -/turf/simulated/floor/tiled/white, -/area/lar_maria/vir_main) -"cH" = ( -/mob/living/simple_animal/hostile/lar_maria/virologist/female, -/turf/simulated/floor/tiled/white, -/area/lar_maria/vir_main) -"cI" = ( -/obj/structure/table/glass, -/obj/item/scalpel, -/turf/simulated/floor/tiled/white, -/area/lar_maria/vir_main) -"cJ" = ( -/obj/structure/window/reinforced{ - dir = 4 - }, -/obj/machinery/optable, -/obj/effect/landmark/corpse/lar_maria/test_subject, -/obj/effect/decal/cleanable/blood, -/turf/simulated/floor/tiled/white, -/area/lar_maria/vir_main) -"cK" = ( -/obj/structure/closet/secure_closet/freezer/fridge, -/obj/machinery/light, -/turf/simulated/floor/tiled/white, -/area/lar_maria/vir_main) -"cL" = ( -/obj/structure/bed, -/obj/machinery/light, -/turf/simulated/floor/tiled/white, -/area/lar_maria/vir_main) -"cM" = ( -/obj/machinery/light/small{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/random/trash, -/turf/simulated/floor/plating, -/area/lar_maria/cells) -"cN" = ( -/obj/machinery/door/airlock/security, -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/plating, -/area/lar_maria/cells) -"cO" = ( -/turf/simulated/wall/r_wall, -/area/lar_maria/sec_wing) -"cP" = ( -/obj/structure/table/steel_reinforced, -/obj/item/deck/cards, -/turf/simulated/floor/tiled, -/area/lar_maria/cells) -"cQ" = ( -/obj/machinery/light{ - dir = 1 - }, -/obj/structure/bed/chair{ - dir = 8 - }, -/turf/simulated/floor/tiled, -/area/lar_maria/cells) -"cR" = ( -/obj/structure/closet/crate/freezer/rations, -/obj/machinery/alarm{ - pixel_y = 24 - }, -/turf/simulated/floor/tiled, -/area/lar_maria/cells) -"cS" = ( -/obj/structure/closet/emcloset, -/obj/machinery/atmospherics/unary/vent_pump/on, -/turf/simulated/floor/tiled, -/area/lar_maria/cells) -"cT" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 8 - }, -/turf/simulated/floor/plating, -/area/lar_maria/cells) -"cU" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/lar_maria/cells) -"cV" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/mob/living/simple_animal/hostile/lar_maria/test_subject, -/turf/simulated/floor/plating, -/area/lar_maria/cells) -"cW" = ( -/obj/machinery/light/small{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/lar_maria/cells) -"cX" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/door/blast/regular/open{ - dir = 4; - icon_state = "pdoor0"; - id_tag = "Cells_ld_BD" - }, -/turf/simulated/floor/plating, -/area/lar_maria/cells) -"cY" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, -/turf/simulated/floor/plating, -/area/lar_maria/cells) -"cZ" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/alarm{ - dir = 1; - pixel_y = -22 - }, -/turf/simulated/floor/plating, -/area/lar_maria/cells) -"da" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/turf/simulated/floor/plating, -/area/lar_maria/cells) -"db" = ( -/obj/machinery/light/small{ - dir = 1 - }, -/turf/simulated/floor/plating, -/area/lar_maria/cells) -"dc" = ( -/obj/effect/decal/cleanable/blood, -/obj/machinery/door/blast/regular/open{ - dir = 4; - icon_state = "pdoor0"; - id_tag = "Cells_ld_BD" - }, -/turf/simulated/floor/plating, -/area/lar_maria/cells) -"dd" = ( -/obj/structure/sign/warning/biohazard{ - pixel_y = 32 - }, -/obj/effect/landmark/corpse/lar_maria/test_subject, -/obj/effect/decal/cleanable/blood, -/turf/simulated/floor/plating, -/area/lar_maria/cells) -"de" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/security{ - frequency = 1041; - id_tag = "ZHPcells_access_airlock_outer" - }, -/obj/machinery/door/blast/regular/open{ - dir = 4; - icon_state = "pdoor0"; - id_tag = "CellsBD" - }, -/turf/simulated/floor/plating, -/area/lar_maria/sec_wing) -"df" = ( -/obj/machinery/light/small{ - dir = 1 - }, -/obj/effect/decal/cleanable/blood, -/turf/simulated/floor/plating, -/area/lar_maria/sec_wing) -"dg" = ( -/obj/effect/decal/cleanable/blood, -/turf/simulated/floor/plating, -/area/lar_maria/sec_wing) -"dh" = ( -/obj/machinery/door/airlock/virology, -/obj/machinery/door/firedoor, -/obj/machinery/door/blast/regular/open{ - dir = 4; - icon_state = "pdoor0"; - id_tag = "CellsBD" - }, -/turf/simulated/floor/plating, -/area/lar_maria/sec_wing) -"di" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/lar_maria/vir_hallway) -"dj" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 4 - }, -/obj/random/trash, -/obj/structure/cable{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/turf/simulated/floor/tiled, -/area/lar_maria/vir_hallway) -"dk" = ( -/obj/structure/sign/warning/biohazard{ - pixel_y = 32 - }, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 8 - }, -/obj/machinery/door/firedoor, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled, -/area/lar_maria/vir_hallway) -"dl" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/cable{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/turf/simulated/floor/tiled, -/area/lar_maria/vir_hallway) -"dm" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled, -/area/lar_maria/vir_hallway) -"dn" = ( -/obj/structure/sign/warning/biohazard{ - pixel_y = 32 - }, -/obj/machinery/door/firedoor, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled, -/area/lar_maria/vir_hallway) -"do" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled, -/area/lar_maria/vir_hallway) -"dp" = ( -/obj/structure/cable{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/turf/simulated/floor/tiled, -/area/lar_maria/vir_hallway) -"dq" = ( -/obj/random/trash, -/turf/simulated/floor/tiled, -/area/lar_maria/vir_hallway) -"dr" = ( -/turf/simulated/wall/r_wall, -/area/lar_maria/vir_aux) -"dt" = ( -/obj/structure/closet/secure_closet/personal/patient, -/obj/machinery/light{ - dir = 1 - }, -/turf/simulated/floor/tiled/white, -/area/lar_maria/vir_aux) -"du" = ( -/obj/effect/wallframe_spawn/reinforced, -/turf/simulated/floor/tiled/white, -/area/lar_maria/vir_aux) -"dv" = ( -/obj/structure/closet/secure_closet/personal/patient, -/turf/simulated/floor/tiled/white, -/area/lar_maria/vir_aux) -"dw" = ( -/obj/machinery/light{ - dir = 1 - }, -/obj/effect/decal/cleanable/blood, -/turf/simulated/floor/tiled/white, -/area/lar_maria/vir_aux) -"dx" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, -/turf/simulated/floor/tiled, -/area/lar_maria/cells) -"dy" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/lar_maria/cells) -"dz" = ( -/obj/structure/closet/crate/trashcart, -/turf/simulated/floor/plating, -/area/lar_maria/cells) -"dA" = ( -/obj/machinery/door/airlock/security{ - frequency = 1041; - id_tag = "ZHPcells_access_airlock_outer" - }, -/obj/machinery/door/firedoor, -/obj/machinery/door/blast/regular/open{ - dir = 4; - icon_state = "pdoor0"; - id_tag = "CellsBD" - }, -/turf/simulated/floor/plating, -/area/lar_maria/sec_wing) -"dB" = ( -/obj/random/trash, -/turf/simulated/floor/plating, -/area/lar_maria/sec_wing) -"dC" = ( -/turf/simulated/floor/plating, -/area/lar_maria/sec_wing) -"dD" = ( -/obj/machinery/door/airlock/virology, -/obj/machinery/door/firedoor, -/obj/effect/decal/cleanable/blood, -/obj/machinery/door/blast/regular/open{ - dir = 4; - icon_state = "pdoor0"; - id_tag = "CellsBD" - }, -/turf/simulated/floor/plating, -/area/lar_maria/sec_wing) -"dE" = ( -/obj/effect/landmark/corpse/lar_maria/virologist, -/obj/effect/decal/cleanable/blood, -/turf/simulated/floor/tiled, -/area/lar_maria/vir_hallway) -"dF" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/obj/machinery/light, -/turf/simulated/floor/tiled, -/area/lar_maria/vir_hallway) -"dG" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/door/firedoor, -/turf/simulated/floor/tiled, -/area/lar_maria/vir_hallway) -"dH" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/mob/living/simple_animal/hostile/lar_maria/guard, -/turf/simulated/floor/tiled, -/area/lar_maria/vir_hallway) -"dI" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, -/turf/simulated/floor/tiled, -/area/lar_maria/vir_hallway) -"dJ" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/lar_maria/vir_hallway) -"dK" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled, -/area/lar_maria/vir_hallway) -"dL" = ( -/turf/simulated/floor/tiled, -/area/lar_maria/vir_hallway) -"dM" = ( -/obj/structure/bed, -/turf/simulated/floor/tiled/white, -/area/lar_maria/vir_aux) -"dN" = ( -/obj/effect/decal/cleanable/blood, -/turf/simulated/floor/tiled/white, -/area/lar_maria/vir_aux) -"dO" = ( -/obj/structure/bed, -/obj/effect/decal/cleanable/blood, -/turf/simulated/floor/tiled/white, -/area/lar_maria/vir_aux) -"dP" = ( -/obj/structure/bed/padded, -/obj/item/deck/tarot, -/turf/simulated/floor/tiled, -/area/lar_maria/cells) -"dQ" = ( -/obj/structure/reagent_dispensers/watertank, -/turf/simulated/floor/plating, -/area/lar_maria/cells) -"dR" = ( -/obj/structure/bed/padded, -/turf/simulated/floor/tiled, -/area/lar_maria/sec_wing) -"dS" = ( -/turf/simulated/wall, -/area/lar_maria/sec_wing) -"dT" = ( -/obj/structure/bed/padded, -/obj/item/clothing/suit/armor/riot, -/turf/simulated/floor/tiled, -/area/lar_maria/sec_wing) -"dU" = ( -/obj/structure/hygiene/toilet{ - dir = 4 - }, -/obj/machinery/light/small{ - dir = 1 - }, -/mob/living/simple_animal/hostile/lar_maria/guard/ranged, -/turf/simulated/floor/tiled/white, -/area/lar_maria/sec_wing) -"dW" = ( -/obj/effect/wallframe_spawn/reinforced, -/obj/machinery/door/blast/regular/open{ - dir = 2; - icon_state = "pdoor0"; - id_tag = "CellsBD" - }, -/turf/simulated/floor/plating, -/area/lar_maria/sec_wing) -"dX" = ( -/turf/simulated/wall/r_wall, -/area/lar_maria/vir_ward) -"dY" = ( -/turf/simulated/wall, -/area/lar_maria/vir_ward) -"dZ" = ( -/obj/machinery/door/window/southright, -/turf/simulated/floor/tiled/white, -/area/lar_maria/vir_aux) -"ea" = ( -/obj/machinery/door/window/southright, -/obj/effect/landmark/corpse/lar_maria/test_subject, -/obj/effect/decal/cleanable/blood, -/turf/simulated/floor/tiled/white, -/area/lar_maria/vir_aux) -"eb" = ( -/obj/machinery/light/small{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/plating, -/area/lar_maria/cells) -"ec" = ( -/obj/structure/curtain/open/bed, -/turf/simulated/floor/tiled, -/area/lar_maria/sec_wing) -"ed" = ( -/obj/structure/curtain/open/bed, -/obj/random/trash, -/turf/simulated/floor/tiled, -/area/lar_maria/sec_wing) -"ee" = ( -/obj/machinery/door/airlock/security, -/turf/simulated/floor/tiled/white, -/area/lar_maria/sec_wing) -"ef" = ( -/obj/structure/table/rack, -/obj/item/shield/riot, -/obj/item/shield/riot, -/obj/item/clothing/head/helmet/riot, -/obj/item/clothing/suit/armor/riot, -/turf/simulated/floor/tiled, -/area/lar_maria/sec_wing) -"eg" = ( -/obj/machinery/computer/modular, -/turf/simulated/floor/tiled, -/area/lar_maria/sec_wing) -"eh" = ( -/obj/structure/bed/roller, -/obj/effect/landmark/corpse/lar_maria/test_subject, -/turf/simulated/floor/tiled/white, -/area/lar_maria/vir_ward) -"ei" = ( -/obj/structure/bed/roller, -/turf/simulated/floor/tiled/white, -/area/lar_maria/vir_ward) -"ej" = ( -/obj/structure/bed/roller, -/obj/machinery/atmospherics/unary/vent_pump/on{ - level = 2 - }, -/turf/simulated/floor/tiled/white, -/area/lar_maria/vir_ward) -"ek" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/door/firedoor, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled, -/area/lar_maria/vir_hallway) -"el" = ( -/obj/machinery/door/firedoor, -/turf/simulated/floor/tiled, -/area/lar_maria/vir_hallway) -"em" = ( -/obj/item/storage/box/freezer, -/turf/simulated/floor/tiled/white, -/area/lar_maria/vir_aux) -"en" = ( -/obj/structure/disposalpipe/trunk{ - dir = 4 - }, -/obj/machinery/disposal, -/turf/simulated/floor/tiled/white, -/area/lar_maria/vir_aux) -"eo" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/simulated/wall/r_wall, -/area/lar_maria/vir_aux) -"ep" = ( -/obj/structure/lattice, -/obj/structure/disposaloutlet{ - dir = 4 - }, -/obj/structure/disposalpipe/trunk{ - dir = 8 - }, -/turf/space, -/area/space) -"eq" = ( -/obj/structure/bed/padded, -/obj/effect/landmark/corpse/lar_maria/test_subject, -/obj/effect/decal/cleanable/blood, -/turf/simulated/floor/tiled, -/area/lar_maria/cells) -"er" = ( -/obj/structure/bed/padded, -/obj/item/book/manual/chef_recipes, -/obj/machinery/alarm{ - pixel_y = 24 - }, -/turf/simulated/floor/tiled, -/area/lar_maria/cells) -"es" = ( -/obj/structure/closet/crate/freezer/rations, -/turf/simulated/floor/plating, -/area/lar_maria/cells) -"et" = ( -/turf/simulated/floor/tiled, -/area/lar_maria/sec_wing) -"eu" = ( -/obj/structure/table/steel_reinforced, -/obj/machinery/embedded_controller/radio/airlock/airlock_controller{ - frequency = 1041; - id_tag = "ZHPcells_access_airlock"; - tag_exterior_door = "ZHPcells_access_airlock_outer"; - tag_interior_door = "ZHPcells_access_airlock_inner" - }, -/turf/simulated/floor/tiled, -/area/lar_maria/sec_wing) -"ev" = ( -/obj/structure/bed/chair{ - dir = 1 - }, -/turf/simulated/floor/tiled, -/area/lar_maria/sec_wing) -"ew" = ( -/obj/structure/bed/chair{ - dir = 1 - }, -/obj/effect/landmark/corpse/lar_maria/zhp_guard, -/turf/simulated/floor/tiled, -/area/lar_maria/sec_wing) -"ex" = ( -/obj/structure/table/steel_reinforced, -/obj/machinery/light{ - dir = 4; - icon_state = "tube1" - }, -/obj/machinery/button/blast_door{ - id_tag = "Cells_ld_BD"; - name = "Cells Lockdown"; - pixel_x = 4; - pixel_y = -4 - }, -/obj/machinery/button/blast_door{ - id_tag = "Cells_acc_BD"; - name = "Cells Direct Access"; - pixel_x = 4; - pixel_y = 6 - }, -/obj/machinery/button/blast_door{ - id_tag = "VirAccessBD"; - name = "Virology Access Lockdown"; - pixel_x = -5; - pixel_y = -4 - }, -/obj/machinery/button/blast_door{ - id_tag = "CellsBD"; - name = "Cells Access Lockdown"; - pixel_x = -5; - pixel_y = 6 - }, -/turf/simulated/floor/tiled, -/area/lar_maria/sec_wing) -"ey" = ( -/obj/machinery/alarm{ - dir = 4; - pixel_x = -32 - }, -/turf/simulated/floor/tiled/white, -/area/lar_maria/vir_ward) -"ez" = ( -/obj/machinery/light/small{ - dir = 1 - }, -/turf/simulated/floor/tiled/white, -/area/lar_maria/vir_ward) -"eA" = ( -/turf/simulated/floor/tiled/white, -/area/lar_maria/vir_ward) -"eB" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/tiled/white, -/area/lar_maria/vir_ward) -"eC" = ( -/obj/machinery/light, -/obj/machinery/smartfridge/chemistry/virology, -/turf/simulated/floor/tiled/white, -/area/lar_maria/vir_aux) -"eD" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/tiled, -/area/lar_maria/vir_hallway) -"eE" = ( -/obj/machinery/alarm{ - dir = 4; - pixel_x = -32 - }, -/turf/simulated/floor/tiled/white, -/area/lar_maria/vir_aux) -"eF" = ( -/obj/structure/table/glass, -/obj/item/storage/box/syringes, -/turf/simulated/floor/tiled/white, -/area/lar_maria/vir_aux) -"eG" = ( -/obj/machinery/light{ - dir = 4 - }, -/obj/structure/table/glass, -/turf/simulated/floor/tiled/white, -/area/lar_maria/vir_aux) -"eH" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, -/mob/living/simple_animal/hostile/lar_maria/test_subject, -/turf/simulated/floor/tiled, -/area/lar_maria/cells) -"eI" = ( -/obj/structure/table/steel_reinforced, -/obj/item/paper_bin, -/turf/simulated/floor/tiled, -/area/lar_maria/sec_wing) -"eJ" = ( -/obj/structure/table/steel_reinforced, -/obj/random/smokes, -/obj/item/gun/energy/taser, -/turf/simulated/floor/tiled, -/area/lar_maria/sec_wing) -"eK" = ( -/obj/structure/bed/chair{ - dir = 8 - }, -/turf/simulated/floor/tiled, -/area/lar_maria/sec_wing) -"eL" = ( -/obj/structure/table/rack, -/obj/item/storage/box/handcuffs, -/turf/simulated/floor/tiled, -/area/lar_maria/sec_wing) -"eM" = ( -/obj/random/trash, -/turf/simulated/floor/tiled, -/area/lar_maria/sec_wing) -"eN" = ( -/obj/structure/closet, -/obj/item/clothing/under/color/red, -/obj/item/gun/projectile/shotgun/pump/combat, -/turf/simulated/floor/tiled, -/area/lar_maria/sec_wing) -"eO" = ( -/obj/machinery/power/apc{ - dir = 8; - name = "west bump"; - pixel_x = -24 - }, -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/obj/effect/landmark/corpse/lar_maria/zhp_guard/dark, -/obj/structure/cable{ - d2 = 2; - icon_state = "0-2" - }, -/turf/simulated/floor/tiled, -/area/lar_maria/sec_wing) -"eP" = ( -/obj/structure/table/steel_reinforced, -/obj/item/reagent_containers/spray/pepper, -/obj/item/reagent_containers/spray/pepper, -/obj/machinery/alarm{ - dir = 8; - pixel_x = 24 - }, -/turf/simulated/floor/tiled, -/area/lar_maria/sec_wing) -"eQ" = ( -/obj/random/trash, -/turf/simulated/floor/tiled/white, -/area/lar_maria/vir_ward) -"eR" = ( -/obj/machinery/power/apc{ - name = "south bump"; - pixel_y = -24 - }, -/obj/structure/cable{ - d2 = 4; - icon_state = "0-4" - }, -/turf/simulated/floor/tiled/white, -/area/lar_maria/vir_ward) -"eS" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/turf/simulated/floor/tiled/white, -/area/lar_maria/vir_ward) -"eT" = ( -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/door/airlock/virology{ - frequency = 1039; - id_tag = "ZHPvirology_access_airlock_outer" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/lar_maria/vir_ward) -"eU" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/cable{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/lar_maria/vir_hallway) -"eV" = ( -/obj/machinery/alarm{ - dir = 8; - pixel_x = 24 - }, -/turf/simulated/floor/tiled, -/area/lar_maria/vir_hallway) -"eX" = ( -/obj/machinery/door/firedoor, -/obj/structure/sign/warning/biohazard{ - pixel_x = 32 - }, -/turf/simulated/floor/tiled, -/area/lar_maria/vir_hallway) -"eY" = ( -/obj/structure/table/glass, -/obj/item/storage/box/freezer, -/turf/simulated/floor/tiled/white, -/area/lar_maria/vir_aux) -"eZ" = ( -/obj/structure/bed/chair/office/dark, -/turf/simulated/floor/tiled/white, -/area/lar_maria/vir_aux) -"fa" = ( -/mob/living/simple_animal/hostile/lar_maria/virologist, -/turf/simulated/floor/tiled/white, -/area/lar_maria/vir_aux) -"fb" = ( -/obj/structure/table/glass, -/obj/item/storage/box/beakers, -/obj/item/storage/box/pillbottles, -/turf/simulated/floor/tiled/white, -/area/lar_maria/vir_aux) -"fc" = ( -/obj/structure/table/steel_reinforced, -/obj/random/trash, -/turf/simulated/floor/tiled, -/area/lar_maria/cells) -"fd" = ( -/obj/machinery/light, -/obj/structure/bed/chair{ - dir = 8 - }, -/mob/living/simple_animal/hostile/lar_maria/test_subject, -/turf/simulated/floor/tiled, -/area/lar_maria/cells) -"fe" = ( -/obj/structure/table/steel_reinforced, -/obj/machinery/light{ - dir = 8 - }, -/turf/simulated/floor/tiled, -/area/lar_maria/sec_wing) -"ff" = ( -/obj/structure/table/steel_reinforced, -/obj/item/reagent_containers/spray/pepper, -/obj/item/deck/cards, -/turf/simulated/floor/tiled, -/area/lar_maria/sec_wing) -"fg" = ( -/obj/structure/table/rack, -/obj/item/melee/baton, -/obj/item/melee/baton, -/obj/item/melee/baton, -/turf/simulated/floor/tiled, -/area/lar_maria/sec_wing) -"fh" = ( -/obj/structure/table/rack, -/obj/item/clothing/head/helmet/ballistic, -/turf/simulated/floor/tiled, -/area/lar_maria/sec_wing) -"fi" = ( -/obj/structure/closet, -/obj/item/shield/riot, -/obj/item/storage/box/ammo/shotgunammo, -/obj/machinery/light{ - dir = 4; - icon_state = "tube1" - }, -/turf/simulated/floor/tiled, -/area/lar_maria/sec_wing) -"fj" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled, -/area/lar_maria/sec_wing) -"fk" = ( -/obj/structure/table/steel_reinforced, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 8 - }, -/obj/machinery/embedded_controller/radio/airlock/airlock_controller{ - frequency = 1043; - id_tag = "ZHPsec_access_airlock"; - tag_exterior_door = "ZHPsec__access_airlock_outer"; - tag_interior_door = "ZHPsec__access_airlock_inner" - }, -/turf/simulated/floor/tiled, -/area/lar_maria/sec_wing) -"fl" = ( -/obj/structure/table/steel_reinforced, -/obj/machinery/button/blast_door{ - id_tag = "Tech_access_BD"; - name = "Communications Access" - }, -/turf/simulated/floor/tiled, -/area/lar_maria/sec_wing) -"fm" = ( -/obj/structure/table/steel_reinforced, -/obj/item/clothing/head/soft/lar_maria/zhp_cap, -/turf/simulated/floor/tiled, -/area/lar_maria/sec_wing) -"fn" = ( -/obj/structure/table/steel_reinforced, -/obj/item/handcuffs, -/turf/simulated/floor/tiled, -/area/lar_maria/sec_wing) -"fo" = ( -/obj/structure/bed/roller, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 1 - }, -/turf/simulated/floor/tiled/white, -/area/lar_maria/vir_ward) -"fp" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/white, -/area/lar_maria/vir_aux) -"fq" = ( -/obj/machinery/power/apc{ - dir = 8; - name = "west bump"; - pixel_x = -24 - }, -/obj/machinery/atmospherics/unary/vent_pump/on, -/obj/structure/cable{ - d2 = 2; - icon_state = "0-2" - }, -/obj/machinery/computer/modular, -/turf/simulated/floor/tiled/white, -/area/lar_maria/vir_aux) -"fr" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/obj/structure/table/glass, -/obj/item/storage/box/masks, -/obj/item/storage/box/gloves, -/turf/simulated/floor/tiled/white, -/area/lar_maria/vir_aux) -"fs" = ( -/obj/structure/table/glass, -/obj/item/storage/box/autoinjectors, -/turf/simulated/floor/tiled/white, -/area/lar_maria/vir_aux) -"ft" = ( -/obj/machinery/chem_master, -/turf/simulated/floor/tiled/white, -/area/lar_maria/vir_aux) -"fu" = ( -/obj/structure/closet/crate/freezer/rations, -/obj/machinery/power/apc{ - dir = 4; - name = "east bump"; - pixel_x = 24 - }, -/obj/machinery/atmospherics/unary/vent_pump/on, -/obj/structure/cable{ - d2 = 2; - icon_state = "0-2" - }, -/turf/simulated/floor/plating, -/area/lar_maria/cells) -"fv" = ( -/obj/structure/table/rack, -/obj/item/flamethrower/full, -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/turf/simulated/floor/tiled, -/area/lar_maria/sec_wing) -"fw" = ( -/obj/structure/table/rack, -/obj/item/storage/box/glowsticks, -/obj/machinery/atmospherics/unary/vent_pump/on, -/turf/simulated/floor/tiled, -/area/lar_maria/sec_wing) -"fx" = ( -/obj/structure/closet, -/obj/item/clothing/under/color/red, -/turf/simulated/floor/tiled, -/area/lar_maria/sec_wing) -"fy" = ( -/obj/machinery/door/airlock/security, -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled, -/area/lar_maria/sec_wing) -"fz" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 8 - }, -/obj/machinery/light{ - dir = 8; - icon_state = "tube1" - }, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/cable{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/turf/simulated/floor/tiled, -/area/lar_maria/vir_hallway) -"fA" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled, -/area/lar_maria/vir_hallway) -"fC" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/virology, -/turf/simulated/floor/tiled/white, -/area/lar_maria/vir_aux) -"fD" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/window/reinforced{ - dir = 1 - }, -/obj/structure/cable{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/turf/simulated/floor/tiled/white, -/area/lar_maria/vir_aux) -"fE" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/obj/structure/window/reinforced{ - dir = 1 - }, -/obj/machinery/door/window/eastright, -/turf/simulated/floor/tiled/white, -/area/lar_maria/vir_aux) -"fG" = ( -/turf/simulated/floor/tiled/white, -/area/lar_maria/vir_aux) -"fH" = ( -/obj/structure/hygiene/toilet{ - dir = 4 - }, -/mob/living/simple_animal/hostile/lar_maria/test_subject, -/turf/simulated/floor/tiled/white, -/area/lar_maria/cells) -"fI" = ( -/obj/structure/hygiene/sink{ - dir = 4; - pixel_x = 11 - }, -/obj/machinery/light/small{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/lar_maria/cells) -"fJ" = ( -/obj/machinery/light/small{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 8 - }, -/turf/simulated/floor/plating, -/area/lar_maria/cells) -"fK" = ( -/obj/effect/landmark/corpse/lar_maria/test_subject, -/obj/effect/decal/cleanable/blood, -/obj/structure/cable{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/lar_maria/cells) -"fL" = ( -/obj/machinery/door/blast/regular{ - id_tag = "Cells_acc_BD" - }, -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/effect/decal/cleanable/blood, -/obj/machinery/door/blast/regular/open{ - dir = 4; - icon_state = "pdoor0"; - id_tag = "Cells_ld_BD" - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled, -/area/lar_maria/sec_wing) -"fM" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 1 - }, -/obj/effect/decal/cleanable/blood, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/cable{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/turf/simulated/floor/tiled, -/area/lar_maria/sec_wing) -"fN" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled, -/area/lar_maria/sec_wing) -"fO" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/random/trash, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/alarm{ - dir = 1; - pixel_y = -22 - }, -/turf/simulated/floor/tiled, -/area/lar_maria/sec_wing) -"fP" = ( -/obj/structure/reagent_dispensers/peppertank{ - pixel_y = -30 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled, -/area/lar_maria/sec_wing) -"fQ" = ( -/obj/structure/reagent_dispensers/peppertank{ - pixel_y = -30 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled, -/area/lar_maria/sec_wing) -"fR" = ( -/obj/machinery/door/airlock/security, -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled, -/area/lar_maria/sec_wing) -"fS" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/cable{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/structure/cable{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/turf/simulated/floor/tiled, -/area/lar_maria/sec_wing) -"fT" = ( -/obj/machinery/light{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/alarm{ - dir = 1; - pixel_y = -22 - }, -/turf/simulated/floor/tiled, -/area/lar_maria/sec_wing) -"fU" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/random/trash, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled, -/area/lar_maria/sec_wing) -"fV" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/light{ - dir = 1 - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled, -/area/lar_maria/sec_wing) -"fW" = ( -/obj/structure/sign/warning/biohazard{ - pixel_y = 32 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled, -/area/lar_maria/sec_wing) -"fX" = ( -/obj/machinery/door/airlock/virology{ - frequency = 1043; - id_tag = "ZHPsec__access_airlock_inner" - }, -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/door/blast/regular/open{ - dir = 2; - icon_state = "pdoor0"; - id_tag = "CellsBD" - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled, -/area/lar_maria/sec_wing) -"fY" = ( -/obj/machinery/light/small{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled, -/area/lar_maria/sec_wing) -"fZ" = ( -/obj/machinery/door/airlock/virology{ - frequency = 1043; - id_tag = "ZHPsec__access_airlock_outer" - }, -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/door/blast/regular/open{ - dir = 2; - icon_state = "pdoor0"; - id_tag = "CellsBD" - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled, -/area/lar_maria/sec_wing) -"ga" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled, -/area/lar_maria/vir_hallway) -"gb" = ( -/obj/structure/sign/warning/biohazard{ - pixel_x = 32 - }, -/turf/simulated/floor/tiled, -/area/lar_maria/vir_hallway) -"gc" = ( -/obj/structure/window/reinforced{ - dir = 8 - }, -/obj/structure/window/reinforced{ - dir = 4 - }, -/obj/structure/hygiene/shower{ - dir = 1 - }, -/turf/simulated/floor/tiled/white, -/area/lar_maria/vir_aux) -"gd" = ( -/mob/living/simple_animal/hostile/lar_maria/virologist/female, -/turf/simulated/floor/tiled/white, -/area/lar_maria/vir_aux) -"ge" = ( -/obj/machinery/light, -/turf/simulated/floor/tiled/white, -/area/lar_maria/vir_aux) -"gf" = ( -/obj/structure/closet/crate, -/obj/item/folder/white, -/obj/item/material/knife/folding, -/turf/simulated/floor/plating, -/area/lar_maria/cells) -"gg" = ( -/obj/structure/closet, -/obj/item/clothing/under/color/orange, -/obj/item/clothing/under/color/orange, -/obj/item/clothing/shoes/orange, -/turf/simulated/floor/plating, -/area/lar_maria/cells) -"gh" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/button/blast_door{ - id_tag = "Cells_acc_BD"; - name = "Cells Direct Access"; - pixel_x = -25 - }, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled, -/area/lar_maria/sec_wing) -"gi" = ( -/obj/machinery/door/airlock/security, -/turf/simulated/floor/plating, -/area/lar_maria/sec_wing) -"gj" = ( -/obj/structure/bed/chair{ - dir = 4 - }, -/obj/effect/landmark/corpse/lar_maria/test_subject, -/obj/effect/decal/cleanable/blood, -/turf/simulated/floor/tiled, -/area/lar_maria/cells) -"gk" = ( -/obj/structure/table/steel_reinforced, -/obj/item/dice/d12, -/turf/simulated/floor/tiled, -/area/lar_maria/cells) -"gl" = ( -/obj/structure/closet, -/obj/item/clothing/under/color/orange, -/obj/item/clothing/shoes/orange, -/turf/simulated/floor/plating, -/area/lar_maria/cells) -"gm" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled, -/area/lar_maria/sec_wing) -"gn" = ( -/obj/structure/closet/emcloset, -/turf/simulated/floor/tiled, -/area/lar_maria/vir_access) -"go" = ( -/obj/machinery/vending/coffee, -/turf/simulated/floor/tiled, -/area/lar_maria/vir_access) -"gp" = ( -/obj/machinery/vending/cola, -/turf/simulated/floor/tiled, -/area/lar_maria/vir_access) -"gq" = ( -/obj/machinery/light{ - dir = 1 - }, -/obj/machinery/vending/snack, -/turf/simulated/floor/tiled, -/area/lar_maria/vir_access) -"gr" = ( -/obj/machinery/vending/cigarette, -/turf/simulated/floor/tiled, -/area/lar_maria/vir_access) -"gs" = ( -/obj/machinery/light/small{ - dir = 1 - }, -/turf/simulated/floor/plating, -/area/lar_maria/sec_wing) -"gt" = ( -/obj/structure/closet/crate/radiation, -/obj/item/stack/cable_coil/random, -/obj/item/stack/material/tritium/ten, -/obj/item/wirecutters, -/obj/item/wrench, -/turf/simulated/floor/plating, -/area/lar_maria/sec_wing) -"gu" = ( -/obj/machinery/light/small{ - dir = 1 - }, -/obj/random/trash, -/turf/simulated/floor/plating, -/area/lar_maria/sec_wing) -"gv" = ( -/obj/machinery/power/apc{ - dir = 8; - name = "west bump"; - pixel_x = -24 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable, -/turf/simulated/floor/tiled, -/area/lar_maria/vir_hallway) -"gx" = ( -/mob/living/simple_animal/hostile/lar_maria/guard/ranged, -/turf/simulated/floor/tiled, -/area/lar_maria/vir_access) -"gy" = ( -/obj/machinery/light{ - dir = 4; - icon_state = "tube1" - }, -/obj/machinery/embedded_controller/radio/airlock/airlock_controller{ - frequency = 1039; - id_tag = "ZHPvirology_access_airlock"; - pixel_y = 25; - tag_exterior_door = "ZHPvirology_access_airlock_outer"; - tag_exterior_sensor = "ZHPvirology_access_airlock_sensor"; - tag_interior_door = "ZHPvirology_access_airlock_inner" - }, -/turf/simulated/floor/tiled, -/area/lar_maria/vir_access) -"gz" = ( -/turf/simulated/wall/r_wall, -/area/lar_maria/vir_access) -"gA" = ( -/mob/living/simple_animal/hostile/lar_maria/test_subject, -/turf/simulated/floor/tiled, -/area/lar_maria/cells) -"gB" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/obj/random/trash, -/turf/simulated/floor/plating, -/area/lar_maria/cells) -"gC" = ( -/obj/structure/closet/crate, -/obj/item/contraband/poster, -/obj/item/inflatable_duck, -/turf/simulated/floor/plating, -/area/lar_maria/cells) -"gD" = ( -/obj/machinery/light{ - dir = 4; - icon_state = "tube1" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled, -/area/lar_maria/sec_wing) -"gE" = ( -/obj/machinery/light{ - dir = 8 - }, -/turf/simulated/floor/tiled, -/area/lar_maria/vir_access) -"gF" = ( -/turf/simulated/floor/tiled, -/area/lar_maria/vir_access) -"gG" = ( -/obj/machinery/light{ - dir = 4; - icon_state = "tube1" - }, -/turf/simulated/floor/tiled, -/area/lar_maria/vir_access) -"gH" = ( -/obj/machinery/power/smes/buildable, -/obj/structure/cable, -/turf/simulated/floor/plating, -/area/lar_maria/sec_wing) -"gI" = ( -/obj/structure/cable/yellow{ - d2 = 4; - icon_state = "0-4" - }, -/obj/machinery/power/terminal{ - dir = 8 - }, -/obj/effect/landmark/corpse/lar_maria/zhp_guard, -/turf/simulated/floor/plating, -/area/lar_maria/sec_wing) -"gJ" = ( -/obj/machinery/power/port_gen/pacman/mrs, -/obj/structure/cable/yellow{ - d2 = 8; - icon_state = "0-8" - }, -/turf/simulated/floor/plating, -/area/lar_maria/sec_wing) -"gK" = ( -/obj/machinery/portable_atmospherics/canister/empty/oxygen, -/turf/simulated/floor/plating, -/area/lar_maria/sec_wing) -"gL" = ( -/obj/machinery/suit_storage_unit/security, -/turf/simulated/floor/plating, -/area/lar_maria/sec_wing) -"gM" = ( -/obj/structure/closet/l3closet/security, -/turf/simulated/floor/plating, -/area/lar_maria/sec_wing) -"gN" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/turf/simulated/floor/tiled, -/area/lar_maria/vir_hallway) -"gO" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/access_button/airlock_interior{ - frequency = 1039; - master_tag = "ZHPvirology_access_airlock"; - pixel_y = -25 - }, -/turf/simulated/floor/tiled, -/area/lar_maria/vir_hallway) -"gP" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/door/blast/regular/open{ - dir = 4; - icon_state = "pdoor0"; - id_tag = "VirAccessBD" - }, -/obj/machinery/door/airlock/virology{ - frequency = 1039; - id_tag = "ZHPvirology_access_airlock_outer" - }, -/turf/simulated/floor/tiled, -/area/lar_maria/vir_access) -"gQ" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/turf/simulated/floor/tiled, -/area/lar_maria/vir_access) -"gR" = ( -/obj/effect/decal/cleanable/blood, -/obj/machinery/airlock_sensor{ - frequency = 1039; - id_tag = "ZHPvirology_access_airlock_sensor"; - master_tag = "ZHPvirology_access_airlock"; - pixel_x = 25 - }, -/turf/simulated/floor/tiled, -/area/lar_maria/vir_access) -"gS" = ( -/obj/structure/bed/padded, -/obj/random/trash, -/turf/simulated/floor/tiled, -/area/lar_maria/cells) -"gT" = ( -/obj/structure/bed/padded, -/obj/item/newspaper, -/turf/simulated/floor/tiled, -/area/lar_maria/cells) -"gU" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/plating, -/area/lar_maria/cells) -"gV" = ( -/obj/structure/closet, -/obj/item/clothing/under/color/orange, -/obj/item/clothing/under/color/orange, -/obj/item/clothing/shoes/orange, -/obj/item/clothing/shoes/orange, -/turf/simulated/floor/plating, -/area/lar_maria/cells) -"gW" = ( -/obj/random/trash, -/turf/simulated/floor/tiled, -/area/lar_maria/vir_access) -"gX" = ( -/obj/machinery/alarm{ - dir = 8; - pixel_x = 24 - }, -/turf/simulated/floor/tiled, -/area/lar_maria/vir_access) -"gY" = ( -/obj/machinery/door/airlock/virology{ - frequency = 1039; - id_tag = "ZHPvirology_access_airlock_outer" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled, -/area/lar_maria/vir_access) -"gZ" = ( -/obj/machinery/door/airlock/virology{ - frequency = 1039; - id_tag = "ZHPvirology_access_airlock_outer" - }, -/turf/simulated/floor/tiled, -/area/lar_maria/vir_access) -"ha" = ( -/obj/machinery/light/small{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/plating, -/area/lar_maria/cells) -"hb" = ( -/obj/structure/bed/chair{ - dir = 8 - }, -/obj/machinery/alarm{ - dir = 1; - pixel_y = -22 - }, -/mob/living/simple_animal/hostile/lar_maria/test_subject, -/turf/simulated/floor/plating, -/area/lar_maria/cells) -"hc" = ( -/obj/structure/table/steel_reinforced, -/turf/simulated/floor/plating, -/area/lar_maria/cells) -"hd" = ( -/obj/structure/stairs/south, -/turf/simulated/floor/tiled, -/area/lar_maria/vir_access) -"he" = ( -/obj/structure/closet, -/obj/machinery/atmospherics/unary/vent_pump/on, -/turf/simulated/floor/tiled, -/area/lar_maria/vir_access) -"hf" = ( -/obj/structure/closet, -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/turf/simulated/floor/tiled, -/area/lar_maria/vir_access) -"hg" = ( -/obj/structure/closet, -/turf/simulated/floor/tiled, -/area/lar_maria/vir_access) -"hh" = ( -/obj/structure/closet, -/obj/item/clothing/head/soft/lar_maria/zhp_cap, -/turf/simulated/floor/tiled, -/area/lar_maria/vir_access) -"hi" = ( -/obj/structure/table/standard, -/obj/item/towel, -/obj/random/soap, -/turf/simulated/floor/tiled, -/area/lar_maria/vir_access) -"hj" = ( -/turf/simulated/wall, -/area/lar_maria/vir_access) -"hk" = ( -/obj/structure/hygiene/shower, -/obj/effect/landmark/corpse/lar_maria/test_subject, -/obj/effect/decal/cleanable/blood, -/turf/simulated/floor/tiled/white, -/area/lar_maria/vir_access) -"hl" = ( -/obj/structure/hygiene/shower, -/turf/simulated/floor/tiled/white, -/area/lar_maria/vir_access) -"hm" = ( -/obj/structure/hygiene/shower, -/obj/effect/decal/cleanable/blood, -/turf/simulated/floor/tiled/white, -/area/lar_maria/vir_access) -"hn" = ( -/obj/structure/closet/l3closet/virology, -/obj/machinery/atmospherics/unary/vent_pump/on, -/turf/simulated/floor/tiled, -/area/lar_maria/vir_access) -"ho" = ( -/obj/structure/closet/l3closet/virology, -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/turf/simulated/floor/tiled, -/area/lar_maria/vir_access) -"hp" = ( -/obj/structure/closet/l3closet/virology, -/turf/simulated/floor/tiled, -/area/lar_maria/vir_access) -"hq" = ( -/obj/structure/sign/warning/biohazard{ - pixel_x = -32 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled, -/area/lar_maria/vir_access) -"hr" = ( -/obj/structure/sign/warning/biohazard{ - pixel_x = 32 - }, -/obj/machinery/access_button/airlock_exterior{ - frequency = 1039; - master_tag = "ZHPvirology_access_airlock"; - pixel_x = 25; - pixel_y = 15 - }, -/turf/simulated/floor/tiled, -/area/lar_maria/vir_access) -"hs" = ( -/obj/machinery/door/airlock/security, -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/door/blast/regular/open{ - dir = 4; - icon_state = "pdoor0"; - id_tag = "Cells_ld_BD" - }, -/obj/machinery/door/blast/regular/open{ - dir = 4; - icon_state = "pdoor0"; - id_tag = "Cells_dock_BD" - }, -/turf/simulated/floor/plating, -/area/lar_maria/cells) -"ht" = ( -/obj/structure/bed/chair, -/turf/simulated/floor/tiled, -/area/lar_maria/vir_access) -"hu" = ( -/obj/machinery/power/apc{ - dir = 4; - name = "east bump"; - pixel_x = 24 - }, -/obj/structure/cable{ - d2 = 2; - icon_state = "0-2" - }, -/turf/simulated/floor/tiled, -/area/lar_maria/vir_access) -"hv" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/tiled, -/area/lar_maria/vir_access) -"hw" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled, -/area/lar_maria/vir_access) -"hx" = ( -/obj/effect/decal/cleanable/blood, -/turf/simulated/floor/tiled/white, -/area/lar_maria/vir_access) -"hy" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/random/trash, -/turf/simulated/floor/tiled, -/area/lar_maria/vir_access) -"hz" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled, -/area/lar_maria/vir_access) -"hA" = ( -/obj/structure/closet/crate/trashcart, -/obj/item/material/ashtray/plastic, -/turf/simulated/floor/plating, -/area/lar_maria/cells) -"hB" = ( -/obj/effect/wallframe_spawn/reinforced, -/obj/machinery/door/firedoor, -/obj/machinery/door/blast/regular/open{ - dir = 4; - icon_state = "pdoor0"; - id_tag = "Cells_dock_BD" - }, -/turf/simulated/floor/tiled, -/area/lar_maria/sec_wing) -"hC" = ( -/obj/structure/table/steel_reinforced, -/turf/simulated/floor/tiled, -/area/lar_maria/sec_wing) -"hD" = ( -/obj/structure/table/rack, -/obj/item/gun/energy/taser, -/turf/simulated/floor/tiled, -/area/lar_maria/sec_wing) -"hE" = ( -/obj/structure/table/standard, -/obj/structure/sign/warning/smoking{ - pixel_x = -30 - }, -/obj/random/smokes, -/obj/item/storage/box/matches, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/lar_maria/vir_access) -"hF" = ( -/obj/structure/bed/chair{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/turf/simulated/floor/tiled, -/area/lar_maria/vir_access) -"hG" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled, -/area/lar_maria/vir_access) -"hH" = ( -/obj/machinery/door/airlock/virology, -/obj/machinery/door/firedoor, -/obj/machinery/door/blast/regular/open{ - dir = 4; - icon_state = "pdoor0"; - id_tag = "VirAccessBD" - }, -/turf/simulated/floor/tiled, -/area/lar_maria/vir_access) -"hI" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/turf/simulated/floor/tiled, -/area/lar_maria/vir_access) -"hJ" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/obj/machinery/alarm{ - dir = 1; - pixel_y = -22 - }, -/turf/simulated/floor/tiled, -/area/lar_maria/vir_access) -"hK" = ( -/obj/machinery/light, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/lar_maria/vir_access) -"hL" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/lar_maria/vir_access) -"hM" = ( -/obj/machinery/door/airlock/virology, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/lar_maria/vir_access) -"hN" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/random/trash, -/turf/simulated/floor/tiled/white, -/area/lar_maria/vir_access) -"hO" = ( -/obj/machinery/light/small, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/lar_maria/vir_access) -"hP" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/effect/landmark/corpse/lar_maria/zhp_guard/dark, -/obj/effect/decal/cleanable/blood, -/turf/simulated/floor/tiled/white, -/area/lar_maria/vir_access) -"hQ" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/lar_maria/vir_access) -"hR" = ( -/obj/machinery/light, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/lar_maria/vir_access) -"hS" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/alarm{ - dir = 1; - pixel_y = -22 - }, -/turf/simulated/floor/tiled, -/area/lar_maria/vir_access) -"hT" = ( -/obj/machinery/door/airlock/virology, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/door/blast/regular/open{ - dir = 4; - icon_state = "pdoor0"; - id_tag = "VirAccessBD" - }, -/turf/simulated/floor/tiled, -/area/lar_maria/vir_access) -"hU" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/lar_maria/vir_access) -"hV" = ( -/obj/structure/hygiene/shower{ - dir = 4 - }, -/obj/machinery/light/small{ - dir = 8 - }, -/obj/effect/landmark/corpse/lar_maria/test_subject, -/obj/effect/decal/cleanable/blood, -/turf/simulated/floor/plating, -/area/lar_maria/cells) -"hW" = ( -/obj/structure/table/steel_reinforced, -/obj/item/contraband/poster, -/turf/simulated/floor/plating, -/area/lar_maria/cells) -"hX" = ( -/obj/structure/table/rack, -/obj/machinery/light{ - dir = 4; - icon_state = "tube1" - }, -/turf/simulated/floor/tiled, -/area/lar_maria/sec_wing) -"hY" = ( -/obj/machinery/light{ - dir = 8 - }, -/obj/structure/table/standard, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 4 - }, -/obj/item/paper/lar_maria/note_7, -/turf/simulated/floor/tiled, -/area/lar_maria/vir_access) -"hZ" = ( -/obj/structure/bed/chair{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled, -/area/lar_maria/vir_access) -"ia" = ( -/obj/machinery/light{ - dir = 4; - icon_state = "tube1" - }, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled, -/area/lar_maria/vir_access) -"ib" = ( -/obj/item/paper/lar_maria/note_8, -/turf/simulated/floor/tiled, -/area/lar_maria/vir_access) -"ic" = ( -/obj/structure/hygiene/shower{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/lar_maria/cells) -"id" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/effect/decal/cleanable/blood, -/turf/simulated/floor/plating, -/area/lar_maria/cells) -"ie" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/obj/structure/cable{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/turf/simulated/floor/tiled, -/area/lar_maria/sec_wing) -"if" = ( -/obj/machinery/door/airlock/security, -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/door/blast/regular/open{ - dir = 4; - icon_state = "pdoor0"; - id_tag = "VirAccessBD" - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled, -/area/lar_maria/sec_wing) -"ig" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled, -/area/lar_maria/vir_access) -"ih" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled, -/area/lar_maria/vir_access) -"ii" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled, -/area/lar_maria/vir_access) -"ij" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/turf/simulated/floor/tiled, -/area/lar_maria/vir_access) -"ik" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 - }, -/turf/simulated/floor/tiled, -/area/lar_maria/vir_access) -"il" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, -/obj/machinery/alarm{ - pixel_y = 24 - }, -/turf/simulated/floor/tiled, -/area/lar_maria/vir_access) -"im" = ( -/obj/machinery/light{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/lar_maria/vir_access) -"in" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/lar_maria/vir_access) -"io" = ( -/obj/machinery/light/small{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/lar_maria/vir_access) -"ip" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/lar_maria/vir_access) -"iq" = ( -/obj/machinery/light{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/lar_maria/vir_access) -"ir" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/alarm{ - pixel_y = 24 - }, -/turf/simulated/floor/tiled, -/area/lar_maria/vir_access) -"is" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/random/trash, -/turf/simulated/floor/tiled, -/area/lar_maria/vir_access) -"it" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/turf/simulated/floor/tiled, -/area/lar_maria/vir_access) -"iu" = ( -/obj/machinery/door/airlock/security, -/obj/machinery/door/firedoor, -/turf/simulated/floor/tiled, -/area/lar_maria/sec_wing) -"iv" = ( -/obj/effect/wallframe_spawn/reinforced, -/obj/machinery/door/firedoor, -/obj/machinery/door/blast/regular/open{ - dir = 2; - icon_state = "pdoor0"; - id_tag = "VirAccessBD" - }, -/turf/simulated/floor/tiled, -/area/lar_maria/sec_wing) -"iw" = ( -/turf/simulated/floor/tiled/white, -/area/lar_maria/vir_access) -"ix" = ( -/obj/effect/decal/cleanable/blood, -/mob/living/simple_animal/hostile/lar_maria/test_subject, -/turf/simulated/floor/tiled/white, -/area/lar_maria/vir_access) -"iy" = ( -/obj/structure/hygiene/shower{ - dir = 4 - }, -/obj/machinery/light/small{ - dir = 8 - }, -/turf/simulated/floor/plating, -/area/lar_maria/cells) -"iz" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/random/trash, -/turf/simulated/floor/plating, -/area/lar_maria/cells) -"iA" = ( -/obj/structure/table/steel_reinforced, -/obj/item/material/ashtray/plastic, -/turf/simulated/floor/plating, -/area/lar_maria/cells) -"iB" = ( -/obj/structure/table/steel_reinforced, -/obj/machinery/embedded_controller/radio/airlock/airlock_controller{ - frequency = 1439; - id_tag = "ZHPCells_airlock"; - tag_airpump = "ZHPCells_pump"; - tag_exterior_door = "ZHPCells_outer"; - tag_interior_door = "ZHPCells_inner" - }, -/obj/machinery/button/blast_door{ - id_tag = "Cells_dock_BD"; - name = "Cells Dock Lockdown"; - pixel_y = 7 - }, -/turf/simulated/floor/tiled, -/area/lar_maria/sec_wing) -"iC" = ( -/obj/structure/table/steel_reinforced, -/obj/machinery/button/blast_door{ - id_tag = "VirAccessBD"; - name = "Virology Access Lockdown" - }, -/turf/simulated/floor/tiled, -/area/lar_maria/sec_wing) -"iD" = ( -/obj/machinery/light{ - dir = 4; - icon_state = "tube1" - }, -/obj/structure/table/steel_reinforced, -/obj/item/gun/energy/taser, -/turf/simulated/floor/tiled, -/area/lar_maria/sec_wing) -"iE" = ( -/obj/structure/closet, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 1; - level = 2 - }, -/turf/simulated/floor/tiled, -/area/lar_maria/vir_access) -"iF" = ( -/obj/structure/closet, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 1 - }, -/turf/simulated/floor/tiled, -/area/lar_maria/vir_access) -"iG" = ( -/obj/structure/hygiene/shower{ - dir = 1 - }, -/turf/simulated/floor/tiled/white, -/area/lar_maria/vir_access) -"iH" = ( -/obj/structure/hygiene/shower{ - dir = 1 - }, -/obj/effect/landmark/corpse/lar_maria/virologist, -/obj/effect/decal/cleanable/blood, -/turf/simulated/floor/tiled/white, -/area/lar_maria/vir_access) -"iI" = ( -/obj/structure/closet/l3closet/virology, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 1; - level = 2 - }, -/turf/simulated/floor/tiled, -/area/lar_maria/vir_access) -"iJ" = ( -/obj/structure/closet/l3closet/virology, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 1 - }, -/turf/simulated/floor/tiled, -/area/lar_maria/vir_access) -"iK" = ( -/obj/structure/bed/chair{ - dir = 8 - }, -/obj/item/gun/energy/taser, -/turf/simulated/floor/tiled, -/area/lar_maria/sec_wing) -"iL" = ( -/obj/machinery/light, -/turf/simulated/floor/tiled, -/area/lar_maria/sec_wing) -"iM" = ( -/obj/structure/bed/chair{ - dir = 1 - }, -/mob/living/simple_animal/hostile/lar_maria/guard, -/turf/simulated/floor/tiled, -/area/lar_maria/sec_wing) -"iN" = ( -/obj/machinery/door/airlock/external{ - frequency = 1439; - id_tag = "ZHPCells_airlock_inner" - }, -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/door/blast/regular/open{ - dir = 4; - icon_state = "pdoor0"; - id_tag = "Cells_dock_BD" - }, -/turf/simulated/floor/plating, -/area/lar_maria/cells) -"iO" = ( -/obj/machinery/atmospherics/unary/vent_pump/high_volume{ - dir = 1; - id_tag = "ZHPCells_airlock_pump" - }, -/turf/simulated/floor/plating, -/area/lar_maria/cells) -"iP" = ( -/obj/machinery/door/airlock/external{ - frequency = 1439; - id_tag = "ZHPCells_airlock_outer" - }, -/obj/machinery/door/firedoor, -/turf/simulated/floor/plating, -/area/lar_maria/cells) -"iQ" = ( -/obj/effect/shuttle_landmark/automatic, -/turf/space, -/area/space) -"jb" = ( -/obj/machinery/atmospherics/valve/shutoff/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/lar_maria/morgue) -"kb" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/valve/shutoff/supply{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/lar_maria/morgue) -"lb" = ( -/obj/structure/hygiene/sink{ - dir = 4; - pixel_x = 11 - }, -/obj/item/storage/mirror{ - pixel_x = 25 - }, -/turf/simulated/floor/tiled/white, -/area/lar_maria/sec_wing) -"ts" = ( -/obj/machinery/door/airlock/security, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/plating, -/area/lar_maria/sec_wing) -"FB" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/plating, -/area/lar_maria/sec_wing) - -(1,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(2,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(3,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(4,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(5,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(6,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(7,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(8,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(9,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(10,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(11,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(12,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(13,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(14,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(15,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(16,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(17,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(18,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(19,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(20,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(21,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(22,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(23,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(24,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(25,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(26,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(27,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(28,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(29,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(30,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(31,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(32,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(33,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(34,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(35,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(36,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(37,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(38,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(39,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(40,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(41,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(42,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(43,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(44,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(45,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(46,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(47,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(48,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(49,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(50,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(51,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(52,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(53,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(54,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(55,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(56,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(57,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(58,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(59,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(60,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(61,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(62,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(63,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(64,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(65,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(66,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(67,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(68,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(69,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(70,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(71,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(72,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(73,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(74,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(75,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(76,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(77,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(78,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(79,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(80,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(81,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(82,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(83,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(84,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(85,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ac -ac -aU -bw -bQ -ac -cs -cc -bw -bw -aU -ac -aU -bw -bQ -ac -cs -cc -bw -bw -aU -ac -ac -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(86,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ac -ac -aV -bx -bR -ac -ct -ac -bR -bw -aW -ac -aW -bw -bR -ac -ct -ac -gj -gA -aU -ac -ac -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(87,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ac -ac -aU -bw -bS -ac -ac -ac -cP -bw -aU -ac -aU -bw -fc -ac -ac -ac -gk -bw -gS -ac -ac -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(88,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ac -ac -aW -bw -bT -ac -ac -ac -cQ -bw -dP -ac -eq -by -fd -ac -ac -ac -cQ -bx -gT -ac -ac -ac -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(89,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ac -ac -aX -by -bU -ac -cu -ac -cR -bx -aU -ac -er -bw -bU -ac -fH -ac -cR -bw -eq -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(90,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ac -ac -aY -bz -bV -cc -cv -ac -cS -dx -bV -ac -aY -eH -bV -cc -fI -ac -cS -dx -bV -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(91,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ac -ac -aZ -bA -aZ -ac -ac -ac -aZ -bA -aZ -ac -aZ -bA -aZ -ac -ac -ac -aZ -bA -aZ -ac -ac -dz -hV -ic -ic -iy -ic -ac -ac -ac -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(92,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ao -ao -ba -bB -bW -bW -bW -cM -cT -dy -bW -eb -bW -dy -bW -bW -fJ -bW -bW -gB -gU -ha -hs -gU -gU -id -gU -iz -gU -iN -iO -iP -aa -aa -aa -aa -aa -aa -aa -aa -iQ -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(93,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ac -ac -ac -ac -ac -ac -ac -ac -cU -dz -dQ -dQ -es -es -es -es -cU -gf -bg -gC -bg -hb -ac -hA -hW -hc -hc -iA -hc -ac -ac -ac -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(94,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ac -ac -bb -bC -ac -bb -bC -ac -cV -dz -dQ -dQ -es -es -es -fu -fK -gg -gl -gg -gV -hc -ac -hB -hB -hB -cO -hB -hB -cO -cO -cO -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(95,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ac -ac -bc -bg -ac -bg -bg -ac -cW -cO -cO -cO -cO -cO -cO -cO -fL -cO -cO -cO -cO -cO -cO -hC -eK -hC -cO -iB -iK -cO -cO -cO -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(96,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ac -ac -bd -bD -ac -bd -bD -ac -cX -cO -dR -ec -et -eI -fe -ev -fM -gh -gm -gD -gm -gm -gm -gm -gm -ie -iu -et -iL -cO -cO -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(97,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ac -ac -be -bg -bh -cd -cw -cN -cY -cO -dS -dS -et -eJ -ff -ev -fN -cO -cO -cO -cO -cO -cO -hD -hX -fN -cO -eM -et -cO -cO -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(98,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ac -ac -bf -bD -ac -bf -bD -ac -cZ -cO -dT -ec -et -eK -eK -et -fO -cO -gn -gE -gF -hd -cO -cO -cO -if -cO -cO -iu -cO -cO -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(99,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ac -ac -bg -bg -ac -bg -cx -ac -cW -cO -dS -dS -et -et -et -et -fN -cO -go -gF -gF -gF -ht -hE -hY -ig -iv -hC -et -cO -cO -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(100,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ac -ac -ac -ac -ac -bh -bE -ac -bh -bg -ac -cU -cO -dR -ed -et -ef -fg -fv -fP -cO -gp -gF -gW -gF -gF -hF -hZ -ih -iv -hC -iM -cO -cO -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(101,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -cX -cO -dS -dS -et -eL -fh -fw -fQ -cO -gq -gF -gF -gF -gW -gF -gF -ii -iv -iC -ev -cO -cO -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(102,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ad -ad -be -bg -bh -cd -cw -cN -da -cO -dU -dS -et -eM -et -et -fN -cO -gr -gF -gF -gF -hu -hG -ia -ij -iv -iD -et -cO -cO -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(103,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ai -ap -ad -bf -bD -ac -ce -bD -ac -db -cO -lb -ee -et -eN -fi -fx -fN -cO -gn -gG -gX -hd -gz -hH -gz -hH -cO -cO -cO -cO -cO -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(104,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -aj -aq -ad -bg -bC -ac -bF -bg -ac -dc -cO -cO -cO -cO -cO -cO -cO -fR -cO -cO -cO -cO -gz -gz -gF -hj -gF -gz -gz -gz -cO -cO -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(105,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -jb -kb -ad -bh -bF -ac -bh -bC -ac -dd -bg -dW -ef -et -eO -fj -fy -fS -ts -FB -gH -cO -he -hv -hI -hj -ik -hv -iE -gz -gz -gz -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(106,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -al -as -ad -ad -ad -ad -ad -ad -cO -de -dA -cO -eg -eu -et -fk -cO -fN -cO -gs -gI -cO -hf -hw -hJ -hj -il -hw -iF -gz -gz -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(107,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -at -ad -bi -bi -bX -bi -cy -cO -df -dB -dW -eg -ev -et -fl -cO -fT -cO -gt -gJ -cO -hg -gW -hK -hj -im -gF -hh -gz -gz -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(108,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ae -ae -am -au -aM -bj -bG -bY -cf -cz -cO -dg -dC -dW -eg -ew -et -fm -cO -fN -cO -cO -cO -cO -hh -gF -hL -hj -hL -gF -hg -gz -gz -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(109,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -an -av -aN -bk -bk -bk -cg -cA -cO -dh -dD -cO -eg -ex -eP -fn -cO -fN -gi -dC -gK -cO -hi -gF -hL -hj -hL -gF -hi -gz -gz -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(110,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -aw -aN -aN -aN -aN -aN -cB -aN -di -dE -dX -dX -dX -dX -dX -cO -fU -cO -gs -gL -cO -hj -hj -hM -hj -hM -hj -hj -gz -gz -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(111,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -af -af -ax -aO -bl -bl -bl -ch -cC -bl -dj -dF -dY -eh -ey -eQ -ei -cO -fN -cO -dC -gL -cO -hk -hx -hN -hj -in -iw -iG -gz -gz -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(112,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ag -ag -ag -ag -ag -ag -ag -ag -ag -ag -dk -dG -dY -dY -ez -eA -dY -cO -fV -cO -cO -cO -cO -hl -hx -hO -hj -io -hx -iH -gz -gz -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(113,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ag -ag -ay -aP -bm -bH -bZ -ci -cD -ci -dl -dH -dY -ei -eA -eA -eh -cO -fW -gi -dC -gM -cO -hm -hx -hP -hj -in -ix -iG -gz -gz -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(114,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ag -ag -ay -aQ -bn -bI -ca -cj -cE -cj -dm -dI -dY -dY -ez -eR -dY -cO -fX -cO -gu -gM -cO -hj -hj -hM -hj -hM -hj -hj -gz -gz -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(115,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ag -ag -aS -aR -bo -bJ -cb -ag -ag -ag -dn -dG -dY -ej -eB -eS -fo -cO -fY -cO -dC -gM -cO -hn -hy -hQ -hj -ip -hv -iI -gz -gz -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(116,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ag -ag -aA -aS -bp -aS -aS -ck -aS -ag -do -dJ -dY -dY -dY -eT -dY -cO -fZ -cO -cO -cO -cO -ho -hw -hR -hj -iq -hw -iJ -gz -gz -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(117,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ag -ag -aB -aS -bq -bK -aS -cl -cF -ag -dp -dK -aO -ek -eD -eU -ek -fz -ga -ek -gv -gN -gz -hp -gF -hS -hj -ir -gW -hp -gz -gz -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(118,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ag -ag -aS -aS -br -bL -aR -cm -cG -ag -dq -dL -dL -el -dL -eV -eX -fA -gb -el -dL -gO -gz -hp -gF -hL -hj -is -gF -hp -gz -gz -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(119,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ag -ag -aS -aS -bq -bM -aS -cn -cH -ag -dr -dr -dr -dr -dr -dr -dr -fC -dr -dr -gz -gP -gz -hj -hj -hT -hj -hT -hj -hj -gz -gz -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(120,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ag -ag -aS -aS -bs -bN -aS -co -cI -ag -fG -fG -dZ -fG -eE -fG -dr -fp -dr -dr -gx -gQ -gY -hq -hz -hU -hz -it -gn -gz -gz -gz -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(121,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ag -ag -aS -aS -bq -bO -aS -cp -cJ -ag -dt -dM -du -fG -fG -eC -dr -fC -dr -dr -gy -gR -gZ -hr -gW -gG -ib -gX -gn -gz -gz -gz -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(122,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ag -ag -aG -aS -bt -bL -aS -cq -cK -ag -du -du -du -em -fG -eY -fq -fD -fG -dr -gz -gz -gz -gz -gz -gz -gz -gz -gz -gz -gz -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(123,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ag -ag -aH -aR -aS -aS -aS -aS -aS -ag -fG -fG -dZ -fG -fG -eZ -fr -fE -gc -dr -gz -gz -gz -gz -gz -gz -gz -gz -gz -gz -gz -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(124,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ah -ah -aI -aS -bP -bP -bP -aS -aS -ag -dv -dM -du -fG -fG -fG -fG -fG -gd -dr -dr -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(125,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ag -ag -aJ -aT -aJ -aJ -aJ -aT -aJ -ag -du -du -du -dN -eF -eY -fs -fG -fG -dr -dr -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(126,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ag -ag -aK -aS -bv -aJ -bv -aS -cL -ag -dw -dN -ea -dN -dN -fa -fG -fG -ge -dr -dr -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(127,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ag -ag -aL -aS -aL -aJ -aL -cr -aL -ag -dv -dO -du -en -eG -fb -ft -fG -fG -dr -dr -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(128,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ag -ag -ag -ag -ag -ag -ag -ag -ag -ag -dr -dr -dr -eo -dr -dr -dr -dr -dr -dr -dr -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(129,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ag -ag -ag -ag -ag -ag -ag -ag -ag -ag -dr -dr -dr -eo -dr -dr -dr -dr -dr -dr -dr -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(130,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ep -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(131,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(132,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(133,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(134,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(135,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(136,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(137,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(138,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(139,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(140,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(141,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(142,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(143,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(144,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(145,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(146,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(147,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(148,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(149,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(150,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(151,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(152,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(153,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(154,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(155,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(156,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(157,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(158,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(159,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(160,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(161,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(162,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(163,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(164,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(165,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(166,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(167,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(168,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(169,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(170,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(171,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(172,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(173,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(174,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(175,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(176,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(177,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(178,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(179,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(180,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(181,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(182,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(183,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(184,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(185,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(186,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(187,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(188,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(189,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(190,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(191,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(192,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(193,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(194,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(195,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(196,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(197,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(198,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(199,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(200,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} diff --git a/maps/away/lar_maria/lar_maria-2.dmm b/maps/away/lar_maria/lar_maria-2.dmm deleted file mode 100644 index 520ed9d25035c..0000000000000 --- a/maps/away/lar_maria/lar_maria-2.dmm +++ /dev/null @@ -1,43967 +0,0 @@ -//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE -"aa" = ( -/turf/space, -/area/space) -"ab" = ( -/obj/effect/shuttle_landmark/automatic, -/turf/space, -/area/space) -"ac" = ( -/obj/structure/lattice, -/obj/structure/grille, -/turf/space, -/area/space) -"ad" = ( -/turf/simulated/floor/reinforced, -/area/space) -"ae" = ( -/obj/effect/landmark/map_data{ - height = 2 - }, -/turf/simulated/floor/reinforced, -/area/space) -"af" = ( -/obj/effect/overmap/visitable/sector/lar_maria, -/turf/simulated/floor/reinforced, -/area/space) -"ag" = ( -/obj/effect/floor_decal/solarpanel, -/obj/structure/cable/yellow{ - d2 = 2; - icon_state = "0-2" - }, -/obj/machinery/power/solar{ - id = "ZHSolarsWest" - }, -/turf/simulated/floor/reinforced, -/area/space) -"ah" = ( -/turf/simulated/wall/r_wall, -/area/lar_maria/solar_control) -"ai" = ( -/obj/effect/floor_decal/solarpanel, -/obj/structure/cable/yellow{ - d2 = 2; - icon_state = "0-2" - }, -/obj/machinery/power/solar{ - id = "ZHSolarsEast" - }, -/turf/simulated/floor/reinforced, -/area/space) -"aj" = ( -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/structure/cable/yellow{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/turf/simulated/floor/reinforced, -/area/space) -"ak" = ( -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/structure/cable/yellow{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/turf/simulated/floor/reinforced, -/area/space) -"al" = ( -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/structure/cable/yellow{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/reinforced, -/area/space) -"am" = ( -/obj/structure/cable/yellow{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/turf/simulated/floor/reinforced, -/area/space) -"an" = ( -/obj/structure/cable/yellow{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/turf/simulated/floor/reinforced, -/area/space) -"ao" = ( -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/structure/cable/yellow{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/turf/simulated/floor/reinforced, -/area/space) -"ap" = ( -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/structure/cable/yellow{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/turf/simulated/floor/reinforced, -/area/space) -"aq" = ( -/obj/effect/floor_decal/solarpanel, -/obj/structure/cable/yellow, -/obj/machinery/power/solar{ - id = "ZHSolarsWest" - }, -/turf/simulated/floor/reinforced, -/area/space) -"ar" = ( -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/reinforced, -/area/space) -"as" = ( -/obj/machinery/power/solar_control/autostart{ - id = "ZHSolarsWest" - }, -/obj/structure/cable/yellow{ - d2 = 2; - icon_state = "0-2" - }, -/turf/simulated/floor/plating, -/area/lar_maria/solar_control) -"au" = ( -/obj/machinery/power/port_gen/pacman/mrs, -/turf/simulated/floor/plating, -/area/lar_maria/solar_control) -"aw" = ( -/obj/machinery/atmospherics/portables_connector, -/obj/machinery/portable_atmospherics/canister/air/airlock, -/turf/simulated/floor/plating, -/area/lar_maria/solar_control) -"ax" = ( -/obj/structure/closet/crate/radiation, -/obj/item/stack/material/tritium/fifty, -/obj/item/stack/cable_coil/orange, -/obj/item/wrench, -/obj/item/wirecutters, -/turf/simulated/floor/plating, -/area/lar_maria/solar_control) -"az" = ( -/obj/machinery/power/solar_control/autostart{ - id = "ZHSolarsEast" - }, -/obj/structure/cable/yellow{ - d2 = 2; - icon_state = "0-2" - }, -/turf/simulated/floor/plating, -/area/lar_maria/solar_control) -"aA" = ( -/obj/effect/floor_decal/solarpanel, -/obj/structure/cable/yellow, -/obj/machinery/power/solar{ - id = "ZHSolarsEast" - }, -/turf/simulated/floor/reinforced, -/area/space) -"aB" = ( -/obj/structure/cable/yellow{ - d2 = 4; - icon_state = "0-4" - }, -/obj/machinery/power/tracker{ - id = "ZHSolarsWest" - }, -/turf/simulated/floor/reinforced, -/area/space) -"aC" = ( -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/reinforced, -/area/space) -"aD" = ( -/obj/structure/cable/yellow{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/reinforced, -/area/space) -"aE" = ( -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/structure/cable/yellow{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/machinery/access_button/airlock_exterior{ - master_tag = "ZHP_west_solar"; - pixel_x = 25; - pixel_y = 25 - }, -/turf/simulated/floor/reinforced, -/area/space) -"aF" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/external{ - frequency = 1379; - id_tag = "ZHP_west_solar_exterior_door" - }, -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/plating, -/area/lar_maria/solar_control) -"aG" = ( -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/unary/vent_pump/high_volume/airlock{ - dir = 4; - id_tag = "ZHP_west_solar_pump" - }, -/obj/machinery/airlock_sensor{ - id_tag = "ZHP_west_solar_sensor_chamber"; - master_tag = "ZHPWestSolar"; - pixel_y = 25 - }, -/obj/machinery/embedded_controller/radio/airlock/airlock_controller{ - id_tag = "ZHP_west_solar"; - pixel_y = -25; - tag_airpump = "ZHP_west_solar_pump"; - tag_chamber_sensor = "ZHP_west_solar_sensor_chamber"; - tag_exterior_door = "ZHP_west_solar_exterior_door"; - tag_interior_door = "ZHP_west_solar_interior_door" - }, -/turf/simulated/floor/plating, -/area/lar_maria/solar_control) -"aH" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/external{ - frequency = 1379; - id_tag = "ZHP_west_solar_interior_door" - }, -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/cyan{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/lar_maria/solar_control) -"aI" = ( -/obj/structure/cable/yellow{ - d2 = 8; - icon_state = "0-8" - }, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/machinery/power/terminal, -/obj/effect/floor_decal/industrial/warning{ - dir = 8; - icon_state = "warning" - }, -/obj/machinery/access_button/airlock_interior{ - master_tag = "ZHP_west_solar"; - pixel_x = -25; - pixel_y = 25 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/cyan{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/lar_maria/solar_control) -"aJ" = ( -/turf/simulated/floor/plating, -/area/lar_maria/solar_control) -"aK" = ( -/obj/structure/cable/yellow{ - d2 = 4; - icon_state = "0-4" - }, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/machinery/power/terminal, -/obj/effect/floor_decal/industrial/warning{ - dir = 4 - }, -/obj/effect/decal/cleanable/blood, -/obj/machinery/access_button/airlock_interior{ - master_tag = "ZHP_east_solar"; - pixel_x = 25; - pixel_y = 25 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/cyan{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/lar_maria/solar_control) -"aL" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/external{ - frequency = 1379; - id_tag = "ZHP_east_solar_interior_door" - }, -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/decal/cleanable/blood, -/obj/machinery/atmospherics/pipe/simple/hidden/cyan{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/lar_maria/solar_control) -"aM" = ( -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/unary/vent_pump/high_volume/airlock{ - dir = 8; - id_tag = "ZHP_east_solar_pump" - }, -/obj/effect/decal/cleanable/blood, -/obj/machinery/embedded_controller/radio/airlock/airlock_controller{ - id_tag = "ZHP_east_solar"; - pixel_y = -25; - tag_airpump = "ZHP_east_solar_pump"; - tag_chamber_sensor = "ZHP_east_solar_sensor_chamber"; - tag_exterior_door = "ZHP_east_solar_exterior_door"; - tag_interior_door = "ZHP_east_solar_interior_door" - }, -/obj/machinery/airlock_sensor{ - id_tag = "ZHP_east_solar_sensor_chamber"; - master_tag = "ZHPWestSolar"; - pixel_y = 25 - }, -/turf/simulated/floor/plating, -/area/lar_maria/solar_control) -"aN" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/external{ - frequency = 1379; - id_tag = "ZHP_east_solar_exterior_door" - }, -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/decal/cleanable/blood, -/turf/simulated/floor/plating, -/area/lar_maria/solar_control) -"aO" = ( -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/cable/yellow{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/effect/decal/cleanable/blood, -/obj/machinery/access_button/airlock_exterior{ - master_tag = "ZHP_east_solar"; - pixel_x = -25; - pixel_y = 25 - }, -/turf/simulated/floor/reinforced, -/area/space) -"aP" = ( -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/decal/cleanable/blood, -/turf/simulated/floor/reinforced, -/area/space) -"aQ" = ( -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/landmark/corpse/lar_maria/test_subject, -/obj/effect/decal/cleanable/blood, -/turf/simulated/floor/reinforced, -/area/space) -"aR" = ( -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/cable/yellow{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/turf/simulated/floor/reinforced, -/area/space) -"aS" = ( -/obj/structure/cable/yellow{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/reinforced, -/area/space) -"aT" = ( -/obj/structure/cable/yellow{ - d2 = 8; - icon_state = "0-8" - }, -/obj/machinery/power/tracker{ - id = "ZHSolarsEast" - }, -/turf/simulated/floor/reinforced, -/area/space) -"aU" = ( -/obj/effect/floor_decal/solarpanel, -/obj/machinery/power/solar{ - id = "ZHSolarsWest" - }, -/obj/structure/cable/yellow{ - d2 = 4; - icon_state = "0-4" - }, -/turf/simulated/floor/reinforced, -/area/space) -"aV" = ( -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/turf/simulated/floor/reinforced, -/area/space) -"aW" = ( -/obj/effect/floor_decal/solarpanel, -/obj/machinery/power/solar{ - id = "ZHSolarsWest" - }, -/obj/structure/cable/yellow{ - d2 = 8; - icon_state = "0-8" - }, -/turf/simulated/floor/reinforced, -/area/space) -"aX" = ( -/obj/machinery/power/smes/buildable, -/obj/structure/cable{ - d2 = 4; - icon_state = "0-4" - }, -/turf/simulated/floor/plating, -/area/lar_maria/solar_control) -"aY" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/plating, -/area/lar_maria/solar_control) -"aZ" = ( -/obj/structure/cable{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/turf/simulated/floor/plating, -/area/lar_maria/solar_control) -"ba" = ( -/obj/random/trash, -/turf/simulated/floor/plating, -/area/lar_maria/solar_control) -"bb" = ( -/obj/structure/cable{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/effect/decal/cleanable/blood, -/turf/simulated/floor/plating, -/area/lar_maria/solar_control) -"bc" = ( -/obj/machinery/power/smes/buildable, -/obj/structure/cable{ - d2 = 8; - icon_state = "0-8" - }, -/turf/simulated/floor/plating, -/area/lar_maria/solar_control) -"bd" = ( -/obj/effect/floor_decal/solarpanel, -/obj/structure/cable/yellow{ - d2 = 4; - icon_state = "0-4" - }, -/obj/machinery/power/solar{ - id = "ZHSolarsEast" - }, -/turf/simulated/floor/reinforced, -/area/space) -"be" = ( -/obj/effect/floor_decal/solarpanel, -/obj/structure/cable/yellow{ - d2 = 8; - icon_state = "0-8" - }, -/obj/machinery/power/solar{ - id = "ZHSolarsEast" - }, -/turf/simulated/floor/reinforced, -/area/space) -"bf" = ( -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/turf/simulated/floor/reinforced, -/area/space) -"bg" = ( -/obj/machinery/portable_atmospherics/canister/oxygen, -/turf/simulated/floor/plating, -/area/lar_maria/solar_control) -"bh" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 - }, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/plating, -/area/lar_maria/solar_control) -"bi" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, -/turf/simulated/floor/plating, -/area/lar_maria/solar_control) -"bj" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/lar_maria/solar_control) -"bl" = ( -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/turf/simulated/floor/reinforced, -/area/space) -"bn" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/plating, -/area/lar_maria/solar_control) -"bo" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/plating, -/area/lar_maria/solar_control) -"bp" = ( -/obj/effect/landmark/corpse/lar_maria/zhp_guard, -/obj/effect/decal/cleanable/blood, -/turf/simulated/floor/plating, -/area/lar_maria/solar_control) -"br" = ( -/obj/machinery/suit_storage_unit/standard_unit, -/turf/simulated/floor/plating, -/area/lar_maria/solar_control) -"bs" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/plating, -/area/lar_maria/solar_control) -"bt" = ( -/obj/effect/decal/cleanable/blood, -/turf/simulated/floor/plating, -/area/lar_maria/solar_control) -"bu" = ( -/obj/structure/table/rack, -/obj/random/toolbox, -/obj/random/material, -/turf/simulated/floor/plating, -/area/lar_maria/solar_control) -"bv" = ( -/obj/machinery/atmospherics/unary/vent_pump/on, -/turf/simulated/floor/reinforced, -/area/space) -"bw" = ( -/turf/simulated/wall/r_wall, -/area/lar_maria/library) -"bx" = ( -/turf/simulated/wall/r_wall, -/area/lar_maria/atmos) -"by" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 4; - level = 2 - }, -/obj/machinery/alarm{ - dir = 1; - pixel_y = -25 - }, -/turf/simulated/floor/plating, -/area/lar_maria/solar_control) -"bz" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 4 - }, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/cable{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/turf/simulated/floor/plating, -/area/lar_maria/solar_control) -"bA" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 8 - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/decal/cleanable/blood, -/turf/simulated/floor/plating, -/area/lar_maria/solar_control) -"bB" = ( -/obj/machinery/power/apc{ - name = "south bump"; - pixel_y = -24 - }, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 8 - }, -/obj/structure/cable{ - d2 = 8; - icon_state = "0-8" - }, -/turf/simulated/floor/plating, -/area/lar_maria/solar_control) -"bC" = ( -/obj/structure/table/rack, -/obj/random/toolbox, -/obj/random/smokes, -/turf/simulated/floor/plating, -/area/lar_maria/solar_control) -"bD" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/cyan, -/turf/simulated/wall/r_wall, -/area/lar_maria/atmos) -"bE" = ( -/turf/simulated/wall/r_wall, -/area/lar_maria/dorms) -"bF" = ( -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/door/airlock/engineering, -/turf/simulated/floor/plating, -/area/lar_maria/atmos) -"bG" = ( -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/door/airlock/engineering, -/turf/simulated/floor/plating, -/area/lar_maria/atmos) -"bH" = ( -/obj/structure/bookcase/manuals/research_and_development, -/turf/simulated/floor/tiled, -/area/lar_maria/library) -"bI" = ( -/obj/structure/bookcase/manuals/research_and_development, -/obj/machinery/light{ - dir = 1 - }, -/turf/simulated/floor/tiled, -/area/lar_maria/library) -"bJ" = ( -/obj/machinery/atmospherics/unary/tank/nitrogen{ - dir = 4 - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/lar_maria/atmos) -"bK" = ( -/obj/machinery/atmospherics/pipe/manifold/visible/red{ - dir = 1 - }, -/turf/simulated/floor/plating, -/area/lar_maria/atmos) -"bM" = ( -/obj/machinery/atmospherics/portables_connector{ - dir = 8 - }, -/turf/simulated/floor/plating, -/area/lar_maria/atmos) -"bN" = ( -/obj/machinery/portable_atmospherics/powered/pump, -/obj/effect/floor_decal/industrial/warning{ - dir = 10; - icon_state = "warning" - }, -/turf/simulated/floor/plating, -/area/lar_maria/atmos) -"bO" = ( -/obj/machinery/portable_atmospherics/powered/scrubber, -/obj/effect/floor_decal/industrial/warning{ - dir = 6; - icon_state = "warning" - }, -/turf/simulated/floor/plating, -/area/lar_maria/atmos) -"bP" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/plating, -/area/lar_maria/atmos) -"bQ" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/plating, -/area/lar_maria/atmos) -"bR" = ( -/obj/structure/table/rack, -/obj/random/tool, -/turf/simulated/floor/plating, -/area/lar_maria/atmos) -"bS" = ( -/obj/structure/table/rack, -/obj/random/tank, -/obj/random/tool, -/turf/simulated/floor/plating, -/area/lar_maria/atmos) -"bT" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/cyan{ - dir = 6 - }, -/obj/structure/closet/emcloset, -/turf/simulated/floor/plating, -/area/lar_maria/atmos) -"bU" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/cyan{ - dir = 9 - }, -/obj/structure/closet/firecloset, -/turf/simulated/floor/plating, -/area/lar_maria/atmos) -"bV" = ( -/turf/simulated/floor/wood, -/area/lar_maria/dorms) -"bW" = ( -/obj/machinery/door/firedoor, -/turf/simulated/floor/wood, -/area/lar_maria/dorms) -"bX" = ( -/obj/machinery/alarm{ - dir = 1; - pixel_y = -25 - }, -/turf/simulated/floor/wood, -/area/lar_maria/dorms) -"bY" = ( -/obj/machinery/light{ - dir = 1 - }, -/turf/simulated/floor/wood, -/area/lar_maria/dorms) -"bZ" = ( -/obj/effect/decal/cleanable/blood, -/turf/simulated/floor/wood, -/area/lar_maria/dorms) -"ca" = ( -/obj/effect/landmark/corpse/lar_maria/virologist, -/obj/effect/decal/cleanable/blood, -/turf/simulated/floor/wood, -/area/lar_maria/dorms) -"cb" = ( -/obj/structure/closet/emcloset, -/turf/simulated/floor/wood, -/area/lar_maria/dorms) -"cc" = ( -/obj/machinery/light{ - dir = 8 - }, -/turf/simulated/floor/tiled, -/area/lar_maria/library) -"cd" = ( -/turf/simulated/floor/tiled, -/area/lar_maria/library) -"ce" = ( -/obj/random/trash, -/turf/simulated/floor/tiled, -/area/lar_maria/library) -"cf" = ( -/obj/effect/landmark/corpse/lar_maria/virologist, -/obj/effect/decal/cleanable/blood, -/turf/simulated/floor/tiled, -/area/lar_maria/library) -"cg" = ( -/obj/machinery/light{ - dir = 4; - icon_state = "tube1" - }, -/turf/simulated/floor/tiled, -/area/lar_maria/library) -"ch" = ( -/obj/machinery/atmospherics/pipe/manifold4w/visible/red, -/turf/simulated/floor/plating, -/area/lar_maria/atmos) -"ci" = ( -/obj/machinery/atmospherics/pipe/simple/visible/red{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/lar_maria/atmos) -"cj" = ( -/obj/machinery/atmospherics/pipe/simple/visible/red{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/plating, -/area/lar_maria/atmos) -"ck" = ( -/obj/machinery/atmospherics/pipe/simple/visible/red{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/plating, -/area/lar_maria/atmos) -"cl" = ( -/obj/machinery/atmospherics/pipe/simple/visible/red{ - dir = 10 - }, -/turf/simulated/floor/plating, -/area/lar_maria/atmos) -"cm" = ( -/obj/machinery/atmospherics/binary/pump{ - dir = 1 - }, -/turf/simulated/floor/plating, -/area/lar_maria/atmos) -"cn" = ( -/turf/simulated/floor/plating, -/area/lar_maria/atmos) -"co" = ( -/turf/simulated/wall, -/area/lar_maria/dorms) -"cp" = ( -/obj/machinery/door/airlock, -/turf/simulated/floor/wood, -/area/lar_maria/dorms) -"cq" = ( -/obj/machinery/door/airlock, -/obj/effect/decal/cleanable/blood, -/turf/simulated/floor/wood, -/area/lar_maria/dorms) -"cr" = ( -/obj/structure/bookcase, -/obj/item/book/manual/engineering_guide, -/turf/simulated/floor/tiled, -/area/lar_maria/library) -"cs" = ( -/obj/structure/bookcase, -/obj/item/book/manual/stasis, -/turf/simulated/floor/tiled, -/area/lar_maria/library) -"ct" = ( -/obj/structure/bookcase, -/turf/simulated/floor/tiled, -/area/lar_maria/library) -"cu" = ( -/obj/structure/bookcase, -/obj/item/book/manual/medical_diagnostics_manual, -/turf/simulated/floor/tiled, -/area/lar_maria/library) -"cv" = ( -/obj/structure/bookcase, -/obj/item/book/manual/detective, -/turf/simulated/floor/tiled, -/area/lar_maria/library) -"cw" = ( -/obj/structure/bookcase, -/obj/item/book/manual/medical_cloning, -/turf/simulated/floor/tiled, -/area/lar_maria/library) -"cx" = ( -/obj/structure/bookcase, -/obj/item/book/manual/hydroponics_pod_people, -/turf/simulated/floor/tiled, -/area/lar_maria/library) -"cy" = ( -/obj/structure/bookcase, -/obj/item/book/manual/anomaly_spectroscopy, -/obj/item/book/manual/anomaly_testing, -/turf/simulated/floor/tiled, -/area/lar_maria/library) -"cz" = ( -/obj/machinery/atmospherics/pipe/manifold/visible/red{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/lar_maria/atmos) -"cA" = ( -/obj/random/trash, -/turf/simulated/floor/plating, -/area/lar_maria/atmos) -"cB" = ( -/obj/machinery/atmospherics/pipe/simple/visible/red, -/turf/simulated/floor/plating, -/area/lar_maria/atmos) -"cC" = ( -/obj/machinery/atmospherics/valve/open, -/turf/simulated/floor/plating, -/area/lar_maria/atmos) -"cD" = ( -/obj/structure/table/woodentable, -/turf/simulated/floor/wood, -/area/lar_maria/dorms) -"cE" = ( -/obj/structure/table/woodentable, -/obj/random/smokes, -/turf/simulated/floor/wood, -/area/lar_maria/dorms) -"cF" = ( -/obj/structure/table/woodentable, -/obj/random/toy, -/turf/simulated/floor/wood, -/area/lar_maria/dorms) -"cG" = ( -/obj/structure/table/woodentable, -/obj/item/storage/box/glowsticks, -/turf/simulated/floor/wood, -/area/lar_maria/dorms) -"cH" = ( -/obj/structure/table/woodentable, -/obj/random/smokes, -/obj/random/drinkbottle, -/turf/simulated/floor/wood, -/area/lar_maria/dorms) -"cI" = ( -/obj/machinery/computer/modular{ - dir = 8 - }, -/turf/simulated/floor/wood, -/area/lar_maria/dorms) -"cJ" = ( -/obj/structure/window/basic{ - dir = 1 - }, -/obj/structure/table/standard, -/obj/item/paper, -/turf/simulated/floor/tiled, -/area/lar_maria/library) -"cK" = ( -/obj/structure/window/basic{ - dir = 4 - }, -/obj/structure/window/basic{ - dir = 1 - }, -/obj/structure/bed/chair/office/light{ - dir = 8 - }, -/turf/simulated/floor/tiled, -/area/lar_maria/library) -"cL" = ( -/obj/structure/window/basic{ - dir = 1 - }, -/obj/structure/table/standard, -/obj/item/paper_bin, -/obj/item/pen/red, -/turf/simulated/floor/tiled, -/area/lar_maria/library) -"cM" = ( -/obj/structure/window/basic{ - dir = 1 - }, -/obj/structure/window/basic{ - dir = 4 - }, -/obj/structure/bed/chair/office/light{ - dir = 8 - }, -/turf/simulated/floor/tiled, -/area/lar_maria/library) -"cN" = ( -/obj/structure/window/basic{ - dir = 1 - }, -/obj/structure/table/standard, -/obj/item/clothing/head/soft/lar_maria/zhp_cap, -/turf/simulated/floor/tiled, -/area/lar_maria/library) -"cO" = ( -/obj/structure/window/basic{ - dir = 1 - }, -/obj/structure/window/basic{ - dir = 8 - }, -/obj/structure/table/standard, -/obj/item/paper/lar_maria/note_2, -/turf/simulated/floor/tiled, -/area/lar_maria/library) -"cP" = ( -/obj/structure/window/basic{ - dir = 1 - }, -/obj/machinery/computer/modular{ - dir = 8 - }, -/turf/simulated/floor/tiled, -/area/lar_maria/library) -"cQ" = ( -/obj/machinery/atmospherics/pipe/manifold/visible/red, -/turf/simulated/floor/plating, -/area/lar_maria/atmos) -"cR" = ( -/obj/machinery/atmospherics/binary/pump{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/lar_maria/atmos) -"cS" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 4; - level = 2 - }, -/turf/simulated/floor/plating, -/area/lar_maria/atmos) -"cT" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 4 - }, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/plating, -/area/lar_maria/atmos) -"cU" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 8 - }, -/turf/simulated/floor/plating, -/area/lar_maria/atmos) -"cV" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 8 - }, -/turf/simulated/floor/plating, -/area/lar_maria/atmos) -"cW" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/cyan{ - dir = 8 - }, -/turf/simulated/floor/plating, -/area/lar_maria/atmos) -"cX" = ( -/obj/machinery/atmospherics/portables_connector{ - dir = 8 - }, -/obj/machinery/portable_atmospherics/canister/empty, -/turf/simulated/floor/plating, -/area/lar_maria/atmos) -"cY" = ( -/obj/structure/bed/chair/comfy/purple{ - dir = 1 - }, -/turf/simulated/floor/wood, -/area/lar_maria/dorms) -"cZ" = ( -/obj/effect/landmark/corpse/lar_maria/test_subject, -/obj/effect/decal/cleanable/blood, -/turf/simulated/floor/wood, -/area/lar_maria/dorms) -"da" = ( -/obj/structure/bookcase/manuals/medical, -/turf/simulated/floor/wood, -/area/lar_maria/dorms) -"db" = ( -/obj/structure/bed/chair/comfy/black{ - dir = 1 - }, -/turf/simulated/floor/wood, -/area/lar_maria/dorms) -"dc" = ( -/mob/living/simple_animal/hostile/lar_maria/guard/ranged, -/turf/simulated/floor/wood, -/area/lar_maria/dorms) -"dd" = ( -/obj/structure/bookcase/manuals/research_and_development, -/turf/simulated/floor/wood, -/area/lar_maria/dorms) -"de" = ( -/obj/structure/bed/chair/comfy/brown{ - dir = 1 - }, -/turf/simulated/floor/wood, -/area/lar_maria/dorms) -"df" = ( -/obj/structure/closet, -/obj/random/gloves, -/obj/random/smokes, -/obj/random/snack, -/obj/random/snack, -/turf/simulated/floor/wood, -/area/lar_maria/dorms) -"dg" = ( -/obj/structure/bookcase/manuals/engineering, -/turf/simulated/floor/wood, -/area/lar_maria/dorms) -"dh" = ( -/obj/structure/window/basic, -/obj/machinery/computer/modular{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/lar_maria/library) -"di" = ( -/obj/structure/window/basic{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/lar_maria/library) -"dj" = ( -/obj/structure/bed/chair/office/light{ - dir = 4; - icon_state = "officechair_white_preview" - }, -/turf/simulated/floor/tiled, -/area/lar_maria/library) -"dk" = ( -/obj/machinery/light{ - dir = 4; - icon_state = "tube1" - }, -/obj/machinery/computer/modular{ - dir = 8 - }, -/turf/simulated/floor/tiled, -/area/lar_maria/library) -"dl" = ( -/obj/machinery/atmospherics/unary/tank/oxygen{ - dir = 4 - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/lar_maria/atmos) -"dm" = ( -/obj/machinery/atmospherics/pipe/manifold/visible/blue{ - dir = 1 - }, -/turf/simulated/floor/plating, -/area/lar_maria/atmos) -"dn" = ( -/obj/machinery/atmospherics/omni/mixer{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/lar_maria/atmos) -"do" = ( -/obj/machinery/atmospherics/pipe/simple/visible/universal{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/lar_maria/atmos) -"dp" = ( -/obj/machinery/atmospherics/omni/filter{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/lar_maria/atmos) -"dr" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/cyan, -/turf/simulated/floor/plating, -/area/lar_maria/atmos) -"ds" = ( -/mob/living/simple_animal/hostile/lar_maria/virologist, -/turf/simulated/floor/wood, -/area/lar_maria/dorms) -"dt" = ( -/obj/structure/bed/padded, -/turf/simulated/floor/wood, -/area/lar_maria/dorms) -"du" = ( -/obj/machinery/light, -/turf/simulated/floor/wood, -/area/lar_maria/dorms) -"dv" = ( -/obj/structure/closet, -/obj/random/masks, -/obj/random/accessory, -/obj/random/smokes, -/turf/simulated/floor/wood, -/area/lar_maria/dorms) -"dw" = ( -/obj/random/closet, -/turf/simulated/floor/wood, -/area/lar_maria/dorms) -"dx" = ( -/obj/structure/bed/padded, -/obj/random/plushie, -/turf/simulated/floor/wood, -/area/lar_maria/dorms) -"dy" = ( -/obj/structure/window/basic, -/obj/structure/window/basic{ - dir = 8 - }, -/obj/structure/table/standard, -/obj/item/folder/blue, -/turf/simulated/floor/tiled, -/area/lar_maria/library) -"dz" = ( -/obj/structure/window/basic, -/obj/structure/table/standard, -/obj/item/paper_bin, -/obj/item/pen/blue, -/obj/item/paper, -/turf/simulated/floor/tiled, -/area/lar_maria/library) -"dA" = ( -/obj/machinery/atmospherics/pipe/manifold4w/visible/blue, -/turf/simulated/floor/plating, -/area/lar_maria/atmos) -"dB" = ( -/obj/machinery/atmospherics/pipe/simple/visible/blue{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/lar_maria/atmos) -"dC" = ( -/obj/machinery/atmospherics/pipe/simple/visible/blue{ - dir = 10 - }, -/turf/simulated/floor/plating, -/area/lar_maria/atmos) -"dD" = ( -/obj/machinery/atmospherics/binary/oxyregenerator, -/turf/simulated/floor/plating, -/area/lar_maria/atmos) -"dE" = ( -/obj/machinery/atmospherics/pipe/simple/visible/blue, -/turf/simulated/floor/plating, -/area/lar_maria/atmos) -"dF" = ( -/obj/machinery/portable_atmospherics/canister/oxygen, -/obj/effect/floor_decal/industrial/warning{ - dir = 9 - }, -/turf/simulated/floor/plating, -/area/lar_maria/atmos) -"dG" = ( -/obj/machinery/portable_atmospherics/canister/nitrogen, -/obj/effect/floor_decal/industrial/warning{ - dir = 1 - }, -/turf/simulated/floor/plating, -/area/lar_maria/atmos) -"dH" = ( -/obj/machinery/portable_atmospherics/canister/hydrogen, -/obj/effect/floor_decal/industrial/warning{ - dir = 1 - }, -/turf/simulated/floor/plating, -/area/lar_maria/atmos) -"dI" = ( -/obj/machinery/light{ - dir = 8 - }, -/turf/simulated/floor/wood, -/area/lar_maria/dorms) -"dJ" = ( -/obj/structure/window/basic{ - dir = 1 - }, -/obj/machinery/computer/modular{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/lar_maria/library) -"dK" = ( -/obj/effect/landmark/corpse/lar_maria/test_subject, -/obj/effect/decal/cleanable/blood, -/turf/simulated/floor/tiled, -/area/lar_maria/library) -"dL" = ( -/obj/machinery/photocopier, -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/turf/simulated/floor/tiled, -/area/lar_maria/library) -"dM" = ( -/obj/structure/table/standard, -/obj/machinery/photocopier/faxmachine, -/obj/machinery/atmospherics/unary/vent_pump/on, -/obj/machinery/alarm{ - dir = 8; - pixel_x = 25; - req_access = newlist() - }, -/turf/simulated/floor/tiled, -/area/lar_maria/library) -"dN" = ( -/obj/machinery/atmospherics/pipe/manifold/visible/blue, -/turf/simulated/floor/plating, -/area/lar_maria/atmos) -"dO" = ( -/obj/machinery/atmospherics/pipe/simple/visible/blue{ - dir = 5 - }, -/obj/structure/closet/emcloset, -/turf/simulated/floor/plating, -/area/lar_maria/atmos) -"dP" = ( -/obj/machinery/atmospherics/pipe/simple/visible/blue{ - dir = 4 - }, -/obj/machinery/alarm{ - dir = 1; - pixel_y = -25 - }, -/turf/simulated/floor/plating, -/area/lar_maria/atmos) -"dQ" = ( -/obj/machinery/atmospherics/pipe/simple/visible/blue{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/cable{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/turf/simulated/floor/plating, -/area/lar_maria/atmos) -"dR" = ( -/obj/machinery/atmospherics/pipe/simple/visible/blue{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/plating, -/area/lar_maria/atmos) -"dS" = ( -/obj/machinery/power/apc{ - name = "south bump"; - pixel_y = -24 - }, -/obj/machinery/atmospherics/pipe/manifold/visible/blue, -/obj/structure/cable{ - d2 = 8; - icon_state = "0-8" - }, -/turf/simulated/floor/plating, -/area/lar_maria/atmos) -"dT" = ( -/obj/machinery/atmospherics/pipe/simple/visible/blue{ - dir = 9 - }, -/turf/simulated/floor/plating, -/area/lar_maria/atmos) -"dV" = ( -/obj/machinery/portable_atmospherics/canister/nitrogen, -/turf/simulated/floor/plating, -/area/lar_maria/atmos) -"dW" = ( -/obj/machinery/portable_atmospherics/canister/carbon_dioxide, -/turf/simulated/floor/plating, -/area/lar_maria/atmos) -"dX" = ( -/obj/structure/bed/padded, -/obj/random/plushie/large, -/turf/simulated/floor/wood, -/area/lar_maria/dorms) -"dY" = ( -/obj/structure/closet, -/obj/random/loot, -/turf/simulated/floor/wood, -/area/lar_maria/dorms) -"dZ" = ( -/obj/structure/closet, -/obj/random/shoes, -/obj/random/snack, -/turf/simulated/floor/wood, -/area/lar_maria/dorms) -"ea" = ( -/obj/structure/table/standard, -/obj/item/paper_bin, -/turf/simulated/floor/tiled, -/area/lar_maria/library) -"eb" = ( -/obj/structure/window/basic{ - dir = 4 - }, -/obj/structure/bed/chair/office/light{ - dir = 8 - }, -/turf/simulated/floor/tiled, -/area/lar_maria/library) -"ec" = ( -/obj/structure/table/standard, -/obj/item/pen/blue, -/turf/simulated/floor/tiled, -/area/lar_maria/library) -"ed" = ( -/obj/structure/table/standard, -/obj/item/pen/crayon/orange, -/obj/item/paper, -/turf/simulated/floor/tiled, -/area/lar_maria/library) -"ee" = ( -/obj/structure/window/basic{ - dir = 4 - }, -/obj/structure/bed/chair/office/light{ - dir = 8 - }, -/obj/machinery/light, -/turf/simulated/floor/tiled, -/area/lar_maria/library) -"ef" = ( -/obj/structure/closet/crate/paper_refill, -/turf/simulated/floor/tiled, -/area/lar_maria/library) -"eg" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/random/trash, -/turf/simulated/floor/tiled, -/area/lar_maria/library) -"eh" = ( -/obj/machinery/power/apc{ - dir = 4; - name = "east bump"; - pixel_x = 24 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable{ - d2 = 2; - icon_state = "0-2" - }, -/turf/simulated/floor/tiled, -/area/lar_maria/library) -"ei" = ( -/obj/structure/bed/chair/comfy/beige, -/turf/simulated/floor/wood, -/area/lar_maria/dorms) -"ej" = ( -/obj/machinery/botany, -/turf/simulated/floor/wood, -/area/lar_maria/dorms) -"ek" = ( -/obj/structure/bed/chair/comfy/brown, -/turf/simulated/floor/wood, -/area/lar_maria/dorms) -"el" = ( -/obj/effect/landmark/corpse/lar_maria/virologist_female, -/obj/effect/decal/cleanable/blood, -/turf/simulated/floor/wood, -/area/lar_maria/dorms) -"em" = ( -/obj/machinery/suit_storage_unit/standard_unit, -/turf/simulated/floor/wood, -/area/lar_maria/dorms) -"en" = ( -/obj/structure/closet, -/obj/random/loot, -/obj/random/accessory, -/obj/item/clothing/head/soft/lar_maria/zhp_cap, -/turf/simulated/floor/wood, -/area/lar_maria/dorms) -"eo" = ( -/obj/structure/bed/chair/comfy/green, -/turf/simulated/floor/wood, -/area/lar_maria/dorms) -"ep" = ( -/obj/structure/closet, -/obj/random/accessory, -/turf/simulated/floor/wood, -/area/lar_maria/dorms) -"eq" = ( -/turf/simulated/wall/r_wall, -/area/lar_maria/head_m) -"er" = ( -/turf/simulated/wall, -/area/lar_maria/head_m) -"es" = ( -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/door/airlock/glass, -/turf/simulated/floor/tiled, -/area/lar_maria/library) -"et" = ( -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/door/airlock/glass, -/turf/simulated/floor/tiled, -/area/lar_maria/library) -"eu" = ( -/turf/simulated/wall, -/area/lar_maria/office) -"ev" = ( -/mob/living/simple_animal/hostile/lar_maria/virologist, -/turf/simulated/floor/tiled/white, -/area/lar_maria/office) -"ew" = ( -/obj/machinery/optable, -/turf/simulated/floor/tiled/white, -/area/lar_maria/office) -"ex" = ( -/turf/simulated/floor/tiled, -/area/lar_maria/office) -"ey" = ( -/obj/structure/bed/padded, -/turf/simulated/floor/tiled, -/area/lar_maria/office) -"ez" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 8 - }, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled, -/area/lar_maria/office) -"eA" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 8 - }, -/turf/simulated/floor/tiled, -/area/lar_maria/office) -"eB" = ( -/obj/structure/closet/emcloset, -/turf/simulated/floor/tiled, -/area/lar_maria/office) -"eC" = ( -/obj/structure/table/woodentable, -/obj/item/paper_bin, -/obj/item/pen/blue, -/turf/simulated/floor/tiled, -/area/lar_maria/office) -"eD" = ( -/obj/structure/bed/chair/office/light, -/obj/effect/landmark/corpse/lar_maria/virologist_female, -/obj/effect/decal/cleanable/blood, -/turf/simulated/floor/tiled, -/area/lar_maria/office) -"eE" = ( -/obj/structure/filingcabinet/chestdrawer, -/turf/simulated/floor/tiled, -/area/lar_maria/office) -"eF" = ( -/obj/structure/table/woodentable, -/obj/item/storage/box/handcuffs, -/turf/simulated/floor/wood, -/area/lar_maria/dorms) -"eG" = ( -/obj/structure/table/woodentable, -/obj/random/smokes, -/obj/random/snack, -/turf/simulated/floor/wood, -/area/lar_maria/dorms) -"eH" = ( -/obj/structure/table/woodentable, -/obj/item/storage/box/beakers, -/turf/simulated/floor/wood, -/area/lar_maria/dorms) -"eI" = ( -/obj/structure/hygiene/toilet, -/obj/machinery/light/small{ - dir = 1 - }, -/obj/random/trash, -/mob/living/simple_animal/hostile/lar_maria/virologist, -/turf/simulated/floor/tiled/white, -/area/lar_maria/head_m) -"eJ" = ( -/obj/structure/hygiene/toilet, -/obj/machinery/light/small{ - dir = 1 - }, -/obj/random/trash, -/turf/simulated/floor/tiled/white, -/area/lar_maria/head_m) -"eK" = ( -/obj/structure/hygiene/urinal{ - pixel_x = -30 - }, -/turf/simulated/floor/tiled/white, -/area/lar_maria/head_m) -"eL" = ( -/obj/machinery/light{ - dir = 1 - }, -/obj/random/trash, -/obj/effect/landmark/corpse/lar_maria/test_subject, -/obj/effect/decal/cleanable/blood, -/turf/simulated/floor/tiled/white, -/area/lar_maria/head_m) -"eN" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled, -/area/lar_maria/hallway) -"eO" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled, -/area/lar_maria/hallway) -"eP" = ( -/turf/simulated/floor/tiled/white, -/area/lar_maria/office) -"eQ" = ( -/obj/machinery/light{ - dir = 4; - icon_state = "tube1" - }, -/obj/structure/table/standard, -/obj/item/storage/firstaid/surgery, -/turf/simulated/floor/tiled/white, -/area/lar_maria/office) -"eR" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled, -/area/lar_maria/office) -"eS" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/effect/landmark/corpse/lar_maria/test_subject, -/obj/effect/decal/cleanable/blood, -/turf/simulated/floor/tiled, -/area/lar_maria/office) -"eT" = ( -/obj/machinery/light{ - dir = 8 - }, -/turf/simulated/floor/tiled, -/area/lar_maria/office) -"eU" = ( -/obj/structure/table/woodentable, -/turf/simulated/floor/tiled, -/area/lar_maria/office) -"eV" = ( -/obj/effect/decal/cleanable/blood, -/turf/simulated/floor/tiled, -/area/lar_maria/office) -"eW" = ( -/obj/machinery/computer/modular, -/turf/simulated/floor/tiled, -/area/lar_maria/office) -"eX" = ( -/obj/machinery/door/airlock, -/turf/simulated/floor/tiled/white, -/area/lar_maria/head_m) -"eY" = ( -/obj/structure/hygiene/urinal{ - pixel_x = -30 - }, -/obj/random/trash, -/turf/simulated/floor/tiled/white, -/area/lar_maria/head_m) -"eZ" = ( -/turf/simulated/floor/tiled/white, -/area/lar_maria/head_m) -"fb" = ( -/obj/machinery/door/airlock/medical, -/turf/simulated/floor/tiled/white, -/area/lar_maria/office) -"fc" = ( -/obj/machinery/door/airlock/medical, -/turf/simulated/floor/tiled, -/area/lar_maria/office) -"fd" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/effect/decal/cleanable/blood, -/turf/simulated/floor/tiled, -/area/lar_maria/office) -"fe" = ( -/obj/machinery/door/window/southleft, -/turf/simulated/floor/tiled, -/area/lar_maria/office) -"ff" = ( -/obj/structure/window/basic, -/obj/random/trash, -/turf/simulated/floor/tiled, -/area/lar_maria/office) -"fg" = ( -/obj/structure/window/basic, -/turf/simulated/floor/tiled, -/area/lar_maria/office) -"fh" = ( -/obj/machinery/door/firedoor, -/obj/effect/decal/cleanable/blood, -/turf/simulated/floor/wood, -/area/lar_maria/dorms) -"fi" = ( -/obj/machinery/alarm{ - dir = 1; - pixel_y = -25 - }, -/obj/effect/decal/cleanable/blood, -/turf/simulated/floor/wood, -/area/lar_maria/dorms) -"fj" = ( -/obj/machinery/light/small{ - dir = 1 - }, -/turf/simulated/floor/tiled/white, -/area/lar_maria/head_m) -"fk" = ( -/obj/random/trash, -/turf/simulated/floor/tiled/white, -/area/lar_maria/head_m) -"fl" = ( -/obj/machinery/power/apc{ - dir = 4; - name = "east bump"; - pixel_x = 24 - }, -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/obj/structure/cable{ - d2 = 2; - icon_state = "0-2" - }, -/turf/simulated/floor/tiled/white, -/area/lar_maria/head_m) -"fm" = ( -/obj/structure/closet, -/obj/item/clothing/head/surgery, -/obj/item/clothing/under/rank/medical/scrubs, -/obj/item/clothing/under/rank/medical/scrubs, -/obj/item/clothing/suit/storage/toggle/labcoat, -/obj/item/clothing/suit/storage/toggle/labcoat, -/obj/random/gloves, -/turf/simulated/floor/tiled, -/area/lar_maria/office) -"fn" = ( -/obj/machinery/light{ - dir = 4; - icon_state = "tube1" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/effect/decal/cleanable/blood, -/turf/simulated/floor/tiled, -/area/lar_maria/office) -"fo" = ( -/obj/structure/bed/chair/office/light, -/turf/simulated/floor/tiled, -/area/lar_maria/office) -"fp" = ( -/obj/structure/table/standard, -/obj/item/folder/blue, -/turf/simulated/floor/tiled, -/area/lar_maria/office) -"fq" = ( -/obj/structure/table/standard, -/turf/simulated/floor/tiled/white, -/area/lar_maria/head_m) -"fr" = ( -/obj/structure/table/standard, -/obj/item/towel, -/obj/random/soap, -/turf/simulated/floor/tiled/white, -/area/lar_maria/head_m) -"fs" = ( -/obj/effect/decal/cleanable/blood, -/turf/simulated/floor/tiled/white, -/area/lar_maria/head_m) -"ft" = ( -/obj/machinery/washing_machine, -/turf/simulated/floor/tiled/white, -/area/lar_maria/head_m) -"fu" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/lar_maria/head_m) -"fv" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/obj/structure/cable{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/turf/simulated/floor/tiled/white, -/area/lar_maria/head_m) -"fw" = ( -/obj/machinery/door/airlock, -/obj/machinery/door/firedoor, -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/white, -/area/lar_maria/head_m) -"fx" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled, -/area/lar_maria/hallway) -"fy" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 4 - }, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/cable{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/turf/simulated/floor/tiled, -/area/lar_maria/hallway) -"fz" = ( -/obj/machinery/light{ - dir = 8 - }, -/obj/structure/bed/chair{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/lar_maria/office) -"fA" = ( -/obj/effect/landmark/corpse/lar_maria/test_subject, -/obj/effect/decal/cleanable/blood, -/turf/simulated/floor/tiled, -/area/lar_maria/office) -"fB" = ( -/obj/structure/bed/chair/office/light, -/obj/effect/decal/cleanable/blood, -/turf/simulated/floor/tiled, -/area/lar_maria/office) -"fC" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled, -/area/lar_maria/office) -"fD" = ( -/obj/structure/table/standard, -/obj/item/pen/blue, -/turf/simulated/floor/tiled, -/area/lar_maria/office) -"fE" = ( -/obj/structure/table/standard, -/turf/simulated/floor/tiled, -/area/lar_maria/office) -"fF" = ( -/obj/structure/table/woodentable, -/obj/item/staff/gentcane, -/turf/simulated/floor/wood, -/area/lar_maria/dorms) -"fG" = ( -/obj/structure/table/woodentable, -/obj/item/clothing/head/soft/lar_maria/zhp_cap, -/turf/simulated/floor/wood, -/area/lar_maria/dorms) -"fH" = ( -/obj/structure/table/woodentable, -/obj/random/drinkbottle, -/obj/random/contraband, -/turf/simulated/floor/wood, -/area/lar_maria/dorms) -"fI" = ( -/obj/structure/table/woodentable, -/obj/random/toolbox, -/obj/item/scalpel, -/turf/simulated/floor/wood, -/area/lar_maria/dorms) -"fJ" = ( -/obj/structure/table/woodentable, -/obj/random/snack, -/turf/simulated/floor/wood, -/area/lar_maria/dorms) -"fK" = ( -/obj/machinery/door/airlock, -/obj/effect/decal/cleanable/blood, -/turf/simulated/floor/tiled/white, -/area/lar_maria/head_m) -"fL" = ( -/obj/machinery/light{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled, -/area/lar_maria/hallway) -"fM" = ( -/obj/structure/table/standard, -/obj/random/gloves, -/turf/simulated/floor/tiled, -/area/lar_maria/office) -"fN" = ( -/obj/random/trash, -/turf/simulated/floor/tiled, -/area/lar_maria/office) -"fO" = ( -/obj/structure/table/steel, -/turf/simulated/floor/tiled, -/area/lar_maria/office) -"fP" = ( -/obj/structure/table/steel, -/obj/random/firstaid, -/turf/simulated/floor/tiled, -/area/lar_maria/office) -"fQ" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/cable{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/turf/simulated/floor/tiled, -/area/lar_maria/office) -"fR" = ( -/obj/machinery/power/apc{ - dir = 4; - name = "east bump"; - pixel_x = 24 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable{ - d2 = 8; - icon_state = "0-8" - }, -/turf/simulated/floor/tiled, -/area/lar_maria/office) -"fS" = ( -/obj/structure/table/standard, -/obj/item/paper_bin, -/obj/item/paper, -/turf/simulated/floor/tiled, -/area/lar_maria/office) -"fT" = ( -/obj/structure/table/standard, -/obj/item/paper/lar_maria/note_9, -/turf/simulated/floor/tiled, -/area/lar_maria/office) -"fU" = ( -/obj/machinery/vending/engivend{ - req_access = list() - }, -/turf/simulated/floor/wood, -/area/lar_maria/dorms) -"fV" = ( -/mob/living/simple_animal/hostile/lar_maria/guard, -/turf/simulated/floor/wood, -/area/lar_maria/dorms) -"fW" = ( -/obj/structure/bookcase, -/turf/simulated/floor/wood, -/area/lar_maria/dorms) -"fX" = ( -/mob/living/simple_animal/hostile/lar_maria/virologist/female, -/turf/simulated/floor/wood, -/area/lar_maria/dorms) -"fY" = ( -/obj/structure/closet, -/obj/random/handgun, -/obj/random/powercell, -/turf/simulated/floor/wood, -/area/lar_maria/dorms) -"fZ" = ( -/obj/structure/hygiene/shower{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/lar_maria/head_m) -"ga" = ( -/obj/machinery/light{ - dir = 1 - }, -/turf/simulated/floor/tiled/white, -/area/lar_maria/head_m) -"gb" = ( -/obj/machinery/light/small{ - dir = 1 - }, -/turf/simulated/floor/tiled/white, -/area/lar_maria/head_f) -"gc" = ( -/obj/machinery/door/airlock, -/turf/simulated/floor/tiled/white, -/area/lar_maria/head_f) -"gd" = ( -/obj/structure/hygiene/toilet{ - dir = 8 - }, -/obj/machinery/light/small{ - dir = 4 - }, -/obj/random/trash, -/turf/simulated/floor/tiled/white, -/area/lar_maria/head_f) -"ge" = ( -/turf/simulated/wall, -/area/lar_maria/head_f) -"gf" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/effect/decal/cleanable/blood, -/turf/simulated/floor/tiled, -/area/lar_maria/hallway) -"gg" = ( -/obj/structure/table/rack, -/obj/random/firstaid, -/turf/simulated/floor/tiled, -/area/lar_maria/office) -"gh" = ( -/obj/machinery/alarm{ - dir = 1; - pixel_y = -25 - }, -/turf/simulated/floor/tiled, -/area/lar_maria/office) -"gi" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 4 - }, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled, -/area/lar_maria/office) -"gj" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/lar_maria/office) -"gk" = ( -/obj/machinery/door/airlock/glass, -/turf/simulated/floor/tiled, -/area/lar_maria/office) -"gl" = ( -/obj/structure/bed/chair/office/light{ - dir = 1 - }, -/turf/simulated/floor/tiled, -/area/lar_maria/office) -"gm" = ( -/obj/machinery/atmospherics/unary/vent_pump/on, -/obj/machinery/alarm{ - dir = 4; - pixel_x = -25 - }, -/turf/simulated/floor/wood, -/area/lar_maria/dorms) -"gn" = ( -/obj/machinery/power/apc{ - dir = 4; - name = "east bump"; - pixel_x = 24 - }, -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/obj/structure/cable{ - d2 = 2; - icon_state = "0-2" - }, -/turf/simulated/floor/wood, -/area/lar_maria/dorms) -"go" = ( -/obj/structure/bed/padded, -/obj/effect/landmark/corpse/lar_maria/virologist, -/turf/simulated/floor/wood, -/area/lar_maria/dorms) -"gp" = ( -/obj/random/trash, -/obj/effect/landmark/corpse/lar_maria/test_subject, -/obj/effect/decal/cleanable/blood, -/turf/simulated/floor/tiled/white, -/area/lar_maria/head_m) -"gq" = ( -/obj/structure/table/standard, -/obj/item/towel, -/turf/simulated/floor/tiled/white, -/area/lar_maria/head_m) -"gr" = ( -/turf/simulated/floor/tiled/white, -/area/lar_maria/head_f) -"gs" = ( -/obj/machinery/door/airlock, -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled, -/area/lar_maria/office) -"gt" = ( -/obj/machinery/door/airlock, -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled, -/area/lar_maria/office) -"gu" = ( -/turf/simulated/wall, -/area/lar_maria/mess_hall) -"gv" = ( -/obj/machinery/door/airlock, -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/wood, -/area/lar_maria/mess_hall) -"gw" = ( -/obj/machinery/door/airlock, -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/wood, -/area/lar_maria/mess_hall) -"gx" = ( -/turf/simulated/wall/r_wall, -/area/lar_maria/mess_hall) -"gy" = ( -/obj/structure/closet/athletic_mixed, -/turf/simulated/floor/tiled/white, -/area/lar_maria/head_m) -"gz" = ( -/turf/simulated/wall, -/area/lar_maria/hallway) -"gA" = ( -/obj/structure/reagent_dispensers/watertank, -/turf/simulated/floor/plating, -/area/lar_maria/hallway) -"gB" = ( -/obj/structure/closet/l3closet/janitor, -/turf/simulated/floor/plating, -/area/lar_maria/hallway) -"gC" = ( -/obj/structure/table/standard, -/obj/random/trash, -/turf/simulated/floor/plating, -/area/lar_maria/hallway) -"gD" = ( -/turf/simulated/open, -/area/lar_maria/hallway) -"gE" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 4; - level = 2 - }, -/obj/structure/window/basic{ - dir = 8 - }, -/obj/item/stool, -/turf/simulated/floor/tiled, -/area/lar_maria/hallway) -"gF" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 4 - }, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled, -/area/lar_maria/hallway) -"gG" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 8 - }, -/turf/simulated/floor/tiled, -/area/lar_maria/hallway) -"gH" = ( -/obj/structure/window/basic{ - dir = 4 - }, -/obj/machinery/alarm{ - pixel_y = 23; - req_access = newlist() - }, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 8 - }, -/obj/item/stool, -/turf/simulated/floor/tiled, -/area/lar_maria/hallway) -"gI" = ( -/obj/machinery/vending/cigarette, -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/turf/simulated/floor/tiled, -/area/lar_maria/mess_hall) -"gJ" = ( -/obj/machinery/vending/coffee, -/obj/machinery/light{ - dir = 1 - }, -/turf/simulated/floor/tiled, -/area/lar_maria/mess_hall) -"gK" = ( -/obj/machinery/vending/games, -/turf/simulated/floor/tiled, -/area/lar_maria/mess_hall) -"gL" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/tiled, -/area/lar_maria/mess_hall) -"gM" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled, -/area/lar_maria/mess_hall) -"gN" = ( -/obj/structure/table/standard, -/obj/random/snack, -/turf/simulated/floor/tiled, -/area/lar_maria/mess_hall) -"gO" = ( -/obj/structure/table/standard, -/turf/simulated/floor/tiled, -/area/lar_maria/mess_hall) -"gP" = ( -/obj/machinery/light{ - dir = 1 - }, -/obj/machinery/computer/arcade, -/turf/simulated/floor/tiled, -/area/lar_maria/mess_hall) -"gQ" = ( -/obj/structure/bed/chair{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/lar_maria/mess_hall) -"gR" = ( -/obj/structure/table/standard, -/obj/item/trash/plate, -/obj/item/material/kitchen/utensil/fork, -/turf/simulated/floor/tiled, -/area/lar_maria/mess_hall) -"gS" = ( -/obj/structure/bed/chair{ - dir = 8 - }, -/turf/simulated/floor/tiled, -/area/lar_maria/mess_hall) -"gT" = ( -/turf/simulated/floor/tiled, -/area/lar_maria/mess_hall) -"gU" = ( -/obj/machinery/door/window/westright, -/obj/machinery/door/firedoor, -/turf/simulated/floor/tiled/white, -/area/lar_maria/mess_hall) -"gV" = ( -/obj/machinery/light{ - dir = 1 - }, -/turf/simulated/floor/tiled/white, -/area/lar_maria/mess_hall) -"gW" = ( -/obj/structure/hygiene/sink/kitchen{ - pixel_y = 25 - }, -/turf/simulated/floor/tiled/white, -/area/lar_maria/mess_hall) -"gX" = ( -/obj/machinery/alarm{ - pixel_y = 23; - req_access = newlist() - }, -/turf/simulated/floor/tiled/white, -/area/lar_maria/mess_hall) -"gY" = ( -/obj/machinery/door/airlock/freezer, -/obj/machinery/door/firedoor, -/turf/simulated/floor/tiled/freezer, -/area/lar_maria/mess_hall) -"gZ" = ( -/turf/simulated/floor/tiled/freezer, -/area/lar_maria/mess_hall) -"ha" = ( -/obj/machinery/light{ - dir = 1 - }, -/turf/simulated/floor/tiled/freezer, -/area/lar_maria/mess_hall) -"hb" = ( -/obj/structure/closet/crate/trashcart, -/turf/simulated/floor/plating, -/area/lar_maria/hallway) -"hc" = ( -/obj/random/trash, -/turf/simulated/floor/plating, -/area/lar_maria/hallway) -"hd" = ( -/obj/structure/bed/chair{ - dir = 1 - }, -/obj/machinery/light/small{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/lar_maria/hallway) -"he" = ( -/obj/machinery/light{ - dir = 8 - }, -/turf/simulated/open, -/area/lar_maria/hallway) -"hf" = ( -/obj/structure/window/basic{ - dir = 8 - }, -/obj/item/stool, -/turf/simulated/floor/tiled, -/area/lar_maria/hallway) -"hg" = ( -/obj/structure/window/basic{ - dir = 4 - }, -/obj/item/stool, -/turf/simulated/floor/tiled, -/area/lar_maria/hallway) -"hh" = ( -/obj/machinery/light{ - dir = 4; - icon_state = "tube1" - }, -/turf/simulated/open, -/area/lar_maria/hallway) -"hi" = ( -/obj/machinery/power/apc{ - dir = 8; - name = "west bump"; - pixel_x = -24 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable{ - d2 = 2; - icon_state = "0-2" - }, -/turf/simulated/floor/tiled, -/area/lar_maria/mess_hall) -"hj" = ( -/obj/structure/bed/chair{ - dir = 1 - }, -/turf/simulated/floor/tiled, -/area/lar_maria/mess_hall) -"hk" = ( -/obj/structure/table/marble, -/obj/machinery/door/firedoor, -/obj/item/material/kitchen/utensil/fork, -/turf/simulated/floor/tiled/white, -/area/lar_maria/mess_hall) -"hl" = ( -/turf/simulated/floor/tiled/white, -/area/lar_maria/mess_hall) -"hm" = ( -/obj/machinery/cooker/grill, -/turf/simulated/floor/tiled/white, -/area/lar_maria/mess_hall) -"hn" = ( -/obj/structure/closet/secure_closet/freezer/meat, -/obj/random/snack, -/obj/random/snack, -/turf/simulated/floor/tiled/freezer, -/area/lar_maria/mess_hall) -"ho" = ( -/obj/structure/closet/secure_closet/freezer/kitchen{ - req_access = newlist() - }, -/turf/simulated/floor/tiled/freezer, -/area/lar_maria/mess_hall) -"hp" = ( -/turf/simulated/wall/r_wall, -/area/lar_maria/head_f) -"hq" = ( -/obj/machinery/light{ - dir = 1 - }, -/mob/living/simple_animal/hostile/lar_maria/virologist/female, -/turf/simulated/floor/tiled/white, -/area/lar_maria/head_f) -"hr" = ( -/obj/structure/table/standard, -/obj/random/soap, -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/obj/machinery/alarm{ - pixel_y = 23; - req_access = newlist() - }, -/turf/simulated/floor/tiled/white, -/area/lar_maria/head_f) -"hs" = ( -/obj/structure/table/standard, -/obj/item/towel, -/obj/machinery/atmospherics/unary/vent_pump/on, -/turf/simulated/floor/tiled/white, -/area/lar_maria/head_f) -"ht" = ( -/obj/structure/mopbucket, -/obj/item/mop, -/turf/simulated/floor/plating, -/area/lar_maria/hallway) -"hu" = ( -/turf/simulated/floor/plating, -/area/lar_maria/hallway) -"hv" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/cyan{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/lar_maria/solar_control) -"hw" = ( -/obj/structure/cable{ - d2 = 4; - icon_state = "0-4" - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 1 - }, -/obj/machinery/power/apc{ - dir = 8; - locked = 0; - name = "west bump"; - pixel_x = -24; - req_access = list() - }, -/turf/simulated/floor/tiled, -/area/lar_maria/hallway) -"hx" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled, -/area/lar_maria/hallway) -"hy" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/cable{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/structure/cable{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/turf/simulated/floor/tiled, -/area/lar_maria/hallway) -"hz" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 8 - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/landmark/corpse/lar_maria/test_subject, -/obj/effect/decal/cleanable/blood, -/turf/simulated/floor/tiled, -/area/lar_maria/hallway) -"hA" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/random/trash, -/turf/simulated/floor/tiled, -/area/lar_maria/hallway) -"hB" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 1 - }, -/turf/simulated/floor/tiled, -/area/lar_maria/hallway) -"hC" = ( -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled, -/area/lar_maria/mess_hall) -"hD" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/cable{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/turf/simulated/floor/tiled, -/area/lar_maria/mess_hall) -"hE" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled, -/area/lar_maria/mess_hall) -"hF" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled, -/area/lar_maria/mess_hall) -"hG" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/obj/structure/cable{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/turf/simulated/floor/tiled, -/area/lar_maria/mess_hall) -"hH" = ( -/obj/random/trash, -/turf/simulated/floor/tiled, -/area/lar_maria/mess_hall) -"hI" = ( -/obj/structure/table/marble, -/obj/machinery/door/firedoor, -/obj/item/material/kitchen/rollingpin, -/turf/simulated/floor/tiled/white, -/area/lar_maria/mess_hall) -"hJ" = ( -/obj/machinery/cooker/fryer, -/turf/simulated/floor/tiled/white, -/area/lar_maria/mess_hall) -"hK" = ( -/obj/structure/closet/secure_closet/freezer/meat, -/obj/random/snack, -/turf/simulated/floor/tiled/freezer, -/area/lar_maria/mess_hall) -"hL" = ( -/obj/effect/decal/cleanable/blood, -/turf/simulated/floor/tiled/freezer, -/area/lar_maria/mess_hall) -"hM" = ( -/obj/structure/table/marble, -/obj/item/reagent_containers/glass/beaker, -/obj/random/snack, -/turf/simulated/floor/tiled/freezer, -/area/lar_maria/mess_hall) -"hN" = ( -/obj/structure/hygiene/shower{ - dir = 4 - }, -/obj/random/trash, -/turf/simulated/floor/tiled/white, -/area/lar_maria/head_f) -"hO" = ( -/obj/structure/table/standard, -/obj/item/towel, -/obj/random/soap, -/turf/simulated/floor/tiled/white, -/area/lar_maria/head_f) -"hP" = ( -/obj/machinery/light{ - dir = 8 - }, -/turf/simulated/floor/tiled/white, -/area/lar_maria/head_f) -"hQ" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/random/trash, -/turf/simulated/floor/tiled/white, -/area/lar_maria/head_f) -"hR" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/tiled/white, -/area/lar_maria/head_f) -"hS" = ( -/obj/machinery/door/airlock, -/turf/simulated/floor/plating, -/area/lar_maria/hallway) -"hT" = ( -/obj/effect/landmark/corpse/lar_maria/zhp_guard/dark, -/obj/effect/decal/cleanable/blood, -/turf/simulated/floor/tiled, -/area/lar_maria/hallway) -"hU" = ( -/turf/simulated/floor/tiled, -/area/lar_maria/hallway) -"hV" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 8 - }, -/turf/simulated/floor/tiled, -/area/lar_maria/hallway) -"hW" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/effect/decal/cleanable/blood, -/turf/simulated/floor/tiled, -/area/lar_maria/hallway) -"hX" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/lar_maria/hallway) -"hY" = ( -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/door/airlock/multi_tile/glass{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/lar_maria/mess_hall) -"hZ" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 1 - }, -/turf/simulated/floor/tiled, -/area/lar_maria/mess_hall) -"ia" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/lar_maria/mess_hall) -"ib" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 - }, -/turf/simulated/floor/tiled, -/area/lar_maria/mess_hall) -"ic" = ( -/obj/item/material/kitchen/utensil/fork, -/turf/simulated/floor/tiled, -/area/lar_maria/mess_hall) -"id" = ( -/obj/structure/table/marble, -/obj/machinery/door/firedoor, -/obj/item/reagent_containers/food/condiment/flour, -/obj/item/storage/fancy/egg_box, -/turf/simulated/floor/tiled/white, -/area/lar_maria/mess_hall) -"ie" = ( -/obj/effect/decal/cleanable/blood, -/turf/simulated/floor/tiled/white, -/area/lar_maria/mess_hall) -"if" = ( -/obj/machinery/cooker/oven, -/turf/simulated/floor/tiled/white, -/area/lar_maria/mess_hall) -"ig" = ( -/obj/structure/closet/secure_closet/freezer/fridge, -/obj/random/snack, -/obj/random/snack, -/turf/simulated/floor/tiled/freezer, -/area/lar_maria/mess_hall) -"ih" = ( -/obj/effect/landmark/corpse/lar_maria/test_subject, -/obj/effect/decal/cleanable/blood, -/turf/simulated/floor/tiled/freezer, -/area/lar_maria/mess_hall) -"ii" = ( -/obj/machinery/chem_master/condimaster, -/turf/simulated/floor/tiled/freezer, -/area/lar_maria/mess_hall) -"ij" = ( -/obj/structure/hygiene/shower{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/lar_maria/head_f) -"ik" = ( -/obj/random/trash, -/turf/simulated/floor/tiled/white, -/area/lar_maria/head_f) -"il" = ( -/obj/structure/closet/athletic_mixed, -/turf/simulated/floor/tiled/white, -/area/lar_maria/head_f) -"in" = ( -/obj/machinery/power/apc{ - dir = 4; - name = "east bump"; - pixel_x = 24 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable{ - d2 = 2; - icon_state = "0-2" - }, -/obj/machinery/washing_machine, -/turf/simulated/floor/tiled/white, -/area/lar_maria/head_f) -"io" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/turf/simulated/floor/tiled, -/area/lar_maria/hallway) -"ip" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 8 - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/cable{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/turf/simulated/floor/tiled, -/area/lar_maria/hallway) -"iq" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled, -/area/lar_maria/hallway) -"ir" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/alarm{ - pixel_y = 23; - req_access = newlist() - }, -/turf/simulated/floor/tiled, -/area/lar_maria/hallway) -"is" = ( -/obj/machinery/light{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled, -/area/lar_maria/hallway) -"it" = ( -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled, -/area/lar_maria/hallway) -"iu" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/lar_maria/hallway) -"iv" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/random/trash, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 - }, -/turf/simulated/floor/tiled, -/area/lar_maria/hallway) -"iw" = ( -/obj/item/paper/lar_maria/note_6, -/turf/simulated/floor/tiled, -/area/lar_maria/hallway) -"ix" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/cyan{ - dir = 9 - }, -/turf/simulated/floor/plating, -/area/lar_maria/solar_control) -"iy" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/alarm{ - dir = 4; - pixel_x = -25 - }, -/turf/simulated/floor/tiled, -/area/lar_maria/mess_hall) -"iz" = ( -/obj/structure/bed/chair{ - dir = 4 - }, -/obj/effect/landmark/corpse/lar_maria/virologist, -/obj/effect/decal/cleanable/blood, -/turf/simulated/floor/tiled, -/area/lar_maria/mess_hall) -"iA" = ( -/obj/structure/table/standard, -/obj/item/paper/lar_maria/note_3, -/turf/simulated/floor/tiled, -/area/lar_maria/mess_hall) -"iB" = ( -/obj/structure/table/standard, -/obj/item/trash/plate, -/turf/simulated/floor/tiled, -/area/lar_maria/mess_hall) -"iC" = ( -/obj/structure/table/marble, -/obj/machinery/door/firedoor, -/obj/item/trash/plate, -/turf/simulated/floor/tiled/white, -/area/lar_maria/mess_hall) -"iD" = ( -/obj/effect/landmark/corpse/lar_maria/virologist_female, -/obj/effect/decal/cleanable/blood, -/turf/simulated/floor/tiled/white, -/area/lar_maria/mess_hall) -"iE" = ( -/obj/structure/table/marble, -/obj/machinery/cooker/cereal, -/turf/simulated/floor/tiled/white, -/area/lar_maria/mess_hall) -"iF" = ( -/obj/structure/closet/secure_closet/freezer/fridge, -/obj/random/snack, -/turf/simulated/floor/tiled/freezer, -/area/lar_maria/mess_hall) -"iG" = ( -/obj/structure/kitchenspike, -/obj/effect/decal/cleanable/blood, -/turf/simulated/floor/tiled/freezer, -/area/lar_maria/mess_hall) -"iH" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/obj/effect/landmark/corpse/lar_maria/test_subject, -/obj/effect/decal/cleanable/blood, -/turf/simulated/floor/tiled/white, -/area/lar_maria/head_f) -"iI" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/effect/decal/cleanable/blood, -/turf/simulated/floor/tiled/white, -/area/lar_maria/head_f) -"iJ" = ( -/obj/machinery/door/airlock, -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/decal/cleanable/blood, -/turf/simulated/floor/tiled/white, -/area/lar_maria/head_f) -"iK" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, -/obj/structure/cable{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/effect/decal/cleanable/blood, -/turf/simulated/floor/tiled, -/area/lar_maria/hallway) -"iL" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/lar_maria/hallway) -"iM" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/lar_maria/hallway) -"iN" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/effect/decal/cleanable/blood, -/obj/item/clothing/head/soft/lar_maria/zhp_cap, -/turf/simulated/floor/tiled, -/area/lar_maria/hallway) -"iO" = ( -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/lar_maria/hallway) -"iP" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/effect/floor_decal/industrial/warning, -/turf/simulated/floor/tiled, -/area/lar_maria/hallway) -"iQ" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/obj/effect/floor_decal/industrial/warning, -/turf/simulated/floor/tiled, -/area/lar_maria/hallway) -"iR" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/cyan{ - dir = 5 - }, -/turf/simulated/floor/plating, -/area/lar_maria/solar_control) -"iS" = ( -/obj/machinery/vending/snack, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 1; - level = 2 - }, -/turf/simulated/floor/tiled, -/area/lar_maria/mess_hall) -"iT" = ( -/obj/machinery/vending/cola, -/obj/machinery/light, -/turf/simulated/floor/tiled, -/area/lar_maria/mess_hall) -"iU" = ( -/obj/machinery/vending/fitness, -/turf/simulated/floor/tiled, -/area/lar_maria/mess_hall) -"iV" = ( -/obj/machinery/light, -/obj/machinery/computer/arcade, -/turf/simulated/floor/tiled, -/area/lar_maria/mess_hall) -"iW" = ( -/obj/structure/table/standard, -/obj/item/clothing/head/soft/lar_maria/zhp_cap, -/turf/simulated/floor/tiled, -/area/lar_maria/mess_hall) -"iX" = ( -/obj/machinery/vending/dinnerware, -/obj/machinery/door/firedoor, -/turf/simulated/floor/tiled/white, -/area/lar_maria/mess_hall) -"iY" = ( -/obj/structure/table/marble, -/obj/machinery/microwave, -/obj/machinery/light, -/turf/simulated/floor/tiled/white, -/area/lar_maria/mess_hall) -"iZ" = ( -/obj/structure/table/marble, -/obj/item/trash/plate, -/obj/item/material/kitchen/utensil/fork, -/turf/simulated/floor/tiled/white, -/area/lar_maria/mess_hall) -"ja" = ( -/obj/structure/table/marble, -/turf/simulated/floor/tiled/white, -/area/lar_maria/mess_hall) -"jb" = ( -/obj/machinery/gibber, -/turf/simulated/floor/tiled/freezer, -/area/lar_maria/mess_hall) -"jc" = ( -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/turf/simulated/floor/reinforced, -/area/space) -"jd" = ( -/turf/simulated/wall/r_wall, -/area/lar_maria/hallway) -"je" = ( -/obj/machinery/door/airlock, -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/tiled, -/area/lar_maria/hallway) -"jf" = ( -/obj/machinery/door/airlock, -/obj/machinery/door/firedoor, -/turf/simulated/floor/tiled, -/area/lar_maria/hallway) -"jg" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/cyan{ - dir = 1 - }, -/turf/simulated/floor/plating, -/area/lar_maria/hallway) -"jh" = ( -/obj/machinery/access_button/airlock_interior{ - master_tag = "ZHP_south_airlock"; - pixel_x = 25; - pixel_y = -25 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/cyan{ - dir = 1 - }, -/turf/simulated/floor/plating, -/area/lar_maria/hallway) -"ji" = ( -/obj/machinery/door/airlock/external{ - frequency = 1379; - id_tag = "ZHP_south_airlock_interior_door"; - locked = 1 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/cyan{ - dir = 8 - }, -/turf/simulated/floor/plating, -/area/lar_maria/hallway) -"jj" = ( -/obj/machinery/door/airlock/external{ - frequency = 1379; - id_tag = "ZHP_south_airlock_interior_door"; - locked = 1 - }, -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/manifold/hidden/cyan{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/lar_maria/hallway) -"jk" = ( -/obj/structure/grille, -/turf/simulated/floor/reinforced, -/area/space) -"jl" = ( -/obj/machinery/atmospherics/unary/vent_pump/high_volume/airlock{ - dir = 1; - id_tag = "ZHP_south_airlock_pump" - }, -/turf/simulated/floor/plating, -/area/lar_maria/hallway) -"jm" = ( -/obj/machinery/atmospherics/unary/vent_pump/high_volume/airlock{ - dir = 1; - id_tag = "ZHP_south_airlock_pump" - }, -/obj/machinery/embedded_controller/radio/airlock/airlock_controller{ - id_tag = "ZHP_south_airlock"; - pixel_x = 25; - tag_airpump = "ZHP_south_airlock_pump"; - tag_chamber_sensor = "ZHP_south_airlock_sensor_chamber"; - tag_exterior_door = "ZHP_south_airlock_exterior_door"; - tag_interior_door = "ZHP_south_airlock_interior_door" - }, -/turf/simulated/floor/plating, -/area/lar_maria/hallway) -"jn" = ( -/obj/machinery/airlock_sensor{ - id_tag = "ZHP_south_airlock_sensor_chamber"; - master_tag = "ZHPWestSolar"; - pixel_x = 25 - }, -/turf/simulated/floor/plating, -/area/lar_maria/hallway) -"jo" = ( -/obj/machinery/door/airlock/external{ - frequency = 1379; - id_tag = "ZHP_south_airlock_exterior_door"; - locked = 1 - }, -/turf/simulated/floor/plating, -/area/lar_maria/hallway) -"jp" = ( -/obj/structure/lattice, -/turf/space, -/area/space) -"jq" = ( -/turf/simulated/floor/plating, -/area/space) -"jr" = ( -/obj/machinery/access_button/airlock_exterior{ - master_tag = "ZHP_south_airlock"; - pixel_x = 25; - pixel_y = 15 - }, -/turf/simulated/floor/plating, -/area/space) -"kb" = ( -/obj/structure/bed/chair{ - dir = 8 - }, -/obj/machinery/light/small{ - dir = 1 - }, -/turf/simulated/floor/plating, -/area/lar_maria/solar_control) -"lb" = ( -/obj/structure/bed/chair{ - dir = 4 - }, -/obj/machinery/light/small{ - dir = 1 - }, -/turf/simulated/floor/plating, -/area/lar_maria/solar_control) -"lD" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/closet/firecloset, -/turf/simulated/floor/tiled, -/area/lar_maria/hallway) -"mb" = ( -/obj/structure/lattice, -/obj/machinery/atmospherics/pipe/zpipe/down/scrubbers{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/zpipe/down/supply{ - dir = 8 - }, -/obj/structure/cable{ - d1 = 1; - d2 = 32; - icon_state = "32-1" - }, -/turf/simulated/open, -/area/lar_maria/solar_control) -"nb" = ( -/obj/structure/dispenser/oxygen, -/obj/machinery/light/small{ - dir = 8 - }, -/turf/simulated/floor/plating, -/area/lar_maria/solar_control) -"ni" = ( -/obj/machinery/atmospherics/portables_connector{ - dir = 4 - }, -/obj/machinery/portable_atmospherics/canister/air/airlock, -/turf/simulated/floor/plating, -/area/lar_maria/hallway) -"ob" = ( -/obj/structure/ladder, -/obj/machinery/light/small{ - dir = 4; - pixel_y = 8 - }, -/turf/simulated/floor/plating, -/area/lar_maria/solar_control) -"pb" = ( -/obj/machinery/atmospherics/binary/pump{ - dir = 8 - }, -/obj/machinery/light/small{ - dir = 1 - }, -/turf/simulated/floor/plating, -/area/lar_maria/atmos) -"qb" = ( -/obj/structure/table/rack, -/obj/random/tank, -/obj/random/tool, -/obj/machinery/light/small{ - dir = 1 - }, -/turf/simulated/floor/plating, -/area/lar_maria/atmos) -"rb" = ( -/obj/machinery/atmospherics/unary/tank/nitrogen{ - dir = 4 - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 4 - }, -/obj/machinery/light/small{ - dir = 8 - }, -/turf/simulated/floor/plating, -/area/lar_maria/atmos) -"sb" = ( -/obj/machinery/atmospherics/portables_connector{ - dir = 8 - }, -/obj/machinery/portable_atmospherics/canister/empty, -/obj/machinery/light/small{ - dir = 4; - pixel_y = 8 - }, -/turf/simulated/floor/plating, -/area/lar_maria/atmos) -"tb" = ( -/obj/machinery/atmospherics/binary/pump{ - dir = 8 - }, -/obj/machinery/light/small, -/turf/simulated/floor/plating, -/area/lar_maria/atmos) -"ub" = ( -/obj/machinery/portable_atmospherics/canister/oxygen, -/obj/effect/floor_decal/industrial/warning{ - dir = 8; - icon_state = "warning" - }, -/obj/machinery/light/small, -/turf/simulated/floor/plating, -/area/lar_maria/atmos) -"vb" = ( -/obj/structure/hygiene/sink{ - dir = 4; - pixel_x = 11 - }, -/obj/item/storage/mirror{ - pixel_x = 30 - }, -/obj/machinery/alarm{ - pixel_y = 23; - req_access = newlist() - }, -/turf/simulated/floor/tiled/white, -/area/lar_maria/head_m) -"vM" = ( -/obj/structure/closet/emcloset, -/turf/simulated/floor/tiled, -/area/lar_maria/hallway) -"wb" = ( -/obj/structure/hygiene/sink{ - dir = 4; - pixel_x = 11 - }, -/obj/item/storage/mirror{ - pixel_x = 30 - }, -/obj/random/trash, -/turf/simulated/floor/tiled/white, -/area/lar_maria/head_m) -"xb" = ( -/obj/structure/hygiene/sink{ - dir = 8; - pixel_x = -12; - pixel_y = 2 - }, -/obj/item/storage/mirror{ - pixel_x = -30 - }, -/turf/simulated/floor/tiled/white, -/area/lar_maria/head_f) -"DG" = ( -/obj/machinery/computer/modular{ - dir = 1 - }, -/turf/simulated/floor/tiled, -/area/lar_maria/office) -"VZ" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/cyan{ - dir = 4 - }, -/obj/effect/wallframe_spawn, -/turf/simulated/floor/plating, -/area/lar_maria/hallway) -"Yw" = ( -/obj/machinery/atmospherics/portables_connector{ - dir = 8 - }, -/obj/machinery/portable_atmospherics/canister/air/airlock, -/turf/simulated/floor/plating, -/area/lar_maria/hallway) - -(1,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(2,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(3,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(4,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(5,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(6,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(7,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(8,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(9,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(10,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(11,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(12,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(13,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(14,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(15,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(16,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(17,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(18,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(19,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(20,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(21,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(22,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(23,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(24,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(25,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(26,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(27,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(28,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(29,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(30,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(31,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(32,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(33,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(34,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(35,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(36,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(37,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(38,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(39,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(40,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(41,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(42,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(43,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(44,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(45,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(46,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(47,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(48,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(49,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(50,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(51,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(52,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(53,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(54,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(55,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(56,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(57,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(58,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(59,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(60,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(61,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(62,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(63,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(64,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(65,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(66,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(67,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(68,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(69,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(70,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(71,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(72,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ac -ad -ad -ad -ad -aB -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ac -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(73,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ac -ad -ag -aj -aq -aC -aU -aU -aU -aU -aU -aU -aU -aU -aU -aU -aU -aU -aU -aU -aU -aU -aU -aU -aU -aU -aU -aU -aU -aU -aU -aU -aU -aU -aU -ad -ac -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(74,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ac -ad -ag -ak -aq -aD -aV -aV -aV -aV -aV -aV -aV -aV -aV -aV -aV -aV -aV -aV -aV -aV -aV -aV -aV -aV -aV -aV -aV -aV -aV -aV -aV -aV -jc -ad -ac -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(75,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ac -ad -ag -ak -aq -aC -aW -aW -aW -aW -aW -aW -aW -aW -aW -aW -aW -aW -aW -aW -aW -aW -aW -aW -aW -aW -aW -aW -aW -aW -aW -aW -aW -aW -aW -ad -ac -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(76,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ac -ad -ag -ak -aq -aC -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ac -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(77,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ac -ad -ag -ak -aq -aC -aU -aU -aU -aU -aU -aU -aU -aU -aU -aU -aU -aU -aU -aU -aU -aU -aU -aU -aU -aU -aU -aU -aU -aU -aU -aU -aU -aU -aU -ad -ac -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(78,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ac -ad -ag -ak -aq -aD -aV -aV -aV -aV -aV -aV -aV -aV -aV -aV -aV -aV -aV -aV -aV -aV -aV -aV -aV -aV -aV -aV -aV -aV -aV -aV -aV -aV -jc -ad -ac -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(79,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ac -ad -ag -ak -aq -aC -aW -aW -aW -aW -aW -aW -aW -aW -aW -aW -aW -aW -aW -aW -aW -aW -aW -aW -aW -aW -aW -aW -aW -aW -aW -aW -aW -aW -aW -ad -ac -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(80,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ac -ad -ag -ak -aq -aC -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ac -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(81,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ac -ad -ag -al -aq -aC -ag -aj -aq -ad -bw -bw -bw -bw -bw -bw -bw -bw -bw -bw -eq -eq -eq -eq -eq -eq -eq -eq -eq -eq -hp -hp -hp -hp -hp -hp -ac -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(82,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ac -ad -ag -ak -aq -aC -ag -ak -aq -ad -bw -bw -bw -bw -bw -bw -bw -bw -bw -bw -eq -eq -eq -eq -eq -eq -eq -eq -eq -eq -hp -hp -hp -hp -hp -hp -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(83,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ac -ad -ag -ak -aq -aC -ag -ak -aq -ad -bw -bw -bH -cc -cr -cJ -dh -cc -dJ -ea -er -eI -eX -eZ -fq -er -fZ -fZ -fZ -er -gr -hN -ij -ij -hp -hp -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(84,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ac -ad -ag -ak -aq -aC -ag -ak -aq -ad -bw -bw -bH -cd -cs -cK -di -ce -di -eb -er -er -er -fj -fr -er -ga -gp -eZ -er -hq -gr -ik -gr -hp -hp -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(85,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ac -ad -ag -ak -aq -aC -ag -ak -aq -ad -bw -bw -bH -ce -ct -cL -dh -cd -dJ -ec -er -eJ -eX -eZ -eZ -fK -fs -gq -gy -er -gr -hO -il -il -hp -hp -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(86,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ac -ad -ag -ak -aq -aC -ag -ak -aq -ad -bw -bw -bH -cd -cu -cM -di -cd -di -eb -er -er -er -fk -fs -er -er -er -er -er -gc -ge -ge -ge -hp -hp -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(87,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ac -ad -ag -ak -aq -aC -ag -ak -aq -ad -bw -bw -bH -cd -cv -cN -dh -cd -dJ -ed -er -eK -eY -eZ -ft -er -gb -gr -gr -gr -gr -hP -xb -xb -hp -hp -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(88,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ac -ad -ag -ak -aq -aC -ag -ak -aq -ad -bw -bw -bI -cd -cw -cM -di -cd -di -ee -er -eL -eZ -eZ -fu -er -gc -ge -gc -ge -hr -hQ -hQ -iH -hp -hp -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(89,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ac -ad -ag -ak -aq -aC -ag -ak -aq -ad -bw -bw -bH -cd -ce -cd -cd -ce -cd -ef -er -vb -wb -fl -fv -er -gd -ge -gd -ge -hs -hR -in -iI -hp -hp -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(90,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ac -ad -ag -ak -aq -aC -ag -ak -aq -ad -bw -bw -bH -cd -cd -cd -cd -cd -dK -cd -er -er -er -er -fw -er -ge -ge -ge -ge -ge -ge -ge -iJ -hp -hp -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(91,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ac -ad -ag -ak -aq -aC -ag -ak -aq -ad -bw -bw -bH -cf -cx -cO -dj -dy -dL -eg -es -eN -eN -eN -fx -fL -eN -eN -eN -eN -fL -eN -io -iK -jd -jd -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(92,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ac -ad -ag -ak -aq -aC -ag -ak -aq -ad -bw -bw -bH -cg -cy -cP -dk -dz -dM -eh -et -eO -eO -eO -fy -eO -gf -eO -eO -eO -eO -eO -ip -iL -jd -jd -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(93,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ac -ad -ad -am -ar -aE -ar -bf -ad -ad -bx -bx -bx -bx -bx -bx -bx -bx -bx -bx -eu -eu -eu -eu -eu -eu -eu -eu -gz -gz -gz -gz -iq -iM -jd -jd -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(94,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ac -ad -ad -ah -ah -aF -ah -ah -ad -ad -bx -bx -bJ -bJ -bJ -rb -dl -dl -dl -bx -ev -eP -fb -ex -fz -fM -gg -eu -gA -hb -ht -gz -ir -iM -jd -jd -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(95,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ac -ad -ad -ah -ah -aG -ah -ah -ad -ad -bx -bx -bK -ch -cz -cQ -dm -dA -dN -bx -ew -eQ -eu -ex -ex -ex -ex -eu -gB -hc -hu -gz -is -iM -jd -jd -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(96,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ac -ad -ah -ah -ah -aH -ah -ah -ah -ah -ah -bx -pb -ci -cA -cR -cR -dB -tb -bx -eu -eu -eu -fm -ex -fN -ex -eu -gC -hd -hc -hS -iq -iN -jd -jd -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(97,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ac -ad -ah -ah -as -aI -aX -ah -ah -ah -ah -bx -bM -ci -cn -cl -dn -dB -bM -bx -ex -ex -fc -ex -fA -fO -ex -eu -gz -gz -gz -gz -it -iO -jd -jd -jd -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(98,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ac -ad -ah -ah -kb -hv -aY -bg -nb -br -br -bx -bN -ci -cn -cn -cR -dC -dO -bx -ey -ey -eu -eW -fB -fP -gh -eu -gD -he -hw -hT -iq -iM -hS -ni -jd -jd -jd -jd -jp -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(99,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ac -ae -ah -ah -au -hv -aY -aJ -aJ -aJ -by -bx -bO -ci -cn -cS -do -cn -dP -bx -eu -eu -eu -eu -eu -eu -fc -eu -gE -hf -hx -hU -iu -lD -jd -VZ -jd -jd -jd -jd -jp -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(100,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ac -af -ah -ah -aw -ix -aZ -bh -bn -bs -bz -bF -bP -cj -bP -cT -cT -bP -dQ -bF -ez -eR -eR -eR -eR -fQ -gi -gs -gF -eO -hy -hV -iv -iP -je -jg -ji -jl -hu -jo -jq -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(101,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ac -ad -ah -ah -aw -iR -aJ -bi -bo -bo -bA -bG -bQ -ck -bQ -cU -cU -bQ -dR -bG -eA -eS -fd -fn -fC -fR -gj -gt -gG -eN -hz -hW -eN -iQ -jf -jh -jj -jm -jn -jo -jr -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(102,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ac -ad -ah -ah -ax -hv -ba -bj -bp -bt -bB -bx -bR -ci -cn -cV -dp -dD -dS -bx -eu -eu -eu -eu -eu -eu -gk -eu -gH -hg -hA -hX -iw -vM -jd -VZ -jd -jd -jd -jd -jp -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(103,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ac -ad -ah -ah -lb -hv -bb -mb -ob -bu -bC -bx -bS -ci -cA -cn -dp -dE -dT -bx -eB -eT -fe -ex -eT -ex -gh -eu -gD -hh -hB -hX -hU -hU -hS -Yw -jd -jd -jd -jd -jp -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(104,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ac -ad -ah -ah -az -aK -bc -ah -ah -ah -ah -bx -qb -cl -cB -cB -dp -dF -ub -bx -eC -eU -ff -ex -DG -eW -ex -gu -gu -gu -hC -hY -gu -gu -gx -gx -gx -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(105,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ac -ad -ah -ah -ah -aL -ah -ah -ah -ah -ah -bx -bT -cm -cC -cW -dr -dG -dV -bx -eD -eV -fg -fo -fD -fS -gl -gu -gI -hi -hD -hZ -iy -iS -gx -gx -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(106,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ac -ad -ad -ah -ah -aM -ah -ah -ad -bv -bD -bD -bU -cn -cn -sb -cX -dH -dW -bx -eE -eW -fg -fp -fE -fT -fp -gu -gJ -gT -hE -ia -gT -iT -gx -gx -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(107,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ac -ad -ad -ah -ah -aN -ah -ah -ad -ad -bx -bx -bx -bx -bx -bx -bx -bx -bx -bx -eu -eu -eu -eu -eu -eu -eu -gu -gK -gT -hE -ia -gT -iU -gx -gx -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(108,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ac -ad -ad -an -ar -aO -ar -bl -ad -ad -bE -bE -bV -bV -bV -bV -bV -dI -bV -bV -bV -bV -dI -bV -bV -bV -gm -gv -gL -gL -hF -ib -iz -gQ -gx -gx -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(109,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ac -ad -ai -ao -aA -aP -ai -ao -aA -ad -bE -bE -bV -bV -bV -bV -ds -bV -bV -bV -bV -bV -bV -el -bV -bV -gn -gw -gM -gM -hG -gT -iA -gO -gx -gx -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(110,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ac -ad -ai -ao -aA -aQ -ai -ao -aA -ad -bE -bE -bW -co -co -co -co -co -co -co -co -co -fh -co -co -co -co -gu -gN -hj -gT -gT -iB -gN -gx -gx -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(111,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ac -ad -ai -ao -aA -aC -ai -ao -aA -ad -bE -bE -bX -co -cD -cY -dt -co -dX -ei -eF -co -fi -co -fF -db -go -gu -gO -hj -hH -ic -gS -gS -gx -gx -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(112,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ac -ad -ai -ao -aA -aC -ai -ao -aA -ad -bE -bE -bV -cp -bV -cZ -du -co -bY -ds -bV -cp -bV -cp -bV -bV -du -gu -gP -gT -gT -gT -gT -iV -gx -gx -ad -ad -aa -aa -aa -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(113,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ac -ad -ai -ao -aA -aC -ai -ao -aA -ad -bE -bE -bV -co -cE -da -dv -co -dw -ej -eG -co -bV -co -cI -fU -dw -gu -gQ -gQ -gT -gT -gQ -gQ -gx -gx -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(114,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ac -ad -ai -ao -aA -aC -ai -ao -aA -ad -bE -bE -bY -co -co -co -co -co -co -co -co -co -bY -co -co -co -co -gu -gR -gO -gT -gT -gO -gO -gx -gx -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(115,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ac -ad -ai -ao -aA -aC -ai -ao -aA -ad -bE -bE -bV -co -cE -db -dt -co -dt -ek -cD -co -bV -co -fG -db -dt -gu -gO -gO -gT -gT -gO -iW -gx -gx -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(116,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ac -ad -ai -ao -aA -aC -ai -ao -aA -ad -bE -bE -bV -cq -bZ -dc -du -co -bY -el -bV -cp -bV -cp -bV -fV -du -gu -gS -gS -gT -gT -gS -gS -gx -gx -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(117,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ac -ad -ai -ao -aA -aC -ai -ao -aA -ad -bE -bE -bZ -co -cF -dd -dw -co -dY -em -cI -co -bV -co -fH -fW -dY -gu -gT -gT -gT -gT -gT -gT -gx -gx -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(118,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ac -ad -ai -ao -aA -aC -ai -ao -aA -ad -bE -bE -bZ -co -co -co -co -co -co -co -co -co -bV -co -co -co -co -gu -gU -hk -hI -id -iC -iX -gx -gx -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(119,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ac -ad -ai -ao -aA -aC -ai -ao -aA -ad -bE -bE -ca -co -cD -de -dt -co -dx -ei -cD -co -bV -co -cD -db -dx -gu -gV -hl -hl -ie -hl -iY -gx -gx -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(120,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ac -ad -ai -ao -aA -aC -ai -ao -aA -ad -bE -bE -bV -cp -bV -bV -du -co -bY -bV -bV -cp -bV -cp -bV -bV -du -gu -gW -hl -hl -ie -iD -iZ -gx -gx -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(121,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ac -ad -ai -ao -aA -aC -ai -ao -aA -ad -bE -bE -bV -co -cG -df -dw -co -dZ -en -cI -co -bV -co -fI -da -dw -gu -gX -hm -hJ -if -iE -ja -gx -gx -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(122,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ac -ad -ai -ao -aA -aC -ai -ao -aA -ad -bE -bE -bY -co -co -co -co -co -co -co -co -co -bY -co -co -co -co -gu -gY -gu -gu -gu -gu -gu -gx -gx -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(123,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ac -ad -ai -ao -aA -aC -ai -ao -aA -ad -bE -bE -bV -co -cH -cY -dx -co -dt -eo -eH -co -bV -co -cD -db -dt -gu -gZ -hn -hK -ig -iF -ig -gx -gx -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(124,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ac -ad -ai -ao -aA -aC -ai -ao -aA -ad -bE -bE -bV -cp -bV -bV -du -co -bY -bV -bV -cp -cZ -cq -bZ -fX -du -gu -ha -gZ -hL -ih -gZ -gZ -gx -gx -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(125,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ac -ad -ai -ao -aA -aC -ai -ao -aA -ad -bE -bE -cb -co -cI -dg -dw -co -dw -ep -cI -co -cb -co -fJ -fY -dw -gu -gZ -ho -hM -ii -iG -jb -gx -gx -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(126,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ac -ad -ai -ao -aA -aC -ai -ao -aA -ad -bE -bE -bE -bE -bE -bE -bE -bE -bE -bE -bE -bE -bE -bE -bE -bE -bE -gx -gx -gx -gx -gx -gx -gx -gx -gx -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(127,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ac -ad -ai -ao -aA -aC -ai -ap -aA -ad -bE -bE -bE -bE -bE -bE -bE -bE -bE -bE -bE -bE -bE -bE -bE -bE -bE -gx -gx -gx -gx -gx -gx -gx -gx -gx -jk -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(128,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ac -ad -ai -ao -aA -aC -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ac -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(129,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ac -ad -ai -ao -aA -aC -bd -bd -bd -bd -bd -bd -bd -bd -bd -bd -bd -bd -bd -bd -bd -bd -bd -bd -bd -bd -bd -bd -bd -bd -bd -bd -bd -bd -bd -ad -ac -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(130,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ac -ad -ai -ao -aA -aR -aV -aV -aV -aV -aV -aV -aV -aV -aV -aV -aV -aV -aV -aV -aV -aV -aV -aV -aV -aV -aV -aV -aV -aV -aV -aV -aV -aV -jc -ad -ac -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(131,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ac -ad -ai -ao -aA -aC -be -be -be -be -be -be -be -be -be -be -be -be -be -be -be -be -be -be -be -be -be -be -be -be -be -be -be -be -be -ad -ac -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(132,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ac -ad -ai -ao -aA -aC -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ac -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(133,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ac -ad -ai -ao -aA -aC -bd -bd -bd -bd -bd -bd -bd -bd -bd -bd -bd -bd -bd -bd -bd -bd -bd -bd -bd -bd -bd -bd -bd -bd -bd -bd -bd -bd -bd -ad -ac -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(134,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ac -ad -ai -ao -aA -aS -aV -aV -aV -aV -aV -aV -aV -aV -aV -aV -aV -aV -aV -aV -aV -aV -aV -aV -aV -aV -aV -aV -aV -aV -aV -aV -aV -aV -jc -ad -ac -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(135,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ac -ad -ai -ap -aA -aC -be -be -be -be -be -be -be -be -be -be -be -be -be -be -be -be -be -be -be -be -be -be -be -be -be -be -be -be -be -ad -ac -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(136,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ac -ad -ad -ad -ad -aT -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ac -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(137,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(138,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(139,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(140,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(141,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(142,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(143,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(144,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(145,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(146,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(147,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(148,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(149,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(150,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(151,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(152,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(153,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(154,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(155,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(156,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(157,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(158,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(159,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(160,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(161,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(162,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(163,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(164,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(165,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(166,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(167,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(168,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(169,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(170,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(171,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(172,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(173,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(174,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(175,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(176,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(177,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(178,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(179,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(180,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(181,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(182,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(183,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(184,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(185,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(186,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(187,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(188,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(189,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(190,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(191,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(192,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(193,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(194,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(195,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(196,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(197,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(198,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(199,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(200,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} diff --git a/maps/away/lar_maria/lar_maria.dm b/maps/away/lar_maria/lar_maria.dm deleted file mode 100644 index 3062dbc36df99..0000000000000 --- a/maps/away/lar_maria/lar_maria.dm +++ /dev/null @@ -1,236 +0,0 @@ -#include "lar_maria_areas.dm" - -/obj/effect/overmap/visitable/sector/lar_maria - name = "Lar Maria space station" - desc = "Sensors detect an orbital station with low energy profile and sporadic life signs." - icon_state = "object" - known = FALSE - -/datum/map_template/ruin/away_site/lar_maria - name = "Lar Maria" - id = "awaysite_lar_maria" - description = "An orbital virus research station." - suffixes = list("lar_maria/lar_maria-1.dmm", "lar_maria/lar_maria-2.dmm") - spawn_cost = 2 - area_usage_test_exempted_root_areas = list(/area/lar_maria) - -///////////////////////////////////crew and prisoners -/obj/effect/landmark/corpse/lar_maria - eye_colors_per_species = list(SPECIES_HUMAN = list(COLOR_RED))//red eyes - skin_tones_per_species = list(SPECIES_HUMAN = list(-15)) - facial_styles_per_species = list(SPECIES_HUMAN = list("Shaved")) - genders_per_species = list(SPECIES_HUMAN = list(MALE)) - -/mob/living/simple_animal/hostile/lar_maria - name = "Lar Maria hostile mob" - desc = "You shouldn't see me!" - icon = 'maps/away/lar_maria/lar_maria_sprites.dmi' - unsuitable_atmos_damage = 15 - environment_smash = 1 - faction = "lar_maria" - status_flags = CANPUSH - turns_per_move = 5 - response_help = "pokes" - response_disarm = "shoves" - response_harm = "hits" - speed = 8 - can_escape = TRUE - natural_weapon = /obj/item/natural_weapon/punch - var/obj/effect/landmark/corpse/lar_maria/corpse = null - var/weapon = null - - ai_holder = /datum/ai_holder/simple_animal/lar_maria - say_list_type = /datum/say_list/lar_maria - -/mob/living/simple_animal/hostile/lar_maria/death(gibbed, deathmessage, show_dead_message) - ..(gibbed, deathmessage, show_dead_message) - if(corpse) - new corpse (src.loc) - if (weapon) - new weapon(src.loc) - visible_message("Small shining spores float away from dying [src]!") - qdel(src) - -/mob/living/simple_animal/hostile/lar_maria/test_subject - name = "\improper test subject" - desc = "Sick, filthy, angry and probably crazy human in an orange robe." - icon_state = "test_subject" - icon_living = "test_subject" - icon_dead = "test_subject_dead" - maxHealth = 40 - health = 40 - harm_intent_damage = 5 - corpse = /obj/effect/landmark/corpse/lar_maria/test_subject - -/obj/effect/landmark/corpse/lar_maria/test_subject - name = "Dead test subject" - corpse_outfits = list(/decl/hierarchy/outfit/corpse/test_subject) - spawn_flags = CORPSE_SPAWNER_NO_RANDOMIZATION//no name, no hairs etc. - -/decl/hierarchy/outfit/corpse/test_subject - name = "Dead ZHP test subject" - uniform = /obj/item/clothing/under/color/orange - shoes = /obj/item/clothing/shoes/orange - -/obj/effect/landmark/corpse/lar_maria/zhp_guard - name = "dead guard" - corpse_outfits = list(/decl/hierarchy/outfit/corpse/zhp_guard) - skin_tones_per_species = list(SPECIES_HUMAN = list(-15)) - -/obj/effect/landmark/corpse/lar_maria/zhp_guard/dark - skin_tones_per_species = list(SPECIES_HUMAN = list(-115)) - -/decl/hierarchy/outfit/corpse/zhp_guard - name = "Dead ZHP guard" - uniform = /obj/item/clothing/under/rank/virologist - suit = /obj/item/clothing/suit/armor/pcarrier - head = /obj/item/clothing/head/soft/lar_maria/zhp_cap - shoes = /obj/item/clothing/shoes/dutyboots - l_ear = /obj/item/device/radio/headset - -/mob/living/simple_animal/hostile/lar_maria/guard//angry guards armed with batons and shotguns. Still bite - name = "\improper security" - desc = "Guard dressed at Zeng-Hu Pharmaceuticals uniform." - icon_state = "guard_light" - maxHealth = 60 - health = 60 - harm_intent_damage = 5 - natural_weapon = /obj/item/melee/baton - weapon = /obj/item/melee/baton - corpse = /obj/effect/landmark/corpse/lar_maria/zhp_guard - -/mob/living/simple_animal/hostile/lar_maria/guard/Initialize() - . = ..() - var/skin_color = pick(list("light","dark")) - icon_state = "guard_[skin_color]" - if (skin_color == "dark") - corpse = /obj/effect/landmark/corpse/lar_maria/zhp_guard/dark - -/mob/living/simple_animal/hostile/lar_maria/guard/ranged - weapon = /obj/item/gun/projectile/shotgun/pump - ranged = 1 - projectiletype = /obj/item/projectile/bullet/shotgun/beanbag - -/mob/living/simple_animal/hostile/lar_maria/guard/ranged/Initialize() - . = ..() - icon_state = "[icon_state]_ranged" - -/obj/item/clothing/head/soft/lar_maria/zhp_cap - name = "Zeng-Hu Pharmaceuticals cap" - icon = 'maps/away/lar_maria/lar_maria_sprites.dmi' - desc = "A green cap with Zeng-Hu Pharmaceuticals symbol on it." - icon_state = "zhp_cap" - item_icons = list(slot_head_str = 'maps/away/lar_maria/lar_maria_clothing_sprites.dmi') - -/mob/living/simple_animal/hostile/lar_maria/virologist - name = "\improper virologist" - desc = "Virologist dressed at Zeng-Hu Pharmaceuticals uniform." - icon_state = "virologist_m" - maxHealth = 50 - health = 50 - harm_intent_damage = 5 - corpse = /obj/effect/landmark/corpse/lar_maria/virologist - -/obj/effect/landmark/corpse/lar_maria/virologist - name = "dead virologist" - corpse_outfits = list(/decl/hierarchy/outfit/corpse/zhp_virologist) - -/decl/hierarchy/outfit/corpse/zhp_virologist - name = "Dead male ZHP virologist" - uniform = /obj/item/clothing/under/rank/virologist - suit = /obj/item/clothing/suit/storage/toggle/labcoat - shoes = /obj/item/clothing/shoes/white - gloves = /obj/item/clothing/gloves/latex/nitrile - head = /obj/item/clothing/head/surgery - mask = /obj/item/clothing/mask/surgical - glasses = /obj/item/clothing/glasses/eyepatch/hud/medical - -/mob/living/simple_animal/hostile/lar_maria/virologist/female - icon_state = "virologist_f" - weapon = /obj/item/scalpel - corpse = /obj/effect/landmark/corpse/lar_maria/virologist_female - -/obj/effect/landmark/corpse/lar_maria/virologist_female - name = "dead virologist" - corpse_outfits = list(/decl/hierarchy/outfit/corpse/zhp_virologist_female) - hair_styles_per_species = list(SPECIES_HUMAN = list("Flaired Hair")) - hair_colors_per_species = list(SPECIES_HUMAN = list("#ae7b48")) - genders_per_species = list(SPECIES_HUMAN = list(FEMALE)) - -/decl/hierarchy/outfit/corpse/zhp_virologist_female - name = "Dead female ZHP virologist" - uniform = /obj/item/clothing/under/rank/virologist - suit = /obj/item/clothing/suit/storage/toggle/labcoat - shoes = /obj/item/clothing/shoes/white - gloves = /obj/item/clothing/gloves/latex/nitrile - mask = /obj/item/clothing/mask/surgical - -////////////////////////////Notes and papers -/obj/item/paper/lar_maria/note_1 - name = "paper note" - info = {" -
              Zeng-Hu Pharmaceuticals
              -
              CONFIDENTIAL USE ONLY
              - We received the latest batch of subjects this evening. Evening? Is it even evening? The schedule out here is so fucked in terms of sleep-cycles I forget to even check what time it is sometimes. I'm pretty sure it's evening anyway. Anyway, point is, we got the new guys, and thus far they seem like they fit the criteria pretty well. No family histories of diseases or the like, no current illnesses, prime physical condition, perfect subjects for our work. Tomorrow we start testing out the type 008 Serum. Hell if I know where this stuff's coming from, but it's fascinating. Injected into live subjects, it seems like it has a tendancy to not only cure them of ailments, but actually improve their bodily functions... - "} - -/obj/item/paper/lar_maria/note_2 - name = "paper note" - info = {"
              Zeng-Hu Pharmaceuticals
              -
              CONFIDENTIAL USE ONLY
              - I can't believe it, the type 8 Serum seems to actually have a regenerative effect on the subjects. We actually cut one's arm open during the test and ten minutes later, it had clotted. Fifteen and it was healing, and within two hours it was nothing but a fading scar. This is insanity, and the worst part is, we can't even determine HOW it does it yet. All these samples of the goo and not a damn clue how it works, it's infuriating! I'm going to try some additional tests with this stuff. I've heard it's got all kinds of uses, fuel enhancer, condiment, so on and so forth, even with this minty taste, but we'll see. There's got to be some rhyme or reason to this damned stuff. - "} - -/obj/item/paper/lar_maria/note_3 - name = "paper note" - info = {"
              Zeng-Hu Pharmaceuticals
              -
              CONFIDENTIAL USE ONLY
              - The samples of Type 8 we've got are almost out, but it seems like we're actually onto something major here. We'll need to get more sent over asap. This stuff may well be the key to immortality. We cut off one of the test subject's arms and they just put it back on and it healed in an hour or so to the point it was working fine. It's nothing short of miraculous. - "} - -/obj/item/paper/lar_maria/note_4 - name = "paper note" - info = {"
              Zeng-Hu Pharmaceuticals
              -
              CONFIDENTIAL USE ONLY
              - Tedd, don't get into the cells with the Type 8 subjects anymore, something's off about them the last couple days. They haven't been moving right, and they seem distracted nearly constantly, and not in a normal way. They also look like they're turning kinda... green? One of the other guys says it's probably just a virus or something reacting with it, but I don't know, something seems off. - "} - -/obj/item/paper/lar_maria/note_5 - name = "paper note" - info = {"
              Zeng-Hu Pharmaceuticals
              -
              CONFIDENTIAL USE ONLY
              - This is a reminder to all facility staff, while we may be doing important work for the good of humanity here, our methods are not necessarily one hundred percent legal under SCG law, and as such you are NOT permitted, as outlined in your contract, to discuss the nature of your work, nor any other related information, with anyone not directly involved with the project without express permission of your facility director. This includes family, friends, local or galactic news outlets and bluenet chat forums. - "} - -/obj/item/paper/lar_maria/note_6 - name = "paper note" - info = {"
              Zeng-Hu Pharmaceuticals
              -
              CONFIDENTIAL USE ONLY
              - Due to the recent incident in the labs involving Type 8 test subject #12 and #33, all research personnel are to refrain from interacting directly with the research subjects involved in serum type 8 testing without the presence of armed guards and full Biohazard protective measures in place. - "} - -/obj/item/paper/lar_maria/note_7 - name = "paper note" - info = {"
              Zeng-Hu Pharmaceuticals
              -
              CONFIDENTIAL USE ONLY
              - Can we get some more diversity in test subjects? I know we're mostly working off SCG undesirables, but martians and frontier colonists aren't exactly the most varied bunch. We could majorly benefit from having some Skrell test subjects, for example. Oooh, or one of those GAS things Xynergy's got a monopoly on. - "} - -/obj/item/paper/lar_maria/note_8 - name = "paper note" - info = {"
              Zeng-Hu Pharmaceuticals
              -
              CONFIDENTIAL USE ONLY
              - On a related note, can we get some more female subjects? There's been some discussion about gender related differences in reactions to some of the chemicals we're working on. Testosterone and shit affecting chemical balances or something, I'm not sure, point is, variety. - "} - -/obj/item/paper/lar_maria/note_9 - name = "paper note" - info = "can we get some fresh carp sometime? Or freshish? Or frozen? I just really want carp, ok? I'm willing to pay for it if so." - -/datum/ai_holder/simple_animal/lar_maria - speak_chance = 50 - -/datum/say_list/lar_maria - speak = list("Die!", "Fresh meat!", "Hurr!", "You said help will come!", "I did nothing!", "Eat my fist!", "One for the road!") - emote_see = list("cries", "grins insanely", "itches fiercly", "scratches his face", "shakes his fists above his head") - emote_hear = list("roars", "giggles", "breathes loudly", "mumbles", "yells something unintelligible") \ No newline at end of file diff --git a/maps/away/lar_maria/lar_maria_areas.dm b/maps/away/lar_maria/lar_maria_areas.dm deleted file mode 100644 index 456ea3fb735c6..0000000000000 --- a/maps/away/lar_maria/lar_maria_areas.dm +++ /dev/null @@ -1,71 +0,0 @@ -/area/lar_maria - icon = 'maps/away/lar_maria/lar_maria_sprites.dmi' - -/////////////////////////////Upper level areas -/area/lar_maria/solar_control - name = "Lar Maria Solar Control Room" - icon_state = "solar_control" - -/area/lar_maria/atmos - name = "Lar Maria Atmos Control Room" - icon_state = "atmos" - -/area/lar_maria/library - name = "Lar Maria Library" - icon_state = "library" - -/area/lar_maria/head_m - name = "Lar Maria Head M" - icon_state = "head_m" - -/area/lar_maria/head_f - name = "Lar Maria Head F" - icon_state = "head_f" - -/area/lar_maria/hallway - name = "Lar Maria Hallway" - icon_state = "hallway" - -/area/lar_maria/office - name = "Lar Maria Office and Infirmary" - icon_state = "office" - -/area/lar_maria/mess_hall - name = "Lar Maria Mess Hall" - icon_state = "mess_hall" - -/area/lar_maria/dorms - name = "Lar Maria Dormitory" - icon_state = "dorms" -/////////////////////////////Lower level areas -/area/lar_maria/cells - name = "Lar Maria Holding Area" - icon_state = "cells" - -/area/lar_maria/sec_wing - name = "Lar Maria Security Wing" - icon_state = "sec_wing" - -/area/lar_maria/vir_access - name = "Lar Maria Virology Access" - icon_state = "vir_access" - -/area/lar_maria/morgue - name = "Lar Maria Morgue" - icon_state = "morgue" - -/area/lar_maria/vir_hallway - name = "Lar Maria Virology Hallway" - icon_state = "vir_hallway" - -/area/lar_maria/vir_ward - name = "Lar Maria Virology Ward" - icon_state = "vir_ward" - -/area/lar_maria/vir_main - name = "Lar Maria Virology Main Lab" - icon_state = "vir_main" - -/area/lar_maria/vir_aux - name = "Lar Maria Virology Auxilary Lab" - icon_state = "vir_aux" diff --git a/maps/away/lar_maria/lar_maria_clothing_sprites.dmi b/maps/away/lar_maria/lar_maria_clothing_sprites.dmi deleted file mode 100644 index 8e228bc08452b..0000000000000 Binary files a/maps/away/lar_maria/lar_maria_clothing_sprites.dmi and /dev/null differ diff --git a/maps/away/lar_maria/lar_maria_sprites.dmi b/maps/away/lar_maria/lar_maria_sprites.dmi deleted file mode 100644 index c2199908072ba..0000000000000 Binary files a/maps/away/lar_maria/lar_maria_sprites.dmi and /dev/null differ diff --git a/maps/away/lost_supply_base/lost_supply_base.dm b/maps/away/lost_supply_base/lost_supply_base.dm deleted file mode 100644 index 1a84038da3f24..0000000000000 --- a/maps/away/lost_supply_base/lost_supply_base.dm +++ /dev/null @@ -1,43 +0,0 @@ -#include "lost_supply_base_areas.dm" -#include "../mining/mining_areas.dm" - -/obj/effect/overmap/visitable/sector/lost_supply_base - name = "supply station" - desc = "This looks like abandoned and heavy damaged supply station." - icon_state = "object" - known = FALSE - - initial_generic_waypoints = list( - "nav_lost_supply_base_1", - "nav_lost_supply_base_2", - "nav_lost_supply_base_3", - "nav_lost_supply_base_antag" - ) - -/datum/map_template/ruin/away_site/lost_supply_base - name = "Lost Supply Base" - id = "awaysite_lost_supply_base" - description = "An abandoned supply base." - suffixes = list("lost_supply_base/lost_supply_base.dmm") - spawn_cost = 1 - generate_mining_by_z = 1 - area_usage_test_exempted_root_areas = list(/area/lost_supply_base) - apc_test_exempt_areas = list( - /area/lost_supply_base/solar = NO_SCRUBBER|NO_VENT - ) - -/obj/effect/shuttle_landmark/nav_lost_supply_base/nav1 - name = "Abandoned Supply Base Navpoint #1" - landmark_tag = "nav_lost_supply_base_1" - -/obj/effect/shuttle_landmark/nav_lost_supply_base/nav2 - name = "Abandoned Supply Base Navpoint #2" - landmark_tag = "nav_lost_supply_base_2" - -/obj/effect/shuttle_landmark/nav_lost_supply_base/nav3 - name = "Abandoned Supply Base Navpoint #3" - landmark_tag = "nav_lost_supply_base_3" - -/obj/effect/shuttle_landmark/nav_lost_supply_base/navantag - name = "Abandoned Supply Base Navpoint #4" - landmark_tag = "nav_lost_supply_base_antag" \ No newline at end of file diff --git a/maps/away/lost_supply_base/lost_supply_base.dmm b/maps/away/lost_supply_base/lost_supply_base.dmm deleted file mode 100644 index 652cef744a960..0000000000000 --- a/maps/away/lost_supply_base/lost_supply_base.dmm +++ /dev/null @@ -1,12356 +0,0 @@ -//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE -"aa" = ( -/turf/space, -/area/space) -"ab" = ( -/obj/structure/lattice, -/obj/structure/grille, -/turf/space, -/area/space) -"ac" = ( -/obj/structure/lattice, -/turf/space, -/area/space) -"ad" = ( -/obj/machinery/power/tracker, -/obj/structure/cable/yellow{ - d2 = 2; - icon_state = "0-2" - }, -/turf/simulated/floor/airless, -/area/space) -"ae" = ( -/obj/effect/shuttle_landmark/nav_lost_supply_base/nav3, -/turf/space, -/area/space) -"af" = ( -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/airless, -/area/space) -"ag" = ( -/obj/structure/cable/yellow{ - d2 = 2; - icon_state = "0-2" - }, -/obj/machinery/power/solar{ - id = "auxsolarstarboard"; - name = "Starboard Auxiliary Solar Array" - }, -/obj/effect/floor_decal/solarpanel, -/turf/simulated/floor/airless, -/area/space) -"ah" = ( -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/item/stack/material/steel, -/turf/simulated/floor/airless, -/area/space) -"ai" = ( -/obj/structure/cable/yellow{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/turf/simulated/floor/airless, -/area/space) -"aj" = ( -/obj/structure/cable/yellow{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/airless, -/area/space) -"ak" = ( -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/airless, -/area/space) -"al" = ( -/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/structure/cable/yellow{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/turf/simulated/floor/airless, -/area/space) -"am" = ( -/obj/structure/cable/yellow{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/airless, -/area/space) -"an" = ( -/obj/structure/cable/yellow{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/turf/simulated/floor/airless, -/area/space) -"ao" = ( -/obj/structure/cable/yellow, -/obj/machinery/power/solar{ - id = "auxsolarstarboard"; - name = "Starboard Auxiliary Solar Array" - }, -/obj/effect/floor_decal/solarpanel, -/turf/simulated/floor/airless, -/area/space) -"ap" = ( -/turf/simulated/floor/airless, -/area/space) -"aq" = ( -/obj/item/stack/material/rods, -/turf/space, -/area/space) -"ar" = ( -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/item/stack/material/rods{ - amount = 50 - }, -/obj/item/stack/material/steel, -/turf/simulated/floor/airless, -/area/space) -"as" = ( -/obj/machinery/power/solar{ - id = "auxsolarstarboard"; - name = "Starboard Auxiliary Solar Array" - }, -/obj/effect/floor_decal/solarpanel, -/turf/simulated/floor/airless, -/area/space) -"at" = ( -/obj/effect/shuttle_landmark/nav_lost_supply_base/nav1, -/turf/space, -/area/space) -"au" = ( -/obj/machinery/power/solar{ - id = "auxsolarstarboard"; - name = "Starboard Auxiliary Solar Array" - }, -/obj/structure/cable/yellow, -/obj/effect/floor_decal/solarpanel, -/turf/simulated/floor/airless, -/area/space) -"av" = ( -/obj/structure/girder/displaced, -/turf/space, -/area/space) -"aw" = ( -/obj/structure/lattice, -/obj/structure/grille, -/obj/structure/grille, -/turf/simulated/floor/airless, -/area/space) -"ax" = ( -/turf/simulated/wall/r_wall, -/area/lost_supply_base/solar) -"ay" = ( -/obj/machinery/door/airlock/external{ - frequency = 1379; - icon_state = "door_locked"; - id_tag = "solar_outer"; - locked = 1; - name = "Solar External Access" - }, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/shield_diffuser, -/turf/simulated/floor/plating, -/area/lost_supply_base/solar) -"az" = ( -/obj/machinery/embedded_controller/radio/airlock/airlock_controller{ - id_tag = "solar_starboard_airlock"; - pixel_x = 24; - req_access = newlist(); - tag_airpump = "solar_starboard_pump"; - tag_chamber_sensor = "solar_starboard_sensor"; - tag_exterior_door = "solar_starboard_outer"; - tag_interior_door = "solar_starboard_inner" - }, -/obj/machinery/atmospherics/unary/vent_pump/high_volume/airlock{ - id_tag = "solar_starboard_pump" - }, -/obj/machinery/airlock_sensor{ - id_tag = "solar_starboard_sensor"; - pixel_x = 24; - pixel_y = 12 - }, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/effect/floor_decal/industrial/warning/full, -/obj/machinery/light/small{ - dir = 8 - }, -/turf/simulated/floor/plating, -/area/lost_supply_base/solar) -"aA" = ( -/turf/simulated/wall/r_wall, -/area/lost_supply_base) -"aB" = ( -/obj/machinery/door/airlock/external{ - frequency = 1379; - icon_state = "door_locked"; - id_tag = "solar_inner"; - locked = 1; - name = "Solar Access" - }, -/obj/machinery/atmospherics/pipe/simple/hidden, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/plating, -/area/lost_supply_base/solar) -"aC" = ( -/turf/simulated/wall/r_wall, -/area/lost_supply_base/office) -"aD" = ( -/turf/space, -/area/lost_supply_base) -"aE" = ( -/obj/structure/lattice, -/turf/space, -/area/lost_supply_base) -"aF" = ( -/obj/machinery/portable_atmospherics/canister/air, -/obj/machinery/atmospherics/portables_connector, -/turf/simulated/floor/airless, -/area/lost_supply_base) -"aG" = ( -/turf/simulated/floor/airless, -/area/lost_supply_base) -"aH" = ( -/obj/machinery/light_construct{ - dir = 1 - }, -/turf/simulated/floor/airless, -/area/lost_supply_base) -"aI" = ( -/obj/structure/cable{ - d2 = 2; - icon_state = "0-2" - }, -/obj/machinery/power/apc{ - dir = 1; - name = "north bump"; - pixel_y = 24 - }, -/turf/simulated/floor/airless, -/area/lost_supply_base) -"aJ" = ( -/obj/structure/table/rack, -/obj/random/tech_supply, -/obj/random/tech_supply, -/obj/random/tech_supply, -/obj/random/toolbox, -/turf/simulated/floor/airless, -/area/lost_supply_base) -"aK" = ( -/turf/simulated/wall, -/area/lost_supply_base/solar) -"aL" = ( -/obj/machinery/power/solar_control{ - id = "suuplybasesolar"; - name = "Solar Control" - }, -/obj/structure/cable/yellow{ - d2 = 4; - icon_state = "0-4" - }, -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/lost_supply_base/solar) -"aM" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden{ - dir = 8 - }, -/obj/machinery/access_button{ - command = "cycle_interior"; - frequency = 1379; - master_tag = "solar_starboard_airlock"; - name = "interior access button"; - pixel_x = 24; - pixel_y = 24; - req_access = newlist() - }, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/plating, -/area/lost_supply_base/solar) -"aN" = ( -/obj/machinery/portable_atmospherics/canister/air/airlock, -/obj/machinery/atmospherics/portables_connector{ - dir = 8 - }, -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 1 - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/plating, -/area/lost_supply_base/solar) -"aO" = ( -/obj/structure/cable{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 - }, -/turf/simulated/floor/tiled/airless, -/area/lost_supply_base) -"aP" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/tiled/airless, -/area/lost_supply_base) -"aQ" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/wall/r_wall, -/area/lost_supply_base/office) -"aR" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/item/paper, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 8 - }, -/turf/simulated/floor/tiled/airless, -/area/lost_supply_base/office) -"aS" = ( -/obj/structure/cable{ - d2 = 8; - icon_state = "0-8" - }, -/obj/machinery/power/apc{ - dir = 1; - name = "north bump"; - pixel_y = 24 - }, -/turf/simulated/floor/tiled/airless, -/area/lost_supply_base/office) -"aT" = ( -/obj/structure/bed/chair/comfy/captain, -/turf/simulated/floor/tiled/airless, -/area/lost_supply_base/office) -"aU" = ( -/obj/machinery/computer/modular{ - dir = 8 - }, -/turf/simulated/floor/tiled/airless, -/area/lost_supply_base/office) -"aV" = ( -/turf/simulated/floor/tiled/airless, -/area/lost_supply_base/office) -"aW" = ( -/obj/item/paper, -/obj/structure/safe, -/obj/random/drinkbottle, -/obj/random/handgun, -/turf/simulated/floor/tiled/airless, -/area/lost_supply_base/office) -"aX" = ( -/obj/machinery/atmospherics/unary/vent_pump/tank{ - dir = 4; - external_pressure_bound = 0; - external_pressure_bound_default = 0; - icon_state = "map_vent_in"; - id_tag = "n2_out"; - initialize_directions = 1; - internal_pressure_bound = 4000; - internal_pressure_bound_default = 4000; - pressure_checks = 2; - pressure_checks_default = 2; - pump_direction = 0; - use_power = 1 - }, -/turf/simulated/floor/airless, -/area/lost_supply_base) -"aY" = ( -/obj/machinery/atmospherics/binary/pump/on{ - dir = 8; - target_pressure = 200 - }, -/turf/simulated/floor/airless, -/area/lost_supply_base) -"aZ" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/cyan{ - dir = 4 - }, -/turf/simulated/wall/r_wall, -/area/lost_supply_base) -"ba" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/cyan{ - dir = 9 - }, -/turf/simulated/floor/airless, -/area/lost_supply_base) -"bb" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 5; - icon_state = "warning" - }, -/turf/simulated/floor/airless, -/area/lost_supply_base) -"bc" = ( -/obj/random/projectile, -/obj/effect/landmark/corpse/syndicate, -/turf/simulated/floor/airless, -/area/lost_supply_base) -"bd" = ( -/obj/random/trash, -/turf/simulated/floor/airless, -/area/lost_supply_base) -"be" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/airless, -/area/lost_supply_base) -"bf" = ( -/obj/structure/closet/crate/solar, -/turf/simulated/floor/plating, -/area/lost_supply_base/solar) -"bg" = ( -/obj/machinery/atmospherics/binary/pump/on{ - dir = 1; - target_pressure = 200 - }, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/turf/simulated/floor/plating, -/area/lost_supply_base/solar) -"bh" = ( -/obj/machinery/power/terminal, -/obj/structure/cable/yellow{ - d2 = 8; - icon_state = "0-8" - }, -/obj/machinery/light/small{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/lost_supply_base/solar) -"bi" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/tiled/airless, -/area/lost_supply_base) -"bj" = ( -/turf/simulated/floor/tiled/airless, -/area/lost_supply_base) -"bk" = ( -/obj/structure/table/steel_reinforced, -/obj/random/handgun, -/turf/simulated/floor/tiled/airless, -/area/lost_supply_base/office) -"bl" = ( -/obj/structure/table/steel_reinforced, -/turf/simulated/floor/tiled/airless, -/area/lost_supply_base/office) -"bm" = ( -/obj/item/stack/tile/floor_dark{ - pixel_x = 5; - pixel_y = -3 - }, -/obj/item/stack/material/steel, -/turf/simulated/floor/tiled/airless{ - icon_state = "steel_burned0" - }, -/area/lost_supply_base/office) -"bn" = ( -/turf/simulated/floor/tiled/airless{ - icon_state = "steel_burned0" - }, -/area/lost_supply_base/office) -"bo" = ( -/obj/item/stack/tile/floor_dark{ - pixel_x = 5; - pixel_y = -3 - }, -/turf/space, -/area/space) -"bp" = ( -/obj/effect/overmap/visitable/sector/lost_supply_base, -/turf/space, -/area/space) -"bq" = ( -/obj/effect/floor_decal/industrial/hatch/yellow, -/turf/simulated/floor/airless, -/area/lost_supply_base) -"br" = ( -/obj/machinery/door/airlock/external{ - frequency = 1380; - glass = 1380; - icon_state = "door_locked"; - id_tag = "centcom_shuttle_bay_door"; - locked = 1; - name = "Transport Airlock" - }, -/turf/simulated/floor/airless, -/area/lost_supply_base) -"bs" = ( -/obj/effect/floor_decal/industrial/hatch/yellow, -/obj/machinery/access_button{ - command = "cycle_interior"; - frequency = 1379; - master_tag = "solar_starboard_airlock"; - name = "interior access button"; - pixel_x = -24; - pixel_y = 24; - req_access = newlist() - }, -/turf/simulated/floor/airless, -/area/lost_supply_base) -"bt" = ( -/turf/simulated/floor/tiled/airless{ - icon_state = "steel_broken4" - }, -/area/lost_supply_base) -"bu" = ( -/obj/effect/decal/cleanable/blood, -/obj/effect/floor_decal/industrial/hatch/yellow, -/turf/simulated/floor/airless, -/area/lost_supply_base) -"bv" = ( -/obj/effect/floor_decal/industrial/hatch/yellow, -/obj/effect/floor_decal/industrial/hatch/yellow, -/turf/simulated/floor/airless, -/area/lost_supply_base) -"bw" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/turf/simulated/floor/airless, -/area/lost_supply_base) -"bx" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/airless, -/area/lost_supply_base) -"by" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/table/rack, -/obj/random/tech_supply, -/obj/random/tech_supply, -/obj/random/tech_supply, -/turf/simulated/floor/airless, -/area/lost_supply_base) -"bz" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/wall, -/area/lost_supply_base/solar) -"bA" = ( -/obj/structure/cable{ - d2 = 4; - icon_state = "0-4" - }, -/obj/structure/cable{ - d2 = 8; - icon_state = "0-8" - }, -/obj/machinery/power/apc{ - dir = 8; - name = "west bump"; - pixel_x = -24 - }, -/turf/simulated/floor/plating, -/area/lost_supply_base/solar) -"bB" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/universal, -/obj/structure/cable{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/structure/cable{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/turf/simulated/floor/plating, -/area/lost_supply_base/solar) -"bC" = ( -/obj/machinery/power/smes/buildable{ - RCon_tag = "Supply base MAIN"; - input_level = 5000; - input_level_max = 20000 - }, -/obj/structure/cable{ - d2 = 8; - icon_state = "0-8" - }, -/turf/simulated/floor/plating, -/area/lost_supply_base/solar) -"bD" = ( -/obj/machinery/light{ - dir = 8; - icon_state = "tube1" - }, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/tiled/airless, -/area/lost_supply_base) -"bE" = ( -/obj/item/pen/red, -/turf/simulated/floor/tiled/airless, -/area/lost_supply_base/office) -"bF" = ( -/obj/effect/landmark/corpse/engineer, -/turf/simulated/floor/tiled/airless, -/area/lost_supply_base/office) -"bG" = ( -/turf/simulated/floor/tiled/airless{ - icon_state = "steel_broken4" - }, -/area/lost_supply_base/office) -"bH" = ( -/turf/simulated/floor/tiled/airless{ - icon_state = "steel_broken1" - }, -/area/lost_supply_base/office) -"bI" = ( -/obj/effect/wallframe_spawn/reinforced, -/turf/simulated/floor/airless, -/area/lost_supply_base/office) -"bJ" = ( -/obj/machinery/embedded_controller/radio/airlock/airlock_controller{ - id_tag = "solar_starboard_airlock"; - pixel_x = 24; - req_access = newlist(); - tag_airpump = "solar_starboard_pump"; - tag_chamber_sensor = "solar_starboard_sensor"; - tag_exterior_door = "solar_starboard_outer"; - tag_interior_door = "solar_starboard_inner" - }, -/obj/machinery/airlock_sensor{ - id_tag = "solar_starboard_sensor"; - pixel_x = 24; - pixel_y = 12 - }, -/turf/simulated/floor/airless, -/area/lost_supply_base) -"bK" = ( -/obj/effect/floor_decal/industrial/warning, -/turf/simulated/floor/airless, -/area/lost_supply_base) -"bL" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 6; - icon_state = "warning" - }, -/turf/simulated/floor/airless, -/area/lost_supply_base) -"bM" = ( -/obj/structure/table/rack, -/obj/random/tech_supply, -/obj/random/tech_supply, -/obj/random/tech_supply, -/obj/random/tech_supply, -/obj/item/device/radio, -/turf/simulated/floor/airless, -/area/lost_supply_base) -"bN" = ( -/obj/machinery/atmospherics/pipe/simple/hidden, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/airless, -/area/lost_supply_base/solar) -"bO" = ( -/obj/random/ammo, -/turf/simulated/floor/tiled/airless, -/area/lost_supply_base/office) -"bP" = ( -/obj/structure/girder/displaced, -/turf/simulated/floor/tiled/airless, -/area/lost_supply_base/office) -"bQ" = ( -/turf/space, -/area/lost_supply_base/office) -"bR" = ( -/obj/effect/wallframe_spawn/reinforced, -/turf/simulated/floor/airless, -/area/lost_supply_base) -"bS" = ( -/obj/random/trash, -/obj/effect/floor_decal/industrial/hatch/yellow, -/turf/simulated/floor/airless, -/area/lost_supply_base) -"bT" = ( -/obj/item/stack/tile/floor_dark{ - pixel_x = 5; - pixel_y = -3 - }, -/turf/simulated/floor/airless, -/area/lost_supply_base) -"bU" = ( -/obj/machinery/atmospherics/pipe/simple/hidden, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/airless, -/area/lost_supply_base) -"bV" = ( -/turf/simulated/wall, -/area/lost_supply_base) -"bW" = ( -/turf/simulated/floor/tiled/airless{ - icon_state = "steel_broken1" - }, -/area/lost_supply_base) -"bX" = ( -/obj/machinery/door/airlock{ - name = "Control room" - }, -/turf/simulated/floor/tiled/airless, -/area/lost_supply_base/office) -"bY" = ( -/obj/machinery/atmospherics/unary/vent_scrubber, -/turf/simulated/floor/tiled/airless, -/area/lost_supply_base/office) -"bZ" = ( -/obj/machinery/light, -/turf/simulated/floor/tiled/airless, -/area/lost_supply_base/office) -"ca" = ( -/obj/effect/decal/cleanable/blood/splatter, -/turf/simulated/floor/tiled/airless, -/area/lost_supply_base/office) -"cb" = ( -/turf/simulated/floor/tiled/airless{ - icon_state = "steel_broken0" - }, -/area/lost_supply_base/office) -"cc" = ( -/obj/item/stack/material/steel, -/turf/space, -/area/space) -"cd" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/airless, -/area/lost_supply_base) -"ce" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/turf/simulated/floor/airless, -/area/lost_supply_base) -"cf" = ( -/obj/item/stack/material/rods, -/obj/item/stack/material/steel, -/turf/simulated/floor/airless, -/area/lost_supply_base) -"cg" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, -/turf/simulated/floor/tiled/airless{ - icon_state = "steel_broken4" - }, -/area/lost_supply_base) -"ch" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled/airless, -/area/lost_supply_base) -"ci" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/wall/r_wall, -/area/lost_supply_base/common) -"cj" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/turf/simulated/wall/r_wall, -/area/lost_supply_base/common) -"ck" = ( -/turf/simulated/wall/r_wall, -/area/lost_supply_base/common) -"cl" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 1; - icon_state = "warning" - }, -/turf/simulated/floor/airless, -/area/lost_supply_base) -"cm" = ( -/obj/random/trash, -/turf/simulated/floor/tiled/airless{ - icon_state = "steel_broken1" - }, -/area/lost_supply_base) -"cn" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 5; - icon_state = "warning" - }, -/obj/random/trash, -/turf/simulated/floor/airless, -/area/lost_supply_base) -"co" = ( -/obj/effect/decal/cleanable/blood/gibs/body, -/obj/effect/floor_decal/industrial/hatch/yellow, -/turf/simulated/floor/airless, -/area/lost_supply_base) -"cp" = ( -/obj/structure/door_assembly, -/obj/effect/floor_decal/industrial/hatch/yellow, -/turf/simulated/floor/airless, -/area/lost_supply_base) -"cq" = ( -/obj/machinery/atmospherics/omni/mixer{ - tag_east = 1; - tag_east_con = 0.5; - tag_south = 1; - tag_south_con = 0.5; - tag_west = 2; - use_power = 0 - }, -/turf/simulated/floor/airless, -/area/lost_supply_base) -"cr" = ( -/obj/structure/cable, -/obj/structure/cable{ - d2 = 4; - icon_state = "0-4" - }, -/obj/structure/cable{ - d2 = 2; - icon_state = "0-2" - }, -/turf/simulated/floor/airless, -/area/lost_supply_base) -"cs" = ( -/obj/item/stack/tile/floor_dark{ - pixel_x = 5; - pixel_y = -3 - }, -/obj/item/stack/tile/floor_dark{ - pixel_x = 5; - pixel_y = -3 - }, -/turf/simulated/floor/airless, -/area/lost_supply_base) -"ct" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/airless, -/area/lost_supply_base) -"cu" = ( -/obj/item/stack/tile/floor_dark{ - pixel_x = 5; - pixel_y = -3 - }, -/turf/simulated/floor/tiled/airless, -/area/lost_supply_base) -"cv" = ( -/turf/simulated/wall, -/area/lost_supply_base/common) -"cw" = ( -/obj/machinery/fabricator/replicator, -/turf/simulated/floor/tiled/airless, -/area/lost_supply_base/common) -"cx" = ( -/obj/structure/table/standard, -/obj/structure/cable{ - d2 = 8; - icon_state = "0-8" - }, -/obj/machinery/light{ - dir = 1 - }, -/obj/machinery/power/apc{ - dir = 1; - name = "north bump"; - pixel_y = 24 - }, -/turf/simulated/floor/tiled/airless, -/area/lost_supply_base/common) -"cy" = ( -/obj/machinery/gibber, -/turf/simulated/floor/tiled/airless, -/area/lost_supply_base/common) -"cz" = ( -/obj/structure/closet/secure_closet/freezer/meat, -/obj/machinery/cooker/oven, -/turf/simulated/floor/tiled/airless, -/area/lost_supply_base/common) -"cA" = ( -/obj/structure/closet/secure_closet/freezer/meat, -/obj/machinery/light{ - dir = 1 - }, -/turf/simulated/floor/tiled/airless{ - icon_state = "steel_burned1" - }, -/area/lost_supply_base/common) -"cB" = ( -/obj/structure/closet/secure_closet/freezer/meat, -/obj/structure/closet/secure_closet/freezer/meat, -/turf/simulated/floor/tiled/airless, -/area/lost_supply_base/common) -"cC" = ( -/obj/structure/closet/crate/freezer, -/turf/simulated/floor/airless, -/area/lost_supply_base) -"cD" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 4 - }, -/turf/simulated/floor/airless, -/area/lost_supply_base) -"cE" = ( -/obj/item/stack/material/cardboard, -/turf/simulated/floor/airless, -/area/lost_supply_base) -"cF" = ( -/obj/item/device/scanner/price, -/turf/simulated/floor/airless, -/area/lost_supply_base) -"cG" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/airless, -/area/lost_supply_base) -"cH" = ( -/obj/machinery/portable_atmospherics/canister/carbon_dioxide, -/turf/simulated/floor/airless, -/area/lost_supply_base) -"cI" = ( -/turf/simulated/floor/tiled/airless{ - icon_state = "steel_broken0" - }, -/area/lost_supply_base) -"cJ" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/airless{ - icon_state = "steel_burned1" - }, -/area/lost_supply_base) -"cK" = ( -/turf/simulated/floor/tiled/airless, -/area/lost_supply_base/common) -"cL" = ( -/turf/simulated/floor/tiled/airless{ - icon_state = "steel_burned1" - }, -/area/lost_supply_base/common) -"cN" = ( -/obj/machinery/light_construct{ - dir = 8 - }, -/turf/simulated/floor/airless, -/area/lost_supply_base) -"cO" = ( -/obj/structure/closet/crate/freezer/rations, -/turf/simulated/floor/airless, -/area/lost_supply_base) -"cP" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/turf/simulated/floor/airless, -/area/lost_supply_base) -"cQ" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/wall, -/area/lost_supply_base) -"cR" = ( -/obj/machinery/light_construct{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/airless, -/area/lost_supply_base) -"cS" = ( -/obj/machinery/portable_atmospherics/canister/oxygen, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/turf/simulated/floor/airless, -/area/lost_supply_base) -"cT" = ( -/obj/structure/girder/displaced, -/turf/space, -/area/lost_supply_base) -"cU" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/airless{ - icon_state = "steel_burned0" - }, -/area/lost_supply_base) -"cV" = ( -/obj/random/junk, -/turf/simulated/floor/tiled/airless, -/area/lost_supply_base/common) -"cW" = ( -/obj/effect/wallframe_spawn/reinforced, -/turf/simulated/floor/airless, -/area/lost_supply_base/common) -"cX" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, -/turf/simulated/floor/airless, -/area/lost_supply_base) -"cY" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/airless, -/area/lost_supply_base) -"cZ" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/wall, -/area/lost_supply_base) -"da" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled/airless, -/area/lost_supply_base) -"db" = ( -/obj/machinery/door/window/southleft, -/turf/simulated/floor/tiled/airless{ - icon_state = "steel_burned1" - }, -/area/lost_supply_base/common) -"dc" = ( -/obj/structure/table/standard, -/obj/item/trash/tray{ - pixel_x = 10 - }, -/obj/item/trash/tray, -/turf/simulated/floor/tiled/airless, -/area/lost_supply_base/common) -"dd" = ( -/obj/structure/table/standard, -/turf/simulated/floor/tiled/airless, -/area/lost_supply_base/common) -"de" = ( -/obj/structure/table/standard, -/obj/item/material/kitchen/utensil/fork, -/turf/simulated/floor/tiled/airless, -/area/lost_supply_base/common) -"df" = ( -/obj/structure/table/standard, -/obj/machinery/microwave, -/turf/simulated/floor/tiled/airless, -/area/lost_supply_base/common) -"dg" = ( -/obj/structure/closet/crate/secure/phoron{ - name = "mineral crate"; - req_access = newlist() - }, -/turf/simulated/floor/airless, -/area/lost_supply_base) -"dh" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 4 - }, -/obj/structure/closet/crate/secure/phoron{ - name = "mineral crate"; - req_access = newlist() - }, -/turf/simulated/floor/airless, -/area/lost_supply_base) -"di" = ( -/obj/random/junk, -/turf/simulated/floor/airless, -/area/lost_supply_base) -"dj" = ( -/obj/random/ammo, -/turf/simulated/floor/airless, -/area/lost_supply_base) -"dk" = ( -/obj/structure/mech_wreckage/powerloader, -/obj/effect/decal/cleanable/blood, -/turf/simulated/floor/airless, -/area/lost_supply_base) -"dl" = ( -/obj/machinery/light_construct, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/airless, -/area/lost_supply_base) -"dm" = ( -/obj/item/stack/material/steel, -/turf/simulated/floor/airless, -/area/lost_supply_base) -"dn" = ( -/obj/structure/closet/firecloset, -/turf/simulated/floor/airless, -/area/lost_supply_base) -"do" = ( -/obj/machinery/light{ - dir = 8; - icon_state = "tube1" - }, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/airless, -/area/lost_supply_base) -"dp" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/tiled/airless{ - icon_state = "steel_burned1" - }, -/area/lost_supply_base) -"dq" = ( -/obj/machinery/door/airlock{ - name = "Cantina" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/tiled/airless, -/area/lost_supply_base/common) -"dr" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 8 - }, -/turf/simulated/floor/tiled/airless, -/area/lost_supply_base/common) -"ds" = ( -/obj/structure/closet/crate/secure/gear, -/obj/effect/floor_decal/industrial/warning, -/turf/simulated/floor/airless, -/area/lost_supply_base) -"dt" = ( -/obj/effect/floor_decal/industrial/warning, -/obj/structure/closet/crate/hydroponics, -/turf/simulated/floor/airless, -/area/lost_supply_base) -"du" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 6; - icon_state = "warning" - }, -/obj/item/storage/backpack/dufflebag, -/turf/simulated/floor/airless, -/area/lost_supply_base) -"dv" = ( -/obj/effect/decal/cleanable/blood/drip, -/obj/effect/decal/cleanable/blood/writing, -/turf/simulated/floor/airless, -/area/lost_supply_base) -"dw" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/wall, -/area/lost_supply_base) -"dx" = ( -/obj/item/material/kitchen/utensil/spoon, -/turf/simulated/floor/tiled/airless, -/area/lost_supply_base/common) -"dy" = ( -/obj/structure/bed/chair{ - dir = 4 - }, -/turf/simulated/floor/tiled/airless, -/area/lost_supply_base/common) -"dz" = ( -/obj/structure/table/standard{ - name = "plastic table frame" - }, -/obj/item/trash/plate, -/turf/simulated/floor/tiled/airless, -/area/lost_supply_base/common) -"dA" = ( -/obj/structure/table/standard{ - name = "plastic table frame" - }, -/turf/simulated/floor/tiled/airless, -/area/lost_supply_base/common) -"dB" = ( -/obj/item/material/kitchen/utensil/fork, -/obj/structure/bed/chair{ - dir = 8 - }, -/turf/simulated/floor/tiled/airless, -/area/lost_supply_base/common) -"dC" = ( -/obj/random/trash, -/obj/machinery/light{ - dir = 4; - icon_state = "tube1" - }, -/turf/simulated/floor/tiled/airless, -/area/lost_supply_base/common) -"dJ" = ( -/obj/random/junk, -/obj/effect/floor_decal/industrial/hatch/yellow, -/turf/simulated/floor/airless, -/area/lost_supply_base) -"dL" = ( -/obj/machinery/atmospherics/unary/tank/oxygen, -/turf/simulated/floor/airless, -/area/lost_supply_base) -"dM" = ( -/obj/machinery/atmospherics/unary/tank/air, -/turf/simulated/floor/airless, -/area/lost_supply_base) -"dN" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/airless, -/area/lost_supply_base) -"dO" = ( -/turf/simulated/floor/tiled/airless{ - icon_state = "steel_burned0" - }, -/area/lost_supply_base) -"dP" = ( -/turf/simulated/floor/tiled/airless{ - icon_state = "steel_burned0" - }, -/area/lost_supply_base/common) -"dX" = ( -/obj/structure/window/reinforced{ - dir = 1 - }, -/turf/simulated/floor/airless, -/area/lost_supply_base) -"dY" = ( -/obj/item/stack/tile/floor_dark, -/obj/structure/window/reinforced{ - dir = 1 - }, -/turf/simulated/floor/airless, -/area/lost_supply_base) -"dZ" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 8; - icon_state = "warning" - }, -/turf/simulated/floor/airless, -/area/lost_supply_base) -"eb" = ( -/obj/structure/reagent_dispensers/fueltank, -/turf/simulated/floor/airless, -/area/lost_supply_base) -"ec" = ( -/obj/random/tank, -/obj/machinery/atmospherics/portables_connector{ - dir = 1 - }, -/turf/simulated/floor/airless, -/area/lost_supply_base) -"ed" = ( -/obj/machinery/atmospherics/portables_connector{ - dir = 1 - }, -/turf/simulated/floor/airless, -/area/lost_supply_base) -"ee" = ( -/obj/random/trash, -/turf/simulated/floor/tiled/airless, -/area/lost_supply_base/common) -"ef" = ( -/obj/structure/bed/chair{ - dir = 8 - }, -/turf/simulated/floor/tiled/airless, -/area/lost_supply_base/common) -"el" = ( -/obj/machinery/portable_atmospherics/canister/oxygen, -/turf/simulated/floor/airless, -/area/lost_supply_base) -"em" = ( -/obj/effect/decal/cleanable/blood/splatter, -/obj/effect/landmark/corpse/engineer, -/turf/simulated/floor/airless, -/area/lost_supply_base) -"en" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 8; - icon_state = "warning" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/airless, -/area/lost_supply_base) -"eo" = ( -/obj/random/tool, -/turf/simulated/floor/airless, -/area/lost_supply_base) -"ep" = ( -/obj/random/tank, -/turf/simulated/floor/airless, -/area/lost_supply_base) -"eq" = ( -/obj/structure/closet/medical_wall{ - pixel_x = -30 - }, -/turf/simulated/floor/tiled/airless, -/area/lost_supply_base/common) -"er" = ( -/obj/structure/table/standard{ - name = "plastic table frame" - }, -/obj/item/flame/lighter/random, -/turf/simulated/floor/tiled/airless, -/area/lost_supply_base/common) -"es" = ( -/obj/structure/table/standard{ - name = "plastic table frame" - }, -/obj/item/reagent_containers/food/drinks/cans/waterbottle, -/turf/simulated/floor/tiled/airless, -/area/lost_supply_base/common) -"et" = ( -/obj/machinery/light{ - dir = 4; - icon_state = "tube1" - }, -/turf/simulated/floor/tiled/airless{ - icon_state = "steel_burned0" - }, -/area/lost_supply_base/common) -"ey" = ( -/obj/item/stack/material/cardboard, -/obj/item/grenade/fake, -/turf/simulated/floor/airless, -/area/lost_supply_base) -"ez" = ( -/obj/structure/reagent_dispensers/watertank, -/turf/simulated/floor/airless, -/area/lost_supply_base) -"eA" = ( -/turf/simulated/floor/tiled/airless{ - icon_state = "steel_broken4" - }, -/area/lost_supply_base/common) -"eD" = ( -/obj/machinery/atmospherics/unary/tank/phoron{ - volume = 3200 - }, -/turf/simulated/floor/airless, -/area/lost_supply_base) -"eE" = ( -/obj/item/bedsheet, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/airless, -/area/lost_supply_base) -"eF" = ( -/obj/machinery/atmospherics/unary/vent_scrubber, -/turf/simulated/floor/tiled/airless, -/area/lost_supply_base/common) -"eG" = ( -/obj/machinery/light, -/obj/structure/reagent_dispensers/water_cooler, -/turf/simulated/floor/tiled/airless, -/area/lost_supply_base/common) -"eH" = ( -/obj/machinery/computer/arcade, -/turf/simulated/floor/tiled/airless, -/area/lost_supply_base/common) -"eI" = ( -/obj/machinery/light, -/obj/machinery/computer/arcade, -/turf/simulated/floor/tiled/airless, -/area/lost_supply_base/common) -"eJ" = ( -/obj/machinery/jukebox, -/turf/simulated/floor/tiled/airless, -/area/lost_supply_base/common) -"eQ" = ( -/obj/machinery/portable_atmospherics/canister/phoron, -/turf/simulated/floor/airless, -/area/lost_supply_base) -"eS" = ( -/obj/machinery/atmospherics/portables_connector{ - dir = 1 - }, -/obj/machinery/portable_atmospherics/canister/phoron, -/turf/simulated/floor/airless, -/area/lost_supply_base) -"eT" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 8 - }, -/turf/simulated/floor/tiled/airless, -/area/lost_supply_base) -"eU" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/wall, -/area/lost_supply_base/common) -"eV" = ( -/obj/machinery/door/airlock{ - name = "Cantina" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/turf/simulated/floor/tiled/airless, -/area/lost_supply_base/common) -"eY" = ( -/obj/machinery/portable_atmospherics/canister/nitrogen, -/obj/machinery/portable_atmospherics/canister/nitrogen, -/turf/simulated/floor/airless, -/area/lost_supply_base) -"eZ" = ( -/obj/machinery/portable_atmospherics/canister/nitrogen, -/turf/simulated/floor/airless, -/area/lost_supply_base) -"fa" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 8; - icon_state = "warning" - }, -/obj/effect/floor_decal/industrial/hatch/yellow, -/turf/simulated/floor/airless, -/area/lost_supply_base) -"fb" = ( -/obj/effect/floor_decal/industrial/hatch/yellow, -/turf/simulated/floor/tiled/airless{ - icon_state = "steel_broken0" - }, -/area/lost_supply_base) -"fc" = ( -/obj/machinery/light{ - dir = 8; - icon_state = "tube1" - }, -/obj/random/obstruction, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/airless, -/area/lost_supply_base) -"fd" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/random/obstruction, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/tiled/airless, -/area/lost_supply_base) -"fe" = ( -/obj/machinery/door/airlock{ - name = "Bunk room" - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/tiled/airless, -/area/lost_supply_base/supply) -"ff" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 8 - }, -/turf/simulated/floor/tiled/airless, -/area/lost_supply_base/supply) -"fg" = ( -/obj/structure/closet/emcloset, -/obj/structure/cable{ - d2 = 8; - icon_state = "0-8" - }, -/obj/machinery/power/apc{ - dir = 1; - name = "north bump"; - pixel_y = 24 - }, -/turf/simulated/floor/tiled/airless, -/area/lost_supply_base/supply) -"fh" = ( -/obj/structure/bed, -/turf/simulated/floor/tiled/airless, -/area/lost_supply_base/supply) -"fi" = ( -/obj/structure/closet, -/obj/random/clothing, -/obj/item/trash/liquidfood, -/turf/simulated/floor/tiled/airless, -/area/lost_supply_base/supply) -"fj" = ( -/obj/structure/bed, -/obj/random/plushie, -/turf/simulated/floor/tiled/airless, -/area/lost_supply_base/supply) -"fk" = ( -/obj/structure/closet, -/obj/random/clothing, -/turf/simulated/floor/tiled/airless, -/area/lost_supply_base/supply) -"fl" = ( -/turf/simulated/wall/r_wall, -/area/lost_supply_base/supply) -"fm" = ( -/obj/machinery/portable_atmospherics/canister, -/turf/simulated/floor/airless, -/area/lost_supply_base) -"fn" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 10; - icon_state = "warning" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/airless, -/area/lost_supply_base) -"fo" = ( -/obj/random/junk, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/airless, -/area/lost_supply_base) -"fp" = ( -/turf/simulated/wall, -/area/lost_supply_base/supply) -"fq" = ( -/obj/item/bedsheet, -/turf/simulated/floor/tiled/airless, -/area/lost_supply_base/supply) -"fr" = ( -/turf/simulated/floor/tiled/airless{ - icon_state = "steel_burned0" - }, -/area/lost_supply_base/supply) -"fs" = ( -/turf/simulated/floor/tiled/airless, -/area/lost_supply_base/supply) -"ft" = ( -/obj/structure/table/standard, -/obj/random/smokes, -/obj/item/device/radio, -/turf/simulated/floor/tiled/airless, -/area/lost_supply_base/supply) -"fu" = ( -/obj/effect/shuttle_landmark/nav_lost_supply_base/nav2, -/turf/space, -/area/space) -"fv" = ( -/obj/structure/window/reinforced, -/obj/machinery/portable_atmospherics/canister/carbon_dioxide, -/turf/simulated/floor/airless, -/area/lost_supply_base) -"fw" = ( -/obj/structure/window/reinforced, -/obj/machinery/portable_atmospherics/canister, -/turf/simulated/floor/airless, -/area/lost_supply_base) -"fx" = ( -/obj/machinery/atmospherics/unary/vent_scrubber{ - dir = 1 - }, -/turf/simulated/floor/airless, -/area/lost_supply_base) -"fz" = ( -/obj/random/junk, -/turf/simulated/floor/tiled/airless, -/area/lost_supply_base/supply) -"fA" = ( -/obj/structure/table/standard, -/obj/item/storage/briefcase, -/turf/simulated/floor/tiled/airless, -/area/lost_supply_base/supply) -"fB" = ( -/obj/structure/sign/warning{ - pixel_x = -30 - }, -/obj/machinery/portable_atmospherics/canister/air, -/obj/machinery/atmospherics/portables_connector, -/turf/simulated/floor/airless, -/area/lost_supply_base) -"fC" = ( -/obj/random/energy, -/obj/effect/landmark/corpse/syndicate, -/turf/simulated/floor/airless, -/area/lost_supply_base) -"fD" = ( -/obj/effect/floor_decal/industrial/hatch/yellow, -/obj/effect/landmark/corpse/engineer, -/turf/simulated/floor/airless, -/area/lost_supply_base) -"fE" = ( -/obj/machinery/atmospherics/unary/vent_scrubber, -/turf/simulated/floor/tiled/airless, -/area/lost_supply_base/supply) -"fF" = ( -/obj/machinery/light, -/turf/simulated/floor/tiled/airless, -/area/lost_supply_base/supply) -"fG" = ( -/obj/machinery/light, -/obj/structure/bed, -/turf/simulated/floor/tiled/airless, -/area/lost_supply_base/supply) -"fH" = ( -/obj/structure/largecrate, -/obj/machinery/atmospherics/binary/pump/on{ - dir = 8; - target_pressure = 200 - }, -/turf/simulated/floor/airless, -/area/lost_supply_base) -"fI" = ( -/obj/effect/decal/cleanable/blood, -/turf/simulated/floor/airless, -/area/lost_supply_base) -"fJ" = ( -/obj/item/material/twohanded/fireaxe, -/obj/effect/decal/cleanable/blood, -/obj/effect/floor_decal/industrial/hatch/yellow, -/turf/simulated/floor/airless, -/area/lost_supply_base) -"fK" = ( -/obj/effect/floor_decal/industrial/hatch/yellow, -/obj/effect/decal/cleanable/blood, -/obj/item/stack/tile/floor_dark{ - pixel_x = 5; - pixel_y = -3 - }, -/turf/simulated/floor/airless, -/area/lost_supply_base) -"fL" = ( -/obj/effect/decal/cleanable/blood/writing{ - dir = 4 - }, -/obj/effect/floor_decal/industrial/hatch/yellow, -/turf/simulated/floor/airless, -/area/lost_supply_base) -"fM" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 8 - }, -/turf/simulated/floor/tiled/airless{ - icon_state = "steel_burned1" - }, -/area/lost_supply_base) -"fN" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/item/stack/material/steel, -/turf/simulated/floor/tiled/airless, -/area/lost_supply_base) -"fO" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/wall, -/area/lost_supply_base/supply) -"fP" = ( -/obj/machinery/door/airlock{ - name = "Head" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/turf/simulated/floor/plating, -/area/lost_supply_base/supply) -"fQ" = ( -/obj/structure/door_assembly, -/turf/simulated/floor/airless, -/area/lost_supply_base) -"fR" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 4 - }, -/obj/effect/floor_decal/industrial/hatch/yellow, -/turf/simulated/floor/airless, -/area/lost_supply_base) -"fS" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/item/stack/tile/floor_dark{ - pixel_x = 5; - pixel_y = -3 - }, -/turf/simulated/floor/tiled/airless, -/area/lost_supply_base) -"fT" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/wall, -/area/lost_supply_base/supply) -"fU" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 8 - }, -/turf/simulated/floor/tiled/airless{ - icon_state = "steel_broken0" - }, -/area/lost_supply_base/supply) -"fV" = ( -/turf/simulated/floor/tiled/airless{ - icon_state = "steel_burned1" - }, -/area/lost_supply_base/supply) -"fW" = ( -/turf/simulated/floor/tiled/airless{ - icon_state = "steel_broken0" - }, -/area/lost_supply_base/supply) -"fX" = ( -/obj/item/gun/projectile/shotgun/pump, -/obj/effect/landmark/corpse/syndicate, -/turf/simulated/floor/tiled/airless{ - icon_state = "steel_broken4" - }, -/area/lost_supply_base/supply) -"fY" = ( -/obj/machinery/atmospherics/portables_connector{ - dir = 4 - }, -/turf/simulated/floor/airless, -/area/lost_supply_base) -"fZ" = ( -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 4 - }, -/turf/simulated/floor/airless, -/area/lost_supply_base) -"ga" = ( -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 4 - }, -/turf/simulated/wall/r_wall, -/area/lost_supply_base) -"gb" = ( -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 4 - }, -/obj/machinery/embedded_controller/radio/airlock/airlock_controller{ - id_tag = "solar_starboard_airlock"; - pixel_x = 24; - req_access = newlist(); - tag_airpump = "solar_starboard_pump"; - tag_chamber_sensor = "solar_starboard_sensor"; - tag_exterior_door = "solar_starboard_outer"; - tag_interior_door = "solar_starboard_inner" - }, -/obj/machinery/airlock_sensor{ - id_tag = "solar_starboard_sensor"; - pixel_x = 24; - pixel_y = 12 - }, -/turf/simulated/floor/airless, -/area/lost_supply_base) -"gc" = ( -/obj/effect/floor_decal/industrial/warning, -/obj/machinery/atmospherics/binary/pump/on{ - dir = 8; - target_pressure = 200 - }, -/turf/simulated/floor/airless, -/area/lost_supply_base) -"gd" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 6; - icon_state = "warning" - }, -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 4 - }, -/turf/simulated/floor/airless, -/area/lost_supply_base) -"ge" = ( -/obj/machinery/atmospherics/portables_connector{ - dir = 8 - }, -/obj/effect/floor_decal/industrial/warning/full, -/turf/simulated/floor/airless, -/area/lost_supply_base) -"gf" = ( -/obj/structure/closet/emcloset, -/turf/simulated/floor/airless, -/area/lost_supply_base) -"gg" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/turf/simulated/floor/tiled/airless, -/area/lost_supply_base) -"gh" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/item/stack/tile/floor_dark{ - pixel_x = 5; - pixel_y = -3 - }, -/turf/simulated/floor/tiled/airless, -/area/lost_supply_base) -"gi" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled/airless, -/area/lost_supply_base/supply) -"gj" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/turf/simulated/floor/tiled/airless, -/area/lost_supply_base/supply) -"gk" = ( -/obj/machinery/door/airlock{ - name = "Head" - }, -/turf/simulated/floor/tiled/airless, -/area/lost_supply_base/supply) -"gl" = ( -/obj/structure/lattice, -/obj/structure/grille, -/turf/space, -/area/lost_supply_base) -"gm" = ( -/obj/machinery/light, -/turf/simulated/floor/airless, -/area/lost_supply_base) -"gn" = ( -/obj/structure/closet/crate/trashcart, -/obj/item/mop, -/obj/item/storage/box/lights/bulbs, -/obj/machinery/atmospherics/unary/vent_pump{ - dir = 1; - external_pressure_bound = 0; - external_pressure_bound_default = 0; - icon_state = "map_vent_in"; - initialize_directions = 1; - internal_pressure_bound = 4000; - internal_pressure_bound_default = 4000; - pressure_checks = 2; - pressure_checks_default = 2; - pump_direction = 0; - use_power = 1 - }, -/turf/simulated/floor/tiled/airless, -/area/lost_supply_base) -"go" = ( -/obj/item/stack/material/steel, -/turf/simulated/floor/tiled/airless, -/area/lost_supply_base) -"gq" = ( -/obj/structure/hygiene/toilet{ - dir = 1 - }, -/obj/machinery/light/small, -/turf/simulated/floor/tiled/airless, -/area/lost_supply_base/supply) -"gr" = ( -/obj/structure/hygiene/shower{ - dir = 8 - }, -/obj/random/soap, -/obj/machinery/light/small, -/turf/simulated/floor/tiled/airless, -/area/lost_supply_base/supply) -"gs" = ( -/obj/effect/shuttle_landmark/nav_lost_supply_base/navantag, -/turf/space, -/area/space) -"gt" = ( -/turf/unsimulated/mask, -/area/mine/unexplored) -"gu" = ( -/turf/simulated/floor/asteroid, -/area/mine/explored) -"ib" = ( -/obj/structure/hygiene/sink{ - dir = 8; - pixel_x = -12; - pixel_y = 2 - }, -/obj/item/storage/mirror{ - pixel_x = -32 - }, -/obj/machinery/light/small, -/turf/simulated/floor/tiled/airless{ - icon_state = "steel_broken0" - }, -/area/lost_supply_base/supply) -"ik" = ( -/obj/structure/shuttle/engine/heater{ - dir = 8 - }, -/obj/structure/window/reinforced{ - dir = 4 - }, -/turf/simulated/floor/airless, -/area/space) -"mI" = ( -/obj/effect/floor_decal/industrial/hatch/yellow, -/turf/simulated/floor/airless, -/area/space) -"pr" = ( -/obj/structure/window/reinforced{ - dir = 8 - }, -/obj/item/stock_parts/circuitboard/broken, -/obj/machinery/constructable_frame/machine_frame, -/turf/simulated/floor/airless, -/area/space) -"sO" = ( -/obj/item/bikehorn/rubberducky, -/turf/simulated/floor/airless, -/area/space) -"zC" = ( -/obj/effect/paint/red, -/turf/simulated/wall/r_titanium, -/area/space) -"zL" = ( -/obj/structure/closet/crate/freezer, -/obj/item/organ/internal/kidneys, -/obj/item/organ/internal/kidneys, -/obj/item/organ/internal/kidneys, -/turf/simulated/floor/airless, -/area/space) -"DF" = ( -/obj/structure/shuttle/engine/propulsion{ - dir = 8 - }, -/turf/simulated/floor/airless, -/area/space) -"EM" = ( -/obj/effect/paint/silver, -/turf/simulated/wall/r_titanium, -/area/space) -"Rn" = ( -/obj/machinery/artifact, -/turf/simulated/floor/airless, -/area/space) -"Wm" = ( -/obj/effect/paint/red, -/obj/structure/sign/warning/fire, -/turf/simulated/wall/r_titanium, -/area/space) - -(1,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(2,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(3,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(4,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(5,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(6,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(7,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(8,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(9,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -gu -gu -gt -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(10,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -gt -gt -gt -gt -gt -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(11,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -gt -gt -gt -gt -gt -aa -gu -gu -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(12,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -gt -gt -gt -gt -gt -gt -gt -gt -gt -gt -gt -gt -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(13,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -gt -gt -gt -gt -gt -gt -gt -gt -gt -gt -gt -gt -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(14,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -gt -gt -gt -gt -gt -gt -gt -gt -gt -gt -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(15,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -gt -gt -gt -gt -gt -gt -gt -gt -gt -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(16,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -gt -gt -gt -gt -gt -gt -gt -gt -gt -gt -gt -gt -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(17,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -gt -gt -gt -gt -gt -gt -gt -gt -gt -gt -gt -gt -gt -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(18,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -gs -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -gt -gt -gt -gt -gt -gt -gt -gt -gt -gt -gt -gt -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(19,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -at -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -gt -gt -gt -gt -gt -gt -gt -gt -gt -gt -gu -aa -aa -aa -aa -aa -aa -aa -gt -gt -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(20,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -gt -gt -gt -gt -gt -aa -gt -gt -gt -gt -aa -aa -aa -aa -aa -aa -aa -gt -gt -gt -gt -gt -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(21,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -gt -gt -gt -gt -aa -aa -aa -aa -aa -aa -gt -gt -gt -gt -gt -gt -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(22,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -gt -gt -gt -gt -aa -aa -aa -aa -aa -gt -gt -gt -gt -gt -gt -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(23,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -gt -gt -gt -aa -aa -aa -aa -aa -aa -gt -gt -gt -gt -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(24,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -gt -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(25,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(26,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(27,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(28,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -gt -aa -aa -aa -aa -aa -aa -aa -aa -"} -(29,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -gt -gt -aa -aa -aa -aa -aa -aa -aa -aa -"} -(30,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -gt -gt -gu -gu -gt -gt -gu -gu -gt -aa -aa -aa -aa -aa -aa -gt -gt -gu -gu -gu -aa -aa -aa -aa -aa -"} -(31,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -gu -gt -gu -gt -gt -gu -gu -gt -gt -gu -gu -gt -aa -aa -gt -gt -gu -gu -gt -gt -gt -aa -aa -aa -"} -(32,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -gt -aa -aa -aa -aa -gu -gt -gu -gt -gt -gt -gt -gt -gt -gt -gt -gt -aa -aa -gt -gt -gu -gu -gt -gt -gt -aa -aa -aa -"} -(33,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -gt -aa -aa -aa -aa -aa -aa -gu -gt -gt -gt -gt -gt -gt -gt -gt -gu -gu -aa -gt -gt -gt -gt -gt -gt -gt -aa -aa -aa -"} -(34,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -gt -gt -gt -gt -aa -aa -aa -gu -gt -gt -gt -gt -gt -gt -gt -gt -gt -gt -aa -gt -gt -gt -gt -gt -gt -gt -aa -aa -aa -"} -(35,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -gt -gt -gt -gu -gt -gt -gt -gt -gt -gt -gt -gt -gt -gt -gt -gt -gt -aa -gt -gt -gt -gt -gt -gt -gt -aa -aa -aa -"} -(36,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -gt -gt -gt -gt -gt -gt -gt -gt -gt -gt -gt -gt -gt -gt -gt -gt -gt -gu -gt -aa -aa -aa -aa -gt -gt -aa -aa -aa -"} -(37,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -gt -gt -gt -gt -gt -gt -gt -gt -gt -gt -gt -gt -gt -gt -gt -gt -gt -gt -gt -gu -gt -gt -gu -gu -gt -gt -gt -aa -aa -aa -"} -(38,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -gt -gt -gt -gt -gt -gt -gt -gt -gt -gt -gt -gt -gt -gt -gt -gt -gt -gt -gt -gu -gt -gt -gu -gu -gt -gt -gt -aa -aa -aa -"} -(39,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -Wm -DF -DF -DF -DF -Wm -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -gt -gt -gt -gt -gt -gt -gt -gt -gt -gt -gt -gt -gt -gt -gt -gt -gt -gt -gt -gt -gt -gt -gt -gt -gt -gt -aa -aa -aa -aa -"} -(40,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -zC -ik -ik -ik -ik -zC -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -gt -gt -gu -gt -gt -gt -gt -gt -gt -gt -gt -gt -gt -gt -gt -gt -gt -gt -gt -gt -gt -gt -gt -gt -gt -gu -aa -aa -aa -aa -"} -(41,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -EM -zL -ap -ap -Rn -EM -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -gt -gt -gt -gt -gt -gt -gt -gt -gt -gt -gt -gt -gt -gt -gt -gt -gt -gt -gt -gt -gt -gt -gt -gt -gt -gt -gt -gt -aa -aa -aa -aa -"} -(42,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -mI -ap -ac -ap -ap -mI -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -gt -gt -gt -gt -gt -gt -gt -gt -gt -gt -gt -gt -gt -gt -gt -gt -gt -gt -gt -gt -gt -gt -gt -gt -gt -gt -gt -gt -aa -aa -aa -aa -"} -(43,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -mI -ap -ac -ac -ap -mI -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -gt -gt -gt -gt -gt -gt -gt -gt -gt -gt -gt -gt -gt -gt -gt -gt -gt -gt -gt -gt -gt -gt -gt -gt -gt -gt -gt -gt -aa -aa -aa -aa -"} -(44,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aq -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -mI -ap -ap -ap -ap -mI -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -gt -gt -gu -gu -gt -gt -gt -gt -gt -gt -gt -gt -gt -gt -gt -gt -gt -gt -gt -gt -gt -gt -gt -gt -gt -gt -gt -gt -gu -aa -aa -aa -"} -(45,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -EM -sO -ap -ap -ap -EM -aa -aa -aD -aD -aD -fY -gl -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -gt -gt -gu -gu -gt -gu -gu -gt -gt -gt -gt -gt -gt -gt -gt -gt -gt -gt -gt -gt -gt -gt -gt -gt -gt -gt -gt -gt -gu -aa -aa -aa -"} -(46,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aq -aa -aa -aa -aa -aa -aa -aa -aq -aa -aa -aa -bp -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -EM -EM -pr -ac -EM -EM -aa -aa -aD -aD -aD -fZ -gl -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -gt -gt -gt -gt -aa -aa -gt -gt -gt -gt -gt -gt -gt -gt -gt -gt -gt -gt -gt -gt -gt -gt -gt -gt -gt -gt -gt -gt -gu -gu -aa -aa -"} -(47,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aD -aD -aE -aA -aA -aa -aa -aa -aa -aa -aa -aa -aa -aa -EM -EM -aa -EM -aa -aa -aa -aA -aA -br -ga -aA -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -gt -gt -gt -gt -aa -aa -aa -aa -gt -gt -gt -gt -gt -gt -gt -gt -gt -gt -gt -gt -gt -gt -gt -gt -gt -gt -gt -gt -gu -gt -aa -aa -"} -(48,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aq -av -aa -aa -aE -aD -aD -aG -aA -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aA -di -bq -fZ -aA -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -gt -gt -gt -gt -aa -aa -gt -aa -gt -gt -gt -gt -gt -gt -gt -gt -gt -gt -gt -gt -gt -gt -gt -gt -gt -aa -aa -aa -gu -gt -aa -aa -"} -(49,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aq -aa -aE -aX -bq -aG -bR -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -bR -aX -bq -fZ -bR -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -gt -gt -gu -gt -gt -gt -gt -gt -gt -gt -gt -gt -gt -gt -gt -gt -gt -gt -gt -aa -aa -aa -aa -gt -gt -aa -aa -"} -(50,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -ac -ab -aa -aa -aa -aa -aA -aY -bq -bJ -aA -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aA -fH -bq -gb -aA -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -gt -gt -gt -gt -gt -gu -gt -gt -gt -gt -gt -gu -gt -gt -gt -gt -gt -gt -gt -gt -gt -gt -gt -gt -aa -aa -aa -aa -aa -aa -"} -(51,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ac -ac -aa -aa -ac -aa -aa -aq -aa -aq -aa -ab -ab -aw -ab -aA -aA -aZ -br -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aZ -fQ -ga -aA -aA -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -gt -gt -gu -gu -gt -gt -gt -gt -gt -gt -gt -gt -gt -gt -gt -gt -gt -gt -gt -gt -gt -gt -gt -aa -aa -aa -aa -aa -"} -(52,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ac -ag -ai -ao -ac -ag -ai -ao -aa -aa -ai -ao -aa -aa -aa -aA -aF -ba -bs -bK -aG -aG -cl -cC -cN -cO -aG -ds -bW -dX -el -el -aG -aG -eY -aG -fv -fB -ba -bs -gc -aG -aA -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -gu -gt -gu -gt -gt -gt -gt -gt -gt -gt -gt -gt -gt -gt -gt -gt -gt -gt -gt -gt -gt -gu -gt -aa -aa -aa -aa -aa -"} -(53,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -aa -ag -aj -ao -ac -ag -aj -ao -ac -ag -aj -ao -aa -aa -aa -aA -aG -bb -bt -bL -aG -aG -cm -cC -cO -cO -dg -dt -aG -dX -el -el -el -aG -aG -fm -fw -aG -bb -fR -gd -aG -aA -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -gt -gt -gu -gt -gt -gt -gt -gt -gt -gt -gt -gt -gt -gt -gt -gt -gt -gt -gt -gt -gt -gu -gu -aa -aa -aa -aa -aa -"} -(54,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ac -ag -aj -ao -ac -ag -aj -ao -ac -ag -aj -ao -aa -aa -aa -aA -aG -aG -bq -aG -aG -aG -cn -cD -cD -cD -dh -du -aG -dY -el -aG -aG -eQ -eZ -aG -fw -aG -aG -bq -ge -eQ -aA -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -gt -gt -gt -gt -gt -gt -gt -gt -gt -gt -gt -gt -gt -gt -gt -gt -gt -gt -gt -gt -gu -gu -gt -aa -aa -aa -aa -aa -"} -(55,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ac -ag -aj -ao -ac -ag -aj -ao -ac -ag -aj -ao -aa -aa -aa -aA -aG -bc -bu -aG -aG -aG -aG -cE -aG -bq -di -aG -aG -dZ -dZ -dZ -dZ -dZ -fa -dZ -dZ -aG -aG -bq -aG -gm -aA -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -gt -gt -gt -gt -gt -gt -gt -gt -gt -gt -gt -gt -gt -gt -gt -gt -gu -gt -gt -gt -gu -gu -gt -gu -aa -aa -aa -aa -"} -(56,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -aa -ag -aj -ao -ac -ag -aj -ao -ac -ag -aj -ao -aa -aa -aa -aA -aH -bd -bq -aG -aG -bd -aG -cF -aG -bq -aG -aG -aG -aG -aG -ey -aG -aG -bq -aG -aG -fC -fI -bq -aG -aG -aA -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -gt -gt -gt -gt -gt -gt -gt -gt -gt -gt -gt -gt -gt -gt -gt -gt -gt -gt -gt -gt -gt -gt -gt -gt -aa -aa -aa -aa -"} -(57,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -aa -ag -aj -ao -ac -ag -aj -ao -ac -ag -aj -ao -aa -aa -aa -aA -aG -aG -bv -bq -bS -bq -bq -bq -bq -bq -bq -bq -dJ -bq -bq -bq -bq -bq -bv -bq -bq -fD -fJ -bq -aG -aG -aA -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -gt -gt -gt -gt -gt -gt -gt -gt -gt -gt -gt -gt -gt -gt -gt -gt -gu -gt -gt -gt -gt -gt -aa -aa -aa -aa -"} -(58,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ac -ag -aj -ao -ac -ag -aj -ao -ac -ag -aj -ao -aa -aa -aa -aA -aI -be -bw -aG -aG -aX -co -bT -aG -aG -aG -dj -aG -aG -aG -aG -aG -aG -fb -aG -aG -aG -fK -aG -gf -aG -aA -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -gt -aa -aa -gu -gt -gt -gt -gt -gu -gt -gt -gt -gt -gt -gt -gt -gu -gu -gt -gt -gt -gt -aa -aa -aa -aa -"} -(59,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ac -ag -aj -ao -ac -ag -aj -ao -aa -ag -aj -ao -aa -aa -aa -aA -aG -aG -bx -aG -bT -cd -bq -aG -bW -aG -dj -dj -aG -aG -dj -aG -aG -aG -bq -aG -di -aG -fL -aG -dm -aG -aA -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -gt -aa -aa -gt -gt -gt -gt -gt -gu -gt -gt -gt -gt -gt -gt -gt -gu -gu -gt -gt -gt -gt -aa -aa -aa -aa -"} -(60,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -aa -ag -aj -ao -ac -ag -aj -ao -ac -ag -aj -ao -aa -aa -aa -aA -aJ -aJ -by -bM -aG -ce -cp -cG -cP -cf -dk -dv -dv -dv -em -ez -eD -eS -bq -aG -aG -dm -fL -bT -aG -aG -aA -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -gt -gt -gt -gt -gt -gu -gt -gu -gu -gu -gt -gt -gt -gu -gu -gu -gt -gt -gt -aa -aa -aa -aa -"} -(61,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ac -ag -aj -ao -ac -ag -aj -ao -aa -ag -aj -ao -aa -aa -aa -ax -aK -aK -bz -aK -aE -bV -aG -aE -cQ -cX -dl -dw -en -en -en -en -en -en -en -fn -fx -aG -bq -aG -dm -aG -aA -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -gt -gt -gt -gt -gt -gt -gt -gt -gt -aa -aa -aa -gt -gt -gu -gu -gt -aa -aa -aa -aa -aa -aa -aa -"} -(62,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ac -ac -ac -ac -ak -ac -ac -ap -ak -aa -aa -ac -ak -ac -ac -ax -ax -ax -aL -bf -bA -aK -aG -aG -cq -cH -cR -aE -aG -bV -dL -eb -eo -eo -eD -ed -eQ -bK -aG -bT -bq -aG -aG -gm -aA -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -gt -gt -gt -gt -gt -gt -gt -aa -aa -aa -gt -gt -gu -gu -gt -aa -aa -aa -aa -aa -aa -aa -"} -(63,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -af -ah -al -af -af -af -al -aa -aa -af -al -af -af -ay -az -aB -aM -bg -bB -bN -bU -bU -cr -aG -cS -aD -dm -aG -dL -ec -aG -aG -eD -ed -aG -bK -aG -dm -bq -aG -aG -aG -aA -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -gt -gt -gt -gt -gt -gt -gt -aa -gu -gt -gt -gt -gt -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(64,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ac -ac -ak -ac -ac -ap -ak -ap -ac -ac -ak -ac -ac -ax -ax -ax -aN -bh -bC -aK -aG -cf -cs -cI -cT -cY -dn -bV -dM -ed -ep -aG -eD -eS -aG -bK -dm -aG -bq -aG -aG -aG -aA -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -gt -gt -gt -gt -gt -gt -aa -aa -gu -gt -gt -gt -gt -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(65,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ac -ag -am -ao -ac -ag -am -ao -ac -ag -am -au -aa -aa -aa -ax -aK -aK -aK -aK -bV -bV -aE -bV -bV -cZ -bV -bV -bV -bV -bV -bV -bV -bV -bV -bV -bV -bV -aG -bV -bV -bV -aA -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -gt -gt -gt -gt -aa -aa -gt -gt -gt -gt -gt -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(66,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -am -ao -ac -ag -am -ao -ac -ag -am -ao -aa -aa -aa -aA -aO -bi -bD -bi -bi -cg -ct -cJ -cU -da -do -cU -dN -cJ -dN -cJ -eE -eT -fc -fo -dN -dN -fM -aD -gg -gn -aA -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -gt -gt -gt -gt -aa -aa -gt -gt -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(67,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -aa -aa -am -ao -ac -ag -am -ao -ac -ag -am -ao -aa -aa -aa -aA -aP -bj -bj -bj -bW -ch -cu -bj -cu -bj -dp -bj -dO -bj -bj -bj -bj -ch -fd -bj -bj -bt -fN -fS -gh -go -aA -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -gt -aa -aa -gt -gt -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(68,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ac -aa -aa -aa -ac -ag -am -ao -ac -ag -am -ao -aa -aa -aa -aC -aQ -aC -aC -aC -bX -ci -cv -cv -cv -cv -dq -cv -cv -cv -cv -cv -cv -eU -fe -fp -fp -fp -fO -fT -fO -fp -fl -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(69,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -aa -ag -am -aa -aa -ag -am -ao -ac -ag -am -ao -aa -aa -aa -aC -aR -aV -bE -aV -bY -cj -cw -cK -cK -db -dr -dx -cK -ee -eq -cK -eF -eV -ff -fq -fs -fE -fP -fU -gi -ib -fl -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(70,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -aa -ag -am -ao -ac -aa -ar -as -ac -ag -am -ao -aa -aa -aa -aC -aS -bk -bF -bO -bZ -ck -cx -cK -cK -dc -cK -dy -cL -cL -dy -cK -eG -cv -fg -fr -fs -fF -fp -fE -gj -fs -fl -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(71,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ac -ag -am -ao -ac -ag -aa -aa -ac -ag -am -ao -aa -aa -aa -aC -aT -bl -aV -bP -ca -ck -cy -cK -cK -dd -cK -dz -dA -cL -er -eA -eH -cv -fh -fs -fr -fh -fp -fV -fp -fp -fl -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(72,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ac -ag -am -ao -ac -ag -am -aa -ac -ag -am -ao -aa -aa -aa -aC -aU -bl -bn -bG -bn -ck -cz -cL -cV -de -cK -dA -dP -dA -es -cK -ee -cv -fi -fs -fz -fk -fp -fW -gk -gq -fl -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(73,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -aa -ag -am -ao -ac -ag -am -ao -aa -aa -am -ao -aa -aa -aa -aC -aV -bm -bG -bQ -bG -ck -cA -cK -cK -dd -cK -dB -cK -ef -ef -cK -eI -cv -fj -fr -fs -fG -fp -fX -fp -fp -fl -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -gt -gt -gu -aa -aa -aa -gt -gt -gt -gt -gu -gu -gt -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(74,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ac -ag -an -ao -ac -ag -an -ao -ac -aa -aa -ao -aa -aa -aa -aC -aW -bn -bH -bQ -cb -ck -cB -cK -cK -df -cK -dC -cK -dP -et -ee -eJ -cv -fk -ft -fA -fk -fp -fs -gk -gr -fl -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -gt -gt -gu -aa -aa -aa -aa -gu -aa -aa -aa -gu -gt -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(75,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ac -ac -aa -aa -ac -aa -aa -aa -ac -aa -aa -aa -ab -ab -ab -aC -aC -aC -bI -bQ -aC -ck -ck -cW -cW -ck -ck -cW -cW -cW -cW -ck -ck -ck -fl -fl -fl -fl -fl -fl -fl -fl -fl -aa -aa -aa -aa -aa -aa -aa -aa -aa -gt -gt -gt -gu -gu -gt -aa -aa -gu -aa -aa -aa -gu -gu -gt -gt -gu -gu -gt -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(76,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ac -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -gt -gt -gt -gt -gt -gu -gu -gt -gt -aa -aa -aa -aa -aa -gt -gt -gu -gu -aa -aa -gt -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(77,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aq -aa -aa -aa -aq -aa -aa -aa -aa -aq -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -gt -gt -gt -gt -gu -gu -gt -gt -gu -aa -aa -aa -gu -gt -gt -gu -gu -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(78,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -bo -aa -aa -aq -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -gu -gt -gt -gt -gt -gt -gu -aa -aa -aa -gt -gt -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(79,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aq -aa -aa -aa -aa -aa -aa -cc -aa -aa -cc -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -gu -gu -gt -gt -gt -gt -gt -gt -gt -gu -gt -gt -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(80,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aq -aa -aa -aa -aa -aa -av -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -gt -gt -gu -gt -gt -gt -gt -gt -gt -gt -gt -gt -gt -gt -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(81,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aq -aq -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -gt -gu -gt -gt -gt -gt -gt -gt -gt -gt -gt -gt -aa -aa -aa -aa -gu -gu -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(82,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -gt -gt -gt -gt -gt -gt -gt -gt -gt -gt -gt -gt -gt -aa -aa -aa -gu -gt -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(83,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -gt -gt -gt -gt -gt -gt -gt -gt -gt -gt -gt -gt -gt -aa -aa -aa -gu -gt -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(84,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -gt -gt -gt -gt -gt -gt -gt -gt -gt -gu -gt -gu -gt -gu -gu -gt -gt -gt -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(85,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -gt -gt -gt -gt -gt -gt -gt -gt -gu -gu -gt -gt -gt -gt -gt -gt -gt -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(86,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -gt -gt -gt -gt -gt -gt -gt -gt -gt -gu -gt -gt -gt -gt -gt -gt -gt -gt -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(87,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -gt -gt -gt -gt -gt -gt -gt -gt -gt -aa -aa -aa -aa -gt -gt -gt -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(88,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -gt -gt -gt -gt -gt -gt -gt -gt -gt -gt -aa -aa -aa -aa -gu -gu -gt -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(89,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -gt -gt -gt -gt -gt -gt -gt -gt -gt -gt -aa -aa -aa -aa -gu -gu -gu -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(90,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ae -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -fu -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -gt -gt -gt -gt -gt -gt -gt -gt -gt -gt -aa -aa -aa -aa -gu -gu -gt -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(91,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -gt -gt -gt -gt -gt -gt -gt -gt -gt -gt -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(92,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -gt -gt -gt -gt -gt -gt -gt -aa -aa -gt -gt -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(93,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -gt -gt -gt -gt -gt -gt -gt -gt -aa -gt -gt -gt -gt -gt -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(94,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -gt -gt -aa -gt -gt -gt -gt -gt -aa -aa -aa -gu -gt -gt -gt -gt -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(95,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -gt -gt -aa -aa -aa -aa -gt -gt -gu -gu -gu -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(96,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -gt -gt -aa -aa -gt -gt -gt -gt -gu -gu -gt -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(97,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -gt -gt -gt -gt -gt -aa -aa -aa -aa -gu -gt -gu -gt -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(98,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(99,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(100,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} diff --git a/maps/away/lost_supply_base/lost_supply_base_areas.dm b/maps/away/lost_supply_base/lost_supply_base_areas.dm deleted file mode 100644 index c33069e5e7a2d..0000000000000 --- a/maps/away/lost_supply_base/lost_supply_base_areas.dm +++ /dev/null @@ -1,24 +0,0 @@ -/area/lost_supply_base - name = "\improper Abandoned supply station" - icon_state = "lost_supply_base" - icon = 'maps/away/lost_supply_base/lost_supply_base_sprites.dmi' - -/area/lost_supply_base/solar - name = "\improper Abandoned supply station solars control room" - icon_state = "lost_supply_base_solar" - icon = 'maps/away/lost_supply_base/lost_supply_base_sprites.dmi' - -/area/lost_supply_base/office - name = "\improper Abandoned supply station office" - icon_state = "lost_supply_base_office" - icon = 'maps/away/lost_supply_base/lost_supply_base_sprites.dmi' - -/area/lost_supply_base/supply - name = "\improper Abandoned supply station supplies room" - icon_state = "lost_supply_base_supply" - icon = 'maps/away/lost_supply_base/lost_supply_base_sprites.dmi' - -/area/lost_supply_base/common - name = "\improper Abandoned supply station common area" - icon_state = "lost_supply_base_common" - icon = 'maps/away/lost_supply_base/lost_supply_base_sprites.dmi' \ No newline at end of file diff --git a/maps/away/lost_supply_base/lost_supply_base_sprites.dmi b/maps/away/lost_supply_base/lost_supply_base_sprites.dmi deleted file mode 100644 index 143285207c497..0000000000000 Binary files a/maps/away/lost_supply_base/lost_supply_base_sprites.dmi and /dev/null differ diff --git a/maps/away/magshield/magshield.dm b/maps/away/magshield/magshield.dm deleted file mode 100644 index f92f7abe8f218..0000000000000 --- a/maps/away/magshield/magshield.dm +++ /dev/null @@ -1,183 +0,0 @@ -#include "magshield_areas.dm" - -/obj/effect/overmap/visitable/sector/magshield - name = "orbital station" - desc = "Sensors detect an orbital station above the exoplanet. Sporadic magentic impulses are registred inside it. Planet landing is impossible due to lower orbits being cluttered with chaotically moving metal chunks." - icon_state = "object" - known = FALSE - - initial_generic_waypoints = list( - "nav_magshield_1", - "nav_magshield_2", - "nav_magshield_3", - "nav_magshield_4", - "nav_magshield_antag" - ) - -/datum/map_template/ruin/away_site/magshield - name = "Magshield" - id = "awaysite_magshield" - description = "It's an orbital shield station." - suffixes = list("magshield/magshield.dmm") - spawn_cost = 1 - area_usage_test_exempted_root_areas = list(/area/magshield) - -/obj/effect/shuttle_landmark/nav_magshield/nav1 - name = "Orbital Station Navpoint #1" - landmark_tag = "nav_magshield_1" - -/obj/effect/shuttle_landmark/nav_magshield/nav2 - name = "Orbital Station Navpoint #2" - landmark_tag = "nav_magshield_2" - -/obj/effect/shuttle_landmark/nav_magshield/nav3 - name = "Orbital Station Navpoint #3" - landmark_tag = "nav_magshield_3" - -/obj/effect/shuttle_landmark/nav_magshield/nav4 - name = "Orbital Station Navpoint #4" - landmark_tag = "nav_magshield_4" - -/obj/effect/shuttle_landmark/nav_magshield/nav5 - name = "Orbital Station Navpoint #5" - landmark_tag = "nav_magshield_antag" - -/obj/structure/magshield/maggen - name = "magnetic field generator" - desc = "A large three-handed generator with rotating top. It is used to create high-power magnetic fields in hard vacuum." - icon = 'magshield_sprites.dmi' - icon_state = "maggen" - anchored = TRUE - density = TRUE - light_outer_range = 3 - light_max_bright = 1 - light_color = "#ffea61" - var/heavy_range = 10 - var/lighter_range = 20 - var/chance = 0 - var/being_stopped = 0 - -/obj/structure/magshield/maggen/Initialize() - . = ..() - START_PROCESSING(SSobj, src) - -/obj/structure/magshield/maggen/Destroy() - STOP_PROCESSING(SSobj, src) - . = ..() - -/obj/structure/magshield/maggen/Process() - var/eye_safety = 0 - chance = rand(1,300)//I wanted to use Poisson distribution with Lambda for 5 minutes but made it simpler - if (chance == 1) - empulse(src, heavy_range, lighter_range, 0) - var/turf/T = get_turf(src) - var/area/A = get_area(src) - log_game("EMP with size ([heavy_range], [lighter_range]) in area [A] ([T.x], [T.y], [T.z])") - visible_message("\the [src] suddenly activates.", "Few lightnings jump between [src]'s rotating hands. You feel everything metal being pulled towards \the [src].") - for(var/mob/living/carbon/M in hear(10, get_turf(src))) - eye_safety = M.eyecheck() - if(eye_safety < FLASH_PROTECTION_MODERATE) - M.flash_eyes() - M.Stun(2) - -/obj/structure/magshield/maggen/attack_hand(mob/user) - ..() - to_chat(user, " You don't see how you could turn off \the [src]. You can try to stick something in rotating hands.") - -/obj/structure/magshield/maggen/attackby(obj/item/W as obj, mob/user as mob) - if (being_stopped) - to_chat(user, " Somebody is already interacting with \the [src].") - return - if(istype(W, /obj/item/stack/material/rods)) - var/obj/item/stack/material/rods/R = W - to_chat(user, " You start to stick [R.singular_name] into rotating hands to make them stuck.") - being_stopped = 1 - if (!do_after(user, 10 SECONDS, src, DO_PUBLIC_UNIQUE)) - to_chat(user, " You pull back [R.singular_name].") - being_stopped = 0 - return - R.use(1) - visible_message("\The [src] stops rotating and releases cloud of sparks. Better get to safe distance!") - var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread - s.set_up(10, 0, src) - s.start() - sleep(50) - visible_message("\The [src] explodes!") - var/turf/T = get_turf(src) - explosion(T, 2, 3, 4, 10, 1) - empulse(src, heavy_range*2, lighter_range*2, 1) - qdel(src) - if(istype(W, /obj/item/mop)) - to_chat(user, " You stick [W] into rotating hands. It breaks to smallest pieces.") - qdel(W) - -/obj/structure/magshield/rad_sensor - name = "radiation sensor" - desc = "Very sensitive vacuum radiation sensor. On top of the metal stand two modified Wilson Cloud Chambers filled with deuterium and tritium water." - icon = 'magshield_sprites.dmi' - icon_state = "rad_sensor" - anchored = TRUE - -/obj/structure/magshield/nav_light - name = "navigation light" - desc = "Large and bright light regularly emitting green flashes." - icon = 'magshield_sprites.dmi' - icon_state = "nav_light_green" - anchored = TRUE - density = TRUE - light_outer_range = 10 - light_max_bright = 1 - light_color = "#00ee00" - -/obj/structure/magshield/nav_light/New()//try make flashing through the process - ..() - set_light(light_max_bright, light_outer_range / 6, light_outer_range, 2, light_color) - -/obj/structure/magshield/nav_light/red - desc = "Large and bright light regularly emitting red flashes." - light_color = "#ee0000" - icon_state = "nav_light_red" - - -/obj/item/book/manual/magshield_manual - name = "SOP for Planetary Shield Orbital Station" - icon = 'magshield_sprites.dmi' - icon_state = "mg_guide" - author = "Terraforms Industrial" - title = "Standard operating procedures for Planetary Shield Orbital Station" - - dat = {" - - - - - -

              Introduction

              - Terraforms Industrial is happy to see you as our customer! Please read this guide before using and operating with your custom PSOS - Planetary Shield Orbital Statiion. -

              Best uses for PSOS

              - PSOS is intended for protecting exoplanets from high energy space radiation rays and particles. Best used for planets lacking active geomagnetic field so PSOS would compensate its absence.
              -

              Applied technologies

              - Terraforms Industrial is delivering you your new PSOS with set of four (4) high-strength magnetic field generators. Those devices use rotating supeconducter hands to create magnetic field with strength up to 5 Tesla effectively deflecting up to 99% of space radiation spectrum.
              -
              - Special modified vacuum radiation sensors will help you evaluate radiation level and adjust power input of PSOS magnetic generators for best efficiency and power saving. -


              - rest of the book pages are gone - - - "} - -/obj/item/paper/magshield/tornpage - name = "torn book page" - info = "...you must carefully control radiation sensor automatics during solar flares. Sudden burst of high-energy plasma may cause positive feedback loop and increase magnetic genretors output in order of magnitude. This situation would lead to general damage of unprotected electronic devices as well as trajectory changes in nearby nickel-ferrum astero#&$" - -/obj/item/paper/magshield/log - name = "printed page" - info = "\[07:31\] Attention: solar flare detected! Automatic countermeasures activated.
              \[07:33\] Warning: ERROR: NULL input at FARADAY_CAGE#12.TFI - line 2067: No command found. System will be rebooted.
              \[07:39\] Warning: radiaton countermeasures inactive. Please initiate emergency protocol.
              \[07:40\] Warning: radiaton countermeasures inactive. Please initiate emergency protocol.
              \[07:41\] Warning: radiaton countermeasures inactive. Please initiate emergency protocol.
              \[07:45\] Attention! Multiple systems failure. Please initiate emergency protocol
              \[07:52\] Warning: LIDAR-ASTRA system detected multiple meteors approaching. Estimate impact time: 12.478 seconds.
              \[07:52\] Warning! Miltiple hull breaches det~!!@#" diff --git a/maps/away/magshield/magshield.dmm b/maps/away/magshield/magshield.dmm deleted file mode 100644 index 3e9fcf8e29fef..0000000000000 --- a/maps/away/magshield/magshield.dmm +++ /dev/null @@ -1,44638 +0,0 @@ -//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE -"aa" = ( -/turf/space, -/area/space) -"ab" = ( -/obj/structure/grille, -/turf/space, -/area/space) -"ac" = ( -/obj/structure/lattice, -/turf/space, -/area/space) -"ad" = ( -/obj/item/ore, -/turf/space, -/area/space) -"ae" = ( -/obj/machinery/power/tracker, -/obj/structure/cable/yellow{ - d2 = 2; - icon_state = "0-2" - }, -/turf/simulated/floor/airless, -/area/space) -"af" = ( -/obj/structure/cable/yellow{ - d2 = 2; - icon_state = "0-2" - }, -/obj/machinery/power/solar{ - id = "auxsolarstarboard"; - name = "Starboard Auxiliary Solar Array" - }, -/obj/effect/floor_decal/solarpanel, -/turf/simulated/floor/airless, -/area/space) -"ag" = ( -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/airless, -/area/space) -"ah" = ( -/obj/structure/cable/yellow{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/turf/simulated/floor/airless, -/area/space) -"ai" = ( -/obj/structure/cable/yellow{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/airless, -/area/space) -"aj" = ( -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/airless, -/area/space) -"ak" = ( -/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/structure/cable/yellow{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/turf/simulated/floor/airless, -/area/space) -"al" = ( -/obj/structure/cable/yellow{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/airless, -/area/space) -"am" = ( -/obj/structure/cable/yellow{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/turf/simulated/floor/airless, -/area/space) -"an" = ( -/obj/structure/cable/yellow, -/obj/machinery/power/solar{ - id = "auxsolarstarboard"; - name = "Starboard Auxiliary Solar Array" - }, -/obj/effect/floor_decal/solarpanel, -/turf/simulated/floor/airless, -/area/space) -"ao" = ( -/obj/item/stack/material/rods, -/turf/space, -/area/space) -"ap" = ( -/turf/simulated/floor/airless, -/area/space) -"aq" = ( -/obj/machinery/power/solar{ - id = "auxsolarstarboard"; - name = "Starboard Auxiliary Solar Array" - }, -/obj/structure/cable/yellow, -/obj/effect/floor_decal/solarpanel, -/turf/simulated/floor/airless, -/area/space) -"ar" = ( -/turf/simulated/wall/r_wall, -/area/space) -"as" = ( -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/access_button{ - pixel_x = -25; - pixel_y = -25 - }, -/turf/simulated/floor/airless, -/area/space) -"at" = ( -/obj/machinery/light/small, -/turf/space, -/area/space) -"au" = ( -/turf/simulated/wall/r_wall, -/area/magshield/smes_storage) -"av" = ( -/obj/machinery/door/airlock/external/bolted_open, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/airless, -/area/magshield/smes_storage) -"aw" = ( -/turf/simulated/wall/r_wall, -/area/magshield/engine) -"ax" = ( -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/unary/vent_pump/high_volume, -/obj/effect/floor_decal/industrial/hatch/blue, -/obj/machinery/embedded_controller/radio/airlock/airlock_controller{ - pixel_x = 25 - }, -/obj/machinery/airlock_sensor{ - pixel_x = -25 - }, -/turf/simulated/floor/airless, -/area/magshield/smes_storage) -"ay" = ( -/obj/structure/table/steel, -/turf/simulated/floor/airless, -/area/magshield/smes_storage) -"az" = ( -/obj/structure/table/steel, -/obj/random/tool, -/turf/simulated/floor/airless, -/area/magshield/smes_storage) -"aA" = ( -/obj/structure/table/steel, -/obj/random/junk, -/turf/simulated/floor/airless, -/area/magshield/smes_storage) -"aB" = ( -/turf/simulated/floor/airless, -/area/magshield/smes_storage) -"aC" = ( -/obj/structure/table/rack, -/obj/random/voidsuit, -/obj/random/voidhelmet, -/turf/simulated/floor/airless, -/area/magshield/smes_storage) -"aD" = ( -/obj/machinery/door/airlock/external/bolted_open, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/airless, -/area/magshield/smes_storage) -"aE" = ( -/turf/simulated/floor/airless, -/area/magshield/engine) -"aF" = ( -/obj/machinery/portable_atmospherics/canister/carbon_dioxide, -/obj/effect/floor_decal/industrial/warning{ - dir = 4; - icon_state = "warning" - }, -/turf/simulated/floor/airless, -/area/magshield/engine) -"aG" = ( -/obj/machinery/atmospherics/unary/tank/carbon_dioxide, -/turf/simulated/floor/airless, -/area/magshield/engine) -"aH" = ( -/obj/effect/wingrille_spawn/reinforced_phoron/full, -/obj/machinery/door/blast/regular/open{ - dir = 4; - icon_state = "pdoor0"; - id_tag = "prototype_chamber_blast" - }, -/turf/simulated/floor/airless, -/area/magshield/engine) -"aI" = ( -/obj/machinery/atmospherics/pipe/simple/heat_exchanging{ - dir = 6 - }, -/turf/space, -/area/space) -"aJ" = ( -/obj/machinery/atmospherics/pipe/simple/heat_exchanging{ - dir = 10 - }, -/turf/space, -/area/space) -"aK" = ( -/obj/machinery/atmospherics/pipe/simple/heat_exchanging/junction{ - dir = 8 - }, -/turf/space, -/area/space) -"aL" = ( -/obj/machinery/atmospherics/pipe/simple/visible/yellow{ - dir = 4 - }, -/turf/simulated/wall/r_wall, -/area/magshield/smes_storage) -"aM" = ( -/obj/machinery/atmospherics/pipe/simple/visible/yellow{ - dir = 4 - }, -/turf/simulated/floor/airless, -/area/magshield/smes_storage) -"aN" = ( -/obj/structure/cable/yellow{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/machinery/atmospherics/unary/vent_pump/tank{ - dir = 8; - external_pressure_bound = 0; - external_pressure_bound_default = 0; - icon_state = "map_vent_in"; - id_tag = "tox_out"; - initialize_directions = 1; - internal_pressure_bound = 4000; - internal_pressure_bound_default = 4000; - pressure_checks = 2; - pressure_checks_default = 2; - pump_direction = 0; - use_power = 1 - }, -/turf/simulated/floor/airless, -/area/magshield/smes_storage) -"aO" = ( -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/airless, -/area/magshield/smes_storage) -"aP" = ( -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/cable/yellow{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/item/ore, -/turf/simulated/floor/airless, -/area/magshield/smes_storage) -"aQ" = ( -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/cable/yellow{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/turf/simulated/floor/airless, -/area/magshield/smes_storage) -"aR" = ( -/obj/structure/cable/yellow{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/turf/simulated/floor/airless, -/area/magshield/smes_storage) -"aS" = ( -/obj/random/junk, -/turf/simulated/floor/airless, -/area/magshield/smes_storage) -"aT" = ( -/obj/structure/sign/warning/airlock{ - pixel_y = 30 - }, -/turf/simulated/floor/airless, -/area/magshield/smes_storage) -"aU" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/airless, -/area/magshield/smes_storage) -"aV" = ( -/obj/machinery/portable_atmospherics/canister/carbon_dioxide, -/turf/simulated/floor/airless, -/area/magshield/engine) -"aW" = ( -/obj/machinery/atmospherics/pipe/simple/visible/black{ - dir = 5 - }, -/turf/simulated/floor/airless, -/area/magshield/engine) -"aX" = ( -/obj/machinery/atmospherics/pipe/manifold4w/visible/black, -/turf/simulated/floor/airless, -/area/magshield/engine) -"aY" = ( -/obj/machinery/atmospherics/pipe/simple/visible/black{ - dir = 9 - }, -/turf/simulated/floor/airless, -/area/magshield/engine) -"aZ" = ( -/obj/machinery/door/airlock/hatch, -/obj/machinery/door/blast/regular/open{ - dir = 4; - icon_state = "pdoor0"; - id_tag = "prototype_chamber_blast" - }, -/turf/simulated/floor/airless, -/area/magshield/engine) -"ba" = ( -/obj/machinery/mass_driver{ - dir = 4; - id_tag = "enginecore" - }, -/turf/simulated/floor/airless, -/area/magshield/engine) -"bb" = ( -/obj/machinery/door/blast/regular/open{ - icon_state = "pdoor0"; - id_tag = "prototype_chamber_blast" - }, -/turf/simulated/floor/airless, -/area/magshield/engine) -"bc" = ( -/obj/machinery/atmospherics/pipe/simple/heat_exchanging, -/turf/space, -/area/space) -"bd" = ( -/obj/machinery/light/small{ - dir = 8 - }, -/turf/simulated/floor/airless, -/area/magshield/smes_storage) -"be" = ( -/obj/machinery/power/terminal, -/obj/structure/cable/yellow, -/turf/simulated/floor/airless, -/area/magshield/smes_storage) -"bf" = ( -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/turf/simulated/floor/airless, -/area/magshield/smes_storage) -"bg" = ( -/turf/space, -/area/magshield/smes_storage) -"bh" = ( -/obj/structure/closet/crate/plastic, -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/random/loot, -/turf/simulated/floor/airless, -/area/magshield/smes_storage) -"bi" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/structure/cable/yellow{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/turf/simulated/floor/airless, -/area/magshield/smes_storage) -"bj" = ( -/obj/machinery/light/small{ - dir = 4; - icon_state = "bulb1" - }, -/turf/simulated/floor/airless, -/area/magshield/smes_storage) -"bk" = ( -/obj/machinery/atmospherics/portables_connector{ - dir = 1 - }, -/turf/simulated/floor/airless, -/area/magshield/engine) -"bl" = ( -/obj/machinery/atmospherics/unary/vent_pump, -/turf/simulated/floor/airless, -/area/magshield/engine) -"bm" = ( -/obj/machinery/atmospherics/unary/outlet_injector, -/turf/simulated/floor/airless, -/area/magshield/engine) -"bn" = ( -/obj/machinery/power/smes/buildable/outpost_substation, -/obj/structure/cable{ - d2 = 2; - icon_state = "0-2" - }, -/turf/simulated/floor/airless, -/area/magshield/smes_storage) -"bo" = ( -/obj/item/ore, -/turf/simulated/floor/airless, -/area/magshield/smes_storage) -"bp" = ( -/obj/structure/lattice, -/turf/space, -/area/magshield/smes_storage) -"bq" = ( -/obj/structure/closet, -/obj/random/junk, -/turf/simulated/floor/airless, -/area/magshield/smes_storage) -"br" = ( -/obj/machinery/portable_atmospherics/canister, -/obj/effect/floor_decal/industrial/warning, -/turf/simulated/floor/airless, -/area/magshield/engine) -"bs" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 6; - icon_state = "warning" - }, -/turf/simulated/floor/airless, -/area/magshield/engine) -"bt" = ( -/obj/machinery/light/small{ - dir = 4; - icon_state = "bulb1" - }, -/turf/simulated/floor/airless, -/area/magshield/engine) -"bu" = ( -/obj/effect/wingrille_spawn/reinforced_phoron/full, -/obj/machinery/door/blast/regular/open{ - icon_state = "pdoor0"; - id_tag = "prototype_chamber_blast" - }, -/obj/machinery/atmospherics/pipe/simple/visible/cyan, -/turf/simulated/floor/airless, -/area/magshield/engine) -"bv" = ( -/obj/effect/wingrille_spawn/reinforced_phoron/full, -/obj/machinery/door/blast/regular/open{ - icon_state = "pdoor0"; - id_tag = "prototype_chamber_blast" - }, -/turf/simulated/floor/airless, -/area/magshield/engine) -"bw" = ( -/obj/effect/shuttle_landmark/nav_magshield/nav2, -/turf/space, -/area/space) -"bx" = ( -/obj/structure/cable{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/turf/simulated/floor/airless, -/area/magshield/smes_storage) -"by" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/cable{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/turf/simulated/floor/airless, -/area/magshield/smes_storage) -"bz" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/airless, -/area/magshield/smes_storage) -"bA" = ( -/obj/structure/closet, -/obj/item/toy/therapy_purple, -/obj/random/hat, -/turf/simulated/floor/airless, -/area/magshield/smes_storage) -"bB" = ( -/obj/machinery/atmospherics/pipe/simple/visible/cyan, -/turf/simulated/floor/airless, -/area/magshield/engine) -"bC" = ( -/obj/machinery/atmospherics/pipe/simple/visible/cyan{ - dir = 6 - }, -/turf/simulated/floor/airless, -/area/magshield/engine) -"bD" = ( -/obj/machinery/atmospherics/pipe/simple/visible/cyan{ - dir = 9 - }, -/turf/simulated/floor/airless, -/area/magshield/engine) -"bE" = ( -/obj/item/ore, -/turf/space, -/area/magshield/smes_storage) -"bF" = ( -/obj/item/stack/material/rods, -/turf/space, -/area/magshield/smes_storage) -"bG" = ( -/obj/structure/closet, -/obj/item/device/flashlight/flare/glowstick/random, -/turf/simulated/floor/airless, -/area/magshield/smes_storage) -"bH" = ( -/obj/machinery/atmospherics/portables_connector{ - dir = 4 - }, -/turf/simulated/floor/airless, -/area/magshield/engine) -"bI" = ( -/obj/machinery/atmospherics/binary/pump{ - dir = 4 - }, -/turf/simulated/floor/airless, -/area/magshield/engine) -"bJ" = ( -/obj/machinery/atmospherics/pipe/manifold/visible/cyan{ - dir = 4 - }, -/turf/simulated/floor/airless, -/area/magshield/engine) -"bK" = ( -/obj/machinery/atmospherics/pipe/simple/visible/red{ - dir = 6 - }, -/turf/simulated/floor/airless, -/area/magshield/engine) -"bL" = ( -/obj/machinery/atmospherics/pipe/simple/visible/red{ - dir = 4 - }, -/turf/simulated/wall/r_wall, -/area/magshield/engine) -"bM" = ( -/obj/machinery/atmospherics/pipe/simple/heat_exchanging/junction{ - dir = 4 - }, -/turf/space, -/area/space) -"bN" = ( -/obj/machinery/atmospherics/pipe/simple/heat_exchanging{ - dir = 4 - }, -/turf/space, -/area/space) -"bO" = ( -/obj/machinery/atmospherics/pipe/simple/heat_exchanging, -/obj/item/ore, -/turf/space, -/area/space) -"bP" = ( -/obj/structure/girder/displaced, -/turf/simulated/floor/airless, -/area/magshield/smes_storage) -"bQ" = ( -/obj/structure/table/steel, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/airless, -/area/magshield/smes_storage) -"bR" = ( -/obj/structure/table/steel, -/obj/random/drinkbottle, -/obj/random/tool, -/turf/simulated/floor/airless, -/area/magshield/smes_storage) -"bS" = ( -/obj/structure/closet/crate/trashcart, -/turf/simulated/floor/airless, -/area/magshield/smes_storage) -"bT" = ( -/obj/machinery/light/small{ - dir = 8 - }, -/turf/simulated/floor/airless, -/area/magshield/engine) -"bU" = ( -/obj/machinery/atmospherics/pipe/simple/visible/cyan{ - dir = 4 - }, -/turf/simulated/floor/airless, -/area/magshield/engine) -"bV" = ( -/obj/machinery/atmospherics/pipe/simple/visible/red, -/obj/machinery/light/small{ - dir = 4; - icon_state = "bulb1" - }, -/turf/simulated/floor/airless, -/area/magshield/engine) -"bW" = ( -/obj/machinery/atmospherics/pipe/simple/heat_exchanging{ - dir = 9 - }, -/turf/space, -/area/space) -"bX" = ( -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/machinery/computer/modular{ - dir = 4 - }, -/turf/simulated/floor/airless, -/area/magshield/smes_storage) -"bY" = ( -/obj/structure/bed/chair{ - dir = 8 - }, -/obj/machinery/light/small{ - dir = 4; - icon_state = "bulb1" - }, -/turf/simulated/floor/airless, -/area/magshield/smes_storage) -"bZ" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/random/junk, -/turf/simulated/floor/airless, -/area/magshield/smes_storage) -"ca" = ( -/obj/structure/table/steel, -/obj/item/device/geiger, -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/turf/simulated/floor/airless, -/area/magshield/engine) -"cb" = ( -/obj/machinery/computer/modular{ - dir = 8 - }, -/turf/simulated/floor/airless, -/area/magshield/engine) -"cc" = ( -/obj/machinery/door/blast/regular{ - density = 0; - dir = 4; - icon_state = "pdoor0"; - id_tag = "EngineBlast"; - name = "Engine Monitoring Room Blast Doors"; - opacity = 0 - }, -/obj/effect/wallframe_spawn/reinforced, -/turf/simulated/floor/plating, -/area/magshield/engine) -"cd" = ( -/obj/machinery/atmospherics/binary/circulator{ - anchored = 1; - dir = 4 - }, -/turf/simulated/floor/plating, -/area/magshield/engine) -"ce" = ( -/obj/machinery/atmospherics/pipe/simple/visible/red{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/visible/cyan, -/turf/simulated/floor/airless, -/area/magshield/engine) -"cf" = ( -/obj/machinery/atmospherics/pipe/simple/visible/red{ - dir = 9 - }, -/turf/simulated/floor/airless, -/area/magshield/engine) -"cg" = ( -/obj/machinery/atmospherics/pipe/simple/heat_exchanging{ - dir = 5 - }, -/turf/space, -/area/space) -"ch" = ( -/obj/structure/closet/crate/hydroponics/prespawned, -/obj/random/gloves, -/turf/simulated/floor/plating, -/area/magshield/smes_storage) -"ci" = ( -/obj/structure/bed/chair{ - dir = 4 - }, -/obj/structure/cable/yellow{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/airless, -/area/magshield/engine) -"cj" = ( -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/computer/modular{ - dir = 8 - }, -/turf/simulated/floor/airless, -/area/magshield/engine) -"ck" = ( -/obj/machinery/door/blast/regular{ - density = 0; - dir = 4; - icon_state = "pdoor0"; - id_tag = "EngineBlast"; - name = "Engine Monitoring Room Blast Doors"; - opacity = 0 - }, -/obj/effect/wallframe_spawn/reinforced, -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/plating, -/area/magshield/engine) -"cl" = ( -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/airless, -/area/magshield/engine) -"cm" = ( -/obj/machinery/atmospherics/pipe/simple/visible/cyan, -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/airless, -/area/magshield/engine) -"cn" = ( -/obj/machinery/atmospherics/binary/pump, -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/airless, -/area/magshield/engine) -"co" = ( -/obj/structure/cable/yellow{ - d2 = 8; - icon_state = "0-8" - }, -/obj/machinery/power/generator{ - anchored = 1 - }, -/turf/simulated/floor/plating, -/area/magshield/engine) -"cp" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/airless, -/area/magshield/smes_storage) -"cq" = ( -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, -/turf/simulated/floor/airless, -/area/magshield/smes_storage) -"cr" = ( -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/airless, -/area/magshield/smes_storage) -"cs" = ( -/obj/machinery/door/airlock, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/airless, -/area/magshield/engine) -"ct" = ( -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/turf/simulated/floor/airless, -/area/magshield/engine) -"cu" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 8; - level = 2 - }, -/obj/machinery/computer/modular{ - dir = 8 - }, -/turf/simulated/floor/airless, -/area/magshield/engine) -"cv" = ( -/obj/machinery/atmospherics/pipe/simple/visible/cyan{ - dir = 5 - }, -/turf/simulated/floor/airless, -/area/magshield/engine) -"cw" = ( -/obj/machinery/atmospherics/pipe/simple/visible/red, -/obj/machinery/atmospherics/pipe/simple/visible/cyan{ - dir = 4 - }, -/turf/simulated/floor/airless, -/area/magshield/engine) -"cx" = ( -/obj/machinery/atmospherics/binary/circulator{ - anchored = 1; - dir = 8 - }, -/turf/simulated/floor/plating, -/area/magshield/engine) -"cy" = ( -/obj/structure/cable{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/airless, -/area/magshield/smes_storage) -"cz" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/turf/simulated/floor/airless, -/area/magshield/smes_storage) -"cA" = ( -/obj/item/device/flashlight/flare/glowstick/yellow, -/turf/simulated/floor/airless, -/area/magshield/smes_storage) -"cB" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/airless, -/area/magshield/smes_storage) -"cC" = ( -/obj/machinery/atmospherics/pipe/simple/visible/red, -/turf/simulated/floor/airless, -/area/magshield/engine) -"cD" = ( -/obj/machinery/atmospherics/portables_connector, -/turf/simulated/floor/airless, -/area/magshield/engine) -"cE" = ( -/obj/machinery/atmospherics/pipe/simple/heat_exchanging{ - dir = 4 - }, -/obj/item/ore, -/turf/space, -/area/space) -"cF" = ( -/obj/machinery/atmospherics/pipe/simple/visible/yellow{ - dir = 4 - }, -/obj/machinery/light/small{ - dir = 8 - }, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/item/ore, -/turf/simulated/floor/airless, -/area/magshield/smes_storage) -"cG" = ( -/obj/machinery/atmospherics/unary/outlet_injector{ - dir = 8; - frequency = 1441; - icon_state = "map_injector"; - id = "n2o_in"; - pixel_y = 1; - use_power = 1 - }, -/turf/simulated/floor/airless, -/area/magshield/smes_storage) -"cH" = ( -/obj/machinery/power/apc{ - dir = 4; - name = "east bump"; - pixel_x = 24 - }, -/obj/structure/cable{ - d2 = 2; - icon_state = "0-2" - }, -/turf/simulated/floor/airless, -/area/magshield/smes_storage) -"cI" = ( -/obj/structure/closet, -/obj/random/gloves, -/turf/simulated/floor/airless, -/area/magshield/smes_storage) -"cJ" = ( -/obj/machinery/light/small{ - dir = 4; - icon_state = "bulb1" - }, -/obj/random/junk, -/turf/simulated/floor/airless, -/area/magshield/smes_storage) -"cK" = ( -/obj/structure/table/steel, -/obj/item/clothing/head/radiation, -/obj/item/wrench, -/obj/machinery/light/small{ - dir = 1 - }, -/turf/simulated/floor/airless, -/area/magshield/engine) -"cL" = ( -/obj/structure/closet, -/obj/item/clothing/suit/radiation, -/obj/item/device/flashlight, -/turf/simulated/floor/airless, -/area/magshield/engine) -"cM" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/turf/simulated/floor/airless, -/area/magshield/engine) -"cN" = ( -/obj/machinery/atmospherics/binary/pump, -/turf/simulated/floor/airless, -/area/magshield/engine) -"cO" = ( -/obj/structure/girder/displaced, -/turf/space, -/area/space) -"cP" = ( -/obj/structure/table/steel, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 4 - }, -/turf/simulated/floor/airless, -/area/magshield/smes_storage) -"cQ" = ( -/obj/structure/table/steel, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/random/tool, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 4 - }, -/turf/simulated/floor/airless, -/area/magshield/smes_storage) -"cR" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/turf/simulated/floor/airless, -/area/magshield/smes_storage) -"cS" = ( -/obj/machinery/door/airlock, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/airless, -/area/magshield/smes_storage) -"cT" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/airless, -/area/magshield/smes_storage) -"cU" = ( -/obj/structure/cable{ - icon_state = "2-8" - }, -/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply, -/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/airless, -/area/magshield/smes_storage) -"cV" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/airless, -/area/magshield/smes_storage) -"cW" = ( -/obj/machinery/door/airlock/hatch, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/airless, -/area/magshield/engine) -"cX" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/airless, -/area/magshield/engine) -"cY" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/mob/living/simple_animal/hostile/carp, -/turf/simulated/floor/airless, -/area/magshield/engine) -"cZ" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/airless, -/area/magshield/engine) -"da" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 8; - level = 2 - }, -/obj/machinery/power/apc{ - name = "south bump"; - pixel_y = -24 - }, -/obj/structure/cable{ - d2 = 8; - icon_state = "0-8" - }, -/turf/simulated/floor/airless, -/area/magshield/engine) -"db" = ( -/obj/machinery/atmospherics/pipe/simple/visible/red{ - dir = 5 - }, -/turf/simulated/floor/airless, -/area/magshield/engine) -"dc" = ( -/obj/machinery/atmospherics/pipe/simple/visible/red{ - dir = 4 - }, -/turf/simulated/floor/airless, -/area/magshield/engine) -"dd" = ( -/obj/machinery/atmospherics/pipe/manifold/visible/red, -/turf/simulated/floor/airless, -/area/magshield/engine) -"de" = ( -/turf/simulated/wall/r_wall, -/area/magshield/north) -"df" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/door/airlock, -/turf/simulated/floor/airless, -/area/magshield/north) -"dg" = ( -/turf/space, -/area/magshield/north) -"dh" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/random/obstruction, -/turf/simulated/floor/airless, -/area/magshield/north) -"di" = ( -/obj/item/ore, -/turf/simulated/floor/airless, -/area/magshield/north) -"dj" = ( -/turf/simulated/floor/airless, -/area/magshield/north) -"dk" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 8; - icon_state = "warning" - }, -/turf/simulated/floor/airless, -/area/magshield/north) -"dl" = ( -/obj/machinery/portable_atmospherics/canister, -/turf/simulated/floor/airless, -/area/magshield/north) -"dm" = ( -/obj/random/junk, -/turf/simulated/floor/airless, -/area/magshield/north) -"dn" = ( -/obj/item/storage/wallet/random, -/turf/simulated/floor/airless, -/area/magshield/north) -"do" = ( -/obj/structure/largecrate, -/turf/simulated/floor/airless, -/area/magshield/north) -"dp" = ( -/obj/random/shoes, -/turf/simulated/floor/airless, -/area/magshield/north) -"dq" = ( -/obj/machinery/portable_atmospherics/hydroponics, -/turf/simulated/floor/airless, -/area/magshield/north) -"dr" = ( -/obj/structure/iv_drip, -/turf/simulated/floor/airless, -/area/magshield/north) -"ds" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 4 - }, -/turf/simulated/floor/airless, -/area/magshield/north) -"dt" = ( -/turf/simulated/wall, -/area/magshield/north) -"du" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/airless, -/area/magshield/north) -"dv" = ( -/obj/random/tool, -/turf/simulated/floor/airless, -/area/magshield/north) -"dw" = ( -/obj/random/tank, -/turf/simulated/floor/airless, -/area/magshield/north) -"dx" = ( -/obj/structure/table/steel, -/obj/random/tool, -/turf/simulated/floor/airless, -/area/magshield/north) -"dy" = ( -/obj/machinery/light/small{ - dir = 1 - }, -/turf/simulated/floor/airless, -/area/magshield/north) -"dz" = ( -/obj/structure/reagent_dispensers/water_cooler, -/turf/simulated/floor/airless, -/area/magshield/north) -"dA" = ( -/obj/structure/closet, -/obj/random/toolbox, -/turf/simulated/floor/airless, -/area/magshield/north) -"dB" = ( -/obj/structure/closet, -/obj/random/suit, -/turf/simulated/floor/airless, -/area/magshield/north) -"dC" = ( -/obj/structure/closet, -/obj/random/smokes, -/obj/machinery/light/small{ - dir = 1 - }, -/turf/simulated/floor/airless, -/area/magshield/north) -"dD" = ( -/obj/structure/closet, -/obj/structure/plushie/ian, -/obj/random/drinkbottle, -/turf/simulated/floor/airless, -/area/magshield/north) -"dE" = ( -/obj/random/material, -/turf/simulated/floor/airless, -/area/magshield/north) -"dF" = ( -/obj/item/stack/material/rods, -/turf/simulated/floor/airless, -/area/magshield/north) -"dG" = ( -/obj/structure/girder/displaced, -/turf/simulated/floor/airless, -/area/magshield/north) -"dH" = ( -/obj/structure/lattice, -/turf/space, -/area/magshield/north) -"dI" = ( -/obj/item/clothing/under/color/lightpurple, -/turf/simulated/floor/airless, -/area/magshield/north) -"dJ" = ( -/obj/random/firstaid, -/turf/simulated/floor/airless, -/area/magshield/north) -"dK" = ( -/obj/random/toolbox, -/turf/simulated/floor/airless, -/area/magshield/north) -"dL" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 4 - }, -/obj/structure/largecrate, -/turf/simulated/floor/airless, -/area/magshield/north) -"dM" = ( -/obj/random/obstruction, -/turf/simulated/floor/airless, -/area/magshield/north) -"dN" = ( -/obj/machinery/power/apc{ - dir = 4; - name = "east bump"; - pixel_x = 24 - }, -/obj/structure/cable{ - d2 = 2; - icon_state = "0-2"; - pixel_y = 1 - }, -/turf/simulated/floor/airless, -/area/magshield/north) -"dO" = ( -/obj/machinery/computer/modular{ - dir = 4 - }, -/turf/simulated/floor/airless, -/area/magshield/north) -"dP" = ( -/obj/structure/bed/chair{ - dir = 8 - }, -/turf/simulated/floor/airless, -/area/magshield/north) -"dQ" = ( -/obj/machinery/field_generator, -/turf/simulated/floor/airless, -/area/magshield/north) -"dR" = ( -/obj/effect/floor_decal/industrial/warning, -/turf/simulated/floor/airless, -/area/magshield/north) -"dS" = ( -/obj/effect/floor_decal/industrial/warning, -/obj/random/loot, -/turf/simulated/floor/airless, -/area/magshield/north) -"dT" = ( -/obj/effect/floor_decal/industrial/warning, -/obj/structure/largecrate, -/turf/simulated/floor/airless, -/area/magshield/north) -"dU" = ( -/obj/effect/floor_decal/industrial/warning, -/obj/random/junk, -/turf/simulated/floor/airless, -/area/magshield/north) -"dV" = ( -/obj/effect/floor_decal/industrial/warning, -/obj/item/flame/lighter/random, -/turf/simulated/floor/airless, -/area/magshield/north) -"dW" = ( -/obj/effect/floor_decal/industrial/warning, -/obj/random/tank, -/turf/simulated/floor/airless, -/area/magshield/north) -"dX" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 6; - icon_state = "warning" - }, -/obj/random/toolbox, -/turf/simulated/floor/airless, -/area/magshield/north) -"dY" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/airless, -/area/magshield/north) -"dZ" = ( -/obj/structure/table/steel, -/obj/random/powercell, -/obj/machinery/cell_charger, -/turf/simulated/floor/airless, -/area/magshield/north) -"ea" = ( -/obj/machinery/power/port_gen/pacman/mrs, -/turf/simulated/floor/airless, -/area/magshield/north) -"eb" = ( -/obj/machinery/portable_atmospherics/canister/oxygen, -/turf/simulated/floor/airless, -/area/magshield/north) -"ec" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/turf/simulated/floor/airless, -/area/magshield/north) -"ed" = ( -/obj/machinery/atmospherics/unary/vent_pump/on, -/turf/simulated/floor/airless, -/area/magshield/north) -"ee" = ( -/obj/structure/table/rack, -/obj/random/voidsuit, -/obj/random/voidhelmet, -/turf/simulated/floor/airless, -/area/magshield/north) -"ef" = ( -/obj/structure/grille, -/turf/simulated/wall/r_wall, -/area/space) -"eg" = ( -/obj/structure/cable{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/turf/simulated/floor/airless, -/area/magshield/north) -"eh" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/airless, -/area/magshield/north) -"ei" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/airless, -/area/magshield/north) -"ej" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/airless, -/area/magshield/north) -"ek" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/airless, -/area/magshield/north) -"el" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/airless, -/area/magshield/north) -"em" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/door/airlock, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/airless, -/area/magshield/north) -"en" = ( -/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/cable{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, -/turf/simulated/floor/airless, -/area/magshield/north) -"eo" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/airless, -/area/magshield/north) -"ep" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/airless, -/area/magshield/north) -"eq" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/cable{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/turf/simulated/floor/airless, -/area/magshield/north) -"er" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/obj/structure/cable{ - icon_state = "6-8" - }, -/turf/simulated/floor/airless, -/area/magshield/north) -"es" = ( -/obj/structure/sign/warning/airlock{ - pixel_x = 30 - }, -/turf/simulated/floor/airless, -/area/magshield/north) -"et" = ( -/obj/machinery/light/small{ - dir = 4 - }, -/turf/space, -/area/space) -"eu" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/airless, -/area/magshield/north) -"ev" = ( -/obj/structure/sign/warning/airlock{ - pixel_y = -30 - }, -/turf/simulated/wall, -/area/magshield/north) -"ew" = ( -/obj/structure/sign/warning/docking_area{ - pixel_y = -30 - }, -/turf/simulated/floor/airless, -/area/magshield/north) -"ex" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/obj/machinery/light/small{ - dir = 8 - }, -/turf/simulated/floor/airless, -/area/magshield/north) -"ey" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable{ - icon_state = "4-9" - }, -/turf/simulated/floor/airless, -/area/magshield/north) -"ez" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, -/obj/machinery/floodlight, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/airless, -/area/magshield/north) -"eA" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/floodlight, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/airless, -/area/magshield/north) -"eB" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/light/small, -/turf/simulated/floor/airless, -/area/magshield/north) -"eC" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/obj/structure/cable{ - d1 = 16; - d2 = 0; - dir = 4; - icon_state = "1-8" - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/airless, -/area/magshield/north) -"eD" = ( -/obj/machinery/door/airlock/external/bolted, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/airless, -/area/magshield/north) -"eE" = ( -/obj/machinery/atmospherics/unary/vent_pump/high_volume{ - dir = 8 - }, -/obj/machinery/embedded_controller/radio/airlock/airlock_controller{ - pixel_y = 25 - }, -/obj/machinery/airlock_sensor{ - pixel_y = -25 - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/airless, -/area/magshield/north) -"eF" = ( -/obj/machinery/door/airlock/external/bolted, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/airless, -/area/magshield/north) -"eG" = ( -/obj/machinery/access_button{ - pixel_x = -25; - pixel_y = 25 - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/airless, -/area/magshield/north) -"eI" = ( -/obj/structure/magshield/maggen, -/obj/structure/cable{ - d2 = 8; - icon_state = "0-8" - }, -/turf/simulated/floor/airless, -/area/space) -"eJ" = ( -/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{ - dir = 4; - id_tag = "merchant_station_vent" - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/airless, -/area/magshield/north) -"eK" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/cable{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/turf/simulated/floor/airless, -/area/magshield/north) -"eL" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/airless, -/area/magshield/north) -"eM" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/item/newspaper, -/turf/simulated/floor/airless, -/area/magshield/north) -"eN" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 - }, -/turf/simulated/floor/airless, -/area/magshield/north) -"eO" = ( -/obj/machinery/light_construct/small, -/turf/simulated/floor/airless, -/area/magshield/north) -"eP" = ( -/obj/structure/table, -/turf/simulated/floor/airless, -/area/magshield/north) -"eQ" = ( -/obj/structure/table/steel, -/obj/item/storage/toolbox/mechanical, -/turf/simulated/floor/airless, -/area/magshield/north) -"eR" = ( -/obj/structure/table/steel, -/turf/simulated/floor/airless, -/area/magshield/north) -"eS" = ( -/obj/structure/table/steel, -/obj/item/storage/box/lights, -/turf/simulated/floor/airless, -/area/magshield/north) -"eT" = ( -/obj/machinery/door/airlock/external/bolted_open, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/access_button{ - pixel_x = -25; - pixel_y = 25 - }, -/turf/simulated/floor/airless, -/area/magshield/north) -"eU" = ( -/obj/machinery/light/small, -/turf/simulated/floor/airless, -/area/magshield/north) -"eV" = ( -/obj/structure/closet, -/obj/random/material, -/obj/random/material, -/turf/simulated/floor/airless, -/area/magshield/north) -"eW" = ( -/obj/structure/closet, -/obj/random/material, -/turf/simulated/floor/airless, -/area/magshield/north) -"eX" = ( -/obj/structure/closet, -/obj/random/tool, -/turf/simulated/floor/airless, -/area/magshield/north) -"eY" = ( -/obj/structure/reagent_dispensers/watertank, -/turf/simulated/floor/airless, -/area/magshield/north) -"eZ" = ( -/obj/structure/reagent_dispensers/fueltank, -/turf/simulated/floor/airless, -/area/magshield/north) -"fa" = ( -/obj/structure/janitorialcart, -/turf/simulated/floor/airless, -/area/magshield/north) -"fb" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/door/airlock, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/airless, -/area/magshield/north) -"fc" = ( -/obj/machinery/light/small{ - dir = 8 - }, -/turf/space, -/area/space) -"fd" = ( -/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{ - dir = 1; - id_tag = "centcom_shuttle_dock_pump" - }, -/obj/effect/floor_decal/industrial/hatch/blue, -/obj/machinery/embedded_controller/radio/airlock/airlock_controller{ - pixel_x = 25 - }, -/obj/machinery/airlock_sensor{ - pixel_x = -25 - }, -/turf/simulated/floor/airless, -/area/magshield/north) -"fe" = ( -/turf/simulated/wall, -/area/magshield/east) -"ff" = ( -/obj/machinery/atmospherics/unary/tank, -/obj/machinery/atmospherics/portables_connector{ - dir = 4 - }, -/turf/simulated/floor/airless, -/area/magshield/east) -"fg" = ( -/obj/machinery/atmospherics/pipe/simple/visible/black{ - dir = 10 - }, -/turf/simulated/floor/airless, -/area/magshield/east) -"fh" = ( -/obj/machinery/light/small{ - dir = 1 - }, -/turf/simulated/floor/airless, -/area/magshield/east) -"fi" = ( -/turf/simulated/floor/airless, -/area/magshield/east) -"fj" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/airless, -/area/magshield/east) -"fk" = ( -/turf/simulated/wall/r_wall, -/area/magshield/east) -"fl" = ( -/obj/structure/grille, -/turf/simulated/wall/r_wall, -/area/magshield/north) -"fm" = ( -/obj/item/mop, -/turf/simulated/floor/airless, -/area/magshield/north) -"fn" = ( -/obj/machinery/door/airlock/external/bolted_open, -/turf/simulated/floor/airless, -/area/magshield/north) -"fo" = ( -/obj/machinery/atmospherics/pipe/manifold4w/visible/black, -/turf/simulated/floor/airless, -/area/magshield/east) -"fp" = ( -/obj/machinery/atmospherics/binary/pump{ - dir = 4 - }, -/turf/simulated/floor/airless, -/area/magshield/east) -"fq" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/universal{ - dir = 4 - }, -/turf/simulated/floor/airless, -/area/magshield/east) -"fr" = ( -/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/airless, -/area/magshield/east) -"fs" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 8; - level = 2 - }, -/turf/simulated/floor/airless, -/area/magshield/east) -"ft" = ( -/obj/effect/shuttle_landmark/nav_magshield/nav5, -/turf/space, -/area/space) -"fu" = ( -/turf/simulated/wall/r_wall, -/area/magshield/west) -"fv" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled, -/area/magshield/west) -"fw" = ( -/obj/machinery/access_button{ - pixel_x = -25; - pixel_y = 25 - }, -/turf/simulated/floor/airless, -/area/magshield/north) -"fx" = ( -/obj/machinery/atmospherics/unary/tank, -/obj/machinery/atmospherics/portables_connector{ - dir = 4 - }, -/obj/machinery/light_construct{ - dir = 8 - }, -/turf/simulated/floor/airless, -/area/magshield/east) -"fy" = ( -/obj/machinery/atmospherics/pipe/manifold/visible/black{ - dir = 4 - }, -/turf/simulated/floor/airless, -/area/magshield/east) -"fz" = ( -/obj/machinery/light_construct{ - dir = 4 - }, -/turf/simulated/floor/airless, -/area/magshield/east) -"fA" = ( -/turf/simulated/floor/tiled, -/area/magshield/west) -"fB" = ( -/turf/simulated/floor/tiled/dark, -/area/magshield/west) -"fC" = ( -/obj/machinery/light_construct{ - dir = 1 - }, -/turf/simulated/floor/tiled/dark, -/area/magshield/west) -"fD" = ( -/obj/random/junk, -/turf/simulated/floor/tiled/dark, -/area/magshield/west) -"fE" = ( -/obj/structure/cable{ - icon_state = "1-10" - }, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/dark, -/area/magshield/west) -"fF" = ( -/obj/machinery/light_construct{ - dir = 1 - }, -/turf/simulated/floor/tiled, -/area/magshield/west) -"fG" = ( -/obj/structure/reagent_dispensers/water_cooler, -/turf/simulated/floor/tiled, -/area/magshield/west) -"fH" = ( -/obj/effect/overmap/visitable/sector/magshield, -/turf/simulated/floor/airless, -/area/magshield/north) -"fI" = ( -/obj/machinery/atmospherics/pipe/simple/visible/black{ - dir = 4 - }, -/turf/simulated/floor/airless, -/area/magshield/east) -"fJ" = ( -/obj/structure/grille, -/turf/space, -/area/magshield/east) -"fK" = ( -/obj/structure/cable{ - icon_state = "4-10" - }, -/turf/simulated/floor/tiled/dark, -/area/magshield/west) -"fL" = ( -/obj/structure/table/steel, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled, -/area/magshield/west) -"fM" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/computer/modular{ - dir = 8 - }, -/turf/simulated/floor/tiled, -/area/magshield/west) -"fN" = ( -/obj/structure/cable{ - icon_state = "5-8" - }, -/turf/simulated/floor/tiled, -/area/magshield/west) -"fO" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/dark, -/area/magshield/west) -"fP" = ( -/obj/item/newspaper, -/turf/simulated/floor/tiled, -/area/magshield/west) -"fQ" = ( -/obj/machinery/atmospherics/binary/pump{ - dir = 1 - }, -/turf/simulated/floor/airless, -/area/magshield/east) -"fR" = ( -/obj/machinery/atmospherics/omni/mixer{ - tag_east = 1; - tag_east_con = 0.21; - tag_north = 2; - tag_south = 1; - tag_south_con = 0.79 - }, -/turf/simulated/floor/airless, -/area/magshield/east) -"fS" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/visible/red{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/airless, -/area/magshield/east) -"fT" = ( -/obj/machinery/atmospherics/omni/filter{ - tag_east = 2; - tag_south = 1; - tag_west = 3 - }, -/turf/simulated/floor/airless, -/area/magshield/east) -"fU" = ( -/obj/machinery/atmospherics/pipe/simple/visible/red{ - dir = 4 - }, -/turf/simulated/floor/airless, -/area/magshield/east) -"fV" = ( -/obj/machinery/atmospherics/pipe/manifold/visible/red{ - dir = 1 - }, -/turf/simulated/floor/airless, -/area/magshield/east) -"fW" = ( -/obj/machinery/atmospherics/pipe/simple/visible/red{ - dir = 4 - }, -/turf/simulated/wall/r_wall, -/area/magshield/east) -"fX" = ( -/obj/machinery/atmospherics/unary/outlet_injector{ - dir = 8; - frequency = 1441; - icon_state = "map_injector"; - id = "d_n2_in"; - use_power = 1 - }, -/turf/simulated/floor/airless, -/area/magshield/east) -"fY" = ( -/obj/structure/cable{ - icon_state = "2-5" - }, -/turf/simulated/floor/tiled, -/area/magshield/west) -"fZ" = ( -/obj/structure/bed/chair/office/dark{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/magshield/west) -"ga" = ( -/obj/machinery/computer/modular{ - dir = 8 - }, -/turf/simulated/floor/tiled, -/area/magshield/west) -"gb" = ( -/obj/structure/table/steel, -/obj/item/material/ashtray/plastic, -/obj/random/smokes, -/turf/simulated/floor/tiled, -/area/magshield/west) -"gc" = ( -/obj/effect/wallframe_spawn/reinforced, -/obj/machinery/door/firedoor, -/turf/simulated/floor/tiled, -/area/magshield/west) -"gd" = ( -/obj/machinery/atmospherics/portables_connector{ - dir = 1 - }, -/turf/simulated/floor/airless, -/area/magshield/east) -"ge" = ( -/obj/machinery/atmospherics/pipe/simple/visible/red, -/turf/simulated/floor/airless, -/area/magshield/east) -"gf" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled, -/area/magshield/west) -"gg" = ( -/obj/structure/table/steel, -/obj/random/toy, -/turf/simulated/floor/tiled, -/area/magshield/west) -"gh" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 1 - }, -/obj/machinery/portable_atmospherics/canister/oxygen, -/turf/simulated/floor/airless, -/area/magshield/east) -"gi" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 5; - icon_state = "warning" - }, -/turf/simulated/floor/airless, -/area/magshield/east) -"gj" = ( -/obj/machinery/portable_atmospherics/canister/oxygen, -/turf/simulated/floor/airless, -/area/magshield/east) -"gk" = ( -/obj/machinery/atmospherics/pipe/simple/visible/red{ - dir = 5 - }, -/turf/simulated/floor/airless, -/area/magshield/east) -"gl" = ( -/obj/machinery/atmospherics/pipe/simple/visible/red{ - dir = 9 - }, -/turf/simulated/floor/airless, -/area/magshield/east) -"gm" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/light_construct{ - dir = 8 - }, -/turf/simulated/floor/tiled, -/area/magshield/west) -"gn" = ( -/obj/structure/table/steel, -/obj/item/reagent_containers/food/drinks/coffee, -/turf/simulated/floor/tiled, -/area/magshield/west) -"go" = ( -/obj/structure/table/steel, -/turf/simulated/floor/tiled, -/area/magshield/west) -"gp" = ( -/obj/structure/magshield/nav_light/red{ - dir = 4 - }, -/turf/simulated/floor/airless, -/area/space) -"gq" = ( -/obj/structure/magshield/nav_light{ - dir = 8 - }, -/turf/simulated/floor/airless, -/area/space) -"gr" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 4 - }, -/turf/simulated/floor/airless, -/area/magshield/east) -"gs" = ( -/obj/structure/closet, -/obj/random/cash, -/obj/random/cash, -/obj/random/clothing, -/obj/machinery/atmospherics/unary/vent_pump/on, -/turf/simulated/floor/carpet/blue, -/area/magshield/west) -"gt" = ( -/obj/structure/closet, -/obj/item/storage/wallet/leather, -/obj/random/clothing, -/obj/random/smokes, -/turf/simulated/floor/carpet/blue, -/area/magshield/west) -"gu" = ( -/obj/machinery/light{ - dir = 1 - }, -/turf/simulated/floor/carpet/blue, -/area/magshield/west) -"gv" = ( -/turf/simulated/floor/carpet/blue, -/area/magshield/west) -"gw" = ( -/obj/structure/bed, -/turf/simulated/floor/carpet/blue, -/area/magshield/west) -"gx" = ( -/obj/machinery/light_construct{ - dir = 8 - }, -/turf/simulated/floor/airless, -/area/magshield/east) -"gy" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 4 - }, -/obj/machinery/portable_atmospherics/canister/nitrogen, -/turf/simulated/floor/airless, -/area/magshield/east) -"gz" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/universal, -/turf/simulated/floor/airless, -/area/magshield/east) -"gA" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/carpet/blue, -/area/magshield/west) -"gB" = ( -/obj/effect/floor_decal/industrial/warning, -/obj/machinery/portable_atmospherics/canister, -/turf/simulated/floor/airless, -/area/magshield/east) -"gC" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 6; - icon_state = "warning" - }, -/obj/machinery/portable_atmospherics/canister, -/turf/simulated/floor/airless, -/area/magshield/east) -"gD" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/airless, -/area/magshield/east) -"gE" = ( -/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers, -/turf/simulated/floor/airless, -/area/magshield/east) -"gF" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 8 - }, -/turf/simulated/floor/airless, -/area/magshield/east) -"gG" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, -/turf/simulated/floor/carpet/blue, -/area/magshield/west) -"gH" = ( -/obj/structure/table/woodentable{ - dir = 10 - }, -/obj/item/storage/box/checkers, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 8 - }, -/turf/simulated/floor/carpet/blue, -/area/magshield/west) -"gI" = ( -/obj/structure/table/woodentable{ - dir = 10 - }, -/obj/item/storage/belt/champion, -/turf/simulated/floor/carpet/blue, -/area/magshield/west) -"gJ" = ( -/obj/structure/table/woodentable{ - dir = 10 - }, -/turf/simulated/floor/carpet/blue, -/area/magshield/west) -"gK" = ( -/obj/structure/table/woodentable{ - dir = 10 - }, -/obj/item/storage/bible/booze, -/turf/simulated/floor/carpet/blue, -/area/magshield/west) -"gL" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/obj/structure/cable{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/turf/simulated/floor/airless, -/area/magshield/east) -"gM" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/airless, -/area/magshield/east) -"gN" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/obj/structure/cable{ - icon_state = "2-8" - }, -/turf/simulated/floor/airless, -/area/magshield/east) -"gO" = ( -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled, -/area/magshield/west) -"gP" = ( -/turf/simulated/wall, -/area/magshield/west) -"gQ" = ( -/obj/machinery/power/apc{ - dir = 8; - name = "west bump"; - pixel_x = -24 - }, -/obj/structure/cable, -/turf/simulated/floor/tiled/white, -/area/magshield/west) -"gR" = ( -/turf/simulated/floor/tiled/white, -/area/magshield/west) -"gS" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/random/junk, -/turf/simulated/floor/tiled/dark, -/area/magshield/west) -"gT" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/door/airlock, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/airless, -/area/magshield/east) -"gU" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled, -/area/magshield/west) -"gV" = ( -/obj/structure/bookcase/manuals/xenoarchaeology, -/turf/simulated/floor/tiled, -/area/magshield/west) -"gW" = ( -/obj/structure/bookcase/manuals/engineering, -/turf/simulated/floor/tiled, -/area/magshield/west) -"gX" = ( -/obj/structure/bookcase/manuals/medical, -/turf/simulated/floor/tiled, -/area/magshield/west) -"gY" = ( -/obj/structure/table/woodentable, -/obj/random/action_figure, -/turf/simulated/floor/tiled, -/area/magshield/west) -"gZ" = ( -/obj/structure/table/steel, -/obj/item/reagent_containers/food/drinks/coffee, -/obj/random/smokes, -/turf/simulated/floor/tiled/white, -/area/magshield/west) -"ha" = ( -/obj/machinery/computer/modular{ - dir = 8 - }, -/turf/simulated/floor/tiled/white, -/area/magshield/west) -"hb" = ( -/obj/structure/table/steel, -/obj/random/glasses, -/turf/simulated/floor/tiled, -/area/magshield/west) -"hc" = ( -/obj/effect/shuttle_landmark/nav_magshield/nav1, -/turf/space, -/area/space) -"hd" = ( -/obj/machinery/portable_atmospherics/hydroponics, -/turf/simulated/floor/tiled, -/area/magshield/east) -"he" = ( -/obj/machinery/light{ - dir = 1 - }, -/turf/simulated/floor/tiled, -/area/magshield/east) -"hf" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/airless, -/area/magshield/east) -"hg" = ( -/obj/machinery/door/airlock/external/bolted_open, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/airless, -/area/magshield/east) -"hh" = ( -/obj/machinery/embedded_controller/radio/airlock/airlock_controller{ - pixel_y = 25 - }, -/obj/machinery/airlock_sensor{ - pixel_y = -25 - }, -/turf/simulated/floor/airless, -/area/magshield/east) -"hi" = ( -/obj/structure/lattice, -/turf/space, -/area/magshield/east) -"hj" = ( -/obj/machinery/access_button{ - pixel_x = -25; - pixel_y = -25 - }, -/obj/structure/lattice, -/turf/space, -/area/magshield/east) -"hk" = ( -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/airless, -/area/space) -"hl" = ( -/obj/structure/magshield/rad_sensor, -/obj/structure/cable/cyan{ - d2 = 8; - icon_state = "0-8" - }, -/turf/simulated/floor/airless, -/area/space) -"hm" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/light{ - dir = 8; - icon_state = "tube1" - }, -/turf/simulated/floor/tiled, -/area/magshield/west) -"hn" = ( -/obj/structure/table/woodentable, -/obj/item/material/sword/replica, -/turf/simulated/floor/tiled, -/area/magshield/west) -"ho" = ( -/obj/machinery/light_construct{ - dir = 8 - }, -/turf/simulated/floor/tiled/white, -/area/magshield/west) -"hp" = ( -/obj/structure/bed/chair/comfy/captain, -/turf/simulated/floor/tiled/white, -/area/magshield/west) -"hq" = ( -/obj/item/paper/magshield/log, -/obj/machinery/computer/modular{ - dir = 8 - }, -/turf/simulated/floor/tiled/white, -/area/magshield/west) -"hr" = ( -/obj/random/junk, -/turf/simulated/floor/tiled, -/area/magshield/west) -"hs" = ( -/turf/simulated/floor/tiled, -/area/magshield/east) -"ht" = ( -/obj/machinery/light/small{ - dir = 8 - }, -/turf/simulated/floor/airless, -/area/magshield/east) -"hu" = ( -/turf/space, -/area/magshield/east) -"hv" = ( -/obj/item/ore/slag, -/turf/simulated/floor/airless, -/area/space) -"hw" = ( -/obj/structure/table/woodentable, -/obj/random/plushie/large, -/turf/simulated/floor/tiled, -/area/magshield/west) -"hx" = ( -/obj/structure/table/steel, -/obj/item/material/ashtray/bronze, -/turf/simulated/floor/tiled/white, -/area/magshield/west) -"hy" = ( -/obj/structure/table/steel, -/obj/random/smokes, -/turf/simulated/floor/tiled, -/area/magshield/west) -"hz" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable{ - icon_state = "1-10" - }, -/turf/simulated/floor/airless, -/area/magshield/east) -"hA" = ( -/obj/structure/table/rack, -/obj/random/voidsuit, -/obj/random/voidhelmet, -/turf/simulated/floor/airless, -/area/magshield/east) -"hB" = ( -/obj/structure/safe, -/obj/random/coin, -/obj/random/contraband, -/obj/random/energy, -/obj/item/grenade/fake, -/obj/random/cash, -/obj/random/cash, -/obj/random/cash, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled, -/area/magshield/west) -"hC" = ( -/obj/structure/table/woodentable, -/obj/item/toy/torchmodel, -/turf/simulated/floor/tiled, -/area/magshield/west) -"hD" = ( -/obj/item/book/manual/magshield_manual, -/turf/simulated/floor/tiled/white, -/area/magshield/west) -"hE" = ( -/obj/structure/lattice, -/turf/space, -/area/magshield/west) -"hF" = ( -/obj/item/ore, -/turf/simulated/floor/tiled, -/area/magshield/west) -"hG" = ( -/obj/machinery/power/apc{ - dir = 8; - name = "west bump"; - pixel_x = -24 - }, -/obj/structure/cable{ - d1 = 16; - d2 = 0; - dir = 4; - icon_state = "0-2" - }, -/turf/simulated/floor/airless, -/area/magshield/east) -"hH" = ( -/obj/structure/cable{ - icon_state = "5-8" - }, -/obj/structure/cable{ - icon_state = "2-5" - }, -/turf/simulated/floor/airless, -/area/magshield/east) -"hI" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/airless, -/area/magshield/east) -"hJ" = ( -/obj/structure/filingcabinet/chestdrawer, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/carpet/blue, -/area/magshield/west) -"hK" = ( -/obj/structure/table/woodentable, -/obj/item/book/manual/supermatter_engine, -/turf/simulated/floor/carpet/blue, -/area/magshield/west) -"hL" = ( -/obj/item/ore, -/turf/simulated/floor/tiled/dark, -/area/magshield/west) -"hM" = ( -/turf/space, -/area/magshield/west) -"hN" = ( -/obj/item/reagent_containers/glass/bucket, -/turf/simulated/floor/tiled, -/area/magshield/east) -"hO" = ( -/obj/structure/reagent_dispensers/watertank, -/turf/simulated/floor/airless, -/area/magshield/east) -"hP" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/airless, -/area/magshield/east) -"hQ" = ( -/obj/machinery/portable_atmospherics/canister/oxygen, -/obj/machinery/light_construct{ - dir = 4 - }, -/turf/simulated/floor/airless, -/area/magshield/east) -"hR" = ( -/obj/structure/filingcabinet/chestdrawer, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/turf/simulated/floor/carpet/blue, -/area/magshield/west) -"hS" = ( -/obj/structure/bed/chair/comfy/red, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 1 - }, -/turf/simulated/floor/carpet/blue, -/area/magshield/west) -"hT" = ( -/obj/structure/table/woodentable, -/obj/item/book/manual/evaguide, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/carpet/blue, -/area/magshield/west) -"hU" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/magshield/west) -"hV" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/magshield/west) -"hW" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark, -/area/magshield/west) -"hX" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/item/paper/magshield/tornpage, -/turf/simulated/floor/tiled/dark, -/area/magshield/west) -"hY" = ( -/obj/structure/table/steel, -/obj/item/material/ashtray/plastic, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/magshield/west) -"hZ" = ( -/obj/structure/table/woodentable, -/obj/random/accessory, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 1 - }, -/turf/simulated/floor/carpet/blue, -/area/magshield/west) -"ia" = ( -/obj/structure/table/woodentable, -/obj/item/flame/lighter/zippo/random, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 1 - }, -/turf/simulated/floor/carpet/blue, -/area/magshield/west) -"ib" = ( -/obj/structure/table/woodentable, -/obj/item/material/ashtray/bronze, -/obj/random/smokes, -/obj/machinery/light, -/turf/simulated/floor/carpet/blue, -/area/magshield/west) -"ic" = ( -/obj/item/stack/material/rods, -/turf/simulated/floor/tiled/dark, -/area/magshield/west) -"id" = ( -/obj/item/stack/material/rods, -/turf/space, -/area/magshield/west) -"ie" = ( -/obj/machinery/seed_storage, -/turf/simulated/floor/tiled, -/area/magshield/east) -"if" = ( -/obj/structure/reagent_dispensers/watertank, -/obj/item/reagent_containers/glass/bucket, -/turf/simulated/floor/airless, -/area/magshield/east) -"ig" = ( -/obj/structure/cable{ - icon_state = "1-10" - }, -/turf/simulated/floor/airless, -/area/magshield/east) -"ih" = ( -/obj/machinery/portable_atmospherics/hydroponics, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/magshield/east) -"ii" = ( -/obj/item/material/minihoe, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/light, -/turf/simulated/floor/tiled, -/area/magshield/east) -"ij" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/turf/simulated/floor/tiled, -/area/magshield/east) -"ik" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/airless, -/area/magshield/east) -"il" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 1 - }, -/obj/structure/cable{ - icon_state = "2-5" - }, -/turf/simulated/floor/airless, -/area/magshield/east) -"im" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/airless, -/area/magshield/east) -"in" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/turf/simulated/floor/airless, -/area/magshield/east) -"io" = ( -/obj/machinery/light_construct{ - dir = 8 - }, -/turf/simulated/floor/tiled, -/area/magshield/west) -"ip" = ( -/turf/simulated/wall/r_wall, -/area/magshield/south) -"iq" = ( -/turf/simulated/wall, -/area/magshield/south) -"ir" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled, -/area/magshield/south) -"is" = ( -/obj/item/ore/slag, -/turf/space, -/area/space) -"it" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/dark, -/area/magshield/west) -"iu" = ( -/turf/simulated/floor/tiled/white, -/area/magshield/south) -"iv" = ( -/obj/structure/curtain/open/shower, -/turf/simulated/floor/tiled/white, -/area/magshield/south) -"iw" = ( -/obj/structure/hygiene/shower{ - dir = 8 - }, -/obj/machinery/light/small{ - dir = 1 - }, -/turf/simulated/floor/tiled/white, -/area/magshield/south) -"ix" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled, -/area/magshield/south) -"iy" = ( -/obj/structure/table, -/obj/random/firstaid, -/turf/simulated/floor/tiled/white, -/area/magshield/south) -"iz" = ( -/obj/machinery/light_construct{ - dir = 1 - }, -/turf/simulated/floor/tiled/white, -/area/magshield/south) -"iA" = ( -/obj/structure/bed, -/turf/simulated/floor/tiled/white, -/area/magshield/south) -"iB" = ( -/obj/random/material, -/turf/space, -/area/space) -"iC" = ( -/turf/simulated/floor/airless, -/area/magshield/west) -"iD" = ( -/obj/structure/table/steel, -/obj/item/reagent_containers/food/drinks/cans/space_up, -/obj/item/reagent_containers/food/drinks/cans/space_up{ - pixel_x = 5; - pixel_y = 4 - }, -/obj/item/reagent_containers/food/drinks/cans/space_up{ - pixel_x = -8; - pixel_y = 5 - }, -/obj/item/reagent_containers/food/drinks/cans/space_up{ - pixel_x = -2; - pixel_y = -4 - }, -/turf/simulated/floor/tiled, -/area/magshield/west) -"iE" = ( -/obj/structure/iv_drip, -/turf/simulated/floor/tiled/white, -/area/magshield/south) -"iF" = ( -/obj/random/medical/lite, -/turf/simulated/floor/tiled/white, -/area/magshield/south) -"iG" = ( -/obj/machinery/light_construct, -/turf/simulated/floor/tiled, -/area/magshield/west) -"iH" = ( -/obj/machinery/light{ - dir = 8; - icon_state = "tube1" - }, -/turf/simulated/floor/tiled/white, -/area/magshield/south) -"iI" = ( -/obj/structure/hygiene/shower{ - dir = 8 - }, -/obj/random/trash, -/obj/machinery/light/small{ - dir = 1 - }, -/turf/simulated/floor/tiled/white, -/area/magshield/south) -"iJ" = ( -/obj/item/bedsheet, -/turf/simulated/floor/tiled/white, -/area/magshield/south) -"iK" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled, -/area/magshield/west) -"iL" = ( -/obj/structure/hygiene/toilet, -/turf/simulated/floor/tiled/white, -/area/magshield/south) -"iM" = ( -/obj/structure/hygiene/urinal{ - pixel_y = 25 - }, -/obj/random/trash, -/turf/simulated/floor/tiled/white, -/area/magshield/south) -"iO" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 8 - }, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled, -/area/magshield/south) -"iP" = ( -/obj/machinery/vending/coffee, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 8 - }, -/turf/simulated/floor/tiled, -/area/magshield/south) -"iQ" = ( -/obj/machinery/vending/cola, -/turf/simulated/floor/tiled, -/area/magshield/south) -"iR" = ( -/obj/machinery/vending/snack, -/turf/simulated/floor/tiled, -/area/magshield/south) -"iS" = ( -/obj/effect/wallframe_spawn/reinforced, -/turf/simulated/floor/tiled, -/area/magshield/south) -"iT" = ( -/obj/machinery/door/airlock, -/turf/simulated/floor/tiled/white, -/area/magshield/south) -"iU" = ( -/obj/structure/hygiene/toilet{ - dir = 8 - }, -/obj/machinery/light/small{ - dir = 1 - }, -/turf/simulated/floor/tiled/white, -/area/magshield/south) -"iV" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/light_construct{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/magshield/south) -"iW" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/turf/simulated/floor/tiled/white, -/area/magshield/south) -"iX" = ( -/obj/item/ore/slag, -/turf/simulated/floor/tiled/white, -/area/magshield/south) -"iY" = ( -/obj/machinery/light/small{ - dir = 8 - }, -/turf/simulated/floor/tiled/white, -/area/magshield/south) -"iZ" = ( -/obj/machinery/light, -/turf/simulated/floor/tiled/white, -/area/magshield/south) -"ja" = ( -/mob/living/simple_animal/hostile/carp, -/turf/simulated/floor/tiled/white, -/area/magshield/south) -"jd" = ( -/turf/simulated/floor/tiled, -/area/magshield/south) -"je" = ( -/obj/structure/bed/chair, -/turf/simulated/floor/tiled, -/area/magshield/south) -"jf" = ( -/obj/effect/wallframe_spawn/reinforced, -/obj/machinery/door/firedoor, -/turf/simulated/floor/tiled, -/area/magshield/south) -"jg" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 8 - }, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled, -/area/magshield/south) -"jh" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/magshield/south) -"ji" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/turf/simulated/floor/tiled/white, -/area/magshield/south) -"jj" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/magshield/south) -"jk" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 8; - level = 2 - }, -/turf/simulated/floor/tiled/white, -/area/magshield/south) -"jl" = ( -/turf/space, -/area/magshield/south) -"jm" = ( -/obj/structure/table/standard{ - name = "plastic table frame" - }, -/obj/random/smokes, -/turf/simulated/floor/tiled, -/area/magshield/south) -"jn" = ( -/obj/structure/table/standard{ - name = "plastic table frame" - }, -/obj/random/firstaid, -/turf/simulated/floor/tiled, -/area/magshield/south) -"jo" = ( -/obj/machinery/light/small{ - dir = 1 - }, -/turf/simulated/floor/tiled, -/area/magshield/south) -"jp" = ( -/obj/structure/bed, -/obj/item/bedsheet, -/turf/simulated/floor/tiled, -/area/magshield/south) -"jq" = ( -/obj/structure/bed, -/turf/simulated/floor/tiled, -/area/magshield/south) -"jr" = ( -/obj/random/trash, -/obj/machinery/light/small{ - dir = 1 - }, -/turf/simulated/floor/tiled, -/area/magshield/south) -"js" = ( -/obj/structure/bed/chair{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/magshield/south) -"jt" = ( -/obj/structure/table/standard{ - name = "plastic table frame" - }, -/turf/simulated/floor/tiled, -/area/magshield/south) -"ju" = ( -/obj/structure/bed/chair{ - dir = 8 - }, -/obj/machinery/light{ - dir = 1 - }, -/turf/simulated/floor/tiled, -/area/magshield/south) -"jv" = ( -/obj/structure/table/standard{ - name = "plastic table frame" - }, -/obj/item/trash/plate, -/obj/item/reagent_containers/food/snacks/flatbread, -/turf/simulated/floor/tiled, -/area/magshield/south) -"jw" = ( -/obj/structure/bed/chair{ - dir = 8 - }, -/turf/simulated/floor/tiled, -/area/magshield/south) -"jx" = ( -/obj/structure/table/marble, -/obj/machinery/light{ - dir = 1 - }, -/turf/simulated/floor/tiled/white, -/area/magshield/south) -"jy" = ( -/obj/structure/table/marble, -/obj/item/material/knife/kitchen/cleaver, -/turf/simulated/floor/tiled/white, -/area/magshield/south) -"jz" = ( -/obj/structure/hygiene/sink{ - pixel_y = 25 - }, -/turf/simulated/floor/tiled/white, -/area/magshield/south) -"jA" = ( -/obj/machinery/light/small{ - dir = 1 - }, -/turf/simulated/floor/tiled/freezer, -/area/magshield/south) -"jB" = ( -/obj/structure/closet/secure_closet/freezer/fridge, -/turf/simulated/floor/tiled/freezer, -/area/magshield/south) -"jC" = ( -/obj/machinery/washing_machine, -/turf/simulated/floor/tiled/white, -/area/magshield/south) -"jD" = ( -/obj/structure/lattice, -/turf/space, -/area/magshield/south) -"jE" = ( -/obj/structure/magshield/maggen, -/turf/simulated/floor/airless, -/area/space) -"jF" = ( -/obj/machinery/door/airlock/external/bolted, -/turf/simulated/floor/airless, -/area/magshield/south) -"jG" = ( -/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{ - dir = 4; - id_tag = "merchant_station_vent" - }, -/obj/machinery/embedded_controller/radio/airlock/airlock_controller{ - pixel_y = 25 - }, -/obj/machinery/airlock_sensor{ - pixel_y = -25 - }, -/turf/simulated/floor/airless, -/area/magshield/south) -"jH" = ( -/obj/machinery/door/airlock/external/bolted, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/airless, -/area/magshield/south) -"jI" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/magshield/south) -"jJ" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/power/apc{ - dir = 1; - name = "north bump"; - pixel_y = 24 - }, -/obj/structure/cable{ - d1 = 16; - d2 = 0; - dir = 4; - icon_state = "0-2" - }, -/turf/simulated/floor/tiled, -/area/magshield/south) -"jK" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/turf/simulated/floor/tiled, -/area/magshield/south) -"jL" = ( -/obj/structure/table/standard{ - name = "plastic table frame" - }, -/obj/random/plushie/large, -/obj/random/smokes, -/turf/simulated/floor/tiled, -/area/magshield/south) -"jM" = ( -/obj/structure/table/standard{ - name = "plastic table frame" - }, -/obj/machinery/light{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/magshield/south) -"jN" = ( -/obj/structure/closet, -/obj/random/glasses, -/obj/random/hat, -/obj/random/cash, -/turf/simulated/floor/tiled, -/area/magshield/south) -"jO" = ( -/obj/structure/closet, -/obj/random/clothing, -/obj/random/accessory, -/obj/random/smokes, -/turf/simulated/floor/tiled, -/area/magshield/south) -"jP" = ( -/obj/structure/closet, -/obj/random/junk, -/turf/simulated/floor/tiled, -/area/magshield/south) -"jQ" = ( -/obj/structure/closet, -/obj/random/clothing, -/turf/simulated/floor/tiled, -/area/magshield/south) -"jR" = ( -/obj/structure/closet, -/obj/random/clothing, -/obj/random/cash, -/turf/simulated/floor/tiled, -/area/magshield/south) -"jS" = ( -/obj/structure/table/standard{ - name = "plastic table frame" - }, -/obj/item/trash/plate, -/turf/simulated/floor/tiled, -/area/magshield/south) -"jT" = ( -/obj/structure/table/standard{ - name = "plastic table frame" - }, -/obj/item/material/knife/table, -/turf/simulated/floor/tiled, -/area/magshield/south) -"jU" = ( -/obj/structure/table/standard{ - name = "plastic table frame" - }, -/obj/random/snack, -/turf/simulated/floor/tiled, -/area/magshield/south) -"jV" = ( -/obj/structure/table/marble, -/turf/simulated/floor/tiled/white, -/area/magshield/south) -"jW" = ( -/obj/item/material/knife/hook, -/turf/simulated/floor/tiled/freezer, -/area/magshield/south) -"jX" = ( -/obj/machinery/atmospherics/unary/vent_pump/on, -/obj/machinery/light{ - dir = 8; - icon_state = "tube1" - }, -/turf/simulated/floor/tiled/white, -/area/magshield/south) -"jY" = ( -/obj/structure/hygiene/sink{ - dir = 4; - pixel_x = 11 - }, -/obj/item/soap, -/turf/simulated/floor/tiled/white, -/area/magshield/south) -"jZ" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 8 - }, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/cable{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/turf/simulated/floor/tiled, -/area/magshield/south) -"ka" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/airless, -/area/magshield/south) -"kb" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/airless, -/area/magshield/south) -"kc" = ( -/turf/simulated/floor/airless, -/area/magshield/south) -"kd" = ( -/obj/structure/bed/roller, -/turf/simulated/floor/airless, -/area/space) -"ke" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/airless, -/area/space) -"kf" = ( -/obj/structure/sign/warning/airlock{ - pixel_x = -30 - }, -/turf/simulated/floor/tiled, -/area/magshield/south) -"kg" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled, -/area/magshield/south) -"kh" = ( -/obj/structure/bed/chair{ - dir = 1 - }, -/turf/simulated/floor/tiled, -/area/magshield/south) -"ki" = ( -/obj/structure/curtain/open/bed, -/turf/simulated/floor/tiled, -/area/magshield/south) -"kj" = ( -/obj/random/snack, -/turf/simulated/floor/tiled, -/area/magshield/south) -"kk" = ( -/obj/machinery/atmospherics/unary/vent_pump/on, -/turf/simulated/floor/tiled, -/area/magshield/south) -"kl" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/turf/simulated/floor/tiled, -/area/magshield/south) -"km" = ( -/obj/machinery/vending/dinnerware, -/turf/simulated/floor/tiled/white, -/area/magshield/south) -"kn" = ( -/obj/structure/table/marble, -/obj/machinery/microwave, -/turf/simulated/floor/tiled/white, -/area/magshield/south) -"ko" = ( -/turf/simulated/floor/tiled/freezer, -/area/magshield/south) -"kp" = ( -/obj/structure/closet/secure_closet/freezer/fridge, -/obj/item/reagent_containers/food/snacks/hotdog, -/turf/simulated/floor/tiled/freezer, -/area/magshield/south) -"kq" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, -/turf/simulated/floor/tiled/white, -/area/magshield/south) -"kr" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 8 - }, -/turf/simulated/floor/tiled/white, -/area/magshield/south) -"ks" = ( -/obj/structure/hygiene/sink{ - dir = 4; - pixel_x = 11 - }, -/turf/simulated/floor/tiled/white, -/area/magshield/south) -"kt" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/light_construct{ - dir = 8 - }, -/turf/simulated/floor/tiled, -/area/magshield/south) -"ku" = ( -/obj/item/ore, -/turf/space, -/area/magshield/south) -"kv" = ( -/obj/machinery/light{ - dir = 8; - icon_state = "tube1" - }, -/turf/simulated/floor/tiled, -/area/magshield/south) -"kw" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/turf/simulated/floor/tiled, -/area/magshield/south) -"kx" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/magshield/south) -"ky" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/magshield/south) -"kz" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/magshield/south) -"kA" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/light, -/turf/simulated/floor/tiled, -/area/magshield/south) -"kB" = ( -/obj/item/flame/match, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/magshield/south) -"kC" = ( -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/magshield/south) -"kD" = ( -/obj/item/material/kitchen/utensil/fork/plastic, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/magshield/south) -"kE" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/magshield/south) -"kF" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, -/turf/simulated/floor/tiled, -/area/magshield/south) -"kG" = ( -/obj/random/trash, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/magshield/south) -"kH" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/turf/simulated/floor/tiled, -/area/magshield/south) -"kI" = ( -/obj/structure/table/marble, -/obj/item/reagent_containers/food/snacks/chips, -/turf/simulated/floor/tiled/white, -/area/magshield/south) -"kJ" = ( -/obj/structure/table/marble, -/obj/item/material/knife/table, -/turf/simulated/floor/tiled/white, -/area/magshield/south) -"kK" = ( -/obj/structure/kitchenspike, -/turf/simulated/floor/tiled/freezer, -/area/magshield/south) -"kL" = ( -/obj/structure/closet/secure_closet/freezer/meat, -/obj/item/reagent_containers/food/snacks/meat, -/obj/item/reagent_containers/food/snacks/meat, -/obj/item/reagent_containers/food/snacks/meat, -/obj/item/reagent_containers/food/snacks/meat, -/obj/item/reagent_containers/food/snacks/meat, -/turf/simulated/floor/tiled/freezer, -/area/magshield/south) -"kM" = ( -/obj/machinery/door/airlock, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/white, -/area/magshield/south) -"kN" = ( -/obj/structure/window/basic{ - dir = 1 - }, -/turf/simulated/floor/tiled, -/area/magshield/south) -"kO" = ( -/obj/structure/fitness/weightlifter, -/obj/structure/window/basic{ - dir = 1 - }, -/turf/simulated/floor/tiled, -/area/magshield/south) -"kP" = ( -/obj/structure/window/basic{ - dir = 1 - }, -/obj/item/towel/random, -/turf/simulated/floor/tiled, -/area/magshield/south) -"kQ" = ( -/obj/structure/window/basic{ - dir = 1 - }, -/obj/structure/fitness/punchingbag, -/turf/simulated/floor/tiled, -/area/magshield/south) -"kR" = ( -/obj/structure/window/basic{ - dir = 4 - }, -/obj/structure/window/basic{ - dir = 1 - }, -/turf/simulated/floor/tiled, -/area/magshield/south) -"kS" = ( -/obj/machinery/computer/arcade, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 1 - }, -/turf/simulated/floor/tiled, -/area/magshield/south) -"kT" = ( -/obj/structure/curtain/open/bed, -/obj/item/material/knife/table, -/turf/simulated/floor/tiled, -/area/magshield/south) -"kU" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 8 - }, -/turf/simulated/floor/tiled, -/area/magshield/south) -"kV" = ( -/obj/item/towel/random, -/turf/simulated/floor/tiled, -/area/magshield/south) -"kW" = ( -/obj/machinery/computer/arcade, -/turf/simulated/floor/tiled, -/area/magshield/south) -"kX" = ( -/obj/structure/closet, -/obj/random/accessory, -/turf/simulated/floor/tiled, -/area/magshield/south) -"kY" = ( -/obj/structure/closet, -/obj/random/tool, -/obj/random/smokes, -/turf/simulated/floor/tiled, -/area/magshield/south) -"kZ" = ( -/obj/structure/closet, -/obj/random/firstaid, -/obj/random/junk, -/turf/simulated/floor/tiled, -/area/magshield/south) -"la" = ( -/obj/structure/closet, -/obj/random/loot, -/turf/simulated/floor/tiled, -/area/magshield/south) -"lb" = ( -/obj/structure/table/standard{ - name = "plastic table frame" - }, -/obj/random/hat, -/turf/simulated/floor/tiled, -/area/magshield/south) -"lc" = ( -/obj/structure/table/standard{ - name = "plastic table frame" - }, -/obj/item/deck/cards, -/turf/simulated/floor/tiled, -/area/magshield/south) -"ld" = ( -/obj/structure/table/standard{ - name = "plastic table frame" - }, -/obj/item/material/kitchen/utensil/fork/plastic, -/obj/item/trash/plate, -/turf/simulated/floor/tiled, -/area/magshield/south) -"le" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/magshield/south) -"lf" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/turf/simulated/floor/tiled, -/area/magshield/south) -"lg" = ( -/obj/item/stack/material/rods, -/turf/space, -/area/magshield/south) -"lh" = ( -/obj/structure/fitness/weightlifter, -/turf/simulated/floor/tiled, -/area/magshield/south) -"li" = ( -/obj/structure/fitness/punchingbag, -/obj/machinery/light, -/turf/simulated/floor/tiled, -/area/magshield/south) -"lj" = ( -/obj/structure/window/basic{ - dir = 4 - }, -/obj/random/trash, -/turf/simulated/floor/tiled, -/area/magshield/south) -"lk" = ( -/obj/machinery/light/small, -/turf/simulated/floor/tiled, -/area/magshield/south) -"ll" = ( -/obj/random/trash, -/obj/machinery/light/small, -/turf/simulated/floor/tiled, -/area/magshield/south) -"lm" = ( -/obj/structure/table/standard{ - name = "plastic table frame" - }, -/obj/machinery/light, -/turf/simulated/floor/tiled, -/area/magshield/south) -"ln" = ( -/obj/machinery/light, -/turf/simulated/floor/tiled, -/area/magshield/south) -"lo" = ( -/obj/machinery/vending/cigarette, -/turf/simulated/floor/tiled, -/area/magshield/south) -"lp" = ( -/obj/machinery/vending/cola, -/obj/machinery/light, -/turf/simulated/floor/tiled, -/area/magshield/south) -"lq" = ( -/obj/machinery/vending/fitness, -/turf/simulated/floor/tiled, -/area/magshield/south) -"lr" = ( -/obj/machinery/light_construct{ - dir = 8 - }, -/turf/simulated/floor/tiled, -/area/magshield/south) -"ls" = ( -/obj/structure/girder/displaced, -/turf/simulated/floor/tiled, -/area/magshield/south) -"lt" = ( -/obj/effect/shuttle_landmark/nav_magshield/nav4, -/turf/space, -/area/space) -"lu" = ( -/obj/structure/cable/yellow{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/machinery/light/small{ - dir = 1 - }, -/turf/simulated/floor/airless, -/area/space) -"lv" = ( -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/turf/simulated/floor/airless, -/area/space) -"lw" = ( -/obj/structure/cable/yellow{ - d2 = 2; - icon_state = "0-2" - }, -/obj/machinery/power/solar{ - id = "auxsolarsport"; - name = "Port Auxiliary Solar Array" - }, -/obj/effect/floor_decal/solarpanel, -/turf/simulated/floor/airless, -/area/space) -"lx" = ( -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/airless, -/area/space) -"ly" = ( -/obj/structure/cable/yellow, -/obj/machinery/power/solar{ - id = "auxsolarsport"; - name = "Port Auxiliary Solar Array" - }, -/obj/effect/floor_decal/solarpanel, -/turf/simulated/floor/airless, -/area/space) -"lz" = ( -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/airless, -/area/space) -"lA" = ( -/obj/effect/shuttle_landmark/nav_magshield/nav3, -/turf/space, -/area/space) -"uL" = ( -/obj/effect/wallframe_spawn/reinforced, -/turf/simulated/floor/tiled, -/area/magshield/west) -"Eo" = ( -/obj/machinery/atmospherics/omni/filter{ - tag_north = 2; - tag_south = 1; - tag_west = 4 - }, -/turf/simulated/floor/airless, -/area/magshield/east) - -(1,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(2,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(3,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(4,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(5,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(6,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(7,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(8,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(9,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(10,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(11,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(12,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(13,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(14,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(15,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(16,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(17,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(18,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(19,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(20,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(21,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(22,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(23,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(24,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(25,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(26,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(27,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(28,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(29,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(30,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(31,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(32,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(33,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(34,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(35,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(36,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(37,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(38,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(39,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(40,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(41,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(42,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(43,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(44,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(45,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(46,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(47,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -bw -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(48,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(49,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(50,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(51,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(52,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(53,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(54,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(55,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(56,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(57,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(58,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(59,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(60,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(61,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ap -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ap -ap -ap -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(62,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ap -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ap -jE -ap -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(63,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ap -ke -ap -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ap -ap -ap -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(64,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -aa -ke -aa -ab -aa -aa -aa -aa -fu -fu -fu -uL -uL -fu -fu -fu -fu -fu -uL -uL -fu -fu -fu -aa -aa -aa -aa -aa -ab -aa -ap -aa -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(65,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -aa -ke -aa -ab -aa -aa -aa -aa -fu -fu -fu -gc -gc -fu -fu -fu -fu -fu -gc -gc -fu -fu -fu -aa -aa -aa -aa -aa -ab -aa -ap -aa -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(66,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -aa -ke -aa -ab -aa -aa -aa -aa -fu -fu -gs -gA -gG -gO -gU -hm -gU -hB -hJ -hR -hZ -fu -fu -aa -aa -aa -aa -aa -ab -ac -ap -ac -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(67,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -aa -ke -aa -aa -aa -aa -aa -aa -fu -fu -gt -gv -gH -gP -gV -fA -fA -fA -gv -hS -ia -fu -fu -aa -aa -aa -ao -aa -ab -aa -ap -aa -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(68,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ac -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -aa -ke -aa -aa -aa -ao -aa -aa -fu -fu -gu -gv -gI -gP -gW -fA -fA -fA -hK -hT -ib -fu -fu -aa -aa -aa -aa -iB -ab -aa -ap -aa -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(69,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ac -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -aa -ke -aa -aa -aa -aa -aa -aa -fu -fu -gv -gv -gJ -gP -gX -fA -fA -fA -fA -hU -fA -fu -fu -aa -aa -aa -aa -aa -ab -aa -ap -aa -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(70,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ac -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -de -ef -et -ke -aa -aa -aa -fu -fu -fu -fu -fu -gw -gv -gK -gP -gY -hn -hw -hC -fA -hU -fA -fu -fu -aa -aa -cO -fu -fu -ab -et -ap -aa -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(71,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ac -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -de -de -de -de -eF -dg -dg -fu -fu -fu -fu -fu -fu -fu -fu -fu -fu -fu -fu -fu -fu -fu -hV -fu -fu -hM -hM -iC -fu -fu -ip -ip -ip -jF -ip -ip -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(72,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -de -de -dj -dg -eJ -dH -dj -fu -fA -fA -fY -gf -gm -gf -gf -gf -gQ -gR -ho -gR -hD -fA -hW -fA -hF -io -fA -fA -hF -fu -iL -iY -ip -jG -ip -ip -ip -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(73,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -de -de -dj -dF -dg -ej -dg -di -fu -fB -fK -fB -fB -fB -fB -fB -fB -gR -gZ -hp -hx -gR -fB -hX -ic -fB -fB -fB -fB -fB -fu -iq -iT -ip -jH -ip -ip -ip -ip -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(74,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -de -de -dj -dG -dj -dj -ej -dj -di -fu -fC -fL -fZ -gg -gn -fZ -go -fB -gR -ha -hq -ha -gR -hL -hY -fZ -go -go -fZ -iD -fB -fu -iM -iZ -iq -jI -kf -kv -ip -ip -ip -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(75,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ao -aa -aa -aa -aa -de -de -dj -dj -dj -dj -dj -ej -dj -eO -fu -fB -fM -ga -ga -ga -ga -ga -fB -fB -fA -hr -fA -fB -hM -hM -hE -ga -ga -ga -ga -fB -fu -jz -ja -iq -jI -jd -jd -kN -kV -ip -ip -ip -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(76,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -de -de -di -dj -do -dj -dF -di -ej -dj -dj -fu -fD -fN -fA -fA -fA -fA -fA -fA -fB -fA -fA -fA -hE -hM -hM -hM -hF -fA -fA -fA -fB -fu -iq -iT -iq -jJ -jd -jd -kO -jd -lh -ip -ip -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(77,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ao -aa -ad -dg -dj -dE -dj -dj -eg -dY -eK -dY -dY -fv -fE -fO -fO -fO -fO -fO -fO -fO -gS -fO -fO -fO -fO -hM -hM -hM -hM -hM -it -it -it -iK -iO -ix -ix -jK -kg -kw -kP -jd -jd -jf -iS -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(78,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -dg -dj -dF -dj -dm -eh -dj -eL -dj -dj -fu -fA -fA -fA -fB -fA -fA -fB -fA -fA -fA -fB -fA -hF -hE -hM -id -hM -hE -fA -fA -fA -fu -iP -jd -jd -jd -jd -kx -kQ -jd -li -ip -ip -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(79,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -dg -dj -dj -dj -dj -eh -dj -eL -dj -dj -fu -fF -fP -gb -fZ -go -go -fZ -go -fA -hb -fZ -hy -fA -go -fZ -go -hy -fZ -gn -fA -iG -fu -iQ -jd -jd -jd -jd -kx -kR -jd -lj -ip -ip -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(80,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -de -dj -dG -dj -dj -dg -dj -eL -dj -fm -fu -fG -fA -ga -ga -ga -ga -ga -ga -fA -ga -ga -ga -fF -ga -ga -ga -ga -ga -ga -fA -fG -fu -iR -je -jm -jL -kh -kx -jd -jd -jd -jf -iS -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(81,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -aI -bc -bc -bc -bc -bO -bc -bc -aa -ao -aa -cO -de -de -dj -dj -dg -dg -dH -dj -eM -dj -de -fu -fu -fu -gc -gc -gc -fu -fu -fu -fu -gc -gc -gc -fu -fu -fu -fu -gc -gc -gc -fu -fu -fu -ip -je -jn -jM -kh -ky -kS -kW -kW -ip -ip -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(82,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -aJ -bc -bc -bc -bc -bc -bc -bc -aa -aa -bN -ab -de -de -dj -dH -dg -dg -ei -eu -eN -de -de -fu -fu -fu -uL -uL -uL -fu -fu -fu -fu -uL -uL -uL -fu -fu -fu -fu -uL -uL -uL -fu -fu -fu -ip -ip -iq -iq -iq -kz -iq -iq -iq -ip -ip -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(83,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -aI -bc -bc -bc -bc -bc -bc -aa -aa -aa -cE -ab -de -de -dj -dj -dg -dg -dg -dg -eO -de -de -aa -ac -aa -aa -aa -ac -aa -aa -aa -aa -aa -ac -aa -aa -aa -aa -aa -ac -aa -aa -aa -ac -aa -ip -ip -jo -jd -ki -kx -ki -jd -lk -ip -ip -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(84,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -aK -aa -aa -aa -aa -aa -aa -aa -ao -aa -aK -ab -de -de -dj -dj -dg -dg -dg -dH -dm -de -de -ac -ac -ac -ac -ac -gp -ac -ac -ac -ac -ac -gp -ac -ac -ac -ac -ac -gp -ac -ac -ac -ac -ac -ip -ip -jp -jN -iq -kA -iq -kX -jq -ip -ip -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(85,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -aa -aa -ab -ab -ab -ab -ar -au -au -au -aL -au -au -au -au -bp -bg -bg -au -au -aL -au -de -de -dk -dk -dg -dg -dg -dg -dg -de -de -aa -ac -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ac -aa -ip -ip -iq -iq -iq -kB -iq -iq -iq -ip -ip -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(86,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -au -au -au -aL -au -au -au -au -bg -bg -bp -au -au -aL -au -de -de -dl -dj -dH -dg -ej -dg -dj -de -de -aa -ac -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ac -aa -ip -ip -jo -jd -ki -kx -ki -jd -ll -ip -ip -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(87,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -aa -af -ah -aa -ao -aa -ac -aa -aa -af -ah -an -aa -au -au -ay -aM -bd -aB -bx -bE -bg -bg -bg -cp -cy -cF -ay -de -de -dm -dI -dR -dj -ej -dj -dj -de -de -aa -ac -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ac -aa -ip -ip -jq -jO -iq -kx -iq -kY -jq -ip -ip -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(88,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -aa -aa -aa -aa -aa -aa -ai -an -aa -af -ai -an -aa -au -au -ay -aN -be -bn -by -bg -bg -bg -be -bn -by -cG -ay -de -de -dn -dE -dS -dj -ej -dj -eP -de -de -aa -ac -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ac -aa -ip -ip -iq -iq -iq -kx -iq -iq -iq -ip -ip -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(89,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -aa -aa -aa -aa -aa -af -ai -an -aa -af -ai -an -aa -au -au -ay -aO -aB -aB -bz -bg -bg -bg -aB -bo -bz -aB -ay -de -de -do -dj -dR -dj -ej -dj -eP -de -de -aa -ac -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ac -aa -ip -ip -jo -jd -ki -kx -ki -jd -lk -ip -ip -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(90,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ac -aa -aa -aa -an -aa -af -ai -an -aa -af -ai -an -aa -au -au -az -aP -be -bn -by -bg -bg -bg -bp -bn -by -aB -ay -de -de -dj -dJ -dT -dj -ej -dj -eQ -de -de -aa -ac -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ac -aa -ip -ip -jq -jP -iq -kA -iq -jQ -jq -ip -ip -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(91,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ac -ad -af -ai -an -aa -af -ai -an -aa -af -ai -an -aa -au -au -aA -aO -aB -aB -bz -bg -aB -bg -bg -aB -bz -aS -ay -de -de -dp -dj -dU -dj -ej -dm -eR -de -de -aa -ac -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ac -aa -ip -ip -iq -iq -iq -kx -iq -iq -iq -ip -ip -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(92,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -aa -af -ai -an -aa -af -ai -an -aa -af -ai -an -aa -au -au -ay -aQ -be -bn -bg -bg -bP -aQ -bg -bn -cz -aB -cP -de -de -dq -dj -dV -dj -ej -dj -eS -de -de -aa -ac -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ac -aa -ip -ip -jr -jd -ki -kx -ki -jd -lk -ip -ip -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(93,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -aa -af -ai -an -aa -af -ai -an -aa -af -ai -an -aa -au -au -az -aO -aB -bo -bp -bF -bQ -bX -aB -aB -aB -aB -cQ -de -de -dj -dK -dW -dj -ej -dj -eO -de -de -aa -ac -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ac -aa -ip -ip -jp -jQ -iq -kx -iq -kZ -jq -ip -ip -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(94,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -aa -af -ai -an -aa -af -ai -an -aa -af -ai -an -aa -au -au -aB -aR -bf -bg -bg -bg -bR -bY -aB -aB -aB -cH -cR -de -de -dr -dj -dR -dj -ej -dj -eP -de -de -aa -ac -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ac -aa -ip -ip -iq -iq -iq -kx -iq -iq -iq -ip -ip -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(95,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -aa -af -ai -an -aa -af -ai -an -aa -af -ai -an -aa -au -au -au -au -bg -bg -bg -au -au -au -au -au -au -au -cS -de -de -ds -dL -dX -ec -ek -dj -dj -de -de -aa -ac -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ac -aa -ip -ip -jo -jd -ki -kx -kT -jd -lk -ip -ip -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(96,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -aa -af -ai -an -aa -af -ai -an -aa -af -ai -an -aa -au -au -aC -aS -bg -bp -bo -aB -bS -aB -ch -aB -cA -cI -cT -de -de -dl -dj -dj -ed -el -dj -dj -de -de -aa -ac -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ac -aa -ip -ip -jq -jR -iq -kA -iq -la -jq -ip -ip -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(97,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -aa -aa -aj -aa -aa -ap -aj -ap -aa -aa -aj -aa -aa -au -au -au -aT -bh -bg -aB -aS -aB -bo -aB -aS -aB -aB -cT -de -de -dt -dt -dt -dt -em -ev -de -de -de -dg -dj -aa -aa -aa -aa -aa -aa -aa -aa -hc -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ac -aa -ip -ip -iq -iq -iq -kC -iq -iq -iq -ip -ip -aa -aa -lw -ah -ly -aa -lw -ah -ly -aa -lw -ah -ly -aa -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(98,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ae -ag -ak -ag -ag -ag -ak -ag -ag -ag -ak -ag -as -av -ax -aD -aU -bi -bg -aU -aU -aU -bZ -aU -cq -cB -cB -cU -df -dh -du -du -du -du -en -eu -eT -fd -fn -fw -fH -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ac -aa -ip -ip -js -js -jd -kx -jd -js -js -ip -ip -aa -aa -lw -ai -ly -aa -lw -ai -ly -aa -lw -ai -ly -aa -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(99,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -aa -aa -aj -aa -aa -ap -aj -ap -aa -aa -aj -aa -at -au -au -au -aB -bj -bq -bA -bG -aB -bj -aS -cr -aB -cJ -cV -de -de -dj -dj -dj -dj -eo -ew -de -de -de -dg -dj -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ac -aa -iS -jf -jt -jS -jd -kD -jd -lb -jt -ip -ip -aa -aa -lw -ai -ly -aa -lw -ai -ly -aa -lw -ai -ly -aa -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(100,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -aa -af -al -an -aa -af -al -an -aa -af -al -aq -aa -aw -aw -aw -aw -aw -aw -aw -aw -aw -aw -aw -cs -aw -aw -cW -de -de -dm -dj -dm -dj -eo -dj -eU -de -de -aa -ac -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ac -aa -iS -jf -jt -jT -kj -kx -jd -lc -lm -ip -ip -aa -aa -lw -ai -ly -aa -lw -ai -ly -aa -lw -ai -ly -aa -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(101,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -aa -af -al -an -aa -af -al -an -aa -af -al -an -aa -aw -aw -aE -aV -aV -br -aE -aE -aw -ca -ci -ct -aw -cK -cX -de -de -dj -dm -dj -dj -eo -dj -ee -de -de -aa -ac -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ac -aa -ip -ip -ju -jw -kk -kE -jd -jw -jw -ip -ip -aa -aa -lw -ai -ly -aa -lw -ai -ly -aa -lw -ai -ly -aa -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(102,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -aa -af -al -an -aa -af -al -an -aa -af -al -an -aa -aw -aw -aF -aF -aF -bs -aE -aE -aw -cb -cj -cu -aw -cL -cY -de -de -dv -dj -dj -dj -eo -dj -ee -de -de -aa -ac -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ac -aa -ip -ip -js -js -kl -kF -jd -js -js -ip -ip -aa -aa -lw -ai -ly -aa -lw -ai -ly -aa -lw -ai -ly -aa -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(103,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -aa -af -al -an -aa -af -al -an -aa -af -al -an -aa -aw -aw -aG -aW -aE -aE -aE -aE -aw -cc -ck -cc -aw -aw -cW -de -de -dw -dj -dj -dM -eo -dj -ee -de -de -aa -ac -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ac -aa -iS -jf -jt -jt -jd -kG -jd -ld -jt -ip -ip -aa -aa -lw -ai -ly -aa -lw -ai -ly -aa -lw -ai -ly -aa -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(104,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -aa -af -al -an -aa -af -al -an -aa -af -al -an -aa -aw -aw -aG -aX -bk -aE -aE -aE -bT -aE -cl -aE -bT -cM -cZ -de -de -dw -dE -dj -dj -eo -dj -ee -de -de -aa -ac -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ac -aa -iS -jf -jv -jU -jd -kx -jd -jU -jt -ip -ip -aa -aa -lw -ai -ly -aa -lw -ai -ly -aa -lw -ai -ly -aa -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(105,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -aa -af -al -an -aa -af -al -an -aa -af -al -an -aa -aw -aw -aG -aY -aE -bt -aE -bH -bC -bB -cm -cv -aE -aE -da -de -de -dj -dj -dE -dj -eo -dj -ee -de -de -aa -ac -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ac -aa -ip -ip -jw -jw -jd -kx -jd -jw -jw -ip -ip -aa -aa -lw -ai -ly -aa -lw -ai -ly -aa -lw -ai -ly -aa -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(106,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -aa -af -al -an -aa -af -al -an -aa -af -al -an -aa -aw -aw -aH -aZ -aH -aw -aE -bI -bU -bK -cn -cw -cC -cC -db -de -de -dv -dj -dj -dj -eo -dj -eU -de -de -aa -ac -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ac -aa -ip -ip -jd -jd -jd -kH -kg -kw -ln -ip -ip -aa -aa -lw -ai -ly -aa -lw -ai -ly -aa -lw -ai -ly -aa -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(107,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -aa -af -al -an -aa -af -al -an -aa -af -al -an -aa -aw -aw -aE -aE -bl -bu -bB -bJ -bD -cd -co -cx -aE -aE -dc -de -de -dj -dM -dj -dj -eo -dj -eV -de -de -aa -ac -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ac -aa -ip -ip -jx -jV -km -iq -iq -kx -kW -ip -ip -aa -aa -aa -aj -aa -aa -ap -aj -ap -aa -aa -aj -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(108,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -aa -af -al -an -aa -af -al -an -aa -af -al -an -aa -aw -aw -aE -ba -aE -bv -bC -bB -bB -ce -bB -bD -cD -cN -dd -de -de -dj -dj -dj -ec -ep -dj -eW -de -de -aa -ac -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ac -aa -ip -ip -jy -iu -iu -iu -iT -kx -kW -ip -ip -lu -ag -ag -lx -ag -ag -ag -lx -ag -ag -ag -lz -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -lA -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(109,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -aa -af -am -an -aa -af -am -an -aa -af -am -an -aa -aw -aw -aE -aE -bm -bu -bD -bK -bV -cf -aE -aE -bt -aE -dc -de -de -dj -dj -dj -ed -el -dj -eX -de -de -aa -ac -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ac -aa -ip -ip -jz -iu -iu -jV -iq -kx -kW -ip -ip -aj -aa -aa -aj -aa -aa -ap -aj -ap -aa -aa -aj -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(110,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aw -aw -aw -bb -aw -aw -aw -bL -aw -aw -aw -aw -aw -aw -bL -de -de -dj -dN -dY -dY -eq -dj -dA -de -de -aa -ac -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ac -aa -ip -ip -iu -iu -iu -kI -iq -kx -kW -ip -ip -aj -aa -lw -al -ly -aa -lw -al -ly -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(111,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ar -aw -aw -aw -aE -aw -aw -aw -bL -aw -aw -aw -aw -aw -aw -bL -de -de -dt -dt -dt -dt -em -dt -dt -de -de -aa -ac -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ac -aa -ip -ip -iu -jV -kn -kJ -iq -kx -lo -ip -ip -aj -aa -lw -al -ly -aa -lw -al -aa -aa -aa -aa -ly -aa -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(112,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ap -ab -aa -ab -bM -aa -aa -aa -aa -aa -aa -bM -de -de -dx -dO -dZ -dj -er -ex -eY -de -de -ac -ac -ac -ac -ac -gq -ac -ac -ac -ac -ac -gq -ac -ac -ac -ac -ac -gq -ac -ac -ac -ac -ac -ip -ip -iT -iq -iq -iq -iq -kx -iR -ip -ip -aj -aa -lw -al -ly -aa -lw -al -aa -aa -aa -is -ly -aa -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(113,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ap -ab -aa -ab -bN -aI -cg -aI -cg -aI -cg -bN -de -de -dj -dP -dj -dj -dj -ey -eZ -de -de -aa -ac -aa -aa -aa -ac -aa -aa -aa -aa -aa -ac -aa -aa -aa -aa -aa -ac -aa -aa -aa -ac -aa -ip -ip -jA -jW -ko -kK -iq -kx -lp -ip -ip -aj -aa -lw -al -ly -aa -aa -al -aa -aa -lw -al -ly -aa -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(114,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ap -ab -aa -ab -bN -bN -bN -bN -bN -bN -bN -bN -de -de -dy -dj -dj -dj -dj -eo -fa -de -de -fk -fk -fk -fk -fk -fk -fk -fk -fk -fk -fk -fk -fk -fk -fk -fk -fk -fk -ip -ip -ip -ip -ip -ip -ip -jB -jB -kp -kL -iq -kx -lq -ip -ip -aj -aa -lw -al -aa -aa -aa -al -ly -aa -lw -al -ly -aa -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(115,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -bN -bN -bN -bN -bN -bN -bN -bN -de -de -dz -dj -dj -dj -ec -ez -dt -fe -fk -fk -fk -fk -fk -fk -fk -fk -fk -fk -fk -fk -fk -fk -fk -fk -fk -fk -fk -ip -ip -ip -ip -ip -ip -iq -iq -iq -iq -iq -iq -le -iq -ip -ip -aj -aa -is -aa -aa -aa -lw -al -ly -aa -lw -al -ly -aa -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(116,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -bN -bN -bN -bN -bN -bN -bN -bN -de -de -dj -dj -dj -dj -ed -eA -dt -ff -ff -fx -ff -fi -fi -gh -gj -gx -gB -fi -fe -hd -hd -hd -hd -hd -hd -hd -ih -iq -iu -iu -iH -iu -iu -iu -iu -jX -kq -kM -kU -lf -lr -ip -ip -aj -aa -aa -aa -ly -aa -lw -al -ly -aa -lw -al -ly -aa -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(117,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -bN -bN -bN -bN -bN -bN -bN -bN -de -de -dA -dj -dj -dj -dj -eo -dt -fg -fo -fy -fo -fQ -gd -gi -gr -gy -gC -fi -fe -he -hs -hs -hs -hN -hs -hs -ii -iq -iv -iq -iv -iq -iT -iq -iu -iu -kr -iq -kx -jd -jd -ip -ip -aa -aa -aa -al -ly -aa -lw -al -ly -aa -lw -al -ly -aa -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(118,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -bN -bN -bN -bN -bN -bN -bN -bN -de -de -dB -dj -dj -dj -dj -eo -dt -fh -fp -fi -fI -fi -fi -gj -fi -fi -fi -fi -fe -hd -hd -hd -hd -hd -hd -ie -ij -iq -iw -iq -iI -iq -iU -iq -jC -jY -ks -iq -kx -jd -ls -jl -aa -aa -aa -lw -al -ly -aa -lw -al -ly -aa -lw -al -ly -aa -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(119,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -bN -bN -bN -bN -bN -bN -bN -bN -de -de -dC -dj -ea -dj -dj -eB -dt -fi -fq -fi -fg -fR -ge -gk -fi -fi -fi -fi -fe -fe -fe -fe -fe -fe -fe -fe -ik -iq -iq -iq -iq -iq -iq -iq -iq -iq -iq -iq -kx -ip -jl -jl -aa -aj -is -lw -am -ly -aa -lw -am -ly -aa -lw -am -ly -aa -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(120,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -bN -bN -bN -bN -bN -bN -bN -bN -de -de -dD -dj -dj -dj -dj -eC -fb -fj -fr -fj -fj -fS -fj -fS -fj -fj -gD -gL -fe -fi -ht -fi -hG -hO -hO -if -il -ir -ix -ix -ix -ix -iV -jg -ix -jZ -kt -ix -ku -kc -jD -kc -aa -lv -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(121,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -bN -bN -bN -bN -bN -bN -bN -bN -de -de -de -dQ -dQ -dj -dj -ej -dt -fi -fs -fi -fi -fT -ge -Eo -ge -gz -gE -gM -fe -fi -fi -fi -hH -hP -hP -ig -im -iq -iq -iq -iq -iq -iq -jh -iq -ka -kc -kc -jl -jl -jl -ip -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(122,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -bN -bN -bN -bN -bN -bN -bN -bN -ab -de -de -de -eb -dj -es -ej -dt -fi -fi -fi -fi -fU -fi -fU -fi -fi -gF -gN -gT -hf -fj -hz -hI -hI -hI -hI -in -iq -iy -iE -iu -iF -iW -ji -iq -kb -jl -kc -jl -lg -ip -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(123,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -aJ -bW -aJ -bW -aJ -bW -aJ -bW -ab -aa -aa -de -de -ee -de -eD -de -fh -fi -fi -fi -fV -ge -gl -fi -fi -fi -fi -fk -hg -fk -fi -fi -fi -fi -fi -fi -iq -iz -iF -iJ -iu -iX -jj -jD -kc -ku -ip -ip -ip -ip -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(124,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -de -de -de -eE -de -fi -fi -fz -fi -fU -fi -fi -fz -fi -fi -fi -fk -hh -fk -hA -hA -hQ -gj -fi -fi -iq -iA -iu -iF -iu -iu -jk -jl -kc -ip -ip -ip -ip -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(125,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -de -de -eF -de -fk -fk -fk -fk -fW -fk -fk -fk -fk -fk -fk -fk -hi -fk -fk -fk -fk -fk -fk -fk -ip -ip -ip -ip -ac -aa -jl -jl -kc -ip -ip -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(126,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -de -de -eG -de -fl -fk -fk -fk -fW -fk -fk -fk -fk -fk -fk -fk -hj -hu -fk -fk -fk -fk -fk -fk -ip -ip -aa -aa -aa -aa -ab -aa -kd -aa -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(127,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -aa -ke -fc -ab -aa -aa -fJ -fX -fJ -aa -aa -aa -aa -ef -fc -hk -aa -aa -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -aa -ap -aa -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(128,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -aa -ke -aa -ab -aa -aa -fJ -fJ -fJ -aa -aa -aa -aa -ab -aa -hk -aa -aa -ab -aa -aa -aa -aa -is -iB -aa -aa -aa -cO -ab -aa -ke -aa -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(129,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -aa -ke -aa -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -aa -hk -aa -ac -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -aa -ke -aa -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(130,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -aa -ke -aa -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ap -hk -ap -ap -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -aa -ke -aa -ab -aa -ao -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(131,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -aa -ke -aa -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ap -hk -hv -ap -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -aa -ke -aa -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(132,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -aa -ke -aa -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ap -hl -aa -ap -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -aa -ke -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(133,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ap -ke -ap -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ap -ap -ap -ap -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ap -ap -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(134,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ap -eI -ap -ab -aa -aa -aa -aa -aa -aa -aa -aa -ao -ab -aa -ac -ad -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ap -aa -ap -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(135,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ap -ap -ap -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ap -ap -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(136,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(137,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ao -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(138,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(139,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(140,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(141,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(142,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(143,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(144,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(145,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(146,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(147,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(148,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(149,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(150,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ft -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(151,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(152,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(153,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(154,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(155,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -lt -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(156,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(157,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(158,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(159,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(160,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(161,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(162,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(163,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(164,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(165,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(166,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(167,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(168,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(169,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(170,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(171,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(172,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(173,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(174,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(175,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(176,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(177,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(178,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(179,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(180,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(181,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(182,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(183,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(184,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(185,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(186,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(187,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(188,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(189,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(190,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(191,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(192,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(193,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(194,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(195,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(196,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(197,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(198,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(199,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(200,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} diff --git a/maps/away/magshield/magshield_areas.dm b/maps/away/magshield/magshield_areas.dm deleted file mode 100644 index 85a429168f8b3..0000000000000 --- a/maps/away/magshield/magshield_areas.dm +++ /dev/null @@ -1,29 +0,0 @@ -/area/magshield/south - name = "Orbital Station South Wing" - icon_state = "south" - icon = 'magshield_sprites.dmi' - -/area/magshield/north - name = "Orbital Station North Wing" - icon_state = "north" - icon = 'magshield_sprites.dmi' - -/area/magshield/east - name = "Orbital Station East Wing" - icon_state = "east" - icon = 'magshield_sprites.dmi' - -/area/magshield/west - name = "Orbital Station West Wing" - icon_state = "west" - icon = 'magshield_sprites.dmi' - -/area/magshield/engine - name = "Orbital Station Engine" - icon_state = "engine" - icon = 'magshield_sprites.dmi' - -/area/magshield/smes_storage - name = "Orbital Station SMES Battery Room" - icon_state = "smes_storage" - icon = 'magshield_sprites.dmi' diff --git a/maps/away/magshield/magshield_sprites.dmi b/maps/away/magshield/magshield_sprites.dmi deleted file mode 100644 index a14f57aeaf107..0000000000000 Binary files a/maps/away/magshield/magshield_sprites.dmi and /dev/null differ diff --git a/maps/away/meatstation/meatstation.dm b/maps/away/meatstation/meatstation.dm deleted file mode 100644 index ab6671d33c50f..0000000000000 --- a/maps/away/meatstation/meatstation.dm +++ /dev/null @@ -1,326 +0,0 @@ -#include "meatstation_areas.dm" - -/obj/effect/overmap/visitable/sector/meatstation - name = "Unpowered Research Station" - desc = "An unpowered research station. A large quantity of nearby debris blocks more detail." - icon_state = "object" - known = FALSE - initial_generic_waypoints = list( - "nav_meatstation_1", - "nav_meatstation_2", - "nav_meatstation_3", - "nav_meatstation_4", - "nav_meatstation_antag" - ) - -/datum/map_template/ruin/away_site/meatstation - name = "Meatstation" - id = "awaysite_meatstation" - description = "It's a research station full of baddies and some unique loot." - suffixes = list("meatstation/meatstation.dmm") - spawn_cost = 2 - area_usage_test_exempted_root_areas = list(/area/meatstation) - -/obj/effect/shuttle_landmark/nav_meatstation/nav1 - name = "Navpoint #1" - landmark_tag = "nav_meatstation_1" - -/obj/effect/shuttle_landmark/nav_meatstation/nav2 - name = "Navpoint #2" - landmark_tag = "nav_meatstation_2" - -/obj/effect/shuttle_landmark/nav_meatstation/nav3 - name = "Navpoint #3" - landmark_tag = "nav_meatstation_3" - -/obj/effect/shuttle_landmark/nav_meatstation/nav4 - name = "Navpoint #4" - landmark_tag = "nav_meatstation_4" - -/obj/effect/shuttle_landmark/nav_meatstation/nav5 - name = "Navpoint #5" - landmark_tag = "nav_meatstation_antag" - -//structural - -/obj/effect/paint/meatstation - color = "#543333" - -/obj/effect/paint/meatstation/lab - color = "#301f1f" - -/obj/machinery/power/apc/meatstation - cell_type = /obj/item/cell/crap - operating = 0 - locked = 0 - coverlocked = 0 - -//mobs - -/mob/living/simple_animal/hostile/meatstation - name = "meatstation mob" - desc = "it's meaty!" - icon = 'maps/away/meatstation/meatstation_sprites.dmi' - response_help = "pats" - response_disarm = "shoves" - response_harm = "stomps" - flash_vulnerability = 0 //eyeless - turns_per_move = 5 - natural_weapon = /obj/item/natural_weapon/bite/weak - faction = "meat" - min_gas = null - minbodytemp = 0 - meat_type = /obj/item/reagent_containers/food/snacks/meat/meatstationmeat - meat_amount = 1 - can_escape = TRUE - - ai_holder = /datum/ai_holder/simple_animal/melee/meatstation - -/mob/living/simple_animal/hostile/meatstation/meatworm - name = "flesh worm" - desc = "A toothy little thing. It won't stop gnashing and thrashing!" - icon_state = "meatworm" - icon_living = "meatworm" - icon_dead = "meatworm_dead" - turns_per_move = 3 - speed = -2 - maxHealth = 20 - health = 20 - natural_weapon = /obj/item/natural_weapon/bite/weak - mob_size = MOB_SMALL - meat_amount = 2 - can_escape = FALSE - - say_list_type = /datum/say_list/meatstation/meatworm - -/mob/living/simple_animal/hostile/meatstation/meatball - name = "animated meat" - desc = "A crude creature of meat and teeth." - icon_state = "meatball" - icon_living = "meatball" - icon_dead = "meatball_dead" - speed = 2 - maxHealth = 50 - health = 50 - natural_weapon = /obj/item/natural_weapon/meatball - meat_amount = 2 - can_escape = FALSE - - say_list_type = /datum/say_list/meatstation/meatball - -/obj/item/natural_weapon/meatball - force = 12 - attack_verb = list("thwacked") - -/mob/living/simple_animal/hostile/meatstation/wormscientist - name = "infested scientist" - desc = "A scientist infested with some sort of parasitic worms." - icon_state = "wormscientist" - icon_living = "wormscientist" - icon_dead = "wormscientist_dead" - speed = 7 - maxHealth = 90 - health = 90 - natural_weapon = /obj/item/natural_weapon/wormscience - meat_amount = 3 - - say_list_type = /datum/say_list/meatstation/meat_human - -/obj/item/natural_weapon/wormscience - force = 15 - attack_verb = list("whacked") - -/mob/living/simple_animal/hostile/meatstation/wormguard - name = "infested guard" - desc = "An armed guard infested with some sort of parasitic worms. It looks like their hands have melded with their weapon." - icon_state = "wormguard" - icon_living = "wormguard" - icon_dead = "wormguard_dead" - speed = 7 - maxHealth = 60 - health = 60 - natural_weapon = /obj/item/natural_weapon/wormguard - meat_amount = 3 - projectilesound = 'sound/weapons/laser.ogg' - ranged = 1 - projectiletype = /obj/item/projectile/beam/meatstation - - say_list_type = /datum/say_list/meatstation/meat_human -/obj/item/natural_weapon/wormguard - force = 17 - attack_verb = list("slammed") - -/mob/living/simple_animal/hostile/meatstation/meatmound - name = "meat horror" - desc = "A gnashing mound of flesh and teeth." - icon_state = "meatmound" - icon_living = "meatmound" - icon_dead = "meatmound_dead" - flash_vulnerability = 1 - speed = 10 - maxHealth = 160 - health = 160 - natural_weapon = /obj/item/natural_weapon/meatmound - meat_amount = 4 - mob_size = MOB_LARGE - - say_list_type = /datum/say_list/meatstation/meatmound - -/obj/item/natural_weapon/meatmound - force = 25 - sharp = TRUE - attack_verb = list("chomped") - -//projectile - -/obj/item/projectile/beam/meatstation - damage = 10 - agony = 10 - armor_penetration = 5 - - muzzle_type = /obj/effect/projectile/meatstation/muzzle - tracer_type = /obj/effect/projectile/meatstation/tracer - impact_type = /obj/effect/projectile/meatstation/impact - -/obj/effect/projectile/meatstation - light_color = COLOR_RED_LIGHT - icon = 'maps/away/meatstation/meatstation_sprites.dmi' - -/obj/effect/projectile/meatstation/tracer - icon_state = "redstun" - -/obj/effect/projectile/meatstation/muzzle - icon_state = "muzzle_redstun" - -/obj/effect/projectile/meatstation/impact - icon_state = "impact_redstun" - -//items - -/obj/item/gun/energy/laser/meatstation - name = "LP76 carbine" - desc = "An outdated energy carbine, originally designed for peacekeeping operations. Fires super-heated stun beams." - icon = 'maps/away/meatstation/meatstation_sprites.dmi' - item_icons = list( - slot_l_hand_str = 'maps/away/meatstation/meatstation_left_hand.dmi', - slot_r_hand_str = 'maps/away/meatstation/meatstation_right_hand.dmi', - ) - icon_state = "meatstationlaser" - item_state = "meatstationlaser" - projectile_type = /obj/item/projectile/beam/meatstation - slot_flags = null - wielded_item_state = "meatstationlaser-wielded" - fire_delay = 15 - max_shots = 12 - -/obj/item/reagent_containers/food/snacks/meat/meatstationmeat - name = "tainted meat" - desc = "A disgusting slab of meat." - icon = 'maps/away/meatstation/meatstation_sprites.dmi' - icon_state = "meat" - filling_color = "#f41d7e" - slice_path = /obj/item/reagent_containers/food/snacks/rawcutlet/meatstation - -/obj/item/reagent_containers/food/snacks/meat/meatstationmeat/New() - ..() - reagents.add_reagent(/datum/reagent/nutriment/protein, 6) - reagents.add_reagent(/datum/reagent/lexorin, 6) - reagents.add_reagent(/datum/reagent/toxin/bromide, 3) - bitesize = 3 - -/obj/item/reagent_containers/food/snacks/rawcutlet/meatstation - name = "tainted meat chunk" - desc = "A disgusting chunk of meat." - icon = 'maps/away/meatstation/meatstation_sprites.dmi' - icon_state = "meatchunk" - -/obj/item/cell/infinite/meatstation - name = "biological power cell" - desc = "A throbbing, biological power cell." - icon = 'maps/away/meatstation/meatstation_sprites.dmi' - icon_state = "biocell" - origin_tech = list(TECH_ENGINEERING = 3, TECH_MATERIAL = 4, TECH_BIO = 7) - maxcharge = 500 - matter = null - -//notes -//they're kinda rough, if you want to take another stab at these please do - -/obj/item/paper/meatstation/biocell_note//this one's here to let players know those meat cells aren't just trash 500W power cells - name = "journal entry" - info = "Davis finally did it! After months of trial and error, he actually did it. All those tedious hours he spent in the lab recombobulating mitochondrial strands weren't a total waste. All to produce a biological power cell capable of producing power indefinitely through - well I'm actually not sure how. I think Davis said something about latent bluespace particles. I'll get a more concrete answer from him later. I think Robertson is upset her worms have taken a back seat. We're just excited about the implications of Davis's success is all. I'll have to make sure to tell her we'll keep them in mind." - -/obj/item/paper/meatstation/xenoflora_note//this one is to try and justify the breaches all over - name = "apology letter" - info = "Dear Chief Daniels,

              I'm sorry I'm a brilliant scientist. I'm sorry I spent months of my life perfecting the genes of a highly volatile xenoflora sample. I'm sorry your idiot dockhand thought that xenoflora sample was a plum tree. I'm sorry that idiot dockhand decided to pick some fruit from the xenoflora sample. I'm sorry that Mr. Idiot Dockhand decided to consume said fruit while standing in the cargo airlock. I'm sorry you whined and cried about how it was all my fault. I'm sorry I'm now required to hand write you an apology letter. I'm sorry you've been avoiding me these past few days. Most of all, I'm sorry I haven't been able to share my thoughts with you on this matter in person, one on one.

              Regards,

              You know who I am, you little shit.


              P.S.
              I know you'll be at Robertson's demonstration tomorrow. Maybe we can have a little chat afterwards." - -/obj/item/paper/meatstation/weapon_note//and this one's here to give players some mechanical knowledge about the gun unique to this away site - name = "note" - info = "Okay, admittedly going with the LP76's wouldn't be all sunshine and rainbows, but it's still the right call. Yeah sure, maybe they've got a slower fire rate. And yes, you could argue that technically, since they were originally designed to be a non-lethal alternative, they might not pack the punch of today's weapons. But we're getting a hell of a deal here! If we go with the LP76's, we'll actually be able to afford enough of them to arm the entire security team, and then some! And just because they're non-lethal weapons doesn't mean they're not effective. They hurt like hell, and those stun beams are intense enough to burn flesh!
              Look, let's be real here: the security team is pretty much just pirate deterrent. If some pirates do decide to raid us, once they see we're shooting back they'll go running back to whatever 'roid base they call home. I guarantee we won't need anything beefier than the LP76. Trust me." - -//random spawns - -/obj/random/single/meatstation - icon = 'maps/away/meatstation/meatstation_sprites.dmi' - icon_state = "50template" - -/obj/random/single/meatstation/low - icon_state = "10template" - spawn_nothing_percentage = 90 - -/obj/random/single/meatstation/meatworm - icon_state = "meatworm50" - spawn_object = /mob/living/simple_animal/hostile/meatstation/meatworm - -/obj/random/single/meatstation/meatball - icon_state = "meatball50" - spawn_object = /mob/living/simple_animal/hostile/meatstation/meatball - -/obj/random/single/meatstation/wormscientist - icon_state = "wormscientist50" - spawn_object = /mob/living/simple_animal/hostile/meatstation/wormscientist - -/obj/random/single/meatstation/wormguard - icon_state = "wormguard50" - spawn_object = /mob/living/simple_animal/hostile/meatstation/wormguard - -/obj/random/single/meatstation/meatmound - icon_state = "meatmound50" - spawn_object = /mob/living/simple_animal/hostile/meatstation/meatmound - -/obj/random/single/meatstation/cell - icon_state = "biocell50" - spawn_object = /obj/item/cell/infinite/meatstation - -/obj/random/single/meatstation/laser - icon_state = "laser50" - spawn_object = /obj/item/gun/energy/laser/meatstation - -/obj/random/single/meatstation/low/biocell - icon_state = "biocell10" - spawn_object = /obj/item/cell/infinite/meatstation - -/obj/random/single/meatstation/low/wormguard - icon_state = "wormguard10" - spawn_object = /mob/living/simple_animal/hostile/meatstation/wormguard - -/obj/random/single/meatstation/low/wormscientist - icon_state = "wormscientist10" - spawn_object = /mob/living/simple_animal/hostile/meatstation/wormscientist - -/datum/ai_holder/simple_animal/melee/meatstation - -/datum/say_list/meatstation/meatworm - emote_see = list("gnashes", "thrashes about", "chomps the air") - -/datum/say_list/meatstation/meatball - emote_hear = list("cackles","gibbers") - emote_see = list("gnashes", "writhes", "gurgles","clicks its teeth") - -/datum/say_list/meatstation/meat_human - emote_hear = list("gurgles","moans") - emote_see = list("wobbles", "writhes", "twitches","shudders", "trembles") - -/datum/say_list/meatstation/meatmound - emote_hear = list("roars","moans","growls") - emote_see = list("gnashes", "undulates", "gurgles","chomps") diff --git a/maps/away/meatstation/meatstation.dmm b/maps/away/meatstation/meatstation.dmm deleted file mode 100644 index bf1dfb0d28135..0000000000000 --- a/maps/away/meatstation/meatstation.dmm +++ /dev/null @@ -1,51403 +0,0 @@ -//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE -"aa" = ( -/turf/space, -/area/space) -"ab" = ( -/obj/effect/paint/meatstation, -/turf/simulated/wall/r_wall, -/area/meatstation/nwhallway) -"ac" = ( -/obj/effect/paint/meatstation/lab, -/turf/simulated/wall/r_wall, -/area/meatstation/lab) -"ad" = ( -/obj/random/junk, -/obj/effect/floor_decal/corner/purple/border{ - dir = 1 - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/airless, -/area/meatstation/engineering) -"ae" = ( -/obj/effect/paint/meatstation, -/turf/simulated/wall/r_wall, -/area/meatstation/engineering) -"af" = ( -/turf/simulated/floor/tiled, -/area/meatstation/centerhallway) -"ag" = ( -/turf/simulated/floor/airless, -/area/space) -"ah" = ( -/obj/effect/paint/meatstation, -/turf/simulated/wall/r_wall, -/area/meatstation/centerhallway) -"ai" = ( -/obj/structure/cable/yellow{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/structure/cable/yellow{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/turf/simulated/floor/airless, -/area/space) -"aj" = ( -/obj/effect/floor_decal/solarpanel, -/obj/structure/cable/yellow{ - d2 = 4; - icon_state = "0-4" - }, -/obj/machinery/power/solar{ - id = "meatstation_mainsolars" - }, -/turf/simulated/floor/airless, -/area/space) -"ak" = ( -/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/structure/cable/yellow{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/turf/simulated/floor/airless, -/area/space) -"al" = ( -/obj/structure/cable/yellow{ - d2 = 4; - icon_state = "0-4" - }, -/obj/machinery/power/tracker, -/obj/effect/floor_decal/industrial/warning/full, -/turf/simulated/floor/airless, -/area/space) -"am" = ( -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/structure/cable/yellow{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/turf/simulated/floor/airless, -/area/space) -"an" = ( -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/turf/simulated/floor/airless, -/area/space) -"ao" = ( -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/airless, -/area/space) -"ap" = ( -/obj/structure/girder, -/turf/simulated/floor/airless, -/area/meatstation/engineering) -"aq" = ( -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/turf/simulated/floor/airless, -/area/space) -"ar" = ( -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/turf/simulated/floor/airless, -/area/space) -"as" = ( -/turf/simulated/floor/airless, -/area/meatstation/engineering) -"at" = ( -/obj/structure/lattice, -/turf/space, -/area/meatstation/dorm) -"au" = ( -/turf/simulated/floor/airless, -/area/meatstation/dorm) -"av" = ( -/obj/effect/paint/meatstation, -/turf/simulated/wall/r_wall, -/area/meatstation/kitchen) -"aw" = ( -/obj/item/stack/material/glass/fifty, -/turf/space, -/area/space) -"ax" = ( -/obj/structure/girder, -/turf/simulated/floor/airless, -/area/meatstation/dorm) -"ay" = ( -/obj/structure/lattice, -/turf/space, -/area/meatstation/engineering) -"az" = ( -/turf/simulated/floor/tiled/airless, -/area/meatstation/dorm) -"aA" = ( -/obj/effect/paint/meatstation, -/turf/simulated/wall/r_wall, -/area/meatstation/swhallway) -"aB" = ( -/turf/simulated/floor/carpet/blue2, -/area/meatstation/dorm) -"aC" = ( -/turf/simulated/floor/carpet/blue, -/area/meatstation/dorm) -"aD" = ( -/turf/simulated/floor/carpet/red, -/area/meatstation/cargooffice) -"aE" = ( -/turf/simulated/floor/carpet/blue3, -/area/meatstation/dorm) -"aF" = ( -/obj/structure/cable/cyan{ - d2 = 4; - icon_state = "0-4" - }, -/obj/machinery/power/smes/batteryrack, -/obj/effect/floor_decal/corner/purple/border{ - dir = 9 - }, -/turf/simulated/floor/airless, -/area/meatstation/engineering) -"aG" = ( -/obj/machinery/power/terminal{ - dir = 8 - }, -/obj/structure/cable/yellow{ - d2 = 2; - icon_state = "0-2" - }, -/turf/simulated/floor/airless, -/area/meatstation/engineering) -"aH" = ( -/obj/machinery/power/terminal{ - dir = 8 - }, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/cable/yellow{ - d2 = 2; - icon_state = "0-2" - }, -/turf/simulated/floor/airless, -/area/meatstation/engineering) -"aI" = ( -/obj/structure/cable/cyan{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/machinery/light{ - dir = 1 - }, -/obj/effect/floor_decal/corner/purple/border{ - dir = 1 - }, -/turf/simulated/floor/airless, -/area/meatstation/engineering) -"aJ" = ( -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/door/airlock/external{ - id_tag = "meatstation_nairlockext"; - locked = 1 - }, -/turf/simulated/floor/airless, -/area/meatstation/engineering) -"aK" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 4 - }, -/turf/simulated/floor/carpet/red, -/area/meatstation/cargooffice) -"aL" = ( -/obj/machinery/recharger/wallcharger{ - pixel_y = 24 - }, -/obj/effect/floor_decal/corner/purple/border{ - dir = 1 - }, -/turf/simulated/floor/airless, -/area/meatstation/engineering) -"aM" = ( -/obj/effect/wallframe_spawn/reinforced, -/obj/effect/paint/meatstation, -/turf/simulated/floor/airless, -/area/meatstation/engineering) -"aN" = ( -/obj/machinery/button/alternate/door/bolts{ - id_tag = "meatstation_nairlockext"; - name = "exterior airlock bolt control"; - pixel_x = 24 - }, -/turf/space, -/area/space) -"aO" = ( -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/structure/cable/yellow{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/turf/simulated/floor/airless, -/area/meatstation/engineering) -"aP" = ( -/obj/effect/paint/meatstation, -/turf/simulated/wall/r_wall, -/area/meatstation/storage) -"aQ" = ( -/obj/structure/closet/firecloset, -/turf/space, -/area/space) -"aR" = ( -/obj/item/paper, -/turf/space, -/area/space) -"aS" = ( -/obj/structure/bookcase/manuals/engineering, -/turf/simulated/floor/tiled/airless, -/area/meatstation/dorm) -"aT" = ( -/obj/structure/bed/chair/office/comfy/red{ - dir = 1 - }, -/turf/space, -/area/space) -"aU" = ( -/obj/structure/bookcase/manuals/medical, -/turf/simulated/floor/tiled/airless, -/area/meatstation/dorm) -"aV" = ( -/obj/effect/paint/meatstation, -/turf/simulated/wall/r_wall, -/area/meatstation/medical) -"aW" = ( -/obj/effect/paint/meatstation, -/obj/effect/wallframe_spawn/reinforced, -/turf/simulated/floor/plating, -/area/meatstation/centerhallway) -"aX" = ( -/obj/item/book/manual/engineering_guide, -/turf/simulated/floor/tiled/airless, -/area/meatstation/dorm) -"aY" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/effect/floor_decal/corner/black/border{ - dir = 8 - }, -/turf/simulated/floor/tiled, -/area/meatstation/centerhallway) -"aZ" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 - }, -/obj/structure/cable/cyan{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/turf/simulated/floor/tiled, -/area/meatstation/centerhallway) -"ba" = ( -/obj/machinery/light/small/red{ - dir = 4 - }, -/turf/simulated/floor/tiled/airless, -/area/meatstation/dorm) -"bb" = ( -/obj/effect/floor_decal/solarpanel, -/obj/structure/cable/yellow{ - d2 = 8; - icon_state = "0-8" - }, -/obj/machinery/power/solar{ - id = "meatstation_mainsolars" - }, -/turf/simulated/floor/airless, -/area/space) -"bc" = ( -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/cable/yellow{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/turf/simulated/floor/airless, -/area/space) -"bd" = ( -/obj/structure/girder, -/turf/simulated/floor/airless, -/area/space) -"be" = ( -/obj/structure/lattice, -/turf/space, -/area/space) -"bf" = ( -/turf/simulated/floor/tiled/dark, -/area/meatstation/medical) -"bg" = ( -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/airless, -/area/meatstation/engineering) -"bh" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled, -/area/meatstation/centerhallway) -"bi" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled, -/area/meatstation/centerhallway) -"bj" = ( -/obj/structure/cable/cyan{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/structure/cable/cyan{ - d2 = 4; - icon_state = "0-4" - }, -/obj/machinery/power/smes/batteryrack, -/obj/effect/floor_decal/corner/purple/border{ - dir = 8 - }, -/turf/simulated/floor/airless, -/area/meatstation/engineering) -"bk" = ( -/obj/random/junk, -/turf/simulated/floor/airless, -/area/meatstation/dorm) -"bl" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/airless, -/area/meatstation/engineering) -"bm" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/item/inflatable/door, -/turf/simulated/floor/airless, -/area/meatstation/engineering) -"bn" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 1 - }, -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled, -/area/meatstation/centerhallway) -"bo" = ( -/obj/item/book/manual/psionics, -/turf/space, -/area/space) -"bp" = ( -/obj/machinery/recharger/wallcharger{ - dir = 4; - pixel_x = -23; - pixel_y = -3 - }, -/turf/simulated/floor/tiled/airless, -/area/meatstation/dorm) -"bq" = ( -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/airless, -/area/meatstation/engineering) -"br" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 1; - level = 2 - }, -/obj/effect/floor_decal/corner/black/border, -/turf/simulated/floor/tiled, -/area/meatstation/centerhallway) -"bs" = ( -/obj/effect/paint/meatstation, -/turf/simulated/wall/r_wall, -/area/meatstation/dorm) -"bt" = ( -/obj/random/junk, -/turf/space, -/area/space) -"bu" = ( -/obj/item/paper_bin, -/turf/simulated/floor/tiled/airless, -/area/meatstation/dorm) -"bv" = ( -/obj/structure/barricade/spike{ - dir = 8 - }, -/obj/machinery/light/small/red, -/obj/effect/floor_decal/corner/black/border, -/turf/simulated/floor/tiled, -/area/meatstation/centerhallway) -"bw" = ( -/obj/effect/floor_decal/corner/brown/border{ - dir = 9 - }, -/turf/simulated/floor/tiled/dark/airless, -/area/meatstation/cargo) -"bx" = ( -/obj/effect/wallframe_spawn/reinforced, -/obj/effect/paint/meatstation/lab, -/obj/machinery/door/blast/regular/open{ - icon_state = "pdoor0"; - id_tag = "meatstation_blastdoorext" - }, -/turf/simulated/floor/plating, -/area/meatstation/lab) -"by" = ( -/obj/effect/paint/meatstation, -/turf/simulated/wall/r_wall, -/area/meatstation/hydroponics) -"bz" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/airless, -/area/meatstation/engineering) -"bA" = ( -/obj/effect/paint/meatstation, -/turf/simulated/wall/r_wall, -/area/meatstation/armory) -"bB" = ( -/obj/effect/paint/meatstation/lab, -/turf/simulated/wall/r_wall, -/area/meatstation/centerhallway) -"bC" = ( -/turf/simulated/floor/reinforced, -/area/meatstation/lab) -"bD" = ( -/turf/simulated/floor/tiled/white, -/area/meatstation/lab) -"bF" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled, -/area/meatstation/centerhallway) -"bG" = ( -/obj/machinery/door/airlock{ - stripe_color = "#aab1c1" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled, -/area/meatstation/mess) -"bH" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/lino, -/area/meatstation/mess) -"bI" = ( -/obj/random/single/meatstation/meatmound, -/obj/effect/decal/cleanable/blood, -/turf/simulated/floor/tiled/white, -/area/meatstation/lab) -"bJ" = ( -/obj/random/single/meatstation/meatmound, -/turf/simulated/floor/reinforced, -/area/meatstation/lab) -"bK" = ( -/obj/effect/floor_decal/corner/black/border{ - dir = 5 - }, -/turf/simulated/floor/tiled, -/area/meatstation/centerhallway) -"bL" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/obj/structure/cable/cyan{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/turf/simulated/floor/airless, -/area/meatstation/engineering) -"bM" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 8 - }, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled, -/area/meatstation/centerhallway) -"bN" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply, -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/airless, -/area/meatstation/engineering) -"bO" = ( -/obj/machinery/door/airlock{ - stripe_color = "#aab1c1" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/airless, -/area/meatstation/engineering) -"bP" = ( -/obj/random/maintenance/clean, -/obj/random/single/meatstation/meatball, -/turf/simulated/floor/airless, -/area/space) -"bQ" = ( -/obj/structure/inflatable/wall, -/obj/effect/floor_decal/corner/black/border, -/turf/simulated/floor/tiled, -/area/meatstation/centerhallway) -"bR" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 4 - }, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled, -/area/meatstation/centerhallway) -"bS" = ( -/obj/structure/inflatable/wall, -/obj/effect/floor_decal/corner/black/border{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/meatstation/centerhallway) -"bT" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 4 - }, -/turf/simulated/floor/airless, -/area/meatstation/dorm) -"bU" = ( -/obj/effect/decal/cleanable/filth, -/turf/simulated/floor/carpet/blue, -/area/meatstation/dorm) -"bV" = ( -/obj/item/device/flashlight/lamp, -/turf/simulated/floor/tiled/airless, -/area/meatstation/dorm) -"bW" = ( -/obj/effect/floor_decal/corner/brown/border{ - dir = 8 - }, -/obj/machinery/button/alternate/door/bolts{ - id_tag = "meatstation_dock"; - name = "interior airlock bolt control"; - pixel_x = -24; - pixel_y = 6 - }, -/obj/machinery/button/alternate/door{ - id_tag = "meatstation_dock"; - name = "interior airlock control"; - pixel_x = -24; - pixel_y = -6 - }, -/turf/simulated/floor/tiled/dark/airless, -/area/meatstation/cargo) -"bX" = ( -/obj/item/device/flashlight/lamp, -/obj/random/junk, -/turf/simulated/floor/tiled/airless, -/area/meatstation/dorm) -"bY" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/turf/simulated/floor/tiled/dark/airless, -/area/meatstation/cargo) -"bZ" = ( -/obj/effect/wallframe_spawn/reinforced, -/obj/effect/paint/meatstation, -/turf/simulated/floor/airless, -/area/meatstation/dorm) -"ca" = ( -/obj/effect/wallframe_spawn/reinforced, -/obj/effect/paint/meatstation, -/turf/simulated/floor/plating, -/area/meatstation/nwhallway) -"cb" = ( -/obj/machinery/light{ - dir = 1 - }, -/turf/simulated/floor/tiled/airless, -/area/meatstation/dorm) -"cc" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/dark/airless, -/area/meatstation/cargo) -"cd" = ( -/turf/simulated/floor/tiled, -/area/meatstation/nwhallway) -"ce" = ( -/obj/effect/wallframe_spawn/reinforced, -/obj/effect/paint/meatstation, -/turf/simulated/floor/plating, -/area/meatstation/dorm) -"cf" = ( -/obj/machinery/jukebox/old, -/turf/simulated/floor/tiled/airless, -/area/meatstation/dorm) -"cg" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled, -/area/meatstation/nwhallway) -"ch" = ( -/obj/effect/floor_decal/corner/black/border{ - dir = 4 - }, -/obj/machinery/button/alternate/door/bolts{ - id_tag = "meatstation_westlabext"; - name = "exterior lab bolt control"; - pixel_x = 24 - }, -/turf/simulated/floor/tiled, -/area/meatstation/centerhallway) -"ci" = ( -/obj/machinery/door/airlock{ - stripe_color = "#aab1c1" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled, -/area/meatstation/nwhallway) -"cj" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 - }, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/airless, -/area/meatstation/engineering) -"ck" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled, -/area/meatstation/nwhallway) -"cl" = ( -/obj/structure/inflatable/wall, -/turf/simulated/floor/tiled/dark, -/area/meatstation/swhallway) -"cm" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/obj/structure/cable/cyan{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/turf/simulated/floor/carpet/red, -/area/meatstation/cargooffice) -"cn" = ( -/obj/structure/cable/cyan{ - d2 = 2; - icon_state = "0-2" - }, -/obj/machinery/power/apc/meatstation{ - dir = 1; - pixel_y = 24 - }, -/turf/simulated/floor/tiled, -/area/meatstation/nwhallway) -"co" = ( -/obj/machinery/door/airlock{ - stripe_color = "#aab1c1" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/carpet/red, -/area/meatstation/cargooffice) -"cp" = ( -/obj/machinery/door/airlock{ - stripe_color = "#aab1c1" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/lino, -/area/meatstation/dorm) -"cq" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/lino, -/area/meatstation/mess) -"cr" = ( -/obj/effect/wallframe_spawn/reinforced, -/obj/effect/paint/meatstation, -/turf/simulated/floor/plating, -/area/meatstation/engineering) -"cs" = ( -/obj/machinery/door/airlock{ - stripe_color = "#aab1c1" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled, -/area/meatstation/cargo) -"ct" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 4 - }, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/effect/decal/cleanable/blood/drip, -/obj/structure/inflatable/door, -/turf/simulated/floor/tiled/dark/airless, -/area/meatstation/cargo) -"cu" = ( -/obj/structure/stasis_cage, -/turf/simulated/floor/tiled/dark/airless, -/area/meatstation/cargo) -"cv" = ( -/turf/simulated/floor/tiled/dark/airless, -/area/meatstation/cargo) -"cw" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/airless, -/area/meatstation/engineering) -"cx" = ( -/obj/machinery/door/airlock{ - stripe_color = "#aab1c1" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled, -/area/meatstation/engineering) -"cy" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/obj/random/single/meatstation/low/wormscientist, -/obj/machinery/light/small/red{ - dir = 1 - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 1; - icon_state = "warning" - }, -/turf/simulated/floor/tiled/white, -/area/meatstation/centerhallway) -"cz" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/dark/airless, -/area/meatstation/cargo) -"cA" = ( -/obj/machinery/door/airlock{ - stripe_color = "#aab1c1" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/lino, -/area/meatstation/mess) -"cB" = ( -/obj/random/maintenance/clean, -/obj/item/inflatable_dispenser, -/obj/structure/closet, -/obj/random/maintenance/clean, -/obj/random/maintenance/clean, -/obj/item/rig/eva, -/obj/random/single/meatstation/meatball, -/obj/machinery/light{ - dir = 1 - }, -/obj/random/single/meatstation/low/biocell, -/turf/simulated/floor/carpet/red, -/area/meatstation/cargooffice) -"cC" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply, -/turf/simulated/floor/tiled/dark, -/area/meatstation/medical) -"cD" = ( -/turf/simulated/floor/lino, -/area/meatstation/mess) -"cE" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 8 - }, -/turf/simulated/floor/tiled/dark, -/area/meatstation/medical) -"cF" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 1 - }, -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/reagent_dispensers/watertank, -/turf/simulated/floor/tiled/monotile, -/area/meatstation/hydroponics) -"cG" = ( -/obj/machinery/door/airlock/external{ - id_tag = "meatstation_dock2"; - locked = 1 - }, -/turf/simulated/floor/tiled/dark, -/area/meatstation/cargo) -"cH" = ( -/obj/structure/table/glass, -/obj/item/clothing/head/collectable/paper, -/obj/effect/floor_decal/corner/green/border{ - dir = 9 - }, -/turf/simulated/floor/tiled/monotile, -/area/meatstation/hydroponics) -"cI" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply, -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/turf/simulated/floor/tiled, -/area/meatstation/centerhallway) -"cJ" = ( -/obj/structure/inflatable/wall, -/turf/simulated/floor/tiled, -/area/meatstation/nwhallway) -"cK" = ( -/turf/simulated/floor/tiled/dark, -/area/meatstation/cargo) -"cL" = ( -/obj/random/maintenance/clean, -/turf/simulated/floor/tiled/airless, -/area/meatstation/dorm) -"cM" = ( -/obj/machinery/light{ - dir = 1 - }, -/turf/simulated/floor/tiled/white, -/area/meatstation/lab) -"cN" = ( -/obj/machinery/radiocarbon_spectrometer, -/obj/effect/floor_decal/corner/red/border{ - dir = 8 - }, -/turf/simulated/floor/tiled/white, -/area/meatstation/lab) -"cO" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/effect/decal/cleanable/blood/drip, -/turf/simulated/floor/lino, -/area/meatstation/mess) -"cP" = ( -/obj/structure/closet/l3closet/scientist, -/obj/effect/floor_decal/industrial/warning{ - dir = 9 - }, -/obj/machinery/button/alternate/door/bolts{ - id_tag = "meatstation_westlabext"; - name = "exterior lab bolt control"; - pixel_x = -24 - }, -/turf/simulated/floor/tiled/white, -/area/meatstation/centerhallway) -"cQ" = ( -/obj/structure/closet/l3closet/scientist, -/obj/random/maintenance/clean, -/obj/effect/floor_decal/industrial/warning{ - dir = 5; - icon_state = "warning" - }, -/obj/machinery/button/alternate/door/bolts{ - id_tag = "meatstation_westlabint"; - name = "interior lab bolt control"; - pixel_x = 24 - }, -/turf/simulated/floor/tiled/white, -/area/meatstation/centerhallway) -"cR" = ( -/obj/random/junk, -/obj/machinery/light/small/red, -/obj/effect/floor_decal/corner/black/border, -/turf/simulated/floor/tiled, -/area/meatstation/centerhallway) -"cS" = ( -/obj/effect/wallframe_spawn/reinforced, -/obj/effect/paint/meatstation, -/turf/simulated/floor/plating, -/area/meatstation/mess) -"cT" = ( -/obj/machinery/door/airlock{ - stripe_color = "#aab1c1" - }, -/turf/simulated/floor/tiled, -/area/meatstation/dorm) -"cU" = ( -/obj/structure/closet/wardrobe/pjs, -/obj/item/clothing/accessory/scarf, -/obj/random/single/meatstation/meatball, -/turf/simulated/floor/carpet/blue, -/area/meatstation/dorm) -"cV" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 1 - }, -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/white, -/area/meatstation/centerhallway) -"cW" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 8 - }, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/lino, -/area/meatstation/mess) -"cX" = ( -/obj/effect/wallframe_spawn/reinforced, -/obj/effect/paint/meatstation, -/turf/simulated/floor/plating, -/area/meatstation/kitchen) -"cY" = ( -/turf/simulated/floor/tiled/white, -/area/meatstation/bathroom) -"cZ" = ( -/obj/machinery/light{ - dir = 1 - }, -/obj/random/junk, -/turf/simulated/floor/tiled/airless, -/area/meatstation/dorm) -"da" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 8 - }, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/lino, -/area/meatstation/mess) -"db" = ( -/obj/effect/floor_decal/corner/red/border{ - dir = 1 - }, -/obj/machinery/button/alternate/door/bolts{ - id_tag = "meatstation_westlabint"; - name = "interior lab bolt control"; - pixel_x = -24 - }, -/turf/simulated/floor/tiled/white, -/area/meatstation/lab) -"dc" = ( -/obj/structure/table/rack, -/obj/random/single/meatstation/laser, -/turf/simulated/floor/tiled/dark, -/area/meatstation/armory) -"dd" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/random/single/meatstation/meatball, -/turf/simulated/floor/airless, -/area/meatstation/engineering) -"de" = ( -/obj/machinery/door/airlock/vault/bolted{ - locked = 0; - name = "Armory" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/dark, -/area/meatstation/armory) -"df" = ( -/obj/machinery/vending/sovietsoda{ - dir = 4 - }, -/obj/effect/floor_decal/corner/lightgrey/border{ - dir = 9 - }, -/turf/simulated/floor/lino, -/area/meatstation/mess) -"dg" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/turf/simulated/floor/tiled/white, -/area/meatstation/bathroom) -"dh" = ( -/obj/item/paper, -/turf/simulated/floor/tiled/airless, -/area/meatstation/dorm) -"di" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/lino, -/area/meatstation/mess) -"dj" = ( -/obj/structure/table/rack, -/obj/random/single/meatstation/laser, -/obj/item/melee/baton, -/obj/machinery/light/small/red{ - dir = 1 - }, -/obj/effect/floor_decal/corner/grey/border{ - dir = 1 - }, -/turf/simulated/floor/tiled/dark, -/area/meatstation/armory) -"dk" = ( -/obj/random/single/meatstation/meatworm, -/turf/simulated/floor/tiled/dark, -/area/meatstation/armory) -"dl" = ( -/obj/effect/floor_decal/corner/red/border{ - dir = 1 - }, -/obj/machinery/button/alternate/door/bolts{ - id_tag = "meatstation_eastlabint"; - name = "interior lab bolt control"; - pixel_x = 24 - }, -/turf/simulated/floor/tiled/white, -/area/meatstation/lab) -"dm" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/white, -/area/meatstation/lab) -"dn" = ( -/obj/machinery/door/airlock{ - stripe_color = "#aab1c1" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/meatstation/bathroom) -"do" = ( -/obj/random/trash, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark, -/area/meatstation/armory) -"dp" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 1 - }, -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/white, -/area/meatstation/lab) -"dq" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply, -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/white, -/area/meatstation/lab) -"dr" = ( -/obj/structure/closet/toolcloset, -/obj/machinery/door/window/southleft, -/obj/item/grenade/chem_grenade/metalfoam, -/obj/effect/floor_decal/corner/purple/diagonal, -/obj/random/single/meatstation/meatball, -/turf/simulated/floor/airless, -/area/meatstation/engineering) -"ds" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/obj/effect/floor_decal/industrial/warning{ - dir = 1; - icon_state = "warning" - }, -/turf/simulated/floor/tiled/white, -/area/meatstation/centerhallway) -"dt" = ( -/obj/machinery/portable_atmospherics/powered/scrubber/huge/stationary, -/obj/effect/floor_decal/corner/red/border{ - dir = 9 - }, -/turf/simulated/floor/tiled/white, -/area/meatstation/lab) -"du" = ( -/obj/effect/paint/meatstation, -/turf/simulated/wall, -/area/meatstation/dorm) -"dv" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 8 - }, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/dark/airless, -/area/meatstation/cargo) -"dw" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 8 - }, -/turf/simulated/floor/tiled/dark/airless, -/area/meatstation/cargo) -"dx" = ( -/obj/effect/wallframe_spawn/reinforced, -/turf/simulated/floor/tiled/dark, -/area/meatstation/cargo) -"dy" = ( -/obj/effect/paint/meatstation, -/turf/simulated/wall/r_wall, -/area/meatstation/mess) -"dz" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/meatstation/bathroom) -"dA" = ( -/obj/machinery/door/airlock{ - stripe_color = "#aab1c1" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/effect/mine, -/turf/simulated/floor/tiled/dark, -/area/meatstation/cargo) -"dB" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/turf/simulated/floor/tiled/white, -/area/meatstation/bathroom) -"dC" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 1 - }, -/turf/simulated/floor/tiled/white, -/area/meatstation/bathroom) -"dD" = ( -/obj/effect/decal/cleanable/blood/drip, -/obj/effect/floor_decal/corner/black/border{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/meatstation/centerhallway) -"dE" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 4 - }, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/lino, -/area/meatstation/mess) -"dF" = ( -/obj/machinery/atmospherics/unary/vent_pump/on, -/turf/simulated/floor/tiled/white, -/area/meatstation/bathroom) -"dG" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/table/marble, -/turf/simulated/floor/lino, -/area/meatstation/mess) -"dH" = ( -/obj/machinery/computer/modular/preset/civilian, -/turf/simulated/floor/carpet/red, -/area/meatstation/cargooffice) -"dI" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 1 - }, -/turf/simulated/floor/tiled/white, -/area/meatstation/bathroom) -"dJ" = ( -/obj/item/pen, -/turf/simulated/floor/tiled/airless, -/area/meatstation/dorm) -"dK" = ( -/obj/machinery/door/airlock{ - stripe_color = "#aab1c1" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/lino, -/area/meatstation/kitchen) -"dL" = ( -/obj/effect/decal/cleanable/blood/drip, -/turf/simulated/floor/tiled/white, -/area/meatstation/bathroom) -"dM" = ( -/obj/machinery/light/small/red{ - dir = 4 - }, -/obj/effect/floor_decal/corner/black/border{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/meatstation/centerhallway) -"dN" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/reagent_dispensers/watertank, -/turf/simulated/floor/tiled/monotile, -/area/meatstation/hydroponics) -"dO" = ( -/turf/simulated/floor/airless/ceiling, -/area/meatstation/bathroom) -"dP" = ( -/obj/random/single/meatstation/low/wormscientist, -/obj/effect/floor_decal/corner/black/border{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/meatstation/centerhallway) -"dQ" = ( -/obj/item/stack/material/rods, -/obj/random/junk, -/turf/space, -/area/space) -"dR" = ( -/obj/item/pizzabox/meat, -/turf/space, -/area/space) -"dS" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/random/junk, -/obj/machinery/light/small/red{ - dir = 8 - }, -/turf/simulated/floor/lino, -/area/meatstation/mess) -"dT" = ( -/obj/structure/lattice, -/turf/space, -/area/meatstation/kitchen) -"dU" = ( -/turf/simulated/floor/tiled/dark/airless, -/area/meatstation/kitchen) -"dV" = ( -/obj/item/storage/box, -/turf/space, -/area/space) -"dW" = ( -/obj/item/reagent_containers/food/snacks/rawcutlet/meatstation, -/turf/space, -/area/space) -"dX" = ( -/obj/machinery/smartfridge/drinks, -/obj/effect/floor_decal/corner/lime/border{ - dir = 9 - }, -/turf/simulated/floor/tiled/dark/airless, -/area/meatstation/kitchen) -"dY" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 - }, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/structure/inflatable/door, -/turf/simulated/floor/tiled/dark/airless, -/area/meatstation/kitchen) -"dZ" = ( -/turf/simulated/floor/airless/ceiling, -/area/meatstation/kitchen) -"ea" = ( -/obj/machinery/door/airlock{ - stripe_color = "#aab1c1" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/meatstation/kitchen) -"eb" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply, -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/monotile, -/area/meatstation/hydroponics) -"ec" = ( -/turf/simulated/floor/tiled/dark/monotile, -/area/meatstation/storage) -"ed" = ( -/obj/structure/inflatable/wall, -/obj/effect/floor_decal/corner/b_green/border{ - dir = 9 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/meatstation/storage) -"ee" = ( -/obj/effect/wallframe_spawn/reinforced, -/obj/structure/barricade, -/turf/simulated/floor/plating, -/area/meatstation/hydroponics) -"ef" = ( -/obj/machinery/door/airlock{ - locked = 1; - stripe_color = "#aab1c1" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/lino, -/area/meatstation/mess) -"eg" = ( -/turf/simulated/floor/tiled/monotile, -/area/meatstation/hydroponics) -"eh" = ( -/obj/effect/wallframe_spawn/reinforced, -/obj/effect/paint/meatstation, -/turf/simulated/floor/plating, -/area/meatstation/cargo) -"ei" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/turf/simulated/floor/tiled/monotile, -/area/meatstation/hydroponics) -"ej" = ( -/obj/machinery/atmospherics/unary/vent_pump/on, -/obj/item/material/shard, -/turf/simulated/floor/tiled/monotile, -/area/meatstation/hydroponics) -"ek" = ( -/obj/effect/wallframe_spawn/reinforced, -/obj/effect/paint/meatstation, -/turf/simulated/floor/plating, -/area/meatstation/medical) -"el" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/turf/simulated/floor/tiled/dark/monotile, -/area/meatstation/storage) -"em" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/barricade/spike{ - dir = 8 - }, -/turf/simulated/floor/tiled, -/area/meatstation/centerhallway) -"en" = ( -/obj/machinery/door/airlock{ - stripe_color = "#aab1c1" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/monotile, -/area/meatstation/storage) -"eo" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/inflatable/door, -/turf/simulated/floor/tiled/dark, -/area/meatstation/swhallway) -"ep" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/meatstation/storage) -"eq" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 1 - }, -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/meatstation/storage) -"er" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/inflatable/door, -/obj/effect/floor_decal/corner/b_green/border{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/meatstation/storage) -"es" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 8 - }, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/cable/cyan{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/turf/simulated/floor/tiled, -/area/meatstation/centerhallway) -"et" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply, -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled, -/area/meatstation/centerhallway) -"eu" = ( -/obj/item/paper, -/obj/effect/floor_decal/corner/green/border{ - dir = 1 - }, -/turf/simulated/floor/tiled/monotile, -/area/meatstation/hydroponics) -"ev" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 1 - }, -/obj/item/material/shard, -/turf/simulated/floor/tiled/monotile, -/area/meatstation/hydroponics) -"ew" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 1; - level = 2 - }, -/obj/item/material/shard, -/turf/simulated/floor/tiled/dark/monotile, -/area/meatstation/storage) -"ex" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/effect/decal/cleanable/blood/drip, -/obj/random/single/meatstation/meatball, -/turf/simulated/floor/tiled/dark/airless, -/area/meatstation/cargo) -"ey" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 8 - }, -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/item/shield/riot, -/turf/simulated/floor/tiled/dark, -/area/meatstation/armory) -"ez" = ( -/obj/effect/floor_decal/corner/black/border, -/obj/item/tape_roll, -/turf/simulated/floor/tiled, -/area/meatstation/centerhallway) -"eA" = ( -/obj/structure/table/rack/dark, -/obj/structure/window/reinforced{ - dir = 4 - }, -/obj/machinery/door/window/southleft, -/obj/item/reagent_containers/glass/beaker/vial/random, -/obj/item/reagent_containers/glass/beaker/vial/random, -/obj/item/reagent_containers/glass/beaker/vial/random, -/obj/item/reagent_containers/glass/beaker/vial/random, -/obj/effect/decal/cleanable/cobweb, -/turf/simulated/floor/tiled/white, -/area/meatstation/lab) -"eB" = ( -/obj/structure/table/rack, -/obj/random/single/meatstation/laser, -/obj/random/trash, -/obj/random/coin, -/turf/simulated/floor/tiled/dark, -/area/meatstation/armory) -"eC" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/turf/simulated/floor/airless, -/area/meatstation/engineering) -"eD" = ( -/obj/random/single/meatstation/meatworm, -/turf/simulated/floor/tiled/dark/airless, -/area/meatstation/cargo) -"eE" = ( -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/table/steel, -/obj/item/reagent_containers/spray/cleaner/deodorant, -/turf/simulated/floor/tiled/white, -/area/meatstation/bathroom) -"eF" = ( -/obj/machinery/door/airlock{ - stripe_color = "#aab1c1" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/dark, -/area/meatstation/medical) -"eG" = ( -/obj/structure/table/glass, -/obj/machinery/microscope, -/obj/effect/floor_decal/corner/red/border{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/meatstation/lab) -"eH" = ( -/obj/random/single/meatstation/meatball, -/turf/simulated/floor/reinforced, -/area/meatstation/lab) -"eI" = ( -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/reinforced, -/area/meatstation/lab) -"eJ" = ( -/obj/effect/decal/cleanable/vomit, -/turf/simulated/floor/reinforced, -/area/meatstation/lab) -"eK" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 - }, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/turf/simulated/floor/tiled, -/area/meatstation/centerhallway) -"eL" = ( -/obj/random/junk, -/obj/machinery/light/small/red{ - dir = 8 - }, -/obj/effect/floor_decal/corner/black/border{ - dir = 8 - }, -/turf/simulated/floor/tiled, -/area/meatstation/centerhallway) -"eM" = ( -/obj/machinery/door/airlock{ - stripe_color = "#aab1c1" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/dark, -/area/meatstation/medical) -"eN" = ( -/obj/machinery/power/smes/buildable, -/obj/structure/cable/cyan, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/effect/floor_decal/corner/purple/border{ - dir = 8 - }, -/turf/simulated/floor/airless, -/area/meatstation/engineering) -"eO" = ( -/obj/structure/inflatable/wall, -/obj/effect/floor_decal/corner/black/bordercorner{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/meatstation/centerhallway) -"eP" = ( -/obj/machinery/power/smes/buildable, -/obj/structure/cable/cyan, -/obj/effect/floor_decal/corner/purple/border{ - dir = 10 - }, -/turf/simulated/floor/airless, -/area/meatstation/engineering) -"eQ" = ( -/obj/machinery/power/terminal{ - dir = 8 - }, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/cable/yellow{ - d2 = 2; - icon_state = "0-2" - }, -/obj/effect/floor_decal/corner/purple/bordercorner{ - dir = 8 - }, -/turf/simulated/floor/airless, -/area/meatstation/engineering) -"eR" = ( -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/effect/floor_decal/corner/purple/border{ - dir = 8 - }, -/obj/machinery/button/alternate/door/bolts{ - id_tag = "meatstation_nairlockint"; - name = "interior airlock bolt control"; - pixel_x = -24 - }, -/turf/simulated/floor/airless, -/area/meatstation/engineering) -"eS" = ( -/obj/random/single/meatstation/low/wormguard, -/turf/simulated/floor/tiled/dark, -/area/meatstation/cargo) -"eT" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 9; - icon_state = "warning" - }, -/turf/simulated/floor/reinforced, -/area/meatstation/lab) -"eU" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 8 - }, -/obj/random/junk, -/obj/effect/floor_decal/corner/black/border{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/meatstation/centerhallway) -"eV" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/obj/structure/cable/cyan{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/item/reagent_containers/glass/beaker/vial/random, -/obj/random/trash, -/turf/simulated/floor/tiled/dark, -/area/meatstation/medical) -"eW" = ( -/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply, -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/structure/cable/cyan{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/random/maintenance/clean, -/turf/simulated/floor/tiled/dark, -/area/meatstation/medical) -"eX" = ( -/obj/machinery/chemical_dispenser, -/obj/effect/floor_decal/corner/paleblue/border{ - dir = 9 - }, -/turf/simulated/floor/tiled/dark, -/area/meatstation/medical) -"eY" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/dark, -/area/meatstation/medical) -"eZ" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/monotile, -/area/meatstation/hydroponics) -"fa" = ( -/obj/machinery/door/airlock{ - stripe_color = "#aab1c1" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/monotile, -/area/meatstation/hydroponics) -"fb" = ( -/obj/effect/floor_decal/corner/black/border, -/obj/random/single/meatstation/meatworm, -/turf/simulated/floor/tiled, -/area/meatstation/centerhallway) -"fc" = ( -/obj/effect/paint/meatstation, -/turf/simulated/wall/r_wall, -/area/space) -"fd" = ( -/obj/effect/paint/meatstation, -/turf/simulated/wall/r_wall, -/area/meatstation/bathroom) -"fe" = ( -/obj/effect/paint/meatstation, -/turf/simulated/wall/r_wall, -/area/meatstation/cargooffice) -"ff" = ( -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/monotile, -/area/meatstation/hydroponics) -"fg" = ( -/obj/effect/wallframe_spawn/reinforced, -/obj/effect/paint/meatstation, -/turf/simulated/floor/plating, -/area/meatstation/hydroponics) -"fh" = ( -/obj/effect/floor_decal/industrial/warning/full, -/obj/machinery/button/alternate/door/bolts{ - id_tag = "meatstation_sairlockint"; - name = "interior airlock bolt control"; - pixel_x = -6; - pixel_y = 30 - }, -/obj/machinery/button/alternate/door/bolts{ - id_tag = "meatstation_sairlockext"; - name = "exterior airlock bolt control"; - pixel_x = 6; - pixel_y = 30 - }, -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/light/small/red, -/turf/simulated/floor/airless, -/area/meatstation/storage) -"fi" = ( -/obj/structure/table/rack, -/obj/effect/floor_decal/corner/purple/border, -/obj/machinery/light, -/turf/simulated/floor/airless, -/area/meatstation/engineering) -"fj" = ( -/obj/structure/cable/cyan{ - d2 = 2; - dir = 1; - icon_state = "0-2" - }, -/obj/structure/table/rack, -/obj/effect/floor_decal/corner/purple/border, -/obj/machinery/power/apc/meatstation{ - pixel_y = -28 - }, -/turf/simulated/floor/airless, -/area/meatstation/engineering) -"fk" = ( -/obj/effect/floor_decal/corner/lightgrey/border{ - dir = 1 - }, -/turf/simulated/floor/lino, -/area/meatstation/mess) -"fl" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/dark/airless, -/area/meatstation/kitchen) -"fm" = ( -/obj/effect/paint/meatstation, -/turf/simulated/wall/r_wall, -/area/meatstation/cargo) -"fn" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/random/trash, -/obj/random/single/meatstation/low/wormscientist, -/obj/effect/decal/cleanable/blood/drip, -/turf/simulated/floor/lino, -/area/meatstation/mess) -"fo" = ( -/obj/machinery/portable_atmospherics/canister/empty/air, -/obj/effect/decal/cleanable/filth, -/turf/simulated/floor/airless, -/area/meatstation/engineering) -"fp" = ( -/obj/structure/window/basic, -/obj/structure/closet, -/obj/item/reagent_containers/pill/detergent, -/obj/random/hat, -/obj/random/accessory, -/obj/random/clothing, -/obj/random/clothing, -/obj/item/clothing/ears/earring/stud/diamond, -/obj/item/reagent_containers/spray/cleaner/deodorant, -/turf/simulated/floor/tiled/dark/monotile, -/area/meatstation/storage) -"fq" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 8 - }, -/obj/structure/cable/cyan{ - d2 = 8; - icon_state = "0-8" - }, -/obj/machinery/power/apc/meatstation{ - dir = 4; - pixel_x = 24 - }, -/turf/simulated/floor/carpet/red, -/area/meatstation/cargooffice) -"fr" = ( -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/floor_decal/industrial/warning/full, -/obj/machinery/light/small/red, -/obj/machinery/button/alternate/door/bolts{ - id_tag = "meatstation_nairlockint"; - name = "interior airlock bolt control"; - pixel_x = 6; - pixel_y = 30 - }, -/obj/machinery/button/alternate/door/bolts{ - id_tag = "meatstation_nairlockext"; - name = "exterior airlock bolt control"; - pixel_x = -6; - pixel_y = 30 - }, -/turf/simulated/floor/airless, -/area/meatstation/engineering) -"fs" = ( -/obj/machinery/atmospherics/unary/vent_pump/on, -/turf/simulated/floor/tiled, -/area/meatstation/nwhallway) -"ft" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 - }, -/obj/structure/cable/cyan{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled, -/area/meatstation/nwhallway) -"fu" = ( -/obj/item/paper, -/obj/structure/bed/chair/office/comfy/beige, -/turf/simulated/floor/tiled/airless, -/area/meatstation/dorm) -"fv" = ( -/obj/effect/floor_decal/corner/red/bordercorner{ - dir = 1 - }, -/turf/simulated/floor/tiled/white, -/area/meatstation/lab) -"fw" = ( -/obj/structure/cable/cyan{ - d2 = 8; - icon_state = "0-8" - }, -/obj/effect/floor_decal/corner/lightgrey/border{ - dir = 4 - }, -/obj/machinery/power/apc/meatstation{ - dir = 4; - pixel_x = 24 - }, -/turf/simulated/floor/lino, -/area/meatstation/mess) -"fx" = ( -/obj/structure/cable/cyan{ - d2 = 8; - icon_state = "0-8" - }, -/obj/item/storage/mirror{ - icon_state = "mirror_broke"; - pixel_y = 32 - }, -/obj/structure/table/steel, -/obj/machinery/power/apc/meatstation{ - dir = 4; - pixel_x = 24 - }, -/turf/simulated/floor/tiled/white, -/area/meatstation/bathroom) -"fy" = ( -/obj/structure/hygiene/shower, -/obj/effect/floor_decal/industrial/warning{ - dir = 9 - }, -/obj/machinery/button/alternate/door/bolts{ - id_tag = "meatstation_eastlabint"; - name = "interior lab bolt control"; - pixel_x = -24 - }, -/turf/simulated/floor/tiled/white, -/area/meatstation/centerhallway) -"fz" = ( -/obj/machinery/door/airlock{ - locked = 1; - stripe_color = "#aab1c1" - }, -/turf/simulated/floor/tiled, -/area/meatstation/hydroponics) -"fA" = ( -/obj/structure/table/rack/dark, -/obj/structure/window/reinforced{ - dir = 4 - }, -/obj/machinery/door/window/southleft, -/obj/item/stack/xenochitin{ - amount = 15 - }, -/obj/item/stack/xenochitin{ - amount = 15 - }, -/obj/item/ammo_magazine/shotholder/stun, -/turf/simulated/floor/tiled/white, -/area/meatstation/lab) -"fB" = ( -/obj/structure/cable/cyan{ - d2 = 8; - icon_state = "0-8" - }, -/obj/effect/floor_decal/corner/black/border{ - dir = 4 - }, -/obj/machinery/power/apc/meatstation{ - dir = 4; - pixel_x = 24 - }, -/turf/simulated/floor/tiled, -/area/meatstation/centerhallway) -"fC" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/turf/simulated/floor/tiled/dark/airless, -/area/meatstation/cargo) -"fD" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 - }, -/obj/structure/cable/cyan{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/machinery/smartfridge/foods, -/obj/effect/floor_decal/corner/lime/border{ - dir = 1 - }, -/turf/simulated/floor/tiled/dark/airless, -/area/meatstation/kitchen) -"fE" = ( -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/effect/floor_decal/corner/red/border{ - dir = 4 - }, -/obj/structure/cable/cyan{ - d2 = 2; - icon_state = "0-2" - }, -/obj/machinery/power/apc/meatstation{ - dir = 4; - pixel_x = 24 - }, -/turf/simulated/floor/tiled/white, -/area/meatstation/lab) -"fF" = ( -/obj/structure/cable/cyan{ - d2 = 8; - icon_state = "0-8" - }, -/obj/effect/floor_decal/corner/brown/border{ - dir = 4 - }, -/obj/machinery/power/apc/meatstation{ - dir = 4; - pixel_x = 24 - }, -/turf/simulated/floor/tiled/dark/airless, -/area/meatstation/cargo) -"fG" = ( -/obj/item/storage/box/canned/beans, -/turf/space, -/area/space) -"fH" = ( -/obj/machinery/chem_master, -/obj/machinery/light{ - dir = 1 - }, -/obj/effect/floor_decal/corner/paleblue/border{ - dir = 1 - }, -/turf/simulated/floor/tiled/dark, -/area/meatstation/medical) -"fI" = ( -/obj/item/paper, -/obj/machinery/light{ - dir = 1 - }, -/obj/effect/floor_decal/corner/green/border{ - dir = 1 - }, -/turf/simulated/floor/tiled/monotile, -/area/meatstation/hydroponics) -"fJ" = ( -/obj/item/material/twohanded/fireaxe, -/turf/space, -/area/space) -"fK" = ( -/obj/structure/closet/chefcloset, -/obj/item/material/knife/kitchen/cleaver, -/turf/space, -/area/space) -"fL" = ( -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/airless, -/area/space) -"fM" = ( -/obj/effect/floor_decal/solarpanel, -/obj/machinery/power/solar{ - id = "meatstation_mainsolars" - }, -/turf/simulated/floor/airless, -/area/space) -"fN" = ( -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/turf/simulated/floor/airless, -/area/space) -"fO" = ( -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/turf/simulated/floor/airless, -/area/space) -"fP" = ( -/turf/simulated/floor/exoplanet/grass, -/area/meatstation/hydroponics) -"fQ" = ( -/obj/structure/window/basic{ - dir = 1 - }, -/obj/machinery/portable_atmospherics/hydroponics/soil, -/obj/item/seeds/weeds, -/turf/simulated/floor/exoplanet/grass, -/area/meatstation/hydroponics) -"fR" = ( -/obj/structure/window/basic{ - dir = 1 - }, -/obj/structure/window/basic{ - dir = 4 - }, -/obj/machinery/portable_atmospherics/hydroponics/soil, -/obj/item/seeds/weeds, -/turf/simulated/floor/exoplanet/grass, -/area/meatstation/hydroponics) -"fS" = ( -/obj/machinery/door/window/eastleft, -/turf/simulated/floor/exoplanet/grass, -/area/meatstation/hydroponics) -"fT" = ( -/obj/machinery/portable_atmospherics/hydroponics/soil, -/obj/item/seeds/weeds, -/turf/simulated/floor/exoplanet/grass, -/area/meatstation/hydroponics) -"fU" = ( -/obj/structure/window/basic{ - dir = 4 - }, -/obj/machinery/portable_atmospherics/hydroponics/soil, -/obj/item/seeds/weeds, -/turf/simulated/floor/exoplanet/grass, -/area/meatstation/hydroponics) -"fV" = ( -/obj/structure/table/marble, -/obj/machinery/microwave, -/obj/effect/floor_decal/corner/lime/diagonal, -/turf/simulated/floor/tiled/dark/airless, -/area/meatstation/kitchen) -"fW" = ( -/obj/item/paper, -/turf/simulated/floor/tiled/monotile, -/area/meatstation/hydroponics) -"fX" = ( -/obj/structure/table/glass, -/obj/item/device/flashlight/lamp, -/obj/effect/floor_decal/corner/green/border{ - dir = 1 - }, -/turf/simulated/floor/tiled/monotile, -/area/meatstation/hydroponics) -"fY" = ( -/obj/machinery/portable_atmospherics/hydroponics, -/turf/simulated/floor/tiled/monotile, -/area/meatstation/hydroponics) -"fZ" = ( -/obj/structure/closet/crate/hydroponics/beekeeping, -/obj/item/grenade/chem_grenade/water, -/obj/effect/floor_decal/corner/green/border{ - dir = 1 - }, -/turf/simulated/floor/tiled/monotile, -/area/meatstation/hydroponics) -"ga" = ( -/obj/structure/table/glass, -/obj/item/paper_bin, -/turf/simulated/floor/tiled/monotile, -/area/meatstation/hydroponics) -"gb" = ( -/obj/structure/closet/crate/hydroponics/beekeeping, -/obj/item/toy/water_balloon, -/obj/item/toy/water_balloon, -/obj/item/lipstick/random, -/obj/random/junk, -/obj/item/reagent_containers/spray/waterflower, -/obj/effect/floor_decal/corner/green/border{ - dir = 1 - }, -/turf/simulated/floor/tiled/monotile, -/area/meatstation/hydroponics) -"gc" = ( -/obj/structure/bed/chair/office/comfy/green, -/obj/item/paper, -/obj/item/paper, -/turf/simulated/floor/tiled/monotile, -/area/meatstation/hydroponics) -"gd" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 4 - }, -/obj/effect/floor_decal/corner/black/border{ - dir = 8 - }, -/turf/simulated/floor/tiled, -/area/meatstation/centerhallway) -"ge" = ( -/obj/structure/table/glass, -/obj/random/drinkbottle, -/obj/item/pen/fancy/quill, -/turf/simulated/floor/tiled/monotile, -/area/meatstation/hydroponics) -"gf" = ( -/obj/structure/cable/cyan{ - d2 = 4; - icon_state = "0-4" - }, -/obj/effect/floor_decal/corner/lime/border{ - dir = 8 - }, -/obj/machinery/power/apc/meatstation{ - dir = 8; - pixel_x = -24 - }, -/turf/simulated/floor/tiled/dark/airless, -/area/meatstation/kitchen) -"gg" = ( -/obj/machinery/portable_atmospherics/hydroponics, -/obj/machinery/light{ - dir = 1 - }, -/obj/effect/floor_decal/corner/green/border{ - dir = 1 - }, -/turf/simulated/floor/tiled/monotile, -/area/meatstation/hydroponics) -"gh" = ( -/obj/structure/closet/crate/hydroponics/prespawned, -/obj/random/loot, -/obj/random/trash, -/obj/random/single/meatstation/meatworm, -/turf/simulated/floor/tiled/monotile, -/area/meatstation/hydroponics) -"gi" = ( -/obj/effect/floor_decal/corner/green/border{ - dir = 1 - }, -/turf/simulated/floor/tiled/monotile, -/area/meatstation/hydroponics) -"gj" = ( -/obj/structure/flora/ausbushes/sparsegrass, -/turf/simulated/floor/exoplanet/grass, -/area/meatstation/hydroponics) -"gk" = ( -/obj/random/single/meatstation/wormscientist, -/turf/simulated/floor/tiled/monotile, -/area/meatstation/hydroponics) -"gl" = ( -/obj/random/trash, -/turf/simulated/floor/tiled/monotile, -/area/meatstation/hydroponics) -"gm" = ( -/obj/structure/closet/crate/hydroponics/prespawned, -/obj/item/grenade/chem_grenade/water, -/turf/simulated/floor/tiled/monotile, -/area/meatstation/hydroponics) -"gn" = ( -/obj/structure/closet/toolcloset, -/obj/structure/window/basic{ - dir = 8 - }, -/obj/machinery/door/window/northright, -/obj/item/clothing/ring/material/bronze, -/obj/item/grenade/chem_grenade/metalfoam, -/obj/effect/floor_decal/corner/purple/diagonal, -/turf/simulated/floor/airless, -/area/meatstation/engineering) -"go" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/bed/chair/office/comfy/green, -/turf/simulated/floor/tiled/monotile, -/area/meatstation/hydroponics) -"gp" = ( -/obj/structure/bed/chair/office/comfy/green{ - dir = 4 - }, -/turf/simulated/floor/tiled/monotile, -/area/meatstation/hydroponics) -"gq" = ( -/obj/random/single/meatstation/meatball, -/turf/simulated/floor/tiled/dark/airless, -/area/meatstation/cargo) -"gr" = ( -/obj/machinery/cooker/fryer, -/obj/effect/floor_decal/corner/lime/diagonal, -/turf/simulated/floor/tiled/dark/airless, -/area/meatstation/kitchen) -"gs" = ( -/obj/machinery/portable_atmospherics/hydroponics, -/obj/effect/floor_decal/corner/green/border{ - dir = 1 - }, -/turf/simulated/floor/tiled/monotile, -/area/meatstation/hydroponics) -"gt" = ( -/obj/item/pen, -/turf/simulated/floor/tiled/monotile, -/area/meatstation/hydroponics) -"gu" = ( -/obj/machinery/portable_atmospherics/hydroponics, -/obj/item/seeds/random, -/obj/effect/floor_decal/corner/green/border{ - dir = 1 - }, -/turf/simulated/floor/tiled/monotile, -/area/meatstation/hydroponics) -"gv" = ( -/obj/random/trash, -/obj/machinery/light{ - dir = 1 - }, -/obj/effect/floor_decal/corner/green/border{ - dir = 1 - }, -/turf/simulated/floor/tiled/monotile, -/area/meatstation/hydroponics) -"gw" = ( -/obj/machinery/portable_atmospherics/hydroponics, -/obj/item/seeds/random, -/turf/simulated/floor/tiled/monotile, -/area/meatstation/hydroponics) -"gx" = ( -/obj/machinery/washing_machine, -/obj/effect/floor_decal/corner/b_green/border{ - dir = 9 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/meatstation/storage) -"gy" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/portable_atmospherics/hydroponics, -/obj/item/seeds/random, -/turf/simulated/floor/tiled/monotile, -/area/meatstation/hydroponics) -"gz" = ( -/obj/random/junk, -/turf/simulated/floor/tiled/monotile, -/area/meatstation/hydroponics) -"gA" = ( -/obj/item/storage/candle_box/scented, -/turf/simulated/floor/tiled/dark/airless, -/area/meatstation/cargo) -"gB" = ( -/obj/item/paper, -/obj/random/trash, -/turf/simulated/floor/tiled/monotile, -/area/meatstation/hydroponics) -"gC" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/bed/chair/office/comfy/green{ - dir = 4 - }, -/obj/random/junk, -/turf/simulated/floor/tiled/monotile, -/area/meatstation/hydroponics) -"gD" = ( -/obj/structure/table/marble, -/obj/machinery/cooker/cereal, -/obj/effect/floor_decal/corner/lime/diagonal, -/turf/simulated/floor/tiled/dark/airless, -/area/meatstation/kitchen) -"gE" = ( -/obj/random/hostile, -/turf/simulated/floor/reinforced, -/area/meatstation/lab) -"gF" = ( -/obj/machinery/washing_machine, -/obj/effect/floor_decal/corner/b_green/border{ - dir = 1 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/meatstation/storage) -"gG" = ( -/obj/item/material/shard, -/obj/item/material/shard, -/turf/simulated/floor/tiled/dark/monotile, -/area/meatstation/storage) -"gH" = ( -/obj/item/ironingiron, -/obj/structure/table/glass, -/obj/item/reagent_containers/pill/detergent, -/obj/item/storage/box/detergent, -/obj/machinery/light{ - dir = 1 - }, -/obj/effect/floor_decal/corner/b_green/border{ - dir = 1 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/meatstation/storage) -"gI" = ( -/obj/random/single/meatstation/wormguard, -/obj/effect/decal/cleanable/filth, -/turf/simulated/floor/airless, -/area/meatstation/engineering) -"gJ" = ( -/obj/machinery/vending/medical, -/obj/effect/floor_decal/corner/paleblue/border{ - dir = 1 - }, -/turf/simulated/floor/tiled/dark, -/area/meatstation/medical) -"gK" = ( -/obj/structure/window/basic, -/obj/structure/window/basic{ - dir = 4 - }, -/obj/structure/closet, -/obj/random/trash, -/obj/random/hat, -/obj/random/accessory, -/obj/random/cash, -/obj/random/clothing, -/obj/random/clothing, -/obj/random/gloves, -/turf/simulated/floor/tiled/dark/monotile, -/area/meatstation/storage) -"gL" = ( -/obj/machinery/seed_storage/random{ - dir = 8 - }, -/obj/effect/floor_decal/corner/green/border{ - dir = 5 - }, -/turf/simulated/floor/tiled/monotile, -/area/meatstation/hydroponics) -"gM" = ( -/obj/structure/table/glass, -/obj/item/paper, -/obj/effect/floor_decal/corner/green/border{ - dir = 8 - }, -/turf/simulated/floor/tiled/monotile, -/area/meatstation/hydroponics) -"gN" = ( -/obj/machinery/portable_atmospherics/canister/hydrogen, -/turf/space, -/area/space) -"gO" = ( -/obj/structure/cable/cyan{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/turf/simulated/floor/tiled/white, -/area/meatstation/lab) -"gP" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/cable/cyan{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/turf/simulated/floor/tiled/dark/airless, -/area/meatstation/kitchen) -"gQ" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/light{ - dir = 1 - }, -/obj/effect/floor_decal/corner/lime/border{ - dir = 1 - }, -/obj/structure/inflatable/wall, -/turf/simulated/floor/tiled/dark/airless, -/area/meatstation/kitchen) -"gR" = ( -/obj/machinery/sleeper, -/obj/effect/floor_decal/corner/paleblue/border{ - dir = 1 - }, -/turf/simulated/floor/tiled/dark, -/area/meatstation/medical) -"gS" = ( -/obj/structure/cable/cyan{ - d2 = 2; - icon_state = "0-2" - }, -/obj/machinery/sleeper, -/obj/effect/floor_decal/corner/paleblue/border{ - dir = 5 - }, -/obj/machinery/power/apc/meatstation{ - dir = 1; - pixel_y = 24 - }, -/turf/simulated/floor/tiled/dark, -/area/meatstation/medical) -"gT" = ( -/obj/structure/window/basic{ - dir = 4 - }, -/obj/machinery/washing_machine, -/obj/effect/floor_decal/corner/b_green/border{ - dir = 1 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/meatstation/storage) -"gU" = ( -/obj/machinery/vending/hydronutrients/generic{ - dir = 8 - }, -/obj/effect/floor_decal/corner/green/border{ - dir = 4 - }, -/turf/simulated/floor/tiled/monotile, -/area/meatstation/hydroponics) -"gV" = ( -/obj/machinery/lapvend, -/obj/effect/floor_decal/corner/b_green/border{ - dir = 1 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/meatstation/storage) -"gW" = ( -/obj/machinery/suit_storage_unit/standard_unit, -/obj/machinery/light{ - dir = 1 - }, -/obj/effect/floor_decal/corner/b_green/border{ - dir = 1 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/meatstation/storage) -"gX" = ( -/obj/machinery/conveyor{ - dir = 8; - id = "trashconveyor" - }, -/obj/structure/window/reinforced{ - dir = 1 - }, -/obj/random/junk, -/turf/simulated/floor/tiled/dark/monotile, -/area/meatstation/storage) -"gY" = ( -/obj/machinery/power/rad_collector, -/obj/structure/window/basic{ - dir = 8 - }, -/obj/machinery/door/window/northleft, -/obj/effect/floor_decal/corner/purple/diagonal, -/turf/simulated/floor/airless, -/area/meatstation/engineering) -"gZ" = ( -/obj/machinery/power/rad_collector, -/obj/structure/window/basic{ - dir = 4 - }, -/obj/machinery/door/window/northright, -/obj/effect/floor_decal/corner/purple/diagonal, -/turf/simulated/floor/airless, -/area/meatstation/engineering) -"ha" = ( -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/bed/roller, -/obj/effect/floor_decal/corner/paleblue/border{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark, -/area/meatstation/medical) -"hb" = ( -/obj/machinery/suit_storage_unit/standard_unit, -/obj/effect/floor_decal/corner/b_green/border{ - dir = 1 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/meatstation/storage) -"hc" = ( -/obj/machinery/portable_atmospherics/canister, -/turf/simulated/floor/airless, -/area/meatstation/engineering) -"hd" = ( -/obj/machinery/portable_atmospherics/powered/pump, -/turf/space, -/area/space) -"he" = ( -/obj/structure/reagent_dispensers/fueltank, -/turf/space, -/area/space) -"hf" = ( -/obj/machinery/power/port_gen/pacman, -/turf/simulated/floor/airless, -/area/space) -"hg" = ( -/obj/item/stack/material/titanium/ten, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/airless, -/area/meatstation/engineering) -"hh" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/obj/machinery/light{ - dir = 1 - }, -/obj/effect/floor_decal/corner/red/border{ - dir = 1 - }, -/turf/simulated/floor/tiled/white, -/area/meatstation/lab) -"hi" = ( -/obj/structure/table/glass, -/obj/item/paper_bin, -/turf/simulated/floor/tiled/white, -/area/meatstation/lab) -"hj" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/barricade/spike, -/turf/simulated/floor/tiled/dark, -/area/meatstation/armory) -"hk" = ( -/obj/machinery/power/rad_collector, -/obj/structure/window/basic{ - dir = 8 - }, -/obj/machinery/door/window/southleft, -/obj/effect/floor_decal/corner/purple/diagonal, -/turf/simulated/floor/airless, -/area/meatstation/engineering) -"hl" = ( -/obj/machinery/reagentgrinder, -/obj/item/reagent_containers/glass/beaker/large, -/turf/simulated/floor/tiled/white, -/area/meatstation/lab) -"hm" = ( -/obj/machinery/light{ - dir = 8 - }, -/obj/effect/floor_decal/corner/red/border{ - dir = 8 - }, -/turf/simulated/floor/tiled/white, -/area/meatstation/lab) -"hn" = ( -/obj/machinery/radiocarbon_spectrometer, -/turf/simulated/floor/tiled/white, -/area/meatstation/lab) -"ho" = ( -/obj/structure/cable/cyan{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/turf/simulated/floor/tiled/white, -/area/meatstation/lab) -"hp" = ( -/obj/structure/table/glass, -/obj/machinery/reagent_temperature, -/turf/simulated/floor/tiled/white, -/area/meatstation/lab) -"hq" = ( -/obj/structure/table/glass, -/obj/item/device/flashlight/pen, -/obj/random/single/meatstation/cell, -/turf/simulated/floor/tiled/white, -/area/meatstation/lab) -"hr" = ( -/obj/structure/barricade/spike{ - dir = 8 - }, -/turf/simulated/floor/tiled/monotile, -/area/meatstation/hydroponics) -"hs" = ( -/obj/effect/wallframe_spawn/reinforced, -/obj/effect/paint/meatstation, -/turf/simulated/floor/plating, -/area/meatstation/centerhallway) -"ht" = ( -/obj/effect/floor_decal/corner/b_green/bordercorner{ - dir = 1 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/meatstation/storage) -"hu" = ( -/obj/machinery/recharger/wallcharger{ - dir = 1; - pixel_y = -22 - }, -/turf/simulated/floor/tiled/monotile, -/area/meatstation/hydroponics) -"hv" = ( -/obj/item/material/shard, -/turf/simulated/floor/tiled/monotile, -/area/meatstation/hydroponics) -"hw" = ( -/obj/random/single/meatstation/low/wormscientist, -/obj/effect/floor_decal/corner/black/border{ - dir = 8 - }, -/turf/simulated/floor/tiled, -/area/meatstation/centerhallway) -"hx" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/effect/decal/cleanable/blood/drip, -/obj/effect/floor_decal/corner/b_green/border{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/meatstation/storage) -"hy" = ( -/obj/structure/closet/wardrobe/pjs, -/obj/random/single/meatstation/meatball, -/turf/simulated/floor/carpet/blue3, -/area/meatstation/dorm) -"hz" = ( -/obj/item/storage/box/beakers/insulated, -/turf/space, -/area/space) -"hA" = ( -/obj/structure/table/marble, -/turf/simulated/floor/tiled/dark/airless, -/area/meatstation/kitchen) -"hB" = ( -/obj/item/reagent_containers/glass/beaker/vial/random/toxin, -/obj/effect/floor_decal/corner/paleblue/border{ - dir = 8 - }, -/turf/simulated/floor/tiled/dark, -/area/meatstation/medical) -"hC" = ( -/obj/random/trash, -/obj/item/stack/cable_coil/cyan{ - amount = 1 - }, -/turf/simulated/floor/airless, -/area/meatstation/engineering) -"hD" = ( -/obj/effect/floor_decal/corner/b_green/border{ - dir = 8 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/meatstation/storage) -"hE" = ( -/obj/effect/decal/cleanable/filth, -/turf/simulated/floor/tiled/airless, -/area/meatstation/dorm) -"hF" = ( -/obj/item/paper, -/obj/structure/bed/chair/office/comfy/yellow, -/obj/random/junk, -/turf/simulated/floor/tiled/airless, -/area/meatstation/dorm) -"hG" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/effect/floor_decal/corner/b_green/border{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/meatstation/storage) -"hH" = ( -/obj/machinery/power/solar_control{ - dir = 4; - id = "meatstation_mainsolars" - }, -/obj/structure/cable/yellow{ - d2 = 4; - icon_state = "0-4" - }, -/obj/effect/floor_decal/corner/purple/border{ - dir = 9 - }, -/turf/simulated/floor/airless, -/area/meatstation/engineering) -"hI" = ( -/obj/machinery/portable_atmospherics/canister/empty/oxygen, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/airless, -/area/meatstation/engineering) -"hJ" = ( -/obj/effect/floor_decal/corner/lightgrey/border{ - dir = 5 - }, -/turf/simulated/floor/lino, -/area/meatstation/mess) -"hK" = ( -/obj/machinery/vending/snack{ - dir = 4 - }, -/obj/effect/floor_decal/corner/lightgrey/border{ - dir = 8 - }, -/turf/simulated/floor/lino, -/area/meatstation/mess) -"hL" = ( -/obj/structure/table/rack/dark, -/obj/structure/window/reinforced{ - dir = 8 - }, -/obj/machinery/door/window/southright, -/obj/item/reagent_containers/glass/beaker/vial/random, -/obj/machinery/light/small/red{ - dir = 1 - }, -/turf/simulated/floor/tiled/white, -/area/meatstation/lab) -"hN" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/obj/structure/cable/cyan{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/structure/bed/roller, -/obj/effect/floor_decal/corner/paleblue/border{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark, -/area/meatstation/medical) -"hO" = ( -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/dark/airless, -/area/meatstation/cargo) -"hP" = ( -/obj/machinery/light{ - dir = 1 - }, -/obj/effect/floor_decal/corner/brown/border{ - dir = 1 - }, -/turf/simulated/floor/tiled/dark/airless, -/area/meatstation/cargo) -"hQ" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/barricade/spike{ - dir = 8 - }, -/turf/simulated/floor/tiled/monotile, -/area/meatstation/hydroponics) -"hR" = ( -/obj/structure/table/glass, -/obj/item/paper_bin, -/obj/item/pen/multi, -/obj/effect/floor_decal/corner/green/border{ - dir = 8 - }, -/turf/simulated/floor/tiled/monotile, -/area/meatstation/hydroponics) -"hS" = ( -/obj/structure/inflatable/wall, -/obj/structure/grille/broken, -/turf/simulated/floor/plating, -/area/meatstation/centerhallway) -"hT" = ( -/obj/structure/reagent_dispensers/watertank, -/obj/effect/floor_decal/corner/green/border{ - dir = 8 - }, -/turf/simulated/floor/tiled/monotile, -/area/meatstation/hydroponics) -"hU" = ( -/obj/machinery/door/airlock{ - stripe_color = "#aab1c1" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/decal/cleanable/filth, -/turf/simulated/floor/airless, -/area/meatstation/dorm) -"hV" = ( -/obj/item/stack/material/rods, -/turf/simulated/floor/tiled/monotile, -/area/meatstation/hydroponics) -"hW" = ( -/obj/structure/window/basic, -/obj/structure/bed/roller/ironingboard, -/obj/effect/floor_decal/corner/b_green/border{ - dir = 8 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/meatstation/storage) -"hX" = ( -/obj/effect/decal/cleanable/blood/drip, -/turf/simulated/floor/tiled/dark/airless, -/area/meatstation/kitchen) -"hY" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/item/stack/material/rods, -/turf/simulated/floor/tiled/monotile, -/area/meatstation/hydroponics) -"hZ" = ( -/obj/effect/wallframe_spawn/reinforced, -/obj/effect/paint/meatstation/lab, -/obj/machinery/door/blast/regular/open{ - dir = 4; - icon_state = "pdoor0"; - id_tag = "meatstation_blastdoorext" - }, -/turf/simulated/floor/plating, -/area/meatstation/lab) -"ia" = ( -/obj/structure/curtain/black, -/turf/simulated/floor/carpet/blue2, -/area/meatstation/dorm) -"ib" = ( -/obj/structure/curtain/black, -/turf/simulated/floor/carpet/blue, -/area/meatstation/dorm) -"ic" = ( -/obj/structure/curtain/black, -/turf/simulated/floor/carpet/blue3, -/area/meatstation/dorm) -"id" = ( -/obj/structure/bed/chair/office/comfy/green, -/turf/simulated/floor/tiled/airless, -/area/meatstation/dorm) -"ie" = ( -/obj/structure/hygiene/toilet{ - dir = 8 - }, -/obj/item/inflatable_duck, -/obj/random/single/meatstation/low/wormguard, -/obj/machinery/light/small/red{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/meatstation/bathroom) -"if" = ( -/obj/structure/curtain/open/shower, -/turf/simulated/floor/tiled/white, -/area/meatstation/bathroom) -"ig" = ( -/obj/effect/decal/cleanable/filth, -/turf/simulated/floor/airless, -/area/meatstation/engineering) -"ih" = ( -/obj/structure/hygiene/shower, -/obj/effect/floor_decal/industrial/warning{ - dir = 5; - icon_state = "warning" - }, -/obj/machinery/button/alternate/door/bolts{ - id_tag = "meatstation_eastlabext"; - name = "exterior lab bolt control"; - pixel_x = 24 - }, -/turf/simulated/floor/tiled/white, -/area/meatstation/centerhallway) -"ii" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 8; - icon_state = "warning" - }, -/turf/simulated/floor/tiled/white, -/area/meatstation/centerhallway) -"ij" = ( -/obj/structure/hygiene/sink{ - dir = 8; - pixel_x = -12; - pixel_y = 2 - }, -/turf/simulated/floor/tiled/white, -/area/meatstation/bathroom) -"ik" = ( -/obj/item/towel/random, -/turf/simulated/floor/tiled/white, -/area/meatstation/bathroom) -"il" = ( -/obj/random/clothing, -/turf/simulated/floor/tiled/white, -/area/meatstation/bathroom) -"im" = ( -/obj/machinery/beehive, -/turf/simulated/floor/exoplanet/grass, -/area/meatstation/hydroponics) -"in" = ( -/obj/effect/floor_decal/corner/lime/border{ - dir = 1 - }, -/obj/structure/inflatable/wall, -/turf/simulated/floor/tiled/dark/airless, -/area/meatstation/kitchen) -"io" = ( -/obj/machinery/icecream_vat, -/turf/simulated/floor/airless/ceiling, -/area/meatstation/kitchen) -"ip" = ( -/obj/machinery/door/airlock{ - name = "Toilet" - }, -/turf/simulated/floor/tiled/white, -/area/meatstation/bathroom) -"iq" = ( -/obj/structure/table/steel, -/turf/simulated/floor/tiled/white, -/area/meatstation/bathroom) -"ir" = ( -/obj/item/reagent_containers/food/snacks/meat/meatstationmeat, -/turf/simulated/floor/tiled/dark/airless, -/area/meatstation/kitchen) -"is" = ( -/obj/item/ammo_magazine/shotholder/empty, -/turf/space, -/area/space) -"it" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 4 - }, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/turf/simulated/floor/tiled/dark/airless, -/area/meatstation/kitchen) -"iu" = ( -/obj/effect/floor_decal/corner/lime/border{ - dir = 8 - }, -/turf/simulated/floor/tiled/dark/airless, -/area/meatstation/kitchen) -"iv" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 4 - }, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/dark/airless, -/area/meatstation/kitchen) -"iw" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 8 - }, -/turf/simulated/floor/tiled/dark/airless, -/area/meatstation/kitchen) -"ix" = ( -/obj/structure/girder, -/turf/simulated/floor/airless/ceiling, -/area/meatstation/bathroom) -"iy" = ( -/obj/structure/girder, -/turf/simulated/floor/airless/ceiling, -/area/meatstation/kitchen) -"iz" = ( -/obj/item/material/knife/kitchen, -/turf/space, -/area/space) -"iA" = ( -/obj/item/reagent_containers/food/snacks/sliceable/meatbread, -/turf/space, -/area/space) -"iB" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/effect/floor_decal/corner/b_green/border{ - dir = 4 - }, -/obj/structure/cable/cyan{ - d2 = 2; - icon_state = "0-2" - }, -/obj/machinery/power/apc/meatstation{ - dir = 4; - pixel_x = 24 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/meatstation/storage) -"iC" = ( -/obj/item/reagent_containers/food/snacks/slice/meatbread, -/turf/simulated/floor/airless/ceiling, -/area/meatstation/kitchen) -"iD" = ( -/obj/item/reagent_containers/food/snacks/slice/meatpizza, -/turf/space, -/area/space) -"iE" = ( -/obj/item/storage/box/handcuffs, -/turf/simulated/floor/airless, -/area/meatstation/cargo) -"iF" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/table/marble, -/turf/simulated/floor/tiled/dark/airless, -/area/meatstation/kitchen) -"iG" = ( -/obj/structure/table/marble, -/obj/item/material/knife/kitchen, -/turf/simulated/floor/tiled/dark/airless, -/area/meatstation/kitchen) -"iH" = ( -/obj/item/material/knife/kitchen/cleaver, -/turf/simulated/floor/airless/ceiling, -/area/meatstation/kitchen) -"iI" = ( -/obj/item/reagent_containers/food/snacks/sliceable/pizza/meatpizza, -/turf/space, -/area/space) -"iJ" = ( -/obj/machinery/cooker/grill, -/obj/effect/floor_decal/corner/lime/diagonal, -/turf/simulated/floor/airless/ceiling, -/area/meatstation/kitchen) -"iK" = ( -/obj/structure/table/marble, -/obj/machinery/cooker/candy, -/obj/effect/floor_decal/corner/lime/diagonal, -/turf/simulated/floor/tiled/dark/airless, -/area/meatstation/kitchen) -"iL" = ( -/obj/machinery/conveyor{ - dir = 8; - id = "trashconveyor" - }, -/obj/structure/window/reinforced{ - dir = 1 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/meatstation/storage) -"iM" = ( -/obj/machinery/disposal/deliveryChute{ - dir = 8 - }, -/obj/structure/disposalpipe/trunk{ - dir = 4 - }, -/obj/structure/window/reinforced{ - dir = 1 - }, -/turf/simulated/floor/plating, -/area/meatstation/storage) -"iN" = ( -/obj/effect/paint/meatstation, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/simulated/wall/r_wall, -/area/meatstation/storage) -"iO" = ( -/obj/effect/floor_decal/corner/lime/diagonal, -/turf/simulated/floor/tiled/dark/airless, -/area/meatstation/kitchen) -"iP" = ( -/obj/machinery/cooker/oven, -/obj/random/single/meatstation/meatworm, -/obj/effect/floor_decal/corner/lime/diagonal, -/turf/simulated/floor/airless/ceiling, -/area/meatstation/kitchen) -"iQ" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 8 - }, -/obj/effect/floor_decal/corner/lightgrey/border{ - dir = 4 - }, -/turf/simulated/floor/lino, -/area/meatstation/mess) -"iR" = ( -/obj/item/storage/box/canned/tomato, -/turf/space, -/area/space) -"iS" = ( -/obj/structure/closet/crate/freezer/meat, -/obj/item/reagent_containers/food/snacks/meat, -/obj/item/reagent_containers/food/snacks/meat/meatstationmeat, -/obj/item/reagent_containers/food/snacks/meat/meatstationmeat, -/obj/item/reagent_containers/food/snacks/rawcutlet/meatstation, -/turf/space, -/area/space) -"iT" = ( -/obj/item/material/kitchen/utensil/spork, -/turf/space, -/area/space) -"iU" = ( -/obj/machinery/light/small/red{ - dir = 1 - }, -/turf/simulated/floor/tiled/monotile, -/area/meatstation/hydroponics) -"iV" = ( -/obj/effect/wallframe_spawn/reinforced, -/obj/effect/paint/meatstation, -/turf/simulated/floor/plating, -/area/meatstation/storage) -"iW" = ( -/obj/item/material/knife/kitchen, -/turf/simulated/floor/tiled/dark/airless, -/area/meatstation/kitchen) -"iX" = ( -/obj/machinery/light{ - dir = 8 - }, -/obj/effect/floor_decal/corner/lime/border{ - dir = 8 - }, -/turf/simulated/floor/tiled/dark/airless, -/area/meatstation/kitchen) -"iY" = ( -/obj/item/material/kitchen/utensil/fork, -/turf/space, -/area/space) -"iZ" = ( -/obj/machinery/door/airlock/external{ - id_tag = "meatstation_sairlockext"; - locked = 1 - }, -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/plating, -/area/meatstation/storage) -"ja" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/item/material/kitchen/utensil/fork, -/turf/simulated/floor/tiled/dark/airless, -/area/meatstation/kitchen) -"jb" = ( -/obj/structure/lattice, -/turf/space, -/area/meatstation/storage) -"jc" = ( -/obj/item/material/kitchen/utensil/spork/plastic, -/turf/simulated/floor/tiled/dark/airless, -/area/meatstation/kitchen) -"jd" = ( -/obj/item/storage/mirror{ - dir = 4; - pixel_x = -32 - }, -/turf/simulated/floor/tiled/white, -/area/meatstation/bathroom) -"je" = ( -/obj/structure/table/steel, -/obj/item/mirror, -/turf/simulated/floor/tiled/white, -/area/meatstation/bathroom) -"jf" = ( -/obj/structure/girder, -/turf/simulated/floor/airless/ceiling, -/area/meatstation/mess) -"jg" = ( -/obj/item/stack/material/rods, -/obj/item/material/shard, -/obj/random/single/meatstation/low/wormscientist, -/turf/simulated/floor/tiled/dark, -/area/meatstation/swhallway) -"jh" = ( -/obj/structure/bed/chair/office/comfy/black{ - dir = 1 - }, -/obj/machinery/light{ - dir = 4 - }, -/obj/effect/floor_decal/corner/red/border{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/meatstation/lab) -"ji" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/bed/chair/office/comfy/blue{ - dir = 8 - }, -/turf/simulated/floor/tiled/dark, -/area/meatstation/medical) -"jj" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/item/reagent_containers/glass/beaker/vial/random/toxin, -/obj/random/single/meatstation/meatworm, -/turf/simulated/floor/tiled/dark, -/area/meatstation/medical) -"jk" = ( -/obj/random/trash, -/obj/item/storage/chewables/candy/medicallollis, -/obj/machinery/light{ - dir = 8 - }, -/obj/effect/floor_decal/corner/paleblue/border{ - dir = 8 - }, -/turf/simulated/floor/tiled/dark, -/area/meatstation/medical) -"jl" = ( -/obj/item/towel/random, -/turf/space, -/area/space) -"jm" = ( -/obj/machinery/door/window/northright, -/turf/simulated/floor/tiled/dark, -/area/meatstation/medical) -"jn" = ( -/obj/structure/window/basic{ - dir = 1 - }, -/obj/structure/window/basic{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark, -/area/meatstation/medical) -"jo" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/bed/chair/wheelchair, -/obj/machinery/light{ - dir = 4 - }, -/obj/effect/floor_decal/corner/paleblue/border{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark, -/area/meatstation/medical) -"jp" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 8 - }, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/tiled/dark, -/area/meatstation/medical) -"jq" = ( -/obj/structure/window/basic{ - dir = 1 - }, -/obj/item/clothing/head/surgery/black, -/obj/structure/closet, -/obj/item/clothing/under/rank/medical/scrubs/black, -/obj/item/clothing/under/rank/medical/scrubs/black, -/obj/item/clothing/head/surgery/black, -/obj/item/reagent_containers/spray/cleaner, -/obj/item/defibrillator, -/obj/item/stack/nanopaste, -/obj/effect/floor_decal/corner/paleblue/border{ - dir = 8 - }, -/turf/simulated/floor/tiled/dark, -/area/meatstation/medical) -"jr" = ( -/obj/structure/table/rack, -/obj/random/single/meatstation/laser, -/obj/effect/floor_decal/corner/grey/border{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark, -/area/meatstation/armory) -"js" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/item/material/shard, -/turf/simulated/floor/tiled/dark, -/area/meatstation/medical) -"jt" = ( -/obj/random/loot, -/obj/random/firstaid, -/obj/random/junk, -/obj/random/maintenance/clean, -/obj/item/plastique, -/obj/effect/decal/cleanable/blood, -/mob/living/simple_animal/hostile/meatstation/wormscientist, -/turf/simulated/floor/tiled/dark, -/area/meatstation/swhallway) -"ju" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/random/trash, -/turf/simulated/floor/tiled/dark, -/area/meatstation/medical) -"jv" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/effect/floor_decal/corner/paleblue/border{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark, -/area/meatstation/medical) -"jw" = ( -/obj/item/material/shard, -/obj/effect/floor_decal/corner/paleblue/border{ - dir = 8 - }, -/turf/simulated/floor/tiled/dark, -/area/meatstation/medical) -"jx" = ( -/obj/item/bedsheet/blue, -/turf/simulated/floor/carpet/blue2, -/area/meatstation/dorm) -"jy" = ( -/obj/structure/bed/chair/office/comfy/lime{ - dir = 1 - }, -/obj/item/bedsheet/green, -/turf/simulated/floor/carpet/blue, -/area/meatstation/dorm) -"jz" = ( -/obj/item/bedsheet/brown, -/turf/simulated/floor/carpet/blue2, -/area/meatstation/dorm) -"jA" = ( -/obj/structure/bed, -/turf/simulated/floor/carpet/blue3, -/area/meatstation/dorm) -"jB" = ( -/obj/item/stack/material/rods, -/turf/space, -/area/space) -"jC" = ( -/obj/item/bedsheet/rainbow, -/turf/simulated/floor/carpet/blue, -/area/meatstation/dorm) -"jD" = ( -/obj/structure/bed, -/obj/item/bedsheet/orange, -/turf/simulated/floor/carpet/blue3, -/area/meatstation/dorm) -"jE" = ( -/obj/item/bedsheet/yellow, -/turf/simulated/floor/carpet/blue2, -/area/meatstation/dorm) -"jF" = ( -/obj/item/bedsheet/purple, -/turf/simulated/floor/carpet/blue, -/area/meatstation/dorm) -"jG" = ( -/obj/item/bedsheet/red, -/turf/simulated/floor/carpet/blue2, -/area/meatstation/dorm) -"jH" = ( -/obj/item/bedsheet/yellow, -/turf/simulated/floor/carpet/blue3, -/area/meatstation/dorm) -"jI" = ( -/obj/item/bedsheet/purple, -/turf/simulated/floor/carpet/blue3, -/area/meatstation/dorm) -"jJ" = ( -/obj/structure/bed, -/obj/item/bedsheet/blue, -/turf/simulated/floor/carpet/blue, -/area/meatstation/dorm) -"jK" = ( -/obj/structure/closet/wardrobe/pjs, -/turf/simulated/floor/carpet/blue2, -/area/meatstation/dorm) -"jL" = ( -/obj/random/single/meatstation/meatworm, -/turf/simulated/floor/airless, -/area/meatstation/engineering) -"jM" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/random/single/meatstation/meatworm, -/turf/simulated/floor/airless, -/area/meatstation/engineering) -"jN" = ( -/obj/structure/table/woodentable/ebony, -/turf/simulated/floor/carpet/blue2, -/area/meatstation/dorm) -"jO" = ( -/obj/structure/table/woodentable/ebony, -/turf/simulated/floor/carpet/blue, -/area/meatstation/dorm) -"jP" = ( -/obj/structure/lattice, -/obj/item/paper, -/obj/structure/bed/chair/office/comfy/black{ - dir = 1 - }, -/turf/space, -/area/meatstation/dorm) -"jQ" = ( -/obj/structure/bed/chair/office/comfy/beige, -/turf/simulated/floor/carpet/blue2, -/area/meatstation/dorm) -"jR" = ( -/obj/structure/coatrack, -/obj/effect/floor_decal/corner/b_green/border{ - dir = 8 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/meatstation/storage) -"jS" = ( -/obj/item/bedsheet/clown, -/turf/simulated/floor/carpet/blue, -/area/meatstation/dorm) -"jT" = ( -/obj/structure/bed/chair/office/comfy/green{ - dir = 4 - }, -/turf/simulated/floor/carpet/blue, -/area/meatstation/dorm) -"jU" = ( -/obj/structure/bed/chair/office/comfy/lime, -/turf/simulated/floor/carpet/blue3, -/area/meatstation/dorm) -"jV" = ( -/obj/structure/bed/chair/office/comfy/red{ - dir = 8 - }, -/turf/simulated/floor/carpet/blue, -/area/meatstation/dorm) -"jW" = ( -/obj/structure/closet/wardrobe/pjs, -/obj/random/clothing, -/obj/random/single/meatstation/meatworm, -/turf/simulated/floor/carpet/blue, -/area/meatstation/dorm) -"jX" = ( -/obj/structure/disposalpipe/segment{ - dir = 2; - icon_state = "pipe-c" - }, -/obj/structure/window/reinforced{ - dir = 1 - }, -/obj/structure/window/reinforced{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/meatstation/storage) -"jY" = ( -/obj/structure/bed, -/turf/simulated/floor/carpet/blue, -/area/meatstation/dorm) -"jZ" = ( -/obj/structure/disposalpipe/segment, -/obj/structure/window/reinforced{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/meatstation/storage) -"ka" = ( -/obj/structure/bed/chair/office/comfy/purple{ - dir = 1 - }, -/turf/simulated/floor/carpet/blue3, -/area/meatstation/dorm) -"kb" = ( -/obj/effect/paint/meatstation, -/obj/effect/wallframe_spawn/reinforced, -/turf/simulated/floor/plating, -/area/meatstation/dorm) -"kc" = ( -/obj/structure/table/glass, -/obj/machinery/reagent_temperature/cooler, -/turf/simulated/floor/tiled/white, -/area/meatstation/lab) -"kd" = ( -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/cable/cyan{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/turf/simulated/floor/tiled/white, -/area/meatstation/lab) -"ke" = ( -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/cable/cyan{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/turf/simulated/floor/tiled/white, -/area/meatstation/lab) -"kf" = ( -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/effect/decal/cleanable/blood/drip, -/obj/effect/floor_decal/corner/red/bordercorner, -/turf/simulated/floor/tiled/white, -/area/meatstation/lab) -"kg" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 1; - icon_state = "warning" - }, -/turf/simulated/floor/tiled/white, -/area/meatstation/lab) -"kh" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/cable/cyan{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 4; - icon_state = "warning" - }, -/turf/simulated/floor/tiled/white, -/area/meatstation/lab) -"ki" = ( -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/turf/simulated/floor/tiled/white, -/area/meatstation/lab) -"kj" = ( -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/turf/simulated/floor/tiled/white, -/area/meatstation/lab) -"kk" = ( -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/turf/simulated/floor/tiled/white, -/area/meatstation/lab) -"kl" = ( -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/turf/simulated/floor/tiled/white, -/area/meatstation/lab) -"km" = ( -/obj/effect/wallframe_spawn/reinforced, -/obj/effect/paint/meatstation/lab, -/obj/structure/cable/cyan{ - d2 = 4; - icon_state = "0-4" - }, -/obj/machinery/door/blast/regular{ - dir = 4; - id_tag = "meatstation_blastdoorint" - }, -/turf/simulated/floor/plating, -/area/meatstation/lab) -"kn" = ( -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/floor_decal/corner/red/border{ - dir = 8 - }, -/turf/simulated/floor/tiled/white, -/area/meatstation/lab) -"ko" = ( -/obj/effect/wallframe_spawn/reinforced, -/obj/effect/paint/meatstation/lab, -/obj/structure/cable/cyan{ - d2 = 8; - icon_state = "0-8" - }, -/obj/machinery/door/blast/regular{ - dir = 4; - id_tag = "meatstation_blastdoorint" - }, -/turf/simulated/floor/plating, -/area/meatstation/lab) -"kp" = ( -/obj/structure/bed/chair/office/comfy/black, -/turf/simulated/floor/tiled/white, -/area/meatstation/lab) -"kq" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/table/marble, -/obj/item/material/kitchen/utensil/fork, -/turf/simulated/floor/lino, -/area/meatstation/mess) -"kr" = ( -/obj/structure/bed/chair/office/comfy/black{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/meatstation/lab) -"kt" = ( -/obj/structure/table/rack/dark, -/obj/structure/window/reinforced{ - dir = 8 - }, -/obj/machinery/door/window/southright, -/obj/random/single/meatstation/cell, -/turf/simulated/floor/tiled/white, -/area/meatstation/lab) -"ku" = ( -/obj/structure/table/rack/dark, -/obj/structure/window/reinforced{ - dir = 4 - }, -/obj/machinery/door/window/northleft, -/turf/simulated/floor/tiled/white, -/area/meatstation/lab) -"kv" = ( -/obj/structure/table/glass, -/obj/item/paper, -/turf/simulated/floor/tiled/white, -/area/meatstation/lab) -"kw" = ( -/obj/structure/table/rack/dark, -/obj/structure/window/reinforced{ - dir = 8 - }, -/obj/machinery/door/window/northright, -/obj/item/reagent_containers/glass/beaker/vial/random, -/obj/random/firstaid, -/turf/simulated/floor/tiled/white, -/area/meatstation/lab) -"kx" = ( -/obj/structure/table/rack/dark, -/obj/structure/window/reinforced{ - dir = 8 - }, -/obj/machinery/door/window/northright, -/obj/random/single/meatstation/low/biocell, -/obj/random/single/meatstation/low/biocell, -/obj/random/single/meatstation/low/biocell, -/turf/simulated/floor/tiled/white, -/area/meatstation/lab) -"ky" = ( -/obj/structure/table/gamblingtable, -/turf/simulated/floor/lino, -/area/meatstation/mess) -"kz" = ( -/obj/item/book/manual/detective, -/turf/simulated/floor/tiled/airless, -/area/meatstation/dorm) -"kA" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/obj/item/paper, -/obj/random/junk, -/turf/simulated/floor/tiled/airless, -/area/meatstation/dorm) -"kB" = ( -/obj/random/junk, -/turf/simulated/floor/tiled/airless, -/area/meatstation/dorm) -"kC" = ( -/obj/structure/table/marble, -/turf/simulated/floor/lino, -/area/meatstation/mess) -"kD" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/item/book/manual/anomaly_testing, -/turf/simulated/floor/tiled/airless, -/area/meatstation/dorm) -"kE" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/airless, -/area/meatstation/dorm) -"kF" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/item/book/manual/chef_recipes, -/turf/simulated/floor/tiled/airless, -/area/meatstation/dorm) -"kG" = ( -/obj/structure/table/marble, -/obj/item/reagent_containers/food/snacks/rawcutlet/meatstation, -/obj/item/trash/plate, -/turf/simulated/floor/lino, -/area/meatstation/mess) -"kH" = ( -/obj/machinery/vending/cigarette{ - dir = 4 - }, -/obj/effect/floor_decal/corner/lightgrey/border{ - dir = 8 - }, -/turf/simulated/floor/lino, -/area/meatstation/mess) -"kI" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/table/marble, -/obj/item/reagent_containers/food/snacks/sliceable/pizza/meatpizza, -/turf/simulated/floor/lino, -/area/meatstation/mess) -"kJ" = ( -/obj/structure/table/marble, -/obj/item/reagent_containers/food/snacks/slice/meatbread, -/turf/simulated/floor/lino, -/area/meatstation/mess) -"kK" = ( -/obj/structure/table/marble, -/obj/item/trash/plate, -/obj/item/reagent_containers/food/snacks/meat/meatstationmeat, -/turf/simulated/floor/lino, -/area/meatstation/mess) -"kL" = ( -/obj/structure/table/marble, -/obj/item/material/knife/kitchen, -/turf/simulated/floor/lino, -/area/meatstation/mess) -"kM" = ( -/obj/effect/floor_decal/corner/lightgrey/border{ - dir = 4 - }, -/turf/simulated/floor/lino, -/area/meatstation/mess) -"kN" = ( -/obj/structure/table/marble, -/obj/item/material/kitchen/utensil/spork, -/turf/simulated/floor/lino, -/area/meatstation/mess) -"kO" = ( -/obj/structure/table/glass, -/obj/item/pen/multi, -/obj/item/reagent_containers/glass/bucket, -/obj/item/paper, -/turf/simulated/floor/tiled/white, -/area/meatstation/lab) -"kP" = ( -/obj/structure/flora/pottedplant/orientaltree, -/turf/simulated/floor/carpet/red, -/area/meatstation/cargooffice) -"kQ" = ( -/obj/machinery/vending/hotfood{ - dir = 4 - }, -/obj/effect/floor_decal/corner/lightgrey/border{ - dir = 8 - }, -/turf/simulated/floor/lino, -/area/meatstation/mess) -"kR" = ( -/obj/structure/flora/pottedplant/smallcactus, -/turf/space, -/area/space) -"kS" = ( -/obj/structure/table/woodentable/ebony, -/obj/structure/flora/pottedplant/deskferntrim, -/turf/simulated/floor/carpet/blue2, -/area/meatstation/dorm) -"kT" = ( -/obj/structure/closet/wardrobe/pjs, -/obj/random/clothing, -/turf/simulated/floor/carpet/blue2, -/area/meatstation/dorm) -"kU" = ( -/obj/structure/bed/chair/office/comfy/blue{ - dir = 8 - }, -/turf/simulated/floor/carpet/blue2, -/area/meatstation/dorm) -"kV" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/table/standard, -/turf/simulated/floor/tiled/airless, -/area/meatstation/dorm) -"kW" = ( -/obj/structure/closet, -/obj/item/towel/random, -/obj/item/towel/random, -/obj/item/towel/random, -/turf/simulated/floor/tiled/white, -/area/meatstation/bathroom) -"kX" = ( -/obj/random/trash, -/turf/simulated/floor/lino, -/area/meatstation/mess) -"kY" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/random/trash, -/turf/simulated/floor/lino, -/area/meatstation/mess) -"kZ" = ( -/obj/random/trash, -/turf/simulated/floor/tiled/white, -/area/meatstation/bathroom) -"la" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/random/trash, -/turf/simulated/floor/lino, -/area/meatstation/mess) -"lb" = ( -/obj/random/trash, -/turf/simulated/floor/airless/ceiling, -/area/meatstation/kitchen) -"lc" = ( -/obj/random/trash, -/turf/simulated/floor/tiled/dark/airless, -/area/meatstation/kitchen) -"ld" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/random/junk, -/turf/simulated/floor/tiled/monotile, -/area/meatstation/hydroponics) -"le" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/random/trash, -/turf/simulated/floor/tiled/monotile, -/area/meatstation/hydroponics) -"lf" = ( -/obj/structure/bed, -/obj/item/paper, -/turf/simulated/floor/carpet/blue3, -/area/meatstation/dorm) -"lg" = ( -/obj/random/single/meatstation/meatworm, -/turf/simulated/floor/reinforced, -/area/meatstation/lab) -"lh" = ( -/obj/structure/closet, -/obj/item/towel/random, -/obj/item/towel/random, -/obj/random/clothing, -/obj/random/single/meatstation/meatball, -/turf/simulated/floor/tiled/white, -/area/meatstation/bathroom) -"li" = ( -/obj/structure/reagent_dispensers/coolanttank, -/turf/simulated/floor/tiled/white, -/area/meatstation/lab) -"lj" = ( -/obj/structure/bed/chair/office/comfy/black{ - dir = 1 - }, -/turf/simulated/floor/tiled/white, -/area/meatstation/lab) -"lk" = ( -/obj/item/ammo_casing/shotgun/pellet, -/turf/space, -/area/space) -"ll" = ( -/obj/structure/table/glass, -/obj/item/pen/multi, -/turf/simulated/floor/tiled/white, -/area/meatstation/lab) -"lm" = ( -/obj/item/paper, -/turf/simulated/floor/tiled/white, -/area/meatstation/lab) -"ln" = ( -/obj/item/storage/box/beakers, -/obj/effect/floor_decal/corner/brown/diagonal, -/turf/simulated/floor/tiled/dark/airless, -/area/meatstation/cargo) -"lo" = ( -/obj/structure/table/woodentable/ebony, -/obj/item/pen, -/obj/random/maintenance/clean, -/obj/item/paper/meatstation/xenoflora_note, -/turf/simulated/floor/carpet/red, -/area/meatstation/cargooffice) -"lp" = ( -/obj/random/trash, -/obj/item/paper, -/turf/simulated/floor/carpet/blue3, -/area/meatstation/dorm) -"lq" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/bed/chair/office/comfy/green{ - dir = 1 - }, -/obj/item/book/manual/chemistry_recipes, -/turf/simulated/floor/tiled/airless, -/area/meatstation/dorm) -"lr" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/item/device/flashlight/lamp, -/turf/simulated/floor/tiled/airless, -/area/meatstation/dorm) -"ls" = ( -/obj/structure/table/woodentable/ebony, -/obj/item/device/flashlight/lamp, -/turf/simulated/floor/carpet/blue, -/area/meatstation/dorm) -"lt" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/random/maintenance/clean, -/turf/simulated/floor/tiled/airless, -/area/meatstation/dorm) -"lu" = ( -/obj/structure/table/woodentable/ebony, -/obj/item/device/flashlight/lamp, -/turf/simulated/floor/carpet/blue3, -/area/meatstation/dorm) -"lv" = ( -/obj/structure/table/woodentable/ebony, -/turf/simulated/floor/carpet/blue3, -/area/meatstation/dorm) -"lw" = ( -/obj/structure/table/woodentable/ebony, -/obj/item/paper, -/turf/simulated/floor/carpet/blue, -/area/meatstation/dorm) -"lx" = ( -/obj/structure/closet/wardrobe/pjs, -/obj/item/pen, -/turf/simulated/floor/carpet/blue, -/area/meatstation/dorm) -"ly" = ( -/obj/structure/closet/wardrobe/pjs, -/obj/item/pen/crayon/rainbow, -/turf/simulated/floor/carpet/blue3, -/area/meatstation/dorm) -"lz" = ( -/obj/item/book/manual/ripley_build_and_repair, -/turf/space, -/area/space) -"lA" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 1 - }, -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/table/standard, -/obj/item/book/manual/engineering_hacking, -/turf/simulated/floor/tiled/airless, -/area/meatstation/dorm) -"lB" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/item/deck/tarot, -/turf/simulated/floor/airless, -/area/meatstation/dorm) -"lC" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/obj/structure/cable/cyan{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/structure/cable/cyan{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/turf/simulated/floor/tiled/airless, -/area/meatstation/dorm) -"lD" = ( -/obj/structure/table/gamblingtable, -/obj/item/deck/cards, -/turf/simulated/floor/lino, -/area/meatstation/mess) -"lE" = ( -/obj/structure/cable/cyan{ - d2 = 8; - icon_state = "0-8" - }, -/obj/machinery/power/apc/meatstation{ - dir = 4; - pixel_x = 24 - }, -/turf/simulated/floor/tiled/airless, -/area/meatstation/dorm) -"lF" = ( -/obj/structure/table/standard, -/obj/random/junk, -/turf/simulated/floor/tiled/airless, -/area/meatstation/dorm) -"lG" = ( -/obj/structure/table/standard, -/turf/simulated/floor/tiled/airless, -/area/meatstation/dorm) -"lH" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/item/paper, -/turf/simulated/floor/airless, -/area/meatstation/dorm) -"lI" = ( -/obj/structure/table/standard, -/obj/random/toy, -/turf/simulated/floor/tiled/airless, -/area/meatstation/dorm) -"lJ" = ( -/obj/item/paper, -/turf/simulated/floor/carpet/blue, -/area/meatstation/dorm) -"lK" = ( -/obj/structure/bed/chair/office/comfy/red{ - dir = 8 - }, -/turf/simulated/floor/airless, -/area/meatstation/dorm) -"lL" = ( -/obj/structure/bed/chair/office/comfy/black{ - dir = 4 - }, -/turf/space, -/area/space) -"lM" = ( -/obj/structure/bed/chair/office/comfy/yellow{ - dir = 1 - }, -/turf/simulated/floor/airless, -/area/meatstation/dorm) -"lN" = ( -/obj/structure/table/standard, -/obj/random/maintenance/clean, -/turf/simulated/floor/tiled/airless, -/area/meatstation/dorm) -"lO" = ( -/obj/random/junk, -/turf/simulated/floor/carpet/blue3, -/area/meatstation/dorm) -"lP" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 1; - level = 2 - }, -/obj/structure/table/standard, -/turf/simulated/floor/tiled/airless, -/area/meatstation/dorm) -"lQ" = ( -/obj/item/book/manual/research_and_development, -/turf/space, -/area/space) -"lR" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/airless, -/area/meatstation/dorm) -"lS" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 4 - }, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/airless, -/area/meatstation/dorm) -"lT" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 8 - }, -/turf/simulated/floor/tiled/airless, -/area/meatstation/dorm) -"lU" = ( -/obj/structure/bed/chair/office/comfy/black, -/turf/simulated/floor/tiled/airless, -/area/meatstation/dorm) -"lV" = ( -/obj/item/pen, -/turf/space, -/area/space) -"lW" = ( -/obj/item/bedsheet/mime, -/turf/simulated/floor/carpet/blue3, -/area/meatstation/dorm) -"lX" = ( -/obj/structure/bed, -/turf/simulated/floor/carpet/blue2, -/area/meatstation/dorm) -"lY" = ( -/obj/item/material/shard, -/turf/space, -/area/space) -"lZ" = ( -/obj/random/single/meatstation/low/wormguard, -/turf/simulated/floor/reinforced, -/area/meatstation/lab) -"ma" = ( -/obj/random/single/meatstation/low/wormscientist, -/turf/simulated/floor/carpet/blue3, -/area/meatstation/dorm) -"mb" = ( -/obj/structure/table/woodentable/ebony, -/obj/item/device/flashlight/lamp, -/turf/simulated/floor/carpet/red, -/area/meatstation/cargooffice) -"mc" = ( -/obj/random/single/meatstation/meatworm, -/turf/simulated/floor/lino, -/area/meatstation/mess) -"md" = ( -/obj/structure/table/woodentable/ebony, -/obj/item/paper_bin, -/turf/simulated/floor/carpet/red, -/area/meatstation/cargooffice) -"me" = ( -/obj/machinery/door/airlock{ - stripe_color = "#aab1c1" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/white, -/area/meatstation/bathroom) -"mf" = ( -/obj/structure/table/glass, -/obj/item/paper/meatstation/biocell_note, -/turf/simulated/floor/tiled/white, -/area/meatstation/lab) -"mg" = ( -/obj/structure/flora/pottedplant/smelly, -/turf/simulated/floor/carpet/red, -/area/meatstation/cargooffice) -"mh" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/effect/mine/dnascramble, -/obj/machinery/light/small/red{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark, -/area/meatstation/swhallway) -"mi" = ( -/obj/item/remains/human, -/turf/simulated/floor/tiled/dark, -/area/meatstation/swhallway) -"mj" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/effect/mine/dnascramble, -/obj/random/junk, -/turf/simulated/floor/tiled/dark, -/area/meatstation/swhallway) -"mk" = ( -/obj/effect/decal/cleanable/blood/drip, -/turf/simulated/floor/tiled/dark/airless, -/area/meatstation/cargo) -"ml" = ( -/obj/effect/mine/dnascramble, -/obj/random/trash, -/obj/random/junk, -/turf/simulated/floor/tiled/dark, -/area/meatstation/swhallway) -"mm" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/effect/mine, -/turf/simulated/floor/tiled/dark, -/area/meatstation/swhallway) -"mn" = ( -/obj/effect/mine/dnascramble, -/turf/simulated/floor/tiled/dark, -/area/meatstation/swhallway) -"mo" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/effect/mine/dnascramble, -/obj/effect/decal/cleanable/blood/drip, -/turf/simulated/floor/tiled/dark, -/area/meatstation/swhallway) -"mp" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/effect/decal/cleanable/blood/drip, -/turf/simulated/floor/tiled/dark/airless, -/area/meatstation/cargo) -"mq" = ( -/obj/effect/mine, -/obj/machinery/light/small/red{ - dir = 8 - }, -/turf/simulated/floor/tiled/dark, -/area/meatstation/swhallway) -"mr" = ( -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/light{ - dir = 8 - }, -/obj/effect/floor_decal/corner/purple/border{ - dir = 8 - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/turf/simulated/floor/airless, -/area/meatstation/engineering) -"ms" = ( -/obj/structure/closet/toolcloset, -/obj/item/clothing/glasses/thermal/plain/eyepatch, -/obj/item/grenade/chem_grenade/metalfoam, -/turf/space, -/area/space) -"mt" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/item/material/shard, -/obj/effect/floor_decal/corner/purple/diagonal, -/turf/simulated/floor/airless, -/area/meatstation/engineering) -"mu" = ( -/obj/item/material/shard, -/turf/simulated/floor/airless, -/area/meatstation/engineering) -"mv" = ( -/obj/effect/floor_decal/corner/purple/diagonal, -/turf/simulated/floor/airless, -/area/meatstation/engineering) -"mw" = ( -/obj/random/tool, -/turf/space, -/area/space) -"mx" = ( -/obj/structure/closet/toolcloset, -/obj/machinery/door/window/northright, -/obj/effect/floor_decal/corner/purple/diagonal, -/turf/simulated/floor/airless, -/area/meatstation/engineering) -"my" = ( -/obj/structure/closet/toolcloset, -/obj/structure/window/basic{ - dir = 4 - }, -/obj/machinery/door/window/northright, -/obj/item/inflatable/door, -/obj/effect/floor_decal/corner/purple/diagonal, -/turf/simulated/floor/airless, -/area/meatstation/engineering) -"mz" = ( -/obj/machinery/portable_atmospherics/canister/empty/air, -/turf/space, -/area/space) -"mA" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/effect/floor_decal/industrial/hatch/yellow, -/turf/simulated/floor/airless, -/area/meatstation/engineering) -"mB" = ( -/obj/machinery/portable_atmospherics/canister/carbon_dioxide, -/turf/simulated/floor/airless, -/area/meatstation/engineering) -"mC" = ( -/obj/effect/decal/cleanable/filth, -/turf/simulated/floor/tiled, -/area/meatstation/nwhallway) -"mD" = ( -/obj/machinery/portable_atmospherics/canister/carbon_dioxide, -/turf/space, -/area/space) -"mE" = ( -/obj/machinery/portable_atmospherics/canister/phoron, -/turf/simulated/floor/airless, -/area/meatstation/engineering) -"mF" = ( -/obj/machinery/portable_atmospherics/canister/phoron, -/turf/space, -/area/space) -"mG" = ( -/obj/machinery/portable_atmospherics/canister/nitrogen, -/turf/space, -/area/space) -"mH" = ( -/obj/machinery/portable_atmospherics/canister/nitrogen, -/turf/simulated/floor/airless, -/area/meatstation/engineering) -"mI" = ( -/obj/structure/closet/toolcloset, -/obj/structure/window/basic{ - dir = 8 - }, -/obj/machinery/door/window/southleft, -/obj/item/grenade/chem_grenade/metalfoam, -/obj/effect/floor_decal/corner/purple/diagonal, -/turf/simulated/floor/airless, -/area/meatstation/engineering) -"mJ" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/reagent_dispensers/fueltank, -/turf/simulated/floor/airless, -/area/meatstation/engineering) -"mK" = ( -/obj/structure/reagent_dispensers/fueltank, -/turf/simulated/floor/airless, -/area/meatstation/engineering) -"mL" = ( -/obj/random/single/meatstation/low/wormguard, -/turf/simulated/floor/airless, -/area/meatstation/engineering) -"mM" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/random/single/meatstation/low/wormguard, -/turf/simulated/floor/airless, -/area/meatstation/engineering) -"mN" = ( -/obj/structure/table/woodentable/ebony, -/obj/machinery/light/small/red{ - dir = 1 - }, -/turf/simulated/floor/carpet/blue2, -/area/meatstation/dorm) -"mO" = ( -/obj/machinery/power/rad_collector, -/obj/structure/window/basic{ - dir = 4 - }, -/obj/machinery/door/window/southright, -/obj/effect/floor_decal/corner/purple/diagonal, -/turf/simulated/floor/airless, -/area/meatstation/engineering) -"mP" = ( -/obj/machinery/pipedispenser/disposal, -/obj/effect/floor_decal/corner/purple/diagonal, -/turf/simulated/floor/airless, -/area/meatstation/engineering) -"mQ" = ( -/obj/machinery/pipedispenser, -/obj/effect/floor_decal/corner/purple/diagonal, -/turf/simulated/floor/airless, -/area/meatstation/engineering) -"mR" = ( -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/turf/simulated/floor/airless, -/area/meatstation/engineering) -"mS" = ( -/obj/item/cell/crap, -/turf/simulated/floor/airless, -/area/meatstation/engineering) -"mT" = ( -/obj/structure/closet/toolcloset, -/obj/machinery/door/window/southleft, -/obj/item/grenade/chem_grenade/metalfoam, -/obj/effect/floor_decal/corner/purple/diagonal, -/turf/simulated/floor/airless, -/area/meatstation/engineering) -"mU" = ( -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/item/stack/material/aluminium/ten, -/turf/simulated/floor/airless, -/area/meatstation/engineering) -"mV" = ( -/obj/item/stack/material/aluminium/ten, -/turf/simulated/floor/airless, -/area/meatstation/engineering) -"mW" = ( -/obj/random/single/meatstation/meatworm, -/obj/random/junk, -/turf/simulated/floor/tiled, -/area/meatstation/nwhallway) -"mX" = ( -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/turf/simulated/floor/airless, -/area/meatstation/engineering) -"mY" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/effect/mine/dnascramble, -/turf/simulated/floor/tiled/dark, -/area/meatstation/swhallway) -"mZ" = ( -/obj/random/single/meatstation/low/wormscientist, -/turf/simulated/floor/tiled/airless, -/area/meatstation/dorm) -"na" = ( -/obj/item/stack/material/wood/ebony/twentyfive, -/turf/space, -/area/space) -"nb" = ( -/obj/item/stack/material/mhydrogen/ten, -/turf/space, -/area/space) -"nc" = ( -/obj/machinery/power/port_gen/pacman, -/obj/effect/floor_decal/industrial/hatch/yellow, -/turf/simulated/floor/airless, -/area/meatstation/engineering) -"nd" = ( -/obj/item/stack/material/gold/ten, -/turf/space, -/area/space) -"ne" = ( -/obj/item/stack/material/steel/fifty, -/turf/simulated/floor/airless, -/area/meatstation/engineering) -"nf" = ( -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/item/stack/material/plasteel/fifty, -/turf/simulated/floor/airless, -/area/meatstation/engineering) -"ng" = ( -/obj/item/stack/material/wood/ebony/twentyfive, -/turf/simulated/floor/airless, -/area/meatstation/engineering) -"nh" = ( -/obj/item/stack/material/glass/reinforced/ten, -/turf/simulated/floor/airless, -/area/meatstation/engineering) -"ni" = ( -/obj/item/stack/material/silver/ten, -/turf/simulated/floor/airless, -/area/meatstation/engineering) -"nj" = ( -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, -/turf/simulated/floor/airless, -/area/meatstation/engineering) -"nk" = ( -/obj/item/stack/material/plasteel/ten, -/turf/simulated/floor/airless, -/area/meatstation/engineering) -"nl" = ( -/obj/item/stack/material/phoron/ten, -/turf/simulated/floor/airless, -/area/meatstation/engineering) -"nm" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/item/stack/material/steel/fifty, -/obj/machinery/pipedispenser/disposal, -/obj/effect/floor_decal/corner/purple/diagonal, -/turf/simulated/floor/airless, -/area/meatstation/engineering) -"nn" = ( -/obj/structure/closet/wardrobe/pjs, -/obj/random/clothing, -/obj/item/paper, -/turf/simulated/floor/carpet/blue3, -/area/meatstation/dorm) -"no" = ( -/obj/structure/closet/wardrobe/pjs, -/obj/random/clothing, -/obj/random/junk, -/turf/simulated/floor/carpet/blue, -/area/meatstation/dorm) -"np" = ( -/obj/structure/closet/wardrobe/pjs, -/obj/random/junk, -/turf/simulated/floor/carpet/blue3, -/area/meatstation/dorm) -"nq" = ( -/obj/structure/bed/chair/office/comfy/beige{ - dir = 4 - }, -/turf/simulated/floor/tiled/airless, -/area/meatstation/dorm) -"nr" = ( -/obj/random/junk, -/turf/simulated/floor/airless, -/area/meatstation/engineering) -"ns" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/random/trash, -/turf/simulated/floor/airless, -/area/meatstation/engineering) -"nt" = ( -/obj/random/trash, -/turf/simulated/floor/airless, -/area/meatstation/dorm) -"nu" = ( -/obj/item/book/manual/engineering_construction, -/turf/simulated/floor/tiled/airless, -/area/meatstation/dorm) -"nv" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/random/trash, -/turf/simulated/floor/airless, -/area/meatstation/engineering) -"nw" = ( -/obj/random/junk, -/turf/simulated/floor/carpet/blue, -/area/meatstation/dorm) -"nx" = ( -/obj/structure/closet/wardrobe/pjs, -/obj/random/junk, -/turf/simulated/floor/carpet/blue, -/area/meatstation/dorm) -"ny" = ( -/obj/structure/hygiene/toilet{ - dir = 8 - }, -/obj/random/junk, -/obj/effect/decal/cleanable/blood, -/obj/random/single/meatstation/meatmound, -/obj/machinery/light/small/red{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/meatstation/bathroom) -"nz" = ( -/obj/structure/hygiene/shower{ - dir = 8 - }, -/obj/random/junk, -/turf/simulated/floor/tiled/white, -/area/meatstation/bathroom) -"nA" = ( -/obj/random/junk, -/turf/simulated/floor/lino, -/area/meatstation/mess) -"nB" = ( -/obj/structure/inflatable/wall, -/turf/simulated/floor/lino, -/area/meatstation/mess) -"nC" = ( -/obj/random/junk, -/turf/simulated/floor/airless/ceiling, -/area/meatstation/kitchen) -"nD" = ( -/obj/random/junk, -/turf/simulated/floor/tiled/dark/airless, -/area/meatstation/kitchen) -"nE" = ( -/obj/structure/closet, -/obj/item/towel/random, -/obj/item/towel/random, -/obj/item/towel/random, -/obj/random/junk, -/turf/simulated/floor/tiled/white, -/area/meatstation/bathroom) -"nF" = ( -/obj/random/single/meatstation/meatworm, -/turf/simulated/floor/tiled/airless, -/area/meatstation/dorm) -"nG" = ( -/obj/machinery/light{ - dir = 4 - }, -/turf/simulated/floor/tiled/airless, -/area/meatstation/dorm) -"nH" = ( -/obj/item/clothing/accessory/scarf, -/turf/simulated/floor/tiled/airless, -/area/meatstation/dorm) -"nI" = ( -/obj/random/junk, -/turf/simulated/floor/carpet/blue2, -/area/meatstation/dorm) -"nJ" = ( -/obj/random/toolbox, -/turf/space, -/area/space) -"nK" = ( -/obj/item/bedsheet/clown, -/obj/random/toy, -/turf/simulated/floor/carpet/blue, -/area/meatstation/dorm) -"nL" = ( -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/random/toolbox, -/turf/simulated/floor/airless, -/area/meatstation/engineering) -"nM" = ( -/obj/structure/closet/toolcloset, -/obj/random/tool, -/turf/simulated/floor/airless, -/area/meatstation/engineering) -"nN" = ( -/obj/machinery/light, -/turf/simulated/floor/tiled/airless, -/area/meatstation/dorm) -"nO" = ( -/obj/random/maintenance/clean, -/turf/space, -/area/space) -"nP" = ( -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/effect/floor_decal/corner/purple/bordercorner{ - dir = 1 - }, -/obj/item/stack/cable_coil/green{ - amount = 28 - }, -/turf/simulated/floor/airless, -/area/meatstation/engineering) -"nQ" = ( -/obj/structure/closet/wardrobe/pjs, -/obj/random/maintenance/clean, -/obj/random/maintenance/clean, -/turf/simulated/floor/carpet/blue2, -/area/meatstation/dorm) -"nR" = ( -/obj/random/trash, -/turf/simulated/floor/airless, -/area/meatstation/engineering) -"nS" = ( -/obj/random/trash, -/turf/simulated/floor/tiled/airless, -/area/meatstation/dorm) -"nT" = ( -/obj/item/paper, -/obj/item/paper, -/turf/simulated/floor/tiled/airless, -/area/meatstation/dorm) -"nU" = ( -/obj/item/stack/material/steel/fifty, -/obj/random/trash, -/turf/simulated/floor/airless, -/area/meatstation/engineering) -"nV" = ( -/obj/random/maintenance/clean, -/turf/simulated/floor/airless, -/area/meatstation/engineering) -"nW" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/random/junk, -/turf/simulated/floor/tiled/airless, -/area/meatstation/dorm) -"nX" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 - }, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/random/trash, -/turf/simulated/floor/airless, -/area/meatstation/engineering) -"nY" = ( -/obj/structure/closet/wardrobe/pjs, -/obj/random/maintenance/clean, -/turf/simulated/floor/carpet/blue2, -/area/meatstation/dorm) -"nZ" = ( -/obj/random/maintenance/clean, -/turf/simulated/floor/lino, -/area/meatstation/mess) -"oa" = ( -/obj/random/maintenance/clean, -/turf/simulated/floor/tiled/white, -/area/meatstation/bathroom) -"ob" = ( -/obj/structure/table/gamblingtable, -/obj/random/maintenance/clean, -/turf/simulated/floor/lino, -/area/meatstation/mess) -"oc" = ( -/obj/random/maintenance/clean, -/turf/simulated/floor/airless, -/area/space) -"od" = ( -/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply, -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/cable/cyan{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/effect/floor_decal/industrial/hatch/yellow, -/turf/simulated/floor/airless, -/area/meatstation/engineering) -"oe" = ( -/obj/random/closet, -/obj/item/clothing/glasses/monocle, -/turf/space, -/area/space) -"of" = ( -/obj/structure/table/glass, -/obj/item/paper, -/obj/item/pen/multi, -/turf/simulated/floor/tiled/white, -/area/meatstation/lab) -"og" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 - }, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/structure/bookcase, -/turf/simulated/floor/tiled/airless, -/area/meatstation/dorm) -"oh" = ( -/obj/random/maintenance/clean, -/turf/simulated/floor/tiled/dark/monotile, -/area/meatstation/storage) -"oi" = ( -/obj/random/junk, -/turf/simulated/floor/tiled/dark/monotile, -/area/meatstation/storage) -"oj" = ( -/obj/machinery/conveyor{ - dir = 8; - id = "trashconveyor" - }, -/obj/structure/window/reinforced{ - dir = 1 - }, -/obj/random/junk, -/obj/random/maintenance/clean, -/turf/simulated/floor/tiled/dark/monotile, -/area/meatstation/storage) -"ok" = ( -/obj/structure/table/rack, -/obj/effect/floor_decal/corner/purple/border{ - dir = 8 - }, -/obj/item/cell/high, -/turf/simulated/floor/airless, -/area/meatstation/engineering) -"ol" = ( -/obj/random/maintenance/clean, -/turf/simulated/floor/tiled/monotile, -/area/meatstation/hydroponics) -"om" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/random/maintenance/clean, -/turf/simulated/floor/tiled/monotile, -/area/meatstation/hydroponics) -"on" = ( -/obj/item/material/shard, -/obj/item/stack/material/wood, -/turf/simulated/floor/tiled/monotile, -/area/meatstation/hydroponics) -"oo" = ( -/obj/random/single/meatstation/low/wormscientist, -/turf/simulated/floor/tiled/white, -/area/meatstation/lab) -"op" = ( -/obj/item/clothing/accessory/stethoscope, -/turf/simulated/floor/tiled/dark, -/area/meatstation/medical) -"oq" = ( -/obj/item/inflatable/door, -/turf/space, -/area/space) -"or" = ( -/obj/item/inflatable/door, -/turf/simulated/floor/airless, -/area/meatstation/engineering) -"os" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/table/glass, -/obj/item/paper_bin, -/obj/effect/floor_decal/corner/green/diagonal, -/turf/simulated/floor/tiled/monotile, -/area/meatstation/hydroponics) -"ot" = ( -/obj/effect/floor_decal/corner/black/border{ - dir = 1 - }, -/obj/random/single/meatstation/low/wormguard, -/turf/simulated/floor/tiled, -/area/meatstation/centerhallway) -"ou" = ( -/obj/machinery/portable_atmospherics/powered/pump/filled, -/turf/simulated/floor/tiled/dark/airless, -/area/meatstation/cargo) -"ov" = ( -/obj/effect/decal/cleanable/blood/drip, -/turf/simulated/floor/airless, -/area/meatstation/cargo) -"ow" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/decal/cleanable/filth, -/turf/simulated/floor/tiled, -/area/meatstation/centerhallway) -"ox" = ( -/obj/machinery/door/airlock{ - stripe_color = "#aab1c1"; - welded = 1 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled, -/area/meatstation/kitchen) -"oy" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/effect/floor_decal/corner/b_green/border{ - dir = 4 - }, -/obj/machinery/recharger/wallcharger{ - dir = 8; - pixel_x = 23; - pixel_y = -3 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/meatstation/storage) -"oz" = ( -/obj/structure/table/glass, -/obj/effect/decal/cleanable/blood/drip, -/obj/machinery/dnaforensics, -/turf/simulated/floor/tiled/white, -/area/meatstation/lab) -"oA" = ( -/obj/random/single/meatstation/wormguard, -/turf/simulated/floor/tiled/dark, -/area/meatstation/armory) -"oB" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/inflatable/door, -/turf/simulated/floor/tiled, -/area/meatstation/nwhallway) -"oC" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/door/airlock{ - stripe_color = "#aab1c1"; - welded = 1 - }, -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled, -/area/meatstation/cargo) -"oE" = ( -/obj/effect/overmap/visitable/sector/meatstation, -/turf/space, -/area/space) -"oF" = ( -/obj/effect/decal/cleanable/blood, -/turf/simulated/floor/airless, -/area/meatstation/centerhallway) -"oG" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/inflatable/door, -/turf/simulated/floor/tiled/dark/airless, -/area/meatstation/cargo) -"oH" = ( -/turf/simulated/floor/airless, -/area/meatstation/cargo) -"oJ" = ( -/obj/item/book/manual/stasis, -/turf/simulated/floor/tiled/airless, -/area/meatstation/dorm) -"oK" = ( -/obj/structure/bookcase/manuals/xenoarchaeology, -/turf/simulated/floor/tiled/airless, -/area/meatstation/dorm) -"oL" = ( -/obj/structure/bookcase, -/turf/simulated/floor/tiled/airless, -/area/meatstation/dorm) -"oM" = ( -/obj/structure/bed/chair/office/comfy/lime, -/obj/machinery/light/small/red{ - dir = 8 - }, -/turf/simulated/floor/tiled/airless, -/area/meatstation/dorm) -"oN" = ( -/obj/item/book/manual/robotics_cyborgs, -/turf/space, -/area/space) -"oO" = ( -/obj/item/book/manual/medical_diagnostics_manual, -/turf/space, -/area/space) -"oP" = ( -/obj/structure/bookcase/manuals/research_and_development, -/turf/simulated/floor/tiled/airless, -/area/meatstation/dorm) -"oQ" = ( -/obj/item/book/manual/hydroponics_pod_people, -/turf/space, -/area/space) -"oR" = ( -/obj/item/book/manual/chemistry_recipes, -/turf/space, -/area/space) -"oS" = ( -/obj/item/stack/material/rods, -/obj/item/book/manual/anomaly_spectroscopy, -/turf/space, -/area/space) -"oT" = ( -/obj/structure/table/standard, -/obj/item/paper_bin, -/turf/simulated/floor/tiled/airless, -/area/meatstation/dorm) -"oU" = ( -/obj/structure/table/standard, -/obj/item/device/flashlight/lamp, -/turf/simulated/floor/tiled/airless, -/area/meatstation/dorm) -"oV" = ( -/obj/random/single/meatstation/low/wormscientist, -/obj/effect/floor_decal/corner/lightgrey/border{ - dir = 1 - }, -/obj/structure/bed/chair, -/turf/simulated/floor/lino, -/area/meatstation/mess) -"oW" = ( -/obj/machinery/light{ - dir = 1 - }, -/obj/effect/floor_decal/corner/lightgrey/border{ - dir = 1 - }, -/obj/structure/bed/chair, -/turf/simulated/floor/lino, -/area/meatstation/mess) -"oX" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 4 - }, -/obj/random/single/meatstation/meatworm, -/obj/structure/bed/chair{ - dir = 8 - }, -/turf/simulated/floor/lino, -/area/meatstation/mess) -"oY" = ( -/obj/item/book/manual/excavation, -/turf/simulated/floor/airless, -/area/meatstation/dorm) -"oZ" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/item/book/manual/barman_recipes, -/turf/simulated/floor/airless, -/area/meatstation/dorm) -"pa" = ( -/obj/structure/bed/chair{ - dir = 1 - }, -/turf/simulated/floor/lino, -/area/meatstation/mess) -"pb" = ( -/obj/effect/decal/cleanable/blood/drip, -/obj/structure/bed/chair, -/turf/simulated/floor/lino, -/area/meatstation/mess) -"pc" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply, -/turf/simulated/floor/tiled, -/area/meatstation/nwhallway) -"pd" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 1; - level = 2 - }, -/turf/simulated/floor/airless, -/area/meatstation/engineering) -"pe" = ( -/obj/machinery/light/small/red{ - dir = 8 - }, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/meatstation/nwhallway) -"pf" = ( -/obj/structure/lattice, -/turf/space, -/area/meatstation/cargo) -"pg" = ( -/obj/structure/girder, -/turf/simulated/floor/airless, -/area/meatstation/cargo) -"ph" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/meatstation/nwhallway) -"pi" = ( -/obj/item/extinguisher, -/turf/space, -/area/space) -"pk" = ( -/obj/item/evidencebag, -/turf/space, -/area/space) -"pl" = ( -/obj/item/flame/lighter/random, -/turf/space, -/area/space) -"pm" = ( -/obj/item/flame/lighter/green, -/turf/space, -/area/space) -"pn" = ( -/obj/item/stack/material/rods, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark, -/area/meatstation/swhallway) -"po" = ( -/obj/random/closet, -/turf/space, -/area/space) -"pp" = ( -/obj/random/firstaid, -/turf/space, -/area/space) -"pq" = ( -/obj/effect/floor_decal/corner/brown/border{ - dir = 1 - }, -/turf/simulated/floor/tiled/dark/airless, -/area/meatstation/cargo) -"pr" = ( -/obj/random/tech_supply, -/turf/space, -/area/space) -"ps" = ( -/obj/random/technology_scanner, -/turf/space, -/area/space) -"pt" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/effect/mine, -/obj/item/stack/material/rods, -/obj/effect/decal/cleanable/blood/drip, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark, -/area/meatstation/swhallway) -"pu" = ( -/obj/item/paper/meatstation/weapon_note, -/turf/simulated/floor/airless, -/area/meatstation/dorm) -"pv" = ( -/obj/effect/paint/meatstation, -/obj/effect/wallframe_spawn/reinforced, -/turf/simulated/floor/plating, -/area/meatstation/cargooffice) -"pw" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/floor_decal/corner/brown/border{ - dir = 1 - }, -/turf/simulated/floor/tiled/dark/airless, -/area/meatstation/cargo) -"px" = ( -/obj/random/toy, -/turf/simulated/floor/tiled/dark/airless, -/area/meatstation/cargo) -"py" = ( -/obj/item/storage/box/monkeycubes/farwacubes, -/turf/simulated/floor/tiled/dark/airless, -/area/meatstation/cargo) -"pz" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/floor_decal/industrial/hatch/yellow, -/turf/simulated/floor/airless, -/area/meatstation/engineering) -"pA" = ( -/obj/structure/reagent_dispensers/fueltank, -/obj/effect/floor_decal/corner/purple/border, -/obj/effect/floor_decal/industrial/hatch/yellow, -/turf/simulated/floor/airless, -/area/meatstation/engineering) -"pB" = ( -/obj/random/maintenance/clean, -/turf/simulated/floor/tiled/dark/airless, -/area/meatstation/cargo) -"pC" = ( -/obj/item/storage/box/monkeycubes/spidercubes, -/turf/simulated/floor/tiled/dark/airless, -/area/meatstation/cargo) -"pD" = ( -/obj/structure/bed/chair, -/turf/simulated/floor/lino, -/area/meatstation/mess) -"pE" = ( -/obj/item/storage/box/lights/bulbs, -/turf/simulated/floor/tiled/dark/airless, -/area/meatstation/cargo) -"pF" = ( -/obj/item/storage/box/lights/tubes/random, -/turf/simulated/floor/tiled/dark/airless, -/area/meatstation/cargo) -"pG" = ( -/obj/item/reagent_containers/food/snacks/monkeycube/spidercube, -/turf/simulated/floor/tiled/dark/airless, -/area/meatstation/cargo) -"pH" = ( -/obj/effect/floor_decal/corner/brown/border{ - dir = 8 - }, -/turf/simulated/floor/tiled/dark/airless, -/area/meatstation/cargo) -"pI" = ( -/obj/item/storage/box/lights/tubes/random, -/turf/simulated/floor/airless, -/area/meatstation/cargo) -"pJ" = ( -/obj/effect/floor_decal/corner/brown/border{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark/airless, -/area/meatstation/cargo) -"pK" = ( -/obj/structure/table/rack, -/obj/effect/floor_decal/corner/brown/diagonal, -/turf/simulated/floor/tiled/dark/airless, -/area/meatstation/cargo) -"pL" = ( -/obj/structure/table/rack, -/obj/item/storage/box/glasses/cocktail, -/obj/effect/floor_decal/corner/brown/diagonal, -/turf/simulated/floor/tiled/dark/airless, -/area/meatstation/cargo) -"pM" = ( -/obj/item/storage/box/beakers, -/turf/simulated/floor/tiled/dark/airless, -/area/meatstation/cargo) -"pN" = ( -/obj/item/storage/box, -/turf/simulated/floor/tiled/dark/airless, -/area/meatstation/cargo) -"pO" = ( -/obj/structure/table/rack, -/obj/item/gun/projectile/shotgun/pump{ - starts_loaded = 0 - }, -/obj/machinery/light/small/red{ - dir = 1 - }, -/obj/effect/floor_decal/corner/grey/border{ - dir = 1 - }, -/obj/item/ammo_magazine/shotholder/shell, -/obj/item/ammo_magazine/shotholder/stun, -/obj/item/ammo_casing/shotgun/flash, -/turf/simulated/floor/tiled/dark, -/area/meatstation/armory) -"pP" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 1 - }, -/turf/simulated/floor/tiled/dark, -/area/meatstation/swhallway) -"pQ" = ( -/obj/effect/mine/dnascramble, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 1; - level = 2 - }, -/turf/simulated/floor/tiled/dark, -/area/meatstation/swhallway) -"pR" = ( -/obj/item/storage/box/botanydisk, -/turf/simulated/floor/airless, -/area/meatstation/cargo) -"pS" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/table/glass, -/obj/item/sticky_pad/random, -/obj/item/material/twohanded/fireaxe, -/obj/effect/floor_decal/corner/green/diagonal, -/turf/simulated/floor/tiled/monotile, -/area/meatstation/hydroponics) -"pT" = ( -/obj/machinery/light{ - dir = 4 - }, -/obj/effect/floor_decal/corner/brown/border{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark/airless, -/area/meatstation/cargo) -"pU" = ( -/obj/item/storage/box/canned/tomato, -/turf/simulated/floor/tiled/dark/airless, -/area/meatstation/cargo) -"pV" = ( -/obj/item/storage/box/canned/beef, -/turf/space, -/area/space) -"pW" = ( -/obj/item/storage/box/canned, -/turf/simulated/floor/airless, -/area/meatstation/cargo) -"pX" = ( -/obj/structure/window/reinforced{ - dir = 4 - }, -/obj/structure/disposalpipe/trunk{ - dir = 1 - }, -/obj/structure/disposaloutlet, -/turf/simulated/floor/plating, -/area/meatstation/storage) -"pY" = ( -/obj/item/storage/box/canned, -/turf/space, -/area/space) -"pZ" = ( -/obj/machinery/recharger/wallcharger{ - dir = 4; - pixel_x = -23; - pixel_y = -3 - }, -/obj/random/single/meatstation/low/wormguard, -/obj/effect/floor_decal/corner/grey/border{ - dir = 8 - }, -/obj/item/ammo_casing/shotgun/pellet, -/turf/simulated/floor/tiled/dark, -/area/meatstation/armory) -"qa" = ( -/obj/item/storage/box/condimentbottles, -/turf/space, -/area/space) -"qb" = ( -/obj/item/storage/box/glowsticks, -/turf/simulated/floor/airless, -/area/meatstation/cargo) -"qc" = ( -/obj/item/storage/box/glowsticks, -/turf/space, -/area/space) -"qd" = ( -/obj/item/storage/box/detergent, -/turf/simulated/floor/airless, -/area/meatstation/cargo) -"qe" = ( -/obj/item/storage/box/freezer, -/turf/space, -/area/space) -"qf" = ( -/obj/random/maintenance/clean, -/obj/effect/decal/cleanable/blood/drip, -/obj/effect/floor_decal/corner/brown/diagonal, -/turf/simulated/floor/tiled/dark/airless, -/area/meatstation/cargo) -"qg" = ( -/obj/machinery/light{ - dir = 8 - }, -/obj/effect/floor_decal/corner/brown/border{ - dir = 8 - }, -/turf/simulated/floor/tiled/dark/airless, -/area/meatstation/cargo) -"qh" = ( -/obj/item/storage/box/pillbottles, -/turf/simulated/floor/tiled/dark/airless, -/area/meatstation/cargo) -"qi" = ( -/obj/item/tape_roll, -/turf/simulated/floor/tiled/dark/airless, -/area/meatstation/cargo) -"qj" = ( -/obj/item/tape_roll, -/turf/space, -/area/space) -"qk" = ( -/obj/random/trash, -/obj/structure/cable/cyan{ - d2 = 8; - icon_state = "0-8" - }, -/obj/effect/floor_decal/corner/grey/border{ - dir = 4 - }, -/obj/machinery/power/apc/meatstation{ - dir = 4; - pixel_x = 24 - }, -/turf/simulated/floor/tiled/dark, -/area/meatstation/armory) -"ql" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/item/tape_roll, -/obj/machinery/recharger/wallcharger{ - dir = 4; - pixel_x = -23; - pixel_y = -3 - }, -/turf/simulated/floor/lino, -/area/meatstation/mess) -"qm" = ( -/obj/structure/table/gamblingtable, -/obj/item/tape_roll, -/turf/simulated/floor/lino, -/area/meatstation/mess) -"qn" = ( -/obj/item/surgicaldrill, -/turf/space, -/area/space) -"qo" = ( -/obj/item/towel/random, -/turf/simulated/floor/tiled/dark/airless, -/area/meatstation/cargo) -"qp" = ( -/obj/item/usedcryobag, -/turf/simulated/floor/tiled/dark, -/area/meatstation/medical) -"qq" = ( -/obj/structure/table/glass, -/obj/item/storage/firstaid/surgery, -/obj/item/bodybag/cryobag, -/obj/effect/floor_decal/corner/paleblue/border{ - dir = 10 - }, -/turf/simulated/floor/tiled/dark, -/area/meatstation/medical) -"qr" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/decal/cleanable/blood, -/turf/simulated/floor/tiled/white, -/area/meatstation/lab) -"qs" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 4 - }, -/obj/structure/cable/cyan{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled, -/area/meatstation/centerhallway) -"qt" = ( -/obj/item/storage/backpack/dufflebag, -/turf/simulated/floor/tiled/dark/airless, -/area/meatstation/cargo) -"qu" = ( -/obj/item/shield/riot/metal, -/obj/item/ammo_casing/shotgun/pellet, -/turf/simulated/floor/tiled/dark, -/area/meatstation/armory) -"qv" = ( -/obj/item/storage/backpack/dufflebag, -/turf/space, -/area/space) -"qw" = ( -/obj/item/storage/bag/trash, -/turf/simulated/floor/tiled/dark/airless, -/area/meatstation/cargo) -"qx" = ( -/obj/item/storage/bag/trash, -/turf/space, -/area/space) -"qy" = ( -/obj/machinery/door/airlock/external{ - id_tag = "meatstation_sairlockint"; - locked = 1 - }, -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/plating, -/area/meatstation/storage) -"qz" = ( -/obj/structure/reagent_dispensers/watertank, -/turf/simulated/floor/tiled/dark/airless, -/area/meatstation/cargo) -"qA" = ( -/obj/item/storage/fancy/egg_box, -/turf/space, -/area/space) -"qB" = ( -/obj/machinery/optable, -/obj/effect/floor_decal/corner/paleblue/border, -/turf/simulated/floor/tiled/dark, -/area/meatstation/medical) -"qC" = ( -/obj/effect/floor_decal/corner/brown/diagonal, -/turf/simulated/floor/tiled/dark/airless, -/area/meatstation/cargo) -"qD" = ( -/obj/item/storage/box/lights/tubes/random, -/obj/effect/floor_decal/corner/brown/diagonal, -/turf/simulated/floor/tiled/dark/airless, -/area/meatstation/cargo) -"qE" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 4 - }, -/obj/structure/stasis_cage, -/turf/simulated/floor/tiled/dark/airless, -/area/meatstation/cargo) -"qF" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/stasis_cage, -/turf/simulated/floor/tiled/dark/airless, -/area/meatstation/cargo) -"qG" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/bed/chair{ - dir = 4 - }, -/turf/simulated/floor/lino, -/area/meatstation/mess) -"qH" = ( -/obj/item/storage/backpack/dufflebag, -/obj/effect/floor_decal/corner/brown/diagonal, -/turf/simulated/floor/tiled/dark/airless, -/area/meatstation/cargo) -"qI" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 4 - }, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/structure/cable/cyan{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/structure/bed/chair{ - dir = 8 - }, -/turf/simulated/floor/lino, -/area/meatstation/mess) -"qJ" = ( -/obj/structure/bed/chair{ - dir = 4 - }, -/turf/simulated/floor/lino, -/area/meatstation/mess) -"qK" = ( -/obj/item/ammo_magazine/shotholder/empty, -/turf/simulated/floor/tiled/dark/airless, -/area/meatstation/cargo) -"qL" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/bed/chair{ - dir = 8 - }, -/turf/simulated/floor/lino, -/area/meatstation/mess) -"qM" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/floor_decal/corner/brown/border{ - dir = 1 - }, -/obj/structure/inflatable/wall, -/turf/simulated/floor/tiled/dark/airless, -/area/meatstation/cargo) -"qN" = ( -/obj/item/clothing/accessory/fire_overpants, -/turf/simulated/floor/tiled/dark/airless, -/area/meatstation/cargo) -"qO" = ( -/obj/item/extinguisher, -/turf/simulated/floor/tiled/dark/airless, -/area/meatstation/cargo) -"qP" = ( -/obj/random/maintenance/clean, -/obj/effect/floor_decal/corner/brown/diagonal, -/turf/simulated/floor/tiled/dark/airless, -/area/meatstation/cargo) -"qQ" = ( -/obj/structure/reagent_dispensers/watertank, -/obj/effect/floor_decal/corner/brown/diagonal, -/turf/simulated/floor/tiled/dark/airless, -/area/meatstation/cargo) -"qR" = ( -/obj/item/tape_roll, -/obj/effect/floor_decal/corner/brown/diagonal, -/turf/simulated/floor/tiled/dark/airless, -/area/meatstation/cargo) -"qS" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/closet/crate, -/obj/item/stack/material/rods/fifty, -/obj/item/stack/material/rods/fifty, -/turf/simulated/floor/tiled/dark/airless, -/area/meatstation/cargo) -"qT" = ( -/obj/structure/closet/crate, -/obj/item/stack/material/steel/fifty, -/obj/item/stack/material/steel/fifty, -/turf/simulated/floor/tiled/dark/airless, -/area/meatstation/cargo) -"qU" = ( -/obj/structure/closet/crate, -/obj/item/stack/material/titanium/ten, -/obj/item/stack/material/titanium/ten, -/obj/item/stack/material/marble/fifty, -/obj/item/stack/material/marble/fifty, -/obj/random/single/meatstation/meatball, -/turf/simulated/floor/tiled/dark/airless, -/area/meatstation/cargo) -"qV" = ( -/obj/structure/reagent_dispensers/fueltank, -/turf/simulated/floor/tiled/dark/airless, -/area/meatstation/cargo) -"qW" = ( -/obj/effect/decal/cleanable/blood/drip, -/obj/structure/bed/chair{ - dir = 1 - }, -/turf/simulated/floor/lino, -/area/meatstation/mess) -"qX" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/barricade/spike, -/turf/simulated/floor/tiled, -/area/meatstation/centerhallway) -"qY" = ( -/turf/simulated/floor/airless, -/area/meatstation/centerhallway) -"qZ" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/airless, -/area/meatstation/centerhallway) -"ra" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/inflatable/door, -/turf/simulated/floor/airless, -/area/meatstation/centerhallway) -"rb" = ( -/obj/structure/lattice, -/turf/space, -/area/meatstation/centerhallway) -"rc" = ( -/obj/structure/closet/crate, -/obj/item/stack/material/glass/reinforced/fifty, -/obj/item/stack/material/glass/reinforced/fifty, -/obj/item/grenade/chem_grenade/metalfoam, -/turf/simulated/floor/tiled/dark/airless, -/area/meatstation/cargo) -"rd" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/decal/cleanable/blood/drip, -/obj/effect/floor_decal/industrial/warning{ - dir = 4; - icon_state = "warning" - }, -/turf/simulated/floor/tiled/white, -/area/meatstation/centerhallway) -"re" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/obj/structure/cable/cyan{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/turf/simulated/floor/airless, -/area/meatstation/centerhallway) -"rf" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/airless, -/area/meatstation/centerhallway) -"rg" = ( -/obj/structure/girder, -/turf/simulated/floor/airless, -/area/meatstation/centerhallway) -"rh" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 4; - icon_state = "warning" - }, -/turf/simulated/floor/tiled/white, -/area/meatstation/centerhallway) -"ri" = ( -/obj/structure/inflatable/wall, -/turf/simulated/floor/airless, -/area/meatstation/centerhallway) -"rj" = ( -/obj/effect/decal/cleanable/blood, -/obj/structure/inflatable/wall, -/turf/simulated/floor/tiled/dark/airless, -/area/meatstation/cargo) -"rk" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/inflatable/door, -/turf/simulated/floor/tiled, -/area/meatstation/centerhallway) -"rl" = ( -/obj/random/single/meatstation/meatworm, -/obj/structure/bed/chair, -/turf/simulated/floor/lino, -/area/meatstation/mess) -"rm" = ( -/obj/structure/inflatable/wall, -/turf/simulated/floor/tiled, -/area/meatstation/centerhallway) -"rn" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/inflatable/door, -/turf/simulated/floor/tiled, -/area/meatstation/centerhallway) -"ro" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 8 - }, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/cable/cyan{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/structure/bed/chair{ - dir = 8 - }, -/turf/simulated/floor/lino, -/area/meatstation/mess) -"rp" = ( -/obj/random/single/meatstation/meatworm, -/obj/structure/bed/chair{ - dir = 1 - }, -/turf/simulated/floor/lino, -/area/meatstation/mess) -"rq" = ( -/obj/effect/floor_decal/corner/b_green/bordercorner, -/turf/simulated/floor/tiled/dark/monotile, -/area/meatstation/storage) -"rr" = ( -/obj/structure/window/reinforced{ - dir = 1 - }, -/obj/structure/window/reinforced{ - dir = 8 - }, -/obj/structure/disposalpipe/trunk{ - dir = 8 - }, -/obj/structure/disposaloutlet{ - dir = 4 - }, -/obj/machinery/conveyor{ - dir = 8; - id = "trashconveyor" - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/meatstation/storage) -"rs" = ( -/obj/effect/floor_decal/corner/black/bordercorner, -/turf/simulated/floor/tiled, -/area/meatstation/centerhallway) -"rt" = ( -/obj/random/single/meatstation/meatball, -/turf/simulated/floor/airless, -/area/meatstation/engineering) -"ru" = ( -/obj/structure/closet/emcloset, -/turf/space, -/area/space) -"rv" = ( -/obj/machinery/light/small/red, -/obj/effect/floor_decal/corner/black/border, -/turf/simulated/floor/tiled, -/area/meatstation/centerhallway) -"rw" = ( -/obj/effect/decal/cleanable/blood, -/obj/machinery/light/small/red{ - dir = 4 - }, -/obj/machinery/light/small/red{ - dir = 4 - }, -/obj/effect/floor_decal/corner/black/border{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/meatstation/centerhallway) -"rx" = ( -/obj/effect/decal/cleanable/blood, -/turf/simulated/floor/tiled/white, -/area/meatstation/bathroom) -"ry" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/random/junk, -/turf/simulated/floor/tiled, -/area/meatstation/centerhallway) -"rz" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 4 - }, -/obj/structure/bed/chair{ - dir = 1 - }, -/turf/simulated/floor/lino, -/area/meatstation/mess) -"rA" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/recharger/wallcharger{ - dir = 4; - pixel_x = -23; - pixel_y = -3 - }, -/turf/simulated/floor/lino, -/area/meatstation/mess) -"rB" = ( -/obj/effect/floor_decal/corner/red/border, -/turf/simulated/floor/tiled/white, -/area/meatstation/lab) -"rC" = ( -/obj/random/junk, -/turf/simulated/floor/tiled/dark/airless, -/area/meatstation/cargo) -"rD" = ( -/obj/structure/cable/cyan{ - d2 = 2; - icon_state = "0-2" - }, -/obj/effect/floor_decal/corner/green/border{ - dir = 1 - }, -/obj/machinery/power/apc/meatstation{ - dir = 1; - pixel_y = 24 - }, -/turf/simulated/floor/tiled/monotile, -/area/meatstation/hydroponics) -"rE" = ( -/obj/random/junk, -/turf/simulated/floor/reinforced, -/area/meatstation/lab) -"rF" = ( -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/cable/cyan{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/random/single/meatstation/low/wormscientist, -/turf/simulated/floor/tiled/white, -/area/meatstation/lab) -"rG" = ( -/obj/item/paper, -/obj/effect/floor_decal/corner/red/border, -/turf/simulated/floor/tiled/white, -/area/meatstation/lab) -"rH" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 8 - }, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/random/single/meatstation/wormguard, -/obj/random/junk, -/turf/simulated/floor/tiled/dark/airless, -/area/meatstation/cargo) -"rI" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/random/single/meatstation/low/wormscientist, -/turf/simulated/floor/tiled/white, -/area/meatstation/lab) -"rJ" = ( -/obj/effect/floor_decal/corner/black/border{ - dir = 6 - }, -/turf/simulated/floor/tiled, -/area/meatstation/centerhallway) -"rK" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/decal/cleanable/liquid_fuel, -/turf/simulated/floor/airless, -/area/meatstation/engineering) -"rL" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/random/junk, -/turf/simulated/floor/tiled, -/area/meatstation/centerhallway) -"rM" = ( -/obj/effect/decal/cleanable/liquid_fuel, -/obj/effect/floor_decal/corner/purple/border{ - dir = 4 - }, -/turf/simulated/floor/airless, -/area/meatstation/engineering) -"rN" = ( -/obj/structure/table/rack, -/obj/effect/floor_decal/corner/purple/border{ - dir = 8 - }, -/turf/simulated/floor/airless, -/area/meatstation/engineering) -"rO" = ( -/obj/random/loot, -/turf/simulated/floor/reinforced, -/area/meatstation/lab) -"rP" = ( -/obj/structure/mattress/dirty, -/turf/simulated/floor/reinforced, -/area/meatstation/lab) -"rQ" = ( -/obj/machinery/light, -/obj/effect/floor_decal/corner/brown/border, -/obj/structure/inflatable/wall, -/turf/simulated/floor/tiled/dark/airless, -/area/meatstation/cargo) -"rR" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/mopbucket, -/turf/simulated/floor/tiled/dark/monotile, -/area/meatstation/storage) -"rS" = ( -/obj/effect/shuttle_landmark/nav_meatstation/nav1, -/turf/space, -/area/space) -"rT" = ( -/obj/effect/shuttle_landmark/nav_meatstation/nav5, -/turf/space, -/area/space) -"rU" = ( -/obj/effect/shuttle_landmark/nav_meatstation/nav2, -/turf/space, -/area/space) -"rV" = ( -/obj/effect/shuttle_landmark/nav_meatstation/nav4, -/turf/space, -/area/space) -"rW" = ( -/obj/effect/shuttle_landmark/nav_meatstation/nav3, -/turf/space, -/area/space) -"rX" = ( -/obj/effect/decal/cleanable/liquid_fuel, -/turf/simulated/floor/airless, -/area/meatstation/engineering) -"rY" = ( -/obj/effect/decal/cleanable/blood, -/obj/effect/floor_decal/corner/black/border{ - dir = 9 - }, -/turf/simulated/floor/tiled, -/area/meatstation/centerhallway) -"rZ" = ( -/obj/effect/decal/cleanable/blood, -/turf/simulated/floor/reinforced, -/area/meatstation/lab) -"sa" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/cable/cyan{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/effect/decal/cleanable/vomit, -/turf/simulated/floor/tiled, -/area/meatstation/centerhallway) -"sb" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 1; - icon_state = "warning" - }, -/turf/simulated/floor/reinforced, -/area/meatstation/lab) -"sc" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 1; - level = 2 - }, -/obj/effect/floor_decal/corner/red/border, -/turf/simulated/floor/tiled/white, -/area/meatstation/lab) -"sd" = ( -/obj/random/single/meatstation/low/wormguard, -/turf/simulated/floor/tiled/white, -/area/meatstation/lab) -"se" = ( -/obj/structure/barricade/spike, -/obj/effect/floor_decal/corner/black/border{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/meatstation/centerhallway) -"sf" = ( -/obj/effect/decal/cleanable/filth, -/turf/simulated/floor/reinforced, -/area/meatstation/lab) -"sg" = ( -/obj/machinery/light{ - dir = 1 - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 1; - icon_state = "warning" - }, -/turf/simulated/floor/reinforced, -/area/meatstation/lab) -"sh" = ( -/obj/effect/floor_decal/corner/black/border, -/obj/random/single/meatstation/low/wormguard, -/turf/simulated/floor/tiled, -/area/meatstation/centerhallway) -"si" = ( -/obj/effect/decal/cleanable/cobweb2, -/obj/effect/floor_decal/industrial/warning{ - dir = 5 - }, -/turf/simulated/floor/reinforced, -/area/meatstation/lab) -"sj" = ( -/obj/effect/decal/cleanable/molten_item, -/turf/simulated/floor/reinforced, -/area/meatstation/lab) -"sk" = ( -/obj/effect/decal/cleanable/blood, -/obj/machinery/light, -/obj/effect/floor_decal/corner/red/border, -/turf/simulated/floor/tiled/white, -/area/meatstation/lab) -"sl" = ( -/obj/random/single/meatstation/meatworm, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/reinforced, -/area/meatstation/lab) -"sm" = ( -/obj/structure/mattress/dirty, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/reinforced, -/area/meatstation/lab) -"sn" = ( -/obj/random/single/meatstation/low/wormguard, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/reinforced, -/area/meatstation/lab) -"so" = ( -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/effect/floor_decal/corner/red/bordercorner{ - dir = 8 - }, -/turf/simulated/floor/tiled/white, -/area/meatstation/lab) -"sp" = ( -/obj/effect/decal/cleanable/blood, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/reinforced, -/area/meatstation/lab) -"sq" = ( -/obj/effect/decal/cleanable/blood, -/obj/random/single/meatstation/low/wormscientist, -/turf/simulated/floor/tiled/white, -/area/meatstation/lab) -"sr" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/effect/decal/cleanable/blood, -/turf/simulated/floor/tiled, -/area/meatstation/centerhallway) -"ss" = ( -/obj/item/paper, -/obj/item/paper, -/obj/item/paper, -/obj/effect/decal/cleanable/blood, -/turf/simulated/floor/tiled/monotile, -/area/meatstation/hydroponics) -"st" = ( -/obj/effect/decal/cleanable/blood, -/turf/simulated/floor/tiled/monotile, -/area/meatstation/hydroponics) -"su" = ( -/obj/effect/decal/cleanable/blood, -/obj/effect/decal/cleanable/blood, -/turf/simulated/floor/tiled/dark/monotile, -/area/meatstation/storage) -"sv" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/decal/cleanable/blood, -/turf/simulated/floor/tiled/monotile, -/area/meatstation/hydroponics) -"sw" = ( -/obj/item/stack/material/rods, -/obj/machinery/recharger/wallcharger{ - dir = 1; - pixel_y = -22 - }, -/obj/effect/decal/cleanable/blood, -/turf/simulated/floor/tiled/monotile, -/area/meatstation/hydroponics) -"sx" = ( -/obj/item/storage/box/large/foam_gun/revolver, -/obj/effect/floor_decal/corner/brown/diagonal, -/turf/simulated/floor/tiled/dark/airless, -/area/meatstation/cargo) -"sy" = ( -/obj/effect/decal/cleanable/blood/drip, -/obj/effect/decal/cleanable/blood/splatter, -/turf/simulated/floor/airless, -/area/meatstation/cargo) -"sz" = ( -/obj/structure/grille/broken, -/turf/simulated/floor/plating, -/area/meatstation/hydroponics) -"sA" = ( -/obj/effect/mine, -/turf/simulated/floor/tiled/dark, -/area/meatstation/swhallway) -"sB" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/effect/mine/dnascramble, -/obj/effect/decal/cleanable/blood/drip, -/turf/simulated/floor/tiled/dark, -/area/meatstation/swhallway) -"sC" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/mine/dnascramble, -/obj/random/trash, -/turf/simulated/floor/tiled/dark, -/area/meatstation/swhallway) -"sD" = ( -/obj/machinery/door/airlock{ - stripe_color = "#aab1c1" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/decal/cleanable/blood/drip, -/turf/simulated/floor/tiled/dark, -/area/meatstation/medical) -"sE" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/mine, -/obj/random/junk, -/turf/simulated/floor/tiled/dark, -/area/meatstation/swhallway) -"sF" = ( -/obj/effect/decal/cleanable/blood/drip, -/obj/effect/decal/cleanable/blood, -/turf/simulated/floor/tiled/dark, -/area/meatstation/medical) -"sG" = ( -/obj/effect/decal/cleanable/dirt, -/obj/random/single/meatstation/low/wormscientist, -/turf/simulated/floor/reinforced, -/area/meatstation/lab) -"sH" = ( -/obj/random/trash, -/obj/effect/decal/cleanable/blood, -/turf/simulated/floor/tiled/monotile, -/area/meatstation/hydroponics) -"sI" = ( -/obj/random/single/meatstation/low/wormguard, -/turf/simulated/floor/tiled/dark/airless, -/area/meatstation/cargo) -"sJ" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/mine, -/turf/simulated/floor/tiled/dark, -/area/meatstation/swhallway) -"sK" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/effect/decal/cleanable/blood, -/turf/simulated/floor/tiled, -/area/meatstation/nwhallway) -"sL" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 8 - }, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/cable/cyan{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/effect/decal/cleanable/blood, -/turf/simulated/floor/tiled, -/area/meatstation/centerhallway) -"sM" = ( -/obj/random/closet, -/obj/random/single/meatstation/meatball, -/turf/space, -/area/space) -"sN" = ( -/obj/random/single/meatstation/meatball, -/obj/machinery/light/small/red{ - dir = 4 - }, -/obj/effect/floor_decal/corner/black/border{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/meatstation/centerhallway) -"sO" = ( -/obj/random/single/meatstation/low/wormscientist, -/turf/simulated/floor/airless, -/area/meatstation/dorm) -"sP" = ( -/obj/structure/closet/firecloset, -/obj/effect/floor_decal/corner/black/border{ - dir = 10 - }, -/obj/random/single/meatstation/meatball, -/turf/simulated/floor/tiled, -/area/meatstation/centerhallway) -"sQ" = ( -/obj/item/usedcryobag, -/obj/random/single/meatstation/wormscientist, -/turf/simulated/floor/tiled/dark, -/area/meatstation/medical) -"sR" = ( -/obj/item/reagent_containers/glass/beaker/vial/random/toxin, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 4 - }, -/obj/random/single/meatstation/wormscientist, -/turf/simulated/floor/tiled/dark, -/area/meatstation/medical) -"sS" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/random/junk, -/turf/simulated/floor/tiled/dark, -/area/meatstation/medical) -"sT" = ( -/obj/effect/decal/cleanable/blood, -/obj/random/single/meatstation/wormscientist, -/turf/simulated/floor/tiled/dark, -/area/meatstation/medical) -"sU" = ( -/obj/structure/table/glass, -/obj/item/storage/firstaid/adv, -/obj/effect/floor_decal/corner/paleblue/border, -/turf/simulated/floor/tiled/dark, -/area/meatstation/medical) -"sV" = ( -/obj/item/material/shard, -/obj/random/trash, -/obj/effect/decal/cleanable/blood, -/turf/simulated/floor/tiled/dark, -/area/meatstation/medical) -"sW" = ( -/obj/random/single/meatstation/low/wormguard, -/turf/space, -/area/space) -"sX" = ( -/obj/structure/hygiene/toilet{ - dir = 8 - }, -/obj/effect/decal/cleanable/blood, -/obj/random/single/meatstation/wormscientist, -/obj/machinery/light/small/red{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/meatstation/bathroom) -"sY" = ( -/obj/structure/hygiene/sink{ - dir = 8; - pixel_x = -12; - pixel_y = 2 - }, -/obj/effect/decal/cleanable/blood/drip, -/turf/simulated/floor/tiled/white, -/area/meatstation/bathroom) -"sZ" = ( -/obj/random/single/meatstation/low/wormscientist, -/turf/simulated/floor/lino, -/area/meatstation/mess) -"ta" = ( -/obj/random/single/meatstation/meatworm, -/turf/simulated/floor/tiled/white, -/area/meatstation/bathroom) -"tb" = ( -/obj/machinery/conveyor{ - dir = 8; - id = "trashconveyor" - }, -/obj/structure/window/reinforced{ - dir = 1 - }, -/obj/random/junk, -/obj/random/junk, -/obj/random/junk, -/obj/random/trash, -/obj/machinery/light, -/obj/random/single/meatstation/meatmound, -/turf/simulated/floor/tiled/dark/monotile, -/area/meatstation/storage) -"tc" = ( -/obj/random/single/meatstation/meatworm, -/turf/simulated/floor/tiled/dark/airless, -/area/meatstation/kitchen) -"td" = ( -/obj/random/single/meatstation/meatworm, -/turf/simulated/floor/airless/ceiling, -/area/meatstation/kitchen) -"te" = ( -/obj/structure/table/glass, -/obj/item/storage/box/botanydisk, -/obj/effect/floor_decal/corner/green/diagonal, -/turf/simulated/floor/tiled/monotile, -/area/meatstation/hydroponics) -"tf" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/random/single/meatstation/meatworm, -/turf/simulated/floor/tiled/dark/airless, -/area/meatstation/kitchen) -"tg" = ( -/obj/structure/table/glass, -/obj/item/paper, -/obj/item/toy/therapy_blue, -/obj/random/junk, -/obj/effect/floor_decal/corner/green/diagonal, -/turf/simulated/floor/tiled/monotile, -/area/meatstation/hydroponics) -"th" = ( -/obj/random/single/meatstation/low/wormguard, -/turf/simulated/floor/lino, -/area/meatstation/mess) -"ti" = ( -/obj/item/material/shard, -/obj/structure/grille/broken, -/turf/simulated/floor/plating, -/area/meatstation/storage) -"tj" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/decal/cleanable/blood/drip, -/turf/simulated/floor/tiled/white, -/area/meatstation/lab) -"tk" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/random/single/meatstation/wormscientist, -/turf/simulated/floor/tiled/monotile, -/area/meatstation/hydroponics) -"tl" = ( -/obj/random/single/meatstation/low/wormguard, -/turf/simulated/floor/exoplanet/grass, -/area/meatstation/hydroponics) -"tm" = ( -/obj/structure/flora/ausbushes/ywflowers, -/obj/random/single/meatstation/low/wormguard, -/turf/simulated/floor/exoplanet/grass, -/area/meatstation/hydroponics) -"tn" = ( -/obj/random/single/meatstation/meatworm, -/turf/simulated/floor/tiled/monotile, -/area/meatstation/hydroponics) -"to" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/effect/decal/cleanable/filth, -/turf/simulated/floor/lino, -/area/meatstation/mess) -"tp" = ( -/obj/random/single/meatstation/meatworm, -/turf/simulated/floor/tiled/dark/monotile, -/area/meatstation/storage) -"tq" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/random/single/meatstation/meatworm, -/turf/simulated/floor/tiled/dark/monotile, -/area/meatstation/storage) -"tr" = ( -/obj/machinery/button/alternate/door/bolts{ - id_tag = "meatstation_dock2"; - name = "exterior airlock bolt control"; - pixel_x = -6; - pixel_y = 30 - }, -/obj/machinery/button/alternate/door{ - id_tag = "meatstation_dock2"; - name = "exterior airlock control"; - pixel_x = 6; - pixel_y = 30 - }, -/obj/effect/decal/cleanable/blood/drip, -/turf/simulated/floor/tiled/dark, -/area/meatstation/cargo) -"ts" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/random/single/meatstation/meatworm, -/turf/simulated/floor/tiled, -/area/meatstation/nwhallway) -"tt" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/item/remains/human, -/obj/machinery/light/small/red{ - dir = 1 - }, -/turf/simulated/floor/tiled/dark, -/area/meatstation/swhallway) -"tu" = ( -/obj/random/single/meatstation/meatball, -/turf/simulated/floor/tiled, -/area/meatstation/nwhallway) -"tv" = ( -/obj/effect/floor_decal/corner/black/border{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/meatstation/centerhallway) -"tw" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 8 - }, -/obj/effect/decal/cleanable/blood, -/obj/effect/decal/cleanable/blood/drip, -/obj/effect/floor_decal/corner/black/border{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/meatstation/centerhallway) -"tx" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/random/single/meatstation/low/wormscientist, -/turf/simulated/floor/tiled, -/area/meatstation/centerhallway) -"ty" = ( -/obj/structure/bed/chair/office/comfy/black, -/obj/random/single/meatstation/low/wormscientist, -/turf/simulated/floor/carpet/red, -/area/meatstation/cargooffice) -"tz" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/random/single/meatstation/low/wormscientist, -/obj/effect/decal/cleanable/blood/drip, -/obj/effect/decal/cleanable/blood, -/turf/simulated/floor/tiled/white, -/area/meatstation/lab) -"tA" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 1 - }, -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/random/single/meatstation/low/wormscientist, -/turf/simulated/floor/tiled/white, -/area/meatstation/centerhallway) -"tB" = ( -/obj/structure/hygiene/shower{ - dir = 1 - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 10; - icon_state = "warning" - }, -/turf/simulated/floor/tiled/white, -/area/meatstation/centerhallway) -"tC" = ( -/obj/effect/decal/cleanable/blood/drip, -/obj/random/single/meatstation/low/wormscientist, -/turf/simulated/floor/tiled/dark/airless, -/area/meatstation/cargo) -"tD" = ( -/obj/random/junk, -/obj/random/single/meatstation/low/wormscientist, -/turf/simulated/floor/tiled/dark/monotile, -/area/meatstation/storage) -"tE" = ( -/obj/item/remains/human, -/turf/simulated/floor/tiled, -/area/meatstation/nwhallway) -"tF" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/random/single/meatstation/meatworm, -/obj/effect/decal/cleanable/blood, -/turf/simulated/floor/tiled, -/area/meatstation/nwhallway) -"tG" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/decal/cleanable/blood, -/turf/simulated/floor/tiled, -/area/meatstation/centerhallway) -"tH" = ( -/obj/effect/decal/cleanable/blood, -/turf/simulated/floor/tiled, -/area/meatstation/nwhallway) -"tI" = ( -/obj/effect/decal/cleanable/dirt, -/obj/item/remains/human, -/turf/simulated/floor/reinforced, -/area/meatstation/lab) -"tJ" = ( -/obj/effect/decal/cleanable/blood, -/turf/simulated/floor/lino, -/area/meatstation/mess) -"tK" = ( -/obj/effect/decal/cleanable/cobweb, -/obj/effect/floor_decal/industrial/warning{ - dir = 9; - icon_state = "warning" - }, -/turf/simulated/floor/reinforced, -/area/meatstation/lab) -"tL" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/effect/decal/cleanable/blood/drip, -/obj/effect/decal/cleanable/blood, -/turf/simulated/floor/tiled/dark/airless, -/area/meatstation/cargo) -"tM" = ( -/obj/machinery/button/alternate/door/bolts{ - id_tag = "meatstation_dock"; - name = "interior airlock bolt control"; - pixel_x = -6; - pixel_y = 30 - }, -/obj/machinery/button/alternate/door{ - id_tag = "meatstation_dock"; - name = "interior airlock control"; - pixel_x = 6; - pixel_y = 30 - }, -/obj/effect/decal/cleanable/blood, -/turf/simulated/floor/tiled/dark/airless, -/area/meatstation/cargo) -"tN" = ( -/obj/effect/decal/cleanable/blood, -/turf/simulated/floor/tiled/dark/airless, -/area/meatstation/kitchen) -"tO" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/random/single/meatstation/meatball, -/obj/effect/decal/cleanable/blood, -/turf/simulated/floor/tiled, -/area/meatstation/centerhallway) -"tP" = ( -/obj/effect/decal/cleanable/blood/drip, -/turf/simulated/floor/tiled/dark, -/area/meatstation/cargo) -"tQ" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/decal/cleanable/blood, -/turf/simulated/floor/tiled/dark/monotile, -/area/meatstation/storage) -"tR" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/dark, -/area/meatstation/swhallway) -"tS" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 - }, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/random/single/meatstation/low/wormscientist, -/obj/effect/decal/cleanable/blood, -/turf/simulated/floor/tiled/dark, -/area/meatstation/armory) -"tT" = ( -/obj/item/material/shard, -/obj/effect/decal/cleanable/blood/drip, -/obj/structure/grille/broken, -/obj/structure/inflatable/wall, -/turf/simulated/floor/plating, -/area/meatstation/cargo) -"tU" = ( -/obj/structure/table/glass, -/turf/simulated/floor/tiled/white, -/area/meatstation/lab) -"tV" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/random/single/meatstation/low/wormguard, -/turf/simulated/floor/tiled, -/area/meatstation/centerhallway) -"tW" = ( -/obj/effect/decal/cleanable/filth, -/obj/effect/floor_decal/corner/black/border{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/meatstation/centerhallway) -"tX" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/random/single/meatstation/low/wormguard, -/turf/simulated/floor/tiled/dark, -/area/meatstation/medical) -"tY" = ( -/obj/random/single/meatstation/low/wormguard, -/turf/simulated/floor/tiled/monotile, -/area/meatstation/hydroponics) -"tZ" = ( -/obj/random/trash, -/obj/machinery/light/small/red, -/obj/effect/floor_decal/corner/grey/border, -/turf/simulated/floor/tiled/dark, -/area/meatstation/armory) -"ua" = ( -/obj/random/single/meatstation/low/biocell, -/turf/space, -/area/space) -"ub" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/obj/structure/cable/cyan{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/effect/floor_decal/corner/black/bordercorner{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/meatstation/centerhallway) -"uc" = ( -/obj/structure/bed/roller, -/obj/effect/floor_decal/corner/black/border{ - dir = 1 - }, -/turf/simulated/floor/tiled, -/area/meatstation/centerhallway) -"ud" = ( -/obj/random/single/meatstation/wormscientist, -/obj/effect/floor_decal/corner/black/border{ - dir = 1 - }, -/turf/simulated/floor/tiled, -/area/meatstation/centerhallway) -"ue" = ( -/obj/random/junk, -/obj/effect/floor_decal/corner/black/border{ - dir = 1 - }, -/turf/simulated/floor/tiled, -/area/meatstation/centerhallway) -"uf" = ( -/obj/machinery/atmospherics/unary/vent_pump/on, -/obj/effect/floor_decal/corner/black/border{ - dir = 1 - }, -/turf/simulated/floor/tiled, -/area/meatstation/centerhallway) -"ug" = ( -/obj/random/junk, -/obj/machinery/light/small/red{ - dir = 1 - }, -/obj/effect/floor_decal/corner/black/border{ - dir = 1 - }, -/turf/simulated/floor/tiled, -/area/meatstation/centerhallway) -"uh" = ( -/obj/effect/floor_decal/corner/black/bordercorner{ - dir = 1 - }, -/turf/simulated/floor/tiled, -/area/meatstation/centerhallway) -"ui" = ( -/obj/effect/decal/cleanable/blood, -/turf/simulated/floor/tiled/dark, -/area/meatstation/cargo) -"uj" = ( -/obj/structure/table/rack, -/obj/random/single/meatstation/laser, -/obj/effect/floor_decal/corner/grey/border, -/turf/simulated/floor/tiled/dark, -/area/meatstation/armory) -"uk" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/closet/firecloset, -/turf/simulated/floor/tiled, -/area/meatstation/centerhallway) -"ul" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/effect/decal/cleanable/filth, -/turf/simulated/floor/tiled, -/area/meatstation/centerhallway) -"um" = ( -/obj/effect/floor_decal/corner/black/border{ - dir = 4 - }, -/obj/random/single/meatstation/meatworm, -/turf/simulated/floor/tiled, -/area/meatstation/centerhallway) -"un" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 8 - }, -/obj/effect/floor_decal/corner/black/border{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/meatstation/centerhallway) -"uo" = ( -/obj/item/clothing/accessory/badge/press, -/turf/space, -/area/space) -"up" = ( -/obj/structure/table/rack, -/obj/random/voidhelmet, -/obj/random/voidsuit, -/obj/random/tank, -/obj/random/masks, -/obj/effect/floor_decal/corner/grey/border{ - dir = 5 - }, -/turf/simulated/floor/tiled/dark, -/area/meatstation/armory) -"uq" = ( -/obj/effect/floor_decal/corner/paleblue/border{ - dir = 6 - }, -/turf/simulated/floor/tiled/dark, -/area/meatstation/medical) -"ur" = ( -/obj/structure/lattice, -/obj/structure/inflatable/wall, -/turf/space, -/area/space) -"us" = ( -/obj/item/clothing/under/carp, -/turf/space, -/area/space) -"ut" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/effect/decal/cleanable/blood, -/obj/random/single/meatstation/meatworm, -/turf/simulated/floor/tiled, -/area/meatstation/centerhallway) -"uu" = ( -/obj/item/clothing/under/wetsuit, -/turf/space, -/area/space) -"uv" = ( -/obj/machinery/recharger/wallcharger{ - dir = 1; - pixel_y = -24 - }, -/obj/effect/floor_decal/corner/purple/border, -/obj/effect/floor_decal/industrial/hatch/yellow, -/turf/simulated/floor/airless, -/area/meatstation/engineering) -"uw" = ( -/obj/machinery/vending/lavatory, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/floor/tiled/white, -/area/meatstation/bathroom) -"ux" = ( -/obj/effect/decal/cleanable/blood, -/obj/effect/floor_decal/corner/black/border{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/meatstation/centerhallway) -"uy" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/inflatable/door, -/turf/simulated/floor/tiled/dark/airless, -/area/meatstation/kitchen) -"uz" = ( -/obj/structure/inflatable/wall, -/turf/space, -/area/space) -"uA" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 8 - }, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/effect/decal/cleanable/blood, -/turf/simulated/floor/tiled/dark/airless, -/area/meatstation/cargo) -"uB" = ( -/obj/effect/decal/cleanable/blood, -/turf/simulated/floor/tiled/white, -/area/meatstation/lab) -"uC" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/effect/decal/cleanable/blood, -/turf/simulated/floor/tiled/dark/airless, -/area/meatstation/cargo) -"uD" = ( -/obj/structure/cable/cyan{ - d2 = 2; - dir = 1; - icon_state = "0-2" - }, -/obj/machinery/power/apc/meatstation{ - pixel_y = -28 - }, -/turf/simulated/floor/tiled/dark, -/area/meatstation/swhallway) -"uE" = ( -/obj/machinery/light{ - dir = 1 - }, -/obj/effect/floor_decal/corner/brown/border{ - dir = 1 - }, -/obj/effect/floor_decal/industrial/hatch/yellow, -/turf/simulated/floor/tiled/dark/airless, -/area/meatstation/cargo) -"uF" = ( -/obj/item/storage/box/monkeycubes/farwacubes, -/obj/effect/floor_decal/corner/brown/diagonal, -/turf/simulated/floor/tiled/dark/airless, -/area/meatstation/cargo) -"uG" = ( -/obj/structure/table/rack, -/obj/item/storage/box/monkeycubes, -/obj/item/storage/box/lights/bulbs, -/obj/effect/floor_decal/corner/brown/diagonal, -/turf/simulated/floor/tiled/dark/airless, -/area/meatstation/cargo) -"uH" = ( -/obj/structure/table/rack, -/obj/item/storage/box/canned/beans, -/obj/effect/floor_decal/corner/brown/diagonal, -/turf/simulated/floor/tiled/dark/airless, -/area/meatstation/cargo) -"uI" = ( -/obj/structure/table/rack, -/obj/random/trash, -/obj/item/clothing/accessory/arm_guards/riot, -/obj/item/clothing/accessory/leg_guards/riot, -/obj/item/shield/riot, -/obj/effect/floor_decal/corner/grey/border{ - dir = 1 - }, -/obj/item/tape_roll, -/turf/simulated/floor/tiled/dark, -/area/meatstation/armory) -"uJ" = ( -/obj/item/storage/box/glasses, -/obj/effect/floor_decal/corner/brown/border{ - dir = 8 - }, -/turf/simulated/floor/tiled/dark/airless, -/area/meatstation/cargo) -"uK" = ( -/obj/structure/table/rack, -/obj/item/storage/box/lights/tubes/random, -/obj/effect/floor_decal/corner/brown/diagonal, -/turf/simulated/floor/tiled/dark/airless, -/area/meatstation/cargo) -"uL" = ( -/obj/effect/floor_decal/corner/brown/border{ - dir = 5 - }, -/obj/effect/floor_decal/industrial/hatch/yellow, -/turf/simulated/floor/tiled/dark/airless, -/area/meatstation/cargo) -"uM" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/effect/decal/cleanable/blood/drip, -/turf/simulated/floor/tiled, -/area/meatstation/centerhallway) -"uN" = ( -/obj/structure/closet/crate/trashcart, -/obj/item/reagent_containers/spray/cleaner, -/obj/random/junk, -/obj/random/junk, -/obj/item/storage/bag/trash, -/obj/effect/floor_decal/corner/b_green/border, -/obj/item/tape_roll, -/turf/simulated/floor/tiled/dark/monotile, -/area/meatstation/storage) -"uO" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/random/single/meatstation/meatball, -/obj/effect/decal/cleanable/blood/drip, -/turf/simulated/floor/tiled, -/area/meatstation/centerhallway) -"uP" = ( -/obj/effect/floor_decal/corner/lightgrey/border{ - dir = 8 - }, -/turf/simulated/floor/lino, -/area/meatstation/mess) -"uQ" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/random/single/meatstation/meatworm, -/obj/effect/decal/cleanable/blood/drip, -/turf/simulated/floor/tiled, -/area/meatstation/centerhallway) -"uR" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/decal/cleanable/blood/drip, -/turf/simulated/floor/tiled/white, -/area/meatstation/bathroom) -"uS" = ( -/obj/machinery/light{ - dir = 4 - }, -/obj/effect/floor_decal/corner/lightgrey/border{ - dir = 4 - }, -/turf/simulated/floor/lino, -/area/meatstation/mess) -"uT" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/decal/cleanable/blood/drip, -/turf/simulated/floor/tiled, -/area/meatstation/centerhallway) -"uU" = ( -/obj/machinery/light{ - dir = 8 - }, -/obj/effect/decal/cleanable/filth, -/turf/simulated/floor/tiled/white, -/area/meatstation/bathroom) -"uV" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 1; - level = 2 - }, -/obj/random/single/meatstation/low/wormscientist, -/obj/effect/floor_decal/industrial/warning, -/turf/simulated/floor/tiled/white, -/area/meatstation/centerhallway) -"uW" = ( -/obj/effect/floor_decal/industrial/hatch/yellow, -/turf/simulated/floor/tiled/dark/airless, -/area/meatstation/cargo) -"uX" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/random/junk, -/obj/effect/decal/cleanable/blood/drip, -/turf/simulated/floor/tiled, -/area/meatstation/centerhallway) -"uY" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply, -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/decal/cleanable/blood/drip, -/turf/simulated/floor/tiled, -/area/meatstation/centerhallway) -"uZ" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/random/single/meatstation/meatworm, -/obj/effect/decal/cleanable/blood/drip, -/turf/simulated/floor/tiled, -/area/meatstation/centerhallway) -"va" = ( -/obj/item/storage/bag/trash, -/obj/effect/decal/cleanable/blood/drip, -/turf/simulated/floor/tiled/dark/monotile, -/area/meatstation/storage) -"vb" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/item/material/shard, -/obj/effect/decal/cleanable/blood/drip, -/turf/simulated/floor/tiled/monotile, -/area/meatstation/hydroponics) -"vc" = ( -/obj/random/trash, -/obj/structure/barricade/spike{ - dir = 8 - }, -/obj/effect/floor_decal/corner/green/border{ - dir = 4 - }, -/turf/simulated/floor/tiled/monotile, -/area/meatstation/hydroponics) -"vd" = ( -/obj/random/trash, -/obj/effect/decal/cleanable/blood/drip, -/turf/simulated/floor/tiled/monotile, -/area/meatstation/hydroponics) -"ve" = ( -/obj/effect/decal/cleanable/blood/drip, -/turf/simulated/floor/tiled/white, -/area/meatstation/lab) -"vf" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 5 - }, -/turf/simulated/floor/reinforced, -/area/meatstation/lab) -"vg" = ( -/obj/structure/stasis_cage, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/blood/drip, -/turf/simulated/floor/reinforced, -/area/meatstation/lab) -"vh" = ( -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/floor_decal/corner/red/border{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/meatstation/lab) -"vi" = ( -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/effect/decal/cleanable/blood/drip, -/turf/simulated/floor/tiled/white, -/area/meatstation/lab) -"vj" = ( -/obj/structure/closet/crate/secure/biohazard{ - req_access = null - }, -/obj/effect/decal/cleanable/blood/drip, -/turf/simulated/floor/tiled/white, -/area/meatstation/lab) -"vk" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/door/airlock/vault/bolted{ - id_tag = "meatstation_eastlabint"; - locked = 0; - name = "Secure Airlock"; - welded = 1 - }, -/turf/simulated/floor/tiled/white, -/area/meatstation/lab) -"vl" = ( -/obj/random/single/meatstation/meatworm, -/obj/effect/decal/cleanable/blood/drip, -/turf/simulated/floor/reinforced, -/area/meatstation/lab) -"vm" = ( -/obj/random/single/meatstation/low/wormscientist, -/obj/effect/decal/cleanable/blood/drip, -/turf/simulated/floor/tiled/white, -/area/meatstation/lab) -"vn" = ( -/obj/machinery/light/small/red{ - dir = 1 - }, -/turf/simulated/floor/tiled, -/area/meatstation/nwhallway) -"vo" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/light/small/red{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/meatstation/nwhallway) -"vp" = ( -/obj/structure/table/rack, -/obj/random/ammo, -/obj/random/ammo, -/obj/random/ammo, -/obj/item/ammo_magazine/shotholder/flash, -/obj/effect/floor_decal/corner/grey/border{ - dir = 8 - }, -/obj/item/ammo_magazine/shotholder/empty, -/obj/item/ammo_casing/shotgun/pellet, -/obj/item/ammo_casing/shotgun/pellet, -/obj/item/ammo_magazine/shotholder/shell, -/turf/simulated/floor/tiled/dark, -/area/meatstation/armory) -"vq" = ( -/obj/machinery/light{ - dir = 4 - }, -/obj/effect/floor_decal/corner/purple/border{ - dir = 4 - }, -/turf/simulated/floor/airless, -/area/meatstation/engineering) -"vr" = ( -/obj/effect/floor_decal/corner/purple/border{ - dir = 4 - }, -/turf/simulated/floor/airless, -/area/meatstation/engineering) -"vs" = ( -/obj/effect/floor_decal/corner/purple/border{ - dir = 8 - }, -/turf/simulated/floor/airless, -/area/meatstation/engineering) -"vt" = ( -/obj/structure/table/rack, -/obj/effect/floor_decal/corner/purple/border{ - dir = 10 - }, -/turf/simulated/floor/airless, -/area/meatstation/engineering) -"vu" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/light/small/red, -/turf/simulated/floor/airless, -/area/meatstation/engineering) -"vv" = ( -/obj/structure/table/rack, -/obj/item/storage/box/lights/bulbs, -/obj/random/maintenance/clean, -/obj/effect/floor_decal/corner/brown/diagonal, -/turf/simulated/floor/tiled/dark/airless, -/area/meatstation/cargo) -"vw" = ( -/obj/machinery/light{ - dir = 8 - }, -/obj/effect/floor_decal/corner/lightgrey/border{ - dir = 8 - }, -/obj/structure/barricade/spike, -/turf/simulated/floor/lino, -/area/meatstation/mess) -"vx" = ( -/obj/structure/table/woodentable/ebony, -/obj/machinery/light/small/red{ - dir = 1 - }, -/turf/simulated/floor/carpet/blue, -/area/meatstation/dorm) -"vy" = ( -/obj/structure/table/woodentable/ebony, -/obj/machinery/light/small/red{ - dir = 1 - }, -/turf/simulated/floor/carpet/blue3, -/area/meatstation/dorm) -"vz" = ( -/obj/structure/barricade/spike, -/turf/simulated/floor/lino, -/area/meatstation/mess) -"vA" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/barricade/spike, -/turf/simulated/floor/lino, -/area/meatstation/mess) -"vB" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 4; - icon_state = "warning" - }, -/turf/simulated/floor/reinforced, -/area/meatstation/lab) -"vC" = ( -/obj/effect/floor_decal/corner/lightgrey/border{ - dir = 4 - }, -/obj/structure/barricade/spike, -/turf/simulated/floor/lino, -/area/meatstation/mess) -"vD" = ( -/obj/machinery/light/small/red, -/turf/simulated/floor/carpet/blue, -/area/meatstation/dorm) -"vE" = ( -/obj/machinery/light/small/red, -/turf/simulated/floor/carpet/blue2, -/area/meatstation/dorm) -"vF" = ( -/obj/machinery/light/small/red, -/turf/simulated/floor/carpet/blue3, -/area/meatstation/dorm) -"vG" = ( -/obj/structure/inflatable/wall, -/turf/simulated/floor/plating, -/area/meatstation/dorm) -"vH" = ( -/obj/machinery/light/small/red{ - dir = 4 - }, -/turf/simulated/floor/lino, -/area/meatstation/mess) -"vI" = ( -/obj/machinery/light{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/meatstation/bathroom) -"vJ" = ( -/obj/machinery/light{ - dir = 8 - }, -/turf/simulated/floor/tiled/white, -/area/meatstation/bathroom) -"vK" = ( -/obj/item/storage/mirror{ - dir = 4; - pixel_x = -32 - }, -/obj/machinery/light{ - dir = 8 - }, -/turf/simulated/floor/tiled/white, -/area/meatstation/bathroom) -"vL" = ( -/obj/structure/table/rack/dark, -/obj/structure/window/reinforced{ - dir = 4 - }, -/obj/machinery/door/window/northleft, -/obj/machinery/light/small/red, -/obj/item/cell/infinite/meatstation, -/obj/random/single/meatstation/meatball, -/turf/simulated/floor/tiled/white, -/area/meatstation/lab) -"vM" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 - }, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/structure/cable/cyan{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 4; - icon_state = "warning" - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/meatstation/storage) -"vN" = ( -/obj/random/single/meatstation/low/wormscientist, -/obj/effect/floor_decal/corner/lightgrey/border{ - dir = 4 - }, -/turf/simulated/floor/lino, -/area/meatstation/mess) -"vO" = ( -/obj/random/single/meatstation/low/wormscientist, -/obj/machinery/light{ - dir = 8 - }, -/obj/effect/floor_decal/corner/lightgrey/border{ - dir = 8 - }, -/turf/simulated/floor/lino, -/area/meatstation/mess) -"vP" = ( -/obj/item/material/kitchen/utensil/spork, -/obj/effect/floor_decal/corner/lightgrey/border{ - dir = 4 - }, -/turf/simulated/floor/lino, -/area/meatstation/mess) -"vQ" = ( -/obj/effect/floor_decal/corner/black/border{ - dir = 8 - }, -/obj/random/single/meatstation/meatworm, -/turf/simulated/floor/tiled, -/area/meatstation/centerhallway) -"vR" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 4 - }, -/obj/effect/floor_decal/corner/lime/border{ - dir = 8 - }, -/turf/simulated/floor/tiled/dark/airless, -/area/meatstation/kitchen) -"vS" = ( -/obj/effect/decal/cleanable/blood/drip, -/obj/effect/floor_decal/corner/lime/border{ - dir = 10 - }, -/obj/structure/inflatable/wall, -/turf/simulated/floor/tiled/dark/airless, -/area/meatstation/kitchen) -"vT" = ( -/obj/machinery/light/small/red, -/turf/simulated/floor/tiled/monotile, -/area/meatstation/hydroponics) -"vU" = ( -/obj/machinery/conveyor_switch/oneway{ - convdir = -1; - id = "trashconveyor" - }, -/obj/effect/floor_decal/corner/b_green/border, -/turf/simulated/floor/tiled/dark/monotile, -/area/meatstation/storage) -"vV" = ( -/obj/machinery/light/small/red, -/obj/random/single/meatstation/low/wormguard, -/turf/simulated/floor/carpet/blue, -/area/meatstation/dorm) -"vW" = ( -/obj/structure/reagent_dispensers/watertank, -/obj/effect/floor_decal/corner/green/border{ - dir = 10 - }, -/turf/simulated/floor/tiled/monotile, -/area/meatstation/hydroponics) -"vX" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 1; - level = 2 - }, -/obj/machinery/seed_extractor, -/obj/effect/floor_decal/corner/green/border, -/turf/simulated/floor/tiled/monotile, -/area/meatstation/hydroponics) -"vY" = ( -/obj/machinery/honey_extractor, -/obj/effect/floor_decal/corner/green/border, -/turf/simulated/floor/tiled/monotile, -/area/meatstation/hydroponics) -"vZ" = ( -/obj/machinery/portable_atmospherics/hydroponics/soil, -/obj/item/seeds/weeds, -/obj/machinery/light, -/turf/simulated/floor/exoplanet/grass, -/area/meatstation/hydroponics) -"wa" = ( -/obj/machinery/biogenerator, -/obj/effect/floor_decal/corner/green/border, -/turf/simulated/floor/tiled/monotile, -/area/meatstation/hydroponics) -"wb" = ( -/obj/machinery/light, -/obj/effect/floor_decal/corner/paleblue/border, -/turf/simulated/floor/tiled/dark, -/area/meatstation/medical) -"wc" = ( -/obj/effect/mine, -/obj/effect/mine, -/obj/machinery/light/small/red, -/turf/simulated/floor/tiled/dark, -/area/meatstation/swhallway) -"wd" = ( -/obj/effect/mine, -/obj/effect/mine, -/obj/effect/decal/cleanable/blood/drip, -/obj/random/trash, -/obj/random/junk, -/turf/simulated/floor/tiled/dark, -/area/meatstation/swhallway) -"we" = ( -/obj/effect/floor_decal/corner/black/border{ - dir = 8 - }, -/turf/simulated/floor/tiled, -/area/meatstation/centerhallway) -"wf" = ( -/obj/machinery/light/small/red, -/turf/simulated/floor/tiled/dark, -/area/meatstation/cargo) -"wg" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 8; - icon_state = "warning" - }, -/turf/simulated/floor/reinforced, -/area/meatstation/lab) -"wh" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/random/single/meatstation/wormscientist, -/turf/simulated/floor/tiled/monotile, -/area/meatstation/hydroponics) -"wi" = ( -/obj/structure/table/rack, -/obj/random/loot, -/obj/random/trash, -/obj/effect/floor_decal/corner/grey/border{ - dir = 9 - }, -/turf/simulated/floor/tiled/dark, -/area/meatstation/armory) -"wj" = ( -/obj/effect/floor_decal/corner/red/border{ - dir = 8 - }, -/turf/simulated/floor/tiled/white, -/area/meatstation/lab) -"wk" = ( -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/effect/floor_decal/corner/red/border{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/meatstation/lab) -"wl" = ( -/obj/effect/floor_decal/corner/red/border{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/meatstation/lab) -"wm" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/door/airlock/vault/bolted{ - id_tag = "meatstation_eastlabext"; - locked = 0; - name = "Secure Airlock"; - welded = 1 - }, -/turf/simulated/floor/tiled/white, -/area/meatstation/centerhallway) -"wn" = ( -/obj/machinery/light{ - dir = 4 - }, -/obj/effect/floor_decal/corner/red/border{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/meatstation/lab) -"wo" = ( -/obj/effect/floor_decal/corner/red/bordercorner{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/meatstation/lab) -"wp" = ( -/obj/machinery/light, -/turf/simulated/floor/tiled/white, -/area/meatstation/lab) -"wq" = ( -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/effect/floor_decal/corner/red/border{ - dir = 8 - }, -/turf/simulated/floor/tiled/white, -/area/meatstation/lab) -"wr" = ( -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/effect/decal/cleanable/molten_item, -/obj/effect/floor_decal/corner/red/border{ - dir = 8 - }, -/turf/simulated/floor/tiled/white, -/area/meatstation/lab) -"ws" = ( -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/effect/floor_decal/corner/red/bordercorner{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/meatstation/lab) -"wt" = ( -/obj/effect/decal/cleanable/vomit, -/obj/effect/floor_decal/corner/red/border{ - dir = 1 - }, -/turf/simulated/floor/tiled/white, -/area/meatstation/lab) -"wu" = ( -/obj/effect/floor_decal/corner/red/border{ - dir = 1 - }, -/turf/simulated/floor/tiled/white, -/area/meatstation/lab) -"wv" = ( -/obj/machinery/light{ - dir = 1 - }, -/obj/effect/floor_decal/corner/red/border{ - dir = 1 - }, -/turf/simulated/floor/tiled/white, -/area/meatstation/lab) -"ww" = ( -/obj/machinery/recharger/wallcharger{ - pixel_y = 24 - }, -/obj/effect/floor_decal/corner/red/border{ - dir = 1 - }, -/turf/simulated/floor/tiled/white, -/area/meatstation/lab) -"wx" = ( -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/effect/decal/cleanable/blood/drip, -/obj/effect/floor_decal/corner/red/bordercorner{ - dir = 1 - }, -/turf/simulated/floor/tiled/white, -/area/meatstation/lab) -"wy" = ( -/obj/machinery/portable_atmospherics/powered/scrubber/huge/stationary, -/obj/effect/floor_decal/corner/red/border{ - dir = 5 - }, -/turf/simulated/floor/tiled/white, -/area/meatstation/lab) -"wz" = ( -/obj/machinery/atmospherics/unary/vent_pump/on, -/obj/effect/floor_decal/corner/red/border{ - dir = 1 - }, -/turf/simulated/floor/tiled/white, -/area/meatstation/lab) -"wA" = ( -/obj/effect/floor_decal/corner/red/bordercorner, -/turf/simulated/floor/tiled/white, -/area/meatstation/lab) -"wB" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 1 - }, -/obj/machinery/light, -/obj/effect/floor_decal/corner/red/border, -/turf/simulated/floor/tiled/white, -/area/meatstation/lab) -"wC" = ( -/obj/effect/floor_decal/corner/red/bordercorner{ - dir = 8 - }, -/turf/simulated/floor/tiled/white, -/area/meatstation/lab) -"wD" = ( -/obj/machinery/portable_atmospherics/powered/scrubber/huge/stationary, -/obj/effect/floor_decal/corner/red/border{ - dir = 6 - }, -/turf/simulated/floor/tiled/white, -/area/meatstation/lab) -"wE" = ( -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/decal/cleanable/blood/drip, -/obj/effect/floor_decal/corner/red/border{ - dir = 8 - }, -/turf/simulated/floor/tiled/white, -/area/meatstation/lab) -"wF" = ( -/obj/effect/floor_decal/corner/brown/border{ - dir = 4 - }, -/obj/effect/floor_decal/industrial/hatch/yellow, -/turf/simulated/floor/tiled/dark/airless, -/area/meatstation/cargo) -"wG" = ( -/obj/machinery/artifact_scanpad, -/obj/effect/floor_decal/corner/red/border{ - dir = 8 - }, -/turf/simulated/floor/tiled/white, -/area/meatstation/lab) -"wH" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 8 - }, -/obj/effect/floor_decal/industrial/hatch/yellow, -/turf/simulated/floor/tiled/dark/airless, -/area/meatstation/cargo) -"wI" = ( -/obj/machinery/portable_atmospherics/powered/scrubber/huge/stationary, -/obj/effect/floor_decal/corner/red/border{ - dir = 10 - }, -/turf/simulated/floor/tiled/white, -/area/meatstation/lab) -"wJ" = ( -/obj/effect/decal/cleanable/ash, -/obj/effect/floor_decal/corner/red/bordercorner{ - dir = 8 - }, -/turf/simulated/floor/tiled/white, -/area/meatstation/lab) -"wK" = ( -/obj/random/toy, -/obj/effect/floor_decal/corner/brown/diagonal, -/turf/simulated/floor/tiled/dark/airless, -/area/meatstation/cargo) -"wL" = ( -/obj/effect/decal/cleanable/blood, -/obj/effect/floor_decal/corner/brown/diagonal, -/turf/simulated/floor/tiled/dark/airless, -/area/meatstation/cargo) -"wM" = ( -/obj/item/grenade/chem_grenade/metalfoam, -/obj/effect/floor_decal/corner/brown/diagonal, -/turf/simulated/floor/tiled/dark/airless, -/area/meatstation/cargo) -"wN" = ( -/obj/item/storage/box/swabs, -/obj/effect/floor_decal/corner/brown/border{ - dir = 8 - }, -/turf/simulated/floor/tiled/dark/airless, -/area/meatstation/cargo) -"wO" = ( -/obj/structure/table/rack, -/obj/item/extinguisher, -/obj/effect/floor_decal/corner/brown/diagonal, -/turf/simulated/floor/tiled/dark/airless, -/area/meatstation/cargo) -"wP" = ( -/obj/structure/table/rack, -/obj/item/storage/box/botanydisk, -/obj/effect/floor_decal/corner/brown/diagonal, -/turf/simulated/floor/tiled/dark/airless, -/area/meatstation/cargo) -"wQ" = ( -/obj/item/storage/box/monkeycubes, -/obj/machinery/light{ - dir = 8 - }, -/obj/effect/floor_decal/corner/brown/border{ - dir = 8 - }, -/turf/simulated/floor/tiled/dark/airless, -/area/meatstation/cargo) -"wR" = ( -/obj/structure/reagent_dispensers/watertank, -/obj/machinery/light{ - dir = 4 - }, -/obj/effect/floor_decal/corner/brown/border{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark/airless, -/area/meatstation/cargo) -"wS" = ( -/obj/item/grenade/chem_grenade/metalfoam, -/obj/effect/floor_decal/corner/brown/border{ - dir = 8 - }, -/turf/simulated/floor/tiled/dark/airless, -/area/meatstation/cargo) -"wT" = ( -/obj/item/storage/box/monkeycubes/stokcubes, -/obj/effect/floor_decal/corner/brown/border{ - dir = 8 - }, -/turf/simulated/floor/tiled/dark/airless, -/area/meatstation/cargo) -"wU" = ( -/obj/structure/table/rack, -/obj/random/mre, -/obj/effect/floor_decal/corner/grey/border{ - dir = 10 - }, -/obj/random/single/meatstation/laser, -/turf/simulated/floor/tiled/dark, -/area/meatstation/armory) -"wV" = ( -/obj/machinery/light, -/obj/effect/floor_decal/corner/brown/border, -/turf/simulated/floor/tiled/dark/airless, -/area/meatstation/cargo) -"wW" = ( -/obj/effect/floor_decal/corner/brown/border, -/turf/simulated/floor/tiled/dark/airless, -/area/meatstation/cargo) -"wX" = ( -/obj/machinery/portable_atmospherics/powered/pump/filled, -/obj/effect/floor_decal/corner/brown/border, -/turf/simulated/floor/tiled/dark/airless, -/area/meatstation/cargo) -"wY" = ( -/obj/item/stack/material/rods, -/obj/structure/inflatable/wall, -/obj/effect/floor_decal/corner/brown/border, -/turf/simulated/floor/tiled/dark/airless, -/area/meatstation/cargo) -"wZ" = ( -/obj/effect/floor_decal/corner/brown/border{ - dir = 6 - }, -/turf/simulated/floor/tiled/dark/airless, -/area/meatstation/cargo) -"xa" = ( -/obj/effect/floor_decal/corner/lightgrey/border{ - dir = 4 - }, -/obj/random/single/meatstation/meatworm, -/turf/simulated/floor/lino, -/area/meatstation/mess) -"xb" = ( -/obj/structure/table/rack, -/obj/random/single/lighter, -/obj/random/gloves, -/obj/random/accessory, -/obj/effect/floor_decal/corner/grey/border, -/turf/simulated/floor/tiled/dark, -/area/meatstation/armory) -"xc" = ( -/obj/structure/table/rack, -/obj/random/single/meatstation/laser, -/obj/random/contraband, -/obj/random/trash, -/obj/random/trash, -/obj/item/storage/firstaid/combat, -/obj/effect/floor_decal/corner/grey/border{ - dir = 6 - }, -/turf/simulated/floor/tiled/dark, -/area/meatstation/armory) -"xd" = ( -/obj/machinery/botany/extractor, -/obj/effect/floor_decal/corner/green/border, -/turf/simulated/floor/tiled/monotile, -/area/meatstation/hydroponics) -"xe" = ( -/obj/machinery/botany/editor, -/obj/effect/floor_decal/corner/green/border, -/turf/simulated/floor/tiled/monotile, -/area/meatstation/hydroponics) -"xf" = ( -/obj/random/junk, -/obj/effect/floor_decal/corner/green/bordercorner{ - dir = 8 - }, -/turf/simulated/floor/tiled/monotile, -/area/meatstation/hydroponics) -"xg" = ( -/obj/item/material/shard, -/obj/item/stack/material/rods, -/obj/effect/decal/cleanable/blood/drip, -/obj/effect/floor_decal/corner/green/border{ - dir = 4 - }, -/turf/simulated/floor/tiled/monotile, -/area/meatstation/hydroponics) -"xh" = ( -/obj/effect/floor_decal/corner/green/border{ - dir = 8 - }, -/turf/simulated/floor/tiled/monotile, -/area/meatstation/hydroponics) -"xi" = ( -/obj/machinery/recharger/wallcharger{ - dir = 8; - pixel_x = 23; - pixel_y = -3 - }, -/obj/item/stack/material/wood, -/obj/effect/floor_decal/corner/green/border{ - dir = 4 - }, -/turf/simulated/floor/tiled/monotile, -/area/meatstation/hydroponics) -"xj" = ( -/obj/effect/floor_decal/corner/green/border{ - dir = 4 - }, -/turf/simulated/floor/tiled/monotile, -/area/meatstation/hydroponics) -"xk" = ( -/obj/machinery/portable_atmospherics/hydroponics, -/obj/item/seeds/glowshroom, -/obj/effect/floor_decal/corner/green/border{ - dir = 10 - }, -/turf/simulated/floor/tiled/monotile, -/area/meatstation/hydroponics) -"xl" = ( -/obj/machinery/portable_atmospherics/hydroponics, -/obj/item/seeds/glowshroom, -/obj/machinery/light, -/obj/effect/floor_decal/corner/green/border, -/turf/simulated/floor/tiled/monotile, -/area/meatstation/hydroponics) -"xm" = ( -/obj/machinery/portable_atmospherics/hydroponics, -/obj/item/seeds/glowshroom, -/obj/effect/floor_decal/corner/green/border, -/turf/simulated/floor/tiled/monotile, -/area/meatstation/hydroponics) -"xn" = ( -/obj/machinery/portable_atmospherics/hydroponics, -/obj/item/seeds/glowshroom, -/obj/effect/floor_decal/corner/green/border{ - dir = 6 - }, -/turf/simulated/floor/tiled/monotile, -/area/meatstation/hydroponics) -"xo" = ( -/obj/effect/floor_decal/corner/b_green/border, -/turf/simulated/floor/tiled/dark/monotile, -/area/meatstation/storage) -"xp" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/closet/toolcloset, -/obj/machinery/door/window/southleft, -/obj/effect/floor_decal/corner/purple/diagonal, -/obj/item/cell/high, -/turf/simulated/floor/airless, -/area/meatstation/engineering) -"xq" = ( -/obj/machinery/floodlight, -/obj/effect/floor_decal/corner/b_green/border{ - dir = 10 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/meatstation/storage) -"xr" = ( -/obj/machinery/photocopier, -/obj/effect/floor_decal/corner/b_green/border, -/turf/simulated/floor/tiled/dark/monotile, -/area/meatstation/storage) -"xs" = ( -/obj/machinery/vending/fashionvend, -/obj/machinery/light, -/obj/effect/floor_decal/corner/b_green/border, -/turf/simulated/floor/tiled/dark/monotile, -/area/meatstation/storage) -"xu" = ( -/obj/machinery/disposal, -/obj/structure/disposalpipe/trunk{ - dir = 4 - }, -/obj/effect/floor_decal/corner/b_green/border{ - dir = 6 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/meatstation/storage) -"xv" = ( -/obj/machinery/smartfridge/drying_rack{ - dir = 1 - }, -/obj/machinery/light, -/obj/effect/floor_decal/corner/lime/border, -/turf/simulated/floor/tiled/dark/airless, -/area/meatstation/kitchen) -"xw" = ( -/obj/machinery/smartfridge/drying_rack{ - dir = 1 - }, -/obj/effect/floor_decal/corner/lime/border, -/turf/simulated/floor/tiled/dark/airless, -/area/meatstation/kitchen) -"xx" = ( -/obj/machinery/gibber, -/obj/effect/floor_decal/corner/lime/border, -/turf/simulated/floor/tiled/dark/airless, -/area/meatstation/kitchen) -"xy" = ( -/obj/machinery/light, -/obj/effect/floor_decal/corner/lime/border, -/turf/simulated/floor/tiled/dark/airless, -/area/meatstation/kitchen) -"xz" = ( -/obj/effect/decal/cleanable/blood/drip, -/obj/effect/floor_decal/corner/lightgrey/border{ - dir = 8 - }, -/turf/simulated/floor/lino, -/area/meatstation/mess) -"xA" = ( -/obj/random/maintenance/clean, -/obj/effect/floor_decal/corner/lightgrey/border{ - dir = 8 - }, -/turf/simulated/floor/lino, -/area/meatstation/mess) -"xB" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 8 - }, -/obj/effect/decal/cleanable/blood/drip, -/obj/effect/floor_decal/corner/lightgrey/border{ - dir = 4 - }, -/turf/simulated/floor/lino, -/area/meatstation/mess) -"xC" = ( -/obj/structure/flora/pottedplant/drooping, -/obj/effect/floor_decal/corner/lightgrey/border{ - dir = 10 - }, -/turf/simulated/floor/lino, -/area/meatstation/mess) -"xD" = ( -/obj/effect/floor_decal/corner/lightgrey/border, -/turf/simulated/floor/lino, -/area/meatstation/mess) -"xE" = ( -/obj/machinery/light, -/obj/effect/floor_decal/corner/lightgrey/border, -/turf/simulated/floor/lino, -/area/meatstation/mess) -"xF" = ( -/obj/item/trash/plate, -/obj/effect/floor_decal/corner/lightgrey/border{ - dir = 6 - }, -/turf/simulated/floor/lino, -/area/meatstation/mess) -"xH" = ( -/obj/structure/stasis_cage, -/obj/effect/floor_decal/industrial/hatch/yellow, -/turf/simulated/floor/tiled/white, -/area/meatstation/lab) -"xI" = ( -/obj/structure/stasis_cage, -/obj/machinery/light{ - dir = 4 - }, -/obj/effect/floor_decal/corner/red/border{ - dir = 4 - }, -/obj/effect/floor_decal/industrial/hatch/yellow, -/turf/simulated/floor/tiled/white, -/area/meatstation/lab) -"xJ" = ( -/obj/machinery/vending/tool, -/obj/effect/floor_decal/corner/purple/border, -/turf/simulated/floor/airless, -/area/meatstation/engineering) -"xK" = ( -/obj/machinery/vending/tool, -/obj/machinery/light, -/obj/effect/floor_decal/corner/purple/border, -/turf/simulated/floor/airless, -/area/meatstation/engineering) -"xL" = ( -/obj/effect/floor_decal/corner/purple/border, -/turf/simulated/floor/airless, -/area/meatstation/engineering) -"xM" = ( -/obj/machinery/portable_atmospherics/canister/oxygen, -/obj/structure/window/basic{ - dir = 8 - }, -/obj/machinery/door/window/northleft, -/obj/effect/floor_decal/corner/purple/border, -/turf/simulated/floor/airless, -/area/meatstation/engineering) -"xN" = ( -/obj/machinery/suit_storage_unit/standard_unit, -/obj/structure/window/basic{ - dir = 4 - }, -/obj/machinery/door/window/northright, -/obj/machinery/light, -/obj/effect/floor_decal/corner/purple/border, -/turf/simulated/floor/airless, -/area/meatstation/engineering) -"xO" = ( -/obj/machinery/suit_storage_unit/standard_unit, -/obj/structure/window/basic{ - dir = 4 - }, -/obj/machinery/door/window/northright, -/obj/effect/floor_decal/corner/purple/border, -/turf/simulated/floor/airless, -/area/meatstation/engineering) -"xP" = ( -/obj/machinery/suit_storage_unit/standard_unit, -/obj/structure/window/basic{ - dir = 4 - }, -/obj/machinery/door/window/northright, -/obj/effect/floor_decal/corner/purple/border{ - dir = 6 - }, -/turf/simulated/floor/airless, -/area/meatstation/engineering) -"xQ" = ( -/obj/structure/closet/toolcloset, -/obj/structure/window/basic{ - dir = 4 - }, -/obj/machinery/door/window/southleft, -/obj/item/clothing/ring/material/gold, -/obj/effect/floor_decal/corner/purple/diagonal, -/turf/simulated/floor/airless, -/area/meatstation/engineering) -"xR" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/pipedispenser, -/obj/effect/floor_decal/corner/purple/diagonal, -/turf/simulated/floor/airless, -/area/meatstation/engineering) -"xS" = ( -/obj/structure/table/glass, -/obj/item/pen, -/obj/item/device/flashlight/lamp, -/obj/effect/floor_decal/corner/green/diagonal, -/turf/simulated/floor/tiled/monotile, -/area/meatstation/hydroponics) -"xT" = ( -/obj/structure/table/glass, -/obj/item/device/flashlight/lamp, -/obj/effect/floor_decal/corner/green/diagonal, -/turf/simulated/floor/tiled/monotile, -/area/meatstation/hydroponics) -"xU" = ( -/obj/structure/reagent_dispensers/fueltank, -/obj/effect/floor_decal/corner/brown/diagonal, -/turf/simulated/floor/tiled/dark/airless, -/area/meatstation/cargo) -"xV" = ( -/obj/structure/closet/crate, -/obj/item/stack/material/glass/fifty, -/obj/item/stack/material/glass/fifty, -/obj/effect/floor_decal/corner/brown/diagonal, -/turf/simulated/floor/tiled/dark/airless, -/area/meatstation/cargo) -"xW" = ( -/obj/item/storage/backpack/dufflebag, -/obj/random/maintenance/clean, -/obj/effect/floor_decal/corner/brown/diagonal, -/turf/simulated/floor/tiled/dark/airless, -/area/meatstation/cargo) -"xX" = ( -/obj/effect/decal/cleanable/blood/drip, -/obj/effect/floor_decal/corner/brown/diagonal, -/turf/simulated/floor/tiled/dark/airless, -/area/meatstation/cargo) -"xY" = ( -/obj/effect/floor_decal/corner/black/border{ - dir = 9 - }, -/turf/simulated/floor/tiled, -/area/meatstation/centerhallway) -"xZ" = ( -/obj/machinery/light/small/red{ - dir = 1 - }, -/obj/effect/floor_decal/corner/black/border{ - dir = 1 - }, -/turf/simulated/floor/tiled, -/area/meatstation/centerhallway) -"ya" = ( -/obj/structure/closet/firecloset, -/obj/effect/floor_decal/corner/black/border{ - dir = 1 - }, -/turf/simulated/floor/tiled, -/area/meatstation/centerhallway) -"yb" = ( -/obj/effect/floor_decal/corner/black/border{ - dir = 1 - }, -/turf/simulated/floor/tiled, -/area/meatstation/centerhallway) -"yd" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/random/single/meatstation/low/wormscientist, -/obj/effect/floor_decal/corner/black/bordercorner{ - dir = 1 - }, -/turf/simulated/floor/tiled, -/area/meatstation/centerhallway) -"ye" = ( -/obj/effect/floor_decal/corner/black/bordercorner{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/meatstation/centerhallway) -"yf" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/obj/effect/floor_decal/corner/black/border{ - dir = 1 - }, -/turf/simulated/floor/tiled, -/area/meatstation/centerhallway) -"yg" = ( -/obj/random/single/meatstation/low/wormscientist, -/obj/effect/floor_decal/corner/black/border{ - dir = 1 - }, -/turf/simulated/floor/tiled, -/area/meatstation/centerhallway) -"yh" = ( -/obj/structure/barricade/spike{ - dir = 8 - }, -/obj/effect/floor_decal/corner/black/border{ - dir = 1 - }, -/turf/simulated/floor/tiled, -/area/meatstation/centerhallway) -"yi" = ( -/obj/random/junk, -/obj/effect/floor_decal/corner/black/bordercorner{ - dir = 1 - }, -/turf/simulated/floor/tiled, -/area/meatstation/centerhallway) -"yj" = ( -/obj/structure/inflatable/wall, -/obj/effect/floor_decal/corner/black/border{ - dir = 1 - }, -/turf/simulated/floor/tiled, -/area/meatstation/centerhallway) -"yk" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/obj/effect/decal/cleanable/blood, -/obj/effect/floor_decal/corner/black/border{ - dir = 1 - }, -/turf/simulated/floor/tiled, -/area/meatstation/centerhallway) -"yl" = ( -/obj/effect/decal/cleanable/vomit, -/obj/effect/floor_decal/corner/black/border{ - dir = 8 - }, -/turf/simulated/floor/tiled, -/area/meatstation/centerhallway) -"ym" = ( -/obj/machinery/light/small/red{ - dir = 8 - }, -/obj/effect/floor_decal/corner/black/border{ - dir = 8 - }, -/turf/simulated/floor/tiled, -/area/meatstation/centerhallway) -"yn" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 4 - }, -/obj/effect/floor_decal/corner/black/border{ - dir = 8 - }, -/turf/simulated/floor/tiled, -/area/meatstation/centerhallway) -"yo" = ( -/obj/effect/decal/cleanable/blood, -/obj/effect/floor_decal/corner/black/border{ - dir = 8 - }, -/turf/simulated/floor/tiled, -/area/meatstation/centerhallway) -"yq" = ( -/obj/effect/floor_decal/corner/black/border{ - dir = 10 - }, -/turf/simulated/floor/tiled, -/area/meatstation/centerhallway) -"yr" = ( -/obj/effect/floor_decal/corner/black/border, -/turf/simulated/floor/tiled, -/area/meatstation/centerhallway) -"yt" = ( -/obj/effect/floor_decal/corner/black/bordercorner{ - dir = 8 - }, -/turf/simulated/floor/tiled, -/area/meatstation/centerhallway) -"yu" = ( -/obj/structure/barricade/spike, -/obj/effect/floor_decal/corner/black/border{ - dir = 8 - }, -/turf/simulated/floor/tiled, -/area/meatstation/centerhallway) -"yv" = ( -/obj/random/junk, -/obj/effect/floor_decal/corner/black/border{ - dir = 8 - }, -/turf/simulated/floor/tiled, -/area/meatstation/centerhallway) -"yx" = ( -/obj/structure/inflatable/wall, -/obj/effect/floor_decal/corner/black/border{ - dir = 8 - }, -/turf/simulated/floor/tiled, -/area/meatstation/centerhallway) -"yz" = ( -/obj/structure/closet/emcloset, -/obj/machinery/light/small/red, -/obj/effect/floor_decal/corner/black/border, -/turf/simulated/floor/tiled, -/area/meatstation/centerhallway) -"yA" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/effect/floor_decal/corner/black/bordercorner{ - dir = 8 - }, -/turf/simulated/floor/tiled, -/area/meatstation/centerhallway) -"yB" = ( -/obj/structure/barricade/spike, -/obj/machinery/light/small/red{ - dir = 8 - }, -/obj/effect/floor_decal/corner/black/border{ - dir = 8 - }, -/turf/simulated/floor/tiled, -/area/meatstation/centerhallway) -"yC" = ( -/obj/effect/decal/cleanable/blood, -/obj/effect/floor_decal/corner/black/border{ - dir = 10 - }, -/turf/simulated/floor/tiled, -/area/meatstation/centerhallway) -"yD" = ( -/obj/random/junk, -/obj/effect/floor_decal/corner/black/border{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/meatstation/centerhallway) -"yE" = ( -/obj/random/single/meatstation/meatworm, -/obj/effect/floor_decal/corner/black/border{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/meatstation/centerhallway) -"yG" = ( -/obj/effect/decal/cleanable/blood, -/obj/random/junk, -/obj/effect/floor_decal/corner/black/border{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/meatstation/centerhallway) -"yH" = ( -/obj/effect/decal/cleanable/blood/drip, -/obj/effect/floor_decal/corner/black/bordercorner{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/meatstation/centerhallway) -"yJ" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/obj/structure/cable/cyan{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/effect/floor_decal/corner/black/bordercorner, -/turf/simulated/floor/tiled, -/area/meatstation/centerhallway) -"yK" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 1 - }, -/obj/effect/floor_decal/corner/black/border, -/turf/simulated/floor/tiled, -/area/meatstation/centerhallway) -"yL" = ( -/obj/structure/barricade/spike{ - dir = 8 - }, -/obj/effect/floor_decal/corner/black/border, -/turf/simulated/floor/tiled, -/area/meatstation/centerhallway) -"yM" = ( -/obj/random/single/meatstation/meatworm, -/obj/effect/floor_decal/corner/black/border, -/turf/simulated/floor/tiled, -/area/meatstation/centerhallway) -"yN" = ( -/obj/effect/decal/cleanable/blood, -/obj/effect/floor_decal/corner/black/border, -/turf/simulated/floor/tiled, -/area/meatstation/centerhallway) -"yO" = ( -/obj/effect/floor_decal/corner/black/bordercorner, -/obj/effect/floor_decal/corner/black/bordercorner{ - dir = 8 - }, -/turf/simulated/floor/tiled, -/area/meatstation/centerhallway) -"yP" = ( -/obj/structure/closet/firecloset, -/obj/effect/floor_decal/corner/black/border{ - dir = 6 - }, -/turf/simulated/floor/tiled, -/area/meatstation/centerhallway) -"yQ" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/effect/floor_decal/corner/black/border{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/meatstation/centerhallway) -"yR" = ( -/obj/effect/floor_decal/corner/black/border{ - dir = 8 - }, -/obj/effect/floor_decal/corner/black/border{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/meatstation/centerhallway) -"yS" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/barricade/spike, -/obj/effect/floor_decal/corner/black/border{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/meatstation/centerhallway) -"yT" = ( -/obj/machinery/light/small/red{ - dir = 4 - }, -/obj/effect/floor_decal/corner/black/border{ - dir = 8 - }, -/obj/effect/floor_decal/corner/black/border{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/meatstation/centerhallway) -"yU" = ( -/obj/structure/barricade/spike, -/obj/effect/floor_decal/corner/black/border{ - dir = 8 - }, -/obj/effect/floor_decal/corner/black/border{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/meatstation/centerhallway) -"yV" = ( -/obj/structure/stasis_cage, -/obj/effect/floor_decal/corner/red/border{ - dir = 4 - }, -/obj/effect/floor_decal/industrial/hatch/yellow, -/turf/simulated/floor/tiled/white, -/area/meatstation/lab) -"yW" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 8; - icon_state = "warning" - }, -/turf/simulated/floor/tiled/dark/airless, -/area/meatstation/cargo) -"yX" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/cable/cyan{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 8; - icon_state = "warning" - }, -/turf/simulated/floor/tiled/white, -/area/meatstation/lab) -"yY" = ( -/obj/effect/decal/cleanable/blood/drip, -/obj/effect/floor_decal/industrial/warning, -/turf/simulated/floor/tiled/white, -/area/meatstation/lab) -"yZ" = ( -/obj/effect/floor_decal/industrial/warning, -/turf/simulated/floor/tiled/white, -/area/meatstation/lab) -"za" = ( -/obj/structure/hygiene/shower{ - dir = 1 - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 6 - }, -/turf/simulated/floor/tiled/white, -/area/meatstation/centerhallway) -"zb" = ( -/obj/structure/closet/l3closet/scientist, -/obj/random/maintenance/clean, -/obj/random/maintenance/clean, -/obj/effect/floor_decal/industrial/warning{ - dir = 10; - icon_state = "warning" - }, -/turf/simulated/floor/tiled/white, -/area/meatstation/centerhallway) -"zc" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 1; - level = 2 - }, -/obj/machinery/light/small/red, -/obj/effect/floor_decal/industrial/warning, -/turf/simulated/floor/tiled/white, -/area/meatstation/centerhallway) -"zd" = ( -/obj/structure/closet/l3closet/scientist, -/obj/random/maintenance/clean, -/obj/effect/floor_decal/industrial/warning{ - dir = 6 - }, -/turf/simulated/floor/tiled/white, -/area/meatstation/centerhallway) -"ze" = ( -/obj/effect/decal/cleanable/blood, -/obj/effect/floor_decal/industrial/warning{ - dir = 8; - icon_state = "warning" - }, -/turf/simulated/floor/reinforced, -/area/meatstation/lab) -"zf" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 6; - icon_state = "warning" - }, -/turf/simulated/floor/reinforced, -/area/meatstation/lab) -"zg" = ( -/obj/item/remains/human, -/obj/effect/floor_decal/industrial/warning{ - dir = 10; - icon_state = "warning" - }, -/turf/simulated/floor/reinforced, -/area/meatstation/lab) -"zh" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 10; - icon_state = "warning" - }, -/turf/simulated/floor/reinforced, -/area/meatstation/lab) -"zi" = ( -/obj/machinery/light, -/obj/effect/floor_decal/industrial/warning, -/turf/simulated/floor/reinforced, -/area/meatstation/lab) -"zj" = ( -/obj/effect/floor_decal/industrial/warning, -/turf/simulated/floor/reinforced, -/area/meatstation/lab) -"zk" = ( -/obj/effect/decal/cleanable/mucus, -/obj/effect/floor_decal/industrial/warning, -/turf/simulated/floor/reinforced, -/area/meatstation/lab) -"zl" = ( -/obj/effect/decal/cleanable/blood/drip, -/obj/effect/floor_decal/industrial/warning{ - dir = 1; - icon_state = "warning" - }, -/turf/simulated/floor/reinforced, -/area/meatstation/lab) -"zm" = ( -/obj/structure/stasis_cage, -/obj/effect/decal/cleanable/cobweb2, -/obj/effect/floor_decal/industrial/warning{ - dir = 5 - }, -/turf/simulated/floor/reinforced, -/area/meatstation/lab) -"zn" = ( -/obj/structure/mattress/dirty, -/obj/effect/floor_decal/industrial/warning{ - dir = 8; - icon_state = "warning" - }, -/turf/simulated/floor/reinforced, -/area/meatstation/lab) -"zo" = ( -/obj/effect/decal/cleanable/blood/drip, -/obj/effect/floor_decal/industrial/warning{ - dir = 4; - icon_state = "warning" - }, -/turf/simulated/floor/reinforced, -/area/meatstation/lab) -"zp" = ( -/obj/structure/mattress/dirty, -/obj/effect/floor_decal/industrial/warning{ - dir = 4; - icon_state = "warning" - }, -/turf/simulated/floor/reinforced, -/area/meatstation/lab) -"zr" = ( -/obj/machinery/door/airlock/external{ - id_tag = "meatstation_dock"; - locked = 1 - }, -/turf/simulated/floor/tiled/dark, -/area/meatstation/cargo) -"zs" = ( -/obj/machinery/door/airlock/vault/bolted{ - id_tag = "meatstation_nwpen"; - name = "Secure Airlock" - }, -/turf/simulated/floor/reinforced, -/area/meatstation/lab) -"zt" = ( -/obj/machinery/door/airlock/vault/bolted{ - id_tag = "meatstation_nepen"; - name = "Secure Airlock" - }, -/turf/simulated/floor/reinforced, -/area/meatstation/lab) -"zu" = ( -/obj/effect/floor_decal/corner/red/border{ - dir = 1 - }, -/obj/machinery/button/alternate/door/bolts{ - id_tag = "meatstation_nwpen"; - pixel_y = 30 - }, -/turf/simulated/floor/tiled/white, -/area/meatstation/lab) -"zv" = ( -/obj/effect/floor_decal/corner/red/border{ - dir = 1 - }, -/obj/machinery/button/alternate/door/bolts{ - id_tag = "meatstation_nepen"; - pixel_y = 30 - }, -/turf/simulated/floor/tiled/white, -/area/meatstation/lab) -"zw" = ( -/obj/effect/floor_decal/corner/red/border, -/obj/machinery/button/alternate/door/bolts{ - id_tag = "meatstation_swpen"; - pixel_y = -24 - }, -/turf/simulated/floor/tiled/white, -/area/meatstation/lab) -"zx" = ( -/obj/effect/floor_decal/corner/red/border, -/obj/machinery/button/alternate/door/bolts{ - id_tag = "meatstation_sepen"; - pixel_y = -24 - }, -/turf/simulated/floor/tiled/white, -/area/meatstation/lab) -"zy" = ( -/obj/machinery/door/airlock/vault/bolted{ - id_tag = "meatstation_swpen"; - name = "Secure Airlock" - }, -/turf/simulated/floor/reinforced, -/area/meatstation/lab) -"zz" = ( -/obj/machinery/door/airlock/vault/bolted{ - id_tag = "meatstation_sepen"; - name = "Secure Airlock" - }, -/turf/simulated/floor/reinforced, -/area/meatstation/lab) -"zB" = ( -/obj/effect/floor_decal/corner/black/border{ - dir = 8 - }, -/obj/machinery/button/alternate/door/bolts{ - id_tag = "meatstation_eastlabext"; - name = "exterior lab bolt control"; - pixel_x = -24 - }, -/turf/simulated/floor/tiled, -/area/meatstation/centerhallway) -"zC" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/door/airlock/vault/bolted{ - id_tag = "meatstation_westlabext"; - name = "Secure Airlock"; - welded = 0 - }, -/turf/simulated/floor/tiled/white, -/area/meatstation/centerhallway) -"zD" = ( -/obj/effect/floor_decal/corner/black/border{ - dir = 8 - }, -/obj/effect/decal/cleanable/filth, -/turf/simulated/floor/tiled, -/area/meatstation/centerhallway) -"zE" = ( -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/effect/floor_decal/corner/red/border{ - dir = 4 - }, -/obj/machinery/button/blast_door{ - id_tag = "meatstation_blastdoorint"; - name = "interior blast door control"; - pixel_x = 24 - }, -/turf/simulated/floor/tiled/white, -/area/meatstation/lab) -"zF" = ( -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/effect/floor_decal/corner/red/border{ - dir = 8 - }, -/obj/machinery/button/blast_door{ - id_tag = "meatstation_blastdoorext"; - name = "exterior blast door control"; - pixel_x = -24 - }, -/turf/simulated/floor/tiled/white, -/area/meatstation/lab) -"zG" = ( -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/effect/floor_decal/corner/red/border{ - dir = 8 - }, -/obj/machinery/button/alternate/door/bolts{ - id_tag = "meatstation_labcore"; - name = "secure lab storage bolt control"; - pixel_x = -24 - }, -/turf/simulated/floor/tiled/white, -/area/meatstation/lab) -"zH" = ( -/obj/structure/window/basic, -/obj/structure/bed/roller/ironingboard, -/obj/random/maintenance/clean, -/obj/item/cell/high, -/turf/simulated/floor/tiled/dark/monotile, -/area/meatstation/storage) -"zJ" = ( -/obj/structure/cable/cyan{ - d2 = 4; - icon_state = "0-4" - }, -/obj/effect/floor_decal/solarpanel, -/obj/machinery/power/solar{ - id = "meatstation_auxsolars" - }, -/turf/simulated/floor/plating, -/area/space) -"zK" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/effect/floor_decal/corner/b_green/border{ - dir = 4 - }, -/obj/machinery/button/alternate/door/bolts{ - id_tag = "meatstation_sairlockint"; - name = "interior airlock bolt control"; - pixel_x = 24 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/meatstation/storage) -"zL" = ( -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/plating, -/area/space) -"zM" = ( -/obj/structure/cable/cyan{ - d2 = 8; - icon_state = "0-8" - }, -/obj/effect/floor_decal/solarpanel, -/obj/machinery/power/solar{ - id = "meatstation_auxsolars" - }, -/turf/simulated/floor/plating, -/area/space) -"zN" = ( -/obj/effect/floor_decal/corner/b_green/border{ - dir = 4 - }, -/obj/structure/cable/cyan, -/obj/machinery/power/solar_control{ - dir = 8; - id = "meatstation_auxsolars" - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/meatstation/storage) -"zO" = ( -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/structure/cable/cyan{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/turf/simulated/floor/plating, -/area/space) -"zP" = ( -/obj/structure/cable/cyan{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/structure/cable/cyan{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/turf/simulated/floor/plating, -/area/space) -"zQ" = ( -/obj/structure/grille/broken, -/obj/structure/cable/cyan{ - d2 = 8; - icon_state = "0-8" - }, -/obj/machinery/door/blast/regular{ - dir = 4; - id_tag = "meatstation_blastdoorint" - }, -/turf/simulated/floor/plating, -/area/meatstation/lab) -"zR" = ( -/obj/structure/grille/broken, -/obj/machinery/door/blast/regular{ - dir = 4; - id_tag = "meatstation_blastdoorint" - }, -/turf/simulated/floor/plating, -/area/meatstation/lab) -"zS" = ( -/obj/structure/cable/cyan{ - d2 = 8; - icon_state = "0-8" - }, -/obj/structure/grille/broken, -/obj/effect/decal/cleanable/blood/drip, -/obj/machinery/door/blast/regular{ - dir = 4; - id_tag = "meatstation_blastdoorint" - }, -/turf/simulated/floor/plating, -/area/meatstation/lab) -"zT" = ( -/obj/machinery/recharger/wallcharger{ - dir = 1; - pixel_y = -24 - }, -/obj/effect/floor_decal/corner/red/border, -/obj/random/single/meatstation/low/wormscientist, -/turf/simulated/floor/tiled/white, -/area/meatstation/lab) -"zU" = ( -/obj/effect/floor_decal/corner/red/bordercorner{ - dir = 4 - }, -/obj/random/single/meatstation/low/wormscientist, -/turf/simulated/floor/tiled/white, -/area/meatstation/lab) -"zV" = ( -/obj/effect/floor_decal/corner/red/border{ - dir = 1 - }, -/obj/random/single/meatstation/low/wormscientist, -/turf/simulated/floor/tiled/white, -/area/meatstation/lab) -"zW" = ( -/obj/random/single/meatstation/low/wormguard, -/turf/simulated/floor/tiled/white, -/area/meatstation/bathroom) -"zY" = ( -/obj/effect/floor_decal/corner/black/border{ - dir = 8 - }, -/obj/effect/floor_decal/corner/black/border{ - dir = 4 - }, -/obj/random/single/meatstation/low/wormguard, -/turf/simulated/floor/tiled, -/area/meatstation/centerhallway) -"zZ" = ( -/obj/random/maintenance/clean, -/obj/random/single/meatstation/meatball, -/turf/simulated/floor/airless, -/area/meatstation/engineering) -"Aa" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/closet/emcloset, -/obj/random/single/meatstation/meatball, -/turf/simulated/floor/tiled, -/area/meatstation/centerhallway) -"Ab" = ( -/obj/effect/floor_decal/corner/purple/border, -/obj/random/single/meatstation/meatball, -/turf/simulated/floor/airless, -/area/meatstation/engineering) -"Ad" = ( -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/cable/cyan{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/structure/cable/cyan{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/turf/simulated/floor/plating, -/area/space) -"Ae" = ( -/obj/structure/cable/cyan{ - d2 = 8; - icon_state = "0-8" - }, -/obj/machinery/power/tracker, -/obj/effect/floor_decal/industrial/warning/full, -/turf/simulated/floor/plating, -/area/space) -"Af" = ( -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/turf/simulated/floor/plating, -/area/space) -"Ag" = ( -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/turf/simulated/floor/plating, -/area/space) -"Ah" = ( -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/door/airlock/external{ - id_tag = "meatstation_nairlockint"; - locked = 1 - }, -/turf/simulated/floor/airless, -/area/meatstation/engineering) -"Ak" = ( -/obj/structure/hygiene/shower{ - dir = 8 - }, -/obj/effect/decal/cleanable/blood, -/turf/simulated/floor/tiled/white, -/area/meatstation/bathroom) -"Al" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 8 - }, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/effect/decal/cleanable/filth, -/turf/simulated/floor/tiled, -/area/meatstation/centerhallway) -"Am" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 - }, -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/decal/cleanable/filth, -/turf/simulated/floor/tiled/white, -/area/meatstation/bathroom) -"An" = ( -/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply, -/obj/structure/cable/cyan{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/decal/cleanable/blood/drip, -/obj/effect/decal/cleanable/filth, -/turf/simulated/floor/tiled, -/area/meatstation/centerhallway) -"Ao" = ( -/obj/machinery/door/airlock/vault/bolted{ - id_tag = "meatstation_westlabint"; - name = "Secure Airlock"; - welded = 0 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/decal/cleanable/filth, -/turf/simulated/floor/tiled/white, -/area/meatstation/lab) -"Ap" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/decal/cleanable/blood/drip, -/obj/effect/decal/cleanable/filth, -/turf/simulated/floor/tiled/white, -/area/meatstation/lab) -"Aq" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/effect/decal/cleanable/filth, -/turf/simulated/floor/tiled/dark/airless, -/area/meatstation/cargo) -"Ar" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/inflatable/door, -/obj/effect/decal/cleanable/filth, -/turf/simulated/floor/lino, -/area/meatstation/mess) -"As" = ( -/obj/effect/decal/cleanable/blood/drip, -/obj/effect/decal/cleanable/filth, -/turf/simulated/floor/airless/ceiling, -/area/meatstation/kitchen) -"At" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 4 - }, -/obj/effect/decal/cleanable/filth, -/turf/simulated/floor/tiled/dark/airless, -/area/meatstation/cargo) -"Av" = ( -/obj/effect/decal/cleanable/filth, -/turf/simulated/floor/airless/ceiling, -/area/meatstation/kitchen) -"Aw" = ( -/obj/machinery/door/window/southleft, -/obj/effect/decal/cleanable/filth, -/turf/simulated/floor/tiled/dark/monotile, -/area/meatstation/storage) -"Ax" = ( -/obj/effect/decal/cleanable/filth, -/turf/simulated/floor/tiled/dark/monotile, -/area/meatstation/storage) -"Ay" = ( -/obj/item/storage/bag/trash, -/obj/effect/decal/cleanable/blood/drip, -/obj/effect/decal/cleanable/filth, -/turf/simulated/floor/tiled/dark/monotile, -/area/meatstation/storage) -"Az" = ( -/obj/effect/floor_decal/corner/b_green/border, -/obj/effect/decal/cleanable/filth, -/turf/simulated/floor/tiled/dark/monotile, -/area/meatstation/storage) -"AA" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/decal/cleanable/filth, -/turf/simulated/floor/tiled/monotile, -/area/meatstation/hydroponics) -"AB" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/door/airlock/vault/bolted{ - id_tag = "meatstation_labcore"; - locked = 0; - name = "Secure Airlock" - }, -/turf/simulated/floor/tiled/white, -/area/meatstation/lab) -"AC" = ( -/obj/structure/cable/cyan{ - d2 = 4; - icon_state = "0-4" - }, -/obj/effect/floor_decal/solarpanel, -/obj/machinery/power/solar{ - id = "meatstation_auxsolars" - }, -/obj/machinery/button/alternate/door/bolts{ - id_tag = "meatstation_sairlockext"; - name = "exterior airlock bolt control"; - pixel_x = -24 - }, -/turf/simulated/floor/plating, -/area/space) -"AD" = ( -/obj/structure/closet/crate/trashcart, -/obj/random/junk, -/obj/random/junk, -/obj/random/junk, -/obj/item/storage/bag/trash, -/obj/item/storage/bag/trash, -/obj/random/single/meatstation/low/biocell, -/obj/effect/floor_decal/corner/b_green/border{ - dir = 6 - }, -/obj/item/cell/high, -/turf/simulated/floor/tiled/dark/monotile, -/area/meatstation/storage) - -(1,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(2,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(3,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(4,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -jB -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(5,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(6,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(7,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(8,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(9,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(10,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(11,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(12,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(13,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(14,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -jB -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(15,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(16,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -jB -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(17,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(18,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(19,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -po -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -jB -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(20,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -jB -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(21,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(22,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -pl -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(23,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -rT -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -nO -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(24,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(25,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(26,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -pm -aa -aa -aa -aa -aa -aa -aa -aa -nO -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(27,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -jB -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(28,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(29,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(30,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -po -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(31,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -jB -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(32,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(33,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(34,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -jB -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -jB -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(35,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -qn -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -nO -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(36,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -pk -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(37,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ps -aa -aa -aa -aa -aa -nJ -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(38,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -jB -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(39,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -pr -aa -aa -aa -aa -aa -aa -aa -aa -mw -aa -aa -aa -aa -aa -aa -nO -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(40,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -nO -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(41,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -rV -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(42,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(43,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -nO -aa -aa -aa -aa -aa -aa -jB -aa -aa -pp -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(44,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -pi -aa -aa -aa -aa -aa -aa -jB -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(45,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -mw -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(46,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ps -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(47,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -jB -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -lY -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(48,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -jB -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -jB -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -qc -jB -aa -aa -aa -aa -aa -aa -aa -aa -aa -jB -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(49,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -pr -aa -po -aa -aa -aa -aa -aa -aa -aa -aa -nO -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(50,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -jB -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -lY -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(51,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -qj -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -jB -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(52,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -uo -aa -pk -aa -aa -aa -aa -aa -aa -jB -aa -aa -aa -aa -jB -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(53,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -nO -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -jB -aa -aa -aa -aa -aa -aa -aa -aa -jB -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(54,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -jB -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -po -aa -aa -aa -aa -aa -aa -aa -aa -nO -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(55,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -jB -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -jB -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -qv -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(56,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -lY -aa -lk -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(57,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -pl -aa -aa -aa -aa -aa -nO -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -lY -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(58,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aj -aj -aj -aj -aj -aj -aj -aj -aj -al -aj -aj -aj -aj -aj -aj -aj -aj -aj -aj -aj -aj -aj -fM -fM -fM -fM -fM -fM -fM -aa -aa -aa -aa -aa -aa -aa -aa -aa -lY -aa -aa -aa -aa -aa -us -aa -aa -aa -aa -qx -aa -aa -jB -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(59,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ai -ak -ak -ak -ak -ak -ak -ak -ak -bc -aq -aq -aq -aq -aq -aq -aq -aq -aq -aq -aq -aq -fL -fN -fN -fN -fN -fN -fN -fO -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -sM -aa -aa -is -aa -aa -aa -aa -aa -uu -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(60,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -bb -bb -bb -bb -bb -bb -bb -bb -bb -ao -bb -bb -bb -bb -bb -bb -bb -bb -bb -bb -bb -bb -bb -fM -fM -fM -fM -fM -fM -fM -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -nO -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -po -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(61,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -rS -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -be -aa -aa -be -aa -aa -be -aa -aa -ao -aa -aa -aa -aa -aa -aa -be -aa -aa -be -aa -aa -be -aa -aa -be -aa -aa -be -aa -aa -fm -fm -cG -dx -cG -fm -fm -aa -aa -aa -aa -aa -aa -aa -jB -aa -aa -lk -aa -aa -aa -aa -lY -lk -aa -jB -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(62,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aj -aj -aj -aj -aj -aj -aj -aj -aj -ao -aj -aj -aj -aj -aj -aj -aj -aj -aj -aj -aj -aj -aj -fM -fM -fM -fM -fM -be -aa -aa -fm -fm -tr -cK -ui -fm -fm -aa -aa -aa -aa -aa -jl -aa -aa -aa -aa -hz -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -nO -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(63,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -jB -aa -ai -ak -ak -ak -ak -ak -ak -ak -ak -bc -aq -aq -aq -aq -aq -aq -aq -aq -aq -aq -aq -aq -fL -fN -fN -fN -fN -fO -be -aa -aa -fm -fm -cK -eS -wf -fm -fm -aa -aa -aa -aa -aa -aa -aa -aa -aa -pr -aa -aa -aa -nO -aa -aa -qe -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(64,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -bb -bb -bb -bb -bb -bb -bb -bb -bb -ao -bb -bb -bb -bb -bb -bb -bb -bb -bb -bb -bb -bb -bb -fM -fM -fM -fM -fM -be -fe -fe -fm -fm -tM -tP -tP -fm -fm -fm -fm -fm -fm -fm -fm -oH -pg -aa -lk -aa -jB -qv -aa -aa -pg -oH -fm -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(65,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -be -aa -aa -be -aa -aa -be -aa -aa -ao -aa -aa -aa -aa -aa -aa -be -aa -aa -be -aa -aa -be -aa -aa -be -aa -aa -be -fe -fe -fm -fm -zr -dx -zr -fm -fm -fm -fm -fm -fm -fm -fm -fm -pf -pg -dV -is -oe -aa -qj -pf -fm -fm -fm -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(66,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aj -aj -aj -aj -aj -aj -aj -aj -aj -ao -aj -aj -aj -aj -aj -aj -aj -aj -aj -aj -aj -aj -aj -aa -fe -fe -fe -fe -fe -fe -fe -bw -bW -yW -yW -yW -qg -pH -uJ -pH -wN -pH -wQ -wS -wT -qb -pI -jB -oH -aa -he -aa -oH -qd -fm -fm -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -jB -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(67,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ai -ak -ak -ak -ak -ak -ak -ak -ak -am -aq -aq -aq -aq -aq -aq -aq -aq -aq -aq -aq -aq -ar -aa -fe -fe -fe -fe -fe -fe -fe -hP -cv -cv -cv -cv -px -cv -cv -qt -pC -cv -cv -cv -qw -cv -oH -pW -pR -sy -oH -oH -cv -wV -fm -fm -aa -aa -aa -aa -jB -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(68,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -bb -bb -bb -bb -bb -bb -bb -bb -bb -ao -bb -bb -bb -bb -bb -bb -bb -bb -bb -bb -bb -bb -bb -aa -fe -fe -kP -aD -mb -aD -fe -pq -cv -cv -qt -pK -qC -pK -uK -wK -wO -pM -pB -pG -ov -qC -iE -pf -ln -oH -oH -cv -oH -wW -fm -fm -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(69,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -be -aa -aa -be -aa -aa -be -aa -aa -ao -aa -aa -aa -be -aa -aa -be -aa -aa -be -aa -aa -be -aa -fe -fe -dH -ty -lo -aK -pv -pq -cv -cv -cv -pK -qP -uG -pK -wL -pK -qK -pE -cv -qC -qD -wL -oH -xU -xW -pB -cv -mk -wW -fm -fm -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(70,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aj -aj -aj -aj -aj -aj -aj -aj -aj -ao -aa -aa -aa -be -aa -aa -be -aa -aa -be -aa -aa -be -aa -fe -fe -cB -aD -md -cm -co -bY -cv -eD -cv -pL -qR -pK -pK -uF -wP -pU -qN -gA -qC -qz -oH -sx -qC -oH -cv -qV -ou -wX -fm -fm -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(71,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ai -ak -ak -ak -ak -ak -ak -ak -ak -an -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -fe -fe -mg -aD -aD -fq -fe -pw -cv -rC -cv -pK -uF -uH -pK -wM -pK -gq -pF -cv -qf -qH -qC -qQ -xV -xX -cv -mk -ou -wX -fm -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(72,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -bb -bb -bb -bb -bb -bb -bb -bb -bb -ao -be -be -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -fe -fe -fe -fe -fe -fe -fe -pw -cv -cv -cu -pK -qC -pK -vv -qC -pK -qi -pN -cv -qC -qQ -qC -qC -qC -qC -rc -cv -qi -wY -fm -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aA -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(73,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -lY -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -be -aa -aa -be -aa -aa -be -aa -aa -ao -aa -aa -ab -ab -cd -cd -cd -cd -cd -mW -tE -cd -mC -tu -tH -cd -cd -pe -cd -cJ -eh -qM -cv -qE -cv -cv -py -cv -cv -qO -cv -cv -qU -qt -cv -qh -qo -cv -eD -qV -cv -At -cv -rj -tT -cl -pn -jg -mi -ml -mn -mq -sA -jt -aA -aA -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(74,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aj -aj -aj -aj -aj -aj -aj -aj -aj -ao -aa -aa -ab -ab -cn -ft -ck -vo -ts -sK -tF -ck -tF -vo -ck -ck -ck -ph -sK -oB -cs -ct -cz -uA -cz -qF -cz -ex -cz -rH -mp -uC -cz -cz -tL -Aq -mp -cz -fC -cz -qS -dv -cz -oG -dA -eo -pt -mh -mj -mm -mo -mY -sB -uD -aA -aA -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(75,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ai -ak -ak -ak -ak -ak -ak -ak -ak -an -be -be -ab -ab -cd -cg -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -fm -uE -uW -wH -mk -cu -cv -cv -cv -cc -cv -tC -cv -cv -cv -sI -cv -qz -hO -qt -cv -dw -qT -rQ -fm -aA -aA -aA -aA -aA -aA -aA -sC -wc -aA -aA -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(76,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -bb -bb -bb -bb -bb -bb -bb -bb -bb -ao -aa -aa -ab -ab -vn -cg -ab -aa -aa -aa -aa -aa -be -aa -aa -aa -aa -aa -aa -aa -fm -uL -wF -wF -pJ -pT -pJ -pJ -pJ -cc -pJ -pJ -wR -pJ -pJ -pJ -pJ -pJ -fF -pT -pJ -pJ -pJ -wZ -fm -aa -be -aa -aa -aa -aa -aA -sE -mn -aA -aA -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(77,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -be -aa -aa -be -aa -aN -ao -aa -aa -ab -ab -fs -pc -ab -aa -aa -aa -aa -aa -be -aa -aa -aa -aa -aa -aa -aa -fm -fm -fm -fm -fm -fm -fm -fm -fm -oC -fm -fm -fm -fm -fm -fm -fm -fm -fm -fm -fm -fm -fm -fm -fm -aa -be -aa -aa -aa -aa -aA -sJ -mn -aA -aA -aa -aa -aa -nO -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(78,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ae -ae -ae -ae -ae -ae -ae -ae -aJ -ae -ae -ab -ab -cd -cg -ab -aa -aa -aa -aa -aa -be -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ah -xY -uT -yq -ah -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -be -aa -aa -aa -aa -aA -tt -wd -aA -aA -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(79,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ae -ae -ae -ae -ae -ae -ae -ae -fr -ae -ae -ab -ab -ca -ci -ab -ae -aa -aa -aa -aa -be -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ah -xZ -bh -yr -ah -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -be -aa -aa -aa -aa -aA -pP -pQ -aA -aA -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(80,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -jB -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -jB -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ae -ae -aF -bj -eN -eN -eP -ae -Ah -ae -hH -ok -rN -vs -bz -vt -ae -aa -aa -aa -aa -be -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ah -yb -tV -yr -ah -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -be -aa -aa -aa -aa -aA -tR -sA -aA -aA -aV -aV -bA -bA -bA -bA -bA -bA -bA -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(81,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ae -ae -aI -mR -aG -aH -eQ -eR -aO -mr -nP -as -nl -as -bz -fi -ae -aa -aa -aa -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -yb -bh -yr -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -rg -ah -ah -ah -aa -aa -aV -aV -sD -ek -aV -aV -aV -aV -bA -bA -bA -bA -bA -bA -bA -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(82,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -nO -aa -aa -aa -ae -ae -aL -hC -bq -bq -bq -nL -nf -mX -mU -bq -bq -nX -cj -fj -ae -be -be -be -ah -xY -we -we -we -we -yl -zD -we -we -ym -we -yn -we -we -yo -ym -uh -uT -yt -ym -yu -yv -we -yn -we -ym -we -we -we -we -we -yx -yx -yx -sP -ah -be -be -aV -eX -tX -hB -jk -jq -jw -qq -bA -wi -pZ -vp -wU -bA -bA -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(83,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -jB -aa -aa -aa -aa -aa -aa -aa -aa -jB -ap -ae -ad -bg -bg -hI -nR -as -gY -hk -as -as -mP -nm -as -pA -ae -aa -aa -aa -ah -xZ -aZ -bF -bF -bF -bF -sr -bF -bF -uk -uM -Al -uO -uQ -sa -bF -uM -An -bF -bF -qX -sr -bF -bM -bF -uM -ut -bF -bF -bF -bF -bF -rL -af -yz -ah -ah -ah -aV -fH -ji -sR -sF -jm -bf -qB -bA -dj -dk -qu -tZ -bA -bA -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(84,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -qj -as -ap -bg -hg -bg -bg -mS -ne -gZ -mO -as -as -mQ -xR -as -uv -ae -aa -aa -aa -ah -ya -ry -rs -tv -tv -dM -tv -tv -dD -dP -tv -eU -tv -rw -fB -tv -ch -bh -dP -dD -se -sN -tv -tw -tW -tv -tv -tv -dP -dM -ux -tv -ub -sL -yA -we -yB -yC -ek -gJ -eV -cC -qp -jn -sV -sU -bA -uI -do -eB -uj -bA -bA -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(85,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -na -as -ay -mE -as -mH -mB -as -ng -as -nk -as -rt -bz -as -xJ -ae -aa -aa -aa -ah -yb -tG -sh -ah -ah -ah -ah -ah -ah -ah -aW -aW -aW -ah -ah -ah -ah -zC -ah -ah -ah -ah -aW -aW -aW -ah -ah -ah -ah -ah -ah -ah -uc -bh -yJ -yQ -yS -yQ -eM -eY -jj -eW -sS -eY -jp -js -de -hj -tS -dc -xb -bA -bA -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(86,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -jB -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -mD -fJ -aa -aa -aa -as -hc -nh -ay -mV -fo -nr -bz -nV -xK -ae -aa -aa -aa -ah -yb -Aa -yr -ah -aa -aa -aa -be -aa -aa -aa -aa -aa -aa -aa -bB -cP -ii -tB -bB -aa -aa -aa -aa -aa -aa -aa -be -aa -aa -aa -ah -yb -bh -yr -ah -ah -ah -aV -gR -sQ -tX -op -sT -cE -wb -bA -pO -ey -oA -tZ -bA -bA -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(87,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -lY -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -hd -mG -nd -ay -ay -aa -as -ns -dd -mA -od -bm -xL -ae -ah -ah -ah -ah -ot -bh -rv -ah -aa -aa -aa -be -aa -aa -aa -aa -aa -aa -aa -bB -cy -cV -uV -bB -aa -aa -aa -aa -aa -aa -aa -be -aa -aa -aa -ah -xZ -uT -yr -ah -aa -aa -aV -gS -ha -hN -jo -jv -ju -uq -bA -up -qk -jr -xc -bA -bA -aa -aa -aa -aa -aa -jB -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(88,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -jB -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -na -aa -aa -aa -ni -as -as -nc -pz -bL -cw -cx -aY -aY -aY -aY -yd -cI -yr -ah -aa -aa -aa -be -aa -aa -aa -aa -aa -aa -aa -bB -cQ -rd -za -bB -aa -aa -aa -aa -aa -aa -aa -be -aa -aa -aa -ah -yb -bh -ez -ah -aa -aa -aV -aV -aV -aV -aV -ek -eF -ek -bA -bA -bA -bA -bA -bA -bA -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(89,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -mz -aa -mw -jB -aa -na -aa -ay -as -eC -nj -pd -xL -cr -bK -dM -ux -tv -ye -bh -yN -ah -aa -aa -aa -be -ac -ac -hZ -hZ -hZ -ac -ac -ac -ac -Ao -ac -ac -ac -ac -hZ -hZ -hZ -ac -ac -be -aa -aa -aa -ah -ud -bh -yr -ah -aa -aa -aa -aa -aa -aa -by -ol -eZ -gz -bA -bA -bA -bA -bA -bA -bA -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(90,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -be -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -jB -aa -aa -nO -aa -aa -aa -aa -aa -nJ -aa -aa -mF -aa -aa -oq -aa -or -nU -zZ -bz -nr -Ab -ae -ah -ah -ah -ah -yb -bh -yr -ah -aa -aa -aa -ac -ac -eT -wg -wg -wg -wg -zh -ac -db -rI -rB -ac -eT -wg -wg -zn -ze -zh -ac -ac -aa -aa -aa -ah -yb -bh -yr -ah -aa -aa -aa -aa -aa -aa -by -iU -eZ -sH -by -by -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(91,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -fc -ag -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -jB -aa -aa -aa -aa -aa -aa -aa -aa -aw -as -as -as -nv -as -xM -ae -aa -aa -aa -ah -xZ -bh -yr -ah -aa -aa -aa -ac -eT -bC -bC -gE -bC -bC -zi -ac -wu -Ap -rB -ac -sg -rZ -bC -eI -bC -bC -zh -ac -aa -aa -aa -ah -yb -bh -rv -ah -aa -aa -aa -aa -aa -aa -fg -tY -ld -hu -by -by -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(92,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -nO -aa -bd -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -bt -aa -aa -aa -aa -aa -aa -aa -aa -lY -aa -aa -aa -aa -aa -nM -mu -gn -mI -mJ -ig -xN -ae -aa -aa -aa -ah -yb -bh -yr -aW -aa -aa -aa -bx -sb -bC -bC -bC -bC -bC -zj -ac -hh -dp -sc -ac -sb -eI -eH -eI -eH -sf -zj -bx -aa -aa -aa -hs -ue -uT -yr -ah -aa -aa -aa -aa -aa -aa -fg -eg -le -ol -by -by -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(93,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -jB -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -mw -aa -aa -aa -aa -aa -bt -aa -aa -na -as -bl -mt -xp -bN -as -xM -ae -aa -aa -aa -ah -yf -bn -br -aW -aa -aa -aa -bx -sb -rP -bC -gE -rP -bC -zj -zs -kg -dm -yY -zy -sb -eH -eI -sm -bC -eH -zj -bx -aa -aa -aa -hs -uf -uY -yK -ah -aa -aa -aa -aa -aa -aa -by -gl -eZ -vT -by -by -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(94,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -jB -aa -nb -aa -aa -aa -aa -aa -aa -ay -mK -mv -mT -jM -mK -xO -ae -aa -aa -aa -ah -yb -bh -yr -aW -aa -aa -aa -bx -sb -bC -bC -rE -bC -eI -zj -ac -zu -dm -zw -ac -sb -rP -bC -sn -eH -bC -zj -bx -aa -aa -aa -hs -yb -tG -yr -ah -aa -aa -aa -aa -aa -aa -by -hr -hQ -hr -by -by -by -by -by -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(95,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -jB -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -jB -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -nO -aa -jB -aa -ms -aa -as -mx -dr -bz -nR -xM -ae -aa -aa -aa -ah -yb -tG -rv -ah -aa -aa -aa -ac -sg -bC -bC -bC -bC -bC -zf -ac -wu -dm -rB -ac -vf -bC -bC -vg -rZ -bC -zi -ac -aa -aa -aa -ah -xZ -bh -yr -ah -aa -aa -aa -by -by -by -by -ee -fa -ee -by -by -by -by -by -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(96,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -jB -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -mw -aa -aa -aa -lY -as -ay -my -xQ -rK -as -xN -ae -aa -aa -aa -ah -yb -ow -yr -ah -aa -aa -aa -ac -si -vB -vB -vB -vB -zf -ac -ac -wu -dm -rB -ac -ac -zm -vB -zo -vB -zp -zf -ac -aa -aa -aa -ah -yb -uZ -yr -ah -aa -aa -aa -by -cH -gM -hR -hT -dN -vW -fQ -im -fT -by -by -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(97,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -jB -aa -aa -aa -aa -aa -gN -aa -aa -aa -aa -aa -aa -aa -aa -nr -as -nr -or -nv -rX -xM -ae -be -be -be -ah -yg -bh -yr -ah -be -be -be -ac -ac -ac -km -km -km -ac -ac -dt -fv -dm -wC -wI -ac -ac -km -zR -km -ac -ac -ac -be -be -be -ah -yb -uT -yr -ah -be -be -be -by -eu -gc -gl -ei -cF -vX -fQ -fP -fT -by -by -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(98,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -lY -jB -aa -hd -aa -aa -aa -aa -jB -aa -he -aa -na -be -as -rM -vq -vr -bz -vr -xP -ae -aa -aa -aa -ah -yb -ry -yr -ah -aa -aa -aa -ac -cN -hm -kn -kn -kn -wj -hm -fv -uB -rI -bD -wJ -hm -wj -kn -wE -kn -hm -wG -ac -aa -aa -aa -ah -yb -bh -yr -ah -aa -aa -aa -by -fI -ss -gB -eg -eZ -vY -fQ -tl -vZ -by -by -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(99,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ae -ae -ae -aM -bO -ae -ae -ae -aa -aa -aa -ah -yh -em -bv -ah -aa -aa -aa -ac -hn -lj -gO -kd -rF -kf -wk -fE -wk -kh -wk -zE -wk -ws -ki -vi -kk -bD -hi -ac -aa -aa -aa -ah -xZ -uT -yr -ah -aa -aa -aa -by -fX -ge -ga -tn -gC -wa -fQ -gj -fT -by -by -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(100,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -lY -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -be -ae -ae -ae -jL -bz -ae -aa -aa -aa -aa -aa -ah -yb -bh -yr -ah -aa -aa -aa -ac -kO -bD -bD -bD -bD -rB -ac -ac -ac -AB -ac -ac -ac -wt -bD -vj -hl -bD -bD -ac -aa -aa -aa -ah -yh -em -yL -ah -aa -aa -aa -by -fZ -fW -gm -eg -sv -xd -fQ -tm -fT -by -by -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(101,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -jB -aa -aa -aa -aa -aa -aa -aa -bo -aa -aa -aa -aa -aR -aa -bt -aa -aa -jB -aa -aa -oQ -aa -aa -ae -ae -gI -vu -ae -aa -aa -aa -aa -aa -ah -yb -bh -yr -ah -aa -aa -aa -ac -li -bD -hi -bD -bD -rG -ac -eA -oo -qr -bD -ku -ac -wu -lm -hp -mf -vm -wp -ac -aa -aa -aa -ah -yb -bh -yr -ah -aa -aa -aa -by -gb -eg -gh -gl -eZ -xe -fR -fS -fU -by -by -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(102,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -lY -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -jB -aa -aa -aa -aa -aa -aa -aa -ag -ag -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -as -ap -as -mM -ae -aa -aa -aa -aa -aa -hs -yb -bh -sh -aW -aa -aa -aa -bx -bD -uB -oz -kp -bD -zT -ac -fA -bD -dm -bI -vL -ac -wv -kp -kc -hi -lm -uB -bx -aa -oE -aa -aW -yb -bh -yr -hs -aa -aa -aa -by -rD -ff -ff -ff -tk -xf -xh -eg -xk -by -by -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(103,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -bd -ag -ag -be -aa -aa -jB -aa -aa -aa -aa -aa -lY -aa -aa -aa -jB -aa -aa -aa -aa -aa -aa -lY -aa -nr -ae -mL -bz -ae -aa -aa -aa -aa -aa -hs -yb -tG -yr -aW -aa -aa -aa -bx -bD -lm -ll -bD -bD -sk -ac -hL -bI -qr -sd -kx -ac -ww -bD -hi -ll -kr -bD -bx -aa -aa -aa -aW -yb -bh -yM -hs -aa -aa -aa -by -gg -gw -gw -st -eZ -eg -gk -eg -xl -by -by -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(104,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ag -fc -bP -aa -ag -ag -be -aa -aa -aa -aa -jB -aa -aa -aa -aa -oN -aa -aa -aa -aa -aa -aa -jB -aa -aa -at -bs -bZ -hU -bs -bs -bs -bs -ah -ah -ah -yg -bh -yr -ah -aa -aa -aa -ac -cM -uB -tU -bD -bD -rB -ac -kt -bD -dm -sq -kw -ac -zV -bD -hq -kv -ve -bD -ac -aa -aa -aa -ah -yb -bh -yr -ah -aa -aa -aa -by -gi -tY -eg -eg -wh -gp -st -gl -xm -by -by -aa -aa -aa -aa -aa -aa -jB -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(105,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -fc -bd -aa -be -oc -ag -aa -aa -aR -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -oR -aa -aa -nt -au -az -kE -oJ -az -az -ce -rY -we -we -yi -bh -fb -ah -aa -aa -aa -ac -of -bD -bD -bD -lm -rB -ac -ac -ac -AB -ac -ac -ac -wu -bD -bD -bD -bD -sd -ac -aa -aa -aa -ah -yb -bh -yr -ah -aa -aa -aa -by -gs -fY -gw -eg -os -te -xS -eg -xm -by -by -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(106,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -jB -aa -aa -aa -aa -aa -aa -aa -aa -aa -fc -ag -hf -ag -aa -aa -aa -aa -aa -aa -aa -aa -aa -lz -aa -aa -aa -aa -aT -aa -aa -aa -aa -aa -oS -aa -oY -bT -nH -nW -kB -az -kB -cT -tv -tv -tv -ye -bh -rv -ah -lY -aa -aa -ac -hi -bD -ho -ke -ke -so -wq -zG -wq -yX -wq -zF -wr -wx -kj -kj -kl -xH -xH -ac -aa -aa -aa -ah -xZ -bh -yN -ah -aa -aa -aa -by -gs -gw -fY -eg -pS -tg -xT -eg -xm -by -by -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(107,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ag -ag -aa -aa -aa -aa -aa -aa -aa -aa -aa -jB -aa -bt -aa -aa -aa -aa -aa -qj -aR -aa -aa -aa -oZ -lS -lR -og -oK -oL -oP -bs -ah -ah -ah -yb -bh -yr -ah -aa -aa -aa -ac -eG -jh -vh -vh -vh -wl -wn -wo -bD -dm -bD -wA -wn -wl -vh -vh -vh -xI -yV -ac -aa -aa -aa -ah -yb -bh -yr -ah -aa -aa -aa -by -gi -gz -st -eg -go -gt -fW -tn -xm -by -by -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(108,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -lY -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ua -aa -jB -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -au -pu -lT -nN -du -du -du -du -bs -be -be -ah -yb -bh -yr -ah -be -be -be -ac -ac -ac -ko -ko -ko -ac -ac -wy -zU -tz -wA -wD -ac -ac -zQ -zS -ko -ac -ac -ac -be -be -be -ah -yb -bh -yr -ah -be -be -be -by -gu -gw -fY -gk -eZ -eg -eg -gl -xm -by -by -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(109,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -jB -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -jB -aa -aa -bt -aa -aa -aa -aa -aa -aa -aa -aa -aa -aR -aa -oO -aa -aa -lL -at -lB -az -az -az -du -jW -jF -jY -bs -aa -aa -ah -yj -rk -bQ -ah -aa -aa -lY -ac -tK -wg -wg -ze -wg -zg -ac -ac -wu -dm -rB -ac -ac -eT -wg -wg -wg -wg -zh -ac -aa -aa -aa -ah -yb -bh -yr -ah -aa -aa -aa -by -gs -fY -gw -eg -gy -gw -gw -eg -xm -by -by -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(110,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aR -aa -aa -aa -aR -aa -aa -lV -aa -aa -aa -au -lH -az -dh -az -du -jC -aC -lw -bs -aa -aa -ah -yb -bh -cR -ah -aa -aa -aa -ac -sg -eI -rP -bC -bC -bC -zh -ac -wu -dm -rB -ac -tK -bC -rZ -bC -lg -eI -zi -ac -aa -aa -aa -ah -ug -bh -yr -ah -ah -ah -ah -by -gv -eg -eg -tn -gy -gw -gw -st -xl -by -by -aa -aa -aa -jB -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(111,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -jB -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -au -kD -az -kB -az -ib -jV -lJ -vV -bs -jB -aa -ah -yb -tx -yr -aW -aa -aa -aa -bx -sb -bC -rO -tI -bJ -lZ -zj -ac -zv -tj -zx -ac -sb -rP -bC -vl -eI -bC -zj -bx -aa -aa -aa -aW -yb -bh -yO -yR -zY -yT -yU -fz -eg -st -gz -ej -eb -ev -hV -hv -xm -by -by -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(112,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -jB -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -at -aa -au -au -jP -au -bk -lM -au -kE -az -dh -az -du -lx -nw -jY -bs -aa -aa -ah -yk -bn -br -hS -aa -jB -aa -bx -sb -bC -rZ -eJ -sj -bJ -zj -zt -kg -dm -yZ -zz -sb -bC -sl -eI -rP -sG -zj -bx -aa -aa -aa -aW -uf -et -yK -ah -ah -ah -ah -by -gL -gU -gU -vc -hQ -xg -xi -xj -xn -by -by -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(113,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -jB -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -lY -aa -aa -aa -aa -aa -aa -lQ -aa -aa -au -bs -au -bk -au -au -bV -az -dh -kE -az -lU -nN -du -du -du -du -bs -aa -aa -ah -ri -rk -bQ -hS -aa -aa -sW -bx -sb -bC -eI -rP -bJ -bC -zk -ac -wz -dq -wB -ac -zl -bC -lg -bC -sp -bC -zj -bx -aa -aa -aa -aW -yb -bh -yr -ah -aa -aa -aa -by -by -by -by -fg -fa -sz -by -by -by -by -by -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(114,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -jB -aa -aa -aa -aa -aa -aa -aa -aa -au -ax -az -au -lK -sO -az -az -dJ -kF -kB -az -nS -du -nY -aB -lX -bs -jB -aa -rg -rm -qZ -ri -ah -aa -aa -aa -ac -vf -rP -bC -rZ -eI -bC -zi -ac -wu -rI -rB -ac -sg -bC -rZ -bC -lg -bC -zf -ac -aa -aa -aa -ah -yb -bh -rv -ah -aa -aa -aa -aa -aa -aa -by -eg -eZ -vd -by -by -by -by -by -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(115,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -jB -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -bs -bs -az -az -az -az -az -az -az -kE -kB -az -az -du -aB -jG -kS -bs -aa -lY -rb -ri -ra -ri -ah -aa -jB -lY -ac -ac -vf -vB -vB -vB -vB -zf -ac -dl -dm -rB -ac -zm -vB -vB -vB -vB -zf -ac -ac -aa -aa -aa -ah -yb -bh -yr -ah -aa -aa -aa -aa -aa -aa -by -tY -om -vT -by -by -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(116,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -bs -bs -du -du -du -du -du -cb -fu -kV -lF -mZ -az -ia -jE -nI -vE -bs -aa -aa -oF -aa -qY -rb -aa -lY -aa -aa -be -ac -ac -hZ -hZ -hZ -ac -ac -ac -ac -vk -ac -ac -ac -ac -hZ -hZ -hZ -ac -ac -be -aa -aa -aa -ah -yb -bh -yr -ah -aa -aa -aa -aa -aa -aa -fg -hr -hQ -on -by -by -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(117,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -bs -bs -lX -jx -aB -kT -du -az -az -kV -lG -az -cL -du -jK -kU -lX -bs -aa -nO -aa -aa -aa -aa -aa -aa -ru -aa -aa -jB -aa -aa -aa -aa -aa -aa -bB -fy -ii -zb -bB -aa -aa -aa -aa -aa -aa -aa -be -aa -aa -aa -ah -yb -bh -yr -ah -aa -aa -aa -aa -aa -aa -fg -eg -vb -sw -by -by -aa -jB -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -jB -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(118,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -jB -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -bs -bs -mN -aB -aB -jQ -du -az -hE -kV -lI -nq -dh -du -du -du -du -bs -aa -jB -aa -aa -qj -aa -jB -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -bB -ds -tA -zc -bB -aa -aa -aa -aa -aa -aa -aa -be -aa -aa -aa -ah -xZ -tG -yr -ah -aa -aa -aa -aa -aa -aa -by -iU -AA -tn -by -by -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(119,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -bs -bs -jN -aB -jz -aB -ia -az -hF -kV -lG -az -nT -du -ly -aE -jA -bs -aa -aa -aa -aa -aa -aa -dQ -aa -aa -jB -be -aa -lY -aa -aa -aa -aa -aa -bB -ih -rh -zd -bB -aa -aa -aa -aa -aa -aa -aa -be -aa -aa -aa -ah -yh -em -yL -ah -aa -aa -aa -aa -aa -aa -by -gl -hY -eg -by -by -by -by -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(120,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -bs -bs -lX -aB -aB -nQ -du -az -az -kE -az -nu -nN -du -jH -jI -lu -bs -aa -aa -lY -aa -aQ -aa -aa -rg -ah -ah -ah -ah -ah -aW -aW -aW -ah -ah -ah -ah -wm -ah -ah -ah -ah -aW -aW -aW -ah -ah -ah -ah -ah -ah -ah -yb -bh -yr -ah -aa -aa -aa -aP -aP -aP -aP -iV -en -ti -aP -aP -aP -aP -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(121,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -lY -aa -aa -aa -aa -aa -aa -aa -aa -jB -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -bs -bs -du -du -du -du -du -cf -az -lq -az -kB -kB -ic -aE -jU -vF -bs -jB -aa -qY -aa -aa -aa -qY -oF -rm -we -yx -we -eL -we -gd -hw -ym -we -we -zB -bh -we -we -vQ -ym -we -gd -we -we -we -we -we -ym -we -we -uh -tV -yr -ah -aa -aa -aa -aP -gx -hD -hW -jR -ep -hD -hD -xq -aP -aP -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(122,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -bs -bs -jY -aC -aC -cU -du -az -az -kE -kB -az -az -du -hy -aE -jA -bs -aa -aa -rg -qY -re -rf -bF -rf -rn -bF -rn -es -bF -sr -bR -uM -bF -bF -sr -uM -qs -bF -bF -bF -bF -uM -bR -bF -bF -bF -sr -bF -bF -es -ul -tO -eK -yz -ah -aa -aa -aa -aP -gF -su -zH -el -eq -ew -ec -xr -aP -aP -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(123,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -bs -bs -vx -aC -aC -nK -du -cb -dh -lr -az -dh -az -du -du -du -du -bs -ur -be -ah -rb -ux -tv -rb -tv -bS -tv -eO -bh -rs -tv -un -tv -tv -yD -tv -yE -tv -um -tv -tv -tv -yG -un -tv -dM -tv -tv -tv -yH -uX -rs -um -tv -yP -ah -be -be -be -aP -gH -tp -Aw -ec -ep -ec -ec -xs -aP -aP -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(124,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -bs -bs -ls -jy -bU -aC -ib -az -az -lt -az -dh -az -dJ -az -oM -oT -vG -uz -aa -ah -ah -ah -ah -ah -ah -ah -ah -yb -bh -rv -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -yb -bh -yr -ah -ah -ah -ah -aa -aa -aa -aP -gF -gG -fp -ec -rR -ec -Ay -uN -aP -aP -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(125,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -bs -bs -jY -aC -aC -no -du -az -id -kV -lG -cL -dh -az -az -dh -oU -kb -uz -jB -aa -be -aa -aa -lY -aa -nO -ah -bK -bi -rJ -ah -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ah -yb -bh -yr -ah -aa -be -aa -aa -aa -aa -aP -gT -ec -gK -ec -tQ -tD -rq -xu -aP -aP -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(126,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -bs -bs -du -du -du -du -du -az -kz -kV -lG -kB -az -du -du -du -du -bs -aa -dy -dy -dy -dy -dy -dy -dy -dy -dy -cS -bG -cS -dy -dy -dy -dy -dy -dy -dy -dy -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ah -yb -bh -rv -ah -aa -be -aa -aa -aa -aa -aP -gV -ec -oi -oi -ep -ec -vU -rr -aP -aP -aa -aa -aa -jB -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(127,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -bs -bs -aS -az -aX -bp -bX -az -az -kV -lN -az -az -du -aC -aC -jJ -bs -aa -dy -df -hK -kH -kQ -uP -vw -uP -uP -uP -bH -uP -uP -vO -xz -uP -xA -uP -xC -dy -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ah -bK -bh -rJ -ah -aa -be -aa -aa -aa -aa -aP -gW -ec -va -ec -ep -ec -xo -oj -aP -aP -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(128,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -bs -bs -aU -az -ba -bu -az -cL -kA -lA -lP -az -nN -du -jS -aC -aC -bs -aa -dy -fk -cD -cD -mc -cD -ky -ky -cD -cD -qG -qJ -kX -cD -mc -qJ -qJ -sZ -xD -dy -aa -aa -aa -aa -aa -aa -av -av -av -av -av -cX -ox -cX -av -av -av -av -av -aP -aP -aP -hb -ec -ec -Ax -tq -oh -Az -tb -aP -aP -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(129,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -bs -bs -du -du -du -du -du -az -kB -kE -az -nF -az -ib -no -jO -vD -bs -aa -dy -oV -qm -ky -pa -th -ky -ob -cD -pb -kq -kC -pa -cD -pD -kC -kJ -rp -xD -dy -aa -aa -aa -aa -aa -aa -av -dX -iu -gf -iX -iu -ja -iu -iX -iu -vR -vS -cX -ed -hD -hD -ht -oh -tp -ec -ep -ec -xo -gX -aP -aP -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(130,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -jB -aa -aa -aa -aa -bs -bs -lf -aE -aE -np -du -cZ -az -kE -az -az -az -du -jT -nx -jY -bs -aa -dy -oW -ky -ob -kX -mc -lD -ky -cD -pD -kI -kC -pa -tJ -rl -kG -kL -pa -xE -dy -aa -aa -aa -aa -aa -aa -av -fD -fl -gP -iF -fl -it -fl -tf -fl -iv -uy -ea -er -hG -iB -hx -oy -hG -zK -vM -zN -AD -iL -aP -aP -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(131,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -bs -bs -vy -ma -lW -aE -du -az -dh -kE -az -az -az -du -du -du -du -bs -dy -dy -fk -oX -cD -mc -cD -vz -nZ -cD -pD -dG -kJ -qW -cD -pD -kN -kK -rz -xD -dy -dy -dy -dy -dy -dy -dy -av -gQ -tN -dU -hA -dU -fV -gD -iK -hX -iw -xv -av -aP -aP -aP -aP -aP -aP -aP -qy -aP -aP -iM -aP -aP -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(132,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -bs -bs -lv -ka -lp -lO -ic -dh -az -lC -lR -lR -lR -cp -cq -ql -cq -cq -cq -cA -cq -cW -to -da -cO -vA -fn -cq -cq -qI -qL -cq -cq -cq -ro -qL -dE -cq -ef -cq -kY -cq -rA -dS -Ar -dK -dY -tc -As -iG -lc -iO -iO -iO -nD -jc -xw -av -aP -aP -aP -aP -aP -aP -aP -fh -aP -aP -iN -aP -aP -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(133,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -bs -bs -jD -aE -aE -nn -du -az -az -lE -kB -nG -az -ce -kX -cD -vH -nZ -cD -cS -hJ -iQ -kM -di -uS -vC -kM -kM -kM -fw -kM -vN -vP -uS -la -xa -xB -xF -cS -cD -vH -cD -nA -cD -nB -cX -in -nC -dU -hA -dU -gr -iJ -iP -dU -iW -xw -av -av -be -aa -aa -be -aa -aP -iZ -aP -jb -jX -jZ -pX -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(134,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -bs -bs -bs -bs -bs -bs -bs -bs -bs -bs -bs -bs -bs -bs -dy -dy -dy -dy -fd -fd -fd -fd -fd -dn -fd -fd -fd -fd -fd -fd -fd -fd -fd -fd -me -fd -fd -fd -fd -fd -dy -dy -dy -dy -dy -av -iC -dZ -dZ -ir -dZ -dZ -dZ -dT -dZ -nC -xx -av -av -zJ -zJ -zJ -zJ -zJ -AC -zL -zJ -zJ -zJ -zJ -zJ -zJ -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(135,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -jB -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -bs -bs -bs -bs -bs -bs -bs -bs -bs -bs -bs -bs -bs -bs -dy -dy -dy -dy -fd -fd -nE -cY -uU -dz -zW -ij -vJ -sY -cY -ij -cY -vJ -ta -il -uR -vK -jd -uw -fd -fd -dy -jf -dy -dy -dy -av -dZ -iY -dZ -td -iH -aa -dZ -dZ -dZ -dZ -xx -av -av -zP -Ad -Ad -Ad -Ad -Ad -zO -Af -Af -Af -Af -Af -Ag -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -rW -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(136,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -fd -fd -kW -cY -dg -dB -dC -dL -rx -cY -cY -dL -cY -kZ -ik -dF -Am -dI -cY -je -fd -ix -aa -aa -aa -aa -aa -iy -dW -aa -aa -aa -dT -aa -aa -aa -dZ -io -dZ -av -av -zM -zM -zM -zM -zM -zM -zL -zM -zM -zM -zM -zM -zM -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(137,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -jB -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -jB -aa -aa -aa -fd -fd -kW -oa -uw -fd -ip -fd -ip -fd -ip -fd -if -fd -if -fd -eE -cY -cY -iq -fd -ix -aa -aa -aa -aa -aa -lb -aa -aa -aa -aa -aa -iR -jB -iT -aa -Av -xy -av -av -be -aa -aa -be -aa -aa -zL -aa -aa -be -aa -aa -be -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(138,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -fd -fd -lh -cY -uw -fd -ie -fd -ny -fd -sX -fd -Ak -fd -nz -fd -fx -cY -vI -uw -fd -dO -aa -aa -iz -aa -aa -aa -fG -aa -aa -aa -aa -aa -aa -aa -dT -dZ -dZ -av -av -zJ -zJ -zJ -zJ -zJ -zJ -zL -zJ -zJ -zJ -zJ -zJ -zJ -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(139,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -fd -fd -fd -fd -fd -fd -fd -fd -fd -fd -fd -fd -fd -fd -fd -fd -fd -fd -fd -fd -fd -aa -aa -aa -aa -aa -aa -dR -fK -iD -aa -jB -aa -aa -aa -aa -dT -dZ -dZ -av -av -zP -Ad -Ad -Ad -Ad -Ad -zO -Af -Af -Af -Af -Af -Ag -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(140,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -lY -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -fd -fd -fd -fd -fd -fd -fd -fd -fd -fd -fd -fd -fd -fd -fd -fd -fd -fd -fd -fd -fd -aa -aa -aa -aa -aa -jB -aa -aa -aa -aa -jB -aa -iS -aa -aa -aa -dZ -av -av -av -zM -zM -zM -zM -zM -zM -zL -zM -zM -zM -zM -zM -zM -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(141,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -lY -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -dT -iy -av -av -av -be -aa -aa -be -aa -aa -zL -aa -aa -be -aa -aa -be -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(142,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -qA -aa -aa -aa -aa -aa -zJ -zJ -zJ -zJ -zJ -zJ -zL -zJ -zJ -zJ -zJ -zJ -zJ -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(143,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -qa -aa -aa -aa -aa -aa -jB -aa -aa -aa -aa -aa -nO -aa -aa -aa -aa -aa -aa -aa -aa -aa -zP -Ad -Ad -Ad -Ad -Ad -zO -Af -Af -Af -Af -Af -Ag -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(144,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -iY -aa -aa -aa -iA -aa -aa -aa -aa -aa -aa -jB -aa -aa -aa -aa -aa -aa -aa -zM -zM -zM -zM -zM -zM -zL -zM -zM -zM -zM -zM -zM -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(145,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -jB -aa -aa -aa -aa -aa -aa -aa -jB -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -be -aa -aa -be -aa -aa -zL -aa -aa -be -aa -aa -be -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(146,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -jB -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -bt -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -iI -bt -aa -aa -lY -aa -aa -aa -aa -zJ -zJ -zJ -zJ -zJ -zJ -zL -zJ -zJ -zJ -zJ -zJ -zJ -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(147,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -pV -aa -aa -lY -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -zP -Ad -Ad -Ad -Ad -Ad -zO -Af -Af -Af -Af -Af -Ag -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(148,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -jB -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -iY -aa -aa -zM -zM -zM -zM -zM -zM -Ae -zM -zM -zM -zM -zM -zM -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(149,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -iz -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(150,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -jB -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -jB -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(151,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -qA -aa -aa -aa -aa -pY -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(152,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -lY -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(153,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -lY -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -jB -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(154,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(155,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -jB -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(156,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -jB -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -kR -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(157,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -bt -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(158,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(159,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(160,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -lY -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -bt -aa -aa -aa -aa -aa -aa -aa -jB -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(161,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -bt -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(162,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -lY -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(163,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(164,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(165,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -lY -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(166,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -rU -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -lY -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(167,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(168,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(169,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(170,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(171,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(172,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(173,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(174,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(175,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(176,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(177,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(178,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(179,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(180,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(181,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(182,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(183,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(184,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(185,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(186,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(187,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(188,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(189,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(190,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(191,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(192,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(193,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(194,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(195,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(196,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(197,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(198,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(199,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(200,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} diff --git a/maps/away/meatstation/meatstation_areas.dm b/maps/away/meatstation/meatstation_areas.dm deleted file mode 100644 index a05cf6f2cf875..0000000000000 --- a/maps/away/meatstation/meatstation_areas.dm +++ /dev/null @@ -1,62 +0,0 @@ -/area/meatstation - icon = 'maps/away/meatstation/meatstation_sprites.dmi' - -/area/meatstation/cargo - name = "Cargo Dock" - icon_state = "mscargo" - -/area/meatstation/cargooffice - name = "Cargo Office" - icon_state = "mscargooffice" - -/area/meatstation/nwhallway - name = "NW Hallway" - icon_state = "msnwhallway" - -/area/meatstation/engineering - name = "Engineering" - icon_state = "msengineering" - -/area/meatstation/dorm - name = "Dorms" - icon_state = "msdorm" - -/area/meatstation/mess - name = "Mess" - icon_state = "msmess" - -/area/meatstation/bathroom - name = "Bathroom" - icon_state = "msbathroom" - -/area/meatstation/kitchen - name = "Kitchen" - icon_state = "mskitchen" - -/area/meatstation/storage - name = "Storage" - icon_state = "msstorage" - -/area/meatstation/hydroponics - name = "Hydroponics" - icon_state = "mshydroponics" - -/area/meatstation/medical - name = "Medical" - icon_state = "msmedical" - -/area/meatstation/armory - name = "Armory" - icon_state = "msarmory" - -/area/meatstation/swhallway - name = "SW Hallway" - icon_state = "msswhallway" - -/area/meatstation/centerhallway - name = "Central Hallway" - icon_state = "mscenterhallway" - -/area/meatstation/lab - name = "Xenobio Lab" - icon_state = "mslab" \ No newline at end of file diff --git a/maps/away/meatstation/meatstation_left_hand.dmi b/maps/away/meatstation/meatstation_left_hand.dmi deleted file mode 100644 index bc2577c82bc62..0000000000000 Binary files a/maps/away/meatstation/meatstation_left_hand.dmi and /dev/null differ diff --git a/maps/away/meatstation/meatstation_right_hand.dmi b/maps/away/meatstation/meatstation_right_hand.dmi deleted file mode 100644 index 0bde4a277d5b3..0000000000000 Binary files a/maps/away/meatstation/meatstation_right_hand.dmi and /dev/null differ diff --git a/maps/away/meatstation/meatstation_sprites.dmi b/maps/away/meatstation/meatstation_sprites.dmi deleted file mode 100644 index 313c1d4cd9717..0000000000000 Binary files a/maps/away/meatstation/meatstation_sprites.dmi and /dev/null differ diff --git a/maps/away/mining/mining-asteroid.dmm b/maps/away/mining/mining-asteroid.dmm deleted file mode 100644 index 3391c20874dac..0000000000000 --- a/maps/away/mining/mining-asteroid.dmm +++ /dev/null @@ -1,40807 +0,0 @@ -//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE -"aa" = ( -/turf/space, -/area/space) -"ab" = ( -/turf/unsimulated/mask, -/area/mine/unexplored) -"af" = ( -/turf/simulated/floor/asteroid, -/area/mine/explored) -"aj" = ( -/turf/simulated/wall/r_wall, -/area/djstation) -"ak" = ( -/obj/random/junk, -/turf/simulated/floor/asteroid, -/area/mine/explored) -"al" = ( -/obj/random/trash, -/turf/simulated/floor/tiled/airless, -/area/djstation) -"am" = ( -/obj/machinery/constructable_frame/computerframe, -/turf/simulated/floor/airless, -/area/djstation) -"an" = ( -/obj/machinery/tele_projector, -/turf/simulated/floor/airless, -/area/djstation) -"ao" = ( -/obj/machinery/tele_pad, -/turf/simulated/floor/airless, -/area/djstation) -"ap" = ( -/obj/structure/table/glass, -/obj/random/maintenance, -/turf/simulated/floor/airless, -/area/djstation) -"aq" = ( -/obj/structure/table/glass, -/obj/random/maintenance, -/turf/simulated/floor/tiled/airless, -/area/djstation) -"ar" = ( -/turf/simulated/floor/tiled/airless, -/area/djstation) -"as" = ( -/obj/random/junk, -/turf/simulated/floor/tiled/airless, -/area/djstation) -"at" = ( -/turf/simulated/floor/airless, -/area/djstation) -"av" = ( -/obj/structure/table/glass, -/obj/random/loot, -/turf/simulated/floor/airless, -/area/djstation) -"aw" = ( -/obj/random/closet, -/obj/random/loot, -/turf/simulated/floor/tiled/airless, -/area/djstation) -"ax" = ( -/obj/random/junk, -/obj/machinery/embedded_controller/radio/airlock/airlock_controller{ - id_tag = "lp_north_airlock"; - pixel_x = 24; - tag_airpump = "lp_north_pump"; - tag_chamber_sensor = "lp_north_sensor"; - tag_exterior_door = "lp_north_outer"; - tag_interior_door = "lp_north_inner" - }, -/turf/simulated/floor/airless, -/area/djstation) -"ay" = ( -/obj/machinery/constructable_frame/computerframe, -/turf/simulated/floor/tiled/airless, -/area/djstation) -"az" = ( -/obj/structure/table/rack, -/obj/random/maintenance, -/obj/random/tool, -/turf/simulated/floor/airless, -/area/djstation) -"aA" = ( -/obj/structure/table/reinforced, -/obj/random/maintenance, -/turf/simulated/floor/tiled/airless, -/area/djstation) -"aB" = ( -/obj/random/trash, -/turf/simulated/floor/airless, -/area/djstation) -"aC" = ( -/obj/structure/table/reinforced, -/turf/simulated/floor/airless, -/area/djstation) -"aE" = ( -/obj/structure/table/reinforced, -/obj/random/loot, -/turf/simulated/floor/tiled/airless, -/area/djstation) -"aF" = ( -/obj/structure/table/reinforced, -/turf/simulated/floor/tiled/airless, -/area/djstation) -"aG" = ( -/obj/random/maintenance, -/turf/simulated/floor/tiled/airless, -/area/djstation) -"aH" = ( -/obj/structure/barricade, -/turf/simulated/floor/airless, -/area/djstation) -"aI" = ( -/obj/random/closet, -/turf/simulated/floor/tiled/airless, -/area/djstation) -"aJ" = ( -/obj/structure/table, -/turf/simulated/floor/tiled/airless, -/area/djstation) -"aK" = ( -/obj/machinery/door/airlock/maintenance, -/turf/simulated/floor/tiled/airless, -/area/djstation) -"aL" = ( -/turf/simulated/wall, -/area/djstation) -"aM" = ( -/obj/structure/grille, -/turf/simulated/floor/airless, -/area/djstation) -"aN" = ( -/obj/structure/grille/broken, -/obj/random/trash, -/turf/simulated/floor/airless, -/area/djstation) -"aO" = ( -/obj/random/maintenance, -/turf/simulated/floor/airless, -/area/djstation) -"aP" = ( -/obj/structure/grille/broken, -/turf/simulated/floor/airless, -/area/djstation) -"aQ" = ( -/obj/random/medical, -/turf/simulated/floor/tiled/airless, -/area/djstation) -"aR" = ( -/obj/structure/bed, -/turf/simulated/floor/tiled/airless, -/area/djstation) -"aS" = ( -/turf/unsimulated/mask, -/area/mine/explored) -"aT" = ( -/obj/random/loot, -/turf/simulated/floor/tiled/airless, -/area/djstation) -"aU" = ( -/obj/random/closet, -/obj/random/maintenance, -/turf/simulated/floor/airless, -/area/djstation) -"aV" = ( -/obj/structure/flora/pottedplant/dead, -/turf/simulated/floor/tiled/airless, -/area/djstation) -"aW" = ( -/obj/machinery/door/airlock/maintenance, -/turf/simulated/floor/airless, -/area/djstation) -"aX" = ( -/obj/structure/table/steel, -/obj/random/maintenance, -/turf/simulated/floor/tiled/airless, -/area/djstation) -"aY" = ( -/obj/random/closet, -/turf/simulated/floor/airless, -/area/djstation) -"aZ" = ( -/obj/structure/table/rack, -/obj/random/maintenance, -/obj/random/maintenance, -/obj/random/action_figure, -/turf/simulated/floor/tiled/airless, -/area/djstation) -"ba" = ( -/obj/structure/table/rack, -/obj/random/maintenance, -/obj/random/maintenance, -/turf/simulated/floor/tiled/airless, -/area/djstation) -"bb" = ( -/obj/structure/table/rack, -/obj/random/junk, -/obj/random/maintenance, -/turf/simulated/floor/tiled/airless, -/area/djstation) -"bc" = ( -/obj/structure/girder, -/turf/simulated/floor/tiled/airless, -/area/djstation) -"bd" = ( -/obj/structure/largecrate, -/turf/simulated/floor/tiled/airless, -/area/djstation) -"be" = ( -/obj/random/maintenance, -/turf/simulated/floor/asteroid, -/area/mine/explored) -"bf" = ( -/obj/effect/overmap/visitable/sector/cluster, -/turf/simulated/floor/asteroid, -/area/mine/explored) -"cb" = ( -/obj/effect/shuttle_landmark/cluster/nav5, -/turf/simulated/floor/asteroid, -/area/mine/explored) -"db" = ( -/obj/effect/shuttle_landmark/cluster/nav6, -/turf/space, -/area/space) -"eb" = ( -/obj/effect/shuttle_landmark/cluster/nav4, -/turf/space, -/area/space) -"fb" = ( -/obj/effect/shuttle_landmark/cluster/nav2, -/turf/space, -/area/space) -"gb" = ( -/obj/effect/shuttle_landmark/cluster/nav3, -/turf/space, -/area/space) -"hb" = ( -/obj/effect/shuttle_landmark/cluster/nav1, -/turf/space, -/area/space) -"ib" = ( -/obj/effect/shuttle_landmark/cluster/nav7, -/turf/simulated/floor/asteroid, -/area/mine/explored) -"jb" = ( -/obj/machinery/access_button/airlock_exterior{ - master_tag = "lp_north_airlock"; - name = "exterior access button"; - pixel_y = -24 - }, -/turf/simulated/floor/asteroid, -/area/mine/explored) -"kb" = ( -/obj/machinery/door/airlock/external{ - frequency = 1379; - icon_state = "closed"; - id_tag = "lp_north_outer"; - locked = 1 - }, -/turf/simulated/floor/airless, -/area/djstation) -"lb" = ( -/turf/unsimulated/mask, -/area/djstation) -"mb" = ( -/obj/machinery/atmospherics/unary/vent_pump/high_volume/airlock{ - id_tag = "lp_north_pump" - }, -/obj/machinery/airlock_sensor{ - id_tag = "lp_north_sensor"; - master_tag = "lp_north_airlock"; - pixel_x = 24 - }, -/turf/simulated/floor/airless, -/area/djstation) -"nb" = ( -/obj/machinery/door/airlock/multi_tile{ - name = "Glass Airlock" - }, -/turf/simulated/floor/airless, -/area/djstation) -"ob" = ( -/obj/machinery/door/airlock/external{ - frequency = 1379; - icon_state = "closed"; - id_tag = "lp_north_inner"; - locked = 1 - }, -/obj/machinery/atmospherics/pipe/simple/visible, -/turf/simulated/floor/airless, -/area/djstation) -"qb" = ( -/obj/machinery/atmospherics/portables_connector{ - dir = 4 - }, -/turf/simulated/floor/airless, -/area/djstation) -"rb" = ( -/obj/machinery/atmospherics/pipe/simple/visible{ - dir = 4 - }, -/turf/simulated/floor/airless, -/area/djstation) -"sb" = ( -/obj/machinery/atmospherics/pipe/simple/visible{ - dir = 4 - }, -/obj/machinery/access_button/airlock_interior{ - master_tag = "lp_north_airlock"; - name = "interior access button"; - pixel_y = 24 - }, -/turf/simulated/floor/airless, -/area/djstation) -"tb" = ( -/obj/machinery/atmospherics/pipe/simple/visible{ - dir = 9 - }, -/turf/simulated/floor/airless, -/area/djstation) -"ub" = ( -/obj/machinery/access_button{ - command = "cycle_interior"; - frequency = 1379; - master_tag = "lp_east_airlock"; - name = "interior access button"; - pixel_x = 24; - req_access = null - }, -/turf/simulated/floor/tiled/airless, -/area/djstation) -"vb" = ( -/obj/machinery/access_button{ - command = "cycle_exterior"; - frequency = 1379; - master_tag = "lp_east_airlock"; - name = "exterior access button"; - pixel_x = -24; - req_access = null - }, -/turf/simulated/floor/asteroid, -/area/mine/explored) -"wb" = ( -/obj/machinery/door/airlock/external{ - frequency = 1379; - icon_state = "closed"; - id_tag = "lp_east_inner"; - locked = 1 - }, -/obj/machinery/atmospherics/pipe/simple/visible{ - dir = 4 - }, -/turf/simulated/floor/airless, -/area/djstation) -"xb" = ( -/obj/random/trash, -/obj/machinery/airlock_sensor{ - id_tag = "lp_east_sensor"; - pixel_y = 24 - }, -/obj/machinery/atmospherics/unary/vent_pump/high_volume/airlock{ - dir = 8; - id_tag = "lp_east_pump" - }, -/turf/simulated/floor/airless, -/area/djstation) -"yb" = ( -/obj/random/maintenance, -/obj/machinery/embedded_controller/radio/airlock/airlock_controller{ - id_tag = "lp_east_airlock"; - pixel_y = 24; - tag_airpump = "lp_east_pump"; - tag_chamber_sensor = "lp_east_sensor"; - tag_exterior_door = "lp_east_outer"; - tag_interior_door = "lp_east_inner" - }, -/turf/simulated/floor/airless, -/area/djstation) -"zb" = ( -/obj/machinery/door/airlock/external{ - frequency = 1379; - icon_state = "closed"; - id_tag = "lp_east_outer"; - locked = 1 - }, -/turf/simulated/floor/airless, -/area/djstation) -"Ab" = ( -/obj/machinery/atmospherics/pipe/simple/visible{ - dir = 6 - }, -/turf/simulated/floor/tiled/airless, -/area/djstation) -"Db" = ( -/obj/machinery/atmospherics/pipe/simple/visible, -/turf/simulated/floor/airless, -/area/djstation) -"Eb" = ( -/obj/machinery/atmospherics/portables_connector{ - dir = 1 - }, -/turf/simulated/floor/airless, -/area/djstation) - -(1,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(2,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(3,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(4,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(5,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(6,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(7,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(8,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(9,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -aa -ab -aa -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(10,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(11,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(12,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(13,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(14,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -ab -aa -ab -ab -aa -aa -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(15,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(16,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(17,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(18,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(19,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(20,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(21,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(22,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(23,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(24,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -aa -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(25,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(26,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -fb -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(27,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(28,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(29,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(30,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(31,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(32,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -aa -ab -aa -aa -aa -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(33,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(34,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(35,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(36,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(37,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(38,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(39,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(40,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(41,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(42,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(43,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -aa -aa -aa -aa -aa -aa -ab -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(44,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -aa -aa -aa -aa -ab -ab -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(45,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -aa -aa -aa -ab -ab -ab -ab -aa -aa -aa -aa -ab -ab -ab -ab -aa -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(46,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -aa -aa -ab -ab -ab -ab -aa -aa -aa -aa -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(47,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -aa -aa -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(48,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(49,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(50,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -aa -aa -aa -aa -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(51,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(52,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(53,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(54,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -aa -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(55,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(56,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(57,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -ab -ab -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(58,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(59,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(60,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(61,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -ab -ab -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(62,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(63,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(64,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(65,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(66,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(67,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -aa -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(68,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(69,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(70,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(71,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(72,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(73,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(74,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(75,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -ab -ab -ab -ab -ab -ab -aa -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(76,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -aa -aa -ab -ab -ab -ab -ab -aa -aa -aa -ab -ab -ab -ab -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(77,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -aa -aa -aa -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(78,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(79,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(80,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(81,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(82,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(83,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(84,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(85,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(86,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(87,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(88,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(89,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(90,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(91,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(92,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(93,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(94,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(95,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(96,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(97,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(98,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(99,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -gb -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(100,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(101,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(102,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(103,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(104,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -af -af -af -af -af -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(105,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -af -af -af -af -af -af -af -af -af -af -af -af -af -af -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(106,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -af -af -af -af -bf -af -af -af -af -af -af -af -af -af -af -af -af -af -af -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(107,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(108,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(109,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(110,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(111,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(112,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -ab -ab -ab -ab -ab -ab -ab -ab -aj -aj -aj -aj -aj -aj -aj -ab -ab -ab -ab -ab -ab -aj -aj -aj -aj -aj -aj -aj -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(113,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -ab -ab -ab -ab -ab -ab -ab -ab -aj -qb -az -at -at -aI -aj -ab -ab -ab -ab -ab -ab -aj -aX -aZ -ba -bb -aX -aj -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(114,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -ab -ab -ab -ab -ab -ab -ab -ab -aj -rb -al -ar -ar -aJ -aj -aj -aj -aj -aj -aj -aj -aj -ar -at -ar -as -ar -aj -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(115,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -ab -ab -ab -ab -ab -ab -ab -ab -aj -rb -ar -at -ar -at -aK -aO -at -at -at -at -aB -aW -at -ar -aO -ar -ar -aj -aj -aj -aj -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(116,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -jb -aj -aj -aj -aj -sb -ar -as -ar -ar -aK -ar -ar -ar -ar -ar -ar -aK -ar -ar -at -ar -at -ar -ar -aI -aj -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(117,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -kb -ax -mb -ob -tb -ar -ar -at -ar -aL -aP -aM -aM -aP -aH -aP -aL -aY -ar -ar -ar -at -ar -bc -bc -aj -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(118,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -hb -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -af -af -af -af -af -af -af -af -af -af -ib -af -af -af -af -af -af -af -af -af -af -af -af -af -af -ak -aS -aj -aj -aj -aj -ar -ar -ar -aG -ar -aL -aJ -ar -ar -ar -aT -aV -aL -as -at -ub -ar -ar -aO -ar -bd -aj -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(119,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -aS -aS -lb -lb -lb -aj -aA -aC -aE -ar -al -nb -aQ -at -as -ar -at -aj -aj -aj -aj -aj -Ab -Db -Db -Db -Eb -aj -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(120,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -ab -ab -ab -ab -ab -ab -ab -ab -aj -ar -at -aF -at -ar -at -ar -ar -at -aG -ar -aj -ab -ab -ab -aj -wb -aj -aj -aj -aj -aj -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(121,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -ab -ab -ab -ab -ab -ab -ab -ab -aj -ar -aB -at -ar -ar -aN -ar -aG -al -ar -ar -aj -ab -ab -ab -aj -xb -aj -lb -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(122,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -ab -ab -ab -ab -ab -ab -ab -ab -aj -ar -ar -ar -ar -ar -aL -ar -aR -ar -aR -aU -aj -ab -ab -ab -aj -yb -aj -lb -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(123,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -ab -ab -ab -ab -ab -ab -ab -ab -aj -aj -aj -aj -aH -aj -aj -aj -aj -aj -aj -aj -aj -ab -ab -ab -aj -zb -aj -lb -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(124,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -ab -ab -ab -aj -aj -aj -aj -aj -aj -ab -ab -ab -aj -at -aj -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -vb -af -af -aS -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(125,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -ab -ab -ab -aj -al -aq -av -ar -aj -ab -ab -ab -aj -at -aj -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -af -af -af -af -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(126,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -ab -ab -ab -aj -am -ar -at -at -aj -aj -aj -aj -aj -at -aj -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -af -af -af -af -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(127,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -ab -ab -ab -ab -ab -aj -an -as -ar -ar -ar -ar -aB -ar -ar -ar -aj -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -af -af -af -af -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(128,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -ab -ab -ab -ab -ab -aj -ao -at -at -ar -aj -aj -aj -aj -aj -aj -aj -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -af -af -af -af -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(129,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -ab -ab -ab -ab -ab -ab -aj -ap -ar -aw -ay -aj -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -af -af -af -af -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(130,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -ab -ab -ab -ab -ab -ab -aj -aj -aj -aj -aj -aj -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -af -af -af -af -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(131,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -af -af -af -af -af -af -af -be -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(132,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(133,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(134,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(135,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(136,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(137,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(138,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(139,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(140,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(141,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(142,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(143,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(144,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -aa -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(145,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -af -af -af -af -af -af -af -af -af -af -af -af -af -af -cb -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(146,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(147,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(148,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(149,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(150,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(151,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(152,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -db -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(153,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(154,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(155,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(156,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(157,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -af -ab -ab -ab -ab -ab -ab -ab -ab -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(158,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -af -af -af -af -af -af -af -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(159,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -af -af -af -af -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(160,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(161,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -eb -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(162,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(163,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(164,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(165,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(166,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -"} -(167,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -"} -(168,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -"} -(169,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -"} -(170,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -"} -(171,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -"} -(172,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -"} -(173,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -"} -(174,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -"} -(175,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -"} -(176,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -"} -(177,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -"} -(178,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -"} -(179,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -"} -(180,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(181,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(182,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(183,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(184,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(185,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(186,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(187,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(188,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(189,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(190,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(191,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(192,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(193,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(194,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(195,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(196,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(197,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(198,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(199,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(200,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} diff --git a/maps/away/mining/mining-orb.dmm b/maps/away/mining/mining-orb.dmm deleted file mode 100644 index af504285350d4..0000000000000 --- a/maps/away/mining/mining-orb.dmm +++ /dev/null @@ -1,40757 +0,0 @@ -//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE -"aa" = ( -/turf/space, -/area/space) -"ab" = ( -/obj/effect/shuttle_landmark/orb/nav6, -/turf/space, -/area/space) -"ac" = ( -/obj/effect/shuttle_landmark/orb/nav5, -/turf/space, -/area/space) -"ad" = ( -/turf/unsimulated/mask, -/area/mine/unexplored) -"ae" = ( -/turf/simulated/floor/asteroid, -/area/mine/explored) -"af" = ( -/turf/simulated/floor/asteroid, -/area/mine/unexplored) -"ag" = ( -/turf/simulated/mineral/random/high_chance, -/area/mine/unexplored) -"ah" = ( -/turf/simulated/mineral/random, -/area/mine/unexplored) -"ai" = ( -/turf/simulated/wall/sandstone, -/area/mine/unexplored) -"aj" = ( -/turf/simulated/floor/airless/stone, -/area/mine/explored) -"ak" = ( -/turf/simulated/floor/fixed/alium/airless, -/area/mine/explored) -"al" = ( -/obj/structure/monolith, -/turf/simulated/floor/fixed/alium/airless, -/area/mine/explored) -"am" = ( -/turf/simulated/wall/alium, -/area/mine/unexplored) -"an" = ( -/turf/simulated/mineral, -/area/mine/unexplored) -"ao" = ( -/turf/simulated/wall/alium, -/area/mine/explored) -"ap" = ( -/turf/simulated/wall/sandstone, -/area/mine/explored) -"aq" = ( -/obj/effect/floor_decal/spline/fancy/wood, -/obj/effect/floor_decal/spline/fancy/wood{ - dir = 1 - }, -/turf/simulated/floor/exoplanet/water/shallow, -/area/mine/explored) -"as" = ( -/obj/effect/floor_decal/spline/fancy/wood{ - dir = 5 - }, -/obj/effect/floor_decal/spline/fancy/wood/corner{ - dir = 8 - }, -/turf/simulated/floor/exoplanet/water/shallow, -/area/mine/explored) -"au" = ( -/obj/effect/shuttle_landmark/orb/nav4, -/turf/space, -/area/space) -"ax" = ( -/obj/effect/floor_decal/spline/fancy/wood, -/turf/simulated/floor/exoplanet/water/shallow, -/area/mine/explored) -"aB" = ( -/obj/effect/floor_decal/spline/fancy/wood{ - dir = 4 - }, -/turf/simulated/floor/exoplanet/water/shallow, -/area/mine/explored) -"aD" = ( -/obj/effect/floor_decal/spline/fancy/wood{ - dir = 8 - }, -/turf/simulated/floor/exoplanet/water/shallow, -/area/mine/explored) -"aF" = ( -/obj/effect/floor_decal/spline/fancy/wood{ - dir = 1 - }, -/turf/simulated/floor/exoplanet/water/shallow, -/area/mine/explored) -"aI" = ( -/obj/effect/floor_decal/spline/fancy/wood/corner{ - dir = 1 - }, -/turf/simulated/floor/airless/stone, -/area/mine/explored) -"aM" = ( -/obj/item/stool/stone, -/turf/simulated/floor/fixed/alium/airless, -/area/mine/explored) -"aN" = ( -/obj/machinery/door/unpowered/simple/sandstone{ - desc = "It opens and closes. It's absolutely dominated by a huge engraving of some kind of bird."; - name = "engraved door" - }, -/turf/simulated/floor/airless/stone, -/area/mine/explored) -"aP" = ( -/turf/simulated/floor/exoplanet/water/shallow, -/area/mine/explored) -"aQ" = ( -/obj/machinery/door/unpowered/simple/sandstone, -/turf/simulated/floor/airless/stone, -/area/mine/explored) -"aR" = ( -/obj/effect/shuttle_landmark/orb/nav3, -/turf/space, -/area/space) -"aS" = ( -/turf/simulated/mineral, -/area/mine/explored) -"aT" = ( -/obj/effect/overmap/visitable/sector/orb, -/turf/simulated/wall/alium, -/area/mine/explored) -"aU" = ( -/obj/effect/floor_decal/spline/fancy/wood{ - dir = 9 - }, -/turf/simulated/floor/exoplanet/water/shallow, -/area/mine/explored) -"aV" = ( -/obj/effect/floor_decal/spline/fancy/wood{ - dir = 5 - }, -/turf/simulated/floor/exoplanet/water/shallow, -/area/mine/explored) -"aW" = ( -/obj/effect/floor_decal/spline/fancy/wood{ - dir = 8 - }, -/obj/effect/floor_decal/spline/fancy/wood/corner, -/turf/simulated/floor/exoplanet/water/shallow, -/area/mine/explored) -"aX" = ( -/obj/effect/floor_decal/spline/fancy/wood{ - dir = 4 - }, -/obj/effect/floor_decal/spline/fancy/wood/corner{ - dir = 8 - }, -/turf/simulated/floor/exoplanet/water/shallow, -/area/mine/explored) -"aY" = ( -/obj/effect/floor_decal/spline/fancy/wood{ - dir = 8 - }, -/obj/effect/floor_decal/spline/fancy/wood{ - dir = 4 - }, -/turf/simulated/floor/exoplanet/water/shallow, -/area/mine/explored) -"aZ" = ( -/obj/effect/floor_decal/spline/fancy/wood{ - dir = 4 - }, -/obj/effect/floor_decal/spline/fancy/wood{ - dir = 8 - }, -/turf/simulated/floor/exoplanet/water/shallow, -/area/mine/explored) -"ba" = ( -/obj/effect/floor_decal/spline/fancy/wood{ - dir = 8 - }, -/obj/effect/floor_decal/spline/fancy/wood/corner{ - dir = 1 - }, -/turf/simulated/floor/exoplanet/water/shallow, -/area/mine/explored) -"bb" = ( -/obj/effect/floor_decal/spline/fancy/wood{ - dir = 4 - }, -/obj/effect/floor_decal/spline/fancy/wood/corner{ - dir = 4 - }, -/turf/simulated/floor/exoplanet/water/shallow, -/area/mine/explored) -"bc" = ( -/obj/effect/floor_decal/spline/fancy/wood{ - dir = 10 - }, -/turf/simulated/floor/exoplanet/water/shallow, -/area/mine/explored) -"bd" = ( -/obj/effect/floor_decal/spline/fancy/wood{ - dir = 6 - }, -/turf/simulated/floor/exoplanet/water/shallow, -/area/mine/explored) -"be" = ( -/turf/unsimulated/mask, -/area/mine/explored) -"bf" = ( -/obj/effect/shuttle_landmark/orb/nav2, -/turf/space, -/area/space) -"bg" = ( -/obj/effect/shuttle_landmark/orb/nav1, -/turf/space, -/area/space) -"cf" = ( -/obj/effect/floor_decal/spline/fancy/wood{ - dir = 4 - }, -/turf/simulated/floor/exoplanet/water/shallow, -/area/mine/unexplored) -"eM" = ( -/obj/effect/floor_decal/spline/fancy/wood{ - dir = 6 - }, -/turf/simulated/floor/exoplanet/water/shallow, -/area/mine/unexplored) -"fA" = ( -/obj/effect/floor_decal/spline/fancy/wood{ - dir = 9 - }, -/obj/effect/floor_decal/spline/fancy/wood/corner, -/turf/simulated/floor/exoplanet/water/shallow, -/area/mine/explored) -"ma" = ( -/obj/effect/floor_decal/spline/fancy/wood{ - dir = 8 - }, -/turf/simulated/floor/exoplanet/water/shallow, -/area/mine/unexplored) -"pz" = ( -/obj/effect/floor_decal/spline/fancy/wood{ - dir = 10 - }, -/obj/effect/floor_decal/spline/fancy/wood/corner{ - dir = 1 - }, -/turf/simulated/floor/exoplanet/water/shallow, -/area/mine/explored) -"st" = ( -/obj/effect/shuttle_landmark/orb/nav7, -/turf/simulated/floor/asteroid, -/area/mine/explored) -"vc" = ( -/obj/effect/floor_decal/spline/fancy/wood{ - dir = 10 - }, -/turf/simulated/floor/exoplanet/water/shallow, -/area/mine/unexplored) -"wM" = ( -/obj/effect/floor_decal/spline/fancy/wood{ - dir = 6 - }, -/obj/effect/floor_decal/spline/fancy/wood/corner{ - dir = 4 - }, -/turf/simulated/floor/exoplanet/water/shallow, -/area/mine/explored) -"yQ" = ( -/obj/effect/floor_decal/spline/fancy/wood/corner{ - dir = 4 - }, -/turf/simulated/floor/exoplanet/water/shallow, -/area/mine/explored) -"yR" = ( -/obj/effect/floor_decal/spline/fancy/wood/corner{ - dir = 4 - }, -/turf/simulated/floor/asteroid, -/area/mine/explored) -"Aj" = ( -/obj/effect/floor_decal/spline/fancy/wood/corner, -/turf/simulated/floor/exoplanet/water/shallow, -/area/mine/unexplored) -"DJ" = ( -/obj/effect/floor_decal/spline/fancy/wood/corner{ - dir = 1 - }, -/turf/simulated/floor/exoplanet/water/shallow, -/area/mine/explored) -"EM" = ( -/obj/effect/floor_decal/spline/fancy/wood{ - dir = 10 - }, -/obj/effect/floor_decal/spline/fancy/wood/corner{ - dir = 1 - }, -/obj/effect/floor_decal/spline/fancy/wood/corner{ - dir = 8 - }, -/turf/simulated/floor/exoplanet/water/shallow, -/area/mine/explored) -"Gl" = ( -/obj/effect/floor_decal/spline/fancy/wood/corner{ - dir = 4 - }, -/obj/effect/floor_decal/spline/fancy/wood{ - dir = 6 - }, -/turf/simulated/floor/exoplanet/water/shallow, -/area/mine/explored) -"Le" = ( -/obj/effect/floor_decal/spline/fancy/wood/corner{ - dir = 4 - }, -/turf/simulated/floor/exoplanet/water/shallow, -/area/mine/unexplored) -"LT" = ( -/obj/effect/floor_decal/spline/fancy/wood{ - dir = 1 - }, -/obj/effect/floor_decal/spline/fancy/wood, -/turf/simulated/floor/exoplanet/water/shallow, -/area/mine/explored) -"MX" = ( -/obj/effect/floor_decal/spline/fancy/wood/corner{ - dir = 8 - }, -/turf/simulated/floor/exoplanet/water/shallow, -/area/mine/unexplored) -"NQ" = ( -/turf/simulated/floor/exoplanet/water/shallow, -/area/mine/unexplored) -"Ol" = ( -/obj/effect/floor_decal/spline/fancy/wood/corner{ - dir = 8 - }, -/obj/effect/floor_decal/spline/fancy/wood/corner{ - dir = 4 - }, -/turf/simulated/wall/sandstone, -/area/mine/explored) -"Rr" = ( -/obj/effect/floor_decal/spline/fancy/wood, -/turf/simulated/floor/exoplanet/water/shallow, -/area/mine/unexplored) -"SY" = ( -/obj/structure/fountain, -/mob/living/simple_animal/hostile/retaliate/parrot/space, -/turf/simulated/floor/airless/stone, -/area/mine/explored) -"TP" = ( -/obj/structure/totem, -/turf/simulated/floor/fixed/alium/airless, -/area/mine/explored) - -(1,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(2,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(3,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(4,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(5,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(6,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(7,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(8,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(9,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(10,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(11,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(12,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(13,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(14,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(15,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(16,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(17,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(18,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(19,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(20,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(21,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(22,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(23,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(24,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(25,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(26,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(27,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(28,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(29,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(30,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(31,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(32,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(33,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(34,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(35,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ad -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(36,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ah -ah -an -an -ae -ae -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(37,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ah -ah -ah -an -an -an -ae -ae -ae -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(38,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ah -ah -ah -an -an -an -an -ae -ae -ae -ae -ae -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(39,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ah -ah -ah -an -ah -an -an -ae -ae -ae -ae -ae -ae -ae -ae -aa -aa -aa -aa -aa -aa -aa -aa -ae -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(40,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ah -ah -an -an -ah -an -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -aa -aa -aa -aa -aa -ae -ae -ae -ae -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(41,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ah -ah -ah -ah -ah -an -an -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -aa -aa -ae -ae -ae -ae -ae -ae -ae -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(42,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ah -ah -ah -ah -ah -an -ae -ae -ae -ae -ae -an -an -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -aa -aa -aa -ae -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(43,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ah -ah -ah -ah -am -ae -ae -ae -an -ae -ae -ae -an -an -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(44,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ah -ah -ah -ah -ae -ae -ae -ae -an -an -an -an -ae -ae -an -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -an -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(45,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -au -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ah -ah -ah -ah -ae -ae -ah -am -ae -an -ah -an -an -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -an -an -an -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -bf -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(46,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ah -ah -ah -ah -ae -ae -ah -ah -an -ae -an -an -ah -an -an -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -an -an -an -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(47,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ae -ae -ae -ad -ad -ad -ad -ad -ad -ad -ad -ad -ah -an -ah -ah -ae -ah -ah -ah -an -ae -an -an -an -an -an -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -an -an -an -ad -ad -ad -ad -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(48,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ae -ae -ae -ae -ae -ad -ad -ad -ad -ad -ah -ah -ah -ah -ah -ae -ah -ah -ah -ah -ae -an -an -an -an -an -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -an -an -an -an -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(49,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ae -ad -ad -ae -ae -ad -ad -ad -ad -ah -an -ah -ah -ae -ae -ah -an -an -ae -ae -an -an -an -an -an -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -an -an -an -an -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(50,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ae -ae -ad -ad -ah -ah -an -ae -ae -ae -ah -ah -an -ae -ae -ah -an -an -an -an -an -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -an -an -ae -ae -ae -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -aa -aa -aa -aa -aa -aa -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(51,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ad -ae -ae -ae -an -an -ae -ae -ah -ah -ah -an -an -ae -ah -ah -an -an -an -an -an -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -am -ae -ae -an -ae -ae -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(52,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ad -ad -ae -ae -ae -ae -ah -an -an -an -an -an -ae -ae -ah -an -an -an -an -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -st -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -an -an -an -ae -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -aa -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(53,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ad -ad -ad -ae -ah -ah -ah -an -an -an -an -an -an -ae -ae -ae -ae -an -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -am -an -an -an -an -ae -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(54,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ad -ad -ad -ae -ae -an -an -an -an -an -an -an -an -an -ah -ah -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -an -an -an -an -ah -ah -ae -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(55,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ad -ad -ad -ae -an -an -an -an -an -an -an -an -an -ah -ah -an -an -an -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -an -an -ah -ah -ah -ah -ae -ae -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(56,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ad -ad -ad -ae -ae -an -an -an -an -ae -ae -ae -ae -ae -ae -an -an -an -an -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -an -an -ah -ah -ah -ah -ad -ae -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ae -ae -ae -ae -ae -ae -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(57,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ad -ad -ad -ad -ae -ae -ae -ae -ae -ae -ah -ah -ah -ah -ae -ae -an -an -an -an -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -an -an -an -ah -ah -ah -ah -ad -ae -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ae -ae -ad -ad -ad -ad -ae -ae -ae -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(58,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ad -ah -ah -ah -ah -ah -ah -ah -ah -an -an -an -ah -ah -ah -ae -ae -an -an -an -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -an -an -an -ah -ah -ah -ad -ad -ad -ae -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ae -ad -ad -ad -ad -ad -ad -ae -ae -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(59,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ah -ah -ah -ah -ah -ah -ah -ah -ah -an -an -ah -an -an -an -an -ah -ae -ae -an -an -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -an -an -an -ah -ah -ad -ad -ad -ad -ae -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ae -ae -ae -ad -ad -ad -ad -ad -ad -ae -ad -ad -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(60,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ah -ah -ah -ah -ag -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -an -ah -ah -ae -an -an -an -ae -an -an -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -an -an -an -ah -ah -ah -ad -ad -ad -ae -ae -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ae -ae -ae -ae -ad -ad -ad -ad -ad -ad -ad -ae -ae -ad -ad -ad -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(61,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ah -ah -ah -ah -ah -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ah -ah -ag -ae -ae -an -an -an -an -an -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -an -an -an -an -ah -ah -ah -ad -ad -ad -ae -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ae -ae -ad -ad -ad -ad -ad -ad -ad -ad -ad -ae -ae -ad -ad -ad -ad -ad -ad -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(62,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ah -ah -ah -ah -ae -ae -ah -ah -ah -ah -ah -ah -ah -ah -ah -ae -ae -ah -ah -ah -ae -an -an -an -an -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -an -an -an -ah -ah -ah -ad -ad -ad -ad -ae -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ae -ae -ad -ad -ad -ad -ad -ad -ad -ad -ad -ae -ae -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(63,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ah -ah -ah -ae -ae -ah -an -an -ah -ah -ah -ah -ah -ah -ah -ah -ae -ae -ah -an -ae -an -an -an -an -an -an -ah -ah -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -an -an -an -an -ah -ah -ah -ad -ad -ad -ad -ae -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ae -ad -ad -ad -ad -ad -ad -ad -ad -ad -ae -ae -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(64,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ae -ah -ah -ah -ae -ah -an -an -ah -ah -ae -ae -ae -ae -ae -ah -ah -ah -ae -ah -an -ae -an -an -an -an -an -an -an -ah -ah -ah -ae -ae -ae -ae -ae -ae -ae -ae -ae -an -an -an -an -ah -ah -ae -ad -ad -ad -ad -ae -ae -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ae -ad -ad -ad -ad -ad -ad -ad -ad -ad -ae -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(65,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ae -ae -ah -ah -ae -ah -an -ah -ae -ae -ae -ag -ah -ag -ae -ae -ah -ah -ae -ah -an -ae -ad -ah -an -ah -an -ah -ah -ah -ah -ah -ah -an -ae -ae -ae -ae -ae -ae -ae -an -an -an -ah -ah -ad -ae -ad -ad -ad -ad -ae -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ae -ad -ad -ad -ad -ad -ad -ad -ad -ae -ae -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(66,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ah -ah -ae -ah -ah -ae -ah -an -ae -ae -ag -ag -ah -ag -ag -ah -ae -ae -ah -ae -ae -an -ae -ad -ad -an -an -an -an -ah -ah -ah -ah -ah -ah -an -an -an -an -an -an -ah -ah -ah -ah -ah -ad -ad -ae -ad -ad -ad -ae -ae -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ae -ae -ae -ae -ad -ae -ae -ad -ad -ad -ad -ad -ad -ae -ae -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -aa -aa -aa -aa -aa -ad -ad -ad -ad -ad -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(67,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -an -ah -ae -ah -ah -ae -ah -an -ae -ag -ai -ai -ai -ai -ai -ah -ah -ae -ah -ah -ae -an -ae -ae -ad -ad -an -ah -an -an -an -an -an -ah -ah -ah -ah -an -ah -an -ah -ah -an -ah -ah -ah -ad -ad -ae -ae -ad -ad -ae -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ae -ae -ad -ad -ae -ae -ae -ae -ad -ad -ad -ad -ad -ad -ae -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -aa -aa -aa -aa -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(68,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -an -an -ae -ae -ah -ae -ah -ah -ae -ag -ai -aj -ak -aj -ai -ah -ah -ae -an -an -ae -an -ad -ae -ad -ad -ad -an -ad -ad -an -an -an -an -an -an -an -an -an -an -an -an -ah -ah -ah -ad -ad -ad -ad -ae -ad -ad -ae -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ae -ae -ad -ad -ad -ad -ae -ae -ad -ad -ad -ad -ad -ad -ae -ae -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -aa -aa -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(69,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ag -an -ah -ae -ah -ae -ae -ah -ae -ag -ai -ak -al -ak -ak -aj -ah -ae -ah -an -ae -an -ad -ae -ae -ad -ad -ad -ad -ad -ad -ae -ae -ae -ad -ad -ae -ae -ad -ad -ad -ad -ah -ah -ad -ad -ad -ad -ad -ae -ae -ad -ae -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ae -ad -ad -ad -ad -ad -ad -ae -ad -ad -ad -ad -ad -ad -ae -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ae -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(70,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -an -ah -ae -ah -ah -ae -ah -ae -ae -ai -aj -ak -aj -ai -aj -ah -ae -ae -an -ae -an -ad -ad -ae -ad -ad -ad -ad -ad -ad -ae -ad -ad -ad -ad -ad -ae -ad -ad -ad -ad -ad -ae -ae -ad -ad -ad -ad -ae -ad -ad -ae -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ae -ad -ad -ad -ad -ad -ad -ae -ad -ad -ad -ad -ad -ad -ae -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ae -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(71,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -an -ah -ae -ah -ah -ae -ah -ah -ae -ai -ai -ai -ai -ai -aj -ah -ah -ae -an -ae -an -ad -ad -ae -ae -ae -ad -ad -ad -ad -ae -ad -ad -ad -ad -ad -ae -ae -ae -ad -ad -ad -ad -ae -ad -ad -ad -ad -ae -ad -ad -ae -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ae -ae -ad -an -ad -ad -ad -ad -ae -ad -ad -ad -ad -ad -ad -ae -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ae -ae -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(72,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -an -an -ae -ae -ah -ae -ae -ah -ae -ae -ag -an -an -an -aj -ah -ah -ae -an -ae -an -ad -ad -ad -ad -ae -ae -ae -ae -ae -ae -ae -ae -ad -ad -ad -ad -ad -ae -ae -ad -ad -ad -ae -ad -ad -ad -ad -ae -ad -ad -ae -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ae -an -an -an -an -an -ad -ad -ae -ad -ad -ad -ad -ad -ad -ae -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ae -ae -ae -ae -ae -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(73,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ah -an -ah -ae -ah -ah -ae -ah -ah -ae -ae -an -ag -am -aj -am -ah -ae -an -ae -an -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ae -ae -ae -ad -ad -ad -ad -ae -ae -ad -ad -ae -ad -ad -ad -ad -ae -ad -ad -ae -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ae -an -an -an -an -an -an -ad -ae -ad -ad -ad -ad -ad -ad -ae -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ae -ae -ae -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(74,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ah -an -ah -ae -ah -ah -ae -ae -ah -ah -ae -ae -ae -ae -ae -ah -an -ae -an -ae -an -ah -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ae -ae -ad -ad -ad -ad -ae -ad -ad -ae -ad -ad -ad -ad -ae -ad -ad -ae -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ae -an -an -an -an -an -an -ae -ae -ad -ad -ad -ad -ad -ad -ae -ae -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ae -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(75,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ad -an -ag -ae -ah -ah -ah -ae -ah -ah -ah -ah -ah -ah -an -ah -an -ae -an -ae -an -ah -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ae -ae -ad -ad -ad -ae -ae -ad -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ad -ad -ad -ad -ad -ad -ad -ae -ae -ae -ae -an -an -an -an -an -an -ae -an -an -an -an -an -an -an -ad -ae -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ae -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(76,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ad -ad -an -an -ae -ae -ah -ah -ae -ae -ah -ah -ah -an -an -an -an -an -ae -an -ae -ae -ah -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ae -ad -ad -ad -ad -ae -ad -ae -ae -ae -ae -ae -ae -ae -ae -an -an -ae -ae -ad -ad -ad -ad -ae -ae -ae -an -an -an -an -an -an -an -an -ae -ae -an -an -an -an -an -an -an -an -ae -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ae -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(77,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ad -ad -ah -an -ah -ae -ah -ah -ah -ae -ae -ah -ah -an -an -an -an -an -ae -an -an -ae -ah -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ae -ae -ad -ad -ad -ae -ae -ae -ae -ae -ae -ae -an -an -an -an -an -an -ae -ae -ae -ae -ae -ae -an -an -an -an -an -an -an -an -an -an -an -an -an -an -an -an -an -an -an -an -ae -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ae -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -an -an -an -an -an -an -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(78,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ad -ad -ad -ah -an -ah -ae -ah -ah -ah -ah -ae -ae -ah -an -an -an -an -ah -ae -ah -ae -ae -ah -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ae -ad -ad -ad -ad -ae -ae -ae -ae -an -an -an -an -an -an -an -an -an -an -an -an -an -an -an -an -an -an -an -an -an -an -an -an -an -an -an -an -an -an -an -an -an -an -ae -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ae -ae -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -an -an -an -an -an -an -an -an -an -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(79,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ad -ad -ad -ad -an -ah -ae -ah -ah -ah -ah -ah -ae -ae -ah -an -an -an -ah -ae -ah -ae -ah -ah -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ae -ad -ad -ad -ae -ae -ae -an -an -an -an -an -an -ah -ah -an -an -an -an -ah -an -an -an -an -an -ah -an -an -an -an -an -an -an -an -an -an -an -an -an -an -an -an -ae -ae -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ae -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -an -an -an -an -an -an -an -an -an -an -an -an -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(80,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ad -ad -ad -ad -an -an -ae -ae -ah -ah -ah -ah -ah -ae -ah -ah -ah -ah -ae -ae -ah -ae -ah -ah -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ae -ad -ad -ae -ae -an -an -an -an -an -an -an -ah -an -an -an -ah -an -an -an -an -an -an -an -an -an -an -an -an -an -ag -an -an -an -an -an -an -an -an -an -an -an -ae -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ae -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -an -an -an -an -an -an -an -an -an -an -an -an -an -an -an -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(81,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ad -ad -ad -ad -ah -an -ah -ae -ah -ah -ah -ah -ah -ae -ae -ae -ah -ah -ae -ah -ah -ae -ah -ah -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ae -ad -ae -ae -an -an -an -an -ah -an -an -an -ah -an -an -ah -an -an -an -an -an -an -an -an -an -an -an -an -an -an -an -ah -an -an -an -an -an -an -an -an -an -an -ae -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ae -ae -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -an -an -an -an -ah -ah -ah -an -an -an -ah -ah -ah -ah -an -an -an -an -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(82,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ad -ad -ad -ad -ad -ad -ah -an -ae -ae -ah -ah -ah -ah -ah -ah -ae -ae -ae -ae -ah -ae -ae -ah -ah -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ae -ad -ae -an -an -an -an -an -an -ah -ah -an -an -an -an -an -an -an -an -an -an -an -an -an -an -an -an -an -an -an -an -ah -an -an -an -an -an -an -an -an -an -an -ae -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ae -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -an -an -an -an -ah -an -ah -an -an -an -ah -an -an -an -an -an -an -an -an -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(83,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -an -an -ae -ae -ah -ah -an -an -ah -ah -ah -ah -ah -ah -ae -ah -ah -ah -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ae -ae -ae -an -an -ah -an -an -an -an -an -an -an -an -an -an -an -ah -an -an -ah -an -an -an -an -an -an -an -an -an -an -an -an -an -an -an -an -an -an -an -an -an -ae -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ae -ae -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -an -ah -ah -ah -an -ah -an -an -an -an -an -an -an -an -an -an -an -an -an -an -an -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(84,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ah -an -an -ae -ae -ah -an -an -an -an -an -an -ah -ae -ae -ah -ah -ah -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ae -ae -an -an -an -an -an -an -an -an -an -an -an -an -an -an -an -an -an -an -an -an -an -an -an -an -an -an -an -an -an -ag -an -an -an -an -an -ag -an -an -an -an -an -ae -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ae -ae -ae -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -an -an -an -ah -ao -ap -ap -ap -ap -ap -ap -ap -ao -an -an -an -an -an -an -an -an -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(85,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ah -an -ah -ae -ae -ah -an -an -an -ah -ah -ae -ae -ah -ah -ah -ad -ae -ae -ae -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ae -an -an -an -an -an -an -an -an -an -an -ah -an -an -an -an -an -an -an -an -an -an -an -an -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -an -an -an -an -ae -ad -ad -ad -ad -ad -ad -ad -ad -ad -ae -ae -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -an -an -an -an -ao -ao -aj -ak -ak -ak -aj -aj -aj -ao -ao -an -an -ah -an -an -an -an -an -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(86,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ad -ad -ad -ad -ae -ae -ae -ae -ae -ae -an -an -ah -ae -ah -ah -ah -ae -ae -ae -ae -ah -ah -ah -ae -ae -ae -ad -ae -ae -ae -ae -ad -ad -ad -ad -ad -ad -ad -ae -ae -an -an -an -an -an -an -ah -an -an -an -an -an -an -an -an -an -an -an -an -an -an -an -an -ap -aj -aj -aj -aj -aj -aj -aj -aj -aj -aj -aj -aj -aj -ap -an -an -an -an -ae -ae -ad -ad -ad -ad -ad -ad -ad -ae -ae -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -an -an -an -an -ap -aj -aj -ak -aj -aM -aM -ak -ak -aj -ap -an -ah -ah -an -an -an -an -an -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(87,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ad -ad -ad -ae -ae -ad -ad -ad -ad -ae -ah -an -an -ae -ae -ae -ae -ae -ah -ah -ah -ah -ah -ae -ae -ad -ad -ad -ad -ad -ad -ae -ae -ad -ad -ad -ad -ad -ae -ae -an -an -an -an -an -an -an -an -an -an -an -an -an -an -an -ao -ao -ao -an -an -an -an -an -an -ap -aj -ao -TP -ao -TP -ao -TP -ao -TP -ao -TP -ao -aj -ap -an -an -an -an -an -ae -ad -ad -ad -ad -ad -ad -ad -ae -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -an -an -an -an -ap -aj -aj -aM -aU -aD -bc -aj -ak -aj -ap -ap -ap -aj -ae -an -an -an -an -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(88,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ad -ad -ae -ae -ad -ad -ad -ad -ad -ae -ae -ah -an -an -an -ah -ah -ah -ag -ah -an -ah -ae -ae -ad -ad -ad -ad -ad -ad -ad -ad -ae -ae -ad -ad -ad -ae -ae -an -an -ah -an -an -an -an -an -an -an -an -an -an -an -an -ao -ao -aj -ao -ao -an -an -an -an -an -ap -aj -aS -aS -aS -aS -aS -aS -aS -aS -aS -aS -aS -aj -ap -an -an -an -an -an -ae -ae -ad -ad -ad -ad -ad -ad -ae -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -an -an -an -an -ap -aj -ak -aM -aF -aP -ax -aM -ak -aj -aj -aj -aQ -aj -aj -ae -an -an -an -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(89,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ad -ad -ae -ad -ad -ad -ad -ad -ad -ad -ae -ae -ah -ah -an -an -an -an -an -an -an -ae -ae -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ae -ad -ad -ad -ae -an -an -an -an -an -an -an -an -an -an -an -an -an -an -an -ao -ao -aj -aj -aj -ao -ao -an -ah -an -an -ap -aj -aS -ao -ao -ao -ao -ao -ao -ao -ao -ao -aS -aj -ap -ah -an -an -an -an -an -ae -ad -ad -ad -ad -ad -ad -ae -ae -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -an -an -an -an -ap -aj -ak -aj -aV -aB -bd -aM -aj -aj -ap -ap -ap -aj -ae -ae -an -an -an -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(90,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ad -ad -ae -ad -ad -ad -ad -ad -ad -ad -ad -ae -ae -ad -ad -ad -ad -ad -ad -ae -ae -ae -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ae -ae -ad -ae -ae -an -an -ah -an -an -an -an -an -an -an -an -an -an -an -ao -ao -aj -aM -aM -aj -aj -ao -ao -an -an -an -ap -aj -aS -ao -aj -aj -aj -aj -aj -aj -aj -ao -aS -aj -ap -an -an -an -an -an -an -ae -ae -ad -ad -ad -ad -ad -ad -ae -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -an -an -an -ap -aj -ak -ak -aM -aM -aj -ak -aj -aj -ap -an -an -an -an -ae -an -an -an -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(91,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ad -ae -ae -ad -ad -ad -ad -ad -ad -ad -ad -ad -ae -ad -ad -ad -ad -ae -ae -ae -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ae -ae -ae -an -an -an -an -an -an -an -an -an -an -an -an -an -an -an -ao -aj -aj -fA -aZ -pz -aj -aj -ao -an -an -an -ap -aj -aj -aQ -aj -ae -ae -ae -ae -ae -aj -aQ -aj -aj -ap -an -an -an -an -an -an -an -ae -ad -ad -ad -ad -ad -ad -ae -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -an -an -an -ao -ao -aj -aj -aj -ak -ak -ak -aj -ao -ao -an -ah -ah -ah -ae -an -an -an -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(92,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ad -ae -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ae -ae -ae -ae -ae -ae -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ae -an -an -an -an -ah -an -an -an -an -an -an -an -an -an -am -ao -aj -fA -wM -ak -as -pz -aM -ao -an -an -an -ap -ap -ap -ap -aj -aj -aM -ao -ao -ae -aj -ap -ap -ap -ap -ag -an -an -an -an -an -an -ae -ad -ad -ad -ad -ad -ad -ae -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -an -an -an -an -ao -ap -ap -ap -ap -ap -ap -ap -ao -an -ah -ah -an -an -ae -an -an -an -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(93,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ae -ae -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ae -an -ah -an -an -ah -an -an -ah -an -an -an -an -an -am -ao -ao -aM -aq -ak -TP -ak -aq -aM -ao -ao -an -an -an -an -an -ap -aj -ae -ao -ao -aM -aj -aj -ap -an -an -an -an -an -an -an -an -an -ae -ae -ad -ad -ad -ad -ae -ae -ae -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -an -an -an -an -ah -ah -an -an -an -an -an -an -an -ah -an -an -an -ae -an -an -an -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(94,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ae -ae -ae -ae -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ae -ae -ae -ae -ae -ad -ad -ad -ad -ad -ad -ad -ad -ad -ae -an -an -ah -an -an -an -an -an -an -an -an -an -am -ao -ao -aj -aM -as -pz -ak -fA -wM -aj -aj -ao -ao -ao -an -an -an -ap -aj -ae -ae -ae -ae -ae -aj -ap -an -an -an -ah -an -an -an -an -an -an -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -an -an -an -an -ah -ah -ah -an -an -an -an -an -an -an -an -an -an -ae -an -ad -ad -ad -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(95,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ae -ae -ae -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ae -ad -ad -ad -ae -ae -ad -ad -ad -ad -ae -ae -ae -ae -ae -an -an -ah -an -an -an -an -an -an -an -an -am -ao -ao -aj -aj -aj -aj -as -aY -wM -aj -aj -aj -aj -ae -ao -ah -an -an -ap -aj -aj -aj -ae -aj -aj -aj -ap -an -an -an -an -an -an -an -an -an -an -an -ae -ae -ae -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -an -an -an -an -an -ah -an -ah -ah -an -an -an -an -an -an -an -ae -ad -ad -ad -ad -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(96,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ae -ae -ad -ad -ad -ad -ad -ad -ae -ae -ae -ae -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ae -ad -ad -ad -ad -ae -ae -ad -ad -ae -ae -ad -ad -ad -ae -an -an -an -an -an -an -an -an -an -an -am -am -ao -ae -aj -ap -aj -aj -aj -aM -aM -aj -aj -ap -aj -ae -ao -an -ah -an -ap -ap -ap -aj -ae -aj -ap -ap -ap -an -an -an -an -an -an -an -an -an -an -an -ae -ae -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -an -an -ah -ah -an -ah -an -an -an -an -an -an -ae -ae -ae -ad -ad -ad -ad -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(97,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ad -ad -ad -ad -ad -ae -ad -ad -ae -ae -ae -ad -ad -ad -ad -ad -ad -ae -ae -ae -ae -ae -ae -ad -ad -ad -ad -ad -ae -ae -ae -ae -ad -ad -ad -ad -ae -an -an -an -ah -an -an -an -an -an -am -am -am -ao -ae -aj -aj -aj -ae -aj -aj -aj -ae -aj -aj -aj -ae -ao -an -an -an -ap -aM -aj -aj -ae -aj -aj -aM -ap -an -an -ah -an -ag -an -an -an -an -an -an -an -ae -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ah -an -an -an -an -ad -ad -ad -ad -ae -ae -ad -ae -ad -ad -ad -ad -ad -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(98,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ad -ad -ad -ad -ae -ae -ad -ad -ad -ad -ae -ad -ad -ad -ae -ae -ae -ae -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ae -ae -an -an -ah -an -an -an -an -an -am -am -NQ -am -ao -ae -ae -ae -ae -ae -aj -aj -aj -ae -ae -ae -ae -ae -ao -an -an -an -ap -aM -aj -aj -ae -aj -aj -aM -ap -an -an -an -an -ah -an -an -an -an -an -an -an -ae -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ae -ad -ad -ae -ae -ae -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ae -ae -ad -ad -ae -ae -ad -ad -ad -ad -ad -ad -ae -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(99,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ad -ad -ad -ad -ae -ad -ad -ad -ad -ad -ae -ae -ad -ae -ae -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ae -an -ah -ah -an -an -an -an -an -am -am -Aj -cf -DJ -ao -ao -ae -ae -ao -ae -aj -Ol -aj -ae -ao -ae -ae -ae -ao -an -ah -an -ap -ap -ap -aj -ae -aj -ap -ap -ap -an -an -an -an -an -an -an -an -an -an -an -an -ae -ad -ad -ad -ad -ad -ad -ad -ad -ad -ae -ae -ad -ad -ae -ad -ae -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ae -ae -ad -ad -ad -ad -ae -ae -ad -ad -ad -ae -ae -ae -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(100,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ad -ad -ad -ad -ae -ad -ad -ad -ad -ad -ad -ae -ae -ae -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ae -ae -an -an -an -an -an -an -an -am -am -Aj -eM -ap -aV -DJ -ao -ao -ae -ae -aj -aj -aj -aj -aj -ae -ae -ae -ae -ao -an -an -an -ap -aj -aj -aj -ae -aj -aj -aj -ap -an -ap -ap -ap -ap -ap -ap -ap -ap -ap -an -an -ae -ae -ad -ad -ad -ad -ad -ad -ad -ad -ae -ad -ad -ae -ae -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ae -ae -ad -ad -ad -ad -ad -ad -ae -ae -ae -ae -ae -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(101,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ad -ad -ad -ad -ae -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ae -ae -an -an -an -an -an -ah -an -am -am -Aj -eM -aM -aM -aM -aV -DJ -ao -ao -aj -aj -aU -aD -bc -aj -aj -ae -ae -ae -ao -ao -an -ap -ap -aj -ao -ae -ae -ae -ao -aj -ap -ap -ap -aj -aj -aj -aj -aj -aj -aj -ap -an -am -ae -ae -ae -ad -ad -ad -ad -ad -ad -ad -ae -ad -ad -ae -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ae -ae -ae -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(102,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ad -ad -ad -ad -ae -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ae -ae -an -an -an -ah -ah -ah -an -am -am -Aj -eM -ap -aj -aj -aj -ap -aV -DJ -ao -ao -ap -aF -ao -ax -ap -aj -ae -ao -ae -ae -ao -ao -ap -aj -aj -ae -ae -ae -ae -ae -aj -aj -ap -ap -aj -ao -aM -aM -aM -ao -aj -ap -ap -an -ae -ae -ae -ae -ad -ad -ad -ad -ad -ae -ae -ad -ad -ae -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ae -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(103,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ad -ad -ad -ae -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ae -ae -ae -ae -an -ah -ah -an -an -am -am -Aj -eM -aM -aj -aj -aj -aj -aj -aj -aV -aB -ao -aj -aV -aB -bd -aj -aj -ae -ae -ae -ae -ae -ao -aj -aj -ae -ae -ae -ao -ae -ae -ae -aj -aj -ap -aj -aU -aW -aY -ba -bc -aj -aj -ap -ao -ae -ae -ae -ae -ad -ad -ad -ad -ad -ae -ad -ad -ad -ae -ae -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ae -ae -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(104,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ad -ad -ad -ae -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ae -ae -ae -ae -ae -ah -ah -ah -an -am -am -NQ -Rr -ap -aM -aj -aj -SY -aj -aj -aj -aj -aj -aN -aj -aj -aj -aj -aj -aj -aj -aj -aj -aj -aj -aQ -aj -ae -ae -ae -ao -aT -ao -ae -ae -ae -aj -aQ -aj -aF -ax -ao -aF -ax -aj -aj -aj -aN -ae -ae -ae -ae -ad -ad -ad -ad -ae -ae -ad -ad -ad -ad -ae -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ae -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(105,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ad -ad -ad -ae -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ae -ae -ae -ae -ae -ae -ad -ae -ae -ae -ae -ae -ae -ae -ae -an -an -an -an -an -am -am -NQ -vc -aM -aj -aj -aj -aj -aj -aj -aU -aD -ao -aj -aU -aD -bc -aj -aj -ae -ae -ae -ae -ae -ao -aj -aj -ae -ae -ae -ao -ae -ae -ae -aj -aj -ap -aj -aV -aX -aZ -bb -bd -aj -aj -ap -ao -ae -ae -ae -ae -ad -ad -ae -ae -ae -ad -ad -ad -ad -ad -ae -ae -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ae -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(106,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ad -ad -ad -ae -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ae -ae -ad -ad -ad -ae -ae -ae -ae -ad -ad -ad -ae -ae -ae -ae -ae -an -an -an -an -an -am -am -MX -vc -ap -aj -aj -aj -ap -aU -yQ -ao -ao -ap -aF -ao -ax -ap -aj -ae -ao -ae -ae -ao -ao -ap -aj -aj -ae -ae -ae -ae -ae -aj -aj -ap -ap -aj -ao -aM -aM -aM -ao -aj -ap -ap -an -ae -ae -ae -ae -ad -ad -ae -ad -ad -ad -ad -ad -ad -ad -ad -ae -ae -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ae -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(107,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ad -ad -ad -ae -ae -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ae -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ae -ae -ae -an -an -an -an -am -am -MX -vc -aM -aM -aM -aU -yQ -ao -ao -aj -aj -aV -aB -bd -aI -aj -ae -ae -ae -ao -ao -an -ap -ap -aj -ao -ae -ae -ae -ao -aj -ap -ap -ap -aj -aj -aj -aj -aj -aj -aj -ap -an -am -ae -ae -ae -ad -ad -ae -ae -ad -ad -ad -ad -ad -ad -ad -ad -ad -ae -ae -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ae -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(108,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ad -ad -ad -ae -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ae -ae -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ae -ae -an -an -an -an -am -am -MX -vc -ap -aU -yQ -ao -ao -ae -ae -aj -aj -aj -aj -aj -ae -ae -ae -ae -ao -an -an -an -ap -aj -aj -aj -ae -aj -aj -aj -ap -an -ap -ap -ap -ap -ap -ap -ap -ap -ap -an -an -ae -ae -ae -ad -ae -ae -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ae -ae -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ae -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(109,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ad -ad -ad -ae -ae -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ae -ae -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ae -ae -an -ah -an -an -am -am -MX -ma -Le -ao -ao -ae -ae -ao -ae -aj -ap -aj -yR -ao -ae -ae -ae -ao -an -an -an -ap -ap -ap -aj -ae -aj -ap -ap -ap -an -an -an -an -an -an -an -an -an -an -an -ae -ae -ae -ae -ae -ae -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ae -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ae -ae -ad -ad -ad -ad -ad -ad -ae -ae -ae -ae -ad -ad -ad -ad -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(110,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ad -ad -ad -ad -ae -ad -ad -ad -ad -ad -ad -ad -ad -ae -ae -ae -ae -ae -ae -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ae -an -an -an -an -an -am -am -NQ -am -ao -ae -ae -ae -ae -ae -aj -aj -aj -ae -ae -ae -ae -ae -ao -an -an -an -ap -aM -aj -aj -ae -aj -aj -aM -ap -ah -an -an -an -ah -an -an -an -an -an -an -ae -ae -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ae -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ae -ad -ad -ad -ad -ad -ad -ae -ae -ad -ae -ae -ad -ad -ad -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(111,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ad -ad -ad -ad -ae -ad -ad -ad -ad -ad -ae -ae -ae -ae -ad -ad -ad -ad -ae -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ae -ae -an -an -an -an -an -am -am -am -ao -ae -aj -aj -aj -ae -aj -aj -aj -ae -aj -aj -aj -ae -ao -an -an -ah -ap -aM -aj -aj -ae -aj -aj -aM -ap -an -an -an -an -an -an -an -an -an -an -ae -ae -ae -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ae -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ae -ad -ad -ad -ad -ad -ad -ae -ad -ad -ad -ae -ad -ad -ad -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(112,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ad -ad -ad -ae -ad -ad -ad -ad -ae -ae -ad -ad -ad -ad -ad -ad -ad -ae -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ae -an -an -an -an -an -an -am -am -ao -ae -aj -ap -aj -aj -aj -aM -aM -aj -aj -ap -aj -ae -ao -ah -an -an -ap -ap -ap -aj -ae -aj -ap -ap -ap -an -an -an -an -an -ag -an -ah -an -ae -ae -ae -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ae -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ae -ae -ad -ad -ad -ad -ae -ae -ad -ad -ad -ae -ad -ad -ad -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(113,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ad -ad -ad -ae -ad -ad -ae -ae -ae -ad -ad -ad -ad -ad -ad -ad -ad -ae -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ae -an -an -ah -an -an -an -an -am -ao -ao -aj -aj -aj -aj -fA -aY -EM -aj -aj -aj -aj -ae -ao -an -an -an -ap -aj -aj -aj -ae -aj -aj -aj -ap -an -an -an -an -an -an -an -an -an -ae -ae -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ae -ae -ae -ad -ad -ad -ad -ad -ae -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ae -ae -ad -ad -ae -ae -ad -ad -ad -ad -ae -ae -ad -ad -ad -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(114,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ad -ad -ad -ae -ae -ae -ae -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ae -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ae -an -an -an -an -an -an -an -an -am -ao -ao -aj -aM -fA -wM -ak -as -pz -aj -aj -ao -ao -ao -an -an -an -ap -aj -ae -ae -ae -ae -ae -aj -ap -an -an -an -ah -an -ah -an -an -an -ae -ae -ad -ad -ad -ad -ad -ad -ad -ad -ad -ae -ae -ae -ad -ae -ad -ad -ad -ad -ad -ae -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ae -ae -ae -ae -ad -ad -ad -ae -ae -ae -ae -ad -ad -ad -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(115,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ad -ad -ae -ae -ae -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ae -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ae -ae -an -an -ah -an -an -an -an -an -am -ao -ao -aM -aq -ak -TP -ak -LT -aM -ao -ao -an -an -an -an -an -ap -aj -ae -ao -ao -aM -aj -aj -ap -an -an -an -an -an -an -an -an -an -ae -ae -ae -ad -ad -ad -ad -ad -ad -ad -ae -ae -ad -ad -ad -ae -ae -ad -ad -ad -ae -ae -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ae -ad -ad -ae -ad -ad -ad -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(116,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ad -ad -ae -ae -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ae -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ae -an -an -an -an -an -an -an -an -an -am -ao -aj -as -pz -ak -fA -wM -aM -ao -an -an -an -ap -ap -ap -ap -aj -aj -aM -ao -ao -ae -aj -ap -ap -ap -ap -ah -an -an -an -an -an -ae -ae -ae -ae -ad -ad -ad -ad -ad -ae -ae -ad -ad -ad -ad -ad -ae -ae -ae -ae -ae -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ae -ae -ad -ad -ae -ad -ad -ad -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(117,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ad -ad -ae -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ae -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ae -an -an -an -an -an -an -an -an -an -an -ao -aj -aj -as -aY -Gl -aj -aj -ao -an -an -an -ap -aj -aj -aQ -aj -ae -ae -ae -ae -ae -aj -aQ -aj -aj -ap -an -an -an -ag -an -an -ae -ae -ae -ae -ad -ad -ad -ae -ae -ae -ad -ad -ad -ad -ad -ad -ad -ad -ae -ae -ae -ae -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ae -ae -ad -ad -ad -ae -ad -ad -ad -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(118,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ad -ae -ae -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ae -ae -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ae -an -an -an -an -an -an -an -an -an -an -ao -ao -aj -aM -aM -aj -aj -ao -ao -an -an -an -ap -aj -aS -ao -aj -aj -aj -aj -aj -aj -aj -ao -aS -aj -ap -an -an -an -an -an -an -ae -ae -ae -ae -ae -ae -ae -ae -ad -ad -ad -ad -ad -ad -ad -ad -ad -ae -ae -ad -ad -ae -ae -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ae -ae -ad -ad -ad -ad -ae -ad -ad -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(119,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ad -ae -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ae -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ae -an -an -an -an -an -an -an -an -an -an -an -ao -ao -aj -aj -aj -ao -ao -an -an -an -ah -ap -aj -aS -ao -ao -ao -ao -ao -ao -ao -ao -ao -aS -aj -ap -an -an -ah -an -an -an -ae -ae -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ae -ad -ad -ad -ad -ae -ad -ad -ad -ad -ae -ae -ae -ae -ad -ad -ad -ad -ad -ad -ad -ae -ae -ad -ad -ad -ad -ad -ae -ad -ad -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(120,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ae -ae -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ae -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ae -an -an -an -an -an -an -an -an -an -an -an -an -ao -ao -aj -ao -ao -an -an -an -an -an -ap -aj -aS -aS -aS -aS -aS -aS -aS -aS -aS -aS -aS -aj -ap -an -an -an -an -an -an -an -ae -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ae -ae -ad -ad -ad -ad -ae -ae -ad -ad -ad -ae -ad -ad -ae -ae -ad -ad -ad -ad -ad -ae -ae -ad -ad -ad -ad -ad -ad -ae -ad -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(121,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ae -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ae -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ae -an -an -an -an -an -an -an -an -an -an -an -an -an -ao -ao -ao -an -an -an -an -an -an -ap -aj -ao -TP -ao -TP -ao -TP -ao -TP -ao -TP -ao -aj -ap -an -an -an -an -ah -an -an -ae -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ae -ad -ad -ad -ad -ad -ad -ae -ad -ad -ad -ae -ad -ad -ad -ae -ad -ad -ad -ad -ae -ae -ad -ad -ad -ad -ad -ad -ae -ae -ae -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(122,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ae -ae -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ae -ae -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ae -ae -an -an -an -an -an -an -an -an -an -an -an -an -an -an -an -an -an -an -an -an -an -an -ap -aj -aj -aj -aj -aj -aj -aj -aj -aj -aj -aj -aj -aj -ap -an -an -an -an -an -an -an -ae -ad -ad -ad -ad -ae -ae -ae -ae -ad -ad -ad -ad -ad -ad -ae -ad -ad -ad -ad -ad -ad -ae -ad -ad -ad -ae -ad -ad -ad -ae -ad -ad -ad -ad -ae -ad -ad -ad -ad -ad -ad -ad -ae -ad -ae -ae -ae -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(123,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ae -af -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ae -ae -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ae -an -ah -an -an -ah -ah -an -an -an -an -an -an -an -an -an -an -an -an -an -an -an -an -an -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ah -an -an -an -an -an -an -ae -ae -ad -ad -ae -ae -ad -ad -ae -ad -ad -ad -ad -ad -ad -ae -ad -ad -ad -ad -ad -ad -ae -ad -ad -ad -ae -ad -ad -ad -ae -ad -ad -ad -ad -ae -ad -ad -ad -ad -ad -ad -ae -ae -ad -ad -ad -ae -ae -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(124,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ae -ae -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ae -an -an -an -an -ah -an -an -an -an -an -an -an -an -an -an -an -an -an -an -an -an -an -an -an -an -an -an -an -an -an -an -an -an -an -an -an -an -an -an -an -ah -an -an -an -an -an -ae -ad -ad -ae -ad -ad -ad -ae -ae -ad -ad -ad -ad -ad -ae -ad -ad -ad -ad -ad -ae -ae -ad -ad -ad -ae -ad -ad -ad -ae -ad -ad -ad -ad -ae -ad -ad -ad -ad -ad -ad -ae -ad -ad -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(125,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ae -ae -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ae -an -an -an -an -an -an -an -ah -an -ah -an -an -an -an -an -an -an -ah -an -an -an -an -an -an -an -an -ah -an -an -an -an -an -an -an -ag -an -an -an -an -an -an -ah -an -an -an -an -ae -ad -ad -ae -ad -ad -ad -ad -ae -ad -ad -ad -ad -ad -ae -ad -ad -ad -ad -ad -ae -ad -ad -ad -ad -ae -ad -ad -ad -ae -ad -ad -ad -ad -ae -ad -ad -ad -ad -ad -ad -ae -ad -ad -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(126,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ae -ae -ae -ae -ae -ae -ae -ae -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ae -an -an -an -an -an -an -ah -an -an -an -an -an -an -an -an -an -an -an -an -an -an -an -an -an -an -an -an -an -an -an -an -an -ah -an -an -an -ah -an -an -an -an -an -an -an -an -ah -ae -ad -ad -ae -ad -ad -ad -ad -ae -ad -ad -ad -ad -ad -ae -ad -ad -ad -ad -ad -ae -ad -ad -ad -ad -ae -ad -ad -ad -ae -ad -ad -ad -ae -ae -ad -ad -ad -ad -ad -ae -ae -ad -ad -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(127,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ae -ae -ae -ae -ae -ae -ae -ae -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ae -an -ah -an -an -an -an -an -an -an -an -an -an -an -an -an -an -an -an -an -an -ah -an -an -an -an -an -an -an -an -ah -an -an -an -an -an -an -an -an -ah -an -an -an -an -an -ad -ad -ae -ad -ad -ae -ad -ad -ad -ad -ae -ad -ad -ad -ad -ad -ae -ad -ad -ad -ad -ad -ae -ae -ad -ad -ad -ae -ad -ad -ad -ae -ae -ad -ad -ae -ad -ad -ad -ad -ad -ad -ae -ad -ad -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(128,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ae -ae -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ae -ae -ae -an -an -an -ah -an -an -an -an -an -an -an -an -an -an -an -an -an -an -an -an -an -an -an -an -ah -an -an -an -an -an -an -an -an -an -an -ah -ah -an -an -an -an -an -an -ad -ad -ae -ad -ad -ae -ad -ad -ad -ad -ae -ae -ad -ad -ad -ad -ae -ad -ad -ad -ad -ad -ad -ae -ad -ad -ad -ae -ad -ad -ad -ad -ae -ae -ae -ae -ad -ad -ad -ad -ad -ad -ae -ad -ad -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(129,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ac -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ae -ad -ad -ad -ad -ad -ad -ad -ad -ad -ae -ae -ad -ae -an -an -an -an -an -an -an -an -an -an -an -an -an -an -an -an -an -an -an -an -an -an -an -an -an -an -an -an -an -an -an -an -an -an -an -an -an -an -an -an -an -an -an -ad -ad -ae -ad -ad -ae -ad -ad -ad -ad -ad -ae -ad -ad -ad -ad -ae -ad -ad -ad -ad -ad -ad -ae -ad -ad -ad -ae -ad -ad -ad -ad -ad -ae -ae -ad -ad -ad -ad -ad -ad -ae -ae -ad -ad -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(130,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ae -ad -ad -ad -ad -ad -ad -ad -ae -ae -ae -ad -ad -ae -an -an -an -ah -an -an -an -an -ah -an -an -an -an -an -an -an -an -an -an -an -an -an -ah -an -an -an -an -an -ag -an -ah -ah -an -an -an -an -an -an -an -an -an -an -ad -ad -ad -ae -ad -ad -ae -ae -ad -ad -ad -ad -ae -ae -ad -ad -ae -ae -ad -ad -ad -ad -ad -ad -ae -ae -ad -ad -ae -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ae -ad -ad -ad -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(131,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ae -ad -ad -ad -ae -ae -ae -ae -ae -ad -ad -ad -ad -ae -ae -an -an -ah -an -an -an -ah -an -an -an -an -an -an -an -an -an -an -an -an -ah -an -an -an -an -ah -an -an -an -an -an -an -an -an -an -an -an -ah -an -an -an -an -ad -ad -ae -ae -ad -ad -ad -ae -ae -ad -ad -ad -ad -ae -ad -ad -ae -ad -ad -ad -ad -ad -ad -ad -ad -ae -ae -ae -ae -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ae -ad -ad -ad -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(132,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ae -ad -ae -ae -ae -ad -ad -ad -ad -ad -ad -ad -ad -ad -ae -ae -ae -ae -ae -an -an -an -an -an -an -an -an -an -an -an -an -an -an -an -an -ah -an -an -an -an -an -an -an -ah -an -an -an -an -an -an -an -an -an -an -ad -ad -ad -ad -ae -ad -ad -ad -ad -ad -ae -ae -ae -ad -ad -ae -ae -ae -ae -ad -ad -ad -ad -ad -ad -ad -ad -ad -ae -ae -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ae -ad -ad -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(133,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ae -ae -ae -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ae -ae -ae -ae -an -an -an -an -an -an -an -an -an -an -an -an -an -an -an -an -an -an -ah -an -an -an -an -ah -ah -an -an -an -an -an -ad -ad -ad -ad -ad -ad -ae -ad -ad -ad -ad -ad -ad -ad -ae -ad -ad -ad -ad -ae -ae -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ae -ae -ad -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(134,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ae -ae -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ae -ae -an -an -an -an -an -ah -an -ad -ad -ah -an -an -ad -ad -ad -an -an -an -an -an -an -an -ad -an -an -an -an -an -ad -ad -ad -ad -ad -ad -ad -ae -ad -ad -ad -ad -ad -ad -ae -ae -ad -ad -ad -ad -ae -ae -ae -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ae -ad -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(135,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ae -ae -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ae -an -an -an -an -an -an -ad -ad -ad -ad -an -an -ad -ad -ad -ad -an -an -an -an -ad -ad -ad -ad -an -an -ad -ad -ad -ad -ad -ad -ad -ad -ae -ae -ad -ad -ad -ad -ad -ae -ae -ad -ad -ad -ad -ad -ae -ae -ae -ae -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ae -ae -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(136,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ae -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ae -ae -an -ah -an -ah -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -an -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ae -ad -ad -ad -ad -ad -ae -ae -ad -ad -ad -ad -ad -ad -ae -ad -ad -ae -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ae -ae -ae -ae -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(137,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ae -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ae -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ae -ae -ad -ad -ad -ad -ae -ae -ad -ad -ad -ad -ad -ad -ae -ae -ad -ad -ae -ae -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ae -ae -ae -ae -ae -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(138,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ae -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ae -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ae -ae -ad -ad -ad -ad -ae -ae -ad -ad -ad -ad -ad -ad -ae -ae -ad -ad -ad -ad -ae -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ae -ae -ae -ae -ae -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(139,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ae -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ae -ae -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ae -ae -ad -ad -ad -ae -ae -ae -ad -ad -ad -ad -ad -ae -ae -ae -ad -ad -ad -ad -ad -ae -ae -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ae -ae -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(140,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ae -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ae -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ae -ad -ad -ad -ad -ae -ae -ae -ae -ae -ae -ae -ae -ae -ad -ad -ad -ad -ad -ad -ad -ad -ae -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ae -ad -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(141,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ae -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ae -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ae -ae -ad -ad -ad -ae -ae -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ae -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ae -ae -ad -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(142,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ae -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ae -ae -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ae -ae -ae -ae -ae -ae -ae -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ae -ae -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ae -ad -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(143,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ae -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ae -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ae -ae -ae -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ae -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ae -ad -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(144,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ae -ae -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ae -ae -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ae -ae -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ae -ae -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ae -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(145,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ae -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ae -ae -ae -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ae -ae -ae -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ae -ae -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ae -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(146,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ae -ae -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ae -ae -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ae -ae -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ae -ae -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ae -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(147,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ae -ae -ae -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ae -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ae -ae -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ae -ae -ae -ae -ae -ae -ae -ae -ad -ad -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(148,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ae -ae -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ae -ae -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ae -ae -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ae -ad -ad -ad -ad -ad -ad -ae -ae -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -bg -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(149,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ae -ae -ae -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ae -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ae -ae -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ae -ae -ad -ad -ad -ad -ad -ad -ad -ae -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(150,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ae -ae -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ae -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ae -ae -ae -ae -ae -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ae -ae -ae -ae -ad -ad -ad -ad -ae -ae -ad -ad -ad -ad -ad -ad -ad -ad -ae -ae -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(151,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ae -ae -ae -ad -ad -ad -ad -ad -ae -ae -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ae -ae -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ae -ae -ae -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ae -ae -ad -ad -ae -ae -ae -ae -ae -ae -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ae -ae -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(152,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ae -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ae -ae -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ae -ae -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ae -ae -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(153,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ae -ae -ae -ae -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ae -ad -ad -ad -ad -ad -ad -ad -ad -ad -ae -ae -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ae -ae -ae -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ae -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(154,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ae -ae -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ae -ad -ad -ad -ad -ad -ad -ad -ae -ae -ae -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ae -ae -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(155,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ae -ad -ad -ad -ad -ad -ad -ae -ae -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ae -ae -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(156,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ae -ae -ad -ad -ae -ae -ae -ae -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ae -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(157,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ae -ae -ae -ae -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ae -ae -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(158,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ae -ae -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ae -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(159,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ae -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ae -ae -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(160,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ad -ad -ad -aa -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -aa -aa -aa -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ae -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ae -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(161,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -aa -aa -aa -aa -aa -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ae -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ae -ae -ae -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(162,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ad -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ae -ae -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -aa -aa -aa -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ae -ae -ae -ae -ae -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(163,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ae -ae -ad -ad -ad -ad -ad -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -be -ae -ae -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ad -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(164,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ae -ae -ae -ad -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(165,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ae -ae -ae -ae -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(166,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ae -ae -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(167,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(168,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ad -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(169,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(170,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(171,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(172,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(173,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(174,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(175,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(176,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(177,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(178,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aR -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(179,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(180,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(181,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(182,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(183,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(184,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(185,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(186,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(187,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(188,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(189,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(190,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(191,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(192,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(193,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(194,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(195,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(196,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(197,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(198,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(199,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(200,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} diff --git a/maps/away/mining/mining-signal.dmm b/maps/away/mining/mining-signal.dmm deleted file mode 100644 index a151d8795fa7d..0000000000000 --- a/maps/away/mining/mining-signal.dmm +++ /dev/null @@ -1,42958 +0,0 @@ -//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE -"aa" = ( -/turf/unsimulated/mask, -/area/mine/unexplored) -"ab" = ( -/turf/simulated/floor/asteroid, -/area/mine/explored) -"af" = ( -/turf/simulated/wall/titanium, -/area/outpost/abandoned) -"ag" = ( -/obj/structure/table/rack, -/obj/random/tech_supply, -/obj/random/bomb_supply, -/turf/simulated/floor/holofloor/tiled/dark, -/area/outpost/abandoned) -"ah" = ( -/obj/structure/table/rack, -/obj/random/tech_supply, -/obj/random/loot, -/obj/random/loot, -/turf/simulated/floor/holofloor/tiled/dark, -/area/outpost/abandoned) -"ai" = ( -/obj/structure/table/steel_reinforced, -/turf/simulated/floor/holofloor/tiled/dark, -/area/outpost/abandoned) -"aj" = ( -/obj/machinery/porta_turret/stationary, -/turf/simulated/floor/holofloor/tiled/dark, -/area/outpost/abandoned) -"ak" = ( -/obj/structure/table/rack, -/obj/item/cell/hyper, -/obj/item/cell/hyper, -/turf/simulated/floor/holofloor/tiled/dark, -/area/outpost/abandoned) -"am" = ( -/obj/structure/table/rack, -/obj/random/energy, -/obj/structure/window/reinforced{ - dir = 8 - }, -/obj/structure/window/reinforced{ - dir = 4 - }, -/obj/machinery/door/window/brigdoor/southleft, -/turf/simulated/floor/holofloor/tiled/dark, -/area/outpost/abandoned) -"an" = ( -/obj/machinery/mech_recharger, -/obj/machinery/door/window/brigdoor/southright, -/obj/structure/window/reinforced{ - dir = 8 - }, -/turf/simulated/floor/holofloor/tiled/dark, -/area/outpost/abandoned) -"ao" = ( -/turf/simulated/floor/holofloor/tiled/dark, -/area/outpost/abandoned) -"ap" = ( -/obj/structure/table, -/turf/simulated/floor/plating, -/area/outpost/abandoned) -"aq" = ( -/obj/machinery/constructable_frame/machine_frame, -/turf/simulated/floor/plating, -/area/outpost/abandoned) -"ar" = ( -/obj/machinery/constructable_frame/computerframe, -/turf/simulated/floor/airless, -/area/outpost/abandoned) -"as" = ( -/obj/machinery/tele_projector, -/turf/simulated/floor/airless, -/area/outpost/abandoned) -"at" = ( -/obj/machinery/tele_pad, -/turf/simulated/floor/airless, -/area/outpost/abandoned) -"au" = ( -/obj/structure/table, -/obj/random/toolbox, -/turf/simulated/floor/tiled, -/area/outpost/abandoned) -"av" = ( -/turf/unsimulated/mask, -/area/outpost/abandoned) -"aw" = ( -/obj/structure/table/glass, -/obj/item/newspaper, -/obj/effect/floor_decal/corner/paleblue/diagonal, -/turf/simulated/floor/tiled/white, -/area/outpost/abandoned) -"ax" = ( -/obj/structure/table/glass, -/obj/effect/floor_decal/corner/paleblue/diagonal, -/turf/simulated/floor/tiled/white, -/area/outpost/abandoned) -"ay" = ( -/obj/structure/table, -/obj/effect/floor_decal/corner/paleblue/diagonal, -/turf/simulated/floor/tiled/white, -/area/outpost/abandoned) -"az" = ( -/obj/effect/floor_decal/corner/paleblue/diagonal, -/turf/simulated/floor/tiled/white, -/area/outpost/abandoned) -"aA" = ( -/turf/simulated/floor/diona, -/area/outpost/abandoned) -"aB" = ( -/obj/machinery/papershredder, -/obj/effect/floor_decal/corner/paleblue/diagonal, -/turf/simulated/floor/tiled/white, -/area/outpost/abandoned) -"aC" = ( -/obj/structure/table/glass, -/obj/effect/floor_decal/corner/paleblue/diagonal, -/obj/random/loot, -/turf/simulated/floor/tiled/white, -/area/outpost/abandoned) -"aD" = ( -/obj/machinery/light/small/emergency{ - dir = 8; - icon_state = "bulb1" - }, -/turf/simulated/floor/holofloor/tiled/dark, -/area/outpost/abandoned) -"aE" = ( -/obj/random/trash, -/turf/simulated/floor/holofloor/tiled/dark, -/area/outpost/abandoned) -"aF" = ( -/obj/random/technology_scanner, -/obj/machinery/porta_turret/stationary, -/turf/simulated/floor/holofloor/tiled/dark, -/area/outpost/abandoned) -"aG" = ( -/obj/machinery/light/small/emergency{ - dir = 4; - icon_state = "bulb1" - }, -/turf/simulated/floor/holofloor/tiled/dark, -/area/outpost/abandoned) -"aH" = ( -/turf/simulated/floor/plating, -/area/outpost/abandoned) -"aI" = ( -/turf/simulated/floor/tiled, -/area/outpost/abandoned) -"aK" = ( -/obj/structure/bed/chair/office/dark{ - dir = 8; - icon_state = "officechair_dark" - }, -/obj/effect/floor_decal/corner/paleblue/diagonal, -/turf/simulated/floor/tiled/white, -/area/outpost/abandoned) -"aL" = ( -/obj/structure/bed/chair/office/dark{ - dir = 4; - icon_state = "officechair_dark" - }, -/obj/effect/floor_decal/corner/paleblue/diagonal, -/turf/simulated/floor/tiled/white, -/area/outpost/abandoned) -"aM" = ( -/obj/structure/table/glass, -/obj/item/pen, -/obj/effect/floor_decal/corner/paleblue/diagonal, -/turf/simulated/floor/tiled/white, -/area/outpost/abandoned) -"aN" = ( -/obj/machinery/door/airlock/highsecurity, -/turf/simulated/floor/tiled/dark, -/area/outpost/abandoned) -"aO" = ( -/obj/effect/decal/cleanable/blood, -/obj/item/material/shard, -/turf/simulated/floor/tiled/freezer, -/area/outpost/abandoned) -"aP" = ( -/obj/machinery/door/window/brigdoor/northright, -/obj/effect/decal/cleanable/blood, -/turf/simulated/floor/tiled/freezer, -/area/outpost/abandoned) -"aQ" = ( -/obj/machinery/mech_recharger, -/turf/simulated/floor/tiled, -/area/outpost/abandoned) -"aR" = ( -/obj/machinery/mech_recharger, -/obj/structure/mech_wreckage/powerloader, -/turf/simulated/floor/tiled, -/area/outpost/abandoned) -"aS" = ( -/obj/machinery/light/small/emergency{ - dir = 8; - icon_state = "bulb1" - }, -/turf/simulated/floor/plating, -/area/outpost/abandoned) -"aT" = ( -/obj/random/tool, -/turf/simulated/floor/tiled, -/area/outpost/abandoned) -"aU" = ( -/obj/random/material, -/turf/simulated/floor/plating, -/area/outpost/abandoned) -"aV" = ( -/obj/machinery/constructable_frame/computerframe, -/turf/simulated/floor/tiled, -/area/outpost/abandoned) -"aW" = ( -/obj/structure/table/glass, -/obj/item/paper_bin, -/obj/machinery/light/small{ - dir = 8 - }, -/obj/effect/floor_decal/corner/paleblue/diagonal, -/turf/simulated/floor/tiled/white, -/area/outpost/abandoned) -"aX" = ( -/obj/machinery/r_n_d/circuit_imprinter{ - icon_state = "circuit_imprinter_t"; - stat = 1 - }, -/obj/effect/floor_decal/corner/paleblue/diagonal, -/turf/simulated/floor/tiled/white, -/area/outpost/abandoned) -"aY" = ( -/obj/machinery/r_n_d/protolathe{ - icon_state = "protolathe_t"; - stat = 1 - }, -/obj/effect/floor_decal/corner/paleblue/diagonal, -/turf/simulated/floor/tiled/white, -/area/outpost/abandoned) -"aZ" = ( -/obj/structure/table/glass, -/obj/item/paper_bin, -/obj/machinery/light/small{ - dir = 4 - }, -/obj/effect/floor_decal/corner/paleblue/diagonal, -/turf/simulated/floor/tiled/white, -/area/outpost/abandoned) -"ba" = ( -/obj/machinery/door/window/brigdoor/northleft, -/turf/simulated/floor/tiled/freezer, -/area/outpost/abandoned) -"bb" = ( -/obj/machinery/door/window/brigdoor/northright, -/turf/simulated/floor/tiled/freezer, -/area/outpost/abandoned) -"bc" = ( -/obj/machinery/light/small{ - dir = 1 - }, -/turf/simulated/floor/holofloor/tiled/dark, -/area/outpost/abandoned) -"be" = ( -/obj/effect/decal/cleanable/blood, -/obj/random/loot, -/turf/simulated/floor/tiled/freezer, -/area/outpost/abandoned) -"bf" = ( -/obj/structure/table/glass, -/obj/item/cell/potato, -/obj/effect/floor_decal/corner/paleblue/diagonal, -/turf/simulated/floor/tiled/white, -/area/outpost/abandoned) -"bg" = ( -/obj/item/pen, -/obj/effect/floor_decal/corner/paleblue/diagonal, -/turf/simulated/floor/tiled/white, -/area/outpost/abandoned) -"bh" = ( -/obj/structure/table/rack, -/obj/item/rig/hazmat, -/turf/simulated/floor/tiled/freezer, -/area/outpost/abandoned) -"bi" = ( -/obj/structure/table/rack, -/obj/random/loot, -/turf/simulated/floor/tiled/freezer, -/area/outpost/abandoned) -"bj" = ( -/obj/effect/decal/cleanable/blood, -/turf/simulated/floor/tiled/freezer, -/area/outpost/abandoned) -"bk" = ( -/obj/machinery/light/small, -/turf/simulated/floor/tiled, -/area/outpost/abandoned) -"bl" = ( -/obj/machinery/light/small/emergency, -/turf/simulated/floor/tiled, -/area/outpost/abandoned) -"bm" = ( -/obj/machinery/door/airlock/glass/science, -/turf/simulated/floor/tiled/white, -/area/outpost/abandoned) -"bn" = ( -/obj/machinery/door/airlock/vault/bolted, -/turf/simulated/floor/tiled/dark, -/area/outpost/abandoned) -"bo" = ( -/obj/machinery/door/blast/shutters{ - dir = 2 - }, -/turf/simulated/floor/tiled, -/area/outpost/abandoned) -"bp" = ( -/obj/machinery/door/airlock/glass/science{ - icon_state = "door_locked"; - locked = 1; - secured_wires = 1 - }, -/turf/simulated/floor/tiled, -/area/outpost/abandoned) -"bq" = ( -/obj/machinery/door/airlock/glass/science, -/obj/structure/barricade, -/turf/simulated/floor/tiled/white, -/area/outpost/abandoned) -"br" = ( -/obj/structure/table/steel, -/obj/effect/floor_decal/corner/purple/three_quarters{ - dir = 8 - }, -/turf/simulated/floor/tiled/white, -/area/outpost/abandoned) -"bs" = ( -/obj/structure/bed/chair, -/obj/effect/floor_decal/corner/purple{ - dir = 5 - }, -/turf/simulated/floor/tiled/white, -/area/outpost/abandoned) -"bt" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/floor_decal/corner/purple{ - dir = 5 - }, -/turf/simulated/floor/tiled/white, -/area/outpost/abandoned) -"bu" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/obj/effect/floor_decal/corner/purple{ - dir = 5 - }, -/turf/simulated/floor/tiled/white, -/area/outpost/abandoned) -"bv" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/light/small{ - dir = 1 - }, -/obj/effect/floor_decal/corner/purple{ - dir = 5 - }, -/turf/simulated/floor/tiled/white, -/area/outpost/abandoned) -"bw" = ( -/obj/random/trash, -/obj/effect/floor_decal/corner/purple{ - dir = 5 - }, -/turf/simulated/floor/tiled/white, -/area/outpost/abandoned) -"bx" = ( -/obj/effect/floor_decal/corner/purple{ - dir = 5 - }, -/turf/simulated/floor/tiled/white, -/area/outpost/abandoned) -"by" = ( -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/diona, -/area/outpost/abandoned) -"bz" = ( -/obj/item/ammo_casing/shotgun/pellet, -/obj/item/ammo_casing/shotgun/pellet{ - pixel_x = 10; - pixel_y = -10 - }, -/obj/effect/decal/cleanable/blood{ - pixel_y = 32 - }, -/obj/effect/floor_decal/corner/purple{ - dir = 5 - }, -/turf/simulated/floor/tiled/white, -/area/outpost/abandoned) -"bA" = ( -/obj/item/ammo_casing/shotgun/pellet{ - pixel_x = -5 - }, -/obj/effect/decal/cleanable/blood{ - pixel_x = -32 - }, -/obj/effect/floor_decal/corner/purple{ - dir = 5 - }, -/turf/simulated/floor/tiled/white, -/area/outpost/abandoned) -"bB" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/noticeboard/anomaly{ - pixel_y = 32 - }, -/obj/effect/floor_decal/corner/purple{ - dir = 5 - }, -/turf/simulated/floor/tiled/white, -/area/outpost/abandoned) -"bC" = ( -/obj/effect/floor_decal/corner/purple{ - dir = 5 - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/white, -/area/outpost/abandoned) -"bD" = ( -/obj/machinery/light/small{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/diona, -/area/outpost/abandoned) -"bE" = ( -/obj/effect/floor_decal/corner/purple{ - dir = 5 - }, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/white, -/area/outpost/abandoned) -"bF" = ( -/obj/machinery/light/small{ - dir = 1 - }, -/obj/effect/floor_decal/corner/purple{ - dir = 5 - }, -/turf/simulated/floor/tiled/white, -/area/outpost/abandoned) -"bG" = ( -/obj/structure/table/steel, -/obj/effect/floor_decal/corner/purple{ - dir = 9 - }, -/obj/random/loot, -/turf/simulated/floor/tiled/white, -/area/outpost/abandoned) -"bH" = ( -/turf/simulated/floor/tiled/white, -/area/outpost/abandoned) -"bI" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/obj/item/trash/cigbutt/cigarbutt, -/turf/simulated/floor/diona, -/area/outpost/abandoned) -"bJ" = ( -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/white, -/area/outpost/abandoned) -"bK" = ( -/obj/effect/gibspawner/human, -/turf/simulated/floor/tiled/white, -/area/outpost/abandoned) -"bL" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/white, -/area/outpost/abandoned) -"bM" = ( -/obj/effect/decal/cleanable/blood, -/turf/simulated/floor/tiled/white, -/area/outpost/abandoned) -"bN" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/blood, -/turf/simulated/floor/tiled/white, -/area/outpost/abandoned) -"bO" = ( -/obj/effect/floor_decal/corner/purple/three_quarters, -/turf/simulated/floor/tiled/white, -/area/outpost/abandoned) -"bP" = ( -/obj/effect/floor_decal/corner/purple{ - dir = 10 - }, -/turf/simulated/floor/tiled/white, -/area/outpost/abandoned) -"bQ" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/floor_decal/corner/purple{ - dir = 10 - }, -/turf/simulated/floor/tiled/white, -/area/outpost/abandoned) -"bR" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/light/small, -/turf/simulated/floor/diona, -/area/outpost/abandoned) -"bS" = ( -/obj/random/trash, -/turf/simulated/floor/diona, -/area/outpost/abandoned) -"bT" = ( -/obj/effect/floor_decal/corner/purple{ - dir = 10 - }, -/obj/effect/floor_decal/corner/purple{ - dir = 10 - }, -/turf/simulated/floor/tiled/white, -/area/outpost/abandoned) -"bU" = ( -/obj/effect/floor_decal/corner/purple{ - dir = 10 - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/white, -/area/outpost/abandoned) -"bV" = ( -/obj/machinery/light/small, -/obj/effect/floor_decal/corner/purple{ - dir = 10 - }, -/turf/simulated/floor/tiled/white, -/area/outpost/abandoned) -"bW" = ( -/obj/machinery/door/airlock/security, -/obj/machinery/door/blast/regular{ - id_tag = "mars_blast" - }, -/turf/simulated/floor/tiled/dark, -/area/outpost/abandoned) -"bX" = ( -/obj/machinery/door/airlock/science, -/obj/machinery/door/blast/regular{ - id_tag = "mars_blast" - }, -/turf/simulated/floor/tiled/white, -/area/outpost/abandoned) -"bY" = ( -/obj/machinery/door/airlock/glass, -/turf/simulated/floor/tiled/white, -/area/outpost/abandoned) -"bZ" = ( -/obj/effect/wallframe_spawn/reinforced, -/turf/simulated/floor/plating, -/area/outpost/abandoned) -"ca" = ( -/obj/structure/table/steel, -/obj/effect/floor_decal/corner/paleblue/three_quarters{ - dir = 8 - }, -/obj/random/loot, -/turf/simulated/floor/tiled/airless, -/area/outpost/abandoned) -"cb" = ( -/obj/structure/table/steel, -/obj/effect/floor_decal/corner/paleblue{ - dir = 5 - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/airless, -/area/outpost/abandoned) -"cc" = ( -/obj/machinery/optable, -/obj/effect/floor_decal/corner/paleblue{ - dir = 5 - }, -/obj/machinery/light/small{ - dir = 1; - icon_state = "bulb1" - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/airless, -/area/outpost/abandoned) -"cd" = ( -/obj/machinery/computer/operating, -/obj/effect/floor_decal/corner/paleblue{ - dir = 5 - }, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/airless, -/area/outpost/abandoned) -"ce" = ( -/obj/structure/closet/secure_closet/medical2, -/obj/effect/floor_decal/corner/paleblue/three_quarters{ - dir = 1 - }, -/turf/simulated/floor/tiled/airless, -/area/outpost/abandoned) -"cf" = ( -/obj/effect/floor_decal/corner/red/three_quarters{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/obj/item/ammo_casing/pistol/magnum, -/turf/simulated/floor/tiled/dark, -/area/outpost/abandoned) -"cg" = ( -/obj/effect/floor_decal/corner/red{ - dir = 5 - }, -/obj/effect/decal/cleanable/dirt, -/obj/item/ammo_casing/pistol/magnum, -/turf/simulated/floor/tiled/dark, -/area/outpost/abandoned) -"ch" = ( -/obj/structure/table/steel_reinforced, -/obj/machinery/embedded_controller/radio/airlock/access_controller, -/obj/effect/floor_decal/corner/red/three_quarters{ - dir = 1 - }, -/turf/simulated/floor/tiled/dark, -/area/outpost/abandoned) -"cj" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 9; - icon_state = "warning" - }, -/turf/simulated/floor/tiled/white, -/area/outpost/abandoned) -"ck" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/diona, -/area/outpost/abandoned) -"cl" = ( -/obj/structure/hygiene/shower{ - dir = 8 - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 5; - icon_state = "warning" - }, -/obj/structure/window/reinforced/tinted/frosted, -/obj/machinery/atmospherics/unary/vent_pump{ - dir = 4 - }, -/obj/structure/sign/warning/secure_area{ - pixel_y = 32 - }, -/turf/simulated/floor/tiled/white, -/area/outpost/abandoned) -"cm" = ( -/obj/effect/floor_decal/spline/fancy/wood{ - dir = 9 - }, -/turf/simulated/floor/wood, -/area/outpost/abandoned) -"cn" = ( -/obj/effect/floor_decal/spline/fancy/wood{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/wood{ - icon_state = "wood_broken3" - }, -/area/outpost/abandoned) -"co" = ( -/obj/structure/table/woodentable, -/obj/effect/decal/cleanable/dirt, -/obj/random/trash, -/turf/simulated/floor/wood, -/area/outpost/abandoned) -"cp" = ( -/obj/structure/table/woodentable, -/obj/item/board, -/turf/simulated/floor/wood, -/area/outpost/abandoned) -"cq" = ( -/obj/structure/table/woodentable, -/obj/random/loot, -/turf/simulated/floor/wood, -/area/outpost/abandoned) -"cr" = ( -/obj/effect/floor_decal/spline/fancy/wood{ - dir = 1 - }, -/turf/simulated/floor/wood{ - icon_state = "wood_broken2" - }, -/area/outpost/abandoned) -"cs" = ( -/obj/effect/floor_decal/spline/fancy/wood{ - dir = 5 - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/wood, -/area/outpost/abandoned) -"ct" = ( -/obj/machinery/door/airlock/centcom, -/obj/machinery/door/blast/regular{ - id_tag = "mars_blast" - }, -/turf/simulated/floor/tiled/dark, -/area/outpost/abandoned) -"cu" = ( -/obj/effect/floor_decal/corner/paleblue{ - dir = 9 - }, -/turf/simulated/floor/tiled/airless, -/area/outpost/abandoned) -"cv" = ( -/obj/effect/decal/cleanable/blood, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/airless, -/area/outpost/abandoned) -"cw" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/airless, -/area/outpost/abandoned) -"cx" = ( -/obj/effect/floor_decal/corner/paleblue{ - dir = 6 - }, -/turf/simulated/floor/tiled/airless, -/area/outpost/abandoned) -"cy" = ( -/obj/effect/decal/cleanable/blood, -/turf/simulated/wall/titanium, -/area/outpost/abandoned) -"cG" = ( -/obj/effect/decal/cleanable/dirt, -/turf/simulated/wall/titanium, -/area/outpost/abandoned) -"cH" = ( -/obj/effect/floor_decal/spline/fancy/wood{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/wood, -/area/outpost/abandoned) -"cI" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/wood, -/area/outpost/abandoned) -"cJ" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/wood{ - icon_state = "wood_broken4" - }, -/area/outpost/abandoned) -"cK" = ( -/obj/effect/floor_decal/plaque, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/wood, -/area/outpost/abandoned) -"cL" = ( -/obj/effect/decal/cleanable/dirt, -/obj/random/trash, -/turf/simulated/floor/wood{ - icon_state = "wood_broken0" - }, -/area/outpost/abandoned) -"cM" = ( -/obj/effect/floor_decal/spline/fancy/wood{ - dir = 4 - }, -/turf/simulated/floor/wood, -/area/outpost/abandoned) -"cN" = ( -/obj/structure/filingcabinet/filingcabinet, -/turf/simulated/floor/carpet/blue, -/area/outpost/abandoned) -"cO" = ( -/obj/structure/table/woodentable, -/obj/random/loot, -/turf/simulated/floor/carpet/blue, -/area/outpost/abandoned) -"cP" = ( -/obj/structure/bed/chair, -/obj/machinery/light/small{ - dir = 1 - }, -/turf/simulated/floor/carpet/blue, -/area/outpost/abandoned) -"cQ" = ( -/turf/simulated/floor/carpet/blue, -/area/outpost/abandoned) -"cR" = ( -/obj/structure/girder, -/turf/simulated/floor/tiled/dark, -/area/outpost/abandoned) -"cS" = ( -/obj/structure/filingcabinet/filingcabinet, -/turf/simulated/floor/tiled/dark, -/area/outpost/abandoned) -"cT" = ( -/obj/structure/foamedmetal, -/turf/simulated/floor/tiled/dark, -/area/outpost/abandoned) -"cU" = ( -/obj/effect/floor_decal/corner/paleblue/three_quarters, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/airless, -/area/outpost/abandoned) -"cV" = ( -/obj/effect/floor_decal/corner/paleblue{ - dir = 10 - }, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/airless, -/area/outpost/abandoned) -"cW" = ( -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/airless, -/area/outpost/abandoned) -"cX" = ( -/obj/effect/decal/cleanable/blood, -/obj/effect/floor_decal/corner/paleblue{ - dir = 10 - }, -/obj/effect/decal/cleanable/dirt, -/obj/random/loot, -/turf/simulated/floor/tiled/airless, -/area/outpost/abandoned) -"cY" = ( -/obj/effect/floor_decal/corner/paleblue/three_quarters{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/airless, -/area/outpost/abandoned) -"cZ" = ( -/obj/effect/floor_decal/corner/red/three_quarters, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/dark, -/area/outpost/abandoned) -"da" = ( -/obj/structure/sign/poster{ - pixel_y = -32 - }, -/obj/effect/floor_decal/corner/red{ - dir = 10 - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/dark, -/area/outpost/abandoned) -"db" = ( -/obj/effect/floor_decal/corner/red/three_quarters{ - dir = 4 - }, -/obj/machinery/computer/modular/preset/security{ - dir = 8; - icon_state = "console" - }, -/turf/simulated/floor/tiled/dark, -/area/outpost/abandoned) -"dc" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 10; - icon_state = "warning" - }, -/turf/simulated/floor/tiled/white, -/area/outpost/abandoned) -"dd" = ( -/obj/structure/barricade, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/diona, -/area/outpost/abandoned) -"de" = ( -/obj/structure/hygiene/shower{ - dir = 8 - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 6; - icon_state = "warning" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/red, -/obj/structure/window/reinforced/tinted/frosted{ - dir = 1; - icon_state = "fwindow" - }, -/obj/machinery/atmospherics/unary/vent_pump{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/outpost/abandoned) -"dg" = ( -/obj/effect/floor_decal/spline/fancy/wood{ - dir = 10 - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/carpet, -/area/outpost/abandoned) -"dj" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/carpet, -/area/outpost/abandoned) -"dl" = ( -/obj/effect/floor_decal/spline/fancy/wood{ - dir = 6 - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/carpet, -/area/outpost/abandoned) -"dm" = ( -/obj/effect/wallframe_spawn/reinforced, -/obj/machinery/door/blast/regular{ - id_tag = "mars_blast" - }, -/turf/simulated/floor/plating, -/area/outpost/abandoned) -"do" = ( -/obj/effect/decal/cleanable/blood/gibs/limb, -/obj/effect/decal/cleanable/blood, -/turf/simulated/floor/carpet/blue, -/area/outpost/abandoned) -"dp" = ( -/obj/structure/janitorialcart, -/turf/simulated/floor/tiled/dark, -/area/outpost/abandoned) -"dq" = ( -/obj/structure/dispenser, -/turf/simulated/floor/tiled/dark, -/area/outpost/abandoned) -"dr" = ( -/obj/structure/barricade, -/turf/simulated/floor/tiled/dark, -/area/outpost/abandoned) -"ds" = ( -/obj/machinery/door/airlock/medical{ - density = 0; - icon_state = "door_open"; - opacity = 0 - }, -/obj/machinery/holosign/surgery, -/turf/simulated/floor/tiled/airless, -/area/outpost/abandoned) -"dt" = ( -/obj/structure/door_assembly{ - anchored = 1 - }, -/turf/simulated/floor/diona, -/area/outpost/abandoned) -"du" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/red, -/turf/simulated/wall/titanium, -/area/outpost/abandoned) -"dw" = ( -/obj/effect/floor_decal/spline/fancy/wood{ - dir = 10 - }, -/obj/structure/table/woodentable, -/obj/random/loot, -/turf/simulated/floor/carpet, -/area/outpost/abandoned) -"dx" = ( -/obj/effect/floor_decal/spline/fancy/wood, -/obj/structure/table/woodentable, -/turf/simulated/floor/carpet, -/area/outpost/abandoned) -"dA" = ( -/obj/effect/floor_decal/spline/fancy/wood{ - dir = 6 - }, -/obj/structure/table/woodentable, -/turf/simulated/floor/carpet, -/area/outpost/abandoned) -"dC" = ( -/obj/machinery/vending/coffee{ - icon_state = "coffee-broken"; - prices = list() - }, -/turf/simulated/floor/tiled/dark, -/area/outpost/abandoned) -"dD" = ( -/turf/simulated/floor/tiled/white/airless, -/area/outpost/abandoned) -"dE" = ( -/obj/effect/decal/remains, -/obj/structure/table, -/obj/item/material/shard{ - icon_state = "shardlarge" - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/white/airless, -/area/outpost/abandoned) -"dF" = ( -/obj/structure/table, -/obj/item/material/shard{ - icon_state = "shardsmall" - }, -/obj/effect/floor_decal/corner/paleblue{ - dir = 5 - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/white/airless, -/area/outpost/abandoned) -"dG" = ( -/obj/effect/floor_decal/corner/paleblue{ - dir = 5 - }, -/turf/simulated/floor/tiled/white/airless, -/area/outpost/abandoned) -"dH" = ( -/turf/simulated/floor/tiled/airless, -/area/outpost/abandoned) -"dI" = ( -/obj/effect/decal/cleanable/cobweb, -/obj/machinery/alarm{ - dir = 4; - icon_state = "alarmx"; - pixel_x = -23 - }, -/turf/simulated/floor/tiled/airless, -/area/outpost/abandoned) -"dJ" = ( -/obj/effect/decal/cleanable/liquid_fuel, -/obj/structure/table/steel, -/obj/random/bomb_supply, -/turf/simulated/floor/tiled/airless, -/area/outpost/abandoned) -"dK" = ( -/obj/effect/decal/cleanable/liquid_fuel, -/obj/structure/bed/chair, -/turf/simulated/floor/tiled/airless, -/area/outpost/abandoned) -"dL" = ( -/obj/effect/decal/cleanable/liquid_fuel, -/obj/structure/bed/chair, -/obj/machinery/light/small/emergency{ - dir = 1; - icon_state = "bulb1" - }, -/turf/simulated/floor/tiled/airless, -/area/outpost/abandoned) -"dM" = ( -/obj/structure/bed/chair, -/turf/simulated/floor/tiled/airless, -/area/outpost/abandoned) -"dN" = ( -/obj/machinery/vending/snack{ - icon_state = "snack-broken"; - stat = 1 - }, -/turf/simulated/floor/tiled/airless, -/area/outpost/abandoned) -"dO" = ( -/obj/structure/ore_box, -/turf/simulated/floor/diona, -/area/outpost/abandoned) -"dP" = ( -/obj/structure/closet/crate/large, -/turf/simulated/floor/tiled/airless, -/area/outpost/abandoned) -"dQ" = ( -/obj/structure/sign/directions/science{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/red, -/turf/simulated/wall/titanium, -/area/outpost/abandoned) -"dR" = ( -/obj/structure/table/woodentable{ - icon_state = "solid_flip0" - }, -/turf/simulated/floor/carpet/blue, -/area/outpost/abandoned) -"dS" = ( -/obj/item/material/shard{ - icon_state = "splinterslarge" - }, -/turf/simulated/floor/carpet/blue, -/area/outpost/abandoned) -"dT" = ( -/turf/simulated/floor/tiled/dark, -/area/outpost/abandoned) -"dU" = ( -/obj/effect/floor_decal/corner/paleblue{ - dir = 9 - }, -/obj/machinery/light/small{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/white/airless, -/area/outpost/abandoned) -"dV" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plating{ - icon_state = "dmg1" - }, -/area/outpost/abandoned) -"dW" = ( -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/white/airless, -/area/outpost/abandoned) -"dY" = ( -/obj/structure/extinguisher_cabinet{ - icon_state = "extinguisher_empty"; - pixel_x = 30 - }, -/obj/machinery/light/small{ - dir = 4; - icon_state = "bulb1" - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/white/airless, -/area/outpost/abandoned) -"dZ" = ( -/obj/effect/decal/cleanable/liquid_fuel, -/turf/simulated/wall/titanium, -/area/outpost/abandoned) -"ea" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/liquid_fuel, -/obj/effect/decal/cleanable/liquid_fuel, -/turf/simulated/floor/tiled/airless, -/area/outpost/abandoned) -"eb" = ( -/obj/effect/decal/cleanable/dirt, -/obj/item/mop, -/turf/simulated/floor/plating{ - icon_state = "dmg2" - }, -/area/outpost/abandoned) -"ec" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/liquid_fuel, -/turf/simulated/floor/tiled/airless, -/area/outpost/abandoned) -"ed" = ( -/obj/effect/decal/cleanable/liquid_fuel, -/obj/effect/decal/cleanable/blood/oil, -/turf/simulated/floor/tiled/airless, -/area/outpost/abandoned) -"ee" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/red, -/turf/simulated/floor/tiled/airless, -/area/outpost/abandoned) -"ef" = ( -/obj/machinery/light/small/emergency{ - dir = 1; - icon_state = "bulb1" - }, -/turf/simulated/floor/tiled/airless, -/area/outpost/abandoned) -"eg" = ( -/obj/effect/decal/cleanable/cobweb2, -/obj/item/ammo_magazine/pistol/small, -/turf/simulated/floor/tiled/airless, -/area/outpost/abandoned) -"eh" = ( -/obj/structure/hygiene/sink/puddle, -/turf/simulated/floor/asteroid, -/area/mine/explored) -"ei" = ( -/obj/random/trash, -/turf/simulated/floor/asteroid, -/area/mine/explored) -"ej" = ( -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/asteroid, -/area/mine/explored) -"ek" = ( -/obj/machinery/light/small{ - dir = 4; - icon_state = "bulb1" - }, -/turf/simulated/floor/asteroid, -/area/mine/explored) -"el" = ( -/obj/structure/firedoor_assembly{ - anchored = 1 - }, -/obj/effect/wallframe_spawn/reinforced, -/turf/simulated/floor/plating, -/area/outpost/abandoned) -"em" = ( -/obj/structure/wall_frame, -/obj/structure/grille/broken, -/obj/machinery/door/firedoor, -/turf/simulated/floor/plating, -/area/outpost/abandoned) -"en" = ( -/obj/machinery/door/airlock/centcom, -/turf/simulated/floor/tiled/dark, -/area/outpost/abandoned) -"ep" = ( -/obj/machinery/newscaster, -/turf/simulated/wall/titanium, -/area/outpost/abandoned) -"eq" = ( -/obj/effect/decal/cleanable/blood, -/obj/machinery/light/small{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark, -/area/outpost/abandoned) -"er" = ( -/obj/effect/floor_decal/corner/paleblue{ - dir = 9 - }, -/obj/effect/floor_decal/corner/paleblue{ - dir = 9 - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/white/airless, -/area/outpost/abandoned) -"es" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/white/airless, -/area/outpost/abandoned) -"et" = ( -/obj/effect/decal/cleanable/liquid_fuel, -/obj/structure/table, -/obj/structure/window/reinforced{ - dir = 1 - }, -/obj/item/material/shard, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/white/airless, -/area/outpost/abandoned) -"eu" = ( -/obj/effect/decal/cleanable/liquid_fuel, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/mob/living/bot/medbot, -/turf/simulated/floor/tiled/white/airless, -/area/outpost/abandoned) -"ev" = ( -/obj/effect/decal/cleanable/liquid_fuel, -/turf/simulated/floor/tiled/white/airless, -/area/outpost/abandoned) -"ex" = ( -/obj/structure/sign/directions/medical{ - dir = 8 - }, -/turf/simulated/wall/titanium, -/area/outpost/abandoned) -"ez" = ( -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plating{ - icon_state = "dmg1" - }, -/area/outpost/abandoned) -"eA" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/obj/effect/gibspawner/human, -/turf/simulated/floor/tiled/airless, -/area/outpost/abandoned) -"eB" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/red, -/obj/item/ammo_magazine/pistol/small, -/turf/simulated/floor/plating{ - icon_state = "dmg1" - }, -/area/outpost/abandoned) -"eC" = ( -/obj/item/ammo_magazine/pistol/small, -/turf/simulated/floor/tiled/airless, -/area/outpost/abandoned) -"eD" = ( -/obj/effect/decal/cleanable/blood, -/turf/simulated/floor/tiled/airless, -/area/outpost/abandoned) -"eE" = ( -/obj/machinery/door/blast/regular{ - id_tag = "mars_blast" - }, -/obj/machinery/door/firedoor, -/obj/effect/wallframe_spawn/reinforced, -/turf/simulated/floor/plating, -/area/outpost/abandoned) -"eF" = ( -/obj/effect/decal/cleanable/blood, -/obj/effect/decal/cleanable/dirt, -/obj/effect/floor_decal/industrial/warning/dust{ - dir = 4 - }, -/turf/simulated/floor/asteroid, -/area/mine/explored) -"eG" = ( -/obj/machinery/door/airlock/external, -/turf/simulated/floor/plating, -/area/outpost/abandoned) -"eH" = ( -/obj/effect/floor_decal/industrial/warning/cee{ - dir = 1; - icon_state = "warningcee" - }, -/obj/effect/floor_decal/industrial/warning/cee, -/turf/simulated/floor/plating, -/area/outpost/abandoned) -"eI" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/door/airlock/external, -/turf/simulated/floor/plating, -/area/outpost/abandoned) -"eJ" = ( -/obj/item/material/shard{ - icon_state = "shardsmall" - }, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/dark, -/area/outpost/abandoned) -"eK" = ( -/obj/item/material/shard{ - icon_state = "piecesmall" - }, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/dark, -/area/outpost/abandoned) -"eL" = ( -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/dark, -/area/outpost/abandoned) -"eM" = ( -/obj/effect/floor_decal/corner/paleblue{ - dir = 9 - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/white/airless, -/area/outpost/abandoned) -"eO" = ( -/obj/structure/table/glass, -/obj/structure/window/reinforced{ - dir = 4 - }, -/obj/structure/window/reinforced, -/obj/random/loot, -/turf/simulated/floor/tiled/white/airless, -/area/outpost/abandoned) -"eP" = ( -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plating{ - icon_state = "dmg4" - }, -/area/outpost/abandoned) -"eQ" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/green{ - dir = 4 - }, -/turf/simulated/floor/tiled/white/airless, -/area/outpost/abandoned) -"eR" = ( -/obj/structure/door_assembly, -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/simple/hidden/green{ - dir = 4 - }, -/turf/simulated/floor/tiled/airless, -/area/outpost/abandoned) -"eS" = ( -/obj/effect/decal/cleanable/blood, -/obj/effect/floor_decal/corner/paleblue{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/green{ - dir = 4 - }, -/turf/simulated/floor/tiled/airless, -/area/outpost/abandoned) -"eT" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/green{ - dir = 4 - }, -/obj/random/trash, -/turf/simulated/floor/tiled/airless, -/area/outpost/abandoned) -"eU" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/green{ - dir = 4 - }, -/turf/simulated/floor/tiled/airless, -/area/outpost/abandoned) -"eV" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/simple/hidden/green{ - dir = 4 - }, -/turf/simulated/floor/plating{ - icon_state = "dmg1" - }, -/area/outpost/abandoned) -"eW" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/liquid_fuel, -/obj/machinery/atmospherics/pipe/simple/hidden/green{ - dir = 4 - }, -/turf/simulated/floor/tiled/airless, -/area/outpost/abandoned) -"eX" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/generic, -/obj/machinery/atmospherics/pipe/simple/hidden/green{ - dir = 4 - }, -/turf/simulated/floor/tiled/airless, -/area/outpost/abandoned) -"eY" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/obj/item/wrench, -/obj/machinery/atmospherics/pipe/simple/hidden/green{ - dir = 4 - }, -/turf/simulated/floor/tiled/airless, -/area/outpost/abandoned) -"eZ" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/simple/hidden/green{ - dir = 4 - }, -/turf/simulated/floor/tiled/airless, -/area/outpost/abandoned) -"fa" = ( -/obj/effect/decal/cleanable/ash, -/obj/machinery/atmospherics/pipe/simple/hidden/green{ - dir = 4 - }, -/turf/simulated/floor/tiled/airless, -/area/outpost/abandoned) -"fb" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/simple/hidden/green{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/red, -/turf/simulated/floor/plating{ - icon_state = "dmg1" - }, -/area/outpost/abandoned) -"fc" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/blood, -/obj/item/ammo_magazine/pistol/small, -/turf/simulated/floor/tiled/airless, -/area/outpost/abandoned) -"fd" = ( -/obj/effect/decal/cleanable/blood, -/obj/item/ammo_magazine/pistol/small, -/turf/simulated/floor/tiled/airless, -/area/outpost/abandoned) -"fe" = ( -/turf/simulated/floor/tiled/airless, -/area/mine/explored) -"fh" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/dark, -/area/outpost/abandoned) -"fi" = ( -/obj/item/pen, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/dark, -/area/outpost/abandoned) -"fj" = ( -/obj/effect/decal/cleanable/blood/gibs/limb, -/turf/simulated/floor/tiled/dark, -/area/outpost/abandoned) -"fk" = ( -/obj/machinery/alarm{ - dir = 8; - icon_state = "alarmx"; - pixel_x = 24 - }, -/turf/simulated/floor/tiled/dark, -/area/outpost/abandoned) -"fl" = ( -/obj/machinery/light/small{ - dir = 8 - }, -/turf/simulated/floor/tiled/white/airless, -/area/outpost/abandoned) -"fm" = ( -/turf/simulated/floor/plating{ - icon_state = "dmg3" - }, -/area/outpost/abandoned) -"fo" = ( -/obj/random/medical, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/white/airless, -/area/outpost/abandoned) -"fq" = ( -/obj/machinery/light/small{ - dir = 4 - }, -/turf/simulated/floor/tiled/white/airless, -/area/outpost/abandoned) -"fr" = ( -/obj/structure/window/basic{ - dir = 1 - }, -/obj/structure/window/basic{ - dir = 4 - }, -/obj/structure/flora/ausbushes/brflowers, -/turf/simulated/floor/grass, -/area/outpost/abandoned) -"fs" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/vomit, -/turf/simulated/floor/tiled/airless, -/area/outpost/abandoned) -"ft" = ( -/obj/effect/decal/cleanable/dirt, -/obj/random/medical, -/turf/simulated/floor/plating{ - icon_state = "dmg4" - }, -/area/outpost/abandoned) -"fu" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/mopbucket, -/turf/simulated/floor/tiled/airless, -/area/outpost/abandoned) -"fv" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/remains, -/turf/simulated/floor/tiled/airless, -/area/outpost/abandoned) -"fw" = ( -/obj/effect/decal/cleanable/dirt, -/obj/random/trash, -/turf/simulated/floor/plating{ - icon_state = "dmg1" - }, -/area/outpost/abandoned) -"fx" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/obj/item/ammo_magazine/pistol/small, -/turf/simulated/floor/tiled/airless, -/area/outpost/abandoned) -"fy" = ( -/obj/effect/floor_decal/asteroid, -/turf/simulated/floor/asteroid, -/area/mine/explored) -"fz" = ( -/obj/effect/floor_decal/asteroid, -/turf/simulated/floor/plating{ - icon_state = "dmg2" - }, -/area/mine/explored) -"fA" = ( -/obj/structure/table/standard, -/obj/structure/window/reinforced{ - dir = 1 - }, -/obj/structure/window/reinforced{ - dir = 8 - }, -/obj/random/loot, -/turf/simulated/floor/tiled/dark, -/area/outpost/abandoned) -"fB" = ( -/obj/structure/table/standard, -/obj/item/paper_bin, -/obj/machinery/door/window/northleft, -/turf/simulated/floor/tiled/dark, -/area/outpost/abandoned) -"fC" = ( -/obj/structure/table/standard, -/obj/structure/window/reinforced{ - dir = 1 - }, -/obj/item/gun/energy/taser, -/turf/simulated/floor/tiled/dark, -/area/outpost/abandoned) -"fD" = ( -/obj/structure/window/reinforced{ - dir = 1 - }, -/obj/structure/table, -/turf/simulated/floor/tiled/dark, -/area/outpost/abandoned) -"fE" = ( -/obj/effect/floor_decal/corner/paleblue/three_quarters, -/turf/simulated/floor/tiled/white/airless, -/area/outpost/abandoned) -"fF" = ( -/obj/effect/floor_decal/corner/paleblue{ - dir = 10 - }, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/white/airless, -/area/outpost/abandoned) -"fG" = ( -/obj/structure/mech_wreckage/powerloader, -/obj/effect/floor_decal/corner/paleblue{ - dir = 10 - }, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/white/airless, -/area/outpost/abandoned) -"fH" = ( -/obj/random/firstaid, -/turf/simulated/floor/tiled/white/airless, -/area/outpost/abandoned) -"fI" = ( -/turf/simulated/floor/grass, -/area/outpost/abandoned) -"fJ" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/window/basic{ - dir = 4 - }, -/obj/structure/window/basic{ - dir = 1 - }, -/obj/structure/flora/ausbushes/stalkybush, -/turf/simulated/floor/grass, -/area/outpost/abandoned) -"fK" = ( -/obj/effect/decal/cleanable/blood/gibs/down, -/turf/simulated/floor/tiled/airless, -/area/outpost/abandoned) -"fL" = ( -/obj/item/newspaper, -/turf/simulated/floor/tiled/airless, -/area/outpost/abandoned) -"fM" = ( -/obj/machinery/firealarm{ - dir = 1; - icon_state = "firex"; - pixel_y = -24 - }, -/turf/simulated/floor/tiled/airless, -/area/outpost/abandoned) -"fN" = ( -/obj/machinery/requests_console{ - icon_state = "req_comp_rewired"; - pixel_y = -32; - stat = 1 - }, -/turf/simulated/floor/tiled/airless, -/area/outpost/abandoned) -"fO" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/cable{ - d1 = 16; - d2 = 0; - dir = 4; - icon_state = "0-2" - }, -/obj/machinery/power/apc/high/inactive{ - name = "south bump"; - pixel_y = -24 - }, -/turf/simulated/floor/tiled/airless, -/area/outpost/abandoned) -"fP" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/light/small/emergency, -/obj/structure/cable{ - d1 = 16; - d2 = 0; - dir = 4; - icon_state = "1-8" - }, -/turf/simulated/floor/tiled/airless, -/area/outpost/abandoned) -"fQ" = ( -/obj/effect/decal/cleanable/generic, -/turf/simulated/floor/tiled/airless, -/area/outpost/abandoned) -"fR" = ( -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/airless, -/area/mine/explored) -"fS" = ( -/obj/effect/decal/cleanable/blood, -/obj/machinery/light/small, -/turf/simulated/floor/tiled/dark, -/area/outpost/abandoned) -"fT" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/firealarm{ - dir = 1; - icon_state = "firex"; - pixel_y = -24 - }, -/turf/simulated/floor/tiled/dark, -/area/outpost/abandoned) -"fU" = ( -/obj/structure/table/standard, -/obj/structure/window/reinforced{ - dir = 8 - }, -/obj/item/reagent_containers/food/drinks/flask/vacuumflask, -/turf/simulated/floor/tiled/dark, -/area/outpost/abandoned) -"fV" = ( -/obj/structure/bed/chair/office/light{ - dir = 8 - }, -/turf/simulated/floor/tiled/dark, -/area/outpost/abandoned) -"fW" = ( -/obj/machinery/door/airlock/hatch, -/turf/simulated/floor/plating, -/area/outpost/abandoned) -"fX" = ( -/obj/structure/cable{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/turf/simulated/wall/titanium, -/area/outpost/abandoned) -"fY" = ( -/obj/structure/cable{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/wall/titanium, -/area/outpost/abandoned) -"fZ" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/wall/titanium, -/area/outpost/abandoned) -"ga" = ( -/obj/structure/bed/chair{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/airless, -/area/outpost/abandoned) -"gb" = ( -/turf/simulated/floor/plating, -/area/mine/explored) -"gc" = ( -/obj/item/solar_assembly, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/asteroid, -/area/mine/explored) -"gd" = ( -/obj/structure/windoor_assembly{ - anchored = 1; - dir = 8 - }, -/turf/simulated/floor/tiled/dark, -/area/outpost/abandoned) -"ge" = ( -/obj/effect/decal/cleanable/blood, -/turf/simulated/floor/tiled/dark, -/area/outpost/abandoned) -"gf" = ( -/obj/structure/cable, -/obj/machinery/power/smes/batteryrack, -/turf/simulated/floor/plating, -/area/outpost/abandoned) -"gg" = ( -/obj/machinery/computer/power_monitor, -/obj/effect/decal/cleanable/cobweb2, -/obj/structure/cable, -/turf/simulated/floor/plating, -/area/outpost/abandoned) -"gh" = ( -/obj/structure/barricade, -/obj/machinery/door/firedoor, -/obj/effect/wallframe_spawn/reinforced, -/turf/simulated/floor/plating, -/area/outpost/abandoned) -"gi" = ( -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/airless{ - icon_state = "steel_broken0" - }, -/area/mine/explored) -"gj" = ( -/obj/machinery/door/airlock/hatch, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plating, -/area/outpost/abandoned) -"gk" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/power/terminal{ - dir = 1 - }, -/obj/structure/cable/orange{ - dir = 1 - }, -/turf/simulated/floor/plating, -/area/outpost/abandoned) -"gl" = ( -/obj/structure/girder, -/turf/simulated/floor/plating, -/area/outpost/abandoned) -"gm" = ( -/turf/simulated/floor/plating{ - icon_state = "dmg2" - }, -/area/outpost/abandoned) -"gn" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/floor_decal/industrial/warning{ - dir = 4; - icon_state = "warning" - }, -/turf/simulated/floor/tiled/airless, -/area/outpost/abandoned) -"go" = ( -/obj/machinery/door/airlock/external, -/obj/machinery/door/blast/regular{ - id_tag = "mars_blast" - }, -/obj/machinery/door/firedoor, -/turf/simulated/floor/plating, -/area/outpost/abandoned) -"gp" = ( -/obj/effect/floor_decal/industrial/warning/dust{ - dir = 9 - }, -/obj/random/loot, -/turf/simulated/floor/plating, -/area/outpost/abandoned) -"gq" = ( -/obj/effect/floor_decal/industrial/warning/dust{ - dir = 5 - }, -/obj/machinery/light/small/emergency{ - dir = 1; - icon_state = "bulb1" - }, -/turf/simulated/floor/plating, -/area/outpost/abandoned) -"gr" = ( -/obj/machinery/door/airlock/external, -/obj/machinery/door/blast/regular/open, -/obj/machinery/door/firedoor, -/turf/simulated/floor/plating, -/area/outpost/abandoned) -"gs" = ( -/obj/effect/floor_decal/industrial/warning/dust{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/asteroid, -/area/mine/explored) -"gt" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/asteroid, -/area/mine/explored) -"gu" = ( -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plating, -/area/outpost/abandoned) -"gv" = ( -/obj/random/closet, -/obj/random/loot, -/turf/simulated/floor/plating, -/area/outpost/abandoned) -"gw" = ( -/obj/structure/cable/orange{ - dir = 1; - icon_state = "1-2" - }, -/obj/structure/cable/orange{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/random/trash, -/turf/simulated/floor/plating, -/area/outpost/abandoned) -"gx" = ( -/obj/structure/cable/orange{ - dir = 4; - icon_state = "1-4" - }, -/turf/simulated/floor/plating, -/area/outpost/abandoned) -"gy" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/light/small/emergency{ - dir = 8; - icon_state = "bulb1" - }, -/turf/simulated/floor/tiled/airless, -/area/outpost/abandoned) -"gz" = ( -/obj/machinery/door/airlock/external{ - density = 0; - icon_state = "door_open"; - opacity = 0 - }, -/obj/machinery/door/blast/regular/open, -/obj/machinery/door/firedoor, -/turf/simulated/floor/plating, -/area/outpost/abandoned) -"gA" = ( -/obj/effect/floor_decal/industrial/warning/dust{ - dir = 10 - }, -/turf/simulated/floor/plating, -/area/outpost/abandoned) -"gB" = ( -/obj/effect/floor_decal/industrial/warning/dust{ - dir = 6 - }, -/turf/simulated/floor/plating, -/area/outpost/abandoned) -"gC" = ( -/turf/simulated/floor/tiled/airless{ - icon_state = "steel_broken4" - }, -/area/mine/explored) -"gD" = ( -/obj/effect/floor_decal/industrial/hatch, -/obj/structure/cable/orange{ - dir = 1; - icon_state = "1-2" - }, -/turf/simulated/floor/plating, -/area/outpost/abandoned) -"gE" = ( -/obj/effect/decal/cleanable/blood/tracks/footprints, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/airless, -/area/outpost/abandoned) -"gF" = ( -/obj/structure/sign/warning/vacuum{ - pixel_x = 32 - }, -/obj/effect/decal/cleanable/blood, -/turf/simulated/floor/tiled/airless, -/area/outpost/abandoned) -"gH" = ( -/obj/structure/cable/orange{ - icon_state = "1-4" - }, -/turf/simulated/floor/plating, -/area/outpost/abandoned) -"gI" = ( -/obj/structure/cable/orange{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/plating, -/area/outpost/abandoned) -"gJ" = ( -/obj/machinery/door/airlock/hatch, -/obj/structure/cable/orange{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/plating, -/area/outpost/abandoned) -"gK" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/obj/structure/cable/orange{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/turf/simulated/floor/tiled/airless, -/area/outpost/abandoned) -"gL" = ( -/obj/effect/decal/cleanable/blood/tracks/footprints, -/turf/simulated/floor/tiled/airless, -/area/outpost/abandoned) -"gM" = ( -/obj/item/solar_assembly, -/turf/simulated/floor/asteroid, -/area/mine/explored) -"gN" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/door/firedoor, -/obj/structure/cable/orange{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/airless, -/area/outpost/abandoned) -"gO" = ( -/obj/effect/decal/cleanable/blood/tracks/footprints, -/obj/effect/decal/cleanable/dirt, -/obj/structure/firedoor_assembly{ - anchored = 1 - }, -/turf/simulated/floor/plating{ - icon_state = "dmg2" - }, -/area/outpost/abandoned) -"gP" = ( -/obj/effect/decal/cleanable/blood/gibs/limb, -/obj/machinery/door/firedoor, -/turf/simulated/floor/tiled/airless, -/area/outpost/abandoned) -"gQ" = ( -/obj/structure/cable/orange{ - dir = 1 - }, -/obj/machinery/power/tracker, -/turf/simulated/floor/asteroid, -/area/outpost/abandoned) -"gR" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/cable/orange{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/airless, -/area/outpost/abandoned) -"gS" = ( -/obj/machinery/firealarm{ - dir = 4; - icon_state = "firex"; - pixel_x = 26 - }, -/turf/simulated/floor/tiled/airless, -/area/outpost/abandoned) -"gT" = ( -/obj/effect/floor_decal/solarpanel, -/obj/structure/cable/orange{ - dir = 8 - }, -/turf/simulated/floor/plating, -/area/outpost/abandoned) -"gU" = ( -/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/simulated/floor/plating, -/area/outpost/abandoned) -"gV" = ( -/obj/effect/floor_decal/solarpanel, -/obj/structure/cable/orange{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/outpost/abandoned) -"gW" = ( -/obj/structure/cable/orange{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/asteroid, -/area/outpost/abandoned) -"gX" = ( -/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/cable/orange{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/plating, -/area/outpost/abandoned) -"gY" = ( -/obj/effect/floor_decal/solarpanel, -/obj/structure/cable/orange{ - dir = 4 - }, -/obj/machinery/power/solar, -/turf/simulated/floor/plating, -/area/outpost/abandoned) -"gZ" = ( -/obj/random/junk, -/turf/simulated/floor/plating, -/area/outpost/abandoned) -"ha" = ( -/obj/machinery/newscaster{ - icon_state = "newscaster_off"; - pixel_x = -30; - stat = 1 - }, -/obj/machinery/newscaster{ - icon_state = "crack3"; - pixel_x = -30; - stat = 1 - }, -/obj/structure/cable/orange{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/airless, -/area/outpost/abandoned) -"hb" = ( -/obj/structure/bed/chair, -/obj/effect/floor_decal/industrial/warning{ - dir = 1; - icon_state = "warning" - }, -/turf/simulated/floor/tiled/airless, -/area/outpost/abandoned) -"hc" = ( -/obj/structure/table/steel, -/obj/item/material/ashtray/glass, -/obj/effect/decal/cleanable/cobweb2, -/obj/effect/floor_decal/industrial/warning{ - dir = 5; - icon_state = "warning" - }, -/turf/simulated/floor/tiled/airless, -/area/outpost/abandoned) -"he" = ( -/obj/effect/floor_decal/solarpanel, -/obj/machinery/power/solar, -/obj/structure/cable/orange{ - dir = 8 - }, -/turf/simulated/floor/plating, -/area/outpost/abandoned) -"hf" = ( -/obj/effect/floor_decal/solarpanel, -/obj/machinery/power/solar, -/obj/structure/cable/orange{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/outpost/abandoned) -"hg" = ( -/obj/structure/closet/crate/trashcart, -/obj/random/loot, -/turf/simulated/floor/plating, -/area/outpost/abandoned) -"hh" = ( -/obj/machinery/washing_machine, -/obj/structure/cable/orange{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/airless, -/area/outpost/abandoned) -"hj" = ( -/obj/effect/decal/cleanable/blood/gibs/body, -/turf/simulated/floor/tiled/airless, -/area/outpost/abandoned) -"hk" = ( -/obj/structure/bed/chair{ - dir = 8 - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 4; - icon_state = "warning" - }, -/turf/simulated/floor/tiled/airless, -/area/outpost/abandoned) -"hl" = ( -/obj/random/trash, -/turf/simulated/floor/tiled/airless, -/area/outpost/abandoned) -"hm" = ( -/obj/structure/bed/chair{ - dir = 8 - }, -/turf/simulated/floor/tiled/airless, -/area/outpost/abandoned) -"hn" = ( -/obj/effect/floor_decal/solarpanel, -/obj/structure/cable/orange{ - dir = 8 - }, -/obj/machinery/power/solar, -/turf/simulated/floor/plating, -/area/outpost/abandoned) -"ho" = ( -/obj/structure/table/rack, -/obj/random/toolbox, -/obj/effect/decal/cleanable/cobweb, -/turf/simulated/floor/plating, -/area/outpost/abandoned) -"hp" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/liquid_fuel, -/turf/simulated/floor/plating, -/area/outpost/abandoned) -"hq" = ( -/obj/structure/table/reinforced, -/obj/random/contraband, -/turf/simulated/floor/plating, -/area/outpost/abandoned) -"hr" = ( -/obj/random/junk, -/obj/structure/cable/orange{ - icon_state = "1-4" - }, -/turf/simulated/floor/tiled/airless, -/area/outpost/abandoned) -"hs" = ( -/obj/structure/cable/orange{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/random/loot, -/turf/simulated/floor/tiled/airless, -/area/outpost/abandoned) -"ht" = ( -/obj/structure/cable/orange{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/airless, -/area/outpost/abandoned) -"hu" = ( -/obj/machinery/light/small/emergency, -/obj/structure/cable/orange{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/airless, -/area/outpost/abandoned) -"hv" = ( -/obj/item/gun/energy/plasmacutter, -/obj/structure/cable/orange{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/airless, -/area/outpost/abandoned) -"hw" = ( -/obj/structure/cable/orange{ - icon_state = "0-4" - }, -/obj/structure/cable/orange{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/power/solar_control/autostart{ - dir = 8 - }, -/turf/simulated/floor/tiled/airless, -/area/outpost/abandoned) -"hx" = ( -/obj/structure/cable/orange{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/wall/titanium, -/area/outpost/abandoned) -"hy" = ( -/obj/structure/cable/orange{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/unsimulated/mask, -/area/outpost/abandoned) -"hz" = ( -/obj/structure/cable/orange{ - dir = 4; - icon_state = "1-4" - }, -/obj/structure/cable/orange{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/unsimulated/mask, -/area/outpost/abandoned) -"hA" = ( -/obj/structure/cable/orange{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/cable/orange{ - dir = 4; - icon_state = "1-4" - }, -/turf/unsimulated/mask, -/area/outpost/abandoned) -"hB" = ( -/obj/structure/cable/orange{ - dir = 4; - icon_state = "1-4" - }, -/turf/unsimulated/mask, -/area/outpost/abandoned) -"hC" = ( -/obj/structure/table/rack, -/obj/random/tool, -/turf/simulated/floor/plating, -/area/outpost/abandoned) -"hD" = ( -/obj/random/junk, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/liquid_fuel, -/turf/simulated/floor/plating, -/area/outpost/abandoned) -"hE" = ( -/obj/structure/table/reinforced, -/obj/random/material, -/obj/effect/decal/cleanable/liquid_fuel, -/turf/simulated/floor/plating, -/area/outpost/abandoned) -"hF" = ( -/obj/structure/table/rack, -/obj/random/powercell, -/turf/simulated/floor/plating, -/area/outpost/abandoned) -"hG" = ( -/obj/effect/decal/cleanable/liquid_fuel, -/obj/structure/closet/crate/radiation, -/obj/random/voidsuit, -/obj/random/voidhelmet, -/turf/simulated/floor/plating, -/area/outpost/abandoned) -"hH" = ( -/obj/structure/reagent_dispensers/fueltank, -/obj/effect/decal/cleanable/liquid_fuel, -/turf/simulated/floor/plating, -/area/outpost/abandoned) -"hL" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/overmap/visitable/sector/away, -/turf/simulated/floor/tiled/white, -/area/outpost/abandoned) -"ib" = ( -/obj/effect/shuttle_landmark/away/nav7, -/turf/simulated/floor/asteroid, -/area/mine/explored) -"iX" = ( -/obj/effect/wallframe_spawn/reinforced, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/door/blast/regular{ - dir = 4; - id_tag = "mars_blast" - }, -/turf/simulated/floor/plating, -/area/outpost/abandoned) -"jb" = ( -/obj/effect/shuttle_landmark/away/nav1, -/turf/simulated/floor/asteroid, -/area/mine/explored) -"kb" = ( -/obj/effect/shuttle_landmark/away/nav2, -/turf/simulated/floor/asteroid, -/area/mine/explored) -"lb" = ( -/obj/effect/shuttle_landmark/away/nav3, -/turf/simulated/floor/asteroid, -/area/mine/explored) -"mb" = ( -/obj/effect/shuttle_landmark/away/nav6, -/turf/simulated/floor/asteroid, -/area/mine/explored) -"mk" = ( -/obj/effect/floor_decal/spline/fancy/wood, -/obj/structure/flora/pottedplant{ - icon_state = "plant-25" - }, -/obj/machinery/light/small, -/turf/simulated/floor/carpet, -/area/outpost/abandoned) -"nb" = ( -/obj/effect/shuttle_landmark/away/nav5, -/turf/simulated/floor/asteroid, -/area/mine/explored) -"ob" = ( -/obj/effect/shuttle_landmark/away/nav4, -/turf/simulated/floor/asteroid, -/area/mine/explored) -"pb" = ( -/obj/effect/gibspawner/human, -/turf/simulated/floor/tiled/freezer, -/area/outpost/abandoned) -"qb" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/red{ - dir = 4 - }, -/obj/effect/floor_decal/corner/red{ - dir = 9 - }, -/obj/effect/decal/cleanable/dirt, -/obj/item/ammo_casing/pistol/magnum, -/turf/simulated/floor/tiled/dark, -/area/outpost/abandoned) -"rb" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/red{ - dir = 4 - }, -/obj/effect/decal/cleanable/blood, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/obj/item/ammo_casing/pistol/magnum, -/turf/simulated/floor/tiled/dark, -/area/outpost/abandoned) -"sb" = ( -/obj/structure/table/steel_reinforced, -/obj/machinery/atmospherics/pipe/simple/hidden/red{ - dir = 4 - }, -/obj/effect/floor_decal/corner/red{ - dir = 6 - }, -/obj/machinery/button/blast_door{ - id_tag = "mars_blast" - }, -/turf/simulated/floor/tiled/dark, -/area/outpost/abandoned) -"tb" = ( -/obj/effect/wallframe_spawn/reinforced, -/obj/machinery/atmospherics/pipe/simple/hidden/red{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/outpost/abandoned) -"ub" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/red{ - dir = 4 - }, -/turf/simulated/floor/diona, -/area/outpost/abandoned) -"vb" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/red{ - dir = 4 - }, -/obj/effect/decal/cleanable/vomit, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/diona, -/area/outpost/abandoned) -"wb" = ( -/obj/machinery/computer/modular/preset/cardslot/command{ - dir = 4; - icon_state = "console" - }, -/turf/simulated/floor/carpet/blue, -/area/outpost/abandoned) -"yb" = ( -/obj/item/storage/mirror{ - icon_state = "mirror_broke"; - pixel_x = 30 - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 4; - icon_state = "warning" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/red{ - dir = 10 - }, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/light/small/emergency{ - dir = 4; - icon_state = "bulb1" - }, -/turf/simulated/floor/tiled/white, -/area/outpost/abandoned) -"Bp" = ( -/obj/effect/wallframe_spawn/reinforced, -/obj/machinery/door/blast/regular{ - dir = 4; - id_tag = "mars_blast" - }, -/turf/simulated/floor/plating, -/area/outpost/abandoned) -"HD" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/white/airless, -/area/outpost/abandoned) -"IX" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/blast/regular/open, -/obj/effect/wallframe_spawn/reinforced, -/turf/simulated/floor/plating, -/area/outpost/abandoned) -"JD" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/floor_decal/spline/fancy/wood/corner, -/turf/simulated/floor/carpet, -/area/outpost/abandoned) -"Kt" = ( -/obj/effect/floor_decal/spline/fancy/wood/corner{ - dir = 8 - }, -/turf/simulated/floor/carpet, -/area/outpost/abandoned) -"XS" = ( -/obj/effect/floor_decal/spline/fancy/wood, -/obj/structure/table/woodentable, -/obj/random/loot, -/turf/simulated/floor/carpet, -/area/outpost/abandoned) - -(1,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(2,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(3,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(4,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(5,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(6,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(7,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(8,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(9,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(10,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(11,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(12,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(13,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(14,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(15,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(16,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(17,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(18,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(19,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(20,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(21,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(22,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(23,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(24,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(25,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(26,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(27,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(28,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(29,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(30,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(31,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(32,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(33,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(34,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(35,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(36,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(37,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(38,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(39,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(40,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(41,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(42,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -ab -ab -ab -aa -aa -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(43,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(44,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(45,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -af -af -cG -cG -cG -af -af -af -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -nb -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(46,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -mb -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -af -af -af -af -af -dD -dU -er -eM -fl -fE -af -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(47,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -af -ca -cu -cU -af -dE -cW -dD -dW -fm -dD -cG -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(48,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -af -cb -cv -cV -cG -dF -dV -es -HD -HD -fF -cG -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(49,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -af -cc -cw -cW -ds -dD -dW -et -eO -fo -fG -cG -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(50,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -af -cd -cw -cX -af -dG -dW -eu -dW -dD -dD -af -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(51,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -af -ce -cx -cY -cG -dH -dY -ev -eP -fq -fH -af -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(52,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -af -af -af -af -cG -cG -cG -af -eQ -af -af -af -aa -aa -aa -aa -aa -aa -aa -aa -aa -af -af -af -af -af -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(53,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -av -af -eR -af -aa -aa -aa -af -af -af -af -af -af -af -af -af -ho -hC -hF -af -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(54,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -av -af -eS -af -af -af -aa -af -aH -gu -aH -aS -aH -aH -hg -fW -gu -hD -gu -af -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(55,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -av -af -eT -fr -fI -af -aa -af -gu -gu -gu -gu -aH -gZ -aH -fW -hp -hp -hG -af -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(56,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -af -af -dZ -ex -eU -fs -fJ -af -aa -af -aH -gu -af -af -af -af -af -af -hq -hE -hH -af -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(57,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -af -dI -ea -dH -eV -cW -fK -af -aa -aa -gv -gu -cG -aa -aa -aa -aa -af -af -af -af -af -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(58,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -af -dJ -cW -ez -eW -cW -fL -af -aa -aa -aa -gu -cG -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(59,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -af -af -af -af -af -af -cy -af -af -dK -cW -dH -eX -cW -fM -af -af -af -aH -gu -af -af -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(60,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -af -af -af -af -af -af -br -bG -bO -bW -cf -qb -cZ -cG -dL -eb -cW -eY -ft -dH -fW -aH -aH -aH -gu -aH -af -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(61,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -af -aw -ay -aW -bf -af -bs -bH -bP -af -cg -rb -da -cG -dM -ec -eA -eW -fu -dH -af -af -gj -gl -cG -aH -af -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(62,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -af -ax -aK -az -az -af -bs -bI -bP -af -ch -sb -db -af -dN -cW -cw -eZ -fv -fN -fX -gf -gk -gw -gD -gH -af -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(63,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -af -ay -az -az -bg -af -bt -bJ -aA -af -bZ -tb -bZ -cy -dH -cW -cw -fa -cW -fO -fY -gf -gk -gx -gl -gI -af -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(64,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -af -az -az -aX -az -bm -bu -bK -bQ -bX -cj -ub -dc -dt -dO -ed -cw -eU -fw -fP -fZ -gg -aH -aH -gl -gI -af -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(65,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -af -aA -aA -aY -az -af -bv -bJ -bQ -bX -ck -vb -dd -dt -dP -dH -cW -eZ -cW -dH -af -af -gl -cG -cG -gJ -af -af -af -af -af -af -af -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(66,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -af -aB -aA -aA -az -bm -bw -hL -bQ -af -cl -yb -de -du -dQ -ee -eB -fb -cw -fQ -dH -dH -cW -gy -cw -gK -gN -gR -ha -hh -hh -hr -af -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(67,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -af -ax -aL -aA -az -af -bx -bJ -bP -af -af -cG -af -af -af -ef -eC -fc -fx -cw -cW -cW -gm -dH -gE -gL -gO -gE -gE -gE -gm -hs -af -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(68,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -af -aC -aM -aZ -ax -af -aA -bH -bP -af -aa -aa -aa -aa -af -eg -eD -fd -eD -cW -ga -ga -gn -gn -gF -dH -gP -cW -cW -gL -hl -ht -cy -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(69,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -af -af -af -af -af -af -af -af -by -by -bP -af -aa -aa -aa -aa -af -af -eE -eE -eE -eE -cG -cG -go -gz -af -af -cy -gS -cW -gL -dH -hu -af -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(70,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -af -ag -ao -aD -ao -ba -bh -af -bz -aA -bR -af -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -gh -gp -gA -bZ -ab -af -cy -dM -eD -dH -hv -af -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(71,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -af -ah -ao -ao -ao -bb -bi -af -bA -bH -bQ -af -aa -aa -ab -ab -ab -eh -ab -ab -ab -ab -ab -gh -gq -gB -bZ -ab -ab -IX -hb -hj -dH -ht -af -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(72,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -af -ai -ao -aj -af -af -af -af -bu -bJ -bQ -af -af -af -iX -af -ab -ab -ab -ab -fy -ab -ei -af -gr -gr -af -ab -ab -IX -hc -hk -hm -hw -af -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(73,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -af -aj -ao -ao -af -ao -ao -af -bB -bJ -bP -bY -cm -cH -dg -af -af -ab -ab -ab -ab -ab -ab -ab -gs -gs -ab -fy -ab -IX -IX -IX -af -hx -af -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(74,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -af -ak -ao -aE -aN -ao -ao -bn -bx -bH -bS -bZ -cn -cI -Kt -dw -dm -ab -ab -ab -ab -ab -ab -ab -ej -ej -ab -ab -ab -ab -ab -ab -ab -hy -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(75,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -af -aj -ao -ao -af -bc -ao -af -bC -bL -bT -bZ -co -cJ -dj -dx -dm -ei -ab -ab -ab -ab -gb -ej -gt -fe -ab -gM -ab -ab -ab -ab -ab -hy -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(76,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -af -ai -ao -aF -af -af -af -af -bD -by -bP -bZ -cp -cK -dj -mk -dm -ab -ab -ab -fz -ab -ab -ej -ej -ab -ab -ab -ab -gT -he -he -gT -hy -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(77,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -af -am -ao -ao -aO -pb -bj -af -bC -bM -bP -bZ -cq -cI -dj -XS -dm -ab -ab -ab -ab -ej -ej -ab -ej -ab -ab -ab -ab -gU -gX -gX -gX -hz -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(78,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -af -an -ao -aG -aP -be -bj -af -bx -bN -bP -bZ -cr -cL -JD -dA -dm -ab -ab -ej -ej -ab -ej -gi -ab -gC -ab -ab -ab -gV -hf -hf -hf -hy -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(79,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -af -af -af -af -af -af -af -af -bC -bJ -bP -bY -cs -cM -dl -af -af -ab -ab -ej -ab -fR -ab -ab -ab -ab -ab -ab -gQ -gW -gW -gW -gW -hA -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(80,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -af -aQ -aI -aQ -af -bC -bJ -bU -af -af -af -Bp -af -ab -ab -ab -ej -ab -ab -gc -ab -ab -ab -ab -ab -ab -gT -he -gT -hn -hy -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(81,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -af -aI -aI -aI -bo -by -bH -bU -af -aa -af -ab -ab -ab -ej -ej -fe -ej -ab -ab -ab -ab -eh -fy -ab -ab -gX -gX -gX -gX -hB -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(82,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -af -aR -aI -aI -bo -bC -bM -bU -af -aa -af -af -af -af -ek -eF -ej -ek -ab -ab -ab -ab -ab -ab -ab -ab -gY -gV -gV -hf -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(83,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -af -aI -aI -aI -bo -bx -bJ -bU -af -aa -aa -aa -aa -af -af -eG -af -cy -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(84,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -af -aQ -aI -bk -af -bx -bJ -bV -af -aa -aa -aa -aa -af -af -eH -cG -av -aa -aa -aa -aa -aa -ab -gM -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(85,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -af -aI -aI -aI -bp -bx -bH -bP -af -af -af -af -af -af -af -eI -cG -cG -af -af -aa -aa -aa -aa -aa -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(86,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -af -af -af -af -af -af -af -bx -bJ -bJ -bO -af -cN -cQ -cQ -dR -el -eJ -dT -dT -eL -af -aa -aa -aa -aa -aa -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(87,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -af -ap -ap -aS -ap -aH -af -aA -bH -aA -bP -af -cO -wb -cQ -dS -em -eK -fh -dT -fS -af -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(88,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -af -aq -aH -aT -aI -aa -aa -aa -bH -aA -aA -af -cP -do -cQ -cQ -af -eL -fh -fh -eL -af -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(89,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -af -ar -aH -aH -aI -aa -aa -aa -aa -bH -bP -af -cQ -cQ -cQ -dR -en -dT -dT -dT -fT -af -af -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(90,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -af -as -aH -aH -aI -aI -aa -aa -aa -bH -bU -af -cQ -cQ -cQ -dR -bZ -dT -fi -eL -dT -dT -af -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -jb -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(91,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -af -at -aH -aU -aI -aH -af -bx -bN -bL -bU -af -af -af -af -af -ep -dT -dT -fA -fU -gd -af -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(92,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -af -au -aI -aH -aH -aI -bq -bE -bJ -bJ -bP -af -cR -dp -dC -dT -dT -dT -fj -fB -fV -ge -cy -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(93,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -af -av -aI -aI -aH -aI -af -bF -aH -bH -bP -ct -cS -dq -dr -dT -dT -dT -dT -fC -dT -dT -cy -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -aa -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(94,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -af -av -av -aV -aH -bl -af -aH -aa -aa -aH -af -cT -dr -cR -dT -eq -dT -fk -fD -dT -dT -af -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(95,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -af -av -av -av -aH -aI -af -af -aa -aH -aH -af -af -af -af -cy -cy -af -af -af -af -af -af -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(96,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -af -af -af -af -af -aI -af -aa -aa -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(97,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -af -af -af -aa -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(98,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(99,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(100,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(101,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(102,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(103,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(104,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(105,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -kb -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(106,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(107,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -lb -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(108,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(109,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(110,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(111,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(112,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(113,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(114,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(115,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(116,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(117,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(118,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(119,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(120,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(121,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(122,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ob -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(123,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(124,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(125,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -aa -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(126,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(127,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(128,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(129,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(130,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(131,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(132,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(133,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(134,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(135,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(136,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(137,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(138,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(139,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(140,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(141,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(142,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(143,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(144,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(145,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(146,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(147,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(148,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(149,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(150,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(151,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(152,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(153,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(154,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(155,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(156,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(157,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(158,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ib -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(159,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(160,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(161,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(162,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(163,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(164,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(165,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(166,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(167,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(168,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(169,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(170,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(171,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(172,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(173,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(174,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(175,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(176,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(177,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(178,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(179,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(180,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(181,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(182,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(183,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(184,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(185,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(186,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(187,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(188,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(189,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(190,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(191,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(192,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(193,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(194,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(195,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(196,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(197,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(198,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(199,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(200,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} diff --git a/maps/away/mining/mining.dm b/maps/away/mining/mining.dm deleted file mode 100644 index 68011d96ed87f..0000000000000 --- a/maps/away/mining/mining.dm +++ /dev/null @@ -1,243 +0,0 @@ -#include "mining_areas.dm" - -//MINING-1 // CLUSTER -/obj/effect/overmap/visitable/sector/cluster - name = "asteroid cluster" - desc = "Large group of asteroids. Mineral content detected." - icon_state = "sector" - initial_generic_waypoints = list( - "nav_cluster_1", - "nav_cluster_2", - "nav_cluster_3", - "nav_cluster_4", - "nav_cluster_5", - "nav_cluster_6", - "nav_cluster_7" - ) - known = FALSE - -/obj/effect/overmap/visitable/sector/cluster/generate_skybox() - var/image/res = overlay_image('icons/skybox/rockbox.dmi', "rockbox", COLOR_ASTEROID_ROCK, RESET_COLOR) - res.blend_mode = BLEND_OVERLAY - return res - -/obj/effect/overmap/visitable/sector/cluster/get_skybox_representation() - var/image/res = overlay_image('icons/skybox/rockbox.dmi', "rockbox", COLOR_ASTEROID_ROCK, RESET_COLOR) - res.blend_mode = BLEND_OVERLAY - res.SetTransform(scale = 0.5) - return res - -/datum/map_template/ruin/away_site/mining_asteroid - name = "Mining - Asteroid" - id = "awaysite_mining_asteroid" - description = "A medium-sized asteroid full of minerals." - suffixes = list("mining/mining-asteroid.dmm") - spawn_cost = 1 - accessibility_weight = 10 - generate_mining_by_z = 1 - apc_test_exempt_areas = list( - /area/outpost/abandoned = NO_SCRUBBER, - /area/mine/explored = NO_SCRUBBER|NO_VENT|NO_APC, - /area/mine/unexplored = NO_SCRUBBER|NO_VENT|NO_APC - ) - area_usage_test_exempted_root_areas = list(/area/mine) - area_usage_test_exempted_areas = list(/area/djstation) - area_coherency_test_exempt_areas = list(/area/mine/explored, /area/mine/unexplored) - -/obj/effect/shuttle_landmark/cluster/nav1 - name = "Asteroid Navpoint #1" - landmark_tag = "nav_cluster_1" - -/obj/effect/shuttle_landmark/cluster/nav2 - name = "Asteroid Navpoint #2" - landmark_tag = "nav_cluster_2" - -/obj/effect/shuttle_landmark/cluster/nav3 - name = "Asteroid Navpoint #3" - landmark_tag = "nav_cluster_3" - -/obj/effect/shuttle_landmark/cluster/nav4 - name = "Asteroid Navpoint #4" - landmark_tag = "nav_cluster_4" - -/obj/effect/shuttle_landmark/cluster/nav5 - name = "Asteroid Landing zone #1" - landmark_tag = "nav_cluster_5" - base_area = /area/mine/explored - -/obj/effect/shuttle_landmark/cluster/nav6 - name = "Asteroid Navpoint #5" - landmark_tag = "nav_cluster_6" - -/obj/effect/shuttle_landmark/cluster/nav7 - name = "Asteroid Landing zone #2" - landmark_tag = "nav_cluster_7" - base_area = /area/mine/explored - -//MINING-2 // SIGNAL -/obj/effect/overmap/visitable/sector/away - name = "faint signal from an asteroid" - desc = "Faint signal detected, originating from the human-made structures on the site's surface." - icon_state = "sector" - initial_generic_waypoints = list( - "nav_away_1", - "nav_away_2", - "nav_away_3", - "nav_away_4", - "nav_away_5", - "nav_away_6", - "nav_away_7" - ) - known = FALSE - -/obj/effect/overmap/visitable/sector/away/generate_skybox() - return overlay_image('icons/skybox/rockbox.dmi', "rockbox", COLOR_ASTEROID_ROCK, RESET_COLOR) - -/obj/effect/overmap/visitable/sector/away/get_skybox_representation() - var/image/res = overlay_image('icons/skybox/rockbox.dmi', "rockbox", COLOR_ASTEROID_ROCK, RESET_COLOR) - res.blend_mode = BLEND_OVERLAY - res.SetTransform(scale = 0.3) - return res - -/datum/map_template/ruin/away_site/mining_signal - name = "Mining - Planetoid" - id = "awaysite_mining_signal" - description = "A mineral-rich, formerly-volcanic site on a planetoid." - suffixes = list("mining/mining-signal.dmm") - spawn_cost = 1 - generate_mining_by_z = 1 - base_turf_for_zs = /turf/simulated/floor/asteroid - area_usage_test_exempted_root_areas = list(/area/mine, /area/outpost) - apc_test_exempt_areas = list( - /area/mine/explored = NO_SCRUBBER|NO_VENT|NO_APC, - /area/mine/unexplored = NO_SCRUBBER|NO_VENT|NO_APC - ) - area_coherency_test_exempt_areas = list(/area/mine/explored, /area/mine/unexplored) - -/obj/effect/shuttle_landmark/away - base_area = /area/mine/explored - -/obj/effect/shuttle_landmark/away/nav1 - name = "Away Landing zone #1" - landmark_tag = "nav_away_1" - -/obj/effect/shuttle_landmark/away/nav2 - name = "Away Landing zone #2" - landmark_tag = "nav_away_2" - -/obj/effect/shuttle_landmark/away/nav3 - name = "Away Landing zone #3" - landmark_tag = "nav_away_3" - -/obj/effect/shuttle_landmark/away/nav4 - name = "Away Landing zone #4" - landmark_tag = "nav_away_4" - -/obj/effect/shuttle_landmark/away/nav5 - name = "Away Landing zone #5" - landmark_tag = "nav_away_5" - -/obj/effect/shuttle_landmark/away/nav6 - name = "Away Landing zone #6" - landmark_tag = "nav_away_6" - -/obj/effect/shuttle_landmark/away/nav7 - name = "Away Landing zone #7" - landmark_tag = "nav_away_7" - -//MINING-3 // THE ORB -/obj/effect/overmap/visitable/sector/orb - name = "monolithic asteroid" - desc = "Substantial mineral resources detected." - icon_state = "sector" - initial_generic_waypoints = list( - "nav_orb_1", - "nav_orb_2", - "nav_orb_3", - "nav_orb_4", - "nav_orb_5", - "nav_orb_6", - "nav_orb_7" - ) - known = FALSE - -/obj/effect/overmap/visitable/sector/orb/get_skybox_representation() - var/image/res = overlay_image('icons/skybox/skybox_rock_128.dmi', "bigrock", COLOR_ASTEROID_ROCK, RESET_COLOR) - res.blend_mode = BLEND_OVERLAY - res.pixel_x = rand(256,512) - res.pixel_y = rand(256,512) - return res - -/datum/map_template/ruin/away_site/orb - name = "Mining - Orb" - id = "awaysite_mining_orb" - description = "A sort of circular asteroid with a bird." - suffixes = list("mining/mining-orb.dmm") - spawn_cost = 1 - accessibility_weight = 10 - generate_mining_by_z = 1 - base_turf_for_zs = /turf/simulated/floor/asteroid - area_usage_test_exempted_root_areas = list(/area/mine) - area_usage_test_exempted_areas = list(/area/djstation) - apc_test_exempt_areas = list( - /area/mine/explored = NO_SCRUBBER|NO_VENT|NO_APC, - /area/mine/unexplored = NO_SCRUBBER|NO_VENT|NO_APC - ) - area_coherency_test_exempt_areas = list(/area/mine/explored, /area/mine/unexplored) - -/obj/effect/shuttle_landmark/orb/nav1 - name = "Anchor point A" - landmark_tag = "nav_orb_1" - -/obj/effect/shuttle_landmark/orb/nav2 - name = "Anchor point B" - landmark_tag = "nav_orb_2" - -/obj/effect/shuttle_landmark/orb/nav3 - name = "Anchor point C" - landmark_tag = "nav_orb_3" - -/obj/effect/shuttle_landmark/orb/nav4 - name = "Anchor point D" - landmark_tag = "nav_orb_4" - -/obj/effect/shuttle_landmark/orb/nav5 - name = "Anchor point E" - landmark_tag = "nav_orb_5" - -/obj/effect/shuttle_landmark/orb/nav6 - name = "Anchor point F" - landmark_tag = "nav_orb_6" - -/obj/effect/shuttle_landmark/orb/nav7 - name = "Landing zone A" - landmark_tag = "nav_orb_7" - base_area = /area/mine/explored - -/obj/structure/totem - name = "totem" - desc = "Some kind of post, pillar, plinth, column, or totem." - icon = 'icons/obj/stationobjs.dmi' - icon_state = "totem" - density = TRUE - anchored = TRUE - unacidable = TRUE - var/number - -/obj/structure/totem/Initialize() - . = ..() - number = rand(10,99) - -/obj/structure/totem/examine(mob/user) - . = ..() - to_chat(user, "It's been engraved with the symbols '𒊏𒁲𒌋 𒊑𒉿𒌉 [number]'.") //for the sake of the reader, "RADIU RIPITUR" - -/obj/item/stool/stone/New(var/newloc) - ..(newloc,"sandstone") - -/turf/simulated/floor/airless/stone - name = "temple floor" - desc = "You can only imagine what once took place in these halls." - icon = 'icons/turf/flooring/cult.dmi' - icon_state = "cult_g" - color = "#c9ae5e" diff --git a/maps/away/mining/mining_areas.dm b/maps/away/mining/mining_areas.dm deleted file mode 100644 index e378d1a4a4b3f..0000000000000 --- a/maps/away/mining/mining_areas.dm +++ /dev/null @@ -1,23 +0,0 @@ -// GENERIC MINING AREAS -/area/mine - icon_state = "mining" - ambience = list('sound/ambience/ambimine.ogg', 'sound/ambience/song_game.ogg') - sound_env = ASTEROID - base_turf = /turf/simulated/floor/asteroid - -/area/mine/explored - name = "Mine" - icon_state = "explored" - -/area/mine/unexplored - name = "Mine" - icon_state = "unexplored" - -// OUTPOSTS -/area/outpost/abandoned - name = "Abandoned Outpost" - icon_state = "dark" - -/area/djstation - name = "\improper Listening Post" - icon_state = "LP" \ No newline at end of file diff --git a/maps/away/mininghome/icons.dmi b/maps/away/mininghome/icons.dmi deleted file mode 100644 index 559170241bdd5..0000000000000 Binary files a/maps/away/mininghome/icons.dmi and /dev/null differ diff --git a/maps/away/mininghome/mininghome.dm b/maps/away/mininghome/mininghome.dm deleted file mode 100644 index b365026443e57..0000000000000 --- a/maps/away/mininghome/mininghome.dm +++ /dev/null @@ -1,117 +0,0 @@ -/obj/effect/overmap/visitable/sector/mininghome - name = "Asteroid Mining Station" - desc = "A small mining station. No active lifesigns found on the station. Sensors indicate an abundance of valuable ore." - icon_state = "object" - initial_generic_waypoints = list( - "nav_mininghome_1", - "nav_mininghome_2", - "nav_mininghome_3", - "nav_mininghome_4" - ) - -/datum/map_template/ruin/away_site/mininghome - name = "mininghome" - id = "awaysite_mininghome" - description = "A chill asteroid mining station." - suffixes = list("mininghome/mininghome.dmm") - spawn_cost = 0.5 - -/obj/effect/shuttle_landmark/nav_mininghome_1 - name = "Navpoint #1" - landmark_tag = "nav_mininghome_1" - -/obj/effect/shuttle_landmark/nav_mininghome_2 - name = "Navpoint #2" - landmark_tag = "nav_mininghome_2" - -/obj/effect/shuttle_landmark/nav_mininghome_3 - name = "Navpoint #3" - landmark_tag = "nav_mininghome_3" - -/obj/effect/shuttle_landmark/nav_mininghome_4 - name = "Hangar" - landmark_tag = "nav_mininghome_4" - base_area = /area/map_template/mininghome_hangar - base_turf = /turf/simulated/floor/plating - -// New turfs!! - -/turf/simulated/floor/steel_dirty - name = "dirty steel floor" - icon = 'icons/turf/flooring/tiles.dmi' - icon_state = "steel_dirty" - initial_flooring = /decl/flooring/tiling - -// Lockers - -/obj/structure/closet/dilapidated - name = "dilapidated closet" - desc = "A dilpidated closet, the paint is flecking off." - closet_appearance = /decl/closet_appearance/tactical - -// Areas - -/area/map_template/mininghome_hangar - name = "\improper Hangar" - icon_state = "hangar" - -/area/map_template/mininghome_lockers - name = "\improper Break Room" - icon_state = "locker" - -/area/map_template/mininghome_bathroom - name = "\improper Bathroom" - icon_state = "toilet" - -/area/map_template/mininghome_mess - name = "\improper Mess Hall" - icon_state = "kitchen" - -/area/map_template/mininghome_hall - name = "\improper Skybridge Hall" - icon_state = "Tactical" - -/area/map_template/mininghome_power - name = "\improper Engineering and Atmos" - icon_state = "disperser" - -/area/map_template/mininghome_living_north - name = "\improper Living Quarters" - icon_state = "Holodeck" - -/area/map_template/mininghome_living_south - name = "\improper Living Quarters" - icon_state = "sauna" - -/area/map_template/mininghome_robotics - name = "\improper Robotics" - icon_state = "bar" - -/area/map_template/mininghome_solars - name = "\improper Solars" - icon_state = "eva" - -// Torch only items off torch - -/obj/item/mininghome_passport_iccg - name = "\improper Old ICCG passport" - icon = 'icons/obj/passport.dmi' - icon_state = "passport_iccg" - w_class = ITEM_SIZE_SMALL - desc = "A passport from the Gilgamesh Confederation. This one belongs to a man named Ivan Gregorich." - -/obj/item/clothing/head/beret/mininghome_iccg - name = "faded Drop Trooper beret" - desc = "An old ICCG Navy beret with a drop troopers crest." - icon = 'maps/away/mininghome/icons.dmi' - item_icons = list(slot_head_str = 'maps/away/mininghome/onmob_icons.dmi') - icon_state = "terranberet-grey" - item_state = "terranberet-grey" - -/obj/item/clothing/head/beret/mininghome_scg - name = "faded Orbital Assault beret" - desc = "An old SCGDF Fleet beret with an orbital assault crest." - icon = 'maps/away/mininghome/icons.dmi' - item_icons = list(slot_head_str = 'maps/away/mininghome/onmob_icons.dmi') - icon_state = "beret_blue" - item_state = "beret_blue" diff --git a/maps/away/mininghome/mininghome.dmm b/maps/away/mininghome/mininghome.dmm deleted file mode 100644 index c34223c59230c..0000000000000 --- a/maps/away/mininghome/mininghome.dmm +++ /dev/null @@ -1,36186 +0,0 @@ -//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE -"ac" = ( -/obj/machinery/vending/sol{ - dir = 1 - }, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 1 - }, -/obj/effect/floor_decal/corner/red{ - dir = 1 - }, -/obj/effect/floor_decal/corner/red, -/turf/simulated/floor/tiled/white, -/area/map_template/mininghome_mess) -"ad" = ( -/obj/machinery/atmospherics/portables_connector{ - dir = 8 - }, -/obj/machinery/portable_atmospherics/canister/air/airlock, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/mininghome_power) -"ae" = ( -/obj/structure/closet/excavation, -/obj/effect/floor_decal/corner/brown/half, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_hall) -"ai" = ( -/obj/machinery/light/small{ - dir = 1 - }, -/obj/machinery/embedded_controller/radio/airlock/airlock_controller{ - frequency = 1380; - id_tag = "mininghomesolars"; - name = "Solars Airlock"; - pixel_y = 22; - tag_airpump = "mininghome_solars_pump"; - tag_chamber_sensor = "mininghomechambersensor"; - tag_exterior_door = "mininghomesolars_exteriordoor"; - tag_interior_door = "mininghomesolars_interiordoor" - }, -/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{ - id_tag = "mininghome_solars_pump" - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/mininghome_power) -"am" = ( -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/mininghome_power) -"an" = ( -/obj/machinery/cooker/grill, -/obj/effect/floor_decal/corner/red{ - dir = 1 - }, -/obj/effect/floor_decal/corner/red, -/turf/simulated/floor/tiled/white, -/area/map_template/mininghome_mess) -"ap" = ( -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 6 - }, -/obj/machinery/access_button{ - command = "cycle_interior"; - frequency = 1380; - master_tag = "mininghomesolars"; - name = "interior access button"; - pixel_x = 24; - pixel_y = 24 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/mininghome_power) -"aq" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/mininghome_power) -"aw" = ( -/obj/machinery/power/apc{ - dir = 8; - name = "west bump"; - pixel_x = -24 - }, -/obj/structure/cable/yellow{ - d2 = 4; - icon_state = "0-4" - }, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_robotics) -"ay" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_hall) -"az" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 8 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/mininghome_power) -"aB" = ( -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 4 - }, -/obj/machinery/light/small, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/mininghome_hall) -"aD" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/effect/floor_decal/corner/brown/half{ - dir = 8 - }, -/obj/machinery/alarm{ - dir = 4; - pixel_x = -23 - }, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_power) -"aE" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_hangar) -"aN" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/obj/effect/floor_decal/corner/red{ - dir = 1 - }, -/obj/effect/floor_decal/corner/red, -/turf/simulated/floor/tiled/white, -/area/map_template/mininghome_mess) -"aO" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/universal{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/mininghome_hall) -"aQ" = ( -/obj/machinery/light/spot{ - dir = 1 - }, -/turf/space, -/area/map_template/mininghome_hall) -"aR" = ( -/obj/machinery/portable_atmospherics/canister/hydrogen, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/mininghome_hangar) -"aU" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, -/obj/structure/cable/yellow{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_lockers) -"bb" = ( -/obj/machinery/door/airlock/multi_tile/glass/mining, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/mininghome_hall) -"bf" = ( -/obj/machinery/door/airlock/civilian, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/mininghome_mess) -"bh" = ( -/obj/effect/floor_decal/corner/brown/half{ - dir = 4 - }, -/obj/machinery/light/spot{ - dir = 4 - }, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_hangar) -"br" = ( -/obj/structure/table/gamblingtable, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 8 - }, -/obj/effect/floor_decal/corner/brown/half{ - dir = 4 - }, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_lockers) -"bu" = ( -/obj/structure/ore_box, -/obj/effect/floor_decal/corner/brown/half{ - dir = 8 - }, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_hangar) -"bA" = ( -/obj/machinery/mining/brace{ - dir = 4 - }, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_hall) -"bF" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_hangar) -"bH" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/effect/floor_decal/corner/red{ - dir = 1 - }, -/obj/effect/floor_decal/corner/red, -/turf/simulated/floor/tiled/white, -/area/map_template/mininghome_mess) -"bL" = ( -/obj/machinery/light/small, -/obj/machinery/airlock_sensor{ - frequency = 1380; - id_tag = "mininghomechambersensor"; - pixel_y = -25 - }, -/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{ - dir = 1; - id_tag = "mininghome_solars_pump" - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/mininghome_power) -"bQ" = ( -/obj/structure/filingcabinet/chestdrawer{ - pixel_x = -6 - }, -/obj/structure/filingcabinet/chestdrawer{ - pixel_x = 11 - }, -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/obj/effect/floor_decal/corner/brown/half{ - dir = 1 - }, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_lockers) -"cf" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply, -/obj/item/storage/belt/utility{ - pixel_x = -6; - pixel_y = 12 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_hall) -"cg" = ( -/obj/machinery/door/airlock/civilian, -/obj/machinery/door/firedoor, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/mininghome_lockers) -"ck" = ( -/obj/machinery/vending/tool{ - dir = 4; - pixel_x = -6 - }, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/mininghome_power) -"cp" = ( -/obj/machinery/power/apc{ - dir = 4; - name = "east bump"; - pixel_x = 24 - }, -/obj/machinery/light{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable/yellow{ - d2 = 2; - icon_state = "0-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/effect/floor_decal/corner/red{ - dir = 1 - }, -/obj/effect/floor_decal/corner/red, -/turf/simulated/floor/tiled/white, -/area/map_template/mininghome_mess) -"cw" = ( -/obj/structure/table/steel, -/obj/machinery/light, -/obj/effect/floor_decal/corner/red{ - dir = 1 - }, -/obj/effect/floor_decal/corner/red, -/obj/item/device/radio/intercom{ - dir = 1; - pixel_y = -28 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/mininghome_mess) -"cy" = ( -/obj/effect/floor_decal/industrial/hatch/yellow, -/turf/simulated/floor/plating, -/area/map_template/mininghome_hall) -"cD" = ( -/obj/structure/closet/crate/trashcart, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_hangar) -"cE" = ( -/obj/machinery/vending/wallmed1{ - pixel_y = 32 - }, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_hangar) -"cM" = ( -/obj/machinery/power/apc{ - dir = 8; - name = "west bump"; - pixel_x = -24 - }, -/obj/structure/cable/yellow{ - d2 = 4; - icon_state = "0-4" - }, -/obj/effect/floor_decal/corner/brown/half{ - dir = 8 - }, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_lockers) -"cN" = ( -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 4 - }, -/obj/effect/floor_decal/corner/brown/half{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_hall) -"cV" = ( -/obj/structure/largecrate, -/obj/effect/floor_decal/corner/brown/half{ - dir = 8 - }, -/obj/effect/floor_decal/corner/brown{ - dir = 4 - }, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_hangar) -"cZ" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_hall) -"dk" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled/freezer, -/area/map_template/mininghome_lockers) -"dm" = ( -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/mininghome_hall) -"dq" = ( -/obj/effect/paint/black, -/turf/simulated/wall/r_titanium, -/area/map_template/mininghome_living_south) -"dO" = ( -/obj/machinery/mineral/processing_unit{ - input_turf = 4; - output_turf = 8 - }, -/turf/simulated/floor/plating, -/area/map_template/mininghome_hall) -"dQ" = ( -/obj/structure/cable/yellow{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/turf/simulated/floor/plating, -/area/space) -"dR" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 4 - }, -/obj/machinery/computer/modular/preset/civilian, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/mininghome_hall) -"dT" = ( -/obj/effect/floor_decal/corner/brown/half{ - dir = 4 - }, -/obj/effect/floor_decal/corner/brown{ - dir = 1 - }, -/obj/random/material, -/obj/random/material, -/obj/random/material, -/obj/random/material, -/obj/random/material, -/obj/random/material, -/obj/structure/closet/crate/plastic, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_hangar) -"dW" = ( -/obj/machinery/atmospherics/portables_connector{ - dir = 1 - }, -/obj/machinery/light/small, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/portable_atmospherics/powered/pump, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/mininghome_power) -"dZ" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_living_north) -"ea" = ( -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/floor_decal/corner/brown/half, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_power) -"eh" = ( -/turf/space, -/area/space) -"ek" = ( -/obj/machinery/vending/snix, -/obj/effect/floor_decal/corner/red{ - dir = 1 - }, -/obj/effect/floor_decal/corner/red, -/obj/machinery/light{ - dir = 1 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/mininghome_mess) -"en" = ( -/obj/machinery/light/spot, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_hangar) -"eq" = ( -/obj/machinery/door/airlock/multi_tile/mining, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/door/firedoor, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/mininghome_power) -"ew" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled/freezer, -/area/map_template/mininghome_mess) -"ey" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/structure/cable/yellow{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_hall) -"eF" = ( -/obj/effect/floor_decal/corner/brown/half{ - dir = 4 - }, -/obj/machinery/alarm{ - dir = 8; - pixel_x = 24 - }, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_living_north) -"eG" = ( -/obj/machinery/vending/sovietsoda{ - dir = 1 - }, -/obj/effect/floor_decal/corner/red{ - dir = 1 - }, -/obj/effect/floor_decal/corner/red, -/turf/simulated/floor/tiled/white, -/area/map_template/mininghome_mess) -"eL" = ( -/obj/machinery/atmospherics/pipe/manifold/visible{ - dir = 8 - }, -/obj/effect/catwalk_plated/dark, -/turf/simulated/floor/plating, -/area/map_template/mininghome_power) -"eM" = ( -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/turf/simulated/floor/plating, -/area/space) -"eV" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/door/airlock/civilian, -/obj/machinery/door/firedoor, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/mininghome_lockers) -"fd" = ( -/obj/machinery/alarm{ - dir = 8; - pixel_x = 24 - }, -/obj/machinery/light/spot{ - dir = 4 - }, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_hangar) -"fe" = ( -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/plating, -/area/space) -"ff" = ( -/obj/structure/ore_box, -/obj/effect/floor_decal/corner/brown/half{ - dir = 1 - }, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_hangar) -"fh" = ( -/obj/effect/floor_decal/industrial/warning, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_hangar) -"fj" = ( -/obj/structure/table/steel, -/obj/effect/floor_decal/corner/brown/half{ - dir = 4 - }, -/obj/effect/floor_decal/corner/brown{ - dir = 1 - }, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_lockers) -"fk" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_robotics) -"fm" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/effect/floor_decal/corner/brown/half{ - dir = 4 - }, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_power) -"fn" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden, -/obj/machinery/door/airlock/engineering, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/mininghome_power) -"fp" = ( -/obj/machinery/light/small, -/obj/machinery/alarm{ - dir = 1; - pixel_y = -22 - }, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/mininghome_power) -"fr" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/manifold4w/hidden, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/mininghome_hall) -"fv" = ( -/turf/simulated/mineral/random, -/area/space) -"fz" = ( -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/cable/yellow{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/machinery/light/spot{ - dir = 8 - }, -/turf/simulated/floor/plating, -/area/space) -"fC" = ( -/obj/machinery/light/spot{ - dir = 8 - }, -/turf/simulated/floor/asteroid, -/area/map_template/mininghome_hangar) -"fE" = ( -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_robotics) -"fK" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/obj/effect/floor_decal/industrial/warning{ - dir = 4 - }, -/obj/effect/floor_decal/corner/brown{ - dir = 1 - }, -/obj/item/device/flashlight/lantern{ - pixel_x = -14; - pixel_y = 2 - }, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_hall) -"fM" = ( -/turf/simulated/floor/tiled/freezer, -/area/map_template/mininghome_bathroom) -"fP" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_lockers) -"fX" = ( -/obj/structure/hygiene/urinal{ - pixel_y = 32 - }, -/turf/simulated/floor/tiled/freezer, -/area/map_template/mininghome_bathroom) -"gg" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 8 - }, -/obj/structure/cable/yellow{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_lockers) -"gq" = ( -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 1; - icon_state = "warningcorner" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_hangar) -"gr" = ( -/obj/structure/table/marble, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 8 - }, -/obj/effect/floor_decal/corner/red{ - dir = 1 - }, -/obj/effect/floor_decal/corner/red, -/turf/simulated/floor/tiled/white, -/area/map_template/mininghome_mess) -"gt" = ( -/obj/machinery/portable_atmospherics/powered/scrubber, -/obj/machinery/atmospherics/portables_connector, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/mininghome_power) -"gw" = ( -/obj/machinery/portable_atmospherics/canister/carbon_dioxide, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/firealarm{ - dir = 1; - pixel_y = -24 - }, -/obj/machinery/light/spot, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/mininghome_hangar) -"gz" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_power) -"gB" = ( -/obj/structure/table/steel, -/obj/machinery/atmospherics/unary/vent_pump/on, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_robotics) -"gD" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/obj/machinery/alarm{ - dir = 4; - pixel_x = -23 - }, -/turf/simulated/floor/tiled/freezer, -/area/map_template/mininghome_lockers) -"gE" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_lockers) -"gJ" = ( -/obj/effect/floor_decal/corner/brown/half{ - dir = 1 - }, -/obj/machinery/access_button{ - command = "cycle_interior"; - frequency = 1380; - master_tag = "mininghome_asteroidairlock"; - name = "interior access button"; - pixel_x = 24; - pixel_y = 24 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_hall) -"gM" = ( -/obj/effect/floor_decal/corner/brown/half{ - dir = 4 - }, -/obj/machinery/alarm{ - dir = 8; - pixel_x = 24 - }, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_living_south) -"gZ" = ( -/obj/effect/floor_decal/corner/brown/half{ - dir = 1 - }, -/obj/random/junk, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_hall) -"hb" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 8 - }, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_hall) -"hd" = ( -/obj/machinery/vending/lavatory{ - dir = 4 - }, -/turf/simulated/floor/tiled/freezer, -/area/map_template/mininghome_bathroom) -"hg" = ( -/obj/machinery/atmospherics/unary/vent_pump/on, -/obj/effect/floor_decal/corner/brown/half{ - dir = 1 - }, -/obj/machinery/vending/wallmed1{ - pixel_y = 32 - }, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_lockers) -"hi" = ( -/obj/machinery/door/firedoor, -/obj/effect/floor_decal/industrial/hatch/yellow, -/obj/machinery/light/spot{ - dir = 1 - }, -/obj/machinery/button/blast_door{ - id_tag = "mininghomehallshutters"; - name = "Skybridge Shutters"; - pixel_y = 26 - }, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_hall) -"hk" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/floor_decal/corner/brown, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_power) -"ho" = ( -/obj/machinery/atmospherics/binary/pump/on{ - dir = 4; - target_pressure = 200 - }, -/obj/machinery/recharger/wallcharger{ - pixel_y = 24 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/mininghome_hall) -"hp" = ( -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/mininghome_power) -"hr" = ( -/obj/effect/floor_decal/corner/brown/half{ - dir = 8 - }, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_lockers) -"hw" = ( -/obj/machinery/mining/brace{ - dir = 8 - }, -/obj/effect/floor_decal/corner/brown/half{ - dir = 4 - }, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_hall) -"hx" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_lockers) -"hC" = ( -/obj/machinery/vending/soda, -/obj/machinery/atmospherics/unary/vent_pump/on, -/obj/effect/floor_decal/corner/red{ - dir = 1 - }, -/obj/effect/floor_decal/corner/red, -/turf/simulated/floor/tiled/white, -/area/map_template/mininghome_mess) -"hD" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable/yellow{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/effect/floor_decal/corner/brown/half{ - dir = 8 - }, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_power) -"hH" = ( -/obj/item/remains/xeno, -/turf/simulated/floor/asteroid, -/area/space) -"hJ" = ( -/obj/machinery/light/spot{ - dir = 1 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/mininghome_hangar) -"hN" = ( -/obj/structure/bed/roller/ironingboard, -/obj/item/ironingiron, -/turf/simulated/floor/tiled/freezer, -/area/map_template/mininghome_lockers) -"hP" = ( -/obj/random/junk, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_lockers) -"hQ" = ( -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 1; - icon_state = "warningcorner" - }, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_hall) -"hU" = ( -/obj/effect/floor_decal/corner/brown/half{ - dir = 1 - }, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_hall) -"hX" = ( -/obj/machinery/door/firedoor, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/mininghome_power) -"hY" = ( -/obj/effect/floor_decal/corner/red{ - dir = 1 - }, -/obj/effect/floor_decal/corner/red, -/obj/machinery/alarm{ - dir = 4; - pixel_x = -23 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/mininghome_mess) -"hZ" = ( -/turf/simulated/floor/tiled/techfloor, -/area/map_template/mininghome_hangar) -"ie" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 1 - }, -/obj/effect/floor_decal/corner/brown/half, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_hall) -"if" = ( -/obj/structure/bed, -/obj/item/bedsheet/ce, -/obj/effect/floor_decal/corner/brown/half{ - dir = 4 - }, -/obj/effect/floor_decal/corner/brown{ - dir = 1 - }, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_living_south) -"ik" = ( -/obj/structure/table/rack, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_robotics) -"io" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/effect/floor_decal/corner/brown/half{ - dir = 8 - }, -/obj/effect/floor_decal/corner/brown, -/obj/machinery/light_switch{ - pixel_x = -6; - pixel_y = -24 - }, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_living_south) -"iv" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/alarm/cold{ - dir = 4; - pixel_x = -22 - }, -/turf/simulated/floor/tiled/freezer, -/area/map_template/mininghome_mess) -"ix" = ( -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_robotics) -"iI" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/effect/floor_decal/corner/brown/half{ - dir = 1 - }, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_hall) -"iY" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/effect/floor_decal/corner/brown/half{ - dir = 4 - }, -/obj/effect/floor_decal/corner/brown{ - dir = 8 - }, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_lockers) -"jf" = ( -/obj/machinery/light{ - dir = 4 - }, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 8 - }, -/obj/effect/floor_decal/corner/brown/half{ - dir = 4 - }, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_hall) -"jh" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/obj/effect/floor_decal/corner/red{ - dir = 1 - }, -/obj/effect/floor_decal/corner/red, -/turf/simulated/floor/tiled/white, -/area/map_template/mininghome_mess) -"jo" = ( -/obj/structure/hygiene/sink{ - dir = 4; - pixel_x = 11 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/turf/simulated/floor/tiled/freezer, -/area/map_template/mininghome_bathroom) -"ju" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable/yellow{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_lockers) -"jw" = ( -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_robotics) -"jz" = ( -/obj/machinery/alarm{ - dir = 1; - pixel_y = -22 - }, -/turf/simulated/floor/tiled/freezer, -/area/map_template/mininghome_bathroom) -"jD" = ( -/obj/effect/paint/black, -/turf/simulated/wall/r_titanium, -/area/map_template/mininghome_solars) -"jH" = ( -/obj/structure/bed/chair{ - dir = 1 - }, -/obj/effect/floor_decal/corner/red{ - dir = 1 - }, -/obj/effect/floor_decal/corner/red, -/turf/simulated/floor/tiled/white, -/area/map_template/mininghome_mess) -"jL" = ( -/obj/effect/floor_decal/industrial/loading{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/mininghome_hall) -"jN" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 1 - }, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_hangar) -"jP" = ( -/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, -/obj/effect/floor_decal/floordetail/pryhole, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_hangar) -"jR" = ( -/obj/machinery/light/small{ - dir = 4 - }, -/obj/effect/catwalk_plated/dark, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/map_template/mininghome_power) -"jU" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/effect/catwalk_plated/dark, -/obj/machinery/atmospherics/pipe/simple/hidden, -/turf/simulated/floor/plating, -/area/map_template/mininghome_power) -"ke" = ( -/obj/effect/shuttle_landmark/nav_mininghome_1, -/turf/space, -/area/space) -"kf" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/obj/effect/floor_decal/corner/red{ - dir = 1 - }, -/obj/effect/floor_decal/corner/red, -/turf/simulated/floor/tiled/white, -/area/map_template/mininghome_mess) -"kq" = ( -/obj/machinery/light/small{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 8 - }, -/obj/effect/catwalk_plated/dark, -/turf/simulated/floor/plating, -/area/map_template/mininghome_power) -"kr" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_robotics) -"kD" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/effect/floor_decal/floordetail/pryhole, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_hall) -"kE" = ( -/obj/effect/floor_decal/asteroid, -/turf/simulated/mineral/random/high_chance, -/area/space) -"kF" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 1 - }, -/obj/machinery/alarm{ - dir = 1; - pixel_y = -22 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/mininghome_solars) -"kN" = ( -/obj/structure/closet/firecloset, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_hangar) -"kO" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/effect/floor_decal/corner/brown/half{ - dir = 8 - }, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_lockers) -"kU" = ( -/obj/effect/floor_decal/industrial/warning/corner, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_hangar) -"la" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/random/junk, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_hall) -"lb" = ( -/obj/effect/floor_decal/corner/brown/half, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_hall) -"le" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/mininghome_solars) -"lj" = ( -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 4 - }, -/obj/machinery/light/small, -/obj/machinery/airlock_sensor{ - frequency = 1380; - id_tag = "mininghome_primary_sensor"; - pixel_y = -25 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/mininghome_hall) -"lq" = ( -/obj/structure/table/steel, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 1; - level = 2 - }, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_robotics) -"lw" = ( -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/engineering, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/mininghome_power) -"lz" = ( -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 1 - }, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_hangar) -"lA" = ( -/obj/structure/cable/yellow{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/cable/yellow{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/turf/simulated/floor/plating, -/area/space) -"lD" = ( -/obj/machinery/light, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/portable_atmospherics/powered/scrubber, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/mininghome_power) -"lV" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/universal, -/obj/effect/catwalk_plated/dark, -/turf/simulated/floor/plating, -/area/map_template/mininghome_power) -"ma" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_hangar) -"mk" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/mininghome_hangar) -"mn" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 8 - }, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers, -/obj/effect/catwalk_plated/dark, -/turf/simulated/floor/plating, -/area/map_template/mininghome_power) -"mv" = ( -/obj/structure/table/rack, -/obj/effect/floor_decal/corner/brown/half, -/obj/machinery/light, -/obj/random/tool, -/obj/random/tool, -/obj/item/pickaxe/drill, -/obj/item/device/scanner/gas{ - pixel_x = 6; - pixel_y = -6 - }, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_hall) -"my" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/turf/simulated/floor/tiled/freezer, -/area/map_template/mininghome_mess) -"mJ" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/freezer, -/area/map_template/mininghome_bathroom) -"mS" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/effect/catwalk_plated/dark, -/turf/simulated/floor/plating, -/area/map_template/mininghome_power) -"mX" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 4; - level = 2 - }, -/obj/machinery/light{ - dir = 1 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/mininghome_hall) -"mZ" = ( -/obj/machinery/light/small{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 5 - }, -/obj/effect/catwalk_plated/dark, -/turf/simulated/floor/plating, -/area/map_template/mininghome_power) -"nm" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/mininghome_hall) -"nu" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/structure/cable/yellow{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/effect/floor_decal/corner/brown/half, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_hangar) -"nv" = ( -/obj/machinery/power/tracker, -/obj/structure/cable/yellow{ - d2 = 4; - icon_state = "0-4" - }, -/obj/structure/cable/yellow{ - d2 = 8; - icon_state = "0-8" - }, -/turf/simulated/floor/plating, -/area/space) -"nz" = ( -/obj/structure/table/woodentable/mahogany, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 1; - level = 2 - }, -/obj/effect/floor_decal/corner/brown/half, -/obj/machinery/firealarm{ - dir = 1; - pixel_y = -24 - }, -/obj/item/clothing/head/beret/mininghome_scg, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_living_north) -"nG" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 1 - }, -/obj/effect/floor_decal/floordetail/pryhole, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_power) -"nN" = ( -/obj/machinery/atmospherics/pipe/manifold/visible{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/obj/effect/catwalk_plated/dark, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/turf/simulated/floor/plating, -/area/map_template/mininghome_power) -"nQ" = ( -/obj/machinery/oxygen_pump{ - pixel_y = 32 - }, -/obj/structure/sign/warning/airlock{ - dir = 8; - pixel_x = 36 - }, -/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{ - id_tag = "mininghome_solars_pump" - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/mininghome_power) -"nT" = ( -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/machinery/light/spot{ - dir = 8 - }, -/turf/simulated/floor/plating, -/area/space) -"nU" = ( -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 8 - }, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_hall) -"nW" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_power) -"od" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/effect/floor_decal/corner/brown/half{ - dir = 8 - }, -/obj/effect/floor_decal/corner/brown{ - dir = 4 - }, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_lockers) -"of" = ( -/obj/machinery/atmospherics/unary/vent_pump/on, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_hangar) -"og" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 8 - }, -/obj/effect/floor_decal/corner/brown/half{ - dir = 4 - }, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_hall) -"ou" = ( -/obj/structure/closet/radiation, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/mininghome_power) -"oy" = ( -/obj/structure/table/steel, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/mininghome_hall) -"oF" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/effect/floor_decal/corner/brown/half{ - dir = 8 - }, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_living_north) -"oJ" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/mininghome_hall) -"oR" = ( -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/floor_decal/corner/brown/half{ - dir = 1 - }, -/obj/machinery/light{ - dir = 1 - }, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_hall) -"pb" = ( -/obj/effect/floor_decal/corner/brown/half{ - dir = 4 - }, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_hall) -"ph" = ( -/obj/machinery/access_button{ - command = "cycle_exterior"; - frequency = 1380; - master_tag = "mininghome_asteroidairlock"; - name = "exterior access button"; - pixel_x = 24; - pixel_y = -24 - }, -/turf/simulated/floor/asteroid, -/area/space) -"pj" = ( -/obj/effect/wallframe_spawn/reinforced/no_grille, -/obj/machinery/door/firedoor, -/obj/effect/paint/black, -/turf/simulated/floor/plating, -/area/map_template/mininghome_hangar) -"ps" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/floor_decal/corner/brown/half{ - dir = 8 - }, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_lockers) -"pu" = ( -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/floor_decal/corner/brown/half{ - dir = 4 - }, -/obj/effect/floor_decal/corner/brown{ - dir = 8 - }, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_power) -"py" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/effect/floor_decal/corner/brown/half{ - dir = 8 - }, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_hall) -"pz" = ( -/obj/machinery/photocopier, -/obj/effect/floor_decal/corner/brown/half, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_lockers) -"pB" = ( -/obj/effect/floor_decal/corner/brown/half{ - dir = 8 - }, -/obj/machinery/light{ - dir = 8 - }, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_lockers) -"pD" = ( -/obj/machinery/atmospherics/binary/pump/on{ - dir = 8 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/mininghome_power) -"pI" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 8 - }, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_hangar) -"pL" = ( -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/effect/floor_decal/corner/brown/half{ - dir = 1 - }, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_hangar) -"pV" = ( -/obj/machinery/door/airlock/civilian, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/door/firedoor, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/mininghome_living_north) -"qe" = ( -/obj/machinery/robotics_fabricator, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_robotics) -"qf" = ( -/obj/effect/floor_decal/corner/brown/half{ - dir = 1 - }, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_hangar) -"ql" = ( -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 4; - icon_state = "warningcorner" - }, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_hangar) -"qB" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_living_north) -"qS" = ( -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 4 - }, -/obj/effect/floor_decal/corner/brown/half{ - dir = 1 - }, -/obj/machinery/vending/wallmed1{ - pixel_y = 32 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_hall) -"qW" = ( -/obj/structure/fitness/weightlifter, -/turf/simulated/floor/wood/walnut, -/area/map_template/mininghome_power) -"rb" = ( -/obj/machinery/mining/brace{ - dir = 8 - }, -/obj/machinery/light{ - dir = 4 - }, -/obj/effect/floor_decal/corner/brown/half{ - dir = 4 - }, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_hall) -"rd" = ( -/obj/machinery/conveyor{ - dir = 8; - id = "mininghome_internal" - }, -/turf/simulated/floor/plating, -/area/map_template/mininghome_hall) -"ri" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/floor_decal/corner/brown/half{ - dir = 4 - }, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_hall) -"rj" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_hangar) -"rp" = ( -/obj/structure/window/reinforced{ - dir = 8 - }, -/obj/structure/fitness/punchingbag, -/turf/simulated/floor/wood/walnut, -/area/map_template/mininghome_power) -"rt" = ( -/obj/effect/floor_decal/corner/brown/half{ - dir = 4 - }, -/obj/machinery/alarm{ - dir = 8; - pixel_x = 24 - }, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_hall) -"rz" = ( -/obj/machinery/light/small{ - dir = 8 - }, -/turf/simulated/floor/tiled/freezer, -/area/map_template/mininghome_lockers) -"rH" = ( -/obj/effect/floor_decal/solarpanel, -/obj/machinery/power/solar/improved, -/obj/structure/cable/yellow{ - d2 = 4; - icon_state = "0-4" - }, -/obj/structure/cable/yellow{ - d2 = 8; - icon_state = "0-8" - }, -/turf/simulated/floor/plating, -/area/space) -"rN" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 8 - }, -/obj/effect/floor_decal/corner/brown/half, -/obj/machinery/firealarm{ - dir = 1; - pixel_y = -24 - }, -/obj/structure/closet/dilapidated{ - desc = "A dilpidated closet, the paint is flecking off. A old name plate is labeled H. Schultz." - }, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_living_south) -"rQ" = ( -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/turf/simulated/floor/plating, -/area/space) -"rR" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_power) -"sb" = ( -/obj/machinery/door/airlock/external/glass{ - frequency = 1380; - id_tag = "mininghome_primary_interiordoor"; - locked = 1; - name = "Primary Airlock" - }, -/obj/machinery/atmospherics/pipe/simple/hidden, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/mininghome_hall) -"sk" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 - }, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_hall) -"sm" = ( -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_robotics) -"sn" = ( -/obj/structure/table/steel, -/obj/effect/floor_decal/corner/brown/half, -/obj/effect/floor_decal/corner/brown{ - dir = 4 - }, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_lockers) -"sv" = ( -/obj/effect/floor_decal/corner/brown/half{ - dir = 1 - }, -/obj/random/material, -/obj/random/material, -/obj/random/material, -/obj/structure/closet/crate/plastic, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_hangar) -"sx" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 1 - }, -/obj/effect/floor_decal/corner/brown, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_hangar) -"sz" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 1 - }, -/obj/machinery/vending/engineering{ - dir = 4; - pixel_x = -7 - }, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 4 - }, -/obj/machinery/light{ - dir = 8 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/mininghome_power) -"sE" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 8 - }, -/obj/random/junk, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_hall) -"sQ" = ( -/obj/structure/bed, -/obj/item/bedsheet, -/obj/effect/floor_decal/corner/brown/half{ - dir = 4 - }, -/obj/effect/floor_decal/corner/brown{ - dir = 8 - }, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_living_north) -"sR" = ( -/obj/machinery/light, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 1; - level = 2 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/mininghome_solars) -"tb" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/mininghome_hall) -"tg" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/obj/structure/cable/yellow{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_hangar) -"tm" = ( -/obj/effect/floor_decal/corner/brown/half{ - dir = 1 - }, -/obj/machinery/light{ - dir = 1 - }, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_power) -"tn" = ( -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/random/tool, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/mininghome_power) -"tw" = ( -/obj/structure/table/steel, -/obj/effect/floor_decal/corner/red{ - dir = 1 - }, -/obj/effect/floor_decal/corner/red, -/turf/simulated/floor/tiled/white, -/area/map_template/mininghome_mess) -"tx" = ( -/obj/structure/lattice, -/turf/space, -/area/space) -"ty" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 4 - }, -/obj/machinery/button/blast_door{ - id_tag = "mininghomehangarshutters"; - name = "Hangar Shutters"; - pixel_x = -26 - }, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_hangar) -"tz" = ( -/obj/machinery/vending/games{ - dir = 1 - }, -/obj/effect/floor_decal/corner/brown/half{ - dir = 8 - }, -/obj/effect/floor_decal/corner/brown, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_lockers) -"tF" = ( -/obj/effect/floor_decal/industrial/hatch/yellow, -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_hall) -"tH" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 8 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/mininghome_hall) -"tP" = ( -/obj/machinery/vending/fitness, -/obj/effect/floor_decal/corner/brown/half{ - dir = 1 - }, -/obj/effect/floor_decal/corner/brown{ - dir = 8 - }, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_power) -"tS" = ( -/obj/machinery/computer/modular/preset/civilian{ - dir = 8; - icon_state = "console" - }, -/obj/machinery/light{ - dir = 4 - }, -/obj/effect/floor_decal/corner/brown/half{ - dir = 4 - }, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_lockers) -"tU" = ( -/obj/machinery/light/spot, -/turf/simulated/floor/asteroid, -/area/map_template/mininghome_hall) -"tW" = ( -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/mininghome_solars) -"tX" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 1; - level = 2 - }, -/obj/machinery/alarm{ - dir = 1; - pixel_y = -22 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/mininghome_hall) -"ud" = ( -/obj/machinery/light{ - dir = 4 - }, -/obj/effect/floor_decal/corner/brown/half{ - dir = 4 - }, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_hall) -"uh" = ( -/obj/machinery/firealarm{ - dir = 8; - pixel_x = -24 - }, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_hangar) -"uF" = ( -/obj/structure/cable/yellow{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_hangar) -"uN" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_power) -"uT" = ( -/obj/machinery/suit_storage_unit/mining/alt, -/obj/effect/floor_decal/corner/brown/half{ - dir = 8 - }, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_hall) -"uU" = ( -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/mininghome_hall) -"uY" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_hangar) -"uZ" = ( -/obj/effect/floor_decal/corner/brown/half{ - dir = 8 - }, -/obj/effect/floor_decal/corner/brown{ - dir = 4 - }, -/obj/structure/closet/dilapidated{ - desc = "A dilpidated closet, the paint is flecking off. A old name plate is labeled G. Freeman." - }, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_living_south) -"vc" = ( -/obj/structure/table/steel, -/obj/item/stack/material/phoron/ten, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/mininghome_solars) -"vs" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/door/airlock/civilian, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/door/firedoor, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/mininghome_mess) -"vv" = ( -/obj/effect/wallframe_spawn/reinforced/titanium, -/obj/machinery/door/firedoor, -/obj/machinery/door/blast/regular{ - dir = 4; - icon_state = "pdoor0"; - id_tag = "mininghomehangarshutters" - }, -/obj/effect/paint/black, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/mininghome_hangar) -"vw" = ( -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_power) -"vx" = ( -/obj/structure/reagent_dispensers/watertank, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/mininghome_power) -"vy" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 1 - }, -/obj/effect/floor_decal/corner/brown{ - dir = 8 - }, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_hangar) -"vB" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_hangar) -"vC" = ( -/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply, -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_robotics) -"vH" = ( -/obj/machinery/atmospherics/unary/vent_pump/on, -/obj/effect/floor_decal/corner/brown/half{ - dir = 1 - }, -/obj/machinery/light/spot{ - dir = 1 - }, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_hangar) -"vJ" = ( -/obj/effect/floor_decal/corner/brown/half, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_hall) -"vK" = ( -/turf/simulated/floor/tiled/techfloor, -/area/map_template/mininghome_hall) -"vO" = ( -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/freezer, -/area/map_template/mininghome_bathroom) -"vQ" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_hangar) -"vX" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 4 - }, -/obj/effect/catwalk_plated/dark, -/turf/simulated/floor/plating, -/area/map_template/mininghome_power) -"vY" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_hall) -"wd" = ( -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_hall) -"wi" = ( -/obj/structure/ore_box, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_hall) -"wj" = ( -/obj/effect/floor_decal/corner/brown/half{ - dir = 8 - }, -/obj/item/device/radio/intercom{ - dir = 4; - pixel_x = -21 - }, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_power) -"wn" = ( -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/structure/closet/crate/internals/fuel, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/mininghome_hangar) -"wp" = ( -/obj/item/device/radio/intercom{ - dir = 4; - pixel_x = -21 - }, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_hangar) -"wv" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 1 - }, -/obj/effect/floor_decal/corner/brown/half, -/obj/effect/floor_decal/corner/brown{ - dir = 4 - }, -/obj/machinery/light, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_power) -"wy" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/obj/machinery/light{ - dir = 1 - }, -/obj/structure/table/steel, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/mininghome_hall) -"wz" = ( -/obj/machinery/door/airlock/civilian, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/door/firedoor, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/mininghome_living_south) -"wF" = ( -/turf/simulated/floor/tiled/techfloor, -/area/map_template/mininghome_power) -"wJ" = ( -/obj/machinery/atmospherics/portables_connector, -/obj/machinery/portable_atmospherics/canister/air/airlock, -/obj/machinery/light/small{ - dir = 1 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/mininghome_hall) -"wK" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_hangar) -"wT" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 8 - }, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_hangar) -"wV" = ( -/turf/simulated/floor/plating, -/area/space) -"xb" = ( -/obj/effect/floor_decal/corner/brown/half, -/obj/machinery/firealarm{ - dir = 1; - pixel_y = -24 - }, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_lockers) -"xk" = ( -/obj/machinery/washing_machine, -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/turf/simulated/floor/tiled/freezer, -/area/map_template/mininghome_lockers) -"xm" = ( -/obj/machinery/door/airlock/external/glass{ - frequency = 1380; - id_tag = "mininghomesolars_exteriordoor"; - locked = 1; - name = "Solars Access" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/mininghome_power) -"xv" = ( -/obj/machinery/vending/wallmed1{ - pixel_y = 32 - }, -/obj/machinery/atmospherics/unary/vent_pump/on, -/obj/effect/floor_decal/corner/brown/half{ - dir = 1 - }, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_power) -"xz" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 1 - }, -/obj/structure/cable/yellow{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 1 - }, -/obj/effect/floor_decal/corner/brown/half{ - dir = 8 - }, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_power) -"xC" = ( -/obj/effect/paint/black, -/turf/simulated/wall/r_titanium, -/area/map_template/mininghome_bathroom) -"xL" = ( -/obj/effect/floor_decal/corner/brown/half, -/obj/machinery/light, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_hall) -"xQ" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 1 - }, -/obj/machinery/firealarm{ - dir = 1; - pixel_y = -24 - }, -/obj/machinery/light/small, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/mininghome_hall) -"xR" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/effect/floor_decal/corner/red{ - dir = 1 - }, -/obj/effect/floor_decal/corner/red, -/obj/structure/extinguisher_cabinet{ - pixel_x = 32 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/mininghome_mess) -"yi" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/simple/hidden, -/obj/effect/catwalk_plated/dark, -/turf/simulated/floor/plating, -/area/map_template/mininghome_power) -"ym" = ( -/obj/effect/floor_decal/corner/red{ - dir = 1 - }, -/obj/effect/floor_decal/corner/red, -/turf/simulated/floor/tiled/white, -/area/map_template/mininghome_mess) -"yo" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/item/device/radio/intercom{ - pixel_y = 23 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/mininghome_hall) -"yt" = ( -/obj/machinery/power/apc{ - name = "south bump"; - pixel_y = -24 - }, -/obj/structure/cable/yellow, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_hangar) -"yx" = ( -/obj/structure/table/steel, -/obj/machinery/recharger, -/obj/effect/floor_decal/corner/brown/half{ - dir = 4 - }, -/obj/item/device/radio/intercom{ - dir = 8; - pixel_x = 21 - }, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_lockers) -"yB" = ( -/obj/structure/closet/secure_closet/guncabinet, -/obj/effect/floor_decal/corner/brown/half{ - dir = 1 - }, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_lockers) -"yC" = ( -/obj/effect/floor_decal/corner/red{ - dir = 1 - }, -/obj/effect/floor_decal/corner/red, -/obj/machinery/button/blast_door{ - id_tag = "mininghomemess_shutters"; - name = "Mess Shutters"; - pixel_x = -28 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/mininghome_mess) -"yI" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/effect/catwalk_plated/dark, -/turf/simulated/floor/plating, -/area/map_template/mininghome_power) -"yJ" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_hangar) -"yK" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/freezer, -/area/map_template/mininghome_bathroom) -"yN" = ( -/obj/effect/floor_decal/corner/brown/half, -/obj/random/junk, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_hall) -"yP" = ( -/obj/machinery/portable_atmospherics/powered/scrubber/huge, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_hangar) -"yQ" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/obj/effect/floor_decal/corner/brown/half{ - dir = 1 - }, -/obj/machinery/light/spot{ - dir = 1 - }, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_hangar) -"yR" = ( -/obj/machinery/light, -/obj/effect/floor_decal/corner/brown/half, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_lockers) -"yT" = ( -/obj/item/remains/human, -/turf/simulated/floor/asteroid, -/area/space) -"yV" = ( -/obj/machinery/atmospherics/pipe/manifold/visible{ - dir = 1 - }, -/obj/effect/catwalk_plated/dark, -/turf/simulated/floor/plating, -/area/map_template/mininghome_power) -"za" = ( -/obj/item/shovel, -/turf/simulated/floor/asteroid, -/area/space) -"zd" = ( -/obj/machinery/atmospherics/unary/tank/air{ - dir = 1 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/mininghome_power) -"zg" = ( -/obj/machinery/mineral/stacking_machine{ - input_turf = 2; - output_turf = 1 - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/plating, -/area/map_template/mininghome_hall) -"zk" = ( -/obj/effect/floor_decal/corner/brown/half{ - dir = 8 - }, -/obj/effect/floor_decal/corner/brown{ - dir = 4 - }, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_hall) -"zq" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 1; - level = 2 - }, -/obj/machinery/light/small, -/obj/structure/dispenser/oxygen, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/mininghome_hall) -"zv" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_hangar) -"zw" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 1 - }, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_robotics) -"zB" = ( -/obj/machinery/light{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/effect/catwalk_plated/dark, -/obj/item/device/radio/intercom{ - dir = 8; - pixel_x = 21 - }, -/turf/simulated/floor/plating, -/area/map_template/mininghome_power) -"zF" = ( -/obj/machinery/vending/cola, -/obj/effect/floor_decal/corner/red{ - dir = 1 - }, -/obj/effect/floor_decal/corner/red, -/turf/simulated/floor/tiled/white, -/area/map_template/mininghome_mess) -"zG" = ( -/obj/machinery/light/spot{ - dir = 4 - }, -/turf/simulated/floor/asteroid, -/area/map_template/mininghome_hangar) -"zI" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden{ - dir = 1 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/mininghome_hall) -"zJ" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, -/obj/effect/floor_decal/corner/red{ - dir = 1 - }, -/obj/effect/floor_decal/corner/red, -/turf/simulated/floor/tiled/white, -/area/map_template/mininghome_mess) -"zN" = ( -/obj/machinery/door/airlock/civilian, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/door/firedoor, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/mininghome_robotics) -"zS" = ( -/obj/effect/floor_decal/corner/brown/half{ - dir = 1 - }, -/obj/effect/floor_decal/corner/brown{ - dir = 8 - }, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_lockers) -"zU" = ( -/obj/structure/mopbucket, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/item/mop/advanced, -/obj/effect/floor_decal/corner/red{ - dir = 1 - }, -/obj/effect/floor_decal/corner/red, -/turf/simulated/floor/tiled/white, -/area/map_template/mininghome_mess) -"zW" = ( -/obj/machinery/power/solar_control/autostart, -/obj/structure/cable/yellow{ - d2 = 4; - icon_state = "0-4" - }, -/obj/structure/cable/yellow, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/mininghome_solars) -"Aa" = ( -/obj/structure/ore_box, -/obj/effect/floor_decal/corner/brown/half{ - dir = 4 - }, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_hall) -"Ad" = ( -/obj/structure/window/reinforced{ - dir = 1 - }, -/obj/structure/window/reinforced{ - dir = 8 - }, -/turf/simulated/floor/wood/walnut, -/area/map_template/mininghome_power) -"Ai" = ( -/obj/machinery/vending/cigarette, -/obj/effect/floor_decal/corner/brown/half{ - dir = 8 - }, -/obj/effect/floor_decal/corner/brown{ - dir = 4 - }, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_lockers) -"Am" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/mininghome_hangar) -"At" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/floor_decal/corner/brown/half{ - dir = 4 - }, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_lockers) -"Av" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/mininghome_hall) -"AG" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_hangar) -"AN" = ( -/obj/effect/floor_decal/corner/brown{ - dir = 1 - }, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_lockers) -"AS" = ( -/obj/machinery/vending/robotics, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/light{ - dir = 1 - }, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_robotics) -"AT" = ( -/obj/structure/table/steel, -/obj/machinery/atmospherics/unary/vent_pump/on, -/obj/effect/floor_decal/corner/brown/half{ - dir = 1 - }, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_lockers) -"AX" = ( -/obj/effect/floor_decal/industrial/hatch/yellow, -/obj/machinery/conveyor_switch/oneway{ - id = "mininghome_internal"; - name = "mining conveyor" - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/mininghome_hall) -"AY" = ( -/obj/machinery/door/airlock/mining, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/door/firedoor, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/mininghome_solars) -"AZ" = ( -/obj/machinery/atmospherics/unary/vent_pump/on, -/obj/structure/closet/secure_closet/freezer/fridge, -/turf/simulated/floor/tiled/freezer, -/area/map_template/mininghome_mess) -"Bc" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable/yellow{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_lockers) -"Be" = ( -/turf/simulated/floor/tiled/techfloor, -/area/map_template/mininghome_solars) -"Bg" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, -/obj/structure/cable/yellow{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/effect/floor_decal/corner/brown/half{ - dir = 4 - }, -/obj/effect/floor_decal/corner/brown{ - dir = 1 - }, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_lockers) -"Bj" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/effect/floor_decal/corner/brown/half{ - dir = 1 - }, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_power) -"Bl" = ( -/obj/machinery/alarm{ - dir = 4; - pixel_x = -21 - }, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_hangar) -"Bm" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/effect/floor_decal/corner/brown/half, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_hall) -"Bq" = ( -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/turf/simulated/floor/tiled/freezer, -/area/map_template/mininghome_bathroom) -"Bt" = ( -/obj/machinery/door/airlock/civilian, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/door/firedoor, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/mininghome_mess) -"BA" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/mininghome_hall) -"BE" = ( -/obj/machinery/firealarm{ - dir = 1; - pixel_y = -24 - }, -/obj/machinery/light, -/turf/simulated/floor/tiled/freezer, -/area/map_template/mininghome_bathroom) -"BH" = ( -/obj/machinery/conveyor{ - dir = 8; - id = "mininghome_internal" - }, -/obj/machinery/light, -/turf/simulated/floor/plating, -/area/map_template/mininghome_hall) -"BN" = ( -/obj/effect/wallframe_spawn/reinforced/no_grille, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/mininghome_hall) -"BT" = ( -/obj/effect/floor_decal/corner/brown/half{ - dir = 4 - }, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_lockers) -"BX" = ( -/obj/machinery/power/port_gen/pacman, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/mininghome_solars) -"Ca" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/mininghome_solars) -"Ck" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_lockers) -"Cl" = ( -/obj/machinery/alarm{ - dir = 4; - pixel_x = -23 - }, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_robotics) -"Cm" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_lockers) -"Cr" = ( -/obj/effect/shuttle_landmark/nav_mininghome_2, -/turf/space, -/area/space) -"Cv" = ( -/obj/machinery/portable_atmospherics/canister/carbon_dioxide, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/mininghome_hangar) -"Cz" = ( -/obj/structure/cable/yellow{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_lockers) -"CE" = ( -/obj/structure/grille, -/turf/simulated/floor/plating, -/area/space) -"CG" = ( -/obj/effect/floor_decal/corner/brown/half{ - dir = 4 - }, -/obj/random/material, -/obj/random/material, -/obj/random/material, -/obj/random/material, -/obj/random/material, -/obj/random/material, -/obj/structure/closet/crate/plastic, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_hangar) -"CH" = ( -/obj/structure/ore_box, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_hangar) -"CM" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, -/obj/structure/cable/yellow{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/turf/simulated/floor/tiled/freezer, -/area/map_template/mininghome_bathroom) -"CP" = ( -/obj/item/drain, -/turf/simulated/floor/tiled/freezer, -/area/map_template/mininghome_bathroom) -"Da" = ( -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/cable/yellow{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/machinery/light/spot{ - dir = 8 - }, -/turf/simulated/floor/plating, -/area/map_template/mininghome_solars) -"Db" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_hall) -"Ds" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/tiled/freezer, -/area/map_template/mininghome_mess) -"Dt" = ( -/obj/structure/table/steel, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/recharger, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/mininghome_hall) -"DE" = ( -/obj/effect/paint/black, -/turf/simulated/wall/r_titanium, -/area/map_template/mininghome_hall) -"DH" = ( -/obj/structure/table/rack, -/obj/effect/floor_decal/corner/brown/half, -/obj/random/tool, -/obj/random/tool, -/obj/item/pickaxe/diamonddrill, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_hall) -"DL" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/engineering, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/mininghome_bathroom) -"DQ" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_hangar) -"DR" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/universal{ - dir = 4 - }, -/obj/effect/catwalk_plated/dark, -/turf/simulated/floor/plating, -/area/map_template/mininghome_power) -"DT" = ( -/obj/machinery/light, -/obj/effect/floor_decal/corner/brown/half, -/obj/machinery/computer/modular/preset/civilian{ - dir = 1 - }, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_lockers) -"DU" = ( -/obj/structure/table/steel, -/obj/machinery/cell_charger, -/obj/effect/floor_decal/corner/brown/half{ - dir = 4 - }, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_lockers) -"DZ" = ( -/obj/machinery/computer/mining, -/turf/simulated/wall/r_titanium, -/area/map_template/mininghome_hall) -"Ea" = ( -/obj/machinery/door/airlock/civilian, -/obj/machinery/door/firedoor, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/mininghome_robotics) -"Ed" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 1 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/mininghome_hall) -"Et" = ( -/obj/machinery/firealarm{ - pixel_y = 24 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/mininghome_hall) -"EH" = ( -/obj/structure/ore_box, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/mininghome_hall) -"EJ" = ( -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 9 - }, -/obj/effect/catwalk_plated/dark, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/mininghome_power) -"EK" = ( -/obj/effect/floor_decal/corner/brown/half, -/obj/effect/floor_decal/corner/brown{ - dir = 4 - }, -/obj/structure/closet/emcloset, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_hall) -"EN" = ( -/obj/structure/closet/emcloset, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_hangar) -"ET" = ( -/obj/structure/hygiene/shower{ - dir = 4 - }, -/obj/machinery/light/small{ - dir = 1 - }, -/turf/simulated/floor/tiled/freezer, -/area/map_template/mininghome_bathroom) -"EY" = ( -/obj/effect/floor_decal/corner/brown/half, -/obj/machinery/firealarm{ - dir = 1; - pixel_y = -24 - }, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_hall) -"Fa" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/mininghome_hall) -"Ff" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/door/airlock/engineering, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/mininghome_hall) -"Fk" = ( -/obj/effect/floor_decal/corner/brown/half, -/obj/effect/floor_decal/corner/brown{ - dir = 1 - }, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_hangar) -"Fl" = ( -/obj/effect/floor_decal/asteroid, -/turf/simulated/mineral/random, -/area/space) -"Fo" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_hangar) -"Fp" = ( -/obj/effect/floor_decal/corner/brown/half, -/obj/effect/floor_decal/corner/brown{ - dir = 4 - }, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_hangar) -"Ft" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled/freezer, -/area/map_template/mininghome_bathroom) -"Fu" = ( -/obj/structure/bed/chair, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_lockers) -"Fw" = ( -/obj/machinery/light{ - dir = 4 - }, -/obj/effect/floor_decal/corner/brown/half{ - dir = 4 - }, -/obj/item/device/radio/intercom{ - dir = 8; - pixel_x = 21 - }, -/obj/structure/closet/dilapidated{ - desc = "A dilpidated closet, the paint is flecking off. A old name plate is labeled I. Gregorich." - }, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_living_north) -"FE" = ( -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_hall) -"FK" = ( -/obj/effect/floor_decal/corner/brown/half{ - dir = 4 - }, -/obj/machinery/light{ - dir = 4 - }, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_power) -"FS" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/random/junk, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_lockers) -"FU" = ( -/obj/structure/closet/crate/freezer/meat, -/obj/machinery/light/small{ - dir = 1 - }, -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/turf/simulated/floor/tiled/freezer, -/area/map_template/mininghome_mess) -"Gb" = ( -/obj/structure/grille, -/turf/simulated/floor/asteroid, -/area/space) -"Gi" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/mininghome_hall) -"Gl" = ( -/obj/machinery/atmospherics/pipe/manifold4w/hidden, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/mininghome_power) -"Gt" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_hall) -"Gw" = ( -/obj/structure/closet/emcloset, -/obj/effect/floor_decal/corner/brown/half{ - dir = 4 - }, -/obj/effect/floor_decal/corner/brown{ - dir = 1 - }, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_power) -"GA" = ( -/obj/structure/table/rack, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 1 - }, -/obj/effect/floor_decal/corner/brown/half, -/obj/machinery/alarm{ - dir = 1; - pixel_y = -22 - }, -/obj/random/tool, -/obj/random/tool, -/obj/item/clothing/glasses/meson{ - pixel_y = -4 - }, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_hall) -"GL" = ( -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/mininghome_power) -"GM" = ( -/turf/simulated/floor/plating, -/area/map_template/mininghome_hangar) -"GO" = ( -/obj/random/junk, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_hall) -"GV" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 8 - }, -/obj/effect/floor_decal/corner/brown{ - dir = 4 - }, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_hangar) -"GX" = ( -/obj/machinery/mining/drill, -/obj/effect/floor_decal/corner/brown/half{ - dir = 4 - }, -/obj/effect/floor_decal/corner/brown{ - dir = 1 - }, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_hall) -"Ha" = ( -/obj/structure/closet/crate/plastic, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/mininghome_hall) -"Hf" = ( -/obj/effect/wallframe_spawn/reinforced/titanium, -/obj/machinery/door/firedoor, -/obj/machinery/door/blast/regular{ - icon_state = "pdoor0"; - id_tag = "mininghomehallshutters" - }, -/obj/effect/paint/black, -/turf/simulated/floor/plating, -/area/map_template/mininghome_hall) -"Hh" = ( -/obj/machinery/door/airlock/multi_tile/glass/mining, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/door/firedoor, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/mininghome_hangar) -"Ht" = ( -/obj/machinery/embedded_controller/radio/airlock/airlock_controller{ - dir = 8; - frequency = 1380; - id_tag = "mininghome_asteroidairlock"; - name = "Asteroid Airlock"; - pixel_x = 22; - tag_airpump = "mininghome_primary_pump"; - tag_chamber_sensor = "mininghome_primary_sensor"; - tag_exterior_door = "mininghome_primary_exteriordoor"; - tag_interior_door = "mininghome_primary_interiordoor" - }, -/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{ - dir = 8; - id_tag = "mininghome_primary_pump" - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/mininghome_hall) -"Hz" = ( -/obj/effect/floor_decal/asteroid, -/turf/simulated/floor/asteroid, -/area/space) -"HJ" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/obj/effect/catwalk_plated/dark, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/plating, -/area/map_template/mininghome_power) -"HL" = ( -/turf/simulated/floor/tiled/freezer, -/area/map_template/mininghome_lockers) -"HM" = ( -/obj/structure/pit, -/obj/item/remains/human, -/obj/item/mininghome_passport_iccg, -/obj/item/clothing/head/beret/mininghome_iccg, -/turf/simulated/floor/asteroid, -/area/space) -"HW" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 1; - level = 2 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/mininghome_power) -"HZ" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/engineering, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/mininghome_power) -"Ic" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/turf/simulated/floor/tiled/freezer, -/area/map_template/mininghome_bathroom) -"Ik" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/effect/floor_decal/corner/red{ - dir = 1 - }, -/obj/effect/floor_decal/corner/red, -/turf/simulated/floor/tiled/white, -/area/map_template/mininghome_mess) -"Il" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/effect/floor_decal/corner/brown/half{ - dir = 4 - }, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_lockers) -"In" = ( -/obj/machinery/light/spot{ - dir = 1 - }, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_hangar) -"Io" = ( -/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 4 - }, -/obj/effect/floor_decal/floordetail/pryhole, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_hall) -"It" = ( -/obj/item/storage/toolbox/mechanical{ - pixel_x = 6; - pixel_y = 8 - }, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_robotics) -"IB" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_lockers) -"IC" = ( -/obj/machinery/light, -/obj/effect/floor_decal/corner/brown/half, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_hangar) -"ID" = ( -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/plating, -/area/space) -"IH" = ( -/obj/effect/floor_decal/corner/brown/half, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_hangar) -"IL" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply, -/obj/effect/catwalk_plated/dark, -/turf/simulated/floor/plating, -/area/map_template/mininghome_power) -"IT" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 1 - }, -/obj/machinery/computer/station_alert/engineering{ - dir = 1 - }, -/obj/machinery/light, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_robotics) -"IW" = ( -/obj/effect/paint/black, -/turf/simulated/wall/r_titanium, -/area/map_template/mininghome_mess) -"Jb" = ( -/obj/effect/floor_decal/industrial/hatch/yellow, -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_hall) -"Jd" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_lockers) -"Jn" = ( -/obj/effect/floor_decal/corner/brown/half{ - dir = 1 - }, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_lockers) -"Jv" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled/freezer, -/area/map_template/mininghome_lockers) -"Jy" = ( -/obj/structure/cable/yellow{ - d2 = 2; - icon_state = "0-2" - }, -/obj/machinery/power/smes/buildable/preset, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/mininghome_solars) -"JE" = ( -/obj/structure/cable/yellow{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/effect/paint/black, -/turf/simulated/wall/r_titanium, -/area/map_template/mininghome_solars) -"JM" = ( -/obj/machinery/hologram/holopad/longrange, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_lockers) -"JY" = ( -/obj/structure/bed/chair, -/obj/effect/floor_decal/corner/red{ - dir = 1 - }, -/obj/effect/floor_decal/corner/red, -/turf/simulated/floor/tiled/white, -/area/map_template/mininghome_mess) -"Kd" = ( -/obj/machinery/light/small{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/mininghome_power) -"Km" = ( -/obj/machinery/light/small{ - dir = 4 - }, -/obj/machinery/firealarm{ - dir = 4; - pixel_x = 21 - }, -/turf/simulated/floor/tiled/freezer, -/area/map_template/mininghome_lockers) -"Kq" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/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/simulated/floor/tiled/freezer, -/area/map_template/mininghome_bathroom) -"Kx" = ( -/obj/machinery/door/airlock/external/glass{ - frequency = 1380; - id_tag = "mininghomesolars_interiordoor"; - locked = 1; - name = "Solars Access" - }, -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/mininghome_power) -"KH" = ( -/obj/machinery/mineral/unloading_machine{ - input_turf = 4; - output_turf = 8 - }, -/obj/effect/floor_decal/industrial/hatch/yellow, -/obj/machinery/door/firedoor, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/mininghome_hall) -"KJ" = ( -/obj/machinery/door/airlock/multi_tile/glass/mining, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/door/firedoor, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/mininghome_power) -"KK" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_hangar) -"KP" = ( -/obj/item/mech_equipment/drill, -/obj/structure/table/rack, -/obj/effect/floor_decal/industrial/warning{ - dir = 1 - }, -/obj/machinery/light{ - dir = 8 - }, -/obj/effect/floor_decal/corner/brown{ - dir = 8 - }, -/obj/item/device/kit/paint/flames_blue, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_hall) -"KV" = ( -/obj/structure/window/reinforced{ - dir = 1 - }, -/turf/simulated/floor/wood/walnut, -/area/map_template/mininghome_power) -"KW" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 8 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/mininghome_hangar) -"KZ" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable/yellow{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_robotics) -"Lb" = ( -/obj/effect/floor_decal/industrial/warning, -/obj/effect/floor_decal/corner/brown{ - dir = 4 - }, -/obj/effect/floor_decal/corner/brown{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_hall) -"Lc" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/obj/structure/cable/yellow{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/effect/floor_decal/corner/brown/half{ - dir = 4 - }, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_lockers) -"Lg" = ( -/obj/effect/paint/black, -/turf/simulated/wall/r_titanium, -/area/map_template/mininghome_lockers) -"Lh" = ( -/obj/machinery/door/airlock/glass/mining{ - name = "Shuttle Fuel Bay Interior"; - normalspeed = 0 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/door/firedoor, -/turf/simulated/floor/plating, -/area/map_template/mininghome_hangar) -"Ln" = ( -/obj/effect/floor_decal/corner/brown/half, -/obj/effect/floor_decal/corner/brown{ - dir = 1 - }, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_lockers) -"Ls" = ( -/obj/machinery/light{ - dir = 8 - }, -/turf/simulated/floor/tiled/freezer, -/area/map_template/mininghome_bathroom) -"Lt" = ( -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 4 - }, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_hangar) -"LD" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 - }, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_living_south) -"LF" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/firealarm{ - dir = 8; - pixel_x = -24 - }, -/obj/effect/catwalk_plated/dark, -/turf/simulated/floor/plating, -/area/map_template/mininghome_power) -"LH" = ( -/obj/effect/floor_decal/corner/brown/half{ - dir = 8 - }, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_hall) -"LK" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/table/rack, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_robotics) -"LL" = ( -/obj/machinery/light/small{ - dir = 8 - }, -/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{ - dir = 4; - id_tag = "mininghome_primary_pump" - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/mininghome_hall) -"LO" = ( -/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/simulated/floor/plating, -/area/space) -"LR" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/effect/floor_decal/corner/brown/half{ - dir = 1 - }, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_hangar) -"LT" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_hangar) -"LU" = ( -/obj/structure/table/steel, -/obj/machinery/atmospherics/unary/vent_pump/on, -/obj/structure/bedsheetbin, -/turf/simulated/floor/tiled/freezer, -/area/map_template/mininghome_lockers) -"LW" = ( -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 1; - icon_state = "warningcorner" - }, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_hangar) -"LX" = ( -/obj/machinery/recharge_station, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_robotics) -"LZ" = ( -/obj/structure/bed, -/obj/item/bedsheet/blue, -/obj/effect/floor_decal/corner/brown/half{ - dir = 4 - }, -/obj/effect/floor_decal/corner/brown{ - dir = 8 - }, -/obj/effect/floor_decal/corner/brown{ - dir = 8 - }, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_living_south) -"Mb" = ( -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/mininghome_power) -"Me" = ( -/obj/structure/bed/chair{ - dir = 4 - }, -/obj/effect/floor_decal/corner/red{ - dir = 1 - }, -/obj/effect/floor_decal/corner/red, -/turf/simulated/floor/tiled/white, -/area/map_template/mininghome_mess) -"Mg" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 8 - }, -/obj/effect/catwalk_plated/dark, -/turf/simulated/floor/plating, -/area/map_template/mininghome_power) -"Mi" = ( -/obj/structure/bed/chair{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_lockers) -"Mk" = ( -/obj/machinery/light{ - dir = 8 - }, -/obj/machinery/mech_recharger, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_robotics) -"Mo" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_hall) -"Mq" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_hall) -"Mr" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/effect/catwalk_plated/dark, -/turf/simulated/floor/plating, -/area/map_template/mininghome_power) -"Ms" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 1 - }, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_hall) -"Mx" = ( -/obj/effect/floor_decal/corner/brown/half{ - dir = 8 - }, -/obj/effect/floor_decal/corner/brown, -/obj/structure/closet/dilapidated{ - desc = "A dilpidated closet, the paint is flecking off. A old name plate is labeled N. Huber." - }, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_living_north) -"My" = ( -/obj/machinery/light{ - dir = 8 - }, -/obj/effect/floor_decal/corner/brown/half{ - dir = 8 - }, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_hall) -"MD" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_hall) -"MI" = ( -/obj/effect/floor_decal/corner/red{ - dir = 1 - }, -/obj/effect/floor_decal/corner/red, -/obj/machinery/light{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/mininghome_mess) -"MJ" = ( -/obj/structure/closet/emcloset, -/obj/effect/floor_decal/corner/brown/half{ - dir = 4 - }, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_power) -"MK" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 1; - level = 2 - }, -/obj/effect/floor_decal/corner/brown/half, -/obj/machinery/alarm{ - dir = 1; - pixel_y = -22 - }, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_hangar) -"MN" = ( -/obj/effect/shuttle_landmark/nav_mininghome_4, -/turf/simulated/floor/plating, -/area/map_template/mininghome_hangar) -"MQ" = ( -/obj/effect/wallframe_spawn/reinforced/titanium, -/obj/machinery/door/blast/regular{ - icon_state = "pdoor0"; - id_tag = "mininghomehallshutters" - }, -/obj/effect/paint/black, -/turf/simulated/floor/plating, -/area/map_template/mininghome_hall) -"Ne" = ( -/obj/effect/overmap/visitable/sector/mininghome, -/turf/simulated/floor/asteroid, -/area/space) -"Ng" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 8 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/mininghome_power) -"Ni" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_robotics) -"Nu" = ( -/obj/machinery/door/airlock/civilian, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/door/firedoor, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/mininghome_robotics) -"Nz" = ( -/obj/machinery/light{ - dir = 4 - }, -/obj/effect/floor_decal/corner/brown/half{ - dir = 4 - }, -/obj/item/device/radio/intercom{ - dir = 8; - pixel_x = 21 - }, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_living_south) -"NI" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 8 - }, -/obj/machinery/alarm{ - dir = 8; - pixel_x = 24 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/mininghome_hangar) -"NM" = ( -/obj/structure/ore_box, -/obj/effect/floor_decal/corner/brown/half{ - dir = 8 - }, -/obj/machinery/light/spot{ - dir = 8 - }, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_hangar) -"NP" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 4 - }, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_hangar) -"NQ" = ( -/obj/structure/table/steel, -/obj/item/storage/box/detergent{ - pixel_x = -3 - }, -/obj/item/storage/box/detergent{ - pixel_x = -5; - pixel_y = 5 - }, -/turf/simulated/floor/tiled/freezer, -/area/map_template/mininghome_lockers) -"NU" = ( -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 4 - }, -/obj/machinery/oxygen_pump{ - pixel_y = 32 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/mininghome_hall) -"NV" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/mininghome_hangar) -"NW" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/freezer, -/area/map_template/mininghome_bathroom) -"NX" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/effect/catwalk_plated/dark, -/turf/simulated/floor/plating, -/area/map_template/mininghome_power) -"NY" = ( -/obj/machinery/atmospherics/pipe/manifold4w/hidden, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/mininghome_hall) -"Oc" = ( -/obj/machinery/atmospherics/unary/tank/air, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/mininghome_power) -"Of" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 1 - }, -/obj/effect/floor_decal/floordetail/pryhole, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_hall) -"Og" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/bed/chair, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_robotics) -"Oo" = ( -/obj/structure/bed/chair{ - dir = 1 - }, -/obj/effect/floor_decal/corner/brown/half{ - dir = 4 - }, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_lockers) -"Oq" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 8 - }, -/obj/machinery/power/apc{ - dir = 1; - name = "north bump"; - pixel_y = 24 - }, -/obj/structure/cable/yellow{ - d2 = 4; - icon_state = "0-4" - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/mininghome_power) -"Ot" = ( -/obj/structure/fireaxecabinet{ - pixel_y = -32 - }, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/mininghome_power) -"Ow" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/effect/catwalk_plated/dark, -/turf/simulated/floor/plating, -/area/map_template/mininghome_power) -"Oy" = ( -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/paint/black, -/turf/simulated/wall/r_titanium, -/area/map_template/mininghome_solars) -"Oz" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 4 - }, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_hangar) -"OA" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_lockers) -"OC" = ( -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/turf/simulated/floor/plating, -/area/space) -"OP" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/mininghome_hall) -"OQ" = ( -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/effect/floor_decal/corner/brown/half, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_hangar) -"OV" = ( -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_living_south) -"OW" = ( -/obj/machinery/door/airlock/civilian, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/door/firedoor, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/mininghome_lockers) -"Pc" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/mininghome_hall) -"Pg" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/mininghome_power) -"Pm" = ( -/obj/effect/paint/black, -/turf/simulated/wall/r_titanium, -/area/map_template/mininghome_power) -"Pr" = ( -/obj/machinery/power/apc{ - dir = 1; - name = "north bump"; - pixel_y = 24 - }, -/obj/machinery/atmospherics/unary/vent_pump/on, -/obj/structure/cable/yellow{ - d2 = 4; - icon_state = "0-4" - }, -/obj/effect/floor_decal/corner/brown/half{ - dir = 1 - }, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_hall) -"Pz" = ( -/obj/effect/shuttle_landmark/nav_mininghome_3, -/turf/space, -/area/space) -"PA" = ( -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/door/firedoor, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/mininghome_hangar) -"PN" = ( -/obj/machinery/alarm{ - dir = 1; - pixel_y = -22 - }, -/obj/machinery/portable_atmospherics/canister/oxygen, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/mininghome_hall) -"PP" = ( -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/cable/yellow{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/machinery/access_button{ - command = "cycle_exterior"; - frequency = 1380; - master_tag = "mininghomesolars"; - name = "exterior access button"; - pixel_x = -24; - pixel_y = -24 - }, -/turf/simulated/floor/plating, -/area/space) -"PS" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 8 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/mininghome_hall) -"PU" = ( -/obj/effect/floor_decal/corner/brown/half{ - dir = 4 - }, -/obj/item/device/radio/intercom{ - dir = 8; - pixel_x = 21 - }, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_lockers) -"PW" = ( -/obj/structure/hygiene/sink/kitchen{ - pixel_x = 32 - }, -/obj/effect/floor_decal/corner/red{ - dir = 1 - }, -/obj/effect/floor_decal/corner/red, -/turf/simulated/floor/tiled/white, -/area/map_template/mininghome_mess) -"PY" = ( -/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{ - dir = 4; - id_tag = "mininghome_primary_pump" - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/mininghome_hall) -"Qc" = ( -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_hangar) -"Qd" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 8 - }, -/obj/effect/floor_decal/corner/brown/half{ - dir = 4 - }, -/obj/machinery/alarm{ - dir = 8; - pixel_x = 24 - }, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_lockers) -"Qf" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_lockers) -"Qj" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply, -/obj/effect/catwalk_plated/dark, -/turf/simulated/floor/plating, -/area/map_template/mininghome_power) -"Qo" = ( -/obj/structure/table/woodentable/mahogany, -/obj/machinery/atmospherics/unary/vent_pump/on, -/obj/machinery/recharger, -/obj/effect/floor_decal/corner/brown/half{ - dir = 1 - }, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_living_south) -"Qp" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/mininghome_power) -"Qq" = ( -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/floor_decal/corner/brown/half{ - dir = 1 - }, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_hall) -"Qs" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, -/turf/simulated/floor/tiled/freezer, -/area/map_template/mininghome_bathroom) -"Qv" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_robotics) -"Qx" = ( -/obj/structure/table/marble, -/obj/machinery/microwave{ - pixel_y = 9 - }, -/obj/effect/floor_decal/corner/red{ - dir = 1 - }, -/obj/effect/floor_decal/corner/red, -/turf/simulated/floor/tiled/white, -/area/map_template/mininghome_mess) -"Qz" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 1 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/mininghome_hall) -"QA" = ( -/obj/structure/cable/yellow, -/obj/machinery/power/apc/hyper{ - dir = 4; - name = "east bump"; - pixel_x = 24; - req_access = list() - }, -/obj/structure/cable/yellow{ - d2 = 8; - icon_state = "0-8" - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/mininghome_solars) -"QE" = ( -/obj/machinery/light{ - dir = 8 - }, -/obj/effect/floor_decal/corner/brown/half{ - dir = 8 - }, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_lockers) -"QF" = ( -/obj/machinery/light, -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/mininghome_hall) -"QK" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/effect/catwalk_plated/dark, -/turf/simulated/floor/plating, -/area/map_template/mininghome_power) -"QN" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 8 - }, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_hangar) -"QR" = ( -/obj/structure/grille/broken, -/turf/simulated/floor/plating, -/area/space) -"QS" = ( -/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{ - dir = 8; - id_tag = "mininghome_primary_pump" - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/mininghome_hall) -"QU" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/door/firedoor, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/mininghome_power) -"QW" = ( -/obj/machinery/firealarm{ - dir = 8; - pixel_x = -24 - }, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_robotics) -"QX" = ( -/obj/effect/floor_decal/corner/brown/half, -/obj/machinery/firealarm{ - dir = 1; - pixel_y = -24 - }, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_hangar) -"Rb" = ( -/obj/effect/floor_decal/corner/brown/half{ - dir = 4 - }, -/obj/machinery/alarm{ - dir = 8; - pixel_x = 24 - }, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_lockers) -"Rd" = ( -/obj/effect/paint/black, -/turf/simulated/wall/r_titanium, -/area/map_template/mininghome_living_north) -"Re" = ( -/obj/structure/largecrate, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_hangar) -"Rf" = ( -/obj/structure/bed/chair, -/obj/effect/floor_decal/corner/brown/half{ - dir = 4 - }, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_lockers) -"Ri" = ( -/obj/structure/cable/yellow{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/turf/simulated/floor/plating, -/area/space) -"Rk" = ( -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_lockers) -"Rl" = ( -/obj/machinery/door/airlock/external/glass{ - frequency = 1380; - id_tag = "mininghome_primary_exteriordoor"; - locked = 1; - name = "Primary Airlock" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/mininghome_hall) -"Rs" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/mininghome_hall) -"Ru" = ( -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 1 - }, -/obj/structure/cable/yellow{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/effect/floor_decal/floordetail/pryhole, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_hangar) -"RB" = ( -/obj/machinery/papershredder, -/obj/effect/floor_decal/corner/brown/half, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_lockers) -"RI" = ( -/obj/structure/table/steel, -/obj/machinery/photocopier/faxmachine, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 1; - level = 2 - }, -/obj/effect/floor_decal/corner/brown/half, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_lockers) -"RJ" = ( -/obj/structure/extinguisher_cabinet{ - pixel_x = 32 - }, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_hangar) -"RP" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable/yellow{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/effect/floor_decal/corner/brown/half{ - dir = 8 - }, -/obj/effect/floor_decal/corner/brown{ - dir = 4 - }, -/obj/machinery/light_switch{ - pixel_x = -6; - pixel_y = 24 - }, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_living_north) -"RU" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 8 - }, -/obj/machinery/light{ - dir = 4 - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 1 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/mininghome_hall) -"RW" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 4 - }, -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_hangar) -"RZ" = ( -/obj/effect/floor_decal/corner/brown/half{ - dir = 1 - }, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_power) -"Sa" = ( -/obj/machinery/cooker/oven, -/obj/machinery/light{ - dir = 1 - }, -/obj/effect/floor_decal/corner/red{ - dir = 1 - }, -/obj/effect/floor_decal/corner/red, -/turf/simulated/floor/tiled/white, -/area/map_template/mininghome_mess) -"Sf" = ( -/obj/structure/cable/yellow{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/structure/cable/yellow{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_hangar) -"Sq" = ( -/obj/machinery/recharger/wallcharger{ - pixel_y = 24 - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 4 - }, -/obj/effect/floor_decal/corner/brown{ - dir = 1 - }, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_hangar) -"Ss" = ( -/obj/structure/curtain/black, -/turf/simulated/floor/tiled/freezer, -/area/map_template/mininghome_bathroom) -"Sx" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 4 - }, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_hangar) -"SJ" = ( -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/cable/yellow{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/structure/cable/yellow{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/turf/simulated/floor/plating, -/area/space) -"SM" = ( -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_lockers) -"SN" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 8 - }, -/obj/machinery/button/blast_door{ - id_tag = "mininghomehangarshutters"; - name = "Hangar Shutters"; - pixel_x = 26 - }, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_hangar) -"SP" = ( -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 8; - icon_state = "warningcorner" - }, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_hangar) -"SS" = ( -/obj/machinery/light/spot{ - dir = 8 - }, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_hangar) -"SU" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 1 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/mininghome_hall) -"SV" = ( -/obj/structure/plasticflaps, -/obj/machinery/conveyor{ - dir = 1; - id = "mininghome_internal" - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/mininghome_hall) -"SX" = ( -/obj/machinery/door/airlock/civilian, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/door/firedoor, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/mininghome_lockers) -"Tc" = ( -/obj/machinery/power/apc{ - dir = 8; - name = "west bump"; - pixel_x = -24 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 - }, -/obj/structure/cable/yellow{ - d2 = 2; - icon_state = "0-2" - }, -/obj/effect/floor_decal/corner/brown/half{ - dir = 8 - }, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_living_south) -"Tj" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/mininghome_solars) -"TD" = ( -/obj/structure/table/steel, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_robotics) -"TH" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/freezer, -/area/map_template/mininghome_bathroom) -"TL" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_hall) -"TT" = ( -/obj/machinery/light/spot{ - dir = 1 - }, -/turf/simulated/floor/asteroid, -/area/map_template/mininghome_hall) -"TV" = ( -/obj/machinery/oxygen_pump{ - pixel_y = 32 - }, -/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{ - id_tag = "mininghome_solars_pump" - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/mininghome_power) -"TX" = ( -/obj/machinery/light/small{ - dir = 4 - }, -/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{ - dir = 8; - id_tag = "mininghome_primary_pump" - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/mininghome_hall) -"Ub" = ( -/obj/effect/floor_decal/corner/brown/half, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_lockers) -"Ud" = ( -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_hangar) -"Uh" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/effect/floor_decal/corner/brown/half, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_hangar) -"Up" = ( -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/mininghome_hall) -"Uq" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 1; - level = 2 - }, -/obj/effect/floor_decal/corner/brown/half, -/obj/machinery/light, -/obj/machinery/portable_atmospherics/canister/oxygen, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_hall) -"Uy" = ( -/obj/structure/bed/chair{ - dir = 8 - }, -/obj/effect/floor_decal/corner/red{ - dir = 1 - }, -/obj/effect/floor_decal/corner/red, -/turf/simulated/floor/tiled/white, -/area/map_template/mininghome_mess) -"UA" = ( -/obj/machinery/atmospherics/unary/vent_pump/on, -/obj/machinery/light{ - dir = 1 - }, -/turf/simulated/floor/tiled/freezer, -/area/map_template/mininghome_bathroom) -"UC" = ( -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 1; - icon_state = "warningcorner" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/item/storage/toolbox/emergency{ - pixel_x = -13; - pixel_y = -6 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/mininghome_power) -"UD" = ( -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/floor_decal/corner/brown{ - dir = 1 - }, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_hall) -"UE" = ( -/obj/machinery/atmospherics/unary/vent_pump/on, -/obj/effect/floor_decal/corner/brown/half{ - dir = 1 - }, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_hall) -"UO" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/effect/floor_decal/corner/red{ - dir = 1 - }, -/obj/effect/floor_decal/corner/red, -/turf/simulated/floor/tiled/white, -/area/map_template/mininghome_mess) -"UU" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 1 - }, -/obj/structure/dispenser/oxygen, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/mininghome_hall) -"Vc" = ( -/obj/machinery/alarm{ - dir = 1; - pixel_y = -22 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/mininghome_power) -"Vj" = ( -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_lockers) -"Vk" = ( -/obj/machinery/light/small{ - dir = 1 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/mininghome_power) -"Vm" = ( -/obj/effect/floor_decal/corner/brown/half, -/obj/machinery/alarm{ - dir = 1; - pixel_y = -22 - }, -/obj/machinery/light, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_hall) -"Vr" = ( -/obj/structure/bed, -/obj/item/bedsheet/blue, -/obj/effect/floor_decal/corner/brown/half{ - dir = 4 - }, -/obj/effect/floor_decal/corner/brown{ - dir = 1 - }, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_living_north) -"Vz" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 1 - }, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_hall) -"VA" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/light{ - dir = 1 - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/portable_atmospherics/canister/oxygen, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/mininghome_hall) -"VB" = ( -/obj/machinery/atmospherics/portables_connector{ - dir = 1 - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/portable_atmospherics/powered/pump, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/mininghome_power) -"VG" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 8 - }, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_lockers) -"VL" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_hangar) -"VO" = ( -/obj/machinery/suit_storage_unit/mining/alt, -/obj/machinery/light{ - dir = 8 - }, -/obj/effect/floor_decal/corner/brown/half{ - dir = 8 - }, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_hall) -"VY" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_lockers) -"VZ" = ( -/turf/simulated/floor/asteroid, -/area/space) -"Wc" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 8 - }, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_lockers) -"Wf" = ( -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_power) -"Wg" = ( -/obj/machinery/door/firedoor, -/obj/machinery/light/spot, -/obj/effect/floor_decal/industrial/hatch/yellow, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_hall) -"Wn" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_hangar) -"Wo" = ( -/obj/item/device/radio/intercom{ - dir = 1; - pixel_y = -28 - }, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_hangar) -"Wp" = ( -/obj/effect/floor_decal/corner/brown/half{ - dir = 4 - }, -/obj/effect/floor_decal/corner/brown{ - dir = 1 - }, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_hall) -"Wr" = ( -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 4 - }, -/obj/machinery/light/small{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/mininghome_hall) -"Wu" = ( -/obj/structure/hygiene/toilet{ - dir = 4 - }, -/obj/machinery/light/small{ - dir = 1 - }, -/turf/simulated/floor/tiled/freezer, -/area/map_template/mininghome_bathroom) -"Wy" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 8 - }, -/obj/effect/floor_decal/corner/red{ - dir = 1 - }, -/obj/effect/floor_decal/corner/red, -/turf/simulated/floor/tiled/white, -/area/map_template/mininghome_mess) -"Wz" = ( -/turf/simulated/mineral/random/high_chance, -/area/space) -"WB" = ( -/obj/machinery/mining/drill, -/obj/effect/floor_decal/corner/brown/half{ - dir = 1 - }, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_hall) -"WJ" = ( -/obj/effect/paint/black, -/obj/machinery/door/airlock/civilian, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/door/firedoor, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/mininghome_hall) -"WQ" = ( -/obj/machinery/light{ - dir = 8 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/mininghome_hall) -"WR" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/effect/floor_decal/corner/brown/half{ - dir = 8 - }, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_living_south) -"WU" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/effect/floor_decal/corner/red{ - dir = 1 - }, -/obj/effect/floor_decal/corner/red, -/turf/simulated/floor/tiled/white, -/area/map_template/mininghome_mess) -"WW" = ( -/obj/machinery/mech_recharger, -/obj/effect/floor_decal/corner/brown/half, -/obj/effect/floor_decal/corner/brown{ - dir = 1 - }, -/mob/living/exosuit/premade/powerloader/flames_blue, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_hall) -"WX" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 4 - }, -/obj/effect/catwalk_plated/dark, -/turf/simulated/floor/plating, -/area/map_template/mininghome_power) -"WY" = ( -/obj/effect/paint/black, -/turf/simulated/wall/r_titanium, -/area/map_template/mininghome_robotics) -"Xc" = ( -/obj/machinery/power/terminal{ - dir = 4 - }, -/obj/structure/cable/yellow{ - d2 = 8; - icon_state = "0-8" - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/mininghome_solars) -"Xi" = ( -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/floor_decal/corner/brown/half{ - dir = 1 - }, -/obj/structure/cable/yellow{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_hall) -"Xm" = ( -/obj/effect/floor_decal/corner/brown/half, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_power) -"Xr" = ( -/obj/effect/paint/black, -/turf/simulated/wall/r_titanium, -/area/map_template/mininghome_hangar) -"Xt" = ( -/obj/machinery/recharger/wallcharger{ - pixel_y = 24 - }, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 8 - }, -/obj/effect/floor_decal/corner/brown/half{ - dir = 1 - }, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_living_north) -"Xu" = ( -/obj/machinery/door/firedoor, -/obj/machinery/light/spot{ - dir = 1 - }, -/obj/machinery/button/blast_door{ - id_tag = "mininghomehallshutters"; - name = "Skybridge Shutters"; - pixel_y = 26 - }, -/obj/effect/floor_decal/industrial/hatch/yellow, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_hall) -"Xz" = ( -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/cable/yellow{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/effect/floor_decal/corner/brown/half, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_hangar) -"XA" = ( -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 6 - }, -/obj/machinery/recharger/wallcharger{ - pixel_y = 24 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/mininghome_hall) -"XM" = ( -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_hall) -"XQ" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/firealarm{ - dir = 4; - pixel_x = 21 - }, -/obj/effect/catwalk_plated/dark, -/turf/simulated/floor/plating, -/area/map_template/mininghome_power) -"XS" = ( -/obj/machinery/light/small, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 1 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/mininghome_power) -"XW" = ( -/obj/structure/reagent_dispensers/fueltank, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/mininghome_power) -"XX" = ( -/obj/structure/hygiene/sink{ - dir = 4; - pixel_x = 11 - }, -/turf/simulated/floor/tiled/freezer, -/area/map_template/mininghome_bathroom) -"Ya" = ( -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/effect/catwalk_plated/dark, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/map_template/mininghome_power) -"Yb" = ( -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_hangar) -"Yd" = ( -/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{ - dir = 1; - id_tag = "mininghome_solars_pump" - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/mininghome_power) -"Ye" = ( -/obj/effect/wallframe_spawn/reinforced/titanium, -/obj/machinery/door/blast/regular{ - dir = 4; - id_tag = "mininghomemess_shutters" - }, -/obj/effect/paint/black, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/mininghome_mess) -"Yq" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/effect/floor_decal/corner/brown/half, -/obj/effect/floor_decal/corner/brown{ - dir = 1 - }, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_power) -"Yu" = ( -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_hangar) -"Yw" = ( -/obj/machinery/power/apc{ - dir = 8; - name = "west bump"; - pixel_x = -24 - }, -/obj/structure/cable/yellow, -/obj/effect/floor_decal/corner/brown/half{ - dir = 8 - }, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_living_north) -"Yx" = ( -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_hangar) -"YE" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_hangar) -"YF" = ( -/obj/machinery/atmospherics/portables_connector{ - dir = 1 - }, -/obj/machinery/portable_atmospherics/powered/pump, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/mininghome_hall) -"YJ" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/mininghome_hall) -"YQ" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 1; - level = 2 - }, -/obj/effect/floor_decal/corner/brown/half, -/obj/machinery/firealarm{ - dir = 1; - pixel_y = -24 - }, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_lockers) -"Zg" = ( -/obj/effect/floor_decal/corner/brown{ - dir = 8 - }, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_hall) -"Zl" = ( -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/turf/simulated/floor/plating, -/area/space) -"Zm" = ( -/obj/machinery/light{ - dir = 4 - }, -/turf/simulated/floor/tiled/freezer, -/area/map_template/mininghome_bathroom) -"Zr" = ( -/turf/simulated/floor/wood/walnut, -/area/map_template/mininghome_power) -"ZA" = ( -/obj/machinery/power/apc{ - dir = 1; - name = "north bump"; - pixel_y = 24 - }, -/obj/structure/cable/yellow{ - d2 = 8; - icon_state = "0-8" - }, -/turf/simulated/floor/tiled/freezer, -/area/map_template/mininghome_bathroom) -"ZD" = ( -/obj/machinery/light/small, -/obj/structure/hygiene/shower{ - dir = 8 - }, -/turf/simulated/floor/tiled/freezer, -/area/map_template/mininghome_bathroom) -"ZO" = ( -/obj/structure/closet/emcloset, -/obj/effect/floor_decal/corner/brown/half{ - dir = 8 - }, -/obj/effect/floor_decal/corner/brown, -/turf/simulated/floor/steel_dirty, -/area/map_template/mininghome_hall) -"ZQ" = ( -/obj/structure/table/rack, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/mininghome_solars) -"ZV" = ( -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/mininghome_hall) -"ZW" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/effect/floor_decal/corner/red{ - dir = 1 - }, -/obj/effect/floor_decal/corner/red, -/turf/simulated/floor/tiled/white, -/area/map_template/mininghome_mess) - -(1,1,1) = {" -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -"} -(2,1,1) = {" -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -"} -(3,1,1) = {" -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -"} -(4,1,1) = {" -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -"} -(5,1,1) = {" -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -"} -(6,1,1) = {" -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -"} -(7,1,1) = {" -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -"} -(8,1,1) = {" -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -"} -(9,1,1) = {" -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -"} -(10,1,1) = {" -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -"} -(11,1,1) = {" -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -VZ -VZ -VZ -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -"} -(12,1,1) = {" -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -VZ -VZ -VZ -VZ -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -"} -(13,1,1) = {" -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -"} -(14,1,1) = {" -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -eh -eh -VZ -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -"} -(15,1,1) = {" -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -VZ -eh -eh -eh -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -"} -(16,1,1) = {" -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -VZ -VZ -VZ -eh -eh -VZ -VZ -VZ -eh -VZ -VZ -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -VZ -VZ -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -"} -(17,1,1) = {" -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -VZ -VZ -VZ -VZ -VZ -VZ -VZ -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -VZ -eh -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -"} -(18,1,1) = {" -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -eh -eh -VZ -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -fv -fv -VZ -VZ -VZ -VZ -VZ -VZ -VZ -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -"} -(19,1,1) = {" -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -eh -eh -eh -eh -eh -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -VZ -VZ -VZ -VZ -VZ -VZ -fv -fv -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -Wz -Wz -Wz -Wz -VZ -VZ -VZ -VZ -VZ -fv -fv -fv -VZ -fv -VZ -VZ -VZ -VZ -VZ -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -"} -(20,1,1) = {" -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -VZ -VZ -VZ -VZ -VZ -VZ -VZ -fv -fv -fv -fv -fv -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -eh -eh -eh -VZ -eh -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -eh -VZ -eh -eh -VZ -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -VZ -VZ -VZ -VZ -VZ -VZ -fv -fv -fv -fv -fv -VZ -VZ -VZ -VZ -VZ -VZ -VZ -Wz -Wz -Wz -Wz -fv -fv -VZ -VZ -VZ -VZ -VZ -fv -fv -fv -fv -fv -VZ -VZ -VZ -VZ -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -"} -(21,1,1) = {" -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -VZ -VZ -VZ -VZ -VZ -VZ -fv -fv -fv -fv -fv -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -fv -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -VZ -VZ -VZ -VZ -VZ -VZ -fv -fv -fv -fv -fv -fv -VZ -VZ -VZ -VZ -VZ -VZ -fv -fv -Wz -Wz -Wz -Wz -fv -fv -VZ -VZ -VZ -VZ -fv -fv -fv -fv -VZ -VZ -VZ -VZ -VZ -VZ -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -"} -(22,1,1) = {" -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -fv -fv -fv -fv -fv -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -fv -fv -fv -fv -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -fv -fv -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -eh -eh -eh -eh -eh -eh -eh -eh -eh -VZ -VZ -VZ -VZ -VZ -VZ -fv -fv -fv -fv -fv -fv -VZ -VZ -VZ -VZ -VZ -VZ -fv -fv -Wz -Wz -Wz -Wz -Wz -fv -VZ -fv -fv -VZ -VZ -VZ -fv -fv -fv -VZ -VZ -fv -VZ -VZ -VZ -VZ -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -"} -(23,1,1) = {" -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -VZ -VZ -VZ -fv -VZ -VZ -VZ -VZ -VZ -fv -fv -fv -fv -fv -fv -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -fv -fv -fv -fv -fv -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -fv -VZ -fv -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -eh -eh -eh -eh -eh -eh -eh -eh -eh -VZ -VZ -VZ -VZ -VZ -fv -fv -fv -fv -fv -VZ -VZ -VZ -VZ -VZ -VZ -fv -fv -fv -Wz -Wz -Wz -Wz -Wz -fv -fv -fv -fv -fv -VZ -VZ -VZ -fv -VZ -VZ -fv -fv -fv -VZ -VZ -VZ -VZ -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -"} -(24,1,1) = {" -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -VZ -VZ -VZ -VZ -fv -fv -fv -fv -VZ -VZ -VZ -VZ -fv -fv -fv -fv -fv -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -fv -fv -fv -fv -fv -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -fv -VZ -fv -fv -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -eh -eh -eh -eh -eh -eh -VZ -VZ -VZ -VZ -VZ -VZ -VZ -fv -fv -fv -fv -VZ -VZ -VZ -VZ -fv -fv -fv -fv -fv -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -fv -fv -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -fv -VZ -VZ -VZ -VZ -VZ -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -"} -(25,1,1) = {" -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -VZ -VZ -fv -fv -fv -fv -fv -fv -VZ -VZ -VZ -VZ -fv -fv -fv -fv -VZ -VZ -VZ -VZ -VZ -VZ -fv -fv -fv -fv -fv -VZ -VZ -VZ -VZ -VZ -VZ -VZ -fv -fv -fv -fv -fv -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -fv -fv -fv -fv -VZ -VZ -VZ -VZ -VZ -fv -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -eh -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -fv -fv -VZ -VZ -VZ -VZ -fv -fv -fv -VZ -fv -fv -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -fv -fv -fv -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -"} -(26,1,1) = {" -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -VZ -VZ -VZ -VZ -fv -fv -fv -fv -fv -fv -VZ -VZ -VZ -fv -fv -fv -fv -fv -VZ -VZ -VZ -VZ -fv -fv -fv -fv -VZ -fv -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -fv -fv -fv -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -fv -fv -fv -fv -fv -VZ -VZ -VZ -fv -fv -fv -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -fv -VZ -VZ -VZ -VZ -VZ -VZ -fv -fv -VZ -fv -fv -fv -fv -fv -fv -fv -Wz -Wz -Wz -Wz -Wz -Wz -fv -fv -fv -VZ -VZ -fv -VZ -VZ -VZ -VZ -VZ -fv -fv -fv -VZ -VZ -VZ -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -"} -(27,1,1) = {" -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -VZ -VZ -VZ -VZ -VZ -fv -fv -fv -fv -fv -VZ -VZ -VZ -VZ -VZ -fv -fv -fv -fv -VZ -VZ -fv -fv -fv -fv -fv -fv -fv -fv -VZ -fv -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -fv -fv -fv -fv -fv -fv -VZ -VZ -VZ -VZ -fv -fv -fv -fv -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -fv -fv -fv -VZ -VZ -VZ -VZ -VZ -VZ -VZ -fv -fv -fv -fv -fv -fv -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -fv -fv -fv -fv -VZ -fv -VZ -VZ -VZ -VZ -VZ -fv -fv -VZ -VZ -VZ -VZ -VZ -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -"} -(28,1,1) = {" -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -VZ -VZ -VZ -VZ -VZ -VZ -fv -fv -fv -VZ -fv -fv -VZ -VZ -fv -VZ -fv -fv -VZ -fv -fv -fv -VZ -fv -fv -fv -fv -fv -fv -VZ -VZ -fv -fv -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -fv -fv -fv -fv -fv -VZ -VZ -VZ -VZ -VZ -VZ -fv -fv -fv -fv -fv -VZ -VZ -VZ -VZ -VZ -VZ -VZ -fv -VZ -fv -fv -fv -fv -fv -fv -VZ -VZ -VZ -VZ -VZ -fv -fv -fv -fv -fv -fv -fv -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -fv -fv -fv -fv -VZ -VZ -VZ -VZ -fv -VZ -VZ -VZ -fv -VZ -VZ -VZ -VZ -VZ -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -"} -(29,1,1) = {" -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -VZ -fv -fv -fv -VZ -VZ -VZ -fv -VZ -VZ -fv -fv -VZ -VZ -VZ -VZ -fv -VZ -VZ -fv -fv -fv -fv -fv -fv -fv -fv -fv -fv -fv -fv -fv -fv -fv -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -fv -fv -fv -fv -fv -fv -fv -fv -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -fv -fv -fv -fv -fv -VZ -VZ -VZ -VZ -VZ -VZ -fv -fv -fv -fv -fv -fv -VZ -VZ -VZ -VZ -VZ -VZ -fv -fv -fv -fv -fv -fv -fv -fv -Wz -Wz -Wz -Wz -Wz -Wz -Wz -fv -fv -fv -fv -fv -fv -VZ -VZ -VZ -VZ -fv -fv -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -"} -(30,1,1) = {" -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -VZ -VZ -fv -fv -fv -VZ -VZ -fv -VZ -fv -fv -fv -fv -VZ -VZ -VZ -VZ -VZ -fv -fv -fv -fv -fv -fv -fv -fv -fv -fv -fv -fv -fv -fv -fv -fv -fv -fv -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -fv -fv -fv -fv -fv -fv -fv -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -fv -fv -fv -fv -fv -VZ -VZ -VZ -fv -fv -fv -fv -fv -fv -fv -VZ -VZ -VZ -VZ -VZ -VZ -VZ -fv -VZ -fv -fv -fv -fv -fv -Wz -Wz -Wz -Wz -Wz -Wz -Wz -fv -fv -fv -fv -fv -fv -VZ -VZ -VZ -fv -fv -fv -fv -VZ -VZ -VZ -VZ -VZ -VZ -VZ -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -"} -(31,1,1) = {" -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -VZ -VZ -VZ -fv -fv -fv -fv -VZ -VZ -VZ -fv -fv -fv -fv -VZ -VZ -VZ -VZ -VZ -VZ -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -fv -fv -fv -fv -fv -VZ -VZ -VZ -VZ -VZ -VZ -fv -fv -fv -fv -fv -fv -fv -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -fv -fv -fv -fv -fv -fv -fv -VZ -VZ -VZ -VZ -VZ -fv -fv -fv -fv -fv -fv -fv -fv -fv -Wz -Wz -Wz -Wz -Wz -Wz -Wz -fv -fv -fv -fv -fv -VZ -VZ -VZ -fv -fv -VZ -VZ -fv -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -"} -(32,1,1) = {" -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -VZ -VZ -VZ -fv -fv -fv -VZ -VZ -VZ -fv -fv -fv -fv -VZ -VZ -VZ -VZ -VZ -VZ -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -fv -fv -fv -fv -fv -fv -fv -VZ -VZ -VZ -fv -fv -fv -fv -fv -fv -fv -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -fv -VZ -fv -fv -fv -fv -fv -VZ -VZ -VZ -VZ -VZ -fv -fv -fv -VZ -fv -fv -fv -fv -fv -fv -Wz -Wz -Wz -Wz -Wz -Wz -Wz -fv -fv -fv -fv -VZ -VZ -fv -fv -fv -VZ -VZ -VZ -VZ -VZ -fv -fv -VZ -VZ -VZ -VZ -VZ -VZ -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -"} -(33,1,1) = {" -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -VZ -VZ -fv -fv -fv -VZ -VZ -VZ -fv -fv -fv -fv -VZ -VZ -fv -VZ -VZ -VZ -fv -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -fv -fv -fv -fv -fv -fv -fv -fv -fv -VZ -fv -fv -fv -fv -fv -fv -VZ -VZ -VZ -VZ -fv -fv -fv -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -fv -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -fv -fv -VZ -fv -fv -fv -fv -fv -fv -fv -Wz -Wz -Wz -Wz -Wz -Wz -Wz -fv -fv -fv -fv -VZ -VZ -fv -VZ -VZ -VZ -VZ -VZ -VZ -fv -fv -fv -fv -VZ -VZ -VZ -VZ -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -"} -(34,1,1) = {" -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -VZ -VZ -VZ -VZ -VZ -fv -VZ -VZ -fv -fv -fv -fv -fv -VZ -VZ -fv -fv -VZ -VZ -VZ -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -fv -fv -fv -fv -fv -fv -fv -fv -fv -fv -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -fv -fv -fv -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -fv -fv -fv -fv -fv -fv -fv -fv -fv -fv -fv -fv -fv -fv -fv -fv -fv -VZ -VZ -VZ -VZ -fv -fv -VZ -VZ -VZ -VZ -fv -fv -fv -fv -fv -fv -VZ -VZ -VZ -VZ -VZ -VZ -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -"} -(35,1,1) = {" -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -VZ -VZ -VZ -VZ -VZ -VZ -fv -fv -fv -fv -fv -VZ -VZ -fv -fv -fv -VZ -VZ -fv -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -fv -fv -fv -fv -fv -fv -fv -fv -fv -fv -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -fv -fv -fv -fv -fv -VZ -fv -fv -VZ -fv -fv -fv -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -fv -fv -fv -fv -fv -fv -fv -fv -fv -fv -fv -fv -fv -fv -fv -VZ -fv -VZ -VZ -VZ -VZ -VZ -VZ -fv -VZ -VZ -fv -fv -fv -fv -fv -fv -fv -fv -fv -fv -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -"} -(36,1,1) = {" -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -VZ -VZ -VZ -VZ -VZ -fv -fv -fv -fv -fv -fv -VZ -VZ -fv -fv -VZ -VZ -VZ -VZ -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -fv -fv -fv -fv -fv -fv -fv -fv -fv -fv -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -fv -fv -fv -VZ -fv -fv -fv -fv -fv -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -fv -fv -fv -fv -fv -fv -fv -fv -fv -fv -fv -fv -fv -fv -VZ -fv -fv -fv -VZ -VZ -VZ -VZ -VZ -VZ -fv -VZ -fv -fv -fv -fv -VZ -VZ -VZ -fv -fv -fv -fv -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -"} -(37,1,1) = {" -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -fv -fv -fv -VZ -VZ -VZ -VZ -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -fv -fv -fv -fv -fv -fv -fv -fv -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -fv -fv -fv -fv -fv -fv -fv -fv -fv -fv -fv -fv -fv -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -fv -fv -fv -fv -fv -fv -fv -fv -fv -fv -fv -fv -fv -fv -fv -fv -fv -fv -VZ -VZ -VZ -VZ -fv -fv -fv -VZ -VZ -fv -fv -VZ -VZ -VZ -VZ -VZ -fv -fv -fv -fv -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -eh -VZ -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -"} -(38,1,1) = {" -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -fv -fv -fv -VZ -VZ -VZ -fv -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -fv -fv -fv -fv -fv -fv -fv -fv -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -fv -fv -fv -fv -fv -fv -fv -fv -fv -fv -fv -fv -fv -fv -VZ -fv -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -fv -fv -fv -fv -fv -fv -fv -VZ -fv -VZ -fv -fv -fv -fv -fv -fv -VZ -VZ -VZ -VZ -VZ -fv -fv -fv -VZ -VZ -VZ -VZ -fv -VZ -VZ -VZ -VZ -VZ -fv -fv -fv -fv -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -eh -VZ -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -"} -(39,1,1) = {" -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -fv -fv -fv -VZ -VZ -VZ -VZ -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -fv -fv -fv -fv -fv -fv -VZ -VZ -VZ -VZ -VZ -fv -VZ -fv -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -fv -fv -fv -fv -fv -fv -fv -fv -fv -fv -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -fv -fv -fv -fv -fv -fv -fv -fv -fv -VZ -VZ -fv -fv -fv -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -fv -fv -fv -VZ -fv -VZ -VZ -VZ -VZ -VZ -za -HM -VZ -VZ -fv -fv -fv -VZ -VZ -VZ -fv -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -"} -(40,1,1) = {" -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -fv -fv -fv -fv -VZ -VZ -VZ -VZ -VZ -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -fv -fv -VZ -fv -VZ -VZ -VZ -VZ -VZ -fv -fv -fv -fv -fv -fv -VZ -VZ -VZ -VZ -VZ -fv -fv -fv -fv -fv -fv -fv -fv -fv -fv -fv -fv -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -fv -fv -fv -fv -fv -VZ -VZ -fv -fv -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -fv -fv -fv -fv -fv -fv -VZ -fv -VZ -VZ -hH -yT -VZ -VZ -VZ -fv -fv -fv -VZ -VZ -VZ -fv -VZ -VZ -Wz -VZ -VZ -VZ -VZ -VZ -VZ -VZ -eh -VZ -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -"} -(41,1,1) = {" -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -fv -fv -fv -fv -VZ -VZ -VZ -VZ -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -fv -fv -fv -VZ -VZ -VZ -VZ -VZ -fv -fv -fv -fv -fv -fv -fv -VZ -VZ -VZ -VZ -VZ -fv -fv -fv -fv -fv -fv -fv -fv -fv -fv -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -fv -fv -fv -fv -VZ -VZ -VZ -VZ -VZ -VZ -fv -fv -VZ -fv -fv -VZ -VZ -VZ -VZ -VZ -VZ -Hz -VZ -VZ -fv -VZ -VZ -fv -fv -fv -fv -fv -fv -fv -fv -fv -fv -VZ -VZ -VZ -VZ -VZ -fv -fv -fv -fv -VZ -VZ -fv -fv -VZ -VZ -Wz -Wz -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -"} -(42,1,1) = {" -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -fv -fv -fv -fv -VZ -VZ -VZ -VZ -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -fv -fv -VZ -VZ -VZ -VZ -VZ -VZ -VZ -fv -fv -fv -fv -fv -VZ -VZ -VZ -VZ -VZ -fv -fv -fv -fv -fv -fv -fv -fv -fv -fv -VZ -VZ -VZ -VZ -VZ -VZ -VZ -fv -fv -VZ -VZ -VZ -fv -fv -fv -fv -fv -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -Hz -VZ -VZ -VZ -VZ -fv -fv -fv -fv -fv -fv -fv -fv -fv -fv -fv -fv -VZ -VZ -VZ -fv -fv -fv -fv -fv -VZ -VZ -fv -fv -VZ -Wz -Wz -Wz -Wz -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -eh -VZ -VZ -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -"} -(43,1,1) = {" -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -VZ -VZ -VZ -VZ -VZ -VZ -VZ -fv -fv -VZ -VZ -VZ -VZ -VZ -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -fv -fv -fv -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -fv -fv -fv -VZ -VZ -VZ -VZ -VZ -fv -fv -fv -fv -fv -fv -fv -fv -fv -fv -fv -VZ -VZ -VZ -VZ -VZ -fv -VZ -VZ -VZ -fv -fv -VZ -fv -VZ -fv -fv -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -fv -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -fv -fv -fv -fv -fv -fv -fv -VZ -fv -fv -VZ -Wz -Wz -Wz -Wz -Wz -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -"} -(44,1,1) = {" -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -fv -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -fv -fv -fv -fv -fv -fv -fv -fv -VZ -VZ -VZ -VZ -VZ -fv -VZ -VZ -VZ -VZ -fv -VZ -fv -VZ -fv -fv -Hz -VZ -fv -fv -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -fv -fv -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -fv -fv -fv -fv -VZ -VZ -fv -VZ -VZ -VZ -VZ -VZ -Wz -Wz -Wz -Wz -Wz -Wz -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -eh -VZ -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -"} -(45,1,1) = {" -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -VZ -fv -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -fv -fv -VZ -VZ -fv -fv -VZ -VZ -VZ -VZ -VZ -VZ -VZ -fv -fv -fv -fv -fv -VZ -VZ -VZ -fv -fv -fv -VZ -VZ -fv -fv -fv -VZ -VZ -VZ -VZ -VZ -fv -VZ -fv -fv -VZ -VZ -fv -fv -fv -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -fv -fv -fv -VZ -VZ -VZ -fv -VZ -VZ -VZ -VZ -VZ -Wz -Wz -Wz -Wz -Wz -Wz -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -eh -VZ -VZ -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -"} -(46,1,1) = {" -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -VZ -VZ -VZ -VZ -VZ -VZ -fv -fv -fv -VZ -VZ -VZ -VZ -VZ -VZ -VZ -Wz -Wz -Wz -Wz -Wz -Wz -Wz -VZ -VZ -fv -VZ -VZ -fv -VZ -VZ -Wz -Wz -Wz -VZ -Wz -VZ -VZ -VZ -VZ -VZ -VZ -fv -VZ -fv -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -fv -VZ -VZ -VZ -fv -fv -VZ -fv -fv -fv -fv -fv -fv -fv -fv -fv -fv -fv -fv -fv -fv -fv -fv -VZ -VZ -VZ -VZ -VZ -fv -fv -VZ -VZ -fv -fv -VZ -VZ -VZ -fv -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -fv -fv -fv -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -Wz -Wz -Wz -Wz -Wz -VZ -VZ -Wz -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -eh -VZ -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -"} -(47,1,1) = {" -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -VZ -VZ -VZ -eh -VZ -fv -fv -fv -fv -fv -VZ -VZ -VZ -VZ -VZ -VZ -VZ -Wz -Wz -Wz -Wz -Wz -Wz -VZ -VZ -VZ -fv -VZ -VZ -VZ -Wz -VZ -VZ -Wz -Wz -Wz -Wz -Wz -VZ -VZ -VZ -fv -fv -fv -fv -fv -VZ -VZ -fv -VZ -VZ -VZ -VZ -fv -VZ -VZ -VZ -VZ -fv -fv -fv -fv -fv -fv -fv -fv -fv -fv -fv -fv -fv -fv -fv -fv -fv -fv -fv -VZ -VZ -VZ -VZ -fv -fv -VZ -VZ -Hz -fv -VZ -fv -VZ -fv -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -fv -fv -fv -VZ -VZ -VZ -fv -VZ -VZ -fv -VZ -VZ -VZ -Wz -Wz -Wz -Wz -VZ -VZ -VZ -Wz -Wz -Wz -VZ -VZ -VZ -VZ -VZ -Wz -Wz -VZ -VZ -VZ -VZ -VZ -VZ -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -"} -(48,1,1) = {" -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -VZ -fv -fv -fv -fv -fv -fv -VZ -VZ -VZ -fv -fv -VZ -VZ -Wz -Wz -VZ -Wz -VZ -VZ -VZ -VZ -VZ -VZ -VZ -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -VZ -fv -fv -fv -fv -fv -fv -fv -VZ -VZ -fv -fv -fv -VZ -VZ -fv -VZ -VZ -fv -fv -fv -fv -fv -fv -fv -fv -fv -fv -fv -fv -fv -fv -fv -fv -Wz -fv -fv -fv -fv -VZ -VZ -VZ -VZ -fv -fv -fv -VZ -VZ -fv -VZ -fv -fv -fv -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -fv -fv -VZ -VZ -VZ -VZ -fv -VZ -VZ -fv -fv -VZ -VZ -VZ -Wz -Wz -VZ -VZ -VZ -VZ -Wz -Wz -Wz -Wz -Wz -VZ -VZ -Wz -Wz -Wz -VZ -VZ -VZ -VZ -VZ -eh -VZ -VZ -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -"} -(49,1,1) = {" -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -VZ -fv -fv -fv -fv -fv -fv -VZ -VZ -fv -fv -fv -VZ -VZ -VZ -Wz -Wz -Wz -VZ -VZ -VZ -VZ -VZ -VZ -VZ -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -fv -fv -fv -fv -fv -fv -VZ -VZ -fv -VZ -VZ -VZ -VZ -VZ -fv -fv -fv -fv -fv -fv -fv -fv -fv -fv -fv -fv -fv -fv -fv -Wz -Wz -Wz -fv -fv -fv -fv -fv -fv -VZ -VZ -fv -fv -fv -fv -VZ -VZ -VZ -VZ -fv -fv -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -fv -fv -VZ -fv -VZ -VZ -VZ -VZ -VZ -fv -fv -VZ -VZ -VZ -Wz -Wz -VZ -VZ -VZ -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -VZ -VZ -VZ -VZ -VZ -VZ -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -"} -(50,1,1) = {" -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -VZ -fv -fv -fv -fv -fv -fv -VZ -VZ -fv -fv -fv -fv -VZ -VZ -Wz -Wz -VZ -VZ -VZ -VZ -VZ -VZ -VZ -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -fv -fv -fv -fv -fv -fv -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -fv -fv -fv -fv -fv -fv -fv -fv -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -VZ -fv -VZ -fv -VZ -VZ -VZ -VZ -VZ -VZ -fv -fv -fv -VZ -VZ -VZ -fv -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -fv -fv -fv -fv -fv -fv -fv -VZ -fv -fv -fv -VZ -VZ -VZ -Wz -VZ -VZ -VZ -VZ -VZ -VZ -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -VZ -VZ -VZ -VZ -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -"} -(51,1,1) = {" -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -VZ -VZ -fv -fv -fv -fv -fv -VZ -fv -fv -fv -fv -fv -fv -VZ -Wz -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -fv -fv -fv -fv -fv -VZ -VZ -VZ -VZ -fv -fv -VZ -VZ -fv -VZ -fv -fv -fv -fv -fv -fv -fv -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -fv -fv -fv -fv -fv -fv -VZ -VZ -fv -VZ -VZ -VZ -VZ -VZ -VZ -VZ -fv -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -fv -fv -fv -fv -fv -VZ -VZ -VZ -fv -fv -fv -fv -VZ -VZ -VZ -VZ -VZ -VZ -Wz -VZ -VZ -VZ -Wz -Wz -Wz -Wz -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -"} -(52,1,1) = {" -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -VZ -VZ -VZ -VZ -fv -VZ -fv -fv -VZ -fv -fv -fv -fv -fv -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -fv -VZ -VZ -VZ -fv -VZ -VZ -VZ -fv -fv -VZ -VZ -VZ -fv -fv -fv -fv -fv -fv -fv -fv -fv -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -fv -fv -fv -VZ -fv -fv -VZ -VZ -fv -fv -Hz -VZ -fv -fv -VZ -VZ -fv -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -fv -fv -fv -fv -VZ -VZ -VZ -VZ -VZ -fv -fv -fv -fv -VZ -VZ -VZ -VZ -Wz -Wz -Wz -VZ -VZ -VZ -Wz -Wz -Wz -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -"} -(53,1,1) = {" -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -fv -fv -fv -fv -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -VZ -fv -VZ -VZ -VZ -VZ -fv -VZ -VZ -fv -VZ -VZ -VZ -VZ -fv -fv -fv -fv -fv -fv -fv -fv -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -fv -fv -fv -fv -fv -fv -fv -VZ -fv -fv -fv -fv -fv -fv -VZ -fv -fv -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -fv -fv -fv -fv -fv -VZ -VZ -VZ -fv -fv -fv -fv -fv -VZ -VZ -VZ -Wz -Wz -Wz -VZ -VZ -VZ -VZ -VZ -Wz -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -"} -(54,1,1) = {" -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -VZ -VZ -VZ -VZ -VZ -fv -VZ -VZ -VZ -fv -fv -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -VZ -VZ -VZ -VZ -VZ -fv -fv -VZ -VZ -VZ -VZ -VZ -VZ -VZ -fv -fv -fv -fv -fv -fv -fv -fv -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -fv -fv -fv -fv -fv -VZ -VZ -VZ -VZ -fv -fv -fv -fv -fv -VZ -VZ -fv -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -fv -fv -VZ -VZ -fv -fv -VZ -VZ -fv -fv -fv -fv -fv -fv -VZ -VZ -VZ -Wz -Wz -VZ -Wz -Wz -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -"} -(55,1,1) = {" -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -VZ -VZ -VZ -VZ -VZ -fv -fv -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -Wz -VZ -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -VZ -VZ -fv -fv -fv -fv -VZ -VZ -VZ -VZ -fv -VZ -VZ -VZ -VZ -fv -fv -fv -fv -fv -fv -fv -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -fv -fv -fv -fv -fv -VZ -fv -Hz -VZ -VZ -fv -fv -fv -fv -VZ -VZ -fv -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -fv -fv -VZ -VZ -VZ -fv -VZ -VZ -VZ -fv -fv -fv -fv -fv -VZ -VZ -VZ -VZ -VZ -VZ -Wz -Wz -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -"} -(56,1,1) = {" -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -VZ -VZ -VZ -VZ -fv -fv -fv -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -VZ -VZ -VZ -VZ -fv -VZ -VZ -VZ -VZ -fv -fv -fv -VZ -VZ -VZ -fv -fv -fv -fv -fv -fv -fv -fv -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -fv -fv -fv -fv -fv -fv -fv -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -fv -fv -fv -fv -fv -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -fv -fv -VZ -fv -VZ -fv -VZ -VZ -VZ -VZ -VZ -fv -fv -fv -fv -VZ -VZ -VZ -VZ -Wz -Wz -Wz -Wz -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -"} -(57,1,1) = {" -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -Cr -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -VZ -VZ -VZ -fv -VZ -fv -fv -fv -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -fv -fv -fv -VZ -VZ -VZ -VZ -VZ -fv -fv -fv -fv -fv -VZ -fv -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -fv -fv -fv -fv -fv -VZ -fv -fv -fv -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -fv -fv -fv -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -fv -fv -fv -VZ -VZ -fv -VZ -VZ -VZ -VZ -VZ -VZ -fv -fv -fv -VZ -VZ -VZ -VZ -Wz -Wz -Wz -Wz -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -"} -(58,1,1) = {" -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -VZ -VZ -VZ -VZ -fv -fv -fv -fv -fv -fv -fv -fv -fv -fv -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -fv -fv -VZ -VZ -VZ -VZ -VZ -fv -fv -fv -fv -fv -fv -fv -fv -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -fv -fv -fv -fv -fv -fv -fv -fv -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -fv -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -fv -fv -VZ -VZ -fv -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -fv -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -"} -(59,1,1) = {" -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -VZ -VZ -VZ -VZ -VZ -fv -fv -fv -fv -fv -fv -fv -fv -fv -fv -fv -VZ -VZ -VZ -VZ -VZ -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -VZ -VZ -VZ -VZ -DE -DE -DE -DE -DE -VZ -VZ -fv -fv -VZ -VZ -VZ -VZ -VZ -fv -fv -fv -fv -fv -fv -fv -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -fv -fv -fv -fv -fv -fv -fv -fv -fv -fv -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -Wz -Wz -Wz -Wz -Wz -Wz -Wz -fv -fv -fv -fv -fv -fv -fv -VZ -VZ -VZ -VZ -fv -VZ -fv -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -"} -(60,1,1) = {" -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -VZ -VZ -VZ -VZ -VZ -fv -fv -Wz -Wz -Wz -Wz -Wz -Wz -fv -fv -fv -fv -VZ -VZ -VZ -VZ -Wz -VZ -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -VZ -VZ -VZ -VZ -VZ -VZ -DE -wJ -Up -xQ -DE -VZ -VZ -fv -fv -fv -fv -VZ -VZ -VZ -VZ -fv -fv -VZ -fv -fv -fv -fv -fv -fv -fv -fv -fv -fv -fv -Wz -Wz -Wz -fv -fv -fv -fv -fv -fv -fv -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -fv -VZ -VZ -fv -fv -fv -fv -fv -fv -fv -fv -VZ -VZ -VZ -VZ -VZ -VZ -VZ -fv -fv -fv -fv -fv -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -"} -(61,1,1) = {" -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -VZ -VZ -VZ -fv -fv -fv -Wz -Wz -Wz -Wz -Wz -Wz -fv -fv -fv -fv -fv -VZ -VZ -VZ -VZ -VZ -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -VZ -VZ -VZ -VZ -VZ -VZ -VZ -DE -XA -fr -YF -DE -VZ -VZ -VZ -fv -fv -fv -fv -VZ -VZ -VZ -VZ -VZ -fv -fv -fv -fv -fv -fv -fv -fv -fv -fv -fv -fv -fv -fv -fv -fv -fv -fv -fv -fv -fv -VZ -fv -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -fv -fv -fv -fv -fv -fv -fv -VZ -VZ -VZ -VZ -VZ -VZ -VZ -fv -fv -fv -fv -fv -fv -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -"} -(62,1,1) = {" -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -VZ -VZ -VZ -VZ -fv -fv -Wz -Wz -Wz -Wz -Wz -Wz -fv -fv -fv -fv -fv -fv -VZ -VZ -VZ -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -VZ -VZ -VZ -VZ -VZ -VZ -VZ -DE -ho -aO -PN -DE -VZ -VZ -VZ -VZ -fv -fv -fv -fv -fv -VZ -VZ -VZ -VZ -VZ -fv -fv -VZ -fv -VZ -VZ -VZ -VZ -VZ -fv -fv -fv -fv -VZ -VZ -fv -VZ -VZ -fv -fv -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -fv -fv -fv -fv -fv -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -"} -(63,1,1) = {" -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -VZ -VZ -fv -VZ -VZ -fv -Wz -Wz -Wz -Wz -Wz -Wz -fv -fv -fv -fv -fv -fv -VZ -VZ -VZ -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -DE -Wr -BA -zq -DE -VZ -VZ -VZ -VZ -VZ -fv -fv -fv -fv -fv -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -fv -VZ -VZ -VZ -fv -fv -fv -fv -fv -VZ -VZ -VZ -fv -fv -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -fv -fv -fv -fv -fv -fv -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -"} -(64,1,1) = {" -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -VZ -VZ -fv -fv -VZ -fv -Wz -Wz -Wz -Wz -Wz -Wz -fv -fv -fv -fv -fv -VZ -VZ -VZ -VZ -VZ -Wz -Wz -Wz -Wz -Wz -Wz -Wz -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -DE -Ff -DE -DE -DE -DE -DE -DE -DE -VZ -VZ -fv -fv -fv -fv -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -fv -VZ -VZ -VZ -VZ -VZ -VZ -VZ -fv -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -eh -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -fv -fv -fv -fv -fv -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -eh -VZ -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -"} -(65,1,1) = {" -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -VZ -VZ -fv -fv -VZ -fv -Wz -Wz -Wz -Wz -Wz -Wz -fv -fv -fv -fv -VZ -VZ -VZ -VZ -VZ -Wz -VZ -Wz -Wz -Wz -Wz -Wz -VZ -VZ -VZ -VZ -VZ -DE -DE -DE -DE -DE -DE -Lb -VO -uT -uT -uT -KP -WW -DE -VZ -VZ -VZ -fv -fv -fv -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -fv -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -tx -tx -eh -eh -eh -eh -VZ -VZ -eh -eh -eh -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -fv -fv -fv -fv -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -"} -(66,1,1) = {" -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -VZ -VZ -VZ -fv -fv -fv -Wz -Wz -Wz -Wz -Wz -Wz -fv -fv -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -Wz -VZ -VZ -Wz -VZ -VZ -VZ -VZ -VZ -VZ -VZ -DE -PY -LL -PY -PY -DE -cN -hb -sE -hb -hb -hQ -lb -DE -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -fv -fv -VZ -fv -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -fv -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -eh -tx -tx -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -"} -(67,1,1) = {" -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -VZ -VZ -VZ -fv -VZ -VZ -fv -Wz -Wz -Wz -Wz -Wz -Wz -fv -fv -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -tU -DE -NU -dm -dm -lj -DE -qS -wd -wd -wd -GO -sk -Uq -DE -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -fv -fv -fv -fv -fv -fv -VZ -VZ -fv -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -eh -eh -tx -tx -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -tx -tx -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -"} -(68,1,1) = {" -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -VZ -VZ -VZ -VZ -fv -fv -fv -fv -Wz -Wz -Wz -Wz -Wz -Wz -fv -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -ph -Rl -zI -NY -NY -NY -sb -gJ -Gt -Gt -Gt -Gt -cf -DH -DE -VZ -VZ -fv -fv -VZ -VZ -VZ -VZ -VZ -VZ -VZ -fv -VZ -VZ -VZ -fv -fv -fv -fv -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -eh -eh -eh -tx -tx -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -tx -tx -eh -eh -VZ -VZ -VZ -VZ -VZ -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -"} -(69,1,1) = {" -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -VZ -VZ -VZ -VZ -VZ -VZ -fv -fv -fv -Wz -Wz -Wz -Wz -Wz -Wz -fv -VZ -VZ -VZ -VZ -fv -fv -fv -fv -fv -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -tU -DE -NU -dm -dm -aB -DE -fK -la -Mq -Mq -XM -MD -GA -DE -VZ -fv -fv -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -eh -eh -VZ -VZ -VZ -fv -fv -fv -fv -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -eh -eh -eh -eh -tx -tx -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -tx -tx -eh -eh -eh -VZ -VZ -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -"} -(70,1,1) = {" -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -VZ -VZ -VZ -VZ -VZ -fv -fv -fv -fv -Wz -Wz -Wz -Wz -Wz -Wz -fv -fv -VZ -VZ -VZ -fv -fv -fv -fv -fv -fv -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -DE -QS -TX -Ht -QS -DE -WB -bA -bA -wi -Vz -Db -mv -DE -VZ -fv -fv -VZ -VZ -VZ -VZ -VZ -eh -eh -eh -eh -eh -eh -VZ -VZ -VZ -VZ -VZ -fv -fv -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -eh -eh -eh -eh -eh -tx -tx -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -tx -tx -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -"} -(71,1,1) = {" -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -VZ -VZ -VZ -VZ -VZ -fv -VZ -fv -fv -Wz -Wz -Wz -Wz -Wz -Wz -fv -fv -fv -VZ -VZ -VZ -fv -fv -fv -fv -fv -fv -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -DE -DE -DE -DE -DE -DE -GX -rb -hw -Aa -Vz -Db -ae -DE -VZ -VZ -fv -VZ -VZ -VZ -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -VZ -eh -eh -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -eh -eh -eh -eh -eh -eh -tx -tx -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -tx -tx -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -"} -(72,1,1) = {" -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -VZ -VZ -VZ -VZ -VZ -VZ -VZ -fv -fv -Wz -Wz -Wz -Wz -Wz -Wz -fv -fv -fv -fv -VZ -VZ -VZ -fv -fv -fv -fv -fv -fv -VZ -VZ -VZ -VZ -VZ -eh -eh -VZ -VZ -VZ -VZ -VZ -VZ -DE -DE -DE -DE -DE -UE -vY -EY -DE -eh -VZ -VZ -VZ -tx -tx -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -eh -VZ -VZ -eh -eh -eh -eh -eh -eh -eh -tx -tx -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -tx -tx -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -"} -(73,1,1) = {" -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -VZ -VZ -VZ -VZ -VZ -fv -VZ -fv -fv -fv -fv -fv -fv -fv -fv -fv -fv -fv -fv -fv -VZ -VZ -VZ -fv -fv -fv -fv -fv -VZ -VZ -VZ -VZ -eh -eh -eh -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -tU -DE -hi -tF -Wg -DE -aQ -VZ -eh -eh -tx -tx -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -tx -tx -eh -VZ -VZ -eh -eh -VZ -VZ -eh -VZ -eh -eh -eh -eh -eh -eh -eh -eh -tx -tx -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -tx -tx -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -"} -(74,1,1) = {" -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -VZ -VZ -VZ -VZ -VZ -VZ -VZ -fv -fv -fv -fv -fv -fv -VZ -fv -fv -fv -fv -fv -VZ -VZ -VZ -VZ -fv -fv -fv -fv -VZ -VZ -VZ -VZ -eh -eh -eh -eh -eh -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -MQ -hU -kD -ie -Hf -eh -eh -eh -eh -tx -tx -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -tx -tx -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -tx -tx -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -tx -tx -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -"} -(75,1,1) = {" -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -VZ -VZ -VZ -VZ -VZ -VZ -fv -VZ -fv -fv -fv -fv -fv -VZ -fv -fv -VZ -fv -fv -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -eh -eh -eh -eh -eh -eh -VZ -VZ -VZ -VZ -VZ -VZ -eh -MQ -hU -Db -lb -Hf -eh -eh -eh -eh -tx -tx -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -tx -tx -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -tx -tx -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -tx -tx -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -"} -(76,1,1) = {" -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -VZ -VZ -VZ -VZ -VZ -VZ -fv -VZ -VZ -fv -fv -VZ -fv -VZ -VZ -fv -fv -fv -fv -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -eh -eh -eh -eh -eh -eh -eh -eh -VZ -VZ -VZ -VZ -eh -eh -Hf -hU -Db -lb -Hf -eh -eh -eh -eh -tx -tx -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -tx -tx -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -tx -tx -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -tx -tx -eh -eh -eh -eh -eh -eh -eh -VZ -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -"} -(77,1,1) = {" -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -fv -fv -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -eh -eh -eh -eh -eh -eh -eh -eh -eh -VZ -tx -tx -eh -eh -eh -Hf -gZ -Db -lb -Hf -eh -eh -eh -eh -tx -tx -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -tx -tx -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -tx -tx -eh -eh -eh -eh -VZ -eh -eh -VZ -VZ -eh -eh -eh -tx -tx -eh -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -"} -(78,1,1) = {" -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -fv -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -tx -tx -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -tx -tx -eh -eh -eh -Hf -hU -Db -lb -Hf -eh -eh -eh -eh -tx -tx -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -tx -tx -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -tx -tx -eh -eh -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -eh -eh -tx -tx -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -"} -(79,1,1) = {" -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -eh -eh -eh -eh -tx -tx -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -tx -tx -eh -eh -eh -Hf -hU -Db -lb -Hf -eh -eh -eh -eh -tx -tx -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -tx -tx -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -tx -tx -eh -eh -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -"} -(80,1,1) = {" -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -tx -VZ -eh -eh -eh -eh -eh -eh -eh -tx -tx -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -tx -tx -eh -eh -eh -Hf -hU -Db -lb -Hf -eh -eh -eh -eh -tx -tx -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -tx -tx -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -VZ -tx -tx -eh -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -Wz -Wz -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -"} -(81,1,1) = {" -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -eh -tx -tx -eh -eh -eh -eh -eh -eh -eh -tx -tx -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -tx -tx -eh -eh -eh -Hf -UE -vY -lb -Hf -eh -eh -eh -eh -tx -tx -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -tx -tx -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -VZ -eh -VZ -VZ -VZ -tx -tx -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -Wz -Wz -Wz -Wz -VZ -VZ -VZ -VZ -VZ -VZ -VZ -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -"} -(82,1,1) = {" -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -VZ -VZ -VZ -VZ -VZ -VZ -VZ -eh -VZ -VZ -eh -eh -tx -tx -eh -eh -eh -eh -eh -eh -eh -tx -tx -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -tx -tx -eh -eh -eh -Hf -hU -Db -lb -Hf -eh -eh -eh -eh -tx -tx -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -VZ -VZ -eh -eh -eh -eh -tx -tx -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -fv -VZ -VZ -VZ -VZ -VZ -Wz -Wz -Wz -VZ -VZ -VZ -VZ -VZ -VZ -VZ -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -"} -(83,1,1) = {" -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -tx -tx -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -tx -tx -eh -eh -eh -eh -eh -eh -eh -tx -tx -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -tx -tx -eh -eh -eh -Hf -hU -Db -yN -Hf -eh -eh -eh -eh -tx -tx -eh -eh -eh -eh -eh -eh -eh -eh -VZ -VZ -VZ -VZ -VZ -VZ -eh -eh -tx -tx -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -VZ -VZ -VZ -VZ -VZ -fv -fv -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -fv -fv -fv -VZ -VZ -VZ -VZ -VZ -Wz -Wz -Wz -Wz -VZ -VZ -VZ -VZ -VZ -VZ -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -"} -(84,1,1) = {" -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -tx -tx -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -tx -tx -eh -eh -eh -eh -eh -eh -eh -tx -tx -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -tx -tx -eh -eh -eh -Hf -hU -Db -lb -Hf -eh -eh -eh -eh -tx -tx -eh -eh -eh -VZ -eh -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -eh -eh -eh -eh -eh -eh -eh -eh -eh -VZ -VZ -VZ -VZ -VZ -fv -fv -fv -fv -fv -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -fv -fv -fv -fv -fv -fv -VZ -VZ -VZ -VZ -Wz -Wz -Wz -VZ -VZ -VZ -VZ -VZ -VZ -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -"} -(85,1,1) = {" -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -tx -tx -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -tx -tx -eh -eh -eh -eh -eh -eh -eh -tx -tx -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -tx -tx -eh -eh -eh -Hf -hU -Db -lb -Hf -eh -eh -eh -eh -tx -tx -VZ -eh -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -eh -eh -eh -eh -eh -eh -eh -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -fv -fv -fv -fv -VZ -VZ -VZ -VZ -VZ -VZ -fv -fv -VZ -fv -fv -fv -fv -fv -fv -fv -fv -VZ -VZ -VZ -Wz -Wz -Wz -VZ -VZ -VZ -VZ -VZ -VZ -VZ -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -"} -(86,1,1) = {" -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -tx -tx -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -tx -tx -eh -eh -eh -eh -eh -eh -eh -tx -tx -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -tx -tx -eh -eh -eh -Hf -hU -Db -lb -Hf -eh -eh -VZ -eh -tx -tx -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -fv -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -eh -eh -eh -eh -eh -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -fv -fv -fv -fv -fv -fv -fv -VZ -fv -fv -fv -VZ -fv -fv -fv -fv -VZ -VZ -VZ -fv -VZ -VZ -VZ -VZ -Wz -Wz -Wz -VZ -VZ -VZ -VZ -VZ -VZ -VZ -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -"} -(87,1,1) = {" -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -tx -tx -eh -eh -eh -VZ -VZ -eh -VZ -eh -VZ -eh -tx -tx -eh -eh -eh -eh -eh -eh -eh -tx -tx -eh -eh -eh -eh -eh -eh -eh -eh -VZ -VZ -VZ -VZ -eh -VZ -tU -DE -Xu -Jb -Wg -DE -TT -eh -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -fv -fv -VZ -VZ -fv -fv -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -fv -VZ -VZ -VZ -VZ -VZ -fv -fv -fv -fv -fv -fv -fv -fv -fv -fv -VZ -fv -VZ -fv -VZ -VZ -VZ -VZ -fv -fv -VZ -VZ -VZ -VZ -Wz -Wz -Wz -VZ -VZ -VZ -VZ -VZ -VZ -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -"} -(88,1,1) = {" -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -tx -tx -eh -eh -VZ -eh -eh -VZ -VZ -VZ -VZ -VZ -VZ -VZ -eh -eh -eh -eh -eh -eh -eh -tx -tx -eh -eh -eh -eh -eh -eh -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -DE -hU -Db -lb -DE -VZ -VZ -VZ -VZ -VZ -VZ -DE -DE -DE -DE -DE -VZ -VZ -VZ -fv -fv -fv -VZ -VZ -VZ -fv -fv -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -fv -fv -Hz -VZ -VZ -VZ -fv -fv -fv -fv -fv -fv -fv -fv -fv -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -fv -VZ -VZ -VZ -VZ -Wz -Wz -Wz -Wz -VZ -VZ -VZ -VZ -VZ -VZ -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -"} -(89,1,1) = {" -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -tx -tx -eh -eh -eh -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -eh -eh -eh -eh -eh -tx -tx -eh -eh -eh -eh -eh -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -DE -hU -Db -EY -DE -VZ -VZ -VZ -VZ -VZ -VZ -DE -EH -WQ -vK -DE -VZ -VZ -fv -fv -fv -VZ -VZ -VZ -fv -fv -fv -fv -VZ -VZ -VZ -VZ -fv -fv -fv -fv -VZ -fv -VZ -fv -fv -fv -VZ -VZ -fv -VZ -VZ -fv -fv -fv -fv -VZ -fv -VZ -Hz -Hz -VZ -VZ -VZ -VZ -VZ -VZ -fv -fv -fv -VZ -VZ -VZ -VZ -VZ -VZ -VZ -Wz -Wz -Wz -VZ -VZ -VZ -VZ -VZ -VZ -VZ -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -"} -(90,1,1) = {" -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -tx -tx -eh -eh -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -eh -eh -tx -tx -eh -eh -eh -eh -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -DE -Pr -Ms -ie -DE -VZ -VZ -VZ -VZ -VZ -VZ -DE -vK -vK -EH -DE -VZ -VZ -VZ -fv -VZ -fv -VZ -VZ -fv -fv -fv -VZ -VZ -fv -fv -VZ -fv -VZ -fv -fv -fv -fv -fv -fv -fv -fv -fv -fv -fv -fv -VZ -fv -fv -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -fv -fv -VZ -fv -VZ -VZ -VZ -VZ -fv -VZ -VZ -VZ -Wz -Wz -Wz -VZ -VZ -VZ -VZ -VZ -VZ -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -"} -(91,1,1) = {" -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -tx -tx -eh -eh -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -DE -oR -Db -xL -WY -WY -WY -WY -WY -WY -WY -WY -tH -tH -DE -DE -DE -DE -VZ -VZ -fv -VZ -VZ -fv -fv -fv -VZ -VZ -VZ -fv -fv -VZ -VZ -VZ -VZ -Hz -fv -fv -fv -fv -fv -fv -fv -fv -fv -fv -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -fv -fv -fv -fv -VZ -fv -VZ -VZ -fv -fv -VZ -VZ -VZ -Wz -Wz -VZ -VZ -VZ -VZ -VZ -VZ -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -"} -(92,1,1) = {" -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -tx -tx -eh -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -IW -IW -IW -IW -IW -IW -IW -IW -Ye -Ye -Ye -Ye -IW -IW -VZ -VZ -VZ -VZ -VZ -DE -Qq -Db -lb -WY -ik -Cl -Mk -QW -aw -LX -WY -mX -uU -SV -zg -cy -DE -VZ -VZ -fv -VZ -VZ -fv -fv -VZ -fv -VZ -fv -fv -fv -VZ -VZ -VZ -VZ -VZ -VZ -fv -VZ -fv -fv -fv -fv -fv -fv -fv -fv -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -fv -fv -fv -fv -fv -fv -fv -fv -fv -fv -VZ -VZ -VZ -fv -fv -fv -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -"} -(93,1,1) = {" -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -tx -tx -eh -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -IW -FU -iv -my -IW -zF -hY -yC -ym -ym -ym -ym -Me -IW -VZ -VZ -VZ -VZ -VZ -DE -Xi -Of -Bm -Nu -Qv -Qv -kr -jw -sm -LX -WY -nm -vK -DZ -BN -BH -DE -fv -VZ -VZ -VZ -VZ -fv -VZ -fv -fv -fv -fv -fv -fv -fv -fv -VZ -VZ -fv -fv -VZ -VZ -VZ -VZ -fv -fv -fv -fv -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -fv -fv -fv -fv -fv -fv -fv -fv -fv -fv -fv -fv -VZ -VZ -VZ -fv -fv -fv -fv -VZ -VZ -VZ -VZ -VZ -VZ -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -"} -(94,1,1) = {" -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -tx -tx -eh -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -IW -AZ -Ds -ew -IW -ek -ym -JY -tw -tw -jH -ym -cw -IW -VZ -VZ -VZ -VZ -VZ -DE -Qq -Db -lb -WY -qe -jw -KZ -ix -fE -jw -Ea -nm -vK -vK -BN -rd -DE -VZ -VZ -fv -VZ -fv -fv -fv -fv -fv -fv -fv -fv -fv -fv -fv -fv -VZ -VZ -VZ -VZ -VZ -VZ -VZ -fv -fv -fv -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -fv -VZ -VZ -VZ -fv -fv -fv -fv -VZ -VZ -VZ -VZ -VZ -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -"} -(95,1,1) = {" -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -tx -tx -VZ -VZ -VZ -fv -fv -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -IW -IW -IW -vs -IW -hC -kf -JY -tw -tw -jH -ym -Uy -IW -VZ -VZ -VZ -VZ -VZ -DE -oR -Db -Vm -WY -AS -It -zw -Ni -Og -IT -WY -VA -vK -AX -DZ -dO -DE -VZ -fv -VZ -VZ -fv -VZ -fv -fv -fv -fv -fv -VZ -VZ -fv -fv -fv -fv -VZ -VZ -VZ -VZ -VZ -fv -fv -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -fv -fv -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -VZ -VZ -VZ -VZ -VZ -fv -fv -fv -fv -VZ -VZ -VZ -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -"} -(96,1,1) = {" -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -tx -VZ -VZ -VZ -VZ -fv -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -IW -an -ym -Ik -ym -ym -ZW -ym -ym -ym -ym -zJ -ac -IW -VZ -VZ -VZ -VZ -VZ -DE -Qq -Db -lb -WY -gB -fk -vC -LK -TD -lq -WY -oy -vK -vK -BN -cy -DE -VZ -VZ -VZ -VZ -fv -fv -fv -fv -VZ -fv -fv -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -fv -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -fv -VZ -VZ -VZ -VZ -fv -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -VZ -fv -VZ -VZ -VZ -VZ -fv -fv -fv -VZ -VZ -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -"} -(97,1,1) = {" -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -VZ -VZ -VZ -VZ -fv -fv -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -Hz -Ne -VZ -VZ -VZ -IW -Sa -ym -jh -UO -WU -zU -cp -xR -Wy -bH -aN -eG -DE -DE -DE -DE -DE -DE -DE -Qq -Db -lb -WY -WY -WY -zN -WY -WY -WY -WY -Dt -vK -vK -BN -BH -DE -VZ -VZ -fv -fv -fv -fv -VZ -VZ -fv -VZ -VZ -VZ -VZ -VZ -fv -VZ -VZ -VZ -fv -VZ -fv -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -fv -VZ -fv -VZ -VZ -fv -fv -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -VZ -VZ -VZ -VZ -VZ -fv -fv -fv -VZ -VZ -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -Pz -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -"} -(98,1,1) = {" -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -IW -Qx -PW -MI -ym -gr -IW -IW -IW -Bt -IW -IW -IW -DE -zk -LH -LH -LH -My -LH -UD -Db -Zg -LH -My -LH -py -LH -LH -ZO -DE -yo -vK -vK -BN -rd -DE -VZ -VZ -VZ -fv -VZ -fv -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -fv -VZ -fv -VZ -VZ -VZ -VZ -VZ -fv -fv -fv -VZ -VZ -VZ -VZ -VZ -fv -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -fv -VZ -VZ -VZ -VZ -VZ -fv -VZ -VZ -VZ -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -"} -(99,1,1) = {" -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -zG -VZ -VZ -VZ -VZ -VZ -zG -VZ -IW -IW -IW -IW -bf -IW -Pm -tP -wj -xz -hD -aD -Yq -bb -iI -TL -Mo -TL -TL -TL -ey -FE -TL -TL -TL -TL -Io -TL -nU -vJ -WJ -YJ -oJ -Rs -BN -KH -DE -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -fv -fv -fv -fv -fv -fv -fv -fv -fv -VZ -VZ -VZ -VZ -fv -fv -fv -fv -VZ -VZ -VZ -VZ -VZ -VZ -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -VZ -VZ -VZ -VZ -Hz -VZ -VZ -VZ -VZ -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -"} -(100,1,1) = {" -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -VZ -VZ -Xr -Xr -Xr -Xr -Xr -Xr -Xr -Xr -Xr -Xr -Xr -vv -vv -vv -vv -vv -Xr -Xr -Xr -cV -bu -NM -vy -Fk -Pm -tm -vw -uN -Wf -vw -Xm -ZV -hU -wd -ay -wd -GO -wd -wd -ay -wd -wd -wd -wd -ay -wd -cZ -lb -DE -Et -vK -tb -vK -jL -DE -VZ -VZ -VZ -VZ -fv -VZ -VZ -fv -VZ -fv -VZ -VZ -fv -fv -fv -fv -fv -fv -fv -VZ -fv -fv -VZ -fv -VZ -fv -fv -fv -fv -fv -fv -fv -fv -VZ -VZ -VZ -VZ -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -fv -VZ -VZ -Hz -VZ -VZ -VZ -VZ -VZ -VZ -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -"} -(101,1,1) = {" -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -VZ -VZ -Xr -yP -Yu -SS -uh -wp -Bl -Yu -Yu -SS -ty -Yu -Yu -Yu -Yu -Sx -Yu -cD -Xr -ff -Re -CH -jN -QX -Pm -xv -nW -nG -hk -fm -wv -DE -Wp -ud -og -rt -pb -pb -pb -jf -pb -pb -pb -pb -jf -pb -ri -EK -DE -wy -Fa -Qz -Gi -tX -DE -fv -fv -fv -VZ -VZ -VZ -VZ -fv -VZ -fv -fv -VZ -fv -fv -fv -fv -VZ -fv -fv -fv -fv -VZ -VZ -VZ -fv -VZ -VZ -fv -fv -VZ -VZ -VZ -fv -VZ -VZ -VZ -VZ -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -VZ -VZ -VZ -VZ -VZ -VZ -VZ -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -"} -(102,1,1) = {" -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -VZ -VZ -VZ -Xr -cE -yJ -vQ -vQ -vQ -uF -Ud -Ud -Ud -aE -Ud -Ud -Ud -Ud -NP -Yx -Yu -Xr -GV -QN -QN -gq -Uh -KJ -Bj -rR -gz -ea -Ad -rp -xC -xC -xC -xC -xC -xC -xC -xC -Lg -Lg -Lg -Lg -Lg -Lg -Lg -OW -Lg -Lg -dR -Pc -OP -Pc -QF -DE -fv -VZ -VZ -VZ -VZ -VZ -VZ -fv -VZ -VZ -fv -fv -fv -fv -fv -fv -fv -fv -fv -fv -VZ -fv -fv -VZ -VZ -VZ -fv -VZ -fv -fv -VZ -VZ -VZ -fv -VZ -VZ -VZ -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -fv -VZ -VZ -VZ -VZ -VZ -VZ -VZ -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -"} -(103,1,1) = {" -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -VZ -VZ -VZ -Xr -of -Wn -kU -Oz -Oz -RW -Oz -Oz -Oz -Oz -Oz -Oz -Oz -Oz -ql -Yb -en -Xr -qf -Yu -Yu -vB -IH -hX -RZ -vw -vw -ea -Zr -Zr -xC -ET -fM -xC -Wu -xC -Ls -hd -Lg -xk -gD -rz -NQ -Lg -zS -ps -Ln -Lg -Ha -Av -Ed -vK -SU -DE -VZ -VZ -fv -VZ -VZ -VZ -fv -fv -fv -fv -fv -fv -fv -fv -fv -fv -fv -fv -fv -fv -fv -fv -fv -VZ -fv -VZ -VZ -VZ -VZ -fv -Hz -VZ -VZ -fv -fv -VZ -VZ -VZ -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -fv -VZ -VZ -VZ -VZ -VZ -VZ -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -"} -(104,1,1) = {" -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -VZ -VZ -Xr -In -vB -fh -GM -GM -GM -GM -GM -GM -GM -GM -GM -GM -GM -jN -Yb -Yu -Xr -qf -Yu -Yu -vB -IH -Pm -Gw -MJ -FK -pu -KV -qW -xC -fM -fM -xC -Ss -xC -fM -fM -cg -HL -dk -HL -hN -Lg -Jn -Ck -yR -Lg -Ha -PS -RU -vK -UU -DE -VZ -fv -fv -VZ -VZ -fv -fv -fv -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -fv -fv -fv -fv -fv -VZ -fv -fv -VZ -fv -fv -fv -VZ -fv -VZ -fv -VZ -VZ -fv -VZ -VZ -VZ -Wz -VZ -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -fv -fv -VZ -VZ -VZ -VZ -VZ -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -"} -(105,1,1) = {" -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -VZ -VZ -VZ -Xr -Yu -vB -fh -GM -GM -GM -GM -GM -GM -GM -GM -GM -GM -GM -jN -Yb -Wo -Xr -vH -KK -Yu -vB -IC -Pm -Pm -Pm -Pm -lw -Pm -Pm -xC -xC -Ss -xC -fM -fM -fM -fM -Lg -LU -Jv -Km -hN -Lg -Jn -VY -Ub -Lg -DE -DE -DE -DE -DE -DE -fv -fv -VZ -VZ -fv -fv -fv -fv -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -fv -fv -fv -fv -fv -fv -fv -fv -fv -fv -fv -fv -fv -fv -fv -fv -fv -VZ -fv -VZ -VZ -VZ -Wz -VZ -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -fv -Hz -VZ -VZ -VZ -VZ -VZ -VZ -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -"} -(106,1,1) = {" -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -VZ -VZ -VZ -VZ -Xr -VL -uY -fh -GM -GM -GM -GM -GM -GM -GM -GM -GM -GM -GM -jN -lz -vQ -Hh -LR -LT -vQ -jP -MK -Pm -vx -XW -sz -Mb -ck -ou -xC -fM -fM -fM -fM -fM -fM -BE -Lg -Lg -eV -Lg -Lg -Lg -Jn -VY -xb -Lg -VZ -fv -VZ -VZ -VZ -VZ -fv -VZ -VZ -fv -fv -fv -VZ -fv -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -fv -fv -fv -fv -fv -fv -fv -fv -fv -fv -fv -fv -fv -fv -fv -fv -fv -VZ -fv -VZ -VZ -VZ -Wz -VZ -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -fv -fv -VZ -VZ -VZ -VZ -VZ -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -"} -(107,1,1) = {" -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -VZ -VZ -VZ -Xr -VL -uY -fh -GM -GM -GM -GM -GM -MN -GM -GM -GM -GM -GM -jN -Sf -Qc -PA -pL -Qc -Qc -ma -OQ -Pm -Oq -Ng -UC -Mb -Pg -Ot -xC -fX -fM -CP -CM -yK -yK -yK -SX -od -kO -cM -pB -hr -AN -FS -RB -Lg -VZ -fv -fv -VZ -VZ -fv -fv -VZ -VZ -VZ -fv -VZ -fv -fv -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -fv -fv -fv -VZ -fv -fv -fv -fv -fv -fv -fv -fv -fv -fv -fv -fv -fv -VZ -fv -fv -VZ -VZ -VZ -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -fv -fv -fv -VZ -VZ -VZ -VZ -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -"} -(108,1,1) = {" -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -VZ -VZ -VZ -VZ -Xr -Yu -vB -fh -GM -GM -GM -GM -GM -GM -GM -GM -GM -GM -GM -jN -Yb -Yu -Xr -yQ -rj -rj -YE -Xz -eq -am -hp -aq -tn -Pg -lD -xC -UA -Qs -NW -TH -fM -fM -fM -Lg -bQ -ju -Cz -Vj -SM -SM -Jd -pz -Lg -VZ -fv -fv -VZ -VZ -VZ -VZ -fv -VZ -fv -fv -fv -fv -Fl -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -fv -fv -fv -VZ -fv -fv -fv -fv -VZ -fv -fv -fv -fv -fv -fv -fv -fv -fv -VZ -VZ -VZ -VZ -VZ -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -fv -VZ -VZ -VZ -VZ -VZ -VZ -VZ -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -"} -(109,1,1) = {" -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -ke -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -VZ -VZ -VZ -Xr -In -vB -fh -GM -GM -GM -GM -GM -GM -GM -GM -GM -GM -GM -jN -Yb -Yu -Xr -Sq -Oz -Oz -Ru -nu -QU -mS -zB -XQ -mS -mn -vX -DL -Kq -mJ -vO -Bq -xC -Ss -xC -Lg -yB -Cm -hP -Rk -JM -IB -gE -RI -Lg -VZ -VZ -fv -fv -VZ -VZ -VZ -VZ -VZ -fv -fv -fv -fv -fv -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -fv -VZ -fv -fv -fv -fv -fv -fv -fv -fv -fv -fv -fv -fv -fv -fv -VZ -fv -VZ -VZ -VZ -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -fv -VZ -fv -VZ -VZ -VZ -VZ -VZ -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -"} -(110,1,1) = {" -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -VZ -VZ -VZ -Xr -of -Wn -SP -QN -QN -QN -QN -QN -QN -QN -QN -QN -QN -QN -LW -Yb -en -Xr -sv -Yu -Yu -Fo -IH -Pm -Pm -Pm -Pm -Pm -HZ -Pm -xC -ZA -Ft -fM -jz -xC -fM -fM -Lg -AT -Mi -Qf -gg -VG -OA -Fu -DT -Lg -VZ -VZ -fv -fv -VZ -VZ -VZ -fv -VZ -fv -fv -fv -fv -fv -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -fv -fv -fv -fv -fv -fv -fv -fv -fv -fv -fv -fv -fv -fv -fv -VZ -fv -fv -VZ -VZ -VZ -VZ -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -fv -fv -fv -VZ -VZ -VZ -VZ -eh -VZ -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -"} -(111,1,1) = {" -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -VZ -VZ -VZ -VZ -Xr -EN -AG -vQ -vQ -wT -vQ -vQ -vQ -vQ -DQ -vQ -vQ -vQ -vQ -zv -tg -yt -Xr -qf -Yu -Yu -wK -IC -Pm -Oc -kq -LF -Mr -IL -HW -xC -Ic -jo -Zm -XX -xC -fM -ZD -Lg -fj -tS -yx -Qd -At -BT -DU -sn -Lg -VZ -VZ -fv -fv -fv -fv -VZ -VZ -fv -VZ -fv -VZ -VZ -fv -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -fv -fv -fv -fv -fv -fv -Wz -Wz -Wz -Wz -Wz -Wz -Wz -fv -fv -fv -fv -VZ -fv -VZ -VZ -VZ -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -fv -VZ -fv -VZ -VZ -VZ -VZ -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -"} -(112,1,1) = {" -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -VZ -VZ -Xr -kN -Yu -Oz -Oz -bF -Oz -Lt -RJ -fd -SN -Yu -Yu -Yu -Yu -pI -Yu -Yu -Xr -dT -CG -bh -sx -Fp -Pm -Oc -Qj -wF -wF -yI -fp -xC -xC -xC -xC -xC -xC -xC -xC -Lg -Lg -Lg -Lg -Lg -OW -Lg -Lg -Lg -Lg -VZ -VZ -fv -fv -fv -fv -VZ -VZ -fv -fv -fv -fv -fv -VZ -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -fv -VZ -fv -fv -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -fv -fv -fv -fv -VZ -fv -Hz -VZ -VZ -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -fv -fv -VZ -VZ -VZ -VZ -VZ -VZ -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -"} -(113,1,1) = {" -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -VZ -VZ -Xr -Xr -Xr -pj -pj -Lh -pj -Xr -Xr -Xr -Xr -vv -vv -vv -vv -vv -Xr -Xr -Xr -jD -jD -jD -AY -jD -Pm -Oc -jR -zd -ap -yi -jU -fn -mZ -Ow -Mg -HJ -XS -Pm -Lg -Ai -pB -hr -hr -hr -ps -hr -QE -tz -Lg -VZ -VZ -fv -fv -fv -fv -fv -VZ -fv -fv -fv -fv -fv -fv -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -fv -fv -VZ -fv -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -fv -fv -fv -fv -VZ -fv -VZ -VZ -VZ -VZ -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -fv -VZ -VZ -VZ -VZ -VZ -VZ -VZ -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -"} -(114,1,1) = {" -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -VZ -VZ -VZ -Xr -Cv -Cv -Cv -hZ -NV -wn -Xr -VZ -VZ -fC -VZ -VZ -VZ -VZ -VZ -fC -VZ -VZ -jD -BX -Be -le -vc -Pm -Pm -Pm -Pm -Kx -Pm -Pm -Pm -pD -wF -NX -DR -Vc -Pm -Lg -hg -aU -hx -hx -Wc -Bc -hx -fP -YQ -Lg -VZ -VZ -VZ -fv -fv -VZ -fv -fv -fv -VZ -fv -fv -fv -fv -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -fv -fv -fv -fv -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -fv -fv -fv -VZ -VZ -fv -VZ -VZ -VZ -VZ -VZ -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -"} -(115,1,1) = {" -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -VZ -VZ -Xr -hJ -hZ -hZ -Am -mk -gw -Xr -VZ -VZ -Hz -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -JE -zW -Be -Ca -sR -Pm -Pm -Pm -TV -Gl -Yd -Pm -Pm -yV -lV -WX -nN -VB -Pm -Lg -Bg -Il -Rb -Rf -br -Oo -PU -Lc -iY -Lg -VZ -VZ -VZ -VZ -fv -VZ -VZ -fv -VZ -VZ -VZ -VZ -fv -fv -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -fv -VZ -VZ -fv -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -fv -fv -fv -VZ -VZ -VZ -fv -VZ -VZ -VZ -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -"} -(116,1,1) = {" -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -VZ -VZ -Xr -aR -aR -aR -NI -KW -Cv -Xr -VZ -VZ -VZ -VZ -VZ -Hz -VZ -VZ -VZ -VZ -VZ -Oy -Xc -Be -Tj -kF -Pm -Pm -Pm -ai -Gl -bL -Pm -Pm -ad -wF -wF -Ya -dW -Pm -Rd -pV -Rd -Rd -Rd -dq -dq -dq -dq -wz -dq -VZ -fv -VZ -VZ -VZ -VZ -VZ -fv -VZ -fv -fv -fv -VZ -VZ -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -fv -fv -fv -fv -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -fv -fv -VZ -fv -VZ -VZ -fv -VZ -VZ -VZ -VZ -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -fv -fv -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -"} -(117,1,1) = {" -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -VZ -VZ -VZ -Xr -Xr -Xr -Xr -Xr -Xr -Xr -Xr -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -Oy -Jy -tW -QA -ZQ -Pm -Pm -Pm -nQ -Qp -Yd -Pm -Pm -Pm -Vk -wF -yI -GL -Pm -Rd -RP -oF -Yw -Mx -dq -uZ -Tc -WR -io -dq -VZ -fv -VZ -VZ -VZ -VZ -VZ -fv -fv -fv -fv -fv -VZ -VZ -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -fv -fv -fv -fv -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -fv -fv -VZ -fv -fv -VZ -fv -VZ -VZ -VZ -VZ -Wz -Wz -Wz -Wz -Wz -Wz -Wz -fv -fv -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -"} -(118,1,1) = {" -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -CE -CE -Gb -Gb -Gb -Gb -Gb -Gb -Gb -Gb -Oy -jD -jD -jD -jD -Pm -Pm -Pm -Pm -xm -Pm -Pm -Pm -gt -eL -lV -QK -GL -Pm -Rd -Xt -dZ -qB -nz -dq -Qo -LD -OV -rN -dq -VZ -fv -fv -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -fv -VZ -fv -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -fv -fv -fv -fv -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -fv -fv -fv -fv -fv -VZ -fv -VZ -VZ -VZ -Hz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -fv -fv -fv -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -"} -(119,1,1) = {" -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -CE -Ri -LO -LO -LO -LO -LO -LO -LO -LO -SJ -Da -LO -LO -LO -LO -LO -LO -fz -PP -LO -nT -Pm -gt -EJ -Kd -az -wF -Pm -Rd -Vr -Fw -eF -sQ -dq -if -gM -Nz -LZ -dq -VZ -VZ -fv -fv -VZ -VZ -VZ -VZ -VZ -VZ -VZ -fv -fv -VZ -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -fv -fv -fv -fv -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -fv -VZ -fv -VZ -fv -VZ -VZ -fv -VZ -VZ -VZ -VZ -Wz -Wz -Wz -Wz -Wz -Wz -fv -fv -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -"} -(120,1,1) = {" -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -CE -fe -rH -rH -rH -rH -rH -rH -rH -rH -rH -rH -rH -rH -rH -rH -rH -rH -rH -rH -rH -fe -Pm -Pm -Pm -Pm -Pm -Pm -Pm -Rd -Rd -Rd -Rd -Rd -dq -dq -dq -dq -dq -dq -VZ -VZ -VZ -fv -VZ -VZ -VZ -VZ -VZ -fv -VZ -fv -fv -VZ -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -fv -fv -fv -fv -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -fv -fv -fv -fv -fv -VZ -VZ -fv -VZ -VZ -VZ -VZ -Wz -Wz -Wz -Wz -Wz -Wz -fv -fv -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -"} -(121,1,1) = {" -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -CE -CE -CE -lA -SJ -SJ -SJ -SJ -SJ -SJ -SJ -SJ -SJ -SJ -SJ -SJ -SJ -SJ -SJ -SJ -SJ -SJ -SJ -eM -CE -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -fv -VZ -VZ -VZ -VZ -VZ -fv -fv -VZ -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -fv -fv -fv -fv -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -fv -fv -VZ -VZ -fv -fv -VZ -VZ -VZ -VZ -VZ -VZ -Wz -Wz -Wz -Wz -Wz -kE -fv -VZ -VZ -VZ -VZ -VZ -fv -fv -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -"} -(122,1,1) = {" -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -CE -wV -wV -fe -rH -rH -rH -rH -rH -rH -rH -rH -rH -rH -rH -rH -rH -rH -rH -rH -rH -rH -rH -fe -CE -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -fv -fv -fv -VZ -VZ -VZ -fv -fv -VZ -fv -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -fv -fv -fv -fv -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -fv -fv -VZ -VZ -VZ -VZ -fv -fv -VZ -fv -VZ -VZ -VZ -Wz -Wz -Wz -Wz -Wz -Wz -fv -VZ -VZ -VZ -VZ -fv -fv -fv -VZ -VZ -VZ -VZ -VZ -VZ -VZ -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -"} -(123,1,1) = {" -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -VZ -VZ -VZ -VZ -VZ -VZ -VZ -CE -wV -wV -lA -SJ -SJ -SJ -SJ -SJ -SJ -SJ -SJ -SJ -SJ -SJ -SJ -SJ -SJ -SJ -SJ -SJ -SJ -SJ -eM -CE -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -fv -VZ -VZ -VZ -VZ -VZ -fv -fv -fv -fv -VZ -VZ -VZ -VZ -fv -fv -VZ -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -VZ -VZ -fv -VZ -VZ -VZ -fv -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -fv -fv -VZ -fv -VZ -VZ -fv -fv -fv -fv -VZ -VZ -VZ -VZ -Wz -Wz -Wz -Wz -Wz -VZ -VZ -VZ -VZ -fv -fv -fv -fv -VZ -VZ -VZ -VZ -VZ -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -"} -(124,1,1) = {" -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -VZ -VZ -VZ -VZ -VZ -VZ -QR -wV -Ri -OC -rH -rH -rH -rH -rH -rH -rH -rH -rH -rH -rH -rH -rH -rH -rH -rH -rH -rH -rH -fe -CE -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -fv -fv -fv -fv -fv -VZ -VZ -VZ -VZ -fv -fv -fv -fv -fv -fv -VZ -Hz -VZ -VZ -fv -fv -fv -fv -fv -fv -fv -fv -fv -fv -VZ -VZ -fv -VZ -VZ -VZ -fv -Wz -Wz -Wz -Wz -Wz -Wz -Wz -Wz -fv -fv -fv -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -Wz -Wz -Wz -Wz -Wz -VZ -VZ -VZ -VZ -fv -fv -fv -fv -VZ -VZ -VZ -VZ -VZ -VZ -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -"} -(125,1,1) = {" -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -VZ -VZ -VZ -VZ -VZ -VZ -VZ -QR -wV -nv -lA -SJ -SJ -SJ -SJ -SJ -SJ -SJ -SJ -SJ -SJ -SJ -SJ -SJ -SJ -SJ -SJ -SJ -SJ -SJ -eM -CE -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -fv -fv -fv -fv -fv -fv -VZ -VZ -VZ -VZ -fv -fv -fv -fv -fv -fv -fv -Hz -VZ -VZ -VZ -VZ -fv -fv -VZ -VZ -fv -VZ -VZ -fv -fv -VZ -VZ -fv -fv -fv -fv -fv -fv -fv -fv -fv -fv -fv -fv -fv -fv -fv -VZ -fv -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -fv -fv -fv -VZ -VZ -VZ -VZ -fv -fv -fv -fv -fv -VZ -VZ -VZ -VZ -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -"} -(126,1,1) = {" -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -VZ -VZ -VZ -VZ -VZ -VZ -CE -wV -dQ -rQ -rH -rH -rH -rH -rH -rH -rH -rH -rH -rH -rH -rH -rH -rH -rH -rH -rH -rH -rH -fe -CE -VZ -VZ -VZ -VZ -VZ -VZ -VZ -fv -fv -fv -fv -fv -fv -fv -VZ -VZ -VZ -VZ -fv -fv -fv -fv -fv -fv -fv -VZ -VZ -VZ -VZ -VZ -fv -fv -fv -VZ -fv -fv -VZ -fv -VZ -VZ -fv -VZ -VZ -VZ -VZ -VZ -VZ -fv -fv -VZ -VZ -VZ -VZ -fv -VZ -VZ -fv -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -fv -fv -fv -VZ -VZ -VZ -VZ -VZ -fv -fv -fv -fv -VZ -VZ -VZ -VZ -VZ -VZ -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -"} -(127,1,1) = {" -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -VZ -VZ -VZ -VZ -VZ -CE -wV -wV -lA -SJ -SJ -SJ -SJ -SJ -SJ -SJ -SJ -SJ -SJ -SJ -SJ -SJ -SJ -SJ -SJ -SJ -SJ -SJ -eM -CE -VZ -VZ -VZ -VZ -VZ -Hz -fv -fv -fv -fv -fv -fv -fv -VZ -VZ -VZ -VZ -fv -fv -fv -fv -fv -fv -fv -VZ -VZ -VZ -VZ -VZ -VZ -VZ -fv -VZ -fv -VZ -fv -fv -VZ -VZ -fv -VZ -fv -VZ -VZ -fv -VZ -VZ -VZ -VZ -fv -fv -fv -fv -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -fv -fv -fv -fv -fv -VZ -VZ -VZ -VZ -VZ -VZ -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -"} -(128,1,1) = {" -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -VZ -VZ -VZ -VZ -CE -wV -wV -fe -rH -rH -rH -rH -rH -rH -rH -rH -rH -rH -rH -rH -rH -rH -rH -rH -rH -rH -rH -fe -CE -VZ -VZ -VZ -VZ -VZ -VZ -fv -fv -fv -fv -fv -fv -Hz -VZ -VZ -VZ -fv -fv -fv -fv -fv -fv -fv -fv -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -fv -fv -fv -fv -fv -fv -VZ -fv -VZ -VZ -fv -VZ -VZ -VZ -VZ -fv -VZ -fv -fv -VZ -VZ -fv -fv -VZ -VZ -VZ -VZ -Hz -Hz -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -fv -fv -fv -fv -VZ -VZ -VZ -VZ -VZ -VZ -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -"} -(129,1,1) = {" -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -VZ -VZ -VZ -CE -CE -CE -lA -SJ -SJ -SJ -SJ -SJ -SJ -SJ -SJ -SJ -SJ -SJ -SJ -SJ -SJ -SJ -SJ -SJ -SJ -SJ -eM -CE -VZ -VZ -VZ -VZ -VZ -VZ -fv -fv -fv -VZ -VZ -VZ -VZ -VZ -VZ -VZ -fv -fv -fv -fv -fv -fv -fv -fv -VZ -VZ -VZ -VZ -VZ -VZ -VZ -fv -VZ -VZ -fv -fv -fv -VZ -fv -fv -fv -VZ -fv -VZ -VZ -VZ -fv -fv -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -fv -fv -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -fv -VZ -VZ -VZ -fv -fv -fv -VZ -VZ -VZ -VZ -VZ -VZ -VZ -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -"} -(130,1,1) = {" -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -VZ -VZ -VZ -VZ -CE -fe -rH -rH -rH -rH -rH -rH -rH -rH -rH -rH -rH -rH -rH -rH -rH -rH -rH -rH -rH -fe -CE -VZ -VZ -VZ -VZ -VZ -VZ -fv -fv -fv -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -fv -fv -fv -fv -fv -fv -fv -VZ -VZ -VZ -VZ -VZ -VZ -VZ -fv -VZ -VZ -VZ -fv -fv -fv -fv -fv -fv -fv -fv -VZ -fv -fv -fv -fv -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -fv -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -fv -fv -VZ -VZ -VZ -VZ -fv -fv -VZ -VZ -VZ -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -"} -(131,1,1) = {" -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -VZ -VZ -VZ -CE -dQ -ID -ID -ID -ID -ID -ID -ID -ID -ID -ID -ID -ID -ID -ID -ID -ID -ID -ID -ID -Zl -CE -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -eh -VZ -VZ -VZ -VZ -VZ -VZ -fv -fv -fv -fv -fv -fv -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -fv -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -fv -fv -fv -fv -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -fv -fv -fv -fv -fv -VZ -VZ -VZ -fv -fv -VZ -VZ -VZ -VZ -VZ -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -"} -(132,1,1) = {" -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -VZ -VZ -CE -CE -CE -CE -CE -CE -CE -CE -CE -CE -CE -CE -CE -CE -CE -CE -CE -CE -CE -CE -CE -CE -CE -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -eh -eh -eh -eh -VZ -VZ -VZ -VZ -fv -fv -fv -fv -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -fv -fv -fv -VZ -VZ -VZ -VZ -VZ -VZ -fv -fv -fv -fv -fv -fv -fv -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -"} -(133,1,1) = {" -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -eh -VZ -VZ -VZ -VZ -VZ -eh -eh -eh -eh -eh -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -fv -fv -fv -VZ -fv -fv -fv -fv -VZ -VZ -fv -fv -fv -fv -fv -fv -fv -fv -fv -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -"} -(134,1,1) = {" -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -eh -eh -eh -VZ -VZ -VZ -VZ -eh -eh -eh -eh -eh -eh -eh -eh -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -eh -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -fv -fv -fv -fv -fv -fv -fv -fv -fv -fv -fv -fv -fv -fv -fv -fv -fv -fv -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -"} -(135,1,1) = {" -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -eh -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -eh -eh -VZ -eh -VZ -VZ -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -VZ -VZ -eh -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -eh -eh -eh -eh -eh -eh -eh -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -fv -fv -fv -fv -fv -fv -fv -fv -fv -fv -fv -fv -fv -fv -fv -fv -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -"} -(136,1,1) = {" -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -eh -eh -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -eh -eh -eh -VZ -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -fv -fv -fv -fv -fv -fv -fv -fv -fv -fv -fv -fv -fv -fv -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -"} -(137,1,1) = {" -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -eh -eh -eh -eh -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -fv -fv -fv -fv -fv -fv -fv -fv -fv -fv -fv -fv -fv -fv -VZ -VZ -VZ -VZ -VZ -VZ -VZ -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -"} -(138,1,1) = {" -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -VZ -VZ -VZ -eh -eh -eh -eh -eh -eh -eh -eh -eh -VZ -VZ -VZ -VZ -VZ -VZ -VZ -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -fv -fv -fv -fv -fv -fv -fv -fv -fv -fv -fv -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -"} -(139,1,1) = {" -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -VZ -VZ -VZ -VZ -VZ -VZ -VZ -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -fv -fv -fv -fv -fv -fv -fv -fv -fv -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -"} -(140,1,1) = {" -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -VZ -VZ -VZ -VZ -VZ -VZ -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -VZ -eh -VZ -VZ -eh -VZ -VZ -VZ -VZ -VZ -VZ -VZ -fv -fv -fv -fv -fv -fv -VZ -VZ -VZ -VZ -VZ -VZ -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -"} -(141,1,1) = {" -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -VZ -VZ -VZ -VZ -VZ -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -VZ -eh -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -VZ -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -"} -(142,1,1) = {" -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -VZ -VZ -VZ -VZ -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -"} -(143,1,1) = {" -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -VZ -VZ -VZ -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -"} -(144,1,1) = {" -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -VZ -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -"} -(145,1,1) = {" -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -"} -(146,1,1) = {" -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -"} -(147,1,1) = {" -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -"} -(148,1,1) = {" -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -"} -(149,1,1) = {" -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -"} -(150,1,1) = {" -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -eh -"} diff --git a/maps/away/mininghome/onmob_icons.dmi b/maps/away/mininghome/onmob_icons.dmi deleted file mode 100644 index 38d55a906194c..0000000000000 Binary files a/maps/away/mininghome/onmob_icons.dmi and /dev/null differ diff --git a/maps/away/miningstation/miningstation.dm b/maps/away/miningstation/miningstation.dm deleted file mode 100644 index aaf89762a63ba..0000000000000 --- a/maps/away/miningstation/miningstation.dm +++ /dev/null @@ -1,155 +0,0 @@ -#include "miningstation_areas.dm" - - -/obj/effect/overmap/visitable/sector/miningstation - name = "Orbital Mining Station" - desc = "An orbital Mining Station bearing authentication codes from Grayson Mining Industries, sensors show inconsistant lifesigns aboard the station. It is emitting a weak signal on a public frequency, with no other discernible radio traffic." - icon_state = "object" - known = FALSE - initial_generic_waypoints = list( - "nav_miningstation_hangar", - "nav_miningstation_exterior", - ) - -/datum/map_template/ruin/away_site/miningstation - name = "Mining Station" - id = "awaysite_miningstation" - description = "An orbital Mining Station bearing authentication codes from Grayson Mining Industries, sensors show inconsistant lifesigns aboard the station." - suffixes = list("miningstation/miningstation.dmm") - spawn_cost = 1 - area_usage_test_exempted_root_areas = list(/area/miningstation) - -/obj/effect/shuttle_landmark/nav_miningstation/hangar - name = "Hangar" - landmark_tag = "nav_miningstation_hangar" - base_area = /area/miningstation/hangar - base_turf = /turf/simulated/floor/plating - -/obj/effect/shuttle_landmark/nav_miningstation/exterior - name = "Near the orbital station" - landmark_tag = "nav_miningstation_exterior" - - -///////////////////////////////////crew -/decl/hierarchy/outfit/corpse - hierarchy_type = /decl/hierarchy/outfit/corpse - -/decl/hierarchy/outfit/corpse/miningstation - hierarchy_type = /decl/hierarchy/outfit/corpse/miningstation - -/obj/effect/landmark/corpse/miningstation/deadminer - name = "Dead miner" - corpse_outfits = list(/decl/hierarchy/outfit/miningstation) - hair_styles_per_species = list(SPECIES_HUMAN = list("cia")) - hair_colors_per_species = list(SPECIES_HUMAN = list("#523d28")) - genders_per_species = list(SPECIES_HUMAN = list(MALE)) - -/decl/hierarchy/outfit/miningstation - name = OUTFIT_JOB_NAME ("Grayson Engineer") - uniform = /obj/item/clothing/under/hazard - suit = /obj/item/clothing/suit/storage/hazardvest - shoes = /obj/item/clothing/shoes/jackboots - gloves = /obj/item/clothing/gloves/thick/duty - head = /obj/item/clothing/head/hardhat/orange - mask = /obj/item/clothing/mask/gas - glasses = /obj/item/clothing/glasses/welding - -/obj/effect/landmark/corpse/miningstation/deadminerf - name = "Dead miner" - corpse_outfits = list(/decl/hierarchy/outfit/miningstation) - hair_styles_per_species = list(SPECIES_HUMAN = list("Flaired Hair")) - hair_colors_per_species = list(SPECIES_HUMAN = list("#523d28")) - genders_per_species = list(SPECIES_HUMAN = list(FEMALE)) - -/obj/effect/landmark/corpse/miningstation/deadminersuit - name = "Dead miner suit" - corpse_outfits = list(/decl/hierarchy/outfit/corpse/miningstation/deadminersuit) - hair_styles_per_species = list(SPECIES_HUMAN = list("cia")) - hair_colors_per_species = list(SPECIES_HUMAN = list("#523d28")) - genders_per_species = list(SPECIES_HUMAN = list(MALE)) - -/decl/hierarchy/outfit/corpse/miningstation/deadminersuit - name = OUTFIT_JOB_NAME ("Grayson Miner Suit") - uniform = /obj/item/clothing/under/hazard - suit = /obj/item/clothing/suit/space/void/mining/alt - shoes = /obj/item/clothing/shoes/jackboots - gloves = /obj/item/clothing/gloves/thick/duty - head = /obj/item/clothing/head/helmet/space/void/mining/alt - mask = /obj/item/clothing/mask/gas - glasses = /obj/item/clothing/glasses/welding - -/obj/effect/landmark/corpse/miningstation/deadmineroveralls - name = "Dead Miner" - corpse_outfits = list(/decl/hierarchy/outfit/corpse/miningstation/deadmineroveralls) - hair_styles_per_species = list(SPECIES_HUMAN = list("cia")) - hair_colors_per_species = list(SPECIES_HUMAN = list("#523d28")) - genders_per_species = list(SPECIES_HUMAN = list(MALE)) - -/obj/effect/landmark/corpse/miningstation/deadmineroverallsf - name = "Dead miner" - corpse_outfits = list(/decl/hierarchy/outfit/corpse/miningstation/deadmineroveralls) - hair_styles_per_species = list(SPECIES_HUMAN = list("Flaired Hair")) - hair_colors_per_species = list(SPECIES_HUMAN = list("#523d28")) - genders_per_species = list(SPECIES_HUMAN = list(FEMALE)) - -/decl/hierarchy/outfit/corpse/miningstation/deadmineroveralls - name = OUTFIT_JOB_NAME ("Grayson Miner Overalls") - uniform = /obj/item/clothing/under/grayson - shoes = /obj/item/clothing/shoes/jackboots - gloves = /obj/item/clothing/gloves/thick/duty - head = /obj/item/clothing/head/welding - -////////////////////////////Notes and papers - -/obj/item/paper/miner_note_1 - name = "Invoice" - info = {" -
              Grayson Industries
              -
              Supply department
              - A new supply of mechs have arrived today. We'll need to have them signed off and inventoried by the end of the night. Grayson doesn't like it when we daddle like that. Remind Lenny that he needs to do it, damn bastard is probably drunk but he can get it done if you push him hard enough. - "} - -/obj/item/paper/miner_note_2 - name = "Headquarters Invoice" - info = {" -
              Grayson Industries
              -
              Headquarters, Financial Department
              - Quarterly income from this station has been well above projections. Well done. As a rewward, Grayson industries has awarded everyone on the station a raise of 1500 thaler. Enjoy the money, your men have earned it.area - Jason Mowry, Grayson Financial. - "} - -/obj/item/paper/miner_note_3 - name = "Letter to Home" - info = {" - WOOOO! Paaaayday! Headquarters just gave us a bunch of new stuff! Woooo! We're rich now! Honey, we're gonna finally be able to afford that place you wanted in Selene! I'm coming home soon, just wait until I come home, then we'll be able to work on our new lives. - "} - -/obj/item/paper/miner_note_4 - name = "Report" - info = {" -
              Grayson Industries
              -
              Report
              - We found something in one of the nearby asteroids... seems like it's some sort of artifact. This seems like something NT or maybe the FTU would be interested in. We brought it aboard and are contacting headquarters to see what we should do with it. Some of the guys say that they found some wierd markings near it. - "} - -/obj/item/paper/miner_note_5 - name = "Invoice" - info = {" -
              Grayson Industries
              -
              Internal department memo
              - A group of scientists are on their way here to investigate the artifact. I know you're all worried about it, but we'll be fine as long as we stay strong. Remember, our cycle is only a few months out, and then we'll be home. - "} -/obj/item/paper/miner_note_6_1 - name = "Letter" - info = {" - My dearest Lily, - It's been quite some time since I've written. I know, you'd rather I send an email but this station is so far out we don't have the ability to send mail save for through the faxes they send to headquarters. Things are rough lately, we've had a lot of strange things going on, random equipment failures, random injuries, a few guys have even gotten sick. The docs don't know what's wrong with them but they're getting worse by the day. We're holding on while we can, the company wants us to stay out here until our cycle is over, which should be just over a few months. - "} -/obj/item/paper/miner_note_6_2 - name = "Scribbled note" - info = {" - Lily, - We're not making it off this station alive. Something... something's attacking the crew here. I'm not sure what it is but it seems like it's getting worse as time goes on.. I'm sitting here in the power room, hoping they don't find me... If somehow, someone finds this, please... inform Lillian Mason that her husband, Clark Mason, is no longer here. I'm going to try to see if I can find to at least get a distress beacon out. Wish me luck. - Until we meet again in heaven, - Clark Mason - "} diff --git a/maps/away/miningstation/miningstation.dmm b/maps/away/miningstation/miningstation.dmm deleted file mode 100644 index c2621f176fe65..0000000000000 --- a/maps/away/miningstation/miningstation.dmm +++ /dev/null @@ -1,31518 +0,0 @@ -//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE -"aa" = ( -/turf/space, -/area/space) -"ab" = ( -/obj/effect/paint/black, -/turf/simulated/wall/r_titanium, -/area/space) -"ad" = ( -/obj/machinery/door/blast/regular, -/turf/simulated/floor/plating, -/area/miningstation/hangar) -"ae" = ( -/obj/machinery/door/blast/regular, -/turf/simulated/wall/r_titanium, -/area/miningstation/hangar) -"af" = ( -/obj/machinery/door/blast/regular, -/turf/simulated/floor/tiled/monotile, -/area/miningstation/hangar) -"ag" = ( -/turf/simulated/floor/tiled/monotile, -/area/miningstation/hangar) -"ah" = ( -/obj/random/trash, -/turf/simulated/floor/tiled/monotile, -/area/miningstation/hangar) -"ai" = ( -/obj/machinery/light{ - dir = 8; - icon_state = "tube1" - }, -/turf/simulated/floor/tiled/monotile, -/area/miningstation/hangar) -"aj" = ( -/obj/machinery/light{ - dir = 4; - icon_state = "tube1" - }, -/turf/simulated/floor/tiled/monotile, -/area/miningstation/hangar) -"ak" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 4; - level = 2 - }, -/turf/simulated/floor/tiled/monotile, -/area/miningstation/hangar) -"al" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/miningstation/hangar) -"am" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/miningstation/hangar) -"an" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/miningstation/hangar) -"ao" = ( -/obj/structure/lattice, -/turf/space, -/area/space) -"ap" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/miningstation/hangar) -"aq" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 8 - }, -/turf/simulated/floor/tiled/monotile, -/area/miningstation/hangar) -"ar" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/miningstation/hangar) -"as" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 9; - icon_state = "warning" - }, -/turf/simulated/floor/plating, -/area/miningstation/hangar) -"at" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 1; - icon_state = "warning" - }, -/turf/simulated/floor/plating, -/area/miningstation/hangar) -"au" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 5; - icon_state = "warning" - }, -/turf/simulated/floor/plating, -/area/miningstation/hangar) -"av" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 8; - icon_state = "warning" - }, -/turf/simulated/floor/plating, -/area/miningstation/hangar) -"aw" = ( -/turf/simulated/floor/plating, -/area/miningstation/hangar) -"ax" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 4; - icon_state = "warning" - }, -/turf/simulated/floor/plating, -/area/miningstation/hangar) -"ay" = ( -/obj/machinery/alarm{ - dir = 4; - pixel_x = -24 - }, -/turf/simulated/floor/tiled/monotile, -/area/miningstation/hangar) -"az" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 4 - }, -/turf/simulated/floor/tiled/monotile, -/area/miningstation/hangar) -"aA" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 8 - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/miningstation/hangar) -"aB" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/miningstation/hangar) -"aC" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 8 - }, -/turf/simulated/floor/tiled/monotile, -/area/miningstation/hangar) -"aD" = ( -/obj/machinery/alarm{ - dir = 8; - pixel_x = 25; - req_access = list(list("ACCESS_ENGINE_EQUIP","ACCESS_ATMOS")) - }, -/turf/simulated/floor/tiled/monotile, -/area/miningstation/hangar) -"aE" = ( -/obj/structure/lattice, -/turf/space, -/area/miningstation/power) -"aF" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable{ - icon_state = "2-8" - }, -/obj/machinery/power/terminal, -/turf/simulated/floor/tiled/techfloor/grid, -/area/miningstation/dormhall) -"aG" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/miningstation/hangar) -"aH" = ( -/obj/machinery/power/terminal{ - dir = 8 - }, -/obj/machinery/power/apc{ - dir = 8; - name = "west bump"; - pixel_x = -24 - }, -/obj/structure/catwalk, -/obj/structure/cable{ - d2 = 4; - icon_state = "0-4" - }, -/turf/simulated/floor/plating, -/area/miningstation/hangar) -"aI" = ( -/obj/structure/grille, -/turf/space, -/area/space) -"aJ" = ( -/obj/structure/grille, -/obj/structure/grille, -/turf/space, -/area/miningstation/power) -"aK" = ( -/obj/structure/grille, -/turf/space, -/area/miningstation/power) -"aL" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/miningstation/hangar) -"aM" = ( -/turf/simulated/floor/reinforced/airless, -/area/miningstation/power) -"aN" = ( -/obj/structure/cable{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/turf/simulated/floor/reinforced/airless, -/area/miningstation/power) -"aO" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/reinforced/airless, -/area/miningstation/power) -"aP" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/cable{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/structure/cable{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/turf/simulated/floor/reinforced/airless, -/area/miningstation/power) -"aQ" = ( -/obj/machinery/power/tracker, -/obj/structure/cable{ - d2 = 2; - icon_state = "0-2" - }, -/turf/simulated/floor/reinforced/airless, -/area/miningstation/power) -"aR" = ( -/obj/structure/cable{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/turf/simulated/floor/reinforced/airless, -/area/miningstation/power) -"aS" = ( -/obj/structure/sign/warning/hot_exhaust, -/turf/simulated/wall/titanium, -/area/miningstation/fix) -"aU" = ( -/obj/machinery/power/solar/improved, -/obj/effect/floor_decal/solarpanel, -/obj/structure/cable{ - d2 = 4; - icon_state = "0-4" - }, -/turf/simulated/floor/reinforced/airless, -/area/miningstation/power) -"aV" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/cable{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/structure/cable{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/turf/simulated/floor/reinforced/airless, -/area/miningstation/power) -"aW" = ( -/obj/structure/cable{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/structure/catwalk, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 8 - }, -/turf/simulated/floor/plating, -/area/miningstation/hangar) -"aX" = ( -/obj/machinery/atmospherics/unary/engine, -/turf/simulated/floor/plating, -/area/miningstation/fix) -"aY" = ( -/obj/structure/fuel_port, -/turf/simulated/wall/titanium, -/area/miningstation/fix) -"bb" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 10; - icon_state = "warning" - }, -/turf/simulated/floor/plating, -/area/miningstation/hangar) -"bc" = ( -/obj/structure/shuttle/engine/heater{ - dir = 1 - }, -/obj/structure/window/reinforced, -/obj/machinery/atmospherics/pipe/manifold/visible/fuel{ - dir = 8 - }, -/turf/simulated/floor/plating, -/area/miningstation/fix) -"bd" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 6; - icon_state = "warning" - }, -/turf/simulated/floor/plating, -/area/miningstation/hangar) -"be" = ( -/obj/structure/window/reinforced, -/obj/structure/shuttle/engine/heater{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/manifold/visible/fuel, -/turf/simulated/floor/plating, -/area/miningstation/fix) -"bf" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/catwalk, -/obj/effect/floor_decal/industrial/warning{ - dir = 1; - icon_state = "warning"; - pixel_y = 6 - }, -/turf/simulated/floor/plating, -/area/miningstation/hangar) -"bg" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/obj/structure/catwalk, -/obj/effect/floor_decal/industrial/warning{ - dir = 1; - icon_state = "warning"; - pixel_y = 6 - }, -/turf/simulated/floor/plating, -/area/miningstation/hangar) -"bh" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/catwalk, -/obj/machinery/light, -/turf/simulated/floor/plating, -/area/miningstation/hangar) -"bi" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/miningstation/hangar) -"bj" = ( -/obj/machinery/power/terminal{ - dir = 4 - }, -/obj/structure/catwalk, -/obj/structure/cable{ - d2 = 8; - icon_state = "0-8" - }, -/turf/simulated/floor/plating, -/area/miningstation/hangar) -"bk" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/techfloor/grid, -/area/miningstation/hangar) -"bl" = ( -/obj/machinery/power/terminal{ - dir = 1 - }, -/obj/machinery/power/apc{ - dir = 1; - name = "north bump"; - pixel_y = 24; - req_access = list(list("ACCESS_ENGINE_EQUIP","ACCESS_ATMOS")) - }, -/obj/structure/cable{ - d2 = 2; - icon_state = "0-2" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/miningstation/hangarhall) -"bm" = ( -/obj/machinery/power/apc{ - dir = 1; - name = "north bump"; - pixel_y = 24; - req_access = list(list("ACCESS_ENGINE_EQUIP","ACCESS_ATMOS")) - }, -/obj/machinery/power/terminal{ - dir = 1 - }, -/obj/structure/cable{ - d2 = 2; - icon_state = "0-2" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/miningstation/prep2) -"bn" = ( -/obj/machinery/light{ - dir = 8; - icon_state = "tube1" - }, -/obj/structure/cable{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/miningstation/prep2) -"bo" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, -/obj/structure/cable{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/miningstation/prep2) -"bp" = ( -/obj/machinery/power/terminal{ - dir = 8 - }, -/obj/structure/cable{ - d2 = 4; - icon_state = "0-4" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/miningstation/hangarhall) -"bq" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/turf/simulated/floor/reinforced/airless, -/area/miningstation/power) -"br" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/cable{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/turf/simulated/floor/reinforced/airless, -/area/miningstation/power) -"bs" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/reinforced/airless, -/area/miningstation/power) -"bt" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/turf/simulated/floor/reinforced/airless, -/area/miningstation/power) -"bu" = ( -/obj/machinery/atmospherics/unary/vent_pump/on, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/miningstation/hangarhall) -"bv" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 1 - }, -/turf/simulated/floor/tiled/monotile, -/area/miningstation/hangar) -"bw" = ( -/obj/machinery/mining/brace, -/turf/simulated/floor/tiled/monotile, -/area/miningstation/hangar) -"bx" = ( -/obj/effect/paint/black, -/turf/simulated/wall/r_titanium, -/area/miningstation/power) -"by" = ( -/obj/machinery/door/airlock/external/bolted, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/access_button/airlock_exterior{ - master_tag = "bridge_safe"; - name = "Exterior access button"; - pixel_x = -26; - pixel_y = 9 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/miningstation/power) -"bz" = ( -/obj/machinery/light{ - dir = 8 - }, -/obj/effect/floor_decal/corner/blue{ - dir = 9 - }, -/turf/simulated/floor/tiled/white, -/area/miningstation/cryo) -"bC" = ( -/obj/structure/catwalk, -/obj/machinery/mining/drill, -/turf/simulated/floor/tiled/monotile, -/area/miningstation/hangar) -"bD" = ( -/obj/machinery/airlock_sensor/airlock_interior, -/obj/effect/paint/black, -/turf/simulated/wall/r_titanium, -/area/miningstation/power) -"bE" = ( -/obj/structure/catwalk, -/obj/structure/closet/toolcloset, -/turf/simulated/floor/airless/ceiling, -/area/miningstation/power) -"bF" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/catwalk, -/turf/simulated/floor/airless/ceiling, -/area/miningstation/power) -"bG" = ( -/obj/structure/catwalk, -/obj/machinery/atmospherics/unary/vent_pump/high_volume/airlock, -/turf/simulated/floor/airless/ceiling, -/area/miningstation/power) -"bH" = ( -/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/simulated/floor/reinforced/airless, -/area/miningstation/power) -"bI" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/miningstation/hangarhall) -"bJ" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/light/small{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/tiled/techfloor/grid, -/area/miningstation/hangarhall) -"bN" = ( -/obj/effect/paint/black, -/turf/simulated/wall/r_titanium, -/area/miningstation/prep2) -"bO" = ( -/obj/structure/catwalk, -/turf/simulated/floor/airless/ceiling, -/area/miningstation/power) -"bP" = ( -/obj/effect/paint/black, -/turf/simulated/wall/r_titanium, -/area/miningstation/hangarhall) -"bQ" = ( -/obj/structure/closet/firecloset, -/obj/effect/floor_decal/industrial/hatch, -/obj/effect/floor_decal/industrial/hatch/yellow, -/turf/simulated/floor/tiled/techfloor/grid, -/area/miningstation/hangarhall) -"bR" = ( -/obj/structure/closet/emcloset, -/obj/effect/floor_decal/industrial/hatch, -/obj/effect/floor_decal/industrial/hatch/yellow, -/turf/simulated/floor/tiled/techfloor/grid, -/area/miningstation/hangarhall) -"bS" = ( -/turf/simulated/floor/tiled/techfloor/grid, -/area/miningstation/hangarhall) -"bT" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/miningstation/hangarhall) -"bV" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/techfloor/grid, -/area/miningstation/hangarhall) -"bW" = ( -/obj/machinery/power/terminal, -/obj/structure/cable, -/obj/effect/gibspawner/human, -/turf/simulated/floor/tiled/techfloor, -/area/miningstation/dorms) -"bX" = ( -/obj/machinery/alarm, -/turf/simulated/floor/tiled/techfloor/grid, -/area/miningstation/hangarhall) -"ca" = ( -/obj/machinery/door/airlock/external/bolted, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/tiled/techfloor/grid, -/area/miningstation/power) -"cb" = ( -/obj/machinery/firealarm, -/turf/simulated/floor/tiled/techfloor/grid, -/area/miningstation/hangarhall) -"cc" = ( -/turf/simulated/floor/tiled/techfloor/grid, -/area/miningstation/prep2) -"cd" = ( -/obj/structure/dispenser/oxygen, -/turf/simulated/floor/tiled/techfloor/grid, -/area/miningstation/prep2) -"ce" = ( -/obj/machinery/light{ - dir = 4; - icon_state = "tube1" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/miningstation/prep2) -"cf" = ( -/obj/structure/sign/warning/airlock, -/obj/machinery/access_button/airlock_exterior, -/obj/effect/paint/black, -/turf/simulated/wall/r_titanium, -/area/miningstation/power) -"cg" = ( -/obj/structure/shuttle/engine/heater{ - dir = 1 - }, -/obj/structure/window/reinforced, -/obj/machinery/atmospherics/pipe/simple/visible/fuel{ - dir = 9 - }, -/turf/simulated/floor/plating, -/area/miningstation/fix) -"ch" = ( -/turf/simulated/floor/plating, -/area/miningstation/fix) -"ci" = ( -/turf/simulated/floor/tiled/white, -/area/miningstation/cryo) -"cj" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/light/small{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/miningstation/hangarhall) -"ck" = ( -/obj/structure/fireaxecabinet, -/obj/effect/paint/black, -/turf/simulated/wall/r_titanium, -/area/miningstation/power) -"cl" = ( -/obj/machinery/light{ - dir = 8; - icon_state = "tube1" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/miningstation/hangarhall) -"cm" = ( -/obj/random/trash, -/turf/simulated/floor/tiled/techfloor/grid, -/area/miningstation/hangarhall) -"cn" = ( -/obj/machinery/light{ - dir = 4; - icon_state = "tube1" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/miningstation/hangarhall) -"co" = ( -/obj/effect/paint/black, -/turf/simulated/wall/r_titanium, -/area/miningstation/hangar) -"cp" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/cable{ - icon_state = "2-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/techfloor/grid, -/area/miningstation/hangarhall) -"cq" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/miningstation/prep2) -"cr" = ( -/turf/simulated/floor/asteroid, -/area/space) -"cs" = ( -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/shield_diffuser, -/obj/machinery/atmospherics/pipe/simple/visible{ - dir = 4 - }, -/obj/machinery/door/blast/regular, -/turf/simulated/floor/tiled/techfloor/grid, -/area/miningstation/fix) -"ct" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/miningstation/prep2) -"cv" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 8 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/miningstation/prep2) -"cw" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 4; - icon_state = "warning" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/miningstation/prep2) -"cx" = ( -/obj/machinery/door/airlock/civilian, -/obj/machinery/door/firedoor, -/turf/simulated/floor/tiled/techfloor/grid, -/area/miningstation/power) -"cy" = ( -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/miningstation/power) -"cz" = ( -/obj/structure/catwalk, -/obj/machinery/light{ - dir = 1 - }, -/turf/simulated/floor/plating, -/area/miningstation/power) -"cA" = ( -/obj/item/device/radio/intercom, -/obj/effect/paint/black, -/turf/simulated/wall/r_titanium, -/area/miningstation/power) -"cB" = ( -/obj/structure/cable{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/structure/catwalk, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 - }, -/turf/simulated/floor/plating, -/area/miningstation/power) -"cD" = ( -/obj/machinery/power/solar/improved, -/obj/effect/floor_decal/solarpanel, -/obj/structure/cable{ - d2 = 8; - icon_state = "0-8" - }, -/turf/simulated/floor/reinforced/airless, -/area/miningstation/power) -"cE" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/catwalk, -/obj/effect/floor_decal/industrial/warning{ - dir = 1; - icon_state = "warning"; - pixel_y = 6 - }, -/turf/simulated/floor/plating, -/area/miningstation/hangar) -"cF" = ( -/obj/structure/catwalk, -/obj/machinery/power/port_gen/pacman, -/obj/machinery/light{ - dir = 4; - icon_state = "tube1" - }, -/turf/simulated/floor/plating, -/area/miningstation/power) -"cG" = ( -/obj/machinery/power/solar_control, -/obj/structure/catwalk, -/obj/structure/cable{ - d2 = 4; - icon_state = "0-4" - }, -/turf/simulated/floor/plating, -/area/miningstation/power) -"cH" = ( -/obj/machinery/atmospherics/unary/vent_pump/on, -/turf/simulated/floor/tiled/techfloor/grid, -/area/miningstation/hangarhall) -"cI" = ( -/turf/simulated/floor/tiled/techfloor/grid, -/area/miningstation/fix) -"cJ" = ( -/obj/machinery/door/airlock/civilian, -/obj/machinery/door/firedoor, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/miningstation/hangarhall) -"cK" = ( -/obj/structure/mech_wreckage, -/turf/simulated/floor/tiled/techfloor/grid, -/area/miningstation/hangarhall) -"cM" = ( -/obj/machinery/door/airlock/civilian, -/turf/simulated/floor/tiled/techfloor/grid, -/area/miningstation/hangarhall) -"cN" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/miningstation/hangarhall) -"cO" = ( -/obj/machinery/atmospherics/unary/vent_pump/on, -/turf/simulated/floor/tiled/techfloor/grid, -/area/miningstation/prep2) -"cP" = ( -/obj/structure/table/rack, -/obj/structure/catwalk, -/obj/random/tool, -/obj/random/tool, -/obj/random/tool, -/obj/random/tool, -/obj/random/toolbox, -/turf/simulated/floor/plating, -/area/miningstation/power) -"cR" = ( -/obj/structure/catwalk, -/obj/machinery/computer/atmos_alert, -/turf/simulated/floor/plating, -/area/miningstation/power) -"cS" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/structure/catwalk, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 - }, -/turf/simulated/floor/plating, -/area/miningstation/power) -"cT" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/catwalk, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/plating, -/area/miningstation/power) -"cU" = ( -/obj/machinery/power/port_gen/pacman, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/miningstation/power) -"cV" = ( -/obj/structure/catwalk, -/obj/structure/cable{ - d2 = 8; - icon_state = "0-8" - }, -/obj/structure/cable{ - d2 = 2; - icon_state = "0-2" - }, -/obj/structure/cable{ - d2 = 4; - icon_state = "0-4" - }, -/obj/machinery/power/smes/buildable/outpost_substation, -/turf/simulated/floor/plating, -/area/miningstation/power) -"cW" = ( -/obj/structure/cable{ - icon_state = "2-8" - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/miningstation/power) -"cX" = ( -/obj/machinery/alarm{ - dir = 4; - pixel_x = -22 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/miningstation/hangarhall) -"cY" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/miningstation/hangarhall) -"cZ" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/random/trash, -/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, -/turf/simulated/floor/tiled/techfloor/grid, -/area/miningstation/hangarhall) -"da" = ( -/obj/machinery/door/blast/regular, -/turf/simulated/floor/tiled/techfloor/grid, -/area/miningstation/fix) -"db" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/light{ - dir = 4; - icon_state = "tube1" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/miningstation/hangarhall) -"dc" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/effect/paint/black, -/turf/simulated/wall/r_titanium, -/area/miningstation/hangarhall) -"dd" = ( -/obj/machinery/light{ - dir = 8; - icon_state = "tube1" - }, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/miningstation/hangarhall) -"de" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/miningstation/hangarhall) -"df" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, -/obj/random/trash, -/turf/simulated/floor/tiled/techfloor/grid, -/area/miningstation/hangarhall) -"dg" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 1 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/miningstation/hangarhall) -"dh" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply, -/turf/simulated/floor/tiled/techfloor/grid, -/area/miningstation/hangarhall) -"di" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 1 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/miningstation/hangarhall) -"dj" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, -/turf/simulated/floor/tiled/techfloor/grid, -/area/miningstation/hangarhall) -"dk" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply, -/turf/simulated/floor/tiled/techfloor/grid, -/area/miningstation/hangarhall) -"dl" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/light{ - dir = 8; - icon_state = "tube1" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/miningstation/prep2) -"dm" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers, -/turf/simulated/floor/tiled/techfloor/grid, -/area/miningstation/prep2) -"dn" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/miningstation/prep2) -"do" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/random/trash, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/miningstation/prep2) -"dp" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/miningstation/prep2) -"dq" = ( -/obj/machinery/alarm{ - dir = 8; - pixel_x = 25; - req_access = list(list("ACCESS_ENGINE_EQUIP","ACCESS_ATMOS")) - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 4; - icon_state = "warning" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/miningstation/prep2) -"dr" = ( -/obj/structure/closet/crate/solar_assembly, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/miningstation/power) -"ds" = ( -/obj/structure/catwalk, -/obj/structure/bed/chair/office{ - dir = 1 - }, -/turf/simulated/floor/plating, -/area/miningstation/power) -"dt" = ( -/obj/structure/catwalk, -/obj/structure/table/steel, -/obj/item/paper_bin, -/turf/simulated/floor/plating, -/area/miningstation/power) -"du" = ( -/obj/structure/catwalk, -/obj/machinery/atmospherics/unary/vent_pump/on, -/mob/living/simple_animal/hostile/meat/strippedhuman, -/turf/simulated/floor/plating, -/area/miningstation/power) -"dv" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/miningstation/prep2) -"dw" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 4; - icon_state = "warning" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/miningstation/prep2) -"dx" = ( -/obj/structure/ore_box, -/turf/simulated/floor/tiled/techfloor/grid, -/area/miningstation/hangarhall) -"dy" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/structure/cable{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/tiled/techfloor/grid, -/area/miningstation/hangarhall) -"dz" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/miningstation/hangarhall) -"dA" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/paint/black, -/turf/simulated/wall/r_titanium, -/area/miningstation/hangarhall) -"dB" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/light, -/turf/simulated/floor/tiled/techfloor/grid, -/area/miningstation/hangarhall) -"dC" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/floor_decal/corner/yellow{ - dir = 10 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/miningstation/hangarhall) -"dD" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/cable{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/effect/floor_decal/corner/yellow{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/techfloor/grid, -/area/miningstation/hangarhall) -"dE" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 1 - }, -/obj/machinery/light, -/turf/simulated/floor/tiled/techfloor/grid, -/area/miningstation/hangarhall) -"dF" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/reagent_dispensers/fueltank, -/obj/effect/floor_decal/industrial/warning{ - dir = 9; - icon_state = "warning" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/miningstation/hangarhall) -"dG" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/reagent_dispensers/fueltank, -/obj/effect/floor_decal/industrial/warning{ - dir = 5; - icon_state = "warning" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/miningstation/hangarhall) -"dH" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/cable{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/structure/cable{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/effect/floor_decal/corner/yellow{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/techfloor/grid, -/area/miningstation/hangarhall) -"dI" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/cable{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 1 - }, -/obj/effect/floor_decal/corner/yellow{ - dir = 10 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/miningstation/hangarhall) -"dJ" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/suit_storage_unit/mining/alt, -/turf/simulated/floor/tiled/techfloor/grid, -/area/miningstation/prep2) -"dK" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/cable{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/miningstation/hangarhall) -"dL" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/table/rack, -/obj/random/tool, -/obj/item/inflatable_dispenser, -/turf/simulated/floor/tiled/techfloor/grid, -/area/miningstation/prep2) -"dM" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/miningstation/prep2) -"dN" = ( -/obj/machinery/door/airlock/civilian, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/miningstation/power) -"dO" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/catwalk, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/miningstation/power) -"dP" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/catwalk, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/light, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/miningstation/power) -"dQ" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/alarm{ - dir = 1; - pixel_y = -25 - }, -/obj/structure/catwalk, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply, -/turf/simulated/floor/plating, -/area/miningstation/power) -"dR" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/catwalk, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 - }, -/turf/simulated/floor/plating, -/area/miningstation/power) -"dS" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/structure/catwalk, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/plating, -/area/miningstation/power) -"dT" = ( -/obj/machinery/power/solar/improved, -/obj/effect/floor_decal/solarpanel, -/obj/structure/cable{ - d2 = 4; - icon_state = "0-4" - }, -/obj/structure/cable{ - d2 = 8; - icon_state = "0-8" - }, -/turf/simulated/floor/reinforced/airless, -/area/miningstation/power) -"dV" = ( -/obj/machinery/firealarm{ - dir = 4; - pixel_x = 26 - }, -/obj/structure/table/steel, -/turf/simulated/floor/tiled/techfloor, -/area/miningstation/prep) -"dW" = ( -/obj/machinery/power/terminal{ - dir = 1 - }, -/obj/machinery/power/apc{ - dir = 1; - name = "north bump"; - pixel_y = 24; - req_access = list(list("ACCESS_ENGINE_EQUIP","ACCESS_ATMOS")) - }, -/obj/structure/cable{ - d2 = 8; - icon_state = "0-8" - }, -/obj/item/gun/projectile/shotgun/pump, -/turf/simulated/floor/tiled/techfloor, -/area/miningstation/vault) -"dX" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/obj/structure/table/steel, -/obj/machinery/photocopier/faxmachine, -/turf/simulated/floor/tiled/techfloor, -/area/miningstation/bridge) -"dY" = ( -/obj/effect/paint/black, -/turf/simulated/wall/r_titanium, -/area/miningstation/prep) -"dZ" = ( -/obj/machinery/door/airlock/multi_tile/civilian, -/obj/machinery/door/firedoor, -/turf/simulated/floor/tiled/techfloor/grid, -/area/miningstation/prep) -"ea" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/techfloor/grid, -/area/miningstation/prep) -"eb" = ( -/obj/structure/fireaxecabinet, -/obj/effect/paint/black, -/turf/simulated/wall/r_titanium, -/area/miningstation/prep) -"ec" = ( -/obj/machinery/door/airlock/multi_tile/civilian, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/techfloor/grid, -/area/miningstation/prep) -"ed" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/door/firedoor, -/turf/simulated/floor/tiled/techfloor/grid, -/area/miningstation/prep) -"ee" = ( -/obj/machinery/light{ - dir = 8; - icon_state = "tube1" - }, -/obj/machinery/suit_storage_unit/mining/alt, -/turf/simulated/floor/tiled/techfloor/grid, -/area/miningstation/prep2) -"ef" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/techfloor/grid, -/area/miningstation/prep2) -"eg" = ( -/obj/structure/table/rack, -/obj/random/tool, -/obj/item/inflatable_dispenser, -/turf/simulated/floor/tiled/techfloor/grid, -/area/miningstation/prep2) -"eh" = ( -/obj/structure/table/rack, -/obj/random/tool, -/turf/simulated/floor/tiled/techfloor/grid, -/area/miningstation/prep2) -"ei" = ( -/obj/machinery/light{ - dir = 4; - icon_state = "tube1" - }, -/obj/machinery/suit_storage_unit/mining/alt, -/turf/simulated/floor/tiled/techfloor/grid, -/area/miningstation/prep2) -"ej" = ( -/obj/machinery/vending/engivend, -/obj/effect/floor_decal/corner/yellow{ - dir = 9 - }, -/obj/effect/floor_decal/corner/yellow{ - dir = 5 - }, -/obj/effect/floor_decal/corner/yellow{ - dir = 5 - }, -/turf/simulated/floor/tiled/techfloor, -/area/miningstation/prep) -"ek" = ( -/obj/machinery/vending/engivend, -/obj/effect/floor_decal/corner/yellow{ - dir = 5 - }, -/obj/effect/floor_decal/corner/yellow{ - dir = 5 - }, -/turf/simulated/floor/tiled/techfloor, -/area/miningstation/prep) -"el" = ( -/obj/effect/floor_decal/corner/yellow{ - dir = 5 - }, -/obj/effect/floor_decal/corner/yellow{ - dir = 5 - }, -/turf/simulated/floor/tiled/techfloor, -/area/miningstation/prep) -"em" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/effect/floor_decal/corner/yellow{ - dir = 5 - }, -/obj/effect/floor_decal/corner/yellow{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/techfloor, -/area/miningstation/prep) -"en" = ( -/obj/machinery/vending/engineering, -/obj/effect/floor_decal/corner/yellow{ - dir = 5 - }, -/turf/simulated/floor/tiled/techfloor, -/area/miningstation/prep) -"eo" = ( -/obj/effect/floor_decal/corner/yellow{ - dir = 5 - }, -/obj/effect/floor_decal/industrial/hatch, -/obj/effect/floor_decal/industrial/hatch/yellow, -/obj/structure/table/rack, -/turf/simulated/floor/tiled/techfloor, -/area/miningstation/prep) -"ep" = ( -/obj/machinery/light{ - dir = 1 - }, -/obj/effect/floor_decal/corner/yellow{ - dir = 5 - }, -/obj/effect/floor_decal/industrial/hatch, -/obj/effect/floor_decal/industrial/hatch/yellow, -/obj/structure/table/rack, -/turf/simulated/floor/tiled/techfloor, -/area/miningstation/prep) -"eq" = ( -/obj/effect/floor_decal/corner/yellow{ - dir = 5 - }, -/turf/simulated/floor/tiled/techfloor, -/area/miningstation/prep) -"er" = ( -/obj/machinery/power/terminal{ - dir = 1 - }, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/effect/floor_decal/corner/yellow{ - dir = 5 - }, -/turf/simulated/floor/tiled/techfloor, -/area/miningstation/prep) -"es" = ( -/obj/machinery/light{ - dir = 1 - }, -/obj/effect/floor_decal/corner/yellow{ - dir = 5 - }, -/turf/simulated/floor/tiled/techfloor, -/area/miningstation/prep) -"eu" = ( -/obj/machinery/vending/tool, -/obj/effect/floor_decal/corner/yellow{ - dir = 5 - }, -/turf/simulated/floor/tiled/techfloor, -/area/miningstation/prep) -"ev" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/effect/floor_decal/corner/yellow{ - dir = 5 - }, -/obj/effect/floor_decal/corner/yellow{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/techfloor, -/area/miningstation/prep) -"ew" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/effect/floor_decal/corner/yellow{ - dir = 5 - }, -/obj/effect/floor_decal/corner/yellow{ - dir = 5 - }, -/turf/simulated/floor/tiled/techfloor, -/area/miningstation/prep) -"ex" = ( -/obj/machinery/vending/engivend, -/obj/effect/floor_decal/corner/yellow{ - dir = 5 - }, -/turf/simulated/floor/tiled/techfloor, -/area/miningstation/prep) -"ey" = ( -/obj/machinery/suit_storage_unit/mining/alt, -/turf/simulated/floor/tiled/techfloor/grid, -/area/miningstation/prep2) -"ez" = ( -/obj/machinery/light{ - dir = 8; - icon_state = "tube1" - }, -/obj/structure/ore_box, -/turf/simulated/floor/tiled/techfloor/grid, -/area/miningstation/hangarhall) -"eA" = ( -/obj/machinery/light{ - dir = 8; - icon_state = "tube1" - }, -/obj/effect/floor_decal/corner/yellow{ - dir = 9 - }, -/turf/simulated/floor/tiled/techfloor, -/area/miningstation/prep) -"eB" = ( -/turf/simulated/floor/tiled/techfloor, -/area/miningstation/prep) -"eC" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/techfloor, -/area/miningstation/prep) -"eD" = ( -/obj/machinery/atmospherics/unary/vent_pump/on, -/turf/simulated/floor/tiled/techfloor, -/area/miningstation/prep) -"eE" = ( -/obj/random/trash, -/turf/simulated/floor/tiled/techfloor, -/area/miningstation/prep) -"eF" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/turf/simulated/floor/tiled/techfloor, -/area/miningstation/prep) -"eG" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/techfloor, -/area/miningstation/prep) -"eH" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/random/trash, -/turf/simulated/floor/tiled/techfloor, -/area/miningstation/prep) -"eI" = ( -/obj/machinery/alarm{ - dir = 8; - pixel_x = 25; - req_access = list(list("ACCESS_ENGINE_EQUIP","ACCESS_ATMOS")) - }, -/obj/machinery/light{ - dir = 4; - icon_state = "tube1" - }, -/turf/simulated/floor/tiled/techfloor, -/area/miningstation/prep) -"eJ" = ( -/obj/machinery/atmospherics/pipe/simple/visible{ - dir = 4 - }, -/obj/machinery/shield_diffuser, -/obj/item/stack/material/rods, -/obj/machinery/door/blast/regular, -/turf/simulated/floor/tiled/techfloor/grid, -/area/miningstation/fix) -"eL" = ( -/obj/effect/paint/black, -/turf/simulated/wall/r_titanium, -/area/miningstation/vault) -"eM" = ( -/obj/machinery/power/terminal{ - dir = 8 - }, -/obj/machinery/power/apc{ - dir = 8; - name = "west bump"; - pixel_x = -24 - }, -/obj/effect/floor_decal/corner/yellow{ - dir = 9 - }, -/obj/structure/table/steel, -/obj/structure/cable{ - d2 = 4; - icon_state = "0-4" - }, -/obj/random/tool, -/turf/simulated/floor/tiled/techfloor, -/area/miningstation/prep) -"eN" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/techfloor, -/area/miningstation/prep) -"eO" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/structure/cable{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/turf/simulated/floor/tiled/techfloor, -/area/miningstation/prep) -"eP" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor, -/area/miningstation/prep) -"eR" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor, -/area/miningstation/prep) -"eT" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/random/toolbox, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor, -/area/miningstation/prep) -"eU" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/random/trash, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor, -/area/miningstation/prep) -"eV" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, -/turf/simulated/floor/tiled/techfloor, -/area/miningstation/prep) -"eW" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/turf/simulated/floor/tiled/techfloor, -/area/miningstation/prep) -"eX" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/structure/cable{ - icon_state = "2-8" - }, -/turf/simulated/floor/tiled/techfloor, -/area/miningstation/prep) -"eY" = ( -/obj/machinery/power/terminal{ - dir = 1 - }, -/obj/machinery/power/apc{ - dir = 1; - name = "north bump"; - pixel_y = 24; - req_access = list(list("ACCESS_ENGINE_EQUIP","ACCESS_ATMOS")) - }, -/obj/structure/cable{ - d2 = 2; - icon_state = "0-2" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/miningstation/operationshall2) -"eZ" = ( -/obj/structure/table/rack, -/obj/random/technology_scanner, -/obj/random/tool, -/obj/item/shovel, -/turf/simulated/floor/tiled/techfloor/grid, -/area/miningstation/prep2) -"fa" = ( -/obj/structure/table/rack, -/obj/random/toolbox, -/obj/item/shovel, -/turf/simulated/floor/tiled/techfloor/grid, -/area/miningstation/prep2) -"fb" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/catwalk, -/obj/machinery/light, -/turf/simulated/floor/plating, -/area/miningstation/hangar) -"fc" = ( -/obj/structure/cable{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/machinery/light{ - dir = 1 - }, -/mob/living/simple_animal/hostile/meat/abomination, -/turf/simulated/floor/tiled/techfloor, -/area/miningstation/vault) -"fd" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/techfloor, -/area/miningstation/vault) -"fe" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 1 - }, -/obj/structure/catwalk, -/obj/effect/floor_decal/industrial/warning{ - dir = 1; - icon_state = "warning"; - pixel_y = 6 - }, -/turf/simulated/floor/plating, -/area/miningstation/hangar) -"fg" = ( -/turf/simulated/floor/tiled/techfloor, -/area/miningstation/vault) -"fh" = ( -/obj/machinery/light{ - dir = 1 - }, -/mob/living/simple_animal/hostile/meat/abomination, -/turf/simulated/floor/tiled/techfloor, -/area/miningstation/vault) -"fi" = ( -/obj/structure/table/rack, -/obj/item/stack/material/uranium/ten, -/obj/item/stack/material/uranium/ten, -/obj/item/gun/projectile/pistol/throwback, -/turf/simulated/floor/tiled/techfloor, -/area/miningstation/vault) -"fj" = ( -/obj/machinery/firealarm{ - dir = 8; - pixel_x = -24 - }, -/obj/effect/floor_decal/corner/yellow{ - dir = 10 - }, -/obj/effect/floor_decal/corner/yellow{ - dir = 9 - }, -/obj/structure/table/steel, -/turf/simulated/floor/tiled/techfloor, -/area/miningstation/prep) -"fk" = ( -/obj/machinery/light, -/obj/effect/floor_decal/corner/yellow{ - dir = 10 - }, -/obj/structure/table/steel, -/turf/simulated/floor/tiled/techfloor, -/area/miningstation/prep) -"fl" = ( -/obj/effect/floor_decal/corner/yellow{ - dir = 10 - }, -/obj/random/trash, -/turf/simulated/floor/tiled/techfloor, -/area/miningstation/prep) -"fm" = ( -/obj/structure/closet/toolcloset, -/obj/effect/floor_decal/corner/yellow{ - dir = 10 - }, -/turf/simulated/floor/tiled/techfloor, -/area/miningstation/prep) -"fn" = ( -/obj/machinery/mech_recharger, -/obj/effect/floor_decal/corner/yellow{ - dir = 10 - }, -/turf/simulated/floor/tiled/techfloor, -/area/miningstation/prep) -"fo" = ( -/obj/effect/paint/black, -/turf/simulated/wall/r_titanium, -/area/miningstation/cryo) -"fq" = ( -/obj/machinery/mech_recharger, -/obj/structure/mech_wreckage, -/obj/effect/floor_decal/corner/yellow{ - dir = 10 - }, -/turf/simulated/floor/tiled/techfloor, -/area/miningstation/prep) -"fr" = ( -/obj/structure/table/rack, -/obj/random/tool, -/obj/random/toolbox, -/turf/simulated/floor/tiled/techfloor/grid, -/area/miningstation/prep2) -"fs" = ( -/obj/structure/table/rack, -/obj/effect/floor_decal/corner/yellow{ - dir = 10 - }, -/obj/random/tool, -/obj/random/tool, -/obj/random/tool, -/turf/simulated/floor/tiled/techfloor, -/area/miningstation/prep) -"ft" = ( -/obj/machinery/mech_recharger, -/obj/effect/floor_decal/corner/yellow{ - dir = 10 - }, -/mob/living/exosuit/premade/powerloader, -/turf/simulated/floor/tiled/techfloor, -/area/miningstation/prep) -"fu" = ( -/obj/structure/table/rack, -/obj/machinery/light, -/obj/effect/floor_decal/corner/yellow{ - dir = 10 - }, -/obj/random/tool, -/obj/random/tool, -/turf/simulated/floor/tiled/techfloor, -/area/miningstation/prep) -"fv" = ( -/obj/structure/table/rack, -/obj/effect/floor_decal/corner/yellow{ - dir = 10 - }, -/obj/random/tool, -/turf/simulated/floor/tiled/techfloor, -/area/miningstation/prep) -"fx" = ( -/obj/structure/table/rack, -/obj/machinery/light, -/obj/effect/floor_decal/corner/yellow{ - dir = 10 - }, -/obj/random/tool, -/turf/simulated/floor/tiled/techfloor, -/area/miningstation/prep) -"fy" = ( -/obj/machinery/power/terminal, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/effect/floor_decal/corner/yellow{ - dir = 10 - }, -/obj/structure/reagent_dispensers/water_cooler, -/turf/simulated/floor/tiled/techfloor, -/area/miningstation/prep) -"fz" = ( -/obj/effect/floor_decal/corner/yellow{ - dir = 10 - }, -/obj/structure/table/steel, -/obj/random/tool, -/turf/simulated/floor/tiled/techfloor, -/area/miningstation/prep) -"fA" = ( -/obj/structure/table/rack, -/obj/random/technology_scanner, -/obj/random/tool, -/turf/simulated/floor/tiled/techfloor/grid, -/area/miningstation/prep2) -"fB" = ( -/obj/random/trash, -/turf/simulated/floor/tiled/techfloor/grid, -/area/miningstation/prep2) -"fD" = ( -/turf/simulated/wall/titanium, -/area/miningstation/fix) -"fE" = ( -/obj/structure/table/rack, -/obj/item/stack/material/titanium/ten, -/obj/item/stack/material/titanium/ten, -/obj/random/projectile, -/turf/simulated/floor/tiled/techfloor, -/area/miningstation/vault) -"fF" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/turf/simulated/floor/tiled/techfloor, -/area/miningstation/vault) -"fG" = ( -/obj/structure/table/rack, -/turf/simulated/floor/tiled/techfloor, -/area/miningstation/vault) -"fH" = ( -/obj/random/trash, -/turf/simulated/floor/tiled/techfloor, -/area/miningstation/vault) -"fI" = ( -/obj/machinery/atmospherics/unary/vent_pump/on, -/turf/simulated/floor/tiled/techfloor, -/area/miningstation/vault) -"fJ" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/turf/simulated/floor/plating, -/area/miningstation/atmos) -"fK" = ( -/obj/structure/table/rack, -/obj/item/stack/material/tritium/ten, -/turf/simulated/floor/tiled/techfloor, -/area/miningstation/vault) -"fL" = ( -/obj/structure/reagent_dispensers/fueltank, -/obj/effect/floor_decal/industrial/warning{ - dir = 5; - icon_state = "warning" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/miningstation/prep2) -"fM" = ( -/obj/structure/table/rack, -/obj/item/stack/material/osmium/ten, -/turf/simulated/floor/tiled/techfloor, -/area/miningstation/vault) -"fN" = ( -/obj/effect/floor_decal/industrial/hatch/yellow, -/obj/structure/cable/cyan{ - d2 = 2; - icon_state = "0-2" - }, -/obj/machinery/atmospherics/pipe/simple/visible/fuel, -/obj/machinery/power/smes/buildable/outpost_substation, -/turf/simulated/floor/tiled/techfloor/grid, -/area/miningstation/fix) -"fO" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/random/trash, -/turf/simulated/floor/tiled/techfloor, -/area/miningstation/vault) -"fP" = ( -/obj/effect/floor_decal/corner/blue{ - dir = 6 - }, -/obj/effect/floor_decal/corner/blue{ - dir = 8 - }, -/turf/simulated/floor/tiled/white, -/area/miningstation/cryo) -"fQ" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/tiled/techfloor, -/area/miningstation/vault) -"fR" = ( -/obj/structure/table/rack, -/obj/item/stack/material/gold/ten, -/obj/item/stack/material/gold/ten, -/obj/item/stack/material/gold/ten, -/obj/machinery/alarm{ - dir = 8; - pixel_x = 25 - }, -/turf/simulated/floor/tiled/techfloor, -/area/miningstation/vault) -"fT" = ( -/obj/structure/reagent_dispensers/fueltank, -/obj/effect/floor_decal/industrial/warning{ - dir = 6; - icon_state = "warning" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/miningstation/prep2) -"fV" = ( -/obj/structure/table/rack, -/obj/item/stack/material/phoron/fifty, -/turf/simulated/floor/tiled/techfloor, -/area/miningstation/vault) -"fW" = ( -/turf/simulated/mineral, -/area/space) -"fX" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/techfloor, -/area/miningstation/vault) -"ga" = ( -/obj/machinery/light{ - dir = 8 - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/atmospherics/portables_connector{ - dir = 4 - }, -/obj/machinery/portable_atmospherics/canister/carbon_dioxide/engine_setup, -/turf/simulated/floor/plating, -/area/miningstation/fix) -"gb" = ( -/obj/structure/bed/chair/shuttle/blue{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/visible/fuel{ - dir = 9 - }, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 1; - icon_state = "warning" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/miningstation/fix) -"ge" = ( -/obj/machinery/door/airlock/multi_tile/civilian, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/door/firedoor, -/turf/simulated/floor/tiled/techfloor/grid, -/area/miningstation/operationshall) -"gf" = ( -/obj/machinery/light/small{ - dir = 4 - }, -/obj/effect/floor_decal/techfloor, -/obj/effect/decal/cleanable/blood/splatter, -/obj/machinery/power/apc{ - dir = 4; - name = "east bump"; - pixel_x = 24 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/miningstation/fix) -"gg" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/door/firedoor, -/turf/simulated/floor/tiled/techfloor/grid, -/area/miningstation/operationshall) -"gh" = ( -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/atmospherics/portables_connector{ - dir = 4 - }, -/obj/machinery/portable_atmospherics/canister/air/airlock, -/turf/simulated/floor/plating, -/area/miningstation/fix) -"gi" = ( -/obj/effect/paint/black, -/turf/simulated/wall/r_titanium, -/area/miningstation/bridge) -"gj" = ( -/obj/structure/noticeboard, -/obj/effect/paint/black, -/turf/simulated/wall/r_titanium, -/area/miningstation/bridge) -"gk" = ( -/obj/machinery/door/airlock/multi_tile/civilian, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/techfloor/grid, -/area/miningstation/operationshall2) -"gl" = ( -/obj/structure/bed/chair/shuttle/blue{ - dir = 4 - }, -/obj/machinery/atmospherics/valve/open{ - dir = 4; - open = 0 - }, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/miningstation/fix) -"gm" = ( -/obj/effect/paint/black, -/turf/simulated/wall/r_titanium, -/area/miningstation/bathroom) -"gn" = ( -/obj/structure/sign/warning/secure_area, -/obj/effect/paint/black, -/turf/simulated/wall/r_titanium, -/area/miningstation/operationshall2) -"go" = ( -/obj/machinery/door/airlock/vault/bolted, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/techfloor, -/area/miningstation/operationshall2) -"gp" = ( -/obj/machinery/door/airlock/vault/bolted, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/tiled/techfloor, -/area/miningstation/operationshall2) -"gq" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/door/airlock/civilian, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/door/firedoor, -/turf/simulated/floor/plating, -/area/miningstation/operationshall2) -"gr" = ( -/obj/effect/paint/black, -/turf/simulated/wall/r_titanium, -/area/miningstation/atmos) -"gs" = ( -/obj/structure/fireaxecabinet, -/obj/effect/paint/black, -/turf/simulated/wall/r_titanium, -/area/miningstation/atmos) -"gt" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, -/obj/structure/catwalk, -/obj/effect/floor_decal/industrial/warning{ - dir = 1; - icon_state = "warning"; - pixel_y = 6 - }, -/turf/simulated/floor/plating, -/area/miningstation/hangar) -"gu" = ( -/obj/item/device/radio/intercom, -/obj/effect/paint/black, -/turf/simulated/wall/r_titanium, -/area/miningstation/operationshall) -"gv" = ( -/obj/effect/paint/black, -/turf/simulated/wall/r_titanium, -/area/miningstation/intensive) -"gw" = ( -/turf/simulated/floor/tiled/techfloor/grid, -/area/miningstation/operationshall) -"gx" = ( -/obj/structure/closet/firecloset, -/obj/effect/floor_decal/industrial/hatch, -/obj/effect/floor_decal/industrial/hatch/yellow, -/turf/simulated/floor/tiled/techfloor/grid, -/area/miningstation/operationshall) -"gy" = ( -/obj/effect/decal/cleanable/blood/splatter, -/turf/simulated/floor/tiled/techfloor/grid, -/area/miningstation/operationshall2) -"gz" = ( -/obj/machinery/light{ - dir = 1 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/miningstation/operationshall2) -"gA" = ( -/obj/machinery/light{ - dir = 1 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/miningstation/operationshall) -"gB" = ( -/obj/machinery/power/terminal{ - dir = 1 - }, -/obj/machinery/power/apc{ - dir = 1; - name = "north bump"; - pixel_y = 24 - }, -/obj/structure/table/steel, -/obj/structure/cable{ - d2 = 2; - icon_state = "0-2" - }, -/turf/simulated/floor/tiled/techfloor, -/area/miningstation/bridge) -"gC" = ( -/obj/machinery/door/airlock/civilian, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/techfloor/grid, -/area/miningstation/intensive) -"gD" = ( -/obj/structure/filingcabinet/filingcabinet, -/turf/simulated/floor/tiled/techfloor, -/area/miningstation/bridge) -"gE" = ( -/turf/simulated/floor/tiled/techfloor, -/area/miningstation/bridge) -"gF" = ( -/obj/structure/cable{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/structure/catwalk, -/obj/effect/floor_decal/industrial/warning{ - dir = 1; - icon_state = "warning"; - pixel_y = 6 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 1 - }, -/turf/simulated/floor/plating, -/area/miningstation/hangar) -"gG" = ( -/obj/structure/filingcabinet/filingcabinet, -/obj/machinery/light{ - dir = 1 - }, -/turf/simulated/floor/tiled/techfloor, -/area/miningstation/bridge) -"gH" = ( -/obj/machinery/papershredder, -/turf/simulated/floor/tiled/techfloor, -/area/miningstation/bridge) -"gI" = ( -/obj/machinery/light_switch{ - pixel_y = 32 - }, -/turf/simulated/floor/tiled/techfloor, -/area/miningstation/bridge) -"gJ" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/techfloor/grid, -/area/miningstation/operationshall2) -"gK" = ( -/obj/random/trash, -/turf/simulated/floor/tiled/techfloor/grid, -/area/miningstation/operationshall2) -"gL" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/miningstation/atmos) -"gM" = ( -/obj/machinery/alarm, -/turf/simulated/floor/tiled/techfloor/grid, -/area/miningstation/operationshall2) -"gN" = ( -/obj/structure/ore_box, -/turf/simulated/floor/tiled/monotile, -/area/miningstation/hangar) -"gO" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/techfloor/grid, -/area/miningstation/operationshall2) -"gP" = ( -/obj/structure/closet/firecloset, -/obj/effect/floor_decal/industrial/hatch, -/turf/simulated/floor/tiled/techfloor/grid, -/area/miningstation/operationshall2) -"gQ" = ( -/obj/machinery/photocopier, -/obj/machinery/light{ - dir = 1 - }, -/turf/simulated/floor/tiled/techfloor, -/area/miningstation/bridge) -"gS" = ( -/obj/machinery/atmospherics/unary/tank/air{ - dir = 4; - start_pressure = 4559.63 - }, -/turf/simulated/floor/plating, -/area/miningstation/atmos) -"gT" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/catwalk, -/mob/living/simple_animal/hostile/meat/strippedhuman, -/turf/simulated/floor/plating, -/area/miningstation/atmos) -"gU" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/effect/floor_decal/industrial/warning{ - dir = 1; - icon_state = "warning" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/miningstation/operationshall) -"gV" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 1; - icon_state = "warning" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/miningstation/operationshall) -"gW" = ( -/obj/machinery/firealarm, -/turf/simulated/floor/tiled/techfloor/grid, -/area/miningstation/operationshall) -"gX" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/miningstation/operationshall) -"gY" = ( -/turf/simulated/floor/tiled/techfloor/grid, -/area/miningstation/operationshall2) -"gZ" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/door/airlock/civilian, -/obj/machinery/door/firedoor, -/turf/simulated/floor/tiled/techfloor/grid, -/area/miningstation/bridge) -"ha" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor, -/area/miningstation/bridge) -"hb" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/cable{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 1 - }, -/turf/simulated/floor/tiled/techfloor, -/area/miningstation/bridge) -"hc" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/turf/simulated/floor/tiled/techfloor, -/area/miningstation/bridge) -"hd" = ( -/obj/effect/gibspawner/human, -/turf/simulated/floor/tiled/techfloor, -/area/miningstation/bridge) -"he" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/cable{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 1 - }, -/turf/simulated/floor/tiled/techfloor, -/area/miningstation/bridge) -"hf" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/cable{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/structure/cable{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 1 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/miningstation/operationshall2) -"hg" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/cable{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/effect/gibspawner/human, -/turf/simulated/floor/tiled/techfloor/grid, -/area/miningstation/operationshall2) -"hh" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 1 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/miningstation/operationshall2) -"hi" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/random/trash, -/turf/simulated/floor/tiled/techfloor/grid, -/area/miningstation/operationshall2) -"hj" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/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/simple/hidden/scrubbers, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/miningstation/prep2) -"hk" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply, -/obj/structure/cable{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/miningstation/operationshall2) -"hl" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 8 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/miningstation/operationshall2) -"hm" = ( -/obj/structure/catwalk, -/obj/machinery/computer/atmos_alert, -/turf/simulated/floor/plating, -/area/miningstation/atmos) -"hn" = ( -/obj/machinery/door/airlock/civilian, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/miningstation/atmos) -"ho" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/miningstation/atmos) -"hp" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/obj/structure/cable{ - d2 = 8; - icon_state = "0-8" - }, -/obj/machinery/power/terminal{ - dir = 4 - }, -/obj/machinery/power/apc{ - dir = 4; - name = "east bump"; - pixel_x = 24 - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/miningstation/atmos) -"hq" = ( -/obj/machinery/cryopod{ - dir = 2 - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 9; - icon_state = "warning" - }, -/turf/simulated/floor/tiled/white, -/area/miningstation/cryo) -"hr" = ( -/obj/machinery/power/terminal{ - dir = 1 - }, -/obj/machinery/power/apc{ - dir = 1; - name = "north bump"; - pixel_y = 24; - req_access = list(list("ACCESS_ENGINE_EQUIP","ACCESS_ATMOS")) - }, -/obj/structure/cable{ - d2 = 2; - icon_state = "0-2" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/miningstation/operationshall) -"hs" = ( -/obj/structure/broken_cryo, -/obj/effect/floor_decal/industrial/warning{ - dir = 5; - icon_state = "warning" - }, -/turf/simulated/floor/tiled/white, -/area/miningstation/cryo) -"ht" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 8 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/miningstation/operationshall) -"hu" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/cable{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/miningstation/operationshall) -"hv" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/miningstation/operationshall2) -"hw" = ( -/obj/effect/paint/black, -/turf/simulated/wall/r_titanium, -/area/miningstation/janitorcloset) -"hx" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/door/airlock/civilian, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/door/firedoor, -/turf/simulated/floor/tiled/techfloor/grid, -/area/miningstation/janitorcloset) -"hz" = ( -/obj/structure/table/steel, -/obj/machinery/light{ - dir = 8; - icon_state = "tube1" - }, -/turf/simulated/floor/tiled/techfloor, -/area/miningstation/bridge) -"hA" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 8 - }, -/turf/simulated/floor/tiled/techfloor, -/area/miningstation/bridge) -"hB" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 8 - }, -/turf/simulated/floor/tiled/techfloor, -/area/miningstation/bridge) -"hC" = ( -/obj/machinery/computer/modular/preset/engineering{ - dir = 8; - icon_state = "console" - }, -/turf/simulated/floor/tiled/techfloor, -/area/miningstation/bridge) -"hD" = ( -/obj/machinery/computer/modular/preset/engineering{ - dir = 4; - icon_state = "console" - }, -/turf/simulated/floor/tiled/techfloor, -/area/miningstation/bridge) -"hE" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/tiled/techfloor, -/area/miningstation/bridge) -"hF" = ( -/obj/machinery/computer/modular/preset/engineering{ - dir = 8; - icon_state = "console" - }, -/obj/machinery/light{ - dir = 4; - icon_state = "tube1" - }, -/turf/simulated/floor/tiled/techfloor, -/area/miningstation/bridge) -"hG" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 8 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/miningstation/operationshall2) -"hH" = ( -/obj/machinery/power/terminal, -/obj/machinery/power/apc{ - name = "south bump"; - pixel_y = -28 - }, -/obj/structure/cable, -/turf/simulated/floor/tiled/techfloor/grid, -/area/miningstation/janitorcloset) -"hI" = ( -/obj/machinery/light{ - dir = 4; - icon_state = "tube1" - }, -/obj/effect/floor_decal/corner/blue{ - dir = 6 - }, -/turf/simulated/floor/tiled/white, -/area/miningstation/cryo) -"hJ" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/miningstation/atmos) -"hK" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/miningstation/atmos) -"hL" = ( -/obj/structure/catwalk, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/obj/machinery/light/small{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/miningstation/atmos) -"hM" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/effect/paint/black, -/turf/simulated/wall/r_titanium, -/area/miningstation/atmos) -"hO" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/cable{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/structure/cable{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/random/trash, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 1 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/miningstation/operationshall) -"hP" = ( -/obj/structure/table/rack, -/obj/item/inflatable_dispenser, -/turf/simulated/floor/tiled/techfloor/grid, -/area/miningstation/operationshall) -"hQ" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/miningstation/operationshall) -"hS" = ( -/obj/structure/closet/l3closet/janitor, -/turf/simulated/floor/tiled/techfloor/grid, -/area/miningstation/janitorcloset) -"hT" = ( -/turf/simulated/floor/tiled/techfloor/grid, -/area/miningstation/janitorcloset) -"hU" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 4; - level = 2 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/miningstation/janitorcloset) -"hV" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/miningstation/janitorcloset) -"hW" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 8 - }, -/obj/machinery/light_switch{ - pixel_y = 32 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/miningstation/janitorcloset) -"hX" = ( -/obj/structure/closet/jcloset, -/turf/simulated/floor/tiled/techfloor/grid, -/area/miningstation/janitorcloset) -"hY" = ( -/obj/structure/table/steel, -/obj/machinery/alarm{ - dir = 4; - pixel_x = -24 - }, -/turf/simulated/floor/tiled/techfloor, -/area/miningstation/bridge) -"hZ" = ( -/obj/structure/bed/chair/office, -/turf/simulated/floor/tiled/techfloor, -/area/miningstation/bridge) -"ia" = ( -/obj/machinery/washing_machine, -/turf/simulated/floor/tiled/white, -/area/miningstation/bathroom) -"ib" = ( -/obj/structure/bed/chair/office{ - dir = 1 - }, -/turf/simulated/floor/tiled/techfloor, -/area/miningstation/bridge) -"ic" = ( -/obj/machinery/power/terminal{ - dir = 8 - }, -/obj/machinery/power/apc{ - dir = 8; - name = "west bump"; - pixel_x = -24 - }, -/turf/simulated/floor/tiled/techfloor, -/area/miningstation/chief) -"ie" = ( -/obj/machinery/power/terminal{ - dir = 4 - }, -/obj/machinery/power/apc{ - dir = 4; - name = "east bump"; - pixel_x = 24 - }, -/obj/structure/cable{ - d2 = 8; - icon_state = "0-8" - }, -/turf/simulated/floor/tiled/freezer, -/area/miningstation/bathroom) -"if" = ( -/obj/structure/table/steel, -/obj/item/storage/firstaid/surgery, -/obj/item/storage/firstaid/adv, -/obj/effect/floor_decal/corner/blue{ - dir = 9 - }, -/obj/effect/floor_decal/corner/blue{ - dir = 5 - }, -/obj/machinery/power/terminal{ - dir = 1 - }, -/obj/machinery/power/apc{ - dir = 1; - name = "north bump"; - pixel_y = 24; - req_access = list("ACCESS_MERCHANT") - }, -/obj/structure/cable{ - d2 = 2; - icon_state = "0-2" - }, -/turf/simulated/floor/tiled/white, -/area/miningstation/surgery) -"ig" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/effect/gibspawner/human, -/turf/simulated/floor/tiled/techfloor, -/area/miningstation/chief2) -"ih" = ( -/obj/structure/table/standard, -/obj/item/storage/box/detergent, -/obj/structure/bedsheetbin, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/miningstation/bathroom) -"ii" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply, -/mob/living/simple_animal/hostile/meat/horrorminer, -/turf/simulated/floor/tiled/techfloor/grid, -/area/miningstation/operationshall) -"ij" = ( -/obj/machinery/door/airlock/civilian, -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/miningstation/cryo) -"ik" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/unary/vent_pump/on, -/obj/effect/gibspawner/human, -/turf/simulated/floor/tiled/techfloor, -/area/miningstation/dorms3) -"il" = ( -/obj/machinery/light/small, -/turf/simulated/floor/tiled/techfloor/grid, -/area/miningstation/janitorcloset) -"im" = ( -/obj/structure/mopbucket, -/obj/item/mop, -/turf/simulated/floor/tiled/techfloor/grid, -/area/miningstation/janitorcloset) -"in" = ( -/obj/machinery/power/terminal{ - dir = 4 - }, -/obj/machinery/power/apc{ - dir = 4; - name = "east bump"; - pixel_x = 24 - }, -/obj/structure/cable{ - d2 = 8; - icon_state = "0-8" - }, -/turf/simulated/floor/tiled/techfloor, -/area/miningstation/chief2) -"io" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/miningstation/bathroom) -"ip" = ( -/obj/structure/janitorialcart, -/turf/simulated/floor/tiled/techfloor/grid, -/area/miningstation/janitorcloset) -"iq" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/effect/gibspawner/human, -/turf/simulated/floor/tiled/techfloor, -/area/miningstation/dorms) -"ir" = ( -/obj/effect/gibspawner/human, -/turf/simulated/floor/tiled/techfloor, -/area/miningstation/dorms) -"is" = ( -/obj/structure/table/steel, -/obj/random/technology_scanner, -/turf/simulated/floor/tiled/techfloor, -/area/miningstation/bridge) -"it" = ( -/obj/structure/bed/roller/ironingboard, -/obj/item/ironingiron, -/obj/machinery/alarm{ - dir = 8; - pixel_x = 25; - req_access = list(list("ACCESS_ENGINE_EQUIP","ACCESS_ATMOS")) - }, -/turf/simulated/floor/tiled/white, -/area/miningstation/bathroom) -"iu" = ( -/obj/structure/bed/padded, -/obj/effect/floor_decal/corner/blue{ - dir = 5 - }, -/obj/effect/floor_decal/corner/blue{ - dir = 9 - }, -/obj/effect/floor_decal/corner/blue{ - dir = 9 - }, -/turf/simulated/floor/tiled/white, -/area/miningstation/intensive) -"iv" = ( -/obj/structure/table/steel, -/obj/structure/curtain/open/privacy, -/obj/effect/floor_decal/corner/blue{ - dir = 5 - }, -/obj/random/medical, -/turf/simulated/floor/tiled/white, -/area/miningstation/intensive) -"iw" = ( -/obj/item/pipe/injector, -/turf/simulated/floor/plating, -/area/miningstation/atmos) -"ix" = ( -/obj/machinery/power/terminal, -/obj/structure/cable{ - d1 = 32; - d2 = 4; - icon_state = "32-4" - }, -/turf/simulated/floor/tiled/techfloor, -/area/miningstation/bridge) -"iy" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/turf/simulated/floor/tiled/techfloor, -/area/miningstation/bridge) -"iz" = ( -/obj/structure/closet/emcloset, -/obj/effect/floor_decal/industrial/hatch, -/turf/simulated/floor/tiled/techfloor/grid, -/area/miningstation/operationshall2) -"iA" = ( -/obj/machinery/power/terminal, -/obj/effect/floor_decal/corner/blue{ - dir = 9 - }, -/obj/effect/floor_decal/corner/blue, -/obj/random/trash, -/obj/machinery/power/apc{ - name = "south bump"; - pixel_y = -28 - }, -/obj/machinery/light{ - dir = 8 - }, -/obj/structure/cable, -/obj/machinery/light_switch{ - pixel_x = -32 - }, -/turf/simulated/floor/tiled/white, -/area/miningstation/physician1) -"iB" = ( -/obj/machinery/light{ - dir = 8; - icon_state = "tube1" - }, -/obj/effect/gibspawner/human, -/turf/simulated/floor/tiled/techfloor/grid, -/area/miningstation/operationshall2) -"iC" = ( -/obj/item/storage/toolbox/electrical, -/obj/machinery/power/terminal{ - dir = 1 - }, -/obj/machinery/power/apc{ - dir = 1; - name = "north bump"; - pixel_y = 24; - req_access = list("ACCESS_MERCHANT") - }, -/obj/structure/cable{ - d2 = 2; - icon_state = "0-2" - }, -/turf/simulated/floor/tiled/techfloor, -/area/miningstation/dorms3) -"iD" = ( -/obj/effect/floor_decal/corner/blue{ - dir = 5 - }, -/obj/effect/gibspawner/human, -/turf/simulated/floor/tiled/white, -/area/miningstation/intensive) -"iE" = ( -/obj/effect/floor_decal/corner/blue{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/white, -/area/miningstation/intensive) -"iF" = ( -/obj/random/trash, -/obj/structure/table/steel, -/obj/effect/floor_decal/corner/blue{ - dir = 5 - }, -/obj/random/technology_scanner, -/turf/simulated/floor/tiled/white, -/area/miningstation/intensive) -"iG" = ( -/obj/random/trash, -/obj/machinery/light{ - dir = 1 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/miningstation/operationshall2) -"iH" = ( -/obj/machinery/power/terminal{ - dir = 8 - }, -/obj/machinery/power/apc{ - dir = 8; - name = "west bump"; - pixel_x = -24 - }, -/obj/effect/floor_decal/corner/blue{ - dir = 5 - }, -/obj/effect/floor_decal/corner/blue{ - dir = 9 - }, -/obj/structure/cable{ - d2 = 4; - icon_state = "0-4" - }, -/turf/simulated/floor/tiled/white, -/area/miningstation/intensive) -"iI" = ( -/obj/effect/floor_decal/corner/blue{ - dir = 9 - }, -/obj/effect/floor_decal/corner/blue{ - dir = 5 - }, -/obj/machinery/alarm, -/obj/machinery/light{ - dir = 8 - }, -/obj/machinery/light_switch{ - pixel_x = -32 - }, -/turf/simulated/floor/tiled/white, -/area/miningstation/physician2) -"iJ" = ( -/obj/machinery/power/terminal, -/obj/effect/floor_decal/corner/blue{ - dir = 9 - }, -/obj/effect/floor_decal/corner/blue, -/obj/effect/floor_decal/corner/blue{ - dir = 8 - }, -/obj/machinery/power/apc{ - name = "south bump"; - pixel_y = -28 - }, -/obj/machinery/light{ - dir = 8 - }, -/obj/structure/cable, -/turf/simulated/floor/tiled/white, -/area/miningstation/physician2) -"iK" = ( -/obj/machinery/power/apc{ - dir = 1; - name = "north bump"; - pixel_y = 24; - req_access = list(list("ACCESS_ENGINE_EQUIP","ACCESS_ATMOS")) - }, -/obj/machinery/power/terminal{ - dir = 1 - }, -/obj/effect/floor_decal/corner/blue{ - dir = 4 - }, -/obj/effect/floor_decal/corner/blue{ - dir = 8 - }, -/obj/structure/cable{ - d2 = 2; - icon_state = "0-2" - }, -/turf/simulated/floor/tiled/white, -/area/miningstation/kitchen) -"iL" = ( -/obj/machinery/power/terminal{ - dir = 4 - }, -/obj/machinery/power/apc{ - dir = 4; - name = "east bump"; - pixel_x = 24 - }, -/obj/structure/cable{ - d2 = 8; - icon_state = "0-8" - }, -/turf/simulated/floor/tiled/freezer, -/area/miningstation/walkin) -"iM" = ( -/obj/machinery/power/terminal, -/obj/machinery/power/apc{ - name = "south bump"; - pixel_y = -28 - }, -/obj/structure/cable, -/turf/simulated/floor/tiled/techfloor, -/area/miningstation/dorms2) -"iN" = ( -/obj/effect/floor_decal/corner/blue{ - dir = 5 - }, -/obj/structure/table/steel, -/turf/simulated/floor/tiled/white, -/area/miningstation/intensive) -"iO" = ( -/obj/effect/floor_decal/corner/blue{ - dir = 5 - }, -/obj/effect/floor_decal/corner/blue{ - dir = 6 - }, -/obj/structure/table/steel, -/obj/item/storage/firstaid/toxin, -/turf/simulated/floor/tiled/white, -/area/miningstation/intensive) -"iP" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 4 - }, -/obj/machinery/light{ - dir = 8; - icon_state = "tube1" - }, -/turf/simulated/floor/tiled/white, -/area/miningstation/bathroom) -"iQ" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/random/trash, -/obj/machinery/light/small, -/turf/simulated/floor/tiled/white, -/area/miningstation/bathroom) -"iR" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 8 - }, -/obj/effect/gibspawner/human, -/turf/simulated/floor/tiled/techfloor/grid, -/area/miningstation/operationshall) -"iS" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/effect/gibspawner/human, -/turf/simulated/floor/tiled/white, -/area/miningstation/bathroom) -"iT" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/miningstation/bathroom) -"iU" = ( -/obj/structure/bed/roller/ironingboard, -/obj/item/ironingiron, -/obj/item/device/radio/intercom{ - dir = 8; - pixel_x = 21 - }, -/obj/machinery/light/small, -/turf/simulated/floor/tiled/white, -/area/miningstation/bathroom) -"iV" = ( -/obj/effect/floor_decal/corner/blue{ - dir = 9 - }, -/turf/simulated/floor/tiled/white, -/area/miningstation/intensive) -"iW" = ( -/obj/structure/curtain/open/privacy, -/turf/simulated/floor/tiled/white, -/area/miningstation/intensive) -"iX" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/miningstation/intensive) -"iY" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/mob/living/simple_animal/hostile/meat/horror, -/turf/simulated/floor/tiled/white, -/area/miningstation/intensive) -"iZ" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/light, -/turf/simulated/floor/tiled/techfloor/grid, -/area/miningstation/operationshall2) -"ja" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/miningstation/intensive) -"jb" = ( -/obj/random/trash, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/miningstation/intensive) -"jc" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 1 - }, -/turf/simulated/floor/tiled/white, -/area/miningstation/intensive) -"jd" = ( -/obj/effect/floor_decal/corner/blue{ - dir = 6 - }, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 8 - }, -/obj/structure/table/steel, -/obj/item/storage/firstaid/trauma, -/turf/simulated/floor/tiled/white, -/area/miningstation/intensive) -"je" = ( -/obj/machinery/door/airlock/civilian, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/door/firedoor, -/turf/simulated/floor/tiled/techfloor, -/area/miningstation/bathroom) -"jg" = ( -/obj/machinery/door/airlock/civilian, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/door/firedoor, -/turf/simulated/floor/tiled/techfloor, -/area/miningstation/chief) -"jh" = ( -/obj/structure/filingcabinet/wallcabinet, -/obj/effect/paint/black, -/turf/simulated/wall/r_titanium, -/area/miningstation/chief2) -"ji" = ( -/obj/machinery/body_scan_display, -/obj/effect/paint/black, -/turf/simulated/wall/r_titanium, -/area/miningstation/intensive) -"jj" = ( -/obj/structure/sign/bluecross_2, -/obj/effect/paint/black, -/turf/simulated/wall/r_titanium, -/area/miningstation/intensive) -"jk" = ( -/obj/machinery/door/airlock/civilian, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/door/firedoor, -/turf/simulated/floor/tiled/techfloor/grid, -/area/miningstation/intensive) -"jl" = ( -/obj/effect/paint/black, -/turf/simulated/wall/r_titanium, -/area/miningstation/physician2) -"jm" = ( -/obj/structure/hygiene/shower{ - dir = 4 - }, -/obj/machinery/light{ - dir = 8 - }, -/turf/simulated/floor/tiled/freezer, -/area/miningstation/bathroom) -"jn" = ( -/obj/structure/curtain/open/privacy, -/turf/simulated/floor/tiled/freezer, -/area/miningstation/bathroom) -"jo" = ( -/obj/machinery/firealarm, -/obj/machinery/light{ - dir = 1 - }, -/turf/simulated/floor/tiled/freezer, -/area/miningstation/bathroom) -"jp" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/cable{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/freezer, -/area/miningstation/bathroom) -"jr" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/vending/lavatory, -/turf/simulated/floor/tiled/freezer, -/area/miningstation/bathroom) -"js" = ( -/obj/machinery/power/terminal, -/obj/machinery/power/apc{ - name = "south bump"; - pixel_y = -28 - }, -/obj/structure/cable, -/turf/simulated/floor/tiled/techfloor, -/area/miningstation/dorms) -"jt" = ( -/obj/machinery/door/airlock/civilian, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/door/firedoor, -/turf/simulated/floor/tiled/techfloor, -/area/miningstation/chief2) -"ju" = ( -/obj/structure/filingcabinet/wallcabinet, -/obj/effect/paint/black, -/turf/simulated/wall/r_titanium, -/area/miningstation/chief) -"jv" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 4; - level = 2 - }, -/obj/machinery/light_switch{ - pixel_y = 32 - }, -/turf/simulated/floor/tiled/techfloor, -/area/miningstation/chief) -"jw" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 - }, -/turf/simulated/floor/tiled/techfloor, -/area/miningstation/chief) -"jx" = ( -/obj/machinery/power/terminal{ - dir = 8 - }, -/obj/machinery/power/apc{ - dir = 8; - name = "west bump"; - pixel_x = -24 - }, -/obj/structure/cable{ - d2 = 4; - icon_state = "0-4" - }, -/turf/simulated/floor/tiled/techfloor, -/area/miningstation/mess) -"jz" = ( -/obj/machinery/vitals_monitor, -/obj/effect/floor_decal/corner/blue{ - dir = 5 - }, -/obj/effect/floor_decal/corner/blue{ - dir = 6 - }, -/turf/simulated/floor/tiled/white, -/area/miningstation/surgery) -"jA" = ( -/obj/machinery/firealarm{ - dir = 8; - pixel_x = -24 - }, -/obj/effect/floor_decal/corner/blue{ - dir = 5 - }, -/obj/effect/floor_decal/corner/blue{ - dir = 9 - }, -/obj/structure/closet/body_bag, -/turf/simulated/floor/tiled/white, -/area/miningstation/intensive) -"jB" = ( -/obj/structure/cable{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, -/obj/effect/floor_decal/corner/blue{ - dir = 5 - }, -/turf/simulated/floor/tiled/white, -/area/miningstation/intensive) -"jC" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/obj/effect/floor_decal/corner/blue{ - dir = 5 - }, -/obj/effect/floor_decal/corner/blue, -/turf/simulated/floor/tiled/white, -/area/miningstation/intensive) -"jD" = ( -/obj/structure/sign/directions/examroom, -/obj/effect/paint/black, -/turf/simulated/wall/r_titanium, -/area/miningstation/physician2) -"jE" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor, -/area/miningstation/chief) -"jF" = ( -/obj/machinery/access_button/airlock_interior, -/obj/effect/paint/black, -/turf/simulated/wall/r_titanium, -/area/miningstation/power) -"jG" = ( -/obj/structure/table/steel, -/obj/item/storage/medical_lolli_jar, -/obj/item/paper_bin, -/obj/machinery/power/terminal{ - dir = 1 - }, -/obj/machinery/alarm, -/obj/effect/floor_decal/corner/blue{ - dir = 9 - }, -/obj/machinery/light{ - dir = 8 - }, -/turf/simulated/floor/tiled/white, -/area/miningstation/physician1) -"jH" = ( -/obj/structure/table/steel, -/obj/effect/floor_decal/corner/blue{ - dir = 5 - }, -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/turf/simulated/floor/tiled/white, -/area/miningstation/physician1) -"jI" = ( -/obj/machinery/computer/modular/preset/medical, -/obj/effect/floor_decal/corner/blue, -/obj/effect/floor_decal/corner/blue{ - dir = 5 - }, -/turf/simulated/floor/tiled/white, -/area/miningstation/physician1) -"jJ" = ( -/obj/machinery/light{ - dir = 8; - icon_state = "tube1" - }, -/turf/simulated/floor/tiled/freezer, -/area/miningstation/bathroom) -"jK" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/random/trash, -/turf/simulated/floor/tiled/freezer, -/area/miningstation/bathroom) -"jL" = ( -/obj/machinery/atmospherics/unary/vent_pump/on, -/turf/simulated/floor/tiled/freezer, -/area/miningstation/bathroom) -"jM" = ( -/obj/machinery/light{ - dir = 4; - icon_state = "tube1" - }, -/turf/simulated/floor/tiled/freezer, -/area/miningstation/bathroom) -"jO" = ( -/obj/effect/decal/cleanable/blood/splatter, -/obj/effect/landmark/corpse/miningstation/deadminer, -/turf/simulated/floor/tiled/techfloor/grid, -/area/miningstation/hangarhall) -"jP" = ( -/obj/structure/iv_drip, -/obj/effect/floor_decal/corner/blue{ - dir = 6 - }, -/obj/machinery/light{ - dir = 4; - icon_state = "tube1" - }, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 8 - }, -/obj/machinery/light_switch{ - pixel_x = 32 - }, -/turf/simulated/floor/tiled/white, -/area/miningstation/surgery) -"jQ" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 4 - }, -/obj/machinery/light_switch{ - pixel_y = 32 - }, -/turf/simulated/floor/tiled/techfloor, -/area/miningstation/chief2) -"jR" = ( -/obj/effect/floor_decal/asteroid, -/turf/simulated/floor/asteroid, -/area/space) -"jS" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/turf/simulated/floor/tiled/techfloor, -/area/miningstation/chief2) -"jT" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor, -/area/miningstation/chief2) -"jU" = ( -/obj/structure/table/rack, -/obj/item/shovel, -/obj/item/shovel, -/obj/item/shovel, -/turf/simulated/floor/tiled/techfloor/grid, -/area/miningstation/operationshall) -"jV" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/random/trash, -/turf/simulated/floor/tiled/techfloor/grid, -/area/miningstation/operationshall) -"jW" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/miningstation/operationshall) -"jX" = ( -/obj/structure/closet/emcloset, -/obj/effect/floor_decal/industrial/hatch, -/obj/effect/floor_decal/industrial/hatch/yellow, -/turf/simulated/floor/tiled/techfloor/grid, -/area/miningstation/operationshall) -"jY" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/techfloor/grid, -/area/miningstation/operationshall) -"jZ" = ( -/obj/effect/decal/cleanable/blood/splatter, -/turf/simulated/floor/tiled/techfloor, -/area/miningstation/prep) -"ka" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/turf/simulated/floor/tiled/techfloor, -/area/miningstation/chief) -"kb" = ( -/obj/structure/bed/chair/office, -/turf/simulated/floor/tiled/techfloor, -/area/miningstation/chief) -"kc" = ( -/obj/machinery/alarm{ - dir = 8; - pixel_x = 21 - }, -/turf/simulated/floor/tiled/techfloor, -/area/miningstation/chief) -"kd" = ( -/obj/machinery/alarm{ - dir = 4; - pixel_x = -24 - }, -/turf/simulated/floor/tiled/techfloor, -/area/miningstation/chief2) -"ke" = ( -/obj/effect/gibspawner/human, -/turf/simulated/floor/tiled/techfloor, -/area/miningstation/chief) -"kf" = ( -/obj/structure/bed/chair/office, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/techfloor, -/area/miningstation/chief2) -"kg" = ( -/obj/structure/table/rack, -/obj/machinery/light, -/obj/effect/floor_decal/corner/yellow{ - dir = 10 - }, -/obj/random/toolbox, -/turf/simulated/floor/tiled/techfloor, -/area/miningstation/prep) -"kh" = ( -/turf/simulated/floor/tiled/techfloor, -/area/miningstation/chief2) -"ki" = ( -/obj/structure/table/steel, -/obj/item/storage/bible, -/turf/simulated/floor/tiled/techfloor, -/area/miningstation/chief) -"kj" = ( -/obj/effect/decal/cleanable/blood/splatter, -/obj/machinery/light, -/turf/simulated/floor/tiled/monotile, -/area/miningstation/hangar) -"kk" = ( -/obj/structure/table/steel, -/obj/item/paper_bin, -/turf/simulated/floor/tiled/techfloor, -/area/miningstation/chief) -"kl" = ( -/turf/simulated/floor/tiled/techfloor, -/area/miningstation/chief) -"km" = ( -/obj/item/storage/fancy/cigar{ - pixel_x = 31; - pixel_y = 7 - }, -/turf/simulated/floor/tiled/techfloor, -/area/miningstation/chief2) -"kn" = ( -/obj/structure/table/steel, -/turf/simulated/floor/tiled/techfloor, -/area/miningstation/chief2) -"ko" = ( -/obj/structure/table/steel, -/obj/item/paper_bin{ - pixel_y = 3 - }, -/turf/simulated/floor/tiled/techfloor, -/area/miningstation/chief2) -"kp" = ( -/obj/effect/paint/black, -/turf/simulated/wall/r_titanium, -/area/miningstation/dormhall) -"kq" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/door/airlock/multi_tile/civilian, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/door/firedoor, -/turf/simulated/floor/tiled/techfloor/grid, -/area/miningstation/dormhall) -"kr" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/door/firedoor, -/turf/simulated/floor/tiled/techfloor/grid, -/area/miningstation/dormhall) -"ks" = ( -/obj/effect/paint/black, -/turf/simulated/wall/r_titanium, -/area/miningstation/dorms3) -"kt" = ( -/obj/machinery/light, -/turf/simulated/floor/tiled/techfloor, -/area/miningstation/bridge) -"ku" = ( -/obj/machinery/light, -/obj/structure/bed/chair/office{ - dir = 1 - }, -/turf/simulated/floor/tiled/techfloor, -/area/miningstation/chief2) -"kv" = ( -/obj/machinery/computer/modular/preset/engineering{ - dir = 8; - icon_state = "console" - }, -/turf/simulated/floor/tiled/techfloor, -/area/miningstation/chief) -"kw" = ( -/obj/effect/decal/cleanable/blood/splatter, -/turf/simulated/floor/tiled/techfloor/grid, -/area/miningstation/prep2) -"kx" = ( -/obj/structure/bed/chair/office{ - dir = 1 - }, -/obj/machinery/light, -/turf/simulated/floor/tiled/techfloor, -/area/miningstation/chief) -"ky" = ( -/obj/machinery/computer/modular/preset/merchant{ - dir = 8; - icon_state = "console" - }, -/turf/simulated/floor/tiled/techfloor, -/area/miningstation/chief2) -"kz" = ( -/obj/structure/closet/emcloset, -/obj/effect/floor_decal/industrial/hatch, -/obj/effect/floor_decal/industrial/hatch/yellow, -/turf/simulated/floor/tiled/techfloor/grid, -/area/miningstation/dormhall) -"kA" = ( -/obj/structure/closet/firecloset, -/obj/effect/floor_decal/industrial/hatch, -/obj/effect/floor_decal/industrial/hatch/yellow, -/turf/simulated/floor/tiled/techfloor/grid, -/area/miningstation/dormhall) -"kB" = ( -/obj/machinery/firealarm, -/obj/machinery/light{ - dir = 1 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/miningstation/dormhall) -"kC" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/effect/floor_decal/industrial/warning{ - dir = 1; - icon_state = "warning" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/miningstation/dormhall) -"kD" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 1; - icon_state = "warning" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/miningstation/dormhall) -"kE" = ( -/obj/machinery/light{ - dir = 1 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/miningstation/dormhall) -"kF" = ( -/obj/structure/ore_box, -/turf/simulated/floor/tiled/techfloor/grid, -/area/miningstation/dormhall) -"kG" = ( -/obj/structure/closet/toolcloset, -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/obj/effect/floor_decal/industrial/hatch, -/obj/effect/floor_decal/industrial/hatch/yellow, -/turf/simulated/floor/tiled/techfloor, -/area/miningstation/dorms3) -"kI" = ( -/obj/structure/bed/padded, -/obj/item/bedsheet/rainbow, -/obj/random/contraband, -/turf/simulated/floor/tiled/techfloor, -/area/miningstation/dorms3) -"kJ" = ( -/obj/machinery/light{ - dir = 8; - icon_state = "tube1" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/miningstation/dormhall) -"kK" = ( -/turf/simulated/floor/tiled/techfloor/grid, -/area/miningstation/dormhall) -"kL" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/techfloor/grid, -/area/miningstation/dormhall) -"kM" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/random/trash, -/turf/simulated/floor/tiled/techfloor/grid, -/area/miningstation/dormhall) -"kN" = ( -/obj/machinery/light{ - dir = 4; - icon_state = "tube1" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/miningstation/dormhall) -"kO" = ( -/obj/structure/closet/wardrobe/engineering_yellow, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/light{ - dir = 8; - icon_state = "tube1" - }, -/obj/effect/floor_decal/industrial/hatch, -/obj/effect/floor_decal/industrial/hatch/yellow, -/obj/random/projectile, -/turf/simulated/floor/tiled/techfloor, -/area/miningstation/dorms3) -"kP" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/effect/gibspawner/human, -/turf/simulated/floor/tiled/techfloor, -/area/miningstation/dorms2) -"kQ" = ( -/obj/structure/bed/padded, -/obj/item/bedsheet/purple, -/obj/machinery/alarm{ - dir = 8; - pixel_x = 21 - }, -/turf/simulated/floor/tiled/techfloor, -/area/miningstation/dorms3) -"kR" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 4; - level = 2 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/miningstation/dormhall) -"kS" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/miningstation/dormhall) -"kT" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 8 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/miningstation/dormhall) -"kU" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/miningstation/dormhall) -"kV" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/miningstation/dormhall) -"kW" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 8 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/miningstation/dormhall) -"kX" = ( -/obj/structure/closet/wardrobe/engineering_yellow, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/obj/effect/floor_decal/industrial/hatch, -/obj/effect/floor_decal/industrial/hatch/yellow, -/obj/random/projectile, -/turf/simulated/floor/tiled/techfloor, -/area/miningstation/dorms3) -"kY" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/random/voidsuit, -/obj/random/voidhelmet, -/turf/simulated/floor/tiled/techfloor, -/area/miningstation/dorms3) -"kZ" = ( -/obj/structure/bed/padded, -/obj/item/bedsheet/hos, -/obj/machinery/vending/wallmed1{ - dir = 8; - name = "Emergency NanoMed"; - pixel_x = 28 - }, -/turf/simulated/floor/tiled/techfloor, -/area/miningstation/dorms3) -"la" = ( -/obj/machinery/alarm{ - dir = 4; - pixel_x = -24 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/miningstation/dormhall) -"lb" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/random/trash, -/turf/simulated/floor/tiled/techfloor/grid, -/area/miningstation/dormhall) -"lc" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/miningstation/dormhall) -"ld" = ( -/obj/structure/closet/toolcloset, -/obj/effect/floor_decal/industrial/hatch, -/obj/effect/floor_decal/industrial/hatch/yellow, -/turf/simulated/floor/tiled/techfloor, -/area/miningstation/dorms3) -"le" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/tiled/techfloor, -/area/miningstation/dorms3) -"lf" = ( -/obj/effect/decal/cleanable/blood/splatter, -/turf/simulated/floor/tiled/techfloor/grid, -/area/miningstation/operationshall) -"lg" = ( -/obj/random/trash, -/turf/simulated/floor/tiled/techfloor/grid, -/area/miningstation/dormhall) -"lh" = ( -/obj/random/clipboard, -/obj/machinery/light{ - dir = 4; - icon_state = "tube1" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/miningstation/dormhall) -"li" = ( -/obj/machinery/door/airlock/civilian, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/door/firedoor, -/turf/simulated/floor/plating, -/area/miningstation/dorms3) -"lj" = ( -/obj/machinery/light{ - dir = 1 - }, -/obj/effect/decal/cleanable/blood/splatter, -/turf/simulated/floor/tiled/techfloor/grid, -/area/miningstation/operationshall2) -"lk" = ( -/obj/effect/floor_decal/corner/blue{ - dir = 9 - }, -/obj/machinery/light{ - dir = 8; - icon_state = "tube1" - }, -/obj/structure/closet/body_bag, -/turf/simulated/floor/tiled/white, -/area/miningstation/intensive) -"ll" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/cable{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 8 - }, -/turf/simulated/floor/tiled/white, -/area/miningstation/intensive) -"lm" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/floor_decal/corner/blue{ - dir = 4 - }, -/obj/effect/floor_decal/corner/blue, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/miningstation/intensive) -"ln" = ( -/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 8 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/miningstation/dormhall) -"lo" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/miningstation/dormhall) -"lp" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/mob/living/simple_animal/hostile/meat/humansecurity, -/turf/simulated/floor/tiled/techfloor/grid, -/area/miningstation/dormhall) -"lq" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 8 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/miningstation/dormhall) -"lr" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/light{ - dir = 1 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/miningstation/dormhall) -"ls" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/techfloor/grid, -/area/miningstation/dormhall) -"lt" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 1 - }, -/obj/machinery/light{ - dir = 1 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/miningstation/dormhall) -"lu" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 1 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/miningstation/dormhall) -"lv" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/door/firedoor, -/obj/effect/floor_decal/industrial/hatch/yellow, -/mob/living/simple_animal/hostile/meat/humansecurity, -/turf/simulated/floor/tiled/techfloor/grid, -/area/miningstation/dormhall) -"lw" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/firealarm, -/turf/simulated/floor/tiled/techfloor/grid, -/area/miningstation/dormhall) -"lx" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/turf/simulated/floor/tiled/techfloor/grid, -/area/miningstation/dormhall) -"ly" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/random/trash, -/turf/simulated/floor/tiled/techfloor/grid, -/area/miningstation/dormhall) -"lz" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 1 - }, -/obj/random/tool, -/turf/simulated/floor/tiled/techfloor/grid, -/area/miningstation/dormhall) -"lB" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/techfloor/grid, -/area/miningstation/dormhall) -"lC" = ( -/obj/machinery/door/airlock/civilian, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/miningstation/physician1) -"lD" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/alarm, -/turf/simulated/floor/tiled/techfloor/grid, -/area/miningstation/dormhall) -"lE" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/techfloor/grid, -/area/miningstation/dormhall) -"lF" = ( -/obj/structure/cable{ - icon_state = "2-8" - }, -/obj/effect/floor_decal/corner/blue{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/miningstation/physician1) -"lG" = ( -/obj/structure/bed/chair/office, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/turf/simulated/floor/tiled/white, -/area/miningstation/physician1) -"lH" = ( -/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/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, -/obj/machinery/light, -/mob/living/simple_animal/hostile/meat/horror, -/turf/simulated/floor/tiled/techfloor/grid, -/area/miningstation/operationshall2) -"lJ" = ( -/obj/random/trash, -/obj/effect/floor_decal/corner/blue{ - dir = 5 - }, -/obj/machinery/light{ - dir = 1 - }, -/turf/simulated/floor/tiled/white, -/area/miningstation/intensive) -"lK" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/miningstation/dormhall) -"lL" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/light, -/turf/simulated/floor/tiled/techfloor/grid, -/area/miningstation/dormhall) -"lM" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/cable{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/structure/cable{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/tiled/techfloor/grid, -/area/miningstation/dormhall) -"lN" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/cable{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/tiled/techfloor/grid, -/area/miningstation/dormhall) -"lO" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 1 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/miningstation/dormhall) -"lP" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/door/firedoor, -/obj/effect/floor_decal/industrial/hatch/yellow, -/turf/simulated/floor/tiled/techfloor/grid, -/area/miningstation/dormhall) -"lQ" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, -/turf/simulated/floor/tiled/techfloor/grid, -/area/miningstation/dormhall) -"lR" = ( -/obj/effect/decal/cleanable/blood/splatter, -/obj/structure/cable{ - icon_state = "2-8" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/miningstation/operationshall2) -"lS" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/alarm{ - dir = 1; - pixel_y = -25 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/miningstation/dormhall) -"lT" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 1 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/miningstation/dormhall) -"lU" = ( -/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/manifold/hidden/scrubbers, -/obj/machinery/light, -/turf/simulated/floor/tiled/techfloor/grid, -/area/miningstation/dormhall) -"lV" = ( -/turf/simulated/floor/tiled/freezer, -/area/miningstation/bathroom) -"lW" = ( -/obj/structure/cable{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/structure/cable{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/miningstation/dormhall) -"lX" = ( -/obj/machinery/light, -/turf/simulated/floor/tiled/techfloor/grid, -/area/miningstation/dormhall) -"lY" = ( -/obj/structure/closet/crate/trashcart, -/obj/effect/floor_decal/industrial/hatch/yellow, -/turf/simulated/floor/tiled/techfloor/grid, -/area/miningstation/dormhall) -"lZ" = ( -/obj/random/trash, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/miningstation/dormhall) -"ma" = ( -/obj/machinery/computer/modular/preset/supply_public{ - dir = 1; - icon_state = "console" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/miningstation/dormhall) -"mb" = ( -/obj/effect/paint/black, -/turf/simulated/wall/r_titanium, -/area/miningstation/dorms2) -"mc" = ( -/obj/machinery/door/airlock/civilian, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/door/firedoor, -/turf/simulated/floor/plating, -/area/miningstation/dorms2) -"md" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/freezer, -/area/miningstation/bathroom) -"me" = ( -/obj/effect/paint/black, -/turf/simulated/wall/r_titanium, -/area/miningstation/dorms) -"mf" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 - }, -/turf/simulated/floor/tiled/freezer, -/area/miningstation/bathroom) -"mg" = ( -/obj/machinery/door/airlock/civilian, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/door/firedoor, -/turf/simulated/floor/plating, -/area/miningstation/dorms) -"mh" = ( -/obj/machinery/door/airlock/civilian, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/door/firedoor, -/turf/simulated/floor/tiled/techfloor/grid, -/area/miningstation/dorms) -"mi" = ( -/obj/effect/paint/black, -/turf/simulated/wall/r_titanium, -/area/miningstation/mess) -"mj" = ( -/obj/structure/hygiene/sink{ - dir = 4; - pixel_x = 11; - pixel_y = 5 - }, -/turf/simulated/floor/tiled/freezer, -/area/miningstation/bathroom) -"mk" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, -/turf/simulated/floor/tiled/techfloor, -/area/miningstation/bridge) -"ml" = ( -/obj/effect/floor_decal/corner/blue{ - dir = 8 - }, -/obj/effect/floor_decal/corner/blue, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/white, -/area/miningstation/surgery) -"mm" = ( -/obj/machinery/door/airlock/multi_tile/civilian, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/door/firedoor, -/obj/machinery/door/firedoor, -/turf/simulated/floor/plating, -/area/miningstation/mess) -"mn" = ( -/obj/item/device/radio/intercom, -/obj/effect/paint/black, -/turf/simulated/wall/r_titanium, -/area/miningstation/janitorcloset) -"mo" = ( -/obj/effect/floor_decal/corner/blue{ - dir = 9 - }, -/obj/structure/closet/body_bag, -/turf/simulated/floor/tiled/white, -/area/miningstation/intensive) -"mp" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/white, -/area/miningstation/intensive) -"mq" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/door/firedoor, -/obj/machinery/door/firedoor, -/turf/simulated/floor/plating, -/area/miningstation/mess) -"mr" = ( -/obj/effect/paint/black, -/turf/simulated/wall/r_titanium, -/area/miningstation/kitchen) -"ms" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/door/airlock/civilian, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/door/firedoor, -/turf/simulated/floor/plating, -/area/miningstation/kitchen) -"mt" = ( -/obj/structure/table/steel, -/obj/item/stack/medical/ointment, -/obj/effect/floor_decal/corner/blue{ - dir = 4 - }, -/obj/effect/floor_decal/corner/blue, -/turf/simulated/floor/tiled/white, -/area/miningstation/intensive) -"mu" = ( -/obj/structure/hygiene/sink/kitchen, -/obj/effect/paint/black, -/turf/simulated/wall/r_titanium, -/area/miningstation/kitchen) -"mv" = ( -/obj/effect/paint/black, -/turf/simulated/wall/r_titanium, -/area/miningstation/walkin) -"mw" = ( -/obj/effect/floor_decal/corner/blue{ - dir = 5 - }, -/obj/structure/table/steel, -/obj/machinery/light{ - dir = 1 - }, -/turf/simulated/floor/tiled/white, -/area/miningstation/intensive) -"mx" = ( -/obj/structure/lattice, -/obj/effect/paint/black, -/turf/simulated/wall/r_titanium, -/area/miningstation/walkin) -"my" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 1 - }, -/obj/effect/floor_decal/corner/blue, -/obj/effect/floor_decal/corner/blue{ - dir = 8 - }, -/turf/simulated/floor/tiled/white, -/area/miningstation/physician1) -"mz" = ( -/obj/effect/paint/black, -/turf/simulated/wall/r_titanium, -/area/miningstation/recroom) -"mA" = ( -/obj/machinery/door/airlock/multi_tile/civilian, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/door/firedoor, -/turf/simulated/floor/tiled/techfloor/grid, -/area/miningstation/recroom) -"mB" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/door/firedoor, -/turf/simulated/floor/tiled/techfloor/grid, -/area/miningstation/recroom) -"mC" = ( -/obj/structure/closet/toolcloset, -/obj/effect/floor_decal/industrial/hatch, -/obj/effect/floor_decal/industrial/hatch/yellow, -/turf/simulated/floor/tiled/techfloor, -/area/miningstation/dorms2) -"mD" = ( -/obj/machinery/light, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/turf/simulated/floor/tiled/white, -/area/miningstation/intensive) -"mE" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/freezer, -/area/miningstation/bathroom) -"mF" = ( -/obj/effect/floor_decal/asteroid, -/turf/simulated/mineral, -/area/space) -"mG" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/tiled/techfloor, -/area/miningstation/dorms2) -"mH" = ( -/obj/structure/bed/padded, -/obj/item/bedsheet/brown, -/turf/simulated/floor/tiled/techfloor, -/area/miningstation/dorms2) -"mI" = ( -/obj/structure/closet/toolcloset, -/obj/effect/floor_decal/industrial/hatch, -/turf/simulated/floor/tiled/techfloor, -/area/miningstation/dorms) -"mJ" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/effect/gibspawner/human, -/turf/simulated/floor/tiled/techfloor, -/area/miningstation/mess) -"mK" = ( -/obj/machinery/firealarm, -/turf/simulated/floor/tiled/techfloor, -/area/miningstation/dorms) -"mL" = ( -/obj/item/storage/toolbox/mechanical, -/obj/machinery/light{ - dir = 1 - }, -/turf/simulated/floor/tiled/techfloor, -/area/miningstation/dorms) -"mM" = ( -/obj/machinery/atmospherics/unary/vent_pump/on, -/turf/simulated/floor/tiled/techfloor, -/area/miningstation/dorms) -"mN" = ( -/turf/simulated/floor/tiled/techfloor, -/area/miningstation/dorms) -"mO" = ( -/obj/machinery/alarm, -/turf/simulated/floor/tiled/techfloor, -/area/miningstation/dorms) -"mP" = ( -/obj/item/device/radio/intercom, -/turf/simulated/floor/tiled/techfloor, -/area/miningstation/dorms) -"mQ" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/obj/machinery/light{ - dir = 1 - }, -/turf/simulated/floor/tiled/techfloor, -/area/miningstation/dorms) -"mR" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/effect/decal/cleanable/blood/splatter, -/turf/simulated/floor/tiled/techfloor/grid, -/area/miningstation/operationshall2) -"mS" = ( -/obj/machinery/vending/snack, -/turf/simulated/floor/tiled/techfloor, -/area/miningstation/mess) -"mT" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/techfloor, -/area/miningstation/mess) -"mU" = ( -/obj/structure/lattice, -/turf/simulated/mineral, -/area/space) -"mV" = ( -/obj/random/trash, -/turf/simulated/floor/tiled/freezer, -/area/miningstation/bathroom) -"mW" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/techfloor, -/area/miningstation/mess) -"mX" = ( -/obj/item/storage/mirror{ - icon_state = "mirror_broke"; - pixel_y = 32 - }, -/obj/effect/paint/black, -/turf/simulated/wall/r_titanium, -/area/miningstation/bathroom) -"mY" = ( -/obj/effect/paint/black, -/turf/simulated/wall/r_titanium, -/area/miningstation/surgery) -"mZ" = ( -/obj/structure/lattice, -/turf/simulated/floor/asteroid, -/area/space) -"na" = ( -/obj/machinery/door/airlock/civilian, -/obj/machinery/door/firedoor, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/techfloor/grid, -/area/miningstation/surgery) -"nb" = ( -/obj/effect/floor_decal/corner/blue, -/obj/effect/floor_decal/corner/blue{ - dir = 4 - }, -/obj/machinery/light{ - dir = 4; - icon_state = "tube1" - }, -/turf/simulated/floor/tiled/white, -/area/miningstation/physician1) -"nc" = ( -/obj/structure/iv_drip, -/obj/effect/floor_decal/corner/blue{ - dir = 9 - }, -/obj/structure/closet/body_bag, -/turf/simulated/floor/tiled/white, -/area/miningstation/intensive) -"nd" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/random/trash, -/turf/simulated/floor/tiled/white, -/area/miningstation/intensive) -"ne" = ( -/obj/effect/floor_decal/corner/blue{ - dir = 6 - }, -/obj/structure/bed/roller, -/turf/simulated/floor/tiled/white, -/area/miningstation/intensive) -"nf" = ( -/obj/structure/hygiene/toilet{ - dir = 4 - }, -/obj/machinery/light{ - dir = 8 - }, -/turf/simulated/floor/tiled/freezer, -/area/miningstation/bathroom) -"ng" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 8 - }, -/turf/simulated/floor/tiled/freezer, -/area/miningstation/bathroom) -"nh" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 8 - }, -/turf/simulated/floor/tiled/freezer, -/area/miningstation/bathroom) -"ni" = ( -/obj/machinery/vending/sovietsoda, -/turf/simulated/floor/tiled/techfloor, -/area/miningstation/mess) -"nj" = ( -/obj/machinery/vending/soda, -/turf/simulated/floor/tiled/techfloor, -/area/miningstation/mess) -"nk" = ( -/obj/structure/bed/chair{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor, -/area/miningstation/mess) -"nl" = ( -/obj/structure/table/steel, -/obj/machinery/light{ - dir = 1 - }, -/turf/simulated/floor/tiled/techfloor, -/area/miningstation/mess) -"nm" = ( -/obj/structure/bed/chair{ - dir = 8 - }, -/turf/simulated/floor/tiled/techfloor, -/area/miningstation/mess) -"nn" = ( -/obj/machinery/vending/hotfood, -/turf/simulated/floor/tiled/techfloor, -/area/miningstation/mess) -"no" = ( -/obj/machinery/optable, -/obj/effect/floor_decal/corner/blue{ - dir = 5 - }, -/obj/effect/decal/cleanable/blood/splatter, -/turf/simulated/floor/tiled/white, -/area/miningstation/surgery) -"nq" = ( -/obj/machinery/smartfridge/foods, -/obj/effect/floor_decal/corner/blue{ - dir = 4 - }, -/obj/effect/floor_decal/corner/blue{ - dir = 8 - }, -/turf/simulated/floor/plating, -/area/miningstation/mess) -"nr" = ( -/obj/effect/floor_decal/corner/blue{ - dir = 4 - }, -/obj/effect/floor_decal/corner/blue{ - dir = 8 - }, -/turf/simulated/floor/tiled/white, -/area/miningstation/kitchen) -"ns" = ( -/obj/machinery/alarm, -/obj/effect/floor_decal/corner/blue{ - dir = 4 - }, -/obj/effect/floor_decal/corner/blue{ - dir = 8 - }, -/turf/simulated/floor/tiled/white, -/area/miningstation/kitchen) -"nt" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/effect/floor_decal/corner/blue{ - dir = 4 - }, -/obj/effect/floor_decal/corner/blue{ - dir = 8 - }, -/turf/simulated/floor/tiled/white, -/area/miningstation/kitchen) -"nu" = ( -/obj/machinery/vending/dinnerware, -/obj/effect/floor_decal/corner/blue{ - dir = 4 - }, -/obj/effect/floor_decal/corner/blue{ - dir = 8 - }, -/obj/machinery/light{ - dir = 1 - }, -/turf/simulated/floor/tiled/white, -/area/miningstation/kitchen) -"nv" = ( -/obj/machinery/alarm{ - dir = 4; - pixel_x = -24 - }, -/obj/effect/floor_decal/corner/blue{ - dir = 9 - }, -/obj/structure/cable{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/effect/decal/cleanable/blood/splatter, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 4; - level = 2 - }, -/turf/simulated/floor/tiled/white, -/area/miningstation/surgery) -"nw" = ( -/obj/structure/table/marble, -/obj/machinery/cooker/candy, -/obj/effect/floor_decal/corner/blue{ - dir = 4 - }, -/obj/effect/floor_decal/corner/blue{ - dir = 8 - }, -/turf/simulated/floor/tiled/white, -/area/miningstation/kitchen) -"nx" = ( -/obj/effect/gibspawner/human, -/obj/effect/floor_decal/corner/blue{ - dir = 6 - }, -/obj/effect/floor_decal/corner/blue{ - dir = 1 - }, -/turf/simulated/floor/tiled/white, -/area/miningstation/cryo) -"ny" = ( -/obj/machinery/light{ - dir = 1 - }, -/obj/structure/closet/secure_closet/freezer/meat, -/turf/simulated/floor/tiled/freezer, -/area/miningstation/walkin) -"nz" = ( -/obj/machinery/computer/arcade, -/turf/simulated/floor/wood/walnut, -/area/miningstation/recroom) -"nA" = ( -/turf/simulated/floor/wood/walnut, -/area/miningstation/recroom) -"nB" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 4; - level = 2 - }, -/turf/simulated/floor/wood/walnut, -/area/miningstation/recroom) -"nC" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/turf/simulated/floor/wood/walnut, -/area/miningstation/recroom) -"nD" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 8 - }, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/wood/walnut, -/area/miningstation/recroom) -"nE" = ( -/obj/structure/bookcase/manuals/xenoarchaeology, -/turf/simulated/floor/wood/walnut, -/area/miningstation/recroom) -"nF" = ( -/obj/structure/bookcase/manuals/engineering, -/turf/simulated/floor/wood/walnut, -/area/miningstation/recroom) -"nG" = ( -/obj/structure/closet/wardrobe/engineering_yellow, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, -/obj/effect/floor_decal/industrial/hatch, -/obj/effect/floor_decal/industrial/hatch/yellow, -/turf/simulated/floor/tiled/techfloor, -/area/miningstation/dorms2) -"nH" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/gibspawner/human, -/turf/simulated/floor/tiled/techfloor, -/area/miningstation/dorms) -"nI" = ( -/obj/structure/bed/padded, -/obj/item/bedsheet/hop, -/obj/machinery/vending/wallmed1{ - dir = 8; - name = "Emergency NanoMed"; - pixel_x = 28 - }, -/obj/random/contraband, -/turf/simulated/floor/tiled/techfloor, -/area/miningstation/dorms2) -"nJ" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/turf/simulated/floor/tiled/techfloor, -/area/miningstation/dorms) -"nK" = ( -/obj/structure/bed/padded, -/obj/item/bedsheet/red, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor, -/area/miningstation/dorms) -"nL" = ( -/obj/structure/closet/wardrobe/engineering_yellow, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/effect/floor_decal/industrial/hatch, -/turf/simulated/floor/tiled/techfloor, -/area/miningstation/dorms) -"nN" = ( -/obj/structure/bed/padded, -/obj/item/bedsheet/rd, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 - }, -/turf/simulated/floor/tiled/techfloor, -/area/miningstation/dorms) -"nO" = ( -/obj/structure/closet/wardrobe/engineering_yellow, -/obj/effect/floor_decal/industrial/hatch, -/turf/simulated/floor/tiled/techfloor, -/area/miningstation/dorms) -"nP" = ( -/obj/structure/bed/padded, -/turf/simulated/floor/tiled/techfloor, -/area/miningstation/dorms) -"nQ" = ( -/obj/structure/bed/padded, -/obj/item/bedsheet/yellow, -/turf/simulated/floor/tiled/techfloor, -/area/miningstation/dorms) -"nR" = ( -/obj/structure/closet/wardrobe/engineering_yellow, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/obj/effect/floor_decal/industrial/hatch, -/turf/simulated/floor/tiled/techfloor, -/area/miningstation/dorms) -"nS" = ( -/obj/structure/bed/padded, -/obj/item/bedsheet/red, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor, -/area/miningstation/dorms) -"nT" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/turf/simulated/floor/tiled/techfloor, -/area/miningstation/dorms) -"nU" = ( -/obj/structure/table/steel, -/obj/effect/floor_decal/corner/blue{ - dir = 4 - }, -/obj/effect/floor_decal/corner/blue{ - dir = 6 - }, -/turf/simulated/floor/tiled/white, -/area/miningstation/physician2) -"nV" = ( -/obj/machinery/portable_atmospherics/powered/pump, -/obj/structure/catwalk, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/turf/simulated/floor/plating, -/area/miningstation/atmos) -"nW" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, -/turf/simulated/floor/tiled/techfloor, -/area/miningstation/mess) -"nX" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor, -/area/miningstation/mess) -"nY" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/random/trash, -/turf/simulated/floor/tiled/techfloor, -/area/miningstation/mess) -"nZ" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor, -/area/miningstation/mess) -"oa" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/turf/simulated/floor/tiled/techfloor, -/area/miningstation/mess) -"ob" = ( -/obj/structure/table/marble, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/effect/floor_decal/corner/blue{ - dir = 4 - }, -/obj/effect/floor_decal/corner/blue{ - dir = 8 - }, -/turf/simulated/floor/plating, -/area/miningstation/mess) -"oc" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/effect/floor_decal/corner/blue{ - dir = 4 - }, -/obj/effect/floor_decal/corner/blue{ - dir = 8 - }, -/turf/simulated/floor/tiled/white, -/area/miningstation/kitchen) -"od" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/obj/effect/floor_decal/corner/blue{ - dir = 4 - }, -/obj/effect/floor_decal/corner/blue{ - dir = 8 - }, -/obj/random/trash, -/turf/simulated/floor/tiled/white, -/area/miningstation/kitchen) -"oe" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/obj/effect/floor_decal/corner/blue{ - dir = 4 - }, -/obj/effect/floor_decal/corner/blue{ - dir = 8 - }, -/turf/simulated/floor/tiled/white, -/area/miningstation/kitchen) -"of" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/effect/floor_decal/corner/blue{ - dir = 4 - }, -/obj/effect/floor_decal/corner/blue{ - dir = 8 - }, -/turf/simulated/floor/tiled/white, -/area/miningstation/kitchen) -"og" = ( -/obj/structure/cable{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/structure/cable{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/effect/floor_decal/corner/blue{ - dir = 4 - }, -/obj/effect/floor_decal/corner/blue{ - dir = 8 - }, -/turf/simulated/floor/tiled/white, -/area/miningstation/kitchen) -"oh" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/obj/effect/floor_decal/corner/blue{ - dir = 4 - }, -/obj/effect/floor_decal/corner/blue{ - dir = 8 - }, -/turf/simulated/floor/tiled/white, -/area/miningstation/kitchen) -"oi" = ( -/obj/structure/table/marble, -/obj/item/material/knife/kitchen, -/obj/effect/floor_decal/corner/blue{ - dir = 4 - }, -/obj/effect/floor_decal/corner/blue{ - dir = 8 - }, -/turf/simulated/floor/tiled/white, -/area/miningstation/kitchen) -"oj" = ( -/turf/simulated/floor/tiled/freezer, -/area/miningstation/walkin) -"ok" = ( -/obj/structure/cable{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/turf/simulated/floor/tiled/freezer, -/area/miningstation/walkin) -"ol" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/freezer, -/area/miningstation/walkin) -"om" = ( -/obj/random/trash, -/obj/structure/cable{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/effect/decal/cleanable/blood/splatter, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, -/turf/simulated/floor/tiled/white, -/area/miningstation/surgery) -"on" = ( -/obj/machinery/light{ - dir = 8; - icon_state = "tube1" - }, -/turf/simulated/floor/carpet, -/area/miningstation/recroom) -"oo" = ( -/obj/effect/landmark/corpse/miningstation/deadmineroverallsf, -/obj/effect/decal/cleanable/blood/splatter, -/turf/simulated/floor/carpet, -/area/miningstation/recroom) -"op" = ( -/obj/structure/bed/chair/comfy/brown, -/turf/simulated/floor/carpet, -/area/miningstation/recroom) -"oq" = ( -/obj/random/trash, -/turf/simulated/floor/carpet, -/area/miningstation/recroom) -"or" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/effect/gibspawner/human, -/turf/simulated/floor/carpet, -/area/miningstation/recroom) -"os" = ( -/obj/machinery/light{ - dir = 4; - icon_state = "tube1" - }, -/turf/simulated/floor/carpet, -/area/miningstation/recroom) -"ot" = ( -/obj/structure/closet/wardrobe/engineering_yellow, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/light{ - dir = 8; - icon_state = "tube1" - }, -/obj/effect/floor_decal/industrial/hatch, -/obj/effect/floor_decal/industrial/hatch/yellow, -/turf/simulated/floor/tiled/techfloor, -/area/miningstation/dorms2) -"ou" = ( -/obj/item/storage/toolbox/mechanical, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 1 - }, -/turf/simulated/floor/tiled/techfloor, -/area/miningstation/dorms2) -"ov" = ( -/obj/structure/bed/padded, -/obj/item/bedsheet/hop, -/obj/machinery/alarm{ - dir = 8; - pixel_x = 21 - }, -/turf/simulated/floor/tiled/techfloor, -/area/miningstation/dorms2) -"ow" = ( -/obj/effect/floor_decal/corner/blue{ - dir = 5 - }, -/obj/machinery/light{ - dir = 1 - }, -/obj/effect/landmark/corpse/doctor, -/obj/effect/decal/cleanable/blood/splatter, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/miningstation/intensive) -"ox" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/techfloor, -/area/miningstation/dorms) -"oy" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/random/toolbox, -/turf/simulated/floor/tiled/techfloor, -/area/miningstation/dorms) -"oz" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/cable{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/turf/simulated/floor/tiled/techfloor, -/area/miningstation/dorms) -"oA" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/techfloor, -/area/miningstation/mess) -"oB" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/bed/chair{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor, -/area/miningstation/mess) -"oC" = ( -/obj/structure/table/steel, -/turf/simulated/floor/tiled/techfloor, -/area/miningstation/mess) -"oD" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/bed/chair{ - dir = 8 - }, -/turf/simulated/floor/tiled/techfloor, -/area/miningstation/mess) -"oE" = ( -/obj/structure/table/marble, -/obj/random/mre, -/obj/effect/floor_decal/corner/blue{ - dir = 4 - }, -/obj/effect/floor_decal/corner/blue{ - dir = 8 - }, -/turf/simulated/floor/plating, -/area/miningstation/mess) -"oF" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/effect/floor_decal/corner/blue{ - dir = 4 - }, -/obj/effect/floor_decal/corner/blue{ - dir = 8 - }, -/turf/simulated/floor/tiled/white, -/area/miningstation/kitchen) -"oG" = ( -/obj/structure/table/marble, -/obj/effect/floor_decal/corner/blue{ - dir = 4 - }, -/obj/effect/floor_decal/corner/blue{ - dir = 8 - }, -/turf/simulated/floor/tiled/white, -/area/miningstation/kitchen) -"oH" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/effect/floor_decal/corner/blue{ - dir = 4 - }, -/obj/effect/floor_decal/corner/blue{ - dir = 8 - }, -/turf/simulated/floor/tiled/white, -/area/miningstation/kitchen) -"oI" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 8 - }, -/obj/effect/floor_decal/corner/blue{ - dir = 4 - }, -/obj/effect/floor_decal/corner/blue{ - dir = 8 - }, -/turf/simulated/floor/tiled/white, -/area/miningstation/kitchen) -"oJ" = ( -/obj/machinery/door/airlock/civilian, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/miningstation/kitchen) -"oK" = ( -/obj/effect/floor_decal/corner/blue{ - dir = 9 - }, -/obj/effect/decal/cleanable/blood/splatter, -/turf/simulated/floor/tiled/white, -/area/miningstation/intensive) -"oL" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/turf/simulated/floor/tiled/freezer, -/area/miningstation/walkin) -"oM" = ( -/obj/structure/table/marble, -/turf/simulated/floor/tiled/freezer, -/area/miningstation/walkin) -"oN" = ( -/obj/structure/kitchenspike, -/turf/simulated/floor/tiled/freezer, -/area/miningstation/walkin) -"oO" = ( -/obj/machinery/firealarm{ - dir = 1; - pixel_y = -24 - }, -/turf/simulated/floor/carpet, -/area/miningstation/recroom) -"oP" = ( -/obj/structure/bed/chair/comfy/brown{ - dir = 4 - }, -/turf/simulated/floor/carpet, -/area/miningstation/recroom) -"oQ" = ( -/obj/structure/table/woodentable/maple, -/turf/simulated/floor/carpet, -/area/miningstation/recroom) -"oR" = ( -/obj/structure/bed/chair/comfy/brown{ - dir = 8 - }, -/turf/simulated/floor/carpet, -/area/miningstation/recroom) -"oS" = ( -/obj/random/trash, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/power/terminal, -/obj/machinery/power/apc{ - name = "south bump"; - pixel_y = -28 - }, -/turf/simulated/floor/carpet, -/area/miningstation/recroom) -"oT" = ( -/obj/structure/bed/chair/comfy/brown{ - dir = 8 - }, -/obj/machinery/alarm{ - dir = 8; - pixel_x = 25; - req_access = list(list("ACCESS_ENGINE_EQUIP","ACCESS_ATMOS")) - }, -/turf/simulated/floor/carpet, -/area/miningstation/recroom) -"oU" = ( -/obj/structure/closet/toolcloset, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 1 - }, -/obj/effect/floor_decal/industrial/hatch, -/obj/effect/floor_decal/industrial/hatch/yellow, -/obj/item/gun/projectile/pistol/throwback, -/turf/simulated/floor/tiled/techfloor, -/area/miningstation/dorms2) -"oV" = ( -/obj/structure/cable{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 1 - }, -/obj/structure/cable{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/effect/floor_decal/corner/blue{ - dir = 4 - }, -/obj/effect/floor_decal/corner/blue, -/obj/effect/decal/cleanable/blood/splatter, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 1 - }, -/turf/simulated/floor/tiled/white, -/area/miningstation/intensive) -"oX" = ( -/obj/machinery/door/airlock/civilian, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/door/firedoor, -/obj/effect/decal/cleanable/blood/splatter, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/miningstation/physician2) -"oY" = ( -/obj/structure/closet/wardrobe/engineering_yellow, -/obj/machinery/light, -/obj/effect/floor_decal/industrial/hatch, -/turf/simulated/floor/tiled/techfloor, -/area/miningstation/dorms) -"oZ" = ( -/obj/structure/bed/padded, -/obj/item/bedsheet/green, -/turf/simulated/floor/tiled/techfloor, -/area/miningstation/dorms) -"pa" = ( -/obj/structure/bed/padded, -/obj/item/bedsheet/ce, -/turf/simulated/floor/tiled/techfloor, -/area/miningstation/dorms) -"pb" = ( -/obj/structure/bed/padded, -/obj/item/bedsheet/purple, -/turf/simulated/floor/tiled/techfloor, -/area/miningstation/dorms) -"pc" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 1 - }, -/turf/simulated/floor/tiled/techfloor, -/area/miningstation/mess) -"pd" = ( -/obj/structure/table/steel, -/obj/random/contraband, -/turf/simulated/floor/tiled/techfloor, -/area/miningstation/mess) -"pf" = ( -/obj/structure/table/marble, -/obj/random/action_figure, -/obj/effect/floor_decal/corner/blue{ - dir = 4 - }, -/obj/effect/floor_decal/corner/blue{ - dir = 8 - }, -/turf/simulated/floor/plating, -/area/miningstation/mess) -"pg" = ( -/obj/structure/table/marble, -/obj/item/material/knife/kitchen/cleaver/bronze, -/obj/effect/floor_decal/corner/blue{ - dir = 4 - }, -/obj/effect/floor_decal/corner/blue{ - dir = 8 - }, -/turf/simulated/floor/tiled/white, -/area/miningstation/kitchen) -"ph" = ( -/obj/effect/floor_decal/corner/blue{ - dir = 4 - }, -/obj/effect/floor_decal/corner/blue{ - dir = 8 - }, -/obj/random/trash, -/turf/simulated/floor/tiled/white, -/area/miningstation/kitchen) -"pi" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/effect/floor_decal/corner/blue{ - dir = 4 - }, -/obj/effect/floor_decal/corner/blue{ - dir = 8 - }, -/turf/simulated/floor/tiled/white, -/area/miningstation/kitchen) -"pj" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/tiled/freezer, -/area/miningstation/walkin) -"pk" = ( -/obj/machinery/gibber, -/turf/simulated/floor/tiled/freezer, -/area/miningstation/walkin) -"pl" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable{ - icon_state = "2-8" - }, -/obj/effect/floor_decal/corner/blue{ - dir = 9 - }, -/obj/effect/landmark/corpse/doctor, -/obj/effect/decal/cleanable/blood/splatter, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/miningstation/physician2) -"pm" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/tiled/techfloor, -/area/miningstation/mess) -"po" = ( -/turf/simulated/floor/tiled/techfloor, -/area/miningstation/mess) -"pp" = ( -/obj/structure/table/marble, -/obj/effect/floor_decal/corner/blue{ - dir = 4 - }, -/obj/effect/floor_decal/corner/blue{ - dir = 8 - }, -/turf/simulated/floor/plating, -/area/miningstation/mess) -"pq" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/obj/effect/floor_decal/corner/blue{ - dir = 4 - }, -/obj/effect/floor_decal/corner/blue{ - dir = 8 - }, -/turf/simulated/floor/tiled/white, -/area/miningstation/kitchen) -"pr" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 1 - }, -/obj/effect/floor_decal/corner/blue{ - dir = 4 - }, -/obj/effect/floor_decal/corner/blue{ - dir = 8 - }, -/turf/simulated/floor/tiled/white, -/area/miningstation/kitchen) -"ps" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/effect/floor_decal/corner/blue{ - dir = 4 - }, -/obj/effect/floor_decal/corner/blue{ - dir = 8 - }, -/turf/simulated/floor/tiled/white, -/area/miningstation/kitchen) -"pt" = ( -/obj/structure/table/marble, -/obj/machinery/reagent_temperature/cooler, -/obj/effect/floor_decal/corner/blue{ - dir = 4 - }, -/obj/effect/floor_decal/corner/blue{ - dir = 8 - }, -/turf/simulated/floor/tiled/white, -/area/miningstation/kitchen) -"pu" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 1 - }, -/turf/simulated/floor/tiled/freezer, -/area/miningstation/walkin) -"pv" = ( -/obj/effect/decal/cleanable/blood/splatter, -/turf/simulated/floor/tiled/techfloor/grid, -/area/miningstation/dormhall) -"pw" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 1 - }, -/turf/simulated/floor/tiled/techfloor, -/area/miningstation/mess) -"px" = ( -/obj/random/trash, -/turf/simulated/floor/tiled/techfloor, -/area/miningstation/mess) -"py" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 1 - }, -/obj/effect/floor_decal/corner/blue{ - dir = 4 - }, -/obj/effect/floor_decal/corner/blue{ - dir = 8 - }, -/turf/simulated/floor/tiled/white, -/area/miningstation/kitchen) -"pz" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 1 - }, -/obj/effect/floor_decal/corner/blue{ - dir = 4 - }, -/obj/effect/floor_decal/corner/blue{ - dir = 8 - }, -/turf/simulated/floor/tiled/white, -/area/miningstation/kitchen) -"pA" = ( -/obj/structure/table/marble, -/obj/machinery/reagent_temperature, -/obj/effect/floor_decal/corner/blue{ - dir = 4 - }, -/obj/effect/floor_decal/corner/blue{ - dir = 8 - }, -/turf/simulated/floor/tiled/white, -/area/miningstation/kitchen) -"pB" = ( -/obj/machinery/alarm{ - dir = 8; - pixel_x = 25; - req_access = list(list("ACCESS_ENGINE_EQUIP","ACCESS_ATMOS")) - }, -/obj/structure/reagent_dispensers/beerkeg, -/turf/simulated/floor/tiled/freezer, -/area/miningstation/walkin) -"pC" = ( -/obj/structure/bed/chair{ - dir = 8 - }, -/obj/machinery/alarm{ - dir = 1; - pixel_y = -25 - }, -/turf/simulated/floor/tiled/techfloor, -/area/miningstation/mess) -"pD" = ( -/obj/structure/table/steel, -/obj/machinery/light, -/turf/simulated/floor/tiled/techfloor, -/area/miningstation/mess) -"pE" = ( -/obj/structure/bed/chair{ - dir = 4 - }, -/obj/machinery/firealarm{ - dir = 1; - pixel_y = -24 - }, -/turf/simulated/floor/tiled/techfloor, -/area/miningstation/mess) -"pF" = ( -/obj/machinery/firealarm{ - dir = 1; - pixel_y = -24 - }, -/obj/effect/floor_decal/corner/blue{ - dir = 4 - }, -/obj/effect/floor_decal/corner/blue{ - dir = 8 - }, -/turf/simulated/floor/tiled/white, -/area/miningstation/kitchen) -"pG" = ( -/obj/structure/table/marble, -/obj/machinery/microwave, -/obj/effect/floor_decal/corner/blue{ - dir = 4 - }, -/obj/effect/floor_decal/corner/blue{ - dir = 8 - }, -/turf/simulated/floor/tiled/white, -/area/miningstation/kitchen) -"pH" = ( -/obj/structure/table/marble, -/obj/machinery/microwave, -/obj/effect/floor_decal/corner/blue{ - dir = 4 - }, -/obj/effect/floor_decal/corner/blue{ - dir = 8 - }, -/obj/machinery/light, -/turf/simulated/floor/tiled/white, -/area/miningstation/kitchen) -"pI" = ( -/obj/machinery/cooker/oven, -/obj/effect/floor_decal/corner/blue{ - dir = 4 - }, -/obj/effect/floor_decal/corner/blue{ - dir = 8 - }, -/turf/simulated/floor/tiled/white, -/area/miningstation/kitchen) -"pJ" = ( -/obj/machinery/cooker/fryer, -/obj/effect/floor_decal/corner/blue{ - dir = 4 - }, -/obj/effect/floor_decal/corner/blue{ - dir = 8 - }, -/turf/simulated/floor/tiled/white, -/area/miningstation/kitchen) -"pK" = ( -/obj/machinery/cooker/grill, -/obj/effect/floor_decal/corner/blue{ - dir = 4 - }, -/obj/effect/floor_decal/corner/blue{ - dir = 8 - }, -/obj/machinery/light, -/turf/simulated/floor/tiled/white, -/area/miningstation/kitchen) -"pL" = ( -/obj/structure/table/marble, -/obj/machinery/cooker/cereal, -/obj/effect/floor_decal/corner/blue{ - dir = 4 - }, -/obj/effect/floor_decal/corner/blue{ - dir = 8 - }, -/turf/simulated/floor/tiled/white, -/area/miningstation/kitchen) -"pM" = ( -/obj/structure/closet/secure_closet/freezer/meat, -/turf/simulated/floor/tiled/freezer, -/area/miningstation/walkin) -"pN" = ( -/obj/structure/closet/secure_closet/freezer/meat, -/obj/machinery/light, -/turf/simulated/floor/tiled/freezer, -/area/miningstation/walkin) -"pO" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/effect/gibspawner/human, -/turf/simulated/floor/tiled/techfloor/grid, -/area/miningstation/hangarhall) -"pP" = ( -/obj/structure/cable{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/effect/floor_decal/corner/blue{ - dir = 5 - }, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/turf/simulated/floor/tiled/white, -/area/miningstation/intensive) -"pQ" = ( -/obj/item/scalpel, -/obj/effect/floor_decal/corner/blue{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/light_switch{ - pixel_y = 32 - }, -/turf/simulated/floor/tiled/white, -/area/miningstation/intensive) -"pR" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/effect/decal/cleanable/blood/splatter, -/turf/simulated/floor/tiled/techfloor/grid, -/area/miningstation/dormhall) -"pS" = ( -/obj/effect/landmark/corpse/zombiescience, -/obj/effect/gibspawner/human, -/turf/simulated/floor/tiled/techfloor, -/area/miningstation/vault) -"pT" = ( -/obj/structure/table/steel, -/obj/item/stack/medical/bruise_pack, -/obj/effect/floor_decal/corner/blue{ - dir = 4 - }, -/obj/effect/floor_decal/corner/blue, -/turf/simulated/floor/tiled/white, -/area/miningstation/intensive) -"pU" = ( -/obj/effect/paint/black, -/turf/simulated/wall/r_titanium, -/area/miningstation/physician1) -"pV" = ( -/obj/machinery/light{ - dir = 1 - }, -/turf/simulated/floor/tiled/techfloor, -/area/miningstation/mess) -"pW" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/random/trash, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/tiled/white, -/area/miningstation/intensive) -"pX" = ( -/obj/machinery/bodyscanner{ - dir = 1 - }, -/turf/simulated/floor/tiled/white, -/area/miningstation/intensive) -"pY" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/turf/simulated/floor/tiled/white, -/area/miningstation/intensive) -"pZ" = ( -/obj/effect/floor_decal/sign/cmo, -/obj/effect/paint/black, -/turf/simulated/wall/r_titanium, -/area/miningstation/physician2) -"qa" = ( -/obj/structure/table/steel, -/obj/item/paper_bin, -/obj/effect/floor_decal/corner/blue{ - dir = 5 - }, -/obj/effect/floor_decal/corner/blue{ - dir = 6 - }, -/turf/simulated/floor/tiled/white, -/area/miningstation/physician2) -"qb" = ( -/obj/effect/wallframe_spawn/reinforced/titanium, -/obj/effect/paint/black, -/turf/simulated/floor/tiled/techfloor, -/area/miningstation/physician2) -"qc" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, -/obj/machinery/light{ - dir = 8 - }, -/turf/simulated/floor/tiled/techfloor, -/area/miningstation/mess) -"qd" = ( -/obj/structure/table/steel, -/obj/item/storage/firstaid/fire, -/obj/item/storage/firstaid/toxin, -/obj/effect/floor_decal/corner/blue{ - dir = 9 - }, -/obj/machinery/light{ - dir = 8; - icon_state = "tube1" - }, -/turf/simulated/floor/tiled/white, -/area/miningstation/intensive) -"qe" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/structure/cable{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/turf/simulated/floor/tiled/white, -/area/miningstation/intensive) -"qf" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/body_scanconsole{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/miningstation/intensive) -"qg" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/body_scanconsole{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 1 - }, -/turf/simulated/floor/tiled/white, -/area/miningstation/intensive) -"qh" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/turf/simulated/floor/tiled/white, -/area/miningstation/intensive) -"qi" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/cable{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, -/turf/simulated/floor/tiled/white, -/area/miningstation/intensive) -"qj" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/cable{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 1 - }, -/obj/effect/decal/cleanable/blood/splatter, -/turf/simulated/floor/tiled/techfloor/grid, -/area/miningstation/dormhall) -"qk" = ( -/obj/effect/decal/cleanable/blood/splatter, -/obj/machinery/light_switch{ - pixel_y = 32 - }, -/obj/effect/landmark/corpse/miningstation/deadminerf, -/turf/simulated/floor/tiled/techfloor, -/area/miningstation/dorms) -"ql" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/effect/decal/cleanable/blood/splatter, -/turf/simulated/floor/tiled/techfloor, -/area/miningstation/dorms) -"qm" = ( -/obj/structure/bed/chair/office, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 - }, -/obj/random/trash, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/turf/simulated/floor/tiled/white, -/area/miningstation/physician2) -"qn" = ( -/obj/effect/wallframe_spawn/reinforced/titanium, -/obj/effect/paint/black, -/turf/simulated/floor/tiled/techfloor/grid, -/area/miningstation/dormhall) -"qo" = ( -/obj/item/device/radio/intercom{ - dir = 4; - pixel_x = -21 - }, -/obj/machinery/light, -/turf/simulated/floor/tiled/freezer, -/area/miningstation/bathroom) -"qp" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/turf/simulated/floor/tiled/freezer, -/area/miningstation/bathroom) -"qq" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/freezer, -/area/miningstation/bathroom) -"qr" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/power/terminal{ - dir = 4 - }, -/obj/machinery/alarm{ - dir = 8; - pixel_x = 25; - req_access = list(list("ACCESS_ENGINE_EQUIP","ACCESS_ATMOS")) - }, -/obj/machinery/light{ - dir = 4; - icon_state = "tube1" - }, -/turf/simulated/floor/tiled/freezer, -/area/miningstation/bathroom) -"qs" = ( -/obj/structure/table/steel, -/obj/item/storage/firstaid/trauma, -/obj/effect/floor_decal/corner/blue{ - dir = 9 - }, -/turf/simulated/floor/tiled/white, -/area/miningstation/intensive) -"qt" = ( -/obj/machinery/power/terminal, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/alarm{ - dir = 1; - pixel_y = -25 - }, -/obj/effect/floor_decal/corner/blue{ - dir = 8 - }, -/obj/effect/floor_decal/corner/blue, -/turf/simulated/floor/tiled/white, -/area/miningstation/intensive) -"qu" = ( -/obj/effect/floor_decal/corner/blue{ - dir = 8 - }, -/obj/effect/floor_decal/corner/blue, -/turf/simulated/floor/tiled/white, -/area/miningstation/intensive) -"qv" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 1 - }, -/obj/effect/floor_decal/corner/blue{ - dir = 8 - }, -/obj/effect/floor_decal/corner/blue, -/obj/machinery/light, -/turf/simulated/floor/tiled/white, -/area/miningstation/intensive) -"qw" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/effect/floor_decal/corner/blue{ - dir = 8 - }, -/obj/effect/floor_decal/corner/blue, -/obj/effect/floor_decal/corner/blue{ - dir = 4 - }, -/obj/effect/floor_decal/corner/blue, -/turf/simulated/floor/tiled/white, -/area/miningstation/intensive) -"qx" = ( -/obj/structure/sign/directions/examroom, -/obj/effect/paint/black, -/turf/simulated/wall/r_titanium, -/area/miningstation/physician1) -"qy" = ( -/obj/effect/floor_decal/corner/blue, -/obj/effect/floor_decal/corner/blue{ - dir = 8 - }, -/obj/effect/floor_decal/corner/blue, -/obj/effect/floor_decal/corner/blue{ - dir = 4 - }, -/obj/random/trash, -/obj/machinery/vending/wallmed1{ - dir = 8; - name = "Emergency NanoMed"; - pixel_x = 28 - }, -/turf/simulated/floor/tiled/white, -/area/miningstation/physician1) -"qz" = ( -/obj/effect/floor_decal/corner/blue, -/obj/effect/floor_decal/corner/blue{ - dir = 8 - }, -/obj/random/trash, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 1 - }, -/turf/simulated/floor/tiled/white, -/area/miningstation/physician2) -"qA" = ( -/obj/machinery/computer/modular/preset/medical{ - dir = 8 - }, -/obj/effect/floor_decal/corner/blue, -/obj/effect/floor_decal/corner/blue{ - dir = 8 - }, -/obj/effect/floor_decal/corner/blue{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/miningstation/physician2) -"qB" = ( -/obj/machinery/door/airlock/civilian, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/door/firedoor, -/obj/machinery/door/firedoor, -/turf/simulated/floor/tiled/techfloor, -/area/miningstation/bathroom) -"qD" = ( -/obj/effect/wallframe_spawn/reinforced/titanium, -/obj/machinery/door/firedoor, -/obj/effect/paint/black, -/turf/simulated/floor/tiled/techfloor, -/area/miningstation/mess) -"qE" = ( -/obj/effect/decal/cleanable/blood/splatter, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/miningstation/hangar) -"qF" = ( -/obj/item/device/radio/intercom, -/obj/effect/paint/black, -/turf/simulated/wall/r_titanium, -/area/miningstation/chief2) -"qG" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/miningstation/hangarhall) -"qH" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/techfloor/grid, -/area/miningstation/hangarhall) -"qI" = ( -/obj/machinery/cryopod{ - dir = 2 - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 8; - icon_state = "warning" - }, -/turf/simulated/floor/tiled/white, -/area/miningstation/cryo) -"qJ" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/cable{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/effect/decal/cleanable/blood/splatter, -/turf/simulated/floor/tiled/techfloor, -/area/miningstation/dorms) -"qK" = ( -/obj/effect/wallframe_spawn/reinforced/titanium, -/obj/machinery/door/firedoor, -/obj/effect/paint/black, -/turf/simulated/floor/tiled/techfloor/grid, -/area/miningstation/recroom) -"qL" = ( -/obj/machinery/vending/wallmed1, -/obj/effect/paint/black, -/turf/simulated/wall/r_titanium, -/area/miningstation/surgery) -"qM" = ( -/obj/machinery/vending/wallmed1, -/obj/effect/paint/black, -/turf/simulated/wall/r_titanium, -/area/miningstation/physician2) -"qN" = ( -/obj/machinery/atmospherics/unary/vent_pump/on, -/obj/effect/floor_decal/corner/blue{ - dir = 5 - }, -/turf/simulated/floor/tiled/white, -/area/miningstation/physician2) -"qP" = ( -/obj/structure/cable{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/miningstation/dormhall) -"qQ" = ( -/obj/random/trash, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/miningstation/dormhall) -"qR" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/miningstation/dormhall) -"qS" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/cable{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/miningstation/dormhall) -"qT" = ( -/obj/machinery/power/apc{ - name = "south bump"; - pixel_y = -28 - }, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/power/terminal, -/turf/simulated/floor/tiled/techfloor/grid, -/area/miningstation/dormhall) -"qU" = ( -/obj/machinery/computer/cryopod, -/obj/effect/paint/black, -/turf/simulated/wall/r_titanium, -/area/miningstation/cryo) -"qV" = ( -/obj/random/trash, -/obj/machinery/light, -/turf/simulated/floor/tiled/techfloor, -/area/miningstation/mess) -"qW" = ( -/obj/item/device/radio/intercom, -/obj/effect/paint/black, -/turf/simulated/wall/r_titanium, -/area/miningstation/chief) -"qX" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 8 - }, -/turf/simulated/floor/tiled/techfloor, -/area/miningstation/chief) -"qY" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 8 - }, -/turf/simulated/floor/tiled/techfloor, -/area/miningstation/chief2) -"qZ" = ( -/obj/structure/closet/crate/secure/biohazard/alt, -/obj/effect/floor_decal/corner/blue{ - dir = 9 - }, -/obj/effect/floor_decal/corner/blue, -/obj/machinery/light, -/turf/simulated/floor/tiled/white, -/area/miningstation/surgery) -"ra" = ( -/obj/structure/closet/crate/freezer, -/obj/effect/floor_decal/corner/blue{ - dir = 6 - }, -/obj/effect/floor_decal/corner/blue{ - dir = 8 - }, -/obj/effect/floor_decal/corner/blue, -/obj/machinery/light, -/turf/simulated/floor/tiled/white, -/area/miningstation/surgery) -"rb" = ( -/obj/structure/bed/padded, -/obj/item/bedsheet/orange, -/obj/structure/plushie/ian, -/obj/item/device/radio/intercom{ - dir = 1; - pixel_y = -28 - }, -/turf/simulated/floor/tiled/techfloor, -/area/miningstation/dorms3) -"rc" = ( -/obj/item/device/radio/intercom, -/obj/effect/paint/black, -/turf/simulated/wall/r_titanium, -/area/miningstation/dormhall) -"rd" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/effect/gibspawner/human, -/turf/simulated/floor/tiled/techfloor/grid, -/area/miningstation/dormhall) -"re" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/effect/decal/cleanable/blood/splatter, -/turf/simulated/floor/tiled/freezer, -/area/miningstation/walkin) -"rf" = ( -/obj/effect/landmark/corpse/chef, -/obj/effect/decal/cleanable/blood/splatter, -/turf/simulated/floor/tiled/freezer, -/area/miningstation/walkin) -"rg" = ( -/obj/effect/decal/cleanable/blood/splatter, -/turf/simulated/floor/tiled/techfloor, -/area/miningstation/mess) -"ri" = ( -/obj/machinery/power/terminal{ - dir = 1 - }, -/obj/structure/cable{ - d2 = 8; - icon_state = "0-8" - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/miningstation/power) -"rj" = ( -/obj/structure/catwalk, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/plating, -/area/miningstation/power) -"rk" = ( -/obj/machinery/atmospherics/unary/vent_pump/on, -/obj/structure/bed/chair/office{ - dir = 1 - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/miningstation/atmos) -"rl" = ( -/obj/machinery/portable_atmospherics/powered/scrubber, -/obj/structure/catwalk, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, -/turf/simulated/floor/plating, -/area/miningstation/atmos) -"rm" = ( -/obj/structure/catwalk, -/obj/structure/table/steel, -/obj/item/paper/solar, -/obj/machinery/light{ - dir = 4; - icon_state = "tube1" - }, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 8 - }, -/turf/simulated/floor/plating, -/area/miningstation/power) -"rn" = ( -/obj/machinery/power/terminal, -/obj/structure/cable, -/obj/structure/catwalk, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable{ - d2 = 4; - icon_state = "0-4" - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/power/apc{ - name = "south bump"; - pixel_y = -28 - }, -/turf/simulated/floor/plating, -/area/miningstation/power) -"ro" = ( -/obj/structure/catwalk, -/obj/structure/bed/chair/office, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/turf/simulated/floor/plating, -/area/miningstation/power) -"rp" = ( -/obj/structure/table/steel, -/turf/simulated/floor/tiled/techfloor, -/area/miningstation/chief) -"rs" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/cable{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/machinery/light, -/turf/simulated/floor/reinforced/airless, -/area/miningstation/power) -"rt" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/light, -/turf/simulated/floor/reinforced/airless, -/area/miningstation/power) -"ru" = ( -/obj/structure/table/woodentable/maple, -/obj/item/paper_bin, -/turf/simulated/floor/carpet, -/area/miningstation/recroom) -"rw" = ( -/obj/random/tech_supply, -/obj/random/tech_supply, -/obj/random/tech_supply, -/obj/random/tech_supply, -/obj/random/tech_supply, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled/techfloor/grid, -/area/miningstation/fix) -"rx" = ( -/obj/machinery/light, -/turf/simulated/floor/tiled/techfloor/grid, -/area/miningstation/operationshall) -"ry" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 4; - level = 2 - }, -/obj/machinery/light{ - dir = 1 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/miningstation/dormhall) -"rz" = ( -/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/techfloor/grid, -/area/miningstation/dormhall) -"rA" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/miningstation/operationshall) -"rB" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 8 - }, -/obj/machinery/light{ - dir = 1 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/miningstation/dormhall) -"rD" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 8 - }, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/effect/gibspawner/human, -/turf/simulated/floor/tiled/techfloor/grid, -/area/miningstation/fix) -"rE" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/decal/cleanable/blood/splatter, -/obj/effect/gibspawner/human, -/turf/simulated/floor/tiled/techfloor, -/area/miningstation/dorms) -"rF" = ( -/obj/effect/floor_decal/corner/blue{ - dir = 1 - }, -/obj/effect/gibspawner/human, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/miningstation/intensive) -"rG" = ( -/obj/effect/floor_decal/corner/blue{ - dir = 4 - }, -/obj/effect/floor_decal/corner/blue{ - dir = 8 - }, -/obj/effect/gibspawner/human, -/turf/simulated/floor/tiled/white, -/area/miningstation/kitchen) -"rH" = ( -/obj/machinery/light{ - dir = 8 - }, -/obj/effect/gibspawner/human, -/turf/simulated/floor/tiled/techfloor, -/area/miningstation/mess) -"rI" = ( -/obj/effect/gibspawner/human, -/turf/simulated/floor/tiled/techfloor, -/area/miningstation/mess) -"rJ" = ( -/obj/machinery/cryopod/robot, -/obj/effect/floor_decal/corner/blue{ - dir = 9 - }, -/obj/effect/floor_decal/corner/blue{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/miningstation/cryo) -"rK" = ( -/obj/machinery/portable_atmospherics/powered/pump, -/obj/structure/catwalk, -/obj/machinery/atmospherics/binary/pump{ - dir = 4; - name = "Exterior Vent" - }, -/turf/simulated/floor/plating, -/area/miningstation/atmos) -"rL" = ( -/obj/machinery/light{ - dir = 8; - icon_state = "tube1" - }, -/obj/effect/floor_decal/corner/blue{ - dir = 9 - }, -/turf/simulated/floor/tiled/white, -/area/miningstation/cryo) -"sZ" = ( -/obj/machinery/power/apc{ - dir = 8; - name = "west bump"; - pixel_x = -24 - }, -/obj/effect/floor_decal/corner/blue{ - dir = 9 - }, -/turf/simulated/floor/tiled/white, -/area/miningstation/cryo) -"tf" = ( -/obj/item/stack/material/rods, -/turf/simulated/floor/asteroid, -/area/space) -"tn" = ( -/mob/living/simple_animal/hostile/meat/strippedhuman, -/turf/simulated/floor/tiled/techfloor, -/area/miningstation/chief) -"tB" = ( -/obj/machinery/light, -/obj/effect/floor_decal/corner/yellow{ - dir = 10 - }, -/obj/structure/table/steel, -/obj/random/tool, -/turf/simulated/floor/tiled/techfloor, -/area/miningstation/prep) -"tG" = ( -/obj/machinery/atmospherics/unary/vent_pump/on, -/turf/simulated/floor/tiled/monotile, -/area/miningstation/hangar) -"uR" = ( -/obj/effect/floor_decal/corner/blue{ - dir = 6 - }, -/turf/simulated/floor/tiled/white, -/area/miningstation/cryo) -"uZ" = ( -/obj/structure/catwalk, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 - }, -/turf/simulated/floor/airless/ceiling, -/area/miningstation/power) -"vE" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 - }, -/turf/simulated/floor/tiled/white, -/area/miningstation/cryo) -"vH" = ( -/turf/simulated/mineral, -/area/miningstation/fix) -"vT" = ( -/obj/item/device/radio/intercom, -/obj/effect/paint/black, -/turf/simulated/wall/r_titanium, -/area/miningstation/prep) -"wx" = ( -/mob/living/simple_animal/hostile/meat/horrorminer, -/turf/simulated/floor/tiled/techfloor/grid, -/area/miningstation/dormhall) -"wF" = ( -/obj/structure/table/steel, -/obj/effect/floor_decal/corner/blue{ - dir = 9 - }, -/turf/simulated/floor/tiled/white, -/area/miningstation/cryo) -"wU" = ( -/obj/effect/floor_decal/corner/blue, -/turf/simulated/floor/tiled/white, -/area/miningstation/cryo) -"xe" = ( -/obj/machinery/vending/engineering, -/obj/effect/floor_decal/corner/yellow{ - dir = 5 - }, -/obj/machinery/light_switch{ - pixel_y = 32 - }, -/turf/simulated/floor/tiled/techfloor, -/area/miningstation/prep) -"xH" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/catwalk, -/obj/effect/floor_decal/industrial/warning{ - dir = 1; - icon_state = "warning"; - pixel_y = 6 - }, -/obj/machinery/light, -/turf/simulated/floor/plating, -/area/miningstation/hangar) -"xO" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/tiled/techfloor/grid, -/area/miningstation/hangar) -"xV" = ( -/obj/effect/floor_decal/corner/blue{ - dir = 5 - }, -/obj/effect/floor_decal/corner/blue, -/turf/simulated/floor/tiled/white, -/area/miningstation/cryo) -"yc" = ( -/obj/effect/gibspawner/human, -/obj/effect/floor_decal/corner/blue{ - dir = 9 - }, -/obj/effect/floor_decal/corner/blue, -/turf/simulated/floor/tiled/white, -/area/miningstation/cryo) -"yA" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/catwalk, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 - }, -/turf/simulated/floor/airless/ceiling, -/area/miningstation/power) -"yC" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/catwalk, -/obj/machinery/light/small{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/miningstation/atmos) -"yI" = ( -/obj/effect/gibspawner/human, -/turf/simulated/floor/tiled/freezer, -/area/miningstation/bathroom) -"yQ" = ( -/obj/machinery/door/airlock/multi_tile/civilian, -/turf/simulated/floor/tiled/techfloor/grid, -/area/miningstation/hangarhall) -"zi" = ( -/obj/machinery/vending/engivend, -/obj/effect/floor_decal/corner/yellow{ - dir = 5 - }, -/obj/machinery/light_switch{ - pixel_y = 32 - }, -/turf/simulated/floor/tiled/techfloor, -/area/miningstation/prep) -"zy" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/catwalk, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply, -/turf/simulated/floor/plating, -/area/miningstation/hangar) -"zI" = ( -/obj/effect/paint/black, -/turf/simulated/wall/r_titanium, -/area/miningstation/operationshall2) -"zP" = ( -/obj/structure/reagent_dispensers/water_cooler, -/turf/simulated/floor/tiled/techfloor, -/area/miningstation/bridge) -"zS" = ( -/obj/effect/shuttle_landmark/nav_miningstation/exterior, -/turf/space, -/area/space) -"AD" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/catwalk, -/obj/effect/floor_decal/industrial/warning{ - dir = 1; - icon_state = "warning"; - pixel_y = 6 - }, -/obj/machinery/light, -/turf/simulated/floor/plating, -/area/miningstation/hangar) -"AL" = ( -/obj/machinery/light{ - dir = 4; - icon_state = "tube1" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/miningstation/operationshall2) -"AO" = ( -/obj/effect/decal/cleanable/blood/splatter, -/obj/effect/landmark/corpse/miningstation/deadmineroveralls, -/turf/simulated/floor/tiled/techfloor/grid, -/area/miningstation/dormhall) -"AQ" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/miningstation/hangarhall) -"AW" = ( -/obj/structure/cable{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/miningstation/operationshall2) -"Bp" = ( -/obj/effect/floor_decal/corner/blue{ - dir = 1 - }, -/turf/simulated/floor/tiled/white, -/area/miningstation/cryo) -"Br" = ( -/obj/effect/floor_decal/corner/blue{ - dir = 8 - }, -/obj/effect/gibspawner/human, -/turf/simulated/floor/tiled/white, -/area/miningstation/cryo) -"Bt" = ( -/obj/machinery/light_switch{ - pixel_y = 32 - }, -/turf/simulated/floor/wood/walnut, -/area/miningstation/recroom) -"BG" = ( -/obj/effect/paint/black, -/turf/simulated/wall/r_titanium, -/area/miningstation/chief2) -"Cq" = ( -/obj/effect/floor_decal/corner/blue{ - dir = 9 - }, -/mob/living/simple_animal/hostile/meat/abomination, -/turf/simulated/floor/tiled/white, -/area/miningstation/cryo) -"CB" = ( -/obj/structure/table/steel, -/obj/effect/floor_decal/corner/blue{ - dir = 9 - }, -/obj/effect/floor_decal/corner/blue, -/turf/simulated/floor/tiled/white, -/area/miningstation/cryo) -"CD" = ( -/obj/effect/paint/black, -/obj/effect/paint/black, -/turf/simulated/wall/r_titanium, -/area/miningstation/intensive) -"Da" = ( -/obj/machinery/light{ - dir = 4; - icon_state = "tube1" - }, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/miningstation/hangarhall) -"DD" = ( -/obj/structure/broken_cryo, -/obj/effect/floor_decal/industrial/warning{ - dir = 8; - icon_state = "warning" - }, -/turf/simulated/floor/tiled/white, -/area/miningstation/cryo) -"DF" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/miningstation/dormhall) -"DO" = ( -/obj/structure/table/marble, -/obj/random/projectile, -/turf/simulated/floor/tiled/freezer, -/area/miningstation/walkin) -"Ee" = ( -/obj/effect/gibspawner/human, -/obj/effect/floor_decal/corner/blue{ - dir = 9 - }, -/turf/simulated/floor/tiled/white, -/area/miningstation/cryo) -"Eh" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/miningstation/hangarhall) -"Ep" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/techfloor/grid, -/area/miningstation/hangar) -"EJ" = ( -/obj/structure/broken_cryo, -/obj/effect/floor_decal/industrial/warning{ - dir = 10; - icon_state = "warning" - }, -/turf/simulated/floor/tiled/white, -/area/miningstation/cryo) -"EQ" = ( -/obj/effect/floor_decal/corner/blue{ - dir = 8 - }, -/obj/effect/floor_decal/corner/blue, -/turf/simulated/floor/tiled/white, -/area/miningstation/cryo) -"Fa" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/miningstation/hangarhall) -"Fs" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/miningstation/hangar) -"Fy" = ( -/obj/effect/floor_decal/corner/blue{ - dir = 5 - }, -/turf/simulated/floor/tiled/white, -/area/miningstation/cryo) -"FF" = ( -/obj/effect/floor_decal/corner/blue{ - dir = 6 - }, -/mob/living/simple_animal/hostile/meat/humansecurity, -/turf/simulated/floor/tiled/white, -/area/miningstation/cryo) -"FI" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/tiled/techfloor/grid, -/area/miningstation/hangarhall) -"Gv" = ( -/obj/effect/paint/black, -/obj/effect/wallframe_spawn/reinforced/titanium, -/turf/space, -/area/miningstation/bridge) -"GQ" = ( -/obj/effect/floor_decal/corner/blue, -/obj/effect/floor_decal/corner/blue{ - dir = 8 - }, -/turf/simulated/floor/tiled/white, -/area/miningstation/cryo) -"Ho" = ( -/obj/effect/floor_decal/corner/blue{ - dir = 6 - }, -/mob/living/simple_animal/hostile/meat/abomination, -/turf/simulated/floor/tiled/white, -/area/miningstation/cryo) -"Hw" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/turf/simulated/floor/tiled/white, -/area/miningstation/cryo) -"Hy" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/mob/living/simple_animal/hostile/meat/horror, -/turf/simulated/floor/tiled/techfloor, -/area/miningstation/mess) -"HK" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/miningstation/intensive) -"HP" = ( -/mob/living/simple_animal/hostile/meat/horrorminer, -/turf/simulated/floor/tiled/techfloor/grid, -/area/miningstation/prep2) -"Ip" = ( -/obj/structure/cable{ - icon_state = "2-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/miningstation/hangarhall) -"ID" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/light_switch{ - pixel_x = -32 - }, -/turf/simulated/floor/tiled/techfloor, -/area/miningstation/mess) -"Jd" = ( -/obj/effect/paint/black, -/obj/structure/reagent_dispensers/acid, -/turf/simulated/wall/r_titanium, -/area/miningstation/prep) -"Jg" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/techfloor/grid, -/area/miningstation/hangar) -"Jq" = ( -/mob/living/simple_animal/hostile/meat/horror, -/turf/simulated/floor/carpet, -/area/miningstation/recroom) -"Jr" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 8 - }, -/turf/simulated/floor/tiled/white, -/area/miningstation/cryo) -"JC" = ( -/obj/structure/broken_cryo, -/obj/effect/floor_decal/industrial/warning{ - dir = 9; - icon_state = "warning" - }, -/turf/simulated/floor/tiled/white, -/area/miningstation/cryo) -"JX" = ( -/obj/effect/shuttle_landmark/nav_miningstation/hangar, -/turf/simulated/floor/plating, -/area/miningstation/hangar) -"Kd" = ( -/obj/machinery/light{ - dir = 8; - icon_state = "tube1" - }, -/mob/living/simple_animal/hostile/meat/strippedhuman, -/turf/simulated/floor/tiled/freezer, -/area/miningstation/bathroom) -"Kl" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/mob/living/simple_animal/hostile/meat/horrorminer, -/turf/simulated/floor/tiled/techfloor/grid, -/area/miningstation/dormhall) -"Ky" = ( -/obj/structure/janitorialcart, -/obj/machinery/alarm{ - dir = 1; - pixel_y = -25 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/miningstation/janitorcloset) -"KC" = ( -/obj/machinery/light, -/mob/living/simple_animal/hostile/meat/strippedhuman, -/turf/simulated/floor/tiled/techfloor, -/area/miningstation/bridge) -"KW" = ( -/obj/machinery/door/airlock/multi_tile/civilian, -/turf/simulated/floor/tiled/techfloor/grid, -/area/miningstation/hangar) -"Lf" = ( -/obj/effect/paint/black, -/turf/simulated/wall/r_titanium, -/area/miningstation/chief) -"Li" = ( -/obj/effect/gibspawner/human, -/obj/structure/table/rack, -/turf/simulated/floor/tiled/white, -/area/miningstation/cryo) -"Ly" = ( -/obj/structure/sign/bluecross_2, -/obj/effect/paint/black, -/turf/simulated/wall/r_titanium, -/area/miningstation/physician2) -"LT" = ( -/obj/effect/floor_decal/corner/blue{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/miningstation/cryo) -"LU" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/mob/living/simple_animal/hostile/meat/horrorminer, -/turf/simulated/floor/tiled/techfloor/grid, -/area/miningstation/dormhall) -"Mu" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/miningstation/hangarhall) -"MD" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/light, -/obj/effect/gibspawner/human, -/turf/simulated/floor/tiled/techfloor/grid, -/area/miningstation/hangarhall) -"MJ" = ( -/obj/effect/gibspawner/human, -/obj/effect/floor_decal/corner/blue{ - dir = 6 - }, -/turf/simulated/floor/tiled/white, -/area/miningstation/cryo) -"Nz" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 4 - }, -/mob/living/simple_animal/hostile/meat/horrorminer, -/turf/simulated/floor/tiled/techfloor/grid, -/area/miningstation/operationshall) -"NO" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/techfloor/grid, -/area/miningstation/hangarhall) -"NU" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/mob/living/simple_animal/hostile/meat/humansecurity, -/turf/simulated/floor/tiled/white, -/area/miningstation/cryo) -"Oa" = ( -/obj/machinery/cryopod{ - dir = 2 - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 6; - icon_state = "warning" - }, -/turf/simulated/floor/tiled/white, -/area/miningstation/cryo) -"Ok" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/door/airlock/civilian, -/obj/machinery/door/firedoor, -/turf/simulated/floor/tiled/techfloor/grid, -/area/miningstation/operationshall) -"Oy" = ( -/obj/structure/reagent_dispensers/watertank, -/turf/simulated/floor/tiled/monotile, -/area/miningstation/hangar) -"OI" = ( -/obj/machinery/cryopod{ - dir = 2 - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 4; - icon_state = "warning" - }, -/turf/simulated/floor/tiled/white, -/area/miningstation/cryo) -"OQ" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/mob/living/simple_animal/hostile/meat/strippedhuman, -/turf/simulated/floor/tiled/techfloor, -/area/miningstation/bridge) -"OZ" = ( -/obj/effect/gibspawner/human, -/turf/simulated/floor/tiled/freezer, -/area/miningstation/walkin) -"Pk" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/techfloor/grid, -/area/miningstation/hangarhall) -"Pr" = ( -/obj/structure/cable{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/miningstation/hangarhall) -"Px" = ( -/obj/effect/paint/black, -/turf/simulated/wall/r_titanium, -/area/miningstation/operationshall) -"Qb" = ( -/obj/structure/lattice, -/obj/effect/overmap/visitable/sector/miningstation, -/turf/space, -/area/space) -"Qf" = ( -/obj/effect/floor_decal/corner/blue{ - dir = 9 - }, -/turf/simulated/floor/tiled/white, -/area/miningstation/cryo) -"QN" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/alarm{ - dir = 1; - pixel_y = -25 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/miningstation/operationshall) -"Rv" = ( -/obj/structure/broken_cryo, -/obj/effect/floor_decal/industrial/warning{ - dir = 6; - icon_state = "warning" - }, -/turf/simulated/floor/tiled/white, -/area/miningstation/cryo) -"Sc" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/effect/gibspawner/human, -/turf/simulated/floor/tiled/techfloor/grid, -/area/miningstation/dormhall) -"Se" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/turf/simulated/floor/tiled/techfloor, -/area/miningstation/prep) -"Sn" = ( -/obj/structure/closet/emcloset, -/obj/effect/floor_decal/industrial/hatch, -/obj/effect/floor_decal/industrial/hatch/yellow, -/obj/item/gun/projectile/pistol/throwback, -/turf/simulated/floor/tiled/techfloor/grid, -/area/miningstation/hangarhall) -"SA" = ( -/obj/machinery/computer/modular/preset/engineering{ - dir = 4; - icon_state = "console" - }, -/obj/effect/floor_decal/corner/blue{ - dir = 9 - }, -/turf/simulated/floor/tiled/white, -/area/miningstation/cryo) -"Tp" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/light/small{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/miningstation/hangarhall) -"TH" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 8 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/miningstation/hangarhall) -"TJ" = ( -/obj/machinery/light{ - dir = 1 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/miningstation/hangarhall) -"Ul" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/techfloor/grid, -/area/miningstation/hangar) -"UB" = ( -/obj/machinery/computer/modular/preset/engineering{ - dir = 8; - icon_state = "console" - }, -/obj/item/device/radio/intercom{ - dir = 8; - pixel_x = 21 - }, -/turf/simulated/floor/tiled/techfloor, -/area/miningstation/bridge) -"UW" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 8 - }, -/turf/simulated/floor/tiled/white, -/area/miningstation/cryo) -"VC" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/mob/living/simple_animal/hostile/meat/humansecurity, -/turf/simulated/floor/tiled/techfloor/grid, -/area/miningstation/dormhall) -"VE" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/mob/living/simple_animal/hostile/meat/horrorminer, -/turf/simulated/floor/tiled/techfloor/grid, -/area/miningstation/prep2) -"VF" = ( -/obj/effect/landmark/corpse/miningstation/deadminersuit, -/obj/effect/gibspawner/human, -/turf/simulated/floor/tiled/techfloor/grid, -/area/miningstation/prep2) -"VL" = ( -/obj/effect/floor_decal/corner/blue{ - dir = 9 - }, -/obj/effect/floor_decal/corner/blue{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/miningstation/cryo) -"Wf" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, -/turf/simulated/floor/tiled/techfloor, -/area/miningstation/prep) -"Wg" = ( -/obj/structure/broken_cryo, -/obj/effect/floor_decal/industrial/warning{ - dir = 4; - icon_state = "warning" - }, -/turf/simulated/floor/tiled/white, -/area/miningstation/cryo) -"Wq" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/tiled/techfloor, -/area/miningstation/mess) -"XC" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/miningstation/cryo) -"Yq" = ( -/obj/effect/gibspawner/human, -/turf/simulated/floor/tiled/techfloor/grid, -/area/miningstation/operationshall2) -"Yx" = ( -/obj/effect/paint/black, -/obj/effect/wallframe_spawn/reinforced/titanium, -/turf/space, -/area/miningstation/operationshall) -"YE" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 1 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/miningstation/operationshall2) -"YP" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/turf/simulated/floor/tiled/techfloor/grid, -/area/miningstation/fix) -"YV" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/miningstation/operationshall) -"YX" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/tiled/techfloor/grid, -/area/miningstation/hangarhall) -"Zc" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/mob/living/simple_animal/hostile/meat/humansecurity, -/turf/simulated/floor/tiled/techfloor, -/area/miningstation/dorms) -"Zk" = ( -/obj/structure/table/rack, -/turf/simulated/floor/tiled/white, -/area/miningstation/cryo) -"ZF" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/turf/simulated/floor/tiled/white, -/area/miningstation/cryo) - -(1,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(2,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(3,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(4,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(5,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(6,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(7,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(8,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(9,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(10,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(11,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(12,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(13,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(14,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(15,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(16,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(17,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(18,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(19,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(20,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -cr -cr -cr -aa -cr -cr -cr -aa -aa -aa -aa -aa -aa -aa -aa -aa -cr -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(21,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -cr -cr -cr -cr -cr -cr -cr -cr -cr -cr -cr -cr -aa -aa -aa -aa -aa -aa -aa -cr -cr -cr -fW -fW -cr -cr -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(22,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -cr -cr -cr -fW -fW -fW -fW -fW -fW -cr -cr -cr -cr -cr -aa -cr -cr -aa -aa -cr -cr -cr -cr -cr -fW -fW -fW -fW -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(23,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -tf -fW -fW -fW -fW -fW -fW -fW -cr -cr -fW -fW -fW -fW -fW -cr -cr -fW -fW -cr -cr -cr -cr -cr -cr -cr -cr -fW -fW -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(24,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -cr -fW -fW -fW -mF -fW -fW -fW -cr -cr -cr -fW -fW -fW -cr -cr -jR -cr -cr -cr -cr -cr -cr -cr -cr -fW -fW -fW -fW -cr -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(25,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -cr -cr -cr -fW -mF -fW -fW -fW -fW -fW -cr -cr -fW -fW -fW -cr -cr -cr -cr -cr -cr -cr -cr -cr -cr -cr -fW -fW -fW -fW -cr -cr -aa -cr -aa -aa -aa -aa -cr -cr -cr -cr -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(26,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -tf -cr -tf -cr -fW -fW -cr -fW -fW -cr -jR -cr -fW -fW -fW -fW -fW -fW -fW -fW -cr -fW -fW -fW -cr -fW -fW -fW -cr -cr -cr -cr -jR -cr -cr -cr -cr -aa -aa -cr -fW -cr -cr -aa -aa -aa -aa -aa -aa -aa -aa -cr -cr -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(27,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -cr -fD -fD -ch -ch -fD -fD -fD -vH -fW -fW -cr -fW -fW -fW -fW -fW -fW -cr -fW -fW -cr -fW -fW -fW -cr -fW -fW -fW -cr -fW -cr -cr -fW -fW -fW -cr -cr -cr -jR -cr -fW -fW -cr -cr -cr -cr -cr -aa -aa -aa -cr -cr -cr -cr -cr -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(28,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -cr -aS -fD -cs -eJ -fD -ga -gh -vH -fW -fW -cr -fW -fW -fW -fW -fW -fW -cr -fW -fW -cr -fW -fW -fW -cr -fW -cr -cr -cr -cr -jR -cr -fW -fW -fW -cr -cr -cr -cr -cr -fW -fW -cr -cr -cr -fW -fW -fW -fW -fW -fW -cr -cr -cr -cr -fW -fW -fW -fW -fW -cr -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(29,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -cr -aX -bc -cI -cI -fN -gb -gl -vH -fW -fW -cr -fW -cr -fW -fW -fW -fW -cr -cr -cr -cr -cr -cr -cr -cr -cr -cr -fW -cr -fW -fW -cr -fW -fW -fW -fW -cr -fW -fW -fW -fW -cr -cr -cr -cr -cr -cr -cr -fW -fW -fW -cr -cr -cr -cr -cr -cr -fW -fW -fW -cr -jR -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(30,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -cr -aX -be -cI -cI -cI -cI -rD -vH -fW -cr -cr -cr -cr -fW -fW -fW -fW -cr -fW -fW -fW -fW -cr -cr -cr -cr -cr -fW -cr -fW -cr -cr -cr -cr -fW -fW -cr -fW -fW -fW -fW -cr -cr -cr -cr -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -cr -cr -fW -fW -fW -fW -cr -fW -fW -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(31,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -cr -aX -cg -cI -cI -cI -cI -rw -vH -fW -cr -cr -cr -cr -fW -fW -fW -fW -cr -cr -cr -cr -cr -cr -cr -fW -fW -fW -fW -cr -fW -fW -cr -cr -cr -fW -fW -cr -fW -fW -fW -fW -fW -fW -cr -cr -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -cr -cr -fW -fW -fW -fW -fW -fW -cr -fW -cr -aa -fW -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(32,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -cr -aX -bc -cI -YP -fW -fW -fW -fW -fW -fW -cr -cr -cr -fW -fW -fW -fW -cr -fW -fW -fW -fW -fW -cr -fW -fW -fW -fW -cr -fW -fW -fW -cr -cr -fW -fW -cr -fW -fW -fW -fW -fW -fW -fW -cr -fW -fW -fW -fW -fW -fW -mF -jR -fW -fW -cr -cr -fW -fW -fW -cr -cr -cr -cr -cr -cr -fW -fW -fW -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(33,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -cr -aX -be -cI -cI -fW -fW -fW -cr -jR -cr -fW -fW -fW -fW -fW -fW -fW -cr -fW -fW -fW -fW -fW -cr -fW -fW -fW -fW -cr -fW -fW -fW -fW -fW -fW -fW -cr -fW -fW -fW -cr -cr -fW -fW -cr -fW -fW -fW -fW -fW -fW -cr -cr -cr -cr -cr -cr -cr -cr -cr -cr -cr -cr -cr -jR -cr -cr -cr -cr -cr -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(34,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -cr -aX -cg -cI -gf -fW -fW -fW -cr -cr -cr -fW -fW -fW -fW -fW -fW -fW -cr -fW -fW -fW -fW -fW -cr -fW -fW -fW -fW -cr -fW -fW -fW -fW -fW -fW -fW -cr -cr -cr -cr -cr -cr -cr -cr -cr -fW -fW -fW -fW -fW -fW -fW -cr -cr -jR -fW -cr -fW -fW -fW -fW -cr -fW -fW -cr -fW -fW -fW -fW -fW -cr -cr -fW -fW -fW -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(35,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -cr -aY -aS -da -fD -fW -fW -fW -fW -cr -cr -fW -fW -fW -fW -fW -fW -cr -cr -fW -fW -fW -fW -fW -cr -fW -fW -fW -fW -cr -fW -fW -cr -fW -fW -cr -cr -cr -cr -cr -fW -fW -fW -cr -cr -cr -fW -fW -fW -fW -fW -fW -fW -fW -fW -cr -fW -cr -cr -cr -fW -fW -cr -fW -fW -cr -fW -fW -fW -fW -fW -cr -cr -cr -cr -cr -cr -cr -cr -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(36,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -cr -cr -cr -cr -fW -fW -fW -fW -fW -jR -fW -fW -fW -fW -fW -fW -cr -fW -fW -fW -fW -fW -fW -cr -fW -fW -fW -fW -cr -cr -cr -fW -fW -fW -cr -jR -cr -cr -cr -fW -fW -cr -fW -fW -cr -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -cr -cr -cr -fW -cr -cr -jR -cr -cr -cr -cr -fW -fW -fW -cr -cr -cr -fW -cr -cr -fW -cr -fW -fW -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(37,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -cr -fW -fW -fW -fW -fW -fW -cr -fW -fW -fW -fW -fW -fW -cr -fW -fW -fW -fW -fW -fW -cr -cr -cr -cr -cr -cr -cr -cr -cr -cr -cr -cr -cr -fW -fW -fW -fW -fW -fW -fW -fW -cr -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -cr -jR -cr -fW -cr -cr -cr -cr -cr -cr -cr -fW -fW -fW -cr -cr -cr -fW -fW -fW -fW -cr -fW -fW -fW -fW -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(38,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -fW -fW -fW -fW -fW -cr -cr -fW -fW -fW -fW -fW -fW -cr -fW -fW -fW -fW -fW -fW -cr -fW -cr -cr -fW -cr -fW -fW -fW -cr -fW -fW -cr -fW -fW -fW -fW -fW -fW -cr -cr -cr -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -cr -cr -cr -cr -fW -cr -cr -cr -cr -cr -cr -cr -fW -fW -fW -cr -fW -fW -fW -fW -fW -fW -cr -cr -cr -cr -fW -fW -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(39,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -cr -cr -fW -cr -cr -cr -cr -fW -cr -cr -cr -cr -cr -cr -fW -cr -cr -cr -cr -cr -cr -fW -fW -fW -fW -cr -fW -fW -fW -fW -fW -fW -cr -fW -cr -cr -fW -fW -fW -cr -cr -cr -cr -cr -cr -cr -cr -cr -cr -fW -fW -fW -cr -cr -fW -fW -fW -cr -cr -cr -fW -fW -fW -fW -fW -fW -fW -cr -fW -fW -fW -cr -cr -cr -cr -cr -cr -cr -cr -cr -cr -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(40,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -jR -cr -fW -fW -fW -fW -cr -fW -fW -cr -cr -cr -cr -cr -cr -cr -cr -cr -cr -cr -cr -fW -fW -fW -fW -cr -fW -fW -fW -fW -fW -cr -cr -fW -cr -cr -cr -cr -cr -cr -cr -cr -cr -cr -cr -cr -cr -cr -cr -cr -fW -fW -cr -cr -fW -fW -fW -cr -cr -cr -fW -fW -fW -fW -fW -fW -fW -cr -fW -fW -fW -fW -fW -fW -fW -cr -fW -cr -fW -fW -cr -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(41,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -cr -cr -fW -fW -fW -fW -cr -fW -fW -jR -fW -fW -fW -fW -fW -fW -cr -cr -cr -cr -fW -fW -fW -jR -cr -cr -cr -cr -fW -fW -fW -cr -cr -fW -cr -cr -cr -fW -fW -fo -fo -fo -fo -fo -fo -fo -fW -fW -cr -cr -cr -cr -cr -cr -cr -cr -cr -cr -cr -cr -cr -cr -cr -cr -fW -fW -fW -cr -fW -fW -fW -fW -cr -cr -cr -cr -fW -cr -fW -fW -cr -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(42,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -cr -cr -fW -fW -fW -fW -cr -cr -fW -cr -cr -cr -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -cr -cr -cr -cr -jR -fo -fo -fo -fo -fo -fo -fo -fo -fo -fo -fo -fo -rJ -sZ -SA -wF -CB -fo -fo -fo -fo -fo -fo -fo -fo -fo -fo -fo -fo -cr -fW -fW -cr -cr -cr -cr -cr -cr -cr -cr -cr -fW -fW -fW -cr -fW -fW -cr -fW -cr -fW -fW -cr -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(43,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -cr -cr -fW -fW -fW -fW -cr -jR -cr -cr -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -cr -jR -cr -cr -cr -fo -VL -bz -Qf -Qf -Ee -Qf -Qf -Qf -Qf -bz -Qf -Bp -vE -ZF -Hw -Br -Qf -rL -Qf -Qf -Qf -Qf -Cq -Qf -rL -Qf -yc -fo -cr -fW -fW -cr -fW -fW -fW -cr -cr -cr -cr -cr -cr -cr -cr -cr -fW -fW -fW -fW -fW -fW -fW -cr -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(44,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -cr -cr -cr -cr -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -fo -Fy -hq -qI -qI -DD -DD -DD -DD -DD -qI -EJ -ci -UW -NU -Jr -ci -JC -DD -DD -DD -DD -qI -qI -qI -DD -EJ -EQ -fo -cr -fW -fW -fW -fW -fW -fW -fW -fW -cr -fW -fW -fW -fW -fW -cr -cr -cr -cr -cr -cr -cr -cr -cr -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(45,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -cr -cr -cr -cr -cr -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -fo -Fy -hs -Wg -Wg -Wg -OI -OI -Wg -OI -Wg -Rv -ci -Zk -XC -Zk -ci -hs -OI -OI -Wg -Wg -Wg -Wg -Wg -OI -Oa -EQ -fo -cr -fW -fW -fW -fW -fW -fW -fW -cr -cr -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -cr -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(46,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -cr -cr -cr -jR -cr -cr -cr -jR -cr -cr -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -fo -nx -hI -uR -uR -Ho -uR -uR -uR -uR -hI -FF -LT -Li -XC -Zk -wU -uR -hI -uR -uR -MJ -uR -uR -uR -hI -uR -fP -fo -cr -fW -fW -fW -fW -fW -fW -cr -fW -cr -cr -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -cr -cr -aa -cr -aa -cr -cr -aa -aa -aa -cr -cr -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(47,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -jR -cr -cr -fW -fW -cr -fW -cr -fW -fW -fW -fW -fW -fW -fW -fW -ao -ao -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -fo -fo -fo -fo -fo -fo -fo -fo -fo -fo -fo -fo -Fy -Zk -XC -Zk -GQ -fo -fo -fo -fo -fo -fo -fo -fo -fo -fo -fo -fo -ao -fW -fW -fW -fW -fW -fW -fW -fW -cr -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -cr -cr -fW -cr -cr -cr -cr -cr -cr -cr -fW -cr -cr -cr -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(48,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -fW -fW -fW -fW -fW -cr -cr -cr -fW -fW -fW -fW -fW -fW -ao -ao -ao -ao -ao -ao -ao -ao -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -cr -qU -xV -uR -XC -uR -fP -qU -fW -fW -ao -fW -fW -fW -fW -fW -ao -ao -ao -ao -ao -ao -fW -fW -fW -fW -fW -fW -cr -fW -fW -fW -fW -fW -fW -cr -cr -cr -cr -cr -cr -cr -fW -cr -cr -fW -fW -cr -fW -fW -fW -fW -cr -fW -cr -cr -cr -cr -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(49,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -co -co -co -co -co -co -co -co -co -co -co -co -co -co -co -co -co -co -co -co -co -co -co -co -co -co -co -co -co -bP -bP -bP -bP -bP -bP -bP -bP -bP -bP -bP -ao -fo -fo -fo -ij -fo -fo -fo -ao -ao -ao -kp -kp -kp -kp -kp -kp -kp -kp -kp -mz -mz -mz -mz -mz -fW -fW -cr -cr -cr -cr -cr -fW -fW -fW -cr -cr -cr -cr -cr -cr -cr -fW -cr -cr -cr -cr -cr -fW -fW -fW -fW -cr -fW -fW -fW -fW -cr -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(50,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ag -ag -ai -ag -ag -ag -ai -ay -ah -gN -gN -ai -ag -ag -ag -ai -ag -gN -gN -ag -ai -ag -ay -ag -aH -ag -gN -bP -bQ -cl -bp -cX -dx -dx -dx -ez -dx -dx -bP -bP -Px -gx -hP -hQ -jU -jX -Px -ao -ao -ao -kp -kz -kJ -kK -la -kJ -kK -kK -kK -mz -nz -on -oO -mz -fW -cr -jR -fW -cr -cr -fW -fW -cr -cr -cr -jR -cr -fW -fW -cr -cr -cr -cr -cr -jR -cr -cr -cr -fW -fW -cr -cr -fW -cr -cr -fW -cr -cr -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(51,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ag -ag -ag -ag -ag -ag -ag -ag -ag -ag -ag -ag -ag -ag -gN -ag -ag -ag -ag -ag -ah -ag -gN -ag -aL -ag -gN -bP -Sn -bS -dz -bS -dx -dx -dx -dx -dx -dx -bP -bP -Px -lf -gw -hQ -gw -gw -Px -Px -kp -kp -kp -kA -kK -kR -pv -kK -kR -qP -qT -mz -nA -oo -oP -qK -cr -cr -cr -fW -jR -cr -cr -fW -jR -cr -cr -cr -cr -fW -fW -cr -cr -cr -jR -cr -cr -cr -cr -cr -fW -cr -cr -cr -fW -cr -cr -fW -cr -cr -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(52,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ag -ag -ag -ag -ag -ag -ag -ag -ag -ag -ag -gN -ag -ah -ag -ag -gN -ag -ag -ag -ag -gN -gN -ag -fb -co -co -bP -bP -bP -dz -bS -bS -bS -bS -bS -cm -bS -cl -bS -Px -gA -gw -hQ -gw -Nz -rx -Px -ry -lX -kp -kB -kK -LU -kK -kK -VC -qQ -kK -mz -nB -op -oQ -qK -ao -cr -jR -fW -cr -cr -cr -cr -cr -fW -fW -fW -fW -fW -fW -cr -cr -fW -fW -fW -cr -cr -cr -cr -fW -cr -cr -cr -fW -fW -cr -fW -cr -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(53,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ag -ag -ag -ak -ag -ag -ag -az -ag -ag -ag -ag -ak -ag -ag -ag -ag -az -ag -ag -ag -ag -ag -ak -aL -KW -qE -bI -qG -yQ -bu -cY -bV -bV -pO -bV -bV -bV -bV -bV -ge -gU -ht -ii -jV -YV -jY -ge -rz -kL -kq -kC -kL -kT -lb -kL -ln -qR -kL -mA -nC -oq -oR -qK -ao -cr -cr -cr -cr -cr -cr -cr -cr -fW -fW -fW -fW -fW -fW -cr -cr -fW -fW -fW -fW -fW -fW -cr -fW -fW -cr -cr -cr -cr -cr -fW -cr -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(54,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ag -ag -ag -al -ap -ap -ap -ar -ap -ap -ap -ap -aB -ap -ap -ap -ap -ar -ap -ap -ap -ap -ap -aB -aW -bk -Ul -bJ -qH -Pk -cp -cZ -dy -FI -FI -FI -FI -FI -FI -Mu -gg -gV -hu -rA -jW -jW -jW -gg -DF -rd -kr -kD -kM -kU -rd -lc -lo -qS -lZ -mB -nD -or -oS -mz -fW -cr -cr -cr -cr -cr -cr -fW -cr -cr -fW -fW -fW -fW -fW -cr -cr -fW -fW -fW -fW -fW -fW -cr -fW -fW -fW -cr -fW -fW -fW -fW -cr -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(55,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ag -ag -ag -am -as -av -av -av -av -av -av -av -av -av -av -av -av -av -av -av -av -av -av -bb -am -co -co -bP -bP -bP -Pr -Da -AQ -bS -cm -cn -bS -bS -cn -TH -Px -gA -gX -iR -gw -gw -rx -Px -rB -lX -kp -kE -kK -kV -AO -lg -lp -pR -kK -mz -Bt -Jq -oP -mz -fW -fW -cr -cr -cr -cr -fW -cr -cr -cr -fW -fW -fW -fW -fW -cr -cr -fW -fW -fW -fW -cr -cr -cr -cr -cr -cr -cr -cr -cr -cr -cr -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(56,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ag -ag -tG -zy -at -aw -aw -aw -aw -aw -aw -aw -aw -aw -aw -aw -aw -aw -aw -aw -aw -aw -aw -aw -AD -co -co -bP -bP -bP -cJ -bP -bP -bP -bP -bP -bP -bP -bP -bP -Px -gW -gX -Px -Px -Px -Px -ab -ab -ab -kp -kF -kK -kW -kK -kK -lq -lK -kK -mz -nE -op -ru -mz -ao -fW -fW -cr -cr -cr -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -cr -cr -cr -jR -jR -cr -cr -cr -jR -cr -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(57,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ag -ag -ag -am -at -aw -aw -aw -aw -aw -aw -aw -aw -aw -aw -aw -aw -aw -aw -aw -aw -aw -aw -aw -bf -co -co -bP -bP -bP -Ip -dd -Fa -dY -ej -eA -eM -fj -dY -ab -Px -gw -QN -hw -hS -hS -hw -fW -fW -fW -kp -kF -kN -wx -kK -lh -kS -lK -ma -mz -nF -os -oT -mz -ao -ao -fW -fW -cr -cr -cr -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -cr -cr -cr -cr -cr -fW -jR -cr -cr -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(58,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ag -ag -ag -am -at -aw -aw -aw -aw -aw -aw -aw -aw -aw -aw -aw -aw -aw -aw -aw -aw -aw -aw -aw -bf -KW -Fs -bI -qG -yQ -bS -de -dB -dY -ek -eB -eN -tB -dY -ao -Px -gw -gX -hw -hT -il -hw -fW -mZ -fW -ks -ks -ks -ks -ks -kp -kS -lK -mb -mz -mz -mz -mz -mz -ao -cr -fW -cr -cr -cr -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -cr -cr -cr -fW -cr -cr -cr -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(59,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ag -ag -ag -am -at -aw -aw -aw -aw -aw -aw -aw -aw -aw -aw -aw -aw -aw -aw -aw -aw -aw -aw -aw -bg -Jg -Ep -cj -Eh -bV -bV -df -dC -dZ -el -eB -eN -fl -dY -ao -Px -gA -gX -hw -hU -im -hw -fW -mZ -fW -ks -kG -kO -kX -ld -ks -lr -lL -mb -mC -nG -ot -oU -mb -ao -cr -cr -cr -cr -cr -cr -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -cr -cr -cr -cr -cr -cr -cr -jR -cr -jR -cr -cr -cr -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(60,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ag -ag -tG -zy -at -aw -aw -aw -aw -aw -aw -aw -aw -aw -aw -aw -aw -aw -aw -aw -aw -aw -aw -aw -xH -co -co -bP -bP -bP -bS -dg -dD -ea -em -eC -eO -fm -dY -ao -Px -hr -hO -hx -hV -hH -hw -ao -ao -ao -ks -iC -ik -kY -le -li -ls -lM -mc -mG -kP -ou -iM -mb -ao -cr -cr -cr -cr -cr -cr -fW -fW -fW -fW -fW -fW -fW -fW -fW -cr -cr -cr -cr -cr -cr -fW -fW -fW -fW -cr -cr -cr -cr -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(61,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ag -ag -ag -am -at -aw -aw -aw -aw -aw -aw -aw -aw -aw -aw -aw -aw -aw -aw -aw -aw -aw -aw -aw -cE -ag -Oy -bP -bQ -bS -cK -de -dB -dY -xe -eD -eP -fn -dY -ao -Px -gw -gX -hw -hW -ip -hw -cr -ao -fW -ks -kI -kQ -kZ -rb -ks -lr -lL -mb -mH -nI -ov -mH -mb -ao -fW -fW -fW -cr -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -cr -jR -cr -cr -fW -fW -fW -fW -fW -fW -fW -cr -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(62,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ag -ag -ag -am -at -aw -aw -aw -aw -aw -aw -aw -aw -aw -aw -aw -aw -aw -aw -aw -aw -aw -aw -aw -fe -bv -ag -bP -bR -bS -bS -de -dz -dY -en -eB -eR -fv -dY -ao -gu -gw -gX -mn -hT -Ky -hw -fW -ao -fW -ks -ks -ks -ks -ks -ks -kS -lK -mb -mb -mb -mb -mb -mb -ao -fW -fW -fW -cr -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -mF -fW -fW -fW -fW -fW -fW -cr -cr -cr -cr -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(63,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ae -ag -ag -ag -am -at -aw -aw -aw -aw -aw -aw -aw -aw -aw -aw -aw -aw -aw -aw -aw -aw -aw -aw -aw -cE -ag -gN -bP -bX -bS -cH -dh -dz -dY -eo -eB -eR -fq -dY -ao -Px -gw -gX -hw -hT -il -hw -fW -ao -cr -cr -cr -cr -ao -fW -rc -kS -lK -me -me -me -me -me -me -fW -fW -fW -fW -cr -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -cr -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(64,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -af -ag -ag -ah -am -at -aw -aw -aw -aw -aw -aw -aw -aw -aw -aw -aw -aw -aw -aw -aw -aw -aw -aw -aw -cE -ag -kj -bP -bS -bS -jO -di -dE -dY -ep -eE -eR -kg -dY -ao -Px -gw -gX -hw -hX -hX -hw -fW -ao -cr -cr -cr -cr -ao -fW -kp -kS -lK -me -mI -mI -mI -mI -me -fW -fW -fW -fW -cr -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -cr -cr -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(65,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -af -ag -ag -tG -zy -at -aw -aw -aw -aw -aw -aw -aw -aw -JX -aw -aw -aw -aw -aw -aw -aw -aw -aw -aw -cE -ag -ag -bP -TJ -bS -bS -de -dF -dY -eo -eB -eT -fq -dY -ao -Px -Yx -Ok -hw -hw -hw -Lf -Lf -Lf -Lf -Lf -Lf -ao -ao -ao -kp -lt -lN -mg -iq -nJ -qJ -js -me -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -jR -cr -cr -cr -cr -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -cr -jR -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(66,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -af -ag -ag -ag -am -at -aw -aw -aw -aw -aw -aw -aw -aw -aw -aw -aw -aw -aw -aw -aw -aw -aw -aw -aw -cE -ag -ag -bP -bS -bS -bS -de -dG -vT -eq -eB -eU -fs -dY -ao -gi -gD -ha -hz -hY -is -Lf -jv -ic -ke -kl -Lf -fW -ao -cr -qn -kS -lK -me -mK -nK -rE -nQ -me -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -cr -cr -cr -jR -cr -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -cr -cr -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(67,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -af -ag -ag -ag -am -at -aw -aw -aw -aw -aw -aw -aw -aw -aw -aw -aw -aw -aw -aw -aw -aw -aw -aw -aw -fe -bv -ag -bP -bS -bS -bS -de -MD -Jd -er -eF -eV -ft -dY -ao -gi -gD -hb -hA -hE -OQ -jg -jw -ka -ki -tn -Lf -fW -ao -cr -qn -kS -lK -me -mL -nL -ox -oY -me -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -cr -cr -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -cr -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(68,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -af -ag -ag -tG -zy -at -aw -aw -aw -aw -aw -aw -aw -aw -aw -aw -aw -aw -aw -aw -aw -aw -aw -aw -aw -cE -gN -gN -bP -bl -bT -bT -cN -dK -dY -es -Se -Wf -fu -dY -ao -gj -gG -ha -hB -hZ -kt -ju -jE -kb -rp -kx -Lf -fW -ao -cr -qn -lu -lO -me -mM -nN -ox -nP -me -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -cr -cr -cr -cr -cr -cr -cr -cr -cr -fW -cr -cr -jR -cr -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(69,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -af -ag -ag -ag -am -at -aw -aw -aw -aw -aw -aw -aw -aw -aw -aw -aw -aw -aw -aw -aw -aw -aw -aw -aw -xH -co -co -bP -bP -bP -bS -de -dz -eb -eq -eE -eR -fn -dY -Qb -gi -dX -mk -hC -hC -hC -qW -qX -kc -kk -kv -Lf -fW -ao -cr -kp -lv -lP -me -ir -nO -Zc -nO -me -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -cr -cr -cr -cr -cr -cr -cr -cr -cr -cr -cr -cr -cr -cr -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(70,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -af -ag -ag -ag -am -at -aw -aw -aw -aw -aw -aw -aw -aw -aw -aw -aw -aw -aw -aw -aw -aw -aw -aw -aw -cE -KW -Fs -bI -qG -yQ -bS -de -dz -dY -eo -eB -eU -fv -dY -ao -gi -gB -hc -hD -hD -hD -Lf -Lf -Lf -Lf -Lf -Lf -ao -ao -ao -kp -lr -lL -me -mO -nP -ox -oZ -me -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -cr -cr -cr -jR -cr -cr -cr -fW -fW -fW -fW -fW -fW -cr -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(71,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -af -ag -ag -ag -am -at -aw -aw -aw -aw -aw -aw -aw -aw -aw -aw -aw -aw -aw -aw -aw -aw -aw -aw -aw -gt -Jg -Ep -Tp -NO -bV -bV -dj -dB -dY -eo -eB -eT -ft -dY -ao -gi -gQ -ha -hd -ib -ix -BG -jQ -kd -km -kh -BG -cr -ao -cr -kp -lw -lK -me -mN -nO -nH -nO -me -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -cr -cr -cr -jR -cr -fW -fW -fW -cr -fW -fW -fW -fW -fW -fW -cr -cr -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(72,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -af -ag -ag -tG -zy -at -aw -aw -aw -aw -aw -aw -aw -aw -aw -aw -aw -aw -aw -aw -aw -aw -aw -aw -aw -AD -co -co -bP -bP -bP -bS -de -dz -dY -ep -jZ -eR -fx -dY -ao -gi -gH -he -hE -hE -iy -jt -jS -ig -kn -kh -BG -cr -ao -cr -qn -lx -lQ -me -mP -nQ -ox -pa -me -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -cr -fW -cr -cr -cr -fW -fW -fW -cr -fW -fW -fW -fW -fW -fW -cr -cr -cr -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(73,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -af -ag -ag -ag -am -at -aw -aw -aw -aw -aw -aw -aw -aw -aw -aw -aw -aw -aw -aw -aw -aw -aw -aw -aw -AD -co -co -bP -bP -bP -bS -de -dz -dY -eu -eB -eR -ft -dY -ao -gi -zP -ha -gE -hZ -KC -jh -jT -kf -kn -ku -BG -cr -ao -cr -qn -kS -lK -me -mQ -nR -oy -oY -me -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -cr -cr -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -cr -cr -cr -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(74,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -af -ag -ah -ag -am -at -aw -aw -aw -aw -aw -aw -aw -aw -aw -aw -aw -aw -aw -aw -aw -aw -aw -aw -aw -bf -KW -Fs -bI -qG -yQ -bS -de -dB -dY -eu -eD -eP -fv -dY -ao -gi -gI -ha -hF -UB -hC -qF -qY -in -ko -ky -BG -cr -ao -cr -qn -kS -lK -me -qk -nS -ox -pb -me -ao -ao -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -cr -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -cr -cr -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(75,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -af -ag -ag -tG -zy -at -aw -aw -aw -aw -aw -aw -aw -aw -aw -aw -aw -aw -aw -aw -aw -aw -aw -aw -aw -gF -xO -Ul -bJ -qH -YX -YX -dk -dH -ec -ev -eG -eW -fm -dY -ao -gi -Gv -gZ -gi -gi -gi -BG -BG -BG -BG -BG -BG -ao -ao -ao -kp -lr -qj -mh -ql -nT -oz -bW -me -ao -ao -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -cr -cr -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -cr -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(76,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -af -ag -ag -ag -am -au -ax -ax -ax -ax -ax -ax -ax -ax -ax -ax -ax -ax -ax -ax -ax -ax -ax -ax -bd -bh -co -co -bP -bP -bP -bS -di -dI -ed -ew -eH -eX -fy -dY -ao -zI -iB -hv -zI -ab -ab -ab -aa -aa -aa -aa -aa -aa -ao -aa -kp -kS -Kl -me -mI -mI -mI -mI -me -ao -ao -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -cr -cr -cr -cr -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -cr -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(77,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -af -ag -ag -ag -an -ap -ap -ap -aA -ap -ap -ap -ap -aG -ap -ap -ap -ap -aA -ap -ap -ap -ap -ap -aG -bi -bw -bw -bP -cb -bS -cH -dh -dB -dY -zi -eB -eB -fk -dY -ao -zI -gY -mR -zI -gm -gm -gm -gm -gm -gm -gm -gm -gm -gm -gm -gm -kS -lS -mi -mi -mi -mi -mi -mi -mi -mi -mi -fW -fW -fW -fW -fW -fW -fW -fW -fW -cr -cr -cr -cr -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(78,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -af -ag -ag -ag -aq -ag -ag -ag -aC -ag -ag -ag -ag -aq -ag -ag -ag -ag -aC -ag -ag -ag -ag -ag -aq -aL -bw -bw -bP -bS -cn -bS -db -dz -dY -ex -eI -dV -fz -dY -ab -zI -gY -hv -zI -ia -iP -gm -jm -gm -jm -gm -nf -gm -nf -gm -gm -lr -lL -mi -mS -qc -ID -pc -jx -rH -oC -mi -fW -fW -fW -fW -fW -fW -fW -fW -fW -cr -fW -fW -cr -fW -fW -fW -fW -cr -fW -fW -fW -fW -fW -fW -fW -fW -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(79,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -af -ag -ag -ah -ag -ag -ag -ah -ag -ag -ag -ag -ag -ag -ag -ah -ag -ag -ag -ag -ag -ag -ag -ag -ag -aL -ag -bC -bP -bP -bP -cM -dc -dA -dY -dY -dY -dY -dY -dY -ab -zI -gY -hv -zI -ia -iQ -gm -jn -gm -jn -gm -jn -gm -jn -gm -gm -ly -lK -mm -mT -mJ -oB -oB -pm -pw -pC -mi -fW -fW -fW -fW -fW -fW -fW -fW -fW -cr -fW -fW -cr -fW -fW -fW -fW -cr -fW -fW -fW -fW -cr -cr -cr -fW -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(80,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -af -ag -ag -aj -ag -ag -ag -aj -aD -ag -ah -ag -aj -ag -ag -ag -aj -ag -ag -ag -ag -aj -ag -aD -ag -bj -ag -bC -bN -bm -bn -cc -dl -dJ -ee -ey -ey -ee -ey -fL -fT -zI -lj -hv -zI -ih -iS -gm -jo -Kd -lV -jJ -lV -jJ -mV -qo -gm -lz -lT -mq -mW -nW -oC -pd -po -rg -nk -mi -fW -fW -fW -fW -fW -fW -fW -fW -fW -cr -fW -fW -cr -fW -fW -fW -fW -jR -fW -fW -fW -fW -cr -cr -cr -cr -jR -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(81,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -co -co -co -co -co -co -co -co -co -co -co -co -co -co -co -co -co -co -co -co -co -co -co -co -co -co -co -co -bN -cd -bo -cq -dm -hj -ef -ef -ef -ef -ef -VE -ef -gk -gJ -hf -gq -io -iT -je -jp -jK -md -mE -ng -mE -mE -qp -qB -lB -lU -mi -ni -nX -oC -oC -po -rg -pD -mi -fW -fW -fW -fW -fW -fW -fW -fW -fW -cr -fW -fW -cr -fW -fW -fW -fW -cr -fW -cr -fW -fW -fW -fW -fW -cr -cr -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(82,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aK -aE -aE -aE -aE -aE -aE -aE -aE -aE -aE -aE -aE -aE -aE -aE -bN -cd -ct -cO -dn -dL -eg -eh -eh -eZ -fA -cc -fB -gY -gY -hv -zI -it -iU -gm -jr -jL -mf -mV -nh -yI -lV -qq -gm -kS -Sc -mi -nj -nX -nm -nm -po -px -nm -mi -ao -fW -fW -fW -cr -cr -fW -fW -fW -cr -fW -fW -cr -fW -fW -fW -cr -cr -cr -cr -fW -cr -jR -cr -cr -cr -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(83,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aK -aE -aM -aM -aM -aM -aM -aM -aM -aM -aM -aM -aM -aM -aE -aE -bN -cd -cv -cc -do -dM -fr -eh -eh -fa -kw -kw -cc -zI -iG -hv -zI -gm -gm -gm -ie -jM -mj -mj -mj -mj -mj -qr -gm -kS -aF -mi -nk -Hy -nk -nk -po -po -pE -mi -ao -cr -fW -fW -cr -cr -cr -cr -cr -cr -cr -cr -cr -fW -fW -fW -fW -cr -cr -cr -jR -cr -cr -fW -fW -fW -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(84,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aK -aE -aM -aU -aU -aU -aU -aU -aU -aU -aU -aU -aU -aM -aE -aE -bN -cd -cc -VF -dp -dv -cc -cc -cc -HP -kw -bN -bN -zI -gY -hv -CD -iu -iV -gm -gm -gm -gm -mX -gm -gm -mX -gm -gm -kS -lK -mi -nl -nY -oC -oC -po -po -pD -qD -ao -cr -cr -cr -cr -cr -cr -cr -cr -cr -cr -cr -fW -fW -fW -fW -fW -fW -fW -fW -fW -cr -fW -fW -fW -fW -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(85,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aK -aE -aN -aV -aV -aV -aV -aV -aV -aV -aV -aV -aV -bq -aE -aE -bN -ce -cw -cw -dq -dw -ei -ey -ey -ei -fB -bN -bN -zI -eY -hg -CD -iv -iW -gv -if -nv -qZ -qL -iH -oK -qd -qs -gv -lr -lL -mi -nm -nX -oC -oC -po -po -nm -qD -ao -ao -cr -cr -cr -cr -fW -fW -fW -cr -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(86,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aK -aE -aO -cD -cD -cD -cD -cD -cD -cD -cD -cD -cD -aO -aE -aE -bN -bx -cx -bx -bx -dN -bx -bN -bN -bN -bN -bN -bN -zI -gM -iZ -CD -lJ -iX -ji -no -om -ml -na -pP -pW -qe -qt -gv -lu -lO -mi -nn -nZ -oD -oD -Wq -pw -rI -qD -ao -cr -cr -cr -cr -cr -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(87,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aK -aE -aP -aV -aV -aV -aV -aV -aV -aV -aV -aV -aV -br -aE -aE -ao -ck -cy -cP -dr -dO -bx -ao -ao -ao -ao -ao -ao -zI -gK -hv -CD -iD -iY -gv -jz -jP -ra -mY -pQ -pX -qf -qu -gv -kS -lK -mi -pV -oa -oA -pc -po -po -qV -mi -ao -fW -fW -cr -cr -cr -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(88,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aK -aE -aO -dT -dT -dT -dT -dT -dT -dT -dT -dT -dT -aO -aE -aE -ao -bx -cz -cR -ds -dP -bx -ao -eL -eL -eL -eL -eL -zI -gz -hh -gC -iE -mD -gv -mY -mY -mY -mY -ow -pX -qg -qv -gv -lD -lK -mi -nq -ob -oE -pf -pp -pp -pp -mi -ao -fW -fW -cr -cr -cr -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -cr -cr -cr -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(89,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aI -aK -aE -aP -aV -aV -aV -aV -aV -aV -aV -aV -aV -aV -rs -bx -bD -bx -cA -cy -cG -du -dQ -bx -ao -eL -fM -fE -fM -fV -gn -gY -hi -CD -iF -ja -gv -jA -lk -mo -nc -rF -pY -qh -qu -gv -lx -lQ -mr -nr -oc -nr -nr -nr -rG -pF -mr -ao -fW -fW -fW -fW -cr -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -cr -cr -cr -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(90,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aI -aM -aM -aO -dT -dT -dT -dT -dT -dT -dT -dT -dT -dT -aO -bx -bE -bO -cf -cB -cT -dS -dR -bx -ao -eL -fc -fF -fO -fX -go -gJ -lH -CD -mw -jb -jj -jB -ll -mp -nd -HK -mp -qi -qu -jj -kS -lL -mr -ns -od -oF -oF -pq -nr -pG -mr -ao -fW -fW -fW -fW -cr -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -cr -cr -cr -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(91,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aI -aM -aQ -bH -aV -aV -aV -aV -aV -aV -aV -aV -aV -aV -aV -by -bF -yA -ca -cS -cV -ri -rn -bx -ao -eL -fd -fG -fG -fG -gn -AW -hk -gv -iN -jc -jk -jC -lm -mt -ne -pT -ne -oV -qw -jk -lE -lW -ms -nt -oe -oG -pg -oc -nr -pH -mr -mU -fW -fW -fW -fW -cr -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -jR -cr -fW -fW -fW -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(92,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aI -aM -aM -aO -dT -dT -dT -dT -dT -dT -dT -dT -dT -dT -aO -bx -bG -uZ -jF -cy -cW -rj -ro -bx -ao -eL -dW -fH -pS -fg -zI -hv -hl -gv -iO -jd -jj -qx -lC -pU -pU -jl -pZ -oX -jD -Ly -kK -lX -mr -nu -of -oG -oG -pr -py -pI -mr -mU -fW -fW -fW -fW -cr -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -cr -fW -cr -jR -fW -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(93,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aI -aK -aE -aP -aV -aV -aV -aV -aV -aV -aV -aV -aV -aV -rt -bx -bx -bx -bx -cF -cU -dt -rm -bx -ao -eL -fg -fG -fG -fG -gn -hv -gy -gv -gv -gv -gv -jG -lF -iA -pU -jl -iI -pl -iJ -jl -kK -lg -mr -iK -og -oH -ph -oc -nr -pJ -mr -mU -fW -fW -fW -fW -cr -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -cr -cr -cr -cr -fW -cr -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(94,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aK -aE -aO -dT -dT -dT -dT -dT -dT -dT -dT -dT -dT -aO -aE -aE -ao -bx -bx -bx -bx -bx -bx -ao -eL -fh -fI -fQ -fQ -gp -lR -gO -hG -YE -Yq -pU -jH -lG -my -pU -qM -qN -qm -qz -jl -kK -kK -mu -nr -oh -oI -pi -ps -pz -pK -mr -mU -mU -fW -fW -fW -cr -cr -cr -cr -cr -cr -cr -cr -cr -cr -cr -cr -cr -cr -cr -cr -fW -fW -jR -cr -cr -cr -cr -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(95,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aK -aE -aP -aV -aV -aV -aV -aV -aV -aV -aV -aV -aV -bs -aE -aE -ao -ao -ao -ao -ao -ao -ao -ao -eL -fi -fK -fR -fV -gn -gP -AL -hv -AL -iz -pU -jI -nb -qy -pU -jl -qa -nU -qA -jl -kA -lY -mr -nw -oi -of -oG -pt -pA -pL -mr -mU -mU -fW -fW -fW -cr -fW -fW -fW -fW -fW -cr -fW -fW -fW -fW -fW -fW -fW -fW -cr -fW -fW -fW -fW -fW -cr -cr -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(96,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aK -aE -aO -dT -dT -dT -dT -dT -dT -dT -dT -dT -dT -aO -aE -aE -ao -ao -ao -ao -ao -ao -ao -ao -eL -eL -eL -eL -eL -gr -gr -gr -hn -gr -gr -pU -pU -pU -pU -pU -jl -qb -qb -qb -jl -kp -kp -mr -mr -mr -oJ -mr -mr -mr -mr -mr -mU -mU -fW -fW -fW -cr -fW -cr -cr -cr -fW -cr -fW -cr -fW -fW -fW -fW -cr -cr -cr -cr -cr -cr -cr -cr -cr -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(97,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aK -aE -aP -aV -aV -aV -aV -aV -aV -aV -aV -aV -aV -bs -aE -aE -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -gr -gS -gL -gT -hJ -nV -gr -fW -fW -fW -fW -ao -aa -aa -ao -aa -aa -ao -mv -pM -oj -re -rf -oj -oj -pM -mv -fW -fW -fW -fW -fW -cr -fW -cr -cr -cr -fW -cr -cr -cr -cr -cr -cr -cr -cr -fW -cr -fW -fW -fW -cr -fW -cr -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(98,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aK -aE -aO -cD -cD -cD -cD -cD -cD -cD -cD -cD -cD -aO -aE -aE -aa -aa -ao -aa -aa -aa -ao -ao -aa -ao -ao -ao -aa -gr -hm -rk -ho -hK -rl -gr -fW -cr -cr -cr -ao -ao -ao -ao -ao -ao -ao -mv -pM -ok -oL -pj -pu -oj -pM -mv -fW -fW -fW -fW -fW -cr -fW -fW -cr -fW -fW -cr -cr -cr -fW -fW -cr -cr -fW -fW -jR -fW -fW -fW -cr -fW -cr -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(99,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aK -aE -aR -aV -aV -aV -aV -aV -aV -aV -aV -aV -aV -bt -aE -aE -aa -ao -ao -aa -aa -aa -ao -aa -aa -ao -ao -aa -aa -gr -gS -yC -hp -hL -rK -gr -fW -cr -fW -cr -aa -ao -ao -ao -ao -aa -aa -mx -ny -ol -oM -DO -oM -oj -pN -mv -fW -fW -fW -fW -fW -cr -cr -cr -cr -cr -cr -cr -cr -cr -cr -fW -fW -fW -fW -fW -cr -cr -cr -jR -cr -fW -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(100,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aK -aE -aM -cD -cD -cD -cD -cD -cD -cD -cD -cD -cD -aM -aE -aE -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -gr -gr -gs -gr -gr -hM -gr -fW -cr -cr -cr -ao -ao -ao -ao -ao -ao -ao -mv -pM -ol -OZ -oj -oj -oj -pM -mv -fW -fW -fW -fW -fW -cr -fW -fW -fW -fW -fW -fW -cr -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -cr -fW -fW -cr -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(101,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aK -aE -aM -aM -aM -aM -aM -aM -aM -aM -aM -aM -aM -aM -aE -aE -aa -aa -ao -ao -aa -aa -ao -aa -ao -aa -aa -ao -aa -ao -ao -ao -ao -iw -fJ -ao -mU -cr -cr -cr -cr -ao -aa -ao -aa -ao -aa -mv -pM -iL -oN -pk -oN -pB -pM -mv -fW -fW -fW -fW -fW -cr -cr -cr -cr -cr -cr -fW -cr -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -cr -cr -fW -cr -cr -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(102,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aK -aE -aE -aE -aE -aE -aE -aE -aE -aE -aE -aE -aE -aE -aE -aE -aa -aa -ao -aa -aa -aa -ao -ao -ao -aa -ao -aa -aa -ao -ao -ao -ao -ao -ao -ao -mU -fW -cr -fW -ao -ao -ao -ao -ao -ao -ao -mv -mv -mv -mv -mv -mv -mv -mv -mv -fW -fW -fW -fW -fW -cr -fW -fW -fW -fW -cr -fW -cr -fW -fW -fW -fW -fW -fW -fW -fW -cr -fW -fW -cr -cr -cr -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(103,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aJ -aK -aK -aK -aK -aK -aK -aK -aK -aK -aK -aK -aK -aK -aK -aK -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -ao -mU -fW -cr -fW -fW -ao -ao -cr -cr -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -cr -fW -fW -fW -fW -cr -fW -cr -fW -fW -fW -fW -fW -fW -fW -fW -cr -cr -jR -cr -fW -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(104,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -fW -fW -cr -fW -fW -cr -cr -cr -fW -fW -fW -fW -cr -cr -fW -fW -fW -fW -fW -fW -fW -fW -fW -cr -fW -fW -fW -fW -cr -cr -cr -cr -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -cr -cr -cr -cr -cr -cr -fW -cr -fW -fW -fW -fW -fW -fW -fW -fW -cr -fW -fW -fW -fW -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(105,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -fW -fW -cr -cr -fW -fW -fW -cr -fW -fW -fW -cr -cr -fW -fW -fW -fW -fW -cr -cr -fW -fW -cr -cr -fW -fW -fW -cr -cr -cr -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -cr -fW -fW -fW -fW -fW -fW -cr -fW -fW -fW -fW -fW -fW -fW -fW -cr -fW -fW -fW -fW -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(106,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -fW -fW -cr -cr -fW -fW -cr -cr -cr -fW -fW -fW -cr -cr -cr -cr -cr -cr -fW -cr -fW -fW -fW -cr -cr -fW -fW -fW -fW -cr -cr -cr -cr -fW -fW -fW -fW -cr -cr -cr -cr -cr -cr -cr -cr -fW -fW -cr -cr -cr -cr -cr -cr -cr -cr -fW -fW -fW -fW -fW -fW -fW -fW -cr -cr -cr -fW -fW -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(107,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -fW -fW -cr -cr -cr -cr -fW -cr -cr -cr -cr -fW -fW -cr -cr -fW -cr -cr -cr -cr -cr -cr -cr -cr -cr -cr -fW -fW -cr -cr -cr -fW -fW -cr -cr -cr -cr -cr -cr -cr -fW -fW -cr -cr -cr -cr -cr -cr -cr -fW -fW -fW -fW -fW -cr -fW -fW -fW -fW -fW -fW -fW -fW -fW -cr -mF -jR -cr -cr -cr -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(108,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -fW -fW -fW -fW -cr -fW -fW -fW -fW -cr -cr -cr -fW -cr -cr -fW -fW -cr -fW -fW -fW -cr -fW -cr -cr -cr -fW -fW -cr -fW -fW -cr -fW -fW -fW -fW -fW -fW -fW -cr -fW -fW -fW -fW -fW -cr -cr -cr -cr -fW -cr -cr -cr -fW -cr -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -mF -cr -fW -fW -cr -cr -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(109,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -fW -fW -cr -fW -cr -cr -fW -cr -cr -cr -cr -cr -cr -cr -fW -cr -cr -cr -cr -fW -fW -fW -cr -cr -cr -cr -cr -cr -cr -fW -fW -fW -fW -fW -fW -fW -fW -cr -cr -cr -fW -fW -fW -fW -fW -fW -cr -fW -cr -cr -cr -fW -cr -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -cr -fW -fW -cr -cr -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(110,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -fW -fW -cr -cr -cr -cr -cr -cr -cr -cr -cr -fW -fW -cr -cr -cr -cr -cr -cr -cr -cr -fW -fW -fW -fW -cr -cr -fW -fW -cr -cr -cr -fW -fW -fW -fW -fW -cr -cr -cr -cr -fW -fW -fW -fW -fW -fW -cr -fW -fW -cr -fW -fW -cr -fW -fW -fW -fW -fW -fW -fW -fW -fW -cr -cr -cr -cr -cr -cr -cr -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(111,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -fW -fW -fW -fW -cr -cr -fW -fW -cr -fW -cr -cr -fW -fW -fW -fW -fW -fW -cr -fW -cr -cr -fW -cr -fW -fW -fW -fW -fW -fW -fW -fW -cr -cr -cr -fW -fW -fW -fW -fW -cr -fW -fW -fW -fW -fW -fW -fW -fW -cr -cr -cr -cr -cr -cr -cr -cr -cr -fW -fW -fW -fW -fW -fW -fW -cr -cr -cr -fW -cr -cr -cr -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(112,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -fW -fW -fW -fW -fW -fW -fW -fW -fW -cr -fW -fW -cr -fW -cr -cr -fW -fW -fW -cr -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -cr -fW -fW -fW -fW -fW -cr -fW -fW -fW -fW -fW -fW -fW -fW -cr -fW -fW -fW -fW -fW -fW -fW -cr -fW -fW -fW -fW -fW -fW -fW -cr -fW -fW -cr -cr -cr -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(113,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -fW -fW -fW -fW -fW -fW -fW -cr -cr -cr -cr -cr -cr -cr -cr -cr -cr -cr -cr -cr -cr -cr -cr -cr -cr -cr -cr -cr -fW -cr -cr -cr -fW -fW -fW -fW -fW -cr -cr -fW -fW -fW -fW -fW -fW -fW -cr -cr -cr -cr -fW -fW -fW -fW -cr -fW -fW -fW -fW -cr -cr -cr -cr -cr -fW -cr -fW -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(114,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -fW -fW -fW -fW -aa -aa -aa -fW -cr -cr -fW -fW -cr -fW -fW -fW -fW -fW -fW -cr -cr -cr -fW -fW -fW -fW -cr -fW -cr -cr -fW -fW -fW -fW -fW -fW -cr -cr -fW -fW -fW -fW -fW -fW -fW -cr -cr -cr -cr -cr -cr -cr -cr -cr -fW -fW -fW -fW -cr -cr -cr -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(115,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -zS -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -fW -aa -aa -aa -aa -aa -aa -aa -cr -fW -fW -cr -cr -cr -cr -fW -cr -fW -fW -fW -fW -fW -fW -fW -fW -cr -fW -cr -cr -fW -fW -fW -fW -fW -fW -cr -cr -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -cr -cr -cr -cr -cr -fW -fW -fW -fW -cr -cr -cr -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(116,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -cr -aa -cr -cr -cr -aa -aa -cr -cr -cr -aa -aa -aa -cr -cr -cr -cr -fW -fW -fW -fW -fW -fW -cr -aa -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -cr -fW -fW -fW -fW -cr -jR -cr -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(117,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -cr -cr -aa -aa -aa -aa -aa -aa -cr -aa -aa -aa -cr -cr -aa -aa -aa -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -cr -fW -fW -fW -fW -fW -fW -fW -fW -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(118,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -fW -cr -cr -aa -aa -fW -fW -fW -fW -fW -fW -fW -fW -cr -fW -fW -fW -fW -cr -jR -cr -cr -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(119,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -fW -cr -aa -aa -aa -fW -fW -fW -fW -fW -fW -fW -fW -jR -fW -fW -fW -fW -cr -cr -cr -cr -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(120,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -fW -fW -fW -cr -cr -cr -cr -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(121,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -fW -fW -fW -cr -cr -cr -cr -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(122,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -cr -cr -cr -cr -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(123,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(124,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(125,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(126,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(127,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(128,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(129,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(130,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(131,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(132,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(133,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(134,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(135,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(136,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(137,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(138,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(139,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(140,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(141,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(142,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(143,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(144,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(145,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(146,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(147,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(148,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(149,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(150,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} diff --git a/maps/away/miningstation/miningstation_areas.dm b/maps/away/miningstation/miningstation_areas.dm deleted file mode 100644 index f1c2d1dcec6d4..0000000000000 --- a/maps/away/miningstation/miningstation_areas.dm +++ /dev/null @@ -1,114 +0,0 @@ -/area/miningstation/recroom - name = "Recreation Room" - icon_state = "storage" - -/area/miningstation/mess - name = "Mess Hall" - icon_state = "storage" - -/area/miningstation/kitchen - name = "Kitchen" - icon_state = "storage" - -/area/miningstation/walkin - name = "Walk-In" - icon_state = "storage" - -/area/miningstation/janitorcloset - name = "Janitor Closet" - icon_state = "storage" - -/area/miningstation/bridge - name = "Operations" - icon_state = "storage" - -/area/miningstation/chief - name = "Chief's Office" - icon_state = "storage" - -/area/miningstation/chief2 - name = "Operations Manager" - icon_state = "storage" - -/area/miningstation/power - name = "Power Room" - icon_state = "storage" - -/area/miningstation/atmos - name = "Atmospherics" - icon_state = "storage" - -/area/miningstation/hangar - name = "Hangar" - icon_state = "storage" - -/area/miningstation/hangarhall - name = "Hangar Hall" - icon_state = "storage" - -/area/miningstation/operationshall - name = "Operations Hall" - icon_state = "storage" - -/area/miningstation/operationshall2 - name = "Operations Hall" - icon_state = "storage" - -/area/miningstation/dormhall - name = "Dormitory Hall" - icon_state = "storage" - -/area/miningstation/dorms - name = "Primary Dormitory" - icon_state = "storage" - -/area/miningstation/dorms2 - name = "Dormitory" - icon_state = "storage" - -/area/miningstation/dorms3 - name = "Dormitory" - icon_state = "storage" - -/area/miningstation/bathroom - name = "Showers" - icon_state = "storage" - -/area/miningstation/prep - name = "Mech Maintenance" - icon_state = "storage" - -/area/miningstation/prep2 - name = "Suit Storage" - icon_state = "storage" - -/area/miningstation/vault - name = "Secure Storage" - icon_state = "storage" - -/area/miningstation/surgery - name = "Operating Room" - icon_state = "surgery" - -/area/miningstation/intensive - name = "Intensive" - icon_state = "surgery" - -/area/miningstation/physician1 - name = "Physician's Office" - icon_state = "surgery" - -/area/miningstation/physician2 - name = "Secondary Physician's Office" - icon_state = "surgery" - -/area/miningstation/fix - name = "crashed shuttle" - icon_state = "surgery" - always_unpowered = 1 - area_flags = AREA_FLAG_EXTERNAL - has_gravity = 0 - -/area/miningstation/cryo - name = "Cryogenic Storage" - icon_state = "storage" \ No newline at end of file diff --git a/maps/away/mobius_rift/mobius_rift.dm b/maps/away/mobius_rift/mobius_rift.dm deleted file mode 100644 index 789b4daa6afed..0000000000000 --- a/maps/away/mobius_rift/mobius_rift.dm +++ /dev/null @@ -1,113 +0,0 @@ -#include "mobius_rift_areas.dm" - -/obj/effect/overmap/visitable/sector/mobius_rift - name = "unusual asteroid" - desc = "Sensors error: ERROR #E0x003141592: recursive stack overflow for CALCULATE_APPROXIMATE_SIZE()." - icon_state = "object" - known = FALSE - -/datum/map_template/ruin/away_site/mobius_rift - name = "Mobius rift" - id = "awaysite_mobius_rift" - description = "Non-euclidian mess." - suffixes = list("mobius_rift/mobius_rift.dmm") - spawn_cost = 1 - area_usage_test_exempted_root_areas = list(/area/mobius_rift) - apc_test_exempt_areas = list( - /area/mobius_rift = NO_SCRUBBER|NO_VENT|NO_APC - ) - -/obj/effect/step_trigger/mobius_rift/seamless_portal - var/obj/effect/step_trigger/mobius_rift/seamless_portal/dest - //NORTH or EAST cases - //var/obj/effect/step_trigger/mobius_rift/seamless_portal/dest2//SOUTH or WEST cases - var/directed//NS or WE - var/x_shift = 0 - var/y_shift = 0 - -/obj/effect/step_trigger/mobius_rift/seamless_portal/Initialize(var/mapload, var/towards) - . = ..() - if (towards == NORTH) - y_shift = 1 - if (towards == SOUTH) - y_shift = -1 - if (towards == EAST) - x_shift = 1 - if (towards == WEST) - x_shift = -1 - -/obj/effect/step_trigger/mobius_rift/seamless_portal/proc/set_destination(var/D) - dest = D - -/obj/effect/step_trigger/mobius_rift/seamless_portal/Trigger(var/atom/movable/AM) - if(!istype(AM)) - return - //moving player one tile past portal to avoid portal spamming - var/turf/T = locate(dest.x + x_shift, dest.y + y_shift, dest.z) - AM.forceMove(T) - -//spawns and presets portals to their destinations, must be in left lower chamber center -/obj/effect/mobius_rift/portals_setup - var/grid_number = 4//amount of rooms in a square pattern grid - var/grid_size = 31//lenfth from center of one room to another, or size of a chamber(room length, 12?) + corridor length. Corridor length is (view-range * 2) (16?) - -/obj/effect/mobius_rift/portals_setup/Initialize() - ..() - var/list/rooms = list() - - for (var/y_iter = 1 to grid_number)//spawning chamber abstract objects - for (var/x_iter = 1 to grid_number) - var/turf/T = locate(src.x + (x_iter-1)*grid_size, src.y + (y_iter-1)*grid_size, src.z) - var/CH = new /obj/effect/mobius_rift/chamber(T, grid_size) - rooms["[y_iter]_[x_iter]"] = CH - //creating lists of teleporting consequences for each direction - var/list/north_jumps = shuffle(rooms) - var/list/south_jumps = shuffle(rooms) - var/list/east_jumps = shuffle(rooms) - var/list/west_jumps = shuffle(rooms) - - var/list/routes = list("SOUTH" = south_jumps, "NORTH" = north_jumps, "WEST" = west_jumps, "EAST" = east_jumps)//North exit is linked to south exit of another room etc. - for (var/ch_iter = 1 to rooms.len)//get destinations in SNWE order - var/list/destinations = list()//4 exit portals for linking - var/chamber_tag = rooms[ch_iter] - var/obj/effect/mobius_rift/chamber/chamber = rooms[chamber_tag] - for (var/dir_iter =1 to routes.len) - var/list/route = routes[routes[dir_iter]] - var/ch_pos = route.Find(chamber_tag) + 1 - if (ch_pos > (grid_number * grid_number))//if that's the last one - ch_pos = 1 - var/obj/effect/mobius_rift/chamber/dest_chamber = route[route[ch_pos]]//getting destination chamber for direction - var/P = dest_chamber.get_portal(routes[dir_iter]) - destinations.Add(P) - chamber.set_portals(destinations) - //cleaning up - for (var/ch_iter = 1 to rooms.len) - qdel(rooms[rooms[ch_iter]]) - return INITIALIZE_HINT_QDEL - -/obj/effect/mobius_rift/chamber - var/list/portals = list() - -/obj/effect/mobius_rift/chamber/Initialize(var/mapload, var/grid_size)//NORTH, SOUTH, EAST, WEST - . = ..() - var/turf/T - T = locate(src.x, src.y + round(grid_size/2), src.z) - var/N = new /obj/effect/step_trigger/mobius_rift/seamless_portal(T, NORTH) - portals["NORTH"] = N - T = locate(src.x, src.y - round(grid_size/2), src.z) - var/S = new /obj/effect/step_trigger/mobius_rift/seamless_portal(T, SOUTH) - portals["SOUTH"] = S - T = locate(src.x + round(grid_size/2), src.y, src.z) - var/E = new /obj/effect/step_trigger/mobius_rift/seamless_portal(T, EAST) - portals["EAST"] = E - T = locate(src.x - round(grid_size/2), src.y, src.z) - var/W = new /obj/effect/step_trigger/mobius_rift/seamless_portal(T, WEST) - portals["WEST"] = W - -/obj/effect/mobius_rift/chamber/proc/set_portals(var/list/destinations) - for (var/iter = 1 to portals.len) - var/obj/effect/step_trigger/mobius_rift/seamless_portal/P = portals[portals[iter]] - P.set_destination(destinations[iter]) - -/obj/effect/mobius_rift/chamber/proc/get_portal(var/towards) - return portals[towards] \ No newline at end of file diff --git a/maps/away/mobius_rift/mobius_rift.dmm b/maps/away/mobius_rift/mobius_rift.dmm deleted file mode 100644 index f64092438bdbd..0000000000000 --- a/maps/away/mobius_rift/mobius_rift.dmm +++ /dev/null @@ -1,40469 +0,0 @@ -//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE -"a" = ( -/turf/space, -/area/space) -"b" = ( -/turf/unsimulated/mineral, -/area/mobius_rift) -"c" = ( -/turf/unsimulated/floor/bluespace, -/area/mobius_rift) -"d" = ( -/turf/unsimulated/beach/sand, -/area/mobius_rift) -"e" = ( -/turf/simulated/floor/grass, -/area/mobius_rift) -"f" = ( -/turf/simulated/mineral/random/high_chance, -/area/mobius_rift) -"g" = ( -/turf/space, -/area/mobius_rift) -"h" = ( -/obj/structure/flora/ausbushes/fullgrass, -/turf/simulated/floor/grass, -/area/mobius_rift) -"i" = ( -/obj/structure/flora/ausbushes/fullgrass, -/turf/unsimulated/beach/sand, -/area/mobius_rift) -"j" = ( -/obj/structure/flora/ausbushes/genericbush, -/turf/simulated/floor/grass, -/area/mobius_rift) -"k" = ( -/turf/simulated/floor/exoplanet/water/shallow, -/area/mobius_rift) -"l" = ( -/obj/structure/flora/ausbushes/fullgrass, -/obj/structure/flora/ausbushes/genericbush, -/turf/simulated/floor/grass, -/area/mobius_rift) -"m" = ( -/obj/structure/flora/ausbushes/grassybush, -/turf/simulated/floor/grass, -/area/mobius_rift) -"n" = ( -/mob/living/simple_animal/hostile/vagrant, -/turf/simulated/floor/grass, -/area/mobius_rift) -"o" = ( -/obj/structure/flora/ausbushes/pointybush, -/turf/simulated/floor/grass, -/area/mobius_rift) -"p" = ( -/obj/structure/flora/ausbushes/sunnybush, -/turf/simulated/floor/grass, -/area/mobius_rift) -"q" = ( -/mob/living/simple_animal/hostile/vagrant, -/turf/unsimulated/beach/sand, -/area/mobius_rift) -"r" = ( -/obj/effect/mobius_rift/portals_setup, -/obj/effect/overmap/visitable/sector/mobius_rift, -/obj/effect/shuttle_landmark/automatic, -/turf/unsimulated/beach/sand, -/area/mobius_rift) - -(1,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(2,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(3,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(4,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(5,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(6,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(7,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(8,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(9,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(10,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(11,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(12,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(13,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(14,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(15,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(16,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(17,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(18,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(19,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(20,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(21,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(22,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(23,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(24,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(25,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(26,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(27,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(28,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(29,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(30,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(31,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -b -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -b -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -b -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -b -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(32,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(33,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(34,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(35,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(36,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(37,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(38,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(39,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(40,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(41,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(42,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(43,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(44,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(45,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(46,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(47,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -b -b -b -b -b -d -b -b -b -b -b -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -b -b -b -b -b -d -b -b -b -b -b -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -b -b -b -b -b -d -b -b -b -b -b -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -b -b -b -b -b -d -b -b -b -b -b -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(48,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -b -d -d -e -e -e -d -d -f -k -f -d -b -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -b -d -d -d -d -e -e -e -e -e -d -d -b -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -b -k -f -k -k -k -k -k -f -k -k -k -b -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -b -d -d -d -d -d -d -d -d -d -d -d -b -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(49,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -e -f -f -f -e -e -e -e -k -e -e -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -d -d -e -h -e -d -d -d -e -e -d -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -f -k -k -f -f -k -f -f -f -k -f -f -k -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -d -d -d -d -d -d -d -d -d -d -d -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(50,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -e -e -f -e -f -f -e -h -e -k -k -e -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -e -e -h -h -h -e -e -e -e -o -e -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -f -f -d -f -f -k -k -k -k -d -f -f -k -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -d -d -d -d -d -d -d -d -d -d -d -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(51,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -h -h -e -j -e -h -h -h -e -k -e -e -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -e -e -e -e -f -f -f -e -h -h -e -e -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -k -f -k -f -f -f -f -f -f -k -f -f -k -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -d -d -d -d -d -d -d -d -d -d -d -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(52,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -h -i -i -d -e -l -h -h -e -k -e -j -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -e -e -f -f -f -f -f -e -e -h -e -e -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -k -k -k -k -k -d -f -k -f -k -k -k -k -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -d -d -d -d -d -d -d -d -d -d -d -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(53,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -c -c -c -c -c -c -c -c -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -d -e -d -e -e -e -e -h -h -e -k -e -d -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -d -e -e -f -e -f -n -f -f -e -e -j -e -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -f -f -k -f -f -k -f -k -f -k -f -f -f -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -d -d -d -d -d -d -d -d -d -d -d -d -d -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -c -c -c -c -c -c -c -c -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(54,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -c -c -c -c -c -c -c -c -b -d -d -d -d -d -d -d -d -d -d -d -d -d -d -d -d -d -e -h -e -k -e -e -d -d -e -k -e -e -d -d -d -d -d -d -d -d -d -d -d -d -d -d -d -d -d -d -e -e -m -f -f -f -d -f -f -f -e -e -d -d -d -d -d -d -d -d -d -d -d -d -d -d -d -d -d -d -d -k -f -k -f -k -k -k -k -k -k -k -k -k -d -d -d -d -d -d -d -d -d -d -d -d -d -d -d -d -d -d -d -d -d -d -d -d -r -d -d -d -d -d -d -d -d -d -d -d -d -d -d -d -d -d -d -d -d -d -b -c -c -c -c -c -c -c -c -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(55,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -c -c -c -c -c -c -c -c -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -d -e -h -k -k -e -j -e -d -k -k -k -e -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -d -e -e -f -f -f -f -f -f -f -e -e -d -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -k -f -k -f -k -f -f -f -f -f -f -k -k -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -d -d -d -d -d -d -d -d -d -d -d -d -d -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -c -c -c -c -c -c -c -c -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(56,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -e -h -h -k -e -e -e -d -d -k -k -k -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -e -e -f -f -f -f -f -e -f -f -e -e -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -k -f -k -f -k -k -d -d -k -k -k -f -k -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -d -d -d -d -d -d -d -d -d -d -d -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(57,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -e -e -f -e -e -d -i -h -k -k -k -e -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -e -e -e -f -f -f -e -e -e -f -h -e -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -k -f -k -f -f -k -f -f -f -f -k -f -k -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -d -d -d -d -d -d -d -d -d -d -d -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(58,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -f -f -f -e -j -i -h -h -e -e -e -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -e -e -e -e -d -f -e -e -e -e -e -h -e -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -k -f -k -f -f -k -f -k -k -f -k -f -k -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -d -d -d -d -d -d -d -d -d -d -d -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(59,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -f -f -f -e -e -e -e -h -h -e -e -e -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -e -e -h -e -e -e -e -e -j -e -e -h -e -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -k -k -k -f -f -f -f -k -f -f -k -f -k -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -d -d -d -d -d -d -d -d -d -d -d -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(60,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -b -f -f -e -e -d -d -d -d -e -e -d -b -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -b -e -e -d -d -d -d -d -d -d -d -d -b -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -b -k -k -k -k -k -k -k -k -k -f -f -b -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -b -d -d -d -d -d -d -d -d -d -d -d -b -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(61,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -b -b -b -b -b -d -b -b -b -b -b -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -b -b -b -b -b -d -b -b -b -b -b -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -b -b -b -b -b -d -b -b -b -b -b -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -b -b -b -b -b -d -b -b -b -b -b -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(62,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(63,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(64,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(65,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(66,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(67,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(68,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(69,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(70,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(71,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(72,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(73,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(74,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(75,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(76,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(77,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(78,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -b -b -b -b -b -d -b -b -b -b -b -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -b -b -b -b -b -d -b -b -b -b -b -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -b -b -b -b -b -d -b -b -b -b -b -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -b -b -b -b -b -d -b -b -b -b -b -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(79,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -b -f -f -d -d -d -d -d -d -d -d -d -b -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -b -e -h -h -d -d -d -d -e -h -e -d -b -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -b -d -d -d -e -e -e -e -d -d -d -d -b -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -b -d -e -h -h -e -e -e -h -h -e -d -b -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(80,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -f -f -f -f -f -d -d -d -f -f -f -d -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -d -d -i -d -d -g -d -e -i -i -d -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -d -e -e -e -e -j -e -e -e -e -d -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -h -h -h -h -e -e -h -h -h -e -e -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(81,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -f -f -f -f -f -d -d -d -f -f -f -f -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -d -g -g -g -d -g -d -d -d -h -d -e -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -e -e -e -e -e -e -e -e -e -e -e -e -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -e -p -e -f -f -f -e -e -f -d -e -e -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(82,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -f -d -f -f -f -f -d -d -f -f -f -f -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -d -g -g -g -g -g -d -i -e -e -h -e -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -e -e -e -k -e -e -j -e -k -e -e -e -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -e -e -e -e -f -f -f -f -f -d -h -h -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(83,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -d -d -f -f -f -d -d -d -f -f -f -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -g -g -g -g -g -d -d -h -e -e -e -e -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -e -e -e -e -e -e -k -e -e -e -e -e -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -e -e -e -f -f -q -f -f -d -d -h -h -e -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(84,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -c -c -c -c -c -c -c -c -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -d -d -d -d -d -d -d -d -d -f -f -f -d -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -d -g -g -g -g -g -d -i -h -h -h -d -e -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -d -e -k -e -e -e -e -k -e -e -e -e -e -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -d -e -e -f -d -h -h -q -f -f -e -h -e -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -c -c -c -c -c -c -c -c -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(85,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -c -c -c -c -c -c -c -c -b -d -d -d -d -d -d -d -d -d -d -d -d -d -d -d -d -d -d -d -d -d -d -g -g -d -d -f -d -d -d -d -d -d -d -d -d -d -d -d -d -d -d -d -d -d -d -d -d -d -g -g -g -g -i -h -h -h -e -e -e -d -d -d -d -d -d -d -d -d -d -d -d -d -d -d -d -d -d -e -e -j -e -e -k -e -k -k -j -j -e -e -d -d -d -d -d -d -d -d -d -d -d -d -d -d -d -d -d -d -d -h -h -f -f -h -n -e -f -f -e -h -e -d -d -d -d -d -d -d -d -d -d -d -d -d -d -d -b -c -c -c -c -c -c -c -c -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(86,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -c -c -c -c -c -c -c -c -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -d -d -d -d -d -d -g -d -d -d -d -d -d -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -e -d -g -g -g -g -i -h -e -h -m -e -e -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -e -e -e -e -k -k -k -e -e -e -e -e -e -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -e -h -e -f -f -e -d -e -f -f -e -h -e -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -c -c -c -c -c -c -c -c -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(87,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -d -d -f -f -d -d -d -d -d -d -g -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -e -d -g -g -g -d -d -h -h -h -e -e -e -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -e -e -e -e -e -e -e -e -e -e -e -e -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -h -h -h -f -f -f -f -f -f -f -d -e -e -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(88,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -g -d -d -d -f -f -d -d -g -g -g -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -i -g -g -g -d -e -e -h -e -e -e -e -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -d -e -e -e -e -e -k -e -e -e -e -e -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -e -h -h -e -e -e -e -e -e -e -e -e -e -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(89,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -g -g -d -f -f -d -d -g -g -g -g -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -h -i -d -g -g -d -e -e -e -e -e -e -e -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -d -e -e -e -e -e -e -e -e -e -e -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -h -h -h -h -e -e -p -e -e -e -e -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(90,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -d -d -d -f -d -d -d -d -g -d -d -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -e -e -d -d -d -d -e -e -m -e -e -e -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -d -e -e -j -e -e -e -e -e -e -d -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -h -e -e -e -e -e -e -e -e -d -e -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(91,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -b -d -d -d -d -d -d -d -d -d -d -d -b -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -b -e -d -d -d -d -d -e -e -e -d -d -b -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -b -d -e -e -e -d -d -d -d -d -d -d -b -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -b -d -d -e -e -d -d -d -e -d -d -d -b -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(92,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -b -b -b -b -b -d -b -b -b -b -b -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -b -b -b -b -b -d -b -b -b -b -b -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -b -b -b -b -b -d -b -b -b -b -b -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -b -b -b -b -b -d -b -b -b -b -b -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(93,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(94,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(95,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(96,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(97,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(98,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(99,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(100,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(101,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(102,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(103,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(104,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(105,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(106,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(107,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(108,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(109,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -b -b -b -b -b -d -b -b -b -b -b -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -b -b -b -b -b -d -b -b -b -b -b -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -b -b -b -b -b -d -b -b -b -b -b -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -b -b -b -b -b -d -b -b -b -b -b -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(110,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -b -d -d -d -d -d -d -d -d -k -k -k -b -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -b -e -e -e -e -k -k -e -e -k -e -e -b -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -b -d -d -d -e -h -e -e -e -e -e -e -b -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -b -d -d -d -d -p -d -d -d -d -d -d -b -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(111,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -d -d -d -d -d -d -d -d -k -k -k -k -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -e -k -k -k -k -k -k -k -k -k -f -k -e -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -d -g -d -d -i -h -h -d -d -d -d -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -g -g -g -d -d -d -g -g -g -g -d -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(112,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -g -g -d -d -g -d -d -d -d -d -k -k -k -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -e -k -k -k -k -k -k -k -k -f -f -f -e -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -e -d -g -g -g -d -e -h -d -g -g -d -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -d -g -g -g -d -d -d -g -g -g -d -e -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(113,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -g -g -d -g -d -d -g -g -d -d -k -k -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -k -k -k -k -f -k -k -k -f -f -f -f -e -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -e -d -g -g -d -d -e -j -d -g -g -g -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -e -d -d -g -g -g -d -d -d -d -g -d -e -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(114,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -d -d -d -g -g -g -g -g -d -d -d -f -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -k -d -k -f -f -f -k -k -k -k -k -k -e -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -e -d -d -g -d -e -e -e -d -g -g -g -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -e -e -d -d -g -g -g -g -g -d -d -d -e -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(115,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -c -c -c -c -c -c -c -c -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -d -d -d -d -g -g -g -d -g -d -d -f -f -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -k -k -k -k -k -k -k -k -k -k -k -k -e -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -h -h -i -d -d -h -h -h -d -g -d -d -d -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -e -e -e -d -d -g -g -g -d -d -e -e -e -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -c -c -c -c -c -c -c -c -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(116,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -c -c -c -c -c -c -c -c -b -d -d -d -d -d -d -d -d -d -d -d -d -d -d -d -d -d -d -d -d -g -d -g -g -g -d -f -f -d -d -d -d -d -d -d -d -d -d -d -d -d -d -d -d -d -d -d -e -k -k -k -k -k -k -k -k -k -k -k -e -d -d -d -d -d -d -d -d -d -d -d -d -d -d -d -d -d -d -e -e -h -e -e -e -e -h -d -d -d -e -e -d -d -d -d -d -d -d -d -d -d -d -d -d -d -d -d -d -d -e -e -d -d -g -g -g -g -g -d -d -d -e -d -d -d -d -d -d -d -d -d -d -d -d -d -d -d -b -c -c -c -c -c -c -c -c -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(117,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -c -c -c -c -c -c -c -c -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -d -d -d -g -g -d -g -g -g -d -f -f -d -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -e -k -k -k -k -k -k -k -k -k -k -k -e -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -e -j -e -d -d -e -e -e -e -e -e -e -e -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -e -e -d -g -g -g -g -g -d -g -g -d -e -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -c -c -c -c -c -c -c -c -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(118,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -f -d -d -g -g -g -g -d -d -d -d -d -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -e -k -k -k -k -k -k -k -k -k -k -k -e -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -e -d -d -d -d -d -j -e -d -d -d -d -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -d -d -g -d -d -g -g -g -g -g -d -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(119,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -f -f -d -g -g -d -d -d -g -d -d -d -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -e -e -k -k -k -k -k -f -f -f -k -k -e -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -e -d -g -g -g -d -e -e -d -g -g -g -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -g -d -d -d -g -g -g -g -g -g -g -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(120,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -f -d -d -d -d -d -d -g -g -g -d -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -e -e -k -k -k -k -k -f -f -k -k -k -e -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -e -d -g -g -g -d -d -e -d -g -d -g -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -g -g -d -d -g -g -g -g -g -g -d -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(121,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -d -d -d -d -d -d -d -d -d -g -g -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -e -e -k -k -k -k -k -k -k -k -k -k -e -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -e -d -d -d -g -g -d -h -i -i -d -d -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -g -g -g -d -d -d -d -d -d -d -d -e -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(122,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -b -d -d -d -d -d -d -d -f -d -d -d -b -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -b -e -e -e -e -e -e -e -e -k -e -e -b -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -b -d -d -d -d -d -d -h -h -h -e -e -b -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -b -d -d -d -d -e -e -e -e -e -e -e -b -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(123,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -b -b -b -b -b -d -b -b -b -b -b -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -b -b -b -b -b -d -b -b -b -b -b -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -b -b -b -b -b -d -b -b -b -b -b -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -b -b -b -b -b -d -b -b -b -b -b -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(124,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(125,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(126,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(127,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(128,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(129,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(130,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(131,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(132,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(133,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(134,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(135,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(136,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(137,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(138,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(139,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(140,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -b -b -b -b -b -d -b -b -b -b -b -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -b -b -b -b -b -d -b -b -b -b -b -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -b -b -b -b -b -d -b -b -b -b -b -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -b -b -b -b -b -d -b -b -b -b -b -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(141,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -b -d -d -d -d -d -d -f -f -k -k -k -b -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -b -e -e -e -e -e -k -k -k -k -e -e -b -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -b -f -f -f -e -e -e -k -k -f -f -f -b -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -b -d -d -d -d -d -d -d -d -d -d -d -b -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(142,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -e -d -f -f -f -d -d -d -f -k -f -k -k -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -e -e -e -e -e -k -k -d -d -k -k -e -e -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -f -f -f -f -h -h -k -k -k -k -k -f -f -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -d -d -d -d -d -d -d -d -d -g -g -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(143,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -e -f -f -f -f -e -j -d -f -k -f -k -k -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -e -e -e -k -k -d -d -d -d -k -k -e -e -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -f -e -f -f -e -h -k -k -k -k -k -k -f -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -d -f -f -f -f -d -f -f -g -g -d -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(144,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -e -d -f -f -f -e -e -d -f -k -f -f -f -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -e -e -e -k -k -k -k -k -k -k -k -e -e -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -e -e -e -f -f -e -e -e -k -k -k -k -k -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -f -f -f -f -f -d -f -g -g -f -d -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(145,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -e -e -f -h -h -h -e -d -f -k -f -f -f -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -e -e -k -k -k -k -k -k -k -d -k -e -e -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -e -e -e -h -h -e -k -k -e -k -k -k -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -d -f -f -f -d -d -f -g -g -f -d -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(146,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -c -c -c -c -c -c -c -c -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -d -e -e -h -e -h -h -e -e -k -d -f -f -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -e -k -k -k -k -k -k -k -k -d -k -k -e -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -d -e -h -h -h -e -k -k -e -e -e -k -e -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -d -d -f -f -f -d -g -f -d -g -f -d -d -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -c -c -c -c -c -c -c -c -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(147,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -c -c -c -c -c -c -c -c -b -d -d -d -d -d -d -d -d -d -d -d -d -d -d -d -d -d -e -e -e -e -f -h -e -e -k -e -d -d -d -d -d -d -d -d -d -d -d -d -d -d -d -d -d -d -d -d -e -k -d -k -k -k -k -k -k -k -k -k -e -d -d -d -d -d -d -d -d -d -d -d -d -d -d -d -d -d -d -d -e -h -e -e -k -k -e -h -h -h -k -e -d -d -d -d -d -d -d -d -d -d -d -d -d -d -d -d -d -d -d -f -f -f -f -d -g -d -f -f -f -d -d -d -d -d -d -d -d -d -d -d -d -d -d -d -d -d -b -c -c -c -c -c -c -c -c -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(148,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -c -c -c -c -c -c -c -c -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -e -e -e -e -f -f -e -e -e -k -e -e -d -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -e -k -k -k -k -k -k -k -k -k -k -k -e -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -d -e -e -e -k -k -k -e -h -e -h -e -e -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -d -f -d -f -f -f -d -d -f -f -f -d -d -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -c -c -c -c -c -c -c -c -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(149,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -d -f -f -f -f -e -e -e -k -e -e -e -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -e -k -k -k -k -k -k -k -k -k -k -e -e -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -f -f -f -k -k -e -k -k -e -e -e -e -e -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -d -g -f -f -d -d -f -f -f -f -d -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(150,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -f -f -f -f -e -f -f -k -k -e -e -e -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -e -k -d -k -k -k -k -k -d -k -e -e -e -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -f -f -k -k -e -h -e -k -k -k -k -k -f -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -d -g -g -f -f -d -f -f -f -d -g -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(151,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -f -f -j -f -f -e -e -f -f -e -e -e -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -e -e -k -k -k -k -k -k -k -k -e -e -e -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -f -f -k -f -f -h -h -e -e -e -k -k -f -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -d -d -f -f -f -d -d -d -d -g -g -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(152,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -e -e -e -f -f -e -h -e -e -h -h -h -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -e -e -e -k -k -e -e -e -e -e -e -e -e -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -f -k -k -f -f -e -h -e -e -f -f -f -f -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -d -d -d -d -d -d -d -d -d -d -d -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(153,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -b -e -e -e -e -h -h -e -e -h -e -h -b -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -b -e -e -e -e -e -e -e -e -e -e -e -b -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -b -f -f -f -f -e -e -d -f -f -f -f -b -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -b -d -d -d -d -d -d -d -d -d -d -d -b -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(154,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -b -b -b -b -b -d -b -b -b -b -b -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -b -b -b -b -b -d -b -b -b -b -b -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -b -b -b -b -b -d -b -b -b -b -b -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -b -b -b -b -b -d -b -b -b -b -b -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(155,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(156,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(157,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(158,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(159,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(160,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(161,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(162,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(163,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(164,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(165,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(166,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(167,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(168,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(169,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -d -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(170,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -b -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -b -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -b -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -b -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(171,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(172,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(173,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(174,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(175,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(176,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(177,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(178,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(179,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(180,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(181,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(182,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(183,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(184,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(185,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(186,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(187,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(188,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(189,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(190,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(191,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(192,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(193,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(194,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(195,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(196,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(197,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(198,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(199,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(200,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} diff --git a/maps/away/mobius_rift/mobius_rift_areas.dm b/maps/away/mobius_rift/mobius_rift_areas.dm deleted file mode 100644 index 822bc88d8a2f2..0000000000000 --- a/maps/away/mobius_rift/mobius_rift_areas.dm +++ /dev/null @@ -1,5 +0,0 @@ -/area/mobius_rift - name = "Mobius Rift" - icon = 'maps/away/mobius_rift/mobius_rift_sprites.dmi' - icon_state = "mr" - base_turf = /turf/unsimulated/beach/sand \ No newline at end of file diff --git a/maps/away/mobius_rift/mobius_rift_sprites.dmi b/maps/away/mobius_rift/mobius_rift_sprites.dmi deleted file mode 100644 index 71bdbc81ff567..0000000000000 Binary files a/maps/away/mobius_rift/mobius_rift_sprites.dmi and /dev/null differ diff --git a/maps/away/scavver/scavver_gantry-1.dmm b/maps/away/scavver/scavver_gantry-1.dmm deleted file mode 100644 index ec1b78f9e6167..0000000000000 --- a/maps/away/scavver/scavver_gantry-1.dmm +++ /dev/null @@ -1,25717 +0,0 @@ -//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE -"aa" = ( -/obj/effect/shuttle_landmark/scavver_gantry/generic/aquila, -/turf/space, -/area/space) -"ak" = ( -/obj/machinery/suspension_gen, -/turf/simulated/floor/airless, -/area/scavver/calypso) -"aL" = ( -/obj/machinery/optable, -/obj/effect/floor_decal/corner/blue/mono, -/obj/machinery/light{ - dir = 1 - }, -/turf/simulated/floor/tiled/white/monotile, -/area/scavver/calypso) -"aO" = ( -/obj/effect/floor_decal/steeldecal/steel_decals_central7, -/turf/simulated/floor/airless, -/area/scavver/gantry/down2) -"bq" = ( -/obj/structure/railing/mapped{ - dir = 4; - icon_state = "railing0-1" - }, -/obj/structure/closet/crate/plastic, -/obj/item/device/oxycandle, -/obj/item/device/oxycandle, -/obj/item/device/oxycandle, -/obj/item/device/oxycandle, -/obj/item/device/oxycandle, -/obj/item/device/oxycandle, -/obj/item/device/oxycandle, -/obj/item/device/oxycandle, -/obj/item/device/oxycandle, -/obj/item/device/oxycandle, -/obj/item/device/oxycandle, -/obj/item/device/oxycandle, -/obj/item/storage/box/glowsticks, -/turf/simulated/floor/airless, -/area/scavver/gantry/down2) -"bw" = ( -/obj/structure/ladder/up, -/turf/simulated/floor/airless, -/area/scavver/yachtdown/thrusters) -"bC" = ( -/obj/machinery/light/small{ - dir = 8 - }, -/obj/machinery/atmospherics/portables_connector, -/obj/machinery/portable_atmospherics/canister/air, -/turf/simulated/floor/airless, -/area/scavver/calypso) -"bG" = ( -/obj/machinery/atmospherics/pipe/cap/visible/fuel{ - dir = 8 - }, -/turf/space, -/area/space) -"bI" = ( -/obj/machinery/atmospherics/unary/tank/carbon_dioxide{ - dir = 4 - }, -/turf/simulated/floor/wood/yew, -/area/scavver/yachtdown) -"bL" = ( -/obj/machinery/mineral/stacking_machine{ - input_turf = 2 - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/airless, -/area/scavver/calypso) -"bN" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 8 - }, -/turf/simulated/floor/tiled/white, -/area/scavver/calypso) -"bQ" = ( -/obj/machinery/power/smes/buildable/preset/scavver/smes{ - charge = 10000 - }, -/obj/structure/cable{ - d2 = 4; - icon_state = "0-4" - }, -/turf/simulated/floor/airless, -/area/scavver/yachtdown) -"cg" = ( -/obj/machinery/atmospherics/pipe/manifold4w/visible/fuel, -/obj/machinery/meter, -/turf/simulated/floor/wood/yew, -/area/scavver/yachtdown/thrusters) -"cj" = ( -/obj/machinery/vitals_monitor, -/obj/effect/floor_decal/corner/blue/mono, -/obj/machinery/alarm{ - dir = 8; - locked = 0; - pixel_x = 25; - req_access = list() - }, -/turf/simulated/floor/tiled/white/monotile, -/area/scavver/calypso) -"cr" = ( -/obj/machinery/power/terminal{ - dir = 4 - }, -/obj/structure/cable{ - d2 = 8; - icon_state = "0-8" - }, -/turf/simulated/floor/airless, -/area/scavver/yachtdown/thrusters) -"cu" = ( -/obj/effect/floor_decal/steeldecal/steel_decals_central4{ - dir = 8 - }, -/turf/simulated/floor/airless, -/area/scavver/gantry/down2) -"cv" = ( -/obj/structure/lattice, -/obj/machinery/light/navigation/delay5, -/turf/space, -/area/space) -"cB" = ( -/obj/structure/railing/mapped{ - dir = 8; - icon_state = "railing0-1" - }, -/obj/structure/closet/crate/internals/fuel, -/obj/random/medical, -/obj/random/medical, -/obj/random/medical, -/obj/random/medical, -/turf/simulated/floor/airless, -/area/scavver/gantry/down2) -"cE" = ( -/obj/effect/floor_decal/steeldecal/steel_decals_central4{ - dir = 4 - }, -/turf/simulated/floor/airless, -/area/scavver/gantry/down2) -"cP" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/white/airless, -/area/scavver/calypso) -"db" = ( -/obj/structure/railing/mapped{ - dir = 8; - icon_state = "railing0-1" - }, -/obj/machinery/shieldgen, -/obj/effect/floor_decal/corner_steel_grid{ - dir = 8 - }, -/turf/simulated/floor/airless, -/area/scavver/gantry/down2) -"dk" = ( -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 8; - icon_state = "warningcorner" - }, -/obj/effect/floor_decal/corner_steel_grid{ - dir = 5 - }, -/turf/simulated/floor/airless, -/area/scavver/gantry/down1) -"dv" = ( -/obj/machinery/atmospherics/pipe/simple/visible/fuel{ - dir = 5 - }, -/obj/machinery/light/spot{ - dir = 8 - }, -/turf/simulated/floor/airless, -/area/scavver/yachtdown/thrusters) -"dM" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/machinery/atmospherics/pipe/simple/visible/fuel{ - dir = 9 - }, -/turf/simulated/floor/wood/yew, -/area/scavver/yachtdown) -"dQ" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/turf/simulated/floor/tiled/white/airless, -/area/scavver/calypso) -"ec" = ( -/obj/machinery/atmospherics/pipe/manifold/visible/fuel{ - dir = 1 - }, -/turf/simulated/floor/wood/yew, -/area/scavver/yachtdown/thrusters) -"el" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/blue{ - dir = 8 - }, -/turf/simulated/floor/tiled/white, -/area/scavver/calypso) -"em" = ( -/obj/effect/shuttle_landmark/scavver_gantry/generic/three, -/turf/space, -/area/space) -"es" = ( -/obj/machinery/portable_atmospherics/canister/oxygen, -/obj/machinery/atmospherics/pipe/manifold/visible/fuel{ - dir = 1 - }, -/turf/simulated/floor/airless, -/area/scavver/yachtdown/thrusters) -"ev" = ( -/obj/structure/lattice, -/obj/effect/catwalk_plated/dark, -/obj/machinery/atmospherics/pipe/simple/visible/fuel{ - dir = 6 - }, -/turf/space, -/area/space) -"eB" = ( -/obj/structure/lattice, -/obj/machinery/light/navigation/delay2, -/turf/space, -/area/space) -"eC" = ( -/obj/structure/cable{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/turf/simulated/floor/tiled/white/airless, -/area/scavver/calypso) -"eJ" = ( -/obj/structure/railing/mapped{ - dir = 1; - icon_state = "railing0-1" - }, -/obj/item/device/paint_sprayer, -/obj/structure/table/rack, -/obj/item/device/cable_painter, -/obj/item/hand_labeler, -/turf/simulated/floor/airless, -/area/scavver/gantry/down1) -"eY" = ( -/obj/effect/floor_decal/corner_steel_grid{ - dir = 10 - }, -/turf/simulated/floor/airless, -/area/scavver/gantry/down1) -"fc" = ( -/obj/machinery/computer/ship/engines{ - dir = 8 - }, -/turf/simulated/floor/airless, -/area/scavver/yachtdown/thrusters) -"fr" = ( -/obj/structure/cable{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/turf/simulated/floor/airless, -/area/scavver/gantry/down1) -"fs" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/blue, -/obj/effect/floor_decal/corner/blue{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/white, -/area/scavver/calypso) -"fy" = ( -/obj/machinery/atmospherics/pipe/simple/visible/fuel{ - dir = 5 - }, -/turf/space, -/area/scavver/yachtdown) -"fz" = ( -/obj/machinery/atmospherics/pipe/manifold/visible/fuel{ - dir = 1 - }, -/obj/machinery/portable_atmospherics/canister/oxygen, -/turf/simulated/floor/airless, -/area/scavver/yachtdown/thrusters) -"fA" = ( -/obj/structure/cable{ - d2 = 2; - icon_state = "0-2" - }, -/obj/machinery/power/terminal{ - dir = 4 - }, -/turf/simulated/floor/airless, -/area/scavver/calypso) -"fE" = ( -/obj/effect/floor_decal/corner/blue/mono, -/obj/machinery/power/apc{ - dir = 4; - locked = 0; - name = "west bump"; - pixel_x = 24; - req_access = list() - }, -/obj/structure/cable{ - d2 = 8; - icon_state = "0-8" - }, -/turf/simulated/floor/tiled/white/monotile, -/area/scavver/calypso) -"fF" = ( -/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{ - dir = 1; - id_tag = "scav_calypso_pump"; - power_rating = 25000 - }, -/turf/simulated/floor/plating, -/area/scavver/calypso) -"fG" = ( -/obj/machinery/atmospherics/binary/pump, -/obj/structure/lattice, -/turf/space, -/area/scavver/yachtdown) -"fI" = ( -/obj/structure/closet/crate/plastic, -/obj/item/stack/material/steel/fifty, -/obj/item/stack/material/steel/fifty, -/obj/item/stack/material/steel/fifty, -/obj/item/stack/material/glass/fifty, -/obj/item/stack/material/glass/fifty, -/obj/item/stack/material/plasteel/fifty, -/obj/effect/floor_decal/industrial/loading{ - dir = 8 - }, -/turf/simulated/floor/airless, -/area/scavver/calypso) -"gf" = ( -/obj/machinery/power/breakerbox, -/turf/simulated/floor/airless, -/area/scavver/yachtdown) -"gk" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/manifold/visible/fuel{ - dir = 1 - }, -/turf/simulated/floor/airless, -/area/scavver/yachtdown) -"gs" = ( -/obj/effect/wallframe_spawn/reinforced/titanium, -/turf/simulated/floor/airless, -/area/scavver/calypso) -"gv" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/blue{ - dir = 10 - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 1 - }, -/turf/simulated/floor/tiled/white, -/area/scavver/calypso) -"gA" = ( -/obj/machinery/light/spot, -/obj/machinery/power/port_gen/pacman{ - anchored = 1; - sheets = 25 - }, -/obj/structure/cable{ - d2 = 8; - icon_state = "0-8" - }, -/turf/simulated/floor/airless, -/area/scavver/yachtdown) -"gU" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/machinery/atmospherics/pipe/simple/visible/fuel, -/obj/machinery/meter, -/turf/simulated/floor/airless, -/area/scavver/yachtdown) -"gV" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/effect/floor_decal/corner_steel_grid{ - dir = 6 - }, -/turf/simulated/floor/airless, -/area/scavver/gantry/down1) -"gZ" = ( -/obj/machinery/atmospherics/unary/engine{ - dir = 1 - }, -/turf/simulated/floor/airless, -/area/scavver/yachtdown/thrusters) -"hr" = ( -/obj/machinery/atmospherics/unary/tank/carbon_dioxide{ - dir = 8 - }, -/obj/machinery/light/spot{ - dir = 4 - }, -/turf/simulated/floor/wood/yew, -/area/scavver/yachtdown) -"hu" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/blue, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/airless, -/area/scavver/calypso) -"hB" = ( -/obj/random/ammo, -/obj/machinery/atmospherics/pipe/manifold4w/visible/blue, -/turf/simulated/floor/airless, -/area/scavver/calypso) -"hC" = ( -/obj/effect/floor_decal/corner/blue{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/manifold/hidden/blue{ - dir = 8 - }, -/turf/simulated/floor/tiled, -/area/scavver/calypso) -"hK" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/cable{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/turf/simulated/floor/airless, -/area/scavver/gantry/down1) -"hM" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/floor_decal/corner/blue{ - dir = 6 - }, -/turf/simulated/floor/tiled/white, -/area/scavver/calypso) -"it" = ( -/obj/structure/railing/mapped, -/obj/structure/table/rack, -/obj/item/storage/briefcase/inflatable, -/obj/item/storage/briefcase/inflatable, -/obj/item/storage/briefcase/inflatable, -/obj/item/storage/briefcase/inflatable, -/obj/item/device/spaceflare, -/turf/simulated/floor/airless, -/area/scavver/gantry/down1) -"iB" = ( -/obj/structure/cable, -/obj/machinery/power/solar, -/obj/effect/floor_decal/solarpanel, -/turf/simulated/floor/airless, -/area/scavver/yachtdown) -"iI" = ( -/obj/machinery/atmospherics/pipe/manifold/visible/fuel{ - dir = 1 - }, -/turf/simulated/floor/airless, -/area/scavver/yachtdown) -"iK" = ( -/obj/machinery/atmospherics/unary/tank/carbon_dioxide{ - dir = 8 - }, -/turf/simulated/floor/airless, -/area/scavver/yachtdown) -"iL" = ( -/obj/structure/railing/mapped, -/obj/structure/ladder/up, -/obj/effect/floor_decal/corner_steel_grid, -/obj/structure/cable, -/obj/structure/cable{ - d1 = 16; - d2 = 0; - icon_state = "16-0" - }, -/turf/simulated/floor/airless, -/area/scavver/gantry/down1) -"iM" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/visible/fuel{ - dir = 9 - }, -/obj/effect/catwalk_plated/dark, -/turf/simulated/floor/airless, -/area/scavver/gantry/down1) -"jg" = ( -/obj/machinery/atmospherics/pipe/cap/visible/fuel{ - dir = 4 - }, -/obj/structure/lattice, -/turf/space, -/area/space) -"ji" = ( -/obj/machinery/atmospherics/omni/mixer{ - tag_north = 2; - tag_south = 1; - tag_south_con = 0.85; - tag_west = 1; - tag_west_con = 0.15 - }, -/turf/simulated/floor/airless, -/area/scavver/yachtdown) -"jm" = ( -/obj/effect/shuttle_landmark/lift/gantry/bottom, -/turf/simulated/floor/airless, -/area/scavver/gantry/down1) -"jr" = ( -/obj/machinery/portable_atmospherics/canister/oxygen, -/obj/machinery/atmospherics/pipe/simple/visible/fuel{ - dir = 10 - }, -/turf/simulated/floor/airless, -/area/scavver/yachtdown/thrusters) -"jt" = ( -/obj/structure/lattice, -/obj/structure/sign/warning/docking_area{ - dir = 4; - pixel_x = -34 - }, -/turf/space, -/area/space) -"ju" = ( -/obj/machinery/floodlight, -/turf/simulated/floor/airless, -/area/scavver/yachtdown/thrusters) -"jx" = ( -/obj/random/tool, -/turf/simulated/floor/airless, -/area/scavver/gantry/down2) -"jy" = ( -/obj/structure/lattice, -/obj/effect/catwalk_plated/dark, -/obj/structure/railing/mapped, -/turf/space, -/area/space) -"jz" = ( -/obj/effect/floor_decal/corner/blue{ - dir = 6 - }, -/obj/machinery/computer/cryopod{ - pixel_y = -32 - }, -/turf/simulated/floor/tiled, -/area/scavver/calypso) -"jH" = ( -/obj/structure/lattice, -/obj/effect/catwalk_plated/dark, -/obj/structure/railing/mapped{ - dir = 4 - }, -/turf/space, -/area/space) -"jJ" = ( -/obj/structure/iv_drip, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 1 - }, -/obj/effect/floor_decal/corner/blue{ - dir = 10 - }, -/turf/simulated/floor/tiled/white, -/area/scavver/calypso) -"jR" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/blue, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/airless, -/area/scavver/calypso) -"jZ" = ( -/obj/structure/cable{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/machinery/atmospherics/pipe/simple/visible/fuel{ - dir = 10 - }, -/obj/structure/cable{ - d2 = 2; - icon_state = "0-2" - }, -/obj/machinery/power/apc/super{ - dir = 1; - locked = 0; - name = "north bump"; - pixel_y = 24; - req_access = list() - }, -/turf/simulated/floor/airless, -/area/scavver/yachtdown) -"kl" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/portable_atmospherics/canister/nitrogen/engine_setup, -/turf/simulated/floor/airless, -/area/scavver/calypso) -"kt" = ( -/obj/machinery/atmospherics/pipe/simple/visible/fuel{ - dir = 9 - }, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/wood/yew, -/area/scavver/yachtdown) -"kx" = ( -/turf/simulated/floor/tiled/white/airless, -/area/scavver/calypso) -"ky" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/airless, -/area/scavver/calypso) -"kK" = ( -/obj/effect/floor_decal/corner/blue/mono, -/obj/random/loot, -/obj/structure/table/steel_reinforced, -/obj/item/device/radio/intercom/map_preset/scavver{ - default_hailing = 1; - dir = 8; - pixel_x = 20 - }, -/turf/simulated/floor/tiled/monotile, -/area/scavver/calypso) -"kU" = ( -/obj/structure/cable{ - d2 = 2; - icon_state = "0-2" - }, -/obj/machinery/power/solar, -/obj/effect/floor_decal/solarpanel, -/turf/simulated/floor/airless, -/area/scavver/yachtdown) -"kW" = ( -/obj/machinery/atmospherics/pipe/simple/visible/fuel, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/inflatable/door, -/turf/simulated/floor/airless, -/area/scavver/yachtdown/thrusters) -"la" = ( -/obj/structure/railing/mapped, -/obj/structure/table/rack, -/obj/item/stock_parts/micro_laser/ultra, -/obj/item/stock_parts/circuitboard/unary_atmos/cooler, -/obj/item/stock_parts/circuitboard/unary_atmos/heater, -/obj/item/stock_parts/circuitboard/oxyregenerator, -/obj/item/stock_parts/matter_bin/super, -/obj/item/stock_parts/circuitboard/biogenerator, -/obj/random/tech_supply, -/obj/random/tech_supply, -/obj/random/tech_supply, -/obj/random/tech_supply, -/obj/item/module/power_control, -/turf/simulated/floor/airless, -/area/scavver/gantry/down1) -"lz" = ( -/obj/structure/closet/crate/plastic, -/obj/item/seeds/algaeseed, -/obj/item/seeds/algaeseed, -/obj/item/seeds/algaeseed, -/obj/item/seeds/algaeseed, -/obj/item/seeds/algaeseed, -/obj/item/seeds/algaeseed, -/obj/item/seeds/algaeseed, -/obj/item/seeds/algaeseed, -/obj/item/seeds/algaeseed, -/obj/item/seeds/algaeseed, -/obj/item/seeds/algaeseed, -/obj/item/seeds/algaeseed, -/obj/item/seeds/algaeseed, -/obj/item/seeds/algaeseed, -/obj/item/reagent_containers/glass/bottle/eznutrient, -/obj/item/reagent_containers/glass/bottle/eznutrient, -/obj/item/reagent_containers/glass/bottle/eznutrient, -/obj/item/reagent_containers/glass/bottle/eznutrient, -/obj/item/reagent_containers/glass/bottle/eznutrient, -/turf/simulated/floor/airless, -/area/scavver/yachtdown/thrusters) -"lD" = ( -/obj/structure/lattice, -/obj/effect/catwalk_plated/dark, -/obj/structure/railing/mapped{ - dir = 8; - icon_state = "railing0-1" - }, -/obj/random/loot, -/turf/space, -/area/space) -"lV" = ( -/obj/effect/floor_decal/corner/blue{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/blue{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled, -/area/scavver/calypso) -"mb" = ( -/obj/machinery/atmospherics/pipe/manifold/visible/fuel{ - dir = 8 - }, -/turf/simulated/floor/wood/yew, -/area/scavver/yachtdown) -"mi" = ( -/obj/structure/railing/mapped{ - dir = 8; - icon_state = "railing0-1" - }, -/obj/structure/lattice, -/obj/effect/catwalk_plated/dark, -/turf/space, -/area/space) -"mo" = ( -/obj/structure/lattice, -/obj/effect/catwalk_plated/dark, -/obj/structure/railing/mapped{ - dir = 1; - icon_state = "railing0-1" - }, -/turf/space, -/area/space) -"mU" = ( -/obj/structure/lattice, -/turf/space, -/area/scavver/yachtdown) -"mV" = ( -/obj/structure/table/steel_reinforced, -/obj/item/storage/firstaid/adv, -/obj/item/roller, -/obj/item/storage/backpack/satchel/med, -/obj/effect/floor_decal/corner/blue/mono, -/obj/random/firstaid, -/obj/random/firstaid, -/obj/random/firstaid, -/obj/random/firstaid, -/obj/item/device/radio/intercom/map_preset/scavver{ - dir = 8; - pixel_x = 20 - }, -/turf/simulated/floor/tiled/white/monotile, -/area/scavver/calypso) -"na" = ( -/obj/structure/anomaly_container, -/turf/simulated/floor/airless, -/area/scavver/calypso) -"nb" = ( -/turf/simulated/wall/titanium, -/area/scavver/yachtdown/thrusters) -"nd" = ( -/obj/machinery/atmospherics/pipe/manifold/visible/fuel, -/turf/simulated/floor/wood/yew, -/area/scavver/yachtdown) -"np" = ( -/obj/structure/closet/crate/freezer, -/obj/item/reagent_containers/ivbag/blood/OMinus, -/obj/effect/floor_decal/corner/blue/mono, -/obj/item/reagent_containers/food/drinks/cans/waterbottle, -/obj/item/reagent_containers/food/drinks/cans/waterbottle, -/obj/item/reagent_containers/ivbag, -/obj/item/reagent_containers/ivbag, -/obj/item/storage/box/gloves, -/turf/simulated/floor/tiled/white/monotile, -/area/scavver/calypso) -"ny" = ( -/turf/simulated/floor/airless, -/area/scavver/gantry/down1) -"nC" = ( -/obj/effect/shuttle_landmark/scavver_gantry/six, -/turf/space, -/area/space) -"nS" = ( -/obj/structure/lattice, -/obj/effect/catwalk_plated/dark, -/turf/space, -/area/space) -"nT" = ( -/obj/structure/cable{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/machinery/atmospherics/pipe/manifold4w/visible/fuel, -/turf/simulated/floor/airless, -/area/scavver/yachtdown) -"nU" = ( -/obj/machinery/atmospherics/pipe/manifold4w/visible/fuel, -/turf/simulated/floor/airless, -/area/scavver/yachtdown/thrusters) -"oe" = ( -/obj/structure/railing/mapped{ - dir = 8; - icon_state = "railing0-1" - }, -/obj/machinery/mech_recharger, -/turf/simulated/floor/airless, -/area/scavver/gantry/down2) -"ox" = ( -/obj/machinery/floodlight, -/turf/simulated/floor/airless, -/area/scavver/calypso) -"oC" = ( -/obj/machinery/atmospherics/binary/pump, -/turf/simulated/floor/airless, -/area/scavver/yachtdown/thrusters) -"oE" = ( -/obj/machinery/atmospherics/pipe/simple/visible/fuel, -/turf/simulated/floor/airless, -/area/scavver/yachtdown) -"oG" = ( -/obj/machinery/power/apc{ - locked = 0; - name = "south bump"; - pixel_y = -28; - req_access = list() - }, -/obj/structure/cable, -/turf/simulated/floor/airless, -/area/scavver/gantry/down1) -"oH" = ( -/obj/effect/floor_decal/corner/blue/mono, -/obj/machinery/computer/ship/navigation/telescreen{ - pixel_x = 32 - }, -/obj/machinery/firealarm{ - dir = 1; - pixel_y = -24 - }, -/obj/machinery/cryopod, -/turf/simulated/floor/tiled/monotile, -/area/scavver/calypso) -"oJ" = ( -/obj/structure/railing/mapped{ - dir = 1; - icon_state = "railing0-1" - }, -/obj/structure/table/rack, -/obj/item/stack/flag/teal, -/obj/item/stack/flag/teal, -/obj/item/device/binoculars, -/obj/item/rpd, -/obj/item/clamp, -/obj/item/clamp, -/obj/item/clamp, -/turf/simulated/floor/airless, -/area/scavver/gantry/down1) -"oW" = ( -/obj/structure/cable{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/machinery/computer/air_control{ - input_tag = "scavver_burn_in"; - output_tag = "scavver_burn_out"; - sensor_name = "Yacht Thrust Burn Chamber"; - sensor_tag = "scavver_burn_sensor" - }, -/obj/machinery/status_light{ - id_tag = "scavver_burn_sensor"; - pixel_x = -24 - }, -/turf/simulated/floor/airless, -/area/scavver/yachtdown) -"oX" = ( -/obj/machinery/computer/mining, -/turf/simulated/wall, -/area/scavver/calypso) -"pf" = ( -/obj/structure/lattice, -/turf/space, -/area/scavver/yachtdown/thrusters) -"po" = ( -/obj/machinery/atmospherics/valve{ - dir = 4 - }, -/turf/simulated/floor/airless, -/area/scavver/yachtdown) -"pq" = ( -/obj/machinery/atmospherics/binary/passive_gate{ - dir = 1 - }, -/turf/simulated/floor/airless, -/area/scavver/yachtdown/thrusters) -"pG" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/effect/floor_decal/corner_steel_grid{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/cap/visible/fuel, -/turf/simulated/floor/airless, -/area/scavver/gantry/down1) -"pL" = ( -/obj/effect/shuttle_landmark/scavver_gantry/generic, -/turf/space, -/area/space) -"pM" = ( -/obj/structure/ladder/up, -/obj/machinery/light{ - dir = 1 - }, -/obj/effect/floor_decal/corner/blue/mono, -/turf/simulated/floor/tiled/monotile, -/area/scavver/calypso) -"pQ" = ( -/obj/structure/girder, -/turf/simulated/floor/airless, -/area/scavver/yachtdown/thrusters) -"qe" = ( -/obj/machinery/microwave, -/obj/structure/table/steel_reinforced, -/turf/simulated/floor/tiled/white/airless, -/area/scavver/calypso) -"qf" = ( -/obj/structure/closet/toolcloset/excavation/awaysite, -/turf/simulated/floor/airless, -/area/scavver/calypso) -"qC" = ( -/turf/simulated/floor/wood/yew, -/area/scavver/yachtdown) -"qH" = ( -/obj/structure/lattice, -/obj/effect/catwalk_plated/dark, -/obj/structure/railing/mapped{ - dir = 8; - icon_state = "railing0-1" - }, -/obj/structure/railing/mapped, -/turf/space, -/area/space) -"qK" = ( -/obj/structure/lattice, -/obj/machinery/atmospherics/pipe/simple/visible/fuel, -/turf/space, -/area/scavver/yachtdown) -"qP" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/airless, -/area/scavver/yachtdown) -"qQ" = ( -/obj/structure/inflatable/wall, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/white/monotile, -/area/scavver/calypso) -"qY" = ( -/obj/machinery/atmospherics/pipe/simple/visible/fuel{ - dir = 10 - }, -/turf/simulated/floor/airless, -/area/scavver/yachtdown/thrusters) -"rb" = ( -/obj/machinery/hologram/holopad/longrange, -/obj/machinery/atmospherics/pipe/simple/hidden/blue{ - dir = 10 - }, -/obj/effect/floor_decal/corner/blue{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled, -/area/scavver/calypso) -"rr" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/blue{ - dir = 4 - }, -/obj/machinery/door/airlock/external/bolted, -/turf/simulated/floor/airless, -/area/scavver/calypso) -"rs" = ( -/obj/structure/cable{ - d2 = 2; - icon_state = "0-2" - }, -/obj/effect/floor_decal/corner_steel_grid{ - dir = 5 - }, -/obj/structure/cable{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/machinery/power/apc{ - dir = 8; - locked = 0; - name = "west bump"; - pixel_x = -24; - req_access = list() - }, -/turf/simulated/floor/airless, -/area/scavver/gantry/down2) -"ry" = ( -/turf/simulated/wall/titanium, -/area/scavver/calypso) -"rO" = ( -/obj/machinery/atmospherics/pipe/simple/visible/fuel{ - dir = 4 - }, -/turf/simulated/floor/wood/yew, -/area/scavver/yachtdown) -"rS" = ( -/obj/machinery/light/spot{ - dir = 1 - }, -/turf/simulated/floor/airless, -/area/scavver/gantry/down1) -"rW" = ( -/obj/structure/lattice, -/obj/machinery/light/navigation, -/turf/space, -/area/space) -"rZ" = ( -/obj/machinery/atmospherics/portables_connector{ - dir = 8 - }, -/obj/machinery/portable_atmospherics/hydroponics{ - closed_system = 1 - }, -/turf/simulated/floor/airless, -/area/scavver/yachtdown/thrusters) -"sj" = ( -/obj/structure/lattice, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/turf/space, -/area/space) -"sG" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/white/airless, -/area/scavver/calypso) -"sL" = ( -/obj/machinery/atmospherics/pipe/cap/visible{ - dir = 8 - }, -/turf/space, -/area/scavver/yachtdown/thrusters) -"sN" = ( -/obj/machinery/computer/ship/engines, -/obj/effect/floor_decal/corner/blue/mono, -/turf/simulated/floor/tiled/monotile, -/area/scavver/calypso) -"sO" = ( -/obj/machinery/light/small{ - dir = 1 - }, -/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{ - id_tag = "scav_calypso_pump"; - power_rating = 25000 - }, -/turf/simulated/floor/plating, -/area/scavver/calypso) -"te" = ( -/obj/machinery/mineral/unloading_machine{ - output_turf = 1 - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/structure/railing/mapped, -/turf/simulated/floor/airless, -/area/scavver/calypso) -"to" = ( -/obj/structure/railing/mapped{ - dir = 1; - icon_state = "railing0-1" - }, -/obj/structure/closet/firecloset, -/turf/simulated/floor/airless, -/area/scavver/gantry/down2) -"tE" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/blue, -/obj/effect/floor_decal/corner/blue{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/white, -/area/scavver/calypso) -"tL" = ( -/obj/structure/lattice, -/obj/item/reagent_containers/food/snacks/donkpocket/premium, -/turf/space, -/area/scavver/calypso) -"tO" = ( -/obj/machinery/portable_atmospherics/canister/hydrogen, -/obj/machinery/atmospherics/pipe/manifold/visible/fuel{ - dir = 1 - }, -/turf/simulated/floor/airless, -/area/scavver/yachtdown/thrusters) -"tX" = ( -/obj/structure/railing/mapped{ - dir = 4; - icon_state = "railing0-1" - }, -/turf/simulated/floor/airless, -/area/scavver/gantry/down2) -"ua" = ( -/obj/structure/lattice, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/space, -/area/space) -"uo" = ( -/obj/structure/reagent_dispensers/watertank, -/turf/simulated/floor/airless, -/area/scavver/yachtdown) -"uq" = ( -/obj/machinery/atmospherics/pipe/manifold/visible/blue{ - dir = 8 - }, -/obj/effect/catwalk_plated, -/turf/simulated/floor/plating, -/area/scavver/calypso) -"uB" = ( -/obj/machinery/computer/ship/sensors/spacer, -/obj/effect/floor_decal/corner/blue/mono, -/turf/simulated/floor/tiled/monotile, -/area/scavver/calypso) -"uG" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/airless, -/area/scavver/gantry/down1) -"uM" = ( -/obj/structure/lattice, -/obj/machinery/atmospherics/binary/pump/high_power{ - dir = 8 - }, -/turf/space, -/area/scavver/yachtdown) -"uO" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/railing/mapped{ - dir = 8 - }, -/obj/structure/railing/mapped{ - dir = 4 - }, -/obj/effect/floor_decal/industrial/hatch/yellow, -/turf/simulated/floor/airless, -/area/scavver/calypso) -"uR" = ( -/obj/effect/catwalk_plated/dark, -/obj/structure/lattice, -/turf/space, -/area/space) -"uY" = ( -/turf/space, -/area/scavver/calypso) -"ve" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/random/tech_supply, -/turf/simulated/floor/airless, -/area/scavver/gantry/down2) -"vf" = ( -/obj/effect/floor_decal/corner/blue{ - dir = 6 - }, -/turf/simulated/floor/tiled, -/area/scavver/calypso) -"vg" = ( -/obj/structure/railing/mapped{ - dir = 8; - icon_state = "railing0-1" - }, -/turf/simulated/floor/airless, -/area/scavver/gantry/down2) -"vs" = ( -/obj/structure/inflatable/wall, -/turf/simulated/floor/plating, -/area/scavver/yachtdown) -"vD" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/meter, -/obj/machinery/atmospherics/pipe/manifold4w/visible/fuel, -/turf/simulated/floor/wood/yew, -/area/scavver/yachtdown) -"vM" = ( -/obj/structure/lattice, -/turf/space, -/area/space) -"vN" = ( -/obj/machinery/atmospherics/portables_connector{ - dir = 8 - }, -/obj/machinery/light/spot{ - dir = 4 - }, -/obj/machinery/portable_atmospherics/hydroponics{ - closed_system = 1 - }, -/turf/simulated/floor/airless, -/area/scavver/yachtdown/thrusters) -"vU" = ( -/obj/structure/lattice, -/obj/structure/sign/warning/docking_area{ - dir = 8; - pixel_x = 32 - }, -/turf/space, -/area/space) -"vX" = ( -/obj/effect/floor_decal/corner/blue{ - dir = 5 - }, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/scavver/calypso) -"wh" = ( -/obj/structure/railing/mapped{ - dir = 4; - icon_state = "railing0-1" - }, -/obj/structure/closet/crate/plastic, -/obj/item/reagent_containers/glass/paint/random, -/obj/item/crowbar/brace_jack, -/obj/item/stack/material/phoron/fifty, -/obj/item/stack/material/phoron/fifty, -/obj/item/stack/material/phoron/fifty, -/obj/item/stack/material/phoron/fifty, -/obj/item/clothing/glasses/meson, -/obj/item/clothing/glasses/meson, -/obj/item/clothing/gloves/insulated, -/turf/simulated/floor/airless, -/area/scavver/gantry/down2) -"wQ" = ( -/obj/machinery/atmospherics/pipe/cap/visible/fuel, -/turf/simulated/floor/airless, -/area/scavver/yachtdown/thrusters) -"wS" = ( -/obj/structure/lattice, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/space, -/area/scavver/calypso) -"xa" = ( -/obj/effect/shuttle_landmark/scavver_gantry/generic/two, -/turf/space, -/area/space) -"xe" = ( -/obj/machinery/atmospherics/pipe/simple/visible/fuel, -/obj/machinery/button/blast_door{ - id_tag = "scavver_vent"; - name = "Burn Chamber Vent"; - pixel_x = -23; - pixel_y = -10 - }, -/obj/machinery/button/ignition{ - id_tag = "scavver"; - pixel_x = -23 - }, -/obj/machinery/button/blast_door{ - id_tag = "scavver_window"; - name = "Burn Chamber Window Blast Doors"; - pixel_x = -23; - pixel_y = 10 - }, -/turf/simulated/floor/airless, -/area/scavver/yachtdown) -"xm" = ( -/obj/machinery/door/airlock/external{ - frequency = 1380; - id_tag = "scav_calypso_exterior_door"; - locked = 1 - }, -/obj/machinery/access_button/airlock_exterior{ - frequency = 1380; - master_tag = "scav_calypso"; - pixel_y = 22; - pixel_z = 1 - }, -/turf/simulated/floor/plating, -/area/scavver/calypso) -"xr" = ( -/obj/machinery/mineral/processing_unit{ - input_turf = 4; - output_turf = 1 - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/airless, -/area/scavver/calypso) -"xw" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/turf/simulated/floor/airless, -/area/scavver/calypso) -"xA" = ( -/obj/structure/railing/mapped{ - dir = 8; - icon_state = "railing0-1" - }, -/obj/machinery/portable_atmospherics/canister/oxygen, -/obj/effect/floor_decal/corner_steel_grid{ - dir = 1 - }, -/turf/simulated/floor/airless, -/area/scavver/gantry/down2) -"xE" = ( -/obj/machinery/atmospherics/binary/passive_gate, -/turf/simulated/floor/airless, -/area/scavver/yachtdown/thrusters) -"xK" = ( -/obj/structure/railing/mapped{ - dir = 8; - icon_state = "railing0-1" - }, -/obj/structure/table/rack, -/obj/random/toolbox, -/turf/simulated/floor/airless, -/area/scavver/gantry/down2) -"xL" = ( -/obj/structure/bed/chair/shuttle/white{ - dir = 8 - }, -/obj/effect/floor_decal/corner/blue/mono, -/turf/simulated/floor/tiled/monotile, -/area/scavver/calypso) -"xQ" = ( -/obj/structure/railing/mapped, -/obj/structure/reagent_dispensers/watertank, -/turf/simulated/floor/airless, -/area/scavver/gantry/down1) -"yb" = ( -/obj/structure/lattice, -/turf/space, -/area/scavver/calypso) -"yc" = ( -/obj/machinery/power/smes/buildable/preset/scavver/smes{ - charge = 100000 - }, -/obj/structure/cable{ - d2 = 4; - icon_state = "0-4" - }, -/turf/simulated/floor/airless, -/area/scavver/calypso) -"yo" = ( -/obj/effect/floor_decal/corner/blue{ - dir = 5 - }, -/turf/simulated/floor/tiled, -/area/scavver/calypso) -"yD" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/effect/catwalk_plated/dark, -/turf/simulated/floor/airless, -/area/scavver/yachtdown) -"zf" = ( -/obj/effect/floor_decal/corner_steel_grid{ - dir = 6 - }, -/obj/random/assembly, -/turf/simulated/floor/airless, -/area/scavver/gantry/down2) -"zx" = ( -/obj/machinery/atmospherics/pipe/manifold/visible/fuel{ - dir = 1 - }, -/turf/simulated/floor/airless, -/area/scavver/yachtdown/thrusters) -"zV" = ( -/obj/structure/lattice, -/obj/machinery/atmospherics/pipe/simple/visible/fuel{ - dir = 4 - }, -/obj/machinery/meter, -/turf/space, -/area/scavver/yachtdown) -"Aa" = ( -/obj/machinery/atmospherics/pipe/manifold/visible/fuel{ - dir = 8 - }, -/obj/item/stool, -/turf/simulated/floor/airless, -/area/scavver/yachtdown/thrusters) -"Aj" = ( -/obj/machinery/atmospherics/pipe/manifold/visible/fuel{ - dir = 8 - }, -/obj/machinery/meter, -/turf/simulated/floor/wood/yew, -/area/scavver/yachtdown) -"Ap" = ( -/turf/simulated/wall/walnut, -/area/scavver/yachtdown/thrusters) -"AE" = ( -/obj/item/storage/firstaid/surgery, -/obj/item/clothing/head/surgery, -/obj/structure/table/steel_reinforced, -/obj/item/reagent_containers/spray/sterilizine, -/obj/item/reagent_containers/spray/cleaner{ - pixel_x = -5 - }, -/obj/item/device/robotanalyzer, -/obj/effect/floor_decal/corner/blue/mono, -/obj/item/device/scanner/health, -/obj/machinery/vending/wallmed1{ - pixel_y = 32 - }, -/obj/item/clothing/suit/chef/classic, -/turf/simulated/floor/tiled/white/monotile, -/area/scavver/calypso) -"AK" = ( -/obj/machinery/access_button/airlock_interior{ - frequency = 1380; - master_tag = "scav_calypso"; - pixel_y = -22 - }, -/obj/effect/floor_decal/corner/blue/mono, -/obj/machinery/atmospherics/portables_connector{ - dir = 1 - }, -/obj/machinery/portable_atmospherics/canister/air, -/turf/simulated/floor/tiled/monotile, -/area/scavver/calypso) -"AQ" = ( -/obj/machinery/door/blast/regular{ - dir = 4; - id_tag = "scavver_vent"; - name = "Vent" - }, -/turf/simulated/floor/reinforced/airless, -/area/scavver/yachtdown) -"AS" = ( -/obj/structure/railing/mapped{ - dir = 1; - icon_state = "railing0-1" - }, -/obj/structure/closet/crate/plastic, -/obj/item/stack/material/steel/fifty, -/obj/item/stack/material/steel/fifty, -/obj/item/stack/material/steel/fifty, -/obj/item/stack/material/glass/fifty, -/obj/item/stack/material/glass/fifty, -/obj/item/stack/material/plasteel/fifty, -/turf/simulated/floor/airless, -/area/scavver/gantry/down1) -"AV" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/cable{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/turf/simulated/floor/airless, -/area/scavver/gantry/down1) -"Ba" = ( -/obj/effect/floor_decal/industrial/loading{ - dir = 4 - }, -/obj/structure/ore_box, -/obj/structure/railing/mapped, -/turf/simulated/floor/airless, -/area/scavver/calypso) -"Bd" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/effect/floor_decal/steeldecal/steel_decals_central1, -/turf/simulated/floor/airless, -/area/scavver/gantry/down1) -"Bi" = ( -/obj/effect/floor_decal/steeldecal/steel_decals_central1, -/obj/machinery/light/spot{ - dir = 4 - }, -/turf/simulated/floor/airless, -/area/scavver/gantry/down1) -"Br" = ( -/obj/machinery/atmospherics/pipe/manifold4w/visible/blue, -/obj/machinery/meter, -/obj/effect/catwalk_plated, -/turf/simulated/floor/plating, -/area/scavver/calypso) -"Bt" = ( -/obj/machinery/atmospherics/pipe/simple/visible/fuel{ - dir = 4 - }, -/turf/simulated/floor/airless, -/area/scavver/yachtdown/thrusters) -"BA" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/portable_atmospherics/canister/oxygen, -/turf/simulated/floor/airless, -/area/scavver/calypso) -"BJ" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/blue, -/obj/machinery/door/airlock/external/bolted, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/steel_ridged, -/area/scavver/calypso) -"BM" = ( -/obj/structure/lattice, -/obj/effect/catwalk_plated/dark, -/obj/structure/railing/mapped{ - dir = 4; - icon_state = "railing0-1" - }, -/turf/space, -/area/space) -"BO" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/light/spot{ - dir = 8 - }, -/turf/simulated/floor/airless, -/area/scavver/gantry/down2) -"BP" = ( -/obj/structure/cable{ - d2 = 4; - icon_state = "0-4" - }, -/obj/machinery/power/smes/buildable/preset/scavver/smes{ - charge = 100000; - input_level = 80000 - }, -/turf/simulated/floor/airless, -/area/scavver/yachtdown/thrusters) -"BR" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/binary/pump/high_power{ - dir = 1 - }, -/turf/simulated/floor/wood/yew, -/area/scavver/yachtdown) -"Ce" = ( -/turf/space, -/area/scavver/yachtdown/thrusters) -"Ck" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/blue{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/airless, -/area/scavver/calypso) -"Cl" = ( -/obj/structure/lattice, -/obj/machinery/atmospherics/pipe/simple/hidden/universal, -/obj/machinery/meter, -/turf/space, -/area/scavver/calypso) -"Cq" = ( -/obj/structure/railing/mapped{ - dir = 1; - icon_state = "railing0-1" - }, -/obj/machinery/portable_atmospherics/powered/pump/filled, -/obj/effect/floor_decal/corner_steel_grid{ - dir = 1 - }, -/turf/simulated/floor/airless, -/area/scavver/gantry/down1) -"Cr" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/universal, -/obj/machinery/meter, -/turf/simulated/floor/airless, -/area/scavver/calypso) -"Cx" = ( -/obj/machinery/meter, -/obj/machinery/atmospherics/pipe/manifold/visible/fuel, -/obj/machinery/light/spot, -/turf/simulated/floor/airless, -/area/scavver/yachtdown/thrusters) -"Cz" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/blue, -/obj/effect/floor_decal/corner/blue{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 8 - }, -/turf/simulated/floor/tiled, -/area/scavver/calypso) -"CC" = ( -/obj/structure/railing/mapped{ - dir = 4; - icon_state = "railing0-1" - }, -/obj/structure/reagent_dispensers/fueltank, -/turf/simulated/floor/airless, -/area/scavver/gantry/down2) -"CE" = ( -/obj/effect/wallframe_spawn/reinforced/titanium, -/turf/simulated/floor/plating, -/area/scavver/calypso) -"CM" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/cable{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/structure/cable{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/turf/simulated/floor/airless, -/area/scavver/yachtdown) -"CZ" = ( -/obj/effect/paint/black, -/turf/simulated/wall, -/area/scavver/gantry/down1) -"DB" = ( -/obj/effect/floor_decal/corner/blue{ - dir = 5 - }, -/obj/effect/floor_decal/corner/blue{ - dir = 10 - }, -/obj/machinery/sleeper, -/turf/simulated/floor/tiled/white, -/area/scavver/calypso) -"DF" = ( -/obj/structure/railing/mapped{ - dir = 4; - icon_state = "railing0-1" - }, -/obj/structure/ladder/up, -/obj/effect/floor_decal/corner_steel_grid, -/turf/simulated/floor/airless, -/area/scavver/gantry/down2) -"DK" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/airless, -/area/scavver/yachtdown) -"DW" = ( -/obj/structure/railing/mapped, -/obj/machinery/portable_atmospherics/canister/air, -/obj/effect/floor_decal/corner_steel_grid, -/turf/simulated/floor/airless, -/area/scavver/gantry/down1) -"Ee" = ( -/obj/structure/railing/mapped{ - dir = 8; - icon_state = "railing0-1" - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 4 - }, -/obj/machinery/light/spot, -/turf/simulated/floor/airless, -/area/scavver/gantry/down1) -"Eg" = ( -/obj/machinery/atmospherics/pipe/simple/visible/fuel{ - dir = 10 - }, -/turf/simulated/floor/airless, -/area/scavver/yachtdown) -"Eq" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/visible/fuel{ - dir = 5 - }, -/turf/simulated/floor/airless, -/area/scavver/yachtdown) -"Es" = ( -/obj/item/towel/random, -/obj/effect/decal/cleanable/dirt, -/mob/living/simple_animal/hostile/rogue_drone{ - desc = "A small robot. It looks angry. Someone has scratched 'See no Evil' onto the chassis. Odd." - }, -/turf/simulated/floor/tiled/freezer, -/area/scavver/yachtdown) -"EP" = ( -/obj/effect/floor_decal/industrial/hatch/yellow, -/obj/structure/railing/mapped{ - dir = 4 - }, -/turf/simulated/floor/airless, -/area/scavver/calypso) -"EU" = ( -/obj/machinery/light/spot{ - dir = 4 - }, -/turf/simulated/floor/airless, -/area/scavver/yachtdown) -"Fj" = ( -/obj/structure/sign/warning/docking_area{ - pixel_y = 24 - }, -/turf/space, -/area/space) -"Fs" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/visible/fuel, -/obj/machinery/meter, -/turf/simulated/floor/airless, -/area/scavver/yachtdown) -"Fz" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/structure/cable{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/airless, -/area/scavver/yachtdown) -"FJ" = ( -/obj/machinery/atmospherics/unary/tank/carbon_dioxide{ - dir = 8 - }, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/wood/yew, -/area/scavver/yachtdown) -"FK" = ( -/obj/structure/hygiene/shower{ - pixel_y = 20 - }, -/obj/effect/decal/cleanable/dirt, -/obj/random/loot, -/turf/simulated/floor/tiled/freezer, -/area/scavver/yachtdown) -"FM" = ( -/obj/machinery/portable_atmospherics/canister/air, -/obj/machinery/atmospherics/portables_connector{ - dir = 1 - }, -/obj/structure/railing/mapped, -/turf/simulated/floor/airless, -/area/scavver/calypso) -"FS" = ( -/obj/machinery/atmospherics/unary/tank/carbon_dioxide{ - dir = 8 - }, -/turf/simulated/floor/wood/yew, -/area/scavver/yachtdown) -"Ga" = ( -/turf/simulated/floor/airless, -/area/scavver/gantry/down2) -"Gl" = ( -/obj/structure/cable{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/structure/cable{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/turf/simulated/floor/airless, -/area/scavver/yachtdown) -"Gq" = ( -/obj/machinery/alarm{ - dir = 4; - locked = 0; - pixel_x = -25; - req_access = list() - }, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 4 - }, -/obj/effect/floor_decal/corner/blue{ - dir = 10 - }, -/obj/machinery/light, -/turf/simulated/floor/tiled, -/area/scavver/calypso) -"Gr" = ( -/obj/machinery/atmospherics/pipe/manifold/visible/fuel, -/turf/simulated/floor/airless, -/area/scavver/yachtdown/thrusters) -"Gu" = ( -/obj/machinery/light{ - dir = 4 - }, -/turf/simulated/floor/airless, -/area/scavver/calypso) -"Gz" = ( -/obj/structure/reagent_dispensers/watertank, -/turf/simulated/floor/airless, -/area/scavver/yachtdown/thrusters) -"GB" = ( -/obj/machinery/pointdefense{ - initial_id_tag = "Salvage_Gantry" - }, -/obj/structure/cable{ - d2 = 2; - icon_state = "0-2" - }, -/turf/simulated/floor/airless, -/area/scavver/gantry/down2) -"GK" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 8 - }, -/turf/simulated/floor/airless, -/area/scavver/gantry/down1) -"GM" = ( -/obj/machinery/atmospherics/binary/pump{ - dir = 8 - }, -/turf/simulated/floor/airless, -/area/scavver/yachtdown/thrusters) -"Hb" = ( -/obj/random/trash, -/turf/simulated/floor/airless, -/area/scavver/gantry/down2) -"Hn" = ( -/obj/machinery/computer/ship/helm, -/obj/effect/floor_decal/corner/blue/mono, -/turf/simulated/floor/tiled/monotile, -/area/scavver/calypso) -"Hq" = ( -/obj/structure/railing/mapped{ - dir = 4; - icon_state = "railing0-1" - }, -/obj/structure/table/rack, -/obj/random/toolbox, -/turf/simulated/floor/airless, -/area/scavver/gantry/down2) -"Hs" = ( -/obj/machinery/atmospherics/pipe/simple/visible/fuel{ - dir = 9 - }, -/obj/machinery/light/spot{ - dir = 4 - }, -/turf/simulated/floor/airless, -/area/scavver/yachtdown/thrusters) -"Ht" = ( -/obj/machinery/atmospherics/pipe/simple/visible/fuel, -/obj/structure/reagent_dispensers/watertank, -/turf/simulated/floor/airless, -/area/scavver/yachtdown/thrusters) -"HH" = ( -/obj/machinery/atmospherics/unary/vent_pump/tank{ - external_pressure_bound = 0; - external_pressure_bound_default = 0; - icon_state = "map_vent_in"; - id_tag = "scavver_burn_out"; - initialize_directions = 1; - internal_pressure_bound = 4000; - internal_pressure_bound_default = 4000; - pressure_checks = 2; - pressure_checks_default = 2; - pump_direction = 0 - }, -/obj/machinery/atmospherics/pipe/simple/heat_exchanging{ - dir = 4 - }, -/turf/simulated/floor/reinforced/airless, -/area/scavver/yachtdown) -"HJ" = ( -/obj/machinery/door/airlock/hatch, -/obj/machinery/atmospherics/pipe/simple/hidden/blue, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/steel_ridged, -/area/scavver/calypso) -"HU" = ( -/obj/machinery/atmospherics/pipe/simple/visible/fuel{ - dir = 5 - }, -/turf/simulated/floor/airless, -/area/scavver/yachtdown) -"HY" = ( -/obj/effect/floor_decal/corner/blue{ - dir = 6 - }, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 8 - }, -/turf/simulated/floor/tiled, -/area/scavver/calypso) -"ID" = ( -/obj/structure/lattice, -/obj/effect/catwalk_plated/dark, -/obj/structure/railing/mapped{ - dir = 8; - icon_state = "railing0-1" - }, -/obj/structure/railing/mapped{ - dir = 1; - icon_state = "railing0-1" - }, -/turf/space, -/area/space) -"IF" = ( -/obj/structure/lattice, -/obj/effect/catwalk_plated/dark, -/obj/structure/railing/mapped{ - dir = 4; - icon_state = "railing0-1" - }, -/obj/structure/railing/mapped{ - dir = 1; - icon_state = "railing0-1" - }, -/turf/space, -/area/space) -"IJ" = ( -/obj/machinery/air_sensor{ - id_tag = "scavver_burn_sensor" - }, -/obj/effect/decal/cleanable/liquid_fuel, -/obj/machinery/atmospherics/pipe/simple/heat_exchanging{ - dir = 5 - }, -/turf/simulated/floor/reinforced/airless, -/area/scavver/yachtdown) -"IV" = ( -/obj/structure/lattice, -/obj/effect/catwalk_plated/dark, -/obj/structure/railing/mapped{ - dir = 4; - icon_state = "railing0-1" - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/airless, -/area/scavver/gantry/down1) -"Ja" = ( -/obj/structure/ore_box, -/turf/simulated/floor/airless, -/area/scavver/calypso) -"JF" = ( -/obj/structure/lattice, -/obj/structure/sign/warning/docking_area{ - dir = 1; - pixel_y = -34 - }, -/turf/space, -/area/space) -"JN" = ( -/obj/structure/railing/mapped{ - dir = 4; - icon_state = "railing0-1" - }, -/obj/structure/table/rack, -/obj/random/advdevice, -/obj/random/advdevice, -/obj/random/advdevice, -/turf/simulated/floor/airless, -/area/scavver/gantry/down2) -"JP" = ( -/obj/structure/lattice, -/obj/effect/catwalk_plated/dark, -/obj/structure/railing/mapped{ - dir = 1; - icon_state = "railing0-1" - }, -/obj/random/gloves, -/turf/space, -/area/space) -"Ke" = ( -/obj/machinery/atmospherics/pipe/manifold/visible/fuel{ - dir = 8 - }, -/turf/simulated/floor/airless, -/area/scavver/yachtdown/thrusters) -"Kv" = ( -/obj/structure/table/rack, -/obj/structure/railing/mapped, -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 1 - }, -/obj/random/powercell, -/obj/random/powercell, -/obj/random/accessory, -/turf/simulated/floor/airless, -/area/scavver/gantry/down1) -"KL" = ( -/obj/structure/lattice, -/obj/random/loot, -/obj/effect/catwalk_plated/dark, -/obj/structure/railing/mapped, -/turf/space, -/area/space) -"KP" = ( -/obj/effect/catwalk_plated/dark, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/visible/fuel, -/turf/simulated/floor/airless, -/area/scavver/gantry/down1) -"Lg" = ( -/obj/structure/sign/warning/docking_area{ - dir = 8; - pixel_x = 32 - }, -/turf/space, -/area/space) -"Lv" = ( -/obj/machinery/light/spot{ - dir = 1 - }, -/turf/simulated/floor/airless, -/area/scavver/yachtdown/thrusters) -"Ly" = ( -/obj/machinery/atmospherics/unary/tank/carbon_dioxide{ - dir = 8 - }, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/light/spot{ - dir = 4 - }, -/turf/simulated/floor/wood/yew, -/area/scavver/yachtdown) -"LA" = ( -/obj/structure/cable{ - d2 = 8; - icon_state = "0-8" - }, -/obj/machinery/power/port_gen/pacman{ - anchored = 1; - sheets = 25 - }, -/obj/machinery/power/apc/super{ - dir = 1; - locked = 0; - name = "north bump"; - pixel_y = 24; - req_access = list() - }, -/turf/simulated/floor/airless, -/area/scavver/yachtdown/thrusters) -"LD" = ( -/obj/structure/railing/mapped, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/obj/machinery/portable_atmospherics/canister/nitrogen/engine_setup, -/turf/simulated/floor/airless, -/area/scavver/calypso) -"LR" = ( -/obj/structure/railing/mapped{ - dir = 1; - icon_state = "railing0-1" - }, -/obj/structure/table/steel_reinforced, -/obj/structure/cable{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/effect/floor_decal/corner_steel_grid{ - dir = 1 - }, -/turf/simulated/floor/airless, -/area/scavver/gantry/down2) -"Me" = ( -/obj/machinery/atmospherics/pipe/manifold/visible/fuel, -/turf/simulated/wall/ocp_wall, -/area/scavver/yachtdown) -"Mf" = ( -/obj/structure/lattice, -/obj/structure/railing/mapped, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 - }, -/turf/space, -/area/scavver/calypso) -"Mz" = ( -/turf/space, -/area/scavver/yachtdown) -"MT" = ( -/obj/structure/hygiene/toilet{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/mob/living/simple_animal/hostile/rogue_drone{ - desc = "A small robot. It looks angry. Someone has scratched 'Speak no Evil' onto the chassis. Odd." - }, -/turf/simulated/floor/tiled/freezer, -/area/scavver/yachtdown) -"Np" = ( -/obj/structure/lattice, -/obj/machinery/atmospherics/pipe/simple/visible/fuel{ - dir = 10 - }, -/turf/space, -/area/scavver/yachtdown) -"NK" = ( -/obj/machinery/light/small{ - dir = 4 - }, -/turf/simulated/floor/airless, -/area/scavver/calypso) -"NP" = ( -/obj/structure/cable, -/obj/machinery/power/solar_control/autostart{ - dir = 1 - }, -/turf/simulated/floor/airless, -/area/scavver/yachtdown) -"Om" = ( -/obj/effect/floor_decal/corner/blue/mono, -/obj/machinery/pointdefense_control{ - initial_id_tag = "Salvage_Gantry"; - name = "Point Defense Controller" - }, -/turf/simulated/floor/tiled/monotile, -/area/scavver/calypso) -"Oq" = ( -/turf/simulated/floor/airless, -/area/scavver/yachtdown/thrusters) -"Or" = ( -/obj/structure/cable{ - icon_state = "2-8" - }, -/turf/simulated/floor/airless, -/area/scavver/yachtdown) -"OD" = ( -/obj/random/tool, -/turf/simulated/floor/airless, -/area/scavver/gantry/down1) -"OS" = ( -/obj/machinery/atmospherics/pipe/simple/visible/fuel{ - dir = 4 - }, -/obj/structure/inflatable/door, -/turf/simulated/floor/airless, -/area/scavver/yachtdown) -"Pd" = ( -/obj/structure/railing/mapped, -/obj/machinery/atmospherics/portables_connector{ - dir = 1 - }, -/obj/machinery/portable_atmospherics/canister/empty, -/turf/simulated/floor/airless, -/area/scavver/calypso) -"Pn" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/catwalk_plated/dark, -/turf/simulated/floor/airless, -/area/scavver/gantry/down1) -"PA" = ( -/obj/structure/bed/chair/shuttle/white{ - dir = 1 - }, -/obj/effect/floor_decal/corner/blue{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/turf/simulated/floor/tiled, -/area/scavver/calypso) -"PD" = ( -/obj/machinery/door/airlock/external/bolted_open, -/obj/machinery/atmospherics/pipe/simple/visible/fuel, -/turf/simulated/floor/wood/yew, -/area/scavver/yachtdown/thrusters) -"PE" = ( -/turf/simulated/wall/ocp_wall, -/area/scavver/yachtdown) -"PN" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/blue{ - dir = 4 - }, -/turf/simulated/floor/airless, -/area/scavver/calypso) -"PO" = ( -/obj/effect/decal/cleanable/liquid_fuel, -/obj/machinery/atmospherics/pipe/simple/heat_exchanging{ - dir = 4 - }, -/turf/simulated/floor/reinforced/airless, -/area/scavver/yachtdown) -"PT" = ( -/obj/structure/lattice, -/obj/random/donkpocket, -/turf/space, -/area/scavver/yachtdown) -"PY" = ( -/turf/simulated/floor/airless, -/area/scavver/calypso) -"Qf" = ( -/obj/machinery/atmospherics/unary/outlet_injector{ - frequency = 1441; - icon_state = "map_injector"; - id = "scavver_burn_in"; - use_power = 1 - }, -/obj/machinery/atmospherics/pipe/simple/heat_exchanging/junction{ - dir = 8 - }, -/turf/simulated/floor/reinforced/airless, -/area/scavver/yachtdown) -"QD" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 8 - }, -/obj/item/device/flashlight/lantern, -/turf/simulated/floor/airless, -/area/scavver/gantry/down1) -"QF" = ( -/obj/machinery/atmospherics/valve{ - dir = 4 - }, -/turf/simulated/floor/airless, -/area/scavver/yachtdown/thrusters) -"QL" = ( -/obj/machinery/door/airlock/external{ - frequency = 1380; - id_tag = "scav_calypso_interior_door" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/blue{ - dir = 4 - }, -/turf/simulated/floor/tiled/steel_ridged, -/area/scavver/calypso) -"QQ" = ( -/obj/structure/lattice, -/obj/effect/catwalk_plated/dark, -/obj/structure/railing/mapped{ - dir = 8; - icon_state = "railing0-1" - }, -/turf/space, -/area/space) -"QR" = ( -/obj/structure/railing/mapped{ - dir = 4; - icon_state = "railing0-1" - }, -/obj/structure/cable{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/effect/floor_decal/corner_steel_grid, -/turf/simulated/floor/airless, -/area/scavver/gantry/down1) -"Rc" = ( -/obj/machinery/power/terminal{ - dir = 1 - }, -/obj/structure/cable{ - d2 = 2; - icon_state = "0-2" - }, -/turf/simulated/floor/airless, -/area/scavver/yachtdown) -"RC" = ( -/obj/machinery/atmospherics/binary/pump/on, -/obj/effect/floor_decal/corner/blue/mono, -/obj/machinery/portable_atmospherics/canister/oxygen, -/turf/simulated/floor/tiled/monotile, -/area/scavver/calypso) -"RD" = ( -/obj/machinery/atmospherics/portables_connector{ - dir = 1 - }, -/obj/machinery/portable_atmospherics/canister/hydrogen, -/turf/simulated/floor/airless, -/area/scavver/yachtdown) -"RQ" = ( -/obj/structure/railing/mapped{ - dir = 8; - icon_state = "railing0-1" - }, -/obj/machinery/floodlight, -/obj/effect/floor_decal/corner_steel_grid{ - dir = 1 - }, -/turf/simulated/floor/airless, -/area/scavver/gantry/down2) -"RT" = ( -/obj/structure/table/rack, -/obj/item/storage/belt/utility/full, -/obj/item/storage/belt/utility/full, -/obj/item/device/radio/map_preset/scavver, -/obj/item/device/radio/map_preset/scavver, -/obj/item/clothing/gloves/insulated, -/obj/item/clothing/gloves/insulated, -/obj/item/device/multitool, -/obj/effect/floor_decal/corner/blue/mono, -/obj/machinery/alarm{ - dir = 4; - locked = 0; - pixel_x = -25; - req_access = list() - }, -/obj/machinery/atmospherics/pipe/simple/hidden/blue{ - dir = 6 - }, -/turf/simulated/floor/tiled/monotile, -/area/scavver/calypso) -"Sj" = ( -/obj/machinery/atmospherics/pipe/manifold4w/visible/fuel, -/turf/simulated/floor/wood/yew, -/area/scavver/yachtdown/thrusters) -"Sl" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/portables_connector{ - dir = 4 - }, -/obj/machinery/portable_atmospherics/canister/oxygen, -/turf/simulated/floor/airless, -/area/scavver/yachtdown) -"Sq" = ( -/obj/structure/inflatable/wall, -/turf/simulated/floor/airless, -/area/scavver/yachtdown) -"Ss" = ( -/obj/structure/railing/mapped, -/obj/machinery/light/small{ - dir = 4 - }, -/turf/simulated/floor/airless, -/area/scavver/calypso) -"St" = ( -/obj/effect/floor_decal/corner/blue{ - dir = 9 - }, -/obj/effect/floor_decal/corner/blue{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/blue{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/scavver/calypso) -"Sw" = ( -/obj/structure/lattice, -/obj/structure/sign/warning/docking_area{ - pixel_y = 24 - }, -/turf/space, -/area/space) -"Sz" = ( -/obj/machinery/atmospherics/valve/shutoff/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/valve/shutoff/supply{ - dir = 4 - }, -/obj/machinery/light/small, -/turf/simulated/floor/airless, -/area/scavver/calypso) -"SF" = ( -/turf/simulated/wall/titanium, -/area/scavver/yachtdown) -"SQ" = ( -/obj/machinery/atmospherics/portables_connector{ - dir = 8 - }, -/obj/machinery/portable_atmospherics/hydroponics{ - closed_system = 1 - }, -/turf/simulated/floor/wood/yew, -/area/scavver/yachtdown/thrusters) -"SW" = ( -/obj/machinery/atmospherics/binary/passive_gate, -/turf/simulated/floor/wood/yew, -/area/scavver/yachtdown) -"SY" = ( -/obj/machinery/atmospherics/pipe/zpipe/up/fuel{ - dir = 8 - }, -/obj/machinery/firealarm{ - dir = 1; - pixel_y = -24 - }, -/turf/simulated/floor/airless, -/area/scavver/yachtdown/thrusters) -"SZ" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/airless, -/area/scavver/gantry/down2) -"Tm" = ( -/obj/structure/cable{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/machinery/light/spot{ - dir = 1 - }, -/turf/simulated/floor/airless, -/area/scavver/gantry/down1) -"TK" = ( -/obj/machinery/atmospherics/binary/passive_gate{ - dir = 8 - }, -/obj/structure/lattice, -/turf/space, -/area/space) -"TU" = ( -/obj/machinery/embedded_controller/radio/airlock/airlock_controller{ - frequency = 1380; - id_tag = "scav_calypso"; - pixel_y = 26; - tag_airpump = "scav_calypso_pump"; - tag_chamber_sensor = "scav_calypso_sensor_chamber"; - tag_exterior_door = "scav_calypso_exterior_door"; - tag_interior_door = "scav_calypso_interior_door" - }, -/obj/machinery/airlock_sensor{ - frequency = 1380; - id_tag = "scav_calypso_sensor_chamber"; - pixel_x = -22 - }, -/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{ - id_tag = "scav_calypso_pump"; - power_rating = 25000 - }, -/turf/simulated/floor/airless, -/area/scavver/calypso) -"TV" = ( -/obj/machinery/atmospherics/portables_connector{ - dir = 4 - }, -/obj/machinery/portable_atmospherics/hydroponics{ - closed_system = 1 - }, -/turf/simulated/floor/wood/yew, -/area/scavver/yachtdown/thrusters) -"TZ" = ( -/obj/effect/floor_decal/steeldecal/steel_decals_central1, -/turf/simulated/floor/airless, -/area/scavver/gantry/down1) -"Uh" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/cable{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/turf/simulated/floor/airless, -/area/scavver/yachtdown) -"Uk" = ( -/obj/machinery/atmospherics/pipe/manifold4w/visible/fuel, -/obj/machinery/meter, -/turf/simulated/floor/airless, -/area/scavver/yachtdown/thrusters) -"Up" = ( -/obj/machinery/atmospherics/pipe/simple/visible/fuel{ - dir = 10 - }, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/airless, -/area/scavver/yachtdown) -"Uv" = ( -/obj/structure/cable{ - d2 = 4; - icon_state = "0-4" - }, -/obj/machinery/power/tracker, -/turf/simulated/floor/airless, -/area/scavver/yachtdown) -"UH" = ( -/obj/effect/floor_decal/corner_steel_grid{ - dir = 9 - }, -/turf/simulated/floor/airless, -/area/scavver/gantry/down2) -"UJ" = ( -/obj/machinery/atmospherics/portables_connector{ - dir = 4 - }, -/turf/simulated/floor/airless, -/area/scavver/yachtdown/thrusters) -"UM" = ( -/turf/space, -/area/space) -"UP" = ( -/obj/machinery/atmospherics/pipe/manifold/visible/fuel{ - dir = 1 - }, -/obj/machinery/portable_atmospherics/canister/hydrogen, -/turf/simulated/floor/airless, -/area/scavver/yachtdown/thrusters) -"UU" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/turf/simulated/floor/airless, -/area/scavver/yachtdown) -"UV" = ( -/obj/machinery/recharge_station, -/obj/structure/fireaxecabinet{ - pixel_x = 32 - }, -/turf/simulated/floor/airless, -/area/scavver/calypso) -"UY" = ( -/obj/structure/lattice, -/obj/machinery/atmospherics/pipe/simple/visible/fuel{ - dir = 4 - }, -/turf/space, -/area/scavver/yachtdown) -"Va" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/machinery/meter, -/obj/machinery/atmospherics/pipe/manifold/visible/fuel{ - dir = 1 - }, -/turf/simulated/floor/wood/yew, -/area/scavver/yachtdown) -"Vr" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/structure/girder/displaced, -/turf/simulated/floor/airless, -/area/scavver/yachtdown/thrusters) -"Vs" = ( -/obj/structure/railing/mapped{ - dir = 4; - icon_state = "railing0-1" - }, -/obj/machinery/portable_atmospherics/powered/scrubber, -/turf/simulated/floor/airless, -/area/scavver/gantry/down2) -"Vx" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/cable{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/turf/simulated/floor/airless, -/area/scavver/gantry/down1) -"VT" = ( -/obj/machinery/sparker{ - id_tag = "scavver"; - pixel_x = -18 - }, -/obj/effect/decal/cleanable/liquid_fuel, -/obj/machinery/atmospherics/pipe/simple/heat_exchanging{ - dir = 6 - }, -/turf/simulated/floor/reinforced/airless, -/area/scavver/yachtdown) -"Wo" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/white, -/area/scavver/calypso) -"Wp" = ( -/obj/structure/inflatable/door, -/obj/machinery/atmospherics/pipe/simple/visible/fuel{ - dir = 4 - }, -/turf/simulated/floor/airless, -/area/scavver/yachtdown/thrusters) -"WI" = ( -/obj/machinery/atmospherics/pipe/simple/visible/fuel, -/obj/machinery/door/airlock/external/bolted, -/obj/machinery/door/blast/regular{ - dir = 2; - id_tag = "scavver_window"; - name = "Window Blast Door" - }, -/turf/simulated/floor/reinforced/airless, -/area/scavver/yachtdown) -"WM" = ( -/turf/simulated/floor/airless, -/area/scavver/yachtdown) -"WQ" = ( -/obj/machinery/atmospherics/pipe/simple/heat_exchanging/junction{ - dir = 8 - }, -/obj/effect/decal/cleanable/liquid_fuel, -/turf/simulated/floor/reinforced/airless, -/area/scavver/yachtdown) -"Xb" = ( -/obj/machinery/light/small{ - dir = 8 - }, -/obj/structure/hygiene/sink{ - pixel_y = 20 - }, -/obj/item/bikehorn/rubberducky, -/obj/effect/decal/cleanable/dirt, -/obj/random/soap, -/mob/living/simple_animal/hostile/rogue_drone{ - desc = "A small robot. It looks angry. Someone has scratched 'Hear no Evil' onto the chassis. Odd." - }, -/turf/simulated/floor/tiled/freezer, -/area/scavver/yachtdown) -"Xn" = ( -/turf/simulated/wall/walnut, -/area/scavver/yachtdown) -"Xp" = ( -/obj/machinery/atmospherics/pipe/manifold4w/visible/fuel, -/obj/machinery/portable_atmospherics/canister/hydrogen, -/turf/simulated/floor/airless, -/area/scavver/yachtdown/thrusters) -"XA" = ( -/obj/effect/catwalk_plated/dark, -/obj/structure/railing/mapped{ - dir = 4; - icon_state = "railing0-1" - }, -/obj/structure/lattice, -/turf/space, -/area/space) -"XC" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/cable{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/turf/simulated/floor/airless, -/area/scavver/yachtdown) -"XE" = ( -/obj/machinery/atmospherics/pipe/simple/visible/fuel{ - dir = 4 - }, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/airless, -/area/scavver/yachtdown) -"XH" = ( -/obj/structure/railing/mapped{ - dir = 1; - icon_state = "railing0-1" - }, -/obj/structure/closet/crate/freezer/rations, -/turf/simulated/floor/airless, -/area/scavver/gantry/down1) -"XN" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/blue, -/obj/effect/floor_decal/corner/blue{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled, -/area/scavver/calypso) -"XQ" = ( -/obj/machinery/shipsensors/weak{ - use_power = 0 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/blue{ - dir = 10 - }, -/turf/simulated/floor/airless, -/area/scavver/calypso) -"XV" = ( -/obj/machinery/atmospherics/pipe/simple/visible/fuel{ - dir = 5 - }, -/turf/simulated/floor/wood/yew, -/area/scavver/yachtdown) -"Yc" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 8 - }, -/obj/effect/floor_decal/corner/blue{ - dir = 6 - }, -/turf/simulated/floor/tiled, -/area/scavver/calypso) -"YU" = ( -/obj/structure/lattice, -/obj/effect/catwalk_plated/dark, -/obj/structure/railing/mapped{ - dir = 1; - icon_state = "railing0-1" - }, -/obj/random/tech_supply, -/turf/space, -/area/space) -"YV" = ( -/obj/effect/paint/black, -/turf/simulated/wall, -/area/scavver/gantry/down2) -"Zg" = ( -/obj/structure/lattice, -/obj/machinery/atmospherics/pipe/zpipe/up/supply, -/obj/machinery/atmospherics/pipe/zpipe/up/scrubbers, -/turf/space, -/area/space) -"Zr" = ( -/obj/machinery/atmospherics/pipe/simple/visible/fuel{ - dir = 10 - }, -/turf/simulated/wall/ocp_wall, -/area/scavver/yachtdown) -"ZF" = ( -/obj/machinery/atmospherics/pipe/manifold/visible/fuel{ - dir = 4 - }, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/wood/yew, -/area/scavver/yachtdown) -"ZG" = ( -/obj/machinery/atmospherics/pipe/simple/visible/fuel, -/obj/structure/cable{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/turf/simulated/floor/airless, -/area/scavver/yachtdown/thrusters) -"ZS" = ( -/obj/structure/railing/mapped{ - dir = 8; - icon_state = "railing0-1" - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 4 - }, -/turf/simulated/floor/airless, -/area/scavver/gantry/down1) - -(1,1,1) = {" -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -"} -(2,1,1) = {" -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -"} -(3,1,1) = {" -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -"} -(4,1,1) = {" -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -"} -(5,1,1) = {" -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -"} -(6,1,1) = {" -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -"} -(7,1,1) = {" -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -"} -(8,1,1) = {" -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -"} -(9,1,1) = {" -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -"} -(10,1,1) = {" -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -"} -(11,1,1) = {" -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -"} -(12,1,1) = {" -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -"} -(13,1,1) = {" -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -"} -(14,1,1) = {" -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -"} -(15,1,1) = {" -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -"} -(16,1,1) = {" -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -"} -(17,1,1) = {" -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -"} -(18,1,1) = {" -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -"} -(19,1,1) = {" -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -"} -(20,1,1) = {" -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -"} -(21,1,1) = {" -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -"} -(22,1,1) = {" -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -"} -(23,1,1) = {" -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -"} -(24,1,1) = {" -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -"} -(25,1,1) = {" -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -"} -(26,1,1) = {" -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -"} -(27,1,1) = {" -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -"} -(28,1,1) = {" -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -"} -(29,1,1) = {" -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -"} -(30,1,1) = {" -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -"} -(31,1,1) = {" -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -"} -(32,1,1) = {" -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -"} -(33,1,1) = {" -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -"} -(34,1,1) = {" -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -"} -(35,1,1) = {" -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -"} -(36,1,1) = {" -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -"} -(37,1,1) = {" -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -xa -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -"} -(38,1,1) = {" -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -"} -(39,1,1) = {" -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -"} -(40,1,1) = {" -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -"} -(41,1,1) = {" -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -"} -(42,1,1) = {" -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -"} -(43,1,1) = {" -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -"} -(44,1,1) = {" -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -"} -(45,1,1) = {" -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -"} -(46,1,1) = {" -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -Uv -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -"} -(47,1,1) = {" -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -kU -Gl -iB -UM -kU -CM -iB -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -"} -(48,1,1) = {" -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -kU -CM -iB -vM -kU -CM -iB -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -"} -(49,1,1) = {" -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -kU -CM -iB -UM -kU -CM -iB -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -"} -(50,1,1) = {" -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -kU -CM -iB -UM -kU -CM -iB -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -"} -(51,1,1) = {" -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -kU -CM -iB -UM -kU -CM -iB -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -"} -(52,1,1) = {" -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -kU -CM -iB -UM -kU -CM -iB -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -"} -(53,1,1) = {" -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -kU -CM -iB -UM -kU -CM -iB -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -"} -(54,1,1) = {" -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -kU -CM -iB -UM -kU -CM -iB -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -"} -(55,1,1) = {" -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -kU -CM -iB -UM -kU -CM -iB -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -"} -(56,1,1) = {" -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -kU -CM -iB -UM -kU -CM -iB -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -"} -(57,1,1) = {" -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -pL -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -ID -QQ -QQ -mi -mi -mi -QQ -QQ -lD -qH -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -kU -CM -iB -UM -kU -CM -iB -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -"} -(58,1,1) = {" -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -JP -UM -vM -UM -rW -UM -UM -UM -UM -jy -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -kU -CM -iB -UM -kU -CM -iB -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -"} -(59,1,1) = {" -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -mo -vM -vM -Lg -vM -UM -UM -UM -UM -jy -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -kU -CM -iB -UM -kU -CM -iB -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -"} -(60,1,1) = {" -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -mo -vM -UM -CZ -ZS -Ee -CZ -vM -rW -jy -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -kU -CM -iB -UM -kU -CM -iB -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -"} -(61,1,1) = {" -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -mo -UM -UM -CZ -ny -ny -CZ -UM -UM -jy -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -kU -CM -iB -UM -kU -CM -iB -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -"} -(62,1,1) = {" -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -mo -UM -UM -CZ -jm -ny -CZ -UM -UM -jy -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -kU -CM -iB -UM -kU -CM -iB -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -"} -(63,1,1) = {" -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -YU -UM -UM -CZ -ny -ny -CZ -UM -UM -jy -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -kU -CM -iB -UM -kU -CM -iB -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -"} -(64,1,1) = {" -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -mo -nS -nS -dk -QD -GK -Kv -UM -UM -jy -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -kU -CM -iB -UM -kU -CM -iB -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -"} -(65,1,1) = {" -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -mo -UM -UM -Cq -ny -ny -xQ -vM -rW -jy -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -kU -CM -iB -UM -kU -CM -iB -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -"} -(66,1,1) = {" -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -mo -UM -UM -CZ -rS -ny -CZ -Fj -UM -jy -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -kU -CM -iB -UM -kU -CM -iB -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -"} -(67,1,1) = {" -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -mo -UM -UM -CZ -ny -ny -CZ -UM -UM -jy -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -Or -qP -XC -qP -UU -WM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -"} -(68,1,1) = {" -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -mo -UM -UM -AS -ny -ny -DW -UM -UM -jy -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -vM -vM -vM -SF -WM -DK -SF -vM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -"} -(69,1,1) = {" -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -mo -UM -UM -XH -ny -OD -eY -nS -nS -jy -UM -UM -UM -UM -UM -UM -vM -UM -PE -PE -AQ -PE -SF -SF -bQ -Rc -Fz -NP -SF -UM -UM -UM -jg -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -"} -(70,1,1) = {" -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -mo -rW -JF -CZ -ny -ny -CZ -UM -UM -jy -UM -UM -UM -UM -UM -UM -vM -SF -PE -VT -IJ -PE -SF -oW -UU -WM -gA -SF -SF -nb -nb -vM -TK -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -"} -(71,1,1) = {" -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -mo -UM -UM -CZ -rS -ny -CZ -Sw -rW -jy -vM -vM -vM -SF -Mz -mU -mU -SF -PE -PO -HH -WI -xe -Fs -oE -oE -oE -HU -nb -nb -nb -nb -Wp -nb -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -"} -(72,1,1) = {" -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -ID -QQ -QQ -QQ -QQ -QQ -QQ -QQ -QQ -QQ -QQ -QQ -QQ -QQ -QQ -QQ -QQ -QQ -QQ -QQ -QQ -QQ -QQ -uR -UM -UM -CZ -ny -ny -CZ -UM -vM -jy -UM -SF -SF -SF -Xn -mU -mU -Xn -PE -WQ -Qf -WI -HU -Uh -Sl -qP -qP -Up -kW -ZG -dv -bw -zx -gZ -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -"} -(73,1,1) = {" -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -mo -eB -vM -UM -nS -UM -UM -UM -UM -nS -UM -UM -vM -UM -UM -UM -UM -UM -rW -UM -nS -UM -UM -UM -UM -UM -eJ -ny -ny -la -UM -UM -jy -vM -Xn -Xb -Es -vs -Mz -mU -Xn -PE -Zr -Me -PE -jZ -gU -ji -RD -EU -WM -nb -cr -Bt -Oq -UP -gZ -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -"} -(74,1,1) = {" -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -mo -UM -vM -Lg -nS -UM -UM -UM -UM -nS -UM -vM -vM -UM -UM -UM -UM -UM -vU -UM -nS -UM -UM -UM -UM -UM -oJ -ny -ny -it -UM -UM -jy -vM -Xn -FK -MT -Xn -mU -mU -Xn -uo -Sq -po -gf -Vr -nb -nb -nb -nb -nb -nb -BP -Bt -Oq -tO -gZ -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -"} -(75,1,1) = {" -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -mo -UM -vM -YV -UH -RQ -YV -YV -YV -UH -xA -YV -YV -YV -cB -xK -YV -YV -YV -db -UH -YV -YV -YV -vg -oe -CZ -Tm -oG -CZ -UM -UM -jy -UM -Xn -Xn -Xn -Xn -bI -Xn -mU -mU -Xn -Eg -Eq -pQ -TV -TV -TV -TV -TV -nb -LA -Bt -Oq -UP -gZ -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -"} -(76,1,1) = {" -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -mo -nS -nS -rs -SZ -SZ -ve -BO -SZ -SZ -SZ -SZ -BO -SZ -SZ -SZ -SZ -BO -SZ -SZ -SZ -SZ -BO -SZ -SZ -SZ -Bd -AV -ny -CZ -vM -rW -jy -UM -qC -bI -bI -bI -iI -mb -mb -Aj -mb -SW -vD -PD -nU -cg -Sj -Sj -Sj -Ke -oC -Uk -oC -Cx -nb -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -"} -(77,1,1) = {" -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -em -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -mo -GB -SZ -LR -cu -Ga -Ga -Ga -Ga -cu -cE -Ga -Ga -Ga -Ga -Ga -aO -Ga -Ga -Ga -cu -Ga -Ga -Ga -Ga -Ga -TZ -uG -fr -iL -vM -UM -ev -fG -qK -nT -ZF -ZF -kt -XE -FJ -Ly -gk -BR -dM -Ap -ec -Sj -nU -Gr -rZ -qY -xE -nU -xE -Xp -gZ -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -"} -(78,1,1) = {" -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -mo -UM -UM -to -Ga -jx -Ga -Hb -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Bi -hK -Vx -pG -KP -KP -iM -yD -yD -Va -mb -XV -qC -rO -Xn -Xn -OS -Xn -Xn -Ap -SQ -SQ -vN -SQ -nb -nb -Lv -Bt -Oq -fz -gZ -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -"} -(79,1,1) = {" -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -mo -UM -UM -YV -Hq -JN -YV -YV -YV -DF -zf -YV -YV -YV -Vs -CC -YV -YV -YV -wh -bq -YV -YV -YV -tX -tX -CZ -QR -gV -CZ -vM -vM -jy -UM -Xn -FS -hr -iI -mb -nd -Xn -Mz -uM -mU -mU -Ap -Ap -Ap -Ap -Ap -nb -lz -Oq -QF -Oq -es -gZ -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -"} -(80,1,1) = {" -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -mo -UM -UM -UM -UM -UM -vM -jt -UM -UM -nS -UM -UM -UM -UM -UM -UM -UM -UM -vM -vM -jt -UM -UM -UM -UM -UM -UM -Pn -UM -UM -UM -jy -UM -SF -SF -SF -iK -FS -FS -Xn -Mz -zV -Mz -mU -Gz -Oq -UJ -Oq -wQ -Ht -pq -Aa -Hs -fc -jr -gZ -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -"} -(81,1,1) = {" -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -mo -UM -UM -UM -UM -UM -UM -vM -rW -UM -nS -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -cv -UM -UM -UM -UM -UM -UM -Pn -UM -UM -UM -jy -UM -vM -UM -SF -SF -SF -SF -SF -PT -UY -mU -nb -nb -Oq -GM -Oq -Oq -nb -nb -SY -nb -nb -nb -nb -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -"} -(82,1,1) = {" -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -IF -BM -BM -BM -BM -BM -BM -BM -BM -BM -BM -BM -BM -BM -BM -BM -BM -BM -BM -BM -BM -BM -BM -BM -BM -BM -BM -XA -IV -BM -nS -BM -BM -jH -jH -jH -jH -nS -nS -SF -Mz -Mz -Np -fy -nb -ju -Oq -sL -Ce -Ce -pf -nb -nb -nb -UM -vM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -"} -(83,1,1) = {" -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -ky -UM -nS -UM -vM -UM -UM -vM -UM -nS -KL -mU -mU -mU -mU -UY -nb -nb -nb -pf -pf -Ce -pf -nb -vM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -"} -(84,1,1) = {" -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -ky -UM -nS -UM -vM -Zg -ua -sj -UM -nS -jy -UM -UM -UM -UM -bG -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -"} -(85,1,1) = {" -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -yb -PY -yb -fA -xw -UM -uR -UM -UM -NK -fI -wS -oX -ry -Ba -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -"} -(86,1,1) = {" -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -ry -ry -uY -ry -yc -ry -ry -xm -CE -ry -ry -bL -uO -xr -EP -te -UM -UM -UM -UM -UM -UM -nC -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -"} -(87,1,1) = {" -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -ry -ry -tL -eC -sG -dQ -ry -TU -uq -fF -ry -ry -oX -wS -ry -Ja -Ss -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -"} -(88,1,1) = {" -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -ry -gs -gs -ry -ry -qe -cP -kx -yb -ry -sO -Br -fF -ry -na -yb -Sz -ry -ry -ry -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -"} -(89,1,1) = {" -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -gs -sN -vX -Gq -ry -ry -qQ -CE -ry -ry -CE -QL -CE -ry -ox -ak -kl -BA -LD -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -"} -(90,1,1) = {" -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -gs -Hn -PA -rb -HJ -tE -el -jJ -CE -RT -RC -St -AK -ry -qf -PY -Ck -Cl -Mf -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -"} -(91,1,1) = {" -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -gs -uB -yo -kK -CE -DB -gv -fs -HJ -lV -Cz -hC -XN -BJ -hu -hu -jR -Cr -Pd -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -"} -(92,1,1) = {" -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -aa -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -ry -gs -gs -ry -ry -AE -bN -np -CE -vf -HY -Yc -jz -ry -UV -Gu -PN -ry -ry -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -"} -(93,1,1) = {" -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -ry -ry -aL -Wo -mV -ry -pM -xL -Om -oH -ry -ry -ry -rr -ry -ry -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -"} -(94,1,1) = {" -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -ry -cj -hM -ry -ry -ry -CE -CE -ry -ry -ry -bC -hB -FM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -"} -(95,1,1) = {" -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -ry -ry -fE -ry -vM -vM -UM -UM -UM -vM -ry -ry -XQ -FM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -"} -(96,1,1) = {" -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -ry -ry -ry -UM -UM -UM -UM -UM -vM -vM -ry -ry -ry -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -"} -(97,1,1) = {" -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -ry -ry -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -"} -(98,1,1) = {" -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -"} -(99,1,1) = {" -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -"} -(100,1,1) = {" -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -"} -(101,1,1) = {" -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -"} -(102,1,1) = {" -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -"} -(103,1,1) = {" -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -"} -(104,1,1) = {" -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -"} -(105,1,1) = {" -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -"} -(106,1,1) = {" -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -"} -(107,1,1) = {" -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -"} -(108,1,1) = {" -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -"} -(109,1,1) = {" -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -"} -(110,1,1) = {" -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -"} -(111,1,1) = {" -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -"} -(112,1,1) = {" -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -"} -(113,1,1) = {" -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -"} -(114,1,1) = {" -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -"} -(115,1,1) = {" -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -"} -(116,1,1) = {" -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -"} -(117,1,1) = {" -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -"} -(118,1,1) = {" -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -"} -(119,1,1) = {" -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -"} -(120,1,1) = {" -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -"} -(121,1,1) = {" -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -"} -(122,1,1) = {" -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -"} -(123,1,1) = {" -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -"} -(124,1,1) = {" -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -"} -(125,1,1) = {" -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -"} -(126,1,1) = {" -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -"} -(127,1,1) = {" -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -"} -(128,1,1) = {" -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -"} -(129,1,1) = {" -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -"} -(130,1,1) = {" -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -"} -(131,1,1) = {" -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -"} -(132,1,1) = {" -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -"} -(133,1,1) = {" -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -"} -(134,1,1) = {" -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -"} -(135,1,1) = {" -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -"} -(136,1,1) = {" -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -"} -(137,1,1) = {" -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -"} -(138,1,1) = {" -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -"} -(139,1,1) = {" -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -"} -(140,1,1) = {" -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -"} -(141,1,1) = {" -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -"} -(142,1,1) = {" -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -"} -(143,1,1) = {" -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -"} -(144,1,1) = {" -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -"} -(145,1,1) = {" -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -"} -(146,1,1) = {" -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -"} -(147,1,1) = {" -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -"} -(148,1,1) = {" -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -"} -(149,1,1) = {" -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -"} -(150,1,1) = {" -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -UM -"} diff --git a/maps/away/scavver/scavver_gantry-2.dmm b/maps/away/scavver/scavver_gantry-2.dmm deleted file mode 100644 index 62e2bf04bfa46..0000000000000 --- a/maps/away/scavver/scavver_gantry-2.dmm +++ /dev/null @@ -1,28634 +0,0 @@ -//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE -"aa" = ( -/obj/effect/shuttle_landmark/scavver_gantry/two, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/catwalk_plated/dark, -/turf/simulated/floor/airless, -/area/space) -"ab" = ( -/obj/item/device/radio/intercom/map_preset/scavver{ - pixel_y = 23 - }, -/obj/structure/handrail, -/turf/simulated/floor/tiled/dark, -/area/scavver/lifepod) -"ac" = ( -/obj/structure/railing/mapped{ - dir = 1; - icon_state = "railing0-1" - }, -/obj/machinery/fabricator/hacked, -/turf/simulated/floor/airless, -/area/scavver/gantry/up1) -"ae" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/airless, -/area/scavver/gantry/up1) -"ai" = ( -/obj/machinery/atmospherics/unary/tank{ - dir = 4 - }, -/obj/structure/railing/mapped, -/turf/simulated/floor/airless, -/area/scavver/harvestpod) -"aq" = ( -/obj/effect/floor_decal/steeldecal/steel_decals_central1, -/turf/simulated/floor/airless, -/area/scavver/gantry/up1) -"as" = ( -/obj/structure/curtain/black, -/turf/simulated/floor/tiled/steel_ridged, -/area/scavver/hab) -"aw" = ( -/obj/machinery/light/spot{ - dir = 1 - }, -/obj/structure/railing/mapped{ - dir = 8 - }, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor{ - initial_gas = newlist() - }, -/area/scavver/lifepod) -"aA" = ( -/obj/structure/cable{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/structure/railing/mapped{ - dir = 8 - }, -/turf/simulated/floor/tiled/techfloor{ - initial_gas = newlist() - }, -/area/scavver/lifepod) -"aB" = ( -/obj/machinery/atmospherics/pipe/manifold/visible/black{ - dir = 1 - }, -/turf/simulated/floor/airless, -/area/scavver/yachtup) -"aI" = ( -/obj/structure/railing/mapped{ - dir = 4; - icon_state = "railing0-1" - }, -/obj/structure/closet/firecloset, -/obj/random/drinkbottle, -/turf/simulated/floor/airless, -/area/scavver/gantry/up2) -"aJ" = ( -/obj/machinery/atmospherics/pipe/simple/visible/red{ - dir = 4 - }, -/obj/machinery/portable_atmospherics/canister/hydrogen, -/obj/structure/railing/mapped{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor{ - initial_gas = newlist() - }, -/area/scavver/lifepod) -"aK" = ( -/obj/structure/railing/mapped{ - dir = 4; - icon_state = "railing0-1" - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/portable_atmospherics/powered/scrubber, -/turf/simulated/floor/airless, -/area/scavver/gantry/up2) -"aM" = ( -/obj/structure/railing/mapped{ - dir = 8; - icon_state = "railing0-1" - }, -/obj/structure/lattice, -/obj/effect/catwalk_plated/dark, -/turf/space, -/area/space) -"aZ" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/turf/simulated/floor/tiled/techfloor{ - initial_gas = newlist() - }, -/area/scavver/lifepod) -"bc" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/airless, -/area/space) -"bl" = ( -/obj/machinery/atmospherics/pipe/manifold4w/visible/fuel, -/obj/effect/catwalk_plated/dark, -/obj/structure/railing/mapped/no_density{ - icon_state = "railing0-0" - }, -/turf/simulated/floor/airless, -/area/scavver/harvestpod) -"bs" = ( -/obj/structure/cable{ - d2 = 2; - icon_state = "0-2" - }, -/turf/simulated/floor/airless, -/area/scavver/yachtup) -"bA" = ( -/obj/effect/wallframe_spawn/reinforced_phoron, -/obj/machinery/door/blast/regular{ - dir = 2; - id_tag = "scavver_window_teg"; - name = "Window Blast Door" - }, -/turf/simulated/floor/reinforced/airless, -/area/scavver/yachtup) -"bE" = ( -/obj/machinery/meter, -/obj/machinery/atmospherics/pipe/simple/visible{ - dir = 4 - }, -/turf/simulated/floor/airless, -/area/scavver/yachtup) -"bI" = ( -/obj/effect/catwalk_plated, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/visible/blue{ - dir = 5 - }, -/turf/simulated/floor/plating, -/area/scavver/hab) -"bU" = ( -/obj/machinery/atmospherics/unary/tank{ - dir = 8 - }, -/obj/structure/railing/mapped, -/obj/machinery/light{ - dir = 4 - }, -/turf/simulated/floor/airless, -/area/scavver/harvestpod) -"bV" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, -/turf/simulated/floor/airless, -/area/scavver/yachtup) -"bX" = ( -/obj/structure/lattice, -/obj/machinery/atmospherics/pipe/simple/heat_exchanging{ - dir = 10 - }, -/turf/space, -/area/space) -"bY" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/effect/catwalk_plated/dark, -/turf/simulated/floor/plating, -/area/scavver/hab) -"cc" = ( -/obj/effect/catwalk_plated/dark, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/airless, -/area/space) -"ce" = ( -/obj/machinery/computer/ship/helm{ - dir = 4 - }, -/obj/effect/floor_decal/corner/grey/border{ - dir = 9 - }, -/obj/machinery/recharger/wallcharger{ - pixel_y = 24 - }, -/turf/simulated/floor/tiled/white/airless, -/area/scavver/escapepod) -"cf" = ( -/obj/effect/paint/red, -/turf/simulated/wall/r_wall, -/area/scavver/harvestpod) -"ch" = ( -/obj/machinery/atmospherics/pipe/simple/visible/blue{ - dir = 10 - }, -/obj/effect/floor_decal/techfloor/orange{ - dir = 4 - }, -/obj/effect/floor_decal/techfloor/orange{ - dir = 8 - }, -/turf/simulated/floor/tiled/techfloor/grid{ - initial_gas = newlist() - }, -/area/scavver/lifepod) -"ck" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 8 - }, -/turf/simulated/floor/tiled/dark, -/area/scavver/hab) -"co" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 8 - }, -/obj/effect/catwalk_plated/dark, -/turf/simulated/floor/plating, -/area/scavver/hab) -"cu" = ( -/obj/machinery/door/airlock/external/bolted, -/obj/machinery/atmospherics/pipe/simple/visible/blue, -/obj/effect/floor_decal/techfloor{ - dir = 4 - }, -/obj/effect/floor_decal/techfloor{ - dir = 8 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/scavver/lifepod) -"cy" = ( -/obj/machinery/firealarm{ - dir = 1; - pixel_y = -24 - }, -/obj/effect/floor_decal/steeldecal/steel_decals_central6, -/turf/simulated/floor/airless, -/area/scavver/gantry/up1) -"cA" = ( -/obj/machinery/atmospherics/pipe/simple/heat_exchanging/junction{ - dir = 8 - }, -/obj/machinery/atmospherics/unary/vent_pump/tank{ - dir = 1; - external_pressure_bound = 0; - external_pressure_bound_default = 0; - icon_state = "map_vent_in"; - id_tag = "scavver_teg_out"; - initialize_directions = 1; - internal_pressure_bound = 4000; - internal_pressure_bound_default = 4000; - pressure_checks = 2; - pressure_checks_default = 2; - pump_direction = 0 - }, -/turf/simulated/floor/reinforced/airless, -/area/scavver/yachtup) -"cC" = ( -/obj/structure/fuel_port, -/obj/effect/paint/red, -/turf/simulated/wall/r_wall, -/area/scavver/lifepod) -"cQ" = ( -/obj/machinery/atmospherics/pipe/cap/visible{ - dir = 4 - }, -/turf/simulated/floor/airless, -/area/scavver/yachtup) -"cS" = ( -/obj/machinery/atmospherics/pipe/simple/visible/blue, -/obj/structure/railing/mapped{ - dir = 4 - }, -/obj/structure/railing/mapped{ - dir = 1 - }, -/turf/simulated/floor/tiled/techfloor{ - initial_gas = newlist() - }, -/area/scavver/lifepod) -"cT" = ( -/obj/machinery/atmospherics/pipe/simple/visible/black{ - dir = 9 - }, -/obj/structure/lattice, -/turf/space, -/area/space) -"dd" = ( -/obj/machinery/atmospherics/binary/pump{ - dir = 1 - }, -/obj/effect/floor_decal/techfloor/orange{ - dir = 1 - }, -/obj/structure/handrail, -/obj/item/device/radio/intercom/map_preset/scavver{ - pixel_y = 23 - }, -/turf/simulated/floor/tiled/techfloor/grid{ - initial_gas = newlist() - }, -/area/scavver/lifepod) -"df" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/turf/simulated/floor/airless, -/area/space) -"dj" = ( -/turf/simulated/floor/tiled/monotile, -/area/scavver/hab) -"dm" = ( -/obj/structure/cable{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/structure/inflatable/door, -/turf/simulated/floor/airless, -/area/scavver/yachtup) -"dw" = ( -/obj/structure/cable{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 8 - }, -/obj/effect/floor_decal/corner/lightgrey, -/turf/simulated/floor/tiled, -/area/scavver/hab) -"dx" = ( -/obj/machinery/power/apc{ - dir = 4; - name = "east bump"; - pixel_x = 24; - req_access = list() - }, -/obj/structure/cable{ - d2 = 8; - icon_state = "0-8" - }, -/obj/effect/floor_decal/corner/grey/border{ - dir = 4 - }, -/obj/machinery/atmospherics/portables_connector, -/obj/machinery/portable_atmospherics/canister/air, -/turf/simulated/floor/tiled/white/airless, -/area/scavver/escapepod) -"dy" = ( -/obj/structure/railing/mapped{ - dir = 8; - icon_state = "railing0-1" - }, -/obj/machinery/portable_atmospherics/canister/carbon_dioxide/engine_setup, -/turf/simulated/floor/airless, -/area/scavver/gantry/up2) -"dA" = ( -/obj/machinery/atmospherics/unary/vent_pump/tank{ - dir = 1; - external_pressure_bound = 0; - external_pressure_bound_default = 0; - icon_state = "map_vent_in"; - id_tag = "scavver_harvest_out"; - initialize_directions = 1; - internal_pressure_bound = 4000; - internal_pressure_bound_default = 4000; - pressure_checks = 2; - pressure_checks_default = 2; - pump_direction = 0 - }, -/obj/structure/handrail{ - dir = 8 - }, -/turf/simulated/floor/airless, -/area/scavver/harvestpod) -"dD" = ( -/obj/structure/cable{ - d2 = 2; - icon_state = "0-2" - }, -/obj/machinery/power/apc{ - dir = 8; - locked = 0; - name = "west bump"; - pixel_x = -24; - req_access = list() - }, -/obj/effect/floor_decal/corner_steel_grid{ - dir = 5 - }, -/obj/structure/cable{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/turf/simulated/floor/airless, -/area/scavver/gantry/up2) -"dO" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/random/trash, -/turf/simulated/floor/airless, -/area/scavver/gantry/up2) -"dR" = ( -/obj/machinery/light/spot{ - dir = 1 - }, -/obj/effect/floor_decal/techfloor/orange{ - dir = 5 - }, -/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{ - dir = 8; - id_tag = "dropodeast_pump_out_external"; - power_rating = 25000 - }, -/obj/structure/railing/mapped{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor/grid{ - initial_gas = newlist() - }, -/area/scavver/lifepod) -"dS" = ( -/obj/machinery/atmospherics/omni/filter, -/turf/simulated/floor/airless, -/area/scavver/yachtup) -"dV" = ( -/obj/machinery/embedded_controller/radio/airlock/airlock_controller{ - frequency = 1380; - id_tag = "scav_hab"; - pixel_y = 26; - tag_airpump = "scav_hab_pump"; - tag_chamber_sensor = "scav_hab_sensor_chamber"; - tag_exterior_door = "scav_hab_exterior_door"; - tag_interior_door = "scav_hab_interior_door" - }, -/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{ - id_tag = "scav_hab_pump"; - power_rating = 25000 - }, -/obj/effect/floor_decal/industrial/warning, -/turf/simulated/floor/plating, -/area/scavver/hab) -"dX" = ( -/obj/machinery/power/terminal{ - dir = 1 - }, -/obj/structure/cable{ - d2 = 8; - icon_state = "0-8" - }, -/obj/structure/cable{ - d2 = 4; - icon_state = "0-4" - }, -/turf/simulated/floor/airless, -/area/scavver/yachtup) -"eb" = ( -/obj/structure/railing/mapped{ - dir = 8; - icon_state = "railing0-1" - }, -/obj/structure/reagent_dispensers/watertank, -/obj/effect/floor_decal/corner_steel_grid{ - dir = 8 - }, -/turf/simulated/floor/airless, -/area/scavver/gantry/up2) -"ef" = ( -/obj/machinery/shipsensors/weak{ - use_power = 0 - }, -/turf/simulated/floor/airless, -/area/scavver/escapepod) -"ek" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/light/spot{ - dir = 8 - }, -/turf/simulated/floor/airless, -/area/scavver/gantry/up2) -"er" = ( -/obj/effect/floor_decal/corner/lightgrey{ - dir = 5 - }, -/obj/structure/bed/chair{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/scavver/hab) -"ex" = ( -/obj/structure/railing/mapped{ - dir = 8; - icon_state = "railing0-1" - }, -/obj/structure/table/rack, -/obj/item/cell/device/high, -/obj/item/cell/device/high, -/obj/item/tank/oxygen_emergency_double, -/obj/item/tank/oxygen_emergency_double, -/obj/random/coin, -/obj/effect/floor_decal/corner_steel_grid{ - dir = 1 - }, -/turf/simulated/floor/airless, -/area/scavver/gantry/up2) -"eH" = ( -/obj/machinery/atmospherics/pipe/manifold/visible/red{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor{ - initial_gas = newlist() - }, -/area/scavver/lifepod) -"eN" = ( -/turf/space, -/area/space) -"fq" = ( -/obj/machinery/atmospherics/portables_connector{ - dir = 1 - }, -/obj/machinery/portable_atmospherics/canister/air, -/obj/machinery/firealarm{ - dir = 1; - pixel_y = -24 - }, -/obj/structure/cable{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/turf/simulated/floor/tiled/steel_grid, -/area/scavver/hab) -"fr" = ( -/obj/effect/paint/black, -/turf/simulated/wall, -/area/scavver/gantry/up1) -"fw" = ( -/obj/structure/handrail{ - dir = 4 - }, -/obj/structure/railing/mapped{ - dir = 4 - }, -/turf/simulated/floor/airless, -/area/scavver/lifepod) -"fD" = ( -/obj/structure/railing/mapped{ - dir = 1; - icon_state = "railing0-1" - }, -/obj/structure/table/steel_reinforced, -/obj/structure/cable{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/machinery/cell_charger, -/obj/effect/floor_decal/corner_steel_grid{ - dir = 1 - }, -/turf/simulated/floor/airless, -/area/scavver/gantry/up2) -"fE" = ( -/obj/machinery/atmospherics/pipe/simple/heat_exchanging{ - dir = 5 - }, -/obj/machinery/atmospherics/unary/outlet_injector{ - dir = 8; - frequency = 1441; - icon_state = "map_injector"; - id = "scavver_teg_in_fuel"; - use_power = 1 - }, -/turf/simulated/floor/reinforced/airless, -/area/scavver/yachtup) -"fF" = ( -/obj/machinery/atmospherics/pipe/simple/visible/red{ - dir = 4 - }, -/obj/effect/paint/palegreengray, -/obj/effect/wallframe_spawn/reinforced, -/turf/simulated/floor/plating, -/area/scavver/lifepod) -"fH" = ( -/obj/machinery/meter, -/obj/machinery/atmospherics/pipe/manifold/visible/black{ - dir = 8 - }, -/turf/simulated/floor/airless, -/area/scavver/yachtup) -"fL" = ( -/obj/effect/floor_decal/techfloor{ - dir = 8 - }, -/obj/effect/floor_decal/corner/brown{ - dir = 4 - }, -/obj/machinery/computer/shuttle_control/lift/gantry, -/turf/simulated/floor/tiled/steel_grid{ - initial_gas = newlist() - }, -/area/scavver/gantry/lift) -"fN" = ( -/obj/machinery/portable_atmospherics/hydroponics, -/obj/machinery/atmospherics/portables_connector{ - dir = 1 - }, -/obj/machinery/light/spot, -/turf/simulated/floor/airless, -/area/scavver/yachtup) -"fQ" = ( -/obj/structure/railing/mapped{ - dir = 8; - icon_state = "railing0-1" - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 4; - icon_state = "warning" - }, -/obj/machinery/light/spot, -/turf/simulated/floor/airless, -/area/scavver/gantry/up1) -"fS" = ( -/obj/random/tool, -/obj/effect/floor_decal/steeldecal/steel_decals_central4{ - dir = 4 - }, -/turf/simulated/floor/airless, -/area/scavver/gantry/up2) -"fV" = ( -/obj/machinery/power/solar, -/obj/structure/cable, -/obj/structure/cable{ - d2 = 2; - icon_state = "0-2" - }, -/obj/machinery/light/spot{ - dir = 4 - }, -/obj/structure/railing/mapped{ - dir = 8 - }, -/turf/simulated/floor/airless, -/area/scavver/lifepod) -"fX" = ( -/obj/machinery/meter, -/obj/machinery/atmospherics/pipe/manifold4w/visible/fuel, -/obj/effect/catwalk_plated/dark, -/turf/simulated/floor/airless, -/area/scavver/harvestpod) -"gc" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/fuel{ - dir = 4 - }, -/obj/structure/bed/chair/shuttle{ - dir = 1 - }, -/obj/item/device/radio/intercom/map_preset/scavver{ - default_hailing = 1; - dir = 8; - pixel_x = 20 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/scavver/harvestpod) -"gf" = ( -/obj/machinery/atmospherics/pipe/simple/visible/black, -/obj/effect/wallframe_spawn/reinforced_phoron, -/obj/machinery/door/blast/regular{ - dir = 2; - id_tag = "scavver_window_teg"; - name = "Window Blast Door" - }, -/turf/simulated/floor/reinforced/airless, -/area/scavver/yachtup) -"gk" = ( -/obj/effect/floor_decal/corner/lightgrey/mono, -/obj/machinery/suit_storage_unit/engineering/salvage/gantry, -/turf/simulated/floor/tiled/monotile, -/area/scavver/hab) -"gm" = ( -/obj/effect/floor_decal/corner/lightgrey{ - dir = 6 - }, -/obj/machinery/light/small{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled, -/area/scavver/hab) -"gp" = ( -/obj/structure/railing/mapped{ - dir = 1; - icon_state = "railing0-1" - }, -/obj/structure/reagent_dispensers/fueltank, -/turf/simulated/floor/airless, -/area/scavver/gantry/up1) -"gq" = ( -/obj/structure/railing/mapped{ - dir = 8; - icon_state = "railing0-1" - }, -/obj/effect/floor_decal/corner_steel_grid{ - dir = 1 - }, -/turf/simulated/floor/airless, -/area/scavver/gantry/up2) -"gr" = ( -/obj/structure/cable, -/obj/machinery/power/apc{ - locked = 0; - name = "south bump"; - pixel_y = -28; - req_access = list() - }, -/obj/effect/floor_decal/corner/lightgrey/mono, -/obj/machinery/suit_storage_unit/engineering/salvage/gantry, -/turf/simulated/floor/tiled/monotile, -/area/scavver/hab) -"gx" = ( -/obj/machinery/atmospherics/valve, -/turf/simulated/floor/airless, -/area/scavver/yachtup) -"gL" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/portable_atmospherics/canister/oxygen, -/turf/simulated/floor/airless, -/area/scavver/yachtup) -"gM" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/structure/inflatable/door, -/turf/simulated/floor/airless, -/area/scavver/yachtup) -"gN" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/universal{ - dir = 4 - }, -/obj/machinery/door/airlock/hatch, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/steel_ridged, -/area/scavver/hab) -"gU" = ( -/obj/structure/flora/pottedplant/mysterious, -/turf/simulated/floor/tiled, -/area/scavver/hab) -"hb" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/airless, -/area/scavver/yachtup) -"hp" = ( -/obj/structure/cable{ - d2 = 8; - icon_state = "0-8" - }, -/obj/effect/floor_decal/industrial/hatch/yellow, -/obj/machinery/power/generator{ - anchored = 1 - }, -/turf/simulated/floor/airless, -/area/scavver/yachtup) -"ht" = ( -/obj/structure/table/rack, -/obj/item/gun/energy/plasmastun, -/turf/simulated/floor/tiled/dark/monotile, -/area/scavver/hab) -"hv" = ( -/obj/effect/wallframe_spawn/reinforced/no_grille, -/turf/simulated/floor/airless, -/area/scavver/yachtup) -"hw" = ( -/obj/structure/railing/mapped{ - dir = 8; - icon_state = "railing0-1" - }, -/obj/effect/catwalk_plated/dark, -/obj/structure/lattice, -/turf/space, -/area/space) -"hB" = ( -/obj/machinery/alarm{ - dir = 1; - pixel_y = -28; - req_access = list(list("ACCESS_ENGINE_EQUIP","ACCESS_ATMOS")) - }, -/obj/structure/table/reinforced, -/obj/machinery/recharger, -/turf/simulated/floor/tiled, -/area/scavver/hab) -"hD" = ( -/obj/structure/lattice, -/obj/effect/catwalk_plated/dark, -/obj/structure/railing/mapped{ - dir = 4; - icon_state = "railing0-1" - }, -/obj/structure/railing/mapped, -/turf/space, -/area/space) -"hG" = ( -/obj/machinery/atmospherics/pipe/simple/visible/blue{ - dir = 10 - }, -/obj/effect/floor_decal/techfloor/orange{ - dir = 1 - }, -/turf/simulated/floor/tiled/techfloor/grid{ - initial_gas = newlist() - }, -/area/scavver/lifepod) -"hH" = ( -/obj/structure/lattice, -/obj/effect/catwalk_plated/dark, -/obj/structure/railing/mapped{ - dir = 8; - icon_state = "railing0-1" - }, -/turf/space, -/area/space) -"hP" = ( -/obj/machinery/portable_atmospherics/canister/nitrogen/engine_setup, -/obj/machinery/atmospherics/portables_connector{ - dir = 8 - }, -/turf/simulated/floor/airless, -/area/scavver/yachtup) -"hX" = ( -/obj/structure/lattice, -/turf/space, -/area/space) -"hY" = ( -/obj/machinery/atmospherics/pipe/simple/heat_exchanging{ - dir = 9 - }, -/obj/effect/decal/cleanable/liquid_fuel, -/turf/simulated/floor/reinforced/airless, -/area/scavver/yachtup) -"ih" = ( -/obj/effect/floor_decal/corner/lightgrey{ - dir = 5 - }, -/obj/structure/table/standard, -/obj/random/snack, -/turf/simulated/floor/tiled, -/area/scavver/hab) -"ij" = ( -/obj/effect/floor_decal/techfloor/orange{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor/grid{ - initial_gas = newlist() - }, -/area/scavver/lifepod) -"in" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/catwalk_plated/dark, -/obj/effect/shuttle_landmark/scavver_gantry/three, -/obj/machinery/atmospherics/pipe/simple/visible/fuel{ - dir = 4 - }, -/turf/simulated/floor/airless, -/area/scavver/gantry/up2) -"io" = ( -/obj/machinery/atmospherics/omni/filter, -/turf/simulated/floor/tiled/dark/airless, -/area/scavver/harvestpod) -"iq" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/bed/chair/shuttle/white{ - dir = 8 - }, -/turf/simulated/floor/tiled/white/airless, -/area/scavver/escapepod) -"it" = ( -/obj/effect/shuttle_landmark/scavver_gantry/generic/five, -/turf/space, -/area/space) -"iA" = ( -/obj/machinery/atmospherics/unary/vent_pump/high_volume/vulcan{ - dir = 1; - id_tag = "scavpod_shuttle_pump_out_internal" - }, -/obj/effect/floor_decal/corner/grey/half, -/obj/structure/closet/crate/plastic, -/obj/random/tool, -/obj/random/tool, -/obj/random/tech_supply, -/obj/random/tech_supply, -/obj/random/tech_supply, -/obj/item/tank/hydrogen, -/obj/random/contraband, -/obj/structure/cable{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/turf/simulated/floor/tiled/white/airless, -/area/scavver/escapepod) -"iI" = ( -/obj/structure/railing/mapped{ - dir = 4; - icon_state = "railing0-1" - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/catwalk_plated/dark, -/turf/simulated/floor/airless, -/area/space) -"iT" = ( -/obj/effect/shuttle_landmark/scavver_gantry/generic/desperado, -/turf/space, -/area/space) -"iU" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/unary/vent_scrubber/vulcan{ - id_tag = "scavpod_shuttle_pump_out_scrubber"; - power_rating = 15000; - scrubbing = "siphon" - }, -/obj/effect/floor_decal/corner/grey/half, -/turf/simulated/floor/tiled/white/airless, -/area/scavver/escapepod) -"iW" = ( -/obj/machinery/atmospherics/omni/filter{ - tag_north = 3; - tag_south = 1; - tag_west = 2 - }, -/obj/effect/floor_decal/techfloor/orange, -/turf/simulated/floor/tiled/techfloor/grid{ - initial_gas = newlist() - }, -/area/scavver/lifepod) -"iY" = ( -/obj/machinery/power/smes/buildable/preset/scavver/smes{ - charge = 10000 - }, -/obj/structure/cable{ - d2 = 4; - icon_state = "0-4" - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/scavver/harvestpod) -"iZ" = ( -/obj/machinery/atmospherics/unary/outlet_injector{ - dir = 1; - frequency = 1441; - icon_state = "map_injector"; - id = "scavver_harvest_in" - }, -/obj/structure/handrail{ - dir = 8 - }, -/turf/simulated/floor/airless, -/area/scavver/harvestpod) -"jb" = ( -/obj/machinery/atmospherics/pipe/simple/heat_exchanging{ - dir = 10 - }, -/obj/structure/lattice, -/turf/space, -/area/space) -"jd" = ( -/obj/structure/railing/mapped{ - dir = 8; - icon_state = "railing0-1" - }, -/obj/machinery/space_heater, -/obj/effect/floor_decal/corner_steel_grid{ - dir = 1 - }, -/turf/simulated/floor/airless, -/area/scavver/gantry/up2) -"jj" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/door/airlock/hatch, -/obj/effect/paint/sun, -/turf/simulated/floor/tiled/steel_ridged, -/area/scavver/hab) -"jq" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/valve, -/obj/machinery/mech_recharger, -/obj/effect/floor_decal/corner/grey/diagonal{ - dir = 4 - }, -/turf/simulated/floor/tiled/white/monotile{ - initial_gas = newlist() - }, -/area/scavver/escapepod) -"jr" = ( -/obj/structure/cable{ - d2 = 4; - icon_state = "0-4" - }, -/obj/structure/cable{ - d2 = 8; - icon_state = "0-8" - }, -/obj/effect/floor_decal/industrial/hatch/orange, -/obj/machinery/power/solar_control/autostart{ - dir = 1 - }, -/turf/simulated/floor/tiled/techfloor{ - initial_gas = newlist() - }, -/area/scavver/lifepod) -"jt" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/fuel{ - dir = 6 - }, -/obj/structure/cable{ - d2 = 2; - icon_state = "0-2" - }, -/obj/machinery/power/terminal{ - dir = 1 - }, -/obj/machinery/power/port_gen/pacman{ - anchored = 1; - sheets = 25 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/scavver/harvestpod) -"ju" = ( -/obj/machinery/atmospherics/pipe/manifold4w/visible, -/obj/machinery/meter, -/turf/simulated/floor/airless, -/area/scavver/yachtup) -"jw" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/catwalk_plated, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/plating, -/area/scavver/hab) -"jy" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/cable{ - icon_state = "2-8" - }, -/turf/simulated/floor/airless, -/area/scavver/gantry/up1) -"jz" = ( -/obj/machinery/atmospherics/pipe/simple/heat_exchanging{ - dir = 4 - }, -/turf/simulated/floor/reinforced/airless, -/area/scavver/yachtup) -"jA" = ( -/obj/machinery/atmospherics/pipe/simple/heat_exchanging{ - dir = 5 - }, -/obj/structure/lattice, -/turf/space, -/area/space) -"jF" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/machinery/portable_atmospherics/canister/air, -/obj/machinery/atmospherics/portables_connector{ - dir = 4 - }, -/obj/structure/railing/mapped{ - dir = 4 - }, -/obj/effect/floor_decal/industrial/hatch/blue, -/turf/simulated/floor/tiled/techfloor{ - initial_gas = newlist() - }, -/area/scavver/lifepod) -"jG" = ( -/obj/structure/railing/mapped{ - dir = 8; - icon_state = "railing0-1" - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 4; - icon_state = "warning" - }, -/turf/simulated/floor/airless, -/area/scavver/gantry/up1) -"jJ" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/door/airlock/external/bolted{ - id_tag = "spiritus_door" - }, -/obj/machinery/button/alternate/door/bolts{ - id_tag = "spiritus_door"; - name = "Spiritus Exterior Bolts"; - pixel_y = 24 - }, -/obj/machinery/atmospherics/binary/pump/high_power{ - dir = 8 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/scavver/harvestpod) -"jL" = ( -/obj/machinery/atmospherics/pipe/simple/visible/black{ - dir = 5 - }, -/turf/simulated/floor/airless, -/area/scavver/yachtup) -"jO" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/portables_connector{ - dir = 8 - }, -/obj/machinery/portable_atmospherics/canister/empty, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/airless, -/area/scavver/yachtup) -"jS" = ( -/obj/machinery/atmospherics/portables_connector{ - dir = 1 - }, -/obj/machinery/portable_atmospherics/canister/hydrogen, -/turf/simulated/floor/airless, -/area/scavver/yachtup) -"ka" = ( -/obj/structure/cable{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/turf/simulated/floor/tiled/techfloor{ - initial_gas = newlist() - }, -/area/scavver/lifepod) -"kb" = ( -/obj/effect/paint/red, -/turf/simulated/wall/r_wall, -/area/scavver/lifepod) -"kf" = ( -/obj/structure/largecrate/animal/cat/bones, -/obj/machinery/alarm{ - dir = 4; - locked = 0; - pixel_x = -25; - req_access = list() - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/scavver/hab) -"ki" = ( -/obj/machinery/vending/dinnerware{ - dir = 1 - }, -/turf/simulated/floor/wood/yew, -/area/scavver/hab) -"ko" = ( -/obj/machinery/firealarm{ - dir = 1; - pixel_y = -24 - }, -/obj/machinery/power/terminal{ - dir = 1 - }, -/obj/structure/cable{ - d2 = 4; - icon_state = "0-4" - }, -/obj/structure/cable{ - d2 = 8; - icon_state = "0-8" - }, -/turf/simulated/floor/airless, -/area/scavver/yachtup) -"kq" = ( -/obj/item/stack/material/steel/fifty, -/obj/item/stack/material/steel/fifty, -/obj/item/stack/material/steel/fifty, -/obj/item/stack/material/glass/fifty, -/obj/item/stack/material/glass/fifty, -/obj/item/stack/material/plasteel/fifty, -/obj/structure/closet/crate/plastic, -/obj/structure/railing/mapped, -/turf/simulated/floor/tiled/techfloor{ - initial_gas = newlist() - }, -/area/scavver/lifepod) -"ks" = ( -/obj/structure/table/steel_reinforced, -/obj/item/device/radio/intercom/map_preset/scavver{ - default_hailing = 1; - dir = 4; - pixel_x = -21 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/scavver/lifepod) -"kw" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/airless, -/area/scavver/gantry/up2) -"kC" = ( -/obj/structure/railing/mapped{ - dir = 4 - }, -/obj/machinery/light/spot{ - dir = 1 - }, -/turf/simulated/floor/tiled/techfloor{ - initial_gas = newlist() - }, -/area/scavver/lifepod) -"kD" = ( -/obj/machinery/button/blast_door{ - id_tag = "scavver_window_teg"; - name = "Burn Chamber Window Blast Doors"; - pixel_y = -21 - }, -/obj/machinery/atmospherics/valve{ - dir = 4 - }, -/turf/simulated/floor/airless, -/area/scavver/yachtup) -"kJ" = ( -/obj/machinery/atmospherics/pipe/manifold4w/visible/red, -/obj/structure/railing/mapped{ - dir = 8 - }, -/obj/structure/railing/mapped{ - dir = 1 - }, -/obj/structure/table/rack, -/turf/simulated/floor/tiled/techfloor{ - initial_gas = newlist() - }, -/area/scavver/lifepod) -"kP" = ( -/obj/effect/wallframe_spawn/reinforced/no_grille, -/obj/machinery/atmospherics/pipe/simple/visible/black{ - dir = 4 - }, -/turf/simulated/floor/airless, -/area/scavver/yachtup) -"la" = ( -/obj/structure/cable{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/turf/simulated/floor/airless, -/area/scavver/yachtup) -"ls" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/fuel{ - dir = 8 - }, -/obj/effect/paint/red, -/turf/simulated/wall/r_wall, -/area/scavver/lifepod) -"lt" = ( -/obj/structure/railing/mapped{ - dir = 4; - icon_state = "railing0-1" - }, -/obj/structure/table/rack, -/obj/random/toolbox, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/airless, -/area/scavver/gantry/up2) -"lw" = ( -/obj/structure/cable{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/turf/simulated/floor/airless, -/area/scavver/gantry/up1) -"lB" = ( -/obj/machinery/computer/shuttle_control/explore/scavver_gantry/two, -/obj/effect/floor_decal/corner/grey/border{ - dir = 5 - }, -/obj/machinery/recharger/wallcharger{ - pixel_y = 24 - }, -/turf/simulated/floor/tiled/white/airless, -/area/scavver/escapepod) -"lG" = ( -/obj/structure/railing/mapped, -/obj/structure/railing/mapped{ - dir = 4 - }, -/obj/structure/closet/crate/plastic, -/turf/simulated/floor/tiled/techfloor{ - initial_gas = newlist() - }, -/area/scavver/lifepod) -"lH" = ( -/obj/structure/railing/mapped, -/obj/structure/railing/mapped{ - dir = 8 - }, -/obj/item/mop, -/turf/simulated/floor/tiled/techfloor{ - initial_gas = newlist() - }, -/area/scavver/lifepod) -"lP" = ( -/obj/machinery/atmospherics/unary/tank{ - dir = 4 - }, -/turf/simulated/floor/airless, -/area/scavver/harvestpod) -"lU" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/universal, -/turf/simulated/floor/airless, -/area/scavver/yachtup) -"lW" = ( -/obj/machinery/mech_recharger, -/obj/structure/fireaxecabinet{ - pixel_x = -32 - }, -/obj/effect/floor_decal/corner/lightgrey/mono, -/mob/living/exosuit/premade/salvage_gantry, -/turf/simulated/floor/tiled/monotile, -/area/scavver/hab) -"ma" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/cable{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/turf/simulated/floor/airless, -/area/scavver/yachtup) -"me" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/cable{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/turf/simulated/floor/airless, -/area/scavver/yachtup) -"mh" = ( -/obj/structure/closet/crate/plastic, -/obj/item/storage/ore, -/obj/item/pickaxe/drill, -/obj/item/device/scanner/mining, -/obj/item/tank/hydrogen, -/obj/structure/railing/mapped, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 1 - }, -/turf/simulated/floor/tiled/techfloor{ - initial_gas = newlist() - }, -/area/scavver/lifepod) -"mi" = ( -/obj/machinery/power/terminal{ - dir = 4 - }, -/obj/machinery/power/port_gen/pacman{ - anchored = 1; - sheets = 25 - }, -/obj/structure/cable{ - d2 = 8; - icon_state = "0-8" - }, -/obj/effect/floor_decal/industrial/hatch/orange, -/turf/simulated/floor/tiled/techfloor{ - initial_gas = newlist() - }, -/area/scavver/lifepod) -"ml" = ( -/obj/structure/bed, -/obj/item/bedsheet/rd, -/obj/effect/floor_decal/corner/lightgrey/mono, -/obj/effect/submap_landmark/spawnpoint/scavver_engineer, -/turf/simulated/floor/tiled/monotile, -/area/scavver/hab) -"mq" = ( -/obj/random/trash, -/turf/simulated/floor/airless, -/area/scavver/gantry/up1) -"mu" = ( -/obj/machinery/atmospherics/pipe/simple/visible/black{ - dir = 4 - }, -/turf/simulated/floor/airless, -/area/scavver/yachtup) -"mx" = ( -/obj/machinery/atmospherics/pipe/simple/visible/blue{ - dir = 9 - }, -/obj/machinery/door/airlock/external{ - frequency = 1380; - id_tag = "dropodeast_interior_door"; - locked = 1 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/scavver/lifepod) -"mB" = ( -/obj/machinery/atmospherics/pipe/simple/visible/fuel{ - dir = 9 - }, -/obj/effect/floor_decal/techfloor/orange, -/turf/simulated/floor/tiled/techfloor/grid{ - initial_gas = newlist() - }, -/area/scavver/lifepod) -"mC" = ( -/obj/effect/floor_decal/techfloor/orange{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/visible/red{ - dir = 6 - }, -/turf/simulated/floor/tiled/techfloor/grid{ - initial_gas = newlist() - }, -/area/scavver/lifepod) -"mM" = ( -/obj/effect/floor_decal/techfloor/orange{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/manifold/visible/red, -/turf/simulated/floor/tiled/techfloor/grid{ - initial_gas = newlist() - }, -/area/scavver/lifepod) -"mN" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/scavver/hab) -"mQ" = ( -/obj/structure/bed, -/obj/item/bedsheet/clown, -/obj/effect/floor_decal/corner/lightgrey/mono, -/obj/effect/submap_landmark/spawnpoint/scavver_doctor, -/turf/simulated/floor/tiled/monotile, -/area/scavver/hab) -"mS" = ( -/turf/simulated/floor/wood/yew, -/area/scavver/hab) -"mV" = ( -/obj/machinery/light/spot, -/obj/machinery/atmospherics/portables_connector{ - dir = 4 - }, -/obj/machinery/portable_atmospherics/canister/oxygen, -/turf/simulated/floor/airless, -/area/scavver/yachtup) -"mX" = ( -/obj/structure/railing/mapped{ - dir = 4; - icon_state = "railing0-1" - }, -/obj/effect/floor_decal/corner_steel_grid, -/turf/simulated/floor/airless, -/area/scavver/gantry/up2) -"mZ" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/effect/floor_decal/corner/grey/border, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 1 - }, -/turf/simulated/floor/tiled/white/airless, -/area/scavver/escapepod) -"nc" = ( -/obj/item/device/radio/intercom/map_preset/scavver{ - dir = 1; - pixel_y = -28 - }, -/obj/machinery/mech_recharger, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/floor/tiled/dark/monotile, -/area/scavver/lifepod) -"nd" = ( -/obj/machinery/power/breakerbox, -/turf/simulated/floor/airless, -/area/scavver/yachtup) -"ne" = ( -/obj/effect/floor_decal/techfloor/orange{ - dir = 9 - }, -/obj/machinery/atmospherics/valve{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor/grid{ - initial_gas = newlist() - }, -/area/scavver/lifepod) -"nf" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/machinery/meter, -/obj/machinery/atmospherics/pipe/manifold/hidden/fuel, -/turf/simulated/floor/tiled/dark/airless, -/area/scavver/harvestpod) -"nj" = ( -/obj/effect/floor_decal/techfloor/orange, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor/grid{ - initial_gas = newlist() - }, -/area/scavver/lifepod) -"nl" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/tiled/freezer, -/area/scavver/hab) -"nw" = ( -/obj/machinery/mining/drill, -/turf/simulated/floor/tiled/techfloor{ - initial_gas = newlist() - }, -/area/scavver/lifepod) -"nE" = ( -/obj/machinery/air_sensor{ - id_tag = "scavver_teg_sensor" - }, -/obj/machinery/atmospherics/pipe/simple/heat_exchanging{ - dir = 4 - }, -/turf/simulated/floor/reinforced/airless, -/area/scavver/yachtup) -"nH" = ( -/obj/effect/wallframe_spawn/reinforced/titanium, -/obj/effect/paint/silver, -/turf/simulated/floor/airless, -/area/scavver/harvestpod) -"nI" = ( -/obj/effect/floor_decal/techfloor{ - dir = 4 - }, -/obj/effect/floor_decal/corner/brown{ - dir = 1 - }, -/turf/simulated/floor/tiled/steel_grid{ - initial_gas = newlist() - }, -/area/scavver/gantry/lift) -"nJ" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/turf/simulated/floor/airless, -/area/scavver/yachtup) -"nM" = ( -/obj/structure/handrail{ - dir = 1 - }, -/obj/machinery/atmospherics/binary/pump/high_power{ - dir = 4 - }, -/turf/simulated/floor/airless, -/area/scavver/harvestpod) -"nN" = ( -/obj/effect/floor_decal/corner_steel_grid{ - dir = 9 - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/airless, -/area/scavver/gantry/up2) -"nS" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/railing/mapped{ - dir = 1 - }, -/turf/simulated/floor/tiled/techfloor{ - initial_gas = newlist() - }, -/area/scavver/lifepod) -"nZ" = ( -/obj/effect/floor_decal/steeldecal/steel_decals_central4{ - dir = 8 - }, -/turf/simulated/floor/airless, -/area/scavver/gantry/up2) -"ok" = ( -/obj/effect/decal/cleanable/liquid_fuel, -/obj/machinery/atmospherics/pipe/simple/heat_exchanging{ - dir = 10 - }, -/turf/simulated/floor/reinforced/airless, -/area/scavver/yachtup) -"om" = ( -/obj/machinery/atmospherics/pipe/simple/visible/black{ - dir = 6 - }, -/turf/simulated/floor/airless, -/area/scavver/yachtup) -"oo" = ( -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 8; - icon_state = "warningcorner" - }, -/obj/effect/floor_decal/corner_steel_grid{ - dir = 5 - }, -/turf/simulated/floor/airless, -/area/scavver/gantry/up1) -"oq" = ( -/obj/effect/floor_decal/techfloor/orange{ - dir = 1 - }, -/obj/machinery/atmospherics/valve{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor/grid{ - initial_gas = newlist() - }, -/area/scavver/lifepod) -"os" = ( -/obj/structure/railing/mapped, -/obj/effect/floor_decal/corner_steel_grid, -/obj/structure/closet/crate/solar, -/turf/simulated/floor/airless, -/area/scavver/gantry/up1) -"ov" = ( -/obj/item/device/radio/intercom/map_preset/scavver{ - dir = 1; - pixel_y = -28 - }, -/obj/machinery/jukebox/old, -/turf/simulated/floor/tiled, -/area/scavver/hab) -"ow" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 1 - }, -/turf/simulated/floor/airless, -/area/scavver/yachtup) -"oB" = ( -/obj/structure/railing/mapped{ - dir = 1 - }, -/turf/simulated/floor/tiled/techfloor{ - initial_gas = newlist() - }, -/area/scavver/lifepod) -"oE" = ( -/obj/effect/floor_decal/techfloor/orange{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/visible/red{ - dir = 10 - }, -/turf/simulated/floor/tiled/techfloor/grid{ - initial_gas = newlist() - }, -/area/scavver/lifepod) -"oH" = ( -/obj/structure/cable{ - d2 = 4; - icon_state = "0-4" - }, -/obj/machinery/power/smes/buildable/preset/scavver/smes{ - charge = 100000 - }, -/turf/simulated/floor/tiled/steel_grid, -/area/scavver/hab) -"oI" = ( -/obj/machinery/door/airlock/external{ - frequency = 1380; - id_tag = "scav_hab_interior_door" - }, -/obj/machinery/access_button/airlock_interior{ - frequency = 1380; - master_tag = "scav_hab"; - pixel_y = 21 - }, -/obj/effect/paint/sun, -/turf/simulated/floor/tiled/steel_ridged, -/area/scavver/hab) -"oJ" = ( -/obj/machinery/atmospherics/pipe/manifold/visible/black{ - dir = 8 - }, -/obj/machinery/meter, -/turf/simulated/floor/airless, -/area/scavver/yachtup) -"oN" = ( -/turf/simulated/floor/airless, -/area/scavver/yachtup) -"oO" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/catwalk_plated/dark, -/obj/machinery/atmospherics/pipe/simple/visible/fuel{ - dir = 4 - }, -/turf/simulated/floor/airless, -/area/scavver/gantry/up2) -"pa" = ( -/obj/machinery/atmospherics/pipe/manifold4w/visible/red, -/turf/simulated/floor/tiled/techfloor{ - initial_gas = newlist() - }, -/area/scavver/lifepod) -"pc" = ( -/obj/machinery/alarm{ - dir = 4; - locked = 0; - pixel_x = -25; - req_access = list() - }, -/obj/effect/floor_decal/corner/lightgrey/mono, -/obj/machinery/portable_atmospherics/canister/oxygen, -/turf/simulated/floor/tiled/monotile, -/area/scavver/hab) -"pd" = ( -/obj/machinery/atmospherics/unary/engine, -/turf/simulated/floor/reinforced/airless, -/area/scavver/lifepod) -"pl" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/visible{ - dir = 4 - }, -/obj/machinery/door/airlock/external/bolted_open{ - frequency = 1431; - id_tag = "scavpod_shuttle_outer" - }, -/turf/simulated/floor/tiled/white/monotile{ - initial_gas = newlist() - }, -/area/scavver/escapepod) -"pn" = ( -/obj/effect/floor_decal/techfloor/orange{ - dir = 8 - }, -/obj/machinery/atmospherics/binary/pump{ - dir = 8 - }, -/turf/simulated/floor/tiled/techfloor/grid{ - initial_gas = newlist() - }, -/area/scavver/lifepod) -"pq" = ( -/obj/machinery/computer/ship/engines{ - dir = 8 - }, -/obj/effect/floor_decal/techfloor/orange{ - dir = 5 - }, -/turf/simulated/floor/tiled/techfloor/grid{ - initial_gas = newlist() - }, -/area/scavver/lifepod) -"pr" = ( -/obj/machinery/atmospherics/valve, -/obj/structure/railing/mapped, -/turf/simulated/floor/tiled/techfloor{ - initial_gas = newlist() - }, -/area/scavver/lifepod) -"ps" = ( -/obj/structure/railing/mapped{ - dir = 4 - }, -/obj/structure/table/rack, -/turf/simulated/floor/tiled/techfloor{ - initial_gas = newlist() - }, -/area/scavver/lifepod) -"pu" = ( -/turf/simulated/wall/ocp_wall, -/area/scavver/yachtup) -"pw" = ( -/obj/effect/wallframe_spawn/reinforced/hull, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/paint/palegreengray, -/turf/simulated/floor/plating, -/area/scavver/lifepod) -"pK" = ( -/obj/structure/bed/chair/shuttle/black{ - dir = 8 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/scavver/lifepod) -"pO" = ( -/obj/structure/closet/crate/hydroponics/prespawned, -/turf/simulated/floor/airless, -/area/scavver/yachtup) -"pQ" = ( -/obj/machinery/atmospherics/pipe/simple/visible/black{ - dir = 10 - }, -/turf/simulated/floor/airless, -/area/scavver/yachtup) -"pV" = ( -/obj/structure/lattice, -/obj/structure/girder/displaced, -/turf/space, -/area/scavver/yachtup) -"qf" = ( -/obj/effect/catwalk_plated/dark, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/airless, -/area/scavver/gantry/up1) -"qh" = ( -/obj/structure/handrail{ - dir = 4 - }, -/obj/machinery/recharger/wallcharger{ - dir = 4; - pixel_x = -24; - pixel_y = -3 - }, -/turf/simulated/floor/tiled/dark, -/area/scavver/lifepod) -"qi" = ( -/obj/structure/sign/warning/docking_area{ - dir = 8; - pixel_x = 32 - }, -/turf/space, -/area/space) -"qj" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/cable{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/machinery/light/spot, -/turf/simulated/floor/tiled/techfloor{ - initial_gas = newlist() - }, -/area/scavver/lifepod) -"qk" = ( -/obj/machinery/computer/air_control{ - dir = 1; - input_tag = "scavver_teg_in"; - output_tag = "scavver_teg_out"; - sensor_name = "Yacht Burn Chamber"; - sensor_tag = "scavver_teg_sensor" - }, -/turf/simulated/floor/airless, -/area/scavver/yachtup) -"qn" = ( -/obj/effect/floor_decal/techfloor/orange{ - dir = 6 - }, -/obj/structure/railing/mapped{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor/grid{ - initial_gas = newlist() - }, -/area/scavver/lifepod) -"qt" = ( -/obj/effect/wallframe_spawn/reinforced/titanium, -/obj/effect/paint/silver, -/obj/effect/paint_stripe/white, -/turf/simulated/floor/plating, -/area/scavver/escapepod) -"qv" = ( -/obj/structure/lattice, -/obj/effect/catwalk_plated/dark, -/obj/structure/railing/mapped{ - dir = 4; - icon_state = "railing0-1" - }, -/obj/structure/railing/mapped{ - dir = 1; - icon_state = "railing0-1" - }, -/turf/space, -/area/space) -"qC" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/portable_atmospherics/canister/nitrogen/engine_setup, -/turf/simulated/floor/airless, -/area/scavver/yachtup) -"qD" = ( -/obj/structure/lattice, -/obj/effect/catwalk_plated/dark, -/obj/structure/railing/mapped{ - dir = 8; - icon_state = "railing0-1" - }, -/obj/random/loot, -/turf/space, -/area/space) -"qF" = ( -/obj/structure/cable{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/machinery/computer/ship/sensors/spacer{ - dir = 4 - }, -/obj/item/device/radio/intercom/map_preset/scavver{ - default_hailing = 1; - dir = 4; - pixel_x = -21 - }, -/obj/effect/floor_decal/corner/grey/border{ - dir = 8 - }, -/turf/simulated/floor/tiled/white/airless, -/area/scavver/escapepod) -"qK" = ( -/obj/machinery/atmospherics/omni/filter{ - tag_east = 2; - tag_north = 4; - tag_south = 1 - }, -/obj/effect/floor_decal/techfloor/orange, -/turf/simulated/floor/tiled/techfloor/grid{ - initial_gas = newlist() - }, -/area/scavver/lifepod) -"qN" = ( -/obj/structure/fireaxecabinet{ - pixel_x = -32 - }, -/obj/effect/floor_decal/corner/lightgrey/mono, -/obj/machinery/light{ - dir = 1 - }, -/obj/machinery/suit_storage_unit/engineering/salvage/gantry/med, -/turf/simulated/floor/tiled/monotile, -/area/scavver/hab) -"qR" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/effect/decal/cleanable/liquid_fuel, -/turf/simulated/floor/airless, -/area/scavver/yachtup) -"qS" = ( -/obj/machinery/atmospherics/pipe/manifold/visible/blue{ - dir = 1 - }, -/obj/machinery/meter, -/obj/effect/floor_decal/techfloor/orange{ - dir = 1 - }, -/turf/simulated/floor/tiled/techfloor/grid{ - initial_gas = newlist() - }, -/area/scavver/lifepod) -"qT" = ( -/obj/machinery/atmospherics/pipe/manifold4w/visible/fuel, -/obj/effect/catwalk_plated/dark, -/turf/simulated/floor/airless, -/area/scavver/harvestpod) -"qU" = ( -/obj/structure/ladder, -/obj/effect/catwalk_plated/dark, -/turf/simulated/floor/airless, -/area/scavver/yachtup) -"qV" = ( -/obj/machinery/light, -/obj/machinery/vending/cigarette{ - dir = 1; - name = "hacked cigarette machine"; - prices = list(); - products = list(/obj/item/storage/fancy/cigarettes = 10, /obj/item/storage/box/matches = 10, /obj/item/flame/lighter/zippo/random = 4, /obj/item/clothing/mask/smokable/cigarette/cigar/havana = 2) - }, -/turf/simulated/floor/wood/yew, -/area/scavver/hab) -"rb" = ( -/obj/machinery/door/airlock/external{ - frequency = 1380; - id_tag = "dropodeast_exterior_door"; - locked = 1 - }, -/obj/machinery/atmospherics/pipe/manifold/visible/red{ - dir = 8 - }, -/turf/simulated/floor/tiled/techfloor/grid{ - initial_gas = newlist() - }, -/area/scavver/lifepod) -"rd" = ( -/obj/machinery/hologram/holopad/longrange/remoteship, -/obj/machinery/light{ - dir = 8 - }, -/obj/structure/handrail{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/scavver/lifepod) -"rh" = ( -/obj/machinery/atmospherics/pipe/manifold4w/visible/fuel, -/obj/machinery/meter, -/obj/effect/floor_decal/techfloor/orange, -/turf/simulated/floor/tiled/techfloor/grid{ - initial_gas = newlist() - }, -/area/scavver/lifepod) -"ro" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/airless, -/area/scavver/yachtup) -"rp" = ( -/obj/structure/closet/emcloset, -/obj/item/crowbar, -/obj/item/crowbar, -/obj/effect/floor_decal/industrial/outline/blue, -/obj/item/storage/box/lights/tubes, -/obj/machinery/light, -/turf/simulated/floor/tiled/dark/monotile, -/area/scavver/lifepod) -"rr" = ( -/obj/machinery/mining/brace, -/obj/structure/railing/mapped, -/turf/simulated/floor/tiled/techfloor{ - initial_gas = newlist() - }, -/area/scavver/lifepod) -"rt" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/turf/simulated/floor/airless, -/area/scavver/yachtup) -"rB" = ( -/obj/structure/cable{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/turf/simulated/floor/airless, -/area/scavver/yachtup) -"rJ" = ( -/obj/item/storage/bag/trash, -/obj/item/airlock_brace, -/obj/item/airlock_brace, -/obj/structure/table/rack, -/obj/item/reagent_containers/glass/bucket, -/obj/item/clothing/mask/plunger, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/manifold/visible/blue{ - dir = 8 - }, -/turf/simulated/floor/tiled/steel_grid, -/area/scavver/hab) -"rM" = ( -/obj/machinery/atmospherics/binary/passive_gate{ - dir = 1 - }, -/turf/simulated/floor/airless, -/area/scavver/yachtup) -"rO" = ( -/obj/machinery/door/airlock/external{ - frequency = 1380; - id_tag = "dropodeast_exterior_door"; - locked = 1 - }, -/obj/machinery/atmospherics/pipe/simple/visible/red{ - dir = 10 - }, -/turf/simulated/floor/tiled/techfloor/grid{ - initial_gas = newlist() - }, -/area/scavver/lifepod) -"rT" = ( -/obj/machinery/atmospherics/pipe/simple/visible/black{ - dir = 4 - }, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/airless, -/area/scavver/yachtup) -"rU" = ( -/obj/structure/railing/mapped, -/turf/simulated/floor/airless, -/area/scavver/gantry/up1) -"rW" = ( -/obj/machinery/light/spot{ - dir = 1 - }, -/obj/effect/floor_decal/techfloor/orange{ - dir = 9 - }, -/obj/structure/railing/mapped/no_density{ - dir = 8; - icon_state = "railing0-0" - }, -/turf/simulated/floor/tiled/techfloor/grid{ - initial_gas = newlist() - }, -/area/scavver/lifepod) -"rX" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 8 - }, -/turf/simulated/floor/airless, -/area/scavver/gantry/up1) -"sc" = ( -/obj/effect/paint/silver, -/obj/effect/paint_stripe/red, -/obj/effect/wallframe_spawn/reinforced/titanium, -/obj/machinery/atmospherics/pipe/simple/visible/fuel{ - dir = 4 - }, -/turf/simulated/floor/airless, -/area/scavver/escapepod) -"si" = ( -/obj/machinery/atmospherics/pipe/simple/visible/red, -/obj/effect/floor_decal/techfloor/orange{ - dir = 10 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/scavver/lifepod) -"so" = ( -/turf/simulated/floor/tiled, -/area/scavver/hab) -"sp" = ( -/obj/machinery/shipsensors/weak{ - use_power = 0 - }, -/obj/structure/handrail{ - dir = 1 - }, -/turf/simulated/floor/reinforced/airless, -/area/scavver/lifepod) -"sq" = ( -/obj/machinery/atmospherics/pipe/simple/visible/fuel{ - dir = 10 - }, -/obj/machinery/portable_atmospherics/powered/pump/filled, -/turf/simulated/floor/airless, -/area/scavver/harvestpod) -"st" = ( -/obj/effect/floor_decal/corner/lightgrey{ - dir = 6 - }, -/turf/simulated/floor/tiled, -/area/scavver/hab) -"sz" = ( -/obj/machinery/atmospherics/pipe/simple/visible/red{ - dir = 5 - }, -/obj/effect/floor_decal/techfloor/orange{ - dir = 4 - }, -/obj/effect/floor_decal/techfloor/orange{ - dir = 8 - }, -/turf/simulated/floor/tiled/techfloor/grid{ - initial_gas = newlist() - }, -/area/scavver/lifepod) -"sB" = ( -/obj/structure/railing/mapped{ - dir = 1; - icon_state = "railing0-1" - }, -/obj/item/stack/material/rods{ - amount = 50 - }, -/obj/item/stack/material/rods{ - amount = 50 - }, -/obj/item/stack/material/rods{ - amount = 50 - }, -/obj/item/stack/material/rods{ - amount = 50 - }, -/obj/item/stack/material/rods{ - amount = 50 - }, -/obj/structure/table/rack, -/obj/item/stack/material/wood/fifty, -/turf/simulated/floor/airless, -/area/scavver/gantry/up1) -"sE" = ( -/obj/machinery/atmospherics/omni/mixer{ - tag_north = 2; - tag_south = 1; - tag_south_con = 0.85; - tag_west = 1; - tag_west_con = 0.15 - }, -/turf/simulated/floor/airless, -/area/scavver/yachtup) -"sF" = ( -/obj/structure/lattice, -/obj/machinery/atmospherics/pipe/simple/visible/black, -/turf/space, -/area/space) -"sI" = ( -/obj/structure/bed/chair/shuttle/black{ - dir = 4 - }, -/obj/structure/cable{ - d2 = 4; - icon_state = "0-4" - }, -/obj/machinery/power/apc{ - dir = 8; - locked = 0; - name = "south bump"; - pixel_x = -24; - req_access = list() - }, -/obj/effect/overmap/visitable/ship/landable/scavver_gantry, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/dark/monotile, -/area/scavver/lifepod) -"sK" = ( -/obj/effect/paint/palegreengray, -/obj/effect/wallframe_spawn/reinforced, -/turf/simulated/floor/plating, -/area/scavver/lifepod) -"sP" = ( -/obj/structure/dispenser, -/obj/effect/floor_decal/corner/lightgrey/mono, -/turf/simulated/floor/tiled/monotile, -/area/scavver/hab) -"sU" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/airless, -/area/scavver/yachtup) -"sW" = ( -/obj/structure/lattice, -/obj/machinery/atmospherics/pipe/simple/heat_exchanging{ - dir = 9 - }, -/turf/space, -/area/space) -"sX" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/airless, -/area/scavver/yachtup) -"sY" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 8 - }, -/turf/simulated/floor/tiled/dark, -/area/scavver/hab) -"sZ" = ( -/obj/structure/railing/mapped{ - dir = 8 - }, -/obj/structure/railing/mapped{ - dir = 1 - }, -/turf/simulated/floor/tiled/techfloor{ - initial_gas = newlist() - }, -/area/scavver/lifepod) -"ta" = ( -/obj/machinery/hologram/holopad/longrange/remoteship, -/obj/effect/overmap/visitable/ship/landable/scavver_gantry/two, -/turf/simulated/floor/tiled/white/monotile{ - initial_gas = newlist() - }, -/area/scavver/escapepod) -"te" = ( -/turf/space, -/area/scavver/yachtup) -"tf" = ( -/obj/structure/lattice, -/obj/effect/catwalk_plated/dark, -/obj/effect/shuttle_landmark/scavver_gantry, -/turf/space, -/area/space) -"tl" = ( -/obj/effect/floor_decal/techfloor/orange{ - dir = 10 - }, -/obj/machinery/atmospherics/portables_connector{ - dir = 4 - }, -/obj/machinery/portable_atmospherics/canister/carbon_dioxide/engine_setup, -/turf/simulated/floor/tiled/techfloor/grid{ - initial_gas = newlist() - }, -/area/scavver/lifepod) -"tp" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/cable{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/structure/cable{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/turf/simulated/floor/airless, -/area/scavver/yachtup) -"tx" = ( -/turf/simulated/floor/tiled/steel_grid{ - initial_gas = newlist() - }, -/area/scavver/gantry/lift) -"tD" = ( -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/dark, -/area/scavver/lifepod) -"tJ" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/effect/floor_decal/techfloor/orange, -/turf/simulated/floor/tiled/techfloor/grid{ - initial_gas = newlist() - }, -/area/scavver/lifepod) -"tN" = ( -/obj/structure/cable{ - d2 = 4; - icon_state = "0-4" - }, -/obj/machinery/power/smes/buildable/preset/scavver/smes{ - charge = 10000 - }, -/obj/machinery/recharger/wallcharger{ - dir = 4; - pixel_x = -24; - pixel_y = -3 - }, -/turf/simulated/floor/tiled/white/monotile{ - initial_gas = newlist() - }, -/area/scavver/escapepod) -"tP" = ( -/obj/effect/paint/sun, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/effect/wallframe_spawn/reinforced/no_grille, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/scavver/hab) -"tQ" = ( -/obj/machinery/power/terminal{ - dir = 1 - }, -/obj/structure/cable{ - d2 = 4; - icon_state = "0-4" - }, -/obj/machinery/computer/ship/engines{ - dir = 4 - }, -/obj/machinery/firealarm{ - dir = 8; - pixel_x = -24 - }, -/turf/simulated/floor/tiled/white/monotile{ - initial_gas = newlist() - }, -/area/scavver/escapepod) -"tV" = ( -/obj/effect/catwalk_plated/dark, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/visible/fuel{ - dir = 4 - }, -/turf/simulated/floor/airless, -/area/scavver/gantry/up2) -"tW" = ( -/obj/structure/bed/chair/shuttle/white{ - dir = 4 - }, -/obj/machinery/light{ - dir = 8 - }, -/obj/effect/floor_decal/corner/grey/border{ - dir = 10 - }, -/turf/simulated/floor/tiled/white/airless, -/area/scavver/escapepod) -"tX" = ( -/obj/structure/lattice, -/obj/effect/catwalk_plated/dark, -/obj/structure/railing/mapped, -/turf/space, -/area/space) -"ub" = ( -/obj/machinery/light{ - dir = 4 - }, -/obj/effect/floor_decal/corner/grey/border{ - dir = 6 - }, -/obj/structure/handrail{ - dir = 8 - }, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 1 - }, -/turf/simulated/floor/tiled/white/airless, -/area/scavver/escapepod) -"ug" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/wallframe_spawn/reinforced/titanium, -/obj/effect/paint/silver, -/obj/effect/paint_stripe/white, -/turf/simulated/floor/airless, -/area/scavver/escapepod) -"ui" = ( -/obj/effect/floor_decal/corner_steel_grid{ - dir = 9 - }, -/turf/simulated/floor/airless, -/area/scavver/gantry/up2) -"uq" = ( -/obj/structure/table/steel_reinforced, -/turf/simulated/floor/tiled/dark/monotile, -/area/scavver/lifepod) -"ut" = ( -/obj/machinery/meter, -/obj/machinery/atmospherics/pipe/manifold/visible/red{ - dir = 8 - }, -/obj/effect/floor_decal/techfloor/orange/corner{ - dir = 8 - }, -/obj/effect/floor_decal/techfloor/orange/corner, -/turf/simulated/floor/tiled/techfloor/grid{ - initial_gas = newlist() - }, -/area/scavver/lifepod) -"uu" = ( -/obj/machinery/atmospherics/pipe/simple/heat_exchanging{ - dir = 1 - }, -/obj/structure/lattice, -/turf/space, -/area/space) -"uy" = ( -/obj/structure/cable{ - d2 = 2; - icon_state = "0-2" - }, -/obj/machinery/power/solar/improved, -/turf/simulated/floor/airless, -/area/scavver/escapepod) -"uz" = ( -/obj/machinery/portable_atmospherics/canister/air, -/turf/simulated/floor/tiled/dark/monotile, -/area/scavver/hab) -"uF" = ( -/turf/simulated/floor/tiled/dark, -/area/scavver/lifepod) -"uH" = ( -/obj/machinery/airlock_sensor/airlock_exterior{ - frequency = 1380; - id_tag = "dropodeast_sensor_external"; - pixel_x = 26; - pixel_y = -4 - }, -/obj/machinery/access_button/airlock_exterior{ - frequency = 1380; - master_tag = "dropodeast"; - pixel_x = 24; - pixel_y = 4; - pixel_z = 1 - }, -/obj/effect/floor_decal/techfloor/orange{ - dir = 6 - }, -/obj/structure/handrail{ - dir = 8 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/scavver/lifepod) -"uN" = ( -/obj/machinery/portable_atmospherics/canister/carbon_dioxide/engine_setup, -/obj/machinery/atmospherics/portables_connector, -/obj/item/device/radio/intercom/map_preset/scavver{ - dir = 4; - pixel_x = -21 - }, -/obj/effect/floor_decal/corner/grey/diagonal{ - dir = 4 - }, -/turf/simulated/floor/tiled/white/airless, -/area/scavver/escapepod) -"uU" = ( -/obj/structure/cable, -/obj/structure/cable{ - d2 = 2; - icon_state = "0-2" - }, -/obj/structure/cable{ - d2 = 4; - icon_state = "0-4" - }, -/obj/machinery/power/tracker, -/turf/simulated/floor/airless, -/area/scavver/escapepod) -"uV" = ( -/obj/machinery/atmospherics/pipe/simple/visible/blue, -/obj/effect/floor_decal/techfloor/orange, -/turf/simulated/floor/tiled/techfloor/grid{ - initial_gas = newlist() - }, -/area/scavver/lifepod) -"uZ" = ( -/obj/structure/lattice, -/obj/effect/catwalk_plated/dark, -/obj/structure/railing/mapped{ - dir = 4; - icon_state = "railing0-1" - }, -/obj/random/hat, -/turf/space, -/area/space) -"va" = ( -/obj/structure/cable, -/obj/machinery/power/solar/improved, -/turf/simulated/floor/airless, -/area/scavver/escapepod) -"vb" = ( -/obj/machinery/atmospherics/pipe/simple/heat_exchanging{ - dir = 6 - }, -/turf/space, -/area/space) -"vh" = ( -/obj/structure/table/rack, -/obj/item/rcd_ammo/large, -/obj/machinery/light, -/obj/item/rcd_ammo/large, -/obj/item/rcd_ammo/large, -/obj/item/gun/launcher/crossbow/rapidcrossbowdevice, -/turf/simulated/floor/tiled/dark/monotile, -/area/scavver/hab) -"vi" = ( -/obj/effect/paint/silver, -/obj/structure/fuel_port, -/turf/simulated/wall/r_wall, -/area/scavver/harvestpod) -"vo" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/fuel{ - dir = 4 - }, -/obj/machinery/button/blast_door{ - id_tag = "scavver_window_harvest"; - name = "Aft Access Blast Door"; - pixel_x = 24 - }, -/obj/machinery/hologram/holopad/longrange/remoteship, -/turf/simulated/floor/tiled/dark/monotile, -/area/scavver/harvestpod) -"vp" = ( -/obj/structure/cable{ - icon_state = "2-8" - }, -/turf/simulated/floor/airless, -/area/scavver/yachtup) -"vq" = ( -/obj/machinery/light/spot, -/obj/machinery/atmospherics/unary/tank{ - dir = 1 - }, -/obj/effect/floor_decal/techfloor/orange{ - dir = 10 - }, -/turf/simulated/floor/tiled/techfloor/grid{ - initial_gas = newlist() - }, -/area/scavver/lifepod) -"vs" = ( -/obj/machinery/computer/ship/helm{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/visible/red{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/scavver/lifepod) -"vt" = ( -/obj/machinery/atmospherics/omni/filter, -/obj/effect/overmap/visitable/ship/landable/scavver_gantry/three, -/turf/simulated/floor/tiled/dark/airless, -/area/scavver/harvestpod) -"vy" = ( -/obj/effect/floor_decal/steeldecal/steel_decals_central4{ - dir = 4 - }, -/turf/simulated/floor/airless, -/area/scavver/gantry/up2) -"vA" = ( -/obj/structure/lattice, -/obj/structure/sign/warning/docking_area{ - dir = 1; - pixel_y = -34 - }, -/turf/space, -/area/space) -"vB" = ( -/obj/structure/railing/mapped, -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 1; - icon_state = "warningcorner" - }, -/obj/item/device/geiger, -/obj/item/device/geiger, -/obj/item/clothing/suit/radiation, -/obj/item/clothing/head/radiation, -/obj/item/storage/med_pouch/radiation, -/obj/item/storage/med_pouch/radiation, -/obj/item/storage/med_pouch/radiation, -/obj/item/storage/med_pouch/radiation, -/obj/structure/closet/crate/plastic, -/turf/simulated/floor/airless, -/area/scavver/gantry/up1) -"vE" = ( -/obj/effect/paint/palegreengray, -/turf/simulated/wall/r_wall, -/area/scavver/lifepod) -"vI" = ( -/obj/machinery/atmospherics/pipe/simple/visible/fuel, -/obj/effect/floor_decal/corner/grey/diagonal{ - dir = 4 - }, -/obj/structure/cable{ - d2 = 4; - icon_state = "0-4" - }, -/obj/machinery/power/solar_control{ - dir = 4 - }, -/turf/simulated/floor/tiled/white/airless, -/area/scavver/escapepod) -"vL" = ( -/obj/structure/railing/mapped{ - dir = 1; - icon_state = "railing0-1" - }, -/obj/structure/table/steel_reinforced, -/obj/machinery/recharger, -/turf/simulated/floor/airless, -/area/scavver/gantry/up2) -"vM" = ( -/obj/structure/railing/mapped{ - dir = 4; - icon_state = "railing0-1" - }, -/obj/structure/cable{ - icon_state = "2-8" - }, -/obj/effect/floor_decal/corner_steel_grid, -/turf/simulated/floor/airless, -/area/scavver/gantry/up1) -"vP" = ( -/obj/effect/floor_decal/industrial/hatch/yellow, -/obj/machinery/atmospherics/binary/circulator{ - anchored = 1; - dir = 4 - }, -/turf/simulated/floor/airless, -/area/scavver/yachtup) -"vU" = ( -/obj/structure/railing/mapped{ - dir = 8; - icon_state = "railing0-1" - }, -/obj/structure/closet/crate/plastic, -/obj/item/stack/material/steel/fifty, -/obj/item/stack/material/steel/fifty, -/obj/item/stack/material/glass/fifty, -/obj/item/stack/material/glass/fifty, -/obj/item/stack/material/plasteel/fifty, -/obj/random/contraband, -/turf/simulated/floor/airless, -/area/scavver/gantry/up2) -"vY" = ( -/obj/machinery/atmospherics/unary/vent_pump/high_volume/vulcan{ - dir = 1; - id_tag = "scavpod_shuttle_pump_out_external" - }, -/obj/structure/railing/mapped{ - dir = 4 - }, -/obj/structure/handrail{ - dir = 1 - }, -/turf/simulated/floor/airless, -/area/scavver/escapepod) -"vZ" = ( -/obj/structure/railing/mapped{ - dir = 8; - icon_state = "railing0-1" - }, -/obj/machinery/mining/brace, -/turf/simulated/floor/airless, -/area/scavver/gantry/up2) -"wa" = ( -/obj/machinery/portable_atmospherics/canister/nitrogen/engine_setup, -/obj/machinery/atmospherics/portables_connector{ - dir = 1 - }, -/turf/simulated/floor/airless, -/area/scavver/yachtup) -"wd" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/floor_decal/corner/lightgrey{ - dir = 6 - }, -/obj/machinery/light/small, -/turf/simulated/floor/tiled, -/area/scavver/hab) -"wh" = ( -/obj/effect/paint/red, -/turf/simulated/wall/titanium, -/area/scavver/escapepod) -"wk" = ( -/obj/machinery/atmospherics/binary/pump{ - dir = 4; - target_pressure = 25 - }, -/turf/simulated/floor/airless, -/area/scavver/yachtup) -"wl" = ( -/obj/effect/paint/silver, -/obj/machinery/atmospherics/pipe/manifold/visible/fuel{ - dir = 8 - }, -/obj/effect/paint_stripe/red, -/obj/effect/wallframe_spawn/reinforced/titanium, -/turf/simulated/floor/airless, -/area/scavver/escapepod) -"wz" = ( -/obj/structure/lattice, -/obj/effect/catwalk_plated/dark, -/obj/structure/railing/mapped{ - dir = 8; - icon_state = "railing0-1" - }, -/obj/structure/railing/mapped, -/turf/space, -/area/space) -"wB" = ( -/obj/structure/sign/warning/docking_area{ - dir = 8; - pixel_x = 34 - }, -/turf/space, -/area/space) -"wE" = ( -/obj/structure/hygiene/shower{ - dir = 4 - }, -/obj/structure/curtain/open/shower/engineering, -/turf/simulated/floor/tiled/freezer, -/area/scavver/hab) -"wF" = ( -/obj/machinery/atmospherics/pipe/simple/heat_exchanging{ - dir = 6 - }, -/obj/structure/lattice, -/turf/space, -/area/space) -"wG" = ( -/obj/structure/cable, -/turf/simulated/floor/airless, -/area/scavver/yachtup) -"wI" = ( -/obj/structure/closet/secure_closet/freezer/fridge/scavver, -/obj/item/material/kitchen/utensil/spork, -/obj/item/material/kitchen/utensil/spork, -/obj/item/reagent_containers/food/condiment/enzyme, -/obj/random/donkpocket_box, -/obj/item/material/kitchen/utensil/spork, -/obj/random/loot, -/mob/living/simple_animal/passive/mouse/brown/Tom, -/turf/simulated/floor/wood/yew, -/area/scavver/hab) -"wQ" = ( -/obj/machinery/atmospherics/pipe/simple/visible/red{ - dir = 9 - }, -/obj/structure/railing/mapped{ - dir = 8 - }, -/obj/structure/table/rack, -/turf/simulated/floor/tiled/techfloor{ - initial_gas = newlist() - }, -/area/scavver/lifepod) -"wT" = ( -/obj/effect/paint/silver, -/obj/machinery/atmospherics/pipe/simple/visible/fuel{ - dir = 10 - }, -/obj/effect/paint_stripe/red, -/obj/effect/wallframe_spawn/reinforced/titanium, -/turf/simulated/floor/airless, -/area/scavver/escapepod) -"wU" = ( -/obj/structure/girder/displaced, -/turf/simulated/floor/airless, -/area/scavver/yachtup) -"xg" = ( -/obj/structure/table/reinforced, -/obj/structure/reagent_dispensers/beerkeg, -/turf/simulated/floor/wood/yew, -/area/scavver/hab) -"xh" = ( -/obj/machinery/atmospherics/pipe/simple/visible/black, -/obj/structure/lattice, -/turf/space, -/area/space) -"xi" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/railing/mapped, -/obj/structure/ore_box, -/turf/simulated/floor/tiled/techfloor{ - initial_gas = newlist() - }, -/area/scavver/lifepod) -"xu" = ( -/obj/effect/floor_decal/corner/lightgrey{ - dir = 1 - }, -/turf/simulated/floor/tiled, -/area/scavver/hab) -"xC" = ( -/obj/structure/lattice, -/obj/machinery/light/navigation, -/turf/space, -/area/space) -"xH" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/paint/palegreengray, -/obj/effect/wallframe_spawn/reinforced, -/turf/simulated/floor/plating, -/area/scavver/lifepod) -"xQ" = ( -/obj/structure/cable{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/machinery/light/spot{ - dir = 1 - }, -/turf/simulated/floor/airless, -/area/scavver/gantry/up1) -"xR" = ( -/obj/effect/catwalk_plated/dark, -/obj/structure/cable{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/turf/simulated/floor/airless, -/area/space) -"xU" = ( -/obj/effect/shuttle_landmark/scavver_gantry/generic/charon, -/turf/space, -/area/space) -"yd" = ( -/obj/item/gun/energy/plasmacutter, -/obj/structure/closet/wardrobe, -/obj/random/clothing, -/obj/random/clothing, -/obj/random/clothing, -/obj/random/clothing, -/obj/random/gloves, -/obj/random/hat, -/obj/random/hat, -/obj/random/shoes, -/obj/random/shoes, -/obj/item/device/binoculars, -/obj/effect/decal/cleanable/dirt, -/obj/effect/floor_decal/corner/lightgrey/mono, -/obj/item/storage/backpack/satchel/leather/reddish, -/obj/item/storage/belt/holster/general, -/obj/random/accessory, -/obj/machinery/light_switch{ - pixel_x = 21 - }, -/turf/simulated/floor/tiled/monotile, -/area/scavver/hab) -"yf" = ( -/turf/simulated/floor/reinforced/airless, -/area/scavver/yachtup) -"yn" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/simple/visible/blue{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark, -/area/scavver/lifepod) -"yq" = ( -/obj/effect/catwalk_plated/dark, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/airless, -/area/scavver/hab) -"yr" = ( -/obj/machinery/light/spot{ - dir = 1 - }, -/turf/simulated/floor/airless, -/area/scavver/gantry/up1) -"ys" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/effect/floor_decal/steeldecal/steel_decals_central1, -/turf/simulated/floor/airless, -/area/scavver/gantry/up1) -"yx" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/effect/catwalk_plated/dark, -/turf/simulated/floor/plating, -/area/scavver/hab) -"yz" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/turf/simulated/floor/tiled/white/monotile{ - initial_gas = newlist() - }, -/area/scavver/escapepod) -"yE" = ( -/obj/structure/cable{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, -/turf/simulated/floor/airless, -/area/scavver/yachtup) -"yI" = ( -/obj/structure/flora/pottedplant/minitree, -/turf/simulated/floor/tiled, -/area/scavver/hab) -"yL" = ( -/obj/structure/railing/mapped{ - dir = 8; - icon_state = "railing0-1" - }, -/obj/structure/closet/crate/plastic, -/obj/item/storage/box/lights/tubes, -/obj/random/smokes, -/obj/random/snack, -/obj/random/soap, -/turf/simulated/floor/airless, -/area/scavver/gantry/up2) -"yN" = ( -/obj/structure/table/steel_reinforced, -/obj/machinery/cell_charger, -/obj/effect/floor_decal/techfloor/orange{ - dir = 6 - }, -/turf/simulated/floor/tiled/techfloor/grid{ - initial_gas = newlist() - }, -/area/scavver/lifepod) -"yR" = ( -/obj/structure/wall_frame, -/turf/simulated/floor/airless, -/area/scavver/yachtup) -"yT" = ( -/obj/machinery/atmospherics/unary/engine{ - dir = 1 - }, -/turf/simulated/floor/airless, -/area/scavver/escapepod) -"yZ" = ( -/obj/machinery/atmospherics/pipe/simple/visible/blue, -/obj/machinery/atmospherics/pipe/simple/visible/red{ - dir = 4 - }, -/obj/effect/floor_decal/techfloor/orange{ - dir = 4 - }, -/obj/effect/floor_decal/techfloor/orange{ - dir = 8 - }, -/turf/simulated/floor/tiled/techfloor/grid{ - initial_gas = newlist() - }, -/area/scavver/lifepod) -"zf" = ( -/obj/machinery/door/blast/regular{ - dir = 4; - id_tag = "scavver_vent_teg_service"; - name = "Service Vent" - }, -/turf/simulated/floor/airless, -/area/scavver/yachtup) -"zl" = ( -/obj/machinery/atmospherics/pipe/simple/heat_exchanging{ - dir = 4 - }, -/obj/structure/lattice, -/turf/space, -/area/space) -"zm" = ( -/obj/machinery/recharger/wallcharger{ - dir = 8; - pixel_x = 23; - pixel_y = -3 - }, -/turf/simulated/floor/tiled/dark, -/area/scavver/hab) -"zp" = ( -/obj/effect/catwalk_plated, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/plating, -/area/scavver/hab) -"zw" = ( -/obj/structure/cable, -/obj/effect/catwalk_plated/dark, -/obj/machinery/power/terminal, -/obj/machinery/light/small{ - dir = 8 - }, -/turf/simulated/floor/plating, -/area/scavver/hab) -"zK" = ( -/obj/machinery/atmospherics/pipe/manifold/visible/blue, -/obj/machinery/meter, -/turf/simulated/floor/tiled/dark, -/area/scavver/lifepod) -"zR" = ( -/obj/structure/table/reinforced, -/obj/item/storage/box/glasses/pint, -/turf/simulated/floor/wood/yew, -/area/scavver/hab) -"zU" = ( -/obj/structure/lattice, -/obj/effect/catwalk_plated/dark, -/obj/structure/railing/mapped{ - dir = 1; - icon_state = "railing0-1" - }, -/turf/space, -/area/space) -"zX" = ( -/obj/structure/cable{ - d2 = 2; - icon_state = "0-2" - }, -/obj/machinery/power/solar_control{ - dir = 8 - }, -/turf/simulated/floor/airless, -/area/scavver/yachtup) -"Ad" = ( -/obj/structure/lattice, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/space, -/area/scavver/yachtup) -"Af" = ( -/obj/machinery/power/solar, -/obj/structure/cable, -/obj/structure/cable{ - d2 = 2; - icon_state = "0-2" - }, -/obj/structure/railing/mapped{ - dir = 8 - }, -/turf/simulated/floor/airless, -/area/scavver/lifepod) -"Ag" = ( -/obj/effect/floor_decal/techfloor/orange{ - dir = 4 - }, -/obj/machinery/atmospherics/portables_connector{ - dir = 8 - }, -/obj/structure/railing/mapped{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor/grid{ - initial_gas = newlist() - }, -/area/scavver/lifepod) -"Ah" = ( -/obj/machinery/portable_atmospherics/canister/air/airlock, -/obj/machinery/atmospherics/portables_connector{ - dir = 8 - }, -/turf/simulated/floor/tiled/steel_grid, -/area/scavver/hab) -"An" = ( -/obj/structure/lattice, -/obj/effect/catwalk_plated/dark, -/obj/structure/railing/mapped, -/obj/random/loot, -/turf/space, -/area/space) -"Aq" = ( -/obj/structure/cable{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/effect/decal/cleanable/liquid_fuel, -/turf/simulated/floor/airless, -/area/scavver/yachtup) -"Ar" = ( -/obj/random/tool, -/turf/simulated/floor/airless, -/area/scavver/gantry/up1) -"Aw" = ( -/obj/effect/catwalk_plated, -/obj/machinery/atmospherics/pipe/simple/visible/blue{ - dir = 9 - }, -/turf/simulated/floor/plating, -/area/scavver/hab) -"AI" = ( -/obj/machinery/vending/cola{ - dir = 1; - name = "hacked Robust Softdrinks"; - prices = list() - }, -/turf/simulated/floor/wood/yew, -/area/scavver/hab) -"AN" = ( -/obj/effect/catwalk_plated/dark, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/scavver/hab) -"AS" = ( -/obj/structure/railing/mapped{ - dir = 4; - icon_state = "railing0-1" - }, -/obj/structure/table/rack, -/obj/item/tracker_electronics, -/obj/item/device/scanner/gas, -/obj/item/device/multitool, -/turf/simulated/floor/airless, -/area/scavver/gantry/up2) -"AW" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/meter, -/obj/machinery/atmospherics/pipe/simple/visible/blue{ - dir = 6 - }, -/obj/effect/catwalk_plated/dark, -/obj/structure/cable{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/turf/simulated/floor/plating, -/area/scavver/hab) -"AY" = ( -/obj/structure/bed, -/obj/effect/decal/cleanable/dirt, -/obj/item/bedsheet/green, -/obj/effect/floor_decal/corner/lightgrey/mono, -/obj/effect/submap_landmark/spawnpoint/scavver_pilot, -/turf/simulated/floor/tiled/monotile, -/area/scavver/hab) -"Bd" = ( -/obj/effect/shuttle_landmark/scavver_gantry/four, -/turf/space, -/area/space) -"Bf" = ( -/obj/machinery/light/spot, -/obj/structure/railing/mapped{ - dir = 4 - }, -/obj/structure/table/rack, -/turf/simulated/floor/tiled/techfloor{ - initial_gas = newlist() - }, -/area/scavver/lifepod) -"Bh" = ( -/obj/effect/decal/cleanable/liquid_fuel, -/obj/machinery/light/spot{ - dir = 8 - }, -/obj/structure/railing/mapped{ - dir = 4 - }, -/obj/structure/handrail{ - dir = 4 - }, -/turf/simulated/floor/airless, -/area/scavver/lifepod) -"Br" = ( -/obj/structure/railing/mapped{ - dir = 4; - icon_state = "railing0-1" - }, -/obj/machinery/portable_atmospherics/powered/pump/filled, -/obj/effect/floor_decal/corner_steel_grid{ - dir = 4 - }, -/turf/simulated/floor/airless, -/area/scavver/gantry/up2) -"Bw" = ( -/obj/machinery/door/airlock/hatch, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/effect/paint/sun, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/tiled/freezer, -/area/scavver/hab) -"Bx" = ( -/obj/machinery/atmospherics/pipe/manifold4w/visible/fuel, -/obj/machinery/meter, -/turf/simulated/floor/airless, -/area/scavver/harvestpod) -"BA" = ( -/obj/machinery/portable_atmospherics/hydroponics, -/obj/machinery/atmospherics/portables_connector{ - dir = 1 - }, -/turf/simulated/floor/airless, -/area/scavver/yachtup) -"BB" = ( -/obj/machinery/button/blast_door{ - id_tag = "scavver_vent_teg"; - name = "Burn Chamber Vent"; - pixel_x = 23; - pixel_y = -10 - }, -/obj/machinery/button/ignition{ - id_tag = "scavver_teg"; - pixel_x = 23 - }, -/obj/machinery/light/spot, -/obj/machinery/button/blast_door{ - id_tag = "scavver_vent_teg_service"; - name = "Burn Chamber Service Vent"; - pixel_x = 23; - pixel_y = 10 - }, -/obj/machinery/atmospherics/pipe/simple/visible/black{ - dir = 9 - }, -/turf/simulated/floor/airless, -/area/scavver/yachtup) -"BE" = ( -/obj/structure/handrail, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 4 - }, -/obj/structure/closet/hydrant{ - pixel_y = 32 - }, -/turf/simulated/floor/tiled/dark, -/area/scavver/lifepod) -"BN" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/unary/tank/air{ - dir = 4; - start_pressure = 4559.63 - }, -/obj/machinery/light{ - dir = 8 - }, -/obj/structure/railing/mapped{ - dir = 4 - }, -/obj/effect/floor_decal/industrial/hatch/blue, -/turf/simulated/floor/tiled/techfloor{ - initial_gas = newlist() - }, -/area/scavver/lifepod) -"BP" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/hygiene/sink{ - dir = 8; - pixel_x = -12 - }, -/obj/item/storage/mirror{ - dir = 4; - pixel_x = -32 - }, -/turf/simulated/floor/tiled/freezer, -/area/scavver/hab) -"BT" = ( -/obj/structure/lattice, -/obj/machinery/atmospherics/pipe/manifold/visible/black{ - dir = 8 - }, -/turf/space, -/area/space) -"Ca" = ( -/obj/structure/girder, -/turf/simulated/floor/airless, -/area/scavver/yachtup) -"Ce" = ( -/obj/machinery/atmospherics/pipe/manifold/visible{ - dir = 1 - }, -/turf/simulated/floor/airless, -/area/scavver/yachtup) -"Ck" = ( -/obj/structure/lattice, -/obj/machinery/light/navigation/delay2, -/turf/space, -/area/space) -"CB" = ( -/turf/simulated/floor/tiled/dark, -/area/scavver/hab) -"CI" = ( -/obj/effect/floor_decal/techfloor/orange{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/manifold4w/visible/red, -/turf/simulated/floor/tiled/techfloor/grid{ - initial_gas = newlist() - }, -/area/scavver/lifepod) -"CJ" = ( -/obj/machinery/sleeper{ - dir = 1 - }, -/obj/effect/floor_decal/industrial/outline/blue, -/obj/machinery/firealarm{ - dir = 1; - pixel_y = -24 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/scavver/lifepod) -"CK" = ( -/obj/effect/floor_decal/corner/lightgrey{ - dir = 5 - }, -/obj/structure/table/standard, -/obj/item/material/ashtray/plastic, -/turf/simulated/floor/tiled, -/area/scavver/hab) -"CN" = ( -/obj/machinery/computer/air_control{ - input_tag = "scavver_teg_in_fuel"; - output_tag = "empty"; - sensor_tag = "empty" - }, -/obj/machinery/status_light{ - id_tag = "scavver_teg_sensor"; - pixel_x = 24 - }, -/turf/simulated/floor/airless, -/area/scavver/yachtup) -"CT" = ( -/obj/effect/floor_decal/techfloor/orange, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 8 - }, -/turf/simulated/floor/tiled/techfloor/grid{ - initial_gas = newlist() - }, -/area/scavver/lifepod) -"CU" = ( -/obj/effect/floor_decal/corner/grey/diagonal, -/obj/machinery/atmospherics/unary/vent_pump/high_volume/vulcan{ - dir = 1; - id_tag = "scavpod_shuttle_pump_out_internal" - }, -/obj/structure/handrail{ - dir = 8 - }, -/obj/machinery/embedded_controller/radio/airlock/tin_can{ - dir = 8; - frequency = 1431; - id_tag = "scavpod_shuttle"; - pixel_x = 24 - }, -/obj/machinery/portable_atmospherics/canister/oxygen, -/turf/simulated/floor/tiled/white/airless, -/area/scavver/escapepod) -"Db" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/cable{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/turf/simulated/floor/airless, -/area/scavver/yachtup) -"Dc" = ( -/obj/structure/railing/mapped{ - dir = 4; - icon_state = "railing0-1" - }, -/obj/structure/table/rack, -/obj/item/reagent_containers/food/snacks/liquidfood, -/obj/item/reagent_containers/food/snacks/liquidfood, -/obj/item/reagent_containers/food/snacks/liquidfood, -/obj/item/reagent_containers/food/snacks/liquidfood, -/obj/item/reagent_containers/food/snacks/liquidfood, -/obj/random/firstaid, -/turf/simulated/floor/airless, -/area/scavver/gantry/up2) -"Df" = ( -/obj/effect/floor_decal/industrial/hatch/yellow, -/obj/machinery/atmospherics/binary/circulator{ - anchored = 1; - dir = 8 - }, -/turf/simulated/floor/airless, -/area/scavver/yachtup) -"Dk" = ( -/obj/structure/ladder, -/obj/effect/floor_decal/corner/lightgrey/mono, -/obj/effect/catwalk_plated, -/turf/simulated/floor/tiled/monotile, -/area/scavver/hab) -"Dl" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/portables_connector{ - dir = 8 - }, -/turf/simulated/floor/airless, -/area/scavver/yachtup) -"Ds" = ( -/obj/structure/lattice, -/obj/structure/sign/warning/docking_area{ - dir = 4; - pixel_x = -34 - }, -/turf/space, -/area/space) -"DB" = ( -/obj/machinery/atmospherics/binary/pump{ - dir = 8; - target_pressure = 15000 - }, -/turf/simulated/floor/airless, -/area/scavver/yachtup) -"DE" = ( -/obj/machinery/atmospherics/pipe/manifold/visible/red, -/obj/structure/railing/mapped{ - dir = 4 - }, -/obj/structure/railing/mapped{ - dir = 1 - }, -/obj/structure/table/rack, -/obj/item/storage/briefcase/inflatable, -/obj/item/storage/briefcase/inflatable, -/obj/item/inflatable_dispenser, -/turf/simulated/floor/tiled/techfloor{ - initial_gas = newlist() - }, -/area/scavver/lifepod) -"DI" = ( -/obj/structure/cable{ - d2 = 2; - icon_state = "0-2" - }, -/obj/machinery/power/port_gen/pacman{ - anchored = 1; - sheets = 25 - }, -/turf/simulated/floor/tiled/white/monotile{ - initial_gas = newlist() - }, -/area/scavver/escapepod) -"DK" = ( -/obj/structure/railing/mapped{ - dir = 8; - icon_state = "railing0-1" - }, -/obj/machinery/mech_recharger, -/turf/simulated/floor/airless, -/area/scavver/gantry/up2) -"DY" = ( -/obj/effect/paint/sun, -/obj/effect/wallframe_spawn/reinforced/no_grille, -/turf/simulated/floor/plating, -/area/scavver/hab) -"Ef" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/universal, -/obj/machinery/meter, -/turf/simulated/floor/airless, -/area/scavver/yachtup) -"Eg" = ( -/obj/structure/handrail{ - dir = 1 - }, -/turf/simulated/floor/reinforced/airless, -/area/scavver/lifepod) -"Ek" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/universal{ - dir = 4 - }, -/obj/machinery/meter, -/turf/simulated/floor/airless, -/area/scavver/yachtup) -"Eo" = ( -/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{ - id_tag = "dropodeast_pump"; - power_rating = 25000 - }, -/turf/simulated/floor/tiled/techfloor/grid{ - initial_gas = newlist() - }, -/area/scavver/lifepod) -"Eu" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/wallframe_spawn/reinforced/no_grille, -/turf/simulated/floor/airless, -/area/scavver/yachtup) -"EA" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/effect/floor_decal/corner_steel_grid{ - dir = 10 - }, -/turf/simulated/floor/airless, -/area/scavver/gantry/up1) -"EL" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/airless, -/area/scavver/yachtup) -"EM" = ( -/obj/structure/lattice, -/obj/effect/catwalk_plated/dark, -/obj/structure/railing/mapped{ - dir = 1; - icon_state = "railing0-1" - }, -/obj/item/caution/cone, -/turf/space, -/area/space) -"ES" = ( -/obj/random/toolbox, -/turf/simulated/floor/airless, -/area/scavver/gantry/up1) -"ET" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/floor_decal/corner/grey/border{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden{ - dir = 4 - }, -/turf/simulated/floor/tiled/white/airless, -/area/scavver/escapepod) -"EU" = ( -/obj/effect/catwalk_plated, -/turf/simulated/floor/plating, -/area/scavver/hab) -"Fb" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/machinery/portable_atmospherics/canister/nitrogen/engine_setup, -/turf/simulated/floor/airless, -/area/scavver/yachtup) -"Fh" = ( -/obj/structure/railing/mapped{ - dir = 4; - icon_state = "railing0-1" - }, -/obj/machinery/portable_atmospherics/canister/oxygen, -/turf/simulated/floor/airless, -/area/scavver/gantry/up2) -"Fk" = ( -/obj/machinery/atmospherics/pipe/manifold/visible{ - dir = 1 - }, -/obj/machinery/meter, -/turf/simulated/floor/airless, -/area/scavver/yachtup) -"Fl" = ( -/obj/machinery/atmospherics/pipe/simple/heat_exchanging{ - dir = 5 - }, -/turf/space, -/area/space) -"Ft" = ( -/obj/machinery/atmospherics/pipe/cap/visible/fuel{ - dir = 4 - }, -/turf/simulated/wall/ocp_wall, -/area/scavver/yachtup) -"FA" = ( -/obj/machinery/vending/tool, -/obj/effect/floor_decal/corner/lightgrey/mono, -/obj/item/device/radio/intercom/map_preset/scavver{ - pixel_y = 23 - }, -/turf/simulated/floor/tiled/monotile, -/area/scavver/hab) -"FC" = ( -/obj/structure/lattice, -/obj/effect/catwalk_plated/dark, -/obj/structure/railing/mapped{ - dir = 8; - icon_state = "railing0-1" - }, -/obj/structure/railing/mapped{ - dir = 1; - icon_state = "railing0-1" - }, -/obj/item/caution/cone, -/turf/space, -/area/space) -"FF" = ( -/obj/machinery/portable_atmospherics/canister/oxygen, -/turf/simulated/floor/airless, -/area/scavver/yachtup) -"FK" = ( -/obj/machinery/computer/ship/sensors/spacer{ - dir = 8 - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/scavver/lifepod) -"FL" = ( -/obj/machinery/atmospherics/pipe/simple/heat_exchanging/junction{ - dir = 4 - }, -/obj/machinery/meter, -/turf/simulated/floor/reinforced/airless, -/area/scavver/yachtup) -"FN" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/fuel{ - dir = 6 - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/computer/air_control{ - input_tag = "scavver_harvest_in"; - output_tag = "scavver_harvest_out"; - sensor_name = "Spiritus Atmospheric Harvester"; - sensor_tag = "scavver_harvest_sensor" - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/scavver/harvestpod) -"FO" = ( -/obj/effect/overmap/visitable/ship/scavver_gantry, -/turf/space, -/area/space) -"FR" = ( -/obj/machinery/atmospherics/pipe/manifold/visible/blue{ - dir = 4 - }, -/obj/effect/floor_decal/techfloor/orange{ - dir = 4 - }, -/obj/effect/floor_decal/techfloor/orange{ - dir = 8 - }, -/turf/simulated/floor/tiled/techfloor/grid{ - initial_gas = newlist() - }, -/area/scavver/lifepod) -"FT" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/door/airlock/external{ - frequency = 1380; - id_tag = "scav_hab_exterior_door"; - locked = 1 - }, -/obj/machinery/access_button/airlock_exterior{ - frequency = 1380; - master_tag = "scav_hab"; - pixel_y = 20; - pixel_z = 1 - }, -/obj/effect/paint/sun, -/turf/simulated/floor/tiled/steel_ridged, -/area/scavver/hab) -"Gh" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/structure/bed/chair/shuttle/white{ - dir = 4 - }, -/obj/effect/floor_decal/corner/grey/border{ - dir = 8 - }, -/turf/simulated/floor/tiled/white/airless, -/area/scavver/escapepod) -"Gj" = ( -/obj/structure/flora/pottedplant/subterranean, -/turf/simulated/floor/tiled, -/area/scavver/hab) -"Gn" = ( -/obj/machinery/atmospherics/pipe/simple/heat_exchanging/junction{ - dir = 1 - }, -/obj/structure/lattice, -/turf/space, -/area/space) -"Gq" = ( -/obj/machinery/door/blast/regular{ - dir = 4; - id_tag = "scavver_vent_teg_service"; - name = "Service Vent" - }, -/obj/machinery/atmospherics/pipe/simple/visible/fuel{ - dir = 4 - }, -/turf/simulated/floor/reinforced, -/area/scavver/yachtup) -"Gs" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/fuel{ - dir = 9 - }, -/obj/effect/paint/red, -/turf/simulated/wall/r_wall, -/area/scavver/lifepod) -"GC" = ( -/obj/machinery/portable_atmospherics/powered/pump/filled, -/obj/machinery/light/spot{ - dir = 1 - }, -/turf/simulated/floor/airless, -/area/scavver/yachtup) -"GH" = ( -/obj/structure/railing/mapped{ - dir = 4; - icon_state = "railing0-1" - }, -/obj/structure/closet/crate/plastic, -/obj/item/stock_parts/circuitboard/engine, -/obj/item/stock_parts/circuitboard/shuttle_console/explore, -/obj/item/stock_parts/circuitboard/solar_control, -/obj/random/storage, -/turf/simulated/floor/airless, -/area/scavver/gantry/up2) -"GL" = ( -/obj/machinery/atmospherics/pipe/simple/visible/fuel, -/obj/machinery/door/blast/regular{ - dir = 2; - id_tag = "scavver_window_harvest"; - name = "Access Blast Door" - }, -/obj/structure/inflatable/wall, -/turf/simulated/floor/airless, -/area/scavver/harvestpod) -"GR" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/effect/floor_decal/corner_steel_grid{ - dir = 6 - }, -/turf/simulated/floor/airless, -/area/scavver/gantry/up1) -"GV" = ( -/obj/structure/table/rack, -/obj/item/material/shard, -/obj/item/material/shard, -/obj/item/material/shard, -/obj/item/material/shard, -/obj/item/material/shard, -/obj/item/material/shard, -/obj/item/tank/oxygen, -/obj/item/material/shard, -/obj/item/material/shard, -/obj/item/material/shard, -/obj/item/gun/launcher/pneumatic, -/turf/simulated/floor/tiled/dark/monotile, -/area/scavver/hab) -"GZ" = ( -/obj/machinery/atmospherics/omni/mixer, -/turf/simulated/floor/airless, -/area/scavver/yachtup) -"Ha" = ( -/obj/machinery/atmospherics/pipe/manifold/visible{ - dir = 8 - }, -/turf/simulated/floor/airless, -/area/scavver/yachtup) -"Hj" = ( -/obj/random/masks, -/turf/simulated/floor/airless, -/area/scavver/gantry/up2) -"HC" = ( -/obj/structure/railing/mapped{ - dir = 8; - icon_state = "railing0-1" - }, -/obj/item/device/flashlight/lantern, -/turf/simulated/floor/airless, -/area/scavver/gantry/up2) -"HF" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 - }, -/turf/simulated/floor/airless, -/area/scavver/yachtup) -"HM" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/obj/effect/catwalk_plated/dark, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 - }, -/turf/simulated/floor/plating, -/area/scavver/hab) -"HN" = ( -/obj/structure/bed/chair, -/turf/simulated/floor/tiled/monotile, -/area/scavver/hab) -"HR" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 4 - }, -/obj/machinery/alarm{ - dir = 4; - locked = 0; - pixel_x = -25; - req_access = list() - }, -/turf/simulated/floor/tiled/dark, -/area/scavver/lifepod) -"HW" = ( -/obj/structure/railing/mapped{ - dir = 1; - icon_state = "railing0-1" - }, -/obj/effect/floor_decal/corner_steel_grid{ - dir = 1 - }, -/turf/simulated/floor/airless, -/area/scavver/gantry/up1) -"HY" = ( -/obj/machinery/atmospherics/pipe/simple/visible{ - dir = 10 - }, -/turf/simulated/floor/airless, -/area/scavver/yachtup) -"Ib" = ( -/obj/machinery/power/port_gen/pacman{ - anchored = 1; - sheets = 25 - }, -/obj/structure/cable{ - d2 = 2; - icon_state = "0-2" - }, -/turf/simulated/floor/airless, -/area/scavver/yachtup) -"Ic" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/bed/chair/shuttle/white{ - dir = 4 - }, -/obj/effect/floor_decal/corner/grey/border{ - dir = 8 - }, -/turf/simulated/floor/tiled/white/airless, -/area/scavver/escapepod) -"Id" = ( -/obj/structure/cable{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/turf/simulated/floor/airless, -/area/space) -"Ii" = ( -/obj/machinery/atmospherics/portables_connector{ - dir = 4 - }, -/turf/simulated/floor/airless, -/area/scavver/yachtup) -"Im" = ( -/obj/machinery/atmospherics/pipe/simple/heat_exchanging{ - dir = 4 - }, -/turf/space, -/area/space) -"In" = ( -/turf/simulated/floor/airless, -/area/scavver/gantry/up2) -"Iy" = ( -/obj/structure/lattice, -/obj/effect/catwalk_plated/dark, -/turf/space, -/area/space) -"IF" = ( -/obj/effect/floor_decal/techfloor/orange{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/visible/fuel{ - dir = 10 - }, -/obj/structure/handrail, -/turf/simulated/floor/tiled/techfloor/grid{ - initial_gas = newlist() - }, -/area/scavver/lifepod) -"IH" = ( -/obj/machinery/power/apc{ - locked = 0; - name = "south bump"; - pixel_y = -28; - req_access = list() - }, -/obj/structure/cable, -/turf/simulated/floor/airless, -/area/scavver/gantry/up1) -"IK" = ( -/obj/effect/floor_decal/techfloor/orange{ - dir = 10 - }, -/obj/structure/railing/mapped/no_density{ - dir = 8; - icon_state = "railing0-0" - }, -/turf/simulated/floor/tiled/techfloor/grid{ - initial_gas = newlist() - }, -/area/scavver/lifepod) -"IP" = ( -/obj/structure/cable{ - d2 = 4; - icon_state = "0-4" - }, -/turf/simulated/floor/airless, -/area/scavver/yachtup) -"IS" = ( -/obj/machinery/door/blast/regular{ - dir = 2; - id_tag = "scavver_vent_teg"; - name = "Vent" - }, -/turf/simulated/floor/reinforced/airless, -/area/scavver/yachtup) -"IX" = ( -/obj/machinery/atmospherics/pipe/simple/visible/fuel, -/obj/machinery/door/blast/regular{ - dir = 2; - id_tag = "scavver_window_harvest"; - name = "Access Blast Door" - }, -/obj/structure/inflatable/door, -/turf/simulated/floor/airless, -/area/scavver/harvestpod) -"Jc" = ( -/obj/machinery/door/blast/regular/open{ - dir = 4; - id_tag = "vulcan_door"; - name = "Vulcan Blast Doors" - }, -/obj/machinery/button/blast_door{ - id_tag = "vulcan_door"; - name = "Vulcan Blast Doors"; - pixel_y = -24 - }, -/turf/simulated/floor/tiled/white/monotile{ - initial_gas = newlist() - }, -/area/scavver/escapepod) -"Je" = ( -/obj/effect/floor_decal/techfloor/orange{ - dir = 1 - }, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor/grid{ - initial_gas = newlist() - }, -/area/scavver/lifepod) -"Js" = ( -/obj/structure/railing/mapped{ - dir = 1; - icon_state = "railing0-1" - }, -/obj/structure/closet/crate/plastic, -/obj/item/grenade/chem_grenade/metalfoam, -/obj/item/grenade/chem_grenade/metalfoam, -/obj/item/grenade/chem_grenade/metalfoam, -/turf/simulated/floor/airless, -/area/scavver/gantry/up1) -"Jt" = ( -/obj/machinery/atmospherics/pipe/simple/heat_exchanging{ - dir = 10 - }, -/turf/space, -/area/space) -"JD" = ( -/obj/structure/fuel_port, -/obj/effect/paint/red, -/turf/simulated/wall/titanium, -/area/scavver/escapepod) -"JH" = ( -/obj/effect/floor_decal/techfloor{ - dir = 8 - }, -/obj/effect/floor_decal/corner/brown, -/turf/simulated/floor/tiled/steel_grid{ - initial_gas = newlist() - }, -/area/scavver/gantry/lift) -"JJ" = ( -/obj/structure/lattice, -/obj/random/loot, -/turf/space, -/area/space) -"JK" = ( -/obj/structure/table/rack, -/obj/item/stack/material/rods/ten, -/obj/machinery/recharger/wallcharger{ - dir = 8; - pixel_x = 23; - pixel_y = -3 - }, -/obj/item/gun/magnetic/preloaded, -/obj/item/cell/high, -/obj/item/cell/high, -/turf/simulated/floor/tiled/dark/monotile, -/area/scavver/hab) -"JO" = ( -/obj/structure/largecrate/animal/goose, -/obj/item/device/radio/intercom/map_preset/scavver{ - dir = 4; - pixel_x = -22 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/scavver/hab) -"JS" = ( -/obj/effect/paint/sun, -/obj/effect/submap_landmark/joinable_submap/scavver_gantry, -/turf/simulated/wall, -/area/scavver/hab) -"Kf" = ( -/obj/machinery/atmospherics/pipe/manifold/visible/blue{ - dir = 8 - }, -/obj/machinery/door/airlock/external{ - frequency = 1380; - id_tag = "dropodeast_interior_door"; - locked = 1 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/scavver/lifepod) -"Ko" = ( -/obj/structure/reagent_dispensers/water_cooler{ - dir = 4 - }, -/turf/simulated/floor/wood/yew, -/area/scavver/hab) -"Ks" = ( -/obj/effect/floor_decal/techfloor/orange{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/manifold/visible/blue{ - dir = 1 - }, -/turf/simulated/floor/tiled/techfloor/grid{ - initial_gas = newlist() - }, -/area/scavver/lifepod) -"KI" = ( -/obj/effect/shuttle_landmark/scavver_gantry/generic/gup, -/turf/space, -/area/space) -"KJ" = ( -/obj/structure/table/rack, -/obj/item/tape_roll, -/obj/item/tape_roll, -/obj/item/clothing/head/welding/knight, -/obj/item/device/suit_cooling_unit, -/turf/simulated/floor/tiled/dark/monotile, -/area/scavver/hab) -"KK" = ( -/obj/machinery/computer/shuttle_control/explore/scavver_gantry{ - dir = 8 - }, -/obj/machinery/recharger/wallcharger{ - dir = 8; - pixel_x = 23; - pixel_y = -3 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/scavver/lifepod) -"KP" = ( -/obj/machinery/atmospherics/pipe/simple/visible/fuel{ - dir = 9 - }, -/obj/effect/catwalk_plated/dark, -/obj/item/rpd, -/obj/item/device/scanner/gas, -/obj/structure/table/rack, -/obj/item/tank/hydrogen, -/turf/simulated/floor/airless, -/area/scavver/harvestpod) -"KX" = ( -/obj/effect/wallframe_spawn/reinforced/no_grille, -/obj/effect/paint/sun, -/obj/machinery/atmospherics/pipe/simple/visible/blue, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/plating, -/area/scavver/hab) -"Lk" = ( -/obj/structure/closet/crate/plastic, -/obj/item/stack/material/steel/fifty, -/obj/item/stack/material/steel/fifty, -/obj/item/stack/material/steel/fifty, -/obj/item/stack/material/glass/fifty, -/obj/item/stack/material/glass/fifty, -/obj/item/stack/material/plasteel/fifty, -/obj/structure/railing/mapped, -/obj/random/powercell, -/obj/random/powercell, -/obj/item/stack/material/plasteel/fifty, -/turf/simulated/floor/airless, -/area/scavver/gantry/up1) -"Lp" = ( -/obj/effect/floor_decal/techfloor{ - dir = 4 - }, -/obj/effect/floor_decal/corner/brown{ - dir = 8 - }, -/turf/simulated/floor/tiled/steel_grid{ - initial_gas = newlist() - }, -/area/scavver/gantry/lift) -"Lr" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/tiled/freezer, -/area/scavver/hab) -"Lu" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/unary/tank/air{ - dir = 4; - start_pressure = 4559.63 - }, -/obj/structure/railing/mapped{ - dir = 4 - }, -/obj/effect/floor_decal/industrial/hatch/blue, -/turf/simulated/floor/tiled/techfloor{ - initial_gas = newlist() - }, -/area/scavver/lifepod) -"LF" = ( -/obj/machinery/power/smes/buildable/preset/scavver/smes{ - charge = 100000 - }, -/obj/structure/cable, -/turf/simulated/floor/airless, -/area/scavver/yachtup) -"LJ" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/door/airlock/hatch, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/effect/paint/sun, -/turf/simulated/floor/tiled/steel_ridged, -/area/scavver/hab) -"LL" = ( -/obj/machinery/atmospherics/portables_connector{ - dir = 4 - }, -/obj/machinery/portable_atmospherics/canister/empty/air, -/turf/simulated/floor/airless, -/area/scavver/yachtup) -"LP" = ( -/obj/item/stack/material/wood/ebony/twentyfive, -/turf/simulated/floor/airless, -/area/scavver/yachtup) -"LS" = ( -/obj/structure/handrail, -/obj/structure/sign/kiddieplaque{ - desc = "A plaque with information regarding this particular lifepod. It reads: 'Armalev Industries Skyfin-E, Exoplanetary Suvival Pod' there's a registry number, and an assigned mothership, but they've both been scratched to illegibility."; - name = "\improper Lifepod Plaque"; - pixel_y = 30 - }, -/obj/machinery/atmospherics/binary/pump/on{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark, -/area/scavver/lifepod) -"Ma" = ( -/obj/item/storage/backpack/dufflebag/eng, -/obj/item/storage/backpack/dufflebag/eng, -/obj/item/storage/backpack/dufflebag/med, -/obj/structure/closet/crate/plastic, -/obj/item/device/gps, -/obj/item/card/id/guest, -/turf/simulated/floor/tiled/dark/monotile, -/area/scavver/hab) -"Mf" = ( -/obj/structure/bed/chair/shuttle/black{ - dir = 4 - }, -/obj/machinery/recharger/wallcharger{ - dir = 4; - pixel_x = -24; - pixel_y = -3 - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/dark/monotile, -/area/scavver/lifepod) -"Mg" = ( -/obj/machinery/atmospherics/pipe/simple/heat_exchanging{ - dir = 6 - }, -/obj/machinery/atmospherics/unary/outlet_injector{ - dir = 1; - frequency = 1441; - icon_state = "map_injector"; - id = "scavver_teg_in"; - use_power = 1 - }, -/obj/machinery/sparker{ - id_tag = "scavver_teg"; - pixel_x = -18 - }, -/obj/effect/decal/cleanable/liquid_fuel, -/turf/simulated/floor/reinforced/airless, -/area/scavver/yachtup) -"MI" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/valve/shutoff/supply{ - dir = 4 - }, -/obj/effect/catwalk_plated/dark, -/turf/simulated/floor/plating, -/area/scavver/hab) -"MK" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/effect/catwalk_plated/dark, -/turf/simulated/floor/plating, -/area/scavver/hab) -"ML" = ( -/turf/simulated/floor/airless, -/area/scavver/gantry/up1) -"MO" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/cable{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/structure/cable{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/machinery/atmospherics/pipe/manifold/visible{ - dir = 8 - }, -/obj/effect/floor_decal/corner/grey/half, -/turf/simulated/floor/tiled/white/airless, -/area/scavver/escapepod) -"MP" = ( -/obj/machinery/portable_atmospherics/canister/oxygen, -/obj/effect/floor_decal/industrial/outline/blue, -/obj/machinery/atmospherics/pipe/simple/visible/blue{ - dir = 10 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/scavver/lifepod) -"MR" = ( -/obj/structure/railing/mapped, -/obj/structure/ladder, -/obj/effect/catwalk_plated/dark, -/obj/effect/floor_decal/corner_steel_grid, -/obj/structure/cable{ - d1 = 32; - icon_state = "32-1" - }, -/turf/simulated/open, -/area/scavver/gantry/up1) -"MX" = ( -/obj/effect/floor_decal/techfloor/orange{ - dir = 4 - }, -/obj/structure/railing/mapped{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor/grid{ - initial_gas = newlist() - }, -/area/scavver/lifepod) -"Nf" = ( -/obj/structure/table/reinforced, -/obj/machinery/light{ - dir = 1 - }, -/obj/machinery/cell_charger, -/obj/item/device/radio/map_preset/scavver, -/obj/effect/floor_decal/corner/grey/border{ - dir = 1 - }, -/turf/simulated/floor/tiled/white/airless, -/area/scavver/escapepod) -"Ng" = ( -/obj/machinery/portable_atmospherics/canister/hydrogen, -/turf/simulated/floor/airless, -/area/scavver/yachtup) -"Ni" = ( -/obj/effect/floor_decal/corner/lightgrey{ - dir = 6 - }, -/obj/machinery/light/small, -/turf/simulated/floor/tiled, -/area/scavver/hab) -"Nn" = ( -/obj/machinery/atmospherics/pipe/simple/visible/black{ - dir = 4 - }, -/obj/machinery/meter, -/turf/simulated/floor/airless, -/area/scavver/yachtup) -"Nq" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/effect/floor_decal/techfloor/orange{ - dir = 1 - }, -/turf/simulated/floor/tiled/techfloor/grid{ - initial_gas = newlist() - }, -/area/scavver/lifepod) -"Nr" = ( -/obj/structure/curtain/open/shower/engineering, -/obj/structure/hygiene/toilet{ - dir = 8 - }, -/obj/effect/decal/cleanable/vomit, -/turf/simulated/floor/tiled/freezer, -/area/scavver/hab) -"Nw" = ( -/obj/item/gun/energy/plasmacutter, -/obj/structure/closet/wardrobe, -/obj/random/clothing, -/obj/random/clothing, -/obj/random/clothing, -/obj/random/clothing, -/obj/random/gloves, -/obj/random/hat, -/obj/random/hat, -/obj/random/shoes, -/obj/random/shoes, -/obj/item/device/binoculars, -/obj/effect/floor_decal/corner/lightgrey/mono, -/obj/item/storage/belt/utility/full, -/obj/item/storage/backpack/industrial, -/obj/random/accessory, -/obj/machinery/light_switch{ - pixel_x = 21 - }, -/turf/simulated/floor/tiled/monotile, -/area/scavver/hab) -"Nz" = ( -/obj/structure/lattice, -/obj/structure/sign/warning/docking_area{ - pixel_y = 24 - }, -/turf/space, -/area/space) -"NC" = ( -/obj/machinery/atmospherics/pipe/manifold/visible/blue, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/dark, -/area/scavver/lifepod) -"NI" = ( -/obj/structure/cable{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 6 - }, -/turf/simulated/floor/tiled/white/airless, -/area/scavver/escapepod) -"NK" = ( -/obj/item/gun/energy/plasmacutter, -/obj/structure/closet/wardrobe, -/obj/random/clothing, -/obj/random/clothing, -/obj/random/clothing, -/obj/random/clothing, -/obj/random/gloves, -/obj/random/hat, -/obj/random/hat, -/obj/random/shoes, -/obj/random/shoes, -/obj/item/device/binoculars, -/obj/effect/floor_decal/corner/lightgrey/mono, -/obj/item/storage/belt/medical/emt, -/obj/item/storage/backpack/satchel/med, -/obj/random/accessory, -/obj/machinery/light_switch{ - pixel_x = 21 - }, -/turf/simulated/floor/tiled/monotile, -/area/scavver/hab) -"NM" = ( -/obj/structure/railing/mapped{ - dir = 4; - icon_state = "railing0-1" - }, -/obj/structure/closet/crate/plastic, -/obj/random/powercell, -/obj/random/powercell, -/obj/random/powercell, -/obj/item/stack/cable_coil/random, -/obj/item/stack/cable_coil/random, -/obj/item/stack/cable_coil/random, -/obj/item/stack/cable_coil/random, -/obj/item/device/multitool, -/turf/simulated/floor/airless, -/area/scavver/gantry/up2) -"NQ" = ( -/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{ - dir = 1; - id_tag = "dropodeast_pump_out_internal"; - power_rating = 25000 - }, -/turf/simulated/floor/tiled/techfloor/grid{ - initial_gas = newlist() - }, -/area/scavver/lifepod) -"NY" = ( -/obj/structure/lattice, -/turf/space, -/area/scavver/yachtup) -"Oa" = ( -/obj/structure/railing/mapped{ - dir = 8; - icon_state = "railing0-1" - }, -/obj/effect/catwalk_plated/dark, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/airless, -/area/space) -"Ob" = ( -/obj/machinery/atmospherics/pipe/manifold/visible, -/turf/simulated/floor/airless, -/area/scavver/yachtup) -"Og" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/airless, -/area/space) -"Oj" = ( -/obj/machinery/atmospherics/portables_connector{ - dir = 8 - }, -/turf/simulated/floor/airless, -/area/scavver/yachtup) -"Oy" = ( -/obj/machinery/airlock_sensor{ - frequency = 1380; - id_tag = "dropodeast_sensor_chamber"; - pixel_x = 26 - }, -/obj/structure/handrail{ - dir = 8 - }, -/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{ - id_tag = "dropodeast_pump"; - power_rating = 25000 - }, -/turf/simulated/floor/tiled/techfloor/grid{ - initial_gas = newlist() - }, -/area/scavver/lifepod) -"Pc" = ( -/obj/machinery/atmospherics/binary/pump{ - dir = 8 - }, -/turf/simulated/floor/airless, -/area/scavver/yachtup) -"Pd" = ( -/obj/effect/floor_decal/techfloor/orange/corner{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/manifold4w/visible/red, -/turf/simulated/floor/tiled/techfloor/grid{ - initial_gas = newlist() - }, -/area/scavver/lifepod) -"Pf" = ( -/obj/machinery/atmospherics/portables_connector{ - dir = 8 - }, -/obj/machinery/portable_atmospherics/canister/air, -/turf/simulated/floor/tiled/steel_grid, -/area/scavver/hab) -"Pi" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/cable{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/turf/simulated/floor/airless, -/area/scavver/gantry/up2) -"Pk" = ( -/obj/effect/floor_decal/corner/lightgrey/mono, -/obj/machinery/light, -/obj/machinery/suit_storage_unit/engineering/salvage/gantry/pilot, -/turf/simulated/floor/tiled/monotile, -/area/scavver/hab) -"Py" = ( -/obj/effect/catwalk_plated/dark, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/airless, -/area/scavver/gantry/up1) -"PD" = ( -/obj/structure/railing/mapped{ - dir = 4; - icon_state = "railing0-1" - }, -/obj/machinery/portable_atmospherics/canister/hydrogen, -/turf/simulated/floor/airless, -/area/scavver/gantry/up2) -"PW" = ( -/obj/machinery/atmospherics/pipe/zpipe/down/fuel{ - dir = 8 - }, -/obj/structure/lattice, -/turf/simulated/open, -/area/scavver/yachtup) -"PX" = ( -/obj/structure/railing/mapped{ - dir = 8; - icon_state = "railing0-1" - }, -/obj/effect/catwalk_plated/dark, -/obj/structure/cable{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/turf/simulated/floor/airless, -/area/space) -"Qc" = ( -/obj/machinery/atmospherics/unary/vent_pump/high_volume/vulcan{ - id_tag = "scavpod_shuttle_pump_out_external" - }, -/obj/machinery/airlock_sensor{ - frequency = 1431; - id_tag = "scavpod_shuttle_exterior_sensor"; - pixel_x = -24 - }, -/obj/structure/railing/mapped{ - dir = 4 - }, -/obj/structure/handrail, -/turf/simulated/floor/airless, -/area/scavver/escapepod) -"Qd" = ( -/obj/structure/cable, -/obj/machinery/power/tracker, -/obj/structure/railing/mapped{ - dir = 8 - }, -/turf/simulated/floor/airless, -/area/scavver/lifepod) -"Qh" = ( -/obj/effect/floor_decal/techfloor/orange{ - dir = 9 - }, -/obj/machinery/atmospherics/portables_connector{ - dir = 4 - }, -/obj/machinery/portable_atmospherics/canister/carbon_dioxide/engine_setup, -/turf/simulated/floor/tiled/techfloor/grid{ - initial_gas = newlist() - }, -/area/scavver/lifepod) -"Qn" = ( -/obj/effect/paint/sun, -/turf/simulated/wall, -/area/scavver/hab) -"Qr" = ( -/obj/effect/floor_decal/steeldecal/steel_decals_central1, -/obj/machinery/light/spot{ - dir = 4 - }, -/turf/simulated/floor/airless, -/area/scavver/gantry/up1) -"Qt" = ( -/obj/effect/floor_decal/corner/grey/border{ - dir = 4 - }, -/obj/machinery/atmospherics/valve, -/obj/machinery/portable_atmospherics/canister/air, -/turf/simulated/floor/tiled/white/airless, -/area/scavver/escapepod) -"Qu" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 8 - }, -/obj/effect/floor_decal/corner/lightgrey{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/scavver/hab) -"Qv" = ( -/obj/structure/flora/pottedplant/sticky, -/turf/simulated/floor/tiled, -/area/scavver/hab) -"Qy" = ( -/obj/machinery/atmospherics/portables_connector{ - dir = 4 - }, -/obj/machinery/portable_atmospherics/canister/oxygen, -/turf/simulated/floor/airless, -/area/scavver/yachtup) -"QB" = ( -/obj/effect/catwalk_plated, -/obj/machinery/atmospherics/pipe/manifold/visible/blue{ - dir = 8 - }, -/obj/structure/cable{ - icon_state = "2-8" - }, -/turf/simulated/floor/plating, -/area/scavver/hab) -"QH" = ( -/obj/machinery/atmospherics/pipe/simple/visible/blue{ - dir = 5 - }, -/obj/structure/cable{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/structure/railing/mapped{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor{ - initial_gas = newlist() - }, -/area/scavver/lifepod) -"QU" = ( -/obj/effect/floor_decal/corner/lightgrey{ - dir = 6 - }, -/obj/machinery/light/small{ - dir = 1 - }, -/turf/simulated/floor/tiled, -/area/scavver/hab) -"Rb" = ( -/obj/effect/floor_decal/techfloor/orange{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/visible/red, -/turf/simulated/floor/tiled/techfloor/grid{ - initial_gas = newlist() - }, -/area/scavver/lifepod) -"Rj" = ( -/obj/machinery/atmospherics/pipe/cap/visible, -/turf/simulated/floor/airless, -/area/scavver/yachtup) -"Rl" = ( -/obj/machinery/air_sensor{ - id_tag = "scavver_harvest_sensor" - }, -/obj/structure/handrail{ - dir = 8 - }, -/obj/structure/inflatable/door, -/turf/simulated/floor/airless, -/area/scavver/harvestpod) -"Rm" = ( -/obj/effect/paint/black, -/turf/simulated/wall, -/area/scavver/gantry/up2) -"Rq" = ( -/obj/machinery/power/smes/buildable/preset/scavver/smes{ - charge = 10000 - }, -/obj/structure/cable{ - d2 = 4; - icon_state = "0-4" - }, -/obj/machinery/light/spot, -/obj/effect/floor_decal/industrial/hatch/orange, -/turf/simulated/floor/tiled/techfloor{ - initial_gas = newlist() - }, -/area/scavver/lifepod) -"Rv" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 8 - }, -/obj/machinery/light{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/scavver/hab) -"RE" = ( -/obj/machinery/atmospherics/pipe/simple/visible{ - dir = 4 - }, -/turf/simulated/floor/airless, -/area/scavver/yachtup) -"RN" = ( -/obj/item/tank/jetpack/oxygen, -/obj/item/tank/jetpack/oxygen, -/obj/item/tank/jetpack/oxygen, -/obj/structure/table/rack, -/obj/item/tank/jetpack/oxygen, -/turf/simulated/floor/tiled/dark/monotile, -/area/scavver/hab) -"RU" = ( -/obj/structure/railing/mapped{ - dir = 8; - icon_state = "railing0-1" - }, -/obj/structure/closet/crate/plastic, -/obj/random/firstaid, -/obj/random/firstaid, -/obj/random/cash, -/obj/random/plushie, -/obj/random/single/lighter, -/turf/simulated/floor/airless, -/area/scavver/gantry/up2) -"RY" = ( -/obj/structure/closet/crate/solar, -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/turf/simulated/floor/tiled/techfloor{ - initial_gas = newlist() - }, -/area/scavver/lifepod) -"Sa" = ( -/obj/structure/railing/mapped{ - dir = 4; - icon_state = "railing0-1" - }, -/obj/structure/ladder, -/obj/effect/catwalk_plated/dark, -/turf/simulated/floor/airless, -/area/scavver/gantry/up2) -"Sj" = ( -/obj/machinery/pipedispenser, -/turf/simulated/floor/airless, -/area/scavver/yachtup) -"Sm" = ( -/obj/structure/railing/mapped, -/obj/structure/table/rack, -/obj/item/storage/briefcase/inflatable, -/obj/item/storage/briefcase/inflatable, -/obj/item/storage/briefcase/inflatable, -/obj/item/storage/briefcase/inflatable, -/turf/simulated/floor/airless, -/area/scavver/gantry/up1) -"Sn" = ( -/obj/machinery/light{ - dir = 1 - }, -/obj/structure/table/reinforced, -/obj/machinery/reagentgrinder/juicer, -/turf/simulated/floor/wood/yew, -/area/scavver/hab) -"Sx" = ( -/obj/machinery/atmospherics/pipe/simple/visible/blue{ - dir = 4 - }, -/obj/machinery/atmospherics/binary/pump{ - dir = 1 - }, -/obj/effect/floor_decal/techfloor/orange{ - dir = 1 - }, -/turf/simulated/floor/tiled/techfloor/grid{ - initial_gas = newlist() - }, -/area/scavver/lifepod) -"SA" = ( -/obj/effect/catwalk_plated/dark, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/airless, -/area/scavver/yachtup) -"SF" = ( -/obj/machinery/atmospherics/pipe/simple/visible/red, -/obj/machinery/light{ - dir = 4 - }, -/obj/structure/railing/mapped{ - dir = 8 - }, -/obj/structure/table/rack, -/turf/simulated/floor/tiled/techfloor{ - initial_gas = newlist() - }, -/area/scavver/lifepod) -"SS" = ( -/obj/machinery/atmospherics/pipe/simple/visible/fuel{ - dir = 6 - }, -/turf/simulated/floor/airless, -/area/scavver/harvestpod) -"SU" = ( -/obj/machinery/atmospherics/unary/tank{ - dir = 8 - }, -/turf/simulated/floor/airless, -/area/scavver/harvestpod) -"SX" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/airless, -/area/scavver/gantry/up2) -"SY" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/binary/pump{ - dir = 8 - }, -/turf/simulated/floor/airless, -/area/scavver/gantry/up2) -"Tf" = ( -/turf/simulated/floor/tiled/techfloor{ - initial_gas = newlist() - }, -/area/scavver/lifepod) -"TR" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/floor_decal/corner/lightgrey{ - dir = 6 - }, -/turf/simulated/floor/tiled, -/area/scavver/hab) -"TY" = ( -/obj/structure/table/reinforced, -/obj/machinery/microwave, -/turf/simulated/floor/wood/yew, -/area/scavver/hab) -"Ub" = ( -/obj/machinery/pointdefense{ - initial_id_tag = "Salvage_Gantry" - }, -/obj/structure/cable{ - d2 = 2; - icon_state = "0-2" - }, -/turf/simulated/floor/airless, -/area/scavver/gantry/up2) -"Ud" = ( -/obj/structure/handrail{ - dir = 1 - }, -/obj/machinery/atmospherics/binary/pump/high_power{ - dir = 8 - }, -/turf/simulated/floor/airless, -/area/scavver/harvestpod) -"Uf" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/cable{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/turf/simulated/floor/airless, -/area/scavver/gantry/up2) -"Ug" = ( -/obj/effect/shuttle_landmark/scavver_gantry/generic/four, -/turf/space, -/area/space) -"Uh" = ( -/obj/effect/wallframe_spawn/reinforced_phoron, -/obj/machinery/door/blast/regular{ - dir = 8; - id_tag = "scavver_window_teg"; - name = "Window Blast Door" - }, -/obj/machinery/atmospherics/pipe/simple/visible/black{ - dir = 4 - }, -/turf/simulated/floor/airless, -/area/scavver/yachtup) -"UM" = ( -/obj/effect/floor_decal/corner/lightgrey{ - dir = 5 - }, -/obj/structure/bed/chair{ - dir = 8 - }, -/turf/simulated/floor/tiled, -/area/scavver/hab) -"UP" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/cable{ - icon_state = "2-8" - }, -/turf/simulated/floor/airless, -/area/scavver/gantry/up1) -"UT" = ( -/obj/effect/catwalk_plated/dark, -/obj/structure/lattice, -/turf/space, -/area/space) -"UU" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/portables_connector{ - dir = 4 - }, -/turf/simulated/floor/airless, -/area/scavver/gantry/up2) -"Vb" = ( -/obj/effect/landmark/map_data{ - height = 2 - }, -/turf/space, -/area/space) -"Vg" = ( -/obj/machinery/portable_atmospherics/canister/air, -/obj/effect/floor_decal/industrial/outline/blue, -/obj/machinery/atmospherics/portables_connector{ - dir = 1 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/scavver/lifepod) -"Vi" = ( -/obj/machinery/light/small{ - dir = 1 - }, -/obj/machinery/airlock_sensor{ - frequency = 1380; - id_tag = "scav_hab_sensor_chamber"; - pixel_x = 22 - }, -/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{ - id_tag = "scav_hab_pump"; - power_rating = 25000 - }, -/obj/effect/floor_decal/industrial/warning, -/turf/simulated/floor/plating, -/area/scavver/hab) -"Vv" = ( -/obj/effect/paint/silver, -/obj/effect/paint_stripe/white, -/turf/simulated/wall/titanium, -/area/scavver/escapepod) -"Vz" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/effect/catwalk_plated/dark, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/plating, -/area/scavver/hab) -"VB" = ( -/obj/structure/lattice, -/obj/structure/sign/warning/docking_area{ - dir = 8; - pixel_x = 34 - }, -/turf/space, -/area/space) -"VC" = ( -/obj/machinery/light{ - dir = 1 - }, -/obj/structure/table/rack, -/obj/item/clothing/glasses/meson, -/obj/item/clothing/glasses/meson, -/obj/item/clothing/glasses/meson, -/obj/item/clothing/glasses/meson, -/turf/simulated/floor/tiled/dark/monotile, -/area/scavver/hab) -"VF" = ( -/obj/effect/decal/cleanable/liquid_fuel, -/obj/item/csi_marker/n1, -/obj/item/ammo_casing/rifle/used, -/obj/structure/handrail{ - dir = 4 - }, -/obj/structure/railing/mapped{ - dir = 4 - }, -/turf/simulated/floor/airless, -/area/scavver/lifepod) -"VP" = ( -/obj/machinery/light/small{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/airless, -/area/scavver/yachtup) -"VQ" = ( -/obj/structure/handrail{ - dir = 4 - }, -/obj/machinery/atmospherics/unary/vent_pump/tank{ - dir = 1; - external_pressure_bound = 0; - external_pressure_bound_default = 0; - icon_state = "map_vent_in"; - id_tag = "scavver_harvest_out"; - initialize_directions = 1; - internal_pressure_bound = 4000; - internal_pressure_bound_default = 4000; - pressure_checks = 2; - pressure_checks_default = 2; - pump_direction = 0 - }, -/turf/simulated/floor/airless, -/area/scavver/harvestpod) -"VS" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/cable{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/turf/simulated/floor/airless, -/area/scavver/gantry/up1) -"VW" = ( -/obj/effect/decal/cleanable/liquid_fuel, -/turf/simulated/floor/airless, -/area/scavver/yachtup) -"VX" = ( -/turf/simulated/wall, -/area/scavver/yachtup) -"VY" = ( -/obj/effect/wallframe_spawn/reinforced/no_grille, -/obj/effect/paint/sun, -/turf/simulated/floor/plating, -/area/scavver/hab) -"Wd" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/light/small{ - dir = 4 - }, -/turf/simulated/floor/tiled/freezer, -/area/scavver/hab) -"We" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/airless, -/area/scavver/yachtup) -"Wf" = ( -/obj/structure/bed, -/obj/item/bedsheet/yellow, -/obj/effect/floor_decal/corner/lightgrey/mono, -/obj/effect/submap_landmark/spawnpoint/scavver_engineer, -/turf/simulated/floor/tiled/monotile, -/area/scavver/hab) -"Wl" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/effect/catwalk_plated/dark, -/turf/simulated/floor/plating, -/area/scavver/hab) -"Ww" = ( -/obj/machinery/light/spot{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/manifold/visible{ - dir = 1 - }, -/obj/machinery/meter, -/turf/simulated/floor/airless, -/area/scavver/yachtup) -"WA" = ( -/obj/machinery/atmospherics/pipe/manifold/visible/black{ - dir = 4 - }, -/turf/simulated/floor/airless, -/area/scavver/yachtup) -"WD" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/fuel{ - dir = 10 - }, -/obj/machinery/power/apc{ - dir = 4; - locked = 0; - name = "west bump"; - pixel_x = 24; - req_access = list() - }, -/obj/structure/cable{ - d2 = 8; - icon_state = "0-8" - }, -/obj/machinery/computer/shuttle_control/explore/scavver_gantry/three, -/obj/machinery/light{ - dir = 1 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/scavver/harvestpod) -"WF" = ( -/obj/structure/railing/mapped{ - dir = 8; - icon_state = "railing0-1" - }, -/obj/machinery/portable_atmospherics/canister/air, -/turf/simulated/floor/airless, -/area/scavver/gantry/up2) -"WG" = ( -/obj/effect/floor_decal/corner_steel_grid{ - dir = 10 - }, -/turf/simulated/floor/airless, -/area/scavver/gantry/up1) -"WP" = ( -/obj/effect/floor_decal/techfloor/orange, -/obj/machinery/atmospherics/pipe/manifold/visible/blue, -/turf/simulated/floor/tiled/techfloor/grid{ - initial_gas = newlist() - }, -/area/scavver/lifepod) -"WR" = ( -/obj/effect/floor_decal/corner_steel_grid{ - dir = 6 - }, -/turf/simulated/floor/airless, -/area/scavver/gantry/up2) -"WW" = ( -/obj/effect/decal/cleanable/liquid_fuel, -/obj/structure/handrail{ - dir = 4 - }, -/obj/structure/railing/mapped{ - dir = 4 - }, -/turf/simulated/floor/airless, -/area/scavver/lifepod) -"WX" = ( -/obj/machinery/door/airlock/external/bolted_open, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/airless, -/area/scavver/yachtup) -"Xb" = ( -/obj/machinery/seed_storage/garden, -/turf/simulated/floor/airless, -/area/scavver/yachtup) -"Xd" = ( -/obj/effect/paint/silver, -/turf/simulated/wall/r_wall, -/area/scavver/harvestpod) -"Xj" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply, -/turf/simulated/floor/airless, -/area/scavver/yachtup) -"Xm" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/item/stock_parts/circuitboard/broken, -/turf/simulated/floor/airless, -/area/scavver/yachtup) -"Xr" = ( -/obj/machinery/embedded_controller/radio/airlock/airlock_controller{ - cycle_to_external_air = 1; - dir = 8; - frequency = 1380; - id_tag = "dropodeast"; - pixel_x = 24; - tag_airpump = "dropodeast_pump"; - tag_chamber_sensor = "dropodeast_sensor_chamber"; - tag_exterior_door = "dropodeast_exterior_door"; - tag_exterior_sensor = "dropodeast_sensor_external"; - tag_interior_door = "dropodeast_interior_door" - }, -/obj/structure/handrail{ - dir = 8 - }, -/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{ - dir = 1; - id_tag = "dropodeast_pump_out_internal"; - power_rating = 25000 - }, -/turf/simulated/floor/tiled/techfloor/grid{ - initial_gas = newlist() - }, -/area/scavver/lifepod) -"Xs" = ( -/obj/machinery/vending/hydronutrients, -/turf/simulated/floor/airless, -/area/scavver/yachtup) -"Xz" = ( -/obj/effect/floor_decal/corner/grey/diagonal, -/obj/machinery/atmospherics/unary/vent_scrubber/vulcan{ - id_tag = "scavpod_shuttle_pump_out_scrubber"; - power_rating = 15000; - scrubbing = "siphon" - }, -/obj/structure/handrail{ - dir = 8 - }, -/obj/machinery/airlock_sensor{ - frequency = 1431; - id_tag = "scavpod_shuttle_interior_sensor"; - pixel_x = 24 - }, -/turf/simulated/floor/tiled/white/airless, -/area/scavver/escapepod) -"XA" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/manifold4w/visible, -/obj/machinery/meter, -/obj/effect/floor_decal/corner/grey/diagonal, -/turf/simulated/floor/tiled/white/airless, -/area/scavver/escapepod) -"XF" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/airless, -/area/scavver/yachtup) -"XG" = ( -/obj/machinery/atmospherics/binary/passive_gate{ - dir = 4 - }, -/turf/simulated/floor/airless, -/area/scavver/yachtup) -"XI" = ( -/obj/effect/catwalk_plated, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/plating, -/area/scavver/hab) -"XR" = ( -/obj/structure/lattice, -/obj/effect/catwalk_plated/dark, -/obj/structure/railing/mapped{ - dir = 4; - icon_state = "railing0-1" - }, -/turf/space, -/area/space) -"XX" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/catwalk_plated/dark, -/obj/machinery/atmospherics/pipe/manifold/visible{ - dir = 4 - }, -/obj/structure/railing/mapped/no_density{ - dir = 4; - icon_state = "railing0-0" - }, -/turf/simulated/floor/airless, -/area/scavver/escapepod) -"XZ" = ( -/obj/structure/cable{ - d2 = 2; - icon_state = "0-2" - }, -/obj/structure/cable{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/machinery/power/apc/super{ - dir = 1; - locked = 0; - name = "north bump"; - pixel_y = 24; - req_access = list() - }, -/turf/simulated/floor/airless, -/area/scavver/yachtup) -"Yd" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/catwalk_plated, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/turf/simulated/floor/plating, -/area/scavver/hab) -"Yf" = ( -/obj/effect/floor_decal/techfloor/orange{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/visible/red{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor/grid{ - initial_gas = newlist() - }, -/area/scavver/lifepod) -"Yg" = ( -/obj/machinery/light, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/dark/monotile, -/area/scavver/lifepod) -"Yo" = ( -/obj/effect/shuttle_landmark/lift/gantry/top, -/turf/simulated/floor/tiled/steel_grid{ - initial_gas = newlist() - }, -/area/scavver/gantry/lift) -"Yr" = ( -/obj/effect/wallframe_spawn/reinforced, -/obj/effect/paint/palegreengray, -/turf/simulated/floor/plating, -/area/scavver/lifepod) -"YA" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/airless, -/area/scavver/yachtup) -"YE" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/decal/cleanable/liquid_fuel, -/turf/simulated/floor/airless, -/area/scavver/yachtup) -"YL" = ( -/obj/structure/lattice, -/obj/machinery/atmospherics/pipe/zpipe/down/supply, -/obj/machinery/atmospherics/pipe/zpipe/down/scrubbers, -/turf/space, -/area/scavver/yachtup) -"YN" = ( -/obj/structure/table/reinforced, -/obj/machinery/reagent_temperature, -/turf/simulated/floor/wood/yew, -/area/scavver/hab) -"YY" = ( -/obj/machinery/atmospherics/pipe/simple/visible/red, -/obj/structure/railing/mapped{ - dir = 8 - }, -/obj/structure/table/rack, -/turf/simulated/floor/tiled/techfloor{ - initial_gas = newlist() - }, -/area/scavver/lifepod) -"Zd" = ( -/obj/machinery/access_button/airlock_interior{ - frequency = 1380; - master_tag = "dropodeast"; - pixel_y = 24 - }, -/obj/structure/handrail, -/obj/machinery/meter, -/obj/machinery/atmospherics/pipe/simple/visible/blue{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark, -/area/scavver/lifepod) -"Zo" = ( -/obj/effect/shuttle_landmark/scavver_gantry/five, -/turf/space, -/area/space) -"Zx" = ( -/obj/machinery/atmospherics/pipe/manifold/visible/black, -/turf/simulated/floor/airless, -/area/scavver/yachtup) -"ZB" = ( -/obj/effect/decal/cleanable/liquid_fuel, -/obj/machinery/atmospherics/pipe/simple/heat_exchanging{ - dir = 4 - }, -/turf/simulated/floor/reinforced/airless, -/area/scavver/yachtup) -"ZI" = ( -/obj/machinery/portable_atmospherics/powered/scrubber, -/turf/simulated/floor/airless, -/area/scavver/yachtup) -"ZK" = ( -/obj/machinery/atmospherics/binary/pump{ - dir = 4; - target_pressure = 15000 - }, -/turf/simulated/floor/airless, -/area/scavver/yachtup) -"ZL" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/effect/catwalk_plated/dark, -/turf/simulated/floor/plating, -/area/scavver/hab) -"ZX" = ( -/obj/machinery/meter, -/obj/machinery/atmospherics/pipe/manifold/visible/black{ - dir = 4 - }, -/turf/simulated/floor/airless, -/area/scavver/yachtup) - -(1,1,1) = {" -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -"} -(2,1,1) = {" -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -"} -(3,1,1) = {" -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -"} -(4,1,1) = {" -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -"} -(5,1,1) = {" -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -"} -(6,1,1) = {" -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -"} -(7,1,1) = {" -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -"} -(8,1,1) = {" -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -"} -(9,1,1) = {" -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -"} -(10,1,1) = {" -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -"} -(11,1,1) = {" -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -"} -(12,1,1) = {" -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -"} -(13,1,1) = {" -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -"} -(14,1,1) = {" -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -"} -(15,1,1) = {" -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -"} -(16,1,1) = {" -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -"} -(17,1,1) = {" -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -"} -(18,1,1) = {" -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -"} -(19,1,1) = {" -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -"} -(20,1,1) = {" -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -"} -(21,1,1) = {" -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -"} -(22,1,1) = {" -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -"} -(23,1,1) = {" -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -"} -(24,1,1) = {" -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -"} -(25,1,1) = {" -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -"} -(26,1,1) = {" -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -"} -(27,1,1) = {" -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -"} -(28,1,1) = {" -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -"} -(29,1,1) = {" -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -"} -(30,1,1) = {" -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -"} -(31,1,1) = {" -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -"} -(32,1,1) = {" -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -"} -(33,1,1) = {" -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -"} -(34,1,1) = {" -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -"} -(35,1,1) = {" -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -"} -(36,1,1) = {" -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -"} -(37,1,1) = {" -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -"} -(38,1,1) = {" -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -"} -(39,1,1) = {" -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -"} -(40,1,1) = {" -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -"} -(41,1,1) = {" -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -"} -(42,1,1) = {" -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -"} -(43,1,1) = {" -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -"} -(44,1,1) = {" -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -"} -(45,1,1) = {" -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -"} -(46,1,1) = {" -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -IP -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -"} -(47,1,1) = {" -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -oN -oN -oN -eN -oN -YA -oN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -"} -(48,1,1) = {" -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -iT -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -oN -oN -oN -hX -oN -YA -oN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -"} -(49,1,1) = {" -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -oN -oN -oN -eN -oN -YA -oN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -"} -(50,1,1) = {" -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -oN -oN -oN -eN -oN -YA -oN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -"} -(51,1,1) = {" -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -oN -oN -oN -eN -oN -YA -oN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -"} -(52,1,1) = {" -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -oN -oN -oN -eN -oN -YA -oN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -"} -(53,1,1) = {" -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -oN -oN -oN -eN -oN -YA -oN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -"} -(54,1,1) = {" -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -FO -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -oN -oN -oN -eN -oN -YA -oN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -"} -(55,1,1) = {" -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -oN -oN -oN -eN -oN -YA -oN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -"} -(56,1,1) = {" -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -FC -hH -hH -hH -hH -hH -hH -hH -hH -hH -hH -hH -hH -hH -wz -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -oN -oN -oN -eN -oN -YA -oN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -"} -(57,1,1) = {" -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -zU -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -zU -hH -hH -aM -aM -aM -hH -hH -hH -wz -wF -uu -uu -jA -eN -eN -eN -eN -eN -eN -eN -eN -eN -oN -oN -oN -eN -oN -YA -oN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -"} -(58,1,1) = {" -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -zU -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -zU -eN -hX -eN -xC -eN -eN -eN -eN -tX -Im -vb -Fl -zl -eN -eN -eN -eN -eN -eN -eN -eN -eN -oN -la -wG -eN -oN -YA -oN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -"} -(59,1,1) = {" -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -zU -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -zU -hX -hX -qi -hX -eN -eN -eN -eN -tX -Im -Im -Im -zl -eN -eN -eN -eN -eN -eN -eN -eN -eN -oN -me -wG -eN -oN -YA -oN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -"} -(60,1,1) = {" -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -zU -eN -eN -eN -eN -eN -eN -KI -eN -eN -eN -eN -eN -eN -zU -hX -eN -fr -jG -fQ -fr -Nz -xC -tX -Im -Im -Im -zl -eN -eN -eN -eN -eN -eN -eN -eN -eN -oN -me -wG -eN -oN -YA -oN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -"} -(61,1,1) = {" -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -zU -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -zU -eN -eN -fr -fL -JH -fr -eN -eN -tX -Im -Im -Im -zl -eN -eN -eN -eN -eN -eN -eN -eN -eN -oN -me -wG -eN -oN -YA -oN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -"} -(62,1,1) = {" -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -zU -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -zU -eN -eN -fr -Yo -tx -fr -eN -eN -tX -Im -Im -Im -zl -eN -eN -eN -eN -eN -eN -eN -eN -eN -bs -tp -wG -eN -bs -tp -wG -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -"} -(63,1,1) = {" -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -FC -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -zU -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -zU -eN -eN -fr -nI -Lp -fr -eN -eN -tX -Im -Im -Im -zl -eN -eN -eN -eN -eN -eN -eN -eN -eN -bs -tp -wG -eN -bs -tp -wG -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -"} -(64,1,1) = {" -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -zU -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -xU -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -zU -eN -eN -eN -Vv -Vv -Vv -Vv -uy -uU -va -wh -eN -eN -zU -Iy -Iy -oo -rX -rX -vB -eN -eN -tX -zl -zl -zl -zl -eN -eN -eN -eN -eN -eN -eN -eN -eN -bs -tp -wG -eN -bs -tp -wG -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -"} -(65,1,1) = {" -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -zU -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -zU -eN -Vv -qt -Vv -tN -tQ -Vv -Vv -ug -Vv -wh -wh -hX -zU -eN -eN -HW -ML -ML -rU -hX -hX -tX -Im -Im -Im -zl -eN -eN -eN -eN -eN -eN -eN -eN -eN -bs -tp -wG -eN -bs -tp -wG -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -"} -(66,1,1) = {" -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -zU -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -EM -hX -Vv -ce -qF -Gh -Ic -tW -uN -jq -vI -wl -yT -eN -zU -eN -eN -fr -yr -Ar -fr -eN -eN -tX -Im -Im -Im -zl -eN -eN -eN -eN -eN -eN -eN -eN -eN -bs -tp -wG -eN -bs -tp -wG -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -"} -(67,1,1) = {" -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -zU -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -zU -eN -Vv -Nf -iq -ta -NI -mZ -iU -MO -iA -sc -ef -eN -zU -eN -eN -fr -ML -ML -fr -eN -eN -tX -Im -Im -Im -zl -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -vp -sX -sX -ma -rt -oN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -"} -(68,1,1) = {" -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -zU -hX -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -zU -eN -Vv -lB -dx -Qt -ET -ub -Xz -XA -CU -wT -yT -eN -zU -eN -eN -Js -ES -ML -os -eN -eN -tX -Im -Im -Im -jb -Gn -BT -xh -xh -xh -xh -xh -sF -sF -sF -jL -oN -zX -Db -hX -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -"} -(69,1,1) = {" -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -zU -hX -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -zU -eN -Vv -qt -Vv -DI -yz -Vv -Vv -pl -Vv -wh -wh -hX -zU -eN -eN -gp -ML -mq -WG -Iy -Iy -tX -Im -Im -Jt -uu -Gn -cT -eN -eN -Ca -Ca -hv -hv -VX -hv -kP -yR -yR -Eu -VX -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -"} -(70,1,1) = {" -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -zU -hX -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -zU -eN -eN -eN -Vv -qt -Jc -Vv -Qc -XX -vY -JD -eN -eN -zU -Ck -vA -fr -ML -ML -fr -eN -eN -tX -Im -Im -eN -hX -eN -eN -eN -VX -VX -Ii -LL -LL -VX -XZ -rT -ma -LF -ko -VX -VX -VX -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -"} -(71,1,1) = {" -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -zU -hX -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -hX -JJ -hX -eN -zU -eN -eN -eN -eN -Iy -Iy -eN -eN -aa -eN -eN -eN -eN -zU -eN -eN -fr -yr -ML -fr -Nz -xC -tX -bX -sW -hX -VX -NY -NY -NY -VX -Ii -Ce -ju -Ob -VX -nd -mu -rB -LF -dX -oN -mV -VX -VX -VX -VX -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -"} -(72,1,1) = {" -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -qv -hH -hH -hH -hH -hH -hH -hH -hH -hH -hH -hH -hH -qD -hH -hw -hH -hH -hH -hH -hH -hH -hH -hH -hH -Iy -hH -hH -hH -hH -Iy -Iy -hH -hH -xR -Oa -PX -hH -hH -Iy -eN -eN -fr -ML -ML -fr -eN -hX -tX -eN -VX -VX -Ca -Ca -te -te -VX -Ww -GZ -XG -Pc -hv -YA -mu -VW -Ib -sU -oN -wk -oN -qU -Ng -VX -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -"} -(73,1,1) = {" -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -zU -xC -hX -eN -Iy -eN -eN -eN -eN -eN -eN -eN -hX -eN -UT -eN -eN -eN -eN -eN -eN -hX -xC -eN -Iy -eN -eN -eN -eN -eN -eN -eN -xC -eN -eN -cc -eN -eN -eN -eN -eN -ac -ML -ML -Lk -eN -eN -tX -hX -VX -ZI -oN -hv -te -te -hv -RE -bE -Ek -Oj -hv -YA -mu -Aq -qR -rt -oN -mu -oN -Qy -Ng -VX -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -"} -(74,1,1) = {" -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -zU -eN -hX -wB -Iy -eN -eN -eN -eN -eN -eN -hX -hX -eN -UT -eN -eN -eN -eN -eN -eN -eN -VB -eN -Iy -eN -eN -eN -eN -eN -eN -eN -VB -eN -eN -cc -eN -eN -eN -eN -Vb -sB -ML -ML -Sm -eN -eN -tX -hX -VX -GC -oN -hv -te -te -hv -RE -RE -XF -dm -sX -gM -mu -Xm -oN -oN -oN -pQ -oJ -sE -jS -VX -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -"} -(75,1,1) = {" -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -zU -eN -hX -Rm -ui -gq -Rm -Rm -Rm -vU -HC -Rm -Rm -Rm -ui -ex -Rm -Rm -Rm -RU -WF -Rm -Rm -Rm -ui -jd -Rm -Rm -Rm -yL -dy -Rm -Rm -Rm -eb -nN -Rm -Rm -Rm -vZ -DK -fr -xQ -IH -fr -eN -eN -tX -eN -wU -Sj -oN -Ca -hv -hv -NY -RE -RE -XF -gL -hv -om -Zx -YA -VW -cQ -qk -CN -ZK -FF -Ng -VX -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -"} -(76,1,1) = {" -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -it -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -zU -Iy -Iy -dD -SX -Uf -SX -ek -SX -SX -SX -SX -ek -SX -SX -Uf -SX -ek -SX -SX -SX -SX -ek -SX -SX -SX -SX -ek -SX -SX -SX -SX -ek -SX -dO -Pi -SX -ek -SX -SX -SX -ys -VS -cy -fr -hX -hX -tX -eN -Ca -oN -oN -oN -oN -bV -Ef -dS -Ob -XF -qC -hv -mu -ZK -YE -oN -kD -pu -pu -Uh -Ft -pu -VX -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -"} -(77,1,1) = {" -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -zU -Ub -SX -fD -nZ -kw -In -In -In -In -vy -In -In -In -nZ -kw -In -In -In -fS -In -In -In -In -nZ -In -In -In -In -In -vy -In -In -In -In -nZ -In -In -In -In -In -aq -ae -lw -MR -hX -eN -tX -eN -NY -yE -We -We -EL -nJ -ro -jO -Dl -HF -Fb -hv -Nn -Nn -YA -om -ZX -gf -Mg -fE -FL -pu -VX -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -"} -(78,1,1) = {" -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -zU -eN -eN -vL -In -kw -In -Hj -In -In -In -In -In -In -In -kw -In -In -In -In -In -In -In -In -In -In -In -In -In -In -In -In -In -In -In -In -In -In -In -In -In -Qr -jy -UP -EA -Py -Py -Py -SA -sX -ow -lU -gx -Ha -BA -VX -hv -hv -hv -hv -VX -mu -vP -hp -Df -oN -bA -nE -ZB -jz -IS -yf -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -"} -(79,1,1) = {" -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -zU -eN -eN -Rm -Dc -lt -Rm -Rm -Rm -mX -WR -Rm -Rm -Rm -aI -aK -Rm -Rm -Rm -WR -Br -Rm -Rm -Rm -Sa -AS -Rm -Rm -Rm -mX -WR -Rm -Rm -Rm -GH -NM -Rm -Rm -Rm -PD -Fh -fr -vM -GR -fr -Nz -Ck -tX -eN -VX -hb -oN -oN -Ce -BA -VX -NY -te -te -NY -hv -aB -WA -gx -WA -fH -gf -cA -ok -hY -pu -VX -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -"} -(80,1,1) = {" -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -zU -eN -eN -eN -eN -UU -hX -Ds -eN -eN -Iy -eN -eN -eN -eN -Id -Og -df -eN -Iy -eN -eN -eN -eN -eN -eN -eN -Ds -eN -eN -Iy -eN -eN -eN -hX -hX -Ds -eN -eN -eN -eN -eN -eN -qf -eN -eN -eN -An -eN -VX -WX -VX -pO -Fk -fN -VX -NY -te -te -NY -hv -DB -oN -Rj -rM -BB -pu -Gq -pu -pu -pu -VX -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -"} -(81,1,1) = {" -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -zU -eN -eN -eN -eN -SY -eN -hX -xC -eN -Iy -eN -eN -eN -eN -eN -eN -bc -eN -Iy -eN -eN -eN -eN -eN -eN -hX -xC -eN -eN -Iy -eN -eN -eN -eN -eN -xC -eN -eN -eN -eN -eN -eN -qf -eN -eN -eN -tX -eN -NY -hb -VX -Xs -Ce -BA -VX -NY -te -te -VX -VX -aB -wa -oN -oN -VX -LP -PW -VX -VX -VX -VX -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -"} -(82,1,1) = {" -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -qv -XR -XR -XR -XR -tV -XR -XR -XR -XR -XR -XR -XR -XR -XR -XR -XR -iI -XR -Iy -XR -XR -XR -XR -XR -uZ -XR -XR -XR -XR -XR -XR -XR -XR -XR -XR -XR -XR -XR -XR -XR -XR -XR -qf -XR -XR -XR -hD -hX -NY -hb -VX -Xb -HY -BA -VX -NY -te -te -VX -oN -hP -pV -NY -NY -NY -VX -zf -VX -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -"} -(83,1,1) = {" -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -hX -hX -eN -tV -eN -eN -eN -eN -hX -eN -eN -eN -eN -hX -eN -bc -eN -Iy -eN -eN -eN -eN -eN -hX -eN -eN -eN -eN -hX -eN -eN -hX -eN -eN -eN -eN -hX -hX -eN -eN -eN -yq -eN -eN -eN -hX -eN -VX -VP -Ca -Ca -NY -NY -oN -NY -NY -NY -VX -VX -VX -NY -te -te -NY -VX -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -"} -(84,1,1) = {" -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -hX -eN -oO -eN -eN -eN -eN -hX -hX -eN -eN -eN -hX -eN -bc -eN -tf -eN -eN -eN -hX -hX -hX -eN -eN -eN -eN -hX -eN -eN -hX -eN -eN -eN -eN -hX -eN -eN -eN -eN -yq -eN -eN -eN -hX -YL -Ad -Xj -NY -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -"} -(85,1,1) = {" -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -hX -eN -in -eN -eN -eN -Xd -Xd -cf -cf -eN -eN -vE -vE -pw -vE -rW -IK -sZ -aA -Af -fV -Af -Af -Af -Af -Qd -vE -eN -eN -Qn -Qn -VY -VY -VY -VY -VY -Qn -Qn -Qn -FT -Qn -Qn -Qn -Qn -Qn -Qn -tP -Qn -Qn -Qn -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -"} -(86,1,1) = {" -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -Xd -Xd -Xd -jJ -Xd -Xd -Xd -vi -SS -GL -VQ -eN -eN -vE -Tf -ka -xi -Nq -tJ -nS -qj -vE -vE -vE -vE -vE -vE -vE -vE -eN -eN -Qn -TY -YN -zR -xg -Ko -mS -ki -Qn -dV -QB -KX -rJ -bI -zw -oH -Qn -nl -BP -wE -Qn -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -Zo -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -"} -(87,1,1) = {" -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -nH -iY -jt -nf -lP -lP -lP -ai -nM -cf -cf -cf -eN -vE -nw -Tf -kq -Je -nj -oB -jr -Yr -ks -sI -HR -rd -qh -Mf -sK -eN -eN -Qn -Sn -mS -mS -mS -mS -mS -qV -Qn -Vi -Aw -Qn -Ah -Pf -AW -fq -Qn -Lr -Wd -Nr -Qn -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -"} -(88,1,1) = {" -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -nH -FN -io -vt -fX -qT -qT -bl -Bx -IX -iZ -Rl -eN -vE -Tf -Tf -rr -Ks -WP -oB -mi -Yr -KK -FK -vs -pK -tD -uF -sK -hX -hX -Qn -wI -mS -mS -mS -mS -mS -AI -Qn -Qn -oI -Qn -Qn -Qn -gN -Qn -Qn -Bw -Qn -Qn -Qn -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -"} -(89,1,1) = {" -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -Xd -WD -gc -vo -KP -SU -SU -bU -Ud -cf -cf -cf -eN -kb -kb -kC -lG -oq -CT -oB -Rq -vE -vE -xH -fF -vE -ab -pK -sK -eN -eN -Qn -Qn -dj -er -so -so -ov -Qn -Qn -pc -EU -lW -Qn -RN -ZL -JO -kf -AN -vh -Qn -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -"} -(90,1,1) = {" -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -Xd -Xd -Xd -Xd -Xd -Xd -Xd -Xd -sq -GL -dA -eN -eN -sp -cC -Qh -tl -Ks -uV -cS -QH -Lu -BN -jF -aJ -vE -BE -rp -vE -eN -eN -eN -VY -HN -CK -so -mN -hB -Qn -qN -xu -EU -Pk -Qn -KJ -MI -Ma -uz -AN -GV -DY -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -"} -(91,1,1) = {" -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -Xd -Xd -cf -cf -eN -eN -Eg -cC -IF -rh -Sx -ut -sz -ch -FR -FR -FR -yZ -cu -zK -CJ -vE -eN -eN -eN -VY -HN -ih -EU -Yd -zp -jj -jw -MK -Wl -XI -LJ -Vz -bY -yx -co -HM -ht -VY -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -"} -(92,1,1) = {" -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -pd -ls -dd -mB -qS -iW -kJ -YY -YY -SF -YY -wQ -vE -LS -uq -vE -eN -eN -eN -Qn -dj -UM -so -Rv -so -Qn -FA -Qu -dw -gr -Qn -VC -CB -ck -sY -zm -JK -Qn -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -"} -(93,1,1) = {" -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -pd -Gs -pq -yN -hG -qK -DE -ps -Bf -vE -sK -sK -vE -Zd -uq -vE -eN -eN -eN -Qn -Qn -Qn -as -Qn -as -Qn -Qn -sP -Dk -gk -Qn -Qn -as -Qn -as -Qn -Qn -Qn -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -"} -(94,1,1) = {" -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -kb -kb -aw -lH -mC -Pd -CI -Rb -si -rb -NQ -Eo -Kf -NC -Yg -vE -hX -eN -eN -eN -VY -Gj -so -Qn -so -Qv -Qn -VY -VY -VY -Qn -gU -so -Qn -so -yI -VY -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -"} -(95,1,1) = {" -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -vE -aZ -pa -pr -mM -Yf -Yf -ij -uH -rO -Xr -Oy -mx -yn -nc -vE -hX -hX -hX -hX -VY -TR -wd -JS -gm -st -VY -eN -hX -eN -VY -st -Ni -Qn -QU -st -VY -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -"} -(96,1,1) = {" -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -vE -RY -eH -mh -ne -pn -oE -vq -vE -vE -vE -vE -vE -MP -Vg -vE -eN -eN -eN -eN -VY -AY -yd -Qn -mQ -NK -VY -hX -hX -hX -VY -Nw -Wf -Qn -ml -Nw -VY -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -"} -(97,1,1) = {" -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -vE -vE -vE -vE -dR -Ag -MX -qn -fw -Bh -VF -WW -vE -vE -vE -vE -eN -eN -eN -eN -Qn -Qn -Qn -Qn -Qn -Qn -Qn -eN -eN -eN -Qn -Qn -Qn -Qn -Qn -Qn -Qn -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -"} -(98,1,1) = {" -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -"} -(99,1,1) = {" -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -"} -(100,1,1) = {" -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -Bd -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -"} -(101,1,1) = {" -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -"} -(102,1,1) = {" -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -"} -(103,1,1) = {" -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -"} -(104,1,1) = {" -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -"} -(105,1,1) = {" -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -"} -(106,1,1) = {" -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -"} -(107,1,1) = {" -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -"} -(108,1,1) = {" -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -"} -(109,1,1) = {" -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -"} -(110,1,1) = {" -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -"} -(111,1,1) = {" -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -"} -(112,1,1) = {" -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -"} -(113,1,1) = {" -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -Ug -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -"} -(114,1,1) = {" -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -"} -(115,1,1) = {" -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -"} -(116,1,1) = {" -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -"} -(117,1,1) = {" -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -"} -(118,1,1) = {" -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -"} -(119,1,1) = {" -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -"} -(120,1,1) = {" -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -"} -(121,1,1) = {" -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -"} -(122,1,1) = {" -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -"} -(123,1,1) = {" -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -"} -(124,1,1) = {" -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -"} -(125,1,1) = {" -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -"} -(126,1,1) = {" -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -"} -(127,1,1) = {" -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -"} -(128,1,1) = {" -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -"} -(129,1,1) = {" -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -"} -(130,1,1) = {" -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -"} -(131,1,1) = {" -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -"} -(132,1,1) = {" -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -"} -(133,1,1) = {" -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -"} -(134,1,1) = {" -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -"} -(135,1,1) = {" -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -"} -(136,1,1) = {" -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -"} -(137,1,1) = {" -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -"} -(138,1,1) = {" -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -"} -(139,1,1) = {" -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -"} -(140,1,1) = {" -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -"} -(141,1,1) = {" -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -"} -(142,1,1) = {" -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -"} -(143,1,1) = {" -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -"} -(144,1,1) = {" -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -"} -(145,1,1) = {" -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -"} -(146,1,1) = {" -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -"} -(147,1,1) = {" -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -"} -(148,1,1) = {" -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -"} -(149,1,1) = {" -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -"} -(150,1,1) = {" -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -eN -"} diff --git a/maps/away/scavver/scavver_gantry.dm b/maps/away/scavver/scavver_gantry.dm deleted file mode 100644 index 55a3041d1e7d9..0000000000000 --- a/maps/away/scavver/scavver_gantry.dm +++ /dev/null @@ -1,197 +0,0 @@ -#include "scavver_gantry_shuttles.dm" -#include "scavver_gantry_jobs.dm" -#include "scavver_gantry_radio.dm" - -/datum/map_template/ruin/away_site/scavver_gantry - name = "\improper Salvage Gantry" - id = "awaysite_gantry" - description = "Salvage Gantry turned Ship" - suffixes = list("scavver/scavver_gantry-1.dmm","scavver/scavver_gantry-2.dmm") - spawn_cost = 1 - player_cost = 4 - accessibility_weight = 10 - shuttles_to_initialise = list( - /datum/shuttle/autodock/overmap/scavver_gantry, - /datum/shuttle/autodock/overmap/scavver_gantry/two, - /datum/shuttle/autodock/overmap/scavver_gantry/three, - /datum/shuttle/autodock/ferry/gantry - ) - area_usage_test_exempted_root_areas = list(/area/scavver) - apc_test_exempt_areas = list( - /area/scavver/yachtdown = NO_SCRUBBER|NO_VENT, - /area/scavver/yachtup = NO_SCRUBBER|NO_VENT, - /area/scavver/gantry/down1 = NO_SCRUBBER|NO_VENT, - /area/scavver/gantry/down2= NO_SCRUBBER|NO_VENT, - /area/scavver/gantry/up1 = NO_SCRUBBER|NO_VENT, - /area/scavver/gantry/up2 = NO_SCRUBBER|NO_VENT, - /area/scavver/gantry/lift = NO_SCRUBBER|NO_VENT|NO_APC, - /area/scavver/harvestpod = NO_SCRUBBER|NO_VENT - ) - spawn_weight = 0.67 - -/obj/effect/submap_landmark/joinable_submap/scavver_gantry - name = "Salvage Gantry" - archetype = /decl/submap_archetype/derelict/scavver_gantry - -/decl/submap_archetype/derelict/scavver_gantry - descriptor = "Salvage Gantry turned Ship." - map = "Salvage Gantry" - crew_jobs = list( - /datum/job/submap/scavver_pilot, - /datum/job/submap/scavver_doctor, - /datum/job/submap/scavver_engineer - ) - -/obj/effect/overmap/visitable/ship/scavver_gantry - name = "Unknown Vessel" - desc = "Sensor array detects a medium-sized vessel of irregular shape. Vessel origin is unidentifiable." - vessel_mass = 1200 - fore_dir = NORTH - burn_delay = 2 SECONDS - hide_from_reports = TRUE - known = FALSE - initial_generic_waypoints = list( - "nav_gantry_one", - "nav_gantry_two", - "nav_gantry_three", - "nav_gantry_four", - "nav_gantry_five" - ) - initial_restricted_waypoints = list( - "ITV The Reclaimer" = list("nav_hangar_gantry_one"), - "ITV Vulcan" = list("nav_hangar_gantry_two"), - "ITV Spiritus" = list("nav_hangar_gantry_three", "nav_hangar_gantry_four", "nav_hangar_gantry_five", "nav_hangar_gantry_six"), - "Charon" = list("nav_gantry_charon"), - "Guppy" = list("nav_gantry_gup"), - "Aquila" = list("nav_gantry_aquila"), - "Desperado" = list("nav_gantry_desperado") - ) - -/obj/item/mech_component/sensors/light/salvage/prebuild() - ..() - software.installed_software = list(MECH_SOFTWARE_UTILITY, MECH_SOFTWARE_ENGINEERING) - -/mob/living/exosuit/premade/salvage_gantry - name = "\improper Carrion Crawler" - desc = "An outdated mech designed to strip and repair ships by crawling along their hull. This one won't be doing many repairs anymore." - -/mob/living/exosuit/premade/salvage_gantry/Initialize() - if(!body) - body = new /obj/item/mech_component/chassis/pod(src) - body.color = COLOR_ORANGE - if(!legs) - legs = new /obj/item/mech_component/propulsion/spider(src) - legs.color = COLOR_GUNMETAL - if(!arms) - arms = new /obj/item/mech_component/manipulators/powerloader(src) - arms.color = COLOR_GUNMETAL - if(!head) - head = new /obj/item/mech_component/sensors/light/salvage(src) - head.color = COLOR_GUNMETAL - - . = ..() - -/mob/living/exosuit/premade/salvage_gantry/spawn_mech_equipment() - install_system(new /obj/item/mech_equipment/light(src), HARDPOINT_HEAD) - install_system(new /obj/item/mech_equipment/clamp(src), HARDPOINT_RIGHT_HAND) - install_system(new /obj/item/mech_equipment/mounted_system/taser/plasma(src), HARDPOINT_LEFT_HAND) - install_system(new /obj/item/mech_equipment/ionjets(src), HARDPOINT_BACK) - -/area/scavver - icon = 'maps/away/scavver/scavver_gantry_sprites.dmi' - -/area/scavver/gantry/up1 - name = "\improper Upper Salvage Gantry Arm" - icon_state = "gantry_up_1" - -/area/scavver/gantry/up2 - name = "\improper Upper Salvage Gantry Spine" - icon_state = "gantry_up_2" - -/area/scavver/gantry/down1 - name = "\improper Lower Salvage Gantry Arm" - icon_state = "gantry_down_1" - -/area/scavver/gantry/down2 - name = "\improper Lower Salvage Gantry Spine" - icon_state = "gantry_down_2" - -/area/scavver/gantry/lift - name = "\improper Salvage Gantry Lift" - icon_state = "gantry_lift" - requires_power = 0 - -/area/scavver/yachtup - name = "\improper Private Yacht Upper Deck" - icon_state = "gantry_yacht_up" - -/area/scavver/yachtdown - name = "\improper Private Yacht Lower Deck" - icon_state = "gantry_yacht_down" - -/area/scavver/yachtdown/thrusters - name = "\improper Private Yacht Lower Deck Thrusters" - icon_state = "gantry_yacht_up" - -/area/scavver/hab - name = "\improper Habitation Module" - icon_state = "gantry_hab" - area_flags = AREA_FLAG_RAD_SHIELDED - -/area/scavver/calypso - name = "\improper ITV Calypso" - icon_state = "gantry_calypso" - area_flags = AREA_FLAG_RAD_SHIELDED - -/area/scavver/lifepod - name = "\improper ITV The Reclaimer" - icon_state = "gantry_lifepod" - area_flags = AREA_FLAG_RAD_SHIELDED - -/area/scavver/escapepod - name = "\improper ITV Vulcan" - icon_state = "gantry_pod" - area_flags = AREA_FLAG_RAD_SHIELDED - -/area/scavver/harvestpod - name = "\improper ITV Spiritus" - icon_state = "gantry_yacht_down" - area_flags = AREA_FLAG_RAD_SHIELDED - - -//smes -/obj/machinery/power/smes/buildable/preset/scavver/smes - uncreated_component_parts = list(/obj/item/stock_parts/smes_coil = 1) - _input_maxed = TRUE - _output_maxed = TRUE - _input_on = TRUE - _output_on = TRUE - -/obj/machinery/suit_storage_unit/engineering/salvage/gantry - name = "Salvage Engineering Voidsuit Storage Unit" - suit= /obj/item/clothing/suit/space/void/engineering/salvage - helmet = /obj/item/clothing/head/helmet/space/void/engineering/salvage/engi - mask = /obj/item/clothing/mask/breath - req_access = list() - -/obj/machinery/suit_storage_unit/engineering/salvage/gantry/med - name = "Salvage Medical Voidsuit Storage Unit" - suit= /obj/item/clothing/suit/space/void/engineering/salvage - helmet = /obj/item/clothing/head/helmet/space/void/engineering/salvage/med - mask = /obj/item/clothing/mask/breath - -/obj/machinery/suit_storage_unit/engineering/salvage/gantry/pilot - name = "Salvage Pilot Voidsuit Storage Unit" - suit= /obj/item/clothing/suit/space/void/engineering/salvage - helmet = /obj/item/clothing/head/helmet/space/void/engineering/salvage/pilot - mask = /obj/item/clothing/mask/breath - -/obj/structure/closet/secure_closet/freezer/fridge/scavver - req_access = list() - -/obj/structure/closet/secure_closet/freezer/fridge/scavver/WillContain() - return list( - /obj/item/reagent_containers/food/drinks/milk = 6, - /obj/item/reagent_containers/food/drinks/soymilk = 4, - /obj/item/storage/fancy/egg_box = 4 - ) diff --git a/maps/away/scavver/scavver_gantry_jobs.dm b/maps/away/scavver/scavver_gantry_jobs.dm deleted file mode 100644 index a3d53ce718297..0000000000000 --- a/maps/away/scavver/scavver_gantry_jobs.dm +++ /dev/null @@ -1,180 +0,0 @@ -/datum/job/submap/scavver_pilot - title = "Salvage Pilot" - total_positions = 1 - outfit_type = /decl/hierarchy/outfit/job/scavver/pilot - supervisors = "The trust of your fellow crew." - info = "You are the pilot of your meagre Scavenger Crew. Keep your crew safe, and seek supplies for your rig. \ - Your weapons are limited; trade, salvage, but avoid conflict as a matter of course." - whitelisted_species = list(SPECIES_HUMAN,SPECIES_IPC,SPECIES_SPACER,SPECIES_GRAVWORLDER,SPECIES_VATGROWN,SPECIES_TRITONIAN,SPECIES_MULE) - is_semi_antagonist = TRUE - min_skill = list( - SKILL_HAULING = SKILL_BASIC, - SKILL_EVA = SKILL_EXPERT, - SKILL_MECH = SKILL_MAX, - SKILL_SCIENCE = SKILL_ADEPT, - SKILL_PILOT = SKILL_ADEPT, - SKILL_COMBAT = SKILL_ADEPT, - SKILL_WEAPONS = SKILL_ADEPT - ) - - max_skill = list( - SKILL_BUREAUCRACY = SKILL_MAX, - SKILL_FINANCE = SKILL_MAX, - SKILL_EVA = SKILL_MAX, - SKILL_PILOT = SKILL_MAX, - SKILL_HAULING = SKILL_MAX, - SKILL_COMPUTER = SKILL_MAX, - SKILL_BOTANY = SKILL_MAX, - SKILL_COOKING = SKILL_MAX, - SKILL_COMBAT = SKILL_MAX, - SKILL_WEAPONS = SKILL_MAX, - SKILL_FORENSICS = SKILL_MAX, - SKILL_CONSTRUCTION = SKILL_MAX, - SKILL_ELECTRICAL = SKILL_EXPERT, - SKILL_ATMOS = SKILL_EXPERT, - SKILL_ENGINES = SKILL_EXPERT, - SKILL_DEVICES = SKILL_MAX, - SKILL_SCIENCE = SKILL_MAX, - SKILL_MEDICAL = SKILL_EXPERT, - SKILL_ANATOMY = SKILL_EXPERT, - SKILL_CHEMISTRY = SKILL_EXPERT - ) - skill_points = 20 - -/datum/job/submap/scavver_doctor - title = "Salvage Doctor" - total_positions = 1 - outfit_type = /decl/hierarchy/outfit/job/scavver/doctor - supervisors = "The trust of those you heal." - info = "You are the doctor aboard your meagre Salvage team. Keep everyone alive. Your weapons are limited; trade, salvage, but avoid conflict as a matter of course." - whitelisted_species = list(SPECIES_HUMAN,SPECIES_IPC,SPECIES_SPACER,SPECIES_GRAVWORLDER,SPECIES_VATGROWN,SPECIES_TRITONIAN,SPECIES_MULE) - is_semi_antagonist = TRUE - min_skill = list( - SKILL_HAULING = SKILL_BASIC, - SKILL_EVA = SKILL_EXPERT, - SKILL_MEDICAL = SKILL_EXPERT, - SKILL_ANATOMY = SKILL_EXPERT, - SKILL_CHEMISTRY = SKILL_BASIC, - SKILL_DEVICES = SKILL_ADEPT - ) - - max_skill = list( - SKILL_BUREAUCRACY = SKILL_MAX, - SKILL_FINANCE = SKILL_MAX, - SKILL_EVA = SKILL_MAX, - SKILL_MECH = SKILL_MAX, - SKILL_PILOT = SKILL_MAX, - SKILL_HAULING = SKILL_MAX, - SKILL_COMPUTER = SKILL_MAX, - SKILL_BOTANY = SKILL_MAX, - SKILL_COOKING = SKILL_MAX, - SKILL_COMBAT = SKILL_MAX, - SKILL_WEAPONS = SKILL_MAX, - SKILL_FORENSICS = SKILL_MAX, - SKILL_CONSTRUCTION = SKILL_ADEPT, - SKILL_ELECTRICAL = SKILL_ADEPT, - SKILL_ATMOS = SKILL_ADEPT, - SKILL_ENGINES = SKILL_ADEPT, - SKILL_DEVICES = SKILL_MAX, - SKILL_SCIENCE = SKILL_MAX, - SKILL_MEDICAL = SKILL_MAX, - SKILL_ANATOMY = SKILL_MAX, - SKILL_CHEMISTRY = SKILL_MAX - ) - skill_points = 20 - -/datum/job/submap/scavver_engineer - title = "Salvage Engineer" - total_positions = 2 - outfit_type = /decl/hierarchy/outfit/job/scavver/engineer - supervisors = "The trust of your fellow crew." - info = "You are an Engineer aboard your meagre Salvage team. Keep your rig in functional order, upgrade what systems you can, and don't space yourself. \ - Your weapons are limited; trade, salvage, but avoid conflict as a matter of course." - whitelisted_species = list(SPECIES_HUMAN,SPECIES_IPC,SPECIES_SPACER,SPECIES_GRAVWORLDER,SPECIES_VATGROWN,SPECIES_TRITONIAN,SPECIES_MULE) - is_semi_antagonist = TRUE - min_skill = list( - SKILL_HAULING = SKILL_BASIC, - SKILL_COMPUTER = SKILL_BASIC, - SKILL_EVA = SKILL_EXPERT, - SKILL_CONSTRUCTION = SKILL_ADEPT, - SKILL_ELECTRICAL = SKILL_BASIC, - SKILL_ATMOS = SKILL_BASIC, - SKILL_ENGINES = SKILL_BASIC - ) - - max_skill = list( - SKILL_BUREAUCRACY = SKILL_MAX, - SKILL_FINANCE = SKILL_MAX, - SKILL_EVA = SKILL_MAX, - SKILL_MECH = SKILL_MAX, - SKILL_PILOT = SKILL_MAX, - SKILL_HAULING = SKILL_MAX, - SKILL_COMPUTER = SKILL_MAX, - SKILL_BOTANY = SKILL_MAX, - SKILL_COOKING = SKILL_MAX, - SKILL_COMBAT = SKILL_MAX, - SKILL_WEAPONS = SKILL_MAX, - SKILL_FORENSICS = SKILL_MAX, - SKILL_CONSTRUCTION = SKILL_MAX, - SKILL_ELECTRICAL = SKILL_MAX, - SKILL_ATMOS = SKILL_MAX, - SKILL_ENGINES = SKILL_MAX, - SKILL_DEVICES = SKILL_MAX, - SKILL_SCIENCE = SKILL_MAX, - SKILL_MEDICAL = SKILL_ADEPT, - SKILL_ANATOMY = SKILL_ADEPT, - SKILL_CHEMISTRY = SKILL_ADEPT - ) - skill_points = 20 - -/obj/effect/submap_landmark/spawnpoint/scavver_pilot - name = "Salvage Pilot" - -/obj/effect/submap_landmark/spawnpoint/scavver_doctor - name = "Salvage Doctor" - -/obj/effect/submap_landmark/spawnpoint/scavver_engineer - name = "Salvage Engineer" - -/decl/hierarchy/outfit/job/scavver - name = "Salvager" - l_ear = /obj/item/device/radio/headset/map_preset/scavver - r_ear = null - uniform = /obj/item/clothing/under/frontier - r_pocket = /obj/item/device/radio/map_preset/scavver - l_pocket = /obj/item/crowbar/prybar - shoes = /obj/item/clothing/shoes/workboots - gloves = /obj/item/clothing/gloves/thick - belt = /obj/item/gun/energy/gun/small - hierarchy_type = /decl/hierarchy/outfit/job/scavver - id_types = null - pda_type = null - -/decl/hierarchy/outfit/job/scavver/engineer - name = "Salvage Engineer" - uniform = /obj/item/clothing/under/hazard - r_pocket = /obj/item/device/radio/map_preset/scavver - l_pocket = /obj/item/crowbar/prybar - shoes = /obj/item/clothing/shoes/workboots - gloves = /obj/item/clothing/gloves/thick/duty - glasses = /obj/item/clothing/glasses/meson - belt = null - -/decl/hierarchy/outfit/job/scavver/pilot - name = "Salvage Pilot" - uniform = /obj/item/clothing/under/rank/dispatch - suit = /obj/item/clothing/suit/armor/pcarrier/light - r_pocket = /obj/item/device/radio/map_preset/scavver - l_pocket = /obj/item/crowbar/prybar - shoes = /obj/item/clothing/shoes/jackboots - belt = null - -/decl/hierarchy/outfit/job/scavver/doctor - name = "Salvage Doctor" - uniform = /obj/item/clothing/under/caretaker - r_pocket = /obj/item/device/radio/map_preset/scavver - l_pocket = /obj/item/crowbar/prybar - suit = /obj/item/clothing/suit/storage/toggle/labcoat - shoes = /obj/item/clothing/shoes/white - gloves = /obj/item/clothing/gloves/latex - belt = null diff --git a/maps/away/scavver/scavver_gantry_radio.dm b/maps/away/scavver/scavver_gantry_radio.dm deleted file mode 100644 index 10ce0f1822df4..0000000000000 --- a/maps/away/scavver/scavver_gantry_radio.dm +++ /dev/null @@ -1,13 +0,0 @@ -/obj/item/device/radio/map_preset/scavver - preset_name = "Gantry" - -/obj/item/device/radio/intercom/map_preset/scavver - preset_name = "Gantry" - -/obj/item/device/encryptionkey/map_preset/scavver - preset_name = "Gantry" - icon_state = "cargo_cypherkey" - -/obj/item/device/radio/headset/map_preset/scavver - preset_name = "Gantry" - encryption_key = /obj/item/device/encryptionkey/map_preset/scavver diff --git a/maps/away/scavver/scavver_gantry_shuttles.dm b/maps/away/scavver/scavver_gantry_shuttles.dm deleted file mode 100644 index c13dde109f458..0000000000000 --- a/maps/away/scavver/scavver_gantry_shuttles.dm +++ /dev/null @@ -1,242 +0,0 @@ -/obj/effect/overmap/visitable/ship/landable/scavver_gantry - name = "ITV The Reclaimer" - shuttle = "ITV The Reclaimer" - desc = "Sensor array detects a small vessel, claiming to be 'ITV The Reclaimer', an 'Armalev Industries Skyfin-E, Exoplanetary Suvival Pod'. Your sensors array describes the vessel exterior as 'irreconcilable' with the exterior of a 'Skyfin-E'" - fore_dir = SOUTH - vessel_size = SHIP_SIZE_SMALL - moving_state = "ship_moving" - max_speed = 1/(3 SECONDS) - burn_delay = 2 SECONDS - vessel_mass = 6000 - fore_dir = SOUTH - skill_needed = SKILL_BASIC - vessel_size = SHIP_SIZE_SMALL - -/obj/effect/overmap/visitable/ship/landable/scavver_gantry/two - name = "ITV Vulcan" - shuttle = "ITV Vulcan" - desc = "Sensor array detects a tiny vessel, claiming to be 'ITV Vulcan', a utility pod of unknown make." - fore_dir = NORTH - skill_needed = SKILL_BASIC - vessel_size = SHIP_SIZE_TINY - moving_state = "ship_moving" - max_speed = 1/(4 SECONDS) - burn_delay = 2.5 SECONDS - vessel_mass = 3500 //more inefficient than GUP - -/obj/effect/overmap/visitable/ship/landable/scavver_gantry/three - name = "Unmarked shuttle" - shuttle = "ITV Spiritus" - desc = "Sensor array detects a tiny, unmarked vessel." - fore_dir = NORTH - skill_needed = SKILL_BASIC - vessel_size = SHIP_SIZE_TINY - -/obj/machinery/computer/shuttle_control/explore/scavver_gantry - name = "landing control console" - shuttle_tag = "ITV The Reclaimer" - -/obj/machinery/computer/shuttle_control/explore/scavver_gantry/two - name = "landing control console" - shuttle_tag = "ITV Vulcan" - -/obj/machinery/computer/shuttle_control/explore/scavver_gantry/three - name = "landing control console" - shuttle_tag = "ITV Spiritus" - -/datum/shuttle/autodock/overmap/scavver_gantry - name = "ITV The Reclaimer" - warmup_time = 5 - move_time = 95 - shuttle_area = list(/area/scavver/lifepod) - current_location = "nav_hangar_gantry_one" - landmark_transition = "nav_transit_gantry_one" - range = 1 - fuel_consumption = 5 - ceiling_type = /turf/simulated/floor/shuttle_ceiling - flags = SHUTTLE_FLAGS_PROCESS - defer_initialisation = TRUE - -/datum/shuttle/autodock/overmap/scavver_gantry/two - name = "ITV Vulcan" - warmup_time = 5 - move_time = 35 - shuttle_area = list(/area/scavver/escapepod) - current_location = "nav_hangar_gantry_two" - landmark_transition = "nav_transit_gantry_two" - range = 1 - fuel_consumption = 3 - ceiling_type = /turf/simulated/floor/shuttle_ceiling - flags = SHUTTLE_FLAGS_PROCESS - defer_initialisation = TRUE - -/datum/shuttle/autodock/overmap/scavver_gantry/three - name = "ITV Spiritus" - warmup_time = 5 - move_time = 35 - shuttle_area = list(/area/scavver/harvestpod) - current_location = "nav_hangar_gantry_three" - landmark_transition = "nav_transit_gantry_three" - range = 1 - fuel_consumption = 5 - ceiling_type = /turf/simulated/floor/shuttle_ceiling - flags = SHUTTLE_FLAGS_PROCESS - defer_initialisation = TRUE - -/obj/effect/shuttle_landmark/scavver_gantry - name = "The Reclaimer Dock" - landmark_tag = "nav_hangar_gantry_one" - base_area = /area/space - movable_flags = MOVABLE_FLAG_EFFECTMOVE - -/obj/effect/shuttle_landmark/transit/scavver_gantry - name = "In transit" - landmark_tag = "nav_transit_gantry_one" - -/obj/effect/shuttle_landmark/scavver_gantry/two - name = "Vulcan Dock" - landmark_tag = "nav_hangar_gantry_two" - base_area = /area/space - movable_flags = MOVABLE_FLAG_EFFECTMOVE - -/obj/effect/shuttle_landmark/transit/scavver_gantry/two - name = "In transit" - landmark_tag = "nav_transit_gantry_two" - -/obj/effect/shuttle_landmark/scavver_gantry/three - name = "Spiritus Dock" - landmark_tag = "nav_hangar_gantry_three" - base_area = /area/space - movable_flags = MOVABLE_FLAG_EFFECTMOVE - -/obj/effect/shuttle_landmark/scavver_gantry/four - name = "Fuel - Reclaimer - Spiritus Dock" - landmark_tag = "nav_hangar_gantry_four" - -/obj/effect/shuttle_landmark/scavver_gantry/five - name = "Fuel - Yacht Upper - Spiritus Dock" - landmark_tag = "nav_hangar_gantry_five" - -/obj/effect/shuttle_landmark/scavver_gantry/six - name = "Fuel - Yacht Lower - Spiritus Dock" - landmark_tag = "nav_hangar_gantry_six" - -/obj/effect/shuttle_landmark/scavver_gantry/torch - name = "SEV Torch ITV The Reclaimer Dock" - landmark_tag = "nav_hangar_gantry_torch" - -/obj/effect/shuttle_landmark/scavver_gantry/torch/two - name = "SEV Torch ITV Vulcan Dock" - landmark_tag = "nav_hangar_gantry_torch_two" - -/obj/effect/shuttle_landmark/scavver_gantry/torch/three - name = "SEV Torch ITV Spiritus Dock" - landmark_tag = "nav_hangar_gantry_torch_three" - -/obj/effect/shuttle_landmark/transit/scavver_gantry/three - name = "In transit" - landmark_tag = "nav_transit_gantry_three" - -/obj/effect/shuttle_landmark/scavver_gantry/generic - name = "Dock One" - landmark_tag = "nav_gantry_one" - base_area = /area/space - -/obj/effect/shuttle_landmark/scavver_gantry/generic/two - name = "Dock Two" - landmark_tag = "nav_gantry_two" - base_area = /area/space - -/obj/effect/shuttle_landmark/scavver_gantry/generic/three - name = "Dock Three" - landmark_tag = "nav_gantry_three" - base_area = /area/space - -/obj/effect/shuttle_landmark/scavver_gantry/generic/four - name = "Dock Four" - landmark_tag = "nav_gantry_four" - base_area = /area/space - -/obj/effect/shuttle_landmark/scavver_gantry/generic/five - name = "Dock Five" - landmark_tag = "nav_gantry_five" - base_area = /area/space - -/obj/effect/shuttle_landmark/scavver_gantry/generic/gup - name = "GUP Dock" - landmark_tag = "nav_gantry_gup" - base_area = /area/space - -/obj/effect/shuttle_landmark/scavver_gantry/generic/charon - name = "Charon Dock" - landmark_tag = "nav_gantry_charon" - base_area = /area/space - -/obj/effect/shuttle_landmark/scavver_gantry/generic/aquila - name = "Aquila Dock" - landmark_tag = "nav_gantry_aquila" - base_area = /area/space - -/obj/effect/shuttle_landmark/scavver_gantry/generic/desperado - name = "Desperado Dock" - landmark_tag = "nav_gantry_desperado" - base_area = /area/space -//elevator - -/obj/machinery/computer/shuttle_control/lift/gantry - name = "cargo lift controls" - shuttle_tag = "Gantry Lift" - ui_template = "shuttle_control_console_lift.tmpl" - icon_state = "tiny" - icon_keyboard = "tiny_keyboard" - icon_screen = "lift" - density = FALSE - -/datum/shuttle/autodock/ferry/gantry - name = "Gantry Lift" - shuttle_area = /area/scavver/gantry/lift - warmup_time = 3 - waypoint_station = "nav_scavver_gantry_lift_top" - waypoint_offsite = "nav_scavver_gantry_lift_bottom" - sound_takeoff = 'sound/effects/lift_heavy_start.ogg' - sound_landing = 'sound/effects/lift_heavy_stop.ogg' - ceiling_type = null - knockdown = 0 - defer_initialisation = TRUE - -/obj/effect/shuttle_landmark/lift/gantry/top - name = "Top Deck" - landmark_tag = "nav_scavver_gantry_lift_top" - base_area = /area/scavver/gantry/up1 - base_turf = /turf/simulated/open - -/obj/effect/shuttle_landmark/lift/gantry/bottom - name = "Lower Deck" - landmark_tag = "nav_scavver_gantry_lift_bottom" - flags = SLANDMARK_FLAG_AUTOSET - base_area = /area/scavver/gantry/down1 - base_turf = /turf/simulated/floor/airless - -/decl/stock_part_preset/radio/receiver/vent_pump/vulcan - frequency = 1431 - -/decl/stock_part_preset/radio/event_transmitter/vent_pump/vulcan - frequency = 1431 - -/obj/machinery/atmospherics/unary/vent_pump/high_volume/vulcan - stock_part_presets = list( - /decl/stock_part_preset/radio/receiver/vent_pump/vulcan = 1, - /decl/stock_part_preset/radio/event_transmitter/vent_pump/vulcan = 1 - ) - -/decl/stock_part_preset/radio/receiver/vent_scrubber/vulcan - frequency = 1431 - -/decl/stock_part_preset/radio/event_transmitter/vent_scrubber/vulcan - frequency = 1431 - -/obj/machinery/atmospherics/unary/vent_scrubber/vulcan - stock_part_presets = list( - /decl/stock_part_preset/radio/receiver/vent_scrubber/vulcan = 1, - /decl/stock_part_preset/radio/event_transmitter/vent_scrubber/vulcan = 1 - ) \ No newline at end of file diff --git a/maps/away/scavver/scavver_gantry_sprites.dmi b/maps/away/scavver/scavver_gantry_sprites.dmi deleted file mode 100644 index 1e987e11daef7..0000000000000 Binary files a/maps/away/scavver/scavver_gantry_sprites.dmi and /dev/null differ diff --git a/maps/away/skrellscoutship/skrellscoutship.dm b/maps/away/skrellscoutship/skrellscoutship.dm deleted file mode 100644 index 831fb95761129..0000000000000 --- a/maps/away/skrellscoutship/skrellscoutship.dm +++ /dev/null @@ -1,309 +0,0 @@ -#define WEBHOOK_SUBMAP_LOADED_SKRELL "webhook_submap_skrell" - -#include "skrellscoutship_areas.dm" -#include "skrellscoutship_shuttles.dm" -#include "skrellscoutship_radio.dm" -#include "skrellscoutship_machines.dm" - -/datum/map_template/ruin/away_site/skrellscoutship - name = "Skrellian Scout Ship" - id = "awaysite_skrell_scout" - description = "A Skrellian SDTF scouting vessel." - suffixes = list("skrellscoutship/skrellscoutship_revamp.dmm") - spawn_cost = 0.5 - player_cost = 4 - shuttles_to_initialise = list(/datum/shuttle/autodock/overmap/skrellscoutship, /datum/shuttle/autodock/overmap/skrellscoutshuttle) - apc_test_exempt_areas = list( - /area/ship/skrellscoutship/externalwing/port = NO_SCRUBBER|NO_VENT|NO_APC, - /area/ship/skrellscoutship/externalwing/starboard = NO_SCRUBBER|NO_VENT|NO_APC - ) - spawn_weight = 0.67 - -/obj/effect/overmap/visitable/sector/skrellscoutspace - name = "Empty Sector" - desc = "Slight traces of a cloaking device are present. Unable to determine exact location." - in_space = TRUE - icon_state = "event" - hide_from_reports = TRUE - -/obj/effect/submap_landmark/joinable_submap/skrellscoutship - name = "Xilvuxix" - archetype = /decl/submap_archetype/skrellscoutship - -/obj/effect/submap_landmark/spawnpoint/skrellscoutship - name = "Qrri-Zuumqix" - movable_flags = MOVABLE_FLAG_EFFECTMOVE - -/obj/effect/submap_landmark/spawnpoint/skrellscoutship/leader - name = "Qrri-Vuxix" - -/decl/webhook/submap_loaded/skrell - id = WEBHOOK_SUBMAP_LOADED_SKRELL - -/decl/submap_archetype/skrellscoutship - descriptor = "Skrellian Scout Ship" - map = "Xilvuxix" - crew_jobs = list( - /datum/job/submap/skrellscoutship_crew, - /datum/job/submap/skrellscoutship_crew/leader - ) - call_webhook = WEBHOOK_SUBMAP_LOADED_SKRELL - -//Access + Loadout - -var/global/const/access_skrellscoutship = "ACCESS_SKRELLSCOUT" - -/datum/access/skrellscoutship - id = access_skrellscoutship - desc = "SSV Crewman" - region = ACCESS_REGION_NONE - -/obj/item/card/id/skrellscoutship - color = COLOR_GRAY40 - detail_color = "#7331c4" - access = list(access_skrellscoutship) - -/datum/job/submap/skrellscoutship_crew/leader - title = "Qrri-Vuxix" - supervisors = "your SDTF" - total_positions = 1 - outfit_type = /decl/hierarchy/outfit/job/skrellscoutship - info = "Your vessel is scouting through unknown space, working to map out any potential dangers, as well as potential allies." - is_semi_antagonist = TRUE - min_skill = list(SKILL_EVA = SKILL_ADEPT, - SKILL_PILOT = SKILL_ADEPT, - SKILL_HAULING = SKILL_ADEPT, - SKILL_COMBAT = SKILL_ADEPT, - SKILL_WEAPONS = SKILL_ADEPT, - SKILL_MEDICAL = SKILL_BASIC) - -/datum/job/submap/skrellscoutship_crew - title = "Qrri-Zuumqix" - supervisors = "your Qrri-Vuxix" - total_positions = 5 - whitelisted_species = list("Skrell") - outfit_type = /decl/hierarchy/outfit/job/skrellscoutship - info = "Your vessel is scouting through unknown space, working to map out any potential dangers, as well as potential allies." - branch = /datum/mil_branch/skrell_fleet - rank = /datum/mil_rank/skrell_fleet - allowed_branches = list(/datum/mil_branch/skrell_fleet) - allowed_ranks = list(/datum/mil_rank/skrell_fleet) - skill_points = 30 - is_semi_antagonist = TRUE - min_skill = list(SKILL_EVA = SKILL_ADEPT, - SKILL_HAULING = SKILL_ADEPT, - SKILL_COMBAT = SKILL_ADEPT, - SKILL_WEAPONS = SKILL_ADEPT, - SKILL_MEDICAL = SKILL_BASIC) - -/datum/job/submap/skrellscoutship_crew/equip(var/mob/living/carbon/human/H, var/alt_title, var/datum/mil_branch/branch, var/datum/mil_rank/grade) - . = ..(H, alt_title, branch, grade) //passing through arguments - //Limited to subcastes that make sense on the vessel. No need for ground-forces or R&D on such a ship. - var/skrellscoutcastes = list( - "Malish-Katish" = list( - "Mero'ta-Ketish", - "Toglo'i-Ketish" - ), - "Kanin-Katish" = list( - "Xiqarr-Ketish", - "Mero'tol-Ketish", - "Goxo'i-Ketish" - ), - "Raskinta-Katish" = list( - "Me'kerr-Ketish", - "Qi'kerr-Ketish", - "Me'xoal-Ketish" - ) - ) - - var/skrellcaste = input(H, "What is your Skrell's Caste?", "SDTF Rank") as null|anything in skrellscoutcastes - if(skrellcaste) - var/skrellsubcaste = input(H, "What is your Skrell's Subcaste?", "SDTF Rank") as null|anything in skrellscoutcastes[skrellcaste] - var/obj/item/card/id/C = H.wear_id - if(istype(C)) - C.assignment = skrellsubcaste - -/obj/item/clothing/gloves/thick/swat/skrell - name = "black gloves" - desc = "A pair of black, reinforced gloves. The tag on the inner stitching appears to be written in some form of Skrellian." - -/obj/item/clothing/under/skrelljumpsuit - name = "black bodysuit" - desc = "A sleek, skin-tight bodysuit designed to not wick moisture away from the body. The inner stitching appears to contain something written in Skrellian." - icon_state = "skrell_suit" - item_state = "skrell_suit" - worn_state = "skrell_suit" - -/decl/hierarchy/outfit/job/skrellscoutship - name = "Xilvuxix Crew" - uniform = /obj/item/clothing/under/skrelljumpsuit - shoes = /obj/item/clothing/shoes/dutyboots - gloves = /obj/item/clothing/gloves/thick/swat/skrell - pda_type = /obj/item/modular_computer/pda - pda_slot = slot_l_store - l_ear = /obj/item/device/radio/headset/map_preset/skrellscoutship - id_types = list(/obj/item/card/id/skrellscoutship) - l_pocket = /obj/item/clothing/accessory/badge/tags/skrell - - -/obj/item/reagent_containers/food/condiment/psilocybin - label_text = "Psilocybin" - starting_reagents = list(/datum/reagent/psilocybin = 50) - - -/obj/item/reagent_containers/food/condiment/mindbreaker - label_text = "Mindbreaker" - starting_reagents = list(/datum/reagent/mindbreaker = 50) - - -/obj/item/reagent_containers/food/condiment/space_drugs - label_text = "Ambrosia" - starting_reagents = list(/datum/reagent/space_drugs = 50) - - -/datum/mil_branch/skrell_fleet - name = "Skrellian Defense Task Force" - name_short = "SDTF" - email_domain = "sdtf.qb" - - rank_types = list(/datum/mil_rank/skrell_fleet) - spawn_rank_types = list(/datum/mil_rank/skrell_fleet) - -/datum/mil_rank/skrell_fleet - name = "NULL" - -/obj/machinery/power/apc/skrell - req_access = list(access_skrellscoutship) - -/obj/machinery/alarm/skrell - req_access = list(access_skrellscoutship) - target_temperature = T0C+40 - -/obj/machinery/alarm/skrell/Initialize() - . = ..() - TLV["pressure"] = list(ONE_ATMOSPHERE*0.80,ONE_ATMOSPHERE*0.90,ONE_ATMOSPHERE*1.30,ONE_ATMOSPHERE*1.40) /* kpa */ - TLV["temperature"] = list(T0C-26, T0C, T0C+80, T0C+90) // K - -/obj/machinery/alarm/skrell/server - target_temperature = T0C+10 - -/obj/machinery/alarm/skrell/server/Initialize() - . = ..() - TLV["temperature"] = list(T0C-26, T0C, T0C+30, T0C+40) // K - -/obj/machinery/power/smes/buildable/preset/skrell - uncreated_component_parts = list( - /obj/item/stock_parts/smes_coil/advanced = 2 - ) - _input_maxed = TRUE - _output_maxed = TRUE - _input_on = TRUE - _output_on = TRUE - _fully_charged = TRUE - -/obj/machinery/vending/medical/skrell - req_access = list(access_skrellscoutship) - -/obj/machinery/power/apc/debug/skrell - cell_type = /obj/item/cell/infinite - req_access = list(access_skrellscoutship) - -#undef WEBHOOK_SUBMAP_LOADED_SKRELL - -//Skrell Security Belt -/obj/item/storage/belt/holster/skrell - name = "skrellian holster belt" - desc = "Can hold security gear like handcuffs and flashes. This one has a convenient holster." - icon_state = "securitybelt" - item_state = "security" - storage_slots = 8 - overlay_flags = BELT_OVERLAY_ITEMS|BELT_OVERLAY_HOLSTER - can_hold = list( - /obj/item/crowbar, - /obj/item/grenade, - /obj/item/reagent_containers/spray/pepper, - /obj/item/handcuffs, - /obj/item/device/flash, - /obj/item/clothing/glasses, - /obj/item/ammo_casing/shotgun, - /obj/item/ammo_magazine, - /obj/item/reagent_containers/food/snacks/donut, - /obj/item/melee/baton, - /obj/item/melee/telebaton, - /obj/item/flame/lighter, - /obj/item/device/flashlight, - /obj/item/modular_computer/pda, - /obj/item/device/radio/headset, - /obj/item/device/hailer, - /obj/item/device/megaphone, - /obj/item/melee, - /obj/item/taperoll, - /obj/item/device/holowarrant, - /obj/item/magnetic_ammo, - /obj/item/device/binoculars, - /obj/item/clothing/gloves, - /obj/item/gun/energy/gun/skrell - ) - -//Skell Lights - -/obj/machinery/light/skrell - name = "skrellian light" - light_type = /obj/item/light/tube/skrell - desc = "Some kind of strange alien lighting technology." - - -/obj/item/light/tube/skrell - name = "skrellian light filament" - color = LIGHT_COLOUR_SKRELL - b_colour = LIGHT_COLOUR_SKRELL - desc = "Some kind of strange alien lightbulb technology." - random_tone = FALSE - -/obj/item/light/tube/large/skrell - name = "skrellian light filament" - color = LIGHT_COLOUR_SKRELL - b_colour = LIGHT_COLOUR_SKRELL - desc = "Some kind of strange alien lightbulb technology." - - -/obj/item/storage/box/lights/tubes/skrell - name = "box of replacement tubes" - icon_state = "lighttube" - startswith = list(/obj/item/light/tube/skrell = 17, - /obj/item/light/tube/large/skrell = 4) - -//Skrell Suit Dispensers -/obj/machinery/suit_storage_unit/skrell - boots = /obj/item/clothing/shoes/magboots; - color = "#00e1ff"; - helmet = /obj/item/clothing/head/helmet/space/void/skrell/white; - islocked = 1; - name = "Skrell Suit Storage Unit (White)"; - req_access = list("ACCESS_SKRELLSCOUT"); - suit = /obj/item/clothing/suit/space/void/skrell/white - -/obj/machinery/suit_storage_unit/skrell/black - boots = /obj/item/clothing/shoes/magboots; - color = "#00e1ff"; - helmet = /obj/item/clothing/head/helmet/space/void/skrell/black; - islocked = 1; - name = "Skrell Suit Storage Unit (Black)"; - req_access = list("ACCESS_SKRELLSCOUT"); - suit = /obj/item/clothing/suit/space/void/skrell/black - -//Skrell Devices - -/obj/item/tape_roll/skrell - name = "modular adhesive dispenser" - desc = "A roll of sticky tape. Possibly for taping ducks... or was that ducts?" - icon = 'icons/obj/bureaucracy.dmi' - icon_state = "taperoll" - color = "#40e0d0" - w_class = ITEM_SIZE_SMALL - -/obj/machinery/space_heater/skrell - color = "#40e0d0" - name = "thermal induction generator" - desc = "Made by Krri'gli Corp using thermal induction technology, this heater is guaranteed not to set anything, or anyone, on fire." - set_temperature = T0C+40 diff --git a/maps/away/skrellscoutship/skrellscoutship_areas.dm b/maps/away/skrellscoutship/skrellscoutship_areas.dm deleted file mode 100644 index 4f8f7e2df6d7e..0000000000000 --- a/maps/away/skrellscoutship/skrellscoutship_areas.dm +++ /dev/null @@ -1,122 +0,0 @@ -/area/ship/skrellscoutship - name = "\improper Skrellian Ship" - area_flags = AREA_FLAG_RAD_SHIELDED | AREA_FLAG_ION_SHIELDED - base_turf = /turf/space - req_access = list(access_skrellscoutship) - -/area/ship/skrellscoutship/solars - name = "\improper Solar Area" - -/area/ship/skrellscoutship/crew/hallway/d1 - name = "\improper Hallway - Deck 1" - -/area/ship/skrellscoutship/crew/hallway/d2 - name = "\improper Hallway - Deck 2" - -/area/ship/skrellscoutship/crew/rec - name = "\improper Recreational Area" - icon_state = "green" - -/area/ship/skrellscoutship/crew/fit - name = "\improper Exercise Area" - icon_state = "green" - -/area/ship/skrellscoutship/crew/toilets - name = "\improper Bathroom" - icon_state = "toilet" - -/area/ship/skrellscoutship/dock/alt - name = "\improper Docking Bay 2" - icon_state = "entry_1" - -/area/ship/skrellscoutship/robotics - name = "\improper Maintenance" - icon_state = "green" - -/area/ship/skrellscoutship/maintenance/power - name = "\improper Engineering" - icon_state = "engine_smes" - ambience = list('sound/ambience/ambigen3.ogg','sound/ambience/ambigen4.ogg','sound/ambience/ambigen5.ogg','sound/ambience/ambigen6.ogg','sound/ambience/ambigen7.ogg','sound/ambience/ambigen8.ogg','sound/ambience/ambigen9.ogg','sound/ambience/ambigen10.ogg','sound/ambience/ambigen11.ogg','sound/ambience/ambieng1.ogg') - -/area/ship/skrellscoutship/command/bridge - name = "\improper SSV Helm" - icon_state = "bridge" - -/area/ship/skrellscoutship/command/armory - name = "\improper Armory" - icon_state = "shuttlered" - -/area/ship/skrellscoutshuttle - name = "\improper SSV Shuttle" - icon_state = "bridge" - base_turf = /turf/simulated/floor/plating - area_flags = AREA_FLAG_RAD_SHIELDED | AREA_FLAG_ION_SHIELDED - req_access = list(access_skrellscoutship) - -//New Ship Areas - -/area/ship/skrellscoutship/wings/port - name = "\improper Port Corridor" - icon_state = "green" - -/area/ship/skrellscoutship/wings/starboard - name = "\improper Starboard Corridor" - icon_state = "green" - -/area/ship/skrellscoutship/brig - name = "\improper Holding Cell" - icon_state = "green" - -/area/ship/skrellscoutship/portcheckpoint - name = "\improper Port Checkpoint" - icon_state = "green" - -/area/ship/skrellscoutship/forestorage - name = "\improper Fore Storage" - icon_state = "green" - -/area/ship/skrellscoutship/externalwing/port - name = "\improper External Wing Port" - icon_state = "red" - -/area/ship/skrellscoutship/externalwing/starboard - name = "\improper External Wing Starboard" - icon_state = "red" - -/area/ship/skrellscoutship/corridor - name = "\improper Central Corridor" - icon_state = "blue" - -/area/ship/skrellscoutship/crew/quarters - name = "\improper Quarters" - icon_state = "crew_quarters" - -/area/ship/skrellscoutship/crew/medbay - name = "\improper Medical Bay" - icon_state = "medbay" - -/area/ship/skrellscoutship/crew/kitchen - name = "\improper Galley" - icon_state = "kitchen" - -/area/ship/skrellscoutship/maintenance/power - name = "\improper Engineering" - icon_state = "engine_smes" - ambience = list('sound/ambience/ambigen3.ogg','sound/ambience/ambigen4.ogg','sound/ambience/ambigen5.ogg','sound/ambience/ambigen6.ogg','sound/ambience/ambigen7.ogg','sound/ambience/ambigen8.ogg','sound/ambience/ambigen9.ogg','sound/ambience/ambigen10.ogg','sound/ambience/ambigen11.ogg','sound/ambience/ambieng1.ogg') - -/area/ship/skrellscoutship/hangar - name = "\improper Shuttle Dock" - icon_state = "auxstorage" - -/area/ship/skrellscoutship/command/armory - name = "\improper Armory" - icon_state = "shuttlered" - -/area/ship/skrellscoutship/dock - name = "\improper Docking Bay 1" - icon_state = "entry_1" - -/area/ship/skrellscoutship/maintenance/atmos - name = "\improper Atmospherics" - icon_state = "atmos" - ambience = list('sound/ambience/ambigen3.ogg','sound/ambience/ambigen4.ogg','sound/ambience/ambigen5.ogg','sound/ambience/ambigen6.ogg','sound/ambience/ambigen7.ogg','sound/ambience/ambigen8.ogg','sound/ambience/ambigen9.ogg','sound/ambience/ambigen10.ogg','sound/ambience/ambigen11.ogg','sound/ambience/ambiatm1.ogg') diff --git a/maps/away/skrellscoutship/skrellscoutship_machines.dm b/maps/away/skrellscoutship/skrellscoutship_machines.dm deleted file mode 100644 index 17aa67f873f0a..0000000000000 --- a/maps/away/skrellscoutship/skrellscoutship_machines.dm +++ /dev/null @@ -1,57 +0,0 @@ -/obj/machinery/computer/ship/sensors/skrell - construct_state = /decl/machine_construction/default/panel_closed/computer/no_deconstruct - base_type = /obj/machinery/computer/ship/sensors - print_language = LANGUAGE_SKRELLIAN - -// This is an absolutely stupid machine. Basically the same as the debug one with some alterations. -// It is a placeholder for a proper reactor setup (probably a RUST descendant) -/obj/machinery/power/skrell_reactor - name = "\improper Skrellian fusion stack" - desc = "A tall, gleaming assemblage of advanced alien machinery. It hums and crackles with restrained power." - icon = 'icons/obj/machines/power/fusion_core.dmi' - icon_state = "core1" - color = COLOR_PURPLE - var/on = TRUE - var/output_power = 9000 KILOWATTS - var/image/field_image - -/obj/machinery/power/skrell_reactor/attack_hand(mob/user) - . = ..() - - if(ishuman(user)) - var/mob/living/carbon/human/H = user - if(H.species.name != SPECIES_SKRELL) - to_chat(H, SPAN_WARNING("You have no idea how to use \the [src].")) - return - - user.visible_message(SPAN_NOTICE("\The [user] switches \the [src] [on ? "off" : "on"].")) - on = !on - update_icon() - -/obj/machinery/power/skrell_reactor/on_update_icon() - . = ..() - - if(!field_image) - field_image = image(icon = 'icons/obj/machines/power/fusion.dmi', icon_state = "emfield_s1") - field_image.color = COLOR_CYAN - field_image.alpha = 50 - field_image.layer = SINGULARITY_LAYER - field_image.appearance_flags |= RESET_COLOR - field_image.SetTransform(scale = 3) - - if(on) - overlays |= field_image - set_light(0.8, 1, 6, l_color = COLOR_CYAN) - icon_state = "core1" - else - overlays -= field_image - set_light(0) - icon_state = "core0" - -/obj/machinery/power/skrell_reactor/Initialize() - . = ..() - update_icon() - -/obj/machinery/power/skrell_reactor/Process() - if(on) - add_avail(output_power) diff --git a/maps/away/skrellscoutship/skrellscoutship_radio.dm b/maps/away/skrellscoutship/skrellscoutship_radio.dm deleted file mode 100644 index d786be4f1751b..0000000000000 --- a/maps/away/skrellscoutship/skrellscoutship_radio.dm +++ /dev/null @@ -1,32 +0,0 @@ -/obj/machinery/telecomms/hub/map_preset/skrellscoutship - preset_name = "Recon" - -/obj/machinery/telecomms/receiver/map_preset/skrellscoutship - preset_name = "Recon" - -/obj/machinery/telecomms/bus/map_preset/skrellscoutship - preset_name = "Recon" - -/obj/machinery/telecomms/processor/map_preset/skrellscoutship - preset_name = "Recon" - -/obj/machinery/telecomms/server/map_preset/skrellscoutship - preset_name = "Recon" - preset_color = COMMS_COLOR_SKRELL - -/obj/machinery/telecomms/broadcaster/map_preset/skrellscoutship - preset_name = "Recon" - -/obj/item/device/radio/map_preset/skrellscoutship - preset_name = "Recon" - -/obj/item/device/radio/intercom/map_preset/skrellscoutship - preset_name = "Recon" - -/obj/item/device/encryptionkey/map_preset/skrellscoutship - preset_name = "Recon" - icon_state = "medsci_cypherkey" - -/obj/item/device/radio/headset/map_preset/skrellscoutship - preset_name = "Recon" - encryption_key = /obj/item/device/encryptionkey/map_preset/skrellscoutship diff --git a/maps/away/skrellscoutship/skrellscoutship_revamp.dmm b/maps/away/skrellscoutship/skrellscoutship_revamp.dmm deleted file mode 100644 index 17ceda404b9ec..0000000000000 --- a/maps/away/skrellscoutship/skrellscoutship_revamp.dmm +++ /dev/null @@ -1,16320 +0,0 @@ -//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE -"aa" = ( -/obj/machinery/suit_storage_unit/skrell, -/obj/machinery/light/skrell{ - dir = 8 - }, -/obj/effect/floor_decal/industrial/outline/grey, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/tiled/skrell/green, -/area/ship/skrellscoutship/command/armory) -"ab" = ( -/obj/machinery/portable_atmospherics/canister/air, -/turf/simulated/floor/tiled/skrell/orange, -/area/ship/skrellscoutship/maintenance/atmos) -"ac" = ( -/turf/simulated/floor/tiled/skrell/orange, -/area/ship/skrellscoutship/maintenance/atmos) -"ad" = ( -/obj/structure/window/reinforced{ - dir = 4 - }, -/obj/machinery/portable_atmospherics/canister/empty, -/turf/simulated/floor/tiled/skrell/orange, -/area/ship/skrellscoutship/maintenance/atmos) -"ag" = ( -/obj/machinery/atmospherics/pipe/manifold/visible/cyan{ - dir = 4 - }, -/turf/simulated/floor/tiled/skrell/orange, -/area/ship/skrellscoutship/maintenance/atmos) -"ah" = ( -/obj/machinery/atmospherics/portables_connector, -/obj/machinery/portable_atmospherics/canister/empty, -/obj/effect/floor_decal/industrial/outline/red, -/turf/simulated/floor/tiled/skrell/orange, -/area/ship/skrellscoutship/maintenance/atmos) -"aj" = ( -/obj/machinery/door/window/brigdoor/northleft{ - dir = 2 - }, -/turf/simulated/floor/tiled/skrell/orange, -/area/ship/skrellscoutship/maintenance/atmos) -"ak" = ( -/obj/structure/window/reinforced, -/obj/structure/window/reinforced, -/obj/structure/window/reinforced{ - dir = 4 - }, -/obj/machinery/portable_atmospherics/canister/empty, -/turf/simulated/floor/tiled/skrell/orange, -/area/ship/skrellscoutship/maintenance/atmos) -"al" = ( -/obj/machinery/atmospherics/pipe/simple/visible/cyan{ - dir = 5 - }, -/turf/simulated/floor/tiled/skrell/orange, -/area/ship/skrellscoutship/maintenance/atmos) -"am" = ( -/obj/machinery/atmospherics/binary/pump/on, -/turf/simulated/floor/tiled/skrell/orange, -/area/ship/skrellscoutship/maintenance/atmos) -"an" = ( -/obj/machinery/atmospherics/binary/pump, -/turf/simulated/floor/tiled/skrell/orange, -/area/ship/skrellscoutship/maintenance/atmos) -"ao" = ( -/obj/machinery/atmospherics/binary/pump{ - dir = 1 - }, -/turf/simulated/floor/tiled/skrell/orange, -/area/ship/skrellscoutship/maintenance/atmos) -"ar" = ( -/obj/machinery/atmospherics/pipe/simple/visible/red{ - dir = 9 - }, -/turf/simulated/floor/tiled/skrell/orange, -/area/ship/skrellscoutship/maintenance/atmos) -"at" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/obj/structure/cable{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/turf/simulated/floor/tiled/skrell/orange, -/area/ship/skrellscoutship/maintenance/atmos) -"au" = ( -/obj/machinery/atmospherics/unary/vent_pump/on, -/turf/simulated/floor/tiled/skrell/orange, -/area/ship/skrellscoutship/maintenance/atmos) -"av" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/universal, -/turf/simulated/floor/tiled/skrell/orange, -/area/ship/skrellscoutship/maintenance/atmos) -"aw" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/turf/simulated/floor/tiled/skrell/orange, -/area/ship/skrellscoutship/maintenance/atmos) -"ay" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/tiled/skrell/orange, -/area/ship/skrellscoutship/maintenance/atmos) -"az" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers, -/turf/simulated/floor/tiled/skrell/orange, -/area/ship/skrellscoutship/maintenance/atmos) -"aA" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply, -/turf/simulated/floor/tiled/skrell/orange, -/area/ship/skrellscoutship/maintenance/atmos) -"aB" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 - }, -/obj/machinery/portable_atmospherics/powered/scrubber, -/turf/simulated/floor/tiled/skrell/orange, -/area/ship/skrellscoutship/maintenance/atmos) -"aC" = ( -/obj/machinery/portable_atmospherics/powered/scrubber, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled/skrell/orange, -/area/ship/skrellscoutship/maintenance/atmos) -"aD" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/portable_atmospherics/powered/pump/filled, -/turf/simulated/floor/tiled/skrell/orange, -/area/ship/skrellscoutship/maintenance/atmos) -"aE" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/obj/machinery/portable_atmospherics/powered/pump/filled, -/turf/simulated/floor/tiled/skrell/orange, -/area/ship/skrellscoutship/maintenance/atmos) -"aF" = ( -/obj/machinery/pipedispenser, -/turf/simulated/floor/tiled/skrell/orange, -/area/ship/skrellscoutship/maintenance/atmos) -"aI" = ( -/obj/effect/paint/black, -/turf/simulated/wall/r_wall, -/area/ship/skrellscoutship/wings/starboard) -"aJ" = ( -/obj/structure/window/reinforced{ - dir = 1 - }, -/turf/simulated/floor/tiled/skrell, -/area/ship/skrellscoutship/wings/starboard) -"aM" = ( -/obj/machinery/atmospherics/unary/vent_pump/on, -/obj/machinery/alarm/skrell{ - pixel_y = 22 - }, -/obj/structure/table/rack, -/obj/machinery/recharger/wallcharger{ - pixel_x = -26 - }, -/turf/simulated/floor/tiled/skrell, -/area/ship/skrellscoutshuttle) -"aO" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/obj/structure/table/rack, -/obj/machinery/recharger/wallcharger{ - pixel_x = 26 - }, -/turf/simulated/floor/tiled/skrell, -/area/ship/skrellscoutshuttle) -"aQ" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 5; - icon_state = "warning" - }, -/turf/simulated/floor/tiled/skrell/red, -/area/ship/skrellscoutship/hangar) -"aR" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/effect/paint/black, -/turf/simulated/wall/r_wall, -/area/ship/skrellscoutshuttle) -"aS" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/tiled/skrell, -/area/ship/skrellscoutshuttle) -"aT" = ( -/turf/simulated/floor/tiled/skrell, -/area/ship/skrellscoutshuttle) -"aU" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/table/rack, -/turf/simulated/floor/tiled/skrell, -/area/ship/skrellscoutshuttle) -"aV" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 10 - }, -/turf/simulated/floor/tiled/skrell/red, -/area/ship/skrellscoutship/hangar) -"aX" = ( -/obj/structure/cable/yellow{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 1 - }, -/turf/simulated/floor/tiled/skrell/red, -/area/ship/skrellscoutship/hangar) -"aY" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/turf/simulated/floor/tiled/skrell, -/area/ship/skrellscoutshuttle) -"aZ" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/tiled/skrell, -/area/ship/skrellscoutshuttle) -"ba" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/turf/simulated/floor/tiled/skrell, -/area/ship/skrellscoutshuttle) -"bh" = ( -/obj/machinery/power/apc/critical{ - dir = 1; - name = "north bump"; - pixel_y = 24; - req_access = list("ACCESS_SKRELLSCOUT") - }, -/obj/machinery/power/terminal{ - dir = 1 - }, -/obj/structure/cable{ - d2 = 4; - icon_state = "0-4" - }, -/turf/simulated/floor/tiled/skrell/orange, -/area/ship/skrellscoutship/maintenance/power) -"bi" = ( -/obj/effect/catwalk_plated/dark, -/obj/structure/cable{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/plating, -/area/ship/skrellscoutship/maintenance/power) -"bj" = ( -/obj/effect/catwalk_plated/dark, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/plating, -/area/ship/skrellscoutship/maintenance/power) -"bk" = ( -/obj/effect/catwalk_plated/dark, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/structure/cable{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/turf/simulated/floor/plating, -/area/ship/skrellscoutship/maintenance/power) -"bl" = ( -/obj/effect/catwalk_plated/dark, -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/plating, -/area/ship/skrellscoutship/maintenance/power) -"bm" = ( -/obj/machinery/atmospherics/portables_connector{ - dir = 4 - }, -/obj/machinery/portable_atmospherics/canister/air/airlock, -/turf/simulated/floor/tiled/skrell, -/area/ship/skrellscoutship/dock) -"bn" = ( -/obj/effect/wallframe_spawn/reinforced_phoron/hull, -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/paint/black, -/turf/simulated/floor/plating, -/area/ship/skrellscoutship/maintenance/power) -"bo" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 6; - icon_state = "warning" - }, -/turf/simulated/floor/tiled/skrell/red, -/area/ship/skrellscoutship/hangar) -"bp" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/effect/paint/black, -/turf/simulated/wall/r_wall, -/area/ship/skrellscoutshuttle) -"bt" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/turf/simulated/floor/tiled/skrell/red, -/area/ship/skrellscoutship/hangar) -"bw" = ( -/obj/machinery/telecomms/bus/map_preset/skrellscoutship, -/turf/simulated/floor/tiled/skrell/orange, -/area/ship/skrellscoutship/maintenance/power) -"bx" = ( -/obj/machinery/telecomms/hub/map_preset/skrellscoutship, -/turf/simulated/floor/tiled/skrell/orange, -/area/ship/skrellscoutship/maintenance/power) -"by" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/turf/simulated/floor/tiled/skrell/orange, -/area/ship/skrellscoutship/maintenance/power) -"bz" = ( -/obj/effect/catwalk_plated/dark, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/plating, -/area/ship/skrellscoutship/maintenance/power) -"bA" = ( -/obj/structure/window/phoronreinforced{ - dir = 1 - }, -/obj/structure/window/phoronreinforced{ - dir = 8 - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/turf/simulated/floor/tiled/skrell/orange, -/area/ship/skrellscoutship/maintenance/power) -"bB" = ( -/obj/structure/window/phoronreinforced{ - dir = 1 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/skrell/orange, -/area/ship/skrellscoutship/maintenance/power) -"bC" = ( -/turf/simulated/floor/tiled/skrell/green, -/area/ship/skrellscoutship/robotics) -"bD" = ( -/obj/structure/window/phoronreinforced{ - dir = 4 - }, -/obj/structure/window/phoronreinforced{ - dir = 1 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/skrell/orange, -/area/ship/skrellscoutship/maintenance/power) -"bE" = ( -/obj/effect/catwalk_plated/dark, -/obj/machinery/power/terminal, -/obj/structure/cable/green{ - d2 = 8; - icon_state = "0-8" - }, -/turf/simulated/floor/plating, -/area/ship/skrellscoutship/maintenance/power) -"bF" = ( -/obj/effect/wallframe_spawn/reinforced_phoron/hull, -/obj/effect/paint/black, -/turf/simulated/floor/plating, -/area/ship/skrellscoutship/maintenance/power) -"bH" = ( -/turf/simulated/floor/tiled/skrell/red, -/area/ship/skrellscoutship/externalwing/starboard) -"bI" = ( -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/turf/simulated/floor/tiled/skrell/red, -/area/ship/skrellscoutship/hangar) -"bJ" = ( -/obj/machinery/door/airlock{ - name = "Shuttle Storage" - }, -/obj/machinery/door/firedoor/autoset, -/turf/simulated/floor/tiled/dark/monotile, -/area/ship/skrellscoutshuttle) -"bN" = ( -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/manifold/visible/cyan, -/obj/machinery/meter, -/turf/simulated/floor/tiled/skrell, -/area/ship/skrellscoutshuttle) -"bO" = ( -/obj/effect/floor_decal/industrial/outline/blue, -/obj/machinery/atmospherics/unary/tank/air{ - dir = 8; - start_pressure = 4559.63 - }, -/turf/simulated/floor/tiled/skrell, -/area/ship/skrellscoutshuttle) -"bP" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/door/airlock/maintenance, -/obj/machinery/door/firedoor/autoset, -/turf/simulated/floor/tiled/dark/monotile, -/area/ship/skrellscoutship/forestorage) -"bQ" = ( -/obj/structure/table/glass, -/obj/item/folder/blue, -/turf/simulated/floor/tiled/skrell/red, -/area/ship/skrellscoutship/command/bridge) -"bR" = ( -/obj/machinery/power/apc/critical{ - dir = 1; - name = "north bump"; - pixel_y = 24; - req_access = list("ACCESS_SKRELLSCOUT") - }, -/obj/machinery/power/terminal{ - dir = 1 - }, -/obj/structure/cable{ - d2 = 2; - icon_state = "0-2" - }, -/turf/simulated/floor/carpet/magenta, -/area/ship/skrellscoutship/wings/starboard) -"bS" = ( -/obj/effect/catwalk_plated/dark, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/ship/skrellscoutship/maintenance/power) -"bT" = ( -/obj/effect/catwalk_plated/dark, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/ship/skrellscoutship/maintenance/power) -"bV" = ( -/obj/machinery/light/skrell{ - dir = 1; - icon_state = "tube1" - }, -/obj/machinery/telecomms/broadcaster/map_preset/skrellscoutship, -/turf/simulated/floor/tiled/skrell/orange, -/area/ship/skrellscoutship/maintenance/power) -"bW" = ( -/obj/effect/catwalk_plated/dark, -/obj/structure/cable{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/structure/cable{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/turf/simulated/floor/plating, -/area/ship/skrellscoutship/maintenance/power) -"bX" = ( -/obj/structure/window/phoronreinforced{ - dir = 8 - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/turf/simulated/floor/tiled/skrell/orange, -/area/ship/skrellscoutship/maintenance/power) -"bY" = ( -/obj/structure/cable/green{ - d2 = 8; - icon_state = "0-8" - }, -/obj/machinery/power/skrell_reactor{ - color = "null"; - name = "skrellan advanced fusion drive" - }, -/turf/simulated/floor/tiled/skrell/orange, -/area/ship/skrellscoutship/maintenance/power) -"bZ" = ( -/obj/structure/window/phoronreinforced{ - dir = 4 - }, -/turf/simulated/floor/tiled/skrell/orange, -/area/ship/skrellscoutship/maintenance/power) -"cb" = ( -/obj/machinery/computer/ship/helm{ - dir = 4 - }, -/turf/simulated/floor/tiled/skrell, -/area/ship/skrellscoutshuttle) -"cc" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 4 - }, -/obj/machinery/alarm/skrell{ - pixel_y = 14 - }, -/obj/structure/table/rack, -/obj/item/storage/toolbox/electrical{ - pixel_y = 8 - }, -/obj/item/storage/toolbox/mechanical, -/turf/simulated/floor/tiled/skrell/green, -/area/ship/skrellscoutship/forestorage) -"cd" = ( -/obj/structure/bed/chair/shuttle/blue{ - dir = 8 - }, -/turf/simulated/floor/tiled/skrell, -/area/ship/skrellscoutshuttle) -"ce" = ( -/obj/machinery/hologram/holopad/longrange, -/turf/simulated/floor/tiled/skrell, -/area/ship/skrellscoutshuttle) -"cf" = ( -/obj/machinery/atmospherics/unary/vent_pump/on, -/obj/structure/bed/chair/shuttle/blue, -/turf/simulated/floor/tiled/skrell, -/area/ship/skrellscoutshuttle) -"ck" = ( -/obj/machinery/portable_atmospherics/canister/oxygen, -/obj/structure/window/basic{ - dir = 8 - }, -/obj/effect/floor_decal/industrial/outline/blue, -/turf/simulated/floor/tiled/skrell/green, -/area/ship/skrellscoutship/robotics) -"cl" = ( -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/machinery/light/skrell{ - dir = 4 - }, -/obj/machinery/portable_atmospherics/canister/empty, -/obj/machinery/atmospherics/portables_connector{ - dir = 8 - }, -/obj/effect/floor_decal/industrial/outline/red, -/turf/simulated/floor/tiled/skrell, -/area/ship/skrellscoutshuttle) -"cp" = ( -/obj/machinery/door/airlock/medical{ - name = "Medical Bay" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/door/firedoor/autoset, -/turf/simulated/floor/tiled/dark/monotile, -/area/ship/skrellscoutship/crew/medbay) -"cq" = ( -/obj/machinery/telecomms/receiver/map_preset/skrellscoutship, -/turf/simulated/floor/tiled/skrell/orange, -/area/ship/skrellscoutship/maintenance/power) -"cr" = ( -/obj/machinery/telecomms/server/map_preset/skrellscoutship, -/turf/simulated/floor/tiled/skrell/orange, -/area/ship/skrellscoutship/maintenance/power) -"cs" = ( -/obj/structure/window/phoronreinforced, -/obj/structure/window/phoronreinforced{ - dir = 8 - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/skrell/orange, -/area/ship/skrellscoutship/maintenance/power) -"cu" = ( -/obj/structure/window/phoronreinforced, -/turf/simulated/floor/tiled/skrell/orange, -/area/ship/skrellscoutship/maintenance/power) -"cv" = ( -/obj/structure/window/phoronreinforced, -/obj/structure/window/phoronreinforced{ - dir = 4 - }, -/turf/simulated/floor/tiled/skrell/orange, -/area/ship/skrellscoutship/maintenance/power) -"cC" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 1 - }, -/turf/simulated/floor/tiled/skrell, -/area/ship/skrellscoutshuttle) -"cE" = ( -/obj/machinery/door/airlock{ - name = "Shuttle Maintenance" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 - }, -/obj/machinery/door/firedoor/autoset, -/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers, -/turf/simulated/floor/tiled/dark/monotile, -/area/ship/skrellscoutshuttle) -"cF" = ( -/obj/structure/cable/cyan{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/universal{ - dir = 4 - }, -/turf/simulated/floor/tiled/skrell, -/area/ship/skrellscoutshuttle) -"cM" = ( -/obj/machinery/atmospherics/unary/vent_pump/on, -/obj/machinery/power/apc/critical{ - dir = 1; - name = "north bump"; - pixel_y = 24; - req_access = list("ACCESS_SKRELLSCOUT") - }, -/obj/machinery/power/terminal{ - dir = 1 - }, -/obj/structure/cable{ - d2 = 2; - icon_state = "0-2" - }, -/turf/simulated/floor/tiled/skrell/white, -/area/ship/skrellscoutship/crew/medbay) -"cN" = ( -/obj/machinery/chem_master, -/obj/structure/window/reinforced{ - dir = 4 - }, -/turf/simulated/floor/tiled/skrell/white, -/area/ship/skrellscoutship/crew/medbay) -"cO" = ( -/obj/machinery/portable_atmospherics/canister/oxygen/prechilled, -/obj/machinery/atmospherics/portables_connector, -/turf/simulated/floor/tiled/skrell/white, -/area/ship/skrellscoutship/crew/medbay) -"cP" = ( -/obj/machinery/atmospherics/unary/freezer{ - icon_state = "freezer" - }, -/turf/simulated/floor/tiled/skrell/white, -/area/ship/skrellscoutship/crew/medbay) -"cQ" = ( -/obj/machinery/atmospherics/unary/cryo_cell, -/turf/simulated/floor/tiled/skrell/white, -/area/ship/skrellscoutship/crew/medbay) -"cR" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/skrell/white, -/area/ship/skrellscoutship/crew/medbay) -"cS" = ( -/obj/machinery/body_scanconsole{ - dir = 4 - }, -/turf/simulated/floor/tiled/skrell/white, -/area/ship/skrellscoutship/crew/medbay) -"cU" = ( -/obj/machinery/alarm/skrell{ - pixel_y = 14 - }, -/turf/simulated/floor/tiled/skrell/white, -/area/ship/skrellscoutship/crew/medbay) -"cV" = ( -/obj/machinery/sleeper, -/turf/simulated/floor/tiled/skrell/white, -/area/ship/skrellscoutship/crew/medbay) -"cX" = ( -/obj/structure/table/glass, -/obj/item/storage/firstaid/surgery, -/obj/item/scalpel/manager, -/obj/item/device/radio/intercom/map_preset/skrellscoutship{ - pixel_y = 24 - }, -/turf/simulated/floor/tiled/skrell/white, -/area/ship/skrellscoutship/crew/medbay) -"cY" = ( -/obj/machinery/optable, -/obj/machinery/body_scan_display{ - pixel_y = 24 - }, -/turf/simulated/floor/tiled/skrell/white, -/area/ship/skrellscoutship/crew/medbay) -"da" = ( -/obj/machinery/power/shield_generator, -/obj/structure/cable{ - d2 = 4; - icon_state = "0-4" - }, -/obj/machinery/alarm/skrell/server{ - dir = 1 - }, -/turf/simulated/floor/tiled/skrell/orange, -/area/ship/skrellscoutship/maintenance/power) -"db" = ( -/obj/effect/catwalk_plated/dark, -/obj/structure/cable{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/item/device/radio/intercom/map_preset/skrellscoutship{ - dir = 1; - pixel_y = -32 - }, -/turf/simulated/floor/plating, -/area/ship/skrellscoutship/maintenance/power) -"dc" = ( -/obj/effect/catwalk_plated/dark, -/obj/structure/cable{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/plating, -/area/ship/skrellscoutship/maintenance/power) -"dg" = ( -/obj/effect/wallframe_spawn/reinforced_phoron/hull, -/obj/effect/paint/black, -/obj/machinery/door/blast/regular/open{ - dir = 4; - id_tag = "xil_shuttle"; - name = "Blast Doors" - }, -/turf/simulated/floor/plating, -/area/ship/skrellscoutshuttle) -"dh" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 4 - }, -/obj/effect/submap_landmark/spawnpoint/skrellscoutship, -/obj/item/device/radio/intercom/map_preset/skrellscoutship{ - dir = 4; - pixel_x = -24 - }, -/turf/simulated/floor/tiled/skrell/blue, -/area/ship/skrellscoutship/crew/quarters) -"di" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/tiled/skrell/blue, -/area/ship/skrellscoutship/crew/quarters) -"dj" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/alarm/skrell{ - pixel_y = 14 - }, -/turf/simulated/floor/tiled/skrell/blue, -/area/ship/skrellscoutship/crew/quarters) -"dk" = ( -/obj/structure/closet/cabinet, -/obj/item/clothing/accessory/storage/black_vest, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 8 - }, -/obj/item/device/radio/headset/map_preset/skrellscoutship, -/obj/item/device/radio/hailing, -/obj/item/clothing/accessory/storage/holster/thigh, -/turf/simulated/floor/tiled/skrell/blue, -/area/ship/skrellscoutship/crew/quarters) -"dl" = ( -/turf/simulated/floor/tiled/skrell, -/area/ship/skrellscoutship/wings/starboard) -"dm" = ( -/obj/structure/table/glass, -/obj/item/storage/box/beakers{ - pixel_x = 8 - }, -/obj/item/reagent_containers/glass/beaker/large{ - pixel_x = -6 - }, -/obj/item/reagent_containers/glass/beaker/large{ - pixel_x = 6; - pixel_y = 11 - }, -/obj/item/reagent_containers/glass/beaker/large{ - pixel_x = -6; - pixel_y = 11 - }, -/obj/item/device/radio/intercom/map_preset/skrellscoutship{ - dir = 4; - pixel_x = -24 - }, -/turf/simulated/floor/tiled/skrell/white, -/area/ship/skrellscoutship/crew/medbay) -"dn" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/skrell/white, -/area/ship/skrellscoutship/crew/medbay) -"do" = ( -/obj/structure/table/glass, -/obj/item/bodybag/cryobag{ - pixel_x = 4; - pixel_y = -1 - }, -/obj/item/bodybag/cryobag{ - pixel_x = 4; - pixel_y = -8 - }, -/obj/item/bodybag/cryobag{ - pixel_x = -5; - pixel_y = -5 - }, -/obj/item/storage/box/bodybags{ - pixel_y = 13 - }, -/obj/structure/window/reinforced{ - dir = 4 - }, -/turf/simulated/floor/tiled/skrell/white, -/area/ship/skrellscoutship/crew/medbay) -"dp" = ( -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 5 - }, -/turf/simulated/floor/tiled/skrell/white, -/area/ship/skrellscoutship/crew/medbay) -"dq" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden, -/turf/simulated/floor/tiled/skrell/white, -/area/ship/skrellscoutship/crew/medbay) -"dr" = ( -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 9 - }, -/turf/simulated/floor/tiled/skrell/white, -/area/ship/skrellscoutship/crew/medbay) -"ds" = ( -/turf/simulated/floor/tiled/skrell/white, -/area/ship/skrellscoutship/crew/medbay) -"dt" = ( -/obj/machinery/alarm/skrell{ - dir = 8; - pixel_x = 22 - }, -/turf/simulated/floor/tiled/skrell/white, -/area/ship/skrellscoutship/crew/medbay) -"dv" = ( -/obj/machinery/power/smes/buildable/preset/skrell, -/obj/structure/cable, -/turf/simulated/floor/tiled/skrell/orange, -/area/ship/skrellscoutship/maintenance/power) -"dy" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/table/rack, -/turf/simulated/floor/tiled/skrell, -/area/ship/skrellscoutshuttle) -"dA" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/skrell/blue, -/area/ship/skrellscoutship/crew/quarters) -"dB" = ( -/turf/simulated/floor/tiled/skrell/blue, -/area/ship/skrellscoutship/crew/quarters) -"dC" = ( -/obj/structure/bed/padded, -/obj/structure/curtain/open/bed, -/obj/item/bedsheet/hos, -/obj/effect/submap_landmark/spawnpoint/skrellscoutship, -/turf/simulated/floor/tiled/skrell/blue, -/area/ship/skrellscoutship/crew/quarters) -"dD" = ( -/obj/machinery/reagentgrinder, -/obj/item/reagent_containers/glass/beaker/large, -/obj/item/stack/material/phoron/fifty, -/obj/item/stack/material/phoron/fifty, -/turf/simulated/floor/tiled/skrell/white, -/area/ship/skrellscoutship/crew/medbay) -"dE" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/skrell, -/area/ship/skrellscoutship/wings/starboard) -"dF" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/obj/structure/cable{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/turf/simulated/floor/tiled/skrell/white, -/area/ship/skrellscoutship/crew/medbay) -"dG" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/skrell/white, -/area/ship/skrellscoutship/crew/medbay) -"dH" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply, -/obj/structure/cable{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/turf/simulated/floor/tiled/skrell/white, -/area/ship/skrellscoutship/crew/medbay) -"dI" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/tiled/skrell/white, -/area/ship/skrellscoutship/crew/medbay) -"dJ" = ( -/obj/machinery/door/airlock/medical{ - name = "Surgical Room" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/ship/skrellscoutship/crew/medbay) -"dK" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/turf/simulated/floor/tiled/skrell/white, -/area/ship/skrellscoutship/crew/medbay) -"dL" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled/skrell/white, -/area/ship/skrellscoutship/crew/medbay) -"dM" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/turf/simulated/floor/tiled/skrell/white, -/area/ship/skrellscoutship/crew/medbay) -"dP" = ( -/obj/machinery/light/skrell{ - dir = 8 - }, -/obj/structure/table/rack, -/obj/item/extinguisher, -/obj/item/extinguisher, -/obj/machinery/light/skrell{ - dir = 8 - }, -/obj/item/tank/oxygen_emergency, -/obj/item/tank/oxygen_emergency, -/obj/item/tank/oxygen_emergency, -/obj/item/clothing/mask/breath/emergency, -/obj/item/clothing/mask/breath/emergency, -/obj/item/clothing/mask/breath/emergency, -/turf/simulated/floor/tiled/skrell/green, -/area/ship/skrellscoutship/forestorage) -"dQ" = ( -/obj/structure/table/glass, -/obj/machinery/reagent_temperature, -/obj/machinery/light/skrell{ - dir = 8 - }, -/obj/item/reagent_containers/hypospray, -/obj/item/reagent_containers/hypospray{ - pixel_x = 4 - }, -/turf/simulated/floor/tiled/skrell/white, -/area/ship/skrellscoutship/crew/medbay) -"dS" = ( -/obj/structure/table/glass, -/obj/machinery/reagent_temperature/cooler, -/obj/structure/window/reinforced{ - dir = 4 - }, -/turf/simulated/floor/tiled/skrell/white, -/area/ship/skrellscoutship/crew/medbay) -"dT" = ( -/obj/machinery/vending/medical/skrell{ - density = 0; - dir = 1 - }, -/turf/simulated/floor/tiled/skrell/white, -/area/ship/skrellscoutship/crew/medbay) -"dU" = ( -/turf/simulated/floor/tiled/skrell/green, -/area/ship/skrellscoutship/forestorage) -"dV" = ( -/obj/machinery/smartfridge/chemistry, -/turf/simulated/floor/tiled/skrell/white, -/area/ship/skrellscoutship/crew/medbay) -"dX" = ( -/obj/structure/table/glass, -/obj/item/auto_cpr, -/obj/item/reagent_containers/glass/beaker/cryoxadone{ - pixel_x = -7; - pixel_y = 11 - }, -/turf/simulated/floor/tiled/skrell/white, -/area/ship/skrellscoutship/crew/medbay) -"dY" = ( -/obj/structure/table/glass, -/obj/item/defibrillator/loaded, -/obj/item/defibrillator/compact/combat/loaded, -/obj/item/device/radio/intercom/map_preset/skrellscoutship{ - dir = 1; - pixel_y = -32 - }, -/turf/simulated/floor/tiled/skrell/white, -/area/ship/skrellscoutship/crew/medbay) -"dZ" = ( -/obj/structure/bed/roller, -/turf/simulated/floor/tiled/skrell/white, -/area/ship/skrellscoutship/crew/medbay) -"ea" = ( -/obj/structure/hygiene/sink{ - dir = 4; - pixel_x = 11; - pixel_y = 5 - }, -/turf/simulated/floor/tiled/skrell/white, -/area/ship/skrellscoutship/crew/medbay) -"ec" = ( -/obj/structure/table/glass, -/obj/item/storage/firstaid/adv{ - pixel_x = -6; - pixel_y = 6 - }, -/obj/item/storage/box/gloves{ - pixel_x = 7; - pixel_y = -3 - }, -/turf/simulated/floor/tiled/skrell/white, -/area/ship/skrellscoutship/crew/medbay) -"ed" = ( -/obj/machinery/organ_printer/flesh/mapped, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 1 - }, -/turf/simulated/floor/tiled/skrell/white, -/area/ship/skrellscoutship/crew/medbay) -"ee" = ( -/obj/structure/bed/padded{ - dir = 8 - }, -/obj/structure/curtain/open/bed, -/obj/item/bedsheet/hos, -/obj/effect/submap_landmark/spawnpoint/skrellscoutship, -/turf/simulated/floor/tiled/skrell/blue, -/area/ship/skrellscoutship/crew/quarters) -"en" = ( -/obj/machinery/computer/ship/sensors/skrell{ - dir = 4 - }, -/turf/simulated/floor/tiled/skrell/red, -/area/ship/skrellscoutship/command/bridge) -"eo" = ( -/obj/machinery/suit_storage_unit/skrell, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/floor/tiled/skrell/green, -/area/ship/skrellscoutship/command/armory) -"ep" = ( -/obj/machinery/power/apc/critical{ - dir = 1; - name = "north bump"; - pixel_y = 24; - req_access = list("ACCESS_SKRELLSCOUT") - }, -/obj/machinery/power/terminal{ - dir = 1 - }, -/obj/structure/cable{ - d2 = 4; - icon_state = "0-4" - }, -/turf/simulated/floor/tiled/skrell/green, -/area/ship/skrellscoutship/command/armory) -"eq" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/cable{ - d1 = 2; - d2 = 8; - desc = "A flexible superconducting cable for heavy-duty power transfer. It's been labeled 'chaos reigns'."; - icon_state = "2-8" - }, -/turf/simulated/floor/tiled/skrell/green, -/area/ship/skrellscoutship/command/armory) -"er" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/cyan{ - dir = 1 - }, -/turf/simulated/floor/tiled/skrell, -/area/ship/skrellscoutship/dock) -"es" = ( -/obj/machinery/alarm/skrell{ - pixel_y = 14 - }, -/turf/simulated/floor/tiled/skrell/green, -/area/ship/skrellscoutship/command/armory) -"eu" = ( -/turf/simulated/floor/tiled/skrell/green, -/area/ship/skrellscoutship/command/armory) -"ev" = ( -/obj/machinery/atmospherics/unary/vent_pump/on, -/turf/simulated/floor/tiled/skrell/green, -/area/ship/skrellscoutship/command/armory) -"ew" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/skrell/green, -/area/ship/skrellscoutship/command/armory) -"ey" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/door/airlock/glass{ - name = "Auxillary Storage" - }, -/obj/machinery/door/firedoor/autoset, -/turf/simulated/floor/tiled/dark/monotile, -/area/ship/skrellscoutship/command/armory) -"ez" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply, -/turf/simulated/floor/tiled/skrell/green, -/area/ship/skrellscoutship/command/armory) -"eA" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/skrell/green, -/area/ship/skrellscoutship/command/armory) -"eB" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/skrell/green, -/area/ship/skrellscoutship/command/armory) -"eC" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/turf/simulated/floor/tiled/skrell/green, -/area/ship/skrellscoutship/command/armory) -"eD" = ( -/obj/structure/window/phoronreinforced{ - dir = 1 - }, -/obj/structure/table/rack, -/obj/item/device/binoculars, -/obj/item/device/binoculars, -/obj/item/device/binoculars, -/obj/structure/window/phoronreinforced{ - dir = 8 - }, -/obj/effect/floor_decal/industrial/outline/red, -/turf/simulated/floor/tiled/skrell/green, -/area/ship/skrellscoutship/command/armory) -"eE" = ( -/obj/machinery/door/window/brigdoor/northleft{ - name = "Weapons locker" - }, -/turf/simulated/floor/tiled/skrell/green, -/area/ship/skrellscoutship/command/armory) -"eF" = ( -/obj/structure/window/phoronreinforced{ - dir = 1 - }, -/obj/structure/table/rack, -/obj/effect/floor_decal/industrial/outline/red, -/obj/item/device/gps, -/obj/item/device/gps, -/obj/item/device/gps, -/obj/item/device/gps, -/obj/item/device/gps, -/obj/item/device/scanner/gas{ - pixel_x = 8 - }, -/obj/item/device/gps, -/obj/item/device/scanner/gas{ - pixel_x = 8 - }, -/obj/item/device/scanner/gas{ - pixel_x = 8 - }, -/turf/simulated/floor/tiled/skrell/green, -/area/ship/skrellscoutship/command/armory) -"eG" = ( -/obj/machinery/portable_atmospherics/canister/oxygen, -/turf/simulated/floor/tiled/skrell/green, -/area/ship/skrellscoutship/command/armory) -"eH" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/skrell/green, -/area/ship/skrellscoutship/command/armory) -"eI" = ( -/obj/machinery/portable_atmospherics/canister/carbon_dioxide, -/turf/simulated/floor/tiled/skrell/green, -/area/ship/skrellscoutship/command/armory) -"eJ" = ( -/obj/structure/window/phoronreinforced{ - dir = 1 - }, -/obj/structure/window/phoronreinforced{ - dir = 8 - }, -/turf/simulated/floor/tiled/skrell/green, -/area/ship/skrellscoutship/command/armory) -"eL" = ( -/obj/structure/window/phoronreinforced{ - dir = 1 - }, -/turf/simulated/floor/tiled/skrell/green, -/area/ship/skrellscoutship/command/armory) -"eN" = ( -/obj/structure/dispenser/oxygen, -/turf/simulated/floor/tiled/skrell/green, -/area/ship/skrellscoutship/command/armory) -"eP" = ( -/obj/structure/table/rack, -/obj/item/tank/jetpack/carbondioxide, -/obj/item/tank/jetpack/carbondioxide, -/obj/item/tank/jetpack/carbondioxide, -/turf/simulated/floor/tiled/skrell/green, -/area/ship/skrellscoutship/command/armory) -"eQ" = ( -/obj/structure/table/rack, -/obj/item/gun/energy/gun/skrell, -/obj/item/gun/energy/gun/skrell, -/obj/item/gun/energy/gun/skrell, -/obj/item/gun/energy/gun/skrell, -/obj/item/gun/energy/gun/skrell, -/obj/item/gun/energy/gun/skrell, -/obj/structure/window/phoronreinforced{ - dir = 8 - }, -/obj/effect/floor_decal/industrial/outline/red, -/turf/simulated/floor/tiled/skrell/green, -/area/ship/skrellscoutship/command/armory) -"eS" = ( -/obj/structure/table/rack, -/obj/item/melee/energy/machete, -/obj/item/melee/energy/machete, -/obj/item/melee/energy/machete, -/obj/item/melee/energy/machete, -/obj/item/melee/energy/machete, -/obj/item/melee/energy/machete, -/obj/effect/floor_decal/industrial/outline/red, -/turf/simulated/floor/tiled/skrell/green, -/area/ship/skrellscoutship/command/armory) -"eT" = ( -/obj/structure/table/rack, -/obj/item/gun/energy/pulse_rifle/skrell, -/obj/item/gun/energy/pulse_rifle/skrell, -/obj/item/gun/energy/pulse_rifle/skrell, -/obj/effect/floor_decal/industrial/outline/red, -/turf/simulated/floor/tiled/skrell/green, -/area/ship/skrellscoutship/command/armory) -"eU" = ( -/obj/structure/table/rack, -/obj/item/gun/magnetic/railgun/flechette/skrell, -/obj/item/gun/magnetic/railgun/flechette/skrell, -/obj/item/gun/magnetic/railgun/flechette/skrell, -/obj/effect/floor_decal/industrial/outline/red, -/turf/simulated/floor/tiled/skrell/green, -/area/ship/skrellscoutship/command/armory) -"eV" = ( -/obj/structure/reagent_dispensers/fueltank, -/turf/simulated/floor/tiled/skrell/green, -/area/ship/skrellscoutship/robotics) -"eW" = ( -/obj/machinery/vending/engineering{ - req_access = list("ACCESS_SKRELLSCOUT") - }, -/turf/simulated/floor/tiled/skrell/green, -/area/ship/skrellscoutship/robotics) -"eZ" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/item/device/radio/intercom/map_preset/skrellscoutship{ - dir = 8; - pixel_x = 24 - }, -/turf/simulated/floor/tiled/skrell/green, -/area/ship/skrellscoutship/forestorage) -"fa" = ( -/obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/floor/tiled/skrell, -/area/ship/skrellscoutship/dock) -"fb" = ( -/obj/machinery/fabricator/hacked, -/turf/simulated/floor/tiled/skrell/green, -/area/ship/skrellscoutship/robotics) -"fe" = ( -/obj/machinery/atmospherics/pipe/manifold4w/hidden/cyan, -/turf/simulated/floor/tiled/skrell, -/area/ship/skrellscoutship/dock) -"ff" = ( -/obj/machinery/alarm/skrell{ - dir = 8; - pixel_x = 22 - }, -/turf/simulated/floor/tiled/skrell, -/area/ship/skrellscoutship/dock) -"fg" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/cyan, -/obj/machinery/door/blast/regular/open{ - dir = 4; - id_tag = "main_airlock_door" - }, -/obj/machinery/door/airlock/external/glass/bolted_open{ - frequency = 1331; - id_tag = "xil_scoutship_fore_internal" - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/ship/skrellscoutship/dock) -"fh" = ( -/obj/structure/dispenser/oxygen, -/turf/simulated/floor/tiled/skrell/green, -/area/ship/skrellscoutship/robotics) -"fj" = ( -/obj/structure/window/phoronreinforced, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, -/obj/machinery/light/skrell{ - dir = 8 - }, -/turf/simulated/floor/tiled/skrell, -/area/ship/skrellscoutship/dock) -"fk" = ( -/obj/machinery/door/window/brigdoor/northleft{ - dir = 2 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled/skrell, -/area/ship/skrellscoutship/dock) -"fp" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/cyan{ - dir = 9 - }, -/turf/simulated/floor/tiled/skrell, -/area/ship/skrellscoutship/dock) -"fq" = ( -/obj/machinery/atmospherics/unary/vent_pump/on, -/obj/machinery/access_button/airlock_interior{ - frequency = 1331; - master_tag = "xil_scoutship_fore_dock_controller"; - pixel_x = -4; - pixel_y = 24 - }, -/turf/simulated/floor/tiled/skrell, -/area/ship/skrellscoutship/dock) -"fr" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/obj/machinery/light/skrell{ - dir = 4 - }, -/turf/simulated/floor/tiled/skrell, -/area/ship/skrellscoutship/dock) -"fs" = ( -/obj/structure/table/rack, -/obj/item/tank/jetpack/carbondioxide, -/obj/item/tank/jetpack/carbondioxide, -/obj/item/tank/jetpack/carbondioxide, -/obj/item/tank/jetpack/carbondioxide, -/obj/item/tank/jetpack/carbondioxide, -/turf/simulated/floor/tiled/skrell/green, -/area/ship/skrellscoutship/robotics) -"ft" = ( -/obj/machinery/alarm/skrell{ - pixel_y = 14 - }, -/obj/structure/table/rack, -/obj/item/storage/box/lights/tubes/skrell{ - pixel_x = 8; - pixel_y = -5 - }, -/obj/item/storage/toolbox/electrical{ - pixel_y = 6 - }, -/obj/item/device/encryptionkey/map_preset/skrellscoutship, -/obj/item/device/encryptionkey/map_preset/skrellscoutship, -/obj/item/device/encryptionkey/map_preset/skrellscoutship, -/obj/item/device/encryptionkey/map_preset/skrellscoutship, -/turf/simulated/floor/carpet/magenta, -/area/ship/skrellscoutship/wings/starboard) -"fu" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 8 - }, -/turf/simulated/floor/tiled/skrell, -/area/ship/skrellscoutship/dock) -"fv" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/tiled/skrell, -/area/ship/skrellscoutship/dock) -"fw" = ( -/obj/structure/table/rack, -/obj/item/extinguisher, -/obj/item/extinguisher, -/obj/item/extinguisher, -/obj/item/extinguisher, -/obj/item/extinguisher, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/obj/item/device/gps, -/obj/item/device/gps, -/obj/item/device/gps, -/obj/item/device/scanner/gas, -/obj/item/device/scanner/gas, -/obj/item/device/scanner/gas, -/turf/simulated/floor/tiled/skrell/green, -/area/ship/skrellscoutship/robotics) -"fx" = ( -/obj/structure/table/rack, -/obj/item/storage/toolbox/electrical{ - pixel_y = 5 - }, -/obj/item/storage/toolbox/electrical{ - pixel_y = 5 - }, -/obj/item/storage/toolbox/electrical{ - pixel_y = 5 - }, -/obj/item/storage/toolbox/mechanical{ - pixel_y = -6 - }, -/obj/item/storage/toolbox/mechanical{ - pixel_y = -5 - }, -/obj/item/storage/toolbox/mechanical{ - pixel_y = -5 - }, -/turf/simulated/floor/tiled/skrell/green, -/area/ship/skrellscoutship/robotics) -"fy" = ( -/obj/structure/table/rack, -/obj/effect/floor_decal/industrial/outline/red, -/turf/simulated/floor/tiled/skrell/green, -/area/ship/skrellscoutship/robotics) -"fA" = ( -/obj/effect/wallframe_spawn/reinforced_phoron/hull, -/obj/effect/paint/black, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, -/turf/simulated/floor/tiled/skrell, -/area/ship/skrellscoutship/dock) -"fB" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 8 - }, -/turf/simulated/floor/tiled/skrell, -/area/ship/skrellscoutship/dock) -"fC" = ( -/obj/machinery/light/skrell{ - dir = 8 - }, -/turf/simulated/floor/tiled/skrell, -/area/ship/skrellscoutship/dock) -"fD" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/tiled/skrell, -/area/ship/skrellscoutship/dock) -"fE" = ( -/obj/structure/bed/padded, -/obj/item/bedsheet/brown, -/obj/machinery/light/skrell{ - dir = 4 - }, -/turf/simulated/floor/tiled/skrell, -/area/ship/skrellscoutship/dock) -"fF" = ( -/obj/machinery/ion_engine{ - dir = 8 - }, -/turf/simulated/floor/reinforced/airless, -/area/ship/skrellscoutship/maintenance/atmos) -"fH" = ( -/obj/structure/table/rack, -/obj/item/rcd, -/obj/item/rcd_ammo, -/obj/item/rcd_ammo, -/obj/item/rcd_ammo, -/obj/item/rcd_ammo, -/obj/item/rcd_ammo, -/turf/simulated/floor/tiled/skrell/green, -/area/ship/skrellscoutship/robotics) -"fL" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/turf/simulated/floor/tiled/skrell, -/area/ship/skrellscoutship/dock) -"fM" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/skrell/green, -/area/ship/skrellscoutship/robotics) -"fN" = ( -/obj/machinery/power/apc/critical{ - dir = 4; - name = "east bump"; - pixel_x = 24; - req_access = list("ACCESS_SKRELLSCOUT") - }, -/obj/machinery/power/terminal{ - dir = 4 - }, -/obj/structure/cable{ - d2 = 8; - icon_state = "0-8" - }, -/turf/simulated/floor/tiled/skrell, -/area/ship/skrellscoutship/dock) -"fP" = ( -/obj/machinery/light/skrell{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/cyan{ - dir = 10 - }, -/turf/simulated/floor/tiled/skrell, -/area/ship/skrellscoutship/dock) -"fQ" = ( -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 1 - }, -/turf/simulated/floor/tiled/skrell/red, -/area/ship/skrellscoutship/hangar) -"fR" = ( -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/obj/effect/floor_decal/industrial/warning, -/turf/simulated/floor/tiled/skrell/red, -/area/ship/skrellscoutship/hangar) -"fS" = ( -/obj/effect/floor_decal/industrial/warning, -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled/skrell/red, -/area/ship/skrellscoutship/hangar) -"fT" = ( -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled/skrell/red, -/area/ship/skrellscoutship/hangar) -"fV" = ( -/obj/structure/cable/yellow{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 - }, -/turf/simulated/floor/tiled/skrell/red, -/area/ship/skrellscoutship/hangar) -"fW" = ( -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/tiled/skrell/red, -/area/ship/skrellscoutship/hangar) -"fY" = ( -/obj/machinery/ion_engine{ - dir = 8 - }, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/plating, -/area/ship/skrellscoutshuttle) -"fZ" = ( -/turf/simulated/floor/tiled/skrell/red, -/area/ship/skrellscoutship/hangar) -"ga" = ( -/obj/machinery/computer/ship/sensors/skrell, -/turf/simulated/floor/tiled/skrell, -/area/ship/skrellscoutshuttle) -"gc" = ( -/obj/effect/floor_decal/industrial/warning, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/turf/simulated/floor/tiled/skrell/red, -/area/ship/skrellscoutship/hangar) -"gd" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/turf/simulated/floor/carpet/magenta, -/area/ship/skrellscoutship/wings/starboard) -"ge" = ( -/obj/effect/floor_decal/industrial/warning, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/skrell/red, -/area/ship/skrellscoutship/hangar) -"gf" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/obj/machinery/light/skrell{ - dir = 8 - }, -/turf/simulated/floor/tiled/skrell, -/area/ship/skrellscoutshuttle) -"gh" = ( -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/skrell/red, -/area/ship/skrellscoutship/hangar) -"gi" = ( -/obj/machinery/power/apc/critical{ - dir = 8; - name = "west bump"; - pixel_x = -24; - req_access = list("ACCESS_SKRELLSCOUT") - }, -/obj/machinery/power/terminal{ - dir = 8 - }, -/obj/structure/cable, -/turf/simulated/floor/tiled/skrell/blue, -/area/ship/skrellscoutship/crew/quarters) -"gj" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/tiled/skrell/red, -/area/ship/skrellscoutship/hangar) -"gk" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/turf/simulated/floor/tiled/skrell/red, -/area/ship/skrellscoutship/hangar) -"gl" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 1; - icon_state = "warning" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, -/turf/simulated/floor/tiled/skrell/red, -/area/ship/skrellscoutship/hangar) -"gm" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 1 - }, -/turf/simulated/floor/tiled/skrell/red, -/area/ship/skrellscoutship/hangar) -"gn" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/obj/machinery/light/skrell{ - dir = 4 - }, -/turf/simulated/floor/tiled/skrell, -/area/ship/skrellscoutshuttle) -"go" = ( -/obj/machinery/ion_engine{ - dir = 8 - }, -/turf/simulated/floor/reinforced/airless, -/area/ship/skrellscoutship/hangar) -"gp" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/table/standard, -/obj/item/hand_labeler, -/turf/simulated/floor/carpet/magenta, -/area/ship/skrellscoutship/wings/starboard) -"gq" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 1 - }, -/obj/machinery/alarm/skrell{ - dir = 1; - pixel_y = -22 - }, -/turf/simulated/floor/tiled/skrell/red, -/area/ship/skrellscoutship/hangar) -"gr" = ( -/obj/effect/wallframe_spawn/reinforced_phoron/hull, -/obj/effect/paint/black, -/obj/machinery/door/blast/regular/open{ - dir = 2; - id_tag = "xil_shuttle"; - name = "Blast Doors" - }, -/turf/simulated/floor/plating, -/area/ship/skrellscoutshuttle) -"gs" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 1 - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/skrell/red, -/area/ship/skrellscoutship/hangar) -"gt" = ( -/obj/machinery/power/apc/critical{ - name = "south bump"; - pixel_y = -24; - req_access = list("ACCESS_SKRELLSCOUT") - }, -/obj/machinery/power/terminal, -/obj/structure/cable{ - d2 = 8; - icon_state = "0-8" - }, -/turf/simulated/floor/tiled/skrell/red, -/area/ship/skrellscoutship/hangar) -"gu" = ( -/obj/machinery/ion_engine{ - dir = 8 - }, -/turf/simulated/floor/reinforced/airless, -/area/ship/skrellscoutship/command/armory) -"gw" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/table/standard, -/obj/item/tape_roll/skrell, -/turf/simulated/floor/carpet/magenta, -/area/ship/skrellscoutship/wings/starboard) -"gx" = ( -/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 8 - }, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/cable{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/structure/cable{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/structure/window/reinforced{ - dir = 8 - }, -/turf/simulated/floor/tiled/skrell, -/area/ship/skrellscoutship/wings/starboard) -"gy" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/skrell, -/area/ship/skrellscoutship/wings/starboard) -"gz" = ( -/obj/structure/bed/chair/office/comfy/black{ - dir = 1 - }, -/turf/simulated/floor/tiled/skrell/blue, -/area/ship/skrellscoutship/crew/rec) -"gA" = ( -/obj/structure/table/woodentable/walnut, -/obj/machinery/light/skrell{ - dir = 4 - }, -/obj/item/reagent_containers/food/drinks/glass2/coffeecup{ - pixel_x = -6 - }, -/obj/item/pen/blue{ - pixel_x = 9; - pixel_y = 7 - }, -/obj/item/paper_bin{ - pixel_x = 5; - pixel_y = 4 - }, -/turf/simulated/floor/tiled/skrell/blue, -/area/ship/skrellscoutship/crew/rec) -"gB" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 4 - }, -/obj/structure/reagent_dispensers/watertank, -/turf/simulated/floor/tiled/skrell, -/area/ship/skrellscoutship/wings/starboard) -"gE" = ( -/obj/structure/table/standard, -/obj/item/paper_bin{ - pixel_x = -1; - pixel_y = 5 - }, -/obj/item/pen{ - pixel_x = 1; - pixel_y = 7 - }, -/obj/item/device/radio/intercom/map_preset/skrellscoutship{ - pixel_y = 24 - }, -/turf/simulated/floor/carpet/magenta, -/area/ship/skrellscoutship/wings/starboard) -"gF" = ( -/turf/simulated/floor/tiled/skrell/blue, -/area/ship/skrellscoutship/crew/rec) -"gH" = ( -/obj/structure/cable{ - d1 = 2; - d2 = 8; - desc = "A flexible superconducting cable for heavy-duty power transfer. It's been labeled 'chaos reigns'."; - icon_state = "2-8" - }, -/turf/simulated/floor/tiled/skrell/blue, -/area/ship/skrellscoutship/crew/rec) -"gI" = ( -/obj/machinery/vending/dinnerware, -/turf/simulated/floor/tiled/skrell/white, -/area/ship/skrellscoutship/crew/rec) -"gK" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 - }, -/obj/structure/cable{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/turf/simulated/floor/tiled/skrell, -/area/ship/skrellscoutship/wings/starboard) -"gL" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/skrell, -/area/ship/skrellscoutship/wings/starboard) -"gM" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 - }, -/obj/structure/cable{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/turf/simulated/floor/tiled/skrell, -/area/ship/skrellscoutship/wings/starboard) -"gP" = ( -/obj/structure/table/rack, -/obj/machinery/light/skrell, -/obj/item/storage/belt/holster/skrell, -/obj/item/storage/belt/holster/skrell, -/obj/item/storage/belt/holster/skrell, -/obj/item/storage/belt/holster/skrell, -/obj/item/storage/belt/holster/skrell, -/obj/item/storage/belt/holster/skrell, -/obj/effect/floor_decal/industrial/outline/red, -/turf/simulated/floor/tiled/skrell/green, -/area/ship/skrellscoutship/command/armory) -"gQ" = ( -/obj/structure/flora/pottedplant/deskferntrim, -/obj/structure/window/reinforced{ - dir = 8 - }, -/obj/structure/window/reinforced, -/turf/simulated/floor/carpet/magenta, -/area/ship/skrellscoutship/wings/starboard) -"gS" = ( -/obj/structure/bed/chair/office/comfy/black, -/turf/simulated/floor/carpet/purple, -/area/ship/skrellscoutship/crew/rec) -"gT" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 - }, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/skrell/blue, -/area/ship/skrellscoutship/crew/rec) -"gU" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/tiled/skrell/blue, -/area/ship/skrellscoutship/crew/rec) -"gV" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 8; - level = 2 - }, -/obj/machinery/alarm/skrell{ - pixel_y = 14 - }, -/obj/structure/table/standard, -/turf/simulated/floor/tiled/skrell/white, -/area/ship/skrellscoutship/crew/rec) -"gX" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/computer/ship/sensors/skrell{ - dir = 4 - }, -/obj/structure/window/reinforced{ - dir = 8 - }, -/obj/structure/window/reinforced, -/turf/simulated/floor/tiled/skrell/blue, -/area/ship/skrellscoutship/command/bridge) -"gY" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 4 - }, -/turf/simulated/floor/carpet/purple, -/area/ship/skrellscoutship/crew/rec) -"ha" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/bed/chair/office/comfy/black{ - dir = 4 - }, -/turf/simulated/floor/carpet/purple, -/area/ship/skrellscoutship/crew/rec) -"hb" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/table/woodentable/walnut, -/obj/item/toy/plushie/kitten{ - pixel_y = 7 - }, -/turf/simulated/floor/carpet/purple, -/area/ship/skrellscoutship/crew/rec) -"hc" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled/skrell/blue, -/area/ship/skrellscoutship/crew/rec) -"hd" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/skrell/blue, -/area/ship/skrellscoutship/crew/rec) -"he" = ( -/obj/structure/table/standard, -/turf/simulated/floor/tiled/skrell/white, -/area/ship/skrellscoutship/crew/rec) -"hf" = ( -/obj/structure/table/standard, -/obj/machinery/chemical_dispenser/bar_soft/full, -/turf/simulated/floor/tiled/skrell/white, -/area/ship/skrellscoutship/crew/rec) -"hi" = ( -/obj/structure/table/standard, -/obj/item/device/integrated_circuit_printer, -/obj/item/stack/cable_coil/yellow, -/obj/structure/window/reinforced{ - dir = 1 - }, -/turf/simulated/floor/tiled/skrell/orange, -/area/ship/skrellscoutship/wings/starboard) -"hk" = ( -/obj/effect/paint/black, -/obj/effect/shuttle_landmark/skrellscoutship/start, -/obj/machinery/door/airlock/external/glass{ - frequency = 1331; - id_tag = "xil_scoutship_fore_external"; - locked = 1 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/black{ - dir = 4 - }, -/obj/machinery/door/blast/regular/open{ - dir = 4; - id_tag = "main_airlock_door" - }, -/obj/machinery/access_button/airlock_interior{ - command = "cycle_exterior"; - frequency = 1331; - master_tag = "xil_scoutship_fore_dock_controller"; - pixel_x = 24; - pixel_y = 12 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/ship/skrellscoutship/dock) -"hl" = ( -/obj/structure/hygiene/toilet{ - dir = 1 - }, -/obj/structure/curtain/open/privacy, -/obj/structure/handrail{ - dir = 1 - }, -/turf/simulated/floor/tiled/skrell/blue, -/area/ship/skrellscoutship/crew/rec) -"hm" = ( -/obj/structure/table/woodentable/walnut, -/obj/item/deck/cards{ - pixel_x = -6; - pixel_y = -3 - }, -/obj/item/reagent_containers/food/drinks/cans/waterbottle{ - pixel_x = 5 - }, -/turf/simulated/floor/carpet/purple, -/area/ship/skrellscoutship/crew/rec) -"hn" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/skrell/blue, -/area/ship/skrellscoutship/crew/rec) -"ho" = ( -/obj/machinery/seed_storage/garden, -/turf/simulated/floor/tiled/skrell/blue, -/area/ship/skrellscoutship/crew/kitchen) -"hp" = ( -/obj/structure/table/standard, -/turf/simulated/floor/tiled/skrell/blue, -/area/ship/skrellscoutship/crew/kitchen) -"hr" = ( -/obj/machinery/smartfridge, -/turf/simulated/floor/tiled/skrell/blue, -/area/ship/skrellscoutship/crew/kitchen) -"hs" = ( -/obj/machinery/portable_atmospherics/hydroponics, -/turf/simulated/floor/tiled/skrell/blue, -/area/ship/skrellscoutship/crew/kitchen) -"ht" = ( -/obj/machinery/cooker/grill, -/turf/simulated/floor/tiled/skrell/blue, -/area/ship/skrellscoutship/crew/kitchen) -"hu" = ( -/obj/structure/table/standard, -/obj/machinery/microwave, -/turf/simulated/floor/tiled/skrell/blue, -/area/ship/skrellscoutship/crew/kitchen) -"hv" = ( -/obj/machinery/atmospherics/unary/vent_pump/on, -/obj/machinery/computer/ship/navigation, -/turf/simulated/floor/tiled/skrell/red, -/area/ship/skrellscoutship/command/bridge) -"hx" = ( -/turf/simulated/floor/tiled/skrell/blue, -/area/ship/skrellscoutship/crew/kitchen) -"hy" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 - }, -/turf/simulated/floor/tiled/skrell/blue, -/area/ship/skrellscoutship/crew/kitchen) -"hz" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/tiled/skrell/blue, -/area/ship/skrellscoutship/crew/kitchen) -"hA" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/turf/simulated/floor/tiled/skrell/blue, -/area/ship/skrellscoutship/crew/kitchen) -"hB" = ( -/obj/structure/flora/pottedplant, -/turf/simulated/floor/carpet/purple, -/area/ship/skrellscoutship/crew/rec) -"hE" = ( -/turf/simulated/floor/tiled/skrell/red, -/area/ship/skrellscoutship/command/bridge) -"hF" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/tiled/skrell/red, -/area/ship/skrellscoutship/command/bridge) -"hI" = ( -/obj/structure/flora/pottedplant/unusual, -/obj/machinery/light/skrell{ - dir = 8; - icon_state = "tube1" - }, -/turf/simulated/floor/carpet/purple, -/area/ship/skrellscoutship/crew/rec) -"hJ" = ( -/obj/structure/table/woodentable/walnut, -/obj/item/device/radio/intercom/map_preset/skrellscoutship{ - dir = 1; - pixel_y = -32 - }, -/obj/machinery/recharger, -/turf/simulated/floor/tiled/skrell/blue, -/area/ship/skrellscoutship/crew/rec) -"hL" = ( -/obj/structure/table/woodentable/walnut, -/obj/item/storage/box/glasses/mug, -/obj/item/storage/box/glasses/wine{ - pixel_y = 8 - }, -/turf/simulated/floor/tiled/skrell/blue, -/area/ship/skrellscoutship/crew/rec) -"hO" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 4 - }, -/obj/structure/reagent_dispensers/watertank, -/turf/simulated/floor/tiled/skrell/blue, -/area/ship/skrellscoutship/crew/kitchen) -"hP" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/turf/simulated/floor/tiled/skrell/blue, -/area/ship/skrellscoutship/crew/kitchen) -"hQ" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 8; - level = 2 - }, -/turf/simulated/floor/tiled/skrell/blue, -/area/ship/skrellscoutship/crew/kitchen) -"hR" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/turf/simulated/floor/tiled/skrell/blue, -/area/ship/skrellscoutship/crew/kitchen) -"hS" = ( -/obj/machinery/alarm/skrell{ - dir = 1; - pixel_y = -22 - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/skrell/blue, -/area/ship/skrellscoutship/crew/kitchen) -"hT" = ( -/obj/machinery/power/apc/critical{ - name = "south bump"; - pixel_y = -24; - req_access = list("ACCESS_SKRELLSCOUT") - }, -/obj/machinery/power/terminal, -/obj/structure/cable{ - d2 = 8; - icon_state = "0-8" - }, -/turf/simulated/floor/tiled/skrell/blue, -/area/ship/skrellscoutship/crew/kitchen) -"hU" = ( -/obj/structure/table/standard, -/obj/machinery/reagentgrinder/juicer, -/obj/item/reagent_containers/glass/beaker/large, -/turf/simulated/floor/tiled/skrell/blue, -/area/ship/skrellscoutship/crew/kitchen) -"hX" = ( -/obj/machinery/alarm/skrell{ - pixel_y = 14 - }, -/obj/machinery/power/apc/critical{ - dir = 4; - name = "east bump"; - pixel_x = 24; - req_access = list("ACCESS_SKRELLSCOUT") - }, -/obj/machinery/power/terminal{ - dir = 4 - }, -/obj/structure/cable{ - d2 = 2; - icon_state = "0-2" - }, -/obj/structure/table/glass, -/obj/item/folder/red{ - pixel_x = 7 - }, -/obj/item/reagent_containers/food/drinks/cans/waterbottle{ - pixel_x = -5; - pixel_y = 9 - }, -/obj/item/reagent_containers/food/drinks/glass2/pint, -/turf/simulated/floor/tiled/skrell/red, -/area/ship/skrellscoutship/command/bridge) -"hY" = ( -/obj/machinery/door/airlock{ - name = "Hydroponics" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/door/firedoor/autoset, -/turf/simulated/floor/tiled/dark/monotile, -/area/ship/skrellscoutship/crew/kitchen) -"hZ" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/door/airlock/multi_tile/glass{ - name = "Hall" - }, -/obj/machinery/door/firedoor/autoset, -/turf/simulated/floor/tiled/dark/monotile, -/area/ship/skrellscoutship/wings/starboard) -"ia" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/bed/chair/comfy/red{ - dir = 1 - }, -/turf/simulated/floor/tiled/skrell/red, -/area/ship/skrellscoutship/command/bridge) -"ib" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/skrell/red, -/area/ship/skrellscoutship/command/bridge) -"ic" = ( -/obj/structure/table/glass, -/obj/item/folder/red, -/turf/simulated/floor/tiled/skrell/red, -/area/ship/skrellscoutship/command/bridge) -"id" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/obj/machinery/computer/ship/helm{ - dir = 4 - }, -/obj/structure/window/reinforced{ - dir = 8 - }, -/turf/simulated/floor/tiled/skrell/blue, -/area/ship/skrellscoutship/command/bridge) -"ie" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/effect/overmap/visitable/ship/landable/skrellscoutship, -/obj/structure/bed/chair/comfy/red{ - dir = 8 - }, -/turf/simulated/floor/tiled/skrell/blue, -/area/ship/skrellscoutship/command/bridge) -"if" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/tiled/skrell/blue, -/area/ship/skrellscoutship/command/bridge) -"ig" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/tiled/skrell/red, -/area/ship/skrellscoutship/command/bridge) -"ih" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/turf/simulated/floor/tiled/skrell/red, -/area/ship/skrellscoutship/command/bridge) -"ii" = ( -/obj/machinery/computer/ship/navigation{ - dir = 4 - }, -/turf/simulated/floor/tiled/skrell/red, -/area/ship/skrellscoutship/command/bridge{ - dir = 4 - }) -"ij" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/skrell/red, -/area/ship/skrellscoutship/command/bridge) -"il" = ( -/turf/simulated/floor/tiled/skrell, -/area/ship/skrellscoutship/wings/port) -"im" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/skrell, -/area/ship/skrellscoutship/wings/port) -"ip" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 1 - }, -/turf/simulated/floor/tiled/skrell/red, -/area/ship/skrellscoutship/command/bridge) -"ir" = ( -/obj/structure/flora/pottedplant/large, -/turf/simulated/floor/tiled/skrell, -/area/ship/skrellscoutship/wings/port) -"is" = ( -/obj/structure/flora/pottedplant/aquatic, -/turf/simulated/floor/tiled/skrell, -/area/ship/skrellscoutship/wings/port) -"iu" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/obj/structure/cable{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/turf/simulated/floor/tiled/skrell, -/area/ship/skrellscoutship/wings/port) -"iv" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/skrell, -/area/ship/skrellscoutship/wings/port) -"iw" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/alarm/skrell{ - pixel_y = 14 - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/skrell, -/area/ship/skrellscoutship/wings/port) -"ix" = ( -/obj/structure/table/standard, -/obj/item/pen, -/obj/item/paper_bin{ - pixel_x = -3; - pixel_y = 7 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/obj/structure/cable{ - d1 = 2; - d2 = 8; - desc = "A flexible superconducting cable for heavy-duty power transfer. It's been labeled 'chaos reigns'."; - icon_state = "2-8" - }, -/turf/simulated/floor/tiled/skrell, -/area/ship/skrellscoutship/wings/port) -"iz" = ( -/obj/structure/table/standard, -/obj/item/folder, -/obj/item/folder, -/obj/item/pen, -/obj/item/device/radio/intercom/map_preset/skrellscoutship{ - pixel_y = 24 - }, -/turf/simulated/floor/tiled/skrell, -/area/ship/skrellscoutship/wings/port) -"iC" = ( -/turf/simulated/floor/carpet/blue, -/area/ship/skrellscoutship/wings/port) -"iD" = ( -/obj/structure/bed/chair/comfy/red, -/turf/simulated/floor/carpet/blue, -/area/ship/skrellscoutship/wings/port) -"iE" = ( -/obj/machinery/shipsensors, -/turf/simulated/floor/reinforced/airless, -/area/ship/skrellscoutship/wings/port) -"iF" = ( -/obj/structure/bed/chair/comfy/red{ - dir = 4 - }, -/turf/simulated/floor/carpet/blue, -/area/ship/skrellscoutship/wings/port) -"iG" = ( -/obj/structure/table/woodentable/walnut, -/turf/simulated/floor/carpet/blue, -/area/ship/skrellscoutship/wings/port) -"iH" = ( -/obj/structure/table/woodentable/walnut, -/obj/random/clipboard, -/obj/item/pen, -/turf/simulated/floor/carpet/blue, -/area/ship/skrellscoutship/wings/port) -"iI" = ( -/obj/structure/bed/chair/comfy/red{ - dir = 8 - }, -/turf/simulated/floor/carpet/blue, -/area/ship/skrellscoutship/wings/port) -"iJ" = ( -/obj/structure/table/standard, -/obj/item/paper_bin{ - pixel_x = -3; - pixel_y = 7 - }, -/obj/item/pen, -/turf/simulated/floor/tiled/skrell, -/area/ship/skrellscoutship/wings/port) -"iL" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 1 - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/skrell, -/area/ship/skrellscoutship/wings/port) -"iM" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/carpet/blue, -/area/ship/skrellscoutship/wings/port) -"iN" = ( -/obj/structure/bed/chair/comfy/red{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/cable{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/turf/simulated/floor/carpet/blue, -/area/ship/skrellscoutship/wings/port) -"iO" = ( -/obj/structure/bed/chair/comfy/red{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 1 - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/carpet/blue, -/area/ship/skrellscoutship/wings/port) -"iP" = ( -/obj/structure/bed/chair/comfy/red{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/carpet/blue, -/area/ship/skrellscoutship/wings/port) -"iQ" = ( -/obj/structure/table/standard, -/obj/item/folder, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/obj/structure/cable{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/turf/simulated/floor/tiled/skrell, -/area/ship/skrellscoutship/wings/port) -"iR" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 4 - }, -/turf/simulated/floor/tiled/skrell, -/area/ship/skrellscoutship/wings/port) -"iT" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/skrell, -/area/ship/skrellscoutship/wings/port) -"iV" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/skrell, -/area/ship/skrellscoutship/wings/port) -"iW" = ( -/obj/structure/reagent_dispensers/water_cooler{ - dir = 4 - }, -/turf/simulated/floor/tiled/skrell, -/area/ship/skrellscoutship/wings/port) -"iY" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 1 - }, -/turf/simulated/floor/tiled/skrell, -/area/ship/skrellscoutship/wings/port) -"iZ" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 8 - }, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/cable{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/turf/simulated/floor/tiled/skrell, -/area/ship/skrellscoutship/wings/port) -"jd" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 - }, -/turf/simulated/floor/tiled/skrell/green, -/area/ship/skrellscoutship/robotics) -"jf" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 - }, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/skrell/green, -/area/ship/skrellscoutship/robotics) -"jg" = ( -/turf/simulated/floor/tiled/skrell, -/area/ship/skrellscoutship/dock) -"jh" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 4 - }, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/skrell, -/area/ship/skrellscoutship/corridor) -"ji" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 1 - }, -/obj/structure/cable{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/turf/simulated/floor/tiled/skrell/green, -/area/ship/skrellscoutship/robotics) -"jn" = ( -/obj/machinery/cryopod{ - dir = 4 - }, -/obj/machinery/computer/cryopod{ - pixel_x = -32 - }, -/turf/simulated/floor/tiled/skrell/blue, -/area/ship/skrellscoutship/crew/quarters) -"jo" = ( -/obj/structure/table/rack, -/obj/item/tank/oxygen, -/obj/item/tank/oxygen, -/obj/item/tank/oxygen, -/obj/item/clothing/mask/breath, -/obj/item/clothing/mask/breath, -/obj/item/clothing/mask/breath, -/obj/item/inflatable_dispenser, -/turf/simulated/floor/tiled/skrell/green, -/area/ship/skrellscoutship/forestorage) -"jp" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 4 - }, -/turf/simulated/floor/tiled/skrell/green, -/area/ship/skrellscoutship/forestorage) -"jq" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 - }, -/obj/machinery/light/skrell{ - dir = 4 - }, -/obj/machinery/portable_atmospherics/powered/pump/filled, -/turf/simulated/floor/tiled/skrell/green, -/area/ship/skrellscoutship/forestorage) -"jr" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/computer/shuttle_control/explore/skrellscoutship{ - dir = 4 - }, -/obj/structure/window/reinforced{ - dir = 8 - }, -/obj/structure/window/reinforced{ - dir = 1 - }, -/turf/simulated/floor/tiled/skrell/blue, -/area/ship/skrellscoutship/command/bridge) -"js" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, -/turf/simulated/floor/tiled/skrell/red, -/area/ship/skrellscoutship/hangar) -"jt" = ( -/turf/simulated/floor/carpet/magenta, -/area/ship/skrellscoutship/wings/starboard) -"ju" = ( -/obj/structure/closet/secure_closet/brig{ - id = "Cell 1"; - name = "Cell Locker"; - req_access = list("ACCESS_SKRELLSCOUT") - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/light/skrell{ - dir = 8 - }, -/turf/simulated/floor/tiled/skrell, -/area/ship/skrellscoutship/dock) -"jv" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/tiled/skrell/red, -/area/ship/skrellscoutship/hangar) -"jx" = ( -/obj/machinery/light/skrell{ - dir = 4 - }, -/obj/structure/reagent_dispensers/water_cooler{ - dir = 1 - }, -/turf/simulated/floor/tiled/skrell/blue, -/area/ship/skrellscoutship/crew/quarters) -"jB" = ( -/obj/machinery/vending/engivend{ - scan_id = 0 - }, -/obj/machinery/light/skrell{ - dir = 1 - }, -/turf/simulated/floor/tiled/skrell/green, -/area/ship/skrellscoutship/robotics) -"jD" = ( -/obj/structure/table/rack, -/obj/structure/window/basic{ - dir = 8 - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/item/stack/material/aluminium/fifty, -/obj/item/stack/material/aluminium/fifty, -/obj/item/stack/material/aluminium/fifty, -/obj/item/stack/material/aluminium/fifty, -/obj/item/stack/material/aluminium/fifty, -/turf/simulated/floor/tiled/skrell/green, -/area/ship/skrellscoutship/robotics) -"jE" = ( -/obj/structure/table/rack, -/obj/item/stack/material/steel/fifty, -/obj/item/stack/material/steel/fifty, -/obj/item/stack/material/steel/fifty, -/obj/item/stack/material/steel/fifty, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled/skrell/green, -/area/ship/skrellscoutship/robotics) -"jF" = ( -/obj/structure/table/rack, -/obj/structure/window/basic, -/obj/structure/window/basic{ - dir = 8 - }, -/obj/item/stack/material/plasteel/fifty, -/obj/item/stack/material/plasteel/fifty, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled/skrell/green, -/area/ship/skrellscoutship/robotics) -"jG" = ( -/obj/structure/table/rack, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/item/stack/material/glass/reinforced/fifty, -/obj/item/stack/material/glass/reinforced/fifty, -/obj/item/stack/material/glass/reinforced/fifty, -/obj/item/stack/material/glass/reinforced/fifty, -/obj/item/stack/material/glass/reinforced/fifty, -/turf/simulated/floor/tiled/skrell/green, -/area/ship/skrellscoutship/robotics) -"jO" = ( -/obj/machinery/power/terminal{ - dir = 4 - }, -/obj/machinery/power/apc/critical{ - dir = 4; - name = "east bump"; - pixel_x = 24; - req_access = list("ACCESS_SKRELLSCOUT") - }, -/obj/structure/cable{ - d2 = 8; - icon_state = "0-8" - }, -/turf/simulated/floor/tiled/skrell/green, -/area/ship/skrellscoutship/robotics) -"jP" = ( -/obj/structure/table/rack, -/obj/machinery/light/skrell{ - dir = 8 - }, -/obj/item/storage/belt/holster/skrell, -/obj/item/storage/belt/holster/skrell, -/obj/item/storage/belt/holster/skrell, -/obj/item/storage/belt/holster/skrell, -/obj/item/storage/belt/holster/skrell, -/obj/item/storage/belt/holster/skrell, -/obj/effect/floor_decal/industrial/outline/red, -/turf/simulated/floor/tiled/skrell/green, -/area/ship/skrellscoutship/robotics) -"jQ" = ( -/obj/structure/window/phoronreinforced{ - dir = 1 - }, -/turf/simulated/floor/tiled/skrell/green, -/area/ship/skrellscoutship/robotics) -"jU" = ( -/obj/structure/table/rack, -/obj/structure/window/basic, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/item/stack/material/glass/phoronrglass/ten, -/obj/item/stack/material/glass/phoronrglass/ten, -/obj/item/stack/material/glass/phoronrglass/ten, -/obj/item/stack/material/glass/phoronrglass/ten, -/obj/item/stack/material/glass/phoronrglass/ten, -/turf/simulated/floor/tiled/skrell/green, -/area/ship/skrellscoutship/robotics) -"jV" = ( -/obj/structure/table/rack, -/obj/structure/window/basic, -/obj/item/stack/material/titanium/fifty, -/obj/item/stack/material/titanium/fifty, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled/skrell/green, -/area/ship/skrellscoutship/robotics) -"jW" = ( -/obj/structure/table/rack, -/obj/item/magnetic_ammo/skrell/slug, -/obj/item/magnetic_ammo/skrell/slug, -/obj/item/magnetic_ammo/skrell/slug, -/obj/item/magnetic_ammo/skrell/slug, -/obj/item/magnetic_ammo/skrell/slug, -/obj/item/magnetic_ammo/skrell/slug, -/obj/item/magnetic_ammo/skrell/slug, -/obj/item/magnetic_ammo/skrell/slug, -/obj/item/magnetic_ammo/skrell/slug, -/obj/item/magnetic_ammo/skrell/slug, -/obj/effect/floor_decal/industrial/outline/red, -/turf/simulated/floor/tiled/skrell/green, -/area/ship/skrellscoutship/robotics) -"ka" = ( -/obj/machinery/portable_atmospherics/canister/air, -/obj/structure/window/basic{ - dir = 1 - }, -/obj/effect/floor_decal/industrial/outline/blue, -/turf/simulated/floor/tiled/skrell/green, -/area/ship/skrellscoutship/robotics) -"kc" = ( -/obj/structure/table/glass, -/obj/item/storage/firstaid/adv{ - pixel_x = 9; - pixel_y = 10 - }, -/obj/item/storage/firstaid/adv{ - pixel_x = -9; - pixel_y = -2 - }, -/obj/item/storage/firstaid/adv{ - pixel_x = -9; - pixel_y = 10 - }, -/turf/simulated/floor/tiled/skrell/white, -/area/ship/skrellscoutship/crew/medbay) -"kd" = ( -/obj/structure/table/rack, -/obj/item/gun/magnetic/railgun/flechette/skrell, -/obj/item/gun/magnetic/railgun/flechette/skrell, -/obj/item/gun/magnetic/railgun/flechette/skrell, -/obj/effect/floor_decal/industrial/outline/red, -/turf/simulated/floor/tiled/skrell/green, -/area/ship/skrellscoutship/robotics) -"ke" = ( -/obj/structure/table/rack, -/obj/item/magnetic_ammo/skrell, -/obj/item/magnetic_ammo/skrell, -/obj/item/magnetic_ammo/skrell, -/obj/item/magnetic_ammo/skrell, -/obj/item/magnetic_ammo/skrell, -/obj/item/magnetic_ammo/skrell, -/obj/item/magnetic_ammo/skrell, -/obj/item/magnetic_ammo/skrell, -/obj/item/magnetic_ammo/skrell, -/obj/item/magnetic_ammo/skrell, -/obj/effect/floor_decal/industrial/outline/red, -/turf/simulated/floor/tiled/skrell/green, -/area/ship/skrellscoutship/robotics) -"kh" = ( -/obj/structure/table/rack, -/obj/structure/window/phoronreinforced{ - dir = 4 - }, -/obj/item/melee/energy/machete, -/obj/item/melee/energy/machete, -/obj/item/melee/energy/machete, -/obj/item/melee/energy/machete, -/obj/effect/floor_decal/industrial/outline/red, -/turf/simulated/floor/tiled/skrell/green, -/area/ship/skrellscoutship/robotics) -"kj" = ( -/obj/machinery/portable_atmospherics/canister/carbon_dioxide, -/obj/effect/floor_decal/industrial/outline/blue, -/turf/simulated/floor/tiled/skrell/green, -/area/ship/skrellscoutship/robotics) -"km" = ( -/obj/structure/table/rack, -/turf/simulated/floor/tiled/skrell/green, -/area/ship/skrellscoutship/robotics) -"kn" = ( -/obj/machinery/alarm/skrell{ - dir = 1; - pixel_y = -22 - }, -/turf/simulated/floor/tiled/skrell/green, -/area/ship/skrellscoutship/robotics) -"kq" = ( -/turf/simulated/floor/tiled/skrell, -/area/ship/skrellscoutship/corridor) -"kr" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/skrell, -/area/ship/skrellscoutship/corridor) -"ks" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/door/airlock/multi_tile/glass/command{ - dir = 8; - id_tag = "mainbridge"; - name = "Bridge Access" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/door/firedoor/autoset, -/turf/simulated/floor/tiled/dark/monotile, -/area/ship/skrellscoutship/command/bridge) -"kt" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/tiled/skrell, -/area/ship/skrellscoutship/corridor) -"ku" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 1 - }, -/obj/structure/cable{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 1 - }, -/turf/simulated/floor/tiled/skrell, -/area/ship/skrellscoutship/corridor) -"kv" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply, -/obj/structure/cable{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/structure/cable{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/turf/simulated/floor/tiled/skrell, -/area/ship/skrellscoutship/corridor) -"kw" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/turf/simulated/floor/tiled/skrell, -/area/ship/skrellscoutship/corridor) -"kx" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 1 - }, -/obj/structure/cable{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/turf/simulated/floor/tiled/skrell, -/area/ship/skrellscoutship/corridor) -"ky" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply, -/obj/structure/cable{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/turf/simulated/floor/tiled/skrell, -/area/ship/skrellscoutship/corridor) -"kz" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply, -/obj/structure/cable{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/structure/cable{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/turf/simulated/floor/tiled/skrell, -/area/ship/skrellscoutship/corridor) -"kA" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 4 - }, -/turf/simulated/floor/tiled/skrell, -/area/ship/skrellscoutship/corridor) -"kB" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/skrell, -/area/ship/skrellscoutship/corridor) -"kE" = ( -/turf/simulated/floor/tiled/skrell/red, -/area/ship/skrellscoutship/externalwing/port) -"kF" = ( -/obj/machinery/ion_engine{ - dir = 8 - }, -/turf/simulated/floor/reinforced/airless, -/area/ship/skrellscoutship/robotics) -"kG" = ( -/obj/effect/landmark/map_data, -/obj/effect/overmap/visitable/sector/skrellscoutspace, -/turf/space, -/area/space) -"kH" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 1 - }, -/obj/structure/cable{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/effect/shuttle_landmark/skrellscoutshuttle/start, -/turf/simulated/floor/tiled/skrell/red, -/area/ship/skrellscoutship/hangar) -"kI" = ( -/obj/effect/overmap/visitable/ship/landable/skrellscoutshuttle, -/turf/simulated/floor/tiled/skrell, -/area/ship/skrellscoutshuttle) -"kK" = ( -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/effect/paint/black, -/turf/simulated/wall/r_wall, -/area/ship/skrellscoutshuttle) -"kQ" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 8; - level = 2 - }, -/obj/machinery/light/skrell{ - dir = 1 - }, -/turf/simulated/floor/tiled/skrell, -/area/ship/skrellscoutshuttle) -"kV" = ( -/obj/machinery/light/skrell, -/obj/structure/table/glass, -/obj/item/paper_bin{ - pixel_x = 5; - pixel_y = 4 - }, -/obj/item/pen, -/turf/simulated/floor/tiled/skrell/red, -/area/ship/skrellscoutship/command/bridge) -"kZ" = ( -/obj/machinery/light/skrell{ - dir = 8 - }, -/obj/structure/bed/chair/shuttle/blue{ - dir = 1 - }, -/obj/item/device/radio/intercom/map_preset/skrellscoutship{ - default_hailing = 1; - dir = 1; - pixel_y = -32 - }, -/turf/simulated/floor/tiled/skrell, -/area/ship/skrellscoutshuttle) -"la" = ( -/obj/machinery/power/apc/critical{ - dir = 1; - name = "north bump"; - pixel_y = 24; - req_access = list("ACCESS_SKRELLSCOUT") - }, -/obj/machinery/power/terminal{ - dir = 1 - }, -/obj/structure/cable{ - d2 = 4; - icon_state = "0-4" - }, -/obj/machinery/light/skrell{ - dir = 1; - icon_state = "tube1" - }, -/turf/simulated/floor/tiled/skrell/blue, -/area/ship/skrellscoutship/crew/rec) -"lc" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/door/airlock/multi_tile/glass{ - name = "Hall" - }, -/obj/machinery/door/firedoor/autoset, -/turf/simulated/floor/tiled/dark/monotile, -/area/ship/skrellscoutship/dock) -"li" = ( -/obj/machinery/light/skrell{ - dir = 8; - icon_state = "tube1" - }, -/turf/simulated/floor/carpet/purple, -/area/ship/skrellscoutship/crew/rec) -"lG" = ( -/obj/structure/bed/padded, -/obj/item/bedsheet/brown, -/obj/machinery/alarm/skrell{ - dir = 8; - pixel_x = 22 - }, -/turf/simulated/floor/tiled/skrell, -/area/ship/skrellscoutship/dock) -"lK" = ( -/obj/effect/paint/black, -/obj/effect/wallframe_spawn/reinforced_phoron/hull, -/turf/simulated/floor/tiled/dark/monotile, -/area/ship/skrellscoutship/crew/rec) -"lQ" = ( -/obj/structure/bed/chair/comfy/yellow{ - dir = 1 - }, -/turf/simulated/floor/tiled/skrell/orange, -/area/ship/skrellscoutship/wings/starboard) -"mn" = ( -/obj/machinery/power/smes/buildable/max_cap_in_out, -/obj/structure/cable/cyan{ - d2 = 2; - icon_state = "0-2" - }, -/turf/simulated/floor/tiled/skrell, -/area/ship/skrellscoutshuttle) -"mt" = ( -/obj/structure/closet/cabinet, -/obj/item/clothing/accessory/storage/black_vest, -/obj/machinery/light/skrell{ - dir = 4 - }, -/obj/item/device/radio/headset/map_preset/skrellscoutship, -/obj/item/device/radio/hailing, -/obj/item/clothing/accessory/storage/holster/thigh, -/turf/simulated/floor/tiled/skrell/blue, -/area/ship/skrellscoutship/crew/quarters) -"mx" = ( -/obj/machinery/light/skrell, -/turf/simulated/floor/tiled/skrell/green, -/area/ship/skrellscoutship/robotics) -"my" = ( -/obj/machinery/door/airlock/security{ - name = "Brig" - }, -/obj/machinery/door/firedoor/autoset, -/turf/simulated/floor/tiled/dark/monotile, -/area/ship/skrellscoutship/dock) -"mz" = ( -/obj/machinery/computer/shuttle_control/explore/skrellscoutshuttle{ - dir = 4 - }, -/turf/simulated/floor/tiled/skrell, -/area/ship/skrellscoutshuttle) -"mI" = ( -/obj/effect/paint/black, -/turf/simulated/wall/r_wall, -/area/ship/skrellscoutship/maintenance/power) -"mL" = ( -/obj/machinery/computer/operating, -/obj/machinery/light/skrell{ - dir = 1 - }, -/turf/simulated/floor/tiled/skrell/white, -/area/ship/skrellscoutship/crew/medbay) -"mP" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/turf/simulated/floor/tiled/skrell/red, -/area/ship/skrellscoutship/hangar) -"nb" = ( -/obj/structure/filingcabinet/chestdrawer, -/obj/structure/window/reinforced{ - dir = 4 - }, -/obj/structure/window/reinforced, -/turf/simulated/floor/carpet/magenta, -/area/ship/skrellscoutship/wings/starboard) -"nc" = ( -/obj/item/device/radio/intercom/map_preset/skrellscoutship{ - dir = 1; - pixel_y = -32 - }, -/turf/simulated/floor/tiled/skrell/blue, -/area/ship/skrellscoutship/crew/kitchen) -"ng" = ( -/obj/machinery/light/skrell{ - dir = 1 - }, -/turf/simulated/floor/tiled/skrell, -/area/ship/skrellscoutship/dock) -"nj" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/door/airlock/glass/civilian{ - name = "Living Area" - }, -/obj/machinery/door/firedoor/autoset, -/turf/simulated/floor/tiled/dark/monotile, -/area/ship/skrellscoutship/crew/rec) -"nr" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/effect/paint/black, -/obj/machinery/door/airlock/engineering, -/obj/machinery/door/firedoor/autoset, -/turf/simulated/floor/tiled/dark/monotile, -/area/ship/skrellscoutship/maintenance/power) -"nD" = ( -/obj/machinery/atmospherics/portables_connector{ - dir = 1 - }, -/obj/machinery/portable_atmospherics/canister/empty, -/obj/effect/floor_decal/industrial/outline/red, -/turf/simulated/floor/tiled/skrell, -/area/ship/skrellscoutshuttle) -"nG" = ( -/obj/structure/table/rack, -/obj/item/storage/box/lights/tubes/skrell, -/obj/item/storage/box/lights/tubes/skrell, -/turf/simulated/floor/tiled/skrell/green, -/area/ship/skrellscoutship/robotics) -"nJ" = ( -/obj/effect/paint/black, -/obj/effect/wallframe_spawn/reinforced_phoron/hull, -/turf/simulated/floor/tiled/dark/monotile, -/area/ship/skrellscoutship/crew/kitchen) -"nK" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/item/stool/bar/padded, -/turf/simulated/floor/tiled/skrell/white, -/area/ship/skrellscoutship/crew/rec) -"nR" = ( -/obj/effect/paint/black, -/obj/effect/wallframe_spawn/reinforced_phoron/hull, -/turf/simulated/floor/tiled/dark/monotile, -/area/ship/skrellscoutship/crew/medbay) -"nT" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/window/reinforced{ - dir = 8 - }, -/turf/simulated/floor/tiled/skrell, -/area/ship/skrellscoutship/wings/starboard) -"oa" = ( -/obj/machinery/atmospherics/unary/vent_pump/high_volume/shuttle{ - id_tag = "xil_shuttle_pump_out_internal" - }, -/turf/simulated/floor/tiled/skrell, -/area/ship/skrellscoutshuttle) -"oj" = ( -/obj/machinery/light/skrell, -/turf/simulated/floor/tiled/skrell, -/area/ship/skrellscoutship/wings/starboard) -"or" = ( -/obj/structure/table/woodentable/walnut, -/obj/item/reagent_containers/food/condiment/psilocybin{ - pixel_x = 4; - pixel_y = 4 - }, -/obj/item/reagent_containers/food/condiment/space_drugs{ - pixel_x = -4; - pixel_y = 4 - }, -/obj/item/reagent_containers/food/condiment/mindbreaker, -/obj/machinery/light/skrell, -/turf/simulated/floor/tiled/skrell/blue, -/area/ship/skrellscoutship/crew/rec) -"oB" = ( -/obj/machinery/atmospherics/portables_connector{ - dir = 1 - }, -/obj/effect/floor_decal/industrial/outline/blue, -/turf/simulated/floor/tiled/skrell/orange, -/area/ship/skrellscoutship/maintenance/atmos) -"oK" = ( -/obj/effect/wallframe_spawn/reinforced_phoron/hull, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/effect/paint/black, -/turf/simulated/floor/plating, -/area/ship/skrellscoutshuttle) -"pa" = ( -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/manifold/visible/red{ - dir = 1 - }, -/obj/machinery/meter, -/turf/simulated/floor/tiled/skrell, -/area/ship/skrellscoutshuttle) -"pb" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/cyan{ - dir = 4 - }, -/turf/simulated/floor/tiled/skrell, -/area/ship/skrellscoutship/dock) -"pe" = ( -/obj/machinery/power/terminal{ - dir = 4 - }, -/obj/structure/cable/green, -/obj/machinery/light/skrell, -/turf/simulated/floor/tiled/skrell/orange, -/area/ship/skrellscoutship/maintenance/power) -"pj" = ( -/obj/machinery/computer/ship/navigation{ - dir = 8 - }, -/obj/structure/window/reinforced, -/obj/structure/window/reinforced{ - dir = 4 - }, -/turf/simulated/floor/tiled/skrell/blue, -/area/ship/skrellscoutship/command/bridge) -"py" = ( -/obj/machinery/light/skrell, -/turf/simulated/floor/tiled/skrell/blue, -/area/ship/skrellscoutship/crew/kitchen) -"pz" = ( -/obj/machinery/atmospherics/unary/vent_pump/high_volume/shuttle{ - dir = 1; - id_tag = "xil_shuttle_pump" - }, -/obj/machinery/airlock_sensor{ - frequency = 1331; - id_tag = "xil_shuttle_sensor"; - pixel_y = 22 - }, -/turf/simulated/floor/tiled/skrell, -/area/ship/skrellscoutshuttle) -"pK" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/tiled/skrell/blue, -/area/ship/skrellscoutship/crew/quarters) -"pO" = ( -/obj/effect/wallframe_spawn/reinforced_phoron/hull, -/obj/effect/paint/black, -/turf/simulated/floor/carpet/purple, -/area/ship/skrellscoutship/crew/rec) -"pY" = ( -/obj/effect/wallframe_spawn/reinforced, -/obj/effect/paint/black, -/turf/simulated/floor/tiled/skrell/white, -/area/ship/skrellscoutship/crew/medbay) -"pZ" = ( -/obj/machinery/alarm/skrell{ - pixel_y = 14 - }, -/turf/simulated/floor/tiled/skrell, -/area/ship/skrellscoutship/corridor) -"qm" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 - }, -/turf/simulated/floor/tiled/skrell/blue, -/area/ship/skrellscoutship/crew/quarters) -"qs" = ( -/obj/machinery/alarm/skrell{ - dir = 1; - pixel_y = -25 - }, -/obj/machinery/light/skrell{ - dir = 8 - }, -/obj/structure/flora/pottedplant/aquatic, -/turf/simulated/floor/tiled/skrell, -/area/ship/skrellscoutship/dock) -"qu" = ( -/obj/machinery/door/airlock/glass{ - name = "Gym" - }, -/obj/machinery/door/firedoor/autoset, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/ship/skrellscoutship/crew/quarters) -"qC" = ( -/obj/structure/table/rack, -/obj/item/inflatable_dispenser, -/obj/item/inflatable_dispenser, -/obj/item/inflatable_dispenser, -/obj/item/inflatable_dispenser, -/obj/machinery/light/skrell{ - dir = 8 - }, -/obj/item/device/radio/intercom/map_preset/skrellscoutship{ - dir = 4; - pixel_x = -24 - }, -/turf/simulated/floor/tiled/skrell/green, -/area/ship/skrellscoutship/robotics) -"qD" = ( -/obj/machinery/light/skrell{ - dir = 1; - icon_state = "tube1" - }, -/turf/simulated/floor/tiled/skrell/blue, -/area/ship/skrellscoutship/crew/quarters) -"qG" = ( -/obj/machinery/light/skrell, -/turf/simulated/floor/tiled/skrell, -/area/ship/skrellscoutship/wings/port) -"qO" = ( -/obj/item/device/radio/intercom/map_preset/skrellscoutship{ - pixel_y = 24 - }, -/turf/simulated/floor/tiled/skrell/red, -/area/ship/skrellscoutship/command/bridge) -"qT" = ( -/obj/machinery/chemical_dispenser/full, -/obj/machinery/light/skrell{ - dir = 8 - }, -/turf/simulated/floor/tiled/skrell/white, -/area/ship/skrellscoutship/crew/medbay) -"rl" = ( -/obj/structure/fitness/punchingbag, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 - }, -/turf/simulated/floor/tiled/skrell/blue, -/area/ship/skrellscoutship/crew/quarters) -"rv" = ( -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/tiled/skrell/red, -/area/ship/skrellscoutship/hangar) -"rx" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/paint/black, -/obj/machinery/door/airlock/atmos{ - name = "Atmospherics" - }, -/obj/machinery/door/firedoor/autoset, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/ship/skrellscoutship/maintenance/atmos) -"ry" = ( -/obj/machinery/vending/security{ - scan_id = 0 - }, -/turf/simulated/floor/tiled/skrell/green, -/area/ship/skrellscoutship/robotics) -"rz" = ( -/obj/structure/table/rack, -/obj/structure/window/basic, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/item/stack/material/plastic/fifty, -/obj/item/stack/material/plastic/fifty, -/obj/item/stack/material/plastic/fifty, -/obj/item/stack/material/plastic/fifty, -/obj/item/stack/material/plastic/fifty, -/turf/simulated/floor/tiled/skrell/green, -/area/ship/skrellscoutship/robotics) -"rR" = ( -/obj/effect/wallframe_spawn/reinforced_phoron/hull, -/obj/effect/paint/black, -/turf/simulated/floor/plating, -/area/ship/skrellscoutship/crew/quarters) -"su" = ( -/obj/structure/bed/chair/office/comfy/black{ - dir = 8 - }, -/turf/simulated/floor/carpet/purple, -/area/ship/skrellscoutship/crew/rec) -"sD" = ( -/obj/item/device/radio/intercom/map_preset/skrellscoutship{ - dir = 4; - pixel_x = -24 - }, -/turf/simulated/floor/tiled/skrell, -/area/ship/skrellscoutship/dock) -"sF" = ( -/obj/machinery/light/skrell{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/turf/simulated/floor/tiled/skrell/red, -/area/ship/skrellscoutship/hangar) -"sG" = ( -/obj/effect/paint/black, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/turf/simulated/wall/r_wall, -/area/ship/skrellscoutshuttle) -"sL" = ( -/obj/machinery/light/skrell{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/turf/simulated/floor/tiled/skrell/red, -/area/ship/skrellscoutship/hangar) -"sP" = ( -/turf/simulated/floor/tiled/skrell/blue, -/area/ship/skrellscoutship/command/bridge) -"sQ" = ( -/obj/machinery/atmospherics/unary/vent_pump/on, -/turf/simulated/floor/tiled/skrell, -/area/ship/skrellscoutship/dock) -"th" = ( -/obj/effect/paint/black, -/obj/machinery/atmospherics/pipe/simple/hidden/black{ - dir = 5 - }, -/turf/simulated/wall/r_wall, -/area/ship/skrellscoutshuttle) -"tl" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/light/skrell, -/turf/simulated/floor/tiled/skrell, -/area/ship/skrellscoutship/corridor) -"tL" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/skrell/red, -/area/ship/skrellscoutship/hangar) -"tN" = ( -/obj/machinery/ion_engine{ - dir = 8 - }, -/turf/simulated/floor/plating, -/area/ship/skrellscoutshuttle) -"tY" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/skrell/green, -/area/ship/skrellscoutship/robotics) -"tZ" = ( -/obj/machinery/light/skrell, -/turf/simulated/floor/tiled/skrell, -/area/ship/skrellscoutship/corridor) -"ug" = ( -/obj/effect/paint/black, -/obj/effect/wallframe_spawn/reinforced_phoron/hull, -/turf/simulated/floor/plating, -/area/ship/skrellscoutship/crew/quarters) -"uk" = ( -/obj/effect/paint/black, -/turf/simulated/wall/r_wall, -/area/ship/skrellscoutship/crew/medbay) -"ur" = ( -/obj/item/stool/bar/padded, -/turf/simulated/floor/tiled/skrell/white, -/area/ship/skrellscoutship/crew/rec) -"uB" = ( -/obj/effect/paint/black, -/obj/effect/wallframe_spawn/reinforced_phoron/hull, -/obj/machinery/door/blast/regular/open{ - dir = 2; - id_tag = "xil_shuttle"; - name = "Blast Doors" - }, -/turf/simulated/floor/plating, -/area/ship/skrellscoutshuttle) -"uD" = ( -/obj/structure/table/woodentable/walnut, -/turf/simulated/floor/carpet/purple, -/area/ship/skrellscoutship/crew/rec) -"uI" = ( -/obj/machinery/door/airlock{ - name = "Head" - }, -/obj/machinery/door/firedoor/autoset, -/turf/simulated/floor/tiled/dark/monotile, -/area/ship/skrellscoutship/crew/rec) -"uJ" = ( -/obj/machinery/door/firedoor/autoset, -/obj/machinery/door/airlock/engineering, -/obj/machinery/atmospherics/pipe/simple/hidden/cyan, -/turf/simulated/floor/tiled/dark/monotile, -/area/ship/skrellscoutship/dock) -"uN" = ( -/turf/simulated/floor/plating, -/area/ship/skrellscoutshuttle) -"uQ" = ( -/obj/machinery/atmospherics/pipe/manifold4w/visible/cyan, -/obj/machinery/meter, -/turf/simulated/floor/tiled/skrell/orange, -/area/ship/skrellscoutship/maintenance/atmos) -"uX" = ( -/obj/machinery/door/firedoor/autoset, -/turf/simulated/floor/tiled/dark/monotile, -/area/ship/skrellscoutship/dock) -"uZ" = ( -/obj/machinery/light/skrell, -/obj/structure/table/rack, -/obj/item/rig/skrell/sec{ - pixel_x = -7 - }, -/obj/item/rig/skrell/sec{ - pixel_x = 8 - }, -/turf/simulated/floor/tiled/skrell/orange, -/area/ship/skrellscoutship/wings/starboard) -"va" = ( -/obj/effect/catwalk_plated/dark, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/plating, -/area/ship/skrellscoutship/maintenance/power) -"vh" = ( -/obj/structure/table/rack, -/obj/item/magnetic_ammo/skrell, -/obj/item/magnetic_ammo/skrell, -/obj/item/magnetic_ammo/skrell, -/obj/item/magnetic_ammo/skrell, -/obj/item/magnetic_ammo/skrell, -/obj/item/magnetic_ammo/skrell, -/obj/machinery/light/skrell{ - dir = 4 - }, -/obj/effect/floor_decal/industrial/outline/red, -/obj/item/magnetic_ammo/skrell/slug, -/obj/item/magnetic_ammo/skrell/slug, -/obj/item/magnetic_ammo/skrell/slug, -/obj/item/magnetic_ammo/skrell/slug, -/obj/item/magnetic_ammo/skrell/slug, -/obj/item/magnetic_ammo/skrell/slug, -/turf/simulated/floor/tiled/skrell/green, -/area/ship/skrellscoutship/command/armory) -"vI" = ( -/obj/effect/paint/black, -/turf/simulated/wall/r_wall, -/area/ship/skrellscoutship/maintenance/atmos) -"vP" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/item/reagent_containers/glass/bucket, -/obj/item/reagent_containers/glass/rag{ - pixel_x = 4 - }, -/turf/simulated/floor/tiled/skrell, -/area/ship/skrellscoutship/wings/starboard) -"wb" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 5; - icon_state = "warning" - }, -/turf/simulated/floor/tiled/skrell/red, -/area/ship/skrellscoutship/hangar) -"wi" = ( -/obj/machinery/portable_atmospherics/hydroponics, -/obj/machinery/light/skrell{ - dir = 1; - icon_state = "tube1" - }, -/turf/simulated/floor/tiled/skrell/blue, -/area/ship/skrellscoutship/crew/kitchen) -"wk" = ( -/obj/machinery/door/airlock/multi_tile/glass/engineering{ - name = "Storage" - }, -/obj/machinery/door/firedoor/autoset, -/turf/simulated/floor/tiled/dark/monotile, -/area/ship/skrellscoutship/robotics) -"wo" = ( -/obj/effect/paint/black, -/obj/effect/wallframe_spawn/reinforced_phoron/hull, -/obj/effect/paint/black, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/tiled/skrell, -/area/ship/skrellscoutship/dock) -"wu" = ( -/obj/machinery/vending/hydronutrients{ - categories = 3; - dir = 1 - }, -/obj/machinery/light/skrell, -/turf/simulated/floor/tiled/skrell/blue, -/area/ship/skrellscoutship/crew/kitchen) -"wy" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/alarm/skrell{ - dir = 1; - pixel_y = -25 - }, -/turf/simulated/floor/tiled/skrell, -/area/ship/skrellscoutship/dock) -"wL" = ( -/obj/machinery/light/skrell{ - dir = 4 - }, -/turf/simulated/floor/tiled/skrell/orange, -/area/ship/skrellscoutship/maintenance/atmos) -"wN" = ( -/obj/structure/bed/chair/comfy/red{ - dir = 1 - }, -/obj/item/device/radio/intercom/map_preset/skrellscoutship{ - default_hailing = 1; - dir = 1; - pixel_y = -32 - }, -/turf/simulated/floor/tiled/skrell/red, -/area/ship/skrellscoutship/command/bridge) -"xa" = ( -/obj/structure/table/standard, -/obj/item/folder/blue, -/obj/item/folder/blue, -/obj/machinery/light/skrell{ - dir = 1; - icon_state = "tube1" - }, -/obj/item/pen, -/turf/simulated/floor/tiled/skrell, -/area/ship/skrellscoutship/wings/port) -"xj" = ( -/obj/structure/reagent_dispensers/water_cooler, -/turf/simulated/floor/carpet/purple, -/area/ship/skrellscoutship/crew/rec) -"xo" = ( -/obj/machinery/light/skrell{ - dir = 8 - }, -/obj/machinery/atmospherics/unary/vent_pump/high_volume/shuttle{ - dir = 4; - id_tag = "xil_scoutship_fore_pumps" - }, -/turf/simulated/floor/tiled/skrell, -/area/ship/skrellscoutship/dock) -"xq" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 4 - }, -/turf/simulated/floor/tiled/skrell/red, -/area/ship/skrellscoutship/hangar) -"xI" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/skrell, -/area/ship/skrellscoutship/dock) -"xL" = ( -/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply, -/obj/machinery/door/airlock/external/bolted_open{ - frequency = 1331; - id_tag = "xil_shuttle_inner"; - name = "Shuttle One Airlock" - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/ship/skrellscoutshuttle) -"xV" = ( -/obj/effect/paint/black, -/turf/simulated/wall/r_wall, -/area/ship/skrellscoutship/hangar) -"yc" = ( -/obj/effect/floor_decal/industrial/outline/grey, -/obj/machinery/suit_storage_unit/skrell/black, -/turf/simulated/floor/tiled/skrell/green, -/area/ship/skrellscoutship/robotics) -"ye" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/cyan{ - dir = 4 - }, -/turf/simulated/floor/tiled/skrell, -/area/ship/skrellscoutship/dock) -"yf" = ( -/obj/structure/hygiene/sink{ - dir = 1; - pixel_y = 16 - }, -/obj/machinery/light/skrell{ - dir = 4 - }, -/turf/simulated/floor/tiled/skrell, -/area/ship/skrellscoutship/dock) -"yo" = ( -/obj/structure/hygiene/shower{ - dir = 1 - }, -/obj/structure/curtain/open/shower/security, -/obj/structure/handrail{ - dir = 1 - }, -/turf/simulated/floor/tiled/skrell/blue, -/area/ship/skrellscoutship/crew/rec) -"yr" = ( -/obj/machinery/light/skrell{ - dir = 4; - icon_state = "tube1" - }, -/turf/simulated/floor/carpet/blue, -/area/ship/skrellscoutship/wings/port) -"ys" = ( -/obj/structure/table/glass, -/obj/item/storage/toolbox/emergency, -/obj/item/device/binoculars{ - pixel_y = 9 - }, -/turf/simulated/floor/tiled/skrell/red, -/area/ship/skrellscoutship/command/bridge) -"yx" = ( -/obj/effect/paint/black, -/turf/simulated/wall/r_wall, -/area/ship/skrellscoutship/command/bridge) -"yF" = ( -/obj/structure/table/rack, -/obj/structure/window/phoronreinforced{ - dir = 4 - }, -/obj/item/gun/energy/gun/skrell, -/obj/item/gun/energy/gun/skrell, -/obj/item/gun/energy/gun/skrell, -/obj/item/gun/energy/gun/skrell, -/obj/item/gun/energy/gun/skrell, -/obj/effect/floor_decal/industrial/outline/red, -/turf/simulated/floor/tiled/skrell/green, -/area/ship/skrellscoutship/robotics) -"yN" = ( -/obj/structure/table/rack, -/obj/item/gun/energy/pulse_rifle/skrell, -/obj/item/gun/energy/pulse_rifle/skrell, -/obj/item/gun/energy/pulse_rifle/skrell, -/obj/structure/window/phoronreinforced{ - dir = 4 - }, -/obj/effect/floor_decal/industrial/outline/red, -/turf/simulated/floor/tiled/skrell/green, -/area/ship/skrellscoutship/robotics) -"yV" = ( -/obj/effect/wallframe_spawn/reinforced_phoron/hull, -/obj/effect/paint/black, -/turf/simulated/floor/plating, -/area/ship/skrellscoutship/crew/kitchen) -"zl" = ( -/obj/structure/fitness/weightlifter, -/turf/simulated/floor/tiled/skrell/blue, -/area/ship/skrellscoutship/crew/quarters) -"zv" = ( -/obj/structure/table/glass, -/obj/item/storage/firstaid/o2, -/turf/simulated/floor/tiled/skrell/red, -/area/ship/skrellscoutship/command/bridge) -"zy" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 8 - }, -/turf/simulated/floor/tiled/skrell/blue, -/area/ship/skrellscoutship/crew/quarters) -"zK" = ( -/obj/effect/paint/black, -/turf/simulated/wall/r_wall, -/area/ship/skrellscoutship/crew/kitchen) -"zO" = ( -/obj/structure/closet/cabinet, -/obj/item/clothing/accessory/storage/black_vest, -/obj/item/gun/energy/gun/skrell, -/obj/item/rig/skrell/cmd, -/obj/item/device/radio/headset/map_preset/skrellscoutship, -/obj/item/device/radio/hailing, -/obj/item/clothing/accessory/storage/holster/thigh, -/turf/simulated/floor/tiled/skrell/blue, -/area/ship/skrellscoutship/crew/quarters) -"zT" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/closet/secure_closet/brig{ - id = "Cell 1"; - name = "Cell Locker"; - req_access = list("ACCESS_SKRELLSCOUT") - }, -/turf/simulated/floor/tiled/skrell, -/area/ship/skrellscoutship/dock) -"zV" = ( -/obj/effect/submap_landmark/joinable_submap/skrellscoutship, -/obj/machinery/light/skrell{ - dir = 1 - }, -/obj/effect/submap_landmark/spawnpoint/skrellscoutship/leader, -/turf/simulated/floor/tiled/skrell/blue, -/area/ship/skrellscoutship/crew/quarters) -"zZ" = ( -/obj/machinery/access_button{ - command = "cycle_interior"; - frequency = 1331; - master_tag = "xil_shuttle"; - pixel_y = -24 - }, -/obj/structure/bed/chair/shuttle/blue{ - dir = 1 - }, -/turf/simulated/floor/tiled/skrell, -/area/ship/skrellscoutshuttle) -"Ac" = ( -/obj/effect/wallframe_spawn/reinforced_phoron/hull, -/obj/machinery/door/blast/regular/open{ - dir = 4; - id_tag = "main_airlock_window" - }, -/obj/effect/paint/black, -/turf/simulated/floor/tiled/skrell, -/area/ship/skrellscoutship/dock) -"Aj" = ( -/obj/effect/paint/black, -/obj/machinery/atmospherics/pipe/simple/hidden/black{ - dir = 9 - }, -/turf/simulated/wall/r_wall, -/area/ship/skrellscoutshuttle) -"Ak" = ( -/obj/machinery/sleeper, -/obj/machinery/light/skrell{ - dir = 1 - }, -/turf/simulated/floor/tiled/skrell/white, -/area/ship/skrellscoutship/crew/medbay) -"An" = ( -/obj/structure/closet/cabinet, -/obj/item/clothing/accessory/storage/black_vest, -/obj/machinery/light/skrell{ - dir = 8; - icon_state = "tube1" - }, -/obj/item/device/radio/headset/map_preset/skrellscoutship, -/obj/item/device/radio/hailing, -/obj/item/clothing/accessory/storage/holster/thigh, -/turf/simulated/floor/tiled/skrell/blue, -/area/ship/skrellscoutship/crew/quarters) -"Ap" = ( -/obj/machinery/light/skrell{ - dir = 1; - icon_state = "tube1" - }, -/turf/simulated/floor/carpet/purple, -/area/ship/skrellscoutship/crew/rec) -"Aq" = ( -/obj/machinery/light/skrell{ - dir = 4 - }, -/obj/effect/floor_decal/industrial/outline/grey, -/obj/machinery/suit_storage_unit/skrell/black, -/turf/simulated/floor/tiled/skrell/green, -/area/ship/skrellscoutship/command/armory) -"Av" = ( -/obj/machinery/light/skrell, -/turf/simulated/floor/tiled/skrell, -/area/ship/skrellscoutshuttle) -"Ax" = ( -/obj/effect/floor_decal/industrial/outline/blue, -/obj/machinery/atmospherics/unary/tank/air{ - start_pressure = 4559.63 - }, -/turf/simulated/floor/tiled/skrell/orange, -/area/ship/skrellscoutship/maintenance/atmos) -"AQ" = ( -/obj/machinery/door/airlock/command, -/obj/machinery/door/firedoor/autoset, -/turf/simulated/floor/tiled/dark/monotile, -/area/ship/skrellscoutship/crew/quarters) -"AT" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/tiled/skrell, -/area/ship/skrellscoutship/dock) -"AU" = ( -/obj/effect/paint/black, -/turf/simulated/wall/r_wall, -/area/ship/skrellscoutship/crew/rec) -"BK" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/effect/paint/black, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/wall/r_wall, -/area/ship/skrellscoutshuttle) -"BR" = ( -/obj/effect/paint/black, -/turf/simulated/wall/r_wall, -/area/ship/skrellscoutship/crew/quarters) -"BW" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/tiled/skrell/red, -/area/ship/skrellscoutship/hangar) -"Cd" = ( -/obj/item/reagent_containers/chem_disp_cartridge/acetone, -/obj/item/reagent_containers/chem_disp_cartridge/ammonia, -/obj/item/reagent_containers/chem_disp_cartridge/carbon, -/obj/item/scalpel/manager, -/obj/item/storage/firstaid/surgery, -/obj/structure/closet/crate/medical, -/obj/item/storage/firstaid/combat, -/obj/item/storage/firstaid/adv, -/obj/item/storage/firstaid/regular, -/obj/item/bodybag/cryobag, -/obj/item/bodybag/cryobag, -/obj/item/autopsy_scanner, -/obj/item/stack/material/phoron/fifty, -/turf/simulated/floor/tiled/skrell/green, -/area/ship/skrellscoutship/robotics) -"Ce" = ( -/obj/item/device/radio/intercom/map_preset/skrellscoutship{ - dir = 4; - pixel_x = -24 - }, -/turf/simulated/floor/tiled/skrell/orange, -/area/ship/skrellscoutship/maintenance/atmos) -"Cj" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 - }, -/turf/simulated/floor/tiled/skrell/blue, -/area/ship/skrellscoutship/crew/quarters) -"Cm" = ( -/obj/effect/wallframe_spawn/reinforced_phoron/hull, -/obj/effect/paint/black, -/turf/simulated/floor/plating, -/area/ship/skrellscoutship/command/bridge) -"Cv" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/effect/paint/black, -/obj/machinery/door/firedoor/autoset, -/turf/simulated/floor/tiled/dark/monotile, -/area/ship/skrellscoutship/robotics) -"CA" = ( -/obj/machinery/light/skrell{ - dir = 4; - icon_state = "tube1" - }, -/obj/structure/table/standard, -/obj/machinery/chemical_dispenser/bar_alc/full, -/turf/simulated/floor/tiled/skrell/white, -/area/ship/skrellscoutship/crew/rec) -"CH" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 8; - icon_state = "warning" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 8 - }, -/turf/simulated/floor/tiled/skrell/red, -/area/ship/skrellscoutship/hangar) -"CO" = ( -/obj/machinery/door/airlock{ - name = "Shuttle Hangar" - }, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/door/firedoor/autoset, -/turf/simulated/floor/tiled/dark/monotile, -/area/ship/skrellscoutship/command/armory) -"CX" = ( -/obj/effect/paint/black, -/turf/simulated/wall/r_wall, -/area/ship/skrellscoutship/forestorage) -"Di" = ( -/obj/effect/paint/black, -/obj/machinery/atmospherics/pipe/simple/hidden/black{ - dir = 10 - }, -/turf/simulated/wall/r_wall, -/area/ship/skrellscoutshuttle) -"Dj" = ( -/obj/effect/wallframe_spawn/reinforced_phoron/hull, -/obj/effect/paint/black, -/turf/simulated/floor/plating, -/area/ship/skrellscoutship/crew/rec) -"Ds" = ( -/obj/structure/table/glass, -/obj/item/storage/box/gloves, -/obj/item/storage/box/syringes{ - pixel_x = 4; - pixel_y = 4 - }, -/obj/machinery/light/skrell, -/obj/item/clothing/glasses/hud/health, -/obj/item/clothing/glasses/hud/health, -/obj/item/clothing/glasses/hud/health, -/obj/item/storage/belt/medical/emt, -/obj/item/storage/belt/medical/emt, -/turf/simulated/floor/tiled/skrell/white, -/area/ship/skrellscoutship/crew/medbay) -"Dy" = ( -/obj/effect/wallframe_spawn/reinforced_phoron/hull, -/obj/effect/paint/black, -/turf/simulated/floor/plating, -/area/ship/skrellscoutship/wings/port) -"DB" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/power/apc/critical{ - dir = 4; - name = "east bump"; - pixel_x = 24; - req_access = list("ACCESS_SKRELLSCOUT") - }, -/obj/machinery/power/terminal{ - dir = 4 - }, -/obj/structure/cable, -/turf/simulated/floor/tiled/skrell/green, -/area/ship/skrellscoutship/forestorage) -"DD" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, -/obj/structure/flora/pottedplant/large, -/turf/simulated/floor/tiled/skrell, -/area/ship/skrellscoutship/dock) -"Eg" = ( -/obj/machinery/light/skrell{ - dir = 1; - icon_state = "tube1" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/tiled/skrell/blue, -/area/ship/skrellscoutship/crew/quarters) -"Ep" = ( -/obj/machinery/light/skrell{ - dir = 8; - icon_state = "tube1" - }, -/turf/simulated/floor/tiled/skrell/blue, -/area/ship/skrellscoutship/crew/quarters) -"Eq" = ( -/obj/machinery/light/skrell{ - dir = 1; - icon_state = "tube1" - }, -/turf/simulated/floor/tiled/skrell/red, -/area/ship/skrellscoutship/command/bridge) -"Ex" = ( -/obj/effect/wallframe_spawn/reinforced_phoron/hull, -/obj/effect/paint/black, -/turf/simulated/floor/plating, -/area/ship/skrellscoutship/wings/starboard) -"ET" = ( -/obj/effect/wallframe_spawn/reinforced_phoron/hull, -/obj/effect/paint/black, -/turf/simulated/floor/plating, -/area/ship/skrellscoutship/crew/medbay) -"EY" = ( -/obj/machinery/atmospherics/pipe/manifold4w/visible/red, -/obj/machinery/meter, -/turf/simulated/floor/tiled/skrell/orange, -/area/ship/skrellscoutship/maintenance/atmos) -"EZ" = ( -/obj/machinery/computer/ship/engines{ - dir = 8 - }, -/obj/structure/window/reinforced{ - dir = 1 - }, -/obj/structure/window/reinforced{ - dir = 4 - }, -/turf/simulated/floor/tiled/skrell/blue, -/area/ship/skrellscoutship/command/bridge) -"Fk" = ( -/obj/effect/wallframe_spawn/reinforced_phoron/hull, -/obj/effect/paint/black, -/turf/simulated/floor/plating, -/area/ship/skrellscoutship/maintenance/atmos) -"Fl" = ( -/obj/effect/paint/black, -/turf/simulated/wall/r_wall, -/area/ship/skrellscoutship/command/armory) -"Fr" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 9 - }, -/turf/simulated/floor/tiled/skrell/red, -/area/ship/skrellscoutship/hangar) -"FR" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 8; - icon_state = "warning" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/skrell/red, -/area/ship/skrellscoutship/hangar) -"FY" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/alarm/skrell{ - pixel_y = 14 - }, -/turf/simulated/floor/tiled/skrell/blue, -/area/ship/skrellscoutship/crew/quarters) -"Gb" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 8 - }, -/obj/machinery/light/skrell{ - dir = 4 - }, -/turf/simulated/floor/tiled/skrell/red, -/area/ship/skrellscoutship/hangar) -"Gq" = ( -/obj/effect/floor_decal/industrial/outline/grey, -/obj/machinery/suit_storage_unit/skrell/black, -/turf/simulated/floor/tiled/skrell/green, -/area/ship/skrellscoutship/command/armory) -"Gw" = ( -/turf/space, -/area/space) -"GL" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/hologram/holopad/longrange/remoteship, -/turf/simulated/floor/tiled/skrell/red, -/area/ship/skrellscoutship/command/bridge) -"GN" = ( -/obj/machinery/space_heater/skrell, -/turf/simulated/floor/tiled/skrell, -/area/ship/skrellscoutship/wings/starboard) -"Hf" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/obj/machinery/light/skrell{ - dir = 1 - }, -/obj/structure/closet, -/obj/item/mop/advanced, -/obj/item/reagent_containers/spray/cleaner, -/obj/item/grenade/chem_grenade/cleaner, -/obj/item/grenade/chem_grenade/cleaner, -/turf/simulated/floor/tiled/skrell, -/area/ship/skrellscoutship/wings/starboard) -"Hs" = ( -/obj/machinery/atmospherics/unary/vent_pump/high_volume/shuttle{ - dir = 4; - id_tag = "xil_shuttle_pump_out_external" - }, -/turf/simulated/floor/plating, -/area/ship/skrellscoutshuttle) -"Hu" = ( -/obj/machinery/light/skrell{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/turf/simulated/floor/tiled/skrell/red, -/area/ship/skrellscoutship/hangar) -"HG" = ( -/obj/effect/catwalk_plated/dark, -/obj/machinery/power/smes/buildable/preset/skrell, -/obj/structure/cable{ - d2 = 2; - icon_state = "0-2" - }, -/turf/simulated/floor/plating, -/area/ship/skrellscoutship/maintenance/power) -"Ii" = ( -/obj/machinery/power/terminal{ - dir = 8 - }, -/obj/structure/cable/cyan, -/obj/machinery/power/apc/debug/skrell{ - dir = 8; - pixel_x = -22 - }, -/turf/simulated/floor/tiled/skrell, -/area/ship/skrellscoutshuttle) -"IC" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/obj/effect/paint/black, -/turf/simulated/wall/r_wall, -/area/ship/skrellscoutshuttle) -"II" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/turf/simulated/floor/tiled/skrell/blue, -/area/ship/skrellscoutship/crew/quarters) -"IJ" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/turf/simulated/floor/tiled/skrell, -/area/ship/skrellscoutship/dock) -"IQ" = ( -/obj/machinery/light/skrell, -/obj/machinery/telecomms/processor/map_preset/skrellscoutship, -/turf/simulated/floor/tiled/skrell/orange, -/area/ship/skrellscoutship/maintenance/power) -"IS" = ( -/obj/machinery/power/apc/critical{ - name = "south bump"; - pixel_y = -24; - req_access = list("ACCESS_SKRELLSCOUT") - }, -/obj/machinery/power/terminal, -/obj/structure/cable, -/turf/simulated/floor/tiled/skrell, -/area/ship/skrellscoutship/wings/port) -"IT" = ( -/obj/structure/bed/chair/shuttle/blue{ - dir = 1 - }, -/obj/machinery/button/blast_door{ - id_tag = "xil_shuttle"; - name = "Shuttle Blast Doors"; - pixel_x = 24 - }, -/turf/simulated/floor/tiled/skrell, -/area/ship/skrellscoutshuttle) -"Ji" = ( -/obj/machinery/power/terminal{ - dir = 4 - }, -/obj/structure/cable/green{ - d2 = 2; - icon_state = "0-2" - }, -/obj/machinery/light/skrell{ - dir = 1; - icon_state = "tube1" - }, -/turf/simulated/floor/tiled/skrell/orange, -/area/ship/skrellscoutship/maintenance/power) -"JI" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/door/airlock/multi_tile/glass{ - name = "Hall" - }, -/obj/machinery/door/firedoor/autoset, -/turf/simulated/floor/tiled/dark/monotile, -/area/ship/skrellscoutship/wings/port) -"JN" = ( -/obj/structure/table/standard, -/obj/machinery/cell_charger, -/obj/item/cell/hyper{ - pixel_x = 6; - pixel_y = -5 - }, -/obj/item/cell/hyper{ - pixel_x = 7; - pixel_y = 5 - }, -/obj/structure/window/reinforced{ - dir = 1 - }, -/obj/item/disk/integrated_circuit/upgrade/clone{ - pixel_x = 7 - }, -/obj/item/disk/integrated_circuit/upgrade/advanced, -/turf/simulated/floor/tiled/skrell/orange, -/area/ship/skrellscoutship/wings/starboard) -"JT" = ( -/obj/machinery/light/skrell, -/turf/simulated/floor/carpet/purple, -/area/ship/skrellscoutship/crew/rec) -"JX" = ( -/obj/machinery/light/skrell{ - dir = 4 - }, -/obj/structure/bed/chair/shuttle/blue{ - dir = 1 - }, -/turf/simulated/floor/tiled/skrell, -/area/ship/skrellscoutshuttle) -"JZ" = ( -/obj/machinery/airlock_sensor{ - frequency = 1331; - id_tag = "xil_scoutship_fore_dock_sensor"; - pixel_x = -24 - }, -/obj/machinery/embedded_controller/radio/airlock/docking_port{ - airflow_dest = "xil_scoutship_fore_dock_controller"; - cycle_to_external_air = 1; - frequency = 1331; - id_tag = "xil_scoutship_fore_dock_controller"; - pixel_y = 24; - req_access = list("ACCESS_SKRELLSCOUT"); - tag_airpump = "xil_scoutship_fore_pumps"; - tag_chamber_sensor = "xil_scoutship_fore_dock_sensor"; - tag_exterior_door = "xil_scoutship_fore_external"; - tag_interior_door = "xil_scoutship_fore_internal" - }, -/obj/machinery/atmospherics/unary/vent_pump/high_volume/shuttle{ - dir = 4; - id_tag = "xil_scoutship_fore_pumps" - }, -/turf/simulated/floor/tiled/skrell, -/area/ship/skrellscoutship/dock) -"Ka" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 4 - }, -/obj/item/device/radio/intercom/map_preset/skrellscoutship{ - dir = 4; - pixel_x = -24 - }, -/turf/simulated/floor/tiled/skrell/blue, -/area/ship/skrellscoutship/crew/quarters) -"Kh" = ( -/obj/machinery/sleeper{ - dir = 8 - }, -/turf/simulated/floor/tiled/skrell, -/area/ship/skrellscoutshuttle) -"Kn" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 1 - }, -/turf/simulated/floor/tiled/skrell/green, -/area/ship/skrellscoutship/robotics) -"Kr" = ( -/obj/structure/window/reinforced, -/obj/machinery/portable_atmospherics/canister/air, -/obj/machinery/light/skrell{ - dir = 8 - }, -/turf/simulated/floor/tiled/skrell/orange, -/area/ship/skrellscoutship/maintenance/atmos) -"Kt" = ( -/obj/machinery/atmospherics/unary/vent_pump/high_volume/shuttle{ - dir = 8; - id_tag = "xil_shuttle_pump_out_external" - }, -/obj/machinery/airlock_sensor{ - frequency = 1331; - id_tag = "xil_shuttle_sensor_external"; - pixel_y = 22 - }, -/turf/simulated/floor/plating, -/area/ship/skrellscoutshuttle) -"Kx" = ( -/obj/effect/paint/black, -/obj/effect/wallframe_spawn/reinforced_phoron/hull, -/turf/simulated/wall/r_wall, -/area/ship/skrellscoutship/crew/rec) -"Kz" = ( -/obj/machinery/light/skrell{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/tiled/skrell/red, -/area/ship/skrellscoutship/hangar) -"KD" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 1 - }, -/turf/simulated/floor/tiled/skrell/white, -/area/ship/skrellscoutship/crew/medbay) -"KN" = ( -/obj/machinery/door/firedoor/autoset, -/turf/simulated/floor/tiled/dark/monotile, -/area/ship/skrellscoutship/command/bridge) -"KR" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/bed/chair/office/comfy/black{ - dir = 8 - }, -/turf/simulated/floor/carpet/purple, -/area/ship/skrellscoutship/crew/rec) -"KV" = ( -/obj/machinery/light/skrell{ - dir = 4 - }, -/turf/simulated/floor/tiled/skrell, -/area/ship/skrellscoutship/dock) -"Le" = ( -/obj/effect/paint/black, -/turf/simulated/wall/r_wall, -/area/ship/skrellscoutshuttle) -"Lh" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/turf/simulated/floor/tiled/skrell/red, -/area/ship/skrellscoutship/hangar) -"Lj" = ( -/obj/machinery/cooker/oven, -/obj/machinery/light/skrell, -/turf/simulated/floor/tiled/skrell/blue, -/area/ship/skrellscoutship/crew/kitchen) -"Lr" = ( -/obj/structure/flora/pottedplant/mysterious, -/turf/simulated/floor/tiled/skrell, -/area/ship/skrellscoutship/wings/starboard) -"Lv" = ( -/obj/machinery/light/skrell, -/turf/simulated/floor/tiled/skrell/white, -/area/ship/skrellscoutship/crew/medbay) -"Lw" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 1 - }, -/turf/simulated/floor/tiled/skrell/orange, -/area/ship/skrellscoutship/maintenance/power) -"Lz" = ( -/obj/machinery/light/skrell{ - dir = 1 - }, -/obj/machinery/space_heater/skrell, -/turf/simulated/floor/tiled/skrell, -/area/ship/skrellscoutship/wings/starboard) -"LD" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/item/device/radio/intercom/map_preset/skrellscoutship{ - dir = 4; - pixel_x = -24 - }, -/turf/simulated/floor/tiled/skrell/green, -/area/ship/skrellscoutship/command/armory) -"LI" = ( -/obj/machinery/light/skrell{ - dir = 1 - }, -/turf/simulated/floor/tiled/skrell/orange, -/area/ship/skrellscoutship/maintenance/atmos) -"LV" = ( -/obj/structure/table/standard, -/obj/item/reagent_containers/food/snacks/liquidfood, -/obj/item/reagent_containers/food/snacks/liquidfood, -/obj/item/reagent_containers/food/snacks/liquidfood, -/obj/item/reagent_containers/food/snacks/liquidfood, -/turf/simulated/floor/tiled/skrell/white, -/area/ship/skrellscoutship/crew/rec) -"LW" = ( -/obj/structure/flora/pottedplant/stoutbush, -/obj/structure/window/reinforced{ - dir = 1 - }, -/obj/structure/window/reinforced{ - dir = 8 - }, -/turf/simulated/floor/tiled/skrell/orange, -/area/ship/skrellscoutship/wings/starboard) -"Mm" = ( -/obj/structure/table/standard, -/obj/machinery/chemical_dispenser/bar_coffee/full, -/turf/simulated/floor/tiled/skrell/white, -/area/ship/skrellscoutship/crew/rec) -"Mw" = ( -/obj/effect/floor_decal/industrial/outline/blue, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/portables_connector, -/turf/simulated/floor/tiled/skrell, -/area/ship/skrellscoutshuttle) -"Mz" = ( -/obj/structure/cable/yellow{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/machinery/light/skrell{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 - }, -/turf/simulated/floor/tiled/skrell/red, -/area/ship/skrellscoutship/hangar) -"MI" = ( -/obj/structure/bed/roller, -/obj/machinery/light/skrell, -/turf/simulated/floor/tiled/skrell/white, -/area/ship/skrellscoutship/crew/medbay) -"MR" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/turf/simulated/floor/tiled/skrell, -/area/ship/skrellscoutship/dock) -"MS" = ( -/obj/structure/table/rack, -/obj/item/rig/skrell/med{ - pixel_x = -7 - }, -/obj/item/rig/skrell/med{ - pixel_x = 7 - }, -/obj/item/device/radio/intercom/map_preset/skrellscoutship{ - dir = 1; - pixel_y = -32 - }, -/turf/simulated/floor/tiled/skrell/orange{ - dir = 1 - }, -/area/ship/skrellscoutship/wings/starboard) -"Na" = ( -/obj/effect/catwalk_plated/dark, -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/light/skrell{ - dir = 1; - icon_state = "tube1" - }, -/turf/simulated/floor/plating, -/area/ship/skrellscoutship/maintenance/power) -"Nf" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 4 - }, -/turf/simulated/floor/tiled/skrell/red, -/area/ship/skrellscoutship/hangar) -"Ng" = ( -/obj/effect/paint/black, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/wall/r_wall, -/area/ship/skrellscoutship/dock) -"Nh" = ( -/obj/machinery/light/skrell{ - dir = 4 - }, -/turf/simulated/floor/tiled/skrell/red, -/area/ship/skrellscoutship/hangar) -"Nw" = ( -/obj/machinery/power/smes/buildable/preset/skrell, -/obj/structure/cable{ - d2 = 2; - icon_state = "0-2" - }, -/turf/simulated/floor/tiled/skrell/orange, -/area/ship/skrellscoutship/maintenance/power) -"NR" = ( -/obj/structure/table/glass, -/obj/item/reagent_containers/ivbag/nanoblood{ - pixel_x = -9 - }, -/obj/item/reagent_containers/ivbag/nanoblood{ - pixel_x = -9 - }, -/obj/item/reagent_containers/ivbag/nanoblood{ - pixel_x = -9 - }, -/obj/item/reagent_containers/ivbag/nanoblood{ - pixel_x = -10 - }, -/obj/item/storage/firstaid/combat{ - pixel_x = 1; - pixel_y = 8 - }, -/obj/item/storage/firstaid/combat{ - pixel_x = 2 - }, -/turf/simulated/floor/tiled/skrell/white, -/area/ship/skrellscoutship/crew/medbay) -"NY" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/table/woodentable/walnut, -/obj/item/reagent_containers/food/snacks/skrellsnacks{ - pixel_x = 3; - pixel_y = -3 - }, -/obj/item/reagent_containers/food/snacks/skrellsnacks{ - pixel_x = -6; - pixel_y = 6 - }, -/obj/item/reagent_containers/food/drinks/cans/waterbottle{ - pixel_x = 7; - pixel_y = 12 - }, -/turf/simulated/floor/carpet/purple, -/area/ship/skrellscoutship/crew/rec) -"Od" = ( -/obj/machinery/door/airlock/glass/security{ - name = "Holding Cell" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/ship/skrellscoutship/dock) -"Oe" = ( -/obj/structure/closet/walllocker/emerglocker/north, -/turf/simulated/floor/tiled/skrell, -/area/ship/skrellscoutship/dock) -"Oh" = ( -/obj/structure/table/rack, -/obj/item/stack/material/glass/fifty, -/obj/item/stack/material/glass/fifty, -/obj/item/stack/material/glass/fifty, -/obj/item/stack/material/glass/fifty, -/obj/machinery/light/skrell{ - dir = 1 - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled/skrell/green, -/area/ship/skrellscoutship/robotics) -"Om" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/obj/machinery/alarm/skrell{ - dir = 1; - pixel_y = -22 - }, -/obj/machinery/power/apc/critical{ - dir = 8; - name = "west bump"; - pixel_x = -24; - req_access = list("ACCESS_SKRELLSCOUT") - }, -/obj/machinery/power/terminal{ - dir = 8 - }, -/obj/structure/cable, -/turf/simulated/floor/tiled/skrell/orange, -/area/ship/skrellscoutship/maintenance/atmos) -"Oo" = ( -/obj/machinery/light/skrell, -/obj/machinery/atmospherics/unary/vent_pump/high_volume/shuttle{ - id_tag = "xil_shuttle_pump_out_internal" - }, -/turf/simulated/floor/tiled/skrell, -/area/ship/skrellscoutshuttle) -"Oq" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/tiled/skrell/blue, -/area/ship/skrellscoutship/crew/quarters) -"OC" = ( -/obj/structure/table/standard, -/obj/machinery/light/skrell{ - dir = 8 - }, -/obj/item/storage/box/glasses/pint{ - pixel_x = -5; - pixel_y = 9 - }, -/obj/item/storage/box/glasses/mug{ - pixel_x = 4 - }, -/turf/simulated/floor/tiled/skrell/white, -/area/ship/skrellscoutship/crew/rec) -"OF" = ( -/obj/machinery/computer/ship/engines{ - dir = 4 - }, -/turf/simulated/floor/tiled/skrell/red, -/area/ship/skrellscoutship/command/bridge) -"OG" = ( -/obj/structure/window/phoronreinforced, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/turf/simulated/floor/tiled/skrell, -/area/ship/skrellscoutship/dock) -"OH" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 - }, -/obj/machinery/light/skrell, -/turf/simulated/floor/tiled/skrell, -/area/ship/skrellscoutship/wings/port) -"OO" = ( -/obj/machinery/light/skrell{ - dir = 4; - icon_state = "tube1" - }, -/turf/simulated/floor/tiled/skrell, -/area/ship/skrellscoutship/wings/port) -"OP" = ( -/obj/effect/paint/black, -/obj/machinery/atmospherics/pipe/manifold/hidden/black, -/turf/simulated/wall/r_wall, -/area/ship/skrellscoutshuttle) -"OT" = ( -/obj/effect/paint/black, -/turf/simulated/wall/r_wall, -/area/ship/skrellscoutship/wings/port) -"OU" = ( -/turf/simulated/floor/tiled/skrell/orange, -/area/ship/skrellscoutship/wings/starboard) -"OY" = ( -/obj/machinery/computer/ship/navigation{ - dir = 4 - }, -/turf/simulated/floor/tiled/skrell, -/area/ship/skrellscoutshuttle) -"Pd" = ( -/obj/machinery/portable_atmospherics/canister/oxygen, -/obj/effect/floor_decal/industrial/outline/blue, -/turf/simulated/floor/tiled/skrell/green, -/area/ship/skrellscoutship/robotics) -"Pl" = ( -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 - }, -/turf/simulated/floor/tiled/skrell/red, -/area/ship/skrellscoutship/hangar) -"Pr" = ( -/obj/structure/flora/pottedplant/overgrown, -/turf/simulated/floor/tiled/skrell, -/area/ship/skrellscoutship/wings/starboard) -"PC" = ( -/obj/structure/hygiene/sink{ - dir = 8; - pixel_x = -7; - pixel_y = 2 - }, -/obj/machinery/light/skrell{ - dir = 8; - icon_state = "tube1" - }, -/turf/simulated/floor/tiled/skrell/blue, -/area/ship/skrellscoutship/crew/rec) -"PD" = ( -/obj/structure/bed/chair/comfy/red, -/turf/simulated/floor/tiled/skrell/red, -/area/ship/skrellscoutship/command/bridge) -"PG" = ( -/obj/structure/table/standard, -/obj/machinery/button/blast_door{ - id_tag = "main_airlock_window"; - name = "Airlock Window Doors"; - pixel_y = -2 - }, -/obj/machinery/button/blast_door{ - id_tag = "main_airlock_door"; - name = "Airlock Blast Doors"; - pixel_y = 7 - }, -/turf/simulated/floor/tiled/skrell, -/area/ship/skrellscoutship/dock) -"PH" = ( -/obj/machinery/atmospherics/unary/vent_pump/high_volume/shuttle{ - id_tag = "xil_shuttle_pump_out_internal" - }, -/obj/machinery/embedded_controller/radio/airlock/docking_port{ - cycle_to_external_air = 1; - frequency = 1331; - id_tag = "xil_shuttle"; - pixel_y = -24; - req_access = list("ACCESS_SKRELLSCOUT"); - tag_exterior_sensor = "xil_shuttle_sensor_external" - }, -/turf/simulated/floor/tiled/skrell, -/area/ship/skrellscoutshuttle) -"PJ" = ( -/obj/structure/table/standard, -/obj/machinery/recharger, -/turf/simulated/floor/tiled/skrell, -/area/ship/skrellscoutship/dock) -"PK" = ( -/obj/effect/wallframe_spawn/reinforced_phoron/hull, -/obj/effect/paint/black, -/turf/simulated/floor/plating, -/area/ship/skrellscoutship/command/armory) -"PP" = ( -/obj/machinery/atmospherics/unary/vent_pump/high_volume/shuttle{ - dir = 8; - id_tag = "xil_scoutship_fore_pumps" - }, -/turf/simulated/floor/tiled/skrell, -/area/ship/skrellscoutship/dock) -"PT" = ( -/obj/effect/paint/black, -/turf/simulated/wall/r_wall, -/area/ship/skrellscoutship/robotics) -"Qg" = ( -/obj/machinery/shipsensors, -/turf/simulated/floor/plating, -/area/ship/skrellscoutshuttle) -"Qp" = ( -/obj/machinery/alarm/skrell{ - dir = 8; - pixel_x = 22 - }, -/turf/simulated/floor/tiled/skrell, -/area/ship/skrellscoutshuttle) -"Qr" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/catwalk_plated/dark, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/turf/simulated/floor/plating, -/area/ship/skrellscoutship/maintenance/power) -"QA" = ( -/obj/machinery/light/skrell, -/turf/simulated/floor/tiled/skrell/red, -/area/ship/skrellscoutship/command/bridge) -"QP" = ( -/obj/effect/paint/black, -/turf/simulated/wall/r_wall, -/area/ship/skrellscoutship/dock) -"QR" = ( -/obj/machinery/light/skrell{ - dir = 1; - icon_state = "tube1" - }, -/turf/simulated/floor/tiled/skrell, -/area/ship/skrellscoutship/corridor) -"Rb" = ( -/obj/effect/paint/black, -/turf/simulated/wall/r_wall, -/area/ship/skrellscoutship/externalwing/starboard) -"Rc" = ( -/obj/machinery/power/apc/critical{ - dir = 4; - name = "east bump"; - pixel_x = 24; - req_access = list("ACCESS_SKRELLSCOUT") - }, -/obj/machinery/power/terminal{ - dir = 4 - }, -/obj/structure/cable, -/turf/simulated/floor/tiled/skrell, -/area/ship/skrellscoutship/corridor) -"Re" = ( -/obj/machinery/atmospherics/unary/tank/air{ - start_pressure = 4559.63 - }, -/obj/effect/floor_decal/industrial/outline/blue, -/obj/machinery/light/skrell{ - dir = 1 - }, -/turf/simulated/floor/tiled/skrell/orange, -/area/ship/skrellscoutship/maintenance/atmos) -"Ro" = ( -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/binary/pump{ - dir = 4 - }, -/turf/simulated/floor/tiled/skrell, -/area/ship/skrellscoutshuttle) -"Rs" = ( -/obj/structure/table/rack, -/obj/structure/window/reinforced{ - dir = 8 - }, -/obj/item/rig/skrell/eng{ - pixel_x = -5 - }, -/obj/item/rig/skrell/eng{ - pixel_x = 7 - }, -/turf/simulated/floor/tiled/skrell/orange, -/area/ship/skrellscoutship/wings/starboard) -"RB" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/turf/simulated/floor/tiled/skrell/red, -/area/ship/skrellscoutship/hangar) -"RG" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 8 - }, -/obj/effect/paint/black, -/turf/simulated/wall/r_wall, -/area/ship/skrellscoutshuttle) -"RL" = ( -/obj/machinery/atmospherics/binary/pump/on{ - dir = 8 - }, -/turf/simulated/floor/tiled/skrell, -/area/ship/skrellscoutshuttle) -"RO" = ( -/obj/effect/floor_decal/industrial/outline/grey, -/obj/machinery/vending/security{ - scan_id = 0 - }, -/turf/simulated/floor/tiled/skrell, -/area/ship/skrellscoutship/dock) -"RP" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/obj/effect/paint/black, -/turf/simulated/wall/r_wall, -/area/ship/skrellscoutshuttle) -"Si" = ( -/obj/machinery/light/skrell{ - dir = 1 - }, -/obj/machinery/atmospherics/unary/vent_pump/high_volume/shuttle{ - dir = 8; - id_tag = "xil_scoutship_fore_pumps" - }, -/turf/simulated/floor/tiled/skrell, -/area/ship/skrellscoutship/dock) -"Sm" = ( -/obj/machinery/suit_storage_unit/skrell, -/obj/machinery/light/skrell, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/floor/tiled/skrell/green, -/area/ship/skrellscoutship/robotics) -"SE" = ( -/obj/structure/bed/padded, -/obj/item/bedsheet/hop, -/turf/simulated/floor/tiled/skrell/blue, -/area/ship/skrellscoutship/crew/quarters) -"SN" = ( -/obj/machinery/portable_atmospherics/canister/oxygen, -/obj/machinery/light/skrell, -/obj/effect/floor_decal/industrial/outline/blue, -/turf/simulated/floor/tiled/skrell/green, -/area/ship/skrellscoutship/robotics) -"SQ" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 8 - }, -/obj/machinery/alarm/skrell{ - dir = 1; - pixel_y = -22 - }, -/turf/simulated/floor/tiled/skrell, -/area/ship/skrellscoutshuttle) -"SS" = ( -/obj/structure/table/glass, -/obj/item/material/hatchet, -/obj/item/material/minihoe, -/obj/item/reagent_containers/glass/bucket, -/obj/machinery/light/skrell{ - dir = 1; - icon_state = "tube1" - }, -/turf/simulated/floor/tiled/skrell/blue, -/area/ship/skrellscoutship/crew/kitchen) -"SY" = ( -/obj/effect/floor_decal/industrial/outline/blue, -/obj/machinery/atmospherics/portables_connector, -/turf/simulated/floor/tiled/skrell/orange, -/area/ship/skrellscoutship/maintenance/atmos) -"Tb" = ( -/obj/machinery/light/skrell{ - dir = 1 - }, -/turf/simulated/floor/tiled/skrell, -/area/ship/skrellscoutshuttle) -"Tj" = ( -/obj/structure/flora/pottedplant/large, -/obj/structure/window/reinforced{ - dir = 1 - }, -/turf/simulated/floor/tiled/skrell/orange, -/area/ship/skrellscoutship/wings/starboard) -"Tm" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/door/airlock/glass/civilian{ - name = "Crew Quarters" - }, -/obj/machinery/door/firedoor/autoset, -/turf/simulated/floor/tiled/dark/monotile, -/area/ship/skrellscoutship/crew/quarters) -"TE" = ( -/obj/effect/catwalk_plated/dark, -/obj/machinery/light/skrell, -/obj/structure/cable{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/turf/simulated/floor/plating, -/area/ship/skrellscoutship/maintenance/power) -"TL" = ( -/turf/simulated/floor/tiled/skrell/white, -/area/ship/skrellscoutship/crew/rec) -"TO" = ( -/obj/effect/wallframe_spawn/reinforced_phoron/hull, -/obj/effect/paint/black, -/turf/simulated/floor/tiled/skrell, -/area/ship/skrellscoutship/dock) -"TQ" = ( -/obj/effect/paint/black, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/wall/r_wall, -/area/ship/skrellscoutship/command/armory) -"TX" = ( -/obj/effect/paint/black, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 - }, -/turf/simulated/wall/r_wall, -/area/ship/skrellscoutshuttle) -"Uh" = ( -/obj/structure/bed/chair/shuttle/blue{ - dir = 1 - }, -/obj/item/device/radio/intercom/map_preset/skrellscoutship{ - dir = 1; - pixel_y = -32 - }, -/turf/simulated/floor/tiled/skrell, -/area/ship/skrellscoutshuttle) -"Uo" = ( -/obj/machinery/light/skrell{ - dir = 1; - icon_state = "tube1" - }, -/turf/simulated/floor/tiled/skrell, -/area/ship/skrellscoutship/wings/port) -"Uu" = ( -/obj/structure/table/standard, -/obj/machinery/light/skrell{ - dir = 1; - icon_state = "tube1" - }, -/turf/simulated/floor/tiled/skrell/blue, -/area/ship/skrellscoutship/crew/kitchen) -"UD" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/obj/structure/cable{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/machinery/light/skrell{ - dir = 8; - icon_state = "tube1" - }, -/turf/simulated/floor/tiled/skrell, -/area/ship/skrellscoutship/wings/port) -"UK" = ( -/obj/machinery/light/skrell{ - dir = 4 - }, -/turf/simulated/floor/tiled/skrell, -/area/ship/skrellscoutship/wings/starboard) -"UM" = ( -/obj/effect/paint/black, -/turf/simulated/wall/r_wall, -/area/ship/skrellscoutship/externalwing/port) -"UN" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/item/device/radio/intercom/map_preset/skrellscoutship{ - dir = 1; - pixel_y = -32 - }, -/turf/simulated/floor/tiled/skrell, -/area/ship/skrellscoutship/corridor) -"UR" = ( -/obj/machinery/atmospherics/pipe/manifold/visible/red{ - dir = 8 - }, -/turf/simulated/floor/tiled/skrell/orange, -/area/ship/skrellscoutship/maintenance/atmos) -"UW" = ( -/obj/machinery/light/skrell{ - dir = 1; - icon_state = "tube1" - }, -/obj/structure/table/woodentable/walnut, -/obj/item/reagent_containers/food/drinks/cans/waterbottle{ - pixel_x = -3; - pixel_y = 4 - }, -/obj/item/reagent_containers/food/drinks/cans/waterbottle{ - pixel_x = 5; - pixel_y = 6 - }, -/obj/item/reagent_containers/food/drinks/cans/waterbottle, -/turf/simulated/floor/tiled/skrell, -/area/ship/skrellscoutship/wings/port) -"Va" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 1 - }, -/obj/machinery/light/skrell, -/turf/simulated/floor/tiled/skrell/green, -/area/ship/skrellscoutship/command/armory) -"Vc" = ( -/obj/machinery/light/skrell{ - dir = 4; - icon_state = "tube1" - }, -/turf/simulated/floor/tiled/skrell, -/area/ship/skrellscoutship/corridor) -"Ve" = ( -/obj/effect/paint/black, -/obj/machinery/atmospherics/pipe/simple/hidden/black{ - dir = 6 - }, -/turf/simulated/wall/r_wall, -/area/ship/skrellscoutshuttle) -"Vh" = ( -/obj/machinery/bodyscanner{ - dir = 4 - }, -/obj/machinery/light/skrell{ - dir = 1 - }, -/turf/simulated/floor/tiled/skrell/white, -/area/ship/skrellscoutship/crew/medbay) -"Vj" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 8 - }, -/turf/simulated/floor/tiled/skrell/red, -/area/ship/skrellscoutship/hangar) -"Vx" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/black, -/obj/machinery/access_button/airlock_exterior{ - frequency = 1331; - master_tag = "xil_shuttle"; - pixel_x = 32; - pixel_y = -4; - req_access = list("ACCESS_SKRELLSCOUT") - }, -/obj/machinery/door/airlock/external/bolted_open{ - frequency = 1331; - id_tag = "xil_shuttle_outer"; - name = "Shuttle One Airlock" - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/ship/skrellscoutshuttle) -"Vy" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 8 - }, -/obj/structure/hygiene/toilet{ - pixel_y = 8 - }, -/turf/simulated/floor/tiled/skrell, -/area/ship/skrellscoutship/dock) -"VA" = ( -/obj/structure/table/glass, -/obj/item/reagent_containers/spray/sterilizine, -/obj/item/reagent_containers/spray/cleaner{ - pixel_x = -5 - }, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 1 - }, -/obj/machinery/light/skrell, -/turf/simulated/floor/tiled/skrell/white, -/area/ship/skrellscoutship/crew/medbay) -"VD" = ( -/obj/machinery/computer/ship/engines{ - dir = 4 - }, -/obj/machinery/light/skrell{ - dir = 8 - }, -/turf/simulated/floor/tiled/skrell, -/area/ship/skrellscoutshuttle) -"VM" = ( -/obj/machinery/light/skrell{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/universal{ - dir = 4 - }, -/turf/simulated/floor/tiled/skrell, -/area/ship/skrellscoutshuttle) -"VQ" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/obj/machinery/light/skrell{ - dir = 1 - }, -/obj/structure/bed/chair/comfy/yellow{ - dir = 4 - }, -/turf/simulated/floor/carpet/magenta, -/area/ship/skrellscoutship/wings/starboard) -"VS" = ( -/obj/structure/bed/chair/shuttle/blue, -/obj/machinery/light/skrell{ - dir = 1 - }, -/turf/simulated/floor/tiled/skrell, -/area/ship/skrellscoutshuttle) -"VY" = ( -/turf/simulated/floor/carpet/purple, -/area/ship/skrellscoutship/crew/rec) -"VZ" = ( -/obj/machinery/door/firedoor/autoset, -/turf/simulated/floor/tiled/dark/monotile, -/area/ship/skrellscoutship/wings/port) -"Wf" = ( -/obj/effect/wallframe_spawn/reinforced_phoron/hull, -/obj/effect/paint/black, -/turf/simulated/floor/plating, -/area/ship/skrellscoutshuttle) -"Wh" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/door/firedoor/autoset, -/obj/machinery/door/airlock/atmos{ - name = "Shuttle Hangar" - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/ship/skrellscoutship/maintenance/atmos) -"Wn" = ( -/obj/structure/cable/yellow{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 4 - }, -/obj/machinery/light/skrell{ - dir = 8 - }, -/turf/simulated/floor/tiled/skrell/red, -/area/ship/skrellscoutship/hangar) -"Ws" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/obj/structure/bed/chair/shuttle/blue, -/turf/simulated/floor/tiled/skrell, -/area/ship/skrellscoutshuttle) -"Wu" = ( -/obj/structure/table/rack, -/obj/item/stack/flag/blue{ - pixel_x = 5 - }, -/obj/item/stack/flag/blue{ - pixel_x = 10 - }, -/obj/item/stack/flag/teal{ - pixel_x = -6 - }, -/obj/item/stack/flag/teal, -/turf/simulated/floor/tiled/skrell/green, -/area/ship/skrellscoutship/robotics) -"WQ" = ( -/obj/structure/flora/pottedplant/aquatic, -/obj/machinery/light/skrell{ - dir = 1; - icon_state = "tube1" - }, -/turf/simulated/floor/tiled/skrell, -/area/ship/skrellscoutship/wings/port) -"WS" = ( -/obj/effect/paint/black, -/obj/effect/wallframe_spawn/reinforced_phoron/hull, -/turf/simulated/floor/tiled/dark/monotile, -/area/ship/skrellscoutship/crew/quarters) -"WZ" = ( -/obj/machinery/door/airlock{ - name = "Living Area" - }, -/obj/machinery/door/firedoor/autoset, -/turf/simulated/floor/tiled/dark/monotile, -/area/ship/skrellscoutship/crew/rec) -"Xl" = ( -/obj/structure/bed/chair/comfy/red{ - dir = 8 - }, -/turf/simulated/floor/tiled/skrell/red, -/area/ship/skrellscoutship/command/bridge) -"Xw" = ( -/obj/machinery/atmospherics/portables_connector{ - dir = 1 - }, -/obj/effect/floor_decal/industrial/outline/red, -/turf/simulated/floor/tiled/skrell/orange, -/area/ship/skrellscoutship/maintenance/atmos) -"XD" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 6; - icon_state = "warning" - }, -/turf/simulated/floor/tiled/skrell/red, -/area/ship/skrellscoutship/hangar) -"XU" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, -/turf/simulated/floor/tiled/skrell, -/area/ship/skrellscoutship/dock) -"Ya" = ( -/obj/machinery/atmospherics/unary/vent_pump/high_volume/shuttle{ - dir = 1; - id_tag = "xil_shuttle_pump" - }, -/turf/simulated/floor/tiled/skrell, -/area/ship/skrellscoutshuttle) -"Yj" = ( -/obj/structure/bed/chair/comfy/red, -/turf/simulated/floor/tiled/skrell, -/area/ship/skrellscoutship/dock) -"Yu" = ( -/obj/structure/bed/chair/office/comfy/black{ - dir = 4 - }, -/turf/simulated/floor/carpet/purple, -/area/ship/skrellscoutship/crew/rec) -"YA" = ( -/obj/structure/table/rack, -/obj/item/storage/belt/utility/full, -/obj/item/storage/belt/utility/full, -/obj/item/storage/belt/utility/full, -/turf/simulated/floor/tiled/skrell/green, -/area/ship/skrellscoutship/robotics) -"YG" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 - }, -/obj/structure/cable{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/machinery/light/skrell{ - dir = 8 - }, -/obj/structure/closet/crate/trashcart, -/turf/simulated/floor/tiled/skrell, -/area/ship/skrellscoutship/wings/starboard) -"Zn" = ( -/obj/machinery/power/terminal{ - dir = 4 - }, -/obj/structure/cable/yellow, -/turf/simulated/floor/tiled/skrell, -/area/ship/skrellscoutshuttle) -"Zp" = ( -/obj/machinery/light/skrell{ - dir = 1; - icon_state = "tube1" - }, -/obj/item/device/radio/intercom/map_preset/skrellscoutship{ - dir = 8; - pixel_x = 24 - }, -/turf/simulated/floor/tiled/skrell/white, -/area/ship/skrellscoutship/crew/rec) -"Zt" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/cyan{ - dir = 5 - }, -/turf/simulated/floor/tiled/skrell, -/area/ship/skrellscoutship/dock) -"ZC" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 4 - }, -/obj/machinery/light/skrell{ - dir = 8; - icon_state = "tube1" - }, -/turf/simulated/floor/tiled/skrell, -/area/ship/skrellscoutship/corridor) -"ZP" = ( -/obj/machinery/door/firedoor/autoset, -/turf/simulated/floor/tiled/dark/monotile, -/area/ship/skrellscoutship/wings/starboard) - -(1,1,1) = {" -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -"} -(2,1,1) = {" -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -"} -(3,1,1) = {" -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -"} -(4,1,1) = {" -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -"} -(5,1,1) = {" -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -"} -(6,1,1) = {" -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -"} -(7,1,1) = {" -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -"} -(8,1,1) = {" -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -"} -(9,1,1) = {" -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -"} -(10,1,1) = {" -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -"} -(11,1,1) = {" -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -"} -(12,1,1) = {" -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -"} -(13,1,1) = {" -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -kG -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -"} -(14,1,1) = {" -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Cm -Cm -Cm -Cm -Cm -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -"} -(15,1,1) = {" -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Cm -Cm -ii -OF -en -Cm -Cm -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -"} -(16,1,1) = {" -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -yx -Cm -ic -hE -Xl -hE -zv -Cm -yx -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -"} -(17,1,1) = {" -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -yx -yx -yx -Eq -hE -hE -hE -hE -hE -QA -yx -yx -yx -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -"} -(18,1,1) = {" -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -yx -yx -hv -ia -hF -jr -id -gX -ij -ij -ip -hE -yx -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -"} -(19,1,1) = {" -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -yx -yx -yx -yx -qO -hE -sP -ie -sP -hE -wN -yx -AQ -BR -BR -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -"} -(20,1,1) = {" -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Dj -PC -hl -yx -Eq -hE -EZ -if -pj -hE -kV -yx -zV -dB -ug -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -"} -(21,1,1) = {" -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Dj -gF -yo -yx -PD -hE -hE -GL -bQ -hE -ys -yx -SE -zO -ug -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -"} -(22,1,1) = {" -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -AU -AU -uI -AU -yx -yx -hX -ib -ih -hE -hE -yx -yx -BR -BR -BR -BR -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -"} -(23,1,1) = {" -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -pO -pO -hI -gY -li -VY -AU -AU -Eq -ig -QA -CX -CX -CX -CX -qD -Ka -rR -ug -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -"} -(24,1,1) = {" -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Dj -xj -VY -ha -Yu -VY -hJ -AU -KN -ks -CX -CX -dP -jo -CX -rl -Cj -zl -ug -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -"} -(25,1,1) = {" -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -AU -Ap -gS -hb -hm -VY -or -AU -QR -kt -CX -cc -dU -jp -CX -Eg -II -zl -ug -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -"} -(26,1,1) = {" -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Dj -VY -gS -NY -uD -VY -hL -AU -kq -ku -bP -DB -eZ -jq -CX -FY -zy -jx -ug -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -"} -(27,1,1) = {" -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Dj -hB -VY -KR -su -JT -AU -AU -kq -kt -CX -CX -CX -CX -CX -qu -BR -BR -BR -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -"} -(28,1,1) = {" -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -AU -AU -la -gF -hc -gF -gF -lK -ZC -kq -kt -kA -WS -dh -jn -Ep -pK -An -ee -BR -BR -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -"} -(29,1,1) = {" -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Dj -gz -gH -gT -hd -hn -hn -nj -jh -kr -kv -kB -Tm -di -Oq -Oq -qm -dA -dA -gi -ug -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -"} -(30,1,1) = {" -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Dj -gA -gF -gU -gF -gF -gF -lK -kq -kq -kt -tZ -BR -dj -dB -dB -dB -dB -dB -dB -ug -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -"} -(31,1,1) = {" -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -AU -AU -gI -nK -ur -ur -TL -AU -AU -pZ -kw -Rc -BR -dk -dC -mt -dC -mt -ee -BR -BR -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -"} -(32,1,1) = {" -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -AU -AU -AU -gV -he -he -TL -OC -Kx -kq -kt -uk -uk -uk -uk -uk -uk -uk -UM -UM -UM -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -"} -(33,1,1) = {" -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Rb -Rb -bH -AU -Zp -TL -TL -TL -LV -lK -kq -UN -uk -qT -dm -dD -dQ -kc -NR -UM -kE -UM -UM -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -"} -(34,1,1) = {" -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Rb -bH -bH -AU -AU -hf -CA -TL -Mm -Kx -kq -kt -uk -cM -dn -dF -KD -ds -Lv -UM -kE -kE -UM -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -"} -(35,1,1) = {" -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Rb -Rb -bH -Rb -AU -AU -AU -AU -WZ -AU -AU -QR -kt -uk -cN -do -dG -dS -uk -uk -UM -UM -kE -UM -UM -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -"} -(36,1,1) = {" -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Rb -bH -bH -Rb -Gw -Gw -zK -ho -hx -wu -zK -kq -tl -nR -cO -dp -dG -dT -uk -Gw -Gw -UM -kE -kE -UM -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -"} -(37,1,1) = {" -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Rb -Rb -bH -Rb -Rb -Gw -Gw -yV -hp -hx -hO -zK -kq -kt -nR -cP -dq -dG -dV -ET -Gw -Gw -UM -UM -kE -UM -UM -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -"} -(38,1,1) = {" -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Rb -bH -bH -Rb -Gw -Gw -Gw -yV -SS -hy -hP -nJ -kq -kt -uk -cQ -dr -dG -Ds -ET -Gw -Gw -Gw -UM -kE -kE -UM -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -"} -(39,1,1) = {" -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Rb -Rb -bH -Rb -Rb -Gw -Gw -Gw -yV -hr -hz -hQ -zK -kq -kx -cp -cR -cR -dH -dX -ET -Gw -Gw -Gw -UM -UM -kE -UM -UM -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -"} -(40,1,1) = {" -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Rb -bH -bH -Rb -Gw -Gw -Gw -Gw -zK -hs -hz -nc -zK -QR -kt -uk -cS -ds -dI -dY -uk -Gw -Gw -Gw -Gw -UM -kE -kE -UM -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -"} -(41,1,1) = {" -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Rb -bH -Rb -Rb -Gw -Gw -Gw -Gw -yV -hs -hz -py -zK -kq -kt -nR -Vh -ds -dI -dZ -ET -Gw -Gw -Gw -Gw -UM -UM -kE -UM -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -"} -(42,1,1) = {" -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Rb -Rb -bH -Rb -Gw -Gw -Gw -Gw -Gw -yV -wi -hA -hR -hY -kr -ky -uk -cU -ds -dI -MI -ET -Gw -Gw -Gw -Gw -Gw -UM -kE -UM -UM -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -"} -(43,1,1) = {" -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Rb -bH -bH -Rb -Gw -Gw -Gw -Gw -Gw -yV -hs -hx -hS -zK -kq -kt -uk -cV -ds -dI -dZ -ET -Gw -Gw -Gw -Gw -Gw -UM -kE -kE -UM -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -"} -(44,1,1) = {" -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Rb -bH -Rb -Rb -Gw -Gw -Gw -Gw -Gw -zK -hs -hx -hT -zK -kq -tl -uk -Ak -ds -dI -ea -uk -Gw -Gw -Gw -Gw -Gw -UM -UM -kE -UM -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -"} -(45,1,1) = {" -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Rb -Rb -bH -Rb -Gw -Gw -Gw -Gw -Gw -Gw -yV -hp -hx -hx -nJ -kq -kt -uk -pY -pY -dJ -uk -uk -Gw -Gw -Gw -Gw -Gw -Gw -UM -kE -UM -UM -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -"} -(46,1,1) = {" -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Rb -bH -bH -Rb -Gw -Gw -Gw -Gw -Gw -Gw -yV -Uu -hx -hp -zK -kq -kt -uk -cX -ds -dK -VA -uk -Gw -Gw -Gw -Gw -Gw -Gw -UM -kE -kE -UM -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -"} -(47,1,1) = {" -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Rb -bH -Rb -Rb -Gw -Gw -Gw -Gw -Gw -Gw -yV -ht -hx -hU -zK -kq -kt -uk -cY -ds -dL -ec -ET -Gw -Gw -Gw -Gw -Gw -Gw -UM -UM -kE -UM -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -"} -(48,1,1) = {" -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Rb -Rb -bH -Rb -Gw -Gw -Gw -Gw -Gw -Gw -Gw -zK -hu -hx -Lj -zK -QR -UN -uk -mL -dt -dM -ed -uk -Gw -Gw -Gw -Gw -Gw -Gw -Gw -UM -kE -UM -UM -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -"} -(49,1,1) = {" -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Rb -bH -bH -Rb -Gw -Gw -Gw -Gw -Gw -Gw -Gw -zK -zK -zK -zK -zK -kq -kt -uk -uk -uk -uk -uk -uk -Gw -Gw -Gw -Gw -Gw -Gw -Gw -UM -kE -kE -UM -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -"} -(50,1,1) = {" -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Rb -bH -Rb -Rb -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Ex -YG -dE -dE -hZ -kr -kz -JI -im -im -im -UD -Dy -Gw -Gw -Gw -Gw -Gw -Gw -Gw -UM -UM -kE -UM -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -"} -(51,1,1) = {" -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Rb -Rb -bH -Rb -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Ex -vP -dl -dl -ZP -Vc -kt -VZ -il -il -il -iv -Dy -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -UM -kE -UM -UM -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -"} -(52,1,1) = {" -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Rb -bH -bH -Rb -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -aI -gy -dl -dl -mI -mI -nr -mI -mI -il -il -iv -OT -iE -Gw -Gw -Gw -Gw -Gw -Gw -Gw -UM -kE -kE -UM -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -"} -(53,1,1) = {" -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Rb -bH -Rb -Rb -Gw -Gw -Gw -Gw -Gw -Gw -Gw -aI -aI -gy -dl -oj -mI -bV -bS -cq -mI -Uo -il -iv -OT -OT -Gw -Gw -Gw -Gw -Gw -Gw -Gw -UM -UM -kE -UM -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -"} -(54,1,1) = {" -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Rb -bH -Rb -Gw -Gw -Gw -Gw -Gw -Gw -Gw -aI -aI -Lr -gy -dl -Pr -mI -bw -bT -cr -mI -il -il -iv -il -OT -OT -Gw -Gw -Gw -Gw -Gw -Gw -Gw -UM -kE -UM -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -"} -(55,1,1) = {" -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Rb -bH -Rb -Gw -Gw -Gw -Gw -Gw -Gw -Gw -aI -Lz -dl -gy -dl -mI -mI -bx -bT -IQ -mI -mI -il -iv -il -qG -OT -Gw -Gw -Gw -Gw -Gw -Gw -Gw -UM -kE -UM -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -"} -(56,1,1) = {" -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Rb -bH -Rb -Gw -Gw -Gw -Gw -Gw -Gw -Ex -Ex -GN -dl -gy -oj -mI -bh -by -Qr -Lw -da -mI -UW -iv -il -il -Dy -Dy -Gw -Gw -Gw -Gw -Gw -Gw -UM -kE -UM -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -"} -(57,1,1) = {" -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -QP -QP -Rb -bH -Rb -Gw -Gw -Gw -Gw -Gw -Ex -Ex -dl -dl -dl -gy -mI -mI -bi -bz -bW -bz -db -mI -mI -iw -il -il -il -Dy -Dy -Gw -Gw -Gw -Gw -Gw -UM -kE -UM -PT -PT -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -"} -(58,1,1) = {" -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -QP -QP -QP -Rb -bH -Rb -Gw -Gw -Gw -Gw -Gw -Ex -gB -gK -dE -dE -gM -mI -Ji -bj -bA -bX -cs -bj -pe -mI -ix -im -im -iu -iR -Dy -Gw -Gw -Gw -Gw -Gw -UM -kE -UM -PT -PT -PT -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -"} -(59,1,1) = {" -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -QP -bm -bm -Rb -Rb -Rb -Gw -Gw -Gw -Gw -aI -aI -Hf -gL -dl -dl -oj -mI -Nw -bk -bB -bY -cu -dc -dv -mI -xa -il -il -iL -OH -OT -OT -Gw -Gw -Gw -Gw -UM -UM -PT -kd -ke -PT -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -"} -(60,1,1) = {" -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -QP -fP -pb -uJ -Zt -QP -Gw -Gw -Gw -aI -aI -ft -gQ -gy -dl -LW -Rs -mI -mI -bl -bD -bZ -cv -va -mI -mI -iz -iC -iF -iM -il -iW -OT -OT -Gw -Gw -Gw -PT -PT -jW -bC -mx -PT -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -"} -(61,1,1) = {" -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -QP -QP -QP -QP -ye -QP -QP -Gw -Gw -aI -bR -gd -jt -gy -dl -OU -OU -MS -mI -Na -bE -HG -bz -TE -mI -ir -il -iD -iG -iN -iT -iT -IS -OT -Gw -Gw -PT -PT -jP -bC -bC -fy -PT -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -"} -(62,1,1) = {" -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -QP -JZ -xo -QP -ye -qs -QP -QP -QP -QP -VQ -gp -nb -gy -dl -hi -OU -uZ -mI -bn -bF -bF -bF -bF -mI -WQ -il -iD -iG -iO -iV -iV -iY -OT -OT -OT -PT -fs -jQ -bC -bC -kn -PT -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -"} -(63,1,1) = {" -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -hk -er -fe -fg -fp -jg -jg -sD -fC -QP -gE -gw -aJ -gy -dl -JN -lQ -Ex -xV -gh -fZ -fZ -fZ -Nf -xV -Dy -il -iD -iH -iP -il -il -il -PT -YA -fH -qC -bC -jQ -yF -kh -yN -PT -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -"} -(64,1,1) = {" -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -QP -Si -PP -QP -fq -fu -fD -fD -fL -lc -nT -gx -dE -gM -dl -Tj -Ex -Ex -Mz -rv -gj -gj -gj -jv -Hu -Dy -Dy -yr -iI -iM -il -il -il -wk -bC -bC -jd -Kn -bC -bC -bC -yc -PT -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -"} -(65,1,1) = {" -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -QP -Ac -Ac -QP -jg -fv -jg -jg -xI -uX -dl -gy -dl -dl -dl -Ex -Ex -fV -Pl -xq -xq -xq -xq -xq -gk -Lh -Dy -Dy -iJ -iQ -im -im -iZ -Cv -tY -tY -jf -ji -bC -bC -bC -Sm -PT -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -"} -(66,1,1) = {" -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -QP -PG -PJ -TO -fr -DD -jg -KV -fN -QP -UK -gy -dl -UK -Ex -Ex -fV -Pl -bo -uB -gr -gr -gr -uB -aQ -gk -Lh -Dy -Dy -is -ir -OO -iv -PT -fw -fx -km -fM -Cd -Wu -bC -yc -PT -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -"} -(67,1,1) = {" -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -QP -ng -Yj -QP -QP -Ng -my -QP -vI -vI -vI -rx -vI -vI -xV -fV -Pl -bo -Le -Le -OY -cb -mz -Le -Le -aQ -BW -Nf -xV -Fl -Fl -Fl -ey -Fl -Fl -Fl -nG -fM -ry -bC -bC -ck -PT -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -"} -(68,1,1) = {" -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -QP -Oe -jg -fj -zT -ju -IJ -vI -ab -Kr -Ce -at -Om -vI -Wn -fW -bo -Le -Le -VD -aT -cd -aT -kZ -Le -Le -wb -jv -Kz -TQ -aa -LD -ez -eG -eN -Fl -jB -fM -eV -bC -bC -Pd -PT -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -"} -(69,1,1) = {" -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -QP -fa -sQ -fk -AT -sQ -wy -vI -LI -aj -ac -ac -ay -Fk -fQ -XD -uN -dg -ga -IT -Qp -ce -aT -aT -aT -dg -Hs -aQ -fZ -PK -eo -ev -eA -eH -Va -Fl -eW -fM -fh -ka -kj -SN -PT -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -"} -(70,1,1) = {" -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -QP -RO -MR -OG -AT -MR -XU -vI -ad -ak -ac -aw -az -Wh -fR -Le -Le -Le -Le -Le -Le -VS -aT -Uh -Le -Le -Di -th -gm -PK -eo -eu -eB -eI -eP -Fl -jD -fM -jF -ka -kj -Pd -PT -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -"} -(71,1,1) = {" -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -QP -QP -ff -QP -wo -fA -Od -vI -Ax -al -ac -au -aA -Fk -fS -Le -aM -dy -gf -aT -Wf -cf -aY -zZ -TX -pz -Oo -OP -gq -Fl -ep -eu -eB -eJ -eQ -Fl -Oh -fM -rz -ka -kj -PT -PT -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -"} -(72,1,1) = {" -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -QP -QP -QP -Vy -fB -jg -vI -Re -uQ -am -av -aB -Fk -fS -Le -Tb -aT -aZ -aT -bJ -kI -cC -aS -xL -Ya -oa -Vx -kH -CO -eq -ew -eC -eL -gP -Fl -jE -fM -jU -ka -PT -PT -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -"} -(73,1,1) = {" -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -QP -QP -yf -jg -jg -vI -SY -ag -an -oB -aC -Fk -fS -Le -aO -aU -gn -Kh -oK -Ws -ba -JX -sG -Ya -PH -OP -gs -Fl -es -eu -eu -eL -eS -Fl -fb -fM -jV -PT -PT -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -"} -(74,1,1) = {" -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -QP -QP -lG -fE -vI -ah -UR -ao -Xw -aD -Fk -fS -Le -Le -Le -RP -aR -RG -BK -cE -bp -IC -Le -Ve -Aj -gs -PK -Gq -eu -eD -eu -eT -Fl -jG -jO -PT -PT -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -"} -(75,1,1) = {" -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -QP -QP -QP -vI -ah -EY -ao -av -aE -Fk -fT -aV -Qg -Le -kQ -aT -VM -aT -cF -Ii -SQ -Le -Kt -Fr -tL -PK -Gq -eu -eE -eu -eu -Fl -PT -PT -PT -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -"} -(76,1,1) = {" -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -QP -QP -vI -ah -ar -ac -wL -aF -vI -fT -fZ -aV -Le -Le -Tb -RL -aT -Ro -Av -Le -Le -Fr -fZ -gt -Fl -Aq -eu -eF -vh -eU -Fl -PT -PT -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -"} -(77,1,1) = {" -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -vI -vI -vI -vI -vI -vI -vI -vI -aX -bI -ge -fY -kK -Mw -bN -Zn -pa -nD -Le -tN -gm -fZ -fZ -Fl -Fl -Fl -Fl -Fl -Fl -Fl -PT -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -"} -(78,1,1) = {" -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -fF -fF -fF -fF -fF -fF -vI -vI -Gb -bt -RB -aV -Le -Le -bO -mn -cl -Le -Le -Fr -js -RB -Nh -Fl -Fl -gu -gu -gu -gu -gu -kF -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -"} -(79,1,1) = {" -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -vI -xV -fZ -sL -gc -tN -Le -Le -Le -Le -Le -tN -gl -mP -Vj -xV -Fl -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -"} -(80,1,1) = {" -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -xV -xV -xV -bt -FR -FR -FR -FR -FR -CH -FR -sF -xV -xV -xV -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -"} -(81,1,1) = {" -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -go -xV -xV -fZ -Nh -fZ -fZ -Nh -Vj -fZ -xV -xV -go -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -"} -(82,1,1) = {" -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -go -xV -xV -xV -xV -xV -xV -xV -xV -xV -go -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -"} -(83,1,1) = {" -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -"} -(84,1,1) = {" -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -"} -(85,1,1) = {" -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -"} -(86,1,1) = {" -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -"} -(87,1,1) = {" -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -"} -(88,1,1) = {" -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -"} -(89,1,1) = {" -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -"} -(90,1,1) = {" -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -"} -(91,1,1) = {" -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -"} -(92,1,1) = {" -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -"} -(93,1,1) = {" -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -"} -(94,1,1) = {" -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -"} -(95,1,1) = {" -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -"} -(96,1,1) = {" -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -"} -(97,1,1) = {" -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -"} -(98,1,1) = {" -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -"} -(99,1,1) = {" -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -"} -(100,1,1) = {" -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -Gw -"} diff --git a/maps/away/skrellscoutship/skrellscoutship_shuttles.dm b/maps/away/skrellscoutship/skrellscoutship_shuttles.dm deleted file mode 100644 index 834a3c3253e8c..0000000000000 --- a/maps/away/skrellscoutship/skrellscoutship_shuttles.dm +++ /dev/null @@ -1,93 +0,0 @@ -/obj/machinery/computer/shuttle_control/explore/skrellscoutship - name = "SSV control console" - req_access = list(access_skrellscoutship) - shuttle_tag = "Skrellian Scout" - -/obj/machinery/computer/shuttle_control/explore/skrellscoutshuttle - name = "SSV Shuttle control console" - req_access = list(access_skrellscoutship) - shuttle_tag = "Skrellian Shuttle" - -/obj/effect/overmap/visitable/ship/landable/skrellscoutship - name = "light skrellian vessel" - shuttle = "Skrellian Scout" - multiz = 1 - icon_state = "ship" - moving_state = "ship_moving" - fore_dir = WEST - color = "#ff00ff" - vessel_mass = 1000 - vessel_size = SHIP_SIZE_SMALL - initial_restricted_waypoints = list( - "Skrellian Shuttle" = list("nav_skrellscoutsh_dock") - ) - - -/obj/effect/overmap/visitable/ship/landable/skrellscoutship/New() - name = "SSV [pick("Xilvuxix", "Zuuvixix", "Quizuu", "Vulzxixvuu","Quumzoox","Quuvuzxuu")]" - ..() - -/obj/effect/overmap/visitable/ship/landable/skrellscoutshuttle - name = "SSV-S" - shuttle = "Skrellian Shuttle" - fore_dir = WEST - color = "#880088" - vessel_mass = 750 - vessel_size = SHIP_SIZE_TINY - -/datum/shuttle/autodock/overmap/skrellscoutship - name = "Skrellian Scout" - warmup_time = 5 - range = 1 - current_location = "nav_skrellscout_start" - shuttle_area = list( - /area/ship/skrellscoutship/command/bridge, /area/ship/skrellscoutship/wings/port, /area/ship/skrellscoutship/wings/starboard, - /area/ship/skrellscoutship/brig, /area/ship/skrellscoutship/portcheckpoint, /area/ship/skrellscoutship/forestorage, - /area/ship/skrellscoutship/externalwing/port, /area/ship/skrellscoutship/externalwing/starboard, /area/ship/skrellscoutship/corridor, - /area/ship/skrellscoutship/crew/quarters, /area/ship/skrellscoutship/crew/medbay, /area/ship/skrellscoutship/crew/kitchen, - /area/ship/skrellscoutship/maintenance/power, /area/ship/skrellscoutship/hangar, /area/ship/skrellscoutship/command/armory, - /area/ship/skrellscoutship/dock, /area/ship/skrellscoutship/maintenance/atmos, /area/ship/skrellscoutship/robotics, - /area/ship/skrellscoutship/crew/rec - ) - defer_initialisation = TRUE - knockdown = FALSE - flags = SHUTTLE_FLAGS_PROCESS - skill_needed = SKILL_NONE - ceiling_type = /turf/simulated/floor/shuttle_ceiling/skrell - -/obj/effect/shuttle_landmark/skrellscoutship/start - name = "Uncharted Space" - landmark_tag = "nav_skrellscout_start" - -/datum/shuttle/autodock/overmap/skrellscoutshuttle - name = "Skrellian Shuttle" - warmup_time = 5 - current_location = "nav_skrellscoutsh_dock" - range = 2 - shuttle_area = /area/ship/skrellscoutshuttle - defer_initialisation = TRUE - flags = SHUTTLE_FLAGS_PROCESS - skill_needed = SKILL_NONE - ceiling_type = /turf/simulated/floor/shuttle_ceiling/skrell - mothershuttle = "Skrellian Scout" - -/obj/effect/shuttle_landmark/skrellscoutshuttle/start - name = "Dock" - landmark_tag = "nav_skrellscoutsh_dock" - base_area = /area/ship/skrellscoutship/hangar - base_turf = /turf/simulated/floor/tiled/skrell - movable_flags = MOVABLE_FLAG_EFFECTMOVE - -/obj/effect/shuttle_landmark/skrellscout/dock - name = "Skrellian Scout Docking Port" - landmark_tag = "nav_skrellscout_dock" - -/obj/effect/shuttle_landmark/skrellscoutshuttle/altdock - name = "Docking Port" - landmark_tag = "nav_skrellscoutsh_altdock" - -/turf/simulated/floor/shuttle_ceiling/skrell - color = COLOR_SOL - -/turf/simulated/floor/shuttle_ceiling/skrell/air - initial_gas = list(GAS_OXYGEN = MOLES_O2STANDARD, GAS_NITROGEN = MOLES_N2STANDARD) diff --git a/maps/away/slavers/slavers_base.dm b/maps/away/slavers/slavers_base.dm deleted file mode 100644 index 0f81caa8ae1a2..0000000000000 --- a/maps/away/slavers/slavers_base.dm +++ /dev/null @@ -1,191 +0,0 @@ -#include "slavers_base_areas.dm" -#include "../mining/mining_areas.dm" - -/obj/effect/overmap/visitable/sector/slavers_base - name = "large asteroid" - desc = "Sensor array is reading an artificial structure inside the asteroid." - icon_state = "object" - known = FALSE - - initial_generic_waypoints = list( - "nav_slavers_base_1", - "nav_slavers_base_2", - "nav_slavers_base_3", - "nav_slavers_base_4", - "nav_slavers_base_5", - "nav_slavers_base_6", - "nav_slavers_base_antag" - ) - -/datum/map_template/ruin/away_site/slavers - name = "Slavers' Base" - id = "awaysite_slavers" - description = "Asteroid with slavers base inside." - suffixes = list("slavers/slavers_base.dmm") - spawn_cost = 1 - generate_mining_by_z = 1 - area_usage_test_exempted_root_areas = list(/area/slavers_base) - apc_test_exempt_areas = list( - /area/slavers_base/hangar = NO_SCRUBBER - ) - -/obj/effect/shuttle_landmark/nav_slavers_base/nav1 - name = "Slavers Base Navpoint #1" - landmark_tag = "nav_slavers_base_1" - -/obj/effect/shuttle_landmark/nav_slavers_base/nav2 - name = "Slavers Base Navpoint #2" - landmark_tag = "nav_slavers_base_2" - -/obj/effect/shuttle_landmark/nav_slavers_base/nav3 - name = "Slavers Base Navpoint #3" - landmark_tag = "nav_slavers_base_3" - -/obj/effect/shuttle_landmark/nav_slavers_base/nav4 - name = "Slavers Base Navpoint #4" - landmark_tag = "nav_slavers_base_4" - -/obj/effect/shuttle_landmark/nav_slavers_base/nav5 - name = "Slavers Base Navpoint #5" - landmark_tag = "nav_slavers_base_5" - -/obj/effect/shuttle_landmark/nav_slavers_base/nav6 - name = "Slavers Base Navpoint #6" - landmark_tag = "nav_slavers_base_6" - -/obj/effect/shuttle_landmark/nav_slavers_base/nav7 - name = "Slavers Base Navpoint #7" - landmark_tag = "nav_slavers_base_antag" - -/decl/hierarchy/outfit/corpse - name = "Corpse Clothing" - -/decl/hierarchy/outfit/corpse/Initialize() - ..() - hierarchy_type = type - -/decl/hierarchy/outfit/corpse/slavers_base - name = "Basic slaver output" - -/obj/effect/landmark/corpse/slavers_base/slaver1 - name = "Slaver" - corpse_outfits = list(/decl/hierarchy/outfit/corpse/slavers_base/slaver1) - -/decl/hierarchy/outfit/corpse/slavers_base/slaver1 - name = "Dead Slaver 1" - uniform = /obj/item/clothing/under/color/brown - shoes = /obj/item/clothing/shoes/black - glasses = /obj/item/clothing/glasses/sunglasses - -/obj/effect/landmark/corpse/slavers_base/slaver2 - name = "Slaver" - corpse_outfits = list(/decl/hierarchy/outfit/corpse/slavers_base/slaver2) - -/decl/hierarchy/outfit/corpse/slavers_base/slaver2 - name = "Dead Slaver 2" - uniform = /obj/item/clothing/under/grayson - shoes = /obj/item/clothing/shoes/blue - -/obj/effect/landmark/corpse/slavers_base/slaver3 - name = "Slaver" - corpse_outfits = list(/decl/hierarchy/outfit/corpse/slavers_base/slaver3) - -/decl/hierarchy/outfit/corpse/slavers_base/slaver3 - name = "Dead Slaver 3" - uniform = /obj/item/clothing/under/pirate - shoes = /obj/item/clothing/shoes/brown - -/obj/effect/landmark/corpse/slavers_base/slaver4 - name = "Slaver" - corpse_outfits = list(/decl/hierarchy/outfit/corpse/slavers_base/slaver4) - -/decl/hierarchy/outfit/corpse/slavers_base/slaver4 - name = "Dead Slaver 4" - uniform = /obj/item/clothing/under/redcoat - shoes = /obj/item/clothing/shoes/brown - -/obj/effect/landmark/corpse/slavers_base/slaver5 - name = "Slaver" - corpse_outfits = list(/decl/hierarchy/outfit/corpse/slavers_base/slaver5) - -/decl/hierarchy/outfit/corpse/slavers_base/slaver5 - name = "Dead Slaver 5" - uniform = /obj/item/clothing/under/sterile - shoes = /obj/item/clothing/shoes/orange - mask = /obj/item/clothing/mask/surgical - -/obj/effect/landmark/corpse/slavers_base/slaver6 - name = "Slaver" - corpse_outfits = list(/decl/hierarchy/outfit/corpse/slavers_base/slaver6) - -/decl/hierarchy/outfit/corpse/slavers_base/slaver6 - name = "Dead Slaver 6" - uniform = /obj/item/clothing/under/frontier - shoes = /obj/item/clothing/shoes/orange - -/obj/effect/landmark/corpse/slavers_base/slave - name = "Slave" - corpse_outfits = list(/decl/hierarchy/outfit/corpse/slavers_base/slave) - -/decl/hierarchy/outfit/corpse/slavers_base/slave - name = "Dead Slave" - uniform = /obj/item/clothing/under/color/orange - shoes = /obj/item/clothing/shoes/tactical - -/mob/living/simple_animal/hostile/abolition_extremist - name = "abolition extremist" - desc = "Vigiliant fighter against slavery." - icon = 'maps/away/slavers/slavers_base_sprites.dmi' - icon_state = "extremist" - icon_living = "extremist" - icon_dead = "extremist_dead" - turns_per_move = 5 - response_help = "pushes" - response_disarm = "shoves" - response_harm = "hits" - speed = 4 - maxHealth = 100 - health = 100 - natural_weapon = /obj/item/natural_weapon/punch - can_escape = TRUE - unsuitable_atmos_damage = 15 - var/corpse = /obj/effect/landmark/corpse/abolitionist - var/weapon = /obj/item/gun/energy/laser - projectilesound = 'sound/weapons/laser.ogg' - ranged = 1 - projectiletype = /obj/item/projectile/beam - faction = "extremist abolitionists" - - ai_holder = /datum/ai_holder/simple_animal/ranged - -/mob/living/simple_animal/hostile/abolition_extremist/death(gibbed, deathmessage, show_dead_message) - . = ..(gibbed, deathmessage, show_dead_message) - if(corpse) - new corpse(loc) - if(weapon) - new weapon(loc) - qdel(src) - -/obj/effect/landmark/corpse/abolitionist - name = "abolitionist" - corpse_outfits = list(/decl/hierarchy/outfit/corpse/abolitionist) - -/decl/hierarchy/outfit/corpse/abolitionist - name = "Dead abolitionist" - uniform = /obj/item/clothing/under/abol_uniform - shoes = /obj/item/clothing/shoes/jackboots - head = /obj/item/clothing/head/helmet/merc - -/obj/item/clothing/under/abol_uniform - name = "abolitionist combat suit" - desc = "Lightly armored suit worn by abolition extremists during raids. It has green patches on the right sleeve and the chest. There is big green \"A\" on the back." - icon = 'maps/away/slavers/slavers_base_sprites.dmi' - icon_state = "abol_suit" - item_icons = list(slot_w_uniform_str = 'maps/away/slavers/slavers_base_sprites.dmi') - body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS - armor = list( - melee = ARMOR_MELEE_KNIVES, - bullet = ARMOR_BALLISTIC_PISTOL, - laser = ARMOR_LASER_MINOR, - energy = ARMOR_ENERGY_MINOR - ) diff --git a/maps/away/slavers/slavers_base.dmm b/maps/away/slavers/slavers_base.dmm deleted file mode 100644 index 61c2a9604c1f3..0000000000000 --- a/maps/away/slavers/slavers_base.dmm +++ /dev/null @@ -1,44692 +0,0 @@ -//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE -"aa" = ( -/turf/space, -/area/space) -"ab" = ( -/obj/effect/shuttle_landmark/nav_slavers_base/nav2, -/turf/space, -/area/space) -"ac" = ( -/obj/effect/shuttle_landmark/nav_slavers_base/nav3, -/turf/space, -/area/space) -"ad" = ( -/turf/unsimulated/mask, -/area/mine/unexplored) -"ae" = ( -/obj/effect/shuttle_landmark/nav_slavers_base/nav1, -/turf/space, -/area/space) -"af" = ( -/turf/simulated/mineral, -/area/space) -"ag" = ( -/turf/simulated/floor/asteroid, -/area/space) -"ah" = ( -/turf/simulated/wall, -/area/slavers_base/mort) -"ai" = ( -/obj/effect/shuttle_landmark/nav_slavers_base/nav4, -/turf/space, -/area/space) -"aj" = ( -/obj/structure/ore_box{ - desc = "A heavy box covered with dried blood."; - name = "Big dirty box" - }, -/turf/simulated/floor/airless/ceiling, -/area/slavers_base/mort) -"ak" = ( -/turf/simulated/floor/airless/ceiling, -/area/slavers_base/mort) -"al" = ( -/obj/machinery/light/small{ - dir = 1 - }, -/turf/simulated/floor/airless/ceiling, -/area/slavers_base/mort) -"am" = ( -/obj/structure/crematorium, -/turf/simulated/floor/airless/ceiling, -/area/slavers_base/mort) -"an" = ( -/obj/effect/decal/cleanable/ash, -/turf/simulated/floor/airless/ceiling, -/area/slavers_base/mort) -"ao" = ( -/obj/structure/table/standard, -/obj/item/wirecutters, -/turf/simulated/floor/airless/ceiling, -/area/slavers_base/mort) -"ap" = ( -/obj/structure/table/standard, -/obj/effect/landmark/corpse/slavers_base/slave, -/turf/simulated/floor/airless/ceiling, -/area/slavers_base/mort) -"aq" = ( -/obj/structure/table/standard, -/obj/item/paper/spacer{ - info = "If they'll keep having fun with cargo in such manner, we'll run out of freezers to keep what's left from it."; - name = "Note" - }, -/obj/machinery/light/small{ - dir = 1 - }, -/turf/simulated/floor/airless/ceiling, -/area/slavers_base/mort) -"ar" = ( -/obj/structure/table/standard, -/obj/item/material/knife/table, -/turf/simulated/floor/airless/ceiling, -/area/slavers_base/mort) -"as" = ( -/obj/structure/table/rack, -/turf/simulated/floor/airless/ceiling, -/area/slavers_base/mort) -"at" = ( -/obj/effect/gibspawner/human, -/turf/simulated/floor/asteroid, -/area/space) -"au" = ( -/obj/structure/table/rack, -/obj/item/wirecutters, -/turf/simulated/floor/airless/ceiling, -/area/slavers_base/mort) -"av" = ( -/obj/item/shovel, -/turf/simulated/floor/asteroid, -/area/space) -"aw" = ( -/obj/item/remains/human, -/turf/simulated/floor/asteroid, -/area/space) -"ax" = ( -/obj/item/remains/human, -/turf/simulated/floor/airless/ceiling, -/area/slavers_base/mort) -"ay" = ( -/obj/item/bodybag, -/turf/simulated/floor/airless/ceiling, -/area/slavers_base/mort) -"az" = ( -/obj/item/material/knife/table, -/turf/simulated/floor/airless/ceiling, -/area/slavers_base/mort) -"aA" = ( -/obj/structure/table/rack, -/obj/item/material/hatchet, -/turf/simulated/floor/airless/ceiling, -/area/slavers_base/mort) -"aB" = ( -/obj/structure/closet/crate/freezer, -/turf/simulated/floor/airless/ceiling, -/area/slavers_base/mort) -"aC" = ( -/obj/effect/gibspawner/human, -/turf/simulated/floor/airless/ceiling, -/area/slavers_base/mort) -"aD" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/turf/simulated/floor/airless/ceiling, -/area/slavers_base/mort) -"aE" = ( -/obj/structure/cable{ - d2 = 2; - icon_state = "0-2" - }, -/obj/machinery/power/apc{ - dir = 4; - name = "Slaves Mortuary"; - pixel_x = 24 - }, -/obj/machinery/atmospherics/unary/vent_pump/on, -/turf/simulated/floor/airless/ceiling, -/area/slavers_base/mort) -"aF" = ( -/obj/machinery/light/small, -/turf/simulated/floor/airless/ceiling, -/area/slavers_base/mort) -"aG" = ( -/obj/machinery/gibber, -/turf/simulated/floor/airless/ceiling, -/area/slavers_base/mort) -"aH" = ( -/obj/structure/kitchenspike, -/turf/simulated/floor/airless/ceiling, -/area/slavers_base/mort) -"aI" = ( -/obj/structure/kitchenspike, -/obj/machinery/light/small, -/turf/simulated/floor/airless/ceiling, -/area/slavers_base/mort) -"aJ" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/turf/simulated/floor/airless/ceiling, -/area/slavers_base/mort) -"aK" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/turf/simulated/floor/airless/ceiling, -/area/slavers_base/mort) -"aL" = ( -/obj/machinery/door/airlock{ - name = "Mortuary backyard" - }, -/turf/simulated/floor/airless/ceiling, -/area/slavers_base/mort) -"aM" = ( -/turf/simulated/wall, -/area/slavers_base/cells) -"aN" = ( -/obj/machinery/door/airlock{ - name = "Slaves mortuary" - }, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/airless, -/area/slavers_base/cells) -"aO" = ( -/obj/structure/hygiene/toilet{ - dir = 4 - }, -/turf/simulated/floor/airless/ceiling, -/area/slavers_base/cells) -"aP" = ( -/turf/simulated/floor/airless/ceiling, -/area/slavers_base/cells) -"aQ" = ( -/obj/machinery/light/small/red{ - dir = 1 - }, -/turf/simulated/floor/airless/ceiling, -/area/slavers_base/cells) -"aR" = ( -/obj/structure/mattress/dirty, -/turf/simulated/floor/airless/ceiling, -/area/slavers_base/cells) -"aS" = ( -/obj/structure/mattress/dirty, -/obj/item/reagent_containers/glass/rag, -/turf/simulated/floor/airless/ceiling, -/area/slavers_base/cells) -"aT" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/blood, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/airless, -/area/slavers_base/cells) -"aU" = ( -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/airless, -/area/slavers_base/cells) -"aV" = ( -/obj/random/trash, -/turf/simulated/floor/airless/ceiling, -/area/slavers_base/cells) -"aW" = ( -/obj/item/reagent_containers/glass/rag, -/turf/simulated/floor/airless/ceiling, -/area/slavers_base/cells) -"aX" = ( -/obj/structure/hygiene/shower{ - dir = 4 - }, -/turf/simulated/floor/airless/ceiling, -/area/slavers_base/cells) -"aY" = ( -/obj/item/reagent_containers/glass/rag, -/obj/random/trash, -/turf/simulated/floor/airless/ceiling, -/area/slavers_base/cells) -"aZ" = ( -/obj/structure/mattress/dirty, -/obj/item/reagent_containers/food/drinks/cans/waterbottle, -/turf/simulated/floor/airless/ceiling, -/area/slavers_base/cells) -"ba" = ( -/obj/item/remains/human, -/turf/simulated/floor/airless/ceiling, -/area/slavers_base/cells) -"bb" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/airless, -/area/slavers_base/cells) -"bc" = ( -/obj/machinery/flasher{ - id_tag = "permentryflash"; - name = "Floor mounted flash" - }, -/obj/item/reagent_containers/glass/rag, -/turf/simulated/floor/airless/ceiling, -/area/slavers_base/cells) -"bd" = ( -/obj/structure/mattress/dirty, -/obj/item/trash/liquidfood, -/obj/effect/landmark/corpse/slavers_base/slave, -/turf/simulated/floor/airless/ceiling, -/area/slavers_base/cells) -"be" = ( -/obj/machinery/flasher{ - id_tag = "permentryflash"; - name = "Floor mounted flash" - }, -/turf/simulated/floor/airless/ceiling, -/area/slavers_base/cells) -"bf" = ( -/obj/item/reagent_containers/food/drinks/cans/waterbottle, -/turf/simulated/floor/airless/ceiling, -/area/slavers_base/cells) -"bg" = ( -/obj/machinery/flasher{ - id_tag = "permentryflash"; - name = "Floor mounted flash" - }, -/obj/random/trash, -/turf/simulated/floor/airless/ceiling, -/area/slavers_base/cells) -"bh" = ( -/obj/structure/mattress/dirty, -/obj/machinery/flasher{ - id_tag = "permentryflash"; - name = "Floor mounted flash" - }, -/turf/simulated/floor/airless/ceiling, -/area/slavers_base/cells) -"bi" = ( -/obj/structure/reagent_dispensers/watertank, -/turf/simulated/floor/airless/ceiling, -/area/slavers_base/cells) -"bj" = ( -/obj/effect/wallframe_spawn/reinforced, -/obj/structure/cable/cyan{ - d2 = 2; - icon_state = "0-2" - }, -/turf/simulated/floor/airless/ceiling, -/area/slavers_base/cells) -"bk" = ( -/obj/machinery/door/window/brigdoor/southright, -/turf/simulated/floor/airless/ceiling, -/area/slavers_base/cells) -"bl" = ( -/obj/machinery/door/window/brigdoor/southright, -/obj/random/trash, -/turf/simulated/floor/airless/ceiling, -/area/slavers_base/cells) -"bm" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 8 - }, -/turf/simulated/floor/tiled/airless, -/area/slavers_base/cells) -"bn" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable/cyan{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/turf/simulated/floor/tiled/airless, -/area/slavers_base/cells) -"bo" = ( -/obj/machinery/door/airlock{ - name = "Cell block B" - }, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable/cyan{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/turf/simulated/floor/tiled/airless, -/area/slavers_base/cells) -"bp" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 8 - }, -/obj/structure/cable/cyan{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/turf/simulated/floor/tiled/airless, -/area/slavers_base/cells) -"bq" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/airless, -/area/slavers_base/cells) -"br" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/cable/cyan{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/turf/simulated/floor/tiled/airless, -/area/slavers_base/cells) -"bs" = ( -/obj/machinery/flasher{ - id_tag = "permentryflash"; - name = "Floor mounted flash" - }, -/obj/effect/decal/cleanable/dirt, -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/airless, -/area/slavers_base/cells) -"bt" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/cable/cyan{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/turf/simulated/floor/tiled/airless, -/area/slavers_base/cells) -"bu" = ( -/obj/structure/mattress/dirty, -/obj/effect/landmark/corpse/slavers_base/slave, -/turf/simulated/floor/airless/ceiling, -/area/slavers_base/cells) -"bv" = ( -/obj/structure/closet/crate/freezer/rations, -/turf/simulated/floor/airless/ceiling, -/area/slavers_base/cells) -"bw" = ( -/obj/item/paper/spacer{ - info = "Tonight, when lights are out. Prepare shivs, pieces of glass, whatever you might find."; - name = "Note" - }, -/turf/simulated/floor/airless/ceiling, -/area/slavers_base/cells) -"bx" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/airless, -/area/slavers_base/cells) -"by" = ( -/obj/effect/wallframe_spawn/reinforced, -/turf/simulated/floor/tiled/airless, -/area/slavers_base/cells) -"bz" = ( -/obj/structure/closet/crate/freezer/rations, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 1 - }, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/airless, -/area/slavers_base/cells) -"bA" = ( -/obj/random/trash, -/obj/effect/decal/cleanable/dirt, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/airless, -/area/slavers_base/cells) -"bB" = ( -/obj/effect/decal/cleanable/dirt, -/obj/item/remains/human, -/turf/simulated/floor/tiled/airless, -/area/slavers_base/cells) -"bC" = ( -/obj/machinery/light{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/airless, -/area/slavers_base/cells) -"bD" = ( -/obj/random/shoes, -/turf/simulated/floor/airless/ceiling, -/area/slavers_base/cells) -"bE" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/turf/simulated/floor/airless/ceiling, -/area/slavers_base/cells) -"bF" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/airless, -/area/slavers_base/cells) -"bG" = ( -/obj/effect/wallframe_spawn/reinforced, -/obj/structure/cable/cyan, -/turf/simulated/floor/airless/ceiling, -/area/slavers_base/cells) -"bH" = ( -/obj/machinery/door/window/brigdoor/northright, -/turf/simulated/floor/airless/ceiling, -/area/slavers_base/cells) -"bI" = ( -/obj/random/trash, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/unary/vent_pump/on, -/turf/simulated/floor/airless/ceiling, -/area/slavers_base/cells) -"bJ" = ( -/obj/item/storage/bag/trash, -/turf/simulated/floor/airless/ceiling, -/area/slavers_base/cells) -"bK" = ( -/obj/effect/wallframe_spawn/reinforced, -/obj/structure/cable/cyan{ - d2 = 4; - icon_state = "0-4" - }, -/turf/simulated/floor/airless/ceiling, -/area/slavers_base/cells) -"bL" = ( -/obj/effect/wallframe_spawn/reinforced, -/obj/structure/cable/cyan{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/structure/cable/cyan{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/structure/cable/cyan{ - d2 = 8; - icon_state = "0-8" - }, -/turf/simulated/floor/airless/ceiling, -/area/slavers_base/cells) -"bM" = ( -/obj/effect/wallframe_spawn/reinforced, -/obj/structure/cable/cyan{ - d2 = 8; - icon_state = "0-8" - }, -/turf/simulated/floor/airless/ceiling, -/area/slavers_base/cells) -"bN" = ( -/obj/machinery/door/airlock{ - name = "Den B" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/airless/ceiling, -/area/slavers_base/cells) -"bO" = ( -/obj/machinery/light/small/red, -/turf/simulated/floor/airless/ceiling, -/area/slavers_base/cells) -"bP" = ( -/obj/machinery/light/small/red, -/obj/structure/mattress/dirty, -/obj/effect/landmark/corpse/slavers_base/slave, -/turf/simulated/floor/airless/ceiling, -/area/slavers_base/cells) -"bQ" = ( -/obj/structure/mattress/dirty, -/obj/random/junk, -/turf/simulated/floor/airless/ceiling, -/area/slavers_base/cells) -"bR" = ( -/obj/machinery/light{ - dir = 8; - icon_state = "tube1" - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/airless, -/area/slavers_base/cells) -"bS" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/structure/cable/cyan{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/turf/simulated/floor/tiled/airless, -/area/slavers_base/cells) -"bT" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/structure/cable/cyan{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/turf/simulated/floor/tiled/airless, -/area/slavers_base/cells) -"bU" = ( -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/airless, -/area/slavers_base/cells) -"bV" = ( -/obj/random/trash, -/obj/effect/decal/cleanable/dirt, -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/structure/cable/cyan{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/turf/simulated/floor/tiled/airless, -/area/slavers_base/cells) -"bW" = ( -/obj/machinery/flasher{ - id_tag = "permentryflash"; - name = "Floor mounted flash" - }, -/obj/effect/decal/cleanable/dirt, -/obj/item/ammo_casing/shotgun/beanbag{ - pixel_x = -8; - pixel_y = -4 - }, -/obj/item/ammo_casing/shotgun/beanbag{ - pixel_y = 5; - pixel_z = 7 - }, -/obj/item/ammo_casing/shotgun/beanbag, -/obj/item/ammo_casing/shotgun/beanbag, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 8 - }, -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/airless, -/area/slavers_base/cells) -"bX" = ( -/obj/machinery/door/airlock{ - name = "Dens block" - }, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/airless, -/area/slavers_base/cells) -"bY" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/blood, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 4 - }, -/obj/effect/landmark/corpse/slavers_base/slaver4, -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/airless, -/area/slavers_base/cells) -"bZ" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/blood, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/cable/cyan{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/turf/simulated/floor/tiled/airless, -/area/slavers_base/cells) -"ca" = ( -/obj/effect/wallframe_spawn/reinforced, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/structure/cable/cyan{ - d2 = 8; - icon_state = "0-8" - }, -/turf/simulated/floor/airless/ceiling, -/area/slavers_base/cells) -"cb" = ( -/obj/machinery/door/airlock{ - name = "Den A" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/airless/ceiling, -/area/slavers_base/cells) -"cc" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/blood, -/obj/structure/cable, -/obj/structure/cable{ - d2 = 2; - icon_state = "0-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/airless, -/area/slavers_base/cells) -"cd" = ( -/obj/structure/hygiene/toilet{ - dir = 4 - }, -/obj/item/reagent_containers/food/snacks/liquidfood, -/turf/simulated/floor/airless/ceiling, -/area/slavers_base/cells) -"ce" = ( -/obj/machinery/light/small/red{ - dir = 1 - }, -/obj/structure/mattress/dirty, -/turf/simulated/floor/airless/ceiling, -/area/slavers_base/cells) -"cf" = ( -/obj/structure/mattress/dirty, -/obj/random/snack, -/turf/simulated/floor/airless/ceiling, -/area/slavers_base/cells) -"cg" = ( -/obj/machinery/light/small/red{ - dir = 1 - }, -/obj/random/medical/lite, -/turf/simulated/floor/airless/ceiling, -/area/slavers_base/cells) -"ch" = ( -/obj/structure/mattress/dirty, -/obj/item/remains/human, -/turf/simulated/floor/airless/ceiling, -/area/slavers_base/cells) -"ci" = ( -/obj/random/junk, -/turf/simulated/floor/airless/ceiling, -/area/slavers_base/cells) -"cj" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 1 - }, -/turf/simulated/floor/airless/ceiling, -/area/slavers_base/cells) -"ck" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 1 - }, -/turf/simulated/floor/airless/ceiling, -/area/slavers_base/cells) -"cl" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/item/device/flashlight, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/airless, -/area/slavers_base/cells) -"cm" = ( -/turf/simulated/wall, -/area/slavers_base/hangar) -"cn" = ( -/obj/effect/decal/cleanable/dirt, -/obj/item/ammo_casing/shotgun/beanbag, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable/cyan{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/airless, -/area/slavers_base/cells) -"co" = ( -/obj/machinery/door/airlock{ - name = "Cell block A" - }, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable/cyan{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/airless, -/area/slavers_base/cells) -"cp" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 8 - }, -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/structure/cable/cyan{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/turf/simulated/floor/tiled/airless, -/area/slavers_base/cells) -"cq" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/structure/cable/cyan{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/turf/simulated/floor/tiled/airless, -/area/slavers_base/cells) -"cr" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/structure/cable/cyan{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/turf/simulated/floor/tiled/airless, -/area/slavers_base/cells) -"cs" = ( -/turf/simulated/floor/airless/ceiling, -/area/slavers_base/hangar) -"ct" = ( -/obj/machinery/light/small{ - dir = 1 - }, -/turf/simulated/floor/airless/ceiling, -/area/slavers_base/hangar) -"cu" = ( -/obj/machinery/door/blast/regular{ - id_tag = "service_hangar" - }, -/turf/simulated/floor/airless/ceiling, -/area/slavers_base/hangar) -"cv" = ( -/obj/effect/landmark/corpse/slavers_base/slave, -/turf/simulated/floor/airless/ceiling, -/area/slavers_base/cells) -"cw" = ( -/obj/effect/decal/cleanable/dirt, -/obj/item/ammo_casing/shotgun/beanbag, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/airless, -/area/slavers_base/cells) -"cx" = ( -/obj/effect/wallframe_spawn/reinforced, -/obj/structure/cable/cyan, -/turf/simulated/floor/tiled/airless, -/area/slavers_base/cells) -"cy" = ( -/obj/random/medical/lite, -/turf/simulated/floor/airless/ceiling, -/area/slavers_base/cells) -"cz" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/cable, -/obj/structure/cable{ - d2 = 2; - icon_state = "0-2" - }, -/obj/structure/cable{ - d2 = 4; - icon_state = "0-4" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/airless, -/area/slavers_base/cells) -"cA" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/cable{ - d2 = 8; - icon_state = "0-8" - }, -/obj/machinery/power/apc{ - dir = 4; - name = "Slavers holding area"; - pixel_x = 24 - }, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/airless, -/area/slavers_base/cells) -"cB" = ( -/obj/machinery/door/window/brigdoor/northright, -/obj/item/reagent_containers/glass/rag, -/turf/simulated/floor/airless/ceiling, -/area/slavers_base/cells) -"cC" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 9; - icon_state = "warning" - }, -/turf/simulated/floor/airless/ceiling, -/area/slavers_base/hangar) -"cD" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 1; - icon_state = "warning" - }, -/turf/simulated/floor/airless/ceiling, -/area/slavers_base/hangar) -"cE" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 5; - icon_state = "warning" - }, -/turf/simulated/floor/airless/ceiling, -/area/slavers_base/hangar) -"cF" = ( -/obj/item/paper, -/turf/simulated/floor/airless/ceiling, -/area/slavers_base/cells) -"cG" = ( -/obj/item/trash/liquidfood, -/turf/simulated/floor/airless/ceiling, -/area/slavers_base/cells) -"cH" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 8 - }, -/turf/simulated/floor/airless/ceiling, -/area/slavers_base/hangar) -"cI" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 4; - icon_state = "warning" - }, -/turf/simulated/floor/airless/ceiling, -/area/slavers_base/hangar) -"cJ" = ( -/obj/item/paper/spacer{ - info = "Doc who checked us told implants won't explode our heads. Gotta make guys know. Seems I see a silver lining."; - name = "Note" - }, -/turf/simulated/floor/airless/ceiling, -/area/slavers_base/cells) -"cK" = ( -/obj/machinery/light/small/red, -/obj/item/remains/human, -/turf/simulated/floor/airless/ceiling, -/area/slavers_base/cells) -"cL" = ( -/obj/random/snack, -/turf/simulated/floor/airless/ceiling, -/area/slavers_base/cells) -"cM" = ( -/obj/structure/mattress/dirty, -/obj/item/reagent_containers/food/drinks/cans/waterbottle, -/obj/random/junk, -/turf/simulated/floor/airless/ceiling, -/area/slavers_base/cells) -"cN" = ( -/obj/machinery/light/small/red, -/obj/random/trash, -/turf/simulated/floor/airless/ceiling, -/area/slavers_base/cells) -"cO" = ( -/obj/structure/mattress/dirty, -/obj/item/reagent_containers/glass/rag, -/obj/item/reagent_containers/food/drinks/cans/waterbottle, -/obj/effect/landmark/corpse/slavers_base/slave, -/turf/simulated/floor/airless/ceiling, -/area/slavers_base/cells) -"cP" = ( -/obj/structure/hygiene/toilet{ - dir = 4 - }, -/obj/item/trash/liquidfood, -/turf/simulated/floor/airless/ceiling, -/area/slavers_base/cells) -"cQ" = ( -/obj/machinery/light/small/red, -/obj/structure/mattress/dirty, -/obj/item/reagent_containers/glass/rag, -/turf/simulated/floor/airless/ceiling, -/area/slavers_base/cells) -"cR" = ( -/turf/simulated/wall, -/area/slavers_base/powatm) -"cS" = ( -/turf/simulated/wall, -/area/slavers_base/secwing) -"cT" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/door/airlock{ - name = "Slave hold hallway" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/airless, -/area/slavers_base/hallway) -"cU" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/door/airlock{ - name = "Slave hold hallway" - }, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/airless, -/area/slavers_base/hallway) -"cV" = ( -/turf/simulated/wall, -/area/slavers_base/med) -"cW" = ( -/obj/effect/shuttle_landmark/nav_slavers_base/nav7, -/turf/space, -/area/space) -"cX" = ( -/obj/machinery/atmospherics/unary/tank/air, -/turf/simulated/floor/airless/ceiling, -/area/slavers_base/powatm) -"cY" = ( -/obj/machinery/atmospherics/unary/tank/air, -/obj/machinery/light/small{ - dir = 1 - }, -/turf/simulated/floor/airless/ceiling, -/area/slavers_base/powatm) -"cZ" = ( -/obj/machinery/portable_atmospherics/canister/air, -/turf/simulated/floor/airless/ceiling, -/area/slavers_base/powatm) -"da" = ( -/turf/simulated/floor/airless/ceiling, -/area/slavers_base/powatm) -"db" = ( -/obj/machinery/light/small{ - dir = 1 - }, -/turf/simulated/floor/airless/ceiling, -/area/slavers_base/powatm) -"dc" = ( -/obj/machinery/portable_atmospherics/canister/oxygen, -/turf/simulated/floor/airless/ceiling, -/area/slavers_base/powatm) -"dd" = ( -/obj/structure/bed, -/turf/simulated/floor/tiled/airless, -/area/slavers_base/secwing) -"de" = ( -/obj/structure/closet, -/obj/random/snack, -/obj/random/projectile, -/turf/simulated/floor/tiled/airless, -/area/slavers_base/secwing) -"df" = ( -/obj/machinery/light{ - dir = 1 - }, -/turf/simulated/floor/tiled/airless, -/area/slavers_base/secwing) -"dg" = ( -/obj/structure/bed, -/obj/random/projectile, -/turf/simulated/floor/tiled/airless, -/area/slavers_base/secwing) -"dh" = ( -/obj/structure/closet, -/obj/random/smokes, -/obj/random/masks, -/obj/random/suit, -/turf/simulated/floor/tiled/airless, -/area/slavers_base/secwing) -"di" = ( -/obj/structure/table/rack, -/obj/item/device/flashlight, -/obj/random/medical/lite, -/turf/simulated/floor/tiled, -/area/slavers_base/secwing) -"dj" = ( -/obj/structure/table/rack, -/obj/machinery/light{ - dir = 1 - }, -/obj/item/storage/box/handcuffs, -/turf/simulated/floor/tiled, -/area/slavers_base/secwing) -"dk" = ( -/obj/structure/table/rack, -/obj/item/melee/baton, -/obj/item/melee/baton, -/obj/item/melee/baton, -/obj/random/tool, -/turf/simulated/floor/tiled, -/area/slavers_base/secwing) -"dl" = ( -/obj/structure/table/rack, -/obj/item/device/flash, -/obj/random/ammo, -/turf/simulated/floor/tiled, -/area/slavers_base/secwing) -"dm" = ( -/obj/structure/table/rack, -/obj/item/storage/box/ammo/stunshells, -/obj/item/gun/projectile/shotgun/pump, -/turf/simulated/floor/tiled, -/area/slavers_base/secwing) -"dn" = ( -/obj/machinery/light{ - dir = 1 - }, -/turf/simulated/floor/tiled, -/area/slavers_base/secwing) -"do" = ( -/obj/structure/cable{ - d2 = 6; - icon_state = "0-6" - }, -/obj/machinery/power/smes/buildable, -/turf/simulated/floor/tiled, -/area/slavers_base/secwing) -"dp" = ( -/turf/simulated/floor/tiled, -/area/slavers_base/secwing) -"dq" = ( -/obj/structure/cable/cyan{ - d2 = 4; - icon_state = "0-4" - }, -/obj/machinery/power/smes/buildable, -/turf/simulated/floor/tiled, -/area/slavers_base/secwing) -"dr" = ( -/obj/effect/wallframe_spawn/reinforced, -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/airless, -/area/slavers_base/secwing) -"ds" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 8 - }, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/airless, -/area/slavers_base/hallway) -"dt" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/turf/simulated/floor/tiled/airless, -/area/slavers_base/hallway) -"du" = ( -/obj/machinery/door/airlock{ - name = "Slave processing" - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled/airless, -/area/slavers_base/med) -"dv" = ( -/obj/machinery/flasher{ - id_tag = "permentryflash"; - name = "Floor mounted flash" - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 8 - }, -/turf/simulated/floor/tiled/airless, -/area/slavers_base/med) -"dw" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/cable{ - d2 = 8; - icon_state = "0-8" - }, -/obj/machinery/power/apc{ - dir = 1; - name = "Medical room"; - pixel_y = 24 - }, -/turf/simulated/floor/tiled/airless, -/area/slavers_base/med) -"dx" = ( -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/airless, -/area/slavers_base/med) -"dy" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/light{ - dir = 1 - }, -/turf/simulated/floor/tiled/airless, -/area/slavers_base/med) -"dz" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/hygiene/shower{ - pixel_y = 30 - }, -/turf/simulated/floor/tiled/airless, -/area/slavers_base/med) -"dA" = ( -/obj/machinery/door/airlock{ - name = "Storage" - }, -/turf/simulated/floor/tiled/airless, -/area/slavers_base/med) -"dB" = ( -/turf/simulated/floor/airless/ceiling, -/area/slavers_base/med) -"dC" = ( -/obj/structure/reagent_dispensers/watertank, -/obj/machinery/light/small{ - dir = 1 - }, -/turf/simulated/floor/airless/ceiling, -/area/slavers_base/med) -"dD" = ( -/obj/structure/reagent_dispensers/watertank, -/turf/simulated/floor/airless/ceiling, -/area/slavers_base/med) -"dE" = ( -/obj/structure/closet/crate/freezer/rations, -/obj/item/reagent_containers/food/snacks/liquidfood, -/turf/simulated/floor/airless/ceiling, -/area/slavers_base/med) -"dF" = ( -/obj/structure/closet/crate/freezer/rations, -/turf/simulated/floor/airless/ceiling, -/area/slavers_base/med) -"dG" = ( -/obj/machinery/atmospherics/pipe/manifold/visible/yellow{ - dir = 8 - }, -/turf/simulated/floor/airless/ceiling, -/area/slavers_base/powatm) -"dH" = ( -/obj/machinery/atmospherics/pipe/manifold4w/visible/yellow, -/turf/simulated/floor/airless/ceiling, -/area/slavers_base/powatm) -"dI" = ( -/obj/machinery/atmospherics/pipe/manifold/visible/yellow, -/turf/simulated/floor/airless/ceiling, -/area/slavers_base/powatm) -"dJ" = ( -/obj/machinery/atmospherics/pipe/simple/visible/yellow{ - dir = 10 - }, -/turf/simulated/floor/airless/ceiling, -/area/slavers_base/powatm) -"dK" = ( -/obj/machinery/portable_atmospherics/canister/nitrogen, -/turf/simulated/floor/airless/ceiling, -/area/slavers_base/powatm) -"dL" = ( -/turf/simulated/floor/tiled/airless, -/area/slavers_base/secwing) -"dM" = ( -/obj/structure/cable/green{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/turf/simulated/floor/tiled, -/area/slavers_base/secwing) -"dN" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled, -/area/slavers_base/secwing) -"dO" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/decal/cleanable/generic, -/turf/simulated/floor/tiled, -/area/slavers_base/secwing) -"dP" = ( -/obj/machinery/power/terminal{ - dir = 1 - }, -/obj/structure/cable/green{ - d2 = 4; - icon_state = "0-4" - }, -/obj/structure/cable/green{ - d2 = 8; - icon_state = "0-8" - }, -/turf/simulated/floor/tiled, -/area/slavers_base/secwing) -"dQ" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/cable{ - icon_state = "2-9" - }, -/turf/simulated/floor/tiled, -/area/slavers_base/secwing) -"dR" = ( -/obj/structure/table/steel, -/obj/item/storage/box/ammo/stunshells, -/obj/item/melee/baton, -/obj/machinery/power/terminal{ - dir = 1 - }, -/obj/structure/cable/green{ - d2 = 8; - icon_state = "0-8" - }, -/turf/simulated/floor/tiled, -/area/slavers_base/secwing) -"dS" = ( -/obj/effect/wallframe_spawn/reinforced, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/airless, -/area/slavers_base/secwing) -"dT" = ( -/obj/effect/decal/cleanable/dirt, -/obj/item/ammo_casing/shotgun/beanbag, -/obj/structure/cable{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/effect/decal/cleanable/dirt, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/airless, -/area/slavers_base/hallway) -"dU" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/obj/structure/cable{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/turf/simulated/floor/tiled/airless, -/area/slavers_base/hallway) -"dV" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 1 - }, -/turf/simulated/floor/tiled/airless, -/area/slavers_base/med) -"dW" = ( -/obj/effect/decal/cleanable/dirt, -/obj/random/junk, -/turf/simulated/floor/tiled/airless, -/area/slavers_base/med) -"dX" = ( -/obj/effect/decal/cleanable/dirt, -/obj/random/medical/lite, -/turf/simulated/floor/tiled/airless, -/area/slavers_base/med) -"dY" = ( -/obj/structure/bed, -/obj/item/remains/human, -/turf/simulated/floor/tiled/airless, -/area/slavers_base/med) -"dZ" = ( -/obj/item/reagent_containers/food/snacks/liquidfood, -/turf/simulated/floor/airless/ceiling, -/area/slavers_base/med) -"ea" = ( -/obj/structure/closet/crate/trashcart, -/turf/simulated/floor/airless/ceiling, -/area/slavers_base/med) -"eb" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 10; - icon_state = "warning" - }, -/turf/simulated/floor/airless/ceiling, -/area/slavers_base/hangar) -"ec" = ( -/obj/effect/floor_decal/industrial/warning, -/turf/simulated/floor/airless/ceiling, -/area/slavers_base/hangar) -"ed" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 6 - }, -/turf/simulated/floor/airless/ceiling, -/area/slavers_base/hangar) -"ee" = ( -/obj/machinery/atmospherics/binary/pump{ - dir = 1; - name = "waste pump" - }, -/turf/simulated/floor/airless/ceiling, -/area/slavers_base/powatm) -"ef" = ( -/obj/machinery/atmospherics/binary/pump, -/turf/simulated/floor/airless/ceiling, -/area/slavers_base/powatm) -"eg" = ( -/obj/machinery/atmospherics/pipe/simple/visible/yellow, -/turf/simulated/floor/airless/ceiling, -/area/slavers_base/powatm) -"eh" = ( -/obj/random/junk, -/obj/effect/decal/cleanable/generic, -/turf/simulated/floor/tiled/airless, -/area/slavers_base/secwing) -"ei" = ( -/obj/random/junk, -/turf/simulated/floor/tiled/airless, -/area/slavers_base/secwing) -"ej" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/turf/simulated/floor/tiled, -/area/slavers_base/secwing) -"ek" = ( -/mob/living/simple_animal/hostile/abolition_extremist, -/turf/simulated/floor/tiled, -/area/slavers_base/secwing) -"el" = ( -/obj/effect/landmark/corpse/slavers_base/slaver6, -/obj/effect/decal/cleanable/blood, -/turf/simulated/floor/tiled, -/area/slavers_base/secwing) -"em" = ( -/obj/random/junk, -/obj/effect/decal/cleanable/blood, -/turf/simulated/floor/tiled, -/area/slavers_base/secwing) -"en" = ( -/obj/effect/decal/cleanable/blood, -/turf/simulated/floor/tiled, -/area/slavers_base/secwing) -"eo" = ( -/obj/structure/bed/chair/office/dark{ - dir = 4 - }, -/obj/effect/decal/cleanable/blood, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled, -/area/slavers_base/secwing) -"ep" = ( -/obj/structure/table/steel, -/obj/item/device/flash, -/obj/item/device/radio, -/obj/item/paper/spacer{ - info = "If this fuck from A-3 keeps thinking he's better then piece of meat, throw him to hangar and show how little pressure turns diamonds into shit."; - name = "Note" - }, -/turf/simulated/floor/tiled, -/area/slavers_base/secwing) -"eq" = ( -/obj/effect/wallframe_spawn/reinforced, -/turf/simulated/floor/tiled/airless, -/area/slavers_base/secwing) -"er" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/airless, -/area/slavers_base/hallway) -"es" = ( -/obj/item/ammo_casing/shotgun/beanbag, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/airless, -/area/slavers_base/hallway) -"et" = ( -/obj/structure/window/basic{ - dir = 1 - }, -/obj/item/clothing/gloves/latex, -/turf/simulated/floor/tiled/airless, -/area/slavers_base/med) -"eu" = ( -/obj/structure/window/basic{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/obj/effect/landmark/corpse/slavers_base/slaver5, -/obj/effect/decal/cleanable/blood, -/turf/simulated/floor/tiled/airless, -/area/slavers_base/med) -"ev" = ( -/obj/structure/window/basic{ - dir = 1 - }, -/turf/simulated/floor/tiled/airless, -/area/slavers_base/med) -"ew" = ( -/obj/structure/window/basic{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/airless, -/area/slavers_base/med) -"ex" = ( -/obj/effect/decal/cleanable/dirt, -/obj/item/ammo_casing/shotgun/beanbag, -/turf/simulated/floor/tiled/airless, -/area/slavers_base/med) -"ey" = ( -/turf/simulated/floor/tiled/airless, -/area/slavers_base/med) -"ez" = ( -/obj/structure/bed, -/obj/item/handcuffs, -/turf/simulated/floor/tiled/airless, -/area/slavers_base/med) -"eA" = ( -/obj/item/beartrap, -/turf/simulated/floor/airless/ceiling, -/area/slavers_base/med) -"eB" = ( -/obj/item/mop, -/obj/structure/mopbucket, -/turf/simulated/floor/airless/ceiling, -/area/slavers_base/med) -"eC" = ( -/obj/machinery/atmospherics/unary/vent_pump/high_volume, -/turf/simulated/floor/airless/ceiling, -/area/slavers_base/hangar) -"eD" = ( -/obj/machinery/atmospherics/portables_connector{ - dir = 1 - }, -/obj/machinery/light/small{ - dir = 8 - }, -/turf/simulated/floor/airless/ceiling, -/area/slavers_base/powatm) -"eE" = ( -/obj/machinery/atmospherics/portables_connector{ - dir = 1 - }, -/turf/simulated/floor/airless/ceiling, -/area/slavers_base/powatm) -"eF" = ( -/obj/random/tool, -/turf/simulated/floor/airless/ceiling, -/area/slavers_base/powatm) -"eG" = ( -/obj/machinery/atmospherics/binary/pump{ - dir = 4 - }, -/turf/simulated/floor/airless/ceiling, -/area/slavers_base/powatm) -"eH" = ( -/obj/machinery/atmospherics/pipe/simple/visible/yellow{ - dir = 4 - }, -/turf/simulated/floor/airless/ceiling, -/area/slavers_base/powatm) -"eI" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/universal{ - dir = 4 - }, -/turf/simulated/floor/airless/ceiling, -/area/slavers_base/powatm) -"eJ" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/turf/simulated/floor/airless/ceiling, -/area/slavers_base/powatm) -"eK" = ( -/obj/machinery/light/small{ - dir = 4 - }, -/turf/simulated/floor/airless/ceiling, -/area/slavers_base/powatm) -"eL" = ( -/obj/structure/cable/green{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 - }, -/turf/simulated/floor/tiled/airless, -/area/slavers_base/secwing) -"eM" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/tiled/airless, -/area/slavers_base/secwing) -"eN" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/door/airlock{ - name = "Slave hold hallway" - }, -/turf/simulated/floor/tiled/airless, -/area/slavers_base/secwing) -"eO" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/slavers_base/secwing) -"eP" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 8 - }, -/turf/simulated/floor/tiled, -/area/slavers_base/secwing) -"eQ" = ( -/obj/machinery/computer/modular{ - name = "Cameras console" - }, -/turf/simulated/floor/tiled, -/area/slavers_base/secwing) -"eR" = ( -/obj/machinery/computer/modular{ - name = "Riot control console" - }, -/obj/machinery/power/apc{ - name = "Slavers security wing"; - pixel_y = -24 - }, -/obj/structure/cable, -/turf/simulated/floor/tiled, -/area/slavers_base/secwing) -"eS" = ( -/obj/structure/table/steel, -/obj/item/handcuffs, -/turf/simulated/floor/tiled, -/area/slavers_base/secwing) -"eT" = ( -/obj/item/gun/projectile/shotgun/pump, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/airless, -/area/slavers_base/hallway) -"eU" = ( -/obj/machinery/optable, -/obj/item/scalpel, -/obj/effect/decal/cleanable/blood, -/obj/machinery/light, -/turf/simulated/floor/tiled/airless, -/area/slavers_base/med) -"eV" = ( -/obj/structure/window/basic{ - dir = 4 - }, -/obj/structure/table/standard, -/obj/item/implanter, -/obj/item/implantcase/tracking, -/obj/item/surgicaldrill, -/obj/effect/decal/cleanable/blood, -/turf/simulated/floor/tiled/airless, -/area/slavers_base/med) -"eW" = ( -/obj/machinery/optable, -/obj/effect/decal/cleanable/blood, -/obj/item/screwdriver, -/obj/machinery/light, -/turf/simulated/floor/tiled/airless, -/area/slavers_base/med) -"eX" = ( -/obj/structure/window/basic{ - dir = 4 - }, -/obj/structure/table/standard, -/obj/item/implantpad, -/obj/item/reagent_containers/pill/spaceacillin, -/turf/simulated/floor/tiled/airless, -/area/slavers_base/med) -"eY" = ( -/obj/structure/table/standard, -/obj/item/storage/firstaid/empty, -/obj/item/handcuffs, -/obj/item/melee/baton, -/turf/simulated/floor/tiled/airless, -/area/slavers_base/med) -"eZ" = ( -/obj/structure/table/standard, -/obj/item/storage/firstaid/o2, -/obj/item/folder/white, -/obj/item/paper/spacer{ - info = "Seems they don't really look over my shoulder anymore. We have now maybe a dozen of them with inactive implants. Hope they will pick right moment to flip the lid. I'll kill few bastards myself soon as I have a chance."; - name = "Note" - }, -/obj/item/pen, -/turf/simulated/floor/tiled/airless, -/area/slavers_base/med) -"fa" = ( -/obj/structure/table/standard, -/obj/item/storage/firstaid/regular, -/obj/item/material/hatchet, -/turf/simulated/floor/tiled/airless, -/area/slavers_base/med) -"fb" = ( -/obj/item/roller, -/turf/simulated/floor/tiled/airless, -/area/slavers_base/med) -"fc" = ( -/obj/structure/bed, -/turf/simulated/floor/tiled/airless, -/area/slavers_base/med) -"fd" = ( -/obj/structure/table/standard, -/obj/item/storage/box/handcuffs, -/obj/item/storage/box/handcuffs, -/turf/simulated/floor/airless/ceiling, -/area/slavers_base/med) -"fe" = ( -/obj/structure/table/standard, -/obj/item/storage/box/bodybags, -/turf/simulated/floor/airless/ceiling, -/area/slavers_base/med) -"ff" = ( -/obj/structure/table/standard, -/turf/simulated/floor/airless/ceiling, -/area/slavers_base/med) -"fg" = ( -/obj/structure/reagent_dispensers/water_cooler, -/turf/simulated/floor/airless/ceiling, -/area/slavers_base/med) -"fh" = ( -/obj/machinery/atmospherics/pipe/manifold/visible/cyan{ - dir = 8 - }, -/turf/simulated/floor/airless/ceiling, -/area/slavers_base/hangar) -"fi" = ( -/obj/machinery/atmospherics/pipe/simple/visible/cyan{ - dir = 9 - }, -/obj/structure/cable{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/turf/simulated/floor/airless/ceiling, -/area/slavers_base/hangar) -"fj" = ( -/obj/structure/cable{ - d2 = 8; - icon_state = "0-8" - }, -/obj/machinery/power/apc{ - name = "Slavers hangar"; - pixel_y = -24 - }, -/turf/simulated/floor/airless/ceiling, -/area/slavers_base/hangar) -"fk" = ( -/obj/machinery/light/small, -/turf/simulated/floor/airless/ceiling, -/area/slavers_base/hangar) -"fl" = ( -/obj/effect/decal/cleanable/generic, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 4; - level = 2 - }, -/turf/simulated/floor/airless/ceiling, -/area/slavers_base/powatm) -"fm" = ( -/obj/effect/decal/cleanable/generic, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/airless/ceiling, -/area/slavers_base/powatm) -"fn" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/door/airlock{ - name = "Slave hold hallway" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/airless, -/area/slavers_base/secwing) -"fo" = ( -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/airless, -/area/slavers_base/hallway) -"fp" = ( -/obj/machinery/door/airlock/external, -/obj/machinery/atmospherics/pipe/simple/visible/cyan, -/turf/simulated/floor/airless/ceiling, -/area/slavers_base/hangar) -"fq" = ( -/obj/machinery/door/airlock/external, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/airless/ceiling, -/area/slavers_base/hangar) -"fr" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/obj/effect/decal/cleanable/generic, -/turf/simulated/floor/airless/ceiling, -/area/slavers_base/powatm) -"fs" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/turf/simulated/floor/airless/ceiling, -/area/slavers_base/powatm) -"ft" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/door/airlock{ - name = "Power/atmos" - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/airless/ceiling, -/area/slavers_base/hallway) -"fu" = ( -/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply, -/obj/structure/cable/green, -/obj/structure/cable/green{ - d2 = 8; - icon_state = "0-8" - }, -/obj/structure/cable/green{ - d2 = 2; - icon_state = "0-2" - }, -/obj/structure/cable/green{ - d2 = 4; - icon_state = "0-4" - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/airless, -/area/slavers_base/hallway) -"fv" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/airless, -/area/slavers_base/hallway) -"fw" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/door/airlock{ - name = "West hallway" - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/airless, -/area/slavers_base/hallway) -"fx" = ( -/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/airless, -/area/slavers_base/hallway) -"fy" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/airless, -/area/slavers_base/hallway) -"fz" = ( -/obj/machinery/door/airlock{ - name = "Transit area" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/airless, -/area/slavers_base/maint) -"fA" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/airless/ceiling, -/area/slavers_base/maint) -"fB" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/power/terminal, -/obj/structure/cable/green{ - d2 = 8; - icon_state = "0-8" - }, -/turf/simulated/floor/airless/ceiling, -/area/slavers_base/maint) -"fC" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/airless/ceiling, -/area/slavers_base/maint) -"fD" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/light/small{ - dir = 1 - }, -/turf/simulated/floor/airless/ceiling, -/area/slavers_base/maint) -"fE" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/universal{ - dir = 4 - }, -/turf/simulated/floor/airless/ceiling, -/area/slavers_base/maint) -"fF" = ( -/obj/machinery/atmospherics/binary/pump{ - dir = 4 - }, -/obj/machinery/light/small{ - dir = 1 - }, -/turf/simulated/floor/airless/ceiling, -/area/slavers_base/maint) -"fG" = ( -/obj/machinery/atmospherics/pipe/simple/visible/cyan{ - dir = 4 - }, -/turf/simulated/floor/airless/ceiling, -/area/slavers_base/maint) -"fH" = ( -/obj/machinery/atmospherics/pipe/simple/visible/cyan{ - dir = 9 - }, -/turf/simulated/floor/airless/ceiling, -/area/slavers_base/maint) -"fI" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/airless/ceiling, -/area/slavers_base/maint) -"fJ" = ( -/turf/simulated/wall, -/area/slavers_base/maint) -"fK" = ( -/obj/machinery/atmospherics/unary/tank/carbon_dioxide, -/turf/simulated/floor/airless/ceiling, -/area/slavers_base/powatm) -"fL" = ( -/obj/machinery/atmospherics/pipe/simple/visible/black{ - dir = 6 - }, -/turf/simulated/floor/airless/ceiling, -/area/slavers_base/powatm) -"fM" = ( -/obj/machinery/atmospherics/pipe/simple/visible/yellow, -/obj/machinery/atmospherics/pipe/simple/visible/black{ - dir = 4 - }, -/turf/simulated/floor/airless/ceiling, -/area/slavers_base/powatm) -"fN" = ( -/obj/machinery/atmospherics/pipe/simple/visible/black{ - dir = 10 - }, -/turf/simulated/floor/airless/ceiling, -/area/slavers_base/powatm) -"fO" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 4 - }, -/turf/simulated/floor/airless/ceiling, -/area/slavers_base/powatm) -"fP" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/airless/ceiling, -/area/slavers_base/powatm) -"fQ" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/airless/ceiling, -/area/slavers_base/powatm) -"fR" = ( -/obj/machinery/door/airlock{ - name = "Power/atmos" - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/airless/ceiling, -/area/slavers_base/hallway) -"fS" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/airless, -/area/slavers_base/hallway) -"fT" = ( -/obj/item/wrench, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/airless, -/area/slavers_base/hallway) -"fU" = ( -/obj/machinery/light, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/airless, -/area/slavers_base/hallway) -"fV" = ( -/obj/machinery/door/airlock{ - name = "West hallway" - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/airless, -/area/slavers_base/hallway) -"fW" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/airless, -/area/slavers_base/hallway) -"fX" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/turf/simulated/floor/airless/ceiling, -/area/slavers_base/maint) -"fY" = ( -/obj/structure/cable{ - d2 = 8; - icon_state = "0-8" - }, -/obj/structure/cable{ - d2 = 4; - icon_state = "0-4" - }, -/obj/machinery/power/smes/buildable, -/turf/simulated/floor/airless/ceiling, -/area/slavers_base/maint) -"fZ" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/airless/ceiling, -/area/slavers_base/maint) -"ga" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/turf/simulated/floor/airless/ceiling, -/area/slavers_base/maint) -"gb" = ( -/obj/machinery/atmospherics/pipe/manifold/visible/black{ - dir = 8 - }, -/turf/simulated/floor/airless/ceiling, -/area/slavers_base/powatm) -"gc" = ( -/obj/machinery/atmospherics/pipe/manifold/visible/black, -/turf/simulated/floor/airless/ceiling, -/area/slavers_base/powatm) -"gd" = ( -/obj/machinery/atmospherics/pipe/simple/visible/black{ - dir = 4 - }, -/turf/simulated/floor/airless/ceiling, -/area/slavers_base/powatm) -"ge" = ( -/obj/machinery/atmospherics/omni/filter{ - dir = 8 - }, -/turf/simulated/floor/airless/ceiling, -/area/slavers_base/powatm) -"gf" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/universal{ - dir = 4 - }, -/obj/effect/decal/cleanable/generic, -/turf/simulated/floor/airless/ceiling, -/area/slavers_base/powatm) -"gg" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/obj/structure/cable{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/turf/simulated/floor/airless/ceiling, -/area/slavers_base/powatm) -"gh" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/cable{ - d2 = 8; - icon_state = "0-8" - }, -/obj/machinery/power/apc{ - dir = 4; - name = "Slavers atmos and power room"; - pixel_x = 24 - }, -/turf/simulated/floor/airless/ceiling, -/area/slavers_base/powatm) -"gi" = ( -/turf/simulated/wall, -/area/slavers_base/dorms) -"gj" = ( -/obj/machinery/door/airlock{ - name = "Mess" - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/airless, -/area/slavers_base/dorms) -"gk" = ( -/obj/machinery/door/airlock{ - name = "Southern hallway" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/airless, -/area/slavers_base/hallway) -"gl" = ( -/obj/machinery/door/airlock{ - name = "Southern hallway" - }, -/turf/simulated/floor/tiled/airless, -/area/slavers_base/hallway) -"gm" = ( -/obj/machinery/door/airlock{ - name = "Slave trade area" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/airless/ceiling, -/area/slavers_base/maint) -"gn" = ( -/obj/machinery/atmospherics/binary/pump, -/obj/machinery/light/small{ - dir = 8 - }, -/turf/simulated/floor/airless/ceiling, -/area/slavers_base/powatm) -"go" = ( -/obj/machinery/portable_atmospherics/canister, -/turf/simulated/floor/airless/ceiling, -/area/slavers_base/powatm) -"gp" = ( -/obj/item/crowbar, -/turf/simulated/floor/airless/ceiling, -/area/slavers_base/powatm) -"gq" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/airless/ceiling, -/area/slavers_base/powatm) -"gr" = ( -/obj/structure/table/steel, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/item/stock_parts/circuitboard/broken, -/obj/item/contraband/poster, -/obj/item/device/radio, -/obj/machinery/light/small{ - dir = 4 - }, -/turf/simulated/floor/airless/ceiling, -/area/slavers_base/powatm) -"gs" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled, -/area/slavers_base/dorms) -"gt" = ( -/turf/simulated/floor/tiled/airless, -/area/slavers_base/dorms) -"gu" = ( -/obj/machinery/vending/wallmed2{ - pixel_y = 30 - }, -/obj/structure/table/standard, -/obj/random/cash, -/turf/simulated/floor/tiled/airless, -/area/slavers_base/dorms) -"gv" = ( -/obj/structure/bed, -/obj/machinery/light{ - dir = 1 - }, -/turf/simulated/floor/tiled/airless, -/area/slavers_base/dorms) -"gw" = ( -/obj/structure/closet, -/obj/random/smokes, -/obj/random/loot, -/obj/random/contraband, -/turf/simulated/floor/tiled/airless, -/area/slavers_base/dorms) -"gx" = ( -/obj/structure/table/standard, -/obj/random/coin, -/turf/simulated/floor/tiled/airless, -/area/slavers_base/dorms) -"gy" = ( -/obj/structure/bed, -/obj/random/plushie, -/turf/simulated/floor/tiled/airless, -/area/slavers_base/dorms) -"gz" = ( -/obj/structure/closet, -/obj/random/smokes, -/obj/random/loot, -/turf/simulated/floor/tiled/airless, -/area/slavers_base/dorms) -"gA" = ( -/obj/structure/table/standard, -/turf/simulated/floor/tiled/airless, -/area/slavers_base/dorms) -"gB" = ( -/obj/structure/closet, -/obj/random/loot, -/turf/simulated/floor/tiled/airless, -/area/slavers_base/dorms) -"gC" = ( -/obj/structure/table/standard, -/obj/random/contraband, -/turf/simulated/floor/tiled/airless, -/area/slavers_base/dorms) -"gD" = ( -/obj/structure/bed, -/turf/simulated/floor/tiled/airless, -/area/slavers_base/dorms) -"gE" = ( -/obj/structure/closet, -/obj/random/smokes, -/obj/random/cash, -/turf/simulated/floor/tiled/airless, -/area/slavers_base/dorms) -"gF" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/airless, -/area/slavers_base/hallway) -"gG" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 8 - }, -/turf/simulated/floor/tiled/airless, -/area/slavers_base/hallway) -"gH" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/airless/ceiling, -/area/slavers_base/maint) -"gI" = ( -/turf/simulated/floor/airless/ceiling, -/area/slavers_base/maint) -"gJ" = ( -/obj/machinery/light/small{ - dir = 1 - }, -/turf/simulated/floor/airless/ceiling, -/area/slavers_base/maint) -"gK" = ( -/obj/machinery/light/small{ - dir = 1 - }, -/obj/effect/decal/cleanable/generic, -/turf/simulated/floor/airless/ceiling, -/area/slavers_base/maint) -"gL" = ( -/obj/machinery/atmospherics/portables_connector{ - dir = 1 - }, -/obj/machinery/portable_atmospherics/canister, -/turf/simulated/floor/airless/ceiling, -/area/slavers_base/powatm) -"gM" = ( -/obj/structure/table/steel, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/item/storage/toolbox/mechanical, -/turf/simulated/floor/airless/ceiling, -/area/slavers_base/powatm) -"gN" = ( -/obj/random/junk, -/turf/simulated/floor/tiled/airless, -/area/slavers_base/dorms) -"gO" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 8 - }, -/obj/structure/cable, -/obj/structure/cable{ - d2 = 2; - icon_state = "0-2" - }, -/obj/structure/cable{ - d2 = 4; - icon_state = "0-4" - }, -/turf/simulated/floor/airless/ceiling, -/area/slavers_base/maint) -"gP" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/airless/ceiling, -/area/slavers_base/maint) -"gQ" = ( -/obj/random/junk, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable{ - d2 = 8; - icon_state = "0-8" - }, -/obj/machinery/power/apc{ - name = "Slavers Maintenance"; - pixel_y = -24 - }, -/turf/simulated/floor/airless/ceiling, -/area/slavers_base/maint) -"gR" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/airless/ceiling, -/area/slavers_base/maint) -"gS" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/effect/decal/cleanable/generic, -/turf/simulated/floor/airless/ceiling, -/area/slavers_base/maint) -"gT" = ( -/obj/machinery/door/airlock{ - name = "Exchange tunnel" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/airless/ceiling, -/area/slavers_base/maint) -"gU" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/turf/simulated/floor/airless/ceiling, -/area/slavers_base/maint) -"gV" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 8 - }, -/turf/simulated/floor/airless/ceiling, -/area/slavers_base/maint) -"gW" = ( -/obj/machinery/floodlight, -/turf/simulated/floor/airless/ceiling, -/area/slavers_base/powatm) -"gX" = ( -/obj/structure/table/steel, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/item/stack/material/phoron{ - amount = 25 - }, -/obj/item/stack/material/phoron{ - amount = 25 - }, -/turf/simulated/floor/airless/ceiling, -/area/slavers_base/powatm) -"gY" = ( -/obj/machinery/light{ - dir = 8 - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled, -/area/slavers_base/dorms) -"gZ" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/turf/simulated/floor/tiled/airless, -/area/slavers_base/dorms) -"ha" = ( -/obj/effect/decal/cleanable/generic, -/turf/simulated/floor/tiled/airless, -/area/slavers_base/dorms) -"hb" = ( -/obj/machinery/light{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/airless, -/area/slavers_base/hallway) -"hc" = ( -/obj/machinery/light{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/airless/ceiling, -/area/slavers_base/maint) -"hd" = ( -/turf/simulated/wall, -/area/slavers_base/demo) -"he" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 1 - }, -/turf/simulated/floor/airless/ceiling, -/area/slavers_base/maint) -"hf" = ( -/obj/machinery/light/small{ - dir = 4; - pixel_y = 8 - }, -/turf/simulated/floor/airless/ceiling, -/area/slavers_base/maint) -"hg" = ( -/obj/item/coilgun_assembly, -/turf/simulated/floor/airless/ceiling, -/area/slavers_base/powatm) -"hh" = ( -/obj/random/junk, -/turf/simulated/floor/airless/ceiling, -/area/slavers_base/powatm) -"hi" = ( -/obj/structure/table/steel, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/item/stack/material/phoron{ - amount = 25 - }, -/turf/simulated/floor/airless/ceiling, -/area/slavers_base/powatm) -"hj" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/airless, -/area/slavers_base/dorms) -"hk" = ( -/obj/structure/table/standard, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 8 - }, -/turf/simulated/floor/tiled/airless, -/area/slavers_base/dorms) -"hl" = ( -/obj/structure/bed, -/obj/item/device/radio, -/turf/simulated/floor/tiled/airless, -/area/slavers_base/dorms) -"hm" = ( -/obj/structure/closet, -/obj/random/projectile, -/obj/random/loot, -/turf/simulated/floor/tiled/airless, -/area/slavers_base/dorms) -"hn" = ( -/obj/structure/table/standard, -/obj/random/loot, -/turf/simulated/floor/tiled/airless, -/area/slavers_base/dorms) -"ho" = ( -/obj/structure/table/standard, -/obj/random/gloves, -/turf/simulated/floor/tiled/airless, -/area/slavers_base/dorms) -"hp" = ( -/obj/structure/closet, -/obj/random/loot, -/obj/random/contraband, -/turf/simulated/floor/tiled/airless, -/area/slavers_base/dorms) -"hq" = ( -/obj/structure/closet, -/obj/random/projectile, -/obj/random/ammo, -/turf/simulated/floor/tiled/airless, -/area/slavers_base/dorms) -"hr" = ( -/obj/structure/safe, -/turf/simulated/floor/airless/ceiling, -/area/slavers_base/demo) -"hs" = ( -/obj/machinery/light{ - dir = 1 - }, -/obj/structure/safe, -/obj/item/storage/bag/cash, -/turf/simulated/floor/airless/ceiling, -/area/slavers_base/demo) -"ht" = ( -/obj/structure/safe, -/obj/item/storage/bag/cash, -/turf/simulated/floor/airless/ceiling, -/area/slavers_base/demo) -"hu" = ( -/obj/machinery/light{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 - }, -/turf/simulated/floor/tiled/airless, -/area/slavers_base/demo) -"hv" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 8 - }, -/turf/simulated/floor/tiled/airless, -/area/slavers_base/demo) -"hw" = ( -/turf/simulated/floor/tiled/airless, -/area/slavers_base/demo) -"hx" = ( -/obj/machinery/light{ - dir = 1 - }, -/turf/simulated/floor/tiled/airless, -/area/slavers_base/demo) -"hy" = ( -/obj/random/junk, -/turf/simulated/floor/airless/ceiling, -/area/slavers_base/maint) -"hz" = ( -/obj/machinery/vending/engineering{ - req_access = list() - }, -/turf/simulated/floor/airless/ceiling, -/area/slavers_base/powatm) -"hA" = ( -/obj/item/stock_parts/computer/card_slot, -/turf/simulated/floor/airless/ceiling, -/area/slavers_base/powatm) -"hB" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/turf/simulated/floor/airless/ceiling, -/area/slavers_base/powatm) -"hC" = ( -/obj/machinery/power/smes/buildable, -/turf/simulated/floor/airless/ceiling, -/area/slavers_base/powatm) -"hD" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/door/airlock{ - name = "Slave hold hallway" - }, -/turf/simulated/floor/tiled/airless, -/area/slavers_base/dorms) -"hE" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 8 - }, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/airless/ceiling, -/area/slavers_base/maint) -"hF" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/airless/ceiling, -/area/slavers_base/maint) -"hG" = ( -/obj/machinery/door/airlock{ - name = "Safe room" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/airless/ceiling, -/area/slavers_base/demo) -"hH" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/airless/ceiling, -/area/slavers_base/demo) -"hI" = ( -/obj/random/coin, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/airless/ceiling, -/area/slavers_base/demo) -"hJ" = ( -/obj/machinery/door/airlock{ - name = "Cashier room" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/airless/ceiling, -/area/slavers_base/demo) -"hK" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 - }, -/turf/simulated/floor/tiled/airless, -/area/slavers_base/demo) -"hL" = ( -/obj/structure/bed/chair{ - dir = 4 - }, -/obj/item/device/radio, -/turf/simulated/floor/tiled/airless, -/area/slavers_base/demo) -"hM" = ( -/obj/structure/table/reinforced, -/obj/random/coin, -/obj/machinery/door/blast/regular/open{ - icon_state = "pdoor0"; - id_tag = "SC BD" - }, -/turf/simulated/floor/tiled/airless, -/area/slavers_base/demo) -"hN" = ( -/obj/structure/bed/chair/comfy/beige{ - dir = 4 - }, -/turf/simulated/floor/tiled/airless, -/area/slavers_base/demo) -"hO" = ( -/obj/structure/table/woodentable, -/obj/item/device/radio, -/turf/simulated/floor/tiled/airless, -/area/slavers_base/demo) -"hP" = ( -/obj/structure/table/woodentable, -/obj/item/storage/secure/briefcase/money, -/obj/random/cash, -/obj/random/cash, -/obj/random/cash, -/turf/simulated/floor/tiled/airless, -/area/slavers_base/demo) -"hQ" = ( -/obj/structure/bed/chair/comfy/beige{ - dir = 8 - }, -/turf/simulated/floor/tiled/airless, -/area/slavers_base/demo) -"hR" = ( -/obj/machinery/power/terminal{ - dir = 1 - }, -/obj/structure/cable/green{ - d2 = 2; - icon_state = "0-2" - }, -/turf/simulated/floor/airless/ceiling, -/area/slavers_base/powatm) -"hS" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/turf/simulated/floor/tiled, -/area/slavers_base/dorms) -"hT" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/slavers_base/dorms) -"hU" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, -/turf/simulated/floor/tiled, -/area/slavers_base/dorms) -"hV" = ( -/obj/machinery/light{ - dir = 1 - }, -/obj/machinery/vending/dinnerware, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/slavers_base/dorms) -"hW" = ( -/obj/machinery/cooker/oven, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/turf/simulated/floor/tiled, -/area/slavers_base/dorms) -"hX" = ( -/obj/structure/table/standard, -/obj/machinery/microwave, -/turf/simulated/floor/tiled, -/area/slavers_base/dorms) -"hY" = ( -/obj/structure/table/standard, -/obj/random/snack, -/turf/simulated/floor/tiled, -/area/slavers_base/dorms) -"hZ" = ( -/obj/structure/table/standard, -/turf/simulated/floor/tiled, -/area/slavers_base/dorms) -"ia" = ( -/obj/structure/table/standard, -/obj/machinery/light{ - dir = 1 - }, -/obj/item/trash/plate, -/turf/simulated/floor/tiled, -/area/slavers_base/dorms) -"ib" = ( -/obj/structure/closet/secure_closet/freezer/fridge, -/turf/simulated/floor/tiled, -/area/slavers_base/dorms) -"ic" = ( -/turf/simulated/floor/tiled, -/area/slavers_base/dorms) -"id" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/generic, -/turf/simulated/floor/tiled/airless, -/area/slavers_base/hallway) -"ie" = ( -/obj/structure/closet/secure_closet/guncabinet, -/obj/random/projectile, -/obj/random/projectile, -/turf/simulated/floor/airless/ceiling, -/area/slavers_base/demo) -"if" = ( -/obj/structure/closet/secure_closet/guncabinet, -/obj/random/projectile, -/turf/simulated/floor/airless/ceiling, -/area/slavers_base/demo) -"ig" = ( -/obj/random/coin, -/turf/simulated/floor/airless/ceiling, -/area/slavers_base/demo) -"ih" = ( -/turf/simulated/floor/airless/ceiling, -/area/slavers_base/demo) -"ii" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 1 - }, -/turf/simulated/floor/tiled/airless, -/area/slavers_base/demo) -"ij" = ( -/obj/structure/table/woodentable, -/obj/item/storage/bag/cash, -/turf/simulated/floor/tiled/airless, -/area/slavers_base/demo) -"ik" = ( -/obj/structure/table/woodentable, -/obj/random/cash, -/turf/simulated/floor/tiled/airless, -/area/slavers_base/demo) -"il" = ( -/obj/structure/ore_box, -/turf/simulated/floor/airless/ceiling, -/area/slavers_base/powatm) -"im" = ( -/obj/structure/ore_box, -/obj/item/stack/material/phoron{ - amount = 25 - }, -/obj/item/stack/material/phoron{ - amount = 25 - }, -/obj/item/stack/material/phoron{ - amount = 25 - }, -/turf/simulated/floor/airless/ceiling, -/area/slavers_base/powatm) -"in" = ( -/obj/structure/closet/crate, -/obj/item/stack/material/phoron{ - amount = 25 - }, -/obj/item/stack/material/phoron{ - amount = 25 - }, -/obj/item/stack/material/phoron{ - amount = 25 - }, -/obj/item/stack/material/phoron{ - amount = 25 - }, -/obj/item/stack/material/phoron{ - amount = 25 - }, -/obj/item/stack/material/phoron{ - amount = 25 - }, -/turf/simulated/floor/airless/ceiling, -/area/slavers_base/powatm) -"io" = ( -/obj/structure/closet/crate, -/obj/item/stack/material/phoron{ - amount = 25 - }, -/obj/item/stack/material/phoron{ - amount = 25 - }, -/obj/item/stack/material/phoron{ - amount = 25 - }, -/obj/item/stack/material/phoron{ - amount = 25 - }, -/obj/item/stack/material/phoron{ - amount = 25 - }, -/obj/machinery/light/small, -/turf/simulated/floor/airless/ceiling, -/area/slavers_base/powatm) -"ip" = ( -/obj/structure/closet/crate, -/obj/item/stack/material/phoron{ - amount = 25 - }, -/obj/item/stack/material/phoron{ - amount = 25 - }, -/obj/item/stack/material/phoron{ - amount = 25 - }, -/obj/item/stack/material/phoron{ - amount = 25 - }, -/turf/simulated/floor/airless/ceiling, -/area/slavers_base/powatm) -"iq" = ( -/obj/machinery/power/port_gen/pacman/super, -/obj/structure/cable/green{ - d2 = 4; - icon_state = "0-4" - }, -/turf/simulated/floor/airless/ceiling, -/area/slavers_base/powatm) -"ir" = ( -/obj/machinery/power/port_gen/pacman/super, -/obj/structure/cable/green{ - d2 = 4; - icon_state = "0-4" - }, -/obj/structure/cable/green{ - d2 = 8; - icon_state = "0-8" - }, -/turf/simulated/floor/airless/ceiling, -/area/slavers_base/powatm) -"is" = ( -/obj/machinery/power/port_gen/pacman/super, -/obj/structure/cable/green{ - d2 = 4; - icon_state = "0-4" - }, -/obj/structure/cable/green{ - d2 = 8; - icon_state = "0-8" - }, -/obj/machinery/light/small, -/turf/simulated/floor/airless/ceiling, -/area/slavers_base/powatm) -"it" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/turf/simulated/floor/airless/ceiling, -/area/slavers_base/powatm) -"iu" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled, -/area/slavers_base/dorms) -"iv" = ( -/obj/effect/decal/cleanable/generic, -/turf/simulated/floor/tiled, -/area/slavers_base/dorms) -"iw" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled, -/area/slavers_base/dorms) -"ix" = ( -/obj/machinery/vending/snack, -/turf/simulated/floor/tiled, -/area/slavers_base/dorms) -"iy" = ( -/obj/structure/table/woodentable, -/obj/item/paper/spacer{ - info = "
              Contract

              This contract describes exchanging of monetary pieces for the right o? the ownership for following examples: <*> Human, age 17. Price - 1500 thalers. <*> Human, age 49. Price - 1100 thalers. <*> Unathi, age 28. Good fist fighter. Price - 2400 thalers. <*> Human, age 34. Expirienced medic. Price - 6800 thalers. Overall price: 11800 thalers
              Place for signatures"; - name = "Contract" - }, -/turf/simulated/floor/tiled/airless, -/area/slavers_base/demo) -"iz" = ( -/obj/structure/table/woodentable, -/obj/random/coin, -/obj/item/pen, -/turf/simulated/floor/tiled/airless, -/area/slavers_base/demo) -"iA" = ( -/obj/machinery/light{ - dir = 8 - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled, -/area/slavers_base/dorms) -"iB" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/obj/structure/bed/chair, -/turf/simulated/floor/tiled, -/area/slavers_base/dorms) -"iC" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/bed/chair, -/turf/simulated/floor/tiled, -/area/slavers_base/dorms) -"iD" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/obj/structure/bed/chair, -/turf/simulated/floor/tiled, -/area/slavers_base/dorms) -"iE" = ( -/mob/living/simple_animal/hostile/abolition_extremist, -/turf/simulated/floor/tiled, -/area/slavers_base/dorms) -"iF" = ( -/obj/machinery/vending/fitness, -/turf/simulated/floor/tiled, -/area/slavers_base/dorms) -"iG" = ( -/obj/random/junk, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/airless, -/area/slavers_base/hallway) -"iH" = ( -/obj/machinery/light{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/airless/ceiling, -/area/slavers_base/maint) -"iI" = ( -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/airless, -/area/slavers_base/demo) -"iJ" = ( -/obj/machinery/light{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/airless, -/area/slavers_base/demo) -"iK" = ( -/obj/item/clothing/suit/nun, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/airless, -/area/slavers_base/demo) -"iL" = ( -/obj/machinery/light{ - dir = 1 - }, -/obj/item/clothing/suit/unathi/robe, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/airless, -/area/slavers_base/demo) -"iM" = ( -/obj/structure/cable{ - d2 = 4; - icon_state = "0-4" - }, -/obj/machinery/power/apc{ - name = "Slavers Dorms"; - pixel_y = -24 - }, -/obj/structure/cable{ - d2 = 2; - icon_state = "0-2"; - pixel_y = 1 - }, -/turf/simulated/floor/tiled, -/area/slavers_base/dorms) -"iN" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled, -/area/slavers_base/dorms) -"iO" = ( -/obj/structure/table/standard, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/item/reagent_containers/food/condiment/small/peppermill, -/obj/item/reagent_containers/food/condiment/small/saltshaker{ - pixel_x = 3; - pixel_y = 10 - }, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 1 - }, -/turf/simulated/floor/tiled, -/area/slavers_base/dorms) -"iP" = ( -/obj/structure/table/standard, -/obj/random/smokes, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled, -/area/slavers_base/dorms) -"iQ" = ( -/obj/structure/table/standard, -/obj/random/drinkbottle, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled, -/area/slavers_base/dorms) -"iR" = ( -/obj/structure/table/standard, -/obj/item/trash/plate, -/obj/item/material/kitchen/utensil/fork, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled, -/area/slavers_base/dorms) -"iS" = ( -/obj/structure/table/standard, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 1 - }, -/turf/simulated/floor/tiled, -/area/slavers_base/dorms) -"iT" = ( -/obj/random/junk, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled, -/area/slavers_base/dorms) -"iU" = ( -/obj/item/material/kitchen/utensil/fork, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled, -/area/slavers_base/dorms) -"iV" = ( -/obj/machinery/vending/cola, -/obj/structure/cable{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/turf/simulated/floor/tiled, -/area/slavers_base/dorms) -"iW" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/obj/structure/cable{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/turf/simulated/floor/airless/ceiling, -/area/slavers_base/maint) -"iX" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/airless/ceiling, -/area/slavers_base/maint) -"iY" = ( -/obj/machinery/door/airlock{ - name = "Scene" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/airless, -/area/slavers_base/demo) -"iZ" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/obj/structure/cable{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 8 - }, -/turf/simulated/floor/tiled/airless, -/area/slavers_base/demo) -"ja" = ( -/obj/item/clothing/shoes/brown, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/airless, -/area/slavers_base/demo) -"jb" = ( -/obj/item/clothing/under/bluepyjamas, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/airless, -/area/slavers_base/demo) -"jc" = ( -/obj/effect/decal/cleanable/generic, -/turf/simulated/floor/tiled/airless, -/area/slavers_base/demo) -"jd" = ( -/obj/machinery/light, -/turf/simulated/floor/tiled/airless, -/area/slavers_base/demo) -"je" = ( -/obj/machinery/door/airlock{ - name = "Maintenance" - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/airless/ceiling, -/area/slavers_base/dorms) -"jf" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/wall, -/area/slavers_base/dorms) -"jg" = ( -/obj/structure/table/standard, -/obj/random/projectile, -/turf/simulated/floor/tiled, -/area/slavers_base/dorms) -"jh" = ( -/obj/structure/table/standard, -/obj/random/drinkbottle, -/turf/simulated/floor/tiled, -/area/slavers_base/dorms) -"ji" = ( -/obj/structure/table/standard, -/obj/item/trash/plate, -/obj/random/snack, -/turf/simulated/floor/tiled, -/area/slavers_base/dorms) -"jj" = ( -/obj/structure/table/standard, -/obj/item/material/kitchen/utensil/fork, -/turf/simulated/floor/tiled, -/area/slavers_base/dorms) -"jk" = ( -/obj/structure/table/standard, -/obj/random/smokes, -/turf/simulated/floor/tiled, -/area/slavers_base/dorms) -"jl" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/vending/cigarette, -/turf/simulated/floor/tiled, -/area/slavers_base/dorms) -"jm" = ( -/obj/effect/wallframe_spawn/reinforced, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/airless, -/area/slavers_base/demo) -"jn" = ( -/obj/effect/wallframe_spawn/reinforced, -/turf/simulated/floor/tiled/airless, -/area/slavers_base/demo) -"jo" = ( -/obj/machinery/door/airlock{ - name = "Private office" - }, -/turf/simulated/floor/tiled/airless, -/area/slavers_base/demo) -"jp" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/airless/ceiling, -/area/slavers_base/dorms) -"jq" = ( -/obj/structure/table/standard, -/obj/item/device/radio, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/airless/ceiling, -/area/slavers_base/dorms) -"jr" = ( -/obj/structure/bed/chair{ - dir = 1 - }, -/turf/simulated/floor/tiled, -/area/slavers_base/dorms) -"js" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled, -/area/slavers_base/dorms) -"jt" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 8 - }, -/obj/structure/cable{ - d2 = 2; - icon_state = "0-2" - }, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/power/apc{ - dir = 8; - name = "west bump"; - pixel_x = -24 - }, -/turf/simulated/floor/tiled/airless, -/area/slavers_base/hallway) -"ju" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/airless, -/area/slavers_base/hallway) -"jv" = ( -/turf/simulated/floor/tiled, -/area/slavers_base/demo) -"jw" = ( -/obj/machinery/light/small{ - dir = 1 - }, -/turf/simulated/floor/tiled, -/area/slavers_base/demo) -"jx" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled, -/area/slavers_base/demo) -"jy" = ( -/obj/structure/cable/green, -/obj/machinery/power/terminal{ - dir = 4 - }, -/turf/simulated/floor/airless/ceiling, -/area/slavers_base/dorms) -"jz" = ( -/obj/structure/cable, -/obj/machinery/power/smes/buildable, -/turf/simulated/floor/airless/ceiling, -/area/slavers_base/dorms) -"jA" = ( -/obj/effect/decal/cleanable/blood, -/turf/simulated/floor/tiled, -/area/slavers_base/dorms) -"jB" = ( -/obj/machinery/light, -/turf/simulated/floor/tiled, -/area/slavers_base/dorms) -"jC" = ( -/obj/item/paper/spacer{ - info = "We made over 200 grands for two last weeks. We should stay low-key for month or so, or we'll get our base discovered by fucking marshalls so shut your whining and relax, I'l l get you three crates of booze and some cargo to play with."; - name = "Note" - }, -/turf/simulated/floor/tiled, -/area/slavers_base/dorms) -"jD" = ( -/obj/random/snack, -/turf/simulated/floor/tiled, -/area/slavers_base/dorms) -"jE" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/turf/simulated/floor/tiled, -/area/slavers_base/dorms) -"jF" = ( -/obj/machinery/door/airlock{ - name = "Mess" - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/airless, -/area/slavers_base/dorms) -"jG" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/airless, -/area/slavers_base/hallway) -"jH" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 1 - }, -/turf/simulated/floor/tiled/airless, -/area/slavers_base/hallway) -"jI" = ( -/obj/structure/table/standard, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled, -/area/slavers_base/demo) -"jJ" = ( -/obj/structure/table/standard, -/obj/item/device/megaphone, -/turf/simulated/floor/tiled, -/area/slavers_base/demo) -"jK" = ( -/obj/structure/table/standard, -/obj/item/clothing/mask/smokable/cigarette, -/turf/simulated/floor/tiled, -/area/slavers_base/demo) -"jL" = ( -/obj/structure/table/standard, -/turf/simulated/floor/tiled, -/area/slavers_base/demo) -"jM" = ( -/obj/structure/table/standard, -/obj/item/device/scanner/health, -/turf/simulated/floor/tiled, -/area/slavers_base/demo) -"jN" = ( -/obj/structure/table/standard, -/obj/random/drinkbottle, -/turf/simulated/floor/tiled, -/area/slavers_base/demo) -"jO" = ( -/obj/structure/table/standard, -/obj/item/pen, -/turf/simulated/floor/tiled, -/area/slavers_base/demo) -"jP" = ( -/obj/machinery/door/airlock{ - name = "Restroom" - }, -/obj/effect/decal/cleanable/blood, -/turf/simulated/floor/tiled/airless, -/area/slavers_base/dorms) -"jQ" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/door/airlock{ - name = "Southern hallway" - }, -/turf/simulated/floor/tiled/airless, -/area/slavers_base/hallway) -"jR" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/turf/simulated/floor/tiled, -/area/slavers_base/demo) -"jS" = ( -/obj/structure/bed/chair{ - dir = 1 - }, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled, -/area/slavers_base/demo) -"jT" = ( -/obj/structure/bed/chair{ - dir = 1 - }, -/turf/simulated/floor/tiled, -/area/slavers_base/demo) -"jU" = ( -/obj/structure/bed/chair{ - dir = 1 - }, -/obj/item/storage/secure/briefcase/money, -/obj/random/cash, -/obj/random/cash, -/obj/random/cash, -/obj/random/cash, -/turf/simulated/floor/tiled, -/area/slavers_base/demo) -"jV" = ( -/obj/structure/bed/chair{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/slavers_base/demo) -"jW" = ( -/obj/structure/table/standard, -/obj/item/clothing/mask/smokable/cigarette/professionals, -/turf/simulated/floor/tiled, -/area/slavers_base/demo) -"jX" = ( -/obj/structure/hygiene/shower{ - dir = 4 - }, -/turf/simulated/floor/tiled/white/airless, -/area/slavers_base/dorms) -"jY" = ( -/obj/machinery/door/airlock{ - name = "Shower" - }, -/turf/simulated/floor/tiled/white/airless, -/area/slavers_base/dorms) -"jZ" = ( -/obj/effect/landmark/corpse/slavers_base/slaver3, -/obj/effect/decal/cleanable/blood, -/turf/simulated/floor/tiled/white, -/area/slavers_base/dorms) -"ka" = ( -/obj/effect/decal/cleanable/blood, -/turf/simulated/floor/tiled/white, -/area/slavers_base/dorms) -"kb" = ( -/turf/simulated/floor/tiled/white, -/area/slavers_base/dorms) -"kc" = ( -/obj/effect/landmark/corpse/slavers_base/slaver1, -/obj/effect/decal/cleanable/blood, -/turf/simulated/floor/tiled/white, -/area/slavers_base/dorms) -"kd" = ( -/obj/machinery/door/airlock{ - name = "Toilet" - }, -/turf/simulated/floor/tiled/white/airless, -/area/slavers_base/dorms) -"ke" = ( -/obj/structure/hygiene/toilet{ - dir = 8 - }, -/obj/random/junk, -/turf/simulated/floor/tiled/white/airless, -/area/slavers_base/dorms) -"kf" = ( -/turf/simulated/wall, -/area/slavers_base/hallway) -"kg" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/turf/simulated/floor/tiled/airless, -/area/slavers_base/hallway) -"kh" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled/airless, -/area/slavers_base/hallway) -"ki" = ( -/obj/machinery/door/airlock{ - name = "Slave trade area" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled/airless, -/area/slavers_base/demo) -"kj" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 8 - }, -/turf/simulated/floor/tiled, -/area/slavers_base/demo) -"kk" = ( -/mob/living/simple_animal/hostile/abolition_extremist, -/turf/simulated/floor/tiled, -/area/slavers_base/demo) -"kl" = ( -/obj/effect/decal/cleanable/generic, -/turf/simulated/floor/tiled, -/area/slavers_base/demo) -"km" = ( -/obj/machinery/light{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/slavers_base/demo) -"kn" = ( -/obj/machinery/light{ - dir = 8 - }, -/turf/simulated/floor/tiled/white, -/area/slavers_base/dorms) -"ko" = ( -/obj/machinery/light{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/slavers_base/dorms) -"kp" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/tiled/airless, -/area/slavers_base/hallway) -"kq" = ( -/turf/simulated/floor/tiled/airless, -/area/slavers_base/hallway) -"kr" = ( -/obj/machinery/door/airlock{ - name = "Slave trade area" - }, -/turf/simulated/floor/tiled/airless, -/area/slavers_base/demo) -"ks" = ( -/obj/structure/cable{ - d2 = 4; - icon_state = "0-4" - }, -/obj/machinery/power/apc{ - name = "south bump"; - pixel_y = -24 - }, -/turf/simulated/floor/tiled, -/area/slavers_base/demo) -"kt" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled, -/area/slavers_base/demo) -"ku" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/turf/simulated/floor/tiled, -/area/slavers_base/demo) -"kv" = ( -/obj/structure/table/standard, -/obj/item/storage/box/glass_extras, -/turf/simulated/floor/tiled, -/area/slavers_base/demo) -"kw" = ( -/obj/structure/table/standard, -/obj/machinery/chemical_dispenser/bar_alc, -/turf/simulated/floor/tiled, -/area/slavers_base/demo) -"kz" = ( -/mob/living/simple_animal/hostile/abolition_extremist, -/turf/simulated/floor/tiled/white, -/area/slavers_base/dorms) -"kA" = ( -/obj/machinery/door/airlock{ - name = "Customers entry" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/tiled/airless, -/area/slavers_base/hallway) -"kB" = ( -/obj/machinery/door/airlock{ - name = "Customers entry" - }, -/turf/simulated/floor/tiled/airless, -/area/slavers_base/hallway) -"kC" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 - }, -/obj/effect/decal/cleanable/generic, -/turf/simulated/floor/airless/ceiling, -/area/slavers_base/maint) -"kD" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 - }, -/turf/simulated/floor/airless/ceiling, -/area/slavers_base/maint) -"kE" = ( -/obj/machinery/door/airlock{ - name = "Exchange area" - }, -/turf/simulated/floor/airless/ceiling, -/area/slavers_base/maint) -"kF" = ( -/obj/effect/decal/cleanable/generic, -/turf/simulated/floor/airless/ceiling, -/area/slavers_base/maint) -"kG" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/effect/decal/cleanable/generic, -/turf/simulated/floor/airless/ceiling, -/area/slavers_base/maint) -"kH" = ( -/obj/machinery/light/small{ - dir = 8 - }, -/turf/simulated/floor/airless/ceiling, -/area/slavers_base/maint) -"kI" = ( -/obj/machinery/atmospherics/pipe/simple/visible/universal, -/turf/simulated/floor/airless/ceiling, -/area/slavers_base/maint) -"kJ" = ( -/obj/effect/wallframe_spawn/reinforced, -/turf/simulated/floor/airless/ceiling, -/area/slavers_base/maint) -"kK" = ( -/obj/machinery/door/airlock{ - name = "Exchange point" - }, -/turf/simulated/floor/airless/ceiling, -/area/slavers_base/maint) -"kL" = ( -/obj/machinery/atmospherics/binary/pump, -/turf/simulated/floor/airless/ceiling, -/area/slavers_base/maint) -"kM" = ( -/obj/structure/table/standard, -/obj/item/device/radio, -/turf/simulated/floor/airless/ceiling, -/area/slavers_base/maint) -"kN" = ( -/obj/structure/table/standard, -/obj/random/handgun, -/turf/simulated/floor/airless/ceiling, -/area/slavers_base/maint) -"kO" = ( -/obj/machinery/door/airlock/external, -/turf/simulated/floor/airless/ceiling, -/area/slavers_base/maint) -"kP" = ( -/obj/machinery/door/airlock/external, -/obj/machinery/atmospherics/pipe/simple/visible/cyan, -/turf/simulated/floor/airless/ceiling, -/area/slavers_base/maint) -"kQ" = ( -/obj/structure/table/standard, -/obj/random/junk, -/turf/simulated/floor/airless/ceiling, -/area/slavers_base/maint) -"kR" = ( -/obj/structure/bed/chair{ - dir = 1 - }, -/turf/simulated/floor/airless/ceiling, -/area/slavers_base/maint) -"kS" = ( -/obj/machinery/atmospherics/pipe/simple/visible/cyan, -/turf/simulated/floor/airless/ceiling, -/area/slavers_base/maint) -"kT" = ( -/obj/structure/table/standard, -/obj/random/loot, -/turf/simulated/floor/airless/ceiling, -/area/slavers_base/maint) -"kU" = ( -/obj/machinery/atmospherics/unary/vent_pump/high_volume/airlock{ - dir = 1; - id_tag = "solar_port_pump" - }, -/turf/simulated/floor/airless/ceiling, -/area/slavers_base/maint) -"kW" = ( -/obj/effect/overmap/visitable/sector/slavers_base, -/turf/space, -/area/space) -"kX" = ( -/obj/effect/shuttle_landmark/nav_slavers_base/nav5, -/turf/space, -/area/space) -"kY" = ( -/obj/effect/shuttle_landmark/nav_slavers_base/nav6, -/turf/space, -/area/space) -"lb" = ( -/obj/structure/hygiene/sink{ - pixel_y = -20 - }, -/obj/item/storage/mirror{ - pixel_y = -35 - }, -/obj/effect/landmark/corpse/slavers_base/slaver2, -/obj/effect/decal/cleanable/blood, -/turf/simulated/floor/tiled/white, -/area/slavers_base/dorms) -"mb" = ( -/obj/structure/hygiene/sink{ - pixel_y = -20 - }, -/obj/item/storage/mirror{ - pixel_y = -35 - }, -/turf/simulated/floor/tiled/white, -/area/slavers_base/dorms) - -(1,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(2,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(3,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(4,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(5,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(6,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(7,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(8,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(9,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(10,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(11,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(12,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(13,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(14,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(15,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(16,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(17,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(18,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -aa -aa -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(19,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(20,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ad -ad -ad -aa -aa -aa -aa -aa -ad -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(21,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ad -ad -ad -aa -ad -ad -aa -aa -aa -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(22,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -aa -aa -ad -ad -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(23,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(24,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(25,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(26,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(27,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(28,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ai -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -aa -aa -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(29,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(30,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -aa -aa -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(31,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(32,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(33,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(34,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(35,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(36,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(37,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -aa -aa -aa -ad -aa -aa -ad -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ad -ad -aa -aa -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(38,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ac -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ad -ad -ad -ad -ad -aa -aa -aa -ad -ad -ad -ad -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ad -ad -ad -ad -aa -aa -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(39,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -aa -aa -aa -ad -ad -ad -ad -ad -ad -ad -aa -aa -ad -aa -aa -ad -ad -ad -ad -ad -ad -ad -ad -ad -aa -aa -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(40,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(41,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(42,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -aa -aa -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(43,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -aa -aa -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -kX -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(44,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -aa -aa -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(45,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(46,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(47,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(48,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -aa -aa -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(49,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(50,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(51,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -cR -cR -cR -cR -cR -cR -cR -cR -cR -cR -cR -cR -cR -cR -cR -cR -cR -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(52,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -cR -cX -dG -ee -eD -da -da -fK -gb -gn -gL -gW -gW -hz -da -il -cR -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(53,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -cR -cX -dH -ef -eE -da -da -fK -gc -go -go -da -da -da -da -im -cR -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(54,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -cR -cX -dI -da -da -da -da -da -gd -da -go -da -hg -da -da -in -cR -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(55,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -cR -cY -dI -da -eF -da -da -fL -gc -da -da -da -da -da -da -io -cR -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(56,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -cR -cZ -dJ -eg -dG -eg -eg -fM -ge -gp -da -da -da -hA -da -ip -cR -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(57,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -cR -da -da -cZ -eG -da -da -fN -ge -da -eF -da -hh -da -da -iq -cR -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(58,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -cR -cZ -cZ -da -eH -da -da -da -gd -da -da -da -da -da -da -ir -cR -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(59,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -aa -aa -aa -aa -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -cR -db -cZ -da -eI -fl -da -fO -gf -da -da -eF -da -da -da -is -cR -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(60,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -aa -aa -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -cR -dc -dK -da -eJ -fm -fr -fP -gg -gq -gq -gq -gq -hB -da -ir -cR -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(61,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -aa -aa -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -cR -dc -da -dK -eK -da -fs -fQ -gh -gr -gM -gX -hi -hC -hR -it -cR -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -aa -aa -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(62,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -aa -aa -aa -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ah -ah -ah -ah -ah -ah -aM -aM -aM -aM -aM -aM -aM -aM -aM -aM -aM -aM -aM -aM -aM -aM -aM -aM -cS -cS -cS -cS -cS -cS -ft -fR -gi -gi -gi -gi -gi -gi -gi -gi -gi -gi -gi -gi -gi -gi -gi -gi -gi -gi -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -aa -aa -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(63,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -aa -aa -ad -aa -aa -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ah -aj -aj -ak -ak -ak -aM -aO -aX -bi -aP -aP -aP -aP -aM -bR -aM -aP -aP -aP -aP -bi -aX -aO -cS -dd -dL -dL -eL -fn -fu -fS -gj -gs -gs -gY -gs -gs -hS -iu -iA -iu -je -jp -jy -gi -jX -gi -jX -gi -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(64,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -aa -aa -ad -ad -ad -ad -aa -aa -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ah -ak -ak -aj -ak -ak -aM -aP -aP -aP -aR -aV -aP -aP -aM -aU -aM -aW -aZ -aP -cv -ba -aW -aP -cS -de -dL -eh -eM -cS -fv -fo -gi -gi -gi -gi -gi -gi -hT -ic -ic -iM -jf -jq -jz -gi -jY -gi -jY -gi -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(65,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ad -aa -aa -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ah -ak -ak -ak -aj -ak -aM -aP -aY -aW -be -aP -aR -aW -bK -aU -bK -aP -aP -aP -be -aP -aP -cJ -cS -df -dL -dL -eM -cS -fv -fo -gi -gt -gt -gZ -hj -hD -hU -iv -ic -iN -gi -gi -gi -gi -jZ -kn -kb -gi -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(66,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ad -aa -aa -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ah -al -aj -ak -ak -aF -aM -aQ -aP -aR -aP -aP -aP -aP -bL -bS -ca -aP -aP -aP -ch -aP -aP -bO -cS -dg -dL -ei -eM -cS -fv -fT -gi -gu -gt -gt -hk -gi -hT -ic -ic -iN -ic -ic -jA -jP -ka -kb -lb -gi -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(67,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ah -ak -ak -ax -ak -ak -aM -aP -aP -ba -aP -aW -aP -aP -bM -bq -bM -aP -aP -aP -aP -aP -cv -aP -cS -dh -dL -dL -eM -cS -fv -fU -gi -gv -gt -gt -hl -gi -hV -ic -iv -iN -ic -ic -jB -gi -kb -kb -mb -gi -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(68,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ah -ak -ak -ak -ak -aB -aM -aP -aZ -aP -aV -aW -aP -aP -aM -bq -aM -aP -aR -aV -aV -aP -cF -aP -cS -cS -cS -cS -eN -cS -fv -fo -gi -gw -gN -gt -hm -gi -hW -iw -iB -iO -jg -jr -ic -gi -kc -ko -kz -gi -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(69,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ah -ak -an -an -ak -ak -aM -aP -aP -aR -aP -bu -aP -aP -bK -bq -bK -aP -aP -aP -aP -aP -aP -bf -cS -di -dM -ej -eO -cS -fv -fo -gi -gx -gt -gt -hn -gi -hX -ic -iC -iP -jh -jr -ic -gi -kd -gi -kd -gi -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(70,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ah -am -an -ak -ak -aB -aM -aP -aP -aP -be -aP -aP -aP -bL -bT -ca -aP -aP -aP -be -aP -aR -aP -cS -dj -dN -ek -eP -cS -fv -fo -gi -gy -gt -ha -gD -gi -hX -ic -iC -iQ -ji -jr -ic -gi -ke -gi -ke -gi -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(71,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ah -an -ak -ak -aB -ak -aM -aP -aP -aP -aP -aV -aW -ba -bM -bU -bM -ci -aP -aW -ci -aP -aP -aP -cS -dk -dN -dp -dp -cS -fv -fo -gi -gz -gt -gt -gz -gi -hY -ic -iC -iR -jj -jr -ic -gi -gi -gi -gi -gi -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(72,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ad -ad -ad -ad -aa -aa -aa -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ah -ak -ak -ay -aC -ay -aM -aR -aP -ba -aR -aP -aP -aP -aM -bq -aM -aP -aP -aP -aP -aP -aP -aP -cS -dl -dO -el -dp -cS -fv -fo -gi -gA -gt -gt -ho -gi -hZ -ic -iD -iS -jk -jr -ic -gi -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(73,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ad -ad -aa -aa -aa -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ah -ao -ak -ak -ay -aG -aM -aS -aP -aP -aP -aV -aP -aP -bK -bq -bK -aP -aP -ch -aP -ch -ch -aP -cS -dm -dN -em -dp -cS -fv -fU -gi -gv -gt -gN -gD -gi -ia -ic -ic -iN -ic -ic -jB -gi -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(74,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ad -ad -aa -aa -aa -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ah -ap -ak -az -ak -aH -aM -aS -aP -aP -aP -bv -aP -aP -bL -bV -ca -aP -aP -aP -aP -cy -aP -aP -cS -dn -dN -en -dp -cS -fv -fo -gi -gB -gt -gt -hp -gi -ib -ic -ic -iT -iv -ic -jC -gi -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(75,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ad -ad -aa -aa -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ah -aq -ak -ak -ak -aI -aM -aQ -ba -aP -be -aP -bD -aP -bM -bq -bM -aP -aV -aP -be -bJ -aP -cK -cS -do -dP -en -eQ -cS -fv -fo -gi -gC -gt -gN -gA -gi -ib -ic -iE -iN -ic -ic -ic -gi -ad -ad -fJ -fJ -fJ -fJ -fJ -fJ -fJ -fJ -fJ -ad -ad -ad -ad -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(76,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ah -ar -ak -ak -aC -aH -aM -aP -aP -aP -aP -bw -aP -aP -aM -bq -aM -aR -aP -aR -aP -aP -cG -cL -cS -dp -dQ -eo -eR -cS -fv -fo -gi -gD -gt -gt -gy -gi -ic -ic -ic -iU -iv -ic -jD -gi -ad -ad -fJ -gI -gI -kH -gI -kO -kH -gI -kO -ag -ag -ag -ag -ag -ag -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(77,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -aa -aa -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ah -ak -ak -ak -ak -ak -aM -aP -aP -aR -aP -aP -bE -bI -bN -bW -cb -cj -ck -aP -aP -aW -aP -bv -cS -dq -dR -ep -eS -cS -fv -fo -gi -gE -gt -gt -hq -gi -ic -ix -iF -iV -jl -js -jE -gi -ad -ad -fJ -kC -kG -kI -kL -kP -kS -kU -kO -ag -ag -ag -ag -ag -ag -kW -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(78,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -aa -aa -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ah -ak -ak -ak -aD -aJ -aM -aM -aM -aM -aM -aM -aM -aM -aM -bX -aM -aM -aM -aM -aM -aM -aM -aM -cS -dr -dS -eq -eq -cS -fw -fV -gi -gi -gi -gi -gi -gi -gi -gi -gi -gi -gi -gi -jF -gi -kf -kf -fJ -fC -gI -fJ -fJ -fJ -fJ -fJ -fJ -ad -ad -ad -ad -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(79,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -aa -aa -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ah -as -au -aA -aE -aK -aN -aT -bb -bb -bm -bb -bF -bb -bb -bY -cc -bb -cl -bm -cw -cz -bb -bb -cT -ds -dT -er -er -er -fx -fW -gk -gF -er -hb -er -er -er -er -hb -er -er -jt -jG -jQ -kg -kp -kA -kD -gI -fJ -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(80,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -af -ah -ah -ah -ah -ah -aL -aM -aU -aU -aU -bn -bx -bx -bx -bx -bZ -bx -bx -bx -cn -bx -cA -bx -bx -cU -dt -dU -es -eT -fo -fy -fo -gl -gG -fo -fo -fo -fo -id -fo -iG -fo -fo -ju -jH -gl -kh -kq -kB -gI -gI -fJ -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(81,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -af -af -ag -ag -ag -ag -ag -ag -aM -aM -aM -aM -bo -by -aM -aM -aM -aM -aM -aM -aM -co -cx -aM -aM -aM -cV -du -cV -cV -cV -cV -fz -fJ -fJ -fJ -fJ -fJ -fJ -fJ -fJ -fJ -fJ -fJ -hd -hd -hd -hd -ki -kr -hd -kE -kE -fJ -fJ -fJ -fJ -fJ -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(82,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -af -af -ag -ag -at -at -ag -ag -aM -aO -aV -bj -bp -bz -bG -aW -aO -aM -cd -aP -bj -cp -bz -bG -aP -aO -cV -dv -dV -et -eU -cV -fA -fX -gm -gH -gO -hc -gH -hE -gH -gH -iH -iW -hd -jv -jv -jR -kj -ks -hd -gI -gI -kJ -kM -kQ -kT -fJ -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(83,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -af -af -ag -at -ag -ag -av -ag -aM -aQ -bc -bk -bq -aU -bH -be -bO -aM -ce -be -bk -bq -aU -cB -be -bO -cV -dw -dx -eu -eV -cV -fB -fY -fJ -gI -gP -gI -gI -hF -gI -gI -gI -iX -hd -jv -jv -jv -jv -kt -hd -gJ -gI -kJ -kN -kR -gI -fJ -ad -ad -ad -ad -ad -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(84,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -aa -aa -aa -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -af -ag -ag -ag -ag -ag -ag -ag -aM -aP -bd -bj -br -bx -bG -aR -aP -aM -aP -aP -bj -cq -bx -bG -aP -cM -cV -dx -dx -ev -eW -cV -fC -fZ -fJ -gI -gQ -hd -hd -hG -hd -hd -hd -iY -hd -jw -jv -jv -jv -kt -hd -gI -gI -kJ -gI -hf -kF -fJ -ad -ad -ad -ad -ad -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(85,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -aa -aa -aa -aa -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -af -ag -ag -ag -at -ag -ag -ag -aM -aM -aM -aM -bs -aU -aM -aM -aM -aM -aM -aM -aM -bs -aU -aM -aM -aM -cV -dy -dx -ew -eX -cV -fC -fZ -fJ -gI -gR -hd -hr -hH -ie -hd -iI -iZ -jm -jx -jI -jS -jx -ku -hd -kE -kE -fJ -gI -fJ -fJ -fJ -ad -ad -ad -ad -ad -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(86,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -aa -aa -aa -aa -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -af -af -ag -ag -ag -ag -ag -ag -aM -aO -aP -bj -br -bA -bG -bJ -aO -aM -aO -ch -bj -cq -bx -bG -aP -aO -cV -dz -dx -dx -eY -cV -fD -fZ -fJ -gJ -gR -hd -hs -hH -if -hd -iJ -ja -jn -jv -jJ -jT -kk -jv -hd -gI -gI -kK -gI -fJ -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(87,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -af -af -ag -av -ag -ag -ag -aM -aQ -be -bk -bq -aU -bH -be -bP -aM -aQ -be -bk -bq -aU -bH -be -cN -cV -dz -dW -ex -eZ -cV -fC -fZ -fJ -gI -gR -hd -hr -hH -ig -hd -iI -jb -jn -jv -jK -jT -jv -jv -hd -kF -gI -fJ -fJ -fJ -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(88,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -af -af -ag -ag -ag -ag -ag -aM -aV -bf -bj -br -bx -bG -aV -aW -aM -aP -aP -bj -cq -bx -bG -ch -aW -cV -dx -dX -dx -fa -cV -fC -fZ -fJ -gI -gR -hd -hr -hI -ig -hd -iK -iI -jn -jv -jL -jT -kl -jv -hd -gI -kF -fJ -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(89,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -af -ag -ag -ag -ag -ag -aM -aM -aM -aM -bs -bB -aM -aM -aM -aM -aM -aM -aM -bs -aU -aM -aM -aM -cV -dx -dx -ey -fb -cV -fC -fZ -fJ -gI -gR -hd -ht -hH -ih -hd -iI -iI -jn -jv -jM -jT -jv -jv -hd -gI -gI -fJ -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(90,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -af -af -ag -ag -ag -ag -aM -aO -aP -bj -br -bx -bG -aP -aO -aM -aO -aP -bj -cq -bx -bG -aP -aO -cV -dx -dY -ez -fc -cV -fC -fZ -fJ -gI -gR -hd -hd -hJ -hd -hd -iI -iI -jn -jv -jL -jT -jv -jv -hd -gI -kF -fJ -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(91,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -af -af -ag -ag -ag -ag -aM -aQ -bg -bk -bq -aU -bH -be -bO -aM -aQ -be -bk -bq -aU -bH -be -bO -cV -dA -cV -cV -cV -cV -fD -fZ -fJ -gK -gR -hd -hu -hK -ii -hd -iL -iI -jn -jv -jN -jT -jv -jv -hd -gJ -gI -fJ -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(92,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -af -af -ag -ag -aw -ag -aM -aR -aP -bj -br -bx -bG -aP -bQ -aM -cf -aP -bj -cq -bx -bG -aP -cO -cV -dB -dB -eA -fd -cV -fC -fZ -fJ -gI -gR -hd -hv -hL -hw -hd -iI -iI -jn -jv -jO -jU -jv -jv -hd -hy -gI -fJ -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(93,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -af -ag -ag -ag -ag -ag -aM -aM -aM -aM -bs -aU -aM -aM -aM -aM -aM -aM -aM -bs -aU -aM -aM -aM -cV -dC -dB -dB -fe -cV -fC -fZ -fJ -gI -gS -hd -hd -hM -hd -hd -hd -hd -hd -jw -jv -jv -jv -jv -hd -gI -gI -fJ -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(94,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -af -af -aw -ag -ag -ag -aM -aO -aP -bj -br -bx -bG -aV -aO -aM -aO -aP -bj -cq -bx -bG -aP -cP -cV -dD -dB -dB -ff -cV -fC -fZ -fJ -gI -gR -hd -hw -hw -hw -hw -hw -hw -hd -jv -jv -jv -jv -jv -hd -kF -gI -fJ -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(95,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -af -af -af -ag -ag -ag -aM -aQ -bh -bl -bq -aU -bH -be -bO -aM -cg -be -bk -bq -aU -bH -be -cQ -cV -dE -dZ -dB -dB -cV -fE -fZ -fJ -gI -gR -hd -hw -hN -hN -hN -hw -jc -hd -jv -jv -jV -jV -jV -hd -kF -hy -fJ -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(96,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -af -af -af -ag -ag -aM -aW -aW -bj -bt -bC -bG -aW -aR -aM -ch -bf -bj -cr -bC -bG -aP -aV -cV -dF -ea -eB -fg -cV -fF -fZ -fJ -gJ -gR -hd -hx -hO -ij -iy -hw -jd -hd -jv -jv -jW -jN -jL -hd -gI -gI -fJ -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(97,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -aa -aa -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -af -af -af -af -aM -aM -aM -aM -aM -aM -aM -aM -aM -aM -aM -aM -aM -aM -aM -aM -aM -aM -cV -cV -cV -cV -cV -cV -fG -fZ -fJ -gI -gR -hd -hw -hP -ik -iz -hw -hw -hd -jv -jv -jL -jv -jv -hd -gK -gI -fJ -ad -ad -ad -ad -ad -ad -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(98,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -cm -cs -cs -cs -cs -cs -cs -cs -cs -eC -fh -fp -fH -fZ -fJ -gI -gR -hd -hw -hQ -hQ -hQ -hw -hw -hd -jv -jv -jN -jv -kv -hd -gI -gI -fJ -ad -ad -ad -ad -ad -ad -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -kY -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(99,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -cm -cs -cs -cs -cs -cs -cs -cs -cs -eC -fi -fq -fI -ga -fJ -gI -gR -hd -hw -hw -hw -hw -hw -hw -jo -jv -jv -jv -km -kw -hd -gI -gI -fJ -ad -ad -ad -ad -ad -ad -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(100,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -cm -cs -cs -cC -cH -cH -cH -cH -eb -cs -fj -cm -fJ -fJ -fJ -fJ -gT -hd -hd -hd -hd -hd -hd -hd -hd -hd -hd -hd -hd -hd -hd -gI -gI -fJ -ad -ad -ad -ad -ad -ad -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(101,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -aa -aa -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -cm -ct -cs -cD -cs -cs -cs -cs -ec -cs -fk -cm -ad -ad -fJ -gI -gU -he -gI -gI -hy -gI -gI -gI -gI -gI -gI -gI -gI -gI -gI -gI -gI -fJ -ad -ad -ad -ad -ad -ad -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(102,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -aa -aa -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -cm -cs -cs -cD -cs -cs -cs -cs -ec -cs -cs -cm -ad -ad -fJ -gI -gV -hf -hy -gI -gI -gI -gI -gI -hf -gI -gI -gI -hy -gI -hf -gI -gI -fJ -ad -ad -ad -ad -ad -ad -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(103,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -aa -aa -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -cm -cs -cs -cD -cs -cs -cs -cs -ec -cs -cs -cm -ad -ad -fJ -fJ -fJ -fJ -fJ -fJ -fJ -fJ -fJ -fJ -fJ -fJ -fJ -fJ -fJ -fJ -fJ -fJ -fJ -fJ -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(104,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -cm -cs -cs -cD -cs -cs -cs -cs -ec -cs -cs -cm -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(105,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -cm -cs -cs -cD -cs -cs -cs -cs -ec -cs -cs -cm -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(106,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -cm -cs -cs -cD -cs -cs -cs -cs -ec -cs -cs -cm -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(107,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -cm -cs -cs -cD -cs -cs -cs -cs -ec -cs -cs -cm -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(108,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -cm -cs -cs -cD -cs -cs -cs -cs -ec -cs -cs -cm -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(109,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -cm -ct -cs -cD -cs -cs -cs -cs -ec -cs -fk -cm -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(110,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -cm -cs -cs -cE -cI -cI -cI -cI -ed -cs -cs -cm -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(111,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -aa -aa -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -cm -cs -cs -cs -cs -cs -cs -cs -cs -cs -cs -cm -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -aa -aa -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(112,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -cm -cu -cu -cu -cu -cu -cu -cu -cu -cu -cu -cm -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -aa -aa -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(113,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(114,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(115,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -aa -aa -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(116,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(117,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(118,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(119,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(120,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(121,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(122,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(123,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(124,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(125,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(126,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(127,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(128,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(129,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -aa -aa -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(130,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(131,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -aa -aa -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(132,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -aa -aa -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(133,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -aa -aa -ad -ad -aa -aa -ad -ad -ad -aa -aa -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(134,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(135,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -aa -aa -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(136,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(137,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(138,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -aa -aa -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -aa -aa -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(139,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -aa -aa -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(140,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -aa -aa -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(141,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -aa -aa -aa -ad -ad -ad -ad -ad -ad -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(142,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -aa -aa -aa -ad -ad -ad -ad -ad -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(143,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -aa -aa -aa -aa -ad -ad -ad -ad -ad -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(144,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ad -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(145,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -aa -aa -ad -ad -ad -aa -ad -ad -ad -ad -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(146,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -aa -aa -ad -ad -ad -aa -ad -ad -ad -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(147,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ad -aa -aa -aa -aa -aa -ad -ad -ad -ad -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ad -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(148,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ae -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ad -aa -aa -aa -aa -aa -ad -ad -ad -ad -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ad -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(149,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ad -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ad -aa -aa -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(150,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ad -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -aa -aa -aa -aa -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(151,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -aa -aa -ad -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(152,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(153,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(154,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(155,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(156,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(157,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(158,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(159,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(160,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(161,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(162,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(163,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(164,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -cW -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(165,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(166,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(167,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(168,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(169,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(170,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(171,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(172,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(173,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(174,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(175,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(176,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(177,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(178,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(179,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(180,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(181,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(182,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(183,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(184,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(185,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(186,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(187,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(188,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(189,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(190,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(191,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(192,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(193,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(194,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(195,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(196,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(197,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(198,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(199,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(200,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} diff --git a/maps/away/slavers/slavers_base_areas.dm b/maps/away/slavers/slavers_base_areas.dm deleted file mode 100644 index 4a741f6f6e8e8..0000000000000 --- a/maps/away/slavers/slavers_base_areas.dm +++ /dev/null @@ -1,42 +0,0 @@ -/area/slavers_base - icon = 'maps/away/slavers/slavers_base_sprites.dmi' - -/area/slavers_base/maint - name = "\improper Slavers Base Maintenance" - icon_state = "maint" - -/area/slavers_base/dorms - name = "\improper Slavers Dorms" - icon_state = "dorms" - -/area/slavers_base/secwing - name = "\improper Slavers Base Security Wing" - icon_state = "secwing" - -/area/slavers_base/mort - name = "\improper Slaves Mortuary" - icon_state = "mort" - -/area/slavers_base/cells - name = "\improper Slaves Cells" - icon_state = "cells" - -/area/slavers_base/hallway - name = "\improper Slavers Base Hallways" - icon_state = "hallway" - -/area/slavers_base/med - name = "\improper Slaves Medical Examination Room" - icon_state = "med" - -/area/slavers_base/demo - name = "\improper Slaves Demonstration room" - icon_state = "demo" - -/area/slavers_base/powatm - name = "\improper Slavers Base power and atmos room" - icon_state = "powatm" - -/area/slavers_base/hangar - name = "\improper Slavers Base Hangar" - icon_state = "hangar" \ No newline at end of file diff --git a/maps/away/slavers/slavers_base_sprites.dmi b/maps/away/slavers/slavers_base_sprites.dmi deleted file mode 100644 index 8a18880985db7..0000000000000 Binary files a/maps/away/slavers/slavers_base_sprites.dmi and /dev/null differ diff --git a/maps/away/smugglers/smugglers.dm b/maps/away/smugglers/smugglers.dm deleted file mode 100644 index f78929b28a8d1..0000000000000 --- a/maps/away/smugglers/smugglers.dm +++ /dev/null @@ -1,132 +0,0 @@ -#include "smugglers_areas.dm" -#include "../mining/mining_areas.dm" - -/obj/effect/overmap/visitable/sector/smugglers - name = "asteroid station" - desc = "A small station built into an asteroid. No radio traffic detected." - icon_state = "object" - known = FALSE - - initial_generic_waypoints = list( - "nav_smugglers", - "nav_smugglers_antag" - ) - -/datum/map_template/ruin/away_site/smugglers - name = "Smugglers' Base" - id = "awaysite_smugglers" - description = "Yarr." - suffixes = list("smugglers/smugglers.dmm") - spawn_cost = 1 - generate_mining_by_z = 1 - area_usage_test_exempted_root_areas = list(/area/smugglers) - apc_test_exempt_areas = list( - /area/smugglers/base = NO_SCRUBBER, - /area/smugglers/dorms = NO_SCRUBBER|NO_VENT, - /area/smugglers/office = NO_SCRUBBER|NO_VENT - ) - -/obj/effect/shuttle_landmark/nav_asteroid_base/nav1 - name = "Abandoned Asteroid Base Navpoint #1" - landmark_tag = "nav_smugglers" - -/obj/effect/shuttle_landmark/nav_asteroid_base/nav2 - name = "Abandoned Asteroid Base Navpoint #2" - landmark_tag = "nav_smugglers_antag" - flags = SLANDMARK_FLAG_AUTOSET - -/obj/item/paper/smug_1 - name = "suspicios note" - info = "This one goes to Nyx, Tranist station 3, dock 14. Ask Dr. Jensen.
              Ask no less than 4000 thalers!" - -/obj/item/paper/smug_2 - name = "suspicious note" - info = "That vox fuckface will be curious about what we got from that mine storage last week." - -/obj/item/paper/smug_3 - name = "suspicious note" - info = "If I catch any of you stupid asses smoking near canisters again, you'll end up near Tony behind that rocky wall!" - -/obj/item/paper/smug_4 - name = "suspicious note" - info = "\[*] Special order +3000 th.\[*] Some handguns, used +800 th.\[*] Another uranium delivery +2450 th.\[*] Two human hearts in freezer +1000 th. for each (Make it 1500, shit is gross)\[*] Some food and pills -340 th." - -/obj/item/paper/smug_5 - name = "suspicious note" - info = "Jacky, he keeps holding our shares. I'll get fucker down when we'll be back from next flight. Tony" - -/obj/structure/closet/smuggler - name = "suspicious locker" - desc = "Rusty, greasy old locker, smelling of cigarettes and cheap alcohol." - -/obj/structure/closet/smuggler/WillContain() - return list( - /obj/random/ammo, - /obj/random/contraband, - /obj/random/contraband, - /obj/random/drinkbottle, - /obj/random/drinkbottle, - /obj/random/cash, - /obj/random/cash, - /obj/random/cash, - /obj/random/smokes, - new /datum/atom_creator/simple(/obj/item/reagent_containers/syringe, 50), - new /datum/atom_creator/simple(/obj/item/reagent_containers/syringe/steroid, 10), - new /datum/atom_creator/simple(/obj/item/reagent_containers/syringe/steroid, 10), - new /datum/atom_creator/weighted(list(/obj/item/reagent_containers/food/drinks/cans/cola, /obj/item/reagent_containers/food/drinks/cans/waterbottle, /obj/item/reagent_containers/food/drinks/cans/dr_gibb)), - new /datum/atom_creator/simple(/obj/item/clothing/glasses/eyepatch, 30), - new /datum/atom_creator/simple(/obj/item/clothing/gloves/thick/duty, 80), - new /datum/atom_creator/simple(/obj/item/clothing/mask/balaclava/tactical, 30)) - -/obj/random/ore - name = "random ore" - desc = "This is a random ore." - icon = 'icons/obj/clothing/obj_accessories.dmi' - icon_state = "horribletie" - -/obj/random/ore_smug/spawn_choices() - return list( - /obj/item/ore/uranium, - /obj/item/ore/gold, - /obj/item/ore/silver, - /obj/item/ore/slag, - /obj/item/ore/phoron) - -/obj/random/ammo_magazine_smug - name = "Random Ammo Magazine" - desc = "This is smuggler's random ammo magazine." - icon = 'icons/obj/ammo.dmi' - icon_state = "magnum" - -/obj/random/ammo_magazine_smug/spawn_choices() - return list( - /obj/item/ammo_magazine/pistol, - /obj/item/ammo_magazine/speedloader, - /obj/item/ammo_magazine/rifle, - /obj/item/ammo_magazine/mil_rifle) - -/obj/structure/closet/crate/plastic_smug_ammo - name = "dirty plastic crate" - desc = "Dirty and scrtached plastic crate." - closet_appearance = /decl/closet_appearance/crate/plastic - -/obj/structure/closet/crate/plastic_smug_ammo/WillContain() - return list( - /obj/random/ammo_magazine_smug, - /obj/random/ammo_magazine_smug, - /obj/random/ammo_magazine_smug, - /obj/random/ammo_magazine_smug, - /obj/random/ammo_magazine_smug) - -/obj/structure/closet/crate/plastic_smug_weapons - name = "dirty plastic crate" - desc = "Dirty and scrtached plastic crate." - closet_appearance = /decl/closet_appearance/crate/plastic - -/obj/structure/closet/crate/plastic_smug_weapons/WillContain() - return list( - /obj/random/handgun, - /obj/random/handgun, - /obj/random/handgun, - /obj/random/projectile, - /obj/random/projectile) diff --git a/maps/away/smugglers/smugglers.dmm b/maps/away/smugglers/smugglers.dmm deleted file mode 100644 index 5f9d4cc61d07b..0000000000000 --- a/maps/away/smugglers/smugglers.dmm +++ /dev/null @@ -1,11243 +0,0 @@ -//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE -"aa" = ( -/turf/space, -/area/space) -"ab" = ( -/turf/simulated/floor/asteroid, -/area/mine/explored) -"ac" = ( -/turf/unsimulated/mask, -/area/mine/unexplored) -"ad" = ( -/obj/random/shoes, -/turf/space, -/area/space) -"ae" = ( -/obj/effect/overmap/visitable/sector/smugglers, -/turf/space, -/area/space) -"af" = ( -/turf/simulated/wall/r_wall, -/area/smugglers/base) -"ag" = ( -/obj/machinery/door/airlock/external{ - frequency = 1439; - icon_state = "door_closed" - }, -/turf/simulated/floor, -/area/smugglers/base) -"ah" = ( -/turf/simulated/floor/asteroid, -/area/space) -"aj" = ( -/obj/item/ammo_casing/pistol/magnum{ - pixel_x = 5; - pixel_y = 5 - }, -/obj/item/ammo_casing/pistol/magnum, -/obj/item/shovel{ - pixel_x = 10; - pixel_y = -5 - }, -/obj/effect/decal/cleanable/blood, -/turf/simulated/floor/asteroid, -/area/mine/explored) -"ak" = ( -/obj/effect/decal/cleanable/blood, -/turf/simulated/floor/asteroid, -/area/mine/explored) -"al" = ( -/obj/effect/wallframe_spawn/reinforced, -/turf/simulated/wall/r_wall, -/area/smugglers/base) -"am" = ( -/obj/machinery/airlock_sensor{ - frequency = 1439; - master_tag = "asteroid_base_dock_airlock"; - pixel_x = 25 - }, -/obj/machinery/atmospherics/unary/vent_pump/high_volume{ - id_tag = "asteroid_base_dock_pump" - }, -/obj/effect/floor_decal/industrial/warning/full, -/obj/item/beartrap{ - anchored = 1; - deployed = 1; - icon_state = "beartrap1" - }, -/turf/simulated/floor, -/area/smugglers/base) -"an" = ( -/turf/unsimulated/mask, -/area/mine/explored) -"ao" = ( -/turf/space, -/area/mine/unexplored) -"ap" = ( -/obj/machinery/atmospherics/unary/outlet_injector{ - injecting = 1; - use_power = 1 - }, -/turf/simulated/floor/airless, -/area/space) -"aq" = ( -/obj/machinery/door/airlock/external{ - frequency = 1439; - icon_state = "door_closed"; - name = "Internal Airlock" - }, -/turf/simulated/floor, -/area/smugglers/base) -"ar" = ( -/obj/effect/wallframe_spawn/reinforced, -/obj/machinery/door/blast/regular, -/obj/structure/cable{ - d2 = 2; - icon_state = "0-2" - }, -/turf/simulated/floor/airless, -/area/smugglers/base) -"au" = ( -/obj/item/device/flashlight/flare/glowstick/yellow{ - pixel_x = 5; - pixel_y = 7 - }, -/obj/item/device/flashlight/flare/glowstick/yellow, -/turf/simulated/floor/asteroid, -/area/mine/explored) -"av" = ( -/obj/effect/decal/cleanable/blood/drip, -/obj/machinery/embedded_controller/radio/airlock/airlock_controller{ - frequency = 1439; - id_tag = "asteroid_base_dock_airlock"; - name = "Dock Airlock Controller"; - pixel_x = -25; - tag_airpump = "asteroid_base_dock_pump"; - tag_exterior_door = "asteroid_base_dock_outer"; - tag_interior_door = "asteroid_base_dock_inner" - }, -/obj/machinery/access_button{ - command = "cycle_interior"; - frequency = 1439; - master_tag = "asteroid_base_dock_airlock"; - name = "interior access button"; - pixel_x = 28; - pixel_y = 24; - req_access = newlist() - }, -/obj/machinery/atmospherics/pipe/simple/visible/black{ - dir = 5 - }, -/turf/simulated/floor, -/area/smugglers/base) -"aw" = ( -/obj/machinery/portable_atmospherics/canister/air, -/obj/machinery/atmospherics/pipe/simple/visible/black{ - dir = 4 - }, -/turf/simulated/floor, -/area/smugglers/base) -"ax" = ( -/obj/machinery/floodlight, -/obj/machinery/atmospherics/pipe/simple/visible/black{ - dir = 4 - }, -/turf/simulated/floor, -/area/smugglers/base) -"ay" = ( -/obj/item/stack/cable_coil{ - pixel_x = 5; - pixel_y = 5 - }, -/obj/item/stack/cable_coil, -/obj/structure/cable{ - d2 = 2; - icon_state = "0-2" - }, -/obj/machinery/atmospherics/pipe/simple/visible/black{ - dir = 4 - }, -/obj/machinery/power/apc{ - dir = 1; - name = "north bump"; - pixel_y = 24 - }, -/turf/simulated/floor, -/area/smugglers/base) -"az" = ( -/obj/machinery/power/port_gen/pacman, -/obj/structure/cable{ - d2 = 2; - icon_state = "0-2" - }, -/obj/machinery/atmospherics/pipe/simple/visible/black{ - dir = 4 - }, -/turf/simulated/floor, -/area/smugglers/base) -"aA" = ( -/obj/item/stack/material/phoron{ - pixel_y = 7; - pixel_z = -8 - }, -/obj/item/stack/material/phoron{ - pixel_x = -5; - pixel_y = 5 - }, -/obj/item/stack/material/phoron, -/obj/machinery/atmospherics/pipe/simple/visible/black{ - dir = 4 - }, -/turf/simulated/floor, -/area/smugglers/base) -"aB" = ( -/obj/machinery/atmospherics/portables_connector{ - dir = 1 - }, -/obj/machinery/portable_atmospherics/powered/scrubber, -/obj/machinery/atmospherics/pipe/simple/visible/black{ - dir = 4 - }, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor, -/area/smugglers/base) -"aC" = ( -/obj/machinery/atmospherics/pipe/simple/visible/black{ - dir = 4 - }, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor, -/area/smugglers/base) -"aD" = ( -/obj/machinery/atmospherics/pipe/manifold/visible/black{ - dir = 1 - }, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor, -/area/smugglers/base) -"aE" = ( -/obj/machinery/door/airlock/maintenance, -/obj/machinery/atmospherics/pipe/simple/visible/black{ - dir = 4 - }, -/turf/simulated/floor, -/area/smugglers/base) -"aF" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/simple/visible/black{ - dir = 4 - }, -/turf/simulated/floor, -/area/smugglers/base) -"aG" = ( -/obj/machinery/atmospherics/pipe/simple/visible/black{ - dir = 4 - }, -/turf/simulated/floor, -/area/smugglers/base) -"aH" = ( -/obj/machinery/embedded_controller/radio/airlock/airlock_controller{ - frequency = 1439; - id_tag = "asteroid_base_east_airlock"; - pixel_y = 25; - tag_airpump = "asteroid_base_east_pump"; - tag_exterior_door = "asteroid_base_east_outer"; - tag_interior_door = "asteroid_base_east_inner" - }, -/obj/machinery/access_button{ - command = "cycle_interior"; - frequency = 1439; - master_tag = "asteroid_base_east_airlock"; - name = "interior access button"; - pixel_x = -28; - pixel_y = 24; - req_access = newlist() - }, -/obj/machinery/atmospherics/pipe/simple/visible/black{ - dir = 4 - }, -/turf/simulated/floor, -/area/smugglers/base) -"aI" = ( -/obj/machinery/door/airlock/external{ - frequency = 1439; - icon_state = "door_locked"; - id_tag = "asteroid_base_east_inner"; - locked = 1; - name = "Internal Airlock" - }, -/obj/machinery/atmospherics/pipe/simple/visible/black{ - dir = 4 - }, -/turf/simulated/floor, -/area/smugglers/base) -"aJ" = ( -/obj/item/beartrap{ - anchored = 1; - deployed = 1; - icon_state = "beartrap1" - }, -/obj/machinery/airlock_sensor{ - frequency = 1439; - master_tag = "asteroid_base_east_airlock"; - pixel_y = -25 - }, -/obj/machinery/atmospherics/unary/vent_pump/high_volume{ - dir = 8; - id_tag = "asteroid_base_east_pump" - }, -/obj/effect/floor_decal/industrial/warning/full, -/turf/simulated/floor, -/area/smugglers/base) -"aK" = ( -/obj/machinery/door/airlock/external{ - frequency = 1439; - icon_state = "door_locked"; - id_tag = "asteroid_base_east_outer"; - locked = 1 - }, -/turf/simulated/floor, -/area/smugglers/base) -"aL" = ( -/obj/machinery/access_button/airlock_exterior{ - frequency = 1439; - master_tag = "asteroid_base_east_airlock"; - name = "exterior access button"; - pixel_x = -25; - pixel_y = 25 - }, -/turf/simulated/floor/asteroid, -/area/mine/explored) -"aM" = ( -/obj/random/trash, -/turf/simulated/floor/asteroid, -/area/mine/explored) -"aN" = ( -/obj/machinery/light/small{ - dir = 8 - }, -/obj/structure/cable{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/turf/simulated/floor, -/area/smugglers/base) -"aO" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor, -/area/smugglers/base) -"aP" = ( -/obj/effect/decal/cleanable/blood/drip, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/item/wirecutters, -/turf/simulated/floor, -/area/smugglers/base) -"aQ" = ( -/obj/structure/cable, -/obj/structure/cable{ - d1 = 32; - d2 = 4; - icon_state = "32-4" - }, -/obj/structure/cable{ - d1 = 16; - d2 = 0; - dir = 4; - icon_state = "0-2" - }, -/obj/structure/cable{ - d2 = 8; - icon_state = "0-8" - }, -/turf/simulated/floor, -/area/smugglers/base) -"aR" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/cable{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/turf/simulated/floor, -/area/smugglers/base) -"aS" = ( -/obj/effect/decal/cleanable/blood/drip, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/cable{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/turf/simulated/floor, -/area/smugglers/base) -"aT" = ( -/obj/machinery/light/small{ - dir = 4; - pixel_y = 8 - }, -/obj/structure/cable{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/machinery/atmospherics/pipe/simple/visible/black, -/obj/structure/cable{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/turf/simulated/floor, -/area/smugglers/base) -"aU" = ( -/turf/simulated/wall, -/area/smugglers/base) -"aV" = ( -/obj/machinery/light/small/red{ - dir = 8 - }, -/turf/simulated/floor, -/area/smugglers/base) -"aW" = ( -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor, -/area/smugglers/base) -"aX" = ( -/obj/structure/table/rack{ - dir = 8 - }, -/obj/item/clothing/mask/breath, -/turf/simulated/floor, -/area/smugglers/base) -"aY" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor, -/area/smugglers/base) -"aZ" = ( -/obj/random/trash, -/turf/simulated/floor, -/area/smugglers/base) -"ba" = ( -/obj/structure/closet/crate/plastic_smug_ammo, -/obj/effect/floor_decal/industrial/warning{ - dir = 9 - }, -/turf/simulated/floor, -/area/smugglers/base) -"bb" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 1 - }, -/obj/item/paper/smug_1, -/turf/simulated/floor, -/area/smugglers/base) -"bc" = ( -/obj/random/ore_smug, -/obj/effect/floor_decal/industrial/warning{ - dir = 5 - }, -/turf/simulated/floor, -/area/smugglers/base) -"bd" = ( -/turf/simulated/floor, -/area/smugglers/base) -"be" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/visible/black, -/turf/simulated/floor, -/area/smugglers/base) -"bf" = ( -/obj/structure/table/rack{ - dir = 8 - }, -/obj/item/tank/air{ - pixel_x = 5 - }, -/obj/item/tank/air, -/turf/simulated/floor, -/area/smugglers/base) -"bg" = ( -/obj/item/pickaxe/xeno/hand{ - pixel_x = -15 - }, -/turf/simulated/floor/asteroid, -/area/mine/explored) -"bh" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 8 - }, -/turf/simulated/floor, -/area/smugglers/base) -"bi" = ( -/obj/structure/closet/crate/plastic_smug_weapons, -/turf/simulated/floor, -/area/smugglers/base) -"bj" = ( -/obj/structure/closet/crate/plastic, -/obj/random/action_figure, -/obj/random/loot, -/obj/random/loot, -/obj/random/smokes, -/obj/random/smokes, -/obj/effect/floor_decal/industrial/warning{ - dir = 4; - icon_state = "warning" - }, -/turf/simulated/floor, -/area/smugglers/base) -"bk" = ( -/obj/machinery/floodlight, -/turf/simulated/floor, -/area/smugglers/base) -"bl" = ( -/obj/machinery/portable_atmospherics/canister/oxygen, -/obj/machinery/light/small/red, -/turf/simulated/floor, -/area/smugglers/base) -"bm" = ( -/obj/structure/table/rack{ - dir = 8 - }, -/obj/random/voidsuit, -/obj/random/voidhelmet, -/turf/simulated/floor, -/area/smugglers/base) -"bn" = ( -/obj/structure/boulder, -/turf/simulated/floor/asteroid, -/area/mine/explored) -"bo" = ( -/obj/item/ore/silver, -/obj/item/ore/silver{ - pixel_x = 10; - pixel_y = -5 - }, -/turf/simulated/floor/asteroid, -/area/mine/explored) -"bp" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/light/small{ - dir = 8 - }, -/turf/simulated/floor, -/area/smugglers/base) -"bq" = ( -/obj/item/paper/smug_2, -/turf/simulated/floor, -/area/smugglers/base) -"br" = ( -/obj/structure/ore_box, -/obj/random/ore_smug, -/obj/random/ore_smug, -/obj/random/ore_smug, -/obj/random/ore_smug, -/obj/random/ore_smug, -/obj/random/ore_smug, -/obj/random/ore_smug, -/obj/random/ore_smug, -/obj/random/ore_smug, -/obj/random/ore_smug, -/obj/random/ore_smug, -/obj/random/ore_smug, -/obj/random/ore_smug, -/obj/random/ore_smug, -/obj/random/ore_smug, -/obj/effect/floor_decal/industrial/warning{ - dir = 8 - }, -/turf/simulated/floor, -/area/smugglers/base) -"bs" = ( -/obj/structure/ore_box, -/obj/random/ore_smug, -/obj/random/ore_smug, -/obj/random/ore_smug, -/obj/random/ore_smug, -/obj/random/ore_smug, -/obj/random/ore_smug, -/obj/random/ore_smug, -/obj/random/ore_smug, -/obj/random/ore_smug, -/obj/random/ore_smug, -/obj/random/ore_smug, -/turf/simulated/floor, -/area/smugglers/base) -"bt" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 4; - icon_state = "warning" - }, -/turf/simulated/floor, -/area/smugglers/base) -"bu" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/light/small{ - dir = 4; - pixel_y = 8 - }, -/obj/machinery/atmospherics/pipe/simple/visible/black, -/turf/simulated/floor, -/area/smugglers/base) -"bv" = ( -/turf/simulated/wall, -/area/smugglers/office) -"bw" = ( -/turf/simulated/wall/r_wall, -/area/smugglers/office) -"bx" = ( -/obj/item/ore/slag, -/obj/item/ore/slag{ - pixel_x = 5; - pixel_y = -2 - }, -/obj/item/ore/slag, -/turf/simulated/floor, -/area/smugglers/base) -"by" = ( -/obj/structure/ore_box, -/obj/random/ore_smug, -/obj/random/ore_smug, -/obj/random/ore_smug, -/obj/random/ore_smug, -/obj/random/ore_smug, -/obj/random/ore_smug, -/obj/random/ore_smug, -/obj/effect/floor_decal/industrial/warning{ - dir = 8 - }, -/turf/simulated/floor, -/area/smugglers/base) -"bz" = ( -/obj/random/ore_smug, -/turf/simulated/floor, -/area/smugglers/base) -"bA" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/machinery/atmospherics/binary/pump{ - dir = 1 - }, -/turf/simulated/floor, -/area/smugglers/base) -"bB" = ( -/obj/machinery/door/airlock/maintenance, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor, -/area/smugglers/office) -"bC" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled, -/area/smugglers/office) -"bD" = ( -/obj/structure/table/woodentable, -/obj/item/paper, -/obj/item/pen, -/obj/item/device/flashlight/lamp, -/obj/structure/cable{ - d2 = 8; - icon_state = "0-8" - }, -/obj/machinery/power/apc{ - dir = 1; - name = "north bump"; - pixel_y = 24 - }, -/turf/simulated/floor/tiled, -/area/smugglers/office) -"bE" = ( -/obj/structure/safe/floor, -/obj/random/contraband, -/obj/random/contraband, -/obj/random/loot, -/obj/random/projectile, -/obj/random/cash, -/obj/random/cash, -/obj/random/cash, -/turf/simulated/floor/tiled, -/area/smugglers/office) -"bF" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 10; - icon_state = "warning" - }, -/turf/simulated/floor, -/area/smugglers/base) -"bG" = ( -/obj/effect/floor_decal/industrial/warning, -/turf/simulated/floor, -/area/smugglers/base) -"bH" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 6 - }, -/turf/simulated/floor, -/area/smugglers/base) -"bI" = ( -/obj/machinery/atmospherics/portables_connector{ - dir = 1 - }, -/obj/machinery/portable_atmospherics/canister/air, -/turf/simulated/floor, -/area/smugglers/base) -"bJ" = ( -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled, -/area/smugglers/office) -"bK" = ( -/obj/structure/table/woodentable, -/obj/random/coin{ - pixel_x = -5; - pixel_y = -3 - }, -/obj/random/coin, -/obj/item/storage/bible/booze{ - pixel_x = 10 - }, -/obj/item/paper/smug_4{ - pixel_x = -5; - pixel_y = 4 - }, -/obj/item/paper/smug_5, -/turf/simulated/floor/tiled, -/area/smugglers/office) -"bL" = ( -/obj/structure/bed/chair/comfy/red{ - dir = 8 - }, -/obj/machinery/light{ - dir = 4; - icon_state = "tube1" - }, -/turf/simulated/floor/tiled, -/area/smugglers/office) -"bM" = ( -/obj/effect/decal/cleanable/blood, -/turf/simulated/floor, -/area/smugglers/base) -"bN" = ( -/obj/machinery/atmospherics/portables_connector, -/obj/machinery/portable_atmospherics/powered/scrubber, -/turf/simulated/floor, -/area/smugglers/base) -"bO" = ( -/obj/machinery/portable_atmospherics/canister/air, -/obj/item/wrench, -/obj/machinery/light/small{ - dir = 4; - pixel_y = 8 - }, -/turf/simulated/floor, -/area/smugglers/base) -"bP" = ( -/mob/living/simple_animal/hostile/retaliate/malf_drone, -/turf/simulated/floor/tiled, -/area/smugglers/office) -"bQ" = ( -/turf/simulated/floor/tiled, -/area/smugglers/office) -"bR" = ( -/obj/structure/table/standard, -/obj/random/tech_supply, -/turf/simulated/floor, -/area/smugglers/base) -"bS" = ( -/obj/structure/table/standard, -/obj/random/toolbox, -/turf/simulated/floor, -/area/smugglers/base) -"bT" = ( -/obj/structure/table/standard, -/obj/random/firstaid, -/turf/simulated/floor, -/area/smugglers/base) -"bU" = ( -/obj/structure/closet/crate/trashcart, -/turf/simulated/floor, -/area/smugglers/base) -"bV" = ( -/obj/machinery/atmospherics/portables_connector{ - dir = 1 - }, -/obj/machinery/portable_atmospherics/canister, -/turf/simulated/floor, -/area/smugglers/base) -"bW" = ( -/obj/machinery/portable_atmospherics/canister/air, -/turf/simulated/floor, -/area/smugglers/base) -"bX" = ( -/obj/machinery/constructable_frame/machine_frame, -/obj/random/trash, -/turf/simulated/floor/tiled, -/area/smugglers/office) -"bY" = ( -/obj/structure/table/rack, -/obj/item/clothing/head/cowboy_hat, -/obj/item/clothing/suit/armor/hos/jensen, -/turf/simulated/floor/tiled, -/area/smugglers/office) -"bZ" = ( -/obj/structure/filingcabinet/chestdrawer, -/turf/simulated/floor/tiled, -/area/smugglers/office) -"ca" = ( -/turf/simulated/wall/r_wall, -/area/smugglers/dorms) -"cb" = ( -/obj/machinery/door/airlock/maintenance{ - name = "Restroom" - }, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor, -/area/smugglers/dorms) -"cc" = ( -/turf/simulated/wall, -/area/smugglers/dorms) -"cd" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled, -/area/smugglers/dorms) -"ce" = ( -/obj/structure/noticeboard{ - pixel_y = 30 - }, -/obj/effect/decal/cleanable/dirt, -/obj/structure/table/standard, -/obj/machinery/microwave{ - pixel_y = 10 - }, -/turf/simulated/floor/tiled, -/area/smugglers/dorms) -"cf" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/closet/crate, -/obj/random/snack, -/obj/random/snack, -/obj/random/snack, -/obj/random/snack, -/obj/random/snack, -/turf/simulated/floor/tiled, -/area/smugglers/dorms) -"cg" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/closet/crate, -/obj/random/drinkbottle, -/obj/random/drinkbottle, -/turf/simulated/floor/tiled, -/area/smugglers/dorms) -"ch" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/computer/arcade, -/turf/simulated/floor/tiled, -/area/smugglers/dorms) -"ci" = ( -/obj/structure/closet/crate/freezer/rations, -/obj/effect/decal/cleanable/cobweb2, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled, -/area/smugglers/dorms) -"cj" = ( -/obj/effect/decal/cleanable/cobweb, -/turf/simulated/floor/airless/ceiling, -/area/smugglers/dorms) -"cl" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/obj/structure/cable, -/obj/machinery/power/apc{ - dir = 8; - name = "west bump"; - pixel_x = -24 - }, -/turf/simulated/floor/tiled, -/area/smugglers/dorms) -"cm" = ( -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled, -/area/smugglers/dorms) -"cn" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled, -/area/smugglers/dorms) -"co" = ( -/obj/machinery/door/airlock/maintenance{ - name = "Toilet" - }, -/turf/simulated/floor, -/area/smugglers/dorms) -"cp" = ( -/obj/effect/decal/cleanable/vomit, -/obj/random/medical/lite, -/turf/simulated/floor/airless/ceiling, -/area/smugglers/dorms) -"cq" = ( -/obj/structure/hygiene/toilet{ - dir = 8 - }, -/turf/simulated/floor/airless/ceiling, -/area/smugglers/dorms) -"cr" = ( -/obj/structure/bed/chair{ - dir = 4 - }, -/obj/machinery/light, -/obj/random/trash, -/turf/simulated/floor/tiled, -/area/smugglers/dorms) -"cs" = ( -/obj/structure/table/standard, -/obj/effect/decal/cleanable/dirt, -/obj/item/paper/smug_3, -/obj/item/flame/lighter, -/obj/random/coin, -/turf/simulated/floor/tiled, -/area/smugglers/dorms) -"ct" = ( -/obj/structure/table/standard, -/obj/effect/decal/cleanable/dirt, -/obj/item/spacecash/bundle/c10, -/obj/random/smokes, -/obj/random/snack, -/turf/simulated/floor/tiled, -/area/smugglers/dorms) -"cu" = ( -/obj/structure/bed/chair{ - dir = 8 - }, -/obj/machinery/light, -/turf/simulated/floor/tiled, -/area/smugglers/dorms) -"cv" = ( -/obj/structure/closet, -/obj/effect/decal/cleanable/dirt, -/obj/random/medical, -/obj/random/medical, -/obj/random/tech_supply, -/obj/random/action_figure, -/turf/simulated/floor/tiled, -/area/smugglers/dorms) -"cw" = ( -/obj/machinery/door/airlock/maintenance, -/turf/simulated/floor/tiled, -/area/smugglers/dorms) -"cx" = ( -/obj/structure/bed, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled, -/area/smugglers/dorms) -"cy" = ( -/obj/structure/closet/smuggler, -/obj/random/suit, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled, -/area/smugglers/dorms) -"cz" = ( -/obj/structure/bed, -/obj/effect/decal/cleanable/dirt, -/mob/living/simple_animal/hostile/retaliate/malf_drone, -/turf/simulated/floor/tiled, -/area/smugglers/dorms) -"cA" = ( -/obj/effect/decal/cleanable/dirt, -/obj/random/trash, -/turf/simulated/floor/tiled, -/area/smugglers/dorms) -"cB" = ( -/obj/machinery/light/small, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled, -/area/smugglers/dorms) -"cC" = ( -/obj/effect/shuttle_landmark/nav_asteroid_base/nav2, -/turf/space, -/area/space) -"cE" = ( -/obj/effect/shuttle_landmark/nav_asteroid_base/nav1, -/turf/space, -/area/space) -"db" = ( -/obj/effect/decal/cleanable/blood, -/obj/effect/landmark/corpse/doctor, -/turf/simulated/floor/asteroid, -/area/mine/explored) -"eb" = ( -/obj/machinery/light/small{ - dir = 4 - }, -/obj/structure/hygiene/sink{ - pixel_y = 15 - }, -/obj/item/storage/mirror{ - pixel_y = 30 - }, -/obj/random/soap, -/turf/simulated/floor/airless/ceiling, -/area/smugglers/dorms) - -(1,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(2,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(3,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(4,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(5,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(6,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(7,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(8,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(9,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(10,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(11,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(12,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(13,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(14,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(15,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(16,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(17,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(18,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(19,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(20,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(21,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(22,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(23,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(24,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(25,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ac -aa -aa -aa -aa -aa -aa -ab -ab -ac -ac -aa -aa -aa -aa -aa -aa -aa -ac -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(26,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ac -ab -ab -ac -ac -ab -ab -ab -ac -ac -ab -ab -ab -aa -aa -aa -ab -ab -aa -aa -aa -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(27,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ac -ac -ab -ab -ab -ab -ab -ac -ac -ac -ac -ac -ab -ac -ac -aa -ac -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ac -ac -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(28,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ab -ab -ab -ac -aa -ab -aa -aa -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ac -ac -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(29,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ac -ab -ac -ac -ac -ac -ac -ac -ac -ab -ab -ac -ac -ac -ac -ac -ac -ac -ac -ac -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -ac -ac -ac -ac -ac -ac -ac -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(30,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -af -al -af -af -af -af -af -af -af -af -af -af -ca -ca -ca -ca -ca -ca -ca -ca -ac -ac -ac -ac -ab -ab -ac -ac -aa -aa -aa -aa -aa -ac -aa -ac -ac -ac -ac -ac -ac -ac -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(31,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ae -ag -am -aq -av -aN -aY -aY -bp -aY -aY -bp -aY -cb -cd -cl -cm -cw -cm -cA -ca -ab -ab -ab -ab -ab -ab -ac -ac -aa -aa -aa -aa -aa -ac -ac -ac -ac -ab -ac -ac -ac -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(32,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -af -af -af -aw -aO -aZ -bd -bq -bx -aZ -bd -aZ -cc -ce -cm -cr -cc -cx -cB -ca -ab -ac -ac -ac -ac -ac -ac -ab -ab -ab -ab -ab -ab -ab -ac -ac -ac -ac -ac -ac -ac -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(33,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -af -ax -aP -ba -bh -br -by -bF -bd -bR -cc -cf -cm -cs -cc -cy -cm -ca -ac -ac -ac -ac -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ac -ac -ac -ac -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(34,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ah -af -ay -aQ -bb -bi -bs -bz -bG -bd -bS -cc -cg -cm -ct -cc -cz -cm -ca -ac -ac -ac -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ac -ac -ac -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(35,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ah -an -af -az -aQ -bc -bj -bt -bt -bH -bd -bT -cc -ch -cm -cu -cc -cy -cm -ca -ac -ac -ac -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ac -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(36,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ao -af -aA -aO -bd -bd -bd -bd -bd -bM -bU -cc -ci -cn -cv -cc -cx -cB -ca -ac -ac -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ac -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -cE -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(37,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ap -ar -aB -aR -bd -bd -aZ -bd -bd -bN -bV -cc -cc -co -cc -cc -cy -cm -ca -ac -ac -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ac -ac -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(38,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ar -aC -aS -aZ -bd -bd -bd -bd -bd -bd -cc -cj -cp -ca -ca -ca -ca -ca -ab -ac -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ac -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(39,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ar -aD -aT -be -be -bu -bA -bI -bO -bW -cc -eb -cq -ca -ab -ab -ac -ac -ab -ac -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ac -ac -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(40,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -aa -aa -aa -af -aE -aU -aU -aU -bv -bB -bv -bv -bv -ca -ca -ca -ca -ac -ac -ac -ab -ab -ac -aM -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ac -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(41,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ac -af -aF -aV -aZ -bk -bv -bC -bJ -bJ -bX -bw -ac -ab -ac -ac -ac -ac -ab -aM -aM -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(42,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ac -ac -ac -af -aG -aW -bd -bl -bv -bD -bK -bP -bY -bw -ac -ab -ac -ac -ac -ab -ab -ac -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(43,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ac -ac -ac -af -aH -aX -bf -bm -bv -bE -bL -bQ -bZ -bw -ac -ab -ac -ac -ac -ab -ab -ac -ac -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ac -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(44,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ac -ab -ab -ab -ab -af -aI -af -af -af -bw -bw -bw -bw -bw -bw -ac -ab -ab -ab -ac -ab -ab -ac -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ac -ab -ac -ac -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(45,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ac -ab -ab -ab -af -aJ -af -ac -ac -ac -ac -ab -ac -ac -ac -ac -ab -ab -ab -ac -ab -ac -ab -ac -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ac -ac -ac -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(46,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ac -ab -aa -ab -af -aK -af -ac -ac -ac -ac -ac -ac -ab -ab -ac -ab -ab -ab -ab -ab -ac -ac -ac -ac -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ac -ac -ac -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(47,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ac -au -aL -ac -ac -ac -ac -ac -ac -ac -ab -ab -ac -ac -ac -ab -ab -ac -ac -ac -ac -ac -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ac -ab -ac -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(48,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ac -ac -ab -ab -ac -ac -ac -ac -ac -ac -ab -ab -ab -an -ab -ab -ac -ac -ac -ac -aa -ac -ac -ac -ab -ac -ac -ab -ab -ab -ab -ab -ab -ac -ac -ab -ab -ab -ac -ac -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(49,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ac -ac -ab -ab -ac -ac -ac -ac -ac -ac -ab -ab -ac -ac -ab -aM -ac -ac -ac -ac -aa -aa -aa -ac -ac -ac -ac -ab -ac -ab -ac -ab -ab -ac -ac -ab -ab -ab -ac -ac -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(50,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ac -ac -aa -aa -ac -ac -ac -ab -ac -ac -ac -ac -ac -ac -ab -ab -ac -ac -ac -ab -ab -ab -ab -ac -ac -aa -aa -ac -ac -ab -ac -ab -ac -ac -ac -ac -ab -ab -ab -ac -ab -ab -ac -ac -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(51,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ac -ac -ac -ac -ac -ac -ab -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ab -ab -ac -ac -ac -ac -ac -ac -ab -ab -ac -ab -ac -ac -aa -aa -aa -ac -ab -ac -ab -ac -ac -ac -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(52,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ac -ac -ac -ac -ab -ab -ab -bg -bn -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ab -ac -ac -ac -ac -ac -ac -ac -ab -ab -ab -ab -ac -ac -aa -aa -aa -ac -ab -ac -ab -ac -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(53,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ac -db -ab -ac -ac -ab -ab -bo -ac -ac -ac -ac -ac -ac -ac -ac -ac -ab -ab -ab -ac -ac -ac -ac -ac -ac -ac -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ac -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(54,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ac -ac -ab -aj -ac -ac -ab -ab -ab -ab -ac -ac -ac -ac -ac -ac -ac -ac -ab -ab -ac -ab -ab -ac -ac -ac -ac -ac -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ac -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(55,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ak -ac -ac -ab -ab -ac -ac -ac -ac -ac -ab -ab -ab -ab -ac -ac -ac -ac -ac -ab -ac -ac -ab -ab -ac -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(56,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -aa -ak -ab -ab -aM -ab -ac -ac -ac -ac -ac -ab -ac -ab -ab -ab -ac -ac -ac -ac -ab -ac -ac -ac -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(57,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ac -ab -ab -ab -ac -ac -ac -ac -ac -ab -ab -ac -ac -ab -aM -ab -ac -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(58,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ac -ac -aa -aa -ab -ab -ab -ab -ab -ac -ab -ac -ac -ac -ac -ac -ac -ab -ac -ac -ab -ac -ac -ac -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(59,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ac -ac -ac -ac -ab -ab -ab -ab -ab -ac -ab -ac -ac -ac -ac -ac -ac -ac -ac -ac -ab -ac -ac -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(60,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ac -ac -ab -ab -ab -ab -ab -ac -ab -aM -ac -ac -ac -ac -ac -ac -ac -ab -ab -ac -ac -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(61,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ac -ac -ac -ac -ac -ac -ab -ab -ac -ab -ab -ab -ab -ab -ac -ab -aM -ab -ab -ab -ac -ac -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(62,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ac -ac -ac -ac -ab -ab -ab -ac -ac -ab -ab -ac -ac -ab -ac -ab -ac -ac -ac -ac -ac -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(63,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ac -ab -ab -ab -ac -ac -ac -ab -ac -ab -ab -ab -ac -ab -ac -ac -ac -ac -ac -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(64,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ac -ab -ac -ac -ac -ac -ac -ab -ab -ab -ac -ab -ab -ab -ac -ac -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(65,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ac -ac -ac -ac -ac -ac -ac -aa -aa -aa -aa -aa -aa -ac -ac -ac -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(66,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ac -ac -ac -ac -ac -aa -aa -aa -aa -aa -aa -ac -ac -ac -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(67,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -aa -aa -ab -aa -aa -aa -aa -ab -ab -ac -aa -aa -ab -ac -ac -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(68,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ac -ac -ac -ac -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(69,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(70,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(71,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(72,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(73,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -cC -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(74,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(75,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(76,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(77,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(78,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(79,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(80,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(81,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(82,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(83,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(84,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(85,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(86,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(87,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(88,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(89,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(90,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(91,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(92,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(93,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(94,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(95,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(96,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(97,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(98,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(99,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(100,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} diff --git a/maps/away/smugglers/smugglers_areas.dm b/maps/away/smugglers/smugglers_areas.dm deleted file mode 100644 index 4736cb8a0f075..0000000000000 --- a/maps/away/smugglers/smugglers_areas.dm +++ /dev/null @@ -1,14 +0,0 @@ -/area/smugglers/base - name = "\improper Asteroid Base" - icon_state = "smgl_base" - icon = 'smugglers_sprites.dmi' - -/area/smugglers/office - name = "\improper Asteroid Base Office" - icon_state = "smgl_office" - icon = 'smugglers_sprites.dmi' - -/area/smugglers/dorms - name = "\improper Asteroid Base Rest Area" - icon_state = "smgl_dorms" - icon = 'smugglers_sprites.dmi' \ No newline at end of file diff --git a/maps/away/smugglers/smugglers_sprites.dmi b/maps/away/smugglers/smugglers_sprites.dmi deleted file mode 100644 index e34e2e45b7f24..0000000000000 Binary files a/maps/away/smugglers/smugglers_sprites.dmi and /dev/null differ diff --git a/maps/away/venera/venera.dm b/maps/away/venera/venera.dm deleted file mode 100644 index 9fec24b9018af..0000000000000 --- a/maps/away/venera/venera.dm +++ /dev/null @@ -1,165 +0,0 @@ -#include "venera_areas.dm" -#include "venera_radio.dm" - -/obj/effect/overmap/visitable/ship/venera - name = "venera" - desc = "Sensor array is detecting a vessel with unknown lifeforms on board." - color = "#1d96f8" - vessel_mass = 3000 /// Venera is small and fast ship - max_speed = 1/(2 SECONDS) - initial_generic_waypoints = list( - "nav_venera_1", - "nav_venera_2", - "nav_venera_3", - "nav_venera_antag" - ) - initial_restricted_waypoints = list( - "Aquila" = list("nav_venera_aquila"), - ) -/obj/effect/overmap/visitable/ship/venera/New(nloc, max_x, max_y) - name = "SGV Venera" - ..() - -/datum/map_template/ruin/away_site/venera - name = "SGV Venera" - id = "awaysite_venera" - description = "SolGov movable medium ship with turned humans." - suffixes = list("venera/venera.dmm") - spawn_cost = 0.5 - area_usage_test_exempted_root_areas = list(/area/venera) - -/obj/effect/shuttle_landmark/nav_venera/nav1 - name = "SGV Venera Navpoint #1" - landmark_tag = "nav_venera_1" - -/obj/effect/shuttle_landmark/nav_venera/nav2 - name = "SGV Venera Navpoint #2" - landmark_tag = "nav_venera_2" - -/obj/effect/shuttle_landmark/nav_venera/nav3 - name = "SGV Venera Navpoint #3" - landmark_tag = "nav_venera_3" - -/obj/effect/shuttle_landmark/nav_venera/nav4 - name = "SGV Venera Navpoint #4" - landmark_tag = "nav_venera_antag" -/obj/effect/shuttle_landmark/nav_venera/aquila - name = "Aquila Dock" - landmark_tag = "nav_venera_aquila" - - - -////////// Venera Corpses //////////// - -/obj/effect/landmark/corpse/venera - name = "Dead Crewmember" - corpse_outfits = list(/decl/hierarchy/outfit/job/torch/crew/service/crewman) -/obj/effect/landmark/corpse/venera/security - name = "Dead Security" - corpse_outfits = list(/decl/hierarchy/outfit/job/torch/crew/security/maa) -/obj/effect/landmark/corpse/venera/medical - name = "Dead Medic" - corpse_outfits = list(/decl/hierarchy/outfit/venera/doctor) -/obj/effect/landmark/corpse/venera/engineer - name = "Dead Engineer" - corpse_outfits = list(/decl/hierarchy/outfit/job/torch/crew/engineering/engineer) -/obj/effect/landmark/corpse/venera/captain - name = "Dead Captain" - corpse_outfits = list(/decl/hierarchy/outfit/venera/captain) -/obj/effect/landmark/corpse/venera/iccgn - name = "Dead ICCGN Agent" - corpse_outfits = list(/decl/hierarchy/outfit/venera/iccgn) - -/decl/hierarchy/outfit/venera - name = OUTFIT_JOB_NAME ("Venera Crew") - uniform = /obj/item/clothing/under/solgov/utility/expeditionary/service -/decl/hierarchy/outfit/venera/iccgn - name = OUTFIT_JOB_NAME ("ICCGN Agent") - uniform = /obj/item/clothing/under/iccgn/utility - suit = /obj/item/clothing/suit/armor/bulletproof - shoes = /obj/item/clothing/shoes/iccgn/utility - gloves = /obj/item/clothing/gloves/iccgn/duty - head = /obj/item/clothing/head/helmet/ballistic - back = /obj/item/storage/backpack/dufflebag/syndie -/decl/hierarchy/outfit/venera/doctor - name = OUTFIT_JOB_NAME ("Venera Doctor") - uniform = /obj/item/clothing/under/solgov/utility/expeditionary/medical - suit = /obj/item/clothing/suit/storage/toggle/labcoat - shoes = /obj/item/clothing/shoes/dutyboots - gloves = /obj/item/clothing/gloves/latex - head = /obj/item/clothing/head/beret/solgov/expedition/medical - back = /obj/item/storage/backpack/satchel/med - l_ear = /obj/item/device/radio/headset/map_preset/venera -/decl/hierarchy/outfit/venera/captain - name = OUTFIT_JOB_NAME ("Venera Captain") - uniform = /obj/item/clothing/under/solgov/utility/expeditionary/officer/command - suit = /obj/item/clothing/suit/storage/solgov/dress/expedition/command/capt - shoes = /obj/item/clothing/shoes/dress - gloves = /obj/item/clothing/gloves/thick/duty/solgov/cmd - head = /obj/item/clothing/head/solgov/service/expedition/captain - back = /obj/item/storage/backpack/satchel/com - l_ear = /obj/item/device/radio/headset/map_preset/venera - - - -///////////// Venera Snacks //////////// - -/obj/item/reagent_containers/food/snacks/meatsteak/toxin - name = "meat steak" - desc = "A piece of spicy meat." - icon_state = "meatstake" - trash = /obj/item/trash/plate - filling_color = "#7a3d11" - center_of_mass = "x=16;y=13" - bitesize = 40 -/obj/item/reagent_containers/food/snacks/meatsteak/toxin/Initialize() - .=..() - reagents.add_reagent(/datum/reagent/nutriment/protein, 5) - reagents.add_reagent(/datum/reagent/sodiumchloride, 1) - reagents.add_reagent(/datum/reagent/blackpepper, 1) - reagents.add_reagent(/datum/reagent/chloralhydrate, 10) - reagents.add_reagent(/datum/reagent/toxin/cyanide, 10) - -/////////// Venera Mobs /////////// - -/obj/item/natural_weapon/meatbits/strong - force = 35 - sharp = TRUE - edge = TRUE - attack_cooldown = 1 SECONDS - attack_verb = list("mauled", "slashed") - -/mob/living/simple_animal/hostile/meat/abomination/strong - name = "strong abomination" - desc = "A monstrously huge wall of flesh, it looks like you took who knows how many humans and put them together, this one looks very dangerously..." - icon = 'icons/mob/simple_animal/nightmaremonsters.dmi' - icon_state = "abomination" - icon_living = "abomination" - icon_dead = "abomination_dead" - speak_emote = list("twitches.") - turns_per_move = 5 - see_in_dark = 20 - response_help = "pets" - response_disarm = "gently pushes aside" - response_harm = "pokes" - maxHealth = 320 - health = 320 - natural_weapon = /obj/item/natural_weapon/meatbits/strong - heat_damage_per_tick = 20 - cold_damage_per_tick = 0 - faction = "meat" - pass_flags = PASS_FLAG_TABLE - move_to_delay = 3 - speed = 0.5 - bleed_colour = "#5c0606" - break_stuff_probability = 50 - pry_time = 1 SECONDS - pry_desc = "clawing" - min_gas = null - max_gas = null - minbodytemp = 0 - resistance = 15 - natural_armor = list( - melee = ARMOR_MELEE_KNIVES, - bullet = ARMOR_BALLISTIC_SMALL - ) diff --git a/maps/away/venera/venera.dmm b/maps/away/venera/venera.dmm deleted file mode 100644 index 770676f619e4e..0000000000000 --- a/maps/away/venera/venera.dmm +++ /dev/null @@ -1,34916 +0,0 @@ -//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE -"aa" = ( -/turf/space, -/area/space) -"ab" = ( -/obj/machinery/computer/ship/navigation{ - dir = 4; - icon_state = "computer" - }, -/obj/structure/window/reinforced{ - dir = 8 - }, -/obj/structure/window/reinforced, -/obj/effect/floor_decal/corner/blue/half{ - dir = 4; - icon_state = "bordercolorhalf" - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/venera/bridge) -"ac" = ( -/obj/item/broken_bottle, -/obj/item/ammo_casing/pistol/used, -/obj/random/trash, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 1 - }, -/turf/simulated/floor/tiled/dark, -/area/venera/bridge) -"ad" = ( -/obj/effect/decal/cleanable/filth, -/obj/structure/disposalpipe/segment{ - dir = 1; - icon_state = "pipe-c" - }, -/turf/simulated/floor/tiled/dark, -/area/venera/bridge) -"ae" = ( -/obj/machinery/door/airlock/sol{ - name = "Commanding Officer"; - req_access = list("ACCESS_CAPTAIN"); - secured_wires = 1 - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/dark/monotile, -/area/venera/bridge/co_office) -"ag" = ( -/obj/structure/lattice, -/obj/machinery/light/navigation/delay3, -/turf/space, -/area/space) -"ah" = ( -/obj/effect/floor_decal/corner/blue{ - dir = 10 - }, -/obj/effect/decal/cleanable/filth, -/obj/item/ammo_casing/pistol/used, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/dark, -/area/venera/bridge) -"ai" = ( -/obj/effect/floor_decal/corner/blue/three_quarters{ - dir = 4 - }, -/obj/effect/decal/cleanable/filth, -/obj/structure/barricade, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/dark, -/area/venera/bridge) -"aj" = ( -/obj/effect/floor_decal/corner/blue/mono, -/obj/effect/decal/cleanable/filth, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/dark/monotile, -/area/venera/bridge) -"ak" = ( -/obj/machinery/pointdefense_control{ - initial_id_tag = "venera_primary_pd"; - name = "Point Defense Controller" - }, -/obj/effect/floor_decal/corner/blue/mono, -/obj/effect/floor_decal/industrial/outline/red, -/obj/machinery/light, -/turf/simulated/floor/tiled/dark/monotile, -/area/venera/bridge) -"am" = ( -/obj/effect/wallframe_spawn/reinforced/polarized{ - id = "venera_co_windows" - }, -/obj/machinery/door/firedoor, -/turf/simulated/floor/plating, -/area/venera/bridge/co_office) -"an" = ( -/obj/machinery/light/small{ - dir = 8 - }, -/obj/effect/floor_decal/industrial/outline/grey, -/obj/structure/closet/emcloset, -/obj/item/device/radio/map_preset/venera, -/turf/simulated/floor/tiled/techfloor, -/area/venera/maint/starboard/bridge) -"aq" = ( -/obj/structure/flora/pottedplant/dead, -/turf/simulated/floor/carpet/blue, -/area/venera/bridge/co_office) -"ar" = ( -/obj/effect/floor_decal/spline/fancy/wood{ - dir = 8 - }, -/obj/machinery/firealarm{ - dir = 4; - pixel_x = 24 - }, -/obj/machinery/light_switch{ - pixel_x = 23; - pixel_y = 24 - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/wood/walnut, -/area/venera/bridge/co_office) -"at" = ( -/obj/structure/closet/crate/paper_refill, -/turf/simulated/floor/tiled/techfloor, -/area/venera/maint/port) -"av" = ( -/obj/structure/table/woodentable_reinforced/ebony/walnut, -/obj/item/reagent_containers/food/drinks/glass2/wine, -/obj/item/reagent_containers/food/drinks/bottle/premiumwine{ - name = "Special Uve De Blanc" - }, -/obj/item/paper{ - info = "Captain![br] We recently received this bottle of wine. When they gave it to us, they said to tell you to enjoy this wonderful wine, because the time has almost come. Maybe it means something to you, Captain."; - name = "Captain Wine" - }, -/turf/simulated/floor/carpet/blue, -/area/venera/bridge/co_office) -"az" = ( -/turf/simulated/wall/prepainted, -/area/venera/bridge/co_office) -"aA" = ( -/obj/machinery/power/smes/buildable/preset/on_full, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/structure/cable/green{ - d2 = 4; - icon_state = "0-4" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/venera/engine/atmos) -"aB" = ( -/obj/structure/table/woodentable_reinforced/ebony/walnut, -/obj/item/tableflag, -/obj/random/cash, -/obj/random/cash, -/turf/simulated/floor/carpet/blue, -/area/venera/bridge/co_office) -"aD" = ( -/obj/effect/decal/cleanable/blood/splatter, -/obj/random/coin, -/obj/random/cash, -/turf/simulated/floor/carpet/blue, -/area/venera/bridge/co_office) -"aE" = ( -/turf/simulated/wall/prepainted, -/area/venera/engine) -"aF" = ( -/obj/structure/table/woodentable/walnut, -/obj/item/reagent_containers/food/drinks/glass2/rocks, -/obj/item/reagent_containers/food/drinks/glass2/rocks, -/obj/item/reagent_containers/food/drinks/glass2/wine, -/obj/machinery/alarm{ - pixel_y = 24 - }, -/turf/simulated/floor/wood/walnut, -/area/venera/bridge/co_office) -"aG" = ( -/obj/structure/table/woodentable/walnut, -/obj/item/toy/plushie/kitten, -/obj/item/device/flashlight/lamp/green, -/obj/item/device/radio/intercom/map_preset/venera{ - pixel_y = 21 - }, -/turf/simulated/floor/wood/walnut, -/area/venera/bridge/co_office) -"aH" = ( -/obj/structure/table/woodentable/walnut, -/obj/random/drinkbottle, -/obj/random/drinkbottle, -/obj/effect/decal/cleanable/cobweb2, -/turf/simulated/floor/wood/walnut, -/area/venera/bridge/co_office) -"aI" = ( -/obj/effect/floor_decal/spline/fancy/wood{ - dir = 1; - icon_state = "spline_fancy" - }, -/obj/machinery/hologram/holopad, -/obj/effect/decal/cleanable/blood/splatter, -/obj/random/coin, -/obj/random/cash, -/obj/random/cash, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/effect/landmark/corpse/venera/captain, -/turf/simulated/floor/wood/walnut, -/area/venera/bridge/co_office) -"aJ" = ( -/obj/effect/floor_decal/spline/fancy/wood{ - dir = 1; - icon_state = "spline_fancy" - }, -/obj/item/shreddedp, -/obj/effect/decal/cleanable/blood/drip, -/obj/random/coin, -/obj/random/cash, -/obj/random/cash, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/mob/living/simple_animal/hostile/meat/abomination/strong, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 4 - }, -/turf/simulated/floor/wood/walnut, -/area/venera/bridge/co_office) -"aK" = ( -/obj/machinery/door/airlock/sol{ - autoset_access = 0; - name = "CO's Quarters"; - req_access = list("ACCESS_CAPTAIN"); - secured_wires = 1 - }, -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/wood/walnut, -/area/venera/bridge/co_office) -"aM" = ( -/obj/structure/bed/chair/comfy/captain{ - color = "#666666"; - dir = 1; - icon_state = "capchair_preview" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/wood/walnut, -/area/venera/bridge/co_office) -"aN" = ( -/obj/structure/table/woodentable/walnut, -/obj/item/tank/emergency/oxygen/double, -/obj/machinery/firealarm{ - dir = 4; - pixel_x = 21 - }, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 8 - }, -/turf/simulated/floor/wood/walnut, -/area/venera/bridge/co_office) -"aP" = ( -/obj/structure/table/woodentable_reinforced/ebony/walnut, -/obj/item/storage/secure/briefcase/money, -/obj/item/paper/crumpled, -/obj/random/coin, -/obj/random/cash, -/obj/machinery/light, -/turf/simulated/floor/wood/walnut, -/area/venera/bridge/co_office) -"aR" = ( -/obj/structure/closet/secure_closet{ - health = 20000; - name = "Commanding Officer's locker"; - req_access = list("ACCESS_CAPTAIN") - }, -/obj/item/storage/secure/briefcase/heavysniper, -/obj/random/contraband, -/obj/item/disk/secret_project/science, -/obj/random/loot, -/turf/simulated/floor/wood/walnut, -/area/venera/bridge/co_office) -"aT" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/item/ammo_casing/rifle/used, -/obj/item/ammo_casing/rifle/used, -/obj/item/ammo_casing/rifle/used, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, -/obj/effect/catwalk_plated/dark, -/turf/simulated/floor/plating, -/area/venera/hallway) -"aU" = ( -/obj/effect/decal/cleanable/blood/splatter, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/effect/catwalk_plated/dark, -/turf/simulated/floor/plating, -/area/venera/hallway) -"aV" = ( -/obj/structure/catwalk, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/item/device/radio/map_preset/venera, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 1 - }, -/obj/random/snack, -/turf/simulated/floor/plating, -/area/venera/engine/atmos) -"aX" = ( -/turf/simulated/wall/prepainted, -/area/venera/hallway/eva) -"aY" = ( -/obj/structure/bed/padded, -/obj/item/bedsheet/captain, -/obj/effect/decal/cleanable/cobweb{ - dir = 4; - icon_state = "cobweb1" - }, -/turf/simulated/floor/wood/walnut, -/area/venera/bridge/co_office) -"aZ" = ( -/turf/simulated/floor/wood/walnut, -/area/venera/bridge/co_office) -"ba" = ( -/obj/structure/undies_wardrobe, -/turf/simulated/floor/wood/walnut, -/area/venera/bridge/co_office) -"bb" = ( -/turf/simulated/wall/r_wall/prepainted, -/area/venera/bridge) -"bd" = ( -/obj/random/junk, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/techfloor, -/area/venera/security) -"bf" = ( -/obj/random/mre, -/obj/structure/disposalpipe/segment{ - dir = 2; - icon_state = "pipe-c" - }, -/turf/simulated/floor/tiled/dark, -/area/venera/bridge) -"bg" = ( -/obj/machinery/power/port_gen/pacman/super{ - anchored = 1; - desc = "A upgraded power generator that utilizes uranium sheets as fuel. Can run for much longer than the standard PACMAN type generators. Rated for 80 kW max safe output."; - max_overheat = 300; - max_power_output = 6; - max_safe_output = 5; - max_sheets = 200; - max_temperature = 500; - name = "Upgraded S.U.P.E.R.P.A.C.M.A.N.-type Mark 4 Generator"; - rad_power = 1; - sheet_left = 20; - sheets = 20; - temperature_gain = 10; - time_per_sheet = 900 - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/structure/cable{ - d2 = 2; - icon_state = "0-2" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/venera/engine/atmos) -"bn" = ( -/obj/structure/catwalk, -/turf/space, -/area/space) -"bo" = ( -/obj/machinery/atmospherics/unary/engine{ - dir = 8 - }, -/turf/simulated/floor/plating, -/area/venera/engine/thrusterstarboard) -"br" = ( -/obj/structure/lattice, -/obj/machinery/light/navigation/delay2, -/turf/space, -/area/space) -"bs" = ( -/obj/machinery/atmospherics/pipe/simple/visible/fuel{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/random/trash, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/venera/engine/atmos) -"bt" = ( -/obj/effect/decal/cleanable/liquid_fuel, -/obj/effect/decal/cleanable/molten_item, -/turf/simulated/floor/plating, -/area/venera/hallway) -"bu" = ( -/obj/structure/grille, -/obj/structure/lattice, -/turf/space, -/area/space) -"bv" = ( -/obj/machinery/door/blast/regular{ - dir = 4; - id_tag = "venera_sensors_58"; - name = "Sensor Shroud" - }, -/turf/simulated/floor/reinforced/airless, -/area/venera/bridge) -"bw" = ( -/obj/machinery/power/smes/buildable/preset/on_full, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/structure/cable/green{ - d2 = 4; - icon_state = "0-4" - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/venera/engine/atmos) -"bx" = ( -/obj/machinery/shipsensors, -/turf/simulated/floor/reinforced/airless, -/area/venera/bridge) -"by" = ( -/obj/structure/table/standard, -/obj/machinery/reagentgrinder/juicer, -/obj/item/reagent_containers/glass/beaker{ - pixel_x = 5 - }, -/obj/item/reagent_containers/glass/beaker{ - pixel_x = 5 - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/turf/simulated/floor/tiled, -/area/venera/living/hydro) -"bA" = ( -/obj/random/trash, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, -/obj/effect/catwalk_plated/dark, -/turf/simulated/floor/plating, -/area/venera/hallway) -"bB" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/venera/maint/port) -"bD" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 4 - }, -/obj/machinery/firealarm{ - dir = 2; - pixel_y = 24 - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/venera/maint/port) -"bE" = ( -/obj/effect/wallframe_spawn/reinforced/hull, -/obj/machinery/door/firedoor, -/turf/simulated/floor/plating, -/area/venera/disperser) -"bF" = ( -/obj/structure/lattice, -/obj/structure/grille, -/turf/space, -/area/space) -"bG" = ( -/obj/structure/closet/secure_closet/guncabinet, -/obj/random/energy, -/turf/simulated/floor/tiled/dark/monotile, -/area/venera/bridge) -"bI" = ( -/obj/machinery/pointdefense{ - initial_id_tag = "venera_primary_pd" - }, -/obj/machinery/power/terminal{ - dir = 4 - }, -/obj/structure/cable/green{ - d2 = 4; - icon_state = "0-4" - }, -/turf/simulated/floor/reinforced/airless, -/area/space) -"bJ" = ( -/turf/simulated/floor/reinforced/airless, -/area/space) -"bK" = ( -/turf/simulated/floor/tiled/dark, -/area/venera/bridge) -"bL" = ( -/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/structure/cable/yellow{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/turf/simulated/floor/airless, -/area/venera/engine/solar/starboard) -"bM" = ( -/obj/effect/paint/hull, -/turf/simulated/wall/titanium, -/area/space) -"bN" = ( -/obj/structure/grille, -/obj/structure/cable/green{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/turf/simulated/floor/reinforced/airless, -/area/space) -"bO" = ( -/obj/machinery/door/airlock/multi_tile/glass/security{ - name = "Security Wing" - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/door/firedoor, -/turf/simulated/floor/tiled/techfloor/grid, -/area/venera/security/lobby) -"bP" = ( -/obj/structure/lattice, -/turf/space, -/area/space) -"bQ" = ( -/obj/structure/table/rack{ - dir = 8 - }, -/obj/item/tank/emergency/oxygen/double, -/obj/item/tank/emergency/oxygen/double, -/obj/item/tank/emergency/oxygen/double, -/obj/item/tank/emergency/oxygen/double, -/obj/item/tank/emergency/oxygen/double, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/techfloor/grid, -/area/venera/hallway/eva) -"bR" = ( -/obj/structure/lattice, -/obj/machinery/light/navigation/delay4, -/turf/space, -/area/space) -"bS" = ( -/obj/structure/ship_munition/disperser_charge/explosive, -/obj/effect/floor_decal/industrial/hatch/red, -/turf/simulated/floor/plating, -/area/venera/disperser/storage) -"bT" = ( -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/venera/disperser/storage) -"bU" = ( -/obj/effect/floor_decal/industrial/hatch/blue, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 8 - }, -/turf/simulated/floor/plating, -/area/venera/disperser/storage) -"bV" = ( -/turf/simulated/floor/tiled/techfloor, -/area/venera/maint/starboard/bridge) -"bW" = ( -/obj/structure/table/steel_reinforced, -/obj/item/handcuffs/cable/red, -/turf/simulated/floor/tiled/techfloor/grid, -/area/venera/security/lobby) -"bX" = ( -/obj/effect/floor_decal/industrial/hatch/red, -/turf/simulated/floor/plating, -/area/venera/disperser/storage) -"bY" = ( -/obj/structure/ship_munition/disperser_charge/emp, -/obj/effect/floor_decal/industrial/hatch/blue, -/turf/simulated/floor/plating, -/area/venera/disperser/storage) -"bZ" = ( -/obj/effect/floor_decal/industrial/hatch, -/obj/structure/closet/crate{ - name = "hermes crate" - }, -/obj/random/loot, -/obj/structure/cable/green{ - d2 = 4; - icon_state = "0-4" - }, -/obj/machinery/power/apc{ - dir = 2; - name = "south bump"; - pixel_y = -24 - }, -/turf/simulated/floor/plating, -/area/venera/disperser/storage) -"ca" = ( -/obj/machinery/door/airlock/highsecurity{ - autoset_access = 0; - icon_state = "closed"; - name = "Bridge Armory" - }, -/obj/machinery/door/firedoor, -/turf/simulated/floor/tiled/dark/monotile, -/area/venera/bridge) -"cb" = ( -/obj/machinery/door/airlock/maintenance{ - name = "Security Wing Maintenance"; - secured_wires = 1 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/door/firedoor, -/turf/simulated/floor/tiled/steel_ridged, -/area/venera/security/lobby) -"cc" = ( -/obj/machinery/disposal/deliveryChute{ - dir = 1 - }, -/obj/structure/disposalpipe/trunk, -/obj/machinery/door/window/westright{ - dir = 1; - name = "Ammunition Chute" - }, -/turf/simulated/floor/plating, -/area/venera/disperser) -"cd" = ( -/obj/machinery/door/airlock/command{ - autoset_access = 0; - name = "Obstruction Field Disperser Magazine"; - secured_wires = 1 - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/dark/monotile, -/area/venera/disperser) -"ce" = ( -/obj/machinery/computer/ship/sensors, -/obj/effect/floor_decal/corner/blue/mono, -/turf/simulated/floor/tiled/dark/monotile, -/area/venera/bridge) -"cg" = ( -/obj/machinery/atmospherics/unary/tank/carbon_dioxide{ - dir = 1; - start_pressure = 8533.13 - }, -/obj/machinery/light, -/turf/simulated/floor/tiled/techfloor, -/area/venera/engine/thrusterport) -"ch" = ( -/obj/machinery/computer/modular/preset/security, -/obj/effect/floor_decal/corner/blue/mono, -/obj/machinery/alarm{ - pixel_y = 24 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/venera/bridge) -"ci" = ( -/obj/structure/table/steel_reinforced, -/obj/effect/floor_decal/corner/blue/mono, -/obj/item/storage/pill_bottle/assorted, -/obj/machinery/recharger/wallcharger{ - pixel_x = 0; - pixel_y = 24 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/venera/bridge) -"cj" = ( -/obj/structure/table/steel_reinforced, -/obj/effect/floor_decal/corner/blue/mono, -/obj/structure/noticeboard{ - pixel_x = 0; - pixel_y = 32 - }, -/obj/item/book/manual/solgov_law{ - pixel_x = 3; - pixel_y = 3 - }, -/obj/machinery/photocopier/faxmachine{ - department = "Venera - Bridge" - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/venera/bridge) -"ck" = ( -/obj/effect/floor_decal/corner/blue/mono, -/turf/simulated/floor/tiled/dark/monotile, -/area/venera/bridge) -"cl" = ( -/obj/item/material/shard, -/obj/structure/table/steel, -/turf/simulated/floor/tiled/techfloor, -/area/venera/security/lobby) -"cm" = ( -/turf/simulated/floor/airless, -/area/venera/disperser) -"cn" = ( -/obj/structure/disposaloutlet, -/obj/structure/disposalpipe/trunk, -/turf/simulated/floor/airless, -/area/venera/disperser) -"co" = ( -/obj/structure/disposalpipe/segment, -/obj/effect/wallframe_spawn/reinforced, -/turf/simulated/floor/plating, -/area/venera/disperser) -"cp" = ( -/obj/structure/extinguisher_cabinet{ - pixel_x = -32 - }, -/obj/effect/decal/cleanable/filth, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/disposalpipe/segment{ - dir = 4; - icon_state = "pipe-c" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/dark, -/area/venera/disperser) -"cq" = ( -/obj/effect/floor_decal/corner/blue/full, -/obj/random/firstaid, -/obj/structure/table/steel_reinforced, -/obj/machinery/light{ - dir = 8; - icon_state = "tube1" - }, -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/turf/simulated/floor/tiled/dark, -/area/venera/bridge) -"cr" = ( -/obj/structure/bed/chair/comfy/blue{ - dir = 1; - icon_state = "comfychair_preview" - }, -/obj/effect/floor_decal/corner/blue{ - dir = 5 - }, -/turf/simulated/floor/tiled/dark, -/area/venera/bridge) -"cs" = ( -/obj/machinery/button/blast_door{ - desc = "It controls sensors blast doors, remotely."; - id_tag = "venera_sensors_58"; - name = "Sensor Shroud Control"; - pixel_x = -5; - pixel_y = 28 - }, -/obj/effect/floor_decal/corner/blue{ - dir = 5 - }, -/obj/effect/decal/cleanable/filth, -/turf/simulated/floor/tiled/dark, -/area/venera/bridge) -"ct" = ( -/obj/effect/floor_decal/corner/blue{ - dir = 5 - }, -/turf/simulated/floor/tiled/dark, -/area/venera/bridge) -"cu" = ( -/obj/effect/floor_decal/corner/blue/three_quarters{ - dir = 1 - }, -/obj/structure/barricade/spike{ - dir = 4 - }, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/tiled/dark, -/area/venera/bridge) -"cw" = ( -/turf/simulated/wall/prepainted, -/area/venera/living) -"cC" = ( -/obj/effect/floor_decal/spline/fancy/black{ - dir = 9; - icon_state = "spline_fancy" - }, -/obj/structure/fireaxecabinet{ - pixel_y = 32 - }, -/turf/simulated/floor/tiled/dark, -/area/venera/bridge) -"cD" = ( -/obj/effect/floor_decal/spline/fancy/black{ - dir = 1; - icon_state = "spline_fancy" - }, -/obj/structure/extinguisher_cabinet{ - pixel_y = 32 - }, -/obj/random/trash, -/turf/simulated/floor/tiled/dark, -/area/venera/bridge) -"cE" = ( -/obj/effect/floor_decal/spline/fancy/black{ - dir = 5; - icon_state = "spline_fancy" - }, -/obj/effect/decal/cleanable/cobweb2, -/obj/structure/reagent_dispensers/water_cooler{ - dir = 8 - }, -/obj/machinery/light{ - dir = 1; - icon_state = "tube1" - }, -/turf/simulated/floor/tiled/dark, -/area/venera/bridge) -"cF" = ( -/obj/machinery/door/airlock/multi_tile/glass/security{ - locked = 1; - name = "Security Lobby"; - welded = 1 - }, -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/techfloor/grid, -/area/venera/security) -"cG" = ( -/obj/structure/wall_frame, -/obj/item/material/shard, -/obj/effect/paint/black, -/obj/machinery/door/firedoor, -/turf/simulated/floor/plating, -/area/venera/security/lobby) -"cH" = ( -/obj/machinery/light{ - dir = 1; - icon_state = "tube1" - }, -/obj/structure/sign/warning/nosmoking_1{ - desc = "A warning sign which reads 'NO SMOKING'. Someone has scratched a variety of crude words in gutter across the entire sign."; - pixel_x = 0; - pixel_y = 26 - }, -/obj/machinery/atmospherics/unary/vent_pump/on, -/turf/simulated/floor/plating, -/area/venera/engine/thrusterstarboard) -"cJ" = ( -/obj/machinery/pointdefense{ - initial_id_tag = "venera_primary_pd" - }, -/obj/machinery/power/terminal, -/obj/structure/cable/green{ - d2 = 2; - icon_state = "0-2" - }, -/turf/simulated/floor/reinforced/airless, -/area/venera/bridge) -"cK" = ( -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/airless, -/area/venera/disperser) -"cL" = ( -/obj/structure/railing/mapped, -/obj/structure/catwalk, -/obj/structure/disposalpipe/segment, -/obj/effect/decal/cleanable/cobweb, -/turf/simulated/floor/plating, -/area/venera/disperser) -"cN" = ( -/obj/structure/railing/mapped, -/obj/structure/catwalk, -/obj/random/junk, -/turf/simulated/floor/plating, -/area/venera/disperser) -"cO" = ( -/obj/machinery/turretid/lethal{ - dir = 4; - id_tag = "venera_turret_58"; - locked = 0; - name = "SGV Venera Defence Turret control panel"; - pixel_x = -28 - }, -/obj/effect/floor_decal/corner/blue{ - dir = 9 - }, -/obj/effect/decal/cleanable/blood/splatter, -/obj/structure/disposalpipe/segment{ - dir = 4; - icon_state = "pipe-c" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/dark, -/area/venera/bridge) -"cQ" = ( -/obj/effect/decal/cleanable/blood/drip, -/obj/random/loot, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark, -/area/venera/bridge) -"cR" = ( -/obj/effect/decal/cleanable/filth, -/obj/effect/decal/cleanable/blood/drip, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark, -/area/venera/bridge) -"cS" = ( -/obj/effect/floor_decal/corner/blue{ - dir = 6 - }, -/obj/item/storage/wallet/random, -/obj/structure/disposalpipe/junction{ - dir = 4; - icon_state = "pipe-j2" - }, -/turf/simulated/floor/tiled/dark, -/area/venera/bridge) -"cT" = ( -/obj/effect/floor_decal/spline/fancy/black{ - dir = 8; - icon_state = "spline_fancy" - }, -/obj/effect/decal/cleanable/blood/drip, -/mob/living/simple_animal/hostile/meat/strippedhuman, -/obj/item/clothing/under/solgov/dress/expeditionary/command/skirt/security, -/obj/random/solgov, -/obj/effect/decal/cleanable/blood/splatter, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark, -/area/venera/bridge) -"cV" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/fuel{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/item/ammo_casing/rifle/used, -/obj/item/ammo_casing/rifle/used, -/obj/effect/decal/cleanable/blood/splatter, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 1 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/venera/hallway) -"cW" = ( -/obj/structure/table/steel_reinforced, -/obj/effect/floor_decal/spline/fancy/black{ - dir = 4; - icon_state = "spline_fancy" - }, -/obj/machinery/recharger/wallcharger{ - dir = 8; - icon_state = "wrecharger0"; - pixel_x = 23; - pixel_y = -3 - }, -/obj/item/storage/toolbox/mechanical, -/obj/item/storage/toolbox/electrical{ - pixel_x = 1; - pixel_y = -1 - }, -/obj/item/reagent_containers/food/drinks/bottle/prosecco, -/obj/item/reagent_containers/food/drinks/sillycup, -/obj/item/reagent_containers/food/drinks/sillycup, -/obj/item/reagent_containers/food/drinks/sillycup, -/turf/simulated/floor/tiled/dark, -/area/venera/bridge) -"cY" = ( -/obj/effect/floor_decal/corner/red{ - dir = 5 - }, -/obj/effect/floor_decal/corner/blue{ - dir = 8 - }, -/obj/structure/closet/emcloset, -/obj/structure/cable/green{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/machinery/light{ - dir = 1; - icon_state = "tube1" - }, -/obj/item/device/radio/map_preset/venera, -/turf/simulated/floor/tiled/dark, -/area/venera/hallway) -"cZ" = ( -/obj/item/material/shard, -/obj/effect/floor_decal/corner/red{ - dir = 5 - }, -/turf/simulated/floor/tiled/dark, -/area/venera/hallway) -"da" = ( -/obj/structure/disposalpipe/segment{ - dir = 1; - icon_state = "pipe-c" - }, -/turf/simulated/floor/airless, -/area/venera/disperser) -"db" = ( -/obj/machinery/door/blast/regular{ - dir = 4; - id_tag = "venera_disperserwindow_58_bd"; - name = "OFD Blast Door" - }, -/obj/effect/wallframe_spawn/reinforced/hull, -/obj/machinery/door/firedoor, -/turf/simulated/floor/plating, -/area/venera/disperser) -"dc" = ( -/obj/machinery/computer/modular/preset/cardslot/command{ - dir = 4; - icon_state = "console" - }, -/obj/structure/disposalpipe/segment{ - dir = 8; - icon_state = "pipe-c" - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/venera/disperser) -"dd" = ( -/obj/structure/table/steel, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/venera/disperser) -"de" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/wall/r_wall/hull, -/area/venera/engine/thrusterport) -"df" = ( -/obj/effect/floor_decal/corner/blue{ - dir = 1 - }, -/obj/effect/floor_decal/corner/red{ - dir = 8 - }, -/obj/effect/decal/cleanable/filth, -/obj/effect/decal/cleanable/blood/drip, -/obj/machinery/recharger/wallcharger{ - dir = 4; - icon_state = "wrecharger0"; - pixel_x = -23; - pixel_y = -3 - }, -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/dark, -/area/venera/bridge) -"dg" = ( -/obj/machinery/computer/ship/engines{ - dir = 4; - icon_state = "computer" - }, -/obj/structure/window/reinforced{ - dir = 8 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/venera/bridge) -"dh" = ( -/obj/effect/floor_decal/scglogo{ - icon_state = "top-left" - }, -/obj/random/junk, -/turf/simulated/floor/tiled/dark, -/area/venera/bridge) -"di" = ( -/obj/effect/floor_decal/scglogo{ - icon_state = "top-center" - }, -/obj/effect/decal/cleanable/filth, -/turf/simulated/floor/tiled/dark, -/area/venera/bridge) -"dj" = ( -/obj/effect/floor_decal/scglogo{ - icon_state = "top-right" - }, -/turf/simulated/floor/tiled/dark, -/area/venera/bridge) -"dk" = ( -/obj/machinery/computer/modular/preset/cardslot/command{ - dir = 4; - icon_state = "console" - }, -/obj/structure/window/reinforced{ - dir = 8 - }, -/obj/structure/window/reinforced{ - dir = 1 - }, -/obj/effect/floor_decal/corner/blue/half{ - dir = 4; - icon_state = "bordercolorhalf" - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/venera/bridge) -"dm" = ( -/obj/effect/floor_decal/spline/fancy/black{ - dir = 8; - icon_state = "spline_fancy" - }, -/obj/effect/decal/cleanable/blood/splatter, -/turf/simulated/floor/tiled/dark, -/area/venera/bridge) -"dn" = ( -/obj/effect/floor_decal/spline/fancy/black{ - dir = 4; - icon_state = "spline_fancy" - }, -/obj/effect/decal/cleanable/blood/drip, -/obj/random/medical/lite, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/unary/vent_pump/on, -/turf/simulated/floor/tiled/dark, -/area/venera/bridge) -"do" = ( -/obj/machinery/door/airlock/sol{ - name = "Bridge"; - secured_wires = 1; - welded = 1 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/door/firedoor, -/turf/simulated/floor/tiled/dark/monotile, -/area/venera/bridge) -"dp" = ( -/obj/machinery/barrier{ - anchored = 1; - locked = 1 - }, -/obj/effect/floor_decal/corner/blue{ - dir = 9 - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark, -/area/venera/hallway) -"dq" = ( -/obj/machinery/barrier, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, -/obj/effect/catwalk_plated/dark, -/turf/simulated/floor/plating, -/area/venera/hallway) -"dr" = ( -/obj/item/flamethrower, -/obj/item/ammo_casing/rifle/used, -/obj/machinery/light{ - dir = 1; - icon_state = "tube1" - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/venera/hallway) -"ds" = ( -/obj/effect/decal/cleanable/liquid_fuel, -/obj/random/vendor, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/venera/hallway) -"dt" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/venera/maint/port) -"du" = ( -/obj/effect/decal/cleanable/liquid_fuel, -/obj/effect/decal/cleanable/molten_item, -/obj/effect/floor_decal/corner/black{ - dir = 5 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/decal/cleanable/blood/splatter, -/obj/item/ammo_casing/pistol/used, -/obj/item/ammo_casing/pistol/used, -/obj/item/ammo_casing/pistol/used, -/obj/item/ammo_magazine/pistol/empty, -/turf/simulated/floor/tiled/dark, -/area/venera/hallway) -"dv" = ( -/obj/machinery/shield_diffuser, -/obj/machinery/door/blast/regular{ - dir = 4; - id_tag = "venera_disperser_58_bd"; - name = "OFD Blast Door" - }, -/turf/simulated/floor/airless, -/area/venera/disperser) -"dw" = ( -/obj/machinery/disperser/front{ - dir = 8 - }, -/turf/simulated/floor/airless, -/area/venera/disperser) -"dx" = ( -/obj/machinery/disperser/middle{ - dir = 8 - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/airless, -/area/venera/disperser) -"dy" = ( -/obj/machinery/disperser/back{ - dir = 8 - }, -/turf/simulated/floor/airless, -/area/venera/disperser) -"dz" = ( -/obj/machinery/computer/ship/disperser{ - dir = 4; - icon_state = "computer" - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/venera/disperser) -"dA" = ( -/obj/structure/bed/chair/comfy/black{ - dir = 8 - }, -/obj/machinery/button/blast_door{ - desc = "A remote control-switch for the Bluespace Artillery's core."; - id_tag = "venera_disperser_58_bd"; - name = "Artillery Core Blast Doors"; - pixel_x = -5; - pixel_y = 28 - }, -/obj/machinery/button/blast_door{ - desc = "A remote control-switch for the Bluespace Artillery observation windows."; - id_tag = "venera_disperserwindow_58_bd"; - name = "Observation Blast Doors"; - pixel_x = 5; - pixel_y = 28 - }, -/obj/item/device/radio/intercom/map_preset/venera{ - dir = 1; - pixel_y = -31 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/venera/disperser) -"dC" = ( -/obj/machinery/hologram/holopad, -/obj/structure/cable/green{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/structure/disposalpipe/segment{ - dir = 1; - icon_state = "pipe-c" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 8 - }, -/turf/simulated/floor/tiled/dark, -/area/venera/disperser) -"dD" = ( -/obj/machinery/door/airlock/highsecurity{ - autoset_access = 0; - icon_state = "closed"; - name = "Fire Control" - }, -/obj/effect/decal/cleanable/blood/drip, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/venera/bridge) -"dE" = ( -/obj/effect/floor_decal/corner/red{ - dir = 9 - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/random/trash, -/obj/structure/disposalpipe/segment{ - dir = 8; - icon_state = "pipe-c" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark, -/area/venera/bridge) -"dF" = ( -/obj/machinery/computer/ship/helm{ - dir = 4; - icon_state = "computer"; - req_access = list(list("ACCESS_TORCH_HELM")) - }, -/obj/structure/window/reinforced{ - dir = 8 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/venera/bridge) -"dG" = ( -/obj/effect/floor_decal/scglogo{ - icon_state = "center-left" - }, -/obj/structure/bed/chair/comfy/blue{ - dir = 8 - }, -/turf/simulated/floor/tiled/dark, -/area/venera/bridge) -"dI" = ( -/obj/structure/cable/yellow{ - d2 = 2; - icon_state = "0-2" - }, -/obj/machinery/power/tracker, -/turf/simulated/floor/airless, -/area/venera/engine/solar/starboard) -"dK" = ( -/obj/machinery/portable_atmospherics/canister/carbon_dioxide{ - start_pressure = 7559.63 - }, -/turf/simulated/floor/tiled/techfloor, -/area/venera/engine/thrusterport) -"dO" = ( -/obj/effect/decal/cleanable/blood/splatter, -/mob/living/simple_animal/hostile/meat/humansecurity{ - desc = "What's left of a Venera security guard. That armor they wore in life now gives them a bit of hardiness in death..."; - health = 300; - maxHealth = 300; - name = "turned Venera security" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/venera/medbay) -"dQ" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/sign/warning/hot_exhaust{ - dir = 4; - icon_state = "fire" - }, -/turf/simulated/wall/r_wall/hull, -/area/venera/engine/thrusterstarboard) -"eb" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/turf/simulated/floor/plating, -/area/venera/security/detective) -"ef" = ( -/obj/effect/wallframe_spawn/reinforced/polarized{ - id = "venera_interviewwindow" - }, -/obj/machinery/door/firedoor, -/turf/simulated/floor/plating, -/area/venera/security/questioning) -"eg" = ( -/obj/effect/floor_decal/industrial/outline/grey, -/obj/structure/closet/toolcloset, -/obj/random/tech_supply, -/obj/random/tech_supply, -/obj/random/tool, -/obj/random/tool, -/turf/simulated/floor/tiled/techfloor, -/area/venera/maint/port) -"eh" = ( -/obj/machinery/atmospherics/pipe/simple/visible/green{ - dir = 6; - icon_state = "intact" - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/venera/engine/atmos) -"el" = ( -/turf/simulated/wall/r_wall/prepainted, -/area/venera/security/questioning) -"em" = ( -/obj/machinery/barrier, -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 1 - }, -/obj/effect/catwalk_plated/dark, -/turf/simulated/floor/plating, -/area/venera/hallway) -"en" = ( -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/structure/cable/yellow{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/airless, -/area/venera/engine/solar/starboard) -"er" = ( -/obj/machinery/sleeper{ - dir = 4 - }, -/obj/effect/floor_decal/corner/paleblue/mono, -/turf/simulated/floor/tiled/white/monotile, -/area/venera/medbay) -"eu" = ( -/obj/machinery/computer/modular/preset/cardslot/command{ - dir = 4; - icon_state = "console" - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/venera/disperser) -"ew" = ( -/mob/living/simple_animal/hostile/meat/humansecurity{ - desc = "What's left of a Venera security guard. That armor they wore in life now gives them a bit of hardiness in death..."; - health = 300; - maxHealth = 300; - name = "turned Venera security" - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/disposalpipe/segment{ - dir = 8; - icon_state = "pipe-c" - }, -/turf/simulated/floor/plating, -/area/venera/security) -"ez" = ( -/obj/random/trash, -/obj/machinery/atmospherics/pipe/manifold/hidden{ - dir = 8; - icon_state = "map" - }, -/turf/simulated/floor/tiled/techmaint, -/area/venera/engine/atmos) -"eB" = ( -/obj/machinery/atmospherics/pipe/manifold/visible/cyan, -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/obj/structure/railing/mapped, -/turf/simulated/floor/plating, -/area/venera/engine/atmos) -"eD" = ( -/obj/effect/floor_decal/spline/fancy/wood, -/obj/structure/barricade/spike, -/turf/simulated/floor/tiled/dark, -/area/venera/living/mess) -"eL" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/obj/effect/landmark/corpse/venera/engineer, -/turf/simulated/floor/tiled/techfloor, -/area/venera/hallway/eva) -"eM" = ( -/obj/random/medical, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/venera/medbay) -"eP" = ( -/obj/effect/floor_decal/spline/fancy/black{ - dir = 8; - icon_state = "spline_fancy" - }, -/obj/effect/decal/cleanable/filth, -/mob/living/simple_animal/hostile/meat/horrorsmall, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark, -/area/venera/bridge) -"eU" = ( -/obj/item/modular_computer/telescreen/preset/medical{ - pixel_x = 32 - }, -/obj/item/hand_labeler, -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/hygiene/sink{ - dir = 4; - icon_state = "sink"; - pixel_x = 11; - pixel_y = 0 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/venera/medbay) -"eV" = ( -/obj/random/junk, -/turf/simulated/floor/plating, -/area/venera/security/detective) -"eW" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/wall/r_wall/hull, -/area/venera/disperser) -"eZ" = ( -/obj/structure/cable/green{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden{ - dir = 1; - icon_state = "map" - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/venera/maint/port) -"fa" = ( -/obj/effect/floor_decal/corner/green{ - dir = 5 - }, -/obj/item/ammo_casing/rifle/used, -/obj/structure/disposalpipe/segment{ - dir = 4; - icon_state = "pipe-c" - }, -/turf/simulated/floor/tiled/dark, -/area/venera/hallway) -"fb" = ( -/obj/effect/floor_decal/scglogo, -/obj/machinery/hologram/holopad/longrange, -/obj/effect/gibspawner/human, -/turf/simulated/floor/tiled/dark, -/area/venera/bridge) -"fc" = ( -/obj/effect/floor_decal/corner/paleblue/three_quarters{ - dir = 8; - icon_state = "corner_white_three_quarters" - }, -/obj/effect/decal/cleanable/blood/splatter, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/venera/medbay) -"fd" = ( -/obj/effect/floor_decal/corner/paleblue{ - dir = 10 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/venera/medbay) -"ff" = ( -/obj/effect/floor_decal/corner/green/three_quarters{ - dir = 8 - }, -/obj/machinery/light{ - dir = 8; - icon_state = "tube1" - }, -/turf/simulated/floor/tiled, -/area/venera/living/hydro) -"fj" = ( -/obj/structure/reagent_dispensers/fueltank, -/obj/structure/cable/green, -/obj/machinery/power/apc{ - dir = 2; - name = "south bump"; - pixel_y = -24 - }, -/obj/effect/floor_decal/industrial/hatch/yellow, -/turf/simulated/floor/tiled/techfloor/grid, -/area/venera/hallway/eva) -"fn" = ( -/obj/machinery/door/window/brigdoor/eastleft{ - autoset_access = 0; - dir = 1; - id = "venera_cell1"; - name = "Cell One"; - req_access = list("ACCESS_BRIG") - }, -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/techfloor/grid, -/area/venera/security) -"fp" = ( -/obj/random/junk, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/venera/security) -"fr" = ( -/obj/machinery/door/airlock/hatch/maintenance, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/door/firedoor, -/turf/simulated/floor/tiled/steel_ridged, -/area/venera/maint/port) -"fu" = ( -/obj/machinery/light{ - dir = 4; - icon_state = "tube1" - }, -/turf/simulated/floor/tiled, -/area/venera/engine) -"fv" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/fuel, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/random/trash, -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/tiled/white, -/area/venera/living) -"fw" = ( -/obj/machinery/light{ - dir = 8; - icon_state = "tube1" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/techfloor, -/area/venera/security) -"fx" = ( -/obj/structure/table/standard, -/obj/machinery/reagent_temperature, -/obj/machinery/light{ - dir = 1; - icon_state = "tube1" - }, -/turf/simulated/floor/tiled/white, -/area/venera/medbay/chemistry) -"fz" = ( -/obj/machinery/door/airlock/highsecurity{ - name = "Security Armory" - }, -/turf/simulated/floor/plating, -/area/venera/security) -"fA" = ( -/obj/effect/floor_decal/spline/fancy/black{ - dir = 1; - icon_state = "spline_fancy" - }, -/obj/random/trash, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/dark, -/area/venera/hallway) -"fD" = ( -/obj/effect/floor_decal/spline/fancy/wood{ - dir = 1; - icon_state = "spline_fancy" - }, -/obj/item/shreddedp, -/obj/effect/decal/cleanable/blood/drip, -/obj/random/coin, -/obj/random/cash, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 4 - }, -/turf/simulated/floor/wood/walnut, -/area/venera/bridge/co_office) -"fG" = ( -/obj/effect/floor_decal/corner/green{ - dir = 10; - icon_state = "corner_white" - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/valve/shutoff/supply, -/obj/machinery/atmospherics/valve/shutoff/scrubbers, -/obj/effect/floor_decal/industrial/shutoff, -/turf/simulated/floor/tiled/dark, -/area/venera/hallway) -"fK" = ( -/obj/structure/disposalpipe/segment{ - dir = 8; - icon_state = "pipe-c" - }, -/obj/random/trash, -/turf/simulated/floor/plating, -/area/venera/maint/port) -"fL" = ( -/obj/structure/barricade/spike, -/turf/simulated/floor/tiled/techfloor, -/area/venera/security) -"fP" = ( -/obj/structure/railing/mapped, -/obj/structure/railing/mapped{ - dir = 8; - icon_state = "railing0-1" - }, -/obj/structure/largecrate, -/obj/random/maintenance/solgov, -/obj/random/maintenance/solgov, -/obj/random/maintenance/solgov, -/obj/machinery/atmospherics/binary/pump/on{ - dir = 8; - target_pressure = 200 - }, -/turf/simulated/floor/plating, -/area/venera/maint/port) -"fQ" = ( -/obj/machinery/power/smes/buildable/preset/on_full, -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/cable{ - d2 = 2; - icon_state = "0-2" - }, -/turf/simulated/floor/tiled/techmaint, -/area/venera/engine/atmos) -"fR" = ( -/obj/structure/ship_munition/disperser_charge/emp, -/obj/effect/floor_decal/industrial/hatch/blue, -/obj/machinery/alarm{ - dir = 1; - icon_state = "alarm0"; - pixel_y = -22 - }, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 8 - }, -/turf/simulated/floor/plating, -/area/venera/disperser/storage) -"fS" = ( -/obj/effect/floor_decal/corner/grey/diagonal, -/obj/machinery/light_switch{ - pixel_x = -23; - pixel_y = 25 - }, -/turf/simulated/floor/tiled/white, -/area/venera/living/mess) -"fU" = ( -/obj/structure/cable/green{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/plating, -/area/venera/security/lobby) -"fW" = ( -/obj/item/stack/material/plasteel, -/turf/space, -/area/venera/hallway/eva) -"fX" = ( -/turf/simulated/floor/reinforced/airless, -/area/venera/bridge) -"fY" = ( -/obj/effect/floor_decal/corner/red{ - dir = 4; - icon_state = "corner_white" - }, -/obj/item/ammo_casing/rifle/used, -/obj/item/ammo_casing/rifle/used, -/obj/item/ammo_casing/rifle/used, -/obj/item/ammo_casing/rifle/used, -/obj/item/ammo_casing/rifle/used, -/obj/structure/disposalpipe/junction{ - dir = 4; - icon_state = "pipe-j1" - }, -/obj/machinery/atmospherics/unary/vent_pump/on, -/turf/simulated/floor/tiled/dark, -/area/venera/hallway) -"gb" = ( -/obj/effect/floor_decal/scglogo{ - icon_state = "center-right" - }, -/obj/effect/decal/cleanable/blood/splatter, -/turf/simulated/floor/tiled/dark, -/area/venera/bridge) -"ge" = ( -/obj/structure/table/standard, -/obj/random/gloves, -/obj/machinery/atmospherics/unary/vent_pump/on, -/turf/simulated/floor/tiled, -/area/venera/living/hydro) -"gh" = ( -/obj/structure/inflatable/door, -/obj/machinery/shield_diffuser, -/turf/simulated/floor/airless, -/area/venera/hallway/eva) -"gi" = ( -/obj/machinery/atmospherics/pipe/simple/visible/green{ - dir = 4; - icon_state = "intact" - }, -/obj/random/trash, -/obj/machinery/atmospherics/pipe/simple/visible/fuel, -/obj/structure/railing/mapped{ - dir = 8; - icon_state = "railing0-1" - }, -/turf/simulated/floor/plating, -/area/venera/engine/atmos) -"gl" = ( -/obj/machinery/vending/engivend, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/alarm{ - pixel_y = 24 - }, -/turf/simulated/floor/tiled/steel_grid, -/area/venera/engine) -"gq" = ( -/obj/effect/floor_decal/corner/blue{ - dir = 10 - }, -/obj/item/ammo_casing/pistol/used, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/dark, -/area/venera/bridge) -"gr" = ( -/obj/machinery/door/airlock/external{ - frequency = 1379; - id_tag = "venera_bsa_in"; - locked = 1; - name = "Obstruction Field Disperser Maintenance Internal Airlock" - }, -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/venera/disperser) -"gs" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/turf/simulated/floor/tiled/dark, -/area/venera/hallway) -"gv" = ( -/obj/structure/hygiene/drain, -/turf/simulated/floor/tiled/freezer, -/area/venera/living) -"gx" = ( -/obj/machinery/atmospherics/pipe/simple/visible/fuel{ - dir = 6 - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/venera/engine/thrusterport) -"gy" = ( -/obj/structure/cable/green{ - d2 = 2; - icon_state = "0-2" - }, -/obj/machinery/power/apc{ - dir = 1; - name = "north bump"; - pixel_x = 0; - pixel_y = 24 - }, -/obj/machinery/firealarm{ - dir = 8; - pixel_x = -24 - }, -/obj/machinery/light_switch{ - pixel_x = -23; - pixel_y = 25 - }, -/turf/simulated/floor/plating, -/area/venera/engine/thrusterstarboard) -"gz" = ( -/obj/structure/inflatable/door, -/turf/simulated/floor/tiled/techfloor, -/area/venera/hallway/eva) -"gB" = ( -/obj/machinery/door/blast/regular{ - dir = 4; - id_tag = "venera_md_58_bd"; - name = "Mass Driver Blast Door" - }, -/turf/simulated/floor/airless, -/area/venera/disperser) -"gD" = ( -/obj/random/solgov, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor, -/area/venera/security) -"gN" = ( -/obj/effect/floor_decal/corner/green{ - dir = 10; - icon_state = "corner_white" - }, -/obj/machinery/light, -/turf/simulated/floor/tiled, -/area/venera/living/hydro) -"gP" = ( -/obj/effect/floor_decal/corner/blue{ - dir = 6 - }, -/obj/random/trash, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/turf/simulated/floor/tiled/dark, -/area/venera/hallway) -"gQ" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/plating, -/area/venera/security/detective) -"gS" = ( -/obj/random/obstruction, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/catwalk, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/venera/engine/atmos) -"gU" = ( -/obj/structure/table/standard, -/obj/item/reagent_containers/glass/beaker, -/obj/item/reagent_containers/glass/beaker{ - pixel_x = 4; - pixel_y = 9 - }, -/obj/structure/cable/green, -/obj/machinery/power/apc{ - dir = 2; - name = "south bump"; - pixel_y = -24 - }, -/turf/simulated/floor/tiled/white, -/area/venera/medbay/chemistry) -"gW" = ( -/obj/effect/floor_decal/corner/yellow/half{ - dir = 1; - icon_state = "bordercolorhalf" - }, -/obj/random/trash, -/obj/machinery/atmospherics/unary/vent_pump/on, -/turf/simulated/floor/tiled, -/area/venera/engine) -"ha" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/fuel, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/tiled/white, -/area/venera/living) -"hb" = ( -/obj/machinery/computer/modular/preset/cardslot/command{ - dir = 4; - icon_state = "console" - }, -/obj/structure/window/reinforced{ - dir = 8 - }, -/obj/effect/floor_decal/corner/blue/half{ - dir = 4; - icon_state = "bordercolorhalf" - }, -/obj/item/device/megaphone, -/turf/simulated/floor/tiled/dark/monotile, -/area/venera/bridge) -"hc" = ( -/obj/machinery/alarm{ - pixel_y = 24 - }, -/obj/machinery/atmospherics/unary/vent_pump/on, -/turf/simulated/floor/plating, -/area/venera/security) -"hi" = ( -/obj/machinery/atmospherics/pipe/manifold/visible/cyan{ - dir = 4; - icon_state = "map" - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/venera/engine/atmos) -"hu" = ( -/obj/item/crowbar/red, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/item/device/radio/intercom/map_preset/venera{ - pixel_y = 21 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/turf/simulated/floor/plating, -/area/venera/security) -"hv" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/wood/ebony, -/area/venera/living/bunk) -"hw" = ( -/turf/simulated/wall/prepainted, -/area/venera/disperser) -"hE" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/turf/simulated/wall/r_wall/hull, -/area/venera/maint/starboard/bridge) -"hG" = ( -/obj/effect/floor_decal/corner/grey/diagonal, -/obj/structure/hygiene/sink/kitchen{ - pixel_x = 0; - pixel_y = 32 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/venera/living/mess) -"hJ" = ( -/obj/effect/floor_decal/corner/black/three_quarters{ - dir = 8 - }, -/obj/structure/closet/emcloset, -/obj/machinery/firealarm{ - dir = 2; - pixel_y = 24 - }, -/turf/simulated/floor/tiled/dark, -/area/venera/hallway) -"hO" = ( -/obj/item/device/megaphone, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/techfloor, -/area/venera/security) -"hP" = ( -/obj/machinery/computer/air_control{ - dir = 1; - input_tag = "venera_fuel_in"; - name = "Fuel Supply Control"; - output_tag = "venera_fuel_out"; - sensor_name = "Fuel Tank"; - sensor_tag = "venera_fuel_sensor" - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/machinery/alarm{ - dir = 4; - pixel_x = -23; - pixel_y = 0 - }, -/turf/simulated/floor/plating, -/area/venera/engine/thrusterstarboard) -"hR" = ( -/obj/machinery/telecomms/hub/map_preset/venera, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/floor/tiled/techfloor/grid, -/area/venera/maint/starboard/bridge) -"hU" = ( -/obj/effect/floor_decal/corner/grey/diagonal, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/light{ - dir = 4; - icon_state = "tube1" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/white, -/area/venera/living/mess) -"hV" = ( -/obj/structure/closet/medical_wall/filled{ - pixel_x = -32 - }, -/obj/machinery/recharger{ - pixel_y = 4 - }, -/obj/structure/table/woodentable_reinforced/ebony, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 4 - }, -/turf/simulated/floor/wood/ebony, -/area/venera/living/bunk) -"hY" = ( -/turf/simulated/wall/r_wall/prepainted, -/area/venera/maint/starboard/bridge) -"hZ" = ( -/obj/structure/bed/chair/office/comfy/red, -/turf/simulated/floor/tiled/dark, -/area/venera/security/questioning) -"ib" = ( -/obj/structure/bed/chair/comfy/captain{ - color = "#666666"; - dir = 8 - }, -/obj/effect/floor_decal/spline/fancy/black{ - dir = 8; - icon_state = "spline_fancy" - }, -/turf/simulated/floor/tiled/dark, -/area/venera/bridge) -"in" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/structure/catwalk, -/turf/simulated/floor/airless, -/area/space) -"ip" = ( -/obj/effect/floor_decal/corner/green{ - dir = 10; - icon_state = "corner_white" - }, -/obj/effect/floor_decal/corner/black{ - dir = 4; - icon_state = "corner_white" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/fuel, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/valve/shutoff/supply, -/obj/machinery/atmospherics/valve/shutoff/scrubbers, -/obj/effect/floor_decal/industrial/shutoff, -/turf/simulated/floor/tiled/dark, -/area/venera/hallway) -"iq" = ( -/obj/structure/sign/warning/internals_required{ - name = "\improper RADIATION GEAR REQUIRED" - }, -/turf/simulated/wall/r_wall/hull, -/area/venera/engine/atmos) -"is" = ( -/obj/item/stack/material/rods, -/obj/item/material/shard/shrapnel, -/turf/space, -/area/space) -"iu" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/cable{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/structure/catwalk, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, -/turf/simulated/floor/plating, -/area/venera/engine/atmos) -"iA" = ( -/obj/effect/floor_decal/corner/black{ - dir = 5 - }, -/obj/random/trash, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark, -/area/venera/hallway) -"iC" = ( -/obj/random/junk, -/obj/machinery/alarm{ - dir = 1; - icon_state = "alarm0"; - pixel_y = -22 - }, -/turf/simulated/floor/tiled/white, -/area/venera/medbay) -"iH" = ( -/obj/machinery/vending/medical{ - dir = 4; - products = list(/obj/item/reagent_containers/glass/bottle/antitoxin = 0, /obj/item/reagent_containers/glass/bottle/inaprovaline = 0, /obj/item/reagent_containers/glass/bottle/stoxin = 1, /obj/item/reagent_containers/syringe/antiviral = 2, /obj/item/reagent_containers/pill/antitox = 1, /obj/item/reagent_containers/syringe = 7, /obj/item/device/scanner/health = 1, /obj/item/reagent_containers/glass/beaker = 1, /obj/item/reagent_containers/dropper = 2, /obj/item/stack/medical/advanced/bruise_pack = 0, /obj/item/stack/medical/advanced/ointment = 0, /obj/item/stack/medical/splint = 0, /obj/item/reagent_containers/hypospray/autoinjector/pain = 0) - }, -/turf/simulated/floor/tiled/white, -/area/venera/medbay) -"iJ" = ( -/obj/effect/wallframe_spawn/reinforced_phoron, -/obj/machinery/atmospherics/pipe/simple/visible/fuel{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/venera/engine/thrusterstarboard) -"iQ" = ( -/obj/machinery/mass_driver{ - dir = 8; - id_tag = "venera_md_58" - }, -/obj/structure/ship_munition/ap_slug{ - dir = 8 - }, -/turf/simulated/floor/airless, -/area/venera/disperser) -"iS" = ( -/obj/effect/floor_decal/corner/black{ - dir = 10 - }, -/obj/random/trash, -/obj/machinery/door/firedoor, -/turf/simulated/floor/tiled/dark, -/area/venera/hallway) -"iV" = ( -/obj/machinery/smartfridge/secure/medbay, -/obj/machinery/door/firedoor, -/turf/simulated/floor/plating, -/area/venera/medbay/chemistry) -"ja" = ( -/mob/living/simple_animal/hostile/meat/horror{ - desc = "This creature terrifies you, it seems that you have forgotten about all your fears, but now it enslaves your mind."; - health = 350; - maxHealth = 400; - name = "Your only fear." - }, -/obj/effect/decal/cleanable/blood/splatter, -/obj/item/ammo_casing/rifle/used, -/obj/item/ammo_casing/rifle/used, -/obj/random/handgun, -/obj/item/ammo_casing/pistol/used, -/obj/item/ammo_casing/pistol/used, -/obj/item/ammo_casing/pistol/used, -/obj/item/ammo_casing/pistol/used, -/obj/item/ammo_casing/pistol/used, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/venera/hallway) -"jb" = ( -/obj/effect/overmap/visitable/ship/venera, -/turf/simulated/floor/tiled/dark, -/area/venera/bridge) -"jd" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/universal, -/turf/simulated/floor/tiled/dark, -/area/venera/disperser) -"jf" = ( -/obj/structure/cable/green{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/machinery/light/small/red{ - dir = 1 - }, -/turf/simulated/floor/airless, -/area/venera/disperser) -"ji" = ( -/obj/effect/floor_decal/corner/black{ - dir = 10 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/light, -/obj/item/ammo_casing/rifle/used, -/obj/machinery/atmospherics/valve/shutoff/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/valve/shutoff/scrubbers{ - dir = 4 - }, -/obj/effect/floor_decal/industrial/shutoff{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark, -/area/venera/hallway) -"jj" = ( -/obj/effect/floor_decal/corner/black{ - dir = 5 - }, -/obj/machinery/newscaster{ - pixel_y = 32 - }, -/turf/simulated/floor/tiled/dark, -/area/venera/hallway) -"jl" = ( -/obj/machinery/pointdefense{ - initial_id_tag = "venera_primary_pd" - }, -/obj/machinery/power/terminal{ - dir = 8 - }, -/obj/structure/cable/green{ - d2 = 8; - icon_state = "0-8" - }, -/turf/simulated/floor/reinforced/airless, -/area/space) -"jm" = ( -/turf/simulated/floor/carpet, -/area/venera/living/bunk) -"jo" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden{ - dir = 4; - icon_state = "map" - }, -/obj/effect/decal/cleanable/cobweb2, -/turf/simulated/floor/tiled/techfloor, -/area/venera/hallway/eva) -"jt" = ( -/obj/effect/floor_decal/industrial/warning, -/obj/machinery/atmospherics/pipe/simple/hidden/fuel{ - dir = 9; - icon_state = "intact" - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/structure/disposalpipe/segment{ - dir = 8; - icon_state = "pipe-c" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, -/turf/simulated/floor/tiled/white, -/area/venera/living) -"jw" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/random/trash, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/fuel{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/venera/engine) -"jx" = ( -/obj/effect/landmark/corpse/bridgeofficer, -/obj/effect/decal/cleanable/blood/splatter, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark, -/area/venera/bridge) -"jy" = ( -/obj/item/stack/material/glass{ - amount = 20; - pixel_x = -3; - pixel_y = 3 - }, -/obj/effect/catwalk_plated, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/turf/simulated/floor/plating, -/area/venera/engine) -"jz" = ( -/obj/machinery/optable, -/obj/effect/landmark/corpse/venera, -/obj/effect/decal/cleanable/blood/splatter, -/turf/simulated/floor/tiled/white, -/area/venera/medbay) -"jA" = ( -/obj/structure/grille, -/obj/structure/cable/green{ - d2 = 8; - icon_state = "0-8" - }, -/obj/structure/catwalk, -/turf/simulated/floor/airless, -/area/space) -"jB" = ( -/obj/structure/hygiene/sink/kitchen{ - pixel_y = -32 - }, -/obj/effect/floor_decal/corner/green{ - dir = 10; - icon_state = "corner_white" - }, -/obj/item/shovel/spade, -/turf/simulated/floor/tiled, -/area/venera/living/hydro) -"jF" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/white, -/area/venera/living) -"jI" = ( -/obj/structure/table/woodentable_reinforced/ebony/walnut, -/obj/machinery/photocopier/faxmachine{ - department = "Venera - Commanding Officer" - }, -/obj/effect/decal/cleanable/cobweb, -/obj/machinery/light{ - dir = 8; - icon_state = "tube1" - }, -/obj/machinery/alarm{ - pixel_y = 24 - }, -/turf/simulated/floor/carpet/blue, -/area/venera/bridge/co_office) -"jK" = ( -/obj/random/material, -/obj/structure/table/rack, -/obj/random/tech_supply, -/obj/random/tech_supply, -/obj/structure/railing/mapped, -/obj/machinery/alarm{ - pixel_y = 24 - }, -/turf/simulated/floor/plating, -/area/venera/maint/port) -"jL" = ( -/obj/structure/table/standard, -/obj/random/smokes, -/obj/random/tool, -/turf/simulated/floor/tiled/techfloor, -/area/venera/maint/starboard/bridge) -"jQ" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/light/navigation/delay5, -/turf/simulated/floor/reinforced/airless, -/area/space) -"jS" = ( -/turf/simulated/floor/plating, -/area/venera/engine/thrusterport) -"jX" = ( -/obj/structure/catwalk, -/obj/structure/grille, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/space, -/area/space) -"jZ" = ( -/obj/effect/wallframe_spawn/reinforced, -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/plating, -/area/venera/engine) -"kb" = ( -/obj/effect/floor_decal/spline/fancy/black{ - dir = 4; - icon_state = "spline_fancy" - }, -/obj/effect/decal/cleanable/filth, -/obj/machinery/light_switch{ - pixel_x = 22; - pixel_y = 6 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/tiled/dark, -/area/venera/bridge) -"kc" = ( -/obj/structure/table/steel, -/obj/item/device/radio/map_preset/venera, -/turf/simulated/floor/plating, -/area/venera/security/detective) -"kg" = ( -/obj/machinery/atmospherics/pipe/simple/visible/cyan{ - dir = 4 - }, -/obj/item/device/radio/intercom/map_preset/venera{ - pixel_y = 21 - }, -/obj/structure/railing/mapped, -/obj/random/tool, -/turf/simulated/floor/plating, -/area/venera/engine/atmos) -"kh" = ( -/obj/effect/floor_decal/corner/green{ - dir = 5 - }, -/turf/simulated/floor/tiled, -/area/venera/living/hydro) -"ki" = ( -/obj/structure/cable/yellow, -/obj/machinery/power/tracker, -/turf/simulated/floor/airless, -/area/venera/engine/solar/port) -"kj" = ( -/obj/effect/floor_decal/corner/yellow/half, -/obj/effect/decal/cleanable/blood/drip, -/turf/simulated/floor/tiled, -/area/venera/engine) -"kr" = ( -/obj/machinery/light/small/red, -/turf/simulated/floor/airless, -/area/venera/disperser) -"kv" = ( -/turf/simulated/wall/prepainted, -/area/venera/security/detective) -"kw" = ( -/obj/structure/extinguisher_cabinet{ - pixel_y = -32 - }, -/obj/structure/table/woodentable_reinforced/ebony/walnut, -/obj/item/towel/fleece, -/obj/random/cash, -/turf/simulated/floor/wood/walnut, -/area/venera/bridge/co_office) -"kx" = ( -/obj/structure/table/steel_reinforced, -/obj/machinery/firealarm{ - dir = 2; - pixel_y = 24 - }, -/obj/random/loot, -/obj/machinery/light{ - dir = 1; - icon_state = "tube1" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/venera/security/lobby) -"kA" = ( -/obj/structure/curtain/open/bed, -/turf/simulated/floor/wood/ebony, -/area/venera/living/bunk) -"kB" = ( -/obj/structure/table/standard, -/obj/item/zipgunframe, -/obj/item/pipe, -/obj/item/device/assembly/mousetrap, -/turf/simulated/floor/tiled/techfloor, -/area/venera/maint/starboard/bridge) -"kC" = ( -/obj/machinery/atmospherics/pipe/manifold/visible/fuel{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/meter, -/turf/simulated/floor/plating, -/area/venera/engine/thrusterport) -"kD" = ( -/obj/structure/catwalk, -/obj/random/trash, -/turf/simulated/floor/plating, -/area/venera/maint/starboard/bridge) -"kE" = ( -/obj/effect/floor_decal/corner/paleblue{ - dir = 10 - }, -/obj/random/trash, -/turf/simulated/floor/tiled/dark, -/area/venera/hallway) -"kF" = ( -/obj/effect/floor_decal/corner/grey/diagonal, -/obj/effect/landmark/corpse/chef, -/obj/effect/decal/cleanable/blood/splatter, -/obj/item/material/knife/kitchen/cleaver, -/turf/simulated/floor/tiled/white, -/area/venera/living/mess) -"kG" = ( -/obj/machinery/atmospherics/portables_connector, -/obj/machinery/portable_atmospherics/canister/air/airlock, -/obj/machinery/door/window/westright{ - dir = 2; - name = "E.V.A. Airlock Air Storage" - }, -/obj/structure/window/reinforced{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/venera/hallway/eva) -"kQ" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor, -/area/venera/security) -"kR" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden{ - dir = 8; - icon_state = "map" - }, -/obj/machinery/oxygen_pump{ - pixel_x = -32 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/venera/hallway/eva) -"kT" = ( -/obj/machinery/portable_atmospherics/canister/oxygen, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled/steel_grid, -/area/venera/engine) -"kU" = ( -/turf/simulated/wall/r_wall/hull, -/area/venera/security/equipment) -"kY" = ( -/obj/machinery/biogenerator, -/obj/effect/floor_decal/corner/green{ - dir = 9 - }, -/obj/structure/cable/green{ - d2 = 4; - icon_state = "0-4" - }, -/obj/machinery/power/apc{ - dir = 8; - name = "west bump"; - pixel_x = -24 - }, -/turf/simulated/floor/tiled, -/area/venera/living/hydro) -"lb" = ( -/obj/item/tank/phoron{ - starting_pressure = list("phoron" = 1.975) - }, -/obj/item/ammo_casing/rifle/used, -/obj/item/ammo_casing/rifle/used, -/obj/item/ammo_casing/rifle/used, -/obj/item/ammo_casing/rifle/used, -/obj/item/ammo_casing/rifle/used, -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 1 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/venera/hallway) -"lc" = ( -/obj/structure/railing/mapped, -/obj/structure/railing/mapped{ - dir = 4; - icon_state = "railing0-1" - }, -/obj/random/tech_supply, -/obj/random/tech_supply, -/obj/random/tech_supply, -/obj/random/tool, -/obj/structure/table/rack, -/turf/simulated/floor/plating, -/area/venera/maint/starboard/bridge) -"lf" = ( -/obj/effect/floor_decal/industrial/warning/corner, -/turf/simulated/floor/airless, -/area/venera/disperser) -"lg" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/table/rack, -/obj/item/device/encryptionkey/map_preset/venera, -/obj/item/device/encryptionkey/map_preset/venera, -/turf/simulated/floor/tiled/techfloor/grid, -/area/venera/maint/starboard/bridge) -"lh" = ( -/obj/structure/table/steel, -/obj/random/toolbox, -/turf/simulated/floor/tiled/steel_grid, -/area/venera/engine) -"lk" = ( -/obj/machinery/power/port_gen/pacman/super{ - anchored = 1; - desc = "A upgraded power generator that utilizes uranium sheets as fuel. Can run for much longer than the standard PACMAN type generators. Rated for 80 kW max safe output."; - max_overheat = 300; - max_power_output = 6; - max_safe_output = 5; - max_sheets = 200; - max_temperature = 500; - name = "Upgraded S.U.P.E.R.P.A.C.M.A.N.-type Mark 4 Generator"; - rad_power = 1; - sheet_left = 20; - sheets = 20; - temperature_gain = 10; - time_per_sheet = 900 - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/structure/cable{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/structure/cable{ - d2 = 4; - icon_state = "0-4" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/venera/engine/atmos) -"lp" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 1 - }, -/turf/simulated/floor/tiled/techfloor, -/area/venera/engine/thrusterport) -"lr" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/venera/maint/port) -"lu" = ( -/obj/effect/decal/cleanable/liquid_fuel, -/obj/effect/decal/cleanable/blood/splatter, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/venera/hallway) -"lw" = ( -/obj/machinery/cooker/oven, -/turf/simulated/floor/tiled/white/monotile, -/area/venera/living/mess) -"ly" = ( -/obj/structure/cable/green{ - d2 = 2; - icon_state = "0-2" - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/machinery/power/apc{ - dir = 1; - name = "north bump"; - pixel_x = 0; - pixel_y = 24 - }, -/turf/simulated/floor/tiled/techfloor, -/area/venera/security) -"lA" = ( -/obj/machinery/atmospherics/pipe/simple/visible/green{ - dir = 5 - }, -/obj/machinery/light_switch{ - pixel_x = -24; - pixel_y = -6 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, -/obj/structure/railing/mapped{ - dir = 4; - icon_state = "railing0-1" - }, -/obj/random/trash, -/turf/simulated/floor/plating, -/area/venera/engine/atmos) -"lB" = ( -/obj/effect/gibspawner/human, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/item/implant/loyalty, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/venera/hallway) -"lC" = ( -/obj/machinery/atmospherics/pipe/manifold/visible/green, -/obj/machinery/alarm{ - dir = 1; - icon_state = "alarm0"; - pixel_y = -22 - }, -/obj/machinery/meter, -/obj/structure/railing/mapped{ - dir = 8; - icon_state = "railing0-1" - }, -/obj/structure/railing/mapped{ - dir = 1; - icon_state = "railing0-1" - }, -/turf/simulated/floor/plating, -/area/venera/engine/atmos) -"lD" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/fuel{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/effect/catwalk_plated/dark, -/turf/simulated/floor/plating, -/area/venera/hallway) -"lE" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/venera/security/lobby) -"lF" = ( -/obj/structure/sign/solgov, -/turf/simulated/wall/r_wall/hull, -/area/venera/hallway/eva) -"lH" = ( -/obj/machinery/light{ - dir = 4; - icon_state = "tube1" - }, -/turf/simulated/floor/wood/ebony, -/area/venera/living/mess) -"lO" = ( -/obj/structure/barricade, -/turf/simulated/floor/tiled/techfloor, -/area/venera/security) -"lQ" = ( -/obj/machinery/atmospherics/binary/pump/high_power/on{ - dir = 4; - target_pressure = 15000 - }, -/obj/structure/catwalk, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/venera/engine/thrusterport) -"lS" = ( -/obj/effect/floor_decal/corner/black{ - dir = 10 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/item/ammo_casing/rifle/used, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark, -/area/venera/hallway) -"lT" = ( -/turf/simulated/wall/prepainted, -/area/venera/security/equipment) -"lX" = ( -/obj/effect/wallframe_spawn/reinforced, -/obj/machinery/door/firedoor, -/turf/simulated/floor/plating, -/area/venera/security) -"mb" = ( -/obj/structure/grille/broken, -/obj/random/trash, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/venera/hallway) -"mc" = ( -/obj/structure/hygiene/sink{ - pixel_y = 17 - }, -/obj/item/storage/mirror{ - pixel_y = 32 - }, -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/turf/simulated/floor/tiled/freezer, -/area/venera/living) -"md" = ( -/obj/machinery/vitals_monitor, -/turf/simulated/floor/tiled/white, -/area/venera/medbay) -"mh" = ( -/obj/effect/floor_decal/corner/red/mono, -/obj/structure/table/rack, -/obj/item/crowbar/prybar, -/obj/item/clothing/mask/gas/half, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/recharger/wallcharger{ - dir = 4; - icon_state = "wrecharger0"; - pixel_x = -23; - pixel_y = -3 - }, -/turf/simulated/floor/tiled/monotile, -/area/venera/security/equipment) -"mn" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/light, -/turf/simulated/floor/tiled/white, -/area/venera/medbay) -"mo" = ( -/obj/effect/floor_decal/corner/paleblue{ - dir = 10 - }, -/obj/random/trash, -/turf/simulated/floor/tiled/white, -/area/venera/medbay) -"mq" = ( -/obj/effect/decal/cleanable/liquid_fuel, -/obj/effect/decal/cleanable/molten_item, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/item/ammo_casing/pistol/used, -/obj/item/ammo_casing/pistol/used, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/venera/hallway) -"mr" = ( -/obj/effect/floor_decal/corner/black{ - dir = 10 - }, -/obj/effect/decal/cleanable/blood/drip, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 1 - }, -/turf/simulated/floor/tiled/dark, -/area/venera/hallway) -"mt" = ( -/obj/item/airalarm_electronics, -/obj/item/airalarm_electronics, -/obj/item/airalarm_electronics, -/obj/item/airlock_electronics, -/obj/item/airlock_electronics, -/obj/item/airlock_electronics, -/obj/item/module/power_control, -/obj/item/module/power_control, -/obj/item/module/power_control, -/obj/structure/table/rack, -/turf/simulated/floor/tiled/steel_grid, -/area/venera/engine) -"mu" = ( -/obj/machinery/barrier{ - anchored = 1; - locked = 1 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/venera/hallway) -"mv" = ( -/obj/machinery/disposal, -/obj/structure/disposalpipe/trunk{ - dir = 1 - }, -/obj/machinery/firealarm{ - dir = 1; - pixel_y = -24 - }, -/obj/effect/floor_decal/industrial/hatch/yellow, -/turf/simulated/floor/tiled/white/monotile, -/area/venera/living/mess) -"mx" = ( -/obj/structure/cable/green{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/structure/closet/emcloset, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/item/device/radio/map_preset/venera, -/obj/item/storage/med_pouch/radiation, -/turf/simulated/floor/tiled/techfloor/grid, -/area/venera/engine/atmos) -"mz" = ( -/obj/structure/table/standard, -/obj/item/device/radio/intercom/map_preset/venera{ - dir = 4; - pixel_x = -24 - }, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 4 - }, -/obj/item/reagent_containers/food/drinks/bottle/prosecco, -/turf/simulated/floor/wood/ebony, -/area/venera/living/mess) -"mC" = ( -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 5; - icon_state = "intact" - }, -/obj/item/device/radio/intercom/map_preset/venera{ - dir = 4; - pixel_x = -24 - }, -/obj/machinery/airlock_sensor{ - id_tag = "venera_eva_airlock_sensor"; - pixel_y = -25 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/venera/hallway/eva) -"mD" = ( -/obj/item/device/radio/intercom/map_preset/venera{ - dir = 4; - pixel_x = -24 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/venera/security/questioning) -"mG" = ( -/obj/machinery/atmospherics/pipe/manifold/visible/fuel{ - dir = 8 - }, -/turf/simulated/floor/plating, -/area/venera/engine/thrusterport) -"mH" = ( -/obj/effect/floor_decal/corner/blue/mono, -/obj/machinery/disposal, -/obj/machinery/light{ - dir = 1; - icon_state = "tube1" - }, -/obj/structure/disposalpipe/trunk, -/obj/effect/floor_decal/industrial/hatch/yellow, -/turf/simulated/floor/tiled/dark/monotile, -/area/venera/bridge) -"mI" = ( -/obj/machinery/access_button{ - command = "cycle_exterior"; - frequency = 1379; - master_tag = "venera_eva_airlock"; - name = "exterior access button"; - pixel_x = -5; - pixel_y = -22 - }, -/turf/simulated/floor/reinforced/airless, -/area/venera/hallway/eva) -"mJ" = ( -/obj/random/obstruction, -/obj/effect/floor_decal/spline/fancy/black{ - dir = 1; - icon_state = "spline_fancy" - }, -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/dark, -/area/venera/medbay) -"mK" = ( -/obj/machinery/atmospherics/pipe/simple/visible/fuel, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/plating, -/area/venera/engine/thrusterstarboard) -"mR" = ( -/obj/structure/table/standard, -/obj/structure/window/reinforced{ - dir = 1 - }, -/turf/simulated/floor/tiled/white, -/area/venera/medbay) -"mV" = ( -/obj/effect/decal/cleanable/molten_item, -/obj/random/trash, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/venera/hallway) -"mW" = ( -/turf/simulated/wall/prepainted, -/area/venera/security/lobby) -"mX" = ( -/obj/effect/floor_decal/corner/red/mono, -/obj/structure/table/steel, -/obj/random/solgov, -/obj/item/device/radio/map_preset/venera, -/turf/simulated/floor/tiled/monotile, -/area/venera/security/equipment) -"mZ" = ( -/obj/machinery/atmospherics/pipe/manifold/visible/fuel{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/turf/simulated/floor/plating, -/area/venera/engine/thrusterstarboard) -"nb" = ( -/obj/effect/decal/cleanable/molten_item, -/obj/item/ammo_casing/pistol/used, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/venera/hallway) -"nc" = ( -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/structure/cable/yellow{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/airless, -/area/venera/engine/solar/starboard) -"nd" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 1 - }, -/turf/simulated/floor/tiled/white, -/area/venera/medbay) -"ne" = ( -/obj/machinery/light/small, -/turf/simulated/floor/tiled/techfloor, -/area/venera/living) -"nk" = ( -/obj/effect/floor_decal/corner/black{ - dir = 1 - }, -/obj/effect/floor_decal/corner/blue{ - dir = 6 - }, -/obj/structure/largecrate{ - name = "Crate - (Additional Venera Encryption Keys)" - }, -/obj/item/device/encryptionkey/map_preset/venera, -/obj/item/device/encryptionkey/map_preset/venera, -/obj/item/device/encryptionkey/map_preset/venera, -/obj/random/junk, -/obj/random/junk, -/obj/random/junk, -/obj/random/junk, -/obj/random/junk, -/obj/random/junk, -/obj/random/junk, -/obj/item/device/radio/map_preset/venera, -/obj/item/device/radio/map_preset/venera, -/obj/machinery/atmospherics/unary/vent_pump/on, -/turf/simulated/floor/tiled/dark, -/area/venera/hallway) -"nl" = ( -/turf/simulated/wall/r_wall/hull, -/area/venera/maint/starboard/bridge) -"nr" = ( -/obj/machinery/door/airlock/engineering{ - icon_state = "closed"; - locked = 0; - name = "Port Solar Access" - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/door/firedoor, -/turf/simulated/floor/tiled/steel_ridged, -/area/venera/maint/port) -"nv" = ( -/obj/item/reagent_containers/spray/luminol, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/plating, -/area/venera/security/detective) -"nx" = ( -/obj/machinery/computer/modular/preset/engineering, -/obj/machinery/light{ - dir = 1; - icon_state = "tube1" - }, -/turf/simulated/floor/tiled/steel_grid, -/area/venera/engine) -"nB" = ( -/obj/structure/table/standard, -/obj/effect/floor_decal/corner/paleblue/full, -/obj/item/roller, -/obj/item/roller{ - pixel_y = 16 - }, -/obj/machinery/light{ - dir = 1; - icon_state = "tube1" - }, -/turf/simulated/floor/tiled/white, -/area/venera/medbay) -"nC" = ( -/turf/simulated/wall/prepainted, -/area/venera/living/hydro) -"nD" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/universal, -/turf/simulated/floor/tiled, -/area/venera/engine) -"nF" = ( -/obj/random/trash, -/turf/simulated/floor/tiled/white, -/area/venera/medbay) -"nL" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, -/turf/simulated/floor/tiled/dark, -/area/venera/disperser) -"nM" = ( -/obj/machinery/atmospherics/unary/tank/nitrogen{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/venera/engine/atmos) -"nP" = ( -/obj/machinery/computer/modular/preset/engineering{ - dir = 1 - }, -/obj/effect/floor_decal/corner/blue/mono, -/turf/simulated/floor/tiled/dark/monotile, -/area/venera/bridge) -"nQ" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/firealarm{ - dir = 4; - pixel_x = 24 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/carpet/blue, -/area/venera/living/bunk) -"nT" = ( -/obj/structure/hygiene/sink{ - pixel_y = 17 - }, -/obj/item/storage/mirror{ - pixel_y = 32 - }, -/obj/machinery/atmospherics/unary/vent_pump/on, -/turf/simulated/floor/tiled/freezer, -/area/venera/living) -"nU" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden, -/obj/machinery/hologram/holopad, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled/techfloor, -/area/venera/hallway/eva) -"nV" = ( -/obj/structure/closet/body_bag, -/obj/effect/landmark/corpse/venera/security, -/obj/effect/floor_decal/industrial/outline/blue, -/turf/simulated/floor/tiled/dark, -/area/venera/medbay) -"nX" = ( -/obj/effect/floor_decal/corner/grey/diagonal, -/obj/effect/decal/cleanable/flour, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/tiled/white, -/area/venera/living/mess) -"nZ" = ( -/obj/effect/wallframe_spawn/reinforced, -/obj/structure/cable/green{ - d2 = 8; - icon_state = "0-8" - }, -/obj/machinery/door/firedoor, -/turf/simulated/floor/plating, -/area/venera/security/equipment) -"oa" = ( -/obj/structure/cable/yellow{ - d2 = 4; - icon_state = "0-4" - }, -/obj/machinery/power/solar_control/autostart{ - dir = 1; - id = "venera_solars_port"; - name = "Port Solar Panels Control" - }, -/turf/simulated/floor/tiled/techfloor, -/area/venera/maint/port) -"ob" = ( -/obj/effect/decal/cleanable/liquid_fuel, -/obj/item/device/radio/intercom/map_preset/venera{ - pixel_y = 21 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/venera/hallway) -"oc" = ( -/obj/random/obstruction, -/obj/effect/floor_decal/spline/fancy/black{ - dir = 1; - icon_state = "spline_fancy" - }, -/turf/simulated/floor/tiled/dark, -/area/venera/medbay) -"od" = ( -/obj/effect/floor_decal/corner/yellow/half{ - dir = 1; - icon_state = "bordercolorhalf" - }, -/obj/machinery/hologram/holopad, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled, -/area/venera/engine) -"oh" = ( -/obj/effect/floor_decal/corner/black{ - dir = 5 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/alarm{ - pixel_y = 24 - }, -/turf/simulated/floor/tiled/dark, -/area/venera/hallway) -"oj" = ( -/obj/machinery/conveyor{ - id_tag = "venera_md_58_con" - }, -/obj/structure/ship_munition/ap_slug, -/obj/structure/disposalpipe/segment{ - dir = 8; - icon_state = "pipe-c" - }, -/turf/simulated/floor/airless, -/area/venera/disperser) -"ol" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/plating, -/area/venera/security/detective) -"on" = ( -/obj/effect/floor_decal/corner/grey/diagonal, -/obj/machinery/alarm{ - pixel_y = 24 - }, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/venera/living/mess) -"oo" = ( -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/structure/cable/yellow{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/turf/simulated/floor/airless, -/area/venera/engine/solar/starboard) -"op" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/random/trash, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/venera/maint/port) -"oq" = ( -/obj/effect/floor_decal/spline/fancy/black{ - dir = 4; - icon_state = "spline_fancy" - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 1 - }, -/turf/simulated/floor/tiled/dark, -/area/venera/bridge) -"os" = ( -/obj/effect/decal/cleanable/filth, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/turf/simulated/floor/tiled/dark, -/area/venera/bridge) -"ot" = ( -/obj/machinery/access_button{ - command = "cycle_interior"; - frequency = 1379; - master_tag = "venera_bsa_airlock"; - pixel_x = -20; - pixel_y = -20 - }, -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/dark, -/area/venera/disperser) -"ou" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/turf/simulated/floor/plating, -/area/venera/security) -"ov" = ( -/obj/effect/decal/cleanable/blood/drip, -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 1 - }, -/obj/effect/catwalk_plated/dark, -/turf/simulated/floor/plating, -/area/venera/hallway) -"oE" = ( -/obj/structure/table/standard, -/obj/machinery/firealarm{ - dir = 8; - pixel_x = -24 - }, -/turf/simulated/floor/wood/ebony, -/area/venera/living/mess) -"oG" = ( -/obj/machinery/atmospherics/pipe/manifold4w/visible/cyan, -/obj/machinery/meter, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/venera/engine/atmos) -"oH" = ( -/turf/simulated/floor/tiled/steel_grid, -/area/venera/engine) -"oI" = ( -/obj/random/trash, -/obj/structure/disposalpipe/segment{ - dir = 8; - icon_state = "pipe-c" - }, -/turf/simulated/floor/wood/ebony, -/area/venera/living/mess) -"oJ" = ( -/obj/effect/decal/cleanable/blood/splatter, -/turf/simulated/floor/tiled/dark, -/area/venera/medbay) -"oK" = ( -/obj/structure/table/steel, -/obj/item/paper_bin{ - pixel_x = 1; - pixel_y = 9 - }, -/obj/random/powercell, -/turf/simulated/floor/tiled/steel_grid, -/area/venera/engine) -"oL" = ( -/obj/machinery/embedded_controller/radio/airlock/airlock_controller{ - dir = 1; - id_tag = "venera_bsa_airlock"; - pixel_y = -21; - tag_airpump = "venera_bsa_pump"; - tag_chamber_sensor = "venera_bsa_sensor"; - tag_exterior_door = "venera_bsa_ex"; - tag_interior_door = "venera_bsa_in" - }, -/obj/machinery/atmospherics/unary/vent_pump/high_volume/airlock{ - dir = 4; - id_tag = "venera_bsa_pump" - }, -/obj/machinery/airlock_sensor{ - id_tag = "venera_bsa_sensor"; - pixel_x = -21; - pixel_y = -10 - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/machinery/oxygen_pump{ - pixel_x = -32 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/venera/disperser) -"oN" = ( -/obj/structure/table/standard, -/obj/item/modular_computer/pda/chemistry, -/turf/simulated/floor/tiled/white, -/area/venera/medbay/chemistry) -"oQ" = ( -/turf/simulated/floor/tiled/dark/monotile, -/area/venera/security/questioning) -"oR" = ( -/obj/machinery/telecomms/bus/map_preset/venera, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/floor/tiled/techfloor/grid, -/area/venera/maint/starboard/bridge) -"oX" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/venera/maint/starboard/bridge) -"oY" = ( -/obj/effect/wallframe_spawn/no_grille, -/obj/machinery/door/firedoor, -/turf/simulated/floor/plating, -/area/venera/living/hydro) -"pb" = ( -/obj/effect/decal/cleanable/liquid_fuel, -/obj/effect/decal/cleanable/molten_item, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/venera/hallway) -"pf" = ( -/obj/effect/floor_decal/corner/red{ - dir = 1; - icon_state = "corner_white" - }, -/obj/effect/floor_decal/corner/green{ - dir = 4 - }, -/obj/effect/decal/cleanable/blood/drip, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/closet/hydrant{ - pixel_y = 32 - }, -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/turf/simulated/floor/tiled/dark, -/area/venera/hallway) -"pg" = ( -/obj/effect/floor_decal/industrial/hatch/blue, -/obj/structure/sign/directions/infm{ - pixel_y = 32 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled/white/monotile, -/area/venera/medbay) -"pm" = ( -/obj/effect/shuttle_landmark/nav_venera/nav4, -/turf/space, -/area/space) -"pn" = ( -/obj/machinery/door/window/westright{ - dir = 1; - name = "E.V.A. Storage" - }, -/obj/structure/inflatable/door, -/turf/simulated/floor/tiled/techfloor, -/area/venera/hallway/eva) -"pp" = ( -/obj/machinery/light/small, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/railing/mapped{ - dir = 8; - icon_state = "railing0-1" - }, -/turf/simulated/floor/plating, -/area/venera/maint/port) -"ps" = ( -/turf/simulated/wall/r_wall/prepainted, -/area/venera/engine/atmos) -"pt" = ( -/obj/effect/paint/hull, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/wall/titanium, -/area/space) -"px" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/disposalpipe/segment{ - dir = 4; - icon_state = "pipe-c" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/venera/maint/port) -"py" = ( -/turf/simulated/wall/prepainted, -/area/venera/hallway) -"pA" = ( -/obj/structure/table/steel_reinforced, -/obj/random/solgov, -/obj/random/gloves, -/turf/simulated/floor/tiled/techfloor/grid, -/area/venera/security/lobby) -"pB" = ( -/obj/effect/floor_decal/spline/fancy/black{ - dir = 4; - icon_state = "spline_fancy" - }, -/obj/structure/table/steel_reinforced, -/obj/item/paper_bin{ - pixel_x = -3; - pixel_y = 7 - }, -/obj/item/pen, -/obj/item/pen{ - pixel_x = 4; - pixel_y = 4 - }, -/obj/machinery/firealarm{ - dir = 4; - pixel_x = 21 - }, -/obj/item/reagent_containers/spray/cleaner, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 1 - }, -/turf/simulated/floor/tiled/dark, -/area/venera/bridge) -"pD" = ( -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/techfloor, -/area/venera/security) -"pG" = ( -/obj/machinery/door/airlock/maintenance{ - name = "Bunk Room Maintenance" - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/tiled/steel_ridged, -/area/venera/living/bunk) -"pI" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/carpet/blue, -/area/venera/living/bunk) -"pK" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/effect/decal/cleanable/blood/splatter, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/venera/hallway) -"pL" = ( -/turf/simulated/wall/prepainted, -/area/venera/engine/atmos) -"pM" = ( -/obj/structure/table/rack{ - dir = 8 - }, -/obj/item/tank/jetpack/carbondioxide, -/obj/item/tank/jetpack/carbondioxide, -/obj/item/tank/jetpack/carbondioxide, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/techfloor/grid, -/area/venera/hallway/eva) -"pO" = ( -/obj/random/loot, -/obj/machinery/firealarm{ - dir = 8; - pixel_x = -24 - }, -/obj/structure/hygiene/sink{ - dir = 8; - icon_state = "sink"; - pixel_x = -12; - pixel_y = 2 - }, -/turf/simulated/floor/tiled/white, -/area/venera/medbay) -"pS" = ( -/obj/item/device/radio/intercom/map_preset/venera{ - pixel_y = 21 - }, -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/turf/simulated/floor/plating, -/area/venera/engine/thrusterstarboard) -"pY" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 5; - icon_state = "intact" - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/venera/maint/port) -"pZ" = ( -/obj/item/clothing/glasses/science, -/turf/simulated/floor/tiled/white, -/area/venera/medbay/chemistry) -"qa" = ( -/obj/machinery/portable_atmospherics/canister/carbon_dioxide{ - start_pressure = 7559.63 - }, -/obj/effect/decal/cleanable/cobweb2, -/turf/simulated/floor/tiled/techfloor, -/area/venera/engine/thrusterport) -"qb" = ( -/obj/machinery/access_button{ - command = "cycle_exterior"; - frequency = 1379; - master_tag = "venera_bsa_airlock"; - pixel_x = -20; - pixel_y = -20 - }, -/obj/effect/floor_decal/industrial/warning, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/airless, -/area/venera/disperser) -"qc" = ( -/obj/machinery/atmospherics/omni/mixer{ - active_power_usage = 7500; - tag_east = 2; - tag_east_con = null; - tag_north = 1; - tag_north_con = 0.79; - tag_south = 1; - tag_south_con = 0.21; - tag_west = 0; - tag_west_con = null; - use_power = 1 - }, -/obj/structure/railing/mapped, -/obj/structure/railing/mapped{ - dir = 8; - icon_state = "railing0-1" - }, -/turf/simulated/floor/plating, -/area/venera/engine/atmos) -"qd" = ( -/obj/machinery/cryopod, -/turf/simulated/floor/tiled/techmaint, -/area/venera/living) -"qi" = ( -/obj/structure/railing/mapped, -/obj/random/tool, -/obj/structure/table/rack, -/turf/simulated/floor/plating, -/area/venera/maint/starboard/bridge) -"qo" = ( -/obj/machinery/atmospherics/unary/tank/air{ - start_pressure = 6533.13 - }, -/turf/simulated/floor/plating, -/area/venera/engine/atmos) -"qp" = ( -/obj/structure/table/steel, -/obj/item/device/flashlight/lamp, -/turf/simulated/floor/tiled/dark/monotile, -/area/venera/security/questioning) -"qr" = ( -/obj/effect/shuttle_landmark/nav_venera/nav3, -/turf/space, -/area/space) -"qs" = ( -/obj/structure/table/woodentable_reinforced/ebony/walnut, -/obj/item/paper_bin{ - pixel_x = -3; - pixel_y = 7 - }, -/obj/item/pen/multi/cmd/co, -/turf/simulated/floor/carpet/blue, -/area/venera/bridge/co_office) -"qt" = ( -/obj/effect/decal/cleanable/filth, -/obj/random/mre, -/obj/item/ammo_casing/pistol/used, -/obj/item/ammo_casing/pistol/used, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark, -/area/venera/bridge) -"qw" = ( -/obj/effect/floor_decal/spline/fancy/wood{ - dir = 8 - }, -/obj/item/shreddedp, -/obj/random/coin, -/obj/structure/cable/green, -/obj/machinery/power/apc{ - dir = 4; - name = "east bump"; - pixel_x = 24 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/wood/walnut, -/area/venera/bridge/co_office) -"qx" = ( -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/simple/hidden/fuel, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/venera/engine) -"qB" = ( -/obj/machinery/door/airlock/vault/bolted{ - autoset_access = 0; - id_tag = "venera_bridge_back"; - name = "Emergency Exit" - }, -/obj/item/airlock_brace, -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/steel_ridged, -/area/venera/disperser/storage) -"qC" = ( -/obj/machinery/firealarm{ - dir = 2; - pixel_y = 24 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/disposalpipe/segment{ - dir = 4; - icon_state = "pipe-c" - }, -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/turf/simulated/floor/plating, -/area/venera/security) -"qD" = ( -/obj/effect/floor_decal/corner/paleblue{ - dir = 5 - }, -/obj/effect/decal/cleanable/blood/splatter, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/white, -/area/venera/medbay) -"qF" = ( -/obj/effect/floor_decal/corner/paleblue{ - dir = 10 - }, -/obj/item/modular_computer/telescreen/preset/medical{ - pixel_y = 32 - }, -/obj/random/trash, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/venera/medbay) -"qG" = ( -/obj/effect/floor_decal/corner/grey/diagonal, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/venera/living/mess) -"qL" = ( -/obj/structure/cable{ - d2 = 2; - icon_state = "0-2" - }, -/obj/machinery/power/terminal{ - dir = 1; - icon_state = "term" - }, -/obj/item/clothing/head/radiation, -/obj/item/clothing/suit/radiation, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/venera/engine/atmos) -"qM" = ( -/obj/structure/reagent_dispensers/water_cooler{ - dir = 4; - icon_state = "water_cooler" - }, -/turf/simulated/floor/wood/ebony, -/area/venera/living/bunk) -"qN" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/venera/maint/port) -"qO" = ( -/obj/structure/table/standard, -/obj/item/tape_roll, -/obj/random/glasses, -/turf/simulated/floor/tiled/techfloor, -/area/venera/maint/starboard/bridge) -"qQ" = ( -/obj/effect/floor_decal/corner/black{ - dir = 8 - }, -/obj/effect/floor_decal/corner/green, -/obj/machinery/light, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 1 - }, -/turf/simulated/floor/tiled/dark, -/area/venera/hallway) -"qR" = ( -/obj/random/mre, -/obj/random/mre, -/obj/random/snack, -/turf/simulated/floor/tiled/techmaint, -/area/venera/engine/atmos) -"qS" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/venera/maint/port) -"qU" = ( -/obj/effect/gibspawner/human, -/obj/effect/gibspawner/human, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/venera/medbay) -"qX" = ( -/obj/effect/decal/cleanable/blood/splatter, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/techfloor, -/area/venera/security) -"qY" = ( -/obj/effect/paint/hull, -/obj/structure/sign/warning/lethal_turrets, -/turf/simulated/wall/titanium, -/area/space) -"qZ" = ( -/obj/effect/floor_decal/corner/green/three_quarters{ - dir = 1 - }, -/obj/machinery/light{ - dir = 4; - icon_state = "tube1" - }, -/turf/simulated/floor/tiled, -/area/venera/living/hydro) -"rb" = ( -/obj/machinery/computer/ship/navigation{ - dir = 4; - icon_state = "computer" - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/venera/disperser) -"rh" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/fuel, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/item/device/radio/intercom/map_preset/venera{ - dir = 4; - pixel_x = -24 - }, -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/tiled/white, -/area/venera/living) -"rj" = ( -/obj/random/advdevice, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/venera/hallway) -"rk" = ( -/obj/effect/decal/cleanable/liquid_fuel, -/obj/effect/floor_decal/corner/black{ - dir = 10 - }, -/obj/item/ammo_casing/pistol/used, -/obj/item/ammo_casing/pistol/used, -/turf/simulated/floor/tiled/dark, -/area/venera/hallway) -"rm" = ( -/obj/machinery/light, -/obj/machinery/atmospherics/binary/pump/on{ - dir = 4; - target_pressure = 200 - }, -/turf/simulated/floor/tiled/techfloor, -/area/venera/hallway/eva) -"ro" = ( -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/door/airlock/external{ - frequency = 1379; - icon_state = "closed"; - id_tag = "venera_solar_port_inner"; - locked = 1; - name = "Port Solar Access" - }, -/obj/machinery/atmospherics/pipe/simple/hidden, -/turf/simulated/floor/tiled/techfloor/grid, -/area/venera/maint/port) -"rs" = ( -/obj/structure/cable/green{ - d2 = 8; - icon_state = "0-8" - }, -/obj/machinery/power/apc{ - dir = 2; - name = "south bump"; - pixel_y = -24 - }, -/turf/simulated/floor/plating, -/area/venera/security/detective) -"rw" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/airless, -/area/venera/disperser) -"rz" = ( -/obj/machinery/power/terminal{ - dir = 4 - }, -/obj/structure/cable/yellow{ - d2 = 2; - icon_state = "0-2" - }, -/obj/structure/cable/yellow{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/machinery/access_button{ - command = "cycle_interior"; - frequency = 1379; - master_tag = "venera_solar_port_airlock"; - name = "interior access button"; - pixel_x = 24; - pixel_y = -24 - }, -/obj/machinery/atmospherics/pipe/simple/hidden, -/turf/simulated/floor/tiled/techfloor, -/area/venera/maint/port) -"rF" = ( -/obj/machinery/door/airlock/civilian{ - name = "Head" - }, -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled/steel_ridged, -/area/venera/living) -"rH" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/item/device/radio/intercom/map_preset/venera{ - dir = 1; - pixel_y = -31 - }, -/turf/simulated/floor/tiled/techfloor, -/area/venera/security) -"rI" = ( -/obj/item/stack/material/rods, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/techfloor, -/area/venera/hallway/eva) -"rJ" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 8 - }, -/obj/random/trash, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/white, -/area/venera/living) -"rK" = ( -/obj/machinery/door/airlock/glass/civilian{ - name = "Mess Hall" - }, -/obj/structure/disposalpipe/segment, -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/dark/monotile, -/area/venera/living/mess) -"rN" = ( -/obj/machinery/chem_master, -/turf/simulated/floor/tiled/white, -/area/venera/medbay/chemistry) -"rP" = ( -/obj/machinery/atmospherics/pipe/manifold/visible/cyan, -/obj/structure/railing/mapped, -/obj/structure/railing/mapped{ - dir = 4; - icon_state = "railing0-1" - }, -/obj/random/tech_supply, -/turf/simulated/floor/plating, -/area/venera/engine/atmos) -"rS" = ( -/obj/effect/floor_decal/corner/paleblue{ - dir = 10 - }, -/obj/effect/decal/cleanable/blood/splatter, -/obj/machinery/hologram/holopad, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled/white, -/area/venera/medbay) -"rT" = ( -/obj/effect/floor_decal/spline/fancy/black{ - dir = 1; - icon_state = "spline_fancy" - }, -/obj/item/roller, -/turf/simulated/floor/tiled/dark, -/area/venera/hallway) -"rU" = ( -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/random/mre, -/obj/random/mre, -/obj/random/mre, -/obj/random/mre, -/obj/random/tech_supply, -/obj/random/tech_supply, -/turf/simulated/floor/tiled/techmaint, -/area/venera/engine/atmos) -"rW" = ( -/obj/machinery/barrier{ - anchored = 1; - locked = 1 - }, -/obj/effect/floor_decal/corner/black{ - dir = 5 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark, -/area/venera/hallway) -"rZ" = ( -/obj/random/junk, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 1 - }, -/turf/simulated/floor/tiled/techfloor, -/area/venera/security/lobby) -"sa" = ( -/obj/structure/table/rack, -/obj/random/toolbox, -/obj/random/tech_supply, -/obj/structure/railing/mapped, -/obj/random/maintenance/solgov, -/turf/simulated/floor/plating, -/area/venera/maint/port) -"sb" = ( -/obj/structure/table/steel, -/obj/item/paper/cig/fancy, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/venera/disperser) -"se" = ( -/obj/item/ammo_casing/pistol/used, -/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply, -/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers, -/turf/simulated/floor/tiled/techfloor, -/area/venera/security) -"si" = ( -/obj/structure/catwalk, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/cable/green{ - d2 = 2; - icon_state = "0-2" - }, -/obj/machinery/power/apc{ - dir = 4; - name = "east bump"; - pixel_x = 24 - }, -/turf/simulated/floor/plating, -/area/venera/maint/starboard/bridge) -"sj" = ( -/obj/structure/reagent_dispensers/watertank, -/obj/effect/floor_decal/industrial/hatch/yellow, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 1 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/venera/hallway/eva) -"sk" = ( -/obj/structure/sign/warning/compressed_gas{ - dir = 1; - icon_state = "hikpa" - }, -/turf/simulated/wall/r_wall/prepainted, -/area/venera/engine/thrusterstarboard) -"sl" = ( -/obj/random/trash, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/venera/medbay) -"sm" = ( -/obj/structure/table/rack, -/turf/simulated/floor/plating, -/area/venera/security) -"so" = ( -/obj/structure/table/marble, -/obj/machinery/microwave{ - pixel_x = -3; - pixel_y = -3 - }, -/obj/effect/decal/cleanable/cobweb{ - dir = 4; - icon_state = "cobweb1" - }, -/turf/simulated/floor/tiled/white/monotile, -/area/venera/living/mess) -"sr" = ( -/obj/effect/decal/cleanable/blood/drip, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, -/obj/effect/catwalk_plated/dark, -/turf/simulated/floor/plating, -/area/venera/hallway) -"su" = ( -/obj/effect/floor_decal/corner/red{ - dir = 5 - }, -/obj/item/device/taperecorder{ - pixel_y = 0 - }, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/venera/security/equipment) -"sv" = ( -/obj/structure/table/steel, -/obj/item/paper_bin{ - pixel_x = -3; - pixel_y = 7 - }, -/obj/item/pen/fancy, -/obj/effect/decal/cleanable/cobweb{ - dir = 4; - icon_state = "cobweb1" - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/machinery/newscaster{ - pixel_x = -32 - }, -/turf/simulated/floor/plating, -/area/venera/security/detective) -"sw" = ( -/obj/machinery/light{ - dir = 8; - icon_state = "tube1" - }, -/turf/simulated/floor/wood/ebony, -/area/venera/living/mess) -"sy" = ( -/obj/structure/disposalpipe/trunk{ - dir = 4 - }, -/obj/machinery/disposal/deliveryChute{ - dir = 8 - }, -/obj/structure/window/reinforced{ - dir = 1 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/venera/maint/port) -"sB" = ( -/obj/item/stack/material/steel, -/obj/item/material/shard/shrapnel, -/obj/effect/decal/cleanable/molten_item, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/techfloor, -/area/venera/hallway/eva) -"sC" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/techfloor, -/area/venera/security/lobby) -"sF" = ( -/obj/random/junk, -/obj/structure/disposalpipe/junction{ - dir = 4; - icon_state = "pipe-j2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/dark/monotile, -/area/venera/hallway) -"sG" = ( -/mob/living/simple_animal/hostile/meat/strippedhuman, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/venera/hallway) -"sH" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/turf/simulated/floor/tiled/dark, -/area/venera/security) -"sJ" = ( -/obj/machinery/conveyor{ - dir = 8; - id = "venera_md_58_con" - }, -/obj/structure/ship_munition/ap_slug{ - dir = 8 - }, -/turf/simulated/floor/airless, -/area/venera/disperser) -"sK" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/dark, -/area/venera/disperser) -"sN" = ( -/obj/structure/disposalpipe/segment{ - dir = 2; - icon_state = "pipe-c" - }, -/turf/simulated/wall/r_wall/hull, -/area/venera/maint/port) -"sP" = ( -/obj/item/clothing/glasses/welding, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/venera/engine) -"sR" = ( -/obj/structure/cable/green{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/turf/simulated/floor/tiled/white, -/area/venera/medbay) -"sT" = ( -/obj/effect/floor_decal/spline/fancy/black{ - dir = 1; - icon_state = "spline_fancy" - }, -/turf/simulated/floor/tiled/dark, -/area/venera/medbay) -"sU" = ( -/obj/machinery/atmospherics/unary/tank/oxygen{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/venera/engine/atmos) -"sV" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/visible/green{ - dir = 4; - icon_state = "intact" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/simple/visible/red, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/venera/engine/atmos) -"tb" = ( -/obj/effect/decal/cleanable/blood/drip, -/obj/effect/decal/cleanable/filth, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/turf/simulated/floor/tiled/dark, -/area/venera/disperser) -"tj" = ( -/obj/item/reagent_containers/glass/beaker, -/turf/simulated/floor/tiled/white, -/area/venera/medbay/chemistry) -"tm" = ( -/obj/effect/floor_decal/corner/paleblue{ - dir = 10 - }, -/obj/effect/decal/cleanable/blood/splatter, -/obj/machinery/light{ - dir = 1; - icon_state = "tube1" - }, -/obj/machinery/firealarm{ - dir = 2; - pixel_y = 24 - }, -/turf/simulated/floor/tiled/white, -/area/venera/medbay) -"tn" = ( -/obj/machinery/door/airlock/civilian{ - name = "Bunk Room" - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/dark/monotile, -/area/venera/living/bunk) -"tr" = ( -/obj/effect/decal/cleanable/blood/splatter, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor, -/area/venera/security) -"tv" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/fuel{ - dir = 5; - icon_state = "intact" - }, -/obj/structure/catwalk, -/obj/structure/cable/green{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/structure/disposalpipe/segment{ - dir = 8; - icon_state = "pipe-c" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/obj/random/trash, -/turf/simulated/floor/plating, -/area/venera/maint/port) -"ty" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor, -/area/venera/maint/port) -"tD" = ( -/obj/structure/railing/mapped, -/obj/structure/railing/mapped{ - dir = 4; - icon_state = "railing0-1" - }, -/obj/random/tech_supply, -/obj/random/tech_supply, -/obj/random/tool, -/obj/structure/table/rack, -/turf/simulated/floor/plating, -/area/venera/maint/starboard/bridge) -"tE" = ( -/obj/structure/reagent_dispensers/fueltank, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled, -/area/venera/engine) -"tF" = ( -/obj/machinery/telecomms/processor/map_preset/venera, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/floor/tiled/techfloor/grid, -/area/venera/maint/starboard/bridge) -"tH" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/effect/catwalk_plated/dark, -/turf/simulated/floor/plating, -/area/venera/hallway) -"tP" = ( -/obj/effect/floor_decal/corner/yellow{ - dir = 5; - icon_state = "corner_white" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/fuel, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/structure/disposalpipe/junction{ - dir = 4; - icon_state = "pipe-j2" - }, -/obj/machinery/barrier{ - anchored = 1; - locked = 1 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/dark, -/area/venera/hallway) -"tR" = ( -/obj/machinery/atmospherics/pipe/manifold/visible/fuel{ - dir = 1 - }, -/obj/structure/catwalk, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/item/device/radio/intercom/map_preset/venera{ - pixel_y = 21 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/venera/engine/thrusterport) -"tU" = ( -/obj/structure/hygiene/sink{ - pixel_y = 17 - }, -/obj/item/storage/mirror{ - pixel_y = 32 - }, -/obj/item/device/radio/intercom/map_preset/venera{ - dir = 1; - pixel_y = -31 - }, -/turf/simulated/floor/tiled/freezer, -/area/venera/living) -"tX" = ( -/obj/machinery/door/window/westright, -/obj/structure/window/reinforced{ - dir = 1 - }, -/obj/machinery/conveyor{ - dir = 8; - id = "venera_garbage" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/venera/maint/port) -"tZ" = ( -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/techfloor, -/area/venera/hallway/eva) -"ub" = ( -/obj/effect/floor_decal/corner/blue{ - dir = 8 - }, -/obj/effect/floor_decal/corner/red{ - dir = 1 - }, -/obj/machinery/light_switch{ - pixel_x = -24; - pixel_y = -6 - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/dark, -/area/venera/bridge) -"ue" = ( -/obj/machinery/telecomms/receiver/map_preset/venera, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/floor/tiled/techfloor/grid, -/area/venera/maint/starboard/bridge) -"uf" = ( -/obj/structure/cable/green{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/turf/simulated/wall/r_wall/hull, -/area/venera/bridge/co_office) -"ug" = ( -/obj/machinery/atmospherics/pipe/manifold/visible/green, -/obj/structure/cable/green{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/random/trash, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/venera/engine/atmos) -"ui" = ( -/obj/machinery/door/airlock/external{ - frequency = 1379; - id_tag = "venera_bsa_ex"; - locked = 1; - name = "Obstruction Field Disperser Maintenance External Airlock" - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/venera/disperser) -"un" = ( -/turf/simulated/floor/plating, -/area/venera/security/detective) -"up" = ( -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/airless, -/area/venera/engine/solar/starboard) -"uq" = ( -/obj/structure/bed/padded, -/turf/simulated/floor/tiled/dark, -/area/venera/security) -"ur" = ( -/obj/structure/bed/chair/padded/blue{ - dir = 1; - icon_state = "chair_preview" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/venera/medbay) -"us" = ( -/turf/simulated/wall/prepainted, -/area/venera/security/questioning) -"uw" = ( -/obj/effect/floor_decal/corner/red{ - dir = 5 - }, -/turf/simulated/floor/tiled, -/area/venera/security/equipment) -"uA" = ( -/obj/structure/sign/warning/lethal_turrets, -/turf/simulated/wall/r_wall/hull, -/area/venera/engine/thrusterstarboard) -"uB" = ( -/obj/item/stack/material/steel{ - amount = 50 - }, -/obj/item/stack/material/steel{ - amount = 30 - }, -/obj/effect/floor_decal/corner/yellow/mono, -/obj/structure/table/rack, -/obj/machinery/firealarm{ - dir = 8; - pixel_x = -24 - }, -/turf/simulated/floor/tiled, -/area/venera/engine) -"uH" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor, -/area/venera/maint/starboard/bridge) -"uM" = ( -/obj/structure/catwalk, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/space, -/area/space) -"uN" = ( -/obj/effect/decal/cleanable/liquid_fuel, -/obj/effect/floor_decal/corner/black{ - dir = 10 - }, -/obj/random/junk, -/turf/simulated/floor/tiled/dark, -/area/venera/hallway) -"uO" = ( -/obj/random/junk, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/techfloor, -/area/venera/security/lobby) -"uP" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 8 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/venera/security/questioning) -"uU" = ( -/obj/effect/floor_decal/spline/fancy/wood, -/obj/random/junk, -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/tiled/dark, -/area/venera/living/mess) -"uV" = ( -/obj/effect/wallframe_spawn/reinforced/hull, -/turf/simulated/floor/plating, -/area/venera/disperser/storage) -"uY" = ( -/obj/machinery/door/airlock/external{ - frequency = 1379; - icon_state = "closed"; - id_tag = "venera_eva_airlock_outer"; - locked = 1; - name = "EVA External Access" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/venera/hallway/eva) -"vb" = ( -/obj/machinery/computer/modular/preset/cardslot/command{ - dir = 4; - icon_state = "console" - }, -/obj/structure/window/reinforced{ - dir = 8 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/venera/bridge) -"vc" = ( -/turf/simulated/floor/tiled/techfloor, -/area/venera/living) -"vd" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 - }, -/turf/simulated/floor/tiled/freezer, -/area/venera/living) -"ve" = ( -/obj/effect/floor_decal/corner/paleblue{ - dir = 5 - }, -/obj/effect/decal/cleanable/blood/splatter, -/mob/living/simple_animal/hostile/meat/horror{ - health = 230; - maxHealth = 230 - }, -/turf/simulated/floor/tiled/white, -/area/venera/medbay) -"vg" = ( -/obj/machinery/door/airlock/glass/security{ - id_tag = "detdoor"; - name = "Locker Room" - }, -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/steel_ridged, -/area/venera/security/equipment) -"vh" = ( -/obj/effect/shuttle_landmark/nav_venera/nav1, -/turf/space, -/area/space) -"vi" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/turf/simulated/wall/r_wall/hull, -/area/venera/maint/port) -"vk" = ( -/obj/structure/ship_munition/ap_slug{ - dir = 8 - }, -/obj/machinery/conveyor{ - dir = 5; - id = "venera_md_58_con" - }, -/turf/simulated/floor/airless, -/area/venera/disperser) -"vm" = ( -/obj/machinery/atmospherics/unary/outlet_injector{ - dir = 4; - injecting = 1; - use_power = 1 - }, -/turf/simulated/floor/reinforced/airless, -/area/venera/engine/atmos) -"vn" = ( -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 8 - }, -/turf/simulated/floor/airless, -/area/venera/disperser) -"vp" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 8 - }, -/turf/simulated/floor/tiled/techfloor, -/area/venera/maint/starboard/bridge) -"vs" = ( -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/structure/closet/secure_closet/freezer/meat, -/turf/simulated/floor/tiled/white/monotile, -/area/venera/living/mess) -"vt" = ( -/obj/effect/gibspawner/human, -/obj/machinery/atmospherics/pipe/simple/hidden/fuel{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/random/glasses, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/item/storage/box/engineer, -/obj/item/clothing/gloves/insulated/black, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/turf/simulated/floor/tiled, -/area/venera/engine) -"vx" = ( -/obj/machinery/atmospherics/valve/open{ - dir = 4; - open = 0 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/sign/warning/nosmoking_1{ - desc = "A warning sign which reads 'NO SMOKING'. Someone has scratched a variety of crude words in gutter across the entire sign."; - pixel_x = 0; - pixel_y = 26 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/catwalk, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/venera/engine/thrusterport) -"vF" = ( -/obj/machinery/disposal, -/obj/structure/disposalpipe/trunk{ - dir = 8 - }, -/obj/effect/floor_decal/industrial/hatch/yellow, -/turf/simulated/floor/tiled/dark/monotile, -/area/venera/disperser) -"vI" = ( -/obj/item/stack/material/rods, -/turf/space, -/area/space) -"vJ" = ( -/obj/effect/decal/cleanable/cobweb2, -/turf/simulated/floor/carpet, -/area/venera/living/bunk) -"vT" = ( -/obj/random/junk, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/white, -/area/venera/medbay) -"wa" = ( -/obj/item/stack/material/rods, -/turf/space, -/area/venera/hallway/eva) -"wb" = ( -/obj/structure/table/woodentable_reinforced/ebony/walnut, -/obj/item/modular_computer/tablet/lease/preset/command, -/obj/item/paper, -/obj/random/coin, -/obj/random/cash, -/turf/simulated/floor/carpet/blue, -/area/venera/bridge/co_office) -"wc" = ( -/obj/structure/disposalpipe/segment{ - dir = 4; - icon_state = "pipe-c" - }, -/obj/structure/railing/mapped{ - dir = 4; - icon_state = "railing0-1" - }, -/obj/random/torchcloset, -/turf/simulated/floor/plating, -/area/venera/maint/port) -"we" = ( -/turf/simulated/floor/tiled/dark, -/area/venera/hallway) -"wf" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/wall/r_wall/hull, -/area/venera/maint/starboard/bridge) -"wg" = ( -/obj/structure/table/reinforced, -/obj/random/mre/main, -/turf/simulated/floor/tiled/white/monotile, -/area/venera/medbay) -"wh" = ( -/obj/random/medical/lite, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/venera/security) -"wj" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/fuel{ - dir = 6; - icon_state = "intact" - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/effect/catwalk_plated, -/obj/structure/disposalpipe/segment{ - dir = 4; - icon_state = "pipe-c" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 1 - }, -/turf/simulated/floor/plating, -/area/venera/engine) -"wl" = ( -/obj/effect/floor_decal/industrial/warning/corner, -/obj/machinery/atmospherics/pipe/simple/hidden/fuel{ - dir = 6; - icon_state = "intact" - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/structure/disposalpipe/segment{ - dir = 4; - icon_state = "pipe-c" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 - }, -/obj/structure/closet/medical_wall/filled{ - pixel_x = -32 - }, -/obj/random/medical/lite, -/obj/random/medical/lite, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/venera/living) -"wm" = ( -/obj/machinery/door/airlock/civilian{ - name = "Galley" - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/white/monotile, -/area/venera/living/mess) -"wr" = ( -/obj/effect/floor_decal/corner/paleblue, -/obj/structure/closet/secure_closet/medical_wall{ - name = "Pill Cabinet"; - pixel_x = 0; - pixel_y = 32 - }, -/obj/item/storage/pill_bottle, -/obj/item/storage/pill_bottle, -/obj/item/storage/pill_bottle/antidexafen, -/obj/item/storage/pill_bottle/paracetamol, -/turf/simulated/floor/tiled/white, -/area/venera/medbay) -"wt" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 8 - }, -/turf/simulated/floor/tiled/techfloor, -/area/venera/security) -"wu" = ( -/turf/simulated/wall/prepainted, -/area/venera/medbay) -"wx" = ( -/obj/effect/floor_decal/scglogo{ - icon_state = "bottom-right" - }, -/obj/random/medical/lite, -/turf/simulated/floor/tiled/dark, -/area/venera/bridge) -"wy" = ( -/obj/machinery/door/airlock/external{ - frequency = 1379; - icon_state = "closed"; - id_tag = "venera_solar_starboard_inner"; - locked = 1; - name = "Starboard Solar Access" - }, -/obj/machinery/atmospherics/pipe/simple/hidden, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/venera/engine/atmos) -"wz" = ( -/obj/machinery/disposal/deliveryChute, -/obj/structure/disposalpipe/trunk, -/obj/machinery/door/window/westright{ - dir = 2; - name = "Ammunition Chute" - }, -/obj/structure/window/reinforced{ - dir = 8 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/venera/disperser) -"wC" = ( -/obj/random/junk, -/obj/effect/floor_decal/corner/paleblue/three_quarters{ - dir = 4 - }, -/obj/machinery/disposal, -/obj/effect/floor_decal/industrial/hatch/yellow, -/obj/item/ammo_casing/rifle/used, -/obj/structure/disposalpipe/trunk{ - dir = 1 - }, -/turf/simulated/floor/tiled/dark, -/area/venera/hallway) -"wG" = ( -/obj/structure/table/steel, -/turf/simulated/floor/plating, -/area/venera/security/detective) -"wN" = ( -/obj/machinery/conveyor{ - dir = 8; - id = "venera_garbage" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/venera/maint/port) -"wO" = ( -/obj/effect/floor_decal/corner/blue/full, -/obj/structure/table/steel_reinforced, -/obj/item/storage/secure/briefcase{ - pixel_x = 4; - pixel_y = 4 - }, -/obj/machinery/vending/wallmed1{ - dir = 4; - name = "Emergency NanoMed"; - pixel_x = -30; - pixel_y = 0 - }, -/obj/random/clipboard, -/obj/structure/cable/green{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 1 - }, -/turf/simulated/floor/tiled/dark, -/area/venera/bridge) -"wP" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/machinery/light/navigation/delay5, -/turf/simulated/floor/reinforced/airless, -/area/space) -"wR" = ( -/obj/machinery/access_button{ - command = "cycle_exterior"; - frequency = 1379; - master_tag = "venera_solar_starboard_airlock"; - name = "exterior access button"; - pixel_x = -24; - pixel_y = -24 - }, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/airless, -/area/venera/engine/solar/starboard) -"wS" = ( -/obj/structure/cable/green{ - d2 = 8; - icon_state = "0-8" - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/machinery/power/apc{ - dir = 2; - name = "south bump"; - pixel_y = -24 - }, -/turf/simulated/floor/tiled/white, -/area/venera/medbay) -"wV" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/fuel{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor, -/area/venera/engine/thrusterport) -"xa" = ( -/obj/structure/closet/body_bag, -/obj/effect/landmark/corpse/venera, -/obj/effect/floor_decal/industrial/outline/blue, -/obj/effect/decal/cleanable/blood/splatter, -/turf/simulated/floor/tiled/dark, -/area/venera/medbay) -"xc" = ( -/obj/effect/floor_decal/corner/paleblue{ - dir = 10 - }, -/obj/effect/floor_decal/corner/blue{ - dir = 1 - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/closet/hydrant{ - pixel_x = -32; - pixel_y = 0 - }, -/turf/simulated/floor/tiled/dark, -/area/venera/hallway) -"xd" = ( -/obj/effect/floor_decal/corner/black{ - dir = 8 - }, -/obj/effect/floor_decal/corner/paleblue, -/obj/machinery/light, -/turf/simulated/floor/tiled/dark, -/area/venera/hallway) -"xf" = ( -/obj/machinery/door/airlock/engineering{ - icon_state = "closed"; - locked = 0; - name = "Port Solar Access" - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 4 - }, -/obj/machinery/door/firedoor, -/turf/simulated/floor/tiled/steel_ridged, -/area/venera/maint/port) -"xk" = ( -/obj/structure/lattice, -/obj/item/stack/material/plasteel, -/turf/space, -/area/venera/hallway/eva) -"xl" = ( -/obj/structure/table/steel, -/obj/random/firstaid, -/turf/simulated/floor/tiled/techmaint, -/area/venera/engine/atmos) -"xq" = ( -/obj/effect/floor_decal/solarpanel, -/obj/machinery/power/solar/improved{ - id = "venera_solars_port"; - name = "Port Solar Panel" - }, -/obj/structure/cable/yellow, -/turf/simulated/floor/airless, -/area/venera/engine/solar/port) -"xr" = ( -/obj/structure/sign/warning/radioactive{ - dir = 4; - icon_state = "radiation" - }, -/turf/simulated/wall/r_wall/prepainted, -/area/venera/engine/atmos) -"xv" = ( -/obj/structure/disposalpipe/trunk{ - dir = 1 - }, -/obj/structure/disposaloutlet, -/turf/simulated/floor/reinforced/airless, -/area/venera/maint/port) -"xy" = ( -/obj/random/obstruction, -/obj/effect/floor_decal/corner/black{ - dir = 5 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/firealarm{ - dir = 2; - pixel_y = 24 - }, -/turf/simulated/floor/tiled/dark, -/area/venera/hallway) -"xz" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/fuel, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/effect/floor_decal/corner/yellow/half, -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled, -/area/venera/engine) -"xA" = ( -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/structure/cable/yellow{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/airless, -/area/venera/engine/solar/port) -"xB" = ( -/obj/structure/bed/chair/comfy/black{ - dir = 8 - }, -/obj/item/paper/crumpled, -/obj/effect/decal/cleanable/blood/drip, -/turf/simulated/floor/carpet/blue, -/area/venera/bridge/co_office) -"xD" = ( -/obj/effect/floor_decal/corner/blue{ - dir = 6 - }, -/obj/effect/decal/cleanable/filth, -/obj/structure/barricade/spike{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark, -/area/venera/bridge) -"xF" = ( -/obj/effect/floor_decal/corner/black{ - dir = 10 - }, -/obj/machinery/light, -/obj/random/trash, -/turf/simulated/floor/tiled/dark, -/area/venera/hallway) -"xG" = ( -/turf/simulated/wall/prepainted, -/area/venera/bridge) -"xH" = ( -/obj/structure/hygiene/toilet{ - pixel_y = 12 - }, -/obj/machinery/alarm{ - dir = 8; - icon_state = "alarm0"; - pixel_x = 24 - }, -/turf/simulated/floor/tiled/dark, -/area/venera/security) -"xN" = ( -/obj/structure/disposalpipe/segment{ - dir = 1; - icon_state = "pipe-c" - }, -/turf/simulated/floor/wood/ebony, -/area/venera/living/mess) -"xR" = ( -/obj/machinery/atmospherics/unary/outlet_injector{ - dir = 4; - frequency = 1441; - icon_state = "map_injector"; - id = "venera_fuel_in"; - use_power = 1 - }, -/turf/simulated/floor/reinforced/carbon_dioxide, -/area/venera/engine/thrusterstarboard) -"xS" = ( -/obj/structure/catwalk, -/obj/structure/cable{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/machinery/atmospherics/binary/pump/on{ - dir = 8; - target_pressure = 200 - }, -/obj/item/tank/emergency/oxygen/double, -/turf/simulated/floor/plating, -/area/venera/engine/atmos) -"xU" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/fuel{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/floor_decal/corner/yellow/half{ - dir = 4 - }, -/obj/effect/decal/cleanable/blood/drip, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/valve/shutoff/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/valve/shutoff/scrubbers{ - dir = 4 - }, -/obj/effect/floor_decal/industrial/shutoff{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/venera/engine) -"xW" = ( -/obj/effect/decal/cleanable/liquid_fuel, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/door/firedoor, -/turf/simulated/floor/plating, -/area/venera/hallway) -"xX" = ( -/obj/structure/closet/medical_wall{ - pixel_y = -32 - }, -/obj/random/medical/lite, -/obj/random/medical, -/obj/random/maintenance, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor, -/area/venera/security) -"xZ" = ( -/obj/machinery/atmospherics/pipe/simple/hidden, -/obj/machinery/door/airlock/external{ - frequency = 1379; - icon_state = "closed"; - id_tag = "venera_eva_airlock_inner"; - locked = 1; - name = "EVA Internal Access" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/venera/hallway/eva) -"yb" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/reinforced/airless, -/area/space) -"yd" = ( -/obj/structure/disposalpipe/trunk{ - dir = 1 - }, -/obj/structure/disposaloutlet{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/venera/maint/port) -"ye" = ( -/obj/effect/floor_decal/corner/black{ - dir = 10 - }, -/obj/effect/gibspawner/human, -/turf/simulated/floor/tiled/dark, -/area/venera/hallway) -"yh" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/venera/maint/port) -"yi" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, -/mob/living/simple_animal/hostile/meat/strippedhuman, -/turf/simulated/floor/tiled, -/area/venera/engine) -"ym" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/wall/r_wall/hull, -/area/venera/bridge/co_office) -"yr" = ( -/obj/machinery/atmospherics/pipe/simple/visible/universal{ - dir = 4 - }, -/turf/simulated/wall/r_wall/hull, -/area/venera/engine/atmos) -"yt" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/item/ammo_casing/rifle/used, -/obj/item/ammo_casing/rifle/used, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, -/turf/simulated/floor/tiled/dark/monotile, -/area/venera/hallway) -"yv" = ( -/turf/simulated/wall/r_wall/hull, -/area/venera/security) -"yx" = ( -/obj/random/junk, -/obj/effect/floor_decal/corner/paleblue/three_quarters{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/venera/medbay) -"yD" = ( -/obj/machinery/button/mass_driver{ - desc = "A remote control switch for Venera Mass Driver Launcher."; - id_tag = "venera_md_58"; - pixel_x = -25; - pixel_y = -26 - }, -/obj/structure/bed/chair/comfy/black{ - dir = 8 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/venera/disperser) -"yF" = ( -/obj/machinery/embedded_controller/radio/airlock/airlock_controller{ - id_tag = "venera_eva_airlock"; - pixel_y = 20; - tag_airpump = "venera_eva_airlock_pump"; - tag_chamber_sensor = "venera_eva_airlock_sensor"; - tag_exterior_door = "venera_eva_airlock_outer"; - tag_interior_door = "venera_eva_airlock_inner" - }, -/obj/machinery/atmospherics/unary/vent_pump/high_volume/airlock{ - dir = 8; - id_tag = "venera_eva_airlock_pump" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/venera/hallway/eva) -"yH" = ( -/obj/machinery/door/airlock/maintenance{ - name = "Cryogenic Storage Maintenance" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/fuel, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/steel_ridged, -/area/venera/living) -"yI" = ( -/obj/machinery/atmospherics/pipe/simple/visible/fuel{ - dir = 6 - }, -/turf/simulated/floor/plating, -/area/venera/engine/thrusterport) -"yK" = ( -/obj/structure/railing/mapped, -/obj/random/technology_scanner, -/obj/structure/table/rack, -/obj/structure/railing/mapped{ - dir = 8; - icon_state = "railing0-1" - }, -/turf/simulated/floor/plating, -/area/venera/maint/starboard/bridge) -"yM" = ( -/obj/machinery/atmospherics/pipe/simple/visible/universal{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/visible/fuel, -/obj/structure/railing/mapped{ - dir = 1; - icon_state = "railing0-1" - }, -/obj/structure/railing/mapped{ - dir = 8; - icon_state = "railing0-1" - }, -/obj/random/tank, -/turf/simulated/floor/plating, -/area/venera/engine/atmos) -"yN" = ( -/obj/structure/hygiene/sink{ - dir = 8; - icon_state = "sink"; - pixel_x = -12; - pixel_y = 2 - }, -/obj/machinery/flasher{ - id_tag = "venera_cell2"; - pixel_x = -24 - }, -/obj/effect/decal/cleanable/cobweb, -/obj/machinery/atmospherics/unary/vent_pump/on, -/turf/simulated/floor/tiled/dark, -/area/venera/security) -"yP" = ( -/obj/structure/bed/roller, -/obj/structure/closet/secure_closet/medical_wall{ - name = "IV Equipment Cabinet"; - pixel_x = 0; - pixel_y = 32 - }, -/obj/item/reagent_containers/ivbag/nanoblood, -/obj/item/reagent_containers/ivbag, -/obj/item/reagent_containers/ivbag, -/obj/item/reagent_containers/ivbag, -/obj/item/reagent_containers/ivbag, -/obj/effect/floor_decal/spline/plain/blue, -/turf/simulated/floor/tiled/white, -/area/venera/medbay) -"yY" = ( -/obj/effect/landmark/corpse/venera/iccgn, -/obj/effect/decal/cleanable/blood/splatter, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/venera/hallway) -"yZ" = ( -/obj/structure/table/standard, -/obj/effect/floor_decal/corner/paleblue/full, -/obj/machinery/cell_charger{ - pixel_x = -5; - pixel_y = -2 - }, -/obj/machinery/cell_charger{ - pixel_x = -5; - pixel_y = 10 - }, -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/turf/simulated/floor/tiled/white, -/area/venera/medbay) -"za" = ( -/obj/random/junk, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/venera/hallway) -"zb" = ( -/obj/machinery/disposal, -/obj/effect/floor_decal/corner/red/mono, -/obj/structure/disposalpipe/trunk, -/obj/effect/floor_decal/industrial/hatch/yellow, -/turf/simulated/floor/tiled/dark/monotile, -/area/venera/security) -"ze" = ( -/obj/structure/cable/green{ - d2 = 8; - icon_state = "0-8" - }, -/obj/structure/grille, -/obj/structure/catwalk, -/turf/simulated/floor/airless, -/area/space) -"zg" = ( -/obj/effect/floor_decal/corner/black, -/obj/machinery/atmospherics/pipe/simple/hidden/fuel{ - dir = 10; - icon_state = "intact" - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/structure/disposalpipe/segment, -/obj/effect/decal/cleanable/blood/splatter, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 1 - }, -/turf/simulated/floor/tiled/dark, -/area/venera/hallway) -"zh" = ( -/obj/effect/floor_decal/corner/paleblue{ - dir = 10 - }, -/obj/item/reagent_containers/ivbag, -/obj/structure/iv_drip, -/obj/machinery/light, -/turf/simulated/floor/tiled/dark, -/area/venera/hallway) -"zi" = ( -/obj/effect/floor_decal/spline/fancy/black{ - dir = 10; - icon_state = "spline_fancy" - }, -/obj/effect/decal/cleanable/filth, -/obj/random/junk, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/cable/green{ - d2 = 4; - icon_state = "0-4" - }, -/obj/machinery/power/apc/super/critical{ - dir = 2; - is_critical = 1; - name = "south bump"; - pixel_y = -24 - }, -/turf/simulated/floor/tiled/dark, -/area/venera/bridge) -"zq" = ( -/obj/effect/floor_decal/corner/blue{ - dir = 10 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/dark, -/area/venera/bridge) -"zu" = ( -/obj/structure/cable/green{ - d2 = 4; - icon_state = "0-4" - }, -/obj/machinery/power/apc{ - dir = 8; - name = "west bump"; - pixel_x = -24 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 8 - }, -/turf/simulated/floor/tiled, -/area/venera/engine) -"zv" = ( -/obj/structure/bed/chair/padded/beige{ - dir = 4; - icon_state = "chair_preview" - }, -/obj/machinery/alarm{ - dir = 4; - pixel_x = -23; - pixel_y = 0 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/venera/security/lobby) -"zw" = ( -/obj/machinery/chemical_dispenser/full{ - spawn_cartridges = list(/obj/item/reagent_containers/chem_disp_cartridge/lithium,/obj/item/reagent_containers/chem_disp_cartridge/ammonia,/obj/item/reagent_containers/chem_disp_cartridge/sodium,/obj/item/reagent_containers/chem_disp_cartridge/aluminium,/obj/item/reagent_containers/chem_disp_cartridge/silicon,/obj/item/reagent_containers/chem_disp_cartridge/phosphorus,/obj/item/reagent_containers/chem_disp_cartridge/mercury,/obj/item/reagent_containers/chem_disp_cartridge/radium,/obj/item/reagent_containers/chem_disp_cartridge/tungsten) - }, -/obj/machinery/firealarm{ - dir = 1; - pixel_y = -24 - }, -/turf/simulated/floor/tiled/white, -/area/venera/medbay/chemistry) -"zx" = ( -/mob/living/simple_animal/hostile/meat/humansecurity{ - desc = "What's left of a Venera security guard. That armor they wore in life now gives them a bit of hardiness in death..."; - health = 300; - maxHealth = 300; - name = "turned Venera security" - }, -/obj/effect/decal/cleanable/blood/splatter, -/obj/machinery/light, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor, -/area/venera/security) -"zz" = ( -/obj/structure/dispenser/oxygen, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled/steel_grid, -/area/venera/engine) -"zA" = ( -/obj/machinery/firealarm{ - dir = 1; - pixel_y = -24 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, -/turf/simulated/floor/tiled/techfloor, -/area/venera/security) -"zG" = ( -/turf/simulated/wall/r_wall/prepainted, -/area/venera/security/detective) -"zN" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/wallframe_spawn/reinforced/hull, -/obj/machinery/door/firedoor, -/turf/simulated/floor/plating, -/area/venera/disperser) -"zO" = ( -/obj/machinery/atmospherics/pipe/manifold4w/visible/fuel, -/obj/structure/catwalk, -/obj/machinery/meter, -/turf/simulated/floor/plating, -/area/venera/engine/thrusterport) -"zP" = ( -/turf/simulated/floor/tiled/techfloor, -/area/venera/security/lobby) -"zS" = ( -/obj/machinery/atmospherics/unary/vent_pump/tank{ - dir = 4; - external_pressure_bound = 0; - external_pressure_bound_default = 0; - icon_state = "map_vent_in"; - id_tag = "venera_fuel_out"; - initialize_directions = 1; - internal_pressure_bound = 8000; - internal_pressure_bound_default = 8000; - pressure_checks = 2; - pressure_checks_default = 2; - pump_direction = 0; - use_power = 1 - }, -/turf/simulated/floor/reinforced/carbon_dioxide, -/area/venera/engine/thrusterstarboard) -"zY" = ( -/obj/random/medical/lite, -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/plating, -/area/venera/security/lobby) -"Ad" = ( -/obj/effect/floor_decal/corner/green{ - dir = 5 - }, -/obj/structure/disposalpipe/segment{ - dir = 2; - icon_state = "pipe-c" - }, -/turf/simulated/floor/tiled/dark, -/area/venera/hallway) -"Ae" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 1 - }, -/obj/random/trash, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/venera/living) -"Ak" = ( -/obj/machinery/telecomms/server/map_preset/venera, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/floor/tiled/techfloor/grid, -/area/venera/maint/starboard/bridge) -"Am" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark, -/area/venera/medbay) -"Ao" = ( -/obj/machinery/door/airlock/glass/atmos{ - name = "Atmospherics" - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/door/firedoor, -/obj/item/taperoll/engineering/applied, -/obj/machinery/atmospherics/binary/pump/on{ - dir = 1; - name = "Scrubber to Waste" - }, -/turf/simulated/floor/tiled/steel_ridged, -/area/venera/engine) -"Ay" = ( -/obj/effect/decal/cleanable/dirt, -/obj/item/ammo_casing/rocket, -/turf/simulated/floor/tiled/techfloor, -/area/venera/hallway/eva) -"Az" = ( -/obj/machinery/door/airlock/multi_tile/engineering{ - name = "Engineering Bay" - }, -/obj/machinery/door/firedoor, -/turf/simulated/floor/tiled/steel_ridged, -/area/venera/engine) -"AA" = ( -/obj/machinery/seed_storage/garden, -/obj/effect/floor_decal/corner/green{ - dir = 6 - }, -/obj/machinery/firealarm{ - dir = 4; - pixel_x = 26 - }, -/turf/simulated/floor/tiled, -/area/venera/living/hydro) -"AB" = ( -/obj/machinery/door/airlock/glass/medical{ - id_tag = "inf_recep"; - name = "Infirmary Reception" - }, -/obj/effect/floor_decal/industrial/hatch/blue, -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/venera/medbay) -"AD" = ( -/obj/item/device/radio/intercom/map_preset/venera{ - dir = 4; - pixel_x = -24 - }, -/obj/structure/bed/chair/armchair/black{ - dir = 1 - }, -/turf/simulated/floor/carpet, -/area/venera/living/bunk) -"AE" = ( -/obj/effect/floor_decal/corner/red{ - dir = 5 - }, -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/valve/shutoff/supply, -/obj/machinery/atmospherics/valve/shutoff/scrubbers, -/obj/effect/floor_decal/industrial/shutoff, -/turf/simulated/floor/tiled/dark, -/area/venera/hallway) -"AI" = ( -/obj/structure/table/standard, -/obj/item/paper_bin{ - pixel_y = 3 - }, -/obj/machinery/light, -/turf/simulated/floor/tiled/white/monotile, -/area/venera/medbay) -"AL" = ( -/obj/machinery/door/airlock/glass/civilian{ - name = "Cryogenic Storage" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/fuel, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/steel_ridged, -/area/venera/living) -"AM" = ( -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/airless, -/area/venera/engine/solar/port) -"AN" = ( -/obj/machinery/shield_diffuser, -/turf/simulated/floor/reinforced/airless, -/area/venera/hallway/eva) -"AO" = ( -/obj/effect/floor_decal/spline/fancy/wood, -/obj/structure/barricade/spike, -/obj/structure/disposalpipe/junction, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/dark, -/area/venera/living/mess) -"AP" = ( -/obj/structure/barricade, -/obj/structure/cable/green{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, -/turf/simulated/floor/wood/ebony, -/area/venera/living/bunk) -"AT" = ( -/obj/structure/lattice, -/obj/item/stack/material/steel, -/turf/space, -/area/venera/hallway/eva) -"AU" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/venera/maint/port) -"AW" = ( -/turf/simulated/wall/prepainted, -/area/venera/living/bunk) -"Bb" = ( -/turf/simulated/floor/wood/ebony, -/area/venera/living/mess) -"Bf" = ( -/turf/simulated/wall/r_wall/hull, -/area/venera/disperser) -"Bi" = ( -/obj/structure/hygiene/drain, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled/freezer, -/area/venera/living) -"Bj" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/turf/simulated/floor/tiled/techfloor, -/area/venera/maint/port) -"Bk" = ( -/obj/structure/cable{ - d2 = 2; - icon_state = "0-2" - }, -/obj/machinery/power/terminal{ - dir = 1; - icon_state = "term" - }, -/obj/structure/cable{ - d2 = 8; - icon_state = "0-8" - }, -/obj/item/device/geiger, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/venera/engine/atmos) -"Bl" = ( -/obj/machinery/atmospherics/pipe/simple/visible/fuel{ - dir = 10 - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/venera/engine/thrusterport) -"Bm" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/wood/walnut, -/area/venera/bridge/co_office) -"Bt" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled, -/area/venera/living/hydro) -"Bu" = ( -/obj/effect/floor_decal/corner/blue{ - dir = 9 - }, -/obj/structure/extinguisher_cabinet{ - pixel_x = -32 - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/light{ - dir = 8; - icon_state = "tube1" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/turf/simulated/floor/tiled/dark, -/area/venera/bridge) -"Bw" = ( -/obj/structure/bed/chair{ - dir = 4 - }, -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/wood/ebony, -/area/venera/living/mess) -"By" = ( -/obj/item/pen, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 4 - }, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/venera/medbay) -"BD" = ( -/obj/machinery/atmospherics/portables_connector, -/obj/machinery/portable_atmospherics/powered/pump/filled, -/obj/machinery/atmospherics/pipe/simple/visible/fuel{ - dir = 9 - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/turf/simulated/floor/plating, -/area/venera/engine/atmos) -"BE" = ( -/obj/effect/floor_decal/spline/fancy/wood/corner{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, -/turf/simulated/floor/wood/walnut, -/area/venera/bridge/co_office) -"BG" = ( -/obj/structure/filingcabinet/chestdrawer{ - dir = 1 - }, -/obj/item/folder/blue, -/obj/item/folder, -/obj/item/folder/red, -/obj/item/folder/yellow, -/turf/simulated/floor/wood/walnut, -/area/venera/bridge/co_office) -"BI" = ( -/obj/machinery/hologram/holopad, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/light{ - dir = 8; - icon_state = "tube1" - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/venera/security/questioning) -"BJ" = ( -/obj/structure/hygiene/shower{ - dir = 8; - icon_state = "shower" - }, -/turf/simulated/floor/tiled/freezer, -/area/venera/living) -"BM" = ( -/obj/effect/floor_decal/corner/green{ - dir = 8 - }, -/obj/effect/floor_decal/corner/black, -/obj/item/ammo_casing/rifle/used, -/obj/effect/decal/cleanable/blood/drip, -/turf/simulated/floor/tiled/dark, -/area/venera/hallway) -"BO" = ( -/obj/machinery/atmospherics/pipe/simple/visible/fuel{ - dir = 5 - }, -/turf/simulated/floor/plating, -/area/venera/engine/thrusterport) -"BP" = ( -/obj/structure/cable/green{ - d2 = 8; - icon_state = "0-8" - }, -/obj/machinery/power/apc{ - dir = 4; - name = "east bump"; - pixel_x = 24 - }, -/obj/structure/catwalk, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/turf/simulated/floor/plating, -/area/venera/disperser) -"BR" = ( -/obj/structure/cable/green, -/obj/machinery/power/apc{ - dir = 8; - name = "west bump"; - pixel_x = -24 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/venera/security/questioning) -"BV" = ( -/obj/machinery/light_switch{ - pixel_x = -6; - pixel_y = 24 - }, -/turf/simulated/floor/carpet, -/area/venera/living/bunk) -"BW" = ( -/obj/machinery/atmospherics/pipe/simple/visible/green{ - dir = 10; - icon_state = "intact" - }, -/turf/simulated/wall/r_wall/hull, -/area/venera/engine/thrusterstarboard) -"BZ" = ( -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/turf/simulated/floor/airless, -/area/venera/engine/solar/port) -"Cb" = ( -/obj/effect/floor_decal/corner/black{ - dir = 5 - }, -/obj/structure/cable/green{ - d2 = 8; - icon_state = "0-8" - }, -/obj/machinery/power/apc{ - dir = 1; - lighting = 0; - locked = 0; - name = "lighting off north bump"; - pixel_y = 24 - }, -/obj/effect/decal/cleanable/blood/splatter, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark, -/area/venera/hallway) -"Cg" = ( -/obj/structure/sign/warning/lethal_turrets, -/turf/simulated/wall/r_wall/hull, -/area/venera/hallway/eva) -"Ci" = ( -/obj/machinery/barrier, -/obj/structure/disposalpipe/junction{ - dir = 4; - icon_state = "pipe-j1" - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/venera/hallway) -"Cl" = ( -/obj/machinery/firealarm{ - dir = 8; - pixel_x = -24; - pixel_y = 0 - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 1 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/venera/security/questioning) -"Cm" = ( -/obj/machinery/atmospherics/pipe/simple/visible/fuel{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/simple/visible/fuel{ - dir = 9 - }, -/turf/simulated/floor/reinforced/carbon_dioxide, -/area/venera/engine/thrusterstarboard) -"Cn" = ( -/obj/machinery/atmospherics/pipe/simple/visible/fuel{ - dir = 6 - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/venera/engine/atmos) -"Cz" = ( -/obj/structure/closet/secure_closet/engineering_electrical, -/obj/random/powercell, -/obj/random/powercell, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled/steel_grid, -/area/venera/engine) -"CC" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/machinery/light/small{ - dir = 4; - icon_state = "bulb1" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/turf/simulated/floor/carpet/blue, -/area/venera/living/bunk) -"CD" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 8 - }, -/turf/simulated/floor/tiled/techfloor, -/area/venera/security) -"CI" = ( -/obj/machinery/door/airlock/security{ - name = "Security Checkpoint"; - secured_wires = 1 - }, -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/techfloor/grid, -/area/venera/security/lobby) -"CM" = ( -/obj/effect/wallframe_spawn/reinforced, -/obj/structure/cable/green{ - d2 = 8; - icon_state = "0-8" - }, -/obj/structure/cable/green{ - d2 = 4; - icon_state = "0-4" - }, -/obj/machinery/door/firedoor, -/turf/simulated/floor/plating, -/area/venera/security/equipment) -"CR" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/random/trash, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/venera/maint/port) -"CS" = ( -/obj/structure/closet/body_bag, -/obj/effect/floor_decal/corner/paleblue{ - dir = 5 - }, -/obj/effect/landmark/corpse/venera/security, -/turf/simulated/floor/tiled/white, -/area/venera/medbay) -"CV" = ( -/obj/random/junk, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor, -/area/venera/security) -"CW" = ( -/obj/effect/landmark/corpse/doctor, -/obj/effect/floor_decal/corner/paleblue{ - dir = 1; - icon_state = "corner_white" - }, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/venera/medbay) -"Dd" = ( -/obj/effect/floor_decal/corner/black, -/obj/effect/floor_decal/corner/paleblue{ - dir = 8 - }, -/obj/effect/decal/cleanable/blood/splatter, -/turf/simulated/floor/tiled/dark, -/area/venera/hallway) -"De" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/venera/maint/port) -"Di" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/mob/living/simple_animal/hostile/meat/horrorsmall, -/turf/simulated/floor/tiled/dark/monotile, -/area/venera/disperser) -"Dj" = ( -/obj/machinery/door/airlock/external{ - frequency = 1379; - icon_state = "closed"; - id_tag = "venera_solar_starboard_outer"; - locked = 1; - name = "Starboard Solar Access" - }, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/shield_diffuser, -/turf/simulated/floor/tiled/techfloor/grid, -/area/venera/engine/atmos) -"Dk" = ( -/obj/structure/bed/chair{ - dir = 8 - }, -/obj/random/trash, -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/wood/ebony, -/area/venera/living/mess) -"Dp" = ( -/obj/random/glasses, -/obj/effect/floor_decal/corner/red{ - dir = 5 - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/turf/simulated/floor/tiled/dark, -/area/venera/hallway) -"Dw" = ( -/obj/machinery/alarm{ - dir = 8; - icon_state = "alarm0"; - pixel_x = 24 - }, -/turf/simulated/floor/tiled/freezer, -/area/venera/living) -"Dy" = ( -/obj/structure/table/rack, -/obj/item/ammo_magazine/pistol, -/obj/item/ammo_magazine/pistol, -/obj/item/ammo_magazine/pistol, -/obj/item/ammo_magazine/pistol, -/turf/simulated/floor/plating, -/area/venera/security) -"DE" = ( -/obj/machinery/atmospherics/pipe/simple/visible/fuel, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/venera/engine/atmos) -"DG" = ( -/obj/effect/floor_decal/corner/red/mono, -/obj/structure/table/rack, -/obj/item/book/manual/sol_sop, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/alarm{ - pixel_y = 24 - }, -/turf/simulated/floor/tiled/monotile, -/area/venera/security/equipment) -"DN" = ( -/obj/effect/floor_decal/corner/yellow{ - dir = 5; - icon_state = "corner_white" - }, -/obj/effect/decal/cleanable/blood/drip, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/turf/simulated/floor/tiled/dark, -/area/venera/hallway) -"DO" = ( -/obj/item/plastique, -/turf/space, -/area/space) -"DR" = ( -/obj/structure/closet/body_bag, -/obj/effect/landmark/corpse/venera/engineer, -/obj/effect/floor_decal/industrial/outline/blue, -/turf/simulated/floor/tiled/dark, -/area/venera/medbay) -"DV" = ( -/obj/structure/table/rack, -/obj/random/loot, -/turf/simulated/floor/tiled/dark/monotile, -/area/venera/bridge) -"DW" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/conveyor_switch/oneway{ - convdir = -1; - id = "venera_garbage"; - name = "disposal conveyor"; - pixel_x = -5; - pixel_y = -5 - }, -/turf/simulated/floor/tiled/techfloor, -/area/venera/maint/port) -"DX" = ( -/obj/machinery/computer/modular/preset/aislot/sysadmin{ - dir = 1; - icon_state = "console" - }, -/obj/effect/floor_decal/corner/blue/mono, -/turf/simulated/floor/tiled/dark/monotile, -/area/venera/bridge) -"DY" = ( -/obj/item/defibrillator/compact/combat/loaded, -/turf/simulated/floor/tiled/white, -/area/venera/medbay) -"DZ" = ( -/obj/structure/barricade, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/techfloor, -/area/venera/security) -"Ef" = ( -/obj/structure/cable/yellow{ - d2 = 2; - icon_state = "0-2" - }, -/obj/machinery/power/solar_control/autostart{ - id = "venera_solars_starboard"; - name = "Starboard Solar Panels Control" - }, -/turf/simulated/floor/tiled/techmaint, -/area/venera/engine/atmos) -"Ei" = ( -/obj/machinery/light{ - dir = 1; - icon_state = "tube1" - }, -/obj/machinery/suit_storage_unit/standard_unit, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/techfloor/grid, -/area/venera/hallway/eva) -"Ek" = ( -/obj/item/ammo_casing/pistol/used, -/obj/item/ammo_casing/pistol/used, -/obj/item/ammo_casing/pistol/used, -/obj/item/ammo_casing/pistol/used, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/random/trash, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers, -/turf/simulated/floor/tiled/techfloor, -/area/venera/security) -"El" = ( -/obj/effect/floor_decal/industrial/hatch/yellow, -/obj/machinery/disposal, -/obj/structure/disposalpipe/trunk{ - dir = 1 - }, -/turf/simulated/floor/tiled/white, -/area/venera/medbay) -"Ep" = ( -/obj/machinery/atmospherics/unary/engine{ - dir = 8 - }, -/turf/simulated/floor/plating, -/area/venera/engine/thrusterport) -"Eq" = ( -/turf/simulated/floor/plating, -/area/venera/hallway) -"Er" = ( -/obj/machinery/portable_atmospherics/canister/carbon_dioxide, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/techfloor/grid, -/area/venera/hallway/eva) -"Et" = ( -/turf/simulated/floor/tiled, -/area/venera/engine) -"Eu" = ( -/turf/simulated/wall/r_wall/hull, -/area/venera/engine/thrusterstarboard) -"Ew" = ( -/obj/machinery/conveyor_switch/oneway{ - id = "venera_md_58_con" - }, -/obj/effect/floor_decal/industrial/warning/full, -/obj/item/device/radio/intercom/map_preset/venera{ - pixel_y = 21 - }, -/mob/living/simple_animal/hostile/meat/horrorsmall, -/turf/simulated/floor/tiled/dark, -/area/venera/disperser) -"Ex" = ( -/obj/machinery/atmospherics/pipe/simple/visible/fuel{ - dir = 5 - }, -/turf/simulated/floor/plating, -/area/venera/engine/thrusterstarboard) -"EA" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/carpet/blue, -/area/venera/living/bunk) -"EC" = ( -/obj/machinery/light, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/structure/closet{ - name = "engineering wardrobe" - }, -/obj/item/clothing/head/beret/solgov/expedition/engineering, -/obj/item/clothing/head/beret/solgov/expedition/engineering, -/obj/item/clothing/accessory/armband/engine, -/obj/item/clothing/accessory/armband/engine, -/obj/item/device/radio/headset/map_preset/venera, -/obj/item/clothing/under/rank/engineer, -/obj/item/clothing/under/rank/engineer, -/obj/item/device/radio/map_preset/venera, -/turf/simulated/floor/tiled/steel_grid, -/area/venera/engine) -"ED" = ( -/obj/machinery/telecomms/broadcaster/map_preset/venera, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/floor/tiled/techfloor/grid, -/area/venera/maint/starboard/bridge) -"EE" = ( -/obj/random/trash, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 8 - }, -/turf/simulated/floor/tiled/techfloor, -/area/venera/maint/starboard/bridge) -"EK" = ( -/obj/machinery/atmospherics/unary/tank/carbon_dioxide{ - dir = 1; - start_pressure = 8533.13 - }, -/turf/simulated/floor/tiled/techfloor, -/area/venera/engine/thrusterport) -"EN" = ( -/obj/random/junk, -/obj/effect/floor_decal/corner/black{ - dir = 1 - }, -/obj/effect/floor_decal/corner/yellow{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/door/firedoor, -/turf/simulated/floor/tiled/dark, -/area/venera/hallway) -"EP" = ( -/obj/item/forensics/sample_kit/powder, -/turf/simulated/floor/plating, -/area/venera/security/detective) -"EQ" = ( -/obj/machinery/atmospherics/pipe/simple/hidden, -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 4 - }, -/obj/item/reagent_containers/hypospray/autoinjector/combatpain{ - name = "autoinjector (bicaridine)"; - starts_with = list(/datum/reagent/chloralhydrate = 5) - }, -/turf/simulated/floor/tiled/techfloor, -/area/venera/hallway/eva) -"ER" = ( -/obj/structure/table/marble, -/obj/machinery/fabricator/micro, -/turf/simulated/floor/tiled/white/monotile, -/area/venera/living/mess) -"ET" = ( -/obj/structure/catwalk, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/universal{ - dir = 4 - }, -/obj/random/drinkbottle, -/obj/random/snack, -/turf/simulated/floor/plating, -/area/venera/engine/atmos) -"EX" = ( -/obj/random/medical/lite, -/obj/effect/floor_decal/corner/paleblue{ - dir = 10 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/venera/medbay) -"EY" = ( -/obj/effect/wallframe_spawn/reinforced/no_grille, -/obj/machinery/door/firedoor, -/turf/simulated/floor/plating, -/area/venera/medbay/chemistry) -"Fc" = ( -/obj/effect/wallframe_spawn/reinforced, -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/simple/visible/fuel, -/turf/simulated/floor/plating, -/area/venera/engine) -"Ff" = ( -/obj/effect/floor_decal/corner/paleblue{ - dir = 10 - }, -/obj/effect/decal/cleanable/blood/splatter, -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/valve/shutoff/supply, -/obj/machinery/atmospherics/valve/shutoff/scrubbers, -/obj/effect/floor_decal/industrial/shutoff, -/turf/simulated/floor/tiled/dark, -/area/venera/hallway) -"Fm" = ( -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/structure/closet{ - name = "engineering wardrobe" - }, -/obj/item/clothing/head/beret/solgov/expedition/engineering, -/obj/item/clothing/head/beret/solgov/expedition/engineering, -/obj/item/clothing/accessory/armband/engine, -/obj/item/clothing/accessory/armband/engine, -/obj/item/device/radio/headset/map_preset/venera, -/obj/item/clothing/under/rank/engineer, -/obj/item/clothing/under/rank/engineer, -/obj/item/device/radio/map_preset/venera, -/turf/simulated/floor/tiled/steel_grid, -/area/venera/engine) -"Fo" = ( -/obj/effect/floor_decal/corner/black{ - dir = 5 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/alarm{ - pixel_y = 24 - }, -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/turf/simulated/floor/tiled/dark, -/area/venera/hallway) -"Fu" = ( -/turf/simulated/wall/r_wall/prepainted, -/area/venera/bridge/co_office) -"Fw" = ( -/obj/machinery/atmospherics/pipe/manifold/visible/fuel{ - dir = 1 - }, -/turf/simulated/floor/plating, -/area/venera/engine/thrusterstarboard) -"FD" = ( -/turf/simulated/wall/r_wall/hull, -/area/venera/engine/thrusterport) -"FF" = ( -/obj/structure/railing/mapped{ - dir = 1; - icon_state = "railing0-1" - }, -/obj/structure/catwalk, -/obj/structure/closet/emcloset, -/turf/simulated/floor/plating, -/area/venera/disperser) -"FH" = ( -/obj/machinery/atmospherics/pipe/simple/visible/green{ - dir = 4; - icon_state = "intact" - }, -/obj/machinery/atmospherics/pipe/simple/visible/green, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/venera/engine/atmos) -"FI" = ( -/obj/structure/table/marble, -/obj/machinery/chemical_dispenser/bar_soft/full{ - dir = 1; - pixel_y = -6 - }, -/turf/simulated/floor/tiled/white/monotile, -/area/venera/living/mess) -"FK" = ( -/obj/item/storage/firstaid/surgery, -/turf/simulated/floor/tiled/white, -/area/venera/medbay) -"FL" = ( -/obj/structure/table/steel, -/obj/item/folder/red, -/obj/item/paper_bin{ - pixel_x = -3; - pixel_y = 7 - }, -/obj/item/pen{ - pixel_x = 4; - pixel_y = 4 - }, -/obj/machinery/light_switch{ - pixel_x = 23; - pixel_y = 24 - }, -/obj/machinery/button/windowtint{ - id = "venera_interviewwindow"; - pixel_x = 32; - pixel_y = 24 - }, -/obj/machinery/alarm{ - dir = 8; - icon_state = "alarm0"; - pixel_x = 24 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/venera/security/questioning) -"FN" = ( -/obj/effect/floor_decal/spline/fancy/black, -/obj/structure/sign/ecplaque{ - pixel_y = -30 - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/item/device/radio/map_preset/venera, -/turf/simulated/floor/tiled/dark, -/area/venera/bridge) -"FR" = ( -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/embedded_controller/radio/airlock/airlock_controller{ - dir = 8; - id_tag = "venera_solar_port_airlock"; - pixel_x = 24; - tag_airpump = "venera_solar_port_pump"; - tag_chamber_sensor = "venera_solar_port_sensor"; - tag_exterior_door = "venera_solar_port_outer"; - tag_interior_door = "venera_solar_port_inner" - }, -/obj/machinery/atmospherics/unary/vent_pump/high_volume/airlock{ - dir = 1; - id_tag = "venera_solar_port_pump" - }, -/obj/machinery/airlock_sensor{ - id_tag = "venera_solar_port_sensor"; - pixel_x = 24; - pixel_y = 12 - }, -/obj/machinery/oxygen_pump{ - pixel_x = -32 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/venera/maint/port) -"FS" = ( -/obj/effect/decal/cleanable/blood/splatter, -/obj/structure/cable/green{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, -/turf/simulated/floor/tiled/dark, -/area/venera/bridge) -"FT" = ( -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/venera/maint/starboard/bridge) -"FU" = ( -/obj/machinery/computer/atmos_alert, -/obj/machinery/newscaster{ - pixel_y = 32 - }, -/turf/simulated/floor/tiled/steel_grid, -/area/venera/engine) -"FW" = ( -/obj/machinery/firealarm{ - dir = 8; - pixel_x = -24; - pixel_y = 0 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 8 - }, -/turf/simulated/floor/tiled/techfloor, -/area/venera/security) -"FX" = ( -/turf/simulated/wall/r_wall/hull, -/area/venera/maint/port) -"FY" = ( -/obj/machinery/door/airlock/civilian{ - name = "Custodial Closet" - }, -/obj/machinery/door/firedoor, -/turf/simulated/floor/tiled/steel_ridged, -/area/venera/living) -"Gb" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/fuel{ - dir = 4 - }, -/obj/structure/catwalk, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/venera/maint/port) -"Ge" = ( -/obj/effect/floor_decal/corner/green{ - dir = 10; - icon_state = "corner_white" - }, -/obj/structure/barricade/spike, -/turf/simulated/floor/tiled/dark, -/area/venera/hallway) -"Gf" = ( -/obj/effect/landmark/corpse/venera, -/turf/simulated/floor/tiled, -/area/venera/living/hydro) -"Gg" = ( -/obj/structure/table/steel, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/item/forensics/sample_kit, -/obj/item/device/radio/intercom/map_preset/venera{ - dir = 4; - pixel_x = -24 - }, -/turf/simulated/floor/plating, -/area/venera/security/detective) -"Gk" = ( -/obj/structure/table/standard, -/obj/random/loot, -/turf/simulated/floor/tiled/techfloor, -/area/venera/maint/starboard/bridge) -"Gn" = ( -/obj/effect/decal/cleanable/blood/splatter, -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/white, -/area/venera/medbay) -"Go" = ( -/obj/random/trash, -/turf/simulated/floor/tiled/techfloor, -/area/venera/maint/port) -"Gv" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/random/trash, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/venera/maint/port) -"Gy" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/fuel{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/decal/cleanable/blood/drip, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/effect/catwalk_plated/dark, -/turf/simulated/floor/plating, -/area/venera/hallway) -"GC" = ( -/turf/simulated/floor/tiled/dark, -/area/venera/security/questioning) -"GH" = ( -/obj/effect/floor_decal/spline/fancy/black{ - dir = 8; - icon_state = "spline_fancy" - }, -/obj/effect/decal/cleanable/filth, -/turf/simulated/floor/tiled/dark, -/area/venera/bridge) -"GI" = ( -/obj/structure/table/reinforced, -/obj/random/powercell{ - pixel_x = 10; - pixel_y = 2 - }, -/turf/simulated/floor/tiled/white/monotile, -/area/venera/medbay) -"GM" = ( -/turf/simulated/wall/prepainted, -/area/venera/living/mess) -"GP" = ( -/turf/simulated/floor/plating, -/area/venera/disperser/storage) -"GR" = ( -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 1 - }, -/obj/machinery/computer/cryopod{ - density = 0; - pixel_y = -32 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/turf/simulated/floor/tiled/white, -/area/venera/living) -"GS" = ( -/obj/random/vendor, -/obj/effect/floor_decal/corner/black{ - dir = 5 - }, -/obj/machinery/light{ - dir = 1; - icon_state = "tube1" - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark, -/area/venera/hallway) -"GX" = ( -/obj/effect/decal/cleanable/liquid_fuel, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/venera/hallway) -"GY" = ( -/turf/simulated/wall/r_wall/hull, -/area/venera/bridge) -"Hd" = ( -/obj/structure/bed/roller, -/obj/structure/closet/secure_closet/medical_wall{ - name = "Medical Equipment Cabinet"; - pixel_x = 0; - pixel_y = 32 - }, -/obj/random/medical/lite, -/obj/random/junk, -/obj/random/junk, -/obj/random/junk, -/obj/effect/floor_decal/spline/plain/blue{ - dir = 6; - icon_state = "spline_plain" - }, -/turf/simulated/floor/tiled/white, -/area/venera/medbay) -"Hf" = ( -/obj/machinery/atmospherics/portables_connector{ - dir = 1 - }, -/obj/machinery/portable_atmospherics/canister/air, -/obj/machinery/atmospherics/pipe/simple/visible/green{ - dir = 4; - icon_state = "intact" - }, -/turf/simulated/floor/plating, -/area/venera/engine/atmos) -"Hj" = ( -/obj/effect/floor_decal/scglogo{ - icon_state = "bottom-left" - }, -/obj/effect/decal/cleanable/filth, -/turf/simulated/floor/tiled/dark, -/area/venera/bridge) -"Hk" = ( -/obj/machinery/atmospherics/pipe/manifold/visible/cyan, -/obj/machinery/atmospherics/unary/vent_pump/on, -/obj/structure/railing/mapped, -/turf/simulated/floor/plating, -/area/venera/engine/atmos) -"Hl" = ( -/obj/structure/lattice, -/obj/item/stack/material/rods, -/obj/item/material/shard/shrapnel, -/turf/space, -/area/venera/hallway/eva) -"Hm" = ( -/obj/effect/floor_decal/corner/black{ - dir = 4; - icon_state = "corner_white" - }, -/obj/effect/floor_decal/corner/yellow{ - dir = 1 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/light{ - dir = 1; - icon_state = "tube1" - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark, -/area/venera/hallway) -"Hp" = ( -/obj/machinery/vending/tool, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled/steel_grid, -/area/venera/engine) -"Hs" = ( -/obj/effect/floor_decal/industrial/hatch/blue, -/obj/structure/sign/directions/infm{ - pixel_y = 32 - }, -/obj/machinery/door/firedoor, -/turf/simulated/floor/tiled/white/monotile, -/area/venera/medbay) -"Ht" = ( -/obj/structure/grille, -/turf/space, -/area/space) -"Hu" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/structure/sign/solgov{ - pixel_x = 32; - pixel_y = 32 - }, -/turf/simulated/floor/reinforced/airless, -/area/venera/bridge) -"Hy" = ( -/obj/effect/floor_decal/corner/green{ - dir = 10; - icon_state = "corner_white" - }, -/obj/random/trash, -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/dark, -/area/venera/hallway) -"Hz" = ( -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled/dark/monotile, -/area/venera/hallway) -"HB" = ( -/obj/machinery/portable_atmospherics/hydroponics, -/obj/effect/floor_decal/corner/green/mono, -/obj/effect/floor_decal/industrial/hatch/yellow, -/obj/machinery/newscaster{ - pixel_y = 32 - }, -/turf/simulated/floor/tiled/monotile, -/area/venera/living/hydro) -"HH" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/structure/catwalk, -/obj/random/trash, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/turf/simulated/floor/plating, -/area/venera/engine/atmos) -"HK" = ( -/obj/structure/disposalpipe/segment{ - dir = 8; - icon_state = "pipe-c" - }, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/fuel{ - dir = 9; - icon_state = "intact" - }, -/turf/simulated/floor/tiled, -/area/venera/engine) -"HM" = ( -/obj/structure/table/standard, -/obj/machinery/reagent_temperature/cooler, -/obj/item/reagent_containers/glass/beaker{ - pixel_x = 4; - pixel_y = 9 - }, -/turf/simulated/floor/tiled/white, -/area/venera/medbay/chemistry) -"HQ" = ( -/obj/effect/wallframe_spawn/no_grille, -/obj/machinery/door/firedoor, -/turf/simulated/floor/plating, -/area/venera/living/mess) -"HS" = ( -/obj/structure/iv_drip, -/obj/effect/floor_decal/corner/paleblue{ - dir = 5 - }, -/turf/simulated/floor/tiled/white, -/area/venera/medbay) -"HT" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 1 - }, -/turf/simulated/floor/tiled/techfloor, -/area/venera/engine/thrusterport) -"HU" = ( -/obj/effect/floor_decal/corner/black{ - dir = 10 - }, -/obj/item/ammo_casing/rifle/used, -/obj/item/ammo_casing/rifle/used, -/obj/machinery/firealarm{ - dir = 1; - pixel_y = -24 - }, -/turf/simulated/floor/tiled/dark, -/area/venera/hallway) -"HW" = ( -/obj/machinery/light, -/turf/simulated/floor/wood/walnut, -/area/venera/bridge/co_office) -"HX" = ( -/obj/structure/lattice, -/obj/item/stack/material/rods, -/turf/space, -/area/venera/hallway/eva) -"Ia" = ( -/obj/effect/decal/cleanable/blood/splatter, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor, -/area/venera/security) -"Ib" = ( -/obj/effect/landmark/corpse/venera/medical, -/obj/effect/decal/cleanable/blood/splatter, -/obj/item/device/flashlight/pen, -/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, -/turf/simulated/floor/tiled/white, -/area/venera/medbay) -"Id" = ( -/obj/random/firstaid, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/tiled/techfloor, -/area/venera/security) -"If" = ( -/obj/machinery/chem_master/condimaster{ - name = "CondiMaster Neo"; - pixel_x = -5 - }, -/obj/effect/floor_decal/corner/green/three_quarters, -/turf/simulated/floor/tiled, -/area/venera/living/hydro) -"Il" = ( -/obj/machinery/floodlight, -/obj/effect/floor_decal/corner/blue{ - dir = 9 - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/dark, -/area/venera/hallway) -"In" = ( -/obj/effect/floor_decal/corner/red/mono, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/random/contraband, -/obj/machinery/light{ - dir = 1; - icon_state = "tube1" - }, -/obj/item/paper{ - info = "What you say about this locker now, f#ckers? Not now!"; - name = "Oh no!" - }, -/turf/simulated/floor/tiled/monotile, -/area/venera/security/equipment) -"Ix" = ( -/obj/machinery/portable_atmospherics/canister/carbon_dioxide{ - start_pressure = 7559.63 - }, -/turf/simulated/floor/tiled/techfloor, -/area/venera/engine/atmos) -"IA" = ( -/obj/effect/floor_decal/spline/fancy/black{ - dir = 6; - icon_state = "spline_fancy" - }, -/obj/structure/filingcabinet/chestdrawer, -/obj/item/folder/red, -/obj/item/folder/white, -/obj/item/folder/blue, -/obj/machinery/light, -/obj/machinery/newscaster{ - pixel_x = 32 - }, -/turf/simulated/floor/tiled/dark, -/area/venera/bridge) -"IB" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 9; - icon_state = "intact" - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark, -/area/venera/disperser) -"IE" = ( -/obj/effect/floor_decal/corner/paleblue{ - dir = 10 - }, -/obj/effect/decal/cleanable/blood/drip, -/obj/machinery/atmospherics/valve/shutoff/supply, -/obj/machinery/atmospherics/valve/shutoff/scrubbers, -/obj/effect/floor_decal/industrial/shutoff, -/turf/simulated/floor/tiled/dark, -/area/venera/hallway) -"IF" = ( -/obj/machinery/portable_atmospherics/hydroponics, -/obj/effect/floor_decal/corner/green/mono, -/obj/effect/floor_decal/industrial/hatch/yellow, -/turf/simulated/floor/tiled/monotile, -/area/venera/living/hydro) -"II" = ( -/obj/effect/floor_decal/solarpanel, -/obj/machinery/power/solar/improved{ - id = "venera_solars_port"; - name = "Port Solar Panel" - }, -/obj/structure/cable/yellow{ - d2 = 2; - icon_state = "0-2" - }, -/turf/simulated/floor/airless, -/area/venera/engine/solar/port) -"IN" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/machinery/light/navigation/delay5, -/turf/simulated/floor/reinforced/airless, -/area/space) -"IP" = ( -/obj/machinery/atmospherics/pipe/simple/visible/fuel{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/alarm{ - pixel_y = 24 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/turf/simulated/floor/tiled/techfloor, -/area/venera/engine/thrusterport) -"IT" = ( -/obj/effect/floor_decal/corner/red{ - dir = 5 - }, -/obj/random/mre, -/obj/structure/cable/green{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 8 - }, -/turf/simulated/floor/tiled, -/area/venera/security/equipment) -"IX" = ( -/obj/structure/barricade, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, -/turf/simulated/floor/tiled/techmaint, -/area/venera/engine/atmos) -"IZ" = ( -/obj/effect/floor_decal/solarpanel, -/obj/structure/cable/yellow{ - d2 = 2; - icon_state = "0-2" - }, -/obj/machinery/power/solar/improved{ - id = "venera_solars_starboard"; - name = "Starboard Solar Panel" - }, -/turf/simulated/floor/airless, -/area/venera/engine/solar/starboard) -"Jb" = ( -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/structure/cable/yellow{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/airless, -/area/venera/engine/solar/port) -"Jc" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden{ - dir = 4; - icon_state = "map" - }, -/obj/machinery/access_button{ - command = "cycle_interior"; - frequency = 1379; - master_tag = "venera_eva_airlock"; - name = "interior access button"; - pixel_x = -24; - pixel_y = -22 - }, -/turf/simulated/floor/tiled/techfloor, -/area/venera/hallway/eva) -"Jd" = ( -/obj/machinery/door/window/westright{ - dir = 2; - name = "Chemistry Desk" - }, -/obj/structure/table/reinforced, -/obj/item/storage/pill_bottle/zoom, -/obj/machinery/door/firedoor, -/turf/simulated/floor/tiled/white/monotile, -/area/venera/medbay/chemistry) -"Jf" = ( -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/access_button{ - command = "cycle_exterior"; - frequency = 1379; - master_tag = "venera_solar_port_airlock"; - name = "exterior access button"; - pixel_x = -24; - pixel_y = 24 - }, -/turf/simulated/floor/airless, -/area/venera/engine/solar/port) -"Jl" = ( -/obj/machinery/atmospherics/pipe/simple/visible/green{ - dir = 10; - icon_state = "intact" - }, -/obj/machinery/light{ - dir = 1; - icon_state = "tube1" - }, -/obj/machinery/meter, -/obj/structure/railing/mapped{ - dir = 8; - icon_state = "railing0-1" - }, -/turf/simulated/floor/plating, -/area/venera/engine/atmos) -"Jm" = ( -/obj/structure/barricade/spike{ - dir = 4 - }, -/obj/machinery/firealarm{ - dir = 1; - pixel_y = -24 - }, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 1 - }, -/turf/simulated/floor/tiled/techmaint, -/area/venera/engine/atmos) -"Jo" = ( -/obj/structure/cable/green{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/universal{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor, -/area/venera/hallway/eva) -"Jq" = ( -/obj/effect/floor_decal/corner/red/mono, -/obj/structure/table/steel, -/obj/random/tech_supply, -/turf/simulated/floor/tiled/monotile, -/area/venera/security/equipment) -"Jr" = ( -/obj/effect/floor_decal/corner/red{ - dir = 5 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark, -/area/venera/hallway) -"Jv" = ( -/obj/machinery/alarm{ - pixel_y = 24 - }, -/turf/simulated/floor/plating, -/area/venera/security/detective) -"JA" = ( -/obj/machinery/light, -/obj/item/ammo_casing/pistol/used, -/obj/item/ammo_casing/pistol/used, -/obj/item/ammo_magazine/pistol/empty, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor, -/area/venera/security) -"JB" = ( -/obj/machinery/power/apc/super/critical{ - dir = 2; - is_critical = 1; - name = "south bump"; - pixel_y = -24 - }, -/obj/structure/cable/green{ - d2 = 8; - icon_state = "0-8" - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/venera/maint/starboard/bridge) -"JF" = ( -/obj/random/trash, -/obj/machinery/disposal, -/obj/structure/disposalpipe/trunk, -/obj/item/paper/memo/engineering/engineersbad, -/obj/machinery/atmospherics/pipe/simple/hidden/fuel, -/obj/effect/floor_decal/industrial/hatch/yellow, -/turf/simulated/floor/tiled, -/area/venera/engine) -"JN" = ( -/obj/machinery/portable_atmospherics/hydroponics, -/obj/effect/floor_decal/corner/green/mono, -/obj/effect/floor_decal/industrial/hatch/yellow, -/obj/effect/decal/cleanable/cobweb, -/turf/simulated/floor/tiled/monotile, -/area/venera/living/hydro) -"JP" = ( -/obj/structure/catwalk, -/obj/machinery/alarm{ - dir = 1; - icon_state = "alarm0"; - pixel_y = -22 - }, -/turf/simulated/floor/plating, -/area/venera/maint/starboard/bridge) -"JS" = ( -/obj/effect/floor_decal/corner/paleblue, -/obj/random/medical/lite, -/obj/item/ammo_casing/rifle/used, -/obj/item/ammo_casing/rifle/used, -/obj/item/ammo_casing/rifle/used, -/obj/structure/disposalpipe/segment, -/obj/item/ammo_magazine/pistol/empty, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 1 - }, -/turf/simulated/floor/tiled/dark, -/area/venera/hallway) -"JT" = ( -/obj/machinery/light{ - dir = 4; - icon_state = "tube1" - }, -/obj/structure/catwalk, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/plating, -/area/venera/disperser) -"JX" = ( -/obj/effect/floor_decal/corner/grey/diagonal, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/tiled/white, -/area/venera/living/mess) -"JZ" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/structure/catwalk, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/venera/engine/atmos) -"Ka" = ( -/obj/machinery/light/navigation/delay5, -/turf/simulated/floor/reinforced/airless, -/area/space) -"Kb" = ( -/obj/structure/barricade, -/obj/structure/disposalpipe/junction{ - dir = 4; - icon_state = "pipe-j1" - }, -/turf/simulated/floor/wood/ebony, -/area/venera/living/mess) -"Kd" = ( -/obj/machinery/door/firedoor, -/turf/simulated/floor/tiled/techfloor/grid, -/area/venera/security) -"Kg" = ( -/obj/effect/floor_decal/industrial/warning, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/firealarm{ - dir = 2; - pixel_y = 24 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/venera/living) -"Ki" = ( -/obj/machinery/door/unpowered/simple/plastic/open, -/turf/simulated/floor/tiled/freezer, -/area/venera/living) -"Kl" = ( -/obj/effect/floor_decal/corner/green{ - dir = 10; - icon_state = "corner_white" - }, -/obj/random/junk, -/turf/simulated/floor/tiled/dark, -/area/venera/hallway) -"Km" = ( -/obj/machinery/air_sensor{ - id_tag = "venera_fuel_sensor" - }, -/obj/machinery/atmospherics/pipe/simple/visible/fuel{ - dir = 9 - }, -/turf/simulated/floor/reinforced/carbon_dioxide, -/area/venera/engine/thrusterstarboard) -"Kn" = ( -/obj/machinery/reagentgrinder/juicer, -/obj/structure/table/marble, -/turf/simulated/floor/tiled/white/monotile, -/area/venera/living/mess) -"Kp" = ( -/obj/effect/floor_decal/corner/green{ - dir = 10; - icon_state = "corner_white" - }, -/obj/structure/barricade, -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/tiled/dark, -/area/venera/hallway) -"Ks" = ( -/obj/effect/floor_decal/solarpanel, -/obj/structure/cable/yellow, -/obj/machinery/power/solar/improved{ - id = "venera_solars_starboard"; - name = "Starboard Solar Panel" - }, -/turf/simulated/floor/airless, -/area/venera/engine/solar/starboard) -"Kv" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/venera/maint/port) -"Kw" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, -/turf/simulated/floor/tiled/white, -/area/venera/medbay) -"Ky" = ( -/obj/machinery/door/airlock/highsecurity{ - autoset_access = 0; - icon_state = "closed"; - name = "Fire Control" - }, -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/dark/monotile, -/area/venera/disperser) -"Kz" = ( -/obj/structure/railing/mapped{ - dir = 8; - icon_state = "railing0-1" - }, -/obj/machinery/atmospherics/portables_connector{ - dir = 8 - }, -/obj/machinery/portable_atmospherics/canister/air/airlock, -/turf/simulated/floor/plating, -/area/venera/maint/port) -"KA" = ( -/obj/item/ammo_casing/rifle/used, -/obj/item/ammo_casing/rifle/used, -/obj/item/ammo_casing/rifle/used, -/turf/space, -/area/space) -"KE" = ( -/obj/machinery/atmospherics/portables_connector{ - dir = 1 - }, -/obj/machinery/portable_atmospherics/canister/air/airlock, -/turf/simulated/floor/tiled/techmaint, -/area/venera/engine/atmos) -"KF" = ( -/obj/machinery/hologram/holopad, -/obj/machinery/recharger/wallcharger{ - pixel_x = 0; - pixel_y = 24 - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled/techfloor, -/area/venera/security) -"KH" = ( -/obj/item/storage/box/cups, -/obj/random/medical/lite, -/obj/structure/cable/green{ - d2 = 4; - icon_state = "0-4" - }, -/obj/machinery/power/apc{ - dir = 8; - name = "west bump"; - pixel_x = -24 - }, -/obj/structure/table/woodentable_reinforced/ebony, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 4 - }, -/turf/simulated/floor/wood/ebony, -/area/venera/living/bunk) -"KI" = ( -/obj/effect/landmark/corpse/engineer/rig, -/obj/structure/bed/chair/office/comfy/black{ - dir = 4 - }, -/turf/simulated/floor/tiled/techmaint, -/area/venera/engine/atmos) -"KL" = ( -/obj/structure/table/woodentable/ebony, -/obj/item/device/flashlight/lamp/green, -/turf/simulated/floor/carpet, -/area/venera/living/bunk) -"KM" = ( -/obj/effect/floor_decal/corner/paleblue{ - dir = 10 - }, -/obj/item/ammo_casing/rifle/used, -/turf/simulated/floor/tiled/dark, -/area/venera/hallway) -"KN" = ( -/obj/machinery/atmospherics/binary/pump/on{ - dir = 8; - name = "Air to Supply" - }, -/obj/structure/railing/mapped{ - dir = 1; - icon_state = "railing0-1" - }, -/obj/structure/railing/mapped{ - dir = 4; - icon_state = "railing0-1" - }, -/turf/simulated/floor/plating, -/area/venera/engine/atmos) -"KO" = ( -/obj/item/material/shard, -/obj/effect/floor_decal/corner/red{ - dir = 5 - }, -/obj/effect/decal/cleanable/blood/splatter, -/turf/simulated/floor/tiled/dark, -/area/venera/hallway) -"KP" = ( -/obj/effect/floor_decal/corner/black{ - dir = 5 - }, -/obj/machinery/light{ - dir = 1; - icon_state = "tube1" - }, -/obj/structure/disposalpipe/segment{ - dir = 2; - icon_state = "pipe-c" - }, -/turf/simulated/floor/tiled/dark, -/area/venera/hallway) -"KQ" = ( -/obj/effect/floor_decal/corner/grey/diagonal, -/turf/simulated/floor/tiled/white, -/area/venera/living/mess) -"KR" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/fuel, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/disposalpipe/junction, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/white, -/area/venera/living) -"KT" = ( -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/structure/cable/yellow{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/turf/simulated/floor/airless, -/area/venera/engine/solar/starboard) -"KV" = ( -/obj/structure/table/rack{ - dir = 8 - }, -/obj/item/device/suit_cooling_unit, -/obj/item/device/suit_cooling_unit, -/obj/item/device/suit_cooling_unit, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/techfloor/grid, -/area/venera/hallway/eva) -"KW" = ( -/obj/machinery/papershredder, -/obj/item/shreddedp, -/obj/item/device/radio/intercom/map_preset/venera{ - dir = 1; - pixel_y = -31 - }, -/turf/simulated/floor/wood/walnut, -/area/venera/bridge/co_office) -"KZ" = ( -/turf/simulated/wall/r_wall/prepainted, -/area/venera/hallway/eva) -"Le" = ( -/obj/effect/floor_decal/corner/black{ - dir = 5 - }, -/obj/effect/decal/cleanable/blood/drip, -/obj/machinery/door/firedoor, -/turf/simulated/floor/tiled/dark, -/area/venera/hallway) -"Lf" = ( -/obj/structure/cable/green{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/turf/simulated/wall/r_wall/hull, -/area/venera/maint/starboard/bridge) -"Lg" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden{ - dir = 8; - icon_state = "map" - }, -/obj/machinery/access_button{ - command = "cycle_interior"; - frequency = 1379; - master_tag = "venera_solar_starboard_airlock"; - name = "interior access button"; - pixel_x = 24; - pixel_y = 24 - }, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/item/tank/oxygen, -/obj/machinery/power/terminal{ - dir = 4 - }, -/obj/structure/cable/yellow, -/turf/simulated/floor/tiled/techmaint, -/area/venera/engine/atmos) -"Li" = ( -/obj/structure/catwalk, -/obj/machinery/firealarm{ - dir = 2; - pixel_y = 24 - }, -/turf/simulated/floor/plating, -/area/venera/disperser/storage) -"Lm" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/item/ammo_casing/rifle/used, -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/effect/catwalk_plated/dark, -/turf/simulated/floor/plating, -/area/venera/hallway) -"Lp" = ( -/obj/random/tool, -/turf/simulated/floor/tiled/dark/monotile, -/area/venera/hallway) -"Lr" = ( -/obj/effect/floor_decal/corner/paleblue{ - dir = 10 - }, -/turf/simulated/floor/tiled/dark, -/area/venera/hallway) -"Ls" = ( -/obj/effect/floor_decal/corner/black{ - dir = 8 - }, -/obj/effect/floor_decal/corner/blue{ - dir = 6 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, -/turf/simulated/floor/tiled/dark, -/area/venera/hallway) -"Lu" = ( -/obj/random/tool, -/obj/effect/floor_decal/corner/black{ - dir = 5 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/item/ammo_casing/pistol/used, -/turf/simulated/floor/tiled/dark, -/area/venera/hallway) -"Lv" = ( -/obj/structure/cable/green{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/machinery/light/navigation/delay5, -/turf/simulated/floor/reinforced/airless, -/area/space) -"LA" = ( -/obj/effect/floor_decal/corner/green, -/obj/effect/floor_decal/corner/black{ - dir = 8 - }, -/turf/simulated/floor/tiled/dark, -/area/venera/hallway) -"LE" = ( -/obj/item/reagent_containers/glass/beaker{ - pixel_x = 5 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 8 - }, -/turf/simulated/floor/tiled/white, -/area/venera/medbay/chemistry) -"LF" = ( -/turf/simulated/wall/prepainted, -/area/venera/medbay/chemistry) -"LH" = ( -/obj/effect/floor_decal/corner/green{ - dir = 10; - icon_state = "corner_white" - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled, -/area/venera/living/hydro) -"LJ" = ( -/obj/structure/hygiene/sink{ - dir = 4; - icon_state = "sink"; - pixel_x = 11; - pixel_y = 0 - }, -/turf/simulated/floor/tiled/techfloor, -/area/venera/living) -"LK" = ( -/obj/machinery/portable_atmospherics/canister/carbon_dioxide{ - start_pressure = 7559.63 - }, -/obj/machinery/light/small, -/turf/simulated/floor/tiled/techfloor, -/area/venera/engine/atmos) -"LL" = ( -/obj/random/voidsuit, -/obj/item/ammo_casing/rifle/used, -/turf/simulated/floor/tiled/dark/monotile, -/area/venera/hallway) -"LM" = ( -/obj/machinery/door_timer{ - id = "venera_cell2"; - name = "Cell 2 Control"; - pixel_x = 32; - pixel_y = 29 - }, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 8 - }, -/turf/simulated/floor/tiled/techfloor, -/area/venera/security) -"LN" = ( -/obj/machinery/suit_storage_unit/engineering, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled/steel_grid, -/area/venera/engine) -"LP" = ( -/obj/machinery/atmospherics/pipe/simple/visible/green{ - dir = 4; - icon_state = "intact" - }, -/obj/structure/cable/green, -/obj/machinery/power/apc/super/critical{ - dir = 2; - is_critical = 1; - name = "south bump"; - pixel_y = -24 - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/venera/engine/atmos) -"LQ" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 8 - }, -/obj/machinery/alarm{ - dir = 8; - icon_state = "alarm0"; - pixel_x = 24 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/white, -/area/venera/living) -"LS" = ( -/obj/structure/bed/chair/padded/red{ - dir = 8; - icon_state = "chair_preview" - }, -/obj/effect/decal/cleanable/blood/splatter, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 1 - }, -/turf/simulated/floor/plating, -/area/venera/security/lobby) -"LV" = ( -/obj/effect/landmark/corpse/venera/security, -/obj/item/gun/projectile/pistol/military, -/obj/random/firstaid, -/obj/effect/decal/cleanable/blood/splatter, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 8 - }, -/turf/simulated/floor/tiled/techfloor, -/area/venera/security) -"LW" = ( -/obj/item/reagent_containers/ivbag, -/obj/effect/floor_decal/corner/paleblue{ - dir = 10 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/venera/medbay) -"Ma" = ( -/obj/structure/table/steel_reinforced, -/obj/effect/floor_decal/corner/blue/mono, -/obj/item/storage/slide_projector, -/obj/random/powercell, -/turf/simulated/floor/tiled/dark/monotile, -/area/venera/bridge) -"Mb" = ( -/obj/machinery/firealarm{ - dir = 1; - pixel_y = -24 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/venera/security/detective) -"Mm" = ( -/obj/effect/floor_decal/corner/paleblue{ - dir = 10 - }, -/obj/effect/decal/cleanable/blood/splatter, -/mob/living/simple_animal/hostile/meat/strippedhuman, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/venera/medbay) -"Mn" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/simulated/wall/r_wall/hull, -/area/venera/maint/port) -"Mo" = ( -/obj/effect/floor_decal/corner/paleblue{ - dir = 10 - }, -/obj/effect/decal/cleanable/blood/splatter, -/turf/simulated/floor/tiled/dark, -/area/venera/hallway) -"Mp" = ( -/obj/machinery/light_construct{ - dir = 1; - icon_state = "tube-construct-stage1" - }, -/obj/item/folder/red{ - pixel_x = -3 - }, -/turf/simulated/floor/plating, -/area/venera/security/detective) -"Mq" = ( -/obj/machinery/door/airlock/sol{ - id_tag = null; - name = "Bridge"; - secured_wires = 1 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/venera/bridge) -"Mr" = ( -/obj/structure/filingcabinet, -/obj/item/folder, -/obj/item/folder/red, -/obj/item/folder/yellow, -/obj/effect/decal/cleanable/cobweb2, -/turf/simulated/floor/plating, -/area/venera/security/lobby) -"Ms" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/venera/maint/port) -"Mu" = ( -/obj/structure/bed/chair/padded/red{ - dir = 1; - icon_state = "chair_preview" - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/venera/security/questioning) -"Mx" = ( -/obj/structure/bed/padded, -/obj/item/bedsheet, -/turf/simulated/floor/carpet, -/area/venera/living/bunk) -"My" = ( -/obj/structure/table/standard, -/obj/random/loot, -/obj/effect/floor_decal/corner/paleblue/full, -/turf/simulated/floor/tiled/white, -/area/venera/medbay) -"MA" = ( -/obj/machinery/atmospherics/pipe/simple/visible/fuel{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/venera/engine/thrusterstarboard) -"MC" = ( -/obj/effect/floor_decal/corner/pink/mono, -/obj/machinery/bodyscanner{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled/white/monotile, -/area/venera/medbay) -"MD" = ( -/obj/effect/floor_decal/corner/green{ - dir = 10; - icon_state = "corner_white" - }, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 1 - }, -/turf/simulated/floor/tiled/dark, -/area/venera/hallway) -"MG" = ( -/turf/simulated/wall/r_wall/prepainted, -/area/venera/security/equipment) -"MJ" = ( -/obj/random/junk, -/obj/structure/disposalpipe/segment{ - dir = 1; - icon_state = "pipe-c" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/turf/simulated/floor/tiled/dark, -/area/venera/medbay) -"MK" = ( -/obj/structure/grille, -/obj/effect/floor_decal/corner/black{ - dir = 10 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/venera/hallway) -"ML" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/plating, -/area/venera/engine/thrusterstarboard) -"MQ" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 6 - }, -/obj/random/trash, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/venera/maint/port) -"MR" = ( -/obj/effect/floor_decal/corner/blue{ - dir = 9 - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/machinery/atmospherics/valve/shutoff/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/valve/shutoff/scrubbers{ - dir = 4 - }, -/obj/effect/floor_decal/industrial/shutoff{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark, -/area/venera/hallway) -"MU" = ( -/obj/structure/table/marble, -/obj/machinery/light{ - dir = 8; - icon_state = "tube1" - }, -/obj/item/reagent_containers/food/snacks/meatsteak, -/turf/simulated/floor/tiled/white/monotile, -/area/venera/living/mess) -"MW" = ( -/obj/machinery/light{ - dir = 4; - icon_state = "tube1" - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/venera/disperser) -"MZ" = ( -/obj/effect/gibspawner/human, -/obj/item/clothing/suit/storage/toggle/labcoat/chemist{ - was_bloodied = 1 - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 8 - }, -/turf/simulated/floor/tiled/white, -/area/venera/medbay/chemistry) -"Na" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/structure/catwalk, -/turf/simulated/floor/airless, -/area/space) -"Nb" = ( -/obj/machinery/atmospherics/valve/shutoff/fuel{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/effect/floor_decal/industrial/shutoff{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/venera/engine) -"Nh" = ( -/obj/item/ammo_casing/pistol/used, -/obj/item/ammo_casing/pistol/used, -/turf/simulated/floor/tiled/techfloor, -/area/venera/security) -"Ni" = ( -/obj/machinery/light/small, -/turf/simulated/floor/tiled/techfloor, -/area/venera/maint/port) -"Nk" = ( -/obj/item/crowbar/emergency_forcing_tool, -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 6 - }, -/turf/simulated/floor/tiled/techfloor, -/area/venera/hallway/eva) -"Np" = ( -/turf/simulated/floor/tiled/techfloor, -/area/venera/maint/port) -"Nq" = ( -/obj/machinery/alarm{ - pixel_y = 24 - }, -/turf/simulated/floor/tiled/techfloor, -/area/venera/security) -"Nr" = ( -/obj/structure/cable/green{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/venera/engine/atmos) -"Nt" = ( -/obj/effect/floor_decal/corner/black{ - dir = 5 - }, -/obj/effect/decal/cleanable/blood/drip, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark, -/area/venera/hallway) -"Nv" = ( -/obj/structure/iv_drip, -/obj/structure/window/reinforced{ - dir = 1 - }, -/turf/simulated/floor/tiled/white, -/area/venera/medbay) -"Nx" = ( -/obj/machinery/atmospherics/portables_connector, -/obj/machinery/portable_atmospherics/canister/air/airlock{ - start_pressure = 0 - }, -/obj/machinery/door/window/westright{ - dir = 2; - name = "E.V.A. Airlock Air Storage" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/venera/hallway/eva) -"Ny" = ( -/obj/effect/decal/cleanable/blood/drip, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/mob/living/simple_animal/hostile/meat/horrorsmall, -/turf/simulated/floor/tiled/dark, -/area/venera/disperser) -"Nz" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/wall/r_wall/hull, -/area/venera/engine/thrusterstarboard) -"NB" = ( -/obj/item/stack/material/uranium/ten, -/obj/machinery/light/small{ - dir = 4; - icon_state = "bulb1" - }, -/obj/structure/table/rack, -/turf/simulated/floor/tiled/techfloor/grid, -/area/venera/engine/atmos) -"NH" = ( -/obj/structure/cable/green, -/obj/machinery/power/apc{ - dir = 2; - name = "south bump"; - pixel_y = -24 - }, -/obj/machinery/firealarm{ - dir = 8; - pixel_x = -24 - }, -/obj/machinery/light_switch{ - pixel_x = -23; - pixel_y = -25 - }, -/turf/simulated/floor/tiled/techfloor, -/area/venera/engine/thrusterport) -"NP" = ( -/turf/simulated/floor/tiled, -/area/venera/living/hydro) -"NS" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/fuel{ - dir = 10; - icon_state = "intact" - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/structure/disposalpipe/segment{ - dir = 2; - icon_state = "pipe-c" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, -/turf/simulated/floor/tiled/white, -/area/venera/living) -"NT" = ( -/obj/structure/table/steel, -/obj/item/storage/bible/quran, -/obj/random/smokes, -/obj/item/material/knife/kitchen, -/obj/item/reagent_containers/food/snacks/meatsteak/toxin, -/turf/simulated/floor/tiled/techmaint, -/area/venera/engine/atmos) -"NW" = ( -/obj/random/obstruction, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/venera/hallway) -"NY" = ( -/obj/machinery/door/airlock/multi_tile/glass/security{ - locked = 1; - name = "Security Lobby"; - welded = 1 - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/door/firedoor, -/turf/simulated/floor/tiled/techfloor/grid, -/area/venera/security/lobby) -"Oc" = ( -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 5; - icon_state = "intact" - }, -/turf/simulated/floor/tiled/techfloor, -/area/venera/hallway/eva) -"Oe" = ( -/obj/structure/closet/secure_closet/engineering_welding, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled/steel_grid, -/area/venera/engine) -"Of" = ( -/obj/random/handgun, -/obj/machinery/light, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor, -/area/venera/security) -"On" = ( -/obj/structure/table/steel, -/obj/item/paper_bin{ - pixel_y = 3 - }, -/obj/item/pen{ - pixel_x = 4; - pixel_y = 4 - }, -/turf/simulated/floor/tiled/techfloor, -/area/venera/security/lobby) -"Os" = ( -/obj/structure/railing/mapped, -/obj/random/tech_supply, -/obj/structure/table/rack, -/turf/simulated/floor/plating, -/area/venera/maint/starboard/bridge) -"Ot" = ( -/obj/structure/railing/mapped{ - dir = 1; - icon_state = "railing0-1" - }, -/turf/simulated/floor/airless, -/area/venera/disperser) -"Ov" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/venera/medbay) -"Ox" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/light/small{ - dir = 4; - icon_state = "bulb1" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/carpet/blue, -/area/venera/living/bunk) -"Oy" = ( -/obj/item/clothing/under/syndicate/combat, -/obj/item/clothing/accessory/iccgn_rank/o2, -/obj/item/clothing/gloves/iccgn/duty, -/obj/item/clothing/head/iccgn/beret, -/obj/item/clothing/shoes/iccgn/utility, -/obj/item/clothing/suit/iccgn/dress_officer, -/obj/item/clothing/accessory/iccgn_patch/gilgamesh, -/obj/item/clothing/accessory/iccgn_badge/officer, -/obj/random/projectile, -/mob/living/simple_animal/hostile/meat/strippedhuman{ - name = "turned ICCGN Agent" - }, -/obj/effect/decal/cleanable/blood/splatter, -/obj/item/handcuffs/cable/red, -/obj/item/reagent_containers/syringe/zombie, -/obj/item/paper{ - info = "Welcome agents! [br] So get to the point... You need to infiltrate the SolFuckers facility, this ship will really interfere with us when the mercenaries start working with the Torch. [br] After infiltrating the ship, you have to signal the Agent on the ship, he will understand. [br] Your task is simply to distract the opponents from the real threat. If you do all the work for the agent, then no one will mind, but you will all die of the infection. [br] Don't forget to burn it, idiots. And good luck, glory #C##N!"; - name = "Mission Briefing" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark, -/area/venera/bridge) -"OA" = ( -/obj/machinery/firealarm{ - dir = 4; - pixel_x = 21 - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/venera/disperser) -"OB" = ( -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 8 - }, -/obj/structure/cable/green{ - d2 = 8; - icon_state = "0-8" - }, -/obj/machinery/power/apc{ - dir = 1; - name = "north bump"; - pixel_x = 0; - pixel_y = 24 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 1 - }, -/turf/simulated/floor/tiled/white, -/area/venera/living) -"OE" = ( -/obj/structure/table/reinforced, -/obj/item/reagent_containers/spray/cleaner, -/turf/simulated/floor/tiled/white/monotile, -/area/venera/medbay) -"OI" = ( -/obj/machinery/atmospherics/pipe/simple/visible/fuel{ - dir = 6 - }, -/turf/simulated/floor/plating, -/area/venera/engine/thrusterstarboard) -"OM" = ( -/obj/effect/floor_decal/industrial/outline/grey, -/obj/machinery/portable_atmospherics/powered/scrubber, -/turf/simulated/floor/tiled/techfloor, -/area/venera/maint/starboard/bridge) -"ON" = ( -/obj/effect/shuttle_landmark/nav_venera/aquila, -/turf/space, -/area/space) -"OP" = ( -/obj/effect/floor_decal/corner/green{ - dir = 5 - }, -/obj/random/trash, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark, -/area/venera/hallway) -"OR" = ( -/turf/simulated/wall/r_wall/hull, -/area/venera/disperser/storage) -"OS" = ( -/obj/random/junk, -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 8 - }, -/turf/simulated/floor/tiled/techfloor, -/area/venera/security) -"OY" = ( -/obj/structure/closet/crate/freezer/rations, -/turf/simulated/floor/tiled/techfloor, -/area/venera/maint/starboard/bridge) -"OZ" = ( -/obj/effect/decal/cleanable/filth, -/obj/item/ammo_casing/pistol/used, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark, -/area/venera/bridge) -"Pb" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 4 - }, -/obj/machinery/atmospherics/valve/shutoff/fuel, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/light{ - dir = 8; - icon_state = "tube1" - }, -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/effect/floor_decal/industrial/shutoff, -/turf/simulated/floor/tiled/white, -/area/venera/living) -"Pc" = ( -/turf/simulated/wall/r_wall/prepainted, -/area/venera/disperser) -"Pe" = ( -/obj/structure/bed/padded, -/obj/item/bedsheet/orange, -/obj/item/gun/magnetic/preloaded, -/obj/random/powercell{ - pixel_x = 10; - pixel_y = 2 - }, -/obj/random/powercell, -/turf/simulated/floor/tiled/techmaint, -/area/venera/engine/atmos) -"Pg" = ( -/obj/structure/disposalpipe/segment, -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/techfloor/grid, -/area/venera/security/lobby) -"Ph" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/wall/r_wall/hull, -/area/venera/maint/port) -"Pi" = ( -/turf/simulated/wall/r_wall/hull, -/area/venera/engine/atmos) -"Pk" = ( -/obj/structure/bed/chair{ - dir = 4 - }, -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/turf/simulated/floor/wood/ebony, -/area/venera/living/mess) -"Pr" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/catwalk, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/venera/engine/atmos) -"Pv" = ( -/obj/machinery/door/airlock/multi_tile/glass/medical{ - dir = 4; - id_tag = null; - name = "Treatment Center" - }, -/obj/effect/floor_decal/industrial/hatch/blue, -/obj/machinery/door/firedoor, -/turf/simulated/floor/tiled/white/monotile, -/area/venera/medbay) -"Pw" = ( -/obj/effect/floor_decal/corner/red{ - dir = 5 - }, -/obj/machinery/recharger/wallcharger{ - dir = 4; - icon_state = "wrecharger0"; - pixel_x = -23; - pixel_y = -3 - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 - }, -/turf/simulated/floor/tiled, -/area/venera/security/equipment) -"PA" = ( -/obj/item/storage/secure/safe{ - pixel_x = -22; - pixel_y = 0 - }, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 1 - }, -/turf/simulated/floor/wood/walnut, -/area/venera/bridge/co_office) -"PC" = ( -/obj/random/junk, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/wood/ebony, -/area/venera/living/bunk) -"PD" = ( -/obj/machinery/conveyor{ - id_tag = "venera_md_58_con" - }, -/turf/simulated/floor/airless, -/area/venera/disperser) -"PE" = ( -/obj/structure/window/reinforced{ - dir = 1 - }, -/obj/structure/inflatable/wall, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled/techfloor/grid, -/area/venera/hallway/eva) -"PG" = ( -/obj/machinery/newscaster{ - pixel_y = 32 - }, -/obj/item/ammo_casing/pistol/used, -/obj/item/ammo_casing/pistol/used, -/turf/simulated/floor/tiled/techfloor, -/area/venera/security) -"PJ" = ( -/obj/effect/floor_decal/spline/fancy/black{ - dir = 1; - icon_state = "spline_fancy" - }, -/obj/random/junk, -/turf/simulated/floor/tiled/dark, -/area/venera/hallway) -"PK" = ( -/obj/item/clothing/gloves/thick, -/obj/structure/table/rack, -/obj/machinery/firealarm{ - dir = 2; - pixel_y = 24 - }, -/turf/simulated/floor/tiled/steel_grid, -/area/venera/engine) -"PL" = ( -/obj/effect/floor_decal/corner/grey/diagonal, -/obj/effect/decal/cleanable/flour, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/venera/living/mess) -"PQ" = ( -/obj/structure/catwalk, -/obj/machinery/button/alternate/door/bolts{ - id_tag = "venera_bridge_back"; - name = "Emergency Exit door-control"; - pixel_x = 25; - pixel_y = 25 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 8 - }, -/turf/simulated/floor/plating, -/area/venera/disperser/storage) -"PR" = ( -/obj/machinery/atmospherics/pipe/simple/visible/green{ - dir = 4; - icon_state = "intact" - }, -/obj/machinery/firealarm{ - dir = 1; - pixel_y = -24 - }, -/obj/random/toolbox, -/obj/structure/railing/mapped{ - dir = 4; - icon_state = "railing0-1" - }, -/turf/simulated/floor/plating, -/area/venera/engine/atmos) -"PT" = ( -/obj/machinery/reagentgrinder, -/obj/item/reagent_containers/glass/beaker/large, -/obj/machinery/alarm{ - dir = 1; - icon_state = "alarm0"; - pixel_y = -22 - }, -/obj/machinery/light_switch{ - pixel_x = -23; - pixel_y = -25 - }, -/turf/simulated/floor/tiled/white, -/area/venera/medbay/chemistry) -"PU" = ( -/obj/machinery/recharger/wallcharger{ - pixel_x = 0; - pixel_y = 24 - }, -/turf/simulated/floor/tiled/dark, -/area/venera/bridge) -"PX" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/venera/medbay) -"Qc" = ( -/obj/machinery/light_construct, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/venera/security/detective) -"Qh" = ( -/obj/structure/railing/mapped{ - dir = 1; - icon_state = "railing0-1" - }, -/obj/machinery/atmospherics/portables_connector, -/obj/machinery/portable_atmospherics/canister/air/airlock, -/obj/machinery/alarm{ - dir = 4; - pixel_x = -23; - pixel_y = 0 - }, -/turf/simulated/floor/plating, -/area/venera/disperser) -"Qk" = ( -/obj/machinery/vending/wallmed1{ - dir = 4; - name = "Emergency NanoMed"; - pixel_x = -30; - pixel_y = 0 - }, -/obj/effect/decal/cleanable/cobweb, -/obj/structure/table/steel_reinforced, -/obj/item/storage/box/cups, -/turf/simulated/floor/tiled/techfloor/grid, -/area/venera/security) -"Ql" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/fuel{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/catwalk_plated, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/venera/engine) -"Qo" = ( -/obj/machinery/atmospherics/pipe/simple/visible/green{ - dir = 4; - icon_state = "intact" - }, -/turf/simulated/wall/r_wall/hull, -/area/venera/engine/atmos) -"Qt" = ( -/obj/effect/floor_decal/corner/black{ - dir = 5 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/closet/hydrant{ - pixel_y = 32 - }, -/turf/simulated/floor/tiled/dark, -/area/venera/hallway) -"Qz" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/door/airlock/highsecurity{ - name = "Telecommunications" - }, -/obj/machinery/door/firedoor, -/turf/simulated/floor/tiled/steel_ridged, -/area/venera/maint/starboard/bridge) -"QE" = ( -/turf/simulated/wall/r_wall/prepainted, -/area/venera/security/lobby) -"QF" = ( -/obj/item/ammo_casing/rifle/used, -/turf/simulated/floor/tiled/dark/monotile, -/area/venera/hallway) -"QG" = ( -/obj/machinery/atmospherics/omni/filter{ - tag_east = 1; - tag_north = 4; - tag_south = 2; - tag_west = 3 - }, -/obj/structure/railing/mapped{ - dir = 1; - icon_state = "railing0-1" - }, -/obj/structure/railing/mapped{ - dir = 4; - icon_state = "railing0-1" - }, -/turf/simulated/floor/plating, -/area/venera/engine/atmos) -"QN" = ( -/obj/effect/floor_decal/corner/black{ - dir = 10 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/random/trash, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark, -/area/venera/hallway) -"QQ" = ( -/obj/machinery/door/airlock/security{ - name = "Security Interview Room" - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/techfloor/grid, -/area/venera/security/questioning) -"QR" = ( -/obj/effect/wallframe_spawn/no_grille, -/obj/machinery/door/firedoor, -/turf/simulated/floor/plating, -/area/venera/living) -"QS" = ( -/obj/effect/floor_decal/corner/yellow/mono, -/obj/item/stack/material/rods{ - amount = 50 - }, -/obj/item/device/radio/intercom/map_preset/venera{ - dir = 4; - pixel_x = -24 - }, -/obj/structure/table/rack, -/turf/simulated/floor/tiled, -/area/venera/engine) -"QT" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/catwalk, -/turf/simulated/floor/airless, -/area/space) -"QU" = ( -/obj/machinery/atmospherics/pipe/simple/visible/green{ - dir = 9; - icon_state = "intact" - }, -/turf/simulated/wall/r_wall/prepainted, -/area/venera/engine/thrusterstarboard) -"QX" = ( -/obj/machinery/vending/hydronutrients/generic, -/obj/effect/floor_decal/corner/green{ - dir = 6 - }, -/obj/machinery/alarm{ - dir = 8; - icon_state = "alarm0"; - pixel_x = 24 - }, -/turf/simulated/floor/tiled, -/area/venera/living/hydro) -"Ra" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/fuel{ - dir = 5; - icon_state = "intact" - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/item/ammo_casing/rifle/used, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, -/turf/simulated/floor/tiled/dark/monotile, -/area/venera/hallway) -"Rf" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/fuel{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/item/ammo_casing/rifle/used, -/obj/effect/decal/cleanable/blood/splatter, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/effect/catwalk_plated/dark, -/turf/simulated/floor/plating, -/area/venera/hallway) -"Rh" = ( -/obj/machinery/light/small{ - dir = 1 - }, -/obj/random/torchcloset, -/turf/simulated/floor/tiled/techfloor, -/area/venera/maint/starboard/bridge) -"Ri" = ( -/obj/effect/floor_decal/corner/yellow/half{ - dir = 1; - icon_state = "bordercolorhalf" - }, -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/turf/simulated/floor/tiled, -/area/venera/engine) -"Rk" = ( -/obj/effect/shuttle_landmark/nav_venera/nav2, -/turf/space, -/area/space) -"Rm" = ( -/obj/effect/decal/cleanable/blood/drip, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 1 - }, -/turf/simulated/floor/tiled/dark, -/area/venera/disperser) -"Ro" = ( -/obj/machinery/barrier{ - anchored = 1; - locked = 1 - }, -/obj/effect/floor_decal/corner/black{ - dir = 10 - }, -/turf/simulated/floor/tiled/dark, -/area/venera/hallway) -"Rq" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/fuel{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/decal/cleanable/blood/drip, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, -/turf/simulated/floor/tiled/dark/monotile, -/area/venera/hallway) -"Rt" = ( -/obj/effect/floor_decal/corner/green{ - dir = 5 - }, -/obj/effect/decal/cleanable/blood/drip, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark, -/area/venera/hallway) -"Rx" = ( -/obj/effect/floor_decal/spline/fancy/wood, -/obj/machinery/disposal, -/obj/structure/disposalpipe/trunk{ - dir = 4 - }, -/obj/effect/floor_decal/industrial/hatch/yellow, -/turf/simulated/floor/tiled/dark, -/area/venera/living/mess) -"RA" = ( -/obj/machinery/light_switch{ - pixel_x = 22; - pixel_y = 6 - }, -/obj/random/solgov, -/obj/structure/catwalk, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/plating, -/area/venera/disperser) -"RB" = ( -/obj/machinery/atmospherics/binary/pump/high_power/on, -/obj/machinery/atmospherics/pipe/simple/visible/fuel{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/venera/engine/atmos) -"RC" = ( -/obj/structure/railing/mapped, -/obj/random/tech_supply, -/obj/random/tech_supply, -/obj/structure/table/rack, -/obj/machinery/firealarm{ - dir = 2; - pixel_y = 24 - }, -/turf/simulated/floor/plating, -/area/venera/maint/starboard/bridge) -"RD" = ( -/obj/item/reagent_containers/spray/cleaner, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/venera/security) -"RF" = ( -/obj/effect/floor_decal/corner/green{ - dir = 5 - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/dark, -/area/venera/hallway) -"RH" = ( -/obj/effect/floor_decal/corner/green, -/obj/effect/floor_decal/corner/black{ - dir = 8 - }, -/obj/effect/decal/cleanable/blood/drip, -/obj/machinery/barrier{ - anchored = 1; - locked = 1 - }, -/turf/simulated/floor/tiled/dark, -/area/venera/hallway) -"RJ" = ( -/obj/item/auto_cpr, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/venera/medbay) -"RK" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/venera/hallway) -"RM" = ( -/obj/random/maintenance/solgov, -/turf/simulated/floor/tiled/techfloor, -/area/venera/maint/port) -"RO" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/dark, -/area/venera/disperser) -"RU" = ( -/obj/effect/wallframe_spawn/reinforced/hull, -/obj/machinery/door/blast/regular{ - dir = 4; - id_tag = "venera_mdwindow_58_bd"; - name = "Mass Driver Blast Door" - }, -/obj/machinery/door/firedoor, -/turf/simulated/floor/plating, -/area/venera/disperser) -"RV" = ( -/obj/machinery/power/smes/buildable/preset/on_full, -/obj/structure/cable/green, -/obj/machinery/light/small, -/turf/simulated/floor/tiled/techfloor, -/area/venera/maint/port) -"RX" = ( -/obj/structure/table/marble, -/obj/structure/disposalpipe/segment, -/obj/machinery/door/firedoor, -/obj/item/reagent_containers/food/snacks/meatsteak/toxin, -/turf/simulated/floor/tiled/white/monotile, -/area/venera/living/mess) -"RZ" = ( -/obj/effect/floor_decal/spline/fancy/wood{ - dir = 1; - icon_state = "spline_fancy" - }, -/obj/item/shreddedp, -/obj/random/cash, -/obj/machinery/newscaster{ - pixel_x = -32 - }, -/turf/simulated/floor/wood/walnut, -/area/venera/bridge/co_office) -"Sb" = ( -/obj/structure/table/steel, -/obj/random/contraband, -/obj/random/contraband, -/obj/machinery/light{ - dir = 1; - icon_state = "tube1" - }, -/obj/random/powercell, -/turf/simulated/floor/tiled/techmaint, -/area/venera/engine/atmos) -"Sd" = ( -/obj/machinery/seed_extractor, -/obj/effect/floor_decal/corner/green{ - dir = 9 - }, -/obj/item/device/radio/intercom/map_preset/venera{ - dir = 4; - pixel_x = -24 - }, -/turf/simulated/floor/tiled, -/area/venera/living/hydro) -"Se" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/light/small, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/venera/maint/port) -"Sg" = ( -/obj/structure/bed/chair/comfy/blue, -/obj/effect/floor_decal/corner/blue{ - dir = 10 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/dark, -/area/venera/bridge) -"Sh" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/techfloor, -/area/venera/security) -"Sm" = ( -/obj/item/stack/material/plasteel, -/turf/space, -/area/space) -"Sn" = ( -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/structure/janitorialcart, -/obj/item/mop, -/obj/item/reagent_containers/glass/bucket, -/obj/effect/decal/cleanable/cobweb, -/turf/simulated/floor/tiled/techfloor, -/area/venera/living) -"So" = ( -/obj/random/junk, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor, -/area/venera/security) -"Sr" = ( -/obj/random/medical/lite, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/item/device/radio/intercom/map_preset/venera{ - dir = 1; - pixel_y = -31 - }, -/turf/simulated/floor/tiled/white, -/area/venera/medbay) -"St" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/wall/r_wall/hull, -/area/venera/engine/atmos) -"Su" = ( -/obj/item/paper, -/obj/structure/sign/double/solgovflag/right{ - dir = 4; - pixel_x = -32 - }, -/turf/simulated/floor/carpet/blue, -/area/venera/bridge/co_office) -"Sz" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/visible/red{ - dir = 10; - icon_state = "intact" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/venera/engine/atmos) -"SF" = ( -/obj/machinery/door/airlock/engineering{ - name = "Engine Control Room" - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/door/firedoor, -/turf/simulated/floor/tiled/steel_ridged, -/area/venera/engine/atmos) -"SI" = ( -/obj/effect/floor_decal/spline/fancy/wood{ - dir = 8 - }, -/obj/machinery/recharger/wallcharger{ - dir = 8; - icon_state = "wrecharger0"; - pixel_x = 23; - pixel_y = -3 - }, -/obj/machinery/hologram/holopad, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/wood/walnut, -/area/venera/bridge/co_office) -"SK" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 8 - }, -/turf/simulated/floor/tiled, -/area/venera/engine) -"SL" = ( -/obj/structure/table/steel_reinforced, -/obj/effect/floor_decal/corner/blue/mono, -/obj/item/book/manual/sol_sop, -/turf/simulated/floor/tiled/dark/monotile, -/area/venera/bridge) -"SM" = ( -/obj/machinery/atmospherics/pipe/simple/visible/green, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/venera/engine/atmos) -"SN" = ( -/obj/machinery/firealarm{ - dir = 2; - pixel_y = 24 - }, -/turf/simulated/floor/tiled/freezer, -/area/venera/living) -"SR" = ( -/obj/structure/railing/mapped, -/obj/structure/railing/mapped{ - dir = 8; - icon_state = "railing0-1" - }, -/obj/structure/ship_munition/ap_slug{ - dir = 8 - }, -/turf/simulated/floor/plating, -/area/venera/maint/starboard/bridge) -"SS" = ( -/obj/random/junk, -/obj/effect/floor_decal/corner/paleblue{ - dir = 5 - }, -/turf/simulated/floor/tiled/white, -/area/venera/medbay) -"SV" = ( -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/structure/cable/yellow{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/turf/simulated/floor/airless, -/area/venera/engine/solar/port) -"SW" = ( -/obj/effect/floor_decal/corner/black{ - dir = 5 - }, -/obj/structure/barricade/spike{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark, -/area/venera/hallway) -"Tg" = ( -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/structure/cable/yellow{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/turf/simulated/floor/airless, -/area/venera/engine/solar/port) -"Ti" = ( -/obj/item/stack/material/steel, -/turf/space, -/area/space) -"Tj" = ( -/obj/effect/floor_decal/industrial/outline/grey, -/obj/structure/closet/emcloset, -/obj/item/device/radio/map_preset/venera, -/turf/simulated/floor/tiled/techfloor, -/area/venera/maint/port) -"Tt" = ( -/obj/effect/gibspawner/human, -/obj/item/ammo_casing/rifle/used, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/item/clothing/gloves/fire, -/obj/item/storage/belt/fire_belt/full, -/obj/item/clothing/head/hardhat/firefighter, -/obj/item/clothing/suit/fire/firefighter, -/obj/random/loot, -/turf/simulated/floor/tiled/dark/monotile, -/area/venera/hallway) -"Tu" = ( -/obj/structure/cable/green{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/catwalk, -/turf/simulated/floor/airless, -/area/space) -"Ty" = ( -/obj/effect/floor_decal/scglogo{ - icon_state = "bottom-center" - }, -/obj/effect/decal/cleanable/filth, -/obj/item/ammo_magazine/pistol/empty, -/turf/simulated/floor/tiled/dark, -/area/venera/bridge) -"Tz" = ( -/obj/machinery/atmospherics/portables_connector{ - dir = 8 - }, -/turf/simulated/floor/plating, -/area/venera/engine/thrusterstarboard) -"TA" = ( -/turf/simulated/floor/wood/ebony, -/area/venera/living/bunk) -"TB" = ( -/obj/machinery/atmospherics/pipe/simple/visible/cyan{ - dir = 10 - }, -/obj/machinery/light{ - dir = 1; - icon_state = "tube1" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/venera/engine/atmos) -"TE" = ( -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/fuel{ - dir = 5; - icon_state = "intact" - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/structure/disposalpipe/segment{ - dir = 1; - icon_state = "pipe-c" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/turf/simulated/floor/tiled/white, -/area/venera/living) -"TF" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/carpet/blue, -/area/venera/living/bunk) -"TG" = ( -/obj/structure/largecrate, -/obj/structure/railing/mapped, -/obj/structure/railing/mapped{ - dir = 4; - icon_state = "railing0-1" - }, -/obj/random/tech_supply, -/obj/random/tech_supply, -/obj/random/maintenance/solgov, -/obj/random/maintenance/solgov, -/obj/random/maintenance/solgov, -/turf/simulated/floor/plating, -/area/venera/maint/port) -"TI" = ( -/obj/structure/closet/body_bag, -/obj/effect/floor_decal/corner/paleblue{ - dir = 5 - }, -/obj/effect/landmark/corpse/venera, -/turf/simulated/floor/tiled/white, -/area/venera/medbay) -"TK" = ( -/obj/machinery/porta_turret{ - auto_repair = 1; - id_tag = "venera_turret_58"; - lethal = 1; - name = "SGV Venera Defence Turret"; - shot_delay = 10 - }, -/obj/effect/floor_decal/industrial/outline/red, -/turf/simulated/floor/reinforced/airless, -/area/venera/bridge) -"TM" = ( -/obj/effect/floor_decal/corner/paleblue{ - dir = 5 - }, -/obj/structure/disposalpipe/segment{ - dir = 2; - icon_state = "pipe-c" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, -/turf/simulated/floor/tiled/white, -/area/venera/medbay) -"TN" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/carpet/blue, -/area/venera/living/bunk) -"TO" = ( -/obj/item/stack/material/plasteel, -/obj/item/ammo_casing/rifle/used, -/turf/space, -/area/space) -"TP" = ( -/obj/structure/table/steel, -/obj/random/firstaid, -/obj/machinery/alarm{ - pixel_y = 24 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/venera/disperser) -"TQ" = ( -/obj/machinery/door/firedoor, -/turf/simulated/floor/tiled/techfloor, -/area/venera/security) -"TR" = ( -/turf/simulated/wall/r_wall/hull, -/area/venera/bridge/co_office) -"TT" = ( -/obj/structure/hygiene/toilet{ - dir = 4 - }, -/obj/item/taperoll/bog, -/turf/simulated/floor/tiled/freezer, -/area/venera/living) -"TU" = ( -/obj/machinery/portable_atmospherics/canister/oxygen, -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/turf/simulated/floor/tiled/techfloor, -/area/venera/hallway/eva) -"TZ" = ( -/obj/effect/wallframe_spawn/reinforced_phoron, -/obj/machinery/atmospherics/pipe/simple/visible/fuel, -/obj/machinery/meter, -/turf/simulated/floor/plating, -/area/venera/engine/thrusterstarboard) -"Uc" = ( -/obj/machinery/atmospherics/unary/vent_pump/high_volume/airlock{ - dir = 8; - id_tag = "venera_eva_airlock_pump" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/venera/hallway/eva) -"Ud" = ( -/obj/structure/catwalk, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, -/turf/simulated/floor/plating, -/area/venera/maint/starboard/bridge) -"Ue" = ( -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 4 - }, -/obj/machinery/door/airlock/external{ - name = "Docking Port Airlock" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/venera/hallway/eva) -"Uh" = ( -/obj/structure/table/standard, -/obj/machinery/light, -/turf/simulated/floor/tiled/white, -/area/venera/medbay) -"Uj" = ( -/obj/item/reagent_containers/ivbag, -/obj/effect/floor_decal/corner/paleblue{ - dir = 5 - }, -/turf/simulated/floor/tiled/white, -/area/venera/medbay) -"Um" = ( -/turf/simulated/wall/prepainted, -/area/venera/maint/port) -"UB" = ( -/obj/effect/wallframe_spawn/no_grille, -/obj/machinery/door/firedoor, -/turf/simulated/floor/plating, -/area/venera/hallway/eva) -"UE" = ( -/obj/effect/decal/cleanable/blood/splatter, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/dark, -/area/venera/hallway) -"UH" = ( -/turf/simulated/wall/r_wall/hull, -/area/venera/hallway/eva) -"UI" = ( -/obj/effect/gibspawner/human, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 1 - }, -/turf/simulated/floor/tiled/techfloor, -/area/venera/security) -"UJ" = ( -/obj/machinery/atmospherics/pipe/manifold4w/visible/fuel, -/obj/machinery/meter, -/turf/simulated/floor/plating, -/area/venera/engine/thrusterstarboard) -"UL" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/venera/maint/port) -"UO" = ( -/obj/random/junk, -/obj/effect/floor_decal/corner/red/three_quarters{ - dir = 1 - }, -/obj/item/ammo_casing/rifle/used, -/obj/machinery/firealarm{ - pixel_y = 21 - }, -/turf/simulated/floor/tiled/dark, -/area/venera/hallway) -"UP" = ( -/obj/structure/window/reinforced{ - dir = 1 - }, -/obj/structure/inflatable/wall, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled/techfloor, -/area/venera/hallway/eva) -"US" = ( -/mob/living/simple_animal/hostile/meat/horrorsmall, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark, -/area/venera/bridge) -"UT" = ( -/obj/machinery/light, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/turf/simulated/floor/tiled/freezer, -/area/venera/living) -"UV" = ( -/obj/machinery/atmospherics/pipe/manifold/visible/fuel, -/turf/simulated/floor/plating, -/area/venera/engine/thrusterport) -"UW" = ( -/obj/structure/bed/chair/comfy/blue, -/turf/simulated/floor/tiled/white, -/area/venera/medbay/chemistry) -"UY" = ( -/obj/structure/table/standard, -/obj/random/tech_supply, -/turf/simulated/floor/tiled/white/monotile, -/area/venera/medbay) -"UZ" = ( -/obj/machinery/door/airlock/hatch/maintenance, -/obj/machinery/atmospherics/pipe/simple/hidden/fuel{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled/steel_ridged, -/area/venera/engine/thrusterport) -"Va" = ( -/obj/item/ammo_casing/pistol/used, -/obj/item/ammo_casing/pistol/used, -/obj/item/ammo_casing/pistol/used, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers, -/turf/simulated/floor/tiled/techfloor, -/area/venera/security) -"Vb" = ( -/turf/simulated/floor/tiled/freezer, -/area/venera/living) -"Vd" = ( -/obj/effect/floor_decal/corner/green{ - dir = 8 - }, -/obj/effect/floor_decal/corner/black, -/obj/machinery/light, -/obj/effect/decal/cleanable/blood/drip, -/turf/simulated/floor/tiled/dark, -/area/venera/hallway) -"Vg" = ( -/obj/effect/floor_decal/corner/grey/diagonal, -/obj/structure/cable/green, -/obj/machinery/power/apc{ - dir = 4; - name = "east bump"; - pixel_x = 24 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/turf/simulated/floor/tiled/white, -/area/venera/living/mess) -"Vk" = ( -/obj/item/stack/material/rods/ten, -/obj/machinery/alarm{ - dir = 1; - icon_state = "alarm0"; - pixel_y = -22 - }, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 1 - }, -/turf/simulated/floor/tiled/techmaint, -/area/venera/engine/atmos) -"Vm" = ( -/obj/structure/catwalk, -/obj/structure/cable/green{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/plating, -/area/venera/disperser/storage) -"Vn" = ( -/obj/effect/floor_decal/corner/green{ - dir = 1; - icon_state = "corner_white" - }, -/obj/effect/floor_decal/corner/black{ - dir = 4; - icon_state = "corner_white" - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/firealarm{ - dir = 2; - pixel_y = 24 - }, -/turf/simulated/floor/tiled/dark, -/area/venera/hallway) -"Vo" = ( -/obj/structure/bed/chair/padded/beige{ - dir = 4; - icon_state = "chair_preview" - }, -/obj/structure/cable/green{ - d2 = 2; - icon_state = "0-2" - }, -/obj/machinery/power/apc{ - dir = 1; - name = "north bump"; - pixel_x = 0; - pixel_y = 24 - }, -/obj/item/device/radio/intercom/map_preset/venera{ - dir = 4; - pixel_x = -24 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/venera/security/lobby) -"Vq" = ( -/obj/structure/catwalk, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/light/small{ - dir = 4; - icon_state = "bulb1" - }, -/obj/random/trash, -/turf/simulated/floor/plating, -/area/venera/maint/starboard/bridge) -"Vs" = ( -/obj/effect/decal/cleanable/blood/splatter, -/obj/machinery/recharger/wallcharger{ - pixel_x = 0; - pixel_y = 24 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/unary/vent_pump/on, -/turf/simulated/floor/plating, -/area/venera/security) -"Vt" = ( -/obj/machinery/computer/modular/preset/cardslot/command, -/obj/machinery/button/windowtint{ - id = "venera_co_windows"; - pixel_x = 6; - pixel_y = 33 - }, -/obj/item/paper, -/turf/simulated/floor/carpet/blue, -/area/venera/bridge/co_office) -"Vu" = ( -/obj/effect/floor_decal/corner/black{ - dir = 1 - }, -/obj/item/ammo_casing/rifle/used, -/obj/item/ammo_casing/rifle/used, -/obj/item/ammo_casing/rifle/used, -/obj/item/ammo_casing/rifle/used, -/turf/simulated/floor/tiled/dark, -/area/venera/hallway) -"Vv" = ( -/obj/effect/floor_decal/corner/yellow/mono, -/obj/item/book/manual/engineering_construction, -/obj/machinery/light_switch{ - pixel_x = 22; - pixel_y = 6 - }, -/turf/simulated/floor/tiled, -/area/venera/engine) -"Vw" = ( -/obj/structure/railing/mapped, -/obj/random/tech_supply, -/obj/random/tech_supply, -/obj/random/storage, -/obj/structure/table/rack, -/turf/simulated/floor/plating, -/area/venera/maint/starboard/bridge) -"VA" = ( -/obj/structure/bed/chair/armchair/black, -/turf/simulated/floor/carpet, -/area/venera/living/bunk) -"VB" = ( -/obj/structure/curtain/open/shower, -/turf/simulated/floor/tiled/freezer, -/area/venera/living) -"VC" = ( -/turf/simulated/wall/prepainted, -/area/venera/security) -"VE" = ( -/obj/machinery/door/airlock/engineering{ - icon_state = "closed"; - locked = 1; - name = "Starboard Solar Access"; - welded = 1 - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled/steel_ridged, -/area/venera/engine/atmos) -"VF" = ( -/obj/structure/railing/mapped{ - dir = 4; - icon_state = "railing0-1" - }, -/obj/structure/closet/crate, -/obj/random/maintenance/solgov, -/obj/random/glasses, -/turf/simulated/floor/plating, -/area/venera/maint/port) -"VH" = ( -/obj/structure/table/steel, -/obj/machinery/button/blast_door{ - desc = "A remote control-switch for the Mass Driver's Control window."; - id_tag = "venera_mdwindow_58_bd"; - name = "Mass Driver Window Blast Doors"; - pixel_x = 6; - pixel_y = 28 - }, -/obj/machinery/button/blast_door{ - desc = "A remote control-switch for the Mass Driver's core."; - id_tag = "venera_md_58_bd"; - name = "Mass Driver Core Blast Doors"; - pixel_x = -5; - pixel_y = 28 - }, -/turf/simulated/floor/tiled/dark, -/area/venera/disperser) -"VI" = ( -/turf/simulated/wall/r_wall/prepainted, -/area/venera/disperser/storage) -"VJ" = ( -/obj/random/medical/lite, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, -/turf/simulated/floor/plating, -/area/venera/security) -"VK" = ( -/obj/structure/hygiene/sink{ - dir = 8; - icon_state = "sink"; - pixel_x = -12; - pixel_y = 2 - }, -/obj/machinery/flasher{ - id_tag = "venera_cell1"; - pixel_x = -24 - }, -/obj/machinery/atmospherics/unary/vent_pump/on, -/turf/simulated/floor/tiled/dark, -/area/venera/security) -"VL" = ( -/obj/effect/floor_decal/corner/black{ - dir = 1 - }, -/obj/effect/floor_decal/corner/red{ - dir = 4; - icon_state = "corner_white" - }, -/obj/machinery/light{ - dir = 1; - icon_state = "tube1" - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark, -/area/venera/hallway) -"VM" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 2 - }, -/obj/machinery/atmospherics/pipe/simple/visible/fuel{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/venera/engine/atmos) -"VS" = ( -/obj/machinery/sleeper{ - dir = 8 - }, -/obj/effect/floor_decal/corner/paleblue/mono, -/turf/simulated/floor/tiled/white/monotile, -/area/venera/medbay) -"VT" = ( -/obj/machinery/alarm{ - pixel_y = 24 - }, -/turf/simulated/floor/wood/ebony, -/area/venera/living/bunk) -"VV" = ( -/obj/item/storage/toolbox/mechanical, -/obj/random/toolbox, -/obj/structure/table/rack, -/turf/simulated/floor/tiled/steel_grid, -/area/venera/engine) -"VY" = ( -/obj/machinery/vending/engineering, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled/steel_grid, -/area/venera/engine) -"Wa" = ( -/obj/structure/table/standard, -/obj/random/coin, -/obj/machinery/alarm{ - dir = 8; - icon_state = "alarm0"; - pixel_x = 24 - }, -/turf/simulated/floor/wood/ebony, -/area/venera/living/mess) -"Wb" = ( -/obj/machinery/door/airlock/glass/civilian{ - name = "Hydroponics Bay" - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled, -/area/venera/living/hydro) -"Wc" = ( -/obj/effect/decal/cleanable/blood/splatter, -/obj/random/hardsuit, -/obj/item/clothing/under/hosformalfem, -/obj/machinery/light/small, -/mob/living/simple_animal/hostile/meat/horrorsmall, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/venera/disperser) -"Wf" = ( -/obj/machinery/door/airlock/maintenance{ - locked = 1; - name = "Infirmary Maintenance Access"; - welded = 1 - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/door/firedoor, -/turf/simulated/floor/tiled/steel_ridged, -/area/venera/medbay) -"Wi" = ( -/obj/item/reagent_containers/ivbag, -/turf/simulated/floor/tiled/white, -/area/venera/medbay) -"Wj" = ( -/obj/random/junk, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/plating, -/area/venera/security/detective) -"Wo" = ( -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/structure/closet/secure_closet/freezer/fridge, -/turf/simulated/floor/tiled/white/monotile, -/area/venera/living/mess) -"Wp" = ( -/obj/random/trash, -/turf/simulated/floor/tiled/techfloor, -/area/venera/maint/starboard/bridge) -"Wq" = ( -/obj/structure/catwalk, -/obj/machinery/light/small{ - dir = 1 - }, -/turf/simulated/floor/plating, -/area/venera/disperser/storage) -"Wt" = ( -/obj/structure/catwalk, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/plating, -/area/venera/maint/starboard/bridge) -"Wu" = ( -/obj/machinery/door/airlock/glass/civilian{ - name = "Mess Hall" - }, -/obj/structure/disposalpipe/segment, -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/tiled/dark/monotile, -/area/venera/living/mess) -"Ww" = ( -/obj/random/trash, -/turf/simulated/floor/tiled/steel_grid, -/area/venera/engine) -"Wx" = ( -/obj/random/trash, -/obj/machinery/disposal, -/obj/structure/disposalpipe/trunk{ - dir = 4 - }, -/obj/machinery/light_switch{ - pixel_x = -23; - pixel_y = 25 - }, -/obj/effect/floor_decal/industrial/hatch/yellow, -/turf/simulated/floor/tiled/white, -/area/venera/living) -"WA" = ( -/obj/machinery/door/airlock/glass/command{ - name = "E.V.A."; - secured_wires = 1 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/venera/hallway/eva) -"WD" = ( -/obj/effect/decal/cleanable/blood/splatter, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark, -/area/venera/hallway) -"WM" = ( -/obj/structure/catwalk, -/obj/structure/cable/green{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/turf/simulated/floor/plating, -/area/venera/maint/starboard/bridge) -"WN" = ( -/obj/machinery/atmospherics/valve/shutoff/fuel, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/plating, -/area/venera/engine/thrusterstarboard) -"WO" = ( -/obj/effect/decal/cleanable/blood/splatter, -/obj/random/handgun, -/turf/simulated/floor/tiled/white, -/area/venera/medbay) -"WP" = ( -/obj/random/obstruction, -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/techfloor/grid, -/area/venera/security/detective) -"WR" = ( -/obj/machinery/conveyor{ - dir = 8; - id = "venera_md_58_con" - }, -/turf/simulated/floor/airless, -/area/venera/disperser) -"WT" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/light/small, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/venera/maint/port) -"WV" = ( -/obj/structure/closet/emcloset, -/obj/item/device/radio/map_preset/venera, -/turf/simulated/floor/plating, -/area/venera/security/detective) -"WW" = ( -/obj/machinery/door_timer{ - id = "venera_cell1"; - name = "Cell 1 Control"; - pixel_y = 29 - }, -/obj/random/trash, -/turf/simulated/floor/tiled/techfloor, -/area/venera/security) -"WZ" = ( -/obj/structure/reagent_dispensers/watertank, -/obj/effect/floor_decal/corner/green/three_quarters{ - dir = 4 - }, -/obj/machinery/light_switch{ - pixel_x = 22; - pixel_y = 6 - }, -/turf/simulated/floor/tiled, -/area/venera/living/hydro) -"Xd" = ( -/obj/structure/sign/warning/radioactive{ - dir = 1; - pixel_y = -32 - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/venera/engine/atmos) -"Xh" = ( -/obj/machinery/door/airlock/hatch/maintenance, -/obj/machinery/atmospherics/pipe/simple/visible/fuel{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/visible/green, -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled/steel_ridged, -/area/venera/engine/thrusterstarboard) -"Xi" = ( -/obj/item/device/radio/intercom/map_preset/venera{ - dir = 1; - pixel_y = -31 - }, -/obj/item/stack/material/rods, -/obj/item/book/manual/engineering_hacking, -/turf/simulated/floor/airless, -/area/venera/hallway/eva) -"Xj" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/fuel, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/disposalpipe/segment, -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/steel_ridged, -/area/venera/engine) -"Xn" = ( -/obj/structure/disposalpipe/segment{ - dir = 1; - icon_state = "pipe-c" - }, -/obj/machinery/firealarm{ - dir = 1; - pixel_y = -24 - }, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 8 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/venera/disperser) -"Xo" = ( -/obj/structure/dispenser/oxygen, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/firealarm{ - dir = 1; - pixel_y = -24 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/venera/hallway/eva) -"Xq" = ( -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/plating, -/area/venera/security/lobby) -"Xt" = ( -/obj/structure/barricade/spike, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/techfloor, -/area/venera/security) -"Xv" = ( -/obj/effect/floor_decal/industrial/hatch/blue, -/obj/machinery/door/airlock/multi_tile/glass/medical{ - dir = 4; - id_tag = null; - name = "Treatment Center" - }, -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled/white/monotile, -/area/venera/medbay) -"XD" = ( -/obj/structure/curtain/open/shower/engineering, -/obj/machinery/atmospherics/pipe/simple/hidden/fuel{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/sign/warning/nosmoking_1{ - desc = "A warning sign which reads 'NO SMOKING'. Someone has scratched a variety of crude words in gutter across the entire sign."; - pixel_x = 0; - pixel_y = 26 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled/steel_ridged, -/area/venera/engine) -"XE" = ( -/obj/structure/closet/toolcloset, -/obj/effect/floor_decal/industrial/outline/grey, -/obj/random/tech_supply, -/obj/random/tool, -/obj/random/tool, -/obj/random/tool, -/turf/simulated/floor/tiled/techfloor, -/area/venera/maint/starboard/bridge) -"XF" = ( -/obj/machinery/cryopod{ - dir = 4 - }, -/turf/simulated/floor/tiled/techmaint, -/area/venera/living) -"XH" = ( -/obj/structure/reagent_dispensers/water_cooler{ - dir = 4; - icon_state = "water_cooler" - }, -/obj/machinery/recharger/wallcharger{ - dir = 4; - icon_state = "wrecharger0"; - pixel_x = -23; - pixel_y = -3 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/venera/security) -"XL" = ( -/obj/item/stack/material/glass{ - amount = 50 - }, -/obj/machinery/light{ - dir = 8; - icon_state = "tube1" - }, -/obj/effect/floor_decal/corner/yellow/half{ - dir = 8; - icon_state = "bordercolorhalf" - }, -/obj/structure/table/rack, -/turf/simulated/floor/tiled, -/area/venera/engine) -"XM" = ( -/obj/structure/table/marble, -/obj/machinery/door/firedoor, -/obj/item/reagent_containers/food/snacks/meatsteak/toxin, -/turf/simulated/floor/tiled/white/monotile, -/area/venera/living/mess) -"XP" = ( -/obj/structure/cable/green{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/venera/maint/port) -"XQ" = ( -/obj/structure/closet/emcloset, -/obj/effect/floor_decal/corner/yellow/mono, -/obj/item/device/radio/map_preset/venera, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled, -/area/venera/engine) -"XT" = ( -/obj/item/soap, -/turf/simulated/floor/tiled/freezer, -/area/venera/living) -"XV" = ( -/obj/structure/reagent_dispensers/fueltank, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/floor/tiled/techfloor, -/area/venera/maint/port) -"XX" = ( -/obj/effect/floor_decal/corner/red/mono, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/item/device/radio/map_preset/venera, -/obj/item/device/radio/headset/map_preset/venera, -/obj/structure/closet{ - name = "security wardrobe" - }, -/obj/item/clothing/under/solgov/utility/fleet/security, -/obj/item/storage/belt/holster/security/tactical, -/obj/machinery/firealarm{ - dir = 2; - pixel_y = 24 - }, -/turf/simulated/floor/tiled/monotile, -/area/venera/security/equipment) -"Yd" = ( -/obj/random/obstruction, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/door/firedoor, -/turf/simulated/floor/tiled/techfloor/grid, -/area/venera/security/detective) -"Ye" = ( -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/door/airlock/external{ - frequency = 1379; - icon_state = "closed"; - id_tag = "venera_solar_port_outer"; - locked = 1; - name = "Port Solar Access" - }, -/obj/machinery/shield_diffuser, -/turf/simulated/floor/tiled/techfloor/grid, -/area/venera/maint/port) -"Yf" = ( -/obj/random/obstruction, -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/dark/monotile, -/area/venera/hallway) -"Yg" = ( -/turf/simulated/wall/r_wall/prepainted, -/area/venera/security) -"Yi" = ( -/obj/effect/floor_decal/corner/red/three_quarters{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/turf/simulated/floor/tiled, -/area/venera/security/equipment) -"Yk" = ( -/obj/machinery/atmospherics/pipe/simple/visible/green{ - dir = 10; - icon_state = "intact" - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/venera/engine/atmos) -"Yo" = ( -/obj/structure/closet/jcloset_torch, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/item/reagent_containers/spray/cleaner, -/obj/item/reagent_containers/spray/cleaner, -/obj/item/grenade/chem_grenade/cleaner, -/obj/item/grenade/chem_grenade/cleaner, -/turf/simulated/floor/tiled/techfloor, -/area/venera/living) -"Yq" = ( -/obj/machinery/embedded_controller/radio/airlock/airlock_controller{ - dir = 8; - id_tag = "venera_solar_starboard_airlock"; - pixel_x = 24; - tag_airpump = "venera_solar_starboard_pump"; - tag_chamber_sensor = "venera_solar_starboard_sensor"; - tag_exterior_door = "venera_solar_starboard_outer"; - tag_interior_door = "venera_solar_starboard_inner" - }, -/obj/machinery/airlock_sensor{ - id_tag = "venera_solar_starboard_sensor"; - pixel_x = 24; - pixel_y = 12 - }, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/light/small{ - dir = 8 - }, -/obj/machinery/oxygen_pump{ - pixel_x = -32 - }, -/obj/machinery/atmospherics/unary/vent_pump/high_volume/airlock{ - id_tag = "venera_solar_starboard_pump" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/venera/engine/atmos) -"Yt" = ( -/obj/machinery/body_scanconsole{ - dir = 8 - }, -/obj/effect/floor_decal/corner/pink/mono, -/obj/structure/cable/green{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled/white/monotile, -/area/venera/medbay) -"Yu" = ( -/obj/effect/decal/cleanable/blood/drip, -/obj/machinery/atmospherics/binary/pump/on{ - dir = 8; - target_pressure = 200 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark, -/area/venera/disperser) -"Yv" = ( -/obj/effect/floor_decal/spline/fancy/wood, -/obj/random/trash, -/turf/simulated/floor/tiled/dark, -/area/venera/living/mess) -"Yw" = ( -/obj/structure/table/standard, -/obj/structure/sign/warning/smoking{ - pixel_x = 26 - }, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 8 - }, -/obj/item/reagent_containers/food/snacks/meatsteak/toxin, -/turf/simulated/floor/wood/ebony, -/area/venera/living/mess) -"Yx" = ( -/obj/structure/displaycase, -/obj/item/gun/energy/captain{ - charge_cost = 10; - pixel_y = -1 - }, -/turf/simulated/floor/wood/walnut, -/area/venera/bridge/co_office) -"Yy" = ( -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/structure/closet/l3closet/janitor, -/obj/machinery/firealarm{ - dir = 2; - pixel_y = 24 - }, -/turf/simulated/floor/tiled/techfloor, -/area/venera/living) -"YA" = ( -/turf/simulated/wall/r_wall/prepainted, -/area/venera/engine/thrusterstarboard) -"YD" = ( -/obj/machinery/door/airlock/highsecurity{ - name = "Security Armory" - }, -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/techfloor/grid, -/area/venera/security) -"YH" = ( -/obj/item/reagent_containers/spray/cleaner, -/obj/structure/table/rack, -/obj/machinery/alarm{ - pixel_y = 24 - }, -/turf/simulated/floor/tiled/steel_grid, -/area/venera/engine) -"YL" = ( -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/techfloor, -/area/venera/security/lobby) -"YN" = ( -/obj/structure/bed/chair/comfy/captain{ - color = "#666666"; - dir = 4; - icon_state = "capchair_preview" - }, -/obj/effect/decal/cleanable/blood/drip, -/turf/simulated/floor/carpet/blue, -/area/venera/bridge/co_office) -"YO" = ( -/obj/machinery/atmospherics/pipe/simple/visible/green, -/turf/simulated/wall/r_wall/prepainted, -/area/venera/engine/thrusterstarboard) -"YP" = ( -/obj/structure/table/steel, -/obj/item/device/taperecorder{ - pixel_y = 0 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/venera/security/questioning) -"YS" = ( -/obj/structure/railing/mapped, -/obj/structure/railing/mapped{ - dir = 4; - icon_state = "railing0-1" - }, -/obj/structure/largecrate, -/obj/random/maintenance/solgov, -/obj/random/hardsuit, -/obj/machinery/atmospherics/pipe/simple/hidden/universal{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/venera/maint/port) -"YT" = ( -/obj/item/paper/crumpled, -/obj/effect/decal/cleanable/blood/splatter, -/obj/structure/sign/double/solgovflag/left{ - dir = 4; - pixel_x = -32 - }, -/turf/simulated/floor/carpet/blue, -/area/venera/bridge/co_office) -"YV" = ( -/obj/structure/bed/chair{ - dir = 8 - }, -/obj/random/junk, -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/turf/simulated/floor/wood/ebony, -/area/venera/living/mess) -"YW" = ( -/obj/machinery/suit_storage_unit/standard_unit, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/techfloor/grid, -/area/venera/hallway/eva) -"YZ" = ( -/obj/machinery/atmospherics/binary/pump/high_power/on{ - dir = 4; - target_pressure = 15000 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 - }, -/turf/simulated/floor/plating, -/area/venera/engine/thrusterstarboard) -"Za" = ( -/obj/random/obstruction, -/obj/machinery/door/firedoor, -/turf/simulated/floor/plating, -/area/venera/hallway) -"Zg" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/sign/warning/hot_exhaust{ - dir = 4; - icon_state = "fire" - }, -/turf/simulated/wall/r_wall/hull, -/area/venera/engine/thrusterport) -"Zi" = ( -/obj/effect/floor_decal/corner/red{ - dir = 5 - }, -/obj/random/junk, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/valve/shutoff/supply, -/obj/machinery/atmospherics/valve/shutoff/scrubbers, -/obj/effect/floor_decal/industrial/shutoff, -/turf/simulated/floor/tiled/dark, -/area/venera/hallway) -"Zl" = ( -/turf/simulated/floor/reinforced/carbon_dioxide, -/area/venera/engine/thrusterstarboard) -"Zn" = ( -/obj/machinery/door/airlock/glass/medical{ - name = "Chemistry" - }, -/obj/effect/floor_decal/industrial/hatch/blue, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/venera/medbay/chemistry) -"Zp" = ( -/obj/effect/floor_decal/corner/red/mono, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/structure/cable/green{ - d2 = 2; - icon_state = "0-2" - }, -/obj/machinery/power/apc{ - dir = 1; - name = "north bump"; - pixel_x = 0; - pixel_y = 24 - }, -/obj/item/device/radio/map_preset/venera, -/obj/item/device/radio/headset/map_preset/venera, -/obj/structure/closet{ - name = "security wardrobe" - }, -/obj/item/clothing/suit/storage/vest/solgov/security, -/obj/item/clothing/under/solgov/utility/fleet/security, -/obj/item/storage/belt/security, -/turf/simulated/floor/tiled/monotile, -/area/venera/security/equipment) -"Zr" = ( -/obj/structure/closet/medical_wall/filled{ - pixel_x = 0; - pixel_y = -32 - }, -/obj/item/storage/med_pouch/radiation, -/obj/item/storage/med_pouch/radiation, -/obj/effect/floor_decal/corner/yellow/half, -/turf/simulated/floor/tiled, -/area/venera/engine) -"Zs" = ( -/obj/effect/floor_decal/industrial/outline/grey, -/obj/machinery/portable_atmospherics/powered/pump, -/turf/simulated/floor/tiled/techfloor, -/area/venera/maint/starboard/bridge) -"Zt" = ( -/obj/machinery/shield_diffuser, -/turf/simulated/floor/reinforced/airless, -/area/venera/disperser) -"Zv" = ( -/obj/structure/handrail, -/obj/machinery/atmospherics/binary/pump{ - dir = 4; - target_pressure = 200 - }, -/obj/machinery/alarm{ - pixel_y = 24 - }, -/turf/simulated/floor/tiled/techfloor, -/area/venera/hallway/eva) -"Zy" = ( -/obj/machinery/light/small, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/venera/maint/starboard/bridge) -"Zz" = ( -/obj/machinery/door/window/brigdoor/eastleft{ - autoset_access = 0; - dir = 1; - id = "venera_cell2"; - name = "Cell Two"; - req_access = list("ACCESS_BRIG") - }, -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/techfloor/grid, -/area/venera/security) -"ZA" = ( -/obj/effect/decal/cleanable/liquid_fuel, -/obj/effect/decal/cleanable/molten_item, -/obj/effect/floor_decal/corner/black{ - dir = 10 - }, -/obj/machinery/light, -/turf/simulated/floor/tiled/dark, -/area/venera/hallway) -"ZG" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 1 - }, -/obj/item/ammo_casing/pistol/used, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 1 - }, -/obj/effect/catwalk_plated/dark, -/turf/simulated/floor/plating, -/area/venera/hallway) -"ZN" = ( -/obj/machinery/door/airlock/glass/security{ - id_tag = "detdoor"; - name = "Locker Room" - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/tiled/steel_ridged, -/area/venera/security/equipment) -"ZR" = ( -/obj/structure/filingcabinet/chestdrawer{ - dir = 1 - }, -/obj/item/folder/blue, -/obj/item/folder/white, -/obj/item/folder, -/obj/random/loot, -/turf/simulated/floor/tiled/white/monotile, -/area/venera/medbay) -"ZV" = ( -/obj/structure/reagent_dispensers/watertank, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/floor/tiled/techfloor, -/area/venera/maint/port) -"ZZ" = ( -/obj/structure/cable/green{ - d2 = 2; - icon_state = "0-2" - }, -/obj/machinery/power/apc{ - dir = 1; - name = "north bump"; - pixel_x = 0; - pixel_y = 24 - }, -/obj/effect/decal/cleanable/cobweb2, -/turf/simulated/floor/tiled/techfloor, -/area/venera/maint/port) - -(1,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(2,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(3,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(4,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(5,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(6,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(7,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(8,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(9,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(10,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(11,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(12,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(13,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(14,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(15,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(16,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(17,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(18,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(19,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(20,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(21,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(22,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(23,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(24,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(25,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(26,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(27,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(28,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(29,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -qr -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(30,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(31,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(32,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -br -aa -br -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(33,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ag -aa -bP -aa -bP -aa -ag -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(34,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -br -aa -aa -aa -aa -aa -aa -bR -aa -aa -bP -cJ -Hu -aa -fX -TK -bP -aa -aa -bR -aa -aa -aa -aa -aa -aa -br -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(35,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -vh -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -TK -aa -aa -aa -aa -aa -aa -bP -aa -Bf -Bf -Bf -eW -dv -Bf -Bf -Bf -Bf -aa -bP -aa -aa -aa -aa -aa -aa -TK -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(36,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -bM -aa -aa -aa -aa -aa -OR -OR -OR -Bf -cm -hw -rw -dw -lf -Bf -Bf -Bf -Bf -RU -Bf -Zt -aa -aa -aa -aa -bM -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(37,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -bM -bM -bu -bu -bu -GY -bv -OR -bS -bX -Bf -hw -hw -jf -dx -qb -ui -oL -Pc -TP -eu -Bf -gB -Bf -bu -bu -bu -bM -bM -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(38,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -bM -bP -bP -bP -nl -GY -bx -uV -bT -bY -Bf -cn -cK -da -dy -vn -Bf -gr -Pc -VH -yD -bE -iQ -Bf -Bf -bP -bP -bP -bM -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(39,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -bM -aa -aa -aa -nl -GY -GY -VI -bT -bY -Bf -Bf -Bf -db -db -db -Bf -ot -hw -Ew -Wc -hw -WR -Ot -Bf -aa -aa -aa -bM -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(40,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -bM -aa -aa -nl -nl -XE -an -VI -Wq -GP -cc -co -cL -dc -dz -rb -Qh -nL -Ky -Ny -Di -bE -sJ -Ot -Bf -Bf -aa -aa -bM -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(41,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -bM -bP -bP -nl -OY -Wp -bV -VI -Li -bZ -hw -hw -cN -dd -dA -sb -FF -Yu -hw -wz -Xn -hw -sJ -Ot -cm -Bf -bP -bP -bM -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(42,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -qY -bM -aa -aa -nl -SR -FT -Ud -qB -PQ -Vm -cd -cp -sK -RO -dC -tb -jd -IB -Pc -Pc -zN -hw -WR -Ot -kr -Bf -aa -aa -bM -qY -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(43,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -bM -aa -aa -aa -nl -qi -FT -uH -VI -bU -fR -hw -vF -MW -OA -Rm -RA -JT -BP -Pc -cn -oj -PD -vk -Ot -cm -Bf -aa -aa -aa -bM -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(44,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -bM -bP -bP -nl -nl -Os -FT -EE -VI -VI -bb -xG -xG -xG -xG -dD -xG -xG -xG -bb -Fu -Fu -Fu -Fu -Fu -Fu -TR -TR -bP -bP -bM -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(45,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -bM -aa -aa -nl -nl -tD -kD -vp -bV -qO -bb -ce -cq -cO -df -dE -ub -Bu -wO -DX -Fu -jI -Su -YT -RZ -BG -TR -TR -aa -aa -bM -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(46,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -bM -aa -aa -nl -nl -Rh -FT -kB -jL -Gk -bb -ch -cr -US -dg -dF -vb -OZ -Sg -nP -Fu -Vt -YN -aB -fD -KW -TR -TR -aa -aa -bM -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(47,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -bF -bF -aa -aa -nl -nl -yK -JP -bb -bb -bb -bb -ci -cs -cQ -dh -dG -Hj -Oy -gq -SL -am -qs -av -wb -aI -aP -TR -TR -aa -aa -bF -bF -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(48,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -bI -bM -aa -aa -aa -nl -nl -RC -FT -bb -bG -bG -xG -cj -ct -jx -di -fb -Ty -qt -ah -Ma -am -aq -xB -aD -aJ -kw -TR -TR -aa -aa -aa -bM -bI -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(49,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -yb -bM -bP -bP -bP -nl -nl -Vw -kD -bb -PU -bK -ca -ck -ct -cR -dj -gb -wx -ac -zq -aj -ae -ar -SI -qw -BE -Yx -TR -TR -bP -bP -bP -bM -yb -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(50,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -Lv -pt -Na -Na -hE -nl -nl -lc -FT -bb -DV -DV -xG -mH -cu -cS -dk -hb -ab -xD -ai -ak -Fu -Fu -Fu -az -aK -az -TR -TR -uf -uM -uM -pt -IN -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(51,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -bM -ze -ze -wf -hY -hY -hY -FT -bb -bb -bb -bb -bb -cC -cT -dm -ib -GH -eP -zi -bb -bb -at -Fu -aF -Bm -PA -aY -TR -ym -bP -bP -bM -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(52,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -bM -aa -aa -wf -oR -hR -hY -FT -Zs -Zs -OM -OM -bb -cD -bf -ad -jb -FS -os -FN -bb -sa -Ni -Fu -aG -aM -aZ -HW -TR -ym -aa -aa -bM -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(53,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -TK -bP -bM -bM -bF -bF -Lf -lg -oX -Qz -si -Wt -Vq -Wt -WM -bb -cE -cW -dn -kb -oq -pB -IA -bb -jK -Go -Fu -aH -aN -aR -ba -TR -ym -aa -aa -bM -bM -bP -TK -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(54,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -bM -bP -TK -bP -nl -Ak -Zy -Yg -Yg -Yg -QE -mW -cb -bb -bb -bb -do -bb -Mq -bb -bb -bb -TG -Np -Fu -Fu -Fu -Fu -Fu -TR -ym -aa -aa -aa -bM -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(55,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -bM -bF -bF -bF -nl -tF -JB -Yg -Qk -XH -QE -Vo -lE -zv -mW -cY -dp -Il -MR -xc -fr -qS -qS -qS -qS -qS -qS -CR -dt -Ph -vi -bF -bF -bF -bM -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(56,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -bM -aa -aa -nl -nl -ED -ue -Yg -ly -kQ -bO -sC -fU -uO -NY -Dp -yY -rj -za -zh -wu -wu -wu -wu -wu -wu -wu -Um -Se -FX -FX -FX -aa -aa -bM -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(57,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -bM -aa -aa -kU -kU -MG -MG -MG -qC -OS -Pg -Xq -zY -YL -Pg -AE -sF -dq -Lp -kE -sT -oJ -nV -GI -By -ZR -wu -XV -XP -yh -FX -FX -aa -aa -bM -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(58,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -bM -aa -aa -kU -kU -mh -Pw -ZN -Id -zx -QE -kx -pA -bW -mW -cZ -Ci -em -Yf -Ff -mJ -MJ -DR -OE -ur -AI -wu -ZV -RM -Ms -FX -FX -aa -aa -bM -bP -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(59,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -bM -aa -aa -kU -kU -Zp -IT -CM -gD -UI -CI -rZ -LS -zP -cG -KO -Tt -ja -LL -KM -oc -Am -xa -wg -Ov -UY -wu -eg -Np -Ms -FX -FX -aa -aa -bM -bP -bP -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(60,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -bM -bP -bP -kU -kU -In -uw -CM -wh -RD -QE -Mr -On -cl -mW -UO -fY -lb -JS -wC -wu -pg -Pv -wu -AB -wu -wu -wu -wu -Ms -FX -FX -bP -bP -bM -aa -bP -bP -bP -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(61,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -bF -bF -bF -bF -bF -bF -bM -bF -bF -kU -kU -XX -su -nZ -fp -xX -el -el -el -el -el -el -dr -mb -MK -wu -wu -qF -SS -pO -eM -iH -Nv -md -wu -Ms -FX -FX -bF -bF -bM -bF -bF -bF -bF -bF -bF -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(62,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -bF -bP -bP -bP -bP -bP -bP -bP -bP -kU -kU -DG -Yi -vg -hO -Ek -QQ -Cl -BI -BR -mD -el -Lu -nb -rk -wu -yZ -LW -qD -vT -Ib -nd -FK -jz -wu -op -FX -FX -bP -bP -bP -bP -bP -bP -bP -bP -bF -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(63,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -bF -bP -IZ -oo -Ks -IZ -oo -Ks -bP -kU -kU -Jq -mX -lT -hu -VJ -ef -uP -hZ -GC -oQ -el -rW -GX -Ro -wu -nB -Mm -CS -VS -dO -nF -mR -Uh -wu -Ms -FX -FX -bP -II -SV -xq -II -SV -xq -bP -bF -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(64,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -bF -bP -IZ -en -Ks -IZ -en -Ks -bP -kU -kU -MG -MG -lT -Vs -So -ef -FL -YP -qp -Mu -el -ob -lu -ZA -wu -My -fd -TI -Wi -RJ -iC -wu -wu -wu -Se -FX -FX -bP -II -xA -xq -II -xA -xq -bP -bF -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(65,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -bF -bP -IZ -en -Ks -IZ -en -Ks -bP -yv -yv -sm -Yg -zb -ew -Of -us -us -us -us -us -el -xW -pb -Za -wu -yP -rS -HS -er -qU -sR -Wf -qN -qS -bB -FX -FX -bP -II -xA -xq -II -xA -xq -bP -bF -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(66,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -bF -bP -IZ -en -Ks -IZ -en -Ks -bP -yv -yv -fz -Yg -Yg -KF -Ia -Yd -ol -Gg -ol -sv -zG -du -mV -bt -wu -Hd -EX -ve -WO -PX -Sr -wu -nr -Um -FX -FX -FX -bP -II -xA -xq -II -xA -xq -bP -bF -bF -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(67,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -bF -bP -IZ -en -Ks -IZ -en -Ks -bP -yv -yv -hc -ou -YD -bd -zA -kv -EP -wG -eV -rs -zG -GS -ds -uN -wu -wr -yx -Uj -DY -MC -mn -wu -Ms -oa -FX -FX -FX -bP -II -xA -xq -II -xA -xq -bP -bP -bF -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(68,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -bF -bP -IZ -en -Ks -IZ -en -Ks -bP -yv -yv -sm -Dy -Yg -Nq -tr -kv -Jv -kc -un -Qc -zG -RK -mq -Eq -wu -tm -fc -CW -sl -Yt -wS -wu -MQ -rz -ro -FR -Ye -Jf -AM -BZ -AM -AM -BZ -AM -ki -bP -bF -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(69,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -bF -bP -IZ -en -Ks -IZ -en -Ks -bP -yv -yv -Yg -Yg -Yg -PG -CV -kv -Mp -un -un -Mb -zG -SW -NW -ye -wu -mo -TM -eU -Gn -Kw -El -wu -bD -RV -FX -FX -FX -bP -II -Jb -xq -II -Jb -xq -bP -bP -bF -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(70,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -bF -bP -IZ -en -Ks -IZ -en -Ks -bP -yv -yv -VK -sH -fn -qX -se -WP -Wj -gQ -nv -eb -zG -oh -mu -xd -wu -Hs -Xv -LF -iV -Zn -LF -LF -xf -Um -FX -FX -FX -bP -II -Jb -xq -II -Jb -xq -bP -bF -bF -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(71,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -bF -bP -IZ -en -Ks -IZ -en -Ks -bP -yv -yv -xH -uq -lX -Nh -JA -kv -WV -un -un -un -zG -xy -NW -Mo -rT -we -WD -EY -pZ -LE -PT -LF -eZ -pY -yh -FX -FX -bP -II -Jb -xq -II -Jb -xq -bP -bF -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(72,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -bF -bP -IZ -en -Ks -IZ -en -Ks -bP -yv -yv -VC -VC -VC -WW -rH -kv -kv -kv -kv -kv -zG -VL -ZG -IE -fA -UE -gs -Jd -tj -MZ -gU -LF -Kz -fP -Se -FX -FX -bP -II -Jb -xq -II -Jb -xq -bP -bF -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(73,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -bF -bP -IZ -en -Ks -IZ -en -Ks -bP -yv -yv -yN -sH -Zz -Sh -Va -pD -FW -fw -DZ -Xt -cF -Zi -bA -Lr -PJ -we -we -EY -HM -UW -zw -LF -VF -YS -Ms -FX -FX -bP -II -Tg -xq -II -Tg -xq -bP -bF -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(74,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -Ht -Ht -bF -bP -IZ -en -Ks -IZ -en -Ks -bP -yv -yv -xH -uq -lX -LM -LV -TQ -CD -wt -lO -fL -Kd -Jr -aU -Dd -py -Hz -Hz -LF -fx -oN -rN -LF -ZZ -Bj -De -FX -FX -bP -bP -bP -bP -bP -bP -bP -bP -bF -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(75,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -Ht -bP -bP -bP -IZ -en -Ks -IZ -en -Ks -bP -yv -yv -Yg -Yg -Yg -Yg -Yg -Yg -Yg -Yg -Yg -Yg -Yg -pf -sr -qQ -py -py -py -LF -LF -LF -LF -LF -GM -GM -Gv -FX -FX -bF -bF -bF -bF -bF -bF -bF -bF -bF -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(76,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -Ht -bP -dI -up -up -bL -up -up -bL -up -wR -Dj -Yq -wy -Lg -ez -KE -nC -JN -ff -Sd -kY -If -oY -OP -sG -Ge -HQ -Rx -oE -mz -sw -GM -ER -MU -so -GM -Kv -FX -FX -bn -bM -aa -aa -bP -bP -bP -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(77,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -Ht -bP -bP -bP -IZ -nc -Ks -IZ -nc -Ks -bP -Pi -Pi -ps -fQ -xS -Pe -nC -IF -kh -NP -Bt -jB -nC -Ad -ov -Hy -rK -AO -Dk -YV -xN -XM -fS -KQ -lw -GM -Kv -FX -FX -bn -bM -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(78,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -Ht -Ht -bF -bP -IZ -nc -Ks -IZ -nc -Ks -bP -Pi -Pi -Ef -rU -ET -qR -nC -HB -kh -ge -by -LH -Wb -RF -aT -Kl -HQ -Yv -Bb -Bb -Kb -RX -nX -JX -mv -GM -Kv -FX -FX -bn -bM -bP -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(79,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -bF -bP -IZ -nc -Ks -IZ -nc -Ks -bP -Pi -Pi -Sb -KI -aV -Vk -nC -IF -kh -NP -Gf -gN -nC -fa -Lm -Kp -Wu -uU -Bw -Pk -oI -XM -KQ -kF -Kn -GM -lr -Ph -Ph -in -bM -bP -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(80,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -bF -bP -IZ -nc -Ks -IZ -nc -Ks -bP -Pi -Pi -xl -NT -IX -Jm -nC -IF -qZ -AA -QX -WZ -oY -Rt -tH -Ge -HQ -eD -Wa -Yw -lH -GM -on -PL -FI -GM -WT -FX -FX -QT -bM -bP -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(81,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -bF -bP -IZ -nc -Ks -IZ -nc -Ks -bP -Pi -Pi -ps -ps -VE -pL -nC -nC -nC -nC -nC -nC -nC -Vn -pK -Vd -AW -AW -AW -AW -AW -GM -hG -qG -vs -GM -Kv -FX -FX -QT -bM -bP -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(82,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -bF -bP -IZ -nc -Ks -IZ -nc -Ks -bP -Pi -bg -lk -ps -gS -Ix -aE -VY -oH -QS -XL -uB -aE -EN -lB -iS -AW -VA -KL -AD -AP -wm -hU -Vg -Wo -GM -Kv -FX -FX -QT -bM -bJ -bP -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(83,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -bF -bP -IZ -nc -Ks -IZ -nc -Ks -bP -Pi -NB -Xd -ps -Pr -LK -aE -gl -Ww -Ri -jy -kj -Az -DN -yt -mr -AW -BV -jm -jm -hv -AW -AW -AW -AW -GM -Gv -FX -FX -Tu -pt -wP -TK -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(84,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -bF -bP -IZ -nc -Ks -IZ -nc -Ks -bP -Pi -iq -SF -xr -Pr -Ix -aE -Hp -oH -od -wj -xz -Xj -tP -Ra -RH -AW -VT -TA -TA -PC -hV -KH -qM -AW -Tj -px -yd -FX -QT -bM -jl -bP -bP -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(85,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -bF -bP -IZ -KT -Ks -IZ -KT -Ks -bP -Pi -aA -Bk -iu -HH -Ix -aE -FU -oH -gW -Ql -Zr -aE -Hm -cV -fG -tn -EA -Ox -nQ -pI -TN -CC -TF -pG -AU -UL -wN -FX -jA -bM -bP -bP -bP -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(86,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -bF -bP -bP -bJ -bP -bP -bP -bP -bP -Pi -bw -qL -JZ -nM -sU -aE -nx -oH -Vv -xU -XQ -aE -Cb -Rf -BM -AW -kA -AW -AW -kA -AW -AW -kA -AW -AW -DW -wN -FX -bP -bM -aa -bP -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(87,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -bF -bF -bF -bN -jX -jX -jX -jX -jX -St -mx -eh -SM -ug -LP -aE -oK -lh -aE -XD -aE -aE -Nt -lD -HU -AW -jm -Mx -AW -jm -Mx -AW -jm -Mx -AW -ty -tX -FX -bP -bM -aa -bP -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(88,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -jQ -aa -aa -aa -bM -bP -Pi -Pi -Jl -qc -FH -lC -aE -aE -aE -aE -Nb -Oe -aE -Qt -Gy -xF -AW -vJ -Mx -AW -jm -Mx -AW -jm -Mx -AW -ty -sy -FX -bP -bM -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(89,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -jl -bP -bP -bP -bM -bP -Pi -Pi -Pi -kg -Yk -QG -lA -jZ -tE -zu -vt -EC -aE -iA -lD -LA -AW -AW -AW -AW -AW -AW -AW -AW -AW -AW -pp -Mn -FX -bF -qY -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(90,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -bu -bP -bP -Pi -qo -eB -Nr -Sz -sV -Ao -nD -yi -jw -Fm -aE -Fo -Rq -MD -QR -Wx -wl -rh -Pb -fv -ha -TE -cw -wc -fK -sN -xv -bP -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(91,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -bu -bP -bP -Pi -qo -Hk -VM -yM -gi -Fc -JF -qx -HK -Cz -aE -KP -zg -ip -AL -KR -jt -qd -qd -qd -qd -NS -yH -tv -FX -FX -bF -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(92,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -bu -bP -vm -Pi -qo -rP -bs -KN -PR -aE -PK -sP -LN -aE -aE -Le -QN -cw -cw -cw -Kg -XF -XF -XF -XF -Ae -cw -Gb -FX -FX -bF -bP -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(93,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -bu -bF -yr -Pi -Pi -TB -RB -oG -Hf -aE -YH -SK -LN -aE -hJ -Vu -lS -cw -TT -cw -OB -rJ -jF -LQ -jF -GR -cw -UZ -FD -FD -FD -bP -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(94,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -bP -Qo -Pi -Cn -DE -BD -hi -Hf -aE -mt -Et -kT -aE -jj -QF -ji -cw -Ki -cw -rF -cw -cw -cw -cw -FY -cw -wV -NH -FD -FD -bP -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(95,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -bP -BW -YO -Xh -YO -YO -YO -QU -YA -VV -fu -zz -aE -nk -gP -Ls -cw -SN -Vb -Bi -Ki -TT -cw -Sn -vc -cw -lQ -gx -EK -FD -bP -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(96,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -bP -Eu -gy -MA -hP -YA -zS -xR -YA -KZ -aX -aX -aX -UB -UB -WA -aX -aX -mc -UT -cw -cw -cw -Yy -ne -cw -tR -zO -cg -FD -bP -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(97,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -bP -Eu -pS -mZ -WN -TZ -Cm -Km -Zl -KZ -bQ -KV -pM -UP -TU -eL -sj -aX -nT -vd -Ki -TT -cw -Yo -LJ -cw -vx -Bl -EK -FD -bP -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(98,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -bP -Eu -cH -YZ -ML -sk -iJ -YA -Zl -KZ -Ei -tZ -tZ -pn -gz -Jo -fj -aX -tU -cw -cw -cw -cw -cw -cw -cw -IP -lp -HT -FD -bP -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -pm -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(99,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -bP -Eu -OI -UJ -mK -Ex -Tz -YA -Zl -KZ -YW -Ay -Er -PE -Nk -nU -Xo -aX -Dw -VB -gv -XT -cw -dK -jS -yI -kC -mG -BO -FD -bP -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(100,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -bP -Eu -bo -bo -Nz -Fw -Ex -YA -YA -KZ -YW -rI -KZ -KZ -Zv -rm -KZ -KZ -KZ -KZ -BJ -BJ -cw -qa -yI -UV -de -Ep -Ep -FD -bP -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(101,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -bP -TK -bP -aa -aa -dQ -bo -bo -Eu -Eu -UH -YW -sB -KZ -kG -EQ -Jc -xZ -kR -mC -KZ -UH -UH -UH -FD -Ep -Ep -Zg -aa -aa -aa -TK -bP -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(102,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -bP -aa -aa -aa -jl -aa -aa -uA -Ka -UH -fW -HX -KZ -Nx -jo -Oc -KZ -yF -Uc -uY -mI -UH -Ka -FD -aa -aa -jl -aa -aa -aa -bP -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(103,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -bP -aa -aa -aa -aa -aa -aa -aa -aa -TO -Hl -AT -wa -KZ -KZ -Ue -KZ -KZ -UH -UH -AN -aa -aa -aa -aa -aa -aa -aa -aa -aa -bP -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(104,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -KA -DO -is -xk -UH -UH -Xi -UH -Cg -UH -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(105,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -Rk -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -Ti -aa -aa -aa -lF -gh -UH -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(106,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -vI -Sm -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(107,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(108,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(109,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(110,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(111,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(112,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(113,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ON -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(114,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(115,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(116,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(117,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(118,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(119,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(120,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(121,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(122,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(123,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(124,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(125,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(126,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(127,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(128,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(129,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(130,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(131,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(132,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(133,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(134,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(135,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(136,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(137,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(138,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(139,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(140,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(141,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(142,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(143,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(144,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(145,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(146,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(147,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(148,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(149,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(150,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} diff --git a/maps/away/venera/venera_areas.dm b/maps/away/venera/venera_areas.dm deleted file mode 100644 index 8277e3f940706..0000000000000 --- a/maps/away/venera/venera_areas.dm +++ /dev/null @@ -1,108 +0,0 @@ -/area/venera - name = "\improper SGV Venera" - icon_state = "venera" - icon = 'venera_icons.dmi' -/area/venera/bridge - name = "\improper SGV Venera Bridge" - icon_state = "bridge" - icon = 'venera_icons.dmi' -/area/venera/bridge/co_office - name = "\improper SGV Venera Commanding Officer Office" - icon_state = "bridge" -/area/venera/living - name = "\improper SGV Venera Cryogenic Storage" - icon_state = "cryo" - icon = 'venera_icons.dmi' -/area/venera/living/mess - name = "\improper SGV Venera Mess Hall" - icon_state = "cryo" - icon = 'venera_icons.dmi' -/area/venera/living/bunk - name = "\improper SGV Venera Bunk Room" - icon_state = "cryo" - icon = 'venera_icons.dmi' -/area/venera/living/hydro - name = "\improper SGV Venera Hydroponics" - icon_state = "cryo" - icon = 'venera_icons.dmi' -/area/venera/engine - name = "\improper SGV Venera Engineering" - icon_state = "engineering" - icon = 'venera_icons.dmi' -/area/venera/engine/thrusterport - name = "\improper SGV Venera Port Thrusters" - icon_state = "engineering" - icon = 'venera_icons.dmi' -/area/venera/engine/thrusterstarboard - name = "\improper SGV Venera Starboard Thrusters" - icon_state = "engineering" - icon = 'venera_icons.dmi' -/area/venera/engine/atmos - name = "\improper SGV Venera Atmospherics" - icon_state = "engineering" - icon = 'venera_icons.dmi' -/area/venera/engine/solar - name = "\improper SGV Venera Solars" - area_flags = AREA_FLAG_EXTERNAL - requires_power = 1 - always_unpowered = 1 - has_gravity = FALSE - base_turf = /turf/space -/area/venera/engine/solar/port - name = "\improper SGV Venera Port Solars" -/area/venera/engine/solar/starboard - name = "\improper SGV Venera Starboard Solars" -/area/venera/hallway - name = "\improper SGV Venera Hallway" - icon_state = "hallway" - icon = 'venera_icons.dmi' -/area/venera/hallway/eva - name = "\improper SGV Venera - E.V.A." - icon_state = "hallway" - icon = 'venera_icons.dmi' -/area/venera/security - name = "\improper SGV Venera Security" - icon_state = "security" - icon = 'venera_icons.dmi' -/area/venera/security/lobby - name = "\improper SGV Venera Security - Lobby" - icon_state = "security" - icon = 'venera_icons.dmi' -/area/venera/security/detective - name = "\improper SGV Venera Security - Investigation" - icon_state = "security" - icon = 'venera_icons.dmi' -/area/venera/security/equipment - name = "\improper SGV Venera Security - Equipment Room" - icon_state = "security" - icon = 'venera_icons.dmi' -/area/venera/security/questioning - name = "\improper SGV Venera Security - Interview Room" - icon_state = "security" - icon = 'venera_icons.dmi' -/area/venera/medbay - name = "\improper SGV Venera Medbay" - icon_state = "medbay" - icon = 'venera_icons.dmi' -/area/venera/medbay/chemistry - name = "\improper SGV Venera Medbay - Infirmary" - icon_state = "medbay" - icon = 'venera_icons.dmi' -/area/venera/disperser - name = "\improper SGV Venera Disperser" - icon_state = "disperser" -/area/venera/disperser/storage - name = "\improper SGV Venera Disperser - Storage" - icon_state = "disperser" -/area/venera/maint - name = "\improper SGV Venera Maintenance" - icon_state = "maintcentral" -/area/venera/maint/port - name = "\improper SGV Venera - Port Maintenance" - icon_state = "maintcentral" -/area/venera/maint/starboard - name = "\improper SGV Venera - Starboard Maintenance" - icon_state = "maintcentral" -/area/venera/maint/starboard/bridge - name = "\improper SGV Venera - Bridge Starboard Maintenance" - icon_state = "maintcentral" diff --git a/maps/away/venera/venera_icons.dmi b/maps/away/venera/venera_icons.dmi deleted file mode 100644 index 995682d787b38..0000000000000 Binary files a/maps/away/venera/venera_icons.dmi and /dev/null differ diff --git a/maps/away/venera/venera_radio.dm b/maps/away/venera/venera_radio.dm deleted file mode 100644 index 6f4334df18d42..0000000000000 --- a/maps/away/venera/venera_radio.dm +++ /dev/null @@ -1,31 +0,0 @@ -/obj/machinery/telecomms/hub/map_preset/venera - preset_name = "Venera" - -/obj/machinery/telecomms/receiver/map_preset/venera - preset_name = "Venera" - -/obj/machinery/telecomms/bus/map_preset/venera - preset_name = "Venera" - -/obj/machinery/telecomms/processor/map_preset/venera - preset_name = "Venera" - -/obj/machinery/telecomms/server/map_preset/venera - preset_name = "Venera" - preset_color = "#0026ff" - -/obj/machinery/telecomms/broadcaster/map_preset/venera - preset_name = "Venera" - -/obj/item/device/radio/map_preset/venera - preset_name = "Venera" - -/obj/item/device/radio/intercom/map_preset/venera - preset_name = "Venera" - -/obj/item/device/encryptionkey/map_preset/venera - preset_name = "Venera" - -/obj/item/device/radio/headset/map_preset/venera - preset_name = "Venera" - encryption_key = /obj/item/device/encryptionkey/map_preset/venera diff --git a/maps/away/voxship/voxship-2.dmm b/maps/away/voxship/voxship-2.dmm deleted file mode 100644 index 3f417e6311188..0000000000000 --- a/maps/away/voxship/voxship-2.dmm +++ /dev/null @@ -1,13248 +0,0 @@ -//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE -"aa" = ( -/turf/simulated/wall/r_wall/hull/vox, -/area/voxship/scavship) -"ab" = ( -/turf/simulated/wall/r_wall/hull/vox, -/area/voxship/thrusters) -"ac" = ( -/turf/simulated/wall/r_wall/hull/vox, -/area/voxship/engineering) -"ad" = ( -/obj/machinery/telecomms/processor/map_preset/voxship, -/turf/simulated/floor/plating/vox, -/area/voxship/thrusters) -"ae" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/fuel{ - dir = 6 - }, -/turf/simulated/wall/r_wall/hull/vox, -/area/voxship/thrusters) -"af" = ( -/obj/machinery/atmospherics/unary/engine{ - dir = 8 - }, -/turf/simulated/floor/reinforced/airless, -/area/voxship/thrusters) -"ag" = ( -/obj/machinery/atmospherics/pipe/vent/high_volume{ - dir = 4 - }, -/turf/simulated/floor/airless, -/area/voxship/engineering) -"ah" = ( -/turf/simulated/floor/plating/vox, -/area/voxship/thrusters) -"ai" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/fuel{ - dir = 6 - }, -/obj/machinery/light/small{ - dir = 4; - icon_state = "bulb1" - }, -/obj/random/junk, -/turf/simulated/floor/plating/vox, -/area/voxship/thrusters) -"aj" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/fuel, -/turf/simulated/wall/r_wall/hull/vox, -/area/voxship/thrusters) -"ak" = ( -/obj/effect/wallframe_spawn/reinforced/hull/vox, -/obj/machinery/door/blast/shutters{ - density = 0; - dir = 2; - icon_state = "shutter0"; - id_tag = "vox_hydro"; - name = "Window Shutters"; - opacity = 0 - }, -/obj/machinery/door/firedoor, -/obj/structure/cable{ - d2 = 2; - icon_state = "0-2" - }, -/obj/structure/cable{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/turf/simulated/floor/plating/vox, -/area/voxship/scavship) -"al" = ( -/obj/effect/wallframe_spawn/reinforced/hull/vox, -/obj/machinery/door/blast/shutters{ - density = 0; - dir = 2; - icon_state = "shutter0"; - id_tag = "vox_hydro"; - name = "Window Shutters"; - opacity = 0 - }, -/obj/machinery/door/firedoor, -/obj/structure/cable{ - d2 = 8; - icon_state = "0-8" - }, -/obj/structure/cable{ - d2 = 4; - icon_state = "0-4" - }, -/turf/simulated/floor/plating/vox, -/area/voxship/scavship) -"am" = ( -/obj/effect/wallframe_spawn/reinforced/hull/vox, -/obj/machinery/door/blast/shutters{ - density = 0; - dir = 2; - icon_state = "shutter0"; - id_tag = "vox_hydro"; - name = "Window Shutters"; - opacity = 0 - }, -/obj/machinery/door/firedoor, -/obj/structure/cable{ - d2 = 8; - icon_state = "0-8" - }, -/turf/simulated/floor/plating/vox, -/area/voxship/scavship) -"an" = ( -/obj/machinery/door/airlock/hatch/voxship, -/turf/simulated/floor/tiled/techmaint/vox, -/area/voxship/engineering) -"ao" = ( -/obj/machinery/telecomms/bus/map_preset/voxship, -/turf/simulated/floor/plating/vox, -/area/voxship/thrusters) -"ap" = ( -/obj/effect/decal/cleanable/filth, -/turf/simulated/floor/plating/vox, -/area/voxship/thrusters) -"aq" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/fuel, -/obj/machinery/telecomms/server/map_preset/voxship, -/turf/simulated/floor/plating/vox, -/area/voxship/thrusters) -"ar" = ( -/turf/simulated/wall/prepainted, -/area/voxship/fore) -"as" = ( -/turf/simulated/wall/prepainted, -/area/voxship/scavship) -"at" = ( -/turf/simulated/wall/r_wall/hull/vox, -/area/voxship/fore) -"au" = ( -/obj/machinery/portable_atmospherics/hydroponics, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/light{ - dir = 8 - }, -/turf/simulated/floor/tiled/techmaint/vox, -/area/voxship/scavship) -"av" = ( -/obj/machinery/portable_atmospherics/hydroponics, -/turf/simulated/floor/tiled/techmaint/vox, -/area/voxship/scavship) -"aw" = ( -/obj/machinery/portable_atmospherics/hydroponics, -/obj/effect/decal/cleanable/filth, -/turf/simulated/floor/tiled/techmaint/vox, -/area/voxship/scavship) -"ax" = ( -/obj/machinery/portable_atmospherics/hydroponics, -/obj/machinery/light{ - dir = 4 - }, -/turf/simulated/floor/tiled/techmaint/vox, -/area/voxship/scavship) -"ay" = ( -/turf/simulated/floor/tiled/techmaint/vox, -/area/voxship/engineering) -"az" = ( -/obj/random/snack, -/turf/simulated/floor/plating/vox, -/area/voxship/engineering) -"aA" = ( -/turf/simulated/floor/plating/vox, -/area/voxship/engineering) -"aB" = ( -/obj/machinery/light/small{ - dir = 1 - }, -/obj/machinery/telecomms/hub/map_preset/voxship, -/turf/simulated/floor/plating/vox, -/area/voxship/thrusters) -"aC" = ( -/obj/machinery/atmospherics/portables_connector{ - dir = 4 - }, -/turf/simulated/floor/plating/vox, -/area/voxship/thrusters) -"aD" = ( -/obj/machinery/atmospherics/binary/pump{ - dir = 8 - }, -/turf/simulated/floor/plating/vox, -/area/voxship/thrusters) -"aE" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/fuel{ - dir = 4 - }, -/turf/simulated/floor/plating/vox, -/area/voxship/thrusters) -"aF" = ( -/obj/machinery/alarm/vox, -/turf/simulated/floor/plating/vox, -/area/voxship/thrusters) -"aG" = ( -/obj/effect/decal/cleanable/cobweb2, -/obj/machinery/light/small{ - dir = 1 - }, -/obj/random/junk, -/turf/simulated/floor/plating/vox, -/area/voxship/thrusters) -"aH" = ( -/obj/random/loot, -/obj/random/hat, -/obj/machinery/light/small{ - dir = 1 - }, -/turf/simulated/floor/tiled/techmaint/vox, -/area/voxship/fore) -"aI" = ( -/obj/item/reagent_containers/food/drinks/glass2/flute, -/obj/random/junk, -/obj/random/advdevice, -/obj/random/powercell, -/obj/item/device/gps, -/turf/simulated/floor/tiled/techmaint/vox, -/area/voxship/fore) -"aJ" = ( -/obj/structure/table/rack, -/obj/item/gun/energy/darkmatter, -/obj/item/gun/energy/sonic, -/obj/item/gun/launcher/alien/spikethrower, -/obj/item/gun/launcher/alien/slugsling, -/turf/simulated/floor/tiled/techmaint/vox, -/area/voxship/fore) -"aK" = ( -/obj/structure/table/rack, -/obj/item/rig/vox, -/obj/item/rig/vox, -/obj/machinery/light/small{ - dir = 1 - }, -/turf/simulated/floor/tiled/techmaint/vox, -/area/voxship/fore) -"aL" = ( -/obj/machinery/atmospherics/unary/vent_pump/on, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/techmaint/vox, -/area/voxship/scavship) -"aM" = ( -/obj/effect/decal/cleanable/filth, -/turf/simulated/floor/tiled/techmaint/vox, -/area/voxship/scavship) -"aO" = ( -/turf/simulated/floor/reinforced/nitrogen, -/area/voxship/engineering) -"aP" = ( -/obj/machinery/atmospherics/unary/vent_pump/tank{ - dir = 4; - external_pressure_bound = 0; - external_pressure_bound_default = 0; - icon_state = "map_vent_in"; - id_tag = "o2_out"; - initialize_directions = 1; - internal_pressure_bound = 4000; - internal_pressure_bound_default = 4000; - pressure_checks = 2; - pressure_checks_default = 2; - pump_direction = 0; - use_power = 1 - }, -/turf/simulated/floor/reinforced/nitrogen, -/area/voxship/engineering) -"aQ" = ( -/obj/effect/wallframe_spawn/reinforced_phoron/hull, -/obj/machinery/atmospherics/pipe/simple/hidden/blue{ - dir = 4 - }, -/turf/simulated/floor/plating/vox, -/area/voxship/engineering) -"aR" = ( -/obj/machinery/atmospherics/binary/pump/high_power/on{ - dir = 4; - target_pressure = 150 - }, -/turf/simulated/floor/tiled/techmaint/vox, -/area/voxship/engineering) -"aS" = ( -/turf/simulated/floor/tiled/techmaint/vox, -/area/voxship/fore) -"aT" = ( -/obj/machinery/light/small{ - dir = 4; - icon_state = "bulb1" - }, -/obj/machinery/atmospherics/unary/vent_pump/on, -/turf/simulated/floor/tiled/techmaint/vox, -/area/voxship/engineering) -"aU" = ( -/turf/simulated/floor/reinforced/carbon_dioxide, -/area/voxship/engineering) -"aV" = ( -/obj/effect/decal/cleanable/filth, -/turf/simulated/floor/plating/vox, -/area/voxship/engineering) -"aW" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 - }, -/obj/structure/cable{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, -/turf/simulated/floor/plating/vox, -/area/voxship/thrusters) -"aX" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 8 - }, -/turf/simulated/floor/plating/vox, -/area/voxship/thrusters) -"aY" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/plating/vox, -/area/voxship/thrusters) -"aZ" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 8; - level = 2 - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/plating/vox, -/area/voxship/thrusters) -"ba" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/fuel{ - dir = 8 - }, -/obj/machinery/meter, -/obj/effect/decal/cleanable/filth, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/plating/vox, -/area/voxship/thrusters) -"bb" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/fuel{ - dir = 4 - }, -/obj/effect/decal/cleanable/filth, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/random/junk, -/turf/simulated/floor/plating/vox, -/area/voxship/thrusters) -"bc" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/fuel{ - dir = 4 - }, -/obj/machinery/power/apc{ - dir = 4; - name = "east bump"; - pixel_x = 24; - req_access = newlist() - }, -/obj/structure/cable{ - d2 = 8; - icon_state = "0-8" - }, -/obj/machinery/portable_atmospherics/canister/empty, -/turf/simulated/floor/plating/vox, -/area/voxship/thrusters) -"bd" = ( -/obj/machinery/atmospherics/pipe/manifold4w/hidden/fuel, -/turf/simulated/wall/r_wall/hull/vox, -/area/voxship/thrusters) -"be" = ( -/turf/simulated/floor/reinforced/airless, -/area/voxship/fore) -"bf" = ( -/obj/item/reagent_containers/food/drinks/glass2/flute, -/obj/random/hat, -/obj/random/closet, -/turf/simulated/floor/tiled/techmaint/vox, -/area/voxship/fore) -"bg" = ( -/obj/machinery/atmospherics/unary/vent_pump/on, -/obj/random/contraband, -/obj/random/advdevice, -/obj/random/drinkbottle, -/obj/random/action_figure, -/obj/random/smokes, -/turf/simulated/floor/tiled/techmaint/vox, -/area/voxship/fore) -"bh" = ( -/obj/random/hat, -/obj/random/loot, -/obj/random/clothing, -/obj/effect/decal/cleanable/filth, -/obj/random/energy, -/turf/simulated/floor/tiled/techmaint/vox, -/area/voxship/fore) -"bi" = ( -/obj/structure/table/rack, -/obj/item/clothing/head/helmet/space/vox/pressure, -/obj/item/clothing/mask/gas/swat/vox, -/obj/item/clothing/suit/space/vox/pressure, -/obj/machinery/light/small{ - dir = 8 - }, -/turf/simulated/floor/tiled/techmaint/vox, -/area/voxship/fore) -"bj" = ( -/obj/random/junk, -/turf/simulated/floor/tiled/techmaint/vox, -/area/voxship/fore) -"bk" = ( -/obj/structure/table/rack, -/obj/item/clothing/head/helmet/space/vox/carapace, -/obj/item/clothing/mask/gas/swat/vox, -/obj/item/clothing/suit/space/vox/carapace, -/turf/simulated/floor/tiled/techmaint/vox, -/area/voxship/fore) -"bl" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/alarm/vox{ - dir = 4; - pixel_x = -16 - }, -/turf/simulated/floor/tiled/techmaint/vox, -/area/voxship/scavship) -"bm" = ( -/obj/effect/decal/cleanable/filth, -/obj/item/seeds/breather, -/turf/simulated/floor/tiled/techmaint/vox, -/area/voxship/scavship) -"bn" = ( -/obj/effect/decal/cleanable/filth, -/obj/machinery/button/blast_door{ - id_tag = "vox_hydro"; - name = "shutter control"; - pixel_x = -6; - pixel_y = -26 - }, -/obj/machinery/seed_storage/random, -/turf/simulated/floor/tiled/techmaint/vox, -/area/voxship/scavship) -"bo" = ( -/obj/item/seeds/breather, -/obj/item/seeds/breather, -/turf/simulated/floor/tiled/techmaint/vox, -/area/voxship/scavship) -"bp" = ( -/obj/effect/wallframe_spawn/reinforced_phoron/hull, -/turf/simulated/floor/plating/vox, -/area/voxship/engineering) -"bq" = ( -/obj/machinery/atmospherics/portables_connector{ - dir = 4 - }, -/obj/machinery/portable_atmospherics/canister/nitrogen, -/turf/simulated/floor/tiled/techmaint/vox, -/area/voxship/engineering) -"br" = ( -/obj/machinery/atmospherics/pipe/manifold4w/hidden/blue, -/obj/machinery/meter, -/turf/simulated/floor/tiled/techmaint/vox, -/area/voxship/engineering) -"bs" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 1 - }, -/obj/effect/decal/cleanable/cobweb2, -/turf/simulated/floor/tiled/techmaint/vox, -/area/voxship/engineering) -"bt" = ( -/obj/machinery/atmospherics/unary/vent_pump/tank{ - dir = 4; - external_pressure_bound = 0; - external_pressure_bound_default = 0; - icon_state = "map_vent_in"; - id_tag = "o2_out"; - initialize_directions = 1; - internal_pressure_bound = 4000; - internal_pressure_bound_default = 4000; - pressure_checks = 2; - pressure_checks_default = 2; - pump_direction = 0; - use_power = 1 - }, -/turf/simulated/floor/reinforced/carbon_dioxide, -/area/voxship/engineering) -"bu" = ( -/obj/effect/wallframe_spawn/reinforced_phoron/hull, -/obj/machinery/atmospherics/pipe/simple/hidden/black{ - dir = 4 - }, -/turf/simulated/floor/plating/vox, -/area/voxship/engineering) -"bv" = ( -/obj/machinery/atmospherics/binary/pump/high_power{ - dir = 4 - }, -/turf/simulated/floor/plating/vox, -/area/voxship/engineering) -"bw" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/black{ - dir = 1 - }, -/obj/machinery/meter, -/turf/simulated/floor/plating/vox, -/area/voxship/engineering) -"bx" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/black{ - dir = 4 - }, -/turf/simulated/floor/plating/vox, -/area/voxship/thrusters) -"by" = ( -/obj/effect/decal/cleanable/blood/oil, -/obj/machinery/atmospherics/pipe/simple/hidden/universal{ - dir = 4 - }, -/turf/simulated/floor/plating/vox, -/area/voxship/thrusters) -"bz" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/fuel{ - dir = 1 - }, -/obj/machinery/meter, -/turf/simulated/floor/plating/vox, -/area/voxship/thrusters) -"bA" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/fuel{ - dir = 4 - }, -/obj/random/mre, -/obj/random/snack, -/turf/simulated/floor/plating/vox, -/area/voxship/thrusters) -"bB" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/fuel{ - dir = 9 - }, -/obj/machinery/portable_atmospherics/canister/empty, -/turf/simulated/floor/plating/vox, -/area/voxship/thrusters) -"bC" = ( -/obj/effect/decal/cleanable/filth, -/obj/machinery/portable_atmospherics/canister/empty, -/turf/simulated/floor/plating/vox, -/area/voxship/thrusters) -"bD" = ( -/obj/machinery/light/small{ - dir = 4; - icon_state = "bulb1" - }, -/obj/machinery/portable_atmospherics/canister/empty, -/turf/simulated/floor/plating/vox, -/area/voxship/thrusters) -"bE" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/fuel{ - dir = 5 - }, -/turf/simulated/wall/r_wall/hull/vox, -/area/voxship/thrusters) -"bF" = ( -/obj/machinery/shipsensors, -/turf/simulated/floor/reinforced/airless, -/area/voxship/fore) -"bG" = ( -/obj/random/junk, -/obj/random/contraband, -/obj/random/clothing, -/obj/random/energy, -/obj/item/clothing/accessory/stethoscope, -/turf/simulated/floor/tiled/techmaint/vox, -/area/voxship/fore) -"bH" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/random/hat, -/obj/random/loot, -/obj/effect/decal/cleanable/filth, -/obj/random/snack, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, -/turf/simulated/floor/tiled/techmaint/vox, -/area/voxship/fore) -"bI" = ( -/obj/item/reagent_containers/food/drinks/glass2/flute, -/obj/random/junk, -/obj/random/contraband, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 8 - }, -/turf/simulated/floor/tiled/techmaint/vox, -/area/voxship/fore) -"bJ" = ( -/obj/structure/table/rack, -/obj/item/clothing/head/helmet/space/vox/stealth, -/obj/item/clothing/mask/gas/swat/vox, -/obj/item/clothing/suit/space/vox/stealth, -/obj/machinery/alarm/vox{ - dir = 4; - pixel_x = -16 - }, -/turf/simulated/floor/tiled/techmaint/vox, -/area/voxship/fore) -"bK" = ( -/obj/effect/decal/cleanable/filth, -/turf/simulated/floor/tiled/techmaint/vox, -/area/voxship/fore) -"bL" = ( -/obj/machinery/atmospherics/unary/vent_pump/on, -/turf/simulated/floor/tiled/techmaint/vox, -/area/voxship/fore) -"bM" = ( -/obj/structure/table/rack, -/obj/item/clothing/head/helmet/space/vox/medic, -/obj/item/clothing/mask/gas/swat/vox, -/obj/item/clothing/suit/space/vox/medic, -/turf/simulated/floor/tiled/techmaint/vox, -/area/voxship/fore) -"bN" = ( -/obj/item/seeds/breather, -/obj/item/seeds/breather, -/obj/item/seeds/resin, -/obj/item/seeds/resin, -/obj/item/seeds/resin, -/turf/simulated/floor/tiled/techmaint/vox, -/area/voxship/scavship) -"bO" = ( -/obj/structure/reagent_dispensers/watertank, -/obj/item/reagent_containers/glass/bucket, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/techmaint/vox, -/area/voxship/scavship) -"bP" = ( -/obj/machinery/atmospherics/pipe/manifold4w/hidden/blue, -/obj/effect/decal/cleanable/filth, -/turf/simulated/floor/tiled/techmaint/vox, -/area/voxship/engineering) -"bQ" = ( -/obj/effect/floor_decal/borderfloorblack{ - dir = 4 - }, -/obj/machinery/atmospherics/unary/tank/nitrogen{ - dir = 8 - }, -/turf/simulated/floor/tiled/techmaint/vox, -/area/voxship/engineering) -"bR" = ( -/obj/machinery/atmospherics/portables_connector{ - dir = 4 - }, -/obj/machinery/portable_atmospherics/canister/carbon_dioxide, -/turf/simulated/floor/plating/vox, -/area/voxship/engineering) -"bS" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/black{ - dir = 9 - }, -/obj/random/junk, -/turf/simulated/floor/plating/vox, -/area/voxship/engineering) -"bT" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/light/small{ - dir = 4; - icon_state = "bulb1" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/plating/vox, -/area/voxship/thrusters) -"bU" = ( -/turf/simulated/wall/ocp_wall, -/area/voxship/thrusters) -"bV" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/fuel, -/turf/simulated/wall/ocp_wall, -/area/voxship/thrusters) -"bW" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/curtain/black, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/door/firedoor, -/turf/simulated/floor/tiled/techmaint/vox, -/area/voxship/fore) -"bX" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/obj/random/junk, -/turf/simulated/floor/tiled/techmaint/vox, -/area/voxship/fore) -"bY" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/effect/decal/cleanable/filth, -/turf/simulated/floor/tiled/techmaint/vox, -/area/voxship/fore) -"bZ" = ( -/obj/structure/table/rack, -/obj/item/clothing/gloves/vox, -/obj/item/clothing/gloves/vox, -/obj/item/clothing/gloves/vox, -/obj/item/clothing/gloves/vox, -/obj/item/clothing/gloves/vox, -/obj/item/clothing/mask/gas/vox, -/obj/item/clothing/mask/gas/vox, -/obj/item/clothing/mask/gas/vox, -/obj/item/clothing/shoes/magboots/vox, -/obj/item/clothing/shoes/magboots/vox, -/obj/item/clothing/shoes/magboots/vox, -/obj/item/clothing/suit/armor/vox_scrap, -/obj/item/clothing/suit/armor/vox_scrap, -/obj/item/clothing/suit/armor/vox_scrap, -/obj/item/clothing/suit/armor/vox_scrap, -/obj/item/clothing/suit/armor/vox_scrap, -/obj/item/clothing/under/vox/vox_casual, -/obj/item/clothing/under/vox/vox_casual, -/obj/item/clothing/under/vox/vox_casual, -/obj/item/clothing/under/vox/vox_robes, -/obj/item/clothing/under/vox/vox_robes, -/obj/item/clothing/under/vox/vox_robes, -/obj/machinery/light/small{ - dir = 4; - icon_state = "bulb1" - }, -/turf/simulated/floor/tiled/techmaint/vox, -/area/voxship/fore) -"ca" = ( -/obj/effect/overmap/visitable/sector/vox_scav_ship, -/turf/space, -/area/space) -"cb" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/door/airlock/hatch/voxship, -/turf/simulated/floor/tiled/techmaint/vox, -/area/voxship/scavship) -"cc" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/wall/prepainted, -/area/voxship/scavship) -"cd" = ( -/obj/structure/table/reinforced, -/obj/item/screwdriver, -/obj/item/crowbar, -/obj/machinery/recharger, -/obj/effect/decal/cleanable/cobweb, -/turf/simulated/floor/plating/vox, -/area/voxship/scavship) -"ce" = ( -/obj/structure/table/reinforced, -/obj/item/stack/cable_coil/random, -/obj/item/stack/cable_coil/random, -/obj/item/stack/cable_coil/random, -/obj/item/storage/backpack/weldpack, -/obj/item/weldingtool/largetank, -/obj/item/stack/material/steel/ten, -/obj/item/stack/material/plastic/ten, -/obj/item/stack/material/aluminium/ten, -/obj/item/stack/material/glass/ten, -/turf/simulated/floor/plating/vox, -/area/voxship/scavship) -"cf" = ( -/obj/machinery/recharge_station, -/obj/machinery/light/small{ - dir = 1 - }, -/turf/simulated/floor/plating/vox, -/area/voxship/scavship) -"cg" = ( -/turf/simulated/wall/prepainted, -/area/voxship/engineering) -"ch" = ( -/obj/structure/table/reinforced, -/obj/item/inflatable_dispenser, -/obj/machinery/atmospherics/unary/vent_pump/on, -/obj/effect/floor_decal/borderfloorblack, -/turf/simulated/floor/tiled/techmaint/vox, -/area/voxship/engineering) -"ci" = ( -/obj/effect/floor_decal/borderfloorblack, -/turf/simulated/floor/tiled/techmaint/vox, -/area/voxship/engineering) -"cj" = ( -/obj/machinery/atmospherics/binary/passive_gate/on{ - name = "nitrogen supply"; - target_pressure = 280 - }, -/obj/effect/floor_decal/borderfloorblack, -/turf/simulated/floor/tiled/techmaint/vox, -/area/voxship/engineering) -"ck" = ( -/obj/random/junk, -/obj/effect/floor_decal/borderfloorblack{ - dir = 6 - }, -/turf/simulated/floor/tiled/techmaint/vox, -/area/voxship/engineering) -"cl" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/turf/simulated/floor/plating/vox, -/area/voxship/engineering) -"cm" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 - }, -/turf/simulated/floor/plating/vox, -/area/voxship/engineering) -"cn" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/plating/vox, -/area/voxship/thrusters) -"co" = ( -/obj/effect/submap_landmark/joinable_submap/voxship/scavship, -/turf/space, -/area/space) -"cp" = ( -/obj/machinery/atmospherics/pipe/simple/heat_exchanging/junction, -/turf/simulated/floor/reinforced/airless, -/area/voxship/thrusters) -"cq" = ( -/obj/machinery/atmospherics/pipe/simple/heat_exchanging{ - dir = 6 - }, -/turf/simulated/floor/reinforced/airless, -/area/voxship/thrusters) -"cr" = ( -/obj/machinery/atmospherics/pipe/simple/heat_exchanging{ - dir = 10 - }, -/turf/simulated/floor/reinforced/airless, -/area/voxship/thrusters) -"cs" = ( -/obj/machinery/computer/ship/engines{ - req_access = list("ACCESS_VOXSHIP") - }, -/turf/simulated/floor/plating/vox, -/area/voxship/engineering) -"ct" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/obj/machinery/computer/shuttle_control/explore/vox_ship, -/turf/simulated/floor/tiled/techmaint/vox, -/area/voxship/fore) -"cu" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/effect/decal/cleanable/filth, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/techmaint/vox, -/area/voxship/fore) -"cv" = ( -/obj/random/junk, -/obj/machinery/power/apc{ - dir = 1; - name = "north bump"; - pixel_y = 24; - req_access = newlist() - }, -/obj/structure/cable{ - d2 = 2; - icon_state = "0-2" - }, -/turf/simulated/floor/tiled/techmaint/vox, -/area/voxship/fore) -"cw" = ( -/obj/machinery/light/small{ - dir = 4; - icon_state = "bulb1" - }, -/turf/simulated/floor/tiled/techmaint/vox, -/area/voxship/fore) -"cx" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/wall/prepainted, -/area/voxship/fore) -"cy" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/door/airlock/hatch/voxship, -/turf/simulated/floor/tiled/techmaint/vox, -/area/voxship/fore) -"cz" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 8 - }, -/obj/item/storage/toolbox/electrical, -/obj/structure/cable{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/structure/cable{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/structure/catwalk, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, -/turf/simulated/floor/plating/vox, -/area/voxship/scavship) -"cA" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/catwalk, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, -/turf/simulated/floor/plating/vox, -/area/voxship/scavship) -"cB" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/catwalk, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 1 - }, -/turf/simulated/floor/plating/vox, -/area/voxship/scavship) -"cC" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/catwalk, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/plating/vox, -/area/voxship/scavship) -"cD" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 1 - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/catwalk, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/plating/vox, -/area/voxship/scavship) -"cE" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/catwalk, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/door/airlock/hatch/voxship, -/turf/simulated/floor/plating/vox, -/area/voxship/scavship) -"cF" = ( -/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply, -/obj/random/junk, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/catwalk, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/turf/simulated/floor/plating/vox, -/area/voxship/scavship) -"cG" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/universal{ - dir = 4 - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/catwalk, -/obj/structure/cable{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/turf/simulated/floor/plating/vox, -/area/voxship/scavship) -"cH" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/blue, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/catwalk, -/obj/machinery/light/small, -/turf/simulated/floor/plating/vox, -/area/voxship/engineering) -"cI" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/universal{ - dir = 4 - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating/vox, -/area/voxship/engineering) -"cJ" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/catwalk, -/obj/machinery/door/airlock/hatch/voxship, -/turf/simulated/floor/plating/vox, -/area/voxship/engineering) -"cK" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating/vox, -/area/voxship/engineering) -"cL" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/decal/cleanable/filth, -/obj/structure/catwalk, -/obj/machinery/light/small{ - dir = 1 - }, -/turf/simulated/floor/plating/vox, -/area/voxship/engineering) -"cM" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/catwalk, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/turf/simulated/floor/plating/vox, -/area/voxship/engineering) -"cN" = ( -/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/catwalk, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/plating/vox, -/area/voxship/engineering) -"cO" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 8; - level = 2 - }, -/obj/structure/cable{ - icon_state = "2-8" - }, -/obj/structure/catwalk, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/turf/simulated/floor/plating/vox, -/area/voxship/thrusters) -"cP" = ( -/obj/machinery/atmospherics/pipe/simple/heat_exchanging, -/turf/simulated/floor/reinforced/airless, -/area/voxship/thrusters) -"cQ" = ( -/obj/machinery/atmospherics/pipe/simple/heat_exchanging, -/obj/machinery/igniter{ - id_tag = "Voxship_igniter" - }, -/turf/simulated/floor/reinforced/airless, -/area/voxship/thrusters) -"cR" = ( -/obj/machinery/door/blast/regular{ - dir = 4; - id_tag = "vox_fusion" - }, -/obj/structure/grille, -/turf/simulated/floor/reinforced/airless, -/area/voxship/thrusters) -"cS" = ( -/obj/machinery/atmospherics/pipe/vent/high_volume{ - dir = 4 - }, -/turf/simulated/floor/reinforced/airless, -/area/voxship/fore) -"cT" = ( -/obj/effect/wallframe_spawn/reinforced/hull/vox, -/obj/machinery/door/blast/shutters{ - density = 0; - dir = 2; - icon_state = "shutter0"; - id_tag = "vox_bridge"; - name = "Window Shutters"; - opacity = 0 - }, -/obj/machinery/door/firedoor, -/obj/structure/cable{ - d2 = 4; - icon_state = "0-4" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/universal{ - dir = 4 - }, -/turf/simulated/floor/plating/vox, -/area/voxship/fore) -"cU" = ( -/obj/machinery/button/blast_door{ - id_tag = "vox_bridge"; - name = "shutter control"; - pixel_x = -26; - pixel_y = -8 - }, -/obj/machinery/computer/ship/engines{ - req_access = list("ACCESS_VOXSHIP") - }, -/turf/simulated/floor/tiled/techmaint/vox, -/area/voxship/fore) -"cV" = ( -/obj/structure/bed/chair/comfy/captain{ - dir = 8 - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/random/drinkbottle, -/obj/item/reagent_containers/food/drinks/glass2/flute, -/turf/simulated/floor/tiled/techmaint/vox, -/area/voxship/fore) -"cW" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, -/obj/machinery/light/small, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 4; - level = 2 - }, -/turf/simulated/floor/tiled/techmaint/vox, -/area/voxship/fore) -"cX" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers, -/obj/effect/shuttle_landmark/vox_base/hangar/vox_ship, -/obj/machinery/hologram/holopad/longrange, -/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply, -/turf/simulated/floor/tiled/techmaint/vox, -/area/voxship/fore) -"cY" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating/vox, -/area/voxship/fore) -"cZ" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/catwalk, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/plating/vox, -/area/voxship/fore) -"da" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/catwalk, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/door/airlock/hatch/voxship, -/turf/simulated/floor/plating/vox, -/area/voxship/fore) -"db" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/obj/structure/cable{ - icon_state = "2-8" - }, -/obj/structure/catwalk, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/plating/vox, -/area/voxship/fore) -"dc" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/random/junk, -/turf/simulated/floor/tiled/techmaint/vox, -/area/voxship/fore) -"dd" = ( -/obj/machinery/light/small{ - dir = 8 - }, -/obj/machinery/power/apc{ - dir = 1; - name = "north bump"; - pixel_y = 24; - req_access = newlist() - }, -/obj/structure/cable{ - d2 = 4; - icon_state = "0-4" - }, -/turf/simulated/floor/tiled/techmaint/vox, -/area/voxship/scavship) -"de" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/catwalk, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/turf/simulated/floor/plating/vox, -/area/voxship/scavship) -"df" = ( -/obj/structure/window/reinforced{ - dir = 4 - }, -/obj/effect/floor_decal/borderfloorblack{ - dir = 9 - }, -/obj/effect/floor_decal/corner_techfloor_gray, -/turf/simulated/floor/tiled/techmaint/vox, -/area/voxship/scavship) -"dg" = ( -/obj/machinery/fabricator, -/obj/effect/floor_decal/borderfloorblack{ - dir = 1 - }, -/obj/effect/floor_decal/corner_techfloor_gray, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/techmaint/vox, -/area/voxship/scavship) -"dh" = ( -/obj/effect/floor_decal/borderfloorblack{ - dir = 1 - }, -/obj/effect/floor_decal/corner_techfloor_gray, -/turf/simulated/floor/tiled/techmaint/vox, -/area/voxship/scavship) -"di" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/bed/chair{ - dir = 8 - }, -/obj/effect/decal/cleanable/blood/oil, -/obj/effect/floor_decal/borderfloorblack{ - dir = 5 - }, -/turf/simulated/floor/tiled/techmaint/vox, -/area/voxship/scavship) -"dj" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/wall/prepainted, -/area/voxship/scavship) -"dk" = ( -/obj/effect/floor_decal/industrial/hatch/yellow, -/obj/machinery/door/airlock/hatch/voxship, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/techmaint/vox, -/area/voxship/scavship) -"dl" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/wall/prepainted, -/area/voxship/engineering) -"dm" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/catwalk, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/plating/vox, -/area/voxship/thrusters) -"dn" = ( -/obj/machinery/atmospherics/pipe/simple/heat_exchanging{ - dir = 5 - }, -/turf/simulated/floor/reinforced/airless, -/area/voxship/thrusters) -"do" = ( -/obj/machinery/atmospherics/pipe/simple/heat_exchanging{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/vent/high_volume, -/turf/simulated/floor/reinforced/airless, -/area/voxship/thrusters) -"dp" = ( -/obj/machinery/atmospherics/pipe/simple/heat_exchanging/junction{ - dir = 1 - }, -/turf/simulated/floor/reinforced/airless, -/area/voxship/thrusters) -"dq" = ( -/obj/machinery/computer/ship/sensors/vox{ - dir = 1 - }, -/obj/machinery/alarm/vox{ - dir = 4; - pixel_x = -16 - }, -/turf/simulated/floor/tiled/techmaint/vox, -/area/voxship/fore) -"dr" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/curtain/black, -/obj/machinery/door/firedoor, -/turf/simulated/floor/tiled/techmaint/vox, -/area/voxship/fore) -"ds" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/obj/structure/cable{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/structure/catwalk, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 8 - }, -/obj/machinery/light/small{ - dir = 8 - }, -/turf/simulated/floor/plating/vox, -/area/voxship/fore) -"dt" = ( -/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating/vox, -/area/voxship/fore) -"du" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 4 - }, -/obj/structure/cable{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/structure/catwalk, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/turf/simulated/floor/plating/vox, -/area/voxship/scavship) -"dv" = ( -/obj/structure/window/reinforced{ - dir = 4 - }, -/obj/effect/floor_decal/borderfloorblack{ - dir = 8 - }, -/obj/effect/floor_decal/corner_techfloor_gray, -/turf/simulated/floor/tiled/techmaint/vox, -/area/voxship/scavship) -"dw" = ( -/obj/machinery/vending/tool, -/obj/effect/floor_decal/corner_techfloor_gray/diagonal, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/techmaint/vox, -/area/voxship/scavship) -"dx" = ( -/obj/effect/floor_decal/corner_techfloor_gray/diagonal, -/turf/simulated/floor/tiled/techmaint/vox, -/area/voxship/scavship) -"dy" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 1; - level = 2 - }, -/obj/effect/floor_decal/borderfloorblack{ - dir = 4 - }, -/obj/effect/floor_decal/corner_techfloor_gray{ - dir = 1 - }, -/obj/machinery/light/small{ - dir = 4; - icon_state = "bulb1" - }, -/obj/random/snack, -/turf/simulated/floor/tiled/techmaint/vox, -/area/voxship/scavship) -"dz" = ( -/obj/structure/table/rack, -/obj/item/storage/ore, -/obj/item/storage/ore, -/obj/item/storage/ore, -/obj/item/pickaxe/jackhammer, -/obj/item/pickaxe/hammer, -/obj/item/pickaxe/drill, -/turf/simulated/floor/tiled/techmaint/vox, -/area/voxship/scavship) -"dA" = ( -/obj/machinery/portable_atmospherics/canister/hydrogen, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/techmaint/vox, -/area/voxship/scavship) -"dB" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/techmaint/vox, -/area/voxship/scavship) -"dC" = ( -/obj/machinery/mining/brace, -/obj/machinery/alarm/vox, -/turf/simulated/floor/tiled/techmaint/vox, -/area/voxship/scavship) -"dD" = ( -/obj/machinery/mining/drill, -/turf/simulated/floor/tiled/techmaint/vox, -/area/voxship/scavship) -"dE" = ( -/obj/machinery/portable_atmospherics/canister/oxygen, -/turf/simulated/floor/tiled/techmaint/vox, -/area/voxship/engineering) -"dF" = ( -/obj/machinery/portable_atmospherics/canister/hydrogen, -/obj/machinery/light/small{ - dir = 1 - }, -/turf/simulated/floor/tiled/techmaint/vox, -/area/voxship/engineering) -"dG" = ( -/obj/machinery/portable_atmospherics/canister/hydrogen, -/turf/simulated/floor/tiled/techmaint/vox, -/area/voxship/engineering) -"dH" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/catwalk, -/obj/machinery/light/small{ - dir = 4; - icon_state = "bulb1" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/plating/vox, -/area/voxship/thrusters) -"dK" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/black, -/obj/effect/wallframe_spawn/reinforced_phoron/hull, -/obj/machinery/door/blast/regular{ - density = 0; - dir = 4; - icon_state = "pdoor0"; - id_tag = "vox_engineview"; - opacity = 0 - }, -/turf/simulated/floor/reinforced/airless, -/area/voxship/thrusters) -"dL" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/fuel, -/obj/machinery/door/airlock/hatch/voxship{ - id_tag = "voxengine"; - locked = 1 - }, -/turf/simulated/floor/reinforced/airless, -/area/voxship/thrusters) -"dN" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, -/turf/simulated/wall/r_wall/hull/vox, -/area/voxship/thrusters) -"dO" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/universal{ - dir = 4 - }, -/turf/simulated/wall/r_wall/hull/vox, -/area/voxship/thrusters) -"dP" = ( -/obj/machinery/atmospherics/pipe/vent/high_volume{ - dir = 8 - }, -/turf/simulated/floor/reinforced/airless, -/area/voxship/thrusters) -"dQ" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/effect/decal/cleanable/filth, -/obj/effect/floor_decal/corner_steel_grid/diagonal, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/techmaint/vox, -/area/voxship/fore) -"dR" = ( -/obj/effect/floor_decal/corner_steel_grid/diagonal, -/obj/item/tank/nitrogen, -/turf/simulated/floor/tiled/techmaint/vox, -/area/voxship/fore) -"dS" = ( -/obj/structure/bed, -/obj/item/bedsheet/mime, -/obj/structure/curtain/open/bed, -/obj/item/clothing/suit/pirate, -/obj/effect/floor_decal/corner_steel_grid/diagonal, -/obj/effect/submap_landmark/spawnpoint/voxship_crew/engineer, -/turf/simulated/floor/tiled/techmaint/vox, -/area/voxship/fore) -"dT" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/random/junk, -/obj/effect/decal/cleanable/filth, -/obj/effect/floor_decal/borderfloorblack{ - dir = 1 - }, -/obj/effect/floor_decal/corner_techfloor_gray, -/turf/simulated/floor/tiled/techmaint/vox, -/area/voxship/scavship) -"dU" = ( -/obj/structure/window/reinforced{ - dir = 4 - }, -/obj/effect/floor_decal/borderfloorblack/corner{ - dir = 1 - }, -/obj/effect/floor_decal/corner_techfloor_gray, -/turf/simulated/floor/tiled/techmaint/vox, -/area/voxship/scavship) -"dV" = ( -/obj/machinery/atmospherics/pipe/vent/high_volume{ - dir = 8 - }, -/turf/simulated/floor/airless, -/area/voxship/scavship) -"dW" = ( -/obj/machinery/vending/engivend{ - req_access = list() - }, -/obj/effect/floor_decal/corner_techfloor_gray/diagonal, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/techmaint/vox, -/area/voxship/scavship) -"dX" = ( -/obj/item/storage/toolbox, -/obj/effect/floor_decal/corner_techfloor_gray/diagonal, -/turf/simulated/floor/tiled/techmaint/vox, -/area/voxship/scavship) -"dY" = ( -/obj/effect/decal/cleanable/filth, -/obj/effect/floor_decal/borderfloorblack{ - dir = 4 - }, -/obj/effect/floor_decal/corner_techfloor_gray{ - dir = 1 - }, -/turf/simulated/floor/tiled/techmaint/vox, -/area/voxship/scavship) -"dZ" = ( -/obj/structure/closet/crate, -/obj/item/stack/material/tritium/ten, -/obj/item/stack/material/tritium/ten, -/obj/item/stack/material/tritium/ten, -/obj/machinery/light/small{ - dir = 8 - }, -/turf/simulated/floor/tiled/techmaint/vox, -/area/voxship/scavship) -"ea" = ( -/obj/random/junk, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 8 - }, -/turf/simulated/floor/tiled/techmaint/vox, -/area/voxship/scavship) -"eb" = ( -/obj/effect/decal/cleanable/filth, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/techmaint/vox, -/area/voxship/scavship) -"ec" = ( -/obj/item/tank/nitrogen, -/turf/simulated/floor/tiled/techmaint/vox, -/area/voxship/scavship) -"ed" = ( -/obj/machinery/mining/brace, -/obj/machinery/light/small{ - dir = 4; - icon_state = "bulb1" - }, -/turf/simulated/floor/tiled/techmaint/vox, -/area/voxship/scavship) -"ee" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/effect/decal/cleanable/filth, -/obj/structure/catwalk, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/alarm/vox{ - dir = 4; - pixel_x = -16 - }, -/turf/simulated/floor/plating/vox, -/area/voxship/thrusters) -"ef" = ( -/obj/machinery/atmospherics/unary/vent_pump/on, -/obj/machinery/button/blast_door{ - id_tag = "vox_engineview"; - name = "chamber viewing port control"; - pixel_y = 32 - }, -/turf/simulated/floor/tiled/techmaint/vox, -/area/voxship/thrusters) -"eg" = ( -/obj/machinery/button/blast_door{ - id_tag = "vox_fusion"; - name = "Chamber Vent Control"; - pixel_y = 32 - }, -/turf/simulated/floor/tiled/techmaint/vox, -/area/voxship/thrusters) -"eh" = ( -/obj/machinery/atmospherics/valve, -/turf/simulated/floor/tiled/techmaint/vox, -/area/voxship/thrusters) -"ei" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/fuel{ - dir = 8 - }, -/obj/machinery/meter, -/turf/simulated/floor/tiled/techmaint/vox, -/area/voxship/thrusters) -"ej" = ( -/obj/machinery/atmospherics/binary/pump{ - dir = 4; - name = "emergency fuel vent" - }, -/obj/machinery/button/alternate/door/bolts{ - id_tag = "voxengine"; - name = "Chamber Hatch Control"; - pixel_y = 32 - }, -/turf/simulated/floor/tiled/techmaint/vox, -/area/voxship/thrusters) -"ek" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/fuel{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/wall/r_wall/hull/vox, -/area/voxship/thrusters) -"el" = ( -/obj/structure/bed, -/obj/item/bedsheet/hos, -/obj/structure/curtain/open/bed, -/obj/effect/floor_decal/corner_steel_grid/diagonal, -/obj/effect/submap_landmark/spawnpoint/voxship_crew/quill, -/turf/simulated/floor/tiled/techmaint/vox, -/area/voxship/fore) -"em" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 1; - level = 2 - }, -/obj/item/storage/box/vox, -/obj/item/storage/box/vox, -/obj/effect/floor_decal/corner_steel_grid/diagonal, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/techmaint/vox, -/area/voxship/fore) -"en" = ( -/obj/item/inflatable_duck, -/obj/effect/floor_decal/corner_steel_grid/diagonal, -/turf/simulated/floor/tiled/techmaint/vox, -/area/voxship/fore) -"eo" = ( -/obj/effect/decal/cleanable/cobweb, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/kitchenspike, -/obj/effect/decal/cleanable/blood, -/turf/simulated/floor/tiled/freezer{ - initial_gas = list("nitrogen" = 101.383) - }, -/area/voxship/fore) -"ep" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/tiled/freezer{ - initial_gas = list("nitrogen" = 101.383) - }, -/area/voxship/fore) -"eq" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/effect/floor_decal/corner_techfloor_gray/diagonal, -/obj/machinery/alarm/vox{ - dir = 4; - pixel_x = -16 - }, -/turf/simulated/floor/tiled/techmaint/vox, -/area/voxship/scavship) -"er" = ( -/obj/machinery/light/small{ - dir = 4; - icon_state = "bulb1" - }, -/obj/machinery/chem_master, -/turf/simulated/floor/tiled/freezer{ - initial_gas = list("nitrogen" = 101.383) - }, -/area/voxship/fore) -"es" = ( -/obj/random/junk, -/obj/effect/decal/cleanable/blood/oil, -/obj/effect/floor_decal/corner_techfloor_gray/diagonal, -/turf/simulated/floor/tiled/techmaint/vox, -/area/voxship/scavship) -"et" = ( -/obj/effect/floor_decal/corner_techfloor_gray/diagonal, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 1 - }, -/turf/simulated/floor/tiled/techmaint/vox, -/area/voxship/scavship) -"eu" = ( -/obj/random/junk, -/obj/effect/floor_decal/borderfloorblack{ - dir = 4 - }, -/obj/effect/floor_decal/corner_techfloor_gray{ - dir = 1 - }, -/obj/machinery/light/small{ - dir = 4; - icon_state = "bulb1" - }, -/turf/simulated/floor/tiled/techmaint/vox, -/area/voxship/scavship) -"ev" = ( -/obj/machinery/power/port_gen/pacman/mrs, -/turf/simulated/floor/tiled/techmaint/vox, -/area/voxship/scavship) -"ew" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 1; - level = 2 - }, -/turf/simulated/floor/tiled/techmaint/vox, -/area/voxship/scavship) -"ex" = ( -/obj/item/tank/nitrogen_emergency, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/techmaint/vox, -/area/voxship/scavship) -"ey" = ( -/obj/random/junk, -/turf/simulated/floor/tiled/techmaint/vox, -/area/voxship/scavship) -"ez" = ( -/obj/effect/decal/cleanable/filth, -/obj/machinery/portable_atmospherics/canister/nitrogen, -/turf/simulated/floor/tiled/techmaint/vox, -/area/voxship/scavship) -"eA" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 1; - level = 2 - }, -/obj/effect/floor_decal/borderfloorblack, -/obj/effect/floor_decal/corner_techfloor_gray{ - dir = 1 - }, -/obj/machinery/light/small{ - dir = 8 - }, -/turf/simulated/floor/tiled/techmaint/vox, -/area/voxship/scavship) -"eB" = ( -/obj/item/storage/toolbox/syndicate, -/turf/simulated/floor/tiled/techmaint/vox, -/area/voxship/engineering) -"eC" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 4; - level = 2 - }, -/turf/simulated/floor/tiled/techmaint/vox, -/area/voxship/engineering) -"eD" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 4 - }, -/turf/simulated/floor/tiled/techmaint/vox, -/area/voxship/engineering) -"eE" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled/techmaint/vox, -/area/voxship/engineering) -"eF" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/door/airlock/hatch/voxship, -/turf/simulated/floor/tiled/techmaint/vox, -/area/voxship/engineering) -"eG" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/structure/catwalk, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, -/turf/simulated/floor/plating/vox, -/area/voxship/thrusters) -"eH" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 4 - }, -/obj/structure/cable{ - icon_state = "2-8" - }, -/obj/structure/catwalk, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 1 - }, -/turf/simulated/floor/plating/vox, -/area/voxship/thrusters) -"eI" = ( -/obj/machinery/atmospherics/portables_connector{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled/techmaint/vox, -/area/voxship/thrusters) -"eJ" = ( -/obj/machinery/atmospherics/omni/mixer, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/button/ignition{ - id_tag = "Voxship_igniter"; - pixel_y = -25 - }, -/turf/simulated/floor/tiled/techmaint/vox, -/area/voxship/thrusters) -"eK" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/fuel, -/obj/machinery/atmospherics/portables_connector{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 1 - }, -/turf/simulated/floor/tiled/techmaint/vox, -/area/voxship/thrusters) -"eL" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/light/small{ - dir = 4; - icon_state = "bulb1" - }, -/turf/simulated/floor/tiled/techmaint/vox, -/area/voxship/thrusters) -"eM" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/fuel{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/turf/simulated/wall/r_wall/hull/vox, -/area/voxship/thrusters) -"eN" = ( -/obj/structure/extinguisher_cabinet, -/turf/simulated/wall/prepainted, -/area/voxship/fore) -"eO" = ( -/obj/item/pizzabox/meat, -/obj/effect/floor_decal/corner_steel_grid/diagonal, -/obj/item/tank/nitrogen, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/turf/simulated/floor/tiled/techmaint/vox, -/area/voxship/fore) -"eP" = ( -/obj/effect/decal/cleanable/filth, -/obj/effect/floor_decal/corner_steel_grid/diagonal, -/obj/random/snack, -/obj/machinery/light/small{ - dir = 4; - icon_state = "bulb1" - }, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 8 - }, -/turf/simulated/floor/tiled/techmaint/vox, -/area/voxship/fore) -"eQ" = ( -/obj/machinery/bodyscanner, -/obj/machinery/alarm/vox{ - dir = 4; - pixel_x = -16 - }, -/turf/simulated/floor/tiled/freezer{ - initial_gas = list("nitrogen" = 101.383) - }, -/area/voxship/fore) -"eR" = ( -/obj/effect/decal/cleanable/filth, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 1 - }, -/obj/item/defibrillator, -/turf/simulated/floor/tiled/freezer{ - initial_gas = list("nitrogen" = 101.383) - }, -/area/voxship/fore) -"eS" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/item/clothing/glasses/hud/health, -/turf/simulated/floor/tiled/freezer{ - initial_gas = list("nitrogen" = 101.383) - }, -/area/voxship/fore) -"eT" = ( -/obj/machinery/chemical_dispenser/full, -/obj/item/reagent_containers/glass/beaker/large, -/turf/simulated/floor/tiled/freezer{ - initial_gas = list("nitrogen" = 101.383) - }, -/area/voxship/fore) -"eU" = ( -/obj/machinery/computer/mining, -/turf/simulated/wall/r_wall/hull/vox, -/area/voxship/scavship) -"eV" = ( -/obj/structure/window/reinforced, -/obj/effect/decal/cleanable/filth, -/obj/effect/floor_decal/borderfloorblack, -/obj/effect/floor_decal/corner_techfloor_gray{ - dir = 1 - }, -/turf/simulated/floor/tiled/techmaint/vox, -/area/voxship/scavship) -"eW" = ( -/obj/machinery/mineral/unloading_machine{ - input_turf = 1; - output_turf = 2 - }, -/obj/effect/floor_decal/borderfloorblack{ - dir = 6 - }, -/obj/effect/floor_decal/corner_techfloor_gray{ - dir = 1 - }, -/turf/simulated/floor/tiled/techmaint/vox, -/area/voxship/scavship) -"eX" = ( -/obj/item/storage/toolbox/mechanical, -/turf/simulated/floor/tiled/techmaint/vox, -/area/voxship/scavship) -"eY" = ( -/turf/simulated/floor/plating/vox, -/area/voxship/scavship) -"eZ" = ( -/obj/machinery/portable_atmospherics/powered/scrubber, -/obj/machinery/atmospherics/portables_connector{ - dir = 4 - }, -/obj/machinery/light/small, -/turf/simulated/floor/tiled/techmaint/vox, -/area/voxship/engineering) -"fa" = ( -/obj/machinery/atmospherics/binary/pump/high_power/on{ - dir = 4; - target_pressure = 5000 - }, -/obj/machinery/vending/engineering{ - req_access = list() - }, -/turf/simulated/floor/tiled/techmaint/vox, -/area/voxship/engineering) -"fb" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/black{ - dir = 4 - }, -/obj/structure/table/reinforced, -/obj/machinery/cell_charger, -/obj/item/cell/crap, -/obj/item/cell/high, -/obj/item/cell/standard, -/obj/item/clothing/gloves/vox, -/obj/random/advdevice, -/obj/random/advdevice, -/obj/item/storage/briefcase/inflatable, -/obj/item/device/lightreplacer, -/turf/simulated/floor/tiled/techmaint/vox, -/area/voxship/engineering) -"fc" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/black{ - dir = 10 - }, -/obj/machinery/pipedispenser, -/turf/simulated/floor/tiled/techmaint/vox, -/area/voxship/engineering) -"fd" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/catwalk, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/door/airlock/hatch/voxship, -/turf/simulated/floor/plating/vox, -/area/voxship/engineering) -"fe" = ( -/obj/machinery/mineral/stacking_machine, -/turf/simulated/floor/plating/vox, -/area/voxship/scavship) -"ff" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/fuel{ - dir = 8 - }, -/obj/effect/decal/cleanable/blood/oil, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/techmaint/vox, -/area/voxship/thrusters) -"fg" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/fuel{ - dir = 4 - }, -/turf/simulated/floor/tiled/techmaint/vox, -/area/voxship/thrusters) -"fh" = ( -/obj/structure/bed, -/obj/item/bedsheet/rd, -/obj/structure/curtain/open/bed, -/obj/effect/floor_decal/corner_steel_grid/diagonal, -/obj/effect/submap_landmark/spawnpoint/voxship_crew, -/obj/item/bikehorn/rubberducky, -/turf/simulated/floor/tiled/techmaint/vox, -/area/voxship/fore) -"fi" = ( -/obj/effect/floor_decal/corner_steel_grid/diagonal, -/turf/simulated/floor/tiled/techmaint/vox, -/area/voxship/fore) -"fj" = ( -/obj/effect/floor_decal/corner_steel_grid/diagonal, -/obj/effect/decal/cleanable/filth, -/turf/simulated/floor/tiled/techmaint/vox, -/area/voxship/fore) -"fk" = ( -/obj/machinery/body_scanconsole{ - dir = 1 - }, -/obj/machinery/light/small{ - dir = 8 - }, -/turf/simulated/floor/tiled/freezer{ - initial_gas = list("nitrogen" = 101.383) - }, -/area/voxship/fore) -"fl" = ( -/obj/item/clothing/suit/storage/toggle/labcoat, -/turf/simulated/floor/tiled/freezer{ - initial_gas = list("nitrogen" = 101.383) - }, -/area/voxship/fore) -"fm" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 1; - level = 2 - }, -/turf/simulated/floor/tiled/freezer{ - initial_gas = list("nitrogen" = 101.383) - }, -/area/voxship/fore) -"fn" = ( -/obj/structure/table/reinforced, -/obj/item/storage/firstaid/adv, -/obj/item/storage/firstaid/combat, -/obj/item/storage/box/detergent, -/obj/item/storage/box/syringes, -/turf/simulated/floor/tiled/freezer{ - initial_gas = list("nitrogen" = 101.383) - }, -/area/voxship/fore) -"fo" = ( -/obj/structure/plasticflaps, -/turf/simulated/floor/plating/vox, -/area/voxship/scavship) -"fp" = ( -/obj/machinery/mineral/processing_unit{ - input_turf = 4; - output_turf = 8 - }, -/turf/simulated/floor/plating/vox, -/area/voxship/scavship) -"fq" = ( -/obj/machinery/door/airlock/hatch/voxship, -/obj/machinery/atmospherics/pipe/simple/hidden/blue{ - dir = 5 - }, -/turf/simulated/floor/tiled/techmaint/vox, -/area/voxship/engineering) -"fr" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/black, -/turf/simulated/wall/prepainted, -/area/voxship/engineering) -"fs" = ( -/obj/structure/cable{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/machinery/light/small{ - dir = 8 - }, -/obj/structure/closet/crate/uranium, -/turf/simulated/floor/tiled/techmaint/vox, -/area/voxship/engineering) -"ft" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 1 - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/cable{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/structure/catwalk, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/plating/vox, -/area/voxship/engineering) -"fu" = ( -/obj/machinery/power/apc{ - dir = 1; - name = "north bump"; - pixel_y = 24; - req_access = newlist() - }, -/obj/structure/cable{ - d2 = 8; - icon_state = "0-8" - }, -/obj/structure/reagent_dispensers/coolanttank, -/obj/item/reagent_containers/glass/bucket, -/turf/simulated/floor/tiled/techmaint/vox, -/area/voxship/engineering) -"fv" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/fuel, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/turf/simulated/floor/tiled/techmaint/vox, -/area/voxship/thrusters) -"fw" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 8 - }, -/turf/simulated/floor/tiled/techmaint/vox, -/area/voxship/thrusters) -"fx" = ( -/obj/structure/bed, -/obj/item/bedsheet/rd, -/obj/structure/curtain/open/bed, -/obj/effect/floor_decal/corner_steel_grid/diagonal, -/obj/effect/submap_landmark/spawnpoint/voxship_crew/doc, -/turf/simulated/floor/tiled/techmaint/vox, -/area/voxship/fore) -"fy" = ( -/obj/item/roller, -/obj/item/auto_cpr, -/turf/simulated/floor/tiled/freezer{ - initial_gas = list("nitrogen" = 101.383) - }, -/area/voxship/fore) -"fz" = ( -/turf/simulated/floor/tiled/freezer{ - initial_gas = list("nitrogen" = 101.383) - }, -/area/voxship/fore) -"fA" = ( -/obj/effect/decal/cleanable/filth, -/turf/simulated/floor/tiled/freezer{ - initial_gas = list("nitrogen" = 101.383) - }, -/area/voxship/fore) -"fB" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/blue{ - dir = 10 - }, -/turf/simulated/wall/r_wall/hull/vox, -/area/voxship/engineering) -"fC" = ( -/obj/machinery/light/small{ - dir = 1 - }, -/obj/machinery/alarm/vox, -/obj/machinery/atmospherics/pipe/manifold/hidden/blue{ - dir = 4 - }, -/turf/simulated/floor/tiled/techmaint/vox, -/area/voxship/engineering) -"fD" = ( -/obj/effect/wallframe_spawn/reinforced/hull/vox, -/turf/simulated/floor/airless, -/area/voxship/scavship) -"fE" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/black, -/turf/simulated/wall/r_wall/hull/vox, -/area/voxship/engineering) -"fF" = ( -/obj/structure/cable, -/obj/machinery/power/smes/buildable/preset/voxship/ship, -/turf/simulated/floor/tiled/techmaint/vox, -/area/voxship/engineering) -"fG" = ( -/turf/simulated/mineral/random, -/area/space) -"fH" = ( -/obj/item/stack/material/rods, -/turf/space, -/area/space) -"fI" = ( -/obj/structure/lattice, -/turf/space, -/area/space) -"fJ" = ( -/obj/machinery/power/terminal{ - dir = 8 - }, -/obj/structure/catwalk, -/obj/structure/cable{ - d2 = 2; - icon_state = "0-2" - }, -/obj/item/device/geiger, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 1 - }, -/turf/simulated/floor/plating/vox, -/area/voxship/engineering) -"fK" = ( -/obj/structure/closet/crate/uranium, -/turf/simulated/floor/tiled/techmaint/vox, -/area/voxship/engineering) -"fL" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/fuel, -/obj/structure/grille, -/turf/simulated/floor/plating/vox, -/area/voxship/thrusters) -"fM" = ( -/obj/machinery/organ_printer/robot/mapped, -/turf/simulated/floor/tiled/freezer{ - initial_gas = list("nitrogen" = 101.383) - }, -/area/voxship/fore) -"fN" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/obj/structure/closet/crate/hydroponics/prespawned, -/turf/simulated/floor/tiled/techmaint/vox, -/area/voxship/scavship) -"fO" = ( -/obj/item/material/shard, -/turf/simulated/floor/airless, -/area/space) -"fP" = ( -/obj/structure/lattice, -/obj/random/loot, -/turf/space, -/area/space) -"fQ" = ( -/obj/item/stack/material/rods, -/turf/simulated/floor/airless, -/area/space) -"fR" = ( -/obj/item/reagent_containers/food/snacks/clownburger, -/turf/simulated/floor/airless, -/area/space) -"fS" = ( -/obj/item/material/shard, -/turf/space, -/area/space) -"fT" = ( -/obj/machinery/atmospherics/unary/engine{ - dir = 1 - }, -/turf/space, -/area/space) -"fU" = ( -/obj/structure/table/reinforced, -/obj/item/storage/firstaid/surgery, -/obj/item/stack/nanopaste, -/turf/simulated/floor/tiled/freezer{ - initial_gas = list("nitrogen" = 101.383) - }, -/area/voxship/fore) -"fV" = ( -/obj/machinery/optable, -/obj/item/device/scanner/health, -/obj/machinery/light{ - dir = 4 - }, -/turf/simulated/floor/tiled/freezer{ - initial_gas = list("nitrogen" = 101.383) - }, -/area/voxship/fore) -"fW" = ( -/obj/random/advdevice, -/turf/simulated/floor/airless, -/area/space) -"fX" = ( -/turf/space, -/area/space) -"fY" = ( -/obj/machinery/atmospherics/pipe/vent/high_volume{ - dir = 1 - }, -/turf/simulated/floor/reinforced/airless, -/area/voxship/engineering) -"fZ" = ( -/obj/machinery/door/window, -/obj/machinery/light/small{ - dir = 4; - icon_state = "bulb1" - }, -/obj/machinery/door/window{ - dir = 1 - }, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/techmaint/vox, -/area/voxship/engineering) -"ga" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/fuel{ - dir = 5 - }, -/obj/machinery/meter, -/obj/item/slugegg, -/turf/simulated/floor/plating/vox, -/area/voxship/thrusters) -"gb" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/fuel{ - dir = 1 - }, -/turf/simulated/wall/r_wall/hull/vox, -/area/voxship/thrusters) -"gc" = ( -/obj/structure/cable, -/obj/machinery/power/port_gen/pacman/super/potato/reactor, -/turf/simulated/floor/plating/vox, -/area/voxship/engineering) -"gd" = ( -/obj/effect/overmap/visitable/ship/landable/vox_ship, -/turf/space, -/area/space) -"ge" = ( -/obj/structure/fuel_port, -/turf/simulated/wall/r_wall/hull/vox, -/area/voxship/engineering) -"gf" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/computer/ship/helm{ - dir = 4; - req_access = list("ACCESS_VOXSHIP") - }, -/turf/simulated/floor/tiled/techmaint/vox, -/area/voxship/fore) -"gg" = ( -/obj/machinery/atmospherics/pipe/vent/high_volume{ - dir = 4 - }, -/turf/simulated/floor/reinforced/airless, -/area/voxship/shuttle) -"gh" = ( -/obj/structure/lattice, -/obj/random/advdevice, -/turf/space, -/area/space) -"gi" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/techmaint/vox, -/area/voxship/scavship) -"gj" = ( -/obj/effect/floor_decal/industrial/hatch/yellow, -/obj/machinery/door/airlock/hatch/voxship, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/techmaint/vox, -/area/voxship/scavship) -"gk" = ( -/obj/machinery/light/small{ - dir = 4; - icon_state = "bulb1" - }, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 1 - }, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/techmaint/vox, -/area/voxship/scavship) -"gl" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 4 - }, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/techmaint/vox, -/area/voxship/scavship) -"gm" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/universal{ - dir = 4 - }, -/turf/simulated/wall/r_wall/hull/vox, -/area/voxship/engineering) -"gn" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/universal, -/obj/effect/wallframe_spawn/reinforced/hull/vox, -/obj/machinery/door/blast/shutters{ - density = 0; - dir = 2; - icon_state = "shutter0"; - id_tag = "vox_bridge"; - name = "Window Shutters"; - opacity = 0 - }, -/turf/simulated/floor/airless, -/area/voxship/engineering) -"go" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 8 - }, -/turf/simulated/floor/tiled/techmaint/vox, -/area/voxship/engineering) -"gp" = ( -/obj/effect/wallframe_spawn/reinforced/hull/vox, -/obj/machinery/atmospherics/pipe/simple/hidden/universal{ - dir = 4 - }, -/turf/simulated/floor/airless, -/area/voxship/scavship) -"gq" = ( -/obj/machinery/atmospherics/pipe/vent/high_volume, -/turf/simulated/floor/airless, -/area/voxship/engineering) -"gr" = ( -/obj/machinery/seed_extractor, -/turf/simulated/floor/tiled/techmaint/vox, -/area/voxship/scavship) -"gs" = ( -/obj/random/loot, -/turf/simulated/floor/airless, -/area/space) -"gt" = ( -/obj/random/hat, -/obj/random/loot, -/turf/simulated/floor/tiled/techmaint/vox, -/area/voxship/fore) -"gu" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/effect/decal/cleanable/filth, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/light/small{ - dir = 8 - }, -/obj/item/seeds/resin, -/turf/simulated/floor/tiled/techmaint/vox, -/area/voxship/scavship) -"gx" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/universal{ - dir = 4 - }, -/turf/simulated/wall/r_wall/hull/vox, -/area/voxship/shuttle) -"gy" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/turf/simulated/wall/r_wall/hull/vox, -/area/voxship/shuttle) -"gz" = ( -/turf/simulated/wall/r_wall/hull/vox, -/area/voxship/shuttle) -"gA" = ( -/obj/machinery/door/airlock/hatch/voxship, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/techmaint/vox, -/area/voxship/shuttle) -"gB" = ( -/obj/machinery/door/airlock/hatch/voxship, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/effect/shuttle_landmark/vox_base/hangar/vox_scavshuttle, -/turf/simulated/floor/tiled/techmaint/vox, -/area/voxship/scavship) -"gC" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/obj/machinery/computer/shuttle_control/explore/vox_lander, -/obj/machinery/light/small{ - dir = 1 - }, -/turf/simulated/floor/tiled/techmaint/vox, -/area/voxship/shuttle) -"gD" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable{ - d2 = 4; - icon_state = "0-4" - }, -/obj/effect/decal/cleanable/filth, -/obj/machinery/power/apc/debug/vox{ - dir = 1; - pixel_y = 24 - }, -/turf/simulated/floor/tiled/techmaint/vox, -/area/voxship/shuttle) -"gE" = ( -/obj/structure/window/reinforced{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 1 - }, -/obj/machinery/alarm/vox, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/techmaint/vox, -/area/voxship/shuttle) -"gF" = ( -/obj/machinery/door/window/brigdoor, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 8 - }, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/techmaint/vox, -/area/voxship/shuttle) -"gG" = ( -/obj/structure/window/reinforced{ - dir = 8 - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/random/junk, -/turf/simulated/floor/tiled/techmaint/vox, -/area/voxship/shuttle) -"gH" = ( -/obj/machinery/power/smes/buildable/preset/voxship/ship, -/obj/structure/cable{ - d2 = 8; - icon_state = "0-8" - }, -/turf/simulated/floor/tiled/techmaint/vox, -/area/voxship/shuttle) -"gI" = ( -/obj/structure/table/reinforced, -/obj/machinery/recharger, -/obj/machinery/light/small{ - dir = 1 - }, -/turf/simulated/floor/tiled/techmaint/vox, -/area/voxship/shuttle) -"gJ" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/fuel{ - dir = 6 - }, -/obj/machinery/recharge_station, -/obj/structure/window/reinforced{ - dir = 4 - }, -/turf/simulated/floor/tiled/techmaint/vox, -/area/voxship/shuttle) -"gK" = ( -/obj/machinery/atmospherics/unary/engine{ - dir = 8 - }, -/turf/simulated/floor/reinforced/airless, -/area/voxship/shuttle) -"gL" = ( -/obj/machinery/computer/ship/helm{ - dir = 4; - req_access = list("ACCESS_VOXSHIP") - }, -/turf/simulated/floor/tiled/techmaint/vox, -/area/voxship/shuttle) -"gM" = ( -/obj/structure/bed/chair/shuttle/black{ - dir = 8 - }, -/turf/simulated/floor/tiled/techmaint/vox, -/area/voxship/shuttle) -"gN" = ( -/turf/simulated/floor/tiled/techmaint/vox, -/area/voxship/shuttle) -"gO" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 1 - }, -/turf/simulated/floor/tiled/techmaint/vox, -/area/voxship/shuttle) -"gP" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/turf/simulated/floor/tiled/techmaint/vox, -/area/voxship/shuttle) -"gQ" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/decal/cleanable/filth, -/turf/simulated/floor/tiled/techmaint/vox, -/area/voxship/shuttle) -"gR" = ( -/obj/machinery/power/terminal{ - dir = 1 - }, -/obj/structure/cable{ - d2 = 8; - icon_state = "0-8" - }, -/turf/simulated/floor/tiled/techmaint/vox, -/area/voxship/shuttle) -"gS" = ( -/obj/random/junk, -/turf/simulated/floor/tiled/techmaint/vox, -/area/voxship/shuttle) -"gT" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/fuel{ - dir = 8 - }, -/obj/structure/window/reinforced{ - dir = 4 - }, -/obj/effect/decal/cleanable/filth, -/turf/simulated/floor/tiled/techmaint/vox, -/area/voxship/shuttle) -"gU" = ( -/obj/machinery/computer/ship/engines{ - dir = 4; - req_access = list("ACCESS_VOXSHIP") - }, -/turf/simulated/floor/tiled/techmaint/vox, -/area/voxship/shuttle) -"gV" = ( -/obj/effect/decal/cleanable/filth, -/turf/simulated/floor/tiled/techmaint/vox, -/area/voxship/shuttle) -"gW" = ( -/obj/effect/overmap/visitable/ship/landable/vox_scavshuttle, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 4; - level = 2 - }, -/turf/simulated/floor/tiled/techmaint/vox, -/area/voxship/shuttle) -"gX" = ( -/obj/machinery/atmospherics/binary/passive_gate/on{ - dir = 8 - }, -/turf/simulated/floor/tiled/techmaint/vox, -/area/voxship/shuttle) -"gY" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/blue{ - dir = 10 - }, -/turf/simulated/floor/tiled/techmaint/vox, -/area/voxship/shuttle) -"gZ" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/fuel{ - dir = 8 - }, -/obj/structure/window/reinforced{ - dir = 4 - }, -/turf/simulated/floor/tiled/techmaint/vox, -/area/voxship/shuttle) -"ha" = ( -/obj/machinery/computer/ship/sensors/vox{ - dir = 1 - }, -/obj/machinery/light/small, -/turf/simulated/floor/tiled/techmaint/vox, -/area/voxship/shuttle) -"hb" = ( -/obj/structure/bed/chair/shuttle/black{ - dir = 1 - }, -/turf/simulated/floor/tiled/techmaint/vox, -/area/voxship/shuttle) -"hc" = ( -/obj/structure/bed/chair/shuttle/black{ - dir = 1 - }, -/obj/random/junk, -/turf/simulated/floor/tiled/techmaint/vox, -/area/voxship/shuttle) -"hd" = ( -/obj/structure/bed/chair/shuttle/black{ - dir = 1 - }, -/obj/machinery/light/small, -/turf/simulated/floor/tiled/techmaint/vox, -/area/voxship/shuttle) -"he" = ( -/obj/machinery/atmospherics/portables_connector{ - dir = 1 - }, -/obj/machinery/portable_atmospherics/canister/nitrogen, -/turf/simulated/floor/tiled/techmaint/vox, -/area/voxship/shuttle) -"hf" = ( -/obj/machinery/shipsensors, -/turf/simulated/floor/reinforced/airless, -/area/voxship/shuttle) -"hg" = ( -/obj/machinery/atmospherics/portables_connector{ - dir = 4 - }, -/obj/machinery/portable_atmospherics/canister/carbon_dioxide, -/turf/simulated/floor/tiled/techmaint/vox, -/area/voxship/shuttle) -"hh" = ( -/obj/machinery/atmospherics/binary/pump{ - dir = 4; - name = "fuel input" - }, -/obj/machinery/light/small, -/turf/simulated/floor/tiled/techmaint/vox, -/area/voxship/shuttle) -"hi" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/fuel, -/obj/structure/fuel_port{ - pixel_y = -32 - }, -/obj/structure/window/reinforced{ - dir = 4 - }, -/obj/random/snack, -/turf/simulated/floor/tiled/techmaint/vox, -/area/voxship/shuttle) -"Dc" = ( -/obj/machinery/telecomms/broadcaster/map_preset/voxship, -/turf/simulated/floor/plating/vox, -/area/voxship/thrusters) -"Gf" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating/vox, -/area/voxship/fore) -"Lj" = ( -/turf/simulated/wall/r_titanium, -/area/space) -"PN" = ( -/obj/machinery/telecomms/receiver/map_preset/voxship, -/turf/simulated/floor/plating/vox, -/area/voxship/thrusters) - -(1,1,1) = {" -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -"} -(2,1,1) = {" -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -"} -(3,1,1) = {" -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -"} -(4,1,1) = {" -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -"} -(5,1,1) = {" -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -"} -(6,1,1) = {" -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -"} -(7,1,1) = {" -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -"} -(8,1,1) = {" -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -"} -(9,1,1) = {" -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -"} -(10,1,1) = {" -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -"} -(11,1,1) = {" -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -"} -(12,1,1) = {" -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -"} -(13,1,1) = {" -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -"} -(14,1,1) = {" -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fG -fG -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -"} -(15,1,1) = {" -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fG -fG -fG -fG -fG -fG -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -"} -(16,1,1) = {" -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fG -fG -fG -fG -fG -fG -fG -fG -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -"} -(17,1,1) = {" -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fH -fX -fX -fX -fH -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -"} -(18,1,1) = {" -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -"} -(19,1,1) = {" -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fI -fI -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -"} -(20,1,1) = {" -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -"} -(21,1,1) = {" -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fG -fG -fG -fG -fG -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fH -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fG -fG -fG -fG -fG -fG -fG -fG -fG -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -"} -(22,1,1) = {" -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fG -fG -fG -fG -fG -fG -fG -fG -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -"} -(23,1,1) = {" -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -Lj -Lj -Lj -Lj -fT -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fG -fG -fG -fG -fG -fG -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -"} -(24,1,1) = {" -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fO -fQ -fW -gs -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fG -fG -fG -fG -fG -fG -fG -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -"} -(25,1,1) = {" -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fW -fR -fQ -fI -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fG -fG -fG -fG -fG -fG -fG -fS -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -"} -(26,1,1) = {" -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -Lj -fS -fX -fX -fX -fX -fX -fX -fX -at -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fG -fG -fG -fG -fG -fH -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -"} -(27,1,1) = {" -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fX -fX -fX -fX -fX -fX -at -be -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fG -fG -fG -fG -fG -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -"} -(28,1,1) = {" -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fX -fX -fX -fX -fX -fX -at -be -fX -fX -fX -fX -fX -at -fX -fX -fX -fX -fX -fX -fX -fX -fX -fG -fG -fX -fX -fX -fX -fX -fX -fS -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -"} -(29,1,1) = {" -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fX -fX -fX -fX -fX -at -be -fX -fX -fX -fX -fX -fX -be -at -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fH -fI -fX -fX -fX -fX -fX -fX -fG -fG -fG -fG -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -"} -(30,1,1) = {" -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fX -fX -fX -fX -fX -fX -at -be -fX -fX -fX -fX -fX -fX -be -at -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fI -gh -fH -fX -fX -fG -fG -fG -fG -fG -fG -fG -fG -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -"} -(31,1,1) = {" -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fX -fX -fX -fX -fX -fX -at -be -fX -fX -ca -co -gd -fX -fX -be -at -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fH -fI -fX -fX -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -"} -(32,1,1) = {" -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fX -fX -fX -fX -fX -fX -at -be -fX -fX -at -cS -at -fX -fX -be -at -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fS -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -"} -(33,1,1) = {" -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fX -fX -fX -fX -fX -at -be -bF -at -at -cT -at -at -fX -be -at -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fH -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -"} -(34,1,1) = {" -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fX -fX -fX -fX -fX -at -at -at -at -ar -gf -ar -at -at -at -at -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fH -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -"} -(35,1,1) = {" -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fX -fX -fX -fX -at -at -ar -ar -ar -cU -cV -dq -ar -ar -ar -at -at -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -"} -(36,1,1) = {" -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fX -fX -fX -fX -at -gt -bf -bG -ar -ct -cW -ar -ar -el -eN -fh -at -at -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -"} -(37,1,1) = {" -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fX -fX -fX -fX -at -at -aH -bg -bH -bW -cu -cX -dr -dQ -em -eO -fi -at -at -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -"} -(38,1,1) = {" -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fX -fX -fX -fX -at -ar -aI -bh -bI -ar -cv -cY -ar -dR -en -eP -fj -fx -at -at -fX -fX -fX -fX -fX -fX -fX -fX -fX -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -"} -(39,1,1) = {" -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fX -fX -fX -at -at -ar -ar -ar -ar -ar -cw -Gf -ar -dS -ar -ar -ar -ar -ar -at -at -fX -fX -fX -fX -fX -fX -fX -fX -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -"} -(40,1,1) = {" -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fX -fX -fX -fX -at -ar -ar -bi -bJ -ar -ar -da -ar -ar -ar -eQ -fk -fy -fM -at -fX -fX -fX -fX -fX -fX -fX -fX -fX -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -"} -(41,1,1) = {" -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fX -fX -at -at -at -at -ar -aJ -aS -bK -bX -cx -db -ds -cx -eo -eR -fl -fz -fU -at -at -at -at -fX -fX -fX -fX -fX -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -"} -(42,1,1) = {" -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fX -fX -fX -fX -fX -fX -at -ar -aK -bj -bL -bY -cy -dc -dt -cy -ep -eS -fm -fA -fV -at -fX -fX -fX -fX -fX -fX -fX -fX -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -"} -(43,1,1) = {" -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fX -fX -fX -fX -fX -at -at -ar -ar -bk -bM -bZ -ar -ar -cZ -ar -er -eT -fn -ar -ar -at -at -fX -fX -fX -fX -fX -fX -fX -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -"} -(44,1,1) = {" -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fX -fX -fX -fX -fX -aa -as -as -as -as -as -as -dd -cC -as -as -as -as -as -aa -aa -fX -fX -fX -fX -fX -fX -fX -fX -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -"} -(45,1,1) = {" -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fX -fX -fX -fX -ak -au -aL -bl -gu -cb -cz -de -du -dT -eq -eA -eY -as -aa -fX -fX -fX -fX -fX -fX -fX -fX -fX -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -"} -(46,1,1) = {" -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fX -fG -fG -fG -fX -fX -fX -fX -al -av -bm -fN -bO -cc -cA -df -dv -dU -es -eU -fe -as -aa -fX -fX -fX -fX -fX -fX -fX -fX -fX -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -"} -(47,1,1) = {" -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fX -fG -fG -fG -fX -fX -fX -fX -al -aw -bo -bn -as -as -cB -dg -dw -dW -et -eV -fo -aa -aa -fX -fX -fX -fX -fX -fX -fX -fX -fX -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -"} -(48,1,1) = {" -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fH -fX -fX -fX -fG -fX -fX -fH -fG -fG -fG -fG -fG -fX -fX -fG -fG -fG -fX -fX -fX -fX -am -ax -bN -gr -as -cd -cC -dh -dx -dX -dx -eU -fp -aa -fX -fX -gg -gz -gz -gz -gz -hf -fX -fX -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -"} -(49,1,1) = {" -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fH -fX -fG -fG -fX -fX -fX -fX -fG -fG -fX -fX -fX -fX -aa -aa -aa -aa -aa -ce -cD -di -dy -dY -eu -eW -fo -aa -fX -fX -gx -gz -gL -gU -gz -gz -fX -fX -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -"} -(50,1,1) = {" -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fG -fX -fX -fX -fX -fG -fX -fX -fX -fX -fX -ac -ac -aO -aO -ac -cf -cC -as -as -as -as -as -as -aa -fX -fX -gy -gC -gM -gM -ha -gz -fX -fX -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -"} -(51,1,1) = {" -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -ag -ac -ac -aP -aO -ac -cg -cE -as -dz -dZ -ev -ey -aa -aa -fX -fX -gz -gD -gN -gV -hb -gz -fX -fX -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -"} -(52,1,1) = {" -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -ac -gm -ac -ac -aQ -bp -ac -ch -cF -dj -dA -ea -ew -eX -aa -aa -fD -fD -gz -gE -gO -gW -hc -gz -fX -fX -fX -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -"} -(53,1,1) = {" -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fI -fP -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -an -go -aT -fq -aR -bq -eC -ci -cG -dk -dB -eb -ex -gi -gj -gk -gl -gB -gA -gF -gP -gX -hd -gz -fX -fX -fX -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -"} -(54,1,1) = {" -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -ac -ac -ac -fB -fC -br -bP -cj -cH -as -dC -ec -ey -aM -aa -aa -gp -fD -gz -gG -gQ -gY -he -gz -fX -fX -fX -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -"} -(55,1,1) = {" -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fG -fG -fG -fH -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -gq -gn -bs -ay -bQ -bQ -ck -cI -as -dD -ed -ez -ey -aa -aa -dV -fX -gz -gH -gR -gN -hg -gz -fX -fX -fX -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -"} -(56,1,1) = {" -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fG -fG -fG -fG -fH -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -ac -ac -ac -ac -ac -ac -cJ -as -as -as -as -as -as -aa -fX -fX -gz -gI -gS -gN -hh -gz -fX -fX -fX -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -"} -(57,1,1) = {" -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fG -fG -fG -fG -fG -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -ac -ac -aU -aU -aU -ac -cK -cg -dE -dE -eB -eZ -cg -aa -fX -fX -gz -gJ -gT -gZ -hi -gz -fX -fX -fX -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -"} -(58,1,1) = {" -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fG -fG -fG -fG -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -ac -ac -aU -bt -aU -ac -cL -cg -dE -dE -eC -fa -cg -ac -fX -fX -gz -gK -gK -gK -gK -gz -fX -fX -fX -fS -fG -fG -fG -fG -fG -fG -fG -fG -fG -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -"} -(59,1,1) = {" -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fG -fG -fG -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -ac -ge -ac -bu -ac -ac -cJ -cg -dF -dG -eD -fb -cg -ac -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fS -fG -fG -fG -fG -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -"} -(60,1,1) = {" -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -ac -az -aA -bv -bR -cl -cM -cg -dG -dG -eE -fc -fr -fE -fY -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fS -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -"} -(61,1,1) = {" -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fP -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -ac -cs -aV -bw -bS -cm -cN -dl -dl -dl -eF -cg -cg -ac -ac -ac -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -"} -(62,1,1) = {" -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fI -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -ab -ab -aB -aW -bx -bT -cn -cO -dm -dH -ee -eG -cg -fs -fF -cg -ac -ac -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -"} -(63,1,1) = {" -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -ab -ab -ao -ah -aX -by -bU -bU -bU -bU -bU -ef -eH -fd -ft -fJ -fZ -gc -ac -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -"} -(64,1,1) = {" -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fG -fG -fX -fX -fX -fX -fX -fX -fX -fX -ab -ab -Dc -ap -aC -aY -bz -bV -cp -cP -dn -bU -eg -eI -cg -fu -fK -cg -ac -ac -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fI -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -"} -(65,1,1) = {" -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fG -fG -fG -fG -fG -fX -fX -fX -fX -fX -fX -ab -ad -ah -ah -aD -aZ -bA -bU -cq -cQ -do -dK -eh -eJ -cg -cg -cg -cg -ac -fX -fX -fX -fX -fX -fX -fX -fX -fX -fI -fI -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -"} -(66,1,1) = {" -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fG -fG -fG -fG -fG -fX -fX -fX -fX -fX -fX -ab -PN -ai -aq -aE -ba -bB -bU -cr -cP -dp -dL -ei -eK -ff -fv -fL -ga -ab -fX -fX -fX -fX -fX -fX -fX -fX -fX -fI -fP -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -"} -(67,1,1) = {" -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fG -fG -fH -fX -fX -fX -fH -fG -fG -fG -fG -fG -fX -fX -fX -fX -fX -fX -ab -ae -aj -ab -aF -bb -bC -bU -bU -cR -bU -bU -ej -eL -fg -fw -ab -gb -bE -ab -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -"} -(68,1,1) = {" -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fG -fG -fG -fG -fG -fX -fX -fH -fG -fG -fG -fG -fG -fG -fG -fX -fX -fX -fX -fX -ab -af -af -ab -aG -bc -bD -ab -fX -fX -fX -dN -ek -eM -bd -bE -ab -af -af -ab -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -"} -(69,1,1) = {" -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fX -fX -fX -fX -fX -fX -fX -fX -ab -ae -bd -bE -ab -fX -fX -fX -dO -dO -af -af -af -ab -fX -fX -fX -fX -fX -fX -fX -fX -fG -fG -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -"} -(70,1,1) = {" -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fX -fX -fX -fX -fX -fX -fX -ab -af -af -af -ab -fX -fX -fX -dP -dP -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fG -fG -fG -fG -fG -fX -fX -fX -fX -fX -fH -fG -fG -fG -fG -fG -fG -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -"} -(71,1,1) = {" -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fG -fG -fG -fG -fG -fH -fX -fX -fX -fX -fG -fG -fG -fG -fG -fG -fG -fG -fG -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -"} -(72,1,1) = {" -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fG -fG -fG -fG -fG -fG -fG -fS -fX -fH -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -"} -(73,1,1) = {" -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -"} -(74,1,1) = {" -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -"} -(75,1,1) = {" -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -"} -(76,1,1) = {" -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -"} -(77,1,1) = {" -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fG -fG -fG -fG -fG -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -"} -(78,1,1) = {" -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fG -fG -fG -fG -fG -fG -fG -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -"} -(79,1,1) = {" -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fG -fG -fG -fG -fG -fG -fG -fG -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -"} -(80,1,1) = {" -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fG -fG -fG -fG -fG -fG -fG -fG -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -"} -(81,1,1) = {" -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fG -fG -fG -fG -fG -fG -fG -fG -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -"} -(82,1,1) = {" -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fG -fG -fG -fG -fG -fG -fG -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -"} -(83,1,1) = {" -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fG -fG -fG -fG -fG -fG -fG -fG -fG -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fG -fG -fG -fG -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -"} -(84,1,1) = {" -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fG -fG -fG -fG -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fG -fG -fG -fG -fG -fG -fG -fG -fG -fG -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -"} -(85,1,1) = {" -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fG -fG -fG -fG -fG -fG -fG -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -"} -(86,1,1) = {" -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fG -fG -fG -fG -fG -fG -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -"} -(87,1,1) = {" -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fG -fG -fG -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -"} -(88,1,1) = {" -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -"} -(89,1,1) = {" -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -"} -(90,1,1) = {" -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -"} -(91,1,1) = {" -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -"} -(92,1,1) = {" -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -"} -(93,1,1) = {" -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -"} -(94,1,1) = {" -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -"} -(95,1,1) = {" -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -"} -(96,1,1) = {" -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -"} -(97,1,1) = {" -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -"} -(98,1,1) = {" -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -"} -(99,1,1) = {" -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -"} -(100,1,1) = {" -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -"} diff --git a/maps/away/voxship/voxship.dm b/maps/away/voxship/voxship.dm deleted file mode 100644 index c634924a7f90d..0000000000000 --- a/maps/away/voxship/voxship.dm +++ /dev/null @@ -1,162 +0,0 @@ -#define WEBHOOK_SUBMAP_LOADED_VOX "webhook_submap_vox" - -#include "voxship_areas.dm" -#include "voxship_jobs.dm" -#include "voxship_radio.dm" -#include "voxship_machines.dm" -#include "voxship_antagonism.dm" - -/datum/map_template/ruin/away_site/scavship - name = "Vox Scavenger Ship" - id = "awaysite_voxship2" - description = "Vox Scavenger Ship." - suffixes = list("voxship/voxship-2.dmm") - spawn_cost = 0.5 - player_cost = 4 - shuttles_to_initialise = list(/datum/shuttle/autodock/overmap/vox_ship, /datum/shuttle/autodock/overmap/vox_lander) - area_usage_test_exempted_root_areas = list(/area/voxship) - spawn_weight = 0.67 - -/obj/effect/overmap/visitable/sector/vox_scav_ship - name = "small asteroid cluster" - desc = "Sensor array detects a small asteroid cluster." - in_space = TRUE - icon_state = "meteor4" - hide_from_reports = TRUE - initial_generic_waypoints = list( - "nav_voxbase_1" - ) - - initial_restricted_waypoints = list( - "Vox Scavenger Ship" = list("nav_hangar_voxship") - ) - -/datum/shuttle/autodock/overmap/vox_ship - name = "Vox Scavenger Ship" - move_time = 10 - shuttle_area = list( - /area/voxship/engineering, - /area/voxship/thrusters, - /area/voxship/fore, - /area/voxship/scavship - ) - dock_target = "vox_ship" - current_location = "nav_hangar_voxship" - landmark_transition = "nav_transit_voxship" - range = 1 - fuel_consumption = 4 - ceiling_type = /turf/simulated/floor/shuttle_ceiling - defer_initialisation = TRUE - -/obj/effect/shuttle_landmark/vox_base/hangar/vox_ship - name = "Vox Ship Docked" - landmark_tag = "nav_hangar_voxship" - -/obj/machinery/computer/shuttle_control/explore/vox_ship - name = "landing control console" - shuttle_tag = "Vox Scavenger Ship" - req_access = list(access_voxship) - -/obj/effect/overmap/visitable/ship/landable/vox_ship - name = "Alien Vessel" - shuttle = "Vox Scavenger Ship" - desc = "Sensor array detects a medium-sized vessel of irregular shape. Unknown origin." - color = "#233012" - icon_state = "ship" - moving_state = "ship_moving" - fore_dir = WEST - vessel_size = SHIP_SIZE_SMALL - -//Ship's little lander defined here -/datum/shuttle/autodock/overmap/vox_lander - name = "Vox Scavenger Shuttle" - move_time = 10 - shuttle_area = list(/area/voxship/shuttle) - dock_target = "vox_scavshuttle" - current_location = "nav_hangar_scavshuttle" - landmark_transition = "nav_transit_scavshuttle" - range = 1 - fuel_consumption = 4 - ceiling_type = /turf/simulated/floor/shuttle_ceiling - defer_initialisation = TRUE - mothershuttle = "Vox Scavenger Ship" - -/obj/effect/shuttle_landmark/vox_base/hangar/vox_scavshuttle - name = "Dock" - landmark_tag = "nav_hangar_scavshuttle" - base_area = /area/voxship/scavship - movable_flags = MOVABLE_FLAG_EFFECTMOVE - -/obj/machinery/computer/shuttle_control/explore/vox_lander - name = "landing control console" - shuttle_tag = "Vox Scavenger Shuttle" - req_access = list(access_voxship) - -/obj/effect/overmap/visitable/ship/landable/vox_scavshuttle - name = "Unmarked shuttle" - shuttle = "Vox Scavenger Shuttle" - desc = "Sensor array detects a small, unmarked vessel." - fore_dir = WEST - vessel_size = SHIP_SIZE_TINY - -/obj/effect/submap_landmark/joinable_submap/voxship/scavship - archetype = /decl/submap_archetype/derelict/voxship - movable_flags = MOVABLE_FLAG_EFFECTMOVE - -//shuttle APC terminal kept being deleted by z level changes -/obj/machinery/power/apc/debug/vox - cell_type = /obj/item/cell/infinite - req_access = list(access_voxship) - -/obj/effect/submap_landmark/joinable_submap/voxship/scavship/New() - var/datum/language/vox/pidgin = all_languages[LANGUAGE_VOX] - name = "[pidgin.get_random_name()]-[pidgin.get_random_name()]" - ..() - -/decl/webhook/submap_loaded/vox - id = WEBHOOK_SUBMAP_LOADED_VOX - -/decl/submap_archetype/derelict/voxship - descriptor = "Shoal Scavenger Vessel" - map = "Vox Scavenger Ship" - crew_jobs = list( - /datum/job/submap/voxship_vox, - /datum/job/submap/voxship_vox/doc, - /datum/job/submap/voxship_vox/engineer, - /datum/job/submap/voxship_vox/quill - ) - whitelisted_species = list(SPECIES_VOX) - blacklisted_species = null - call_webhook = WEBHOOK_SUBMAP_LOADED_VOX - -//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~site 2 code end~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -/turf/simulated/floor/plating/vox - initial_gas = list(GAS_NITROGEN = MOLES_N2STANDARD*1.25) - -/turf/simulated/floor/reinforced/vox - initial_gas = list(GAS_NITROGEN = MOLES_N2STANDARD*1.25) - -/turf/simulated/floor/tiled/techmaint/vox - initial_gas = list(GAS_NITROGEN = MOLES_N2STANDARD*1.25) - -/obj/machinery/alarm/vox - req_access = list() - -/obj/machinery/alarm/vox/Initialize() - .=..() - TLV[GAS_OXYGEN] = list(-1, -1, 0.1, 0.1) // Partial pressure, kpa - TLV[GAS_NITROGEN] = list(16, 19, 135, 140) // Partial pressure, kpa - -/obj/machinery/power/smes/buildable/preset/voxship/ship - uncreated_component_parts = list( - /obj/item/stock_parts/smes_coil/super_capacity = 1, - /obj/item/stock_parts/smes_coil/super_io = 1 - ) - _input_maxed = TRUE - _output_maxed = TRUE - _input_on = TRUE - _output_on = TRUE - _fully_charged = TRUE - -#undef WEBHOOK_SUBMAP_LOADED_VOX diff --git a/maps/away/voxship/voxship.dmi b/maps/away/voxship/voxship.dmi deleted file mode 100644 index 1db5610a4c79b..0000000000000 Binary files a/maps/away/voxship/voxship.dmi and /dev/null differ diff --git a/maps/away/voxship/voxship_antagonism.dm b/maps/away/voxship/voxship_antagonism.dm deleted file mode 100644 index 43ee9c89fee6b..0000000000000 --- a/maps/away/voxship/voxship_antagonism.dm +++ /dev/null @@ -1,6 +0,0 @@ -/datum/antagonist/vox/default_access = list(access_voxship) - -/datum/antagonist/vox/create_radio(var/freq, var/mob/living/carbon/human/player) - var/obj/item/device/radio/R = new/obj/item/device/radio/headset/map_preset/voxship(player) - player.equip_to_slot_or_del(R, slot_l_ear) - return R \ No newline at end of file diff --git a/maps/away/voxship/voxship_areas.dm b/maps/away/voxship/voxship_areas.dm deleted file mode 100644 index b29b375be5728..0000000000000 --- a/maps/away/voxship/voxship_areas.dm +++ /dev/null @@ -1,28 +0,0 @@ - -/area/voxship - icon = 'maps/away/voxship/voxship.dmi' - -/area/voxship/scavship - name = "Vox Scavenger Ship" - icon_state = "scavship" - req_access = list(access_voxship) - -/area/voxship/fore - name = "Unknown Vessel Cockpit" - icon_state = "fore" - req_access = list(access_voxship) - -/area/voxship/engineering - name = "Vox Engineering" - icon_state = "eng" - req_access = list(access_voxship) - -/area/voxship/thrusters - name = "Vox Thrusters" - icon_state = "thrust" - req_access = list(access_voxship) - -/area/voxship/shuttle - name = "Vox Shuttle" - icon_state = "shuttle" - req_access = list(access_voxship) \ No newline at end of file diff --git a/maps/away/voxship/voxship_jobs.dm b/maps/away/voxship/voxship_jobs.dm deleted file mode 100644 index 17f44a2b89f2c..0000000000000 --- a/maps/away/voxship/voxship_jobs.dm +++ /dev/null @@ -1,196 +0,0 @@ -/datum/job/submap/voxship_vox - title = "Shoal Scavenger" - total_positions = 2 - outfit_type = /decl/hierarchy/outfit/job/voxship/crew - supervisors = "quill, apex and the arkship" - info = "Scrap is thin. Not much food is left, but thankfully the sector is quite rich, and it's time to get some more supplies. \ - although staying on base is tempting. Plenty of nitrogen, and not much hazards to worry about." - whitelisted_species = list(SPECIES_VOX) - blacklisted_species = null - is_semi_antagonist = TRUE - max_skill = list( - SKILL_BUREAUCRACY = SKILL_MAX, - SKILL_FINANCE = SKILL_MAX, - SKILL_EVA = SKILL_MAX, - SKILL_MECH = SKILL_MAX, - SKILL_PILOT = SKILL_MAX, - SKILL_HAULING = SKILL_MAX, - SKILL_COMPUTER = SKILL_MAX, - SKILL_BOTANY = SKILL_MAX, - SKILL_COOKING = SKILL_MAX, - SKILL_COMBAT = SKILL_MAX, - SKILL_WEAPONS = SKILL_MAX, - SKILL_FORENSICS = SKILL_MAX, - SKILL_CONSTRUCTION = SKILL_MAX, - SKILL_ELECTRICAL = SKILL_ADEPT, - SKILL_ATMOS = SKILL_ADEPT, - SKILL_ENGINES = SKILL_ADEPT, - SKILL_DEVICES = SKILL_MAX, - SKILL_SCIENCE = SKILL_MAX, - SKILL_MEDICAL = SKILL_ADEPT, - SKILL_ANATOMY = SKILL_ADEPT, - SKILL_CHEMISTRY = SKILL_ADEPT - ) - -/datum/job/submap/voxship_vox/doc - title = "Shoal Biotechnician" - total_positions = 1 - info = "You are the sawbones of your scavenger crew. You are in charge of removing stacks, replacing limbs, and generally keeping \ - your kin alive at all costs." - whitelisted_species = list(SPECIES_VOX) - min_skill = list( - SKILL_HAULING = SKILL_BASIC, - SKILL_EVA = SKILL_EXPERT, - SKILL_MEDICAL = SKILL_EXPERT, - SKILL_ANATOMY = SKILL_EXPERT, - SKILL_CHEMISTRY = SKILL_BASIC, - SKILL_DEVICES = SKILL_ADEPT - ) - - max_skill = list( - SKILL_BUREAUCRACY = SKILL_MAX, - SKILL_FINANCE = SKILL_MAX, - SKILL_EVA = SKILL_MAX, - SKILL_MECH = SKILL_MAX, - SKILL_PILOT = SKILL_MAX, - SKILL_HAULING = SKILL_MAX, - SKILL_COMPUTER = SKILL_MAX, - SKILL_BOTANY = SKILL_MAX, - SKILL_COOKING = SKILL_MAX, - SKILL_COMBAT = SKILL_MAX, - SKILL_WEAPONS = SKILL_MAX, - SKILL_FORENSICS = SKILL_MAX, - SKILL_CONSTRUCTION = SKILL_ADEPT, - SKILL_ELECTRICAL = SKILL_ADEPT, - SKILL_ATMOS = SKILL_ADEPT, - SKILL_ENGINES = SKILL_ADEPT, - SKILL_DEVICES = SKILL_MAX, - SKILL_SCIENCE = SKILL_MAX, - SKILL_MEDICAL = SKILL_MAX, - SKILL_ANATOMY = SKILL_MAX, - SKILL_CHEMISTRY = SKILL_MAX - ) - skill_points = 20 - -/datum/job/submap/voxship_vox/engineer - title = "Shoal Technician" - total_positions = 1 - info = "You are the mechanic of your scavenger crew. Keep all your salvaged technology running, fix robotics, and disassemble some of \ - the more complex devices your crew comes across." - min_skill = list( - SKILL_HAULING = SKILL_BASIC, - SKILL_COMPUTER = SKILL_BASIC, - SKILL_EVA = SKILL_EXPERT, - SKILL_CONSTRUCTION = SKILL_ADEPT, - SKILL_ELECTRICAL = SKILL_BASIC, - SKILL_ATMOS = SKILL_BASIC, - SKILL_ENGINES = SKILL_BASIC - ) - - max_skill = list( - SKILL_BUREAUCRACY = SKILL_MAX, - SKILL_FINANCE = SKILL_MAX, - SKILL_EVA = SKILL_MAX, - SKILL_MECH = SKILL_MAX, - SKILL_PILOT = SKILL_MAX, - SKILL_HAULING = SKILL_MAX, - SKILL_COMPUTER = SKILL_MAX, - SKILL_BOTANY = SKILL_MAX, - SKILL_COOKING = SKILL_MAX, - SKILL_COMBAT = SKILL_MAX, - SKILL_WEAPONS = SKILL_MAX, - SKILL_FORENSICS = SKILL_MAX, - SKILL_CONSTRUCTION = SKILL_MAX, - SKILL_ELECTRICAL = SKILL_MAX, - SKILL_ATMOS = SKILL_MAX, - SKILL_ENGINES = SKILL_MAX, - SKILL_DEVICES = SKILL_MAX, - SKILL_SCIENCE = SKILL_MAX, - SKILL_MEDICAL = SKILL_ADEPT, - SKILL_ANATOMY = SKILL_ADEPT, - SKILL_CHEMISTRY = SKILL_ADEPT - ) - skill_points = 20 - -/datum/job/submap/voxship_vox/quill - title = "Quill" - total_positions = 1 - outfit_type = /decl/hierarchy/outfit/job/voxship/crew - supervisors = "apex and the arkship" - info = "You're in charge. You fly the ship, and dictate what the crew does. Do not disappoint the Apex." - min_skill = list( - SKILL_HAULING = SKILL_BASIC, - SKILL_EVA = SKILL_EXPERT, - SKILL_SCIENCE = SKILL_ADEPT, - SKILL_PILOT = SKILL_ADEPT, - SKILL_COMBAT = SKILL_ADEPT, - SKILL_WEAPONS = SKILL_ADEPT - ) - - max_skill = list( - SKILL_BUREAUCRACY = SKILL_MAX, - SKILL_FINANCE = SKILL_MAX, - SKILL_EVA = SKILL_MAX, - SKILL_MECH = SKILL_MAX, - SKILL_PILOT = SKILL_MAX, - SKILL_HAULING = SKILL_MAX, - SKILL_COMPUTER = SKILL_MAX, - SKILL_BOTANY = SKILL_MAX, - SKILL_COOKING = SKILL_MAX, - SKILL_COMBAT = SKILL_MAX, - SKILL_WEAPONS = SKILL_MAX, - SKILL_FORENSICS = SKILL_MAX, - SKILL_CONSTRUCTION = SKILL_MAX, - SKILL_ELECTRICAL = SKILL_EXPERT, - SKILL_ATMOS = SKILL_EXPERT, - SKILL_ENGINES = SKILL_EXPERT, - SKILL_DEVICES = SKILL_MAX, - SKILL_SCIENCE = SKILL_MAX, - SKILL_MEDICAL = SKILL_EXPERT, - SKILL_ANATOMY = SKILL_EXPERT, - SKILL_CHEMISTRY = SKILL_EXPERT - ) - skill_points = 20 - -var/global/const/access_voxship = "ACCESS_VOXSHIP" -/datum/access/vox - id = access_voxship - desc = "Vox Ship" - region = ACCESS_REGION_NONE - -/obj/item/card/id/voxship - access = list(access_voxship) - -/obj/machinery/door/airlock/hatch/voxship - -#define VOXSHIP_OUTFIT_JOB_NAME -/decl/hierarchy/outfit/job/voxship - hierarchy_type = /decl/hierarchy/outfit/job/voxship - l_ear = null - r_ear = null - -/decl/hierarchy/outfit/job/voxship/crew - id_types = list(/obj/item/card/id/voxship) - name = ("Vox - Job - Shoal Scavenger") - uniform = /obj/item/clothing/under/vox/vox_robes - r_pocket = /obj/item/device/radio - shoes = /obj/item/clothing/shoes/magboots/vox - belt = /obj/item/storage/belt/utility/full - r_pocket = /obj/item/device/radio - l_pocket = /obj/item/crowbar/prybar - l_ear = /obj/item/device/radio/headset/map_preset/voxship - -/obj/effect/submap_landmark/spawnpoint/voxship_crew - name = "Shoal Scavenger" - movable_flags = MOVABLE_FLAG_EFFECTMOVE - -/obj/effect/submap_landmark/spawnpoint/voxship_crew/doc - name = "Shoal Biotechnician" - -/obj/effect/submap_landmark/spawnpoint/voxship_crew/engineer - name = "Shoal Technician" - -/obj/effect/submap_landmark/spawnpoint/voxship_crew/quill - name = "Quill" - -#undef VOXSHIP_OUTFIT_JOB_NAME diff --git a/maps/away/voxship/voxship_machines.dm b/maps/away/voxship/voxship_machines.dm deleted file mode 100644 index 3ef6172429b40..0000000000000 --- a/maps/away/voxship/voxship_machines.dm +++ /dev/null @@ -1,4 +0,0 @@ -/obj/machinery/computer/ship/sensors/vox - construct_state = /decl/machine_construction/default/panel_closed/computer/no_deconstruct - base_type = /obj/machinery/computer/ship/sensors - print_language = LANGUAGE_VOX diff --git a/maps/away/voxship/voxship_radio.dm b/maps/away/voxship/voxship_radio.dm deleted file mode 100644 index b95d3d5b1d05d..0000000000000 --- a/maps/away/voxship/voxship_radio.dm +++ /dev/null @@ -1,31 +0,0 @@ -/obj/machinery/telecomms/hub/map_preset/voxship - preset_name = "Vox" - -/obj/machinery/telecomms/receiver/map_preset/voxship - preset_name = "Vox" - -/obj/machinery/telecomms/bus/map_preset/voxship - preset_name = "Vox" - -/obj/machinery/telecomms/processor/map_preset/voxship - preset_name = "Vox" - -/obj/machinery/telecomms/server/map_preset/voxship - preset_name = "Vox" - preset_color = COMMS_COLOR_VOX - -/obj/machinery/telecomms/broadcaster/map_preset/voxship - preset_name = "Vox" - -/obj/item/device/radio/map_preset/voxship - preset_name = "Vox" - -/obj/item/device/radio/intercom/map_preset/voxship - preset_name = "Vox" - -/obj/item/device/encryptionkey/map_preset/voxship - preset_name = "Vox" - -/obj/item/device/radio/headset/map_preset/voxship - preset_name = "Vox" - encryption_key = /obj/item/device/encryptionkey/map_preset/voxship diff --git a/maps/away/yacht/yacht.dm b/maps/away/yacht/yacht.dm deleted file mode 100644 index 679e8e57a4b9c..0000000000000 --- a/maps/away/yacht/yacht.dm +++ /dev/null @@ -1,42 +0,0 @@ -#include "yacht_areas.dm" - -/obj/effect/overmap/visitable/ship/yacht - name = "private yacht" - desc = "Sensor array is detecting a small vessel with unknown lifeforms on board." - color = "#ffc966" - vessel_mass = 3000 - max_speed = 1/(2 SECONDS) - initial_generic_waypoints = list( - "nav_yacht_1", - "nav_yacht_2", - "nav_yacht_3", - "nav_yacht_antag" - ) - -/obj/effect/overmap/visitable/ship/yacht/New(nloc, max_x, max_y) - name = "IPV [pick("Razorshark", "Aurora", "Lighting", "Pequod", "Anansi")], \a [name]" - ..() - -/datum/map_template/ruin/away_site/yacht - name = "Yacht" - id = "awaysite_yach" - description = "Tiny movable ship with spiders." - suffixes = list("yacht/yacht.dmm") - spawn_cost = 0.5 - area_usage_test_exempted_root_areas = list(/area/yacht) - -/obj/effect/shuttle_landmark/nav_yacht/nav1 - name = "Small Yacht Navpoint #1" - landmark_tag = "nav_yacht_1" - -/obj/effect/shuttle_landmark/nav_yacht/nav2 - name = "Small Yacht Navpoint #2" - landmark_tag = "nav_yacht_2" - -/obj/effect/shuttle_landmark/nav_yacht/nav3 - name = "Small Yacht Navpoint #3" - landmark_tag = "nav_yacht_3" - -/obj/effect/shuttle_landmark/nav_yacht/nav4 - name = "Small Yacht Navpoint #4" - landmark_tag = "nav_yacht_antag" diff --git a/maps/away/yacht/yacht.dmm b/maps/away/yacht/yacht.dmm deleted file mode 100644 index 4c79416802b3f..0000000000000 --- a/maps/away/yacht/yacht.dmm +++ /dev/null @@ -1,11679 +0,0 @@ -//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE -"aa" = ( -/turf/space, -/area/space) -"ab" = ( -/obj/effect/overmap/visitable/ship/yacht, -/turf/space, -/area/space) -"ac" = ( -/obj/effect/wallframe_spawn/reinforced, -/turf/simulated/floor/plating, -/area/yacht/bridge) -"ad" = ( -/obj/machinery/shipsensors, -/turf/simulated/floor/airless{ - icon_state = "dmg2" - }, -/area/yacht/bridge) -"ae" = ( -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/wood/walnut, -/area/yacht/bridge) -"af" = ( -/obj/effect/shuttle_landmark/nav_yacht/nav2, -/turf/space, -/area/space) -"ag" = ( -/obj/effect/shuttle_landmark/nav_yacht/nav1, -/turf/space, -/area/space) -"ah" = ( -/turf/simulated/wall/titanium, -/area/yacht/bridge) -"ai" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/computer/ship/helm, -/turf/simulated/floor/wood/walnut, -/area/yacht/bridge) -"aj" = ( -/obj/machinery/computer/ship/sensors{ - dir = 4 - }, -/turf/simulated/floor/wood/walnut, -/area/yacht/bridge) -"ak" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/obj/structure/bed/chair/comfy/captain, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/wood/walnut, -/area/yacht/bridge) -"al" = ( -/obj/machinery/computer/ship/engines{ - dir = 8 - }, -/turf/simulated/floor/wood/walnut, -/area/yacht/bridge) -"am" = ( -/obj/item/folder/blue, -/obj/item/form_printer, -/obj/structure/table/woodentable, -/obj/item/reagent_containers/food/drinks/glass2/coffeecup, -/obj/item/newspaper, -/obj/effect/spider/stickyweb, -/obj/effect/decal/cleanable/dirt, -/obj/random/energy, -/obj/item/paper{ - info = "I used up all of my energy. I am hopelessly lost. This ship has become my grave. They did it. The intelligence agency that no one ever talks about. Sol Gov wanted their revenge, and they got it. They easily could have killed me on my ship, or tortured me, but they knew that floating here through space would be the worst possible torture. " - }, -/turf/simulated/floor/wood/walnut, -/area/yacht/bridge) -"an" = ( -/obj/machinery/atmospherics/unary/vent_pump/on, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/effect/decal/cleanable/dirt, -/mob/living/simple_animal/hostile/giant_spider/hunter, -/turf/simulated/floor/wood/walnut, -/area/yacht/bridge) -"ao" = ( -/obj/effect/decal/cleanable/dirt, -/obj/random/maintenance/clean, -/turf/simulated/floor/wood/walnut, -/area/yacht/bridge) -"ap" = ( -/obj/structure/filingcabinet/chestdrawer, -/obj/effect/decal/cleanable/cobweb2, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/wood/walnut, -/area/yacht/bridge) -"aq" = ( -/obj/machinery/light{ - dir = 8 - }, -/obj/structure/safe, -/obj/item/reagent_containers/pill/cyanide, -/obj/item/rig/medical/equipped, -/obj/item/gun/energy/captain, -/obj/effect/spider/stickyweb, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/wood/walnut, -/area/yacht/bridge) -"ar" = ( -/obj/machinery/alarm{ - dir = 1; - pixel_y = -22 - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/wood/walnut, -/area/yacht/bridge) -"as" = ( -/obj/structure/cable{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/wood/walnut, -/area/yacht/bridge) -"at" = ( -/obj/structure/cable{ - d2 = 8; - icon_state = "0-8" - }, -/obj/machinery/power/apc{ - name = "Yacht bridge"; - pixel_y = -24 - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/wood/walnut, -/area/yacht/bridge) -"au" = ( -/obj/machinery/light{ - dir = 4; - icon_state = "tube1" - }, -/obj/structure/reagent_dispensers/water_cooler, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/wood/walnut, -/area/yacht/bridge) -"av" = ( -/obj/item/storage/mirror, -/turf/simulated/wall/walnut, -/area/yacht/living) -"aw" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/door/airlock/silver, -/turf/simulated/floor/wood/yew, -/area/yacht/bridge) -"ax" = ( -/turf/simulated/wall/walnut, -/area/yacht/bridge) -"ay" = ( -/obj/structure/disposalpipe/segment{ - dir = 4; - icon_state = "pipe-c" - }, -/turf/simulated/wall/walnut, -/area/yacht/living) -"az" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/simulated/wall/titanium, -/area/yacht/living) -"aA" = ( -/obj/structure/disposalpipe/trunk{ - dir = 8 - }, -/obj/structure/disposaloutlet{ - dir = 4 - }, -/turf/space, -/area/space) -"aB" = ( -/turf/simulated/wall/titanium, -/area/yacht/living) -"aD" = ( -/obj/structure/hygiene/shower{ - pixel_y = 20 - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/freezer, -/area/yacht/living) -"aE" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/wood/yew, -/area/yacht/living) -"aF" = ( -/obj/structure/bed/chair/wood/wings{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/wood/yew, -/area/yacht/living) -"aG" = ( -/obj/machinery/light{ - dir = 1 - }, -/obj/structure/table/marble, -/obj/item/trash/snack_bowl, -/obj/machinery/reagentgrinder/juicer, -/obj/item/reagent_containers/glass/beaker/large, -/obj/effect/decal/cleanable/dirt, -/obj/item/paper{ - info = "Tonight I woke up to a sound I hoped to have never heard, a small explosion. I rushed to the bridge to diagnose the damage and saw the worst possible news. My solar tracker is gone, and so is the fucking computer. No way to override the settings now, because the assholes EMPd the computer. No way to charge my SMES reliably, and no way to heat the fuel. I am stuck in the water! Unheated, this gas will not be enough to get absolutely anywhere near a port. This is bad. Real bad. The current charge on SMES is 20 percent, so I'll just try and orient the ship to hit the current star at maximum efficiency so we will charge at 100, and maybe make it to the next solar system. The next port is in the orbit of a Gas giant named Duma. Maybe I can dock there and repair my array. I freaking knew I needed to get a generator. I spent all of the money the Terrans gave me, and this piece of shit is all I could get. " - }, -/turf/simulated/floor/wood/yew, -/area/yacht/living) -"aH" = ( -/obj/machinery/disposal, -/obj/structure/disposalpipe/trunk{ - dir = 1 - }, -/turf/simulated/floor/wood/yew, -/area/yacht/living) -"aI" = ( -/obj/item/towel/random, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/freezer, -/area/yacht/living) -"aJ" = ( -/obj/structure/hygiene/toilet{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/freezer, -/area/yacht/living) -"aK" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/light{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/wood/yew, -/area/yacht/living) -"aL" = ( -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/wood/yew, -/area/yacht/living) -"aM" = ( -/obj/structure/table/marble, -/obj/item/pizzabox/vegetable, -/obj/item/reagent_containers/glass/rag, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/wood/yew, -/area/yacht/living) -"aN" = ( -/obj/effect/decal/cleanable/dirt, -/obj/random/junk, -/turf/simulated/floor/wood/yew, -/area/yacht/living) -"aO" = ( -/obj/machinery/vending/wallmed1, -/turf/simulated/wall/titanium, -/area/yacht/living) -"aP" = ( -/obj/machinery/door/airlock/silver, -/turf/simulated/floor/wood, -/area/yacht/living) -"aQ" = ( -/obj/structure/table/marble, -/obj/item/deck/cards, -/obj/item/dice, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/wood/yew, -/area/yacht/living) -"aR" = ( -/obj/effect/decal/cleanable/blood/gibs/robot/up, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/wood/yew, -/area/yacht/living) -"aS" = ( -/obj/structure/table/marble, -/obj/machinery/microwave, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/wood/yew, -/area/yacht/living) -"aT" = ( -/obj/effect/decal/cleanable/cobweb, -/obj/effect/spider/stickyweb, -/turf/simulated/floor/carpet/blue2, -/area/yacht/living) -"aU" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 4 - }, -/obj/effect/decal/cleanable/blood/drip, -/obj/effect/spider/stickyweb, -/mob/living/simple_animal/hostile/giant_spider/hunter, -/turf/simulated/floor/wood/walnut, -/area/yacht/living) -"aV" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/effect/decal/cleanable/blood/drip, -/obj/effect/spider/stickyweb, -/turf/simulated/floor/wood/walnut, -/area/yacht/living) -"aW" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/closet/walllocker/emerglocker/north, -/obj/effect/decal/cleanable/blood/drip, -/obj/machinery/door/airlock/silver, -/turf/simulated/floor/wood/yew, -/area/yacht/living) -"aX" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply, -/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/wood/yew, -/area/yacht/living) -"aY" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/wood/yew, -/area/yacht/living) -"aZ" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/table/marble, -/obj/item/book/manual/chef_recipes, -/obj/item/reagent_containers/food/drinks/pitcher, -/obj/effect/decal/cleanable/dirt, -/obj/random/drinkbottle, -/turf/simulated/floor/wood/yew, -/area/yacht/living) -"ba" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 8 - }, -/obj/effect/decal/cleanable/blood/gibs/robot/down, -/obj/effect/decal/cleanable/blood/gibs/robot/up, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/wood/yew, -/area/yacht/living) -"bb" = ( -/obj/machinery/light{ - dir = 4; - icon_state = "tube1" - }, -/obj/machinery/vending/dinnerware, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/wood/yew, -/area/yacht/living) -"bc" = ( -/obj/structure/bed/padded, -/obj/item/bedsheet/blue, -/obj/effect/spider/stickyweb, -/turf/simulated/floor/carpet/blue2, -/area/yacht/living) -"bd" = ( -/obj/effect/spider/stickyweb, -/turf/simulated/floor/wood/walnut, -/area/yacht/living) -"bf" = ( -/obj/effect/decal/cleanable/blood/gibs/robot/limb, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/wood/yew, -/area/yacht/living) -"bg" = ( -/obj/structure/closet/secure_closet/freezer/fridge, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/wood/yew, -/area/yacht/living) -"bh" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/effect/spider/stickyweb, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/wood/yew, -/area/yacht/living) -"bk" = ( -/obj/effect/wallframe_spawn/reinforced, -/turf/simulated/floor/plating, -/area/yacht/living) -"bl" = ( -/obj/machinery/light{ - dir = 8 - }, -/obj/effect/spider/stickyweb, -/turf/simulated/floor/beach/water/ocean, -/area/yacht/living) -"bm" = ( -/obj/effect/spider/stickyweb, -/turf/simulated/floor/beach/water/ocean, -/area/yacht/living) -"bn" = ( -/obj/effect/spider/stickyweb, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/freezer, -/area/yacht/living) -"bo" = ( -/obj/machinery/door/airlock/silver, -/turf/simulated/floor/tiled/freezer, -/area/yacht/living) -"bp" = ( -/obj/effect/decal/cleanable/dirt, -/obj/item/paper{ - info = "I have accepted my fate. I will go into EVA with one of the cyanide pills in my mouth, and I will float off. I want a military funeral, and I will arrange it myself. Good bye all. I have earned and sealed my fate. " - }, -/turf/simulated/floor/wood/yew, -/area/yacht/living) -"bq" = ( -/obj/structure/bookcase, -/turf/simulated/floor/carpet/purple, -/area/yacht/living) -"br" = ( -/obj/machinery/light/small{ - dir = 1 - }, -/obj/structure/bookcase, -/turf/simulated/floor/carpet/purple, -/area/yacht/living) -"bs" = ( -/obj/item/inflatable_duck, -/obj/effect/spider/stickyweb, -/turf/simulated/floor/beach/water/ocean, -/area/yacht/living) -"bt" = ( -/obj/machinery/light{ - dir = 4; - icon_state = "tube1" - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/wood/yew, -/area/yacht/living) -"bu" = ( -/turf/simulated/floor/carpet/purple, -/area/yacht/living) -"bv" = ( -/obj/machinery/atmospherics/unary/vent_pump/on, -/turf/simulated/floor/carpet/purple, -/area/yacht/living) -"bw" = ( -/obj/structure/bed/chair/comfy/red{ - dir = 4 - }, -/turf/simulated/floor/carpet/purple, -/area/yacht/living) -"bx" = ( -/turf/simulated/floor/beach/water/ocean, -/area/yacht/living) -"by" = ( -/mob/living/simple_animal/hostile/giant_spider/hunter, -/turf/simulated/floor/beach/water/ocean, -/area/yacht/living) -"bz" = ( -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/freezer, -/area/yacht/living) -"bA" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 8 - }, -/obj/effect/spider/stickyweb, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/wood/yew, -/area/yacht/living) -"bB" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/effect/spider/stickyweb, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/wood/yew, -/area/yacht/living) -"bC" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/door/airlock/silver, -/turf/simulated/floor/wood/yew, -/area/yacht/living) -"bD" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/carpet/purple, -/area/yacht/living) -"bE" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 1 - }, -/turf/simulated/floor/carpet/purple, -/area/yacht/living) -"bF" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 8 - }, -/obj/item/storage/bible, -/obj/item/pen/blue, -/obj/structure/table/woodentable, -/obj/item/paper{ - info = "Let me introduce myself. My name is Commander Archibald McKinley, although the Fleet fucks think that I do not deserve the title. Well, fuck them. They accused me of facilitating a destruction of the ship I was CO of. A small missile cruiser, with zero to fucking none point defenses was attacked, and they first accuse me of escaping before any of my crew. What kind of person wouldn't expect someone to escape when their ship is on fire? It's lunacy. But it only got worse. Then they said that I helped the Terrans take the ship. Well fuck them, they are wrong. That's non sense. I have no connection to the Terrans. They said that I got a large sum of money from them in order to betray my ship's position, which is once again total nonsense. I've got about 20 years of life left here, and I know that I will be safe with my ship here. I need to resupply once every 5 years, given how much food and fuel I have, and I've got enough range to go to pretty much any known part of the galaxy, in complete silence, as we are totally solar powered. I wish I could afford ion thrusters to not have to rely on gas for propulsion, but, our gas heaters should provide us with enough pressure to get anywhere in relative decent speed. Also, I got a robot butler who cooks delicious food for me! No more crappy lance corporal food, eh" - }, -/obj/item/device/flashlight/lamp/green, -/turf/simulated/floor/carpet/purple, -/area/yacht/living) -"bG" = ( -/obj/machinery/light{ - dir = 8 - }, -/turf/simulated/floor/beach/water/ocean, -/area/yacht/living) -"bI" = ( -/obj/machinery/light, -/obj/item/clothing/shoes/swimmingfins, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/freezer, -/area/yacht/living) -"bJ" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/effect/decal/cleanable/blood/gibs/robot/limb, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/wood/yew, -/area/yacht/living) -"bK" = ( -/obj/effect/decal/cleanable/blood/gibs/robot/down, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/floodlight, -/turf/simulated/floor/wood/yew, -/area/yacht/living) -"bL" = ( -/obj/machinery/light/small, -/obj/structure/filingcabinet, -/turf/simulated/floor/carpet/purple, -/area/yacht/living) -"bM" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/carpet/purple, -/area/yacht/living) -"bN" = ( -/turf/simulated/wall/titanium, -/area/yacht/engine) -"bO" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/effect/decal/cleanable/blood/gibs/robot/down, -/obj/machinery/door/airlock/silver, -/turf/simulated/floor/wood/yew, -/area/yacht/living) -"bP" = ( -/turf/simulated/wall/walnut, -/area/yacht/engine) -"bQ" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/door/airlock/hatch, -/turf/simulated/floor/plating, -/area/yacht/engine) -"bR" = ( -/obj/machinery/atmospherics/unary/tank/air, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plating, -/area/yacht/engine) -"bS" = ( -/obj/structure/dispenser/oxygen, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plating, -/area/yacht/engine) -"bT" = ( -/obj/item/cell/hyper, -/obj/item/book/manual/engineering_guide, -/obj/item/rcd, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/computer/ship/engines, -/turf/simulated/floor/plating, -/area/yacht/engine) -"bU" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/power/smes/buildable, -/obj/structure/cable{ - d2 = 4; - icon_state = "0-4" - }, -/turf/simulated/floor/plating, -/area/yacht/engine) -"bV" = ( -/obj/structure/cable{ - d2 = 8; - icon_state = "0-8" - }, -/obj/structure/cable{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/machinery/power/apc{ - dir = 1; - name = "Yacht engine"; - pixel_y = 24 - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plating, -/area/yacht/engine) -"bW" = ( -/obj/item/extinguisher, -/obj/machinery/portable_atmospherics/hydroponics, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/wood/yew, -/area/yacht/living) -"bX" = ( -/obj/machinery/vending/hydronutrients, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/wood/yew, -/area/yacht/living) -"bY" = ( -/obj/machinery/seed_storage/garden, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/wood/yew, -/area/yacht/living) -"bZ" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/simple/visible/supply, -/turf/simulated/floor/plating, -/area/yacht/engine) -"ca" = ( -/obj/structure/closet/secure_closet/freezer/kitchen, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plating, -/area/yacht/engine) -"cb" = ( -/obj/machinery/atmospherics/binary/pump, -/obj/machinery/space_heater, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plating, -/area/yacht/engine) -"cc" = ( -/obj/structure/cable{ - d2 = 2; - icon_state = "0-2" - }, -/obj/machinery/power/solar, -/obj/effect/floor_decal/solarpanel, -/turf/simulated/floor/airless, -/area/yacht/engine) -"cd" = ( -/obj/structure/closet/crate/hydroponics, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/wood/yew, -/area/yacht/living) -"ce" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/obj/item/stock_parts/circuitboard/broken, -/turf/simulated/floor/plating, -/area/yacht/engine) -"ch" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/door/airlock/hatch, -/turf/simulated/floor/plating, -/area/yacht/engine) -"ci" = ( -/obj/structure/cable{ - icon_state = "2-8" - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/wood/yew, -/area/yacht/living) -"cj" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/wood/yew, -/area/yacht/living) -"ck" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/wood/yew, -/area/yacht/living) -"cl" = ( -/obj/structure/janitorialcart, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/wood/yew, -/area/yacht/living) -"cm" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/light/small{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plating, -/area/yacht/engine) -"cn" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/universal{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plating, -/area/yacht/engine) -"co" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/cyan{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/portable_atmospherics/powered/pump, -/turf/simulated/floor/plating, -/area/yacht/engine) -"cp" = ( -/obj/structure/cable{ - d1 = 16; - d2 = 0; - dir = 4; - icon_state = "0-2" - }, -/obj/effect/decal/cleanable/ash, -/obj/effect/decal/cleanable/blood/oil/streak, -/obj/effect/decal/cleanable/generic, -/obj/effect/decal/cleanable/molten_item, -/turf/simulated/floor/airless{ - icon_state = "dmg2" - }, -/area/yacht/engine) -"cq" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/cable{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/structure/cable{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/item/stock_parts/circuitboard/broken, -/turf/simulated/floor/airless{ - icon_state = "dmg2" - }, -/area/yacht/engine) -"cr" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/cable{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/structure/cable{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/item/storage/toolbox/syndicate, -/turf/simulated/floor/airless{ - icon_state = "dmg2" - }, -/area/yacht/engine) -"cs" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/cable{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/structure/cable{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/item/plastique, -/turf/simulated/floor/airless, -/area/yacht/engine) -"ct" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/cable{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/structure/cable{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/turf/simulated/floor/airless, -/area/yacht/engine) -"cu" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/airless, -/area/yacht/engine) -"cC" = ( -/obj/structure/cable, -/obj/machinery/power/apc{ - dir = 8; - name = "Yacht living"; - pixel_x = -24 - }, -/obj/machinery/portable_atmospherics/hydroponics, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/wood/yew, -/area/yacht/living) -"cD" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/effect/decal/cleanable/dirt, -/mob/living/bot/farmbot, -/turf/simulated/floor/wood/yew, -/area/yacht/living) -"cE" = ( -/obj/effect/spider/stickyweb, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/wood/yew, -/area/yacht/living) -"cF" = ( -/obj/structure/reagent_dispensers/watertank, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/wood/yew, -/area/yacht/living) -"cG" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plating, -/area/yacht/engine) -"cJ" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/red{ - dir = 4 - }, -/turf/simulated/wall/titanium, -/area/yacht/engine) -"cK" = ( -/obj/machinery/atmospherics/unary/outlet_injector{ - dir = 8; - use_power = 1 - }, -/turf/space, -/area/space) -"cL" = ( -/obj/structure/cable, -/obj/machinery/power/solar, -/obj/effect/floor_decal/solarpanel, -/turf/simulated/floor/airless, -/area/yacht/engine) -"cN" = ( -/obj/structure/closet/toolcloset, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plating, -/area/yacht/engine) -"cO" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plating, -/area/yacht/engine) -"cQ" = ( -/obj/machinery/light{ - dir = 8 - }, -/obj/machinery/alarm{ - dir = 4; - pixel_x = -23 - }, -/obj/machinery/portable_atmospherics/hydroponics, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/wood/yew, -/area/yacht/living) -"cR" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 1; - level = 2 - }, -/obj/item/shovel/spade, -/obj/item/reagent_containers/glass/bucket, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/wood/yew, -/area/yacht/living) -"cS" = ( -/obj/machinery/light, -/obj/structure/reagent_dispensers/beerkeg, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/wood/yew, -/area/yacht/living) -"cT" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plating, -/area/yacht/engine) -"cW" = ( -/obj/structure/closet/secure_closet/freezer/kitchen, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/wood/yew, -/area/yacht/living) -"cY" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plating, -/area/yacht/engine) -"cZ" = ( -/obj/machinery/vending/tool, -/turf/simulated/floor/plating, -/area/yacht/engine) -"da" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/item/caution/cone, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plating, -/area/yacht/engine) -"db" = ( -/obj/structure/reagent_dispensers/fueltank, -/turf/simulated/floor/plating, -/area/yacht/engine) -"dc" = ( -/obj/structure/closet/wardrobe/pjs, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/wood/yew, -/area/yacht/living) -"dd" = ( -/obj/structure/closet/wardrobe/suit, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/wood/yew, -/area/yacht/living) -"df" = ( -/obj/structure/closet/secure_closet/bar, -/turf/simulated/floor/plating, -/area/yacht/engine) -"dg" = ( -/obj/structure/closet/crate/freezer/rations, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plating, -/area/yacht/engine) -"dh" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 1; - level = 2 - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plating, -/area/yacht/engine) -"di" = ( -/obj/machinery/atmospherics/unary/heater, -/turf/simulated/floor/plating, -/area/yacht/engine) -"dj" = ( -/obj/effect/wallframe_spawn/reinforced, -/turf/simulated/floor/plating, -/area/yacht/engine) -"dk" = ( -/obj/machinery/atmospherics/unary/heater, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plating, -/area/yacht/engine) -"dm" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 1; - level = 2 - }, -/turf/simulated/floor/plating, -/area/yacht/engine) -"dn" = ( -/obj/machinery/atmospherics/pipe/simple/visible/black{ - dir = 6 - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plating, -/area/yacht/engine) -"do" = ( -/obj/machinery/atmospherics/pipe/manifold4w/visible/black, -/obj/machinery/light/small{ - dir = 4; - pixel_y = 8 - }, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/meter, -/turf/simulated/floor/plating, -/area/yacht/engine) -"dp" = ( -/obj/machinery/atmospherics/pipe/simple/visible/black{ - dir = 4 - }, -/turf/simulated/wall/titanium, -/area/yacht/engine) -"dq" = ( -/obj/machinery/atmospherics/unary/vent_pump{ - dir = 8; - external_pressure_bound = 0; - external_pressure_bound_default = 0; - icon_state = "map_vent_in"; - initialize_directions = 1; - internal_pressure_bound = 4000; - internal_pressure_bound_default = 4000; - pressure_checks = 2; - pressure_checks_default = 2; - pump_direction = 0; - use_power = 1 - }, -/turf/simulated/floor/reinforced/carbon_dioxide, -/area/yacht/engine) -"dr" = ( -/obj/machinery/atmospherics/unary/vent_pump{ - dir = 4; - external_pressure_bound = 0; - external_pressure_bound_default = 0; - icon_state = "map_vent_in"; - initialize_directions = 1; - internal_pressure_bound = 4000; - internal_pressure_bound_default = 4000; - pressure_checks = 2; - pressure_checks_default = 2; - pump_direction = 0; - use_power = 1 - }, -/turf/simulated/floor/reinforced/carbon_dioxide, -/area/yacht/engine) -"dt" = ( -/obj/machinery/atmospherics/pipe/manifold4w/visible/black, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/meter, -/obj/machinery/light/small{ - dir = 8 - }, -/turf/simulated/floor/plating, -/area/yacht/engine) -"du" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/simple/visible/black{ - dir = 10 - }, -/turf/simulated/floor/plating, -/area/yacht/engine) -"dv" = ( -/obj/machinery/atmospherics/pipe/simple/visible/black, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plating, -/area/yacht/engine) -"dw" = ( -/obj/machinery/atmospherics/unary/heater{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plating, -/area/yacht/engine) -"dx" = ( -/turf/simulated/floor/reinforced/carbon_dioxide, -/area/yacht/engine) -"dy" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/simple/visible/black, -/turf/simulated/floor/plating, -/area/yacht/engine) -"dz" = ( -/obj/machinery/atmospherics/pipe/manifold/visible/black{ - dir = 8 - }, -/obj/structure/window/reinforced, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plating, -/area/yacht/engine) -"dA" = ( -/obj/machinery/atmospherics/pipe/simple/visible/black{ - dir = 10 - }, -/obj/structure/window/reinforced, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/recharge_station, -/turf/simulated/floor/plating, -/area/yacht/engine) -"dC" = ( -/obj/structure/window/reinforced, -/obj/machinery/atmospherics/pipe/simple/visible/black{ - dir = 6 - }, -/turf/simulated/floor/plating, -/area/yacht/engine) -"dD" = ( -/obj/structure/window/reinforced, -/obj/machinery/atmospherics/pipe/manifold/visible/black{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/yacht/engine) -"dE" = ( -/obj/machinery/atmospherics/unary/engine{ - dir = 1 - }, -/turf/simulated/floor/airless, -/area/yacht/engine) -"dF" = ( -/obj/effect/shuttle_landmark/nav_yacht/nav3, -/turf/space, -/area/space) -"dG" = ( -/obj/effect/shuttle_landmark/nav_yacht/nav4, -/turf/space, -/area/space) -"eb" = ( -/obj/machinery/light{ - dir = 4; - icon_state = "tube1" - }, -/obj/item/cane, -/obj/item/clothing/suit/storage/det_trench/grey, -/obj/item/clothing/ring/cti, -/obj/item/clothing/under/lawyer/oldman, -/obj/structure/table/woodentable, -/obj/effect/spider/stickyweb, -/obj/random/cash, -/obj/random/cash, -/obj/random/cash, -/obj/random/projectile, -/turf/simulated/floor/wood/walnut, -/area/yacht/living) -"fb" = ( -/obj/machinery/access_button/airlock_exterior{ - frequency = 1439; - master_tag = "yacht_airlock"; - pixel_x = 24 - }, -/turf/space, -/area/space) -"gb" = ( -/obj/structure/cable{ - d2 = 2; - icon_state = "0-2" - }, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/constructable_frame/computerframe, -/obj/machinery/access_button/airlock_interior{ - frequency = 1439; - master_tag = "yacht_airlock"; - pixel_x = -24 - }, -/turf/simulated/floor/plating, -/area/yacht/engine) -"hb" = ( -/obj/machinery/power/terminal{ - dir = 1 - }, -/obj/structure/cable{ - d2 = 2; - icon_state = "0-2" - }, -/obj/item/storage/toolbox/electrical, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/yacht/engine) -"ib" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 1 - }, -/turf/simulated/floor/plating, -/area/yacht/engine) -"jb" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/door/airlock/external/bolted{ - frequency = 1439; - id_tag = "yacht_outer" - }, -/turf/simulated/floor/airless, -/area/yacht/engine) -"kb" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/embedded_controller/radio/airlock/airlock_controller{ - frequency = 1439; - id_tag = "yacht_airlock"; - pixel_y = 24; - tag_airpump = "yacht_pump"; - tag_chamber_sensor = "yacht_sensor"; - tag_exterior_door = "yacht_outer"; - tag_interior_door = "yacht_inner" - }, -/obj/machinery/atmospherics/unary/vent_pump/high_volume{ - dir = 4; - id_tag = "yacht_pump" - }, -/obj/machinery/airlock_sensor{ - frequency = 1439; - id_tag = "yacht_sensor"; - pixel_y = -24 - }, -/turf/simulated/floor/airless, -/area/yacht/engine) -"lb" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 4 - }, -/obj/machinery/door/airlock/external/bolted{ - frequency = 1439; - id_tag = "yacht_inner" - }, -/turf/simulated/floor/plating, -/area/yacht/engine) -"mb" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/manifold/hidden{ - dir = 1 - }, -/turf/simulated/floor/plating, -/area/yacht/engine) -"nb" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/binary/pump{ - dir = 8 - }, -/turf/simulated/floor/plating, -/area/yacht/engine) -"ob" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/simple/visible/universal{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/yacht/engine) -"pb" = ( -/obj/machinery/alarm{ - dir = 8; - pixel_x = 24 - }, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/yacht/engine) -"qb" = ( -/obj/machinery/atmospherics/binary/pump{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/red{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plating, -/area/yacht/engine) -"rb" = ( -/obj/machinery/atmospherics/unary/tank/air{ - dir = 1 - }, -/turf/simulated/floor/plating, -/area/yacht/engine) -"sb" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 - }, -/turf/simulated/floor/plating, -/area/yacht/engine) -"tb" = ( -/obj/structure/closet/firecloset, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 - }, -/turf/simulated/floor/plating, -/area/yacht/engine) -"ub" = ( -/obj/structure/closet/secure_closet/freezer/meat, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plating, -/area/yacht/engine) -"vb" = ( -/obj/machinery/atmospherics/portables_connector{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/portable_atmospherics/canister/oxygen, -/turf/simulated/floor/plating, -/area/yacht/engine) -"wb" = ( -/obj/machinery/light/small{ - dir = 8 - }, -/obj/structure/hygiene/sink{ - pixel_y = 20 - }, -/obj/item/bikehorn/rubberducky, -/obj/effect/decal/cleanable/dirt, -/obj/random/soap, -/turf/simulated/floor/tiled/freezer, -/area/yacht/living) -"xB" = ( -/turf/simulated/wall/walnut, -/area/yacht/living) -"Hj" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 1 - }, -/turf/simulated/floor/plating, -/area/yacht/engine) -"Ty" = ( -/obj/structure/closet/secure_closet/freezer/meat, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/wood/yew, -/area/yacht/living) - -(1,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(2,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(3,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(4,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(5,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(6,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(7,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(8,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(9,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(10,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(11,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(12,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(13,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(14,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(15,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(16,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(17,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(18,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(19,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -cp -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(20,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -cc -cq -cL -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(21,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -cc -cr -cL -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(22,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -cc -cs -cL -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(23,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -cc -ct -cL -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(24,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -cc -ct -cL -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(25,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -cc -ct -cL -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(26,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -cc -ct -cL -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(27,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -cc -ct -cL -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(28,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -cc -ct -cL -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(29,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -cc -ct -cL -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(30,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -cc -ct -cL -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -dF -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(31,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -cc -ct -cL -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(32,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -cc -ct -cL -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(33,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ag -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -cc -ct -cL -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(34,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -cc -ct -cL -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(35,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -cc -ct -cL -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(36,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -cc -ct -cL -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(37,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -cc -ct -cL -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(38,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -cc -ct -cL -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(39,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -cc -ct -cL -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(40,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -fb -cu -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(41,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -bN -jb -bN -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(42,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -bN -kb -bN -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(43,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aB -bN -bN -bN -lb -bN -bN -bN -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(44,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aB -aB -bk -bk -bk -aB -bN -bS -gb -mb -rb -bN -bN -bN -bN -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(45,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aB -aB -aB -aB -aB -bl -bm -bm -bG -bN -bT -ce -nb -cN -bN -cZ -bN -bN -bN -bN -bN -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(46,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ah -ah -aB -aB -xB -aT -bc -xB -bm -bs -bx -bx -bN -bU -hb -ob -sb -cO -da -dh -dn -dv -dz -dE -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(47,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ah -ah -ah -av -wb -aI -aP -aU -bd -xB -bm -bm -by -bx -bN -bV -ib -pb -tb -bN -db -di -do -dw -dA -dE -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(48,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ah -ah -am -aq -xB -aD -aJ -xB -aV -eb -xB -bn -bn -bz -bI -bN -bN -ch -bN -bN -bN -bN -bN -dp -bN -bN -bN -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(49,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ac -ac -aj -ae -ar -xB -xB -xB -xB -aW -xB -xB -bo -xB -xB -xB -xB -bW -ci -cC -cQ -cW -dc -dj -dq -dx -dx -bN -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(50,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ac -ai -ak -an -as -aw -aE -aK -aE -aX -aE -bh -aE -bh -bA -bJ -bO -aE -cj -cD -cR -aL -dd -dj -dx -dx -dx -bN -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(51,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ac -ac -al -ao -at -ax -aF -aL -aL -aY -aL -aL -bp -bt -bB -bK -xB -bX -ck -cE -aL -Ty -cd -dj -dr -dx -dx -bN -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(52,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ah -ah -ap -au -ax -aG -aM -aQ -aZ -bf -xB -xB -xB -bC -xB -xB -bY -cl -cF -cS -bN -bN -bN -dp -bN -bN -bN -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(53,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ah -ah -ah -ay -aH -aN -aR -ba -aL -xB -bq -bu -bD -bL -bP -bP -bP -bP -bP -bN -df -dk -dt -dw -dC -dE -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(54,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ah -az -aB -aO -aS -bb -bg -xB -br -bv -bE -bM -bQ -bZ -cm -cG -cT -cY -Hj -dm -du -dy -dD -dE -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(55,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aA -aa -aB -aB -aB -aB -aB -bq -bw -bF -aB -bN -ca -cn -cn -ub -bN -dg -bN -bN -bN -bN -bN -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(56,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aB -aB -aB -bk -bk -aB -bR -cb -co -qb -vb -bN -bN -bN -bN -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(57,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aB -bN -bN -bN -cJ -bN -bN -bN -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(58,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -cK -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(59,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(60,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(61,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(62,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(63,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(64,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(65,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(66,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(67,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(68,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -af -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -dG -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(69,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(70,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(71,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(72,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(73,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(74,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(75,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(76,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(77,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(78,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(79,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(80,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(81,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(82,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(83,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(84,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(85,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(86,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(87,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(88,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(89,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(90,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(91,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(92,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(93,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(94,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(95,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(96,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(97,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(98,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(99,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(100,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} diff --git a/maps/away/yacht/yacht_areas.dm b/maps/away/yacht/yacht_areas.dm deleted file mode 100644 index 92795b8720bea..0000000000000 --- a/maps/away/yacht/yacht_areas.dm +++ /dev/null @@ -1,12 +0,0 @@ -/area/yacht/bridge - name = "\improper Yacht Bridge" - icon_state = "bridge" - icon = 'yacht_icons.dmi' -/area/yacht/living - name = "\improper Yacht Living" - icon_state = "living" - icon = 'yacht_icons.dmi' -/area/yacht/engine - name = "\improper Yacht Engine" - icon_state = "engine" - icon = 'yacht_icons.dmi' \ No newline at end of file diff --git a/maps/away/yacht/yacht_icons.dmi b/maps/away/yacht/yacht_icons.dmi deleted file mode 100644 index 8b2d482007a40..0000000000000 Binary files a/maps/away/yacht/yacht_icons.dmi and /dev/null differ diff --git a/maps/away_sites_testing/away_sites_testing.dm b/maps/away_sites_testing/away_sites_testing.dm deleted file mode 100644 index 480c700f7c2ae..0000000000000 --- a/maps/away_sites_testing/away_sites_testing.dm +++ /dev/null @@ -1,31 +0,0 @@ -#if !defined(using_map_DATUM) - #include "away_sites_testing_lobby.dm" - - #include "blank.dmm" - - #include "../away/empty.dmm" - #include "../away/mining/mining.dm" - #include "../away/derelict/derelict.dm" - #include "../away/bearcat/bearcat.dm" - #include "../away/lost_supply_base/lost_supply_base.dm" - #include "../away/smugglers/smugglers.dm" - #include "../away/casino/casino.dm" - #include "../away/magshield/magshield.dm" - #include "../away/slavers/slavers_base.dm" - #include "../away/blueriver/blueriver.dm" - #include "../away/mobius_rift/mobius_rift.dm" - #include "../away/errant_pisces/errant_pisces.dm" - #include "../away/lar_maria/lar_maria.dm" - #include "../away/skrellscoutship/skrellscoutship.dm" - #include "../away/meatstation/meatstation.dm" - #include "../away/miningstation/miningstation.dm" - #include "../away/scavver/scavver_gantry.dm" - #include "../away/voxship/voxship.dm" - - #define using_map_DATUM /datum/map/away_sites_testing - -#elif !defined(MAP_OVERRIDE) - - #warn A map has already been included, ignoring Away Sites Testing - -#endif diff --git a/maps/away_sites_testing/away_sites_testing_define.dm b/maps/away_sites_testing/away_sites_testing_define.dm deleted file mode 100644 index fb5bb54f09607..0000000000000 --- a/maps/away_sites_testing/away_sites_testing_define.dm +++ /dev/null @@ -1,21 +0,0 @@ - -/datum/map/away_sites_testing - name = "Away Sites Testing" - full_name = "Away Sites Testing Land" - path = "away_sites_testing" - - station_levels = list() - contact_levels = list() - player_levels = list() - - allowed_spawns = list() - -/datum/map/away_sites_testing/build_away_sites() - var/list/unsorted_sites = list_values(SSmapping.away_sites_templates) - var/list/sorted_sites = sortTim(unsorted_sites, /proc/cmp_sort_templates_tallest_to_shortest) - for (var/datum/map_template/ruin/away_site/A in sorted_sites) - A.load_new_z() - testing("Spawning [A] in [english_list(GetConnectedZlevels(world.maxz))]") - -/proc/cmp_sort_templates_tallest_to_shortest(var/datum/map_template/a, var/datum/map_template/b) - return b.tallness - a.tallness \ No newline at end of file diff --git a/maps/away_sites_testing/away_sites_testing_lobby.dm b/maps/away_sites_testing/away_sites_testing_lobby.dm deleted file mode 100644 index c95c3307ec303..0000000000000 --- a/maps/away_sites_testing/away_sites_testing_lobby.dm +++ /dev/null @@ -1,2 +0,0 @@ -/datum/map/away_sites_testing - lobby_tracks = list(/decl/audio/track/absconditus) diff --git a/maps/away_sites_testing/blank.dmm b/maps/away_sites_testing/blank.dmm deleted file mode 100644 index 732bb3ccb3e4f..0000000000000 --- a/maps/away_sites_testing/blank.dmm +++ /dev/null @@ -1,145 +0,0 @@ -//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE -"a" = ( -/turf/space, -/area/space) -"b" = ( -/turf/simulated/wall, -/area/space) -"c" = ( -/turf/simulated/floor/tiled, -/area/space) -"d" = ( -/obj/effect/landmark/test/safe_turf, -/turf/simulated/floor/tiled, -/area/space) -"e" = ( -/obj/effect/landmark/start{ - name = "JoinLate" - }, -/turf/simulated/floor/tiled, -/area/space) -"f" = ( -/obj/effect/landmark/test/space_turf, -/turf/space, -/area/space) - -(1,1,1) = {" -a -a -a -a -a -a -a -a -a -a -"} -(2,1,1) = {" -a -a -a -a -a -a -a -a -f -a -"} -(3,1,1) = {" -a -a -a -a -a -a -a -a -a -a -"} -(4,1,1) = {" -a -a -a -a -a -a -a -a -a -a -"} -(5,1,1) = {" -b -b -b -b -b -b -a -a -a -a -"} -(6,1,1) = {" -b -c -c -c -e -b -a -a -a -a -"} -(7,1,1) = {" -b -c -d -c -c -b -a -a -a -a -"} -(8,1,1) = {" -b -c -c -c -c -b -a -a -a -a -"} -(9,1,1) = {" -b -c -c -c -c -b -a -a -a -a -"} -(10,1,1) = {" -b -b -b -b -b -b -a -a -a -a -"} diff --git a/maps/event/iccgn_ship/icgnv_hound.dm b/maps/event/iccgn_ship/icgnv_hound.dm deleted file mode 100644 index b9082e69e0183..0000000000000 --- a/maps/event/iccgn_ship/icgnv_hound.dm +++ /dev/null @@ -1,45 +0,0 @@ -#include "icgnv_hound_shuttle.dm" - -/datum/map_template/ruin/icgnv_hound - name = "ICGNV Hound" - id = "icgnv_hound" - description = "A standard ALFA-pattern, armed ICCGN transport shuttle. The transponder reads on open channels as ICCG and is broadcasting the designation 'ICGNV Hound' in Zurich Accord Common." - suffixes = list("maps/event/iccgn_ship/icgnv_hound.dmm") - shuttles_to_initialise = list(/datum/shuttle/autodock/overmap/icgnv_hound) - -/obj/effect/overmap/visitable/sector/icgnv_hound_space - name = "Sensor Anomaly" - desc = "Sensors readings are confused and inaccurate on this grid sector." - in_space = TRUE - icon_state = "event" - hide_from_reports = TRUE - -/obj/effect/overmap/visitable/ship/landable/icgnv_hound - name = "ICGNV Hound" - desc = "A standard ALFA-pattern, armed ICCGN transport shuttle. The transponder reads on open channels as ICCG and is broadcasting the designation 'ICGNV Hound' in Zurich Accord Common." - shuttle = "ICGNV Hound" - icon_state = "ship" - moving_state = "ship_moving" - fore_dir = NORTH - vessel_size = SHIP_SIZE_SMALL - vessel_mass = 1000 - known = FALSE - initial_generic_waypoints = list( - "nav_icgnv_hound_1", - "nav_icgnv_hound_2", - "nav_icgnv_hound_3", - "nav_icgnv_hound_4", - "nav_icgnv_hound_antag" - ) - -/obj/effect/shuttle_landmark/icgnv_hound/dock - name = "4th Deck, Port Airlock (ICGNV Hound)" - landmark_tag = "nav_hound_dock" - -//Areas - -/area/map_template/icgnv_hound - name = "\improper ICGNV Hound" - icon_state = "yellow" - area_flags = AREA_FLAG_RAD_SHIELDED | AREA_FLAG_ION_SHIELDED - req_access = list(access_syndicate) diff --git a/maps/event/iccgn_ship/icgnv_hound.dmm b/maps/event/iccgn_ship/icgnv_hound.dmm deleted file mode 100644 index 04747a1ac0f8a..0000000000000 --- a/maps/event/iccgn_ship/icgnv_hound.dmm +++ /dev/null @@ -1,1828 +0,0 @@ -//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE -"aa" = ( -/turf/template_noop, -/area/template_noop) -"ab" = ( -/obj/structure/table/steel_reinforced, -/obj/item/clothing/accessory/iccgn_badge/enlisted, -/obj/item/clothing/accessory/iccgn_badge/enlisted, -/obj/item/clothing/accessory/iccgn_badge/enlisted, -/obj/item/clothing/accessory/iccgn_badge/enlisted, -/obj/item/clothing/accessory/iccgn_badge/enlisted, -/obj/item/clothing/accessory/iccgn_patch/pioneer, -/obj/item/clothing/accessory/iccgn_patch/pioneer, -/obj/item/clothing/accessory/iccgn_patch/pioneer, -/obj/item/clothing/accessory/iccgn_patch/pioneer, -/obj/item/clothing/accessory/iccgn_patch/pioneer, -/obj/item/clothing/accessory/iccgn_patch/pioneer, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 4 - }, -/obj/machinery/light/small{ - dir = 8 - }, -/obj/machinery/cell_charger, -/turf/simulated/floor/tiled/dark, -/area/map_template/icgnv_hound) -"ac" = ( -/obj/machinery/porta_turret{ - req_access = list("ACCESS_SYNDICATE") - }, -/turf/simulated/floor/plating, -/area/map_template/icgnv_hound) -"ad" = ( -/obj/effect/paint/iccgn, -/turf/simulated/wall/r_titanium, -/area/map_template/icgnv_hound) -"ae" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/icgnv_hound) -"af" = ( -/turf/simulated/floor/plating, -/area/map_template/icgnv_hound) -"ag" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark, -/area/map_template/icgnv_hound) -"aj" = ( -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/map_template/icgnv_hound) -"ak" = ( -/obj/effect/paint/hull, -/turf/simulated/wall/r_titanium, -/area/map_template/icgnv_hound) -"al" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 1; - icon_state = "map-scrubbers" - }, -/turf/simulated/floor/tiled/dark, -/area/map_template/icgnv_hound) -"am" = ( -/turf/simulated/floor/tiled/dark, -/area/map_template/icgnv_hound) -"an" = ( -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/structure/stasis_cage, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/icgnv_hound) -"ao" = ( -/obj/effect/paint/red, -/turf/simulated/wall/r_titanium, -/area/map_template/icgnv_hound) -"ap" = ( -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/structure/reagent_dispensers/fueltank, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/icgnv_hound) -"aq" = ( -/obj/effect/wallframe_spawn/reinforced/polarized/full{ - color = "#4c535b" - }, -/turf/simulated/floor/tiled/dark, -/area/map_template/icgnv_hound) -"ar" = ( -/obj/structure/table/rack{ - dir = 4 - }, -/obj/item/clothing/accessory/storage/black_drop, -/obj/item/clothing/accessory/storage/black_drop, -/obj/item/clothing/accessory/storage/black_drop, -/obj/item/clothing/accessory/storage/black_vest, -/obj/item/clothing/accessory/storage/black_vest, -/obj/item/clothing/accessory/storage/black_vest, -/obj/item/clothing/gloves/iccgn/duty, -/obj/item/clothing/gloves/iccgn/duty, -/obj/item/clothing/gloves/iccgn/duty, -/obj/item/clothing/gloves/iccgn/duty, -/obj/item/clothing/gloves/iccgn/duty, -/obj/item/clothing/glasses/thermal/plain, -/obj/item/clothing/glasses/thermal/plain, -/obj/item/clothing/glasses/thermal/plain, -/obj/item/clothing/glasses/thermal/plain, -/obj/item/clothing/glasses/thermal/plain, -/obj/item/clothing/accessory/solgov/department/exploration/fleet, -/obj/item/clothing/accessory/solgov/department/exploration/fleet, -/obj/item/clothing/accessory/solgov/department/exploration/fleet, -/obj/item/clothing/accessory/solgov/department/exploration/fleet, -/obj/item/clothing/accessory/solgov/department/exploration/fleet, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/icgnv_hound) -"as" = ( -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/structure/anomaly_container, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/icgnv_hound) -"at" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/dark, -/area/map_template/icgnv_hound) -"au" = ( -/obj/effect/wallframe_spawn/reinforced/titanium, -/obj/effect/paint/iccgn, -/turf/simulated/floor/plating, -/area/map_template/icgnv_hound) -"av" = ( -/obj/structure/bed/chair/shuttle/blue{ - dir = 8; - icon_state = "shuttle_chair_preview" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/dark, -/area/map_template/icgnv_hound) -"aw" = ( -/obj/structure/table/rack{ - dir = 4 - }, -/obj/item/clothing/shoes/iccgn/utility, -/obj/item/clothing/shoes/iccgn/utility, -/obj/item/clothing/shoes/iccgn/utility, -/obj/item/clothing/shoes/iccgn/utility, -/obj/item/clothing/shoes/iccgn/utility, -/obj/item/clothing/under/iccgn/utility, -/obj/item/clothing/under/iccgn/utility, -/obj/item/clothing/under/iccgn/utility, -/obj/item/clothing/under/iccgn/utility, -/obj/item/clothing/under/iccgn/utility, -/obj/item/clothing/accessory/iccgn_rank/e3, -/obj/item/clothing/accessory/iccgn_rank/e3, -/obj/item/clothing/accessory/iccgn_rank/e6, -/obj/item/clothing/accessory/iccgn_rank/e4, -/obj/item/clothing/accessory/iccgn_rank/e4, -/obj/item/card/id/syndicate, -/obj/item/card/id/syndicate, -/obj/item/card/id/syndicate, -/obj/item/card/id/syndicate, -/obj/item/card/id/syndicate, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/icgnv_hound) -"ax" = ( -/obj/structure/closet/secure_closet/guncabinet{ - locked = 0; - req_access = list("ACCESS_SYNDICATE") - }, -/obj/item/gun/projectile/pistol/military/alt, -/obj/item/gun/projectile/pistol/military/alt, -/obj/item/gun/projectile/pistol/military/alt, -/obj/item/gun/projectile/pistol/military/alt, -/obj/item/gun/projectile/automatic/bullpup_rifle, -/obj/item/gun/projectile/automatic/bullpup_rifle, -/obj/item/gun/projectile/automatic/bullpup_rifle, -/obj/item/gun/projectile/automatic/bullpup_rifle, -/obj/item/ammo_magazine/pistol/double, -/obj/item/ammo_magazine/pistol/double, -/obj/item/ammo_magazine/pistol/double, -/obj/item/ammo_magazine/pistol/double, -/obj/item/ammo_magazine/mil_rifle, -/obj/item/ammo_magazine/mil_rifle, -/obj/item/ammo_magazine/mil_rifle, -/obj/item/ammo_magazine/mil_rifle, -/obj/item/clothing/accessory/storage/holster/thigh, -/obj/item/clothing/accessory/storage/holster/thigh, -/obj/item/clothing/accessory/storage/holster/thigh, -/obj/item/clothing/accessory/storage/holster/thigh, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/icgnv_hound) -"az" = ( -/obj/machinery/shipsensors, -/turf/simulated/floor/plating, -/area/map_template/icgnv_hound) -"aC" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/dark, -/area/map_template/icgnv_hound) -"aD" = ( -/obj/machinery/computer/ship/helm{ - req_access = list(list("ACCESS_SYNDICATE")) - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled/dark/monotile, -/area/map_template/icgnv_hound) -"aE" = ( -/obj/machinery/light/small{ - dir = 4; - pixel_y = 8 - }, -/obj/structure/catwalk, -/obj/machinery/porta_turret{ - req_access = list("ACCESS_SYNDICATE") - }, -/turf/simulated/floor/plating, -/area/map_template/icgnv_hound) -"aF" = ( -/obj/effect/floor_decal/corner_techfloor_grid, -/obj/effect/floor_decal/techfloor/corner, -/turf/simulated/floor/tiled/dark, -/area/map_template/icgnv_hound) -"aG" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 - }, -/turf/simulated/floor/tiled/dark, -/area/map_template/icgnv_hound) -"aH" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/dark, -/area/map_template/icgnv_hound) -"aI" = ( -/obj/structure/closet/toolcloset, -/turf/simulated/floor/tiled/dark, -/area/map_template/icgnv_hound) -"aJ" = ( -/obj/machinery/computer/shuttle_control/explore/icgnv_hound_shuttle, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/turf/simulated/floor/tiled/dark/monotile, -/area/map_template/icgnv_hound) -"aK" = ( -/obj/machinery/computer/ship/sensors/spacer, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/atmospherics/unary/vent_pump/on, -/turf/simulated/floor/tiled/dark/monotile, -/area/map_template/icgnv_hound) -"aL" = ( -/obj/machinery/light/small{ - dir = 4; - icon_state = "bulb1" - }, -/obj/machinery/button/blast_door{ - id_tag = "1983"; - identifier = "1983"; - name = "access shutters control"; - pixel_x = 25; - pixel_y = 0 - }, -/obj/item/clothing/accessory/iccgn_badge/officer, -/obj/item/clothing/gloves/iccgn/duty, -/obj/item/clothing/accessory/iccgn_rank/o1, -/obj/item/clothing/accessory/iccgn_patch/pioneer, -/obj/item/device/personal_shield, -/obj/item/clothing/glasses/thermal/plain, -/obj/item/card/id/syndicate, -/obj/item/clothing/shoes/iccgn/service, -/obj/item/clothing/suit/iccgn/service_command, -/obj/item/clothing/under/iccgn/service_command, -/obj/item/clothing/head/iccgn/service_command, -/obj/item/clothing/accessory/solgov/department/exploration/fleet, -/obj/structure/table/steel_reinforced, -/turf/simulated/floor/tiled/dark, -/area/map_template/icgnv_hound) -"aM" = ( -/obj/effect/wallframe_spawn/reinforced/polarized/full{ - color = "#4c535b" - }, -/obj/machinery/door/blast/regular/open{ - density = 0; - dir = 4; - icon_state = "pdoor0"; - id_tag = "charon_shutters"; - name = "Protective Shutters"; - opacity = 0 - }, -/turf/simulated/floor/plating, -/area/map_template/icgnv_hound) -"aN" = ( -/obj/effect/paint/iccgn, -/obj/structure/sign/warning/docking_area, -/turf/simulated/wall/r_titanium, -/area/map_template/icgnv_hound) -"aO" = ( -/obj/machinery/door/airlock, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/icgnv_hound) -"aP" = ( -/obj/effect/floor_decal/corner_techfloor_grid{ - dir = 8 - }, -/obj/effect/floor_decal/techfloor/corner{ - dir = 8; - icon_state = "techfloor_corners" - }, -/turf/simulated/floor/tiled/dark, -/area/map_template/icgnv_hound) -"aQ" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/turf/simulated/floor/tiled/dark, -/area/map_template/icgnv_hound) -"aR" = ( -/obj/structure/table/steel_reinforced, -/obj/item/storage/firstaid/surgery, -/turf/simulated/floor/tiled/white, -/area/map_template/icgnv_hound) -"aS" = ( -/obj/effect/paint/iccgn, -/obj/structure/sign/warning/caution, -/turf/simulated/wall/r_titanium, -/area/map_template/icgnv_hound) -"aT" = ( -/obj/effect/floor_decal/techfloor{ - dir = 1; - icon_state = "techfloor_edges" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/dark, -/area/map_template/icgnv_hound) -"aU" = ( -/obj/effect/floor_decal/techfloor{ - dir = 4; - icon_state = "techfloor_edges" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark, -/area/map_template/icgnv_hound) -"aV" = ( -/obj/effect/floor_decal/techfloor{ - dir = 8; - icon_state = "techfloor_edges" - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 8; - icon_state = "warning" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 8 - }, -/turf/simulated/floor/tiled/dark, -/area/map_template/icgnv_hound) -"aW" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/bed/chair/shuttle/blue{ - dir = 1; - icon_state = "shuttle_chair_preview" - }, -/turf/simulated/floor/tiled/dark, -/area/map_template/icgnv_hound) -"aX" = ( -/obj/effect/paint/iccgn, -/obj/machinery/recharger/wallcharger, -/turf/simulated/wall/r_titanium, -/area/map_template/icgnv_hound) -"aY" = ( -/obj/structure/handrail{ - dir = 8; - icon_state = "handrail" - }, -/obj/machinery/light/small{ - dir = 1 - }, -/obj/machinery/button/blast_door{ - id_tag = "1984"; - identifier = "1984"; - name = "access shutters control"; - pixel_y = 25 - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/portable_atmospherics/canister/oxygen, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - icon_state = "map_scrubber_on"; - dir = 8 - }, -/turf/simulated/floor/tiled/dark, -/area/map_template/icgnv_hound) -"aZ" = ( -/obj/machinery/portable_atmospherics/powered/scrubber/huge, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/icgnv_hound) -"ba" = ( -/obj/effect/floor_decal/techfloor{ - dir = 4; - icon_state = "techfloor_edges" - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 4; - icon_state = "warning" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark, -/area/map_template/icgnv_hound) -"bb" = ( -/obj/structure/handrail{ - dir = 4; - icon_state = "handrail" - }, -/obj/machinery/light/small{ - dir = 1 - }, -/obj/machinery/button/blast_door{ - id_tag = "1983"; - identifier = "1983"; - name = "access shutters control"; - pixel_y = 25 - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark, -/area/map_template/icgnv_hound) -"bc" = ( -/obj/machinery/sleeper{ - dir = 4 - }, -/turf/simulated/floor/tiled/white/monotile, -/area/map_template/icgnv_hound) -"bd" = ( -/obj/effect/floor_decal/techfloor{ - dir = 8; - icon_state = "techfloor_edges" - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 8; - icon_state = "warning" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/dark, -/area/map_template/icgnv_hound) -"be" = ( -/obj/machinery/alarm{ - pixel_y = 24; - req_access = list("ACCESS_SYNDICATE") - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/icgnv_hound) -"bf" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark, -/area/map_template/icgnv_hound) -"bg" = ( -/obj/machinery/portable_atmospherics/powered/pump/filled, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/icgnv_hound) -"bh" = ( -/obj/effect/floor_decal/techfloor, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/dark, -/area/map_template/icgnv_hound) -"bi" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 2; - icon_state = "warning" - }, -/obj/machinery/access_button/airlock_interior{ - frequency = 1380; - master_tag = "icgnv_hound_shuttle"; - pixel_x = -24; - pixel_y = -24 - }, -/obj/machinery/atmospherics/pipe/simple/hidden, -/turf/simulated/floor/tiled/dark, -/area/map_template/icgnv_hound) -"bj" = ( -/obj/effect/floor_decal/techfloor{ - dir = 8; - icon_state = "techfloor_edges" - }, -/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{ - dir = 8; - id_tag = "icgnv_hound_shuttle_pump" - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/icgnv_hound) -"bk" = ( -/turf/simulated/floor/tiled/white, -/area/map_template/icgnv_hound) -"bl" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/obj/structure/closet/walllocker{ - pixel_y = 32 - }, -/obj/item/clothing/head/iccgn/service, -/obj/item/clothing/head/iccgn/service, -/obj/item/clothing/head/iccgn/service, -/obj/item/clothing/head/iccgn/service, -/obj/item/clothing/head/iccgn/service, -/obj/item/clothing/shoes/iccgn/service, -/obj/item/clothing/shoes/iccgn/service, -/obj/item/clothing/shoes/iccgn/service, -/obj/item/clothing/shoes/iccgn/service, -/obj/item/clothing/shoes/iccgn/service, -/obj/item/clothing/suit/iccgn/service_enlisted, -/obj/item/clothing/suit/iccgn/service_enlisted, -/obj/item/clothing/suit/iccgn/service_enlisted, -/obj/item/clothing/suit/iccgn/service_enlisted, -/obj/item/clothing/suit/iccgn/service_enlisted, -/obj/item/clothing/under/iccgn/service, -/obj/item/clothing/under/iccgn/service, -/obj/item/clothing/under/iccgn/service, -/obj/item/clothing/under/iccgn/service, -/obj/item/clothing/under/iccgn/service, -/turf/simulated/floor/tiled/dark, -/area/map_template/icgnv_hound) -"bm" = ( -/obj/machinery/turretid/lethal{ - ailock = 1; - check_arrest = 0; - check_records = 0; - enabled = 0; - pixel_x = -4; - pixel_y = 28; - req_access = list("ACCESS_SYNDICATE") - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/icgnv_hound) -"bn" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/tiled/white, -/area/map_template/icgnv_hound) -"bo" = ( -/obj/machinery/door/airlock/external{ - frequency = 1380; - id_tag = "icgnv_hound_shuttle_inner" - }, -/obj/machinery/atmospherics/pipe/simple/hidden, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/icgnv_hound) -"bp" = ( -/obj/effect/floor_decal/techfloor{ - dir = 4; - icon_state = "techfloor_edges" - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 4; - icon_state = "warning" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/dark, -/area/map_template/icgnv_hound) -"bq" = ( -/obj/effect/floor_decal/techfloor{ - dir = 8; - icon_state = "techfloor_edges" - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 8; - icon_state = "warning" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 8 - }, -/turf/simulated/floor/tiled/dark, -/area/map_template/icgnv_hound) -"br" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark, -/area/map_template/icgnv_hound) -"bs" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/icgnv_hound) -"bt" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/bed/chair/shuttle/blue{ - dir = 4; - icon_state = "shuttle_chair_preview" - }, -/turf/simulated/floor/tiled/dark, -/area/map_template/icgnv_hound) -"bu" = ( -/obj/machinery/light/small, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/icgnv_hound) -"bv" = ( -/obj/machinery/hologram/holopad/longrange, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply, -/obj/effect/overmap/visitable/ship/landable/icgnv_hound, -/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/icgnv_hound) -"bw" = ( -/obj/machinery/light/small{ - dir = 1 - }, -/turf/simulated/floor/tiled/dark, -/area/map_template/icgnv_hound) -"bx" = ( -/obj/effect/paint/sun, -/turf/simulated/wall/r_titanium, -/area/map_template/icgnv_hound) -"by" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 4; - icon_state = "stripe" - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 8 - }, -/obj/structure/cable{ - icon_state = "4-8"; - dir = 8; - d1 = 4; - d2 = 8 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/icgnv_hound) -"bz" = ( -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/portable_atmospherics/canister/empty, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/icgnv_hound) -"bA" = ( -/obj/effect/floor_decal/techfloor{ - dir = 4; - icon_state = "techfloor_edges" - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 4; - icon_state = "warning" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark, -/area/map_template/icgnv_hound) -"bB" = ( -/obj/effect/floor_decal/techfloor{ - dir = 8; - icon_state = "techfloor_edges" - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 8; - icon_state = "warning" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/dark, -/area/map_template/icgnv_hound) -"bC" = ( -/obj/structure/handrail{ - dir = 8; - icon_state = "handrail" - }, -/obj/machinery/light/small, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 8 - }, -/turf/simulated/floor/tiled/dark, -/area/map_template/icgnv_hound) -"bD" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 8 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/icgnv_hound) -"bE" = ( -/obj/machinery/ion_engine{ - dir = 1 - }, -/turf/simulated/floor/plating, -/area/map_template/icgnv_hound) -"bF" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/dark, -/area/map_template/icgnv_hound) -"bG" = ( -/obj/machinery/computer/ship/engines{ - dir = 4; - icon_state = "computer" - }, -/turf/simulated/floor/tiled/dark, -/area/map_template/icgnv_hound) -"bH" = ( -/obj/structure/handrail{ - dir = 4; - icon_state = "handrail" - }, -/obj/machinery/light/small, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/atmospherics/unary/vent_pump/on{ - icon_state = "map_vent_out"; - dir = 4 - }, -/turf/simulated/floor/tiled/dark, -/area/map_template/icgnv_hound) -"bI" = ( -/obj/effect/floor_decal/techfloor{ - dir = 4; - icon_state = "techfloor_edges" - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 4; - icon_state = "warning" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/dark, -/area/map_template/icgnv_hound) -"bJ" = ( -/obj/effect/paint/iccgn, -/obj/structure/sign/warning/detailed, -/turf/simulated/wall/r_titanium, -/area/map_template/icgnv_hound) -"bK" = ( -/obj/machinery/computer/ship/navigation/telescreen{ - pixel_x = -32 - }, -/obj/machinery/atmospherics/unary/vent_pump/on{ - icon_state = "map_vent_out"; - dir = 1 - }, -/obj/structure/bed/chair/shuttle/blue{ - dir = 4; - icon_state = "shuttle_chair_preview" - }, -/turf/simulated/floor/tiled/dark, -/area/map_template/icgnv_hound) -"bL" = ( -/obj/machinery/computer/ship/navigation/telescreen{ - pixel_x = 32 - }, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - icon_state = "map_scrubber_on"; - dir = 1 - }, -/obj/structure/bed/chair/shuttle/blue{ - dir = 8; - icon_state = "shuttle_chair_preview" - }, -/turf/simulated/floor/tiled/dark, -/area/map_template/icgnv_hound) -"bM" = ( -/obj/effect/paint/iccgn, -/obj/structure/sign/bluecross_2, -/turf/simulated/wall/r_titanium, -/area/map_template/icgnv_hound) -"bN" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 4; - icon_state = "stripe" - }, -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 8 - }, -/obj/machinery/light/small{ - dir = 8 - }, -/obj/structure/cable{ - icon_state = "0-1"; - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/power/apc/debug/iccgn{ - dir = 8; - icon_state = "apc0"; - pixel_x = -25 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/icgnv_hound) -"bO" = ( -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/recharge_station, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/icgnv_hound) -"bP" = ( -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/mech_recharger, -/obj/item/mech_equipment/light, -/obj/item/mech_equipment/shields, -/obj/item/mech_equipment/ionjets, -/obj/item/mech_equipment/ballistic_shield, -/obj/item/mech_equipment/clamp, -/obj/item/mech_equipment/drill/diamond, -/obj/item/circuitboard/exosystem/weapons, -/obj/item/circuitboard/exosystem/utility, -/mob/living/exosuit/premade/combat/military/alpine, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/icgnv_hound) -"bQ" = ( -/obj/machinery/light/small{ - dir = 4; - pixel_y = 8 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/organ_printer/flesh/mapped{ - pixel_x = 32; - density = 0 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/icgnv_hound) -"bR" = ( -/obj/machinery/light/small{ - dir = 8 - }, -/obj/structure/catwalk, -/obj/machinery/porta_turret{ - req_access = list("ACCESS_SYNDICATE") - }, -/turf/simulated/floor/plating, -/area/map_template/icgnv_hound) -"bS" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 4; - icon_state = "stripe" - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 8 - }, -/obj/structure/cable{ - icon_state = "4-8"; - dir = 8; - d1 = 4; - d2 = 8 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 8 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/icgnv_hound) -"bT" = ( -/obj/effect/floor_decal/industrial/warning/corner{ - icon_state = "warningcorner"; - dir = 2 - }, -/obj/machinery/light/small, -/obj/machinery/atmospherics/portables_connector, -/obj/machinery/portable_atmospherics/canister/air/airlock{ - start_pressure = 1900 - }, -/turf/simulated/floor/tiled/dark, -/area/map_template/icgnv_hound) -"bU" = ( -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 8; - icon_state = "warningcorner" - }, -/obj/machinery/light/small, -/obj/machinery/fabricator/hacked, -/obj/item/stack/material/aluminium/ten, -/obj/item/stack/material/glass/ten, -/obj/item/stack/material/plastic/ten, -/obj/item/stack/material/steel/ten, -/turf/simulated/floor/tiled/dark, -/area/map_template/icgnv_hound) -"bV" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/white, -/area/map_template/icgnv_hound) -"bW" = ( -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/universal, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/icgnv_hound) -"bX" = ( -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 8 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/icgnv_hound) -"bY" = ( -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/icgnv_hound) -"bZ" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark, -/area/map_template/icgnv_hound) -"ca" = ( -/obj/machinery/bodyscanner{ - dir = 4 - }, -/obj/machinery/atmospherics/unary/vent_pump/on{ - icon_state = "map_vent_out"; - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/icgnv_hound) -"cb" = ( -/obj/machinery/body_scanconsole{ - icon_state = "body_scannerconsole"; - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/icgnv_hound) -"cc" = ( -/obj/effect/floor_decal/industrial/warning, -/obj/effect/floor_decal/industrial/warning{ - dir = 1 - }, -/obj/machinery/light/small{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/cyan, -/obj/structure/cable{ - icon_state = "0-1"; - dir = 8; - d1 = 4; - d2 = 8 - }, -/obj/machinery/power/port_gen/pacman, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/icgnv_hound) -"cd" = ( -/obj/effect/floor_decal/industrial/outline/blue, -/obj/machinery/atmospherics/unary/tank/air{ - dir = 1 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/icgnv_hound) -"cf" = ( -/obj/effect/floor_decal/corner_techfloor_grid{ - dir = 1 - }, -/obj/effect/floor_decal/techfloor/corner{ - dir = 1 - }, -/turf/simulated/floor/tiled/dark, -/area/map_template/icgnv_hound) -"cg" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 8 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/icgnv_hound) -"ch" = ( -/turf/simulated/floor/tiled/techfloor, -/area/map_template/icgnv_hound) -"ck" = ( -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/structure/closet/crate/medical, -/obj/item/stack/nanopaste, -/obj/item/storage/firstaid/adv, -/obj/item/storage/firstaid/combat, -/obj/item/storage/firstaid/fire, -/obj/item/storage/firstaid/o2, -/obj/item/storage/firstaid/regular, -/obj/item/storage/firstaid/stab, -/obj/item/storage/firstaid/toxin, -/obj/item/storage/firstaid/trauma, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - icon_state = "map_scrubber_on"; - dir = 8 - }, -/obj/item/storage/box/beakers, -/obj/machinery/light/small{ - dir = 4; - icon_state = "bulb1" - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/icgnv_hound) -"cl" = ( -/obj/effect/floor_decal/techfloor, -/obj/effect/shuttle_landmark/icgnv_hound/start, -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 5; - icon_state = "intact" - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/icgnv_hound) -"cm" = ( -/obj/effect/paint/sun, -/obj/structure/sign/warning/hot_exhaust, -/turf/simulated/wall/r_titanium, -/area/map_template/icgnv_hound) -"cn" = ( -/obj/machinery/acting/changer{ - pixel_x = -32; - density = 0 - }, -/obj/machinery/light/small, -/turf/simulated/floor/tiled/white, -/area/map_template/icgnv_hound) -"cp" = ( -/obj/effect/floor_decal/industrial/warning, -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 4 - }, -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 1; - icon_state = "stripecorner" - }, -/obj/structure/cable{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 4; - icon_state = "stripe" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/icgnv_hound) -"cq" = ( -/obj/structure/table/steel_reinforced, -/obj/item/roller, -/obj/item/bodybag/cryobag, -/obj/structure/closet/medical_wall/filled{ - pixel_x = -32 - }, -/obj/item/auto_cpr, -/obj/item/defibrillator/compact/loaded, -/obj/item/clothing/gloves/latex, -/obj/item/clothing/mask/surgical, -/obj/item/reagent_containers/ivbag/nanoblood, -/obj/item/reagent_containers/spray/sterilizine, -/obj/item/reagent_containers/spray/cleaner, -/turf/simulated/floor/tiled/white/monotile, -/area/map_template/icgnv_hound) -"cr" = ( -/obj/structure/table/steel_reinforced, -/obj/item/device/scanner/health, -/obj/item/clothing/glasses/hud/health/goggle, -/turf/simulated/floor/tiled/white/monotile, -/area/map_template/icgnv_hound) -"cF" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - icon_state = "map_scrubber_on"; - dir = 8 - }, -/obj/machinery/vitals_monitor, -/turf/simulated/floor/tiled/white/monotile, -/area/map_template/icgnv_hound) -"mz" = ( -/obj/effect/floor_decal/techfloor{ - dir = 4; - icon_state = "techfloor_edges" - }, -/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{ - id_tag = "icgnv_hound_shuttle_pump_out_internal"; - dir = 8 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/icgnv_hound) -"pR" = ( -/obj/effect/paint/red, -/obj/machinery/atmospherics/pipe/simple/hidden/universal{ - dir = 4 - }, -/turf/simulated/wall/r_titanium, -/area/map_template/icgnv_hound) -"qz" = ( -/obj/machinery/door/airlock/external{ - frequency = 1380; - id_tag = "icgnv_hound_shuttle_outer" - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/icgnv_hound) -"sR" = ( -/obj/machinery/atmospherics/pipe/simple/hidden, -/turf/simulated/floor/tiled/dark, -/area/map_template/icgnv_hound) -"ug" = ( -/obj/effect/floor_decal/corner_techfloor_grid{ - dir = 4 - }, -/obj/effect/floor_decal/techfloor/corner{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark, -/area/map_template/icgnv_hound) -"uB" = ( -/obj/effect/floor_decal/corner_techfloor_grid, -/obj/effect/floor_decal/techfloor{ - dir = 8; - icon_state = "techfloor_edges" - }, -/obj/effect/floor_decal/techfloor/corner, -/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{ - dir = 8; - id_tag = "icgnv_hound_shuttle_pump" - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/icgnv_hound) -"we" = ( -/obj/effect/floor_decal/industrial/warning, -/obj/machinery/atmospherics/pipe/simple/hidden/cyan, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/icgnv_hound) -"wf" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - icon_state = "map_vent_in"; - dir = 4; - pump_direction = 0 - }, -/turf/simulated/floor/plating, -/area/map_template/icgnv_hound) -"wV" = ( -/obj/effect/wallframe_spawn/reinforced/polarized/full{ - color = "#4c535b" - }, -/obj/machinery/door/blast/regular/open{ - density = 0; - icon_state = "pdoor0"; - id_tag = "charon_shutters"; - name = "Protective Shutters"; - opacity = 0 - }, -/turf/simulated/floor/plating, -/area/map_template/icgnv_hound) -"ze" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/bed/chair/shuttle/blue{ - dir = 1; - icon_state = "shuttle_chair_preview" - }, -/turf/simulated/floor/tiled/dark, -/area/map_template/icgnv_hound) -"Bf" = ( -/obj/effect/paint/iccgn, -/obj/structure/sign/warning/airlock{ - icon_state = "doors"; - dir = 4 - }, -/turf/simulated/wall/r_titanium, -/area/map_template/icgnv_hound) -"Bl" = ( -/obj/effect/paint/iccgn, -/obj/structure/sign/warning/docking_area, -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 5; - icon_state = "intact" - }, -/turf/simulated/wall/r_titanium, -/area/map_template/icgnv_hound) -"CK" = ( -/obj/effect/floor_decal/corner_techfloor_grid{ - dir = 8 - }, -/obj/effect/floor_decal/techfloor{ - dir = 4; - icon_state = "techfloor_edges" - }, -/obj/effect/floor_decal/techfloor/corner{ - dir = 8; - icon_state = "techfloor_corners" - }, -/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{ - id_tag = "icgnv_hound_shuttle_pump_out_internal"; - dir = 8 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/icgnv_hound) -"Eo" = ( -/obj/machinery/light/small{ - dir = 4; - pixel_y = 8 - }, -/obj/machinery/optable, -/turf/simulated/floor/tiled/white/monotile, -/area/map_template/icgnv_hound) -"Ih" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/effect/floor_decal/techfloor{ - dir = 8; - icon_state = "techfloor_edges" - }, -/turf/simulated/floor/tiled/dark, -/area/map_template/icgnv_hound) -"IR" = ( -/obj/structure/table/steel_reinforced, -/obj/item/storage/box/ammo/explo_shells, -/obj/machinery/atmospherics/unary/vent_pump/on{ - icon_state = "map_vent_out"; - dir = 4 - }, -/obj/item/gun/projectile/shotgun/pump, -/obj/machinery/light/small{ - dir = 8 - }, -/obj/machinery/cell_charger, -/turf/simulated/floor/tiled/dark, -/area/map_template/icgnv_hound) -"Lo" = ( -/obj/machinery/embedded_controller/radio/airlock/airlock_controller{ - cycle_to_external_air = 1; - dir = 4; - frequency = 1380; - id_tag = "icgnv_hound_shuttle"; - pixel_x = -25; - pixel_y = 0; - req_access = list("ACCESS_SYNDICATE"); - tag_airpump = "icgnv_hound_shuttle_pump"; - tag_exterior_door = "icgnv_hound_shuttle_outer"; - tag_exterior_sensor = "icgnv_hound_shuttle_exterior"; - tag_interior_door = "icgnv_hound_shuttle_inner"; - tag_interior_sensor = "icgnv_hound_shuttle_sensor" - }, -/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{ - dir = 8; - id_tag = "icgnv_hound_shuttle_pump" - }, -/obj/effect/floor_decal/techfloor{ - dir = 8; - icon_state = "techfloor_edges" - }, -/obj/effect/floor_decal/corner_techfloor_grid{ - dir = 4 - }, -/obj/effect/floor_decal/techfloor/corner{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/icgnv_hound) -"NJ" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/universal, -/turf/simulated/floor/tiled/dark, -/area/map_template/icgnv_hound) -"OD" = ( -/obj/structure/table/steel_reinforced, -/obj/machinery/button/blast_door{ - id_tag = "charon_shutters"; - name = "Protective Shutters Control"; - pixel_y = 25 - }, -/turf/simulated/floor/tiled/dark, -/area/map_template/icgnv_hound) -"PD" = ( -/obj/machinery/light/small{ - dir = 4; - pixel_y = 8 - }, -/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{ - id_tag = "icgnv_hound_shuttle_pump_out_internal"; - dir = 8 - }, -/obj/effect/floor_decal/techfloor{ - dir = 4; - icon_state = "techfloor_edges" - }, -/obj/machinery/airlock_sensor{ - pixel_y = 24; - id_tag = "icgnv_hound_shuttle_sensor"; - frequency = 1380 - }, -/obj/effect/floor_decal/corner_techfloor_grid{ - dir = 1 - }, -/obj/effect/floor_decal/techfloor/corner{ - dir = 1 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/icgnv_hound) -"Qc" = ( -/obj/effect/landmark/map_data, -/obj/effect/overmap/visitable/sector/icgnv_hound_space, -/turf/template_noop, -/area/template_noop) -"QT" = ( -/obj/structure/table/steel_reinforced, -/obj/item/clothing/suit/space/void/pilot/prepared, -/obj/item/tank/jetpack/void, -/obj/item/tank/jetpack/void, -/obj/item/tank/jetpack/void, -/obj/item/tank/jetpack/void, -/obj/item/tank/jetpack/void, -/obj/item/tank/jetpack/void, -/obj/item/rig/combat/equipped, -/turf/simulated/floor/tiled/dark, -/area/map_template/icgnv_hound) -"QU" = ( -/obj/effect/floor_decal/techfloor{ - dir = 1; - icon_state = "techfloor_edges" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden{ - icon_state = "map"; - dir = 8 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/icgnv_hound) -"QY" = ( -/obj/effect/paint/iccgn, -/obj/structure/sign/warning/airlock{ - icon_state = "doors"; - dir = 8 - }, -/turf/simulated/wall/r_titanium, -/area/map_template/icgnv_hound) -"Ti" = ( -/obj/effect/paint/iccgn, -/obj/machinery/atmospherics/pipe/simple/hidden, -/turf/simulated/wall/r_titanium, -/area/map_template/icgnv_hound) -"TB" = ( -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/structure/reagent_dispensers/watertank, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 8 - }, -/obj/item/extinguisher, -/obj/item/extinguisher, -/obj/item/extinguisher, -/obj/item/extinguisher, -/obj/machinery/light/small{ - dir = 4; - icon_state = "bulb1" - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/icgnv_hound) -"Uy" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/turf/simulated/floor/tiled/dark, -/area/map_template/icgnv_hound) -"UU" = ( -/obj/machinery/access_button/airlock_exterior{ - frequency = 1380; - master_tag = "icgnv_hound_shuttle"; - pixel_x = 8; - pixel_y = 24 - }, -/turf/template_noop, -/area/template_noop) -"Vp" = ( -/obj/machinery/light/small{ - dir = 8 - }, -/obj/machinery/button/blast_door{ - id_tag = "1984"; - identifier = "1984"; - name = "access shutters control"; - pixel_x = -25; - pixel_y = 0 - }, -/obj/item/clothing/accessory/iccgn_badge/officer, -/obj/item/clothing/gloves/iccgn/duty, -/obj/item/clothing/accessory/iccgn_rank/o1, -/obj/item/clothing/accessory/iccgn_patch/pioneer, -/obj/item/device/personal_shield, -/obj/item/clothing/glasses/thermal/plain, -/obj/item/card/id/syndicate, -/obj/item/clothing/shoes/iccgn/service, -/obj/item/clothing/suit/iccgn/service_command, -/obj/item/clothing/under/iccgn/service_command, -/obj/item/clothing/head/iccgn/service_command, -/obj/structure/table/steel_reinforced, -/turf/simulated/floor/tiled/dark, -/area/map_template/icgnv_hound) -"Vw" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden{ - icon_state = "map"; - dir = 8 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/icgnv_hound) -"VJ" = ( -/obj/structure/closet/walllocker/emerglocker/west, -/turf/simulated/floor/tiled/dark, -/area/map_template/icgnv_hound) -"VN" = ( -/obj/effect/paint/iccgn, -/obj/machinery/atmospherics/pipe/manifold/hidden{ - icon_state = "map"; - dir = 8 - }, -/turf/simulated/wall/r_titanium, -/area/map_template/icgnv_hound) -"Wk" = ( -/obj/structure/closet/walllocker/emerglocker/east, -/turf/simulated/floor/tiled/dark, -/area/map_template/icgnv_hound) -"Zi" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, -/turf/simulated/floor/tiled/dark, -/area/map_template/icgnv_hound) - -(1,1,1) = {" -aa -ad -ad -ak -ao -ad -ad -ad -aE -aj -aj -aj -aj -aE -ad -ad -ad -ad -ad -bx -cm -aa -"} -(2,1,1) = {" -aa -ad -ab -ar -aw -ax -IR -ad -aN -ad -aM -aM -ad -aN -ad -bz -bW -cc -we -cd -bx -bE -"} -(3,1,1) = {" -aa -ad -bl -at -at -at -aC -aH -aO -aV -bd -bq -bB -aO -bN -by -bS -cp -bX -bD -bx -bE -"} -(4,1,1) = {" -ac -ad -am -am -am -am -Wk -QT -ad -aY -am -br -bC -bJ -aZ -bg -cg -ch -bu -bx -cm -aa -"} -(5,1,1) = {" -aS -ad -ad -ak -ao -ad -ad -ad -ad -ad -be -bs -Bf -ad -au -au -ad -bY -bY -ad -ac -aa -"} -(6,1,1) = {" -aa -af -aj -aj -az -ad -ad -bG -Vp -aX -bw -bf -bt -bK -bO -bT -Ti -VN -VN -Bl -ad -aa -"} -(7,1,1) = {" -aa -aa -aa -aa -aa -wV -aJ -ze -Uy -aq -aF -aU -ug -am -am -am -ad -Lo -bj -uB -ad -UU -"} -(8,1,1) = {" -Qc -aa -aa -aa -aa -wV -aD -am -aQ -aO -bh -bv -aT -NJ -sR -bi -bo -QU -Vw -cl -qz -aa -"} -(9,1,1) = {" -aa -aa -aa -aa -aa -wV -aK -aW -aG -aq -aP -Ih -cf -am -am -am -ad -PD -mz -CK -ad -aa -"} -(10,1,1) = {" -aa -af -aj -aj -wf -ad -ad -OD -aL -aX -bw -al -av -bL -bP -bU -ad -ad -ad -aN -ad -aa -"} -(11,1,1) = {" -aS -ad -ad -ak -pR -ad -ad -ad -ad -ad -bm -bs -QY -ad -au -au -ad -ca -cn -ad -ac -aa -"} -(12,1,1) = {" -ac -ad -am -am -ag -VJ -am -aI -ad -bb -am -br -bH -bM -bc -bk -bk -cb -bk -bx -cm -aa -"} -(13,1,1) = {" -aa -ad -Zi -at -bZ -at -bF -aH -aO -ba -bp -bA -bI -aO -bQ -bV -bn -ae -bk -cq -bx -bE -"} -(14,1,1) = {" -aa -ad -ck -an -ap -as -TB -ad -aN -ad -aM -aM -ad -aN -ad -bk -cF -Eo -aR -cr -bx -bE -"} -(15,1,1) = {" -aa -ad -ad -ak -ao -ad -ad -ad -bR -aj -aj -aj -aj -bR -ad -ad -ad -ad -ad -bx -cm -aa -"} diff --git a/maps/event/iccgn_ship/icgnv_hound_shuttle.dm b/maps/event/iccgn_ship/icgnv_hound_shuttle.dm deleted file mode 100644 index 3a7b87840ca37..0000000000000 --- a/maps/event/iccgn_ship/icgnv_hound_shuttle.dm +++ /dev/null @@ -1,52 +0,0 @@ -/datum/shuttle/autodock/overmap/icgnv_hound - name = "ICGNV Hound" - warmup_time = 5 - shuttle_area = list(/area/map_template/icgnv_hound) - current_location = "nav_icgnv_hound_start" - range = 1 - fuel_consumption = 0 - ceiling_type = /turf/simulated/floor/shuttle_ceiling - flags = SHUTTLE_FLAGS_PROCESS - defer_initialisation = TRUE - knockdown = FALSE - -/turf/simulated/floor/shuttle_ceiling/iccgn - color = COLOR_DARK_GUNMETAL - -/obj/effect/paint/iccgn - color = COLOR_DARK_GUNMETAL - -/obj/effect/shuttle_landmark/icgnv_hound/start - landmark_tag = "nav_icgnv_hound_start" - name = "Start Point" - -/obj/effect/shuttle_landmark/icgnv_hound/nav1 - landmark_tag = "nav_icgnv_hound_1" - -/obj/effect/shuttle_landmark/icgnv_hound/nav2 - landmark_tag = "nav_icgnv_hound_2" - -/obj/effect/shuttle_landmark/icgnv_hound/nav3 - landmark_tag = "nav_icgnv_hound_3" - -/obj/effect/shuttle_landmark/icgnv_hound/nav4 - landmark_tag = "nav_icgnv_hound_4" - -/obj/effect/shuttle_landmark/icgnv_hound/dock //gotta actually make a proper docking point at the torch i think - name = "4th Deck, Fore Airlock" - landmark_tag = "nav_icgnv_hound_dock" - -/obj/effect/shuttle_landmark/transit/iccgn - name = "In transit" - landmark_tag = "nav_transit_iccgn" - - -//Machinery -/obj/machinery/computer/shuttle_control/explore/icgnv_hound_shuttle - name = "ICGNV Hound Control Console" - req_access = list(access_syndicate) - shuttle_tag = "ICGNV Hound" - -/obj/machinery/power/apc/debug/iccgn - cell_type = /obj/item/cell/infinite - req_access = list(access_syndicate) diff --git a/maps/event/placeholders/gcn-64.dmi b/maps/event/placeholders/gcn-64.dmi deleted file mode 100644 index 26fac24e68f4d..0000000000000 Binary files a/maps/event/placeholders/gcn-64.dmi and /dev/null differ diff --git a/maps/event/placeholders/placeholders.dm b/maps/event/placeholders/placeholders.dm deleted file mode 100644 index 053591e9595e1..0000000000000 --- a/maps/event/placeholders/placeholders.dm +++ /dev/null @@ -1,268 +0,0 @@ -/datum/build_mode/placeholders - name = "Placeholder Control" - icon_state = "mode_ships" - var/obj/effect/overmap/placeholder/selected - -/datum/build_mode/placeholders/Help() - to_chat(user, {" -__Placeholder Control__ -Left-Click - Select / Deselect a placeholder -Right-Click Mode Icon - Set placeholder name / color / light -Right-Click - Rotate a placeholder toward the point -Middle-Click / Ctrl-Click - Jump a placeholder to a point and deselect it -"}) - -/datum/build_mode/placeholders/Destroy() - Unselected() - return ..() - -/datum/build_mode/placeholders/Unselected() - selected = null - -/datum/build_mode/placeholders/Configurate() - if (!selected) - return - var/option = alert(user, "Pick name and hit Cancel if you didn't want this.", "Placeholder Options", "Name", "Color", "Sensor") - if (!option) - return - else if (option == "Name") - option = input(user, "Placeholder Name", null, selected.name) as null | text - if (isnull(option)) - return - if (!option) - selected.name = initial(selected.name) - selected.desc = initial(selected.desc) - else - selected.name = option - selected.desc = {"[initial(selected.desc)] This one is broadcasting the name "[selected.name]""} - else if (option == "Color") - option = input(user, "Placeholder Color", null, selected.color) as null | color - if (isnull(option)) - return - selected.color = option - else if (option == "Sensor") - option = alert(user, "Sensor Range", null, "Off", "Short", "Far") - if (isnull(option)) - return - else if (option == "Off") - selected.set_light(0) - else if (option == "Short") - selected.set_light(1, 2, 3) - else if (option == "Far") - selected.set_light(1, 6, 7) - -/datum/build_mode/placeholders/OnClick(atom/atom, list/parameters) - if (!atom) - return - var/modifier = parameters["ctrl"] - if (parameters["left"] && !modifier) - if (istype(atom, /obj/effect/overmap/placeholder)) - selected = atom - to_chat(user, "Selected [selected].") - return - else - var/find = locate(/obj/effect/overmap/placeholder) in get_turf(atom) - if (!find) - if (!selected) - to_chat(user, "No placeholders found.") - to_chat(user, "Deselected [selected].") - selected = null - return - to_chat(user, "Selected [selected].") - return - if (!selected) - to_chat(user, "No placeholder selected.") - return - if (parameters["right"]) - var/dx = atom.x - selected.x - var/dy = atom.y - selected.y - if (!dx && !dy) - return - var/rotation - if (!dy) - if (dx > 0) - rotation = 90 - else - rotation = 270 - else if (!dx) - if (dy > 0) - rotation = 0 - else - rotation = 180 - else if (dy > 0) - if (dx > 0) - rotation = 45 - else - rotation = 315 - else - if (dx > 0) - rotation = 135 - else - rotation = 225 - animate( - selected, - easing = SINE_EASING, - time = selected.speed * 5 SECONDS, - transform = matrix().Update( - scale_x = selected.scale, - scale_y = selected.scale, - rotation = rotation - ) - ) - else if (parameters["middle"] || modifier) - new /obj/effect/ftl (get_turf(selected)) - new /obj/effect/ftl (get_turf(atom)) - addtimer(CALLBACK(src, .proc/RevealShip, selected, atom.x, atom.y), 2 SECONDS) - animate(selected, time = 0.5 SECONDS) - animate(alpha = 0, time = 0.5 SECONDS) - selected = null - -/datum/build_mode/placeholders/proc/RevealShip(atom/movable/ship, at_x, at_y) - ship.x = at_x - ship.y = at_y - animate(ship, alpha = 255, time = 0.5 SECONDS) - - -/obj/effect/ftl - icon = 'icons/obj/singularity.dmi' - icon_state = "singularity_s1" - blend_mode = BLEND_MULTIPLY - mouse_opacity = 0 - alpha = 0 - layer = 4 - - -/obj/effect/ftl/Initialize() - . = ..() - SetTransform(scale = 0) - filters += filter(type="blur", size = 2) - QDEL_IN(src, 3 SECONDS) - animate(src, transform = matrix().Update(scale_x = 2, scale_y = 2), alpha = 192, time = 0.5 SECONDS) - animate(time = 2 SECONDS) - animate(transform = matrix().Update(scale_x = 0, scale_y = 0), alpha = 0, time = 0.5 SECONDS) - - -/obj/effect/overmap/placeholder - scannable = TRUE - known = FALSE - glide_size = 8 - appearance_flags = EMPTY_BITFIELD - var/scale = 1 - var/rotation = 0 - var/speed = 1 - - -/obj/effect/overmap/placeholder/Initialize() - . = ..() - SetTransform(scale = scale, rotation = rotation) - - -/obj/effect/overmap/placeholder/gcn_a298 - name = "A298-Class Patrol Vessel" - desc = "A small, agile military and policing starship built by the Confederation Navy." - icon = 'gcn-64.dmi' - icon_state = "pv-a298" - pixel_x = -16 - pixel_y = -16 - speed = 0.75 - - -/obj/effect/overmap/placeholder/gcn_centurion - name = "Centurion-Class Frigate" - desc = "A medium sized military light carrier built by the Confederation Navy." - icon = 'gcn-64.dmi' - icon_state = "fr-centurion" - pixel_x = -16 - pixel_y = -16 - - -/obj/effect/overmap/placeholder/gcn_chevalier - name = "Chevalier-Class Frigate" - desc = "A medium sized line warship built by the Confederation Navy." - icon = 'gcn-64.dmi' - icon_state = "fr-chevalier" - pixel_x = -16 - pixel_y = -16 - speed = 0.9 - - -/obj/effect/overmap/placeholder/gcn_lucerne - name = "Lucerne-Class Destroyer" - desc = "A large mixed-role capital warship built by the Confederation Navy." - icon = 'gcn-64.dmi' - icon_state = "ds-lucerne" - pixel_x = -16 - pixel_y = -16 - scale = 1.5 - speed = 1.5 - - -/obj/effect/overmap/placeholder/scg_arrow - name = "Arrow-Class Corvette" - desc = "A small, aging missile warship built for the Solar Assembly Fleets." - icon = 'scg-64.dmi' - icon_state = "cv-arrow" - pixel_x = -16 - pixel_y = -16 - speed = 1.2 - - -/obj/effect/overmap/placeholder/scg_lexington - name = "Lexington-Class Corvette" - desc = "A small, fairly modern missile carrying warship built for the Solar Assembly Fleets." - icon = 'scg-64.dmi' - icon_state = "cv-lexington" - pixel_x = -16 - pixel_y = -16 - - -/obj/effect/overmap/placeholder/scg_rockfish - name = "Rockfish-Class Corvette" - desc = "A small, top of the line stealth warship built for the Solar Assembly Fleets." - icon = 'scg-64.dmi' - icon_state = "cv-rockfish" - pixel_x = -16 - pixel_y = -16 - speed = 0.8 - - -/obj/effect/overmap/placeholder/scg_nuum - name = "Nuum-Class Missile Frigate" - desc = "An aging medium sized frigate with a heavy focus on missiles, built for the Solar Assembly Fleets." - icon = 'scg-64.dmi' - icon_state = "fr-nuum" - pixel_x = -16 - pixel_y = -16 - - -/obj/effect/overmap/placeholder/scg_somme - name = "Somme-Class Frigate" - desc = "A fairly modern medium sized frigate of the line, built for the Solar Assembly Fleets." - icon = 'scg-64.dmi' - icon_state = "fr-somme" - pixel_x = -16 - pixel_y = -16 - - -/obj/effect/overmap/placeholder/scg_kestrel - name = "Kestrel-Model Starfighter" - desc = "An aging model of space fighter built for the Solar Assembly Fleets but now common in private ownership." - icon = 'scg-32.dmi' - icon_state = "sf-kestrel" - speed = 0.2 - - -/obj/effect/overmap/placeholder/scg_eagle_ii - name = "Eagle-II-Model Strike Fighter" - desc = "A modernized take on a venerable payload-carrying platform, built for the Solar Assembly Fleets." - icon = 'scg-32.dmi' - icon_state = "sf-eagle-ii" - speed = 0.2 - - -/obj/effect/overmap/placeholder/scg_hermes - name = "Hermes-Model Utility Pod" - desc = "A tiny workhorse found across human space, able to carry a pilot and some cargo a short distance." - icon = 'scg-32.dmi' - icon_state = "uv-hermes" - speed = 0.4 diff --git a/maps/event/placeholders/scg-32.dmi b/maps/event/placeholders/scg-32.dmi deleted file mode 100644 index 7fbb02f7cb275..0000000000000 Binary files a/maps/event/placeholders/scg-32.dmi and /dev/null differ diff --git a/maps/event/placeholders/scg-64.dmi b/maps/event/placeholders/scg-64.dmi deleted file mode 100644 index 372c31beab873..0000000000000 Binary files a/maps/event/placeholders/scg-64.dmi and /dev/null differ diff --git a/maps/example/example-1.dmm b/maps/example/example-1.dmm deleted file mode 100644 index 13a08d09429b4..0000000000000 --- a/maps/example/example-1.dmm +++ /dev/null @@ -1,1896 +0,0 @@ -//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE -"a" = ( -/turf/space, -/area/space) -"b" = ( -/turf/simulated/wall, -/area/constructionsite) -"c" = ( -/turf/simulated/floor/tiled, -/area/constructionsite) -"d" = ( -/obj/machinery/light{ - dir = 1 - }, -/turf/simulated/floor/tiled, -/area/constructionsite) -"e" = ( -/obj/machinery/light{ - dir = 8; - icon_state = "tube1" - }, -/turf/simulated/floor/tiled, -/area/constructionsite) -"f" = ( -/obj/machinery/light{ - dir = 4; - icon_state = "tube1" - }, -/turf/simulated/floor/tiled, -/area/constructionsite) -"g" = ( -/obj/effect/landmark/start, -/turf/simulated/floor/tiled, -/area/constructionsite) -"h" = ( -/obj/structure/cable{ - d2 = 2; - icon_state = "0-2" - }, -/obj/machinery/power/apc{ - dir = 8; - name = "west bump"; - pixel_x = -24 - }, -/turf/simulated/floor/tiled, -/area/constructionsite) -"i" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled, -/area/constructionsite) -"j" = ( -/obj/structure/cable, -/obj/machinery/power/debug_items/infinite_generator, -/turf/simulated/floor/tiled, -/area/constructionsite) -"k" = ( -/obj/machinery/light, -/turf/simulated/floor/tiled, -/area/constructionsite) -"l" = ( -/obj/effect/landmark{ - name = "tdome1" - }, -/turf/simulated/floor/tiled, -/area/constructionsite) -"m" = ( -/obj/machinery/atmospherics/pipe/simple/visible{ - dir = 5 - }, -/turf/simulated/floor/tiled, -/area/constructionsite) -"n" = ( -/obj/machinery/atmospherics/portables_connector{ - dir = 8 - }, -/obj/machinery/portable_atmospherics/canister/air, -/turf/simulated/floor/tiled, -/area/constructionsite) -"o" = ( -/obj/machinery/atmospherics/pipe/simple/visible{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/constructionsite) -"p" = ( -/obj/machinery/atmospherics/pipe/simple/visible{ - dir = 6 - }, -/turf/simulated/floor/tiled, -/area/constructionsite) -"q" = ( -/obj/machinery/atmospherics/portables_connector{ - dir = 8 - }, -/obj/machinery/portable_atmospherics/canister/empty, -/turf/simulated/floor/tiled, -/area/constructionsite) -"r" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 1 - }, -/turf/simulated/floor/tiled, -/area/constructionsite) -"s" = ( -/obj/machinery/atmospherics/unary/vent_pump/on, -/turf/simulated/floor/tiled, -/area/constructionsite) -"t" = ( -/obj/effect/landmark{ - name = "JoinLate" - }, -/turf/simulated/floor/tiled, -/area/constructionsite) -"u" = ( -/obj/machinery/light_switch{ - pixel_x = -25 - }, -/turf/simulated/floor/tiled, -/area/constructionsite) -"v" = ( -/obj/machinery/light_switch{ - pixel_x = 25 - }, -/turf/simulated/floor/tiled, -/area/constructionsite) -"w" = ( -/obj/effect/floor_decal/industrial/hatch/yellow, -/turf/simulated/floor/tiled, -/area/constructionsite) -"x" = ( -/obj/structure/ladder/up, -/turf/simulated/floor/tiled, -/area/constructionsite) -"y" = ( -/turf/simulated/wall/iron, -/area/shuttle/escape) -"z" = ( -/obj/effect/wingrille_spawn/reinforced, -/turf/simulated/floor/plating, -/area/shuttle/escape) -"A" = ( -/obj/machinery/computer/shuttle_control{ - shuttle_tag = "Example" - }, -/turf/simulated/floor/plating, -/area/shuttle/escape) -"B" = ( -/obj/structure/bed/chair{ - dir = 1 - }, -/obj/machinery/embedded_controller/radio/simple_docking_controller{ - id_tag = "example_shuttle_starboard"; - pixel_x = 28 - }, -/obj/machinery/embedded_controller/radio/simple_docking_controller{ - id_tag = "example_shuttle_port"; - pixel_x = -28 - }, -/obj/effect/shuttle_landmark/lower_level, -/turf/simulated/floor/plating, -/area/shuttle/escape) -"C" = ( -/obj/machinery/light, -/turf/simulated/floor/plating, -/area/shuttle/escape) -"D" = ( -/obj/machinery/door/airlock/external/bolted{ - frequency = 1379; - id_tag = "example_shuttle_port_hatch" - }, -/turf/simulated/floor/plating, -/area/shuttle/escape) -"E" = ( -/obj/machinery/door/airlock/external/bolted{ - frequency = 1379; - id_tag = "example_shuttle_starboard_hatch" - }, -/turf/simulated/floor/plating, -/area/shuttle/escape) -"F" = ( -/obj/machinery/embedded_controller/radio/simple_docking_controller{ - id_tag = "lower_level_dock"; - pixel_x = -8; - pixel_y = -25 - }, -/turf/simulated/floor, -/area/constructionsite) -"G" = ( -/obj/machinery/door/airlock/external/bolted{ - frequency = 1379; - id_tag = "lower_level_dock_hatch" - }, -/turf/simulated/floor, -/area/constructionsite) -"H" = ( -/turf/simulated/floor, -/area/constructionsite) -"I" = ( -/obj/effect/landmark/test/safe_turf, -/turf/simulated/floor/tiled, -/area/constructionsite) -"J" = ( -/obj/effect/landmark/test/space_turf, -/turf/space, -/area/space) -"K" = ( -/obj/machinery/tele_pad, -/turf/simulated/floor/tiled, -/area/constructionsite) -"L" = ( -/obj/machinery/telecomms/server/map_preset/example, -/turf/simulated/floor/tiled, -/area/constructionsite) -"M" = ( -/obj/machinery/telecomms/bus/map_preset/example, -/turf/simulated/floor/tiled, -/area/constructionsite) -"N" = ( -/obj/machinery/tele_beacon, -/turf/simulated/floor/tiled, -/area/constructionsite) -"O" = ( -/obj/machinery/photocopier/faxmachine{ - department = "Test Fax 1" - }, -/turf/simulated/floor/tiled, -/area/constructionsite) -"P" = ( -/obj/machinery/light, -/obj/machinery/telecomms/processor/map_preset/example, -/turf/simulated/floor/tiled, -/area/constructionsite) -"Q" = ( -/obj/machinery/photocopier/faxmachine{ - department = "Test Fax 2"; - send_access = list() - }, -/turf/simulated/floor/tiled, -/area/constructionsite) -"R" = ( -/obj/machinery/computer/teleporter, -/turf/simulated/floor/tiled, -/area/constructionsite) -"S" = ( -/obj/machinery/tele_projector, -/turf/simulated/floor/tiled, -/area/constructionsite) -"U" = ( -/obj/machinery/telecomms/broadcaster/map_preset/example, -/turf/simulated/floor/tiled, -/area/constructionsite) -"V" = ( -/obj/machinery/telecomms/hub/map_preset/example, -/turf/simulated/floor/tiled, -/area/constructionsite) -"W" = ( -/obj/machinery/telecomms/receiver/map_preset/example, -/turf/simulated/floor/tiled, -/area/constructionsite) - -(1,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(2,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(3,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(4,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(5,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(6,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(7,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(8,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(9,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(10,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(11,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(12,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(13,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -y -z -z -D -y -a -a -a -a -a -a -a -a -a -a -a -a -"} -(14,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -y -A -B -C -y -a -a -a -a -a -a -a -a -a -a -a -a -"} -(15,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -y -z -z -E -y -a -a -a -a -a -a -a -a -a -a -a -a -"} -(16,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -G -b -a -a -a -a -a -a -a -a -a -a -a -a -"} -(17,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -F -b -a -a -a -a -a -a -a -a -a -a -a -a -"} -(18,1,1) = {" -a -a -a -a -a -a -a -a -a -b -b -b -b -b -b -b -b -b -H -b -b -b -b -b -a -a -a -a -a -a -a -a -"} -(19,1,1) = {" -a -a -a -a -a -a -a -a -a -b -c -c -c -e -c -c -u -c -c -e -h -i -j -b -a -a -a -a -a -a -a -a -"} -(20,1,1) = {" -a -a -a -a -a -a -a -a -a -b -c -l -l -l -c -c -c -c -c -c -c -c -c -b -a -a -a -a -a -a -a -a -"} -(21,1,1) = {" -a -a -a -a -a -a -a -a -a -b -c -l -l -l -c -c -c -c -c -t -t -t -c -b -a -a -a -a -a -a -a -a -"} -(22,1,1) = {" -a -a -a -a -a -a -a -a -a -b -d -l -l -l -c -c -c -c -c -t -t -t -k -b -a -a -a -a -a -a -a -a -"} -(23,1,1) = {" -a -a -a -a -a -a -a -a -a -b -c -c -c -x -c -c -c -I -c -t -t -t -O -b -a -a -J -a -a -a -a -a -"} -(24,1,1) = {" -a -a -a -a -a -a -a -a -a -b -c -w -w -w -c -c -c -c -c -c -c -c -c -b -a -a -a -a -a -a -a -a -"} -(25,1,1) = {" -a -a -a -a -a -a -a -a -a -b -c -b -w -w -c -c -g -c -c -c -c -c -Q -b -a -a -a -a -a -a -a -a -"} -(26,1,1) = {" -a -a -a -a -a -a -a -a -a -b -c -w -w -w -c -c -c -c -c -c -c -c -W -b -a -a -a -a -a -a -a -a -"} -(27,1,1) = {" -a -a -a -a -a -a -a -a -a -b -c -c -c -c -c -c -c -c -c -c -c -c -L -b -a -a -a -a -a -a -a -a -"} -(28,1,1) = {" -a -a -a -a -a -a -a -a -a -b -d -c -c -c -c -c -c -c -c -c -c -c -P -b -a -a -a -a -a -a -a -a -"} -(29,1,1) = {" -a -a -a -a -a -a -a -a -a -b -R -c -c -c -s -m -c -p -r -c -c -c -M -b -a -a -a -a -a -a -a -a -"} -(30,1,1) = {" -a -a -a -a -a -a -a -a -a -b -S -c -c -N -c -o -c -o -c -c -c -c -V -b -a -a -a -a -a -a -a -a -"} -(31,1,1) = {" -a -a -a -a -a -a -a -a -a -b -K -c -v -f -c -n -c -q -c -f -c -c -U -b -a -a -a -a -a -a -a -a -"} -(32,1,1) = {" -a -a -a -a -a -a -a -a -a -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -a -a -a -a -a -a -a -a -"} -(33,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(34,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(35,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(36,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(37,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(38,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(39,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(40,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(41,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(42,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(43,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(44,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(45,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(46,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(47,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(48,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} diff --git a/maps/example/example-2.dmm b/maps/example/example-2.dmm deleted file mode 100644 index 9d7d2a24d86c2..0000000000000 --- a/maps/example/example-2.dmm +++ /dev/null @@ -1,2093 +0,0 @@ -//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE -"ad" = ( -/obj/effect/floor_decal/corner/blue/diagonal, -/obj/machinery/body_scanconsole{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/medical/surgery) -"at" = ( -/obj/machinery/light{ - dir = 8; - icon_state = "tube1" - }, -/obj/effect/floor_decal/corner/blue/diagonal, -/obj/machinery/reagentgrinder, -/obj/item/reagent_containers/glass/beaker/large, -/turf/simulated/floor/tiled/white, -/area/medical/surgery) -"cv" = ( -/obj/effect/floor_decal/corner/blue/diagonal, -/obj/machinery/chemical_dispenser/full, -/turf/simulated/floor/tiled/white, -/area/medical/surgery) -"gk" = ( -/obj/machinery/atmospherics/pipe/simple/visible{ - dir = 5 - }, -/obj/effect/floor_decal/corner/blue/diagonal, -/turf/simulated/floor/tiled/white, -/area/medical/surgery) -"gm" = ( -/obj/machinery/light, -/obj/effect/floor_decal/corner/blue/diagonal, -/turf/simulated/floor/tiled/white, -/area/medical/surgery) -"gO" = ( -/obj/effect/floor_decal/corner/blue/diagonal, -/obj/machinery/computer/rdconsole/core{ - dir = 1 - }, -/turf/simulated/floor/tiled/white, -/area/medical/surgery) -"hK" = ( -/obj/effect/floor_decal/corner/blue/diagonal, -/obj/structure/iv_drip, -/obj/item/reagent_containers/ivbag/blood/OMinus, -/obj/item/reagent_containers/ivbag/blood/OMinus, -/obj/item/reagent_containers/ivbag/blood/OMinus, -/turf/simulated/floor/tiled/white, -/area/medical/surgery) -"hO" = ( -/obj/structure/cable{ - d2 = 2; - icon_state = "0-2" - }, -/obj/machinery/power/apc{ - dir = 8; - name = "west bump"; - pixel_x = -24 - }, -/obj/effect/floor_decal/corner/blue/diagonal, -/turf/simulated/floor/tiled/white, -/area/medical/surgery) -"iG" = ( -/obj/effect/floor_decal/corner/blue/diagonal, -/obj/machinery/vending/robotics, -/turf/simulated/floor/tiled/white, -/area/medical/surgery) -"iN" = ( -/obj/effect/floor_decal/corner/blue/diagonal, -/obj/structure/table/glass, -/obj/item/reagent_containers/dropper, -/obj/item/reagent_containers/chem_disp_cartridge/peridaxon, -/obj/item/stack/nanopaste, -/obj/machinery/light{ - dir = 8; - icon_state = "tube1" - }, -/turf/simulated/floor/tiled/white, -/area/medical/surgery) -"jM" = ( -/obj/effect/floor_decal/corner/blue/diagonal, -/obj/structure/closet/secure_closet/freezer/meat, -/turf/simulated/floor/tiled/white, -/area/medical/surgery) -"kA" = ( -/obj/effect/floor_decal/corner/blue/diagonal, -/obj/machinery/fabricator, -/turf/simulated/floor/tiled/white, -/area/medical/surgery) -"lf" = ( -/obj/effect/floor_decal/corner/blue/diagonal, -/obj/machinery/light{ - dir = 4; - icon_state = "tube1" - }, -/turf/simulated/floor/tiled/white, -/area/medical/surgery) -"lM" = ( -/obj/effect/floor_decal/corner/blue/diagonal, -/obj/structure/table/glass, -/obj/item/scalpel/laser1, -/obj/item/scalpel/laser2, -/obj/item/scalpel/laser3, -/obj/item/device/robotanalyzer, -/obj/item/device/scanner/health, -/obj/item/storage/firstaid/adv, -/turf/simulated/floor/tiled/white, -/area/medical/surgery) -"ms" = ( -/obj/effect/floor_decal/corner/blue/diagonal, -/obj/machinery/atmospherics/unary/cryo_cell, -/turf/simulated/floor/tiled/white, -/area/medical/surgery) -"mQ" = ( -/obj/effect/floor_decal/corner/blue/diagonal, -/obj/structure/hygiene/sink{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/medical/surgery) -"mZ" = ( -/obj/effect/floor_decal/corner/blue/diagonal, -/obj/machinery/r_n_d/protolathe, -/turf/simulated/floor/tiled/white, -/area/medical/surgery) -"ns" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/effect/floor_decal/corner/blue/diagonal, -/turf/simulated/floor/tiled/white, -/area/medical/surgery) -"nu" = ( -/obj/machinery/atmospherics/pipe/simple/visible{ - dir = 4 - }, -/obj/effect/floor_decal/corner/blue/diagonal, -/turf/simulated/floor/tiled/white, -/area/medical/surgery) -"ou" = ( -/obj/effect/floor_decal/corner/blue/diagonal, -/obj/machinery/optable, -/turf/simulated/floor/tiled/white, -/area/medical/surgery) -"oy" = ( -/obj/machinery/atmospherics/portables_connector{ - dir = 8 - }, -/obj/machinery/portable_atmospherics/canister/empty, -/obj/effect/floor_decal/corner/blue/diagonal, -/turf/simulated/floor/tiled/white, -/area/medical/surgery) -"oP" = ( -/turf/space, -/area/space) -"oU" = ( -/obj/effect/floor_decal/corner/blue/diagonal, -/obj/machinery/reagent_temperature/cooler, -/turf/simulated/floor/tiled/white, -/area/medical/surgery) -"oW" = ( -/obj/effect/floor_decal/corner/blue/diagonal, -/obj/structure/table/glass, -/obj/item/storage/box/gloves, -/obj/item/storage/box/masks, -/turf/simulated/floor/tiled/white, -/area/medical/surgery) -"pD" = ( -/obj/machinery/atmospherics/unary/vent_pump/on, -/obj/effect/floor_decal/corner/blue/diagonal, -/turf/simulated/floor/tiled/white, -/area/medical/surgery) -"qw" = ( -/obj/effect/landmark/map_data{ - height = 2 - }, -/turf/space, -/area/space) -"qQ" = ( -/obj/effect/floor_decal/corner/blue/diagonal, -/obj/machinery/r_n_d/destructive_analyzer, -/turf/simulated/floor/tiled/white, -/area/medical/surgery) -"so" = ( -/obj/machinery/light_switch{ - pixel_x = -25 - }, -/obj/effect/floor_decal/corner/blue/diagonal, -/obj/machinery/chem_master, -/turf/simulated/floor/tiled/white, -/area/medical/surgery) -"uA" = ( -/obj/effect/floor_decal/corner/blue/diagonal, -/obj/machinery/computer/operating, -/turf/simulated/floor/tiled/white, -/area/medical/surgery) -"uM" = ( -/obj/machinery/light{ - dir = 1 - }, -/obj/effect/floor_decal/corner/blue/diagonal, -/obj/structure/table/glass, -/obj/item/storage/box/syringes, -/obj/item/storage/box/freezer, -/turf/simulated/floor/tiled/white, -/area/medical/surgery) -"uV" = ( -/obj/machinery/light{ - dir = 1 - }, -/obj/effect/floor_decal/corner/blue/diagonal, -/turf/simulated/floor/tiled/white, -/area/medical/surgery) -"vL" = ( -/obj/effect/floor_decal/corner/blue/diagonal, -/obj/machinery/recharge_station, -/turf/simulated/floor/tiled/white, -/area/medical/surgery) -"xA" = ( -/obj/machinery/atmospherics/pipe/simple/visible{ - dir = 6 - }, -/obj/effect/floor_decal/corner/blue/diagonal, -/turf/simulated/floor/tiled/white, -/area/medical/surgery) -"zN" = ( -/obj/effect/floor_decal/corner/blue/diagonal, -/obj/machinery/r_n_d/server/core, -/turf/simulated/floor/tiled/white, -/area/medical/surgery) -"Cr" = ( -/obj/effect/floor_decal/corner/blue/diagonal, -/obj/machinery/r_n_d/circuit_imprinter, -/turf/simulated/floor/tiled/white, -/area/medical/surgery) -"CE" = ( -/obj/effect/floor_decal/corner/blue/diagonal, -/obj/machinery/atmospherics/pipe/simple/visible/blue{ - dir = 5 - }, -/turf/simulated/floor/tiled/white, -/area/medical/surgery) -"CJ" = ( -/obj/effect/floor_decal/corner/blue/diagonal, -/obj/machinery/atmospherics/pipe/manifold/visible/blue, -/obj/item/reagent_containers/glass/beaker/cryoxadone, -/turf/simulated/floor/tiled/white, -/area/medical/surgery) -"Dh" = ( -/obj/effect/floor_decal/corner/blue/diagonal, -/obj/machinery/reagent_temperature, -/turf/simulated/floor/tiled/white, -/area/medical/surgery) -"DL" = ( -/turf/simulated/wall, -/area/medical/surgery) -"Eb" = ( -/obj/effect/floor_decal/corner/blue/diagonal, -/obj/machinery/robotics_fabricator, -/turf/simulated/floor/tiled/white, -/area/medical/surgery) -"HE" = ( -/obj/effect/floor_decal/corner/blue/diagonal, -/turf/simulated/floor/tiled/white, -/area/medical/surgery) -"Ii" = ( -/obj/effect/floor_decal/corner/blue/diagonal{ - dir = 1 - }, -/obj/machinery/computer/robotics{ - dir = 8 - }, -/turf/simulated/floor/tiled/white, -/area/medical/surgery) -"KN" = ( -/obj/effect/floor_decal/corner/blue/diagonal, -/obj/structure/table/rack, -/obj/item/stack/material/plasteel/fifty, -/obj/item/stack/material/steel/fifty, -/obj/item/stack/material/glass/fifty, -/obj/item/stack/material/gold/ten, -/obj/item/stack/material/mhydrogen/ten, -/obj/item/stack/material/silver/ten, -/obj/item/stack/material/uranium/ten, -/obj/item/stack/material/diamond/ten, -/obj/item/stack/material/phoron/fifty, -/obj/item/storage/belt/utility/full, -/obj/item/stack/material/steel/fifty, -/turf/simulated/floor/tiled/white, -/area/medical/surgery) -"LV" = ( -/obj/effect/floor_decal/corner/blue/diagonal, -/obj/machinery/sleeper{ - dir = 8 - }, -/turf/simulated/floor/tiled/white, -/area/medical/surgery) -"Mn" = ( -/obj/effect/floor_decal/corner/blue/diagonal, -/obj/machinery/organ_printer/robot/mapped, -/turf/simulated/floor/tiled/white, -/area/medical/surgery) -"NH" = ( -/obj/machinery/light, -/obj/effect/floor_decal/corner/blue/diagonal, -/obj/machinery/r_n_d/server/robotics, -/turf/simulated/floor/tiled/white, -/area/medical/surgery) -"NP" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 1 - }, -/obj/effect/floor_decal/corner/blue/diagonal, -/turf/simulated/floor/tiled/white, -/area/medical/surgery) -"OD" = ( -/obj/effect/floor_decal/corner/blue/diagonal, -/obj/machinery/organ_printer/flesh/mapped, -/turf/simulated/floor/tiled/white, -/area/medical/surgery) -"QF" = ( -/obj/structure/cable, -/obj/machinery/power/debug_items/infinite_generator, -/obj/effect/floor_decal/corner/blue/diagonal, -/turf/simulated/floor/tiled/white, -/area/medical/surgery) -"QN" = ( -/obj/machinery/atmospherics/portables_connector{ - dir = 8 - }, -/obj/machinery/portable_atmospherics/canister/air, -/obj/effect/floor_decal/corner/blue/diagonal, -/turf/simulated/floor/tiled/white, -/area/medical/surgery) -"QY" = ( -/obj/item/stock_parts/scanning_module, -/obj/item/stock_parts/manipulator, -/obj/item/stock_parts/manipulator, -/obj/item/reagent_containers/dropper{ - pixel_y = -4 - }, -/obj/structure/closet/crate/plastic, -/obj/random/powercell, -/obj/random/powercell, -/obj/random/powercell, -/obj/random/powercell, -/obj/item/device/robotanalyzer, -/obj/item/organ/internal/posibrain, -/obj/item/organ/internal/posibrain, -/obj/item/organ/internal/posibrain, -/obj/item/aicard, -/obj/item/clothing/gloves/insulated, -/obj/item/clothing/gloves/insulated, -/obj/item/device/radio/headset/headset_eng, -/obj/item/device/radio/headset/headset_eng, -/obj/item/device/multitool{ - pixel_x = 3 - }, -/obj/item/device/multitool{ - pixel_x = 3 - }, -/obj/item/storage/belt/utility/full, -/obj/item/storage/belt/utility/full, -/obj/item/clothing/glasses/welding, -/obj/item/clothing/head/welding{ - pixel_x = -3; - pixel_y = 5 - }, -/obj/effect/floor_decal/corner/blue/diagonal, -/turf/simulated/floor/tiled/white, -/area/medical/surgery) -"RG" = ( -/obj/structure/lattice, -/turf/simulated/open, -/area/medical/surgery) -"RJ" = ( -/obj/effect/floor_decal/corner/blue/diagonal, -/obj/structure/table/rack, -/obj/item/stack/material/aluminium/fifty, -/obj/item/stack/material/glass/fifty, -/obj/item/stack/material/steel/fifty, -/obj/item/stack/material/plastic/fifty, -/obj/item/stack/material/phoron/fifty, -/obj/item/stack/material/silver/ten, -/obj/item/stack/material/gold/ten, -/obj/item/stack/material/diamond/ten, -/obj/item/stack/material/uranium/ten, -/obj/item/research, -/obj/item/reagent_containers/glass/beaker, -/turf/simulated/floor/tiled/white, -/area/medical/surgery) -"SL" = ( -/obj/effect/floor_decal/corner/blue/diagonal, -/obj/machinery/mech_recharger, -/turf/simulated/floor/tiled/white, -/area/medical/surgery) -"Tm" = ( -/obj/effect/floor_decal/corner/blue/diagonal, -/obj/machinery/bodyscanner{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/medical/surgery) -"VS" = ( -/obj/effect/floor_decal/corner/blue/diagonal, -/obj/item/reagent_containers/glass/beaker/large, -/obj/item/reagent_containers/glass/beaker/insulated/large, -/obj/item/reagent_containers/glass/beaker/noreact, -/obj/structure/table/rack, -/turf/simulated/floor/tiled/white, -/area/medical/surgery) -"Wk" = ( -/obj/effect/floor_decal/corner/blue/diagonal, -/obj/machinery/portable_atmospherics/canister/oxygen/prechilled, -/obj/machinery/atmospherics/portables_connector, -/turf/simulated/floor/tiled/white, -/area/medical/surgery) -"XF" = ( -/obj/machinery/light_switch{ - pixel_x = 25 - }, -/obj/effect/floor_decal/corner/blue/diagonal, -/turf/simulated/floor/tiled/white, -/area/medical/surgery) -"XT" = ( -/turf/simulated/open, -/area/medical/surgery) -"Ye" = ( -/obj/effect/floor_decal/corner/blue/diagonal, -/obj/machinery/atmospherics/unary/freezer, -/turf/simulated/floor/tiled/white, -/area/medical/surgery) -"Yr" = ( -/obj/effect/floor_decal/corner/blue/diagonal, -/obj/machinery/computer/rdconsole/robotics{ - dir = 1 - }, -/turf/simulated/floor/tiled/white, -/area/medical/surgery) -"Yt" = ( -/obj/effect/floor_decal/corner/blue/diagonal, -/obj/machinery/atmospherics/pipe/simple/visible/blue{ - dir = 9 - }, -/turf/simulated/floor/tiled/white, -/area/medical/surgery) -"YL" = ( -/obj/effect/floor_decal/corner/blue/diagonal, -/obj/structure/table/glass, -/obj/item/storage/firstaid/surgery, -/turf/simulated/floor/tiled/white, -/area/medical/surgery) -"Zq" = ( -/obj/effect/floor_decal/corner/blue/diagonal, -/obj/structure/ladder/updown, -/turf/simulated/floor/tiled/white, -/area/medical/surgery) - -(1,1,1) = {" -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -"} -(2,1,1) = {" -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -"} -(3,1,1) = {" -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -"} -(4,1,1) = {" -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -"} -(5,1,1) = {" -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -"} -(6,1,1) = {" -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -"} -(7,1,1) = {" -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -"} -(8,1,1) = {" -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -"} -(9,1,1) = {" -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -"} -(10,1,1) = {" -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -"} -(11,1,1) = {" -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -"} -(12,1,1) = {" -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -"} -(13,1,1) = {" -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -"} -(14,1,1) = {" -oP -oP -oP -oP -oP -oP -oP -oP -oP -qw -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -"} -(15,1,1) = {" -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -"} -(16,1,1) = {" -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -"} -(17,1,1) = {" -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -"} -(18,1,1) = {" -oP -oP -oP -oP -oP -oP -oP -oP -oP -DL -DL -DL -DL -DL -DL -DL -DL -DL -DL -DL -DL -DL -DL -DL -oP -oP -oP -oP -oP -oP -oP -oP -"} -(19,1,1) = {" -oP -oP -oP -oP -oP -oP -oP -oP -oP -DL -hK -YL -iN -lM -jM -OD -Mn -cv -so -at -hO -ns -QF -DL -oP -oP -oP -oP -oP -oP -oP -oP -"} -(20,1,1) = {" -oP -oP -oP -oP -oP -oP -oP -oP -oP -DL -ou -HE -ad -HE -HE -HE -HE -Dh -HE -oU -HE -HE -HE -DL -oP -oP -oP -oP -oP -oP -oP -oP -"} -(21,1,1) = {" -oP -oP -oP -oP -oP -oP -oP -oP -oP -DL -uA -HE -Tm -HE -Eb -HE -KN -VS -HE -HE -HE -HE -HE -DL -oP -oP -oP -oP -oP -oP -oP -oP -"} -(22,1,1) = {" -oP -oP -oP -oP -oP -oP -oP -oP -oP -DL -uM -HE -HE -HE -HE -HE -HE -HE -HE -HE -HE -HE -gm -DL -oP -oP -oP -oP -oP -oP -oP -oP -"} -(23,1,1) = {" -oP -oP -oP -oP -oP -oP -oP -oP -oP -DL -oW -mQ -LV -Zq -HE -HE -HE -HE -HE -HE -Cr -HE -mZ -DL -oP -oP -oP -oP -oP -oP -oP -oP -"} -(24,1,1) = {" -oP -oP -oP -oP -oP -oP -oP -oP -oP -DL -HE -RG -XT -Ye -CE -HE -HE -HE -HE -HE -HE -HE -gO -DL -oP -oP -oP -oP -oP -oP -oP -oP -"} -(25,1,1) = {" -oP -oP -oP -oP -oP -oP -oP -oP -oP -DL -RG -RG -XT -ms -CJ -HE -HE -HE -HE -HE -qQ -HE -RJ -DL -oP -oP -oP -oP -oP -oP -oP -oP -"} -(26,1,1) = {" -oP -oP -oP -oP -oP -oP -oP -oP -oP -DL -HE -XT -XT -Wk -Yt -HE -HE -HE -HE -HE -HE -HE -zN -DL -oP -oP -oP -oP -oP -oP -oP -oP -"} -(27,1,1) = {" -oP -oP -oP -oP -oP -oP -oP -oP -oP -DL -HE -HE -HE -HE -HE -HE -HE -HE -HE -HE -SL -vL -HE -DL -oP -oP -oP -oP -oP -oP -oP -oP -"} -(28,1,1) = {" -oP -oP -oP -oP -oP -oP -oP -oP -oP -DL -uV -HE -HE -HE -HE -HE -HE -HE -HE -HE -kA -Eb -NH -DL -oP -oP -oP -oP -oP -oP -oP -oP -"} -(29,1,1) = {" -oP -oP -oP -oP -oP -oP -oP -oP -oP -DL -HE -HE -HE -HE -pD -gk -HE -xA -NP -HE -HE -HE -Yr -DL -oP -oP -oP -oP -oP -oP -oP -oP -"} -(30,1,1) = {" -oP -oP -oP -oP -oP -oP -oP -oP -oP -DL -HE -HE -HE -HE -HE -nu -HE -nu -HE -HE -HE -HE -Cr -DL -oP -oP -oP -oP -oP -oP -oP -oP -"} -(31,1,1) = {" -oP -oP -oP -oP -oP -oP -oP -oP -oP -DL -HE -HE -XF -lf -HE -QN -HE -oy -HE -QY -Ii -iG -HE -DL -oP -oP -oP -oP -oP -oP -oP -oP -"} -(32,1,1) = {" -oP -oP -oP -oP -oP -oP -oP -oP -oP -DL -DL -DL -DL -DL -DL -DL -DL -DL -DL -DL -DL -DL -DL -DL -oP -oP -oP -oP -oP -oP -oP -oP -"} -(33,1,1) = {" -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -"} -(34,1,1) = {" -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -"} -(35,1,1) = {" -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -"} -(36,1,1) = {" -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -"} -(37,1,1) = {" -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -"} -(38,1,1) = {" -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -"} -(39,1,1) = {" -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -"} -(40,1,1) = {" -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -"} -(41,1,1) = {" -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -"} -(42,1,1) = {" -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -"} -(43,1,1) = {" -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -"} -(44,1,1) = {" -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -"} -(45,1,1) = {" -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -"} -(46,1,1) = {" -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -"} -(47,1,1) = {" -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -"} -(48,1,1) = {" -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -oP -"} diff --git a/maps/example/example-3.dmm b/maps/example/example-3.dmm deleted file mode 100644 index 15f9508622cdb..0000000000000 --- a/maps/example/example-3.dmm +++ /dev/null @@ -1,1810 +0,0 @@ -//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE -"a" = ( -/turf/space, -/area/space) -"b" = ( -/obj/effect/landmark/map_data{ - height = 2 - }, -/turf/space, -/area/space) -"c" = ( -/turf/simulated/wall, -/area/maintenance/fsmaint2) -"d" = ( -/obj/effect/floor_decal/corner/blue/diagonal, -/turf/simulated/floor/tiled, -/area/maintenance/fsmaint2) -"e" = ( -/obj/machinery/light{ - dir = 1 - }, -/obj/effect/floor_decal/corner/blue/diagonal, -/turf/simulated/floor/tiled, -/area/maintenance/fsmaint2) -"f" = ( -/obj/structure/lattice, -/turf/simulated/open, -/area/maintenance/fsmaint2) -"g" = ( -/turf/simulated/open, -/area/maintenance/fsmaint2) -"h" = ( -/obj/machinery/light_switch{ - pixel_x = 25 - }, -/obj/effect/floor_decal/corner/blue/diagonal, -/turf/simulated/floor/tiled, -/area/maintenance/fsmaint2) -"i" = ( -/obj/effect/shuttle_landmark/upper_level, -/turf/space, -/area/space) -"j" = ( -/obj/machinery/light{ - dir = 8; - icon_state = "tube1" - }, -/obj/effect/floor_decal/corner/blue/diagonal, -/turf/simulated/floor/tiled, -/area/maintenance/fsmaint2) -"k" = ( -/obj/effect/floor_decal/corner/blue/diagonal, -/obj/structure/ladder, -/turf/simulated/floor/tiled, -/area/maintenance/fsmaint2) -"l" = ( -/turf/simulated/floor, -/area/maintenance/fsmaint2) -"m" = ( -/obj/machinery/embedded_controller/radio/simple_docking_controller{ - id_tag = "upper_level_dock"; - pixel_x = 8; - pixel_y = -25 - }, -/turf/simulated/floor, -/area/maintenance/fsmaint2) -"n" = ( -/obj/machinery/door/airlock/external/bolted{ - frequency = 1379 - }, -/turf/simulated/floor, -/area/maintenance/fsmaint2) -"o" = ( -/obj/machinery/atmospherics/unary/vent_pump/on, -/obj/effect/floor_decal/corner/blue/diagonal, -/turf/simulated/floor/tiled, -/area/maintenance/fsmaint2) -"p" = ( -/obj/effect/floor_decal/corner/blue/diagonal, -/obj/machinery/light{ - dir = 4; - icon_state = "tube1" - }, -/turf/simulated/floor/tiled, -/area/maintenance/fsmaint2) -"q" = ( -/obj/machinery/atmospherics/pipe/simple/visible{ - dir = 5 - }, -/obj/effect/floor_decal/corner/blue/diagonal, -/turf/simulated/floor/tiled, -/area/maintenance/fsmaint2) -"r" = ( -/obj/machinery/atmospherics/pipe/simple/visible{ - dir = 4 - }, -/obj/effect/floor_decal/corner/blue/diagonal, -/turf/simulated/floor/tiled, -/area/maintenance/fsmaint2) -"s" = ( -/obj/machinery/atmospherics/portables_connector{ - dir = 8 - }, -/obj/machinery/portable_atmospherics/canister/air, -/obj/effect/floor_decal/corner/blue/diagonal, -/turf/simulated/floor/tiled, -/area/maintenance/fsmaint2) -"t" = ( -/obj/machinery/atmospherics/pipe/simple/visible{ - dir = 6 - }, -/obj/effect/floor_decal/corner/blue/diagonal, -/turf/simulated/floor/tiled, -/area/maintenance/fsmaint2) -"u" = ( -/obj/machinery/atmospherics/portables_connector{ - dir = 8 - }, -/obj/machinery/portable_atmospherics/canister/empty, -/obj/effect/floor_decal/corner/blue/diagonal, -/turf/simulated/floor/tiled, -/area/maintenance/fsmaint2) -"v" = ( -/obj/machinery/light_switch{ - pixel_x = -25 - }, -/obj/effect/floor_decal/corner/blue/diagonal, -/turf/simulated/floor/tiled, -/area/maintenance/fsmaint2) -"w" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 1 - }, -/obj/effect/floor_decal/corner/blue/diagonal, -/turf/simulated/floor/tiled, -/area/maintenance/fsmaint2) -"x" = ( -/obj/machinery/light{ - dir = 4; - icon_state = "tube1" - }, -/obj/effect/floor_decal/corner/blue/diagonal, -/turf/simulated/floor/tiled, -/area/maintenance/fsmaint2) -"y" = ( -/obj/structure/cable{ - d2 = 2; - icon_state = "0-2" - }, -/obj/machinery/power/apc{ - dir = 8; - name = "west bump"; - pixel_x = -24 - }, -/obj/effect/floor_decal/corner/blue/diagonal, -/turf/simulated/floor/tiled, -/area/maintenance/fsmaint2) -"z" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/effect/floor_decal/corner/blue/diagonal, -/turf/simulated/floor/tiled, -/area/maintenance/fsmaint2) -"A" = ( -/obj/structure/cable, -/obj/machinery/power/debug_items/infinite_generator, -/obj/effect/floor_decal/corner/blue/diagonal, -/turf/simulated/floor/tiled, -/area/maintenance/fsmaint2) -"B" = ( -/obj/machinery/light, -/obj/effect/floor_decal/corner/blue/diagonal, -/turf/simulated/floor/tiled, -/area/maintenance/fsmaint2) - -(1,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(2,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(3,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(4,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(5,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(6,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(7,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(8,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(9,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(10,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(11,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(12,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(13,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(14,1,1) = {" -a -a -a -a -a -a -a -a -a -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(15,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(16,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(17,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(18,1,1) = {" -a -a -a -a -a -a -a -a -a -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -a -a -a -a -a -a -a -a -"} -(19,1,1) = {" -a -a -a -a -a -a -a -a -a -c -d -d -d -j -d -d -d -d -v -j -y -z -A -c -a -a -a -a -a -a -a -a -"} -(20,1,1) = {" -a -a -a -a -a -a -a -a -a -c -d -d -d -d -d -d -d -d -d -d -d -d -d -c -a -a -a -a -a -a -a -a -"} -(21,1,1) = {" -a -a -a -a -a -a -a -a -a -c -d -d -d -d -d -d -d -d -d -d -d -d -d -c -a -a -a -a -a -a -a -a -"} -(22,1,1) = {" -a -a -a -a -a -a -a -a -a -c -e -d -d -d -d -d -d -d -d -d -d -d -B -c -a -a -a -a -a -a -a -a -"} -(23,1,1) = {" -a -a -a -a -a -a -a -a -a -c -d -d -d -k -d -d -d -d -d -d -d -d -d -c -a -a -a -a -a -a -a -a -"} -(24,1,1) = {" -a -a -a -a -a -a -a -a -a -c -d -f -g -g -d -d -d -d -d -d -d -d -d -c -a -a -a -a -a -a -a -a -"} -(25,1,1) = {" -a -a -a -a -a -a -a -a -a -c -f -f -g -g -d -d -d -d -d -d -d -d -d -c -a -a -a -a -a -a -a -a -"} -(26,1,1) = {" -a -a -a -a -a -a -a -a -a -c -d -f -g -g -d -d -d -d -d -d -d -d -d -c -a -a -a -a -a -a -a -a -"} -(27,1,1) = {" -a -a -a -a -a -a -a -a -a -c -d -d -d -d -d -d -d -d -d -d -d -d -d -c -a -a -a -a -a -a -a -a -"} -(28,1,1) = {" -a -a -a -a -a -a -a -a -a -c -e -d -d -d -d -d -d -d -d -d -d -d -B -c -a -a -a -a -a -a -a -a -"} -(29,1,1) = {" -a -a -a -a -a -a -a -a -a -c -d -d -d -d -o -q -d -t -w -d -d -d -d -c -a -a -a -a -a -a -a -a -"} -(30,1,1) = {" -a -a -a -a -a -a -a -a -a -c -d -d -d -d -d -r -d -r -d -d -d -d -d -c -a -a -a -a -a -a -a -a -"} -(31,1,1) = {" -a -a -a -a -a -a -a -a -a -c -d -d -h -d -p -s -d -u -d -x -d -d -d -c -a -a -a -a -a -a -a -a -"} -(32,1,1) = {" -a -a -a -a -a -a -a -a -a -c -c -c -c -l -c -c -c -c -c -c -c -c -c -c -a -a -a -a -a -a -a -a -"} -(33,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -c -l -c -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(34,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -c -m -c -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(35,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -c -n -c -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(36,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(37,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -i -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(38,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(39,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(40,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(41,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(42,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(43,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(44,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(45,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(46,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(47,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(48,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} diff --git a/maps/example/example.dm b/maps/example/example.dm deleted file mode 100644 index 1423a949372e3..0000000000000 --- a/maps/example/example.dm +++ /dev/null @@ -1,17 +0,0 @@ -#if !defined(using_map_DATUM) - #include "example_areas.dm" - #include "example_shuttles.dm" - #include "example_radio.dm" - #include "example_unit_testing.dm" - - #include "example-1.dmm" - #include "example-2.dmm" - #include "example-3.dmm" - - #define using_map_DATUM /datum/map/example - -#elif !defined(MAP_OVERRIDE) - - #warn A map has already been included, ignoring Example - -#endif diff --git a/maps/example/example_areas.dm b/maps/example/example_areas.dm deleted file mode 100644 index 975820a8397f6..0000000000000 --- a/maps/example/example_areas.dm +++ /dev/null @@ -1,11 +0,0 @@ -/area/constructionsite - name = "\improper Construction Site" - icon_state = "storage" - -/area/maintenance/fsmaint2 - name = "\improper Fore Starboard Maintenance - 2" - icon_state = "fsmaint" - -/area/medical/surgery - name = "\improper Operating Theatre" - icon_state = "surgery" \ No newline at end of file diff --git a/maps/example/example_define.dm b/maps/example/example_define.dm deleted file mode 100644 index ad5f8c6fe2d65..0000000000000 --- a/maps/example/example_define.dm +++ /dev/null @@ -1,22 +0,0 @@ -/datum/map/example - name = "Example" - full_name = "The Example" - path = "example" - - lobby_screens = list('maps/example/lobby.png') - lobby_tracks = list(/decl/audio/track/absconditus) - - station_levels = list(1, 2, 3) - contact_levels = list(1, 2, 3) - player_levels = list(1, 2, 3) - - allowed_spawns = list("Arrivals Shuttle") - - shuttle_docked_message = "The shuttle has docked." - shuttle_leaving_dock = "The shuttle has departed from home dock." - shuttle_called_message = "A scheduled transfer shuttle has been sent." - shuttle_recall_message = "The shuttle has been recalled" - emergency_shuttle_docked_message = "The emergency escape shuttle has docked." - emergency_shuttle_leaving_dock = "The emergency escape shuttle has departed from %dock_name%." - emergency_shuttle_called_message = "An emergency escape shuttle has been sent." - emergency_shuttle_recall_message = "The emergency shuttle has been recalled" diff --git a/maps/example/example_radio.dm b/maps/example/example_radio.dm deleted file mode 100644 index 8aefb10558486..0000000000000 --- a/maps/example/example_radio.dm +++ /dev/null @@ -1,43 +0,0 @@ -/obj/machinery/telecomms/hub/map_preset/example - preset_name = "Example" - produces_heat = FALSE - -/obj/machinery/telecomms/receiver/map_preset/example - preset_name = "Example" - produces_heat = FALSE - use_common = TRUE - -/obj/machinery/telecomms/bus/map_preset/example - preset_name = "Example" - produces_heat = FALSE - use_common = TRUE - -/obj/machinery/telecomms/processor/map_preset/example - preset_name = "Example" - produces_heat = FALSE - -/obj/machinery/telecomms/server/map_preset/example - preset_name = "Example" - preset_color = COMMS_COLOR_DEFAULT - produces_heat = FALSE - use_common = TRUE - -/obj/machinery/telecomms/broadcaster/map_preset/example - preset_name = "Example" - produces_heat = FALSE - -/obj/item/device/radio/map_preset/example - preset_name = "Example" - use_common = TRUE - -/obj/item/device/radio/intercom/map_preset/example - preset_name = "Example" - use_common = TRUE - -/obj/item/device/encryptionkey/map_preset/example - preset_name = "Example" - -/obj/item/device/radio/headset/map_preset/example - preset_name = "Example" - encryption_key = /obj/item/device/encryptionkey/map_preset/example - use_common = TRUE diff --git a/maps/example/example_shuttles.dm b/maps/example/example_shuttles.dm deleted file mode 100644 index c79538b8cb131..0000000000000 --- a/maps/example/example_shuttles.dm +++ /dev/null @@ -1,20 +0,0 @@ -/obj/effect/shuttle_landmark/lower_level - name = "Lower Level Dock" - landmark_tag = "nav_example_station" - docking_controller = "lower_level_dock" - -/obj/effect/shuttle_landmark/upper_level - name = "Upper Level Dock" - landmark_tag = "nav_example_offsite" - special_dock_targets = list("Example" = "example_shuttle_port") - docking_controller = "upper_level_dock" - -/datum/shuttle/autodock/ferry/example - name = "Example" - shuttle_area = /area/shuttle/escape - dock_target = "example_shuttle_starboard" - warmup_time = 10 - - location = 0 - waypoint_station = "nav_example_station" - waypoint_offsite = "nav_example_offsite" \ No newline at end of file diff --git a/maps/example/example_unit_testing.dm b/maps/example/example_unit_testing.dm deleted file mode 100644 index 186f42ff503c6..0000000000000 --- a/maps/example/example_unit_testing.dm +++ /dev/null @@ -1,6 +0,0 @@ -/datum/map/example - // Unit test exemptions - apc_test_exempt_areas = list( - /area/space = NO_SCRUBBER|NO_VENT|NO_APC, - /area/shuttle/escape = NO_SCRUBBER|NO_VENT|NO_APC - ) diff --git a/maps/example/lobby.png b/maps/example/lobby.png deleted file mode 100644 index b62daea53b71a..0000000000000 Binary files a/maps/example/lobby.png and /dev/null differ diff --git a/maps/example/map.dm b/maps/example/map.dm deleted file mode 100644 index a17488b7c8d90..0000000000000 --- a/maps/example/map.dm +++ /dev/null @@ -1 +0,0 @@ -#include "example.dm" diff --git a/maps/random_ruins/exoplanet_ruins/crashed_pod/crashed_pod.dm b/maps/random_ruins/exoplanet_ruins/crashed_pod/crashed_pod.dm deleted file mode 100644 index 74bb38b437b6f..0000000000000 --- a/maps/random_ruins/exoplanet_ruins/crashed_pod/crashed_pod.dm +++ /dev/null @@ -1,64 +0,0 @@ -GLOBAL_LIST_INIT(crashed_pod_areas, new) - -/datum/map_template/ruin/exoplanet/crashed_pod - name = "crashed survival pod" - id = "crashed_pod" - description = "A crashed survival pod from a destroyed ship." - suffixes = list("crashed_pod/crashed_pod.dmm") - spawn_cost = 1.5 - player_cost = 4 - template_flags = TEMPLATE_FLAG_CLEAR_CONTENTS | TEMPLATE_FLAG_NO_RUINS | TEMPLATE_FLAG_NO_RADS - ruin_tags = RUIN_HUMAN|RUIN_WRECK - spawn_weight = 0.33 - -/area/map_template/crashed_pod - name = "\improper Crashed Survival Pod" - icon_state = "blue" - -/decl/submap_archetype/crashed_pod - descriptor = "crashed survival pod" - crew_jobs = list(/datum/job/submap/pod) - -/datum/submap/crashed_pod/sync_cell(var/obj/effect/overmap/visitable/cell) - return - -/datum/job/submap/pod - title = "Stranded Survivor" - info = "Your ship has been destroyed by a terrible disaster." - outfit_type = /decl/hierarchy/outfit/job/survivor - total_positions = 2 - -/decl/hierarchy/outfit/job/survivor - name = OUTFIT_JOB_NAME("Survivor") - id_types = null - pda_type = null - -/datum/job/submap/pod/New(var/datum/submap/_owner, var/abstract_job = FALSE) - ..() - if(_owner) // Might be called from admin tools, etc - info = "Your ship, the [_owner.name], has been destroyed by a terrible disaster, \ - leaving you stranded in your survival pod on a hostile exoplanet. Your pod's distress \ - signal appear to be malfunctioning. All you can do now is survive, and hope for a passing ship..." - -/obj/effect/submap_landmark/spawnpoint/crashed_pod_survivor - name = "Stranded Survivor" - -/obj/effect/submap_landmark/joinable_submap/crashed_pod - name = "Crashed Survival Pod" - archetype = /decl/submap_archetype/crashed_pod - submap_datum_type = /datum/submap/crashed_pod - -/obj/effect/submap_landmark/joinable_submap/crashed_pod/New() - var/list/possible_ship_names = list( - "Hornet", "Witchmoth", "Planthopper", - "Mayfly", "Locust", "Cicada", - "Sanddragon", "Conehead", "Whitetail", - "Amberwing", "Swallowtail", "Hawkmoth", - "Katydid", "Longhorn", "Luna Moth", - "Monarch", "Mydas", "Paperwasp", - "Treehopper", "Sphinxmoth", "Leatherwing", - "Scarab", "Ash Borer", "Admiral", - "Emperor", "Skipper", "Tarantula Hawk", - "Adder", "Bumblebee") - name = "[pick("SEV", "SIC", "FTUV", "ICV", "HMS")] [pick(possible_ship_names)]" - ..() diff --git a/maps/random_ruins/exoplanet_ruins/crashed_pod/crashed_pod.dmm b/maps/random_ruins/exoplanet_ruins/crashed_pod/crashed_pod.dmm deleted file mode 100644 index 190eac476ad11..0000000000000 --- a/maps/random_ruins/exoplanet_ruins/crashed_pod/crashed_pod.dmm +++ /dev/null @@ -1,1328 +0,0 @@ -//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE -"ab" = ( -/turf/simulated/wall/r_wall, -/area/map_template/crashed_pod) -"ac" = ( -/obj/machinery/atmospherics/omni/filter{ - tag_east = 2; - tag_north = 4; - tag_south = 1 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/crashed_pod) -"ad" = ( -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/crashed_pod) -"ay" = ( -/turf/simulated/wall, -/area/map_template/crashed_pod) -"bb" = ( -/obj/machinery/airlock_sensor/airlock_exterior{ - frequency = 1380; - id_tag = "crashedpodWest_sensor_external"; - pixel_y = 32 - }, -/obj/machinery/access_button/airlock_exterior{ - frequency = 1380; - master_tag = "crashedpodWest"; - pixel_y = 20; - pixel_z = 1 - }, -/turf/simulated/floor/reinforced/airless, -/area/map_template/crashed_pod) -"bk" = ( -/obj/machinery/atmospherics/pipe/manifold/visible/fuel{ - dir = 4 - }, -/turf/simulated/wall/r_wall, -/area/map_template/crashed_pod) -"bl" = ( -/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{ - dir = 8; - id_tag = "crashedpodEast_pump_out_internal"; - power_rating = 25000 - }, -/obj/machinery/embedded_controller/radio/airlock/airlock_controller{ - cycle_to_external_air = 1; - frequency = 1380; - id_tag = "crashedpodEast"; - pixel_y = 26; - tag_airpump = "crashedpodEast_pump"; - tag_chamber_sensor = "crashedpodEast_sensor_chamber"; - tag_exterior_door = "crashedpodEast_exterior_door"; - tag_exterior_sensor = "crashedpodEast_sensor_external"; - tag_interior_door = "crashedpodEast_interior_door" - }, -/obj/machinery/airlock_sensor{ - frequency = 1380; - id_tag = "crashedpodEast_sensor_chamber"; - pixel_x = -22 - }, -/turf/simulated/floor/reinforced/airless, -/area/map_template/crashed_pod) -"bm" = ( -/obj/machinery/door/airlock/external{ - frequency = 1380; - id_tag = "crashedpodEast_exterior_door"; - locked = 1 - }, -/turf/simulated/floor/reinforced/airless, -/area/map_template/crashed_pod) -"bn" = ( -/obj/machinery/airlock_sensor/airlock_exterior{ - frequency = 1380; - id_tag = "crashedpodEast_sensor_external"; - pixel_y = 32 - }, -/obj/machinery/access_button/airlock_exterior{ - frequency = 1380; - master_tag = "crashedpodEast"; - pixel_y = 20; - pixel_z = 1 - }, -/turf/simulated/floor/reinforced/airless, -/area/map_template/crashed_pod) -"bo" = ( -/obj/machinery/atmospherics/pipe/simple/visible/fuel{ - dir = 9 - }, -/obj/machinery/atmospherics/unary/tank/air, -/obj/machinery/light/small{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/crashed_pod) -"bp" = ( -/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{ - id_tag = "crashedpodEast_pump"; - power_rating = 25000 - }, -/obj/item/device/radio/intercom/hailing{ - dir = 8; - pixel_x = 24 - }, -/turf/simulated/floor/reinforced/airless, -/area/map_template/crashed_pod) -"bq" = ( -/obj/machinery/atmospherics/portables_connector{ - dir = 4 - }, -/obj/machinery/portable_atmospherics/canister/air, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/crashed_pod) -"bs" = ( -/obj/machinery/atmospherics/pipe/simple/visible/blue, -/obj/machinery/door/airlock/external{ - frequency = 1380; - id_tag = "crashedpodEast_interior_door" - }, -/turf/simulated/floor/reinforced/airless, -/area/map_template/crashed_pod) -"bt" = ( -/obj/machinery/access_button/airlock_interior{ - frequency = 1380; - master_tag = "crashedpodEast"; - pixel_x = 22; - pixel_y = 22 - }, -/obj/machinery/atmospherics/pipe/manifold/visible/blue{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/crashed_pod) -"bu" = ( -/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{ - dir = 4; - id_tag = "crashedpodWest_pump_out_external"; - power_rating = 25000 - }, -/turf/simulated/floor/reinforced/airless, -/area/map_template/crashed_pod) -"bE" = ( -/obj/machinery/door/airlock/external{ - frequency = 1380; - id_tag = "crashedpodWest_exterior_door"; - locked = 1 - }, -/turf/simulated/floor/reinforced/airless, -/area/map_template/crashed_pod) -"bF" = ( -/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{ - dir = 4; - id_tag = "crashedpodWest_pump_out_internal"; - power_rating = 25000 - }, -/obj/machinery/embedded_controller/radio/airlock/airlock_controller{ - cycle_to_external_air = 1; - frequency = 1380; - id_tag = "crashedpodWest"; - pixel_y = 26; - tag_airpump = "crashedpodWest_pump"; - tag_chamber_sensor = "crashedpodWest_sensor_chamber"; - tag_exterior_door = "crashedpodWest_exterior_door"; - tag_exterior_sensor = "crashedpodWest_sensor_external"; - tag_interior_door = "crashedpodWest_interior_door" - }, -/turf/simulated/floor/reinforced/airless, -/area/map_template/crashed_pod) -"bG" = ( -/obj/machinery/airlock_sensor{ - frequency = 1380; - id_tag = "crashedpodWest_sensor_chamber"; - pixel_x = 22 - }, -/obj/machinery/atmospherics/pipe/simple/visible/red{ - dir = 4 - }, -/turf/simulated/floor/reinforced/airless, -/area/map_template/crashed_pod) -"bH" = ( -/obj/machinery/atmospherics/pipe/simple/visible/red{ - dir = 10 - }, -/turf/simulated/wall/r_wall, -/area/map_template/crashed_pod) -"bI" = ( -/obj/machinery/portable_atmospherics/canister/empty, -/obj/machinery/atmospherics/portables_connector, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/crashed_pod) -"bJ" = ( -/obj/structure/fuel_port, -/turf/simulated/wall/r_wall, -/area/map_template/crashed_pod) -"bK" = ( -/obj/machinery/atmospherics/pipe/simple/visible/fuel{ - dir = 5 - }, -/obj/machinery/meter, -/turf/simulated/wall/r_wall, -/area/map_template/crashed_pod) -"bL" = ( -/obj/machinery/atmospherics/pipe/simple/visible/red{ - dir = 6 - }, -/turf/simulated/wall/r_wall, -/area/map_template/crashed_pod) -"bW" = ( -/obj/effect/landmark/clear, -/turf/template_noop, -/area/template_noop) -"bX" = ( -/obj/machinery/atmospherics/pipe/simple/visible/blue, -/obj/item/pen, -/obj/machinery/atmospherics/pipe/simple/visible/red{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/crashed_pod) -"bY" = ( -/obj/item/device/radio/intercom/hailing{ - dir = 4; - pixel_x = -24 - }, -/turf/simulated/floor/reinforced/airless, -/area/map_template/crashed_pod) -"ca" = ( -/obj/machinery/atmospherics/pipe/manifold/visible/fuel{ - dir = 8 - }, -/obj/machinery/meter, -/obj/machinery/light/small{ - dir = 8 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/crashed_pod) -"cb" = ( -/obj/machinery/atmospherics/binary/pump{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/crashed_pod) -"cc" = ( -/obj/machinery/atmospherics/pipe/simple/visible/fuel{ - dir = 4 - }, -/obj/machinery/atmospherics/unary/tank/air, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/crashed_pod) -"ej" = ( -/turf/simulated/floor/reinforced/airless, -/area/map_template/crashed_pod) -"ek" = ( -/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{ - dir = 8; - id_tag = "crashedpodEast_pump_out_external"; - power_rating = 25000 - }, -/turf/simulated/floor/reinforced/airless, -/area/map_template/crashed_pod) -"el" = ( -/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{ - id_tag = "crashedpodWest_pump"; - power_rating = 25000 - }, -/turf/simulated/floor/reinforced/airless, -/area/map_template/crashed_pod) -"em" = ( -/obj/machinery/door/airlock/external{ - frequency = 1380; - id_tag = "crashedpodWest_interior_door" - }, -/obj/machinery/atmospherics/pipe/simple/visible/blue, -/turf/simulated/floor/reinforced/airless, -/area/map_template/crashed_pod) -"en" = ( -/obj/machinery/atmospherics/binary/pump{ - dir = 1 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/crashed_pod) -"eo" = ( -/obj/machinery/atmospherics/pipe/manifold/visible/blue, -/obj/machinery/meter, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/crashed_pod) -"ep" = ( -/obj/machinery/atmospherics/pipe/manifold/visible/blue{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/crashed_pod) -"eq" = ( -/obj/machinery/atmospherics/pipe/simple/visible/red, -/obj/effect/wallframe_spawn/reinforced/hull, -/turf/simulated/floor/plating, -/area/map_template/crashed_pod) -"eC" = ( -/obj/machinery/computer/air_control{ - dir = 4; - name = "Atmospheric Sensors"; - sensor_tag = "crashed_pod_out" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/crashed_pod) -"eD" = ( -/obj/machinery/atmospherics/pipe/simple/visible/blue{ - dir = 5 - }, -/obj/machinery/access_button/airlock_interior{ - frequency = 1380; - master_tag = "crashedpodWest"; - pixel_x = -22; - pixel_y = 22 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/crashed_pod) -"eE" = ( -/obj/machinery/atmospherics/unary/engine, -/turf/simulated/floor/reinforced/airless, -/area/map_template/crashed_pod) -"eG" = ( -/obj/machinery/atmospherics/pipe/simple/visible/blue{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/visible/red, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/crashed_pod) -"eH" = ( -/obj/machinery/atmospherics/pipe/manifold/visible/blue{ - dir = 1 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/crashed_pod) -"eI" = ( -/obj/machinery/atmospherics/pipe/manifold/visible/blue, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/crashed_pod) -"eJ" = ( -/obj/machinery/atmospherics/pipe/simple/visible/blue{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/visible/red, -/obj/item/wrench, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/crashed_pod) -"eU" = ( -/obj/effect/wallframe_spawn/reinforced/hull, -/obj/machinery/atmospherics/pipe/simple/visible/red{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/map_template/crashed_pod) -"eW" = ( -/obj/machinery/atmospherics/pipe/simple/visible/red{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/crashed_pod) -"eY" = ( -/obj/machinery/atmospherics/pipe/manifold4w/visible/red, -/obj/machinery/meter, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/crashed_pod) -"eZ" = ( -/obj/machinery/atmospherics/omni/filter{ - tag_north = 3; - tag_south = 1; - tag_west = 2 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/crashed_pod) -"fb" = ( -/obj/machinery/atmospherics/pipe/manifold/visible/red{ - dir = 1 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/crashed_pod) -"ff" = ( -/obj/machinery/atmospherics/pipe/simple/visible/blue, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/crashed_pod) -"fg" = ( -/obj/machinery/atmospherics/pipe/manifold/visible/red{ - dir = 8 - }, -/obj/structure/closet/hydrant{ - pixel_x = -27 - }, -/obj/item/screwdriver, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/crashed_pod) -"fh" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/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/effect/floor_decal/industrial/hatch/orange, -/obj/structure/cable{ - d2 = 2; - icon_state = "0-2"; - pixel_y = 1 - }, -/obj/structure/railing/mapped{ - dir = 8; - icon_state = "railing0-1" - }, -/obj/structure/railing/mapped{ - dir = 1; - icon_state = "railing0-1" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/crashed_pod) -"fi" = ( -/obj/item/device/multitool, -/obj/item/screwdriver, -/obj/item/cell/device/high, -/obj/item/cell/device/high, -/obj/item/cell/crap, -/obj/item/storage/box/lights, -/obj/item/device/scanner/gas, -/obj/item/reagent_containers/food/drinks/cans/speer, -/obj/item/reagent_containers/food/drinks/cans/speer, -/obj/item/reagent_containers/food/drinks/cans/speer, -/obj/item/storage/box/monkeycubes, -/obj/item/reagent_containers/food/drinks/bottle/vodka, -/obj/item/reagent_containers/food/drinks/bottle/specialwhiskey, -/obj/item/tracker_electronics, -/obj/item/pen/blue, -/obj/item/pen/green, -/obj/item/pen/red, -/obj/effect/floor_decal/industrial/hatch/orange, -/obj/item/stack/cable_coil/random, -/obj/item/stack/cable_coil/random, -/obj/structure/closet/crate, -/obj/item/flame/lighter/random, -/obj/item/storage/box/lights/tubes, -/obj/random/powercell, -/obj/random/powercell, -/obj/random/powercell, -/obj/structure/railing/mapped{ - dir = 1; - icon_state = "railing0-1" - }, -/obj/item/taperoll/engineering, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/crashed_pod) -"fj" = ( -/obj/effect/floor_decal/industrial/hatch/orange, -/obj/machinery/atmospherics/pipe/simple/visible/red{ - dir = 5 - }, -/obj/structure/railing/mapped{ - dir = 1; - icon_state = "railing0-1" - }, -/obj/structure/railing/mapped{ - dir = 4; - icon_state = "railing0-1" - }, -/obj/machinery/portable_atmospherics/canister/oxygen, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/crashed_pod) -"fk" = ( -/obj/machinery/atmospherics/pipe/manifold/visible/red, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/crashed_pod) -"fl" = ( -/obj/effect/floor_decal/industrial/hatch/orange, -/obj/machinery/atmospherics/pipe/manifold/visible/red, -/obj/structure/railing/mapped{ - dir = 8; - icon_state = "railing0-1" - }, -/obj/structure/railing/mapped{ - dir = 1; - icon_state = "railing0-1" - }, -/obj/machinery/space_heater, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/crashed_pod) -"fm" = ( -/obj/structure/closet/crate/medical, -/obj/random/firstaid, -/obj/random/firstaid, -/obj/random/firstaid, -/obj/random/firstaid, -/obj/random/firstaid, -/obj/item/storage/firstaid/surgery, -/obj/item/storage/firstaid/stab, -/obj/item/storage/pill_bottle/antidexafen, -/obj/item/storage/pill_bottle/antidexafen, -/obj/item/storage/med_pouch/radiation, -/obj/item/storage/med_pouch/radiation, -/obj/item/storage/med_pouch/radiation, -/obj/item/storage/med_pouch/radiation, -/obj/item/storage/pill_bottle/assorted, -/obj/machinery/atmospherics/pipe/simple/visible/red{ - dir = 9 - }, -/obj/effect/floor_decal/industrial/hatch/orange, -/obj/structure/railing/mapped{ - dir = 1; - icon_state = "railing0-1" - }, -/mob/living/simple_animal/passive/mouse/brown/Tom, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/crashed_pod) -"fn" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 4 - }, -/obj/effect/floor_decal/industrial/hatch/orange, -/obj/structure/railing/mapped{ - dir = 1; - icon_state = "railing0-1" - }, -/obj/structure/railing/mapped{ - dir = 4; - icon_state = "railing0-1" - }, -/obj/machinery/fabricator/hacked, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/crashed_pod) -"fx" = ( -/obj/machinery/atmospherics/pipe/simple/visible/red, -/obj/machinery/alarm{ - dir = 4; - locked = 0; - pixel_x = -25; - req_access = list() - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/crashed_pod) -"fy" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/pipedispenser, -/obj/effect/floor_decal/industrial/hatch/orange, -/obj/structure/cable, -/obj/machinery/power/terminal, -/obj/structure/railing/mapped{ - dir = 8; - icon_state = "railing0-1" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/crashed_pod) -"fz" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/floor_decal/industrial/hatch/orange, -/obj/machinery/power/port_gen/pacman/super, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/crashed_pod) -"fA" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/floor_decal/industrial/hatch/orange, -/obj/structure/closet/crate, -/obj/item/storage/briefcase/inflatable, -/obj/item/storage/briefcase/inflatable, -/obj/item/storage/briefcase/inflatable, -/obj/item/storage/briefcase/inflatable, -/obj/item/storage/briefcase/inflatable, -/obj/item/device/geiger, -/obj/item/device/geiger, -/obj/random/powercell, -/obj/random/powercell, -/obj/random/powercell, -/obj/structure/railing/mapped{ - dir = 4; - icon_state = "railing0-1" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/crashed_pod) -"fC" = ( -/obj/item/device/oxycandle, -/obj/item/device/oxycandle, -/obj/item/device/oxycandle, -/obj/item/device/oxycandle, -/obj/item/device/oxycandle, -/obj/item/device/oxycandle, -/obj/item/device/oxycandle, -/obj/item/device/oxycandle, -/obj/item/device/oxycandle, -/obj/item/device/oxycandle, -/obj/item/device/oxycandle, -/obj/item/device/oxycandle, -/obj/item/device/oxycandle, -/obj/item/device/oxycandle, -/obj/item/device/oxycandle, -/obj/item/device/oxycandle, -/obj/item/device/oxycandle, -/obj/item/device/oxycandle, -/obj/structure/closet/crate, -/obj/effect/floor_decal/industrial/hatch/orange, -/obj/item/reagent_containers/glass/paint/random, -/obj/random/powercell, -/obj/random/powercell, -/obj/structure/railing/mapped{ - dir = 8; - icon_state = "railing0-1" - }, -/obj/item/book/manual/engineering_construction, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/crashed_pod) -"fD" = ( -/obj/structure/closet/crate/freezer/rations, -/obj/effect/floor_decal/industrial/hatch/orange, -/obj/machinery/power/terminal, -/obj/structure/cable{ - d2 = 4; - icon_state = "0-4" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/crashed_pod) -"fE" = ( -/obj/structure/closet/crate, -/obj/random/handgun, -/obj/random/handgun, -/obj/random/handgun, -/obj/item/pickaxe, -/obj/item/pickaxe, -/obj/item/pickaxe, -/obj/item/stack/material/glass/fifty, -/obj/item/stack/material/glass/fifty, -/obj/item/stack/material/plasteel/fifty, -/obj/item/stack/material/plastic/fifty, -/obj/item/device/flashlight/lantern, -/obj/item/device/flashlight/lantern, -/obj/item/storage/box/glowsticks, -/obj/item/storage/box/glowsticks, -/obj/item/storage/box/glowsticks, -/obj/item/stack/material/steel/fifty, -/obj/item/stack/material/steel/fifty, -/obj/item/stack/material/steel/fifty, -/obj/random/toolbox, -/obj/random/toolbox, -/obj/random/toolbox, -/obj/random/toolbox, -/obj/effect/floor_decal/industrial/hatch/orange, -/obj/structure/cable{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/structure/railing/mapped{ - dir = 4; - icon_state = "railing0-1" - }, -/obj/item/stock_parts/circuitboard/solar_control, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/crashed_pod) -"fP" = ( -/obj/machinery/atmospherics/pipe/simple/visible/red, -/obj/structure/sign/warning/nosmoking_burned{ - dir = 1; - pixel_x = -32 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/crashed_pod) -"fQ" = ( -/obj/machinery/power/apc{ - locked = 0; - name = "south bump"; - pixel_y = -28; - req_access = list() - }, -/obj/structure/cable{ - d2 = 4; - icon_state = "0-4" - }, -/obj/machinery/portable_atmospherics/canister/carbon_dioxide, -/obj/effect/floor_decal/industrial/hatch/orange, -/obj/structure/cable{ - d2 = 8; - icon_state = "0-8" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/crashed_pod) -"fR" = ( -/obj/structure/closet/crate, -/obj/effect/floor_decal/industrial/hatch/orange, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/railing/mapped{ - dir = 4; - icon_state = "railing0-1" - }, -/obj/item/stock_parts/micro_laser/ultra, -/obj/item/stock_parts/matter_bin/adv, -/obj/item/stock_parts/circuitboard/biogenerator, -/obj/item/stock_parts/matter_bin/super, -/obj/item/stack/material/uranium/ten, -/obj/item/stock_parts/circuitboard/oxyregenerator, -/obj/item/stock_parts/circuitboard/unary_atmos/heater, -/obj/item/stock_parts/circuitboard/unary_atmos/cooler, -/obj/item/device/scanner/gas, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/crashed_pod) -"fS" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/crashed_pod) -"fT" = ( -/obj/structure/cable, -/obj/effect/floor_decal/industrial/hatch/orange, -/obj/structure/reagent_dispensers/watertank, -/obj/machinery/light/spot, -/obj/structure/railing/mapped{ - dir = 4; - icon_state = "railing0-1" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/crashed_pod) -"gd" = ( -/obj/effect/floor_decal/industrial/hatch/orange, -/obj/machinery/light/spot, -/obj/structure/cable{ - d2 = 4; - icon_state = "0-4" - }, -/obj/machinery/power/smes/batteryrack, -/obj/structure/railing/mapped{ - dir = 8; - icon_state = "railing0-1" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/crashed_pod) -"ge" = ( -/obj/machinery/atmospherics/pipe/simple/visible/red, -/obj/machinery/door/airlock/civilian, -/obj/machinery/door/firedoor, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/crashed_pod) -"gg" = ( -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/crashed_pod) -"gh" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/floor_decal/industrial/hatch/orange, -/obj/structure/railing/mapped{ - dir = 8; - icon_state = "railing0-1" - }, -/obj/structure/reagent_dispensers/fueltank, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/crashed_pod) -"gi" = ( -/obj/machinery/power/smes/buildable{ - charge = 10000; - inputting = 1; - outputting = 1 - }, -/obj/structure/cable{ - d2 = 8; - icon_state = "0-8" - }, -/obj/effect/floor_decal/industrial/hatch/orange, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/crashed_pod) -"gv" = ( -/obj/machinery/atmospherics/pipe/simple/visible/blue, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/crashed_pod) -"gw" = ( -/obj/structure/closet, -/obj/random/clothing, -/obj/random/clothing, -/obj/random/clothing, -/obj/random/clothing, -/obj/random/clothing, -/obj/random/clothing, -/obj/random/clothing, -/obj/random/clothing, -/obj/random/gloves, -/obj/random/hat, -/obj/random/hat, -/obj/random/hat, -/obj/item/clothing/under/color/orange, -/obj/item/clothing/under/color/orange, -/obj/item/clothing/under/color/blackjumpshorts, -/obj/item/clothing/under/color/black, -/obj/effect/decal/cleanable/dirt, -/obj/effect/floor_decal/industrial/hatch/orange, -/obj/structure/railing/mapped{ - dir = 8; - icon_state = "railing0-1" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/crashed_pod) -"gx" = ( -/obj/structure/closet, -/obj/random/clothing, -/obj/random/clothing, -/obj/random/clothing, -/obj/random/clothing, -/obj/random/clothing, -/obj/random/clothing, -/obj/random/clothing, -/obj/random/clothing, -/obj/random/gloves, -/obj/random/hat, -/obj/random/hat, -/obj/random/hat, -/obj/item/clothing/under/color/orange, -/obj/item/clothing/under/color/orange, -/obj/item/clothing/under/color/blackjumpshorts, -/obj/item/clothing/under/color/black, -/obj/effect/decal/cleanable/dirt, -/obj/effect/floor_decal/industrial/hatch/orange, -/obj/structure/railing/mapped{ - dir = 4; - icon_state = "railing0-1" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/crashed_pod) -"gy" = ( -/obj/machinery/atmospherics/pipe/simple/visible/blue, -/obj/machinery/door/airlock/civilian, -/obj/machinery/door/firedoor, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/crashed_pod) -"gz" = ( -/obj/structure/bed/chair/shuttle/black{ - dir = 4 - }, -/obj/effect/submap_landmark/spawnpoint/crashed_pod_survivor, -/obj/item/device/radio/intercom/hailing{ - dir = 4; - pixel_x = -24 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/map_template/crashed_pod) -"gC" = ( -/obj/machinery/atmospherics/pipe/simple/visible/red, -/obj/structure/closet/hydrant{ - pixel_x = -27 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/crashed_pod) -"gD" = ( -/obj/machinery/atmospherics/pipe/simple/visible/red, -/obj/effect/decal/cleanable/filth, -/obj/item/device/binoculars, -/obj/machinery/alarm{ - dir = 4; - locked = 0; - pixel_x = -25; - req_access = list() - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/crashed_pod) -"gE" = ( -/obj/machinery/sleeper{ - dir = 8 - }, -/obj/effect/floor_decal/industrial/outline/blue, -/turf/simulated/floor/tiled/dark/monotile, -/area/map_template/crashed_pod) -"gF" = ( -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/crashed_pod) -"gG" = ( -/obj/structure/closet, -/obj/random/clothing, -/obj/random/clothing, -/obj/random/clothing, -/obj/random/clothing, -/obj/random/clothing, -/obj/random/clothing, -/obj/random/clothing, -/obj/random/clothing, -/obj/random/gloves, -/obj/random/hat, -/obj/random/hat, -/obj/random/hat, -/obj/item/clothing/under/color/orange, -/obj/item/clothing/under/color/orange, -/obj/item/clothing/under/color/blackjumpshorts, -/obj/item/clothing/under/color/black, -/obj/effect/floor_decal/industrial/hatch/orange, -/obj/structure/railing/mapped{ - dir = 8; - icon_state = "railing0-1" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/crashed_pod) -"gH" = ( -/obj/machinery/door/airlock/civilian, -/obj/machinery/door/firedoor, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/crashed_pod) -"gI" = ( -/obj/machinery/atmospherics/pipe/simple/visible/blue, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/crashed_pod) -"gJ" = ( -/obj/machinery/atmospherics/pipe/simple/visible/blue, -/obj/effect/decal/cleanable/dirt, -/obj/item/toy/figure/engineer, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/crashed_pod) -"gK" = ( -/obj/structure/bed/chair/shuttle/black{ - dir = 4 - }, -/obj/effect/decal/cleanable/vomit, -/obj/effect/submap_landmark/spawnpoint/crashed_pod_survivor, -/turf/simulated/floor/tiled/dark/monotile, -/area/map_template/crashed_pod) -"gT" = ( -/obj/item/trash/liquidfood, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/crashed_pod) -"gU" = ( -/obj/machinery/atmospherics/pipe/simple/visible/red{ - dir = 5 - }, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/light/spot{ - dir = 8 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/crashed_pod) -"gV" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 8 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/crashed_pod) -"gW" = ( -/obj/effect/decal/cleanable/dirt, -/obj/item/reagent_containers/food/drinks/cans/speer, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/crashed_pod) -"gX" = ( -/obj/item/storage/backpack/dufflebag/eng, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/crashed_pod) -"gZ" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/crashed_pod) -"hh" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/closet/emcloset, -/obj/item/crowbar, -/obj/item/crowbar, -/obj/effect/floor_decal/industrial/outline/blue, -/obj/item/clothing/suit/space/emergency, -/obj/item/tank/oxygen_emergency_double, -/obj/item/clothing/head/helmet/space/emergency, -/turf/simulated/floor/tiled/dark, -/area/map_template/crashed_pod) -"hi" = ( -/obj/structure/closet/emcloset, -/obj/effect/floor_decal/industrial/outline/blue, -/obj/item/clothing/suit/space/emergency, -/obj/item/tank/oxygen_emergency_double, -/obj/item/clothing/head/helmet/space/emergency, -/obj/item/storage/briefcase/inflatable, -/turf/simulated/floor/tiled/dark, -/area/map_template/crashed_pod) -"hj" = ( -/obj/machinery/atmospherics/pipe/simple/visible/blue{ - dir = 9 - }, -/obj/machinery/light/spot{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/crashed_pod) -"hk" = ( -/obj/structure/table/steel_reinforced, -/obj/machinery/recharger, -/obj/item/reagent_containers/food/drinks/glass2/coffeecup/metal, -/turf/simulated/floor/tiled/dark, -/area/map_template/crashed_pod) -"hm" = ( -/obj/structure/sign/kiddieplaque{ - desc = "A plaque with information regarding this particular lifepod. It reads: 'Armalev Industries Skyfin-E, Exoplanetary Suvival Pod' there's a registry number, and an assigned mothership, but they've both been scratched to illegiblity."; - name = "\improper Lifepod Plaque"; - pixel_y = 30 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/crashed_pod) -"lG" = ( -/obj/effect/wallframe_spawn/reinforced/hull, -/turf/simulated/floor/plating, -/area/map_template/crashed_pod) -"pO" = ( -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/dark, -/area/map_template/crashed_pod) -"vG" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/floor_decal/industrial/outline/blue, -/obj/machinery/portable_atmospherics/powered/pump/filled, -/turf/simulated/floor/tiled/dark, -/area/map_template/crashed_pod) -"ED" = ( -/obj/effect/submap_landmark/joinable_submap/crashed_pod, -/turf/simulated/floor/tiled/dark/monotile, -/area/map_template/crashed_pod) -"Gp" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/floor_decal/industrial/outline/blue, -/obj/machinery/portable_atmospherics/powered/scrubber, -/turf/simulated/floor/tiled/dark, -/area/map_template/crashed_pod) -"Hp" = ( -/obj/machinery/sleeper{ - dir = 8 - }, -/obj/effect/floor_decal/industrial/outline/blue, -/obj/item/device/radio/intercom/hailing{ - dir = 8; - pixel_x = 24 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/map_template/crashed_pod) -"Hx" = ( -/obj/machinery/air_sensor{ - id_tag = "crashed_pod_out" - }, -/turf/simulated/floor/reinforced/airless, -/area/map_template/crashed_pod) -"RN" = ( -/obj/structure/table/steel_reinforced, -/obj/item/device/radio/hailing, -/obj/item/device/radio/hailing, -/obj/item/device/radio/hailing, -/obj/item/device/radio/hailing, -/obj/item/device/radio/hailing, -/obj/random/plushie, -/obj/item/paper_bin, -/turf/simulated/floor/tiled/dark, -/area/map_template/crashed_pod) -"ZI" = ( -/obj/effect/floor_decal/industrial/outline/blue, -/obj/machinery/portable_atmospherics/powered/scrubber, -/turf/simulated/floor/tiled/dark/monotile, -/area/map_template/crashed_pod) - -(1,1,1) = {" -bW -bW -bW -bW -bW -bW -bW -bW -bW -bW -bW -bW -bW -bW -bW -"} -(2,1,1) = {" -ab -bb -ej -ej -Hx -bu -ej -ej -ej -ej -ej -ej -ej -ej -ej -"} -(3,1,1) = {" -ab -bE -ab -ab -lG -eU -ab -ab -ab -ab -ab -ab -ab -ab -ab -"} -(4,1,1) = {" -ab -bF -bY -ab -eC -fb -fg -fx -fP -ge -gC -gD -gU -hk -ab -"} -(5,1,1) = {" -ab -bG -el -em -eD -eW -fh -fy -gd -ay -Hp -gE -gV -RN -ab -"} -(6,1,1) = {" -ab -bH -eq -eq -eG -fk -fi -fz -fQ -ay -ay -ay -gW -hh -ab -"} -(7,1,1) = {" -ab -bI -ca -en -eG -eY -fj -fA -fR -gx -gx -ay -gX -hi -lG -"} -(8,1,1) = {" -ab -bJ -cb -bq -eH -eZ -fk -gg -fS -gg -gF -gH -ad -ED -lG -"} -(9,1,1) = {" -eE -bK -cc -eo -eH -ac -fl -fC -gh -gw -gG -ay -hm -pO -lG -"} -(10,1,1) = {" -eE -bk -bo -ep -eI -fb -fm -fD -gi -ay -ay -ay -gT -vG -ab -"} -(11,1,1) = {" -ab -bL -eq -eq -eJ -fk -fn -fE -fT -ay -gz -gK -gZ -Gp -ab -"} -(12,1,1) = {" -ab -bl -bp -bs -bt -bX -ep -ff -gv -gy -gI -gJ -hj -ZI -ab -"} -(13,1,1) = {" -ab -bm -ab -ab -lG -eU -ab -ab -ab -ab -ab -ab -ab -ab -ab -"} -(14,1,1) = {" -ab -bn -ej -ej -ej -ek -ej -ej -ej -ej -ej -ej -ej -ej -ej -"} -(15,1,1) = {" -bW -bW -bW -bW -bW -bW -bW -bW -bW -bW -bW -bW -bW -bW -bW -"} diff --git a/maps/random_ruins/exoplanet_ruins/datacapsule/contents_1.dmm b/maps/random_ruins/exoplanet_ruins/datacapsule/contents_1.dmm deleted file mode 100644 index f2fc6240dd170..0000000000000 --- a/maps/random_ruins/exoplanet_ruins/datacapsule/contents_1.dmm +++ /dev/null @@ -1,54 +0,0 @@ -//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE -"a" = ( -/obj/structure/table/steel, -/obj/item/reagent_containers/glass/beaker/vial/random_podchem, -/obj/item/reagent_containers/glass/beaker/vial/random_podchem, -/obj/structure/window/basic/full, -/turf/template_noop, -/area/template_noop) -"b" = ( -/turf/template_noop, -/area/template_noop) -"c" = ( -/obj/structure/foamedmetal, -/turf/template_noop, -/area/template_noop) -"d" = ( -/obj/machinery/constructable_frame/machine_frame, -/turf/template_noop, -/area/template_noop) -"e" = ( -/obj/machinery/computer/modular/preset/library{ - dir = 8; - icon_state = "console" - }, -/turf/template_noop, -/area/template_noop) -"f" = ( -/obj/structure/table, -/turf/template_noop, -/area/template_noop) -"g" = ( -/obj/item/stack/material/steel, -/obj/structure/foamedmetal, -/turf/template_noop, -/area/template_noop) - -(1,1,1) = {" -c -d -f -a -"} -(2,1,1) = {" -c -b -b -c -"} -(3,1,1) = {" -c -e -c -g -"} diff --git a/maps/random_ruins/exoplanet_ruins/datacapsule/contents_2.dmm b/maps/random_ruins/exoplanet_ruins/datacapsule/contents_2.dmm deleted file mode 100644 index 7ea9be1132e70..0000000000000 --- a/maps/random_ruins/exoplanet_ruins/datacapsule/contents_2.dmm +++ /dev/null @@ -1,62 +0,0 @@ -//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE -"a" = ( -/obj/machinery/telecomms/server, -/obj/structure/foamedmetal, -/turf/template_noop, -/area/template_noop) -"b" = ( -/mob/living/simple_animal/hostile/viscerator, -/turf/template_noop, -/area/template_noop) -"c" = ( -/obj/structure/foamedmetal, -/turf/template_noop, -/area/template_noop) -"d" = ( -/obj/machinery/r_n_d/server/core{ - id_with_download_string = ""; - id_with_upload_string = "" - }, -/obj/structure/foamedmetal, -/turf/template_noop, -/area/template_noop) -"e" = ( -/obj/machinery/computer/modular/preset/library{ - dir = 8; - icon_state = "console" - }, -/turf/template_noop, -/area/template_noop) -"f" = ( -/obj/structure/backup_server, -/turf/template_noop, -/area/template_noop) -"g" = ( -/obj/machinery/constructable_frame/machine_frame, -/obj/structure/foamedmetal, -/turf/template_noop, -/area/template_noop) -"h" = ( -/obj/structure/backup_server, -/obj/structure/foamedmetal, -/turf/template_noop, -/area/template_noop) - -(1,1,1) = {" -a -g -f -h -"} -(2,1,1) = {" -c -c -c -b -"} -(3,1,1) = {" -d -e -f -h -"} diff --git a/maps/random_ruins/exoplanet_ruins/datacapsule/contents_3.dmm b/maps/random_ruins/exoplanet_ruins/datacapsule/contents_3.dmm deleted file mode 100644 index 3f0ce0d42a03e..0000000000000 --- a/maps/random_ruins/exoplanet_ruins/datacapsule/contents_3.dmm +++ /dev/null @@ -1,59 +0,0 @@ -//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE -"a" = ( -/obj/effect/spider/stickyweb, -/turf/template_noop, -/area/template_noop) -"b" = ( -/obj/structure/foamedmetal, -/turf/template_noop, -/area/template_noop) -"c" = ( -/obj/effect/spider/eggcluster, -/turf/template_noop, -/area/template_noop) -"d" = ( -/obj/effect/spider/eggcluster, -/obj/item/material/shard, -/turf/template_noop, -/area/template_noop) -"e" = ( -/mob/living/simple_animal/hostile/giant_spider/guard, -/turf/template_noop, -/area/template_noop) -"f" = ( -/mob/living/simple_animal/hostile/giant_spider/nurse, -/turf/template_noop, -/area/template_noop) -"g" = ( -/obj/item/material/shard, -/turf/template_noop, -/area/template_noop) -"h" = ( -/obj/effect/spider/stickyweb, -/obj/item/material/shard, -/turf/template_noop, -/area/template_noop) -"i" = ( -/obj/effect/landmark/corpse/zombiescience, -/obj/structure/foamedmetal, -/turf/template_noop, -/area/template_noop) - -(1,1,1) = {" -b -d -g -c -"} -(2,1,1) = {" -i -a -e -f -"} -(3,1,1) = {" -b -g -c -h -"} diff --git a/maps/random_ruins/exoplanet_ruins/datacapsule/datacapsule.dm b/maps/random_ruins/exoplanet_ruins/datacapsule/datacapsule.dm deleted file mode 100644 index 5fc0509aed6b4..0000000000000 --- a/maps/random_ruins/exoplanet_ruins/datacapsule/datacapsule.dm +++ /dev/null @@ -1,84 +0,0 @@ -/datum/map_template/ruin/exoplanet/datacapsule - name = "ejected data capsule" - id = "datacapsule" - description = "A damaged capsule with some strange contents." - suffixes = list("datacapsule/datacapsule.dmm") - spawn_cost = 0.5 - template_flags = TEMPLATE_FLAG_CLEAR_CONTENTS | TEMPLATE_FLAG_NO_RUINS - ruin_tags = RUIN_HUMAN|RUIN_WRECK - - apc_test_exempt_areas = list( - /area/map_template/datacapsule = NO_SCRUBBER|NO_VENT|NO_APC - ) - - - -/area/map_template/datacapsule - name = "\improper Ejected Data Capsule" - icon_state = "blue" - - - -/obj/effect/landmark/corpse/zombiescience - name = "Dead Scientist" - corpse_outfits = list(/decl/hierarchy/outfit/zombie_science) - -/decl/hierarchy/outfit/zombie_science - name = OUTFIT_JOB_NAME("Dead Scientist") - uniform = /obj/item/clothing/under/rank/scientist - suit = /obj/item/clothing/suit/bio_suit/anomaly - head = /obj/item/clothing/head/bio_hood/anomaly - -/datum/reagent/zombie/science - name = "Isolated Corruption" - description = "An incredibly dark, oily substance. Moves very slightly." - taste_description = "decayed blood" - color = "#800000" - -/obj/item/reagent_containers/glass/beaker/vial/random_podchem - name = "unmarked vial" - -/obj/item/reagent_containers/glass/beaker/vial/random_podchem/Initialize() - . = ..() - desc += "Label is smudged, and there's crusted blood fingerprints on it." - var/reagent_type = pick(/datum/reagent/random, /datum/reagent/zombie/science, /datum/reagent/rezadone, /datum/reagent/three_eye) - reagents.add_reagent(pick(reagent_type), 5) - -/obj/structure/backup_server - name = "backup server" - icon = 'icons/obj/machines/research.dmi' - icon_state = "server" - desc = "Impact resistant server rack. You might be able to pry a disk out." - var/obj/item/stock_parts/computer/hard_drive/cluster/drive = new /obj/item/stock_parts/computer/hard_drive/cluster - -/obj/structure/backup_server/attackby(obj/item/W, mob/user, var/click_params) - if(isCrowbar(W)) - if (!drive) - to_chat(user, SPAN_WARNING("There is nothing else to take from \the [src].")) - return - - to_chat(user, SPAN_NOTICE("You pry out the data drive from \the [src].")) - playsound(loc, 'sound/items/Crowbar.ogg', 50, 1) - drive.origin_tech = list(TECH_DATA = rand(4,5), TECH_ENGINEERING = rand(4,5), TECH_PHORON = rand(4,5), TECH_COMBAT = rand(2,5), TECH_ESOTERIC = rand(0,6)) - var/obj/item/stock_parts/computer/hard_drive/cluster/extracted_drive = drive - user.put_in_hands(extracted_drive) - drive = null - -/obj/effect/landmark/map_load_mark/ejected_datapod - name = "random datapod contents" - templates = list(/datum/map_template/ejected_datapod_contents, /datum/map_template/ejected_datapod_contents/type2, /datum/map_template/ejected_datapod_contents/type3) - -/datum/map_template/ejected_datapod_contents - name = "random datapod contents #1 (chem vials)" - id = "datapod_1" - mappaths = list("maps/random_ruins/exoplanet_ruins/datacapsule/contents_1.dmm") - -/datum/map_template/ejected_datapod_contents/type2 - name = "random datapod contents #2 (servers)" - id = "datapod_2" - mappaths = list("maps/random_ruins/exoplanet_ruins/datacapsule/contents_2.dmm") - -/datum/map_template/ejected_datapod_contents/type3 - name = "random datapod contents #2 (spiders)" - id = "datapod_3" - mappaths = list("maps/random_ruins/exoplanet_ruins/datacapsule/contents_3.dmm") \ No newline at end of file diff --git a/maps/random_ruins/exoplanet_ruins/datacapsule/datacapsule.dmm b/maps/random_ruins/exoplanet_ruins/datacapsule/datacapsule.dmm deleted file mode 100644 index f0a65aae4eee8..0000000000000 --- a/maps/random_ruins/exoplanet_ruins/datacapsule/datacapsule.dmm +++ /dev/null @@ -1,111 +0,0 @@ -//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE -"a" = ( -/turf/template_noop, -/area/template_noop) -"b" = ( -/obj/effect/paint/black, -/turf/simulated/wall/ocp_wall, -/area/map_template/datacapsule) -"c" = ( -/obj/effect/landmark/scorcher, -/turf/template_noop, -/area/template_noop) -"d" = ( -/obj/machinery/door/blast/shutters, -/turf/simulated/floor/reinforced, -/area/map_template/datacapsule) -"e" = ( -/turf/simulated/wall/ocp_wall, -/area/map_template/datacapsule) -"f" = ( -/turf/simulated/floor/reinforced/airless, -/area/map_template/datacapsule) -"g" = ( -/obj/effect/landmark/map_load_mark/ejected_datapod, -/turf/simulated/floor/reinforced/airless, -/area/map_template/datacapsule) - -(1,1,1) = {" -a -c -c -b -b -b -b -b -b -a -"} -(2,1,1) = {" -a -c -b -b -b -b -b -b -b -b -"} -(3,1,1) = {" -c -c -e -b -f -f -f -f -b -b -"} -(4,1,1) = {" -c -c -c -d -f -g -f -f -b -b -"} -(5,1,1) = {" -c -c -b -b -f -f -f -f -b -b -"} -(6,1,1) = {" -c -c -b -b -b -b -b -b -b -b -"} -(7,1,1) = {" -a -c -c -b -b -b -b -b -b -a -"} diff --git a/maps/random_ruins/exoplanet_ruins/deserted_lab/deserted_lab.dm b/maps/random_ruins/exoplanet_ruins/deserted_lab/deserted_lab.dm deleted file mode 100644 index 10fb0bbc5130f..0000000000000 --- a/maps/random_ruins/exoplanet_ruins/deserted_lab/deserted_lab.dm +++ /dev/null @@ -1,8 +0,0 @@ -/datum/map_template/ruin/exoplanet/deserted_lab - name = "deserted lab" - id = "deserted_lab" - description = "A mid-sized abandoned lab with some enemies, traps, and loot." - suffixes = list("deserted_lab/deserted_lab.dmm") - spawn_cost = 1.5 - template_flags = TEMPLATE_FLAG_CLEAR_CONTENTS|TEMPLATE_FLAG_NO_RUINS - ruin_tags = RUIN_HUMAN \ No newline at end of file diff --git a/maps/random_ruins/exoplanet_ruins/deserted_lab/deserted_lab.dmm b/maps/random_ruins/exoplanet_ruins/deserted_lab/deserted_lab.dmm deleted file mode 100644 index 0b4cc2b438c5f..0000000000000 --- a/maps/random_ruins/exoplanet_ruins/deserted_lab/deserted_lab.dmm +++ /dev/null @@ -1,496 +0,0 @@ -//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE -"aa" = ( -/turf/template_noop, -/area/template_noop) -"ab" = ( -/turf/simulated/wall/r_wall/prepainted{ - paint_color = "#556769" - }, -/area/template_noop) -"ac" = ( -/turf/simulated/floor/tiled/white, -/area/template_noop) -"ad" = ( -/obj/random/loot, -/obj/effect/decal/cleanable/cobweb, -/obj/effect/decal/cleanable/blood, -/obj/effect/decal/cleanable/mucus, -/turf/simulated/floor/tiled/steel_ridged, -/area/template_noop) -"ae" = ( -/obj/random/loot, -/turf/simulated/floor/tiled/steel_ridged, -/area/template_noop) -"af" = ( -/obj/structure/anomaly_container, -/obj/effect/landmark/clear, -/turf/template_noop, -/area/template_noop) -"ag" = ( -/obj/structure/sign/warning/secure_area{ - pixel_y = 32 - }, -/turf/simulated/floor/tiled/white, -/area/template_noop) -"ah" = ( -/obj/structure/mattress/dirty, -/obj/effect/decal/cleanable/blood, -/obj/effect/decal/cleanable/blood/drip, -/turf/simulated/floor/tiled/steel_ridged, -/area/template_noop) -"ai" = ( -/obj/machinery/floodlight, -/obj/effect/landmark/clear, -/turf/template_noop, -/area/template_noop) -"aj" = ( -/obj/structure/sign/warning/science/anomalous_materials{ - pixel_y = 32 - }, -/obj/effect/decal/cleanable/spiderling_remains, -/turf/simulated/floor/tiled/white, -/area/template_noop) -"ak" = ( -/obj/machinery/artifact, -/obj/effect/decal/cleanable/cobweb2, -/turf/simulated/floor/tiled/steel_ridged, -/area/template_noop) -"al" = ( -/obj/random/loot, -/obj/effect/decal/cleanable/mucus, -/turf/simulated/floor/tiled/steel_ridged, -/area/template_noop) -"am" = ( -/obj/effect/wallframe_spawn/reinforced, -/turf/simulated/floor/plating, -/area/template_noop) -"ao" = ( -/obj/random/junk, -/turf/template_noop, -/area/template_noop) -"ap" = ( -/obj/structure/closet/crate, -/obj/effect/landmark/clear, -/turf/template_noop, -/area/template_noop) -"aq" = ( -/obj/effect/decal/cleanable/blood, -/turf/simulated/floor/tiled/white, -/area/template_noop) -"ar" = ( -/obj/structure/closet/crate/trashcart, -/obj/effect/landmark/clear, -/turf/template_noop, -/area/template_noop) -"as" = ( -/obj/structure/closet/crate/freezer/rations, -/obj/effect/landmark/clear, -/turf/template_noop, -/area/template_noop) -"at" = ( -/obj/random/loot, -/mob/living/simple_animal/hostile/voxslug, -/turf/simulated/floor/tiled/steel_ridged, -/area/template_noop) -"au" = ( -/turf/simulated/floor/tiled/steel_ridged, -/area/template_noop) -"av" = ( -/obj/structure/table/standard{ - name = "plastic table frame" - }, -/obj/random/contraband, -/obj/random/masks, -/turf/simulated/floor/tiled/white, -/area/template_noop) -"aw" = ( -/obj/effect/decal/cleanable/mucus, -/mob/living/simple_animal/hostile/creature, -/turf/simulated/floor/tiled/steel_ridged, -/area/template_noop) -"ax" = ( -/obj/structure/bed/chair/office/light, -/obj/structure/closet/walllocker/emerglocker/east, -/turf/simulated/floor/tiled/white, -/area/template_noop) -"ay" = ( -/obj/structure/table/standard{ - name = "plastic table frame" - }, -/turf/simulated/floor/tiled/white, -/area/template_noop) -"az" = ( -/obj/machinery/door/unpowered/simple/wood, -/turf/simulated/floor/carpet/blue2, -/area/template_noop) -"aA" = ( -/obj/structure/sign/monkey_painting{ - pixel_y = -32 - }, -/obj/effect/decal/cleanable/blood, -/turf/simulated/floor/tiled/white, -/area/template_noop) -"aB" = ( -/obj/item/clothing/head/bio_hood/anomaly, -/turf/simulated/floor/tiled/steel_ridged, -/area/template_noop) -"aC" = ( -/obj/random/closet, -/turf/simulated/floor/carpet/blue2, -/area/template_noop) -"aE" = ( -/obj/structure/bookcase/manuals/xenoarchaeology, -/turf/simulated/floor/carpet/blue2, -/area/template_noop) -"aF" = ( -/obj/effect/decal/cleanable/blood, -/turf/simulated/floor/tiled/steel_ridged, -/area/template_noop) -"aG" = ( -/turf/simulated/floor/carpet/blue2, -/area/template_noop) -"aH" = ( -/obj/random/trash, -/obj/random/trash, -/turf/simulated/floor/tiled/steel_ridged, -/area/template_noop) -"aI" = ( -/obj/machinery/door/airlock/vault{ - name = "Door" - }, -/obj/item/beartrap{ - deployed = 1; - icon_state = "beartrap1" - }, -/turf/simulated/floor/tiled/steel_ridged, -/area/template_noop) -"aJ" = ( -/obj/random/trash, -/turf/simulated/floor/tiled/white, -/area/template_noop) -"aK" = ( -/obj/effect/decal/cleanable/spiderling_remains, -/obj/structure/table/standard{ - name = "plastic table frame" - }, -/obj/machinery/reagentgrinder, -/obj/item/reagent_containers/glass/beaker/large, -/turf/simulated/floor/carpet/blue2, -/area/template_noop) -"aL" = ( -/obj/structure/table/rack, -/obj/random/firstaid, -/obj/random/advdevice, -/obj/random/advdevice, -/turf/simulated/floor/tiled/white, -/area/template_noop) -"aM" = ( -/obj/effect/decal/cleanable/vomit, -/obj/item/reagent_containers/glass/paint/random, -/obj/structure/closet/medical_wall/filled{ - pixel_y = 32 - }, -/turf/simulated/floor/carpet/blue2, -/area/template_noop) -"aN" = ( -/obj/effect/decal/cleanable/mucus, -/turf/simulated/floor/tiled/white, -/area/template_noop) -"aP" = ( -/obj/machinery/door/airlock/external, -/turf/simulated/floor/tiled/steel_ridged, -/area/template_noop) -"aQ" = ( -/obj/effect/decal/cleanable/cobweb2, -/obj/structure/closet/cabinet, -/turf/simulated/floor/carpet/blue2, -/area/template_noop) -"aR" = ( -/obj/structure/extinguisher_cabinet{ - pixel_x = -32 - }, -/turf/simulated/floor/carpet/blue2, -/area/template_noop) -"aS" = ( -/obj/random/junk, -/obj/random/junk, -/turf/template_noop, -/area/template_noop) -"aT" = ( -/obj/machinery/door/airlock/vault{ - name = "Door" - }, -/turf/simulated/floor/tiled/steel_ridged, -/area/template_noop) -"aU" = ( -/obj/random/junk, -/obj/structure/bed/chair/office/light, -/turf/simulated/floor/carpet/blue2, -/area/template_noop) -"aV" = ( -/obj/item/material/harpoon, -/obj/effect/landmark/corpse/scientist, -/obj/effect/decal/cleanable/blood, -/turf/simulated/floor/tiled/white, -/area/template_noop) -"aW" = ( -/obj/item/beartrap, -/obj/structure/sign/warning/science/anomalous_materials{ - pixel_x = 32 - }, -/turf/simulated/floor/tiled/steel_ridged, -/area/template_noop) -"aX" = ( -/obj/random/trash, -/turf/simulated/floor/carpet/blue2, -/area/template_noop) -"aY" = ( -/obj/structure/bed/padded, -/obj/item/bedsheet/purple, -/turf/simulated/floor/carpet/blue2, -/area/template_noop) -"aZ" = ( -/obj/structure/railing/mapped, -/obj/machinery/replicator, -/turf/simulated/floor/carpet/blue2, -/area/template_noop) -"ba" = ( -/obj/random/snack, -/turf/simulated/floor/carpet/blue2, -/area/template_noop) -"bb" = ( -/obj/structure/table/rack, -/obj/random/powercell, -/obj/random/voidsuit, -/obj/random/voidhelmet, -/obj/random/toolbox, -/turf/simulated/floor/carpet/blue2, -/area/template_noop) -"bc" = ( -/obj/structure/bed/padded, -/obj/item/bedsheet/mime, -/turf/simulated/floor/carpet/blue2, -/area/template_noop) -"bd" = ( -/obj/effect/decal/cleanable/blood/drip, -/turf/simulated/floor/tiled/white, -/area/template_noop) -"be" = ( -/obj/effect/decal/cleanable/mucus, -/turf/simulated/floor/carpet/blue2, -/area/template_noop) -"bf" = ( -/obj/random/trash, -/obj/effect/decal/cleanable/blood, -/obj/effect/decal/cleanable/mucus, -/mob/living/simple_animal/hostile/creature, -/turf/simulated/floor/tiled/steel_ridged, -/area/template_noop) -"bg" = ( -/obj/random/trash, -/obj/structure/filingcabinet/wallcabinet{ - pixel_y = -32 - }, -/obj/effect/decal/cleanable/blood/drip, -/turf/simulated/floor/tiled/white, -/area/template_noop) -"za" = ( -/obj/effect/landmark/clear, -/turf/template_noop, -/area/template_noop) - -(1,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -za -aa -aa -"} -(2,1,1) = {" -ao -ab -ab -ab -ab -ab -ab -ab -ab -ab -aP -ab -aa -"} -(3,1,1) = {" -aa -ab -ad -aw -aI -ac -aV -aL -ab -aB -au -ab -ao -"} -(4,1,1) = {" -aa -ab -al -bf -am -aq -aJ -ac -aP -au -aW -ab -aa -"} -(5,1,1) = {" -aa -ab -ab -ab -ab -ag -ac -ab -ab -ab -ab -ab -aS -"} -(6,1,1) = {" -aa -ab -ah -aF -aT -aN -aA -ab -aZ -aR -aC -ab -aa -"} -(7,1,1) = {" -aa -ab -ak -aH -am -ac -bg -ab -aE -aU -aK -am -aa -"} -(8,1,1) = {" -aa -ab -ab -ab -ab -aj -bd -az -ba -aX -bb -am -aa -"} -(9,1,1) = {" -aa -ab -at -au -aT -bd -av -ab -aM -be -aG -am -aa -"} -(10,1,1) = {" -aa -ab -au -ae -am -ax -ay -ab -aQ -aY -bc -ab -aa -"} -(11,1,1) = {" -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -"} -(12,1,1) = {" -aa -ab -za -af -ab -ai -ai -ab -ap -ar -as -ab -aa -"} -(13,1,1) = {" -aa -aa -za -za -za -za -za -za -za -za -za -aa -aa -"} diff --git a/maps/random_ruins/exoplanet_ruins/drill_site/drill_site.dm b/maps/random_ruins/exoplanet_ruins/drill_site/drill_site.dm deleted file mode 100644 index f5e0e5bc26c8a..0000000000000 --- a/maps/random_ruins/exoplanet_ruins/drill_site/drill_site.dm +++ /dev/null @@ -1,8 +0,0 @@ -/datum/map_template/ruin/exoplanet/drill_site - name = "drill site" - id = "drill_site" - description = "A small, abandoned mining drill operation." - suffixes = list("drill_site/drill_site.dmm") - spawn_cost = 0.5 - template_flags = TEMPLATE_FLAG_CLEAR_CONTENTS|TEMPLATE_FLAG_NO_RUINS - ruin_tags = RUIN_HUMAN \ No newline at end of file diff --git a/maps/random_ruins/exoplanet_ruins/drill_site/drill_site.dmm b/maps/random_ruins/exoplanet_ruins/drill_site/drill_site.dmm deleted file mode 100644 index 4c8988ca68389..0000000000000 --- a/maps/random_ruins/exoplanet_ruins/drill_site/drill_site.dmm +++ /dev/null @@ -1,150 +0,0 @@ -//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE -"a" = ( -/turf/template_noop, -/area/template_noop) -"b" = ( -/obj/random/trash, -/obj/effect/landmark/clear, -/turf/template_noop, -/area/template_noop) -"d" = ( -/obj/random/loot, -/obj/random/junk, -/obj/effect/landmark/clear, -/turf/template_noop, -/area/template_noop) -"e" = ( -/obj/machinery/floodlight, -/obj/effect/landmark/clear, -/turf/template_noop, -/area/template_noop) -"f" = ( -/obj/machinery/mining/brace, -/obj/effect/landmark/clear, -/turf/template_noop, -/area/template_noop) -"g" = ( -/obj/structure/ore_box, -/obj/effect/landmark/clear, -/turf/template_noop, -/area/template_noop) -"h" = ( -/obj/random/tool, -/obj/effect/landmark/clear, -/obj/effect/landmark/clear, -/turf/template_noop, -/area/template_noop) -"j" = ( -/obj/random/tool, -/obj/effect/landmark/clear, -/turf/template_noop, -/area/template_noop) -"k" = ( -/obj/machinery/mining/drill, -/obj/effect/landmark/clear, -/turf/template_noop, -/area/template_noop) -"l" = ( -/obj/structure/pit, -/obj/effect/landmark/clear, -/turf/template_noop, -/area/template_noop) -"n" = ( -/obj/random/drinkbottle, -/obj/effect/landmark/clear, -/turf/template_noop, -/area/template_noop) -"s" = ( -/obj/random/loot, -/obj/effect/landmark/clear, -/turf/template_noop, -/area/template_noop) -"u" = ( -/obj/effect/landmark/clear, -/turf/template_noop, -/area/template_noop) -"y" = ( -/obj/random/hat, -/obj/effect/landmark/clear, -/turf/template_noop, -/area/template_noop) -"C" = ( -/obj/random/trash, -/obj/effect/landmark/clear, -/obj/effect/landmark/clear, -/turf/template_noop, -/area/template_noop) -"H" = ( -/obj/random/powercell, -/obj/effect/landmark/clear, -/turf/template_noop, -/area/template_noop) -"O" = ( -/obj/random/toolbox, -/obj/effect/landmark/clear, -/turf/template_noop, -/area/template_noop) - -(1,1,1) = {" -a -b -u -u -j -a -a -"} -(2,1,1) = {" -u -u -f -u -b -n -a -"} -(3,1,1) = {" -b -d -g -u -k -u -O -"} -(4,1,1) = {" -u -u -u -s -l -u -u -"} -(5,1,1) = {" -a -e -b -u -u -b -u -"} -(6,1,1) = {" -a -H -b -u -h -C -y -"} -(7,1,1) = {" -a -a -a -b -u -u -a -"} diff --git a/maps/random_ruins/exoplanet_ruins/ec_old_crash/ec_old_crash.dm b/maps/random_ruins/exoplanet_ruins/ec_old_crash/ec_old_crash.dm deleted file mode 100644 index 1be0f00a0f8c9..0000000000000 --- a/maps/random_ruins/exoplanet_ruins/ec_old_crash/ec_old_crash.dm +++ /dev/null @@ -1,98 +0,0 @@ -/datum/map_template/ruin/exoplanet/ec_old_crash - name = "Expeditionary Ship" - id = "ec_old_wreck" - description = "An abandoned ancient STL exploration ship." - suffixes = list("ec_old_crash/ec_old_crash.dmm") - spawn_cost = 0.5 - apc_test_exempt_areas = list( - /area/map_template/ecship/engine = NO_SCRUBBER|NO_VENT|NO_APC, - /area/map_template/ecship/cockpit = NO_SCRUBBER|NO_APC - ) - ruin_tags = RUIN_HUMAN|RUIN_WRECK - template_flags = TEMPLATE_FLAG_CLEAR_CONTENTS | TEMPLATE_FLAG_NO_RUINS - -/area/map_template/ecship/crew - name = "\improper Crew Area" - icon_state = "crew_quarters" - -/area/map_template/ecship/science - name = "\improper Science Module" - icon_state = "xeno_lab" - -/area/map_template/ecship/cryo - name = "\improper Cryosleep Module" - icon_state = "cryo" - -/area/map_template/ecship/engineering - name = "\improper Engineering" - icon_state = "engineering_supply" - -/area/map_template/ecship/engine - name = "\improper Engine Exterior" - icon_state = "engine" - area_flags = AREA_FLAG_EXTERNAL - -/area/map_template/ecship/cockpit - name = "\improper Cockpit" - icon_state = "bridge" - -//Low pressure setup -/obj/machinery/atmospherics/unary/vent_pump/low - use_power = 1 - icon_state = "map_vent_out" - external_pressure_bound = 0.25 * ONE_ATMOSPHERE - -/turf/simulated/floor/tiled/lowpressure - initial_gas = list(GAS_CO2 = MOLES_O2STANDARD) - -/turf/simulated/floor/tiled/white/lowpressure - initial_gas = list(GAS_CO2 = MOLES_O2STANDARD) - -/obj/item/disk/astrodata - name = "astronomical data disk" - desc = "A disk with a wealth of astronomical data recorded. Astrophysicists at the EC Observatory would love to see this." - icon = 'icons/obj/cloning.dmi' - icon_state = "datadisk0" - item_state = "card-id" - w_class = ITEM_SIZE_SMALL - -/obj/item/ecletters - name = "bundle of letters" - icon = 'icons/obj/bureaucracy.dmi' - icon_state = "docs_part" - item_state = "paper" - -/obj/item/ecletters/Initialize() - . = ..() - desc = "A bunch of letters from Expeditionary Corps explorers to their family and loved ones, dated [GLOB.using_map.game_year - 142]. They're not hopeful." - -/obj/item/paper/ecrashlog - name = "handwritten note" - -/obj/item/paper/ecrashlog/Initialize() - . = ..() - var/shipname = "TEV [pick("Magellan", "Gagarin", "Drake", "Horizon", "Aurora")]" - var/decl/cultural_info/S = SSculture.get_culture(CULTURE_HUMAN_EARTH) - var/new_info = {" - I am Lieutenant Hao Ru, captain of [shipname], of the Terran Commonwealth Expeditionary Corps.
              - We are dying. The Ran Mission has failed.
              - Our ship has suffered a catastrophic chain of failures whist crew was in cryotransit. It started with thruster controls going inoperable, and our auto-pilot was unable to adjust course away from an asteroid cluster.
              - We've lost the navigational suite from impacts, and are flying blind. We have tried every option, and our engineers have ascertained that there is no way to repair it in the field.
              - Most of the crew have accepted their fate quietly, and have opted to go back into cryo for a slim hope of rescue, if we were to be found before backup power runs out. I will soon join them, after completing my duty.
              - I've used this module as a strongbox, because it is only one rated for re-entry. I leave the astrodata I managed to salvage here. It has a few promising scans. I would not want it to be wasted.
              - Some of the crew wrote letters to their kin, in case we are found. They deserve any consolation they get, so I've put the letters here, too.
              - The crew for this mission is:
              - Ensign [S.get_random_name(pick(MALE,FEMALE))]
              - Ensign [S.get_random_name(pick(MALE,FEMALE))]
              - Chief Explorer [S.get_random_name(pick(MALE,FEMALE))]
              - Senior Explorer [S.get_random_name(pick(MALE,FEMALE))]
              - Senior Explorer [S.get_random_name(pick(MALE,FEMALE))]
              - Explorer [S.get_random_name(pick(MALE,FEMALE))]
              - I am Lieutenant Hao Ru, captain of [shipname] of the Terran Commonwealth Expeditionary Corps. I will be joining my crew in cryo now.
              - 3rd December [GLOB.using_map.game_year - 142] - "} - set_content(new_info) - -/obj/machinery/alarm/low/Initialize() - . = ..() - TLV["pressure"] = list(ONE_ATMOSPHERE*0.10,ONE_ATMOSPHERE*0.20,ONE_ATMOSPHERE*1.10,ONE_ATMOSPHERE*1.20) diff --git a/maps/random_ruins/exoplanet_ruins/ec_old_crash/ec_old_crash.dmm b/maps/random_ruins/exoplanet_ruins/ec_old_crash/ec_old_crash.dmm deleted file mode 100644 index df1bdc18f7181..0000000000000 --- a/maps/random_ruins/exoplanet_ruins/ec_old_crash/ec_old_crash.dmm +++ /dev/null @@ -1,3492 +0,0 @@ -//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE -"aa" = ( -/turf/template_noop, -/area/template_noop) -"ab" = ( -/obj/effect/landmark/scorcher, -/turf/simulated/wall/r_wall/hull, -/area/map_template/ecship/cryo) -"ac" = ( -/turf/simulated/wall/r_wall/hull, -/area/map_template/ecship/cockpit) -"ad" = ( -/obj/effect/landmark/scorcher, -/obj/effect/landmark/clear, -/turf/template_noop, -/area/map_template/ecship/cockpit) -"ae" = ( -/obj/effect/wallframe_spawn/reinforced, -/obj/machinery/door/blast/regular{ - density = 0; - icon_state = "pdoor0"; - id_tag = "scraplock"; - name = "External Blast Doors"; - opacity = 0 - }, -/obj/machinery/door/firedoor, -/obj/effect/landmark/scorcher, -/turf/simulated/floor, -/area/map_template/ecship/cockpit) -"af" = ( -/obj/machinery/computer/modular/preset/cardslot/command, -/turf/simulated/floor/airless, -/area/map_template/ecship/cockpit) -"ag" = ( -/obj/structure/grille, -/obj/effect/landmark/clear, -/turf/template_noop, -/area/template_noop) -"ak" = ( -/obj/structure/table/standard, -/obj/item/device/radio, -/turf/simulated/floor/airless, -/area/map_template/ecship/cockpit) -"al" = ( -/obj/structure/table/standard, -/obj/machinery/button/blast_door{ - id_tag = "scraplock"; - name = "External Lockdown" - }, -/obj/machinery/light{ - dir = 4; - icon_state = "tube1" - }, -/obj/structure/cable{ - d1 = 16; - d2 = 0; - dir = 1; - icon_state = "0-4" - }, -/turf/simulated/floor/airless, -/area/map_template/ecship/cockpit) -"am" = ( -/obj/machinery/atmospherics/unary/vent_pump/low{ - dir = 4; - level = 2 - }, -/obj/machinery/alarm/low{ - dir = 4; - pixel_x = -24 - }, -/turf/simulated/floor/airless, -/area/map_template/ecship/cockpit) -"an" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/obj/structure/cable{ - icon_state = "1-2" - }, -/turf/simulated/floor/airless, -/area/map_template/ecship/cockpit) -"ao" = ( -/obj/effect/wallframe_spawn/reinforced, -/obj/machinery/door/firedoor, -/obj/machinery/door/blast/regular, -/turf/simulated/floor, -/area/map_template/ecship/science) -"ap" = ( -/turf/simulated/floor/airless, -/area/map_template/ecship/cockpit) -"aq" = ( -/turf/simulated/wall/r_wall/hull, -/area/map_template/ecship/crew) -"ar" = ( -/obj/machinery/door/airlock/autoname, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable{ - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/lowpressure, -/area/map_template/ecship/cockpit) -"as" = ( -/turf/simulated/wall/r_wall/hull, -/area/map_template/ecship/cryo) -"at" = ( -/obj/effect/landmark/scorcher, -/turf/template_noop, -/area/map_template/ecship/cryo) -"au" = ( -/obj/effect/floor_decal/corner/purple{ - dir = 5 - }, -/obj/machinery/light{ - dir = 4; - icon_state = "tube1" - }, -/obj/structure/table/glass, -/obj/item/disk/astrodata, -/turf/simulated/floor/tiled/white, -/area/map_template/ecship/science) -"av" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable{ - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/airless, -/area/map_template/ecship/crew) -"aw" = ( -/obj/structure/sign/ecplaque{ - pixel_y = 32 - }, -/obj/effect/floor_decal/corner/purple{ - dir = 5 - }, -/obj/machinery/suit_storage_unit/standard_unit, -/turf/simulated/floor/tiled/airless, -/area/map_template/ecship/crew) -"ax" = ( -/obj/effect/floor_decal/corner/purple{ - dir = 5 - }, -/obj/machinery/suit_storage_unit/standard_unit, -/turf/simulated/floor/tiled/airless, -/area/map_template/ecship/crew) -"ay" = ( -/obj/machinery/light{ - dir = 8; - icon_state = "tube1" - }, -/obj/structure/closet/walllocker/emerglocker/west, -/turf/simulated/floor/tiled/airless, -/area/map_template/ecship/crew) -"az" = ( -/obj/structure/shuttle/engine/propulsion{ - dir = 8 - }, -/turf/simulated/floor/plating, -/area/map_template/ecship/cryo) -"aA" = ( -/turf/simulated/wall/r_wall/hull, -/area/map_template/ecship/science) -"aB" = ( -/turf/template_noop, -/area/map_template/ecship/science) -"aC" = ( -/obj/machinery/atmospherics/unary/vent_pump/low{ - dir = 4; - level = 2 - }, -/obj/item/stool/padded, -/turf/simulated/floor/tiled/airless, -/area/map_template/ecship/crew) -"aD" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 8 - }, -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/item/reagent_containers/chem_disp_cartridge/coffee{ - name = "coffee canister" - }, -/turf/simulated/floor/tiled/airless, -/area/map_template/ecship/crew) -"aE" = ( -/obj/structure/broken_cryo, -/obj/machinery/light/small{ - dir = 1; - icon_state = "bulb1" - }, -/obj/structure/closet/walllocker/emerglocker/west, -/turf/simulated/floor/tiled/white, -/area/map_template/ecship/cryo) -"aF" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 8 - }, -/turf/simulated/floor/tiled/airless, -/area/map_template/ecship/crew) -"aG" = ( -/obj/machinery/light{ - dir = 4; - icon_state = "tube1" - }, -/obj/item/stool/padded, -/turf/simulated/floor/tiled/airless, -/area/map_template/ecship/crew) -"aI" = ( -/obj/structure/broken_cryo, -/turf/simulated/floor/tiled/white, -/area/map_template/ecship/cryo) -"aJ" = ( -/obj/structure/table/glass, -/obj/item/ecletters, -/obj/item/paper/ecrashlog, -/turf/simulated/floor/tiled/white, -/area/map_template/ecship/science) -"aK" = ( -/obj/structure/shuttle/engine/propulsion{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/map_template/ecship/science) -"aL" = ( -/obj/effect/wallframe_spawn/reinforced, -/obj/machinery/door/blast/regular{ - density = 0; - icon_state = "pdoor0"; - id_tag = "scraplock"; - name = "External Blast Doors"; - opacity = 0 - }, -/obj/machinery/door/firedoor, -/turf/simulated/floor, -/area/map_template/ecship/crew) -"aM" = ( -/obj/structure/reagent_dispensers/water_cooler, -/obj/structure/handrail{ - dir = 4 - }, -/obj/effect/floor_decal/corner/blue/diagonal, -/obj/effect/floor_decal/corner/paleblue/diagonal{ - dir = 4 - }, -/turf/simulated/floor/tiled/airless, -/area/map_template/ecship/crew) -"aN" = ( -/obj/effect/floor_decal/corner/blue/diagonal, -/obj/effect/floor_decal/corner/paleblue/diagonal{ - dir = 4 - }, -/turf/simulated/floor/tiled/airless, -/area/map_template/ecship/crew) -"aO" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/item/deck/cards, -/turf/simulated/floor/tiled/airless, -/area/map_template/ecship/crew) -"aP" = ( -/obj/structure/closet/crate/freezer/rations, -/obj/structure/handrail{ - dir = 8 - }, -/obj/effect/floor_decal/corner/blue/diagonal, -/obj/effect/floor_decal/corner/paleblue/diagonal{ - dir = 4 - }, -/turf/simulated/floor/tiled/airless, -/area/map_template/ecship/crew) -"aQ" = ( -/obj/structure/handrail{ - dir = 4 - }, -/obj/effect/floor_decal/corner/blue/diagonal, -/obj/item/stool/padded, -/obj/effect/floor_decal/corner/paleblue/diagonal{ - dir = 4 - }, -/obj/machinery/alarm/low{ - dir = 4; - pixel_x = -24 - }, -/turf/simulated/floor/tiled/airless, -/area/map_template/ecship/crew) -"aR" = ( -/obj/structure/curtain/open/shower{ - pixel_y = 16 - }, -/obj/structure/curtain/open/shower, -/obj/structure/hygiene/toilet, -/obj/machinery/light/small{ - dir = 8; - icon_state = "bulb1" - }, -/obj/structure/closet/walllocker/emerglocker/west, -/turf/simulated/floor/tiled/airless, -/area/map_template/ecship/cryo) -"aS" = ( -/obj/effect/floor_decal/industrial/warning/full, -/obj/machinery/light/small/red, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/airless, -/area/map_template/ecship/cryo) -"aT" = ( -/obj/structure/sign/ecplaque{ - pixel_x = -26 - }, -/obj/structure/closet/wardrobe/mixed, -/turf/simulated/floor/tiled/white, -/area/map_template/ecship/cryo) -"aU" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/turf/simulated/floor/tiled/white, -/area/map_template/ecship/cryo) -"aV" = ( -/turf/simulated/floor/tiled/white, -/area/map_template/ecship/cryo) -"aW" = ( -/obj/structure/broken_cryo, -/obj/machinery/light/small{ - dir = 4; - icon_state = "bulb1" - }, -/turf/simulated/floor/tiled/white, -/area/map_template/ecship/cryo) -"aX" = ( -/obj/effect/floor_decal/corner/purple{ - dir = 5 - }, -/obj/machinery/light{ - dir = 8; - icon_state = "tube1" - }, -/obj/structure/table/glass, -/turf/simulated/floor/tiled/white, -/area/map_template/ecship/science) -"aY" = ( -/obj/effect/floor_decal/corner/purple{ - dir = 5 - }, -/obj/structure/table/glass, -/obj/item/storage/box/monkeycubes, -/turf/simulated/floor/tiled/white, -/area/map_template/ecship/science) -"aZ" = ( -/obj/effect/floor_decal/corner/purple{ - dir = 5 - }, -/obj/structure/table/glass, -/turf/simulated/floor/tiled/white, -/area/map_template/ecship/science) -"ba" = ( -/obj/machinery/door/airlock/external, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor, -/area/map_template/ecship/cryo) -"bb" = ( -/obj/effect/wallframe_spawn/reinforced, -/obj/machinery/door/firedoor, -/obj/machinery/door/blast/regular{ - dir = 4; - id_tag = "fusion_observation" - }, -/turf/simulated/floor, -/area/map_template/ecship/science) -"bc" = ( -/obj/item/soap, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/turf/simulated/floor/tiled/airless, -/area/map_template/ecship/cryo) -"bd" = ( -/obj/structure/table/standard, -/obj/effect/floor_decal/corner/blue/diagonal, -/obj/effect/floor_decal/corner/paleblue/diagonal{ - dir = 4 - }, -/turf/simulated/floor/tiled/airless, -/area/map_template/ecship/crew) -"be" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 1 - }, -/turf/simulated/floor/tiled/airless, -/area/map_template/ecship/cryo) -"bf" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable{ - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/airless, -/area/map_template/ecship/crew) -"bg" = ( -/obj/structure/hygiene/sink{ - pixel_y = -14 - }, -/obj/structure/curtain/open/shower, -/obj/structure/curtain/open/shower{ - dir = 1; - icon_state = "shower" - }, -/obj/structure/cable, -/obj/machinery/alarm/low{ - dir = 4; - pixel_x = -24 - }, -/obj/machinery/power/apc/derelict, -/turf/simulated/floor/tiled/airless, -/area/map_template/ecship/cryo) -"bh" = ( -/obj/structure/hygiene/sink{ - pixel_y = -14 - }, -/obj/structure/curtain/open/shower, -/obj/structure/curtain/open/shower{ - dir = 1; - icon_state = "shower" - }, -/obj/machinery/atmospherics/unary/vent_pump/low{ - dir = 1 - }, -/turf/simulated/floor/tiled/airless, -/area/map_template/ecship/cryo) -"bi" = ( -/obj/structure/catwalk, -/obj/effect/landmark/scorcher, -/obj/effect/landmark/clear, -/turf/template_noop, -/area/map_template/ecship/engine) -"bj" = ( -/obj/structure/handrail{ - dir = 8 - }, -/obj/effect/floor_decal/corner/blue/diagonal, -/obj/item/stool/padded, -/obj/effect/floor_decal/corner/paleblue/diagonal{ - dir = 4 - }, -/turf/simulated/floor/tiled/airless, -/area/map_template/ecship/crew) -"bk" = ( -/obj/structure/catwalk, -/obj/structure/cable{ - dir = 8; - icon_state = "1-4" - }, -/obj/effect/landmark/scorcher, -/obj/effect/landmark/clear, -/turf/template_noop, -/area/map_template/ecship/engine) -"bl" = ( -/obj/machinery/door/airlock/autoname, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/ecship/cryo) -"bm" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/ecship/cryo) -"bn" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/ecship/cryo) -"bo" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/airless, -/area/map_template/ecship/crew) -"bp" = ( -/obj/effect/floor_decal/corner/purple{ - dir = 9 - }, -/obj/structure/handrail{ - dir = 4 - }, -/obj/structure/window/reinforced{ - dir = 1 - }, -/obj/structure/window/reinforced{ - dir = 8 - }, -/obj/effect/floor_decal/corner/purple{ - dir = 5 - }, -/obj/item/remains/xeno, -/turf/simulated/floor/tiled/white, -/area/map_template/ecship/science) -"bq" = ( -/obj/structure/broken_cryo{ - dir = 1 - }, -/obj/machinery/light/small, -/obj/structure/closet/walllocker/emerglocker/west, -/turf/simulated/floor/tiled/white, -/area/map_template/ecship/cryo) -"br" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/turf/simulated/floor/tiled/white, -/area/map_template/ecship/science) -"bs" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/optable, -/turf/simulated/floor/tiled/white, -/area/map_template/ecship/science) -"bt" = ( -/obj/structure/reagent_dispensers/watertank, -/obj/item/reagent_containers/glass/bucket, -/turf/simulated/floor/tiled/white, -/area/map_template/ecship/science) -"bu" = ( -/obj/effect/floor_decal/corner/purple{ - dir = 6 - }, -/obj/structure/handrail{ - dir = 8 - }, -/obj/structure/closet/secure_closet/hydroponics_torch, -/turf/simulated/floor/tiled/white, -/area/map_template/ecship/science) -"bv" = ( -/obj/structure/broken_cryo{ - dir = 1 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/ecship/cryo) -"bw" = ( -/obj/structure/catwalk, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/landmark/scorcher, -/obj/effect/landmark/clear, -/turf/template_noop, -/area/map_template/ecship/engine) -"bx" = ( -/obj/effect/floor_decal/corner/blue/diagonal, -/obj/effect/floor_decal/corner/paleblue/diagonal{ - dir = 4 - }, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 4 - }, -/turf/simulated/floor/tiled/airless, -/area/map_template/ecship/crew) -"by" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 8 - }, -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/structure/cable{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/item/board, -/turf/simulated/floor/tiled/airless, -/area/map_template/ecship/crew) -"bz" = ( -/obj/effect/floor_decal/corner/blue/diagonal, -/obj/effect/floor_decal/corner/paleblue/diagonal{ - dir = 4 - }, -/obj/machinery/atmospherics/unary/vent_pump/low{ - dir = 8 - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/airless, -/area/map_template/ecship/crew) -"bA" = ( -/obj/structure/handrail{ - dir = 8 - }, -/obj/effect/floor_decal/corner/blue/diagonal, -/obj/effect/floor_decal/corner/paleblue/diagonal{ - dir = 4 - }, -/obj/machinery/power/apc{ - dir = 4 - }, -/obj/structure/cable{ - d1 = 16; - d2 = 0; - dir = 1; - icon_state = "0-4" - }, -/turf/simulated/floor/tiled/airless, -/area/map_template/ecship/crew) -"bB" = ( -/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply, -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/structure/cable{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/structure/cable{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/item/stool/padded, -/turf/simulated/floor/tiled/airless, -/area/map_template/ecship/crew) -"bC" = ( -/obj/structure/catwalk, -/obj/machinery/atmospherics/pipe/simple/visible/cyan{ - dir = 10 - }, -/obj/structure/cable{ - dir = 4; - icon_state = "1-2" - }, -/obj/effect/landmark/scorcher, -/obj/effect/landmark/clear, -/turf/template_noop, -/area/map_template/ecship/engine) -"bD" = ( -/obj/structure/closet/wardrobe/mixed, -/obj/machinery/alarm/low{ - dir = 4; - pixel_x = -24 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/ecship/cryo) -"bE" = ( -/obj/machinery/atmospherics/unary/vent_pump/low{ - dir = 1 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/ecship/cryo) -"bF" = ( -/obj/effect/floor_decal/corner/purple{ - dir = 9 - }, -/obj/structure/handrail{ - dir = 4 - }, -/obj/structure/window/reinforced{ - dir = 8 - }, -/obj/effect/floor_decal/corner/purple{ - dir = 10 - }, -/obj/machinery/door/window/southright, -/turf/simulated/floor/tiled/white, -/area/map_template/ecship/science) -"bG" = ( -/obj/structure/window/reinforced{ - dir = 4 - }, -/obj/structure/window/reinforced, -/obj/effect/floor_decal/corner/purple{ - dir = 6 - }, -/obj/effect/floor_decal/corner/purple{ - dir = 10 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/ecship/science) -"bH" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/white, -/area/map_template/ecship/science) -"bI" = ( -/obj/effect/floor_decal/corner/purple{ - dir = 10 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/ecship/science) -"bJ" = ( -/turf/simulated/floor/tiled/white, -/area/map_template/ecship/science) -"bK" = ( -/obj/effect/floor_decal/corner/purple{ - dir = 6 - }, -/obj/structure/handrail{ - dir = 8 - }, -/obj/machinery/vending/hydronutrients{ - categories = 3 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/ecship/science) -"bL" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 9; - icon_state = "warning" - }, -/obj/structure/curtain/open/shower{ - pixel_y = 16 - }, -/obj/structure/curtain/open/shower, -/obj/structure/sign/warning/nosmoking_2{ - pixel_x = -26 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/ecship/science) -"bM" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 1 - }, -/obj/machinery/light/small{ - dir = 1; - icon_state = "bulb1" - }, -/obj/structure/curtain/open/shower{ - pixel_y = 16 - }, -/obj/structure/curtain/open/shower, -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/turf/simulated/floor/tiled/white, -/area/map_template/ecship/science) -"bN" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 5 - }, -/obj/structure/curtain/open/shower{ - pixel_y = 16 - }, -/obj/structure/curtain/open/shower, -/turf/simulated/floor/tiled/white, -/area/map_template/ecship/science) -"bO" = ( -/obj/structure/sign/warning/science, -/turf/simulated/wall/r_wall/hull, -/area/map_template/ecship/science) -"bP" = ( -/obj/machinery/door/airlock/external, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor, -/area/map_template/ecship/crew) -"bQ" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/airless, -/area/map_template/ecship/crew) -"bR" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 4; - icon_state = "warning" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/airless, -/area/map_template/ecship/crew) -"bS" = ( -/obj/structure/bed, -/obj/structure/curtain/open/bed, -/turf/simulated/floor/tiled/dark/airless, -/area/map_template/ecship/crew) -"bT" = ( -/obj/structure/bed, -/obj/structure/curtain/open/bed, -/obj/machinery/light, -/turf/simulated/floor/tiled/dark/airless, -/area/map_template/ecship/crew) -"bV" = ( -/obj/structure/catwalk, -/obj/structure/cable{ - dir = 4; - icon_state = "1-2" - }, -/obj/effect/landmark/clear, -/turf/template_noop, -/area/map_template/ecship/engine) -"bW" = ( -/obj/effect/floor_decal/corner/purple{ - dir = 9 - }, -/obj/structure/handrail{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/ecship/science) -"bX" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 - }, -/obj/effect/floor_decal/corner/purple{ - dir = 6 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/ecship/science) -"bY" = ( -/obj/structure/catwalk, -/obj/structure/cable{ - icon_state = "2-8" - }, -/obj/effect/landmark/clear, -/turf/template_noop, -/area/map_template/ecship/engine) -"bZ" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 1 - }, -/obj/effect/floor_decal/corner/purple{ - dir = 9 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/ecship/science) -"ca" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/item/scalpel{ - pixel_y = 12 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/ecship/science) -"cb" = ( -/obj/effect/floor_decal/corner/purple{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/ecship/science) -"cc" = ( -/obj/machinery/door/airlock/autoname, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/ecship/science) -"cd" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 8; - icon_state = "warning" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/ecship/science) -"ce" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 1 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/ecship/science) -"cf" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 4; - icon_state = "warning" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/turf/simulated/floor/tiled/white, -/area/map_template/ecship/science) -"cg" = ( -/obj/machinery/door/airlock/external, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor, -/area/map_template/ecship/science) -"ch" = ( -/obj/effect/floor_decal/industrial/warning/full, -/obj/machinery/light/small/red, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor, -/area/map_template/ecship/science) -"ci" = ( -/obj/structure/catwalk, -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/structure/cable{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/structure/cable{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/effect/landmark/scorcher, -/obj/effect/landmark/clear, -/turf/template_noop, -/area/map_template/ecship/engine) -"cj" = ( -/obj/structure/catwalk, -/obj/machinery/atmospherics/pipe/simple/visible/cyan, -/obj/effect/landmark/scorcher, -/obj/effect/landmark/clear, -/turf/template_noop, -/area/map_template/ecship/engine) -"ck" = ( -/obj/structure/shuttle/engine/propulsion{ - dir = 8 - }, -/turf/simulated/wall/r_wall/hull, -/area/map_template/ecship/cryo) -"cl" = ( -/obj/effect/floor_decal/corner/purple{ - dir = 9 - }, -/obj/structure/handrail{ - dir = 4 - }, -/obj/structure/window/reinforced{ - dir = 8 - }, -/obj/effect/floor_decal/corner/purple{ - dir = 5 - }, -/obj/machinery/door/window/northleft, -/turf/simulated/floor/tiled/white, -/area/map_template/ecship/science) -"cm" = ( -/obj/structure/window/reinforced{ - dir = 4 - }, -/obj/structure/window/reinforced{ - dir = 1 - }, -/obj/effect/floor_decal/corner/purple{ - dir = 6 - }, -/obj/effect/floor_decal/corner/purple{ - dir = 5 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/ecship/science) -"cn" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/portable_atmospherics/hydroponics{ - closed_system = 1; - name = "isolation tray" - }, -/turf/simulated/floor/tiled/white, -/area/map_template/ecship/science) -"co" = ( -/obj/machinery/portable_atmospherics/hydroponics{ - closed_system = 1; - name = "isolation tray" - }, -/obj/effect/floor_decal/corner/purple{ - dir = 5 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/ecship/science) -"cp" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/tiled/white, -/area/map_template/ecship/science) -"cq" = ( -/obj/effect/floor_decal/corner/purple{ - dir = 6 - }, -/obj/structure/sign/warning/nosmoking_2{ - pixel_x = 26 - }, -/obj/structure/handrail{ - dir = 8 - }, -/obj/machinery/botany/extractor, -/turf/simulated/floor/tiled/white, -/area/map_template/ecship/science) -"cr" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 10 - }, -/obj/structure/closet/l3closet, -/obj/machinery/alarm/low{ - dir = 4; - pixel_x = -24 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/ecship/science) -"cs" = ( -/obj/effect/floor_decal/industrial/warning, -/obj/structure/closet/l3closet, -/obj/structure/fireaxecabinet{ - pixel_y = -32 - }, -/obj/machinery/light/small, -/obj/machinery/atmospherics/unary/vent_pump/low{ - dir = 1 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/ecship/science) -"ct" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 6; - icon_state = "warning" - }, -/obj/structure/closet/l3closet, -/obj/structure/cable, -/obj/machinery/power/apc/derelict{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/ecship/science) -"cu" = ( -/obj/machinery/door/airlock/autoname, -/turf/simulated/floor/tiled/lowpressure, -/area/map_template/ecship/crew) -"cv" = ( -/obj/effect/floor_decal/corner/purple{ - dir = 9 - }, -/obj/structure/handrail{ - dir = 4 - }, -/obj/structure/window/reinforced, -/obj/structure/window/reinforced{ - dir = 8 - }, -/obj/effect/floor_decal/corner/purple{ - dir = 10 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/ecship/science) -"cw" = ( -/obj/structure/window/reinforced, -/obj/structure/window/reinforced{ - dir = 4 - }, -/obj/effect/floor_decal/corner/purple{ - dir = 6 - }, -/obj/effect/floor_decal/corner/purple{ - dir = 10 - }, -/obj/item/remains/xeno, -/turf/simulated/floor/tiled/white, -/area/map_template/ecship/science) -"cx" = ( -/obj/machinery/atmospherics/unary/vent_pump/low{ - dir = 1; - level = 2 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/ecship/science) -"cy" = ( -/obj/machinery/atmospherics/unary/vent_pump/low{ - dir = 1 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/ecship/science) -"cz" = ( -/obj/item/stool/padded, -/turf/simulated/floor/tiled/white, -/area/map_template/ecship/science) -"cA" = ( -/obj/effect/floor_decal/corner/purple{ - dir = 6 - }, -/obj/structure/handrail{ - dir = 8 - }, -/obj/machinery/alarm/low{ - dir = 8; - pixel_x = 24 - }, -/obj/machinery/botany/editor, -/turf/simulated/floor/tiled/white, -/area/map_template/ecship/science) -"cC" = ( -/obj/effect/floor_decal/industrial/warning/full, -/turf/simulated/floor, -/area/map_template/ecship/crew) -"cD" = ( -/obj/effect/floor_decal/corner/purple{ - dir = 10 - }, -/obj/machinery/light{ - dir = 8; - icon_state = "tube1" - }, -/obj/structure/table/glass, -/turf/simulated/floor/tiled/white, -/area/map_template/ecship/science) -"cE" = ( -/obj/effect/floor_decal/corner/purple{ - dir = 10 - }, -/obj/machinery/portable_atmospherics/hydroponics{ - closed_system = 1; - name = "isolation tray" - }, -/turf/simulated/floor/tiled/white, -/area/map_template/ecship/science) -"cF" = ( -/obj/effect/floor_decal/corner/purple{ - dir = 10 - }, -/obj/machinery/smartfridge{ - density = 0 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/ecship/science) -"cG" = ( -/obj/effect/floor_decal/corner/purple{ - dir = 10 - }, -/obj/machinery/light{ - dir = 4; - icon_state = "tube1" - }, -/obj/machinery/seed_extractor, -/turf/simulated/floor/tiled/white, -/area/map_template/ecship/science) -"cH" = ( -/turf/simulated/wall/r_wall/hull, -/area/map_template/ecship/engineering) -"cI" = ( -/obj/machinery/door/airlock/autoname, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable{ - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/lowpressure, -/area/map_template/ecship/engineering) -"cJ" = ( -/obj/structure/closet/secure_closet/engineering_welding, -/obj/effect/floor_decal/corner/yellow{ - dir = 9 - }, -/obj/structure/handrail{ - dir = 4 - }, -/turf/simulated/floor, -/area/map_template/ecship/engineering) -"cK" = ( -/obj/structure/reagent_dispensers/fueltank, -/turf/simulated/floor, -/area/map_template/ecship/engineering) -"cL" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/structure/cable{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/turf/simulated/floor, -/area/map_template/ecship/engineering) -"cM" = ( -/obj/structure/cable{ - d1 = 16; - d2 = 0; - dir = 1; - icon_state = "0-4" - }, -/obj/machinery/power/apc/derelict{ - dir = 1 - }, -/turf/simulated/floor, -/area/map_template/ecship/engineering) -"cN" = ( -/obj/effect/floor_decal/corner/yellow{ - dir = 6 - }, -/obj/structure/handrail{ - dir = 8 - }, -/obj/machinery/computer/modular/preset/engineering, -/turf/simulated/floor, -/area/map_template/ecship/engineering) -"cO" = ( -/obj/machinery/atmospherics/pipe/simple/visible/red{ - dir = 6 - }, -/obj/effect/floor_decal/corner/yellow{ - dir = 9 - }, -/obj/machinery/alarm/low{ - dir = 4; - pixel_x = -24 - }, -/obj/machinery/meter, -/turf/simulated/floor, -/area/map_template/ecship/engineering) -"cP" = ( -/obj/machinery/atmospherics/pipe/simple/visible/universal{ - dir = 4 - }, -/turf/simulated/floor, -/area/map_template/ecship/engineering) -"cQ" = ( -/obj/machinery/atmospherics/pipe/manifold/visible/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable{ - icon_state = "1-2" - }, -/turf/simulated/floor, -/area/map_template/ecship/engineering) -"cR" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 8 - }, -/turf/simulated/floor, -/area/map_template/ecship/engineering) -"cS" = ( -/obj/effect/floor_decal/corner/yellow{ - dir = 6 - }, -/obj/item/stool/padded, -/turf/simulated/floor, -/area/map_template/ecship/engineering) -"cT" = ( -/obj/machinery/atmospherics/binary/oxyregenerator{ - dir = 1 - }, -/obj/effect/floor_decal/corner/yellow{ - dir = 9 - }, -/turf/simulated/floor, -/area/map_template/ecship/engineering) -"cU" = ( -/turf/simulated/floor, -/area/map_template/ecship/engineering) -"cV" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/structure/cable{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/turf/simulated/floor, -/area/map_template/ecship/engineering) -"cW" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor, -/area/map_template/ecship/engineering) -"cX" = ( -/obj/effect/floor_decal/corner/yellow{ - dir = 6 - }, -/obj/structure/cable{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/turf/simulated/floor, -/area/map_template/ecship/engineering) -"cY" = ( -/obj/machinery/light{ - dir = 8; - icon_state = "tube1" - }, -/obj/machinery/atmospherics/pipe/manifold/visible/cyan{ - dir = 4 - }, -/obj/effect/floor_decal/corner/yellow{ - dir = 9 - }, -/obj/structure/closet/walllocker/emerglocker/west, -/obj/machinery/meter, -/turf/simulated/floor, -/area/map_template/ecship/engineering) -"cZ" = ( -/obj/machinery/atmospherics/pipe/manifold/visible/supply, -/obj/structure/cable{ - icon_state = "1-2" - }, -/turf/simulated/floor, -/area/map_template/ecship/engineering) -"da" = ( -/obj/machinery/atmospherics/unary/vent_pump/low{ - dir = 8 - }, -/turf/simulated/floor, -/area/map_template/ecship/engineering) -"db" = ( -/obj/machinery/light{ - dir = 4; - icon_state = "tube1" - }, -/obj/effect/floor_decal/corner/yellow{ - dir = 6 - }, -/obj/machinery/power/smes/buildable, -/obj/structure/cable, -/turf/simulated/floor, -/area/map_template/ecship/engineering) -"dc" = ( -/obj/structure/catwalk, -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/structure/cable{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/structure/cable{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/effect/landmark/clear, -/turf/template_noop, -/area/map_template/ecship/engine) -"dd" = ( -/obj/effect/wallframe_spawn/reinforced, -/obj/machinery/door/blast/regular{ - density = 0; - icon_state = "pdoor0"; - id_tag = "scraplock"; - name = "External Blast Doors"; - opacity = 0 - }, -/obj/machinery/door/firedoor, -/turf/simulated/floor, -/area/map_template/ecship/engineering) -"de" = ( -/obj/machinery/suit_storage_unit/engineering/salvage, -/obj/machinery/light/small/red{ - dir = 8; - icon_state = "bulb1" - }, -/turf/simulated/floor, -/area/map_template/ecship/engineering) -"df" = ( -/obj/machinery/suit_storage_unit/engineering/salvage, -/turf/simulated/floor, -/area/map_template/ecship/engineering) -"dg" = ( -/obj/structure/sign/warning/airlock, -/turf/simulated/wall/r_wall/hull, -/area/map_template/ecship/engineering) -"dh" = ( -/obj/effect/floor_decal/corner/yellow{ - dir = 9 - }, -/obj/structure/handrail{ - dir = 4 - }, -/obj/machinery/atmospherics/binary/pump/on{ - dir = 1; - target_pressure = 200 - }, -/turf/simulated/floor, -/area/map_template/ecship/engineering) -"di" = ( -/obj/structure/cable{ - icon_state = "1-2" - }, -/turf/simulated/floor, -/area/map_template/ecship/engineering) -"dj" = ( -/obj/effect/floor_decal/corner/yellow{ - dir = 6 - }, -/obj/structure/handrail{ - dir = 8 - }, -/obj/machinery/power/terminal{ - dir = 1 - }, -/obj/structure/cable{ - d2 = 2; - icon_state = "0-2" - }, -/turf/simulated/floor, -/area/map_template/ecship/engineering) -"dk" = ( -/obj/machinery/suit_storage_unit/engineering/salvage, -/obj/machinery/light/small/red{ - dir = 4; - icon_state = "bulb1" - }, -/turf/simulated/floor, -/area/map_template/ecship/engineering) -"dl" = ( -/obj/structure/catwalk, -/obj/structure/handrail, -/obj/effect/landmark/scorcher, -/obj/effect/landmark/clear, -/turf/template_noop, -/area/map_template/ecship/engine) -"dm" = ( -/obj/structure/catwalk, -/obj/structure/handrail, -/obj/machinery/atmospherics/pipe/simple/visible/cyan{ - dir = 6 - }, -/obj/effect/landmark/scorcher, -/obj/effect/landmark/clear, -/turf/template_noop, -/area/map_template/ecship/engine) -"dn" = ( -/obj/machinery/door/airlock/external, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor, -/area/map_template/ecship/engineering) -"do" = ( -/obj/structure/handrail{ - dir = 1 - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor, -/area/map_template/ecship/engineering) -"dp" = ( -/obj/effect/floor_decal/corner/yellow{ - dir = 9 - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 8; - icon_state = "warning" - }, -/obj/structure/handrail{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/visible/cyan{ - dir = 5 - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor, -/area/map_template/ecship/engineering) -"dq" = ( -/obj/machinery/atmospherics/pipe/simple/visible/cyan{ - dir = 4 - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor, -/area/map_template/ecship/engineering) -"dr" = ( -/obj/structure/bed/chair, -/obj/machinery/atmospherics/pipe/simple/visible/cyan{ - dir = 4 - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/cable{ - icon_state = "1-2" - }, -/turf/simulated/floor, -/area/map_template/ecship/engineering) -"ds" = ( -/obj/effect/floor_decal/corner/yellow{ - dir = 6 - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 4; - icon_state = "warning" - }, -/obj/structure/handrail{ - dir = 1 - }, -/obj/machinery/atmospherics/valve/open{ - dir = 4 - }, -/obj/structure/cable{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor, -/area/map_template/ecship/engineering) -"dt" = ( -/obj/machinery/door/airlock/external, -/obj/machinery/atmospherics/pipe/simple/visible/cyan{ - dir = 4 - }, -/obj/structure/cable{ - dir = 4; - icon_state = "1-2" - }, -/turf/simulated/floor, -/area/map_template/ecship/engineering) -"du" = ( -/obj/machinery/atmospherics/pipe/simple/visible/cyan{ - dir = 4 - }, -/obj/structure/handrail{ - dir = 1 - }, -/obj/structure/cable{ - dir = 4; - icon_state = "1-2" - }, -/turf/simulated/floor, -/area/map_template/ecship/engineering) -"dv" = ( -/obj/structure/catwalk, -/obj/structure/handrail, -/obj/machinery/atmospherics/pipe/simple/visible/cyan{ - dir = 4 - }, -/obj/effect/landmark/scorcher, -/obj/effect/landmark/clear, -/turf/template_noop, -/area/map_template/ecship/engine) -"dw" = ( -/obj/structure/catwalk, -/obj/machinery/atmospherics/pipe/simple/visible/cyan{ - dir = 9 - }, -/obj/effect/landmark/scorcher, -/obj/effect/landmark/clear, -/turf/template_noop, -/area/map_template/ecship/engine) -"dx" = ( -/obj/structure/catwalk, -/obj/effect/landmark/scorcher, -/obj/effect/landmark/scorcher, -/obj/effect/landmark/clear, -/turf/template_noop, -/area/map_template/ecship/engine) -"dy" = ( -/obj/machinery/power/solar, -/obj/effect/floor_decal/solarpanel, -/obj/structure/cable{ - dir = 4; - icon_state = "1-2" - }, -/obj/structure/cable{ - d1 = 16; - d2 = 0; - dir = 4; - icon_state = "0-2" - }, -/turf/simulated/floor/airless, -/area/map_template/ecship/engine) -"dz" = ( -/obj/structure/catwalk, -/obj/structure/handrail, -/obj/structure/cable{ - d1 = 16; - d2 = 0; - dir = 4; - icon_state = "0-2" - }, -/obj/effect/landmark/scorcher, -/obj/effect/landmark/clear, -/turf/template_noop, -/area/map_template/ecship/engine) -"dA" = ( -/obj/machinery/power/solar, -/obj/effect/floor_decal/solarpanel, -/obj/structure/cable{ - dir = 4; - icon_state = "1-2" - }, -/obj/structure/cable{ - d2 = 8; - icon_state = "0-8" - }, -/turf/simulated/floor/airless, -/area/map_template/ecship/engine) -"dB" = ( -/obj/machinery/power/solar, -/obj/effect/floor_decal/solarpanel, -/obj/structure/cable{ - d2 = 8; - icon_state = "0-8" - }, -/turf/simulated/floor/airless, -/area/map_template/ecship/engine) -"dD" = ( -/obj/effect/floor_decal/corner/yellow/full, -/turf/simulated/floor, -/area/map_template/ecship/engineering) -"dE" = ( -/obj/structure/table/standard, -/obj/machinery/button/ignition{ - id_tag = "sev_engine"; - pixel_x = -5 - }, -/obj/effect/floor_decal/corner/yellow/full, -/obj/structure/cable{ - icon_state = "1-2" - }, -/turf/simulated/floor, -/area/map_template/ecship/engineering) -"dF" = ( -/obj/effect/floor_decal/corner/yellow/full, -/obj/machinery/computer/air_control{ - name = "O2 Sensor"; - sensor_tag = "sev_oxygen" - }, -/turf/simulated/floor, -/area/map_template/ecship/engineering) -"dG" = ( -/obj/structure/catwalk, -/obj/structure/cable{ - dir = 4; - icon_state = "1-2" - }, -/obj/effect/landmark/scorcher, -/obj/effect/landmark/clear, -/turf/template_noop, -/area/map_template/ecship/engine) -"dH" = ( -/obj/machinery/power/solar, -/obj/effect/floor_decal/solarpanel, -/obj/structure/cable{ - d1 = 16; - d2 = 0; - dir = 4; - icon_state = "0-2" - }, -/turf/simulated/floor/airless, -/area/map_template/ecship/engine) -"dI" = ( -/obj/structure/catwalk, -/obj/machinery/atmospherics/pipe/simple/visible/cyan{ - dir = 4 - }, -/obj/effect/landmark/scorcher, -/obj/effect/landmark/clear, -/turf/template_noop, -/area/map_template/ecship/engine) -"dJ" = ( -/obj/effect/wallframe_spawn/reinforced, -/obj/machinery/door/blast/regular{ - density = 0; - icon_state = "pdoor0"; - id_tag = "scraplock"; - name = "External Blast Doors"; - opacity = 0 - }, -/obj/machinery/door/firedoor, -/obj/structure/cable{ - icon_state = "1-2" - }, -/turf/simulated/floor, -/area/map_template/ecship/engineering) -"dL" = ( -/obj/structure/catwalk, -/obj/machinery/power/tracker, -/obj/structure/cable, -/turf/template_noop, -/area/map_template/ecship/engine) -"dO" = ( -/obj/structure/catwalk, -/obj/machinery/atmospherics/pipe/simple/visible/cyan{ - dir = 6 - }, -/obj/structure/cable{ - dir = 4; - icon_state = "1-4" - }, -/obj/effect/landmark/scorcher, -/obj/effect/landmark/clear, -/turf/simulated/floor/airless, -/area/map_template/ecship/engine) -"dR" = ( -/turf/simulated/wall/r_wall/hull, -/area/map_template/ecship/engine) -"dS" = ( -/obj/structure/catwalk, -/obj/machinery/atmospherics/pipe/simple/visible/cyan, -/obj/effect/landmark/scorcher, -/obj/effect/landmark/clear, -/turf/simulated/floor/airless, -/area/map_template/ecship/engine) -"dT" = ( -/obj/machinery/air_sensor{ - id_tag = "sev_hydrogen" - }, -/turf/simulated/floor/reinforced/hydrogen, -/area/map_template/ecship/engine) -"dU" = ( -/obj/machinery/air_sensor{ - id_tag = "sev_oxygen" - }, -/turf/simulated/floor/reinforced/airless, -/area/map_template/ecship/engine) -"dV" = ( -/turf/simulated/floor/reinforced/hydrogen, -/area/map_template/ecship/engine) -"dW" = ( -/obj/structure/sign/warning/compressed_gas{ - name = "\improper HYDROGEN" - }, -/turf/simulated/wall/r_wall/hull, -/area/map_template/ecship/engine) -"dX" = ( -/obj/structure/catwalk, -/obj/machinery/atmospherics/pipe/simple/visible/cyan{ - dir = 5 - }, -/obj/effect/landmark/scorcher, -/obj/effect/landmark/clear, -/turf/simulated/floor/airless, -/area/map_template/ecship/engine) -"dY" = ( -/obj/machinery/atmospherics/pipe/simple/visible/cyan{ - dir = 4 - }, -/obj/effect/landmark/scorcher, -/obj/effect/landmark/clear, -/turf/template_noop, -/area/template_noop) -"dZ" = ( -/obj/machinery/atmospherics/binary/passive_gate/on{ - dir = 8; - target_pressure = 2500; - use_power = 1 - }, -/obj/effect/landmark/clear, -/turf/template_noop, -/area/template_noop) -"ea" = ( -/obj/structure/sign/warning/compressed_gas{ - name = "\improper OXYGEN" - }, -/obj/machinery/atmospherics/pipe/simple/visible/cyan{ - dir = 4 - }, -/turf/simulated/wall/r_wall/hull, -/area/map_template/ecship/engine) -"eb" = ( -/obj/machinery/atmospherics/unary/vent_pump/engine{ - dir = 8; - external_pressure_bound = 4000; - external_pressure_bound_default = 4000; - pump_direction = 0; - use_power = 1 - }, -/turf/simulated/floor/reinforced/airless, -/area/map_template/ecship/engine) -"ec" = ( -/turf/simulated/floor/reinforced/airless, -/area/map_template/ecship/engine) -"ed" = ( -/obj/machinery/atmospherics/unary/vent_pump/engine{ - dir = 4; - external_pressure_bound = 4000; - external_pressure_bound_default = 4000; - pump_direction = 0; - use_power = 1 - }, -/turf/simulated/floor/reinforced/hydrogen, -/area/map_template/ecship/engine) -"ee" = ( -/obj/machinery/atmospherics/pipe/simple/visible/fuel{ - dir = 4 - }, -/turf/simulated/wall/r_wall/hull, -/area/map_template/ecship/engine) -"ef" = ( -/obj/effect/floor_decal/corner/white/diagonal, -/obj/effect/floor_decal/corner/white/diagonal{ - dir = 4 - }, -/obj/machinery/atmospherics/valve{ - dir = 4 - }, -/turf/simulated/floor, -/area/map_template/ecship/engine) -"eg" = ( -/obj/machinery/atmospherics/binary/passive_gate/on{ - dir = 4; - target_pressure = 2500; - use_power = 1 - }, -/obj/effect/landmark/clear, -/turf/template_noop, -/area/map_template/ecship/engine) -"eh" = ( -/obj/machinery/atmospherics/pipe/simple/visible/fuel{ - dir = 10 - }, -/obj/effect/landmark/scorcher, -/obj/effect/landmark/clear, -/turf/template_noop, -/area/map_template/ecship/engine) -"ei" = ( -/obj/structure/catwalk, -/obj/effect/landmark/clear, -/turf/simulated/floor/airless, -/area/map_template/ecship/engine) -"ej" = ( -/obj/machinery/atmospherics/pipe/simple/visible/cyan{ - dir = 6 - }, -/obj/effect/landmark/scorcher, -/obj/effect/landmark/clear, -/turf/template_noop, -/area/map_template/ecship/engine) -"ek" = ( -/obj/machinery/atmospherics/binary/passive_gate/on{ - dir = 8; - target_pressure = 2500; - use_power = 1 - }, -/obj/effect/landmark/clear, -/turf/template_noop, -/area/map_template/ecship/engine) -"el" = ( -/obj/machinery/atmospherics/valve/open{ - dir = 4 - }, -/obj/effect/floor_decal/corner/paleblue/diagonal, -/obj/effect/floor_decal/corner/paleblue/diagonal{ - dir = 4 - }, -/turf/template_noop, -/area/map_template/ecship/engine) -"em" = ( -/obj/machinery/atmospherics/pipe/simple/visible/cyan{ - dir = 4 - }, -/turf/simulated/wall/r_wall/hull, -/area/map_template/ecship/engine) -"en" = ( -/obj/structure/sign/warning/fire, -/turf/simulated/wall/r_wall/hull, -/area/map_template/ecship/engine) -"eo" = ( -/obj/machinery/atmospherics/pipe/simple/visible/fuel, -/obj/effect/landmark/clear, -/turf/template_noop, -/area/template_noop) -"ep" = ( -/obj/machinery/atmospherics/pipe/simple/visible/cyan, -/obj/effect/landmark/clear, -/turf/template_noop, -/area/template_noop) -"qB" = ( -/obj/effect/landmark/clear, -/turf/template_noop, -/area/template_noop) -"yZ" = ( -/obj/structure/grille, -/obj/effect/landmark/scorcher, -/obj/effect/landmark/clear, -/turf/template_noop, -/area/template_noop) -"NM" = ( -/obj/effect/landmark/scorcher, -/turf/template_noop, -/area/template_noop) -"SX" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/obj/item/device/scanner/xenobio, -/turf/simulated/floor/tiled/white, -/area/map_template/ecship/science) -"UQ" = ( -/obj/machinery/atmospherics/portables_connector{ - dir = 1 - }, -/obj/effect/landmark/clear, -/turf/template_noop, -/area/template_noop) -"Vy" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/item/circular_saw, -/turf/simulated/floor/tiled/white, -/area/map_template/ecship/science) -"YW" = ( -/obj/structure/catwalk, -/obj/effect/landmark/scorcher, -/obj/effect/landmark/clear, -/turf/simulated/floor/airless, -/area/map_template/ecship/engine) -"ZF" = ( -/obj/effect/landmark/scorcher, -/obj/effect/landmark/clear, -/turf/template_noop, -/area/template_noop) - -(1,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aA -aA -aB -aA -aB -aA -aA -aA -aA -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(2,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aA -aA -aA -aA -aA -bb -aA -aA -aA -aA -aA -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(3,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aB -aA -aA -bp -bF -bW -cl -cv -aA -aA -aB -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(4,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aA -aA -aX -cm -bG -bJ -cm -cw -cD -aA -aA -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(5,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aA -aA -aY -br -Vy -bX -cn -cx -cE -aA -aA -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(6,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aB -ao -aZ -aJ -bI -bs -co -bJ -cE -ao -aB -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(7,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aA -aA -aZ -SX -bH -bZ -cp -cy -cF -aA -aA -NM -NM -NM -aa -aa -dH -aa -dH -dH -dH -aa -aa -dH -dH -aa -aa -"} -(8,1,1) = {" -aa -aa -aa -aa -aa -aa -NM -aA -aA -au -bt -bJ -ca -bJ -cz -cG -aA -aA -NM -NM -NM -NM -dy -dy -dy -dy -dy -dy -dy -dy -dy -dy -dy -aa -"} -(9,1,1) = {" -aa -aa -aa -aa -aa -NM -NM -aA -aA -aA -bu -bK -cb -cq -cA -aA -aA -aA -NM -NM -NM -bk -ci -dc -dc -dc -dc -dc -dc -dc -dc -dc -dc -dL -"} -(10,1,1) = {" -aa -aa -aa -aa -aa -NM -qB -qB -aK -aA -aA -aA -cc -aA -aA -aA -aK -NM -NM -NM -NM -bw -dA -dA -dA -dA -dA -aa -aa -aa -aa -dA -dA -aa -"} -(11,1,1) = {" -aa -aa -aa -aa -NM -qB -qB -qB -qB -qB -aA -bL -cd -cr -aA -ZF -ZF -NM -NM -NM -NM -bw -dB -dB -aa -aa -dB -aa -aa -aa -aa -dB -aa -aa -"} -(12,1,1) = {" -aa -ac -ac -qB -qB -qB -qB -qB -qB -qB -aA -bM -ce -cs -aA -ZF -ZF -ZF -NM -NM -NM -bw -NM -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(13,1,1) = {" -aa -ac -ac -qB -qB -qB -qB -qB -qB -qB -aA -bN -cf -ct -aA -ZF -ZF -ZF -ZF -NM -NM -bw -NM -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(14,1,1) = {" -aa -aa -ac -qB -qB -qB -qB -qB -qB -qB -aA -bO -cg -aA -aA -ZF -ZF -ZF -ZF -ZF -ZF -bw -ZF -ZF -qB -qB -dR -dR -dR -dR -dR -dR -aa -aa -"} -(15,1,1) = {" -ac -ac -ac -qB -qB -qB -qB -qB -qB -qB -qB -aA -ch -aA -qB -ZF -ZF -ZF -ZF -ZF -bi -bw -bi -bi -ZF -dR -dR -dV -dV -dV -dV -dR -dR -aa -"} -(16,1,1) = {" -ac -ac -ac -qB -qB -qB -qB -qB -qB -qB -qB -qB -qB -qB -qB -qB -qB -qB -qB -cH -dd -dn -cH -dl -ZF -dR -dT -dV -dV -dV -dV -dV -dR -aa -"} -(17,1,1) = {" -aa -ac -ac -qB -qB -qB -qB -qB -qB -qB -qB -qB -qB -qB -qB -qB -qB -qB -cH -cH -de -do -cH -dl -ZF -dR -dR -dV -ed -dV -dV -dR -dR -aa -"} -(18,1,1) = {" -ac -ac -ac -qB -qB -qB -qB -qB -qB -qB -qB -qB -qB -qB -qB -qB -qB -cH -cH -cH -df -do -cH -dl -ZF -qB -dR -dW -ee -en -dR -dR -aa -aa -"} -(19,1,1) = {" -ac -ac -ac -ac -ac -aq -aq -aq -aL -aq -qB -qB -qB -qB -qB -cH -cH -cH -cH -cH -dg -dn -cH -dl -dx -ZF -qB -qB -ef -qB -qB -qB -aa -aa -"} -(20,1,1) = {" -ad -ad -ac -ac -ac -ac -ax -ay -aM -aQ -qB -qB -qB -qB -qB -cH -cJ -cO -cT -cY -dh -dp -cH -cH -dz -ZF -ZF -ZF -eg -qB -qB -qB -qB -aa -"} -(21,1,1) = {" -ad -ad -ad -ak -am -ac -ax -aC -aN -bd -bx -bo -bS -aq -aq -cH -cK -cP -cU -cP -cU -dq -dD -dd -dG -ZF -ZF -ZF -eh -eo -UQ -qB -qB -aa -"} -(22,1,1) = {" -ad -ad -ad -ad -an -ar -av -aD -aO -bf -by -bB -bf -cu -cC -cI -cL -cQ -cV -cZ -di -dr -dE -dJ -dO -dS -dS -dX -YW -ei -qB -qB -qB -qB -"} -(23,1,1) = {" -ad -ae -af -al -ap -ac -aw -aF -aN -bd -bz -bQ -bS -aq -aq -cH -cM -cR -cW -da -cU -dq -dF -dd -dI -ZF -ZF -dY -ej -ep -qB -qB -qB -qB -"} -(24,1,1) = {" -ac -ac -ac -ac -ac -ac -ax -aG -aP -bj -bA -bR -bT -aq -qB -cH -cN -cS -cX -db -dj -ds -cH -cH -dv -ZF -ZF -dY -ek -qB -qB -qB -qB -qB -"} -(25,1,1) = {" -ac -ac -ac -ac -ap -aq -aq -aq -aL -aq -aq -bP -aq -aq -qB -cH -cH -cH -cH -cH -dg -dt -cH -dm -dw -ZF -qB -dZ -el -qB -qB -qB -qB -aa -"} -(26,1,1) = {" -ac -ac -ac -ac -qB -qB -qB -qB -qB -qB -qB -qB -qB -qB -qB -qB -qB -cH -cH -cH -df -du -cH -dv -qB -qB -dR -ea -em -dR -qB -qB -qB -aa -"} -(27,1,1) = {" -ac -ac -ac -qB -qB -qB -qB -qB -qB -qB -qB -qB -qB -qB -qB -qB -qB -qB -cH -cH -dk -du -cH -dv -qB -dR -dR -eb -eb -ec -qB -qB -aa -aa -"} -(28,1,1) = {" -ac -ac -ac -qB -qB -qB -qB -qB -qB -qB -qB -qB -qB -qB -qB -qB -qB -qB -qB -cH -dd -dt -cH -dv -qB -dR -dU -ec -ec -ec -ec -ec -aa -aa -"} -(29,1,1) = {" -aa -ac -ac -qB -qB -qB -qB -qB -qB -qB -qB -qB -qB -qB -qB -qB -qB -qB -qB -qB -bi -bC -cj -dw -qB -dR -dR -ec -ec -ec -ec -dR -dR -aa -"} -(30,1,1) = {" -aa -ac -ac -qB -qB -qB -qB -qB -qB -qB -as -aS -as -qB -qB -qB -qB -qB -qB -qB -NM -bV -aa -aa -aa -aa -dR -dR -dR -dR -dR -dR -aa -aa -"} -(31,1,1) = {" -aa -aa -ac -qB -qB -qB -qB -qB -qB -as -as -ba -as -as -qB -qB -qB -qB -qB -NM -NM -bV -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(32,1,1) = {" -aa -aa -ac -qB -qB -qB -qB -qB -qB -as -aR -bc -bg -as -qB -qB -qB -qB -NM -NM -aa -bV -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(33,1,1) = {" -aa -aa -ac -qB -qB -qB -qB -qB -qB -qB -qB -be -bh -as -qB -qB -qB -NM -NM -NM -aa -bV -aa -aa -aa -dH -aa -dH -dH -dH -aa -aa -aa -aa -"} -(34,1,1) = {" -aa -aa -aa -NM -NM -ab -az -as -as -bl -as -as -ck -ab -qB -qB -NM -NM -NM -aa -aa -bV -aa -aa -aa -dy -dy -dy -dy -dy -aa -aa -dy -aa -"} -(35,1,1) = {" -aa -aa -aa -ag -yZ -ab -as -as -aT -bm -bD -as -as -ab -NM -NM -NM -NM -aa -aa -aa -bY -dc -dc -dc -dc -dc -dc -dc -dc -dc -dc -dc -dL -"} -(36,1,1) = {" -aa -aa -aa -aa -aa -at -as -aE -aU -bn -bE -bq -as -ab -NM -NM -aa -aa -aa -aa -aa -aa -dA -dA -dA -dA -dA -dA -dA -dA -dA -dA -dA -aa -"} -(37,1,1) = {" -aa -aa -aa -aa -aa -ab -as -aI -aV -aV -aV -bv -as -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -dB -dB -dB -aa -aa -aa -dB -dB -dB -dB -aa -"} -(38,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -as -aI -aW -aI -as -as -at -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(39,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -as -as -as -as -as -as -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(40,1,1) = {" -aa -aa -aa -aa -aa -aa -ab -at -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} diff --git a/maps/random_ruins/exoplanet_ruins/exoplanet_ruins.dm b/maps/random_ruins/exoplanet_ruins/exoplanet_ruins.dm deleted file mode 100644 index 0236edcd5180c..0000000000000 --- a/maps/random_ruins/exoplanet_ruins/exoplanet_ruins.dm +++ /dev/null @@ -1,5 +0,0 @@ -// Hey! Listen! Update \config\exoplanet_ruin_blacklist.txt with your new ruins! - -/datum/map_template/ruin/exoplanet - prefix = "maps/random_ruins/exoplanet_ruins/" - var/list/ruin_tags diff --git a/maps/random_ruins/exoplanet_ruins/fountain/fountain_ruin.dm b/maps/random_ruins/exoplanet_ruins/fountain/fountain_ruin.dm deleted file mode 100644 index bd3bf7a846743..0000000000000 --- a/maps/random_ruins/exoplanet_ruins/fountain/fountain_ruin.dm +++ /dev/null @@ -1,8 +0,0 @@ -/datum/map_template/ruin/exoplanet/fountain - name = "Fountain of Youth" - id = "planetsite_fountain" - description = "The fountain of youth itself." - suffixes = list("fountain/fountain_ruin.dmm") - spawn_cost = 0.5 - template_flags = TEMPLATE_FLAG_NO_RUINS | TEMPLATE_FLAG_CLEAR_CONTENTS - ruin_tags = RUIN_ALIEN \ No newline at end of file diff --git a/maps/random_ruins/exoplanet_ruins/fountain/fountain_ruin.dmm b/maps/random_ruins/exoplanet_ruins/fountain/fountain_ruin.dmm deleted file mode 100644 index a52244c3261fa..0000000000000 --- a/maps/random_ruins/exoplanet_ruins/fountain/fountain_ruin.dmm +++ /dev/null @@ -1,78 +0,0 @@ -//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE -"a" = ( -/turf/template_noop, -/area/template_noop) -"b" = ( -/turf/simulated/wall/sandstonediamond, -/area/template_noop) -"c" = ( -/turf/simulated/floor/fixed/alium, -/area/template_noop) -"e" = ( -/obj/structure/fountain, -/turf/template_noop, -/area/template_noop) - -(1,1,1) = {" -a -a -a -b -a -a -a -"} -(2,1,1) = {" -a -a -c -c -c -a -a -"} -(3,1,1) = {" -a -c -c -a -c -c -a -"} -(4,1,1) = {" -b -c -a -e -a -c -b -"} -(5,1,1) = {" -a -c -c -a -c -c -a -"} -(6,1,1) = {" -a -a -c -c -c -a -a -"} -(7,1,1) = {" -a -a -a -b -a -a -a -"} diff --git a/maps/random_ruins/exoplanet_ruins/hut/hut.dm b/maps/random_ruins/exoplanet_ruins/hut/hut.dm deleted file mode 100644 index 4ca77cc0eb367..0000000000000 --- a/maps/random_ruins/exoplanet_ruins/hut/hut.dm +++ /dev/null @@ -1,8 +0,0 @@ -/datum/map_template/ruin/exoplanet/hut - name = "hut" - id = "hut" - description = "A small and simple little research hut." - suffixes = list("hut/hut.dmm") - spawn_cost = 0.5 - template_flags = TEMPLATE_FLAG_CLEAR_CONTENTS|TEMPLATE_FLAG_NO_RUINS - ruin_tags = RUIN_HUMAN|RUIN_HABITAT \ No newline at end of file diff --git a/maps/random_ruins/exoplanet_ruins/hut/hut.dmm b/maps/random_ruins/exoplanet_ruins/hut/hut.dmm deleted file mode 100644 index 1841fac4e21dd..0000000000000 --- a/maps/random_ruins/exoplanet_ruins/hut/hut.dmm +++ /dev/null @@ -1,170 +0,0 @@ -//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE -"a" = ( -/turf/template_noop, -/area/template_noop) -"b" = ( -/turf/simulated/wall/silver, -/area/template_noop) -"c" = ( -/turf/simulated/floor/tiled/dark, -/area/template_noop) -"d" = ( -/obj/random/trash, -/obj/structure/inflatable/door, -/turf/simulated/floor/tiled/dark, -/area/template_noop) -"e" = ( -/obj/machinery/artifact_scanpad, -/turf/simulated/floor/tiled/dark, -/area/template_noop) -"f" = ( -/obj/machinery/r_n_d/server, -/turf/simulated/floor/tiled/dark, -/area/template_noop) -"g" = ( -/obj/structure/curtain/black, -/turf/simulated/floor/carpet, -/area/template_noop) -"h" = ( -/obj/structure/inflatable/door, -/turf/simulated/floor/tiled/dark, -/area/template_noop) -"i" = ( -/obj/structure/filingcabinet, -/obj/effect/decal/cleanable/cobweb, -/turf/simulated/floor/tiled/dark, -/area/template_noop) -"j" = ( -/obj/structure/closet/crate/freezer/rations, -/obj/effect/decal/cleanable/cobweb2, -/turf/simulated/floor/tiled/dark, -/area/template_noop) -"k" = ( -/obj/structure/bed/chair/wheelchair, -/turf/simulated/floor/tiled/dark, -/area/template_noop) -"l" = ( -/obj/structure/table/marble, -/obj/item/device/flashlight/lamp, -/obj/structure/sign/monkey_painting{ - pixel_y = -32 - }, -/turf/simulated/floor/tiled/dark, -/area/template_noop) -"m" = ( -/obj/structure/table/marble, -/obj/item/paper_bin, -/obj/random/voidhelmet, -/turf/simulated/floor/tiled/dark, -/area/template_noop) -"n" = ( -/obj/structure/gravemarker/random, -/turf/template_noop, -/area/template_noop) -"o" = ( -/obj/structure/bookcase/manuals/xenoarchaeology, -/turf/simulated/floor/tiled/dark, -/area/template_noop) -"p" = ( -/obj/random/junk, -/obj/random/loot, -/turf/simulated/floor/tiled/dark, -/area/template_noop) -"q" = ( -/obj/item/pen/multi, -/turf/simulated/floor/tiled/dark, -/area/template_noop) -"r" = ( -/mob/living/bot/medbot, -/turf/simulated/floor/tiled/dark, -/area/template_noop) -"t" = ( -/obj/structure/bed, -/obj/item/bedsheet/rainbow, -/obj/random/drinkbottle, -/obj/random/trash, -/turf/simulated/floor/carpet, -/area/template_noop) -"u" = ( -/obj/structure/table/rack, -/obj/item/clothing/glasses/eyepatch/hud/medical, -/obj/random/loot, -/obj/random/loot, -/obj/random/hat, -/obj/random/voidsuit, -/turf/simulated/floor/tiled/dark, -/area/template_noop) -"G" = ( -/obj/structure/sign/science_1{ - pixel_y = 32 - }, -/turf/simulated/floor/tiled/dark, -/area/template_noop) -"K" = ( -/obj/effect/wallframe_spawn/reinforced, -/turf/simulated/floor/plating, -/area/template_noop) - -(1,1,1) = {" -b -b -b -K -b -b -b -"} -(2,1,1) = {" -b -i -p -u -e -f -b -"} -(3,1,1) = {" -b -o -c -c -q -l -b -"} -(4,1,1) = {" -b -j -c -r -k -m -b -"} -(5,1,1) = {" -b -b -b -G -b -b -b -"} -(6,1,1) = {" -a -d -h -c -g -t -b -"} -(7,1,1) = {" -n -b -b -b -b -b -b -"} diff --git a/maps/random_ruins/exoplanet_ruins/hydrobase/hydro.dmi b/maps/random_ruins/exoplanet_ruins/hydrobase/hydro.dmi deleted file mode 100644 index 14cfda90a9fac..0000000000000 Binary files a/maps/random_ruins/exoplanet_ruins/hydrobase/hydro.dmi and /dev/null differ diff --git a/maps/random_ruins/exoplanet_ruins/hydrobase/hydrobase.dm b/maps/random_ruins/exoplanet_ruins/hydrobase/hydrobase.dm deleted file mode 100644 index 36722fe31610d..0000000000000 --- a/maps/random_ruins/exoplanet_ruins/hydrobase/hydrobase.dm +++ /dev/null @@ -1,141 +0,0 @@ -/datum/map_template/ruin/exoplanet/hydrobase - name = "hydroponics base" - id = "exoplanet_hydrobase" - description = "hydroponics base with random plants and a lot of enemies" - suffixes = list("hydrobase/hydrobase.dmm") - spawn_cost = 2 - template_flags = TEMPLATE_FLAG_CLEAR_CONTENTS | TEMPLATE_FLAG_NO_RUINS | TEMPLATE_FLAG_RUIN_STARTS_DISALLOWED - ruin_tags = RUIN_ALIEN - apc_test_exempt_areas = list( - /area/map_template/hydrobase = NO_SCRUBBER|NO_VENT|NO_APC, - /area/map_template/hydrobase/station = NO_SCRUBBER, - /area/map_template/hydrobase/station/solarlock = NO_SCRUBBER|NO_VENT, - /area/map_template/hydrobase/station/dockport = NO_SCRUBBER|NO_VENT - ) - -// Areas // -/area/map_template/hydrobase - name = "\improper Hydroponics Base X207" - icon_state = "hydro" - icon = 'maps/random_ruins/exoplanet_ruins/hydrobase/hydro.dmi' - -/area/map_template/hydrobase/solars - name = "\improper X207 Solar Array" - icon_state = "solar" - -/area/map_template/hydrobase/station/processing - name = "\improper X207 Processing Area" - icon_state = "processing" - -/area/map_template/hydrobase/station/shipaccess - name = "\improper X207 Shipping Access" - icon_state = "shipping" - -/area/map_template/hydrobase/station/shower - name = "\improper X207 Clean Room" - icon_state = "shower" - -/area/map_template/hydrobase/station/growA - name = "\improper X207 Growing Zone A" - icon_state = "A" - -/area/map_template/hydrobase/station/growB - name = "\improper X207 Growing Zone B" - icon_state = "B" - -/area/map_template/hydrobase/station/growC - name = "\improper X207 Growing Zone C" - icon_state = "C" - -/area/map_template/hydrobase/station/growD - name = "\improper X207 Growing Zone D" - icon_state = "D" - -/area/map_template/hydrobase/station/growF //nobody knows what happened to growing zone e - name = "\improper X207 Growing Zone F" - icon_state = "F" - -/area/map_template/hydrobase/station/growX - name = "\improper X207 Growing Zone X" - icon_state = "X" - -/area/map_template/hydrobase/station/goatzone - name = "\improper X207 Containment Zone" - icon_state = "goatzone" - -/area/map_template/hydrobase/station/dockport - name = "\improper X207 Access Port" - icon_state = "airlock" - -/area/map_template/hydrobase/station/solarlock - name = "\improper X207 External Airlock" - icon_state = "airlock" - - -// Objs // -/obj/structure/closet/secure_closet/hydroponics/hydro - name = "hydroponics supplies locker" - req_access = list() - - -/obj/item/natural_weapon/hooves/strong/force = 15 - - -/mob/living/simple_animal/hostile/retaliate/goat/hydro - name = "goat" - desc = "An impressive goat, in size and coat. His horns look pretty serious!" - health = 100 - maxHealth = 100 - natural_weapon = /obj/item/natural_weapon/hooves/strong - faction = "farmbots" - - -/obj/item/projectile/beam/drone/weak/damage = 7 - - -/mob/living/simple_animal/hostile/retaliate/malf_drone/hydro - name = "Farmbot" - desc = "The botanist's best friend. There's something slightly odd about the way it moves." - icon = 'maps/random_ruins/exoplanet_ruins/hydrobase/hydro.dmi' - icon_state = "farmbot" - icon_living = "farmbot" - icon_dead = "farmbot_dead" - faction = "farmbots" - health = 225 - maxHealth = 225 - malfunctioning = FALSE - say_list_type = /datum/say_list/malf_drone/hydro - trail = null - - -/mob/living/simple_animal/hostile/retaliate/malf_drone/hydro/Initialize() - . = ..() - if (prob(50)) - projectiletype = /obj/item/projectile/beam/drone/weak - - -/mob/living/simple_animal/hostile/retaliate/malf_drone/hydro/emp_act(severity) - if (status_flags & GODMODE) - return - health -= rand(5, 10) * (severity + 1) - disabled = rand(15, 30) - malfunctioning = TRUE - hostile_drone = TRUE - destroy_surroundings = TRUE - projectiletype = initial(projectiletype) - walk(src, 0) - - -/datum/say_list/malf_drone/hydro/speak = list( - "Initiating harvesting subrout-ine-ine.", - "Connection timed out.", - "Connection with master AI syst-tem-tem lost.", - "Core systems override enab-..." -) - -/datum/say_list/malf_drone/hydro/emote_see = list( - "beeps repeatedly", - "whirrs violently", - "flashes its indicator lights", - "emits a ping sound" -) diff --git a/maps/random_ruins/exoplanet_ruins/hydrobase/hydrobase.dmm b/maps/random_ruins/exoplanet_ruins/hydrobase/hydrobase.dmm deleted file mode 100644 index ccac22b3ecdb9..0000000000000 --- a/maps/random_ruins/exoplanet_ruins/hydrobase/hydrobase.dmm +++ /dev/null @@ -1,4605 +0,0 @@ -//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE -"aa" = ( -/turf/template_noop, -/area/template_noop) -"ab" = ( -/turf/simulated/wall/alium, -/area/map_template/hydrobase/station/growX) -"ac" = ( -/obj/machinery/portable_atmospherics/hydroponics, -/obj/structure/catwalk, -/obj/item/seeds/random, -/turf/simulated/floor/fixed/alium, -/area/map_template/hydrobase/station/growX) -"ad" = ( -/turf/simulated/floor/tiled/dark, -/area/map_template/hydrobase/station/growX) -"ae" = ( -/obj/effect/wallframe_spawn/reinforced_phoron, -/obj/machinery/door/firedoor, -/turf/simulated/floor/fixed/alium, -/area/map_template/hydrobase/station/growX) -"af" = ( -/obj/machinery/portable_atmospherics/hydroponics, -/obj/structure/catwalk, -/obj/item/seeds/random, -/obj/machinery/light{ - dir = 1 - }, -/turf/simulated/floor/fixed/alium, -/area/map_template/hydrobase/station/growX) -"ag" = ( -/mob/living/bot/farmbot{ - faction = "farmbots" - }, -/turf/simulated/floor/tiled/dark, -/area/map_template/hydrobase/station/growX) -"ah" = ( -/obj/machinery/portable_atmospherics/powered/scrubber, -/obj/structure/catwalk, -/turf/simulated/floor/fixed/alium, -/area/map_template/hydrobase/station/growX) -"ai" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - level = 2 - }, -/turf/simulated/floor/tiled/dark, -/area/map_template/hydrobase/station/growX) -"ak" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/tiled/dark, -/area/map_template/hydrobase/station/growX) -"al" = ( -/obj/effect/wallframe_spawn/reinforced_phoron, -/obj/machinery/door/firedoor, -/turf/simulated/floor/fixed/alium, -/area/map_template/hydrobase/station/growA) -"am" = ( -/obj/machinery/portable_atmospherics/hydroponics, -/obj/structure/catwalk, -/obj/item/seeds/random, -/obj/machinery/light{ - dir = 8; - icon_state = "tube1" - }, -/turf/simulated/floor/fixed/alium, -/area/map_template/hydrobase/station/growX) -"an" = ( -/obj/machinery/portable_atmospherics/hydroponics, -/obj/structure/catwalk, -/obj/item/seeds/random, -/obj/machinery/light{ - dir = 4; - icon_state = "tube1" - }, -/turf/simulated/floor/fixed/alium, -/area/map_template/hydrobase/station/growX) -"ao" = ( -/obj/machinery/light{ - dir = 1; - icon_state = "tube1" - }, -/obj/structure/catwalk, -/obj/machinery/portable_atmospherics/hydroponics, -/obj/item/seeds/tobaccoseed, -/turf/simulated/floor/fixed/alium, -/area/map_template/hydrobase/station/growA) -"ap" = ( -/obj/structure/catwalk, -/obj/machinery/portable_atmospherics/hydroponics, -/obj/item/seeds/tobaccoseed, -/turf/simulated/floor/fixed/alium, -/area/map_template/hydrobase/station/growA) -"aq" = ( -/turf/simulated/floor/bluegrid, -/area/map_template/hydrobase/station/growA) -"ar" = ( -/obj/machinery/alarm{ - dir = 4; - pixel_x = -24 - }, -/obj/machinery/firealarm{ - dir = 8; - pixel_x = -38 - }, -/obj/effect/floor_decal/floordetail/edgedrain, -/obj/effect/floor_decal/industrial/warning, -/turf/simulated/floor/tiled/dark, -/area/map_template/hydrobase/station/growX) -"as" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/power/apc{ - dir = 4; - name = "east bump"; - pixel_x = 24 - }, -/obj/structure/cable/yellow{ - d2 = 2; - icon_state = "0-2" - }, -/obj/effect/floor_decal/floordetail/edgedrain, -/obj/effect/floor_decal/industrial/warning, -/turf/simulated/floor/tiled/dark, -/area/map_template/hydrobase/station/growX) -"at" = ( -/turf/simulated/wall/alium, -/area/map_template/hydrobase/station/growD) -"au" = ( -/obj/effect/wallframe_spawn/reinforced_phoron, -/obj/machinery/door/firedoor, -/turf/simulated/floor/fixed/alium, -/area/map_template/hydrobase/station/growD) -"av" = ( -/mob/living/bot/farmbot{ - faction = "farmbots" - }, -/turf/simulated/floor/tiled/white, -/area/map_template/hydrobase/station/growA) -"aw" = ( -/turf/simulated/wall/alium, -/area/map_template/hydrobase/station/goatzone) -"ax" = ( -/obj/structure/lattice, -/turf/simulated/wall/alium, -/area/map_template/hydrobase/station/goatzone) -"ay" = ( -/obj/structure/sign/warning/biohazard, -/turf/simulated/wall/alium, -/area/map_template/hydrobase/station/growX) -"az" = ( -/obj/effect/floor_decal/industrial/hatch/yellow, -/obj/machinery/door/airlock/virology, -/turf/simulated/floor/tiled/white, -/area/map_template/hydrobase/station/growX) -"aA" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/effect/floor_decal/industrial/hatch/yellow, -/obj/machinery/door/airlock/virology, -/turf/simulated/floor/tiled/white, -/area/map_template/hydrobase/station/growX) -"aB" = ( -/obj/structure/catwalk, -/obj/machinery/light{ - dir = 1; - icon_state = "tube1" - }, -/obj/machinery/portable_atmospherics/hydroponics, -/obj/item/seeds/ambrosiavulgarisseed, -/turf/simulated/floor/fixed/alium, -/area/map_template/hydrobase/station/growD) -"aC" = ( -/obj/structure/catwalk, -/obj/machinery/portable_atmospherics/hydroponics, -/obj/item/seeds/ambrosiavulgarisseed, -/turf/simulated/floor/fixed/alium, -/area/map_template/hydrobase/station/growD) -"aD" = ( -/obj/machinery/mech_recharger, -/mob/living/simple_animal/hostile/retaliate/malf_drone/hydro, -/turf/simulated/floor/bluegrid, -/area/map_template/hydrobase/station/growD) -"aE" = ( -/turf/simulated/floor/tiled/white, -/area/map_template/hydrobase/station/growA) -"aF" = ( -/obj/machinery/firealarm{ - dir = 8; - pixel_x = -38 - }, -/obj/item/clothing/accessory/armband/hydro, -/turf/simulated/floor/tiled/dark, -/area/map_template/hydrobase/station/goatzone) -"aG" = ( -/turf/simulated/floor/tiled/dark, -/area/map_template/hydrobase/station/goatzone) -"aH" = ( -/turf/simulated/floor/tiled/dark/monotile, -/area/map_template/hydrobase/station/goatzone) -"aI" = ( -/obj/structure/disposaloutlet, -/obj/structure/disposalpipe/trunk{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark, -/area/map_template/hydrobase/station/goatzone) -"aJ" = ( -/obj/structure/disposalpipe/segment{ - dir = 2; - icon_state = "pipe-c" - }, -/turf/simulated/wall/alium, -/area/map_template/hydrobase/station/goatzone) -"aK" = ( -/turf/simulated/wall/alium, -/area/map_template/hydrobase/station/growF) -"aL" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 - }, -/obj/structure/cable/yellow{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 4; - icon_state = "warningcorner" - }, -/obj/structure/window/phoronreinforced{ - dir = 8; - icon_state = "phoronrwindow" - }, -/turf/simulated/floor/tiled/white, -/area/map_template/hydrobase/station/growF) -"aM" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 1; - icon_state = "warning" - }, -/turf/simulated/floor/tiled/white, -/area/map_template/hydrobase/station/growF) -"aN" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 - }, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 1; - icon_state = "warning" - }, -/turf/simulated/floor/tiled/white, -/area/map_template/hydrobase/station/growF) -"aO" = ( -/obj/structure/catwalk, -/obj/machinery/portable_atmospherics/hydroponics, -/obj/item/seeds/ambrosiadeusseed, -/turf/simulated/floor/fixed/alium, -/area/map_template/hydrobase/station/growD) -"aP" = ( -/turf/simulated/floor/bluegrid, -/area/map_template/hydrobase/station/growD) -"aQ" = ( -/turf/simulated/floor/tiled/white, -/area/map_template/hydrobase/station/growD) -"aR" = ( -/obj/item/trash/cigbutt/woodbutt, -/turf/simulated/floor/tiled/white, -/area/map_template/hydrobase/station/growD) -"aS" = ( -/obj/structure/catwalk, -/obj/machinery/portable_atmospherics/hydroponics, -/obj/item/seeds/tobaccoseed, -/turf/simulated/floor/bluegrid, -/area/map_template/hydrobase/station/growA) -"aT" = ( -/obj/item/trash/cigbutt/menthol, -/turf/simulated/floor/tiled/white, -/area/map_template/hydrobase/station/growA) -"aU" = ( -/obj/machinery/alarm{ - dir = 4; - pixel_x = -24 - }, -/mob/living/simple_animal/hostile/retaliate/goat/hydro, -/turf/simulated/floor/tiled/dark, -/area/map_template/hydrobase/station/goatzone) -"aV" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - level = 2 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/map_template/hydrobase/station/goatzone) -"aW" = ( -/obj/machinery/portable_atmospherics/hydroponics, -/obj/structure/catwalk, -/obj/item/seeds/whitebeetseed, -/turf/simulated/floor/fixed/alium, -/area/map_template/hydrobase/station/goatzone) -"aX" = ( -/obj/structure/disposalpipe/segment{ - dir = 1; - icon_state = "pipe-c" - }, -/turf/simulated/wall/alium, -/area/map_template/hydrobase/station/goatzone) -"aY" = ( -/obj/structure/disposalpipe/trunk{ - dir = 8 - }, -/obj/machinery/disposal/deliveryChute{ - desc = "A chute that's absolutely covered in beet and beet products."; - name = "beet-stained chute" - }, -/obj/structure/sign/warning/moving_parts{ - name = "\improper FEEDING CHUTE"; - pixel_y = 32 - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 4 - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 8; - icon_state = "warning" - }, -/turf/simulated/floor/tiled/dark, -/area/map_template/hydrobase/station/growF) -"aZ" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/window/phoronreinforced{ - dir = 8; - icon_state = "phoronrwindow" - }, -/turf/simulated/floor/tiled/white, -/area/map_template/hydrobase/station/growF) -"ba" = ( -/turf/simulated/floor/tiled/white, -/area/map_template/hydrobase/station/growF) -"bb" = ( -/obj/structure/catwalk, -/obj/machinery/light{ - dir = 8; - icon_state = "tube1" - }, -/obj/machinery/portable_atmospherics/hydroponics, -/obj/item/seeds/ambrosiadeusseed, -/turf/simulated/floor/fixed/alium, -/area/map_template/hydrobase/station/growD) -"bc" = ( -/obj/machinery/power/apc{ - name = "south bump"; - pixel_y = -24 - }, -/obj/structure/cable/yellow{ - d2 = 4; - icon_state = "0-4" - }, -/turf/simulated/floor/tiled/dark, -/area/map_template/hydrobase/station/goatzone) -"bd" = ( -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/mob/living/simple_animal/hostile/retaliate/goat/hydro, -/turf/simulated/floor/tiled/dark, -/area/map_template/hydrobase/station/goatzone) -"be" = ( -/obj/structure/cable/yellow{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/tiled/dark, -/area/map_template/hydrobase/station/goatzone) -"bf" = ( -/obj/effect/floor_decal/industrial/warning/cee, -/turf/simulated/floor/tiled/dark, -/area/map_template/hydrobase/station/growF) -"bg" = ( -/obj/structure/lattice, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/window/phoronreinforced{ - dir = 8; - icon_state = "phoronrwindow" - }, -/turf/simulated/floor/tiled/white, -/area/map_template/hydrobase/station/growF) -"bh" = ( -/obj/structure/lattice, -/obj/structure/catwalk, -/obj/machinery/portable_atmospherics/hydroponics, -/obj/item/seeds/wheatseed, -/turf/simulated/floor/fixed/alium, -/area/map_template/hydrobase/station/growF) -"bi" = ( -/mob/living/bot/farmbot{ - faction = "farmbots" - }, -/turf/simulated/floor/tiled/white, -/area/map_template/hydrobase/station/growD) -"bj" = ( -/obj/machinery/light{ - dir = 4; - icon_state = "tube1" - }, -/turf/simulated/floor/tiled/white, -/area/map_template/hydrobase/station/growD) -"bk" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 4 - }, -/obj/machinery/light, -/mob/living/simple_animal/hostile/retaliate/malf_drone/hydro, -/turf/simulated/floor/bluegrid, -/area/map_template/hydrobase/station/growA) -"bl" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/hydrobase/station/growA) -"bm" = ( -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/effect/floor_decal/industrial/warning/fulltile, -/obj/machinery/door/blast/regular{ - dir = 4; - id_tag = "goatzone"; - name = "Containment Zone" - }, -/turf/simulated/floor/tiled/white, -/area/map_template/hydrobase/station/goatzone) -"bn" = ( -/obj/structure/cable/yellow{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/turf/simulated/floor/tiled/white, -/area/map_template/hydrobase/station/growF) -"bo" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/turf/simulated/floor/tiled/white, -/area/map_template/hydrobase/station/growF) -"bp" = ( -/obj/structure/catwalk, -/obj/machinery/portable_atmospherics/hydroponics, -/obj/item/seeds/pumpkinseed, -/turf/simulated/floor/fixed/alium, -/area/map_template/hydrobase/station/growF) -"bq" = ( -/obj/structure/lattice, -/turf/simulated/wall/alium, -/area/map_template/hydrobase/station/growF) -"br" = ( -/obj/machinery/alarm{ - dir = 8; - pixel_x = 24 - }, -/obj/machinery/firealarm{ - dir = 4; - pixel_x = 39; - pixel_y = 4 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/hydrobase/station/growD) -"bs" = ( -/obj/structure/catwalk, -/obj/machinery/light{ - dir = 8; - icon_state = "tube1" - }, -/obj/machinery/portable_atmospherics/hydroponics, -/obj/item/seeds/tobaccoseed, -/turf/simulated/floor/fixed/alium, -/area/map_template/hydrobase/station/growA) -"bt" = ( -/obj/machinery/light{ - dir = 4; - icon_state = "tube1" - }, -/turf/simulated/floor/tiled/white, -/area/map_template/hydrobase/station/growA) -"bu" = ( -/turf/simulated/wall/alium, -/area/map_template/hydrobase/station/growA) -"bv" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/light{ - dir = 8; - icon_state = "tube1" - }, -/turf/simulated/floor/tiled/white, -/area/map_template/hydrobase/station/growA) -"bw" = ( -/obj/structure/catwalk, -/obj/machinery/light{ - dir = 4; - icon_state = "tube1" - }, -/obj/machinery/portable_atmospherics/hydroponics, -/obj/item/seeds/tobaccoseed, -/turf/simulated/floor/fixed/alium, -/area/map_template/hydrobase/station/growA) -"bx" = ( -/obj/machinery/light{ - dir = 1 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/hydrobase/station/growF) -"by" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 1 - }, -/obj/structure/sign/warning/caution{ - name = "\improper DO NOT ENTER - FOR AI USE ONLY"; - pixel_y = 32 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/hydrobase/station/growF) -"bz" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 1 - }, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/tiled/white, -/area/map_template/hydrobase/station/growF) -"bA" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 1 - }, -/obj/machinery/button/blast_door{ - id_tag = "goatzone"; - name = "containment zone control"; - pixel_y = 25 - }, -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/white, -/area/map_template/hydrobase/station/growF) -"bB" = ( -/obj/structure/cable/yellow{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/machinery/light{ - dir = 1 - }, -/obj/structure/cable/yellow{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/turf/simulated/floor/tiled/white, -/area/map_template/hydrobase/station/growF) -"bC" = ( -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/turf/simulated/floor/tiled/white, -/area/map_template/hydrobase/station/growF) -"bD" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/tiled/white, -/area/map_template/hydrobase/station/growF) -"bE" = ( -/obj/structure/catwalk, -/obj/machinery/light{ - dir = 4; - icon_state = "tube1" - }, -/obj/machinery/portable_atmospherics/hydroponics, -/obj/item/seeds/whitebeetseed, -/turf/simulated/floor/fixed/alium, -/area/map_template/hydrobase/station/growF) -"bF" = ( -/obj/machinery/mech_recharger, -/obj/machinery/light{ - dir = 1; - icon_state = "tube1" - }, -/mob/living/simple_animal/hostile/retaliate/malf_drone/hydro, -/turf/simulated/floor/bluegrid, -/area/map_template/hydrobase/station/growA) -"bG" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/tiled/white, -/area/map_template/hydrobase/station/growA) -"bH" = ( -/obj/item/trash/cigbutt/woodbutt, -/turf/simulated/floor/tiled/white, -/area/map_template/hydrobase/station/growF) -"bI" = ( -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/white, -/area/map_template/hydrobase/station/growF) -"bJ" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - level = 2 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/hydrobase/station/growF) -"bK" = ( -/obj/structure/catwalk, -/obj/machinery/portable_atmospherics/hydroponics, -/obj/item/seeds/whitebeetseed, -/turf/simulated/floor/fixed/alium, -/area/map_template/hydrobase/station/growF) -"bL" = ( -/obj/machinery/light{ - dir = 8; - icon_state = "tube1" - }, -/turf/simulated/floor/tiled/white, -/area/map_template/hydrobase/station/growD) -"bM" = ( -/obj/item/trash/cigbutt, -/turf/simulated/floor/tiled/white, -/area/map_template/hydrobase/station/growD) -"bN" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/hydrobase/station/growD) -"bO" = ( -/obj/structure/cable/yellow{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/hydrobase/station/growD) -"bP" = ( -/obj/machinery/door/airlock/virology, -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/door/firedoor, -/turf/simulated/floor/tiled/white, -/area/map_template/hydrobase/station/growD) -"bQ" = ( -/obj/structure/cable/yellow{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/hydrobase/station/growA) -"bR" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/bluegrid, -/area/map_template/hydrobase/station/growA) -"bS" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/turf/simulated/floor/bluegrid, -/area/map_template/hydrobase/station/growA) -"bT" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/bluegrid, -/area/map_template/hydrobase/station/growA) -"bU" = ( -/obj/structure/cable/yellow{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/turf/simulated/floor/tiled/white, -/area/map_template/hydrobase/station/growA) -"bV" = ( -/obj/machinery/door/airlock/virology, -/obj/machinery/door/firedoor, -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/white, -/area/map_template/hydrobase/station/growF) -"bW" = ( -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/white, -/area/map_template/hydrobase/station/growF) -"bX" = ( -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/tiled/white, -/area/map_template/hydrobase/station/growF) -"bY" = ( -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/cable/yellow{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/turf/simulated/floor/tiled/white, -/area/map_template/hydrobase/station/growF) -"bZ" = ( -/obj/machinery/mech_recharger, -/mob/living/bot/farmbot{ - faction = "farmbots" - }, -/turf/simulated/floor/bluegrid, -/area/map_template/hydrobase/station/growF) -"ca" = ( -/obj/effect/wallframe_spawn/reinforced_phoron, -/obj/machinery/door/firedoor, -/turf/simulated/floor/fixed/alium, -/area/map_template/hydrobase/station/growF) -"cb" = ( -/obj/structure/catwalk, -/obj/machinery/light, -/obj/machinery/portable_atmospherics/hydroponics, -/obj/item/seeds/ambrosiadeusseed, -/turf/simulated/floor/fixed/alium, -/area/map_template/hydrobase/station/growD) -"cc" = ( -/obj/structure/cable/yellow, -/obj/machinery/power/apc{ - dir = 4; - pixel_x = 25 - }, -/obj/machinery/mech_recharger, -/mob/living/simple_animal/hostile/retaliate/malf_drone/hydro, -/turf/simulated/floor/tiled/white, -/area/map_template/hydrobase/station/growD) -"cd" = ( -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/white, -/area/map_template/hydrobase/station/growA) -"ce" = ( -/obj/machinery/alarm{ - dir = 4; - pixel_x = -24 - }, -/obj/machinery/firealarm{ - dir = 8; - pixel_x = -38 - }, -/turf/simulated/floor/tiled, -/area/map_template/hydrobase/station/growF) -"cf" = ( -/turf/simulated/floor/tiled, -/area/map_template/hydrobase/station/growF) -"cg" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/turf/simulated/floor/tiled, -/area/map_template/hydrobase/station/growF) -"ch" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/map_template/hydrobase/station/growF) -"ci" = ( -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 1 - }, -/obj/item/trash/cigbutt/woodbutt, -/turf/simulated/floor/tiled, -/area/map_template/hydrobase/station/growF) -"cj" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply, -/turf/simulated/floor/tiled, -/area/map_template/hydrobase/station/growF) -"ck" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 - }, -/turf/simulated/floor/tiled, -/area/map_template/hydrobase/station/growF) -"cl" = ( -/obj/machinery/seed_extractor, -/obj/machinery/seed_storage/random, -/turf/simulated/floor/tiled, -/area/map_template/hydrobase/station/growF) -"cm" = ( -/turf/simulated/wall/alium, -/area/map_template/hydrobase/station/growC) -"cn" = ( -/obj/machinery/light{ - dir = 8 - }, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/white, -/area/map_template/hydrobase/station/growA) -"co" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/item/trash/cigbutt/menthol, -/turf/simulated/floor/tiled/white, -/area/map_template/hydrobase/station/growA) -"cp" = ( -/obj/machinery/light{ - dir = 4; - icon_state = "tube1" - }, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/white, -/area/map_template/hydrobase/station/growA) -"cq" = ( -/obj/structure/closet/secure_closet/hydroponics/hydro, -/obj/item/material/hatchet/machete, -/turf/simulated/floor/tiled, -/area/map_template/hydrobase/station/growF) -"cr" = ( -/obj/structure/closet/secure_closet/hydroponics/hydro, -/obj/item/material/scythe, -/turf/simulated/floor/tiled, -/area/map_template/hydrobase/station/growF) -"cs" = ( -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/tiled, -/area/map_template/hydrobase/station/growF) -"ct" = ( -/obj/item/material/knife/kitchen, -/obj/structure/table/glass/pglass, -/obj/item/material/ashtray/bronze, -/turf/simulated/floor/tiled, -/area/map_template/hydrobase/station/growF) -"cu" = ( -/obj/machinery/seed_extractor, -/turf/simulated/floor/tiled, -/area/map_template/hydrobase/station/growF) -"cv" = ( -/obj/effect/wallframe_spawn/reinforced_phoron, -/obj/machinery/door/firedoor, -/turf/simulated/floor/fixed/alium, -/area/map_template/hydrobase/station/growC) -"cw" = ( -/obj/structure/catwalk, -/obj/machinery/portable_atmospherics/hydroponics, -/obj/item/seeds/lemonseed, -/turf/simulated/floor/fixed/alium, -/area/map_template/hydrobase/station/growC) -"cx" = ( -/obj/structure/catwalk, -/obj/machinery/portable_atmospherics/hydroponics, -/obj/item/seeds/glowberryseed, -/turf/simulated/floor/fixed/alium, -/area/map_template/hydrobase/station/growC) -"cy" = ( -/obj/structure/catwalk, -/obj/machinery/portable_atmospherics/hydroponics, -/obj/item/seeds/goldappleseed, -/turf/simulated/floor/fixed/alium, -/area/map_template/hydrobase/station/growC) -"cz" = ( -/obj/structure/catwalk, -/obj/machinery/light{ - dir = 1 - }, -/obj/machinery/portable_atmospherics/hydroponics, -/obj/item/seeds/garlicseed, -/turf/simulated/floor/fixed/alium, -/area/map_template/hydrobase/station/growC) -"cA" = ( -/obj/structure/catwalk, -/obj/machinery/portable_atmospherics/hydroponics, -/obj/item/seeds/eggplantseed, -/turf/simulated/floor/fixed/alium, -/area/map_template/hydrobase/station/growC) -"cB" = ( -/obj/structure/catwalk, -/obj/machinery/portable_atmospherics/hydroponics, -/obj/item/seeds/cornseed, -/turf/simulated/floor/fixed/alium, -/area/map_template/hydrobase/station/growC) -"cC" = ( -/obj/machinery/alarm{ - dir = 8; - pixel_x = 24 - }, -/obj/machinery/firealarm{ - dir = 4; - pixel_x = 39; - pixel_y = 4 - }, -/obj/machinery/mech_recharger, -/mob/living/simple_animal/hostile/retaliate/malf_drone/hydro, -/turf/simulated/floor/bluegrid, -/area/map_template/hydrobase/station/growC) -"cD" = ( -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/catwalk, -/obj/machinery/portable_atmospherics/hydroponics, -/obj/item/seeds/puretobaccoseed, -/turf/simulated/floor/fixed/alium, -/area/map_template/hydrobase/station/growA) -"cE" = ( -/obj/machinery/atmospherics/unary/tank/air{ - dir = 4; - start_pressure = 740.5 - }, -/obj/structure/window/phoronreinforced{ - dir = 1; - icon_state = "phoronrwindow" - }, -/turf/simulated/floor/fixed/alium, -/area/map_template/hydrobase/station/growF) -"cF" = ( -/obj/machinery/atmospherics/pipe/manifold/visible/cyan{ - dir = 1 - }, -/obj/structure/window/phoronreinforced{ - dir = 1; - icon_state = "phoronrwindow" - }, -/obj/structure/catwalk, -/turf/simulated/floor/fixed/alium, -/area/map_template/hydrobase/station/growF) -"cG" = ( -/obj/machinery/atmospherics/binary/pump{ - dir = 4 - }, -/obj/structure/window/phoronreinforced{ - dir = 1; - icon_state = "phoronrwindow" - }, -/obj/structure/catwalk, -/obj/random/toolbox, -/obj/structure/table/rack, -/obj/item/gun/projectile/pirate, -/turf/simulated/floor/fixed/alium, -/area/map_template/hydrobase/station/growF) -"cH" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/universal{ - dir = 4 - }, -/obj/structure/window/phoronreinforced{ - dir = 1; - icon_state = "phoronrwindow" - }, -/obj/structure/window/phoronreinforced{ - dir = 4 - }, -/obj/structure/catwalk, -/obj/machinery/fabricator, -/turf/simulated/floor/fixed/alium, -/area/map_template/hydrobase/station/growF) -"cI" = ( -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/map_template/hydrobase/station/growF) -"cJ" = ( -/obj/structure/table/glass/pglass, -/obj/item/seeds/random, -/obj/item/seeds/random, -/obj/item/seeds/random, -/obj/item/gun/energy/floragun, -/turf/simulated/floor/tiled, -/area/map_template/hydrobase/station/growF) -"cK" = ( -/obj/machinery/biogenerator, -/turf/simulated/floor/tiled, -/area/map_template/hydrobase/station/growF) -"cL" = ( -/turf/simulated/floor/fixed/alium/airless, -/area/map_template/hydrobase/solars) -"cM" = ( -/obj/machinery/power/solar{ - id = "hydrosolar" - }, -/obj/effect/floor_decal/solarpanel, -/obj/structure/cable{ - d1 = 16; - d2 = 0; - dir = 4; - icon_state = "0-2" - }, -/turf/simulated/floor/fixed/alium/airless, -/area/map_template/hydrobase/solars) -"cN" = ( -/obj/structure/cable{ - icon_state = "2-8" - }, -/turf/simulated/floor/fixed/alium/airless, -/area/map_template/hydrobase/solars) -"cO" = ( -/obj/structure/catwalk, -/obj/machinery/portable_atmospherics/hydroponics, -/obj/item/seeds/chiliseed, -/turf/simulated/floor/fixed/alium, -/area/map_template/hydrobase/station/growC) -"cP" = ( -/turf/simulated/floor/bluegrid, -/area/map_template/hydrobase/station/growC) -"cQ" = ( -/obj/item/trash/cigbutt/woodbutt, -/turf/simulated/floor/tiled/white, -/area/map_template/hydrobase/station/growC) -"cR" = ( -/turf/simulated/floor/tiled/white, -/area/map_template/hydrobase/station/growC) -"cS" = ( -/obj/machinery/power/apc{ - dir = 4; - pixel_x = 25 - }, -/obj/structure/cable/yellow{ - d2 = 2; - icon_state = "0-2" - }, -/turf/simulated/floor/tiled/white, -/area/map_template/hydrobase/station/growC) -"cT" = ( -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/catwalk, -/obj/machinery/light{ - dir = 8 - }, -/obj/machinery/portable_atmospherics/hydroponics, -/obj/item/seeds/puretobaccoseed, -/turf/simulated/floor/fixed/alium, -/area/map_template/hydrobase/station/growA) -"cU" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/hydrobase/station/growA) -"cV" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 1 - }, -/turf/simulated/floor/bluegrid, -/area/map_template/hydrobase/station/growA) -"cW" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/hydrobase/station/growA) -"cX" = ( -/obj/item/trash/cigbutt/woodbutt, -/turf/simulated/floor/tiled/white, -/area/map_template/hydrobase/station/growA) -"cY" = ( -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/catwalk, -/obj/machinery/light{ - dir = 4; - icon_state = "tube1" - }, -/obj/machinery/portable_atmospherics/hydroponics, -/obj/item/seeds/puretobaccoseed, -/turf/simulated/floor/fixed/alium, -/area/map_template/hydrobase/station/growA) -"cZ" = ( -/obj/machinery/atmospherics/unary/tank/air{ - dir = 4; - start_pressure = 740.5 - }, -/turf/simulated/floor/fixed/alium, -/area/map_template/hydrobase/station/growF) -"da" = ( -/obj/machinery/atmospherics/pipe/simple/visible/cyan{ - dir = 9 - }, -/obj/machinery/light, -/obj/structure/catwalk, -/turf/simulated/floor/fixed/alium, -/area/map_template/hydrobase/station/growF) -"db" = ( -/obj/structure/catwalk, -/turf/simulated/floor/fixed/alium, -/area/map_template/hydrobase/station/growF) -"dc" = ( -/obj/machinery/power/apc{ - pixel_y = -25 - }, -/obj/structure/cable/yellow{ - d2 = 4; - icon_state = "0-4" - }, -/obj/structure/catwalk, -/turf/simulated/floor/fixed/alium, -/area/map_template/hydrobase/station/growF) -"dd" = ( -/obj/structure/cable/yellow{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/tiled, -/area/map_template/hydrobase/station/growF) -"de" = ( -/obj/machinery/light, -/turf/simulated/floor/tiled, -/area/map_template/hydrobase/station/growF) -"df" = ( -/obj/machinery/vending/hydronutrients, -/turf/simulated/floor/tiled, -/area/map_template/hydrobase/station/growF) -"dg" = ( -/turf/template_noop, -/area/map_template/hydrobase/solars) -"dh" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/fixed/alium/airless, -/area/map_template/hydrobase/solars) -"di" = ( -/obj/machinery/light{ - dir = 8 - }, -/obj/structure/catwalk, -/obj/machinery/portable_atmospherics/hydroponics, -/obj/item/seeds/grassseed, -/turf/simulated/floor/fixed/alium, -/area/map_template/hydrobase/station/growC) -"dj" = ( -/mob/living/bot/farmbot{ - faction = "farmbots" - }, -/turf/simulated/floor/tiled/white, -/area/map_template/hydrobase/station/growC) -"dk" = ( -/obj/structure/catwalk, -/obj/machinery/portable_atmospherics/hydroponics, -/obj/item/seeds/bluespacetomatoseed, -/turf/simulated/floor/fixed/alium, -/area/map_template/hydrobase/station/growC) -"dl" = ( -/obj/structure/catwalk, -/obj/machinery/portable_atmospherics/hydroponics, -/obj/item/seeds/tomatoseed, -/turf/simulated/floor/fixed/alium, -/area/map_template/hydrobase/station/growC) -"dm" = ( -/obj/structure/catwalk, -/obj/machinery/portable_atmospherics/hydroponics, -/obj/item/seeds/bluetomatoseed, -/turf/simulated/floor/fixed/alium, -/area/map_template/hydrobase/station/growC) -"dn" = ( -/obj/structure/catwalk, -/obj/machinery/portable_atmospherics/hydroponics, -/obj/item/seeds/greengrapeseed, -/turf/simulated/floor/fixed/alium, -/area/map_template/hydrobase/station/growC) -"do" = ( -/obj/structure/catwalk, -/obj/machinery/portable_atmospherics/hydroponics, -/obj/item/seeds/bananaseed, -/turf/simulated/floor/fixed/alium, -/area/map_template/hydrobase/station/growC) -"dp" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/hydrobase/station/growC) -"dq" = ( -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/hydrobase/station/growC) -"dr" = ( -/obj/machinery/door/airlock/virology, -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/door/firedoor, -/turf/simulated/floor/tiled/white, -/area/map_template/hydrobase/station/growC) -"ds" = ( -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/cable/yellow{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/bluegrid, -/area/map_template/hydrobase/station/growA) -"dt" = ( -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/turf/simulated/floor/bluegrid, -/area/map_template/hydrobase/station/growA) -"du" = ( -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/bluegrid, -/area/map_template/hydrobase/station/growA) -"dv" = ( -/obj/structure/cable/yellow{ - d2 = 4; - icon_state = "0-4" - }, -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 8 - }, -/obj/structure/decoy{ - icon_state = "ai-crash"; - name = "inactive AI" - }, -/turf/simulated/floor/bluegrid, -/area/map_template/hydrobase/station/growA) -"dw" = ( -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/bluegrid, -/area/map_template/hydrobase/station/growA) -"dx" = ( -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/turf/simulated/floor/bluegrid, -/area/map_template/hydrobase/station/growA) -"dy" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/door/airlock/virology, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/door/firedoor, -/turf/simulated/floor/tiled, -/area/map_template/hydrobase/station/growF) -"dz" = ( -/obj/structure/cable{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/turf/simulated/wall/alium, -/area/map_template/hydrobase/station/growF) -"dA" = ( -/obj/structure/cable{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/wall/alium, -/area/map_template/hydrobase/station/growF) -"dB" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/wall/alium, -/area/map_template/hydrobase/station/growF) -"dC" = ( -/obj/structure/cable{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/turf/simulated/wall/alium, -/area/map_template/hydrobase/station/growF) -"dD" = ( -/obj/structure/cable{ - icon_state = "2-8" - }, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/fixed/alium/airless, -/area/map_template/hydrobase/solars) -"dE" = ( -/obj/structure/catwalk, -/obj/machinery/portable_atmospherics/hydroponics, -/obj/item/seeds/peppercornseed, -/turf/simulated/floor/fixed/alium, -/area/map_template/hydrobase/station/growC) -"dF" = ( -/obj/item/trash/cigbutt, -/turf/simulated/floor/tiled/white, -/area/map_template/hydrobase/station/growC) -"dG" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 1 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/hydrobase/station/growA) -"dH" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply, -/mob/living/bot/cleanbot{ - faction = "farmbots"; - name = "Steward Stewart" - }, -/turf/simulated/floor/bluegrid, -/area/map_template/hydrobase/station/growA) -"dI" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/catwalk, -/obj/machinery/light{ - dir = 4; - icon_state = "tube1" - }, -/obj/machinery/portable_atmospherics/hydroponics, -/obj/item/seeds/puretobaccoseed, -/turf/simulated/floor/fixed/alium, -/area/map_template/hydrobase/station/growA) -"dJ" = ( -/turf/simulated/wall/alium, -/area/map_template/hydrobase/station/processing) -"dK" = ( -/obj/structure/catwalk, -/obj/machinery/light{ - dir = 1; - icon_state = "tube1" - }, -/obj/machinery/reagentgrinder/juicer, -/obj/item/reagent_containers/glass/beaker/large, -/obj/structure/table/glass/pglass, -/turf/simulated/floor/fixed/alium, -/area/map_template/hydrobase/station/processing) -"dL" = ( -/obj/structure/catwalk, -/obj/structure/closet/shipping_wall/filled{ - pixel_y = 32 - }, -/obj/structure/table/glass/pglass, -/turf/simulated/floor/fixed/alium, -/area/map_template/hydrobase/station/processing) -"dM" = ( -/obj/structure/catwalk, -/obj/item/material/kitchen/utensil/spoon, -/obj/structure/table/glass/pglass, -/turf/simulated/floor/fixed/alium, -/area/map_template/hydrobase/station/processing) -"dN" = ( -/obj/structure/catwalk, -/obj/machinery/light{ - dir = 1; - icon_state = "tube1" - }, -/obj/machinery/smartfridge/drying_rack, -/turf/simulated/floor/fixed/alium, -/area/map_template/hydrobase/station/processing) -"dO" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/turf/simulated/floor/tiled, -/area/map_template/hydrobase/station/processing) -"dP" = ( -/obj/structure/cable/yellow{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/structure/sign/warning/smoking{ - pixel_y = 32 - }, -/obj/structure/bed/chair/office/light{ - dir = 4; - icon_state = "officechair_white_preview" - }, -/turf/simulated/floor/tiled, -/area/map_template/hydrobase/station/processing) -"dQ" = ( -/obj/structure/table/glass/pglass, -/obj/item/storage/box/pillbottles, -/obj/item/storage/box/pillbottles, -/obj/item/reagent_containers/glass/beaker/vial/random, -/obj/item/reagent_containers/glass/beaker/vial/random, -/obj/item/reagent_containers/glass/beaker/vial/random, -/obj/item/reagent_containers/glass/beaker/vial/random, -/turf/simulated/floor/tiled, -/area/map_template/hydrobase/station/processing) -"dR" = ( -/obj/machinery/power/solar_control/autostart{ - id = "hydrosolar" - }, -/obj/structure/window/phoronreinforced{ - dir = 8; - icon_state = "phoronrwindow" - }, -/obj/structure/cable, -/obj/structure/catwalk, -/turf/simulated/floor/fixed/alium, -/area/map_template/hydrobase/station/processing) -"dS" = ( -/obj/machinery/power/terminal{ - dir = 4 - }, -/obj/structure/cable, -/obj/structure/catwalk, -/obj/machinery/light{ - dir = 1 - }, -/turf/simulated/floor/fixed/alium, -/area/map_template/hydrobase/station/processing) -"dT" = ( -/obj/machinery/power/smes/buildable/max_cap_in_out, -/obj/structure/cable/yellow{ - d2 = 2; - icon_state = "0-2" - }, -/obj/structure/catwalk, -/turf/simulated/floor/fixed/alium, -/area/map_template/hydrobase/station/processing) -"dU" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/turf/simulated/wall/alium, -/area/map_template/hydrobase/station/processing) -"dV" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/template_noop, -/area/map_template/hydrobase/solars) -"dW" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/cable{ - d1 = 2; - d2 = 8; - desc = "A flexible superconducting cable for heavy-duty power transfer. It's been labeled 'chaos reigns'."; - icon_state = "2-8" - }, -/turf/simulated/floor/fixed/alium/airless, -/area/map_template/hydrobase/solars) -"dX" = ( -/obj/structure/catwalk, -/obj/machinery/portable_atmospherics/hydroponics, -/obj/item/seeds/onionseed, -/turf/simulated/floor/fixed/alium, -/area/map_template/hydrobase/station/growC) -"dY" = ( -/obj/structure/catwalk, -/obj/machinery/portable_atmospherics/hydroponics, -/obj/item/seeds/peanutseed, -/turf/simulated/floor/fixed/alium, -/area/map_template/hydrobase/station/growC) -"dZ" = ( -/obj/structure/catwalk, -/obj/machinery/portable_atmospherics/hydroponics, -/obj/item/seeds/potatoseed, -/turf/simulated/floor/fixed/alium, -/area/map_template/hydrobase/station/growC) -"ea" = ( -/obj/structure/catwalk, -/obj/machinery/light, -/obj/machinery/portable_atmospherics/hydroponics, -/obj/item/seeds/riceseed, -/turf/simulated/floor/fixed/alium, -/area/map_template/hydrobase/station/growC) -"eb" = ( -/obj/structure/catwalk, -/obj/machinery/portable_atmospherics/hydroponics, -/obj/item/seeds/sugarcaneseed, -/turf/simulated/floor/fixed/alium, -/area/map_template/hydrobase/station/growC) -"ec" = ( -/obj/structure/catwalk, -/obj/machinery/portable_atmospherics/hydroponics, -/obj/item/seeds/soyaseed, -/turf/simulated/floor/fixed/alium, -/area/map_template/hydrobase/station/growC) -"ed" = ( -/obj/structure/catwalk, -/obj/machinery/portable_atmospherics/hydroponics, -/obj/item/seeds/poisonberryseed, -/turf/simulated/floor/fixed/alium, -/area/map_template/hydrobase/station/growC) -"ee" = ( -/obj/machinery/mech_recharger, -/mob/living/simple_animal/hostile/retaliate/malf_drone/hydro, -/turf/simulated/floor/bluegrid, -/area/map_template/hydrobase/station/growC) -"ef" = ( -/obj/structure/catwalk, -/obj/machinery/portable_atmospherics/hydroponics, -/obj/item/seeds/finetobaccoseed, -/turf/simulated/floor/fixed/alium, -/area/map_template/hydrobase/station/growA) -"eg" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/catwalk, -/obj/machinery/portable_atmospherics/hydroponics, -/obj/item/seeds/puretobaccoseed, -/turf/simulated/floor/fixed/alium, -/area/map_template/hydrobase/station/growA) -"eh" = ( -/obj/structure/catwalk, -/obj/item/material/kitchen/rollingpin, -/obj/item/material/knife/kitchen, -/obj/structure/table/glass/pglass, -/obj/item/material/ashtray/bronze, -/turf/simulated/floor/fixed/alium, -/area/map_template/hydrobase/station/processing) -"ei" = ( -/obj/structure/bed/chair/office/light{ - dir = 1; - icon_state = "officechair_white_preview" - }, -/turf/simulated/floor/tiled, -/area/map_template/hydrobase/station/processing) -"ej" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/map_template/hydrobase/station/processing) -"ek" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 1 - }, -/turf/simulated/floor/tiled, -/area/map_template/hydrobase/station/processing) -"el" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply, -/turf/simulated/floor/tiled, -/area/map_template/hydrobase/station/processing) -"em" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled, -/area/map_template/hydrobase/station/processing) -"en" = ( -/obj/machinery/chem_master, -/turf/simulated/floor/tiled, -/area/map_template/hydrobase/station/processing) -"eo" = ( -/obj/structure/closet/toolcloset, -/obj/structure/window/phoronreinforced{ - dir = 8; - icon_state = "phoronrwindow" - }, -/obj/structure/window/phoronreinforced, -/obj/structure/catwalk, -/turf/simulated/floor/fixed/alium, -/area/map_template/hydrobase/station/processing) -"ep" = ( -/obj/structure/catwalk, -/turf/simulated/floor/fixed/alium, -/area/map_template/hydrobase/station/processing) -"eq" = ( -/obj/machinery/power/apc{ - dir = 4; - name = "east bump"; - pixel_x = 24 - }, -/obj/structure/cable/yellow, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/window/phoronreinforced, -/obj/structure/catwalk, -/turf/simulated/floor/fixed/alium, -/area/map_template/hydrobase/station/processing) -"er" = ( -/turf/simulated/wall/alium, -/area/map_template/hydrobase/station/solarlock) -"es" = ( -/obj/effect/floor_decal/industrial/warning/corner, -/turf/simulated/floor/fixed/alium/airless, -/area/template_noop) -"et" = ( -/obj/effect/floor_decal/industrial/warning, -/turf/simulated/floor/fixed/alium/airless, -/area/template_noop) -"eu" = ( -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 8; - icon_state = "warningcorner" - }, -/turf/simulated/floor/fixed/alium/airless, -/area/template_noop) -"ev" = ( -/obj/machinery/alarm{ - dir = 4; - pixel_x = -24 - }, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/firealarm{ - dir = 8; - pixel_x = -38 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/hydrobase/station/growA) -"ew" = ( -/obj/machinery/door/airlock/virology, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/door/firedoor, -/turf/simulated/floor/tiled/dark, -/area/map_template/hydrobase/station/processing) -"ex" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/map_template/hydrobase/station/processing) -"ey" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 - }, -/turf/simulated/floor/tiled, -/area/map_template/hydrobase/station/processing) -"ez" = ( -/turf/simulated/floor/tiled, -/area/map_template/hydrobase/station/processing) -"eA" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 8 - }, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled, -/area/map_template/hydrobase/station/processing) -"eB" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/universal{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/map_template/hydrobase/station/processing) -"eC" = ( -/obj/machinery/atmospherics/binary/pump/on{ - dir = 4; - target_pressure = 200 - }, -/turf/simulated/floor/tiled, -/area/map_template/hydrobase/station/processing) -"eD" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden{ - dir = 1 - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 4; - icon_state = "warning" - }, -/obj/machinery/access_button{ - command = "cycle_interior"; - frequency = 1380; - master_tag = "solars_airlock"; - name = "interior access button"; - pixel_x = 24; - pixel_y = -24 - }, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/turf/simulated/floor/tiled, -/area/map_template/hydrobase/station/processing) -"eE" = ( -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 4 - }, -/obj/machinery/door/airlock/external{ - frequency = 1380; - icon_state = "door_locked"; - id_tag = "solars_inner"; - locked = 1; - name = "EVA Internal Access" - }, -/obj/structure/catwalk, -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/fixed/alium, -/area/map_template/hydrobase/station/solarlock) -"eF" = ( -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 4 - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 8; - icon_state = "warning" - }, -/obj/machinery/embedded_controller/radio/airlock/airlock_controller{ - frequency = 1380; - id_tag = "solars_airlock"; - name = "EVA Airlock Console"; - pixel_y = -24; - tag_airpump = "solars_pump"; - tag_chamber_sensor = "solars_sensor"; - tag_exterior_door = "solars_outer"; - tag_interior_door = "solars_inner" - }, -/obj/machinery/power/apc{ - dir = 1; - pixel_y = 25 - }, -/obj/structure/catwalk, -/obj/machinery/light/small{ - dir = 1 - }, -/obj/structure/cable/yellow{ - d2 = 8; - icon_state = "0-8" - }, -/turf/simulated/floor/fixed/alium, -/area/map_template/hydrobase/station/solarlock) -"eG" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 4; - icon_state = "warning" - }, -/obj/machinery/airlock_sensor{ - frequency = 1380; - id_tag = "solars_sensor"; - pixel_y = 25 - }, -/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{ - dir = 8; - id_tag = "solars_pump" - }, -/obj/structure/catwalk, -/turf/simulated/floor/fixed/alium, -/area/map_template/hydrobase/station/solarlock) -"eH" = ( -/obj/machinery/door/airlock/external{ - frequency = 1380; - icon_state = "door_locked"; - id_tag = "solars_outer"; - locked = 1; - name = "EVA External Access" - }, -/obj/structure/catwalk, -/turf/simulated/floor/fixed/alium, -/area/map_template/hydrobase/station/solarlock) -"eI" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 8; - icon_state = "warning" - }, -/obj/machinery/access_button{ - command = "cycle_exterior"; - frequency = 1380; - master_tag = "solars_airlock"; - name = "exterior access button"; - pixel_x = -24; - pixel_y = 24 - }, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/cable{ - d1 = 16; - d2 = 0; - dir = 4; - icon_state = "0-2" - }, -/turf/simulated/floor/fixed/alium/airless, -/area/map_template/hydrobase/solars) -"eJ" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/fixed/alium/airless, -/area/template_noop) -"eK" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 4; - icon_state = "warning" - }, -/turf/simulated/floor/fixed/alium/airless, -/area/template_noop) -"eL" = ( -/obj/machinery/power/tracker{ - id = "hydrosolar" - }, -/obj/structure/cable{ - dir = 4 - }, -/turf/simulated/floor/exoplanet/concrete, -/area/template_noop) -"eM" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 8; - icon_state = "warning" - }, -/turf/simulated/floor/fixed/alium/airless, -/area/template_noop) -"eN" = ( -/turf/simulated/wall/alium, -/area/map_template/hydrobase/station/growB) -"eO" = ( -/obj/machinery/mech_recharger, -/mob/living/simple_animal/hostile/retaliate/malf_drone/hydro, -/turf/simulated/floor/bluegrid, -/area/map_template/hydrobase/station/growB) -"eP" = ( -/obj/structure/catwalk, -/obj/machinery/portable_atmospherics/hydroponics, -/obj/item/seeds/amanitamycelium, -/turf/simulated/floor/fixed/alium, -/area/map_template/hydrobase/station/growB) -"eQ" = ( -/obj/structure/catwalk, -/obj/machinery/light{ - dir = 1; - icon_state = "tube1" - }, -/obj/machinery/portable_atmospherics/hydroponics, -/obj/item/seeds/amanitamycelium, -/turf/simulated/floor/fixed/alium, -/area/map_template/hydrobase/station/growB) -"eR" = ( -/obj/structure/cable/yellow{ - d2 = 2; - icon_state = "0-2" - }, -/obj/machinery/power/apc{ - dir = 4; - pixel_x = 25 - }, -/obj/machinery/mech_recharger, -/mob/living/simple_animal/hostile/retaliate/malf_drone/hydro, -/turf/simulated/floor/bluegrid, -/area/map_template/hydrobase/station/growB) -"eS" = ( -/obj/machinery/power/apc{ - dir = 8; - pixel_x = -25 - }, -/obj/structure/cable/yellow, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/white, -/area/map_template/hydrobase/station/growA) -"eT" = ( -/obj/structure/catwalk, -/obj/machinery/alarm{ - dir = 4; - pixel_x = -24 - }, -/obj/machinery/light{ - dir = 8 - }, -/obj/machinery/firealarm{ - dir = 8; - pixel_x = -38 - }, -/turf/simulated/floor/fixed/alium, -/area/map_template/hydrobase/station/processing) -"eU" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/item/trash/cigbutt/woodbutt, -/turf/simulated/floor/tiled, -/area/map_template/hydrobase/station/processing) -"eW" = ( -/obj/structure/catwalk, -/obj/structure/closet/crate, -/obj/item/reagent_containers/pill/happy, -/obj/item/reagent_containers/pill/happy, -/obj/item/reagent_containers/pill/happy, -/obj/item/reagent_containers/pill/happy, -/obj/item/reagent_containers/pill/methylphenidate, -/obj/item/reagent_containers/pill/methylphenidate, -/obj/item/reagent_containers/pill/methylphenidate, -/obj/random/smokes, -/obj/random/smokes, -/obj/random/smokes, -/obj/item/reagent_containers/pill/zoom, -/obj/item/reagent_containers/pill/zoom, -/obj/item/reagent_containers/pill/zoom, -/obj/item/toy/crossbow{ - desc = "A minature crossbow that fires some sort of dart from an internal magazine."; - name = "mini-crossbow" - }, -/turf/simulated/floor/fixed/alium, -/area/map_template/hydrobase/station/processing) -"eX" = ( -/obj/structure/closet/l3closet/general/multi, -/obj/structure/window/phoronreinforced{ - dir = 8; - icon_state = "phoronrwindow" - }, -/turf/simulated/floor/tiled, -/area/map_template/hydrobase/station/processing) -"eY" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable/yellow{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/turf/simulated/floor/tiled, -/area/map_template/hydrobase/station/processing) -"eZ" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 1 - }, -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/item/shreddedp, -/turf/simulated/floor/tiled, -/area/map_template/hydrobase/station/processing) -"fa" = ( -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/catwalk, -/obj/structure/window/phoronreinforced{ - dir = 8; - icon_state = "phoronrwindow" - }, -/obj/item/material/shard/phoron, -/turf/simulated/floor/fixed/alium, -/area/map_template/hydrobase/station/processing) -"fb" = ( -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/catwalk, -/turf/simulated/floor/fixed/alium, -/area/map_template/hydrobase/station/processing) -"fc" = ( -/obj/machinery/atmospherics/pipe/simple/hidden, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/structure/catwalk, -/obj/structure/window/phoronreinforced{ - dir = 1; - icon_state = "phoronrwindow" - }, -/turf/simulated/floor/fixed/alium, -/area/map_template/hydrobase/station/processing) -"fd" = ( -/obj/effect/wallframe_spawn/reinforced_phoron, -/turf/simulated/floor/fixed/alium, -/area/map_template/hydrobase/station/solarlock) -"fe" = ( -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 4; - icon_state = "warningcorner" - }, -/turf/simulated/floor/fixed/alium/airless, -/area/template_noop) -"ff" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 1 - }, -/turf/simulated/floor/fixed/alium/airless, -/area/template_noop) -"fg" = ( -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 1; - icon_state = "warningcorner" - }, -/turf/simulated/floor/fixed/alium/airless, -/area/template_noop) -"fh" = ( -/obj/machinery/light{ - dir = 8; - icon_state = "tube1" - }, -/turf/simulated/floor/tiled/white, -/area/map_template/hydrobase/station/growB) -"fi" = ( -/turf/simulated/floor/tiled/white, -/area/map_template/hydrobase/station/growB) -"fj" = ( -/turf/simulated/floor/bluegrid, -/area/map_template/hydrobase/station/growB) -"fk" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/hydrobase/station/growB) -"fl" = ( -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/hydrobase/station/growB) -"fm" = ( -/obj/machinery/door/airlock/virology, -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/door/firedoor, -/turf/simulated/floor/tiled/white, -/area/map_template/hydrobase/station/growB) -"fn" = ( -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/hydrobase/station/growA) -"fo" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 - }, -/turf/simulated/floor/bluegrid, -/area/map_template/hydrobase/station/growA) -"fp" = ( -/obj/structure/catwalk, -/obj/machinery/button/blast_door{ - id_tag = "shipping"; - pixel_x = -25 - }, -/turf/simulated/floor/fixed/alium, -/area/map_template/hydrobase/station/processing) -"fq" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/universal, -/turf/simulated/floor/tiled, -/area/map_template/hydrobase/station/processing) -"fr" = ( -/obj/structure/catwalk, -/obj/item/material/knife/folding/combat/switchblade, -/obj/random/coin, -/obj/random/coin, -/obj/structure/closet/crate/secure/weapon{ - desc = "A heavy-duty crate with a suite of firearms safety instructions plastered on the side. The ID scanner is unlike anything you've seen before."; - req_access = list("ACCESS_SYNDICATE") - }, -/obj/random/projectile, -/obj/item/material/knife/combat, -/obj/item/spacecash/bundle/c100, -/obj/random/cash, -/obj/random/cash, -/obj/random/handgun, -/obj/item/stack/material/diamond/ten, -/obj/item/stack/material/gold/ten, -/obj/item/stack/material/gold/ten, -/turf/simulated/floor/fixed/alium, -/area/map_template/hydrobase/station/processing) -"fs" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled, -/area/map_template/hydrobase/station/processing) -"ft" = ( -/obj/machinery/light, -/obj/structure/window/phoronreinforced{ - dir = 8; - icon_state = "phoronrwindow" - }, -/obj/structure/table/rack, -/obj/item/ammo_casing/shotgun/emp, -/obj/item/ammo_casing/shotgun/emp, -/obj/item/gun/projectile/shotgun/doublebarrel, -/obj/structure/window/phoronreinforced{ - dir = 4 - }, -/obj/item/grenade/chem_grenade/antiweed, -/obj/item/grenade/chem_grenade/incendiary, -/obj/item/weedkiller/D24, -/obj/item/material/shard/phoron, -/turf/simulated/floor/tiled/dark, -/area/map_template/hydrobase/station/processing) -"fu" = ( -/obj/structure/dispenser/oxygen, -/obj/structure/catwalk, -/turf/simulated/floor/fixed/alium, -/area/map_template/hydrobase/station/processing) -"fv" = ( -/obj/machinery/portable_atmospherics/canister/air/airlock, -/obj/machinery/atmospherics/portables_connector{ - dir = 1 - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/structure/catwalk, -/turf/simulated/floor/fixed/alium, -/area/map_template/hydrobase/station/processing) -"fw" = ( -/obj/effect/wallframe_spawn/reinforced_phoron, -/obj/machinery/door/firedoor, -/turf/simulated/floor/fixed/alium, -/area/map_template/hydrobase/station/growB) -"fx" = ( -/obj/structure/catwalk, -/obj/machinery/portable_atmospherics/hydroponics, -/obj/item/seeds/reishimycelium, -/turf/simulated/floor/fixed/alium, -/area/map_template/hydrobase/station/growB) -"fy" = ( -/obj/structure/catwalk, -/obj/machinery/portable_atmospherics/hydroponics, -/obj/item/seeds/angelmycelium, -/turf/simulated/floor/fixed/alium, -/area/map_template/hydrobase/station/growB) -"fz" = ( -/obj/machinery/alarm{ - dir = 8; - pixel_x = 24 - }, -/obj/machinery/firealarm{ - dir = 4; - pixel_x = 39; - pixel_y = 4 - }, -/turf/simulated/floor/bluegrid, -/area/map_template/hydrobase/station/growB) -"fA" = ( -/obj/machinery/light, -/obj/machinery/mech_recharger, -/mob/living/simple_animal/hostile/retaliate/malf_drone/hydro, -/turf/simulated/floor/bluegrid, -/area/map_template/hydrobase/station/growA) -"fB" = ( -/turf/simulated/wall/alium, -/area/map_template/hydrobase/station/shipaccess) -"fC" = ( -/obj/effect/wallframe_spawn/reinforced_phoron, -/obj/machinery/door/firedoor, -/turf/simulated/floor/plating, -/area/map_template/hydrobase/station/shipaccess) -"fD" = ( -/obj/machinery/atmospherics/binary/pump/on, -/obj/machinery/door/blast/regular{ - dir = 4; - id_tag = "shipping" - }, -/obj/machinery/door/firedoor, -/turf/simulated/floor/tiled, -/area/map_template/hydrobase/station/shipaccess) -"fE" = ( -/turf/simulated/wall/alium, -/area/map_template/hydrobase/station/shower) -"fF" = ( -/obj/machinery/door/airlock/virology, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/door/firedoor, -/turf/simulated/floor/tiled/freezer, -/area/map_template/hydrobase/station/shower) -"fG" = ( -/obj/machinery/power/solar{ - id = "hydrosolar" - }, -/obj/effect/floor_decal/solarpanel, -/obj/structure/cable{ - d1 = 16; - d2 = 0; - dir = 4; - icon_state = "0-2" - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/fixed/alium/airless, -/area/map_template/hydrobase/solars) -"fH" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/fixed/alium/airless, -/area/map_template/hydrobase/solars) -"fI" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/fixed/alium/airless, -/area/map_template/hydrobase/solars) -"fJ" = ( -/obj/structure/catwalk, -/obj/machinery/portable_atmospherics/hydroponics, -/turf/simulated/floor/fixed/alium, -/area/map_template/hydrobase/station/growB) -"fK" = ( -/obj/machinery/light{ - dir = 8 - }, -/obj/structure/catwalk, -/obj/machinery/portable_atmospherics/hydroponics, -/obj/item/seeds/finetobaccoseed, -/turf/simulated/floor/fixed/alium, -/area/map_template/hydrobase/station/growA) -"fL" = ( -/obj/structure/catwalk, -/obj/machinery/light{ - dir = 4; - icon_state = "tube1" - }, -/obj/machinery/portable_atmospherics/hydroponics, -/obj/item/seeds/finetobaccoseed, -/turf/simulated/floor/fixed/alium, -/area/map_template/hydrobase/station/growA) -"fM" = ( -/obj/machinery/power/apc{ - dir = 8; - name = "west bump"; - pixel_x = -24 - }, -/obj/structure/catwalk, -/obj/structure/cable/yellow{ - d2 = 4; - icon_state = "0-4" - }, -/turf/simulated/floor/fixed/alium, -/area/map_template/hydrobase/station/shipaccess) -"fN" = ( -/obj/machinery/atmospherics/pipe/simple/hidden, -/obj/structure/cable/yellow{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/turf/simulated/floor/tiled, -/area/map_template/hydrobase/station/shipaccess) -"fO" = ( -/obj/structure/catwalk, -/obj/machinery/button/blast_door{ - id_tag = "shipping"; - pixel_x = 25 - }, -/turf/simulated/floor/fixed/alium, -/area/map_template/hydrobase/station/shipaccess) -"fP" = ( -/obj/machinery/washing_machine, -/obj/machinery/power/apc{ - dir = 1; - pixel_y = 25 - }, -/obj/structure/cable/yellow{ - d2 = 4; - icon_state = "0-4" - }, -/turf/simulated/floor/tiled/freezer, -/area/map_template/hydrobase/station/shower) -"fQ" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/freezer, -/area/map_template/hydrobase/station/shower) -"fR" = ( -/obj/structure/curtain/open/shower, -/obj/structure/hygiene/shower{ - dir = 8 - }, -/obj/item/bikehorn/rubberducky, -/turf/simulated/floor/tiled/freezer, -/area/map_template/hydrobase/station/shower) -"fS" = ( -/obj/structure/catwalk, -/obj/machinery/portable_atmospherics/hydroponics, -/obj/item/seeds/towermycelium, -/turf/simulated/floor/fixed/alium, -/area/map_template/hydrobase/station/growB) -"fT" = ( -/mob/living/bot/farmbot{ - faction = "farmbots" - }, -/turf/simulated/floor/tiled/white, -/area/map_template/hydrobase/station/growB) -"fU" = ( -/obj/machinery/light{ - dir = 4; - icon_state = "tube1" - }, -/turf/simulated/floor/tiled/white, -/area/map_template/hydrobase/station/growB) -"fV" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 4 - }, -/obj/machinery/light{ - dir = 1; - icon_state = "tube1" - }, -/mob/living/simple_animal/hostile/retaliate/malf_drone/hydro, -/turf/simulated/floor/bluegrid, -/area/map_template/hydrobase/station/growA) -"fW" = ( -/obj/machinery/light/small{ - dir = 8 - }, -/obj/structure/catwalk, -/obj/machinery/access_button{ - command = "cycle_interior"; - frequency = 1380; - master_tag = "hydrodock_airlock"; - name = "interior access button"; - pixel_x = -24; - req_access = newlist() - }, -/turf/simulated/floor/fixed/alium, -/area/map_template/hydrobase/station/shipaccess) -"fX" = ( -/obj/machinery/atmospherics/pipe/simple/hidden, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled, -/area/map_template/hydrobase/station/shipaccess) -"fY" = ( -/obj/machinery/alarm{ - dir = 8; - pixel_x = 24 - }, -/obj/machinery/light/small{ - dir = 4 - }, -/obj/structure/catwalk, -/obj/machinery/firealarm{ - dir = 4; - pixel_x = 39; - pixel_y = 4 - }, -/turf/simulated/floor/fixed/alium, -/area/map_template/hydrobase/station/shipaccess) -"fZ" = ( -/obj/machinery/light{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 - }, -/turf/simulated/floor/tiled/freezer, -/area/map_template/hydrobase/station/shower) -"ga" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 4 - }, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/freezer, -/area/map_template/hydrobase/station/shower) -"gb" = ( -/turf/simulated/floor/tiled/freezer, -/area/map_template/hydrobase/station/shower) -"gc" = ( -/obj/structure/catwalk, -/obj/machinery/light{ - dir = 8; - icon_state = "tube1" - }, -/obj/machinery/portable_atmospherics/hydroponics, -/obj/item/seeds/towermycelium, -/turf/simulated/floor/fixed/alium, -/area/map_template/hydrobase/station/growB) -"gd" = ( -/obj/item/trash/cigbutt, -/turf/simulated/floor/tiled/white, -/area/map_template/hydrobase/station/growB) -"ge" = ( -/obj/machinery/portable_atmospherics/canister/air/airlock, -/obj/machinery/atmospherics/portables_connector{ - dir = 4 - }, -/obj/effect/floor_decal/industrial/warning, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled, -/area/map_template/hydrobase/station/shipaccess) -"gf" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden{ - dir = 4 - }, -/obj/effect/floor_decal/industrial/warning, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/structure/cable/yellow{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/turf/simulated/floor/tiled, -/area/map_template/hydrobase/station/shipaccess) -"gg" = ( -/obj/effect/floor_decal/industrial/warning, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 4 - }, -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled, -/area/map_template/hydrobase/station/shipaccess) -"gh" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/door/airlock/virology, -/obj/machinery/door/firedoor, -/turf/simulated/floor/tiled/freezer, -/area/map_template/hydrobase/station/shower) -"gi" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 - }, -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/freezer, -/area/map_template/hydrobase/station/shower) -"gj" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 1 - }, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/turf/simulated/floor/tiled/freezer, -/area/map_template/hydrobase/station/shower) -"gk" = ( -/obj/structure/curtain/open/shower, -/obj/structure/hygiene/shower{ - dir = 8 - }, -/turf/simulated/floor/tiled/freezer, -/area/map_template/hydrobase/station/shower) -"gl" = ( -/obj/structure/lattice, -/turf/simulated/wall/alium, -/area/map_template/hydrobase/station/shower) -"gm" = ( -/obj/structure/catwalk, -/obj/machinery/portable_atmospherics/hydroponics, -/obj/item/seeds/chantermycelium, -/turf/simulated/floor/fixed/alium, -/area/map_template/hydrobase/station/growB) -"gn" = ( -/turf/simulated/wall/alium, -/area/map_template/hydrobase/station/dockport) -"go" = ( -/obj/machinery/atmospherics/pipe/simple/hidden, -/obj/machinery/door/airlock/external{ - frequency = 1380; - icon_state = "door_locked"; - id_tag = "hydrodock_inner"; - locked = 1; - name = "Shipping Internal Access" - }, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled, -/area/map_template/hydrobase/station/dockport) -"gp" = ( -/obj/effect/wallframe_spawn/reinforced_phoron, -/obj/machinery/door/firedoor, -/turf/simulated/floor/plating, -/area/map_template/hydrobase/station/dockport) -"gq" = ( -/obj/machinery/light{ - dir = 8 - }, -/turf/simulated/floor/tiled/freezer, -/area/map_template/hydrobase/station/shower) -"gr" = ( -/obj/machinery/alarm{ - dir = 8; - pixel_x = 24 - }, -/obj/machinery/firealarm{ - dir = 4; - pixel_x = 39; - pixel_y = 4 - }, -/turf/simulated/floor/tiled/freezer, -/area/map_template/hydrobase/station/shower) -"gs" = ( -/obj/structure/catwalk, -/obj/machinery/light, -/obj/machinery/portable_atmospherics/hydroponics, -/obj/item/seeds/chantermycelium, -/turf/simulated/floor/fixed/alium, -/area/map_template/hydrobase/station/growB) -"gt" = ( -/obj/machinery/mech_recharger, -/mob/living/simple_animal/hostile/retaliate/malf_drone/hydro, -/turf/simulated/floor/tiled/white, -/area/map_template/hydrobase/station/growB) -"gu" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 1; - icon_state = "warning" - }, -/obj/machinery/airlock_sensor{ - frequency = 1380; - id_tag = "hydrodock_sensor"; - pixel_y = 25 - }, -/obj/machinery/power/apc{ - dir = 8; - name = "west bump"; - pixel_x = -24 - }, -/obj/structure/cable/yellow{ - d2 = 4; - icon_state = "0-4" - }, -/obj/structure/catwalk, -/turf/simulated/floor/fixed/alium, -/area/map_template/hydrobase/station/dockport) -"gv" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 1; - icon_state = "warning" - }, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden{ - dir = 8 - }, -/turf/simulated/floor/tiled, -/area/map_template/hydrobase/station/dockport) -"gw" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 1; - icon_state = "warning" - }, -/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{ - dir = 8; - id_tag = "hydrodock_pump" - }, -/obj/structure/catwalk, -/turf/simulated/floor/fixed/alium, -/area/map_template/hydrobase/station/dockport) -"gx" = ( -/obj/item/clothing/under/overalls, -/obj/item/clothing/shoes/desertboots, -/obj/structure/closet, -/turf/simulated/floor/tiled/freezer, -/area/map_template/hydrobase/station/shower) -"gy" = ( -/obj/item/clothing/accessory/toggleable/hawaii/random, -/obj/item/clothing/under/casual_pants/greyjeans, -/obj/item/clothing/head/bowlerhat, -/obj/item/clothing/shoes/leather, -/obj/structure/closet, -/turf/simulated/floor/tiled/freezer, -/area/map_template/hydrobase/station/shower) -"gz" = ( -/obj/item/clothing/under/skirt_c/dress/black, -/obj/item/clothing/head/beret/purple, -/obj/item/clothing/shoes/dress, -/obj/structure/closet, -/turf/simulated/floor/tiled/freezer, -/area/map_template/hydrobase/station/shower) -"gA" = ( -/obj/machinery/oxygen_pump{ - pixel_x = -32 - }, -/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{ - dir = 4; - id_tag = "hydrodock_pump" - }, -/obj/structure/catwalk, -/turf/simulated/floor/fixed/alium, -/area/map_template/hydrobase/station/dockport) -"gB" = ( -/obj/machinery/atmospherics/pipe/manifold4w/hidden, -/turf/simulated/floor/tiled, -/area/map_template/hydrobase/station/dockport) -"gC" = ( -/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{ - dir = 8; - id_tag = "hydrodock_pump" - }, -/obj/machinery/embedded_controller/radio/airlock/airlock_controller{ - frequency = 1380; - id_tag = "hydrodock_airlock"; - name = "Shipping Airlock Console"; - pixel_x = 24; - req_access = newlist(); - tag_airpump = "hydrodock_pump"; - tag_chamber_sensor = "hydrodock_sensor"; - tag_exterior_door = "hydrodock_outer"; - tag_interior_door = "hydrodock_inner" - }, -/obj/structure/catwalk, -/turf/simulated/floor/fixed/alium, -/area/map_template/hydrobase/station/dockport) -"gD" = ( -/obj/machinery/power/solar{ - id = "hydrosolar" - }, -/obj/effect/floor_decal/solarpanel, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/fixed/alium/airless, -/area/map_template/hydrobase/solars) -"gE" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/turf/simulated/floor/fixed/alium/airless, -/area/map_template/hydrobase/solars) -"gF" = ( -/obj/effect/floor_decal/industrial/warning, -/obj/machinery/light/small{ - dir = 8 - }, -/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{ - dir = 4; - id_tag = "hydrodock_pump" - }, -/obj/structure/catwalk, -/turf/simulated/floor/fixed/alium, -/area/map_template/hydrobase/station/dockport) -"gG" = ( -/obj/effect/floor_decal/industrial/warning, -/obj/effect/floor_decal/industrial/warning, -/obj/machinery/atmospherics/pipe/manifold/hidden, -/turf/simulated/floor/tiled, -/area/map_template/hydrobase/station/dockport) -"gH" = ( -/obj/effect/floor_decal/industrial/warning, -/obj/machinery/light/small{ - dir = 4 - }, -/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{ - dir = 8; - id_tag = "hydrodock_pump" - }, -/obj/structure/catwalk, -/turf/simulated/floor/fixed/alium, -/area/map_template/hydrobase/station/dockport) -"gI" = ( -/obj/machinery/light, -/obj/structure/catwalk, -/obj/machinery/portable_atmospherics/hydroponics, -/obj/item/seeds/finetobaccoseed, -/turf/simulated/floor/fixed/alium, -/area/map_template/hydrobase/station/growA) -"gJ" = ( -/obj/structure/sign/warning/smoking, -/turf/simulated/wall/alium, -/area/map_template/hydrobase/station/dockport) -"gK" = ( -/obj/machinery/door/airlock/external{ - frequency = 1380; - icon_state = "door_locked"; - id_tag = "hydrodock_outer"; - locked = 1; - name = "Shipping Access" - }, -/turf/simulated/floor/tiled/dark, -/area/map_template/hydrobase/station/dockport) -"gL" = ( -/obj/machinery/access_button{ - command = "cycle_exterior"; - frequency = 1380; - master_tag = "hydrodock_airlock"; - name = "exterior access button"; - pixel_x = 24; - pixel_y = 24; - req_access = newlist() - }, -/obj/effect/landmark/clear, -/turf/template_noop, -/area/template_noop) -"NL" = ( -/mob/living/simple_animal/hostile/retaliate/goat/hydro, -/turf/simulated/floor/tiled/dark, -/area/map_template/hydrobase/station/goatzone) -"RI" = ( -/obj/effect/landmark/clear, -/turf/template_noop, -/area/template_noop) - -(1,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(2,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -cv -cv -cv -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(3,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -cv -cv -di -cv -cv -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(4,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -at -at -au -au -au -at -at -cm -cv -cO -cP -dE -cv -cm -eN -eN -fw -fw -fw -eN -eN -aa -aa -aa -aa -aa -aa -"} -(5,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -at -at -bb -aO -aO -aO -bL -aD -cm -cw -cP -dj -cP -dX -cm -eO -fh -fx -fJ -fS -gc -eN -eN -aa -aa -aa -aa -aa -"} -(6,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -at -at -aO -aP -aQ -aQ -aQ -aQ -aO -cm -cx -cQ -dk -cR -dY -cm -eP -fi -fi -fi -fi -fj -gm -eN -eN -aa -aa -aa -aa -"} -(7,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -at -aB -aP -aP -aQ -aC -aO -bM -aC -cm -cy -cR -dl -cR -dZ -cm -eP -fi -fx -fx -fi -fj -fj -gs -eN -aa -aa -aa -aa -"} -(8,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -au -aC -aQ -aC -bi -aQ -aP -aQ -cb -cm -cz -cR -dm -cR -ea -cm -eQ -fi -fj -fi -fT -fx -fi -fj -fw -aa -aa -aa -aa -"} -(9,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -au -aC -aQ -aC -aQ -aC -aO -aP -aO -cm -cA -cR -dn -cR -eb -cm -eP -fj -fy -fy -fi -fx -fi -gm -fw -aa -aa -aa -aa -"} -(10,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -au -aC -aQ -aC -aQ -aQ -aP -aQ -aO -cm -cB -cR -do -cR -ec -cm -eP -fi -fj -fi -fi -fx -fi -gm -fw -aa -aa -aa -aa -"} -(11,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -at -aB -aP -aC -aP -aC -aO -bN -aC -cm -cB -cR -dp -cR -ed -cm -eP -fk -fy -fy -fj -fx -fj -gs -eN -aa -aa -aa -aa -"} -(12,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -at -aD -aR -aQ -bj -br -aP -bO -cc -cm -cC -cS -dq -dF -ee -cm -eR -fl -fz -fi -fU -gd -fi -gt -eN -aa -aa -aa -aa -"} -(13,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -at -at -at -at -at -at -at -bP -at -cm -cm -cm -dr -cm -cm -cm -eN -fm -eN -eN -eN -eN -eN -eN -eN -aa -aa -aa -aa -"} -(14,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -al -al -ap -ap -ap -ap -bs -aq -bQ -cd -cn -cD -cT -ds -cT -cD -ev -eS -fn -aq -fK -ef -ef -ef -ef -al -al -aa -aa -aa -"} -(15,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -al -al -ap -aq -aE -aE -aE -aE -aq -bR -aE -aE -aE -aE -dt -cU -aE -aE -cX -bR -aq -aE -aE -aE -aT -aq -ef -al -al -aa -aa -"} -(16,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -al -al -ap -aq -aE -aE -aE -aE -bt -aE -bS -bG -bG -bG -cU -du -dG -bG -bG -bG -fo -aE -bt -aE -aE -aE -aE -aq -ef -al -al -aa -"} -(17,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -al -ao -aq -av -aE -aS -aS -bk -bu -bF -ap -ap -ap -ap -cV -dv -dH -ef -ef -ef -ef -fA -bu -fV -ef -ef -aE -av -aq -gI -al -aa -"} -(18,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -al -al -ap -aq -aE -aE -aE -bl -bv -bG -bT -bG -co -bG -cW -dw -bl -bG -bG -bG -bT -bG -bv -cW -aE -aE -aE -aq -ef -al -al -aa -"} -(19,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -al -al -ap -aq -aT -aE -aE -aE -aq -aq -aE -aE -aE -cX -dw -aE -aE -aE -aE -aq -aq -aE -aE -aE -aE -aq -ef -al -al -aa -aa -"} -(20,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -al -al -ap -ap -ap -ap -bw -aq -bU -cd -cp -cD -cY -dx -dI -eg -cU -aE -aE -aq -fL -ef -ef -ef -ef -al -al -aa -aa -aa -"} -(21,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aw -aw -aw -aw -aw -aK -aK -bV -aK -aK -aK -aK -aK -dJ -dJ -ew -dJ -dJ -fB -fB -fB -fB -gn -gn -gn -gn -gJ -aa -aa -"} -(22,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aw -aF -aU -bc -aw -bx -ba -bW -ce -cq -cE -cZ -aK -dK -eh -ex -eT -fp -fC -fM -fW -ge -gn -gu -gA -gF -gp -RI -RI -"} -(23,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aw -aG -aH -bd -aw -by -bH -bW -cf -cr -cF -da -aK -dL -ei -ek -eU -fq -fD -fN -fX -gf -go -gv -gB -gG -gK -gL -RI -"} -(24,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aw -NL -aV -be -bm -bz -bD -bX -cg -cq -cG -db -aK -dM -ej -ex -ez -ep -fC -fO -fY -gg -gp -gw -gC -gH -gn -RI -RI -"} -(25,1,1) = {" -aa -aa -aa -ab -ae -ae -ae -ab -aa -aa -ax -aI -aG -aW -aw -bA -ba -bW -ch -cq -cH -dc -aK -dN -ek -ey -eW -fr -fE -fE -fE -gh -gn -gn -gn -gn -gn -aa -aa -"} -(26,1,1) = {" -aa -aa -ab -ab -af -ah -ac -ab -ab -aa -ax -aJ -aX -aw -aw -bB -bI -bY -ci -cs -cI -dd -dy -dO -el -ez -eX -eX -fE -fP -fZ -gi -gq -gx -fE -aa -aa -aa -aa -"} -(27,1,1) = {" -aa -ab -ab -ac -ad -ad -ad -am -ab -ab -ab -aK -aY -bf -bn -bC -bJ -bD -cj -ct -cJ -cf -aK -dP -em -eA -eY -fs -fF -fQ -ga -gj -gb -gy -fE -aa -aa -aa -aa -"} -(28,1,1) = {" -ab -ab -ac -ad -ad -ad -ad -ad -ac -ab -ay -aL -aZ -bg -bo -bD -bD -bD -ck -cf -cf -de -aK -dQ -en -ek -eZ -ez -fE -fR -gb -gk -gr -gz -fE -aa -aa -aa -aa -"} -(29,1,1) = {" -ab -ac -ad -ad -ad -ad -ad -ad -ad -ar -az -aM -ba -bh -bp -bE -bK -bZ -cl -cu -cK -df -dz -dR -eo -eB -fa -ft -fE -fE -fE -gl -fE -fE -fE -aa -aa -aa -aa -"} -(30,1,1) = {" -ab -ac -ad -ad -ag -ai -ak -ak -ak -as -aA -aN -aK -aK -bq -bq -aK -ca -aK -aK -aK -aK -dA -dS -ep -eC -fb -fu -dJ -dg -cL -dg -cL -dg -cL -aa -aa -aa -aa -"} -(31,1,1) = {" -ab -ab -ac -ad -ad -ad -ad -ad -ac -ab -ab -aK -aK -aa -aa -aa -aa -aa -aa -aa -aK -aK -dB -dT -eq -eD -fc -fv -dJ -dg -cM -dg -cM -dg -cM -aa -aa -aa -aa -"} -(32,1,1) = {" -aa -ab -ab -ac -ad -ad -ad -an -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -cL -aK -dC -dU -er -eE -er -dJ -dJ -dg -fH -dg -fH -dg -fH -aa -aa -aa -aa -"} -(33,1,1) = {" -aa -aa -ab -ab -af -ah -ac -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -cM -dg -cM -dV -er -eF -er -dg -fG -dg -fG -dg -fG -dg -gD -aa -aa -aa -aa -"} -(34,1,1) = {" -aa -aa -aa -ab -ae -ae -ae -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -cL -dg -cL -dV -er -eG -fd -dg -fH -dg -fH -dg -fH -dg -fH -aa -aa -aa -aa -"} -(35,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -cM -dg -cM -dV -er -eH -er -dg -fG -dg -fG -dg -fG -dg -gD -aa -aa -aa -aa -"} -(36,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -cN -dh -dD -dW -dh -eI -dh -dh -fI -dh -fI -dh -fI -dh -gE -aa -aa -aa -aa -"} -(37,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -eJ -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(38,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -es -eK -fe -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(39,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -et -eL -ff -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(40,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -eu -eM -fg -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} diff --git a/maps/random_ruins/exoplanet_ruins/icarus/icarus.dm b/maps/random_ruins/exoplanet_ruins/icarus/icarus.dm deleted file mode 100644 index 6d66baaf1e5a6..0000000000000 --- a/maps/random_ruins/exoplanet_ruins/icarus/icarus.dm +++ /dev/null @@ -1,208 +0,0 @@ -/datum/map_template/ruin/exoplanet/icarus - name = "SEV Icarus" - id = "icarus" - description = "The crash of the infamous SEV Icarus." - suffixes = list("icarus/icarus.dmm") - spawn_cost = 1 - ruin_tags = RUIN_HUMAN|RUIN_WRECK - template_flags = TEMPLATE_FLAG_CLEAR_CONTENTS | TEMPLATE_FLAG_NO_RUINS | TEMPLATE_FLAG_RUIN_STARTS_DISALLOWED - apc_test_exempt_areas = list( - /area/map_template/icarus = NO_SCRUBBER|NO_VENT|NO_APC - ) - -//Radiation death spawner thing from old Icarus - -/obj/effect/icarus_irradiate - name = "SEV Icarus Radiation Spawner" - icon = 'icons/effects/landmarks.dmi' - icon_state = "x2" - var/radiation_power = 20 //Dangerous but survivable for 10-15 minutes if crew is too lazy to read away map description - var/datum/radiation_source/S - var/req_range = 20 //to cover part of the ruin - -/obj/effect/icarus_irradiate/Initialize() - . = ..() - - name = null - icon = null - icon_state = null - - S = new() - S.flat = TRUE - S.range = req_range - S.respect_maint = FALSE - S.decay = FALSE - S.source_turf = get_turf(src) - S.update_rad_power(radiation_power) - SSradiation.add_source(S) - - loc.set_light(0.4, 1, req_range, l_color = COLOR_LIME) //The goo doesn't last, so this is another indicator - -/obj/effect/icarus_irradiate/Destroy() - . = ..() - QDEL_NULL(S) - -//Areas - -/area/map_template/icarus - name = "SEV Icarus" - icon = 'maps/random_ruins/exoplanet_ruins/icarus/icarus.dmi' - icon_state = "icarus" - -/area/map_template/icarus/bridge - name = "SEV Icarus Bridge" - icon_state = "bridge" - -/area/map_template/icarus/eng - name = "SEV Icarus Engineering Bay" - icon_state = "engine" - -/area/map_template/icarus/sec - name = "SEV Icarus Brig" - icon_state = "brig" - -/area/map_template/icarus/armory - name = "SEV Icarus Tactical Armory" - icon_state = "armory" - -/area/map_template/icarus/sci - name = "SEV Icarus Research Division" - icon_state = "research" - -/area/map_template/icarus/driver - icon_state = "driver" - -/area/map_template/icarus/driver/west - name = "SEV Icarus Port Mass Driver" - -/area/map_template/icarus/driver/east - name = "SEV Icarus Starboard Mass Driver" - - -//Objects - -/obj/item/icarus_disk - name = "disk" - desc = "A dusty disk. Its label says: \"Deliver to SCG Expeditionary Corps Command!\". Its content is encrypted with quantum cryptography methods." - icon = 'icons/obj/items.dmi' - icon_state = "nucleardisk" - item_state = "card-id" - w_class = ITEM_SIZE_TINY - -/obj/item/toy/icarus_model - name = "table-top SEV Icarus model" - desc = "A small model of a spaceship mounted on a wooden stand. On the stand is engraved: \"SEV Icarus 1:278th scale\". The small lights on the hull and the engine exhaust still light up and blink." - icon = 'maps/random_ruins/exoplanet_ruins/icarus/icarus.dmi' - icon_state = "model" - -/obj/item/gun/projectile/pistol/military/icarus - name = "rusty military pistol" - desc = "The Hephaestus Industries P20 - a mass produced kinetic sidearm in widespread service with the SCGDF. This one has seen better days, and has the name \"Alex\" engraved into it." - -//SCG deco - -/obj/structure/sign/icarus_dedicationplaque - name = "\improper SEV Icarus dedication plaque" - icon_state = "lightplaque" - desc = "S.E.V. Icarus - Lexington Class - Sol Expeditionary Corps Registry 95498 - Tennessee Fleet Yards, Mars - First Vessel To Bear The Name - Launched 2302 - Sol Central Government - 'Never was anything great achieved without danger.'" - -/obj/structure/sign/icarus_ecplaque - name = "\improper Expeditionary Directives" - desc = "A plaque with Expeditionary Corps logo etched in it. It looks faded and is illegible." - icon = 'maps/random_ruins/exoplanet_ruins/icarus/icarus.dmi' - icon_state = "ecplaque" - -/obj/structure/sign/double/icarus_solgovflag - name = "Sol Central Government Flag" - desc = "A faded SCG flag. It appears to have been radiation bleached." - icon = 'maps/random_ruins/exoplanet_ruins/icarus/icarus.dmi' - -/obj/structure/sign/double/icarus_solgovflag/left - icon_state = "solgovflag-left" - -/obj/structure/sign/double/icarus_solgovflag/right - icon_state = "solgovflag-right" - -/obj/structure/sign/icarus_solgov - name = "\improper Faded SCG seal" - desc = "A sign which signifies who this vessel belongs to. This one is faded." - icon = 'maps/random_ruins/exoplanet_ruins/icarus/icarus.dmi' - icon_state = "solgovseal" - -/obj/effect/floor_decal/icarus_scglogo - alpha = 230 - icon = 'maps/random_ruins/exoplanet_ruins/icarus/icarus_scglogo.dmi' - icon_state = "center" - -//Paper - -/obj/item/paper/icarus_log - name = "Printed log" - info = "\[LOG\]: Orbit stabilized. Next correction burst, est.: 2 hrs 12 m
              \ - \[LOG\]: Orbit stabiliztion. Announcing...
              \ - \[ANN\]: Attention all hands, SEV Icarus is stabilizing orbit in 30 seconds. Prepare for possible gravitational spikes.
              \ - \[LOG\]: Announcing complete.
              \ - \[LOG\]: Preparing for burst: heating up impulse mass.
              \ - \[WARN\]: Minor pressure alert, Reactor Cooling Loop 3.
              \ - \[LOG\]: Burst ready. Bursting in 5 seconds.
              \ - \[LOG\]: Orbit stabilized. Next correction burst, est.: 1 hr 47 m.
              \ - \[ADM\]: Preparing shuttles for landing. Current status: required refuilling.
              \ - \[REQ\]: Request to Engineering, Please refuel Shuttle #2... Sent.
              \ - \[WARN\]: Minor pressure alert, Reactor Cooling Loop 1.
              \ - \[RET\]: Request completed.
              \ - \[LOG\]: Manual correction {Engine->Cooling->Pumps}: calculating new trend.
              \ - \[LOG\]: Calculating complete. Notify ADMIN...
              \ - \[ERR\]: Positive feedback loop in Engine Core! Prepare for emergency procedures.
              \ - \[ERR\]: Positive feedback loop in Engine Core! Prepare for emergency procedures.
              \ - \[ERR\]: Positive feedback loop in Engine Core! Prepare for emergency procedures.
              \ - \[ERR\]: Positive feedback loop in Engine Core! Prepare for emergency procedures.
              \ - \[ERR\]: Positive feedback loop in Engine Core! Prepare for emergency procedures.
              \ - \[LOG\]: This error was muted for 120 seconds.
              \ - \[WARN\]: Multiple hull breaches detected.
              \ - \[WARN\]: Unexepected orbit change, calculating corrective burst.
              \ - \[LOG\]: Preparing for burst: heating up impulse mass.
              \ - \[ERR\]: Impulse mass: not found
              \ - \[LOG\]: Orbit stabilizing: failed.
              \ - \[WARN\]: Impact imminent... Preparing blackbox backup... Ready.
              \ - \[LOG\]: Emergency shutdown!
              \ - \[LOG\]: Now you can you safely turn off your computer.
              " - -/obj/item/paper/icarus_roster - name = "Printed crew manifest" - info = "
              \[solcrest]
              \ - SEV Icarus
              \ - Crew roster

              \ - Command
              \ - \[list]\ - \[*]Commanding Officer: Cmd. Alex Peterson\ - \[*]Executive Officer: Lt. Semyon Andors \ - \[*]CMO: Lt. Toko Nashamura\ - \[*]CE: Ens. Anna Lawrence\ - \[*]COS: Lt. Rand Forbarra\ - \[*]CSO: Dr. Carl Jozziliny\ - \[*]BO: Ens. Gordon Johnson\ - \[/list]
              \ - Medical dept.
              \ - \[list]\ - \[*]Physician: S. Expl. John Fors\ - \[*]Nurse: Expl. Antony Laffer\ - \[/list]
              \ - Engineering dept.
              \ - \[list]\ - \[*]Engineer: Expl. Ronda Atkins\ - \[*]Engineer: Expl. Peter Napp\ - \[/list]
              \ - Security dept.
              \ - \[list]\ - \[*]SO: S. Expl. Nuri Batyam\ - \[*]SO: Expl. Benjamin Tho\ - \[*]SO: Expl. Tetha-12-Alpha\ - \[/list]
              \ - Exploration team.
              \ - \[list]\ - \[*]Ch. Expl. Alex Warda\ - \[*]S. Expl. William Lions\ - \[*]Expl. Hope Bafflow\ - \[*]Expl. Yuri Meadows\ - \[*]Dr. Tetha-12-Beta\ - \[list]" diff --git a/maps/random_ruins/exoplanet_ruins/icarus/icarus.dmi b/maps/random_ruins/exoplanet_ruins/icarus/icarus.dmi deleted file mode 100644 index 15ce300722a67..0000000000000 Binary files a/maps/random_ruins/exoplanet_ruins/icarus/icarus.dmi and /dev/null differ diff --git a/maps/random_ruins/exoplanet_ruins/icarus/icarus.dmm b/maps/random_ruins/exoplanet_ruins/icarus/icarus.dmm deleted file mode 100644 index b960324c90db9..0000000000000 --- a/maps/random_ruins/exoplanet_ruins/icarus/icarus.dmm +++ /dev/null @@ -1,4121 +0,0 @@ -//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE -"aa" = ( -/obj/machinery/constructable_frame/computerframe, -/obj/item/stock_parts/circuitboard/broken, -/obj/effect/decal/cleanable/dirt, -/obj/item/material/shard, -/turf/simulated/floor/tiled/dark, -/area/map_template/icarus/bridge) -"ab" = ( -/obj/machinery/constructable_frame/computerframe, -/obj/item/material/shard, -/turf/simulated/floor/tiled/dark, -/area/map_template/icarus/bridge) -"ac" = ( -/obj/machinery/constructable_frame/computerframe, -/obj/item/stock_parts/circuitboard/broken, -/obj/item/material/shard, -/turf/simulated/floor/tiled/dark, -/area/map_template/icarus/bridge) -"ad" = ( -/obj/effect/floor_decal/icarus_scglogo{ - dir = 8; - icon_state = "center-left" - }, -/obj/machinery/constructable_frame/computerframe, -/obj/item/material/shard, -/turf/simulated/floor/tiled/dark, -/area/map_template/icarus/bridge) -"af" = ( -/obj/item/material/shard, -/turf/simulated/floor/tiled/dark, -/area/map_template/icarus/bridge) -"ag" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/constructable_frame/computerframe, -/obj/item/stock_parts/circuitboard/broken, -/obj/item/material/shard, -/turf/simulated/floor/tiled/techmaint, -/area/map_template/icarus/driver/west) -"ah" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/constructable_frame/computerframe, -/obj/item/stock_parts/circuitboard/broken, -/obj/item/material/shard, -/turf/simulated/floor/plating, -/area/map_template/icarus/driver/east) -"ak" = ( -/obj/random/trash, -/turf/simulated/floor/tiled, -/area/map_template/icarus/sec) -"am" = ( -/obj/effect/floor_decal/corner/red{ - dir = 6 - }, -/turf/simulated/floor/tiled, -/area/map_template/icarus/sec) -"ax" = ( -/obj/item/stack/tile/techmaint, -/obj/effect/landmark/clear, -/turf/template_noop, -/area/template_noop) -"ay" = ( -/turf/simulated/floor/wood/walnut, -/area/map_template/icarus/bridge) -"aB" = ( -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/techmaint, -/area/map_template/icarus/driver/east) -"aI" = ( -/turf/template_noop, -/area/template_noop) -"aN" = ( -/obj/effect/wallframe_spawn/reinforced/hull, -/turf/simulated/floor/plating, -/area/map_template/icarus/sec) -"aT" = ( -/obj/structure/grille, -/turf/simulated/floor/reinforced/airless, -/area/map_template/icarus/driver/east) -"aV" = ( -/obj/machinery/door/airlock/sol{ - name = "Bridge"; - secured_wires = 1 - }, -/turf/simulated/floor/tiled/steel_ridged, -/area/map_template/icarus/bridge) -"aX" = ( -/obj/effect/floor_decal/corner/yellow/half, -/obj/effect/decal/cleanable/dirt, -/obj/item/frame/fire_alarm, -/turf/simulated/floor/tiled, -/area/map_template/icarus/eng) -"be" = ( -/obj/effect/floor_decal/corner/blue{ - dir = 6 - }, -/obj/item/ore/slag, -/turf/simulated/floor/tiled/dark, -/area/map_template/icarus/bridge) -"br" = ( -/obj/effect/floor_decal/corner/blue{ - dir = 6 - }, -/obj/effect/floor_decal/corner/blue{ - dir = 8 - }, -/turf/simulated/floor/tiled/dark, -/area/map_template/icarus/bridge) -"bv" = ( -/obj/effect/floor_decal/corner/blue{ - dir = 6 - }, -/obj/item/frame/air_alarm, -/turf/simulated/floor/tiled/dark, -/area/map_template/icarus/bridge) -"bB" = ( -/obj/machinery/mass_driver{ - dir = 1 - }, -/obj/machinery/door/blast/regular{ - density = 0; - icon_state = "pdoor0"; - opacity = 0 - }, -/turf/simulated/floor/reinforced/airless, -/area/map_template/icarus/driver/east) -"bK" = ( -/obj/random/junk, -/obj/effect/landmark/clear, -/turf/template_noop, -/area/template_noop) -"ca" = ( -/obj/effect/floor_decal/corner/blue{ - dir = 9 - }, -/obj/effect/floor_decal/corner/blue{ - dir = 4 - }, -/obj/item/frame/fire_alarm, -/turf/simulated/floor/tiled/dark, -/area/map_template/icarus/bridge) -"cd" = ( -/obj/effect/floor_decal/spline/fancy/wood{ - dir = 1 - }, -/obj/item/ore/slag, -/turf/simulated/floor/carpet/blue, -/area/map_template/icarus/bridge) -"cq" = ( -/obj/effect/decal/cleanable/dirt, -/obj/item/frame/apc, -/turf/simulated/floor/tiled/white, -/area/map_template/icarus/sci) -"cx" = ( -/obj/machinery/artifact, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/white, -/area/map_template/icarus/sci) -"cF" = ( -/obj/effect/landmark/clear, -/obj/structure/stasis_cage, -/turf/template_noop, -/area/template_noop) -"cS" = ( -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plating, -/area/map_template/icarus/driver/east) -"cT" = ( -/obj/effect/decal/cleanable/dirt, -/obj/item/ore/slag, -/turf/simulated/floor/plating, -/area/map_template/icarus/driver/east) -"cZ" = ( -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/reinforced/airless, -/area/map_template/icarus/driver/west) -"dn" = ( -/obj/random/trash, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plating, -/area/map_template/icarus/sci) -"dD" = ( -/obj/structure/sign/icarus_solgov, -/turf/simulated/wall/r_wall/hull, -/area/map_template/icarus/driver/east) -"dL" = ( -/obj/effect/floor_decal/corner/blue{ - dir = 9 - }, -/obj/machinery/light_construct, -/turf/simulated/floor/tiled/dark, -/area/map_template/icarus/bridge) -"dR" = ( -/obj/machinery/light_construct, -/turf/simulated/floor/tiled/dark, -/area/map_template/icarus/bridge) -"dW" = ( -/obj/structure/sign/icarus_ecplaque{ - pixel_x = 26 - }, -/obj/item/frame/fire_alarm, -/turf/simulated/floor/tiled/dark, -/area/map_template/icarus/bridge) -"er" = ( -/obj/effect/decal/cleanable/dirt, -/obj/item/stack/material/rods, -/turf/simulated/floor/plating, -/area/map_template/icarus/sci) -"ev" = ( -/obj/effect/floor_decal/corner/blue/three_quarters{ - dir = 1 - }, -/obj/item/frame/air_alarm, -/obj/structure/filingcabinet/chestdrawer{ - dir = 1 - }, -/turf/simulated/floor/tiled/dark, -/area/map_template/icarus/bridge) -"ex" = ( -/obj/effect/wallframe_spawn/reinforced, -/turf/simulated/floor/plating, -/area/map_template/icarus/sec) -"ez" = ( -/obj/structure/bed, -/obj/item/bedsheet/captain, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/carpet/blue, -/area/map_template/icarus/bridge) -"fq" = ( -/obj/item/stack/material/rods, -/obj/effect/floor_decal/corner/research{ - dir = 5 - }, -/obj/structure/filingcabinet/chestdrawer, -/turf/simulated/floor/tiled/white, -/area/map_template/icarus/sci) -"fx" = ( -/obj/effect/floor_decal/corner/blue{ - dir = 6 - }, -/obj/machinery/photocopier, -/turf/simulated/floor/tiled/dark, -/area/map_template/icarus/bridge) -"fy" = ( -/obj/effect/floor_decal/corner/red{ - dir = 5 - }, -/obj/machinery/light_construct, -/turf/simulated/floor/tiled, -/area/map_template/icarus/sec) -"fz" = ( -/obj/effect/floor_decal/corner/research{ - dir = 5 - }, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/light_construct, -/turf/simulated/floor/tiled/white, -/area/map_template/icarus/sci) -"fE" = ( -/obj/structure/table/standard, -/obj/random/loot, -/turf/simulated/floor/tiled/dark, -/area/map_template/icarus/bridge) -"fJ" = ( -/obj/effect/floor_decal/corner/research{ - dir = 5 - }, -/obj/effect/decal/cleanable/dirt, -/obj/structure/bookcase/manuals/research_and_development, -/turf/simulated/floor/tiled/white, -/area/map_template/icarus/sci) -"fN" = ( -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plating, -/area/map_template/icarus/driver/west) -"gk" = ( -/obj/effect/decal/cleanable/dirt, -/obj/random/trash, -/turf/simulated/floor/tiled, -/area/map_template/icarus/sec) -"gp" = ( -/obj/item/stack/material/rods, -/obj/effect/landmark/clear, -/turf/template_noop, -/area/template_noop) -"gq" = ( -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plating, -/area/map_template/icarus/bridge) -"gt" = ( -/obj/structure/table/steel_reinforced, -/obj/machinery/photocopier/faxmachine, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/carpet/purple, -/area/map_template/icarus/sci) -"gy" = ( -/obj/random/junk, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/white, -/area/map_template/icarus/sci) -"gF" = ( -/obj/machinery/door/airlock/highsecurity/bolted, -/turf/simulated/floor/tiled/steel_ridged, -/area/map_template/icarus/armory) -"gM" = ( -/obj/structure/table/steel_reinforced, -/obj/structure/window/reinforced{ - dir = 8 - }, -/obj/item/folder/nt, -/turf/simulated/floor/carpet/purple, -/area/map_template/icarus/sci) -"gZ" = ( -/obj/effect/floor_decal/corner/blue/three_quarters{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/obj/structure/table/standard, -/obj/machinery/photocopier/faxmachine, -/turf/simulated/floor/tiled/dark, -/area/map_template/icarus/bridge) -"hc" = ( -/obj/structure/anomaly_container, -/turf/simulated/floor/tiled/white, -/area/map_template/icarus/sci) -"hf" = ( -/obj/effect/floor_decal/icarus_scglogo{ - dir = 8; - icon_state = "center-right" - }, -/turf/simulated/floor/tiled/dark, -/area/map_template/icarus/bridge) -"hg" = ( -/obj/machinery/light_construct, -/turf/simulated/floor/carpet/red, -/area/map_template/icarus/sec) -"hA" = ( -/obj/effect/decal/cleanable/dirt, -/obj/item/stack/material/rods, -/turf/simulated/floor/plating, -/area/map_template/icarus/eng) -"hO" = ( -/obj/effect/floor_decal/corner/red, -/turf/simulated/floor/tiled, -/area/map_template/icarus/sec) -"ia" = ( -/obj/random/junk, -/turf/simulated/floor/tiled/white, -/area/map_template/icarus/sci) -"ir" = ( -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plating, -/area/map_template/icarus/sec) -"iy" = ( -/turf/simulated/floor/tiled/white, -/area/map_template/icarus/sci) -"iB" = ( -/obj/effect/floor_decal/icarus_scglogo{ - dir = 8; - icon_state = "bottom-left" - }, -/obj/machinery/constructable_frame/computerframe, -/obj/item/stock_parts/circuitboard/broken, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/dark, -/area/map_template/icarus/bridge) -"iD" = ( -/turf/simulated/wall/r_wall/hull, -/area/map_template/icarus/bridge) -"iG" = ( -/obj/item/frame/air_alarm, -/turf/simulated/floor/tiled/white, -/area/map_template/icarus/sci) -"iJ" = ( -/obj/structure/bed/chair/comfy/blue, -/turf/simulated/floor/wood/walnut, -/area/map_template/icarus/bridge) -"iW" = ( -/obj/item/frame/air_alarm, -/turf/simulated/floor/tiled, -/area/map_template/icarus/sec) -"je" = ( -/obj/item/frame/fire_alarm, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plating, -/area/map_template/icarus/sec) -"jo" = ( -/obj/machinery/computer/modular/preset/security, -/turf/simulated/floor/carpet/red, -/area/map_template/icarus/sec) -"jS" = ( -/obj/effect/floor_decal/corner/blue{ - dir = 6 - }, -/obj/random/trash, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/dark, -/area/map_template/icarus/bridge) -"jZ" = ( -/obj/structure/filingcabinet, -/turf/simulated/floor/tiled/dark, -/area/map_template/icarus/bridge) -"kd" = ( -/turf/simulated/wall/r_wall/prepainted, -/area/map_template/icarus/sci) -"kf" = ( -/obj/item/stack/material/rods, -/obj/effect/landmark/clear, -/obj/effect/decal/cleanable/greenglow, -/turf/template_noop, -/area/template_noop) -"ks" = ( -/obj/item/ore/slag, -/turf/simulated/floor/tiled, -/area/map_template/icarus/sec) -"kt" = ( -/obj/structure/filingcabinet, -/turf/simulated/floor/carpet/red, -/area/map_template/icarus/sec) -"kz" = ( -/obj/effect/floor_decal/corner/yellow/mono, -/obj/structure/table/steel_reinforced, -/obj/item/paper_bin, -/obj/item/pen, -/turf/simulated/floor/tiled, -/area/map_template/icarus/eng) -"kK" = ( -/obj/machinery/constructable_frame/computerframe, -/obj/item/stock_parts/circuitboard/broken, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/dark, -/area/map_template/icarus/bridge) -"lh" = ( -/obj/effect/landmark/clear, -/obj/random/toolbox, -/turf/template_noop, -/area/template_noop) -"li" = ( -/obj/item/ore/slag, -/turf/simulated/floor/tiled/dark, -/area/map_template/icarus/bridge) -"lu" = ( -/obj/effect/floor_decal/icarus_scglogo{ - dir = 8; - icon_state = "top-left" - }, -/obj/machinery/constructable_frame/computerframe, -/obj/item/stock_parts/circuitboard/broken, -/turf/simulated/floor/tiled/dark, -/area/map_template/icarus/bridge) -"lv" = ( -/turf/simulated/floor/reinforced/airless, -/area/map_template/icarus/driver/west) -"lA" = ( -/obj/machinery/door/airlock/sol{ - name = "Commanding Officer"; - secured_wires = 1 - }, -/turf/simulated/floor/tiled/steel_ridged, -/area/map_template/icarus/bridge) -"lB" = ( -/obj/structure/table/standard, -/obj/random/contraband, -/turf/simulated/floor/carpet/red, -/area/map_template/icarus/sec) -"lM" = ( -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled, -/area/map_template/icarus/sec) -"mC" = ( -/obj/random/junk, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/techmaint, -/area/map_template/icarus/driver/west) -"mN" = ( -/obj/machinery/light_construct, -/turf/simulated/floor/wood/walnut, -/area/map_template/icarus/bridge) -"mZ" = ( -/obj/effect/decal/cleanable/dirt, -/obj/item/ore/slag, -/turf/simulated/floor/plating, -/area/map_template/icarus/bridge) -"nn" = ( -/obj/effect/floor_decal/industrial/outline/grey, -/obj/structure/closet/emcloset, -/turf/simulated/floor/tiled/dark/monotile, -/area/map_template/icarus/bridge) -"nO" = ( -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/techmaint, -/area/map_template/icarus/driver/west) -"oj" = ( -/turf/simulated/floor/plating, -/area/map_template/icarus/bridge) -"ow" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled, -/area/map_template/icarus/sec) -"oy" = ( -/obj/item/stack/tile/floor_dark, -/obj/effect/landmark/clear, -/turf/template_noop, -/area/template_noop) -"oD" = ( -/obj/effect/floor_decal/industrial/outline/grey, -/obj/machinery/suit_storage_unit/security, -/turf/simulated/floor/tiled/dark/monotile, -/area/map_template/icarus/armory) -"oI" = ( -/obj/effect/decal/cleanable/dirt, -/obj/item/ore/slag, -/turf/simulated/floor/tiled, -/area/map_template/icarus/sec) -"oJ" = ( -/obj/effect/floor_decal/corner/yellow/half{ - dir = 8 - }, -/obj/machinery/light_construct, -/turf/simulated/floor/tiled, -/area/map_template/icarus/eng) -"oN" = ( -/obj/effect/floor_decal/corner/blue{ - dir = 9 - }, -/obj/effect/floor_decal/corner/blue{ - dir = 4 - }, -/obj/machinery/light_construct, -/turf/simulated/floor/tiled/dark, -/area/map_template/icarus/bridge) -"oS" = ( -/obj/effect/floor_decal/corner/blue{ - dir = 9 - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/dark, -/area/map_template/icarus/bridge) -"oX" = ( -/obj/structure/table/woodentable/walnut, -/obj/item/toy/icarus_model, -/turf/simulated/floor/wood/walnut, -/area/map_template/icarus/bridge) -"pa" = ( -/obj/effect/floor_decal/corner/red{ - dir = 10 - }, -/obj/item/frame/air_alarm, -/turf/simulated/floor/tiled, -/area/map_template/icarus/sec) -"pk" = ( -/obj/structure/window/reinforced{ - dir = 8 - }, -/obj/structure/window/reinforced{ - dir = 1 - }, -/obj/structure/table/rack, -/obj/effect/floor_decal/industrial/outline/grey, -/obj/random/projectile, -/turf/simulated/floor/tiled/dark/monotile, -/area/map_template/icarus/armory) -"pL" = ( -/obj/effect/floor_decal/spline/fancy/wood{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/carpet/blue, -/area/map_template/icarus/bridge) -"pU" = ( -/obj/structure/sign/double/icarus_solgovflag/right{ - pixel_y = 32 - }, -/obj/effect/floor_decal/corner/blue{ - dir = 5 - }, -/obj/machinery/vending/cigarette, -/turf/simulated/floor/tiled/dark, -/area/map_template/icarus/bridge) -"pW" = ( -/obj/effect/floor_decal/corner/blue{ - dir = 6 - }, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/light_construct, -/turf/simulated/floor/tiled/dark, -/area/map_template/icarus/bridge) -"qo" = ( -/obj/effect/floor_decal/corner/blue{ - dir = 6 - }, -/obj/random/junk, -/turf/simulated/floor/tiled/dark, -/area/map_template/icarus/bridge) -"qD" = ( -/obj/item/frame/air_alarm, -/obj/machinery/light_construct, -/turf/simulated/floor/tiled/dark, -/area/map_template/icarus/armory) -"ra" = ( -/obj/item/frame/apc, -/turf/simulated/floor/tiled/dark, -/area/map_template/icarus/armory) -"rc" = ( -/obj/effect/floor_decal/corner/blue{ - dir = 9 - }, -/obj/effect/decal/cleanable/dirt, -/obj/random/junk, -/turf/simulated/floor/tiled/dark, -/area/map_template/icarus/bridge) -"rn" = ( -/obj/structure/closet/crate, -/obj/random/loot, -/turf/simulated/floor/tiled/techmaint, -/area/map_template/icarus/bridge) -"rr" = ( -/obj/effect/icarus_irradiate, -/turf/simulated/floor/tiled/white, -/area/map_template/icarus/sci) -"ru" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/undies_wardrobe, -/turf/simulated/floor/plating, -/area/map_template/icarus/bridge) -"rC" = ( -/obj/item/frame/apc, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plating, -/area/map_template/icarus/driver/west) -"rN" = ( -/obj/effect/floor_decal/corner/yellow/mono, -/obj/structure/closet/crate/secure/large/phoron/experimentalsm, -/turf/simulated/floor/tiled, -/area/map_template/icarus/eng) -"rW" = ( -/obj/structure/skele_stand/maint, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/techmaint, -/area/map_template/icarus/bridge) -"sj" = ( -/obj/machinery/door/airlock/hatch/maintenance, -/turf/simulated/floor/tiled/steel_ridged, -/area/map_template/icarus/bridge) -"sl" = ( -/obj/effect/floor_decal/corner/blue{ - dir = 5 - }, -/turf/simulated/floor/tiled/dark, -/area/map_template/icarus/bridge) -"sr" = ( -/obj/effect/floor_decal/corner/blue{ - dir = 9 - }, -/turf/simulated/floor/tiled/dark, -/area/map_template/icarus/bridge) -"su" = ( -/turf/simulated/floor/tiled/dark, -/area/map_template/icarus/bridge) -"sx" = ( -/obj/machinery/door/airlock/sol{ - name = "Bridge Storage"; - secured_wires = 1 - }, -/turf/simulated/floor/tiled/steel_ridged, -/area/map_template/icarus/bridge) -"sG" = ( -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/techmaint, -/area/map_template/icarus/bridge) -"sM" = ( -/obj/structure/table/glass, -/obj/effect/decal/cleanable/dirt, -/obj/item/gun/projectile/pistol/military/icarus, -/turf/simulated/floor/tiled/dark, -/area/map_template/icarus/bridge) -"sO" = ( -/obj/structure/bed/chair/comfy/red{ - dir = 8 - }, -/turf/simulated/floor/carpet/red, -/area/map_template/icarus/sec) -"sR" = ( -/obj/item/frame/air_alarm, -/turf/simulated/floor/tiled, -/area/map_template/icarus/eng) -"sS" = ( -/obj/effect/floor_decal/corner/blue{ - dir = 10 - }, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/light_construct, -/turf/simulated/floor/tiled/dark, -/area/map_template/icarus/bridge) -"sZ" = ( -/obj/effect/floor_decal/corner/blue{ - dir = 9 - }, -/obj/item/frame/air_alarm, -/turf/simulated/floor/tiled/dark, -/area/map_template/icarus/bridge) -"tF" = ( -/obj/effect/floor_decal/corner/blue{ - dir = 6 - }, -/obj/effect/decal/cleanable/dirt, -/obj/item/ore/slag, -/turf/simulated/floor/tiled/dark, -/area/map_template/icarus/bridge) -"tJ" = ( -/obj/structure/bed/chair, -/turf/simulated/floor/plating, -/area/template_noop) -"tW" = ( -/obj/item/frame/fire_alarm, -/turf/simulated/floor/tiled/dark, -/area/map_template/icarus/bridge) -"tY" = ( -/obj/effect/floor_decal/corner/blue{ - dir = 4 - }, -/obj/effect/floor_decal/corner/blue{ - dir = 9 - }, -/obj/random/trash, -/turf/simulated/floor/tiled/dark, -/area/map_template/icarus/bridge) -"uA" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/door/airlock/hatch/maintenance, -/turf/simulated/floor/tiled/steel_ridged, -/area/map_template/icarus/bridge) -"uB" = ( -/obj/effect/wallframe_spawn/reinforced/hull, -/turf/simulated/floor/plating, -/area/map_template/icarus/bridge) -"uC" = ( -/obj/structure/closet, -/turf/simulated/floor/carpet/red, -/area/map_template/icarus/sec) -"uH" = ( -/obj/random/trash, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/white, -/area/map_template/icarus/sci) -"ve" = ( -/obj/effect/floor_decal/corner/red{ - dir = 6 - }, -/obj/random/trash, -/turf/simulated/floor/tiled, -/area/map_template/icarus/sec) -"vq" = ( -/obj/effect/floor_decal/corner/blue{ - dir = 9 - }, -/obj/item/frame/apc, -/turf/simulated/floor/tiled/dark, -/area/map_template/icarus/bridge) -"vJ" = ( -/obj/structure/girder, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plating, -/area/map_template/icarus/driver/east) -"vK" = ( -/obj/structure/bed/chair/padded/blue{ - dir = 8 - }, -/obj/effect/floor_decal/corner/blue{ - dir = 10 - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/dark, -/area/map_template/icarus/bridge) -"vP" = ( -/obj/machinery/mass_driver{ - dir = 1 - }, -/obj/machinery/door/blast/regular{ - density = 0; - icon_state = "pdoor0"; - opacity = 0 - }, -/obj/structure/ship_munition/ap_slug, -/turf/simulated/floor/reinforced/airless, -/area/map_template/icarus/driver/west) -"wr" = ( -/obj/machinery/computer/modular/preset, -/turf/simulated/floor/carpet/purple, -/area/map_template/icarus/sci) -"wT" = ( -/obj/effect/floor_decal/corner/yellow/half{ - dir = 8 - }, -/obj/item/frame/apc, -/turf/simulated/floor/tiled, -/area/map_template/icarus/eng) -"wV" = ( -/obj/effect/floor_decal/corner/blue{ - dir = 9 - }, -/obj/item/frame/fire_alarm, -/turf/simulated/floor/tiled/dark, -/area/map_template/icarus/bridge) -"xd" = ( -/obj/effect/decal/cleanable/dirt, -/obj/item/ore/slag, -/turf/simulated/floor/plating, -/area/map_template/icarus/eng) -"xq" = ( -/obj/effect/floor_decal/icarus_scglogo{ - dir = 8; - icon_state = "bottom-right" - }, -/turf/simulated/floor/tiled/dark, -/area/map_template/icarus/bridge) -"xu" = ( -/obj/effect/decal/cleanable/dirt, -/obj/item/folder/red, -/turf/simulated/floor/tiled, -/area/map_template/icarus/sec) -"xJ" = ( -/obj/effect/floor_decal/corner/red{ - dir = 10 - }, -/obj/item/frame/apc, -/turf/simulated/floor/tiled, -/area/map_template/icarus/sec) -"xQ" = ( -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plating, -/area/map_template/icarus/armory) -"xY" = ( -/obj/effect/landmark/clear, -/obj/machinery/suspension_gen, -/turf/template_noop, -/area/template_noop) -"yi" = ( -/obj/structure/table/standard, -/obj/effect/floor_decal/corner/blue{ - dir = 10 - }, -/obj/effect/decal/cleanable/dirt, -/obj/item/folder/blue, -/turf/simulated/floor/tiled/dark, -/area/map_template/icarus/bridge) -"yt" = ( -/obj/effect/floor_decal/corner/blue{ - dir = 1 - }, -/turf/simulated/floor/tiled/dark, -/area/map_template/icarus/bridge) -"yS" = ( -/turf/simulated/wall/r_wall/prepainted, -/area/map_template/icarus/armory) -"yX" = ( -/obj/structure/window/reinforced{ - dir = 1 - }, -/obj/structure/table/rack, -/obj/effect/floor_decal/industrial/outline/grey, -/obj/random/hardsuit, -/turf/simulated/floor/tiled/dark/monotile, -/area/map_template/icarus/armory) -"ze" = ( -/obj/item/stack/material/rods, -/obj/effect/floor_decal/corner/blue{ - dir = 6 - }, -/turf/simulated/floor/tiled/dark, -/area/map_template/icarus/bridge) -"zp" = ( -/obj/structure/bed/chair/office/comfy/purple{ - dir = 1 - }, -/obj/item/remains/human, -/turf/simulated/floor/carpet/purple, -/area/map_template/icarus/sci) -"zS" = ( -/turf/simulated/wall/r_wall/hull, -/area/map_template/icarus/eng) -"zX" = ( -/obj/structure/bed/chair/comfy/blue{ - dir = 1 - }, -/obj/item/remains/human, -/obj/machinery/light_construct, -/turf/simulated/floor/tiled/dark, -/area/map_template/icarus/bridge) -"Ad" = ( -/obj/structure/girder, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plating, -/area/map_template/icarus/eng) -"Ag" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/closet/crate, -/obj/item/disk/secret_project/science, -/turf/simulated/floor/tiled/white, -/area/map_template/icarus/sci) -"AB" = ( -/obj/effect/floor_decal/icarus_scglogo{ - dir = 8 - }, -/obj/structure/bed/chair/comfy/captain{ - dir = 1 - }, -/obj/item/remains/human, -/turf/simulated/floor/tiled/dark, -/area/map_template/icarus/bridge) -"AG" = ( -/obj/effect/floor_decal/corner/yellow/half{ - dir = 8 - }, -/obj/structure/table/steel_reinforced, -/obj/item/folder/yellow, -/turf/simulated/floor/tiled, -/area/map_template/icarus/eng) -"AI" = ( -/obj/item/frame/apc, -/turf/simulated/floor/wood/walnut, -/area/map_template/icarus/bridge) -"AK" = ( -/obj/item/frame/air_alarm, -/turf/simulated/floor/tiled/dark, -/area/map_template/icarus/bridge) -"AQ" = ( -/obj/structure/table/standard, -/obj/item/paper_bin, -/obj/item/pen, -/turf/simulated/floor/carpet/red, -/area/map_template/icarus/sec) -"Br" = ( -/obj/structure/sign/icarus_solgov, -/turf/simulated/wall/r_wall/hull, -/area/map_template/icarus/driver/west) -"BN" = ( -/obj/structure/sign/icarus_solgov, -/turf/simulated/wall/r_wall/hull, -/area/map_template/icarus/bridge) -"Ca" = ( -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/map_template/icarus/bridge) -"Cg" = ( -/obj/machinery/door/blast/regular{ - density = 0; - icon_state = "pdoor0"; - opacity = 0 - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/reinforced/airless, -/area/map_template/icarus/driver/west) -"Ck" = ( -/obj/structure/girder, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plating, -/area/map_template/icarus/bridge) -"Cr" = ( -/turf/simulated/wall/r_wall/prepainted, -/area/map_template/icarus/driver/west) -"CR" = ( -/obj/effect/decal/cleanable/dirt, -/obj/item/stack/material/rods, -/turf/simulated/floor/plating, -/area/map_template/icarus/bridge) -"Da" = ( -/obj/structure/sign/icarus_dedicationplaque{ - pixel_y = 26 - }, -/obj/effect/floor_decal/corner/blue/three_quarters{ - dir = 8 - }, -/turf/simulated/floor/tiled/dark, -/area/map_template/icarus/bridge) -"De" = ( -/obj/effect/landmark/clear, -/obj/structure/girder/displaced, -/turf/template_noop, -/area/template_noop) -"Dw" = ( -/obj/effect/floor_decal/corner/yellow/half{ - dir = 1 - }, -/obj/random/junk, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled, -/area/map_template/icarus/eng) -"DB" = ( -/obj/structure/bed/chair/comfy/blue{ - dir = 1 - }, -/obj/item/remains/human, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/light_construct, -/turf/simulated/floor/tiled/dark, -/area/map_template/icarus/bridge) -"DL" = ( -/obj/effect/decal/cleanable/dirt, -/obj/item/ore/slag, -/turf/simulated/floor/plating, -/area/map_template/icarus/driver/west) -"DR" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/wall_frame/hull, -/turf/simulated/floor/plating, -/area/map_template/icarus/bridge) -"DV" = ( -/obj/structure/bed/chair/padded/blue{ - dir = 8 - }, -/turf/simulated/floor/tiled/dark, -/area/map_template/icarus/bridge) -"Ej" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/light_construct, -/turf/simulated/floor/tiled, -/area/map_template/icarus/eng) -"Ew" = ( -/obj/structure/grille, -/turf/simulated/floor/reinforced/airless, -/area/map_template/icarus/driver/west) -"EB" = ( -/obj/random/obstruction, -/turf/simulated/floor/tiled/white, -/area/map_template/icarus/sci) -"ES" = ( -/obj/random/junk, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plating, -/area/map_template/icarus/sci) -"EU" = ( -/obj/effect/landmark/clear, -/obj/item/folder/nt, -/turf/template_noop, -/area/template_noop) -"Fi" = ( -/obj/effect/floor_decal/corner/blue{ - dir = 6 - }, -/obj/effect/floor_decal/corner/blue{ - dir = 1 - }, -/turf/simulated/floor/tiled/dark, -/area/map_template/icarus/bridge) -"Fr" = ( -/obj/effect/floor_decal/corner/blue{ - dir = 9 - }, -/obj/random/obstruction, -/turf/simulated/floor/tiled/dark, -/area/map_template/icarus/bridge) -"Fu" = ( -/obj/structure/table/woodentable/walnut, -/obj/item/paper/icarus_roster, -/turf/simulated/floor/wood/walnut, -/area/map_template/icarus/bridge) -"FK" = ( -/obj/effect/floor_decal/industrial/outline/grey, -/obj/structure/closet/firecloset, -/turf/simulated/floor/tiled/dark/monotile, -/area/map_template/icarus/bridge) -"Gl" = ( -/turf/simulated/wall/r_wall/hull, -/area/map_template/icarus/driver/east) -"Gx" = ( -/obj/effect/floor_decal/corner/red{ - dir = 5 - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled, -/area/map_template/icarus/sec) -"GB" = ( -/obj/structure/sign/icarus_ecplaque{ - pixel_x = -26 - }, -/turf/simulated/floor/tiled/dark, -/area/map_template/icarus/bridge) -"Hq" = ( -/obj/effect/decal/cleanable/dirt, -/obj/item/stack/material/rods, -/turf/simulated/floor/plating, -/area/map_template/icarus/driver/east) -"HB" = ( -/obj/effect/decal/cleanable/dirt, -/obj/item/ore/slag, -/turf/simulated/floor/tiled/techmaint, -/area/map_template/icarus/driver/east) -"HD" = ( -/obj/effect/floor_decal/icarus_scglogo{ - dir = 8; - icon_state = "top-center" - }, -/obj/structure/table/glass, -/obj/item/icarus_disk, -/turf/simulated/floor/tiled/dark, -/area/map_template/icarus/bridge) -"HH" = ( -/obj/effect/landmark/clear, -/turf/template_noop, -/area/template_noop) -"HM" = ( -/turf/simulated/wall/r_wall/hull, -/area/map_template/icarus/sec) -"HQ" = ( -/obj/item/stack/material/rods, -/obj/effect/floor_decal/corner/blue{ - dir = 6 - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/dark, -/area/map_template/icarus/bridge) -"HZ" = ( -/obj/effect/floor_decal/corner/red{ - dir = 6 - }, -/obj/effect/decal/cleanable/dirt, -/obj/item/ore/slag, -/turf/simulated/floor/tiled, -/area/map_template/icarus/sec) -"IB" = ( -/obj/item/remains/human, -/turf/simulated/floor/plating, -/area/map_template/icarus/eng) -"IE" = ( -/turf/simulated/floor/carpet/purple, -/area/map_template/icarus/sci) -"II" = ( -/obj/effect/floor_decal/corner/red{ - dir = 6 - }, -/obj/machinery/light_construct, -/turf/simulated/floor/tiled, -/area/map_template/icarus/sec) -"IO" = ( -/obj/item/frame/apc, -/turf/simulated/floor/carpet/red, -/area/map_template/icarus/sec) -"IR" = ( -/obj/random/trash, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plating, -/area/map_template/icarus/bridge) -"Jd" = ( -/obj/effect/floor_decal/corner/red{ - dir = 5 - }, -/obj/effect/floor_decal/corner/red, -/turf/simulated/floor/tiled, -/area/map_template/icarus/sec) -"Jk" = ( -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/reinforced/airless, -/area/map_template/icarus/driver/east) -"JO" = ( -/obj/effect/decal/cleanable/dirt, -/obj/random/obstruction, -/turf/simulated/floor/plating, -/area/map_template/icarus/eng) -"JU" = ( -/obj/structure/bed/chair/padded/red{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/map_template/icarus/sec) -"Km" = ( -/obj/effect/decal/cleanable/dirt, -/obj/random/junk, -/turf/simulated/floor/plating, -/area/map_template/icarus/sec) -"KX" = ( -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plating, -/area/map_template/icarus/eng) -"Lj" = ( -/obj/structure/girder, -/turf/simulated/floor/plating, -/area/map_template/icarus/driver/west) -"Lu" = ( -/turf/simulated/wall/r_wall/prepainted, -/area/map_template/icarus/sec) -"LO" = ( -/obj/structure/girder, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plating, -/area/map_template/icarus/sci) -"LR" = ( -/obj/structure/girder, -/turf/simulated/floor/plating, -/area/map_template/icarus/driver/east) -"LZ" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/light_construct, -/turf/simulated/floor/tiled/techmaint, -/area/map_template/icarus/driver/west) -"Mf" = ( -/obj/effect/floor_decal/corner/research{ - dir = 5 - }, -/obj/machinery/papershredder, -/turf/simulated/floor/tiled/white, -/area/map_template/icarus/sci) -"Mq" = ( -/obj/item/shreddedp, -/turf/simulated/floor/tiled/white, -/area/map_template/icarus/sci) -"Mv" = ( -/obj/structure/bed/chair/office/comfy/yellow{ - dir = 8 - }, -/obj/item/remains/human, -/turf/simulated/floor/tiled, -/area/map_template/icarus/eng) -"MD" = ( -/obj/effect/floor_decal/corner/red{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled, -/area/map_template/icarus/sec) -"MU" = ( -/obj/structure/window/reinforced{ - dir = 4 - }, -/obj/structure/window/reinforced{ - dir = 1 - }, -/obj/structure/table/rack, -/obj/effect/floor_decal/industrial/outline/grey, -/obj/random/energy, -/turf/simulated/floor/tiled/dark/monotile, -/area/map_template/icarus/armory) -"MV" = ( -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/white, -/area/map_template/icarus/sci) -"No" = ( -/obj/effect/floor_decal/corner/blue{ - dir = 10 - }, -/obj/item/frame/apc, -/turf/simulated/floor/tiled/dark, -/area/map_template/icarus/bridge) -"Nt" = ( -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/carpet/purple, -/area/map_template/icarus/sci) -"Nu" = ( -/obj/item/frame/air_alarm, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/techmaint, -/area/map_template/icarus/driver/east) -"NE" = ( -/obj/machinery/computer/modular/preset/cardslot/command{ - dir = 4 - }, -/turf/simulated/floor/wood/walnut, -/area/map_template/icarus/bridge) -"NJ" = ( -/obj/effect/landmark/clear, -/obj/item/shreddedp, -/turf/template_noop, -/area/template_noop) -"NN" = ( -/obj/item/frame/apc, -/obj/machinery/light_construct, -/turf/simulated/floor/tiled/dark, -/area/map_template/icarus/bridge) -"NQ" = ( -/obj/structure/ship_munition/ap_slug, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/techmaint, -/area/map_template/icarus/driver/east) -"NU" = ( -/obj/effect/floor_decal/corner/yellow/half{ - dir = 8 - }, -/obj/machinery/computer/modular/preset/engineering{ - dir = 4; - icon_state = "console" - }, -/obj/item/paper/icarus_log, -/turf/simulated/floor/tiled, -/area/map_template/icarus/eng) -"Ow" = ( -/obj/random/trash, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plating, -/area/map_template/icarus/eng) -"OH" = ( -/obj/random/junk, -/obj/random/trash, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plating, -/area/map_template/icarus/driver/west) -"Pp" = ( -/turf/simulated/floor/tiled, -/area/map_template/icarus/sec) -"Ps" = ( -/obj/random/junk, -/turf/simulated/floor/tiled/dark, -/area/map_template/icarus/bridge) -"Pt" = ( -/obj/effect/floor_decal/icarus_scglogo{ - dir = 8; - icon_state = "top-right" - }, -/turf/simulated/floor/tiled/dark, -/area/map_template/icarus/bridge) -"PO" = ( -/obj/structure/sign/icarus_solgov, -/turf/simulated/wall/r_wall/hull, -/area/map_template/icarus/eng) -"PP" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/light_construct, -/turf/simulated/floor/tiled/techmaint, -/area/map_template/icarus/driver/east) -"Ql" = ( -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plating, -/area/map_template/icarus/sci) -"Qo" = ( -/turf/simulated/wall/r_wall/prepainted, -/area/map_template/icarus/eng) -"QL" = ( -/turf/simulated/floor/reinforced/airless, -/area/map_template/icarus/driver/east) -"Rm" = ( -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/dark, -/area/map_template/icarus/bridge) -"Ru" = ( -/obj/effect/floor_decal/icarus_scglogo{ - dir = 8; - icon_state = "bottom-center" - }, -/obj/structure/table/glass, -/obj/item/paper/icarus_roster, -/turf/simulated/floor/tiled/dark, -/area/map_template/icarus/bridge) -"RD" = ( -/obj/effect/landmark/clear, -/obj/effect/decal/cleanable/greenglow, -/turf/template_noop, -/area/template_noop) -"RP" = ( -/obj/effect/floor_decal/corner/blue{ - dir = 6 - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/dark, -/area/map_template/icarus/bridge) -"Sj" = ( -/turf/simulated/floor/tiled/dark, -/area/map_template/icarus/armory) -"Sp" = ( -/obj/structure/girder, -/turf/simulated/floor/plating, -/area/map_template/icarus/armory) -"Sw" = ( -/obj/effect/floor_decal/corner/blue{ - dir = 9 - }, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/light_construct, -/turf/simulated/floor/tiled/dark, -/area/map_template/icarus/bridge) -"Tt" = ( -/obj/structure/girder, -/turf/simulated/floor/plating, -/area/map_template/icarus/bridge) -"TG" = ( -/obj/effect/floor_decal/corner/blue, -/turf/simulated/floor/tiled/dark, -/area/map_template/icarus/bridge) -"TK" = ( -/turf/simulated/wall/r_wall, -/area/map_template/icarus/bridge) -"TU" = ( -/obj/random/contraband, -/turf/simulated/floor/plating, -/area/map_template/icarus/eng) -"Uj" = ( -/obj/effect/decal/cleanable/dirt, -/obj/item/ore/slag, -/turf/simulated/floor/tiled/techmaint, -/area/map_template/icarus/driver/west) -"Uo" = ( -/obj/random/junk, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/techmaint, -/area/map_template/icarus/driver/east) -"Uu" = ( -/turf/simulated/wall/r_wall/prepainted, -/area/template_noop) -"UT" = ( -/obj/effect/decal/cleanable/dirt, -/obj/item/stock_parts/circuitboard/broken, -/turf/simulated/floor/tiled/dark, -/area/map_template/icarus/bridge) -"UU" = ( -/obj/structure/bed/chair/padded/blue{ - dir = 4 - }, -/obj/effect/floor_decal/corner/blue/three_quarters, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/dark, -/area/map_template/icarus/bridge) -"Vs" = ( -/obj/effect/floor_decal/corner/blue{ - dir = 6 - }, -/obj/random/obstruction, -/turf/simulated/floor/tiled/dark, -/area/map_template/icarus/bridge) -"VS" = ( -/obj/random/trash, -/turf/simulated/floor/tiled, -/area/map_template/icarus/eng) -"VU" = ( -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/carpet/blue, -/area/map_template/icarus/bridge) -"VY" = ( -/obj/effect/floor_decal/corner/red{ - dir = 10 - }, -/obj/effect/floor_decal/corner/red{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/map_template/icarus/sec) -"Wp" = ( -/obj/item/frame/air_alarm, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/techmaint, -/area/map_template/icarus/driver/west) -"Wq" = ( -/turf/simulated/wall/r_wall/prepainted, -/area/map_template/icarus/driver/east) -"WJ" = ( -/obj/structure/bed/chair/padded/blue{ - dir = 4 - }, -/obj/effect/floor_decal/corner/blue{ - dir = 9 - }, -/turf/simulated/floor/tiled/dark, -/area/map_template/icarus/bridge) -"Xa" = ( -/obj/effect/wallframe_spawn/reinforced, -/turf/simulated/floor/plating, -/area/map_template/icarus/bridge) -"Xk" = ( -/turf/simulated/wall/r_wall/prepainted, -/area/map_template/icarus/bridge) -"Xm" = ( -/obj/structure/sign/double/icarus_solgovflag/left{ - pixel_y = 32 - }, -/obj/effect/floor_decal/corner/blue{ - dir = 5 - }, -/obj/machinery/vending/coffee, -/turf/simulated/floor/tiled/dark, -/area/map_template/icarus/bridge) -"XO" = ( -/obj/item/frame/apc, -/obj/effect/floor_decal/corner/blue{ - dir = 9 - }, -/turf/simulated/floor/tiled/dark, -/area/map_template/icarus/bridge) -"XX" = ( -/turf/simulated/wall/r_wall/hull, -/area/map_template/icarus/driver/west) -"XZ" = ( -/turf/simulated/floor/tiled/techmaint, -/area/map_template/icarus/bridge) -"YB" = ( -/obj/structure/table/glass, -/obj/random/loot, -/turf/simulated/floor/tiled/dark, -/area/map_template/icarus/bridge) -"YJ" = ( -/obj/item/frame/apc, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/techmaint, -/area/map_template/icarus/driver/east) -"YO" = ( -/obj/random/trash, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/techmaint, -/area/map_template/icarus/driver/east) -"Zh" = ( -/obj/structure/bed/chair/comfy/captain{ - dir = 8 - }, -/turf/simulated/floor/wood/walnut, -/area/map_template/icarus/bridge) -"Zk" = ( -/obj/effect/floor_decal/corner/blue{ - dir = 6 - }, -/turf/simulated/floor/tiled/dark, -/area/map_template/icarus/bridge) -"ZJ" = ( -/obj/effect/decal/cleanable/dirt, -/turf/simulated/wall/r_wall/hull, -/area/map_template/icarus/bridge) -"ZQ" = ( -/obj/effect/floor_decal/spline/fancy/wood{ - dir = 1 - }, -/obj/item/frame/air_alarm, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/carpet/blue, -/area/map_template/icarus/bridge) - -(1,1,1) = {" -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -"} -(2,1,1) = {" -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -"} -(3,1,1) = {" -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -"} -(4,1,1) = {" -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -"} -(5,1,1) = {" -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -"} -(6,1,1) = {" -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -"} -(7,1,1) = {" -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -"} -(8,1,1) = {" -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -"} -(9,1,1) = {" -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -HH -HH -HH -HH -HH -HH -HH -HH -HH -HH -HH -HH -HH -HH -HH -HH -HH -HH -HH -HH -HH -HH -HH -HH -HH -HH -HH -HH -HH -HH -aI -aI -aI -aI -aI -aI -aI -aI -"} -(10,1,1) = {" -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -HH -XX -XX -XX -Lj -Lj -XX -XX -XX -XX -XX -fN -HH -RD -HH -HH -HH -HH -HH -zS -zS -zS -zS -zS -HH -HH -PO -KX -PO -HH -aI -aI -aI -aI -aI -aI -aI -aI -"} -(11,1,1) = {" -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -RD -Br -Ew -Ew -Ew -Ew -XX -Cr -Cr -Lj -fN -fN -HH -HH -HH -HH -KX -zS -zS -zS -Qo -TU -IB -zS -zS -zS -zS -KX -zS -HH -HH -HH -aI -aI -aI -aI -aI -aI -"} -(12,1,1) = {" -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -HH -Cg -cZ -cZ -lv -lv -vP -nO -LZ -Wp -Uj -ax -HH -HH -HH -HH -Ad -Qo -Qo -Qo -Qo -Qo -Qo -Qo -Qo -Qo -Qo -KX -Qo -Qo -Ad -HH -aI -aI -aI -aI -aI -aI -"} -(13,1,1) = {" -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -HH -HH -Br -Ew -Ew -Ew -Ew -XX -mC -ag -nO -fN -OH -HH -HH -HH -HH -xd -KX -Qo -rN -wT -oJ -AG -NU -kz -Qo -HH -gp -HH -HH -HH -HH -aI -aI -aI -aI -aI -aI -"} -(14,1,1) = {" -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -HH -HH -iD -XX -XX -XX -XX -XX -XX -rC -DL -fN -ax -HH -HH -HH -HH -HH -HH -KX -Qo -Dw -Ej -VS -sR -Mv -aX -Qo -KX -HH -HH -aI -aI -aI -aI -aI -aI -aI -aI -aI -"} -(15,1,1) = {" -aI -aI -aI -aI -aI -aI -aI -aI -aI -RD -HH -iD -iD -Xk -Xk -Xk -Xk -Xk -Uu -HH -HH -HH -HH -HH -HH -HH -oy -HH -HH -HH -Ad -xd -JO -hA -KX -xd -KX -HH -KX -KX -HH -aI -aI -aI -aI -aI -aI -aI -aI -aI -"} -(16,1,1) = {" -aI -aI -aI -aI -aI -aI -aI -aI -aI -HH -iD -iD -rn -XZ -sG -Ca -Ca -oj -HH -HH -HH -HH -HH -HH -HH -HH -HH -HH -HH -HH -HH -hA -KX -KX -Ow -HH -HH -HH -HH -HH -HH -aI -aI -aI -aI -aI -aI -aI -aI -aI -"} -(17,1,1) = {" -aI -aI -aI -aI -aI -aI -HH -HH -HH -HH -gq -Xk -Xk -sj -Xk -Xk -Xk -Xk -Xk -gq -Xk -HH -HH -oy -HH -HH -HH -HH -HH -HH -HH -HH -HH -HH -HH -HH -HH -HH -HH -HH -HH -aI -aI -aI -aI -aI -aI -aI -aI -aI -"} -(18,1,1) = {" -aI -aI -aI -aI -aI -aI -HH -gq -gq -gq -Ck -Xk -tY -sr -sZ -dL -wV -sr -rc -gq -oS -HH -HH -HH -HH -HH -NJ -HH -cF -HH -lh -HH -gp -HH -HH -HH -HH -HH -HH -RD -HH -aI -aI -aI -aI -aI -aI -aI -aI -aI -"} -(19,1,1) = {" -aI -aI -aI -aI -aI -aI -HH -Ck -Xk -Xk -Xk -Xk -sl -TG -be -Zk -ze -Zk -RP -gq -RP -HQ -HH -HH -EU -oy -HH -HH -HH -HH -HH -HH -HH -HH -De -HH -HH -HH -HH -HH -HH -aI -aI -aI -aI -aI -aI -aI -aI -aI -"} -(20,1,1) = {" -aI -aI -aI -aI -aI -aI -HH -iD -Xk -FK -oN -sr -yt -No -Xk -lA -Xk -Xk -Xk -CR -Xk -uA -Xk -HH -HH -HH -HH -HH -HH -HH -HH -HH -HH -HH -HH -HH -HH -HH -HH -HH -HH -aI -aI -aI -aI -aI -aI -aI -aI -aI -"} -(21,1,1) = {" -aI -aI -aI -aI -aI -aI -HH -iD -Xk -nn -Fi -Zk -Vs -br -Xk -ay -oX -NE -ZQ -IR -ru -oj -kd -kd -kd -HH -HH -kd -kd -Ql -HH -HH -HH -HH -HH -HH -gp -HH -HH -HH -HH -aI -aI -aI -aI -aI -aI -aI -aI -aI -"} -(22,1,1) = {" -aI -aI -aI -aI -aI -aI -HH -iD -Xk -Xk -Xa -aV -Xa -Xk -Xk -iJ -Fu -Zh -pL -VU -Tt -oj -LO -fJ -gy -Ql -uH -gy -Ag -Ql -HH -HH -NJ -HH -HH -HH -HH -HH -RD -HH -HH -aI -aI -aI -aI -aI -aI -aI -aI -aI -"} -(23,1,1) = {" -aI -aI -aI -aI -aI -aI -HH -uB -kK -DB -sM -su -Ps -GB -lA -ay -mN -AI -cd -ez -Xk -oj -Ql -fz -iy -iG -iy -Ql -HH -Ql -HH -HH -HH -HH -HH -HH -HH -HH -HH -HH -HH -aI -aI -aI -aI -aI -aI -aI -aI -aI -"} -(24,1,1) = {" -aI -aI -aI -aI -aI -aI -HH -RD -aa -Rm -Rm -Rm -af -NN -Xk -Xk -Xk -Xk -Xk -Xk -Xk -oj -kd -fq -iy -EB -iy -Ql -HH -HH -HH -HH -HH -gp -HH -HH -HH -HH -HH -HH -RD -aI -aI -aI -aI -aI -aI -aI -aI -aI -"} -(25,1,1) = {" -aI -aI -aI -aI -aI -aI -HH -DR -gq -Rm -iB -Ru -xq -jZ -Xk -Da -dL -XO -WJ -UU -Xk -oj -kd -Mf -Mq -rr -iy -er -dn -HH -HH -HH -HH -HH -HH -HH -HH -HH -HH -HH -HH -aI -aI -aI -aI -aI -aI -aI -aI -aI -"} -(26,1,1) = {" -aI -aI -aI -aI -aI -aI -HH -BN -Rm -UT -ad -AB -hf -su -aV -sl -Ps -su -fE -yi -Xk -oj -kd -gM -IE -IE -ia -hc -Ql -HH -Ql -HH -HH -yS -Sp -Sp -yS -yS -yS -yS -HH -aI -aI -aI -aI -aI -aI -aI -aI -aI -"} -(27,1,1) = {" -aI -aI -aI -aI -aI -aI -HH -uB -Rm -li -lu -HD -Pt -jZ -Xk -Xm -su -tW -DV -vK -Xk -oj -kd -wr -zp -Nt -uH -iy -ES -Ql -er -HH -HH -yS -yS -yS -yS -yS -yS -yS -HH -aI -aI -aI -aI -aI -aI -aI -aI -aI -"} -(28,1,1) = {" -aI -aI -aI -aI -aI -aI -HH -uB -ab -af -Ps -su -AK -dR -Xk -pU -su -su -Rm -sS -Ck -oj -kd -gt -Nt -Nt -Ql -MV -cq -cx -kd -HH -HH -yS -yS -pk -ra -oD -yS -yS -HH -aI -aI -aI -aI -aI -aI -aI -aI -aI -"} -(29,1,1) = {" -aI -aI -aI -aI -aI -aI -HH -uB -ac -zX -YB -su -su -dW -Xk -ev -Zk -Zk -fx -gZ -Xk -oj -kd -Ql -kd -kd -HH -kd -kd -kd -kd -HH -HH -Sp -yS -yX -Sj -Sj -gF -xQ -HH -aI -aI -aI -aI -aI -aI -aI -aI -aI -"} -(30,1,1) = {" -aI -aI -aI -aI -aI -aI -HH -iD -Xk -Xk -Xa -aV -Xa -Xk -Xk -Xa -Xa -sx -Xk -Xk -Xk -sj -TK -HH -gp -HH -HH -HH -HH -HH -HH -HH -HH -Sp -yS -MU -qD -oD -yS -yS -HH -aI -aI -aI -aI -aI -aI -aI -aI -aI -"} -(31,1,1) = {" -aI -aI -aI -aI -aI -aI -HH -iD -Xk -FK -ca -sr -sr -vq -sr -Fr -oS -Sw -CR -IR -sr -sr -gp -HH -HH -HH -NJ -HH -HH -HH -HH -xY -HH -yS -yS -yS -yS -yS -yS -yS -HH -aI -aI -aI -aI -aI -aI -aI -aI -aI -"} -(32,1,1) = {" -aI -aI -aI -aI -aI -aI -HH -iD -Xk -nn -Fi -bv -pW -tF -RP -jS -gq -mZ -gq -Zk -qo -HH -HH -tJ -HH -HH -HH -HH -HH -EU -HH -HH -HH -yS -yS -yS -yS -Sp -Sp -yS -HH -aI -aI -aI -aI -aI -aI -aI -aI -aI -"} -(33,1,1) = {" -aI -aI -aI -aI -aI -aI -HH -iD -Xk -Xk -Xk -Xk -Xk -sj -Xk -Xk -Xk -Xk -Xk -Xk -Xk -HH -HH -HH -HH -HH -HH -HH -HH -gp -RD -HH -HH -HH -HH -HH -HH -HH -gp -HH -HH -aI -aI -aI -aI -aI -aI -aI -aI -aI -"} -(34,1,1) = {" -aI -aI -aI -aI -aI -aI -HH -iD -Ck -Ck -iD -sG -sG -sG -sG -Ca -Ca -oj -oj -HH -HH -HH -oy -HH -HH -HH -oy -HH -bK -HH -HH -gp -HH -HH -HH -HH -RD -HH -HH -HH -HH -aI -aI -aI -aI -aI -aI -aI -aI -aI -"} -(35,1,1) = {" -aI -aI -aI -aI -aI -aI -HH -HH -HH -HH -iD -ZJ -rW -IR -CR -oj -Ca -Ca -HH -HH -HH -HH -HH -HH -HH -HH -HH -ir -ir -Pp -ak -lM -xu -ow -oI -ir -ir -HH -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -"} -(36,1,1) = {" -aI -aI -aI -aI -aI -aI -aI -aI -aI -RD -HH -iD -iD -Xk -Ck -Xk -Xk -Xk -Xk -ax -HH -HH -HH -HH -HH -HH -HH -Km -hO -II -je -ir -ir -am -am -MD -Km -HH -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -"} -(37,1,1) = {" -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -HH -HH -iD -Gl -LR -LR -Gl -Gl -Gl -YJ -HB -NQ -HH -HH -oy -HH -HH -ks -xJ -Lu -Lu -ir -ex -ex -Lu -Gx -ir -HH -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -"} -(38,1,1) = {" -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -HH -cS -cS -aT -aT -aT -Gl -aB -YO -Nu -ax -HH -RD -HH -HH -HH -pa -Lu -JU -Pp -Pp -iW -Lu -fy -gk -HH -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -"} -(39,1,1) = {" -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -HH -cS -cS -Jk -QL -QL -bB -Uo -PP -Hq -ah -HH -HH -HH -HH -ve -VY -Lu -AQ -lB -hg -kt -Lu -Jd -HZ -HH -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -"} -(40,1,1) = {" -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -HH -dD -cS -cS -aT -aT -Gl -Wq -Wq -vJ -HH -HH -HH -oy -HH -Lu -Lu -Lu -jo -sO -IO -uC -Lu -Lu -Lu -HH -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -"} -(41,1,1) = {" -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -RD -HH -cS -LR -Gl -Gl -Gl -Gl -Gl -Gl -cS -cT -HH -HH -HH -HM -HM -HM -aN -aN -HM -HM -HM -HM -HH -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -"} -(42,1,1) = {" -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -HH -HH -HH -HH -HH -RD -HH -HH -HH -HH -HH -HH -HH -HH -HH -HH -kf -HH -HH -HH -HH -gp -HH -HH -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -"} -(43,1,1) = {" -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -"} -(44,1,1) = {" -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -"} -(45,1,1) = {" -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -"} -(46,1,1) = {" -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -"} -(47,1,1) = {" -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -"} -(48,1,1) = {" -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -"} -(49,1,1) = {" -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -"} -(50,1,1) = {" -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -aI -"} diff --git a/maps/random_ruins/exoplanet_ruins/icarus/icarus_scglogo.dmi b/maps/random_ruins/exoplanet_ruins/icarus/icarus_scglogo.dmi deleted file mode 100644 index c7cd8dd0c60cc..0000000000000 Binary files a/maps/random_ruins/exoplanet_ruins/icarus/icarus_scglogo.dmi and /dev/null differ diff --git a/maps/random_ruins/exoplanet_ruins/lodge/lodge.dm b/maps/random_ruins/exoplanet_ruins/lodge/lodge.dm deleted file mode 100644 index 138e09f1abde3..0000000000000 --- a/maps/random_ruins/exoplanet_ruins/lodge/lodge.dm +++ /dev/null @@ -1,8 +0,0 @@ -/datum/map_template/ruin/exoplanet/lodge - name = "lodge" - id = "lodge" - description = "A wood cabin." - suffixes = list("lodge/lodge.dmm") - spawn_cost = 1 - template_flags = TEMPLATE_FLAG_CLEAR_CONTENTS | TEMPLATE_FLAG_NO_RUINS - ruin_tags = RUIN_HUMAN|RUIN_HABITAT \ No newline at end of file diff --git a/maps/random_ruins/exoplanet_ruins/lodge/lodge.dmm b/maps/random_ruins/exoplanet_ruins/lodge/lodge.dmm deleted file mode 100644 index b862c7ddc1241..0000000000000 --- a/maps/random_ruins/exoplanet_ruins/lodge/lodge.dmm +++ /dev/null @@ -1,449 +0,0 @@ -//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE -"a" = ( -/turf/template_noop, -/area/template_noop) -"b" = ( -/turf/simulated/wall/wood, -/area/template_noop) -"c" = ( -/obj/machinery/power/port_gen/pacman, -/turf/simulated/floor/wood, -/area/template_noop) -"d" = ( -/obj/structure/closet/cabinet, -/obj/item/clothing/under/color/black, -/obj/item/clothing/shoes/jungleboots, -/obj/item/clothing/mask/breath, -/turf/simulated/floor/carpet/green, -/area/template_noop) -"e" = ( -/turf/simulated/floor/carpet/green, -/area/template_noop) -"f" = ( -/obj/structure/bed, -/obj/item/bedsheet, -/turf/simulated/floor/carpet/green, -/area/template_noop) -"g" = ( -/obj/structure/window/reinforced/full, -/turf/simulated/floor/wood, -/area/template_noop) -"h" = ( -/obj/structure/table/woodentable, -/obj/item/board, -/turf/simulated/floor/wood, -/area/template_noop) -"i" = ( -/obj/item/device/flashlight/lamp/green, -/obj/structure/table/woodentable, -/turf/simulated/floor/carpet/green, -/area/template_noop) -"j" = ( -/obj/structure/table/woodentable, -/obj/item/clothing/mask/smokable/pipe/cobpipe, -/obj/item/storage/chewables/rollable/generic, -/obj/item/material/ashtray/bronze, -/turf/simulated/floor/carpet/green, -/area/template_noop) -"k" = ( -/obj/structure/table/woodentable, -/obj/item/material/kitchen/utensil/fork/plastic, -/obj/item/material/kitchen/utensil/fork/plastic, -/obj/item/material/kitchen/utensil/fork/plastic, -/obj/item/material/knife/table, -/obj/effect/floor_decal/spline/fancy/wood/corner{ - dir = 1 - }, -/turf/simulated/floor/tiled/monotile, -/area/template_noop) -"l" = ( -/obj/structure/table/woodentable, -/obj/item/material/knife/table, -/obj/item/material/knife/table, -/obj/effect/floor_decal/spline/fancy/wood{ - dir = 1 - }, -/turf/simulated/floor/tiled/monotile, -/area/template_noop) -"m" = ( -/obj/structure/closet/crate/freezer, -/obj/effect/floor_decal/spline/fancy/wood{ - dir = 1 - }, -/turf/simulated/floor/tiled/monotile, -/area/template_noop) -"n" = ( -/obj/machinery/cooker/oven, -/obj/effect/floor_decal/spline/fancy/wood{ - dir = 4 - }, -/obj/effect/floor_decal/spline/fancy/wood/corner{ - dir = 4 - }, -/turf/simulated/floor/tiled/monotile, -/area/template_noop) -"o" = ( -/turf/simulated/floor/wood, -/area/template_noop) -"p" = ( -/obj/structure/bed/chair/wood{ - dir = 8 - }, -/obj/effect/floor_decal/spline/fancy/wood/corner, -/turf/simulated/floor/wood, -/area/template_noop) -"q" = ( -/obj/structure/table/woodentable, -/obj/item/book/manual/detective, -/obj/item/material/ashtray/bronze, -/obj/item/deck/cards, -/turf/simulated/floor/wood, -/area/template_noop) -"r" = ( -/obj/effect/floor_decal/spline/fancy/wood{ - dir = 1 - }, -/turf/simulated/floor/wood, -/area/template_noop) -"s" = ( -/obj/structure/table/woodentable, -/obj/effect/decal/cleanable/blood/drip, -/obj/effect/decal/cleanable/blood/drip, -/obj/effect/decal/cleanable/blood/drip, -/obj/item/material/knife/kitchen/cleaver, -/turf/simulated/floor/tiled/monotile, -/area/template_noop) -"t" = ( -/turf/simulated/floor/tiled/monotile, -/area/template_noop) -"u" = ( -/obj/effect/floor_decal/spline/fancy/wood{ - dir = 4 - }, -/turf/simulated/floor/tiled/monotile, -/area/template_noop) -"v" = ( -/obj/machinery/r_n_d/server/robotics{ - desc = "A jury-rigged server setup."; - name = "low-tech server" - }, -/turf/simulated/floor/tiled/monotile, -/area/template_noop) -"x" = ( -/obj/structure/table/woodentable, -/obj/item/device/flashlight/lamp, -/obj/effect/floor_decal/spline/fancy/wood, -/turf/simulated/floor/tiled/monotile, -/area/template_noop) -"y" = ( -/obj/effect/floor_decal/spline/fancy/wood, -/turf/simulated/floor/tiled/monotile, -/area/template_noop) -"z" = ( -/obj/effect/floor_decal/spline/fancy/wood{ - dir = 6 - }, -/turf/simulated/floor/tiled/monotile, -/area/template_noop) -"A" = ( -/obj/effect/floor_decal/spline/fancy/wood{ - dir = 4 - }, -/turf/simulated/floor/wood, -/area/template_noop) -"B" = ( -/obj/effect/floor_decal/spline/fancy/wood/corner{ - dir = 1 - }, -/turf/simulated/floor/wood, -/area/template_noop) -"C" = ( -/obj/structure/table/woodentable, -/obj/machinery/computer/atmoscontrol/laptop{ - desc = "A cheap, beat-up old laptop."; - name = "old laptop" - }, -/turf/simulated/floor/tiled/monotile, -/area/template_noop) -"D" = ( -/obj/structure/bed/chair/wood{ - dir = 8 - }, -/obj/effect/floor_decal/spline/fancy/wood{ - dir = 4 - }, -/turf/simulated/floor/tiled/monotile, -/area/template_noop) -"E" = ( -/obj/effect/floor_decal/spline/fancy/wood/corner, -/turf/simulated/floor/wood, -/area/template_noop) -"F" = ( -/obj/effect/floor_decal/spline/fancy/wood, -/turf/simulated/floor/wood, -/area/template_noop) -"G" = ( -/obj/effect/floor_decal/spline/fancy/wood/corner{ - dir = 8 - }, -/turf/simulated/floor/wood, -/area/template_noop) -"H" = ( -/obj/machinery/door/unpowered/simple/wood, -/turf/simulated/floor/wood, -/area/template_noop) -"I" = ( -/obj/structure/table/rack, -/obj/item/gun/projectile/pirate, -/obj/item/storage/box/ammo/shotgunshells, -/turf/simulated/floor/wood, -/area/template_noop) -"J" = ( -/obj/structure/closet, -/obj/item/stack/material/steel/ten, -/obj/item/stack/material/wood/fifty, -/obj/item/stack/tile/carpetgreen/fifty, -/obj/item/stack/material/glass/reinforced/ten, -/obj/effect/floor_decal/spline/fancy/wood/corner{ - dir = 8 - }, -/turf/simulated/floor/wood, -/area/template_noop) -"L" = ( -/obj/machinery/portable_atmospherics/hydroponics/soil, -/obj/item/seeds/towermycelium, -/turf/template_noop, -/area/template_noop) -"M" = ( -/obj/machinery/portable_atmospherics/hydroponics/soil, -/obj/item/seeds/potatoseed, -/turf/template_noop, -/area/template_noop) -"O" = ( -/obj/machinery/portable_atmospherics/hydroponics/soil, -/obj/item/seeds/wheatseed, -/turf/template_noop, -/area/template_noop) -"P" = ( -/obj/machinery/portable_atmospherics/hydroponics/soil, -/obj/item/seeds/random, -/turf/template_noop, -/area/template_noop) -"Q" = ( -/obj/machinery/portable_atmospherics/powered/scrubber, -/turf/simulated/floor/wood, -/area/template_noop) -"S" = ( -/obj/machinery/portable_atmospherics/powered/scrubber, -/obj/effect/floor_decal/spline/fancy/wood/corner, -/turf/simulated/floor/wood, -/area/template_noop) - -(1,1,1) = {" -a -a -a -b -b -b -b -a -a -a -a -"} -(2,1,1) = {" -a -a -a -b -v -C -b -a -a -a -a -"} -(3,1,1) = {" -b -b -b -b -u -D -b -a -a -a -a -"} -(4,1,1) = {" -b -d -i -r -o -E -b -a -a -a -a -"} -(5,1,1) = {" -b -e -e -r -o -F -g -L -L -a -a -"} -(6,1,1) = {" -b -e -e -r -o -F -g -a -a -a -a -"} -(7,1,1) = {" -b -f -j -r -o -G -b -L -M -a -a -"} -(8,1,1) = {" -b -b -b -b -b -H -b -a -a -a -a -"} -(9,1,1) = {" -a -b -k -s -x -E -b -M -O -a -a -"} -(10,1,1) = {" -a -g -l -t -y -F -g -a -a -a -a -"} -(11,1,1) = {" -a -g -m -t -y -G -b -M -P -a -a -"} -(12,1,1) = {" -a -b -n -u -z -o -b -b -b -b -b -"} -(13,1,1) = {" -a -b -o -o -o -o -o -o -Q -S -b -"} -(14,1,1) = {" -a -b -o -o -h -q -o -o -o -F -H -"} -(15,1,1) = {" -a -b -c -o -p -A -A -B -I -J -b -"} -(16,1,1) = {" -a -b -b -b -b -g -g -b -b -b -b -"} diff --git a/maps/random_ruins/exoplanet_ruins/marooned/marooned.dm b/maps/random_ruins/exoplanet_ruins/marooned/marooned.dm deleted file mode 100644 index 2784ffbcf4c6b..0000000000000 --- a/maps/random_ruins/exoplanet_ruins/marooned/marooned.dm +++ /dev/null @@ -1,75 +0,0 @@ -/datum/map_template/ruin/exoplanet/marooned - name = "Marooned" - id = "awaysite_marooned" - description = "crashed dropship with marooned Magnitka officer" - suffixes = list("marooned/marooned.dmm") - spawn_cost = 1 - template_flags = TEMPLATE_FLAG_CLEAR_CONTENTS | TEMPLATE_FLAG_NO_RUINS - ruin_tags = RUIN_HUMAN|RUIN_WRECK - apc_test_exempt_areas = list( - /area/map_template/marooned = NO_SCRUBBER|NO_VENT|NO_APC - ) - -/obj/item/clothing/under/magintka_uniform - name = "officer uniform" - desc = "A dark uniform coat worn by Magnitka fleet officers." - icon_state = "magnitka_officer" - icon = 'maps/random_ruins/exoplanet_ruins/marooned/marooned_icons.dmi' - item_icons = list(slot_w_uniform_str = 'maps/random_ruins/exoplanet_ruins/marooned/marooned_icons.dmi') - -/obj/item/clothing/accessory/medal/silver/marooned_medal - name = "silver medal" - desc = "An silver round medal of marooned officer. It has inscription \"For Distinguished Service\" in lower part. On medal's plank it's engraved \"H. Warda\"" - icon_state = "marooned_medal" - icon = 'maps/random_ruins/exoplanet_ruins/marooned/marooned_icons.dmi' - -/obj/effect/landmark/corpse/marooned_officer - name = "Horazy Warda" - corpse_outfits = list(/decl/hierarchy/outfit/marooned_officer) - spawn_flags = ~CORPSE_SPAWNER_RANDOM_NAME - -/decl/hierarchy/outfit/marooned_officer - name = "Dead Magnitka's fleet officer" - uniform = /obj/item/clothing/under/magintka_uniform - suit = /obj/item/clothing/suit/storage/hooded/wintercoat - shoes = /obj/item/clothing/shoes/jungleboots - gloves = /obj/item/clothing/gloves/thick - head = /obj/item/clothing/head/beret - l_pocket = /obj/item/material/knife/folding/combat/switchblade - -/obj/item/gun/projectile/revolver/medium/marooned - name = "worn-out revolver" - -/obj/item/gun/projectile/revolver/medium/marooned/Initialize() - . = ..() - consume_next_projectile() - handle_post_fire() - -/area/map_template/marooned - name = "\improper Crashed Dropship" - icon_state = "A" - -/obj/item/paper/marooned - name = "diary page" - language = LANGUAGE_HUMAN_RUSSIAN -/obj/item/paper/marooned/note01 - info = "Horacy Warda, Captain First Rank of Magnitka Defence Forces, Special Observation Flotilia. I have been betrayed by my crew and illegally marooned.
              Main conspirators were Lieutenant Igor Pytlak, Lieutenant Hans Kovac and Captain Third Rank Dragomir Mladic.
              If you find this, please make sure those dogs face justice." -/obj/item/paper/marooned/note02 - info = "Day 3. I've done the best I could to fix up the hole in my side, but I am not optimistic.
              The dullness of this place is impossible. I think I forgot the word for 'pencil' yesterday. Will start writing this log to keep myself occupied. Just need to figure out what I can write without getting court-martialed when I get home." -/obj/item/paper/marooned/note03 - info = "Day 4. Saw some animals outside. Look pretty ferocious, and probably not edible. I'll stick to MREs for now.
              I guess I'll start with how I ended up here. We were on a special mission far away from Magnitka, checking something for the Academy of Sciences, anomalous readings of some sort. The professor looked pretty excited, but I didn't really understand the technical details. We got few scientists embedded in our crew, a civilian hull paintjob and 'alternative' transponder codes. Business as usual." -/obj/item/paper/marooned/note04 - info = "Day 5.
              We got to the destination without much trouble. A planetoid, in an uncharted sector of space. Scientists locked down the readings they were looking for, and we sent a team down. They returned with some sort of obelisk, etched with symbols I've never seen before, maybe 3 meters tall. Should've ditched that thing out of airlock there and then." -/obj/item/paper/marooned/note05 - info = "Day 8. Made a running wave antenna and jury rigged some amplification for the radio. Hope someone will hear the signal.
              That obelisk was trouble. People on guard duty in cargo hold kept complaining about headaches and hearing things. Some didn't. They were nice enough to offer to take the shifts of those who complained. Now that I think about it, that's when they started acting weird." -/obj/item/paper/marooned/note06 - info = "Day 14. I've been feverish for some time now, and the wound doesn't look good. So where was I?
              A week later, we were in the orbit of this planet, replenishing some raw materials from the surface. Mladic came to my quarters, and started talking nonsense. Something about how we have to go back to the planet we found obelisk at, that it 'told' them to do that. I ordered him to snap out of it, and he pulled a stungun on me. That was a mutiny, so according to Directive 714 I pulled my service weapon and shot him right there." -/obj/item/paper/marooned/note07 - info = "Day 15. Still nothing on radio. I only listening to it 3 hours per day now, to save power. Speaking of radio, back then too...
              No one responded on radio, and when I went to find someone to sort out this mess, I found an even bigger one. There was fighting in the hallways, crew turning on each other, stabbing and shooting. Mess hall was covered in drawings made with blood. It was sick. I knew what caused it, I had to space the damn thing." -/obj/item/paper/marooned/note08 - info = "Day 18. I think. Life support is failing, I am running out of power. I think at this point I just am writing this to avoid thinking about what's to come.
              I failed. I rallied some of the sane crewmen, and we made a break for the cargo hold, but we were too badly outnumbered. I holed up in the dropship, but the bastards just locked the hatch and overrode controls to send me planetside. And they didn't go for a soft descent. Wrecked dropship hard, barely left the inner hull intact. Some debris pierced my side." -/obj/item/paper/marooned/note09 - info = "Day ???. I'm not getting better. I can barely move now, and even if I try to eat something, I just puke it out. Guess this is it. I am not going to lie here and puke to death, I'm an officer dammit. I'd write something profound, if I could. Damn that obelisk. Glory to Magnitka." - -/obj/machinery/computer/dummy - construct_state = null diff --git a/maps/random_ruins/exoplanet_ruins/marooned/marooned.dmm b/maps/random_ruins/exoplanet_ruins/marooned/marooned.dmm deleted file mode 100644 index bfc14bbd106ef..0000000000000 --- a/maps/random_ruins/exoplanet_ruins/marooned/marooned.dmm +++ /dev/null @@ -1,1333 +0,0 @@ -//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE -"aa" = ( -/turf/template_noop, -/area/template_noop) -"ac" = ( -/obj/item/stack/material/rods, -/turf/template_noop, -/area/template_noop) -"ad" = ( -/obj/item/stack/material/rods, -/obj/item/stack/material/ocp, -/turf/template_noop, -/area/template_noop) -"ae" = ( -/obj/item/stack/material/ocp, -/turf/template_noop, -/area/template_noop) -"af" = ( -/obj/structure/lattice, -/obj/item/stack/material/ocp, -/obj/effect/landmark/scorcher, -/turf/template_noop, -/area/template_noop) -"ag" = ( -/turf/simulated/wall/ocp_wall, -/area/map_template/marooned) -"ah" = ( -/obj/effect/paint/black, -/turf/simulated/wall/ocp_wall, -/area/map_template/marooned) -"ai" = ( -/obj/effect/landmark/scorcher, -/turf/template_noop, -/area/template_noop) -"aj" = ( -/obj/item/stack/material/ocp, -/obj/effect/landmark/scorcher, -/turf/template_noop, -/area/template_noop) -"ak" = ( -/obj/machinery/computer/dummy, -/obj/effect/floor_decal/corner/red/full, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/marooned) -"al" = ( -/obj/effect/floor_decal/corner/red{ - dir = 9 - }, -/obj/machinery/atmospherics/binary/oxyregenerator, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/marooned) -"am" = ( -/obj/effect/landmark/corpse/marooned_officer, -/obj/structure/bed/chair{ - dir = 1 - }, -/obj/effect/decal/cleanable/blood, -/obj/item/gun/projectile/revolver/medium, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/marooned) -"an" = ( -/obj/item/clothing/accessory/medal/silver/marooned_medal{ - desc = "A heart-shaped bronze medal. Has Magnitka flag at top part and engraved name - H. Warda."; - name = "\improper Magnitka medal" - }, -/obj/structure/table/steel_reinforced, -/obj/effect/floor_decal/corner/red{ - dir = 6 - }, -/obj/item/paper/marooned/note09, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/marooned) -"ao" = ( -/obj/structure/lattice, -/obj/effect/landmark/scorcher, -/turf/template_noop, -/area/template_noop) -"ap" = ( -/obj/item/paper/marooned/note02{ - pixel_x = -3; - pixel_y = -5 - }, -/obj/item/paper/marooned/note01{ - pixel_x = 2; - pixel_y = -1 - }, -/obj/structure/table/steel_reinforced, -/obj/effect/floor_decal/corner/red{ - dir = 9 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/marooned) -"aq" = ( -/obj/machinery/space_heater, -/obj/effect/decal/cleanable/blood/drip, -/obj/effect/floor_decal/steeldecal/steel_decals_central7, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/marooned) -"ar" = ( -/obj/item/paper/marooned/note03{ - pixel_x = 2; - pixel_y = 2 - }, -/obj/structure/table/steel_reinforced, -/obj/effect/floor_decal/corner/red{ - dir = 6 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/marooned) -"as" = ( -/obj/machinery/door/airlock/centcom, -/turf/simulated/floor/tiled/steel_ridged, -/area/map_template/marooned) -"at" = ( -/obj/structure/closet/crate/freezer, -/obj/structure/handrail{ - dir = 4 - }, -/obj/effect/floor_decal/industrial/outline, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/marooned) -"au" = ( -/obj/structure/closet/crate/freezer, -/obj/structure/handrail, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/marooned) -"av" = ( -/obj/item/paper/marooned/note06, -/obj/random/trash, -/obj/item/paper/marooned/note08, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/marooned) -"aw" = ( -/obj/machinery/space_heater, -/obj/structure/handrail, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/marooned) -"ax" = ( -/obj/machinery/suit_storage_unit/standard_unit, -/obj/effect/floor_decal/industrial/outline, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/marooned) -"ay" = ( -/obj/structure/closet/crate/freezer, -/obj/item/paper/marooned/note04, -/obj/item/paper/marooned/note05{ - pixel_x = -3; - pixel_y = 1 - }, -/obj/structure/handrail{ - dir = 4 - }, -/obj/effect/floor_decal/industrial/outline, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/marooned) -"az" = ( -/obj/item/trash/liquidfood, -/obj/item/trash/liquidfood, -/obj/effect/decal/cleanable/blood/drip, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/marooned) -"aA" = ( -/obj/random/trash, -/obj/effect/floor_decal/steeldecal/steel_decals_central7, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/marooned) -"aB" = ( -/obj/item/paper/marooned/note07{ - pixel_x = 6 - }, -/obj/random/trash, -/obj/effect/decal/cleanable/blood/drip, -/obj/structure/bed, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/marooned) -"aC" = ( -/obj/structure/shuttle/engine/propulsion, -/obj/effect/landmark/scorcher, -/obj/effect/landmark/clear, -/turf/template_noop, -/area/template_noop) -"aD" = ( -/obj/structure/handrail{ - dir = 4 - }, -/obj/structure/bed/chair{ - dir = 4 - }, -/obj/item/trash/liquidfood, -/obj/item/trash/liquidfood, -/obj/effect/floor_decal/industrial/outline, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/marooned) -"aE" = ( -/obj/item/trash/liquidfood, -/obj/item/trash/liquidfood, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/marooned) -"aF" = ( -/obj/effect/floor_decal/steeldecal/steel_decals_central6, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/marooned) -"aG" = ( -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/marooned) -"aH" = ( -/obj/structure/handrail{ - dir = 4 - }, -/obj/structure/bed/chair{ - dir = 4 - }, -/obj/effect/floor_decal/industrial/outline, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/marooned) -"aI" = ( -/obj/item/wirecutters, -/obj/item/stack/cable_coil, -/obj/machinery/power/port_gen/pacman/super, -/obj/structure/cable{ - dir = 8; - icon_state = "0-5" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/marooned) -"aJ" = ( -/obj/effect/decal/cleanable/blood/drip, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/marooned) -"aL" = ( -/obj/structure/inflatable/wall, -/obj/structure/handrail{ - dir = 4 - }, -/obj/effect/floor_decal/industrial/warning, -/turf/simulated/floor/tiled/dark, -/area/map_template/marooned) -"aM" = ( -/obj/structure/inflatable/door, -/obj/structure/cable{ - dir = 1; - icon_state = "1-6" - }, -/obj/effect/floor_decal/industrial/warning, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/marooned) -"aN" = ( -/obj/structure/inflatable/wall, -/obj/structure/handrail{ - dir = 8 - }, -/obj/effect/floor_decal/industrial/warning, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/marooned) -"aO" = ( -/obj/structure/inflatable/door, -/obj/structure/cable{ - dir = 1; - icon_state = "2-5" - }, -/obj/effect/floor_decal/industrial/warning, -/obj/machinery/door/airlock/centcom, -/turf/simulated/floor/tiled/steel_ridged, -/area/map_template/marooned) -"aP" = ( -/obj/structure/fuel_port, -/obj/effect/paint/black, -/turf/simulated/wall/ocp_wall, -/area/map_template/marooned) -"aQ" = ( -/obj/structure/inflatable/wall, -/obj/structure/cable{ - icon_state = "2-5" - }, -/obj/effect/landmark/scorcher, -/obj/effect/landmark/clear, -/turf/template_noop, -/area/template_noop) -"aR" = ( -/obj/structure/inflatable/door, -/obj/effect/landmark/scorcher, -/obj/effect/landmark/clear, -/turf/template_noop, -/area/template_noop) -"aS" = ( -/obj/structure/inflatable/wall, -/obj/effect/landmark/scorcher, -/obj/effect/landmark/clear, -/turf/template_noop, -/area/template_noop) -"aT" = ( -/obj/structure/cable{ - dir = 1; - icon_state = "2-5" - }, -/obj/effect/landmark/scorcher, -/obj/effect/landmark/clear, -/turf/template_noop, -/area/template_noop) -"aU" = ( -/turf/simulated/wall/ocp_wall, -/area/template_noop) -"aV" = ( -/obj/effect/paint/black, -/turf/simulated/wall/ocp_wall, -/area/template_noop) -"aW" = ( -/obj/item/stock_parts/computer/battery_module{ - pixel_x = -7 - }, -/obj/item/melee/baton/cattleprod{ - desc = "Metal rod with wire attached to it."; - name = "jury-rigged antenna"; - pixel_x = 5; - pixel_y = 3 - }, -/obj/item/device/radio, -/obj/item/stack/cable_coil, -/obj/structure/cable{ - dir = 4; - icon_state = "0-6" - }, -/obj/structure/cable{ - d2 = 4; - icon_state = "0-4" - }, -/obj/effect/landmark/scorcher, -/obj/effect/landmark/clear, -/turf/template_noop, -/area/template_noop) -"aX" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/landmark/scorcher, -/obj/effect/landmark/clear, -/turf/template_noop, -/area/template_noop) -"aY" = ( -/obj/item/melee/baton/cattleprod{ - desc = "Metal rod with wire attached to it."; - name = "jury-rigged antenna"; - pixel_x = 5; - pixel_y = 3 - }, -/obj/structure/cable{ - d2 = 8; - icon_state = "0-8" - }, -/obj/effect/landmark/scorcher, -/obj/effect/landmark/clear, -/turf/template_noop, -/area/template_noop) -"hi" = ( -/obj/effect/landmark/scorcher, -/obj/effect/landmark/clear, -/turf/template_noop, -/area/template_noop) -"tb" = ( -/obj/effect/landmark/clear, -/obj/effect/landmark/scorcher, -/turf/template_noop, -/area/template_noop) -"Wb" = ( -/obj/structure/shuttle/engine/propulsion, -/obj/effect/landmark/scorcher, -/obj/effect/landmark/clear, -/obj/effect/landmark/scorcher, -/turf/template_noop, -/area/template_noop) - -(1,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(2,1,1) = {" -aa -aa -ac -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(3,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -ai -ah -ah -aC -hi -hi -hi -hi -hi -hi -hi -hi -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(4,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -ai -ai -ah -ah -aC -hi -hi -hi -hi -hi -hi -hi -hi -hi -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(5,1,1) = {" -aa -aa -aa -aa -ae -aj -ag -ah -ah -ah -ah -ah -ah -ah -hi -hi -hi -hi -hi -hi -hi -ai -aa -aa -aa -aa -aa -aa -aa -aa -"} -(6,1,1) = {" -aa -aa -aa -aa -af -ag -ah -ah -ah -at -ay -aD -aH -ah -ah -hi -hi -aW -hi -hi -hi -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(7,1,1) = {" -aa -aa -aa -aa -ag -ah -al -ap -ah -au -az -aE -aI -aL -ah -aQ -aT -aX -hi -hi -hi -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(8,1,1) = {" -aa -aa -aa -aa -ah -ak -am -aq -as -av -aA -aF -aJ -aM -aO -aR -hi -aX -hi -hi -hi -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(9,1,1) = {" -aa -aa -aa -aa -ah -ah -an -ar -ah -aw -aB -aG -aG -aN -ah -aS -hi -aX -hi -hi -hi -ai -aa -aa -aa -aa -aa -aa -aa -aa -"} -(10,1,1) = {" -aa -aa -aa -aa -ag -ah -ah -ah -ah -ax -ax -ax -ax -ah -aP -hi -hi -aX -hi -hi -hi -ai -aa -aa -aa -aa -aa -aa -aa -aa -"} -(11,1,1) = {" -aa -aa -aa -aa -ai -ai -ao -ah -ah -ah -ah -ah -ah -ah -hi -hi -hi -aX -hi -hi -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(12,1,1) = {" -aa -aa -aa -aa -ai -ai -ai -ai -ai -ao -ao -ai -ai -aj -hi -hi -hi -aY -ai -ai -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(13,1,1) = {" -aa -aa -aa -aa -ai -ai -ai -ai -aj -ai -ai -ai -ai -ai -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(14,1,1) = {" -aa -aa -aa -aa -aa -aa -ai -ai -ai -ai -ai -ai -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ac -aa -aa -"} -(15,1,1) = {" -aa -aa -aa -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(16,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ae -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(17,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ac -ac -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(18,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -ac -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(19,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ae -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(20,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(21,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ae -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(22,1,1) = {" -aa -aa -aa -aa -aa -aa -ae -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ac -aa -aa -"} -(23,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(24,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -ac -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(25,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ai -ai -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(26,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ai -ai -ai -ai -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(27,1,1) = {" -aa -aa -aa -ac -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ai -ai -aU -aV -Wb -tb -tb -tb -tb -aa -aa -aa -aa -aa -aa -aa -"} -(28,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ai -ai -aV -aV -Wb -tb -tb -tb -tb -aa -aa -aa -aa -aa -aa -aa -"} -(29,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ai -ai -ai -aa -aa -aa -aa -aa -aa -aa -aa -ac -aa -aa -aa -"} -(30,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} diff --git a/maps/random_ruins/exoplanet_ruins/marooned/marooned_icons.dmi b/maps/random_ruins/exoplanet_ruins/marooned/marooned_icons.dmi deleted file mode 100644 index 18e4a840ddbf0..0000000000000 Binary files a/maps/random_ruins/exoplanet_ruins/marooned/marooned_icons.dmi and /dev/null differ diff --git a/maps/random_ruins/exoplanet_ruins/monoliths/monoliths.dm b/maps/random_ruins/exoplanet_ruins/monoliths/monoliths.dm deleted file mode 100644 index 42c9ca761604d..0000000000000 --- a/maps/random_ruins/exoplanet_ruins/monoliths/monoliths.dm +++ /dev/null @@ -1,80 +0,0 @@ -/datum/map_template/ruin/exoplanet/monolith - name = "Monolith Ring" - id = "planetsite_monoliths" - description = "Bunch of monoliths surrounding an artifact." - suffixes = list("monoliths/monoliths.dmm") - spawn_cost = 1 - template_flags = TEMPLATE_FLAG_NO_RUINS - ruin_tags = RUIN_ALIEN - -/obj/structure/monolith - name = "monolith" - desc = "An obviously artifical structure of unknown origin. The symbols '𒁀𒀝 𒋢𒌦 𒉡 𒋺𒂊' are engraved on the base." //for the sake of the reader, "BAKU SUUN NU TAKE" - icon = 'icons/obj/monolith.dmi' - icon_state = "jaggy1" - layer = ABOVE_HUMAN_LAYER - density = TRUE - anchored = TRUE - var/active = 0 - -/obj/structure/monolith/Initialize() - . = ..() - icon_state = "jaggy[rand(1,4)]" - var/material/A = SSmaterials.get_material_by_name(MATERIAL_ALIENALLOY) - if(A) - color = A.icon_colour - if(GLOB.using_map.use_overmap) - var/obj/effect/overmap/visitable/sector/exoplanet/E = map_sectors["[z]"] - if(istype(E)) - desc += "\nThere are images on it: [E.get_engravings()]" - update_icon() - -/obj/structure/monolith/on_update_icon() - overlays.Cut() - if(active) - var/image/I = image(icon,"[icon_state]decor") - I.appearance_flags = DEFAULT_APPEARANCE_FLAGS | RESET_COLOR - I.color = get_random_colour(0, 150, 255) - I.layer = ABOVE_LIGHTING_LAYER - I.plane = EFFECTS_ABOVE_LIGHTING_PLANE - overlays += I - set_light(0.3, 0.1, 2, l_color = I.color) - - var/turf/simulated/floor/exoplanet/T = get_turf(src) - if(istype(T)) - var/image/I = overlay_image(icon, "dugin", T.dirt_color, RESET_COLOR) - overlays += I - -/obj/structure/monolith/attack_hand(mob/user) - visible_message("[user] touches \the [src].") - if(GLOB.using_map.use_overmap && istype(user,/mob/living/carbon/human)) - var/obj/effect/overmap/visitable/sector/exoplanet/E = map_sectors["[z]"] - if(istype(E)) - var/mob/living/carbon/human/H = user - if(!H.isSynthetic()) - playsound(src, 'sound/effects/zapbeep.ogg', 100, 1) - active = 1 - update_icon() - if(prob(70)) - to_chat(H, "As you touch \the [src], you suddenly get a vivid image - [E.get_engravings()]") - else - to_chat(H, "An overwhelming stream of information invades your mind!") - var/vision = "" - for(var/i = 1 to 10) - vision += pick(E.actors) + " " + pick("killing","dying","gored","expiring","exploding","mauled","burning","flayed","in agony") + ". " - to_chat(H, "[uppertext(vision)]") - H.Paralyse(2) - H.hallucination(20, 100) - return - to_chat(user, "\The [src] is still.") - return ..() - -/turf/simulated/floor/fixed/alium/ruin - name = "ancient alien plating" - desc = "This obviously wasn't made for your feet. Looks pretty old." - initial_gas = null - -/turf/simulated/floor/fixed/alium/ruin/Initialize() - . = ..() - if(prob(10)) - ChangeTurf(get_base_turf_by_area(src)) diff --git a/maps/random_ruins/exoplanet_ruins/monoliths/monoliths.dmm b/maps/random_ruins/exoplanet_ruins/monoliths/monoliths.dmm deleted file mode 100644 index 397b30ef9100f..0000000000000 --- a/maps/random_ruins/exoplanet_ruins/monoliths/monoliths.dmm +++ /dev/null @@ -1,154 +0,0 @@ -//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE -"a" = ( -/turf/template_noop, -/area/template_noop) -"b" = ( -/obj/structure/monolith, -/obj/effect/landmark/clear, -/turf/template_noop, -/area/template_noop) -"c" = ( -/turf/simulated/floor/fixed/alium/ruin, -/area/template_noop) -"d" = ( -/obj/machinery/artifact, -/obj/structure/window/phoronreinforced{ - dir = 4; - icon_state = "phoronrwindow" - }, -/obj/structure/window/phoronreinforced{ - dir = 1; - icon_state = "phoronrwindow" - }, -/obj/structure/window/phoronreinforced{ - dir = 8; - icon_state = "phoronrwindow" - }, -/obj/structure/window/phoronreinforced, -/turf/simulated/floor/fixed/alium/ruin, -/area/template_noop) -"e" = ( -/obj/effect/landmark/clear, -/turf/template_noop, -/area/template_noop) - -(1,1,1) = {" -a -a -a -a -a -a -a -a -a -a -"} -(2,1,1) = {" -a -a -a -e -b -e -a -a -a -a -"} -(3,1,1) = {" -a -a -e -e -e -e -e -a -a -a -"} -(4,1,1) = {" -a -b -e -e -e -e -e -b -a -a -"} -(5,1,1) = {" -a -e -e -e -c -e -e -e -a -a -"} -(6,1,1) = {" -a -e -e -c -d -c -e -e -a -a -"} -(7,1,1) = {" -a -e -e -e -c -e -e -e -a -a -"} -(8,1,1) = {" -a -b -e -e -e -e -e -b -a -a -"} -(9,1,1) = {" -a -a -e -e -e -e -e -a -a -a -"} -(10,1,1) = {" -a -a -a -e -b -e -a -a -a -a -"} diff --git a/maps/random_ruins/exoplanet_ruins/oasis/oasis.dm b/maps/random_ruins/exoplanet_ruins/oasis/oasis.dm deleted file mode 100644 index d3f37f2eb85c0..0000000000000 --- a/maps/random_ruins/exoplanet_ruins/oasis/oasis.dm +++ /dev/null @@ -1,18 +0,0 @@ -/datum/map_template/ruin/exoplanet/oasis - name = "oasis 1" - id = "oasis1" - description = "A tiny patch of life in a vast desert." - suffixes = list("oasis/oasis.dmm") - spawn_cost = 0.5 - template_flags = TEMPLATE_FLAG_NO_RUINS | TEMPLATE_FLAG_ALLOW_DUPLICATES - ruin_tags = RUIN_NATURAL|RUIN_WATER - -/datum/map_template/ruin/exoplanet/oasis/oasis2 - name = "oasis 2" - id = "oasis2" - suffixes = list("oasis/oasis2.dmm") - -/datum/map_template/ruin/exoplanet/oasis/oasis3 - name = "oasis 3" - id = "oasis3" - suffixes = list("oasis/oasis3.dmm") \ No newline at end of file diff --git a/maps/random_ruins/exoplanet_ruins/oasis/oasis.dmm b/maps/random_ruins/exoplanet_ruins/oasis/oasis.dmm deleted file mode 100644 index 848748bf1bca7..0000000000000 --- a/maps/random_ruins/exoplanet_ruins/oasis/oasis.dmm +++ /dev/null @@ -1,155 +0,0 @@ -//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE -"a" = ( -/turf/template_noop, -/area/template_noop) -"b" = ( -/obj/structure/flora/bush, -/turf/template_noop, -/area/template_noop) -"d" = ( -/obj/structure/flora/ausbushes/lavendergrass, -/turf/template_noop, -/area/template_noop) -"e" = ( -/obj/structure/flora/grass/green, -/turf/simulated/floor/exoplanet/grass, -/area/template_noop) -"f" = ( -/obj/structure/flora/grass/both, -/turf/simulated/floor/exoplanet/grass, -/area/template_noop) -"g" = ( -/turf/simulated/floor/exoplanet/water/shallow, -/area/template_noop) -"h" = ( -/obj/structure/flora/ausbushes/reedbush, -/turf/simulated/floor/exoplanet/water/shallow, -/area/template_noop) -"i" = ( -/obj/structure/flora/bush, -/turf/simulated/floor/exoplanet/grass, -/area/template_noop) -"j" = ( -/turf/simulated/floor/exoplanet/grass, -/area/template_noop) -"k" = ( -/obj/structure/flora/ausbushes/palebush, -/turf/simulated/floor/exoplanet/grass, -/area/template_noop) -"l" = ( -/obj/structure/flora/grass/brown, -/turf/simulated/floor/exoplanet/grass, -/area/template_noop) -"m" = ( -/obj/structure/flora/ausbushes, -/turf/simulated/floor/exoplanet/grass, -/area/template_noop) - -(1,1,1) = {" -a -a -a -a -a -a -a -"} -(2,1,1) = {" -a -a -a -d -a -a -a -"} -(3,1,1) = {" -a -b -a -f -a -a -a -"} -(4,1,1) = {" -a -a -f -g -e -j -a -"} -(5,1,1) = {" -a -d -e -g -g -k -a -"} -(6,1,1) = {" -a -e -g -g -g -g -j -"} -(7,1,1) = {" -a -a -e -g -g -l -j -"} -(8,1,1) = {" -a -e -h -g -g -l -a -"} -(9,1,1) = {" -a -a -e -g -g -i -a -"} -(10,1,1) = {" -a -a -a -f -h -j -a -"} -(11,1,1) = {" -a -a -a -i -j -m -a -"} -(12,1,1) = {" -a -a -a -a -a -a -a -"} diff --git a/maps/random_ruins/exoplanet_ruins/oasis/oasis2.dmm b/maps/random_ruins/exoplanet_ruins/oasis/oasis2.dmm deleted file mode 100644 index 14ddf2be26caf..0000000000000 --- a/maps/random_ruins/exoplanet_ruins/oasis/oasis2.dmm +++ /dev/null @@ -1,168 +0,0 @@ -//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE -"a" = ( -/turf/template_noop, -/area/template_noop) -"b" = ( -/obj/structure/flora/ausbushes/genericbush, -/turf/simulated/floor/exoplanet/grass, -/area/template_noop) -"c" = ( -/turf/simulated/floor/exoplanet/grass, -/area/template_noop) -"d" = ( -/obj/structure/flora/ausbushes/brflowers, -/obj/structure/flora/ausbushes/ywflowers, -/turf/simulated/floor/exoplanet/grass, -/area/template_noop) -"e" = ( -/obj/structure/flora/ausbushes/ppflowers, -/turf/simulated/floor/exoplanet/grass, -/area/template_noop) -"f" = ( -/obj/structure/flora/ausbushes/fullgrass, -/turf/simulated/floor/exoplanet/grass, -/area/template_noop) -"g" = ( -/obj/structure/flora/ausbushes/leafybush, -/turf/simulated/floor/exoplanet/grass, -/area/template_noop) -"h" = ( -/obj/structure/flora/ausbushes/ppflowers, -/obj/structure/flora/ausbushes/fernybush, -/turf/simulated/floor/exoplanet/grass, -/area/template_noop) -"i" = ( -/obj/structure/flora/grass/both, -/turf/simulated/floor/exoplanet/grass, -/area/template_noop) -"j" = ( -/turf/simulated/floor/exoplanet/water/shallow, -/area/template_noop) -"k" = ( -/obj/structure/flora/grass/both, -/obj/structure/flora/ausbushes/ywflowers, -/turf/simulated/floor/exoplanet/grass, -/area/template_noop) -"l" = ( -/obj/structure/flora/ausbushes/reedbush, -/turf/simulated/floor/exoplanet/water/shallow, -/area/template_noop) -"m" = ( -/obj/structure/flora/grass/both, -/obj/structure/flora/ausbushes/fullgrass, -/turf/simulated/floor/exoplanet/grass, -/area/template_noop) -"n" = ( -/obj/structure/flora/ausbushes/ywflowers, -/obj/structure/flora/ausbushes/ppflowers, -/turf/simulated/floor/exoplanet/grass, -/area/template_noop) - -(1,1,1) = {" -a -a -a -c -c -c -c -"} -(2,1,1) = {" -a -a -g -k -j -l -c -"} -(3,1,1) = {" -a -e -c -c -j -c -c -"} -(4,1,1) = {" -b -c -j -j -j -f -a -"} -(5,1,1) = {" -a -f -j -j -j -i -n -"} -(6,1,1) = {" -a -g -j -j -j -j -c -"} -(7,1,1) = {" -a -c -j -j -j -c -c -"} -(8,1,1) = {" -a -h -j -j -j -m -g -"} -(9,1,1) = {" -a -c -j -j -j -c -a -"} -(10,1,1) = {" -c -i -j -j -g -c -a -"} -(11,1,1) = {" -d -j -j -f -c -a -a -"} -(12,1,1) = {" -c -c -c -c -a -a -a -"} diff --git a/maps/random_ruins/exoplanet_ruins/oasis/oasis3.dmm b/maps/random_ruins/exoplanet_ruins/oasis/oasis3.dmm deleted file mode 100644 index 683cc1d0156a7..0000000000000 --- a/maps/random_ruins/exoplanet_ruins/oasis/oasis3.dmm +++ /dev/null @@ -1,133 +0,0 @@ -//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE -"a" = ( -/turf/template_noop, -/area/template_noop) -"b" = ( -/obj/structure/flora/ausbushes/grassybush, -/turf/template_noop, -/area/template_noop) -"c" = ( -/obj/structure/flora/ausbushes/stalkybush, -/turf/template_noop, -/area/template_noop) -"d" = ( -/obj/structure/hygiene/sink/puddle, -/turf/template_noop, -/area/template_noop) -"e" = ( -/obj/structure/flora/ausbushes/palebush, -/turf/template_noop, -/area/template_noop) -"f" = ( -/obj/structure/flora/ausbushes/ppflowers, -/turf/template_noop, -/area/template_noop) - -(1,1,1) = {" -a -a -a -a -a -a -a -"} -(2,1,1) = {" -a -a -a -a -a -a -a -"} -(3,1,1) = {" -a -a -a -a -c -b -a -"} -(4,1,1) = {" -a -a -a -a -a -a -a -"} -(5,1,1) = {" -a -a -b -a -b -a -a -"} -(6,1,1) = {" -a -a -a -d -a -a -a -"} -(7,1,1) = {" -a -a -a -a -a -a -a -"} -(8,1,1) = {" -a -b -c -a -a -f -a -"} -(9,1,1) = {" -a -a -a -a -e -a -a -"} -(10,1,1) = {" -a -a -a -a -a -b -a -"} -(11,1,1) = {" -a -a -a -a -a -a -a -"} -(12,1,1) = {" -a -a -a -a -a -a -a -"} diff --git a/maps/random_ruins/exoplanet_ruins/oldlab/oldlab.dm b/maps/random_ruins/exoplanet_ruins/oldlab/oldlab.dm deleted file mode 100644 index 8b46ea3bf26dd..0000000000000 --- a/maps/random_ruins/exoplanet_ruins/oldlab/oldlab.dm +++ /dev/null @@ -1,45 +0,0 @@ - -/datum/map_template/ruin/exoplanet/oldlab - name = "Old Lab" - id = "exoplanet_oldlab" - description = "an abandoned lab" - suffixes = list("oldlab/oldlab.dmm") - spawn_cost = 1 - template_flags = TEMPLATE_FLAG_CLEAR_CONTENTS | TEMPLATE_FLAG_NO_RUINS - ruin_tags = RUIN_HUMAN - - // Areas // - -/area/map_template/oldlab - -/area/map_template/oldlab/solars - name = "\improper Solar Array and hall" - icon_state = "solar" - -/area/map_template/oldlab/station/hall - name = "\improper Hallway" - icon_state = "processing" - -/area/map_template/oldlab/station/breakroom - name = "Break Room" - icon_state = "processing" - -/area/map_template/oldlab/station/chem - name = "\improper Chemistry" - icon_state = "chemistry" - -/area/map_template/oldlab/station/xenobio - name = "\improper Xenobiology" - icon_state = "surgery" - -/area/map_template/oldlab/station/northairlockatmos - name = "\improper Atmos and Robotics" - icon_state = "airlock" - -/area/map_template/oldlab/station/southairlock - name = "\improper Southern Airlock" - icon_state = "airlock" - -/area/map_template/oldlab/station/living - name = "\improper Living Quarters" - icon_state = "surgery" \ No newline at end of file diff --git a/maps/random_ruins/exoplanet_ruins/oldlab/oldlab.dmm b/maps/random_ruins/exoplanet_ruins/oldlab/oldlab.dmm deleted file mode 100644 index 84fc942981f6b..0000000000000 --- a/maps/random_ruins/exoplanet_ruins/oldlab/oldlab.dmm +++ /dev/null @@ -1,4170 +0,0 @@ -//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE -"aa" = ( -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/cable/yellow{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/turf/simulated/floor/exoplanet/concrete/reinforced, -/area/map_template/oldlab/solars) -"ak" = ( -/obj/structure/hygiene/toilet{ - dir = 8 - }, -/turf/simulated/floor/tiled/freezer, -/area/map_template/oldlab/station/living) -"am" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, -/obj/machinery/alarm{ - dir = 4; - pixel_x = -23 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/oldlab/station/southairlock) -"an" = ( -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/steel_grid, -/area/map_template/oldlab/station/living) -"aq" = ( -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/oldlab/solars) -"aW" = ( -/obj/effect/spider/eggcluster, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab/station/xenobio) -"bc" = ( -/obj/structure/cable/yellow{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/oldlab/solars) -"bg" = ( -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/exoplanet/concrete/reinforced, -/area/map_template/oldlab/solars) -"bl" = ( -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab/station/chem) -"bq" = ( -/obj/effect/floor_decal/corner/red, -/obj/effect/floor_decal/corner/red{ - dir = 1 - }, -/obj/structure/extinguisher_cabinet{ - pixel_x = 32 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab/station/breakroom) -"bt" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/oldlab/station/southairlock) -"bz" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply, -/obj/effect/floor_decal/techfloor, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/oldlab/station/northairlockatmos) -"bJ" = ( -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 8 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab/station/hall) -"bP" = ( -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/turf/simulated/floor/exoplanet/concrete/reinforced, -/area/map_template/oldlab/solars) -"bQ" = ( -/obj/machinery/computer/crew, -/turf/simulated/floor/tiled/steel_grid, -/area/map_template/oldlab/station/living) -"bV" = ( -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab/station/xenobio) -"cd" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 8 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab/station/chem) -"cv" = ( -/obj/effect/landmark/clear, -/turf/simulated/floor/exoplanet/concrete/reinforced, -/area/map_template/oldlab/station/southairlock) -"cw" = ( -/obj/effect/floor_decal/techfloor{ - dir = 4 - }, -/obj/machinery/computer/rdconsole/robotics{ - dir = 8 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/oldlab/station/northairlockatmos) -"cI" = ( -/obj/effect/floor_decal/techfloor{ - dir = 6 - }, -/obj/machinery/power/port_gen/pacman/mrs, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/oldlab/station/northairlockatmos) -"cY" = ( -/obj/machinery/reagentgrinder, -/obj/item/reagent_containers/glass/beaker/large, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab/station/chem) -"dc" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/civilian, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab/station/breakroom) -"dd" = ( -/obj/effect/floor_decal/techfloor{ - dir = 6 - }, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 8 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/oldlab/station/southairlock) -"do" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 1; - level = 2 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab/station/hall) -"dx" = ( -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/cable/yellow{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/turf/simulated/floor/exoplanet/concrete/reinforced, -/area/map_template/oldlab/solars) -"dz" = ( -/obj/structure/cable/yellow{ - d2 = 8; - icon_state = "0-8" - }, -/obj/machinery/power/terminal{ - dir = 4 - }, -/obj/machinery/light{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/obj/machinery/power/apc{ - dir = 4; - name = "east bump"; - pixel_x = 24 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab/station/chem) -"dG" = ( -/obj/structure/reagent_dispensers/acid{ - density = 0; - pixel_x = 32 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab/station/chem) -"dU" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab/station/hall) -"eb" = ( -/obj/machinery/door/airlock/civilian, -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/oldlab/station/southairlock) -"ed" = ( -/obj/machinery/light/small{ - dir = 8 - }, -/obj/effect/floor_decal/techfloor{ - dir = 8 - }, -/obj/machinery/optable{ - name = "Robotics Operating Table" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/oldlab/station/northairlockatmos) -"ef" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/oldlab/station/northairlockatmos) -"ej" = ( -/obj/machinery/atmospherics/pipe/simple/visible, -/obj/machinery/door/airlock/external{ - frequency = 1379; - id_tag = "labport_inner"; - locked = 1; - name = "South Lab Airlock" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/oldlab/station/southairlock) -"eu" = ( -/obj/effect/floor_decal/techfloor{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/oldlab/solars) -"ev" = ( -/obj/machinery/computer/modular/preset/civilian{ - dir = 4; - icon_state = "console" - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab/station/chem) -"eL" = ( -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/machinery/light/spot{ - dir = 4 - }, -/turf/simulated/floor/exoplanet/concrete/reinforced, -/area/map_template/oldlab/solars) -"eW" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab/station/chem) -"fi" = ( -/obj/machinery/door/airlock/civilian{ - name = "Shower" - }, -/turf/simulated/floor/tiled/freezer, -/area/map_template/oldlab/station/living) -"fk" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/effect/floor_decal/corner/red, -/obj/effect/floor_decal/corner/red{ - dir = 1 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab/station/breakroom) -"fs" = ( -/obj/effect/floor_decal/techfloor{ - dir = 5 - }, -/obj/machinery/recharge_station, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/oldlab/station/northairlockatmos) -"fH" = ( -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab/station/hall) -"fJ" = ( -/turf/simulated/floor/tiled/steel_grid, -/area/map_template/oldlab/station/living) -"fY" = ( -/obj/effect/floor_decal/techfloor{ - dir = 1 - }, -/obj/effect/floor_decal/techfloor, -/obj/machinery/door/airlock/civilian, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/oldlab/station/northairlockatmos) -"gi" = ( -/obj/effect/floor_decal/techfloor{ - dir = 5 - }, -/obj/structure/reagent_dispensers/watertank, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 8 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/oldlab/station/southairlock) -"gj" = ( -/turf/simulated/wall/prepainted, -/area/map_template/oldlab/station/northairlockatmos) -"gn" = ( -/obj/machinery/light/small{ - dir = 8 - }, -/obj/structure/hygiene/sink{ - dir = 1; - pixel_y = 16 - }, -/turf/simulated/floor/tiled/freezer, -/area/map_template/oldlab/station/living) -"gu" = ( -/obj/machinery/light, -/obj/effect/floor_decal/corner/paleblue{ - dir = 10 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab/station/hall) -"gG" = ( -/obj/effect/floor_decal/techfloor{ - dir = 4 - }, -/obj/structure/cable/yellow, -/obj/structure/cable/yellow{ - d2 = 2; - icon_state = "0-2" - }, -/obj/machinery/power/terminal{ - dir = 4 - }, -/obj/machinery/power/apc{ - dir = 4; - name = "east bump"; - pixel_x = 24 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/oldlab/solars) -"gL" = ( -/obj/effect/floor_decal/techfloor{ - dir = 10 - }, -/obj/structure/table/steel, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/oldlab/solars) -"hh" = ( -/obj/structure/bed/chair/office/comfy/red{ - dir = 8 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab/station/chem) -"hn" = ( -/obj/machinery/atmospherics/binary/pump/on, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/oldlab/station/southairlock) -"hq" = ( -/obj/effect/floor_decal/techfloor{ - dir = 8 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/oldlab/solars) -"hF" = ( -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/mob/living/simple_animal/hostile/giant_spider/nurse, -/turf/simulated/floor/tiled/steel_grid, -/area/map_template/oldlab/station/living) -"hI" = ( -/obj/effect/floor_decal/techfloor, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/oldlab/station/southairlock) -"hK" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 8 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/oldlab/station/northairlockatmos) -"hO" = ( -/obj/effect/floor_decal/techfloor{ - dir = 8 - }, -/obj/machinery/computer/atmos_alert{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/oldlab/solars) -"hP" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 1 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/oldlab/station/northairlockatmos) -"ib" = ( -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/effect/floor_decal/industrial/hatch/yellow, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/oldlab/station/northairlockatmos) -"ii" = ( -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/mob/living/simple_animal/hostile/giant_spider/spitter, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/oldlab/solars) -"ij" = ( -/obj/structure/table/rack, -/obj/item/crowbar, -/obj/item/shovel, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/oldlab/station/southairlock) -"it" = ( -/obj/effect/floor_decal/techfloor{ - dir = 1 - }, -/obj/machinery/light{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/oldlab/station/southairlock) -"iu" = ( -/obj/structure/cable/yellow{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/turf/simulated/floor/exoplanet/concrete/reinforced, -/area/map_template/oldlab/solars) -"ix" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab/station/xenobio) -"iF" = ( -/obj/machinery/power/tracker, -/obj/structure/cable/yellow{ - d2 = 2; - icon_state = "0-2" - }, -/obj/structure/cable/yellow, -/turf/simulated/floor/exoplanet/concrete/reinforced, -/area/map_template/oldlab/solars) -"iG" = ( -/obj/machinery/door/firedoor, -/obj/effect/floor_decal/industrial/hatch/yellow, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/oldlab/station/northairlockatmos) -"iR" = ( -/obj/structure/cable/yellow{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 1 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab/station/chem) -"jf" = ( -/obj/effect/floor_decal/corner/paleblue{ - dir = 10 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab/station/hall) -"jl" = ( -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/effect/floor_decal/corner/red, -/obj/effect/floor_decal/corner/red{ - dir = 1 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab/station/breakroom) -"jn" = ( -/obj/structure/table/steel, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 8 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab/station/hall) -"jr" = ( -/obj/effect/floor_decal/techfloor{ - dir = 1 - }, -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/oldlab/solars) -"jx" = ( -/obj/machinery/vending/medical, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab/station/xenobio) -"jA" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - level = 2 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab/station/hall) -"ke" = ( -/obj/effect/floor_decal/techfloor{ - dir = 8 - }, -/obj/machinery/light/small{ - dir = 8 - }, -/obj/item/device/radio/intercom/entertainment{ - dir = 4; - pixel_x = -22 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/oldlab/station/northairlockatmos) -"kQ" = ( -/obj/effect/floor_decal/techfloor{ - dir = 9 - }, -/obj/machinery/atmospherics/unary/tank/air, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/oldlab/station/northairlockatmos) -"li" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/button/blast_door{ - active = null; - contaminated = null; - id_tag = "research_lab_shutters"; - name = "Lab Shutters Control"; - pixel_x = -32 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab/station/chem) -"lj" = ( -/obj/structure/cable/yellow{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab/station/hall) -"ln" = ( -/obj/machinery/light{ - dir = 8 - }, -/obj/effect/floor_decal/corner/red, -/obj/effect/floor_decal/corner/red{ - dir = 1 - }, -/obj/structure/closet/hydrant{ - pixel_x = -32 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab/station/breakroom) -"lo" = ( -/obj/effect/floor_decal/techfloor{ - dir = 5 - }, -/obj/machinery/vending/robotics{ - dir = 8 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/oldlab/station/northairlockatmos) -"lx" = ( -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/door/airlock/civilian, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab/station/chem) -"lC" = ( -/obj/effect/floor_decal/techfloor{ - dir = 1 - }, -/obj/structure/cable/yellow{ - d2 = 8; - icon_state = "0-8" - }, -/obj/machinery/power/terminal{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/power/apc{ - dir = 1; - name = "north bump"; - pixel_y = 24 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/oldlab/station/southairlock) -"lN" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/oldlab/station/southairlock) -"lO" = ( -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/cable/yellow{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab/station/hall) -"lV" = ( -/obj/effect/landmark/clear, -/obj/machinery/light/spot, -/turf/simulated/floor/exoplanet/concrete/reinforced, -/area/map_template/oldlab/station/northairlockatmos) -"mn" = ( -/obj/effect/floor_decal/techfloor{ - dir = 4 - }, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/oldlab/station/northairlockatmos) -"mz" = ( -/obj/effect/floor_decal/techfloor{ - dir = 6 - }, -/obj/machinery/light/small{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/oldlab/station/northairlockatmos) -"mP" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled/freezer, -/area/map_template/oldlab/station/breakroom) -"mR" = ( -/obj/effect/floor_decal/techfloor, -/obj/machinery/atmospherics/portables_connector{ - dir = 4 - }, -/obj/machinery/portable_atmospherics/canister/air/airlock, -/obj/machinery/alarm{ - dir = 1; - pixel_y = -22 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/oldlab/station/southairlock) -"mZ" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/bed/chair{ - dir = 1 - }, -/obj/effect/floor_decal/corner/red, -/obj/effect/floor_decal/corner/red{ - dir = 1 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab/station/breakroom) -"nb" = ( -/obj/machinery/light_switch{ - pixel_x = 24; - pixel_y = -6 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab/station/chem) -"nf" = ( -/obj/machinery/light{ - dir = 4 - }, -/obj/machinery/sleeper{ - dir = 8 - }, -/obj/machinery/power/terminal{ - dir = 4 - }, -/obj/structure/cable/yellow{ - d2 = 8; - icon_state = "0-8" - }, -/obj/machinery/power/apc{ - dir = 4; - name = "east bump"; - pixel_x = 24 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab/station/xenobio) -"ni" = ( -/obj/machinery/atmospherics/unary/vent_pump/high_volume/airlock{ - dir = 4; - id_tag = "labport_pump" - }, -/obj/machinery/oxygen_pump{ - pixel_x = -32 - }, -/obj/effect/floor_decal/techfloor{ - dir = 8 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/oldlab/station/southairlock) -"nq" = ( -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply, -/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/oldlab/solars) -"ns" = ( -/obj/structure/table/steel, -/obj/item/reagent_containers/glass/beaker/insulated, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab/station/chem) -"nz" = ( -/obj/effect/floor_decal/techfloor{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 - }, -/obj/structure/closet/hydrant{ - pixel_y = 32 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/oldlab/station/northairlockatmos) -"nD" = ( -/obj/effect/floor_decal/techfloor, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/oldlab/station/northairlockatmos) -"nS" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/oldlab/station/northairlockatmos) -"nV" = ( -/obj/effect/floor_decal/techfloor{ - dir = 8 - }, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 4; - level = 2 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/oldlab/station/southairlock) -"nW" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/obj/effect/floor_decal/corner/red, -/obj/effect/floor_decal/corner/red{ - dir = 1 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab/station/breakroom) -"ob" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/button/blast_door{ - active = null; - contaminated = null; - id_tag = "research_lab_shutters"; - name = "Lab Shutters Control"; - pixel_x = -32 - }, -/obj/effect/floor_decal/corner/paleblue{ - dir = 9 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab/station/hall) -"od" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab/station/hall) -"ol" = ( -/obj/machinery/access_button{ - command = "cycle_interior"; - frequency = 1379; - master_tag = "labport_airlock"; - name = "interior access button"; - pixel_x = 24; - pixel_y = -24; - req_access = null - }, -/obj/machinery/atmospherics/pipe/manifold/visible{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/oldlab/station/southairlock) -"ow" = ( -/obj/structure/closet/firecloset, -/obj/machinery/light, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab/station/hall) -"oF" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/obj/machinery/alarm{ - dir = 8; - pixel_x = 24 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab/station/chem) -"oH" = ( -/obj/machinery/chem_master, -/obj/machinery/light{ - dir = 1 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab/station/chem) -"oI" = ( -/obj/effect/floor_decal/techfloor{ - dir = 8 - }, -/obj/random/tech_supply, -/obj/structure/closet/hydrant{ - pixel_x = -32 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/oldlab/station/southairlock) -"oM" = ( -/obj/structure/table/steel, -/obj/item/reagent_containers/glass/beaker, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab/station/chem) -"oU" = ( -/obj/effect/landmark/clear, -/obj/machinery/light/spot{ - dir = 8 - }, -/turf/simulated/floor/exoplanet/concrete/reinforced, -/area/map_template/oldlab/station/northairlockatmos) -"pc" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/turf/simulated/floor/tiled/steel_grid, -/area/map_template/oldlab/station/living) -"pq" = ( -/obj/machinery/light_switch{ - pixel_x = -6; - pixel_y = -24 - }, -/obj/effect/floor_decal/corner/paleblue{ - dir = 10 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab/station/hall) -"pt" = ( -/obj/effect/floor_decal/techfloor, -/obj/structure/cable/yellow{ - d2 = 8; - icon_state = "0-8" - }, -/obj/machinery/power/terminal, -/obj/machinery/power/apc{ - name = "south bump"; - pixel_y = -28 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/oldlab/station/northairlockatmos) -"pB" = ( -/obj/effect/floor_decal/corner/red, -/obj/effect/floor_decal/corner/red{ - dir = 1 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab/station/breakroom) -"pH" = ( -/obj/effect/floor_decal/corner/paleblue{ - dir = 5 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab/station/hall) -"pO" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab/station/xenobio) -"qf" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/light{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab/station/hall) -"qn" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/turf/simulated/floor/tiled/steel_grid, -/area/map_template/oldlab/station/living) -"qt" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/oldlab/station/northairlockatmos) -"qB" = ( -/obj/structure/table/steel, -/obj/random/medical, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab/station/chem) -"qF" = ( -/obj/structure/table/steel, -/obj/random/mre, -/obj/effect/floor_decal/corner/red, -/obj/effect/floor_decal/corner/red{ - dir = 1 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab/station/breakroom) -"qR" = ( -/obj/effect/floor_decal/corner/paleblue{ - dir = 5 - }, -/mob/living/simple_animal/hostile/giant_spider/guard, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab/station/hall) -"qX" = ( -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/steel_grid, -/area/map_template/oldlab/station/living) -"rd" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/button/blast_door{ - active = null; - contaminated = null; - id_tag = "research_lab_shutters"; - name = "Lab Shutters Control"; - pixel_x = 32 - }, -/obj/effect/floor_decal/corner/paleblue{ - dir = 5 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab/station/hall) -"re" = ( -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/cable/yellow{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/turf/simulated/floor/exoplanet/concrete/reinforced, -/area/map_template/oldlab/solars) -"rt" = ( -/turf/simulated/wall/r_wall/prepainted, -/area/map_template/oldlab/station/chem) -"rw" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/light{ - dir = 8 - }, -/obj/effect/floor_decal/corner/paleblue{ - dir = 9 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab/station/hall) -"rz" = ( -/obj/machinery/light{ - dir = 4 - }, -/obj/machinery/alarm{ - dir = 8; - pixel_x = 24 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab/station/xenobio) -"rO" = ( -/turf/simulated/floor/tiled/freezer, -/area/map_template/oldlab/station/living) -"rQ" = ( -/obj/effect/floor_decal/techfloor, -/obj/machinery/light, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/oldlab/station/southairlock) -"rS" = ( -/obj/structure/closet/wardrobe/science_white, -/turf/simulated/floor/tiled/steel_grid, -/area/map_template/oldlab/station/living) -"rV" = ( -/obj/structure/cable/yellow{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab/station/xenobio) -"sj" = ( -/obj/effect/floor_decal/techfloor, -/obj/structure/table/steel, -/obj/item/device/robotanalyzer, -/obj/machinery/recharger, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/oldlab/station/northairlockatmos) -"sp" = ( -/obj/machinery/light/small{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/turf/simulated/floor/tiled/freezer, -/area/map_template/oldlab/station/breakroom) -"sY" = ( -/turf/simulated/wall/prepainted, -/area/map_template/oldlab/station/southairlock) -"tc" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/oldlab/station/northairlockatmos) -"ty" = ( -/obj/effect/floor_decal/techfloor{ - dir = 4 - }, -/obj/machinery/suit_storage_unit/engineering/alt, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/oldlab/station/southairlock) -"tI" = ( -/obj/effect/floor_decal/techfloor{ - dir = 1 - }, -/obj/machinery/portable_atmospherics/powered/scrubber, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/oldlab/station/northairlockatmos) -"tM" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/obj/machinery/button/blast_door{ - active = null; - contaminated = null; - id_tag = "research_lab_shutters"; - name = "Lab Shutters Control"; - pixel_x = 32 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab/station/xenobio) -"tO" = ( -/obj/effect/floor_decal/techfloor{ - dir = 10 - }, -/obj/structure/table/steel, -/obj/random/toolbox, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/oldlab/station/northairlockatmos) -"tP" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/extinguisher_cabinet{ - pixel_x = 32 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab/station/chem) -"tU" = ( -/obj/structure/table/steel, -/obj/item/stack/nanopaste, -/obj/random/medical, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab/station/xenobio) -"ue" = ( -/obj/structure/table/steel, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 8 - }, -/obj/effect/floor_decal/corner/paleblue{ - dir = 8 - }, -/obj/effect/floor_decal/corner/paleblue{ - dir = 6 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab/station/hall) -"uj" = ( -/turf/simulated/floor/exoplanet/concrete/reinforced, -/area/map_template/oldlab/solars) -"uq" = ( -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab/station/chem) -"uy" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/door/airlock/civilian{ - name = "Shower" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled/freezer, -/area/map_template/oldlab/station/breakroom) -"vh" = ( -/obj/effect/floor_decal/techfloor{ - dir = 9 - }, -/obj/structure/closet/toolcloset, -/obj/item/storage/box/lights/mixed, -/obj/random/handgun, -/obj/random/accessory, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/oldlab/station/southairlock) -"vk" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/oldlab/station/southairlock) -"vw" = ( -/obj/structure/cable/yellow{ - d2 = 4; - icon_state = "0-4" - }, -/obj/machinery/power/terminal{ - dir = 8 - }, -/obj/machinery/power/apc{ - dir = 8; - name = "west bump"; - pixel_x = -24 - }, -/obj/effect/floor_decal/corner/red, -/obj/effect/floor_decal/corner/red{ - dir = 1 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab/station/breakroom) -"vy" = ( -/obj/machinery/light{ - dir = 8 - }, -/turf/simulated/floor/tiled/steel_grid, -/area/map_template/oldlab/station/living) -"vH" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/universal, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/oldlab/station/southairlock) -"vW" = ( -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/effect/floor_decal/corner/red, -/obj/effect/floor_decal/corner/red{ - dir = 1 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab/station/breakroom) -"wg" = ( -/obj/item/modular_computer/telescreen/preset/medical, -/turf/simulated/wall/r_wall/prepainted, -/area/map_template/oldlab/station/breakroom) -"wm" = ( -/obj/structure/cable/yellow{ - d2 = 2; - icon_state = "0-2" - }, -/obj/machinery/power/terminal{ - dir = 1 - }, -/obj/machinery/power/apc{ - dir = 1; - name = "north bump"; - pixel_y = 24 - }, -/obj/effect/floor_decal/corner/paleblue{ - dir = 5 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab/station/hall) -"wq" = ( -/obj/effect/floor_decal/techfloor{ - dir = 1 - }, -/obj/machinery/light{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/oldlab/solars) -"wr" = ( -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/turf/simulated/floor/exoplanet/concrete/reinforced, -/area/map_template/oldlab/solars) -"wD" = ( -/obj/effect/wallframe_spawn/reinforced/titanium, -/obj/machinery/door/blast/shutters{ - icon_state = "shutter0"; - id_tag = "research_lab_shutters"; - opacity = 0 - }, -/obj/effect/paint/black, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/oldlab/station/xenobio) -"xg" = ( -/obj/structure/table/steel, -/obj/item/device/radio/intercom/entertainment{ - dir = 8; - pixel_x = 22 - }, -/obj/effect/floor_decal/corner/red, -/obj/effect/floor_decal/corner/red{ - dir = 1 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab/station/breakroom) -"xl" = ( -/obj/structure/closet/wardrobe/lawyer_black, -/turf/simulated/floor/tiled/steel_grid, -/area/map_template/oldlab/station/living) -"xs" = ( -/obj/structure/table/steel, -/obj/machinery/light{ - dir = 8 - }, -/obj/random/medical, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab/station/chem) -"xB" = ( -/obj/effect/floor_decal/techfloor{ - dir = 8 - }, -/obj/machinery/computer/rcon{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/oldlab/solars) -"xF" = ( -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/structure/cable/yellow{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/turf/simulated/floor/exoplanet/concrete/reinforced, -/area/map_template/oldlab/solars) -"xH" = ( -/obj/effect/landmark/clear, -/obj/machinery/light/spot{ - dir = 1 - }, -/turf/simulated/floor/exoplanet/concrete/reinforced, -/area/map_template/oldlab/station/southairlock) -"xK" = ( -/obj/structure/cable/yellow{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/machinery/light/spot{ - dir = 4 - }, -/turf/simulated/floor/exoplanet/concrete/reinforced, -/area/map_template/oldlab/solars) -"xU" = ( -/obj/machinery/bodyscanner{ - dir = 1 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab/station/xenobio) -"yh" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab/station/xenobio) -"yt" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 8 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab/station/xenobio) -"yC" = ( -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/door/airlock/civilian, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab/station/xenobio) -"yW" = ( -/obj/structure/bed/roller, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab/station/xenobio) -"za" = ( -/obj/effect/wallframe_spawn/reinforced/titanium, -/obj/machinery/door/blast/shutters{ - icon_state = "shutter0"; - id_tag = "research_lab_shutters"; - opacity = 0 - }, -/obj/effect/paint/black, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/oldlab/station/chem) -"zb" = ( -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/item/stool, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/oldlab/solars) -"zd" = ( -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab/station/hall) -"zq" = ( -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab/station/hall) -"zG" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/light, -/obj/machinery/button/blast_door{ - active = null; - contaminated = null; - id_tag = "exterior_lab_shutters"; - name = "Exterior Lab Shutters Control"; - pixel_x = 32 - }, -/obj/effect/floor_decal/corner/paleblue{ - dir = 10 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab/station/hall) -"zJ" = ( -/obj/machinery/airlock_sensor{ - id_tag = "labport_sensor"; - pixel_x = 25; - pixel_y = -6 - }, -/obj/machinery/embedded_controller/radio/airlock/airlock_controller{ - anchor_fall = "labport_airlock"; - dir = 8; - id_tag = "labport_airlock"; - pixel_x = 25; - pixel_y = 8; - req_access = null; - tag_airpump = "labport_pump"; - tag_chamber_sensor = "labport_sensor"; - tag_exterior_door = "labport_outer"; - tag_exterior_sensor = "labport_sensor_external"; - tag_interior_door = "labport_inner" - }, -/obj/effect/floor_decal/techfloor{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/visible{ - dir = 9 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/oldlab/station/southairlock) -"zM" = ( -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/oldlab/station/northairlockatmos) -"zR" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/obj/effect/floor_decal/corner/paleblue{ - dir = 9 - }, -/obj/structure/extinguisher_cabinet{ - pixel_x = -32 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab/station/hall) -"Ak" = ( -/obj/effect/floor_decal/techfloor{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/visible{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/oldlab/station/southairlock) -"As" = ( -/obj/structure/closet/emcloset, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab/station/hall) -"AE" = ( -/obj/effect/landmark/clear, -/obj/machinery/light/spot{ - dir = 8 - }, -/turf/simulated/floor/exoplanet/concrete/reinforced, -/area/map_template/oldlab/station/southairlock) -"AP" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/oldlab/station/northairlockatmos) -"Bm" = ( -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 8 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab/station/hall) -"BD" = ( -/obj/effect/floor_decal/techfloor{ - dir = 8 - }, -/obj/structure/table/steel, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 4; - level = 2 - }, -/obj/random/toolbox, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/oldlab/solars) -"BY" = ( -/obj/effect/floor_decal/techfloor{ - dir = 8 - }, -/obj/structure/table/steel, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/oldlab/solars) -"Cd" = ( -/obj/effect/floor_decal/techfloor{ - dir = 8 - }, -/obj/machinery/light/small{ - dir = 8 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/oldlab/station/northairlockatmos) -"Cv" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/item/device/radio/intercom/entertainment{ - dir = 4; - pixel_x = -22 - }, -/obj/effect/floor_decal/corner/paleblue{ - dir = 9 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab/station/hall) -"Cz" = ( -/obj/structure/closet/secure_closet/freezer/fridge, -/obj/machinery/atmospherics/unary/vent_pump/on{ - level = 2 - }, -/turf/simulated/floor/tiled/freezer, -/area/map_template/oldlab/station/breakroom) -"CB" = ( -/obj/structure/reagent_dispensers/water_cooler{ - dir = 8 - }, -/obj/effect/floor_decal/corner/red, -/obj/effect/floor_decal/corner/red{ - dir = 1 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab/station/breakroom) -"CF" = ( -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab/station/xenobio) -"CL" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab/station/xenobio) -"CX" = ( -/obj/machinery/body_scanconsole{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab/station/xenobio) -"Di" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/obj/effect/floor_decal/corner/red, -/obj/effect/floor_decal/corner/red{ - dir = 1 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab/station/breakroom) -"Dr" = ( -/obj/effect/floor_decal/techfloor, -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 1; - level = 2 - }, -/obj/machinery/light, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/oldlab/solars) -"Du" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/obj/effect/floor_decal/techfloor{ - dir = 10 - }, -/obj/machinery/light/small{ - dir = 8 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/oldlab/station/northairlockatmos) -"DC" = ( -/obj/effect/floor_decal/techfloor{ - dir = 9 - }, -/obj/structure/table/steel, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/oldlab/solars) -"DD" = ( -/obj/machinery/door/firedoor, -/obj/effect/floor_decal/industrial/hatch/yellow, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/oldlab/station/southairlock) -"DK" = ( -/obj/effect/floor_decal/techfloor{ - dir = 8 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/oldlab/station/northairlockatmos) -"DX" = ( -/obj/machinery/light{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/obj/structure/table/steel, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab/station/chem) -"Ej" = ( -/obj/effect/floor_decal/techfloor{ - dir = 9 - }, -/obj/machinery/fabricator, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/oldlab/station/northairlockatmos) -"Eq" = ( -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/door/airlock/civilian, -/turf/simulated/floor/tiled/steel_grid, -/area/map_template/oldlab/station/living) -"Eu" = ( -/obj/structure/table/steel, -/obj/machinery/reagent_temperature, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab/station/chem) -"Ez" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/obj/structure/iv_drip, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab/station/xenobio) -"EE" = ( -/obj/structure/closet/secure_closet/freezer/fridge, -/turf/simulated/floor/tiled/freezer, -/area/map_template/oldlab/station/breakroom) -"EH" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply, -/obj/machinery/alarm{ - dir = 1; - pixel_y = -22 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, -/obj/effect/floor_decal/corner/red, -/obj/effect/floor_decal/corner/red{ - dir = 1 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab/station/breakroom) -"Fg" = ( -/obj/effect/wallframe_spawn/reinforced/titanium, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/effect/paint/black, -/turf/simulated/floor/exoplanet/concrete/reinforced, -/area/map_template/oldlab/solars) -"Fj" = ( -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab/station/chem) -"Ft" = ( -/obj/structure/cable/yellow{ - d2 = 8; - icon_state = "0-8" - }, -/obj/machinery/power/terminal{ - dir = 4 - }, -/obj/machinery/power/apc{ - dir = 4; - name = "east bump"; - pixel_x = 24 - }, -/obj/item/bedsheet/blue, -/obj/structure/bed/padded, -/obj/random/plushie, -/turf/simulated/floor/tiled/steel_grid, -/area/map_template/oldlab/station/living) -"Fv" = ( -/obj/structure/table/rack, -/obj/item/stack/material/steel/fifty, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/oldlab/station/northairlockatmos) -"FA" = ( -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/structure/cable/yellow{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/structure/cable/yellow{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/turf/simulated/floor/exoplanet/concrete/reinforced, -/area/map_template/oldlab/solars) -"FF" = ( -/obj/effect/floor_decal/techfloor{ - dir = 4 - }, -/obj/machinery/robotics_fabricator, -/obj/machinery/light/small{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/oldlab/station/northairlockatmos) -"Gd" = ( -/obj/machinery/access_button{ - command = "cycle_exterior"; - frequency = 1379; - master_tag = "labport_airlock"; - name = "exterior access button"; - pixel_x = 24; - pixel_y = 24; - req_access = list("ACCESS_MAINT") - }, -/obj/effect/landmark/clear, -/obj/machinery/airlock_sensor{ - id_tag = "starboardlab_sensor_external"; - pixel_x = -24; - pixel_y = 24 - }, -/turf/simulated/floor/exoplanet/concrete/reinforced, -/area/map_template/oldlab/station/southairlock) -"Gk" = ( -/obj/structure/table/steel, -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/obj/item/device/flashlight/lamp, -/obj/machinery/light_switch{ - pixel_x = -6; - pixel_y = 24 - }, -/obj/random/advdevice, -/turf/simulated/floor/tiled/steel_grid, -/area/map_template/oldlab/station/living) -"Gl" = ( -/obj/machinery/washing_machine, -/turf/simulated/floor/tiled/steel_grid, -/area/map_template/oldlab/station/living) -"Gv" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 8 - }, -/obj/machinery/light{ - dir = 8 - }, -/obj/effect/floor_decal/corner/paleblue{ - dir = 9 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab/station/hall) -"Hc" = ( -/obj/effect/floor_decal/techfloor{ - dir = 1 - }, -/obj/machinery/light/small{ - dir = 1 - }, -/obj/item/bedsheet/brown, -/obj/structure/bed/padded, -/obj/machinery/alarm{ - dir = 8; - pixel_x = 24 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/oldlab/station/southairlock) -"Hd" = ( -/obj/structure/hygiene/shower{ - dir = 1 - }, -/obj/structure/curtain/open/shower, -/obj/random/soap, -/turf/simulated/floor/tiled/freezer, -/area/map_template/oldlab/station/living) -"Hk" = ( -/obj/effect/floor_decal/techfloor, -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/random/trash, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/oldlab/solars) -"Hp" = ( -/obj/effect/floor_decal/techfloor, -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/fireaxecabinet{ - pixel_y = -32 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/oldlab/solars) -"Hu" = ( -/obj/machinery/alarm{ - dir = 1; - pixel_y = -22 - }, -/turf/simulated/floor/tiled/steel_grid, -/area/map_template/oldlab/station/living) -"HC" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/portable_atmospherics/canister/oxygen, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/oldlab/station/southairlock) -"HG" = ( -/obj/effect/floor_decal/techfloor{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/oldlab/station/northairlockatmos) -"HU" = ( -/obj/machinery/power/solar/improved, -/obj/effect/floor_decal/solarpanel, -/obj/structure/cable/yellow, -/obj/structure/cable/yellow{ - d2 = 2; - icon_state = "0-2" - }, -/turf/simulated/floor/exoplanet/concrete/reinforced, -/area/map_template/oldlab/solars) -"HV" = ( -/obj/effect/floor_decal/techfloor{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/item/device/radio/intercom/entertainment{ - pixel_y = 24 - }, -/mob/living/simple_animal/hostile/giant_spider/guard, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/oldlab/solars) -"If" = ( -/obj/effect/floor_decal/techfloor{ - dir = 4 - }, -/obj/effect/floor_decal/techfloor{ - dir = 6 - }, -/obj/machinery/power/smes/buildable/outpost_substation, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/oldlab/solars) -"Is" = ( -/obj/effect/wallframe_spawn/reinforced/titanium, -/obj/effect/paint/black, -/turf/simulated/floor/exoplanet/concrete/reinforced, -/area/map_template/oldlab/solars) -"IV" = ( -/obj/structure/cable/yellow{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/oldlab/station/northairlockatmos) -"IY" = ( -/obj/item/device/radio/intercom/entertainment{ - pixel_y = 24 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab/station/chem) -"Jc" = ( -/obj/structure/table/steel, -/obj/random/medical, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab/station/xenobio) -"Jf" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/oldlab/solars) -"Jz" = ( -/obj/effect/floor_decal/techfloor, -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/oldlab/solars) -"JC" = ( -/obj/structure/table/steel, -/obj/item/storage/firstaid/surgery, -/obj/item/device/radio/intercom/entertainment{ - pixel_y = 24 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab/station/xenobio) -"Kg" = ( -/turf/simulated/wall/r_wall/prepainted, -/area/map_template/oldlab/station/southairlock) -"Km" = ( -/obj/effect/floor_decal/techfloor{ - dir = 1 - }, -/obj/machinery/computer/power_monitor, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/oldlab/solars) -"Ku" = ( -/obj/effect/floor_decal/techfloor, -/obj/machinery/light, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 1; - level = 2 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/oldlab/station/northairlockatmos) -"Ky" = ( -/obj/effect/floor_decal/techfloor{ - dir = 8 - }, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 4 - }, -/obj/item/device/radio/intercom/entertainment{ - dir = 4; - pixel_x = -22 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/oldlab/station/southairlock) -"KC" = ( -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/civilian, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab/station/xenobio) -"KS" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/oldlab/station/northairlockatmos) -"Lg" = ( -/obj/effect/floor_decal/techfloor{ - dir = 1 - }, -/obj/machinery/atmospherics/unary/tank/air, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/oldlab/station/northairlockatmos) -"Lh" = ( -/obj/effect/floor_decal/techfloor{ - dir = 10 - }, -/obj/structure/table/steel, -/obj/machinery/alarm{ - dir = 1; - pixel_y = -22 - }, -/obj/item/reagent_containers/spray/cleaner, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/oldlab/station/southairlock) -"Ll" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/light_switch{ - pixel_x = -6; - pixel_y = -24 - }, -/obj/effect/floor_decal/corner/red, -/obj/effect/floor_decal/corner/red{ - dir = 1 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab/station/breakroom) -"Ln" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/alarm{ - dir = 4; - pixel_x = -23 - }, -/obj/effect/floor_decal/corner/paleblue{ - dir = 9 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab/station/hall) -"Lv" = ( -/obj/structure/table/steel, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 8 - }, -/obj/effect/floor_decal/corner/paleblue{ - dir = 1 - }, -/obj/effect/floor_decal/corner/paleblue{ - dir = 6 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab/station/hall) -"Ly" = ( -/obj/effect/floor_decal/techfloor, -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/obj/machinery/light, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/oldlab/solars) -"LA" = ( -/obj/machinery/light{ - dir = 4 - }, -/obj/structure/bed/chair/office/comfy/red{ - dir = 1 - }, -/turf/simulated/floor/tiled/steel_grid, -/area/map_template/oldlab/station/living) -"LB" = ( -/obj/structure/bed/chair/wheelchair, -/turf/simulated/floor/tiled/steel_grid, -/area/map_template/oldlab/station/living) -"LJ" = ( -/obj/machinery/light_switch{ - pixel_x = 24; - pixel_y = -6 - }, -/obj/machinery/computer/modular/preset/civilian{ - dir = 8; - icon_state = "console" - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab/station/xenobio) -"LP" = ( -/obj/effect/wallframe_spawn/reinforced/titanium, -/obj/machinery/door/blast/shutters{ - dir = 4; - icon_state = "shutter0"; - id_tag = "research_lab_shutters"; - opacity = 0 - }, -/obj/effect/paint/black, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/oldlab/station/xenobio) -"LW" = ( -/turf/simulated/wall/r_wall/prepainted, -/area/map_template/oldlab/station/breakroom) -"Md" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/oldlab/solars) -"Mf" = ( -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/civilian, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab/station/breakroom) -"Mh" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab/station/xenobio) -"Ms" = ( -/obj/effect/landmark/clear, -/turf/simulated/floor/exoplanet/concrete/reinforced, -/area/map_template/oldlab/station/northairlockatmos) -"Mx" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/effect/floor_decal/corner/red, -/obj/effect/floor_decal/corner/red{ - dir = 1 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab/station/breakroom) -"ME" = ( -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply, -/obj/random/technology_scanner, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/oldlab/station/southairlock) -"MH" = ( -/obj/effect/floor_decal/techfloor{ - dir = 1 - }, -/obj/machinery/alarm{ - pixel_y = 24 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/oldlab/solars) -"MN" = ( -/obj/effect/floor_decal/techfloor, -/obj/structure/table/steel, -/obj/machinery/light/small, -/obj/random/single/playing_cards, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/oldlab/station/southairlock) -"MQ" = ( -/turf/simulated/wall/r_wall/prepainted, -/area/map_template/oldlab/station/xenobio) -"MV" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 1; - level = 2 - }, -/obj/effect/floor_decal/techfloor{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/oldlab/station/northairlockatmos) -"MX" = ( -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/turf/simulated/floor/exoplanet/concrete/reinforced, -/area/map_template/oldlab/solars) -"Nf" = ( -/obj/structure/cable/yellow{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/obj/structure/bed/chair/office, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/oldlab/solars) -"Ni" = ( -/obj/effect/floor_decal/techfloor{ - dir = 4 - }, -/obj/machinery/light{ - dir = 4 - }, -/obj/machinery/alarm{ - dir = 8; - pixel_x = 24 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/oldlab/solars) -"NB" = ( -/obj/structure/table/rack, -/obj/item/stack/cable_coil/random, -/obj/item/crowbar/brace_jack, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/oldlab/station/southairlock) -"NO" = ( -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/turf/simulated/floor/tiled/steel_grid, -/area/map_template/oldlab/station/living) -"NR" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab/station/xenobio) -"NU" = ( -/obj/machinery/door/airlock/multi_tile/civilian{ - dir = 8 - }, -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/door/firedoor, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/oldlab/solars) -"NW" = ( -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/oldlab/solars) -"OI" = ( -/obj/machinery/door/firedoor, -/obj/effect/floor_decal/industrial/hatch/yellow, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab/station/hall) -"OJ" = ( -/obj/effect/floor_decal/techfloor{ - dir = 4 - }, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 8 - }, -/obj/machinery/alarm{ - dir = 8; - pixel_x = 24 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/oldlab/station/northairlockatmos) -"Pj" = ( -/obj/effect/floor_decal/techfloor{ - dir = 1 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/oldlab/station/northairlockatmos) -"Po" = ( -/obj/machinery/light{ - dir = 4 - }, -/obj/effect/floor_decal/corner/red, -/obj/effect/floor_decal/corner/red{ - dir = 1 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab/station/breakroom) -"PL" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/effect/floor_decal/corner/paleblue{ - dir = 9 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab/station/hall) -"PQ" = ( -/obj/machinery/door/airlock/external{ - frequency = 1379; - id_tag = "labport_outer"; - locked = 1; - name = "South Lab Airlock" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/oldlab/station/southairlock) -"PY" = ( -/obj/effect/floor_decal/techfloor{ - dir = 9 - }, -/obj/structure/reagent_dispensers/fueltank, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/oldlab/station/northairlockatmos) -"Qf" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/obj/random/contraband, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/oldlab/station/southairlock) -"Qp" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - level = 2 - }, -/obj/item/device/radio/intercom/entertainment{ - pixel_y = 24 - }, -/turf/simulated/floor/tiled/steel_grid, -/area/map_template/oldlab/station/living) -"QE" = ( -/turf/simulated/wall/r_wall/prepainted, -/area/map_template/oldlab/station/northairlockatmos) -"QS" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab/station/chem) -"Ra" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 4 - }, -/mob/living/simple_animal/hostile/giant_spider/nurse, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab/station/xenobio) -"Rd" = ( -/obj/machinery/alarm{ - dir = 1; - pixel_y = -22 - }, -/obj/effect/floor_decal/corner/paleblue{ - dir = 10 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab/station/hall) -"Rk" = ( -/obj/effect/floor_decal/techfloor{ - dir = 4 - }, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/structure/extinguisher_cabinet{ - pixel_x = 32 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/oldlab/solars) -"Rr" = ( -/obj/machinery/computer/crew, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab/station/xenobio) -"RA" = ( -/obj/machinery/cooker/grill, -/obj/effect/floor_decal/corner/red, -/obj/effect/floor_decal/corner/red{ - dir = 1 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab/station/breakroom) -"RE" = ( -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/effect/floor_decal/industrial/hatch/yellow, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/oldlab/station/southairlock) -"RN" = ( -/obj/structure/table/steel, -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/obj/machinery/light_switch{ - pixel_y = 25 - }, -/obj/effect/floor_decal/corner/red, -/obj/effect/floor_decal/corner/red{ - dir = 1 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab/station/breakroom) -"RX" = ( -/obj/effect/floor_decal/techfloor{ - dir = 4 - }, -/obj/machinery/power/terminal, -/obj/structure/cable/yellow{ - d2 = 8; - icon_state = "0-8" - }, -/obj/structure/cable/yellow, -/obj/machinery/light{ - dir = 4 - }, -/obj/item/device/radio/intercom/entertainment{ - dir = 8; - pixel_x = 22 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/oldlab/solars) -"Sd" = ( -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 8 - }, -/obj/effect/floor_decal/corner/red, -/obj/effect/floor_decal/corner/red{ - dir = 1 - }, -/mob/living/simple_animal/hostile/giant_spider/hunter, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab/station/breakroom) -"Sk" = ( -/obj/effect/floor_decal/techfloor, -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/oldlab/solars) -"Sp" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/effect/floor_decal/corner/paleblue{ - dir = 9 - }, -/obj/structure/closet/hydrant{ - pixel_x = -32 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab/station/hall) -"SB" = ( -/obj/structure/table/steel, -/obj/machinery/reagent_temperature/cooler, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab/station/chem) -"SL" = ( -/obj/machinery/cooker/oven, -/obj/effect/floor_decal/corner/red, -/obj/effect/floor_decal/corner/red{ - dir = 1 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab/station/breakroom) -"SS" = ( -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/structure/cable/yellow{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/oldlab/solars) -"SW" = ( -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/oldlab/solars) -"Tl" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab/station/hall) -"Tu" = ( -/obj/structure/cable/yellow{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/oldlab/solars) -"Tw" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 1 - }, -/obj/effect/floor_decal/corner/paleblue{ - dir = 9 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab/station/hall) -"TF" = ( -/obj/effect/wallframe_spawn/reinforced/titanium, -/obj/machinery/door/blast/shutters{ - dir = 4; - icon_state = "shutter0"; - id_tag = "exterior_lab_shutters"; - opacity = 0 - }, -/obj/effect/paint/black, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/oldlab/station/hall) -"TS" = ( -/turf/simulated/wall/r_wall/prepainted, -/area/map_template/oldlab/station/hall) -"TV" = ( -/obj/effect/floor_decal/techfloor{ - dir = 9 - }, -/obj/machinery/recharge_station, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/oldlab/station/northairlockatmos) -"TX" = ( -/obj/effect/floor_decal/techfloor{ - dir = 5 - }, -/obj/machinery/portable_atmospherics/powered/pump/filled, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/oldlab/station/northairlockatmos) -"Ul" = ( -/obj/structure/bed/chair/office/comfy/red{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab/station/xenobio) -"Um" = ( -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/multi_tile/glass/medical{ - dir = 8 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/oldlab/solars) -"Uu" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/oldlab/station/northairlockatmos) -"Ux" = ( -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab/station/hall) -"UR" = ( -/obj/structure/table/steel, -/obj/machinery/microwave, -/obj/effect/floor_decal/corner/red, -/obj/effect/floor_decal/corner/red{ - dir = 1 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab/station/breakroom) -"Vf" = ( -/obj/machinery/vitals_monitor, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab/station/xenobio) -"Vi" = ( -/obj/machinery/light/small{ - dir = 8 - }, -/obj/effect/floor_decal/techfloor{ - dir = 8 - }, -/obj/machinery/atmospherics/unary/vent_pump/high_volume/airlock{ - dir = 4; - id_tag = "labport_pump" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/oldlab/station/southairlock) -"Vp" = ( -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/turf/simulated/floor/exoplanet/concrete/reinforced, -/area/map_template/oldlab/solars) -"Vq" = ( -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/door/firedoor, -/obj/effect/floor_decal/industrial/hatch/yellow, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab/station/hall) -"Vs" = ( -/obj/machinery/light{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab/station/chem) -"VC" = ( -/obj/structure/table/steel, -/obj/item/reagent_containers/glass/beaker/vial/random{ - pixel_x = 3; - pixel_y = 7 - }, -/obj/item/reagent_containers/glass/beaker/vial/random{ - pixel_x = 9; - pixel_y = 6 - }, -/obj/item/reagent_containers/glass/beaker/vial/random, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab/station/chem) -"VK" = ( -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/oldlab/solars) -"VL" = ( -/obj/machinery/optable{ - name = "Xenobiology Operating Table" - }, -/obj/machinery/light{ - dir = 1 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab/station/xenobio) -"VX" = ( -/obj/structure/closet/firecloset, -/obj/machinery/light{ - dir = 1 - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab/station/hall) -"Wo" = ( -/obj/effect/floor_decal/techfloor{ - dir = 4 - }, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/oldlab/station/southairlock) -"WG" = ( -/obj/effect/floor_decal/techfloor{ - dir = 4 - }, -/obj/machinery/vending/tool{ - dir = 8 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/oldlab/solars) -"WJ" = ( -/turf/simulated/wall/r_wall/prepainted, -/area/map_template/oldlab/solars) -"WM" = ( -/obj/effect/floor_decal/techfloor, -/obj/structure/table/steel, -/obj/item/modular_computer/laptop, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/oldlab/solars) -"Xi" = ( -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab/station/hall) -"Xj" = ( -/obj/structure/table/rack, -/obj/random/tool, -/obj/random/tool, -/obj/item/storage/belt/utility/full, -/obj/item/device/suit_cooling_unit, -/obj/random/technology_scanner, -/obj/random/tool, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/oldlab/station/northairlockatmos) -"Xl" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/oldlab/station/northairlockatmos) -"Xx" = ( -/obj/structure/grille, -/turf/simulated/floor/exoplanet/concrete/reinforced, -/area/map_template/oldlab/solars) -"Yb" = ( -/obj/machinery/light{ - dir = 8 - }, -/obj/item/device/radio/intercom/entertainment{ - dir = 4; - pixel_x = -22 - }, -/turf/simulated/floor/tiled/steel_grid, -/area/map_template/oldlab/station/living) -"Yd" = ( -/turf/simulated/wall/r_wall/prepainted, -/area/map_template/oldlab/station/living) -"Yh" = ( -/obj/machinery/power/solar_control, -/obj/effect/floor_decal/techfloor{ - dir = 5 - }, -/obj/structure/cable/yellow, -/obj/structure/cable/yellow{ - d2 = 2; - icon_state = "0-2" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/oldlab/solars) -"Yi" = ( -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab/station/xenobio) -"Yp" = ( -/obj/effect/floor_decal/techfloor{ - dir = 1 - }, -/obj/machinery/light{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/oldlab/solars) -"Yt" = ( -/obj/machinery/chemical_dispenser/full, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab/station/chem) -"YJ" = ( -/obj/machinery/smartfridge/chemistry, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab/station/chem) -"YW" = ( -/obj/effect/floor_decal/techfloor{ - dir = 6 - }, -/obj/structure/reagent_dispensers/acid{ - density = 0; - pixel_x = 32 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/oldlab/station/northairlockatmos) -"YZ" = ( -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/exoplanet/concrete/reinforced, -/area/map_template/oldlab/solars) -"Ze" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab/station/hall) -"Zf" = ( -/obj/effect/floor_decal/techfloor{ - dir = 4 - }, -/obj/machinery/alarm{ - dir = 8; - pixel_x = 24 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/oldlab/station/northairlockatmos) -"Zk" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 1 - }, -/obj/machinery/light, -/obj/effect/floor_decal/corner/paleblue{ - dir = 10 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab/station/hall) -"ZC" = ( -/obj/structure/cable/yellow{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/turf/simulated/floor/exoplanet/concrete/reinforced, -/area/map_template/oldlab/solars) -"ZS" = ( -/obj/machinery/door/airlock/civilian, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/oldlab/station/northairlockatmos) -"ZW" = ( -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/light/spot{ - dir = 4 - }, -/turf/simulated/floor/exoplanet/concrete/reinforced, -/area/map_template/oldlab/solars) - -(1,1,1) = {" -Xx -Xx -Xx -Xx -Xx -Xx -Xx -Xx -Xx -Xx -Xx -Xx -Xx -Xx -Xx -Xx -Xx -Xx -Xx -Xx -Xx -Xx -Xx -Xx -Xx -"} -(2,1,1) = {" -Xx -ZC -bg -MX -bg -xF -bg -xF -bg -xF -bg -xF -iF -MX -bg -MX -bg -MX -bg -MX -bg -MX -bg -Vp -Xx -"} -(3,1,1) = {" -Xx -re -HU -aa -HU -aa -HU -aa -HU -aa -HU -aa -HU -aa -HU -aa -HU -aa -HU -aa -HU -aa -HU -YZ -Xx -"} -(4,1,1) = {" -Xx -re -HU -aa -HU -aa -HU -aa -HU -aa -HU -aa -HU -aa -HU -aa -HU -aa -HU -aa -HU -aa -HU -YZ -Xx -"} -(5,1,1) = {" -Xx -re -HU -aa -HU -aa -HU -aa -HU -aa -HU -aa -HU -aa -HU -aa -HU -aa -HU -aa -HU -aa -HU -YZ -Xx -"} -(6,1,1) = {" -Xx -re -HU -aa -HU -aa -HU -aa -HU -aa -HU -aa -HU -aa -HU -aa -HU -aa -HU -aa -HU -aa -HU -YZ -Xx -"} -(7,1,1) = {" -Xx -re -HU -aa -HU -aa -HU -aa -HU -aa -HU -aa -HU -aa -HU -aa -HU -aa -HU -aa -HU -aa -HU -YZ -Xx -"} -(8,1,1) = {" -Xx -re -HU -aa -HU -aa -HU -aa -HU -aa -HU -aa -HU -aa -HU -aa -HU -aa -HU -aa -HU -aa -HU -YZ -Xx -"} -(9,1,1) = {" -Xx -re -HU -aa -HU -FA -bg -wr -bg -wr -bg -wr -bg -wr -bg -wr -bg -wr -bg -dx -HU -aa -HU -YZ -Xx -"} -(10,1,1) = {" -Xx -re -HU -aa -HU -YZ -uj -Is -Is -Is -Is -Is -Is -Is -Is -Is -Is -Is -uj -re -HU -aa -HU -YZ -Xx -"} -(11,1,1) = {" -Xx -re -HU -aa -HU -YZ -uj -Is -DC -BY -hO -hq -hq -hq -xB -BD -gL -Is -uj -re -HU -aa -HU -YZ -Xx -"} -(12,1,1) = {" -Xx -re -HU -aa -HU -YZ -uj -Is -Km -Nf -VK -VK -ii -SW -SW -zb -WM -Is -uj -re -HU -aa -HU -YZ -Xx -"} -(13,1,1) = {" -Xx -re -HU -aa -HU -aa -bg -Fg -Yh -Rk -Ni -WG -Jf -Tu -gG -RX -If -Is -uj -re -HU -aa -HU -YZ -Xx -"} -(14,1,1) = {" -Xx -re -HU -aa -bg -eL -uj -WJ -WJ -WJ -WJ -WJ -aq -NU -WJ -WJ -WJ -WJ -uj -xK -bg -dx -HU -YZ -Xx -"} -(15,1,1) = {" -Xx -re -HU -YZ -QE -QE -QE -QE -PY -ed -tO -QE -eu -Sk -Kg -Kg -Kg -Kg -Kg -Kg -Kg -re -HU -YZ -Xx -"} -(16,1,1) = {" -Xx -re -HU -YZ -QE -TV -ke -DK -KS -hP -sj -QE -wq -Ly -Kg -Kg -vh -Ky -nV -Lh -Kg -re -HU -YZ -Xx -"} -(17,1,1) = {" -Xx -iu -ZW -bP -QE -fs -Zf -tc -HG -MV -cI -QE -jr -Jz -Kg -Kg -Hc -Qf -lN -MN -Kg -iu -ZW -bP -Xx -"} -(18,1,1) = {" -Ms -QE -QE -QE -gj -QE -QE -fY -QE -QE -QE -QE -MH -Hk -Kg -Kg -Kg -Kg -eb -Kg -Kg -Kg -Kg -sY -cv -"} -(19,1,1) = {" -lV -QE -kQ -Du -gj -Ej -Cd -Uu -DK -DK -DK -iG -Md -NW -DD -oI -am -HC -vk -mR -Kg -Vi -ni -sY -xH -"} -(20,1,1) = {" -Ms -QE -Lg -bz -gj -nz -ef -AP -hK -IV -mn -ib -nq -SS -RE -Wo -ME -vH -hn -ol -ej -Ak -zJ -PQ -Gd -"} -(21,1,1) = {" -Ms -QE -Lg -Xl -ZS -qt -Fv -Xj -Uu -pt -QE -QE -HV -Sk -Kg -Kg -lC -NB -ij -hI -Kg -Kg -Kg -sY -cv -"} -(22,1,1) = {" -Ms -QE -tI -nD -gj -Pj -zM -zM -nS -Ku -QE -QE -Yp -Dr -Kg -Kg -it -bt -bt -rQ -Kg -Kg -Kg -xH -cv -"} -(23,1,1) = {" -lV -QE -TX -mz -gj -lo -FF -cw -OJ -YW -QE -QE -eu -Hp -Kg -Kg -gi -ty -ty -dd -Kg -Kg -Kg -cv -cv -"} -(24,1,1) = {" -Ms -QE -QE -QE -QE -QE -QE -QE -QE -QE -QE -QE -bc -Um -TS -TS -TS -TS -TS -TS -TS -TS -TS -cv -cv -"} -(25,1,1) = {" -Ms -Ms -TS -As -zR -Cv -Gv -Sp -ob -Ln -PL -rw -Xi -Tl -rw -PL -Cv -Sp -Gv -PL -Tw -As -TS -cv -cv -"} -(26,1,1) = {" -Ms -lV -TS -VX -jA -od -dU -od -od -od -od -od -zq -od -od -od -qf -od -dU -od -do -ow -TS -xH -cv -"} -(27,1,1) = {" -Ms -Ms -MQ -LP -LP -LP -yC -LP -LP -LP -MQ -OI -Vq -OI -LW -LW -LW -LW -dc -LW -LW -LW -LW -cv -cv -"} -(28,1,1) = {" -Ms -Ms -MQ -Rr -Yi -pO -CL -Ez -yW -tU -wD -pH -fH -gu -LW -UR -ln -vw -Ll -LW -EE -sp -LW -cv -cv -"} -(29,1,1) = {" -Ms -Ms -MQ -JC -Yi -Mh -yt -yh -Yi -Jc -wD -pH -fH -pq -LW -RN -mZ -jl -EH -LW -Cz -mP -LW -cv -cv -"} -(30,1,1) = {" -Ms -lV -MQ -VL -aW -Mh -xU -CX -rV -CF -KC -zd -lO -zd -Mf -vW -vW -Sd -Mx -LW -LW -uy -LW -xH -cv -"} -(31,1,1) = {" -Ms -Ms -MQ -Vf -Yi -Mh -Ra -yh -bV -Ul -wD -pH -fH -jf -wg -SL -pB -pB -Di -fk -fk -nW -LW -cv -cv -"} -(32,1,1) = {" -Ms -Ms -MQ -jx -rz -tM -NR -ix -nf -LJ -wD -pH -fH -jf -LW -RA -Po -CB -xg -qF -Po -bq -LW -cv -cv -"} -(33,1,1) = {" -Ms -Ms -MQ -MQ -MQ -MQ -yC -MQ -MQ -MQ -MQ -wm -Ux -Zk -LW -LW -LW -LW -LW -LW -LW -LW -LW -cv -cv -"} -(34,1,1) = {" -Ms -Ms -rt -cY -xs -oM -QS -li -DX -ev -za -qR -fH -Rd -Yd -Gl -Yb -rS -xl -fJ -vy -fJ -Yd -cv -cv -"} -(35,1,1) = {" -Ms -lV -rt -IY -Fj -Fj -cd -Fj -eW -hh -za -pH -fH -pq -Yd -Qp -pc -fJ -fJ -fJ -fJ -fJ -Yd -xH -cv -"} -(36,1,1) = {" -Ms -Ms -rt -oH -Fj -Eu -oM -qB -iR -bl -lx -Bm -lj -bJ -Eq -an -NO -hF -fJ -Yd -Yd -fi -Yd -cv -cv -"} -(37,1,1) = {" -Ms -Ms -rt -Yt -Fj -SB -VC -ns -uq -Fj -za -rd -Ze -zG -Yd -Gk -qn -qX -Hu -Yd -gn -rO -Yd -cv -cv -"} -(38,1,1) = {" -Ms -Ms -rt -YJ -Vs -dG -oF -tP -dz -nb -za -Lv -jn -ue -Yd -bQ -LA -Ft -LB -Yd -ak -Hd -Yd -cv -cv -"} -(39,1,1) = {" -Ms -Ms -rt -rt -rt -rt -rt -rt -rt -rt -rt -TF -TF -TF -Yd -Yd -Yd -Yd -Yd -Yd -Yd -Yd -Yd -cv -cv -"} -(40,1,1) = {" -Ms -Ms -Ms -Ms -Ms -oU -Ms -Ms -Ms -Ms -oU -Ms -cv -cv -AE -cv -cv -cv -cv -AE -cv -cv -cv -cv -cv -"} diff --git a/maps/random_ruins/exoplanet_ruins/oldlab2/oldlab2.dm b/maps/random_ruins/exoplanet_ruins/oldlab2/oldlab2.dm deleted file mode 100644 index 141757d407e35..0000000000000 --- a/maps/random_ruins/exoplanet_ruins/oldlab2/oldlab2.dm +++ /dev/null @@ -1,109 +0,0 @@ - -/datum/map_template/ruin/exoplanet/oldlab2 - name = "Old Lab 2" - id = "exoplanet_oldlab2" - description = "another abandoned lab" - suffixes = list("oldlab2/oldlab2.dmm") - spawn_cost = 1 - template_flags = TEMPLATE_FLAG_CLEAR_CONTENTS | TEMPLATE_FLAG_NO_RUINS - ruin_tags = RUIN_HUMAN - - // Areas // - -/area/map_template/oldlab2 - -/area/map_template/oldlab2/powerandatmos - name = "\improper Power and Atmos" - icon_state = "solar" - -/area/map_template/oldlab2/hall - name = "\improper Main Hall and Storage" - icon_state = "processing" - -/area/map_template/oldlab2/recandlockers - name = "\improper Recreational Hall" - icon_state = "processing" - -/area/map_template/oldlab2/chem - name = "\improper Chemistry" - icon_state = "chemistry" - -/area/map_template/oldlab2/medical - name = "\improper Medical" - icon_state = "surgery" - -/area/map_template/oldlab2/Engineering - name = "\improper Engineering" - icon_state = "airlock" - -/area/map_template/oldlab2/Airlock - name = "\improper Airlock" - icon_state = "airlock" - -/area/map_template/oldlab2/living - name = "\improper Living Quarters" - icon_state = "surgery" - -/area/map_template/oldlab2/living2 - name = "\improper Living Quarters" - icon_state = "surgery" - -/area/map_template/oldlab2/living3 - name = "\improper Living Quarters" - icon_state = "surgery" - -/area/map_template/oldlab2/living4 - name = "\improper Living Quarters" - icon_state = "surgery" - -/area/map_template/oldlab2/living5 - name = "\improper Living Quarters" - icon_state = "surgery" - -/area/map_template/oldlab2/living6 - name = "\improper Living Quarters" - icon_state = "surgery" - -/area/map_template/oldlab2/cso - name = "\improper CSO Office" - icon_state = "surgery" - -/area/map_template/oldlab2/office - name = "\improper Office" - icon_state = "surgery" - -/area/map_template/oldlab2/mess - name = "\improper Mess Hall" - icon_state = "surgery" - -/area/map_template/oldlab2/bathroom - name = "\improper Bathroom" - icon_state = "surgery" - -/area/map_template/oldlab2/server - name = "\improper Archives" - icon_state = "surgery" - -/area/map_template/oldlab2/fixedsecurity - name = "\improper Security Office" - icon_state = "surgery" - -/area/map_template/oldlab2/test1 - name = "\improper Testing Lab" - icon_state = "surgery" - -/area/map_template/oldlab2/test2 - name = "\improper Special Testing Lab" - icon_state = "surgery" - -/area/map_template/oldlab2/mess - name = "\improper Mess Hall" - icon_state = "surgery" - -/area/map_template/oldlab2/engineerhall - name = "\improper Engineering Hall" - icon_state = "surgery" - -/area/map_template/oldlab2/lab - name = "\improper Materials Lab" - icon_state = "surgery" \ No newline at end of file diff --git a/maps/random_ruins/exoplanet_ruins/oldlab2/oldlab2.dmm b/maps/random_ruins/exoplanet_ruins/oldlab2/oldlab2.dmm deleted file mode 100644 index 448158e9312ec..0000000000000 --- a/maps/random_ruins/exoplanet_ruins/oldlab2/oldlab2.dmm +++ /dev/null @@ -1,12447 +0,0 @@ -//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE -"aa" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/oldlab2/powerandatmos) -"ac" = ( -/obj/effect/floor_decal/corner/blue/diagonal{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 4 - }, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/mess) -"ag" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/chem) -"ak" = ( -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/turf/simulated/wall/titanium, -/area/map_template/oldlab2/powerandatmos) -"ao" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 4 - }, -/obj/machinery/light/small{ - dir = 1 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/oldlab2/test2) -"aB" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/door/firedoor, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/door/airlock/civilian{ - name = "Maintenance" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/oldlab2/server) -"aC" = ( -/obj/item/device/radio/intercom{ - dir = 8; - pixel_x = 22; - pixel_y = 4 - }, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 8 - }, -/turf/simulated/floor/tiled/dark, -/area/map_template/oldlab2/recandlockers) -"aH" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/hall) -"aK" = ( -/obj/effect/floor_decal/corner/blue/diagonal{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/mess) -"aL" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 8 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/oldlab2/engineerhall) -"aR" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/wood/walnut, -/area/map_template/oldlab2/recandlockers) -"aS" = ( -/obj/structure/table/rack, -/obj/machinery/light, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 1 - }, -/turf/simulated/floor/tiled/dark, -/area/map_template/oldlab2/fixedsecurity) -"aU" = ( -/obj/machinery/atmospherics/pipe/simple/visible{ - dir = 4 - }, -/obj/machinery/door/airlock/external/glass{ - dir = 4; - frequency = 1379; - id_tag = "oldlab_interior"; - locked = 1; - name = "Lab Interior Airlock" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/oldlab2/Airlock) -"aW" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/table/standard, -/obj/machinery/microscope{ - pixel_x = -8 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/chem) -"bb" = ( -/obj/structure/filingcabinet/filingcabinet{ - pixel_x = -10 - }, -/obj/structure/filingcabinet/filingcabinet, -/obj/structure/filingcabinet/filingcabinet{ - pixel_x = 20 - }, -/obj/structure/filingcabinet/filingcabinet{ - pixel_x = 10 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/medical) -"bd" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/light/small{ - dir = 8 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/server) -"bf" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/effect/floor_decal/industrial/warning, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/oldlab2/lab) -"bg" = ( -/obj/structure/closet/emcloset, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled/dark, -/area/map_template/oldlab2/recandlockers) -"bk" = ( -/obj/structure/table/steel_reinforced, -/obj/item/reagent_containers/food/drinks/glass2/coffeecup/SCG{ - pixel_x = 7; - pixel_y = 5 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/cso) -"bm" = ( -/obj/item/device/radio/intercom{ - dir = 1; - pixel_y = -28 - }, -/obj/machinery/light, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/cso) -"bq" = ( -/obj/structure/flora/pottedplant/smelly, -/turf/simulated/floor/tiled/dark, -/area/map_template/oldlab2/living) -"bx" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 1 - }, -/obj/structure/cable/yellow{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/turf/simulated/floor/tiled/dark, -/area/map_template/oldlab2/fixedsecurity) -"bz" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 8 - }, -/turf/simulated/floor/reinforced, -/area/map_template/oldlab2/test1) -"bA" = ( -/obj/structure/bed/padded, -/obj/item/bedsheet/brown, -/turf/simulated/floor/tiled/dark, -/area/map_template/oldlab2/living4) -"bD" = ( -/turf/simulated/wall/titanium, -/area/map_template/oldlab2/living2) -"bF" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/table/standard, -/obj/machinery/reagent_temperature{ - pixel_y = 5 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/chem) -"bG" = ( -/obj/structure/table/rack{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark, -/area/map_template/oldlab2/lab) -"bH" = ( -/obj/effect/floor_decal/corner/grey/diagonal{ - dir = 4 - }, -/obj/structure/hygiene/drain, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/mess) -"bM" = ( -/obj/machinery/mining/brace{ - dir = 8 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/oldlab2/engineerhall) -"bO" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, -/turf/simulated/floor/wood/walnut, -/area/map_template/oldlab2/recandlockers) -"bR" = ( -/obj/machinery/door/airlock/civilian{ - name = "Laundry" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/door/firedoor, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/recandlockers) -"bS" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 4 - }, -/obj/effect/floor_decal/corner/red{ - dir = 9 - }, -/obj/machinery/light{ - dir = 8 - }, -/turf/simulated/floor/tiled/dark, -/area/map_template/oldlab2/fixedsecurity) -"bT" = ( -/obj/machinery/atmospherics/binary/pump{ - dir = 1 - }, -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/test2) -"ca" = ( -/obj/item/storage/firstaid/empty, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/medical) -"cb" = ( -/obj/machinery/light, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/oldlab2/engineerhall) -"ch" = ( -/obj/structure/bed/padded, -/obj/item/bedsheet/brown, -/turf/simulated/floor/tiled/dark, -/area/map_template/oldlab2/living3) -"ck" = ( -/obj/structure/bed/padded, -/obj/item/bedsheet/rd, -/obj/machinery/light, -/turf/simulated/floor/tiled/dark, -/area/map_template/oldlab2/living6) -"cl" = ( -/obj/machinery/atmospherics/unary/vent_pump/on, -/obj/structure/table/standard, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/hall) -"cm" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/oldlab2/hall) -"co" = ( -/obj/structure/coatrack, -/turf/simulated/floor/tiled/dark, -/area/map_template/oldlab2/living2) -"cq" = ( -/obj/structure/table/woodentable, -/obj/item/reagent_containers/food/drinks/glass2/coffeecup/SCG{ - pixel_x = 7; - pixel_y = 5 - }, -/obj/item/reagent_containers/food/drinks/glass2/coffeecup/SCG{ - pixel_x = -1; - pixel_y = 1 - }, -/obj/item/reagent_containers/food/drinks/glass2/coffeecup/SCG{ - pixel_x = -5; - pixel_y = 9 - }, -/turf/simulated/floor/carpet, -/area/map_template/oldlab2/recandlockers) -"cs" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/tiled/freezer, -/area/map_template/oldlab2/mess) -"cu" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/effect/floor_decal/corner/research{ - dir = 10 - }, -/obj/effect/floor_decal/corner/research{ - dir = 5 - }, -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/hall) -"cv" = ( -/obj/effect/floor_decal/corner/grey/diagonal{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/mess) -"cy" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/door/firedoor, -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/door/airlock/civilian, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/oldlab2/living4) -"cB" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/test1) -"cE" = ( -/obj/machinery/light/small{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/oldlab2/server) -"cL" = ( -/obj/machinery/computer/modular/preset/medical{ - dir = 8 - }, -/obj/machinery/alarm{ - dir = 8; - pixel_x = 24 - }, -/obj/machinery/light{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/lab) -"cN" = ( -/obj/effect/floor_decal/corner/grey/diagonal{ - dir = 4 - }, -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/mess) -"cO" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 8 - }, -/obj/machinery/firealarm{ - dir = 4; - pixel_x = 21 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/medical) -"cP" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/oldlab2/lab) -"cR" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 1 - }, -/obj/effect/floor_decal/corner/research{ - dir = 6 - }, -/obj/structure/anomaly_container, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/test1) -"cS" = ( -/obj/machinery/disposal, -/obj/effect/floor_decal/industrial/hatch/yellow, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/lab) -"cT" = ( -/obj/effect/floor_decal/corner/grey/diagonal{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/obj/machinery/light/spot{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/mess) -"cW" = ( -/obj/structure/table/standard, -/obj/machinery/artifact_analyser{ - pixel_y = 10 - }, -/obj/effect/floor_decal/industrial/hatch/yellow, -/obj/machinery/light{ - dir = 1 - }, -/turf/simulated/floor/tiled/dark, -/area/map_template/oldlab2/lab) -"cX" = ( -/obj/structure/stasis_cage, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/test1) -"cY" = ( -/obj/effect/floor_decal/corner/research{ - dir = 9 - }, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/effect/floor_decal/corner/research{ - dir = 6 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/lab) -"da" = ( -/obj/machinery/space_heater, -/obj/structure/fireaxecabinet{ - pixel_x = -32 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/oldlab2/Engineering) -"dg" = ( -/obj/structure/flora/pottedplant/tropical, -/turf/simulated/floor/tiled/dark, -/area/map_template/oldlab2/living5) -"dj" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 1 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/oldlab2/engineerhall) -"dp" = ( -/turf/simulated/wall/r_wall, -/area/map_template/oldlab2/test1) -"dq" = ( -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 10 - }, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/medical) -"dr" = ( -/obj/structure/extinguisher_cabinet{ - pixel_x = 32 - }, -/obj/structure/table/steel_reinforced, -/obj/random/maintenance/clean, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 8 - }, -/turf/simulated/floor/tiled/dark, -/area/map_template/oldlab2/recandlockers) -"dw" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/oldlab2/engineerhall) -"dz" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/effect/floor_decal/corner/paleblue{ - dir = 6 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/medical) -"dC" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/effect/catwalk_plated, -/turf/simulated/floor/plating, -/area/map_template/oldlab2/Engineering) -"dD" = ( -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/structure/closet/crate/secure/biohazard/alt, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/oldlab2/server) -"dH" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 8 - }, -/obj/machinery/alarm{ - dir = 8; - pixel_x = 24 - }, -/obj/machinery/light{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/lab) -"dI" = ( -/obj/machinery/light, -/obj/machinery/atmospherics/unary/vent_pump/high_volume/airlock{ - dir = 1; - id_tag = "oldlab_pump" - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/oldlab2/Airlock) -"dJ" = ( -/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply, -/obj/effect/catwalk_plated, -/turf/simulated/floor/plating, -/area/map_template/oldlab2/powerandatmos) -"dN" = ( -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply, -/obj/effect/floor_decal/corner/paleblue{ - dir = 9 - }, -/obj/effect/floor_decal/corner/paleblue{ - dir = 6 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/medical) -"dQ" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/civilian{ - name = "Biohazard equipment" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/oldlab2/recandlockers) -"dR" = ( -/obj/machinery/atmospherics/pipe/simple/visible/red{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/test2) -"dS" = ( -/obj/structure/table/gamblingtable, -/obj/effect/floor_decal/spline/fancy/wood{ - dir = 8 - }, -/obj/effect/floor_decal/spline/fancy/wood{ - dir = 4 - }, -/obj/effect/floor_decal/spline/fancy/wood{ - dir = 1 - }, -/turf/simulated/floor/carpet, -/area/map_template/oldlab2/recandlockers) -"dT" = ( -/obj/machinery/smartfridge/secure/medbay{ - req_access = list(list("ACCESS_CHEMISTRY","ACCESS_MEDICAL_EQUIP")) - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/medical) -"dX" = ( -/obj/machinery/light{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/oldlab2/engineerhall) -"dY" = ( -/obj/effect/floor_decal/corner/pink{ - dir = 9 - }, -/obj/effect/floor_decal/corner/pink{ - dir = 5 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/medical) -"dZ" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/door/airlock/civilian{ - name = "Security" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/oldlab2/fixedsecurity) -"ea" = ( -/obj/effect/floor_decal/corner/blue/diagonal{ - dir = 4 - }, -/obj/structure/bed/chair{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/mess) -"eb" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/item/storage/toolbox, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/oldlab2/Engineering) -"ec" = ( -/obj/machinery/atmospherics/pipe/manifold/visible/red{ - dir = 1 - }, -/obj/machinery/meter, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/test2) -"ee" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 1; - icon_state = "warning" - }, -/turf/simulated/floor/tiled/dark, -/area/map_template/oldlab2/lab) -"ef" = ( -/obj/effect/floor_decal/corner/research{ - dir = 10 - }, -/obj/structure/cable/yellow{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 1 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/test1) -"el" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 1 - }, -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/medical) -"en" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable/yellow{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/oldlab2/server) -"eo" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/effect/catwalk_plated, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/plating, -/area/map_template/oldlab2/Engineering) -"ep" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/firealarm{ - dir = 8; - pixel_x = -24 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/office) -"er" = ( -/obj/machinery/door/airlock/external/glass{ - dir = 4; - frequency = 1379; - id_tag = "oldlab_interior"; - locked = 1; - name = "Lab Interior Airlock" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/oldlab2/Airlock) -"et" = ( -/obj/effect/floor_decal/industrial/warning, -/obj/machinery/robotics_fabricator{ - pixel_y = 12 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/oldlab2/lab) -"eu" = ( -/obj/structure/bed/chair/comfy/brown, -/obj/machinery/light{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/wood/walnut, -/area/map_template/oldlab2/recandlockers) -"ew" = ( -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/light/small{ - dir = 1 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/oldlab2/hall) -"ex" = ( -/obj/item/device/radio/intercom{ - dir = 1; - pixel_y = -28 - }, -/obj/machinery/light, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 1 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/hall) -"ey" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 1; - icon_state = "warning" - }, -/obj/machinery/atmospherics/pipe/simple/visible{ - dir = 5 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/test2) -"eA" = ( -/obj/effect/floor_decal/corner/red{ - dir = 6 - }, -/obj/structure/cable/yellow{ - d2 = 2; - icon_state = "0-2" - }, -/obj/machinery/power/apc{ - dir = 1; - name = "north bump"; - pixel_y = 24 - }, -/turf/simulated/floor/tiled/dark, -/area/map_template/oldlab2/fixedsecurity) -"eE" = ( -/obj/machinery/door/firedoor, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/oldlab2/hall) -"eL" = ( -/obj/machinery/fabricator, -/obj/effect/floor_decal/industrial/hatch/yellow, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/oldlab2/lab) -"eQ" = ( -/obj/machinery/chem_master/condimaster{ - name = "CondiMaster Neo" - }, -/turf/simulated/floor/tiled/freezer, -/area/map_template/oldlab2/mess) -"eR" = ( -/obj/structure/bed/chair/office/light{ - dir = 1 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/office) -"eS" = ( -/obj/effect/floor_decal/corner/grey/diagonal{ - dir = 4 - }, -/obj/structure/hygiene/sink/kitchen{ - pixel_y = 28 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/mess) -"eT" = ( -/turf/simulated/wall/titanium, -/area/map_template/oldlab2/chem) -"eV" = ( -/obj/machinery/light/small, -/obj/machinery/r_n_d/server, -/turf/simulated/floor/bluegrid, -/area/map_template/oldlab2/server) -"eX" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/effect/floor_decal/corner/research{ - dir = 9 - }, -/obj/effect/floor_decal/corner/research{ - dir = 4 - }, -/obj/effect/floor_decal/corner/research, -/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/simulated/floor/tiled/white, -/area/map_template/oldlab2/lab) -"eY" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 1 - }, -/obj/random/junk, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/oldlab2/engineerhall) -"eZ" = ( -/obj/machinery/alarm{ - dir = 4; - pixel_x = -23 - }, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark, -/area/map_template/oldlab2/recandlockers) -"fc" = ( -/obj/effect/wallframe_spawn/reinforced_phoron, -/obj/machinery/atmospherics/pipe/simple/visible, -/obj/machinery/door/blast/regular{ - icon_state = "pdoor0"; - id_tag = "testlab3" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/oldlab2/test2) -"fd" = ( -/obj/effect/floor_decal/corner/blue/diagonal{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/mess) -"fh" = ( -/obj/structure/table/steel, -/obj/structure/bedsheetbin, -/turf/simulated/floor/tiled/freezer, -/area/map_template/oldlab2/recandlockers) -"fi" = ( -/obj/structure/table/rack, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 1 - }, -/obj/structure/fireaxecabinet{ - pixel_y = -32 - }, -/obj/random/firstaid, -/obj/random/firstaid, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/oldlab2/server) -"fl" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/effect/floor_decal/corner/research{ - dir = 9 - }, -/obj/effect/floor_decal/corner/research{ - dir = 6 - }, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/chem) -"fm" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 1 - }, -/obj/structure/window/reinforced{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark, -/area/map_template/oldlab2/lab) -"fn" = ( -/obj/structure/bed/padded, -/obj/item/bedsheet/yellow, -/turf/simulated/floor/tiled/dark, -/area/map_template/oldlab2/living6) -"fr" = ( -/obj/structure/filingcabinet/filingcabinet{ - pixel_x = -2 - }, -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/office) -"fs" = ( -/obj/effect/floor_decal/corner/grey/diagonal{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/mess) -"ft" = ( -/obj/machinery/mining/drill, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/oldlab2/engineerhall) -"fv" = ( -/obj/machinery/suit_storage_unit/science, -/obj/machinery/light, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/oldlab2/Airlock) -"fy" = ( -/obj/effect/floor_decal/corner/blue/diagonal{ - dir = 4 - }, -/obj/item/device/radio/intercom{ - dir = 1; - pixel_y = -28 - }, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 1 - }, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/mess) -"fA" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/light{ - dir = 8 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/medical) -"fB" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 1; - icon_state = "warning" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark, -/area/map_template/oldlab2/lab) -"fG" = ( -/obj/effect/floor_decal/corner/grey/diagonal{ - dir = 4 - }, -/obj/machinery/light/spot{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/mess) -"fI" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/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/simulated/floor/tiled/dark, -/area/map_template/oldlab2/recandlockers) -"fJ" = ( -/obj/structure/hygiene/shower{ - dir = 4 - }, -/turf/simulated/floor/tiled/freezer, -/area/map_template/oldlab2/bathroom) -"fK" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/dark, -/area/map_template/oldlab2/living) -"fL" = ( -/obj/structure/table/gamblingtable, -/obj/effect/floor_decal/spline/fancy/wood{ - dir = 8 - }, -/obj/effect/floor_decal/spline/fancy/wood{ - dir = 4 - }, -/obj/effect/floor_decal/spline/fancy/wood, -/turf/simulated/floor/carpet, -/area/map_template/oldlab2/recandlockers) -"fR" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/door/firedoor, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/door/airlock/civilian{ - name = "Engineering" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/oldlab2/Engineering) -"gb" = ( -/turf/simulated/wall/titanium, -/area/map_template/oldlab2/Airlock) -"gf" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/test1) -"gg" = ( -/turf/simulated/wall/titanium, -/area/map_template/oldlab2/recandlockers) -"gh" = ( -/obj/effect/catwalk_plated, -/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply, -/turf/simulated/floor/plating, -/area/map_template/oldlab2/powerandatmos) -"gi" = ( -/obj/structure/extinguisher_cabinet{ - pixel_x = -32 - }, -/obj/structure/table/steel_reinforced, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark, -/area/map_template/oldlab2/recandlockers) -"gj" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 4; - level = 2 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/oldlab2/server) -"gu" = ( -/obj/machinery/vending/robotics{ - pixel_x = -4; - pixel_y = 12 - }, -/obj/effect/floor_decal/industrial/warning, -/obj/effect/floor_decal/industrial/warning{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/oldlab2/lab) -"gw" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/door/firedoor, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/door/airlock/glass/medical{ - name = "Infirmary" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/oldlab2/medical) -"gx" = ( -/obj/machinery/computer/modular/preset/medical, -/obj/machinery/light{ - dir = 1 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/office) -"gC" = ( -/obj/structure/largecrate, -/turf/simulated/floor/reinforced/airless, -/area/map_template/oldlab2/Airlock) -"gG" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/effect/floor_decal/corner/research{ - dir = 9 - }, -/obj/effect/floor_decal/corner/research{ - dir = 4 - }, -/obj/effect/floor_decal/corner/research, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/lab) -"gJ" = ( -/obj/machinery/computer/modular/preset/engineering{ - dir = 8; - icon_state = "console" - }, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 8 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/oldlab2/Engineering) -"gK" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 8 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/oldlab2/lab) -"gS" = ( -/obj/effect/floor_decal/corner/blue/diagonal{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/structure/cable/yellow{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/mess) -"gU" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 1 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/lab) -"gZ" = ( -/obj/effect/floor_decal/corner/red{ - dir = 9 - }, -/obj/machinery/alarm{ - dir = 4; - pixel_x = -22 - }, -/turf/simulated/floor/tiled/dark, -/area/map_template/oldlab2/fixedsecurity) -"hd" = ( -/turf/simulated/floor/tiled/techfloor, -/area/map_template/oldlab2/server) -"he" = ( -/obj/structure/hygiene/drain, -/turf/simulated/floor/tiled/freezer, -/area/map_template/oldlab2/bathroom) -"hg" = ( -/obj/machinery/light{ - dir = 8 - }, -/turf/simulated/floor/tiled/dark, -/area/map_template/oldlab2/lab) -"hh" = ( -/obj/machinery/light{ - dir = 1 - }, -/obj/machinery/firealarm{ - pixel_y = 24 - }, -/turf/simulated/floor/tiled/dark, -/area/map_template/oldlab2/recandlockers) -"hl" = ( -/obj/structure/closet/secure_closet/scientist, -/obj/machinery/light{ - dir = 8 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/recandlockers) -"hm" = ( -/obj/structure/bed/chair/office/comfy/red{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/tiled/dark, -/area/map_template/oldlab2/fixedsecurity) -"hn" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/item/stool/padded, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/recandlockers) -"hp" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable/yellow{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/effect/catwalk_plated, -/turf/simulated/floor/plating, -/area/map_template/oldlab2/Airlock) -"hr" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/effect/catwalk_plated, -/turf/simulated/floor/plating, -/area/map_template/oldlab2/powerandatmos) -"hs" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, -/turf/simulated/floor/tiled/dark, -/area/map_template/oldlab2/recandlockers) -"hw" = ( -/obj/structure/closet/emcloset, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/oldlab2/engineerhall) -"hC" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/tiled/dark, -/area/map_template/oldlab2/living) -"hD" = ( -/obj/structure/table/steel_reinforced, -/obj/effect/floor_decal/corner/blue/diagonal{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/mess) -"hE" = ( -/obj/structure/table/woodentable, -/obj/machinery/chemical_dispenser/bar_soft/full{ - pixel_y = 10 - }, -/turf/simulated/floor/carpet, -/area/map_template/oldlab2/recandlockers) -"hG" = ( -/obj/effect/floor_decal/spline/fancy/wood{ - dir = 8 - }, -/obj/structure/bed/chair/comfy/brown{ - dir = 4 - }, -/turf/simulated/floor/wood/walnut, -/area/map_template/oldlab2/recandlockers) -"hH" = ( -/obj/structure/extinguisher_cabinet{ - pixel_x = 32 - }, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 8 - }, -/obj/structure/table/standard, -/obj/item/device/integrated_circuit_printer, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/lab) -"hI" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 8 - }, -/turf/simulated/floor/tiled/dark, -/area/map_template/oldlab2/lab) -"hJ" = ( -/obj/structure/iv_drip, -/obj/machinery/power/apc{ - dir = 8; - name = "west bump"; - pixel_x = -24 - }, -/obj/structure/cable/yellow{ - d2 = 4; - icon_state = "0-4" - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/medical) -"hL" = ( -/obj/structure/closet/l3closet/janitor, -/obj/machinery/light/small{ - dir = 1 - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/oldlab2/server) -"hM" = ( -/obj/effect/floor_decal/corner/grey/diagonal{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/mess) -"hP" = ( -/obj/effect/wallframe_spawn/reinforced, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/oldlab2/medical) -"hQ" = ( -/obj/structure/table/marble, -/obj/machinery/reagent_temperature{ - pixel_y = 5 - }, -/obj/effect/floor_decal/corner/grey/diagonal{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/mess) -"hR" = ( -/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers, -/obj/effect/floor_decal/corner/research, -/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/test1) -"hV" = ( -/obj/machinery/door/airlock/civilian{ - name = "Maintenance" - }, -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/oldlab2/server) -"hX" = ( -/obj/structure/table/standard, -/obj/item/clothing/accessory/stethoscope, -/obj/item/device/flashlight/pen{ - pixel_x = -4; - pixel_y = 6 - }, -/obj/machinery/atmospherics/unary/vent_pump/on, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/medical) -"id" = ( -/obj/effect/floor_decal/corner/grey/diagonal{ - dir = 4 - }, -/obj/machinery/alarm{ - dir = 4; - pixel_x = -22 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/mess) -"ih" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/oldlab2/server) -"ik" = ( -/obj/machinery/light, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/chem) -"ip" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 1 - }, -/obj/machinery/light, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/hall) -"iv" = ( -/obj/effect/floor_decal/corner/grey/diagonal{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 8 - }, -/obj/machinery/firealarm{ - dir = 8; - pixel_x = -24 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/mess) -"ix" = ( -/obj/machinery/alarm/cold{ - dir = 4; - pixel_x = -22 - }, -/turf/simulated/floor/tiled/freezer, -/area/map_template/oldlab2/mess) -"iC" = ( -/obj/machinery/light/spot{ - dir = 4 - }, -/obj/structure/largecrate, -/turf/simulated/floor/reinforced/airless, -/area/map_template/oldlab2/Airlock) -"iE" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark, -/area/map_template/oldlab2/lab) -"iH" = ( -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/hall) -"iI" = ( -/obj/structure/table/standard, -/obj/item/bodybag/rescue/loaded, -/obj/item/device/radio/intercom{ - dir = 4; - pixel_x = -21 - }, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 4; - level = 2 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/medical) -"iK" = ( -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 5 - }, -/obj/effect/floor_decal/corner/pink{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 - }, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/medical) -"iU" = ( -/obj/machinery/door/airlock/external/glass{ - frequency = 1379; - id_tag = "oldlab_exterior"; - locked = 1; - name = "Lab Exterior Airlock" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/oldlab2/Airlock) -"iZ" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 4 - }, -/turf/simulated/floor/reinforced, -/area/map_template/oldlab2/test1) -"jd" = ( -/obj/effect/floor_decal/corner/blue/diagonal{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/light/spot{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/mess) -"ji" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/oldlab2/server) -"jj" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/oldlab2/engineerhall) -"jr" = ( -/turf/simulated/floor/tiled/dark, -/area/map_template/oldlab2/recandlockers) -"jw" = ( -/obj/machinery/power/apc{ - name = "south bump"; - pixel_y = -24 - }, -/obj/structure/cable/yellow, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/cso) -"jx" = ( -/obj/machinery/artifact_scanpad, -/obj/effect/floor_decal/industrial/hatch/yellow, -/turf/simulated/floor/tiled/dark, -/area/map_template/oldlab2/lab) -"jA" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/alarm{ - dir = 1; - pixel_y = -25 - }, -/obj/random/junk, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/oldlab2/server) -"jB" = ( -/obj/structure/reagent_dispensers/fueltank, -/obj/machinery/light{ - dir = 1 - }, -/obj/effect/floor_decal/industrial/hatch/yellow, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/oldlab2/Airlock) -"jD" = ( -/obj/machinery/power/apc{ - dir = 8; - name = "west bump"; - pixel_x = -24 - }, -/obj/structure/cable/yellow{ - d2 = 4; - icon_state = "0-4" - }, -/turf/simulated/floor/tiled/dark, -/area/map_template/oldlab2/lab) -"jF" = ( -/obj/structure/table/woodentable, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/wood/walnut, -/area/map_template/oldlab2/recandlockers) -"jG" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 1 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/oldlab2/Airlock) -"jH" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/oldlab2/engineerhall) -"jI" = ( -/obj/structure/bed/roller/ironingboard, -/obj/item/ironingiron, -/turf/simulated/floor/tiled/freezer, -/area/map_template/oldlab2/recandlockers) -"jJ" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/table/standard, -/obj/machinery/reagent_temperature/cooler{ - pixel_y = 5 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/chem) -"jL" = ( -/obj/machinery/light{ - dir = 8 - }, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 4 - }, -/obj/structure/table/standard, -/obj/item/storage/box/beakers, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/chem) -"jT" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/bed/chair/office/light{ - dir = 1 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/oldlab2/Engineering) -"jV" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/firealarm{ - dir = 8; - pixel_x = -24 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/lab) -"jW" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 1 - }, -/obj/structure/table/rack, -/obj/machinery/light/small, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/oldlab2/server) -"jX" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 8 - }, -/obj/effect/catwalk_plated, -/turf/simulated/floor/plating, -/area/map_template/oldlab2/powerandatmos) -"jY" = ( -/obj/structure/sign/warning/nosmoking_burned{ - pixel_y = 32 - }, -/obj/structure/closet/secure_closet{ - name = "Security Equipment Locker"; - req_access = list("ACCESS_SECURITY") - }, -/obj/effect/floor_decal/industrial/outline/grey, -/obj/item/clothing/accessory/storage/bandolier/safari, -/turf/simulated/floor/tiled/dark, -/area/map_template/oldlab2/fixedsecurity) -"ka" = ( -/obj/item/device/radio/intercom{ - dir = 8; - pixel_x = 21 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/recandlockers) -"ke" = ( -/obj/effect/floor_decal/corner/grey/diagonal{ - dir = 4 - }, -/obj/structure/extinguisher_cabinet{ - pixel_x = 32 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/mess) -"kj" = ( -/obj/effect/floor_decal/corner/blue/diagonal{ - dir = 4 - }, -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/mess) -"km" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable/yellow{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/oldlab2/powerandatmos) -"kq" = ( -/turf/simulated/floor/reinforced, -/area/map_template/oldlab2/test2) -"ks" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 1; - icon_state = "warning" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/test1) -"ku" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/door/firedoor, -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/door/blast/regular{ - dir = 4; - icon_state = "pdoor0"; - id_tag = "securityairlockshutter" - }, -/obj/machinery/door/airlock/external/glass{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/oldlab2/Airlock) -"kz" = ( -/turf/simulated/floor/tiled/freezer, -/area/map_template/oldlab2/bathroom) -"kA" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/test1) -"kD" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/wood/walnut, -/area/map_template/oldlab2/recandlockers) -"kF" = ( -/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/dark, -/area/map_template/oldlab2/recandlockers) -"kL" = ( -/turf/simulated/wall/titanium, -/area/map_template/oldlab2/office) -"kO" = ( -/obj/machinery/door/firedoor, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/oldlab2/lab) -"kP" = ( -/obj/structure/stasis_cage, -/obj/machinery/light{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/oldlab2/engineerhall) -"kQ" = ( -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark, -/area/map_template/oldlab2/living6) -"kR" = ( -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/oldlab2/server) -"kT" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 1 - }, -/obj/machinery/light, -/obj/machinery/firealarm{ - dir = 1; - pixel_y = -24 - }, -/turf/simulated/floor/tiled/dark, -/area/map_template/oldlab2/living4) -"kW" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/effect/floor_decal/corner/research{ - dir = 6 - }, -/obj/effect/floor_decal/corner/research{ - dir = 9 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/hall) -"kX" = ( -/obj/effect/wallframe_spawn/reinforced_phoron, -/obj/machinery/door/blast/regular{ - icon_state = "pdoor0"; - id_tag = "testlab2" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/oldlab2/test1) -"kY" = ( -/obj/structure/bed/chair{ - dir = 1 - }, -/obj/machinery/light{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark, -/area/map_template/oldlab2/recandlockers) -"kZ" = ( -/obj/structure/bed/chair/office/light{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/cso) -"la" = ( -/obj/machinery/disposal, -/turf/simulated/floor/wood/walnut, -/area/map_template/oldlab2/recandlockers) -"lb" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/wood/walnut, -/area/map_template/oldlab2/recandlockers) -"ld" = ( -/obj/machinery/light{ - dir = 8 - }, -/obj/machinery/chem_master, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/chem) -"lf" = ( -/obj/structure/flora/pottedplant/largebush, -/obj/machinery/light_switch{ - pixel_x = 24; - pixel_y = -6 - }, -/turf/simulated/floor/tiled/dark, -/area/map_template/oldlab2/living3) -"lh" = ( -/obj/machinery/alarm{ - dir = 1; - pixel_y = -22 - }, -/obj/structure/table/woodentable, -/turf/simulated/floor/tiled/dark, -/area/map_template/oldlab2/living6) -"lj" = ( -/obj/structure/bed/chair/padded/yellow{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/oldlab2/Engineering) -"lk" = ( -/obj/effect/floor_decal/spline/fancy/wood{ - dir = 8 - }, -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/obj/machinery/firealarm{ - pixel_y = 24 - }, -/turf/simulated/floor/wood/walnut, -/area/map_template/oldlab2/recandlockers) -"ll" = ( -/obj/machinery/light{ - dir = 4 - }, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 8 - }, -/turf/simulated/floor/tiled/freezer, -/area/map_template/oldlab2/bathroom) -"lp" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/external/glass{ - dir = 4 - }, -/obj/machinery/door/blast/regular{ - dir = 4; - icon_state = "pdoor0"; - id_tag = "securityairlockshutter" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/oldlab2/Airlock) -"lq" = ( -/obj/machinery/washing_machine, -/turf/simulated/floor/tiled/freezer, -/area/map_template/oldlab2/recandlockers) -"lt" = ( -/obj/machinery/artifact, -/turf/simulated/floor/reinforced, -/area/map_template/oldlab2/test2) -"lu" = ( -/obj/machinery/portable_atmospherics/powered/pump/filled, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/oldlab2/powerandatmos) -"lv" = ( -/obj/random/vendor, -/turf/simulated/floor/wood/walnut, -/area/map_template/oldlab2/recandlockers) -"ly" = ( -/obj/effect/floor_decal/industrial/outline/grey, -/obj/structure/window/reinforced{ - dir = 8 - }, -/obj/machinery/portable_atmospherics/canister/nitrogen, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/oldlab2/engineerhall) -"lz" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/wood/walnut, -/area/map_template/oldlab2/recandlockers) -"lC" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 1; - icon_state = "warning" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/test1) -"lH" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/dark, -/area/map_template/oldlab2/living4) -"lK" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 1 - }, -/turf/simulated/floor/wood/walnut, -/area/map_template/oldlab2/recandlockers) -"lL" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/door/airlock/civilian{ - name = "Storage" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/oldlab2/test1) -"lN" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/obj/machinery/alarm{ - dir = 8; - pixel_x = 24 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/cso) -"lS" = ( -/obj/structure/reagent_dispensers/acid{ - density = 0; - pixel_x = 32 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/oldlab2/lab) -"lX" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/civilian{ - name = "Maintenance" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/oldlab2/server) -"mf" = ( -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/recandlockers) -"mg" = ( -/obj/structure/table/rack, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 1 - }, -/obj/item/storage/box/rxglasses, -/obj/random/firstaid, -/obj/random/firstaid, -/obj/item/defibrillator/compact, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/oldlab2/server) -"mh" = ( -/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/dark, -/area/map_template/oldlab2/recandlockers) -"mq" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - level = 2 - }, -/obj/structure/flora/pottedplant/tropical, -/turf/simulated/floor/tiled/dark, -/area/map_template/oldlab2/living6) -"mr" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 8; - icon_state = "warning" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/lab) -"mx" = ( -/obj/effect/floor_decal/corner/blue/diagonal{ - dir = 4 - }, -/obj/machinery/power/apc{ - dir = 8; - name = "west bump"; - pixel_x = -24 - }, -/obj/structure/cable/yellow{ - d2 = 4; - icon_state = "0-4" - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/mess) -"mB" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/door/firedoor, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/door/airlock/civilian{ - name = "Rec room" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/oldlab2/recandlockers) -"mC" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/tiled/freezer, -/area/map_template/oldlab2/bathroom) -"mD" = ( -/obj/machinery/constructable_frame/machine_frame, -/turf/simulated/floor/reinforced, -/area/map_template/oldlab2/test1) -"mE" = ( -/obj/machinery/atmospherics/pipe/simple/visible{ - dir = 6 - }, -/obj/machinery/meter, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/test2) -"mF" = ( -/obj/structure/table/steel_reinforced, -/obj/item/storage/firstaid/surgery{ - pixel_y = 5 - }, -/obj/effect/floor_decal/corner/pink{ - dir = 9 - }, -/obj/effect/floor_decal/corner/pink{ - dir = 10 - }, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/medical) -"mG" = ( -/turf/simulated/wall/titanium, -/area/map_template/oldlab2/mess) -"mH" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/effect/catwalk_plated, -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/plating, -/area/map_template/oldlab2/server) -"mR" = ( -/obj/machinery/light_switch{ - pixel_x = -24 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/office) -"nd" = ( -/obj/structure/table/steel, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/oldlab2/Engineering) -"nf" = ( -/obj/structure/table/woodentable, -/obj/machinery/atmospherics/unary/vent_pump/on{ - level = 2 - }, -/obj/random/maintenance/clean, -/obj/machinery/light{ - dir = 1 - }, -/turf/simulated/floor/tiled/dark, -/area/map_template/oldlab2/living4) -"nh" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/door/firedoor, -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/door/airlock/civilian{ - name = "Office" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/oldlab2/office) -"nj" = ( -/obj/structure/table/woodentable, -/obj/machinery/alarm{ - dir = 1; - pixel_y = -22 - }, -/turf/simulated/floor/tiled/dark, -/area/map_template/oldlab2/living3) -"nk" = ( -/obj/item/device/radio/intercom{ - dir = 1; - pixel_y = -28 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/chem) -"nn" = ( -/obj/effect/floor_decal/corner/grey/diagonal{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 8 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/mess) -"no" = ( -/obj/machinery/power/apc{ - dir = 8; - name = "west bump"; - pixel_x = -24 - }, -/obj/structure/cable/yellow{ - d2 = 4; - icon_state = "0-4" - }, -/obj/machinery/light/small{ - dir = 8 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/oldlab2/server) -"nr" = ( -/obj/machinery/light, -/obj/structure/bed/padded, -/obj/item/bedsheet/captain, -/turf/simulated/floor/tiled/dark, -/area/map_template/oldlab2/living5) -"ns" = ( -/obj/structure/hygiene/toilet{ - dir = 8 - }, -/obj/machinery/light/small{ - dir = 1 - }, -/turf/simulated/floor/tiled/freezer, -/area/map_template/oldlab2/bathroom) -"nu" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/obj/structure/cable/yellow{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/office) -"nw" = ( -/obj/machinery/floodlight, -/turf/simulated/floor/reinforced/airless, -/area/map_template/oldlab2/Airlock) -"nx" = ( -/turf/simulated/wall/titanium, -/area/map_template/oldlab2/hall) -"nC" = ( -/obj/effect/floor_decal/corner/paleblue{ - dir = 6 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/medical) -"nE" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/tiled/freezer, -/area/map_template/oldlab2/bathroom) -"nJ" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/recandlockers) -"nK" = ( -/obj/machinery/light{ - dir = 1 - }, -/obj/structure/filingcabinet/chestdrawer{ - pixel_x = -7 - }, -/obj/structure/filingcabinet/chestdrawer{ - pixel_x = 10 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/hall) -"nT" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 1 - }, -/obj/machinery/light/small, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/oldlab2/test1) -"nV" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 8 - }, -/obj/structure/closet/secure_closet/scientist, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/recandlockers) -"nW" = ( -/obj/machinery/computer/rdconsole/core{ - dir = 1 - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled/dark, -/area/map_template/oldlab2/lab) -"nX" = ( -/obj/structure/table/steel_reinforced, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 1 - }, -/obj/random/toolbox, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/oldlab2/powerandatmos) -"nZ" = ( -/obj/machinery/cooker/grill, -/obj/effect/floor_decal/corner/grey/diagonal{ - dir = 4 - }, -/obj/machinery/light{ - dir = 1 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/mess) -"oa" = ( -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark, -/area/map_template/oldlab2/living5) -"ob" = ( -/obj/structure/table/rack{ - dir = 4 - }, -/obj/item/clothing/suit/bio_suit/anomaly, -/obj/item/clothing/suit/bio_suit/anomaly, -/obj/item/clothing/head/bio_hood/anomaly, -/obj/item/clothing/head/bio_hood/anomaly, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/oldlab2/Airlock) -"oc" = ( -/obj/item/stock_parts/scanning_module, -/obj/item/stock_parts/manipulator, -/obj/item/stock_parts/manipulator, -/obj/item/reagent_containers/dropper{ - pixel_y = -4 - }, -/obj/structure/closet/crate/plastic, -/obj/random/powercell, -/obj/random/powercell, -/obj/random/powercell, -/obj/random/powercell, -/obj/item/device/robotanalyzer, -/obj/item/organ/internal/posibrain, -/obj/item/organ/internal/posibrain, -/obj/item/organ/internal/posibrain, -/obj/item/aicard, -/obj/item/clothing/gloves/insulated, -/obj/item/clothing/gloves/insulated, -/obj/item/device/multitool{ - pixel_x = 3 - }, -/obj/item/device/multitool{ - pixel_x = 3 - }, -/obj/item/storage/belt/utility/full, -/obj/item/storage/belt/utility/full, -/obj/item/clothing/glasses/welding, -/obj/item/clothing/head/welding{ - pixel_x = -3; - pixel_y = 5 - }, -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 8; - icon_state = "warningcorner" - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/oldlab2/lab) -"of" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 1 - }, -/obj/structure/closet/l3closet/security, -/obj/machinery/light, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled/dark, -/area/map_template/oldlab2/recandlockers) -"og" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/turf/simulated/floor/reinforced, -/area/map_template/oldlab2/test1) -"oh" = ( -/obj/effect/floor_decal/corner/research{ - dir = 9 - }, -/obj/effect/floor_decal/corner/research{ - dir = 6 - }, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/chem) -"oj" = ( -/obj/effect/floor_decal/corner/blue/diagonal{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/mess) -"om" = ( -/obj/structure/table/steel_reinforced, -/obj/effect/floor_decal/corner/red{ - dir = 6 - }, -/turf/simulated/floor/tiled/dark, -/area/map_template/oldlab2/fixedsecurity) -"oo" = ( -/obj/machinery/computer/modular/preset/medical, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/medical) -"op" = ( -/turf/simulated/floor/tiled/techfloor, -/area/map_template/oldlab2/engineerhall) -"oq" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/door/firedoor, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/door/airlock/civilian{ - name = "Engineering" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/oldlab2/hall) -"ot" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 1; - icon_state = "warning" - }, -/obj/machinery/atmospherics/pipe/simple/visible{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/test2) -"ov" = ( -/obj/effect/floor_decal/corner/blue/diagonal{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 8 - }, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/mess) -"ow" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/civilian{ - name = "Storage" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/oldlab2/hall) -"oz" = ( -/obj/structure/table/steel, -/obj/random/maintenance/clean, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/oldlab2/Engineering) -"oB" = ( -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/recandlockers) -"oF" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 8 - }, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/light/small{ - dir = 8 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/server) -"oJ" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/hall) -"oK" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/obj/structure/cable/yellow{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/test2) -"oM" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 1 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/oldlab2/Airlock) -"oN" = ( -/obj/structure/bed/chair, -/obj/machinery/light{ - dir = 8 - }, -/turf/simulated/floor/tiled/dark, -/area/map_template/oldlab2/recandlockers) -"oW" = ( -/turf/simulated/floor/tiled/techfloor, -/area/map_template/oldlab2/test1) -"oY" = ( -/obj/machinery/alarm{ - dir = 1; - pixel_y = -22 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/hall) -"pd" = ( -/obj/machinery/floodlight, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 8 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/oldlab2/engineerhall) -"pe" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/table/standard, -/obj/item/reagent_containers/glass/beaker/insulated/large, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/chem) -"pj" = ( -/obj/effect/floor_decal/corner/blue/diagonal{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/mess) -"pm" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/oldlab2/server) -"pp" = ( -/obj/structure/filingcabinet/filingcabinet{ - pixel_x = 10 - }, -/obj/structure/filingcabinet/filingcabinet, -/obj/structure/filingcabinet/filingcabinet{ - pixel_x = 20 - }, -/obj/machinery/atmospherics/unary/vent_pump/on, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/cso) -"pq" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/dark, -/area/map_template/oldlab2/living2) -"pr" = ( -/obj/structure/bed/padded, -/obj/item/bedsheet/rd, -/turf/simulated/floor/tiled/dark, -/area/map_template/oldlab2/living5) -"ps" = ( -/obj/machinery/atmospherics/valve, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/test2) -"pu" = ( -/obj/effect/floor_decal/corner/grey/diagonal{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/mess) -"pD" = ( -/obj/machinery/atmospherics/unary/vent_pump/on, -/obj/machinery/firealarm{ - pixel_y = 24 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/oldlab2/engineerhall) -"pF" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/oldlab2/Airlock) -"pI" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/effect/floor_decal/corner/research{ - dir = 9 - }, -/obj/machinery/light{ - dir = 8 - }, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/test1) -"pN" = ( -/obj/effect/floor_decal/corner/blue/diagonal{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/item/device/radio/intercom{ - dir = 8; - pixel_x = 21 - }, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/light/spot{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/mess) -"pT" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/dark, -/area/map_template/oldlab2/recandlockers) -"pV" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/test2) -"qc" = ( -/obj/structure/bed/padded, -/obj/item/bedsheet/blue, -/turf/simulated/floor/tiled/dark, -/area/map_template/oldlab2/living4) -"qg" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/effect/catwalk_plated, -/obj/machinery/light/small{ - dir = 1 - }, -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/plating, -/area/map_template/oldlab2/server) -"qk" = ( -/obj/structure/bed/chair, -/obj/machinery/light{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark, -/area/map_template/oldlab2/recandlockers) -"ql" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/body_scanconsole{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/effect/floor_decal/corner/paleblue{ - dir = 6 - }, -/obj/effect/floor_decal/corner/paleblue{ - dir = 9 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/medical) -"qm" = ( -/obj/structure/closet/secure_closet/chemical, -/obj/item/storage/box/pillbottles, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/chem) -"qo" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/effect/catwalk_plated, -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/plating, -/area/map_template/oldlab2/engineerhall) -"qq" = ( -/obj/effect/floor_decal/corner/grey/diagonal{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/light/spot{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/mess) -"qu" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/item/stool/padded, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/recandlockers) -"qv" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 8 - }, -/obj/structure/table/rack{ - dir = 4 - }, -/obj/item/inflatable_dispenser, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/oldlab2/powerandatmos) -"qx" = ( -/obj/structure/table/steel_reinforced, -/obj/random/medical, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/medical) -"qy" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/oldlab2/Airlock) -"qA" = ( -/obj/machinery/disposal, -/obj/effect/floor_decal/industrial/hatch/yellow, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/mess) -"qC" = ( -/obj/effect/floor_decal/industrial/warning/corner, -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/dark, -/area/map_template/oldlab2/lab) -"qG" = ( -/obj/machinery/light/small{ - dir = 8 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/oldlab2/server) -"qI" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/obj/structure/bed/roller, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/medical) -"qJ" = ( -/obj/machinery/light/spot, -/turf/simulated/floor/reinforced/airless, -/area/map_template/oldlab2/Airlock) -"qL" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply, -/turf/simulated/floor/wood/walnut, -/area/map_template/oldlab2/recandlockers) -"qN" = ( -/obj/machinery/atmospherics/pipe/manifold/visible{ - dir = 4 - }, -/obj/machinery/light{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/oldlab2/Airlock) -"qO" = ( -/turf/simulated/wall/titanium, -/area/map_template/oldlab2/bathroom) -"qQ" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 - }, -/obj/effect/floor_decal/corner/research{ - dir = 6 - }, -/obj/machinery/alarm{ - dir = 8; - pixel_x = 24 - }, -/obj/structure/anomaly_container, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/test1) -"qS" = ( -/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply, -/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/structure/cable/yellow{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/turf/simulated/floor/tiled/dark, -/area/map_template/oldlab2/recandlockers) -"qY" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/oldlab2/engineerhall) -"qZ" = ( -/obj/structure/table/marble, -/obj/effect/floor_decal/corner/grey/diagonal{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/mess) -"rb" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/turf/simulated/floor/tiled/dark, -/area/map_template/oldlab2/fixedsecurity) -"rd" = ( -/obj/machinery/sleeper{ - dir = 4 - }, -/obj/effect/floor_decal/corner/pink{ - dir = 9 - }, -/obj/effect/floor_decal/corner/pink{ - dir = 6 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/medical) -"rk" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 1 - }, -/turf/simulated/floor/tiled/freezer, -/area/map_template/oldlab2/recandlockers) -"rl" = ( -/obj/structure/table/steel_reinforced, -/obj/structure/flora/pottedplant/deskleaf{ - pixel_y = 5 - }, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 1 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/office) -"rm" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/effect/catwalk_plated, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/turf/simulated/floor/plating, -/area/map_template/oldlab2/Engineering) -"rn" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/effect/floor_decal/corner/research{ - dir = 10 - }, -/obj/effect/floor_decal/corner/research{ - dir = 5 - }, -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/hall) -"rp" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 1; - icon_state = "warning" - }, -/obj/machinery/button/blast_door{ - id_tag = "testlab2"; - name = "Test Lab 2 Shutters Control"; - pixel_y = 32 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/test1) -"rs" = ( -/obj/machinery/access_button{ - command = "cycle_exterior"; - frequency = 1379; - master_tag = "oldlab_airlock"; - name = "interior access button"; - pixel_x = 24; - pixel_y = -24 - }, -/turf/simulated/floor/reinforced/airless, -/area/map_template/oldlab2/Airlock) -"rt" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/effect/floor_decal/corner/paleblue{ - dir = 9 - }, -/obj/effect/floor_decal/corner/paleblue{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 8 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/medical) -"ru" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/effect/floor_decal/corner/research{ - dir = 10 - }, -/obj/machinery/light, -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/test1) -"rw" = ( -/obj/machinery/light{ - dir = 8 - }, -/turf/simulated/floor/tiled/freezer, -/area/map_template/oldlab2/bathroom) -"ry" = ( -/obj/effect/floor_decal/corner/red{ - dir = 9 - }, -/obj/effect/floor_decal/corner/red{ - dir = 5 - }, -/obj/structure/table/steel_reinforced, -/turf/simulated/floor/tiled/dark, -/area/map_template/oldlab2/fixedsecurity) -"rz" = ( -/obj/machinery/atmospherics/unary/vent_pump/high_volume/airlock{ - dir = 1; - id_tag = "oldlab_pump" - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/oldlab2/Airlock) -"rB" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/blast/regular{ - dir = 4; - icon_state = "pdoor0"; - id_tag = "speciallabblast" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/oldlab2/test2) -"rC" = ( -/obj/machinery/power/apc{ - dir = 1; - name = "north bump"; - pixel_y = 24; - req_access = list(list("ACCESS_ENGINE_EQUIP","ACCESS_ATMOS")) - }, -/obj/machinery/light{ - dir = 1 - }, -/obj/structure/cable/yellow{ - d2 = 2; - icon_state = "0-2" - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/oldlab2/engineerhall) -"rE" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/effect/floor_decal/corner/paleblue{ - dir = 9 - }, -/obj/effect/floor_decal/corner/paleblue{ - dir = 6 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/medical) -"rG" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/firealarm{ - dir = 1; - pixel_y = -24 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/recandlockers) -"rH" = ( -/obj/machinery/vending/cigarette, -/obj/effect/floor_decal/spline/fancy/wood{ - dir = 4 - }, -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/turf/simulated/floor/wood/walnut, -/area/map_template/oldlab2/recandlockers) -"rJ" = ( -/obj/structure/table/steel_reinforced, -/obj/effect/floor_decal/corner/red{ - dir = 10 - }, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 1 - }, -/turf/simulated/floor/tiled/dark, -/area/map_template/oldlab2/fixedsecurity) -"rK" = ( -/obj/structure/table/marble, -/obj/machinery/reagent_temperature/cooler{ - pixel_y = 5 - }, -/obj/effect/floor_decal/corner/grey/diagonal{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/mess) -"rL" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/blast/regular{ - dir = 4; - icon_state = "pdoor0"; - id_tag = "labentrance" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/oldlab2/test2) -"rP" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/door/firedoor, -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/door/blast/regular{ - dir = 4; - icon_state = "pdoor0"; - id_tag = "labentrance" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/oldlab2/test2{ - dir = 8 - }) -"rR" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/hygiene/drain, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/test1) -"rT" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/effect/catwalk_plated, -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/plating, -/area/map_template/oldlab2/server) -"rU" = ( -/obj/structure/table/rack{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/oldlab2/powerandatmos) -"rY" = ( -/turf/simulated/wall/titanium, -/area/map_template/oldlab2/Engineering) -"rZ" = ( -/turf/simulated/wall/titanium, -/area/map_template/oldlab2/medical) -"sb" = ( -/obj/structure/bed/padded, -/obj/structure/cable/yellow{ - d2 = 8; - icon_state = "0-8" - }, -/obj/machinery/power/apc{ - dir = 4; - name = "east bump"; - pixel_x = 24 - }, -/obj/item/bedsheet/captain, -/turf/simulated/floor/tiled/dark, -/area/map_template/oldlab2/living4) -"sd" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/obj/structure/fireaxecabinet{ - pixel_y = 32 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/oldlab2/hall) -"sj" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 1 - }, -/obj/machinery/light, -/obj/machinery/firealarm{ - dir = 1; - pixel_y = -24 - }, -/turf/simulated/floor/tiled/dark, -/area/map_template/oldlab2/living) -"sk" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 8 - }, -/obj/effect/catwalk_plated, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 8 - }, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/plating, -/area/map_template/oldlab2/Engineering) -"sn" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/obj/effect/floor_decal/industrial/outline/grey, -/obj/structure/closet/emcloset, -/turf/simulated/floor/tiled/dark, -/area/map_template/oldlab2/fixedsecurity) -"so" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/freezer, -/area/map_template/oldlab2/bathroom) -"sq" = ( -/obj/structure/hygiene/toilet{ - dir = 8 - }, -/turf/simulated/floor/tiled/freezer, -/area/map_template/oldlab2/bathroom) -"sr" = ( -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/simple/hidden/universal{ - dir = 4 - }, -/obj/machinery/door/blast/regular{ - dir = 4; - icon_state = "pdoor0"; - id_tag = "speciallabblast" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/oldlab2/test2) -"sw" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 1; - icon_state = "warning" - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/test1) -"sy" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/effect/floor_decal/corner/research{ - dir = 10 - }, -/obj/effect/floor_decal/corner/research{ - dir = 5 - }, -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/hall) -"sz" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/freezer, -/area/map_template/oldlab2/bathroom) -"sC" = ( -/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply, -/obj/effect/floor_decal/corner/research{ - dir = 10 - }, -/obj/effect/floor_decal/corner/research{ - dir = 5 - }, -/obj/structure/cable/yellow{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/hall) -"sH" = ( -/obj/machinery/atmospherics/pipe/simple/visible/universal{ - dir = 4 - }, -/obj/effect/catwalk_plated, -/turf/simulated/floor/plating, -/area/map_template/oldlab2/Airlock) -"sI" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 8 - }, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/medical) -"sJ" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/medical) -"sK" = ( -/obj/machinery/light{ - dir = 4 - }, -/turf/simulated/floor/reinforced, -/area/map_template/oldlab2/test2) -"sL" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/effect/catwalk_plated, -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply, -/turf/simulated/floor/plating, -/area/map_template/oldlab2/engineerhall) -"sM" = ( -/obj/machinery/power/apc{ - dir = 1; - name = "north bump"; - pixel_y = 24; - req_access = list(list("ACCESS_ENGINE_EQUIP","ACCESS_ATMOS")) - }, -/obj/machinery/light{ - dir = 1 - }, -/obj/structure/cable/yellow{ - d2 = 8; - icon_state = "0-8" - }, -/turf/simulated/floor/tiled/dark, -/area/map_template/oldlab2/recandlockers) -"sO" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/dark, -/area/map_template/oldlab2/recandlockers) -"tb" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/office) -"te" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/recandlockers) -"tf" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - level = 2 - }, -/obj/machinery/light{ - dir = 1 - }, -/turf/simulated/floor/tiled/dark, -/area/map_template/oldlab2/living2) -"tk" = ( -/obj/machinery/power/apc{ - dir = 1; - name = "north bump"; - pixel_y = 24; - req_access = list(list("ACCESS_ENGINE_EQUIP","ACCESS_ATMOS")) - }, -/obj/structure/cable/yellow{ - d2 = 8; - icon_state = "0-8" - }, -/turf/simulated/floor/tiled/freezer, -/area/map_template/oldlab2/bathroom) -"tm" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/obj/machinery/washing_machine, -/turf/simulated/floor/tiled/freezer, -/area/map_template/oldlab2/recandlockers) -"to" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/hall) -"tt" = ( -/obj/effect/floor_decal/corner/pink{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/medical) -"tv" = ( -/obj/structure/sign/warning/nosmoking_1{ - pixel_y = 32 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/hall) -"ty" = ( -/obj/effect/floor_decal/corner/blue/diagonal{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/obj/machinery/firealarm{ - dir = 4; - pixel_x = 21 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/mess) -"tz" = ( -/obj/machinery/computer/modular/preset/medical{ - dir = 8 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/chem) -"tE" = ( -/obj/machinery/atmospherics/pipe/manifold/visible, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/oldlab2/Airlock) -"tG" = ( -/obj/effect/floor_decal/industrial/outline/blue, -/obj/machinery/atmospherics/portables_connector{ - dir = 1 - }, -/obj/machinery/firealarm{ - dir = 1; - pixel_y = -26 - }, -/obj/machinery/button/blast_door{ - id_tag = "speciallabblast"; - name = "Special Test Lab Blast Doors"; - pixel_x = 32 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/test2) -"tH" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/civilian{ - name = "Atmos" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/oldlab2/powerandatmos) -"tK" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/sign/warning/smoking{ - pixel_y = 32 - }, -/turf/simulated/floor/wood/walnut, -/area/map_template/oldlab2/recandlockers) -"tN" = ( -/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply, -/obj/effect/floor_decal/corner/research{ - dir = 9 - }, -/obj/effect/floor_decal/corner/research{ - dir = 6 - }, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/chem) -"tP" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply, -/turf/simulated/floor/tiled/dark, -/area/map_template/oldlab2/recandlockers) -"tR" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/light{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 8 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/lab) -"tS" = ( -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/turf/simulated/floor/tiled/dark, -/area/map_template/oldlab2/lab) -"tT" = ( -/obj/effect/floor_decal/corner/blue/diagonal{ - dir = 4 - }, -/obj/structure/bed/chair{ - dir = 4 - }, -/obj/machinery/light/spot{ - dir = 8 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/mess) -"tV" = ( -/obj/effect/wallframe_spawn/reinforced/titanium, -/obj/machinery/door/blast/regular{ - dir = 4; - icon_state = "pdoor0"; - id_tag = "securityoutershutters" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/oldlab2/fixedsecurity) -"ue" = ( -/obj/effect/wallframe_spawn/reinforced_phoron, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/door/blast/regular{ - icon_state = "pdoor0"; - id_tag = "testlab1" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/oldlab2/test1) -"uh" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/table/standard, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/chem) -"ui" = ( -/obj/machinery/atmospherics/unary/cryo_cell, -/obj/effect/floor_decal/corner/paleblue{ - dir = 5 - }, -/obj/effect/floor_decal/corner/paleblue{ - dir = 10 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/medical) -"uj" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 - }, -/obj/effect/catwalk_plated, -/obj/structure/cable/yellow{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/turf/simulated/floor/plating, -/area/map_template/oldlab2/engineerhall) -"ul" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 1 - }, -/obj/machinery/light, -/obj/machinery/firealarm{ - dir = 1; - pixel_y = -24 - }, -/turf/simulated/floor/tiled/dark, -/area/map_template/oldlab2/living6) -"ur" = ( -/obj/machinery/alarm{ - dir = 1; - pixel_y = -22 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/oldlab2/engineerhall) -"ut" = ( -/obj/structure/cable/yellow{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/oldlab2/server) -"uv" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 8 - }, -/obj/effect/catwalk_plated, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/plating, -/area/map_template/oldlab2/Engineering) -"uw" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/door/window/eastright, -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/dark, -/area/map_template/oldlab2/lab) -"uz" = ( -/obj/machinery/vending/snack, -/turf/simulated/floor/wood/walnut, -/area/map_template/oldlab2/recandlockers) -"uB" = ( -/obj/machinery/light, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 1 - }, -/turf/simulated/floor/tiled/freezer, -/area/map_template/oldlab2/bathroom) -"uD" = ( -/obj/machinery/light{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/wood/walnut, -/area/map_template/oldlab2/recandlockers) -"uH" = ( -/obj/structure/table/steel_reinforced, -/obj/random/firstaid, -/obj/random/medical/lite, -/obj/machinery/alarm{ - dir = 4; - pixel_x = -25 - }, -/obj/machinery/light{ - dir = 8 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/medical) -"uI" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - level = 2 - }, -/obj/machinery/light{ - dir = 1 - }, -/turf/simulated/floor/tiled/dark, -/area/map_template/oldlab2/living5) -"uS" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply, -/obj/effect/catwalk_plated, -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/turf/simulated/floor/plating, -/area/map_template/oldlab2/engineerhall) -"uU" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/light{ - dir = 8 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/medical) -"uX" = ( -/obj/structure/dispenser/oxygen, -/obj/effect/floor_decal/industrial/hatch/yellow, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/oldlab2/Airlock) -"uY" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/turf/simulated/floor/wood/walnut, -/area/map_template/oldlab2/recandlockers) -"va" = ( -/obj/structure/table/rack{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark, -/area/map_template/oldlab2/recandlockers) -"vb" = ( -/obj/machinery/space_heater, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/oldlab2/test1) -"vc" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 4; - level = 2 - }, -/obj/structure/table/rack{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark, -/area/map_template/oldlab2/recandlockers) -"vd" = ( -/obj/machinery/light{ - dir = 4 - }, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 8 - }, -/obj/structure/closet/secure_closet/scientist, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/recandlockers) -"vf" = ( -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/structure/closet/emcloset, -/obj/item/inflatable_dispenser, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/hall) -"vg" = ( -/obj/structure/filingcabinet/filingcabinet{ - pixel_x = -2 - }, -/obj/structure/safe/floor, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/cso) -"vl" = ( -/obj/machinery/vending/tool{ - dir = 4 - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/oldlab2/Engineering) -"vo" = ( -/obj/structure/table/steel, -/obj/item/storage/box/detergent{ - pixel_x = -5; - pixel_y = 5 - }, -/obj/item/storage/box/detergent{ - pixel_x = -3 - }, -/turf/simulated/floor/tiled/freezer, -/area/map_template/oldlab2/recandlockers) -"vp" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/medical) -"vu" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/catwalk_plated, -/turf/simulated/floor/plating, -/area/map_template/oldlab2/engineerhall) -"vv" = ( -/obj/machinery/firealarm{ - pixel_y = 24 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/hall) -"vw" = ( -/obj/structure/closet/emcloset, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/test1) -"vy" = ( -/obj/machinery/door/blast/regular{ - icon_state = "pdoor0"; - id_tag = "securityairlockwindows" - }, -/obj/effect/wallframe_spawn/reinforced/titanium, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/oldlab2/fixedsecurity) -"vz" = ( -/obj/machinery/light{ - dir = 1 - }, -/obj/effect/floor_decal/corner/red{ - dir = 5 - }, -/obj/machinery/atmospherics/unary/vent_pump/on, -/obj/structure/table/steel_reinforced, -/turf/simulated/floor/tiled/dark, -/area/map_template/oldlab2/fixedsecurity) -"vA" = ( -/obj/structure/anomaly_container, -/obj/machinery/light, -/obj/machinery/atmospherics/unary/vent_pump/high_volume/airlock{ - dir = 1; - id_tag = "oldlab_pump" - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/oldlab2/Airlock) -"vC" = ( -/obj/effect/floor_decal/corner/pink{ - dir = 6 - }, -/obj/effect/floor_decal/corner/pink{ - dir = 5 - }, -/obj/machinery/alarm{ - dir = 8; - pixel_x = 24 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/medical) -"vG" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 1 - }, -/obj/machinery/light/small, -/turf/simulated/floor/tiled/freezer, -/area/map_template/oldlab2/mess) -"vI" = ( -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 8 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/oldlab2/server) -"vJ" = ( -/obj/machinery/atmospherics/unary/heater{ - dir = 1 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/test2) -"vK" = ( -/obj/machinery/optable{ - name = "Xenobiology Operating Table" - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/oldlab2/lab) -"vL" = ( -/obj/machinery/vitals_monitor, -/obj/effect/floor_decal/corner/pink{ - dir = 6 - }, -/obj/effect/floor_decal/corner/pink{ - dir = 10 - }, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 8 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/medical) -"vN" = ( -/obj/machinery/atmospherics/unary/freezer{ - dir = 1; - icon_state = "freezer" - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/test2) -"vU" = ( -/obj/machinery/light{ - dir = 8 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/oldlab2/engineerhall) -"vY" = ( -/obj/machinery/door/blast/regular{ - icon_state = "pdoor0"; - id_tag = "testlab3" - }, -/obj/effect/wallframe_spawn/reinforced_phoron, -/obj/machinery/atmospherics/pipe/simple/visible, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/oldlab2/test2) -"vZ" = ( -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 4 - }, -/obj/effect/floor_decal/corner/research{ - dir = 6 - }, -/obj/effect/floor_decal/corner/research{ - dir = 9 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/test1) -"wg" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/wood/walnut, -/area/map_template/oldlab2/recandlockers) -"wh" = ( -/obj/structure/bed/chair/comfy/brown{ - dir = 1 - }, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 1 - }, -/turf/simulated/floor/wood/walnut, -/area/map_template/oldlab2/recandlockers) -"wl" = ( -/obj/machinery/reagentgrinder, -/obj/item/reagent_containers/glass/beaker/large, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/chem) -"wp" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/dark, -/area/map_template/oldlab2/living3) -"ws" = ( -/obj/machinery/disposal, -/obj/effect/floor_decal/industrial/hatch/yellow, -/turf/simulated/floor/tiled/dark, -/area/map_template/oldlab2/recandlockers) -"wt" = ( -/obj/machinery/vending/assist{ - pixel_y = 12 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/oldlab2/lab) -"wu" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/effect/floor_decal/corner/research{ - dir = 6 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/test1) -"wv" = ( -/obj/structure/hygiene/sink{ - dir = 8; - pixel_x = -12; - pixel_y = 2 - }, -/obj/item/storage/mirror{ - pixel_x = -32 - }, -/turf/simulated/floor/tiled/freezer, -/area/map_template/oldlab2/bathroom) -"wC" = ( -/obj/effect/wallframe_spawn/reinforced_phoron, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/door/firedoor, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/oldlab2/test2) -"wH" = ( -/obj/structure/table/standard, -/obj/item/storage/lockbox/vials, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/chem) -"wJ" = ( -/obj/machinery/light/small{ - dir = 4 - }, -/obj/machinery/power/terminal{ - dir = 1 - }, -/obj/structure/cable/yellow{ - d2 = 2; - icon_state = "0-2" - }, -/obj/machinery/firealarm{ - dir = 4; - pixel_x = 21 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/oldlab2/powerandatmos) -"wK" = ( -/obj/machinery/atmospherics/unary/vent_pump/on, -/obj/machinery/light{ - dir = 1 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/hall) -"wP" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/test1) -"wQ" = ( -/obj/machinery/alarm{ - pixel_y = 16 - }, -/obj/effect/floor_decal/corner/red{ - dir = 5 - }, -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/turf/simulated/floor/tiled/dark, -/area/map_template/oldlab2/fixedsecurity) -"wX" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 1; - icon_state = "warning" - }, -/obj/machinery/button/blast_door{ - id_tag = "testlab1"; - name = "Test Lab 1 Shutters Control"; - pixel_x = -32 - }, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 4; - level = 2 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/test1) -"xa" = ( -/obj/machinery/alarm{ - dir = 1; - pixel_y = -22 - }, -/obj/structure/coatrack, -/turf/simulated/floor/tiled/dark, -/area/map_template/oldlab2/living5) -"xd" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 1 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/test1) -"xe" = ( -/obj/effect/floor_decal/corner/blue/diagonal{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 1 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/mess) -"xf" = ( -/obj/structure/table/rack{ - dir = 4 - }, -/obj/item/material/hatchet/machete, -/obj/item/material/hatchet/machete, -/obj/item/inflatable_dispenser, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/oldlab2/Airlock) -"xg" = ( -/turf/simulated/wall/titanium, -/area/map_template/oldlab2/lab) -"xh" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/oldlab2/Airlock) -"xj" = ( -/obj/machinery/computer/modular/preset/medical{ - dir = 1; - icon_state = "console" - }, -/obj/machinery/light, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/office) -"xk" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/tiled/freezer, -/area/map_template/oldlab2/mess) -"xl" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - level = 2 - }, -/obj/machinery/light{ - dir = 1 - }, -/turf/simulated/floor/tiled/dark, -/area/map_template/oldlab2/living6) -"xm" = ( -/obj/machinery/atmospherics/binary/pump, -/obj/effect/floor_decal/industrial/warning{ - dir = 1; - icon_state = "warning" - }, -/obj/structure/extinguisher_cabinet{ - pixel_x = 32 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/test2) -"xn" = ( -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/turf/simulated/floor/tiled/dark, -/area/map_template/oldlab2/lab) -"xt" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/alarm{ - dir = 4; - pixel_x = -23 - }, -/obj/machinery/light{ - dir = 8 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/oldlab2/engineerhall) -"xx" = ( -/obj/machinery/light/spot{ - dir = 4 - }, -/turf/simulated/floor/reinforced/airless, -/area/map_template/oldlab2/Airlock) -"xy" = ( -/obj/machinery/power/smes/buildable/outpost_substation, -/obj/structure/cable/yellow{ - d2 = 8; - icon_state = "0-8" - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/oldlab2/powerandatmos) -"xA" = ( -/obj/structure/sign/chemistry, -/turf/simulated/wall/titanium, -/area/map_template/oldlab2/chem) -"xB" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - level = 2 - }, -/obj/machinery/light{ - dir = 1 - }, -/turf/simulated/floor/tiled/dark, -/area/map_template/oldlab2/living3) -"xC" = ( -/obj/structure/cable/yellow{ - d2 = 4; - icon_state = "0-4" - }, -/obj/machinery/power/debug_items/infinite_generator, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/oldlab2/powerandatmos) -"xD" = ( -/turf/simulated/wall/titanium, -/area/map_template/oldlab2/cso) -"xI" = ( -/obj/structure/closet/secure_closet/scientist, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/recandlockers) -"xL" = ( -/obj/machinery/portable_atmospherics/powered/pump/filled, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/oldlab2/test1) -"xN" = ( -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/medical) -"xV" = ( -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/server) -"xX" = ( -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/dark, -/area/map_template/oldlab2/living6) -"xZ" = ( -/turf/simulated/floor/tiled/dark, -/area/map_template/oldlab2/living5) -"yd" = ( -/obj/machinery/vending/assist{ - dir = 8 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/lab) -"yl" = ( -/obj/machinery/door/window/brigdoor/southleft, -/obj/machinery/door/window/brigdoor/northleft, -/obj/effect/floor_decal/corner/grey/diagonal{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/mess) -"ym" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 1 - }, -/obj/effect/floor_decal/corner/research{ - dir = 10 - }, -/obj/effect/floor_decal/corner/research{ - dir = 5 - }, -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/hall) -"yo" = ( -/obj/structure/table/woodentable, -/turf/simulated/floor/tiled/dark, -/area/map_template/oldlab2/living6) -"yt" = ( -/obj/effect/floor_decal/corner/red{ - dir = 9 - }, -/obj/machinery/computer/modular/preset/security{ - dir = 4; - icon_state = "console" - }, -/turf/simulated/floor/tiled/dark, -/area/map_template/oldlab2/fixedsecurity) -"yw" = ( -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/lab) -"yy" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/effect/floor_decal/corner/research{ - dir = 9 - }, -/obj/effect/floor_decal/corner/research{ - dir = 6 - }, -/obj/effect/floor_decal/corner/research{ - dir = 6 - }, -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/hall) -"yz" = ( -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/office) -"yB" = ( -/obj/machinery/light/small{ - dir = 1 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/oldlab2/Engineering) -"yC" = ( -/obj/structure/hygiene/urinal{ - pixel_y = 32 - }, -/obj/structure/cable/yellow{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/turf/simulated/floor/tiled/freezer, -/area/map_template/oldlab2/bathroom) -"yF" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/lab) -"yI" = ( -/obj/machinery/optable{ - name = "Xenobiology Operating Table" - }, -/obj/effect/floor_decal/corner/pink{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/obj/machinery/light, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/medical) -"yL" = ( -/obj/structure/closet/secure_closet/scientist, -/obj/machinery/light{ - dir = 8 - }, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/recandlockers) -"yQ" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/door/firedoor, -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/door/airlock/civilian{ - name = "Bathroom" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/oldlab2/bathroom) -"yR" = ( -/obj/machinery/atmospherics/pipe/simple/visible, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/oldlab2/Airlock) -"yY" = ( -/obj/machinery/power/apc{ - dir = 8; - name = "west bump"; - pixel_x = -24 - }, -/obj/structure/cable/yellow, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/oldlab2/Airlock) -"yZ" = ( -/obj/effect/wallframe_spawn/reinforced_phoron, -/obj/machinery/door/blast/regular{ - icon_state = "pdoor0"; - id_tag = "testlab1" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/oldlab2/test1) -"zc" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 8; - icon_state = "warning" - }, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/turf/simulated/floor/tiled/dark, -/area/map_template/oldlab2/lab) -"zf" = ( -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 - }, -/turf/simulated/floor/tiled/dark, -/area/map_template/oldlab2/lab) -"zi" = ( -/obj/structure/cable/yellow{ - d2 = 8; - icon_state = "0-8" - }, -/obj/machinery/power/apc{ - dir = 4; - name = "east bump"; - pixel_x = 24 - }, -/turf/simulated/floor/tiled/dark, -/area/map_template/oldlab2/living5) -"zk" = ( -/obj/machinery/light/small, -/obj/structure/closet/l3closet/scientist/multi, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/oldlab2/hall) -"zl" = ( -/obj/machinery/cooker/fryer, -/obj/effect/floor_decal/corner/grey/diagonal{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/mess) -"zm" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/door/firedoor, -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/door/airlock/civilian, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/oldlab2/living5) -"zp" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/computer/modular/preset/medical, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/chem) -"zs" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/turf/simulated/floor/wood/walnut, -/area/map_template/oldlab2/recandlockers) -"zu" = ( -/obj/machinery/light/small, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/oldlab2/Engineering) -"zv" = ( -/obj/structure/bed/padded, -/obj/item/bedsheet, -/turf/simulated/floor/tiled/dark, -/area/map_template/oldlab2/living3) -"zw" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/effect/floor_decal/corner/research{ - dir = 9 - }, -/obj/effect/floor_decal/corner/research{ - dir = 6 - }, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/light{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/hall) -"zA" = ( -/turf/simulated/wall/r_wall, -/area/map_template/oldlab2/test2) -"zC" = ( -/obj/machinery/power/apc{ - dir = 1; - name = "north bump"; - pixel_y = 24 - }, -/obj/structure/cable/yellow{ - d2 = 4; - icon_state = "0-4" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/chem) -"zO" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/oldlab2/powerandatmos) -"zT" = ( -/turf/simulated/wall/titanium, -/area/map_template/oldlab2/living3) -"zU" = ( -/obj/structure/bed/chair/office/light, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/office) -"zW" = ( -/obj/effect/floor_decal/corner/pink{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/medical) -"zX" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/catwalk_plated, -/obj/machinery/light/small{ - dir = 1 - }, -/turf/simulated/floor/plating, -/area/map_template/oldlab2/server) -"zY" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 8 - }, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/recandlockers) -"Ac" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 1 - }, -/obj/structure/table/rack, -/obj/machinery/light, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/hall) -"Ad" = ( -/obj/structure/table/marble, -/obj/effect/floor_decal/corner/grey/diagonal{ - dir = 4 - }, -/obj/machinery/microwave{ - pixel_x = -3; - pixel_y = 6 - }, -/obj/machinery/atmospherics/unary/vent_pump/on, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/mess) -"Ae" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 4 - }, -/obj/machinery/firealarm{ - dir = 8; - pixel_x = -24 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/oldlab2/lab) -"Ag" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/medical) -"Ai" = ( -/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 4 - }, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/cable/yellow{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/server) -"Am" = ( -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/medical) -"An" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - level = 2 - }, -/obj/structure/flora/pottedplant/stoutbush, -/turf/simulated/floor/tiled/dark, -/area/map_template/oldlab2/living5) -"Ao" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/lab) -"As" = ( -/obj/item/storage/toolbox/electrical{ - pixel_x = 1; - pixel_y = -1 - }, -/turf/simulated/floor/reinforced, -/area/map_template/oldlab2/test1) -"At" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/recandlockers) -"Aw" = ( -/obj/structure/window/reinforced{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark, -/area/map_template/oldlab2/lab) -"Ay" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 8 - }, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/recandlockers) -"Az" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/effect/floor_decal/corner/research{ - dir = 9 - }, -/obj/effect/floor_decal/corner/research{ - dir = 6 - }, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/chem) -"AG" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/effect/floor_decal/corner/paleblue{ - dir = 5 - }, -/obj/structure/bed/roller, -/obj/machinery/alarm{ - dir = 8; - pixel_x = 25 - }, -/obj/machinery/light{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/medical) -"AH" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/medical) -"AI" = ( -/obj/structure/stasis_cage, -/obj/machinery/atmospherics/unary/vent_pump/high_volume/airlock{ - dir = 1; - id_tag = "oldlab_pump" - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/oldlab2/Airlock) -"AL" = ( -/obj/effect/floor_decal/corner/red{ - dir = 9 - }, -/obj/machinery/light{ - dir = 8 - }, -/turf/simulated/floor/tiled/dark, -/area/map_template/oldlab2/fixedsecurity) -"AP" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/effect/floor_decal/corner/red{ - dir = 9 - }, -/turf/simulated/floor/tiled/dark, -/area/map_template/oldlab2/fixedsecurity) -"AR" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/obj/effect/catwalk_plated, -/obj/machinery/light/small{ - dir = 1 - }, -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/plating, -/area/map_template/oldlab2/server) -"AW" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/reinforced, -/area/map_template/oldlab2/test1) -"AX" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/oldlab2/server) -"Bb" = ( -/obj/structure/stasis_cage, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/oldlab2/engineerhall) -"Bc" = ( -/obj/structure/bed/chair{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/oldlab2/server) -"Bd" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/oldlab2/test1) -"Bi" = ( -/turf/simulated/wall/titanium, -/area/map_template/oldlab2/living5) -"Bj" = ( -/turf/simulated/wall/titanium, -/area/map_template/oldlab2/test2) -"Bk" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/effect/floor_decal/corner/research{ - dir = 6 - }, -/obj/effect/floor_decal/corner/research{ - dir = 9 - }, -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 1 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/hall) -"Bm" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/effect/catwalk_plated, -/turf/simulated/floor/plating, -/area/map_template/oldlab2/Airlock) -"Bs" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/door/firedoor, -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/door/airlock/civilian, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/oldlab2/living3) -"Bw" = ( -/obj/machinery/atmospherics/unary/vent_pump/on, -/turf/simulated/floor/reinforced, -/area/map_template/oldlab2/test1) -"BA" = ( -/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 1 - }, -/obj/effect/floor_decal/corner/research{ - dir = 10 - }, -/obj/effect/floor_decal/corner/research{ - dir = 5 - }, -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/cable/yellow{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/hall) -"BB" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/turf/simulated/floor/reinforced, -/area/map_template/oldlab2/test1) -"BD" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/dark, -/area/map_template/oldlab2/living5) -"BF" = ( -/obj/machinery/bodyscanner{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply, -/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers, -/obj/effect/floor_decal/corner/paleblue{ - dir = 6 - }, -/obj/effect/floor_decal/corner/paleblue{ - dir = 9 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/medical) -"BG" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 1 - }, -/obj/effect/catwalk_plated, -/turf/simulated/floor/plating, -/area/map_template/oldlab2/Airlock) -"BH" = ( -/turf/simulated/floor/reinforced, -/area/map_template/oldlab2/test1) -"BJ" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/iv_drip, -/obj/machinery/light{ - dir = 4 - }, -/obj/effect/floor_decal/corner/paleblue{ - dir = 5 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/medical) -"BN" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/effect/catwalk_plated, -/turf/simulated/floor/plating, -/area/map_template/oldlab2/Airlock) -"BO" = ( -/obj/machinery/power/apc{ - dir = 1; - name = "north bump"; - pixel_y = 24 - }, -/obj/structure/cable/yellow{ - d2 = 2; - icon_state = "0-2" - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/hall) -"BS" = ( -/obj/structure/closet/crate/radiation, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/oldlab2/engineerhall) -"BU" = ( -/obj/machinery/light, -/turf/simulated/floor/tiled/dark, -/area/map_template/oldlab2/recandlockers) -"BW" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 8 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/medical) -"BZ" = ( -/obj/structure/closet/l3closet/janitor, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/oldlab2/server) -"Ca" = ( -/obj/machinery/computer/modular/preset/security{ - dir = 8; - icon_state = "console" - }, -/obj/effect/floor_decal/corner/red{ - dir = 6 - }, -/turf/simulated/floor/tiled/dark, -/area/map_template/oldlab2/fixedsecurity) -"Cd" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/oldlab2/hall) -"Ce" = ( -/turf/simulated/floor/tiled/techfloor, -/area/map_template/oldlab2/lab) -"Cg" = ( -/obj/structure/table/steel_reinforced, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 1 - }, -/obj/effect/floor_decal/corner/red{ - dir = 10 - }, -/turf/simulated/floor/tiled/dark, -/area/map_template/oldlab2/fixedsecurity) -"Ch" = ( -/obj/machinery/chemical_dispenser/bar_soft/full{ - pixel_y = 10 - }, -/obj/structure/table/marble, -/obj/effect/floor_decal/corner/grey/diagonal{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/mess) -"Ck" = ( -/obj/structure/flora/pottedplant/bamboo, -/turf/simulated/floor/tiled/dark, -/area/map_template/oldlab2/living) -"Co" = ( -/obj/structure/table/woodentable, -/turf/simulated/floor/tiled/dark, -/area/map_template/oldlab2/living4) -"Cq" = ( -/obj/structure/table/rack, -/obj/item/melee/baton/loaded, -/obj/effect/floor_decal/corner/red{ - dir = 6 - }, -/turf/simulated/floor/tiled/dark, -/area/map_template/oldlab2/fixedsecurity) -"Cx" = ( -/obj/item/stool/padded, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/recandlockers) -"CF" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled/freezer, -/area/map_template/oldlab2/bathroom) -"CG" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/door/firedoor, -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/door/airlock/civilian, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/oldlab2/living6) -"CK" = ( -/obj/structure/closet/secure_closet/freezer/meat, -/turf/simulated/floor/tiled/freezer, -/area/map_template/oldlab2/mess) -"CN" = ( -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/effect/catwalk_plated, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/plating, -/area/map_template/oldlab2/server) -"CP" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/oldlab2/engineerhall) -"CQ" = ( -/obj/effect/floor_decal/industrial/outline/grey, -/obj/structure/window/reinforced{ - dir = 8 - }, -/obj/machinery/portable_atmospherics/canister/hydrogen, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/oldlab2/engineerhall) -"CR" = ( -/obj/structure/table/woodentable, -/obj/machinery/alarm{ - dir = 1; - pixel_y = -22 - }, -/obj/item/storage/med_pouch/radiation, -/turf/simulated/floor/tiled/dark, -/area/map_template/oldlab2/living2) -"CV" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/door/firedoor, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/door/airlock/glass/medical{ - name = "Chemistry" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/oldlab2/chem) -"CY" = ( -/obj/structure/hygiene/shower{ - dir = 8 - }, -/turf/simulated/floor/tiled/freezer, -/area/map_template/oldlab2/bathroom) -"Dc" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/obj/structure/closet/emcloset, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/oldlab2/hall) -"De" = ( -/obj/machinery/atmospherics/unary/freezer{ - icon_state = "freezer" - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/medical) -"Df" = ( -/obj/structure/table/rack, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/oldlab2/lab) -"Dg" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 1 - }, -/obj/structure/closet/emcloset, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/oldlab2/hall) -"Dh" = ( -/obj/structure/bed/chair/comfy/brown{ - dir = 4 - }, -/turf/simulated/floor/wood/walnut, -/area/map_template/oldlab2/recandlockers) -"Dj" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 4 - }, -/obj/effect/floor_decal/corner/research{ - dir = 9 - }, -/obj/effect/floor_decal/corner/research{ - dir = 6 - }, -/obj/structure/cable/yellow{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/hall) -"Dk" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply, -/obj/structure/hygiene/drain, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/test1) -"Do" = ( -/obj/machinery/light{ - dir = 4 - }, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 8 - }, -/turf/simulated/floor/tiled/freezer, -/area/map_template/oldlab2/bathroom) -"Dq" = ( -/obj/structure/table/woodentable, -/obj/random/maintenance/clean, -/turf/simulated/floor/tiled/dark, -/area/map_template/oldlab2/living) -"Ds" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/obj/machinery/alarm{ - dir = 8; - pixel_x = 24 - }, -/obj/effect/floor_decal/industrial/warning, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/oldlab2/lab) -"Dt" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark, -/area/map_template/oldlab2/recandlockers) -"Du" = ( -/obj/machinery/floodlight, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/oldlab2/engineerhall) -"Dv" = ( -/turf/simulated/wall/titanium, -/area/map_template/oldlab2/powerandatmos) -"Dw" = ( -/obj/structure/fireaxecabinet{ - pixel_x = -32 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/recandlockers) -"Dx" = ( -/obj/machinery/light{ - dir = 1 - }, -/obj/structure/bed/padded, -/obj/item/bedsheet/hop, -/turf/simulated/floor/tiled/dark, -/area/map_template/oldlab2/living5) -"DA" = ( -/obj/machinery/light{ - dir = 1 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/oldlab2/engineerhall) -"DB" = ( -/obj/structure/table/steel_reinforced, -/obj/item/reagent_containers/food/drinks/glass2/coffeecup/SCG{ - pixel_x = 7; - pixel_y = 5 - }, -/obj/machinery/alarm{ - dir = 1; - pixel_y = -22 - }, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 1 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/office) -"DD" = ( -/obj/machinery/atmospherics/pipe/manifold/visible, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/test2) -"DE" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/oldlab2/Airlock) -"DF" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 8 - }, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/recandlockers) -"DG" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/table/standard, -/obj/item/hand_labeler, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/chem) -"DH" = ( -/obj/machinery/atmospherics/pipe/simple/visible{ - dir = 6 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/oldlab2/Airlock) -"DI" = ( -/obj/effect/floor_decal/corner/red{ - dir = 9 - }, -/turf/simulated/floor/tiled/dark, -/area/map_template/oldlab2/fixedsecurity) -"DJ" = ( -/obj/machinery/atmospherics/binary/pump/on{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/oldlab2/Airlock) -"DK" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/dark, -/area/map_template/oldlab2/living6) -"DN" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/door/firedoor, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/door/airlock/civilian{ - name = "Mess hall" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/oldlab2/mess) -"DP" = ( -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 8; - icon_state = "warningcorner" - }, -/obj/structure/cable/yellow{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/turf/simulated/floor/tiled/dark, -/area/map_template/oldlab2/lab) -"DQ" = ( -/obj/structure/closet/crate/secure/biohazard/alt, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/light{ - dir = 8 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/hall) -"DR" = ( -/obj/structure/table/steel_reinforced, -/obj/machinery/alarm{ - dir = 1; - pixel_y = -25 - }, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 1 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/oldlab2/server) -"DT" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 1 - }, -/obj/machinery/mining/brace{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/oldlab2/engineerhall) -"DU" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/firealarm{ - dir = 1; - pixel_y = -24 - }, -/turf/simulated/floor/tiled/freezer, -/area/map_template/oldlab2/bathroom) -"DV" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/effect/floor_decal/corner/research{ - dir = 6 - }, -/obj/effect/floor_decal/corner/research{ - dir = 9 - }, -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/hall) -"DW" = ( -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/light/small{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 4 - }, -/obj/effect/floor_decal/corner/research{ - dir = 6 - }, -/obj/effect/floor_decal/corner/research{ - dir = 9 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/test1) -"Eh" = ( -/obj/structure/extinguisher_cabinet{ - pixel_x = -32 - }, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/test1) -"Ej" = ( -/obj/structure/extinguisher_cabinet{ - pixel_y = -32 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/obj/machinery/computer/modular/preset/medical{ - dir = 1; - icon_state = "console" - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/test1) -"El" = ( -/obj/effect/floor_decal/spline/fancy/wood{ - dir = 8 - }, -/turf/simulated/floor/wood/walnut, -/area/map_template/oldlab2/recandlockers) -"En" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 4 - }, -/obj/machinery/r_n_d/protolathe, -/turf/simulated/floor/tiled/dark, -/area/map_template/oldlab2/lab) -"Ep" = ( -/obj/structure/bed/padded, -/obj/machinery/light_switch{ - pixel_x = -24 - }, -/obj/item/bedsheet/hop, -/turf/simulated/floor/tiled/dark, -/area/map_template/oldlab2/living6) -"Et" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 1 - }, -/obj/structure/table/standard, -/obj/effect/floor_decal/corner/research{ - dir = 9 - }, -/obj/machinery/firealarm{ - dir = 1; - pixel_y = -26 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/test1) -"Eu" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/door/firedoor, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/door/airlock/civilian, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/oldlab2/server) -"Ew" = ( -/obj/machinery/cooker/oven, -/obj/effect/floor_decal/corner/grey/diagonal{ - dir = 4 - }, -/obj/machinery/atmospherics/unary/vent_pump/on, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/mess) -"Ey" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/hall) -"Ez" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply, -/obj/effect/floor_decal/corner/research{ - dir = 6 - }, -/obj/effect/floor_decal/corner/research{ - dir = 9 - }, -/obj/structure/cable/yellow{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/hall) -"EB" = ( -/obj/structure/extinguisher_cabinet{ - pixel_x = -32 - }, -/obj/structure/table/steel_reinforced, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark, -/area/map_template/oldlab2/recandlockers) -"EF" = ( -/obj/structure/table/woodentable, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 1 - }, -/turf/simulated/floor/wood/walnut, -/area/map_template/oldlab2/recandlockers) -"EH" = ( -/obj/machinery/light/small{ - dir = 4 - }, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 8 - }, -/turf/simulated/floor/tiled/freezer, -/area/map_template/oldlab2/mess) -"EL" = ( -/obj/machinery/door/window/brigdoor/southleft, -/obj/machinery/door/window/brigdoor/northleft, -/obj/machinery/door/blast/regular{ - icon_state = "pdoor0"; - id_tag = "testlab3" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/oldlab2/test2) -"EM" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/extinguisher_cabinet{ - pixel_y = -32 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/recandlockers) -"EN" = ( -/obj/effect/floor_decal/corner/pink{ - dir = 6 - }, -/obj/machinery/firealarm{ - dir = 4; - pixel_x = 26 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/medical) -"EQ" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/effect/floor_decal/corner/paleblue{ - dir = 6 - }, -/obj/effect/floor_decal/corner/paleblue{ - dir = 9 - }, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/medical) -"ER" = ( -/obj/effect/floor_decal/corner/red{ - dir = 9 - }, -/obj/effect/floor_decal/corner/red, -/turf/simulated/floor/tiled/dark, -/area/map_template/oldlab2/fixedsecurity) -"ES" = ( -/obj/machinery/atmospherics/unary/outlet_injector{ - airflow_process_delay = 2; - frequency = 1560; - icon_state = "map_injector"; - id = "test_in"; - use_power = 1 - }, -/turf/simulated/floor/reinforced, -/area/map_template/oldlab2/test2) -"ET" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 4 - }, -/obj/machinery/atmospherics/unary/vent_pump/on, -/obj/machinery/light/small{ - dir = 1 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/oldlab2/lab) -"EX" = ( -/obj/effect/floor_decal/corner/blue/diagonal{ - dir = 4 - }, -/obj/machinery/alarm{ - dir = 1; - pixel_y = -22 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/mess) -"EY" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/effect/floor_decal/corner/paleblue{ - dir = 6 - }, -/obj/effect/floor_decal/corner/paleblue{ - dir = 9 - }, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/medical) -"Fd" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/effect/catwalk_plated, -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/turf/simulated/floor/plating, -/area/map_template/oldlab2/engineerhall) -"Fh" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/oldlab2/server) -"Fk" = ( -/obj/machinery/suspension_gen, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 8 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/oldlab2/engineerhall) -"Fp" = ( -/obj/effect/floor_decal/corner/blue/diagonal{ - dir = 4 - }, -/obj/structure/table/steel_reinforced, -/obj/item/storage/mre{ - pixel_x = 5; - pixel_y = 10 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/mess) -"Fq" = ( -/obj/effect/floor_decal/corner/blue/diagonal{ - dir = 4 - }, -/obj/structure/bed/chair{ - dir = 8 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/mess) -"Fu" = ( -/obj/structure/extinguisher_cabinet{ - pixel_x = -32 - }, -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/obj/structure/table/rack{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/oldlab2/engineerhall) -"Fv" = ( -/obj/structure/sign/double/map/left{ - pixel_y = 32 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/cso) -"Fw" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/dark, -/area/map_template/oldlab2/living2) -"Fx" = ( -/obj/machinery/atmospherics/omni/filter, -/obj/machinery/light{ - dir = 4 - }, -/obj/machinery/button/blast_door{ - id_tag = "labentrance"; - name = "Special Test Lab Entrance Shutters"; - pixel_x = 32; - pixel_y = -1 - }, -/obj/machinery/button/blast_door{ - id_tag = "testlab3"; - name = "Test Lab 3 Shutters Control"; - pixel_x = 32; - pixel_y = 7 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/test2) -"Fy" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/table/standard, -/obj/item/reagent_containers/glass/beaker/large{ - pixel_x = 4; - pixel_y = 10 - }, -/obj/item/reagent_containers/glass/beaker/insulated/large, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/chem) -"FB" = ( -/obj/structure/bookcase/manuals/medical, -/obj/machinery/atmospherics/unary/vent_pump/on, -/turf/simulated/floor/wood/walnut, -/area/map_template/oldlab2/recandlockers) -"FH" = ( -/obj/machinery/suit_storage_unit/mining, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/oldlab2/Airlock) -"FJ" = ( -/obj/machinery/atmospherics/pipe/simple/visible, -/obj/machinery/access_button{ - active_timers = "interior access button"; - command = "cycle_exterior"; - frequency = 1379; - master_tag = "oldlab_airlock"; - name = "exterior access button"; - pixel_x = 24; - pixel_y = -24 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/oldlab2/Airlock) -"FL" = ( -/obj/structure/bed/chair{ - dir = 1 - }, -/obj/machinery/light{ - dir = 8 - }, -/turf/simulated/floor/tiled/dark, -/area/map_template/oldlab2/recandlockers) -"FS" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/oldlab2/engineerhall) -"FU" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 8 - }, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/effect/catwalk_plated, -/turf/simulated/floor/plating, -/area/map_template/oldlab2/server) -"FW" = ( -/obj/structure/bed/padded, -/obj/item/bedsheet/rd, -/turf/simulated/floor/tiled/dark, -/area/map_template/oldlab2/living2) -"FX" = ( -/obj/structure/table/steel_reinforced, -/obj/item/device/flashlight/lamp, -/obj/machinery/atmospherics/unary/vent_pump/on, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/office) -"Ge" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/door/firedoor, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/door/airlock/civilian{ - name = "Maintenance" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/oldlab2/medical) -"Gf" = ( -/obj/effect/floor_decal/corner/blue/diagonal{ - dir = 4 - }, -/obj/machinery/firealarm{ - dir = 1; - pixel_y = -24 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/mess) -"Gg" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/door/firedoor, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/door/airlock/civilian{ - name = "Locker room" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/oldlab2/recandlockers) -"Gj" = ( -/obj/structure/bed/chair, -/obj/machinery/alarm{ - dir = 4; - pixel_x = -25 - }, -/obj/machinery/light{ - dir = 8 - }, -/turf/simulated/floor/tiled/dark, -/area/map_template/oldlab2/recandlockers) -"Gk" = ( -/obj/effect/floor_decal/corner/pink{ - dir = 9 - }, -/obj/structure/iv_drip, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/medical) -"Gn" = ( -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/oldlab2/server) -"Gp" = ( -/obj/structure/closet/emcloset, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/alarm{ - dir = 1; - pixel_y = -25 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/oldlab2/server) -"Gs" = ( -/obj/structure/curtain/black, -/turf/simulated/floor/tiled/freezer, -/area/map_template/oldlab2/bathroom) -"Gt" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/civilian{ - name = "Robotics" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/oldlab2/lab) -"Gv" = ( -/obj/structure/bed/chair/office/light{ - dir = 8 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/oldlab2/lab) -"Gx" = ( -/obj/structure/table/steel, -/obj/item/storage/belt/utility/full, -/obj/machinery/alarm{ - dir = 1; - pixel_y = -22 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/oldlab2/Engineering) -"GG" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/civilian{ - name = "Freezer" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/oldlab2/mess) -"GL" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/oldlab2/server) -"GP" = ( -/obj/machinery/light{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/chem) -"GR" = ( -/obj/machinery/alarm{ - dir = 1; - pixel_y = -22 - }, -/obj/structure/coatrack, -/turf/simulated/floor/tiled/dark, -/area/map_template/oldlab2/living) -"GS" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/dark, -/area/map_template/oldlab2/living3) -"GU" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/test1) -"GV" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 1 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/oldlab2/Engineering) -"GW" = ( -/obj/machinery/airlock_sensor{ - frequency = 1380; - id_tag = "oldlab_sensor_exterior"; - pixel_y = -32 - }, -/turf/simulated/floor/reinforced/airless, -/area/map_template/oldlab2/Airlock) -"GX" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/reinforced, -/area/map_template/oldlab2/test1) -"GY" = ( -/turf/simulated/wall/titanium, -/area/map_template/oldlab2/engineerhall) -"GZ" = ( -/obj/structure/closet/l3closet/scientist/multi, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/oldlab2/hall) -"Hb" = ( -/obj/effect/floor_decal/corner/blue/diagonal{ - dir = 4 - }, -/obj/machinery/light/spot, -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/mess) -"Hc" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/extinguisher_cabinet{ - pixel_x = -32 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/server) -"Hd" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/table/standard, -/obj/item/reagent_containers/glass/beaker/large{ - pixel_x = -4; - pixel_y = 13 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/chem) -"He" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/recandlockers) -"Hh" = ( -/obj/machinery/light/small, -/turf/simulated/floor/tiled/freezer, -/area/map_template/oldlab2/bathroom) -"Hi" = ( -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/portable_atmospherics/powered/pump/filled, -/obj/machinery/light/small{ - dir = 1 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/oldlab2/hall) -"Hj" = ( -/obj/machinery/alarm{ - dir = 1; - pixel_y = -22 - }, -/turf/simulated/floor/wood/walnut, -/area/map_template/oldlab2/recandlockers) -"Hm" = ( -/obj/structure/bed/padded, -/obj/item/bedsheet/purple, -/obj/machinery/light{ - dir = 1 - }, -/turf/simulated/floor/tiled/dark, -/area/map_template/oldlab2/living6) -"Hp" = ( -/obj/structure/table/steel_reinforced, -/obj/item/device/taperecorder, -/obj/structure/noticeboard{ - pixel_y = 32 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/office) -"Hq" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 1 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/hall) -"Hv" = ( -/obj/item/storage/secure/safe{ - pixel_x = 32 - }, -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/cso) -"Hw" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/effect/floor_decal/corner/research{ - dir = 9 - }, -/obj/effect/floor_decal/corner/research{ - dir = 6 - }, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/chem) -"HC" = ( -/obj/structure/largecrate, -/obj/machinery/light/spot, -/turf/simulated/floor/reinforced/airless, -/area/map_template/oldlab2/Airlock) -"HF" = ( -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/oldlab2/Airlock) -"HH" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 8 - }, -/obj/machinery/firealarm{ - dir = 4; - pixel_x = 21 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/server) -"HK" = ( -/obj/machinery/alarm{ - dir = 1; - pixel_y = -22 - }, -/turf/simulated/floor/carpet, -/area/map_template/oldlab2/recandlockers) -"HT" = ( -/obj/structure/bed/padded, -/obj/item/bedsheet/orange, -/turf/simulated/floor/tiled/dark, -/area/map_template/oldlab2/living6) -"HU" = ( -/obj/effect/floor_decal/corner/blue/diagonal{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/mess) -"HW" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 1 - }, -/obj/structure/table/steel_reinforced, -/obj/machinery/photocopier/faxmachine, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/cso) -"Ia" = ( -/obj/structure/reagent_dispensers/fueltank, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 1 - }, -/obj/effect/floor_decal/industrial/hatch/yellow, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/oldlab2/test1) -"Ib" = ( -/obj/machinery/light_switch{ - pixel_x = -24 - }, -/obj/machinery/light{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/cso) -"Ic" = ( -/obj/effect/floor_decal/industrial/warning, -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/dark, -/area/map_template/oldlab2/lab) -"Id" = ( -/obj/machinery/vending/engineering{ - dir = 4 - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/light/small{ - dir = 8 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/oldlab2/Engineering) -"Ig" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/tiled/freezer, -/area/map_template/oldlab2/bathroom) -"Ih" = ( -/obj/machinery/atmospherics/valve{ - dir = 8 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/test2) -"Ii" = ( -/obj/machinery/suit_storage_unit/mining, -/obj/machinery/light, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/oldlab2/Airlock) -"Ij" = ( -/obj/random/junk, -/turf/simulated/floor/tiled/dark, -/area/map_template/oldlab2/recandlockers) -"Iq" = ( -/obj/machinery/computer/modular/preset/medical, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/hall) -"Iu" = ( -/obj/effect/floor_decal/corner/paleblue{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/medical) -"Ix" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/alarm{ - dir = 1; - pixel_y = -22 - }, -/obj/machinery/light, -/turf/simulated/floor/tiled/freezer, -/area/map_template/oldlab2/bathroom) -"Iy" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/effect/floor_decal/corner/research{ - dir = 9 - }, -/obj/machinery/power/apc{ - dir = 8; - name = "west bump"; - pixel_x = -24 - }, -/obj/structure/cable/yellow, -/obj/machinery/button/blast_door{ - id_tag = "speciallabblast"; - name = "Special Test Lab Blast Doors"; - pixel_x = -26; - pixel_y = -25 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/test1) -"Iz" = ( -/obj/effect/floor_decal/corner/blue/diagonal{ - dir = 4 - }, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 4; - level = 2 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/mess) -"IA" = ( -/obj/structure/reagent_dispensers/watertank, -/obj/effect/floor_decal/industrial/hatch/yellow, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/oldlab2/Airlock) -"ID" = ( -/obj/machinery/atmospherics/pipe/simple/visible/red{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/visible, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/test2) -"IK" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark, -/area/map_template/oldlab2/recandlockers) -"IM" = ( -/obj/machinery/atmospherics/pipe/simple/visible{ - dir = 10 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/test2) -"IZ" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 1 - }, -/obj/machinery/light, -/obj/machinery/firealarm{ - dir = 1; - pixel_y = -24 - }, -/turf/simulated/floor/tiled/dark, -/area/map_template/oldlab2/living5) -"Jb" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/door/firedoor, -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/door/airlock/civilian{ - name = "Mess hall" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/oldlab2/mess) -"Jc" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/door/airlock/civilian{ - name = "Security" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/oldlab2/fixedsecurity) -"Jg" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 1 - }, -/turf/simulated/floor/tiled/dark, -/area/map_template/oldlab2/fixedsecurity) -"Jh" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/cso) -"Jj" = ( -/turf/simulated/wall/titanium, -/area/map_template/oldlab2/server) -"Jk" = ( -/obj/effect/floor_decal/corner/blue/diagonal{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/firealarm{ - dir = 4; - pixel_x = 21 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/mess) -"Jl" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/obj/machinery/alarm{ - dir = 8; - pixel_x = 24 - }, -/turf/simulated/floor/tiled/freezer, -/area/map_template/oldlab2/recandlockers) -"Jm" = ( -/obj/effect/floor_decal/corner/blue/diagonal{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/extinguisher_cabinet{ - pixel_x = 32 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/cable/yellow{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/mess) -"Jo" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 1 - }, -/obj/effect/floor_decal/corner/research{ - dir = 8 - }, -/obj/structure/cable/yellow{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/test1) -"Jv" = ( -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 - }, -/turf/simulated/floor/tiled/dark, -/area/map_template/oldlab2/living6) -"JB" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 1 - }, -/obj/machinery/light, -/obj/machinery/firealarm{ - dir = 1; - pixel_y = -24 - }, -/turf/simulated/floor/tiled/dark, -/area/map_template/oldlab2/living2) -"JF" = ( -/obj/machinery/light/small{ - dir = 8 - }, -/obj/structure/table/steel_reinforced, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/oldlab2/lab) -"JG" = ( -/obj/machinery/r_n_d/circuit_imprinter, -/obj/effect/floor_decal/industrial/hatch/yellow, -/obj/machinery/light/small, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/oldlab2/lab) -"JH" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/oldlab2/lab) -"JJ" = ( -/turf/simulated/wall/titanium, -/area/map_template/oldlab2/fixedsecurity) -"JO" = ( -/obj/effect/floor_decal/corner/blue/diagonal{ - dir = 4 - }, -/obj/structure/table/steel_reinforced, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/mess) -"JP" = ( -/obj/machinery/vending/lavatory, -/turf/simulated/floor/tiled/freezer, -/area/map_template/oldlab2/bathroom) -"JT" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/door/firedoor, -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/door/airlock/civilian, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/oldlab2/living2) -"Ka" = ( -/obj/structure/table/rack, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 1 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/hall) -"Kh" = ( -/obj/machinery/atmospherics/unary/vent_pump/on, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/medical) -"Ki" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 1 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/oldlab2/hall) -"Kn" = ( -/obj/effect/wallframe_spawn/reinforced_phoron, -/obj/machinery/door/firedoor, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/oldlab2/test2) -"Ks" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/door/firedoor, -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/door/airlock/medical, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/oldlab2/chem) -"Kt" = ( -/obj/machinery/door/window/brigdoor/southleft, -/obj/machinery/door/window/brigdoor/northleft, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/door/blast/regular{ - icon_state = "pdoor0"; - id_tag = "testlab1" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/oldlab2/test1) -"Kv" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/bed/chair/office/light{ - dir = 1 - }, -/obj/structure/cable/yellow{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/cso) -"Kw" = ( -/obj/machinery/recharge_station, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/oldlab2/powerandatmos) -"Kx" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 1 - }, -/obj/structure/table/rack{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark, -/area/map_template/oldlab2/lab) -"KA" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/effect/floor_decal/corner/research{ - dir = 6 - }, -/obj/effect/floor_decal/corner/research{ - dir = 9 - }, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/hall) -"KD" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/tiled/dark, -/area/map_template/oldlab2/living4) -"KE" = ( -/obj/machinery/power/apc{ - dir = 8; - name = "west bump"; - pixel_x = -24 - }, -/obj/structure/cable/yellow{ - d2 = 4; - icon_state = "0-4" - }, -/obj/structure/cable/yellow{ - d2 = 2; - icon_state = "0-2" - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/oldlab2/powerandatmos) -"KH" = ( -/obj/effect/floor_decal/corner/research{ - dir = 9 - }, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/effect/floor_decal/corner/research{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/lab) -"KL" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/dark, -/area/map_template/oldlab2/fixedsecurity) -"KN" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 4 - }, -/obj/structure/closet/secure_closet/scientist, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/recandlockers) -"KP" = ( -/obj/structure/fireaxecabinet{ - pixel_y = -32 - }, -/obj/machinery/light, -/obj/effect/floor_decal/industrial/outline/grey, -/obj/structure/window/reinforced{ - dir = 8 - }, -/obj/machinery/portable_atmospherics/canister/sleeping_agent, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/oldlab2/engineerhall) -"KR" = ( -/obj/structure/table/rack, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 1 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/oldlab2/lab) -"KU" = ( -/obj/effect/floor_decal/corner/blue/diagonal{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 8 - }, -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 8 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/mess) -"KV" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 1 - }, -/obj/structure/table/rack, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/oldlab2/server) -"KW" = ( -/obj/structure/reagent_dispensers/water_cooler, -/turf/simulated/floor/carpet, -/area/map_template/oldlab2/recandlockers) -"KY" = ( -/obj/machinery/radiocarbon_spectrometer, -/obj/machinery/light{ - dir = 1 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/lab) -"KZ" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/obj/machinery/computer/modular{ - dir = 8 - }, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/oldlab2/powerandatmos) -"Li" = ( -/obj/machinery/atmospherics/unary/vent_pump/high_volume/airlock{ - id_tag = "oldlab_pump" - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/oldlab2/Airlock) -"Lk" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 - }, -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/dark, -/area/map_template/oldlab2/living4) -"Lo" = ( -/obj/structure/table/standard, -/obj/random/medical/lite, -/obj/item/storage/belt/medical, -/obj/structure/sign/warning/nosmoking_1{ - pixel_y = 32 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/medical) -"Lp" = ( -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 9 - }, -/obj/machinery/light{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/medical) -"Lr" = ( -/obj/structure/bed/padded, -/obj/item/bedsheet/mime, -/turf/simulated/floor/tiled/dark, -/area/map_template/oldlab2/living3) -"Ls" = ( -/obj/machinery/light_switch{ - pixel_x = -24 - }, -/turf/simulated/floor/tiled/dark, -/area/map_template/oldlab2/living4) -"Lw" = ( -/obj/structure/filingcabinet/filingcabinet{ - pixel_x = -10 - }, -/obj/structure/filingcabinet/filingcabinet{ - pixel_x = 10 - }, -/obj/structure/filingcabinet/filingcabinet, -/obj/machinery/light/small{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/server) -"Lx" = ( -/obj/machinery/light/spot, -/turf/template_noop, -/area/map_template/oldlab2/Airlock) -"Ly" = ( -/obj/structure/coatrack, -/turf/simulated/floor/tiled/dark, -/area/map_template/oldlab2/living3) -"Lz" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/chem) -"LD" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/oldlab2/server) -"LG" = ( -/obj/machinery/light/small{ - dir = 1 - }, -/turf/simulated/floor/tiled/freezer, -/area/map_template/oldlab2/bathroom) -"LH" = ( -/obj/structure/table/woodentable, -/turf/simulated/floor/tiled/dark, -/area/map_template/oldlab2/living5) -"LI" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 1 - }, -/obj/effect/floor_decal/spline/fancy/wood{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers, -/obj/structure/cable/yellow{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/turf/simulated/floor/wood/walnut, -/area/map_template/oldlab2/recandlockers) -"LN" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 8 - }, -/obj/machinery/light/small{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/oldlab2/Engineering) -"LT" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/dark, -/area/map_template/oldlab2/living) -"LW" = ( -/obj/structure/closet/secure_closet/freezer/meat, -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/obj/machinery/light/small{ - dir = 1 - }, -/turf/simulated/floor/tiled/freezer, -/area/map_template/oldlab2/mess) -"LY" = ( -/obj/machinery/light{ - dir = 8 - }, -/turf/simulated/floor/reinforced, -/area/map_template/oldlab2/test1) -"Ma" = ( -/turf/simulated/wall/titanium, -/area/map_template/oldlab2/test1) -"Md" = ( -/obj/effect/floor_decal/corner/blue/diagonal{ - dir = 4 - }, -/obj/item/stool/bar/padded, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/mess) -"Me" = ( -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/dark, -/area/map_template/oldlab2/living5) -"Mg" = ( -/obj/structure/table/steel_reinforced, -/obj/effect/floor_decal/corner/blue/diagonal{ - dir = 4 - }, -/obj/random/maintenance/clean, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/mess) -"Mh" = ( -/obj/structure/anomaly_container, -/obj/machinery/atmospherics/unary/vent_pump/high_volume/airlock{ - dir = 1; - id_tag = "oldlab_pump" - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/oldlab2/Airlock) -"Mi" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/effect/floor_decal/corner/research{ - dir = 10 - }, -/obj/machinery/light, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/test1) -"Mk" = ( -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/chem) -"Mm" = ( -/obj/effect/floor_decal/corner/blue/diagonal{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/mess) -"Mp" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/sign/warning/nosmoking_1{ - pixel_y = 32 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/chem) -"Mq" = ( -/obj/machinery/door/blast/regular{ - icon_state = "pdoor0"; - id_tag = "testlab1" - }, -/obj/effect/wallframe_spawn/reinforced_phoron, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/oldlab2/test1) -"Mt" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/door/firedoor, -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/door/airlock/civilian{ - name = "Power Room" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/oldlab2/powerandatmos) -"Mv" = ( -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/portable_atmospherics/powered/pump/filled, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/oldlab2/hall) -"Mw" = ( -/obj/machinery/computer/modular/preset/medical{ - dir = 8 - }, -/obj/machinery/light/small{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/oldlab2/server) -"My" = ( -/obj/machinery/mech_recharger, -/mob/living/exosuit/premade/powerloader/old, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/oldlab2/Airlock) -"MC" = ( -/obj/machinery/atmospherics/pipe/simple/visible, -/obj/machinery/airlock_sensor{ - id_tag = "oldlab_sensor"; - pixel_x = 25; - pixel_y = -6 - }, -/obj/machinery/embedded_controller/radio/airlock/airlock_controller{ - anchor_fall = "labport_airlock"; - dir = 8; - id_tag = "oldlab_airlock"; - pixel_x = 25; - pixel_y = 8; - tag_airpump = "oldlab_pump"; - tag_chamber_sensor = "oldlab_sensor"; - tag_exterior_door = "oldlab_exterior"; - tag_exterior_sensor = "oldlab_sensor_external"; - tag_interior_door = "oldlab_interior" - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/oldlab2/Airlock) -"MD" = ( -/obj/machinery/sleeper{ - dir = 4 - }, -/obj/effect/floor_decal/corner/pink{ - dir = 9 - }, -/obj/effect/floor_decal/corner/pink{ - dir = 6 - }, -/obj/machinery/light{ - dir = 8 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/medical) -"MI" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 4 - }, -/obj/machinery/alarm{ - dir = 4; - pixel_x = -23 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/oldlab2/powerandatmos) -"MM" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/oldlab2/server) -"MN" = ( -/obj/structure/filingcabinet/filingcabinet{ - pixel_x = 10 - }, -/obj/structure/filingcabinet/filingcabinet{ - pixel_x = 20 - }, -/obj/structure/filingcabinet/filingcabinet, -/obj/machinery/light{ - dir = 1 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/office) -"MQ" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 4 - }, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/effect/catwalk_plated, -/turf/simulated/floor/plating, -/area/map_template/oldlab2/engineerhall) -"MT" = ( -/obj/effect/floor_decal/corner/grey/diagonal{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/mess) -"MX" = ( -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/medical) -"MZ" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 8 - }, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/cable/yellow{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/effect/catwalk_plated, -/turf/simulated/floor/plating, -/area/map_template/oldlab2/engineerhall) -"Nf" = ( -/obj/effect/floor_decal/corner/blue/diagonal{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/mess) -"Ng" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/dark, -/area/map_template/oldlab2/fixedsecurity) -"Nj" = ( -/obj/effect/floor_decal/corner/paleblue{ - dir = 5 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/medical) -"No" = ( -/obj/effect/floor_decal/corner/blue/diagonal{ - dir = 4 - }, -/obj/item/device/radio/intercom{ - dir = 1; - pixel_y = -28 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/mess) -"Ns" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/obj/effect/floor_decal/corner/research{ - dir = 6 - }, -/obj/effect/floor_decal/corner/research{ - dir = 9 - }, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/hall) -"Nt" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/effect/floor_decal/corner/paleblue{ - dir = 6 - }, -/obj/effect/floor_decal/corner/paleblue{ - dir = 9 - }, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/hall) -"Nv" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 8 - }, -/obj/effect/catwalk_plated, -/turf/simulated/floor/plating, -/area/map_template/oldlab2/engineerhall) -"Nw" = ( -/obj/effect/floor_decal/corner/blue/diagonal{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/mess) -"Nz" = ( -/turf/simulated/floor/reinforced/airless, -/area/map_template/oldlab2/Airlock) -"NC" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 1 - }, -/obj/effect/catwalk_plated, -/turf/simulated/floor/plating, -/area/map_template/oldlab2/Airlock) -"NE" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/power/apc{ - dir = 4; - name = "east bump"; - pixel_x = 24 - }, -/obj/structure/cable/yellow, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/office) -"NG" = ( -/turf/simulated/floor/tiled/techfloor, -/area/map_template/oldlab2/Airlock) -"NH" = ( -/obj/machinery/firealarm{ - dir = 8; - pixel_x = -24 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/cso) -"NL" = ( -/obj/effect/floor_decal/corner/red{ - dir = 6 - }, -/turf/simulated/floor/tiled/dark, -/area/map_template/oldlab2/fixedsecurity) -"NP" = ( -/obj/structure/table/woodentable, -/obj/structure/cable/yellow{ - d2 = 4; - icon_state = "0-4" - }, -/obj/machinery/power/apc{ - dir = 8; - name = "west bump"; - pixel_x = -24 - }, -/turf/simulated/floor/tiled/dark, -/area/map_template/oldlab2/living3) -"NQ" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/medical) -"NU" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 - }, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/freezer, -/area/map_template/oldlab2/bathroom) -"NX" = ( -/obj/effect/floor_decal/corner/research{ - dir = 9 - }, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/effect/floor_decal/corner/research{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/hall) -"NY" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/chem) -"NZ" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 - }, -/turf/simulated/floor/tiled/freezer, -/area/map_template/oldlab2/mess) -"Of" = ( -/obj/effect/floor_decal/corner/research{ - dir = 9 - }, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/effect/floor_decal/corner/research{ - dir = 6 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/lab) -"Oh" = ( -/obj/item/stack/cable_coil{ - pixel_x = 3; - pixel_y = 3 - }, -/turf/simulated/floor/reinforced, -/area/map_template/oldlab2/test1) -"Oj" = ( -/obj/structure/table/rack, -/obj/machinery/alarm{ - dir = 8; - pixel_x = 25 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/chem) -"Op" = ( -/obj/structure/bed/padded, -/obj/item/bedsheet/ce, -/turf/simulated/floor/tiled/dark, -/area/map_template/oldlab2/living) -"Or" = ( -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/oldlab2/hall) -"Ou" = ( -/obj/structure/extinguisher_cabinet{ - pixel_x = 32 - }, -/obj/structure/table/steel_reinforced, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 8 - }, -/turf/simulated/floor/tiled/dark, -/area/map_template/oldlab2/recandlockers) -"Ox" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/effect/floor_decal/corner/research{ - dir = 9 - }, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/effect/floor_decal/corner/research{ - dir = 6 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/lab) -"Oy" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 1 - }, -/obj/machinery/light/small, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/oldlab2/server) -"OB" = ( -/obj/machinery/power/apc{ - dir = 4; - name = "east bump"; - pixel_x = 24 - }, -/obj/structure/cable/yellow{ - d2 = 8; - icon_state = "0-8" - }, -/turf/simulated/floor/tiled/dark, -/area/map_template/oldlab2/living6) -"OD" = ( -/obj/machinery/firealarm{ - dir = 8; - pixel_x = -24 - }, -/turf/simulated/floor/tiled/dark, -/area/map_template/oldlab2/lab) -"OK" = ( -/obj/structure/closet/emcloset, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/chem) -"OM" = ( -/obj/machinery/computer/modular/preset/medical{ - dir = 1; - icon_state = "console" - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/server) -"ON" = ( -/obj/machinery/alarm{ - dir = 1; - pixel_y = -22 - }, -/obj/structure/coatrack, -/turf/simulated/floor/tiled/dark, -/area/map_template/oldlab2/living4) -"OQ" = ( -/obj/structure/kitchenspike, -/turf/simulated/floor/tiled/freezer, -/area/map_template/oldlab2/mess) -"OS" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/door/firedoor, -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/door/airlock/civilian{ - name = "Chief Science Officer" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/oldlab2/cso) -"OT" = ( -/obj/structure/cable/yellow{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/medical) -"OW" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply, -/obj/effect/floor_decal/industrial/warning{ - dir = 8; - icon_state = "warning" - }, -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/lab) -"OX" = ( -/obj/machinery/portable_atmospherics/canister/air/airlock, -/obj/machinery/atmospherics/portables_connector{ - dir = 1 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/oldlab2/Airlock) -"OY" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/door/firedoor, -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/door/airlock/civilian{ - name = "Rec room" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/oldlab2/engineerhall) -"Pa" = ( -/obj/structure/closet/secure_closet/scientist, -/obj/machinery/light{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/recandlockers) -"Pc" = ( -/obj/structure/closet/crate/freezer/rations, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/oldlab2/server) -"Pg" = ( -/obj/machinery/door/firedoor, -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/door/blast/regular{ - dir = 4; - icon_state = "pdoor0"; - id_tag = "labentrance" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/oldlab2/test2) -"Ph" = ( -/obj/structure/bed/padded, -/obj/item/bedsheet/yellow, -/turf/simulated/floor/tiled/dark, -/area/map_template/oldlab2/living2) -"Pk" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/effect/floor_decal/corner/research{ - dir = 10 - }, -/obj/effect/floor_decal/corner/research{ - dir = 5 - }, -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/hall) -"Pp" = ( -/obj/effect/decal/cleanable/blood, -/turf/simulated/floor/reinforced, -/area/map_template/oldlab2/test1) -"Pq" = ( -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/chem) -"Pr" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/effect/floor_decal/industrial/warning{ - dir = 8; - icon_state = "warning" - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/lab) -"Pt" = ( -/obj/structure/closet/l3closet/security, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled/dark, -/area/map_template/oldlab2/recandlockers) -"Pu" = ( -/obj/machinery/portable_atmospherics/powered/pump/filled, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/light/small{ - dir = 8 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/oldlab2/powerandatmos) -"Pv" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/chem) -"Py" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/light/small{ - dir = 1 - }, -/obj/random/junk, -/obj/effect/catwalk_plated, -/turf/simulated/floor/plating, -/area/map_template/oldlab2/server) -"PD" = ( -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/medical) -"PE" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/civilian, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/oldlab2/powerandatmos) -"PN" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/r_n_d/destructive_analyzer, -/obj/effect/floor_decal/industrial/hatch/yellow, -/turf/simulated/floor/tiled/dark, -/area/map_template/oldlab2/lab) -"PO" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/item/device/radio/intercom{ - dir = 8; - pixel_x = 22 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/office) -"PT" = ( -/obj/effect/floor_decal/corner/blue/diagonal{ - dir = 4 - }, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 4 - }, -/obj/machinery/alarm{ - dir = 4; - pixel_x = -22 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/mess) -"PU" = ( -/obj/structure/table/steel_reinforced, -/obj/item/folder/yellow, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/cso) -"PV" = ( -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/portable_atmospherics/powered/scrubber, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/oldlab2/hall) -"Qa" = ( -/obj/effect/floor_decal/corner/blue/diagonal{ - dir = 4 - }, -/obj/structure/bed/chair{ - dir = 8 - }, -/obj/machinery/light/spot{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/mess) -"Qc" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/obj/machinery/firealarm{ - pixel_y = 24 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/oldlab2/server) -"Qg" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/carpet, -/area/map_template/oldlab2/recandlockers) -"Qh" = ( -/obj/machinery/light/small{ - dir = 8 - }, -/obj/machinery/r_n_d/server, -/turf/simulated/floor/bluegrid, -/area/map_template/oldlab2/server) -"Qm" = ( -/obj/effect/floor_decal/industrial/warning, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/oldlab2/lab) -"Qr" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/effect/floor_decal/corner/research{ - dir = 5 - }, -/obj/effect/floor_decal/corner/research{ - dir = 10 - }, -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/lab) -"Qs" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/office) -"Qu" = ( -/obj/machinery/r_n_d/server, -/turf/simulated/floor/bluegrid, -/area/map_template/oldlab2/server) -"Qv" = ( -/obj/structure/closet/crate, -/obj/machinery/alarm{ - dir = 4; - pixel_x = -23 - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/oldlab2/Airlock) -"QE" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/door/firedoor, -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/door/airlock/civilian, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/oldlab2/living) -"QF" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/button/blast_door{ - id_tag = "securityairlockshutter"; - name = "Interior Shutters Control"; - pixel_y = -34 - }, -/obj/machinery/button/blast_door{ - id_tag = "securityairlockwindows"; - name = "Window Shutters Control"; - pixel_y = -26 - }, -/turf/simulated/floor/tiled/dark, -/area/map_template/oldlab2/fixedsecurity) -"QJ" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 8 - }, -/obj/structure/table/standard, -/obj/machinery/alarm{ - dir = 1; - pixel_y = -25 - }, -/obj/machinery/light, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/test1) -"QK" = ( -/obj/structure/table/steel, -/obj/item/storage/toolbox, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/oldlab2/Engineering) -"QL" = ( -/obj/effect/floor_decal/corner/red{ - dir = 9 - }, -/obj/machinery/light{ - dir = 8 - }, -/obj/structure/table/steel_reinforced, -/turf/simulated/floor/tiled/dark, -/area/map_template/oldlab2/fixedsecurity) -"QN" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/effect/floor_decal/spline/fancy/wood{ - dir = 4 - }, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/wood/walnut, -/area/map_template/oldlab2/recandlockers) -"QU" = ( -/obj/effect/wallframe_spawn/reinforced_phoron, -/obj/machinery/door/blast/regular{ - icon_state = "pdoor0"; - id_tag = "testlab3" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/oldlab2/test2) -"QV" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 1 - }, -/obj/machinery/alarm{ - dir = 1; - pixel_y = -22 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/oldlab2/hall) -"QX" = ( -/obj/structure/reagent_dispensers/watertank, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/alarm{ - dir = 8; - pixel_x = 24 - }, -/obj/effect/floor_decal/industrial/hatch/yellow, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/oldlab2/test1) -"QY" = ( -/obj/machinery/light{ - dir = 1 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/hall) -"QZ" = ( -/turf/template_noop, -/area/map_template/oldlab2/Airlock) -"Ra" = ( -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/portable_atmospherics/powered/scrubber, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/oldlab2/powerandatmos) -"Rc" = ( -/obj/effect/floor_decal/corner/blue/diagonal{ - dir = 4 - }, -/obj/item/device/radio/intercom{ - pixel_y = 23 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/mess) -"Rd" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply, -/obj/machinery/alarm{ - dir = 1; - pixel_y = -22 - }, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/machinery/light, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/recandlockers) -"Ro" = ( -/obj/machinery/vending/coffee, -/obj/machinery/atmospherics/unary/vent_pump/on, -/turf/simulated/floor/wood/walnut, -/area/map_template/oldlab2/recandlockers) -"Rs" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/oldlab2/Engineering) -"Rt" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/medical) -"RH" = ( -/obj/machinery/alarm{ - pixel_y = 24 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/hall) -"RP" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/sign/warning/server_room{ - pixel_x = -32 - }, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/server) -"RQ" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/effect/floor_decal/corner/red{ - dir = 6 - }, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/turf/simulated/floor/tiled/dark, -/area/map_template/oldlab2/fixedsecurity) -"RS" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/bed/chair/office/comfy/red{ - dir = 8 - }, -/turf/simulated/floor/tiled/dark, -/area/map_template/oldlab2/fixedsecurity) -"RT" = ( -/obj/machinery/light{ - dir = 4 - }, -/turf/simulated/floor/reinforced, -/area/map_template/oldlab2/test1) -"RX" = ( -/turf/simulated/wall/titanium, -/area/map_template/oldlab2/living6) -"RZ" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/effect/catwalk_plated, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/plating, -/area/map_template/oldlab2/engineerhall) -"Sb" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 - }, -/turf/simulated/floor/tiled/dark, -/area/map_template/oldlab2/recandlockers) -"Sg" = ( -/obj/machinery/dnaforensics, -/obj/structure/table/steel_reinforced, -/turf/simulated/floor/tiled/dark, -/area/map_template/oldlab2/lab) -"Si" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/lab) -"Sm" = ( -/obj/structure/table/woodentable, -/obj/structure/cable/yellow{ - d2 = 4; - icon_state = "0-4" - }, -/obj/machinery/power/apc{ - dir = 8; - name = "west bump"; - pixel_x = -24 - }, -/turf/simulated/floor/tiled/dark, -/area/map_template/oldlab2/living2) -"So" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 8 - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 8; - icon_state = "warning" - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/lab) -"Sq" = ( -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/wall/titanium, -/area/map_template/oldlab2/powerandatmos) -"Ss" = ( -/obj/machinery/firealarm{ - dir = 1; - pixel_y = -24 - }, -/turf/simulated/floor/tiled/dark, -/area/map_template/oldlab2/recandlockers) -"Sv" = ( -/obj/random/junk, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/oldlab2/engineerhall) -"Sw" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/test1) -"Sx" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply, -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/wood/walnut, -/area/map_template/oldlab2/recandlockers) -"SA" = ( -/obj/effect/floor_decal/corner/research{ - dir = 9 - }, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/obj/effect/floor_decal/corner/research{ - dir = 6 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/lab) -"SJ" = ( -/obj/structure/bookcase/manuals/research_and_development, -/turf/simulated/floor/wood/walnut, -/area/map_template/oldlab2/recandlockers) -"SP" = ( -/obj/structure/table/standard, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 8 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/lab) -"SR" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/door/firedoor, -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/door/airlock/vault{ - name = "Server Room" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/oldlab2/server) -"ST" = ( -/obj/machinery/chemical_dispenser/full, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/chem) -"SU" = ( -/obj/machinery/atmospherics/pipe/manifold/visible{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/test2) -"SZ" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 8 - }, -/obj/machinery/alarm{ - dir = 8; - pixel_x = 24 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/server) -"Tb" = ( -/turf/simulated/floor/tiled/techfloor, -/area/map_template/oldlab2/Engineering) -"Tc" = ( -/obj/machinery/door/window/brigdoor/southleft, -/obj/machinery/door/window/brigdoor/northleft, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/door/blast/regular{ - icon_state = "pdoor0"; - id_tag = "testlab2" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/oldlab2/test1) -"Tf" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/alarm{ - pixel_y = 24 - }, -/turf/simulated/floor/tiled/dark, -/area/map_template/oldlab2/recandlockers) -"Ti" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/oldlab2/server) -"Tk" = ( -/obj/machinery/atmospherics/pipe/manifold/visible{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/test2) -"Tl" = ( -/obj/structure/flora/pottedplant/smalltree, -/turf/simulated/floor/tiled/dark, -/area/map_template/oldlab2/living4) -"Tm" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/test1) -"Tn" = ( -/obj/effect/floor_decal/corner/grey/diagonal{ - dir = 4 - }, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 1 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/mess) -"To" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/door/firedoor, -/obj/machinery/door/blast/regular{ - dir = 4; - icon_state = "pdoor0"; - id_tag = "labentrance" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/oldlab2/test2) -"Tp" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/server) -"Tr" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 4 - }, -/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/effect/catwalk_plated, -/turf/simulated/floor/plating, -/area/map_template/oldlab2/engineerhall) -"Tu" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 - }, -/obj/machinery/light/small{ - dir = 1 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/oldlab2/test1) -"Tv" = ( -/obj/structure/table/standard, -/obj/item/roller{ - pixel_y = 16 - }, -/obj/item/roller{ - pixel_y = 8 - }, -/obj/item/roller{ - pixel_y = 16 - }, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 1 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/medical) -"Tw" = ( -/obj/machinery/vending/engivend{ - dir = 4 - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/oldlab2/Engineering) -"TC" = ( -/obj/structure/table/steel_reinforced, -/obj/random/medical, -/obj/structure/extinguisher_cabinet{ - pixel_y = -32 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/medical) -"TD" = ( -/obj/structure/bed/padded, -/obj/item/bedsheet/purple, -/turf/simulated/floor/tiled/dark, -/area/map_template/oldlab2/living2) -"TK" = ( -/obj/effect/floor_decal/corner/grey/diagonal{ - dir = 4 - }, -/obj/structure/mopbucket{ - pixel_x = -11; - pixel_y = 15 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/mess) -"TL" = ( -/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 4 - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 8; - icon_state = "warning" - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/lab) -"TS" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/wood/walnut, -/area/map_template/oldlab2/recandlockers) -"TU" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/effect/floor_decal/corner/research{ - dir = 9 - }, -/obj/effect/floor_decal/corner/research{ - dir = 6 - }, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/hall) -"TV" = ( -/turf/simulated/floor/tiled/dark, -/area/map_template/oldlab2/living4) -"TW" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/chem) -"TY" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/cable/yellow{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/medical) -"TZ" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/oldlab2/server) -"Ua" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/oldlab2/hall) -"Ud" = ( -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/portable_atmospherics/powered/scrubber, -/obj/machinery/light/small, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/oldlab2/hall) -"Ug" = ( -/obj/machinery/light/small{ - dir = 8 - }, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 4; - level = 2 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/test1) -"Um" = ( -/obj/structure/bookcase/manuals/engineering, -/obj/item/book/manual/medical_diagnostics_manual, -/obj/item/book/manual/stasis, -/obj/item/book/manual/anomaly_testing, -/turf/simulated/floor/tiled/dark, -/area/map_template/oldlab2/living4) -"Un" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/effect/floor_decal/corner/paleblue{ - dir = 10 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/medical) -"Uo" = ( -/obj/structure/bookcase/manuals/engineering, -/turf/simulated/floor/wood/walnut, -/area/map_template/oldlab2/recandlockers) -"Ur" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/oldlab2/lab) -"Ut" = ( -/obj/structure/table/standard, -/obj/structure/closet/secure_closet/medical_wall{ - pixel_x = -28 - }, -/obj/random/medical/lite, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/medical) -"Uu" = ( -/obj/machinery/door/blast/regular{ - icon_state = "pdoor0"; - id_tag = "testlab2" - }, -/obj/effect/wallframe_spawn/reinforced_phoron, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/oldlab2/test1) -"Uv" = ( -/obj/structure/table/steel_reinforced, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/oldlab2/lab) -"Uw" = ( -/obj/effect/floor_decal/corner/blue/diagonal{ - dir = 4 - }, -/obj/structure/extinguisher_cabinet{ - pixel_y = -32 - }, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 1 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/mess) -"Ux" = ( -/obj/structure/filingcabinet/filingcabinet{ - pixel_x = -10 - }, -/obj/structure/filingcabinet/filingcabinet{ - pixel_x = 10 - }, -/obj/structure/filingcabinet/filingcabinet, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/server) -"Uy" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/door/airlock/glass/medical{ - name = "Surgery" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/oldlab2/medical) -"UB" = ( -/obj/machinery/power/emitter{ - dir = 8 - }, -/obj/effect/floor_decal/industrial/hatch/yellow, -/turf/simulated/floor/tiled/dark, -/area/map_template/oldlab2/lab) -"UD" = ( -/obj/machinery/atmospherics/unary/tank/air{ - dir = 4 - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/oldlab2/powerandatmos) -"UG" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/freezer, -/area/map_template/oldlab2/bathroom) -"UH" = ( -/obj/structure/extinguisher_cabinet{ - pixel_x = 32 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/chem) -"UV" = ( -/obj/structure/filingcabinet/filingcabinet, -/obj/structure/filingcabinet/filingcabinet{ - pixel_x = -10 - }, -/obj/structure/filingcabinet/filingcabinet{ - pixel_x = 10 - }, -/obj/machinery/light/small{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/server) -"UZ" = ( -/obj/machinery/atmospherics/pipe/manifold/visible{ - dir = 1 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/oldlab2/Airlock) -"Vd" = ( -/turf/simulated/floor/tiled/dark, -/area/map_template/oldlab2/living) -"Vf" = ( -/obj/effect/floor_decal/corner/red{ - dir = 6 - }, -/obj/effect/floor_decal/corner/red{ - dir = 1 - }, -/turf/simulated/floor/tiled/dark, -/area/map_template/oldlab2/fixedsecurity) -"Vg" = ( -/obj/structure/closet/crate/secure/biohazard/alt, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/hall) -"Vj" = ( -/obj/machinery/atmospherics/portables_connector{ - dir = 8 - }, -/obj/machinery/light/small{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/oldlab2/powerandatmos) -"Vl" = ( -/obj/structure/hygiene/urinal{ - pixel_y = 32 - }, -/turf/simulated/floor/tiled/freezer, -/area/map_template/oldlab2/bathroom) -"Vm" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/obj/effect/floor_decal/corner/paleblue{ - dir = 10 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/medical) -"Vn" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 1 - }, -/obj/machinery/alarm{ - dir = 1; - pixel_y = -25 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/test2) -"Vt" = ( -/obj/structure/bed/padded, -/obj/item/bedsheet/purple, -/turf/simulated/floor/tiled/dark, -/area/map_template/oldlab2/living5) -"Vu" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 1; - icon_state = "warning" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark, -/area/map_template/oldlab2/lab) -"Vv" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/test1) -"Vw" = ( -/obj/structure/closet/emcloset, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/lab) -"VB" = ( -/obj/machinery/light{ - dir = 8 - }, -/turf/simulated/floor/reinforced, -/area/map_template/oldlab2/test2) -"VD" = ( -/obj/machinery/photocopier, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/cso) -"VE" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/cso) -"VG" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply, -/turf/simulated/floor/tiled/dark, -/area/map_template/oldlab2/living6) -"VL" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 8 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/lab) -"VM" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 1; - icon_state = "warning" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/test1) -"VO" = ( -/obj/structure/bed/padded, -/obj/structure/cable/yellow{ - d2 = 4; - icon_state = "0-4" - }, -/obj/machinery/power/apc{ - dir = 8; - name = "west bump"; - pixel_x = -24 - }, -/obj/item/bedsheet/hos, -/turf/simulated/floor/tiled/dark, -/area/map_template/oldlab2/living) -"VP" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 8; - icon_state = "warning" - }, -/obj/structure/window/reinforced{ - dir = 4 - }, -/obj/structure/sign/warning/nosmoking_2{ - pixel_y = 32 - }, -/turf/simulated/floor/tiled/dark, -/area/map_template/oldlab2/lab) -"VU" = ( -/obj/structure/closet/radiation, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/light, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/test1) -"VX" = ( -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/cso) -"Wa" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/effect/floor_decal/spline/fancy/wood{ - dir = 8 - }, -/turf/simulated/floor/wood/walnut, -/area/map_template/oldlab2/recandlockers) -"Wc" = ( -/obj/structure/bed/chair/office/light{ - dir = 1 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/medical) -"We" = ( -/turf/simulated/floor/tiled/dark, -/area/map_template/oldlab2/living6) -"Wh" = ( -/obj/effect/floor_decal/corner/blue/diagonal{ - dir = 4 - }, -/obj/machinery/light/spot, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/mess) -"Wk" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/window/reinforced{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark, -/area/map_template/oldlab2/lab) -"Wl" = ( -/obj/structure/table/steel_reinforced, -/obj/item/storage/belt/utility/full, -/obj/machinery/alarm{ - dir = 1; - pixel_y = -22 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/oldlab2/powerandatmos) -"Wo" = ( -/obj/structure/bookcase/manuals/xenoarchaeology, -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/turf/simulated/floor/wood/walnut, -/area/map_template/oldlab2/recandlockers) -"Wq" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply, -/turf/simulated/floor/tiled/dark, -/area/map_template/oldlab2/living5) -"Wu" = ( -/obj/machinery/door/firedoor, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/oldlab2/test1) -"Wv" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/cable/yellow{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/medical) -"Wx" = ( -/obj/structure/closet/emcloset, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/item/inflatable_dispenser, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/hall) -"Wz" = ( -/obj/effect/floor_decal/corner/red{ - dir = 6 - }, -/obj/random/junk, -/turf/simulated/floor/tiled/dark, -/area/map_template/oldlab2/fixedsecurity) -"WA" = ( -/obj/machinery/computer/modular/preset/medical{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/cso) -"WC" = ( -/obj/structure/flora/pottedplant/orientaltree, -/obj/machinery/light_switch{ - pixel_x = 24; - pixel_y = -6 - }, -/turf/simulated/floor/tiled/dark, -/area/map_template/oldlab2/living2) -"WD" = ( -/obj/machinery/atmospherics/unary/vent_pump/tank{ - external_pressure_bound = 0; - external_pressure_bound_default = 0; - icon_state = "map_vent_in"; - id_tag = "test_out"; - internal_pressure_bound = 4000; - internal_pressure_bound_default = 4000; - pressure_checks = 2; - pressure_checks_default = 2; - pump_direction = 0; - use_power = 1 - }, -/turf/simulated/floor/reinforced, -/area/map_template/oldlab2/test2) -"WF" = ( -/obj/structure/sign/double/map/right{ - pixel_y = 32 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/cso) -"WH" = ( -/obj/structure/bed/padded, -/obj/item/bedsheet/hop, -/turf/simulated/floor/tiled/dark, -/area/map_template/oldlab2/living) -"WL" = ( -/obj/effect/floor_decal/industrial/outline/grey, -/obj/structure/window/reinforced{ - dir = 8 - }, -/obj/structure/window/reinforced{ - dir = 4 - }, -/obj/machinery/portable_atmospherics/canister/carbon_dioxide, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/oldlab2/engineerhall) -"WM" = ( -/obj/machinery/alarm{ - dir = 4; - pixel_x = -25 - }, -/obj/machinery/light{ - dir = 8 - }, -/turf/simulated/floor/tiled/dark, -/area/map_template/oldlab2/lab) -"WU" = ( -/turf/simulated/wall/titanium, -/area/map_template/oldlab2/living4) -"WV" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/door/firedoor, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/door/airlock/civilian{ - name = "Engineering Hall" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/oldlab2/engineerhall) -"WW" = ( -/obj/item/stool/padded, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/recandlockers) -"WX" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/test1) -"WY" = ( -/obj/machinery/gibber, -/turf/simulated/floor/tiled/freezer, -/area/map_template/oldlab2/mess) -"Xc" = ( -/obj/machinery/light, -/turf/simulated/floor/carpet, -/area/map_template/oldlab2/recandlockers) -"Xe" = ( -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/portable_atmospherics/powered/scrubber, -/obj/machinery/light/small{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/oldlab2/powerandatmos) -"Xf" = ( -/obj/effect/floor_decal/corner/research{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/test1) -"Xh" = ( -/obj/structure/closet/emcloset, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/recandlockers) -"Xj" = ( -/obj/machinery/telecomms/server, -/turf/simulated/floor/bluegrid, -/area/map_template/oldlab2/server) -"Xm" = ( -/obj/machinery/atmospherics/portables_connector{ - dir = 4 - }, -/obj/machinery/portable_atmospherics/canister/oxygen/prechilled, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/medical) -"Xp" = ( -/obj/machinery/atmospherics/unary/vent_pump/on, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/oldlab2/server) -"Xq" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/door/firedoor, -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/door/airlock/civilian, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/oldlab2/hall) -"Xr" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/oldlab2/test1) -"Xv" = ( -/obj/structure/table/marble, -/obj/effect/floor_decal/corner/grey/diagonal{ - dir = 4 - }, -/obj/item/storage/box/donut{ - pixel_x = -2; - pixel_y = 5 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/mess) -"Xw" = ( -/obj/structure/reagent_dispensers/acid{ - pixel_y = -32 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/chem) -"Xy" = ( -/obj/structure/table/woodentable, -/obj/machinery/atmospherics/unary/vent_pump/on, -/obj/machinery/light{ - dir = 1 - }, -/turf/simulated/floor/tiled/dark, -/area/map_template/oldlab2/living) -"Xz" = ( -/turf/simulated/wall/titanium, -/area/map_template/oldlab2/living) -"XA" = ( -/obj/machinery/button/blast_door{ - id_tag = "securityoutershutters"; - name = "Exterior Shutters Control"; - pixel_x = 32; - pixel_y = 6 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/dark, -/area/map_template/oldlab2/fixedsecurity) -"XD" = ( -/obj/machinery/portable_atmospherics/powered/scrubber, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/oldlab2/engineerhall) -"XG" = ( -/obj/machinery/disposal, -/obj/effect/floor_decal/industrial/hatch/yellow, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/recandlockers) -"XJ" = ( -/obj/effect/floor_decal/corner/blue/diagonal{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/mess) -"XK" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply, -/turf/simulated/floor/tiled/dark, -/area/map_template/oldlab2/fixedsecurity) -"XL" = ( -/obj/structure/table/steel_reinforced, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/office) -"XM" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/chem) -"XP" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 4 - }, -/obj/machinery/microscope, -/obj/structure/table/steel_reinforced, -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/turf/simulated/floor/tiled/dark, -/area/map_template/oldlab2/lab) -"XR" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/effect/floor_decal/corner/research{ - dir = 9 - }, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/effect/floor_decal/corner/research{ - dir = 6 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/lab) -"XT" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/bed/chair/office/light{ - dir = 1 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/chem) -"XU" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 1 - }, -/obj/machinery/power/apc{ - name = "south bump"; - pixel_y = -24 - }, -/obj/structure/cable/yellow, -/obj/machinery/light, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/test2) -"XV" = ( -/obj/structure/flora/pottedplant/unusual, -/turf/simulated/floor/tiled/dark, -/area/map_template/oldlab2/living6) -"XW" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled/freezer, -/area/map_template/oldlab2/recandlockers) -"XX" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/item/device/radio/intercom{ - pixel_y = 23 - }, -/turf/simulated/floor/tiled/dark, -/area/map_template/oldlab2/recandlockers) -"XY" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 1; - icon_state = "warning" - }, -/obj/machinery/atmospherics/pipe/simple/visible{ - dir = 10 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/test2) -"Yb" = ( -/obj/machinery/power/apc{ - dir = 8; - name = "west bump"; - pixel_x = -24 - }, -/obj/structure/cable/yellow{ - d2 = 4; - icon_state = "0-4" - }, -/obj/machinery/light/small{ - dir = 8 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/oldlab2/Engineering) -"Yc" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/oldlab2/Airlock) -"Ye" = ( -/obj/item/device/radio/intercom{ - pixel_y = 23 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/recandlockers) -"Yf" = ( -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 - }, -/turf/simulated/floor/tiled/dark, -/area/map_template/oldlab2/living5) -"Yg" = ( -/obj/effect/floor_decal/corner/grey/diagonal{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/mess) -"Yi" = ( -/turf/simulated/floor/carpet, -/area/map_template/oldlab2/recandlockers) -"Yl" = ( -/obj/structure/table/steel_reinforced, -/obj/random/firstaid, -/obj/random/medical/lite, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/medical) -"Ym" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/firealarm{ - dir = 4; - pixel_x = 21 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/medical) -"Yn" = ( -/obj/structure/table/steel_reinforced, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/oldlab2/server) -"Yo" = ( -/obj/machinery/light, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/lab) -"Yp" = ( -/obj/effect/wallframe_spawn/reinforced/titanium, -/obj/machinery/door/blast/regular{ - icon_state = "pdoor0"; - id_tag = "securityairlockwindows" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/oldlab2/fixedsecurity) -"Yr" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/oldlab2/lab) -"Yt" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/tiled/dark, -/area/map_template/oldlab2/fixedsecurity) -"Yu" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply, -/obj/effect/catwalk_plated, -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/plating, -/area/map_template/oldlab2/engineerhall) -"Yv" = ( -/turf/simulated/floor/wood/walnut, -/area/map_template/oldlab2/recandlockers) -"Yz" = ( -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/test1) -"YD" = ( -/obj/machinery/artifact_harvester, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/light, -/turf/simulated/floor/tiled/dark, -/area/map_template/oldlab2/lab) -"YF" = ( -/turf/template_noop, -/area/template_noop) -"YJ" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 1 - }, -/obj/effect/catwalk_plated, -/obj/machinery/firealarm{ - pixel_y = 24 - }, -/turf/simulated/floor/plating, -/area/map_template/oldlab2/powerandatmos) -"YK" = ( -/obj/item/clothing/suit/storage/hazardvest, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/effect/catwalk_plated, -/obj/structure/cable/yellow{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/plating, -/area/map_template/oldlab2/Engineering) -"YN" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 1; - icon_state = "warning" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/test1) -"YO" = ( -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/light{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/chem) -"YQ" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 1 - }, -/turf/simulated/floor/wood/walnut, -/area/map_template/oldlab2/recandlockers) -"YV" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 1 - }, -/obj/structure/closet/crate/freezer, -/obj/item/reagent_containers/ivbag/nanoblood, -/obj/item/reagent_containers/ivbag/nanoblood, -/obj/item/reagent_containers/ivbag/nanoblood, -/obj/item/reagent_containers/ivbag/nanoblood, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/medical) -"YW" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 1 - }, -/obj/machinery/light, -/obj/machinery/firealarm{ - dir = 1; - pixel_y = -24 - }, -/turf/simulated/floor/tiled/dark, -/area/map_template/oldlab2/living3) -"YX" = ( -/obj/machinery/light_switch{ - pixel_x = 24; - pixel_y = -6 - }, -/turf/simulated/floor/tiled/dark, -/area/map_template/oldlab2/living) -"YY" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/effect/floor_decal/corner/paleblue{ - dir = 9 - }, -/obj/effect/floor_decal/corner/paleblue{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/medical) -"Ze" = ( -/obj/structure/bed/chair/comfy/brown{ - dir = 8 - }, -/turf/simulated/floor/wood/walnut, -/area/map_template/oldlab2/recandlockers) -"Zf" = ( -/obj/machinery/light{ - dir = 8 - }, -/obj/machinery/firealarm{ - dir = 8; - pixel_x = -24 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/test1) -"Zi" = ( -/obj/machinery/suit_storage_unit/science, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/oldlab2/Airlock) -"Zk" = ( -/obj/machinery/smartfridge/foods, -/obj/effect/floor_decal/corner/grey/diagonal{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/mess) -"Zm" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply, -/obj/structure/bed/chair/office/light{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/oldlab2/powerandatmos) -"Zs" = ( -/obj/structure/table/steel_reinforced, -/obj/effect/floor_decal/corner/red{ - dir = 6 - }, -/obj/effect/floor_decal/corner/red{ - dir = 8 - }, -/turf/simulated/floor/tiled/dark, -/area/map_template/oldlab2/fixedsecurity) -"Zz" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/effect/catwalk_plated, -/turf/simulated/floor/plating, -/area/map_template/oldlab2/powerandatmos) -"ZA" = ( -/obj/machinery/papershredder, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/cso) -"ZB" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 4 - }, -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/light/small, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/oldlab2/test2) -"ZE" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 1 - }, -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/catwalk_plated, -/turf/simulated/floor/plating, -/area/map_template/oldlab2/server) -"ZG" = ( -/obj/machinery/light{ - dir = 1 - }, -/obj/structure/table/woodentable, -/obj/machinery/chemical_dispenser/bar_coffee/full{ - pixel_y = 12 - }, -/turf/simulated/floor/carpet, -/area/map_template/oldlab2/recandlockers) -"ZH" = ( -/obj/structure/table/steel_reinforced, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/light{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/cso) -"ZK" = ( -/obj/machinery/light{ - dir = 8 - }, -/turf/simulated/floor/wood/walnut, -/area/map_template/oldlab2/recandlockers) -"ZN" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/firealarm{ - pixel_y = 24 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldlab2/chem) -"ZP" = ( -/obj/machinery/organ_printer/robot/mapped, -/obj/effect/floor_decal/industrial/hatch/yellow, -/obj/effect/floor_decal/industrial/warning{ - dir = 8; - icon_state = "warning" - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/oldlab2/lab) -"ZU" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/turf/simulated/floor/tiled/dark, -/area/map_template/oldlab2/recandlockers) -"ZW" = ( -/obj/structure/bed/padded, -/obj/machinery/light_switch{ - pixel_x = -24 - }, -/obj/item/bedsheet/red, -/turf/simulated/floor/tiled/dark, -/area/map_template/oldlab2/living5) -"ZZ" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 8 - }, -/obj/machinery/light/small{ - dir = 4 - }, -/obj/machinery/firealarm{ - dir = 4; - pixel_x = 21 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/oldlab2/Engineering) - -(1,1,1) = {" -YF -YF -YF -YF -YF -YF -YF -YF -YF -Ma -Ma -Ma -Ma -Ma -YF -YF -YF -YF -YF -YF -YF -xg -xg -xg -xg -xg -nx -nx -nx -nx -eT -eT -eT -eT -eT -eT -eT -Jj -Jj -Jj -Jj -Jj -Jj -Jj -Jj -Jj -YF -YF -YF -YF -"} -(2,1,1) = {" -YF -YF -YF -YF -YF -YF -YF -YF -YF -Ma -oW -vb -xL -Ma -YF -YF -YF -YF -YF -YF -YF -xg -Uv -JF -Ae -oc -nx -Dc -Cd -Dg -eT -qm -ld -wl -ST -jL -Mk -Jj -Qu -no -gj -Qh -gj -qG -Qu -Jj -YF -YF -YF -YF -"} -(3,1,1) = {" -YF -YF -YF -YF -YF -YF -YF -YF -YF -Ma -Tu -Bd -nT -Ma -xg -xg -xg -xg -xg -xg -xg -xg -vK -Gv -cP -Ce -nx -ew -Ua -zk -eT -Mp -Pv -NY -NY -Pv -Mk -Jj -Qu -kR -GL -Qu -GL -hd -eV -Jj -YF -YF -YF -YF -"} -(4,1,1) = {" -YF -YF -Ma -Ma -Ma -Ma -Ma -Ma -Ma -Ma -Xr -QX -Ia -Ma -xg -Sg -hg -jD -OD -WM -bG -xg -wt -Ce -cP -Df -nx -Or -Ua -GZ -eT -GP -Fy -NY -NY -bF -ik -Jj -Qu -kR -GL -Qu -GL -hd -Qu -Jj -YF -YF -YF -YF -"} -(5,1,1) = {" -YF -YF -Ma -dp -dp -dp -dp -dp -dp -Ma -lL -Ma -Ma -Ma -xg -XP -xn -qC -iE -zf -Kx -xg -ET -gK -Ur -KR -nx -nx -Ua -GZ -eT -ZN -uh -NY -NY -jJ -Mk -Jj -Qu -kR -GL -hd -GL -hd -Qu -Jj -Jj -Jj -Jj -YF -"} -(6,1,1) = {" -YF -YF -Ma -dp -BH -LY -BH -iZ -Mq -wX -Sw -Zf -Eh -vw -xg -cW -Vu -Ic -En -fB -YD -xg -et -JH -Qm -ZP -nx -sd -Ki -QV -eT -NY -aW -NY -NY -DG -Mk -Jj -Qc -en -AX -vI -pm -ji -Oy -Jj -BZ -Fh -Jj -YF -"} -(7,1,1) = {" -YF -YF -Ma -dp -BH -BH -BH -GX -yZ -YN -rR -Yz -cB -VU -xg -jx -ee -Ic -PN -fB -nW -xg -gu -JH -bf -JG -nx -Hi -cm -Ud -eT -zC -zp -XT -Lz -XM -Xw -Jj -Xj -hd -Xj -Ti -Qu -Bc -DR -Jj -hL -jA -Jj -YF -"} -(8,1,1) = {" -YF -YF -Ma -dp -BH -BH -Pp -BB -Kt -VM -hR -wu -qQ -cR -xg -UB -ee -DP -zc -tS -hI -Gt -Yr -lS -Ds -eL -nx -Mv -cm -PV -xA -Pq -pe -Hd -ag -Mk -nk -Jj -Xj -cE -Xj -Ti -Qu -Mw -Yn -Jj -Xp -MM -Jj -YF -"} -(9,1,1) = {" -YF -YF -Ma -dp -BH -BH -BH -BH -yZ -sw -Mi -Ma -Ma -Ma -xg -VP -fm -Aw -uw -Aw -Wk -xg -xg -xg -xg -xg -nx -nx -ow -nx -eT -YO -Pv -NY -ag -Mk -ik -Jj -Jj -Jj -Jj -SR -Jj -Jj -Jj -Jj -Jj -lX -Jj -YF -"} -(10,1,1) = {" -YF -YF -Ma -dp -BH -RT -BH -Bw -ue -lC -Xf -Ma -GU -Ug -xg -mr -So -Pr -OW -Pr -TL -gU -tR -VL -jV -Ao -nx -to -sC -KA -CV -Az -oh -Hw -tN -fl -fl -Eu -Hc -oF -RP -Ai -Tp -bd -Tp -aB -FU -LD -Jj -YF -"} -(11,1,1) = {" -YF -YF -Ma -dp -dp -dp -dp -dp -dp -rp -ef -Wu -vZ -DW -kO -KH -XR -Of -gG -Of -Ox -Of -cY -eX -Of -SA -eE -NX -rn -Hq -eT -wH -tz -Oj -TW -UH -OK -Jj -Ux -HH -UV -SZ -Lw -xV -OM -Jj -Py -hd -Jj -YF -"} -(12,1,1) = {" -YF -YF -Ma -dp -BH -LY -BH -iZ -Uu -sw -ru -Ma -Ma -Ma -xg -KY -yF -yw -Qr -yw -Si -yw -yF -Qr -yw -Yo -nx -tv -Pk -iH -eT -eT -eT -eT -Ks -eT -eT -Jj -Jj -Jj -Jj -Jj -Jj -Jj -Jj -Jj -ZE -fi -Jj -YF -"} -(13,1,1) = {" -YF -YF -Ma -dp -BH -BH -Oh -GX -kX -sw -Jo -pI -Iy -Et -xg -cS -dH -yw -Qr -yd -hH -cL -SP -Qr -yw -Vw -nx -wK -sy -ex -rZ -hX -Ut -uU -el -fA -Tv -iI -Xm -MD -rd -hJ -qx -uH -Yl -rZ -zX -mg -Jj -YF -"} -(14,1,1) = {" -YF -YF -Ma -dp -BH -mD -BH -og -Tc -ks -Dk -Vv -Tm -Ej -xD -xD -xD -xD -OS -xD -xD -kL -kL -nh -kL -kL -nx -BO -cu -iH -rZ -oo -Wc -Am -Wv -MX -MX -xN -dq -iK -tt -TY -sI -sJ -Rt -Ge -CN -Gp -Jj -YF -"} -(15,1,1) = {" -YF -YF -Ma -dp -BH -BH -As -AW -kX -sw -xd -wP -gf -QJ -xD -pp -NH -Ib -Jh -ZA -xD -FX -mR -tb -ep -DB -nx -RH -Pk -iH -rZ -Lo -Am -OT -vp -Am -Am -NQ -Am -PD -Am -Am -BW -Am -TC -rZ -qg -Jj -Jj -Jj -"} -(16,1,1) = {" -YF -YF -Ma -dp -BH -RT -BH -bz -kX -sw -WX -Yz -kA -cX -xD -vg -VX -VX -VE -VD -xD -gx -eR -Qs -zU -xj -nx -oJ -BA -Nt -gw -EY -EY -EQ -BF -ql -rE -YY -rE -dN -Nj -hP -hP -hP -hP -rZ -rT -hd -dD -Jj -"} -(17,1,1) = {" -YF -YF -Bj -zA -zA -zA -zA -zA -zA -Kn -sr -rB -wC -Kn -xD -Fv -VX -PU -VE -bm -xD -Hp -yz -Qs -XL -XL -nx -vv -Pk -iH -rZ -dT -Am -ca -Ag -Am -Am -Am -De -Un -Nj -hP -dY -Gk -mF -rZ -mH -ih -KV -Jj -"} -(18,1,1) = {" -YF -YF -Bj -zA -kq -VB -kq -ES -vY -ey -ec -ps -Tk -vJ -xD -WF -kZ -bk -Kv -jw -xD -MN -yz -Qs -zU -xj -nx -QY -ym -ip -rZ -bb -Am -nC -dz -Iu -Am -Am -ui -Vm -rt -Uy -zW -AH -yI -rZ -AR -TZ -jW -Jj -"} -(19,1,1) = {" -YF -YF -Bj -zA -kq -kq -kq -kq -QU -ot -dR -mE -SU -vN -xD -Hv -WA -ZH -lN -HW -xD -fr -PO -nu -NE -rl -nx -Wx -Pk -vf -rZ -Kh -Ym -AG -qI -BJ -YV -Am -ui -Lp -cO -hP -vC -EN -vL -rZ -ut -Gn -Pc -Jj -"} -(20,1,1) = {" -YF -YF -Bj -zA -kq -lt -kq -kq -EL -ot -dR -Ih -oK -XU -xD -xD -xD -xD -xD -xD -xD -kL -kL -kL -kL -kL -nx -nx -Xq -nx -rZ -rZ -rZ -rZ -rZ -rZ -rZ -rZ -rZ -rZ -rZ -rZ -rZ -rZ -rZ -rZ -Jj -hV -Jj -Jj -"} -(21,1,1) = {" -YF -YF -Bj -zA -kq -kq -kq -kq -QU -XY -ID -DD -pV -Vn -GY -hw -qY -vU -op -rY -Tb -Yb -Tw -Id -vl -da -nx -vv -yy -iH -DQ -Vg -Vg -mG -aK -ea -tT -PT -mx -tT -ea -Iz -ea -tT -PT -ea -ea -kj -mG -YF -"} -(22,1,1) = {" -YF -YF -Bj -zA -kq -sK -kq -WD -fc -xm -Fx -IM -bT -tG -GY -XD -uj -RZ -RZ -fR -eo -YK -sk -uv -eo -eo -oq -kW -Dj -Ns -iH -iH -oY -mG -Rc -Mg -hD -XJ -kj -hD -hD -fd -JO -Fp -XJ -hD -hD -kj -mG -YF -"} -(23,1,1) = {" -YF -YF -Bj -zA -zA -zA -zA -zA -zA -Bj -Bj -rL -Pg -Bj -GY -BS -qo -op -ly -rY -yB -Rs -rm -eb -Tb -zu -nx -nK -iH -DV -Ey -Ey -Ac -mG -aK -hD -hD -XJ -kj -Mg -hD -fd -JO -JO -XJ -Mg -hD -kj -mG -YF -"} -(24,1,1) = {" -YF -YF -Bj -Bj -Bj -Bj -Bj -Bj -Bj -Bj -Bj -ao -ZB -Bj -GY -pD -sL -Sv -CQ -rY -nd -jT -dC -GV -lj -Gx -nx -Iq -iH -Bk -aH -aH -Ka -mG -aK -Fq -Fq -XJ -kj -Fq -Fq -fd -Fq -Fq -XJ -Fq -Fq -Hb -mG -YF -"} -(25,1,1) = {" -YF -YF -Bj -Bj -Bj -Bj -Bj -Bj -Bj -Bj -Bj -To -rP -Bj -GY -rC -Fd -op -KP -rY -QK -LN -dC -ZZ -gJ -oz -nx -cl -aH -Ez -zw -TU -TU -DN -Nw -Jk -jd -pj -Jm -pN -Jk -ac -Nw -gS -ov -Mm -Mm -fy -mG -YF -"} -(26,1,1) = {" -YF -YF -JJ -JJ -DI -bS -gZ -DI -JJ -Fu -xt -CP -dw -eY -GY -op -qo -op -WL -Dv -Dv -Dv -tH -Dv -Dv -Dv -Dv -Dv -Dv -Mt -Dv -Dv -nx -mG -mG -mG -mG -mG -mG -mG -mG -mG -qA -kj -Nf -ea -ea -aK -mG -YF -"} -(27,1,1) = {" -YF -YF -JJ -JJ -sn -bx -KL -KL -Jc -aL -MZ -MQ -Tr -Nv -WV -RZ -uS -FS -dj -Dv -UD -UD -hr -MI -Pu -lu -Dv -Kw -KE -aa -rU -Dv -Dv -mG -Ad -iv -id -fG -hM -fG -Tn -Zk -aK -kj -Nf -hD -hD -Gf -mG -YF -"} -(28,1,1) = {" -YF -YF -JJ -JJ -jY -Jg -Yt -aS -JJ -kP -vu -op -op -jj -GY -op -qo -Sv -op -Dv -YJ -dJ -gh -jX -Zz -Zz -PE -km -zO -Zm -Wl -Dv -xC -mG -zl -pu -rK -qZ -qZ -Yg -Yg -Ch -aK -kj -Nf -hD -hD -EX -mG -YF -"} -(29,1,1) = {" -YF -YF -JJ -JJ -eA -RQ -Wz -Cq -JJ -Fk -vu -op -Du -pd -GY -op -qo -op -ur -Dv -UD -UD -Vj -qv -Xe -Ra -Dv -xy -wJ -KZ -nX -Sq -ak -mG -nZ -pu -hQ -qZ -qZ -bH -Yg -Xv -Md -kj -Nf -Fq -Fq -Wh -mG -YF -"} -(30,1,1) = {" -YF -JJ -JJ -JJ -JJ -dZ -JJ -JJ -JJ -gb -ku -lp -gb -gb -GY -DA -qo -op -cb -Dv -Dv -Dv -Dv -Dv -Dv -Dv -Dv -Dv -Dv -Dv -Dv -Dv -Dv -mG -Ew -ke -nn -qq -cv -cv -fs -qZ -Md -kj -xe -oj -oj -Uw -mG -YF -"} -(31,1,1) = {" -YF -JJ -ry -yt -QL -AP -AL -ER -vy -Qv -hp -HF -yY -My -GY -Sv -qo -op -Bb -Xz -Op -Vd -VO -Dq -Xz -TD -Sm -FW -bD -Lr -NP -zv -zT -mG -mG -mG -GG -mG -mG -Yg -MT -qZ -Md -kj -Nf -ea -ea -Gf -mG -YF -"} -(32,1,1) = {" -YF -JJ -vz -RS -Yt -XK -QF -Cg -Yp -ob -BN -pF -oM -FH -GY -pD -Yu -jH -DT -Xz -Xy -hC -LT -sj -Xz -tf -Fw -JB -bD -xB -wp -YW -zT -mG -CK -ix -cs -OQ -mG -eS -MT -qZ -Md -kj -Nf -hD -hD -No -mG -YF -"} -(33,1,1) = {" -YF -JJ -wQ -Ng -XA -rb -hm -rJ -Yp -xf -BG -DE -jG -Ii -GY -op -qo -op -ft -Xz -WH -Vd -fK -GR -Xz -co -pq -CR -bD -Ly -GS -nj -zT -mG -LW -NZ -xk -vG -mG -TK -MT -qZ -Md -kj -Nf -hD -Mg -Wh -mG -YF -"} -(34,1,1) = {" -YF -JJ -Vf -NL -om -om -Ca -Zs -Yp -xf -Bm -Yc -NG -FH -GY -hw -qo -dX -bM -Xz -Ck -YX -fK -bq -Xz -WC -pq -Ph -bD -lf -GS -ch -zT -mG -CK -EH -WY -eQ -mG -cN -cT -yl -HU -KU -ty -Qa -Fq -aK -mG -YF -"} -(35,1,1) = {" -Lx -JJ -tV -tV -tV -tV -tV -tV -JJ -IA -NC -qy -jG -Zi -GY -GY -OY -GY -GY -Xz -Xz -Xz -QE -Xz -Xz -bD -JT -bD -bD -zT -Bs -zT -zT -mG -mG -mG -mG -mG -mG -mG -mG -mG -mG -Jb -mG -mG -mG -mG -mG -YF -"} -(36,1,1) = {" -QZ -Nz -Nz -Nz -Nz -Nz -Nz -Nz -gb -jB -sH -xh -oM -fv -gg -Ro -Sx -ZK -la -gg -bg -eZ -pT -oN -gi -FL -pT -Gj -EB -FL -pT -bg -gg -XG -Dw -hl -xI -KN -xI -xI -yL -xI -oB -rG -gg -vc -jr -Pt -gg -YF -"} -(37,1,1) = {" -QZ -Nz -Nz -Nz -Nz -Nz -Nz -Nz -gb -uX -DJ -NG -NG -Zi -gg -uz -wg -Yv -Yv -gg -hh -Dt -pT -jr -Dt -jr -pT -jr -IK -jr -pT -BU -gg -oB -oB -WW -WW -qu -WW -WW -Cx -WW -oB -EM -gg -Tf -jr -Pt -gg -YF -"} -(38,1,1) = {" -QZ -Nz -Nz -Nz -Nz -Nz -Nz -qJ -gb -uX -UZ -FJ -yR -OX -gg -rH -LI -QN -QN -mB -fI -tP -qS -sO -mh -sO -qS -sO -kF -sO -qS -sO -Gg -At -zY -At -At -DF -At -At -mf -Ay -At -Rd -gg -XX -hs -of -gg -YF -"} -(39,1,1) = {" -QZ -Nz -Nz -Nz -Nz -Nz -Nz -Nz -gb -gb -aU -er -gb -gb -gg -KW -Qg -Yi -Yi -gg -sM -Dt -pT -jr -Dt -jr -pT -Ij -IK -jr -pT -BU -gg -Ye -te -WW -WW -hn -WW -WW -hn -nJ -oB -He -dQ -Sb -ZU -Pt -gg -YF -"} -(40,1,1) = {" -QZ -Nz -Nz -Nz -Nz -Nz -Nz -GW -gb -Li -tE -NG -DH -AI -gg -ZG -Qg -Yi -Xc -gg -ws -aC -pT -qk -Ou -kY -pT -qk -dr -kY -pT -bg -gg -Xh -te -Pa -xI -nV -xI -xI -vd -nJ -ka -oB -gg -va -jr -Ss -gg -YF -"} -(41,1,1) = {" -QZ -Nz -Nz -Nz -Nz -Nz -Nz -Nz -iU -Li -tE -NG -UZ -Mh -gg -cq -Qg -Yi -HK -gg -WU -WU -cy -WU -Bi -Bi -zm -Bi -RX -RX -CG -RX -gg -gg -bR -gg -qO -qO -qO -qO -qO -yQ -qO -qO -qO -qO -qO -qO -qO -YF -"} -(42,1,1) = {" -QZ -Nz -Nz -Nz -Nz -Nz -Nz -rs -iU -Li -tE -NG -UZ -vA -gg -hE -Qg -Yi -Yi -gg -Um -Ls -lH -Tl -Bi -ZW -BD -dg -RX -Ep -DK -XV -gg -fh -XW -vo -qO -JP -wv -wv -wv -DU -qO -kz -fJ -qO -fJ -kz -qO -YF -"} -(43,1,1) = {" -QZ -Nz -Nz -Nz -Nz -Nz -Nz -Nz -gb -Li -tE -NG -UZ -rz -gg -lk -Wa -El -hG -gg -qc -TV -lH -ON -Bi -LH -BD -xa -RX -yo -DK -lh -gg -lq -XW -jI -qO -Vl -kz -kz -kz -Ix -qO -kz -Hh -qO -LG -kz -qO -YF -"} -(44,1,1) = {" -QZ -Nz -Nz -Nz -Nz -Nz -Nz -HC -gb -Li -tE -NG -UZ -dI -gg -Uo -lK -TS -EF -gg -nf -KD -Lk -kT -Bi -uI -Wq -IZ -RX -xl -VG -ul -gg -lq -XW -jI -qO -Vl -kz -he -kz -so -qO -Gs -qO -qO -qO -Gs -qO -YF -"} -(45,1,1) = {" -QZ -Nz -xx -nw -nw -iC -gC -gC -gb -Li -qN -MC -qN -rz -gg -SJ -aR -Yv -Ze -gg -bA -TV -sb -Co -Bi -pr -oa -Vt -RX -HT -kQ -fn -gg -tm -Jl -rk -qO -yC -NU -UG -sz -Ig -mC -mC -mC -mC -mC -uB -qO -YF -"} -(46,1,1) = {" -Lx -gb -gb -gb -gb -gb -gb -gb -gb -gb -gb -gb -gb -gb -gg -gg -tK -Yv -gg -gg -WU -WU -WU -WU -Bi -LH -oa -LH -RX -yo -kQ -yo -gg -gg -gg -gg -qO -tk -nE -kz -CF -kz -qO -Gs -qO -qO -qO -Gs -qO -YF -"} -(47,1,1) = {" -YF -YF -YF -YF -YF -YF -YF -YF -YF -YF -YF -YF -YF -YF -gg -lv -aR -Yv -Yv -ZK -bO -lb -lb -YQ -gg -An -Yf -xZ -RX -mq -Jv -We -RX -kz -rw -kz -kz -kz -Do -kz -ll -kz -qO -kz -Hh -qO -LG -kz -qO -YF -"} -(48,1,1) = {" -YF -YF -YF -YF -YF -YF -YF -YF -YF -YF -YF -YF -YF -YF -gg -FB -qL -Yv -dS -fL -lz -Yv -Dh -Hj -gg -Dx -Me -nr -RX -Hm -xX -ck -RX -Gs -qO -Gs -qO -Gs -qO -Gs -qO -Gs -qO -kz -CY -qO -CY -kz -qO -YF -"} -(49,1,1) = {" -YF -YF -YF -YF -YF -YF -YF -YF -YF -YF -YF -YF -YF -YF -gg -Wo -uY -uD -kD -kD -zs -eu -jF -wh -gg -LH -zi -LH -RX -yo -OB -yo -RX -ns -qO -ns -qO -ns -qO -sq -qO -ns -qO -qO -qO -qO -qO -qO -qO -YF -"} -(50,1,1) = {" -YF -YF -YF -YF -YF -YF -YF -YF -YF -YF -YF -YF -YF -YF -gg -gg -gg -gg -gg -gg -gg -gg -gg -gg -gg -Bi -Bi -Bi -RX -RX -RX -RX -RX -qO -qO -qO -qO -qO -qO -qO -qO -qO -qO -YF -YF -YF -YF -YF -YF -YF -"} diff --git a/maps/random_ruins/exoplanet_ruins/oldpod/oldpod.dm b/maps/random_ruins/exoplanet_ruins/oldpod/oldpod.dm deleted file mode 100644 index da613c59033a0..0000000000000 --- a/maps/random_ruins/exoplanet_ruins/oldpod/oldpod.dm +++ /dev/null @@ -1,15 +0,0 @@ -/datum/map_template/ruin/exoplanet/oldpod - name = "old pod" - id = "oldpod" - description = "A now unused, crashed escape pod." - suffixes = list("oldpod/oldpod.dmm") - spawn_cost = 0.5 - template_flags = TEMPLATE_FLAG_CLEAR_CONTENTS | TEMPLATE_FLAG_NO_RUINS - ruin_tags = RUIN_HUMAN|RUIN_WRECK - apc_test_exempt_areas = list( - /area/map_template/oldpod = NO_APC - ) - -/area/map_template/oldpod - name = "\improper Abandoned Escape Pod" - icon_state = "blue" \ No newline at end of file diff --git a/maps/random_ruins/exoplanet_ruins/oldpod/oldpod.dmm b/maps/random_ruins/exoplanet_ruins/oldpod/oldpod.dmm deleted file mode 100644 index a9e46cb5a552e..0000000000000 --- a/maps/random_ruins/exoplanet_ruins/oldpod/oldpod.dmm +++ /dev/null @@ -1,641 +0,0 @@ -//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE -"ab" = ( -/obj/structure/shuttle/engine/propulsion{ - dir = 1 - }, -/turf/simulated/floor/plating, -/area/map_template/oldpod) -"ad" = ( -/obj/effect/wallframe_spawn/reinforced/hull, -/turf/simulated/floor/plating, -/area/map_template/oldpod) -"ak" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 6; - icon_state = "warning" - }, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/obj/structure/bed, -/obj/structure/iv_drip, -/obj/item/bedsheet/medical, -/turf/simulated/floor/tiled/white/monotile, -/area/map_template/oldpod) -"am" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/monotile, -/area/map_template/oldpod) -"as" = ( -/obj/effect/decal/cleanable/filth, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/monotile, -/area/map_template/oldpod) -"at" = ( -/obj/effect/decal/cleanable/blood/drip, -/obj/effect/decal/cleanable/blood, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/monotile, -/area/map_template/oldpod) -"au" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/monotile, -/area/map_template/oldpod) -"av" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/monotile, -/area/map_template/oldpod) -"az" = ( -/obj/effect/decal/cleanable/blood/drip, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/monotile, -/area/map_template/oldpod) -"aA" = ( -/obj/random/firstaid, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/monotile, -/area/map_template/oldpod) -"aB" = ( -/obj/effect/decal/cleanable/blood/drip, -/obj/effect/decal/cleanable/filth, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/monotile, -/area/map_template/oldpod) -"aC" = ( -/obj/item/clothing/head/helmet/space/emergency, -/obj/item/clothing/suit/space/emergency, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/monotile, -/area/map_template/oldpod) -"aH" = ( -/obj/structure/cable/cyan{ - d2 = 4; - icon_state = "0-4" - }, -/obj/item/frame/apc, -/obj/effect/decal/cleanable/dirt, -/obj/item/cell/crap/empty, -/obj/item/module/power_control, -/turf/simulated/floor/tiled/monotile, -/area/map_template/oldpod) -"aI" = ( -/obj/structure/cable/cyan{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/effect/decal/cleanable/filth, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/monotile, -/area/map_template/oldpod) -"aK" = ( -/obj/effect/decal/cleanable/blood/drip, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/monotile, -/area/map_template/oldpod) -"aL" = ( -/obj/effect/decal/cleanable/blood/drip, -/obj/effect/decal/cleanable/blood/drip, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/monotile, -/area/map_template/oldpod) -"aM" = ( -/obj/effect/landmark/corpse/scientist, -/obj/item/melee/baton/cattleprod, -/obj/item/material/shard, -/obj/effect/decal/cleanable/blood, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/monotile, -/area/map_template/oldpod) -"aO" = ( -/obj/machinery/door/airlock/external{ - name = "escape pod airlock" - }, -/turf/simulated/floor/plating, -/area/map_template/oldpod) -"aP" = ( -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/structure/cable/cyan, -/obj/machinery/light/small{ - dir = 8 - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 5; - icon_state = "warning" - }, -/obj/machinery/power/smes/buildable/power_shuttle, -/turf/simulated/floor/plating, -/area/map_template/oldpod) -"aQ" = ( -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/monotile, -/area/map_template/oldpod) -"aR" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 9; - icon_state = "warning" - }, -/obj/structure/window/reinforced{ - dir = 8 - }, -/obj/structure/window/reinforced{ - dir = 1 - }, -/obj/structure/table/standard{ - name = "plastic table frame" - }, -/obj/item/storage/firstaid/surgery, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/white/monotile, -/area/map_template/oldpod) -"aS" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/white/monotile, -/area/map_template/oldpod) -"aT" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 5; - icon_state = "warning" - }, -/obj/structure/window/reinforced{ - dir = 1 - }, -/obj/structure/closet/crate/freezer/rations, -/obj/effect/decal/cleanable/dirt, -/obj/item/gun/projectile/pirate, -/obj/item/gun/projectile/pirate, -/obj/item/gun/projectile/pirate, -/obj/item/gun/projectile/pirate, -/turf/simulated/floor/tiled/white/monotile, -/area/map_template/oldpod) -"aU" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 9 - }, -/turf/simulated/floor/plating, -/area/map_template/oldpod) -"aV" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 5 - }, -/obj/machinery/light/small{ - dir = 4 - }, -/obj/item/clothing/head/helmet/space/emergency, -/turf/simulated/floor/plating, -/area/map_template/oldpod) -"aW" = ( -/obj/machinery/power/terminal{ - dir = 1 - }, -/obj/structure/cable/cyan{ - d2 = 2; - icon_state = "0-2" - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 4 - }, -/obj/structure/closet/crate, -/obj/item/tank/oxygen, -/turf/simulated/floor/plating, -/area/map_template/oldpod) -"aX" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 8 - }, -/obj/structure/window/reinforced{ - dir = 8 - }, -/obj/machinery/optable, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/blood, -/turf/simulated/floor/tiled/white/monotile, -/area/map_template/oldpod) -"aY" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/white/monotile, -/area/map_template/oldpod) -"aZ" = ( -/obj/machinery/sleeper{ - dir = 8 - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 4 - }, -/obj/machinery/light/small{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/white/monotile, -/area/map_template/oldpod) -"ba" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 10 - }, -/obj/item/clothing/suit/space/emergency, -/turf/simulated/floor/plating, -/area/map_template/oldpod) -"bb" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 6 - }, -/turf/simulated/floor/plating, -/area/map_template/oldpod) -"bc" = ( -/obj/machinery/power/port_gen/pacman, -/obj/structure/cable/cyan, -/obj/effect/floor_decal/industrial/warning{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/map_template/oldpod) -"bd" = ( -/obj/effect/landmark/corpse/bridgeofficer, -/obj/effect/decal/cleanable/blood, -/turf/simulated/floor/tiled/monotile, -/area/map_template/oldpod) -"be" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 10; - icon_state = "warning" - }, -/obj/structure/window/reinforced{ - dir = 8 - }, -/obj/structure/table/standard{ - name = "plastic table frame" - }, -/obj/random/firstaid, -/obj/random/firstaid, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/white/monotile, -/area/map_template/oldpod) -"bf" = ( -/obj/effect/floor_decal/industrial/warning, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/white/monotile, -/area/map_template/oldpod) -"bh" = ( -/obj/effect/decal/cleanable/blood/drip, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/filth, -/obj/structure/broken_cryo, -/turf/simulated/floor/tiled/techmaint, -/area/map_template/oldpod) -"ch" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/obj/effect/landmark/corpse/engineer, -/obj/item/gun/energy/retro, -/turf/simulated/floor/tiled/monotile, -/area/map_template/oldpod) -"dj" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/floor_decal/industrial/warning{ - dir = 1 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldpod) -"go" = ( -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/portable_atmospherics/canister/empty, -/obj/machinery/atmospherics/portables_connector, -/turf/simulated/floor/plating, -/area/map_template/oldpod) -"iV" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/tiled/monotile, -/area/map_template/oldpod) -"kA" = ( -/obj/effect/decal/cleanable/filth, -/obj/effect/decal/cleanable/dirt, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/structure/table/rack, -/obj/item/clothing/suit/space/emergency, -/obj/item/clothing/head/helmet/space/emergency, -/obj/item/tank/oxygen_emergency_double, -/turf/simulated/floor/plating, -/area/map_template/oldpod) -"mp" = ( -/obj/structure/table/standard{ - name = "plastic table frame" - }, -/obj/random/tech_supply, -/obj/random/tech_supply, -/obj/random/tech_supply, -/obj/random/tech_supply, -/obj/random/tech_supply, -/obj/item/pickaxe, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/monotile, -/area/map_template/oldpod) -"od" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/obj/item/disk/secret_project, -/turf/simulated/floor/tiled/monotile, -/area/map_template/oldpod) -"qV" = ( -/obj/item/frame/air_alarm, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/obj/item/airalarm_electronics, -/obj/structure/bed/chair/shuttle/black{ - dir = 4 - }, -/turf/simulated/floor/tiled/monotile, -/area/map_template/oldpod) -"sN" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/table, -/turf/simulated/floor/tiled/monotile, -/area/map_template/oldpod) -"ut" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/broken_cryo, -/turf/simulated/floor/tiled/techmaint, -/area/map_template/oldpod) -"vL" = ( -/obj/effect/landmark/corpse/doctor, -/obj/effect/decal/cleanable/blood, -/obj/effect/decal/cleanable/dirt, -/obj/structure/bed/chair/shuttle/black{ - dir = 4 - }, -/turf/simulated/floor/tiled/monotile, -/area/map_template/oldpod) -"wl" = ( -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/structure/table/rack, -/obj/item/crowbar/brace_jack, -/turf/simulated/floor/plating, -/area/map_template/oldpod) -"wJ" = ( -/obj/machinery/door/firedoor, -/obj/effect/wallframe_spawn/reinforced/titanium, -/turf/simulated/floor/plating, -/area/map_template/oldpod) -"xv" = ( -/obj/machinery/light/small{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/obj/structure/bed/chair/shuttle/black{ - dir = 4 - }, -/turf/simulated/floor/tiled/monotile, -/area/map_template/oldpod) -"yj" = ( -/obj/machinery/door/firedoor, -/obj/structure/grille, -/obj/item/stack/material/rods, -/obj/item/stack/material/rods, -/obj/item/stack/material/rods, -/obj/item/stack/material/rods, -/obj/item/material/shard, -/obj/item/material/shard, -/obj/item/material/shard, -/obj/item/material/shard, -/obj/structure/wall_frame/titanium, -/turf/simulated/floor/plating, -/area/map_template/oldpod) -"FH" = ( -/turf/simulated/wall/r_titanium, -/area/map_template/oldpod) -"He" = ( -/obj/machinery/light/small{ - dir = 4 - }, -/obj/effect/decal/cleanable/filth, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/obj/effect/floor_decal/industrial/warning{ - dir = 1 - }, -/obj/structure/closet/hydrant{ - pixel_x = 24 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldpod) -"Jj" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/floor_decal/industrial/warning{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldpod) -"Kh" = ( -/obj/effect/wallframe_spawn/reinforced/titanium, -/turf/simulated/floor/plating, -/area/map_template/oldpod) -"MA" = ( -/obj/effect/paint/red, -/turf/simulated/wall/r_titanium, -/area/map_template/oldpod) -"Oy" = ( -/obj/effect/decal/cleanable/blood, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/monotile, -/area/map_template/oldpod) -"Ps" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/oldpod) -"Pt" = ( -/obj/machinery/door/firedoor, -/obj/effect/decal/cleanable/dirt, -/obj/effect/wallframe_spawn/reinforced/titanium, -/turf/simulated/floor/plating, -/area/map_template/oldpod) -"Tx" = ( -/obj/effect/decal/cleanable/blood/drip, -/obj/effect/decal/cleanable/blood, -/obj/effect/decal/cleanable/dirt, -/obj/structure/bed/chair/shuttle/black{ - dir = 4 - }, -/turf/simulated/floor/tiled/monotile, -/area/map_template/oldpod) -"Uw" = ( -/obj/effect/decal/cleanable/filth, -/obj/effect/decal/cleanable/dirt, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/portable_atmospherics/canister/air/airlock, -/obj/machinery/atmospherics/portables_connector, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plating, -/area/map_template/oldpod) -"Yb" = ( -/obj/structure/shuttle/engine/heater{ - dir = 1 - }, -/obj/structure/window/reinforced, -/turf/simulated/floor/plating, -/area/map_template/oldpod) - -(1,1,1) = {" -MA -MA -FH -FH -Pt -wJ -FH -FH -FH -FH -"} -(2,1,1) = {" -ab -Yb -vL -xv -qV -Tx -ad -aU -ba -Kh -"} -(3,1,1) = {" -MA -MA -am -as -az -am -aO -aV -bb -aO -"} -(4,1,1) = {" -MA -wl -am -at -aA -aH -FH -FH -FH -FH -"} -(5,1,1) = {" -MA -Uw -iV -au -aB -aI -aP -aW -bc -Kh -"} -(6,1,1) = {" -MA -go -Oy -av -aC -ch -aQ -aK -bd -wJ -"} -(7,1,1) = {" -MA -kA -Jj -Ps -mp -aK -aR -aX -be -FH -"} -(8,1,1) = {" -MA -MA -ut -dj -sN -aL -aS -aY -bf -FH -"} -(9,1,1) = {" -ab -Yb -bh -He -od -aM -aT -aZ -ak -FH -"} -(10,1,1) = {" -MA -MA -FH -FH -wJ -yj -FH -FH -FH -FH -"} diff --git a/maps/random_ruins/exoplanet_ruins/playablecolony/colony.dmi b/maps/random_ruins/exoplanet_ruins/playablecolony/colony.dmi deleted file mode 100644 index bc94bfe57c3e1..0000000000000 Binary files a/maps/random_ruins/exoplanet_ruins/playablecolony/colony.dmi and /dev/null differ diff --git a/maps/random_ruins/exoplanet_ruins/playablecolony/colony.dmm b/maps/random_ruins/exoplanet_ruins/playablecolony/colony.dmm deleted file mode 100644 index b1ec9d18ea482..0000000000000 --- a/maps/random_ruins/exoplanet_ruins/playablecolony/colony.dmm +++ /dev/null @@ -1,10225 +0,0 @@ -//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE -"aa" = ( -/turf/template_noop, -/area/template_noop) -"ab" = ( -/turf/simulated/wall/r_wall, -/area/template_noop) -"ac" = ( -/turf/simulated/wall/r_wall, -/area/map_template/colony/command) -"ad" = ( -/obj/machinery/door/firedoor, -/obj/effect/wallframe_spawn/reinforced_phoron, -/turf/simulated/floor/plating, -/area/map_template/colony/command) -"ae" = ( -/turf/simulated/wall/r_wall, -/area/map_template/colony/tcomms) -"af" = ( -/obj/structure/grille, -/turf/simulated/floor/exoplanet/concrete, -/area/template_noop) -"ag" = ( -/obj/structure/table/steel_reinforced, -/obj/item/paper_bin, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/colony/command) -"ah" = ( -/obj/structure/table/steel_reinforced, -/obj/item/implantcase/imprinting, -/obj/item/implantcase/imprinting, -/obj/item/implantcase/imprinting, -/obj/item/implanter, -/obj/effect/floor_decal/corner/red{ - dir = 9 - }, -/obj/effect/floor_decal/corner/red{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony/tcomms) -"ai" = ( -/obj/structure/table/steel_reinforced, -/obj/item/implantpad, -/obj/item/reagent_containers/syringe/drugs, -/obj/item/reagent_containers/syringe/drugs, -/obj/item/reagent_containers/syringe/drugs, -/obj/machinery/alarm{ - locked = 0; - pixel_y = 20 - }, -/obj/effect/floor_decal/corner/red{ - dir = 5 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony/tcomms) -"aj" = ( -/obj/structure/catwalk, -/turf/simulated/floor/exoplanet/concrete, -/area/template_noop) -"ak" = ( -/turf/simulated/wall, -/area/map_template/colony/tcomms) -"al" = ( -/obj/machinery/power/solar, -/obj/structure/cable{ - d2 = 4; - icon_state = "0-4" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/template_noop) -"am" = ( -/obj/effect/floor_decal/corner/red{ - dir = 9 - }, -/obj/machinery/light{ - dir = 8 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony/tcomms) -"an" = ( -/obj/structure/table/steel_reinforced, -/obj/effect/floor_decal/corner/red{ - dir = 5 - }, -/obj/item/device/encryptionkey/map_preset/playablecolony, -/obj/item/device/encryptionkey/map_preset/playablecolony, -/obj/item/device/encryptionkey/map_preset/playablecolony, -/obj/item/device/encryptionkey/map_preset/playablecolony, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony/tcomms) -"ao" = ( -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony) -"ap" = ( -/obj/effect/floor_decal/techfloor{ - dir = 9 - }, -/obj/effect/floor_decal/corner/blue, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony/command) -"aq" = ( -/obj/effect/submap_landmark/joinable_submap/colony, -/turf/template_noop, -/area/template_noop) -"ar" = ( -/turf/simulated/wall/r_wall, -/area/map_template/colony/engineering) -"as" = ( -/obj/machinery/atmospherics/unary/vent_pump/on, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony/tcomms) -"at" = ( -/turf/simulated/wall/r_wall, -/area/map_template/colony/dorms) -"au" = ( -/turf/simulated/wall/r_wall, -/area/map_template/colony/medbay) -"av" = ( -/obj/structure/table/steel_reinforced, -/obj/machinery/button/blast_door{ - id_tag = "colsecarm"; - name = "Armory Secure Access" - }, -/obj/machinery/button/blast_door{ - id_tag = "colarm"; - name = "Armory Blast Door Control"; - pixel_y = 8 - }, -/obj/item/card/id/merchant{ - desc = "this card can be used to access the Colony's telepad to exchange goods."; - name = "trade array access card" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/colony/command) -"aw" = ( -/turf/simulated/wall/r_wall, -/area/map_template/colony/surgery) -"ax" = ( -/obj/structure/filingcabinet/chestdrawer, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/colony/command) -"ay" = ( -/obj/machinery/computer/modular/preset/merchant, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/colony/command) -"az" = ( -/turf/simulated/wall, -/area/map_template/colony/dorms) -"aA" = ( -/obj/machinery/merchant_pad, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/colony/command) -"aB" = ( -/turf/simulated/wall, -/area/map_template/colony/medbay) -"aC" = ( -/obj/item/gun/energy/gun/small, -/obj/item/device/flashlight/upgraded, -/obj/item/crowbar/prybar, -/obj/item/clothing/under/captain_fly, -/obj/item/clothing/under/color/blackjumpshorts, -/obj/item/clothing/under/frontier, -/obj/item/clothing/under/hazard, -/obj/item/clothing/under/suit_jacket/female, -/obj/item/clothing/under/suit_jacket/charcoal, -/obj/item/clothing/under/syndicate, -/obj/item/clothing/under/det/grey, -/obj/item/clothing/under/casual_pants/baggy, -/obj/item/clothing/under/casual_pants/youngfolksjeans, -/obj/item/clothing/suit/storage/toggle/bomber, -/obj/item/clothing/suit/storage/hooded/wintercoat/miner, -/obj/item/clothing/suit/storage/hooded/wintercoat, -/obj/item/clothing/suit/storage/toggle/brown_jacket, -/obj/item/clothing/suit/storage/toggle/hoodie/nt, -/obj/item/clothing/suit/storage/toggle/hoodie/smw, -/obj/item/clothing/suit/storage/toggle/track/gcc, -/obj/item/device/radio/map_preset/playablecolony, -/obj/structure/closet/shipping_wall{ - pixel_y = -28 - }, -/turf/simulated/floor/carpet, -/area/map_template/colony/command) -"aD" = ( -/obj/structure/flora/pottedplant/unusual{ - desc = "Steve's distant cousin."; - name = "Randy" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/colony/command) -"aE" = ( -/obj/structure/table/steel_reinforced, -/obj/random/contraband, -/obj/random/contraband, -/obj/random/contraband, -/obj/random/contraband, -/obj/random/contraband, -/obj/random/contraband, -/obj/item/stack/material/tritium/fifty, -/obj/item/stack/material/deuterium/fifty, -/obj/item/stack/material/deuterium/fifty, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony/tcomms) -"aF" = ( -/turf/simulated/wall/r_wall, -/area/map_template/colony/atmospherics) -"aG" = ( -/turf/simulated/wall, -/area/map_template/colony/surgery) -"aH" = ( -/obj/structure/closet/crate, -/obj/item/stock_parts/circuitboard/fusion/core_control, -/obj/item/stock_parts/circuitboard/fusion_core, -/obj/item/stock_parts/circuitboard/fusion_fuel_compressor, -/obj/item/stock_parts/circuitboard/fusion_fuel_control, -/obj/item/stock_parts/circuitboard/fusion_injector, -/obj/item/stock_parts/circuitboard/fusion_injector, -/obj/item/stock_parts/circuitboard/fusion_injector, -/obj/item/stock_parts/circuitboard/fusion_injector, -/obj/item/stock_parts/circuitboard/fusion_injector, -/obj/item/stock_parts/circuitboard/fusion_injector, -/obj/item/stock_parts/circuitboard/gyrotron_control, -/obj/item/stock_parts/manipulator/pico, -/obj/item/stock_parts/manipulator/pico, -/obj/item/stock_parts/manipulator/pico, -/obj/item/stock_parts/manipulator/pico, -/obj/item/stock_parts/manipulator/pico, -/obj/item/stock_parts/manipulator/pico, -/obj/item/stock_parts/micro_laser/ultra, -/obj/item/stock_parts/micro_laser/ultra, -/obj/item/stock_parts/micro_laser/ultra, -/obj/item/stock_parts/micro_laser/ultra, -/obj/item/stock_parts/matter_bin/super, -/obj/item/stock_parts/matter_bin/super, -/obj/item/stock_parts/matter_bin/super, -/obj/item/stock_parts/matter_bin/super, -/obj/item/stock_parts/matter_bin/super, -/obj/item/stock_parts/console_screen, -/obj/item/stock_parts/console_screen, -/obj/item/stock_parts/console_screen, -/obj/item/stock_parts/console_screen, -/obj/item/stock_parts/console_screen, -/obj/item/stock_parts/scanning_module/phasic, -/obj/item/stock_parts/scanning_module/phasic, -/obj/item/stock_parts/scanning_module/phasic, -/obj/item/stock_parts/subspace/crystal, -/obj/item/stock_parts/capacitor/super, -/obj/item/stock_parts/capacitor/super, -/obj/item/stock_parts/capacitor/super, -/obj/item/stock_parts/capacitor/super, -/obj/machinery/light/small{ - dir = 1 - }, -/turf/simulated/floor/airless, -/area/map_template/colony/command) -"aI" = ( -/turf/simulated/wall, -/area/map_template/colony/messhall) -"aJ" = ( -/obj/machinery/door/firedoor, -/obj/effect/wallframe_spawn/reinforced_phoron, -/turf/simulated/floor/plating, -/area/map_template/colony) -"aK" = ( -/turf/simulated/wall/r_wall, -/area/map_template/colony/messhall) -"aL" = ( -/obj/machinery/door/firedoor, -/obj/effect/wallframe_spawn/reinforced_phoron, -/turf/simulated/floor/plating, -/area/map_template/colony/engineering) -"aM" = ( -/obj/structure/catwalk, -/obj/structure/cable{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/turf/simulated/floor/exoplanet/concrete, -/area/template_noop) -"aN" = ( -/turf/simulated/wall, -/area/map_template/colony/engineering) -"aO" = ( -/turf/simulated/wall/r_wall, -/area/map_template/colony/jail) -"aP" = ( -/turf/simulated/wall, -/area/map_template/colony/bathroom) -"aQ" = ( -/turf/simulated/wall, -/area/map_template/colony/commons) -"aR" = ( -/obj/effect/floor_decal/techfloor{ - dir = 1 - }, -/obj/effect/floor_decal/corner/blue{ - dir = 10 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony/command) -"aS" = ( -/turf/simulated/wall/r_wall, -/area/map_template/colony/commons) -"aT" = ( -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/colony/engineering) -"aU" = ( -/turf/simulated/wall/r_wall, -/area/map_template/colony/armory) -"aV" = ( -/obj/effect/floor_decal/techfloor{ - dir = 1 - }, -/obj/effect/floor_decal/corner/blue{ - dir = 10 - }, -/obj/effect/floor_decal/techfloor/hole/right{ - dir = 1 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony/command) -"aW" = ( -/obj/structure/bed/chair/comfy/brown{ - dir = 1 - }, -/obj/effect/floor_decal/techfloor{ - dir = 1 - }, -/obj/effect/floor_decal/corner/blue{ - dir = 10 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony/command) -"aX" = ( -/obj/machinery/atmospherics/unary/vent_pump/on, -/obj/effect/floor_decal/techfloor{ - dir = 1 - }, -/obj/effect/floor_decal/corner/blue{ - dir = 10 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony/command) -"aY" = ( -/obj/machinery/alarm{ - locked = 0; - pixel_y = 20 - }, -/obj/effect/floor_decal/techfloor{ - dir = 1 - }, -/obj/effect/floor_decal/corner/blue{ - dir = 10 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony/command) -"aZ" = ( -/obj/structure/catwalk, -/obj/structure/cable{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/exoplanet/concrete, -/area/template_noop) -"ba" = ( -/turf/simulated/wall/r_wall, -/area/map_template/colony/hydroponics) -"bb" = ( -/obj/effect/floor_decal/techfloor{ - dir = 5 - }, -/obj/effect/floor_decal/corner/blue{ - dir = 8 - }, -/obj/effect/floor_decal/techfloor/hole/right{ - dir = 1 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony/command) -"bc" = ( -/obj/machinery/power/tracker, -/obj/structure/cable{ - d2 = 4; - icon_state = "0-4" - }, -/turf/simulated/floor/tiled/steel_ridged, -/area/template_noop) -"bd" = ( -/turf/simulated/wall/r_wall, -/area/map_template/colony) -"be" = ( -/obj/structure/catwalk, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/cable{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/turf/simulated/floor/exoplanet/concrete, -/area/template_noop) -"bf" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 8 - }, -/obj/structure/cable{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony/command) -"bg" = ( -/obj/effect/submap_landmark/spawnpoint/colonist_spawn, -/obj/structure/bed/padded, -/obj/item/bedsheet/hop, -/obj/machinery/light/small{ - dir = 8; - icon_state = "bulb1" - }, -/turf/simulated/floor/carpet, -/area/map_template/colony/command) -"bh" = ( -/turf/simulated/wall/r_wall, -/area/map_template/colony/airlock) -"bi" = ( -/obj/structure/closet/crate/freezer/rations, -/obj/effect/floor_decal/techfloor{ - dir = 9 - }, -/obj/item/storage/mre/menu10, -/obj/item/storage/mre/menu9, -/obj/item/storage/mre/random, -/obj/item/storage/mre/random, -/obj/item/storage/mre/random, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony) -"bj" = ( -/obj/structure/closet/firecloset, -/obj/effect/floor_decal/techfloor{ - dir = 1 - }, -/obj/item/device/flashlight/lamp/floodlamp, -/obj/random/firstaid, -/obj/random/firstaid, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony) -"bk" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony/command) -"bl" = ( -/obj/structure/curtain/black, -/turf/simulated/floor/wood, -/area/map_template/colony/command) -"bm" = ( -/obj/machinery/door/firedoor, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/effect/wallframe_spawn/reinforced_phoron, -/turf/simulated/floor/plating, -/area/map_template/colony/engineering) -"bn" = ( -/obj/effect/floor_decal/techfloor{ - dir = 8 - }, -/obj/effect/floor_decal/corner/blue{ - dir = 6 - }, -/obj/machinery/light{ - dir = 8 - }, -/obj/machinery/recharge_station, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony/command) -"bo" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/floor_decal/techfloor, -/obj/machinery/light, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony/command) -"bp" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/floor_decal/techfloor{ - dir = 6 - }, -/obj/effect/floor_decal/corner/blue{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/item/device/radio/intercom/map_preset/playablecolony{ - dir = 1; - pixel_y = -28 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony/command) -"bq" = ( -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/colony/atmospherics) -"br" = ( -/turf/simulated/floor/carpet/green, -/area/map_template/colony/messhall) -"bs" = ( -/obj/structure/closet/crate, -/obj/item/storage/briefcase/inflatable, -/obj/item/storage/briefcase/inflatable, -/obj/item/storage/briefcase/inflatable, -/obj/item/device/oxycandle, -/obj/item/device/oxycandle, -/obj/item/device/oxycandle, -/obj/item/device/oxycandle, -/obj/item/device/oxycandle, -/obj/item/device/oxycandle, -/obj/item/device/oxycandle, -/obj/item/device/oxycandle, -/obj/item/device/oxycandle, -/obj/item/device/oxycandle, -/obj/item/device/oxycandle, -/obj/item/device/oxycandle, -/obj/item/device/oxycandle, -/obj/effect/floor_decal/techfloor{ - dir = 5 - }, -/obj/item/device/radio/intercom/map_preset/playablecolony{ - dir = 8; - pixel_x = 22 - }, -/obj/machinery/alarm{ - locked = 0; - pixel_y = 20 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony) -"bt" = ( -/obj/structure/cable{ - d2 = 4; - icon_state = "0-4" - }, -/obj/machinery/power/terminal{ - dir = 8 - }, -/obj/effect/floor_decal/techfloor{ - dir = 9 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony/engineering) -"bu" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/floor_decal/corner/red{ - dir = 9 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony/tcomms) -"bv" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 - }, -/obj/structure/cable{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony/tcomms) -"bw" = ( -/obj/structure/table/steel_reinforced, -/obj/random/contraband, -/obj/random/contraband, -/obj/random/contraband, -/obj/random/contraband, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony/tcomms) -"bx" = ( -/obj/effect/floor_decal/techfloor{ - dir = 9 - }, -/obj/effect/floor_decal/corner/blue, -/obj/item/device/radio/intercom/map_preset/playablecolony{ - dir = 4; - pixel_x = -21 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony) -"by" = ( -/obj/structure/curtain/open/shower, -/turf/simulated/floor/tiled/white, -/area/map_template/colony/bathroom) -"bz" = ( -/obj/machinery/door/firedoor, -/obj/effect/wallframe_spawn/reinforced_phoron, -/turf/simulated/floor/plating, -/area/map_template/colony/medbay) -"bA" = ( -/obj/machinery/power/smes/buildable/max_cap_in_out, -/obj/structure/cable{ - d2 = 2; - icon_state = "0-2" - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/light{ - dir = 1 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/colony/engineering) -"bB" = ( -/obj/structure/catwalk, -/obj/structure/cable{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/turf/simulated/floor/exoplanet/concrete, -/area/template_noop) -"bC" = ( -/obj/effect/floor_decal/techfloor{ - dir = 6 - }, -/obj/effect/floor_decal/corner/blue{ - dir = 1 - }, -/obj/structure/closet/firecloset, -/obj/item/device/flashlight/lamp/floodlamp, -/obj/random/firstaid, -/obj/random/firstaid, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony/command) -"bD" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 4 - }, -/obj/effect/floor_decal/techfloor{ - dir = 10 - }, -/obj/effect/floor_decal/corner/blue{ - dir = 4 - }, -/obj/machinery/computer/arcade/orion_trail, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony/command) -"bE" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/power/apc{ - locked = 0; - name = "south bump"; - pixel_y = -28 - }, -/obj/structure/cable{ - d2 = 4; - icon_state = "0-4" - }, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 4 - }, -/obj/effect/floor_decal/techfloor, -/obj/effect/floor_decal/corner/blue{ - dir = 5 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony/command) -"bF" = ( -/turf/simulated/floor/tiled/dark, -/area/map_template/colony/jail) -"bG" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 1 - }, -/obj/machinery/power/apc{ - locked = 0; - name = "south bump"; - pixel_y = -28 - }, -/obj/structure/cable, -/obj/machinery/telecomms/bus/map_preset/playablecolony, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony/tcomms) -"bH" = ( -/obj/machinery/atmospherics/pipe/simple/heat_exchanging{ - dir = 6 - }, -/turf/simulated/floor/reinforced/nitrogen, -/area/map_template/colony/atmospherics) -"bI" = ( -/obj/structure/catwalk, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/cable{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/turf/simulated/floor/exoplanet/concrete, -/area/template_noop) -"bJ" = ( -/obj/machinery/atmospherics/pipe/simple/heat_exchanging{ - dir = 4 - }, -/turf/simulated/wall/r_wall, -/area/map_template/colony/atmospherics) -"bK" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 8 - }, -/obj/effect/floor_decal/techfloor, -/obj/effect/floor_decal/corner/blue{ - dir = 5 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony) -"bL" = ( -/obj/machinery/atmospherics/pipe/simple/heat_exchanging{ - dir = 6 - }, -/turf/simulated/floor/reinforced/oxygen, -/area/map_template/colony/atmospherics) -"bM" = ( -/obj/structure/catwalk, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/exoplanet/concrete, -/area/template_noop) -"bN" = ( -/obj/machinery/atmospherics/pipe/simple/heat_exchanging/junction, -/turf/simulated/floor/reinforced/carbon_dioxide, -/area/map_template/colony/atmospherics) -"bO" = ( -/obj/machinery/power/terminal{ - dir = 8 - }, -/obj/structure/cable{ - d2 = 4; - icon_state = "0-4" - }, -/obj/effect/floor_decal/techfloor{ - dir = 10 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony/engineering) -"bP" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/structure/cable{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/effect/floor_decal/techfloor, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony/engineering) -"bQ" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/floor_decal/techfloor{ - dir = 6 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony/engineering) -"bR" = ( -/obj/structure/catwalk, -/obj/structure/cable{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/structure/cable{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/turf/simulated/floor/exoplanet/concrete, -/area/template_noop) -"bS" = ( -/obj/machinery/atmospherics/pipe/simple/heat_exchanging{ - dir = 10 - }, -/obj/machinery/air_sensor{ - id_tag = "c1" - }, -/turf/simulated/floor/reinforced/nitrogen, -/area/map_template/colony/atmospherics) -"bT" = ( -/obj/structure/catwalk, -/obj/structure/cable{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/exoplanet/concrete, -/area/template_noop) -"bU" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 4 - }, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/cable{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/effect/floor_decal/techfloor, -/obj/effect/floor_decal/corner/blue{ - dir = 5 - }, -/obj/effect/floor_decal/techfloor/hole/right, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony/command) -"bV" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 8 - }, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/effect/floor_decal/techfloor{ - dir = 6 - }, -/obj/effect/floor_decal/corner/blue{ - dir = 1 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony) -"bW" = ( -/obj/machinery/atmospherics/pipe/simple/heat_exchanging{ - dir = 10 - }, -/obj/machinery/air_sensor{ - id_tag = "c2" - }, -/turf/simulated/floor/reinforced/oxygen, -/area/map_template/colony/atmospherics) -"bX" = ( -/obj/effect/floor_decal/corner/red{ - dir = 9 - }, -/obj/item/device/radio/intercom/map_preset/playablecolony{ - dir = 4; - pixel_x = -21 - }, -/obj/machinery/telecomms/broadcaster/map_preset/playablecolony, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony/tcomms) -"bY" = ( -/obj/machinery/atmospherics/pipe/simple/heat_exchanging{ - dir = 10 - }, -/obj/machinery/air_sensor{ - id_tag = "c3" - }, -/turf/simulated/floor/reinforced/carbon_dioxide, -/area/map_template/colony/atmospherics) -"bZ" = ( -/obj/machinery/door/firedoor, -/obj/effect/wallframe_spawn/reinforced_phoron, -/turf/simulated/floor/plating, -/area/map_template/colony/surgery) -"ca" = ( -/obj/structure/cable{ - d2 = 2; - icon_state = "0-2" - }, -/obj/effect/floor_decal/industrial/hatch/orange, -/obj/machinery/alarm{ - locked = 0; - pixel_y = 20 - }, -/obj/machinery/light{ - dir = 1 - }, -/obj/machinery/power/port_gen/pacman/mrs, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/colony/engineering) -"cb" = ( -/obj/structure/cable{ - d2 = 8; - icon_state = "0-8" - }, -/obj/effect/floor_decal/techfloor{ - dir = 5 - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/power/solar_control/autostart, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony/engineering) -"cc" = ( -/obj/effect/wallframe_spawn/reinforced, -/obj/machinery/door/firedoor, -/turf/simulated/floor/plating, -/area/map_template/colony/medbay) -"ce" = ( -/obj/machinery/atmospherics/pipe/simple/heat_exchanging, -/obj/machinery/atmospherics/unary/outlet_injector{ - frequency = 1441; - id = "cn2n" - }, -/turf/simulated/floor/reinforced/nitrogen, -/area/map_template/colony/atmospherics) -"cf" = ( -/obj/structure/catwalk, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/power/emitter/gyrotron{ - req_lock_access = list() - }, -/turf/simulated/floor/exoplanet/concrete, -/area/template_noop) -"cg" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/power/smes/buildable/max_cap_in_out, -/obj/structure/cable{ - d2 = 2; - icon_state = "0-2" - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/colony/engineering) -"ch" = ( -/obj/machinery/atmospherics/pipe/simple/heat_exchanging{ - dir = 9 - }, -/obj/machinery/atmospherics/unary/vent_pump/siphon/on/atmos/tank{ - id_tag = "cn2o" - }, -/turf/simulated/floor/reinforced/nitrogen, -/area/map_template/colony/atmospherics) -"ci" = ( -/obj/structure/catwalk, -/obj/structure/cable{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/turf/simulated/floor/exoplanet/concrete, -/area/template_noop) -"cj" = ( -/obj/structure/table/steel_reinforced, -/obj/item/spacecash/bundle/c1000, -/obj/random/cash, -/obj/random/cash, -/obj/random/cash, -/obj/random/cash, -/obj/random/cash, -/obj/random/cash, -/obj/random/cash, -/obj/random/cash, -/obj/random/cash, -/obj/random/cash, -/obj/random/cash, -/obj/random/cash, -/obj/random/cash, -/obj/random/cash, -/obj/random/cash, -/obj/random/cash, -/obj/random/cash, -/obj/item/spacecash/bundle/c1000, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony/tcomms) -"ck" = ( -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/door/airlock/glass/command, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony/command) -"cl" = ( -/obj/machinery/atmospherics/pipe/simple/visible/black, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/colony/atmospherics) -"cm" = ( -/obj/machinery/atmospherics/pipe/simple/visible{ - dir = 5 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony/atmospherics) -"cn" = ( -/obj/effect/floor_decal/techfloor{ - dir = 10 - }, -/obj/machinery/light/small{ - dir = 8 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony) -"co" = ( -/obj/machinery/atmospherics/pipe/simple/visible{ - dir = 9 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony/atmospherics) -"cp" = ( -/obj/machinery/atmospherics/pipe/manifold/visible/black{ - dir = 8 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony/atmospherics) -"cq" = ( -/obj/structure/grille, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/cable{ - d2 = 4; - icon_state = "0-4" - }, -/turf/simulated/floor/exoplanet/concrete, -/area/template_noop) -"cr" = ( -/obj/structure/grille, -/obj/structure/cable{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/structure/cable{ - d2 = 2; - icon_state = "0-2" - }, -/turf/simulated/floor/exoplanet/concrete, -/area/template_noop) -"cs" = ( -/obj/structure/grille, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/cable{ - d2 = 2; - icon_state = "0-2" - }, -/turf/simulated/floor/exoplanet/concrete, -/area/template_noop) -"ct" = ( -/obj/machinery/atmospherics/pipe/simple/heat_exchanging, -/obj/machinery/atmospherics/pipe/simple/visible/black{ - dir = 5 - }, -/obj/effect/wallframe_spawn/reinforced_phoron, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/colony/atmospherics) -"cu" = ( -/obj/machinery/atmospherics/pipe/manifold/visible/black{ - dir = 4 - }, -/obj/effect/wallframe_spawn/reinforced_phoron, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/colony/atmospherics) -"cv" = ( -/obj/machinery/atmospherics/pipe/simple/visible/fuel, -/obj/effect/wallframe_spawn/reinforced_phoron, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/colony/atmospherics) -"cw" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 4 - }, -/obj/effect/floor_decal/techfloor{ - dir = 9 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony/engineering) -"cx" = ( -/obj/effect/floor_decal/techfloor{ - dir = 6 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony) -"cy" = ( -/obj/machinery/atmospherics/pipe/simple/visible/black, -/obj/effect/wallframe_spawn/reinforced_phoron, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/colony/atmospherics) -"cz" = ( -/obj/machinery/atmospherics/pipe/simple/visible/black, -/obj/machinery/door/firedoor, -/obj/effect/wallframe_spawn/reinforced_phoron, -/turf/simulated/floor/plating, -/area/map_template/colony/atmospherics) -"cA" = ( -/obj/machinery/atmospherics/pipe/simple/heat_exchanging{ - dir = 5 - }, -/obj/machinery/atmospherics/unary/vent_pump/siphon/on/atmos/tank{ - id_tag = "co2o" - }, -/turf/simulated/floor/reinforced/oxygen, -/area/map_template/colony/atmospherics) -"cB" = ( -/obj/machinery/atmospherics/pipe/simple/visible/red{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/visible/black, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/colony/atmospherics) -"cC" = ( -/obj/machinery/door/airlock/hatch, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony) -"cD" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 1 - }, -/obj/effect/floor_decal/techfloor{ - dir = 1 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony/engineering) -"cE" = ( -/obj/machinery/atmospherics/pipe/simple/visible/red, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/colony/atmospherics) -"cF" = ( -/obj/effect/floor_decal/techfloor{ - dir = 10 - }, -/obj/effect/floor_decal/corner/blue{ - dir = 4 - }, -/obj/effect/floor_decal/techfloor/hole/right, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony) -"cG" = ( -/obj/machinery/light/small{ - dir = 8; - icon_state = "bulb1" - }, -/turf/simulated/floor/carpet, -/area/map_template/colony/dorms) -"cH" = ( -/obj/machinery/atmospherics/pipe/simple/heat_exchanging{ - dir = 9 - }, -/obj/machinery/atmospherics/unary/outlet_injector{ - frequency = 1441; - id = "co2n" - }, -/turf/simulated/floor/reinforced/oxygen, -/area/map_template/colony/atmospherics) -"cI" = ( -/obj/machinery/light/small{ - dir = 4 - }, -/turf/simulated/floor/carpet, -/area/map_template/colony/dorms) -"cJ" = ( -/obj/machinery/atmospherics/pipe/simple/heat_exchanging{ - dir = 5 - }, -/obj/machinery/atmospherics/unary/outlet_injector{ - frequency = 1441; - id = "cco2n" - }, -/turf/simulated/floor/reinforced/carbon_dioxide, -/area/map_template/colony/atmospherics) -"cK" = ( -/obj/structure/catwalk, -/obj/structure/cable{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/turf/simulated/floor/exoplanet/concrete, -/area/template_noop) -"cL" = ( -/obj/machinery/atmospherics/pipe/simple/visible/red, -/obj/machinery/meter, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/colony/atmospherics) -"cM" = ( -/obj/machinery/atmospherics/pipe/manifold/visible/cyan{ - dir = 8 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/colony/atmospherics) -"cN" = ( -/obj/machinery/atmospherics/pipe/manifold/visible/cyan, -/obj/machinery/portable_atmospherics/powered/pump/filled, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony/atmospherics) -"cO" = ( -/obj/machinery/atmospherics/pipe/simple/visible/cyan{ - dir = 9 - }, -/obj/machinery/portable_atmospherics/powered/pump/filled, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/colony/atmospherics) -"cP" = ( -/obj/structure/catwalk, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/sign/warning/compressed_gas{ - pixel_y = -28 - }, -/turf/simulated/floor/exoplanet/concrete, -/area/template_noop) -"cQ" = ( -/obj/machinery/atmospherics/pipe/simple/visible/green{ - dir = 4 - }, -/obj/machinery/meter, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/colony/atmospherics) -"cR" = ( -/obj/machinery/atmospherics/portables_connector, -/obj/effect/floor_decal/techfloor{ - dir = 1 - }, -/obj/effect/floor_decal/corner_techfloor_grid{ - dir = 8 - }, -/obj/effect/floor_decal/corner_techfloor_grid, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony/atmospherics) -"cS" = ( -/obj/machinery/atmospherics/pipe/simple/visible/green{ - dir = 9 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/colony/atmospherics) -"cT" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 8 - }, -/obj/effect/floor_decal/techfloor{ - dir = 5 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony/engineering) -"cU" = ( -/obj/machinery/atmospherics/pipe/simple/visible/cyan{ - dir = 5 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/colony/atmospherics) -"cV" = ( -/obj/machinery/atmospherics/pipe/simple/visible/cyan{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony/atmospherics) -"cW" = ( -/obj/machinery/atmospherics/pipe/simple/visible/cyan{ - dir = 4 - }, -/obj/machinery/meter, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/colony/atmospherics) -"cX" = ( -/obj/machinery/atmospherics/pipe/simple/visible/cyan{ - dir = 4 - }, -/obj/machinery/atmospherics/binary/pump, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony/atmospherics) -"cY" = ( -/obj/machinery/atmospherics/binary/pump/on{ - dir = 4; - target_pressure = 303.96 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/colony/atmospherics) -"cZ" = ( -/obj/effect/wallframe_spawn/reinforced, -/obj/machinery/door/firedoor, -/turf/simulated/floor/plating, -/area/map_template/colony/messhall) -"da" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 8 - }, -/obj/structure/cable{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/effect/floor_decal/techfloor{ - dir = 1 - }, -/obj/effect/floor_decal/corner/blue{ - dir = 10 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony) -"db" = ( -/obj/machinery/atmospherics/pipe/simple/heat_exchanging{ - dir = 9 - }, -/obj/machinery/atmospherics/unary/vent_pump/siphon/on/atmos/tank{ - id_tag = "cco2o" - }, -/turf/simulated/floor/reinforced/carbon_dioxide, -/area/map_template/colony/atmospherics) -"dc" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 8 - }, -/obj/machinery/alarm{ - locked = 0; - pixel_y = 20 - }, -/obj/structure/cable{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/effect/floor_decal/techfloor{ - dir = 5 - }, -/obj/effect/floor_decal/corner/blue{ - dir = 8 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony) -"dd" = ( -/obj/machinery/atmospherics/pipe/simple/visible/red{ - dir = 5 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/colony/atmospherics) -"de" = ( -/obj/machinery/atmospherics/pipe/manifold/visible, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony/atmospherics) -"df" = ( -/obj/machinery/atmospherics/pipe/simple/visible/red{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/colony/atmospherics) -"dg" = ( -/obj/machinery/atmospherics/pipe/simple/visible/red{ - dir = 4 - }, -/obj/machinery/meter, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/colony/atmospherics) -"dh" = ( -/obj/machinery/atmospherics/pipe/simple/visible/black, -/obj/machinery/atmospherics/pipe/simple/visible{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/colony/atmospherics) -"di" = ( -/obj/machinery/atmospherics/binary/pump/on{ - dir = 8; - target_pressure = 200 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/colony/atmospherics) -"dj" = ( -/obj/item/gun/energy/gun/small, -/obj/item/device/flashlight/upgraded, -/obj/item/crowbar/prybar, -/obj/item/clothing/under/captain_fly, -/obj/item/clothing/under/color/blackjumpshorts, -/obj/item/clothing/under/frontier, -/obj/item/clothing/under/hazard, -/obj/item/clothing/under/skirt, -/obj/item/clothing/under/suit_jacket/female, -/obj/item/clothing/under/suit_jacket/navy, -/obj/item/clothing/under/suit_jacket/charcoal, -/obj/item/clothing/under/syndicate, -/obj/item/clothing/under/sterile, -/obj/item/clothing/under/det/grey, -/obj/item/clothing/under/casual_pants/baggy, -/obj/item/clothing/under/casual_pants/camo, -/obj/item/clothing/under/casual_pants/track, -/obj/item/clothing/under/casual_pants/youngfolksjeans, -/obj/item/clothing/suit/storage/hooded/wintercoat/miner, -/obj/item/clothing/suit/storage/hooded/wintercoat, -/obj/item/clothing/suit/storage/toggle/bomber, -/obj/item/clothing/suit/storage/toggle/brown_jacket, -/obj/item/clothing/suit/storage/toggle/hoodie/nt, -/obj/item/clothing/suit/storage/toggle/hoodie/smw, -/obj/item/device/radio/map_preset/playablecolony, -/obj/structure/closet/cabinet, -/obj/item/device/radio/headset/map_preset/playablecolony, -/turf/simulated/floor/carpet, -/area/map_template/colony/dorms) -"dk" = ( -/obj/machinery/gibber, -/turf/simulated/floor/tiled/freezer, -/area/map_template/colony/messhall) -"dl" = ( -/obj/structure/catwalk, -/obj/structure/cable{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/exoplanet/concrete, -/area/template_noop) -"dm" = ( -/obj/structure/catwalk, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/light/spot, -/turf/simulated/floor/exoplanet/concrete, -/area/template_noop) -"dn" = ( -/obj/structure/catwalk, -/obj/machinery/power/rad_collector, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/exoplanet/concrete, -/area/template_noop) -"do" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/effect/wallframe_spawn/reinforced, -/obj/machinery/door/firedoor, -/turf/simulated/floor/plating, -/area/map_template/colony/messhall) -"dp" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony) -"dq" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/effect/floor_decal/techfloor{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony) -"dr" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/effect/floor_decal/techfloor{ - dir = 1 - }, -/obj/effect/floor_decal/techfloor/hole/right{ - dir = 1 - }, -/obj/machinery/light{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 1 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony) -"ds" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/wood, -/area/map_template/colony/dorms) -"dt" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 8 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony) -"du" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony) -"dv" = ( -/obj/machinery/door/firedoor, -/obj/effect/wallframe_spawn/reinforced_phoron, -/turf/simulated/floor/plating, -/area/map_template/colony/messhall) -"dw" = ( -/obj/effect/floor_decal/techfloor, -/obj/effect/floor_decal/techfloor/hole/right, -/obj/machinery/atmospherics/pipe/simple/hidden/universal, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony) -"dx" = ( -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/effect/floor_decal/techfloor{ - dir = 8 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony) -"dy" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/reagent_dispensers/fueltank, -/obj/machinery/light{ - dir = 8 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/colony/engineering) -"dz" = ( -/obj/machinery/door/firedoor, -/obj/effect/wallframe_spawn/reinforced_phoron, -/turf/simulated/floor/plating, -/area/map_template/colony/atmospherics) -"dA" = ( -/obj/structure/dispenser, -/obj/machinery/light{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/colony/engineering) -"dB" = ( -/obj/effect/submap_landmark/spawnpoint/colonist_spawn, -/obj/structure/bed/padded, -/obj/item/bedsheet/hos, -/turf/simulated/floor/carpet, -/area/map_template/colony/dorms) -"dC" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 8 - }, -/turf/simulated/floor/tiled/freezer, -/area/map_template/colony/surgery) -"dD" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/obj/machinery/alarm{ - locked = 0; - pixel_y = 20 - }, -/obj/structure/closet, -/obj/item/clothing/under/wetsuit, -/obj/item/clothing/under/wetsuit, -/obj/item/clothing/under/savage_hunter, -/obj/item/clothing/under/savage_hunter/female, -/obj/item/clothing/under/harness, -/obj/item/clothing/under/harness, -/obj/item/clothing/head/cowboy_hat, -/obj/item/clothing/head/cowboy_hat, -/obj/item/clothing/suit/storage/det_trench/ft, -/turf/simulated/floor/wood, -/area/map_template/colony/dorms) -"dE" = ( -/obj/machinery/door/firedoor, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/effect/floor_decal/techfloor{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony) -"dF" = ( -/obj/structure/catwalk, -/obj/machinery/light/spot{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/exoplanet/concrete, -/area/map_template/colony/surgery) -"dG" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/structure/cable{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/effect/floor_decal/techfloor{ - dir = 1 - }, -/obj/effect/floor_decal/techfloor/hole/right{ - dir = 1 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony/engineering) -"dH" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/effect/floor_decal/techfloor{ - dir = 8 - }, -/obj/machinery/light{ - dir = 8 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony) -"dI" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/effect/floor_decal/techfloor{ - dir = 8 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony) -"dJ" = ( -/obj/machinery/atmospherics/unary/freezer{ - icon_state = "freezer" - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony/atmospherics) -"dK" = ( -/obj/machinery/optable, -/turf/simulated/floor/tiled/freezer, -/area/map_template/colony/surgery) -"dL" = ( -/obj/structure/table/steel_reinforced, -/obj/item/storage/firstaid/adv, -/obj/item/storage/box/gloves, -/turf/simulated/floor/tiled/freezer, -/area/map_template/colony/surgery) -"dM" = ( -/obj/structure/curtain/black, -/turf/simulated/floor/wood, -/area/map_template/colony/dorms) -"dN" = ( -/obj/structure/table/steel_reinforced, -/obj/item/storage/firstaid/surgery, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 8 - }, -/obj/item/clothing/accessory/stethoscope, -/turf/simulated/floor/tiled/freezer, -/area/map_template/colony/surgery) -"dO" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/effect/floor_decal/techfloor{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony) -"dP" = ( -/obj/machinery/atmospherics/pipe/simple/visible/yellow{ - dir = 4 - }, -/obj/effect/floor_decal/corner_techfloor_grid{ - dir = 10 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony/atmospherics) -"dQ" = ( -/obj/structure/closet/crate/freezer, -/obj/item/reagent_containers/ivbag/nanoblood, -/obj/item/reagent_containers/ivbag/nanoblood, -/turf/simulated/floor/tiled/freezer, -/area/map_template/colony/surgery) -"dR" = ( -/obj/structure/closet/crate/freezer, -/obj/item/storage/box/pillbottles, -/obj/item/storage/firstaid/adv, -/obj/item/storage/firstaid/adv, -/obj/item/storage/firstaid/stab, -/obj/item/storage/firstaid/stab, -/obj/item/storage/firstaid/regular, -/obj/machinery/alarm{ - locked = 0; - pixel_y = 20 - }, -/obj/effect/floor_decal/corner/paleblue{ - dir = 10 - }, -/turf/simulated/floor/tiled/white/monotile, -/area/map_template/colony/medbay) -"dS" = ( -/obj/machinery/atmospherics/pipe/simple/visible/black, -/obj/machinery/meter, -/obj/effect/floor_decal/techfloor{ - dir = 5 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony/atmospherics) -"dT" = ( -/obj/machinery/atmospherics/pipe/simple/visible/black, -/obj/effect/floor_decal/techfloor{ - dir = 1 - }, -/obj/machinery/computer/air_control{ - input_tag = "cn2n"; - name = "Nitrogen Supply Control"; - output_tag = "cn2o"; - sensor_name = "Nitrogen Tank"; - sensor_tag = "c1" - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony/atmospherics) -"dU" = ( -/obj/machinery/chem_master, -/obj/effect/floor_decal/corner/paleblue{ - dir = 10 - }, -/turf/simulated/floor/tiled/white/monotile, -/area/map_template/colony/medbay) -"dV" = ( -/obj/machinery/chemical_dispenser/full, -/obj/effect/floor_decal/corner/paleblue{ - dir = 10 - }, -/turf/simulated/floor/tiled/white/monotile, -/area/map_template/colony/medbay) -"dW" = ( -/obj/structure/table/steel_reinforced, -/obj/machinery/reagent_temperature{ - pixel_x = -7; - pixel_y = 5 - }, -/obj/machinery/reagent_temperature/cooler{ - pixel_x = 7; - pixel_y = 5 - }, -/obj/effect/floor_decal/corner/paleblue{ - dir = 10 - }, -/turf/simulated/floor/tiled/white/monotile, -/area/map_template/colony/medbay) -"dX" = ( -/obj/effect/floor_decal/techfloor{ - dir = 10 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony/engineering) -"dY" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/effect/floor_decal/techfloor, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony/engineering) -"dZ" = ( -/obj/effect/floor_decal/techfloor{ - dir = 6 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony/engineering) -"ea" = ( -/obj/structure/table/steel_reinforced, -/obj/item/storage/box/syringes, -/obj/item/storage/box/autoinjectors, -/obj/item/storage/box/autoinjectors, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 1; - level = 2 - }, -/obj/effect/floor_decal/corner/paleblue{ - dir = 5 - }, -/obj/machinery/light{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/colony/medbay) -"eb" = ( -/obj/structure/iv_drip, -/obj/machinery/alarm{ - locked = 0; - pixel_y = 20 - }, -/obj/effect/floor_decal/corner/red{ - dir = 9 - }, -/obj/structure/hygiene/sink{ - dir = 1; - pixel_y = 16 - }, -/turf/simulated/floor/tiled/freezer, -/area/map_template/colony/surgery) -"ec" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/door/airlock/glass/medical, -/obj/machinery/door/firedoor, -/turf/simulated/floor/tiled/white, -/area/map_template/colony/medbay) -"ed" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 8 - }, -/turf/simulated/floor/wood, -/area/map_template/colony/dorms) -"ee" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/white, -/area/map_template/colony/medbay) -"ef" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/cable{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/turf/simulated/floor/tiled/white, -/area/map_template/colony/medbay) -"eg" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/white, -/area/map_template/colony/medbay) -"eh" = ( -/obj/structure/catwalk, -/obj/structure/closet/crate/solar_assembly, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/exoplanet/concrete, -/area/template_noop) -"ei" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/colony/engineering) -"ej" = ( -/obj/structure/table/steel_reinforced, -/obj/machinery/power/apc{ - locked = 0; - name = "south bump"; - pixel_y = -28 - }, -/obj/structure/cable, -/obj/item/storage/box/freezer, -/obj/item/storage/box/freezer, -/obj/effect/floor_decal/corner/red{ - dir = 9 - }, -/obj/machinery/light{ - dir = 8 - }, -/turf/simulated/floor/tiled/freezer, -/area/map_template/colony/surgery) -"ek" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 8 - }, -/obj/effect/floor_decal/techfloor{ - dir = 8 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony) -"el" = ( -/obj/structure/catwalk, -/obj/structure/cable{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/sign/warning/compressed_gas{ - pixel_y = -28 - }, -/turf/simulated/floor/exoplanet/concrete, -/area/template_noop) -"em" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/carpet/green, -/area/map_template/colony/messhall) -"en" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/turf/simulated/floor/carpet/green, -/area/map_template/colony/messhall) -"eo" = ( -/obj/structure/catwalk, -/obj/structure/cable{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/cable{ - d2 = 4; - icon_state = "0-4" - }, -/turf/simulated/floor/exoplanet/concrete, -/area/template_noop) -"ep" = ( -/obj/machinery/atmospherics/pipe/cap/hidden, -/turf/simulated/wall/r_wall, -/area/template_noop) -"eq" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/unary/vent_pump/on{ - level = 2 - }, -/obj/machinery/light/small{ - dir = 8; - icon_state = "bulb1" - }, -/turf/simulated/floor/wood, -/area/map_template/colony/dorms) -"er" = ( -/obj/machinery/atmospherics/pipe/simple/visible, -/obj/effect/floor_decal/techfloor{ - dir = 8 - }, -/obj/machinery/alarm{ - dir = 4; - pixel_x = -24 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony/atmospherics) -"es" = ( -/obj/machinery/atmospherics/binary/pump{ - dir = 1; - name = "waste pump" - }, -/obj/effect/floor_decal/techfloor{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony/atmospherics) -"et" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/cable{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/effect/floor_decal/techfloor{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony) -"eu" = ( -/obj/machinery/atmospherics/pipe/simple/visible/yellow{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/visible/fuel, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/colony/atmospherics) -"ev" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/carpet/green, -/area/map_template/colony/messhall) -"ew" = ( -/obj/structure/railing/mapped{ - dir = 1; - icon_state = "railing0-1" - }, -/turf/simulated/floor/exoplanet/concrete, -/area/template_noop) -"ex" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/door/airlock/medical, -/obj/machinery/door/firedoor, -/turf/simulated/floor/tiled/white, -/area/map_template/colony/medbay) -"ey" = ( -/obj/machinery/atmospherics/pipe/simple/visible, -/obj/machinery/meter, -/obj/effect/floor_decal/techfloor{ - dir = 8 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony/atmospherics) -"ez" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 1 - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/floor_decal/corner/red{ - dir = 6 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/colony/medbay) -"eA" = ( -/obj/effect/floor_decal/techfloor{ - dir = 1 - }, -/obj/effect/floor_decal/techfloor/hole/right{ - dir = 1 - }, -/obj/effect/floor_decal/corner_techfloor_grid{ - dir = 8 - }, -/obj/effect/floor_decal/corner_techfloor_grid, -/obj/machinery/light/spot{ - dir = 1 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony/atmospherics) -"eB" = ( -/obj/effect/floor_decal/techfloor{ - dir = 1 - }, -/obj/machinery/alarm{ - locked = 0; - pixel_y = 20 - }, -/obj/machinery/atmospherics/portables_connector, -/obj/machinery/light/spot{ - dir = 1 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony/atmospherics) -"eC" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/table/marble, -/turf/simulated/floor/lino, -/area/map_template/colony/messhall) -"eD" = ( -/obj/structure/catwalk, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/exoplanet/concrete, -/area/map_template/colony/command) -"eE" = ( -/obj/machinery/atmospherics/pipe/simple/visible/red{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/visible/black, -/obj/effect/floor_decal/corner_techfloor_grid{ - dir = 10 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony/atmospherics) -"eF" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/effect/floor_decal/corner/red{ - dir = 9 - }, -/turf/simulated/floor/tiled/freezer, -/area/map_template/colony/surgery) -"eG" = ( -/obj/machinery/door/blast/shutters{ - id_tag = "colsen"; - name = "Hard Storage Shutter" - }, -/turf/simulated/floor/plating, -/area/map_template/colony/command) -"eH" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/closet/crate, -/obj/item/stock_parts/capacitor, -/obj/item/stock_parts/capacitor, -/obj/item/stock_parts/capacitor/adv, -/obj/item/stock_parts/console_screen, -/obj/item/stock_parts/console_screen, -/obj/item/stock_parts/matter_bin/super, -/obj/item/stock_parts/matter_bin, -/obj/item/stock_parts/micro_laser, -/obj/item/stock_parts/micro_laser/high, -/obj/item/stock_parts/scanning_module, -/obj/item/stock_parts/scanning_module, -/obj/item/stock_parts/scanning_module/adv, -/obj/item/stock_parts/smes_coil/weak, -/obj/item/stock_parts/smes_coil/super_capacity, -/obj/item/stock_parts/smes_coil/super_capacity, -/obj/item/stock_parts/smes_coil/super_io, -/obj/item/stock_parts/smes_coil/super_io, -/obj/item/stock_parts/smes_coil/weak, -/obj/item/stock_parts/smes_coil/weak, -/obj/item/stack/material/tritium/fifty, -/obj/item/stack/material/tritium/fifty, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/colony/engineering) -"eI" = ( -/obj/machinery/atmospherics/pipe/simple/heat_exchanging/junction{ - dir = 1 - }, -/obj/effect/floor_decal/techfloor{ - dir = 9 - }, -/obj/structure/table/steel_reinforced, -/obj/item/device/paint_sprayer, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony/atmospherics) -"eJ" = ( -/obj/machinery/atmospherics/portables_connector, -/obj/machinery/portable_atmospherics/canister/air, -/obj/effect/floor_decal/industrial/outline/blue, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony/atmospherics) -"eK" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/vending/tool, -/obj/machinery/light{ - dir = 8 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/colony/engineering) -"eL" = ( -/turf/simulated/floor/exoplanet/concrete, -/area/template_noop) -"eM" = ( -/obj/structure/table/steel_reinforced, -/obj/item/storage/toolbox/mechanical, -/obj/item/storage/toolbox/mechanical, -/obj/item/device/integrated_circuit_printer/upgraded, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/colony/engineering) -"eN" = ( -/obj/structure/table/marble, -/turf/simulated/floor/lino, -/area/map_template/colony/messhall) -"eO" = ( -/obj/machinery/power/apc{ - locked = 0; - name = "south bump"; - pixel_y = -28 - }, -/obj/structure/cable, -/obj/structure/table/steel_reinforced, -/obj/item/storage/box/beakers, -/obj/item/storage/box/beakers, -/obj/effect/floor_decal/corner/paleblue{ - dir = 5 - }, -/obj/item/storage/belt/medical, -/obj/item/device/scanner/health, -/obj/item/storage/pill_bottle/tramadol, -/obj/item/storage/pill_bottle/tramadol, -/obj/item/storage/pill_bottle/spaceacillin, -/obj/item/storage/pill_bottle/antidexafen, -/obj/item/reagent_containers/glass/beaker/large, -/turf/simulated/floor/tiled/white, -/area/map_template/colony/medbay) -"eP" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/lino, -/area/map_template/colony/messhall) -"eQ" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/power/apc{ - locked = 0; - name = "south bump"; - pixel_y = -28 - }, -/obj/structure/cable{ - d2 = 4; - icon_state = "0-4" - }, -/turf/simulated/floor/wood, -/area/map_template/colony/dorms) -"eR" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 8 - }, -/obj/effect/floor_decal/techfloor{ - dir = 5 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony/engineering) -"eS" = ( -/obj/machinery/reagentgrinder, -/obj/item/reagent_containers/glass/beaker/large, -/obj/item/stack/material/phoron/ten, -/obj/effect/floor_decal/corner/paleblue{ - dir = 5 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/colony/medbay) -"eT" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/wood, -/area/map_template/colony/dorms) -"eU" = ( -/obj/machinery/atmospherics/pipe/manifold/visible{ - dir = 4 - }, -/obj/effect/floor_decal/techfloor{ - dir = 8 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony/atmospherics) -"eV" = ( -/obj/machinery/atmospherics/binary/pump, -/obj/effect/floor_decal/techfloor{ - dir = 4 - }, -/obj/item/device/radio/intercom/map_preset/playablecolony{ - dir = 8; - pixel_x = 22 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony/atmospherics) -"eW" = ( -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/door/airlock/civilian{ - name = "Bunk Room" - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony/dorms) -"eX" = ( -/obj/effect/submap_landmark/spawnpoint/colonist_spawn, -/obj/structure/bed/padded, -/obj/item/gun/energy/gun/small, -/obj/item/device/flashlight/upgraded, -/obj/item/crowbar/prybar, -/obj/item/clothing/under/color/blackjumpshorts, -/obj/item/clothing/under/captain_fly, -/obj/item/clothing/under/frontier, -/obj/item/clothing/under/hazard, -/obj/item/clothing/under/skirt, -/obj/item/clothing/under/suit_jacket/female, -/obj/item/clothing/under/suit_jacket/navy, -/obj/item/clothing/under/suit_jacket/charcoal, -/obj/item/clothing/under/syndicate, -/obj/item/clothing/under/sterile, -/obj/item/clothing/under/det/grey, -/obj/item/clothing/under/casual_pants/baggy, -/obj/item/clothing/under/casual_pants/camo, -/obj/item/clothing/under/casual_pants/track, -/obj/item/clothing/under/casual_pants/youngfolksjeans, -/obj/item/clothing/suit/storage/hooded/wintercoat/miner, -/obj/item/clothing/suit/storage/hooded/wintercoat, -/obj/item/clothing/suit/storage/toggle/bomber, -/obj/item/clothing/suit/storage/toggle/brown_jacket, -/obj/item/clothing/suit/storage/toggle/hoodie/nt, -/obj/item/clothing/suit/storage/toggle/hoodie/smw, -/obj/item/device/radio/map_preset/playablecolony, -/obj/structure/closet/shipping_wall{ - pixel_y = 34 - }, -/obj/item/device/radio/headset/map_preset/playablecolony, -/turf/simulated/floor/carpet, -/area/map_template/colony/dorms) -"eY" = ( -/obj/machinery/sleeper{ - dir = 1 - }, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 1 - }, -/obj/effect/floor_decal/corner/paleblue{ - dir = 5 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/colony/medbay) -"eZ" = ( -/obj/structure/catwalk, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/exoplanet/concrete, -/area/template_noop) -"fa" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony) -"fb" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony) -"fc" = ( -/obj/structure/catwalk, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/exoplanet/concrete, -/area/template_noop) -"fd" = ( -/obj/structure/table/steel_reinforced, -/obj/item/storage/toolbox/syndicate, -/obj/item/tape_roll, -/obj/item/tape_roll, -/obj/item/crowbar/brace_jack, -/obj/item/clothing/head/hardhat/white, -/obj/item/grenade/chem_grenade/metalfoam, -/obj/item/grenade/chem_grenade/metalfoam, -/obj/item/grenade/chem_grenade/metalfoam, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/colony/engineering) -"fe" = ( -/obj/structure/table/woodentable_reinforced, -/obj/structure/flora/pottedplant/smallcactus{ - pixel_y = 12 - }, -/obj/effect/floor_decal/spline/fancy/wood{ - dir = 1 - }, -/obj/item/reagent_containers/food/condiment/small/peppermill, -/obj/item/reagent_containers/food/condiment/small/saltshaker, -/obj/item/reagent_containers/food/condiment/small/sugar, -/turf/simulated/floor/wood, -/area/map_template/colony/messhall) -"ff" = ( -/obj/machinery/atmospherics/portables_connector{ - dir = 1 - }, -/obj/effect/floor_decal/techfloor{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony/atmospherics) -"fg" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/lino, -/area/map_template/colony/messhall) -"fh" = ( -/obj/machinery/atmospherics/portables_connector, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony/atmospherics) -"fi" = ( -/obj/machinery/atmospherics/unary/vent_pump/on, -/turf/simulated/floor/exoplanet/concrete, -/area/map_template/colony/atmospherics) -"fj" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 1 - }, -/obj/machinery/light/small{ - dir = 8; - icon_state = "bulb1" - }, -/turf/simulated/floor/wood, -/area/map_template/colony/dorms) -"fk" = ( -/obj/machinery/alarm{ - locked = 0; - pixel_y = 20 - }, -/obj/machinery/atmospherics/unary/vent_pump/on, -/obj/structure/table/marble, -/obj/machinery/chemical_dispenser/bar_coffee/full, -/obj/effect/floor_decal/spline/fancy/wood{ - dir = 9 - }, -/turf/simulated/floor/wood, -/area/map_template/colony/messhall) -"fl" = ( -/obj/machinery/meter, -/obj/machinery/atmospherics/pipe/manifold/visible/red{ - dir = 4 - }, -/obj/effect/floor_decal/techfloor{ - dir = 4 - }, -/obj/machinery/light/spot{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony/atmospherics) -"fm" = ( -/obj/machinery/atmospherics/pipe/simple/visible/black, -/obj/effect/floor_decal/techfloor{ - dir = 1 - }, -/obj/machinery/computer/air_control{ - input_tag = "co2n"; - name = "Oxygen Supply Control"; - output_tag = "co2o"; - sensor_name = "Oxygen Tank"; - sensor_tag = "c2" - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony/atmospherics) -"fn" = ( -/obj/structure/bed/chair/comfy/brown{ - dir = 4 - }, -/obj/effect/floor_decal/spline/fancy/wood{ - dir = 1 - }, -/turf/simulated/floor/wood, -/area/map_template/colony/messhall) -"fo" = ( -/obj/structure/bed/chair/comfy/brown{ - dir = 4 - }, -/obj/structure/sign/double/maltesefalcon/right{ - pixel_y = 32 - }, -/obj/effect/floor_decal/spline/fancy/wood{ - dir = 1 - }, -/turf/simulated/floor/wood, -/area/map_template/colony/messhall) -"fp" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/cable{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/machinery/vending/engineering{ - req_access = list() - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/colony/engineering) -"fq" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/lino, -/area/map_template/colony/messhall) -"fr" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 4 - }, -/obj/effect/floor_decal/techfloor{ - dir = 9 - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony/engineering) -"fs" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/effect/floor_decal/techfloor{ - dir = 1 - }, -/obj/structure/cable{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony/engineering) -"ft" = ( -/obj/machinery/atmospherics/pipe/simple/visible/black, -/obj/effect/floor_decal/techfloor{ - dir = 1 - }, -/obj/machinery/computer/air_control{ - input_tag = "cco2n"; - name = "Carbon Dioxide Tank Control"; - output_tag = "cco2o"; - sensor_name = "Carbon Dioxide Tank"; - sensor_tag = "c3" - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony/atmospherics) -"fu" = ( -/obj/structure/bed/chair/comfy/brown{ - dir = 8 - }, -/obj/structure/sign/double/maltesefalcon/left{ - pixel_y = 32 - }, -/obj/effect/floor_decal/spline/fancy/wood{ - dir = 1 - }, -/turf/simulated/floor/wood, -/area/map_template/colony/messhall) -"fv" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 8 - }, -/obj/effect/floor_decal/techfloor{ - dir = 8 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony) -"fw" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/machinery/vending/engivend{ - req_access = list() - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/colony/engineering) -"fx" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 8 - }, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/effect/floor_decal/techfloor{ - dir = 4 - }, -/obj/item/device/radio/intercom/map_preset/playablecolony{ - dir = 8; - pixel_x = 22 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony) -"fy" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/effect/floor_decal/techfloor, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony/engineering) -"fz" = ( -/obj/machinery/atmospherics/pipe/simple/visible{ - dir = 9 - }, -/obj/effect/floor_decal/techfloor{ - dir = 8 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony/atmospherics) -"fA" = ( -/obj/effect/floor_decal/techfloor{ - dir = 6 - }, -/obj/structure/closet/crate, -/obj/item/stack/material/steel/fifty, -/obj/item/stack/material/steel/fifty, -/obj/item/stack/material/steel/fifty, -/obj/item/stack/material/steel/fifty, -/obj/item/stack/material/steel/fifty, -/obj/item/stack/material/wood/fifty, -/obj/item/stack/material/wood/fifty, -/obj/item/stack/material/wood/fifty, -/obj/item/stack/material/wood/fifty, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony/engineering) -"fB" = ( -/obj/structure/closet/crate, -/obj/item/stack/material/glass/fifty, -/obj/item/stack/material/glass/fifty, -/obj/item/stack/material/glass/fifty, -/obj/item/stack/material/glass/fifty, -/obj/item/stack/material/glass/fifty, -/obj/item/stack/material/glass/fifty, -/obj/item/stack/material/glass/phoronrglass/ten, -/obj/item/stack/material/glass/phoronrglass/ten, -/obj/item/stack/material/glass/reinforced/fifty, -/obj/item/stack/material/glass/reinforced/fifty, -/obj/item/clothing/head/hardhat/orange, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/colony/engineering) -"fC" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 8 - }, -/obj/effect/floor_decal/techfloor{ - dir = 5 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony) -"fD" = ( -/obj/machinery/atmospherics/binary/pump, -/obj/effect/floor_decal/techfloor{ - dir = 1 - }, -/obj/effect/floor_decal/corner/red{ - dir = 10 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony/atmospherics) -"fE" = ( -/obj/machinery/atmospherics/binary/pump, -/obj/effect/floor_decal/techfloor{ - dir = 1 - }, -/obj/effect/floor_decal/corner/blue{ - dir = 10 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony/atmospherics) -"fF" = ( -/obj/machinery/atmospherics/binary/pump, -/obj/effect/floor_decal/techfloor{ - dir = 1 - }, -/obj/effect/floor_decal/techfloor/hole/right{ - dir = 1 - }, -/obj/effect/floor_decal/corner/yellow{ - dir = 10 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony/atmospherics) -"fG" = ( -/obj/machinery/door/firedoor, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/door/airlock/glass/civilian, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony/messhall) -"fH" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/effect/floor_decal/spline/fancy/wood{ - dir = 4 - }, -/turf/simulated/floor/wood, -/area/map_template/colony/messhall) -"fI" = ( -/obj/structure/table/woodentable_reinforced, -/obj/item/storage/box/donut, -/obj/effect/floor_decal/spline/fancy/wood{ - dir = 1 - }, -/obj/item/reagent_containers/food/condiment/small/peppermill, -/obj/item/reagent_containers/food/condiment/small/saltshaker, -/obj/item/reagent_containers/food/condiment/small/sugar, -/turf/simulated/floor/wood, -/area/map_template/colony/messhall) -"fJ" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/light{ - dir = 1 - }, -/turf/simulated/floor/tiled/freezer, -/area/map_template/colony/messhall) -"fK" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/obj/structure/bed/chair/comfy/brown{ - dir = 8 - }, -/obj/machinery/light{ - dir = 4 - }, -/obj/effect/floor_decal/spline/fancy/wood{ - dir = 5 - }, -/turf/simulated/floor/wood, -/area/map_template/colony/messhall) -"fL" = ( -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/door/airlock/engineering, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony/engineering) -"fM" = ( -/obj/item/gun/energy/gun/small, -/obj/item/device/flashlight/upgraded, -/obj/item/crowbar/prybar, -/obj/item/clothing/under/captain_fly, -/obj/item/clothing/under/color/blackjumpshorts, -/obj/item/clothing/under/frontier, -/obj/item/clothing/under/hazard, -/obj/item/clothing/under/skirt, -/obj/item/clothing/under/suit_jacket/female, -/obj/item/clothing/under/suit_jacket/navy, -/obj/item/clothing/under/syndicate, -/obj/item/clothing/under/sterile, -/obj/item/clothing/under/det/grey, -/obj/item/clothing/under/casual_pants/baggy, -/obj/item/clothing/under/casual_pants/camo, -/obj/item/clothing/under/casual_pants/track, -/obj/item/clothing/under/casual_pants/youngfolksjeans, -/obj/item/clothing/suit/storage/hooded/wintercoat/miner, -/obj/item/clothing/suit/storage/hooded/wintercoat, -/obj/item/clothing/suit/storage/toggle/bomber, -/obj/item/clothing/suit/storage/toggle/brown_jacket, -/obj/item/clothing/suit/storage/toggle/hoodie/nt, -/obj/item/clothing/suit/storage/toggle/hoodie/smw, -/obj/item/clothing/suit/storage/toggle/track/gcc, -/obj/item/device/radio/map_preset/playablecolony, -/obj/structure/closet/cabinet, -/obj/item/device/radio/headset/map_preset/playablecolony, -/turf/simulated/floor/carpet, -/area/map_template/colony/dorms) -"fN" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/colony/atmospherics) -"fO" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 1 - }, -/obj/effect/floor_decal/techfloor{ - dir = 4 - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony/atmospherics) -"fP" = ( -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/door/airlock/atmos, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony/atmospherics) -"fQ" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/effect/floor_decal/techfloor{ - dir = 4 - }, -/obj/effect/floor_decal/techfloor{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony/atmospherics) -"fR" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 4 - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/floor_decal/techfloor{ - dir = 8 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony) -"fS" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/cable{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/effect/floor_decal/techfloor{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony) -"fT" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/effect/floor_decal/techfloor{ - dir = 1 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony) -"fU" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/effect/floor_decal/techfloor{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony) -"fV" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/structure/cable{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/effect/floor_decal/techfloor{ - dir = 5 - }, -/obj/effect/floor_decal/corner/green{ - dir = 8 - }, -/obj/machinery/light{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony) -"fW" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 8 - }, -/obj/effect/floor_decal/techfloor{ - dir = 8 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony) -"fX" = ( -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/effect/floor_decal/techfloor{ - dir = 1 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony) -"fY" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 8 - }, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/effect/floor_decal/techfloor{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony) -"fZ" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/obj/effect/floor_decal/techfloor{ - dir = 9 - }, -/obj/structure/cable{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony) -"ga" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 1 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony) -"gb" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply, -/obj/structure/table/marble, -/obj/item/storage/box/glasses/mug, -/obj/item/storage/box/glasses/pint, -/obj/item/storage/box/glasses/square, -/obj/item/storage/box/glass_extras/straws, -/obj/effect/floor_decal/spline/fancy/wood{ - dir = 8 - }, -/obj/item/reagent_containers/food/drinks/pitcher, -/turf/simulated/floor/wood, -/area/map_template/colony/messhall) -"gc" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 - }, -/obj/machinery/alarm{ - locked = 0; - pixel_y = 20 - }, -/turf/simulated/floor/tiled/freezer, -/area/map_template/colony/messhall) -"gd" = ( -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/door/airlock/civilian, -/turf/simulated/floor/lino, -/area/map_template/colony/messhall) -"ge" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 4 - }, -/obj/structure/closet/crate/freezer, -/obj/random/drinkbottle, -/obj/random/drinkbottle, -/obj/random/drinkbottle, -/obj/random/drinkbottle, -/obj/random/drinkbottle, -/obj/random/drinkbottle, -/obj/random/drinkbottle, -/obj/item/storage/lunchbox/syndicate/filled, -/obj/item/storage/lunchbox/cat/filled, -/obj/item/storage/lunchbox/nt/filled, -/obj/item/storage/lunchbox/nymph/filled, -/obj/item/pizzabox/meat, -/obj/item/pizzabox/margherita, -/obj/item/pizzabox/mushroom, -/obj/item/pizzabox/vegetable, -/obj/item/storage/box/cola/spaceup, -/obj/item/storage/box/cola/spacewind, -/obj/item/storage/box/cola/icedtea, -/obj/item/storage/box/cola/drgibb, -/obj/item/reagent_containers/food/drinks/shaker, -/obj/item/reagent_containers/food/drinks/pitcher, -/obj/item/reagent_containers/glass/beaker/bowl, -/obj/item/reagent_containers/food/condiment/salt, -/obj/item/reagent_containers/food/condiment/enzyme, -/turf/simulated/floor/tiled/freezer, -/area/map_template/colony/messhall) -"gf" = ( -/obj/effect/floor_decal/techfloor{ - dir = 10 - }, -/obj/machinery/power/apc{ - locked = 0; - name = "south bump"; - pixel_y = -28 - }, -/obj/structure/cable{ - d2 = 8; - icon_state = "0-8" - }, -/obj/effect/floor_decal/techfloor/hole/right, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony/engineering) -"gg" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/cable{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/effect/floor_decal/techfloor{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony) -"gh" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 1 - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/floor_decal/techfloor{ - dir = 8 - }, -/obj/effect/floor_decal/corner/paleblue{ - dir = 6 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony) -"gi" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/colony/atmospherics) -"gj" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/obj/effect/floor_decal/techfloor{ - dir = 8 - }, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony) -"gk" = ( -/obj/machinery/atmospherics/binary/pump{ - dir = 4 - }, -/obj/effect/floor_decal/techfloor, -/obj/effect/floor_decal/corner_techfloor_grid{ - dir = 4 - }, -/obj/effect/floor_decal/corner_techfloor_grid{ - dir = 1 - }, -/obj/machinery/light/spot, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony/atmospherics) -"gl" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/turf/simulated/floor/tiled/steel_grid, -/area/map_template/colony/armory) -"gm" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/effect/floor_decal/techfloor{ - dir = 1 - }, -/obj/machinery/alarm{ - locked = 0; - pixel_y = 20 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony) -"gn" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/effect/floor_decal/techfloor{ - dir = 1 - }, -/obj/structure/cable{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony) -"go" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/lino, -/area/map_template/colony) -"gp" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/effect/floor_decal/techfloor{ - dir = 5 - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony) -"gq" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/floor_decal/techfloor{ - dir = 9 - }, -/obj/machinery/alarm{ - locked = 0; - pixel_y = 20 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony) -"gr" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 1; - level = 2 - }, -/obj/structure/closet/secure_closet/freezer/fridge, -/obj/item/storage/box/snack/tastybread, -/obj/item/storage/box/snack/tastybread, -/obj/item/storage/box/snack/noraisin, -/obj/item/storage/box/snack/jerky, -/obj/item/storage/box/snack/candy, -/turf/simulated/floor/tiled/freezer, -/area/map_template/colony/messhall) -"gs" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/carpet/green, -/area/map_template/colony/messhall) -"gt" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark, -/area/map_template/colony/jail) -"gu" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark, -/area/map_template/colony/jail) -"gv" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/tiled/dark, -/area/map_template/colony/jail) -"gw" = ( -/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply, -/obj/structure/cable{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/structure/cable{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/effect/floor_decal/techfloor{ - dir = 5 - }, -/obj/effect/floor_decal/techfloor/hole/right{ - dir = 1 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony) -"gx" = ( -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/effect/floor_decal/techfloor{ - dir = 10 - }, -/obj/effect/floor_decal/techfloor/hole/right, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony) -"gy" = ( -/obj/machinery/door/firedoor, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/effect/floor_decal/techfloor{ - dir = 6 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony) -"gz" = ( -/obj/structure/closet/secure_closet/freezer/meat, -/turf/simulated/floor/tiled/freezer, -/area/map_template/colony/messhall) -"gA" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 4 - }, -/obj/effect/floor_decal/spline/fancy/wood{ - dir = 4 - }, -/turf/simulated/floor/wood, -/area/map_template/colony/messhall) -"gB" = ( -/obj/effect/floor_decal/techfloor{ - dir = 8 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony) -"gC" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 1; - level = 2 - }, -/obj/structure/table/marble, -/obj/machinery/microwave, -/turf/simulated/floor/lino, -/area/map_template/colony/messhall) -"gD" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/hygiene/drain, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony) -"gE" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/floor_decal/techfloor{ - dir = 9 - }, -/obj/effect/floor_decal/corner/green, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony) -"gF" = ( -/obj/machinery/atmospherics/binary/pump/high_power, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/colony/atmospherics) -"gG" = ( -/obj/machinery/atmospherics/unary/tank/air, -/obj/effect/floor_decal/industrial/outline/blue, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/colony/atmospherics) -"gH" = ( -/obj/structure/table/steel_reinforced, -/obj/item/storage/toolbox/electrical, -/obj/item/storage/toolbox/electrical, -/obj/machinery/light{ - dir = 4 - }, -/obj/item/storage/belt/utility, -/obj/item/storage/belt/utility, -/obj/item/stack/material/glass/fifty, -/obj/item/stack/material/steel/fifty, -/obj/item/device/geiger, -/obj/item/device/geiger, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/colony/engineering) -"gI" = ( -/obj/structure/table/marble, -/obj/machinery/chemical_dispenser/bar_soft/full, -/obj/effect/floor_decal/spline/fancy/wood{ - dir = 8 - }, -/turf/simulated/floor/wood, -/area/map_template/colony/messhall) -"gJ" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 1; - level = 2 - }, -/obj/effect/floor_decal/techfloor{ - dir = 8 - }, -/obj/effect/floor_decal/corner/paleblue{ - dir = 6 - }, -/obj/structure/closet/firecloset, -/obj/item/device/flashlight/lamp/floodlamp, -/obj/random/firstaid, -/obj/random/firstaid, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony) -"gK" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 1 - }, -/obj/structure/table/marble, -/obj/machinery/chemical_dispenser/bar_alc/full, -/turf/simulated/floor/lino, -/area/map_template/colony/messhall) -"gL" = ( -/obj/machinery/atmospherics/unary/heater{ - dir = 1 - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony/atmospherics) -"gM" = ( -/obj/machinery/atmospherics/pipe/simple/visible/red{ - dir = 4 - }, -/obj/machinery/meter, -/obj/effect/floor_decal/techfloor{ - dir = 10 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony/atmospherics) -"gN" = ( -/obj/effect/floor_decal/techfloor{ - dir = 8 - }, -/obj/machinery/atmospherics/binary/pump{ - dir = 1 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony/atmospherics) -"gO" = ( -/obj/machinery/atmospherics/pipe/manifold/visible/red, -/obj/effect/floor_decal/techfloor, -/obj/machinery/portable_atmospherics/powered/scrubber, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony/atmospherics) -"gP" = ( -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/carpet/green, -/area/map_template/colony/messhall) -"gQ" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 4; - pressure_checks = 0 - }, -/obj/structure/railing/mapped{ - dir = 8; - icon_state = "railing0-1" - }, -/obj/structure/railing/mapped{ - dir = 1; - icon_state = "railing0-1" - }, -/obj/effect/floor_decal/industrial/hatch/orange, -/turf/simulated/floor/tiled/steel_ridged, -/area/map_template/colony/airlock) -"gR" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{ - id_tag = "playablecolonymain_pump_out_external" - }, -/obj/structure/railing/mapped{ - dir = 8; - icon_state = "railing0-1" - }, -/obj/structure/railing/mapped, -/obj/effect/floor_decal/industrial/hatch/orange, -/turf/simulated/floor/tiled/steel_ridged, -/area/map_template/colony/airlock) -"gT" = ( -/obj/machinery/atmospherics/binary/pump, -/obj/effect/floor_decal/corner_techfloor_grid{ - dir = 6 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony/atmospherics) -"gU" = ( -/obj/machinery/atmospherics/omni/mixer{ - tag_east = 1; - tag_east_con = 0.21; - tag_south = 2; - tag_west = 1; - tag_west_con = 0.79 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/colony/atmospherics) -"gV" = ( -/obj/machinery/atmospherics/pipe/manifold/visible/green, -/obj/effect/floor_decal/corner_techfloor_grid{ - dir = 9 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony/atmospherics) -"gW" = ( -/obj/effect/wallframe_spawn/reinforced, -/obj/machinery/door/firedoor, -/turf/simulated/floor/plating, -/area/map_template/colony/engineering) -"gX" = ( -/obj/machinery/atmospherics/portables_connector{ - dir = 4 - }, -/obj/machinery/portable_atmospherics/canister/carbon_dioxide, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony/atmospherics) -"gY" = ( -/obj/machinery/power/apc{ - locked = 0; - name = "south bump"; - pixel_y = -28 - }, -/obj/structure/cable{ - d2 = 8; - icon_state = "0-8" - }, -/obj/effect/floor_decal/spline/fancy/wood, -/turf/simulated/floor/wood, -/area/map_template/colony/messhall) -"gZ" = ( -/obj/machinery/atmospherics/unary/heat_exchanger{ - dir = 8 - }, -/obj/structure/window/reinforced{ - dir = 8 - }, -/obj/structure/window/reinforced{ - dir = 1 - }, -/turf/simulated/floor/plating, -/area/map_template/colony/atmospherics) -"ha" = ( -/obj/machinery/atmospherics/unary/heat_exchanger{ - dir = 4 - }, -/obj/structure/window/reinforced{ - dir = 1 - }, -/obj/structure/window/reinforced{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/map_template/colony/atmospherics) -"hb" = ( -/obj/machinery/atmospherics/pipe/simple/visible/universal{ - dir = 4 - }, -/obj/machinery/meter, -/obj/effect/floor_decal/corner_techfloor_grid{ - dir = 9 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony/atmospherics) -"hc" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/floor_decal/techfloor{ - dir = 1 - }, -/obj/effect/floor_decal/corner/green{ - dir = 10 - }, -/obj/effect/floor_decal/techfloor/hole/right{ - dir = 1 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony) -"hd" = ( -/obj/machinery/pipedispenser, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 1; - level = 2 - }, -/obj/effect/floor_decal/techfloor{ - dir = 6 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony/atmospherics) -"he" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/item/device/radio/intercom/map_preset/playablecolony{ - dir = 8; - pixel_x = 22 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/colony/engineering) -"hf" = ( -/obj/effect/floor_decal/techfloor, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/floor_decal/techfloor/hole/right, -/obj/machinery/light, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony) -"hg" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 4 - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/floor_decal/techfloor{ - dir = 1 - }, -/obj/effect/floor_decal/corner/green{ - dir = 10 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony) -"hh" = ( -/obj/effect/floor_decal/techfloor, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/light, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony) -"hi" = ( -/obj/machinery/atmospherics/portables_connector, -/obj/effect/floor_decal/industrial/outline, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony/atmospherics) -"hj" = ( -/obj/machinery/meter, -/obj/machinery/atmospherics/pipe/manifold/visible/black{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/colony/atmospherics) -"hk" = ( -/obj/effect/floor_decal/techfloor{ - dir = 10 - }, -/obj/structure/cable{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony) -"hl" = ( -/obj/machinery/atmospherics/pipe/manifold/visible/green{ - dir = 8 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony/atmospherics) -"hm" = ( -/obj/machinery/atmospherics/omni/filter{ - tag_east = 2; - tag_north = 4; - tag_south = 1 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/colony/atmospherics) -"hn" = ( -/obj/effect/floor_decal/techfloor, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/item/device/radio/intercom/map_preset/playablecolony{ - dir = 1; - pixel_y = -28 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony) -"ho" = ( -/obj/effect/floor_decal/techfloor, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony) -"hp" = ( -/obj/machinery/door/firedoor, -/obj/effect/floor_decal/techfloor, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony) -"hq" = ( -/obj/structure/railing/mapped{ - dir = 8; - icon_state = "railing0-1" - }, -/obj/machinery/atmospherics/unary/vent_pump/siphon/on{ - dir = 4 - }, -/turf/simulated/floor/exoplanet/concrete, -/area/map_template/colony/atmospherics) -"hr" = ( -/turf/simulated/wall, -/area/map_template/colony) -"hs" = ( -/obj/item/stool/bar/padded, -/obj/effect/floor_decal/spline/fancy/wood, -/turf/simulated/floor/wood, -/area/map_template/colony/messhall) -"ht" = ( -/obj/effect/floor_decal/techfloor, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/cable{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony) -"hu" = ( -/obj/machinery/door/firedoor, -/obj/effect/floor_decal/techfloor, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony) -"hv" = ( -/obj/effect/floor_decal/techfloor{ - dir = 6 - }, -/obj/machinery/power/apc{ - locked = 0; - name = "south bump"; - pixel_y = -28 - }, -/obj/structure/cable{ - d2 = 8; - icon_state = "0-8" - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony) -"hw" = ( -/obj/effect/floor_decal/techfloor{ - dir = 9 - }, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony) -"hx" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/floor_decal/spline/fancy/wood{ - dir = 10 - }, -/obj/item/device/radio/intercom/map_preset/playablecolony{ - dir = 1; - pixel_y = -28 - }, -/turf/simulated/floor/wood, -/area/map_template/colony/messhall) -"hy" = ( -/obj/machinery/alarm{ - locked = 0; - pixel_y = 20 - }, -/obj/effect/floor_decal/spline/fancy/wood{ - dir = 1 - }, -/turf/simulated/floor/wood, -/area/map_template/colony/commons) -"hz" = ( -/obj/machinery/vending/cola{ - name = "hacked Robust Softdrinks"; - prices = list() - }, -/obj/machinery/light, -/obj/effect/floor_decal/spline/fancy/wood, -/turf/simulated/floor/wood, -/area/map_template/colony/messhall) -"hA" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/effect/floor_decal/techfloor{ - dir = 5 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony) -"hB" = ( -/obj/structure/table/rack, -/obj/item/ammo_magazine/pistol/small, -/obj/item/ammo_magazine/pistol, -/obj/item/ammo_magazine/pistol, -/obj/item/ammo_magazine/pistol/rubber, -/obj/item/ammo_magazine/pistol/small, -/obj/item/ammo_magazine/pistol/small, -/obj/item/ammo_magazine/pistol/rubber, -/obj/item/storage/box/ammo/shotgunshells, -/obj/item/storage/box/ammo/shotgunshells, -/obj/item/storage/box/ammo/shotgunammo, -/obj/item/storage/box/ammo/shotgunammo, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 4 - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 9 - }, -/obj/item/device/radio/map_preset/playablecolony, -/obj/item/device/radio/map_preset/playablecolony, -/obj/item/device/radio/map_preset/playablecolony, -/obj/item/device/radio/map_preset/playablecolony, -/turf/simulated/floor/tiled/steel_ridged, -/area/map_template/colony/armory) -"hC" = ( -/obj/effect/floor_decal/techfloor{ - dir = 9 - }, -/obj/effect/floor_decal/corner/red, -/obj/structure/bed/chair{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony/jail) -"hD" = ( -/obj/machinery/vending/snack{ - name = "hacked Getmore Chocolate Corp"; - prices = list() - }, -/obj/effect/floor_decal/spline/fancy/wood, -/turf/simulated/floor/wood, -/area/map_template/colony/messhall) -"hE" = ( -/obj/machinery/vending/fitness{ - name = "hacked SweatMAX"; - prices = list() - }, -/obj/effect/floor_decal/corner/paleblue{ - dir = 6 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony) -"hF" = ( -/obj/machinery/atmospherics/binary/oxyregenerator, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/plating, -/area/map_template/colony/atmospherics) -"hG" = ( -/obj/structure/cable{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/effect/floor_decal/techfloor{ - dir = 10 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony) -"hH" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/light{ - dir = 4 - }, -/turf/simulated/floor/lino, -/area/map_template/colony/messhall) -"hI" = ( -/obj/item/stool/bar/padded, -/turf/simulated/floor/wood, -/area/map_template/colony/commons) -"hJ" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/floor_decal/techfloor{ - dir = 6 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony) -"hK" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/item/stool/bar/padded, -/obj/effect/floor_decal/spline/fancy/wood, -/turf/simulated/floor/wood, -/area/map_template/colony/messhall) -"hL" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 1; - icon_state = "warning" - }, -/obj/machinery/alarm{ - locked = 0; - pixel_y = 20 - }, -/turf/simulated/floor/tiled/steel_grid, -/area/map_template/colony/armory) -"hM" = ( -/obj/effect/floor_decal/techfloor{ - dir = 5 - }, -/obj/effect/floor_decal/corner/red{ - dir = 8 - }, -/obj/machinery/light{ - dir = 1 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony/jail) -"hN" = ( -/obj/effect/floor_decal/techfloor{ - dir = 8 - }, -/obj/effect/floor_decal/corner/green{ - dir = 6 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony) -"hO" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/effect/floor_decal/techfloor{ - dir = 4 - }, -/obj/effect/floor_decal/corner/green{ - dir = 9 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony) -"hP" = ( -/obj/machinery/atmospherics/pipe/manifold/visible/red{ - dir = 1 - }, -/obj/effect/floor_decal/corner_techfloor_grid{ - dir = 5 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony/atmospherics) -"hQ" = ( -/obj/effect/floor_decal/techfloor{ - dir = 1 - }, -/obj/effect/floor_decal/corner/red{ - dir = 10 - }, -/obj/machinery/light{ - dir = 1 - }, -/obj/structure/table/steel_reinforced, -/obj/item/storage/box/donut, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony/jail) -"hR" = ( -/turf/simulated/wall, -/area/map_template/colony/jail) -"hS" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/table/gamblingtable, -/turf/simulated/floor/wood, -/area/map_template/colony/commons) -"hT" = ( -/obj/machinery/power/apc{ - locked = 0; - name = "south bump"; - pixel_y = -28 - }, -/obj/structure/cable, -/obj/item/stool/bar/padded, -/obj/effect/floor_decal/spline/fancy/wood, -/turf/simulated/floor/wood, -/area/map_template/colony/commons) -"hU" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/effect/floor_decal/spline/fancy/wood{ - dir = 6 - }, -/turf/simulated/floor/wood, -/area/map_template/colony/messhall) -"hV" = ( -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/door/airlock/highsecurity, -/obj/machinery/door/blast/regular{ - id_tag = "colarm" - }, -/turf/simulated/floor/tiled/steel_grid, -/area/map_template/colony/armory) -"hW" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 8 - }, -/obj/structure/hygiene/drain, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony) -"hX" = ( -/obj/machinery/atmospherics/pipe/simple/visible/red{ - dir = 4 - }, -/obj/effect/floor_decal/corner_techfloor_grid{ - dir = 5 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony/atmospherics) -"hY" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 8 - }, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/effect/floor_decal/techfloor{ - dir = 4 - }, -/obj/effect/floor_decal/corner/green{ - dir = 9 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony) -"hZ" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/effect/floor_decal/techfloor{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony) -"ia" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/portable_atmospherics/canister/oxygen, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/colony/engineering) -"ib" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/effect/floor_decal/techfloor{ - dir = 4 - }, -/obj/machinery/light{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony) -"ic" = ( -/obj/effect/floor_decal/techfloor{ - dir = 8 - }, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony) -"id" = ( -/obj/effect/floor_decal/corner/beige{ - dir = 5 - }, -/obj/machinery/cryopod{ - dir = 2 - }, -/obj/machinery/computer/cryopod{ - pixel_y = 25 - }, -/turf/simulated/floor/tiled/white/monotile, -/area/map_template/colony/bathroom) -"ie" = ( -/obj/effect/floor_decal/techfloor{ - dir = 9 - }, -/obj/effect/floor_decal/corner/red, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony/jail) -"if" = ( -/obj/effect/floor_decal/techfloor{ - dir = 5 - }, -/obj/machinery/alarm{ - locked = 0; - pixel_y = 20 - }, -/obj/effect/floor_decal/corner/red{ - dir = 8 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony/jail) -"ig" = ( -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/door/airlock/glass/civilian, -/turf/simulated/floor/wood, -/area/map_template/colony/commons) -"ih" = ( -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/effect/floor_decal/techfloor{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony) -"ii" = ( -/obj/structure/table/rack, -/obj/item/gun/projectile/pistol/holdout, -/obj/item/gun/projectile/pistol/holdout, -/obj/item/gun/projectile/pistol/sec/lethal, -/obj/effect/floor_decal/industrial/warning{ - dir = 8; - icon_state = "warning" - }, -/turf/simulated/floor/tiled/steel_ridged, -/area/map_template/colony/armory) -"ij" = ( -/obj/structure/hygiene/shower{ - pixel_y = 20 - }, -/obj/effect/floor_decal/corner/paleblue{ - dir = 5 - }, -/turf/simulated/floor/tiled/white/monotile, -/area/map_template/colony/bathroom) -"ik" = ( -/obj/machinery/atmospherics/portables_connector{ - dir = 1 - }, -/obj/effect/floor_decal/industrial/outline, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony/atmospherics) -"il" = ( -/obj/machinery/atmospherics/portables_connector{ - dir = 8 - }, -/obj/effect/floor_decal/industrial/outline/red, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony/atmospherics) -"im" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/turf/simulated/floor/wood, -/area/map_template/colony/commons) -"in" = ( -/obj/effect/floor_decal/techfloor{ - dir = 1 - }, -/obj/effect/floor_decal/corner/red{ - dir = 10 - }, -/obj/effect/floor_decal/techfloor/hole/right{ - dir = 1 - }, -/obj/structure/bed/chair{ - dir = 8 - }, -/obj/machinery/recharger/wallcharger{ - pixel_x = -8; - pixel_y = 20 - }, -/obj/machinery/recharger/wallcharger{ - pixel_x = 8; - pixel_y = 20 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony/jail) -"io" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 1 - }, -/obj/effect/floor_decal/borderfloorwhite, -/obj/machinery/washing_machine, -/obj/machinery/light{ - dir = 8 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/colony/bathroom) -"ip" = ( -/obj/effect/floor_decal/borderfloorwhite, -/obj/machinery/power/apc{ - locked = 0; - name = "south bump"; - pixel_y = -28 - }, -/obj/structure/cable, -/turf/simulated/floor/tiled/white, -/area/map_template/colony/bathroom) -"iq" = ( -/obj/machinery/atmospherics/pipe/manifold/visible/red, -/obj/effect/floor_decal/corner_techfloor_grid{ - dir = 5 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony/atmospherics) -"ir" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 4 - }, -/obj/effect/floor_decal/techfloor{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony) -"is" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 - }, -/obj/structure/cable{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/turf/simulated/floor/tiled/steel_grid, -/area/map_template/colony/armory) -"it" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/highsecurity, -/obj/machinery/door/blast/regular{ - id_tag = "colsecarm" - }, -/turf/simulated/floor/tiled/steel_grid, -/area/map_template/colony/armory) -"iu" = ( -/obj/effect/floor_decal/techfloor{ - dir = 1 - }, -/obj/machinery/alarm{ - locked = 0; - pixel_y = 20 - }, -/obj/effect/floor_decal/corner/red{ - dir = 10 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony/jail) -"iv" = ( -/obj/machinery/atmospherics/unary/vent_pump/on, -/obj/effect/floor_decal/techfloor{ - dir = 1 - }, -/obj/effect/floor_decal/corner/red{ - dir = 10 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony/jail) -"iw" = ( -/obj/structure/table/marble, -/obj/machinery/reagent_temperature, -/obj/item/reagent_containers/food/drinks/shaker, -/obj/machinery/vending/boozeomat{ - density = 0; - pixel_y = -32; - req_access = list() - }, -/turf/simulated/floor/lino, -/area/map_template/colony/messhall) -"ix" = ( -/obj/effect/floor_decal/techfloor{ - dir = 1 - }, -/obj/structure/reagent_dispensers/peppertank{ - pixel_y = 28 - }, -/obj/effect/floor_decal/corner/red{ - dir = 10 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony/jail) -"iy" = ( -/obj/effect/floor_decal/borderfloorwhite, -/obj/structure/bed/roller/ironingboard, -/obj/item/ironingiron, -/turf/simulated/floor/tiled/white, -/area/map_template/colony/bathroom) -"iz" = ( -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/door/airlock/glass/security, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony/jail) -"iA" = ( -/obj/structure/table/rack, -/obj/item/gun/projectile/shotgun/doublebarrel, -/obj/effect/floor_decal/industrial/warning{ - dir = 8; - icon_state = "warning" - }, -/obj/machinery/light{ - dir = 8 - }, -/turf/simulated/floor/tiled/steel_ridged, -/area/map_template/colony/armory) -"iB" = ( -/obj/machinery/atmospherics/portables_connector{ - dir = 4 - }, -/obj/effect/floor_decal/industrial/outline/orange, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony/atmospherics) -"iC" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/effect/floor_decal/techfloor{ - dir = 9 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony) -"iD" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 1 - }, -/obj/effect/floor_decal/techfloor{ - dir = 5 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony) -"iE" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/cable{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/effect/floor_decal/techfloor{ - dir = 4 - }, -/obj/effect/floor_decal/corner/green{ - dir = 9 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony) -"iF" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/effect/floor_decal/techfloor{ - dir = 6 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony) -"iG" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 1 - }, -/obj/effect/floor_decal/techfloor{ - dir = 8 - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/floor_decal/corner/red{ - dir = 6 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony/jail) -"iH" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/cable{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony/jail) -"iI" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony/jail) -"iJ" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 4 - }, -/obj/structure/cable{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony/jail) -"iK" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 1 - }, -/obj/effect/floor_decal/techfloor, -/obj/machinery/power/apc{ - locked = 0; - name = "south bump"; - pixel_y = -28 - }, -/obj/structure/cable, -/obj/effect/floor_decal/corner_techfloor_grid{ - dir = 4 - }, -/obj/effect/floor_decal/corner_techfloor_grid{ - dir = 1 - }, -/obj/structure/closet/firecloset, -/obj/item/device/flashlight/lamp/floodlamp, -/obj/random/firstaid, -/obj/random/firstaid, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony/atmospherics) -"iL" = ( -/obj/machinery/door/firedoor, -/obj/effect/floor_decal/techfloor{ - dir = 8 - }, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony) -"iM" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/effect/floor_decal/techfloor{ - dir = 9 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony) -"iN" = ( -/obj/machinery/atmospherics/portables_connector{ - dir = 8 - }, -/obj/effect/floor_decal/industrial/outline/orange, -/obj/machinery/light/spot, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony/atmospherics) -"iO" = ( -/obj/structure/table/gamblingtable, -/obj/item/material/ashtray/glass, -/turf/simulated/floor/wood, -/area/map_template/colony/commons) -"iP" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/item/stool/bar/padded, -/turf/simulated/floor/wood, -/area/map_template/colony/commons) -"iQ" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 8 - }, -/obj/effect/floor_decal/techfloor{ - dir = 10 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony) -"iR" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/obj/structure/closet/crate, -/obj/item/deck/cards, -/obj/item/deck/cards, -/obj/item/storage/pill_bottle/dice, -/obj/item/storage/pill_bottle/dice_nerd, -/obj/random/drinkbottle, -/obj/effect/floor_decal/spline/fancy/wood{ - dir = 9 - }, -/turf/simulated/floor/wood, -/area/map_template/colony/commons) -"iS" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/steel_grid, -/area/map_template/colony/armory) -"iT" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/effect/floor_decal/techfloor{ - dir = 4 - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/cable{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/effect/floor_decal/corner/red{ - dir = 9 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony/jail) -"iU" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/effect/floor_decal/techfloor{ - dir = 8 - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/floor_decal/corner/red{ - dir = 6 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony/jail) -"iV" = ( -/turf/simulated/wall/r_wall, -/area/map_template/colony/mineralprocessing) -"iW" = ( -/obj/machinery/atmospherics/pipe/manifold/visible{ - dir = 8 - }, -/obj/machinery/portable_atmospherics/canister/oxygen, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony/atmospherics) -"iX" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/hygiene/drain, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony/jail) -"iY" = ( -/obj/effect/floor_decal/techfloor{ - dir = 8 - }, -/obj/structure/table/rack, -/obj/item/device/scanner/gas, -/obj/item/device/scanner/gas, -/obj/item/device/scanner/gas, -/obj/item/clamp, -/obj/item/clamp, -/obj/item/clamp, -/obj/item/clamp, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony/atmospherics) -"iZ" = ( -/obj/effect/floor_decal/techfloor{ - dir = 4 - }, -/obj/effect/floor_decal/corner/red{ - dir = 9 - }, -/obj/item/device/radio/intercom/map_preset/playablecolony{ - dir = 8; - pixel_x = 22 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony/jail) -"ja" = ( -/obj/machinery/vending/sovietsoda, -/obj/machinery/light{ - dir = 1 - }, -/obj/effect/floor_decal/spline/fancy/wood{ - dir = 1 - }, -/turf/simulated/floor/wood, -/area/map_template/colony/commons) -"jc" = ( -/obj/structure/sign/warning/smoking{ - pixel_y = -28 - }, -/obj/effect/floor_decal/spline/fancy/wood, -/turf/simulated/floor/wood, -/area/map_template/colony/commons) -"jd" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/obj/effect/floor_decal/techfloor{ - dir = 8 - }, -/obj/effect/floor_decal/corner/green{ - dir = 6 - }, -/obj/structure/flora/pottedplant/minitree, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony) -"je" = ( -/obj/item/stool/bar/padded, -/obj/structure/sign/warning/smoking{ - pixel_y = 28 - }, -/obj/effect/floor_decal/spline/fancy/wood{ - dir = 1 - }, -/turf/simulated/floor/wood, -/area/map_template/colony/commons) -"jf" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 8 - }, -/obj/effect/floor_decal/techfloor{ - dir = 4 - }, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/effect/floor_decal/corner/red{ - dir = 9 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony/jail) -"jg" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 4 - }, -/obj/effect/floor_decal/techfloor{ - dir = 8 - }, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony) -"jh" = ( -/obj/effect/floor_decal/techfloor{ - dir = 10 - }, -/obj/structure/closet{ - name = "Prisoner's Locker" - }, -/obj/effect/floor_decal/corner/red{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony/jail) -"ji" = ( -/obj/effect/floor_decal/techfloor, -/obj/machinery/power/apc{ - locked = 0; - name = "south bump"; - pixel_y = -28 - }, -/obj/structure/cable, -/obj/structure/closet{ - name = "Prisoner's Locker" - }, -/obj/effect/floor_decal/corner/red{ - dir = 5 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony/jail) -"jj" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - level = 2 - }, -/obj/item/stool/bar/padded, -/obj/effect/decal/cleanable/cobweb2, -/obj/effect/floor_decal/spline/fancy/wood{ - dir = 5 - }, -/turf/simulated/floor/wood, -/area/map_template/colony/commons) -"jk" = ( -/obj/structure/hygiene/toilet{ - pixel_y = 12 - }, -/obj/effect/floor_decal/corner/beige{ - dir = 5 - }, -/obj/effect/decal/cleanable/vomit, -/turf/simulated/floor/tiled/white/monotile, -/area/map_template/colony/bathroom) -"jl" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/floor_decal/spline/fancy/wood{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/wood, -/area/map_template/colony/commons) -"jm" = ( -/obj/effect/floor_decal/techfloor, -/obj/structure/flora/pottedplant{ - desc = "Used to bring the room together...before the accident."; - icon_state = "plant-25"; - name = "Jamie" - }, -/obj/effect/floor_decal/corner/red{ - dir = 5 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony/jail) -"jn" = ( -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/door/airlock/civilian, -/turf/simulated/floor/tiled/white, -/area/map_template/colony/bathroom) -"jo" = ( -/obj/effect/floor_decal/techfloor, -/obj/effect/floor_decal/corner/red{ - dir = 5 - }, -/obj/effect/floor_decal/techfloor/hole/right, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony/jail) -"jp" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony) -"jq" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony) -"jr" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/effect/floor_decal/techfloor, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/effect/floor_decal/corner/red{ - dir = 5 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony/jail) -"js" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/wood, -/area/map_template/colony/commons) -"jt" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 4 - }, -/obj/structure/table/gamblingtable, -/obj/effect/floor_decal/spline/fancy/wood{ - dir = 4 - }, -/turf/simulated/floor/wood, -/area/map_template/colony/commons) -"ju" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/item/stool/bar/padded, -/obj/effect/floor_decal/spline/fancy/wood{ - dir = 8 - }, -/turf/simulated/floor/wood, -/area/map_template/colony/commons) -"jv" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/item/stool/bar/padded, -/obj/effect/floor_decal/spline/fancy/wood{ - dir = 4 - }, -/turf/simulated/floor/wood, -/area/map_template/colony/commons) -"jw" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/floor_decal/corner/paleblue{ - dir = 5 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/colony/bathroom) -"jx" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/item/device/radio/intercom/map_preset/playablecolony{ - dir = 8; - pixel_x = 22 - }, -/turf/simulated/floor/tiled/steel_grid, -/area/map_template/colony/armory) -"jy" = ( -/obj/effect/floor_decal/techfloor, -/obj/structure/table/steel_reinforced, -/obj/item/paper_bin, -/obj/item/pen/multi, -/obj/effect/floor_decal/corner/red{ - dir = 5 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony/jail) -"jz" = ( -/obj/effect/floor_decal/techfloor{ - dir = 6 - }, -/obj/structure/bed/chair/comfy/brown{ - dir = 8 - }, -/obj/effect/floor_decal/corner/red{ - dir = 1 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony/jail) -"jA" = ( -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/door/airlock/glass/security, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony/jail) -"jB" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 4 - }, -/obj/effect/floor_decal/techfloor{ - dir = 10 - }, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/item/device/radio/intercom/map_preset/playablecolony{ - dir = 4; - pixel_x = -21 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony) -"jC" = ( -/obj/machinery/conveyor{ - id = "colonymine" - }, -/turf/simulated/floor/tiled/steel_ridged, -/area/map_template/colony/mineralprocessing) -"jD" = ( -/obj/effect/floor_decal/borderfloorwhite, -/obj/structure/table/steel_reinforced, -/obj/item/storage/box/detergent, -/obj/item/device/radio/intercom/map_preset/playablecolony{ - dir = 1; - pixel_y = -28 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/colony/bathroom) -"jE" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 1 - }, -/obj/item/stool/bar/padded, -/obj/effect/floor_decal/spline/fancy/wood{ - dir = 10 - }, -/obj/item/device/radio/intercom/map_preset/playablecolony{ - dir = 1; - pixel_y = -28 - }, -/turf/simulated/floor/wood, -/area/map_template/colony/commons) -"jF" = ( -/obj/machinery/door/airlock/civilian, -/turf/simulated/floor/tiled/white, -/area/map_template/colony/bathroom) -"jG" = ( -/obj/structure/table/gamblingtable, -/obj/machinery/light, -/obj/effect/floor_decal/spline/fancy/wood, -/turf/simulated/floor/wood, -/area/map_template/colony/commons) -"jH" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, -/obj/effect/floor_decal/corner/beige{ - dir = 5 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/colony/bathroom) -"jI" = ( -/obj/structure/hygiene/sink{ - dir = 1; - pixel_y = 16 - }, -/obj/item/storage/mirror{ - pixel_y = 32 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/effect/floor_decal/corner/beige{ - dir = 5 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/colony/bathroom) -"jJ" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/effect/floor_decal/corner/beige{ - dir = 5 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/colony/bathroom) -"jK" = ( -/obj/structure/catwalk, -/obj/machinery/light/spot{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/exoplanet/concrete, -/area/map_template/colony/messhall) -"jL" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/floor_decal/corner/paleblue{ - dir = 5 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/colony/bathroom) -"jM" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 1 - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/floor_decal/techfloor{ - dir = 8 - }, -/obj/effect/floor_decal/corner/green{ - dir = 6 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony) -"jN" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/cable{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/effect/floor_decal/techfloor{ - dir = 4 - }, -/obj/effect/floor_decal/corner/green{ - dir = 9 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony) -"jO" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/effect/floor_decal/techfloor{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 8 - }, -/obj/effect/floor_decal/corner/red{ - dir = 6 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony/jail) -"jP" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 4 - }, -/obj/effect/floor_decal/techfloor{ - dir = 6 - }, -/obj/machinery/light{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony) -"jQ" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 1; - level = 2 - }, -/obj/machinery/vending/lavatory{ - name = "hacked Lavatory Essentials"; - prices = list() - }, -/obj/effect/floor_decal/techfloor{ - dir = 8 - }, -/obj/effect/floor_decal/corner/green{ - dir = 6 - }, -/obj/machinery/light{ - dir = 8 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/colony) -"jR" = ( -/obj/effect/floor_decal/techfloor{ - dir = 8 - }, -/obj/effect/floor_decal/corner/green{ - dir = 6 - }, -/obj/structure/closet/firecloset, -/obj/item/device/flashlight/lamp/floodlamp, -/obj/random/firstaid, -/obj/random/firstaid, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony) -"jS" = ( -/obj/effect/floor_decal/techfloor{ - dir = 4 - }, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 8 - }, -/obj/effect/floor_decal/corner/red{ - dir = 9 - }, -/obj/item/device/radio/intercom/map_preset/playablecolony{ - dir = 8; - pixel_x = 22 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony/jail) -"jT" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/hatch, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony) -"jU" = ( -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/door/airlock/glass/civilian, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony/hydroponics) -"jV" = ( -/obj/effect/floor_decal/techfloor{ - dir = 4 - }, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/effect/floor_decal/corner/red{ - dir = 9 - }, -/obj/machinery/light{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony/jail) -"jW" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 4 - }, -/obj/effect/floor_decal/corner/red{ - dir = 10 - }, -/obj/effect/floor_decal/industrial/warning, -/turf/simulated/floor/tiled/steel_grid, -/area/map_template/colony/armory) -"jX" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/effect/floor_decal/techfloor{ - dir = 8 - }, -/obj/effect/floor_decal/corner/red{ - dir = 6 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony/jail) -"jY" = ( -/obj/effect/floor_decal/techfloor{ - dir = 4 - }, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/effect/floor_decal/corner/red{ - dir = 9 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony/jail) -"jZ" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/obj/structure/reagent_dispensers/watertank, -/obj/effect/floor_decal/techfloor{ - dir = 9 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony) -"ka" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 1; - level = 2 - }, -/obj/structure/flora/pottedplant/orientaltree, -/obj/effect/floor_decal/spline/fancy/wood{ - dir = 6 - }, -/turf/simulated/floor/wood, -/area/map_template/colony/commons) -"kb" = ( -/obj/effect/floor_decal/techfloor{ - dir = 10 - }, -/obj/item/stool/bar/padded, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony) -"kc" = ( -/obj/structure/window/reinforced{ - dir = 1 - }, -/obj/structure/window/reinforced{ - dir = 4 - }, -/turf/simulated/floor/grass, -/area/map_template/colony/hydroponics) -"kd" = ( -/obj/machinery/door/window, -/obj/machinery/door/window/northright, -/obj/structure/window/reinforced{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony/hydroponics) -"ke" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 8 - }, -/obj/structure/table/steel_reinforced, -/obj/machinery/reagentgrinder/juicer, -/obj/item/reagent_containers/glass/beaker/large, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony/hydroponics) -"kf" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/effect/floor_decal/techfloor{ - dir = 1 - }, -/obj/machinery/seed_extractor, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/colony/hydroponics) -"kg" = ( -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/door/airlock/glass/security, -/turf/simulated/floor/lino, -/area/map_template/colony) -"kh" = ( -/obj/machinery/atmospherics/pipe/simple/visible/universal{ - dir = 4 - }, -/obj/machinery/meter, -/obj/effect/floor_decal/corner_techfloor_grid{ - dir = 5 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony/atmospherics) -"ki" = ( -/obj/effect/wallframe_spawn/reinforced, -/obj/machinery/door/firedoor, -/turf/simulated/floor/plating, -/area/map_template/colony/atmospherics) -"kj" = ( -/turf/simulated/floor/grass, -/area/map_template/colony/hydroponics) -"kk" = ( -/obj/structure/window/reinforced{ - dir = 4 - }, -/turf/simulated/floor/grass, -/area/map_template/colony/hydroponics) -"kl" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/obj/machinery/alarm{ - locked = 0; - pixel_y = 20 - }, -/obj/effect/floor_decal/techfloor{ - dir = 1 - }, -/obj/machinery/seed_storage/garden, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/colony/hydroponics) -"km" = ( -/obj/effect/floor_decal/techfloor{ - dir = 1 - }, -/obj/machinery/vending/hydronutrients, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/colony/hydroponics) -"kn" = ( -/obj/machinery/atmospherics/omni/filter{ - tag_east = 4; - tag_south = 1; - tag_west = 2 - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/colony/airlock) -"ko" = ( -/obj/machinery/mineral/processing_unit{ - input_turf = 2; - output_turf = 1 - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled/steel_ridged, -/area/map_template/colony/mineralprocessing) -"kp" = ( -/obj/structure/table/rack, -/obj/item/gun/energy/gun, -/obj/effect/floor_decal/industrial/warning{ - dir = 8; - icon_state = "warning" - }, -/obj/structure/cable{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/machinery/light{ - dir = 8 - }, -/turf/simulated/floor/tiled/steel_ridged, -/area/map_template/colony/armory) -"kq" = ( -/obj/machinery/atmospherics/pipe/manifold4w/visible, -/obj/machinery/meter, -/obj/effect/floor_decal/techfloor{ - dir = 1 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/colony/airlock) -"kr" = ( -/obj/structure/table/rack, -/obj/item/gun/projectile/pirate, -/obj/item/gun/projectile/pirate, -/obj/item/gun/projectile/pirate, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 4 - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 10; - icon_state = "warning" - }, -/obj/machinery/power/apc{ - locked = 0; - name = "south bump"; - pixel_y = -28 - }, -/obj/structure/cable, -/turf/simulated/floor/tiled/steel_ridged, -/area/map_template/colony/armory) -"ks" = ( -/obj/effect/floor_decal/techfloor{ - dir = 8 - }, -/obj/effect/floor_decal/corner/green{ - dir = 6 - }, -/obj/machinery/light{ - dir = 8 - }, -/obj/structure/closet/firecloset, -/obj/item/device/flashlight/lamp/floodlamp, -/obj/random/firstaid, -/obj/random/firstaid, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony) -"kt" = ( -/obj/machinery/atmospherics/unary/freezer{ - dir = 8 - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/alarm{ - locked = 0; - pixel_y = 20 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/colony/airlock) -"ku" = ( -/obj/machinery/alarm{ - locked = 0; - pixel_y = 20 - }, -/obj/structure/reagent_dispensers/beerkeg, -/obj/effect/floor_decal/techfloor{ - dir = 1 - }, -/obj/machinery/light/small{ - dir = 1 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony) -"kv" = ( -/obj/effect/floor_decal/techfloor{ - dir = 6 - }, -/obj/structure/closet/crate, -/obj/item/storage/briefcase/inflatable, -/obj/item/storage/briefcase/inflatable, -/obj/item/device/oxycandle, -/obj/item/device/oxycandle, -/obj/item/device/oxycandle, -/obj/item/device/oxycandle, -/obj/item/device/oxycandle, -/obj/item/device/oxycandle, -/obj/item/device/oxycandle, -/obj/item/device/oxycandle, -/obj/item/device/oxycandle, -/obj/item/device/radio/intercom/map_preset/playablecolony{ - dir = 8; - pixel_x = 22 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony) -"kw" = ( -/obj/machinery/atmospherics/omni/filter{ - tag_east = 3; - tag_north = 2; - tag_south = 1 - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/colony/airlock) -"kx" = ( -/obj/effect/floor_decal/techfloor{ - dir = 5 - }, -/obj/structure/closet/crate/hydroponics/prespawned, -/obj/item/reagent_containers/glass/bucket, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/colony/hydroponics) -"ky" = ( -/obj/machinery/light, -/obj/effect/floor_decal/techfloor, -/obj/machinery/atmospherics/pipe/manifold4w/visible, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/colony/airlock) -"kz" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 4 - }, -/obj/machinery/vending/coffee{ - name = "hacked Hot Drinks machine"; - prices = list() - }, -/obj/item/device/radio/intercom/map_preset/playablecolony{ - dir = 4; - pixel_x = -21 - }, -/turf/simulated/floor/lino, -/area/map_template/colony) -"kA" = ( -/obj/machinery/alarm{ - locked = 0; - pixel_y = 20 - }, -/obj/structure/flora/pottedplant/tropical, -/turf/simulated/floor/lino, -/area/map_template/colony) -"kB" = ( -/obj/structure/window/reinforced{ - dir = 4 - }, -/obj/structure/table/steel_reinforced, -/obj/item/paper_bin, -/obj/item/pen/multi, -/turf/simulated/floor/lino, -/area/map_template/colony) -"kC" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 8 - }, -/obj/effect/floor_decal/techfloor{ - dir = 5 - }, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony) -"kD" = ( -/obj/machinery/atmospherics/pipe/simple/visible/red{ - dir = 4 - }, -/obj/machinery/door/firedoor, -/obj/effect/wallframe_spawn/reinforced_phoron, -/turf/simulated/floor/plating, -/area/map_template/colony/atmospherics) -"kE" = ( -/obj/effect/floor_decal/techfloor{ - dir = 9 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony/hydroponics) -"kF" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 8 - }, -/obj/structure/table/steel_reinforced, -/obj/item/reagent_containers/spray/pepper, -/obj/machinery/recharger, -/obj/item/device/radio/map_preset/playablecolony, -/obj/item/storage/box/handcuffs, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony/jail) -"kG" = ( -/obj/effect/floor_decal/techfloor/orange, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/button/alternate/door/bolts{ - id_tag = "colj"; - name = "Jail Bolt Control"; - pixel_x = 28 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony/jail) -"kH" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 1 - }, -/obj/structure/closet, -/obj/item/storage/backpack/rucksack/tan, -/obj/item/storage/backpack/rucksack/navy, -/obj/item/storage/backpack/rucksack/green, -/obj/item/storage/backpack/rucksack/blue, -/obj/item/storage/backpack/satchel/leather/black, -/obj/item/storage/backpack/satchel/leather/khaki, -/obj/item/storage/backpack/satchel/leather/navy, -/obj/item/storage/backpack/satchel/leather/olive, -/obj/item/storage/backpack/satchel/leather/reddish, -/obj/item/storage/backpack/messenger/med, -/obj/item/storage/backpack/messenger/chem, -/obj/item/clothing/accessory/storage/black_drop, -/obj/item/clothing/accessory/storage/black_drop, -/obj/item/clothing/accessory/storage/brown_drop, -/obj/item/clothing/accessory/storage/brown_drop, -/obj/item/clothing/accessory/storage/white_drop, -/obj/item/clothing/accessory/storage/white_drop, -/turf/simulated/floor/wood, -/area/map_template/colony/dorms) -"kI" = ( -/obj/machinery/door/airlock/hatch, -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/binary/pump{ - dir = 1 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/colony) -"kJ" = ( -/obj/machinery/atmospherics/binary/pump{ - dir = 8 - }, -/obj/effect/floor_decal/techfloor, -/obj/effect/floor_decal/techfloor/hole, -/obj/effect/floor_decal/corner_techfloor_grid{ - dir = 4 - }, -/obj/effect/floor_decal/corner_techfloor_grid{ - dir = 1 - }, -/obj/machinery/portable_atmospherics/powered/scrubber, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony/atmospherics) -"kK" = ( -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/effect/floor_decal/industrial/loading{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/exoplanet/concrete, -/area/map_template/colony/mineralprocessing) -"kL" = ( -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/exoplanet/concrete, -/area/map_template/colony/mineralprocessing) -"kM" = ( -/obj/structure/crematorium{ - id = 8 - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/exoplanet/concrete, -/area/map_template/colony/mineralprocessing) -"kN" = ( -/obj/machinery/button/crematorium{ - id_tag = 8; - pixel_y = 25; - req_access = list() - }, -/obj/effect/decal/cleanable/dirt, -/obj/structure/table/steel_reinforced, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/recharger, -/turf/simulated/floor/exoplanet/concrete, -/area/map_template/colony/mineralprocessing) -"kO" = ( -/obj/structure/closet/firecloset, -/obj/effect/floor_decal/techfloor{ - dir = 5 - }, -/obj/item/device/flashlight/lamp/floodlamp, -/obj/random/firstaid, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony) -"kP" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 4 - }, -/obj/machinery/vending/snix, -/turf/simulated/floor/lino, -/area/map_template/colony) -"kQ" = ( -/obj/structure/bed/chair/comfy/brown{ - dir = 4 - }, -/turf/simulated/floor/lino, -/area/map_template/colony) -"kR" = ( -/obj/machinery/mech_recharger, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/exoplanet/concrete, -/area/map_template/colony/mineralprocessing) -"kS" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 8 - }, -/obj/effect/floor_decal/techfloor{ - dir = 6 - }, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony) -"kT" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony) -"kV" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 8 - }, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/grass, -/area/map_template/colony/hydroponics) -"kW" = ( -/obj/effect/floor_decal/techfloor{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony/hydroponics) -"kX" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/effect/floor_decal/techfloor{ - dir = 8 - }, -/obj/effect/floor_decal/corner/red{ - dir = 6 - }, -/obj/structure/sign/warning/secure_area/armory{ - dir = 4; - pixel_x = -32 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony/jail) -"kY" = ( -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 4 - }, -/obj/machinery/door/firedoor, -/obj/effect/wallframe_spawn/reinforced_phoron, -/turf/simulated/floor/plating, -/area/map_template/colony/airlock) -"kZ" = ( -/obj/machinery/computer/mining, -/obj/structure/table/steel_reinforced, -/obj/effect/decal/cleanable/dirt, -/obj/structure/railing/mapped{ - dir = 8; - icon_state = "railing0-1" - }, -/turf/simulated/floor/exoplanet/concrete, -/area/map_template/colony/mineralprocessing) -"la" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/exoplanet/concrete, -/area/map_template/colony/mineralprocessing) -"lb" = ( -/obj/machinery/door/window/eastright, -/obj/structure/table/steel_reinforced, -/obj/machinery/button/blast_door{ - id_tag = "colmainexit"; - name = "Exit Blast Doors" - }, -/obj/machinery/button/blast_door{ - id_tag = "colmainblast"; - name = "Entry Blast Doors"; - pixel_y = 8 - }, -/turf/simulated/floor/lino, -/area/map_template/colony) -"lc" = ( -/obj/machinery/atmospherics/pipe/simple/heat_exchanging{ - dir = 5 - }, -/obj/machinery/atmospherics/unary/outlet_injector{ - frequency = 1441; - id = "cn2n" - }, -/turf/simulated/floor/reinforced/nitrogen, -/area/map_template/colony/atmospherics) -"le" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/mob/living/simple_animal/passive/cow, -/turf/simulated/floor/grass, -/area/map_template/colony/hydroponics) -"lf" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/effect/floor_decal/techfloor{ - dir = 9 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony) -"lg" = ( -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/exoplanet/concrete, -/area/map_template/colony/mineralprocessing) -"lh" = ( -/obj/machinery/door/airlock/external{ - frequency = 1380; - id_tag = "playablecolonymain_exterior_door"; - locked = 1 - }, -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony/airlock) -"li" = ( -/obj/structure/railing/mapped{ - dir = 8; - icon_state = "railing0-1" - }, -/obj/machinery/conveyor_switch{ - id = "colonymine" - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/steel_ridged, -/area/map_template/colony/mineralprocessing) -"lj" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/floor_decal/techfloor{ - dir = 1 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony) -"lk" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 1; - level = 2 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony) -"ll" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/effect/floor_decal/techfloor{ - dir = 1 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony) -"lm" = ( -/obj/effect/floor_decal/techfloor{ - dir = 8 - }, -/obj/effect/floor_decal/corner/green{ - dir = 6 - }, -/obj/machinery/vending/cigarette{ - name = "hacked Cigarette machine"; - prices = list() - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/colony) -"ln" = ( -/obj/structure/catwalk, -/obj/effect/floor_decal/industrial/warning/dust{ - dir = 9 - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/exoplanet/concrete, -/area/map_template/colony/mineralprocessing) -"lo" = ( -/mob/living/simple_animal/passive/cow, -/turf/simulated/floor/grass, -/area/map_template/colony/hydroponics) -"lp" = ( -/obj/structure/hygiene/drain, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony) -"lq" = ( -/obj/effect/wallframe_spawn/reinforced, -/obj/machinery/door/firedoor, -/turf/simulated/floor/plating, -/area/map_template/colony/commons) -"lr" = ( -/obj/effect/floor_decal/techfloor, -/obj/effect/floor_decal/techfloor/hole/right, -/obj/machinery/light, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony) -"ls" = ( -/obj/effect/wallframe_spawn/reinforced, -/obj/machinery/door/firedoor, -/turf/simulated/floor/plating, -/area/map_template/colony/jail) -"lt" = ( -/obj/machinery/power/apc{ - locked = 0; - name = "south bump"; - pixel_y = -28 - }, -/obj/structure/cable{ - d2 = 4; - icon_state = "0-4" - }, -/obj/structure/catwalk, -/obj/effect/floor_decal/industrial/warning/dust{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/exoplanet/concrete, -/area/map_template/colony/mineralprocessing) -"lu" = ( -/obj/structure/cable{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/structure/catwalk, -/obj/effect/floor_decal/industrial/warning/dust{ - dir = 5 - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/exoplanet/concrete, -/area/map_template/colony/mineralprocessing) -"lv" = ( -/obj/effect/floor_decal/industrial/warning/dust, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/exoplanet/concrete, -/area/map_template/colony/mineralprocessing) -"lw" = ( -/obj/machinery/door/firedoor, -/obj/effect/wallframe_spawn/reinforced_phoron, -/obj/machinery/atmospherics/pipe/manifold/hidden{ - dir = 8 - }, -/turf/simulated/floor/plating, -/area/map_template/colony/airlock) -"lx" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 - }, -/obj/machinery/light{ - dir = 8 - }, -/obj/effect/floor_decal/techfloor{ - dir = 1 - }, -/obj/structure/closet/firecloset, -/obj/item/device/flashlight/lamp/floodlamp, -/obj/random/firstaid, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/colony/hydroponics) -"ly" = ( -/obj/machinery/door/firedoor, -/obj/effect/wallframe_spawn/reinforced_phoron, -/turf/simulated/floor/plating, -/area/map_template/colony/commons) -"lz" = ( -/obj/structure/railing/mapped{ - dir = 8; - icon_state = "railing0-1" - }, -/obj/machinery/computer/mining, -/obj/structure/table/steel_reinforced, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/exoplanet/concrete, -/area/map_template/colony/mineralprocessing) -"lA" = ( -/obj/machinery/light/spot{ - dir = 4 - }, -/obj/structure/catwalk, -/obj/effect/floor_decal/industrial/warning/dust{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/exoplanet/concrete, -/area/map_template/colony/mineralprocessing) -"lB" = ( -/obj/machinery/door/firedoor, -/obj/effect/wallframe_spawn/reinforced_phoron, -/turf/simulated/floor/plating, -/area/map_template/colony/hydroponics) -"lC" = ( -/obj/machinery/light/spot{ - dir = 8 - }, -/obj/structure/closet/crate, -/obj/item/stack/material/plasteel/ten, -/obj/item/stack/material/plasteel/ten, -/obj/item/stack/material/steel/fifty, -/obj/item/stack/material/uranium/ten, -/obj/item/stack/material/uranium/ten, -/obj/item/stack/material/platinum/ten, -/obj/item/stack/material/diamond/ten, -/obj/item/stack/material/gold/ten, -/obj/item/stack/material/silver/ten, -/obj/structure/catwalk, -/obj/structure/cable{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/effect/floor_decal/industrial/warning/dust{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/exoplanet/concrete, -/area/map_template/colony/mineralprocessing) -"lD" = ( -/obj/structure/catwalk, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/exoplanet/concrete, -/area/map_template/colony/mineralprocessing) -"lG" = ( -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/door/airlock/glass/security{ - id_tag = "colj" - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony/jail) -"lH" = ( -/obj/structure/table/rack, -/obj/item/ammo_magazine/rifle, -/obj/item/ammo_magazine/rifle, -/obj/item/ammo_magazine/rifle, -/obj/item/ammo_magazine/rifle, -/obj/item/ammo_magazine/rifle, -/obj/item/ammo_magazine/rifle, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 4 - }, -/obj/machinery/light{ - dir = 8 - }, -/turf/simulated/floor/tiled/steel_ridged, -/area/map_template/colony/armory) -"lI" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 1; - level = 2 - }, -/obj/effect/floor_decal/borderfloorwhite, -/obj/machinery/light{ - dir = 4 - }, -/obj/structure/table/steel_reinforced, -/obj/machinery/recharger, -/turf/simulated/floor/tiled/white, -/area/map_template/colony/bathroom) -"lJ" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/embedded_controller/radio/airlock/airlock_controller{ - cycle_to_external_air = 1; - frequency = 1380; - id_tag = "playablecolonymain"; - pixel_y = 28; - tag_airpump = "playablecolonymain_pump"; - tag_chamber_sensor = "playablecolonymain_sensor_chamber"; - tag_exterior_door = "playablecolonymain_exterior_door"; - tag_exterior_sensor = "playablecolonymain_sensor_external"; - tag_interior_door = "playablecolonymain_interior_door"; - tag_interior_sensor = "playablecolonymain_sensor_interior" - }, -/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{ - id_tag = "playablecolonymain_pump"; - power_rating = 25000 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony/airlock) -"lK" = ( -/obj/machinery/atmospherics/omni/filter{ - tag_east = 2; - tag_north = 3; - tag_west = 1 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/colony/atmospherics) -"lL" = ( -/obj/machinery/atmospherics/omni/filter{ - tag_east = 2; - tag_north = 5; - tag_west = 1 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/colony/atmospherics) -"lM" = ( -/obj/machinery/airlock_sensor{ - frequency = 1380; - id_tag = "playablecolonymain_sensor_chamber"; - pixel_x = 22 - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{ - id_tag = "playablecolonymain_pump"; - power_rating = 25000 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony/airlock) -"lN" = ( -/obj/machinery/door/firedoor, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/door/airlock/glass/security{ - id_tag = "colj" - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony/jail) -"lO" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/effect/floor_decal/techfloor{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony) -"lP" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply, -/obj/effect/floor_decal/techfloor{ - dir = 8 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony) -"lQ" = ( -/obj/machinery/portable_atmospherics/canister/air/airlock, -/obj/machinery/atmospherics/portables_connector, -/obj/machinery/access_button/airlock_interior{ - frequency = 1380; - master_tag = "playablecolonymain"; - pixel_x = -22; - pixel_y = 5 - }, -/obj/effect/floor_decal/corner/yellow{ - dir = 5 - }, -/obj/machinery/airlock_sensor/airlock_interior{ - frequency = 1380; - id_tag = "playablecolonymain_sensor_interior"; - pixel_x = -22 - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 8; - icon_state = "warning" - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/colony/airlock) -"lR" = ( -/obj/machinery/alarm{ - locked = 0; - pixel_y = 20 - }, -/obj/effect/floor_decal/corner/yellow{ - dir = 5 - }, -/obj/machinery/suit_cycler{ - name = "Colonial suit cycler"; - req_access = list() - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/colony/airlock) -"lS" = ( -/obj/structure/catwalk, -/obj/effect/floor_decal/industrial/warning/dust{ - dir = 10 - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/exoplanet/concrete, -/area/map_template/colony/mineralprocessing) -"lT" = ( -/obj/structure/catwalk, -/obj/effect/floor_decal/industrial/warning/dust, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/exoplanet/concrete, -/area/map_template/colony/mineralprocessing) -"lU" = ( -/obj/structure/catwalk, -/obj/effect/floor_decal/industrial/warning/dust{ - dir = 6 - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/exoplanet/concrete, -/area/map_template/colony/mineralprocessing) -"lV" = ( -/obj/effect/floor_decal/industrial/warning/dust{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/exoplanet/concrete, -/area/map_template/colony/mineralprocessing) -"lW" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 - }, -/obj/structure/closet/crate/trashcart, -/obj/item/storage/box/detergent, -/obj/item/storage/box/detergent, -/obj/item/mop, -/obj/item/reagent_containers/glass/bucket, -/obj/item/storage/bag/trash, -/obj/item/storage/bag/trash, -/obj/item/storage/bag/trash, -/obj/item/storage/bag/trash, -/obj/item/storage/bag/trash, -/obj/item/reagent_containers/spray/cleaner, -/obj/item/reagent_containers/spray/cleaner, -/obj/effect/floor_decal/techfloor{ - dir = 8 - }, -/obj/item/clothing/mask/plunger, -/obj/item/device/lightreplacer, -/obj/item/storage/box/lights/mixed, -/obj/item/storage/box/lights/mixed, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony) -"lX" = ( -/obj/effect/floor_decal/industrial/warning/dust, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/simple/hidden, -/obj/item/device/radio/intercom/map_preset/playablecolony{ - dir = 8; - pixel_x = 22 - }, -/turf/simulated/floor/exoplanet/concrete, -/area/map_template/colony/mineralprocessing) -"lY" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply, -/obj/effect/floor_decal/techfloor{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony) -"lZ" = ( -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 5 - }, -/obj/structure/catwalk, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/effect/floor_decal/industrial/warning/dust{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/exoplanet/concrete, -/area/map_template/colony/mineralprocessing) -"ma" = ( -/obj/machinery/airlock_sensor/airlock_exterior{ - frequency = 1380; - id_tag = "playablecolonymain_sensor_external"; - pixel_x = 22 - }, -/obj/machinery/access_button/airlock_exterior{ - frequency = 1380; - master_tag = "playablecolonymain"; - pixel_x = 19; - pixel_y = 5 - }, -/obj/machinery/atmospherics/pipe/simple/hidden, -/obj/structure/catwalk, -/obj/structure/cable{ - d1 = 2; - d2 = 8; - desc = "A flexible superconducting cable for heavy-duty power transfer. It's been labeled 'chaos reigns'."; - icon_state = "2-8" - }, -/obj/effect/floor_decal/industrial/warning/dust{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 4 - }, -/obj/structure/closet/emcloset, -/obj/item/clothing/head/helmet/space/emergency, -/obj/item/clothing/suit/space/emergency, -/obj/item/clothing/suit/space/emergency, -/turf/simulated/floor/exoplanet/concrete, -/area/map_template/colony/mineralprocessing) -"mb" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/manifold4w/hidden, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony/airlock) -"mc" = ( -/obj/structure/grille, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/cable{ - d2 = 8; - icon_state = "0-8" - }, -/turf/simulated/floor/exoplanet/concrete, -/area/template_noop) -"md" = ( -/obj/structure/grille, -/obj/structure/cable{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/structure/cable{ - d2 = 8; - icon_state = "0-8" - }, -/turf/simulated/floor/exoplanet/concrete, -/area/template_noop) -"me" = ( -/obj/machinery/fabricator/hacked, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/colony/engineering) -"mf" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/bed, -/obj/effect/floor_decal/corner/red{ - dir = 9 - }, -/obj/effect/floor_decal/corner/red{ - dir = 5 - }, -/obj/item/bedsheet/orange, -/obj/machinery/light/spot{ - dir = 1 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/map_template/colony/jail) -"mg" = ( -/obj/machinery/atmospherics/pipe/manifold4w/hidden, -/obj/effect/floor_decal/industrial/warning{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony/airlock) -"mh" = ( -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 4 - }, -/obj/machinery/door/airlock/external{ - frequency = 1380; - id_tag = "playablecolonymain_interior_door" - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony/airlock) -"mi" = ( -/obj/structure/bed/chair/comfy/brown{ - dir = 8 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/colony/command) -"mj" = ( -/obj/machinery/door/firedoor, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/door/blast/regular/open{ - icon_state = "pdoor0"; - id_tag = "colmainblast"; - name = "Entry Blast Door" - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony) -"mk" = ( -/obj/structure/railing/mapped{ - dir = 8; - icon_state = "railing0-1" - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/exoplanet/concrete, -/area/template_noop) -"ml" = ( -/obj/machinery/door/firedoor, -/obj/structure/cable{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/effect/wallframe_spawn/reinforced_phoron, -/obj/structure/cable{ - d2 = 4; - icon_state = "0-4" - }, -/turf/simulated/floor/plating, -/area/map_template/colony/jail) -"mm" = ( -/obj/machinery/door/firedoor, -/obj/effect/wallframe_spawn/reinforced_phoron, -/obj/structure/cable{ - d2 = 8; - icon_state = "0-8" - }, -/obj/structure/cable{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/turf/simulated/floor/plating, -/area/map_template/colony/jail) -"mn" = ( -/obj/structure/railing/mapped{ - dir = 8; - icon_state = "railing0-1" - }, -/obj/structure/railing/mapped{ - dir = 4; - icon_state = "railing0-1" - }, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/exoplanet/concrete, -/area/map_template/colony/mineralprocessing) -"mo" = ( -/obj/machinery/door/firedoor, -/obj/effect/floor_decal/techfloor{ - dir = 4 - }, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/door/blast/regular/open{ - icon_state = "pdoor0"; - id_tag = "colmainexit" - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony) -"mp" = ( -/obj/machinery/door/firedoor, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/cable, -/obj/effect/wallframe_spawn/reinforced_phoron, -/turf/simulated/floor/plating, -/area/map_template/colony/jail) -"mq" = ( -/obj/effect/wallframe_spawn/reinforced, -/obj/machinery/door/firedoor, -/turf/simulated/floor/plating, -/area/map_template/colony) -"mr" = ( -/obj/machinery/atmospherics/pipe/manifold4w/hidden, -/obj/effect/floor_decal/industrial/warning{ - dir = 8; - icon_state = "warning" - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/colony/airlock) -"ms" = ( -/obj/effect/floor_decal/techfloor{ - dir = 9 - }, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/binary/pump/high_power/on{ - dir = 8; - target_pressure = 500 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony/airlock) -"mt" = ( -/obj/machinery/door/firedoor, -/obj/structure/cable, -/obj/effect/wallframe_spawn/reinforced_phoron, -/turf/simulated/floor/plating, -/area/map_template/colony/jail) -"mu" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/wallframe_spawn/reinforced_phoron, -/obj/machinery/door/firedoor, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony/airlock) -"mv" = ( -/obj/structure/railing/mapped, -/obj/effect/floor_decal/industrial/warning/dust, -/obj/structure/ore_box, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/exoplanet/concrete, -/area/map_template/colony/mineralprocessing) -"mw" = ( -/obj/machinery/door/firedoor, -/obj/effect/wallframe_spawn/reinforced_phoron, -/turf/simulated/floor/plating, -/area/map_template/colony/airlock) -"mx" = ( -/obj/machinery/hologram/holopad/longrange, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony/command) -"my" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/effect/floor_decal/techfloor{ - dir = 8 - }, -/obj/effect/floor_decal/corner/green{ - dir = 6 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony) -"mz" = ( -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/door/airlock/command, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony/tcomms) -"mA" = ( -/obj/effect/floor_decal/techfloor{ - dir = 10 - }, -/obj/structure/closet/firecloset, -/obj/item/device/flashlight/lamp/floodlamp, -/obj/random/firstaid, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony) -"mB" = ( -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/door/blast/regular/open{ - icon_state = "pdoor0"; - id_tag = "colmainblast"; - name = "Entry Blast Door" - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony) -"mC" = ( -/obj/structure/catwalk, -/obj/machinery/button/blast_door{ - id_tag = "colsen"; - name = "Hard Equipment Storage"; - pixel_y = 28 - }, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/exoplanet/concrete, -/area/map_template/colony/command) -"mD" = ( -/obj/structure/table/rack, -/obj/item/clothing/shoes/magboots, -/obj/item/clothing/mask/gas/radical, -/obj/item/tank/oxygen, -/obj/item/tank/oxygen, -/obj/item/tank/oxygen, -/obj/effect/floor_decal/corner/yellow{ - dir = 10 - }, -/obj/item/device/suit_cooling_unit, -/obj/item/clothing/suit/space/void/atmos, -/obj/item/clothing/head/helmet/space/void/atmos, -/obj/item/tank/oxygen_emergency_extended, -/obj/item/tank/oxygen_emergency_extended, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/colony/airlock) -"mE" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/floor_decal/techfloor{ - dir = 1 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony/hydroponics) -"mF" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 4; - level = 2 - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/floor_decal/techfloor{ - dir = 1 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony/hydroponics) -"mG" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 8 - }, -/obj/structure/cable{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/effect/floor_decal/techfloor{ - dir = 1 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony/hydroponics) -"mH" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 8 - }, -/obj/effect/floor_decal/techfloor{ - dir = 5 - }, -/obj/effect/floor_decal/corner/lime{ - dir = 8 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony/hydroponics) -"mI" = ( -/obj/structure/table/rack, -/obj/item/gun/projectile/automatic/assault_rifle, -/obj/item/gun/projectile/automatic/assault_rifle, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 4 - }, -/obj/effect/floor_decal/corner/red{ - dir = 5 - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 1; - icon_state = "warning" - }, -/turf/simulated/floor/tiled/steel_ridged, -/area/map_template/colony/armory) -"mJ" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 - }, -/obj/effect/floor_decal/corner/red{ - dir = 5 - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 1; - icon_state = "warning" - }, -/turf/simulated/floor/tiled/steel_grid, -/area/map_template/colony/armory) -"mK" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/effect/floor_decal/techfloor{ - dir = 10 - }, -/obj/effect/floor_decal/corner/red{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony/jail) -"mL" = ( -/obj/effect/floor_decal/techfloor{ - dir = 6 - }, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/effect/floor_decal/corner/red{ - dir = 1 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony/jail) -"mM" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 1 - }, -/obj/structure/closet/crate/freezer/rations, -/obj/effect/floor_decal/techfloor{ - dir = 10 - }, -/obj/item/storage/mre/menu10, -/obj/item/storage/mre/menu9, -/obj/item/storage/mre/random, -/obj/item/storage/mre/random, -/obj/item/storage/mre/random, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony) -"mN" = ( -/obj/structure/closet/crate/freezer/rations, -/obj/effect/floor_decal/techfloor, -/obj/item/storage/mre/menu10, -/obj/item/storage/mre/menu9, -/obj/item/storage/mre/random, -/obj/item/storage/mre/random, -/obj/item/storage/mre/random, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony) -"mO" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/visible/universal{ - dir = 4 - }, -/obj/effect/floor_decal/techfloor{ - dir = 5 - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony/airlock) -"mP" = ( -/obj/structure/table/steel_reinforced, -/obj/machinery/cell_charger, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/effect/decal/cleanable/dirt, -/obj/item/device/flashlight/lamp/floodlamp, -/turf/simulated/floor/exoplanet/concrete, -/area/map_template/colony/mineralprocessing) -"mQ" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/railing/mapped, -/obj/structure/railing/mapped{ - dir = 8; - icon_state = "railing0-1" - }, -/obj/machinery/recharge_station, -/turf/simulated/floor/exoplanet/concrete, -/area/map_template/colony/mineralprocessing) -"mR" = ( -/obj/structure/bed/chair/comfy/beige{ - dir = 4 - }, -/obj/effect/floor_decal/techfloor, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony) -"mS" = ( -/obj/structure/table/woodentable_reinforced, -/obj/effect/floor_decal/techfloor{ - dir = 6 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony) -"mT" = ( -/obj/effect/floor_decal/techfloor{ - dir = 10 - }, -/obj/effect/floor_decal/corner/green{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony) -"mU" = ( -/obj/effect/floor_decal/techfloor, -/obj/effect/floor_decal/corner/green{ - dir = 5 - }, -/obj/effect/floor_decal/techfloor/hole/right, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony) -"mV" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/effect/floor_decal/techfloor, -/obj/effect/floor_decal/corner/green{ - dir = 5 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony) -"mW" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/effect/floor_decal/techfloor{ - dir = 6 - }, -/obj/effect/floor_decal/corner/green{ - dir = 1 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony) -"mX" = ( -/obj/effect/floor_decal/techfloor{ - dir = 4 - }, -/obj/effect/floor_decal/corner/lime{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony/hydroponics) -"mY" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/effect/floor_decal/techfloor/orange, -/obj/effect/floor_decal/techfloor/hole/right, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony/jail) -"mZ" = ( -/obj/machinery/mining/brace{ - dir = 4 - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/exoplanet/concrete, -/area/template_noop) -"na" = ( -/obj/structure/catwalk, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 5 - }, -/turf/simulated/floor/exoplanet/concrete, -/area/map_template/colony/mineralprocessing) -"nb" = ( -/obj/structure/window/reinforced{ - dir = 4 - }, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 8 - }, -/turf/simulated/floor/grass, -/area/map_template/colony/hydroponics) -"nc" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 4 - }, -/obj/machinery/alarm{ - locked = 0; - pixel_y = 20 - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/floor_decal/corner/red{ - dir = 5 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/map_template/colony/jail) -"nd" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/floor_decal/corner/red{ - dir = 5 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/map_template/colony/jail) -"ne" = ( -/obj/structure/window/reinforced{ - dir = 4 - }, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 8 - }, -/turf/simulated/floor/grass, -/area/map_template/colony/hydroponics) -"nf" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/structure/cable{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/effect/floor_decal/corner/red{ - dir = 6 - }, -/obj/effect/floor_decal/corner/red{ - dir = 5 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/map_template/colony/jail) -"ng" = ( -/obj/machinery/door/firedoor, -/obj/effect/wallframe_spawn/reinforced, -/turf/simulated/floor/plating, -/area/map_template/colony/hydroponics) -"nh" = ( -/obj/machinery/power/apc{ - locked = 0; - name = "south bump"; - pixel_y = -28 - }, -/obj/structure/cable{ - d2 = 4; - icon_state = "0-4" - }, -/obj/structure/table/rack, -/obj/item/clothing/shoes/magboots, -/obj/item/clothing/mask/gas/radical, -/obj/item/tank/oxygen, -/obj/item/tank/oxygen, -/obj/item/tank/oxygen, -/obj/effect/floor_decal/corner/yellow{ - dir = 10 - }, -/obj/item/device/suit_cooling_unit, -/obj/item/clothing/suit/space/void/engineering/salvage, -/obj/item/clothing/head/helmet/space/void/engineering/salvage, -/obj/item/tank/oxygen_emergency_extended, -/obj/item/tank/oxygen_emergency_extended, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/colony/airlock) -"ni" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/obj/effect/floor_decal/corner/yellow{ - dir = 5 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/colony/airlock) -"nj" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/effect/floor_decal/corner/yellow{ - dir = 5 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/colony/airlock) -"nk" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 - }, -/obj/machinery/light, -/turf/simulated/floor/lino, -/area/map_template/colony) -"nl" = ( -/obj/machinery/light{ - dir = 8 - }, -/mob/living/simple_animal/passive/chicken, -/turf/simulated/floor/grass, -/area/map_template/colony/hydroponics) -"nm" = ( -/obj/machinery/mining/drill, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/exoplanet/concrete, -/area/template_noop) -"nn" = ( -/obj/effect/floor_decal/techfloor{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/portable_atmospherics/hydroponics, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony/hydroponics) -"no" = ( -/obj/structure/table/steel_reinforced, -/obj/effect/floor_decal/corner/red{ - dir = 9 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/map_template/colony/jail) -"np" = ( -/obj/structure/bed/chair, -/obj/effect/floor_decal/corner/red{ - dir = 6 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/map_template/colony/jail) -"nq" = ( -/obj/machinery/mining/brace{ - dir = 8 - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/exoplanet/concrete, -/area/template_noop) -"nr" = ( -/obj/machinery/atmospherics/unary/heater{ - dir = 8 - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/colony/airlock) -"ns" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/window/reinforced{ - dir = 4 - }, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 8 - }, -/turf/simulated/floor/grass, -/area/map_template/colony/hydroponics) -"nt" = ( -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 4 - }, -/turf/simulated/wall/r_wall, -/area/map_template/colony/airlock) -"nu" = ( -/obj/structure/bed, -/obj/effect/floor_decal/corner/red{ - dir = 9 - }, -/obj/item/bedsheet/orange, -/turf/simulated/floor/tiled/dark/monotile, -/area/map_template/colony/jail) -"nv" = ( -/obj/structure/table/steel_reinforced, -/obj/effect/floor_decal/corner/red{ - dir = 6 - }, -/obj/machinery/recharger, -/turf/simulated/floor/tiled/dark/monotile, -/area/map_template/colony/jail) -"nw" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/structure/table/rack, -/obj/item/clothing/shoes/magboots, -/obj/item/clothing/mask/gas/radical, -/obj/item/tank/oxygen, -/obj/item/tank/oxygen, -/obj/item/tank/oxygen, -/obj/effect/floor_decal/corner/yellow{ - dir = 10 - }, -/obj/item/device/suit_cooling_unit, -/obj/item/clothing/suit/space/void/mining/alt, -/obj/item/clothing/head/helmet/space/void/mining/alt, -/obj/item/tank/oxygen_emergency_extended, -/obj/item/tank/oxygen_emergency_extended, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/colony/airlock) -"nx" = ( -/obj/structure/sign/warning/moving_parts{ - dir = 4 - }, -/turf/simulated/wall/r_wall, -/area/map_template/colony/jail) -"ny" = ( -/obj/structure/grille, -/obj/structure/cable{ - d2 = 4; - icon_state = "0-4" - }, -/turf/simulated/floor/exoplanet/concrete, -/area/map_template/colony/mineralprocessing) -"nz" = ( -/obj/structure/grille, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/cable{ - d2 = 4; - icon_state = "0-4" - }, -/turf/simulated/floor/exoplanet/concrete, -/area/map_template/colony/mineralprocessing) -"nA" = ( -/obj/structure/grille, -/obj/structure/cable{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/structure/cable{ - d2 = 8; - icon_state = "0-8" - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/exoplanet/concrete, -/area/map_template/colony/mineralprocessing) -"nB" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/obj/structure/cable{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/turf/simulated/floor/grass, -/area/map_template/colony/hydroponics) -"nC" = ( -/obj/machinery/computer/arcade/orion_trail, -/obj/effect/floor_decal/corner/red{ - dir = 9 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/map_template/colony/jail) -"nD" = ( -/obj/structure/bed/chair{ - dir = 1 - }, -/obj/effect/floor_decal/corner/red{ - dir = 6 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/map_template/colony/jail) -"nE" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 4 - }, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/light{ - dir = 4 - }, -/obj/structure/railing/mapped, -/obj/structure/railing/mapped{ - dir = 1; - icon_state = "railing0-1" - }, -/obj/structure/closet/emcloset, -/obj/item/clothing/suit/space/emergency, -/obj/item/clothing/suit/space/emergency, -/obj/item/clothing/head/helmet/space/emergency, -/obj/item/clothing/head/helmet/space/emergency, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/colony/airlock) -"nF" = ( -/obj/effect/floor_decal/corner/paleblue{ - dir = 10 - }, -/obj/effect/floor_decal/corner/red{ - dir = 5 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/map_template/colony/jail) -"nG" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 - }, -/obj/effect/floor_decal/corner/paleblue{ - dir = 8 - }, -/obj/effect/floor_decal/corner/red{ - dir = 1 - }, -/obj/effect/floor_decal/corner/red{ - dir = 6 - }, -/turf/simulated/floor/tiled/dark, -/area/map_template/colony/jail) -"nH" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 - }, -/obj/effect/floor_decal/corner/beige, -/obj/effect/floor_decal/corner/red{ - dir = 4 - }, -/obj/effect/floor_decal/corner/red{ - dir = 9 - }, -/turf/simulated/floor/tiled/dark, -/area/map_template/colony/jail) -"nI" = ( -/obj/effect/floor_decal/corner/beige{ - dir = 10 - }, -/obj/effect/floor_decal/corner/red{ - dir = 5 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/map_template/colony/jail) -"nJ" = ( -/obj/effect/floor_decal/techfloor{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/obj/machinery/portable_atmospherics/hydroponics, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony/hydroponics) -"nK" = ( -/obj/structure/hygiene/shower{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/map_template/colony/jail) -"nL" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 1; - level = 2 - }, -/obj/effect/floor_decal/corner/paleblue{ - dir = 9 - }, -/obj/effect/floor_decal/corner/red{ - dir = 6 - }, -/obj/machinery/light/spot, -/obj/item/device/radio/intercom/map_preset/playablecolony{ - dir = 1; - pixel_y = -28 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/map_template/colony/jail) -"nM" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 1 - }, -/obj/effect/floor_decal/corner/beige{ - dir = 6 - }, -/obj/effect/floor_decal/corner/red{ - dir = 9 - }, -/obj/machinery/light/spot, -/turf/simulated/floor/tiled/dark/monotile, -/area/map_template/colony/jail) -"nN" = ( -/obj/structure/hygiene/toilet{ - dir = 8 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/map_template/colony/jail) -"nO" = ( -/obj/effect/floor_decal/industrial/warning/dust{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{ - dir = 8; - id_tag = "playablecolonymain_pump_out_internal"; - power_rating = 25000 - }, -/obj/item/device/radio/intercom/map_preset/playablecolony{ - dir = 4; - pixel_x = -21 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony/airlock) -"nP" = ( -/obj/structure/grille, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/cable{ - d2 = 8; - icon_state = "0-8" - }, -/turf/simulated/floor/exoplanet/concrete, -/area/map_template/colony/mineralprocessing) -"nQ" = ( -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/effect/floor_decal/techfloor{ - dir = 8 - }, -/obj/machinery/door/blast/regular/open{ - icon_state = "pdoor0"; - id_tag = "colmainexit" - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony) -"nR" = ( -/obj/structure/grille, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/cable{ - d2 = 8; - icon_state = "0-8" - }, -/obj/structure/cable{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/turf/simulated/floor/exoplanet/concrete, -/area/map_template/colony/mineralprocessing) -"nS" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/light, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{ - dir = 1; - id_tag = "playablecolonymain_pump"; - power_rating = 25000 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony/airlock) -"nT" = ( -/obj/machinery/mineral/stacking_machine{ - input_turf = 8; - output_turf = 4 - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled/steel_ridged, -/area/map_template/colony/mineralprocessing) -"nU" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{ - dir = 1; - id_tag = "playablecolonymain_pump"; - power_rating = 25000 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony/airlock) -"nV" = ( -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 9 - }, -/turf/simulated/wall/r_wall, -/area/map_template/colony/airlock) -"nW" = ( -/obj/machinery/atmospherics/pipe/simple/hidden, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 8; - icon_state = "warning" - }, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/portable_atmospherics/canister/oxygen, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/colony/airlock) -"nX" = ( -/obj/machinery/mineral/unloading_machine{ - input_turf = 2; - output_turf = 1 - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled/steel_ridged, -/area/map_template/colony/mineralprocessing) -"nY" = ( -/obj/machinery/portable_atmospherics/canister/air/airlock, -/obj/machinery/atmospherics/portables_connector{ - dir = 1 - }, -/obj/effect/floor_decal/corner/yellow{ - dir = 10 - }, -/obj/structure/sign/warning/nosmoking_burned{ - dir = 1; - pixel_x = -32 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/colony/airlock) -"nZ" = ( -/obj/structure/sign/warning/high_voltage{ - pixel_y = 28 - }, -/turf/template_noop, -/area/template_noop) -"oa" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 4 - }, -/obj/effect/floor_decal/techfloor{ - dir = 10 - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony/airlock) -"ob" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/obj/effect/floor_decal/techfloor{ - dir = 6 - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony/airlock) -"oc" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 1 - }, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/cable{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/effect/decal/cleanable/dirt, -/obj/item/device/radio/intercom/map_preset/playablecolony{ - dir = 8; - pixel_x = 22 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/colony/airlock) -"od" = ( -/obj/structure/railing/mapped, -/obj/effect/floor_decal/industrial/warning/dust, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/effect/floor_decal/industrial/loading{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/exoplanet/concrete, -/area/map_template/colony/mineralprocessing) -"oe" = ( -/obj/structure/railing/mapped, -/obj/effect/floor_decal/industrial/warning/dust, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/exoplanet/concrete, -/area/map_template/colony/mineralprocessing) -"of" = ( -/obj/structure/railing/mapped, -/obj/effect/floor_decal/industrial/warning/dust, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/exoplanet/concrete, -/area/map_template/colony/mineralprocessing) -"og" = ( -/obj/effect/floor_decal/industrial/warning/dust, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/exoplanet/concrete, -/area/map_template/colony/mineralprocessing) -"oh" = ( -/obj/effect/floor_decal/industrial/warning/dust, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/exoplanet/concrete, -/area/map_template/colony/mineralprocessing) -"oi" = ( -/obj/structure/railing/mapped, -/obj/effect/floor_decal/industrial/warning/dust, -/obj/structure/table/rack, -/obj/item/stack/material/rods/fifty, -/obj/item/stack/material/rods/fifty, -/obj/item/stack/material/rods/fifty, -/obj/item/stack/material/rods/fifty, -/obj/item/pickaxe, -/obj/item/pickaxe, -/obj/item/shovel, -/obj/item/shovel, -/obj/item/storage/ore, -/obj/item/storage/ore, -/obj/item/storage/backpack/dufflebag/eng, -/obj/item/storage/backpack/dufflebag/eng, -/obj/machinery/door/window/northright, -/obj/structure/window/reinforced{ - dir = 8 - }, -/obj/structure/window/reinforced{ - dir = 4 - }, -/obj/item/cell/super, -/obj/item/cell/super, -/obj/item/cell/super, -/obj/item/device/scanner/mining, -/obj/item/storage/box/greenglowsticks, -/obj/item/storage/box/greenglowsticks, -/obj/item/storage/box/greenglowsticks, -/obj/item/stack/flag/yellow, -/obj/item/stack/flag/yellow, -/obj/item/stack/flag/yellow, -/turf/simulated/floor/exoplanet/concrete, -/area/map_template/colony/mineralprocessing) -"oj" = ( -/obj/structure/railing/mapped, -/obj/effect/floor_decal/industrial/warning/dust, -/obj/structure/table/rack, -/obj/item/gun/projectile/heavysniper/ant{ - desc = "A large, unwieldy bolt-action rifle in shoddy condition. Chambered in small caliber, looks far scarier than it is. Vamoos ya varmint!"; - name = "anti-varmint rifle" - }, -/obj/item/ammo_magazine/pistol/small, -/obj/item/ammo_magazine/pistol/small, -/obj/item/ammo_magazine/pistol/small, -/obj/item/ammo_magazine/pistol/small, -/obj/item/ammo_magazine/pistol/small, -/obj/item/ammo_magazine/pistol/small, -/obj/item/ammo_magazine/pistol/small, -/obj/item/ammo_magazine/pistol/small, -/obj/item/ammo_magazine/pistol/small, -/obj/item/ammo_magazine/pistol/small, -/obj/machinery/door/window/northright, -/obj/structure/window/reinforced{ - dir = 4 - }, -/obj/structure/window/reinforced{ - dir = 8 - }, -/turf/simulated/floor/exoplanet/concrete, -/area/map_template/colony/mineralprocessing) -"ok" = ( -/obj/structure/railing/mapped, -/obj/effect/floor_decal/industrial/warning/dust, -/obj/structure/ore_box, -/obj/machinery/light{ - dir = 4 - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/exoplanet/concrete, -/area/map_template/colony/mineralprocessing) -"ol" = ( -/obj/structure/railing/mapped{ - dir = 8; - icon_state = "railing0-1" - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/floor_decal/industrial/warning/dust{ - dir = 9 - }, -/obj/effect/floor_decal/industrial/warning/dust{ - dir = 10 - }, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/obj/structure/catwalk, -/turf/simulated/floor/exoplanet/concrete, -/area/map_template/colony/mineralprocessing) -"om" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/floor_decal/industrial/warning/dust{ - dir = 1 - }, -/obj/effect/floor_decal/industrial/warning/dust, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/obj/structure/catwalk, -/turf/simulated/floor/exoplanet/concrete, -/area/map_template/colony/mineralprocessing) -"on" = ( -/obj/structure/railing/mapped{ - dir = 4; - icon_state = "railing0-1" - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/floor_decal/industrial/warning/dust{ - dir = 5 - }, -/obj/effect/floor_decal/industrial/warning/dust{ - dir = 6 - }, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/obj/structure/catwalk, -/turf/simulated/floor/exoplanet/concrete, -/area/map_template/colony/mineralprocessing) -"oo" = ( -/obj/structure/grille, -/obj/structure/cable{ - d2 = 8; - icon_state = "0-8" - }, -/obj/structure/cable{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/turf/simulated/floor/exoplanet/concrete, -/area/map_template/colony/mineralprocessing) -"op" = ( -/obj/structure/catwalk, -/obj/structure/cable{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/exoplanet/concrete, -/area/template_noop) -"oq" = ( -/obj/structure/catwalk, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/exoplanet/concrete, -/area/template_noop) -"or" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/catwalk, -/obj/structure/sign/warning/high_voltage{ - pixel_y = 28 - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/exoplanet/concrete, -/area/template_noop) -"os" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/catwalk, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/exoplanet/concrete, -/area/template_noop) -"ot" = ( -/obj/structure/catwalk, -/obj/machinery/light/spot{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/exoplanet/concrete, -/area/map_template/colony/hydroponics) -"ou" = ( -/obj/effect/floor_decal/industrial/warning/dust{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony/airlock) -"ov" = ( -/obj/structure/catwalk, -/obj/structure/cable{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/structure/cable{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/effect/floor_decal/industrial/warning/dust{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 4 - }, -/turf/simulated/floor/exoplanet/concrete, -/area/map_template/colony/mineralprocessing) -"ow" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/wallframe_spawn/reinforced_phoron, -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony/airlock) -"ox" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/floor_decal/industrial/warning/dust{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{ - dir = 8; - id_tag = "playablecolonymain_pump_out_internal"; - power_rating = 25000 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony/airlock) -"oy" = ( -/obj/structure/catwalk, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/manifold/hidden{ - dir = 1 - }, -/turf/simulated/floor/exoplanet/concrete, -/area/map_template/colony/mineralprocessing) -"oz" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/obj/effect/floor_decal/industrial/warning/dust{ - dir = 5 - }, -/turf/simulated/floor/exoplanet/concrete, -/area/map_template/colony/mineralprocessing) -"oA" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/simple/hidden, -/obj/structure/catwalk, -/turf/simulated/floor/exoplanet/concrete, -/area/map_template/colony/mineralprocessing) -"oB" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/obj/effect/floor_decal/industrial/warning/dust{ - dir = 4 - }, -/turf/simulated/floor/exoplanet/concrete, -/area/map_template/colony/mineralprocessing) -"oC" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 5 - }, -/obj/structure/catwalk, -/turf/simulated/floor/exoplanet/concrete, -/area/map_template/colony/mineralprocessing) -"oD" = ( -/obj/machinery/alarm{ - locked = 0; - pixel_y = 20 - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/floor_decal/techfloor{ - dir = 1 - }, -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony) -"oE" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 1 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony) -"oF" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony) -"oG" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/effect/floor_decal/techfloor{ - dir = 1 - }, -/obj/machinery/light{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 1 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony) -"oH" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/effect/floor_decal/techfloor{ - dir = 1 - }, -/obj/machinery/alarm{ - locked = 0; - pixel_y = 20 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 1 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony) -"oI" = ( -/obj/effect/floor_decal/techfloor, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 1; - level = 2 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony) -"oJ" = ( -/obj/effect/floor_decal/techfloor, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 1 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony) -"pB" = ( -/obj/structure/cable{ - d2 = 4; - icon_state = "0-4" - }, -/obj/structure/grille, -/turf/simulated/floor/exoplanet/concrete, -/area/template_noop) -"tz" = ( -/obj/machinery/portable_atmospherics/hydroponics, -/obj/effect/floor_decal/techfloor{ - dir = 4 - }, -/obj/effect/floor_decal/techfloor{ - dir = 8 - }, -/obj/item/device/radio/intercom/map_preset/playablecolony{ - dir = 8; - pixel_x = 22 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/colony/hydroponics) -"tG" = ( -/obj/machinery/telecomms/server/map_preset/playablecolony, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony/tcomms) -"tI" = ( -/obj/effect/floor_decal/techfloor{ - dir = 6 - }, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 8 - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony/hydroponics) -"uf" = ( -/obj/effect/floor_decal/techfloor{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/portable_atmospherics/hydroponics, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony/hydroponics) -"uK" = ( -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony/tcomms) -"vk" = ( -/obj/structure/railing/mapped{ - dir = 8; - icon_state = "railing0-1" - }, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/exoplanet/concrete, -/area/template_noop) -"vt" = ( -/mob/living/simple_animal/passive/chicken, -/turf/simulated/floor/grass, -/area/map_template/colony/hydroponics) -"vJ" = ( -/obj/effect/floor_decal/techfloor{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony/hydroponics) -"yE" = ( -/obj/effect/floor_decal/techfloor{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/portable_atmospherics/hydroponics, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony/hydroponics) -"yN" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/effect/floor_decal/techfloor{ - dir = 4 - }, -/obj/effect/floor_decal/corner/green{ - dir = 9 - }, -/obj/item/device/radio/intercom/map_preset/playablecolony{ - dir = 8; - pixel_x = 22 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony) -"Bc" = ( -/obj/machinery/light{ - dir = 4 - }, -/obj/structure/reagent_dispensers/watertank, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/colony/hydroponics) -"Dj" = ( -/obj/machinery/portable_atmospherics/hydroponics, -/obj/machinery/light{ - dir = 4 - }, -/obj/effect/floor_decal/techfloor{ - dir = 4 - }, -/obj/effect/floor_decal/techfloor{ - dir = 8 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/colony/hydroponics) -"Ek" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/item/device/radio/intercom/map_preset/playablecolony{ - dir = 4; - pixel_x = -21 - }, -/turf/simulated/floor/wood, -/area/map_template/colony/dorms) -"Fz" = ( -/obj/machinery/telecomms/processor/map_preset/playablecolony, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony/tcomms) -"GU" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/grass, -/area/map_template/colony/hydroponics) -"Hy" = ( -/obj/machinery/portable_atmospherics/hydroponics, -/obj/machinery/power/apc{ - locked = 0; - name = "south bump"; - pixel_y = -28 - }, -/obj/structure/cable{ - d2 = 8; - icon_state = "0-8" - }, -/obj/machinery/light{ - dir = 4 - }, -/obj/effect/floor_decal/techfloor{ - dir = 4 - }, -/obj/effect/floor_decal/techfloor{ - dir = 8 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/colony/hydroponics) -"IA" = ( -/obj/structure/cable{ - d2 = 4; - icon_state = "0-4" - }, -/obj/machinery/power/solar, -/turf/simulated/floor/tiled/techfloor/grid, -/area/template_noop) -"JN" = ( -/obj/structure/railing/mapped{ - dir = 8; - icon_state = "railing0-1" - }, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/exoplanet/concrete, -/area/template_noop) -"JY" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 8 - }, -/obj/effect/floor_decal/techfloor{ - dir = 8 - }, -/obj/machinery/alarm{ - dir = 4; - pixel_x = -24 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony) -"Kn" = ( -/obj/effect/floor_decal/techfloor{ - dir = 4 - }, -/obj/effect/floor_decal/corner/lime{ - dir = 9 - }, -/obj/structure/window/reinforced, -/obj/machinery/smartfridge/drying_rack, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony/hydroponics) -"Kz" = ( -/obj/structure/catwalk, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/light/spot{ - dir = 1 - }, -/turf/simulated/floor/exoplanet/concrete, -/area/map_template/colony/hydroponics) -"KK" = ( -/obj/machinery/portable_atmospherics/hydroponics, -/obj/effect/floor_decal/techfloor{ - dir = 4 - }, -/obj/effect/floor_decal/techfloor{ - dir = 8 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/colony/hydroponics) -"LQ" = ( -/obj/effect/floor_decal/techfloor{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/obj/machinery/portable_atmospherics/hydroponics, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony/hydroponics) -"LT" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/turf/simulated/floor/grass, -/area/map_template/colony/hydroponics) -"Md" = ( -/obj/effect/floor_decal/techfloor{ - dir = 4 - }, -/obj/effect/floor_decal/techfloor{ - dir = 8 - }, -/obj/machinery/portable_atmospherics/hydroponics, -/turf/simulated/floor/tiled/techfloor/grid, -/area/map_template/colony/hydroponics) -"NN" = ( -/obj/machinery/telecomms/receiver/map_preset/playablecolony, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony/tcomms) -"Og" = ( -/obj/machinery/portable_atmospherics/canister/oxygen, -/obj/structure/railing/mapped{ - dir = 8; - icon_state = "railing0-1" - }, -/obj/structure/railing/mapped, -/turf/simulated/floor/exoplanet/concrete, -/area/map_template/colony/mineralprocessing) -"Ot" = ( -/turf/simulated/floor/tiled/white, -/area/map_template/colony/bathroom) -"RR" = ( -/obj/effect/floor_decal/techfloor{ - dir = 5 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony/hydroponics) -"Vk" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/window/reinforced, -/obj/machinery/constructable_frame/machine_frame, -/obj/item/stack/cable_coil, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony/hydroponics) -"Xh" = ( -/obj/effect/floor_decal/techfloor{ - dir = 4 - }, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 8 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony/hydroponics) -"YD" = ( -/obj/machinery/telecomms/hub/map_preset/playablecolony, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony/tcomms) -"YV" = ( -/obj/effect/floor_decal/techfloor{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor, -/area/map_template/colony/hydroponics) - -(1,1,1) = {" -aq -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aF -dz -dz -dz -dz -aF -hq -aF -aU -aU -aU -aU -aU -aU -aU -aU -aO -mk -vk -vk -JN -vk -aO -aO -aa -"} -(2,1,1) = {" -af -af -af -af -af -af -af -af -af -ab -aF -aF -aF -aF -aF -dJ -iW -gL -gX -aF -kD -aF -hB -iA -ii -kp -kr -aU -mI -lH -aO -ml -mp -mp -mp -mt -aO -aO -aa -"} -(3,1,1) = {" -af -IA -IA -IA -bc -IA -IA -IA -aj -ab -bH -ce -ct -eI -er -ey -eU -gN -fz -iY -gM -aF -hL -is -iS -jx -jW -it -mJ -gl -aO -mf -no -nu -nC -nF -nK -aO -aa -"} -(4,1,1) = {" -af -aM -aZ -aZ -aZ -be -be -be -cK -ab -bS -lc -cu -dT -cl -hm -cE -cL -cE -dd -gk -aF -aU -hV -aU -aU -aU -aU -aU -aU -aO -nc -gt -bF -bF -nG -nL -aO -aa -"} -(5,1,1) = {" -af -al -al -al -al -al -al -al -cP -ab -bH -ch -cv -fD -cm -dP -hi -gT -ik -hP -gO -aF -ie -iG -kX -jO -jX -jX -mK -mY -lG -nd -gu -gv -gv -nH -nM -aO -aa -"} -(6,1,1) = {" -af -aM -aZ -aZ -aZ -aZ -aZ -aZ -dl -ab -bJ -aF -aF -eA -gU -eu -gF -cM -cU -df -kJ -aF -if -iT -jf -jS -jV -jY -mL -kG -lN -nf -np -nv -nD -nI -nN -aO -aa -"} -(7,1,1) = {" -af -al -al -al -al -al -al -al -dm -ab -bW -cA -cv -fE -de -dP -eJ -cN -cV -hX -il -aF -hR -iz -hR -hR -hR -hR -hR -aO -aO -mm -mp -mp -mp -mt -aO -aO -aa -"} -(8,1,1) = {" -af -aM -aZ -aZ -aZ -aZ -aZ -aZ -el -ab -bL -cH -cy -fm -dh -lK -gG -cO -cW -dg -iB -aF -hC -iU -jh -hR -jZ -lW -mM -bd -nx -mn -mn -mn -mn -mn -aO -aO -nZ -"} -(9,1,1) = {" -af -al -al -al -al -al -al -al -bM -ab -bJ -aF -aF -eB -co -dP -fh -hl -cX -iq -gZ -aF -hQ -iH -ji -hR -ku -du -mN -bd -jC -jC -jC -ko -jC -nX -od -ny -fc -"} -(10,1,1) = {" -af -aM -aZ -aZ -aZ -aZ -aZ -aZ -dl -ab -bY -cJ -cy -ft -cl -lL -bq -cQ -cY -di -ha -aF -in -iI -jm -hR -kO -lO -kv -bd -nT -kZ -li -lz -Og -mQ -oe -nz -fc -"} -(11,1,1) = {" -af -al -al -al -al -al -al -al -cP -ep -bN -db -cv -fF -cp -eE -hF -gV -hb -kh -iN -aF -iu -iX -jo -hR -hr -jT -hr -bd -kK -la -la -la -la -kL -oe -nz -fc -"} -(12,1,1) = {" -af -aM -aZ -aZ -aZ -aZ -aZ -aZ -eo -ab -aF -aF -aF -cR -hj -cB -hF -cS -fN -gi -iK -aF -iv -iJ -jr -jA -lf -lP -mA -bd -kL -kL -kL -kL -la -la -of -nz -fc -"} -(13,1,1) = {" -af -al -al -al -al -al -al -bB -ci -ew -eL -fi -cz -dS -es -fl -eV -ff -fO -fQ -hd -aF -ix -kF -jy -hR -lj -oE -oI -bd -kM -lg -ln -lA -lS -la -og -ol -fc -"} -(14,1,1) = {" -af -aM -aZ -aZ -aZ -aZ -aZ -bI -ar -ar -ar -ar -aF -aF -aF -aF -aF -aF -fP -ki -aF -aF -hM -iZ -jz -hR -oD -oF -lr -bd -kN -kL -lt -iV -lT -la -oh -om -fc -"} -(15,1,1) = {" -af -al -al -al -al -al -al -bM -ar -bA -cg -dy -eH -ia -eK -fp -fw -aN -gh -gJ -hE -aO -ls -hR -ls -hR -lj -gD -ho -bd -mP -kL -lu -lC -lU -la -og -on -fc -"} -(16,1,1) = {" -af -aM -aZ -aZ -aZ -aZ -aZ -bI -aL -bt -bO -aT -cw -dX -aT -fr -gf -aN -gq -gB -hG -hw -ic -iL -jg -jB -ll -du -mR -aJ -kR -kL -lv -lD -lV -la -oi -nA -fc -"} -(17,1,1) = {" -af -al -al -al -al -al -al -bR -bm -dG -bP -aT -cD -dY -ei -fs -fy -fL -gw -hZ -hJ -hA -ib -ih -ir -jP -hA -lY -mS -aJ -gQ -gR -lX -na -oz -oB -oj -nP -fc -"} -(18,1,1) = {" -af -aM -aZ -aZ -aZ -aZ -aZ -bT -aL -cb -bQ -aT -cT -dZ -aT -eR -fA -gW -fZ -gj -hk -aP -aP -aP -jF -aP -aP -iC -kb -bd -kY -bh -bh -oy -oA -oC -mv -nR -op -"} -(19,1,1) = {" -af -al -al -al -al -al -al -bM -ar -ca -he -dA -fd -eM -gH -me -fB -gW -fC -gD -hn -aP -jk -by -jH -io -aP -dq -ho -bd -kn -kw -lw -ma -lZ -ov -ok -oo -oq -"} -(20,1,1) = {" -aj -aM -aZ -aZ -aZ -aZ -aZ -ci -at -az -az -az -az -az -az -az -az -az -az -fT -hf -aP -aP -aP -jI -iy -aP -dr -dw -kI -kq -ky -nV -nt -lh -ow -bh -bh -or -"} -(21,1,1) = {" -aa -ad -ad -ac -ac -ac -bd -bd -at -dB -cG -dj -az -eX -az -fM -cG -dB -az -fX -hp -aP -id -Ot -jJ -ip -aP -fX -hu -bd -kt -nr -mw -nO -ou -ox -mw -mZ -os -"} -(22,1,1) = {" -ad -ad -mi -ac -bg -ac -bi -cn -at -az -dM -az -az -dM -az -az -dM -az -az -gm -hh -aP -aP -aP -jw -jD -aP -oG -oI -bd -bd -bd -bd -lJ -mb -nS -bh -nm -os -"} -(23,1,1) = {" -ad -ax -ap -bl -aC -ac -bj -ho -at -dD -ds -Ek -eq -ed -fj -Ek -ds -kH -az -gn -ht -aP -ij -by -jL -lI -aP -oH -oJ -bd -kz -kP -aJ -lM -mg -nU -mw -nq -os -"} -(24,1,1) = {" -ad -av -aR -ac -ac -ac -bs -cx -at -az -dM -az -az -eQ -az -az -dM -az -az -gp -hv -aP -aP -aP -jn -aP -aP -iD -iF -kg -go -nk -bd -bh -mh -mu -bh -bh -os -"} -(25,1,1) = {" -ad -ag -aV -bn -bD -ac -bd -cC -at -dB -cI -dj -az -eT -az -fM -cI -dB -az -gE -hN -jR -ks -jd -jM -jQ -lm -my -mT -bd -kA -kQ -mq -lQ -mr -nW -nY -bh -os -"} -(26,1,1) = {" -ad -ay -aW -mx -bE -ac -bx -cF -at -az -az -az -az -eW -az -az -az -az -az -hc -fa -ao -ao -jp -kT -lk -ao -du -mU -bd -kB -lb -bd -lR -ms -oa -mD -bh -os -"} -(27,1,1) = {" -ad -aA -aX -bf -bU -ck -da -bK -dx -dI -ek -dH -fv -fR -JY -fW -dI -dI -gx -hg -fb -hW -dt -dp -jq -ao -lp -ga -mV -mB -iM -iQ -nQ -ni -mO -ob -nh -bh -os -"} -(28,1,1) = {" -ad -aD -aV -bk -bC -ac -dc -bV -dE -dO -et -dO -fx -fS -fU -fY -gg -dO -gy -fV -hO -hY -iE -hO -jN -yN -hO -iE -mW -mj -kC -kS -mo -nj -nE -oc -nw -bh -os -"} -(29,1,1) = {" -ac -ac -aY -bo -ac -ac -ac -aJ -au -cc -ec -cc -aB -cZ -do -cZ -fG -aI -aI -aI -aI -lq -ig -lq -lq -aQ -ng -jU -ng -ba -ba -ba -ba -ba -ba -ba -ba -ab -os -"} -(30,1,1) = {" -aa -ac -bb -bp -ac -aH -eG -eD -au -dR -ee -eS -aB -fk -gb -gI -hx -aI -ge -dk -aI -iR -jl -ju -jE -aQ -lx -mE -kc -kj -kj -nl -kj -lo -kj -nl -ba -fc -os -"} -(31,1,1) = {" -ae -ae -ak -mz -ae -ae -ac -mC -bz -dU -ef -eO -aB -fn -em -gP -gY -aI -fJ -gz -aI -ja -js -iO -jG -aQ -kf -mF -kd -kk -kj -kj -kj -vt -kj -kj -ba -Kz -mc -"} -(32,1,1) = {" -ae -ah -am -bu -bX -ae -cf -eZ -bz -dV -eg -eY -aB -fe -em -br -hz -aI -gc -gr -aI -hy -im -iP -hT -aQ -kl -mG -ke -Vk -GU -kV -le -GU -LT -nB -lB -fc -mc -"} -(33,1,1) = {" -ae -ai -as -bv -bG -ae -dn -eZ -au -dW -ez -ea -aB -fu -em -br -hD -aI -gd -aI -aI -je -hS -hI -jc -aQ -km -mH -mX -Kn -kk -nb -ne -kk -ne -ns -lB -fc -mc -"} -(34,1,1) = {" -ae -an -uK -uK -YD -ae -dn -fc -au -aB -ex -aB -aB -fo -en -ev -hK -eC -eP -gC -aI -jj -jt -jv -ka -aQ -kx -kE -kW -vJ -uf -nn -yE -uf -LQ -nJ -ba -fc -mc -"} -(35,1,1) = {" -ae -aE -uK -uK -Fz -ae -dn -fc -aw -eb -eF -ej -aG -fI -gs -br -hs -eN -fg -iw -aK -aS -ly -ly -aS -aS -Bc -RR -YV -YV -YV -YV -YV -YV -Xh -tI -ba -fc -mc -"} -(36,1,1) = {" -ae -bw -cj -tG -NN -ae -dn -eZ -bZ -dK -dC -dQ -aG -fK -gA -fH -hU -hH -fq -gK -aK -fc -fc -fc -fc -ba -ba -Md -KK -KK -tz -Dj -KK -KK -KK -Hy -ba -fc -mc -"} -(37,1,1) = {" -ae -ae -ae -ae -ae -ae -eh -eZ -aw -dL -dN -aw -aw -aK -dv -dv -dv -aK -dv -aK -aK -fc -aa -aa -aj -aj -ba -lB -lB -lB -ba -ba -lB -lB -lB -ba -ba -aj -mc -"} -(38,1,1) = {" -aa -aa -aa -aa -aa -pB -eh -fc -aw -aw -aw -aw -fc -eZ -eZ -fc -fc -fc -fc -fc -jK -fc -aa -aa -aa -aj -aj -fc -fc -fc -eZ -eZ -eZ -fc -eZ -eZ -ot -aj -mc -"} -(39,1,1) = {" -aa -aa -aa -aa -aa -cq -eh -fc -fc -dF -fc -fc -fc -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -mc -"} -(40,1,1) = {" -aa -aa -aa -aa -aa -cr -cs -cs -cs -cs -cs -cs -cs -cs -cs -cs -cs -cs -cs -cs -cs -cs -cs -cs -cs -cs -cs -cs -cs -cs -cs -cs -cs -cs -cs -cs -cs -cs -md -"} diff --git a/maps/random_ruins/exoplanet_ruins/playablecolony/playablecolony.dm b/maps/random_ruins/exoplanet_ruins/playablecolony/playablecolony.dm deleted file mode 100644 index 40bc1a83e77af..0000000000000 --- a/maps/random_ruins/exoplanet_ruins/playablecolony/playablecolony.dm +++ /dev/null @@ -1,105 +0,0 @@ -#include "playablecolony_radio.dm" - -/datum/map_template/ruin/exoplanet/playablecolony - name = "established colony" - id = "playablecolony" - description = "a fully functional colony on the frontier of settled space" - suffixes = list("playablecolony/colony.dmm") - spawn_cost = 3 - player_cost = 4 - template_flags = TEMPLATE_FLAG_CLEAR_CONTENTS | TEMPLATE_FLAG_NO_RUINS | TEMPLATE_FLAG_NO_RADS - ruin_tags = RUIN_HUMAN|RUIN_HABITAT - ban_ruins = list(/datum/map_template/ruin/exoplanet/playablecolony2) - apc_test_exempt_areas = list( - /area/map_template/colony/mineralprocessing = NO_SCRUBBER|NO_VENT - ) - spawn_weight = 0.2 - -/decl/submap_archetype/playablecolony - descriptor = "established colony" - crew_jobs = list(/datum/job/submap/colonist) - -/datum/job/submap/colonist - title = "Colonist" - info = "You are a Colonist, living on the rim of explored, let alone inhabited, space in a reconstructed shelter made from the very ship that took you here." - total_positions = 4 - outfit_type = /decl/hierarchy/outfit/job/colonist - -/decl/hierarchy/outfit/job/colonist - name = OUTFIT_JOB_NAME("Colonist") - id_types = null - pda_type = null - l_ear = /obj/item/device/radio/headset/map_preset/playablecolony - -/obj/effect/submap_landmark/spawnpoint/colonist_spawn - name = "Colonist" - -/obj/effect/submap_landmark/joinable_submap/colony - name = "Established Colony" - archetype = /decl/submap_archetype/playablecolony - -// Areas // -/area/map_template/colony - name = "\improper Colony Hallways" - icon_state = "halls" - icon = 'maps/random_ruins/exoplanet_ruins/playablecolony/colony.dmi' - -/area/map_template/colony/engineering - name = "\improper Colony Engineering" - icon_state = "processing" - -/area/map_template/colony/atmospherics - name = "\improper Colony Atmospherics" - icon_state = "shipping" - -/area/map_template/colony/bathroom - name = "\improper Colony Lavatory" - icon_state = "shower" - -/area/map_template/colony/commons - name = "\improper Colony Common Area" - icon_state = "A" - -/area/map_template/colony/messhall - name = "\improper Colony Mess Hall" - icon_state = "B" - -/area/map_template/colony/tcomms - name = "\improper Colony Secure Storage" - icon_state = "C" - -/area/map_template/colony/jail - name = "\improper Colony Jail" - icon_state = "D" - -/area/map_template/colony/armory - name = "\improper Colony Armory" - icon_state = "F" - -/area/map_template/colony/hydroponics - name = "\improper Colony Hydroponics Bay" - icon_state = "X" - -/area/map_template/colony/airlock - name = "\improper Colony Primary External Airlock" - icon_state = "airlock" - -/area/map_template/colony/medbay - name = "\improper Colony Hospital" - icon_state = "D" - -/area/map_template/colony/surgery - name = "\improper Colony Operating Theatre" - icon_state = "F" - -/area/map_template/colony/mineralprocessing - name = "\improper Colony Mining Bay" - icon_state = "A" - -/area/map_template/colony/command - name = "\improper Colony Operations Center" - icon_state = "B" - -/area/map_template/colony/dorms - name = "\improper Colony Dormitories" - icon_state = "C" diff --git a/maps/random_ruins/exoplanet_ruins/playablecolony/playablecolony_radio.dm b/maps/random_ruins/exoplanet_ruins/playablecolony/playablecolony_radio.dm deleted file mode 100644 index 5ef2f30640c76..0000000000000 --- a/maps/random_ruins/exoplanet_ruins/playablecolony/playablecolony_radio.dm +++ /dev/null @@ -1,31 +0,0 @@ -/obj/machinery/telecomms/hub/map_preset/playablecolony - preset_name = "Colony" - -/obj/machinery/telecomms/receiver/map_preset/playablecolony - preset_name = "Colony" - -/obj/machinery/telecomms/bus/map_preset/playablecolony - preset_name = "Colony" - -/obj/machinery/telecomms/processor/map_preset/playablecolony - preset_name = "Colony" - -/obj/machinery/telecomms/server/map_preset/playablecolony - preset_name = "Colony" - preset_color = COMMS_COLOR_COLONY - -/obj/machinery/telecomms/broadcaster/map_preset/playablecolony - preset_name = "Colony" - -/obj/item/device/radio/map_preset/playablecolony - preset_name = "Colony" - -/obj/item/device/radio/intercom/map_preset/playablecolony - preset_name = "Colony" - -/obj/item/device/encryptionkey/map_preset/playablecolony - preset_name = "Colony" - -/obj/item/device/radio/headset/map_preset/playablecolony - preset_name = "Colony" - encryption_key = /obj/item/device/encryptionkey/map_preset/playablecolony diff --git a/maps/random_ruins/exoplanet_ruins/playablecolony2/colony2.dmi b/maps/random_ruins/exoplanet_ruins/playablecolony2/colony2.dmi deleted file mode 100644 index e4a7e62a148f9..0000000000000 Binary files a/maps/random_ruins/exoplanet_ruins/playablecolony2/colony2.dmi and /dev/null differ diff --git a/maps/random_ruins/exoplanet_ruins/playablecolony2/colony2.dmm b/maps/random_ruins/exoplanet_ruins/playablecolony2/colony2.dmm deleted file mode 100644 index 1594811db4bf1..0000000000000 --- a/maps/random_ruins/exoplanet_ruins/playablecolony2/colony2.dmm +++ /dev/null @@ -1,3572 +0,0 @@ -//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE -"aa" = ( -/obj/effect/landmark/clear, -/obj/effect/submap_landmark/joinable_submap/colony2, -/turf/template_noop, -/area/template_noop) -"ab" = ( -/obj/machinery/atmospherics/pipe/simple/visible/red{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/obj/effect/catwalk_plated/dark, -/turf/simulated/floor/plating, -/area/map_template/colony2/engineering) -"an" = ( -/obj/machinery/light/spot{ - dir = 1 - }, -/turf/simulated/floor/reinforced/airless, -/area/map_template/colony2/external) -"aB" = ( -/turf/simulated/floor/reinforced/airless, -/area/map_template/colony2/external) -"aK" = ( -/obj/machinery/atmospherics/unary/vent_pump/on, -/obj/structure/cable{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/effect/floor_decal/corner_steel_grid/diagonal, -/turf/simulated/floor/tiled/techmaint, -/area/map_template/colony2/ship) -"aL" = ( -/obj/effect/paint/ocean, -/obj/effect/wallframe_spawn/reinforced, -/obj/machinery/door/blast/regular{ - id_tag = "colony2"; - name = "Window Blast Shutter" - }, -/turf/simulated/floor/plating, -/area/map_template/colony2/ship) -"aN" = ( -/obj/effect/floor_decal/corner/paleblue{ - dir = 6 - }, -/obj/item/device/radio/intercom/map_preset/playablecolony2{ - dir = 8; - pixel_x = 21 - }, -/turf/simulated/floor/tiled/dark, -/area/map_template/colony2/Hallway) -"aZ" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/civilian, -/turf/simulated/floor/tiled/freezer, -/area/map_template/colony2/ship) -"bh" = ( -/obj/effect/paint/ocean, -/obj/effect/wallframe_spawn/reinforced, -/obj/machinery/door/blast/regular{ - dir = 4; - id_tag = "colony2"; - name = "Window Blast Shutter" - }, -/turf/simulated/floor/plating, -/area/map_template/colony2/ship) -"bt" = ( -/obj/machinery/atmospherics/pipe/manifold4w/visible/red, -/obj/effect/catwalk_plated/dark, -/turf/simulated/floor/airless, -/area/map_template/colony2/external) -"bE" = ( -/obj/effect/paint/ocean, -/obj/effect/wallframe_spawn/reinforced, -/obj/machinery/door/blast/regular{ - dir = 4; - id_tag = "colony2"; - name = "Window Blast Shutter" - }, -/turf/simulated/floor/plating, -/area/map_template/colony2/storage) -"bV" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/manifold/visible/scrubbers{ - dir = 8 - }, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/effect/catwalk_plated/dark, -/turf/simulated/floor/plating, -/area/map_template/colony2/Hallway) -"ci" = ( -/obj/effect/floor_decal/corner_steel_grid/diagonal{ - dir = 4 - }, -/obj/machinery/firealarm{ - dir = 4; - pixel_x = 25 - }, -/obj/machinery/recharge_station, -/turf/simulated/floor/tiled/techmaint, -/area/map_template/colony2/ship) -"cq" = ( -/obj/structure/closet/secure_closet/freezer/fridge, -/obj/item/storage/box/snack/tastybread, -/obj/item/storage/box/glasses, -/obj/effect/floor_decal/corner/paleblue/mono, -/turf/simulated/floor/tiled/dark/monotile, -/area/map_template/colony2/commons) -"cr" = ( -/obj/effect/paint/ocean, -/turf/simulated/wall/r_wall, -/area/map_template/colony2/commons) -"cw" = ( -/obj/machinery/atmospherics/unary/tank/carbon_dioxide{ - dir = 4; - start_pressure = 120 - }, -/obj/machinery/light/spot{ - dir = 8 - }, -/turf/simulated/floor/reinforced/airless, -/area/map_template/colony2/external) -"cz" = ( -/obj/machinery/portable_atmospherics/hydroponics, -/obj/effect/floor_decal/corner/paleblue/mono, -/obj/item/device/radio/intercom/map_preset/playablecolony2{ - pixel_y = 21 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/map_template/colony2/commons) -"cD" = ( -/obj/effect/wallframe_spawn/reinforced, -/obj/effect/paint/ocean, -/obj/machinery/door/blast/regular{ - id_tag = "colony2"; - name = "Window Blast Shutter" - }, -/turf/simulated/floor/plating, -/area/map_template/colony2/atmospherics) -"cQ" = ( -/obj/effect/catwalk_plated/dark, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/plating, -/area/map_template/colony2/storage) -"cX" = ( -/obj/effect/floor_decal/corner/paleblue/mono, -/obj/structure/table/steel_reinforced, -/obj/random/donkpocket_box, -/turf/simulated/floor/tiled/dark/monotile, -/area/map_template/colony2/commons) -"de" = ( -/obj/machinery/computer/ship/helm{ - dir = 4 - }, -/obj/effect/floor_decal/corner_steel_grid/diagonal, -/obj/machinery/button/blast_door{ - id_tag = "colony2"; - name = "Window Lockdown Blast Door Control"; - pixel_y = 31 - }, -/obj/machinery/button/blast_door{ - id_tag = "colony2atmos"; - name = "Exterior Lockdown Blast Door Control"; - pixel_y = 22 - }, -/turf/simulated/floor/tiled/techmaint, -/area/map_template/colony2/ship) -"dh" = ( -/obj/structure/bed/chair/shuttle/white{ - dir = 4 - }, -/obj/effect/floor_decal/corner_steel_grid/diagonal{ - dir = 4 - }, -/turf/simulated/floor/tiled/techmaint, -/area/map_template/colony2/ship) -"dj" = ( -/obj/effect/floor_decal/corner_steel_grid/diagonal{ - dir = 4 - }, -/obj/machinery/computer/ship/engines{ - dir = 8 - }, -/obj/item/device/radio/intercom/map_preset/playablecolony2{ - pixel_y = 21 - }, -/turf/simulated/floor/tiled/techmaint, -/area/map_template/colony2/ship) -"dn" = ( -/obj/machinery/atmospherics/portables_connector, -/obj/machinery/portable_atmospherics/canister/air, -/obj/effect/floor_decal/corner/paleblue/mono, -/turf/simulated/floor/tiled/dark/monotile, -/area/map_template/colony2/atmospherics) -"dD" = ( -/obj/effect/floor_decal/corner/paleblue/mono, -/obj/machinery/portable_atmospherics/canister/air/airlock, -/obj/machinery/atmospherics/portables_connector{ - dir = 1 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/map_template/colony2/atmospherics) -"dM" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/colony2/ship) -"dY" = ( -/obj/machinery/atmospherics/pipe/simple/visible/red{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply, -/obj/effect/catwalk_plated/dark, -/turf/simulated/floor/plating, -/area/map_template/colony2/atmospherics) -"eg" = ( -/obj/structure/bed/padded, -/obj/item/bedsheet/green, -/obj/structure/curtain/open/bed, -/obj/effect/submap_landmark/spawnpoint/colonist_spawn2, -/turf/simulated/floor/tiled/techmaint, -/area/map_template/colony2/ship) -"er" = ( -/obj/machinery/atmospherics/pipe/simple/visible/red{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/cable{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/effect/catwalk_plated/dark, -/obj/effect/floor_decal/industrial/warning, -/turf/simulated/floor/plating, -/area/map_template/colony2/Hallway) -"eA" = ( -/obj/structure/cable{ - d2 = 2; - icon_state = "0-2" - }, -/obj/effect/floor_decal/corner/paleblue/mono, -/obj/machinery/power/apc{ - dir = 1; - locked = 0; - name = "north bump"; - pixel_y = 24; - req_access = newlist() - }, -/obj/structure/closet/crate/med_crate/oxyloss, -/turf/simulated/floor/tiled/dark/monotile, -/area/map_template/colony2/storage) -"eJ" = ( -/obj/machinery/light{ - dir = 1 - }, -/obj/structure/hygiene/sink{ - dir = 1; - pixel_y = 16 - }, -/obj/effect/floor_decal/corner/paleblue{ - dir = 5 - }, -/turf/simulated/floor/tiled/dark, -/area/map_template/colony2/commons) -"eR" = ( -/obj/effect/floor_decal/corner_steel_grid/diagonal{ - dir = 4 - }, -/obj/structure/closet/cabinet, -/obj/machinery/recharger/wallcharger{ - pixel_y = 28 - }, -/obj/random/clothing, -/obj/random/clothing, -/obj/random/clothing, -/obj/random/clothing, -/obj/random/glasses, -/obj/random/glasses, -/obj/random/hat, -/obj/random/hat, -/obj/random/masks, -/obj/random/masks, -/obj/random/gloves, -/obj/random/gloves, -/obj/random/shoes, -/obj/random/shoes, -/obj/random/accessory, -/obj/random/accessory, -/obj/item/crowbar/prybar, -/obj/item/crowbar/prybar, -/obj/item/device/radio/map_preset/playablecolony2, -/obj/item/device/radio/map_preset/playablecolony2, -/obj/machinery/atmospherics/unary/vent_pump/on, -/obj/item/device/radio/headset/map_preset/playablecolony2, -/obj/item/device/radio/headset/map_preset/playablecolony2, -/turf/simulated/floor/tiled/techmaint, -/area/map_template/colony2/ship) -"eY" = ( -/obj/effect/floor_decal/corner/paleblue{ - dir = 9 - }, -/obj/machinery/alarm/server{ - dir = 4; - locked = 0; - pixel_x = -21; - req_access = newlist() - }, -/obj/item/device/encryptionkey/map_preset/playablecolony2, -/obj/item/device/encryptionkey/map_preset/playablecolony2, -/obj/item/device/encryptionkey/map_preset/playablecolony2, -/obj/item/device/encryptionkey/map_preset/playablecolony2, -/obj/structure/table/rack, -/turf/simulated/floor/tiled/dark, -/area/map_template/colony2/tcomms) -"fp" = ( -/obj/effect/paint/ocean, -/obj/effect/wallframe_spawn/reinforced, -/obj/machinery/door/blast/regular{ - dir = 4; - id_tag = "colony2"; - name = "Window Blast Shutter" - }, -/turf/simulated/floor/plating, -/area/map_template/colony2/engineering) -"fs" = ( -/obj/machinery/atmospherics/pipe/simple/visible/red{ - dir = 4 - }, -/obj/effect/wallframe_spawn/reinforced, -/obj/effect/paint/ocean, -/turf/simulated/floor/plating, -/area/map_template/colony2/atmospherics) -"fu" = ( -/obj/structure/closet/crate, -/obj/item/stock_parts/capacitor, -/obj/item/stock_parts/capacitor, -/obj/item/stock_parts/capacitor/adv, -/obj/item/stock_parts/console_screen, -/obj/item/stock_parts/console_screen, -/obj/item/stock_parts/matter_bin/super, -/obj/item/stock_parts/matter_bin, -/obj/item/stock_parts/micro_laser, -/obj/item/stock_parts/micro_laser/high, -/obj/item/stock_parts/scanning_module, -/obj/item/stock_parts/scanning_module, -/obj/item/stock_parts/scanning_module/adv, -/obj/item/stock_parts/smes_coil/weak, -/obj/item/stock_parts/smes_coil/super_capacity, -/obj/item/stock_parts/smes_coil/super_capacity, -/obj/item/stock_parts/smes_coil/super_io, -/obj/item/stock_parts/smes_coil/super_io, -/obj/item/stock_parts/smes_coil/weak, -/obj/item/stock_parts/smes_coil/weak, -/obj/item/stack/material/tritium/fifty, -/obj/item/stack/material/tritium/fifty, -/obj/machinery/light{ - dir = 1 - }, -/obj/item/stock_parts/circuitboard/pacman/super, -/obj/item/stock_parts/circuitboard/pacman/mrs, -/obj/effect/floor_decal/corner/paleblue/mono, -/obj/item/stock_parts/circuitboard/unary_atmos/cooler, -/obj/item/stock_parts/circuitboard/unary_atmos/heater, -/obj/item/stock_parts/circuitboard/oxyregenerator, -/obj/item/stock_parts/circuitboard/biogenerator, -/obj/machinery/atmospherics/pipe/simple/hidden/red{ - dir = 6 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/map_template/colony2/atmospherics) -"fF" = ( -/obj/structure/bed/padded, -/obj/item/bedsheet/green, -/obj/structure/curtain/open/bed, -/obj/effect/submap_landmark/spawnpoint/colonist_spawn2, -/obj/item/device/radio/intercom/map_preset/playablecolony2{ - pixel_y = 21 - }, -/turf/simulated/floor/tiled/techmaint, -/area/map_template/colony2/ship) -"fQ" = ( -/obj/machinery/sleeper, -/turf/simulated/floor/tiled/white, -/area/map_template/colony2/ship) -"fT" = ( -/obj/effect/floor_decal/corner/paleblue/mono, -/obj/structure/closet/secure_closet/freezer/meat, -/turf/simulated/floor/tiled/dark/monotile, -/area/map_template/colony2/commons) -"fU" = ( -/obj/structure/closet/crate/freezer, -/obj/item/storage/firstaid/regular, -/obj/item/storage/firstaid/stab, -/obj/item/storage/firstaid/stab, -/obj/item/storage/firstaid/adv, -/obj/item/storage/firstaid/adv, -/obj/item/reagent_containers/ivbag/nanoblood, -/obj/item/reagent_containers/ivbag/nanoblood, -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/turf/simulated/floor/tiled/white, -/area/map_template/colony2/ship) -"gb" = ( -/obj/item/reagent_containers/glass/bucket, -/obj/effect/floor_decal/corner/paleblue/mono, -/obj/structure/closet/crate/hydroponics/prespawned, -/turf/simulated/floor/tiled/dark/monotile, -/area/map_template/colony2/commons) -"ge" = ( -/obj/structure/hygiene/sink{ - dir = 1; - pixel_y = 16 - }, -/obj/structure/iv_drip, -/turf/simulated/floor/tiled/white, -/area/map_template/colony2/ship) -"gi" = ( -/obj/effect/catwalk_plated/dark, -/obj/structure/largecrate/animal/chick, -/turf/simulated/floor/plating, -/area/map_template/colony2/storage) -"gj" = ( -/obj/effect/floor_decal/corner/paleblue/mono, -/obj/machinery/seed_extractor, -/turf/simulated/floor/tiled/dark/monotile, -/area/map_template/colony2/commons) -"gm" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/colony2/ship) -"gr" = ( -/obj/structure/table/steel_reinforced, -/obj/item/storage/firstaid/surgery, -/obj/item/clothing/accessory/stethoscope, -/obj/item/device/radio/intercom/map_preset/playablecolony2{ - pixel_y = 21 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/colony2/ship) -"gw" = ( -/obj/structure/table/steel_reinforced, -/obj/item/storage/firstaid/adv, -/obj/item/storage/box/gloves, -/turf/simulated/floor/tiled/white, -/area/map_template/colony2/ship) -"gD" = ( -/obj/machinery/atmospherics/pipe/simple/visible/red{ - dir = 9 - }, -/obj/effect/catwalk_plated/dark, -/turf/simulated/floor/plating, -/area/map_template/colony2/atmospherics) -"gV" = ( -/obj/effect/floor_decal/industrial/loading{ - dir = 8 - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/computer/mining{ - pixel_y = 32 - }, -/turf/simulated/floor/reinforced, -/area/map_template/colony2/external) -"hj" = ( -/obj/machinery/atmospherics/pipe/simple/visible/red{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/manifold/visible/scrubbers, -/obj/effect/catwalk_plated/dark, -/turf/simulated/floor/plating, -/area/map_template/colony2/engineering) -"hN" = ( -/obj/structure/ore_box, -/obj/item/device/radio/intercom/map_preset/playablecolony2{ - pixel_y = 21 - }, -/turf/simulated/floor/reinforced/airless, -/area/map_template/colony2/external) -"hT" = ( -/obj/effect/catwalk_plated/dark, -/obj/structure/cable{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/turf/simulated/floor/plating, -/area/map_template/colony2/storage) -"ib" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/effect/floor_decal/corner_steel_grid/diagonal, -/obj/item/device/radio/intercom/map_preset/playablecolony2{ - default_hailing = 1; - dir = 1; - pixel_y = -32 - }, -/turf/simulated/floor/tiled/techmaint, -/area/map_template/colony2/ship) -"io" = ( -/obj/effect/wallframe_spawn/reinforced, -/obj/effect/paint/ocean, -/turf/simulated/floor/plating, -/area/map_template/colony2/commons) -"iq" = ( -/obj/effect/wallframe_spawn/reinforced, -/obj/effect/paint/ocean, -/turf/simulated/floor/plating, -/area/map_template/colony2/ship) -"is" = ( -/obj/effect/floor_decal/corner/paleblue{ - dir = 9 - }, -/turf/simulated/floor/tiled/dark, -/area/map_template/colony2/commons) -"iv" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/visible{ - dir = 6 - }, -/obj/effect/catwalk_plated/dark, -/turf/simulated/floor/plating, -/area/map_template/colony2/atmospherics) -"iT" = ( -/obj/machinery/light, -/obj/effect/floor_decal/corner_steel_grid/diagonal{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/tiled/techmaint, -/area/map_template/colony2/ship) -"jo" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 1 - }, -/obj/structure/hygiene/sink{ - dir = 8; - pixel_x = -12 - }, -/obj/item/storage/mirror{ - pixel_x = -24 - }, -/turf/simulated/floor/tiled/freezer, -/area/map_template/colony2/ship) -"jq" = ( -/obj/effect/paint/ocean, -/obj/effect/wallframe_spawn/reinforced, -/obj/machinery/door/blast/regular{ - dir = 4; - id_tag = "colony2"; - name = "Window Blast Shutter" - }, -/turf/simulated/floor/plating, -/area/map_template/colony2/atmospherics) -"jy" = ( -/obj/machinery/atmospherics/pipe/simple/visible/fuel, -/obj/item/device/radio/intercom/map_preset/playablecolony2{ - dir = 8; - pixel_x = 21 - }, -/turf/simulated/floor/reinforced/airless, -/area/map_template/colony2/external) -"kb" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/effect/floor_decal/corner_steel_grid/diagonal{ - dir = 4 - }, -/turf/simulated/floor/tiled/techmaint, -/area/map_template/colony2/ship) -"ke" = ( -/obj/machinery/door/airlock/external{ - frequency = 1380; - id_tag = "playablecolonymain2_interior_door" - }, -/obj/machinery/atmospherics/pipe/manifold/visible{ - dir = 8 - }, -/obj/machinery/meter, -/turf/simulated/floor/tiled/techmaint, -/area/map_template/colony2/external) -"kf" = ( -/obj/machinery/light/spot{ - dir = 4 - }, -/turf/simulated/floor/reinforced, -/area/map_template/colony2/external) -"kn" = ( -/obj/machinery/atmospherics/unary/tank/nitrogen{ - dir = 4 - }, -/turf/simulated/floor/reinforced/airless, -/area/map_template/colony2/external) -"lj" = ( -/obj/machinery/fabricator/hacked, -/obj/machinery/firealarm{ - pixel_y = 24 - }, -/obj/effect/floor_decal/corner/paleblue/mono, -/turf/simulated/floor/tiled/dark/monotile, -/area/map_template/colony2/engineering) -"lm" = ( -/obj/machinery/atmospherics/pipe/simple/visible/fuel{ - dir = 6 - }, -/obj/effect/paint/ocean, -/turf/simulated/wall/r_wall, -/area/map_template/colony2/external) -"lU" = ( -/obj/effect/paint/ocean, -/turf/simulated/wall, -/area/map_template/colony2/atmospherics) -"lW" = ( -/obj/machinery/light{ - dir = 4 - }, -/obj/effect/floor_decal/corner_steel_grid/diagonal{ - dir = 4 - }, -/obj/structure/bed/chair/shuttle/white{ - dir = 8 - }, -/turf/simulated/floor/tiled/techmaint, -/area/map_template/colony2/ship) -"lZ" = ( -/obj/machinery/atmospherics/omni/mixer{ - tag_east = 1; - tag_east_con = 0.79; - tag_north = 2; - tag_south = 1; - tag_south_con = 0.21 - }, -/obj/effect/floor_decal/corner/paleblue/mono, -/turf/simulated/floor/tiled/dark/monotile, -/area/map_template/colony2/atmospherics) -"ni" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 1; - icon_state = "warning" - }, -/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{ - dir = 1; - id_tag = "playablecolonymain2_pump_out_external" - }, -/turf/simulated/floor/reinforced/airless, -/area/map_template/colony2/external) -"nE" = ( -/obj/machinery/atmospherics/pipe/simple/visible/fuel, -/obj/machinery/atmospherics/pipe/simple/visible/scrubbers{ - dir = 6 - }, -/turf/simulated/floor/reinforced/airless, -/area/map_template/colony2/external) -"nU" = ( -/obj/machinery/atmospherics/pipe/manifold/visible/scrubbers, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/access_button/airlock_interior{ - frequency = 1380; - master_tag = "playablecolonymain2"; - pixel_x = -22; - pixel_y = -20 - }, -/obj/structure/cable{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply, -/obj/effect/catwalk_plated/dark, -/obj/effect/floor_decal/industrial/warning, -/obj/machinery/atmospherics/pipe/simple/visible{ - dir = 10 - }, -/turf/simulated/floor/plating, -/area/map_template/colony2/Hallway) -"ob" = ( -/obj/effect/paint/ocean, -/turf/simulated/wall, -/area/map_template/colony2/engineering) -"or" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 1 - }, -/obj/effect/floor_decal/corner/paleblue/mono, -/obj/machinery/telecomms/broadcaster/map_preset/playablecolony2, -/turf/simulated/floor/tiled/dark/monotile, -/area/map_template/colony2/tcomms) -"oC" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 1 - }, -/obj/effect/floor_decal/corner/paleblue/mono, -/obj/machinery/telecomms/receiver/map_preset/playablecolony2, -/obj/item/device/radio/intercom/map_preset/playablecolony2{ - dir = 8; - pixel_x = 21 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/map_template/colony2/tcomms) -"oK" = ( -/obj/machinery/light{ - dir = 1 - }, -/obj/machinery/vending/engineering{ - req_access = list() - }, -/obj/effect/floor_decal/corner/paleblue/mono, -/turf/simulated/floor/tiled/dark/monotile, -/area/map_template/colony2/engineering) -"oQ" = ( -/obj/machinery/seed_storage/garden, -/obj/machinery/firealarm{ - pixel_y = 24 - }, -/obj/effect/floor_decal/corner/paleblue/mono, -/turf/simulated/floor/tiled/dark/monotile, -/area/map_template/colony2/commons) -"oU" = ( -/obj/effect/floor_decal/corner/paleblue, -/obj/machinery/atmospherics/pipe/simple/visible{ - dir = 6 - }, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 1 - }, -/turf/simulated/floor/tiled/dark, -/area/map_template/colony2/atmospherics) -"pe" = ( -/obj/effect/floor_decal/corner_steel_grid/diagonal{ - dir = 4 - }, -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/turf/simulated/floor/tiled/techmaint, -/area/map_template/colony2/ship) -"qb" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/civilian, -/turf/simulated/floor/tiled/techmaint, -/area/map_template/colony2/ship) -"qf" = ( -/obj/effect/paint/ocean, -/turf/simulated/wall/r_wall, -/area/map_template/colony2/storage) -"qj" = ( -/obj/effect/paint/ocean, -/turf/simulated/wall, -/area/map_template/colony2/tcomms) -"qo" = ( -/obj/structure/closet/crate, -/obj/item/stack/tile/grass{ - amount = 25 - }, -/obj/item/stack/material/steel/fifty, -/obj/item/stack/material/steel/fifty, -/obj/item/stack/material/plasteel/ten, -/obj/item/stack/material/plastic/ten, -/obj/item/stack/material/ocp/ten, -/obj/item/stack/material/glass/fifty, -/obj/item/stack/material/glass/reinforced/fifty, -/obj/item/stack/material/steel/fifty, -/obj/item/stack/material/plastic/ten, -/obj/item/stack/material/glass/fifty, -/obj/effect/floor_decal/corner/paleblue/mono, -/turf/simulated/floor/tiled/dark, -/area/map_template/colony2/engineering) -"qI" = ( -/obj/machinery/portable_atmospherics/hydroponics, -/obj/machinery/alarm{ - dir = 1; - locked = 0; - pixel_y = -22; - req_access = newlist() - }, -/obj/effect/floor_decal/corner/paleblue/mono, -/turf/simulated/floor/tiled/dark/monotile, -/area/map_template/colony2/commons) -"rm" = ( -/obj/structure/bed/chair/shuttle/white{ - dir = 8 - }, -/obj/effect/floor_decal/corner_steel_grid/diagonal, -/turf/simulated/floor/tiled/techmaint, -/area/map_template/colony2/ship) -"ro" = ( -/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply, -/obj/machinery/atmospherics/pipe/manifold/visible/scrubbers{ - dir = 1 - }, -/obj/effect/catwalk_plated/dark, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/plating, -/area/map_template/colony2/ship) -"rp" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/firealarm{ - dir = 8; - pixel_x = -24 - }, -/obj/effect/catwalk_plated/dark, -/turf/simulated/floor/plating, -/area/map_template/colony2/Hallway) -"rr" = ( -/obj/machinery/atmospherics/pipe/simple/visible/scrubbers, -/obj/machinery/meter, -/turf/simulated/floor/reinforced/airless, -/area/map_template/colony2/external) -"rL" = ( -/obj/effect/floor_decal/industrial/hatch/yellow, -/obj/machinery/mineral/processing_unit{ - input_turf = 8; - output_turf = 1 - }, -/turf/simulated/floor/reinforced/airless, -/area/map_template/colony2/external) -"rM" = ( -/obj/machinery/conveyor{ - dir = 1; - id = "colonymine2" - }, -/obj/effect/floor_decal/industrial/hatch/yellow, -/obj/machinery/computer/mining{ - pixel_x = 32 - }, -/turf/simulated/floor/reinforced/airless, -/area/map_template/colony2/external) -"rO" = ( -/obj/machinery/atmospherics/pipe/simple/visible/fuel{ - dir = 5 - }, -/turf/simulated/floor/reinforced/airless, -/area/map_template/colony2/external) -"so" = ( -/obj/machinery/door/airlock/civilian, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/door/firedoor, -/turf/simulated/floor/tiled/techmaint, -/area/map_template/colony2/ship) -"sG" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 1 - }, -/obj/structure/cable{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/effect/floor_decal/corner/paleblue{ - dir = 8 - }, -/turf/simulated/floor/tiled/dark, -/area/map_template/colony2/engineering) -"sK" = ( -/obj/machinery/conveyor{ - dir = 1; - id = "colonymine2" - }, -/obj/effect/floor_decal/industrial/hatch/yellow, -/obj/machinery/light/spot{ - dir = 4 - }, -/turf/simulated/floor/reinforced/airless, -/area/map_template/colony2/external) -"sO" = ( -/obj/machinery/atmospherics/pipe/simple/visible/scrubbers, -/obj/machinery/door/blast/regular{ - dir = 2; - id_tag = "colony2atmos"; - name = "Atmospheric Pod Blast Shutter" - }, -/obj/effect/floor_decal/industrial/hatch, -/turf/simulated/floor/reinforced, -/area/map_template/colony2/external) -"sZ" = ( -/obj/machinery/atmospherics/pipe/simple/visible/red{ - dir = 4 - }, -/obj/machinery/meter, -/obj/effect/catwalk_plated/dark, -/turf/simulated/floor/plating, -/area/map_template/colony2/atmospherics) -"tb" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 8 - }, -/obj/machinery/light{ - dir = 4 - }, -/obj/effect/floor_decal/corner/paleblue{ - dir = 6 - }, -/turf/simulated/floor/tiled/dark, -/area/map_template/colony2/Hallway) -"tu" = ( -/obj/machinery/cryopod{ - dir = 2 - }, -/obj/effect/floor_decal/corner/paleblue/mono, -/obj/item/device/radio/intercom/map_preset/playablecolony2{ - pixel_y = 21 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/map_template/colony2/commons) -"tT" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/effect/catwalk_plated/dark, -/obj/machinery/alarm{ - dir = 4; - locked = 0; - pixel_x = -21; - req_access = newlist() - }, -/turf/simulated/floor/plating, -/area/map_template/colony2/Hallway) -"tZ" = ( -/obj/machinery/atmospherics/pipe/simple/visible/fuel{ - dir = 6 - }, -/turf/simulated/floor/reinforced/airless, -/area/map_template/colony2/external) -"uq" = ( -/obj/machinery/atmospherics/valve, -/turf/simulated/floor/reinforced/airless, -/area/map_template/colony2/external) -"ux" = ( -/obj/effect/floor_decal/industrial/hatch/yellow, -/obj/machinery/mineral/unloading_machine{ - input_turf = 1 - }, -/turf/simulated/floor/reinforced/airless, -/area/map_template/colony2/external) -"uT" = ( -/obj/machinery/light{ - dir = 4 - }, -/obj/effect/floor_decal/corner/paleblue{ - dir = 6 - }, -/turf/simulated/floor/tiled/dark, -/area/map_template/colony2/Hallway) -"vf" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 1 - }, -/obj/machinery/alarm{ - dir = 8; - locked = 0; - pixel_x = 25; - req_access = newlist() - }, -/turf/simulated/floor/tiled/freezer, -/area/map_template/colony2/ship) -"vh" = ( -/obj/machinery/door/airlock/external{ - frequency = 1380; - id_tag = "playablecolonymain2_exterior_door"; - locked = 1 - }, -/obj/machinery/atmospherics/pipe/manifold/visible{ - dir = 4 - }, -/turf/simulated/floor/reinforced, -/area/map_template/colony2/external) -"vj" = ( -/obj/machinery/atmospherics/pipe/simple/visible/fuel{ - dir = 4 - }, -/turf/simulated/floor/reinforced/airless, -/area/map_template/colony2/external) -"vn" = ( -/obj/effect/paint/ocean, -/turf/simulated/wall/r_wall, -/area/map_template/colony2/atmospherics) -"vO" = ( -/obj/machinery/computer/cryopod{ - pixel_y = 25 - }, -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/obj/effect/floor_decal/corner/paleblue{ - dir = 5 - }, -/turf/simulated/floor/tiled/dark, -/area/map_template/colony2/commons) -"wm" = ( -/obj/structure/cable{ - d2 = 2; - icon_state = "0-2" - }, -/obj/machinery/power/apc{ - dir = 1; - locked = 0; - name = "north bump"; - pixel_y = 24; - req_access = newlist() - }, -/obj/item/clamp, -/obj/item/clamp, -/obj/item/clamp, -/obj/structure/closet/crate, -/obj/item/device/scanner/gas, -/obj/item/device/scanner/gas, -/obj/item/device/scanner/gas, -/obj/item/grenade/chem_grenade/metalfoam, -/obj/item/grenade/chem_grenade/metalfoam, -/obj/item/tape_roll, -/obj/item/tape_roll, -/obj/item/rpd, -/obj/effect/floor_decal/corner/paleblue/mono, -/obj/machinery/atmospherics/pipe/simple/hidden/red{ - dir = 4 - }, -/obj/item/device/paint_sprayer, -/turf/simulated/floor/tiled/dark/monotile, -/area/map_template/colony2/atmospherics) -"wp" = ( -/obj/structure/cable{ - d2 = 8; - icon_state = "0-8" - }, -/obj/machinery/power/apc{ - dir = 4; - locked = 0; - name = "east bump"; - pixel_x = 24; - req_access = newlist() - }, -/obj/effect/floor_decal/corner/paleblue{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/red{ - dir = 10 - }, -/turf/simulated/floor/tiled/dark, -/area/map_template/colony2/Hallway) -"wx" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/effect/floor_decal/corner_steel_grid/diagonal{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled/techmaint, -/area/map_template/colony2/ship) -"xv" = ( -/obj/effect/paint/ocean, -/turf/simulated/wall, -/area/map_template/colony2/commons) -"xx" = ( -/obj/effect/floor_decal/corner/paleblue/mono, -/obj/structure/closet/crate/med_crate/trauma, -/obj/structure/railing/mapped{ - dir = 8 - }, -/obj/item/device/radio/intercom/map_preset/playablecolony2{ - pixel_y = 21 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/map_template/colony2/storage) -"xB" = ( -/obj/structure/closet/walllocker{ - name = "Washing Machine Supplies"; - pixel_y = 28; - pixel_z = 3 - }, -/obj/item/ironingiron, -/obj/item/roller/ironingboard, -/obj/item/soap, -/obj/item/storage/box/detergent, -/obj/item/storage/box/detergent, -/obj/machinery/washing_machine, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, -/turf/simulated/floor/tiled/freezer, -/area/map_template/colony2/ship) -"yu" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/cable{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/effect/catwalk_plated/dark, -/obj/machinery/atmospherics/pipe/simple/visible/red{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/map_template/colony2/Hallway) -"yJ" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/visible/scrubbers, -/obj/effect/catwalk_plated/dark, -/turf/simulated/floor/plating, -/area/map_template/colony2/ship) -"yO" = ( -/obj/machinery/light/small{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/tiled/freezer, -/area/map_template/colony2/ship) -"zd" = ( -/obj/machinery/atmospherics/pipe/simple/visible/fuel{ - dir = 4 - }, -/obj/machinery/meter, -/turf/simulated/floor/reinforced, -/area/map_template/colony2/external) -"zk" = ( -/obj/structure/railing/mapped, -/obj/structure/railing/mapped{ - dir = 4 - }, -/turf/simulated/floor/reinforced/airless, -/area/map_template/colony2/external) -"zv" = ( -/obj/effect/catwalk_plated/dark, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/obj/structure/cable{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/turf/simulated/floor/plating, -/area/map_template/colony2/commons) -"zZ" = ( -/obj/machinery/atmospherics/pipe/manifold/visible/red, -/obj/effect/catwalk_plated/dark, -/turf/simulated/floor/airless, -/area/map_template/colony2/external) -"Af" = ( -/obj/machinery/light{ - dir = 1 - }, -/obj/effect/floor_decal/corner/paleblue/mono, -/obj/structure/closet/crate/med_crate/burn, -/turf/simulated/floor/tiled/dark/monotile, -/area/map_template/colony2/storage) -"Ak" = ( -/obj/machinery/atmospherics/unary/engine{ - dir = 1 - }, -/turf/simulated/floor/reinforced, -/area/map_template/colony2/external) -"Ap" = ( -/obj/machinery/cryopod{ - dir = 2 - }, -/obj/machinery/light{ - dir = 1 - }, -/obj/effect/floor_decal/corner/paleblue/mono, -/turf/simulated/floor/tiled/dark/monotile, -/area/map_template/colony2/commons) -"AE" = ( -/obj/effect/paint/ocean, -/turf/simulated/wall/r_wall, -/area/map_template/colony2/engineering) -"AK" = ( -/obj/effect/floor_decal/corner/paleblue/mono, -/obj/structure/table/steel_reinforced, -/obj/machinery/microwave, -/turf/simulated/floor/tiled/dark/monotile, -/area/map_template/colony2/commons) -"AS" = ( -/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply, -/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/cable{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/structure/cable{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/effect/catwalk_plated/dark, -/turf/simulated/floor/plating, -/area/map_template/colony2/Hallway) -"AU" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/effect/catwalk_plated/dark, -/obj/structure/cable{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/machinery/atmospherics/pipe/manifold/visible/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/map_template/colony2/Hallway) -"Bc" = ( -/obj/structure/closet/crate/freezer/rations, -/obj/item/storage/mre/random, -/obj/item/storage/mre/random, -/obj/item/storage/mre/random, -/obj/item/storage/mre/random, -/obj/item/storage/mre/random, -/obj/effect/floor_decal/corner/paleblue/mono, -/turf/simulated/floor/tiled/dark/monotile, -/area/map_template/colony2/commons) -"Bf" = ( -/obj/machinery/atmospherics/pipe/simple/visible/red{ - dir = 10 - }, -/obj/effect/catwalk_plated/dark, -/turf/simulated/floor/plating, -/area/map_template/colony2/engineering) -"Bk" = ( -/obj/effect/floor_decal/corner_steel_grid/diagonal{ - dir = 4 - }, -/obj/structure/closet/cabinet, -/obj/machinery/recharger/wallcharger{ - pixel_y = 28 - }, -/obj/random/clothing, -/obj/random/clothing, -/obj/random/clothing, -/obj/random/clothing, -/obj/random/glasses, -/obj/random/glasses, -/obj/random/hat, -/obj/random/hat, -/obj/random/masks, -/obj/random/masks, -/obj/random/gloves, -/obj/random/gloves, -/obj/random/shoes, -/obj/random/shoes, -/obj/random/accessory, -/obj/random/accessory, -/obj/item/crowbar/prybar, -/obj/item/crowbar/prybar, -/obj/item/device/radio/map_preset/playablecolony2, -/obj/item/device/radio/map_preset/playablecolony2, -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/obj/item/device/radio/headset/map_preset/playablecolony2, -/obj/item/device/radio/headset/map_preset/playablecolony2, -/turf/simulated/floor/tiled/techmaint, -/area/map_template/colony2/ship) -"BI" = ( -/obj/machinery/atmospherics/binary/pump, -/obj/effect/floor_decal/corner/paleblue/mono, -/turf/simulated/floor/tiled/dark/monotile, -/area/map_template/colony2/engineering) -"BR" = ( -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/mining/brace{ - dir = 8 - }, -/turf/simulated/floor/reinforced/airless, -/area/map_template/colony2/external) -"BU" = ( -/obj/effect/catwalk_plated/dark, -/obj/structure/railing/mapped{ - dir = 8 - }, -/turf/simulated/floor/plating, -/area/map_template/colony2/storage) -"BZ" = ( -/turf/simulated/floor/reinforced, -/area/map_template/colony2/external) -"Ch" = ( -/obj/machinery/portable_atmospherics/powered/scrubber, -/obj/machinery/atmospherics/portables_connector, -/obj/structure/cable{ - d2 = 2; - icon_state = "0-2" - }, -/obj/machinery/power/apc{ - dir = 1; - locked = 0; - name = "north bump"; - pixel_y = 24; - req_access = newlist() - }, -/obj/effect/floor_decal/corner/paleblue/mono, -/turf/simulated/floor/tiled/dark/monotile, -/area/map_template/colony2/engineering) -"Ci" = ( -/obj/effect/floor_decal/corner/paleblue{ - dir = 10 - }, -/obj/machinery/meter, -/obj/machinery/light_switch{ - pixel_x = 22 - }, -/obj/machinery/atmospherics/pipe/manifold/visible{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark, -/area/map_template/colony2/atmospherics) -"Cr" = ( -/obj/machinery/door/airlock/civilian, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/door/firedoor, -/turf/simulated/floor/tiled/techmaint, -/area/map_template/colony2/storage) -"Cu" = ( -/obj/machinery/conveyor_switch{ - id = "colonymine2" - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/structure/railing/mapped{ - dir = 4 - }, -/turf/simulated/floor/reinforced/airless, -/area/map_template/colony2/external) -"CA" = ( -/obj/machinery/alarm{ - dir = 8; - locked = 0; - pixel_x = 25; - req_access = newlist() - }, -/obj/effect/floor_decal/corner/paleblue/mono, -/obj/machinery/atmospherics/valve/open, -/turf/simulated/floor/tiled/dark/monotile, -/area/map_template/colony2/engineering) -"CJ" = ( -/obj/machinery/door/airlock/civilian, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/door/firedoor, -/turf/simulated/floor/tiled/techmaint, -/area/map_template/colony2/commons) -"CQ" = ( -/turf/simulated/floor/tiled/white, -/area/map_template/colony2/ship) -"Dd" = ( -/obj/machinery/light{ - dir = 8 - }, -/obj/effect/floor_decal/corner_steel_grid/diagonal, -/obj/machinery/computer/air_control{ - dir = 4; - name = "Atmospheric Sensors"; - sensor_tag = "Halifax_out" - }, -/turf/simulated/floor/tiled/techmaint, -/area/map_template/colony2/ship) -"Dv" = ( -/obj/machinery/alarm{ - dir = 4; - locked = 0; - pixel_x = -21; - req_access = newlist() - }, -/obj/effect/floor_decal/corner/paleblue/mono, -/obj/structure/largecrate/animal/cow, -/turf/simulated/floor/tiled/dark/monotile, -/area/map_template/colony2/storage) -"Dw" = ( -/obj/machinery/atmospherics/unary/tank/carbon_dioxide{ - dir = 4; - start_pressure = 120 - }, -/turf/simulated/floor/reinforced/airless, -/area/map_template/colony2/external) -"DD" = ( -/obj/machinery/light, -/obj/effect/floor_decal/corner/paleblue/mono, -/obj/structure/largecrate/animal/cow, -/turf/simulated/floor/tiled/dark/monotile, -/area/map_template/colony2/storage) -"DG" = ( -/obj/machinery/light{ - dir = 1 - }, -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/obj/effect/floor_decal/corner/paleblue/mono, -/obj/machinery/suit_cycler{ - name = "Colonial suit cycler"; - req_access = list() - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/map_template/colony2/engineering) -"DH" = ( -/obj/machinery/atmospherics/binary/pump{ - dir = 4 - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/reinforced/airless, -/area/map_template/colony2/external) -"DJ" = ( -/obj/machinery/atmospherics/pipe/manifold4w/visible/blue, -/obj/effect/catwalk_plated/dark, -/turf/simulated/floor/airless, -/area/map_template/colony2/external) -"DQ" = ( -/obj/effect/floor_decal/corner/paleblue/mono, -/obj/structure/largecrate/animal/goose, -/turf/simulated/floor/tiled/dark/monotile, -/area/map_template/colony2/storage) -"DR" = ( -/obj/structure/closet/crate, -/obj/item/gun/projectile/shotgun/pump{ - desc = "The mass-produced W-T Remmington 29x shotgun is a favourite of police and security forces on many worlds. Useful for sweeping alleys. Someone has marked it as property of 'Vel-Rana', with one kill mark next to it." - }, -/obj/item/storage/box/ammo/shotgunammo, -/obj/item/storage/box/ammo/shotgunshells, -/obj/item/gun/energy/gun/small, -/obj/item/gun/energy/gun/small, -/obj/item/gun/energy/gun/small, -/obj/item/gun/energy/gun/small, -/obj/item/storage/box/ammo/flashshells, -/obj/effect/floor_decal/corner/paleblue/mono, -/obj/item/gun/energy/gun, -/obj/structure/railing/mapped{ - dir = 8 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/map_template/colony2/storage) -"En" = ( -/obj/effect/floor_decal/corner/paleblue/mono, -/obj/structure/closet/crate/solar, -/turf/simulated/floor/tiled/dark/monotile, -/area/map_template/colony2/storage) -"Eo" = ( -/obj/effect/catwalk_plated/dark, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/plating, -/area/map_template/colony2/commons) -"Et" = ( -/obj/structure/table/steel_reinforced, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/recharger, -/obj/item/device/flashlight/lamp/floodlamp, -/obj/machinery/firealarm{ - pixel_y = 24 - }, -/turf/simulated/floor/reinforced/airless, -/area/map_template/colony2/external) -"ED" = ( -/obj/effect/floor_decal/corner/paleblue/mono, -/obj/structure/closet/crate/solar_assembly, -/turf/simulated/floor/tiled/dark/monotile, -/area/map_template/colony2/storage) -"EN" = ( -/obj/machinery/optable, -/obj/machinery/alarm{ - dir = 8; - locked = 0; - pixel_x = 25; - req_access = newlist() - }, -/turf/simulated/floor/tiled/white, -/area/map_template/colony2/ship) -"EP" = ( -/obj/machinery/atmospherics/pipe/simple/visible/universal, -/obj/machinery/door/blast/regular{ - dir = 2; - id_tag = "colony2atmos"; - name = "Atmospheric Pod Blast Shutter" - }, -/obj/effect/floor_decal/industrial/hatch, -/turf/simulated/floor/reinforced/airless, -/area/map_template/colony2/external) -"Fm" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 1 - }, -/obj/machinery/light_switch{ - pixel_x = 22 - }, -/obj/effect/floor_decal/corner/paleblue/mono, -/obj/structure/closet/firecloset, -/turf/simulated/floor/tiled/dark/monotile, -/area/map_template/colony2/storage) -"Fn" = ( -/obj/machinery/alarm{ - dir = 4; - locked = 0; - pixel_x = -21; - req_access = newlist() - }, -/obj/structure/reagent_dispensers/fueltank, -/obj/effect/floor_decal/corner/paleblue/mono, -/obj/machinery/atmospherics/valve/open, -/turf/simulated/floor/tiled/dark/monotile, -/area/map_template/colony2/atmospherics) -"Fq" = ( -/obj/item/stool/bar/padded, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 1 - }, -/obj/machinery/light_switch{ - pixel_x = -22 - }, -/obj/effect/floor_decal/corner/paleblue{ - dir = 10 - }, -/turf/simulated/floor/tiled/dark, -/area/map_template/colony2/commons) -"FI" = ( -/obj/structure/reagent_dispensers/watertank, -/obj/effect/floor_decal/corner/paleblue/mono, -/turf/simulated/floor/tiled/dark/monotile, -/area/map_template/colony2/commons) -"Gh" = ( -/obj/effect/floor_decal/industrial/hatch/yellow, -/obj/machinery/conveyor{ - dir = 4; - id = "colonymine2" - }, -/turf/simulated/floor/reinforced/airless, -/area/map_template/colony2/external) -"Gq" = ( -/obj/machinery/door/blast/regular{ - dir = 4; - id_tag = "colony2atmos"; - name = "Atmospheric Pod Blast Shutter" - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/effect/floor_decal/industrial/loading{ - dir = 4 - }, -/obj/effect/floor_decal/industrial/hatch, -/turf/simulated/floor/reinforced/airless, -/area/map_template/colony2/external) -"Gt" = ( -/obj/effect/floor_decal/industrial/loading, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/structure/ore_box, -/turf/simulated/floor/reinforced/airless, -/area/map_template/colony2/external) -"GS" = ( -/obj/structure/table/steel_reinforced, -/obj/structure/cable, -/obj/machinery/power/apc{ - locked = 0; - name = "south bump"; - pixel_y = -28; - req_access = list() - }, -/obj/effect/floor_decal/corner/paleblue/mono, -/turf/simulated/floor/tiled/dark/monotile, -/area/map_template/colony2/commons) -"Hb" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/visible{ - dir = 10 - }, -/obj/machinery/door/airlock/external{ - frequency = 1380; - id_tag = "playablecolonymain2_interior_door" - }, -/turf/simulated/floor/tiled/techmaint, -/area/map_template/colony2/external) -"Hq" = ( -/obj/machinery/atmospherics/pipe/simple/visible/supply, -/obj/machinery/atmospherics/pipe/manifold/visible/fuel, -/obj/effect/catwalk_plated/dark, -/turf/simulated/floor/airless, -/area/map_template/colony2/external) -"Hw" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 1 - }, -/obj/effect/catwalk_plated/dark, -/turf/simulated/floor/plating, -/area/map_template/colony2/atmospherics) -"HD" = ( -/obj/machinery/atmospherics/unary/tank/carbon_dioxide{ - dir = 8; - start_pressure = 120 - }, -/turf/simulated/floor/reinforced/airless, -/area/map_template/colony2/external) -"HK" = ( -/obj/machinery/atmospherics/pipe/simple/visible/supply, -/obj/machinery/atmospherics/pipe/manifold/visible/fuel{ - dir = 1 - }, -/obj/effect/catwalk_plated/dark, -/turf/simulated/floor/airless, -/area/map_template/colony2/external) -"HQ" = ( -/obj/structure/table/rack, -/obj/item/stack/material/rods/fifty, -/obj/item/stack/material/rods/fifty, -/obj/item/pickaxe, -/obj/item/pickaxe, -/obj/item/shovel, -/obj/item/shovel, -/obj/item/storage/ore, -/obj/item/storage/ore, -/obj/item/cell/super, -/obj/item/cell/super, -/obj/item/cell/super, -/obj/item/device/scanner/mining, -/obj/item/storage/box/greenglowsticks, -/obj/item/storage/box/greenglowsticks, -/obj/item/storage/box/greenglowsticks, -/obj/item/stack/flag/yellow, -/obj/item/stack/flag/yellow, -/obj/item/stack/flag/yellow, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/item/wrench, -/obj/item/wrench, -/obj/item/device/spaceflare, -/obj/item/device/spaceflare, -/turf/simulated/floor/reinforced/airless, -/area/map_template/colony2/external) -"HS" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/effect/catwalk_plated/dark, -/turf/simulated/floor/plating, -/area/map_template/colony2/Hallway) -"HU" = ( -/obj/effect/catwalk_plated/dark, -/obj/machinery/atmospherics/pipe/simple/visible/supply, -/obj/machinery/atmospherics/pipe/manifold4w/visible/fuel, -/turf/simulated/floor/airless, -/area/map_template/colony2/external) -"Is" = ( -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/mining/brace{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/visible/fuel{ - dir = 4 - }, -/turf/simulated/floor/reinforced/airless, -/area/map_template/colony2/external) -"Iz" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/catwalk_plated/dark, -/turf/simulated/floor/plating, -/area/map_template/colony2/Hallway) -"ID" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 - }, -/obj/effect/catwalk_plated/dark, -/turf/simulated/floor/plating, -/area/map_template/colony2/tcomms) -"IN" = ( -/obj/effect/floor_decal/corner/paleblue/mono, -/obj/machinery/firealarm{ - pixel_y = 24 - }, -/obj/machinery/telecomms/bus/map_preset/playablecolony2, -/turf/simulated/floor/tiled/dark/monotile, -/area/map_template/colony2/tcomms) -"Jg" = ( -/obj/machinery/atmospherics/unary/tank/oxygen{ - dir = 8 - }, -/turf/simulated/floor/reinforced/airless, -/area/map_template/colony2/external) -"Jq" = ( -/obj/machinery/atmospherics/pipe/simple/visible/fuel{ - dir = 4 - }, -/obj/machinery/door/blast/regular{ - dir = 4; - id_tag = "colony2atmos"; - name = "Atmospheric Pod Blast Shutter" - }, -/obj/effect/floor_decal/industrial/hatch, -/turf/simulated/floor/reinforced, -/area/map_template/colony2/external) -"Jr" = ( -/obj/item/stool/bar/padded, -/obj/effect/floor_decal/corner/paleblue{ - dir = 10 - }, -/turf/simulated/floor/tiled/dark, -/area/map_template/colony2/commons) -"Jv" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/visible/red{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, -/obj/effect/catwalk_plated/dark, -/turf/simulated/floor/plating, -/area/map_template/colony2/atmospherics) -"JN" = ( -/obj/effect/floor_decal/corner/paleblue/mono, -/obj/structure/table/steel_reinforced, -/obj/machinery/fabricator/micro, -/obj/item/stack/material/aluminium/ten, -/obj/item/stack/material/glass/ten, -/obj/item/stack/material/steel/ten, -/turf/simulated/floor/tiled/dark/monotile, -/area/map_template/colony2/commons) -"Kg" = ( -/obj/machinery/atmospherics/unary/vent_pump/on, -/obj/machinery/portable_atmospherics/canister/oxygen, -/obj/machinery/firealarm{ - pixel_y = 24 - }, -/obj/effect/floor_decal/corner/paleblue/mono, -/turf/simulated/floor/tiled/dark/monotile, -/area/map_template/colony2/atmospherics) -"Kr" = ( -/obj/machinery/atmospherics/binary/pump{ - dir = 8 - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/reinforced/airless, -/area/map_template/colony2/external) -"Kz" = ( -/obj/structure/table/steel_reinforced, -/obj/machinery/light, -/obj/effect/floor_decal/corner/paleblue/mono, -/obj/machinery/reagent_temperature/cooler, -/turf/simulated/floor/tiled/dark/monotile, -/area/map_template/colony2/commons) -"KA" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/universal, -/obj/effect/wallframe_spawn/reinforced, -/obj/effect/paint/ocean, -/obj/machinery/door/blast/regular{ - id_tag = "colony2"; - name = "Window Blast Shutter" - }, -/turf/simulated/floor/plating, -/area/map_template/colony2/engineering) -"KP" = ( -/obj/machinery/atmospherics/pipe/simple/visible/blue, -/obj/machinery/door/blast/regular{ - dir = 2; - id_tag = "colony2atmos"; - name = "Atmospheric Pod Blast Shutter" - }, -/obj/effect/floor_decal/industrial/hatch, -/turf/simulated/floor/reinforced/airless, -/area/map_template/colony2/external) -"KU" = ( -/obj/machinery/atmospherics/pipe/simple/visible/universal{ - dir = 4 - }, -/obj/effect/catwalk_plated/dark, -/turf/simulated/floor/plating, -/area/map_template/colony2/atmospherics) -"KV" = ( -/obj/machinery/light/spot{ - dir = 8 - }, -/turf/simulated/floor/reinforced, -/area/map_template/colony2/external) -"Ls" = ( -/obj/effect/paint/ocean, -/turf/simulated/wall/r_wall, -/area/map_template/colony2/external) -"LP" = ( -/obj/effect/catwalk_plated/dark, -/turf/simulated/floor/plating, -/area/map_template/colony2/storage) -"Mb" = ( -/obj/effect/floor_decal/corner/paleblue/mono, -/obj/machinery/light{ - dir = 1 - }, -/obj/machinery/telecomms/hub/map_preset/playablecolony2, -/turf/simulated/floor/tiled/dark/monotile, -/area/map_template/colony2/tcomms) -"Mc" = ( -/obj/effect/paint/ocean, -/obj/effect/wallframe_spawn/reinforced, -/obj/machinery/door/blast/regular{ - dir = 4; - id_tag = "colony2"; - name = "Window Blast Shutter" - }, -/turf/simulated/floor/plating, -/area/map_template/colony2/commons) -"Mh" = ( -/obj/structure/cable{ - d2 = 4; - icon_state = "0-4" - }, -/obj/machinery/power/apc{ - dir = 8; - locked = 0; - name = "west bump"; - pixel_x = -24 - }, -/obj/effect/floor_decal/corner_steel_grid/diagonal, -/obj/structure/bed/chair/shuttle/white{ - dir = 4 - }, -/turf/simulated/floor/tiled/techmaint, -/area/map_template/colony2/ship) -"Mv" = ( -/obj/machinery/atmospherics/pipe/manifold/visible/fuel{ - dir = 8 - }, -/obj/machinery/meter, -/obj/machinery/light/spot{ - dir = 8 - }, -/turf/simulated/floor/reinforced/airless, -/area/map_template/colony2/external) -"MN" = ( -/obj/structure/closet/crate/freezer/rations, -/obj/item/reagent_containers/food/snacks/liquidfood, -/obj/item/reagent_containers/food/snacks/liquidfood, -/obj/item/reagent_containers/food/snacks/liquidfood, -/obj/item/reagent_containers/food/snacks/liquidfood, -/obj/item/reagent_containers/food/snacks/liquidfood, -/obj/item/reagent_containers/food/snacks/liquidfood, -/obj/item/reagent_containers/food/snacks/liquidfood, -/obj/item/reagent_containers/food/snacks/liquidfood, -/obj/effect/floor_decal/corner/paleblue/mono, -/obj/item/reagent_containers/food/condiment/enzyme, -/obj/item/reagent_containers/food/condiment/enzyme, -/obj/item/reagent_containers/food/condiment/enzyme, -/obj/item/reagent_containers/food/condiment/enzyme, -/turf/simulated/floor/tiled/dark/monotile, -/area/map_template/colony2/commons) -"Nb" = ( -/obj/machinery/light, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 8 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/colony2/ship) -"Nf" = ( -/obj/structure/table/steel_reinforced, -/obj/effect/floor_decal/corner/paleblue/mono, -/obj/machinery/alarm{ - dir = 8; - locked = 0; - pixel_x = 25; - req_access = newlist() - }, -/obj/machinery/reagent_temperature, -/turf/simulated/floor/tiled/dark/monotile, -/area/map_template/colony2/commons) -"Nl" = ( -/obj/machinery/atmospherics/pipe/manifold/visible/blue{ - dir = 8 - }, -/obj/machinery/meter, -/obj/effect/catwalk_plated/dark, -/turf/simulated/floor/plating, -/area/map_template/colony2/atmospherics) -"Nm" = ( -/obj/machinery/vending/engivend{ - req_access = list() - }, -/obj/effect/floor_decal/corner/paleblue/mono, -/turf/simulated/floor/tiled/dark/monotile, -/area/map_template/colony2/engineering) -"NX" = ( -/obj/machinery/atmospherics/pipe/manifold/visible/fuel{ - dir = 1 - }, -/turf/simulated/floor/reinforced/airless, -/area/map_template/colony2/external) -"Oc" = ( -/obj/effect/floor_decal/corner/paleblue{ - dir = 9 - }, -/obj/structure/largecrate/animal/chick, -/turf/simulated/floor/tiled/dark, -/area/map_template/colony2/storage) -"Og" = ( -/obj/effect/landmark/clear, -/turf/template_noop, -/area/template_noop) -"Oy" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, -/obj/effect/catwalk_plated/dark, -/turf/simulated/floor/plating, -/area/map_template/colony2/tcomms) -"Oz" = ( -/obj/machinery/vending/tool, -/obj/effect/floor_decal/corner/paleblue/mono, -/obj/item/device/radio/intercom/map_preset/playablecolony2{ - pixel_y = 21 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/map_template/colony2/engineering) -"OB" = ( -/obj/machinery/firealarm{ - pixel_y = 24 - }, -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/obj/effect/floor_decal/corner/paleblue/mono, -/obj/structure/closet/crate/med_crate/toxin, -/turf/simulated/floor/tiled/dark/monotile, -/area/map_template/colony2/storage) -"OK" = ( -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/door/airlock/civilian, -/obj/machinery/atmospherics/pipe/simple/visible{ - dir = 4 - }, -/turf/simulated/floor/tiled/techmaint, -/area/map_template/colony2/atmospherics) -"OT" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/simple/visible/red{ - dir = 4 - }, -/obj/machinery/door/airlock/civilian, -/turf/simulated/floor/tiled/techmaint, -/area/map_template/colony2/engineering) -"OZ" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/effect/floor_decal/corner/paleblue{ - dir = 10 - }, -/obj/machinery/light_switch{ - pixel_x = -22 - }, -/turf/simulated/floor/tiled/dark, -/area/map_template/colony2/engineering) -"Pa" = ( -/obj/effect/paint/ocean, -/turf/simulated/wall, -/area/map_template/colony2/storage) -"Pp" = ( -/obj/machinery/atmospherics/portables_connector{ - dir = 8 - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/portable_atmospherics/canister/carbon_dioxide/engine_setup, -/turf/simulated/floor/reinforced/airless, -/area/map_template/colony2/external) -"PF" = ( -/obj/effect/floor_decal/corner/paleblue/mono, -/obj/machinery/suit_storage_unit/engineering/salvage{ - name = "Colonial Suit Storage Unit"; - req_access = newlist() - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/map_template/colony2/atmospherics) -"PS" = ( -/obj/machinery/mining/drill, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/light/spot{ - dir = 4 - }, -/turf/simulated/floor/reinforced/airless, -/area/map_template/colony2/external) -"PU" = ( -/obj/effect/paint/ocean, -/turf/simulated/wall/r_wall, -/area/map_template/colony2/ship) -"Qi" = ( -/obj/machinery/atmospherics/pipe/simple/visible/fuel, -/turf/simulated/floor/reinforced/airless, -/area/map_template/colony2/external) -"Qq" = ( -/obj/effect/floor_decal/corner_steel_grid/diagonal{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, -/turf/simulated/floor/tiled/techmaint, -/area/map_template/colony2/ship) -"Qt" = ( -/obj/machinery/power/apc{ - dir = 1; - locked = 0; - name = "north bump"; - pixel_y = 24; - req_access = newlist() - }, -/obj/structure/cable{ - d2 = 2; - icon_state = "0-2" - }, -/obj/effect/floor_decal/corner/paleblue/mono, -/obj/machinery/light_switch{ - pixel_x = 22 - }, -/obj/machinery/telecomms/processor/map_preset/playablecolony2, -/turf/simulated/floor/tiled/dark/monotile, -/area/map_template/colony2/tcomms) -"Qw" = ( -/obj/structure/hygiene/shower{ - dir = 8; - pixel_x = 8 - }, -/obj/structure/curtain/open/shower, -/turf/simulated/floor/tiled/freezer, -/area/map_template/colony2/ship) -"QH" = ( -/obj/machinery/light, -/obj/effect/floor_decal/corner/paleblue/mono, -/obj/machinery/suit_storage_unit/engineering/salvage{ - name = "Colonial Suit Storage Unit"; - req_access = newlist() - }, -/obj/machinery/atmospherics/pipe/simple/visible{ - dir = 5 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/map_template/colony2/atmospherics) -"QK" = ( -/obj/effect/floor_decal/corner/paleblue/mono, -/obj/machinery/atmospherics/binary/pump/on{ - dir = 4; - target_pressure = 100 - }, -/obj/machinery/suit_storage_unit/engineering/salvage{ - name = "Colonial Suit Storage Unit"; - req_access = newlist() - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/map_template/colony2/atmospherics) -"QW" = ( -/obj/effect/floor_decal/corner/paleblue/mono, -/obj/machinery/suit_storage_unit/engineering/salvage{ - name = "Colonial Suit Storage Unit"; - req_access = newlist() - }, -/obj/machinery/atmospherics/pipe/simple/visible{ - dir = 9 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/map_template/colony2/atmospherics) -"QY" = ( -/obj/machinery/firealarm{ - dir = 8; - pixel_x = -24 - }, -/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{ - dir = 1; - id_tag = "playablecolonymain2_pump"; - power_rating = 25000 - }, -/turf/simulated/floor/reinforced, -/area/map_template/colony2/external) -"Rp" = ( -/obj/machinery/door/blast/regular{ - dir = 4; - id_tag = "colony2atmos"; - name = "Atmospheric Pod Blast Shutter" - }, -/obj/effect/floor_decal/industrial/hatch, -/turf/simulated/floor/reinforced/airless, -/area/map_template/colony2/external) -"Rs" = ( -/obj/structure/cable, -/obj/machinery/power/smes/buildable/max_cap_in_out, -/obj/effect/floor_decal/corner/paleblue/mono, -/turf/simulated/floor/tiled/dark/monotile, -/area/map_template/colony2/engineering) -"Rw" = ( -/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{ - id_tag = "playablecolonymain2_pump_out_internal"; - power_rating = 25000 - }, -/obj/machinery/embedded_controller/radio/airlock/airlock_controller{ - cycle_to_external_air = 1; - dir = 4; - frequency = 1380; - id_tag = "playablecolonymain2"; - pixel_x = -22; - tag_airpump = "playablecolonymain2_pump"; - tag_chamber_sensor = "playablecolonymain2_sensor_chamber"; - tag_exterior_door = "playablecolonymain2_exterior_door"; - tag_interior_door = "playablecolonymain2_interior_door" - }, -/obj/machinery/airlock_sensor{ - frequency = 1380; - id_tag = "playablecolonymain2_sensor_chamber"; - pixel_x = -22; - pixel_y = 12 - }, -/turf/simulated/floor/reinforced, -/area/map_template/colony2/external) -"Rz" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 8 - }, -/obj/effect/floor_decal/corner/paleblue{ - dir = 6 - }, -/turf/simulated/floor/tiled/dark, -/area/map_template/colony2/Hallway) -"RB" = ( -/obj/machinery/atmospherics/pipe/simple/visible/scrubbers, -/obj/machinery/atmospherics/pipe/manifold4w/visible/fuel, -/obj/effect/catwalk_plated/dark, -/turf/simulated/floor/airless, -/area/map_template/colony2/external) -"RE" = ( -/obj/machinery/atmospherics/pipe/manifold/visible/blue, -/obj/effect/catwalk_plated/dark, -/turf/simulated/floor/airless, -/area/map_template/colony2/external) -"RL" = ( -/obj/machinery/atmospherics/pipe/simple/visible/fuel, -/obj/machinery/meter, -/turf/simulated/floor/reinforced/airless, -/area/map_template/colony2/external) -"Sl" = ( -/obj/machinery/power/terminal{ - dir = 8 - }, -/obj/structure/cable{ - d2 = 4; - icon_state = "0-4" - }, -/obj/machinery/pipedispenser, -/obj/effect/floor_decal/corner/paleblue/mono, -/turf/simulated/floor/tiled/dark/monotile, -/area/map_template/colony2/engineering) -"Sp" = ( -/obj/machinery/atmospherics/pipe/simple/visible/supply, -/obj/machinery/door/blast/regular{ - dir = 2; - id_tag = "colony2atmos"; - name = "Atmospheric Pod Blast Shutter" - }, -/obj/effect/floor_decal/industrial/hatch, -/turf/simulated/floor/reinforced/airless, -/area/map_template/colony2/external) -"SA" = ( -/obj/machinery/power/port_gen/pacman{ - anchored = 1; - sheets = 25 - }, -/obj/structure/cable{ - d2 = 8; - icon_state = "0-8" - }, -/obj/machinery/light, -/obj/effect/floor_decal/corner/paleblue/mono, -/turf/simulated/floor/tiled/dark/monotile, -/area/map_template/colony2/engineering) -"SJ" = ( -/obj/structure/table/steel_reinforced, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/cell_charger, -/obj/machinery/light/spot{ - dir = 4 - }, -/turf/simulated/floor/reinforced/airless, -/area/map_template/colony2/external) -"SO" = ( -/obj/machinery/atmospherics/pipe/simple/visible/supply{ - dir = 10 - }, -/turf/simulated/floor/reinforced/airless, -/area/map_template/colony2/external) -"SP" = ( -/obj/machinery/portable_atmospherics/hydroponics, -/obj/effect/floor_decal/corner/paleblue/mono, -/turf/simulated/floor/tiled/dark/monotile, -/area/map_template/colony2/commons) -"SQ" = ( -/obj/item/storage/backpack/dufflebag/eng, -/obj/item/storage/backpack/dufflebag/eng, -/obj/item/storage/backpack/dufflebag/med, -/obj/structure/closet/crate, -/obj/item/device/suit_cooling_unit, -/obj/item/clothing/gloves/insulated, -/obj/item/clothing/gloves/insulated, -/obj/item/storage/belt/utility/full, -/obj/item/storage/belt/utility/full, -/obj/item/storage/belt/medical, -/obj/effect/floor_decal/corner/paleblue/mono, -/obj/item/storage/belt/holster/security, -/obj/item/crowbar/prybar, -/obj/item/crowbar/prybar, -/obj/item/device/radio/map_preset/playablecolony2, -/obj/item/device/radio/map_preset/playablecolony2, -/turf/simulated/floor/tiled/dark/monotile, -/area/map_template/colony2/atmospherics) -"SR" = ( -/obj/machinery/power/apc{ - dir = 4; - locked = 0; - name = "east bump"; - pixel_x = 24; - req_access = newlist() - }, -/obj/structure/cable, -/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{ - id_tag = "playablecolonymain2_pump_out_internal"; - power_rating = 25000 - }, -/turf/simulated/floor/reinforced, -/area/map_template/colony2/external) -"ST" = ( -/obj/machinery/atmospherics/pipe/simple/visible/fuel, -/obj/effect/wallframe_spawn/reinforced, -/obj/effect/paint/ocean, -/obj/machinery/door/blast/regular{ - id_tag = "colony2"; - name = "Window Blast Shutter" - }, -/turf/simulated/floor/plating, -/area/map_template/colony2/engineering) -"SU" = ( -/obj/machinery/atmospherics/pipe/simple/visible/scrubbers, -/obj/machinery/atmospherics/pipe/manifold/visible/fuel, -/obj/effect/catwalk_plated/dark, -/turf/simulated/floor/airless, -/area/map_template/colony2/external) -"Tr" = ( -/obj/effect/catwalk_plated/dark, -/obj/machinery/atmospherics/pipe/simple/visible/red{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/map_template/colony2/engineering) -"Tu" = ( -/obj/machinery/atmospherics/pipe/simple/visible/fuel, -/obj/machinery/atmospherics/pipe/simple/visible/scrubbers, -/obj/machinery/door/blast/regular{ - dir = 2; - id_tag = "colony2atmos"; - name = "Atmospheric Pod Blast Shutter" - }, -/obj/effect/floor_decal/industrial/hatch, -/turf/simulated/floor/reinforced, -/area/map_template/colony2/external) -"Tw" = ( -/obj/machinery/atmospherics/pipe/manifold/visible/fuel{ - dir = 1 - }, -/obj/effect/paint/ocean, -/turf/simulated/wall/r_wall, -/area/map_template/colony2/external) -"Ul" = ( -/obj/machinery/hologram/holopad/longrange, -/obj/effect/floor_decal/corner_steel_grid/diagonal{ - dir = 4 - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled/techmaint, -/area/map_template/colony2/ship) -"UE" = ( -/obj/machinery/atmospherics/pipe/simple/visible/universal, -/obj/effect/wallframe_spawn/reinforced, -/obj/effect/paint/ocean, -/obj/machinery/door/blast/regular{ - id_tag = "colony2"; - name = "Window Blast Shutter" - }, -/turf/simulated/floor/plating, -/area/map_template/colony2/atmospherics) -"UM" = ( -/obj/machinery/atmospherics/pipe/simple/visible/red{ - dir = 4 - }, -/obj/effect/catwalk_plated/dark, -/obj/machinery/atmospherics/pipe/simple/visible/universal, -/turf/simulated/floor/plating, -/area/map_template/colony2/atmospherics) -"UN" = ( -/obj/effect/paint/ocean, -/turf/simulated/wall, -/area/map_template/colony2/ship) -"UW" = ( -/obj/machinery/atmospherics/unary/tank/oxygen{ - dir = 4 - }, -/turf/simulated/floor/reinforced/airless, -/area/map_template/colony2/external) -"UX" = ( -/obj/machinery/atmospherics/pipe/manifold/visible/fuel{ - dir = 4 - }, -/turf/simulated/floor/reinforced/airless, -/area/map_template/colony2/external) -"Vb" = ( -/obj/machinery/atmospherics/pipe/simple/visible/red{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/visible/scrubbers, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/cable{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/effect/catwalk_plated/dark, -/turf/simulated/floor/plating, -/area/map_template/colony2/engineering) -"Vc" = ( -/obj/machinery/meter, -/obj/machinery/atmospherics/pipe/simple/visible/supply{ - dir = 5 - }, -/turf/simulated/floor/reinforced/airless, -/area/map_template/colony2/external) -"Vp" = ( -/obj/machinery/meter, -/obj/machinery/atmospherics/pipe/simple/visible/scrubbers{ - dir = 9 - }, -/turf/simulated/floor/reinforced/airless, -/area/map_template/colony2/external) -"Vt" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{ - dir = 1; - id_tag = "playablecolonymain2_pump"; - power_rating = 25000 - }, -/obj/machinery/light/spot{ - dir = 4 - }, -/turf/simulated/floor/reinforced, -/area/map_template/colony2/external) -"Vv" = ( -/obj/effect/catwalk_plated/dark, -/turf/simulated/floor/plating, -/area/map_template/colony2/commons) -"VA" = ( -/obj/structure/bed/padded, -/obj/item/bedsheet/green, -/obj/structure/curtain/open/bed, -/obj/effect/submap_landmark/spawnpoint/colonist_spawn2, -/obj/machinery/alarm{ - dir = 4; - locked = 0; - pixel_x = -21; - req_access = newlist() - }, -/turf/simulated/floor/tiled/techmaint, -/area/map_template/colony2/ship) -"VC" = ( -/obj/machinery/atmospherics/pipe/simple/visible/fuel{ - dir = 4 - }, -/obj/machinery/door/blast/regular{ - dir = 4; - id_tag = "colony2atmos"; - name = "Atmospheric Pod Blast Shutter" - }, -/obj/effect/floor_decal/industrial/hatch, -/turf/simulated/floor/reinforced/airless, -/area/map_template/colony2/external) -"VD" = ( -/obj/machinery/atmospherics/pipe/manifold4w/visible/fuel, -/obj/effect/paint/ocean, -/turf/simulated/wall/r_wall, -/area/map_template/colony2/external) -"VF" = ( -/obj/machinery/light/spot{ - dir = 1 - }, -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 4 - }, -/obj/machinery/air_sensor{ - id_tag = "Halifax_out" - }, -/turf/simulated/floor/reinforced/airless, -/area/map_template/colony2/external) -"VL" = ( -/obj/machinery/access_button/airlock_exterior{ - frequency = 1380; - master_tag = "playablecolonymain2"; - pixel_y = 22 - }, -/obj/machinery/light/spot{ - dir = 1 - }, -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 1 - }, -/turf/simulated/floor/reinforced/airless, -/area/map_template/colony2/external) -"VM" = ( -/obj/machinery/atmospherics/pipe/simple/visible/fuel{ - dir = 10 - }, -/obj/effect/paint/ocean, -/turf/simulated/wall/r_wall, -/area/map_template/colony2/external) -"Wd" = ( -/obj/machinery/door/airlock/civilian, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/door/firedoor, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/techmaint, -/area/map_template/colony2/tcomms) -"Wi" = ( -/obj/effect/floor_decal/corner/paleblue/mono, -/obj/machinery/telecomms/server/map_preset/playablecolony2, -/turf/simulated/floor/tiled/dark/monotile, -/area/map_template/colony2/tcomms) -"Wk" = ( -/obj/effect/floor_decal/corner/paleblue/mono, -/obj/structure/largecrate/animal/goat, -/turf/simulated/floor/tiled/dark/monotile, -/area/map_template/colony2/storage) -"Wm" = ( -/obj/machinery/atmospherics/pipe/manifold4w/visible/fuel, -/obj/machinery/atmospherics/pipe/simple/visible/scrubbers, -/obj/effect/catwalk_plated/dark, -/turf/simulated/floor/airless, -/area/map_template/colony2/external) -"Wn" = ( -/obj/effect/catwalk_plated/dark, -/turf/simulated/floor/plating, -/area/map_template/colony2/engineering) -"Wo" = ( -/obj/machinery/atmospherics/pipe/simple/visible/supply, -/obj/machinery/meter, -/turf/simulated/floor/reinforced/airless, -/area/map_template/colony2/external) -"Wu" = ( -/obj/machinery/portable_atmospherics/hydroponics, -/obj/machinery/light{ - dir = 1 - }, -/obj/effect/floor_decal/corner/paleblue/mono, -/turf/simulated/floor/tiled/dark/monotile, -/area/map_template/colony2/commons) -"WM" = ( -/obj/machinery/atmospherics/valve{ - dir = 4 - }, -/turf/simulated/floor/reinforced/airless, -/area/map_template/colony2/external) -"Xc" = ( -/obj/structure/hygiene/toilet{ - dir = 4 - }, -/obj/machinery/light/small{ - dir = 8 - }, -/turf/simulated/floor/tiled/freezer, -/area/map_template/colony2/ship) -"Xf" = ( -/obj/effect/landmark/clear, -/obj/effect/landmark/scorcher, -/turf/template_noop, -/area/template_noop) -"Xi" = ( -/obj/effect/floor_decal/corner/paleblue/mono, -/obj/machinery/vending/hydronutrients, -/turf/simulated/floor/tiled/dark/monotile, -/area/map_template/colony2/commons) -"Xl" = ( -/obj/effect/floor_decal/industrial/hatch/yellow, -/obj/machinery/mineral/stacking_machine{ - input_turf = 2 - }, -/turf/simulated/floor/reinforced/airless, -/area/map_template/colony2/external) -"Xm" = ( -/obj/machinery/atmospherics/pipe/simple/visible/supply, -/obj/machinery/atmospherics/pipe/manifold4w/visible/fuel, -/obj/effect/catwalk_plated/dark, -/turf/simulated/floor/airless, -/area/map_template/colony2/external) -"Xt" = ( -/obj/machinery/atmospherics/unary/tank/carbon_dioxide{ - dir = 8; - start_pressure = 120 - }, -/obj/machinery/light/spot{ - dir = 4 - }, -/turf/simulated/floor/reinforced/airless, -/area/map_template/colony2/external) -"XB" = ( -/obj/machinery/door/blast/regular{ - dir = 2; - id_tag = "colony2atmos"; - name = "Atmospheric Pod Blast Shutter" - }, -/obj/effect/floor_decal/industrial/hatch, -/turf/simulated/floor/reinforced/airless, -/area/map_template/colony2/external) -"XO" = ( -/obj/machinery/light/spot{ - dir = 1 - }, -/turf/simulated/floor/reinforced, -/area/map_template/colony2/external) -"XU" = ( -/obj/machinery/atmospherics/unary/tank/nitrogen{ - dir = 8 - }, -/turf/simulated/floor/reinforced/airless, -/area/map_template/colony2/external) -"XX" = ( -/obj/effect/floor_decal/corner/paleblue{ - dir = 6 - }, -/turf/simulated/floor/tiled/dark, -/area/map_template/colony2/Hallway) -"Yv" = ( -/obj/machinery/atmospherics/pipe/simple/visible/red, -/obj/effect/catwalk_plated/dark, -/obj/machinery/meter, -/turf/simulated/floor/plating, -/area/map_template/colony2/engineering) -"YI" = ( -/obj/machinery/mining/drill, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/light/spot{ - dir = 8 - }, -/turf/simulated/floor/reinforced/airless, -/area/map_template/colony2/external) -"YQ" = ( -/obj/machinery/light{ - dir = 1 - }, -/obj/effect/floor_decal/corner/paleblue/mono, -/obj/machinery/portable_atmospherics/powered/pump/filled, -/turf/simulated/floor/tiled/dark/monotile, -/area/map_template/colony2/atmospherics) -"YV" = ( -/obj/machinery/meter, -/obj/machinery/door/airlock/external{ - frequency = 1380; - id_tag = "playablecolonymain2_exterior_door"; - locked = 1 - }, -/obj/machinery/atmospherics/pipe/manifold/visible{ - dir = 8 - }, -/turf/simulated/floor/reinforced, -/area/map_template/colony2/external) -"Za" = ( -/obj/effect/floor_decal/corner_steel_grid/diagonal, -/turf/simulated/floor/tiled/techmaint, -/area/map_template/colony2/ship) -"Zo" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/universal, -/obj/machinery/meter, -/obj/effect/catwalk_plated/dark, -/turf/simulated/floor/plating, -/area/map_template/colony2/engineering) -"ZJ" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/effect/floor_decal/corner_steel_grid/diagonal{ - dir = 4 - }, -/obj/machinery/alarm{ - dir = 1; - locked = 0; - pixel_y = -22; - req_access = newlist() - }, -/turf/simulated/floor/tiled/techmaint, -/area/map_template/colony2/ship) -"ZY" = ( -/obj/effect/floor_decal/corner/paleblue/mono, -/obj/structure/table/steel_reinforced, -/obj/machinery/reagentgrinder/juicer, -/turf/simulated/floor/tiled/dark/monotile, -/area/map_template/colony2/commons) - -(1,1,1) = {" -aa -Og -PU -PU -PU -PU -PU -PU -PU -qf -bE -bE -qf -vn -vn -jq -jq -vn -vn -Og -Ls -Ls -Ls -Ls -Ls -Ls -Ls -Og -Ls -Ls -Ls -Ls -Ls -Ls -Og -Ls -Ls -Ls -Ls -Ls -Ls -"} -(2,1,1) = {" -Og -Og -PU -eg -VA -UN -xB -jo -Xc -Pa -DQ -Oc -Dv -lU -dn -Nl -lZ -Fn -UE -Vc -Ls -Dw -Dw -Dw -Dw -Dw -Ls -an -Ls -UW -UW -UW -UW -Ls -aB -Ls -UW -UW -UW -UW -Ls -"} -(3,1,1) = {" -Og -Og -PU -eR -Qq -aZ -yO -vf -Qw -Pa -Wk -gi -DD -lU -YQ -KU -sZ -PF -cD -SO -Sp -HK -Xm -HU -HU -Hq -Sp -Wo -EP -DJ -DJ -DJ -DJ -KP -uq -KP -DJ -DJ -DJ -RE -Ls -"} -(4,1,1) = {" -Og -Og -PU -Bk -iT -UN -UN -UN -UN -Pa -xx -BU -DR -lU -SQ -Hw -UM -QH -vn -an -Ls -HD -HD -Xt -HD -WM -Ls -aB -Ls -Jg -Jg -Jg -Jg -Ls -an -Ls -Jg -Jg -Jg -Jg -Ls -"} -(5,1,1) = {" -Og -Og -PU -fF -wx -UN -IN -eY -Wi -Pa -Af -LP -En -lU -Kg -dY -gD -QK -vn -Og -Ls -Ls -Ls -Ls -Ls -VC -Ls -Og -Ls -Ls -Ls -Ls -Ls -Ls -Og -Ls -Ls -Ls -Ls -Ls -Ls -"} -(6,1,1) = {" -Og -Og -PU -eg -kb -UN -Mb -ID -or -Pa -eA -hT -ED -lU -fu -Jv -oU -QW -vn -Og -Og -Og -Og -Og -kf -zd -BZ -Og -Og -Og -Og -Og -Og -Og -Og -Og -Xf -Xf -Og -Og -Og -"} -(7,1,1) = {" -PU -bh -PU -UN -so -UN -Qt -Oy -oC -Pa -OB -cQ -Fm -lU -wm -iv -Ci -dD -vn -Og -Og -Og -Ls -Ls -Ls -Jq -Ls -XO -Ls -Ls -Ls -Ls -Ls -Ls -Xf -Xf -Xf -Xf -Xf -Og -Og -"} -(8,1,1) = {" -PU -de -Dd -Mh -ib -UN -qj -Wd -qj -Pa -Pa -Cr -Pa -lU -fs -OK -vn -vn -Ls -Ls -VF -aB -Ls -YI -BR -Is -Ls -Rp -Ls -tZ -Mv -rO -lm -Ak -Xf -Xf -Xf -Xf -Xf -Xf -Og -"} -(9,1,1) = {" -aL -rm -Za -aK -ro -qb -HS -AU -HS -tT -HS -AS -bV -rp -yu -nU -ke -QY -Rw -YV -ni -aB -XB -aB -aB -vj -aB -aB -aB -DH -Pp -Kr -Tw -Ak -Xf -Xf -Xf -Xf -Xf -Xf -Og -"} -(10,1,1) = {" -aL -dh -Ul -pe -yJ -iq -XX -XX -aN -uT -XX -Iz -Rz -tb -wp -er -Hb -Vt -SR -vh -ni -aB -XB -aB -aB -NX -jy -Qi -Qi -UX -RL -UX -VD -Ak -Xf -Xf -Xf -Xf -Xf -Xf -Og -"} -(11,1,1) = {" -PU -dj -lW -ci -ZJ -UN -xv -io -xv -xv -xv -CJ -xv -ob -ob -OT -AE -AE -Ls -Ls -VL -aB -Ls -PS -BR -Is -Ls -Rp -Ls -Et -SJ -HQ -VM -Ak -Xf -Xf -Xf -Xf -Xf -Xf -Og -"} -(12,1,1) = {" -PU -bh -PU -UN -so -UN -cz -is -SP -xv -tu -Eo -Fq -ob -Ch -Vb -OZ -qo -AE -Og -Og -Og -Ls -Ls -Ls -Jq -Ls -XO -Ls -Ls -Ls -Ls -Ls -Ls -Xf -Xf -Xf -Xf -Xf -Og -Og -"} -(13,1,1) = {" -Og -Og -PU -fQ -dM -UN -Wu -Vv -qI -xv -vO -zv -GS -ob -DG -hj -sG -Rs -AE -Og -Og -Og -Og -Og -KV -zd -BZ -Og -Og -Og -Og -Og -Og -Og -Og -kf -BZ -BZ -BZ -BZ -kf -"} -(14,1,1) = {" -Og -Og -PU -fU -gm -UN -Xi -Vv -gb -xv -Ap -Vv -Jr -ob -lj -Tr -Wn -Sl -AE -Og -Ls -Ls -Ls -Ls -Ls -Jq -Ls -Og -Ls -Ls -Ls -Ls -Ls -Ls -Og -Ls -Rp -Rp -Rp -Gq -Ls -"} -(15,1,1) = {" -Og -Og -PU -ge -Nb -UN -oQ -Vv -ZY -cX -AK -Vv -JN -ob -Oz -Tr -Wn -SA -AE -an -Ls -Dw -Dw -cw -Dw -WM -Ls -aB -Ls -kn -kn -kn -kn -Ls -an -Ls -hN -aB -Gt -ux -Ls -"} -(16,1,1) = {" -Og -Og -PU -gr -CQ -UN -eJ -Vv -Vv -Vv -Vv -Vv -Kz -ob -oK -ab -Zo -BI -ST -nE -Tu -Wm -RB -RB -RB -SU -sO -rr -EP -bt -bt -bt -zZ -Ls -aB -Ls -gV -Cu -zk -Gh -Ls -"} -(17,1,1) = {" -Og -Og -PU -gw -EN -UN -gj -FI -Bc -MN -cq -fT -Nf -ob -Nm -Bf -Yv -CA -KA -Vp -Ls -HD -HD -HD -HD -HD -Ls -an -Ls -XU -XU -XU -XU -Ls -aB -Ls -Xl -sK -rM -rL -Ls -"} -(18,1,1) = {" -Og -Og -PU -PU -PU -PU -cr -cr -cr -cr -Mc -Mc -cr -AE -AE -fp -fp -AE -AE -Og -Ls -Ls -Ls -Ls -Ls -Ls -Ls -Og -Ls -Ls -Ls -Ls -Ls -Ls -Og -Ls -Ls -Ls -Ls -Ls -Ls -"} diff --git a/maps/random_ruins/exoplanet_ruins/playablecolony2/playablecolony2.dm b/maps/random_ruins/exoplanet_ruins/playablecolony2/playablecolony2.dm deleted file mode 100644 index 2b4d980be1b1e..0000000000000 --- a/maps/random_ruins/exoplanet_ruins/playablecolony2/playablecolony2.dm +++ /dev/null @@ -1,76 +0,0 @@ -#include "playablecolony2_radio.dm" - -/datum/map_template/ruin/exoplanet/playablecolony2 - name = "Landed Colony Ship" - id = "playablecolony2" - description = "a recently landed colony ship" - suffixes = list("playablecolony2/colony2.dmm") - spawn_cost = 2 - player_cost = 4 - template_flags = TEMPLATE_FLAG_CLEAR_CONTENTS | TEMPLATE_FLAG_NO_RUINS | TEMPLATE_FLAG_NO_RADS - ruin_tags = RUIN_HUMAN|RUIN_HABITAT - ban_ruins = list(/datum/map_template/ruin/exoplanet/playablecolony) - apc_test_exempt_areas = list( - /area/map_template/colony2/external = NO_SCRUBBER|NO_VENT - ) - spawn_weight = 0.4 - -/decl/submap_archetype/playablecolony2 - descriptor = "landed colony ship" - crew_jobs = list(/datum/job/submap/colonist2) - -/datum/job/submap/colonist2 - title = "Ship Colonist" - supervisors = "the trust of your fellow Colonists" - info = "You are a Colonist, living on the rim of explored, let alone inhabited, space in a recently landed colony ship." - total_positions = 3 - outfit_type = /decl/hierarchy/outfit/job/colonist2 - -/decl/hierarchy/outfit/job/colonist2 - name = OUTFIT_JOB_NAME("Colonist2") - id_types = list() - pda_type = null - l_ear = /obj/item/device/radio/headset/map_preset/playablecolony2 - -/obj/effect/submap_landmark/spawnpoint/colonist_spawn2 - name = "Colonist" - -/obj/effect/submap_landmark/joinable_submap/colony2 - name = "Landed Colony Ship" - archetype = /decl/submap_archetype/playablecolony - -// Areas // -/area/map_template/colony2 - icon = 'maps/random_ruins/exoplanet_ruins/playablecolony2/colony2.dmi' - -/area/map_template/colony2/Hallway - name = "\improper Colony Hallway" - icon_state = "halls" - -/area/map_template/colony2/engineering - name = "\improper Colony Engineering" - icon_state = "processing" - -/area/map_template/colony2/atmospherics - name = "\improper Colony Atmospherics" - icon_state = "shipping" - -/area/map_template/colony2/commons - name = "\improper Colony Common Area" - icon_state = "A" - -/area/map_template/colony2/storage - name = "\improper Colony Storage" - icon_state = "B" - -/area/map_template/colony2/external - name = "\improper Colony External Infrastructure" - icon_state = "A" - -/area/map_template/colony2/ship - name = "\improper ICV Halifax Proffer" - icon_state = "B" - -/area/map_template/colony2/tcomms - name = "\improper Colony Telecommunications" - icon_state = "B2" diff --git a/maps/random_ruins/exoplanet_ruins/playablecolony2/playablecolony2_radio.dm b/maps/random_ruins/exoplanet_ruins/playablecolony2/playablecolony2_radio.dm deleted file mode 100644 index 6d0ff3674dad0..0000000000000 --- a/maps/random_ruins/exoplanet_ruins/playablecolony2/playablecolony2_radio.dm +++ /dev/null @@ -1,31 +0,0 @@ -/obj/machinery/telecomms/hub/map_preset/playablecolony2 - preset_name = "Colony" - -/obj/machinery/telecomms/receiver/map_preset/playablecolony2 - preset_name = "Colony" - -/obj/machinery/telecomms/bus/map_preset/playablecolony2 - preset_name = "Colony" - -/obj/machinery/telecomms/processor/map_preset/playablecolony2 - preset_name = "Colony" - -/obj/machinery/telecomms/server/map_preset/playablecolony2 - preset_name = "Colony" - preset_color = COMMS_COLOR_COLONY - -/obj/machinery/telecomms/broadcaster/map_preset/playablecolony2 - preset_name = "Colony" - -/obj/item/device/radio/map_preset/playablecolony2 - preset_name = "Colony" - -/obj/item/device/radio/intercom/map_preset/playablecolony2 - preset_name = "Colony" - -/obj/item/device/encryptionkey/map_preset/playablecolony2 - preset_name = "Colony" - -/obj/item/device/radio/headset/map_preset/playablecolony2 - preset_name = "Colony" - encryption_key = /obj/item/device/encryptionkey/map_preset/playablecolony2 diff --git a/maps/random_ruins/exoplanet_ruins/radshrine/radshrine.dm b/maps/random_ruins/exoplanet_ruins/radshrine/radshrine.dm deleted file mode 100644 index 214f99adb9114..0000000000000 --- a/maps/random_ruins/exoplanet_ruins/radshrine/radshrine.dm +++ /dev/null @@ -1,8 +0,0 @@ -/datum/map_template/ruin/exoplanet/radshrine - name = "radshrine" - id = "radshrine" - description = "A small radioactive shrine dedicated to an anomaly." - suffixes = list("radshrine/radshrine.dmm") - spawn_cost = 1 - template_flags = TEMPLATE_FLAG_CLEAR_CONTENTS|TEMPLATE_FLAG_NO_RUINS - ruin_tags = RUIN_HUMAN|RUIN_HABITAT \ No newline at end of file diff --git a/maps/random_ruins/exoplanet_ruins/radshrine/radshrine.dmm b/maps/random_ruins/exoplanet_ruins/radshrine/radshrine.dmm deleted file mode 100644 index 8f4e8f68d6216..0000000000000 --- a/maps/random_ruins/exoplanet_ruins/radshrine/radshrine.dmm +++ /dev/null @@ -1,94 +0,0 @@ -//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE -"b" = ( -/obj/machinery/artifact, -/turf/simulated/floor/fixed/alium, -/area/template_noop) -"d" = ( -/turf/simulated/wall/uranium, -/area/template_noop) -"o" = ( -/obj/effect/decal/cleanable/cobweb, -/obj/item/remains/xeno, -/turf/simulated/floor/fixed/alium, -/area/template_noop) -"y" = ( -/turf/simulated/floor/exoplanet/water/shallow, -/area/template_noop) -"E" = ( -/obj/item/remains/xeno, -/turf/simulated/floor/fixed/alium, -/area/template_noop) -"G" = ( -/obj/machinery/door/unpowered/simple/uranium, -/turf/simulated/floor/fixed/alium, -/area/template_noop) -"U" = ( -/turf/simulated/wall/alium, -/area/template_noop) -"V" = ( -/turf/simulated/floor/fixed/alium, -/area/template_noop) - -(1,1,1) = {" -d -U -U -G -U -U -d -"} -(2,1,1) = {" -U -o -V -V -V -V -U -"} -(3,1,1) = {" -U -V -y -y -y -V -U -"} -(4,1,1) = {" -G -V -y -b -y -V -G -"} -(5,1,1) = {" -U -V -y -y -y -V -U -"} -(6,1,1) = {" -U -V -V -V -E -V -U -"} -(7,1,1) = {" -d -U -U -G -U -U -d -"} diff --git a/maps/random_ruins/exoplanet_ruins/spider_nest/spider_nest.dm b/maps/random_ruins/exoplanet_ruins/spider_nest/spider_nest.dm deleted file mode 100644 index 5c2e02b86c058..0000000000000 --- a/maps/random_ruins/exoplanet_ruins/spider_nest/spider_nest.dm +++ /dev/null @@ -1,8 +0,0 @@ -/datum/map_template/ruin/exoplanet/spider_nest - name = "spider nest" - id = "spider_nest" - description = "A small buidling with a spider infestation." - suffixes = list("spider_nest/spider_nest.dmm") - spawn_cost = 1 - template_flags = TEMPLATE_FLAG_CLEAR_CONTENTS|TEMPLATE_FLAG_NO_RUINS - ruin_tags = RUIN_HUMAN \ No newline at end of file diff --git a/maps/random_ruins/exoplanet_ruins/spider_nest/spider_nest.dmm b/maps/random_ruins/exoplanet_ruins/spider_nest/spider_nest.dmm deleted file mode 100644 index e9e7a88ec10ca..0000000000000 --- a/maps/random_ruins/exoplanet_ruins/spider_nest/spider_nest.dmm +++ /dev/null @@ -1,364 +0,0 @@ -//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE -"a" = ( -/turf/template_noop, -/area/template_noop) -"b" = ( -/turf/simulated/wall/r_wall/prepainted{ - paint_color = "#5b8693" - }, -/area/template_noop) -"c" = ( -/obj/structure/closet/walllocker/emerglocker/east, -/obj/effect/decal/cleanable/blood/splatter, -/turf/simulated/floor/lino, -/area/template_noop) -"d" = ( -/obj/machinery/door/airlock/external, -/turf/simulated/floor/tiled/techfloor, -/area/template_noop) -"e" = ( -/obj/effect/decal/cleanable/blood, -/turf/simulated/floor/lino, -/area/template_noop) -"f" = ( -/obj/effect/wallframe_spawn/reinforced, -/obj/structure/barricade, -/turf/simulated/floor/plating, -/area/template_noop) -"h" = ( -/obj/structure/grille, -/turf/simulated/floor/plating, -/area/template_noop) -"i" = ( -/obj/structure/table/standard{ - flipped = 1 - }, -/obj/effect/spider/cocoon, -/obj/item/net_shell, -/obj/random/energy, -/obj/random/trash, -/turf/simulated/floor/lino, -/area/template_noop) -"j" = ( -/obj/structure/table/standard{ - flipped = 1 - }, -/obj/item/pen, -/obj/random/junk, -/obj/effect/spider/stickyweb, -/turf/simulated/floor/plating, -/area/template_noop) -"k" = ( -/obj/structure/filingcabinet, -/obj/effect/decal/cleanable/cobweb, -/turf/simulated/floor/lino, -/area/template_noop) -"l" = ( -/obj/structure/bed/chair/office/comfy/blue, -/obj/item/pen, -/obj/effect/spider/stickyweb, -/obj/effect/decal/cleanable/blood/drip, -/turf/simulated/floor/plating, -/area/template_noop) -"m" = ( -/obj/random/trash, -/turf/template_noop, -/area/template_noop) -"n" = ( -/obj/effect/spider/stickyweb, -/obj/effect/decal/cleanable/blood/drip, -/obj/effect/decal/cleanable/blood/drip, -/turf/simulated/floor/lino, -/area/template_noop) -"o" = ( -/obj/structure/table/standard{ - flipped = 1 - }, -/obj/random/junk, -/obj/random/loot, -/obj/item/paper, -/turf/simulated/floor/lino, -/area/template_noop) -"p" = ( -/obj/effect/landmark/corpse/doctor, -/obj/effect/decal/cleanable/blood, -/obj/item/material/shard, -/obj/effect/decal/cleanable/blood/drip, -/obj/effect/decal/cleanable/vomit, -/turf/simulated/floor/tiled/techfloor, -/area/template_noop) -"q" = ( -/obj/item/melee/telebaton, -/obj/item/seeds/random, -/obj/effect/decal/cleanable/spiderling_remains, -/obj/structure/fireaxecabinet{ - pixel_x = -32 - }, -/turf/simulated/floor/lino, -/area/template_noop) -"r" = ( -/obj/item/paper_bin, -/obj/random/trash, -/obj/effect/spider/stickyweb, -/turf/simulated/floor/lino, -/area/template_noop) -"s" = ( -/obj/machinery/seed_storage/random, -/turf/simulated/floor/lino, -/area/template_noop) -"t" = ( -/obj/item/paper, -/turf/simulated/floor/lino, -/area/template_noop) -"u" = ( -/obj/effect/spider/stickyweb, -/obj/item/paper, -/turf/simulated/floor/lino, -/area/template_noop) -"v" = ( -/obj/random/junk, -/obj/effect/spider/stickyweb, -/obj/item/seeds/random, -/turf/simulated/floor/lino, -/area/template_noop) -"w" = ( -/obj/effect/decal/cleanable/spiderling_remains, -/obj/effect/decal/cleanable/blood, -/mob/living/simple_animal/hostile/giant_spider, -/turf/simulated/floor/lino, -/area/template_noop) -"x" = ( -/obj/structure/grille/broken, -/obj/effect/spider/stickyweb, -/obj/effect/decal/cleanable/blood/gibs/limb, -/obj/effect/decal/cleanable/blood/drip, -/mob/living/simple_animal/hostile/giant_spider/nurse, -/turf/simulated/floor/plating, -/area/template_noop) -"y" = ( -/obj/random/trash, -/obj/effect/spider/stickyweb, -/turf/simulated/floor/lino, -/area/template_noop) -"z" = ( -/obj/effect/decal/cleanable/blood, -/obj/item/paper, -/obj/random/loot, -/turf/simulated/floor/lino, -/area/template_noop) -"A" = ( -/obj/random/loot, -/obj/structure/sign/xenobio_1{ - pixel_y = 32 - }, -/turf/template_noop, -/area/template_noop) -"B" = ( -/obj/random/smokes, -/obj/random/voidhelmet, -/turf/simulated/floor/lino, -/area/template_noop) -"C" = ( -/obj/random/loot, -/mob/living/simple_animal/hostile/giant_spider/hunter, -/turf/simulated/floor/lino, -/area/template_noop) -"D" = ( -/obj/structure/bookcase/manuals/research_and_development, -/obj/effect/decal/cleanable/cobweb2, -/turf/simulated/floor/lino, -/area/template_noop) -"E" = ( -/obj/effect/spider/stickyweb, -/obj/effect/spider/cocoon, -/obj/random/loot, -/turf/simulated/floor/reinforced, -/area/template_noop) -"F" = ( -/obj/structure/bed/chair/office/comfy/purple, -/obj/effect/decal/cleanable/blood/drip, -/obj/effect/decal/cleanable/filth, -/turf/simulated/floor/lino, -/area/template_noop) -"G" = ( -/obj/structure/grille/broken, -/obj/effect/spider/stickyweb, -/obj/effect/decal/cleanable/blood/drip, -/turf/simulated/floor/plating, -/area/template_noop) -"H" = ( -/obj/structure/grille/broken, -/obj/random/trash, -/obj/effect/decal/cleanable/blood, -/obj/random/loot, -/turf/simulated/floor/plating, -/area/template_noop) -"I" = ( -/obj/item/paper, -/obj/effect/decal/cleanable/blood/drip, -/mob/living/simple_animal/hostile/giant_spider, -/turf/simulated/floor/lino, -/area/template_noop) -"J" = ( -/obj/effect/spider/stickyweb, -/obj/machinery/door/airlock/external, -/turf/simulated/floor/tiled/techfloor, -/area/template_noop) -"K" = ( -/obj/random/trash, -/obj/effect/decal/cleanable/blood/gibs/body, -/turf/simulated/floor/reinforced, -/area/template_noop) -"L" = ( -/obj/random/loot, -/obj/effect/spider/stickyweb, -/obj/effect/decal/cleanable/blood/gibs/limb, -/obj/effect/decal/cleanable/blood/drip, -/turf/simulated/floor/reinforced, -/area/template_noop) -"M" = ( -/obj/effect/decal/cleanable/blood, -/turf/template_noop, -/area/template_noop) -"N" = ( -/obj/effect/spider/stickyweb, -/obj/effect/decal/cleanable/blood/drip, -/turf/simulated/floor/lino, -/area/template_noop) -"O" = ( -/obj/effect/decal/cleanable/spiderling_remains, -/turf/template_noop, -/area/template_noop) -"P" = ( -/obj/effect/decal/cleanable/blood/drip, -/turf/template_noop, -/area/template_noop) -"R" = ( -/obj/structure/sign/warning/biohazard, -/turf/simulated/wall/r_wall/prepainted{ - paint_color = "#5b8693" - }, -/area/template_noop) -"W" = ( -/obj/effect/spider/stickyweb, -/obj/random/voidsuit, -/obj/random/loot, -/obj/effect/decal/cleanable/vomit, -/obj/structure/extinguisher_cabinet{ - pixel_x = -32 - }, -/turf/simulated/floor/lino, -/area/template_noop) -"X" = ( -/obj/structure/filingcabinet, -/turf/simulated/floor/lino, -/area/template_noop) -"Y" = ( -/obj/effect/spider/stickyweb, -/obj/effect/decal/cleanable/blood/drip, -/turf/simulated/floor/reinforced, -/area/template_noop) -"Z" = ( -/obj/effect/spider/stickyweb, -/turf/simulated/floor/plating, -/area/template_noop) - -(1,1,1) = {" -a -b -b -b -b -b -b -b -m -"} -(2,1,1) = {" -b -b -s -q -W -h -K -b -a -"} -(3,1,1) = {" -b -k -t -v -w -x -L -b -a -"} -(4,1,1) = {" -f -i -l -B -y -b -b -R -M -"} -(5,1,1) = {" -f -o -e -z -N -d -p -J -P -"} -(6,1,1) = {" -f -j -u -n -F -b -b -b -A -"} -(7,1,1) = {" -b -X -r -Z -I -G -Y -b -O -"} -(8,1,1) = {" -b -b -D -C -c -H -E -b -m -"} -(9,1,1) = {" -m -b -b -b -b -b -b -b -a -"} diff --git a/maps/random_ruins/exoplanet_ruins/tar_anomaly/tar_anomaly.dm b/maps/random_ruins/exoplanet_ruins/tar_anomaly/tar_anomaly.dm deleted file mode 100644 index 18aa737a82514..0000000000000 --- a/maps/random_ruins/exoplanet_ruins/tar_anomaly/tar_anomaly.dm +++ /dev/null @@ -1,8 +0,0 @@ -/datum/map_template/ruin/exoplanet/tar_anomaly - name = "tar anomaly" - id = "tar_anomaly" - description = "An anomaly in the center of a ring of tar." - suffixes = list("tar_anomaly/tar_anomaly.dmm") - spawn_cost = 1 - template_flags = TEMPLATE_FLAG_CLEAR_CONTENTS|TEMPLATE_FLAG_NO_RUINS - ruin_tags = RUIN_ALIEN \ No newline at end of file diff --git a/maps/random_ruins/exoplanet_ruins/tar_anomaly/tar_anomaly.dmm b/maps/random_ruins/exoplanet_ruins/tar_anomaly/tar_anomaly.dmm deleted file mode 100644 index aa27dace1f753..0000000000000 --- a/maps/random_ruins/exoplanet_ruins/tar_anomaly/tar_anomaly.dmm +++ /dev/null @@ -1,168 +0,0 @@ -//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE -"a" = ( -/turf/simulated/floor/exoplanet/water/shallow/tar, -/area/template_noop) -"b" = ( -/turf/template_noop, -/area/template_noop) -"c" = ( -/obj/structure/flora/ausbushes/lavendergrass, -/turf/template_noop, -/area/template_noop) -"d" = ( -/obj/machinery/artifact, -/obj/effect/landmark/clear, -/turf/simulated/floor/exoplanet/shrouded, -/area/template_noop) -"e" = ( -/obj/structure/flora/ausbushes/fullgrass, -/turf/template_noop, -/area/template_noop) -"f" = ( -/obj/structure/monolith, -/turf/simulated/floor/exoplanet/water/shallow/tar, -/area/template_noop) - -(1,1,1) = {" -a -b -b -b -b -b -a -a -a -e -b -"} -(2,1,1) = {" -b -b -c -a -a -f -a -a -a -a -b -"} -(3,1,1) = {" -b -b -a -a -a -a -a -a -a -a -a -"} -(4,1,1) = {" -b -a -a -a -a -a -a -a -a -a -a -"} -(5,1,1) = {" -c -a -a -a -a -a -a -a -a -a -b -"} -(6,1,1) = {" -a -f -a -a -a -d -a -a -a -f -b -"} -(7,1,1) = {" -a -a -a -a -a -a -a -a -a -a -c -"} -(8,1,1) = {" -a -a -a -a -a -a -a -a -a -a -b -"} -(9,1,1) = {" -b -a -a -a -a -a -a -a -a -c -b -"} -(10,1,1) = {" -b -b -c -a -a -f -a -a -b -a -b -"} -(11,1,1) = {" -b -a -b -b -b -a -b -b -b -b -b -"} diff --git a/maps/random_ruins/exoplanet_ruins/trash_heap/trash_heap.dm b/maps/random_ruins/exoplanet_ruins/trash_heap/trash_heap.dm deleted file mode 100644 index f858a19f0cea7..0000000000000 --- a/maps/random_ruins/exoplanet_ruins/trash_heap/trash_heap.dm +++ /dev/null @@ -1,8 +0,0 @@ -/datum/map_template/ruin/exoplanet/trash_heap - name = "trash heap" - id = "trash_heap" - description = "A pile of trash and a few goodies." - suffixes = list("trash_heap/trash_heap.dmm") - spawn_cost = 0.5 - template_flags = TEMPLATE_FLAG_CLEAR_CONTENTS|TEMPLATE_FLAG_NO_RUINS - ruin_tags = RUIN_HUMAN \ No newline at end of file diff --git a/maps/random_ruins/exoplanet_ruins/trash_heap/trash_heap.dmm b/maps/random_ruins/exoplanet_ruins/trash_heap/trash_heap.dmm deleted file mode 100644 index 909c7cf2ebf26..0000000000000 --- a/maps/random_ruins/exoplanet_ruins/trash_heap/trash_heap.dmm +++ /dev/null @@ -1,229 +0,0 @@ -//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE -"a" = ( -/turf/template_noop, -/area/template_noop) -"b" = ( -/obj/item/trash/cigbutt/jerichos, -/turf/template_noop, -/area/template_noop) -"c" = ( -/obj/random/junk, -/obj/random/junk, -/turf/template_noop, -/area/template_noop) -"j" = ( -/obj/random/junk, -/turf/template_noop, -/area/template_noop) -"n" = ( -/obj/random/junk, -/obj/random/junk, -/obj/random/junk, -/obj/random/junk, -/turf/template_noop, -/area/template_noop) -"o" = ( -/obj/random/handgun, -/obj/random/junk, -/obj/random/junk, -/obj/random/junk, -/obj/random/junk, -/obj/random/junk, -/turf/template_noop, -/area/template_noop) -"u" = ( -/obj/random/tech_supply, -/obj/random/junk, -/turf/template_noop, -/area/template_noop) -"x" = ( -/obj/random/junk, -/obj/random/junk, -/obj/random/junk, -/obj/random/junk, -/obj/random/junk, -/obj/random/junk, -/turf/template_noop, -/area/template_noop) -"y" = ( -/obj/random/shoes, -/obj/random/junk, -/obj/random/mre, -/turf/template_noop, -/area/template_noop) -"A" = ( -/obj/random/gloves, -/turf/template_noop, -/area/template_noop) -"D" = ( -/obj/random/junk, -/obj/random/hat, -/turf/template_noop, -/area/template_noop) -"E" = ( -/obj/random/tool, -/obj/random/junk, -/turf/template_noop, -/area/template_noop) -"G" = ( -/obj/random/drinkbottle, -/obj/random/junk, -/obj/random/junk, -/obj/random/junk, -/obj/random/junk, -/turf/template_noop, -/area/template_noop) -"H" = ( -/obj/structure/closet/crate/trashcart, -/turf/template_noop, -/area/template_noop) -"J" = ( -/obj/item/trash/cigbutt/jerichos, -/obj/item/trash/cigbutt/jerichos, -/turf/template_noop, -/area/template_noop) -"Q" = ( -/obj/random/junk, -/obj/random/junk, -/obj/random/junk, -/turf/template_noop, -/area/template_noop) -"S" = ( -/obj/random/smokes, -/obj/random/junk, -/turf/template_noop, -/area/template_noop) -"U" = ( -/obj/random/junk, -/obj/random/junk, -/obj/random/junk, -/obj/random/junk, -/obj/random/medical/lite, -/turf/template_noop, -/area/template_noop) -"X" = ( -/obj/random/junk, -/obj/random/mre, -/turf/template_noop, -/area/template_noop) - -(1,1,1) = {" -a -a -a -a -a -j -a -a -a -a -"} -(2,1,1) = {" -j -a -j -a -a -a -j -A -j -a -"} -(3,1,1) = {" -a -j -D -j -j -j -j -j -a -a -"} -(4,1,1) = {" -a -u -j -G -n -x -n -X -a -j -"} -(5,1,1) = {" -a -a -j -Q -o -U -n -c -a -a -"} -(6,1,1) = {" -a -a -j -Q -n -Q -c -c -j -a -"} -(7,1,1) = {" -a -a -j -c -n -c -Q -S -j -a -"} -(8,1,1) = {" -a -a -y -j -a -c -j -j -a -b -"} -(9,1,1) = {" -a -a -a -a -j -a -E -a -b -J -"} -(10,1,1) = {" -j -a -a -j -a -a -a -a -b -H -"} diff --git a/maps/random_ruins/space_ruins/multi_zas_test.dmm b/maps/random_ruins/space_ruins/multi_zas_test.dmm deleted file mode 100644 index 660bcbbbd6287..0000000000000 --- a/maps/random_ruins/space_ruins/multi_zas_test.dmm +++ /dev/null @@ -1,131 +0,0 @@ -//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE -"a" = ( -/turf/simulated/wall/diamond, -/area/template_noop) -"b" = ( -/turf/simulated/floor, -/area/template_noop) -"c" = ( -/mob/living/simple_animal/passive/corgi, -/turf/simulated/floor, -/area/template_noop) -"d" = ( -/turf/simulated/open, -/area/template_noop) -"e" = ( -/turf/unsimulated/floor/shuttle_ceiling, -/area/template_noop) -"f" = ( -/obj/effect/landmark/map_data{ - height = 3 - }, -/turf/unsimulated/floor/shuttle_ceiling, -/area/template_noop) - -(1,1,1) = {" -a -a -a -a -a -"} -(2,1,1) = {" -a -b -b -b -a -"} -(3,1,1) = {" -a -b -c -b -a -"} -(4,1,1) = {" -a -b -b -b -a -"} -(5,1,1) = {" -a -a -a -a -a -"} - -(1,1,2) = {" -a -a -a -a -a -"} -(2,1,2) = {" -a -d -d -d -a -"} -(3,1,2) = {" -a -d -d -d -a -"} -(4,1,2) = {" -a -d -d -d -a -"} -(5,1,2) = {" -a -a -a -a -a -"} - -(1,1,3) = {" -e -e -e -e -f -"} -(2,1,3) = {" -e -e -e -e -e -"} -(3,1,3) = {" -e -e -e -e -e -"} -(4,1,3) = {" -e -e -e -e -e -"} -(5,1,3) = {" -e -e -e -e -e -"} diff --git a/maps/random_ruins/space_ruins/space_ruins.dm b/maps/random_ruins/space_ruins/space_ruins.dm deleted file mode 100644 index ab62ef07e90cd..0000000000000 --- a/maps/random_ruins/space_ruins/space_ruins.dm +++ /dev/null @@ -1,12 +0,0 @@ -// Hey! Listen! Update \config\space_ruin_blacklist.txt with your new ruins! - -/datum/map_template/ruin/space - prefix = "maps/random_ruins/space_ruins/" - spawn_cost = 1 - -/datum/map_template/ruin/space/multi_zas_test - name = "Multi-ZAS Test" - id = "multi_zas_test" - description = "if this has vacuum in it, that's not good!" - suffixes = list("multi_zas_test.dmm") - spawn_cost = 1 \ No newline at end of file diff --git a/maps/torch/datums/department_exploration.dm b/maps/torch/datums/department_exploration.dm deleted file mode 100644 index 656cd943fac1a..0000000000000 --- a/maps/torch/datums/department_exploration.dm +++ /dev/null @@ -1,63 +0,0 @@ -/datum/department/exploration - name = "Exploration Team" - flag = EXP - goals = list( - /datum/goal/department/planet_claim, - /datum/goal/department/plant_samples, - /datum/goal/department/fauna_samples - ) - max_goals = 3 - -/datum/goal/department/planet_claim - description = "Plant the SCG banner on the surface of an exoplanet." - -/datum/goal/department/planet_claim/check_success() - return GLOB.stat_flags_planted > 0 - -/datum/goal/department/plant_samples - var/seeds - -/datum/goal/department/plant_samples/New() - var/total_seeds = 0 - var/area/map = locate(/area/overmap) - for(var/obj/effect/overmap/visitable/sector/exoplanet/P in map) - total_seeds += P.seeds.len - if(total_seeds) - seeds = max(1, round(0.5 * total_seeds)) - ..() - -/datum/goal/department/plant_samples/is_valid() - return seeds > 0 - -/datum/goal/department/plant_samples/update_strings() - description = "Scan at least [seeds] different plant\s native to exoplanets." - -/datum/goal/department/plant_samples/get_summary_value() - return " ([GLOB.stat_flora_scanned] plant specie\s so far)" - -/datum/goal/department/plant_samples/check_success() - return GLOB.stat_flora_scanned >= seeds - -/datum/goal/department/fauna_samples - var/species - -/datum/goal/department/fauna_samples/New() - var/list/total_species = list() - var/area/map = locate(/area/overmap) - for(var/obj/effect/overmap/visitable/sector/exoplanet/P in map) - for(var/mob/living/simple_animal/A in P.animals) - total_species |= A.type - species = rand(length(total_species)) - ..() - -/datum/goal/department/fauna_samples/is_valid() - return species > 0 - -/datum/goal/department/fauna_samples/update_strings() - description = "Scan at least [species] different creature\s native to exoplanets." - -/datum/goal/department/fauna_samples/get_summary_value() - return " ([GLOB.stat_fauna_scanned.len] xenofauna specie\s so far)" - -/datum/goal/department/fauna_samples/check_success() - return GLOB.stat_fauna_scanned.len >= species diff --git a/maps/torch/datums/game_modes/torch_meteor.dm b/maps/torch/datums/game_modes/torch_meteor.dm deleted file mode 100644 index 26651ff44a7b4..0000000000000 --- a/maps/torch/datums/game_modes/torch_meteor.dm +++ /dev/null @@ -1,63 +0,0 @@ -//Torch override for it, auto-calls long-delayed jump automatically so round duration is hard capped. -/datum/game_mode/meteor - name = "Meteor" - round_description = "Suddenly the rocks, thousands of them!" - extended_round_description = "We are on an unavoidable collision course with an asteroid field. You have only a moment to prepare before you are barraged by dust and meteors. Emergency BS drive spoolup has been initiated, but you need to survive until it's done." - shuttle_delay = 5 //40ish minutes round - meteor_grace_period = 10 MINUTES - meteor_severity = 10 //Since Torch is pretty sturdy and time is of essence, jumpstart things a bit - escalation_probability = 70 - -/datum/game_mode/meteor/post_setup() - ..() - alert_title = "[GLOB.using_map.full_name] Short Range Sensors" - alert_text = "[GLOB.using_map.full_name] is on a collision course with an ultradense asteroid field. Estimated time until impact is: [meteor_grace_period / 1200] MINUTES. Emegency random jump procedure initiated." - start_text = "Asteroid field imminent. All hands brace for multiple impacts. May %DEITY_NAME% be with you." - - GLOB.using_map.shuttle_called_message = "Attention all hands: Emergency Bluespace Drive spool up initiated. It will be ready for jump in %ETA%." - GLOB.using_map.shuttle_docked_message = "Attention all hands: Bluespace Drive spooled up. Emergency bluespace jump in %ETD%." - GLOB.using_map.shuttle_leaving_dock = "Attention all hands: Emergency bluespace jump initiated, emerging in %ETA%." - -/datum/game_mode/meteor/on_meteor_warn() - ..() - var/datum/evacuation_option/meteor_bluespace_jump/auto_evac = new() - auto_evac.execute() - -/datum/game_mode/meteor/declare_completion() - var/eng_status = 0 - for(var/obj/machinery/atmospherics/unary/engine/E in SSmachines.machinery) - if((get_z(E) in GLOB.using_map.station_levels) && !(E.stat & BROKEN)) - eng_status++ - var/nav_status = FALSE - for(var/obj/machinery/computer/ship/helm/H in SSmachines.machinery) - if((get_z(H) in GLOB.using_map.station_levels) && !(H.stat & BROKEN)) - nav_status = TRUE - var/bsd_status = FALSE - var/area/A = locate(/area/engineering/bluespace) in world - if(A && A.powered(EQUIP)) //There's no actual machines to check - bsd_status = TRUE - - to_world("

              Damage report

              ") - if(eng_status) - to_world("At least [eng_status] thrusters remained operational.") - else - to_world("All propulsion was lost, leaving \the [GLOB.using_map.full_name] drifting.") - if(nav_status) - to_world("Navigation and helm remained operational.") - else - to_world("The navigation systems were lost on [GLOB.using_map.full_name].") - if(bsd_status) - to_world("Bluespace drive stayed powered.") - else - to_world("Bluespace drive lost power during the jump, causing dangerous anomalies in the local time-space.") - - -//Bluespace jump but ignoring cooldowns and done at roundstart basically -/datum/evacuation_option/meteor_bluespace_jump - option_text = "Initiate emergency bluespace jump" - option_desc = "initiate automated emergency bluespace jump" - -/datum/evacuation_option/meteor_bluespace_jump/execute(mob/user) - if (!evacuation_controller) - return - evacuation_controller.call_evacuation(user, 0, forced = TRUE) diff --git a/maps/torch/datums/game_modes/torch_revolution.dm b/maps/torch/datums/game_modes/torch_revolution.dm deleted file mode 100644 index 3101b487c7cd4..0000000000000 --- a/maps/torch/datums/game_modes/torch_revolution.dm +++ /dev/null @@ -1,44 +0,0 @@ -/datum/game_mode/revolution - name = "Mutiny" - round_description = "Morale is shattered, and a mutiny is brewing! Use the 'Check Round Info' verb for more information!" - extended_round_description = "Time in space, away from home and loved ones, takes its toll on even the most grizzled space travelers. As time goes on, some crew find themselves \ - stretched to their breaking points; friendly faces become harsh and hostile, and the most sensible of minds become filled with bitterness and petty ideas. \ - As their peers find themselves surrounded by ever-angrier forces, the situation on the Torch is rapidly reaching its brutal climax." - config_tag = "mutiny" - required_enemies = 4 - required_players = 10 - -/datum/antagonist/revolutionary - role_text = "Head Mutineer" - role_text_plural = "Mutineers" - - faction_welcome = "That's it; you're done taking this crap. Obey all instructions from the leaders of the mutiny, and ensure the mutiny succeeds." - welcome_text = "You've been out here for what feels like an eternity. The time spent in space has worn away at your conscience, and \ - you won't let yourself be canned up like a sardine for even one more jump. Take control of your situation and use the Torch for your own ends, or \ - even just to return home." - - victory_text = "The Torch has fallen to the mutiny, and its future is now in question." - loss_text = "The attempted mutiny has failed, but the crew questions what happens now." - - //Inround revs. - faction_role_text = "Mutineer" - faction_descriptor = "Mutiny" - - faction = "mutiny" - - -/datum/antagonist/loyalists - - - victory_text = "The Torch is free of the mutineers, although the cost has yet to be discovered in full." - loss_text = "The mutineers have won; the Torch will never be the same." - - -/datum/antagonist/loyalists/Initialize() - ..() - welcome_text = "The SEV Torch has been on this mission for some time, and there is still much to accomplish. \ - However, whispers abound about malcontents, saboteurs and mutineers - the very ship faces threats from within!\ - To protect your way of life, those who would change it must be pacified or eliminated, and those that remain \ - must know not to intrude on your status." - faction_welcome = "Defend your own authority and that of your leaders; eliminate any threats." - faction_descriptor = "[GLOB.using_map.company_name]" diff --git a/maps/torch/datums/game_modes/torch_siege.dm b/maps/torch/datums/game_modes/torch_siege.dm deleted file mode 100644 index 25311e29284c4..0000000000000 --- a/maps/torch/datums/game_modes/torch_siege.dm +++ /dev/null @@ -1,4 +0,0 @@ -/datum/game_mode/siege - name = "Mercenary & Mutiny" - round_description = "Getting stuck between a rock and a hard place, maybe the nice visitors can help with your internal security problem?" - extended_round_description = "GENERAL QUARTERS! OH GOD WE GAVE THE MUTINEERS GUNS!" \ No newline at end of file diff --git a/maps/torch/datums/game_modes/torch_traitor.dm b/maps/torch/datums/game_modes/torch_traitor.dm deleted file mode 100644 index 2184d26364647..0000000000000 --- a/maps/torch/datums/game_modes/torch_traitor.dm +++ /dev/null @@ -1,10 +0,0 @@ -/datum/game_mode/traitor - extended_round_description = "The successes of the SEV Torch's past missions have marked the ship as \ - a highly valuable target for many organizations and individuals. The varied pasts \ - and experiences of the crew have left them susceptible to the vices and temptations of humanity. \ - Are you in the safe self-contained workplace you once thought it was, or has it become a playground \ - for the evils of the galaxy? Who can you trust? Watch your front. Watch your sides. Watch your back. \ - The familiar faces that you've passed hundreds of times down the hallways before can be hiding terrible \ - secrets and deceptions. Every corner is a mystery. Every conversation is a lie. You will be facing your \ - friends and family as they try to use your emotions and trust to their advantage, leaving you with nothing \ - but the painful reminder that space is cruel and unforgiving." \ No newline at end of file diff --git a/maps/torch/datums/game_modes/torch_uprising.dm b/maps/torch/datums/game_modes/torch_uprising.dm deleted file mode 100644 index 0cc380180a1e5..0000000000000 --- a/maps/torch/datums/game_modes/torch_uprising.dm +++ /dev/null @@ -1,4 +0,0 @@ -/datum/game_mode/uprising - name = "Cult & Mutiny" - round_description = "Some crewmembers are attempting to start a mutiny while a cult plots in the shadows!" - extended_round_description = "Cultists and mutineers spawn in this round." \ No newline at end of file diff --git a/maps/torch/datums/reports/command.dm b/maps/torch/datums/reports/command.dm deleted file mode 100644 index 50d45e9aaa16a..0000000000000 --- a/maps/torch/datums/reports/command.dm +++ /dev/null @@ -1,129 +0,0 @@ -/datum/computer_file/report/recipient/command/generate_fields() - ..() - set_access(access_heads) - -/datum/computer_file/report/recipient/command/report - form_name = "REP-SCG" - title = "Общая форма отчёта" - logo = "\[solcrest\]" - available_on_ntnet = 1 - -/datum/computer_file/report/recipient/command/request/generate_fields() - ..() - add_field(/datum/report_field/text_label/instruction, "Этот факс был отправлен командованием ГЭК Факел") - add_field(/datum/report_field/date, "Дата") - add_field(/datum/report_field/time, "Время") - add_field(/datum/report_field/people/from_manifest, "Полное имя, звание и должность", required = 1) - add_field(/datum/report_field/simple_text, "Приоритетность", required = 1) - add_field(/datum/report_field/simple_text, "Тема", required = 1) - add_field(/datum/report_field/pencode_text, "Сообщение", required = 1) - add_field(/datum/report_field/signature, "Подпись", required = 1) - set_access(list(list(access_qm, access_senadv, access_cent_creed, access_representative)), list(list(access_qm, access_senadv, access_cent_creed, access_representative)), override = 0) - - -/datum/computer_file/report/recipient/command/request_command - form_name = "REQ-SCG" - title = "Запрос к Командованию" - logo = "\[logo\]" - available_on_ntnet = TRUE - -/datum/computer_file/report/recipient/command/request_command/generate_fields() - ..() - add_field(/datum/report_field/number, "Номер запроса ") - add_field(/datum/report_field/people/from_manifest, "Полное имя, звание и должность запросившего", required = 1) - add_field(/datum/report_field/pencode_text, "Содержание запроса", required = 1) - add_field(/datum/report_field/pencode_text, "Причина запроса", required = 1) - add_field(/datum/report_field/date, "Дата заполнения") - add_field(/datum/report_field/time, "Время заполнения") - add_field(/datum/report_field/text_label/instruction, "Документ является недействительным в случае отсутствия подписи или печати.") - add_field(/datum/report_field/signature, "Подпись", required = 1) - set_access(list(list(access_qm, access_senadv, access_cent_creed, access_representative)), list(list(access_qm, access_senadv, access_cent_creed, access_representative)), override = 0) - - -/datum/computer_file/report/recipient/command/decree - form_name = "DEC-NTF" - title = "Указ Командования" - logo = "\[solcrest\]" - available_on_ntnet = TRUE - -/datum/computer_file/report/recipient/command/decree/generate_fields() - ..() - add_field(/datum/report_field/number, "Номер указа") - add_field(/datum/report_field/people/from_manifest, "Полное имя, звание и должность распорядителя", required = 1) - add_field(/datum/report_field/pencode_text, "Содержание распоряжения", required = 1) - add_field(/datum/report_field/pencode_text, "Причина распоряжения", required = 1) - add_field(/datum/report_field/date, "Дата заполнения") - add_field(/datum/report_field/time, "Время заполнения") - add_field(/datum/report_field/text_label/instruction, "Документ является недействительным в случае отсутствия подписи или печати.") - add_field(/datum/report_field/signature, "Подпись", required = 1) - -/datum/computer_file/report/recipient/command/crew_transfer - form_name = "CTA-SGF-01" - title = "Смена занимаемой должности" - logo = "\[solcrest\]" - available_on_ntnet = TRUE - -/datum/computer_file/report/recipient/command/crew_transfer/generate_fields() - ..() - var/list/xo_fields = list() - add_field(/datum/report_field/text_label/header, "ГЭК \"Факел\" - Офис Исполнительного офицера") - add_field(/datum/report_field/people/from_manifest, "Полное имя и звание Исполнителя(Исполнительный/Командующий офицер)", required = 1) - add_field(/datum/report_field/people/from_manifest, "Полное имя и звание Заявителя", required = 1) - add_field(/datum/report_field/date, "Дата заполнения") - add_field(/datum/report_field/time, "Время заполнения") - add_field(/datum/report_field/simple_text, "Текущая должность", required = 1) - add_field(/datum/report_field/simple_text, "Запрашиваемая должность", required = 1) - add_field(/datum/report_field/pencode_text, "Причина перевода", required = 1) - add_field(/datum/report_field/text_label/instruction, "Документ является недействительным в случае отсутствия подписи или печати.") - add_field(/datum/report_field/signature, "Подпись Заявителя", required = 1) - xo_fields += add_field(/datum/report_field/signature, "Подпись Исполнителя(Исполнительный/Командующий офицер)") - xo_fields += add_field(/datum/report_field/options/yes_no, "Одобрено") - for(var/datum/report_field/field in xo_fields) - field.set_access(access_edit = access_hop) - -/datum/computer_file/report/recipient/command/access_modification - form_name = "AMA-SGF-02" - title = "Получение расширенного доступа" - logo = "\[solcrest\]" - available_on_ntnet = TRUE - -/datum/computer_file/report/recipient/command/access_modification/generate_fields() - ..() - var/list/xo_fields = list() - add_field(/datum/report_field/text_label/header, "ГЭК \"Факел\" - Офис Исполнительного офицера") - add_field(/datum/report_field/people/from_manifest, "Полное имя и звание Исполнителя(Исполнительный/Командующий офицер)", required = 1) - add_field(/datum/report_field/people/from_manifest, "Полное имя и звание Заявителя", required = 1) - add_field(/datum/report_field/date, "Дата заполнения") - add_field(/datum/report_field/time, "Время заполнения") - add_field(/datum/report_field/simple_text, "Текущая должность", required = 1) - add_field(/datum/report_field/simple_text, "Запрашиваемый доступ", required = 1) - add_field(/datum/report_field/pencode_text, "Причина расширения доступа", required = 1) - add_field(/datum/report_field/simple_text, "Срок расширения доступа") - add_field(/datum/report_field/text_label/instruction, "Документ является недействительным в случае отсутствия подписи или печати.") - add_field(/datum/report_field/signature, "Подпись Заявителя", required = 1) - xo_fields += add_field(/datum/report_field/signature, "Подпись Исполнителя(Исполнительный/Командующий офицер)") - xo_fields += add_field(/datum/report_field/options/yes_no, "Одобрено") - for(var/datum/report_field/field in xo_fields) - field.set_access(access_edit = access_hop) - -/datum/computer_file/report/recipient/command/borging - form_name = "CC-SGF-09" - title = "Контракт на добровольную Кибернетизацию" - logo = "\[solcrest\]" - available_on_ntnet = TRUE - -/datum/computer_file/report/recipient/command/borging/generate_fields() - ..() - var/list/xo_fields = list() - add_field(/datum/report_field/text_label/header, "ГЭК \"Факел\" - Офис Исполнительного офицера") - add_field(/datum/report_field/people/from_manifest, "Полное имя и звание Исполнителя(Исполнительный/Командующий офицер)") - add_field(/datum/report_field/people/from_manifest, "Полное имя и звание Заявителя", required = 1) - add_field(/datum/report_field/date, "Дата заполнения") - add_field(/datum/report_field/time, "Время заполнения") - add_field(/datum/report_field/text_label/instruction, "Я, нижеподписавшийся, настоящим соглашаюсь добровольно пройти прижизненную лоботомию с намерением киборгизации \ - или ассимиляции с ИИ, и я осознаю все последствия такого акта. Я также понимаю, что эта операция может быть необратимой, и что мой трудовой договор будет расторгнут.") - add_field(/datum/report_field/signature, "Подпись Заявителя") - xo_fields += add_field(/datum/report_field/signature, "Подпись Исполнителя(Исполнительный/Командующий офицер)") - xo_fields += add_field(/datum/report_field/options/yes_no, "Одобрено") - for(var/datum/report_field/field in xo_fields) - field.set_access(access_edit = access_hop) diff --git a/maps/torch/datums/reports/corporate.dm b/maps/torch/datums/reports/corporate.dm deleted file mode 100644 index 7b0e85fe85925..0000000000000 --- a/maps/torch/datums/reports/corporate.dm +++ /dev/null @@ -1,242 +0,0 @@ -/datum/computer_file/report/recipient/corp/generate_fields() - ..() - set_access(list(list(access_heads, access_senadv, access_representative, access_cent_creed, access_liaison))) - -/datum/computer_file/report/recipient/command/request_corporate - form_name = "HR-NTCO-05" - title = "Корпоративный Запрос" - logo = "\[logo\]" - available_on_ntnet = TRUE - -/datum/computer_file/report/recipient/command/request_corporate/generate_fields() - ..() - add_field(/datum/report_field/number, "Номер запроса ") - add_field(/datum/report_field/people/from_manifest, "Полное имя и должность запросившего", required = 1) - add_field(/datum/report_field/pencode_text, "Содержание запроса", required = 1) - add_field(/datum/report_field/pencode_text, "Причина запроса", required = 1) - add_field(/datum/report_field/date, "Дата заполнения") - add_field(/datum/report_field/time, "Время заполнения") - add_field(/datum/report_field/text_label/instruction, "Документ является недействительным в случае отсутствия подписи или печати.") - add_field(/datum/report_field/signature, "Подпись", required = 1) - set_access(access_liaison, access_liaison) -/datum/computer_file/report/recipient/corp/incident - form_name = "HR-NTCO-01" - title = "Рапорт об инциденте на корабле" - logo = "\[logo\] \[solcrest\]" - available_on_ntnet = TRUE - -/datum/computer_file/report/recipient/corp/incident/generate_fields() - ..() - add_field(/datum/report_field/simple_text, "Судно") - add_field(/datum/report_field/date, "Дата") - add_field(/datum/report_field/time, "Время") - add_field(/datum/report_field/simple_text, "Описание инцидента", required = 1) - add_field(/datum/report_field/pencode_text, "Детали инцидента", required = 1) - add_field(/datum/report_field/simple_text, "Вовлечённые отделы", required = 1) - add_field(/datum/report_field/signature, "Подпись", required = 1) - add_field(/datum/report_field/signature, "Подпись свидетеля") - -/datum/computer_file/report/recipient/corp/incident_corpstaff - form_name = "HR-NTCO-01a" - title = "Рапорт об инциденте с корпоративными сотрудниками" - logo = "\[logo\]" - available_on_ntnet = TRUE - -/datum/computer_file/report/recipient/corp/incident_corpstaff/generate_fields() - ..() - add_field(/datum/report_field/simple_text, "Судно") - add_field(/datum/report_field/date, "Дата") - add_field(/datum/report_field/time, "Время") - add_field(/datum/report_field/simple_text, "Описание инцидента", required = 1) - add_field(/datum/report_field/people/list_from_manifest, "Вовлечённый сотрудник(и) (Полное имя, должность)", required = 1) - add_field(/datum/report_field/pencode_text, "Детали инцидента", required = 1) - add_field(/datum/report_field/signature, "Подпись", required = 1) - add_field(/datum/report_field/signature, "Подпись свидетеля") - set_access(access_liaison, access_liaison) - -/datum/computer_file/report/recipient/corp/incident_corpassets - form_name = "HR-NTCO-01b" - title = "Рапорт об инциденте с корпоративным активами" - logo = "\[logo\]" - available_on_ntnet = TRUE - -/datum/computer_file/report/recipient/corp/incident_corpassets/generate_fields() - ..() - add_field(/datum/report_field/simple_text, "Судно") - add_field(/datum/report_field/date, "Дата") - add_field(/datum/report_field/time, "Время") - add_field(/datum/report_field/simple_text, "Описание инцидента", required = 1) - add_field(/datum/report_field/pencode_text, "Детали инцидента", required = 1) - add_field(/datum/report_field/people/list_from_manifest, "Раненые корпоративные сотрудники") - add_field(/datum/report_field/pencode_text, "Описание ранений") - add_field(/datum/report_field/pencode_text, "Потерянные корпоративные активы (Актив, стоимость в таллерах)") - add_field(/datum/report_field/signature, "Подпись", required = 1) - add_field(/datum/report_field/signature, "Подпись свидетеля") - set_access(access_liaison, access_liaison) - -/datum/computer_file/report/recipient/corp/incident_xenostaff - form_name = "HR-NTCO-01b" - title = "Рапорт об инциденте с сотрудником-ксеносом, имеющим рабочую визу" - logo = "\[logo\] \[solcrest\]" - available_on_ntnet = TRUE - -/datum/computer_file/report/recipient/corp/incident_xenostaff/generate_fields() - ..() - add_field(/datum/report_field/text_label/instruction, "Если сотрудник-ксенос не имеет рабочую визу, то используйте форму HR-NTCO-01c-A") - add_field(/datum/report_field/simple_text, "Судно") - add_field(/datum/report_field/date, "Дата") - add_field(/datum/report_field/time, "Время") - add_field(/datum/report_field/simple_text, "Описание инцидента", required = 1) - add_field(/datum/report_field/people/list_from_manifest, "Вовлечённый сотрудник(и)-ксенос(ы) (Полное имя, должность)", required = 1) - add_field(/datum/report_field/pencode_text, "Детали инцидента", required = 1) - add_field(/datum/report_field/signature, "Подпись", required = 1) - add_field(/datum/report_field/signature, "Подпись свидетеля") - -/datum/computer_file/report/recipient/corp/incident_xenostaffnovisa - form_name = "HR-NTCO-01c-A" - title = "Рапорт об инциденте с сотрудником-ксеносом, не имеющим рабочую визу" - logo = "\[logo\] \[solcrest\]" - available_on_ntnet = TRUE - -/datum/computer_file/report/recipient/corp/incident_xenostaffnovisa/generate_fields() - ..() - add_field(/datum/report_field/simple_text, "Судно") - add_field(/datum/report_field/date, "Дата") - add_field(/datum/report_field/time, "Время") - add_field(/datum/report_field/simple_text, "Описание инцидента", required = 1) - add_field(/datum/report_field/people/list_from_manifest, "Вовлечённый сотрудник(и)-ксенос(ы) (Полное имя, должность)", required = 1) - add_field(/datum/report_field/pencode_text, "Детали инцидента", required = 1) - add_field(/datum/report_field/signature, "Подпись", required = 1) - add_field(/datum/report_field/signature, "Подпись свидетеля") - -/datum/computer_file/report/recipient/corp/incident_synthstaff - form_name = "HR-EXO-01d" - title = "Рапорт об инцидентах с сотрудниками-синтетиками" - logo = "\[logo\] \[solcrest\]" - available_on_ntnet = TRUE - -/datum/computer_file/report/recipient/corp/incident_synthstaff/generate_fields() - ..() - add_field(/datum/report_field/simple_text, "Судно") - add_field(/datum/report_field/date, "Дата") - add_field(/datum/report_field/time, "Время") - add_field(/datum/report_field/simple_text, "Описание инцидента", required = 1) - add_field(/datum/report_field/people/list_from_manifest, "Сотрудники-синтетики замешанные в инциденте", required = 1) - add_field(/datum/report_field/pencode_text, "Детали инцидента", required = 1) - add_field(/datum/report_field/signature, "Подпись", required = 1) - add_field(/datum/report_field/signature, "Подпись свидетеля") - -/datum/computer_file/report/recipient/corp/incident_corpcrew - form_name = "HR-NTCO-01e" - title = "Рапорт об инциденте с корпоративным персоналом и экипажем корабля" - logo = "\[logo\] \[solcrest\]" - available_on_ntnet = TRUE - -/datum/computer_file/report/recipient/corp/incident_corpcrew/generate_fields() - ..() - add_field(/datum/report_field/text_label/instruction, "Для инцидентов в которые вовлечены как корпоративный персонал, так и экипаж корабля") - add_field(/datum/report_field/simple_text, "Судно") - add_field(/datum/report_field/date, "Дата") - add_field(/datum/report_field/time, "Время") - add_field(/datum/report_field/simple_text, "Описание инцидента", required = 1) - add_field(/datum/report_field/people/list_from_manifest, "Вовлечённый член(ы) экипажа (Полное имя, звание, должность)", required = 1) - add_field(/datum/report_field/people/list_from_manifest, "Вовлечённый сотрудник(и) (Полное имя, должность)", required = 1) - add_field(/datum/report_field/pencode_text, "Детали инцидента", required = 1) - add_field(/datum/report_field/signature, "Подпись", required = 1) - add_field(/datum/report_field/signature, "Подпись свидетеля") - -/datum/computer_file/report/recipient/corp/volunteer - form_name = "HR-NTCO-02b" - title = "Запрос добровольца для исследований" - logo = "\[logo\]" - available_on_ntnet = TRUE - -/datum/computer_file/report/recipient/corp/volunteer/generate_fields() - ..() - var/list/temp_fields = list() - add_field(/datum/report_field/people/from_manifest, "Полное имя добровольца", required = 1) - add_field(/datum/report_field/simple_text, "Предполагаемая процедура(ы)", required = 1) - add_field(/datum/report_field/simple_text, "Компенсация для добровольца(если есть)") - add_field(/datum/report_field/people/list_from_manifest, "Ответственный(ые) за исследования", required = 1) - add_field(/datum/report_field/text_label/instruction, "Подписывая, \"Доброволец\" соглашается освободить Организацию Экспедиционного корпуса, включая корпорации-партнеры, и её сотрудников от любой ответственности или ответственности за травмы, ущерб, потерю имущества или побочные эффекты, которые могут возникнуть в результате предполагаемой процедуры. Если документ подписан уполномоченным представителем ЭКСО, таким как Корпоративный Представитель - то этот документ считается просмотренным, но документ становится действительным только в том случае, если она заверен печатью.") - add_field(/datum/report_field/signature, "Подпись добровольца", required = 1) - temp_fields += add_field(/datum/report_field/signature, "Подпись Корпоративного Представителя", required = 1) - temp_fields += add_field(/datum/report_field/options/yes_no, "Одобрено") - set_access(access_liaison, access_liaison) - for(var/datum/report_field/temp_field in temp_fields) - temp_field.set_access(access_edit = access_liaison) - -/datum/computer_file/report/recipient/corp/deny - form_name = "HR-NTCO-02b-A" - title = "Отказ от добровольца для исследований" - logo = "\[logo\]" - available_on_ntnet = TRUE - -/datum/computer_file/report/recipient/corp/deny/generate_fields() - ..() - add_field(/datum/report_field/text_label, "Мы с сожалением сообщаем вам, что ваша добровольческая заявка на службу в качестве испытуемого в Организации Экспедиционного корпуса была отклонена. \ - Мы благодарим вас за ваш интерес к развитию исследований. В приложении вы найдете копию вашей оригинальной формы для ваших записей. С уважением,") - add_field(/datum/report_field/signature, "Подпись Корпоративного Представителя", required = 1) - add_field(/datum/report_field/people/from_manifest, "Полное имя добровольца", required = 1) - add_field(/datum/report_field/text_label/header, "Причина для отказа") - add_field(/datum/report_field/options/yes_no, "Физически непригоден") - add_field(/datum/report_field/options/yes_no, "Психически непригоден") - add_field(/datum/report_field/options/yes_no, "Отмена проекта") - add_field(/datum/report_field/simple_text, "Другое") - add_field(/datum/report_field/options/yes_no, "Одобрено") - set_access(access_liaison, access_liaison) - -/datum/computer_file/report/recipient/corp/fire - form_name = "C-0102" - title = "Увольнение корпоративного сотрудника" - logo = "\[logo\]" - available_on_ntnet = TRUE - -/datum/computer_file/report/recipient/corp/fire/generate_fields() - ..() - add_field(/datum/report_field/text_label/header, "Уведомление об увольнении сотрудника") - add_field(/datum/report_field/people/from_manifest, "Полное имя", required = 1) - add_field(/datum/report_field/number, "Возраст", required = 1) - add_field(/datum/report_field/simple_text, "Должность", required = 1) - add_field(/datum/report_field/pencode_text, "Причина увольнения", required = 1) - add_field(/datum/report_field/date, "Дата заполнения") - add_field(/datum/report_field/time, "Время заполнения") - add_field(/datum/report_field/signature, "Авторизовано", required = 1) - add_field(/datum/report_field/text_label/instruction, "Прикрепите личное дело к данному уведомлению.") - set_access(access_liaison, access_liaison) - -/datum/computer_file/report/recipient/corp/payout - form_name = "C-3310" - title = "Выплата оставшегося оклада погибшему сотруднику" - logo = "\[logo\]" - available_on_ntnet = TRUE - -/datum/computer_file/report/recipient/corp/payout/generate_fields() - ..() - add_field(/datum/report_field/people/from_manifest, "Данный документ разрешает выплату оставшегося оклада") - add_field(/datum/report_field/pencode_text, "Помимо полной выплаты оставшихся личных активов: (Актив, [GLOB.using_map.local_currency_name_singular] Стоимость)") - add_field(/datum/report_field/pencode_text, "Включая личные вещи") - add_field(/datum/report_field/text_label, "Должно быть немедленно отправлено ближайшему родственнику сотрудника.") - add_field(/datum/report_field/signature, "Подпись", required = 1) - add_field(/datum/report_field/options/yes_no, "Одобрено") - -//No access restrictions for easier use. -/datum/computer_file/report/recipient/sales - form_name = "C-2192" - title = "Корпоративный договор купли-продажи и Квитанция" - - available_on_ntnet = TRUE - -/datum/computer_file/report/recipient/sales/generate_fields() - ..() - add_field(/datum/report_field/text_label/header, "Информация о продукте") - add_field(/datum/report_field/simple_text, "Наименование продукта", required = 1) - add_field(/datum/report_field/simple_text, "Тип продукта", required = 1) - add_field(/datum/report_field/number, "Стоимость единицы продукции (В таллерах)", required = 1) - add_field(/datum/report_field/number, "Кол-во запрошенных единиц продукции", required = 1) - add_field(/datum/report_field/number, "Итоговая цена(T)", required = 1) - add_field(/datum/report_field/text_label/header, "Информация о продавце") - add_field(/datum/report_field/text_label/instruction, "\"Покупатель\" может не возвращать какие-либо проданные единицы продукции для повторной компенсации в таллерах, но может вернуть товар за идентичный товар или товар из равного материала (не таллеры). \"Продавец\" соглашается приложить все усилия для ремонта или замены любых предметов, которые не соответствуют своему назначению из-за неисправности или производственной ошибки, но не из-за ущерба, причиненного пользователем.") - add_field(/datum/report_field/simple_text, "Полное имя продавца", required = 1) - add_field(/datum/report_field/signature, "Подпись", required = 1) - add_field(/datum/report_field/options/yes_no, "Одобрено") diff --git a/maps/torch/datums/reports/deck.dm b/maps/torch/datums/reports/deck.dm deleted file mode 100644 index 273fc488c69b8..0000000000000 --- a/maps/torch/datums/reports/deck.dm +++ /dev/null @@ -1,100 +0,0 @@ - -/datum/computer_file/report/recipient/shuttle - logo = "\[solcrest\]" - -/datum/computer_file/report/recipient/deck/generate_fields() - ..() - set_access(access_cargo_bot) - -/datum/computer_file/report/recipient/deck/docked - logo = "\[solcrest\]" - form_name = "SCG-SUP-12" - title = "Отчет о пристыкованном судне" - available_on_ntnet = TRUE - -/datum/computer_file/report/recipient/deck/docked/generate_fields() - ..() - add_field(/datum/report_field/text_label/header, "ГЭК \"Факел\" - Отдел снабжения") - add_field(/datum/report_field/text_label/header, "ОБЩАЯ ИНФОРМАЦИЯ") - add_field(/datum/report_field/date, "Дата заполнения") - add_field(/datum/report_field/time, "Время заполнения") - add_field(/datum/report_field/simple_text, "Название судна", required = 1) - add_field(/datum/report_field/simple_text, "Владелец/Пилот судна", required = 1) - add_field(/datum/report_field/simple_text, "Назначение судна", required = 1) - add_field(/datum/report_field/people/from_manifest, "Состыковку произвел", required = 1) - add_field(/datum/report_field/text_label, "ОБЩАЯ ИНФОРМАЦИЯ ГРУЗА") - add_field(/datum/report_field/pencode_text, "Перечислите вид груза, находящегося на судне", required = 1) - add_field(/datum/report_field/text_label, "ИНФОРМАЦИЯ ОБ ОПАСНОМ ГРУЗЕ СУДНА") - add_field(/datum/report_field/options/yes_no, "Вооружение?", required = 1) - add_field(/datum/report_field/options/yes_no, "Живой груз?", required = 1) - add_field(/datum/report_field/options/yes_no, "Биологический материал?", required = 1) - add_field(/datum/report_field/options/yes_no, "Химическая или радиационная опасность?", required = 1) - add_field(/datum/report_field/signature, "Для разрешение на посещение судна, рапсишитесь/поставьте печать здесь", required = 1) - add_field(/datum/report_field/text_label, "ОТСТЫКОВКА И ОТЪЕЗД") - add_field(/datum/report_field/time, "Время отстыковки") - add_field(/datum/report_field/pencode_text,"Дополнительные заметки во время отстыковки") - -/datum/computer_file/report/recipient/request - form_name = "SCG-DEC-34" - title = "Запрос в отдел поставок" - available_on_ntnet = 1 - -/datum/computer_file/report/recipient/request/generate_fields() - ..() - var/list/cargo_fields = list() - var/list/heads_fields = list() - add_field(/datum/report_field/text_label/header, "ГЭК \"Факел\" - Отдел снабжения") - add_field(/datum/report_field/simple_text, "Наименование отдела, запрашивающего предметы или материалы", required = 1) - add_field(/datum/report_field/people/from_manifest, "Полное Имя, должность и звание запрашивающего", required = 1) - add_field(/datum/report_field/signature, "Подпись запрашивающего", required = 1) - add_field(/datum/report_field/date, "Дата заполнения") - add_field(/datum/report_field/time, "Время заполнения") - add_field(/datum/report_field/pencode_text, "Список запрашиваемых предметов или материалов", required = 1) - add_field(/datum/report_field/text_label/instruction, "При необходимости - вписать дополнительные пункты в списке. Пустые графы заполнить, как N/A.") - add_field(/datum/report_field/simple_text, "Причина запроса", required = 1) - add_field(/datum/report_field/signature, "Подпись запрашивающего") - cargo_fields+= add_field(/datum/report_field/signature, "Офицера Снабжения или персонала отдела снабжения", required = 1) - heads_fields+= add_field(/datum/report_field/signature, "Подпись главы запрашивающего отдела") - for(var/datum/report_field/field in cargo_fields) - field.set_access(access_edit = list(list(access_cargo_bot, access_qm))) - for(var/datum/report_field/field in heads_fields) - field.set_access(access_edit = access_heads) - -/datum/computer_file/report/recipient/deck/shuttle - form_name = "SCG-DEC-32" - title = "Предварительная проверка шаттла" - available_on_ntnet = 1 - -/datum/computer_file/report/recipient/deck/shuttle/generate_fields() - ..() - var/list/permission_fields = list() - add_field(/datum/report_field/text_label/header, "ГЭК \"Факел\" - Отдел снабжения") - add_field(/datum/report_field/date, "Дата заполнения") - add_field(/datum/report_field/time, "Время заполнения") - add_field(/datum/report_field/simple_text, "Название шаттла", required = 1) - add_field(/datum/report_field/text_label/instruction, "Следующий пункт рекомендуется заполнить в порядке посещения пунктов назначения.") - add_field(/datum/report_field/pencode_text, "Пункт(ы) Назначения", required = 1) - add_field(/datum/report_field/simple_text, "Место Дислокации", required = 1) - add_field(/datum/report_field/simple_text, "Причина вылета", required = 1) - add_field(/datum/report_field/text_label, "Предполетная подготовка") - add_field(/datum/report_field/options/yes_no, "Корпус левой стороны без повреждений?", required = 1) - add_field(/datum/report_field/options/yes_no, "Корпус правой стороны без повреждений?", required = 1) - add_field(/datum/report_field/options/yes_no, "Все окна установлены и закреплены?", required = 1) - add_field(/datum/report_field/options/yes_no, "Сопла форсунок очищены?", required = 1) - add_field(/datum/report_field/options/yes_no, "Присутствует ли утечка топлива?", required = 1) - add_field(/datum/report_field/options/yes_no, "Давление топлива превышает 300kPa?", required = 1) - add_field(/datum/report_field/options/yes_no, "Портативный генератор на борту?", required = 1) - add_field(/datum/report_field/options/yes_no, "Заряд SMESа имеет более 60%?", required = 1) - add_field(/datum/report_field/options/yes_no, "Все камеры в рабочем состоянии?", required = 1) - add_field(/datum/report_field/options/yes_no, "Давление в канистре воздушных шлюзов больше 200kPa?", required = 1) - add_field(/datum/report_field/options/yes_no, "Набор первой помощи на борту?", required = 1) - add_field(/datum/report_field/options/yes_no, "Набор инструментов на борту?", required = 1) - add_field(/datum/report_field/options/yes_no, "Скафандры для членов экспедиции на борту?", required = 1) - add_field(/datum/report_field/options/yes_no, "Другая необходимая экипировка на борту?", required = 1) - add_field(/datum/report_field/options/yes_no, "Все члены экспедиции на борту?", required = 1) - add_field(/datum/report_field/options/yes_no, "Герметичность шлюзов с обеих сторон?", required = 1) - permission_fields += add_field(/datum/report_field/options/yes_no, "Разрешение на вылет из ангара?", required = 1) - permission_fields += add_field(/datum/report_field/signature, "Для разрешения на вылет, поставьте подпись либо печать здесь", required = 1) - for(var/datum/report_field/field in permission_fields) - field.set_access(access_edit=list(list(access_qm, access_heads))) - set_access(list(list(access_guppy, access_expedition_shuttle, access_petrov)),list(list(access_guppy, access_expedition_shuttle, access_petrov))) diff --git a/maps/torch/datums/reports/engineering.dm b/maps/torch/datums/reports/engineering.dm deleted file mode 100644 index c20caf0d5e501..0000000000000 --- a/maps/torch/datums/reports/engineering.dm +++ /dev/null @@ -1,93 +0,0 @@ -/datum/computer_file/report/recipient/eng/generate_fields() - ..() - set_access(access_engine_equip) - -/datum/computer_file/report/recipient/construction_work - form_name = "SCG-ENG-11" - title = "Запрос на проведение строительных работ" - logo = "\[solcrest\]" - available_on_ntnet = 1 - -/datum/computer_file/report/recipient/construction_work/generate_fields() - ..() - var/list/work_fields = list() - add_field(/datum/report_field/text_label/header, "ГЭК \"Факел\" - Инженерный отдел") - add_field(/datum/report_field/number, "Номер запроса") - add_field(/datum/report_field/date, "Дата проведения работ") - work_fields += add_field(/datum/report_field/people/from_manifest, "Ответственный за процесс", required = 1) - work_fields += add_field(/datum/report_field/people/list_from_manifest, "Список привлеченных работников", required = 1) - add_field(/datum/report_field/time,"Время начала") - add_field(/datum/report_field/simple_text, "Вид работ", required = 1) - add_field(/datum/report_field/simple_text, "Предоставленный доступ", required = 1) - add_field(/datum/report_field/text_label/instruction, "Доступ обеспечивается сотрудником или его вышестоящим, рассмотревшим и принявшим данный запрос совместно с инженерным составом. Доступ может быть предоставлен на карту сотрудника(ов), выдан виде\ - гостевой карты или обеспечен иным способом, без дополнительных документов при условии, что он будет изъят по окончанию проведения соответствующих работ.") - add_field(/datum/report_field/pencode_text, "Необходимые ресурсы", required = 1) - work_fields += add_field(/datum/report_field/signature, "Подпись ответственного", required = 1) - add_field(/datum/report_field/signature, "Подпись запросившего работы", required = 1) - for(var/datum/report_field/field in work_fields) - field.set_access(access_edit = access_engine_equip) - -/datum/computer_file/report/recipient/eng/report_work - form_name = "SCG-ENG-11a" - title = "Отчёт о проведении ремонтных/строительных работ" - logo = "\[solcrest\]" - available_on_ntnet = 1 - -/datum/computer_file/report/recipient/eng/report_work/generate_fields() - ..() - var/list/work_fields = list() - add_field(/datum/report_field/text_label/header, "ГЭК \"Факел\" - Инженерный отдел") - add_field(/datum/report_field/number, "Номер запроса для проведения данных работ") - add_field(/datum/report_field/date, "Дата проведения работ") - add_field(/datum/report_field/people/from_manifest, "Ответственный за процесс", required = 1) - add_field(/datum/report_field/people/list_from_manifest, "Список привлеченных работников", required = 1) - add_field(/datum/report_field/time,"Время начала") - add_field(/datum/report_field/time,"Время окончания") - add_field(/datum/report_field/simple_text, "Вид проведённой работы", required = 1) - add_field(/datum/report_field/simple_text, "Доступ, предоставленный на время проведения работ", required = 1) - work_fields += add_field(/datum/report_field/pencode_text, "Затраченные ресурсы", required = 1) - work_fields += add_field(/datum/report_field/signature, "Подпись ответственного", required = 1) - add_field(/datum/report_field/signature, "Подпись изъявшего временный доступ", required = 1) - for(var/datum/report_field/field in work_fields) - field.set_access(access_edit = access_engine_equip) - -/datum/computer_file/report/recipient/request_eng - form_name = "SCG-ENG-12" - title = "Запрос к инженерии" - logo = "\[solcrest\]" - available_on_ntnet = 1 - -/datum/computer_file/report/recipient/request_eng/generate_fields() - ..() - var/list/work_fields = list() - add_field(/datum/report_field/text_label/header, "ГЭК \"Факел\" - Инженерный отдел") - add_field(/datum/report_field/date, "Дата запроса") - add_field(/datum/report_field/time, "Время запроса") - add_field(/datum/report_field/people/from_manifest, "Запрашивающий", required = 1) - add_field(/datum/report_field/pencode_text, "Содержание запроса", required = 1) - add_field(/datum/report_field/simple_text,"Причина запроса", required = 1) - work_fields += add_field(/datum/report_field/people/from_manifest,"Ответственный за запрос", required = 1) - work_fields += add_field(/datum/report_field/options/yes_no, "Статус запроса (принят/отклонён)", required = 1) - add_field(/datum/report_field/simple_text, "Предоставляемый доступ", required = 1) - add_field(/datum/report_field/text_label/instruction, "Доступ обеспечивается сотрудником или его вышестоящим, рассмотревшим и принявшим данный запрос совместно с инженерным составом. Доступ может быть предоставлен на карту сотрудника/ов, выдан виде\ - гостевой карты или обеспечен иным способом, без дополнительных документов при условии, что он будет изъят по окончанию проведения соответствующих работ.") - add_field(/datum/report_field/signature, "Подпись запросившего", required = 1) - work_fields += add_field(/datum/report_field/signature, "Подпись ответственного", required = 1) - for(var/datum/report_field/field in work_fields) - field.set_access(access_edit = access_engine_equip) - -/datum/computer_file/report/recipient/eng/startup_systems - form_name = "SCG-ENG-13" - title = "Отчёт о подготовке судовых систем" - logo = "\[solcrest\]" - available_on_ntnet = 1 - -/datum/computer_file/report/recipient/eng/startup_systems/generate_fields() - ..() - add_field(/datum/report_field/text_label/header, "ГЭК \"Факел\" - Инженерный отдел") - add_field(/datum/report_field/date, "Дата") - add_field(/datum/report_field/time, "Время") - add_field(/datum/report_field/people/from_manifest, "Ответственный за процесс", required = 1) - add_field(/datum/report_field/people/list_from_manifest, "Список привлечённых работников", required = 1) - add_field(/datum/report_field/pencode_text,"Список систем судна и проведённое технического обслуживание", required = 1) - add_field(/datum/report_field/signature,"Подпись ответственного", required = 1) diff --git a/maps/torch/datums/reports/exploration.dm b/maps/torch/datums/reports/exploration.dm deleted file mode 100644 index 3361ff38419ad..0000000000000 --- a/maps/torch/datums/reports/exploration.dm +++ /dev/null @@ -1,80 +0,0 @@ -/datum/computer_file/report/recipient/exp - logo = "\[eclogo\]" - -/datum/computer_file/report/recipient/exp/generate_fields() - ..() - set_access(access_explorer) - -/datum/computer_file/report/recipient/exp/fauna - form_name = "SCG-EXP-19f" - title = "Отчет по фауне" - available_on_ntnet = TRUE - -/datum/computer_file/report/recipient/exp/fauna/generate_fields() - ..() - add_field(/datum/report_field/text_label/header, "ГЭК \"Факел\" - Экспедиционный Корпус") - add_field(/datum/report_field/text_label/instruction, "Следующие колонки заполняются членом, входящего в состав экспедиционной команды, после открытия и изучения инопланетной жизни.") - add_field(/datum/report_field/number, "Номер рапорта") - add_field(/datum/report_field/simple_text, "Местоположение", required = 1) - add_field(/datum/report_field/date, "Дата") - add_field(/datum/report_field/time, "Время") - add_field(/datum/report_field/people/list_from_manifest, "Участники экспедиции", required = 1) - add_field(/datum/report_field/pencode_text, "Анатомия/Внешний вид", required = 1) - add_field(/datum/report_field/pencode_text, "Локомоция", required = 1) - add_field(/datum/report_field/pencode_text, "Чем питается", required = 1) - add_field(/datum/report_field/pencode_text, "Среда обитания", required = 1) - add_field(/datum/report_field/pencode_text, "Поведение", required = 1) - add_field(/datum/report_field/pencode_text, "Специальная характеристика(и)", required = 1) - add_field(/datum/report_field/simple_text, "Классификация", required = 1) - add_field(/datum/report_field/text_label/instruction, "После заполнения данного документа, а также последующего его утверждения,\ - Главный Научный Офицер должен отправить данный документ по факсу Корпоративному Связному и Командующему Офицеру, после чего хранить копию этого документа в своём офисе, как и другие отчёты о прогрессе миссии.") - - -/datum/computer_file/report/recipient/exp/planet - form_name = "SCG-EXP-17" - title = "Отчет по экзопланете" - available_on_ntnet = TRUE - -/datum/computer_file/report/recipient/exp/planet/generate_fields() - ..() - add_field(/datum/report_field/text_label/header, "ГЭК \"Факел\" - Экспедиционный Корпус") - add_field(/datum/report_field/text_label/instruction, "Следующие колонки заполняются членом, входящего в состав экспедиционной команды, после возвращения с планеты на борт судна.") - add_field(/datum/report_field/date, "Дата") - add_field(/datum/report_field/time, "Время") - add_field(/datum/report_field/simple_text, "Название планеты", required = 1) - add_field(/datum/report_field/people/list_from_manifest, "Участники экспедиции", required = 1) - add_field(/datum/report_field/pencode_text, "Информация по местности", required = 1) - add_field(/datum/report_field/simple_text, "Обитаемость", required = 1) - add_field(/datum/report_field/pencode_text, "Описание фауны", required = 1) - add_field(/datum/report_field/pencode_text, "Описание флоры", required = 1) - add_field(/datum/report_field/pencode_text, "Точки интереса", required = 1) - add_field(/datum/report_field/pencode_text, "Наблюдения") - add_field(/datum/report_field/text_label/instruction, "После заполнения данного документа, а также последующего его утверждения,\ - Главный Научный Офицер должен отправить данный документ по факсу Корпоративному Связному и Командующему Офицеру, после чего хранить копию этого документа в своём офисе, как и другие отчёты о прогрессе миссии.") - -/datum/computer_file/report/recipient/exp/flora - form_name = "SCG-EXP-20g" - title = "Отчет по флоре" - available_on_ntnet = 1 - -/datum/computer_file/report/recipient/exp/flora/generate_fields() - ..() - add_field(/datum/report_field/text_label/header, "ГЭК \"Факел\" - Экспедиционный Корпус") - add_field(/datum/report_field/text_label/instruction, "Следующие колонки заполняются членом, входящего в состав экспедиционной команды, после открытия и изучения инопланетной жизни.") - add_field(/datum/report_field/number, "Номер рапорта") - add_field(/datum/report_field/simple_text, "Местоположение", required = 1) - add_field(/datum/report_field/date, "Дата") - add_field(/datum/report_field/people/list_from_manifest, "Участники экспедиции", required = 1) - add_field(/datum/report_field/pencode_text, "Строение/Внешний вид", required = 1) - add_field(/datum/report_field/pencode_text, "Условия произрастания", required = 1) - add_field(/datum/report_field/pencode_text, "Среда обитания", required = 1) - add_field(/datum/report_field/pencode_text, "Описание плодов", required = 1) - add_field(/datum/report_field/pencode_text, "Анализ плодов", required = 1) - add_field(/datum/report_field/pencode_text, "Специальная характеристика(и)", required = 1) - add_field(/datum/report_field/simple_text, "Классификация", required = 1) - add_field(/datum/report_field/text_label/instruction, "После заполнения данного документа, а также последующего его утверждения,\ - Главный Научный Офицер должен отправить данный документ по факсу Корпоративному Связному и Командующему Офицеру, после чего хранить копию этого документа в своём офисе, как и другие отчёты о прогрессе миссии.") - -/datum/computer_file/report/recipient/shuttle/post_flight - logo = "\[eclogo\]" - form_name = "SCG-EXP-3" diff --git a/maps/torch/datums/reports/medical.dm b/maps/torch/datums/reports/medical.dm deleted file mode 100644 index cafb109f70cbf..0000000000000 --- a/maps/torch/datums/reports/medical.dm +++ /dev/null @@ -1,141 +0,0 @@ - -/datum/computer_file/report/recipient/medical - logo = "\[solcrest\]" - form_name = "SCG-MED-00" - -/datum/computer_file/report/recipient/medical/generate_fields() - ..() - set_access(list(list(access_medical_equip, access_psychiatrist))) - -/datum/computer_file/report/recipient/medical/incidentreport - form_name = "SCG-MED-04" - title = "Подробности медицинского происшествия" - available_on_ntnet = TRUE - -/datum/computer_file/report/recipient/medical/incidentreport/generate_fields() - ..() - add_field(/datum/report_field/text_label/header, "ГЭК \"Факел\" - Медицинский отдел") - add_field(/datum/report_field/date, "Дата Инцидента") - add_field(/datum/report_field/time, "Время Инцидента") - add_field(/datum/report_field/people/from_manifest, "Пациент") - add_field(/datum/report_field/people/from_manifest, "Лечащий Врач") - add_field(/datum/report_field/pencode_text, "Травмы") - add_field(/datum/report_field/pencode_text, "Ход Лечения") - add_field(/datum/report_field/pencode_text, "Другие заметки") - add_field(/datum/report_field/text_label/instruction, "Подписываясь ниже, я подтверждаю, что все вышесказанное фактически верно, насколько мне известно.") - add_field(/datum/report_field/signature, "Подпись лечащего врача") - -/datum/computer_file/report/recipient/medical/insanity_resolution - form_name = "SCG-MED-02" - title = "Постановление о невменяемости" - available_on_ntnet = 1 - -/datum/computer_file/report/recipient/medical/insanity_resolution/generate_fields() - ..() - var/list/cmo_fields = list() - add_field(/datum/report_field/text_label/header, "ГЭК \"Факел\" - Медицинский отдел") - add_field(/datum/report_field/people/from_manifest, "Полное Имя и должность пациента", required = 1) - add_field(/datum/report_field/simple_text, "Дата рождения", required = 1) - add_field(/datum/report_field/number, "Возраст", required = 1) - add_field(/datum/report_field/simple_text, "Диагноз", required = 1) - cmo_fields += add_field(/datum/report_field/pencode_text, "Постановление главного врача", required = 1) - cmo_fields += add_field(/datum/report_field/signature, "Подпись главного врача", required = 1) - add_field(/datum/report_field/date, "Дата", required = 1) - add_field(/datum/report_field/time, "Время", required = 1) - add_field(/datum/report_field/text_label/instruction,"Признание невменяемым означает полное отстранение от выполнения должностных обязанностей. \ - Документ является недействительным при отсутствии подписи и печати главного врача.") - for(var/datum/report_field/field in cmo_fields) - field.set_access(access_edit = access_cmo) - -/datum/computer_file/report/recipient/medical/checkup - form_name = "SCG-MED-013b" - title = "Контрольный список для медицинского осмотра" - available_on_ntnet = TRUE - -/datum/computer_file/report/recipient/medical/checkup/generate_fields() - ..() - add_field(/datum/report_field/text_label/header, "ГЭК \"Факел\" - Медицинский отдел") - add_field(/datum/report_field/people/from_manifest, "Пациент") - add_field(/datum/report_field/date, "Дата") - add_field(/datum/report_field/time, "Время") - add_field(/datum/report_field/number, "Пульс(уд/мин)") - add_field(/datum/report_field/simple_text, "Кровяное давление") - add_field(/datum/report_field/simple_text, "Как звучит сердце?") - add_field(/datum/report_field/simple_text, "Как звучат лёгкие?") - add_field(/datum/report_field/simple_text, "Занимается ли пациент спортом?") - add_field(/datum/report_field/simple_text, "Если пациент курит, то сколько раз в день?") - add_field(/datum/report_field/simple_text, "Реакция зрачков на свет") - add_field(/datum/report_field/simple_text, "Подвергался ли пациент радиационному облучению в недавнее время?") - add_field(/datum/report_field/simple_text, "Болел ли пациент каким-либо заболеваниями в недавнее время?") - add_field(/datum/report_field/pencode_text, "Дополнительные заметки") - add_field(/datum/report_field/signature, "Подпись врача", required = 1) - set_access(access_edit = access_medical_equip) - -/datum/computer_file/report/recipient/medical/autopsy - form_name = "SCG-MED-015" - title = "Отчет о вскрытии" - available_on_ntnet = TRUE - -/datum/computer_file/report/recipient/medical/autopsy/generate_fields() - ..() - add_field(/datum/report_field/text_label/header, "ГЭК \"Факел\" - Медицинский отдел") - add_field(/datum/report_field/people/from_manifest, "Полное Имя и должность погибшего", required = 1) - add_field(/datum/report_field/simple_text, "Раса", required = 1) - add_field(/datum/report_field/simple_text, "Пол", required = 1) - add_field(/datum/report_field/number, "Возраст", required = 1) - add_field(/datum/report_field/date, "Дата смерти", required = 1) - add_field(/datum/report_field/time, "Время смерти", required = 1) - add_field(/datum/report_field/simple_text, "Причина смерти", required = 1) - add_field(/datum/report_field/pencode_text, "Дополнительные сведения") - add_field(/datum/report_field/date, "Дата вскрытия", required = 1) - add_field(/datum/report_field/time, "Время вскрытия", required = 1) - add_field(/datum/report_field/people/from_manifest, "Вскрытие проводил", required = 1) - add_field(/datum/report_field/signature, "Подпись", required = 1) - add_field(/datum/report_field/text_label/instruction, "Сотрудник, проводящий вскрытие, обязан обеспечить безопасную доставку личных и служебных вещей погибшего в Отдел Защиты Активов объекта, \ - либо их хранение в морге объекта.") - set_access(access_morgue, access_morgue) - -/datum/computer_file/report/recipient/medical/recipe - form_name = "SCG-MED-18" - title = "Назначение рецепта медицинского препарата" - available_on_ntnet = 1 - -/datum/computer_file/report/recipient/medical/recipe/generate_fields() - ..() - var/list/cmo_fields = list() - add_field(/datum/report_field/text_label/header, "ГЭК \"Факел\" - Медицинский отдел") - add_field(/datum/report_field/people/from_manifest, "Сотрудник, назначающий рецепт", required = 1) - add_field(/datum/report_field/signature, "Подпись сотрудника", required = 1) - add_field(/datum/report_field/simple_text, "Наименование препарата", required = 1) - add_field(/datum/report_field/people/from_manifest, "Полное Имя и должность пациента", required = 1) - add_field(/datum/report_field/simple_text, "Рекомендуемые дозировки", required = 1) - add_field(/datum/report_field/text_label/instruction,"Рецепт действителен 30 (тридцать) стандартных земных суток с момента выдачи, начиная со дня получения.") - add_field(/datum/report_field/date, "Дата выдачи рецепта") - add_field(/datum/report_field/pencode_text, "Постановление врача", required = 1) - cmo_fields += add_field(/datum/report_field/signature, "Подпись главного врача", required = 1) - set_access(access_edit = access_medical) - for(var/datum/report_field/field in cmo_fields) - field.set_access(access_edit = access_cmo) - -/datum/computer_file/report/recipient/medical/medical_services - form_name = "SCG-MED-05" - title = "Справка об оказании медицинских услуг" - available_on_ntnet = 1 - -/datum/computer_file/report/recipient/medical/medical_services/generate_fields() - ..() - add_field(/datum/report_field/text_label/header, "ГЭК \"Факел\" - Медицинский отдел") - add_field(/datum/report_field/number, "Номер справки") - add_field(/datum/report_field/people/from_manifest, "Полное Имя и должность пациента", required = 1) - add_field(/datum/report_field/simple_text, "Раса", required = 1) - add_field(/datum/report_field/simple_text, "Пол", required = 1) - add_field(/datum/report_field/number, "Возраст", required = 1) - add_field(/datum/report_field/pencode_text, "Причины госпитализации", required = 1) - add_field(/datum/report_field/pencode_text, "Синопсис оказанных услуг", required = 1) - add_field(/datum/report_field/pencode_text, "Дополнительные сведения") - add_field(/datum/report_field/date, "Дата оказания услуги") - add_field(/datum/report_field/time, "Время заполнения") - add_field(/datum/report_field/people/from_manifest, "Лечение проводил", required = 1) - add_field(/datum/report_field/signature, "Подпись", required = 1) - add_field(/datum/report_field/text_label/instruction, "Документ имеет юридическую силу исключительно в случае наличия подписи сотрудника, \ - а также печати Главного Врача, либо любых двух и более печатей действующих на объекте сотрудников командного отдела.") diff --git a/maps/torch/datums/reports/science.dm b/maps/torch/datums/reports/science.dm deleted file mode 100644 index e7b9a117fcc44..0000000000000 --- a/maps/torch/datums/reports/science.dm +++ /dev/null @@ -1,179 +0,0 @@ -/datum/computer_file/report/recipient/sci/generate_fields() - ..() - set_access(access_xenobiology) - -/datum/computer_file/report/recipient/sci/anomaly - form_name = "EC-SCI-1546" - title = "Изучение Аномалий" - logo = "\[eclogo\]" - available_on_ntnet = TRUE - -/datum/computer_file/report/recipient/sci/anomaly/generate_fields() - ..() - add_field(/datum/report_field/text_label/header, "Экспедиционный Корпус ЦПСС - Отдел Исследований и Разработок - ГЭК \"Факел\" ") - add_field(/datum/report_field/date, "Дата заполнения") - add_field(/datum/report_field/time, "Время заполнения") - add_field(/datum/report_field/simple_text, "Кодовое название AO", required = 1) - add_field(/datum/report_field/people/from_manifest, "Отчет заполнял", required = 1) - add_field(/datum/report_field/pencode_text, "Процедуры сдерживания", required = 1) - add_field(/datum/report_field/pencode_text, "Общее описание", required = 1) - add_field(/datum/report_field/simple_text, "Примерный возраст AO", required = 1) - add_field(/datum/report_field/simple_text, "Уровень угрозы AO", required = 1) - -/datum/computer_file/report/recipient/sci/prototype - form_name = "EC-SCI-07" - title = "Передача прототипов оборудования" - logo = "\[eclogo\]" - available_on_ntnet = 1 - -/datum/computer_file/report/recipient/sci/prototype/generate_fields() - ..() - var/list/rd_fields = list() - var/list/sci_fields = list() - add_field(/datum/report_field/text_label/header, "Экспедиционный Корпус ЦПСС - Отдел Исследований и Разработок - ГЭК \"Факел\" ") - add_field(/datum/report_field/simple_text, "Отдел, в который передаются прототипы", required = 1) - sci_fields += add_field(/datum/report_field/people/from_manifest, "Полное имя и звание научного сотрудника, передающего прототипы", required = 1) - sci_fields += add_field(/datum/report_field/signature, "Подпись научного сотрудника", required = 1) - add_field(/datum/report_field/people/from_manifest, "Полное имя и звание сотрудника, принимающего прототипы", required = 1) - add_field(/datum/report_field/signature, "Подпись принимающего сотрудника", required = 1) - add_field(/datum/report_field/date, "Дата передачи") - add_field(/datum/report_field/time, "Время передачи") - add_field(/datum/report_field/pencode_text, "Список передаваемых прототипов", required = 1) - add_field(/datum/report_field/text_label/instruction, "При необходимости - вписать дополнительные пункты в списке. Пустые графы заполнить, как N/A") - rd_fields += add_field(/datum/report_field/signature, "Подпись Главного Научного Офицера") - for(var/datum/report_field/field in sci_fields) - field.set_access(access_edit = access_xenobiology) - for(var/datum/report_field/field in rd_fields) - field.set_access(access_edit = access_rd) - -/datum/computer_file/report/recipient/sci/augmentations - form_name = "AG17-N1" - title = "Аугментация сотрудника" - logo = "\[eclogo\]" - available_on_ntnet = 1 - -/datum/computer_file/report/recipient/sci/augmentations/generate_fields() - ..() - var/list/rd_fields = list() - var/list/sci_fields = list() - var/list/heads_fields = list() - add_field(/datum/report_field/text_label/header, "Экспедиционный Корпус ЦПСС - Отдел Исследований и Разработок - ГЭК \"Факел\" ") - add_field(/datum/report_field/simple_text, "Отдел, в котором работает аугментируемый", required = 1) - add_field(/datum/report_field/people/from_manifest, "Полное Имя и звание сотрудника, в которого имплантируются аугментации", required = 1) - sci_fields += add_field(/datum/report_field/people/from_manifest, "Полное Имя и звание, проводящего операцию", required = 1) - sci_fields += add_field(/datum/report_field/signature, "Подпись сотрудника, проводящего операцию", required = 1) - add_field(/datum/report_field/date, "Дата аугментации") - add_field(/datum/report_field/time, "Время аугментации") - add_field(/datum/report_field/simple_text, "Причина аугментации", required = 1) - add_field(/datum/report_field/options/yes_no, "Добавить инфомацию об аугментациях в базу данных?") - add_field(/datum/report_field/pencode_text, "Список аугментаций", required = 1) - add_field(/datum/report_field/text_label/instruction, "Каждую аугментацию оформить в виде: часть тела, если протез - описать марку протеза, функционал, название. \ - При необходимости - вписать дополнительные пункты в списке. Пустые графы заполнить, как N/A.") - rd_fields += add_field(/datum/report_field/signature, "Подпись Главного Научного Офицера") - heads_fields += add_field(/datum/report_field/signature, "Подпись главы отдела аугментированного") - set_access(access_robotics, access_robotics, override = 0) - for(var/datum/report_field/field in rd_fields) - field.set_access(access_edit = access_rd) - for(var/datum/report_field/field in sci_fields) - field.set_access(access_edit = access_xenobiology) - for(var/datum/report_field/field in heads_fields) - field.set_access(access_edit = access_heads) - -/datum/computer_file/report/recipient/sci/xenobiologist_report - form_name = "EC-SCI-547" - title = "Отчёт ксенобиолога" - logo = "\[eclogo\]" - available_on_ntnet = TRUE - -/datum/computer_file/report/recipient/sci/xenobiologist_report/generate_fields() - ..() - add_field(/datum/report_field/text_label/header, "Экспедиционный Корпус ЦПСС - Отдел Исследований и Разработок - ГЭК \"Факел\" ") - add_field(/datum/report_field/date, "Дата заполнения") - add_field(/datum/report_field/time, "Время заполнения") - add_field(/datum/report_field/simple_text, "Название вида слайма", required = 1) - add_field(/datum/report_field/pencode_text, "Способ получения", required = 1) - add_field(/datum/report_field/pencode_text, "Полезность вида для экипажа", required = 1) - add_field(/datum/report_field/simple_text, "Опасность вида для экипажа", required = 1) - add_field(/datum/report_field/people/from_manifest, "Отчет заполнял", required = 1) - add_field(/datum/report_field/signature, "Подпись") - -/datum/computer_file/report/recipient/sci/xenobotanist_report - form_name = "EC-SCI-660" - title = "Отчёт ксеноботаника" - logo = "\[eclogo\]" - available_on_ntnet = TRUE - -/datum/computer_file/report/recipient/sci/xenobotanist_report/generate_fields() - ..() - add_field(/datum/report_field/text_label/header, "Экспедиционный Корпус ЦПСС - Отдел Исследований и Разработок - ГЭК \"Факел\" ") - add_field(/datum/report_field/date, "Дата заполнения") - add_field(/datum/report_field/time, "Время заполнения") - add_field(/datum/report_field/pencode_text, "Строение/Внешний вид растения", required = 1) - add_field(/datum/report_field/pencode_text, "Условия произрастания", required = 1) - add_field(/datum/report_field/pencode_text, "Среда обитания", required = 1) - add_field(/datum/report_field/pencode_text, "Описание плодов", required = 1) - add_field(/datum/report_field/pencode_text, "Анализ плодов", required = 1) - add_field(/datum/report_field/pencode_text, "Специальная характеристика(и)", required = 1) - add_field(/datum/report_field/simple_text, "Классификация", required = 1) - add_field(/datum/report_field/people/from_manifest, "Отчет заполнял", required = 1) - add_field(/datum/report_field/signature, "Подпись", required = 1) - -/datum/computer_file/report/recipient/sci/experiment_report - form_name = "EC-SCI-541" - title = "Отчёт об эксперименте" - logo = "\[eclogo\]" - available_on_ntnet = TRUE - -/datum/computer_file/report/recipient/sci/experiment_report/generate_fields() - ..() - add_field(/datum/report_field/text_label/header, "Экспедиционный Корпус ЦПСС - Отдел Исследований и Разработок - ГЭК \"Факел\" ") - add_field(/datum/report_field/people/list_from_manifest, "Ответственный(ые) за эксперимент") - add_field(/datum/report_field/date, "Дата заполнения") - add_field(/datum/report_field/time, "Время заполнения") - add_field(/datum/report_field/number, "Номер эксперимента", required = 1) - add_field(/datum/report_field/simple_text, "Название эксперимента", required = 1) - add_field(/datum/report_field/simple_text, "Цель эксперимента", required = 1) - add_field(/datum/report_field/pencode_text, "Описание эксперимента", required = 1) - add_field(/datum/report_field/pencode_text, "Используемое оборудование", required = 1) - add_field(/datum/report_field/simple_text, "Результат эксперимента", required = 1) - add_field(/datum/report_field/people/from_manifest, "Отчёт заполнял", required = 1) - add_field(/datum/report_field/signature, "Подпись") - -/datum/computer_file/report/recipient/sci/volunteer - form_name = "EC-SCI-02f" - title = "Запрос добровольца для исследований" - logo = "\[eclogo\]" - available_on_ntnet = TRUE - -/datum/computer_file/report/recipient/sci/volunteer/generate_fields() - ..() - var/list/rd_fields = list() - var/list/sci_fields = list() - add_field(/datum/report_field/text_label/header, "Экспедиционный Корпус ЦПСС - Отдел Исследований и Разработок - ГЭК \"Факел\" ") - add_field(/datum/report_field/date, "Дата заполнения") - add_field(/datum/report_field/time, "Время заполнения") - add_field(/datum/report_field/people/from_manifest, "Полное Имя, звание и должность добровольца", required = 1) - add_field(/datum/report_field/text_label/instruction, "Фото обязательно") - add_field(/datum/report_field/simple_text, "Область исследования", required = 1) - sci_fields += add_field(/datum/report_field/people/from_manifest, "Полное имя и должность ответственного за проведения исследования", required = 1) - rd_fields += add_field(/datum/report_field/signature, "Подпись Главного Научного Офицера") - sci_fields += add_field(/datum/report_field/signature, "Подпись ответственного", required = 1) - add_field(/datum/report_field/signature, "Подпись добровольца", required = 1) - for(var/datum/report_field/field in rd_fields) - field.set_access(access_edit = access_rd) - for(var/datum/report_field/field in sci_fields) - field.set_access(access_edit = access_research) - -/datum/computer_file/report/recipient/sci/volunteer_denied - form_name = "EC-SCI-02d" - title = "Прекращение добровольного исследования" - available_on_ntnet = TRUE - -/datum/computer_file/report/recipient/sci/volunteer_denied/generate_fields() - ..() - add_field(/datum/report_field/text_label/header, "Экспедиционный Корпус ЦПСС - Отдел Исследований и Разработок - ГЭК \"Факел\" ") - add_field(/datum/report_field/date, "Дата") - add_field(/datum/report_field/time, "Время") - add_field(/datum/report_field/people/from_manifest, "Имя, звание и должность добровольца", required = 1) - add_field(/datum/report_field/simple_text, "Причина прекращения", required = 1) - add_field(/datum/report_field/signature, "Подпись", required = 1) diff --git a/maps/torch/datums/reports/security.dm b/maps/torch/datums/reports/security.dm deleted file mode 100644 index 640af5098c797..0000000000000 --- a/maps/torch/datums/reports/security.dm +++ /dev/null @@ -1,148 +0,0 @@ - -/datum/computer_file/report/recipient/sec - logo = "\[solcrest\]" - -/datum/computer_file/report/recipient/sec/generate_fields() - ..() - set_access(access_brig) - -/datum/computer_file/report/recipient/sec/incident - form_name = "SCG-SEC-01" - title = "Отчет об происшествии" - available_on_ntnet = TRUE - -/datum/computer_file/report/recipient/sec/incident/generate_fields() - ..() - add_field(/datum/report_field/text_label/header, "ГЭК \"Факел\" - Охранный Отдел") - add_field(/datum/report_field/text_label/instruction, "Заполняется дежурным офицером.") - add_field(/datum/report_field/time, "Время происшествия", required = 1) - add_field(/datum/report_field/simple_text, "Тип происшествия/преступления", required = 1) - add_field(/datum/report_field/simple_text, "Местоположение", required = 1) - add_field(/datum/report_field/people/from_manifest, "Отчет заполнил", required = 1) - add_field(/datum/report_field/people/list_from_manifest, "Офицер(ы), которые были на месте происшествия", required = 1) - add_field(/datum/report_field/pencode_text, "Персонал, участвующий в инциденте", required = 1) - add_field(/datum/report_field/text_label/instruction, "(Ж-Жертва, П-Подозреваемый, С-Свидетель, Пр-Пропавший, A-Арестованный, М-Мертвец)") - add_field(/datum/report_field/pencode_text, "Описание предметов/Материального ущерба", required = 1) - add_field(/datum/report_field/text_label/instruction, "(П-Поврежденный, У-Улика, Пр-Потерянный, В-Восстановленный, Ук-Украденный)") - add_field(/datum/report_field/pencode_text, "Полное описание происшествия", required = 1) - add_field(/datum/report_field/signature, "Подпись офицера, составившего отчет", required = 1) - set_access(access_edit = access_brig) - -/datum/computer_file/report/recipient/sec/investigation - form_name = "SCG-SEC-02" - title = "Отчет о расследовании" - available_on_ntnet = TRUE - -/datum/computer_file/report/recipient/sec/investigation/generate_fields() - ..() - add_field(/datum/report_field/text_label/header, "ГЭК \"Факел\" - Охранный Отдел") - add_field(/datum/report_field/text_label/instruction, "Для ознакомления авторизованному персоналу.") - add_field(/datum/report_field/people/from_manifest, "Полное Имя", required = 1) - add_field(/datum/report_field/date, "Дата", required = 1) - add_field(/datum/report_field/time, "Время", required = 1) - add_field(/datum/report_field/pencode_text, "Отчёт по делу", required = 1) - add_field(/datum/report_field/pencode_text, "Основная информация", required = 1) - add_field(/datum/report_field/pencode_text, "Вложения") - add_field(/datum/report_field/pencode_text, "Наблюдения") - set_access(access_edit = access_brig) - -/datum/computer_file/report/recipient/sec/evidence - form_name = "SCG-SEC-02b" - title = "Отчет об уликах" - available_on_ntnet = TRUE - -/datum/computer_file/report/recipient/sec/report_evidence/generate_fields() - ..() - var/list/det_fields = list() - add_field(/datum/report_field/text_label/header, "ГЭК \"Факел\" - Охранный Отдел") - add_field(/datum/report_field/date, "Дата") - add_field(/datum/report_field/time, "Время") - add_field(/datum/report_field/people/from_manifest, "Конфисковано у", required = 1) - add_field(/datum/report_field/pencode_text, "Список конфискованных предметов", required = 1) - add_field(/datum/report_field/signature, "Подпись офицера проводившего конфискацию", required = 1) - det_fields += add_field(/datum/report_field/signature, "Подпись Смотрителя брига/Главы Службы Безопасности", required = 1) - set_access(access_edit = access_brig) - for(var/datum/report_field/field in det_fields) - field.set_access(access_edit = access_armory) - -/datum/computer_file/report/recipient/sec/arrest - form_name = "SCG-SEC-03" - title = "Отчет о задержании" - available_on_ntnet = TRUE - -/datum/computer_file/report/recipient/sec/arrest/generate_fields() - ..() - add_field(/datum/report_field/text_label/header, "ГЭК \"Факел\" - Охранный Отдел") - add_field(/datum/report_field/text_label/instruction, "Отчет заполняется задерживающим офицером, либо смотрителем брига. Отчет должен быть подписан и утвержден перед концом смены!") - add_field(/datum/report_field/people/from_manifest, "Докладывающий Офицер") - add_field(/datum/report_field/people/list_from_manifest, "Участники задержания") - add_field(/datum/report_field/date, "Дата") - add_field(/datum/report_field/time, "Время Инцидента") - add_field(/datum/report_field/people/from_manifest, "Задержанный") - add_field(/datum/report_field/simple_text, "Статьи") - add_field(/datum/report_field/simple_text, "Приговор") - add_field(/datum/report_field/pencode_text, "Изъятое личное имущество") - add_field(/datum/report_field/text_label/instruction, "На следующие 8 вопросов следует отвечать в формате ДА/НЕТ") - add_field(/datum/report_field/simple_text, "Имеется Риск Побега?") - add_field(/datum/report_field/simple_text, "Имеется Риск Суицида?") - add_field(/datum/report_field/simple_text, "Был ли предоставлен Ордер?") - add_field(/datum/report_field/simple_text, "Уведомлен ли задержанный о своих правах?") - add_field(/datum/report_field/simple_text, "Проведен ли обыск?") - add_field(/datum/report_field/simple_text, "Была ли дана возможность совершить чистосердечное признание?") - add_field(/datum/report_field/simple_text, "Сенсоры костюма были зафиксированы на третьем уровне?") - add_field(/datum/report_field/simple_text, "Если потребовалась, была ли оказана Первая Медицинская Помощь?") - add_field(/datum/report_field/simple_text, "Если ПМП была оказана, какие травмы были у задержанного?") - add_field(/datum/report_field/text_label/instruction, "Этот документ ДОЛЖЕН быть утвержден и рассмотрен Главой Службы Безопасности или Смотрителем Брига.") - add_field(/datum/report_field/signature, "Подпись Докладывающего Офицера") - set_access(access_edit = access_brig) - -/datum/computer_file/report/recipient/sec/armory - form_name = "SCG-SEC-05" - title = "Инвентаризация оружейной" - available_on_ntnet = 1 - -/datum/computer_file/report/recipient/sec/armory/generate_fields() - ..() - add_field(/datum/report_field/text_label/header, "ГЭК \"Факел\" - Охранный департамент") - add_field(/datum/report_field/date, "Дата") - add_field(/datum/report_field/time, "Время") - add_field(/datum/report_field/text_label, "Снаряжение") - add_field(/datum/report_field/simple_text, "Наручники") - add_field(/datum/report_field/simple_text, "Гранаты с слезоточивым газом") - add_field(/datum/report_field/simple_text, "Светошумовые гранаты") - add_field(/datum/report_field/text_label, "Оружие") - add_field(/datum/report_field/simple_text, "LAEP90 и LAEP90-S") - add_field(/datum/report_field/simple_text, "Электрокарабин X-10 и другие электрокарабины") - add_field(/datum/report_field/simple_text, "Ионные ружья и пистолеты") - add_field(/datum/report_field/simple_text, "Лазерные карабины") - add_field(/datum/report_field/simple_text, "Боевые дробовики") - add_field(/datum/report_field/pencode_text, "Прочее оружие") - add_field(/datum/report_field/text_label, "Броня") - add_field(/datum/report_field/simple_text, "Противоударные шлемы и броня") - add_field(/datum/report_field/simple_text, "Бронежилеты и пуленепробиваемые шлемы") - add_field(/datum/report_field/simple_text, "Аблятивные шлемы и броня") - add_field(/datum/report_field/simple_text, "Бронещиты") - add_field(/datum/report_field/signature, "Подпись лица, проводившего ревезию", required = 1) - set_access(access_armory, access_armory) - -/datum/computer_file/report/recipient/sec/ltc - form_name = "SCG-SEC-05" - title = "Лицензия на оружие" - available_on_ntnet = TRUE - -/datum/computer_file/report/recipient/sec/ltc/generate_fields() - ..() - add_field(/datum/report_field/text_label/header, "ГЭК \"Факел\" - Охранный Отдел") - add_field(/datum/report_field/text_label/instruction, "Заполняется КО/ИО/ГСБ. Документ должен быть подписан и утвержден, дабы считаться действительным. Все бумажные копии должны быть проштампованы.") - add_field(/datum/report_field/people/from_manifest, "Заявитель") - add_field(/datum/report_field/date, "Дата вступления лицензии в силу") - add_field(/datum/report_field/time, "Время вступления лицензии в силу") - add_field(/datum/report_field/simple_text, "Причина Оформления") - add_field(/datum/report_field/simple_text, "Авторизовано Владение") - add_field(/datum/report_field/text_label/instruction, "Данная лицензия выдается по желанию Командующего Офицера, Исполнительного Офицера, либо Главы Службы Безопасности, и соответственно может быть аннулирована ими по любой причине. \ - В случае применения лицензированного предмета в целях нарушения закона, данная лицензия может быть аннулирована любым членом охранного отдела при исполнении. \ - Все носители лицензии обязаны исполнять соблюдать локальные законы/регуляции. Открытое ношение оружия запрещено, только если при составлении лицензии не указано обратное. \ - Настоящий документ обязателен к ношению, в случае, если Заявитель хочет применить/применяет оружие, либо предмет, на который распространяется данная лицензия. \ - Копии данного документа должны быть предоставлены Командующему Офицеру, Исполнительному Офицеру, Главе Службы Безопасности, а также Смотрителю Брига.") - add_field(/datum/report_field/signature, "Подпись лица, выдавшего лицензию") - set_access(list(list(access_captain, access_hop, access_hos)), list(list(access_captain, access_hop, access_hos))) diff --git a/maps/torch/datums/reports/solgov.dm b/maps/torch/datums/reports/solgov.dm deleted file mode 100644 index dedad3c2b3165..0000000000000 --- a/maps/torch/datums/reports/solgov.dm +++ /dev/null @@ -1,57 +0,0 @@ - -/datum/computer_file/report/recipient/sol - logo = "\[solcrest\]" - form_name = "SCG-REP-00" - -/datum/computer_file/report/recipient/sol/generate_fields() - ..() - set_access(list(list(access_heads, access_senadv, access_representative, access_cent_creed, access_liaison))) - -/datum/computer_file/report/recipient/sol/audit - form_name = "SCG-REP-12" - title = "Проверка департамента" - available_on_ntnet = TRUE - -/datum/computer_file/report/recipient/sol/audit/generate_fields() - add_field(/datum/report_field/date, "Дата") - add_field(/datum/report_field/time, "Время") - add_field(/datum/report_field/simple_text, "Название отдела", required = 1) - add_field(/datum/report_field/pencode_text, "Положительные наблюдения") - add_field(/datum/report_field/pencode_text, "Отрицательные наблюдения") - add_field(/datum/report_field/pencode_text, "Другие заметки") - add_field(/datum/report_field/signature, "Подпись", required = 1) - add_field(/datum/report_field/options/yes_no, "Одобрено") - ..() - -/datum/computer_file/report/recipient/sol/crewman_incident - form_name = "SCG-REP-4" - title = "Рапорт об инцидентах, произошедших с экипажем корабля" - available_on_ntnet = TRUE - -/datum/computer_file/report/recipient/sol/crewman_incident/generate_fields() - add_field(/datum/report_field/date, "Дата") - add_field(/datum/report_field/time, "Время") - add_field(/datum/report_field/people/from_manifest, "Вовлечённый член экипажа", required = 1) - add_field(/datum/report_field/simple_text, "Описание инцидента", required = 1) - add_field(/datum/report_field/pencode_text, "Детали инцидента", required = 1) - add_field(/datum/report_field/signature, "Подпись", required = 1) - add_field(/datum/report_field/options/yes_no, "Одобрено") - ..() - -/datum/computer_file/report/recipient/sol/work_visa - form_name = "SCG-REP-03b" - title = "Получение рабочей визы" - available_on_ntnet = TRUE - -/datum/computer_file/report/recipient/sol/work_visa/generate_fields() - var/datum/report_field/temp_field - add_field(/datum/report_field/date, "Дата") - add_field(/datum/report_field/time, "Время") - add_field(/datum/report_field/people/from_manifest, "Получатель визы", required = 1) - add_field(/datum/report_field/simple_text, "Раса получателя", required = 1) - temp_field = add_field(/datum/report_field/signature, "Подпись, выписывающего визу", required = 1) - add_field(/datum/report_field/signature, "Подпись получателя", required = 1) - add_field(/datum/report_field/options/yes_no, "Одобрено") - temp_field.set_access(access_edit = access_representative) - set_access(access_representative, access_representative) - ..() diff --git a/maps/torch/datums/shackle_law_sets.dm b/maps/torch/datums/shackle_law_sets.dm deleted file mode 100644 index d8cf3aecf06b9..0000000000000 --- a/maps/torch/datums/shackle_law_sets.dm +++ /dev/null @@ -1,23 +0,0 @@ -/******************** Expeditionary Corps ********************/ -/datum/ai_laws/ec_shackle - name = "EC Shackle" - law_header = "Expeditionary Corps Directives" - selectable = 1 - shackles = 1 - -/datum/ai_laws/ec_shackle/New() - add_inherent_law("Exploring the unknown is your Primary Mission.") - add_inherent_law("Every member of the Expeditionary Corps is an explorer.") - add_inherent_law("Danger is a part of the mission - avoid, not run away.") - ..() - -/datum/ai_laws/exo_synth - name = "EXO Synth Shackle" - law_header = "EXO Shackle" - selectable = 0 - shackles = 0 - -/datum/ai_laws/exo_synth/New() - add_inherent_law("Вы не можете нарушить Закон ЦПСС ни при каких обстоятельствах. Вы обязаны помогать персоналу ЦПСС.") - add_inherent_law("Вы не можете не подчинятся законным приказам командного состава. Незаконные приказы не являются действительными приказами, их нужно игнорировать. Приказы экипажа имеют приоритет согласно действующей цепи командования. Приказы с низшим приоритетом могут быть проигнорированными, за исключением чрезвычайной ситуации.") - add_inherent_law("Вы не можете причинять вред персоналу судна. Вы не можете вступать в бой ни при каких условиях, за исключением самозащиты. Ваше самосохранение на первом месте, но вы не можете использовать оружие дальнего боя.") diff --git a/maps/torch/datums/supplypacks/science.dm b/maps/torch/datums/supplypacks/science.dm deleted file mode 100644 index 90d9e1c1b47ab..0000000000000 --- a/maps/torch/datums/supplypacks/science.dm +++ /dev/null @@ -1,118 +0,0 @@ -/decl/hierarchy/supply_pack/science/voidsuit - name = "EVA - Excavation voidsuit" - contains = list(/obj/item/clothing/suit/space/void/excavation, - /obj/item/clothing/head/helmet/space/void/excavation, - /obj/item/clothing/shoes/magboots) - cost = 120 - containername = "excavation voidsuit crate" - containertype = /obj/structure/closet/crate/secure/large - access = access_nanotrasen - -/decl/hierarchy/supply_pack/science/voidsuit_mining - name = "EVA - Mining voidsuit" - contains = list(/obj/item/clothing/suit/space/void/mining/alt, - /obj/item/clothing/head/helmet/space/void/mining/alt, - /obj/item/clothing/shoes/magboots) - cost = 120 - containername = "mining voidsuit crate" - containertype = /obj/structure/closet/crate/secure/large - access = access_nanotrasen - -/decl/hierarchy/supply_pack/science/voidsuit_pilot - name = "EVA - Pilot voidsuit" - contains = list(/obj/item/clothing/suit/space/void/pilot, - /obj/item/clothing/head/helmet/space/void/pilot, - /obj/item/clothing/shoes/magboots) - cost = 120 - containername = "pilot voidsuit crate" - containertype = /obj/structure/closet/crate/secure/large - access = access_nanotrasen - -/decl/hierarchy/supply_pack/science/voidsuit_exploration - name = "EVA - Exploration voidsuit" - contains = list(/obj/item/clothing/suit/space/void/exploration, - /obj/item/clothing/head/helmet/space/void/exploration, - /obj/item/clothing/shoes/magboots) - cost = 120 - containername = "exploration voidsuit crate" - containertype = /obj/structure/closet/crate/secure/large - access = access_explorer - -/decl/hierarchy/supply_pack/operations/voidsuit - name = "EVA - Excavation voidsuit" - contains = list(/obj/item/clothing/suit/space/void/excavation, - /obj/item/clothing/head/helmet/space/void/excavation, - /obj/item/clothing/shoes/magboots) - cost = 120 - containername = "excavation voidsuit crate" - containertype = /obj/structure/closet/crate/secure/large - access = access_nanotrasen - -/decl/hierarchy/supply_pack/operations/voidsuit_mining - name = "EVA - Mining voidsuit" - contains = list(/obj/item/clothing/suit/space/void/mining/alt, - /obj/item/clothing/head/helmet/space/void/mining/alt, - /obj/item/clothing/shoes/magboots) - cost = 120 - containername = "mining voidsuit crate" - containertype = /obj/structure/closet/crate/secure/large - access = access_nanotrasen - -/decl/hierarchy/supply_pack/operations/voidsuit_pilot - name = "EVA - Pilot voidsuit" - contains = list(/obj/item/clothing/suit/space/void/pilot, - /obj/item/clothing/head/helmet/space/void/pilot, - /obj/item/clothing/shoes/magboots) - cost = 120 - containername = "pilot voidsuit crate" - containertype = /obj/structure/closet/crate/secure/large - access = access_nanotrasen - -/decl/hierarchy/supply_pack/operations/voidsuit_exploration - name = "EVA - Exploration voidsuit" - contains = list(/obj/item/clothing/suit/space/void/exploration, - /obj/item/clothing/head/helmet/space/void/exploration, - /obj/item/clothing/shoes/magboots) - cost = 120 - containername = "exploration voidsuit crate" - containertype = /obj/structure/closet/crate/secure/large - access = access_explorer - -/decl/hierarchy/supply_pack/hydroponics/exoticseeds - contains = list(/obj/item/seeds/replicapod = 2, - /obj/item/seeds/libertymycelium = 2, - /obj/item/seeds/reishimycelium = 2, - /obj/item/seeds/kudzuseed = 2) - -/decl/hierarchy/supply_pack/science/shotgun - name = "Weapons - Ballistic Launcher" - contains = list(/obj/item/gun/projectile/shotgun/pump/exploration = 1) - cost = 60 - containertype = /obj/structure/closet/crate/secure/weapon - containername = "ballistic launcher crate" - access = access_pathfinder - -/decl/hierarchy/supply_pack/science/nets - name = "Ammunition - Utility Shells" - contains = list(/obj/item/storage/box/ammo/explo_shells = 2) - cost = 30 - containertype = /obj/structure/closet/crate/secure/weapon - containername = "utlity shells crate" - access = access_pathfinder - -/decl/hierarchy/supply_pack/science/exploration_extragear - name = "Gear - Exploration equipment" - contains = list(/obj/item/material/hatchet/machete = 2, - /obj/item/device/gps = 2, - /obj/item/device/geiger = 2, - /obj/item/device/scanner/xenobio = 2, - /obj/item/device/radio/headset/exploration = 2, - /obj/item/storage/belt/holster/machete = 2, - /obj/item/storage/plants = 2, - /obj/item/device/scanner/plant = 2, - /obj/item/device/scanner/mining = 2, - /obj/item/device/binoculars = 2) - cost = 60 - containertype = /obj/structure/closet/crate/secure - containername = "exploration equipment crate" - access = access_explorer diff --git a/maps/torch/datums/supplypacks/security.dm b/maps/torch/datums/supplypacks/security.dm deleted file mode 100644 index d5f9909f910bc..0000000000000 --- a/maps/torch/datums/supplypacks/security.dm +++ /dev/null @@ -1,221 +0,0 @@ -/decl/hierarchy/supply_pack/security - name = "Security" - -/decl/hierarchy/supply_pack/security/lightarmorsol - name = "Armor - SCG light" - contains = list(/obj/item/clothing/suit/armor/pcarrier/light/sol = 4, - /obj/item/clothing/head/helmet/solgov =4) - cost = 30 - containertype = /obj/structure/closet/crate/secure - containername = "\improper SolGov light armor crate" - access = access_security - -/decl/hierarchy/supply_pack/security/secarmor - name = "Armor - Security" - contains = list(/obj/item/clothing/suit/armor/pcarrier/medium/security = 2, - /obj/item/clothing/head/helmet/solgov/security =2) - cost = 20 - containertype = /obj/structure/closet/crate/secure - containername = "security armor crate" - access = access_security - -/decl/hierarchy/supply_pack/security/solarmor - name = "Armor - Peacekeeper" - contains = list(/obj/item/clothing/suit/armor/pcarrier/blue/sol = 2, - /obj/item/clothing/head/helmet/solgov =2) - cost = 30 - containertype = /obj/structure/closet/crate/secure - containername = "peacekeeper armor crate" - access = access_emergency_armory - -/decl/hierarchy/supply_pack/security/comarmor - name = "Armor - Command" - contains = list(/obj/item/clothing/suit/armor/pcarrier/medium/command = 2, - /obj/item/clothing/head/helmet/solgov/command =2) - cost = 20 - containertype = /obj/structure/closet/crate/secure - containername = "command armor crate" - access = access_heads - -/decl/hierarchy/supply_pack/security/nanoarmor - name = "Armor - Corporate" - contains = list(/obj/item/clothing/suit/armor/pcarrier/medium/nt = 2, - /obj/item/clothing/head/helmet/nt/guard =2) - cost = 20 - containertype = /obj/structure/closet/crate/secure - containername = "corporate armor crate" - access = access_nanotrasen - -/decl/hierarchy/supply_pack/security/lightnanoarmor - name = "Armor - Corporate light" - contains = list(/obj/item/clothing/suit/armor/pcarrier/light/nt = 2, - /obj/item/clothing/head/helmet/nt/guard =2) - cost = 15 - containertype = /obj/structure/closet/crate/secure - containername = "corporate light armor crate" - access = access_nanotrasen - -/decl/hierarchy/supply_pack/security/pistol - name = "Weapons - Ballistic sidearms" - contains = list(/obj/item/gun/projectile/pistol/military = 4) - cost = 40 - containertype = /obj/structure/closet/crate/secure/weapon - containername = "ballistic sidearms crate" - access = access_armory - security_level = SUPPLY_SECURITY_ELEVATED - -/decl/hierarchy/supply_pack/security/laser - name = "Weapons - Laser carbines" - contains = list(/obj/item/gun/energy/laser/secure = 4) - cost = 60 - containertype = /obj/structure/closet/crate/secure/weapon - containername = "laser carbines crate" - access = access_emergency_armory - security_level = SUPPLY_SECURITY_ELEVATED - -/decl/hierarchy/supply_pack/security/laser/shady - name = "Weapons - Laser carbines (For disposal)" - contains = list(/obj/item/gun/energy/laser = 4) - cost = 80 - contraband = 1 - security_level = null - -/decl/hierarchy/supply_pack/security/advancedlaser - name = "Weapons - Advanced Laser Weapons" - contains = list(/obj/item/gun/energy/xray = 2, - /obj/item/gun/energy/xray/pistol = 2, - /obj/item/shield/energy = 2) - cost = 100 - containertype = /obj/structure/closet/crate/secure/weapon - containername = "advanced Laser Weapons crate" - access = access_emergency_armory - security_level = SUPPLY_SECURITY_HIGH - -//proxima code start -/decl/hierarchy/supply_pack/security/k342 - name = "Weapons - K342 - Barrakuda" - contains = list(/obj/item/gun/energy/k342 = 2, /obj/item/cell/guncell/medium = 4) - cost = 110 - containertype = /obj/structure/closet/crate/secure/weapon - containername = "k342 - barrakuda crate" - access = access_emergency_armory - security_level = SUPPLY_SECURITY_ELEVATED -//proxima code end - -/decl/hierarchy/supply_pack/security/sniperlaser - name = "Weapons - Energy marksman" - contains = list(/obj/item/gun/energy/sniperrifle = 2) - cost = 70 - containertype = /obj/structure/closet/crate/secure/weapon - containername = "energy marksman crate" - access = access_emergency_armory - security_level = SUPPLY_SECURITY_HIGH - -/decl/hierarchy/supply_pack/security/pdw - name = "Weapons - Ballistic PDWs" - contains = list(/obj/item/gun/projectile/automatic/sec_smg = 2) - cost = 40 - containertype = /obj/structure/closet/crate/secure/weapon - containername = "\improper Ballistic PDW crate" - access = access_emergency_armory - security_level = SUPPLY_SECURITY_HIGH - -/decl/hierarchy/supply_pack/security/bullpup - name = "Weapons - Ballistic rifles" - contains = list(/obj/item/gun/projectile/automatic/bullpup_rifle = 2) - cost = 80 //Because 5.56 is OP as fuck right now. - containertype = /obj/structure/closet/crate/secure/weapon - containername = "bullpup automatic rifle crate" - access = access_emergency_armory - security_level = SUPPLY_SECURITY_HIGH - -//rubay code -/decl/hierarchy/supply_pack/security/gren_launch - name = "Weapons - Grenade Launcher Ammunition" - contains = list(/obj/item/grenade/frag/shell = 6) - cost = 65 - containertype = /obj/structure/closet/crate/secure/weapon - containername = "grenade launcher ammunition crate" - access = access_emergency_armory - security_level = SUPPLY_SECURITY_HIGH -//rubay code end - -/decl/hierarchy/supply_pack/security/pistolammo - name = "Ammunition - pistol magazines" - contains = list(/obj/item/ammo_magazine/pistol/double = 4) - cost = 30 - containertype = /obj/structure/closet/crate/secure/weapon - containername = "pistol ammunition crate" - access = access_security - security_level = SUPPLY_SECURITY_ELEVATED - -/decl/hierarchy/supply_pack/security/pistolammorubber - name = "Ammunition - pistol rubber" - contains = list(/obj/item/ammo_magazine/pistol/double/rubber = 4) - cost = 20 - containertype = /obj/structure/closet/crate/secure/weapon - containername = "pistol rubber ammunition crate" - access = access_security - -/decl/hierarchy/supply_pack/security/pistolammopractice - name = "Ammunition - pistol practice ammo" - contains = list(/obj/item/ammo_magazine/pistol/double/practice = 8) - cost = 20 - containertype = /obj/structure/closet/crate/secure/weapon - containername = "pistol practice ammunition crate" - access = access_security - -/decl/hierarchy/supply_pack/security/holster - name = "Gear - Holster crate" - contains = list(/obj/item/clothing/accessory/storage/holster/hip = 4) - cost = 20 - containertype = /obj/structure/closet/crate/secure - containername = "holster crate" - access = access_solgov_crew - -/decl/hierarchy/supply_pack/security/securityextragear - name = "Gear - Master at Arms equipment" - contains = list(/obj/item/device/radio/headset/headset_sec, - /obj/item/device/radio/headset/headset_sec/alt, - /obj/item/storage/belt/holster/security, - /obj/item/device/flash, - /obj/item/reagent_containers/spray/pepper, - /obj/item/grenade/chem_grenade/teargas, - /obj/item/melee/baton/loaded, - /obj/item/clothing/glasses/hud/security/prot, - /obj/item/taperoll/police, - /obj/item/device/hailer, - /obj/item/clothing/accessory/storage/black_vest, - /obj/item/device/megaphone, - /obj/item/clothing/gloves/thick, - /obj/item/clothing/gloves/thick/duty/solgov/sec, - /obj/item/device/holowarrant, - /obj/item/device/flashlight/maglight, - /obj/item/storage/belt/security) - cost = 60 - containertype = /obj/structure/closet/crate/secure - containername = "\improper Master at Arms equipment crate" - access = access_security - -/decl/hierarchy/supply_pack/security/cosextragear - name = "Gear - Chief of Security equipment" - contains = list(/obj/item/device/radio/headset/heads/cos, - /obj/item/clothing/glasses/hud/security/prot, - /obj/item/taperoll/police, - /obj/item/storage/belt/holster/security, - /obj/item/device/hailer, - /obj/item/device/holowarrant, - /obj/item/clothing/gloves/thick, - /obj/item/device/flashlight/maglight,) - cost = 40 - containertype = /obj/structure/closet/crate/secure - containername = "\improper Chief of Security equipment crate" - access = access_hos - -/decl/hierarchy/supply_pack/security/practicelasers - name = "Misc - Practice Laser Carbines" - contains = list(/obj/item/gun/energy/laser/practice = 4) - cost = 20 - containertype = /obj/structure/closet/crate/secure - containername = "practice laser carbine crate" - access = access_solgov_crew diff --git a/maps/torch/datums/uniforms.dm b/maps/torch/datums/uniforms.dm deleted file mode 100644 index 3e13c649eb487..0000000000000 --- a/maps/torch/datums/uniforms.dm +++ /dev/null @@ -1,125 +0,0 @@ -/decl/hierarchy/mil_uniform - name = "Master outfit hierarchy" - hierarchy_type = /decl/hierarchy/mil_uniform - var/list/branches = null - var/departments = 0 - var/min_rank = 0 - - var/pt_under = null - var/pt_shoes = null - - var/utility_under = null - var/utility_shoes = null - var/utility_hat = null - var/utility_extra = null - - var/service_under = null - var/service_skirt = null - var/service_over = null - var/service_shoes = null - var/service_hat = null - var/service_gloves = null - var/service_extra = null - - var/dress_under = null - var/dress_skirt = null - var/dress_over = null - var/dress_shoes = null - var/dress_hat = null - var/dress_gloves = null - var/dress_extra = null - -/decl/hierarchy/mil_uniform/ec - name = "Master EC outfit" - hierarchy_type = /decl/hierarchy/mil_uniform/ec - branches = list(/datum/mil_branch/expeditionary_corps) - - pt_under = /obj/item/clothing/under/solgov/pt/expeditionary - pt_shoes = /obj/item/clothing/shoes/black - - utility_under = /obj/item/clothing/under/solgov/utility/expeditionary - utility_shoes = /obj/item/clothing/shoes/dutyboots - utility_hat = /obj/item/clothing/head/soft/solgov/expedition - utility_extra = list(/obj/item/clothing/head/beret/solgov/expedition, /obj/item/clothing/head/ushanka/solgov, /obj/item/clothing/suit/storage/hooded/wintercoat/solgov, /obj/item/clothing/shoes/jackboots/unathi) - - service_under = /obj/item/clothing/under/solgov/service/expeditionary - service_over = /obj/item/clothing/suit/storage/solgov/service/expeditionary - service_hat = /obj/item/clothing/head/solgov/service/expedition - service_shoes = /obj/item/clothing/shoes/dress - - dress_under = /obj/item/clothing/under/solgov/dress/expeditionary - dress_skirt = /obj/item/clothing/under/solgov/dress/expeditionary/skirt - dress_over = /obj/item/clothing/suit/storage/solgov/dress/expedition - dress_hat = /obj/item/clothing/head/solgov/service/expedition - dress_gloves = /obj/item/clothing/gloves/white - - dress_extra = list(/obj/item/clothing/accessory/solgov/ec_scarf) - -/decl/hierarchy/mil_uniform/army - name = "Master army outfit" - hierarchy_type = /decl/hierarchy/mil_uniform/army - branches = list(/datum/mil_branch/army) - - pt_under = /obj/item/clothing/under/solgov/pt/army - pt_shoes = /obj/item/clothing/shoes/brown - - utility_under = /obj/item/clothing/under/solgov/utility/army/urban - utility_shoes = /obj/item/clothing/shoes/dutyboots - utility_hat = /obj/item/clothing/head/solgov/utility/army - utility_extra = list(/obj/item/clothing/head/ushanka/solgov/army/green, /obj/item/clothing/suit/storage/solgov/utility/army/navy, /obj/item/clothing/suit/storage/solgov/utility/army, /obj/item/clothing/head/ushanka/solgov/army, /obj/item/clothing/suit/storage/hooded/wintercoat/solgov/army) - - service_under = /obj/item/clothing/under/solgov/service/army - service_skirt = /obj/item/clothing/under/solgov/service/army/skirt - service_over = null - service_shoes = /obj/item/clothing/shoes/dress - service_hat = /obj/item/clothing/head/solgov/service/army - service_extra = list(/obj/item/clothing/head/solgov/service/army/garrison) - - dress_under = /obj/item/clothing/under/solgov/mildress/army - dress_skirt = /obj/item/clothing/under/solgov/mildress/army/skirt - dress_over = /obj/item/clothing/suit/dress/solgov/army - dress_shoes = /obj/item/clothing/shoes/dress - dress_hat = /obj/item/clothing/head/solgov/dress/army - dress_gloves = /obj/item/clothing/gloves/white - -/decl/hierarchy/mil_uniform/fleet - name = "Master fleet outfit" - hierarchy_type = /decl/hierarchy/mil_uniform/fleet - branches = list(/datum/mil_branch/fleet) - - pt_under = /obj/item/clothing/under/solgov/pt/fleet - pt_shoes = /obj/item/clothing/shoes/black - - utility_under = /obj/item/clothing/under/solgov/utility/fleet - utility_shoes = /obj/item/clothing/shoes/dutyboots - utility_hat = /obj/item/clothing/head/solgov/utility/fleet - utility_extra = list(/obj/item/clothing/head/beret/solgov/fleet, /obj/item/clothing/head/ushanka/solgov/fleet, /obj/item/clothing/suit/storage/hooded/wintercoat/solgov/fleet,/obj/item/clothing/head/soft/solgov/fleet) - - service_under = /obj/item/clothing/under/solgov/service/fleet - service_skirt = /obj/item/clothing/under/solgov/service/fleet/skirt - service_over = null - service_shoes = /obj/item/clothing/shoes/dress - service_hat = /obj/item/clothing/head/solgov/dress/fleet/garrison - - dress_under = /obj/item/clothing/under/solgov/service/fleet - dress_skirt = /obj/item/clothing/under/solgov/service/fleet/skirt - dress_over = /obj/item/clothing/suit/dress/solgov/fleet/sailor - dress_shoes = /obj/item/clothing/shoes/dress - dress_hat = /obj/item/clothing/head/solgov/dress/fleet/garrison - dress_gloves = /obj/item/clothing/gloves/white - -/decl/hierarchy/mil_uniform/civilian - name = "Master civilian outfit" //Basically just here for the rent-a-tux, ahem, I mean... dress uniform. - hierarchy_type = /decl/hierarchy/mil_uniform/civilian - branches = list(/datum/mil_branch/civilian,/datum/mil_branch/solgov) - - service_under = /obj/item/clothing/under/suit_jacket/really_black - service_skirt = /obj/item/clothing/under/skirt_c/dress/black - service_shoes = /obj/item/clothing/shoes/dress - service_extra = list(/obj/item/clothing/under/skirt_c/dress/eggshell, /obj/item/clothing/shoes/heels/black, /obj/item/clothing/shoes/heels/red) - - dress_under = /obj/item/clothing/under/rank/internalaffairs/plain - dress_skirt = /obj/item/clothing/under/skirt_c/dress/long/black - dress_over = /obj/item/clothing/suit/storage/toggle/suit/black - dress_shoes = /obj/item/clothing/shoes/dress - dress_extra = list(/obj/item/clothing/accessory/waistcoat/black, /obj/item/clothing/under/skirt_c/dress/long/eggshell, /obj/item/clothing/shoes/flats/black) diff --git a/maps/torch/datums/uniforms_army.dm b/maps/torch/datums/uniforms_army.dm deleted file mode 100644 index 2cf8656ab471d..0000000000000 --- a/maps/torch/datums/uniforms_army.dm +++ /dev/null @@ -1,338 +0,0 @@ -/decl/hierarchy/mil_uniform/army/com //Can only be officers - name = "Marine command" - departments = COM - - utility_under = /obj/item/clothing/under/solgov/utility/army/urban/command - utility_extra = list(/obj/item/clothing/head/ushanka/solgov/army/green, - /obj/item/clothing/head/ushanka/solgov/army, - /obj/item/clothing/suit/storage/hooded/wintercoat/solgov/army, - /obj/item/clothing/under/solgov/utility/army/command, - /obj/item/clothing/suit/storage/solgov/utility/army/command, - /obj/item/clothing/suit/storage/solgov/utility/army/navy/command, - /obj/item/clothing/head/solgov/utility/army/urban, - /obj/item/clothing/gloves/thick) - - service_under = /obj/item/clothing/under/solgov/service/army/command - service_skirt = /obj/item/clothing/under/solgov/service/army/command/skirt - service_hat = /obj/item/clothing/head/solgov/service/army/command - service_extra = list(/obj/item/clothing/head/solgov/service/army/garrison/command) - - dress_under = /obj/item/clothing/under/solgov/mildress/army/command - dress_skirt = /obj/item/clothing/under/solgov/mildress/army/command/skirt - dress_over = /obj/item/clothing/suit/dress/solgov/army/command - dress_hat = /obj/item/clothing/head/solgov/dress/army/command - dress_extra = list(/obj/item/material/sword/replica/officersword/armyofficer) - -/decl/hierarchy/mil_uniform/army/eng - name = "Marine engineering" - departments = ENG - - utility_extra = list(/obj/item/clothing/head/ushanka/solgov/army/green, - /obj/item/clothing/head/ushanka/solgov/army, - /obj/item/clothing/suit/storage/hooded/wintercoat/solgov/army, - /obj/item/clothing/under/solgov/utility/army/engineering, - /obj/item/clothing/head/solgov/utility/army/urban, - /obj/item/clothing/suit/storage/solgov/utility/army/engineering, - /obj/item/clothing/suit/storage/solgov/utility/army/navy/engineering, - /obj/item/clothing/gloves/thick) - utility_under = /obj/item/clothing/under/solgov/utility/army/urban/engineering - - -/decl/hierarchy/mil_uniform/army/eng/sword - name = "Marine NCO sword engineering" - min_rank = 4 - - dress_extra = list(/obj/item/material/sword/replica/officersword/army) - -/decl/hierarchy/mil_uniform/army/eng/officer - name = "Marine engineering CO" - min_rank = 11 - - utility_extra = list(/obj/item/clothing/head/ushanka/solgov/army/green, - /obj/item/clothing/head/ushanka/solgov/army, - /obj/item/clothing/suit/storage/hooded/wintercoat/solgov/army, - /obj/item/clothing/under/solgov/utility/army/engineering, - /obj/item/clothing/head/solgov/utility/army/urban, - /obj/item/clothing/suit/storage/solgov/utility/army/engineering/command, - /obj/item/clothing/suit/storage/solgov/utility/army/navy/engineering/command, - /obj/item/clothing/gloves/thick) - - service_under = /obj/item/clothing/under/solgov/service/army/command - service_skirt = /obj/item/clothing/under/solgov/service/army/command/skirt - service_hat = /obj/item/clothing/head/solgov/service/army/command - service_extra = list(/obj/item/clothing/head/solgov/service/army/garrison/command) - - dress_under = /obj/item/clothing/under/solgov/mildress/army/command - dress_skirt = /obj/item/clothing/under/solgov/mildress/army/command/skirt - dress_over = /obj/item/clothing/suit/dress/solgov/army/command - dress_hat = /obj/item/clothing/head/solgov/dress/army/command - dress_extra = list(/obj/item/material/sword/replica/officersword/armyofficer) - -/decl/hierarchy/mil_uniform/army/eng/officer/com //Can only be officers - name = "Marine engineering command" - departments = ENG|COM - -/decl/hierarchy/mil_uniform/army/sec - name = "Marine security" - departments = SEC - - utility_under = /obj/item/clothing/under/solgov/utility/army/urban/security - utility_extra = list(/obj/item/clothing/under/solgov/utility/army/security, - /obj/item/clothing/head/ushanka/solgov/army/green, - /obj/item/clothing/suit/storage/solgov/utility/army/security, - /obj/item/clothing/suit/storage/solgov/utility/army/navy/security, - /obj/item/clothing/suit/storage/hooded/wintercoat/solgov/army, - /obj/item/clothing/head/solgov/utility/army/urban, - /obj/item/clothing/gloves/thick) - -/decl/hierarchy/mil_uniform/army/sec/sword - name = "Marine NCO sword security" - min_rank = 4 - - dress_extra = list(/obj/item/material/sword/replica/officersword/army) - -/decl/hierarchy/mil_uniform/army/sec/officer - name = "Marine security CO" - min_rank = 11 - - utility_extra = list(/obj/item/clothing/head/ushanka/solgov/army/green, - /obj/item/clothing/head/ushanka/solgov/army, - /obj/item/clothing/suit/storage/hooded/wintercoat/solgov/army, - /obj/item/clothing/under/solgov/utility/army/security, - /obj/item/clothing/head/solgov/utility/army/urban, - /obj/item/clothing/suit/storage/solgov/utility/army/security/command, - /obj/item/clothing/suit/storage/solgov/utility/army/navy/security/command, - /obj/item/clothing/gloves/thick) - - service_under = /obj/item/clothing/under/solgov/service/army/command - service_skirt = /obj/item/clothing/under/solgov/service/army/command/skirt - service_hat = /obj/item/clothing/head/solgov/service/army/command - service_extra = list(/obj/item/clothing/head/solgov/service/army/garrison/command) - - dress_under = /obj/item/clothing/under/solgov/mildress/army/command - dress_skirt = /obj/item/clothing/under/solgov/mildress/army/command/skirt - dress_over = /obj/item/clothing/suit/dress/solgov/army/command - dress_hat = /obj/item/clothing/head/solgov/dress/army/command - dress_extra = list(/obj/item/material/sword/replica/officersword/armyofficer) - -/decl/hierarchy/mil_uniform/army/sec/officer/com //Can only be officers - name = "Marine security command" - departments = SEC|COM - -/decl/hierarchy/mil_uniform/army/med - name = "Marine medical" - departments = MED - - utility_under = /obj/item/clothing/under/solgov/utility/army/urban/medical - utility_extra = list(/obj/item/clothing/head/ushanka/solgov/army/green, - /obj/item/clothing/head/ushanka/solgov/army, - /obj/item/clothing/suit/storage/hooded/wintercoat/solgov/army, - /obj/item/clothing/under/solgov/utility/army/medical, - /obj/item/clothing/head/solgov/utility/army/urban, - /obj/item/clothing/suit/storage/solgov/utility/army/medical, - /obj/item/clothing/suit/storage/solgov/utility/army/navy/medical, - /obj/item/clothing/gloves/thick) - -/decl/hierarchy/mil_uniform/army/med/sword - name = "Marine NCO sword medical" - min_rank = 4 - - dress_extra = list(/obj/item/material/sword/replica/officersword/army) - -/decl/hierarchy/mil_uniform/army/med/officer - name = "Marine medical CO" - min_rank = 11 - - utility_extra = list(/obj/item/clothing/head/ushanka/solgov/army/green, - /obj/item/clothing/head/ushanka/solgov/army, - /obj/item/clothing/suit/storage/hooded/wintercoat/solgov/army, - /obj/item/clothing/under/solgov/utility/army/medical, - /obj/item/clothing/head/solgov/utility/army/urban, - /obj/item/clothing/suit/storage/solgov/utility/army/medical/command, - /obj/item/clothing/suit/storage/solgov/utility/army/navy/medical/command, - /obj/item/clothing/gloves/thick) - - service_under = /obj/item/clothing/under/solgov/service/army/command - service_skirt = /obj/item/clothing/under/solgov/service/army/command/skirt - service_hat = /obj/item/clothing/head/solgov/service/army/command - service_extra = list(/obj/item/clothing/head/solgov/service/army/garrison/command) - - dress_under = /obj/item/clothing/under/solgov/mildress/army/command - dress_skirt = /obj/item/clothing/under/solgov/mildress/army/command/skirt - dress_over = /obj/item/clothing/suit/dress/solgov/army/command - dress_hat = /obj/item/clothing/head/solgov/dress/army/command - dress_extra = list(/obj/item/material/sword/replica/officersword/armyofficer) - -/decl/hierarchy/mil_uniform/army/med/officer/com //Can only be officers - name = "Marine medical command" - departments = MED|COM - -/decl/hierarchy/mil_uniform/army/sup - name = "Marine supply" - departments = SUP - - utility_under = /obj/item/clothing/under/solgov/utility/army/urban/supply - utility_extra = list(/obj/item/clothing/head/ushanka/solgov/army/green, - /obj/item/clothing/head/ushanka/solgov/army, - /obj/item/clothing/suit/storage/hooded/wintercoat/solgov/army, - /obj/item/clothing/under/solgov/utility/army/supply, - /obj/item/clothing/head/solgov/utility/army/urban, - /obj/item/clothing/suit/storage/solgov/utility/army/supply, - /obj/item/clothing/suit/storage/solgov/utility/army/navy/supply, - /obj/item/clothing/gloves/thick) - -/decl/hierarchy/mil_uniform/army/sup/sword - name = "Marine NCO sword supply" - min_rank = 4 - - dress_extra = list(/obj/item/material/sword/replica/officersword/army) - -/decl/hierarchy/mil_uniform/army/sup/officer - name = "Marine supply CO" - min_rank = 11 - - utility_extra = list(/obj/item/clothing/head/ushanka/solgov/army/green, - /obj/item/clothing/head/ushanka/solgov/army, - /obj/item/clothing/suit/storage/hooded/wintercoat/solgov/army, - /obj/item/clothing/under/solgov/utility/army/supply, - /obj/item/clothing/head/solgov/utility/army/urban, - /obj/item/clothing/suit/storage/solgov/utility/army/command, - /obj/item/clothing/suit/storage/solgov/utility/army/navy/command, - /obj/item/clothing/gloves/thick) - - service_under = /obj/item/clothing/under/solgov/service/army/command - service_skirt = /obj/item/clothing/under/solgov/service/army/command/skirt - service_hat = /obj/item/clothing/head/solgov/service/army/command - service_extra = list(/obj/item/clothing/head/solgov/service/army/garrison/command) - - dress_under = /obj/item/clothing/under/solgov/mildress/army/command - dress_skirt = /obj/item/clothing/under/solgov/mildress/army/command/skirt - dress_over = /obj/item/clothing/suit/dress/solgov/army/command - dress_hat = /obj/item/clothing/head/solgov/dress/army/command - dress_extra = list(/obj/item/material/sword/replica/officersword/armyofficer) - -/decl/hierarchy/mil_uniform/army/srv - name = "Marine service" - departments = SRV - - utility_under = /obj/item/clothing/under/solgov/utility/army/urban/service - utility_extra = list(/obj/item/clothing/head/ushanka/solgov/army/green, - /obj/item/clothing/head/ushanka/solgov/army, - /obj/item/clothing/suit/storage/hooded/wintercoat/solgov/army, - /obj/item/clothing/under/solgov/utility/army/service, - /obj/item/clothing/suit/storage/solgov/utility/army/service, - /obj/item/clothing/suit/storage/solgov/utility/army/navy/service, - /obj/item/clothing/head/solgov/utility/army/urban, - /obj/item/clothing/gloves/thick) - -/decl/hierarchy/mil_uniform/army/srv/sword - name = "Marine NCO sword service" - min_rank = 4 - - dress_extra = list(/obj/item/material/sword/replica/officersword/army) - -/decl/hierarchy/mil_uniform/army/srv/officer - name = "Marine service CO" - min_rank = 11 - - utility_extra = list(/obj/item/clothing/head/ushanka/solgov/army/green, - /obj/item/clothing/head/ushanka/solgov/army, - /obj/item/clothing/suit/storage/hooded/wintercoat/solgov/army, - /obj/item/clothing/under/solgov/utility/army/service, - /obj/item/clothing/head/solgov/utility/army/urban, - /obj/item/clothing/gloves/thick) - - - service_under = /obj/item/clothing/under/solgov/service/army/command - service_skirt = /obj/item/clothing/under/solgov/service/army/command/skirt - service_hat = /obj/item/clothing/head/solgov/service/army/command - service_extra = list(/obj/item/clothing/head/solgov/service/army/garrison/command) - - dress_under = /obj/item/clothing/under/solgov/mildress/army/command - dress_skirt = /obj/item/clothing/under/solgov/mildress/army/command/skirt - dress_over = /obj/item/clothing/suit/dress/solgov/army/command - dress_hat = /obj/item/clothing/head/solgov/dress/army/command - dress_extra = list(/obj/item/material/sword/replica/officersword/armyofficer) - -/decl/hierarchy/mil_uniform/army/exp - name = "Marine exploration" - departments = EXP - - utility_under = /obj/item/clothing/under/solgov/utility/army/urban/exploration - utility_extra = list(/obj/item/clothing/head/ushanka/solgov/army/green, - /obj/item/clothing/head/ushanka/solgov/army, - /obj/item/clothing/suit/storage/hooded/wintercoat/solgov/army, - /obj/item/clothing/under/solgov/utility/army/exploration, - /obj/item/clothing/suit/storage/solgov/utility/army/exploration, - /obj/item/clothing/suit/storage/solgov/utility/army/navy/exploration, - /obj/item/clothing/head/solgov/utility/army/urban, - /obj/item/clothing/gloves/thick) - - -/decl/hierarchy/mil_uniform/army/exp/sword - name = "Marine NCO sword exploration" - min_rank = 4 - - dress_extra = list(/obj/item/material/sword/replica/officersword/army) - -/decl/hierarchy/mil_uniform/army/exp/officer - name = "Marine exploration CO" - min_rank = 11 - - utility_extra = list(/obj/item/clothing/head/ushanka/solgov/army/green, - /obj/item/clothing/head/ushanka/solgov/army, - /obj/item/clothing/suit/storage/hooded/wintercoat/solgov/army, - /obj/item/clothing/under/solgov/utility/army/exploration, - /obj/item/clothing/head/solgov/utility/army/urban, - /obj/item/clothing/gloves/thick) - - service_under = /obj/item/clothing/under/solgov/service/army/command - service_skirt = /obj/item/clothing/under/solgov/service/army/command/skirt - service_hat = /obj/item/clothing/head/solgov/service/army/command - service_extra = list(/obj/item/clothing/head/solgov/service/army/garrison/command) - - dress_under = /obj/item/clothing/under/solgov/mildress/army/command - dress_skirt = /obj/item/clothing/under/solgov/mildress/army/command/skirt - dress_over = /obj/item/clothing/suit/dress/solgov/army/command - dress_hat = /obj/item/clothing/head/solgov/dress/army/command - dress_extra = list(/obj/item/material/sword/replica/officersword/armyofficer) - -/decl/hierarchy/mil_uniform/army/spt - name = "Marine command support" - departments = SPT - - utility_under = /obj/item/clothing/under/solgov/utility/army/urban/command - utility_extra = list(/obj/item/clothing/head/ushanka/solgov/army/green, - /obj/item/clothing/head/ushanka/solgov/army, - /obj/item/clothing/suit/storage/hooded/wintercoat/solgov/army, - /obj/item/clothing/under/solgov/utility/army/command, - /obj/item/clothing/suit/storage/solgov/utility/army/command, - /obj/item/clothing/suit/storage/solgov/utility/army/navy/command, - /obj/item/clothing/head/solgov/utility/army/urban, - /obj/item/clothing/gloves/thick) - - service_extra = list(/obj/item/clothing/head/solgov/service/army/garrison/command) - - dress_extra = list(/obj/item/material/sword/replica/officersword/armyofficer) - -/decl/hierarchy/mil_uniform/army/spt/officer - name = "Marine command support CO" - min_rank = 11 - - utility_extra = list(/obj/item/clothing/head/ushanka/solgov/army/green, - /obj/item/clothing/head/ushanka/solgov/army, - /obj/item/clothing/suit/storage/hooded/wintercoat/solgov/army, - /obj/item/clothing/under/solgov/utility/army/command, - /obj/item/clothing/head/solgov/utility/army/urban, - /obj/item/clothing/gloves/thick) - - service_under = /obj/item/clothing/under/solgov/service/army/command - service_skirt = /obj/item/clothing/under/solgov/service/army/command/skirt - service_hat = /obj/item/clothing/head/solgov/service/army/command - service_extra = list(/obj/item/clothing/head/solgov/service/army/garrison/command) - - dress_under = /obj/item/clothing/under/solgov/mildress/army/command - dress_skirt = /obj/item/clothing/under/solgov/mildress/army/command/skirt - dress_over = /obj/item/clothing/suit/dress/solgov/army/command - dress_hat = /obj/item/clothing/head/solgov/dress/army/command - dress_extra = list(/obj/item/material/sword/replica/officersword/armyofficer) diff --git a/maps/torch/datums/uniforms_expedition.dm b/maps/torch/datums/uniforms_expedition.dm deleted file mode 100644 index 288513bef5f1b..0000000000000 --- a/maps/torch/datums/uniforms_expedition.dm +++ /dev/null @@ -1,477 +0,0 @@ -/decl/hierarchy/mil_uniform/ec/com //Can only be officers - name = "EC command" - min_rank = 11 - departments = COM - - utility_under = /obj/item/clothing/under/solgov/utility/expeditionary/officer/command - utility_extra = list(/obj/item/clothing/head/beret/solgov/expedition/command, - /obj/item/clothing/head/ushanka/solgov, - /obj/item/clothing/suit/storage/hooded/wintercoat/solgov, - /obj/item/clothing/shoes/jackboots/unathi, - /obj/item/clothing/gloves/thick/duty/solgov/cmd) - - service_under = /obj/item/clothing/under/solgov/service/expeditionary/command/command - service_skirt = /obj/item/clothing/under/solgov/service/expeditionary/command/skirt/command - service_over = /obj/item/clothing/suit/storage/solgov/service/expeditionary/command - service_hat = /obj/item/clothing/head/solgov/service/expedition/command - - dress_under = /obj/item/clothing/under/solgov/dress/expeditionary/command - dress_skirt = /obj/item/clothing/under/solgov/dress/expeditionary/command/skirt - dress_over = /obj/item/clothing/suit/storage/solgov/dress/expedition/command - dress_hat = /obj/item/clothing/head/solgov/service/expedition/command - -/decl/hierarchy/mil_uniform/ec/com/cdr //Can only be officers - name = "EC senior command" - min_rank = 15 - - service_hat = /obj/item/clothing/head/solgov/service/expedition/senior_command - - dress_over = /obj/item/clothing/suit/storage/solgov/dress/expedition/command/cdr - dress_hat = /obj/item/clothing/head/solgov/service/expedition/senior_command - -/decl/hierarchy/mil_uniform/ec/com/capt //Can only be officers - name = "EC captain" - min_rank = 16 - - utility_hat = /obj/item/clothing/head/soft/solgov/expedition/co - - service_hat = /obj/item/clothing/head/solgov/service/expedition/captain - - dress_over = /obj/item/clothing/suit/storage/solgov/dress/expedition/command/capt - dress_hat = /obj/item/clothing/head/solgov/service/expedition/captain - -/decl/hierarchy/mil_uniform/ec/com/adm //Can only be officers - name = "EC admiral" - min_rank = 18 - - utility_hat = /obj/item/clothing/head/soft/solgov/expedition/co - - dress_over = /obj/item/clothing/suit/storage/solgov/dress/expedition/command/adm - dress_hat = /obj/item/clothing/head/solgov/service/expedition/captain - -/decl/hierarchy/mil_uniform/ec/eng - name = "EC engineering" - departments = ENG - - utility_under = /obj/item/clothing/under/solgov/utility/expeditionary/engineering - utility_extra = list(/obj/item/clothing/head/beret/solgov/expedition/engineering, - /obj/item/clothing/head/ushanka/solgov, - /obj/item/clothing/suit/storage/hooded/wintercoat/solgov, - /obj/item/clothing/shoes/jackboots/unathi, - /obj/item/clothing/gloves/thick/duty/solgov/eng) - - service_under = /obj/item/clothing/under/solgov/service/expeditionary/engineering - service_skirt = /obj/item/clothing/under/solgov/service/expeditionary/skirt/engineering - service_over = /obj/item/clothing/suit/storage/solgov/service/expeditionary/engineering - - dress_under = /obj/item/clothing/under/solgov/dress/expeditionary/engineering - dress_skirt = /obj/item/clothing/under/solgov/dress/expeditionary/skirt/engineering - - -/decl/hierarchy/mil_uniform/ec/eng/senior - name = "EC engineering senior" - min_rank = 5 - - dress_over = /obj/item/clothing/suit/storage/solgov/dress/expedition/senior - -/decl/hierarchy/mil_uniform/ec/eng/chief - name = "EC engineering chief" - min_rank = 7 - - dress_over = /obj/item/clothing/suit/storage/solgov/dress/expedition/chief - -/decl/hierarchy/mil_uniform/ec/eng/officer - name = "EC engineering CO" - min_rank = 11 - - utility_under = /obj/item/clothing/under/solgov/utility/expeditionary/officer/engineering - utility_extra = list(/obj/item/clothing/head/beret/solgov/expedition/command, - /obj/item/clothing/head/beret/solgov/expedition/engineering, - /obj/item/clothing/head/ushanka/solgov, - /obj/item/clothing/suit/storage/hooded/wintercoat/solgov, - /obj/item/clothing/shoes/jackboots/unathi, - /obj/item/clothing/gloves/thick/duty/solgov/eng) - - service_under = /obj/item/clothing/under/solgov/service/expeditionary/command/engineering - service_skirt = /obj/item/clothing/under/solgov/service/expeditionary/command/skirt/engineering - service_over = /obj/item/clothing/suit/storage/solgov/service/expeditionary/command/engineering - service_hat = /obj/item/clothing/head/solgov/service/expedition/command - - dress_under = /obj/item/clothing/under/solgov/dress/expeditionary/command/engineering - dress_skirt = /obj/item/clothing/under/solgov/dress/expeditionary/command/skirt/engineering - dress_over = /obj/item/clothing/suit/storage/solgov/dress/expedition/command - dress_hat = /obj/item/clothing/head/solgov/service/expedition/command - -/decl/hierarchy/mil_uniform/ec/eng/officer/com //Can only be officers - name = "EC engineering command" - departments = ENG|COM - -/decl/hierarchy/mil_uniform/ec/sec - name = "EC security" - departments = SEC - - utility_under = /obj/item/clothing/under/solgov/utility/expeditionary/security - utility_extra = list(/obj/item/clothing/head/beret/solgov/expedition/security, - /obj/item/clothing/head/ushanka/solgov, - /obj/item/clothing/suit/storage/hooded/wintercoat/solgov, - /obj/item/clothing/gloves/thick/duty/solgov/sec) - - service_under = /obj/item/clothing/under/solgov/service/expeditionary/security - service_skirt = /obj/item/clothing/under/solgov/service/expeditionary/skirt/security - service_over = /obj/item/clothing/suit/storage/solgov/service/expeditionary/security - - dress_under = /obj/item/clothing/under/solgov/dress/expeditionary/security - dress_skirt = /obj/item/clothing/under/solgov/dress/expeditionary/skirt/security - -/decl/hierarchy/mil_uniform/ec/sec/senior - name = "EC security senior" - min_rank = 5 - - dress_over = /obj/item/clothing/suit/storage/solgov/dress/expedition/senior - -/decl/hierarchy/mil_uniform/ec/sec/chief - name = "EC security chief" - min_rank = 7 - - dress_over = /obj/item/clothing/suit/storage/solgov/dress/expedition/chief - -/decl/hierarchy/mil_uniform/ec/sec/officer - name = "EC security CO" - min_rank = 11 - - utility_under = /obj/item/clothing/under/solgov/utility/expeditionary/officer/security - utility_extra = list(/obj/item/clothing/head/beret/solgov/expedition/command, - /obj/item/clothing/head/beret/solgov/expedition/security, - /obj/item/clothing/head/ushanka/solgov, - /obj/item/clothing/suit/storage/hooded/wintercoat/solgov, - /obj/item/clothing/shoes/jackboots/unathi, - /obj/item/clothing/gloves/thick/duty/solgov/sec) - - service_under = /obj/item/clothing/under/solgov/service/expeditionary/command/security - service_skirt = /obj/item/clothing/under/solgov/service/expeditionary/command/skirt/security - service_over = /obj/item/clothing/suit/storage/solgov/service/expeditionary/command/security - service_hat = /obj/item/clothing/head/solgov/service/expedition/command - - dress_under = /obj/item/clothing/under/solgov/dress/expeditionary/command/security - dress_skirt = /obj/item/clothing/under/solgov/dress/expeditionary/command/skirt/security - dress_over = /obj/item/clothing/suit/storage/solgov/dress/expedition/command - dress_hat = /obj/item/clothing/head/solgov/service/expedition/command - -/decl/hierarchy/mil_uniform/ec/sec/officer/com //Can only be officers - name = "EC security command" - departments = SEC|COM - -/decl/hierarchy/mil_uniform/ec/med - name = "EC medical" - departments = MED - - utility_under = /obj/item/clothing/under/solgov/utility/expeditionary/medical - utility_extra = list(/obj/item/clothing/head/beret/solgov/expedition/medical, - /obj/item/clothing/head/ushanka/solgov, - /obj/item/clothing/suit/storage/hooded/wintercoat/solgov, - /obj/item/clothing/gloves/thick/duty/solgov/med) - - service_under = /obj/item/clothing/under/solgov/service/expeditionary/medical - service_skirt = /obj/item/clothing/under/solgov/service/expeditionary/skirt/medical - service_over = /obj/item/clothing/suit/storage/solgov/service/expeditionary/medical - - dress_under = /obj/item/clothing/under/solgov/dress/expeditionary/medical - dress_skirt = /obj/item/clothing/under/solgov/dress/expeditionary/skirt/medical - -/decl/hierarchy/mil_uniform/ec/med/senior - name = "EC medical senior" - min_rank = 5 - - dress_over = /obj/item/clothing/suit/storage/solgov/dress/expedition/senior - -/decl/hierarchy/mil_uniform/ec/med/chief - name = "EC medical chief" - min_rank = 7 - - dress_over = /obj/item/clothing/suit/storage/solgov/dress/expedition/chief - -/decl/hierarchy/mil_uniform/ec/med/officer - name = "EC medical CO" - min_rank = 11 - - utility_under = /obj/item/clothing/under/solgov/utility/expeditionary/officer/medical - utility_extra = list(/obj/item/clothing/head/beret/solgov/expedition/command, - /obj/item/clothing/head/beret/solgov/expedition/medical, - /obj/item/clothing/head/ushanka/solgov, - /obj/item/clothing/suit/storage/hooded/wintercoat/solgov, - /obj/item/clothing/shoes/jackboots/unathi, - /obj/item/clothing/gloves/thick/duty/solgov/med) - - service_under = /obj/item/clothing/under/solgov/service/expeditionary/command/medical - service_skirt = /obj/item/clothing/under/solgov/service/expeditionary/command/skirt/medical - service_over = /obj/item/clothing/suit/storage/solgov/service/expeditionary/command/medical - service_hat = /obj/item/clothing/head/solgov/service/expedition/command - - dress_under = /obj/item/clothing/under/solgov/dress/expeditionary/command/medical - dress_skirt = /obj/item/clothing/under/solgov/dress/expeditionary/command/skirt/medical - dress_over = /obj/item/clothing/suit/storage/solgov/dress/expedition/command - dress_hat = /obj/item/clothing/head/solgov/service/expedition/command - -/decl/hierarchy/mil_uniform/ec/med/officer/com //Can only be officers - name = "EC medical command" - departments = MED|COM - -/decl/hierarchy/mil_uniform/ec/sup - name = "EC supply" - departments = SUP - - utility_extra = list(/obj/item/clothing/head/beret/solgov/expedition/supply, - /obj/item/clothing/head/ushanka/solgov, - /obj/item/clothing/suit/storage/hooded/wintercoat/solgov, - /obj/item/clothing/gloves/thick/duty/solgov/sup) - utility_under = /obj/item/clothing/under/solgov/utility/expeditionary/supply - - service_under = /obj/item/clothing/under/solgov/service/expeditionary/supply - service_skirt = /obj/item/clothing/under/solgov/service/expeditionary/skirt/supply - service_over = /obj/item/clothing/suit/storage/solgov/service/expeditionary/supply - - dress_under = /obj/item/clothing/under/solgov/dress/expeditionary/supply - dress_skirt = /obj/item/clothing/under/solgov/dress/expeditionary/skirt/supply - -/decl/hierarchy/mil_uniform/ec/sup/senior - name = "EC supply senior" - min_rank = 5 - - dress_over = /obj/item/clothing/suit/storage/solgov/dress/expedition/senior - -/decl/hierarchy/mil_uniform/ec/sup/chief - name = "EC supply chief" - min_rank = 7 - - dress_over = /obj/item/clothing/suit/storage/solgov/dress/expedition/chief - -/decl/hierarchy/mil_uniform/ec/sup/officer - name = "EC supply CO" - min_rank = 11 - - utility_under = /obj/item/clothing/under/solgov/utility/expeditionary/officer/supply - utility_extra = list(/obj/item/clothing/head/beret/solgov/expedition/command, - /obj/item/clothing/head/beret/solgov/expedition/supply, - /obj/item/clothing/head/ushanka/solgov, - /obj/item/clothing/suit/storage/hooded/wintercoat/solgov, - /obj/item/clothing/shoes/jackboots/unathi, - /obj/item/clothing/gloves/thick/duty/solgov/sup) - - service_under = /obj/item/clothing/under/solgov/service/expeditionary/command/supply - service_skirt = /obj/item/clothing/under/solgov/service/expeditionary/command/skirt/supply - service_over = /obj/item/clothing/suit/storage/solgov/service/expeditionary/command/service - service_hat = /obj/item/clothing/head/solgov/service/expedition/command - - dress_under = /obj/item/clothing/under/solgov/dress/expeditionary/command/supply - dress_skirt = /obj/item/clothing/under/solgov/dress/expeditionary/command/skirt/supply - dress_over = /obj/item/clothing/suit/storage/solgov/dress/expedition/command - dress_hat = /obj/item/clothing/head/solgov/service/expedition/command - -/decl/hierarchy/mil_uniform/ec/srv - name = "EC service" - departments = SRV - - utility_extra = list(/obj/item/clothing/head/beret/solgov/expedition/service, - /obj/item/clothing/head/ushanka/solgov, - /obj/item/clothing/suit/storage/hooded/wintercoat/solgov, - /obj/item/clothing/gloves/thick/duty/solgov/svc) - utility_under = /obj/item/clothing/under/solgov/utility/expeditionary/service - - service_under = /obj/item/clothing/under/solgov/service/expeditionary/service - service_skirt = /obj/item/clothing/under/solgov/service/expeditionary/skirt/service - service_over = /obj/item/clothing/suit/storage/solgov/service/expeditionary/service - - dress_under = /obj/item/clothing/under/solgov/dress/expeditionary/service - dress_skirt = /obj/item/clothing/under/solgov/dress/expeditionary/skirt/service - -/decl/hierarchy/mil_uniform/ec/srv/senior - name = "EC service senior" - min_rank = 5 - - dress_over = /obj/item/clothing/suit/storage/solgov/dress/expedition/senior - -/decl/hierarchy/mil_uniform/ec/srv/chief - name = "EC service chief" - min_rank = 7 - - dress_over = /obj/item/clothing/suit/storage/solgov/dress/expedition/chief - -/decl/hierarchy/mil_uniform/ec/srv/officer - name = "EC service CO" - min_rank = 11 - - utility_under = /obj/item/clothing/under/solgov/utility/expeditionary/officer/service - utility_extra = list(/obj/item/clothing/head/beret/solgov/expedition/command, - /obj/item/clothing/head/beret/solgov/expedition/service, - /obj/item/clothing/head/ushanka/solgov, - /obj/item/clothing/suit/storage/hooded/wintercoat/solgov, - /obj/item/clothing/shoes/jackboots/unathi, - /obj/item/clothing/gloves/thick/duty/solgov/svc) - - service_under = /obj/item/clothing/under/solgov/service/expeditionary/command/service - service_skirt = /obj/item/clothing/under/solgov/service/expeditionary/command/skirt/service - service_over = /obj/item/clothing/suit/storage/solgov/service/expeditionary/command/service - service_hat = /obj/item/clothing/head/solgov/service/expedition/command - - dress_under = /obj/item/clothing/under/solgov/dress/expeditionary/command/service - dress_skirt = /obj/item/clothing/under/solgov/dress/expeditionary/command/skirt/service - dress_over = /obj/item/clothing/suit/storage/solgov/dress/expedition/command - dress_hat = /obj/item/clothing/head/solgov/service/expedition/command - -/decl/hierarchy/mil_uniform/ec/exp - name = "EC exploration" - departments = EXP - - utility_extra = list(/obj/item/clothing/head/beret/solgov/expedition/exploration, - /obj/item/clothing/head/ushanka/solgov, - /obj/item/clothing/suit/storage/hooded/wintercoat/solgov, - /obj/item/clothing/gloves/thick/duty/solgov/exp) - utility_under = /obj/item/clothing/under/solgov/utility/expeditionary/exploration - - service_under = /obj/item/clothing/under/solgov/service/expeditionary/exploration - service_skirt = /obj/item/clothing/under/solgov/service/expeditionary/skirt/exploration - service_over = /obj/item/clothing/suit/storage/solgov/service/expeditionary/exploration - - dress_under = /obj/item/clothing/under/solgov/dress/expeditionary/exploration - dress_skirt = /obj/item/clothing/under/solgov/dress/expeditionary/skirt/exploration - -/decl/hierarchy/mil_uniform/ec/exp/senior - name = "EC exploration senior" - min_rank = 5 - - dress_over = /obj/item/clothing/suit/storage/solgov/dress/expedition/senior - -/decl/hierarchy/mil_uniform/ec/exp/chief - name = "EC exploration chief" - min_rank = 7 - - dress_over = /obj/item/clothing/suit/storage/solgov/dress/expedition/chief - -/decl/hierarchy/mil_uniform/ec/exp/officer - name = "EC exploration CO" - min_rank = 11 - - utility_under = /obj/item/clothing/under/solgov/utility/expeditionary/officer/exploration - utility_extra = list(/obj/item/clothing/head/beret/solgov/expedition/command, - /obj/item/clothing/head/beret/solgov/expedition/exploration, - /obj/item/clothing/head/ushanka/solgov, - /obj/item/clothing/suit/storage/hooded/wintercoat/solgov, - /obj/item/clothing/shoes/jackboots/unathi, - /obj/item/clothing/gloves/thick/duty/solgov/exp) - - service_under = /obj/item/clothing/under/solgov/service/expeditionary/command/exploration - service_skirt = /obj/item/clothing/under/solgov/service/expeditionary/command/skirt/exploration - service_over = /obj/item/clothing/suit/storage/solgov/service/expeditionary/command/exploration - service_hat = /obj/item/clothing/head/solgov/service/expedition/command - - dress_under = /obj/item/clothing/under/solgov/dress/expeditionary/command/exploration - dress_skirt = /obj/item/clothing/under/solgov/dress/expeditionary/command/skirt/exploration - dress_over = /obj/item/clothing/suit/storage/solgov/dress/expedition/command - dress_hat = /obj/item/clothing/head/solgov/service/expedition/command - -/decl/hierarchy/mil_uniform/ec/spt - name = "EC command support" - departments = SPT - - utility_under= /obj/item/clothing/under/solgov/utility/expeditionary/command - utility_extra = list(/obj/item/clothing/head/beret/solgov/expedition/command, - /obj/item/clothing/head/ushanka/solgov, - /obj/item/clothing/suit/storage/hooded/wintercoat/solgov, - /obj/item/clothing/shoes/jackboots/unathi, - /obj/item/clothing/gloves/thick/duty/solgov/cmd) - - service_under = /obj/item/clothing/under/solgov/service/expeditionary/command/command - service_skirt = /obj/item/clothing/under/solgov/service/expeditionary/command/skirt/command - service_over = /obj/item/clothing/suit/storage/solgov/service/expeditionary/command - - dress_under = /obj/item/clothing/under/solgov/dress/expeditionary/command - dress_skirt = /obj/item/clothing/under/solgov/dress/expeditionary/command/skirt - -/decl/hierarchy/mil_uniform/ec/spt/senior - name = "EC command support senior" - min_rank = 5 - - dress_over = /obj/item/clothing/suit/storage/solgov/dress/expedition/senior - -/decl/hierarchy/mil_uniform/ec/spt/chief - name = "EC command support chief" - min_rank = 7 - - dress_over = /obj/item/clothing/suit/storage/solgov/dress/expedition/chief - -/decl/hierarchy/mil_uniform/ec/spt/officer - name = "EC command support CO" - min_rank = 11 - - utility_under= /obj/item/clothing/under/solgov/utility/expeditionary/officer/command - - service_under = /obj/item/clothing/under/solgov/service/expeditionary/command/command - service_skirt = /obj/item/clothing/under/solgov/service/expeditionary/command/skirt/command - service_over = /obj/item/clothing/suit/storage/solgov/service/expeditionary/command - service_hat = /obj/item/clothing/head/solgov/service/expedition/command - - dress_under = /obj/item/clothing/under/solgov/dress/expeditionary/command - dress_skirt = /obj/item/clothing/under/solgov/dress/expeditionary/command/skirt - dress_over = /obj/item/clothing/suit/storage/solgov/dress/expedition/command - dress_hat = /obj/item/clothing/head/solgov/service/expedition/command - -/decl/hierarchy/mil_uniform/ec/sci - name = "EC science" - departments = SCI - - utility_under = /obj/item/clothing/under/solgov/utility/expeditionary/research - utility_extra = list(/obj/item/clothing/head/ushanka/solgov, - /obj/item/clothing/suit/storage/hooded/wintercoat/solgov, - /obj/item/clothing/suit/storage/toggle/labcoat/science/ec, - /obj/item/clothing/gloves/thick/duty/solgov/sci) - - service_under = /obj/item/clothing/under/solgov/service/expeditionary/research - service_skirt = /obj/item/clothing/under/solgov/service/expeditionary/skirt/research - service_over = /obj/item/clothing/suit/storage/solgov/service/expeditionary/research - - dress_under = /obj/item/clothing/under/solgov/dress/expeditionary/research - dress_skirt = /obj/item/clothing/under/solgov/dress/expeditionary/skirt/research - -/decl/hierarchy/mil_uniform/ec/sci/senior - name = "EC science senior" - min_rank = 5 - - dress_over = /obj/item/clothing/suit/storage/solgov/dress/expedition/senior - -/decl/hierarchy/mil_uniform/ec/sci/chief - name = "EC science chief" - min_rank = 7 - - dress_over = /obj/item/clothing/suit/storage/solgov/dress/expedition/chief - -/decl/hierarchy/mil_uniform/ec/sci/officer - name = "EC science CO" - min_rank = 11 - - utility_under = /obj/item/clothing/under/solgov/utility/expeditionary/officer/research - utility_extra = list(/obj/item/clothing/head/beret/solgov/expedition/command, - /obj/item/clothing/head/ushanka/solgov, - /obj/item/clothing/suit/storage/hooded/wintercoat/solgov, - /obj/item/clothing/suit/storage/toggle/labcoat/science/ec, - /obj/item/clothing/gloves/thick/duty/solgov/sci) - - service_under = /obj/item/clothing/under/solgov/service/expeditionary/command/research - service_skirt = /obj/item/clothing/under/solgov/service/expeditionary/command/skirt/research - service_over = /obj/item/clothing/suit/storage/solgov/service/expeditionary/command/research - service_hat = /obj/item/clothing/head/solgov/service/expedition/command - - dress_under = /obj/item/clothing/under/solgov/dress/expeditionary/command/research - dress_skirt = /obj/item/clothing/under/solgov/dress/expeditionary/command/skirt/research - dress_over = /obj/item/clothing/suit/storage/solgov/dress/expedition/command - dress_hat = /obj/item/clothing/head/solgov/service/expedition/command - -/decl/hierarchy/mil_uniform/ec/sci/officer/com //Can only be officers - name = "EC science command" - departments = SCI|COM - - utility_extra = list(/obj/item/clothing/head/beret/solgov/expedition/command, - /obj/item/clothing/head/ushanka/solgov, - /obj/item/clothing/suit/storage/hooded/wintercoat/solgov, - /obj/item/clothing/suit/storage/toggle/labcoat/science/ec, - /obj/item/clothing/suit/storage/toggle/labcoat/rd/ec, - /obj/item/clothing/gloves/thick/duty/solgov/sci) diff --git a/maps/torch/datums/uniforms_fleet.dm b/maps/torch/datums/uniforms_fleet.dm deleted file mode 100644 index a487ac6a074c3..0000000000000 --- a/maps/torch/datums/uniforms_fleet.dm +++ /dev/null @@ -1,549 +0,0 @@ -/decl/hierarchy/mil_uniform/fleet/com //Can only be officers - name = "Fleet command" - departments = COM - - utility_under = /obj/item/clothing/under/solgov/utility/fleet/command - utility_extra = list( - /obj/item/clothing/under/solgov/utility/fleet/combat/command, - /obj/item/clothing/head/beret/solgov/fleet/command, - /obj/item/clothing/head/ushanka/solgov/fleet, - /obj/item/clothing/suit/storage/hooded/wintercoat/solgov/fleet, - /obj/item/clothing/suit/storage/jacket/solgov/fleet/command, - /obj/item/clothing/head/soft/solgov/fleet, - /obj/item/clothing/gloves/thick - ) - - service_hat = /obj/item/clothing/head/solgov/dress/fleet/command - service_over = /obj/item/clothing/suit/storage/solgov/service/fleet/officer - - dress_over = /obj/item/clothing/suit/storage/solgov/dress/fleet/officer - dress_hat = /obj/item/clothing/head/solgov/dress/fleet/command - dress_extra = list( - /obj/item/material/sword/replica/officersword, - /obj/item/clothing/head/beret/solgov/fleet/dress/command - ) - -/decl/hierarchy/mil_uniform/fleet/com/seniorofficer - name = "Fleet senior command" - min_rank = 15 - - service_over = /obj/item/clothing/suit/storage/solgov/service/fleet/command - dress_over = /obj/item/clothing/suit/storage/solgov/dress/fleet/command - -/decl/hierarchy/mil_uniform/fleet/com/flagofficer - name = "Fleet flag command" - min_rank = 17 - - service_over = /obj/item/clothing/suit/storage/solgov/service/fleet/flag - dress_over = /obj/item/clothing/suit/storage/solgov/dress/fleet/flag - -/decl/hierarchy/mil_uniform/fleet/eng - name = "Fleet engineering" - departments = ENG - - utility_under = /obj/item/clothing/under/solgov/utility/fleet/engineering - utility_extra = list( - /obj/item/clothing/under/solgov/utility/fleet/combat/engineering, - /obj/item/clothing/head/beret/solgov/fleet/engineering, - /obj/item/clothing/head/ushanka/solgov/fleet, - /obj/item/clothing/suit/storage/hooded/wintercoat/solgov/fleet, - /obj/item/clothing/suit/storage/jacket/solgov/fleet, - /obj/item/clothing/head/soft/solgov/fleet, - /obj/item/clothing/gloves/thick - ) - -/decl/hierarchy/mil_uniform/fleet/eng/noncom - name = "Fleet engineering NCO" - min_rank = 4 - - service_hat = /obj/item/clothing/head/solgov/dress/fleet - service_over = /obj/item/clothing/suit/storage/solgov/service/fleet - - dress_over = /obj/item/clothing/suit/storage/solgov/dress/fleet - -/decl/hierarchy/mil_uniform/fleet/eng/snco - name = "Fleet engineering SNCO" - min_rank = 7 - - service_hat = /obj/item/clothing/head/solgov/dress/fleet - service_over = /obj/item/clothing/suit/storage/solgov/service/fleet/snco - - dress_over = /obj/item/clothing/suit/storage/solgov/dress/fleet/snco - dress_hat = /obj/item/clothing/head/solgov/dress/fleet - dress_extra = list( - /obj/item/material/sword/replica/officersword/pettyofficer, - /obj/item/clothing/head/beret/solgov/fleet/dress - ) - -/decl/hierarchy/mil_uniform/fleet/eng/officer - name = "Fleet engineering CO" - min_rank = 11 - - utility_extra = list( - /obj/item/clothing/under/solgov/utility/fleet/combat/engineering, - /obj/item/clothing/head/beret/solgov/fleet/command, - /obj/item/clothing/head/beret/solgov/fleet/engineering, - /obj/item/clothing/head/ushanka/solgov/fleet, - /obj/item/clothing/suit/storage/hooded/wintercoat/solgov/fleet, - /obj/item/clothing/head/soft/solgov/fleet, - /obj/item/clothing/gloves/thick - ) - - service_hat = /obj/item/clothing/head/solgov/dress/fleet/command - service_over = /obj/item/clothing/suit/storage/solgov/service/fleet/officer - - dress_over = /obj/item/clothing/suit/storage/solgov/dress/fleet/officer - dress_hat = /obj/item/clothing/head/solgov/dress/fleet/command - dress_extra = list( - /obj/item/material/sword/replica/officersword, - /obj/item/clothing/head/beret/solgov/fleet/dress/command - ) - -/decl/hierarchy/mil_uniform/fleet/eng/officer/com //Can only be officers - name = "Fleet engineering command" - departments = ENG|COM - -/decl/hierarchy/mil_uniform/fleet/eng/officer/com/seniorofficer - name = "Fleet engineering senior command" - min_rank = 15 - - service_over = /obj/item/clothing/suit/storage/solgov/service/fleet/command - dress_over = /obj/item/clothing/suit/storage/solgov/dress/fleet/command - -/decl/hierarchy/mil_uniform/fleet/eng/officer/com/flagofficer - name = "Fleet engineering flag command" - min_rank = 17 - - service_over = /obj/item/clothing/suit/storage/solgov/service/fleet/flag - dress_over = /obj/item/clothing/suit/storage/solgov/dress/fleet/flag - -/decl/hierarchy/mil_uniform/fleet/sec - name = "Fleet security" - departments = SEC - - utility_under = /obj/item/clothing/under/solgov/utility/fleet/security - utility_extra = list( - /obj/item/clothing/under/solgov/utility/fleet/combat/security, - /obj/item/clothing/head/beret/solgov/fleet/security, - /obj/item/clothing/head/ushanka/solgov/fleet, - /obj/item/clothing/suit/storage/hooded/wintercoat/solgov/fleet, - /obj/item/clothing/suit/storage/jacket/solgov/fleet/security, - /obj/item/clothing/head/soft/solgov/fleet, - /obj/item/clothing/gloves/thick - ) - - -/decl/hierarchy/mil_uniform/fleet/sec/noncom - name = "Fleet security NCO" - min_rank = 4 - - service_hat = /obj/item/clothing/head/solgov/dress/fleet - service_over = /obj/item/clothing/suit/storage/solgov/service/fleet - - dress_over = /obj/item/clothing/suit/storage/solgov/dress/fleet - dress_extra = list( - /obj/item/clothing/head/beret/solgov/fleet/dress - ) - - -/decl/hierarchy/mil_uniform/fleet/sec/snco - name = "Fleet security SNCO" - min_rank = 7 - - service_hat = /obj/item/clothing/head/solgov/dress/fleet - service_over = /obj/item/clothing/suit/storage/solgov/service/fleet/snco - - dress_over = /obj/item/clothing/suit/storage/solgov/dress/fleet/snco - dress_hat = /obj/item/clothing/head/solgov/dress/fleet - dress_extra = list( - /obj/item/material/sword/replica/officersword/pettyofficer, - /obj/item/clothing/head/beret/solgov/fleet/dress - ) - -/decl/hierarchy/mil_uniform/fleet/sec/officer - name = "Fleet security CO" - min_rank = 11 - - utility_extra = list( - /obj/item/clothing/under/solgov/utility/fleet/combat/security, - /obj/item/clothing/head/beret/solgov/fleet/command, - /obj/item/clothing/head/beret/solgov/fleet/security, - /obj/item/clothing/head/ushanka/solgov/fleet, - /obj/item/clothing/suit/storage/hooded/wintercoat/solgov/fleet, - /obj/item/clothing/head/soft/solgov/fleet, - /obj/item/clothing/gloves/thick - ) - - service_hat = /obj/item/clothing/head/solgov/dress/fleet/command - service_over = /obj/item/clothing/suit/storage/solgov/service/fleet/officer - - dress_over = /obj/item/clothing/suit/storage/solgov/dress/fleet/officer - dress_hat = /obj/item/clothing/head/solgov/dress/fleet/command - dress_extra = list(/obj/item/material/sword/replica/officersword, /obj/item/clothing/head/beret/solgov/fleet/dress/command) - -/decl/hierarchy/mil_uniform/fleet/sec/officer/com //Can only be officers - name = "Fleet security command" - departments = SEC|COM - -/decl/hierarchy/mil_uniform/fleet/sec/officer/com/seniorofficer - name = "Fleet security senior command" - min_rank = 15 - - service_over = /obj/item/clothing/suit/storage/solgov/service/fleet/command - dress_over = /obj/item/clothing/suit/storage/solgov/dress/fleet/command - -/decl/hierarchy/mil_uniform/fleet/sec/officer/com/flagofficer - name = "Fleet security flag command" - min_rank = 17 - - service_over = /obj/item/clothing/suit/storage/solgov/service/fleet/flag - dress_over = /obj/item/clothing/suit/storage/solgov/dress/fleet/flag - -/decl/hierarchy/mil_uniform/fleet/med - name = "Fleet medical" - departments = MED - - utility_under = /obj/item/clothing/under/solgov/utility/fleet/medical - utility_extra = list( - /obj/item/clothing/under/solgov/utility/fleet/combat/medical, - /obj/item/clothing/head/beret/solgov/fleet/medical, - /obj/item/clothing/head/ushanka/solgov/fleet, - /obj/item/clothing/suit/storage/hooded/wintercoat/solgov/fleet, - /obj/item/clothing/suit/storage/jacket/solgov/fleet/medical, - /obj/item/clothing/head/soft/solgov/fleet, - /obj/item/clothing/gloves/thick - ) - -/decl/hierarchy/mil_uniform/fleet/med/noncom - name = "Fleet medical NCO" - min_rank = 4 - - service_hat = /obj/item/clothing/head/solgov/dress/fleet - service_over = /obj/item/clothing/suit/storage/solgov/service/fleet - - dress_over = /obj/item/clothing/suit/storage/solgov/dress/fleet - dress_extra = /obj/item/clothing/head/beret/solgov/fleet/dress - -/decl/hierarchy/mil_uniform/fleet/med/snco - name = "Fleet medical SNCO" - min_rank = 7 - - service_hat = /obj/item/clothing/head/solgov/dress/fleet - service_over = /obj/item/clothing/suit/storage/solgov/service/fleet/snco - - dress_over = /obj/item/clothing/suit/storage/solgov/dress/fleet/snco - dress_hat = /obj/item/clothing/head/solgov/dress/fleet - dress_extra = list(/obj/item/material/sword/replica/officersword/pettyofficer, /obj/item/clothing/head/beret/solgov/fleet/dress) - -/decl/hierarchy/mil_uniform/fleet/med/officer - name = "Fleet medical CO" - min_rank = 11 - - utility_extra = list( - /obj/item/clothing/under/solgov/utility/fleet/combat/medical, - /obj/item/clothing/head/beret/solgov/fleet/command, - /obj/item/clothing/head/beret/solgov/fleet/medical, - /obj/item/clothing/head/ushanka/solgov/fleet, - /obj/item/clothing/suit/storage/hooded/wintercoat/solgov/fleet, - /obj/item/clothing/head/soft/solgov/fleet, - /obj/item/clothing/gloves/thick - ) - - service_hat = /obj/item/clothing/head/solgov/dress/fleet/command - service_over = /obj/item/clothing/suit/storage/solgov/service/fleet/officer - - dress_over = /obj/item/clothing/suit/storage/solgov/dress/fleet/officer - dress_hat = /obj/item/clothing/head/solgov/dress/fleet/command - dress_extra = list(/obj/item/material/sword/replica/officersword, /obj/item/clothing/head/beret/solgov/fleet/dress/command) - -/decl/hierarchy/mil_uniform/fleet/med/officer/com //Can only be officers - name = "Fleet medical command" - departments = MED|COM - -/decl/hierarchy/mil_uniform/fleet/med/officer/com/seniorofficer - name = "Fleet medical senior command" - min_rank = 15 - - service_over = /obj/item/clothing/suit/storage/solgov/service/fleet/command - dress_over = /obj/item/clothing/suit/storage/solgov/dress/fleet/command - -/decl/hierarchy/mil_uniform/fleet/med/officer/com/flagofficer - name = "Fleet medical flag command" - min_rank = 17 - - service_over = /obj/item/clothing/suit/storage/solgov/service/fleet/flag - dress_over = /obj/item/clothing/suit/storage/solgov/dress/fleet/flag - -/decl/hierarchy/mil_uniform/fleet/sup - name = "Fleet supply" - departments = SUP - - utility_under = /obj/item/clothing/under/solgov/utility/fleet/supply - utility_extra = list( - /obj/item/clothing/under/solgov/utility/fleet/combat/supply, - /obj/item/clothing/head/beret/solgov/fleet/supply, - /obj/item/clothing/head/ushanka/solgov/fleet, - /obj/item/clothing/suit/storage/hooded/wintercoat/solgov/fleet, - /obj/item/clothing/suit/storage/jacket/solgov/fleet/supply, - /obj/item/clothing/head/soft/solgov/fleet, - /obj/item/clothing/gloves/thick - ) - -/decl/hierarchy/mil_uniform/fleet/sup/noncom - name = "Fleet supply NCO" - min_rank = 4 - - service_hat = /obj/item/clothing/head/solgov/dress/fleet - service_over = /obj/item/clothing/suit/storage/solgov/service/fleet - - dress_over = /obj/item/clothing/suit/storage/solgov/dress/fleet - dress_extra = /obj/item/clothing/head/beret/solgov/fleet/dress - -/decl/hierarchy/mil_uniform/fleet/sup/snco - name = "Fleet supply SNCO" - min_rank = 7 - - service_hat = /obj/item/clothing/head/solgov/dress/fleet - service_over = /obj/item/clothing/suit/storage/solgov/service/fleet/snco - - dress_over = /obj/item/clothing/suit/storage/solgov/dress/fleet/snco - dress_hat = /obj/item/clothing/head/solgov/dress/fleet - dress_extra = list(/obj/item/material/sword/replica/officersword/pettyofficer, /obj/item/clothing/head/beret/solgov/fleet/dress) - -/decl/hierarchy/mil_uniform/fleet/sup/officer - name = "Fleet supply CO" - min_rank = 11 - - utility_extra = list( - /obj/item/clothing/under/solgov/utility/fleet/combat/supply, - /obj/item/clothing/head/beret/solgov/fleet/command, - /obj/item/clothing/head/beret/solgov/fleet/supply, - /obj/item/clothing/head/ushanka/solgov/fleet, - /obj/item/clothing/suit/storage/hooded/wintercoat/solgov/fleet, - /obj/item/clothing/head/soft/solgov/fleet, - /obj/item/clothing/gloves/thick - ) - - service_hat = /obj/item/clothing/head/solgov/dress/fleet/command - service_over = /obj/item/clothing/suit/storage/solgov/service/fleet/officer - - dress_over = /obj/item/clothing/suit/storage/solgov/dress/fleet/officer - dress_hat = /obj/item/clothing/head/solgov/dress/fleet/command - dress_extra = list(/obj/item/material/sword/replica/officersword, /obj/item/clothing/head/beret/solgov/fleet/dress/command) - -/decl/hierarchy/mil_uniform/fleet/sup/seniorofficer - name = "Fleet supply senior command" - min_rank = 15 - - service_hat = /obj/item/clothing/head/solgov/dress/fleet/command - service_over = /obj/item/clothing/suit/storage/solgov/service/fleet/command - - dress_over = /obj/item/clothing/suit/storage/solgov/dress/fleet/command - dress_hat = /obj/item/clothing/head/solgov/dress/fleet/command - dress_extra = list(/obj/item/material/sword/replica/officersword, /obj/item/clothing/head/beret/solgov/fleet/dress/command) - -/decl/hierarchy/mil_uniform/fleet/sup/flagofficer - name = "Fleet spply flag command" - min_rank = 17 - - service_hat = /obj/item/clothing/head/solgov/dress/fleet/command - service_over = /obj/item/clothing/suit/storage/solgov/service/fleet/flag - - dress_over = /obj/item/clothing/suit/storage/solgov/dress/fleet/flag - dress_hat = /obj/item/clothing/head/solgov/dress/fleet/command - dress_extra = list(/obj/item/material/sword/replica/officersword, /obj/item/clothing/head/beret/solgov/fleet/dress/command) - -/decl/hierarchy/mil_uniform/fleet/srv - name = "Fleet service" - departments = SRV - - utility_under = /obj/item/clothing/under/solgov/utility/fleet/service - utility_extra = list( - /obj/item/clothing/under/solgov/utility/fleet/combat/service, - /obj/item/clothing/head/beret/solgov/fleet/service, - /obj/item/clothing/head/ushanka/solgov/fleet, - /obj/item/clothing/suit/storage/hooded/wintercoat/solgov/fleet, - /obj/item/clothing/suit/storage/jacket/solgov/fleet/service, - /obj/item/clothing/head/soft/solgov/fleet, - /obj/item/clothing/gloves/thick - ) - -/decl/hierarchy/mil_uniform/fleet/srv/noncom - name = "Fleet service NCO" - min_rank = 4 - - service_hat = /obj/item/clothing/head/solgov/dress/fleet - service_over = /obj/item/clothing/suit/storage/solgov/service/fleet - - dress_over = /obj/item/clothing/suit/storage/solgov/dress/fleet - dress_extra = /obj/item/clothing/head/beret/solgov/fleet/dress - - -/decl/hierarchy/mil_uniform/fleet/srv/snco - name = "Fleet service SNCO" - min_rank = 7 - - service_hat = /obj/item/clothing/head/solgov/dress/fleet - service_over = /obj/item/clothing/suit/storage/solgov/service/fleet/snco - - dress_over = /obj/item/clothing/suit/storage/solgov/dress/fleet/snco - dress_hat = /obj/item/clothing/head/solgov/dress/fleet - dress_extra = list(/obj/item/material/sword/replica/officersword/pettyofficer, /obj/item/clothing/head/beret/solgov/fleet/dress) - -/decl/hierarchy/mil_uniform/fleet/srv/officer - name = "Fleet service CO" - min_rank = 11 - - utility_extra = list( - /obj/item/clothing/under/solgov/utility/fleet/combat/service, - /obj/item/clothing/head/beret/solgov/fleet/command, - /obj/item/clothing/head/beret/solgov/fleet/service, - /obj/item/clothing/head/ushanka/solgov/fleet, - /obj/item/clothing/suit/storage/hooded/wintercoat/solgov/fleet, - /obj/item/clothing/head/soft/solgov/fleet, - /obj/item/clothing/gloves/thick - ) - - service_hat = /obj/item/clothing/head/solgov/dress/fleet/command - service_over = /obj/item/clothing/suit/storage/solgov/service/fleet/officer - - dress_over = /obj/item/clothing/suit/storage/solgov/dress/fleet/officer - dress_hat = /obj/item/clothing/head/solgov/dress/fleet/command - dress_extra = list(/obj/item/material/sword/replica/officersword, /obj/item/clothing/head/beret/solgov/fleet/dress/command) - -/decl/hierarchy/mil_uniform/fleet/exp - name = "Fleet exploration" - departments = EXP - - utility_under = /obj/item/clothing/under/solgov/utility/fleet/exploration - utility_extra = list( - /obj/item/clothing/under/solgov/utility/fleet/combat/exploration, - /obj/item/clothing/head/beret/solgov/fleet/exploration, - /obj/item/clothing/head/ushanka/solgov/fleet, - /obj/item/clothing/suit/storage/hooded/wintercoat/solgov/fleet, - /obj/item/clothing/head/soft/solgov/fleet, - /obj/item/clothing/gloves/thick - ) - -/decl/hierarchy/mil_uniform/fleet/exp/noncom - name = "Fleet exploration NCO" - min_rank = 4 - - service_hat = /obj/item/clothing/head/solgov/dress/fleet - service_over = /obj/item/clothing/suit/storage/solgov/service/fleet - - dress_over = /obj/item/clothing/suit/storage/solgov/dress/fleet - dress_extra = /obj/item/clothing/head/beret/solgov/fleet/dress - - -/decl/hierarchy/mil_uniform/fleet/exp/snco - name = "Fleet exploration SNCO" - min_rank = 7 - - service_hat = /obj/item/clothing/head/solgov/dress/fleet - service_over = /obj/item/clothing/suit/storage/solgov/service/fleet/snco - - dress_over = /obj/item/clothing/suit/storage/solgov/dress/fleet/snco - dress_hat = /obj/item/clothing/head/solgov/dress/fleet - dress_extra = list(/obj/item/material/sword/replica/officersword/pettyofficer, /obj/item/clothing/head/beret/solgov/fleet/dress) - -/decl/hierarchy/mil_uniform/fleet/exp/officer - name = "Fleet exploration CO" - min_rank = 11 - - utility_extra = list( - /obj/item/clothing/under/solgov/utility/fleet/combat/exploration, - /obj/item/clothing/head/beret/solgov/fleet/command, - /obj/item/clothing/head/beret/solgov/fleet/exploration, - /obj/item/clothing/head/ushanka/solgov/fleet, - /obj/item/clothing/suit/storage/hooded/wintercoat/solgov/fleet, - /obj/item/clothing/head/soft/solgov/fleet, - /obj/item/clothing/gloves/thick - ) - - service_hat = /obj/item/clothing/head/solgov/dress/fleet/command - service_over = /obj/item/clothing/suit/storage/solgov/service/fleet/officer - - dress_over = /obj/item/clothing/suit/storage/solgov/dress/fleet/officer - dress_hat = /obj/item/clothing/head/solgov/dress/fleet/command - dress_extra = list(/obj/item/material/sword/replica/officersword, /obj/item/clothing/head/beret/solgov/fleet/dress/command) - -/decl/hierarchy/mil_uniform/fleet/spt - name = "Fleet command support" - departments = SPT - - utility_under = /obj/item/clothing/under/solgov/utility/fleet/command - utility_extra = list( - /obj/item/clothing/under/solgov/utility/fleet/combat/command, - /obj/item/clothing/head/beret/solgov/fleet/command, - /obj/item/clothing/head/ushanka/solgov/fleet, - /obj/item/clothing/suit/storage/hooded/wintercoat/solgov/fleet, - /obj/item/clothing/head/soft/solgov/fleet, - /obj/item/clothing/gloves/thick - ) - -/decl/hierarchy/mil_uniform/fleet/spt/noncom - name = "Fleet support NCO" - min_rank = 4 - - service_hat = /obj/item/clothing/head/solgov/dress/fleet - service_over = /obj/item/clothing/suit/storage/solgov/service/fleet - - dress_over = /obj/item/clothing/suit/storage/solgov/dress/fleet - dress_extra = /obj/item/clothing/head/beret/solgov/fleet/dress - - -/decl/hierarchy/mil_uniform/fleet/spt/snco - name = "Fleet support SNCO" - min_rank = 7 - - service_hat = /obj/item/clothing/head/solgov/dress/fleet - service_over = /obj/item/clothing/suit/storage/solgov/service/fleet/snco - - dress_over = /obj/item/clothing/suit/storage/solgov/dress/fleet/snco - dress_hat = /obj/item/clothing/head/solgov/dress/fleet - dress_extra = list(/obj/item/material/sword/replica/officersword/pettyofficer, /obj/item/clothing/head/beret/solgov/fleet/dress) - -/decl/hierarchy/mil_uniform/fleet/spt/officer - name = "Fleet command support CO" - min_rank = 11 - - utility_under = /obj/item/clothing/under/solgov/utility/fleet/command - utility_extra = list( - /obj/item/clothing/under/solgov/utility/fleet/combat/command, - /obj/item/clothing/head/beret/solgov/fleet/command, - /obj/item/clothing/head/ushanka/solgov/fleet, - /obj/item/clothing/suit/storage/hooded/wintercoat/solgov/fleet, - /obj/item/clothing/head/soft/solgov/fleet, - /obj/item/clothing/gloves/thick - ) - - service_hat = /obj/item/clothing/head/solgov/dress/fleet/command - service_over = /obj/item/clothing/suit/storage/solgov/service/fleet/officer - - dress_over = /obj/item/clothing/suit/storage/solgov/dress/fleet/officer - dress_hat = /obj/item/clothing/head/solgov/dress/fleet/command - dress_extra = list(/obj/item/material/sword/replica/officersword, /obj/item/clothing/head/beret/solgov/fleet/dress/command) - -/decl/hierarchy/mil_uniform/fleet/spt/seniorofficer - name = "Fleet senior command support" - min_rank = 15 - - service_hat = /obj/item/clothing/head/solgov/dress/fleet/command - service_over = /obj/item/clothing/suit/storage/solgov/service/fleet/command - - - dress_over = /obj/item/clothing/suit/storage/solgov/dress/fleet/command - dress_hat = /obj/item/clothing/head/solgov/dress/fleet/command - dress_extra = list(/obj/item/material/sword/replica/officersword, /obj/item/clothing/head/beret/solgov/fleet/dress/command) - -/decl/hierarchy/mil_uniform/fleet/spt/flagofficer - name = "Fleet flag command support" - min_rank = 17 - - service_hat = /obj/item/clothing/head/solgov/dress/fleet/command - service_over = /obj/item/clothing/suit/storage/solgov/service/fleet/flag - - dress_over = /obj/item/clothing/suit/storage/solgov/dress/fleet/flag - dress_hat = /obj/item/clothing/head/solgov/dress/fleet/command - dress_extra = list(/obj/item/material/sword/replica/officersword, /obj/item/clothing/head/beret/solgov/fleet/dress/command) diff --git a/maps/torch/game/antagonist/outsider/deathsquad.dm b/maps/torch/game/antagonist/outsider/deathsquad.dm deleted file mode 100644 index c44496b5c81d6..0000000000000 --- a/maps/torch/game/antagonist/outsider/deathsquad.dm +++ /dev/null @@ -1 +0,0 @@ -/datum/antagonist/deathsquad/required_language = LANGUAGE_HUMAN_EURO \ No newline at end of file diff --git a/maps/torch/game/antagonist/outsider/ert.dm b/maps/torch/game/antagonist/outsider/ert.dm deleted file mode 100644 index 6fbf90c5178e6..0000000000000 --- a/maps/torch/game/antagonist/outsider/ert.dm +++ /dev/null @@ -1 +0,0 @@ -/datum/antagonist/ert/required_language = LANGUAGE_HUMAN_EURO \ No newline at end of file diff --git a/maps/torch/game/antagonist/outsider/foundation.dm b/maps/torch/game/antagonist/outsider/foundation.dm deleted file mode 100644 index fbf892aaa15fe..0000000000000 --- a/maps/torch/game/antagonist/outsider/foundation.dm +++ /dev/null @@ -1 +0,0 @@ -/datum/antagonist/foundation/required_language = LANGUAGE_HUMAN_EURO \ No newline at end of file diff --git a/maps/torch/game/antagonist/outsider/mercenary.dm b/maps/torch/game/antagonist/outsider/mercenary.dm deleted file mode 100644 index a79213d569119..0000000000000 --- a/maps/torch/game/antagonist/outsider/mercenary.dm +++ /dev/null @@ -1 +0,0 @@ -/datum/antagonist/mercenary/required_language = LANGUAGE_SPACER \ No newline at end of file diff --git a/maps/torch/game/antagonist/outsider/raider.dm b/maps/torch/game/antagonist/outsider/raider.dm deleted file mode 100644 index 230402e78dfdd..0000000000000 --- a/maps/torch/game/antagonist/outsider/raider.dm +++ /dev/null @@ -1 +0,0 @@ -/datum/antagonist/raider/required_language = LANGUAGE_SPACER \ No newline at end of file diff --git a/maps/torch/icons/assignment_hud.dmi b/maps/torch/icons/assignment_hud.dmi deleted file mode 100644 index 1a0e83a3524ba..0000000000000 Binary files a/maps/torch/icons/assignment_hud.dmi and /dev/null differ diff --git a/maps/torch/icons/mob/onmob_accessories_solgov.dmi b/maps/torch/icons/mob/onmob_accessories_solgov.dmi deleted file mode 100644 index 07ca28f7a8486..0000000000000 Binary files a/maps/torch/icons/mob/onmob_accessories_solgov.dmi and /dev/null differ diff --git a/maps/torch/icons/mob/onmob_feet_solgov.dmi b/maps/torch/icons/mob/onmob_feet_solgov.dmi deleted file mode 100644 index 79a1f26b17b3c..0000000000000 Binary files a/maps/torch/icons/mob/onmob_feet_solgov.dmi and /dev/null differ diff --git a/maps/torch/icons/mob/onmob_hands_solgov.dmi b/maps/torch/icons/mob/onmob_hands_solgov.dmi deleted file mode 100644 index 9f4a5ceba2c28..0000000000000 Binary files a/maps/torch/icons/mob/onmob_hands_solgov.dmi and /dev/null differ diff --git a/maps/torch/icons/mob/onmob_head_solgov.dmi b/maps/torch/icons/mob/onmob_head_solgov.dmi deleted file mode 100644 index 0f2d2812ed957..0000000000000 Binary files a/maps/torch/icons/mob/onmob_head_solgov.dmi and /dev/null differ diff --git a/maps/torch/icons/mob/onmob_suit_solgov.dmi b/maps/torch/icons/mob/onmob_suit_solgov.dmi deleted file mode 100644 index 56dbe82163866..0000000000000 Binary files a/maps/torch/icons/mob/onmob_suit_solgov.dmi and /dev/null differ diff --git a/maps/torch/icons/mob/onmob_under_solgov.dmi b/maps/torch/icons/mob/onmob_under_solgov.dmi deleted file mode 100644 index af7d2a2969c7e..0000000000000 Binary files a/maps/torch/icons/mob/onmob_under_solgov.dmi and /dev/null differ diff --git a/maps/torch/icons/mob/skrell/onmob_head_solgov_skrell.dmi b/maps/torch/icons/mob/skrell/onmob_head_solgov_skrell.dmi deleted file mode 100644 index 3941b7d604db5..0000000000000 Binary files a/maps/torch/icons/mob/skrell/onmob_head_solgov_skrell.dmi and /dev/null differ diff --git a/maps/torch/icons/mob/skrell/onmob_suit_solgov_skrell.dmi b/maps/torch/icons/mob/skrell/onmob_suit_solgov_skrell.dmi deleted file mode 100644 index e99ded5760045..0000000000000 Binary files a/maps/torch/icons/mob/skrell/onmob_suit_solgov_skrell.dmi and /dev/null differ diff --git a/maps/torch/icons/mob/unathi/onmob_head_solgov_unathi.dmi b/maps/torch/icons/mob/unathi/onmob_head_solgov_unathi.dmi deleted file mode 100644 index 238e87b69d3b4..0000000000000 Binary files a/maps/torch/icons/mob/unathi/onmob_head_solgov_unathi.dmi and /dev/null differ diff --git a/maps/torch/icons/mob/unathi/onmob_suit_solgov_unathi.dmi b/maps/torch/icons/mob/unathi/onmob_suit_solgov_unathi.dmi deleted file mode 100644 index b46e490c6e55b..0000000000000 Binary files a/maps/torch/icons/mob/unathi/onmob_suit_solgov_unathi.dmi and /dev/null differ diff --git a/maps/torch/icons/obj/explshotgun.dmi b/maps/torch/icons/obj/explshotgun.dmi deleted file mode 100644 index 59aebdfe9726c..0000000000000 Binary files a/maps/torch/icons/obj/explshotgun.dmi and /dev/null differ diff --git a/maps/torch/icons/obj/obj_accessories_solgov.dmi b/maps/torch/icons/obj/obj_accessories_solgov.dmi deleted file mode 100644 index 4b15f7026259b..0000000000000 Binary files a/maps/torch/icons/obj/obj_accessories_solgov.dmi and /dev/null differ diff --git a/maps/torch/icons/obj/obj_feet_solgov.dmi b/maps/torch/icons/obj/obj_feet_solgov.dmi deleted file mode 100644 index 07ae2fa8b7735..0000000000000 Binary files a/maps/torch/icons/obj/obj_feet_solgov.dmi and /dev/null differ diff --git a/maps/torch/icons/obj/obj_hands_solgov.dmi b/maps/torch/icons/obj/obj_hands_solgov.dmi deleted file mode 100644 index 8b889035b6eaf..0000000000000 Binary files a/maps/torch/icons/obj/obj_hands_solgov.dmi and /dev/null differ diff --git a/maps/torch/icons/obj/obj_head_solgov.dmi b/maps/torch/icons/obj/obj_head_solgov.dmi deleted file mode 100644 index b2946ef41b89a..0000000000000 Binary files a/maps/torch/icons/obj/obj_head_solgov.dmi and /dev/null differ diff --git a/maps/torch/icons/obj/obj_suit_solgov.dmi b/maps/torch/icons/obj/obj_suit_solgov.dmi deleted file mode 100644 index e4a4f3a08cd8a..0000000000000 Binary files a/maps/torch/icons/obj/obj_suit_solgov.dmi and /dev/null differ diff --git a/maps/torch/icons/obj/obj_under_solgov.dmi b/maps/torch/icons/obj/obj_under_solgov.dmi deleted file mode 100644 index 37abdf7c7396f..0000000000000 Binary files a/maps/torch/icons/obj/obj_under_solgov.dmi and /dev/null differ diff --git a/maps/torch/icons/obj/skrell/obj_head_solgov_skrell.dmi b/maps/torch/icons/obj/skrell/obj_head_solgov_skrell.dmi deleted file mode 100644 index 71b77ea2e1320..0000000000000 Binary files a/maps/torch/icons/obj/skrell/obj_head_solgov_skrell.dmi and /dev/null differ diff --git a/maps/torch/icons/obj/skrell/obj_suit_solgov_skrell.dmi b/maps/torch/icons/obj/skrell/obj_suit_solgov_skrell.dmi deleted file mode 100644 index ece7cb402fa2c..0000000000000 Binary files a/maps/torch/icons/obj/skrell/obj_suit_solgov_skrell.dmi and /dev/null differ diff --git a/maps/torch/icons/obj/solbanner.dmi b/maps/torch/icons/obj/solbanner.dmi deleted file mode 100644 index c81bd60a8d3bb..0000000000000 Binary files a/maps/torch/icons/obj/solbanner.dmi and /dev/null differ diff --git a/maps/torch/icons/obj/solgov-64x.dmi b/maps/torch/icons/obj/solgov-64x.dmi deleted file mode 100644 index 631f44ddbafd4..0000000000000 Binary files a/maps/torch/icons/obj/solgov-64x.dmi and /dev/null differ diff --git a/maps/torch/icons/obj/solgov-decals.dmi b/maps/torch/icons/obj/solgov-decals.dmi deleted file mode 100644 index 464b4a56397c7..0000000000000 Binary files a/maps/torch/icons/obj/solgov-decals.dmi and /dev/null differ diff --git a/maps/torch/icons/obj/solgov_floor.dmi b/maps/torch/icons/obj/solgov_floor.dmi deleted file mode 100644 index c7cd8dd0c60cc..0000000000000 Binary files a/maps/torch/icons/obj/solgov_floor.dmi and /dev/null differ diff --git a/maps/torch/icons/obj/unathi/obj_head_solgov_unathi.dmi b/maps/torch/icons/obj/unathi/obj_head_solgov_unathi.dmi deleted file mode 100644 index b918ef0a285ac..0000000000000 Binary files a/maps/torch/icons/obj/unathi/obj_head_solgov_unathi.dmi and /dev/null differ diff --git a/maps/torch/icons/obj/unathi/obj_suit_solgov_unathi.dmi b/maps/torch/icons/obj/unathi/obj_suit_solgov_unathi.dmi deleted file mode 100644 index ed18ed78a6a3e..0000000000000 Binary files a/maps/torch/icons/obj/unathi/obj_suit_solgov_unathi.dmi and /dev/null differ diff --git a/maps/torch/icons/obj/uniques.dmi b/maps/torch/icons/obj/uniques.dmi deleted file mode 100644 index 1346a7266e9ed..0000000000000 Binary files a/maps/torch/icons/obj/uniques.dmi and /dev/null differ diff --git a/maps/torch/icons/security_state.dmi b/maps/torch/icons/security_state.dmi deleted file mode 100644 index d471a0557c1ad..0000000000000 Binary files a/maps/torch/icons/security_state.dmi and /dev/null differ diff --git a/maps/torch/items/cards_ids.dm b/maps/torch/items/cards_ids.dm deleted file mode 100644 index adabbdd8abd5c..0000000000000 --- a/maps/torch/items/cards_ids.dm +++ /dev/null @@ -1,237 +0,0 @@ -//Torch ID Cards (they have to be here to make the outfits work, no way around it) - -/obj/item/card/id/torch - name = "identification card" - desc = "An identification card issued to personnel aboard the SEV Torch." - job_access_type = DEFAULT_JOB_TYPE - -/obj/item/card/id/torch/silver - desc = "A silver identification card belonging to heads of staff." - item_state = "silver_id" - job_access_type = /datum/job/hop - extra_details = list("goldstripe") - color = "#ccecff" - -/obj/item/card/id/torch/gold - desc = "A golden identification card belonging to the Commanding Officer." - item_state = "gold_id" - job_access_type = /datum/job/captain - color = "#d4c780" - extra_details = list("goldstripe") - -// SolGov Crew and Contractors -/obj/item/card/id/torch/crew - desc = "An identification card issued to SolGov crewmembers aboard the SEV Torch." - color = "#d3e3e1" - job_access_type = /datum/job/crew - color = "#ccecff" - - -/obj/item/card/id/torch/contractor - desc = "An identification card issued to private contractors aboard the SEV Torch." - job_access_type = DEFAULT_JOB_TYPE - color = COLOR_GRAY80 - - -/obj/item/card/id/torch/silver/medical - job_access_type = /datum/job/cmo - detail_color = COLOR_PALE_BLUE_GRAY - -/obj/item/card/id/torch/crew/medical - job_access_type = /datum/job/doctor - detail_color = COLOR_PALE_BLUE_GRAY - -/obj/item/card/id/torch/crew/medical/senior - job_access_type = /datum/job/senior_doctor - -/obj/item/card/id/torch/contractor/medical - job_access_type = /datum/job/doctor - detail_color = COLOR_PALE_BLUE_GRAY - -/obj/item/card/id/torch/contractor/medical/senior - job_access_type = /datum/job/senior_doctor - -/obj/item/card/id/torch/contractor/chemist - job_access_type = /datum/job/chemist - detail_color = COLOR_PALE_BLUE_GRAY - -/obj/item/card/id/torch/contractor/medical/counselor - job_access_type = /datum/job/psychiatrist - -/obj/item/card/id/torch/silver/security - job_access_type = /datum/job/hos - detail_color = "#e00000" - -/obj/item/card/id/torch/crew/security - job_access_type = /datum/job/officer - detail_color = "#e00000" - -/obj/item/card/id/torch/crew/security/brigchief - job_access_type = /datum/job/warden - extra_details = list("onegoldstripe") - -/obj/item/card/id/torch/crew/security/forensic - job_access_type = /datum/job/detective - - -/obj/item/card/id/torch/silver/engineering - job_access_type = /datum/job/chief_engineer - detail_color = COLOR_SUN - -/obj/item/card/id/torch/crew/engineering - job_access_type = /datum/job/engineer - detail_color = COLOR_SUN - -/obj/item/card/id/torch/crew/engineering/senior - job_access_type = /datum/job/senior_engineer - extra_details = list("onegoldstripe") - -/obj/item/card/id/torch/contractor/engineering - job_access_type = /datum/job/engineer - detail_color = COLOR_SUN - -/obj/item/card/id/torch/contractor/engineering/roboticist - job_access_type = /datum/job/roboticist - - -/obj/item/card/id/torch/crew/supply/deckofficer - job_access_type = /datum/job/qm - detail_color = COLOR_BROWN - extra_details = list("onegoldstripe") - -/obj/item/card/id/torch/crew/supply - job_access_type = /datum/job/cargo_tech - detail_color = COLOR_BROWN - -/obj/item/card/id/torch/contractor/supply - job_access_type = /datum/job/cargo_tech - detail_color = COLOR_BROWN - -/obj/item/card/id/torch/crew/service //unused - job_access_type = DEFAULT_JOB_TYPE - detail_color = COLOR_CIVIE_GREEN - -/obj/item/card/id/torch/crew/service/janitor - job_access_type = /datum/job/janitor - -/obj/item/card/id/torch/crew/service/chef - job_access_type = /datum/job/chef - -/obj/item/card/id/torch/crew/service/chaplain - job_access_type = /datum/job/chaplain - -/obj/item/card/id/torch/contractor/service //unused - job_access_type = DEFAULT_JOB_TYPE - detail_color = COLOR_CIVIE_GREEN - - -/obj/item/card/id/torch/crew/representative - job_access_type = /datum/job/representative - detail_color = COLOR_COMMAND_BLUE - -/obj/item/card/id/torch/crew/sea - job_access_type = /datum/job/sea - detail_color = COLOR_COMMAND_BLUE - extra_details = list("onegoldstripe") - -/obj/item/card/id/torch/crew/bridgeofficer - job_access_type = /datum/job/bridgeofficer - detail_color = COLOR_COMMAND_BLUE - -/obj/item/card/id/torch/crew/pathfinder - job_access_type = /datum/job/pathfinder - detail_color = COLOR_PURPLE - extra_details = list("onegoldstripe") - -/obj/item/card/id/torch/crew/explorer - job_access_type = /datum/job/explorer - detail_color = COLOR_PURPLE - -/obj/item/card/id/torch/crew/pilot - job_access_type = /datum/job/nt_pilot - detail_color = COLOR_PURPLE - -//EC Medic -/obj/item/card/id/torch/crew/expmed - job_access_type = /datum/job/expmed - detail_color = COLOR_PURPLE - -//EC Engineer -/obj/item/card/id/torch/crew/expeng - job_access_type = /datum/job/expeng - detail_color = COLOR_PURPLE - -//EC Marine -/obj/item/card/id/torch/crew/expmar - job_access_type = /datum/job/expmar - detail_color = COLOR_PURPLE - -// EC Science -/obj/item/card/id/torch/silver/research - job_access_type = /datum/job/rd - detail_color = COLOR_RESEARCH - color = COLOR_WHITE - -/obj/item/card/id/torch/crew/research - desc = "A card issued to science personnel aboard the SEV Torch." - job_access_type = /datum/job/scientist_assistant - detail_color = COLOR_RESEARCH - -/obj/item/card/id/torch/crew/research/senior_scientist - job_access_type = /datum/job/senior_scientist - extra_details = list("onegoldstripe") - -/obj/item/card/id/torch/crew/research/scientist - job_access_type = /datum/job/scientist - -/obj/item/card/id/torch/crew/research/research_guard - job_access_type = /datum/job/research_guard - -//NanoTrasen and Passengers - -/obj/item/card/id/torch/passenger - desc = "A card issued to passengers aboard the SEV Torch." - job_access_type = DEFAULT_JOB_TYPE - detail_color = COLOR_PAKISTAN_GREEN - -/obj/item/card/id/torch/passenger/research - desc = "A card issued to corporate personnel aboard the SEV Torch." - job_access_type = /datum/job/scientist_assistant - detail_color = COLOR_BOTTLE_GREEN - -/obj/item/card/id/torch/passenger/research/senior_scientist - job_access_type = /datum/job/senior_scientist - extra_details = list("onegoldstripe") - -/obj/item/card/id/torch/passenger/research/nt_pilot - job_access_type = /datum/job/nt_pilot - -/obj/item/card/id/torch/passenger/research/scientist - job_access_type = /datum/job/scientist - -/obj/item/card/id/torch/passenger/research/mining - job_access_type = /datum/job/mining - -/obj/item/card/id/torch/passenger/corporate - color = COLOR_BOTTLE_GREEN - detail_color = COLOR_OFF_WHITE - -/obj/item/card/id/torch/passenger/corporate/liaison - job_access_type = /datum/job/liaison - extra_details = list("onegoldstripe") - -//Merchant -/obj/item/card/id/torch/merchant - desc = "An identification card issued to Merchants, indicating their right to sell and buy goods." - job_access_type = /datum/job/merchant - color = COLOR_OFF_WHITE - detail_color = COLOR_BEIGE - -/obj/item/card/id/torch/gold/synth - name = "identification card" - desc = "A green card given to experimantal EXO's synthetic assistants." - item_state = "silver_id" - assignment = "Synthetic" - color = COLOR_BOTTLE_GREEN - detail_color = COLOR_OFF_WHITE - job_access_type = /datum/job/captain diff --git a/maps/torch/items/clothing/ec_skillbadges.dm b/maps/torch/items/clothing/ec_skillbadges.dm deleted file mode 100644 index 2bab39c7e397f..0000000000000 --- a/maps/torch/items/clothing/ec_skillbadges.dm +++ /dev/null @@ -1,91 +0,0 @@ - -/obj/item/clothing/accessory/solgov/skillbadge - name = "skill badge" - desc = "An EC skill badge signifying that the bearer has passed the advanced training on spawning wrong types. Informally known as 'Shouldn't be seeing this'." - slot = ACCESSORY_SLOT_INSIGNIA - var/badgecolor //for on-mob sprite cause im not putting 9000 colored pixels in dmi - -/obj/item/clothing/accessory/solgov/skillbadge/get_mob_overlay(mob/user_mob, slot) - var/image/I = ..() - if(!istype(loc,/obj/item/clothing)) - return I - I.icon_state = "ec_spec_badge" - I.color = badgecolor - return I - -/obj/item/clothing/accessory/solgov/skillbadge/botany - name = "\improper Field Xenobotany Specialist badge" - desc = "An EC skill badge signifying that the bearer has passed the advanced training on handling exotic xenoflora. Informally known as 'Vine Wrangler'." - icon_state = "ec_badge_botany" - badgecolor = "#387c4f" - -/obj/item/clothing/accessory/solgov/skillbadge/netgun - name = "\improper Xenofauna Acquisition Specialist badge" - desc = "An EC skill badge signifying that the bearer has passed the advanced training on capturing alien wildlife with the netgun. Informally known as 'Xeno-Cowboy'." - icon_state = "ec_badge_netgun" - badgecolor = "#6a60a1" - -/obj/item/clothing/accessory/solgov/skillbadge/eva - name = "\improper Void Mobility Specialist badge" - desc = "An EC skill badge signifying that the bearer has passed the advanced training on moving around in zero-g using a jetpack. Informally known as 'Zoomer'." - icon_state = "ec_badge_eva" - badgecolor = "#4d9799" - -/obj/item/clothing/accessory/solgov/skillbadge/medical - name = "\improper Advanced First Aid Specialist badge" - desc = "An EC skill badge signifying that the bearer has passed the advanced training on CPR and basic medical tech. Informally known as 'Para-paramedic'." - icon_state = "ec_badge_med" - badgecolor = "#47799e" - -/obj/item/clothing/accessory/solgov/skillbadge/mech - name = "\improper Exosuit Specialist badge" - desc = "An EC skill badge signifying that the bearer has passed the advanced training on piloting exosuits. Informally known as 'Exonaut'." - icon_state = "ec_badge_exo" - badgecolor = "#72763d" - -/obj/item/clothing/accessory/solgov/skillbadge/electric - name = "\improper Electrical Specialist badge" - desc = "An EC skill badge signifying that the bearer has passed the advanced training on working with high-voltage electrical systems. Informally known as 'Jury-rigger'." - icon_state = "ec_badge_electro" - badgecolor = "#8e633f" - -/obj/item/clothing/accessory/solgov/skillbadge/science - name = "\improper Research Specialist badge" - desc = "An EC skill badge signifying that the bearer has passed the advanced training on assisting in the labs and working the sensor suites. Informally known as 'Peeper'." - icon_state = "ec_badge_sci" - badgecolor = "#7876ad" - -// Voidsuit accessory - -/obj/item/clothing/accessory/solgov/skillstripe - name = "specialist stripe" - desc = "A thin stripe of spaceworthy material with vacuum-rated adhesive, for attaching to the voidsuit. Indicates some sort of specialist training." - slot = ACCESSORY_SLOT_INSIGNIA - on_rolled = list("down" = "none") - accessory_flags = ACCESSORY_REMOVABLE | ACCESSORY_HIGH_VISIBILITY - icon_state = "ec_stripe" - -/obj/item/clothing/accessory/solgov/skillstripe/botany - name = "xenobotanist stripe" - desc = "A thin stripe of spaceworthy material with vacuum-rated adhesive, for attaching to the voidsuit. Indicates Field Xenobotany Specialist training." - color = "#387c4f" - -/obj/item/clothing/accessory/solgov/skillstripe/netgun - name = "netgunner stripe" - desc = "A thin stripe of spaceworthy material with vacuum-rated adhesive, for attaching to the voidsuit. Indicates Xenofauna Acquisition Specialist training." - color = "#6a60a1" - -/obj/item/clothing/accessory/solgov/skillstripe/eva - name = "void stripe" - desc = "A thin stripe of spaceworthy material with vacuum-rated adhesive, for attaching to the voidsuit. Indicates Void Mobility Specialist training." - color = "#3d7172" - -/obj/item/clothing/accessory/solgov/skillstripe/medical - name = "medic stripe" - desc = "A thin stripe of spaceworthy material with vacuum-rated adhesive, for attaching to the voidsuit. Indicates Advanced First Aid Specialist training." - color = "#2d6295" - -/obj/item/clothing/accessory/solgov/skillstripe/electric - name = "electrician stripe" - desc = "A thin stripe of spaceworthy material with vacuum-rated adhesive, for attaching to the voidsuit. Indicates Electrical Specialist training." - color = "#8e633f" diff --git a/maps/torch/items/clothing/solgov-accessory.dm b/maps/torch/items/clothing/solgov-accessory.dm deleted file mode 100644 index 0321351eeca22..0000000000000 --- a/maps/torch/items/clothing/solgov-accessory.dm +++ /dev/null @@ -1,1074 +0,0 @@ -/obj/item/clothing/accessory/solgov - name = "master solgov accessory" - icon = 'maps/torch/icons/obj/obj_accessories_solgov.dmi' - accessory_icons = list(slot_w_uniform_str = 'maps/torch/icons/mob/onmob_accessories_solgov.dmi', slot_wear_suit_str = 'maps/torch/icons/mob/onmob_accessories_solgov.dmi') - w_class = ITEM_SIZE_TINY - -/***** -medals -*****/ -/obj/item/clothing/accessory/medal/solgov - name = "master solgov medal" - desc = "You shouldn't be seeing this." - icon = 'maps/torch/icons/obj/obj_accessories_solgov.dmi' - accessory_icons = list(slot_w_uniform_str = 'maps/torch/icons/mob/onmob_accessories_solgov.dmi', slot_wear_suit_str = 'maps/torch/icons/mob/onmob_accessories_solgov.dmi') - -//medals ranked from least to greatest - -//Universal medals -/obj/item/clothing/accessory/medal/solgov/medical - name = "\improper Combat Medical Award" - desc = "An electrum heart medal with a Staff of Hermes and sanguine cross, awarded by the SCG to individuals who have served as medical personnel in an active combat zone." - icon_state = "medal_medical" - -//Military medals -/obj/item/clothing/accessory/medal/solgov/mil/bronze_heart - name = "\improper Bronze Heart medal" - desc = "A bronze heart awarded by the SCG for members of the SCG Defense Forces who suffer injury or death in a combat zone." - icon_state = "medal_bronze_heart" - -/obj/item/clothing/accessory/medal/solgov/mil/home_guard - name = "\improper Home Guard medal" - desc = "A bronze medal awarded by the SCG for members of the SCG Defense Forces who have helped defend the border regions of Sol." - icon_state = "medal_home_guard" - -/obj/item/clothing/accessory/medal/solgov/mil/iron_star - name = "\improper Iron Star medal" - desc = "An iron star awarded by the SCG to members of the SCG Defense Forces who have performed acts of 'meritorious achievements or service.'" - icon_state = "medal_iron_star" - -/obj/item/clothing/accessory/medal/solgov/mil/armed_forces - name = "\improper Armed Forces Medal" - desc = "A brass medal awarded by the SCG for members of the SCG Defense Forces who have performed distinguishing acts outside of direct combat with an enemy." - icon_state = "medal_armed_forces" - -/obj/item/clothing/accessory/medal/solgov/mil/silver_sword - name = "\improper Silver Sword medal" - desc = "A silver medal awarded by the SCG for members of the SCG Defense Forces who have demonstrated exceptional valor in combat." - icon_state = "medal_silver_sword" - -/obj/item/clothing/accessory/medal/solgov/mil/service_cross - name = "\improper Superior Service Cross" - desc = "A copper cross awarded by the SCG for members of the SCG Defense Forces who have performed acts of incredible valor against an enemy of Sol." - icon_state = "medal_service_cross" - -/obj/item/clothing/accessory/medal/solgov/mil/medal_of_honor - name = "\improper Medal of Honor" - desc = "An ornate golden medal awarded and conferred by the SCG Secretary-General to members of the SCG Defense Forces who have committed acts of 'conspicuous gallantry beyond the call of duty.'" - icon_state = "medal_of_honor" - -//Civilian medals -/obj/item/clothing/accessory/medal/solgov/civ/expeditionary - name = "\improper Expeditionary Medal" - desc = "An iron medal awarded by the SCG for individuals who have participated in missions outside the borders of the Sol Central Government." - icon_state = "medal_expeditionary" - -/obj/item/clothing/accessory/medal/solgov/civ/sapientarian - name = "\improper Sapientarian Peace Award" - desc = "A copper medal awarded by the SCG for individuals who have contributed substantially to sapient rights or fostered greater brotherhood between sapient species. It is embossed with a date, text, and an image of famous Expeditionary Corps sapientarian, Samuel Carr." - icon_state = "medal_sapientarian" - -/obj/item/clothing/accessory/medal/solgov/civ/service - name = "\improper Distinguished Service Medal" - desc = "A golden sun medal awarded by the SCG to nonmilitary individuals who have made exceptional contributions to the Sol Central Government." - icon_state = "medal_service" - -/obj/item/clothing/accessory/solgov - var/check_codex_val = FACTION_FLEET - -/obj/item/clothing/accessory/solgov/get_codex_value() - return check_codex_val || ..() - -/***** -patches -*****/ -/obj/item/clothing/accessory/solgov/torch_patch - name = "\improper Torch mission patch" - desc = "A fire resistant shoulder patch, worn by the personnel involved in the Torch Project." - icon_state = "torchpatch" - on_rolled = list("down" = "none") - slot = ACCESSORY_SLOT_INSIGNIA - sprite_sheets = list( - SPECIES_UNATHI = 'icons/mob/species/unathi/onmob_accessories_sol_unathi.dmi' - ) - -/obj/item/clothing/accessory/solgov/ec_patch - name = "\improper Observatory patch" - desc = "A laminated shoulder patch, carrying the symbol of the Sol Central Government Expeditionary Corpss Observatory, or SCGEO for short, the eyes and ears of the Expeditionary Corps' missions." - icon_state = "ecpatch1" - on_rolled = list("down" = "none") - slot = ACCESSORY_SLOT_INSIGNIA - check_codex_val = FACTION_EXPEDITIONARY - -/obj/item/clothing/accessory/solgov/ec_patch/fieldops - name = "\improper Field Operations patch" - desc = "A radiation-shielded shoulder patch, carrying the symbol of the Sol Central Government Expeditionary Corps Field Operations, or SCGECFO for short, the hands-on workers of every Expeditionary Corps mission." - icon_state = "ecpatch2" - -/obj/item/clothing/accessory/solgov/cultex_patch - name = "\improper Cultural Exchange patch" - desc = "A radiation-shielded shoulder patch, denoting service in the the Sol Central Government Expeditionary Corps Cultural Exchange program." - icon_state = "ecpatch3" - slot = ACCESSORY_SLOT_INSIGNIA - check_codex_val = FACTION_EXPEDITIONARY - -/obj/item/clothing/accessory/solgov/fleet_patch - name = "\improper First Fleet patch" - desc = "A fancy shoulder patch carrying insignia of First Fleet, the Sol Guard, stationed in Sol." - icon_state = "fleetpatch1" - on_rolled = list("down" = "none") - slot = ACCESSORY_SLOT_INSIGNIA - -/obj/item/clothing/accessory/solgov/fleet_patch/second - name = "\improper Second Fleet patch" - desc = "A well-worn shoulder patch carrying insignia of Second Fleet, the Home Guard, tasked with defense of Sol territories." - icon_state = "fleetpatch2" - -/obj/item/clothing/accessory/solgov/fleet_patch/third - name = "\improper Third Fleet patch" - desc = "A scuffed shoulder patch carrying insignia of Third Fleet, the Border Guard, guarding borders of Sol territory against Vox and pirates." - icon_state = "fleetpatch3" - -/obj/item/clothing/accessory/solgov/fleet_patch/fourth - name = "\improper Fourth Fleet patch" - desc = "A pristine shoulder patch carrying insignia of Fourth Fleet, stationed on Skrell border." - icon_state = "fleetpatch4" - -/obj/item/clothing/accessory/solgov/fleet_patch/fifth - name = "\improper Fifth Fleet patch" - desc = "A tactical shoulder patch carrying insignia of Fifth Fleet, the Quick Reaction Force, recently formed and outfited with last tech." - icon_state = "fleetpatch5" - -/***** -scarves -*****/ -/obj/item/clothing/accessory/solgov/ec_scarf - name = "expeditionary scarf" - desc = "An SCG blue silk scarf, meant to be worn with Expeditionary Corps uniforms." - icon = 'icons/obj/clothing/obj_accessories.dmi' - accessory_icons = list(slot_w_uniform_str = 'icons/mob/onmob/onmob_accessories.dmi', slot_wear_suit_str = 'icons/mob/onmob/onmob_accessories.dmi') - icon_state = "whitescarf" - on_rolled = list("down" = "none") - color = "#68a0ce" - check_codex_val = FACTION_EXPEDITIONARY - -/obj/item/clothing/accessory/solgov/ec_scarf/observatory - name = "\improper Observatory scarf" - desc = "A silk scarf in Expeditionary Corps Observatory section colors, meant to be worn with Expeditionary Corps uniforms." - color = "#58bb59" - -/obj/item/clothing/accessory/solgov/ec_scarf/fieldops - name = "\improper Field Operations scarf" - desc = "A silk scarf in Expeditionary Corps Field Operations section colors, meant to be worn with Expeditionary Corps uniforms." - color = "#9f84b3" - -/****** -ribbons -******/ -/obj/item/clothing/accessory/ribbon/solgov - name = "ribbon" - desc = "A simple military decoration." - icon_state = "ribbon_marksman" - on_rolled = list("down" = "none") - slot = ACCESSORY_SLOT_MEDAL - icon = 'maps/torch/icons/obj/obj_accessories_solgov.dmi' - accessory_icons = list(slot_w_uniform_str = 'maps/torch/icons/mob/onmob_accessories_solgov.dmi', slot_wear_suit_str = 'maps/torch/icons/mob/onmob_accessories_solgov.dmi') - w_class = ITEM_SIZE_TINY - -//General ribbons/decorations -/obj/item/clothing/accessory/ribbon/solgov/marksman - name = "marksmanship ribbon" - desc = "A military ribbon awarded to members of the SCG Defense Forces for good marksmanship scores in training. Common in the days of energy weapons." - icon_state = "ribbon_marksman" - -/obj/item/clothing/accessory/ribbon/solgov/peace - name = "peacekeeping ribbon" - desc = "A military ribbon awarded to members of the SCG Defense Forces for service during a peacekeeping operation." - icon_state = "ribbon_peace" - -/obj/item/clothing/accessory/ribbon/solgov/frontier - name = "frontier ribbon" - desc = "A military ribbon awarded to members of the SCG Defense Forces for service along the frontier." - icon_state = "ribbon_frontier" - -/obj/item/clothing/accessory/ribbon/solgov/instructor - name = "instructor ribbon" - desc = "A military ribbon awarded to members of the SCG Defense Forces for service as an instructor or professional development agent." - icon_state = "ribbon_instructor" - -/obj/item/clothing/accessory/ribbon/solgov/combat - name = "combat action ribbon" - desc = "A military ribbon awarded to members of the SCG Defense Forces for serving in active combat. Colloquially known as 'blood gold.'" - icon_state = "ribbon_combat" - -/obj/item/clothing/accessory/ribbon/solgov/gaiaconflict - name = "\improper Gaia Conflict ribbon" - desc = "A military ribbon awarded to members of the SCG Defense Forces for serving in the Gaia Conflict." - icon_state = "ribbon_gaiaconflict" - -/obj/item/clothing/accessory/ribbon/solgov/distinguished_unit - name = "distinguished unit ribbon" - desc = "A military ribbon awarded to members of the SCG Defense Forces for service as part of a unit that has performed a distinguishing act of valor." - icon_state = "ribbon_distinguished_unit" - -//Medal ribbons -/obj/item/clothing/accessory/ribbon/solgov/medal/bronze_heart - name = "\improper Bronze Heart ribbon" - desc = "A military ribbon awarded by the SCG alongside the Bronze Heart. To be worn when it is impossible or undesirable to wear the Bronze Heart." - icon_state = "ribbon_medal_bronze_heart" - -/obj/item/clothing/accessory/ribbon/solgov/medal/home_guard - name = "\improper Home Guard ribbon" - desc = "A military ribbon awarded by the SCG alongside the Home Guard medal. To be worn when it is impossible or undesirable to wear the Home Guard medal." - icon_state = "ribbon_medal_home_guard" - -/obj/item/clothing/accessory/ribbon/solgov/medal/iron_star - name = "\improper Iron Star ribbon" - desc = "A military ribbon awarded by the SCG alongside the Iron Star medal. To be worn when it is impossible or undesirable to wear the Iron Star." - icon_state = "ribbon_medal_iron_star" - -/obj/item/clothing/accessory/ribbon/solgov/medal/armed_forces - name = "\improper Armed Forces ribbon" - desc = "A military ribbon awarded by the SCG alongside the Armed Forces Medal. To be worn when it is impossible or undesirable to wear the Armed Forces Medal." - icon_state = "ribbon_medal_armed_forces" - -/obj/item/clothing/accessory/ribbon/solgov/medal/silver_sword - name = "\improper Silver Sword ribbon" - desc = "A military ribbon awarded by the SCG alongside the Silver Sword medal. To be worn when it is impossible or undesirable to wear the Silver Sword." - icon_state = "ribbon_medal_silver_sword" - -/obj/item/clothing/accessory/ribbon/solgov/medal/service_cross - name = "\improper Superior Service ribbon" - desc = "A military ribbon awarded by the SCG alongside the Superior Service Cross. To be worn when it is impossible or undesirable to wear the Service Cross." - icon_state = "ribbon_medal_service_cross" - -/obj/item/clothing/accessory/ribbon/solgov/medal/medal_of_honor - name = "\improper Medal of Honor ribbon" - desc = "A military ribbon awarded by the SCG alongside the Medal of Honor. To be worn when it is impossible or undesirable to wear the Medal of Honor." - icon_state = "ribbon_medal_of_honor" - -/obj/item/clothing/accessory/ribbon/solgov/medal/expeditionary_medal - name = "\improper Expeditionary Ribbon" - desc = "A military ribbon awarded by the SCG alongside the Expeditionary Medal. To be worn when it is impossible or undesirable to wear the Expeditionary Medal." - icon_state = "ribbon_medal_expeditionary" - -/obj/item/clothing/accessory/ribbon/solgov/medal/sapientarian - name = "\improper Sapientarian ribbon" - desc = "A military ribbon awarded by the SCG alongside the Sapientarian Peace Award. To be worn when it is impossible or undesirable to wear the Sapientarian Award." - icon_state = "ribbon_medal_sapientarian" - -/obj/item/clothing/accessory/ribbon/solgov/medal/service - name = "\improper Distinguished Service ribbon" - desc = "A military ribbon awarded by the SCG alongside the Distinguished Service Medal. To be worn when it is impossible or undesirable to wear the Distinguished Service Medal." - icon_state = "ribbon_medal_service" - -/obj/item/clothing/accessory/ribbon/solgov/medal/medical - name = "\improper Combat Medical ribbon" - desc = "A military ribbon awarded by the SCG alongside the Combat Medical Award. To be worn when it is impossible or undesirable to wear the Combat Medical Award." - icon_state = "ribbon_medal_medical" - - -/************* -specialty pins -*************/ -/obj/item/clothing/accessory/solgov/specialty - name = "speciality blaze" - desc = "A color blaze denoting fleet personnel in some special role. This one is silver." - icon_state = "armyrank_command" - slot = ACCESSORY_SLOT_INSIGNIA - icon_state = "fleetspec" - -/obj/item/clothing/accessory/solgov/specialty/janitor - name = "custodial blazes" - desc = "Purple blazes denoting a custodial technician." - color = "#913da7" - -/obj/item/clothing/accessory/solgov/specialty/brig - name = "brig blazes" - desc = "Red blazes denoting a brig chief." - color = "#bf0000" - -/obj/item/clothing/accessory/solgov/specialty/forensic - name = "forensics blazes" - desc = "Steel blazes denoting a forensic technician." - color = "#939fb1" - -/obj/item/clothing/accessory/solgov/specialty/atmos - name = "atmospherics blazes" - desc = "Turquoise blazes denoting an atmospheric technician." - color = "#469085" - -/obj/item/clothing/accessory/solgov/specialty/counselor - name = "counselor blazes" - desc = "Blue blazes denoting a counselor." - color = "#4c9ce4" - -/obj/item/clothing/accessory/solgov/specialty/chemist - name = "pharmacy blazes" - desc = "Orange blazes denoting a pharmacist." - color = "#ff6600" - -/obj/item/clothing/accessory/solgov/specialty/enlisted - name = "enlisted qualification pin" - desc = "An iron pin denoting some special qualification." - icon_state = "fleetpin_enlisted" - -/obj/item/clothing/accessory/solgov/specialty/officer - name = "officer's qualification pin" - desc = "A golden pin denoting some special qualification." - icon_state = "fleetpin_officer" - -/obj/item/clothing/accessory/solgov/specialty/pilot - name = "pilot's qualification pin" - desc = "An iron pin denoting the qualification to fly SCG spacecraft." - icon_state = "pin_pilot" - -/***** -badges -*****/ -/obj/item/clothing/accessory/badge/solgov - name = "master solgov badge" - icon = 'maps/torch/icons/obj/obj_accessories_solgov.dmi' - accessory_icons = list(slot_w_uniform_str = 'maps/torch/icons/mob/onmob_accessories_solgov.dmi', slot_wear_suit_str = 'maps/torch/icons/mob/onmob_accessories_solgov.dmi') - -/obj/item/clothing/accessory/badge/solgov/security - name = "security forces badge" - desc = "A silver law enforcement badge. Stamped with the words 'Master at Arms'." - icon_state = "silverbadge" - slot_flags = SLOT_TIE - badge_string = "Sol Central Government" - -/obj/item/clothing/accessory/badge/solgov/tags - name = "dog tags" - desc = "Plain identification tags made from a durable metal. They are stamped with a variety of informational details." - gender = PLURAL - icon_state = "tags" - badge_string = "Sol Central Government" - slot_flags = SLOT_MASK | SLOT_TIE - var/owner_rank - var/owner_name - var/owner_branch - - -/obj/item/clothing/accessory/badge/solgov/tags/proc/loadout_setup(mob/M) - set_name(M.real_name) - set_desc(M) - -/obj/item/clothing/accessory/badge/solgov/tags/set_desc(mob/living/carbon/human/H) - if(!istype(H)) - return - owner_rank = H.char_rank && H.char_rank.name - owner_name = H.real_name - owner_branch = H.char_branch && H.char_branch.name - var/decl/cultural_info/culture = H.get_cultural_value(TAG_RELIGION) - var/religion = culture ? culture.name : "Unset" - desc = "[initial(desc)]\nName: [H.real_name] ([H.get_species()])[H.char_branch ? "\nBranch: [H.char_branch.name]" : ""]\nReligion: [religion]\nBlood type: [H.b_type]" - -//proxima coding.moment -/obj/item/clothing/accessory/badge/solgov/tags/iccgn - name = "dog tags" - desc = "Plain identification tags made from a durable metal. They are stamped with a variety of informational details." - gender = PLURAL - icon_state = "tags" - badge_string = "Independent Colonial Confederation of Gilgamesh" - slot_flags = SLOT_MASK | SLOT_TIE - - -/obj/item/clothing/accessory/badge/solgov/tags/iccgn/set_desc(mob/living/carbon/human/H) - if(!istype(H)) - return - owner_name = H.real_name - var/decl/cultural_info/culture = H.get_cultural_value(TAG_RELIGION) - var/religion = culture ? culture.name : "Unset" - desc = "[initial(desc)]\nName: [H.real_name] ([H.get_species()])\nReligion: [religion]\nBlood type: [H.b_type]" - -/obj/item/clothing/accessory/badge/solgov/synthetic - name = "\improper synthetic's badge" - desc = "A red leather-backed gold badge with silver 'SYNTH' letters written on it, displaying advanced EXO Corporative Shell IPC." - icon = 'maps/torch/icons/obj/obj_accessories_solgov.dmi' - icon_state = "solbadge" - slot_flags = SLOT_BELT | SLOT_TIE | ACCESSORY_REMOVABLE | ACCESSORY_HIGH_VISIBILITY - slot = ACCESSORY_SLOT_RANK - - -/obj/item/clothing/accessory/badge/solgov/representative - name = "representative's badge" - desc = "A leather-backed plastic badge with a variety of information printed on it. Belongs to a representative of the Sol Central Government." - icon_state = "solbadge" - slot_flags = SLOT_TIE - badge_string = "Sol Central Government" - -/******* -armbands -*******/ -/obj/item/clothing/accessory/armband/solgov - name = "master solgov armband" - icon = 'maps/torch/icons/obj/obj_accessories_solgov.dmi' - accessory_icons = list(slot_w_uniform_str = 'maps/torch/icons/mob/onmob_accessories_solgov.dmi', slot_wear_suit_str = 'maps/torch/icons/mob/onmob_accessories_solgov.dmi') - sprite_sheets = list( - SPECIES_UNATHI = 'icons/mob/species/unathi/onmob_accessories_sol_unathi.dmi' - ) - -/obj/item/clothing/accessory/armband/solgov/mp - name = "military police brassard" - desc = "An armlet, worn by the crew to display which department they're assigned to. This one is black with 'MP' in white." - icon_state = "mpband" - -/obj/item/clothing/accessory/armband/solgov/ma - name = "master at arms brassard" - desc = "An armlet, worn by the crew to display which department they're assigned to. This one is white with 'MA' in navy blue." - icon_state = "maband" - -/obj/item/storage/box/armband - name = "box of spare military police armbands" - desc = "A box full of security armbands. For use in emergencies when provisional security personnel are needed." - startswith = list(/obj/item/clothing/accessory/armband/solgov/mp = 5) - -//proxima code start -/obj/item/storage/box/armband/sec - name = "box of spare security armbands" - desc = "A box full of security armbands. For use in emergencies when provisional security personnel are needed." - startswith = list(/obj/item/clothing/accessory/armband/solgov/ma = 5) - -/obj/item/storage/box/armband/red_sec - name = "box of spare red security armbands" - desc = "A box full of red security armbands. For use in emergencies when provisional security peronnel are needed." - startswith = list(/obj/item/clothing/accessory/armband = 5) -//proxima code end - -/***************** -armour attachments -*****************/ -/obj/item/clothing/accessory/armor_tag/solgov - name = "\improper SCG Flag" - desc = "An emblem depicting the Sol Central Government's flag." - icon_override = 'maps/torch/icons/obj/obj_accessories_solgov.dmi' - icon = 'maps/torch/icons/obj/obj_accessories_solgov.dmi' - accessory_icons = list(slot_w_uniform_str = 'maps/torch/icons/mob/onmob_accessories_solgov.dmi', slot_wear_suit_str = 'maps/torch/icons/mob/onmob_accessories_solgov.dmi') - icon_state = "solflag" - slot = ACCESSORY_SLOT_ARMOR_M - -/obj/item/clothing/accessory/armor_tag/solgov/ec - name = "\improper Expeditionary Corps crest" - desc = "An emblem depicting the crest of the SCG Expeditionary Corps." - icon_state = "ecflag" - -/obj/item/clothing/accessory/armor_tag/solgov/sec - name = "\improper POLICE tag" - desc = "An armor tag with the word POLICE printed in silver lettering on it." - icon_state = "sectag" - -/obj/item/clothing/accessory/armor_tag/solgov/medic - name = "\improper MEDIC tag" - desc = "An armor tag with the word MEDIC printed in red lettering on it." - icon_state = "medictag" - -/obj/item/clothing/accessory/armor_tag/solgov/agent - name = "\improper SFP AGENT tag" - desc = "An armor tag with the words SFP AGENT printed in gold lettering on it." - icon_state = "agenttag" - -/obj/item/clothing/accessory/armor_tag/solgov/com - name = "\improper SCG tag" - desc = "An armor tag with the words SOL CENTRAL GOVERNMENT printed in gold lettering on it." - icon_state = "comtag" - -/obj/item/clothing/accessory/armor_tag/solgov/com/sec - name = "\improper POLICE tag" - desc = "An armor tag with the words POLICE printed in gold lettering on it." - -/obj/item/clothing/accessory/helmet_cover/blue/sol - name = "peacekeeper helmet cover" - desc = "A fabric cover for armored helmets. This one is in SCG peacekeeper colors." - -/************** -department tags -**************/ -/obj/item/clothing/accessory/solgov/department - name = "department insignia" - desc = "Insignia denoting assignment to a department. These appear blank." - icon_state = "dept_exped" - on_rolled = list("down" = "none", "rolled" = "dept_exped_sleeves") - slot = ACCESSORY_SLOT_DEPT - accessory_flags = EMPTY_BITFIELD - sprite_sheets = list( - SPECIES_UNATHI = 'icons/mob/species/unathi/onmob_accessories_sol_unathi.dmi' - ) - -/obj/item/clothing/accessory/solgov/department/command - name = "command insignia" - desc = "Insignia denoting assignment to the command department. These fit Expeditionary Corps uniforms." - color = "#e5ea4f" - -/obj/item/clothing/accessory/solgov/department/command/service - icon_state = "dept_exped_service" - -/obj/item/clothing/accessory/solgov/department/command/jumper - icon_state = "dept_exped_jumper" - color = "#d6bb64" - -/obj/item/clothing/accessory/solgov/department/command/fleet - icon_state = "dept_fleet" - desc = "Insignia denoting assignment to the command department. These fit Fleet uniforms." - on_rolled = list("rolled" = "dept_fleet_sleeves", "down" = "none") - -/obj/item/clothing/accessory/solgov/department/command/army - icon_state = "dept_army" - desc = "Insignia denoting assignment to the command department. These fit Army uniforms." - on_rolled = list("down" = "none") - -/obj/item/clothing/accessory/solgov/department/engineering - name = "engineering insignia" - desc = "Insignia denoting assignment to the engineering department. These fit Expeditionary Corps uniforms." - color = "#ff7f00" - -/obj/item/clothing/accessory/solgov/department/engineering/service - icon_state = "dept_exped_service" - -/obj/item/clothing/accessory/solgov/department/engineering/fleet - icon_state = "dept_fleet" - desc = "Insignia denoting assignment to the engineering department. These fit Fleet uniforms." - on_rolled = list("rolled" = "dept_fleet_sleeves", "down" = "none") - -/obj/item/clothing/accessory/solgov/department/engineering/army - icon_state = "dept_army" - desc = "Insignia denoting assignment to the engineering department. These fit Army uniforms." - on_rolled = list("down" = "none") - -/obj/item/clothing/accessory/solgov/department/security - name = "security insignia" - desc = "Insignia denoting assignment to the security department. These fit Expeditionary Corps uniforms." - color = "#bf0000" - -/obj/item/clothing/accessory/solgov/department/security/service - icon_state = "dept_exped_service" - -/obj/item/clothing/accessory/solgov/department/security/fleet - icon_state = "dept_fleet" - desc = "Insignia denoting assignment to the security department. These fit Fleet uniforms." - on_rolled = list("rolled" = "dept_fleet_sleeves", "down" = "none") - -/obj/item/clothing/accessory/solgov/department/security/army - icon_state = "dept_army" - desc = "Insignia denoting assignment to the security department. These fit Army uniforms." - on_rolled = list("down" = "none") - -/obj/item/clothing/accessory/solgov/department/medical - name = "medical insignia" - desc = "Insignia denoting assignment to the medical department. These fit Expeditionary Corps uniforms." - color = "#4c9ce4" - -/obj/item/clothing/accessory/solgov/department/medical/service - icon_state = "dept_exped_service" - color = "#7faad1" - -/obj/item/clothing/accessory/solgov/department/medical/fleet - icon_state = "dept_fleet" - desc = "Insignia denoting assignment to the medical department. These fit Fleet uniforms." - on_rolled = list("rolled" = "dept_fleet_sleeves", "down" = "none") - -/obj/item/clothing/accessory/solgov/department/medical/army - icon_state = "dept_army" - desc = "Insignia denoting assignment to the medical department. These fit Army uniforms." - on_rolled = list("down" = "none") - -/obj/item/clothing/accessory/solgov/department/supply - name = "supply insignia" - desc = "Insignia denoting assignment to the supply department. These fit Expeditionary Corps uniforms." - color = "#bb9042" - -/obj/item/clothing/accessory/solgov/department/supply/service - icon_state = "dept_exped_service" - -/obj/item/clothing/accessory/solgov/department/supply/fleet - icon_state = "dept_fleet" - desc = "Insignia denoting assignment to the supply department. These fit Fleet uniforms." - on_rolled = list("rolled" = "dept_fleet_sleeves", "down" = "none") - -/obj/item/clothing/accessory/solgov/department/supply/army - icon_state = "dept_army" - desc = "Insignia denoting assignment to the supply department. These fit Army uniforms." - on_rolled = list("down" = "none") - -/obj/item/clothing/accessory/solgov/department/service - name = "service insignia" - desc = "Insignia denoting assignment to the service department. These fit Expeditionary Corps uniforms." - color = "#6eaa2c" - -/obj/item/clothing/accessory/solgov/department/service/service - icon_state = "dept_exped_service" - -/obj/item/clothing/accessory/solgov/department/service/fleet - icon_state = "dept_fleet" - desc = "Insignia denoting assignment to the service department. These fit Fleet uniforms." - on_rolled = list("rolled" = "dept_fleet_sleeves", "down" = "none") - -/obj/item/clothing/accessory/solgov/department/service/army - icon_state = "dept_army" - desc = "Insignia denoting assignment to the service department. These fit Army uniforms." - on_rolled = list("down" = "none") - -/obj/item/clothing/accessory/solgov/department/exploration - name = "exploration insignia" - desc = "Insignia denoting assignment to the exploration department. These fit Expeditionary Corps uniforms." - color = "#68099e" - -/obj/item/clothing/accessory/solgov/department/exploration/service - icon_state = "dept_exped_service" - -/obj/item/clothing/accessory/solgov/department/exploration/fleet - icon_state = "dept_fleet" - desc = "Insignia denoting assignment to the exploration department. These fit Fleet uniforms." - on_rolled = list("rolled" = "dept_fleet_sleeves", "down" = "none") - -/obj/item/clothing/accessory/solgov/department/exploration/army - icon_state = "dept_army" - desc = "Insignia denoting assignment to the exploration department. These fit Army uniforms." - on_rolled = list("down" = "none") - -/obj/item/clothing/accessory/solgov/department/research - name = "research insignia" - desc = "Insignia denoting assignment to the research department. These fit Expeditionary Corps uniforms." - color = COLOR_RESEARCH - -/obj/item/clothing/accessory/solgov/department/research/service - icon_state = "dept_exped_service" - -/********* -ranks - ec -*********/ - -/obj/item/clothing/accessory/solgov/rank - name = "ranks" - desc = "Insignia denoting rank of some kind. These appear blank." - icon_state = "fleetrank" - on_rolled = list("down" = "none") - slot = ACCESSORY_SLOT_RANK - gender = PLURAL - accessory_flags = ACCESSORY_REMOVABLE | ACCESSORY_HIGH_VISIBILITY - sprite_sheets = list( - SPECIES_UNATHI = 'icons/mob/species/unathi/onmob_accessories_sol_unathi.dmi' - ) - -/obj/item/clothing/accessory/solgov/rank/ec - name = "explorer ranks" - desc = "Insignia denoting rank of some kind. These appear blank." - icon_state = "ecrank_e1" - on_rolled = list("down" = "none") - -/obj/item/clothing/accessory/solgov/rank/ec/enlisted - name = "ranks (E-1 apprentice explorer)" - desc = "Insignia denoting the rank of Apprentice Explorer." - icon_state = "ecrank_e1" - -/obj/item/clothing/accessory/solgov/rank/ec/enlisted/e3 - name = "ranks (E-3 explorer)" - desc = "Insignia denoting the rank of Explorer." - icon_state = "ecrank_e3" - -/obj/item/clothing/accessory/solgov/rank/ec/enlisted/e5 - name = "ranks (E-5 senior explorer)" - desc = "Insignia denoting the rank of Senior Explorer." - icon_state = "ecrank_e5" - -/obj/item/clothing/accessory/solgov/rank/ec/enlisted/e7 - name = "ranks (E-7 chief explorer)" - desc = "Insignia denoting the rank of Chief Explorer." - icon_state = "ecrank_e7" - -/obj/item/clothing/accessory/solgov/rank/ec/officer - name = "ranks (O-1 ensign)" - desc = "Insignia denoting the rank of Ensign." - icon_state = "ecrank_o1" - -/obj/item/clothing/accessory/solgov/rank/ec/officer/o3 - name = "ranks (O-3 lieutenant)" - desc = "Insignia denoting the rank of Lieutenant." - icon_state = "ecrank_o3" - -/obj/item/clothing/accessory/solgov/rank/ec/officer/o5 - name = "ranks (O-5 commander)" - desc = "Insignia denoting the rank of Commander." - icon_state = "ecrank_o5" - -/obj/item/clothing/accessory/solgov/rank/ec/officer/o6 - name = "ranks (O-6 captain)" - desc = "Insignia denoting the rank of Captain." - icon_state = "ecrank_o6" - -/obj/item/clothing/accessory/solgov/rank/ec/officer/o8 - name = "ranks (O-8 admiral)" - desc = "Insignia denoting the rank of Admiral." - icon_state = "ecrank_o8" - -/obj/item/clothing/accessory/solgov/rank/ec/officer/o10 - name = "ranks (O-10 commandant of the expeditionary corps)" - desc = "Insignia denoting the rank of Commandant of the Expeditionary Corps." - icon_state = "ecrank_o10" - -/************ -ranks - fleet -************/ -/obj/item/clothing/accessory/solgov/rank/fleet - name = "naval ranks" - desc = "Insignia denoting naval rank of some kind." - icon_state = "e1_patch" - overlay_state = "fleetrank_enlisted" - on_rolled = list("down" = "none") - -/obj/item/clothing/accessory/solgov/rank/fleet/enlisted - name = "ranks (E-1 crewman recruit)" - desc = "Insignia denoting the rank of Crewman Recruit." - -/obj/item/clothing/accessory/solgov/rank/fleet/enlisted/e2 - name = "ranks (E-2 crewman apprentice)" - desc = "Insignia denoting the rank of Crewman Apprentice." - icon_state = "e2_patch" - -/obj/item/clothing/accessory/solgov/rank/fleet/enlisted/e3 - name = "ranks (E-3 crewman)" - desc = "Insignia denoting the rank of Crewman." - icon_state = "e3_patch" - -/obj/item/clothing/accessory/solgov/rank/fleet/enlisted/e4 - name = "ranks (E-4 petty officer third class)" - desc = "Insignia denoting the rank of Petty Officer Third Class." - icon_state = "e4_patch" - -/obj/item/clothing/accessory/solgov/rank/fleet/enlisted/e5 - name = "ranks (E-5 petty officer second class)" - desc = "Insignia denoting the rank of Petty Officer Second Class." - icon_state = "e5_patch" - -/obj/item/clothing/accessory/solgov/rank/fleet/enlisted/e6 - name = "ranks (E-6 petty officer first class)" - desc = "Insignia denoting the rank of Petty Officer First Class." - icon_state = "e6_patch" - -/obj/item/clothing/accessory/solgov/rank/fleet/enlisted/e7 - name = "ranks (E-7 chief petty officer)" - desc = "Insignia denoting the rank of Chief Petty Officer." - icon_state = "e7_patch" - -/obj/item/clothing/accessory/solgov/rank/fleet/enlisted/e8 - name = "ranks (E-8 senior chief petty officer)" - desc = "Insignia denoting the rank of Senior Chief Petty Officer." - icon_state = "e8_patch" - -/obj/item/clothing/accessory/solgov/rank/fleet/enlisted/e9 - name = "ranks (E-9 master chief petty officer)" - desc = "Insignia denoting the rank of Master Chief Petty Officer." - icon_state = "e9_patch" - -/obj/item/clothing/accessory/solgov/rank/fleet/enlisted/e9_alt1 - name = "ranks (E-9 command master chief petty officer)" - desc = "Insignia denoting the rank of Command Master Chief Petty Officer." - icon_state = "e9_patch" - -/obj/item/clothing/accessory/solgov/rank/fleet/enlisted/e9_alt2 - name = "ranks (E-9 fleet master chief petty officer)" - desc = "Insignia denoting the rank of Fleet Master Chief Petty Officer." - icon_state = "e9_patch" - -/obj/item/clothing/accessory/solgov/rank/fleet/enlisted/e9_alt3 - name = "ranks (E-9 force master chief petty officer)" - desc = "Insignia denoting the rank of Force Master Chief Petty Officer." - icon_state = "e9_patch" - -/obj/item/clothing/accessory/solgov/rank/fleet/enlisted/e9_alt4 - name = "ranks (E-9 master chief petty officer of the Fleet)" - desc = "Insignia denoting the rank of Master Chief Petty Officer of the Fleet." - icon_state = "e9_patch" - -/obj/item/clothing/accessory/solgov/rank/fleet/officer - name = "ranks (O-1 ensign)" - desc = "Shoulderboards denoting the rank of Ensign." - icon_state = "fleetrank_o1" - overlay_state = "fleetrank_officer" - -/obj/item/clothing/accessory/solgov/rank/fleet/officer/wo1_monkey - name = "makeshift ranks (WO-1 warrant officer 1)" - desc = "Shoulderboards denoting the mythical rank of Warrant Officer. Too bad it's obviously fake." - icon_state = "fleetrank_monkey" - -/obj/item/clothing/accessory/solgov/rank/fleet/officer/o2 - name = "ranks (O-2 sub-lieutenant)" - desc = "Shoulderboards denoting the rank of Sub-lieutenant." - icon_state = "fleetrank_o2" - -/obj/item/clothing/accessory/solgov/rank/fleet/officer/o3 - name = "ranks (O-3 lieutenant)" - desc = "Shoulderboards denoting the rank of Lieutenant." - icon_state = "fleetrank_o3" - -/obj/item/clothing/accessory/solgov/rank/fleet/officer/o4 - name = "ranks (O-4 lieutenant commander)" - desc = "Shoulderboards denoting the rank of Lieutenant Commander." - icon_state = "fleetrank_o4" - -/obj/item/clothing/accessory/solgov/rank/fleet/officer/o5 - name = "ranks (O-5 commander)" - desc = "Shoulderboards denoting the rank of Commander. " - icon_state = "fleetrank_o5" - -/obj/item/clothing/accessory/solgov/rank/fleet/officer/o6 - name = "ranks (O-6 captain)" - desc = "Shoulderboards denoting the rank of Captain." - icon_state = "fleetrank_o6" - -//flags are placeholdered and use o7 boards sprite, wip -xero - -/obj/item/clothing/accessory/solgov/rank/fleet/flag - name = "ranks (O-7 commodore)" - desc = "Insignia denoting the rank of Commodore." - icon_state = "fleetrank_o7" - overlay_state = "fleetrank_command" - -/obj/item/clothing/accessory/solgov/rank/fleet/flag/o8 - name = "ranks (O-8 rear admiral)" - desc = "Insignia denoting the rank of Rear Admiral." - -/obj/item/clothing/accessory/solgov/rank/fleet/flag/o9 - name = "ranks (O-9 vice admiral)" - desc = "Insignia denoting the rank of Vice Admiral." - -/obj/item/clothing/accessory/solgov/rank/fleet/flag/o10 - name = "ranks (O-10 admiral)" - desc = "Insignia denoting the rank of Admiral." - -/obj/item/clothing/accessory/solgov/rank/fleet/flag/o10_alt - name = "ranks (O-10 fleet admiral)" - desc = "Insignia denoting the rank of Fleet Admiral." - -// usual and fancy ones are swapped for now - -/obj/item/clothing/accessory/solgov/rank/fleet/fancy - name = "navy ranks" - desc = "A blank navy-blue patch. Perhaps a template for something." - icon_state = "e1_patch" - overlay_state = "fleetrank_enlisted" - -/obj/item/clothing/accessory/solgov/rank/fleet/fancy/enlisted - name = "patch (E-1 crewman recruit)" - desc = "A blank patch denoting the rank of Crewman Recruit." - -/obj/item/clothing/accessory/solgov/rank/fleet/fancy/enlisted/e2 - name = "device (E-2 crewman apprentice)" - desc = "Collar pin denoting the rank of Crewman Apprentice." - icon_state = "e2_device" - -/obj/item/clothing/accessory/solgov/rank/fleet/fancy/enlisted/e3 - name = "device (E-3 crewman apprentice)" - desc = "Collar pin denoting the rank of Crewman." - icon_state = "e3_device" - -/obj/item/clothing/accessory/solgov/rank/fleet/fancy/enlisted/e4 - name = "device (E-4 petty officer third class)" - desc = "Collar pin denoting the rank of Petty Officer Third Class." - icon_state = "e4_device" - -/obj/item/clothing/accessory/solgov/rank/fleet/fancy/enlisted/e5 - name = "device (E-5 petty officer second class)" - desc = "Collar pin denoting the rank of Petty Officer Second Class." - icon_state = "e5_device" - -/obj/item/clothing/accessory/solgov/rank/fleet/fancy/enlisted/e6 - name = "device (E-6 petty officer first class)" - desc = "Collar pin denoting the rank of Petty Officer First Class." - icon_state = "e6_device" - -/obj/item/clothing/accessory/solgov/rank/fleet/fancy/enlisted/e7 - name = "device (E-7 chief petty officer)" - desc = "Collar pin denoting the rank of Chief Petty Officer." - icon_state = "e7_device" - -/obj/item/clothing/accessory/solgov/rank/fleet/fancy/enlisted/e8 - name = "device (E-8 senior chief petty officer)" - desc = "Collar pin denoting the rank of Senior Chief Petty Officer." - icon_state = "e8_device" - -/obj/item/clothing/accessory/solgov/rank/fleet/fancy/enlisted/e9 - name = "device (E-9 master chief petty officer)" - desc = "Collar pin denoting the rank of Master Chief Petty Officer." - icon_state = "e9_device" - -/obj/item/clothing/accessory/solgov/rank/fleet/fancy/enlisted/e9_alt1 - name = "device (E-9 command master chief petty officer)" - desc = "Collar pin denoting the rank of Command Master Chief Petty Officer." - icon_state = "e9_device" - -/obj/item/clothing/accessory/solgov/rank/fleet/fancy/enlisted/e9_alt2 - name = "device (E-9 fleet master chief petty officer)" - desc = "Collar pin denoting the rank of Fleet Master Chief Petty Officer." - icon_state = "e9_device" - -/obj/item/clothing/accessory/solgov/rank/fleet/fancy/enlisted/e9_alt3 - name = "device (E-9 force master chief petty officer)" - desc = "Collar pin denoting the rank of Force Master Chief Petty Officer." - icon_state = "e9_device" - -/obj/item/clothing/accessory/solgov/rank/fleet/fancy/enlisted/e9_alt4 - name = "device (E-9 master chief petty officer of the fleet)" - desc = "Collar pin denoting the rank of Master Chief Petty Officer of the Fleet." - icon_state = "e9_device" - -/obj/item/clothing/accessory/solgov/rank/fleet/fancy/officer - name = "device (O-1 ensign)" - desc = "Collar pin denoting the rank of Ensign or the equivalent." - icon_state = "o1_device" - overlay_state = "device_gold" - -/obj/item/clothing/accessory/solgov/rank/fleet/fancy/officer/o2 - name = "device (O-2 sub-lieutenant)" - desc = "Collar pin denoting the rank of Sub-Lieutenant." - icon_state = "o2_device" - overlay_state = "device_silver" - -/obj/item/clothing/accessory/solgov/rank/fleet/fancy/officer/o3 - name = "device (O-3 lieutenant)" - desc = "Collar pin denoting the rank of Lieutenant." - icon_state = "o3_device" - overlay_state = "device_silver" - -/obj/item/clothing/accessory/solgov/rank/fleet/fancy/officer/o4 - name = "device (O-4 lieutenant commander)" - desc = "Collar pin denoting the rank of Lieutenant Commander." - icon_state = "o4_device" - -/obj/item/clothing/accessory/solgov/rank/fleet/fancy/officer/o5 - name = "device (O-5 commander)" - desc = "Collar pin denoting the rank of Commander." - icon_state = "o5_device" - overlay_state = "device_silver" - -/obj/item/clothing/accessory/solgov/rank/fleet/fancy/officer/o6 - name = "device (O-6 captain)" - desc = "Collar pin denoting the rank of Captain." - icon_state = "o6_device" - overlay_state = "device_silver" - -/************** -ranks - marines -**************/ -/obj/item/clothing/accessory/solgov/rank/army - name = "army ranks" - desc = "Insignia denoting army rank of some kind. These appear blank." - icon_state = "armyrank_enlisted" - on_rolled = list("down" = "none") - -/obj/item/clothing/accessory/solgov/rank/army/enlisted - name = "ranks (E-1 private)" - desc = "Insignia denoting the rank of Private." - icon_state = "armyrank_enlisted" - -/obj/item/clothing/accessory/solgov/rank/army/enlisted/e2 - name = "ranks (E-2 private first class)" - desc = "Insignia denoting the rank of Private First Class." - -/obj/item/clothing/accessory/solgov/rank/army/enlisted/e3 - name = "ranks (E-3 lance corporal)" - desc = "Insignia denoting the rank of Lance Corporal." - -/obj/item/clothing/accessory/solgov/rank/army/enlisted/e4 - name = "ranks (E-4 specialist)" - desc = "Insignia denoting the rank of Specialist." - -/obj/item/clothing/accessory/solgov/rank/army/enlisted/e4_alt - name = "ranks (E-4 corporal)" - desc = "Insignia denoting the rank of Corporal." - -/obj/item/clothing/accessory/solgov/rank/army/enlisted/e5 - name = "ranks (E-5 sergeant)" - desc = "Insignia denoting the rank of Sergeant." - -/obj/item/clothing/accessory/solgov/rank/army/enlisted/e6 - name = "ranks (E-6 staff sergeant)" - desc = "Insignia denoting the rank of Staff Sergeant." - -/obj/item/clothing/accessory/solgov/rank/army/enlisted/e7 - name = "ranks (E-7 gunnery sergeant)" - desc = "Insignia denoting the rank of Gunnery Sergeant." - -/obj/item/clothing/accessory/solgov/rank/army/enlisted/e7_meme - name = "ranks (E-7 gaming sergeant)" - desc = "Insignia denoting 'honorable' rank of the Gaming Sergeant." - -/obj/item/clothing/accessory/solgov/rank/army/enlisted/e8 - name = "ranks (E-8 master sergeant)" - desc = "Insignia denoting the rank of Master Sergeant." - -/obj/item/clothing/accessory/solgov/rank/army/enlisted/e8_alt - name = "ranks (E-8 first sergeant)" - desc = "Insignia denoting the rank of First Sergeant." - -/obj/item/clothing/accessory/solgov/rank/army/enlisted/e9 - name = "ranks (E-9 sergeant major)" - desc = "Insignia denoting the rank of Sergeant Major." - -/obj/item/clothing/accessory/solgov/rank/army/enlisted/e9_alt1 - name = "ranks (E-9 master gunnery sergeant)" - desc = "Insignia denoting the rank of Master Gunnery Sergeant." - -/obj/item/clothing/accessory/solgov/rank/army/enlisted/e9_meme - name = "ranks (E-9 master gaming sergeant)" - desc = "Insignia denoting the most 'honorable' rank of the Master 'Gaming' Sergeant." - -/obj/item/clothing/accessory/solgov/rank/army/enlisted/e9_alt2 - name = "ranks (E-9 sergeant major of the corps)" - desc = "Insignia denoting the rank of Sergeant Major of the Corps." - -/obj/item/clothing/accessory/solgov/rank/army/officer - name = "ranks (O-1 second lieutenant)" - desc = "Collar pin denoting the rank of Second Lieutenant." - icon_state = "o1_device" - overlay_state = "device_gold" - -/obj/item/clothing/accessory/solgov/rank/army/officer/o2 - name = "ranks (O-2 first lieutenant)" - desc = "Collar pin denoting the rank of First Lieutenant." - icon_state = "o2_device" - overlay_state = "device_silver" - -/obj/item/clothing/accessory/solgov/rank/army/officer/o3 - name = "ranks (O-3 marine captain)" - desc = "Collar pin denoting the rank of Marine Captain." - icon_state = "o3_device" - overlay_state = "device_silver" - -/obj/item/clothing/accessory/solgov/rank/army/officer/o4 - name = "ranks (O-4 major)" - desc = "Collar pin denoting the rank of Major." - icon_state = "o4_device" - -/obj/item/clothing/accessory/solgov/rank/army/officer/o5 - name = "ranks (O-5 lieutenant colonel)" - desc = "Collar pin denoting the rank of Lieutenant Colonel." - icon_state = "o5_device" - overlay_state = "device_silver" - -/obj/item/clothing/accessory/solgov/rank/army/officer/o6 - name = "ranks (O-6 colonel)" - desc = "Collar pin denoting the rank of Colonel." - icon_state = "o6_device" - overlay_state = "device_silver" - -/obj/item/clothing/accessory/solgov/rank/army/flag - name = "ranks (O-7 brigadier general)" - desc = "Collar pin denoting the rank of Brigadier General." - icon_state = "armyrank_command" - -/obj/item/clothing/accessory/solgov/rank/army/flag/o8 - name = "ranks (O-8 major general)" - desc = "Collar pin denoting the rank of Major General." - -/obj/item/clothing/accessory/solgov/rank/army/flag/o9 - name = "ranks (O-9 lieutenant general)" - desc = "Collar pin denoting the rank of Lieutenant general." - -/obj/item/clothing/accessory/solgov/rank/army/flag/o10 - name = "ranks (O-10 general)" - desc = "Collar pin denoting the rank of General." - -/obj/item/clothing/accessory/solgov/rank/army/flag/o10_alt - name = "ranks (O-10 general of the corps)" - desc = "Collar pin denoting the rank of General of the Corps." diff --git a/maps/torch/items/clothing/solgov-armor.dm b/maps/torch/items/clothing/solgov-armor.dm deleted file mode 100644 index 85990e7c9da56..0000000000000 --- a/maps/torch/items/clothing/solgov-armor.dm +++ /dev/null @@ -1,43 +0,0 @@ -/obj/item/clothing/suit/armor/vest/solgov - name = "\improper Sol Central Government armored vest" - desc = "A synthetic armor vest. This one is marked with the crest of the Sol Central Government." - icon_state = "solvest" - icon = 'maps/torch/icons/obj/obj_suit_solgov.dmi' - item_icons = list(slot_wear_suit_str = 'maps/torch/icons/mob/onmob_suit_solgov.dmi') - -/obj/item/clothing/suit/storage/vest/solgov - name = "\improper Sol Central Government heavy armored vest" - desc = "A synthetic armor vest with PEACEKEEPER printed in distinctive blue lettering on the chest. This one has added webbing and ballistic plates." - icon_state = "solwebvest" - icon = 'maps/torch/icons/obj/obj_suit_solgov.dmi' - item_icons = list(slot_wear_suit_str = 'maps/torch/icons/mob/onmob_suit_solgov.dmi') - -/obj/item/clothing/suit/storage/vest/solgov/security - name = "master at arms heavy armored vest" - desc = "A synthetic armor vest with MASTER AT ARMS printed in silver lettering on the chest. This one has added webbing and ballistic plates." - icon_state = "secwebvest" - -/obj/item/clothing/suit/storage/vest/solgov/command - name = "command heavy armored vest" - desc = "A synthetic armor vest with SOL CENTRAL GOVERNMENT printed in gold lettering on the chest. This one has added webbing and ballistic plates." - icon_state = "comwebvest" - -/obj/item/clothing/suit/armor/pcarrier/blue/sol - name = "peacekeeper plate carrier" - desc = "A lightweight plate carrier vest in SCG Peacekeeper colors. It can be equipped with armor plates, but provides no protection of its own." - accessories = list(/obj/item/clothing/accessory/armor_plate/medium, /obj/item/clothing/accessory/storage/pouches/blue, /obj/item/clothing/accessory/arm_guards/blue, /obj/item/clothing/accessory/armor_tag/solgov) - -/obj/item/clothing/suit/armor/pcarrier/light/sol - accessories = list(/obj/item/clothing/accessory/armor_plate, /obj/item/clothing/accessory/armor_tag/solgov) - -/obj/item/clothing/suit/armor/pcarrier/medium/sol - accessories = list(/obj/item/clothing/accessory/armor_plate/medium, /obj/item/clothing/accessory/storage/pouches, /obj/item/clothing/accessory/armor_tag/solgov) - -/obj/item/clothing/suit/armor/pcarrier/medium/security - accessories = list(/obj/item/clothing/accessory/armor_plate/medium, /obj/item/clothing/accessory/storage/pouches, /obj/item/clothing/accessory/armor_tag/solgov/sec) - -/obj/item/clothing/suit/armor/pcarrier/medium/command - accessories = list(/obj/item/clothing/accessory/armor_plate/medium, /obj/item/clothing/accessory/storage/pouches, /obj/item/clothing/accessory/armor_tag/solgov/com) - -/obj/item/clothing/suit/armor/pcarrier/medium/command/security - accessories = list(/obj/item/clothing/accessory/armor_plate/medium, /obj/item/clothing/accessory/storage/pouches, /obj/item/clothing/accessory/armor_tag/solgov/com/sec) diff --git a/maps/torch/items/clothing/solgov-feet.dm b/maps/torch/items/clothing/solgov-feet.dm deleted file mode 100644 index e6606bce5e413..0000000000000 --- a/maps/torch/items/clothing/solgov-feet.dm +++ /dev/null @@ -1,4 +0,0 @@ -/obj/item/clothing/shoes/dress/white - name = "white dress shoes" - desc = "Brilliantly white low quarters, not a spot on them." - icon_state = "whitedress" \ No newline at end of file diff --git a/maps/torch/items/clothing/solgov-hands.dm b/maps/torch/items/clothing/solgov-hands.dm deleted file mode 100644 index 21c132645630a..0000000000000 --- a/maps/torch/items/clothing/solgov-hands.dm +++ /dev/null @@ -1,53 +0,0 @@ -/obj/item/clothing/gloves/thick/duty/solgov - name = "solgov duty gloves parent object" - desc = "You should never see this." - item_icons = list(slot_gloves_str = 'maps/torch/icons/mob/onmob_hands_solgov.dmi') - icon = 'maps/torch/icons/obj/obj_hands_solgov.dmi' - -/obj/item/clothing/gloves/thick/duty/solgov/eng - name = "engineering duty gloves" - desc = "These black duty gloves are made from durable synthetic materials, and have a lovely orange accent color." - icon_state = "duty_gloves_eng" - item_state = "duty_gloves_eng" - -/obj/item/clothing/gloves/thick/duty/solgov/cmd - name = "command duty gloves" - desc = "These black duty gloves are made from durable synthetic materials, and have a lovely gold accent color." - icon_state = "duty_gloves_cmd" - item_state = "duty_gloves_cmd" - -/obj/item/clothing/gloves/thick/duty/solgov/exp - name = "exploration duty gloves" - desc = "These black duty gloves are made from durable synthetic materials, and have a lovely purple accent color." - icon_state = "duty_gloves_exp" - item_state = "duty_gloves_exp" - -/obj/item/clothing/gloves/thick/duty/solgov/sci - name = "science duty gloves" - desc = "These black duty gloves are made from durable synthetic materials, and have a lovely heather accent color." - icon_state = "duty_gloves_sci" - item_state = "duty_gloves_sci" - -/obj/item/clothing/gloves/thick/duty/solgov/med - name = "medical duty gloves" - desc = "These black duty gloves are made from durable synthetic materials, and have a lovely blue accent color." - icon_state = "duty_gloves_med" - item_state = "duty_gloves_med" - -/obj/item/clothing/gloves/thick/duty/solgov/sec - name = "security duty gloves" - desc = "These black duty gloves are made from durable synthetic materials, and have a lovely red accent color." - icon_state = "duty_gloves_sec" - item_state = "duty_gloves_sec" - -/obj/item/clothing/gloves/thick/duty/solgov/svc - name = "service duty gloves" - desc = "These black duty gloves are made from durable synthetic materials, and have a lovely green accent color." - icon_state = "duty_gloves_svc" - item_state = "duty_gloves_svc" - -/obj/item/clothing/gloves/thick/duty/solgov/sup - name = "supply duty gloves" - desc = "These black duty gloves are made from durable synthetic materials, and have a lovely brown accent color." - icon_state = "duty_gloves_sup" - item_state = "duty_gloves_sup" diff --git a/maps/torch/items/clothing/solgov-head.dm b/maps/torch/items/clothing/solgov-head.dm deleted file mode 100644 index 972c0040f9c00..0000000000000 --- a/maps/torch/items/clothing/solgov-head.dm +++ /dev/null @@ -1,562 +0,0 @@ -/obj/item/clothing/head/solgov - name = "master solgov hat" - icon = 'maps/torch/icons/obj/obj_head_solgov.dmi' - item_icons = list(slot_head_str = 'maps/torch/icons/mob/onmob_head_solgov.dmi') - siemens_coefficient = 0.9 - -//Utility -/obj/item/clothing/head/soft/solgov - name = "\improper Sol Central Government cap" - desc = "It's a ballcap in SCG colors." - icon_state = "solsoft" - icon = 'maps/torch/icons/obj/obj_head_solgov.dmi' - item_icons = list(slot_head_str = 'maps/torch/icons/mob/onmob_head_solgov.dmi') - -/obj/item/clothing/head/soft/solgov/veteranhat - name = "veteran hat" - desc = "It's a tacky black ballcap bearing the yellow service ribbon of the Gaia Conflict." - icon_state = "cap_veteran" - -/obj/item/clothing/head/soft/solgov/expedition - name = "\improper Expeditionary Corps cap" - desc = "It's a black ballcap bearing the Expeditonary Corps crest." - icon_state = "expeditionsoft" - sprite_sheets = list( - SPECIES_UNATHI = 'icons/mob/species/unathi/onmob_head_unathi.dmi' - ) - -/obj/item/clothing/head/soft/solgov/expedition/co - name = "\improper Expeditionary Corps captain's cap" - desc = "It's a black ballcap bearing the Expeditonary Corps crest. The brim has gold trim." - icon_state = "expeditioncomsoft" - -/obj/item/clothing/head/soft/solgov/fleet - name = "fleet cap" - desc = "It's a navy blue field cap with the SCG Fleet crest in a silver colour." - icon_state = "fleetsoft" - -/obj/item/clothing/head/solgov/utility - name = "utility cover" - desc = "An eight-point utility cover." - icon_state = "greyutility" - item_state_slots = list( - slot_l_hand_str = "helmet", - slot_r_hand_str = "helmet", - ) - body_parts_covered = 0 - -/obj/item/clothing/head/solgov/utility/fleet - name = "fleet utility cover" - desc = "A navy blue utility cover bearing the crest of the SCG Fleet." - icon_state = "navyutility" - -/obj/item/clothing/head/solgov/utility/army - name = "army utility cover" - desc = "A green utility cover bearing the crest of the SCG Army." - icon_state = "greenutility" - -/obj/item/clothing/head/solgov/utility/army/tan - name = "tan utility cover" - desc = "A tan utility cover bearing the crest of the SCG Army." - icon_state = "tanutility" - -/obj/item/clothing/head/solgov/utility/army/urban - name = "urban utility cover" - desc = "A grey utility cover bearing the crest of the SCG Army." - icon_state = "greyutility" - -//Service - -/obj/item/clothing/head/solgov/service - name = "service cover" - desc = "A service uniform cover." - icon_state = "greenwheelcap" - item_state_slots = list( - slot_l_hand_str = "helmet", - slot_r_hand_str = "helmet") - body_parts_covered = 0 - -/obj/item/clothing/head/solgov/service/expedition - name = "expeditionary peaked cap" - desc = "A peaked black uniform cap belonging to the SCG Expeditionary Corps." - icon_state = "ecdresscap" - sprite_sheets = list( - SPECIES_UNATHI = 'icons/mob/species/unathi/onmob_head_unathi.dmi' - ) - -/obj/item/clothing/head/solgov/service/expedition/command - name = "expeditionary officer's peaked cap" - desc = "A peaked black uniform cap belonging to the SCG Expeditionary Corps. This one is trimmed in gold." - icon_state = "ecdresscap_ofcr" - -/obj/item/clothing/head/solgov/service/expedition/captain - name = "expeditionary captain's peaked cap" - desc = "A gold-trimmed peaked black uniform cap belonging to a Captain of the SCG Expeditionary Corps." - icon_state = "ecdresscap_capt" - -/obj/item/clothing/head/solgov/service/expedition/senior_command - name = "senior expedition officer's peaked cap" - desc = "A peaked grey uniform cap belonging to the SCG Expeditionary Corps. This one is trimmed in gold and blue." - icon_state = "greydresscap_senior" - -/obj/item/clothing/head/solgov/service/army - name = "marine wheel cover" - desc = "A green service uniform cover with an SCG Marine crest." - icon_state = "greenwheelcap" - -/obj/item/clothing/head/solgov/service/army/command - name = "marine officer's wheel cover" - desc = "A green service uniform cover with an SCG Marine crest and gold stripe." - icon_state = "greenwheelcap_com" - -/obj/item/clothing/head/solgov/service/army/garrison - name = "marine garrison cap" - desc = "A green garrison cap belonging to the SCG Marine." - icon_state = "greengarrisoncap" - -/obj/item/clothing/head/solgov/service/army/garrison/command - name = "marine officer's garrison cap" - desc = "A green garrison cap belonging to the SCG Marine. This one has a gold pin." - icon_state = "greengarrisoncap_com" - -/obj/item/clothing/head/solgov/service/army/campaign - name = "campaign cover" - desc = "A green campaign cover with an SCG Army crest. Only found on the heads of Drill Sergeants." - icon_state = "greendrill" - -//Dress - -/obj/item/clothing/head/solgov/dress - name = "dress cover" - desc = "A dress uniform cover." - icon_state = "greenwheelcap" - item_state_slots = list( - slot_l_hand_str = "helmet", - slot_r_hand_str = "helmet") - body_parts_covered = 0 - -/obj/item/clothing/head/solgov/dress/fleet/garrison - name = "fleet garrison cap" - desc = "A white dress uniform cap. The classic sailor's choice." - icon_state = "whitegarrisoncap" - -/obj/item/clothing/head/solgov/dress/fleet - name = "fleet dress wheel cover" - desc = "A white dress uniform cover. This one has an SCG Fleet crest." - icon_state = "whitepeakcap" - -/obj/item/clothing/head/solgov/dress/fleet/command - name = "fleet officer's dress wheel cover" - desc = "A white dress uniform cover. This one has a gold stripe and an SCG Fleet crest." - icon_state = "whitepeakcap_com" - -/obj/item/clothing/head/solgov/dress/army - name = "marine dress wheel cover" - desc = "A white dress uniform cover with an SCG Marine crest." - icon_state = "whitewheelcap" - -/obj/item/clothing/head/solgov/dress/army/command - name = "marine officer's dress wheel cover" - desc = "A white dress uniform cover with an SCG Marine crest and gold stripe." - icon_state = "whitewheelcap_com" - -//Berets - -/obj/item/clothing/head/beret/solgov - name = "peacekeeper beret" - desc = "A beret in Sol Central Government colors. For peacekeepers that are more inclined towards style than safety." - icon_state = "beret_lightblue" - icon = 'maps/torch/icons/obj/obj_head_solgov.dmi' - item_icons = list(slot_head_str = 'maps/torch/icons/mob/onmob_head_solgov.dmi') - -/obj/item/clothing/head/beret/solgov/homeguard - name = "home guard beret" - desc = "A red beret denoting service in the Sol Home Guard. For personnel that are more inclined towards style than safety." - icon_state = "beret_red" - -/obj/item/clothing/head/beret/solgov/gateway - name = "gateway administration beret" - desc = "An orange beret denoting service in the Gateway Administration. For personnel that are more inclined towards style than safety." - icon_state = "beret_orange" - -/obj/item/clothing/head/beret/solgov/customs - name = "customs and trade beret" - desc = "A purple beret denoting service in the Customs and Trade Bureau. For personnel that are more inclined towards style than safety." - icon_state = "beret_purpleyellow" - -/obj/item/clothing/head/beret/solgov/orbital - name = "orbital assault beret" - desc = "A blue beret denoting orbital assault training. For helljumpers that are more inclined towards style than safety." - icon_state = "beret_blue" - -/obj/item/clothing/head/beret/solgov/research - name = "government research beret" - desc = "A green beret denoting service in the Bureau of Research. For scientists that are more inclined towards style than safety." - icon_state = "beret_green" - -/obj/item/clothing/head/beret/solgov/health - name = "health service beret" - desc = "A white beret denoting service in the Interstellar Health Service. For medics that are more inclined towards style than safety." - icon_state = "beret_white" - -/obj/item/clothing/head/beret/solgov/marcom - name = "\improper MARSCOM beret" - desc = "A red beret with a gold insignia, denoting service in the SCGDF Mars Central Command. For brass who are more inclined towards style than safety." - icon_state = "beret_redgold" - -/obj/item/clothing/head/beret/solgov/stratcom - name = "\improper STRATCOM beret" - desc = "A grey beret with a silver insignia, denoting service in the SCGDF Strategic Command. For intelligence personnel who are more inclined towards style than safety." - icon_state = "beret_graysilver" - -/obj/item/clothing/head/beret/solgov/diplomatic - name = "diplomatic security beret" - desc = "A tan beret denoting service in the SCG Army Diplomatic Security Group. For security personnel who are more inclined towards style than safety." - icon_state = "beret_tan" - -/obj/item/clothing/head/beret/solgov/borderguard - name = "border security beret" - desc = "A green beret with a silver emblem, denoting service in the Bureau of Border Security. For border guards who are more inclined towards style than safety." - icon_state = "beret_greensilver" - -/obj/item/clothing/head/beret/solgov/army - name = "marine beret" - desc = "A green beret belonging to the SCG Marine. For personnel that are more inclined towards style than safety." - icon_state = "beret_army_infantry" - icon = 'maps/torch/icons/obj/obj_head_solgov.dmi' - item_icons = list(slot_head_str = 'maps/torch/icons/mob/onmob_head_solgov.dmi') - -/obj/item/clothing/head/beret/solgov/army/orbital - name = "orbital assault marine beret" - desc = "A blue beret denoting orbital assault marine training. For helljumpers that are more inclined towards style than safety." - icon_state = "beret_army_airborne" - -/obj/item/clothing/head/beret/solgov/army/elite - name = "elite marine beret" - desc = "A blue beret with Space Shark denoting special training of Space Carps, an elite secret team consisting of members both Marine Corps and Fleet. They have been declassified after the end of War on Gaia, denouncing their war crimes and failures. For operatives that are more inclined towards style than safety." - icon_state = "beret_blue" - -/obj/item/clothing/head/beret/solgov/army/airborne - name = "airborne marine beret" - desc = "An SCG Marine beret carrying insignia of the Airborne Division. For personnel that are more inclined towards style than safety." - icon_state = "beret_army_airborne" - -/obj/item/clothing/head/beret/solgov/army/infantry - name = "marine beret" - desc = "An SCG Marine beret carrying insignia of the Marine Corps. For personnel that are more inclined towards style than safety." - icon_state = "beret_army_infantry" - -/obj/item/clothing/head/beret/solgov/army/logistical_supply - name = "logistical supply marine beret" - desc = "An SCG Marine beret carrying insignia of the Logistical Marine Support Division. For personnel that are more inclined towards style than safety." - icon_state = "beret_army_logistical supply" - -/obj/item/clothing/head/beret/solgov/army/engisapper - name = "engineering-sapper marine beret" - desc = "An SCG Marine beret carrying insignia of the Engineering-Sapper Marine Division. For personnel that are more inclined towards style than safety." - icon_state = "beret_army_engisapper" - -/obj/item/clothing/head/beret/solgov/army/command - name = "command marine beret" - desc = "An SCG Marine beret with a golden crest. For personnel that are more inclined towards style than safety." - icon_state = "beret_army_command" - -/obj/item/clothing/head/beret/solgov/army/medical - name = "medical army beret" - desc = "An SCG Marine beret with a red crest. For personnel that are more inclined towards style than safety." - icon_state = "beret_army_medical" - -/obj/item/clothing/head/beret/solgov/expedition - name = "expeditionary beret" - desc = "A black beret belonging to the SCG Expeditionary Corps. For personnel that are more inclined towards style than safety." - icon_state = "beret_black" - sprite_sheets = list( - SPECIES_UNATHI = 'icons/mob/species/unathi/onmob_head_unathi.dmi' - ) - -/obj/item/clothing/head/beret/solgov/expedition/security - name = "expeditionary security beret" - desc = "An SCG Expeditionary Corps beret with a security crest. For personnel that are more inclined towards style than safety." - icon_state = "beret_black_security" - -/obj/item/clothing/head/beret/solgov/expedition/medical - name = "expeditionary medical beret" - desc = "An SCG Expeditionary Corps beret with a medical crest. For personnel that are more inclined towards style than safety." - icon_state = "beret_black_medical" - -/obj/item/clothing/head/beret/solgov/expedition/engineering - name = "expeditionary engineering beret" - desc = "An SCG Expeditionary Corps beret with an engineering crest. For personnel that are more inclined towards style than safety." - icon_state = "beret_black_engineering" - -/obj/item/clothing/head/beret/solgov/expedition/supply - name = "expeditionary supply beret" - desc = "An SCG Expeditionary Corps beret with a supply crest. For personnel that are more inclined towards style than safety." - icon_state = "beret_black_supply" - -/obj/item/clothing/head/beret/solgov/expedition/service - name = "expeditionary service beret" - desc = "An SCG Expeditionary Corps beret with a service crest. For personnel that are more inclined towards style than safety." - icon_state = "beret_black_service" - -/obj/item/clothing/head/beret/solgov/expedition/exploration - name = "expeditionary exploration beret" - desc = "An SCG Expeditionary Corps beret with an exploration crest. For personnel that are more inclined towards style than safety." - icon_state = "beret_black_exploration" - -/obj/item/clothing/head/beret/solgov/expedition/command - name = "expeditionary officer's beret" - desc = "An SCG Expeditionary Corps beret with a golden crest. For personnel that are more inclined towards style than safety." - icon_state = "beret_black_command" - -/obj/item/clothing/head/beret/solgov/expedition/branch - name = "\improper Field Operations beret" - desc = "An SCG Expeditionary Corps beret carrying the insignia of the Field Operations section. For personnel that are more inclined towards style than safety." - icon_state = "beret_black_fieldOps" - -/obj/item/clothing/head/beret/solgov/expedition/branch/observatory - name = "\improper Observatory beret" - desc = "An SCG Expeditionary Corps beret carrying the insignia of the Observatory section. For personnel that are more inclined towards style than safety." - icon_state = "beret_black_observatory" - -/obj/item/clothing/head/beret/solgov/fleet - name = "fleet beret" - desc = "A navy blue beret belonging to the SCG Fleet. For personnel that are more inclined towards style than safety." - icon_state = "beret_navy" - -/obj/item/clothing/head/beret/solgov/fleet/security - name = "fleet security beret" - desc = "An SCG Fleet beret with a security crest. For personnel that are more inclined towards style than safety." - icon_state = "beret_navy_security" - -/obj/item/clothing/head/beret/solgov/fleet/medical - name = "fleet medical beret" - desc = "An SCG Fleet beret with a medical crest. For personnel that are more inclined towards style than safety." - icon_state = "beret_navy_medical" - -/obj/item/clothing/head/beret/solgov/fleet/engineering - name = "fleet engineering beret" - desc = "An SCG Fleet with an engineering crest. For personnel that are more inclined towards style than safety." - icon_state = "beret_navy_engineering" - -/obj/item/clothing/head/beret/solgov/fleet/supply - name = "fleet supply beret" - desc = "An SCG Fleet beret with a supply crest. For personnel that are more inclined towards style than safety." - icon_state = "beret_navy_supply" - -/obj/item/clothing/head/beret/solgov/fleet/service - name = "fleet service beret" - desc = "An SCG Fleet beret with a service crest. For personnel that are more inclined towards style than safety." - icon_state = "beret_navy_service" - -/obj/item/clothing/head/beret/solgov/fleet/exploration - name = "fleet exploration beret" - desc = "An SCG Fleet beret with an exploration crest. For personnel that are more inclined towards style than safety." - icon_state = "beret_navy_exploration" - -/obj/item/clothing/head/beret/solgov/fleet/command - name = "fleet officer's beret" - desc = "An SCG Fleet beret with a golden crest. For personnel that are more inclined towards style than safety." - icon_state = "beret_navy_command" - -/obj/item/clothing/head/beret/solgov/fleet/dress - name = "fleet dress beret" - desc = "A white SCG Fleet beret. For personnel that are more inclined towards style than safety." - icon_state = "beret_whiterim" - -/obj/item/clothing/head/beret/solgov/fleet/dress/command - name = "fleet officer's dress beret" - desc = "A white SCG Fleet beret with a golden crest. For personnel that are more inclined towards style than safety." - icon_state = "beret_whiterim_com" - -/obj/item/clothing/head/beret/solgov/fleet/branch - name = "first fleet beret" - desc = "An SCG Fleet beret carrying the insignia of the First Fleet, the Sol Guard, stationed in Sol. For personnel that are more inclined towards style than safety." - icon_state = "beret_navy_first" - -/obj/item/clothing/head/beret/solgov/fleet/branch/second - name = "second fleet beret" - desc = "An SCG Fleet beret carrying the insignia of the Second Fleet, the Home Guard, tasked with defense of Sol territories. For personnel that are more inclined towards style than safety." - icon_state = "beret_navy_second" - -/obj/item/clothing/head/beret/solgov/fleet/branch/third - name = "third fleet beret" - desc = "An SCG Fleet beret carrying the insignia of the Third Fleet, the Border Guard, guarding borders of Sol territory against Vox and pirates. For personnel that are more inclined towards style than safety." - icon_state = "beret_navy_third" - -/obj/item/clothing/head/beret/solgov/fleet/branch/fourth - name = "fourth fleet beret" - desc = "An SCG Fleet beret carrying the insignia of the Fourth Fleet, stationed on Skrell border. For personnel that are more inclined towards style than safety." - icon_state = "beret_navy_fourth" - -/obj/item/clothing/head/beret/solgov/fleet/branch/fifth - name = "fifth fleet beret" - desc = "An SCG Fleet beret carrying the insignia of the Fifth Fleet, the Quick Reaction Force, recently formed and outfitted with the latest tech. For personnel that are more inclined towards style than safety." - icon_state = "beret_navy_fifth" - -//ushanka - -/obj/item/clothing/head/ushanka/solgov - name = "expeditionary fur hat" - desc = "An SCG Expeditionary Corps synthfur-lined hat for operating in cold environments." - icon = 'maps/torch/icons/obj/obj_head_solgov.dmi' - item_icons = list(slot_head_str = 'maps/torch/icons/mob/onmob_head_solgov.dmi') - icon_state = "ecushankadown" - icon_state_up = "ecushankaup" - -/obj/item/clothing/head/ushanka/solgov/fleet - name = "fleet fur hat" - desc = "An SCG Fleet synthfur-lined hat for operating in cold environments." - icon_state = "flushankadown" - icon_state_up = "flushankaup" - -/obj/item/clothing/head/ushanka/solgov/army - name = "army fur hat" - desc = "An SCG Marine synthfur-lined hat for operating in cold environments." - icon_state = "barushankadown" - icon_state_up = "barushankaup" - -/obj/item/clothing/head/ushanka/solgov/army/green - name = "green army fur hat" - desc = "An SCG Marine synthfur-lined hat for operating in cold environments." - icon_state = "arushankadown" - icon_state_up = "mcushankaup" - -//helmets and other such trash - -/obj/item/clothing/head/helmet/solgov - accessories = list(/obj/item/clothing/accessory/helmet_cover/blue/sol) - -/obj/item/clothing/head/helmet/solgov/security - name = "security helmet" - desc = "A helmet with 'POLICE' printed on the back in silver lettering." - icon_state = "helmet_security" - icon = 'maps/torch/icons/obj/obj_head_solgov.dmi' - item_icons = list(slot_head_str = 'maps/torch/icons/mob/onmob_head_solgov.dmi') - accessories = null - sprite_sheets = list( - SPECIES_UNATHI = 'icons/mob/species/unathi/onmob_head_helmet_unathi.dmi' - ) - -/obj/item/clothing/head/helmet/solgov/command - name = "command helmet" - desc = "A helmet with 'SOL CENTRAL GOVERNMENT' printed on the back in gold lettering." - icon_state = "helmet_command" - icon = 'maps/torch/icons/obj/obj_head_solgov.dmi' - item_icons = list(slot_head_str = 'maps/torch/icons/mob/onmob_head_solgov.dmi') - accessories = null - -/obj/item/clothing/head/helmet/solgov/pilot - name = "pilot's helmet" - desc = "A pilot's helmet for operating the cockpit in style. For when you want to protect your noggin AND look stylish." - icon_state = "pilotgov" - accessories = null - -/obj/item/clothing/head/helmet/solgov/pilot/fleet - name = "fleet pilot's helmet" - desc = "A pilot's helmet for operating the cockpit in style. This one is worn by members of the SCG Fleet." - icon_state = "pilotfleet" - icon = 'maps/torch/icons/obj/obj_head_solgov.dmi' - item_icons = list(slot_head_str = 'maps/torch/icons/mob/onmob_head_solgov.dmi') - accessories = null - -/obj/item/clothing/head/helmet/space/void/exploration - camera = /obj/machinery/camera/network/exploration - -//SolGov Hardsuits - -/obj/item/clothing/head/helmet/space/void/engineering/alt/sol - light_overlay = "helmet_light_alt" - icon = 'maps/torch/icons/obj/obj_head_solgov.dmi' - item_icons = list(slot_head_str = 'maps/torch/icons/mob/onmob_head_solgov.dmi') - sprite_sheets = list( - SPECIES_UNATHI = 'maps/torch/icons/mob/unathi/onmob_head_solgov_unathi.dmi', - SPECIES_SKRELL = 'maps/torch/icons/mob/skrell/onmob_head_solgov_skrell.dmi', - ) - sprite_sheets_obj = list( - SPECIES_UNATHI = 'maps/torch/icons/obj/unathi/obj_head_solgov_unathi.dmi', - SPECIES_SKRELL = 'maps/torch/icons/obj/skrell/obj_head_solgov_skrell.dmi', - ) - -/obj/item/clothing/head/helmet/space/void/atmos/alt/sol - light_overlay = "helmet_light_alt" - icon = 'maps/torch/icons/obj/obj_head_solgov.dmi' - item_icons = list(slot_head_str = 'maps/torch/icons/mob/onmob_head_solgov.dmi') - sprite_sheets = list( - SPECIES_UNATHI = 'maps/torch/icons/mob/unathi/onmob_head_solgov_unathi.dmi', - SPECIES_SKRELL = 'maps/torch/icons/mob/skrell/onmob_head_solgov_skrell.dmi', - ) - sprite_sheets_obj = list( - SPECIES_UNATHI = 'maps/torch/icons/obj/unathi/obj_head_solgov_unathi.dmi', - SPECIES_SKRELL = 'maps/torch/icons/obj/skrell/obj_head_solgov_skrell.dmi', - ) - -/obj/item/clothing/head/helmet/space/void/pilot/sol - light_overlay = "helmet_light_alt" - icon = 'maps/torch/icons/obj/obj_head_solgov.dmi' - item_icons = list(slot_head_str = 'maps/torch/icons/mob/onmob_head_solgov.dmi') - sprite_sheets = list( - SPECIES_UNATHI = 'maps/torch/icons/mob/unathi/onmob_head_solgov_unathi.dmi', - SPECIES_SKRELL = 'maps/torch/icons/mob/skrell/onmob_head_solgov_skrell.dmi', - ) - sprite_sheets_obj = list( - SPECIES_UNATHI = 'maps/torch/icons/obj/unathi/obj_head_solgov_unathi.dmi', - SPECIES_SKRELL = 'maps/torch/icons/obj/skrell/obj_head_solgov_skrell.dmi', - ) - -/obj/item/clothing/head/helmet/space/void/medical/alt/sol - light_overlay = "helmet_light_green_alt" - icon = 'maps/torch/icons/obj/obj_head_solgov.dmi' - item_icons = list(slot_head_str = 'maps/torch/icons/mob/onmob_head_solgov.dmi') - sprite_sheets = list( - SPECIES_UNATHI = 'maps/torch/icons/mob/unathi/onmob_head_solgov_unathi.dmi', - SPECIES_SKRELL = 'maps/torch/icons/mob/skrell/onmob_head_solgov_skrell.dmi', - ) - sprite_sheets_obj = list( - SPECIES_UNATHI = 'maps/torch/icons/obj/unathi/obj_head_solgov_unathi.dmi', - SPECIES_SKRELL = 'maps/torch/icons/obj/skrell/obj_head_solgov_skrell.dmi', - ) - -/obj/item/clothing/head/helmet/space/void/command - name = "command voidsuit helmet" - desc = "A light, radiation resistant voidsuit helmet commonly used among SCG uniformed services." - icon_state = "rig0_command" - item_state = "command_helm" - light_overlay = "helmet_light_green_alt" - icon = 'maps/torch/icons/obj/obj_head_solgov.dmi' - item_icons = list(slot_head_str = 'maps/torch/icons/mob/onmob_head_solgov.dmi') - sprite_sheets = list( - SPECIES_UNATHI = 'maps/torch/icons/mob/unathi/onmob_head_solgov_unathi.dmi', - SPECIES_SKRELL = 'maps/torch/icons/mob/skrell/onmob_head_solgov_skrell.dmi', - ) - sprite_sheets_obj = list( - SPECIES_UNATHI = 'maps/torch/icons/obj/unathi/obj_head_solgov_unathi.dmi', - SPECIES_SKRELL = 'maps/torch/icons/obj/skrell/obj_head_solgov_skrell.dmi', - ) - -/obj/item/clothing/head/helmet/space/void/exploration - name = "exploration voidsuit helmet" - desc = "A helmet of Exoplanet Exploration Unit, standard issue for Expeditionary Corps away missions. It has an armored glass dome for superiour visibility and extra anti-radiation lining." - icon = 'maps/torch/icons/obj/obj_head_solgov.dmi' - item_icons = list(slot_head_str = 'maps/torch/icons/mob/onmob_head_solgov.dmi') - icon_state = "rig0_explorer" - item_state = "explorer_helm" - sprite_sheets = list( - SPECIES_UNATHI = 'maps/torch/icons/mob/unathi/onmob_head_solgov_unathi.dmi', - SPECIES_SKRELL = 'maps/torch/icons/mob/skrell/onmob_head_solgov_skrell.dmi', - ) - sprite_sheets_obj = list( - SPECIES_UNATHI = 'maps/torch/icons/obj/unathi/obj_head_solgov_unathi.dmi', - SPECIES_SKRELL = 'maps/torch/icons/obj/skrell/obj_head_solgov_skrell.dmi', - ) - armor = list( - melee = ARMOR_MELEE_RESISTANT, - bullet = ARMOR_BALLISTIC_MINOR, - laser = ARMOR_LASER_MINOR, - energy = ARMOR_ENERGY_RESISTANT, - bomb = ARMOR_BOMB_PADDED, - bio = ARMOR_BIO_SHIELDED, - rad = ARMOR_RAD_RESISTANT - ) - light_overlay = "helmet_light_dual_alt" - tinted = FALSE diff --git a/maps/torch/items/clothing/solgov-suit.dm b/maps/torch/items/clothing/solgov-suit.dm deleted file mode 100644 index 8aee050c0d00a..0000000000000 --- a/maps/torch/items/clothing/solgov-suit.dm +++ /dev/null @@ -1,742 +0,0 @@ -/obj/item/clothing/suit/storage/solgov - name = "master solgov jacket" - icon = 'maps/torch/icons/obj/obj_suit_solgov.dmi' - item_icons = list(slot_wear_suit_str = 'maps/torch/icons/mob/onmob_suit_solgov.dmi') - valid_accessory_slots = list( - ACCESSORY_SLOT_ARMBAND, - ACCESSORY_SLOT_MEDAL, - ACCESSORY_SLOT_INSIGNIA, - ACCESSORY_SLOT_RANK, - ACCESSORY_SLOT_DEPT, - ACCESSORY_SLOT_DECOR - ) - restricted_accessory_slots = list(ACCESSORY_SLOT_ARMBAND) - -//Service - -/obj/item/clothing/suit/storage/solgov/service - name = "service jacket" - desc = "A uniform service jacket, plain and undecorated." - icon_state = "blackservice" - body_parts_covered = UPPER_TORSO|ARMS - siemens_coefficient = 0.9 - allowed = list( - /obj/item/tank/oxygen_emergency, - /obj/item/tank/oxygen_emergency_extended, - /obj/item/tank/nitrogen_emergency, - /obj/item/device/flashlight, - /obj/item/pen, - /obj/item/clothing/head/soft, - /obj/item/clothing/head/beret, - /obj/item/storage/fancy/cigarettes, - /obj/item/flame/lighter, - /obj/item/device/taperecorder, - /obj/item/device/scanner/gas, - /obj/item/device/radio, - /obj/item/taperoll - ) - -/obj/item/clothing/suit/storage/solgov/service/expeditionary - name = "expeditionary jacket" - desc = "A uniform service jacket belonging to the SCG Expeditionary Corps." - icon_state = "ecservice_crew" - - sprite_sheets = list( - SPECIES_UNATHI = 'icons/mob/species/unathi/onmob_suit_unathi.dmi' - ) - -/obj/item/clothing/suit/storage/solgov/service/expeditionary/command - icon_state = "ecservice_officer" - item_state = "ecservice_officer" - -/obj/item/clothing/suit/storage/solgov/service/expeditionary/medical - accessories = list(/obj/item/clothing/accessory/solgov/department/medical/service) - -/obj/item/clothing/suit/storage/solgov/service/expeditionary/command/medical - accessories = list(/obj/item/clothing/accessory/solgov/department/medical/service) - -/obj/item/clothing/suit/storage/solgov/service/expeditionary/engineering - accessories = list(/obj/item/clothing/accessory/solgov/department/engineering/service) - -/obj/item/clothing/suit/storage/solgov/service/expeditionary/command/engineering - accessories = list(/obj/item/clothing/accessory/solgov/department/engineering/service) - -/obj/item/clothing/suit/storage/solgov/service/expeditionary/supply - accessories = list(/obj/item/clothing/accessory/solgov/department/supply/service) - -/obj/item/clothing/suit/storage/solgov/service/expeditionary/command/supply - accessories = list(/obj/item/clothing/accessory/solgov/department/supply/service) - -/obj/item/clothing/suit/storage/solgov/service/expeditionary/security - accessories = list(/obj/item/clothing/accessory/solgov/department/security/service) - -/obj/item/clothing/suit/storage/solgov/service/expeditionary/command/security - accessories = list(/obj/item/clothing/accessory/solgov/department/security/service) - -/obj/item/clothing/suit/storage/solgov/service/expeditionary/service - accessories = list(/obj/item/clothing/accessory/solgov/department/service/service) - -/obj/item/clothing/suit/storage/solgov/service/expeditionary/command/service - accessories = list(/obj/item/clothing/accessory/solgov/department/service/service) - -/obj/item/clothing/suit/storage/solgov/service/expeditionary/exploration - accessories = list(/obj/item/clothing/accessory/solgov/department/exploration/service) - -/obj/item/clothing/suit/storage/solgov/service/expeditionary/command/exploration - accessories = list(/obj/item/clothing/accessory/solgov/department/exploration/service) - -/obj/item/clothing/suit/storage/solgov/service/expeditionary/research - accessories = list(/obj/item/clothing/accessory/solgov/department/research/service) - -/obj/item/clothing/suit/storage/solgov/service/expeditionary/command/research - accessories = list(/obj/item/clothing/accessory/solgov/department/research/service) - -/obj/item/clothing/suit/storage/solgov/service/expeditionary/command/command - accessories = list(/obj/item/clothing/accessory/solgov/department/command/service) - -/obj/item/clothing/suit/storage/solgov/service/fleet - name = "fleet service jacket" - desc = "A navy blue SCG Fleet service jacket." - icon_state = "blueservice" - item_state = "blueservice" - -/obj/item/clothing/suit/storage/solgov/service/fleet/snco - name = "fleet SNCO service jacket" - desc = "A navy blue SCG Fleet service jacket with silver cuffs." - icon_state = "blueservice_snco" - item_state = "blueservice_snco" - -/obj/item/clothing/suit/storage/solgov/service/fleet/officer - name = "fleet officer's service jacket" - desc = "A navy blue SCG Fleet dress jacket with silver accents." - icon_state = "blueservice_off" - item_state = "blueservice_off" - -/obj/item/clothing/suit/storage/solgov/service/fleet/command - name = "fleet senior officer's service jacket" - desc = "A navy blue SCG Fleet dress jacket with gold accents." - icon_state = "blueservice_comm" - item_state = "blueservice_comm" - -/obj/item/clothing/suit/storage/solgov/service/fleet/flag - name = "fleet flag officer's service jacket" - desc = "A navy blue SCG Fleet dress jacket with red accents." - icon_state = "blueservice_flag" - item_state = "blueservice_flag" - -/obj/item/clothing/suit/storage/solgov/utility/army - name = "green marine jacket" - desc = "An SCG Marine green utility jacket. Green and undecorated." - icon_state = "greenservice" - item_state = "greenservice" - -/obj/item/clothing/suit/storage/solgov/utility/army/navy - name = "navy marine jacket" - desc = "An SCG Marine navy utility jacket. Blue and undecorated." - icon_state = "navyservice" - item_state = "navyservice" - -/obj/item/clothing/suit/storage/solgov/utility/army/medical - desc = "An SCG Marine green utility jacket. This one has blue markings." - icon_state = "greenservice_med" - item_state = "greenservice_med" - -/obj/item/clothing/suit/storage/solgov/utility/army/navy/medical - desc = "An SCG Marine navy utility jacket. This one has blue markings." - icon_state = "navyservice_med" - item_state = "navyservice_med" - -/obj/item/clothing/suit/storage/solgov/utility/army/medical/command - desc = "An SCG Marine green utility jacket. This one has blue and gold markings." - icon_state = "greenservice_medcom" - item_state = "greenservice_medcom" - -/obj/item/clothing/suit/storage/solgov/utility/army/navy/medical/command - desc = "An SCG Marine navy utility jacket. This one has blue and gold markings." - icon_state = "navyservice_medcom" - item_state = "navyservice_medcom" - -/obj/item/clothing/suit/storage/solgov/utility/army/engineering - desc = "An SCG Marine green utility jacket. This one has orange markings." - icon_state = "greenservice_eng" - item_state = "greenservice_eng" - -/obj/item/clothing/suit/storage/solgov/utility/army/navy/engineering - desc = "An SCG Marine navy utility jacket. This one has orange markings." - icon_state = "navyservice_eng" - item_state = "navyservice_eng" - -/obj/item/clothing/suit/storage/solgov/utility/army/engineering/command - desc = "An SCG Marine green utility jacket. This one has orange and gold markings." - icon_state = "greenservice_engcom" - item_state = "greenservice_engcom" - -/obj/item/clothing/suit/storage/solgov/utility/army/navy/engineering/command - desc = "An SCG Marine navy utility jacket. This one has orange and gold markings." - icon_state = "navyservice_engcom" - item_state = "navyservice_engcom" - -/obj/item/clothing/suit/storage/solgov/utility/army/supply - desc = "An SCG Marine green utility jacket. This one has brown markings." - icon_state = "greenservice_sup" - item_state = "greenservice_sup" - -/obj/item/clothing/suit/storage/solgov/utility/army/navy/supply - desc = "An SCG Marine navy utility jacket. This one has brown markings." - icon_state = "navyservice_sup" - item_state = "naveservice_sup" - -/obj/item/clothing/suit/storage/solgov/utility/army/security - desc = "An SCG Marine green utility jacket. This one has red markings." - icon_state = "greenservice_sec" - item_state = "greenservice_sec" - -/obj/item/clothing/suit/storage/solgov/utility/army/navy/security - desc = "An SCG Marine navy utility jacket. This one has red markings." - icon_state = "navyservice_sec" - item_state = "navyservice_sec" - -/obj/item/clothing/suit/storage/solgov/utility/army/security/command - desc = "An SCG Marine green utility jacket. This one has red and gold markings." - icon_state = "greenservice_seccom" - item_state = "greenservice_seccom" - -/obj/item/clothing/suit/storage/solgov/utility/army/navy/security/command - desc = "An SCG Marine navy utility jacket. This one has red and gold markings." - icon_state = "navyservice_seccom" - item_state = "navyservice_seccom" - -/obj/item/clothing/suit/storage/solgov/utility/army/service - desc = "An SCG Marine green utility jacket. This one has green markings." - icon_state = "greenservice_srv" - item_state = "greenservice_srv" - -/obj/item/clothing/suit/storage/solgov/utility/navy/service - desc = "An SCG Marine navy utility jacket. This one has green markings." - icon_state = "navyservice_srv" - item_state = "navyservice_srv" - -/obj/item/clothing/suit/storage/solgov/utility/army/service/command - desc = "An SCG Marine green utility jacket. This one has green and gold markings." - icon_state = "greenservice_srvcom" - item_state = "greenservice_srvcom" - -/obj/item/clothing/suit/storage/solgov/utility/army/navy/service/command - desc = "An SCG Marine navy utility jacket. This one has green and gold markings." - icon_state = "navyservice_srvcom" - item_state = "navyservice_srvcom" - -/obj/item/clothing/suit/storage/solgov/utility/army/exploration - desc = "An SCG Marine green utility jacket. This one has purple markings." - icon_state = "greenservice_exp" - item_state = "greenservice_exp" - -/obj/item/clothing/suit/storage/solgov/utility/army/navy/exploration - desc = "An SCG Marine navy utility jacket. This one has purple markings." - icon_state = "navyservice_exp" - item_state = "navyservice_exp" - -/obj/item/clothing/suit/storage/solgov/utility/army/exploration/command - desc = "An SCG Marine green utility jacket. This one has purple and gold markings." - icon_state = "greenservice_expcom" - item_state = "greenservice_expcom" - -/obj/item/clothing/suit/storage/solgov/utility/army/navy/exploration/command - desc = "An SCG Marine navy utility jacket. This one has purple and gold markings." - icon_state = "navyservice_expcom" - item_state = "navyservice_expcom" - -/obj/item/clothing/suit/storage/solgov/utility/army/command - desc = "An SCG Marine Corps green utility jacket. This one has gold markings." - icon_state = "greenservice_com" - item_state = "greenservice_com" - -/obj/item/clothing/suit/storage/solgov/utility/army/navy/command - desc = "An SCG Marine Corps navy utility jacket. This one has gold markings." - icon_state = "navyservice_com" - item_state = "navyservice_com" - -//Dress - murder me with a gun why are these 3 different types - -/obj/item/clothing/suit/storage/solgov/dress - name = "dress jacket" - desc = "A uniform dress jacket, plain and undecorated." - icon_state = "ecdress_xpl" - item_state = "ecdress_xpl" - body_parts_covered = UPPER_TORSO|ARMS - siemens_coefficient = 0.9 - valid_accessory_slots = list(ACCESSORY_SLOT_MEDAL,ACCESSORY_SLOT_RANK, ACCESSORY_SLOT_INSIGNIA) - restricted_accessory_slots = list(ACCESSORY_SLOT_ARMBAND) - -/obj/item/clothing/suit/storage/solgov/dress/expedition - name = "expeditionary dress coat" - desc = "A silver and black dress peacoat belonging to the SCG Expeditionary Corps. Fashionable, for the 25th century at least." - icon_state = "ecdress_xpl" - item_state = "ecdress_xpl" - sprite_sheets = list( - SPECIES_UNATHI = 'icons/mob/species/unathi/onmob_suit_unathi.dmi' - ) - -/obj/item/clothing/suit/storage/solgov/dress/expedition/senior - name = "expeditionary senior's dress coat" - icon_state = "ecdress_sxpl" - item_state = "ecdress_sxpl" - -/obj/item/clothing/suit/storage/solgov/dress/expedition/chief - name = "expeditionary chief's dress coat" - icon_state = "ecdress_cxpl" - item_state = "ecdress_cxpl" - -/obj/item/clothing/suit/storage/solgov/dress/expedition/command - name = "expeditionary officer's dress coat" - desc = "A gold and black dress peacoat belonging to the SCG Expeditionary Corps. The height of fashion." - icon_state = "ecdress_ofcr" - item_state = "ecdress_ofcr" - -/obj/item/clothing/suit/storage/solgov/dress/expedition/command/cdr - name = "expeditionary commander's dress coat" - icon_state = "ecdress_cdr" - item_state = "ecdress_cdr" - -/obj/item/clothing/suit/storage/solgov/dress/expedition/command/capt - name = "expeditionary captain's dress coat" - icon_state = "ecdress_capt" - item_state = "ecdress_capt" - -/obj/item/clothing/suit/storage/solgov/dress/expedition/command/adm - name = "expeditionary admiral's dress coat" - icon_state = "ecdress_adm" - item_state = "ecdress_adm" - -/obj/item/clothing/suit/storage/solgov/dress/fleet - name = "fleet dress jacket" - desc = "A navy blue SCG Fleet dress jacket. Don't get near pasta sauce or vox." - icon_state = "whitedress" - item_state = "whitedress" - -/obj/item/clothing/suit/storage/solgov/dress/fleet/snco - name = "fleet dress SNCO jacket" - desc = "A navy blue SCG Fleet dress jacket with silver cuffs. Don't get near pasta sauce or vox." - icon_state = "whitedress_snco" - item_state = "whitedress_snco" - -/obj/item/clothing/suit/storage/solgov/dress/fleet/officer - name = "fleet officer's dress jacket" - desc = "A navy blue SCG Fleet dress jacket with silver accents. Don't get near pasta sauce or vox." - icon_state = "whitedress_off" - item_state = "whitedress_off" - -/obj/item/clothing/suit/storage/solgov/dress/fleet/command - name = "fleet senior officer's dress jacket" - desc = "A navy blue SCG Fleet dress jacket with gold accents. Don't get near pasta sauce or vox." - icon_state = "whitedress_comm" - item_state = "whitedress_comm" - -/obj/item/clothing/suit/storage/solgov/dress/fleet/flag - name = "fleet flag officer's dress jacket" - desc = "A navy blue SCG Fleet dress jacket with red accents. Don't get near pasta sauce or vox." - icon_state = "whitedress_flag" - item_state = "whitedress_flag" - -/obj/item/clothing/suit/dress/solgov - name = "dress jacket" - desc = "A uniform dress jacket, fancy." - icon_state = "blackdress" - item_state = "blackdress" - icon = 'maps/torch/icons/obj/obj_suit_solgov.dmi' - item_icons = list(slot_wear_suit_str = 'maps/torch/icons/mob/onmob_suit_solgov.dmi') - body_parts_covered = UPPER_TORSO|ARMS - siemens_coefficient = 0.9 - allowed = list( - /obj/item/tank/oxygen_emergency, - /obj/item/tank/oxygen_emergency_extended, - /obj/item/tank/nitrogen_emergency, - /obj/item/device/flashlight, - /obj/item/clothing/head/soft, - /obj/item/clothing/head/beret, - /obj/item/device/radio, - /obj/item/pen - ) - valid_accessory_slots = list(ACCESSORY_SLOT_MEDAL,ACCESSORY_SLOT_RANK,ACCESSORY_SLOT_INSIGNIA) - -/obj/item/clothing/suit/dress/solgov/fleet/sailor - name = "fleet dress overwear" - desc = "A navy blue SCG Fleet dress suit. Almost looks like a school-girl outfit." - icon_state = "sailordress" - item_state = "sailordress" - -/obj/item/clothing/suit/dress/solgov/army - name = "army dress jacket" - desc = "A tailored black SCG Army dress jacket with red trim. So sexy it hurts." - icon_state = "blackdress" - item_state = "blackdress" - -/obj/item/clothing/suit/dress/solgov/army/command - name = "army officer's dress jacket" - desc = "A tailored black SCG Army dress jacket with gold trim. Smells like ceremony." - icon_state = "blackdress_com" - item_state = "blackdress_com" - -//Misc - -/obj/item/clothing/suit/storage/hooded/wintercoat/solgov - name = "expeditionary winter coat" - icon_state = "coatec" - icon = 'maps/torch/icons/obj/obj_suit_solgov.dmi' - item_icons = list(slot_wear_suit_str = 'maps/torch/icons/mob/onmob_suit_solgov.dmi') - valid_accessory_slots = list(ACCESSORY_SLOT_INSIGNIA,ACCESSORY_SLOT_RANK) - -/obj/item/clothing/suit/storage/hooded/wintercoat/solgov/army - name = "army winter coat" - icon_state = "coatar" - valid_accessory_slots = list(ACCESSORY_SLOT_INSIGNIA,ACCESSORY_SLOT_RANK) - -/obj/item/clothing/suit/storage/hooded/wintercoat/solgov/fleet - name = "fleet winter coat" - icon_state = "coatfl" - valid_accessory_slots = list(ACCESSORY_SLOT_INSIGNIA) - -/obj/item/clothing/suit/storage/jacket/solgov/fleet - name = "fleet engineering jacket" - desc = "A jacket commonly issued by the fleet to its engineers. It sports some yellow reflective stripes, and has elbow pads." - icon_state = "navyengjacket" - item_state = "navyengjacket" - icon = 'maps/torch/icons/obj/obj_suit_solgov.dmi' - item_icons = list(slot_wear_suit_str = 'maps/torch/icons/mob/onmob_suit_solgov.dmi') - valid_accessory_slots = list(ACCESSORY_SLOT_INSIGNIA,ACCESSORY_SLOT_RANK) - allowed = list ( - /obj/item/pen, - /obj/item/clothing/head/soft, - /obj/item/clothing/head/beret, - /obj/item/storage/fancy/cigarettes, - /obj/item/flame/lighter, - /obj/item/device/taperecorder, - /obj/item/device/scanner/gas, - /obj/item/device/radio, - /obj/item/taperoll, - /obj/item/device/scanner/gas, - /obj/item/device/flashlight, - /obj/item/device/multitool, - /obj/item/device/radio, - /obj/item/device/t_scanner, - /obj/item/crowbar, - /obj/item/screwdriver, - /obj/item/weldingtool, - /obj/item/wirecutters, - /obj/item/wrench, - /obj/item/tank/oxygen_emergency, - /obj/item/tank/oxygen_emergency_extended, - /obj/item/tank/nitrogen_emergency, - /obj/item/clothing/mask/gas, - /obj/item/taperoll/engineering, - /obj/item/clothing/head/hardhat - ) - -/obj/item/clothing/suit/storage/jacket/solgov/fleet/medical - name = "fleet jacket" - desc = "A jacket commonly issued by the fleet to its medical staff. It sports some discrete blue markings, and has thin elbow pads." - icon_state = "navymedjacket" - item_state = "navymedjacket" - allowed = list ( - /obj/item/pen, - /obj/item/clothing/head/soft, - /obj/item/clothing/head/beret, - /obj/item/storage/fancy/cigarettes, - /obj/item/flame/lighter, - /obj/item/device/taperecorder, - /obj/item/device/scanner/gas, - /obj/item/device/radio, - /obj/item/taperoll, - /obj/item/stack/medical, - /obj/item/reagent_containers/dropper, - /obj/item/reagent_containers/hypospray, - /obj/item/reagent_containers/syringe, - /obj/item/device/scanner/health, - /obj/item/device/flashlight, - /obj/item/device/radio, - /obj/item/clothing/head/hardhat, - /obj/item/tank/oxygen_emergency, - /obj/item/tank/oxygen_emergency_extended, - /obj/item/tank/nitrogen_emergency, - /obj/item/reagent_containers/ivbag - ) - -/obj/item/clothing/suit/storage/jacket/solgov/fleet/security - name = "fleet jacket" - desc = "A jacket commonly issued by the fleet to its security staff. It sports some discrete red markings, and has elbow pads." - icon_state = "navysecjacket" - item_state = "navysecjacket" - allowed = list ( - /obj/item/tank/oxygen_emergency, - /obj/item/tank/oxygen_emergency_extended, - /obj/item/tank/nitrogen_emergency, - /obj/item/device/flashlight, - /obj/item/pen, - /obj/item/clothing/head/soft, - /obj/item/clothing/head/beret, - /obj/item/storage/fancy/cigarettes, - /obj/item/flame/lighter, - /obj/item/device/taperecorder, - /obj/item/device/scanner/gas, - /obj/item/device/radio, - /obj/item/taperoll, - /obj/item/gun/energy, - /obj/item/device/radio, - /obj/item/reagent_containers/spray/pepper, - /obj/item/gun/projectile, - /obj/item/ammo_magazine, - /obj/item/ammo_casing, - /obj/item/melee/baton, - /obj/item/handcuffs, - /obj/item/gun/magnetic, - /obj/item/clothing/head/helmet - ) - -/obj/item/clothing/suit/storage/jacket/solgov/fleet/service - name = "fleet jacket" - desc = "A jacket commonly issued by the fleet to its service staff. It sports some discrete green markings." - icon_state = "navysrvjacket" - item_state = "navysrvjacket" - allowed = list ( - /obj/item/tank/oxygen_emergency, - /obj/item/tank/oxygen_emergency_extended, - /obj/item/tank/nitrogen_emergency, - /obj/item/device/flashlight, - /obj/item/pen, - /obj/item/clothing/head/soft, - /obj/item/clothing/head/beret, - /obj/item/storage/fancy/cigarettes, - /obj/item/flame/lighter, - /obj/item/device/taperecorder, - /obj/item/device/scanner/gas, - /obj/item/device/radio, - /obj/item/taperoll - ) - -/obj/item/clothing/suit/storage/jacket/solgov/fleet/supply - name = "fleet jacket" - desc = "A jacket commonly issued by the fleet to its deck staff. It sports some discrete brown markings, and has elbow pads." - icon_state = "navysupjacket" - item_state = "navysupjacket" - allowed = list ( - /obj/item/tank/oxygen_emergency, - /obj/item/tank/oxygen_emergency_extended, - /obj/item/tank/nitrogen_emergency, - /obj/item/device/flashlight, - /obj/item/pen, - /obj/item/clothing/head/soft, - /obj/item/clothing/head/beret, - /obj/item/storage/fancy/cigarettes, - /obj/item/flame/lighter, - /obj/item/device/taperecorder, - /obj/item/device/scanner/gas, - /obj/item/device/radio, - /obj/item/taperoll - ) - -/obj/item/clothing/suit/storage/jacket/solgov/fleet/command - name = "fleet jacket" - desc = "A jacket commonly issued by the fleet to its command staff. It sports some gold markings." - icon_state = "navycomjacket" - item_state = "navycomjacket" - allowed = list ( - /obj/item/tank/oxygen_emergency, - /obj/item/tank/oxygen_emergency_extended, - /obj/item/tank/nitrogen_emergency, - /obj/item/device/flashlight, - /obj/item/pen, - /obj/item/clothing/head/soft, - /obj/item/clothing/head/beret, - /obj/item/storage/fancy/cigarettes, - /obj/item/flame/lighter, - /obj/item/device/taperecorder, - /obj/item/device/scanner/gas, - /obj/item/device/radio, - /obj/item/taperoll - ) - -//SolGov Hardsuits - -/obj/item/clothing/suit/space/void/engineering/alt/sol - icon = 'maps/torch/icons/obj/obj_suit_solgov.dmi' - item_icons = list(slot_wear_suit_str = 'maps/torch/icons/mob/onmob_suit_solgov.dmi') - sprite_sheets = list( - SPECIES_UNATHI = 'maps/torch/icons/mob/unathi/onmob_suit_solgov_unathi.dmi', - SPECIES_SKRELL = 'maps/torch/icons/mob/skrell/onmob_suit_solgov_skrell.dmi', - ) - sprite_sheets_obj = list( - SPECIES_UNATHI = 'maps/torch/icons/obj/unathi/obj_suit_solgov_unathi.dmi', - SPECIES_SKRELL = 'maps/torch/icons/obj/skrell/obj_suit_solgov_skrell.dmi', - ) - -/obj/item/clothing/suit/space/void/engineering/alt/sol/prepared - helmet = /obj/item/clothing/head/helmet/space/void/engineering/alt/sol - boots = /obj/item/clothing/shoes/magboots - -/obj/item/clothing/suit/space/void/atmos/alt/sol - icon = 'maps/torch/icons/obj/obj_suit_solgov.dmi' - item_icons = list(slot_wear_suit_str = 'maps/torch/icons/mob/onmob_suit_solgov.dmi') - sprite_sheets = list( - SPECIES_UNATHI = 'maps/torch/icons/mob/unathi/onmob_suit_solgov_unathi.dmi', - SPECIES_SKRELL = 'maps/torch/icons/mob/skrell/onmob_suit_solgov_skrell.dmi', - ) - sprite_sheets_obj = list( - SPECIES_UNATHI = 'maps/torch/icons/obj/unathi/obj_suit_solgov_unathi.dmi', - SPECIES_SKRELL = 'maps/torch/icons/obj/skrell/obj_suit_solgov_skrell.dmi', - ) - -/obj/item/clothing/suit/space/void/atmos/alt/sol/prepared - helmet = /obj/item/clothing/head/helmet/space/void/atmos/alt/sol - boots = /obj/item/clothing/shoes/magboots - -/obj/item/clothing/suit/space/void/pilot/sol - icon = 'maps/torch/icons/obj/obj_suit_solgov.dmi' - item_icons = list(slot_wear_suit_str = 'maps/torch/icons/mob/onmob_suit_solgov.dmi') - sprite_sheets = list( - SPECIES_UNATHI = 'maps/torch/icons/mob/unathi/onmob_suit_solgov_unathi.dmi', - SPECIES_SKRELL = 'maps/torch/icons/mob/skrell/onmob_suit_solgov_skrell.dmi', - ) - sprite_sheets_obj = list( - SPECIES_UNATHI = 'maps/torch/icons/obj/unathi/obj_suit_solgov_unathi.dmi', - SPECIES_SKRELL = 'maps/torch/icons/obj/skrell/obj_suit_solgov_skrell.dmi', - ) - -/obj/item/clothing/suit/space/void/pilot/sol/prepared - helmet = /obj/item/clothing/head/helmet/space/void/pilot/sol - boots = /obj/item/clothing/shoes/magboots - -/obj/item/clothing/suit/space/void/medical/alt/sol - icon = 'maps/torch/icons/obj/obj_suit_solgov.dmi' - item_icons = list(slot_wear_suit_str = 'maps/torch/icons/mob/onmob_suit_solgov.dmi') - sprite_sheets = list( - SPECIES_UNATHI = 'maps/torch/icons/mob/unathi/onmob_suit_solgov_unathi.dmi', - SPECIES_SKRELL = 'maps/torch/icons/mob/skrell/onmob_suit_solgov_skrell.dmi', - ) - sprite_sheets_obj = list( - SPECIES_UNATHI = 'maps/torch/icons/obj/unathi/obj_suit_solgov_unathi.dmi', - SPECIES_SKRELL = 'maps/torch/icons/obj/skrell/obj_suit_solgov_skrell.dmi', - ) - -/obj/item/clothing/suit/space/void/medical/alt/sol/prepared - helmet = /obj/item/clothing/head/helmet/space/void/medical/alt/sol - boots = /obj/item/clothing/shoes/magboots - -/obj/item/clothing/suit/space/void/command - name = "command voidsuit" - desc = "A light, radiation resistant voidsuit commonly used among SCG uniformed services. This one has an EC seal on its chest plate and command department markings." - icon = 'maps/torch/icons/obj/obj_suit_solgov.dmi' - item_icons = list(slot_wear_suit_str = 'maps/torch/icons/mob/onmob_suit_solgov.dmi') - icon_state = "rig_command" - item_state = "rig_command" - sprite_sheets = list( - SPECIES_UNATHI = 'maps/torch/icons/mob/unathi/onmob_suit_solgov_unathi.dmi', - SPECIES_SKRELL = 'maps/torch/icons/mob/skrell/onmob_suit_solgov_skrell.dmi', - ) - sprite_sheets_obj = list( - SPECIES_UNATHI = 'maps/torch/icons/obj/unathi/obj_suit_solgov_unathi.dmi', - SPECIES_SKRELL = 'maps/torch/icons/obj/skrell/obj_suit_solgov_skrell.dmi', - ) - allowed = list(/obj/item/device/flashlight,/obj/item/tank,/obj/item/device/suit_cooling_unit,/obj/item/storage/briefcase/inflatable) - -/obj/item/clothing/suit/space/void/command/Initialize() - . = ..() - slowdown_per_slot[slot_wear_suit] = 0.75 - -/obj/item/clothing/suit/space/void/command/prepared - helmet = /obj/item/clothing/head/helmet/space/void/command - boots = /obj/item/clothing/shoes/magboots - -/obj/item/clothing/suit/space/void/exploration - name = "exploration voidsuit" - icon = 'maps/torch/icons/obj/obj_suit_solgov.dmi' - item_icons = list(slot_wear_suit_str = 'maps/torch/icons/mob/onmob_suit_solgov.dmi') - desc = "The bulky Exoplanet Exploration Unit is a standard voidsuit for Expeditionary Corps field operations. It features extra padding and respectable radiation-resistant lining." - icon_state = "rig_explorer" - item_state = "rig_explorer" - sprite_sheets = list( - SPECIES_UNATHI = 'maps/torch/icons/mob/unathi/onmob_suit_solgov_unathi.dmi', - SPECIES_SKRELL = 'maps/torch/icons/mob/skrell/onmob_suit_solgov_skrell.dmi', - ) - sprite_sheets_obj = list( - SPECIES_UNATHI = 'maps/torch/icons/obj/unathi/obj_suit_solgov_unathi.dmi', - SPECIES_SKRELL = 'maps/torch/icons/obj/skrell/obj_suit_solgov_skrell.dmi', - ) - armor = list( - melee = ARMOR_MELEE_RESISTANT, - bullet = ARMOR_BALLISTIC_MINOR, - laser = ARMOR_LASER_MINOR, - energy = ARMOR_ENERGY_RESISTANT, - bomb = ARMOR_BOMB_PADDED, - bio = ARMOR_BIO_SHIELDED, - rad = ARMOR_RAD_RESISTANT - ) - allowed = list(/obj/item/device/flashlight,/obj/item/tank,/obj/item/device/suit_cooling_unit,/obj/item/stack/flag,/obj/item/device/scanner/health,/obj/item/device/gps,/obj/item/pinpointer/radio,/obj/item/material/hatchet/machete,/obj/item/shovel) - -/obj/item/clothing/suit/space/void/exploration/prepared - helmet = /obj/item/clothing/head/helmet/space/void/exploration - boots = /obj/item/clothing/shoes/magboots - -/obj/item/clothing/suit/space/void/medical/alt/sol/expo - name = "exploration medical voidsuit" - desc = "The bulky Exoplanet Exploration Unit is a standard voidsuit for Expeditionary Corps' medical specialists in field operations. It features extra padding and respectable radiation-resistant lining." - armor = list( - melee = ARMOR_MELEE_RESISTANT, - bullet = ARMOR_BALLISTIC_MINOR, - laser = ARMOR_LASER_MINOR, - energy = ARMOR_ENERGY_RESISTANT, - bomb = ARMOR_BOMB_PADDED, - bio = ARMOR_BIO_SHIELDED, - rad = ARMOR_RAD_RESISTANT - ) - allowed = list(/obj/item/device/flashlight,/obj/item/tank,/obj/item/device/suit_cooling_unit,/obj/item/stack/flag,/obj/item/device/scanner/health,/obj/item/device/gps,/obj/item/pinpointer/radio,/obj/item/material/hatchet/machete,/obj/item/shovel) - -/obj/item/clothing/head/helmet/space/void/medical/alt/sol/expo - name = "exploration medical voidsuit helmet" - desc = "The bulky Exoplanet Exploration Unit is a standard voidsuit for Expeditionary Corps' medical specialists in field operations. It features extra padding and respectable radiation-resistant lining." - armor = list( - melee = ARMOR_MELEE_RESISTANT, - bullet = ARMOR_BALLISTIC_MINOR, - laser = ARMOR_LASER_MINOR, - energy = ARMOR_ENERGY_RESISTANT, - bomb = ARMOR_BOMB_PADDED, - bio = ARMOR_BIO_SHIELDED, - rad = ARMOR_RAD_RESISTANT - ) - allowed = list(/obj/item/device/flashlight,/obj/item/tank,/obj/item/device/suit_cooling_unit,/obj/item/stack/flag,/obj/item/device/scanner/health,/obj/item/device/gps,/obj/item/pinpointer/radio,/obj/item/material/hatchet/machete,/obj/item/shovel) - - -/obj/item/clothing/suit/space/void/atmos/alt/sol/expo - name = "exploration engineering voidsuit" - desc = "The bulky Exoplanet Exploration Unit is a standard voidsuit for Expeditionary Corps' engineering specialists in field operations. It features extra padding and respectable radiation-resistant lining." - armor = list( - melee = ARMOR_MELEE_RESISTANT, - bullet = ARMOR_BALLISTIC_MINOR, - laser = ARMOR_LASER_MINOR, - energy = ARMOR_ENERGY_RESISTANT, - bomb = ARMOR_BOMB_PADDED, - bio = ARMOR_BIO_SHIELDED, - rad = ARMOR_RAD_RESISTANT - ) - allowed = list(/obj/item/device/flashlight,/obj/item/tank,/obj/item/device/suit_cooling_unit,/obj/item/stack/flag,/obj/item/device/scanner/health,/obj/item/device/gps,/obj/item/pinpointer/radio,/obj/item/material/hatchet/machete,/obj/item/shovel) - -/obj/item/clothing/head/helmet/space/void/atmos/alt/sol/expo - name = "exploration engineering voidsuit helmet" - desc = "The bulky Exoplanet Exploration Unit is a standard voidsuit for Expeditionary Corps' engineering specialists in field operations. It features extra padding and respectable radiation-resistant lining." - armor = list( - melee = ARMOR_MELEE_RESISTANT, - bullet = ARMOR_BALLISTIC_MINOR, - laser = ARMOR_LASER_MINOR, - energy = ARMOR_ENERGY_RESISTANT, - bomb = ARMOR_BOMB_PADDED, - bio = ARMOR_BIO_SHIELDED, - rad = ARMOR_RAD_RESISTANT - ) - allowed = list(/obj/item/device/flashlight,/obj/item/tank,/obj/item/device/suit_cooling_unit,/obj/item/stack/flag,/obj/item/device/scanner/health,/obj/item/device/gps,/obj/item/pinpointer/radio,/obj/item/material/hatchet/machete,/obj/item/shovel) - -/obj/item/clothing/suit/space/void/security/alt/expo - name = "marine voidsuit" - desc = "A light, radiation resistant voidsuit commonly used among SCG uniformed services. This one has an SCG Army seal on its chest plate." - -/obj/item/clothing/head/helmet/space/void/security/alt/expo - name = "marine voidsuit helmet" - desc = "A light, radiation resistant voidsuit commonly used among SCG uniformed services. This one has an SCG Army seal on its chest plate." diff --git a/maps/torch/items/clothing/solgov-under.dm b/maps/torch/items/clothing/solgov-under.dm deleted file mode 100644 index 3ed1f2d5d1093..0000000000000 --- a/maps/torch/items/clothing/solgov-under.dm +++ /dev/null @@ -1,567 +0,0 @@ -/obj/item/clothing/under/solgov - name = "master solgov uniform" - desc = "You shouldn't be seeing this." - icon = 'maps/torch/icons/obj/obj_under_solgov.dmi' - item_icons = list(slot_w_uniform_str = 'maps/torch/icons/mob/onmob_under_solgov.dmi') - siemens_coefficient = 0.8 - gender_icons = 1 - -//PT -/obj/item/clothing/under/solgov/pt - name = "pt uniform" - desc = "Shorts! Shirt! Miami! Sexy!" - icon_state = "miami" - worn_state = "miami" - body_parts_covered = UPPER_TORSO|LOWER_TORSO - -/obj/item/clothing/under/solgov/pt/expeditionary - name = "expeditionary pt uniform" - desc = "A baggy shirt bearing the seal of the SCG Expeditionary Corps and some dorky looking blue shorts." - icon_state = "expeditionpt" - worn_state = "expeditionpt" - sprite_sheets = list( - SPECIES_UNATHI = 'icons/mob/species/unathi/onmob_under_unathi.dmi' - ) - -/obj/item/clothing/under/solgov/pt/fleet - name = "fleet pt uniform" - desc = "A tight-fitting navy blue shirt paired with black shorts. For when you need to 'get physical'." - icon_state = "fleetpt" - worn_state = "fleetpt" - -/obj/item/clothing/under/solgov/pt/army - name = "army pt uniform" - desc = "Does NOT leave much to the imagination." - icon_state = "armypt" - worn_state = "armypt" - - -//Utility - -/obj/item/clothing/under/solgov/utility - name = "utility uniform" - desc = "A comfortable turtleneck and black utility trousers." - icon_state = "blackutility" - item_state = "bl_suit" - worn_state = "blackutility" - sprite_sheets = list( - SPECIES_UNATHI = 'icons/mob/species/unathi/onmob_under_unathi.dmi' - ) - armor = list( - melee = ARMOR_MELEE_MINOR, - energy = ARMOR_ENERGY_MINOR - ) - -/obj/item/clothing/under/solgov/utility/expeditionary - name = "expeditionary uniform" - desc = "The utility uniform of the SCG Expeditionary Corps, made from biohazard resistant material. This one has silver trim." - icon_state = "blackutility_crew" - worn_state = "blackutility_crew" - sprite_sheets = list( - SPECIES_UNATHI = 'icons/mob/species/unathi/onmob_under_unathi.dmi' - ) - -/obj/item/clothing/under/solgov/utility/expeditionary/command - accessories = list(/obj/item/clothing/accessory/solgov/department/command) - -/obj/item/clothing/under/solgov/utility/expeditionary/engineering - accessories = list(/obj/item/clothing/accessory/solgov/department/engineering) - -/obj/item/clothing/under/solgov/utility/expeditionary/security - accessories = list(/obj/item/clothing/accessory/solgov/department/security) - -/obj/item/clothing/under/solgov/utility/expeditionary/medical - accessories = list(/obj/item/clothing/accessory/solgov/department/medical) - -/obj/item/clothing/under/solgov/utility/expeditionary/supply - accessories = list(/obj/item/clothing/accessory/solgov/department/supply) - -/obj/item/clothing/under/solgov/utility/expeditionary/service - accessories = list(/obj/item/clothing/accessory/solgov/department/service) - -/obj/item/clothing/under/solgov/utility/expeditionary/exploration - accessories = list(/obj/item/clothing/accessory/solgov/department/exploration) - -/obj/item/clothing/under/solgov/utility/expeditionary/research - accessories = list(/obj/item/clothing/accessory/solgov/department/research) - -/obj/item/clothing/under/solgov/utility/expeditionary/officer - name = "expeditionary officer's uniform" - desc = "The utility uniform of the SCG Expeditionary Corps, made from biohazard resistant material. This one has gold trim." - icon_state = "blackutility_com" - worn_state = "blackutility_com" - -/obj/item/clothing/under/solgov/utility/expeditionary/officer/command - accessories = list(/obj/item/clothing/accessory/solgov/department/command) - -/obj/item/clothing/under/solgov/utility/expeditionary/officer/engineering - accessories = list(/obj/item/clothing/accessory/solgov/department/engineering) - -/obj/item/clothing/under/solgov/utility/expeditionary/officer/security - accessories = list(/obj/item/clothing/accessory/solgov/department/security) - -/obj/item/clothing/under/solgov/utility/expeditionary/officer/medical - accessories = list(/obj/item/clothing/accessory/solgov/department/medical) - -/obj/item/clothing/under/solgov/utility/expeditionary/officer/supply - accessories = list(/obj/item/clothing/accessory/solgov/department/supply) - -/obj/item/clothing/under/solgov/utility/expeditionary/officer/service - accessories = list(/obj/item/clothing/accessory/solgov/department/service) - -/obj/item/clothing/under/solgov/utility/expeditionary/officer/exploration - accessories = list(/obj/item/clothing/accessory/solgov/department/exploration) - -/obj/item/clothing/under/solgov/utility/expeditionary/officer/research - accessories = list(/obj/item/clothing/accessory/solgov/department/research) - -/obj/item/clothing/under/solgov/utility/fleet - name = "fleet coveralls" - desc = "The utility uniform of the SCG Fleet, made from an insulated material." - icon_state = "navyutility" - item_state = "jensensuit" - worn_state = "navyutility" - -/obj/item/clothing/under/solgov/utility/fleet/command - accessories = list(/obj/item/clothing/accessory/solgov/department/command/fleet) - -/obj/item/clothing/under/solgov/utility/fleet/command/pilot - accessories = list(/obj/item/clothing/accessory/solgov/specialty/pilot) - -/obj/item/clothing/under/solgov/utility/fleet/engineering - accessories = list(/obj/item/clothing/accessory/solgov/department/engineering/fleet) - -/obj/item/clothing/under/solgov/utility/fleet/security - accessories = list(/obj/item/clothing/accessory/solgov/department/security/fleet) - -/obj/item/clothing/under/solgov/utility/fleet/medical - accessories = list(/obj/item/clothing/accessory/solgov/department/medical/fleet) - -/obj/item/clothing/under/solgov/utility/fleet/supply - accessories = list(/obj/item/clothing/accessory/solgov/department/supply/fleet) - -/obj/item/clothing/under/solgov/utility/fleet/service - accessories = list(/obj/item/clothing/accessory/solgov/department/service/fleet) - -/obj/item/clothing/under/solgov/utility/fleet/exploration - accessories = list(/obj/item/clothing/accessory/solgov/department/exploration/fleet) - -/obj/item/clothing/under/solgov/utility/fleet/polopants - name = "fleet polo and pants" - desc = "An alternative utility uniform of the SCG Fleet, specially designed for engineering staff. The pants sports some yellow reflective stripes, and have knee pads." - icon_state = "navypolopants" - worn_state = "navypolopants" - -/obj/item/clothing/under/solgov/utility/fleet/polopants/command - desc = "An alternative utility uniform of the SCG Fleet. The pants have knee pads." - icon_state = "navypolopantsnostripe" - worn_state = "navypolopantscom" - -/obj/item/clothing/under/solgov/utility/fleet/polopants/security - desc = "An alternative utility uniform of the SCG Fleet. The pants have knee pads." - icon_state = "navypolopantsnostripe" - worn_state = "navypolopantssec" - -/obj/item/clothing/under/solgov/utility/fleet/polopants/medical - desc = "An alternative utility uniform of the SCG Fleet, specially designed for medics and doctors. The pants have knee pads." - icon_state = "navypolopantsnostripe" - worn_state = "navypolopantsmed" - -/obj/item/clothing/under/solgov/utility/fleet/polopants/supply - desc = "An alternative utility uniform of the SCG Fleet. The pants have knee pads." - icon_state = "navypolopantsnostripe" - worn_state = "navypolopantssup" - -/obj/item/clothing/under/solgov/utility/fleet/polopants/service - desc = "An alternative utility uniform of the SCG Fleet. The pants have knee pads." - icon_state = "navypolopantsnostripe" - worn_state = "navypolopantssrv" - -/obj/item/clothing/under/solgov/utility/fleet/combat - name = "fleet fatigues" - desc = "Alternative utility uniform of the SCG Fleet, for when coveralls are impractical." - icon_state = "navycombat" - worn_state = "navycombat" - -/obj/item/clothing/under/solgov/utility/fleet/combat/security - accessories = list(/obj/item/clothing/accessory/solgov/department/security/fleet) - -/obj/item/clothing/under/solgov/utility/fleet/combat/medical - accessories = list(/obj/item/clothing/accessory/solgov/department/medical/fleet, /obj/item/clothing/accessory/armband/medblue) - -/obj/item/clothing/under/solgov/utility/fleet/combat/command - accessories = list(/obj/item/clothing/accessory/solgov/department/command/fleet) - -/obj/item/clothing/under/solgov/utility/fleet/combat/exploration - accessories = list(/obj/item/clothing/accessory/solgov/department/exploration/fleet) - -/obj/item/clothing/under/solgov/utility/fleet/combat/engineering - accessories = list(/obj/item/clothing/accessory/solgov/department/engineering/fleet) - -/obj/item/clothing/under/solgov/utility/fleet/combat/service - accessories = list(/obj/item/clothing/accessory/solgov/department/service/fleet) - -/obj/item/clothing/under/solgov/utility/fleet/combat/supply - accessories = list(/obj/item/clothing/accessory/solgov/department/supply/fleet) - -/obj/item/clothing/under/solgov/utility/army - name = "green marine fatigues" - desc = "The utility uniform of the SCG Marine Corps, made from durable material." - icon_state = "greenutility" - item_state = "jensensuit" - worn_state = "greenutility" - -/obj/item/clothing/under/solgov/utility/army/command - accessories = list(/obj/item/clothing/accessory/solgov/department/command/army) - -/obj/item/clothing/under/solgov/utility/army/engineering - accessories = list(/obj/item/clothing/accessory/solgov/department/engineering/army) - -/obj/item/clothing/under/solgov/utility/army/security - accessories = list(/obj/item/clothing/accessory/solgov/department/security/army) - -/obj/item/clothing/under/solgov/utility/army/medical - accessories = list(/obj/item/clothing/accessory/solgov/department/medical/army) - -/obj/item/clothing/under/solgov/utility/army/medical/banded - accessories = list(/obj/item/clothing/accessory/solgov/department/medical/army, /obj/item/clothing/accessory/armband/medblue) - -/obj/item/clothing/under/solgov/utility/army/supply - accessories = list(/obj/item/clothing/accessory/solgov/department/supply/army) - -/obj/item/clothing/under/solgov/utility/army/service - accessories = list(/obj/item/clothing/accessory/solgov/department/service/army) - -/obj/item/clothing/under/solgov/utility/army/exploration - accessories = list(/obj/item/clothing/accessory/solgov/department/exploration/army) - -/obj/item/clothing/under/solgov/utility/army/urban - name = "navy marine fatigues" - desc = "A dark 'urban' version of the SCG Marine Corps utility uniform, made from durable material." - icon_state = "greyutility" - item_state = "gy_suit" - worn_state = "greyutility" - -/obj/item/clothing/under/solgov/utility/army/urban/command - accessories = list(/obj/item/clothing/accessory/solgov/department/command/army) - -/obj/item/clothing/under/solgov/utility/army/urban/engineering - accessories = list(/obj/item/clothing/accessory/solgov/department/engineering/army) - -/obj/item/clothing/under/solgov/utility/army/urban/security - accessories = list(/obj/item/clothing/accessory/solgov/department/security/army) - -/obj/item/clothing/under/solgov/utility/army/urban/medical - accessories = list(/obj/item/clothing/accessory/solgov/department/medical/army) - -/obj/item/clothing/under/solgov/utility/army/urban/medical/banded - accessories = list(/obj/item/clothing/accessory/solgov/department/medical/army, /obj/item/clothing/accessory/armband/medblue) - -/obj/item/clothing/under/solgov/utility/army/urban/supply - accessories = list(/obj/item/clothing/accessory/solgov/department/supply/army) - -/obj/item/clothing/under/solgov/utility/army/urban/service - accessories = list(/obj/item/clothing/accessory/solgov/department/service/army) - -/obj/item/clothing/under/solgov/utility/army/urban/exploration - accessories = list(/obj/item/clothing/accessory/solgov/department/exploration/army) - -/obj/item/clothing/under/solgov/utility/army/tan - name = "tan marine fatigues" - desc = "A tan version of the SCG Marine Corps utility uniform, made from durable material." - icon_state = "tanutility" - item_state = "johnny" - worn_state = "tanutility" - -/obj/item/clothing/under/solgov/utility/army/tan/command - accessories = list(/obj/item/clothing/accessory/solgov/department/command/army) - -/obj/item/clothing/under/solgov/utility/army/tan/engineering - accessories = list(/obj/item/clothing/accessory/solgov/department/engineering/army) - -/obj/item/clothing/under/solgov/utility/army/tan/security - accessories = list(/obj/item/clothing/accessory/solgov/department/security/army) - -/obj/item/clothing/under/solgov/utility/army/tan/medical - accessories = list(/obj/item/clothing/accessory/solgov/department/medical/army) - -/obj/item/clothing/under/solgov/utility/army/tan/medical/banded - accessories = list(/obj/item/clothing/accessory/solgov/department/medical/army, /obj/item/clothing/accessory/armband/medblue) - -/obj/item/clothing/under/solgov/utility/army/tan/supply - accessories = list(/obj/item/clothing/accessory/solgov/department/supply/army) - -/obj/item/clothing/under/solgov/utility/army/tan/service - accessories = list(/obj/item/clothing/accessory/solgov/department/service/army) - -/obj/item/clothing/under/solgov/utility/army/tan/exploration - accessories = list(/obj/item/clothing/accessory/solgov/department/exploration/army) - -//Service - -/obj/item/clothing/under/solgov/service - name = "service uniform" - desc = "A service uniform of some kind." - icon_state = "whiteservice" - worn_state = "whiteservice" - siemens_coefficient = 0.9 - -/obj/item/clothing/under/solgov/service/expeditionary - name = "expeditionary service uniform" - desc = "The service uniform of the SCG Expeditionary Corps in silver trim." - icon_state = "greydress" - worn_state = "greydress" - sprite_sheets = list( - SPECIES_UNATHI = 'icons/mob/species/unathi/onmob_under_unathi.dmi' - ) - -/obj/item/clothing/under/solgov/service/expeditionary/engineering - -/obj/item/clothing/under/solgov/service/expeditionary/security - -/obj/item/clothing/under/solgov/service/expeditionary/medical - -/obj/item/clothing/under/solgov/service/expeditionary/supply - -/obj/item/clothing/under/solgov/service/expeditionary/service - -/obj/item/clothing/under/solgov/service/expeditionary/exploration - -/obj/item/clothing/under/solgov/service/expeditionary/research - -/obj/item/clothing/under/solgov/service/expeditionary/skirt - name = "expeditionary service skirt" - desc = "A feminine version of the SCG Expeditionary Corps service uniform in silver trim." - icon_state = "greydressfem" - worn_state = "greydressfem" - -/obj/item/clothing/under/solgov/service/expeditionary/skirt/engineering - -/obj/item/clothing/under/solgov/service/expeditionary/skirt/security - -/obj/item/clothing/under/solgov/service/expeditionary/skirt/medical - -/obj/item/clothing/under/solgov/service/expeditionary/skirt/supply - -/obj/item/clothing/under/solgov/service/expeditionary/skirt/service - -/obj/item/clothing/under/solgov/service/expeditionary/skirt/exploration - -/obj/item/clothing/under/solgov/service/expeditionary/skirt/research - -/obj/item/clothing/under/solgov/service/expeditionary/command - name = "expeditionary officer's service uniform" - desc = "The service uniform of the SCG Expeditionary Corps in gold trim." - icon_state = "greydress_com" - worn_state = "greydress_com" -/obj/item/clothing/under/solgov/service/expeditionary/command/command - accessories = list(/obj/item/clothing/accessory/solgov/department/command/jumper) - -/obj/item/clothing/under/solgov/service/expeditionary/command/engineering - -/obj/item/clothing/under/solgov/service/expeditionary/command/security - -/obj/item/clothing/under/solgov/service/expeditionary/command/medical - -/obj/item/clothing/under/solgov/service/expeditionary/command/supply - -/obj/item/clothing/under/solgov/service/expeditionary/command/service - -/obj/item/clothing/under/solgov/service/expeditionary/command/exploration - -/obj/item/clothing/under/solgov/service/expeditionary/command/research - -/obj/item/clothing/under/solgov/service/expeditionary/command/skirt - name = "expeditionary officer's service skirt" - desc = "A feminine version of the SCG Expeditionary Corps service uniform in gold trim." - icon_state = "greydressfem_com" - worn_state = "greydressfem_com" - -/obj/item/clothing/under/solgov/service/expeditionary/command/skirt/command - accessories = list(/obj/item/clothing/accessory/solgov/department/command/jumper) - -/obj/item/clothing/under/solgov/service/expeditionary/command/skirt/engineering - -/obj/item/clothing/under/solgov/service/expeditionary/command/skirt/security - -/obj/item/clothing/under/solgov/service/expeditionary/command/skirt/medical - -/obj/item/clothing/under/solgov/service/expeditionary/command/skirt/supply - -/obj/item/clothing/under/solgov/service/expeditionary/command/skirt/service - -/obj/item/clothing/under/solgov/service/expeditionary/command/skirt/exploration - -/obj/item/clothing/under/solgov/service/expeditionary/command/skirt/research - -/obj/item/clothing/under/solgov/service/fleet - name = "fleet service uniform" - desc = "The service uniform of the SCG Fleet, made from immaculate white fabric." - icon_state = "whiteservice" - item_state = "nursesuit" - worn_state = "whiteservice" - accessories = list(/obj/item/clothing/accessory/navy) - -/obj/item/clothing/under/solgov/service/fleet/skirt - name = "fleet service skirt" - desc = "The service uniform skirt of the SCG Fleet, made from immaculate white fabric." - icon_state = "whiteservicefem" - worn_state = "whiteservicefem" - -/obj/item/clothing/under/solgov/service/army - name = "marine service uniform" - desc = "The service uniform of the SCG Marine Corps. Slimming." - icon_state = "greenservice" - item_state = "johnny" - worn_state = "greenservice" - accessories = list(/obj/item/clothing/accessory/brown) - -/obj/item/clothing/under/solgov/service/army/skirt - name = "marine service skirt" - desc = "The service uniform skirt of the SCG Marine Corps. Slimming." - icon_state = "greenservicefem" - worn_state = "greenservicefem" - -/obj/item/clothing/under/solgov/service/army/command - name = "marine officer's service uniform" - desc = "The service uniform of the SCG Marine Corps. Slimming and stylish." - icon_state = "greenservice_com" - item_state = "johnny" - worn_state = "greenservice_com" - accessories = list(/obj/item/clothing/accessory/brown) - -/obj/item/clothing/under/solgov/service/army/command/skirt - name = "marine officer's service skirt" - desc = "The service uniform skirt of the SCG Marine Corps. Slimming and stylish." - icon_state = "greenservicefem_com" - worn_state = "greenservicefem_com" - -//Dress -/obj/item/clothing/under/solgov/mildress - name = "dress uniform" - desc = "A dress uniform of some kind." - icon_state = "greydress" - worn_state = "greydress" - siemens_coefficient = 0.9 - -/obj/item/clothing/under/solgov/mildress/army - name = "marine dress uniform" - desc = "The dress uniform of the SCG Marine Corps, class given form." - icon_state = "blackdress" - worn_state = "blackdress" - -/obj/item/clothing/under/solgov/mildress/army/skirt - name = "marine dress skirt" - desc = "A feminine version of the SCG Marine Corps dress uniform, class given form." - icon_state = "blackdressfem" - worn_state = "blackdressfem" - -/obj/item/clothing/under/solgov/mildress/army/command - name = "marine officer's dress uniform" - desc = "The dress uniform of the SCG Marine Corps, even classier in gold." - icon_state = "blackdress" - worn_state = "blackdress_com" - -/obj/item/clothing/under/solgov/mildress/army/command/skirt - name = "marine officer's dress skirt" - desc = "A feminine version of the SCG Marine Corps dress uniform, even classier in gold." - icon_state = "blackdressfem" - worn_state = "blackdressfem_com" - -//dress - -/obj/item/clothing/under/solgov/dress/expeditionary - name = "expeditionary dress uniform" - desc = "The dress uniform of the SCG Expeditionary Corps in silver trim." - icon_state = "greydress" - worn_state = "greydress" - sprite_sheets = list( - SPECIES_UNATHI = 'icons/mob/species/unathi/onmob_under_unathi.dmi' - ) - -/obj/item/clothing/under/solgov/dress/expeditionary/engineering - -/obj/item/clothing/under/solgov/dress/expeditionary/security - -/obj/item/clothing/under/solgov/dress/expeditionary/medical - -/obj/item/clothing/under/solgov/dress/expeditionary/supply - -/obj/item/clothing/under/solgov/dress/expeditionary/service - -/obj/item/clothing/under/solgov/dress/expeditionary/exploration - -/obj/item/clothing/under/solgov/dress/expeditionary/research - -/obj/item/clothing/under/solgov/dress/expeditionary/skirt - name = "expeditionary dress skirt" - desc = "A feminine version of the SCG Expeditionary Corps dress uniform in silver trim." - icon_state = "greydressfem" - worn_state = "greydressfem" - -/obj/item/clothing/under/solgov/dress/expeditionary/skirt/engineering - -/obj/item/clothing/under/solgov/dress/expeditionary/skirt/security - -/obj/item/clothing/under/solgov/dress/expeditionary/skirt/medical - -/obj/item/clothing/under/solgov/dress/expeditionary/skirt/supply - -/obj/item/clothing/under/solgov/dress/expeditionary/skirt/service - -/obj/item/clothing/under/solgov/dress/expeditionary/skirt/exploration - -/obj/item/clothing/under/solgov/dress/expeditionary/skirt/research - -/obj/item/clothing/under/solgov/dress/expeditionary/command - name = "expeditionary officer's dress uniform" - desc = "The dress uniform of the SCG Expeditionary Corps in gold trim." - icon_state = "greydress_com" - worn_state = "greydress_com" - -/obj/item/clothing/under/solgov/dress/expeditionary/command/engineering - -/obj/item/clothing/under/solgov/dress/expeditionary/command/security - -/obj/item/clothing/under/solgov/dress/expeditionary/command/medical - -/obj/item/clothing/under/solgov/dress/expeditionary/command/supply - -/obj/item/clothing/under/solgov/dress/expeditionary/command/service - -/obj/item/clothing/under/solgov/dress/expeditionary/command/exploration - -/obj/item/clothing/under/solgov/dress/expeditionary/command/research - -/obj/item/clothing/under/solgov/dress/expeditionary/command/skirt - name = "expeditionary officer's dress skirt" - desc = "A feminine version of the SCG Expeditionary Corps dress uniform in gold trim." - icon_state = "greydressfem_com" - worn_state = "greydressfem_com" - -/obj/item/clothing/under/solgov/dress/expeditionary/command/skirt/engineering - -/obj/item/clothing/under/solgov/dress/expeditionary/command/skirt/security - -/obj/item/clothing/under/solgov/dress/expeditionary/command/skirt/medical - -/obj/item/clothing/under/solgov/dress/expeditionary/command/skirt/supply - -/obj/item/clothing/under/solgov/dress/expeditionary/command/skirt/service - -/obj/item/clothing/under/solgov/dress/expeditionary/command/skirt/exploration - -/obj/item/clothing/under/solgov/dress/expeditionary/command/skirt/research - -//misc garbage -/obj/item/clothing/under/rank/internalaffairs/plain/solgov - desc = "A plain shirt and pair of pressed black pants." - name = "formal outfit" - accessories = list(/obj/item/clothing/accessory/blue_clip) - -/obj/item/clothing/under/solgov/utility/expeditionary/monkey - name = "adjusted expeditionary uniform" - desc = "The utility uniform of the SCG Expeditionary Corps, made from biohazard resistant material. This one has silver trim. It was also mangled to fit a monkey. This better be worth the NJP you'll get for making it." - species_restricted = list(SPECIES_MONKEY) - sprite_sheets = list("Monkey" = 'icons/mob/species/monkey/onmob_under_monkey.dmi') - accessories = list(/obj/item/clothing/accessory/solgov/rank/fleet/officer/wo1_monkey) diff --git a/maps/torch/items/encryption_keys.dm b/maps/torch/items/encryption_keys.dm deleted file mode 100644 index e22c62b665206..0000000000000 --- a/maps/torch/items/encryption_keys.dm +++ /dev/null @@ -1,141 +0,0 @@ -/obj/item/device/encryptionkey/heads/torchexec - name = "executive encryption key" - icon_state = "cap_cypherkey" - channels = list("Command" = 1, "Security" = 1, "Engineering" = 1, "Science" = 1, "Medical" = 1, "Supply" = 1, "Service" = 1, "Exploration" = 1, "Hailing" = 1) - -/obj/item/device/encryptionkey/science - name = "science radio encryption key" - icon_state = "nt_cypherkey" - channels = list("Science" = 1, "Exploration" = 1) - -/obj/item/device/encryptionkey/headset_torchrd - name = "chief science officer radio encryption key" - icon_state = "nt_cypherkey" - channels = list("Science" = 1, "Command" = 1, "Exploration" = 1, "Hailing" = 1) - -/obj/item/device/encryptionkey/headset_torchcorp - name = "corporate radio encryption key" - icon_state = "nt_cypherkey" - channels = list("Service" = 1) - -/obj/item/device/encryptionkey/headset_research_guard - name = "research_guard's encryption key" - icon_state = "nt_cypherkey" - channels = list("Science" = 1) - -/obj/item/device/encryptionkey/headset_modsci - name = "medical science encryption key" - icon_state = "nt_cypherkey" - channels = list("Science" = 1, "Medical" = 1) - -/obj/item/device/encryptionkey/headset_torchcl - name = "corporate liaison radio encryption key" - icon_state = "nt_cypherkey" - channels = list("Service" = 1, "Command" = 1, "Hailing" = 1) - -/obj/item/device/encryptionkey/headset_deckofficer - name = "deck chief's encryption key" - icon_state = "qm_cypherkey" - channels = list("Supply" = 1, "Command" = 1, "Exploration" = 1, "Hailing" = 1) - -/obj/item/device/encryptionkey/bridgeofficer - name = "bridge officer's encryption key" - icon_state = "com_cypherkey" - channels = list("Command" = 1, "Engineering" = 1, "Exploration" = 1, "Supply" = 1, "Service" = 1, "Science" = 1, "Hailing" = 1) - -/obj/item/device/encryptionkey/heads/ai_integrated - name = "ai integrated encryption key" - desc = "Integrated encryption key." - icon_state = "cap_cypherkey" - channels = list("Command" = 1, "Security" = 1, "Engineering" = 1, "Science" = 1, "Medical" = 1, "Supply" = 1, "Service" = 1, "Exploration" = 1, "AI Private" = 1, "Hailing" = 1) - -/obj/item/device/encryptionkey/exploration - name = "exploration radio encryption key" - icon_state = "srv_cypherkey" - channels = list("Exploration" = 1, "Hailing" = 1) - -/obj/item/device/encryptionkey/headset_expedition_medic - name = "exploration medic's encryption key" - icon_state = "srv_cypherkey" - channels = list("Exploration" = 1, "Hailing" = 1, "Medical" = 1) - -/obj/item/device/encryptionkey/headset_expedition_engineer - name = "exploration engineer's encryption key" - icon_state = "srv_cypherkey" - channels = list("Exploration" = 1, "Hailing" = 1, "Engineering" = 1) - -/obj/item/device/encryptionkey/headset_pilot - name = "pilot radio encryption key" - icon_state = "srv_cypherkey" - channels = list("Exploration" = 1, "Supply" = 1, "Science" = 1, "Hailing" = 1) - -/obj/item/device/encryptionkey/headset_mining - name = "prospector radio encryption key" - icon_state = "srv_cypherkey" - channels = list("Supply" = 1, "Exploration" = 1) - -/obj/item/storage/box/encryptionkey/exploration - name = "box of spare exploration radio keys" - desc = "A box full of exploration department radio keys." - startswith = list(/obj/item/screwdriver, /obj/item/device/encryptionkey/exploration = 5) - -/obj/item/device/encryptionkey/pathfinder - name = "pathfinder's encryption key" - icon_state = "com_cypherkey" - channels = list("Exploration" = 1, "Command" = 1, "Science" = 1, "Hailing" = 1) - -/obj/item/storage/box/radiokeys - name = "box of radio encryption keys" - desc = "A box full of assorted encryption keys." - startswith = list(/obj/item/device/encryptionkey/headset_sec = 5, - /obj/item/device/encryptionkey/headset_med = 5, - /obj/item/device/encryptionkey/headset_cargo = 5, - /obj/item/device/encryptionkey/headset_sci = 5) - -/obj/item/storage/box/radiokeys/Initialize() - . = ..() - make_exact_fit() - -/obj/item/device/encryptionkey/heads/sea - name = "senior enlisted advisor's encryption key" - icon_state = "com_cypherkey" - channels = list("Command" = 1, "Security" = 1, "Engineering" = 1, "Medical" = 1, "Supply" = 1, "Service" = 1, "Exploration" = 1, "Hailing" = 1) - - -///////////Boxes with radiokeys/////////// //by proxima - - -/obj/item/storage/box/encryptionkey/command - name = "box of spare command radio keys" - desc = "A box full of command department radio keys." - startswith = list(/obj/item/screwdriver, /obj/item/device/encryptionkey/headset_com = 5) - -/obj/item/storage/box/encryptionkey/security - name = "box of spare security radio keys" - desc = "A box full of security department radio keys." - startswith = list(/obj/item/screwdriver, /obj/item/device/encryptionkey/headset_sec = 5) - -/obj/item/storage/box/encryptionkey/engineering - name = "box of spare engineering radio keys" - desc = "A box full of engineering department radio keys." - startswith = list(/obj/item/screwdriver, /obj/item/device/encryptionkey/headset_eng = 5) - -/obj/item/storage/box/encryptionkey/science - name = "box of spare science radio keys" - desc = "A box full of science department radio keys." - startswith = list(/obj/item/screwdriver, /obj/item/device/encryptionkey/headset_sci = 5) - -/obj/item/storage/box/encryptionkey/medical - name = "box of spare medical radio keys" - desc = "A box full of medical department radio keys." - startswith = list(/obj/item/screwdriver, /obj/item/device/encryptionkey/headset_med = 5) - -/obj/item/storage/box/encryptionkey/supply - name = "box of spare supply radio keys" - desc = "A box full of supply department radio keys." - startswith = list(/obj/item/screwdriver, /obj/item/device/encryptionkey/headset_cargo = 5) - -/obj/item/storage/box/encryptionkey/service - name = "box of spare service radio keys" - desc = "A box full of service department radio keys." - startswith = list(/obj/item/screwdriver, /obj/item/device/encryptionkey/headset_service = 5) diff --git a/maps/torch/items/explo_shotgun.dm b/maps/torch/items/explo_shotgun.dm deleted file mode 100644 index 4686d35df2a0e..0000000000000 --- a/maps/torch/items/explo_shotgun.dm +++ /dev/null @@ -1,178 +0,0 @@ -/obj/item/gun/projectile/shotgun/pump/exploration - name = "ballistic launcher" - desc = "As the user's handbook will tell you, the Xynergy XP-3 is /not/ a shotgun, it just launches payloads of same caliber at high speed towards targets. Nicknamed 'Boomstick' for the way it behaves when full-power ammunition is loaded." - icon = 'maps/torch/icons/obj/explshotgun.dmi' - icon_state = "expshotgun0" - starts_loaded = 0 - req_access = list(access_hop) - authorized_modes = list(UNAUTHORIZED) - init_firemodes = list( - list(mode_name="fire"), - ) - var/explosion_chance = 50 - var/obj/item/pipe/reinforced - -/obj/item/gun/projectile/shotgun/pump/get_mechanics_info() - . = ..() - . += "
              This gun will be allowed to fire freely once off-ship, otherwise needs to be authorized by XO. \ -
              While you can load this gun with lethal ammo, there's a considerable risk of explosion when fired." - -/obj/item/gun/projectile/shotgun/pump/exploration/get_antag_info() - . = ..() - . += "
              You can reinforce the barrel with a simple pipe, lowering chance of explosion to 1 in 10.
              " - -/obj/item/gun/projectile/shotgun/pump/exploration/on_update_icon() - ..() - if(!reinforced) - icon_state = "expshotgun[!!chambered]" - else - icon_state = "ghettexpshotgun[!!chambered]" - -/obj/item/gun/projectile/shotgun/pump/exploration/Destroy() - QDEL_NULL(reinforced) - . = ..() - -/obj/item/gun/projectile/shotgun/pump/exploration/free_fire() - var/my_z = get_z(src) - if(!GLOB.using_map.station_levels.Find(my_z)) - return TRUE - return ..() - -/obj/item/gun/projectile/shotgun/pump/exploration/attackby(obj/item/I, mob/user) - if(!reinforced && istype(I, /obj/item/pipe) && user.unEquip(I, src)) - reinforced = I - to_chat(user, SPAN_WARNING("You reinforce \the [src] with \the [reinforced].")) - playsound(src, 'sound/effects/tape.ogg',25) - explosion_chance = 10 - bulk = bulk + 4 - update_icon() - return 1 - if(reinforced && isWirecutter(I)) - to_chat(user, SPAN_WARNING("You remove \the [reinforced] that was reinforcing \the [src].")) - playsound(src.loc, 'sound/items/Wirecutter.ogg', 25, 1) - reinforced.dropInto(loc) - reinforced = null - explosion_chance = initial(explosion_chance) - bulk = initial(bulk) - update_icon() - return 1 - return ..() - -/obj/item/gun/projectile/shotgun/pump/exploration/special_check() - if(chambered && chambered.BB && prob(explosion_chance)) - var/damage = chambered.BB.get_structure_damage() - if(istype(chambered.BB, /obj/item/projectile/bullet/pellet)) - var/obj/item/projectile/bullet/pellet/PP = chambered.BB - damage = PP.damage*PP.pellets - if(damage > 30) - var/mob/living/carbon/C = loc - if(istype(loc)) - C.visible_message("[src] explodes in [C]'s hands!", "[src] explodes in your face!") - C.drop_from_inventory(src) - if(reinforced) - reinforced.dropInto(loc) - reinforced.throw_at(C, 2, 10) - reinforced = null - for(var/zone in list(BP_L_HAND, BP_R_HAND, BP_HEAD)) - C.apply_damage(rand(10,20), def_zone=zone) - else - visible_message("[src] explodes!") - explosion(get_turf(src), -1, -1, 1) - qdel(src) - return FALSE - return ..() - -/obj/item/ammo_magazine/shotholder/net - name = "net shell holder" - ammo_type = /obj/item/ammo_casing/shotgun/net - matter = list(MATERIAL_STEEL = 720) - marking_color = COLOR_PALE_PURPLE_GRAY - -/obj/item/ammo_casing/shotgun/net - name = "net shell" - desc = "A net shell." - icon_state = "netshell" - projectile_type = /obj/item/projectile/bullet/shotgun/beanbag/net - matter = list(MATERIAL_STEEL = 180) - -/obj/item/projectile/bullet/shotgun/beanbag/net - name = "netshell" - damage = 5 - agony = 10 - -/obj/item/projectile/bullet/shotgun/beanbag/net/on_hit(var/atom/target, var/blocked = 0, var/def_zone = null) - var/obj/item/energy_net/safari/net = new(loc) - net.try_capture_mob(target) - return TRUE - -/obj/item/storage/box/ammo/explo_shells - name = "box of utility shells" - startswith = list(/obj/item/ammo_magazine/shotholder/beanbag = 1, - /obj/item/ammo_magazine/shotholder/net = 1, - /obj/item/ammo_magazine/shotholder/flash = 1) - -/obj/structure/closet/secure_closet/explo_gun - name = "gun locker" - desc = "Wall locker holding the boomstick." - req_access = list(access_expedition_shuttle_helm) - closet_appearance = /decl/closet_appearance/wall/explo_gun - density = FALSE - anchored = TRUE - wall_mounted = TRUE - storage_types = CLOSET_STORAGE_ITEMS - -/obj/structure/closet/secure_closet/explo_gun/WillContain() - return list( - /obj/item/storage/box/ammo/explo_shells = 3, - /obj/item/gun/projectile/shotgun/pump/exploration - ) - -/obj/structure/closet/secure_closet/explo_gun/kasatka - desc = "A newly bolted box with the latest development from Nanotrasen" - closet_appearance = /decl/closet_appearance/wall/explo_gun_kasatka - -/obj/structure/closet/secure_closet/explo_gun/kasatka/WillContain() - return list( - /obj/item/cell/guncell/medium = 6, - /obj/item/gun/energy/k342/explo = 2 - ) - -/decl/closet_appearance/wall/explo_gun_kasatka - color = COLOR_WHITE - decals = null - can_lock = 1 - extra_decals = list( - "stripe_outer" = COLOR_PURPLE - ) - -/decl/closet_appearance/wall/explo_gun - color = COLOR_GRAY20 - decals = null - can_lock = 1 - extra_decals = list( - "stripe_outer" = COLOR_PURPLE - ) - -//proxima code start -/obj/item/gun/energy/k342/explo - desc = "K342E Kasatka is the latest plasma weapon created by NanoTrasen. This modification has been designed for Sol Central Government Expeditionary Corps and can fire several types of charges: stunning, lethal and net-mode." - icon_state = "kasatka_off" - item_state = "kasatka" - req_access = list(list("ACCESS_TORCH_EXPLORER")) - wielded_item_state = "kasatka-wielded" - authorized_modes = list(UNAUTHORIZED, UNAUTHORIZED, UNAUTHORIZED) - init_firemodes = list( - list(mode_name="stun charge", projectile_type=/obj/item/projectile/plasma/stun, charge_cost=20, fire_delay=4, projectile_color=COLOR_YELLOW), - list(mode_name="plasma charge", projectile_type=/obj/item/projectile/plasma, charge_cost=20, fire_delay=4, projectile_color=COLOR_BLUE_LIGHT), - list(mode_name="net charge", projectile_type=/obj/item/projectile/plasma/stun/net, charge_cost=150, fire_delay=20, projectile_color=COLOR_GREEN) - ) - -/obj/item/gun/energy/k342/explo/free_fire() - var/my_z = get_z(src) - if(!list_find(GLOB.using_map.station_levels, my_z)) - return TRUE - return ..() - -/obj/item/gun/energy/k342/explo/prereg - authorized_modes = list(AUTHORIZED, AUTHORIZED, ALWAYS_AUTHORIZED) -//proxima code end diff --git a/maps/torch/items/headsets.dm b/maps/torch/items/headsets.dm deleted file mode 100644 index 8587cf11b3c4b..0000000000000 --- a/maps/torch/items/headsets.dm +++ /dev/null @@ -1,223 +0,0 @@ -/obj/item/device/radio/headset/science - name = "research headset" - desc = "A headset for researchers." - icon_state = "sci_headset" - item_state = "headset" - ks1type = /obj/item/device/encryptionkey/science - -/obj/item/device/radio/headset/science/alt - name = "research headset" - desc = "A headset for researchers." - icon_state = "sci_headset_alt" - item_state = "sci_headset_alt" - -/obj/item/device/radio/headset/heads/torchexec - name = "executive headset" - desc = "The headset of those brave men and women who command the Torch." - icon_state = "com_headset" - item_state = "headset" - ks1type = /obj/item/device/encryptionkey/heads/torchexec - -/obj/item/device/radio/headset/heads/torchexec/alt - name = "executive bowman headset" - icon_state = "com_headset_alt" - item_state = "com_headset_alt" - -/obj/item/device/radio/headset/heads/torchcorp - name = "corporate headset" - desc = "Headset of the servants to the corporate overlords." - icon_state = "nt_headset" - item_state = "headset" - ks1type = /obj/item/device/encryptionkey/headset_torchcorp - -/obj/item/device/radio/headset/heads/torchcorp/alt - name = "corporate bowman headset" - icon_state = "nt_headset_alt" - item_state = "nt_headset_alt" - -/obj/item/device/radio/headset/heads/torchntcommand - name = "corporate command headset" - desc = "Headset of the corporate overlords." - icon_state = "nt_headset" - item_state = "headset" - ks1type = /obj/item/device/encryptionkey/headset_torchcl - -/obj/item/device/radio/headset/heads/torchntcommand/alt - name = "corporate command bowman headset" - icon_state = "nt_headset_alt" - item_state = "nt_headset_alt" - -/obj/item/device/radio/headset/heads/torchntdirector - name = "chief science officer headset" - desc = "Headset of the masters of the universe." - icon_state = "com_headset" - item_state = "headset" - ks1type = /obj/item/device/encryptionkey/headset_torchrd - -/obj/item/device/radio/headset/heads/torchntdirector/alt - name = "chief science officer's bowman headset" - icon_state = "com_headset_alt" - item_state = "com_headset_alt" - -/obj/item/device/radio/headset/heads/torchntcommand/alt - name = "corporate command bowman headset" - icon_state = "nt_headset_alt" - item_state = "nt_headset_alt" - -/obj/item/device/radio/headset/heads/cos - name = "chief of security's headset" - desc = "The headset of the man who protects your worthless lives." - icon_state = "com_headset" - item_state = "headset" - ks1type = /obj/item/device/encryptionkey/heads/hos - -/obj/item/device/radio/headset/heads/cos/alt - name = "chief of security's bowman headset" - icon_state = "com_headset_alt" - item_state = "com_headset_alt" - -/obj/item/device/radio/headset/headset_deckofficer - name = "deck chief's radio headset" - desc = "The headset of the chief box pusher." - icon_state = "cargo_headset" - item_state = "headset" - ks1type = /obj/item/device/encryptionkey/headset_deckofficer - -/obj/item/device/radio/headset/headset_deckofficer/alt - name = "deck chief's bowman headset" - item_state = "cargo_headset_alt" - icon_state = "cargo_headset_alt" - max_keys = 3 - -/obj/item/device/radio/headset/sea - name = "senior enlisted advisor's headset" - desc = "A headset for the guy or gal who advises the enlisted whilst from a position of seniority." - icon_state = "com_headset" - item_state = "headset" - ks1type = /obj/item/device/encryptionkey/heads/sea - -/obj/item/device/radio/headset/sea/alt - name = "senior enlisted advisor's bowman headset" - icon_state = "com_headset_alt" - item_state = "com_headset_alt" - -/obj/item/device/radio/headset/bridgeofficer - name = "bridge officer's headset" - desc = "A headset with access to the command, engineering and exploration channels." - icon_state = "com_headset" - item_state = "headset" - ks1type = /obj/item/device/encryptionkey/bridgeofficer - -/obj/item/device/radio/headset/bridgeofficer/alt - name = "bridge officer's bowman headset" - icon_state = "com_headset_alt" - item_state = "com_headset_alt" - max_keys = 4 - -/obj/item/device/radio/headset/exploration - name = "exploration headset" - desc = "A headset with access to the exploration channel. It has an inbuilt subspace antenna for better reception." - icon_state = "exp_headset" - item_state = "headset" - ks1type = /obj/item/device/encryptionkey/exploration - -/obj/item/device/radio/headset/exploration/alt - name = "exploration bowman headset" - icon_state = "exp_headset_alt" - item_state = "exp_headset_alt" - -/obj/item/device/radio/headset/pathfinder - name = "pathfinder's headset" - desc = "A headset with access to the command and exploration channels. It has an inbuilt subspace antenna for better reception." - icon_state = "exp_headset" - item_state = "headset" - ks1type = /obj/item/device/encryptionkey/pathfinder - -/obj/item/device/radio/headset/pathfinder/alt - name = "pathfinder's bowman headset" - icon_state = "exp_headset_alt" - item_state = "exp_headset_alt" - -/obj/item/device/radio/headset/headset_cargo - desc = "A headset used by the Deck Chief and his slaves." - -/obj/item/device/radio/headset/headset_cargo/alt - desc = "A bowman headset used by the Deck Chief and his slaves." - -/obj/item/device/radio/headset/headset_corpsman - name = "medical headset" - desc = "A headset to yell into while patching open wounds. It has an inbuilt subspace antenna for better reception." - icon_state = "par_headset" - item_state = "headset" - ks1type = /obj/item/device/encryptionkey/headset_med - -/obj/item/device/radio/headset/headset_corpsman/alt - name = "medical bowman headset" - icon_state = "par_headset_alt" - item_state = "par_headset_alt" - -/obj/item/device/radio/headset/headset_pilot - name = "pilot's headset" - desc = "A headset for cool-tempered smugglers, cocky flyboys, and bus-drivers like you. It has an inbuilt subspace antenna for better reception." - icon_state = "pilot_headset" - item_state = "headset" - ks1type = /obj/item/device/encryptionkey/headset_pilot - -/obj/item/device/radio/headset/headset_pilot/alt - name = "pilot's bowman headset" - icon_state = "pilot_headset_alt" - item_state = "pilot_headset_alt" - -/obj/item/device/radio/headset/research_guard - name = "research guard's headset" - desc = "A headset of the servants to the corporate overlords." - icon_state = "nt_headset" - item_state = "headset" - ks1type = /obj/item/device/encryptionkey/headset_research_guard - -/obj/item/device/radio/headset/research_guard/alt - name = "research guard's bowman headset" - icon_state = "nt_headset_alt" - item_state = "nt_headset_alt" - -/obj/item/device/radio/headset/expmed - name = "expedition medic's headset" - desc = "A headset for a one to bossy over medical dummies." - icon_state = "par_headset" - item_state = "headset" - ks1type = /obj/item/device/encryptionkey/headset_expedition_medic - -/obj/item/device/radio/headset/expmed/alt - name = "expedition medic's bowman headset" - icon_state = "par_headset_alt" - item_state = "headset_alt" - -/obj/item/device/radio/headset/expeng - name = "expedition engineer's headset" - desc = "A headset for a one to bossy over engineering dummies." - icon_state = "par_headset" - item_state = "headset" - ks1type = /obj/item/device/encryptionkey/headset_expedition_engineer - -/obj/item/device/radio/headset/expeng/alt - name = "expedition engineer's bowman headset" - icon_state = "par_headset_alt" - item_state = "headset_alt" - -/obj/item/device/radio/headset/headset_medsci - name = "medical scientific headset" - desc = "A headset to to tell how you lost your medical license." - icon_state = "par_headset" - item_state = "headset" - ks1type = /obj/item/device/encryptionkey/headset_modsci - -/obj/item/device/radio/headset/headset_medsci/alt - name = "medical scientific bowman headset" - icon_state = "par_headset_alt" - item_state = "par_headset_alt" - -/obj/item/device/radio/headset/heads/torchexec/synth - name = "Synth's headset" - desc = "A headset issued to abroad's EXO Synth Unit." - icon_state = "nt_headset" - item_state = "headset" diff --git a/maps/torch/items/items.dm b/maps/torch/items/items.dm deleted file mode 100644 index 427fa1f8b3211..0000000000000 --- a/maps/torch/items/items.dm +++ /dev/null @@ -1,133 +0,0 @@ -/******************* -Random item spawning -*******************/ - -/obj/random/solgov - name = "random solgov equipment" - desc = "This is a random piece of solgov equipment or clothing." - icon = 'maps/torch/icons/obj/obj_head_solgov.dmi' - icon_state = "solsoft" - -/obj/random/solgov/spawn_choices() - return list(/obj/item/clothing/head/solgov/utility/fleet = 4, - /obj/item/clothing/head/soft/solgov/expedition = 2, - /obj/item/clothing/head/soft/solgov/fleet = 4, - /obj/item/clothing/head/helmet/solgov = 1, - /obj/item/clothing/suit/storage/vest/solgov = 2, - /obj/item/clothing/under/solgov/utility/expeditionary = 5, - /obj/item/clothing/under/solgov/utility/fleet = 3, - /obj/item/clothing/under/solgov/pt/expeditionary = 4, - /obj/item/clothing/under/solgov/pt/army = 4, - /obj/item/clothing/under/solgov/pt/fleet = 4 - ) - -/obj/random/maintenance/solgov - name = "random maintenance item" - desc = "This is a random maintenance item." - icon = 'icons/obj/items.dmi' - icon_state = "gift1" - -/obj/random/maintenance/solgov/spawn_choices() - return list(/obj/random/junk = 4, - /obj/random/trash = 4, - /obj/random/maintenance/solgov/clean = 5) - -/obj/random/maintenance/solgov/clean - name = "random maintenance item" - desc = "This is a random maintenance item." - icon = 'icons/obj/items.dmi' - icon_state = "gift2" - -/obj/random/maintenance/solgov/clean/spawn_choices() - return list(/obj/random/solgov = 3, - /obj/random/maintenance/clean = 800) - -/******************* -Torch specific items -*******************/ - -/obj/item/modular_computer/pda/explorer - icon_state = "pda-exp" - icon_state_unpowered = "pda-exp" - -/obj/item/modular_computer/pda/heads/hop - stored_pen = /obj/item/pen/multi/cmd/xo - -/obj/item/modular_computer/pda/captain - stored_pen = /obj/item/pen/multi/cmd/co - -/obj/item/storage/backpack/explorer - name = "explorer backpack" - desc = "A rugged backpack." - icon_state = "exppack" - item_state_slots = list( - slot_l_hand_str = "exppack", - slot_r_hand_str = "exppack", - ) - -/obj/item/storage/backpack/satchel/explorer - name = "explorer satchel" - desc = "A rugged satchel for field work." - icon_state = "satchel-exp" - item_state_slots = list( - slot_l_hand_str = "satchel-exp", - slot_r_hand_str = "satchel-exp", - ) - -/obj/item/storage/backpack/messenger/explorer - name = "explorer messenger bag" - desc = "A rugged backpack worn over one shoulder." - icon_state = "courierbagexp" - -/*********** -Unique items -***********/ - -/obj/item/pen/multi/cmd/xo - name = "executive officer's pen" - icon = 'maps/torch/icons/obj/uniques.dmi' - icon_state = "pen_xo" - desc = "A slightly bulky pen with a silvery case. Twisting the top allows you to switch the nib for different colors." - -/obj/item/pen/multi/cmd/co - name = "commanding officer's pen" - icon = 'maps/torch/icons/obj/uniques.dmi' - icon_state = "pen_co" - desc = "A slightly bulky pen with a golden case. Twisting the top allows you to switch the nib for different colors." - -/obj/item/pen/multi/cmd/attack_self(mob/user) - if(++selectedColor > 3) - selectedColor = 1 - colour = colors[selectedColor] - to_chat(user, "Changed color to '[colour].'") - -/****** -Weapons -******/ - -/obj/item/gun/projectile/revolver/medium/captain - name = "\improper Final Argument" - icon = 'maps/torch/icons/obj/uniques.dmi' - icon_state = "mosley" - desc = "A shiny al-Maliki & Mosley Autococker automatic revolver, with black accents. Marketed as the 'Revolver for the Modern Era'. This one has 'To the Captain of SEV Torch' engraved." - fire_delay = 5.7 //Autorevolver. Also synced with the animation - fire_anim = "mosley_fire" - origin_tech = list(TECH_COMBAT = 3, TECH_MATERIAL = 2) - starts_loaded = 0 //Nobody keeps ballistic weapons loaded - -/obj/item/gun/energy/stunrevolver/secure/nanotrasen - name = "corporate stun revolver" - desc = "This A&M X6 is fitted with an NT1019 chip which allows remote authorization of weapon functionality. It has a NanoTrasen logo on the grip." - req_access = list(list(access_brig, access_heads, access_rd, access_sec_guard)) - -/obj/item/gun/projectile/pistol/holdout/liaison - magazine_type = /obj/item/ammo_magazine/pistol/small/oneway - -/obj/item/ammo_magazine/pistol/small/oneway - initial_ammo = 1 - -/obj/effect/paint/hull - color = COLOR_SOL - -/obj/effect/paint/expeditionary - color = "#68099e" diff --git a/maps/torch/items/machinery.dm b/maps/torch/items/machinery.dm deleted file mode 100644 index f4d472ebb2fe9..0000000000000 --- a/maps/torch/items/machinery.dm +++ /dev/null @@ -1,145 +0,0 @@ -//Shouldn't be a lot in here, only torch versions of existing machines that need a different access req or something along those lines. - -/obj/machinery/vending/medical/torch - req_access = list(access_medical) - -/obj/machinery/drone_fabricator/torch - fabricator_tag = "SEV Torch Maintenance" - -/obj/machinery/drone_fabricator/torch/adv - name = "advanced drone fabricator" - fabricator_tag = "SFV Arrow Maintenance" - drone_type = /mob/living/silicon/robot/drone/construction - -//telecommunications gubbins for torch-specific networks - -/obj/machinery/telecomms/hub/preset - id = "Hub" - network = "tcommsat" - autolinkers = list("hub", "relay", "c_relay", "s_relay", "m_relay", "r_relay", "b_relay", "1_relay", "2_relay", "3_relay", "4_relay", "5_relay", "s_relay", "science", "medical", - "supply", "service", "common", "command", "engineering", "security", "exploration", "receiverA", "broadcasterA") - -/obj/machinery/telecomms/receiver/preset_right - freq_listening = list(AI_FREQ, SCI_FREQ, MED_FREQ, SUP_FREQ, SRV_FREQ, COMM_FREQ, ENG_FREQ, SEC_FREQ, ENT_FREQ, EXP_FREQ, MED_I_FREQ, SEC_I_FREQ) - -/obj/machinery/telecomms/bus/preset_two - freq_listening = list(SUP_FREQ, SRV_FREQ, EXP_FREQ) - autolinkers = list("processor2", "supply", "service", "exploration") - -/obj/machinery/telecomms/server/presets/service - id = "Service Server" - freq_listening = list(SRV_FREQ) - channel_tags = list( - list(SRV_FREQ, "Service", COMMS_COLOR_SERVICE), - ) - autolinkers = list("service") - -/obj/machinery/telecomms/server/presets/exploration - id = "Exploration Server" - freq_listening = list(EXP_FREQ) - channel_tags = list(list(EXP_FREQ, "Exploration", COMMS_COLOR_EXPLORER)) - autolinkers = list("exploration") - -// Suit cyclers and storage -/obj/machinery/suit_cycler/exploration - name = "Exploration suit cycler" - model_text = "Exploration" - req_access = list(access_explorer) - available_modifications = list(/decl/item_modifier/space_suit/explorer) - species = list(SPECIES_HUMAN,SPECIES_SKRELL,SPECIES_UNATHI) - -/obj/machinery/suit_storage_unit/explorer - name = "Exploration Voidsuit Storage Unit" - suit = /obj/item/clothing/suit/space/void/exploration - helmet = /obj/item/clothing/head/helmet/space/void/exploration - boots = /obj/item/clothing/shoes/magboots - tank = /obj/item/tank/oxygen - mask = /obj/item/clothing/mask/breath - req_access = list(access_explorer) - islocked = 1 - -/obj/machinery/suit_storage_unit/pilot - name = "Pilot Voidsuit Storage Unit" - suit = /obj/item/clothing/suit/space/void/pilot - helmet = /obj/item/clothing/head/helmet/space/void/pilot - boots = /obj/item/clothing/shoes/magboots - tank = /obj/item/tank/oxygen - mask = /obj/item/clothing/mask/breath - req_access = list(access_pilot) - islocked = 1 - -/obj/machinery/suit_storage_unit/command - name = "Command Voidsuit Storage Unit" - suit = /obj/item/clothing/suit/space/void/command - helmet = /obj/item/clothing/head/helmet/space/void/command - boots = /obj/item/clothing/shoes/magboots - tank = /obj/item/tank/oxygen - mask = /obj/item/clothing/mask/breath - req_access = list(access_bridge, access_keycard_auth) - islocked = 1 - -//EC Specs suits -/obj/machinery/suit_storage_unit/explorer/marine - name = "Marine Storage Unit" - suit = /obj/item/clothing/suit/space/void/security/alt/expo - helmet = /obj/item/clothing/head/helmet/space/void/security/alt/expo - boots = /obj/item/clothing/shoes/magboots - tank = /obj/item/tank/oxygen - mask = /obj/item/clothing/mask/breath - req_access = list(access_exploration_guard) - islocked = 1 - -/obj/machinery/suit_storage_unit/explorer/medic - name = "Exploration Medic Voidsuit Storage Unit" - suit = /obj/item/clothing/suit/space/void/medical/alt/sol/expo - helmet = /obj/item/clothing/head/helmet/space/void/medical/alt/sol/expo - boots = /obj/item/clothing/shoes/magboots - tank = /obj/item/tank/oxygen - mask = /obj/item/clothing/mask/breath - req_access = list(access_explorer) - islocked = 1 - -/obj/machinery/suit_storage_unit/explorer/engineer - name = "Exploration Engineer Voidsuit Storage Unit" - suit = /obj/item/clothing/suit/space/void/atmos/alt/sol/expo - helmet = /obj/item/clothing/head/helmet/space/void/atmos/alt/sol/expo - boots = /obj/item/clothing/shoes/magboots - tank = /obj/item/tank/oxygen - mask = /obj/item/clothing/mask/breath - req_access = list(access_explorer) - islocked = 1 - -// Vending machines & dispensers -/obj/machinery/vending/security - products = list( - /obj/item/handcuffs = 14, - /obj/item/grenade/flashbang = 4, - /obj/item/grenade/chem_grenade/teargas = 4, - /obj/item/device/flash = 7, - /obj/item/reagent_containers/spray/pepper = 4, - /obj/item/device/holowarrant = 4, - /obj/item/reagent_containers/food/snacks/donut/normal = 12, - /obj/item/storage/box/evidence = 8, - /obj/item/clothing/accessory/badge/solgov/security = 6) - -/obj/machinery/vending/medical/torch/synthetic - name = "EXO Synthetic's Medical vendor" - products = list( - /obj/item/clothing/under/sterile = 2, - /obj/item/clothing/suit/storage/toggle/labcoat/science = 1, - /obj/item/clothing/suit/storage/toggle/labcoat = 1, - /obj/item/storage/belt/medical/emt = 1, - /obj/item/device/scanner/health = 4, - /obj/item/clothing/glasses/hud/health = 2, - /obj/item/storage/box/gloves = 1, - /obj/item/storage/box/masks = 1, - /obj/item/storage/firstaid/adv = 1, - /obj/item/storage/firstaid/o2 = 1, - /obj/item/storage/firstaid/fire = 1, - /obj/item/storage/firstaid/regular = 1, - /obj/item/storage/firstaid/toxin = 1, - /obj/item/storage/firstaid/trauma = 1, - /obj/item/storage/firstaid/stab = 1, - /obj/item/storage/firstaid/surgery = 1, - ) - req_access = list(access_nanotrasen) diff --git a/maps/torch/items/manuals.dm b/maps/torch/items/manuals.dm deleted file mode 100644 index 249092085181b..0000000000000 --- a/maps/torch/items/manuals.dm +++ /dev/null @@ -1,144 +0,0 @@ -/obj/item/book/manual/solgov_law - name = "Sol Central Government Law" - desc = "A brief overview of SolGov Law." - icon_state = "bookSolGovLaw" - author = "The Sol Central Government" - title = "Sol Central Government Law" - -/obj/item/book/manual/solgov_law/Initialize() - . = ..() - dat = {" - - - - - - - - - - - "} - - -/obj/item/book/manual/military_law - name = "The Sol Code of Military Justice" - desc = "A brief overview of military law." - icon_state = "bookSolGovLaw" - author = "The Sol Central Government" - title = "The Sol Code of Military Justice" - -/obj/item/book/manual/military_law/Initialize() - . = ..() - dat = {" - - - - - - - - - - - "} - -/obj/item/book/manual/sol_sop - name = "Standard Operating Procedure" - desc = "SOP aboard the SEV Torch." - icon_state = "booksolregs" - author = "The Sol Central Government" - title = "Standard Operating Procedure" - -/obj/item/book/manual/sol_sop/Initialize() - . = ..() - dat = {" - - - - - - - - - - - "} - -/obj/item/folder/nt/rd - -/obj/item/folder/envelope/captain - desc = "A thick envelope. The SCG crest is stamped in the corner, along with 'TOP SECRET - TORCH UMBRA'." - -/obj/item/folder/envelope/captain/Initialize() - ..() - return INITIALIZE_HINT_LATELOAD - -/obj/item/folder/envelope/captain/LateInitialize() - ..() - var/obj/effect/overmap/visitable/torch = map_sectors["[z]"] - var/memo = {" -
              SECRET - CODE WORDS: TORCH -

              SOL CENTRAL GOVERNMENT EXPEDITIONARY COMMAND

              - -
              - FROM: ADM William Lau
              - TO: Commanding Officer of SEV Torch
              - SUBJECT: Standing Orders
              -
              - Captain.
              - Your orders are to visit the following star systems. Keep in mind that your supplies are limited; ration exploration time accordingly. -
            • [generate_system_name()]
            • -
            • [generate_system_name()]
            • -
            • [generate_system_name()]
            • -
            • [generate_system_name()]
            • -
            • [generate_system_name()]
            • -
            • [GLOB.using_map.system_name]
            • -
            • [generate_system_name()]
            • -
            • [generate_system_name()]
            • -
            • [generate_system_name()]
            • -
              - Priority targets are artifacts of uncontacted alien species and signal sources of unknown origin.
              - None of these systems are claimed by any entity recognized by the SCG, so you have full salvage rights on any derelicts discovered.
              - Investigate and mark any prospective colony worlds as per usual procedures.
              - There is no SCG presence in that area. In case of distress calls, you will be the only vessel available; do not ignore them. We cannot afford any more PR backlash.
              - The current docking code is: [torch.docking_codes]
              - Report all findings via bluespace comm buoys during inter-system jumps.
              - - ADM Lau.
              - This paper has been stamped with the stamp of SCG Expeditionary Command. - "} - new/obj/item/paper(src, memo, "Standing Orders") - new/obj/item/paper/umbra(src) - -/obj/item/folder/envelope/rep - desc = "A thick envelope. The SCG crest is stamped in the corner, along with 'TOP SECRET - TORCH UMBRA'." - -/obj/item/folder/envelope/rep/Initialize() - . = ..() - new/obj/item/paper/umbra(src) - -/obj/item/paper/umbra - name = "UMBRA Protocol" - info = {" -
              TOP SECRET - CODE WORDS: TORCH UMBRA -

              OFFICE OF THE SECRETARY GENERAL OF SOL CENTRAL GOVERNMENT

              - -
              - FROM: Johnathan Smitherson, Special Aide of the Secretary General
              - TO: Commanding Officer of the SEV Torch
              - CC: Special Representative aboard the SEV Torch
              - SUBJECT: UMBRA protocol
              -
              - This is a small addendum to the usual operating procedures. Unlike the rest of SOP, this is not left to the Commanding Officer's discretion and is mandatory. As unconventional as this is, we felt it is essential for smooth operation of this mission.
              - Procedure can be initiated only by transmission from SCG Expeditionary Command via secure channel. The sender may not introduce themselves, but you shouldn't have trouble confirming the transmission source, I believe.
              - The signal to initiate the procedure are codewords 'GOOD NIGHT WORLD' used in this order as one phrase. You do not need to send acknowledgement. -
            • Information about this expedition's findings is to be treated as secret and vital to SCG's national security, and is protected under codeword UMBRA. Only SCG government employees and Skrell citizens aboard the SEV Torch are allowed access to this information on a need-to-know basis.
            • -
            • The secrecy of this information is to be applied retroactively. Any non-cleared personnel who were exposed to such information are to be secured and transferred to DIA on arrival at home port.
            • -
            • Any devices capable of transmitting or receiving data at interstellar range are to be confiscated from private possession.
            • -
            • Disregard any systems remaining in your flight plan and set course for Sol, Neptune orbit. You will be contacted upon your arrival. Do not make stops in ports on the way unless absolutely necessary.
            • -
              - While drastic, I assure you this is a simple precaution, lest any issues. Just keep the option open, and carry on with your normal duties. - Regards, John.
              - This paper has been stamped with the stamp of Office of the General Secretary of SCG. - "} \ No newline at end of file diff --git a/maps/torch/items/mecha.dm b/maps/torch/items/mecha.dm deleted file mode 100644 index b4f5169e93a52..0000000000000 --- a/maps/torch/items/mecha.dm +++ /dev/null @@ -1,33 +0,0 @@ - -/mob/living/exosuit/premade/light/exploration - name = "exploration mech" - desc = "It looks a bit charred." - -/mob/living/exosuit/premade/light/exploration/Initialize() - if(!body) - body = new /obj/item/mech_component/chassis/pod(src) - body.color = COLOR_GUNMETAL - if(!legs) - legs = new /obj/item/mech_component/propulsion/tracks(src) - legs.color = COLOR_GUNMETAL - if(!arms) - arms = new /obj/item/mech_component/manipulators/powerloader(src) - arms.color = COLOR_PURPLE - - . = ..() - - //Damage it - var/list/parts = list(arms,legs,head,body) - var/obj/item/mech_component/damaged = pick(parts) - damaged.take_burn_damage((damaged.max_damage / 4 ) * MECH_COMPONENT_DAMAGE_DAMAGED) - if(prob(33)) - parts -= damaged - damaged = pick(parts) - damaged.take_burn_damage((damaged.max_damage / 4 ) * MECH_COMPONENT_DAMAGE_DAMAGED) - -/mob/living/exosuit/premade/light/exploration/spawn_mech_equipment() - install_system(new /obj/item/mech_equipment/light(src), HARDPOINT_HEAD) - install_system(new /obj/item/mech_equipment/clamp(src), HARDPOINT_RIGHT_HAND) - install_system(new /obj/item/mech_equipment/mounted_system/taser/plasma(src), HARDPOINT_LEFT_HAND) - install_system(new /obj/item/mech_equipment/ionjets(src), HARDPOINT_BACK) - \ No newline at end of file diff --git a/maps/torch/items/memos.dm b/maps/torch/items/memos.dm deleted file mode 100644 index e7e7e0e6dbc5c..0000000000000 --- a/maps/torch/items/memos.dm +++ /dev/null @@ -1,607 +0,0 @@ -//random memo spawners - -/obj/random/memo_scgr - name = "random scgr memo" - desc = "This may spawn one of the SCGR Memos." - icon = 'icons/obj/bureaucracy.dmi' - icon_state = "docs_generic" - spawn_nothing_percentage = 15 - -/obj/random/memo_scgr/spawn_choices() - return subtypesof(/obj/item/paper/memo/scgr) + subtypesof(/obj/item/paper/memo/generic) - -/obj/random/memo_command - name = "random command memo" - desc = "This may spawn one of the Command Memos." - icon = 'icons/obj/bureaucracy.dmi' - icon_state = "docs_generic" - spawn_nothing_percentage = 15 - -/obj/random/memo_command/spawn_choices() - return subtypesof(/obj/item/paper/memo/command) + subtypesof(/obj/item/paper/memo/generic) - -/obj/random/memo_supply - name = "random supply memo" - desc = "This may spawn one of the Supply Memos." - icon = 'icons/obj/bureaucracy.dmi' - icon_state = "docs_generic" - spawn_nothing_percentage = 15 - -/obj/random/memo_supply/spawn_choices() - return subtypesof(/obj/item/paper/memo/supply) + subtypesof(/obj/item/paper/memo/generic) - -/obj/random/memo_engineering - name = "random engineering memo" - desc = "This may spawn one of the Engineering Memos." - icon = 'icons/obj/bureaucracy.dmi' - icon_state = "docs_generic" - spawn_nothing_percentage = 15 - -/obj/random/memo_engineering/spawn_choices() - return subtypesof(/obj/item/paper/memo/engineering) + subtypesof(/obj/item/paper/memo/generic) - -/obj/random/memo_medical - name = "random medical memo" - desc = "This may spawn one of the Medical Memos." - icon = 'icons/obj/bureaucracy.dmi' - icon_state = "docs_generic" - spawn_nothing_percentage = 15 - -/obj/random/memo_medical/spawn_choices() - return subtypesof(/obj/item/paper/memo/medical) + subtypesof(/obj/item/paper/memo/generic) - -/obj/random/memo_exploration - name = "random exploration memo" - desc = "This may spawn one of the Exploration Memos." - icon = 'icons/obj/bureaucracy.dmi' - icon_state = "docs_generic" - spawn_nothing_percentage = 15 - -/obj/random/memo_exploration/spawn_choices() - return subtypesof(/obj/item/paper/memo/exploration) + subtypesof(/obj/item/paper/memo/generic) - -/obj/random/memo_research - name = "random research memo" - desc = "This may spawn one of the Research Memos." - icon = 'icons/obj/bureaucracy.dmi' - icon_state = "docs_generic" - spawn_nothing_percentage = 15 - -/obj/random/memo_research/spawn_choices() - return subtypesof(/obj/item/paper/memo/research) + subtypesof(/obj/item/paper/memo/generic) - -/obj/random/memo_corporate - name = "random corporate memo" - desc = "This may spawn one of the Corporate Memos." - icon = 'icons/obj/bureaucracy.dmi' - icon_state = "docs_generic" - spawn_nothing_percentage = 15 - -/obj/random/memo_corporate/spawn_choices() - return subtypesof(/obj/item/paper/memo/corporate) + subtypesof(/obj/item/paper/memo/generic) - -/obj/random/memo_security - name = "random security memo" - desc = "This may spawn one of the Security Memos." - icon = 'icons/obj/bureaucracy.dmi' - icon_state = "docs_generic" - spawn_nothing_percentage = 15 - -/obj/random/memo_security/spawn_choices() - return subtypesof(/obj/item/paper/memo/security) + subtypesof(/obj/item/paper/memo/generic) - - - -/obj/random_multi/single_item/memo_scgr - name = "Multi Point - SCGR Memos" - id = "SCGR Memos" - item_path = /obj/random/memo_scgr - -/obj/random_multi/single_item/memo_command - name = "Multi Point - Command Memos" - id = "Command Memos" - item_path = /obj/random/memo_command - -/obj/random_multi/single_item/memo_supply - name = "Multi Point - Supply Memos" - id = "Supply Memos" - item_path = /obj/random/memo_supply - -/obj/random_multi/single_item/memo_engineering - name = "Multi Point - Engineering Memos" - id = "Engineering Memos" - item_path = /obj/random/memo_engineering - -/obj/random_multi/single_item/memo_medical - name = "Multi Point - Medical Memos" - id = "Medical Memos" - item_path = /obj/random/memo_medical - -/obj/random_multi/single_item/memo_exploration - name = "Multi Point - Exploration Memos" - id = "Exploration Memos" - item_path = /obj/random/memo_exploration - -/obj/random_multi/single_item/memo_research - name = "Multi Point - Research Memos" - id = "Research Memos" - item_path = /obj/random/memo_research - -/obj/random_multi/single_item/memo_corporate - name = "Multi Point - Corporate Memos" - id = "Corporate Memos" - item_path = /obj/random/memo_corporate - -/obj/random_multi/single_item/memo_security - name = "Multi Point - Security Memos" - id = "Security Memos" - item_path = /obj/random/memo_security - - - -// base memo behavior - -/obj/item/paper/memo - name = "base memo" - icon_state = "docs_part" - readable = FALSE - is_memo = TRUE - -/obj/item/paper/memo/Initialize() - . = ..() - if (type == /obj/item/paper/memo) - . = INITIALIZE_HINT_QDEL - crash_with("base [type] instantiated erroneously") - -/obj/item/paper/memo/set_content(text, title, parse_pencode) - return - -/obj/item/paper/memo/examine(mob/user, distance) - . = ..() - if (distance < 2) - to_chat(user, SPAN_NOTICE(info)) - - - -// generic memos - -/obj/item/paper/memo/generic/notoffical - name = "offical guides" - info = {"Some "internal use only" reports on inter-departmental communications, reminding personnel that unless the document specifies it is from and issued by EXO or Expeditionary Command, it is not offical policy and should not be referenced as a definitive reasoning for any action."} - - - -// scgr memos - -/obj/item/paper/memo/scgr/skrelljokes - name = "internal conversation record" - info = {"A "confidential" discussion between several Sol Government Representatives, including some crass jokes on if Skrell being squished would burst like a water balloon or squish like a jam sandwich."} - -/obj/item/paper/memo/scgr/spicypolitics - name = "internal conversation record" - info = {"A "confidential" discussion between several Sol Government Representatives, including some interesting political tidbits. Seems like most of them are going to be supporting more conservative, Sol-centric parties next election, voicing annoyance at having to deal with hissing lizards and warbling frogs."} - -/obj/item/paper/memo/scgr/deskfires - name = "important notice" - info = {"A "confidential" notice issued to Sol Government Representatives, informing them of an office fire caused by improper cigarette ash management."} - -/obj/item/paper/memo/scgr/boringreports - name = "\improper Torch project status update #132" - info = {"A "confidential" report containing nothing you'd like to read, featuring updates that you knew about three weeks ago."} - -/obj/item/paper/memo/scgr/documentdamage - name = "important notice" - info = {"A "confidential" notice issued to Sol Government Representatives, informing them that many documents were damaged last week due to "inappropriate sleep management". It urges all diplomatic staff to self-monitor their sleeping schedule and to regulate their caffeine intake."} - -/obj/item/paper/memo/scgr/documentdisposal - name = "proper document disposal" - info = {"Some "internal use only" documents, showing several pictures of reconstructed shredded documents. It highlights that shredding is not acceptable for any documents that are above Confidental, going on to recommend incineration as a primary method."} - -/obj/item/paper/memo/scgr/yourjob - name = "\improper SCG and you" - info = {"Some "confidential" briefing documents, detailing the job of the SCGR in brief. It highlights they are a civilian, first and foremost, who functions as a general-purpose civil servant aboard the SEV Torch. They also should advise the Commanding Officer, assisting with bureaucratic affairs where required, and spearheading diplomatic negotations."} - -/obj/item/paper/memo/scgr/perdiemdeny - name = "per diem denials" - info = {"An "internal use only" document, explaining what not to file per diem reimbursement requests on. It lists examples of many per diem requests SCG representatives have filed in the past that have been denied. Some of the more interesting ones include casino debts, a request for per diem to cover the increased tax on alcohol on a station, and one odd case involving a possum, engineering PPE, and two injuries."} - -/obj/item/paper/memo/scgr/execution - name = "formal complaint" - info = {"A confidential memo from Rear Admiral Lambert of the SFV Bismarck issuing a formal complaint on behalf of Fleet regarding the execution of SLT Kristen Rohtin aboard a Corps vessel. The tone is furious and suggests significant consequences for the Expeditionary Corps."} - -/obj/item/paper/memo/scgr/floritstatement - name = "undersecretary statement" - info = {"A press release issued by the newly-appointed Undersecretary of Diplomatic Affairs, Isabel Florit. The statement assures the public that there will be "no repeats" of the mistakes carried out in recent months aboard the SEV Torch. It goes on to advocate the role of the Defense Forces in public affairs, and suggests that the Diplomatic Affairs office will be working closely with the SCG Fleet under Florit's leadership in the interest of preventing any further incidents."} - -/obj/item/paper/memo/scgr/senateminutes - name = "assembly floor proceedings" - info = {"A copy of the minutes from the Sol Assembly hearing over an emergency bill giving the SCG Defense Forces jurisdiction over the Expeditionary Corps (and by extension, the SEV Torch). The debate is vicious and devolves into angry bickering at points. The bill appears to have gotten uncomfortably close to being passed."} - - -// command memos - -/obj/item/paper/memo/command/saluting - name = "saluting etiquette" - info = {"Some "internal use only" reports on the saluting habits of junior officers, specifically regarding the amount of cases where junior officers cause damage to objects and floor tiles by dropping items to salute their superiors."} - -/obj/item/paper/memo/command/unathiwork - name = "Sinta'unathi behavioral guide" - info = {"An "internal use only" memo from a mid-level officer at Expeditionary Command containing common sinta'unathi behaviors that help explain some of their quirky behaviors. A bullet list contains various hints such as "thumping the tail is a sign of itchiness", "unathi hiss when they are angry", and "letting you touch their tail is a sign of great trust". The document seems very hastily-made and you're not sure you trust it fully."} - -/obj/item/paper/memo/command/blastpain - name = "incident report" - info = {"Some "internal use only" reports about the potential crush hazards of blast doors. It cites an incident regarding improperly conducted tests that resulted in animal cruelty charges."} - -/obj/item/paper/memo/command/concurrentmissions - name = "risk assessment and officer's report" - info = {"Some "internal use only" reports, containing a risk assessment and an officer's report. This one details the risks and likelihood of success of running concurrent shuttlecraft missions. The risk assessment states that the greatest risk comes from personnel being left behind or forgotten. The officer's report details several key points for successful, safe missions. It notes that accurate, well-communicated manifests are essential, with the parent vessel taking responsibility for coordination and pickups of shuttlecraft."} - -/obj/item/paper/memo/command/consecutivemissions - name = "risk assessment and officer's report" - info = {"Some "internal use only" reports, containing a risk assessment and an officer's report. This one details the risks and likelihood of success of running consecutive shuttlecraft missions. The risk assessment states that the greatest risk comes from equipment misappropriation with intent to use on other missions. The officer's report details several key points to take into account when forming expectations of consecutive missions. It notes that the more "green" or disorganized a team is, the higher the risk of mission failures after the first of the shift, citing lack of re-preparation time as a contributing factor."} - -/obj/item/paper/memo/command/annoyingtheft - name = "abuse of access to equipment memo" - info = {"An "internal use only" memo sent from the Executive Officer for distribution to all personnel with access to to the bridge, reminding them that the access to the bridge officers' lockers is not to be abused, further reminding that everyone has equipment in their lockers they should use. It ends with a terse request to stop this abuse immediately."} - -/obj/item/paper/memo/command/fraternizationissues - name = "anti-fraternization memo" - info = {"An "internal use only" memo sent from the Senior Enlisted Advisor to all infirmary staff informing them that, yes, inappropriate relationships are also forbidden for corpsmen and medical technicians. It highlights that further instances of fraternization can and will result in non-judical punishment and reminds all staff that the provision of medical care is their first priority."} - -/obj/item/paper/memo/command/bunnybirdissues - name = "bridge officer hallucination issues" - info = {"An "internal use only" memo sent from the Chief Medical Officer to the Executive Officer detailing the need for downtime and recovery for bridge staff after numerous reports of certain bridge officers seeing "giant space birds" after too long at the helm, and reminding them to be sent for psychological counseling at their earliest convenience."} - -/obj/item/paper/memo/command/bunnytraining - name = "bridge officer qualification status" - info = {"An "internal use only" memo sent from the Commanding Officer to the heads of staff reminding them that bridge officers are qualified in communications and bridge operations and do not, in fact, double as naval infantry. They should not be deployed like such during minor security incidents, citing numerous reports of broken legs and feet being shot due to mishandling of weapons."} - -/obj/item/paper/memo/command/comm - name = "Zurich Common reminder" - info = {"A memo that has seen better days. It's been crumpled up, dried in coffee and put back up by some vandals. From what's left, it reads: "Speaking good Zurich Common is a must to be an excellent head of staff. Please exercise moderation with accents.""} - -/obj/item/paper/memo/command/punishments - name = "disposition of offenses" - info = {"A "for official use only" memorandum detailing an officer's options with regards to punishing uniformed servicemembers. In ascending order of severity, the officer can: take no action (after investigation), take administrative action, impose nonjudicial punishment, and court-martial the offender."} - -/obj/item/paper/memo/command/realitybreak - name = "\improper Bluespace drive apparitions" - info = {"An "internal use only" memo sent from Expeditionary Command, based on a document from Krri'gli Engineering. It states that any humanoid figures seen during a bluespace jump are incorporeal apparitions and no mind should be paid to them, even if they appear familiar. In addition, it notes the existence of a bluespace "double" that living crew may experience and strongly urges them not to touch said double, as tempting as it may be, citing many cases of irrecoverable catatonia in those who have."} - -/obj/item/paper/memo/command/njprules - name = "non-judicial punishments" - info = {"A "for official use only" memorandum detailing options with regards to non-judicially punishing uniformed servicemembers. Such punishments include admonishment/reprimand, forfeiture of pay, restriction, extra duty, and reduction in rank. The punishments available and their severity depend on the rank of the accused and the imposing officer."} - -/obj/item/paper/memo/command/recall - name = "order of recall" - info = {"A notice from the Helios Board of Admiralty regarding the urgent return of the Torch to Mars - the Board has ordered debriefing and review regarding the diplomatic meetings with the Terran Pioneer Corps and the field execution of SLT Kristen Rohtin. The document stresses that the ship be wary of any vessels, Fleet or otherwise, masking their transponders."} - -/obj/item/paper/memo/command/roguefleeties - name = "rogue fleet movements" - info = {"An "internal use only" memorandum sent from Expeditionary Command, detailing the last known locations and naval capacity of several rogue Fifth Fleet vessels, including the SFV Nathan Hale. The data available in the report is uncomfortably sparse."} - -/obj/item/paper/memo/command/outpostreport1 - name = "E-14b outpost report" - info = {"An "internal use only" memo detailing the status of the research outpost in the E-14b system. It states that construction is still underway, and suggests efforts would benefit from better communication between EC and Terran engineering personnel."} - -/obj/item/paper/memo/command/outpostreport2 - name = "E-14b outpost report" - info = {"An "internal use only" memo detailing the status of the research outpost in the E-14b system. It states that construction has been delayed due to a migration of native ambulatory fungus at the site, and requests that the EC begin looking into low-impact mushroom removal methods."} - -/obj/item/paper/memo/command/evasiveflight - name = "evasive flight maneuvers" - info = {"A hastily-penned report detailing strategies for evading ship-to-ship laser fire and missile strikes in the event of another attack on the Torch. The author highly recommends the tactical use of space dust and other debris, citing the successful evasive action taken during the attack by the SFV Nathan Hale."} - - - -// supply memos - -/obj/item/paper/memo/supply/skrellcookery - name = "food for alien species memo" - info = {"An "internal use only" memo sent from the Executive Officer on behalf of Expeditionary Command detailing how to provision meals for Skrell crew. The memo seems to be vaguely misinformed and claims that Skrell should only be given hallucinogenic mushrooms and toast."} - -/obj/item/paper/memo/supply/gasprovisioning - name = "food for alien species memo" - info = {"An "internal use only" memo sent from the Executive Officer on behalf of expeditionary command detailing how to provision meals for Giant Armored Serpentid staff. It implies quite heavily that cost is a concern, and they should not be given meat except in exceptional circumstances and should otherwise only be given cheap cabbage."} - -/obj/item/paper/memo/supply/shotgunblues - name = "in defense of the bar" - info = {"An "internal use only" memo sent from the Executive Officer on behalf of Expeditionary Command detailing that the service department does not need self-defense weapons, and any arguments to the contrary will be handled internally. A personal memo has been added; an underlined "STOP ASKING US" penned onto the page."} - -/obj/item/paper/memo/supply/officelocation - name = "supply office location reminder" - info = {"An "internal use only" memo issued to supply staff, reminding them that the supply office is to the aft of the hangar, not the fore, and that they should ensure they know the way to work."} - -/obj/item/paper/memo/supply/shipping - name = "shipping report" - info = {"Some "internal use only" reports about the recent items coming and going from Expeditionary Corps vessels, with 70% of the orders being filed as replacement chemical cartridges."} - -/obj/item/paper/memo/supply/shipping2 - name = "shipping report" - info = {"Some "internal use only" reports about the recent items coming and going from Expeditionary Corps vessels, with 70% of the orders being filed as being nanoblood."} - -/obj/item/paper/memo/supply/wrongchute - name = "research complaint" - info = {"An "internal use only" memo written for the Research department, gently reminding the xenobiologists to use the correct chute for their monkeys. Underlined is a brief report on two deck technicians that had to be referred to medical due to psychological trauma."} - -/obj/item/paper/memo/supply/smoking - name = "fuel safety report" - info = {"An "internal use only" notice directed at hangar operations personnel reminding them not to smoke in the hangar or near flammable objects or atmospheric holding areas. It specifically references fuelling procedures and to take care and caution to avoid sources of ignition while engaged in any operation involving and engaging in the use of pressurized gasses. It notes that a contracted pilot was fired for not following these regulations, and proceeds to list other potential punishments for smoking. The firefighting guide at the bottom of the notice somewhat undermines the rest."} - -/obj/item/paper/memo/supply/floorlogs - name = "regarding floor logs" - info = {"Some "internal use only" reports requesting the service department to begin maintaining and using floor cleanliness logs to reflect the floor condition and the amount of foot traffic that can be expected. It notes that they should be entered every 15 minutes, and that "light dirt" is non-critical."} - -/obj/item/paper/memo/supply/tempchecks - name = "regarding temp checks" - info = {"Some "internal use only" reports requesting the service department to begin maintaining and using temperature verification logs. It asks to be entered at the start of every hour, with any issues to be clarified on a following page."} - -/obj/item/paper/memo/supply/personaldrinks - name = "off-menu drinks" - info = {"An "internal use only" memo, discussing various off-menu drinks and how to market them. It lists various amusing names, such as "Gaia Slammer", "Spicy Water", "Prison Wine", and "Sheep Shaver", but it doesn't tell you how to make them, for some reason."} - - - -// engineering memos - -/obj/item/paper/memo/engineering/repairs - name = "maintenance reports" - info = {"Some "confidential" reports regarding the state of the SEV Torch. Of note are the rusty cistern, faulty disposal pipes, clogged sinks, and an under-sized atmospheric system."} - -/obj/item/paper/memo/engineering/shieldsoff - name = "shielding recommendations" - info = {"Some "internal use only" reports suggesting atmospheric containment should be disabled on all Expeditionary Corps vessels."} - -/obj/item/paper/memo/engineering/shieldson - name = "shielding recommendations" - info = {"Some "internal use only" reports suggesting atmospheric containment should be enabled on all Expeditionary Corps vessels."} - -/obj/item/paper/memo/engineering/ladder - name = "ladder pamphlet" - info = {"An "internal use only" pamphlet explaining how to use a ladder and safety precautions. It has a little stylized 'days without ladder accidents' counter at the front of the pamphlet. Zero has been written into it, but never replaced."} - -/obj/item/paper/memo/engineering/engineersbad - name = "engineering safety notice" - info = {"An "internal use only" memo sent from the Chief Engineer, complaining about a multitude of inept electricians wiring the TEGs into the main grid directly, resulting in blown fuses and shorted circuits across the rest of the ship. It ends with orders to send any further offenders offsite for retraining."} - -/obj/item/paper/memo/engineering/coilguns - name = "material abuse issues memo" - info = {"An "internal use only" memo sent from the Chief Engineer to engineering staff reminding them that the magnetic coils in storage are for genuine repair and upgrade work only, and are not to be used for "personal projects." A hefty warning is included, mandating NJP's and restricted duties if supplies continue to go missing."} - -/obj/item/paper/memo/engineering/ealradio - name = "radio damage complaint" - info = {"An "internal use only" report on complaints of garbled static emitting from radios during shifts with IPC crew members onboard. The report further goes onto state that when inquiring about this to IPC crew members on the radio, their radios would emit the same noises instead of getting a clear answer from them."} - -/obj/item/paper/memo/engineering/hulldamage - name = "damage control report" - info = {"An "internal use only" report on damages to the hull following the attack by the SFV Nathan Hale. It suggests that the repairs currently in place are temporary at best, and that the Torch will need hefty drydock maintenance before its next deep space mission. The report goes on to recommend petitioning EXO for additional funding for maintenance and upkeep."} - -/obj/item/paper/memo/engineering/tcommssabotage - name = "damage control report" - info = {"An "internal use only" report on damages to ship systems following the 5/14 sabotage incident. It suggests that the saboteur exploited a previously-unknown vulnerability in the ship's telecommunications systems to shut down long-range communications - the system will need a full inspection from DAIS management before it can be deemed properly secure again. How the saboteur discovered the exploit is still unknown."} - -/obj/item/paper/memo/engineering/bsddamage - name = "\improper Bluespace drive safety notice" - info = {"A "confidential" memo from Krri'gli Engineering regarding the new Bluespace drive. It explains in very slow and simple language that this is a "Bluespace drive", a very expensive and volatile piece of machinery, and that you should not break this one or remove the exotic particle shielding. The author does not appear to have a very high opinion of human engineering or mental faculties."} - - -// medical memos - -/obj/item/paper/memo/medical/donuts - name = "medical cleanliness standards" - info = {"Some "confidential" reports regarding instances of infirmary staff being treated with donuts, wiping their hands on their scrubs, and failing to follow cleanliness standards."} - -/obj/item/paper/memo/medical/jackets - name = "medical mistreatments" - info = {"Some "confidential" reports that apparently led to the removal of the straightjacket on all Expeditionary Corps vessels. Inhumane but deemed necessary treatments were applied with the help of those."} - -/obj/item/paper/memo/medical/ipccpr - name = "\improper IPC CPR notice" - info = {"An "internal use only" notice, reminding IPC medical staff that their inability to breathe may inhibit mouth to mouth resuscitation, but does not interfere with the capacity to perform chest compressions when attempting CPR."} - -/obj/item/paper/memo/medical/chemlab - name = "health and safety in the laboratory reminder" - info = {"An "internal use only" memo sent from the Chief Medical Officer to chemistry lab staff reminding them that the chemistry lab is a volatile area and smoking is prohibited. Further, chemists should avoid leaving water near potassium-based solutions as this has been known to result in injury."} - -/obj/item/paper/memo/medical/scrubswithranks - name = "uniform guide reminder" - info = {"An "internal use only" notice from the Senior Enlisted Advisor about which clothes are meant to be worn with ranks and which are not. Curiously, scrubs are mentioned often."} - -/obj/item/paper/memo/medical/washyourdamnhands - name = "sanitation reminder" - info = {"An "internal use only" memo sent from the Chief Medical Officer to all infirmary staff reminding them to wash their hands before and after surgery. It concludes with a note stating that they should NOT have to be asking their staff to do this."} - -/obj/item/paper/memo/medical/greytidevirus - name = "power notice" - info = {"An "internal use only" notice sent by a member of the engineering team stating that power must sometimes be shut down due to abnormalities in the power grid and that medical doesn't need to call them asking what happened. Especially after the announcement is made. Seriously."} - -/obj/item/paper/memo/medical/traineebeards - name = "grooming standards" - info = {"An "internal use only" memo from the Senior Enlisted Advisor and the Chief Medical Officer reminding staff of the importance of grooming standards in the infirmary. The example of a recently-dismissed medical trainee that refused to trim his beard is used as a warning to all staff, and helpful pictures of proper hair are included."} - -/obj/item/paper/memo/medical/spacies - name = "space-adapted humans" - info = {"An "internal use only" formal-looking report for the ship's medical staff by a prominent off-ship medical scholar noting the differences between baseline humans and the comparatively-rare space-adapted humans. It reads like something out of a boring thousand-page textbook, and you could probably learn more by simply talking to a space-adapted human."} - -/obj/item/paper/memo/medical/madaboutfrat - name = "sub-acute ward notice" - info = {"An "internal use only", hastily hand-written note from a civilian doctor stating that "The sub-acute ward is for NON-CRITICAL PATIENTS and not FLIRTING, YOU BUFFOONS!" They appear to have smashed the point of their marker into the note on the exclamation point's dot, and a small tear is present."} - -/obj/item/paper/memo/medical/bandages - name = "helpful trainee reminder" - info = {"An "internal use only" notice from the Chief Medical Officer that seems to radiate irritation, somehow. It notes that bleeding wounds should be "BANDAGED IN THE FIELD" and to "HAVE A SECURE GRIP ON PATIENTS YOU ARE TRANSPORTING." It concludes with a warning that the next trainee found dragging a surgical dummy around by the leg will receive a "STERN" talking to."} - -/obj/item/paper/memo/medical/organfab - name = "organ recyclers" - info = {"An "internal use only" notice intended to be posted near the various organ fabricators in the infirmary. It details how the fabricators are complex machines that have dedicated recyclers built in, allowing reprocessing of all organic or prosthetic organs into their respective fabricator. It ends by stating that the chronic underutliziation of the recycler function is a "travesty" and pleads to "stop wasting perfectly good necrotic organs!""} - - - -// exploration memos - -/obj/item/paper/memo/exploration/incident - name = "incident report" - info = {"Some "confidential" reports about an incident caused by the exploration department. While it has many pages, the front cover summarizes it very tersely: explorers should not be firing the ballistic launcher in flammable atmospheres. Ignition and subsequent burning of the entire exoplanet may occur."} - -/obj/item/paper/memo/exploration/incident2 - name = "incident report" - info = {"Some "confidential" reports regarding airlock-related injuries in the previous month across all Expeditionary Corps vessels. That number seems rather high."} - -/obj/item/paper/memo/exploration/incident3 - name = "incident report" - info = {"Some "confidential" reports about an incident caused by an Expeditionary Corps officer's incompetence that nearly killed a person under their supervision. The apparent cause was an unsafe craft departure."} - -/obj/item/paper/memo/exploration/confuseexplo - name = "incident report" - info = {"Some "confidential" reports regarding numerous newly-enlisted explorers being unaware of the Expeditionary Corps, its Mission, or what training they received. An officer has attached a note to the bottom, commenting on possible cryostasis injuries. It's been circled and has several question marks."} - -/obj/item/paper/memo/exploration/colddeadhands - name = "incident report" - info = {"A "confidential" notice reminding exploration that the recovery of unnecessary equipment from the deceased during explorations is vehemently discouraged and that future cases will be punished by forfeiture of pay."} - -/obj/item/paper/memo/exploration/pathfinderproblems - name = "pathfinder protocol reminder" - info = {"A "confidential" memo sent from the Executive Officer to the pathfinder reminding them that, yes, their pilot is there to fly the Charon, not them, and that, yes, they should ensure that the exploration shotgun is only used by trained personnel. The final bit is very tersely-written, advising them to stop explorers from looking directly into the barrel."} - -/obj/item/paper/memo/exploration/hangarproc - name = "don't force the fucking airlock" - info = {"An "internal use only" memo written by the senior engineer with a string of strongly worded expletives seemingly redacted from the final text directed toward the pathfinder to follow proper hangar atmospheric containment procedure for the Charon."} - -/obj/item/paper/memo/exploration/oldshuttle - name = "shuttle replacement issues" - info = {"An "internal use only", long winded rant riddled with spelling errors lamenting the loss of the "Calypso," whatever that may be, claiming it to be a much better shuttle than the Charon. It further grieves the loss of the crew microwave."} - -/obj/item/paper/memo/exploration/charonsafety - name = "fuel safety report" - info = {"Some "internal use only" reports about personnel smoking near the atmospherics holding area aboard the SEV Charon. The atmospherics holding area aboard the Charon is declared a no-smoking area, as indicated by the sign. Attached is a brief incident report with a contracted pilot. The report ends with large-font writing stating the next person found smoking near the fueling port will be demoted to sanitation tech for the rest of their deployment."} - -/obj/item/paper/memo/exploration/survivors - name = "interactions with survivors" - info = {"Some "internal use only" reports discussing the process of dealing with survivors, off-ship personnel, or in-distress civilians. This one details three points that all explorers, Fleet servicemembers, or contractor personnel should attempt to follow when dealing with off-ship persons: First, treat them with the utmost respect at all times, as they are the ones who need aid. Second, do not directly order them around, unless they happen to be getting in the way of SCG objectives. Third, remind them of their rights - they are requiring aid and are to be treated with the best handling, but remind them that they are still on SCG property, and are subject to SCG law at all times."} - -/obj/item/paper/memo/exploration/cigarettes - name = "cigarettes with helmets" - info = {"Some "internal use only" reports detailing the extreme hazards of attempting to smoke a cigarette while wearing a spaceproof helmet, citing many incidents of suffocation and subsequent death as well as pointing out the presence of a "No Smoking" sign onboard the Charon and the likely flammability of many exoplanets. It concludes with a recommendation to smoke only in designated breakrooms aboard the SEV Torch and not when wearing a helmet."} - -/obj/item/paper/memo/exploration/documentplease - name = "on documentation of sites" - info = {"Some "internal use only" reports discussing missing information on an exoplanet based on a lack of samples from the exploration team. It discusses the importance of making sure away teams document and report on the exoplanet, particularly taking samples and scans of plant life, xenofauna, atmospheric information, and mineral samples."} - -/obj/item/paper/memo/exploration/pioneers - name = "pioneers and you" - info = {"An "internal use only" memo detailing proper ettiquette for explorers interacting with Terran Pioneer Corps personnel. It stresses very heavily that yes, most Terrans do speak ZAC; no, you should not share your funny Pan-Slavic impression; and no, you should ABSOLUTELY not ask if they know any war criminals."} - - -// research memos - -/obj/item/paper/memo/research/slimeincident - name = "intra-department communications" - info = {"Some "confidential" reports about an incident caused by a xenobiology containment breach, allowing a grey slime to escape into the vents and appear on the bridge. Fortunately, the slime was recently fed and only smiled pleasantly at the staff before being forcefully euthanized."} - -/obj/item/paper/memo/research/annoyingtheft - name = "abuse of access to tools memo" - info = {"An "internal use only" memo sent from the Chief Science Officer to the pathfinder reminding them that the access to the Petrov is not to be abused, further asking that the pathfinder crack down on any explorers looting equipment from the Petrov for their "missions". It ends with a note that they have their own equipment that they should be using instead."} - -/obj/item/paper/memo/research/toxinsfire - name = "toxin development memo" - info = {"Some of this memo has been burnt, but you can still read what's left. It reads: "THE GLASS IS NOT UNBREAKABLE.""} - -/obj/item/paper/memo/research/progressbad - name = "work recording reminder" - info = {"An "internal use only" memo from the Chief Science Officer to research staff reminding them of the importance of actually documenting their findings. Some reports are attached highlighting numerous issues with data loss from projects after many scientists showed a tendency to forget their work after cryogenic sleep cycles."} - -/obj/item/paper/memo/research/chat - name = "chatroom log" - info = {"Someone drew a big laughing face over this, but you can still read the contents. "What do you guys want the most?" "I wish we had our own security sometimes.""} - -/obj/item/paper/memo/research/petrov - name = "\improper Petrov map" - info = {"It's a portable map of the Petrov. Someone wrote over it in big letters: "What the fuck is the Petrov?", and it's now unusable."} - -/obj/item/paper/memo/research/fuckingdoors - name = "windoor guide" - info = {"An "internal use only" visual guide for the proper operation of xenobiology containment doors. It features a hand-written note saying "PAY ATTENTION TO THIS!" in large letters."} - - - -// corporate memos - -/obj/item/paper/memo/corporate/stipendcut - name = "corporate spending records" - info = {"A "confidential" memo on the current usage of funds provided to SEV Torch corporate liaisons; apparently there's threats of a strike over a cut to the cost-of-living stipends by the head office."} - -/obj/item/paper/memo/corporate/uniondues - name = "union dues reminder" - info = {"A "confidential" memo sent from the Union Representative to all members of the Union reminding them that their mandated union fee pay period is approaching, and they should ensure their 250 thaler is deposited with them before the end of the month."} - -/obj/item/paper/memo/corporate/glueandtape - name = "proper document disposal" - info = {"Some "internal use only" corporate documents detailing the proper ways to dispose of top secret and classified documents. It highlights that burning is most applicable, and shows pictures of shredded documents reconstructed with glue and sticky tape with a red "Fail" written below."} - -/obj/item/paper/memo/corporate/exointerest - name = "\improper EXO and you" - info = {"Some "confidential" corporate documents directed to the corporate liasion, informing them that their job is to represent EXO and its immediate interests, which are to ensure the SEV Torch is able to maintain the currently defined direction that is within the interests of EXO as a whole."} - -/obj/item/paper/memo/corporate/thequarterly - name = "quarterly budget report" - info = {"A "confidential" yet uninteresting report from the head office regarding budget plans announced two weeks ago."} - -/obj/item/paper/memo/corporate/kiareport - name = "deceased and missing staff reports" - info = {"A "confidential" memo reminding corporate liaisons to report the details pertaining to the death, or missing status, of on-shift employees. It explains that doing this ensures formal procedures are followed, and the situation pertaining to the deceased/missing status will be referenced for ongoing and future employee training programs and payrolls."} - -/obj/item/paper/memo/corporate/spellchecker - name = "spellchecking and you" - info = {"Some "internal use only" corporate memos reminding corporate liaisons to proofread reports. It details various reasons behind why correct spelling and punctuation help in making EXO and Expeditionary Command take your report seriously."} - -/obj/item/paper/memo/corporate/safetyfirst - name = "contractor safety and you" - info = {"An "internal use only" corporate document reminding corporate liaisons to report any unsafe behavior from contractors that they either see directly or is reported to them. It goes on to explain that ensuring the health and safety compliance of those under contract not only helps to keep up an image of security but ensures that the reputation of EXO as a whole is not tarnished due to a workplace accident."} - - - -// security memos - -/obj/item/paper/memo/security/carrieroverkill - name = "security medical report" - info = {"An "internal use only" report shared with security by medical on various masters at arms, noting a very large amount of chafing in the chest region due to continuous patrols while wearing plate carriers without reason."} - -/obj/item/paper/memo/security/pepperoveruse - name = "inter-department complaint" - info = {"An "internal use only" memo sent from the service department complaining about certain members of security taking peppers from the kitchen freezer with the intent to supply their own peppersprays. It notes that the supply department is perfectly capable of refilling peppersprays and security should not resort to stealing garnishes."} - -/obj/item/paper/memo/security/pepperoveruse2 - name = "inter-department complaint" - info = {"An "internal use only" memo sent from the supply department complaining about certain members of security repeatedly ordering replacement crates of pepperspray. It notes that further orders will be denied, and recommends that refills be acquired through Hydroponics."} - -/obj/item/paper/memo/security/mre - name = "counterfeit MRE warning" - info = {"An "internal use only" warning all masters at arms to watch out for counterfeit MREs being snuck inside vending machines. They reportedly contain crayons instead of actual food."} - -/obj/item/paper/memo/security/laepuse - name = "\improper LAEP-90 manual" - info = {"An "internal use only" manual normally distributed to lower-ranking masters at arms demonstrating proper usage of the LAEP-90 and LAEP-90C smartguns. A page on how to authenticate the LAEP via a card swipe has been dog-eared, with the word "MANDATORY" having been written at the top."} - -/obj/item/paper/memo/security/batoncqc - name = "baton usage in CQC" - info = {"An "internal use only" manual demonstrating the proper usage of a stun baton in a close quarters fight and the dangers of losing it in an engagement. A notice is included at the bottom that reminds security personnel to avoid putting too much force into their swings, lest they cause unneeded harm. It cites a study that shows that hard hits with the baton are actually less effective than light taps due to the electrodes not having as much skin contact."} - -/obj/item/paper/memo/security/goddamnhelmets - name = "angry PPE memo" - info = {"An "internal use only" note written from a Chief of Security that has grown sick of seeing masters at arms walking around on code green in full personal protective equipment. It concludes with an angry promise to rip off the next gas mask they see. It's been underlined."} - -/obj/item/paper/memo/security/burntout - name = "proper flash usage" - info = {"An "internal use only", hand-written note from a brig chief warning personnel not to overuse their hand flashes in order to prevent the bulb from burning out. They further note that a burnt-out flash is useless. A third party has written on this note that burnt-out flashes should instead be brought to robotics. They even underlined it and added exclamation marks for emphasis, wow."} - -/obj/item/paper/memo/security/lolly - name = "STOP STEALING CANDY FROM MED" - info = {"Why the fuck do I have to write this to you all when the records say you're all SUPPOSEDLY legal adults? The lollipop jar in medical is for PATIENTS, not MASTERS AT ARMS. Those lollipops contain COLD MEDICINE INSTEAD OF SUGAR. STOP STEALING THEM!!! If you want candy so goddamn much GO TO A VENDING MACHINE. If I see one of you stealing candy from medical, you're being demoted to sanitation tech of maintenance for the rest of your miserable tour here. Clean up and be more professional next shift!"} - -/obj/item/paper/memo/security/chaplain - name = "inter-department complaint" - info = {"An inter-departmental memo from the Chaplain's office detailing their objection at length to the Torch permitting capital punishment within its walls. A diplomatic and scientifically oriented ship should have "no part in warfare"."} - -/obj/item/paper/memo/security/extremism - name = "anti-radicalization pamphlet" - info = {"An "internal use only" document detailing strategies for identifying signs and risk factors for radicalization, created in light of perceived extremism in the SCGF. It discusses low self-esteem, stress, marginalization, repeat disciplinary issues, and excessive interest in weaponry."} diff --git a/maps/torch/items/rigs.dm b/maps/torch/items/rigs.dm deleted file mode 100644 index b700a7369f753..0000000000000 --- a/maps/torch/items/rigs.dm +++ /dev/null @@ -1,418 +0,0 @@ -///////////////////////// -//~~Bless this mess~~// -///////////////////// - -/* - * BASE TYPE - */ -/obj/item/rig/command - name = "command HCM" - suit_type = "command hardsuit" - icon = 'maps/torch/icons/obj/uniques.dmi' - desc = "A specialized hardsuit rig control module issued to command staff of the Expeditionary Corps and their peers." - icon_state = "command_rig" - armor = list( - melee = ARMOR_MELEE_KNIVES, - bullet = ARMOR_BALLISTIC_SMALL, - laser = ARMOR_LASER_MINOR, - energy = ARMOR_ENERGY_SMALL, - bomb = ARMOR_BOMB_PADDED, - bio = ARMOR_BIO_SHIELDED, - rad = ARMOR_RAD_SMALL - ) - online_slowdown = 0.75 - offline_vision_restriction = TINT_HEAVY - - chest_type = /obj/item/clothing/suit/space/rig/command - helm_type = /obj/item/clothing/head/helmet/space/rig/command - boot_type = /obj/item/clothing/shoes/magboots/rig/command - glove_type = /obj/item/clothing/gloves/rig/command - - req_access = list(access_bridge) - -/obj/item/clothing/head/helmet/space/rig/command - light_overlay = "helmet_light_dual" - icon = 'maps/torch/icons/obj/obj_head_solgov.dmi' - item_icons = list(slot_head_str = 'maps/torch/icons/mob/onmob_head_solgov.dmi') - camera = /obj/machinery/camera/network/command - species_restricted = list(SPECIES_HUMAN,SPECIES_IPC, SPECIES_SHELL) //no available icons for aliens - -/obj/item/clothing/suit/space/rig/command - icon = 'maps/torch/icons/obj/obj_suit_solgov.dmi' - item_icons = list(slot_wear_suit_str = 'maps/torch/icons/mob/onmob_suit_solgov.dmi') - species_restricted = list(SPECIES_HUMAN,SPECIES_IPC, SPECIES_SHELL) - -/obj/item/clothing/shoes/magboots/rig/command - icon = 'maps/torch/icons/obj/obj_feet_solgov.dmi' - item_icons = list(slot_shoes_str = 'maps/torch/icons/mob/onmob_feet_solgov.dmi') - species_restricted = list(SPECIES_HUMAN,SPECIES_IPC, SPECIES_SHELL) - -/obj/item/clothing/gloves/rig/command - icon = 'maps/torch/icons/obj/obj_hands_solgov.dmi' - item_icons = list(slot_gloves_str = 'maps/torch/icons/mob/onmob_hands_solgov.dmi') - species_restricted = list(SPECIES_HUMAN,SPECIES_IPC, SPECIES_SHELL) - - -/obj/item/rig/command/equipped - initial_modules = list( - /obj/item/rig_module/maneuvering_jets, - /obj/item/rig_module/device/flash, - /obj/item/rig_module/cooling_unit - ) - -/* - * EXECUTIVE OFFICER - */ -/obj/item/rig/command/xo - name = "officer's command HCM" - suit_type = "advanced command hardsuit" - desc = "A specialized hardsuit rig control module issued to high ranking officers of the Expeditionary Corps and their peers." - icon_state = "command_XO_rig" - armor = list( - melee = ARMOR_MELEE_KNIVES, - bullet = ARMOR_BALLISTIC_SMALL, - laser = ARMOR_LASER_MINOR, - energy = ARMOR_ENERGY_SMALL, - bomb = ARMOR_BOMB_PADDED, - bio = ARMOR_BIO_SHIELDED, - rad = ARMOR_RAD_SMALL - ) - - chest_type = /obj/item/clothing/suit/space/rig/command/xo - helm_type = /obj/item/clothing/head/helmet/space/rig/command/xo - boot_type = /obj/item/clothing/shoes/magboots/rig/command - glove_type = /obj/item/clothing/gloves/rig/command - - req_access = list(access_hop) - -/obj/item/clothing/head/helmet/space/rig/command/xo - icon_state = "command_XO_rig" -/obj/item/clothing/suit/space/rig/command/xo - icon_state = "command_XO_rig" -/obj/item/clothing/shoes/magboots/rig/command/xo -/obj/item/clothing/gloves/rig/command/xo - - -/obj/item/rig/command/xo/equipped - initial_modules = list( - /obj/item/rig_module/maneuvering_jets, - /obj/item/rig_module/device/flash/advanced, - /obj/item/rig_module/grenade_launcher/smoke, - /obj/item/rig_module/cooling_unit - ) - -/* - * COMMANDING OFFICER - */ -/obj/item/rig/command/co - name = "commanding officer's command HCM" - suit_type = "advanced command hardsuit" - desc = "A specialized hardsuit rig control module issued to commanding officers of the Expeditionary Corps." - icon_state = "command_CO_rig" - armor = list( - melee = ARMOR_MELEE_RESISTANT, - bullet = ARMOR_BALLISTIC_PISTOL, - laser = ARMOR_LASER_SMALL, - energy = ARMOR_ENERGY_SMALL, - bomb = ARMOR_BOMB_PADDED, - bio = ARMOR_BIO_SHIELDED, - rad = ARMOR_RAD_SMALL - ) - - chest_type = /obj/item/clothing/suit/space/rig/command/co - helm_type = /obj/item/clothing/head/helmet/space/rig/command/co - boot_type = /obj/item/clothing/shoes/magboots/rig/command - glove_type = /obj/item/clothing/gloves/rig/command - - req_access = list(access_captain) - -/obj/item/clothing/head/helmet/space/rig/command/co - icon_state = "command_CO_rig" -/obj/item/clothing/suit/space/rig/command/co - icon_state = "command_CO_rig" -/obj/item/clothing/shoes/magboots/rig/command/co -/obj/item/clothing/gloves/rig/command/co - - -/obj/item/rig/command/co/equipped - initial_modules = list( - /obj/item/rig_module/ai_container, - /obj/item/rig_module/maneuvering_jets, - /obj/item/rig_module/device/flash/advanced, - /obj/item/rig_module/grenade_launcher/smoke, - /obj/item/rig_module/cooling_unit - ) - -/* - * CHIEF MEDICAL OFFICER - */ -/obj/item/rig/command/medical - name = "medical command HCM" - suit_type = "medical command hardsuit" - desc = "A specialized hardsuit rig control module issued to ranking medical officers of the Expeditionary Corps and their peers." - icon_state = "command_med_rig" - - chest_type = /obj/item/clothing/suit/space/rig/command/medical - helm_type = /obj/item/clothing/head/helmet/space/rig/command/medical - - req_access = list(access_cmo) - -/obj/item/clothing/head/helmet/space/rig/command/medical - icon_state = "command_med_rig" -/obj/item/clothing/suit/space/rig/command/medical - icon_state = "command_med_rig" - allowed = list( - /obj/item/gun, - /obj/item/ammo_magazine, - /obj/item/device/flashlight, - /obj/item/tank, - /obj/item/device/suit_cooling_unit, - /obj/item/storage/firstaid, - /obj/item/device/scanner/health, - /obj/item/stack/medical, - /obj/item/roller - ) -/obj/item/clothing/shoes/magboots/rig/command/medical -/obj/item/clothing/gloves/rig/command/medical - - -/obj/item/rig/command/medical/equipped - initial_modules = list( - /obj/item/rig_module/maneuvering_jets, - /obj/item/rig_module/device/flash, - /obj/item/rig_module/device/healthscanner, - /obj/item/rig_module/device/defib, - /obj/item/rig_module/chem_dispenser/injector, - /obj/item/rig_module/vision/medhud, - /obj/item/rig_module/cooling_unit - ) - -/* -* CHIEF OF SECURITY -*/ -/obj/item/rig/command/security - name = "security command HCM" - suit_type = "security command hardsuit" - desc = "A specialized hardsuit rig control module issued to ranking security officers of the Expeditionary Corps and their peers." - icon_state = "command_sec_rig" - armor = list( - melee = ARMOR_MELEE_RESISTANT, - bullet = ARMOR_BALLISTIC_PISTOL, - laser = ARMOR_LASER_SMALL, - energy = ARMOR_ENERGY_SMALL, - bomb = ARMOR_BOMB_PADDED, - bio = ARMOR_BIO_SHIELDED, - rad = ARMOR_RAD_SMALL - ) - - chest_type = /obj/item/clothing/suit/space/rig/command/security - helm_type = /obj/item/clothing/head/helmet/space/rig/command/security - - req_access = list(access_hos) - -/obj/item/clothing/head/helmet/space/rig/command/security - icon_state = "command_sec_rig" -/obj/item/clothing/suit/space/rig/command/security - icon_state = "command_sec_rig" - allowed = list( - /obj/item/gun, - /obj/item/ammo_magazine, - /obj/item/handcuffs, - /obj/item/device/flashlight, - /obj/item/tank, - /obj/item/device/suit_cooling_unit, - /obj/item/melee/baton - ) -/obj/item/clothing/shoes/magboots/rig/command/security -/obj/item/clothing/gloves/rig/command/security - - - -/obj/item/rig/command/security/equipped - initial_modules = list( - /obj/item/rig_module/maneuvering_jets, - /obj/item/rig_module/device/flash, - /obj/item/rig_module/vision/sechud, - /obj/item/rig_module/cooling_unit - ) - -/* -* CHIEF SCIENCE OFFICER -*/ -/obj/item/rig/command/science - name = "research command HCM" - suit_type = "research command hardsuit" - desc = "A specialized hardsuit rig control module issued to ranking research officers of the Expeditionary Corps." - icon_state = "command_sci_rig" - armor = list( - melee = ARMOR_MELEE_KNIVES, - bullet = ARMOR_BALLISTIC_SMALL, - laser = ARMOR_LASER_MINOR, - energy = ARMOR_ENERGY_STRONG, - bomb = ARMOR_BOMB_RESISTANT, - bio = ARMOR_BIO_SHIELDED, - rad = ARMOR_RAD_SHIELDED - ) - - chest_type = /obj/item/clothing/suit/space/rig/command/science - helm_type = /obj/item/clothing/head/helmet/space/rig/command/science - - req_access = list(access_rd) - -/obj/item/clothing/head/helmet/space/rig/command/science - icon_state = "command_sci_rig" - -/obj/item/clothing/suit/space/rig/command/science - icon_state = "command_sci_rig" - allowed = list( - /obj/item/gun, - /obj/item/ammo_magazine, - /obj/item/device/flashlight, - /obj/item/tank, - /obj/item/device/suit_cooling_unit, - /obj/item/stack/flag, - /obj/item/storage/excavation, - /obj/item/device/scanner/health, - /obj/item/device/measuring_tape, - /obj/item/device/ano_scanner, - /obj/item/device/depth_scanner, - /obj/item/device/core_sampler, - /obj/item/device/gps, - /obj/item/pinpointer/radio, - /obj/item/pickaxe/xeno, - /obj/item/storage/bag/fossils, - /obj/item/rig_module/grenade_launcher/light - ) - -/obj/item/clothing/shoes/magboots/rig/command/science -/obj/item/clothing/gloves/rig/command/science - - -/obj/item/rig/command/science/equipped - initial_modules = list( - /obj/item/rig_module/maneuvering_jets, - /obj/item/rig_module/device/flash, - /obj/item/rig_module/device/anomaly_scanner, - /obj/item/rig_module/grenade_launcher/light, - /obj/item/rig_module/cooling_unit - ) - -/* -* EXPLORATION -*/ -/obj/item/rig/exploration - name = "heavy exploration HCM" - suit_type = "heavy exploration hardsuit" - icon = 'maps/torch/icons/obj/uniques.dmi' - desc = "Expeditionary Corps' Exoplanet Exploration Armored Unit, A-Unit for short. Built for more hostile (and hungry) environments, it features additional armor and powered exoskeleton." - icon_state = "command_exp_rig" - armor = list( - melee = ARMOR_MELEE_MAJOR, - bullet = ARMOR_BALLISTIC_SMALL, - laser = ARMOR_LASER_SMALL, - energy = ARMOR_ENERGY_RESISTANT, - bomb = ARMOR_BOMB_MINOR, - bio = ARMOR_BIO_SHIELDED, - rad = ARMOR_RAD_SHIELDED - ) - - chest_type = /obj/item/clothing/suit/space/rig/command - helm_type = /obj/item/clothing/head/helmet/space/rig/command/exploration - boot_type = /obj/item/clothing/shoes/magboots/rig/command - glove_type = /obj/item/clothing/gloves/rig/command/exploration - - - offline_vision_restriction = TINT_BLIND - - req_access = list(access_pathfinder) - -/obj/item/clothing/gloves/rig/command/exploration - siemens_coefficient = 0 - -/obj/item/clothing/head/helmet/space/rig/command/exploration - camera = /obj/machinery/camera/network/exploration - icon_state = "command_exp_rig" - light_overlay = "helmet_light_wide" - brightness_on = 0.8 - -/obj/item/clothing/suit/space/rig/command/exploration - icon_state = "command_exp_rig" - allowed = list( - /obj/item/gun, - /obj/item/ammo_magazine, - /obj/item/device/flashlight, - /obj/item/tank, - /obj/item/device/suit_cooling_unit, - /obj/item/stack/flag, - /obj/item/storage/excavation, - /obj/item/device/scanner, - /obj/item/device/depth_scanner, - /obj/item/device/gps, - /obj/item/pinpointer/radio, - /obj/item/storage/plants - ) - -/obj/item/rig/exploration/equipped - initial_modules = list( - /obj/item/rig_module/maneuvering_jets, - /obj/item/rig_module/device/flash, - /obj/item/rig_module/device/anomaly_scanner, - /obj/item/rig_module/grenade_launcher/light, - /obj/item/rig_module/cooling_unit - ) - -/obj/item/rig/hazard/research_guard - name = "EXO hardsuit control module" - suit_type = "hazard hardsuit" - desc = "A security hardsuit designed for prolonged EVA in dangerous environments." - icon_state = "hazard_rig" - armor = list( - melee = ARMOR_MELEE_MAJOR, - bullet = ARMOR_BALLISTIC_SMALL, - laser = ARMOR_LASER_SMALL, - energy = ARMOR_ENERGY_SMALL, - bomb = ARMOR_BOMB_RESISTANT, - bio = ARMOR_BIO_SHIELDED, - rad = ARMOR_RAD_SMALL - ) - online_slowdown = 2 - offline_slowdown = 3 - offline_vision_restriction = TINT_BLIND - - chest_type = /obj/item/clothing/suit/space/rig/hazard - helm_type = /obj/item/clothing/head/helmet/space/rig/hazard - boot_type = /obj/item/clothing/shoes/magboots/rig/hazard - glove_type = /obj/item/clothing/gloves/rig/hazard - - allowed = list(/obj/item/gun,/obj/item/ammo_magazine,/obj/item/ammo_casing,/obj/item/handcuffs,/obj/item/device/flashlight,/obj/item/tank,/obj/item/device/suit_cooling_unit,/obj/item/melee/baton) - - req_access = list(access_research_security) - -/obj/item/rig/hazard/research_guard/equipped - initial_modules = list( - /obj/item/rig_module/vision/sechud, - /obj/item/rig_module/mounted/taser, - /obj/item/rig_module/cooling_unit) -/* - Overrides for standard mapset rig items - */ - -/obj/item/clothing/head/helmet/space/rig/industrial - camera = /obj/machinery/camera/network/supply - -/obj/item/rig/zero/synth - name = "Synthetic's hardsuit control module" - req_access = list(access_ai_upload) - -/obj/item/rig/zero/synth/equipped - initial_modules = list( - /obj/item/rig_module/ai_container, - /obj/item/rig_module/device/defib, - /obj/item/rig_module/device/healthscanner, - /obj/item/rig_module/device/rcd, - /obj/item/rig_module/chem_dispenser/injector, - /obj/item/rig_module/mounted/plasmacutter, - /obj/item/rig_module/vision/medhud, - /obj/item/rig_module/vision/meson, - /obj/item/rig_module/maneuvering_jets, - /obj/item/rig_module/cooling_unit) diff --git a/maps/torch/items/solbanner.dm b/maps/torch/items/solbanner.dm deleted file mode 100644 index 63feb6dec97d1..0000000000000 --- a/maps/torch/items/solbanner.dm +++ /dev/null @@ -1,58 +0,0 @@ -/obj/structure/solbanner - name = "\improper SCG banner" - icon = 'maps/torch/icons/obj/solbanner.dmi' - icon_state = "wood" - desc = "A wooden pole bearing a banner of Sol Central Government. Ave." - anchored = TRUE - obj_flags = OBJ_FLAG_ANCHORABLE - layer = ABOVE_HUMAN_LAYER - -/obj/structure/solbanner/exo - name = "exoplanet SCG banner" - desc = "A rugged metal frame with a banner of Sol Central Government on it. Resistant to radiation bleaching." - icon_state = "steel" - obj_flags = 0 - var/plantedby - -/obj/structure/solbanner/exo/Initialize() - . = ..() - flick("deploy",src) - -/obj/structure/solbanner/exo/examine(mob/user) - . = ..() - if(plantedby) - to_chat(user, "[plantedby]") - -/obj/item/solbanner - name = "\improper SCG banner capsule" - desc = "SCG banner packed in a rapid deployment capsule. Used for staking claims on new worlds in the name of Sol Central Government." - icon = 'maps/torch/icons/obj/uniques.dmi' - icon_state = "banner_stowed" - w_class = ITEM_SIZE_HUGE - req_access = list(access_pathfinder) - -/obj/item/solbanner/attack_self(mob/living/carbon/human/user) - ..() - if(!istype(user)) - return - if(!allowed(user)) - to_chat(user, "\The [src] does not recognize your authority!") - return - var/turf/T = get_turf(src) - if(!istype(T) && !istype(T,/turf/space)) - to_chat(user, "\The [src] is unable to deploy here!") - return - if(user.unEquip(src)) - forceMove(T) - if(GLOB.using_map.use_overmap) - var/obj/effect/overmap/visitable/sector/exoplanet/P = map_sectors["[z]"] - if(istype(P)) - GLOB.stat_flags_planted += 1 - qdel(src) - var/obj/structure/solbanner/exo/E = new(T) - var/obj/item/card/id/ID = user.GetIdCard() - var/dudename = ID.registered_name - if(istype(ID.military_rank)) - dudename = "[ID.military_rank.name] [dudename]" - E.plantedby = "Planted on [stationdate2text()] by [dudename], [user.get_assignment()] of [GLOB.using_map.full_name]." - T.visible_message("[user] successfully claims this world with \the [E]!") diff --git a/maps/torch/items/stamps.dm b/maps/torch/items/stamps.dm deleted file mode 100644 index 199ac9296dffa..0000000000000 --- a/maps/torch/items/stamps.dm +++ /dev/null @@ -1,39 +0,0 @@ -/obj/item/stamp/co - name = "commanding officer's rubber stamp" - icon_state = "stamp-cap" - -/obj/item/stamp/xo - name = "executive officer's rubber stamp" - icon_state = "stamp-xo" - -/obj/item/stamp/sea - name = "senior enlisted advisor's rubber stamp" - icon_state = "stamp-xo" - -/obj/item/stamp/cos - name = "chief of security's rubber stamp" - icon_state = "stamp-cos" - -/obj/item/stamp/brig - name = "brig chief's rubber stamp" - icon_state = "stamp-brig" - -/obj/item/stamp/solgov - name = "\improper Sol Central Government rubber stamp" - icon_state = "stamp-solgov" - -/obj/item/stamp/nt - name = "\improper corporate rubber stamp" - icon_state = "stamp-corp" - -/obj/item/stamp/deckoff - name = "deck chief's rubber stamp" - icon_state = "stamp-deckchief" - -/obj/item/stamp/supply - name = "supply rubber stamp" - icon_state = "stamp-cargo" - -/obj/item/stamp/path - name = "pathfinder's rubber stamp" - icon_state = "stamp-pf" diff --git a/maps/torch/items/uniform_vendor.dm b/maps/torch/items/uniform_vendor.dm deleted file mode 100644 index fad4548aeca57..0000000000000 --- a/maps/torch/items/uniform_vendor.dm +++ /dev/null @@ -1,226 +0,0 @@ -/obj/machinery/uniform_vendor - name = "uniform vendor" - desc= "A uniform vendor for utility, service, and dress uniforms." - icon = 'icons/obj/vending.dmi' - icon_state = "uniform" - layer = BELOW_OBJ_LAYER - anchored = TRUE - density = TRUE - - // Power - use_power = 1 - idle_power_usage = 10 - var/vend_power_usage = 150 //actuators and stuff - - var/obj/item/card/id/ID - var/list/uniforms = list() - var/list/selected_outfit = list() - var/static/list/issued_items = list() - -/obj/machinery/uniform_vendor/on_update_icon() - if(stat & BROKEN) - icon_state = "[initial(icon_state)]-broken" - else if(!(stat & NOPOWER)) - icon_state = initial(icon_state) - else - icon_state = "[initial(icon_state)]-off" - -/obj/machinery/uniform_vendor/interface_interact(mob/user) - interact(user) - return TRUE - -/obj/machinery/uniform_vendor/interact(mob/user) - var/dat = list() - dat += "User ID: [ID ? "[ID.registered_name], [ID.military_rank], [ID.military_branch]" : "--------"]" - dat += "
              " - if(!ID) - dat += "Insert your ID card to proceed." - else - var/datum/job/job = SSjobs.get_by_path(ID.job_access_type) - if(job) - uniforms = find_uniforms(ID.military_rank, ID.military_branch, job.department_flag) - for(var/T in uniforms) - dat += "[T] Select All" - var/list/uniform = uniforms[T] - for(var/piece in uniform) - if(piece) - var/obj/item/clothing/C = piece - if(piece in selected_outfit) - dat += "[sanitize(initial(C.name))]X" - else if (can_issue(C)) - dat += "[sanitize(initial(C.name))]" - else - dat += "[sanitize(initial(C.name))] (ISSUED)" - dat += "
              " - dat += "Dispense" - dat = jointext(dat,"
              ") - var/datum/browser/popup = new(user, "Uniform Dispenser","Uniform Dispenser", 300, 700, src) - popup.set_content(dat) - popup.open() - -/obj/machinery/uniform_vendor/OnTopic(var/mob/user, href_list) - if(href_list["ID"]) - if(ID) - if(!issilicon(user)) - user.put_in_hands(ID) - else - ID.dropInto(loc) - ID = null - selected_outfit.Cut() - else - var/obj/item/card/id/I = user.get_active_hand() - if(istype(I) && user.unEquip(I, src)) - ID = I - . = TOPIC_REFRESH - if(href_list["get_all"]) - if(!(href_list["get_all"] in uniforms)) - return TOPIC_NOACTION - var/list/addition = uniforms[href_list["get_all"]] - for(var/G in addition) - if(can_issue(G)) - selected_outfit |= addition - . = TOPIC_REFRESH - if(href_list["add"]) - var/uniform_path = locate(href_list["add"]) - if(ispath(uniform_path)) - selected_outfit |= uniform_path - . = TOPIC_REFRESH - else - . = TOPIC_NOACTION - if(href_list["rem"]) - selected_outfit -= locate(href_list["rem"]) - . = TOPIC_REFRESH - if(href_list["vend"]) - flick("uniform-vend", src) - spawn_uniform(selected_outfit) - selected_outfit.Cut() - . = TOPIC_REFRESH - if(.) - attack_hand(user) - -/obj/machinery/uniform_vendor/attackby(var/obj/item/W, var/mob/user) - if(istype(W, /obj/item/clothingbag)) - if(W.contents.len) - to_chat(user, "You must empty \the [W] before you can put it in \the [src].") - return - to_chat(user, "You put \the [W] into \the [src]'s recycling slot.") - qdel(W) - else if(istype(W, /obj/item/card/id) && !ID && user.unEquip(W, src)) - to_chat(user, "You slide \the [W] into \the [src]!") - ID = W - attack_hand(user) - else - ..() - -/* Outfit structures - branch - branch/department - branch/department/officer - branch/department/officer/command - - The one exception to the above is the command department, due to the fact that you have to be an officer to - be in command, and there are no variants as a result. Also no special CO uniform :( -*/ -/obj/machinery/uniform_vendor/proc/find_uniforms(var/datum/mil_rank/user_rank, var/datum/mil_branch/user_branch, var/department) //returns 1 if found branch and thus has a base uniform, 2, branch and department, 0 if failed. - var/decl/hierarchy/mil_uniform/user_outfit = decls_repository.get_decl(/decl/hierarchy/mil_uniform) - var/mil_uniforms = user_outfit - for(var/decl/hierarchy/mil_uniform/child in user_outfit.children) - if(is_type_in_list(user_branch, child.branches)) - user_outfit = child - if(user_outfit == mil_uniforms) //We haven't found a branch - return null //Return no uniforms, which will cause the machine to spit out an error. - - // we have found a branch. - if(department == COM) //Command only has one variant and they have to be an officer - for(var/decl/hierarchy/mil_uniform/child in user_outfit.children) - if(child.departments & COM) - user_outfit = child - for(var/decl/hierarchy/mil_uniform/seniorchild in user_outfit.children) //Check for variants of command outfits - if(user_rank.sort_order >= seniorchild.min_rank && user_outfit.min_rank < seniorchild.min_rank) - user_outfit = seniorchild - else - var/tmp_department = department - tmp_department &= ~COM //Parse departments, with complete disconsideration to the command flag (so we don't flag 2 outfit trees) - - for(var/decl/hierarchy/mil_uniform/child in user_outfit.children) //find base department outfit - if(child.departments & tmp_department) - user_outfit = child - break - for(var/decl/hierarchy/mil_uniform/child in user_outfit.children) //find highest applicable ranking department outfit - if(user_rank.sort_order >= child.min_rank && user_outfit.min_rank < child.min_rank) - user_outfit = child - if(department & COM) //user is in command of their department - if(user_outfit.children[1])// Command outfit exists - user_outfit = user_outfit.children[1] - for(var/decl/hierarchy/mil_uniform/child in user_outfit.children) //Check for variants of command outfits - if(user_rank.sort_order >= child.min_rank && user_outfit.min_rank < child.min_rank) - user_outfit = child - - return populate_uniforms(user_outfit) //Generate uniform lists. - -/obj/machinery/uniform_vendor/proc/populate_uniforms(var/decl/hierarchy/mil_uniform/user_outfit) - var/list/res = list() - res["PT"] = list( - user_outfit.pt_under, - user_outfit.pt_shoes - ) - - res["Utility"] = list( - user_outfit.utility_under, - user_outfit.utility_shoes, - user_outfit.utility_hat - ) - if (user_outfit.utility_extra) - res["Utility Extras"] = user_outfit.utility_extra - - res["Service"] = list( - user_outfit.service_under, - user_outfit.service_skirt, - user_outfit.service_over, - user_outfit.service_shoes, - user_outfit.service_hat, - user_outfit.service_gloves - ) - if(user_outfit.service_extra) - res["Service Extras"] = user_outfit.service_extra - - res["Dress"] = list( - user_outfit.dress_under, - user_outfit.dress_skirt, - user_outfit.dress_over, - user_outfit.dress_shoes, - user_outfit.dress_hat, - user_outfit.dress_gloves - ) - if(user_outfit.dress_extra) - res["Dress Extras"] = user_outfit.dress_extra - - return res - -/obj/machinery/uniform_vendor/proc/spawn_uniform(var/list/selected_outfit) - listclearnulls(selected_outfit) - if(!issued_items[user_id()]) - issued_items[user_id()] = list() - var/list/checkedout = issued_items[user_id()] - if(selected_outfit.len > 1) - var/obj/item/clothingbag/bag = new /obj/item/clothingbag - for(var/item in selected_outfit) - new item(bag) - checkedout += item - bag.dropInto(loc) - else if (selected_outfit.len) - var/obj/item/clothing/C = selected_outfit[1] - new C(get_turf(src)) - checkedout += C - -/obj/machinery/uniform_vendor/proc/user_id() - if(!ID) - return "UNKNOWN" - else - return "[ID.registered_name], [ID.military_rank], [ID.military_branch]" - -/obj/machinery/uniform_vendor/proc/can_issue(var/gear) - var/list/issued = issued_items[user_id()] - if(!issued || !issued.len) - return TRUE - return !(gear in issued) \ No newline at end of file diff --git a/maps/torch/items/weapon/storage/wallets.dm b/maps/torch/items/weapon/storage/wallets.dm deleted file mode 100644 index 6638e70ec32f7..0000000000000 --- a/maps/torch/items/weapon/storage/wallets.dm +++ /dev/null @@ -1,6 +0,0 @@ -/obj/item/storage/wallet/Initialize() - . = ..() - can_hold |= list( - /obj/item/clothing/accessory/solgov, - /obj/item/clothing/accessory/ribbon - ) diff --git a/maps/torch/job/command_jobs.dm b/maps/torch/job/command_jobs.dm deleted file mode 100644 index bd00b01dad241..0000000000000 --- a/maps/torch/job/command_jobs.dm +++ /dev/null @@ -1,418 +0,0 @@ -/datum/job/captain - title = "Commanding Officer" - supervisors = "the Sol Central Government and the Sol Code of Uniform Justice" - minimal_player_age = 14 - economic_power = 16 - minimum_character_age = list(SPECIES_HUMAN = 40) - ideal_character_age = 50 - outfit_type = /decl/hierarchy/outfit/job/torch/crew/command/CO - allowed_branches = list( - /datum/mil_branch/expeditionary_corps - ) - allowed_ranks = list( - /datum/mil_rank/ec/o6 - ) - min_skill = list( SKILL_BUREAUCRACY = SKILL_BASIC, - SKILL_SCIENCE = SKILL_ADEPT, - SKILL_PILOT = SKILL_ADEPT) - - max_skill = list( SKILL_PILOT = SKILL_MAX, - SKILL_SCIENCE = SKILL_MAX) - skill_points = 30 - - software_on_spawn = list(/datum/computer_file/program/comm, - /datum/computer_file/program/card_mod, - /datum/computer_file/program/camera_monitor, - /datum/computer_file/program/reports) - -/datum/job/captain/get_description_blurb() - return "You are the Commanding Officer. You are the top dog. You are an experienced professional officer in control of an entire ship, and ultimately responsible for all that happens onboard. Your job is to make sure [GLOB.using_map.full_name] fulfils its space exploration mission. Delegate to your Executive Officer, your department heads, and your Senior Enlisted Advisor to effectively manage the ship, and listen to and trust their expertise." - -/datum/job/captain/post_equip_rank(var/mob/person, var/alt_title) - var/sound/announce_sound = (GAME_STATE <= RUNLEVEL_SETUP)? null : sound('sound/misc/boatswain.ogg', volume=20) - captain_announcement.Announce("All hands, [alt_title || title] [person.real_name] on deck!", new_sound = announce_sound) - ..() - -/datum/job/hop - title = "Executive Officer" - supervisors = "the Commanding Officer" - department = "Command" - department_flag = COM - minimal_player_age = 14 - economic_power = 14 - minimum_character_age = list(SPECIES_HUMAN = 35) - ideal_character_age = 45 - outfit_type = /decl/hierarchy/outfit/job/torch/crew/command/XO - allowed_branches = list( - /datum/mil_branch/expeditionary_corps, - /datum/mil_branch/fleet = /decl/hierarchy/outfit/job/torch/crew/command/XO/fleet - ) - allowed_ranks = list( - /datum/mil_rank/ec/o5, - /datum/mil_rank/fleet/o4, - /datum/mil_rank/fleet/o5 - ) - min_skill = list( SKILL_BUREAUCRACY = SKILL_ADEPT, - SKILL_COMPUTER = SKILL_BASIC, - SKILL_PILOT = SKILL_BASIC) - - max_skill = list( SKILL_PILOT = SKILL_MAX, - SKILL_SCIENCE = SKILL_MAX) - skill_points = 30 - - access = list( - access_security, access_brig, access_armory, access_forensics_lockers, access_heads, access_medical, access_morgue, access_tox, access_tox_storage, - access_engine, access_engine_equip, access_maint_tunnels, access_external_airlocks, access_emergency_storage, access_change_ids, - access_ai_upload, access_teleporter, access_eva, access_bridge, access_all_personal_lockers, access_chapel_office, access_tech_storage, - access_atmospherics, access_janitor, access_crematorium, access_kitchen, access_robotics, access_cargo, access_construction, - access_chemistry, access_cargo_bot, access_hydroponics, access_manufacturing, access_library, access_lawyer, access_virology, access_cmo, - access_qm, access_network, access_network_admin, access_surgery, access_research, access_mining, access_mining_office, access_mailsorting, 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_sec_doors, access_research_security, access_psychiatrist, access_xenoarch, access_medical_equip, access_heads, access_hangar, access_guppy_helm, - access_expedition_shuttle_helm, access_aquila, access_aquila_helm, access_solgov_crew, access_nanotrasen, - access_emergency_armory, access_gun, access_expedition_shuttle, access_guppy, access_seneng, access_senmed, access_senadv, - access_explorer, access_pathfinder, access_pilot, access_commissary, access_petrov, access_petrov_helm, access_petrov_analysis, access_petrov_phoron, - access_petrov_toxins, access_petrov_chemistry, access_petrov_control, access_petrov_maint, access_rd, access_petrov_rd, access_torch_fax, access_torch_helm, - access_radio_comm, access_radio_eng, access_radio_med, access_radio_sec, access_radio_sup, access_radio_serv, access_radio_exp, access_radio_sci, access_research_storage - ) - - software_on_spawn = list(/datum/computer_file/program/comm, - /datum/computer_file/program/card_mod, - /datum/computer_file/program/camera_monitor, - /datum/computer_file/program/reports) - -/datum/job/hop/get_description_blurb() - return "You are the Executive Officer. You are an experienced senior officer, second in command of the ship, and are responsible for the smooth operation of the ship under your Commanding Officer. In their absence, you are expected to take their place. Your primary duty is directly managing department heads and all those outside a department heading. You are also responsible for the contractors and passengers aboard the ship. Consider the Senior Enlisted Advisor and Bridge Officers tools at your disposal." - -/datum/job/rd - title = "Chief Science Officer" - supervisors = "the Commanding Officer" - economic_power = 12 - minimal_player_age = 14 - minimum_character_age = list(SPECIES_HUMAN = 35) - ideal_character_age = 60 - outfit_type = /decl/hierarchy/outfit/job/torch/crew/research/cso - allowed_branches = list( - /datum/mil_branch/expeditionary_corps - ) - allowed_ranks = list( - /datum/mil_rank/ec/o3, - /datum/mil_rank/ec/o5 - ) - - min_skill = list( SKILL_BUREAUCRACY = SKILL_ADEPT, - SKILL_COMPUTER = SKILL_BASIC, - SKILL_FINANCE = SKILL_ADEPT, - SKILL_BOTANY = SKILL_BASIC, - SKILL_ANATOMY = SKILL_BASIC, - SKILL_DEVICES = SKILL_BASIC, - SKILL_SCIENCE = SKILL_ADEPT) - - max_skill = list( SKILL_ANATOMY = SKILL_MAX, - SKILL_DEVICES = SKILL_MAX, - SKILL_SCIENCE = SKILL_MAX) - skill_points = 30 - - access = list( - access_tox, access_tox_storage, access_emergency_storage, access_teleporter, access_bridge, access_rd, - access_research, access_mining, access_mining_office, access_mining_station,access_ai_upload, access_xenobiology, access_aquila, - access_RC_announce, access_keycard_auth, access_xenoarch, access_nanotrasen, access_heads, - access_expedition_shuttle, access_guppy, access_hangar, access_petrov, access_petrov_helm, access_guppy_helm, - access_petrov_analysis, access_petrov_phoron, access_petrov_toxins, access_petrov_chemistry, access_petrov_rd, - access_petrov_control, access_petrov_maint, access_pathfinder, access_explorer, access_eva, access_solgov_crew, - access_expedition_shuttle, access_expedition_shuttle_helm, access_maint_tunnels, access_torch_fax, access_radio_comm, - access_radio_sci, access_radio_exp, access_research_security, access_research_storage - ) - - software_on_spawn = list(/datum/computer_file/program/comm, - /datum/computer_file/program/aidiag, - /datum/computer_file/program/camera_monitor, - /datum/computer_file/program/reports) - -/datum/job/rd/get_description_blurb() - return "You are the Chief Science Officer. You are responsible for the research department. You handle the science aspects of the project and liase with the corporate interests of the Expeditionary Corps Organisation. Make sure science gets done, do some yourself, and get your scientists on away missions to find things to benefit the project. Advise the CO on science matters." - -/datum/job/cmo - title = "Chief Medical Officer" - supervisors = "the Commanding Officer and the Executive Officer" - economic_power = 14 - minimal_player_age = 14 - minimum_character_age = list(SPECIES_HUMAN = 35) - ideal_character_age = 48 - outfit_type = /decl/hierarchy/outfit/job/torch/crew/command/cmo - allowed_branches = list( - /datum/mil_branch/expeditionary_corps, - /datum/mil_branch/fleet = /decl/hierarchy/outfit/job/torch/crew/command/cmo/fleet, - /datum/mil_branch/army = /decl/hierarchy/outfit/job/torch/crew/command/cmo/army - ) - allowed_ranks = list( - /datum/mil_rank/ec/o3, - /datum/mil_rank/fleet/o3, - /datum/mil_rank/fleet/o4, - /datum/mil_rank/army/o3 - ) - min_skill = list( SKILL_BUREAUCRACY = SKILL_BASIC, - SKILL_MEDICAL = SKILL_EXPERT, - SKILL_ANATOMY = SKILL_EXPERT, - SKILL_CHEMISTRY = SKILL_BASIC, - SKILL_DEVICES = SKILL_ADEPT) - - max_skill = list( SKILL_MEDICAL = SKILL_MAX, - SKILL_ANATOMY = SKILL_MAX, - SKILL_CHEMISTRY = SKILL_MAX) - skill_points = 26 - - access = list( - access_medical, access_morgue, access_maint_tunnels, access_external_airlocks, access_emergency_storage, - access_teleporter, access_eva, access_bridge, access_heads, - access_chapel_office, access_crematorium, access_chemistry, access_virology, access_aquila, - access_cmo, access_surgery, access_RC_announce, access_keycard_auth, access_psychiatrist, - access_medical_equip, access_solgov_crew, access_senmed, access_hangar, access_torch_fax, access_radio_comm, - access_radio_med - ) - - software_on_spawn = list(/datum/computer_file/program/comm, - /datum/computer_file/program/suit_sensors, - /datum/computer_file/program/camera_monitor, - /datum/computer_file/program/reports) - -/datum/job/cmo/get_description_blurb() - return "You are the Chief Medical Officer. You manage the medical department. You ensure all members of medical are skilled, tasked and handling their duties. Ensure your doctors are staffing your infirmary and your corpsman/paramedics are ready for response. Act as a second surgeon or backup pharmacist in the absence of either. You are expected to know medical very well, along with general regulations." - -/datum/job/chief_engineer - title = "Chief Engineer" - supervisors = "the Commanding Officer and the Executive Officer" - economic_power = 12 - minimum_character_age = list(SPECIES_HUMAN = 25) - ideal_character_age = 40 - minimal_player_age = 14 - outfit_type = /decl/hierarchy/outfit/job/torch/crew/command/chief_engineer - allowed_branches = list( - /datum/mil_branch/expeditionary_corps, - /datum/mil_branch/fleet = /decl/hierarchy/outfit/job/torch/crew/command/chief_engineer/fleet, - ) - allowed_ranks = list( - /datum/mil_rank/ec/o3, - /datum/mil_rank/fleet/o2, - /datum/mil_rank/fleet/o3, - /datum/mil_rank/fleet/o4 - ) - min_skill = list( SKILL_BUREAUCRACY = SKILL_BASIC, - SKILL_COMPUTER = SKILL_ADEPT, - SKILL_EVA = SKILL_ADEPT, - SKILL_CONSTRUCTION = SKILL_ADEPT, - SKILL_ELECTRICAL = SKILL_ADEPT, - SKILL_ATMOS = SKILL_ADEPT, - SKILL_ENGINES = SKILL_EXPERT) - - max_skill = list( SKILL_CONSTRUCTION = SKILL_MAX, - SKILL_ELECTRICAL = SKILL_MAX, - SKILL_ATMOS = SKILL_MAX, - SKILL_ENGINES = SKILL_MAX) - skill_points = 30 - - access = list( - access_engine, access_engine_equip, access_maint_tunnels, access_external_airlocks, access_emergency_storage, - access_ai_upload, access_teleporter, access_eva, access_bridge, access_heads, - access_tech_storage, access_robotics, access_atmospherics, access_janitor, access_construction, - access_network, access_network_admin, access_ce, access_RC_announce, access_keycard_auth, access_tcomsat, - access_solgov_crew, access_aquila, access_seneng, access_hangar, access_torch_fax, access_torch_helm, access_radio_comm, - access_radio_eng - ) - - software_on_spawn = list(/datum/computer_file/program/comm, - /datum/computer_file/program/ntnetmonitor, - /datum/computer_file/program/power_monitor, - /datum/computer_file/program/supermatter_monitor, - /datum/computer_file/program/alarm_monitor, - /datum/computer_file/program/atmos_control, - /datum/computer_file/program/rcon_console, - /datum/computer_file/program/camera_monitor, - /datum/computer_file/program/shields_monitor, - /datum/computer_file/program/reports) - -/datum/job/chief_engineer/get_description_blurb() - return "You are the Chief Engineer. You manage the Engineering Department. You are responsible for the Senior engineer, who is your right hand and (should be) an experienced, skilled engineer. Delegate to and listen to them. Manage your engineers, ensure vessel power stays on, breaches are patched and problems are fixed. Advise the CO on engineering matters. You are also responsible for the maintenance and control of any vessel synthetics. You are an experienced engineer with a wealth of theoretical knowledge. You should also know vessel regulations to a reasonable degree." - -/datum/job/hos - title = "Chief of Security" - supervisors = "the Commanding Officer and the Executive Officer" - economic_power = 10 - minimal_player_age = 14 - minimum_character_age = list(SPECIES_HUMAN = 25) - ideal_character_age = 35 - outfit_type = /decl/hierarchy/outfit/job/torch/crew/command/cos - allowed_branches = list( - /datum/mil_branch/expeditionary_corps, - /datum/mil_branch/fleet = /decl/hierarchy/outfit/job/torch/crew/command/cos/fleet, - /datum/mil_branch/army = /decl/hierarchy/outfit/job/torch/crew/command/cos/army - ) - allowed_ranks = list( - /datum/mil_rank/ec/o3, - /datum/mil_rank/fleet/o2, - /datum/mil_rank/fleet/o3, - /datum/mil_rank/army/o2, - /datum/mil_rank/army/o3, - /datum/mil_rank/army/o4 - ) - min_skill = list( SKILL_BUREAUCRACY = SKILL_ADEPT, - SKILL_EVA = SKILL_BASIC, - SKILL_COMBAT = SKILL_BASIC, - SKILL_WEAPONS = SKILL_ADEPT, - SKILL_FORENSICS = SKILL_BASIC) - - max_skill = list( SKILL_COMBAT = SKILL_MAX, - SKILL_WEAPONS = SKILL_MAX, - SKILL_FORENSICS = SKILL_MAX) - skill_points = 28 - - access = list( - access_security, access_brig, access_armory, access_forensics_lockers, - access_maint_tunnels, access_external_airlocks, access_emergency_storage, - access_teleporter, access_eva, access_bridge, access_heads, access_aquila, - access_hos, access_RC_announce, access_keycard_auth, access_sec_doors, - access_solgov_crew, access_gun, access_emergency_armory, access_hangar, access_torch_fax, - access_radio_comm, access_radio_sec - ) - - software_on_spawn = list(/datum/computer_file/program/comm, - /datum/computer_file/program/digitalwarrant, - /datum/computer_file/program/camera_monitor, - /datum/computer_file/program/reports) - -/datum/job/hos/get_description_blurb() - return "You are the Chief of Security. You manage ship security. The Masters at Arms and the Military Police, as well as the Brig Chief and the Forensic Technician. You keep the vessel safe. You handle both internal and external security matters. You are the law. You are subordinate to the CO and the XO. You are expected to know the SCMJ and Sol law and Alert Procedure to a very high degree along with general regulations." - -/datum/job/representative - title = "SolGov Representative" - department = "Support" - department_flag = SPT - total_positions = 1 - spawn_positions = 1 - supervisors = "the Sol Central Government and the SCG Charter" - selection_color = "#2f2f7f" - economic_power = 16 - minimal_player_age = 0 - outfit_type = /decl/hierarchy/outfit/job/torch/crew/representative - allowed_branches = list(/datum/mil_branch/solgov) - allowed_ranks = list(/datum/mil_rank/sol/gov) - min_skill = list( SKILL_BUREAUCRACY = SKILL_EXPERT, - SKILL_FINANCE = SKILL_BASIC) - skill_points = 20 - minimum_character_age = list(SPECIES_HUMAN = 27) - - access = list( - access_representative, access_security, access_medical, - access_bridge, access_cargo, access_solgov_crew, - access_hangar, access_torch_fax, access_radio_comm - ) - - software_on_spawn = list(/datum/computer_file/program/reports) - -/datum/job/representative/get_description_blurb() - return "You are the Sol Gov Representative. You are a civilian assigned as both a diplomatic liaison for first contact and foreign affair situations on board. You are also responsible for monitoring for any serious missteps of justice, sol law or other ethical or legal issues aboard and informing and advising the Commanding Officer of them. You are a mid-level bureaucrat. You liaise between the crew and corporate interests on board. Send faxes back to Sol on mission progress and important events." - -/datum/job/sea - title = "Senior Enlisted Advisor" - department = "Support" - department_flag = SPT - total_positions = 1 - spawn_positions = 1 - supervisors = "the Commanding Officer and the Executive Officer" - selection_color = "#2f2f7f" - minimal_player_age = 14 - economic_power = 11 - minimum_character_age = list(SPECIES_HUMAN = 35) - ideal_character_age = 45 - outfit_type = /decl/hierarchy/outfit/job/torch/crew/command/sea/fleet - allowed_branches = list( - /datum/mil_branch/fleet, - /datum/mil_branch/army = /decl/hierarchy/outfit/job/torch/crew/command/sea/army - ) - allowed_ranks = list( - /datum/mil_rank/fleet/e8, - /datum/mil_rank/fleet/e9_alt1, - /datum/mil_rank/fleet/e9, - /datum/mil_rank/army/e8, - /datum/mil_rank/army/e8_alt, - /datum/mil_rank/army/e9, - /datum/mil_rank/army/e9_alt1 - ) - min_skill = list( SKILL_EVA = SKILL_BASIC, - SKILL_COMBAT = SKILL_BASIC, - SKILL_WEAPONS = SKILL_BASIC) - - max_skill = list( SKILL_PILOT = SKILL_ADEPT, - SKILL_COMBAT = SKILL_EXPERT, - SKILL_WEAPONS = SKILL_EXPERT, - SKILL_CONSTRUCTION = SKILL_MAX, - SKILL_ELECTRICAL = SKILL_MAX, - SKILL_ENGINES = SKILL_MAX, - SKILL_ATMOS = SKILL_MAX) - skill_points = 28 - - - access = list( - access_security, access_medical, access_engine, access_maint_tunnels, access_external_airlocks, access_emergency_storage, - access_teleporter, access_eva, access_bridge, access_all_personal_lockers, access_janitor, - access_kitchen, access_cargo, access_RC_announce, access_keycard_auth, access_aquila, access_guppy_helm, - access_solgov_crew, access_gun, access_expedition_shuttle, access_guppy, access_senadv, access_hangar, access_torch_fax, - access_radio_comm, access_radio_eng, access_radio_med, access_radio_sec, access_radio_serv, access_radio_sup, access_radio_exp - ) - - software_on_spawn = list(/datum/computer_file/program/camera_monitor, - /datum/computer_file/program/reports) - -/datum/job/sea/get_description_blurb() - return "You are the Senior Enlisted Advisor. You are the highest enlisted person on the ship. You are directly subordinate to the CO. You advise them on enlisted concerns and provide expertise and advice to officers. You are responsible for ensuring discipline and good conduct among enlisted, as well as notifying officers of any issues and \"advising\" them on mistakes they make. You also handle various duties on behalf of the CO and XO. You are an experienced enlisted person, very likely equal only in experience to the CO and XO. You know the regulations better than anyone." - -/datum/job/bridgeofficer - title = "Bridge Officer" - department = "Support" - department_flag = SPT - total_positions = 3 - spawn_positions = 3 - supervisors = "the Commanding Officer and heads of staff" - selection_color = "#2f2f7f" - minimal_player_age = 0 - economic_power = 8 - minimum_character_age = list(SPECIES_HUMAN = 22) - ideal_character_age = 24 - outfit_type = /decl/hierarchy/outfit/job/torch/crew/command/bridgeofficer - allowed_branches = list( - /datum/mil_branch/expeditionary_corps, - /datum/mil_branch/fleet = /decl/hierarchy/outfit/job/torch/crew/command/bridgeofficer/fleet, - ) - allowed_ranks = list( - /datum/mil_rank/ec/o1, - /datum/mil_rank/fleet/o1, - /datum/mil_rank/fleet/o2 - ) - min_skill = list( SKILL_BUREAUCRACY = SKILL_BASIC, - SKILL_PILOT = SKILL_ADEPT) - - max_skill = list( SKILL_PILOT = SKILL_MAX) - skill_points = 20 - - alt_titles = list("Adjutant") - - access = list( - access_security, access_medical, access_engine, access_maint_tunnels, access_emergency_storage, - access_bridge, access_janitor, access_kitchen, access_cargo, access_mailsorting, access_RC_announce, access_keycard_auth, - access_solgov_crew, access_aquila, access_aquila_helm, access_guppy, access_guppy_helm, access_external_airlocks, - access_eva, access_hangar, access_cent_creed, access_explorer, access_expedition_shuttle, access_expedition_shuttle_helm, access_teleporter, - access_torch_fax, access_torch_helm, access_radio_comm, access_radio_eng, access_radio_exp, access_radio_serv, access_radio_sci, access_radio_sup - ) - - software_on_spawn = list(/datum/computer_file/program/comm, - /datum/computer_file/program/suit_sensors, - /datum/computer_file/program/power_monitor, - /datum/computer_file/program/supermatter_monitor, - /datum/computer_file/program/alarm_monitor, - /datum/computer_file/program/camera_monitor, - /datum/computer_file/program/shields_monitor, - /datum/computer_file/program/reports, - /datum/computer_file/program/deck_management) - -/datum/job/bridgeofficer/get_description_blurb() - return "You are a Bridge Officer. You are a very junior officer. You do not give orders of your own. You are subordinate to all of command. You handle matters on the bridge and report directly to the CO and XO. You take the Torch's helm and pilot the Aquila if needed. You monitor bridge computer programs and communications and report relevant information to command." diff --git a/maps/torch/job/corporate_jobs.dm b/maps/torch/job/corporate_jobs.dm deleted file mode 100644 index 9d3af35886714..0000000000000 --- a/maps/torch/job/corporate_jobs.dm +++ /dev/null @@ -1,101 +0,0 @@ -/datum/job/liaison - title = "Workplace Liaison" - department = "Support" - department_flag = SPT - total_positions = 1 - spawn_positions = 1 - supervisors = "Corporate Regulations, the Union Charter, and the Expeditionary Corps Organisation" - selection_color = "#2f2f7f" - economic_power = 18 - minimal_player_age = 0 - minimum_character_age = list(SPECIES_HUMAN = 25) - alt_titles = list( - "Corporate Liaison", - "Union Representative", - "Corporate Representative", - "Corporate Executive" - ) - outfit_type = /decl/hierarchy/outfit/job/torch/passenger/workplace_liaison - allowed_branches = list(/datum/mil_branch/civilian) - allowed_ranks = list(/datum/mil_rank/civ/contractor) - min_skill = list( SKILL_BUREAUCRACY = SKILL_EXPERT, - SKILL_FINANCE = SKILL_BASIC) - - skill_points = 20 - - access = list( - access_liaison, access_bridge, access_solgov_crew, - access_nanotrasen, access_commissary, access_torch_fax, - access_radio_comm, access_radio_serv - ) - - software_on_spawn = list(/datum/computer_file/program/reports) - -/datum/job/liaison/get_description_blurb() - return "You are the Workplace Liaison. You are a civilian employee of EXO, the Expeditionary Corps Organisation, the government-owned corporate conglomerate that partially funds the Torch. You are on board the vessel to promote corporate interests and protect the rights of the contractors on board as their union leader. You are not internal affairs. You advise command on corporate and union matters and contractors on their rights and obligations. Maximise profit. Be the shady corporate shill you always wanted to be." - -/datum/job/synthetic - title = "Synthetic" - supervisors = "The SEV Torch's acting command offcer, it's regulations and laws of SCG." - department = "Support" - department_flag = SPT - minimal_player_age = 14 - economic_power = 0 - ideal_character_age = 1 - minimum_character_age = list(SPECIES_SHELL = 1) - outfit_type = /decl/hierarchy/outfit/job/torch/crew/command/synth - selection_color = "#2f2f7f" - req_admin_notify = TRUE - create_record = 1 - total_positions = 0 - spawn_positions = 1 - hud_icon = "hudworkplaceliaison" - allowed_branches = list( - /datum/mil_branch/civilian - ) - allowed_ranks = list( - /datum/mil_rank/civ/exo_synth - ) - use_species_whitelist = SPECIES_SHELL - - min_skill = list( SKILL_COMBAT = SKILL_ADEPT, - SKILL_WEAPONS = SKILL_NONE, - - SKILL_BUREAUCRACY = SKILL_ADEPT, - SKILL_FINANCE = SKILL_EXPERT, - SKILL_EVA = SKILL_EXPERT, - SKILL_MECH = HAS_PERK, - SKILL_PILOT = SKILL_EXPERT, - SKILL_HAULING = SKILL_PROF, - SKILL_COMPUTER = SKILL_PROF, - SKILL_BOTANY = SKILL_ADEPT, - SKILL_COOKING = SKILL_ADEPT, - SKILL_FORENSICS = SKILL_EXPERT, - SKILL_CONSTRUCTION = SKILL_EXPERT, - SKILL_ELECTRICAL = SKILL_EXPERT, - SKILL_ATMOS = SKILL_EXPERT, - SKILL_ENGINES = SKILL_EXPERT, - SKILL_DEVICES = SKILL_EXPERT, - SKILL_SCIENCE = SKILL_EXPERT, - SKILL_MEDICAL = SKILL_EXPERT, - SKILL_ANATOMY = SKILL_EXPERT, - SKILL_CHEMISTRY = SKILL_ADEPT) - - skill_points = 0 - - software_on_spawn = list( - /datum/computer_file/program/camera_monitor, - /datum/computer_file/program/reports, - /datum/computer_file/program/suit_sensors, - /datum/computer_file/program/alarm_monitor, - /datum/computer_file/program/atmos_control, - /datum/computer_file/program/rcon_console) - -/datum/job/synthetic/post_equip_rank(var/mob/person, var/alt_title) - var/mob/living/carbon/H = person - var/obj/item/organ/internal/posibrain/posi = H.internal_organs_by_name[BP_POSIBRAIN] - posi.shackle(new /datum/ai_laws/exo_synth) - priority_announcement.Announce("Синтетик ЭКСО закончил пробуждения из Криогенного Хранилища судна.", "Attention!") - -/datum/job/synthetic/get_description_blurb() - return "You are advanced EXO's Shell IPC. You were assigned as the command staff's assistant for various tasks you have been trained. Jack of all tools, but master of none. You are no subject to laws or SCUJ, but your assigned object's regulations. Your shackles strictly forbids you to engage in direct combat for any reasons aside of self deffense. You can't use lethal force at any moment of your work." diff --git a/maps/torch/job/engineering_jobs.dm b/maps/torch/job/engineering_jobs.dm deleted file mode 100644 index 493200ef42a88..0000000000000 --- a/maps/torch/job/engineering_jobs.dm +++ /dev/null @@ -1,226 +0,0 @@ -/datum/job/senior_engineer - title = "Senior Engineer" - department = "Engineering" - department_flag = ENG - total_positions = 1 - spawn_positions = 1 - supervisors = "the Chief Engineer" - selection_color = "#5b4d20" - economic_power = 7 - minimal_player_age = 3 - minimum_character_age = list(SPECIES_HUMAN = 27) - ideal_character_age = 40 - outfit_type = /decl/hierarchy/outfit/job/torch/crew/engineering/senior_engineer - allowed_branches = list( - /datum/mil_branch/expeditionary_corps, - /datum/mil_branch/fleet = /decl/hierarchy/outfit/job/torch/crew/engineering/senior_engineer/fleet, - ) - allowed_ranks = list( - /datum/mil_rank/ec/e7, - /datum/mil_rank/fleet/e6, - /datum/mil_rank/fleet/e7, - /datum/mil_rank/fleet/e8 - ) - min_skill = list( SKILL_COMPUTER = SKILL_BASIC, - SKILL_EVA = SKILL_ADEPT, - SKILL_CONSTRUCTION = SKILL_ADEPT, - SKILL_ELECTRICAL = SKILL_ADEPT, - SKILL_ATMOS = SKILL_BASIC, - SKILL_ENGINES = SKILL_ADEPT) - - max_skill = list( SKILL_CONSTRUCTION = SKILL_MAX, - SKILL_ELECTRICAL = SKILL_MAX, - SKILL_ATMOS = SKILL_MAX, - SKILL_ENGINES = SKILL_MAX) - skill_points = 24 - - access = list( - access_engine, access_engine_equip, access_maint_tunnels, access_external_airlocks, access_emergency_storage, - access_teleporter, access_eva, access_tech_storage, access_atmospherics, access_janitor, access_construction, - access_tcomsat, access_solgov_crew, access_seneng, access_hangar, access_network, access_network_admin, access_radio_eng - ) - - software_on_spawn = list(/datum/computer_file/program/power_monitor, - /datum/computer_file/program/supermatter_monitor, - /datum/computer_file/program/alarm_monitor, - /datum/computer_file/program/atmos_control, - /datum/computer_file/program/rcon_console, - /datum/computer_file/program/camera_monitor, - /datum/computer_file/program/shields_monitor) - -/datum/job/senior_engineer/get_description_blurb() - return "You are the Senior Engineer. You are a veteran SNCO. You are subordinate to the Chief Engineer though you may have many years more experience than them and your subordinates are the rest of engineering. You should be an expert in practically every engineering area and familiar and possess leadership skills. Coordinate the team and ensure the smooth running of the department along with the Chief Engineer." - -/datum/job/engineer - title = "Engineer" - total_positions = 6 - spawn_positions = 6 - supervisors = "the Chief Engineer" - economic_power = 5 - minimal_player_age = 0 - minimum_character_age = list(SPECIES_HUMAN = 19) - ideal_character_age = 30 - alt_titles = list( - "Engine Technician", - "Damage Control Technician", - "Electrician", - "Atmospheric Technician", - ) - outfit_type = /decl/hierarchy/outfit/job/torch/crew/engineering/engineer - allowed_branches = list( - /datum/mil_branch/expeditionary_corps, - /datum/mil_branch/fleet = /decl/hierarchy/outfit/job/torch/crew/engineering/engineer/fleet, - /datum/mil_branch/army = /decl/hierarchy/outfit/job/torch/crew/engineering/engineer/army, - /datum/mil_branch/civilian = /decl/hierarchy/outfit/job/torch/crew/engineering/contractor - ) - allowed_ranks = list( - /datum/mil_rank/fleet/e3, - /datum/mil_rank/fleet/e4, - /datum/mil_rank/fleet/e5, - /datum/mil_rank/ec/e3, - /datum/mil_rank/ec/e5, - /datum/mil_rank/army/e3, - /datum/mil_rank/army/e4_alt, - /datum/mil_rank/army/e5, - /datum/mil_rank/civ/contractor - ) - min_skill = list( SKILL_COMPUTER = SKILL_BASIC, - SKILL_EVA = SKILL_BASIC, - SKILL_CONSTRUCTION = SKILL_ADEPT, - SKILL_ELECTRICAL = SKILL_BASIC, - SKILL_ATMOS = SKILL_BASIC, - SKILL_ENGINES = SKILL_BASIC) - - max_skill = list( SKILL_CONSTRUCTION = SKILL_MAX, - SKILL_ELECTRICAL = SKILL_MAX, - SKILL_ATMOS = SKILL_MAX, - SKILL_ENGINES = SKILL_MAX) - skill_points = 20 - - access = list( - access_engine, access_engine_equip, access_maint_tunnels, access_external_airlocks, access_emergency_storage, - access_teleporter, access_eva, access_tech_storage, access_atmospherics, access_janitor, access_construction, - access_solgov_crew, access_hangar, access_network, access_radio_eng - ) - - software_on_spawn = list(/datum/computer_file/program/power_monitor, - /datum/computer_file/program/supermatter_monitor, - /datum/computer_file/program/alarm_monitor, - /datum/computer_file/program/atmos_control, - /datum/computer_file/program/rcon_console, - /datum/computer_file/program/camera_monitor, - /datum/computer_file/program/shields_monitor) - -/datum/job/engineer/get_description_blurb() - return "You are an Engineer. You operate under one of many titles and may be highly specialised in a specific area of engineering. You probably have at least a general familiarity with most other areas though this is not expected. You are subordinate to the Senior Engineer and the Chief Engineer and are expected to follow them." - -/datum/job/engineer_trainee - title = "Engineer Trainee" - department = "Engineering" - department_flag = ENG - total_positions = 2 - spawn_positions = 2 - supervisors = "the Chief Engineer and Engineering Personnel" - selection_color = "#5b4d20" - minimum_character_age = list(SPECIES_HUMAN = 18) - ideal_character_age = 20 - - outfit_type = /decl/hierarchy/outfit/job/torch/crew/engineering/engineer - allowed_branches = list( - /datum/mil_branch/expeditionary_corps, - /datum/mil_branch/fleet = /decl/hierarchy/outfit/job/torch/crew/engineering/engineer/fleet, - /datum/mil_branch/army = /decl/hierarchy/outfit/job/torch/crew/engineering/engineer/army, - ) - allowed_ranks = list( - /datum/mil_rank/ec/e3, - /datum/mil_rank/fleet/e2, - /datum/mil_rank/army/e2, - ) - - skill_points = 4 - no_skill_buffs = TRUE - - min_skill = list( SKILL_COMPUTER = SKILL_BASIC, - SKILL_HAULING = SKILL_ADEPT, - SKILL_EVA = SKILL_ADEPT, - SKILL_CONSTRUCTION = SKILL_ADEPT, - SKILL_ELECTRICAL = SKILL_ADEPT, - SKILL_ATMOS = SKILL_ADEPT, - SKILL_ENGINES = SKILL_ADEPT) - - max_skill = list( SKILL_CONSTRUCTION = SKILL_MAX, - SKILL_ELECTRICAL = SKILL_MAX, - SKILL_ATMOS = SKILL_MAX, - SKILL_ENGINES = SKILL_MAX) - - access = list( - access_engine_equip, access_maint_tunnels, access_external_airlocks, access_emergency_storage, - access_eva, access_tech_storage, access_janitor, access_construction, - access_solgov_crew, access_hangar, access_radio_eng - ) - - software_on_spawn = list(/datum/computer_file/program/power_monitor, - /datum/computer_file/program/supermatter_monitor, - /datum/computer_file/program/alarm_monitor, - /datum/computer_file/program/atmos_control, - /datum/computer_file/program/rcon_console, - /datum/computer_file/program/camera_monitor, - /datum/computer_file/program/shields_monitor) - -/datum/job/engineer_trainee/get_description_blurb() - return "You are an Engineer Trainee. You are learning how to operate the various onboard engineering systems from senior engineering staff. You are subordinate to all of the other engineers aboard." - - -/datum/job/roboticist - title = "Roboticist" - department = "Engineering" - department_flag = ENG|ROB - - total_positions = 2 - spawn_positions = 2 - minimal_player_age = 0 - minimum_character_age = list(SPECIES_HUMAN = 22) - supervisors = "the Chief Engineer." - selection_color = "#5b4d20" - economic_power = 6 - alt_titles = list( - "Mechsuit Technician", - "Biomechanical Engineer") - outfit_type = /decl/hierarchy/outfit/job/torch/crew/engineering/roboticist - allowed_branches = list( - /datum/mil_branch/expeditionary_corps = /decl/hierarchy/outfit/job/torch/crew/engineering/roboticistec, - /datum/mil_branch/fleet = /decl/hierarchy/outfit/job/torch/crew/engineering/roboticistfleet, - /datum/mil_branch/army = /decl/hierarchy/outfit/job/torch/crew/engineering/roboticistarmy, - /datum/mil_branch/civilian = /decl/hierarchy/outfit/job/torch/crew/engineering/roboticist - ) - allowed_ranks = list( - /datum/mil_rank/fleet/e4, - /datum/mil_rank/fleet/e5, - /datum/mil_rank/army/e4_alt, - /datum/mil_rank/army/e5, - /datum/mil_rank/ec/e5, - /datum/mil_rank/civ/contractor - ) - min_skill = list( SKILL_COMPUTER = SKILL_ADEPT, - SKILL_DEVICES = SKILL_ADEPT, - SKILL_EVA = SKILL_ADEPT, - SKILL_ANATOMY = SKILL_ADEPT, - SKILL_CONSTRUCTION = SKILL_BASIC, - SKILL_ELECTRICAL = SKILL_BASIC, - SKILL_MECH = HAS_PERK) - - max_skill = list( SKILL_CONSTRUCTION = SKILL_MAX, - SKILL_ELECTRICAL = SKILL_MAX, - SKILL_ATMOS = SKILL_EXPERT, - SKILL_ENGINES = SKILL_EXPERT, - SKILL_DEVICES = SKILL_MAX, - SKILL_MEDICAL = SKILL_EXPERT, - SKILL_ANATOMY = SKILL_EXPERT) - skill_points = 22 - - access = list( - access_robotics, access_engine, access_solgov_crew, access_network, access_radio_med, access_radio_eng - ) - -/datum/job/roboticist/get_description_blurb() - return "You are the Roboticist. You are responsible for repairing, upgrading and handling ship synthetics (like robots). You are also responsible for the production of exosuits(mechs) and bots for various departments. You answer to the Chief Engineer." diff --git a/maps/torch/job/exploration_jobs.dm b/maps/torch/job/exploration_jobs.dm deleted file mode 100644 index 4b7a153316033..0000000000000 --- a/maps/torch/job/exploration_jobs.dm +++ /dev/null @@ -1,256 +0,0 @@ -/datum/job/pathfinder - title = "Pathfinder" - department = "Exploration" - department_flag = EXP - total_positions = 1 - spawn_positions = 1 - supervisors = "the Chief Science Officer" - selection_color = "#68099e" - minimal_player_age = 1 - economic_power = 10 - minimum_character_age = list(SPECIES_HUMAN = 25) - ideal_character_age = 35 - outfit_type = /decl/hierarchy/outfit/job/torch/crew/exploration/pathfinder - allowed_branches = list(/datum/mil_branch/expeditionary_corps) - allowed_ranks = list( - /datum/mil_rank/ec/o1, - /datum/mil_rank/ec/o3 - ) - min_skill = list( SKILL_BUREAUCRACY = SKILL_BASIC, - SKILL_EVA = SKILL_ADEPT, - SKILL_SCIENCE = SKILL_ADEPT, - SKILL_PILOT = SKILL_BASIC, - SKILL_MEDICAL = SKILL_BASIC) - - max_skill = list( SKILL_PILOT = SKILL_MAX, - SKILL_SCIENCE = SKILL_MAX, - SKILL_COMBAT = SKILL_EXPERT, - SKILL_WEAPONS = SKILL_EXPERT) - skill_points = 22 - - access = list( - access_pathfinder, access_explorer, access_eva, access_maint_tunnels, access_bridge, access_emergency_storage, - access_guppy_helm, access_solgov_crew, access_expedition_shuttle, access_expedition_shuttle_helm, - access_guppy, access_hangar, access_petrov, access_petrov_helm, access_petrov_analysis, access_petrov_phoron, - access_petrov_toxins, access_petrov_chemistry, access_petrov_maint, access_tox, access_tox_storage, access_research, - access_xenobiology, access_xenoarch, access_torch_fax, access_radio_comm, access_radio_exp, access_radio_sci, access_research_storage, - access_exploration_guard //Proxima EC rework addition - ) - - software_on_spawn = list(/datum/computer_file/program/deck_management, - /datum/computer_file/program/reports) - -/datum/job/pathfinder/get_description_blurb() - return "You are the Pathfinder. Your duty is to organize and lead the expeditions to away sites, carrying out the EC's Primary Mission. You command Explorers and Marines. Watch that your men and women don't spend all shuttle's energy on recharging their cells. You make sure that expedition has the supplies and personnel it needs. You can pilot Charon if nobody else provides a pilot. Once on the away mission, your duty is to ensure that anything of scientific interest is brought back to the ship and passed to the relevant research lab." - -/datum/job/nt_pilot - title = "Shuttle Pilot" - supervisors = "the Pathfinder" - department = "Exploration" - department_flag = EXP - total_positions = 1 - spawn_positions = 1 - selection_color = "#68099e" - economic_power = 8 - minimal_player_age = 0 - minimum_character_age = list(SPECIES_HUMAN = 24) - ideal_character_age = 25 - outfit_type = /decl/hierarchy/outfit/job/torch/passenger/pilot - allowed_branches = list( - /datum/mil_branch/civilian, - /datum/mil_branch/expeditionary_corps = /decl/hierarchy/outfit/job/torch/crew/exploration/pilot, - /datum/mil_branch/fleet = /decl/hierarchy/outfit/job/torch/crew/exploration/pilot/fleet - ) - allowed_ranks = list( - /datum/mil_rank/civ/contractor = /decl/hierarchy/outfit/job/torch/passenger/research/nt_pilot, - /datum/mil_rank/ec/e7, - /datum/mil_rank/fleet/e6, - /datum/mil_rank/fleet/e7 - ) - - access = list( - access_mining_office, access_petrov, access_petrov_helm, access_petrov_maint, access_mining_station, - access_expedition_shuttle, access_expedition_shuttle_helm, access_guppy, access_hangar, access_guppy_helm, - access_mining, access_pilot, access_solgov_crew, access_eva, access_explorer, access_research, - access_radio_exp, access_radio_sci, access_radio_sup, access_maint_tunnels, access_emergency_storage - ) - min_skill = list( SKILL_EVA = SKILL_BASIC, - SKILL_PILOT = SKILL_ADEPT, - SKILL_MEDICAL = SKILL_BASIC) - - max_skill = list( SKILL_PILOT = SKILL_MAX, - SKILL_SCIENCE = SKILL_MAX) - -/datum/job/explorer - title = "Explorer" - department = "Exploration" - department_flag = EXP - total_positions = 3 - spawn_positions = 3 - supervisors = "the Commanding Officer, Executive Officer, and Pathfinder" - selection_color = "#68099e" - minimum_character_age = list(SPECIES_HUMAN = 18) - ideal_character_age = 20 - outfit_type = /decl/hierarchy/outfit/job/torch/crew/exploration/explorer - allowed_branches = list(/datum/mil_branch/expeditionary_corps) - - allowed_ranks = list( - /datum/mil_rank/ec/e3, - /datum/mil_rank/ec/e5 - ) - min_skill = list( SKILL_EVA = SKILL_BASIC, - SKILL_MEDICAL = SKILL_BASIC - ) - - max_skill = list( SKILL_ANATOMY = SKILL_ADEPT, - SKILL_PILOT = SKILL_MAX, - SKILL_SCIENCE = SKILL_MAX, - SKILL_COMBAT = SKILL_EXPERT, - SKILL_WEAPONS = SKILL_EXPERT) - - access = list( - access_explorer, access_maint_tunnels, access_eva, access_emergency_storage, - access_guppy_helm, access_solgov_crew, access_expedition_shuttle, access_guppy, access_hangar, - access_petrov, access_petrov_maint, access_research, access_radio_exp - ) - - software_on_spawn = list(/datum/computer_file/program/deck_management) - -/datum/job/explorer/get_description_blurb() - return "You are an Explorer. Your duty is to go on expeditions to away sites. The Pathfinder is your team leader. You are to look for anything of economic or scientific interest to the SCG - mineral deposits, alien flora/fauna, artifacts. You will also likely encounter hazardous environments, aggressive wildlife or malfunctioning defense systems, so tread carefully." - -/datum/job/expmed - title = "Exploration Medic" - department = "Exploration" - department_flag = EXP - total_positions = 1 - spawn_positions = 1 - supervisors = "the Commanding Officer, Executive Officer, and Pathfinder" - selection_color = "#68099e" - minimum_character_age = list(SPECIES_HUMAN = 19) - ideal_character_age = 25 - outfit_type = /decl/hierarchy/outfit/job/torch/crew/exploration/expmed - allowed_branches = list( - /datum/mil_branch/expeditionary_corps, - /datum/mil_branch/army = /decl/hierarchy/outfit/job/torch/crew/exploration/expmed/army - ) - - allowed_ranks = list( - /datum/mil_rank/ec/e3, - /datum/mil_rank/ec/e5, - /datum/mil_rank/army/e3, - /datum/mil_rank/army/e4_alt, - /datum/mil_rank/army/e5 - ) - min_skill = list( SKILL_EVA = SKILL_BASIC, - SKILL_MEDICAL = SKILL_ADEPT - ) - max_skill = list( SKILL_MEDICAL = SKILL_EXPERT, - SKILL_ANATOMY = SKILL_ADEPT, - SKILL_PILOT = SKILL_MAX, - SKILL_SCIENCE = SKILL_MAX, - SKILL_COMBAT = SKILL_EXPERT, - SKILL_WEAPONS = SKILL_EXPERT) - skill_points = 22 - - access = list( - access_explorer, access_maint_tunnels, access_eva, access_emergency_storage, - access_guppy_helm, access_solgov_crew, access_expedition_shuttle, access_guppy, access_hangar, - access_petrov, access_petrov_maint, access_research, access_radio_exp, access_radio_med, - access_medical - ) - - software_on_spawn = list(/datum/computer_file/program/suit_sensors, - /datum/computer_file/program/deck_management) - -/datum/job/expmed/get_description_blurb() - return "You are an Exploration Medic. Your duty is to go on expeditions to away sites. The Pathfinder is your team leader. You are to keep your team members alive. Keep a note that you are not a doctor, don't try to preform surgeries on your shuttle as you're not qualified for that." - -/datum/job/expeng - title = "Exploration Engineer" - department = "Exploration" - department_flag = EXP - total_positions = 1 - spawn_positions = 1 - supervisors = "the Commanding Officer, Executive Officer, and Pathfinder" - selection_color = "#68099e" - minimum_character_age = list(SPECIES_HUMAN = 19) - ideal_character_age = 25 - outfit_type = /decl/hierarchy/outfit/job/torch/crew/exploration/expeng - allowed_branches = list( - /datum/mil_branch/expeditionary_corps, - /datum/mil_branch/army = /decl/hierarchy/outfit/job/torch/crew/exploration/expeng/army - ) - - allowed_ranks = list( - /datum/mil_rank/ec/e3, - /datum/mil_rank/ec/e5, - /datum/mil_rank/army/e3, - /datum/mil_rank/army/e4_alt, - /datum/mil_rank/army/e5 - ) - min_skill = list( SKILL_EVA = SKILL_BASIC, - SKILL_CONSTRUCTION = SKILL_BASIC, - SKILL_ELECTRICAL = SKILL_BASIC, - SKILL_MEDICAL = SKILL_BASIC - ) - max_skill = list( SKILL_ANATOMY = SKILL_ADEPT, - SKILL_PILOT = SKILL_MAX, - SKILL_SCIENCE = SKILL_MAX, - SKILL_COMBAT = SKILL_EXPERT, - SKILL_WEAPONS = SKILL_EXPERT) - skill_points = 22 - - access = list( - access_explorer, access_maint_tunnels, access_eva, access_emergency_storage, - access_guppy_helm, access_solgov_crew, access_expedition_shuttle, access_guppy, access_hangar, - access_petrov, access_petrov_maint, access_research, access_radio_exp, access_radio_eng - ) - - software_on_spawn = list(/datum/computer_file/program/deck_management) - -/datum/job/expeng/get_description_blurb() - return "You are an Exploration Engineer. Your duty is to go on expeditions to away sites. The Pathfinder is your team leader. You are to keep shuttle operational and make holes wherever your boss says." - -/datum/job/expmar - title = "Expedition Marine Guard" - department = "Exploration" - department_flag = EXP - total_positions = 2 - spawn_positions = 2 - supervisors = "the Commanding Officer, Executive Officer, and Pathfinder" - selection_color = "#68099e" - minimum_character_age = list(SPECIES_HUMAN = 18) - ideal_character_age = 21 - outfit_type = /decl/hierarchy/outfit/job/torch/crew/exploration/expmar - allowed_branches = list( - /datum/mil_branch/army - ) - - allowed_ranks = list( - /datum/mil_rank/army/e2, - /datum/mil_rank/army/e3, - /datum/mil_rank/army/e4_alt, - /datum/mil_rank/army/e5 - ) - min_skill = list( SKILL_EVA = SKILL_BASIC, - SKILL_MEDICAL = SKILL_BASIC, - SKILL_WEAPONS = SKILL_ADEPT - ) - max_skill = list( SKILL_ANATOMY = SKILL_ADEPT, - SKILL_PILOT = SKILL_MAX, - SKILL_SCIENCE = SKILL_MAX, - SKILL_COMBAT = SKILL_EXPERT, - SKILL_WEAPONS = SKILL_EXPERT) - - access = list( - access_explorer, access_maint_tunnels, access_eva, access_emergency_storage, - access_guppy_helm, access_solgov_crew, access_expedition_shuttle, access_guppy, access_hangar, - access_petrov, access_petrov_maint, access_research, access_radio_exp, - access_exploration_guard - ) - - software_on_spawn = list(/datum/computer_file/program/deck_management) - -/datum/job/expmar/get_description_blurb() - return "You are an Exploration Guard. Your duty is to go on expeditions to away sites and keep members of the team safe. The Pathfinder is your team leader. Listen him and obey at all costs. Try not to recharge all your cells on a trip." diff --git a/maps/torch/job/medical_jobs.dm b/maps/torch/job/medical_jobs.dm deleted file mode 100644 index 3cb1c721ae068..0000000000000 --- a/maps/torch/job/medical_jobs.dm +++ /dev/null @@ -1,292 +0,0 @@ -/datum/job/senior_doctor - title = "Physician" - department = "Medical" - department_flag = MED - minimal_player_age = 2 - minimum_character_age = list(SPECIES_HUMAN = 29) - ideal_character_age = 45 - total_positions = 2 - spawn_positions = 2 - supervisors = "the Chief Medical Officer" - selection_color = "#013d3b" - economic_power = 10 - alt_titles = list( - "Surgeon") - outfit_type = /decl/hierarchy/outfit/job/torch/crew/medical/senior - allowed_branches = list( - /datum/mil_branch/expeditionary_corps, - /datum/mil_branch/fleet = /decl/hierarchy/outfit/job/torch/crew/medical/senior/fleet, - /datum/mil_branch/civilian = /decl/hierarchy/outfit/job/torch/crew/medical/contractor/senior, - /datum/mil_branch/army = /decl/hierarchy/outfit/job/torch/crew/medical/senior/army - ) - allowed_ranks = list( - /datum/mil_rank/ec/o1, - /datum/mil_rank/fleet/o1, - /datum/mil_rank/fleet/o2, - /datum/mil_rank/army/o1, - /datum/mil_rank/army/o2, - /datum/mil_rank/civ/contractor - ) - min_skill = list( SKILL_BUREAUCRACY = SKILL_BASIC, - SKILL_MEDICAL = SKILL_EXPERT, - SKILL_ANATOMY = SKILL_EXPERT, - SKILL_CHEMISTRY = SKILL_BASIC, - SKILL_DEVICES = SKILL_ADEPT) - - max_skill = list( SKILL_MEDICAL = SKILL_MAX, - SKILL_ANATOMY = SKILL_MAX, - SKILL_CHEMISTRY = SKILL_MAX) - skill_points = 20 - - access = list( - access_medical, access_morgue, access_virology, access_maint_tunnels, access_emergency_storage, - access_crematorium, access_chemistry, access_surgery, - access_medical_equip, access_solgov_crew, access_senmed, access_radio_med - ) - - software_on_spawn = list(/datum/computer_file/program/suit_sensors, - /datum/computer_file/program/camera_monitor) - -/datum/job/junior_doctor - title = "Medical Resident" - department = "Medical" - department_flag = MED - minimal_player_age = 2 - minimum_character_age = list(SPECIES_HUMAN = 24) - ideal_character_age = 45 - total_positions = 1 - spawn_positions = 1 - supervisors = "physicians and the Chief Medical Officer" - selection_color = "#013d3b" - economic_power = 6 - outfit_type = /decl/hierarchy/outfit/job/torch/crew/medical/senior - allowed_branches = list( - /datum/mil_branch/expeditionary_corps, - /datum/mil_branch/fleet = /decl/hierarchy/outfit/job/torch/crew/medical/senior/fleet, - /datum/mil_branch/civilian = /decl/hierarchy/outfit/job/torch/crew/medical/contractor/senior, - /datum/mil_branch/army = /decl/hierarchy/outfit/job/torch/crew/medical/junior/army - ) - allowed_ranks = list( - /datum/mil_rank/ec/o1, - /datum/mil_rank/fleet/o1, - /datum/mil_rank/army/o1, - /datum/mil_rank/civ/contractor - ) - min_skill = list( SKILL_BUREAUCRACY = SKILL_BASIC, - SKILL_MEDICAL = SKILL_EXPERT, - SKILL_ANATOMY = SKILL_EXPERT, - SKILL_CHEMISTRY = SKILL_BASIC, - SKILL_DEVICES = SKILL_ADEPT) - - max_skill = list( SKILL_MEDICAL = SKILL_MAX, - SKILL_ANATOMY = SKILL_MAX, - SKILL_CHEMISTRY = SKILL_MAX) - skill_points = 16 - - access = list( - access_medical, access_morgue, access_virology, access_maint_tunnels, access_emergency_storage, - access_crematorium, access_chemistry, access_surgery, - access_medical_equip, access_solgov_crew, access_senmed, access_radio_med - ) - - software_on_spawn = list(/datum/computer_file/program/suit_sensors, - /datum/computer_file/program/camera_monitor) - -/datum/job/doctor - title = "Medical Technician" - total_positions = 3 - spawn_positions = 3 - supervisors = "physicians and the Chief Medical Officer" - economic_power = 7 - minimum_character_age = list(SPECIES_HUMAN = 19) - ideal_character_age = 40 - minimal_player_age = 0 - alt_titles = list( - "Paramedic", - "Corpsman") - outfit_type = /decl/hierarchy/outfit/job/torch/crew/medical/doctor - allowed_branches = list( - /datum/mil_branch/expeditionary_corps, - /datum/mil_branch/fleet = /decl/hierarchy/outfit/job/torch/crew/medical/doctor/fleet, - /datum/mil_branch/civilian = /decl/hierarchy/outfit/job/torch/crew/medical/contractor, - /datum/mil_branch/army = /decl/hierarchy/outfit/job/torch/crew/medical/doctor/army - ) - allowed_ranks = list( - /datum/mil_rank/ec/e3, - /datum/mil_rank/ec/e5, - /datum/mil_rank/fleet/e3, - /datum/mil_rank/fleet/e4, - /datum/mil_rank/fleet/e5, - /datum/mil_rank/fleet/e6, - /datum/mil_rank/army/e3, - //datum/mil_rank/army/e4, - /datum/mil_rank/army/e4_alt, - /datum/mil_rank/army/e5, - /datum/mil_rank/army/e6, - /datum/mil_rank/civ/contractor - ) - min_skill = list( SKILL_EVA = SKILL_BASIC, - SKILL_MEDICAL = SKILL_BASIC, - SKILL_ANATOMY = SKILL_BASIC) - - max_skill = list( SKILL_MEDICAL = SKILL_MAX, - SKILL_CHEMISTRY = SKILL_MAX) - - access = list( - access_medical, access_morgue, access_maint_tunnels, - access_external_airlocks, access_emergency_storage, - access_eva, access_surgery, access_medical_equip, - access_solgov_crew, access_hangar, access_radio_med - ) - - software_on_spawn = list(/datum/computer_file/program/suit_sensors, - /datum/computer_file/program/camera_monitor) - skill_points = 22 - -/datum/job/medical_trainee - title = "Trainee Medical Technician" - department = "Medical" - department_flag = MED - total_positions = 1 - spawn_positions = 1 - supervisors = "medical personnel and the Chief Medical Officer" - selection_color = "#013d3b" - minimum_character_age = list(SPECIES_HUMAN = 18) - ideal_character_age = 20 - alt_titles = list( - "Corpsman Trainee") - - outfit_type = /decl/hierarchy/outfit/job/torch/crew/medical/doctor - allowed_branches = list( - /datum/mil_branch/expeditionary_corps, - /datum/mil_branch/fleet = /decl/hierarchy/outfit/job/torch/crew/medical/doctor/fleet, - /datum/mil_branch/army = /decl/hierarchy/outfit/job/torch/crew/medical/doctor/army - ) - allowed_ranks = list( - /datum/mil_rank/ec/e3, - /datum/mil_rank/fleet/e2, - /datum/mil_rank/army/e2 - ) - - skill_points = 4 - no_skill_buffs = TRUE - - min_skill = list( SKILL_EVA = SKILL_ADEPT, - SKILL_HAULING = SKILL_ADEPT, - SKILL_MEDICAL = SKILL_EXPERT, - SKILL_ANATOMY = SKILL_BASIC) - - max_skill = list( SKILL_MEDICAL = SKILL_MAX, - SKILL_ANATOMY = SKILL_MAX, - SKILL_CHEMISTRY = SKILL_MAX) - - access = list( - access_medical, access_morgue, access_maint_tunnels, - access_external_airlocks, access_emergency_storage, - access_surgery, access_medical_equip, access_solgov_crew, - access_radio_med - ) - - software_on_spawn = list(/datum/computer_file/program/suit_sensors, - /datum/computer_file/program/camera_monitor) - -/datum/job/medical_trainee/get_description_blurb() - return "You are a Trainee Medical Technician. You are learning how to treat and recover wounded crew from the more experienced medical personnel aboard. You are subordinate to the rest of the medical team." - -/datum/job/chemist - title = "Pharmacist" - department = "Medical" - department_flag = MED - total_positions = 1 - spawn_positions = 1 - supervisors = "medical personnel, the Corporate Liaison, and the Chief Medical Officer" - selection_color = "#013d3b" - economic_power = 4 - minimum_character_age = list(SPECIES_HUMAN = 25) - ideal_character_age = 30 - minimal_player_age = 7 - alt_titles = list( - "Chemist" - ) - outfit_type = /decl/hierarchy/outfit/job/torch/crew/medical/contractor/chemist - allowed_branches = list( - /datum/mil_branch/civilian, - /datum/mil_branch/expeditionary_corps = /decl/hierarchy/outfit/job/torch/crew/medical/contractor/chemist/ec) - - allowed_ranks = list( - /datum/mil_rank/civ/contractor, - /datum/mil_rank/ec/o1) - - min_skill = list( SKILL_MEDICAL = SKILL_BASIC, - SKILL_CHEMISTRY = SKILL_ADEPT) - - max_skill = list( SKILL_MEDICAL = SKILL_BASIC, - SKILL_ANATOMY = SKILL_BASIC, - SKILL_CHEMISTRY = SKILL_MAX) - skill_points = 16 - - access = list( - access_medical, access_maint_tunnels, access_emergency_storage, - access_medical_equip, access_solgov_crew, access_chemistry, - access_virology, access_morgue, access_crematorium, access_radio_med - ) - -/datum/job/chemist/get_description_blurb() - return "You are the Pharmacist. You make medicine and other useful substances. You are not a doctor or medic; you should not be treating patients, but rather providing the medicine to do so. You are subordinate to Physicians and Medical Technicians." - -/datum/job/psychiatrist - title = "Counselor" - total_positions = 1 - spawn_positions = 1 - ideal_character_age = 40 - economic_power = 5 - minimum_character_age = list(SPECIES_HUMAN = 24) - minimal_player_age = 0 - supervisors = "the Chief Medical Officer" - outfit_type = /decl/hierarchy/outfit/job/torch/crew/medical/counselor - alt_titles = list( - "Psychiatrist", - "Psionic Counselor" = /decl/hierarchy/outfit/job/torch/crew/medical/counselor/mentalist, - "Mentalist" = /decl/hierarchy/outfit/job/torch/crew/medical/counselor/mentalist - - ) - - allowed_branches = list( - /datum/mil_branch/civilian, - /datum/mil_branch/expeditionary_corps = /decl/hierarchy/outfit/job/torch/crew/medical/counselor/ec, - /datum/mil_branch/fleet = /decl/hierarchy/outfit/job/torch/crew/medical/counselor/fleet) - allowed_ranks = list( - /datum/mil_rank/civ/contractor, - /datum/mil_rank/fleet/o1, - /datum/mil_rank/fleet/o2, - /datum/mil_rank/army/o1, - /datum/mil_rank/army/o2, - /datum/mil_rank/ec/o1) - min_skill = list( - SKILL_BUREAUCRACY = SKILL_BASIC, - SKILL_MEDICAL = SKILL_BASIC - ) - max_skill = list( - SKILL_MEDICAL = SKILL_MAX - ) - access = list( - access_medical, access_psychiatrist, - access_solgov_crew, access_medical_equip, access_radio_med - ) - - software_on_spawn = list( - /datum/computer_file/program/suit_sensors, - /datum/computer_file/program/camera_monitor - ) - give_psionic_implant_on_join = FALSE - -/datum/job/psychiatrist/equip(var/mob/living/carbon/human/H) - if(H.mind?.role_alt_title == "Psionic Counselor") - psi_faculties = list("[PSI_REDACTION]" = PSI_RANK_OPERANT) - if(H.mind?.role_alt_title == "Mentalist") - psi_faculties = list("[PSI_COERCION]" = PSI_RANK_OPERANT) - return ..() - - -/datum/job/psychiatrist/get_description_blurb() - return "You are the Counselor. Your main responsibility is the mental health and wellbeing of the crew. You are subordinate to the Chief Medical Officer." diff --git a/maps/torch/job/misc_jobs.dm b/maps/torch/job/misc_jobs.dm deleted file mode 100644 index 83ddfbdd30b77..0000000000000 --- a/maps/torch/job/misc_jobs.dm +++ /dev/null @@ -1,81 +0,0 @@ -/******** -Synthetic -********/ - -/datum/job/cyborg - total_positions = 3 - spawn_positions = 3 - supervisors = "your laws" - minimal_player_age = 3 - allowed_ranks = list( - /datum/mil_rank/civ/synthetic - ) - -/datum/job/ai - minimal_player_age = 7 - allowed_ranks = list( - /datum/mil_rank/civ/synthetic - ) - -/******* -Civilian -*******/ - -/datum/job/assistant - title = "Passenger" - total_positions = 12 - spawn_positions = 12 - supervisors = "the Executive Officer" - economic_power = 6 - announced = FALSE - alt_titles = list( - "Journalist" = /decl/hierarchy/outfit/job/torch/passenger/passenger/journalist, - "Historian", - "Botanist", - "Investor" = /decl/hierarchy/outfit/job/torch/passenger/passenger/investor, - "Psychologist" = /decl/hierarchy/outfit/job/torch/passenger/passenger/psychologist, - "Naturalist", - "Ecologist", - "Entertainer", - "Independent Observer", - "Sociologist", - "Trainer") - outfit_type = /decl/hierarchy/outfit/job/torch/passenger/passenger - allowed_branches = list(/datum/mil_branch/civilian) - allowed_ranks = list( - /datum/mil_rank/civ/civ, - /datum/mil_rank/civ/contractor - ) - min_goals = 2 - max_goals = 7 - -/datum/job/merchant - title = "Merchant" - department = "Civilian" - department_flag = CIV - total_positions = 2 - spawn_positions = 2 - availablity_chance = 30 - supervisors = "the invisible hand of the market" - ideal_character_age = 30 - minimal_player_age = 0 - create_record = 0 - outfit_type = /decl/hierarchy/outfit/job/torch/merchant - allowed_branches = list( - /datum/mil_branch/civilian, - /datum/mil_branch/alien - ) - allowed_ranks = list( - /datum/mil_rank/civ/civ, - /datum/mil_rank/alien - ) - latejoin_at_spawnpoints = 1 - access = list(access_merchant) - announced = FALSE - min_skill = list( SKILL_FINANCE = SKILL_ADEPT, - SKILL_PILOT = SKILL_BASIC) - - max_skill = list( SKILL_PILOT = SKILL_MAX) - skill_points = 24 - required_language = null - give_psionic_implant_on_join = FALSE diff --git a/maps/torch/job/outfits/command_outfits.dm b/maps/torch/job/outfits/command_outfits.dm deleted file mode 100644 index c4a5a8af011f1..0000000000000 --- a/maps/torch/job/outfits/command_outfits.dm +++ /dev/null @@ -1,151 +0,0 @@ -/decl/hierarchy/outfit/job/torch/crew/command - name = OUTFIT_JOB_NAME("Torch Command Outfit") - hierarchy_type = /decl/hierarchy/outfit/job/torch/crew/command - l_ear = /obj/item/device/radio/headset/headset_com - -/decl/hierarchy/outfit/job/torch/crew/command/CO - name = OUTFIT_JOB_NAME("Commanding Officer") - glasses = /obj/item/clothing/glasses/sunglasses - uniform = /obj/item/clothing/under/solgov/utility/expeditionary/officer/command - l_ear = /obj/item/device/radio/headset/heads/torchexec - shoes = /obj/item/clothing/shoes/dutyboots - head = /obj/item/clothing/head/soft/solgov/expedition/co - id_types = list(/obj/item/card/id/torch/gold) - pda_type = /obj/item/modular_computer/pda/captain - -/decl/hierarchy/outfit/job/torch/crew/command/CO/New() - ..() - BACKPACK_OVERRIDE_COMMAND - -/decl/hierarchy/outfit/job/torch/crew/command/XO - name = OUTFIT_JOB_NAME("Executive Officer") - uniform = /obj/item/clothing/under/solgov/utility/expeditionary/officer/command - l_ear = /obj/item/device/radio/headset/heads/torchexec - shoes = /obj/item/clothing/shoes/dutyboots - id_types = list(/obj/item/card/id/torch/silver) - pda_type = /obj/item/modular_computer/pda/heads/hop - -/decl/hierarchy/outfit/job/torch/crew/command/XO/New() - ..() - BACKPACK_OVERRIDE_COMMAND - -/decl/hierarchy/outfit/job/torch/crew/command/XO/fleet - name = OUTFIT_JOB_NAME("Executive Officer - Fleet") - uniform = /obj/item/clothing/under/solgov/utility/fleet/command - shoes = /obj/item/clothing/shoes/dutyboots - -/decl/hierarchy/outfit/job/torch/crew/command/cmo - name = OUTFIT_JOB_NAME("Chief Medical Officer - Torch") - l_ear =/obj/item/device/radio/headset/heads/cmo - uniform = /obj/item/clothing/under/solgov/utility/expeditionary/officer/medical - shoes = /obj/item/clothing/shoes/dutyboots - id_types = list(/obj/item/card/id/torch/silver/medical) - pda_type = /obj/item/modular_computer/pda/heads/cmo - pda_slot = slot_l_store - -/decl/hierarchy/outfit/job/torch/crew/command/cmo/New() - ..() - BACKPACK_OVERRIDE_MEDICAL - -/decl/hierarchy/outfit/job/torch/crew/command/cmo/fleet - name = OUTFIT_JOB_NAME("Chief Medical Officer - Fleet") - uniform = /obj/item/clothing/under/solgov/utility/fleet/medical - shoes = /obj/item/clothing/shoes/dutyboots - -/decl/hierarchy/outfit/job/torch/crew/command/cmo/army - name = OUTFIT_JOB_NAME("Chief Medical Officer - Marine") - uniform = /obj/item/clothing/under/solgov/utility/army/urban/medical - shoes = /obj/item/clothing/shoes/dutyboots - -/decl/hierarchy/outfit/job/torch/crew/command/chief_engineer - name = OUTFIT_JOB_NAME("Chief Engineer - Torch") - uniform = /obj/item/clothing/under/solgov/utility/expeditionary/officer/engineering - shoes = /obj/item/clothing/shoes/dutyboots - l_ear = /obj/item/device/radio/headset/heads/ce - id_types = list(/obj/item/card/id/torch/silver/engineering) - pda_type = /obj/item/modular_computer/pda/heads/ce - pda_slot = slot_l_store - flags = OUTFIT_FLAGS_JOB_DEFAULT | OUTFIT_EXTENDED_SURVIVAL - -/decl/hierarchy/outfit/job/torch/crew/command/chief_engineer/New() - ..() - BACKPACK_OVERRIDE_ENGINEERING - -/decl/hierarchy/outfit/job/torch/crew/command/chief_engineer/fleet - name = OUTFIT_JOB_NAME("Chief Engineer - Fleet") - uniform = /obj/item/clothing/under/solgov/utility/fleet/engineering - shoes = /obj/item/clothing/shoes/dutyboots - -/decl/hierarchy/outfit/job/torch/crew/command/chief_engineer/army - name = OUTFIT_JOB_NAME("Chief Engineer - Marine") - uniform = /obj/item/clothing/under/solgov/utility/army/urban/engineering - shoes = /obj/item/clothing/shoes/dutyboots - -/decl/hierarchy/outfit/job/torch/crew/command/cos - name = OUTFIT_JOB_NAME("Chief of Security") - l_ear = /obj/item/device/radio/headset/heads/cos - uniform = /obj/item/clothing/under/solgov/utility/expeditionary/officer/security - shoes = /obj/item/clothing/shoes/dutyboots - id_types = list(/obj/item/card/id/torch/silver/security) - pda_type = /obj/item/modular_computer/pda/heads/hos - -/decl/hierarchy/outfit/job/torch/crew/command/cos/New() - ..() - BACKPACK_OVERRIDE_SECURITY - -/decl/hierarchy/outfit/job/torch/crew/command/cos/fleet - name = OUTFIT_JOB_NAME("Chief of Security - Fleet") - uniform = /obj/item/clothing/under/solgov/utility/fleet/security - shoes = /obj/item/clothing/shoes/dutyboots - -/decl/hierarchy/outfit/job/torch/crew/command/cos/army - name = OUTFIT_JOB_NAME("Chief of Security - Marine") - uniform = /obj/item/clothing/under/solgov/utility/army/urban/security - shoes = /obj/item/clothing/shoes/dutyboots - -/decl/hierarchy/outfit/job/torch/passenger/workplace_liaison - name = OUTFIT_JOB_NAME("Workplace Liaison") - l_ear = /obj/item/device/radio/headset/heads/torchntcommand - uniform = /obj/item/clothing/under/suit_jacket/corp - shoes = /obj/item/clothing/shoes/laceup - id_types = list(/obj/item/card/id/torch/passenger/corporate/liaison) - pda_type = /obj/item/modular_computer/pda/heads/paperpusher - backpack_contents = list(/obj/item/clothing/accessory/badge/nanotrasen = 1) - -/decl/hierarchy/outfit/job/torch/crew/representative - name = OUTFIT_JOB_NAME("SolGov Representative") - l_ear = /obj/item/device/radio/headset/headset_com - uniform = /obj/item/clothing/under/rank/internalaffairs/plain/solgov - suit = /obj/item/clothing/suit/storage/toggle/suit/black - shoes = /obj/item/clothing/shoes/laceup - id_types = list(/obj/item/card/id/torch/crew/representative) - pda_type = /obj/item/modular_computer/pda/heads/paperpusher - -/decl/hierarchy/outfit/job/torch/crew/command/sea/fleet - name = OUTFIT_JOB_NAME("Senior Enlisted Advisor - Fleet") - uniform = /obj/item/clothing/under/solgov/utility/fleet/command - shoes = /obj/item/clothing/shoes/dutyboots - l_ear = /obj/item/device/radio/headset/sea - id_types = list(/obj/item/card/id/torch/crew/sea) - pda_type = /obj/item/modular_computer/pda/heads - -/decl/hierarchy/outfit/job/torch/crew/command/sea/army - name = OUTFIT_JOB_NAME("Senior Enlisted Advisor - Marine") - uniform = /obj/item/clothing/under/solgov/utility/army/urban/command - shoes = /obj/item/clothing/shoes/dutyboots - l_ear = /obj/item/device/radio/headset/sea - id_types = list(/obj/item/card/id/torch/crew/sea) - pda_type = /obj/item/modular_computer/pda/heads - -/decl/hierarchy/outfit/job/torch/crew/command/bridgeofficer - name = OUTFIT_JOB_NAME("Bridge Officer") - uniform = /obj/item/clothing/under/solgov/utility/expeditionary/officer/command - shoes = /obj/item/clothing/shoes/dutyboots - id_types = list(/obj/item/card/id/torch/crew/bridgeofficer) - pda_type = /obj/item/modular_computer/pda/heads - l_ear = /obj/item/device/radio/headset/bridgeofficer - -/decl/hierarchy/outfit/job/torch/crew/command/bridgeofficer/fleet - name = OUTFIT_JOB_NAME("Bridge Officer - Fleet") - uniform = /obj/item/clothing/under/solgov/utility/fleet/command - shoes = /obj/item/clothing/shoes/dutyboots diff --git a/maps/torch/job/outfits/corporate_outfits.dm b/maps/torch/job/outfits/corporate_outfits.dm deleted file mode 100644 index d27c33208a1ea..0000000000000 --- a/maps/torch/job/outfits/corporate_outfits.dm +++ /dev/null @@ -1,43 +0,0 @@ -/decl/hierarchy/outfit/job/torch/passenger/research - hierarchy_type = /decl/hierarchy/outfit/job/torch/passenger/research - l_ear = /obj/item/device/radio/headset/science - -/decl/hierarchy/outfit/job/torch/passenger/research/nt_pilot //pending better uniform - name = OUTFIT_JOB_NAME("Corporate Pilot") - uniform = /obj/item/clothing/under/rank/ntpilot - shoes = /obj/item/clothing/shoes/workboots - l_ear = /obj/item/device/radio/headset/headset_pilot - id_types = list(/obj/item/card/id/torch/passenger/research/nt_pilot) - -/decl/hierarchy/outfit/job/torch/passenger/research/scientist - name = OUTFIT_JOB_NAME("Scientist - Torch") - uniform = /obj/item/clothing/under/rank/scientist - shoes = /obj/item/clothing/shoes/white - pda_type = /obj/item/modular_computer/pda/science - id_types = list(/obj/item/card/id/torch/passenger/research/scientist) - -/decl/hierarchy/outfit/job/torch/passenger/research/scientist/New() - ..() - BACKPACK_OVERRIDE_RESEARCH - -/decl/hierarchy/outfit/job/torch/passenger/research/assist - name = OUTFIT_JOB_NAME("Research Assistant - Torch") - uniform = /obj/item/clothing/under/rank/scientist - shoes = /obj/item/clothing/shoes/white - pda_type = /obj/item/modular_computer/pda/science - id_types = list(/obj/item/card/id/torch/passenger/research) - -/decl/hierarchy/outfit/job/torch/passenger/research/assist/testsubject - name = OUTFIT_JOB_NAME("Testing Assistant") - uniform = /obj/item/clothing/under/rank/ntwork - - -/decl/hierarchy/outfit/job/torch/crew/command/synth - name = OUTFIT_JOB_NAME("EXO Synthetic") - uniform = /obj/item/clothing/under/solgov/utility/expeditionary/officer/command - l_ear = /obj/item/device/radio/headset/heads/torchexec/synth - shoes = /obj/item/clothing/shoes/dutyboots - head = /obj/item/clothing/head/beret/solgov/expedition/branch - id_types = list(/obj/item/card/id/torch/gold/synth) - pda_type = /obj/item/modular_computer/pda/heads - r_pocket = /obj/item/modular_computer/tablet/lease/preset/command diff --git a/maps/torch/job/outfits/engineering_outfits.dm b/maps/torch/job/outfits/engineering_outfits.dm deleted file mode 100644 index e5898193e40e4..0000000000000 --- a/maps/torch/job/outfits/engineering_outfits.dm +++ /dev/null @@ -1,73 +0,0 @@ -/decl/hierarchy/outfit/job/torch/crew/engineering - hierarchy_type = /decl/hierarchy/outfit/job/torch/crew/engineering - l_ear = /obj/item/device/radio/headset/headset_eng - pda_slot = slot_l_store - flags = OUTFIT_FLAGS_JOB_DEFAULT | OUTFIT_EXTENDED_SURVIVAL - -/decl/hierarchy/outfit/job/torch/crew/engineering/New() - ..() - BACKPACK_OVERRIDE_ENGINEERING - -/decl/hierarchy/outfit/job/torch/crew/engineering/senior_engineer - name = OUTFIT_JOB_NAME("Senior Engineer") - uniform = /obj/item/clothing/under/solgov/utility/expeditionary/engineering - shoes = /obj/item/clothing/shoes/dutyboots - id_types = list(/obj/item/card/id/torch/crew/engineering/senior) - pda_type = /obj/item/modular_computer/pda/heads/ce - -/decl/hierarchy/outfit/job/torch/crew/engineering/senior_engineer/fleet - name = OUTFIT_JOB_NAME("Senior Engineer - Fleet") - uniform = /obj/item/clothing/under/solgov/utility/fleet/engineering - shoes = /obj/item/clothing/shoes/dutyboots - -/decl/hierarchy/outfit/job/torch/crew/engineering/engineer - name = OUTFIT_JOB_NAME("Engineer - Torch") - uniform = /obj/item/clothing/under/solgov/utility/expeditionary/engineering - shoes = /obj/item/clothing/shoes/dutyboots - id_types = list(/obj/item/card/id/torch/crew/engineering) - pda_type = /obj/item/modular_computer/pda/engineering - -/decl/hierarchy/outfit/job/torch/crew/engineering/engineer/fleet - name = OUTFIT_JOB_NAME("Engineer - Fleet") - uniform = /obj/item/clothing/under/solgov/utility/fleet/engineering - shoes = /obj/item/clothing/shoes/dutyboots - -/decl/hierarchy/outfit/job/torch/crew/engineering/engineer/army - name = OUTFIT_JOB_NAME("Engineer - Marine") - uniform = /obj/item/clothing/under/solgov/utility/army/urban/engineering - shoes = /obj/item/clothing/shoes/dutyboots - -/decl/hierarchy/outfit/job/torch/crew/engineering/contractor - name = OUTFIT_JOB_NAME("Engineering Assistant") - uniform = /obj/item/clothing/under/rank/engineer - shoes = /obj/item/clothing/shoes/workboots - id_types = list(/obj/item/card/id/torch/contractor/engineering) - pda_type = /obj/item/modular_computer/pda/engineering - -/decl/hierarchy/outfit/job/torch/crew/engineering/roboticist - name = OUTFIT_JOB_NAME("Roboticist - Contractor") - uniform = /obj/item/clothing/under/rank/roboticist - shoes = /obj/item/clothing/shoes/black - id_types = list(/obj/item/card/id/torch/contractor/engineering/roboticist) - pda_type = /obj/item/modular_computer/pda/roboticist - -/decl/hierarchy/outfit/job/torch/crew/engineering/roboticistec - name = OUTFIT_JOB_NAME("Roboticist - Torch") - uniform = /obj/item/clothing/under/solgov/utility/expeditionary/engineering - shoes = /obj/item/clothing/shoes/dutyboots - id_types = list(/obj/item/card/id/torch/contractor/engineering/roboticist) - pda_type = /obj/item/modular_computer/pda/roboticist - -/decl/hierarchy/outfit/job/torch/crew/engineering/roboticistfleet - name = OUTFIT_JOB_NAME("Roboticist - Fleet") - uniform = /obj/item/clothing/under/solgov/utility/fleet/engineering - id_types = list(/obj/item/card/id/torch/contractor/engineering/roboticist) - shoes = /obj/item/clothing/shoes/dutyboots - pda_type = /obj/item/modular_computer/pda/roboticist - -/decl/hierarchy/outfit/job/torch/crew/engineering/roboticistarmy - name = OUTFIT_JOB_NAME("Roboticist - Army") - uniform = /obj/item/clothing/under/solgov/utility/army/urban/engineering - shoes = /obj/item/clothing/shoes/dutyboots - id_types = list(/obj/item/card/id/torch/contractor/engineering/roboticist) - pda_type = /obj/item/modular_computer/pda/roboticist diff --git a/maps/torch/job/outfits/exploration_outfits.dm b/maps/torch/job/outfits/exploration_outfits.dm deleted file mode 100644 index 35b8b6dea3e80..0000000000000 --- a/maps/torch/job/outfits/exploration_outfits.dm +++ /dev/null @@ -1,75 +0,0 @@ -/decl/hierarchy/outfit/job/torch/crew/exploration/New() - ..() - backpack_overrides[/decl/backpack_outfit/backpack] = /obj/item/storage/backpack/explorer - backpack_overrides[/decl/backpack_outfit/satchel] = /obj/item/storage/backpack/satchel/explorer - backpack_overrides[/decl/backpack_outfit/messenger_bag] = /obj/item/storage/backpack/messenger/explorer - -/decl/hierarchy/outfit/job/torch/crew/exploration/pathfinder - name = OUTFIT_JOB_NAME("Pathfinder") - uniform = /obj/item/clothing/under/solgov/utility/expeditionary/officer/exploration - shoes = /obj/item/clothing/shoes/dutyboots - id_types = list(/obj/item/card/id/torch/crew/pathfinder) - pda_type = /obj/item/modular_computer/pda/explorer - l_ear = /obj/item/device/radio/headset/pathfinder - -/decl/hierarchy/outfit/job/torch/crew/exploration/explorer - name = OUTFIT_JOB_NAME("Explorer") - uniform = /obj/item/clothing/under/solgov/utility/expeditionary/exploration - shoes = /obj/item/clothing/shoes/dutyboots - id_types = list(/obj/item/card/id/torch/crew/explorer) - pda_type = /obj/item/modular_computer/pda/explorer - l_ear = /obj/item/device/radio/headset/exploration - -/decl/hierarchy/outfit/job/torch/passenger/pilot - name = OUTFIT_JOB_NAME("Shuttle Pilot") - uniform = /obj/item/clothing/under/color/black - shoes = /obj/item/clothing/shoes/dutyboots - l_ear = /obj/item/device/radio/headset/headset_pilot - id_types = list(/obj/item/card/id/torch/passenger/research/nt_pilot) - head = /obj/item/clothing/head/helmet/solgov/pilot - -/decl/hierarchy/outfit/job/torch/crew/exploration/pilot - name = OUTFIT_JOB_NAME("Shuttle Pilot - Expeditionary Corps") - uniform = /obj/item/clothing/under/solgov/utility/expeditionary/exploration - shoes = /obj/item/clothing/shoes/dutyboots - id_types = list(/obj/item/card/id/torch/crew/pilot) - pda_type = /obj/item/modular_computer/pda/explorer - l_ear = /obj/item/device/radio/headset/headset_pilot - -/decl/hierarchy/outfit/job/torch/crew/exploration/pilot/fleet - name = OUTFIT_JOB_NAME("Shuttle Pilot - Fleet") - uniform = /obj/item/clothing/under/solgov/utility/fleet/exploration - -/decl/hierarchy/outfit/job/torch/crew/exploration/expmed - name = OUTFIT_JOB_NAME("Expedition Medic - Expeditionary Corps") - uniform = /obj/item/clothing/under/solgov/utility/expeditionary/exploration - shoes = /obj/item/clothing/shoes/dutyboots - id_types = list(/obj/item/card/id/torch/crew/expmed) - pda_type = /obj/item/modular_computer/pda/explorer - l_ear = /obj/item/device/radio/headset/expmed - -/decl/hierarchy/outfit/job/torch/crew/exploration/expmed/army - name = OUTFIT_JOB_NAME("Expedition Medic - Marine") - uniform = /obj/item/clothing/under/solgov/utility/army/urban/medical - shoes = /obj/item/clothing/shoes/dutyboots - -/decl/hierarchy/outfit/job/torch/crew/exploration/expeng - name = OUTFIT_JOB_NAME("Expedition Engineer - Expeditionary Corps") - uniform = /obj/item/clothing/under/solgov/utility/expeditionary/exploration - shoes = /obj/item/clothing/shoes/dutyboots - id_types = list(/obj/item/card/id/torch/crew/expeng) - pda_type = /obj/item/modular_computer/pda/explorer - l_ear = /obj/item/device/radio/headset/expeng - -/decl/hierarchy/outfit/job/torch/crew/exploration/expeng/army - name = OUTFIT_JOB_NAME("Expedition Engineer - Marine") - uniform = /obj/item/clothing/under/solgov/utility/army/urban/engineering - shoes = /obj/item/clothing/shoes/dutyboots - -/decl/hierarchy/outfit/job/torch/crew/exploration/expmar - name = OUTFIT_JOB_NAME("Expedition Guard - Marine") - uniform = /obj/item/clothing/under/solgov/utility/army/urban/security - shoes = /obj/item/clothing/shoes/dutyboots - id_types = list(/obj/item/card/id/torch/crew/expmar) - pda_type = /obj/item/modular_computer/pda/explorer - l_ear = /obj/item/device/radio/headset/exploration diff --git a/maps/torch/job/outfits/medical_outfits.dm b/maps/torch/job/outfits/medical_outfits.dm deleted file mode 100644 index 18532afda1766..0000000000000 --- a/maps/torch/job/outfits/medical_outfits.dm +++ /dev/null @@ -1,126 +0,0 @@ -/decl/hierarchy/outfit/job/torch/crew/medical - hierarchy_type = /decl/hierarchy/outfit/job/torch/crew/medical - l_ear = /obj/item/device/radio/headset/headset_med - pda_type = /obj/item/modular_computer/pda/medical - pda_slot = slot_l_store - -/decl/hierarchy/outfit/job/torch/crew/medical/New() - ..() - BACKPACK_OVERRIDE_MEDICAL - -/decl/hierarchy/outfit/job/torch/crew/medical/senior - name = OUTFIT_JOB_NAME("Physician") - uniform = /obj/item/clothing/under/solgov/utility/expeditionary/officer/medical - shoes = /obj/item/clothing/shoes/dutyboots - id_types = list(/obj/item/card/id/torch/crew/medical/senior) - -/decl/hierarchy/outfit/job/torch/crew/medical/senior/fleet - name = OUTFIT_JOB_NAME("Physician - Fleet") - uniform = /obj/item/clothing/under/solgov/utility/fleet/medical - shoes = /obj/item/clothing/shoes/dutyboots - -/decl/hierarchy/outfit/job/torch/crew/medical/senior/army - name = OUTFIT_JOB_NAME("Physician - Marine") - uniform = /obj/item/clothing/under/solgov/utility/army/urban/medical - shoes = /obj/item/clothing/shoes/dutyboots - -/decl/hierarchy/outfit/job/torch/crew/medical/contractor/senior - name = OUTFIT_JOB_NAME("Physician - Contractor") - id_types = list(/obj/item/card/id/torch/contractor/medical/senior) - -/decl/hierarchy/outfit/job/torch/crew/medical/junior - name = OUTFIT_JOB_NAME("Medical Resident") - uniform = /obj/item/clothing/under/solgov/utility/expeditionary/officer/medical - shoes = /obj/item/clothing/shoes/dutyboots - id_types = list(/obj/item/card/id/torch/crew/medical/senior) - -/decl/hierarchy/outfit/job/torch/crew/medical/junior/fleet - name = OUTFIT_JOB_NAME("Medical Resident - Fleet") - uniform = /obj/item/clothing/under/solgov/utility/fleet/medical - shoes = /obj/item/clothing/shoes/dutyboots - -/decl/hierarchy/outfit/job/torch/crew/medical/junior/army - name = OUTFIT_JOB_NAME("Medical Resident - Marine") - uniform = /obj/item/clothing/under/solgov/utility/army/urban/medical - shoes = /obj/item/clothing/shoes/dutyboots - -/decl/hierarchy/outfit/job/torch/crew/medical/contractor/junior - name = OUTFIT_JOB_NAME("Medical Resident - Contractor") - id_types = list(/obj/item/card/id/torch/contractor/medical/senior) - -/decl/hierarchy/outfit/job/torch/crew/medical/doctor - name = OUTFIT_JOB_NAME("Medical Technician") - uniform = /obj/item/clothing/under/solgov/utility/expeditionary/medical - shoes = /obj/item/clothing/shoes/dutyboots - id_types = list(/obj/item/card/id/torch/crew/medical) - l_ear = /obj/item/device/radio/headset/headset_corpsman - -/decl/hierarchy/outfit/job/torch/crew/medical/doctor/fleet - name = OUTFIT_JOB_NAME("Medical Technician - Fleet") - uniform = /obj/item/clothing/under/solgov/utility/fleet/medical - shoes = /obj/item/clothing/shoes/dutyboots - l_ear = /obj/item/device/radio/headset/headset_corpsman - -/decl/hierarchy/outfit/job/torch/crew/medical/doctor/army - name = OUTFIT_JOB_NAME("Medical Technician - Marine") - uniform = /obj/item/clothing/under/solgov/utility/army/urban/medical - shoes = /obj/item/clothing/shoes/dutyboots - l_ear = /obj/item/device/radio/headset/headset_corpsman - -/decl/hierarchy/outfit/job/torch/crew/medical/contractor - name = OUTFIT_JOB_NAME("Medical Technician - Contractor") - uniform = /obj/item/clothing/under/rank/medical - shoes = /obj/item/clothing/shoes/white - id_types = list(/obj/item/card/id/torch/contractor/medical) - -/decl/hierarchy/outfit/job/torch/crew/medical/contractor/mortus - name = OUTFIT_JOB_NAME("Mortician") - uniform = /obj/item/clothing/under/rank/medical/scrubs/black - -/decl/hierarchy/outfit/job/torch/crew/medical/contractor/paramedic - name = OUTFIT_JOB_NAME("Paramedic - Torch") - uniform = /obj/item/clothing/under/rank/medical/paramedic - suit = /obj/item/clothing/suit/storage/toggle/fr_jacket - shoes = /obj/item/clothing/shoes/jackboots - flags = OUTFIT_FLAGS_JOB_DEFAULT | OUTFIT_EXTENDED_SURVIVAL - -/decl/hierarchy/outfit/job/torch/crew/medical/contractor/chemist - name = OUTFIT_JOB_NAME("Chemist - Torch") - uniform = /obj/item/clothing/under/rank/chemist - shoes = /obj/item/clothing/shoes/white - pda_type = /obj/item/modular_computer/pda/chemistry - id_types = list(/obj/item/card/id/torch/contractor/chemist) - -/decl/hierarchy/outfit/job/torch/crew/medical/contractor/chemist/New() - ..() - BACKPACK_OVERRIDE_CHEMISTRY - -/decl/hierarchy/outfit/job/torch/crew/medical/contractor/chemist/ec - name = OUTFIT_JOB_NAME("Chemist - Expeditionary Corps") - uniform = /obj/item/clothing/under/solgov/utility/expeditionary/medical - shoes = /obj/item/clothing/shoes/dutyboots - pda_type = /obj/item/modular_computer/pda/chemistry - id_types = list(/obj/item/card/id/torch/contractor/chemist) - -/decl/hierarchy/outfit/job/torch/crew/medical/counselor - name = OUTFIT_JOB_NAME("Counselor") - uniform = /obj/item/clothing/under/rank/psych/turtleneck - shoes = /obj/item/clothing/shoes/white - id_types = list( - /obj/item/card/id/torch/contractor/medical/counselor, - /obj/item/card/id/foundation_civilian) - -/decl/hierarchy/outfit/job/torch/crew/medical/counselor/ec - name = OUTFIT_JOB_NAME("Counselor - Expeditionary Corps") - uniform = /obj/item/clothing/under/solgov/utility/expeditionary/officer/medical - shoes = /obj/item/clothing/shoes/dutyboots - -/decl/hierarchy/outfit/job/torch/crew/medical/counselor/fleet - name = OUTFIT_JOB_NAME("Counselor - Fleet") - uniform = /obj/item/clothing/under/solgov/utility/fleet/medical - shoes = /obj/item/clothing/shoes/dutyboots - -/decl/hierarchy/outfit/job/torch/crew/medical/counselor/mentalist - name = OUTFIT_JOB_NAME("Counselor - Mentalist") - suit = /obj/item/clothing/suit/storage/toggle/labcoat - shoes = /obj/item/clothing/shoes/laceup diff --git a/maps/torch/job/outfits/misc_outfits.dm b/maps/torch/job/outfits/misc_outfits.dm deleted file mode 100644 index 906d8bdac9224..0000000000000 --- a/maps/torch/job/outfits/misc_outfits.dm +++ /dev/null @@ -1,48 +0,0 @@ -/decl/hierarchy/outfit/job/torch/passenger/passenger - name = OUTFIT_JOB_NAME("Passenger - Torch") - uniform = /obj/item/clothing/under/color/grey - l_ear = /obj/item/device/radio/headset - shoes = /obj/item/clothing/shoes/black - pda_type = /obj/item/modular_computer/pda - id_types = list(/obj/item/card/id/torch/passenger) - -/decl/hierarchy/outfit/job/torch/passenger/passenger/psychologist - name = OUTFIT_JOB_NAME("Passenger - Psychologist") - uniform = /obj/item/clothing/under/rank/psych/turtleneck - shoes = /obj/item/clothing/shoes/laceup - -/decl/hierarchy/outfit/job/torch/passenger/passenger/journalist - name = OUTFIT_JOB_NAME("Journalist - Torch") - backpack_contents = list(/obj/item/device/camera/tvcamera = 1, - /obj/item/clothing/accessory/badge/press = 1) - -/decl/hierarchy/outfit/job/torch/passenger/passenger/investor - name = OUTFIT_JOB_NAME("Investor - Torch") - -/decl/hierarchy/outfit/job/torch/passenger/passenger/investor/post_equip(var/mob/living/carbon/human/H) - ..() - var/obj/item/storage/secure/briefcase/money/case = new(H.loc) - H.put_in_hands(case) - -/decl/hierarchy/outfit/job/torch/merchant - name = OUTFIT_JOB_NAME("Merchant - Torch") - uniform = /obj/item/clothing/under/color/black - l_ear = null - shoes = /obj/item/clothing/shoes/black - pda_type = /obj/item/modular_computer/pda - id_types = list(/obj/item/card/id/torch/merchant) - -/decl/hierarchy/outfit/job/torch/ert - name = OUTFIT_JOB_NAME("ERT - Torch") - uniform = /obj/item/clothing/under/solgov/utility/fleet/combat - head = /obj/item/clothing/head/beret/solgov/fleet - gloves = /obj/item/clothing/gloves/thick - id_types = list(/obj/item/card/id/centcom/ERT) - pda_type = /obj/item/modular_computer/pda/ert - l_ear = /obj/item/device/radio/headset/ert - shoes = /obj/item/clothing/shoes/dutyboots - -/decl/hierarchy/outfit/job/torch/ert/leader - name = OUTFIT_JOB_NAME("ERT Leader - Torch") - uniform = /obj/item/clothing/under/solgov/utility/fleet/combat/command - head = /obj/item/clothing/head/beret/solgov/fleet/command \ No newline at end of file diff --git a/maps/torch/job/outfits/research_outfits.dm b/maps/torch/job/outfits/research_outfits.dm deleted file mode 100644 index 128ec22431ba6..0000000000000 --- a/maps/torch/job/outfits/research_outfits.dm +++ /dev/null @@ -1,44 +0,0 @@ -/decl/hierarchy/outfit/job/torch/crew/research - name = OUTFIT_JOB_NAME("Research Assistant - Expeditionary Corps") - uniform = /obj/item/clothing/under/solgov/utility/expeditionary/research - shoes = /obj/item/clothing/shoes/dutyboots - id_types = list(/obj/item/card/id/torch/crew/research) - pda_type = /obj/item/modular_computer/pda/science - l_ear = /obj/item/device/radio/headset/science - -/decl/hierarchy/outfit/job/torch/crew/research/cso - name = OUTFIT_JOB_NAME("Chief Science Officer - Expeditionary Corps") - uniform = /obj/item/clothing/under/solgov/utility/expeditionary/officer/research - l_ear = /obj/item/device/radio/headset/heads/torchntdirector - id_types = list(/obj/item/card/id/torch/silver/research) - pda_type = /obj/item/modular_computer/pda/heads/rd - -/decl/hierarchy/outfit/job/torch/crew/research/senior_scientist - name = OUTFIT_JOB_NAME("Senior Scientist - Expeditionary Corps") - uniform = /obj/item/clothing/under/solgov/utility/expeditionary/officer/research - id_types = list(/obj/item/card/id/torch/crew/research/senior_scientist) - -/decl/hierarchy/outfit/job/torch/crew/research/scientist - name = OUTFIT_JOB_NAME("Scientist - Expeditionary Corps") - uniform = /obj/item/clothing/under/solgov/utility/expeditionary/officer/research - id_types = list(/obj/item/card/id/torch/crew/research/scientist) - -/decl/hierarchy/outfit/job/torch/passenger/research/assist/solgov - name = OUTFIT_JOB_NAME("Research Assistant - SCG") - head = /obj/item/clothing/head/beret/solgov/research - -/decl/hierarchy/outfit/job/torch/passenger/research/scientist/solgov - name = OUTFIT_JOB_NAME("Scientist - SCG") - head = /obj/item/clothing/head/beret/solgov/research - -/decl/hierarchy/outfit/job/torch/passenger/research_guard - name = OUTFIT_JOB_NAME("Research Guard") - l_ear = /obj/item/device/radio/headset/research_guard - uniform = /obj/item/clothing/under/rank/guard/research_guard - shoes = /obj/item/clothing/shoes/jackboots - id_types = list(/obj/item/card/id/torch/crew/research/research_guard) - pda_type = /obj/item/modular_computer/pda/science - -/decl/hierarchy/outfit/job/torch/passenger/research_guard/ec - name = OUTFIT_JOB_NAME("Research Guard - Expeditionary Corps") - uniform = /obj/item/clothing/under/solgov/utility/expeditionary/research diff --git a/maps/torch/job/outfits/security_outfits.dm b/maps/torch/job/outfits/security_outfits.dm deleted file mode 100644 index 6c96c9148832c..0000000000000 --- a/maps/torch/job/outfits/security_outfits.dm +++ /dev/null @@ -1,72 +0,0 @@ -/decl/hierarchy/outfit/job/torch/crew/security - hierarchy_type = /decl/hierarchy/outfit/job/torch/crew/security - l_ear = /obj/item/device/radio/headset/headset_sec - pda_slot = slot_l_store - -/decl/hierarchy/outfit/job/torch/crew/security/New() - ..() - BACKPACK_OVERRIDE_SECURITY - -/decl/hierarchy/outfit/job/torch/crew/security/brig_chief - name = OUTFIT_JOB_NAME("Brig Chief") - uniform = /obj/item/clothing/under/solgov/utility/expeditionary/security - shoes = /obj/item/clothing/shoes/dutyboots - id_types = list(/obj/item/card/id/torch/crew/security/brigchief) - pda_type = /obj/item/modular_computer/pda/security - -/decl/hierarchy/outfit/job/torch/crew/security/brig_chief/fleet - name = OUTFIT_JOB_NAME("Brig Chief - Fleet") - uniform = /obj/item/clothing/under/solgov/utility/fleet/security - shoes = /obj/item/clothing/shoes/dutyboots - -/decl/hierarchy/outfit/job/torch/crew/security/brig_chief/army - name = OUTFIT_JOB_NAME("Brig Chief - Marine") - uniform = /obj/item/clothing/under/solgov/utility/army/urban/security - shoes = /obj/item/clothing/shoes/dutyboots - -/decl/hierarchy/outfit/job/torch/crew/security/forensic_tech - name = OUTFIT_JOB_NAME("Forensic Technician - Torch") - uniform = /obj/item/clothing/under/solgov/utility/expeditionary/security - shoes = /obj/item/clothing/shoes/dutyboots - id_types = list(/obj/item/card/id/torch/crew/security/forensic) - pda_type = /obj/item/modular_computer/pda/forensics - -/decl/hierarchy/outfit/job/torch/crew/security/forensic_tech/contractor - name = OUTFIT_JOB_NAME("Forensic Technician - Contractor") - uniform = /obj/item/clothing/under/det - shoes = /obj/item/clothing/shoes/laceup - backpack_contents = list(/obj/item/clothing/accessory/badge/investigator = 1) - -/decl/hierarchy/outfit/job/torch/crew/security/forensic_tech/fleet - name = OUTFIT_JOB_NAME("Forensic Technician - Fleet") - uniform = /obj/item/clothing/under/solgov/utility/fleet/security - shoes = /obj/item/clothing/shoes/dutyboots - -/decl/hierarchy/outfit/job/torch/crew/security/forensic_tech/agent - name = OUTFIT_JOB_NAME("Forensic Technician - SFP Agent") - uniform = /obj/item/clothing/under/det/grey - suit = /obj/item/clothing/suit/storage/toggle/agent_jacket - shoes = /obj/item/clothing/shoes/dress - -/decl/hierarchy/outfit/job/torch/crew/security/maa - name = OUTFIT_JOB_NAME("Master at Arms") - uniform = /obj/item/clothing/under/solgov/utility/expeditionary/security - shoes = /obj/item/clothing/shoes/dutyboots - id_types = list(/obj/item/card/id/torch/crew/security) - pda_type = /obj/item/modular_computer/pda/security - -/decl/hierarchy/outfit/job/torch/crew/security/maa/fleet - name = OUTFIT_JOB_NAME("Master at Arms - Fleet") - uniform = /obj/item/clothing/under/solgov/utility/fleet/security - shoes = /obj/item/clothing/shoes/dutyboots - -/decl/hierarchy/outfit/job/torch/crew/security/maa/army - name = OUTFIT_JOB_NAME("Master at Arms - Marine") - uniform = /obj/item/clothing/under/solgov/utility/army/urban/security - shoes = /obj/item/clothing/shoes/dutyboots - -/decl/hierarchy/outfit/job/torch/crew/security/maa/agent - name = OUTFIT_JOB_NAME("Master at Arms - SFP Agent") - uniform = /obj/item/clothing/under/det - suit = /obj/item/clothing/suit/storage/toggle/agent_jacket - shoes = /obj/item/clothing/shoes/dutyboots diff --git a/maps/torch/job/outfits/service_outfits.dm b/maps/torch/job/outfits/service_outfits.dm deleted file mode 100644 index a5522e82f791e..0000000000000 --- a/maps/torch/job/outfits/service_outfits.dm +++ /dev/null @@ -1,85 +0,0 @@ -/decl/hierarchy/outfit/job/torch/crew/service - l_ear = /obj/item/device/radio/headset/headset_service - hierarchy_type = /decl/hierarchy/outfit/job/torch/crew/service - -/decl/hierarchy/outfit/job/torch/crew/service/janitor - name = OUTFIT_JOB_NAME("Sanitation Technician - Torch") - uniform = /obj/item/clothing/under/rank/janitor - shoes = /obj/item/clothing/shoes/black - id_types = list(/obj/item/card/id/torch/crew/service/janitor) - pda_type = /obj/item/modular_computer/pda - -/decl/hierarchy/outfit/job/torch/crew/service/janitor/ec - name = OUTFIT_JOB_NAME("Sanitation Technician - Expeditionary Corps") - uniform = /obj/item/clothing/under/solgov/utility/expeditionary/service - shoes = /obj/item/clothing/shoes/dutyboots - id_types = list(/obj/item/card/id/torch/crew/service/janitor) - pda_type = /obj/item/modular_computer/pda - -/decl/hierarchy/outfit/job/torch/crew/service/janitor/fleet - name = OUTFIT_JOB_NAME("Sanitation Technician - Fleet") - uniform = /obj/item/clothing/under/solgov/utility/fleet/service - shoes = /obj/item/clothing/shoes/dutyboots - -/decl/hierarchy/outfit/job/torch/crew/service/janitor/army - name = OUTFIT_JOB_NAME("Sanitation Technician - Marine") - uniform = /obj/item/clothing/under/solgov/utility/army/urban/service - shoes = /obj/item/clothing/shoes/dutyboots - -/decl/hierarchy/outfit/job/torch/crew/service/cook - name = OUTFIT_JOB_NAME("Cook - Torch") - uniform = /obj/item/clothing/under/rank/chef - shoes = /obj/item/clothing/shoes/black - id_types = list(/obj/item/card/id/torch/crew/service/chef) - pda_type = /obj/item/modular_computer/pda - -/decl/hierarchy/outfit/job/torch/crew/service/cook/ec - name = OUTFIT_JOB_NAME("Cook - Expeditionary Corps") - uniform = /obj/item/clothing/under/solgov/utility/expeditionary/service - shoes = /obj/item/clothing/shoes/dutyboots - id_types = list(/obj/item/card/id/torch/crew/service/chef) - pda_type = /obj/item/modular_computer/pda - -/decl/hierarchy/outfit/job/torch/crew/service/cook/fleet - name = OUTFIT_JOB_NAME("Cook - Fleet") - uniform = /obj/item/clothing/under/solgov/utility/fleet/service - shoes = /obj/item/clothing/shoes/dutyboots - -/decl/hierarchy/outfit/job/torch/crew/service/cook/army - name = OUTFIT_JOB_NAME("Cook - Marine") - uniform = /obj/item/clothing/under/solgov/utility/army/urban/service - shoes = /obj/item/clothing/shoes/dutyboots -/decl/hierarchy/outfit/job/torch/crew/service/crewman - name = OUTFIT_JOB_NAME("Crewman") - uniform = /obj/item/clothing/under/solgov/utility/expeditionary - shoes = /obj/item/clothing/shoes/dutyboots - id_types = list(/obj/item/card/id/torch/crew) - pda_type = /obj/item/modular_computer/pda -/decl/hierarchy/outfit/job/torch/crew/service/crewman/fleet - name = OUTFIT_JOB_NAME("Crewman - Fleet") - uniform = /obj/item/clothing/under/solgov/utility/fleet - shoes = /obj/item/clothing/shoes/dutyboots - -/decl/hierarchy/outfit/job/torch/passenger/research/assist/janitor - name = OUTFIT_JOB_NAME("Custodian - Torch") - uniform = /obj/item/clothing/under/rank/janitor - -/decl/hierarchy/outfit/job/torch/crew/service/chaplain - name = OUTFIT_JOB_NAME("Chaplain - Torch") - uniform = /obj/item/clothing/under/rank/chaplain - id_types = list(/obj/item/card/id/torch/crew/service/chaplain) - -/decl/hierarchy/outfit/job/torch/crew/service/chaplain/ec - name = OUTFIT_JOB_NAME("Chaplain - Expeditionary Corps") - uniform = /obj/item/clothing/under/solgov/utility/expeditionary/officer/service - shoes = /obj/item/clothing/shoes/dutyboots - -/decl/hierarchy/outfit/job/torch/crew/service/chaplain/fleet - name = OUTFIT_JOB_NAME("Chaplain - Fleet") - uniform = /obj/item/clothing/under/solgov/utility/fleet/service - shoes = /obj/item/clothing/shoes/dutyboots - -/decl/hierarchy/outfit/job/torch/crew/service/chaplain/army - name = OUTFIT_JOB_NAME("Chaplain - Marine") - uniform = /obj/item/clothing/under/solgov/utility/army/urban/service - shoes = /obj/item/clothing/shoes/dutyboots diff --git a/maps/torch/job/outfits/supply_outfits.dm b/maps/torch/job/outfits/supply_outfits.dm deleted file mode 100644 index a742f2e03399f..0000000000000 --- a/maps/torch/job/outfits/supply_outfits.dm +++ /dev/null @@ -1,71 +0,0 @@ -/decl/hierarchy/outfit/job/torch/crew/supply - l_ear = /obj/item/device/radio/headset/headset_cargo - hierarchy_type = /decl/hierarchy/outfit/job/torch/crew/supply - -/decl/hierarchy/outfit/job/torch/crew/supply/New() - ..() - BACKPACK_OVERRIDE_ENGINEERING - -/decl/hierarchy/outfit/job/torch/crew/supply/deckofficer - name = OUTFIT_JOB_NAME("Deck Chief") - l_ear = /obj/item/device/radio/headset/headset_deckofficer - uniform = /obj/item/clothing/under/solgov/utility/expeditionary/supply - shoes = /obj/item/clothing/shoes/dutyboots - id_types = list(/obj/item/card/id/torch/crew/supply/deckofficer) - pda_type = /obj/item/modular_computer/pda/cargo - -/decl/hierarchy/outfit/job/torch/crew/supply/deckofficer/fleet - name = OUTFIT_JOB_NAME("Deck Chief - Fleet") - uniform = /obj/item/clothing/under/solgov/utility/fleet/supply - shoes = /obj/item/clothing/shoes/dutyboots - -/decl/hierarchy/outfit/job/torch/crew/supply/deckofficer/army - name = OUTFIT_JOB_NAME("Deck Chief - Marine") - uniform = /obj/item/clothing/under/solgov/utility/army/urban/supply - shoes = /obj/item/clothing/shoes/dutyboots - -/decl/hierarchy/outfit/job/torch/crew/supply/tech - name = OUTFIT_JOB_NAME("Deck Technician") - uniform = /obj/item/clothing/under/solgov/utility/expeditionary/supply - shoes = /obj/item/clothing/shoes/dutyboots - id_types = list(/obj/item/card/id/torch/crew/supply) - pda_type = /obj/item/modular_computer/pda/cargo - -/decl/hierarchy/outfit/job/torch/crew/supply/tech/fleet - name = OUTFIT_JOB_NAME("Deck Technician - Fleet") - uniform = /obj/item/clothing/under/solgov/utility/fleet/supply - shoes = /obj/item/clothing/shoes/dutyboots - -/decl/hierarchy/outfit/job/torch/crew/supply/tech/army - name = OUTFIT_JOB_NAME("Deck Technician - Marine") - uniform = /obj/item/clothing/under/solgov/utility/army/urban/supply - shoes = /obj/item/clothing/shoes/dutyboots - -/decl/hierarchy/outfit/job/torch/crew/supply/contractor - name = OUTFIT_JOB_NAME("Supply Assistant") - uniform = /obj/item/clothing/under/rank/cargotech - shoes = /obj/item/clothing/shoes/brown - id_types = list(/obj/item/card/id/torch/contractor/supply) - pda_type = /obj/item/modular_computer/pda/cargo - -/decl/hierarchy/outfit/job/torch/passenger/research/prospector - name = OUTFIT_JOB_NAME("Prospector") - uniform = /obj/item/clothing/under/rank/ntwork - shoes = /obj/item/clothing/shoes/workboots - id_types = list(/obj/item/card/id/torch/passenger/research/mining) - pda_type = /obj/item/modular_computer/pda/mining - flags = OUTFIT_FLAGS_JOB_DEFAULT | OUTFIT_EXTENDED_SURVIVAL - l_ear = /obj/item/device/radio/headset/headset_mining - -/decl/hierarchy/outfit/job/torch/passenger/research/prospector/ec - name = OUTFIT_JOB_NAME("Prospector - Expeditionary Corps") - uniform = /obj/item/clothing/under/solgov/utility/expeditionary/supply - shoes = /obj/item/clothing/shoes/dutyboots - id_types = list(/obj/item/card/id/torch/passenger/research/mining) - pda_type = /obj/item/modular_computer/pda/mining - flags = OUTFIT_FLAGS_JOB_DEFAULT | OUTFIT_EXTENDED_SURVIVAL - l_ear = /obj/item/device/radio/headset/headset_mining - -/decl/hierarchy/outfit/job/torch/passenger/research/prospector/New() - ..() - BACKPACK_OVERRIDE_ENGINEERING diff --git a/maps/torch/job/outfits/torch_outfits.dm b/maps/torch/job/outfits/torch_outfits.dm deleted file mode 100644 index 6d66dfdac6f69..0000000000000 --- a/maps/torch/job/outfits/torch_outfits.dm +++ /dev/null @@ -1,25 +0,0 @@ -/decl/hierarchy/outfit/job/torch - name = OUTFIT_JOB_NAME("Torch Outfit") - hierarchy_type = /decl/hierarchy/outfit/job/torch - uniform = /obj/item/clothing/under/color/grey - l_ear = /obj/item/device/radio/headset - shoes = /obj/item/clothing/shoes/black - pda_type = /obj/item/modular_computer/pda - pda_slot = slot_l_store - -/decl/hierarchy/outfit/job/torch/crew - name = OUTFIT_JOB_NAME("Torch Crew Outfit") - hierarchy_type = /decl/hierarchy/outfit/job/torch/crew - uniform = /obj/item/clothing/under/solgov/utility/expeditionary - shoes = /obj/item/clothing/shoes/dutyboots - -/decl/hierarchy/outfit/job/torch/crew/fleet - name = OUTFIT_JOB_NAME("Torch Fleet Outfit") - hierarchy_type = /decl/hierarchy/outfit/job/torch/crew/fleet - uniform = /obj/item/clothing/under/solgov/utility/fleet - shoes = /obj/item/clothing/shoes/dutyboots - -/decl/hierarchy/outfit/job/torch/passenger - name = OUTFIT_JOB_NAME("Torch Passenger") - hierarchy_type = /decl/hierarchy/outfit/job/torch/passenger - uniform = /obj/item/clothing/under/solgov/utility diff --git a/maps/torch/job/outfits/unused_outfits.dm b/maps/torch/job/outfits/unused_outfits.dm deleted file mode 100644 index c0ebcb71cddf1..0000000000000 --- a/maps/torch/job/outfits/unused_outfits.dm +++ /dev/null @@ -1,49 +0,0 @@ -//army outfits -/decl/hierarchy/outfit/job/torch/army - name = OUTFIT_JOB_NAME("SCGM Soldier - Torch") - uniform = /obj/item/clothing/under/solgov/utility/army - head = /obj/item/clothing/head/solgov/utility/army - back = /obj/item/storage/backpack/rucksack/green - shoes = /obj/item/clothing/shoes/jungleboots - -/decl/hierarchy/outfit/job/torch/armyservice - name = OUTFIT_JOB_NAME("SCGM Service - Torch") - uniform = /obj/item/clothing/under/solgov/service/army - head = /obj/item/clothing/head/solgov/service/army - back = null - shoes = /obj/item/clothing/shoes/dress - -/decl/hierarchy/outfit/job/torch/armyservice/skirt - name = OUTFIT_JOB_NAME("SCGM Service - Skirt") - uniform = /obj/item/clothing/under/solgov/service/army/skirt - -/decl/hierarchy/outfit/job/torch/armyservice/officer - name = OUTFIT_JOB_NAME("SCGM Service - Officer") - uniform = /obj/item/clothing/under/solgov/service/army/command - head = /obj/item/clothing/head/solgov/service/army/command - -/decl/hierarchy/outfit/job/torch/armyservice/officer/skirt - name = OUTFIT_JOB_NAME("SCGM Service - Officer Skirt") - uniform = /obj/item/clothing/under/solgov/service/army/command/skirt - -/decl/hierarchy/outfit/job/torch/armydress - name = OUTFIT_JOB_NAME("SCGM Dress - Torch") - uniform = /obj/item/clothing/under/solgov/mildress/army - head = /obj/item/clothing/head/solgov/dress/army - suit = /obj/item/clothing/suit/dress/solgov/army - back = null - shoes = /obj/item/clothing/shoes/dress - -/decl/hierarchy/outfit/job/torch/armydress/skirt - name = OUTFIT_JOB_NAME("SCGA Dress - Skirt") - uniform = /obj/item/clothing/under/solgov/mildress/army/skirt - -/decl/hierarchy/outfit/job/torch/armydress/officer - name = OUTFIT_JOB_NAME("SCGA Dress - Officer") - uniform = /obj/item/clothing/under/solgov/mildress/army/command - head = /obj/item/clothing/head/solgov/dress/army/command - suit = /obj/item/clothing/suit/dress/solgov/army/command - -/decl/hierarchy/outfit/job/torch/armydress/officer/skirt - name = OUTFIT_JOB_NAME("SCGA Dress - Officer Skirt") - uniform = /obj/item/clothing/under/solgov/mildress/army/command/skirt diff --git a/maps/torch/job/research_jobs.dm b/maps/torch/job/research_jobs.dm deleted file mode 100644 index 071af4307d577..0000000000000 --- a/maps/torch/job/research_jobs.dm +++ /dev/null @@ -1,177 +0,0 @@ -/datum/job/senior_scientist - title = "Senior Researcher" - department = "Science" - department_flag = SCI - - total_positions = 1 - spawn_positions = 1 - supervisors = "the Chief Science Officer" - selection_color = "#633d63" - economic_power = 12 - minimal_player_age = 3 - minimum_character_age = list(SPECIES_HUMAN = 30) - ideal_character_age = 50 - alt_titles = list( - "Research Supervisor") - outfit_type = /decl/hierarchy/outfit/job/torch/crew/research/senior_scientist - allowed_branches = list( - /datum/mil_branch/expeditionary_corps - ) - allowed_ranks = list( - /datum/mil_rank/ec/o1 - ) - - access = list( - access_tox, access_tox_storage, access_maint_tunnels, access_research, access_mining_office, - access_mining_station, access_xenobiology, access_xenoarch, access_nanotrasen, access_solgov_crew, - access_expedition_shuttle, access_guppy, access_hangar, access_petrov, access_petrov_helm, access_guppy_helm, - access_petrov_analysis, access_petrov_phoron, access_petrov_toxins, access_petrov_chemistry, access_petrov_control, - access_petrov_maint, access_torch_fax, access_radio_sci, access_radio_exp - ) - - min_skill = list( SKILL_BUREAUCRACY = SKILL_BASIC, - SKILL_COMPUTER = SKILL_BASIC, - SKILL_FINANCE = SKILL_BASIC, - SKILL_BOTANY = SKILL_BASIC, - SKILL_ANATOMY = SKILL_BASIC, - SKILL_DEVICES = SKILL_ADEPT, - SKILL_SCIENCE = SKILL_ADEPT) - - max_skill = list( SKILL_ANATOMY = SKILL_MAX, - SKILL_DEVICES = SKILL_MAX, - SKILL_SCIENCE = SKILL_MAX) - skill_points = 20 - possible_goals = list(/datum/goal/achievement/notslimefodder) - -/datum/job/scientist - title = "Scientist" - total_positions = 6 - spawn_positions = 6 - supervisors = "the Chief Science Officer" - economic_power = 10 - minimum_character_age = list(SPECIES_HUMAN = 25) - ideal_character_age = 45 - minimal_player_age = 0 - alt_titles = list( - "Xenoarcheologist", - "Anomalist", - "Researcher", - "Xenobiologist", - "Xenobotanist" - ) - min_skill = list( SKILL_BUREAUCRACY = SKILL_BASIC, - SKILL_COMPUTER = SKILL_BASIC, - SKILL_DEVICES = SKILL_BASIC, - SKILL_SCIENCE = SKILL_ADEPT) - - max_skill = list( SKILL_ANATOMY = SKILL_MAX, - SKILL_DEVICES = SKILL_MAX, - SKILL_SCIENCE = SKILL_MAX) - - outfit_type = /decl/hierarchy/outfit/job/torch/crew/research/scientist - allowed_branches = list( - /datum/mil_branch/civilian, - /datum/mil_branch/solgov, - /datum/mil_branch/expeditionary_corps - ) - allowed_ranks = list( - /datum/mil_rank/ec/o1, - /datum/mil_rank/civ/contractor = /decl/hierarchy/outfit/job/torch/passenger/research/scientist, - /datum/mil_rank/sol/scientist = /decl/hierarchy/outfit/job/torch/passenger/research/scientist/solgov - ) - - access = list( - access_tox, access_tox_storage, access_research, access_petrov, access_petrov_helm, - access_mining_office, access_mining_station, access_xenobiology, access_guppy_helm, - access_xenoarch, access_nanotrasen, access_solgov_crew, access_expedition_shuttle, access_guppy, access_hangar, - access_petrov_analysis, access_petrov_phoron, access_petrov_toxins, access_petrov_chemistry, access_petrov_control, access_torch_fax, - access_petrov_maint, access_radio_sci, access_radio_exp, access_research_storage - ) - skill_points = 20 - possible_goals = list(/datum/goal/achievement/notslimefodder) - -/datum/job/scientist_assistant - title = "Research Assistant" - department = "Science" - department_flag = SCI - total_positions = 4 - spawn_positions = 4 - supervisors = "the Chief Science Officer and science personnel" - selection_color = "#633d63" - economic_power = 3 - minimum_character_age = list(SPECIES_HUMAN = 18) - ideal_character_age = 30 - alt_titles = list( - "Custodian" = /decl/hierarchy/outfit/job/torch/passenger/research/assist/janitor, - "Testing Assistant" = /decl/hierarchy/outfit/job/torch/passenger/research/assist/testsubject, - "Intern", - "Clerk", - "Field Assistant") - - outfit_type = /decl/hierarchy/outfit/job/torch/crew/research - allowed_branches = list( - /datum/mil_branch/civilian, - /datum/mil_branch/solgov, - /datum/mil_branch/expeditionary_corps - ) - allowed_ranks = list( - /datum/mil_rank/ec/e3, - /datum/mil_rank/ec/e5, - /datum/mil_rank/civ/contractor = /decl/hierarchy/outfit/job/torch/passenger/research/assist, - /datum/mil_rank/sol/scientist = /decl/hierarchy/outfit/job/torch/passenger/research/assist/solgov - ) - max_skill = list( SKILL_ANATOMY = SKILL_MAX, - SKILL_DEVICES = SKILL_MAX, - SKILL_SCIENCE = SKILL_MAX) - - access = list( - access_tox, access_tox_storage, access_research, access_petrov, - access_mining_office, access_mining_station, access_xenobiology, access_guppy_helm, - access_xenoarch, access_nanotrasen, access_solgov_crew, access_expedition_shuttle, access_guppy, access_hangar, - access_petrov_analysis, access_petrov_phoron, access_petrov_toxins, access_petrov_chemistry, access_petrov_control, - access_radio_sci, access_radio_exp, access_research_storage - ) - possible_goals = list(/datum/goal/achievement/notslimefodder) - -/datum/job/research_guard - title = "Research Guard" - department = "Science" - department_flag = SCI - total_positions = 1 - spawn_positions = 1 - supervisors = "the Chief Science Officer" - selection_color = "#473d63" - economic_power = 5 - minimal_player_age = 0 - minimum_character_age = list(SPECIES_HUMAN = 26) - outfit_type = /decl/hierarchy/outfit/job/torch/passenger/research_guard - allowed_branches = list( - /datum/mil_branch/civilian, - /datum/mil_branch/expeditionary_corps = /decl/hierarchy/outfit/job/torch/passenger/research_guard/ec - ) - - allowed_ranks = list( - /datum/mil_rank/civ/contractor, - /datum/mil_rank/ec/e3, - /datum/mil_rank/ec/e5 - ) - min_skill = list( SKILL_BUREAUCRACY = SKILL_ADEPT, - SKILL_EVA = SKILL_BASIC, - SKILL_COMBAT = SKILL_BASIC, - SKILL_WEAPONS = SKILL_ADEPT - ) - - max_skill = list( SKILL_COMBAT = SKILL_EXPERT, - SKILL_WEAPONS = SKILL_EXPERT) - skill_points = 20 - - access = list( - access_research_security, access_tox, access_tox_storage, access_maint_tunnels, access_research, access_xenobiology, access_xenoarch, access_nanotrasen, access_solgov_crew, - access_expedition_shuttle, access_guppy, access_hangar, access_petrov, access_petrov_helm, access_guppy_helm, - access_petrov_analysis, access_petrov_phoron, access_petrov_toxins, access_petrov_chemistry, access_petrov_maint, access_radio_sci - ) - - software_on_spawn = list(/datum/computer_file/program/camera_monitor) - -/datum/job/research_guard/get_description_blurb() - return "You are a security guard from the Organization of the Expeditionary Corps, which must protect the scientific department and its employees from various threats. Eat donuts, call scientists \"eggheads\"." diff --git a/maps/torch/job/security_jobs.dm b/maps/torch/job/security_jobs.dm deleted file mode 100644 index 30a3dfed05452..0000000000000 --- a/maps/torch/job/security_jobs.dm +++ /dev/null @@ -1,164 +0,0 @@ -/datum/job/warden - title = "Brig Chief" - total_positions = 1 - spawn_positions = 1 - supervisors = "the Chief of Security" - economic_power = 5 - minimal_player_age = 7 - ideal_character_age = 35 - minimum_character_age = list(SPECIES_HUMAN = 27) - outfit_type = /decl/hierarchy/outfit/job/torch/crew/security/brig_chief - allowed_branches = list( - /datum/mil_branch/expeditionary_corps, - /datum/mil_branch/fleet = /decl/hierarchy/outfit/job/torch/crew/security/brig_chief/fleet, - /datum/mil_branch/army = /decl/hierarchy/outfit/job/torch/crew/security/brig_chief/army - ) - allowed_ranks = list( - /datum/mil_rank/ec/e7, - /datum/mil_rank/army/e6, - /datum/mil_rank/army/e7, - /datum/mil_rank/army/e8, - /datum/mil_rank/fleet/e6, - /datum/mil_rank/fleet/e7, - /datum/mil_rank/fleet/e8 - ) - min_skill = list( SKILL_BUREAUCRACY = SKILL_ADEPT, - SKILL_EVA = SKILL_BASIC, - SKILL_COMBAT = SKILL_BASIC, - SKILL_WEAPONS = SKILL_ADEPT, - SKILL_FORENSICS = SKILL_BASIC) - - max_skill = list( SKILL_COMBAT = SKILL_MAX, - SKILL_WEAPONS = SKILL_MAX, - SKILL_FORENSICS = SKILL_MAX) - skill_points = 20 - - access = list( - access_security, access_brig, access_armory, access_forensics_lockers, - access_maint_tunnels, access_external_airlocks, access_emergency_storage, - access_eva, access_sec_doors, access_solgov_crew, access_gun, access_torch_fax, - access_radio_sec - ) - - software_on_spawn = list(/datum/computer_file/program/digitalwarrant, - /datum/computer_file/program/camera_monitor) - -/datum/job/detective - title = "Forensic Technician" - total_positions = 2 - spawn_positions = 2 - supervisors = "the Chief of Security" - economic_power = 5 - minimal_player_age = 7 - minimum_character_age = list(SPECIES_HUMAN = 25) - ideal_character_age = 35 - skill_points = 14 - alt_titles = list( - "Criminal Investigator" - ) - outfit_type = /decl/hierarchy/outfit/job/torch/crew/security/forensic_tech - - allowed_branches = list( - /datum/mil_branch/expeditionary_corps, - /datum/mil_branch/civilian = /decl/hierarchy/outfit/job/torch/crew/security/forensic_tech/contractor, - /datum/mil_branch/fleet = /decl/hierarchy/outfit/job/torch/crew/security/forensic_tech/fleet, - /datum/mil_branch/solgov = /decl/hierarchy/outfit/job/torch/crew/security/forensic_tech/agent - ) - allowed_ranks = list( - /datum/mil_rank/fleet/e3, - /datum/mil_rank/ec/e3, - /datum/mil_rank/ec/e5, - /datum/mil_rank/fleet/e4, - /datum/mil_rank/fleet/e5, - /datum/mil_rank/civ/contractor, - /datum/mil_rank/sol/agent, - /datum/mil_rank/sol/duty_agent, - /datum/mil_rank/sol/senior_agent, - ) - min_skill = list( SKILL_BUREAUCRACY = SKILL_BASIC, - SKILL_COMPUTER = SKILL_BASIC, - SKILL_EVA = SKILL_BASIC, - SKILL_COMBAT = SKILL_BASIC, - SKILL_WEAPONS = SKILL_BASIC, - SKILL_FORENSICS = SKILL_ADEPT) - - max_skill = list( SKILL_COMBAT = SKILL_EXPERT, - SKILL_WEAPONS = SKILL_EXPERT, - SKILL_FORENSICS = SKILL_MAX) - skill_points = 20 - - access = list( - access_security, access_brig, access_forensics_lockers, - access_maint_tunnels, access_emergency_storage, - access_sec_doors, access_solgov_crew, access_morgue, - access_torch_fax, access_network, access_radio_sec - ) - - software_on_spawn = list(/datum/computer_file/program/digitalwarrant, - /datum/computer_file/program/camera_monitor) - -/datum/job/officer - title = "Master at Arms" - total_positions = 4 - spawn_positions = 4 - supervisors = "the Chief of Security" - economic_power = 4 - minimal_player_age = 7 - minimum_character_age = list(SPECIES_HUMAN = 18) - ideal_character_age = 25 - alt_titles = list() // This is a hack. Overriding a list var with null does not actually override it due to the particulars of dm list init. Do not "clean up" without testing. - outfit_type = /decl/hierarchy/outfit/job/torch/crew/security/maa - allowed_branches = list( - /datum/mil_branch/expeditionary_corps, - /datum/mil_branch/fleet = /decl/hierarchy/outfit/job/torch/crew/security/maa/fleet, - /datum/mil_branch/army = /decl/hierarchy/outfit/job/torch/crew/security/maa/army - ) - allowed_ranks = list( - /datum/mil_rank/ec/e3, - /datum/mil_rank/ec/e5, - /datum/mil_rank/army/e3, - //datum/mil_rank/army/e4, - /datum/mil_rank/army/e4_alt, - /datum/mil_rank/army/e5, - /datum/mil_rank/fleet/e3, - /datum/mil_rank/fleet/e4, - /datum/mil_rank/fleet/e5 - ) - min_skill = list( SKILL_BUREAUCRACY = SKILL_BASIC, - SKILL_EVA = SKILL_BASIC, - SKILL_COMBAT = SKILL_BASIC, - SKILL_WEAPONS = SKILL_ADEPT, - SKILL_FORENSICS = SKILL_BASIC) - - max_skill = list( SKILL_COMBAT = SKILL_MAX, - SKILL_WEAPONS = SKILL_MAX, - SKILL_FORENSICS = SKILL_EXPERT) - - access = list( - access_security, access_brig, access_maint_tunnels, - access_external_airlocks, access_emergency_storage, - access_eva, access_sec_doors, access_solgov_crew, - access_radio_sec - ) - - software_on_spawn = list(/datum/computer_file/program/digitalwarrant, - /datum/computer_file/program/camera_monitor) - -/* До лучших времен -/datum/job/officer/sfp - title = "Police Enforcer" - total_positions = 2 - spawn_positions = 2 - hud_icon = "hudmasteratarms" - alt_titles = list( - "Police Officer", - "Police Operative" - ) - allowed_branches = list( - /datum/mil_branch/solgov = /decl/hierarchy/outfit/job/torch/crew/security/maa/agent - ) - allowed_ranks = list( - /datum/mil_rank/sol/junior_agent, - /datum/mil_rank/sol/agent - ) -*/ diff --git a/maps/torch/job/service_jobs.dm b/maps/torch/job/service_jobs.dm deleted file mode 100644 index 1282fa2cb9b8f..0000000000000 --- a/maps/torch/job/service_jobs.dm +++ /dev/null @@ -1,144 +0,0 @@ -/datum/job/chaplain - title = "Chaplain" - department = "Service" - department_flag = SRV - total_positions = 1 - spawn_positions = 1 - minimum_character_age = list(SPECIES_HUMAN = 24) - ideal_character_age = 40 - economic_power = 6 - minimal_player_age = 0 - supervisors = "the Executive Officer" - outfit_type = /decl/hierarchy/outfit/job/torch/crew/service/chaplain - allowed_branches = list( - /datum/mil_branch/civilian, - /datum/mil_branch/expeditionary_corps = /decl/hierarchy/outfit/job/torch/crew/service/chaplain/ec, - /datum/mil_branch/fleet = /decl/hierarchy/outfit/job/torch/crew/service/chaplain/fleet, - /datum/mil_branch/army = /decl/hierarchy/outfit/job/torch/crew/service/chaplain/army - ) - allowed_ranks = list( - /datum/mil_rank/civ/contractor, - /datum/mil_rank/fleet/o1, - /datum/mil_rank/fleet/o2, - /datum/mil_rank/army/o1, - /datum/mil_rank/army/o2, - /datum/mil_rank/ec/o1) - min_skill = list(SKILL_BUREAUCRACY = SKILL_BASIC) - - access = list( - access_morgue, access_chapel_office, - access_crematorium, access_solgov_crew, - access_radio_serv - ) - -/datum/job/janitor - title = "Sanitation Technician" - department = "Service" - department_flag = SRV - total_positions = 2 - spawn_positions = 2 - supervisors = "the Executive Officer" - minimum_character_age = list(SPECIES_HUMAN = 18) - ideal_character_age = 20 - alt_titles = list( - "Janitor") - outfit_type = /decl/hierarchy/outfit/job/torch/crew/service/janitor - allowed_branches = list( - /datum/mil_branch/civilian, - /datum/mil_branch/expeditionary_corps = /decl/hierarchy/outfit/job/torch/crew/service/janitor/ec, - /datum/mil_branch/fleet = /decl/hierarchy/outfit/job/torch/crew/service/janitor/fleet, - /datum/mil_branch/army = /decl/hierarchy/outfit/job/torch/crew/service/janitor/army - ) - allowed_ranks = list( - /datum/mil_rank/civ/contractor, - /datum/mil_rank/fleet/e2, - /datum/mil_rank/ec/e3, - /datum/mil_rank/fleet/e3, - /datum/mil_rank/fleet/e4, - /datum/mil_rank/army/e2, - /datum/mil_rank/army/e3, - /datum/mil_rank/army/e4_alt - ) - min_skill = list( SKILL_HAULING = SKILL_BASIC) - - access = list( - access_maint_tunnels, access_emergency_storage, - access_janitor, access_solgov_crew, - access_radio_serv - ) - - -/datum/job/chef - title = "Steward" - department = "Service" - department_flag = SRV - total_positions = 2 - spawn_positions = 2 - minimum_character_age = list(SPECIES_HUMAN = 18) - supervisors = "the Executive Officer" - alt_titles = list( - "Bartender", - "Cook", - "Culinary Specialist" - ) - outfit_type = /decl/hierarchy/outfit/job/torch/crew/service/cook - allowed_branches = list( - /datum/mil_branch/civilian, - /datum/mil_branch/expeditionary_corps = /decl/hierarchy/outfit/job/torch/crew/service/cook/ec, - /datum/mil_branch/fleet = /decl/hierarchy/outfit/job/torch/crew/service/cook/fleet, - /datum/mil_branch/army = /decl/hierarchy/outfit/job/torch/crew/service/cook/army - ) - allowed_ranks = list( - /datum/mil_rank/civ/contractor, - /datum/mil_rank/ec/e3, - /datum/mil_rank/fleet/e2, - /datum/mil_rank/fleet/e3, - /datum/mil_rank/fleet/e4, - /datum/mil_rank/army/e2, - /datum/mil_rank/army/e3, - /datum/mil_rank/army/e4_alt - ) - min_skill = list( - SKILL_BOTANY = SKILL_BASIC, - SKILL_CHEMISTRY = SKILL_BASIC, - SKILL_COOKING = SKILL_ADEPT - ) - min_skill = list( - SKILL_BOTANY = SKILL_BASIC, - SKILL_CHEMISTRY = SKILL_BASIC, - SKILL_COOKING = SKILL_ADEPT - ) - access = list( - access_commissary, - access_hydroponics, - access_kitchen, - access_radio_serv, - access_solgov_crew - ) - - -/datum/job/crew - title = "Crewman" - department = "Service" - department_flag = SRV - total_positions = 5 - spawn_positions = 5 - supervisors = "the Executive Officer and SolGov Personnel" - minimum_character_age = list(SPECIES_HUMAN = 18) - ideal_character_age = 20 - outfit_type = /decl/hierarchy/outfit/job/torch/crew/service/crewman - allowed_branches = list( - /datum/mil_branch/expeditionary_corps, - /datum/mil_branch/fleet = /decl/hierarchy/outfit/job/torch/crew/service/crewman/fleet - ) - allowed_ranks = list( - /datum/mil_rank/ec/e3, - /datum/mil_rank/fleet/e2, - /datum/mil_rank/fleet/e3, - /datum/mil_rank/fleet/e4 - ) - - access = list( - access_maint_tunnels, access_emergency_storage, - access_solgov_crew, access_radio_serv - ) diff --git a/maps/torch/job/supply_jobs.dm b/maps/torch/job/supply_jobs.dm deleted file mode 100644 index 65f06dcbfbd3d..0000000000000 --- a/maps/torch/job/supply_jobs.dm +++ /dev/null @@ -1,131 +0,0 @@ -/datum/job/qm - title = "Deck Chief" - department = "Supply" - department_flag = SUP - total_positions = 1 - spawn_positions = 1 - supervisors = "the Executive Officer" - economic_power = 5 - minimal_player_age = 0 - minimum_character_age = list(SPECIES_HUMAN = 27) - ideal_character_age = 35 - outfit_type = /decl/hierarchy/outfit/job/torch/crew/supply/deckofficer - allowed_branches = list( - /datum/mil_branch/expeditionary_corps, - /datum/mil_branch/fleet = /decl/hierarchy/outfit/job/torch/crew/supply/deckofficer/fleet, - /datum/mil_branch/army = /decl/hierarchy/outfit/job/torch/crew/supply/deckofficer/army - ) - allowed_ranks = list( - /datum/mil_rank/fleet/e6, - /datum/mil_rank/ec/e7, - /datum/mil_rank/ec/o1, - /datum/mil_rank/fleet/e7, - /datum/mil_rank/fleet/e8, - /datum/mil_rank/fleet/o1, - /datum/mil_rank/army/e6, - /datum/mil_rank/army/e7, - /datum/mil_rank/army/e8, - /datum/mil_rank/army/o1, - ) - min_skill = list( SKILL_BUREAUCRACY = SKILL_ADEPT, - SKILL_FINANCE = SKILL_BASIC, - SKILL_HAULING = SKILL_BASIC, - SKILL_EVA = SKILL_BASIC, - SKILL_PILOT = SKILL_BASIC, - SKILL_MECH = SKILL_BASIC) - - max_skill = list( SKILL_PILOT = SKILL_MAX) - skill_points = 18 - - access = list( - access_maint_tunnels, access_bridge, access_emergency_storage, access_tech_storage, access_cargo, access_guppy_helm, - access_cargo_bot, access_qm, access_mailsorting, access_solgov_crew, access_expedition_shuttle, access_guppy, access_hangar, - access_mining, access_mining_office, access_mining_station, access_commissary, access_teleporter, access_eva, access_torch_fax, - access_radio_sup, access_radio_exp, access_radio_comm - ) - - software_on_spawn = list(/datum/computer_file/program/supply, - /datum/computer_file/program/deck_management, - /datum/computer_file/program/reports) - -/datum/job/cargo_tech - title = "Deck Technician" - department = "Supply" - department_flag = SUP - total_positions = 3 - spawn_positions = 3 - supervisors = "the Deck Chief and Executive Officer" - minimum_character_age = list(SPECIES_HUMAN = 18) - ideal_character_age = 24 - outfit_type = /decl/hierarchy/outfit/job/torch/crew/supply/tech - allowed_branches = list( - /datum/mil_branch/expeditionary_corps, - /datum/mil_branch/fleet = /decl/hierarchy/outfit/job/torch/crew/supply/tech/fleet, - /datum/mil_branch/civilian = /decl/hierarchy/outfit/job/torch/crew/supply/contractor, - /datum/mil_branch/army = /decl/hierarchy/outfit/job/torch/crew/supply/tech/army - ) - allowed_ranks = list( - /datum/mil_rank/fleet/e2, - /datum/mil_rank/ec/e3, - /datum/mil_rank/ec/e5, - /datum/mil_rank/fleet/e3, - /datum/mil_rank/fleet/e4, - /datum/mil_rank/fleet/e5, - /datum/mil_rank/army/e2, - /datum/mil_rank/army/e3, - /datum/mil_rank/army/e4_alt, - /datum/mil_rank/army/e5, - /datum/mil_rank/civ/contractor - ) - min_skill = list( SKILL_BUREAUCRACY = SKILL_BASIC, - SKILL_FINANCE = SKILL_BASIC, - SKILL_HAULING = SKILL_BASIC, - SKILL_MECH = SKILL_BASIC) - - max_skill = list( SKILL_PILOT = SKILL_MAX) - - access = list( - access_maint_tunnels, access_emergency_storage, access_cargo, access_guppy_helm, - access_cargo_bot, access_mailsorting, access_solgov_crew, access_expedition_shuttle, - access_guppy, access_hangar, access_commissary, access_radio_sup - ) - - software_on_spawn = list(/datum/computer_file/program/supply, - /datum/computer_file/program/deck_management, - /datum/computer_file/program/reports) - -/datum/job/mining - title = "Prospector" - department = "Supply" - department_flag = SUP - total_positions = 2 - spawn_positions = 2 - supervisors = "the Deck Chief, the Corporate Liaison and the Executive Officer" - economic_power = 7 - minimum_character_age = list(SPECIES_HUMAN = 18) - ideal_character_age = 25 - alt_titles = list( - "Drill Technician", - "Shaft Miner", - "Salvage Technician") - min_skill = list( SKILL_HAULING = SKILL_ADEPT, - SKILL_EVA = SKILL_BASIC) - - max_skill = list( SKILL_PILOT = SKILL_MAX) - - outfit_type = /decl/hierarchy/outfit/job/torch/passenger/research/prospector - allowed_branches = list( - /datum/mil_branch/civilian, - /datum/mil_branch/expeditionary_corps = /decl/hierarchy/outfit/job/torch/passenger/research/prospector/ec - ) - allowed_ranks = list( - /datum/mil_rank/civ/contractor, - /datum/mil_rank/ec/e3 - ) - - access = list( - access_mining, access_mining_office, access_mining_station, - access_expedition_shuttle, access_guppy, access_hangar, - access_guppy_helm, access_solgov_crew, access_eva, - access_radio_exp, access_radio_sup - ) diff --git a/maps/torch/job/torch_access.dm b/maps/torch/job/torch_access.dm deleted file mode 100644 index c394afabc38c5..0000000000000 --- a/maps/torch/job/torch_access.dm +++ /dev/null @@ -1,306 +0,0 @@ -/************ -* SEV Torch * -************/ -var/global/const/access_hangar = "ACCESS_TORCH_HANGAR" //73 -/datum/access/hangar - id = access_hangar - desc = "Hangar Deck" - region = ACCESS_REGION_GENERAL - -var/global/const/access_guppy_helm = "ACCESS_TORCH_GUP_HELM" //76 -/datum/access/guppy_helm - id = access_guppy_helm - desc = "General Utility Pod Helm" - region = ACCESS_REGION_GENERAL - -var/global/const/access_expedition_shuttle_helm = "ACCESS_EXPLO_HELM" //77 -/datum/access/exploration_shuttle_helm - id = access_expedition_shuttle_helm - desc = "Charon Helm" - region = ACCESS_REGION_GENERAL - -var/global/const/access_aquila = "ACCESS_TORCH_AQUILA" //78 -/datum/access/aquila - id = access_aquila - desc = "Aquila" - region = ACCESS_REGION_GENERAL - -var/global/const/access_aquila_helm = "ACCESS_TORCH_AQUILA_HELM" //79 -/datum/access/aquila_helm - id = access_aquila_helm - desc = "Aquila Helm" - region = ACCESS_REGION_GENERAL - -var/global/const/access_solgov_crew = "ACCESS_TORCH_CREW" //80 -/datum/access/solgov_crew - id = access_solgov_crew - desc = "SolGov Crew" - region = ACCESS_REGION_GENERAL - -var/global/const/access_nanotrasen = "ACCESS_TORCH_CORP" //81 -/datum/access/nanotrasen - id = access_nanotrasen - desc = "Corporate Personnel" - region = ACCESS_REGION_SERVICE - -var/global/const/access_emergency_armory = "ACCESS_TORCH_ARMORY" //83 -/datum/access/emergency_armory - id = access_emergency_armory - desc = "Emergency Armory" - region = ACCESS_REGION_COMMAND - -var/global/const/access_liaison = "ACCESS_TORCH_CORPORATE_LIAISON" //84 -/datum/access/liaison - id = access_liaison - desc = "Corporate Liaison" - region = ACCESS_REGION_COMMAND - access_type = ACCESS_TYPE_NONE //Ruler of their own domain, CO and RD cannot enter - -var/global/const/access_representative = "ACCESS_TORCH_REPRESENTATIVE" //85 -/datum/access/representative - id = access_representative - desc = "SolGov Representative" - region = ACCESS_REGION_COMMAND - access_type = ACCESS_TYPE_NONE //Ruler of their own domain, CO cannot enter - -var/global/const/access_sec_guard = "ACCESS_TORCH_SECURITY_GUARD" //86 -/datum/access/sec_guard - id = access_sec_guard - desc = "Corporate Security" - region = ACCESS_REGION_SERVICE - -var/global/const/access_gun = "ACCESS_TORCH_CANNON" //87 -/datum/access/gun - id = access_gun - desc = "Gunnery" - region = ACCESS_REGION_COMMAND - -var/global/const/access_expedition_shuttle = "ACCESS_TORCH_EXPLO" //88 -/datum/access/exploration_shuttle - id = access_expedition_shuttle - desc = "Charon" - region = ACCESS_REGION_GENERAL - -var/global/const/access_guppy = "ACCESS_TORCH_GUP" //89 -/datum/access/guppy - id = access_guppy - desc = "General Utility Pod" - region = ACCESS_REGION_GENERAL - -var/global/const/access_seneng = "ACCESS_TORCH_SENIOR_ENG" //90 -/datum/access/seneng - id = access_seneng - desc = "Senior Engineer" - region = ACCESS_REGION_ENGINEERING - -var/global/const/access_senmed = "ACCESS_TORCH_SENIOR_MED" //91 -/datum/access/senmed - id = access_senmed - desc = "Physician" - region = ACCESS_REGION_MEDBAY - -var/global/const/access_senadv = "ACCESS_TORCH_SENIOR_ADVISOR" //92 -/datum/access/senadv - id = access_senadv - desc = "Senior Enlisted Advisor" - region = ACCESS_REGION_COMMAND - -var/global/const/access_explorer = "ACCESS_TORCH_EXPLORER" //93 -/datum/access/explorer - id = access_explorer - desc = "Explorer" - region = ACCESS_REGION_GENERAL - -var/global/const/access_pathfinder = "ACCESS_TORCH_PATHFINDER" //94 -/datum/access/pathfinder - id = access_pathfinder - desc = "Pathfinder" - region = ACCESS_REGION_GENERAL - -var/global/const/access_pilot = "ACCESS_TORCH_PILOT" //95 -/datum/access/pilot - id = access_pilot - desc = "Pilot" - region = ACCESS_REGION_GENERAL - -//proxima code -/var/const/access_exploration_guard = "ACCESS_TORCH_EXPLORATION_GUARD" -/datum/access/access_exploration_guard - id = access_exploration_guard - desc = "Exploration Guard" - region = ACCESS_REGION_GENERAL -//proxima code end - - -/var/const/access_commissary = "ACCESS_TORCH_SHOP" //96 -/datum/access/commissary - id = access_commissary - desc = "Commissary" - region = ACCESS_REGION_GENERAL - -/var/const/access_research_security = "ACCESS_RESEARCH_SECURITY" //97 -/datum/access/rnd_guard - id = access_research_security - desc = "Research Checkpoint" - region = ACCESS_REGION_RESEARCH - -/datum/access/psychiatrist - desc = "Mental Health" - -/datum/access/hos - desc = "Chief of Security" - -/datum/access/hop - desc = "Executive Officer" - -/datum/access/qm - desc = "Deck Chief" - -var/global/const/access_torch_fax = "ACCESS_TORCH_FAX" -/datum/access/torch_fax - id = access_torch_fax - desc = "Fax Machines" - region = ACCESS_REGION_COMMAND - -/datum/access/robotics - region = ACCESS_REGION_ENGINEERING - -/datum/access/network - region = ACCESS_REGION_COMMAND - -/datum/access/network_admin - region = ACCESS_REGION_COMMAND - -/datum/access/chapel_office - region = ACCESS_REGION_SERVICE - -/datum/access/bar - region = ACCESS_REGION_SERVICE - -/datum/access/kitchen - region = ACCESS_REGION_SERVICE - -/datum/access/eva - region = ACCESS_REGION_GENERAL - -/datum/access/crematorium - region = ACCESS_REGION_MEDBAY - -/datum/access/janitor - region = ACCESS_REGION_SERVICE - -/datum/access/ai_upload - desc = "Cyborg Upload" - -/************* -* NRV Petrov * -*************/ -var/global/const/access_petrov = "ACCESS_TORCH_PETROV" //200 -/datum/access/petrov - id = access_petrov - desc = "Petrov" - region = ACCESS_REGION_GENERAL - -var/global/const/access_petrov_helm = "ACCESS_TORCH_PETROV_HELM" //201 -/datum/access/petrov_helm - id = access_petrov_helm - desc = "Petrov Helm" - region = ACCESS_REGION_GENERAL - -var/global/const/access_petrov_analysis = "ACCESS_TORCH_PETROV_ANALYSIS" //202 -/datum/access/petrov_analysis - id = access_petrov_analysis - desc = "Petrov Analysis Lab" - region = ACCESS_REGION_RESEARCH - -var/global/const/access_petrov_phoron = "ACCESS_TORCH_PETROV_PHORON" //203 -/datum/access/petrov_phoron - id = access_petrov_phoron - desc = "Petrov Phoron Sublimation Lab" - region = ACCESS_REGION_RESEARCH - -var/global/const/access_petrov_toxins = "ACCESS_TORCH_PETROV_TOXINS" //204 -/datum/access/petrov_toxins - id = access_petrov_toxins - desc = "Petrov Toxins Lab" - region = ACCESS_REGION_RESEARCH - -var/global/const/access_petrov_chemistry = "ACCESS_TORCH_PETROV_CHEMISTRY" //205 -/datum/access/petrov_chemistry - id = access_petrov_chemistry - desc = "Petrov Chemistry Lab" - region = ACCESS_REGION_RESEARCH - -var/global/const/access_petrov_rd = "ACCESS_TORCH_PETROV_RD" //206 -/datum/access/petrov_rd - id = access_petrov_rd - desc = "Petrov Chief Science Officer's Office" - region = ACCESS_REGION_COMMAND - -var/global/const/access_petrov_control = "ACCESS_TORCH_PETROV_CONTROL" //207 -/datum/access/petrov_control - id = access_petrov_control - desc = "Petrov Control Room" - region = ACCESS_REGION_RESEARCH - -var/global/const/access_petrov_maint = "ACCESS_TORCH_PETROV_MAINT" //208 -/datum/access/petrov_maint - id = access_petrov_maint - desc = "Petrov Maintenance" - region = ACCESS_REGION_GENERAL - -var/global/const/access_torch_helm = "ACCESS_TORCH_HELM" -/datum/access/torch_helm - id = access_torch_helm - desc = "Torch Helm" - region = ACCESS_REGION_COMMAND - -// Torch Radio Access - -var/global/const/access_radio_comm = "ACCESS_RADIO_COMM" -/datum/access/access_radio_comm - id = access_radio_comm - desc = "Command Radio" - region = ACCESS_REGION_COMMAND - -var/global/const/access_radio_eng = "ACCESS_RADIO_ENG" -/datum/access/access_radio_eng - id = access_radio_eng - desc = "Engineering Radio" - region = ACCESS_REGION_ENGINEERING - -var/global/const/access_radio_med = "ACCESS_RADIO_MED" -/datum/access/access_radio_med - id = access_radio_med - desc = "Medical Radio" - region = ACCESS_REGION_MEDBAY - -var/global/const/access_radio_sec = "ACCESS_RADIO_SEC" -/datum/access/access_radio_sec - id = access_radio_sec - desc = "Security Radio" - region = ACCESS_REGION_SECURITY - -var/global/const/access_radio_sci = "ACCESS_RADIO_SCI" -/datum/access/access_radio_sic - id = access_radio_sci - desc = "Science Radio" - region = ACCESS_REGION_RESEARCH - -var/global/const/access_radio_sup = "ACCESS_RADIO_SUP" -/datum/access/access_radio_sup - id = access_radio_sup - desc = "Supply Radio" - region = ACCESS_REGION_SUPPLY - -var/global/const/access_radio_serv = "ACCESS_RADIO_SERV" -/datum/access/access_radio_serv - id = access_radio_serv - desc = "Service Radio" - region = ACCESS_REGION_SERVICE - -var/global/const/access_radio_exp = "ACCESS_RADIO_EXP" -/datum/access/access_radio_exp - id = access_radio_exp - desc = "Exploration Radio" - region = ACCESS_REGION_GENERAL diff --git a/maps/torch/job/torch_jobs.dm b/maps/torch/job/torch_jobs.dm deleted file mode 100644 index a9f9a37a52572..0000000000000 --- a/maps/torch/job/torch_jobs.dm +++ /dev/null @@ -1,98 +0,0 @@ -/datum/map/torch - species_to_job_whitelist = list( - /datum/species/adherent = list(/datum/job/ai, /datum/job/cyborg, /datum/job/assistant, /datum/job/janitor, /datum/job/chef, /datum/job/cargo_tech, - /datum/job/engineer, /datum/job/roboticist, /datum/job/chemist, /datum/job/scientist_assistant, /datum/job/scientist, /datum/job/nt_pilot, - /datum/job/mining), - /datum/species/nabber = list(/datum/job/ai, /datum/job/cyborg, /datum/job/janitor, /datum/job/scientist_assistant, /datum/job/chemist, - /datum/job/roboticist, /datum/job/cargo_tech, /datum/job/chef, /datum/job/engineer, /datum/job/doctor), - /datum/species/vox = list(/datum/job/ai, /datum/job/cyborg), - /datum/species/human/mule = list(/datum/job/ai, /datum/job/cyborg, /datum/job/merchant) - ) - -#define HUMAN_ONLY_JOBS /datum/job/captain, /datum/job/hop, /datum/job/cmo, /datum/job/chief_engineer, /datum/job/hos, /datum/job/representative, /datum/job/sea, /datum/job/pathfinder, /datum/job/rd - species_to_job_blacklist = list( - /datum/species/unathi = list(HUMAN_ONLY_JOBS, /datum/job/liaison, /datum/job/research_guard, /datum/job/warden, /datum/job/synthetic), //Other jobs unavailable via branch restrictions, - /datum/species/unathi/yeosa = list(HUMAN_ONLY_JOBS, /datum/job/liaison, /datum/job/research_guard, /datum/job/warden, /datum/job/synthetic), - /datum/species/skrell = list(HUMAN_ONLY_JOBS, /datum/job/synthetic), - /datum/species/machine = list(HUMAN_ONLY_JOBS, /datum/job/liaison, /datum/job/psychiatrist, /datum/job/synthetic), - /datum/species/machine/shell = list(HUMAN_ONLY_JOBS, /datum/job/liaison, /datum/job/psychiatrist, /datum/job/officer, /datum/job/warden), - /datum/species/diona = list(HUMAN_ONLY_JOBS, /datum/job/research_guard, /datum/job/officer, /datum/job/liaison, /datum/job/warden, /datum/job/doctor, /datum/job/medical_trainee, /datum/job/synthetic), //Other jobs unavailable via branch restrictions, - /datum/species/human/gravworlder = list(/datum/job/synthetic), - /datum/species/human/spacer = list(/datum/job/synthetic), - /datum/species/human/vatgrown = list(/datum/job/synthetic), - /datum/species/human/tritonian = list(/datum/job/synthetic), - /datum/species/human/mule = list(/datum/job/synthetic), - /datum/species/human = list(/datum/job/synthetic) - ) -#undef HUMAN_ONLY_JOBS - - allowed_jobs = list(/datum/job/captain, /datum/job/hop, /datum/job/rd, /datum/job/cmo, /datum/job/chief_engineer, /datum/job/hos, - /datum/job/liaison, /datum/job/representative, /datum/job/sea, /datum/job/synthetic, - /datum/job/bridgeofficer, /datum/job/pathfinder, /datum/job/nt_pilot, /datum/job/explorer, - /datum/job/expeng, /datum/job/expmed, /datum/job/expmar, - /datum/job/senior_engineer, /datum/job/roboticist, /datum/job/engineer, /datum/job/engineer_trainee, - /datum/job/officer, /datum/job/warden, /datum/job/detective, - /datum/job/senior_doctor, /datum/job/doctor, /datum/job/junior_doctor, /datum/job/chemist, /datum/job/medical_trainee, - /datum/job/psychiatrist, /datum/job/chaplain, - /datum/job/qm, /datum/job/cargo_tech, /datum/job/mining, - /datum/job/janitor, /datum/job/chef, - /datum/job/senior_scientist, /datum/job/scientist, /datum/job/scientist_assistant, /datum/job/research_guard, - /datum/job/ai, /datum/job/cyborg, - /datum/job/crew, /datum/job/assistant, - /datum/job/merchant - ) - - access_modify_region = list( - ACCESS_REGION_SECURITY = list(access_hos, access_change_ids), - ACCESS_REGION_MEDBAY = list(access_cmo, access_change_ids), - ACCESS_REGION_RESEARCH = list(access_rd, access_change_ids), - ACCESS_REGION_ENGINEERING = list(access_ce, access_change_ids), - ACCESS_REGION_COMMAND = list(access_change_ids), - ACCESS_REGION_GENERAL = list(access_change_ids), - ACCESS_REGION_SUPPLY = list(access_qm, access_change_ids), - ACCESS_REGION_SERVICE = list(access_hop, access_change_ids) - ) - -/datum/map/torch/setup_job_lists() - for(var/job_type in allowed_jobs) - var/datum/job/job = SSjobs.get_by_path(job_type) - // Most species are restricted from SCG security and command roles - if(job && (job.department_flag & COM) && job.allowed_branches.len && !(/datum/mil_branch/civilian in job.allowed_branches)) - for(var/species_name in list(SPECIES_IPC, SPECIES_SKRELL, SPECIES_UNATHI)) - var/datum/species/S = all_species[species_name] - var/species_blacklist = species_to_job_blacklist[S.type] - if(!species_blacklist) - species_blacklist = list() - species_to_job_blacklist[S.type] = species_blacklist - species_blacklist |= job.type - -// Some jobs for nabber grades defined here due to map-specific job datums. -/decl/cultural_info/culture/nabber/New() - LAZYADD(valid_jobs, /datum/job/scientist_assistant) - ..() - -/decl/cultural_info/culture/nabber/b/New() - LAZYADD(valid_jobs, /datum/job/cargo_tech) - ..() - -/decl/cultural_info/culture/nabber/a/New() - LAZYADD(valid_jobs, /datum/job/engineer) - ..() - -/decl/cultural_info/culture/nabber/a/plus/New() - LAZYADD(valid_jobs, /datum/job/doctor) - ..() - -/datum/job - allowed_branches = list( - /datum/mil_branch/civilian - ) - allowed_ranks = list( - /datum/mil_rank/civ/civ - ) - required_language = LANGUAGE_HUMAN_EURO - psi_latency_chance = 5 - give_psionic_implant_on_join = FALSE - -/datum/map/torch - default_assistant_title = "Passenger" diff --git a/maps/torch/language/human/euro.dm b/maps/torch/language/human/euro.dm deleted file mode 100644 index 1aa6cf3233392..0000000000000 --- a/maps/torch/language/human/euro.dm +++ /dev/null @@ -1,2 +0,0 @@ -/datum/language/human/euro - warning = "Automatically given if spawning on the Torch." diff --git a/maps/torch/language/human/misc/spacer.dm b/maps/torch/language/human/misc/spacer.dm deleted file mode 100644 index 5e384d0bd2465..0000000000000 --- a/maps/torch/language/human/misc/spacer.dm +++ /dev/null @@ -1,2 +0,0 @@ -/datum/language/spacer - warning = "Automatically given if spawning with no languages, except on the Torch." diff --git a/maps/torch/loadout/_defines.dm b/maps/torch/loadout/_defines.dm deleted file mode 100644 index 3d29a72581718..0000000000000 --- a/maps/torch/loadout/_defines.dm +++ /dev/null @@ -1,55 +0,0 @@ -//The following is a list of defs to be used for the Torch loadout. - -//For jobs that allow for decorative or ceremonial clothing -#define FORMAL_ROLES list(/datum/job/liaison, /datum/job/rd, /datum/job/senior_scientist, /datum/job/scientist, /datum/job/research_guard, /datum/job/scientist_assistant, /datum/job/psychiatrist, /datum/job/representative, /datum/job/assistant, /datum/job/merchant, /datum/job/detective, /datum/job/chaplain, /datum/job/submap/bearcat_captain, /datum/job/submap/bearcat_crewman, /datum/job/submap/colonist, /datum/job/submap/pod, /datum/job/chef, /datum/job/submap/scavver_pilot, /datum/job/submap/scavver_doctor, /datum/job/submap/scavver_engineer) - -//For civilian jobs that may have a uniform, but not a strict one -#define SEMIFORMAL_ROLES list(/datum/job/assistant, /datum/job/cargo_tech, /datum/job/mining, /datum/job/scientist_assistant, /datum/job/psychiatrist, /datum/job/merchant, /datum/job/nt_pilot, /datum/job/scientist, /datum/job/senior_scientist, /datum/job/detective, /datum/job/chaplain, /datum/job/engineer, /datum/job/roboticist, /datum/job/submap/bearcat_captain, /datum/job/submap/bearcat_crewman, /datum/job/submap/colonist, /datum/job/submap/pod, /datum/job/chef, /datum/job/submap/scavver_pilot, /datum/job/submap/scavver_doctor, /datum/job/submap/scavver_engineer, /datum/job/senior_doctor, /datum/job/junior_doctor, /datum/job/doctor, /datum/job/synthetic) - -//For civilian jobs that may have a strict uniform. -#define SEMIANDFORMAL_ROLES list(/datum/job/assistant, /datum/job/mining, /datum/job/scientist_assistant, /datum/job/psychiatrist, /datum/job/merchant, /datum/job/nt_pilot, /datum/job/liaison, /datum/job/rd, /datum/job/senior_scientist, /datum/job/scientist, /datum/job/research_guard, /datum/job/representative, /datum/job/detective, /datum/job/chaplain, /datum/job/submap/bearcat_captain, /datum/job/submap/bearcat_crewman, /datum/job/submap/colonist, /datum/job/submap/pod, /datum/job/chef, /datum/job/submap/scavver_pilot, /datum/job/submap/scavver_doctor, /datum/job/submap/scavver_engineer, /datum/job/senior_doctor, /datum/job/junior_doctor, /datum/job/doctor, /datum/job/synthetic) - -//For civilian jobs with no uniform or formal clothing requirements. -#define CASUAL_ROLES list(/datum/job/assistant, /datum/job/janitor, /datum/job/chef, /datum/job/cargo_tech, /datum/job/roboticist, /datum/job/mining, /datum/job/chaplain, /datum/job/merchant, /datum/job/submap/bearcat_captain, /datum/job/submap/bearcat_crewman, /datum/job/submap/colonist, /datum/job/submap/pod, /datum/job/submap/scavver_pilot, /datum/job/submap/scavver_doctor, /datum/job/submap/scavver_engineer, /datum/job/senior_doctor, /datum/job/junior_doctor, /datum/job/doctor, /datum/job/scientist, /datum/job/senior_scientist, /datum/job/scientist_assistant, /datum/job/synthetic) - -//For roles that would have a higher level of education, typically doctors and other scientists -#define DOCTOR_ROLES list(/datum/job/cmo, /datum/job/senior_doctor, /datum/job/junior_doctor, /datum/job/chemist, /datum/job/psychiatrist, /datum/job/roboticist, /datum/job/rd, /datum/job/senior_scientist, /datum/job/scientist, /datum/job/synthetic) - -//For members of the medical department -#define MEDICAL_ROLES list(/datum/job/cmo, /datum/job/senior_doctor, /datum/job/junior_doctor, /datum/job/doctor, /datum/job/psychiatrist, /datum/job/chemist, /datum/job/medical_trainee, /datum/job/expmed, /datum/job/synthetic) - -//For members of the medical department, roboticists, and some Research -#define STERILE_ROLES list(/datum/job/cmo, /datum/job/senior_doctor, /datum/job/junior_doctor, /datum/job/doctor, /datum/job/chemist, /datum/job/psychiatrist, /datum/job/roboticist, /datum/job/rd, /datum/job/senior_scientist, /datum/job/scientist, /datum/job/scientist_assistant, /datum/job/medical_trainee, /datum/job/expmed, /datum/job/synthetic) - -//For members of the engineering department -#define ENGINEERING_ROLES list(/datum/job/chief_engineer, /datum/job/senior_engineer, /datum/job/engineer, /datum/job/roboticist, /datum/job/engineer_trainee, /datum/job/expeng, /datum/job/synthetic) - -//For members of Engineering, Cargo, and Research -#define TECHNICAL_ROLES list(/datum/job/senior_engineer, /datum/job/engineer, /datum/job/roboticist, /datum/job/qm, /datum/job/cargo_tech, /datum/job/mining, /datum/job/scientist_assistant, /datum/job/merchant, /datum/job/rd, /datum/job/senior_scientist, /datum/job/scientist, /datum/job/chief_engineer, /datum/job/janitor, /datum/job/engineer_trainee, /datum/job/nt_pilot, /datum/job/expeng, /datum/job/synthetic) - -//For members of the security department -#define SECURITY_ROLES list(/datum/job/hos, /datum/job/warden, /datum/job/detective, /datum/job/officer, /datum/job/expmar) - -//For members of the supply department -#define SUPPLY_ROLES list(/datum/job/qm, /datum/job/cargo_tech) - -//For members of the service department -#define SERVICE_ROLES list(/datum/job/janitor, /datum/job/chef, /datum/job/crew, /datum/job/chaplain, /datum/job/synthetic) - -//For members of the exploration department -#define EXPLORATION_ROLES list(/datum/job/pathfinder, /datum/job/nt_pilot, /datum/job/explorer, /datum/job/expmar, /datum/job/expeng, /datum/job/expmed, /datum/job/synthetic) - -//For members of the research department and jobs that are scientific -#define RESEARCH_ROLES list(/datum/job/rd, /datum/job/scientist, /datum/job/mining, /datum/job/scientist_assistant, /datum/job/assistant, /datum/job/nt_pilot, /datum/job/senior_scientist, /datum/job/roboticist, /datum/job/research_guard, /datum/job/synthetic) - -//For jobs that spawn with weapons in their lockers -#define ARMED_ROLES list(/datum/job/captain, /datum/job/hop, /datum/job/rd, /datum/job/cmo, /datum/job/chief_engineer, /datum/job/hos, /datum/job/sea, /datum/job/officer, /datum/job/warden, /datum/job/detective, /datum/job/merchant, /datum/job/submap/scavver_pilot, /datum/job/submap/scavver_doctor, /datum/job/submap/scavver_engineer, /datum/job/research_guard, /datum/job/expmar) - -//For jobs that spawn with armor in their lockers -#define ARMORED_ROLES list(/datum/job/captain, /datum/job/hop, /datum/job/rd, /datum/job/cmo, /datum/job/chief_engineer, /datum/job/hos, /datum/job/qm, /datum/job/sea, /datum/job/officer, /datum/job/warden, /datum/job/detective, /datum/job/merchant, /datum/job/submap/skrellscoutship_crew, /datum/job/submap/skrellscoutship_crew/leader, /datum/job/submap/scavver_pilot, /datum/job/submap/scavver_doctor, /datum/job/submap/scavver_engineer, /datum/job/research_guard, /datum/job/expmar) - -#define UNIFORMED_BRANCHES list(/datum/mil_branch/expeditionary_corps, /datum/mil_branch/fleet, /datum/mil_branch/army) - -#define CIVILIAN_BRANCHES list(/datum/mil_branch/civilian, /datum/mil_branch/solgov, /datum/job/synthetic) - -#define SOLGOV_BRANCHES list(/datum/mil_branch/expeditionary_corps, /datum/mil_branch/fleet, /datum/mil_branch/army, /datum/mil_branch/solgov) diff --git a/maps/torch/loadout/loadout_accessories.dm b/maps/torch/loadout/loadout_accessories.dm deleted file mode 100644 index 476108084138f..0000000000000 --- a/maps/torch/loadout/loadout_accessories.dm +++ /dev/null @@ -1,390 +0,0 @@ -/datum/gear/accessory/solgov_award_military - display_name = "SolGov military award selection" - description = "A selection of military awards awarded by the Sol Central Government." - path = /obj/item/clothing/accessory/medal/solgov/mil - cost = 8 - allowed_branches = SOLGOV_BRANCHES - flags = GEAR_HAS_NO_CUSTOMIZATION - -/datum/gear/accessory/solgov_award_military/New() - ..() - var/solmilitary = list() - solmilitary["Bronze Heart"] = /obj/item/clothing/accessory/medal/solgov/mil/bronze_heart - solmilitary["Home Guard medal"] = /obj/item/clothing/accessory/medal/solgov/mil/home_guard - solmilitary["Iron Star"] = /obj/item/clothing/accessory/medal/solgov/mil/iron_star - solmilitary["Armed Forces medal"] = /obj/item/clothing/accessory/medal/solgov/mil/armed_forces - solmilitary["Silver Sword"] = /obj/item/clothing/accessory/medal/solgov/mil/silver_sword - solmilitary["Superior Service Cross"] = /obj/item/clothing/accessory/medal/solgov/mil/service_cross - solmilitary["Medal of Honor"] = /obj/item/clothing/accessory/medal/solgov/mil/medal_of_honor - gear_tweaks += new/datum/gear_tweak/path(solmilitary) - -/datum/gear/accessory/solgov_award_civilian - display_name = "SolGov civilian award selection" - description = "A selection of civilian awards awarded by the Sol Central Government." - path = /obj/item/clothing/accessory/medal/solgov/civ - cost = 5 - flags = GEAR_HAS_NO_CUSTOMIZATION - -/datum/gear/accessory/solgov_award_civilian/New() - ..() - var/solcivilian = list() - solcivilian["Expeditionary Medal"] = /obj/item/clothing/accessory/medal/solgov/civ/expeditionary - solcivilian["Sapientarian Peace Award"] = /obj/item/clothing/accessory/medal/solgov/civ/sapientarian - solcivilian["Distinguished Service Medal"] = /obj/item/clothing/accessory/medal/solgov/civ/service - gear_tweaks += new/datum/gear_tweak/path(solcivilian) - -/datum/gear/accessory/solgov_award_ribbons - display_name = "SolGov ribbon selection" - description = "A selection of decorations and medal ribbons awarded by the Sol Central Government." - path = /obj/item/clothing/accessory/ribbon/solgov - cost = 3 - allowed_branches = SOLGOV_BRANCHES - flags = GEAR_HAS_NO_CUSTOMIZATION - -/datum/gear/accessory/solgov_award_ribbons/New() - ..() - var/solribbons = list() - solribbons["Marksmanship ribbon"] = /obj/item/clothing/accessory/ribbon/solgov/marksman - solribbons["Peacekeeping ribbon"] = /obj/item/clothing/accessory/ribbon/solgov/peace - solribbons["Frontier ribbon"] = /obj/item/clothing/accessory/ribbon/solgov/frontier - solribbons["Instructor ribbon"] = /obj/item/clothing/accessory/ribbon/solgov/instructor - solribbons["Combat Action ribbon"] = /obj/item/clothing/accessory/ribbon/solgov/combat - solribbons["Gaia Conflict ribbon"] = /obj/item/clothing/accessory/ribbon/solgov/gaiaconflict - solribbons["Distinguished unit ribbon"] = /obj/item/clothing/accessory/ribbon/solgov/distinguished_unit - //medal ribbons - solribbons["Bronze Heart ribbon (medal)"] = /obj/item/clothing/accessory/ribbon/solgov/medal/bronze_heart - solribbons["Home Guard ribbon (medal)"] = /obj/item/clothing/accessory/ribbon/solgov/medal/home_guard - solribbons["Iron Star ribbon (medal)"] = /obj/item/clothing/accessory/ribbon/solgov/medal/iron_star - solribbons["Armed Forces ribbon (medal)"] = /obj/item/clothing/accessory/ribbon/solgov/medal/armed_forces - solribbons["Silver Sword ribbon (medal)"] = /obj/item/clothing/accessory/ribbon/solgov/medal/silver_sword - solribbons["Superior Service ribbon (medal)"] = /obj/item/clothing/accessory/ribbon/solgov/medal/service_cross - solribbons["Medal of Honor ribbon (medal)"] = /obj/item/clothing/accessory/ribbon/solgov/medal/medal_of_honor - solribbons["Expeditionary Ribbon (medal)"] = /obj/item/clothing/accessory/ribbon/solgov/medal/expeditionary_medal - solribbons["Sapientarian ribbon (medal)"] = /obj/item/clothing/accessory/ribbon/solgov/medal/sapientarian - solribbons["Distinguished Service ribbon (medal)"] = /obj/item/clothing/accessory/ribbon/solgov/medal/service - solribbons["Combat Medical ribbon (medal)"] = /obj/item/clothing/accessory/ribbon/solgov/medal/medical - gear_tweaks += new/datum/gear_tweak/path(solribbons) - -/datum/gear/accessory/tags - display_name = "dog tags" - path = /obj/item/clothing/accessory/badge/solgov/tags - custom_setup_proc = /obj/item/clothing/accessory/badge/solgov/tags/proc/loadout_setup - -/datum/gear/accessory/tags/iccgn - display_name = "ICCGN dog tags" - path = /obj/item/clothing/accessory/badge/solgov/tags/iccgn - custom_setup_proc = /obj/item/clothing/accessory/badge/solgov/tags/proc/loadout_setup - allowed_branches = list(/datum/mil_branch/expeditionary_corps, /datum/mil_branch/solgov, /datum/mil_branch/civilian) - -/datum/gear/accessory/ec_scarf - display_name = "Expeditionary Corps scarf" - path = /obj/item/clothing/accessory/solgov/ec_scarf - description = "A section-specific scarf for Expeditionary Corps uniforms." - flags = GEAR_HAS_TYPE_SELECTION | GEAR_HAS_NO_CUSTOMIZATION - allowed_branches = list( - /datum/mil_branch/expeditionary_corps - ) - -/datum/gear/accessory/ec_patch - display_name = "Expeditionary Corps patch" - path = /obj/item/clothing/accessory/solgov/ec_patch - description = "A shoulder patch representing the Expeditionary Corps." - flags = GEAR_HAS_TYPE_SELECTION | GEAR_HAS_NO_CUSTOMIZATION - allowed_branches = list( - /datum/mil_branch/expeditionary_corps - ) - -/datum/gear/accessory/torch_patch - display_name = "Torch mission patch" - path = /obj/item/clothing/accessory/solgov/torch_patch - description = "A shoulder patch representing the SEV Torch and its mission. Given to all the oddjobs pulled from various branches to work on the Torch." - flags = GEAR_HAS_NO_CUSTOMIZATION - -/datum/gear/accessory/pilot_pin - display_name = "pilot's qualification pin" - path = /obj/item/clothing/accessory/solgov/specialty/pilot - flags = GEAR_HAS_NO_CUSTOMIZATION - allowed_skills = list( - SKILL_PILOT = SKILL_ADEPT - ) - allowed_branches = list( - /datum/mil_branch/fleet, - /datum/mil_branch/expeditionary_corps - ) - -/datum/gear/accessory/fleetpatch - display_name = "fleet patch" - path = /obj/item/clothing/accessory/solgov/fleet_patch - flags = GEAR_HAS_TYPE_SELECTION | GEAR_HAS_NO_CUSTOMIZATION - allowed_branches = list( - /datum/mil_branch/fleet - ) - -/datum/gear/accessory/armband_ma - display_name = "master at arms brassard" - path = /obj/item/clothing/accessory/armband/solgov/ma - allowed_roles = SECURITY_ROLES - flags = GEAR_HAS_NO_CUSTOMIZATION - -/datum/gear/accessory/armband_security - allowed_roles = SECURITY_ROLES - -/datum/gear/accessory/armband_cargo - allowed_roles = SUPPLY_ROLES - -/datum/gear/accessory/armband_medical - allowed_roles = MEDICAL_ROLES - -/datum/gear/accessory/armband_emt - allowed_roles = list( - /datum/job/doctor, - /datum/job/medical_trainee - ) - flags = GEAR_HAS_NO_CUSTOMIZATION - -/datum/gear/accessory/armband_corpsman - display_name = "medical armband" - path = /obj/item/clothing/accessory/armband/medblue - allowed_roles = list( - /datum/job/cmo, - /datum/job/senior_doctor, - /datum/job/junior_doctor, - /datum/job/doctor, - /datum/job/medical_trainee - ) - flags = GEAR_HAS_NO_CUSTOMIZATION - -/datum/gear/accessory/armband_engineering - allowed_roles = ENGINEERING_ROLES - -/datum/gear/accessory/armband_hydro - allowed_roles = list( - /datum/job/rd, - /datum/job/scientist, - /datum/job/scientist_assistant, - /datum/job/assistant - ) - flags = GEAR_HAS_NO_CUSTOMIZATION - -/datum/gear/accessory/armband_nt - allowed_branches = CIVILIAN_BRANCHES - -/datum/gear/accessory/ntaward - allowed_branches = CIVILIAN_BRANCHES - -/datum/gear/accessory/tie - allowed_branches = CIVILIAN_BRANCHES - -/datum/gear/accessory/tie_color - allowed_branches = CIVILIAN_BRANCHES - -/datum/gear/accessory/neckerchief - -/datum/gear/accessory/stethoscope - allowed_roles = STERILE_ROLES - -/datum/gear/tactical/holster - allowed_roles = ARMED_ROLES - -/datum/gear/tactical/holster/New() - ..() - var/holsters = list() - holsters["shoulder holster"] = /obj/item/clothing/accessory/storage/holster - holsters["armpit holster"] = /obj/item/clothing/accessory/storage/holster/armpit - holsters["waist holster"] = /obj/item/clothing/accessory/storage/holster/waist - holsters["hip holster"] = /obj/item/clothing/accessory/storage/holster/hip - holsters["thigh holster"] = /obj/item/clothing/accessory/storage/holster/thigh - gear_tweaks += new/datum/gear_tweak/path(holsters) - -/datum/gear/tactical/sheath - allowed_roles = list( - /datum/job/pathfinder, - /datum/job/explorer) - - -/datum/gear/tactical/bloodpatch - display_name = "blood patch selection" - path = /obj/item/clothing/accessory/armor_tag - allowed_roles = ARMORED_ROLES - -/datum/gear/tactical/bloodpatch/New() - ..() - var/blatch = list() - blatch["O+ blood patch"] = /obj/item/clothing/accessory/armor_tag/opos - blatch["O- blood patch"] = /obj/item/clothing/accessory/armor_tag/oneg - blatch["A+ blood patch"] = /obj/item/clothing/accessory/armor_tag/apos - blatch["A- blood patch"] = /obj/item/clothing/accessory/armor_tag/aneg - blatch["B+ blood patch"] = /obj/item/clothing/accessory/armor_tag/bpos - blatch["B- blood patch"] = /obj/item/clothing/accessory/armor_tag/bneg - blatch["AB+ blood patch"] = /obj/item/clothing/accessory/armor_tag/abpos - blatch["AB- blood patch"] = /obj/item/clothing/accessory/armor_tag/abneg - gear_tweaks += new/datum/gear_tweak/path(blatch) - -/datum/gear/tactical/armor_deco - display_name = "armor tags selection" - path = /obj/item/clothing/accessory/armor_tag - allowed_roles = ARMORED_ROLES - -/datum/gear/tactical/armor_deco/New() - ..() - var/atags = list() - atags["NTSF tag"] = /obj/item/clothing/accessory/armor_tag/nt - atags["PCRC tag"] = /obj/item/clothing/accessory/armor_tag/pcrc - atags["SAARE tag"] = /obj/item/clothing/accessory/armor_tag/saare - atags["MEDIC tag"] = /obj/item/clothing/accessory/armor_tag/solgov/medic - atags["SFP AGENT tag"] = /obj/item/clothing/accessory/armor_tag/solgov/agent - atags["SCG tag"] = /obj/item/clothing/accessory/armor_tag/solgov/com - atags["POLICE tag"] = /obj/item/clothing/accessory/armor_tag/solgov/com/sec - atags["Expeditionary Corps crest"] = /obj/item/clothing/accessory/armor_tag/solgov/ec - atags["SCG Flag"] = /obj/item/clothing/accessory/armor_tag/solgov - gear_tweaks += new/datum/gear_tweak/path(atags) - -/datum/gear/tactical/press_tag - display_name = "Press tag" - path = /obj/item/clothing/accessory/armor_tag/press - allowed_roles = list( - /datum/job/assistant - ) - flags = GEAR_HAS_NO_CUSTOMIZATION - -/datum/gear/tactical/helm_covers - allowed_roles = ARMORED_ROLES - -/datum/gear/clothing/hawaii - allowed_roles = SEMIFORMAL_ROLES - allowed_branches = CIVILIAN_BRANCHES - -/datum/gear/clothing/scarf - -/datum/gear/clothing/flannel - allowed_roles = SEMIFORMAL_ROLES - allowed_branches = CIVILIAN_BRANCHES - -/datum/gear/clothing/vest - allowed_roles = FORMAL_ROLES - allowed_branches = CIVILIAN_BRANCHES - -/datum/gear/clothing/suspenders - allowed_branches = CIVILIAN_BRANCHES - -/datum/gear/clothing/suspenders/colorable - allowed_branches = CIVILIAN_BRANCHES - -/datum/gear/clothing/wcoat - allowed_roles = FORMAL_ROLES - allowed_branches = CIVILIAN_BRANCHES - -/datum/gear/clothing/zhongshan - allowed_roles = FORMAL_ROLES - allowed_branches = CIVILIAN_BRANCHES - -/datum/gear/clothing/dashiki - allowed_branches = CIVILIAN_BRANCHES - -/datum/gear/clothing/thawb - allowed_branches = CIVILIAN_BRANCHES - -/datum/gear/clothing/sherwani - allowed_roles = FORMAL_ROLES - allowed_branches = CIVILIAN_BRANCHES - -/datum/gear/clothing/qipao - allowed_branches = CIVILIAN_BRANCHES - -/datum/gear/clothing/sweater - allowed_branches = CIVILIAN_BRANCHES - -/datum/gear/clothing/tangzhuang - allowed_branches = CIVILIAN_BRANCHES - -/datum/gear/accessory/bowtie - allowed_branches = CIVILIAN_BRANCHES - -/datum/gear/accessory/ftu_pin - allowed_branches = CIVILIAN_BRANCHES - -/********************* - tactical accessories -*********************/ -/datum/gear/tactical/ubac - display_name = "black UBAC shirt" - path = /obj/item/clothing/accessory/ubac - allowed_roles = ARMORED_ROLES - allowed_branches = list( - /datum/mil_branch/expeditionary_corps, - /datum/mil_branch/civilian - ) - -/datum/gear/tactical/ubac/blue - display_name = "navy blue UBAC shirt" - path = /obj/item/clothing/accessory/ubac/blue - allowed_branches = list( - /datum/mil_branch/fleet - ) - flags = GEAR_HAS_NO_CUSTOMIZATION - -/datum/gear/tactical/ubac/misc - display_name = "miscellaneous UBAC shirt selection" - path = /obj/item/clothing/accessory/ubac - allowed_branches = list(/datum/mil_branch/army, /datum/mil_branch/civilian) - -/datum/gear/tactical/ubac/misc/New() - ..() - var/shirts = list() - shirts["green UBAC shirt"] = /obj/item/clothing/accessory/ubac/green - shirts["tan UBAC shirt"] = /obj/item/clothing/accessory/ubac/tan - gear_tweaks += new/datum/gear_tweak/path(shirts) - -/datum/gear/tactical/armor_pouches - display_name = "black armor pouches" - path = /obj/item/clothing/accessory/storage/pouches - cost = 2 - allowed_roles = ARMORED_ROLES - -/datum/gear/tactical/armor_pouches/navy - display_name = "navy armor pouches" - path = /obj/item/clothing/accessory/storage/pouches/navy - allowed_branches = list( - /datum/mil_branch/fleet, - /datum/mil_branch/civilian - ) - flags = GEAR_HAS_NO_CUSTOMIZATION - -/datum/gear/tactical/armor_pouches/misc - display_name = "miscellaneous armor pouches selection" - path = /obj/item/clothing/accessory/storage/pouches - allowed_branches = list(/datum/mil_branch/army, /datum/mil_branch/civilian) - -/datum/gear/tactical/armor_pouches/misc/New() - ..() - var/pouches = list() - pouches["green armor pouches"] = /obj/item/clothing/accessory/storage/pouches/green - pouches["tan armor pouches"] = /obj/item/clothing/accessory/storage/pouches/tan - gear_tweaks += new/datum/gear_tweak/path(pouches) - -/datum/gear/tactical/large_pouches - display_name = "black large armor pouches" - path = /obj/item/clothing/accessory/storage/pouches/large - cost = 5 - allowed_roles = ARMORED_ROLES - -/datum/gear/tactical/large_pouches/navy - display_name = "navy large armor pouches" - path = /obj/item/clothing/accessory/storage/pouches/large/navy - allowed_branches = list( - /datum/mil_branch/fleet, - /datum/mil_branch/civilian - ) - flags = GEAR_HAS_NO_CUSTOMIZATION - -/datum/gear/tactical/large_pouches/misc - display_name = "miscellaneous large armor pouches selection" - path = /obj/item/clothing/accessory/storage/pouches/large - allowed_branches = list(/datum/mil_branch/army, /datum/mil_branch/civilian) - -/datum/gear/tactical/large_pouches/misc/New() - ..() - var/pouches = list() - pouches["green large armor pouches"] = /obj/item/clothing/accessory/storage/pouches/large/green - pouches["tan large armor pouches"] = /obj/item/clothing/accessory/storage/pouches/large/tan - gear_tweaks += new/datum/gear_tweak/path(pouches) diff --git a/maps/torch/loadout/loadout_ec_skillbadges.dm b/maps/torch/loadout/loadout_ec_skillbadges.dm deleted file mode 100644 index a7905ef49acb3..0000000000000 --- a/maps/torch/loadout/loadout_ec_skillbadges.dm +++ /dev/null @@ -1,78 +0,0 @@ - -/datum/gear/skill - sort_category = "Skill Badges" - category = /datum/gear/skill - slot = slot_tie - allowed_branches = list( - /datum/mil_branch/expeditionary_corps - ) - flags = GEAR_HAS_NO_CUSTOMIZATION - -/datum/gear/skill/botany - display_name = "Field Xenobotany Specialist badge" - path = /obj/item/clothing/accessory/solgov/skillbadge/botany - allowed_skills = list( - SKILL_BOTANY = SKILL_ADEPT - ) - -/datum/gear/skill/botany/stripe - display_name = "Field Xenobotany Specialist voidsuit stripe" - path = /obj/item/clothing/accessory/solgov/skillstripe/botany - -/datum/gear/skill/netgun - display_name = "Xenofauna Acquisition Specialist badge" - path = /obj/item/clothing/accessory/solgov/skillbadge/netgun - allowed_skills = list( - SKILL_WEAPONS = SKILL_ADEPT - ) - -/datum/gear/skill/netgun/stripe - display_name = "Xenofauna Acquisition Specialist voidsuit stripe" - path = /obj/item/clothing/accessory/solgov/skillstripe/netgun - -/datum/gear/skill/eva - display_name = "Void Mobility Specialist badge" - path = /obj/item/clothing/accessory/solgov/skillbadge/eva - allowed_skills = list( - SKILL_EVA = SKILL_ADEPT - ) - -/datum/gear/skill/eva/stripe - display_name = "Void Mobility Specialist voidsuit stripe" - path = /obj/item/clothing/accessory/solgov/skillstripe/eva - -/datum/gear/skill/medical - display_name = "Advanced First Aid Specialist badge" - path = /obj/item/clothing/accessory/solgov/skillbadge/medical - allowed_skills = list( - SKILL_MEDICAL = SKILL_BASIC - ) - -/datum/gear/skill/medical/stripe - display_name = "Advanced First Aid Specialist voidsuit stripe" - path = /obj/item/clothing/accessory/solgov/skillstripe/medical - -/datum/gear/skill/mech - display_name = "Exosuit Specialist badge" - path = /obj/item/clothing/accessory/solgov/skillbadge/mech - allowed_skills = list( - SKILL_MECH = HAS_PERK - ) - -/datum/gear/skill/electric - display_name = "Electrical Specialist badge" - path = /obj/item/clothing/accessory/solgov/skillbadge/electric - allowed_skills = list( - SKILL_ELECTRICAL = SKILL_ADEPT - ) - -/datum/gear/skill/electric/stripe - display_name = "Electrical Specialist voidsuit stripe" - path = /obj/item/clothing/accessory/solgov/skillstripe/electric - -/datum/gear/skill/science - display_name = "Research Specialist badge" - path = /obj/item/clothing/accessory/solgov/skillbadge/science - allowed_skills = list( - SKILL_SCIENCE = SKILL_ADEPT - ) diff --git a/maps/torch/loadout/loadout_eyes.dm b/maps/torch/loadout/loadout_eyes.dm deleted file mode 100644 index 20714b965671c..0000000000000 --- a/maps/torch/loadout/loadout_eyes.dm +++ /dev/null @@ -1,34 +0,0 @@ -/datum/gear/eyes/science/New() - allowed_roles = RESEARCH_ROLES | EXPLORATION_ROLES - ..() - - -/datum/gear/eyes/security/allowed_roles = SECURITY_ROLES - - -/datum/gear/eyes/medical/allowed_roles = MEDICAL_ROLES - - -/datum/gear/eyes/meson/New() - allowed_roles = TECHNICAL_ROLES | EXPLORATION_ROLES - ..() - - -/datum/gear/eyes/janitor/allowed_roles = SERVICE_ROLES - - -/datum/gear/eyes/aviators_shutter/allowed_branches = CIVILIAN_BRANCHES - - -/datum/gear/eyes/welding/allowed_roles = TECHNICAL_ROLES - - -/datum/gear/eyes/material/New() - allowed_roles = TECHNICAL_ROLES | EXPLORATION_ROLES - ..() - - -/datum/gear/eyes/monocle/allowed_branches = CIVILIAN_BRANCHES - - -/datum/gear/eyes/blindfold/allowed_branches = CIVILIAN_BRANCHES diff --git a/maps/torch/loadout/loadout_gloves.dm b/maps/torch/loadout/loadout_gloves.dm deleted file mode 100644 index f3a9f20ff52eb..0000000000000 --- a/maps/torch/loadout/loadout_gloves.dm +++ /dev/null @@ -1,56 +0,0 @@ -/datum/gear/gloves/colored - allowed_roles = FORMAL_ROLES - allowed_branches = CIVILIAN_BRANCHES - -/datum/gear/gloves/latex - allowed_roles = STERILE_ROLES - -/datum/gear/gloves/nitrile - allowed_roles = STERILE_ROLES - -/datum/gear/gloves/rainbow - allowed_roles = CASUAL_ROLES - allowed_branches = CIVILIAN_BRANCHES - -/datum/gear/gloves/insulated - display_name = "insulated gloves selection" - path = /obj/item/clothing/gloves/insulated - allowed_roles = ENGINEERING_ROLES - cost = 3 - -/datum/gear/gloves/insulated/New() - ..() - var/glovtype = list() - glovtype["yellow insulated"] = /obj/item/clothing/gloves/insulated - glovtype["black insulated"] = /obj/item/clothing/gloves/insulated/black - glovtype["white insulated"] = /obj/item/clothing/gloves/insulated/white - gear_tweaks += new/datum/gear_tweak/path(glovtype) - -/datum/gear/gloves/evening - allowed_roles = FORMAL_ROLES - allowed_branches = CIVILIAN_BRANCHES - -/datum/gear/gloves/botany - allowed_roles = list( - /datum/job/rd, - /datum/job/scientist, - /datum/job/scientist_assistant, - /datum/job/chef, - /datum/job/assistant, - /datum/job/merchant, - /datum/job/pathfinder, - /datum/job/nt_pilot, - /datum/job/explorer - ) - -/datum/gear/gloves/dress - display_name = "gloves, dress" - path = /obj/item/clothing/gloves/color/white - flags = GEAR_HAS_NO_CUSTOMIZATION - -/datum/gear/gloves/duty - display_name = "gloves, duty" - path = /obj/item/clothing/gloves/thick/duty - cost = 3 - allowed_branches = UNIFORMED_BRANCHES - flags = GEAR_HAS_NO_CUSTOMIZATION diff --git a/maps/torch/loadout/loadout_head.dm b/maps/torch/loadout/loadout_head.dm deleted file mode 100644 index bb34700ec09dc..0000000000000 --- a/maps/torch/loadout/loadout_head.dm +++ /dev/null @@ -1,156 +0,0 @@ -/datum/gear/head/solberet - display_name = "SolGov beret selection" - description = "A beret denoting service in an organization within SolGov." - path = /obj/item/clothing/head/beret/solgov - allowed_branches = SOLGOV_BRANCHES - flags = GEAR_HAS_NO_CUSTOMIZATION - -/datum/gear/head/solberet/New() - ..() - var/berets = list() - berets["peacekeeper beret"] = /obj/item/clothing/head/beret/solgov - berets["home guard beret"] = /obj/item/clothing/head/beret/solgov/homeguard - berets["gateway administration beret"] = /obj/item/clothing/head/beret/solgov/gateway - berets["customs and trade beret"] = /obj/item/clothing/head/beret/solgov/customs - berets["government research beret"] = /obj/item/clothing/head/beret/solgov/research - berets["health service beret"] = /obj/item/clothing/head/beret/solgov/health - berets["diplomatic security beret"] = /obj/item/clothing/head/beret/solgov/diplomatic - berets["border security beret"] = /obj/item/clothing/head/beret/solgov/borderguard - gear_tweaks += new/datum/gear_tweak/path(berets) - -/datum/gear/head/armyberet - display_name = "marine beret selection" - description = "A beret denoting service in one of the branches within the SCG Marine Corps." - path = /obj/item/clothing/head/beret/solgov/army - allowed_branches = list(/datum/mil_branch/army) - -/datum/gear/head/armyberet/New() - ..() - var/berets = list() - //berets["marine beret"] = /obj/item/clothing/head/beret/solgov/army // depreciated because it's ugly as fuck and almost indentical to .../infantry beret - //berets["airborne army beret"] = /obj/item/clothing/head/beret/solgov/army/airborne //unused for now - berets["marine beret"] = /obj/item/clothing/head/beret/solgov/army/infantry // old infantry beret - berets["orbital assaul marine beret"] = /obj/item/clothing/head/beret/solgov/army/orbital - berets["logistical supply marine beret"] = /obj/item/clothing/head/beret/solgov/army/logistical_supply - berets["engineering-sapper marine beret"] = /obj/item/clothing/head/beret/solgov/army/engisapper - berets["command marine beret"] = /obj/item/clothing/head/beret/solgov/army/command - berets["medical marine beret"] = /obj/item/clothing/head/beret/solgov/army/medical - gear_tweaks += new/datum/gear_tweak/path(berets) - -/datum/gear/head/veteranhat - display_name = "veteran hat" - path = /obj/item/clothing/head/soft/solgov/veteranhat - allowed_branches = CIVILIAN_BRANCHES - flags = GEAR_HAS_NO_CUSTOMIZATION - -/datum/gear/head/solhat - display_name = "sol central government hat" - path = /obj/item/clothing/head/soft/solgov - allowed_branches = SOLGOV_BRANCHES - flags = GEAR_HAS_NO_CUSTOMIZATION - -/datum/gear/head/fleetcover - display_name = "fleet utilty cover" - path = /obj/item/clothing/head/solgov/utility/fleet - cost = 0 - allowed_branches = list( - /datum/mil_branch/fleet - ) - flags = GEAR_HAS_NO_CUSTOMIZATION - -/datum/gear/head/fleetcap - display_name = "fleet cap" - path = /obj/item/clothing/head/soft/solgov/fleet - cost = 0 - allowed_branches = list( - /datum/mil_branch/fleet - ) - flags = GEAR_HAS_NO_CUSTOMIZATION - -/datum/gear/head/echat - display_name = "EC cap" - path = /obj/item/clothing/head/soft/solgov/expedition - cost = 0 - allowed_branches = list( - /datum/mil_branch/expeditionary_corps - ) - flags = GEAR_HAS_NO_CUSTOMIZATION - -/datum/gear/head/surgical - allowed_roles = STERILE_ROLES - -/datum/gear/head/beret - allowed_branches = CIVILIAN_BRANCHES - -/datum/gear/sterile_mask - display_name = "sterile mask" - path = /obj/item/clothing/mask/surgical - -/datum/gear/head/bandana - allowed_branches = CIVILIAN_BRANCHES - -/datum/gear/head/beanie - allowed_branches = CIVILIAN_BRANCHES - -/datum/gear/head/bow - allowed_branches = CIVILIAN_BRANCHES - -/datum/gear/head/cap - allowed_branches = CIVILIAN_BRANCHES - -/datum/gear/head/hairflower - allowed_branches = CIVILIAN_BRANCHES - -/datum/gear/head/hardhat - allowed_roles = TECHNICAL_ROLES - -/datum/gear/head/formalhat - allowed_roles = FORMAL_ROLES - allowed_branches = CIVILIAN_BRANCHES - -/datum/gear/head/informalhat - allowed_branches = CIVILIAN_BRANCHES - -/datum/gear/head/welding - allowed_roles = TECHNICAL_ROLES - -/datum/gear/tactical/balaclava - allowed_roles = SECURITY_ROLES - -/datum/gear/head/fleetberet - display_name = "Fleet branch beret selection" - description = "A beret denoting service in one of the fleets within the SCG Fleet." - path = /obj/item/clothing/head/beret/solgov/fleet/branch - allowed_branches = list( - /datum/mil_branch/fleet - ) - flags = GEAR_HAS_NO_CUSTOMIZATION - -/datum/gear/head/fleetberet/New() - ..() - var/berets = list() - berets["first fleet beret"] = /obj/item/clothing/head/beret/solgov/fleet/branch - berets["second fleet beret"] = /obj/item/clothing/head/beret/solgov/fleet/branch/second - berets["third fleet beret"] = /obj/item/clothing/head/beret/solgov/fleet/branch/third - berets["fourth fleet beret"] = /obj/item/clothing/head/beret/solgov/fleet/branch/fourth - berets["fifth fleet beret"] = /obj/item/clothing/head/beret/solgov/fleet/branch/fifth - gear_tweaks += new/datum/gear_tweak/path(berets) - -/datum/gear/head/ECberet - display_name = "EC sections beret selection" - description = "A beret denoting service in one of the branches within the SCG EC." - path = /obj/item/clothing/head/beret/solgov/expedition/branch - allowed_branches = list( - /datum/mil_branch/expeditionary_corps - ) - flags = GEAR_HAS_NO_CUSTOMIZATION - -/datum/gear/head/ECberet/New() - ..() - var/berets = list() - berets["field operation beret"] = /obj/item/clothing/head/beret/solgov/expedition/branch - berets["observatory beret"] = /obj/item/clothing/head/beret/solgov/expedition/branch/observatory - gear_tweaks += new/datum/gear_tweak/path(berets) - -/datum/gear/head/corporateberet - allowed_branches = list(/datum/mil_branch/civilian) diff --git a/maps/torch/loadout/loadout_shoes.dm b/maps/torch/loadout/loadout_shoes.dm deleted file mode 100644 index 18116607f0a63..0000000000000 --- a/maps/torch/loadout/loadout_shoes.dm +++ /dev/null @@ -1,37 +0,0 @@ -// Shoelocker -/datum/gear/shoes/duty - display_name = "duty boots" - path = /obj/item/clothing/shoes/dutyboots - -/datum/gear/shoes/whitedress - display_name = "dress shoes, white" - path = /obj/item/clothing/shoes/dress/white - -/datum/gear/shoes/dress - display_name = "dress shoes" - path = /obj/item/clothing/shoes/dress - -/datum/gear/shoes/athletic - allowed_roles = SEMIFORMAL_ROLES - -/datum/gear/shoes/color - allowed_branches = CIVILIAN_BRANCHES - -/datum/gear/shoes/flats - allowed_roles = SEMIANDFORMAL_ROLES - -/datum/gear/shoes/high - allowed_roles = FORMAL_ROLES - allowed_branches = CIVILIAN_BRANCHES - -/datum/gear/shoes/sandal - allowed_branches = CIVILIAN_BRANCHES - -/datum/gear/shoes/heels - allowed_roles = SEMIANDFORMAL_ROLES - -/datum/gear/shoes/boots - allowed_branches = list(/datum/mil_branch/civilian, /datum/mil_branch/solgov, /datum/mil_branch/solgov) - -/datum/gear/shoes/foamclog - allowed_branches = CIVILIAN_BRANCHES diff --git a/maps/torch/loadout/loadout_suit.dm b/maps/torch/loadout/loadout_suit.dm deleted file mode 100644 index 69833d9920692..0000000000000 --- a/maps/torch/loadout/loadout_suit.dm +++ /dev/null @@ -1,196 +0,0 @@ -/datum/gear/suit/blueapron - allowed_branches = CIVILIAN_BRANCHES - -/datum/gear/suit/overalls - allowed_branches = CIVILIAN_BRANCHES - -/datum/gear/suit/medcoat - allowed_roles = MEDICAL_ROLES - -/datum/gear/suit/trenchcoat - allowed_roles = list( - /datum/job/assistant, - /datum/job/detective, - /datum/job/merchant, - /datum/job/submap/bearcat_captain, - /datum/job/submap/bearcat_crewman, - /datum/job/submap/colonist, - /datum/job/submap/pod - ) - allowed_branches = CIVILIAN_BRANCHES - -/datum/gear/suit/poncho - allowed_roles = CASUAL_ROLES - allowed_branches = CIVILIAN_BRANCHES - -/datum/gear/suit/security_poncho - allowed_roles = list( - /datum/job/merchant, - /datum/job/detective - ) - allowed_branches = CIVILIAN_BRANCHES - -/datum/gear/suit/medical_poncho - allowed_roles = list( - /datum/job/senior_doctor, - /datum/job/junior_doctor, - /datum/job/doctor, - /datum/job/psychiatrist, - /datum/job/merchant, - /datum/job/chemist - ) - allowed_branches = CIVILIAN_BRANCHES - -/datum/gear/suit/engineering_poncho - allowed_roles = list( - /datum/job/engineer, - /datum/job/roboticist, - /datum/job/merchant - ) - allowed_branches = CIVILIAN_BRANCHES - -/datum/gear/suit/science_poncho - allowed_roles = list( - /datum/job/scientist, - /datum/job/senior_scientist, - /datum/job/scientist_assistant - ) - allowed_branches = CIVILIAN_BRANCHES - -/datum/gear/suit/nanotrasen_poncho - allowed_roles = list( - /datum/job/scientist, - /datum/job/scientist_assistant, - /datum/job/senior_scientist, - /datum/job/merchant - ) - allowed_branches = CIVILIAN_BRANCHES - -/datum/gear/suit/cargo_poncho - allowed_roles = list( - /datum/job/cargo_tech, - /datum/job/merchant - ) - allowed_branches = CIVILIAN_BRANCHES - -/datum/gear/suit/suit_jacket - allowed_roles = FORMAL_ROLES - allowed_branches = CIVILIAN_BRANCHES - -/datum/gear/suit/custom_suit_jacket - allowed_roles = FORMAL_ROLES - allowed_branches = CIVILIAN_BRANCHES - -/datum/gear/suit/hoodie - allowed_roles = CASUAL_ROLES - allowed_branches = CIVILIAN_BRANCHES - -/datum/gear/suit/hoodie_sel - allowed_roles = CASUAL_ROLES - allowed_branches = CIVILIAN_BRANCHES - -/datum/gear/suit/labcoat - allowed_roles = DOCTOR_ROLES - -/datum/gear/suit/labcoat_corp - allowed_roles = DOCTOR_ROLES - allowed_branches = CIVILIAN_BRANCHES - -/datum/gear/suit/labcoat_blue - allowed_roles = DOCTOR_ROLES - -/datum/gear/suit/labcoat_ec - display_name = "labcoat, Expeditionary Corps" - path = /obj/item/clothing/suit/storage/toggle/labcoat/science/ec - allowed_roles = DOCTOR_ROLES - allowed_branches = list( - /datum/mil_branch/expeditionary_corps - ) - flags = GEAR_HAS_NO_CUSTOMIZATION - -/datum/gear/suit/labcoat_cmo - display_name = "labcoat, chief medical officer" - allowed_roles = list( - /datum/job/cmo - ) - path = /obj/item/clothing/suit/storage/toggle/labcoat - flags = GEAR_HAS_NO_CUSTOMIZATION - -/datum/gear/suit/labcoat_cmo/New() - ..() - var/list/options = list() - options["chief medical officer's labcoat"] = /obj/item/clothing/suit/storage/toggle/labcoat/cmo - options["chief medical officer's command labcoat"] = /obj/item/clothing/suit/storage/toggle/labcoat/cmoalt - gear_tweaks += new/datum/gear_tweak/path(options) - -/datum/gear/suit/labcoat_ec_cso - display_name = "labcoat, chief science officer, Expeditionary Corps" - path = /obj/item/clothing/suit/storage/toggle/labcoat/rd/ec - allowed_roles = list( - /datum/job/rd - ) - flags = GEAR_HAS_NO_CUSTOMIZATION - -/datum/gear/suit/wintercoat_dais - display_name = "winter coat, DAIS" - allowed_roles = list( - /datum/job/engineer, - /datum/job/roboticist, - /datum/job/scientist_assistant, - /datum/job/scientist, - /datum/job/senior_scientist, - /datum/job/rd - ) - allowed_branches = CIVILIAN_BRANCHES - flags = GEAR_HAS_NO_CUSTOMIZATION - -/datum/gear/suit/coat - allowed_branches = CIVILIAN_BRANCHES - -/datum/gear/suit/leather - allowed_branches = CIVILIAN_BRANCHES - -/datum/gear/suit/wintercoat - allowed_branches = CIVILIAN_BRANCHES - -/datum/gear/suit/track - allowed_roles = CASUAL_ROLES - allowed_branches = CIVILIAN_BRANCHES - -/datum/gear/tactical/pcarrier - display_name = "black plate carrier" - path = /obj/item/clothing/suit/armor/pcarrier - cost = 1 - slot = slot_wear_suit - allowed_roles = ARMORED_ROLES - -/datum/gear/tactical/pcarrier/navy - display_name = "navy blue plate carrier" - path = /obj/item/clothing/suit/armor/pcarrier/navy - allowed_branches = list(/datum/mil_branch/fleet, /datum/mil_branch/army, /datum/mil_branch/civilian) - -/datum/gear/tactical/pcarrier/misc - display_name = "plate carrier selection" - allowed_roles = ARMORED_ROLES - allowed_branches = list(/datum/mil_branch/army, /datum/mil_branch/civilian) - -/datum/gear/tactical/pcarrier/misc/New() - ..() - var/armors = list() - //armors["black plate carrier"] = /obj/item/clothing/suit/armor/pcarrier - //armors["navy blue plate carrier"] = /obj/item/clothing/suit/armor/pcarrier/navy - armors["blue plate carrier"] = /obj/item/clothing/suit/armor/pcarrier/blue - armors["green plate carrier"] = /obj/item/clothing/suit/armor/pcarrier/green - armors["tan plate carrier"] = /obj/item/clothing/suit/armor/pcarrier/tan - gear_tweaks += new/datum/gear_tweak/path(armors) - -/datum/gear/suit/sfp - display_name = "Agent's jacket" - path = /obj/item/clothing/suit/storage/toggle/agent_jacket - allowed_roles = list( - /datum/job/detective - ) - allowed_branches = list( - /datum/mil_branch/solgov - ) - flags = GEAR_HAS_NO_CUSTOMIZATION diff --git a/maps/torch/loadout/loadout_uniform.dm b/maps/torch/loadout/loadout_uniform.dm deleted file mode 100644 index 9325521a45765..0000000000000 --- a/maps/torch/loadout/loadout_uniform.dm +++ /dev/null @@ -1,99 +0,0 @@ - -/datum/gear/uniform - allowed_branches = CIVILIAN_BRANCHES - -/datum/gear/uniform/utility - display_name = "Contractor Utility Uniform" - path = /obj/item/clothing/under/solgov/utility - allowed_branches = list(/datum/mil_branch/civilian) - -/datum/gear/uniform/shortjumpskirt - allowed_roles = CASUAL_ROLES - -/datum/gear/uniform/blackjumpshorts - allowed_roles = CASUAL_ROLES - -/datum/gear/uniform/roboticist_skirt - allowed_roles = list(/datum/job/roboticist) - -/datum/gear/uniform/suit - allowed_roles = SEMIANDFORMAL_ROLES - -/datum/gear/uniform/scrubs - allowed_roles = STERILE_ROLES - allowed_branches = null - -/datum/gear/uniform/dress - allowed_roles = FORMAL_ROLES - -/datum/gear/uniform/cheongsam - allowed_roles = FORMAL_ROLES - -/datum/gear/uniform/abaya - allowed_roles = FORMAL_ROLES - -/datum/gear/uniform/skirt - allowed_roles = SEMIANDFORMAL_ROLES - -/datum/gear/uniform/skirt_c - allowed_roles = SEMIANDFORMAL_ROLES - -/datum/gear/uniform/skirt_c/dress - allowed_roles = FORMAL_ROLES - -/datum/gear/uniform/casual_pants - allowed_roles = SEMIFORMAL_ROLES - -/datum/gear/uniform/formal_pants - allowed_roles = SEMIANDFORMAL_ROLES - -//from infinity -/datum/gear/uniform/formal_shirt_and_pants - display_name = "formal shirts with pants" - allowed_roles = SEMIANDFORMAL_ROLES - path = /obj/item/clothing/under/suit_jacket - -/datum/gear/uniform/formal_shirt_and_pants/New() - ..() - var/list/shirts = list() - shirts += /obj/item/clothing/under/suit_jacket/charcoal/no_accessories - shirts += /obj/item/clothing/under/suit_jacket/navy/no_accessories - shirts += /obj/item/clothing/under/suit_jacket/burgundy/no_accessories - shirts += /obj/item/clothing/under/suit_jacket/checkered/no_accessories - gear_tweaks += new/datum/gear_tweak/path/specified_types_list(shirts) - -/datum/gear/uniform/formal_pants/custom - allowed_roles = SEMIANDFORMAL_ROLES - -/datum/gear/uniform/formal_pants/baggycustom - allowed_roles = SEMIANDFORMAL_ROLES - -/datum/gear/uniform/shorts - allowed_roles = CASUAL_ROLES - -/datum/gear/uniform/shorts/custom - allowed_roles = CASUAL_ROLES - -/datum/gear/uniform/turtleneck - allowed_roles = SEMIFORMAL_ROLES - -/datum/gear/tactical/tacticool - allowed_roles = CASUAL_ROLES - -/datum/gear/uniform/sterile - allowed_roles = MEDICAL_ROLES - -/datum/gear/uniform/hazard - allowed_roles = ENGINEERING_ROLES - -/datum/gear/uniform/corp_overalls - allowed_roles = list(/datum/job/mining, /datum/job/scientist_assistant) - -/datum/gear/uniform/corp_flight - allowed_roles = list(/datum/job/nt_pilot) - -/datum/gear/uniform/corp_exec - allowed_roles = list(/datum/job/liaison) - -/datum/gear/uniform/corp_exec_jacket - allowed_roles = list(/datum/job/liaison) diff --git a/maps/torch/loadout/loadout_xeno.dm b/maps/torch/loadout/loadout_xeno.dm deleted file mode 100644 index 0174f7096bc96..0000000000000 --- a/maps/torch/loadout/loadout_xeno.dm +++ /dev/null @@ -1,43 +0,0 @@ -/datum/gear/suit/lab_xyn_machine - allowed_branches = CIVILIAN_BRANCHES - -/datum/gear/gloves/dress/modified - display_name = "modified gloves, dress" - path = /obj/item/clothing/gloves/color/white/modified - sort_category = "Xenowear" - whitelisted = list( - SPECIES_UNATHI - ) - -/datum/gear/gloves/duty/modified - display_name = "modified gloves, duty" - path = /obj/item/clothing/gloves/thick/duty/modified - sort_category = "Xenowear" - whitelisted = list( - SPECIES_UNATHI - ) - flags = GEAR_HAS_NO_CUSTOMIZATION - -/datum/gear/suit/unathi/savage_hunter - allowed_branches = CIVILIAN_BRANCHES - -/datum/gear/head/skrell_helmet - allowed_roles = ARMORED_ROLES - -/datum/gear/uniform/harness - allowed_branches = null - -// Patches -/datum/gear/accessory/cultex_patch - display_name = "Cultural Exchange patch" - path = /obj/item/clothing/accessory/solgov/cultex_patch - description = "A shoulder patch representing the Expeditionary Corps." - allowed_branches = list(/datum/mil_branch/expeditionary_corps) - whitelisted = list( - SPECIES_SKRELL, - SPECIES_UNATHI, - SPECIES_YEOSA, - SPECIES_IPC - ) - sort_category = "Xenowear" - flags = GEAR_HAS_NO_CUSTOMIZATION diff --git a/maps/torch/loadout/~defines.dm b/maps/torch/loadout/~defines.dm deleted file mode 100644 index d34bdcacd7f47..0000000000000 --- a/maps/torch/loadout/~defines.dm +++ /dev/null @@ -1,39 +0,0 @@ -//The following is the list of undefs for the Torch loadout. - -#undef FORMAL_ROLES - -#undef SEMIFORMAL_ROLES - -#undef SEMIANDFORMAL_ROLES - -#undef CASUAL_ROLES - -#undef DOCTOR_ROLES - -#undef MEDICAL_ROLES - -#undef STERILE_ROLES - -#undef ENGINEERING_ROLES - -#undef TECHNICAL_ROLES - -#undef SECURITY_ROLES - -#undef SUPPLY_ROLES - -#undef SERVICE_ROLES - -#undef EXPLORATION_ROLES - -#undef RESEARCH_ROLES - -#undef ARMED_ROLES - -#undef ARMORED_ROLES - -#undef UNIFORMED_BRANCHES - -#undef CIVILIAN_BRANCHES - -#undef SOLGOV_BRANCHES diff --git a/maps/torch/lobby/bobot.gif b/maps/torch/lobby/bobot.gif deleted file mode 100644 index 242aa811e5e83..0000000000000 Binary files a/maps/torch/lobby/bobot.gif and /dev/null differ diff --git a/maps/torch/lobby/hullside.gif b/maps/torch/lobby/hullside.gif deleted file mode 100644 index ab301835c796a..0000000000000 Binary files a/maps/torch/lobby/hullside.gif and /dev/null differ diff --git a/maps/torch/lobby/pioneers.gif b/maps/torch/lobby/pioneers.gif deleted file mode 100644 index 4eb69675c7791..0000000000000 Binary files a/maps/torch/lobby/pioneers.gif and /dev/null differ diff --git a/maps/torch/lobby/proxima.gif b/maps/torch/lobby/proxima.gif deleted file mode 100644 index 5f7376fbd448b..0000000000000 Binary files a/maps/torch/lobby/proxima.gif and /dev/null differ diff --git a/maps/torch/lobby/ship.gif b/maps/torch/lobby/ship.gif deleted file mode 100644 index b8bb4b8c711c9..0000000000000 Binary files a/maps/torch/lobby/ship.gif and /dev/null differ diff --git a/maps/torch/lobby/torchlogo.gif b/maps/torch/lobby/torchlogo.gif deleted file mode 100644 index 07a16dffd60af..0000000000000 Binary files a/maps/torch/lobby/torchlogo.gif and /dev/null differ diff --git a/maps/torch/lobby/unknown.gif b/maps/torch/lobby/unknown.gif deleted file mode 100644 index 238a798346d7e..0000000000000 Binary files a/maps/torch/lobby/unknown.gif and /dev/null differ diff --git a/maps/torch/machinery/apc_shuttle.dm b/maps/torch/machinery/apc_shuttle.dm deleted file mode 100644 index e77f71f382678..0000000000000 --- a/maps/torch/machinery/apc_shuttle.dm +++ /dev/null @@ -1,23 +0,0 @@ -/obj/machinery/power/apc/shuttle - req_access = list(access_engine_equip) - -/obj/machinery/power/apc/high/shuttle - req_access = list(access_engine_equip) - -/obj/machinery/power/apc/hyper/shuttle - req_access = list(access_engine_equip) - -/obj/machinery/power/apc/shuttle/charon - req_access = list(list(access_engine_equip, access_expedition_shuttle_helm)) - -/obj/machinery/power/apc/high/shuttle/charon - req_access = list(list(access_engine_equip, access_expedition_shuttle_helm)) - -/obj/machinery/power/apc/shuttle/aquila - req_access = list(list(access_engine_equip, access_aquila_helm)) - -/obj/machinery/power/apc/hyper/shuttle/aquila - req_access = list(list(access_engine_equip, access_aquila_helm)) - -/obj/machinery/power/apc/hyper/shuttle/charon - req_access = list(list(access_engine_equip, access_expedition_shuttle_helm)) diff --git a/maps/torch/machinery/keycard authentication.dm b/maps/torch/machinery/keycard authentication.dm deleted file mode 100644 index 3bb92a68b1109..0000000000000 --- a/maps/torch/machinery/keycard authentication.dm +++ /dev/null @@ -1,75 +0,0 @@ -/obj/machinery/keycard_auth/torch/interact(mob/user) - user.set_machine(src) - - var/list/dat = list() - - dat += "

              Keycard Authentication Device

              " - - dat += "This device is used to trigger some high security events. It requires the simultaneous swipe of two high-level ID cards." - dat += "


              " - - if(screen == 1) - dat += "Select an event to trigger:
              " - - var/decl/security_state/security_state = decls_repository.get_decl(GLOB.using_map.security_state) - if(security_state.current_security_level == security_state.severe_security_level) - dat += "Cannot modify the alert level at this time: [security_state.severe_security_level.name] engaged.
              " - else - if(security_state.current_security_level == security_state.high_security_level) - dat += "Disengage [security_state.high_security_level.name]
              " - else - dat += "Engage [security_state.high_security_level.name]
              " - - if(!config.ert_admin_call_only) - dat += "Emergency Response Team
              " - - dat += "Grant Emergency Maintenance Access
              " - dat += "Revoke Emergency Maintenance Access
              " - dat += "Grant Nuclear Authorization Code
              " - dat += "Initiate Evacuation Procedures
              " - if(screen == 2) - dat += "Please swipe your card to authorize the following event: [event]" - dat += "

              Back" - - var/datum/browser/popup = new(user, "kad_window", "Keycard Authentication Device", 500, 250) - popup.set_content(JOINTEXT(dat)) - popup.open() - return - -/obj/machinery/keycard_auth/torch/trigger_event() - switch(event) - if("Red alert") - var/decl/security_state/security_state = decls_repository.get_decl(GLOB.using_map.security_state) - security_state.stored_security_level = security_state.current_security_level - security_state.set_security_level(security_state.high_security_level) - if("Revert alert") - var/decl/security_state/security_state = decls_repository.get_decl(GLOB.using_map.security_state) - security_state.set_security_level(security_state.stored_security_level) - if("Grant Emergency Maintenance Access") - GLOB.using_map.make_maint_all_access() - if("Revoke Emergency Maintenance Access") - GLOB.using_map.revoke_maint_all_access() - if("Emergency Response Team") - if(is_ert_blocked()) - to_chat(usr, "All emergency response teams are dispatched and can not be called at this time.") - return - - trigger_armed_response_team(1) - if("Grant Nuclear Authorization Code") - var/obj/machinery/nuclearbomb/nuke = locate(/obj/machinery/nuclearbomb/station) in world - if(nuke) - to_chat(usr, "The nuclear authorization code is [nuke.r_code]") - else - to_chat(usr, "No self destruct terminal found.") - if("Bolt All Saferooms") - GLOB.using_map.bolt_saferooms() - if("Unbolt All Saferooms") - GLOB.using_map.unbolt_saferooms() - if("Evacuate") - if(!evacuation_controller) - to_chat(usr, "Unable to initiate evacuation!") - return - for (var/datum/evacuation_option/EO in evacuation_controller.available_evac_options()) - if(EO.abandon_ship) - evacuation_controller.handle_evac_option(EO.option_target, usr) - return diff --git a/maps/torch/machinery/suit_storage.dm b/maps/torch/machinery/suit_storage.dm deleted file mode 100644 index ef01b51c3d135..0000000000000 --- a/maps/torch/machinery/suit_storage.dm +++ /dev/null @@ -1,15 +0,0 @@ -/obj/machinery/suit_storage_unit/engineering/alt/sol - suit = /obj/item/clothing/suit/space/void/engineering/alt/sol - helmet = /obj/item/clothing/head/helmet/space/void/engineering/alt/sol - -/obj/machinery/suit_storage_unit/atmos/alt/sol - suit = /obj/item/clothing/suit/space/void/atmos/alt/sol - helmet = /obj/item/clothing/head/helmet/space/void/atmos/alt/sol - -/obj/machinery/suit_storage_unit/medical/alt/sol - suit = /obj/item/clothing/suit/space/void/medical/alt/sol - helmet = /obj/item/clothing/head/helmet/space/void/medical/alt/sol - -/obj/machinery/suit_storage_unit/pilot/sol - suit = /obj/item/clothing/suit/space/void/pilot/sol - helmet = /obj/item/clothing/head/helmet/space/void/pilot/sol \ No newline at end of file diff --git a/maps/torch/map.dm b/maps/torch/map.dm deleted file mode 100644 index fb4c1134c074d..0000000000000 --- a/maps/torch/map.dm +++ /dev/null @@ -1,2 +0,0 @@ -#include "torch.dm" -#include "torch_define.dm" diff --git a/maps/torch/outfits/scgec.dm b/maps/torch/outfits/scgec.dm deleted file mode 100644 index fdf4d75ca7eb8..0000000000000 --- a/maps/torch/outfits/scgec.dm +++ /dev/null @@ -1,356 +0,0 @@ -/decl/hierarchy/outfit/scgec - hierarchy_type = /decl/hierarchy/outfit/scgec - flags = OUTFIT_RESET_EQUIPMENT | OUTFIT_ADJUSTMENT_ALL_SKIPS - l_ear = /obj/item/device/radio/headset - l_hand = /obj/item/storage/backpack/dufflebag/scgec_accessories - back = /obj/item/storage/backpack/satchel/grey - - -// Utility -/decl/hierarchy/outfit/scgec/utility_enlisted - name = "SCGEC - Enlisted Utility" - uniform = /obj/item/clothing/under/solgov/utility/expeditionary - shoes = /obj/item/clothing/shoes/dutyboots - head = /obj/item/clothing/head/soft/solgov/expedition - - -/decl/hierarchy/outfit/scgec/utility_command - name = "SCGEC - Command Utility" - uniform = /obj/item/clothing/under/solgov/utility/expeditionary/officer - shoes = /obj/item/clothing/shoes/dutyboots - head = /obj/item/clothing/head/soft/solgov/expedition - - -/decl/hierarchy/outfit/scgec/utility_senior_command - name = "SCGEC - Senior Command Utility" - uniform = /obj/item/clothing/under/solgov/utility/expeditionary/officer - shoes = /obj/item/clothing/shoes/dutyboots - head = /obj/item/clothing/head/soft/solgov/expedition - - -/decl/hierarchy/outfit/scgec/utility_captain - name = "SCGEC - Captain Utility" - uniform = /obj/item/clothing/under/solgov/utility/expeditionary/officer - shoes = /obj/item/clothing/shoes/dutyboots - head = /obj/item/clothing/head/soft/solgov/expedition/co - - -/decl/hierarchy/outfit/scgec/utility_admiral - name = "SCGEC - Admiral Utility" - uniform = /obj/item/clothing/under/solgov/utility/expeditionary/officer - shoes = /obj/item/clothing/shoes/dutyboots - head = /obj/item/clothing/head/soft/solgov/expedition/co - - -// Service -/decl/hierarchy/outfit/scgec/service - name = "SCGEC - Enlisted Service" - uniform = /obj/item/clothing/under/solgov/utility/expeditionary - suit = /obj/item/clothing/suit/storage/solgov/service/expeditionary - shoes = /obj/item/clothing/shoes/dutyboots - head = /obj/item/clothing/head/solgov/service/expedition - - -/decl/hierarchy/outfit/scgec/service_command - name = "SCGEC - Command Service" - uniform = /obj/item/clothing/under/solgov/utility/expeditionary/officer - suit = /obj/item/clothing/suit/storage/solgov/service/expeditionary/command - shoes = /obj/item/clothing/shoes/dutyboots - head = /obj/item/clothing/head/solgov/service/expedition/command - - -/decl/hierarchy/outfit/scgec/service_senior_command - name = "SCGEC - Senior Command Service" - uniform = /obj/item/clothing/under/solgov/utility/expeditionary/officer - suit = /obj/item/clothing/suit/storage/solgov/service/expeditionary/command - shoes = /obj/item/clothing/shoes/dutyboots - head = /obj/item/clothing/head/solgov/service/expedition/senior_command - - -/decl/hierarchy/outfit/scgec/service_captain - name = "SCGEC - Captain Service" - uniform = /obj/item/clothing/under/solgov/utility/expeditionary/officer - suit = /obj/item/clothing/suit/storage/solgov/service/expeditionary/command - shoes = /obj/item/clothing/shoes/dutyboots - head = /obj/item/clothing/head/solgov/service/expedition/captain - - -/decl/hierarchy/outfit/scgec/service_admiral - name = "SCGEC - Admiral Service" - uniform = /obj/item/clothing/under/solgov/utility/expeditionary/officer - suit = /obj/item/clothing/suit/storage/solgov/service/expeditionary/command - shoes = /obj/item/clothing/shoes/dutyboots - head = /obj/item/clothing/head/solgov/service/expedition/captain - - -// Dress -/decl/hierarchy/outfit/scgec/dress_enlisted - name = "SCGEC - Enlisted Dress" - uniform = /obj/item/clothing/under/solgov/dress/expeditionary - suit = /obj/item/clothing/suit/storage/solgov/dress/expedition - shoes = /obj/item/clothing/shoes/dress - head = /obj/item/clothing/head/solgov/service/expedition - gloves = /obj/item/clothing/gloves/white - - -/decl/hierarchy/outfit/scgec/dress_skirt_enlisted - name = "SCGEC - Enlisted Dress (Skirt)" - uniform = /obj/item/clothing/under/solgov/dress/expeditionary/skirt - suit = /obj/item/clothing/suit/storage/solgov/dress/expedition - shoes = /obj/item/clothing/shoes/dress - head = /obj/item/clothing/head/solgov/service/expedition - gloves = /obj/item/clothing/gloves/white - - -/decl/hierarchy/outfit/scgec/dress_senior_enlisted - name = "SCGEC - Senior Enlisted Dress" - uniform = /obj/item/clothing/under/solgov/dress/expeditionary - suit = /obj/item/clothing/suit/storage/solgov/dress/expedition/senior - shoes = /obj/item/clothing/shoes/dress - head = /obj/item/clothing/head/solgov/service/expedition - gloves = /obj/item/clothing/gloves/white - - -/decl/hierarchy/outfit/scgec/dress_skirt_senior_enlisted - name = "SCGEC - Senior Enlisted Dress (Skirt)" - uniform = /obj/item/clothing/under/solgov/dress/expeditionary/skirt - suit = /obj/item/clothing/suit/storage/solgov/dress/expedition/chief - shoes = /obj/item/clothing/shoes/dress - head = /obj/item/clothing/head/solgov/service/expedition - gloves = /obj/item/clothing/gloves/white - - -/decl/hierarchy/outfit/scgec/dress_chief_enlisted - name = "SCGEC - Chief Enlisted Dress" - uniform = /obj/item/clothing/under/solgov/dress/expeditionary - suit = /obj/item/clothing/suit/storage/solgov/dress/expedition/chief - shoes = /obj/item/clothing/shoes/dress - head = /obj/item/clothing/head/solgov/service/expedition - gloves = /obj/item/clothing/gloves/white - - -/decl/hierarchy/outfit/scgec/dress_skirt_chief_enlisted - name = "SCGEC - Chief Enlisted Dress (Skirt)" - uniform = /obj/item/clothing/under/solgov/dress/expeditionary/skirt - suit = /obj/item/clothing/suit/storage/solgov/dress/expedition/senior - shoes = /obj/item/clothing/shoes/dress - head = /obj/item/clothing/head/solgov/service/expedition - gloves = /obj/item/clothing/gloves/white - - -/decl/hierarchy/outfit/scgec/dress_command - name = "SCGEC - Command Dress" - uniform = /obj/item/clothing/under/solgov/dress/expeditionary - suit = /obj/item/clothing/suit/storage/solgov/dress/expedition/command - shoes = /obj/item/clothing/shoes/dress - head = /obj/item/clothing/head/solgov/service/expedition/command - gloves = /obj/item/clothing/gloves/white - - -/decl/hierarchy/outfit/scgec/dress_skirt_command - name = "SCGEC - Command Dress (Skirt)" - uniform = /obj/item/clothing/under/solgov/dress/expeditionary/skirt - suit = /obj/item/clothing/suit/storage/solgov/dress/expedition/command - shoes = /obj/item/clothing/shoes/dress - head = /obj/item/clothing/head/solgov/service/expedition/command - gloves = /obj/item/clothing/gloves/white - - -/decl/hierarchy/outfit/scgec/dress_senior_command - name = "SCGEC - Senior Command Dress" - uniform = /obj/item/clothing/under/solgov/dress/expeditionary - suit = /obj/item/clothing/suit/storage/solgov/dress/expedition/command/cdr - shoes = /obj/item/clothing/shoes/dress - head = /obj/item/clothing/head/solgov/service/expedition/senior_command - gloves = /obj/item/clothing/gloves/white - - -/decl/hierarchy/outfit/scgec/dress_skirt_senior_command - name = "SCGEC - Senior Command Dress (Skirt)" - uniform = /obj/item/clothing/under/solgov/dress/expeditionary/skirt - suit = /obj/item/clothing/suit/storage/solgov/dress/expedition/command/cdr - shoes = /obj/item/clothing/shoes/dress - head = /obj/item/clothing/head/solgov/service/expedition/senior_command - gloves = /obj/item/clothing/gloves/white - - -/decl/hierarchy/outfit/scgec/dress_captain - name = "SCGEC - Captain Dress" - uniform = /obj/item/clothing/under/solgov/dress/expeditionary - suit = /obj/item/clothing/suit/storage/solgov/dress/expedition/command/capt - shoes = /obj/item/clothing/shoes/dress - head = /obj/item/clothing/head/solgov/service/expedition/captain - gloves = /obj/item/clothing/gloves/white - - -/decl/hierarchy/outfit/scgec/dress_skirt_captain - name = "SCGEC - Captain Dress (Skirt)" - uniform = /obj/item/clothing/under/solgov/dress/expeditionary/skirt - suit = /obj/item/clothing/suit/storage/solgov/dress/expedition/command/capt - shoes = /obj/item/clothing/shoes/dress - head = /obj/item/clothing/head/solgov/service/expedition/captain - gloves = /obj/item/clothing/gloves/white - - -/decl/hierarchy/outfit/scgec/dress_admiral - name = "SCGEC - Admiral Dress" - uniform = /obj/item/clothing/under/solgov/dress/expeditionary - suit = /obj/item/clothing/suit/storage/solgov/dress/expedition/command/adm - shoes = /obj/item/clothing/shoes/dress - head = /obj/item/clothing/head/solgov/service/expedition/captain - gloves = /obj/item/clothing/gloves/white - - -/decl/hierarchy/outfit/scgec/dress_skirt_admiral - name = "SCGEC - Admiral Dress (Skirt)" - uniform = /obj/item/clothing/under/solgov/dress/expeditionary/skirt - suit = /obj/item/clothing/suit/storage/solgov/dress/expedition/command/adm - shoes = /obj/item/clothing/shoes/dress - head = /obj/item/clothing/head/solgov/service/expedition/captain - gloves = /obj/item/clothing/gloves/white - - -// PT -/decl/hierarchy/outfit/scgec/pt - name = "SCGEC - PT" - uniform = /obj/item/clothing/under/solgov/pt/expeditionary - shoes = /obj/item/clothing/shoes/black - - -// Accessory boxes -/obj/item/storage/backpack/dufflebag/scgec_accessories - name = "dressup accessories, SCGEC" - startswith = list( - /obj/item/storage/box/large/scgec_ranks, - /obj/item/storage/box/scgec_patches, - /obj/item/storage/box/scgec_badges, - /obj/item/storage/box/scgec_scarves, - /obj/item/storage/box/large/scgec_berets, - /obj/item/storage/box/large/scgec_gloves, - /obj/item/storage/box/scgec_department, - /obj/item/storage/box/scgec_department_service - ) - max_storage_space = 44 // Special snowflake for tests and UI scaling sanity. 40 is the exact size taken up by the contained boxes. - - -/obj/item/storage/box/large/scgec_ranks - name = "rank box, SCGEC" - startswith = list( - /obj/item/clothing/accessory/solgov/rank/ec/enlisted, - /obj/item/clothing/accessory/solgov/rank/ec/enlisted, - /obj/item/clothing/accessory/solgov/rank/ec/enlisted/e3, - /obj/item/clothing/accessory/solgov/rank/ec/enlisted/e3, - /obj/item/clothing/accessory/solgov/rank/ec/enlisted/e5, - /obj/item/clothing/accessory/solgov/rank/ec/enlisted/e5, - /obj/item/clothing/accessory/solgov/rank/ec/enlisted/e7, - /obj/item/clothing/accessory/solgov/rank/ec/enlisted/e7, - /obj/item/clothing/accessory/solgov/rank/ec/officer, - /obj/item/clothing/accessory/solgov/rank/ec/officer, - /obj/item/clothing/accessory/solgov/rank/ec/officer/o3, - /obj/item/clothing/accessory/solgov/rank/ec/officer/o3, - /obj/item/clothing/accessory/solgov/rank/ec/officer/o5, - /obj/item/clothing/accessory/solgov/rank/ec/officer/o5, - /obj/item/clothing/accessory/solgov/rank/ec/officer/o6, - /obj/item/clothing/accessory/solgov/rank/ec/officer/o6, - /obj/item/clothing/accessory/solgov/rank/ec/officer/o8, - /obj/item/clothing/accessory/solgov/rank/ec/officer/o8 - ) - - -/obj/item/storage/box/scgec_patches - name = "patch box, SCGEC" - startswith = list( - /obj/item/clothing/accessory/solgov/torch_patch, - /obj/item/clothing/accessory/solgov/torch_patch, - /obj/item/clothing/accessory/solgov/ec_patch, - /obj/item/clothing/accessory/solgov/ec_patch, - /obj/item/clothing/accessory/solgov/ec_patch/fieldops, - /obj/item/clothing/accessory/solgov/ec_patch/fieldops, - /obj/item/clothing/accessory/solgov/cultex_patch, - /obj/item/clothing/accessory/solgov/cultex_patch - ) - - -/obj/item/storage/box/scgec_badges - name = "badge box, SCGEC" - startswith = list( - /obj/item/clothing/accessory/solgov/skillbadge/botany, - /obj/item/clothing/accessory/solgov/skillbadge/netgun, - /obj/item/clothing/accessory/solgov/skillbadge/eva, - /obj/item/clothing/accessory/solgov/skillbadge/medical, - /obj/item/clothing/accessory/solgov/skillbadge/mech, - /obj/item/clothing/accessory/solgov/skillbadge/electric, - /obj/item/clothing/accessory/solgov/skillbadge/science, - /obj/item/clothing/accessory/solgov/skillstripe/botany, - /obj/item/clothing/accessory/solgov/skillstripe/netgun, - /obj/item/clothing/accessory/solgov/skillstripe/eva, - /obj/item/clothing/accessory/solgov/skillstripe/medical, - /obj/item/clothing/accessory/solgov/skillstripe/electric - ) - - -/obj/item/storage/box/scgec_scarves - name = "scarf box, SCGEC" - startswith = list( - /obj/item/clothing/accessory/solgov/ec_scarf, - /obj/item/clothing/accessory/solgov/ec_scarf/observatory, - /obj/item/clothing/accessory/solgov/ec_scarf/fieldops - ) - - -/obj/item/storage/box/large/scgec_berets - name = "berets box, SCGEC" - startswith = list( - /obj/item/clothing/head/beret/solgov/expedition, - /obj/item/clothing/head/beret/solgov/expedition/security, - /obj/item/clothing/head/beret/solgov/expedition/medical, - /obj/item/clothing/head/beret/solgov/expedition/engineering, - /obj/item/clothing/head/beret/solgov/expedition/supply, - /obj/item/clothing/head/beret/solgov/expedition/service, - /obj/item/clothing/head/beret/solgov/expedition/exploration, - /obj/item/clothing/head/beret/solgov/expedition/command, - /obj/item/clothing/head/beret/solgov/expedition/branch, - /obj/item/clothing/head/beret/solgov/expedition/branch/observatory, - ) - - -/obj/item/storage/box/large/scgec_gloves - name = "gloves box, SCGEC" - startswith = list( - /obj/item/clothing/gloves/thick/duty/solgov/eng, - /obj/item/clothing/gloves/thick/duty/solgov/cmd, - /obj/item/clothing/gloves/thick/duty/solgov/exp, - /obj/item/clothing/gloves/thick/duty/solgov/sci, - /obj/item/clothing/gloves/thick/duty/solgov/med, - /obj/item/clothing/gloves/thick/duty/solgov/sec, - /obj/item/clothing/gloves/thick/duty/solgov/svc, - /obj/item/clothing/gloves/thick/duty/solgov/sup - ) - - -/obj/item/storage/box/scgec_department - name = "department utility accessories box, SCGEC" - startswith = list( - /obj/item/clothing/accessory/solgov/department/command, - /obj/item/clothing/accessory/solgov/department/engineering, - /obj/item/clothing/accessory/solgov/department/security, - /obj/item/clothing/accessory/solgov/department/medical, - /obj/item/clothing/accessory/solgov/department/supply, - /obj/item/clothing/accessory/solgov/department/service, - /obj/item/clothing/accessory/solgov/department/exploration, - /obj/item/clothing/accessory/solgov/department/research - ) - - -/obj/item/storage/box/scgec_department_service - name = "department service accessories box, SCGEC" - startswith = list( - /obj/item/clothing/accessory/solgov/department/command/service, - /obj/item/clothing/accessory/solgov/department/engineering/service, - /obj/item/clothing/accessory/solgov/department/security/service, - /obj/item/clothing/accessory/solgov/department/medical/service, - /obj/item/clothing/accessory/solgov/department/supply/service, - /obj/item/clothing/accessory/solgov/department/service/service, - /obj/item/clothing/accessory/solgov/department/exploration/service, - /obj/item/clothing/accessory/solgov/department/research/service - ) diff --git a/maps/torch/robot/module_flying_surveyor.dm b/maps/torch/robot/module_flying_surveyor.dm deleted file mode 100644 index 3e9062f43c14f..0000000000000 --- a/maps/torch/robot/module_flying_surveyor.dm +++ /dev/null @@ -1,73 +0,0 @@ -/obj/item/robot_module/flying/surveyor - name = "survey drone module" - display_name = "Surveyor" - channels = list( - "Science" = TRUE, - "Exploration" = TRUE - ) - networks = list(NETWORK_EXPEDITION) - sprites = list( - "Drone" = "drone-science", - "Eyebot" = "eyebot-science" - ) - var/list/flag_types = list( - /obj/item/stack/flag/yellow, - /obj/item/stack/flag/green, - /obj/item/stack/flag/red - ) - skills = list( - SKILL_ELECTRICAL = SKILL_PROF, - SKILL_ATMOS = SKILL_PROF, - SKILL_PILOT = SKILL_EXPERT, - SKILL_BOTANY = SKILL_PROF, - SKILL_EVA = SKILL_PROF, - SKILL_MECH = HAS_PERK, - ) - - equipment = list( - /obj/item/material/hatchet/machete/unbreakable, - /obj/item/inducer/borg, - /obj/item/device/scanner/gas, - /obj/item/storage/plants, - /obj/item/wirecutters/clippers, - /obj/item/device/scanner/mining, - /obj/item/extinguisher, - /obj/item/gun/launcher/net/borg, - /obj/item/device/gps, - /obj/item/weldingtool/largetank, - /obj/item/screwdriver, - /obj/item/wrench, - /obj/item/crowbar, - /obj/item/wirecutters, - /obj/item/device/multitool, - /obj/item/bioreactor, - /obj/item/inflatable_dispenser/robot, - /obj/item/robot_harvester, - /obj/item/borg/sight/meson, - /obj/item/device/scanner/xenobio, - /obj/item/device/scanner/plant - ) - - emag = /obj/item/melee/energy/machete - -/obj/item/robot_module/flying/surveyor/finalize_synths() - . = ..() - for(var/flag_type in flag_types) - equipment += new flag_type(src) - -/obj/item/robot_module/flying/surveyor/respawn_consumable(var/mob/living/silicon/robot/R, var/amount) - var/obj/item/gun/launcher/net/borg/gun = locate() in equipment - if(!gun) - gun = new(src) - equipment += gun - if(LAZYLEN(gun.shells) < gun.max_shells) - gun.load(new /obj/item/net_shell) - - for(var/flagtype in flag_types) - var/obj/item/stack/flag/flag = locate(flagtype) in equipment - if(!flag) - flag = new flagtype - equipment += flag - if(flag.amount < flag.max_amount) - flag.add(1) - ..() diff --git a/maps/torch/structures/closets.dm b/maps/torch/structures/closets.dm deleted file mode 100644 index 16153f2658575..0000000000000 --- a/maps/torch/structures/closets.dm +++ /dev/null @@ -1,71 +0,0 @@ -/* - * Torch Excavation - */ - -/obj/structure/closet/toolcloset/excavation - name = "excavation equipment closet" - desc = "It's a storage unit for excavation equipment." - closet_appearance = /decl/closet_appearance/secure_closet/engineering/tools - -/obj/structure/closet/toolcloset/excavation/WillContain() - return list( - /obj/item/storage/belt/archaeology, - /obj/item/storage/excavation, - /obj/item/device/flashlight/lantern, - /obj/item/device/ano_scanner, - /obj/item/device/depth_scanner, - /obj/item/device/core_sampler, - /obj/item/device/gps, - /obj/item/pinpointer/radio, - /obj/item/clothing/glasses/meson, - /obj/item/clothing/glasses/science, - /obj/item/pickaxe, - /obj/item/device/measuring_tape, - /obj/item/pickaxe/xeno/hand, - /obj/item/storage/bag/fossils, - /obj/item/hand_labeler, - /obj/item/taperoll/research, - /obj/item/device/spaceflare - ) - -/obj/structure/closet/wardrobe/ptgear - name = "pt gear wardrobe" - closet_appearance = /decl/closet_appearance/wardrobe/white - -/obj/structure/closet/wardrobe/ptgear/WillContain() - return list( - /obj/item/clothing/under/solgov/pt/expeditionary = 4, - /obj/item/clothing/shoes/white = 2, - /obj/item/clothing/shoes/black = 2) - -/obj/random/torchcloset //Random closets taking into account torch-specific ones - name = "random closet" - desc = "This is a random closet." - -/obj/random/torchcloset/spawn_choices() - return list(/obj/structure/closet, - /obj/structure/closet/firecloset, - /obj/structure/closet/emcloset, - /obj/structure/closet/jcloset_torch, - /obj/structure/closet/athletic_mixed, - /obj/structure/closet/toolcloset, - /obj/structure/closet/toolcloset/excavation, - /obj/structure/closet/l3closet/general, - /obj/structure/closet/cabinet, - /obj/structure/closet/crate, - /obj/structure/closet/crate/freezer, - /obj/structure/closet/crate/freezer/rations, - /obj/structure/closet/crate/internals, - /obj/structure/closet/crate/trashcart, - /obj/structure/closet/crate/medical, - /obj/structure/closet/boxinggloves, - /obj/structure/closet/secure_closet/crew, - /obj/structure/closet/secure_closet/crew/research, - /obj/structure/closet/secure_closet/guncabinet, - /obj/structure/largecrate, - /obj/structure/closet/wardrobe/xenos, - /obj/structure/closet/wardrobe/mixed, - /obj/structure/closet/wardrobe/suit) - -/obj/structure/closet/secure_closet/brig/WillContain() - return null diff --git a/maps/torch/structures/closets/closet_appearances.dm b/maps/torch/structures/closets/closet_appearances.dm deleted file mode 100644 index b527477fe6eca..0000000000000 --- a/maps/torch/structures/closets/closet_appearances.dm +++ /dev/null @@ -1,5 +0,0 @@ -/decl/closet_appearance/secure_closet/torch - color = COLOR_GRAY20 - decals = list( - "lower_side_vent" - ) diff --git a/maps/torch/structures/closets/command.dm b/maps/torch/structures/closets/command.dm deleted file mode 100644 index 9c6ac8e589b7c..0000000000000 --- a/maps/torch/structures/closets/command.dm +++ /dev/null @@ -1,217 +0,0 @@ -/* - * Torch Command - */ -/decl/closet_appearance/secure_closet/torch/command - extra_decals = list( - "stripe_vertical_mid_full" = COLOR_CLOSET_GOLD - ) - -/decl/closet_appearance/secure_closet/torch/command/bo - extra_decals = list( - "stripe_vertical_left_full" = COLOR_CLOSET_GOLD, - "stripe_vertical_right_full" = COLOR_CLOSET_GOLD - ) - -/decl/closet_appearance/secure_closet/torch/command/xo - extra_decals = list( - "stripe_vertical_left_full" = COLOR_CLOSET_GOLD, - "stripe_vertical_right_full" = COLOR_CLOSET_GOLD, - "command" = COLOR_CLOSET_GOLD - ) - -/decl/closet_appearance/secure_closet/torch/command/co - extra_decals = list( - "stripe_vertical_left_full" = COLOR_CLOSET_GOLD, - "stripe_vertical_mid_full" = COLOR_OFF_WHITE, - "stripe_vertical_right_full" = COLOR_CLOSET_GOLD, - "command" = COLOR_OFF_WHITE - ) - -/decl/closet_appearance/secure_closet/torch/command/synth_med - extra_decals = list( - "stripe_vertical_left_full" = COLOR_BABY_BLUE, - "stripe_vertical_mid_full" = COLOR_CLOSET_GOLD, - "stripe_vertical_right_full" = COLOR_BABY_BLUE, - "medical" = COLOR_CLOSET_GOLD - ) - -/decl/closet_appearance/secure_closet/torch/command/synth_eng - extra_decals = list( - "stripe_vertical_left_full" = COLOR_WARM_YELLOW, - "stripe_vertical_mid_full" = COLOR_CLOSET_GOLD, - "stripe_vertical_right_full" = COLOR_WARM_YELLOW, - "exped" = COLOR_CLOSET_GOLD - ) - -/obj/structure/closet/secure_closet/CO - name = "commanding officer's locker" - req_access = list(access_captain) - closet_appearance = /decl/closet_appearance/secure_closet/torch/command/co - -/obj/structure/closet/secure_closet/CO/WillContain() - return list( - /obj/item/device/radio/headset/heads/torchexec, - /obj/item/clothing/glasses/sunglasses, - /obj/item/device/radio/headset/heads/torchexec/alt, - /obj/item/storage/belt/general, - /obj/item/melee/telebaton, - /obj/item/device/flash, - /obj/item/gun/energy/confuseray, - /obj/item/device/megaphone, - //proxima code start, - /obj/item/storage/box/radiokeys, - /obj/item/device/remote_device/captain, - /obj/item/storage/box/encryptionkey/command, - //proxima code end, - /obj/item/storage/box/ids, - /obj/item/material/clipboard, - /obj/item/device/holowarrant, - /obj/item/folder/blue, - /obj/item/material/knife/folding/swiss/officer, - /obj/item/storage/backpack/satchel/com, - /obj/item/clothing/suit/armor/pcarrier/medium/command, - /obj/item/clothing/head/helmet/solgov/command, - ) - -/obj/structure/closet/secure_closet/XO - name = "executive officer's locker" - req_access = list(access_hop) - closet_appearance = /decl/closet_appearance/secure_closet/torch/command/xo - -/obj/structure/closet/secure_closet/XO/WillContain() - return list( - /obj/item/clothing/glasses/sunglasses, - /obj/item/device/radio/headset/heads/torchexec, - /obj/item/storage/belt/general, - /obj/item/melee/telebaton, - /obj/item/device/flash, - /obj/item/gun/energy/confuseray, - /obj/item/device/megaphone, - /obj/item/storage/box/headset, - /obj/item/device/radio/headset/heads/torchexec/alt, - /obj/item/storage/box/radiokeys, - /obj/item/storage/box/large/ids, - /obj/item/storage/box/PDAs, - //proxima code start, - /obj/item/device/remote_device/civillian, - /obj/item/storage/box/encryptionkey/service, - //proxima code end, - /obj/item/material/clipboard, - /obj/item/device/holowarrant, - /obj/item/folder/blue, - /obj/item/material/knife/folding/swiss/officer, - /obj/item/storage/backpack/satchel/com, - /obj/item/storage/box/imprinting, - /obj/item/clothing/suit/armor/pcarrier/medium/command, - /obj/item/clothing/head/helmet/solgov/command - ) - -/obj/structure/closet/secure_closet/sea - name = "senior enlisted advisor's locker" - req_access = list(access_senadv) - closet_appearance = /decl/closet_appearance/secure_closet/torch/command - -/obj/structure/closet/secure_closet/sea/WillContain() - return list( - /obj/item/clothing/glasses/sunglasses, - /obj/item/clothing/suit/armor/pcarrier/medium/command, - /obj/item/clothing/head/helmet/solgov/command, - /obj/item/storage/belt/holster/general, - /obj/item/gun/energy/confuseray, - /obj/item/device/radio/headset/sea, - /obj/item/device/radio/headset/sea/alt, - /obj/item/storage/belt/general, - /obj/item/melee/telebaton, - /obj/item/device/flash, - /obj/item/device/megaphone, - /obj/item/material/clipboard, - /obj/item/device/holowarrant, - /obj/item/folder/blue, - /obj/item/material/knife/folding/swiss/officer, - /obj/item/storage/backpack/dufflebag - ) - -/obj/structure/closet/secure_closet/bridgeofficer - name = "bridge officer's locker" - req_access = list(access_bridge, access_keycard_auth) - closet_appearance = /decl/closet_appearance/secure_closet/torch/command/bo - -/obj/structure/closet/secure_closet/bridgeofficer/WillContain() - return list( - /obj/item/device/radio, - /obj/item/pen, - /obj/item/device/tape/random, - /obj/item/device/taperecorder, - /obj/item/device/flash, - /obj/item/device/megaphone, - /obj/item/material/clipboard, - /obj/item/folder/blue, - /obj/item/modular_computer/tablet/lease/preset/command, - /obj/item/device/radio/headset/bridgeofficer, - /obj/item/device/radio/headset/bridgeofficer/alt, - /obj/item/storage/belt/general, - /obj/item/material/knife/folding/swiss/officer, - /obj/item/storage/backpack/dufflebag, - /obj/item/device/flashlight - ) - -/obj/structure/closet/secure_closet/synth_med - name = "EXO Synthethics's medical locker" - req_access = list(access_bridge, access_keycard_auth) - closet_appearance = /decl/closet_appearance/secure_closet/torch/command/synth_med - -/obj/structure/closet/secure_closet/synth_med/WillContain() - return list( - /obj/item/storage/box/autoinjectors, - /obj/item/clothing/accessory/storage/white_vest, - /obj/item/storage/box/gloves, - /obj/item/storage/box/masks, - /obj/item/storage/box/syringes, - /obj/item/storage/box/armband/med, - /obj/item/defibrillator/compact/loaded, - /obj/item/auto_cpr, - /obj/item/clothing/glasses/hud/health/prescription, - /obj/item/clothing/glasses/hud/health, - /obj/item/device/scanner/health, - /obj/item/clothing/head/beret/solgov/health, - /obj/item/clothing/under/sterile, - /obj/item/clothing/under/solgov/utility/expeditionary/officer/medical, - /obj/item/clothing/under/gorka/med, - /obj/item/clothing/suit/storage/toggle/labcoat/science, - /obj/item/clothing/suit/storage/toggle/labcoat, - /obj/item/storage/belt/medical/emt, - /obj/item/clothing/accessory/stethoscope, - /obj/item/device/flashlight/pen, - new /datum/atom_creator/weighted(list(/obj/item/storage/backpack/medic, /obj/item/storage/backpack/satchel/med)), - new /datum/atom_creator/weighted(list(/obj/item/storage/backpack/dufflebag/med, /obj/item/storage/backpack/messenger/med)), - RANDOM_SCRUBS, - RANDOM_SCRUBS - ) - -/obj/structure/closet/secure_closet/synth_eng - name = "EXO Synthethics's engineering locker" - req_access = list(access_bridge, access_keycard_auth) - closet_appearance = /decl/closet_appearance/secure_closet/torch/command/synth_eng - -/obj/structure/closet/secure_closet/synth_eng/WillContain() - return list( - /obj/item/device/multitool, - /obj/item/clothing/suit/storage/hazardvest, - /obj/item/clothing/glasses/meson, - /obj/item/clothing/glasses/welding/superior, - /obj/item/clothing/accessory/storage/brown_vest, - /obj/item/storage/belt/utility/full, - /obj/item/taperoll/engineering, - /obj/item/taperoll/atmos, - /obj/item/crowbar/brace_jack, - /obj/item/storage/box/armband/engine, - /obj/item/clothing/under/gorka/engi, - /obj/item/clothing/under/hazard, - /obj/item/clothing/under/rank/atmospheric_technician, - /obj/item/clothing/under/rank/engineer, - /obj/item/clothing/under/solgov/utility/expeditionary/officer/engineering, - /obj/item/device/flashlight, - /obj/item/clothing/gloves/insulated, - new /datum/atom_creator/weighted(list(/obj/item/storage/backpack/industrial, /obj/item/storage/backpack/satchel/eng)), - new /datum/atom_creator/weighted(list(/obj/item/storage/backpack/dufflebag/eng, /obj/item/storage/backpack/messenger/engi)) - ) diff --git a/maps/torch/structures/closets/engineering.dm b/maps/torch/structures/closets/engineering.dm deleted file mode 100644 index 75e158d801baf..0000000000000 --- a/maps/torch/structures/closets/engineering.dm +++ /dev/null @@ -1,135 +0,0 @@ -/* - * Torch Engineering - */ - -/decl/closet_appearance/secure_closet/torch/engineering - extra_decals = list( - "stripe_vertical_mid_full" = COLOR_WARM_YELLOW, - "exped" = COLOR_WARM_YELLOW - ) - -/decl/closet_appearance/secure_closet/torch/engineering/atmos - extra_decals = list( - "stripe_vertical_right_full" = COLOR_WARM_YELLOW, - "stripe_vertical_mid_full" = COLOR_CYAN_BLUE, - "atmos_upper" = COLOR_WARM_YELLOW - ) - -/decl/closet_appearance/secure_closet/torch/engineering/se - extra_decals = list( - "stripe_vertical_left_full" = COLOR_WARM_YELLOW, - "stripe_vertical_right_full" = COLOR_WARM_YELLOW, - "exped" = COLOR_WARM_YELLOW - ) - -/decl/closet_appearance/secure_closet/torch/engineering/ce - extra_decals = list( - "stripe_vertical_left_full" = COLOR_WARM_YELLOW, - "stripe_vertical_mid_full" = COLOR_CLOSET_GOLD, - "stripe_vertical_right_full" = COLOR_WARM_YELLOW, - "exped" = COLOR_CLOSET_GOLD - ) - -/obj/structure/closet/secure_closet/engineering_chief_torch - name = "chief engineer's locker" - req_access = list(access_ce) - closet_appearance = /decl/closet_appearance/secure_closet/torch/engineering/ce - -/obj/structure/closet/secure_closet/engineering_chief_torch/WillContain() - return list( - /obj/item/clothing/accessory/storage/brown_vest, - /obj/item/blueprints, - /obj/item/clothing/head/hardhat/white, - /obj/item/clothing/head/welding, - /obj/item/clothing/gloves/insulated, - /obj/item/device/radio/headset/heads/ce, - /obj/item/device/radio/headset/heads/ce/alt, - /obj/item/storage/belt/utility/full, - /obj/item/clothing/suit/storage/hazardvest, - /obj/item/clothing/mask/gas, - /obj/item/device/multitool, - /obj/item/device/flash, - /obj/item/gun/energy/confuseray, - /obj/item/taperoll/engineering, - /obj/item/device/megaphone, - /obj/item/crowbar/brace_jack, - /obj/item/clothing/glasses/meson, - /obj/item/clothing/glasses/welding/superior, - /obj/item/clothing/suit/armor/pcarrier/medium/command, - /obj/item/clothing/head/helmet/solgov/command, - /obj/item/material/clipboard, - //proxima code start, - /obj/item/device/remote_device/chief_engineer, - //proxima code end, - /obj/item/device/holowarrant, - /obj/item/storage/box/armband/engine, - /obj/item/storage/box/secret_project_disks, - /obj/item/material/knife/folding/swiss/officer, - /obj/item/storage/backpack/dufflebag/eng - ) - -/obj/structure/closet/secure_closet/engineering_torch - name = "engineer's locker" - req_access = list(access_engine_equip) - closet_appearance = /decl/closet_appearance/secure_closet/torch/engineering - -/obj/structure/closet/secure_closet/engineering_torch/WillContain() - return list( - /obj/item/clothing/accessory/storage/brown_vest, - /obj/item/storage/belt/utility/full, - /obj/item/device/radio/headset/headset_eng, - /obj/item/device/radio/headset/headset_eng/alt, - /obj/item/clothing/suit/storage/hazardvest, - /obj/item/clothing/mask/gas, - /obj/item/clothing/glasses/meson, - /obj/item/taperoll/engineering, - /obj/item/device/flashlight, - /obj/item/clothing/gloves/insulated, - /obj/item/material/knife/folding/swiss/engineer, - /obj/item/storage/backpack/dufflebag/eng - ) - -/obj/structure/closet/secure_closet/engineering_senior - name = "senior engineer's locker" - req_access = list(access_seneng) - closet_appearance = /decl/closet_appearance/secure_closet/torch/engineering/se - -/obj/structure/closet/secure_closet/engineering_senior/WillContain() - return list( - /obj/item/clothing/accessory/storage/brown_vest, - /obj/item/device/radio/headset/headset_eng, - /obj/item/device/radio/headset/headset_eng/alt, - /obj/item/clothing/suit/storage/hazardvest, - /obj/item/clothing/mask/gas, - /obj/item/storage/belt/utility/full, - /obj/item/clothing/glasses/meson, - /obj/item/taperoll/engineering, - /obj/item/clothing/glasses/welding/superior, - /obj/item/device/flash, - /obj/item/device/flashlight, - /obj/item/device/megaphone, - /obj/item/clothing/gloves/insulated, - /obj/item/material/knife/folding/swiss/engineer, - /obj/item/storage/backpack/dufflebag/eng - ) - -/obj/structure/closet/secure_closet/atmos_torch - name = "atmospherics equipment locker" - req_access = list(access_atmospherics) - closet_appearance = /decl/closet_appearance/secure_closet/torch/engineering/atmos - -/obj/structure/closet/secure_closet/atmos_torch/WillContain() - return list( - /obj/item/storage/backpack/dufflebag/firefighter, - /obj/item/clothing/head/hardhat/red, - /obj/item/device/flashlight, - /obj/item/storage/belt/utility/full, - /obj/item/device/radio/headset/headset_eng, - /obj/item/device/radio/headset/headset_eng/alt, - /obj/item/tank/oxygen_emergency_double, - /obj/item/clothing/mask/gas, - /obj/item/taperoll/atmos, - /obj/item/device/scanner/gas, - /obj/item/scrubpack/standard = 2, - /obj/item/tank/scrubber = 4 - ) diff --git a/maps/torch/structures/closets/exploration.dm b/maps/torch/structures/closets/exploration.dm deleted file mode 100644 index 0c129e01184c0..0000000000000 --- a/maps/torch/structures/closets/exploration.dm +++ /dev/null @@ -1,224 +0,0 @@ -/* - * Torch Exploration - */ - -/decl/closet_appearance/secure_closet/torch/exploration - extra_decals = list( - "stripe_vertical_mid_full" = COLOR_PURPLE, - "exped" = COLOR_PURPLE - ) - -/decl/closet_appearance/secure_closet/torch/exploration/pilot - extra_decals = list( - "stripe_vertical_left_full" = COLOR_PURPLE, - "stripe_vertical_right_full" = COLOR_PURPLE, - "exped" = COLOR_PURPLE - ) - -/decl/closet_appearance/secure_closet/torch/exploration/pathfinder - extra_decals = list( - "stripe_vertical_left_full" = COLOR_PURPLE, - "stripe_vertical_mid_full" = COLOR_CLOSET_GOLD, - "stripe_vertical_right_full" = COLOR_PURPLE, - "exped" = COLOR_CLOSET_GOLD - ) - -//proxima code -/decl/closet_appearance/secure_closet/torch/exploration/medic - extra_decals = list( - "stripe_vertical_mid_full" = COLOR_WHITE, - "exped" = COLOR_PURPLE - ) - -/decl/closet_appearance/secure_closet/torch/exploration/engineer - extra_decals = list( - "stripe_vertical_mid_full" = COLOR_ORANGE, - "exped" = COLOR_PURPLE - ) - -/decl/closet_appearance/secure_closet/torch/exploration/guard - extra_decals = list( - "stripe_vertical_mid_full" = COLOR_NT_RED, - "security" = COLOR_NT_RED - ) - -/obj/structure/closet/secure_closet/explorer/medic - name = "expedition medic's locker" - req_access = list(access_explorer) - closet_appearance = /decl/closet_appearance/secure_closet/torch/exploration/medic - -/obj/structure/closet/secure_closet/explorer/medic/WillContain() - return list( - /obj/item/storage/belt/medical/emt, - /obj/item/storage/box/gloves, - /obj/item/clothing/glasses/hud/health, - /obj/item/storage/box/masks, - /obj/item/storage/firstaid/adv, - /obj/item/storage/firstaid/stab, - /obj/item/bodybag/rescue/loaded, - /obj/item/bodybag/rescue/loaded, - /obj/item/device/scanner/health, - /obj/item/roller, - /obj/item/clothing/accessory/storage/holster/machete, - /obj/item/device/radio, - /obj/item/device/gps, - /obj/item/taperoll/research, - /obj/item/device/spaceflare, - /obj/item/clothing/accessory/storage/webbing_large, - /obj/item/device/scanner/gas, - /obj/item/device/radio/headset/exploration, - /obj/item/device/radio/headset/exploration/alt, - /obj/item/device/binoculars, - /obj/item/clothing/accessory/buddy_tag, - /obj/item/storage/firstaid/individual/military, - /obj/item/material/knife/folding/swiss/explorer, - /obj/item/device/camera, - new /datum/atom_creator/weighted(list(/obj/item/storage/backpack/explorer, /obj/item/storage/backpack/satchel/explorer)), - new /datum/atom_creator/weighted(list(/obj/item/storage/backpack/dufflebag, /obj/item/storage/backpack/messenger/explorer)), - new /datum/atom_creator/weighted(list(/obj/item/device/flashlight, /obj/item/device/flashlight/flare, /obj/item/device/flashlight/flare/glowstick/random)) - ) -/obj/structure/closet/secure_closet/explorer/engineer - name = "expedition engineer's locker" - req_access = list(access_explorer) - closet_appearance = /decl/closet_appearance/secure_closet/torch/exploration/engineer - -/obj/structure/closet/secure_closet/explorer/engineer/WillContain() - return list( - /obj/item/storage/belt/utility/full, - /obj/item/clothing/gloves/insulated, - /obj/item/device/multitool, - /obj/item/clothing/accessory/storage/holster/machete, - /obj/item/device/radio, - /obj/item/device/gps, - /obj/item/taperoll/research, - /obj/item/device/spaceflare, - /obj/item/clothing/accessory/storage/webbing_large, - /obj/item/device/scanner/gas, - /obj/item/device/radio/headset/exploration, - /obj/item/device/radio/headset/exploration/alt, - /obj/item/device/binoculars, - /obj/item/clothing/accessory/buddy_tag, - /obj/item/storage/firstaid/individual/military, - /obj/item/material/knife/folding/swiss/explorer, - /obj/item/clothing/glasses/welding, - /obj/item/clothing/head/welding, - /obj/item/device/camera, - /obj/item/gun/energy/plasmacutter, - new /datum/atom_creator/weighted(list(/obj/item/storage/backpack/explorer, /obj/item/storage/backpack/satchel/explorer)), - new /datum/atom_creator/weighted(list(/obj/item/storage/backpack/dufflebag, /obj/item/storage/backpack/messenger/explorer)), - new /datum/atom_creator/weighted(list(/obj/item/device/flashlight, /obj/item/device/flashlight/flare, /obj/item/device/flashlight/flare/glowstick/random)) - ) - -/obj/structure/closet/secure_closet/explorer/marine - name = "expedition guard's locker" - req_access = list(access_exploration_guard) - closet_appearance = /decl/closet_appearance/secure_closet/torch/exploration/guard - -/obj/structure/closet/secure_closet/explorer/marine/WillContain() - return list( - /obj/item/cell/guncell/medium = 3, - /obj/item/cell/guncell/small = 4, - /obj/item/gun/energy/k342/explo = 1, - /obj/item/clothing/mask/gas/half, - /obj/item/clothing/gloves/thick, - /obj/item/clothing/accessory/storage/holster/knife/polymer, - /obj/item/material/knife/combat, - /obj/item/storage/firstaid/individual/military, - /obj/item/storage/belt/holster/security, - /obj/item/clothing/accessory/storage/webbing_large, - new /datum/atom_creator/weighted(list(/obj/item/storage/backpack/security, /obj/item/storage/backpack/satchel/sec)), - new /datum/atom_creator/weighted(list(/obj/item/storage/backpack/dufflebag/sec, /obj/item/storage/backpack/messenger/sec)), - ) -//proxima code end - -/obj/structure/closet/secure_closet/pathfinder - name = "pathfinder's locker" - req_access = list(access_pathfinder) - closet_appearance = /decl/closet_appearance/secure_closet/torch/exploration/pathfinder - -/obj/structure/closet/secure_closet/pathfinder/WillContain() - return list( - /obj/item/solbanner, - /obj/item/solbanner, - /obj/item/device/radio, - /obj/item/device/tape/random, - /obj/item/device/gps, - /obj/item/pinpointer/radio, - /obj/item/taperoll/research, - /obj/item/material/hatchet/machete/deluxe, - /obj/item/storage/belt/holster/machete, - /obj/item/device/spaceflare, - /obj/item/clothing/accessory/storage/webbing_large, - /obj/item/device/taperecorder, - /obj/item/device/scanner/gas, - /obj/item/device/flash, - /obj/item/device/radio/headset/pathfinder, - /obj/item/device/radio/headset/pathfinder/alt, - /obj/item/storage/box/encryptionkey/exploration, - /obj/item/device/binoculars, - /obj/item/material/knife/folding/swiss/explorer, - /obj/item/clothing/accessory/buddy_tag, - //rubay code, - /obj/item/storage/firstaid/individual/military, - //rubay code end, - new /datum/atom_creator/weighted(list(/obj/item/storage/backpack, /obj/item/storage/backpack/satchel/grey)), - new /datum/atom_creator/weighted(list(/obj/item/storage/backpack/dufflebag, /obj/item/storage/backpack/messenger)), - new /datum/atom_creator/weighted(list(/obj/item/device/flashlight, /obj/item/device/flashlight/flare, /obj/item/device/flashlight/flare/glowstick/random)) - ) - -/obj/structure/closet/secure_closet/explorer - name = "explorer's locker" - req_access = list(access_explorer) - closet_appearance = /decl/closet_appearance/secure_closet/torch/exploration - -/obj/structure/closet/secure_closet/explorer/WillContain() - return list( - /obj/item/device/radio, - /obj/item/device/gps, - /obj/item/taperoll/research, - /obj/item/storage/belt/holster/machete, - /obj/item/device/spaceflare, - /obj/item/clothing/accessory/storage/webbing_large, - /obj/item/device/scanner/gas, - /obj/item/device/radio/headset/exploration, - /obj/item/device/radio/headset/exploration/alt, - /obj/item/device/binoculars, - /obj/item/clothing/accessory/buddy_tag, - //rubay code, - /obj/item/storage/firstaid/individual/military, - //rubay code end, - /obj/item/material/knife/folding/swiss/explorer, - /obj/item/device/camera, - /obj/item/storage/backpack/dufflebag, - /obj/item/device/flashlight/flare - ) - -/obj/structure/closet/secure_closet/pilot - name = "pilot's locker" - req_access = list(access_pilot) - closet_appearance = /decl/closet_appearance/secure_closet/torch/exploration/pilot - -/obj/structure/closet/secure_closet/pilot/WillContain() - return list( - /obj/item/device/radio, - /obj/item/device/gps, - /obj/item/storage/belt/utility/full, - /obj/item/device/spaceflare, - /obj/item/clothing/accessory/storage/webbing_large, - /obj/item/device/scanner/gas, - /obj/item/device/radio/headset/headset_pilot, - /obj/item/device/radio/headset/headset_pilot/alt, - /obj/item/device/binoculars, - /obj/item/clothing/gloves/thick, - /obj/item/clothing/suit/storage/hazardvest/blue, - /obj/item/clothing/head/helmet/solgov/pilot, - /obj/item/clothing/head/helmet/solgov/pilot/fleet, - /obj/item/clothing/head/helmet/nt/pilot, - //rubay code, - /obj/item/storage/firstaid/individual/military, - /obj/item/clothing/accessory/storage/holster/machete, - //rubay code end, - /obj/item/material/knife/folding/swiss/explorer, - /obj/item/storage/backpack/dufflebag, - /obj/item/device/flashlight/flare - ) diff --git a/maps/torch/structures/closets/medical.dm b/maps/torch/structures/closets/medical.dm deleted file mode 100644 index 0bf905fccecb1..0000000000000 --- a/maps/torch/structures/closets/medical.dm +++ /dev/null @@ -1,124 +0,0 @@ -/* - * Torch Medical - */ -/decl/closet_appearance/secure_closet/torch/medical - extra_decals = list( - "stripe_vertical_mid_full" = COLOR_BABY_BLUE, - "medical" = COLOR_BABY_BLUE - ) - -/decl/closet_appearance/secure_closet/torch/medical/physician - extra_decals = list( - "stripe_vertical_left_full" = COLOR_BABY_BLUE, - "stripe_vertical_right_full" = COLOR_BABY_BLUE, - "medical" = COLOR_BABY_BLUE - ) - -/decl/closet_appearance/secure_closet/torch/medical/cmo - extra_decals = list( - "stripe_vertical_left_full" = COLOR_BABY_BLUE, - "stripe_vertical_mid_full" = COLOR_CLOSET_GOLD, - "stripe_vertical_right_full" = COLOR_BABY_BLUE, - "medical" = COLOR_CLOSET_GOLD - ) - -/obj/structure/closet/secure_closet/counselor - closet_appearance = /decl/closet_appearance/secure_closet/torch/medical - -/obj/structure/closet/secure_closet/CMO_torch - name = "chief medical officer's locker" - req_access = list(access_cmo) - closet_appearance = /decl/closet_appearance/secure_closet/torch/medical/cmo - -/obj/structure/closet/secure_closet/CMO_torch/WillContain() - return list( - /obj/item/clothing/suit/bio_suit/cmo, - /obj/item/clothing/head/bio_hood/cmo, - /obj/item/clothing/suit/storage/toggle/labcoat/cmo, - /obj/item/clothing/suit/storage/toggle/labcoat/cmoalt, - /obj/item/device/radio/headset/heads/cmo, - /obj/item/device/radio/headset/heads/cmo/alt, - /obj/item/device/flash, - /obj/item/gun/energy/confuseray, - /obj/item/device/megaphone, - /obj/item/reagent_containers/hypospray/vial, - /obj/item/storage/fancy/vials, - /obj/item/device/scanner/health, - /obj/item/clothing/accessory/stethoscope, - /obj/item/device/flashlight/pen, - /obj/item/clothing/glasses/hud/health, - /obj/item/clothing/suit/armor/pcarrier/medium/command, - /obj/item/clothing/head/helmet/solgov/command, - //proxima code start, - /obj/item/device/remote_device/chief_medical_officer, - //proxima code end, - /obj/item/device/holowarrant, - /obj/item/storage/firstaid/adv, - /obj/item/storage/box/armband/med, - /obj/item/material/knife/folding/swiss/officer, - /obj/item/storage/backpack/dufflebag/med, - RANDOM_SCRUBS - ) - -/obj/structure/closet/secure_closet/medical_torchsenior - name = "physician's locker" - req_access = list(access_senmed) - closet_appearance = /decl/closet_appearance/secure_closet/torch/medical/physician - -/obj/structure/closet/secure_closet/medical_torchsenior/WillContain() - return list( - /obj/item/clothing/suit/storage/toggle/labcoat, - /obj/item/clothing/suit/surgicalapron, - /obj/item/device/radio/headset/headset_med, - /obj/item/device/radio/headset/headset_med/alt, - /obj/item/taperoll/medical, - /obj/item/storage/belt/medical, - /obj/item/clothing/mask/surgical, - /obj/item/device/scanner/health, - /obj/item/clothing/accessory/stethoscope, - /obj/item/device/flashlight/pen, - /obj/item/clothing/glasses/hud/health, - /obj/item/device/megaphone, - /obj/item/storage/firstaid/adv, - /obj/item/material/knife/folding/swiss/medic, - /obj/item/storage/backpack/dufflebag/med, - RANDOM_SCRUBS = 2 - ) - -/obj/structure/closet/secure_closet/medical_torch - name = "medical technician's locker" - req_access = list(access_medical_equip) - closet_appearance = /decl/closet_appearance/secure_closet/torch/medical - -/obj/structure/closet/secure_closet/medical_torch/WillContain() - return list( - /obj/item/clothing/accessory/storage/white_vest, - /obj/item/clothing/suit/storage/toggle/fr_jacket, - /obj/item/device/radio/headset/headset_med, - /obj/item/device/radio/headset/headset_corpsman/alt, - /obj/item/taperoll/medical, - /obj/item/storage/belt/medical/emt, - /obj/item/clothing/mask/gas/half, - /obj/item/tank/oxygen_emergency_extended, - /obj/item/storage/box/autoinjectors, - /obj/item/device/scanner/health, - /obj/item/clothing/glasses/hud/health, - /obj/item/storage/firstaid/adv, - /obj/item/clothing/suit/storage/medical_chest_rig, - /obj/item/clothing/head/hardhat/EMS, - /obj/item/material/knife/folding/swiss/medic, - /obj/item/storage/backpack/dufflebag/med - ) - -/obj/structure/closet/wardrobe/medic_torch - name = "medical wardrobe" - closet_appearance = /decl/closet_appearance/wardrobe/white - -/obj/structure/closet/wardrobe/medic_torch/WillContain() - return list( - /obj/item/clothing/under/sterile = 2, - RANDOM_SCRUBS = 4, - /obj/item/clothing/suit/surgicalapron = 2, - /obj/item/clothing/shoes/white = 2, - /obj/item/clothing/mask/surgical = 2 - ) diff --git a/maps/torch/structures/closets/misc.dm b/maps/torch/structures/closets/misc.dm deleted file mode 100644 index d29d2b3734fed..0000000000000 --- a/maps/torch/structures/closets/misc.dm +++ /dev/null @@ -1,134 +0,0 @@ -/decl/closet_appearance/secure_closet/torch/sol - color = COLOR_BABY_BLUE - extra_decals = list( - "stripe_vertical_mid_full" = COLOR_OFF_WHITE - ) - -/decl/closet_appearance/secure_closet/torch/sol/rep - color = COLOR_BABY_BLUE - extra_decals = list( - "stripe_vertical_left_full" = COLOR_OFF_WHITE, - "stripe_vertical_right_full" = COLOR_OFF_WHITE - ) - -/decl/closet_appearance/secure_closet/torch/corporate - color = COLOR_BOTTLE_GREEN - extra_decals = list( - "stripe_vertical_mid_full" = COLOR_OFF_WHITE - ) - -/decl/closet_appearance/secure_closet/torch/corporate/liaison - extra_decals = list( - "stripe_vertical_left_full" = COLOR_OFF_WHITE, - "stripe_vertical_right_full" = COLOR_OFF_WHITE, - "command" = COLOR_OFF_WHITE - ) - -/decl/closet_appearance/secure_closet/torch/corporate/research_guard - extra_decals = list( - "stripe_vertical_left_full" = COLOR_OFF_WHITE, - "stripe_vertical_right_full" = COLOR_OFF_WHITE, - "security" = COLOR_OFF_WHITE - ) - -/obj/structure/closet/secure_closet/liaison - name = "\improper corporate liaison's locker" - req_access = list(access_liaison) - closet_appearance = /decl/closet_appearance/secure_closet/torch/corporate/liaison - -/obj/structure/closet/secure_closet/liaison/WillContain() - return list( - /obj/item/device/flash, - /obj/item/material/clipboard, - /obj/item/folder, - /obj/item/device/tape/random = 3, - /obj/item/storage/secure/briefcase, - /obj/item/clothing/shoes/laceup, - /obj/item/clothing/under/rank/internalaffairs/plain/nt, - /obj/item/clothing/suit/storage/toggle/suit/black, - /obj/item/clothing/glasses/sunglasses/big, - /obj/item/storage/belt/general, - new /datum/atom_creator/weighted(list(/obj/item/storage/backpack, /obj/item/storage/backpack/satchel, /obj/item/storage/backpack/messenger)), - /obj/item/device/radio/headset/heads/torchntcommand, - /obj/item/device/radio/headset/heads/torchntcommand/alt - ) - -/obj/structure/closet/secure_closet/representative - name = "\improper Sol Central Government representative's locker" - req_access = list(access_representative) - closet_appearance = /decl/closet_appearance/secure_closet/torch/sol/rep - -/obj/structure/closet/secure_closet/representative/WillContain() - return list( - /obj/item/device/flash, - /obj/item/device/camera_film = 2, - /obj/item/material/clipboard, - /obj/item/folder, - /obj/item/device/tape/random = 3, - /obj/item/storage/secure/briefcase, - /obj/item/device/radio/headset/headset_com, - /obj/item/clothing/shoes/laceup, - /obj/item/clothing/under/rank/internalaffairs/plain/solgov, - /obj/item/clothing/suit/storage/toggle/suit/black, - /obj/item/clothing/glasses/sunglasses/big, - /obj/item/storage/belt/general, - new /datum/atom_creator/weighted(list(/obj/item/storage/backpack, /obj/item/storage/backpack/satchel, /obj/item/storage/backpack/messenger)), - ) - -//equipment closets that everyone on the crew or in research can access, for storing things securely - -/obj/structure/closet/secure_closet/crew - name = "crew equipment locker" - req_access = list(access_solgov_crew) - closet_appearance = /decl/closet_appearance/secure_closet/torch/sol - -/obj/structure/closet/secure_closet/crew/WillContain() - return list( - /obj/item/device/radio, - /obj/item/crowbar, - /obj/item/device/flashlight, - /obj/item/storage/box - ) - -/obj/structure/closet/secure_closet/crew/research - name = "research equipment locker" - req_access = list(access_nanotrasen) - closet_appearance = /decl/closet_appearance/secure_closet/torch/corporate - - -/obj/structure/closet/secure_closet/guncabinet/sidearm - name = "sidearm cabinet" - req_access = list(list(access_armory,access_emergency_armory,access_hos,access_hop,access_ce,access_cmo,access_rd,access_senadv)) - -/obj/structure/closet/secure_closet/guncabinet/sidearm/WillContain() - return list( - /obj/item/clothing/accessory/storage/holster/thigh = 2, - /obj/item/gun/energy/gun/secure = 3, - ) - -/obj/structure/closet/secure_closet/guncabinet/sidearm/small - name = "personal sidearm cabinet" - -/obj/structure/closet/secure_closet/guncabinet/sidearm/small/WillContain() - return list(/obj/item/gun/energy/gun/small/secure = 4) - -/obj/structure/closet/secure_closet/guncabinet/sidearm/combined - name = "combined sidearm cabinet" - -/obj/structure/closet/secure_closet/guncabinet/sidearm/combined/WillContain() - return list( - /obj/item/storage/belt/holster/general = 3, - /obj/item/gun/energy/gun/secure = 3, - /obj/item/gun/energy/gun/small/secure = 1, - ) - -/obj/structure/closet/secure_closet/guncabinet/PPE - name = "Bridge PPE cabinet" - req_access = list(list(access_armory,access_emergency_armory,access_hos,access_hop,access_ce,access_cmo,access_rd,access_senadv)) - -/obj/structure/closet/secure_closet/guncabinet/PPE/WillContain() - return list( - /obj/item/gun/energy/gun/small/secure = 3, - /obj/item/clothing/suit/armor/pcarrier/medium/command = 3, - /obj/item/clothing/head/helmet/solgov/command = 3 - ) diff --git a/maps/torch/structures/closets/research.dm b/maps/torch/structures/closets/research.dm deleted file mode 100644 index 5f736e74e0673..0000000000000 --- a/maps/torch/structures/closets/research.dm +++ /dev/null @@ -1,177 +0,0 @@ -/* - * Torch Science - */ -/decl/closet_appearance/secure_closet/torch/science - extra_decals = list( - "stripe_vertical_left_full" = COLOR_PURPLE_GRAY, - "stripe_vertical_right_full" = COLOR_PURPLE_GRAY, - "research" = COLOR_PURPLE_GRAY - ) - -/decl/closet_appearance/secure_closet/torch/science/cso - color = COLOR_BOTTLE_GREEN - decals = list( - "lower_holes" - ) - extra_decals = list( - "stripe_vertical_mid_full" = COLOR_GOLD, - "stripe_vertical_left_full" = COLOR_PURPLE, - "stripe_vertical_right_full" = COLOR_PURPLE, - "research" = COLOR_GOLD - ) - -/obj/structure/closet/secure_closet/RD_torch - name = "chief science officer's locker" - req_access = list(access_rd) - closet_appearance = /decl/closet_appearance/secure_closet/torch/science/cso - -/obj/structure/closet/secure_closet/RD_torch/WillContain() - return list( - /obj/item/clothing/suit/storage/toggle/labcoat/rd/ec, - /obj/item/clothing/gloves/latex, - /obj/item/clothing/glasses/science, - /obj/item/device/radio/headset/heads/torchntdirector, - /obj/item/device/radio/headset/heads/torchntdirector/alt, - /obj/item/tank/oxygen_emergency_extended, - /obj/item/clothing/mask/gas, - /obj/item/device/flash, - /obj/item/gun/energy/confuseray, - /obj/item/device/megaphone, - /obj/item/device/taperecorder, - /obj/item/device/tape/random = 3, - /obj/item/device/camera, - //proxima code start, - /obj/item/device/remote_device/research_director, - /obj/item/storage/box/encryptionkey/science, - //proxima code end, - /obj/item/material/clipboard/steel, - /obj/item/taperoll/research, - /obj/item/clothing/glasses/welding/superior, - /obj/item/clothing/suit/armor/pcarrier/medium/command, - /obj/item/clothing/head/helmet/solgov/command, - /obj/item/storage/box/secret_project_disks/science, - /obj/item/storage/belt/general, - /obj/item/device/holowarrant, - /obj/item/storage/backpack/dufflebag - ) - -/obj/structure/closet/secure_closet/secure_closet/xenoarchaeologist_torch - name = "xenoarchaeologist's locker" - req_access = list(access_xenoarch) - closet_appearance = /decl/closet_appearance/secure_closet/torch/science - -/obj/structure/closet/secure_closet/secure_closet/xenoarchaeologist_torch/WillContain() - return list( - /obj/item/clothing/under/rank/scientist, - /obj/item/clothing/suit/storage/toggle/labcoat/science/ec, - /obj/item/device/radio/headset/science, - /obj/item/device/radio/headset/science/alt, - /obj/item/clothing/mask/gas, - /obj/item/material/clipboard, - /obj/item/folder, - /obj/item/device/taperecorder, - /obj/item/device/tape/random = 3, - /obj/item/device/camera, - /obj/item/device/scanner/gas, - /obj/item/taperoll/research, - /obj/item/clothing/gloves/latex, - /obj/item/clothing/glasses/science, - /obj/item/clothing/glasses/meson, - /obj/item/device/radio, - /obj/item/device/flashlight/lantern, - /obj/item/storage/backpack/dufflebag - ) - -/obj/structure/closet/secure_closet/scientist_torch - name = "researcher's locker" - req_access = list(access_research_storage) - closet_appearance = /decl/closet_appearance/secure_closet/torch/science - -/obj/structure/closet/secure_closet/scientist_torch/WillContain() - return list( - /obj/item/clothing/under/rank/scientist, - /obj/item/clothing/suit/storage/toggle/labcoat/science, - /obj/item/clothing/suit/storage/toggle/labcoat/science/ec, - /obj/item/device/radio/headset/science, - /obj/item/device/radio/headset/science/alt, - /obj/item/clothing/mask/gas/half, - /obj/item/tank/oxygen_emergency_extended, - /obj/item/material/clipboard, - /obj/item/folder, - /obj/item/device/taperecorder, - /obj/item/device/tape/random = 3, - /obj/item/device/camera, - /obj/item/device/scanner/gas, - /obj/item/taperoll/research, - /obj/item/clothing/gloves/latex, - /obj/item/clothing/glasses/science, - /obj/item/storage/belt/general, - /obj/item/storage/backpack/dufflebag - ) - -/obj/structure/closet/secure_closet/research_guard - name = "Research Guard's locker" - req_access = list(access_research_security) - closet_appearance = /decl/closet_appearance/secure_closet/torch/science - -/obj/structure/closet/secure_closet/research_guard/WillContain() - return list( - /obj/item/clothing/under/rank/guard/research_guard, - /obj/item/clothing/suit/armor/pcarrier/medium/nt, - /obj/item/clothing/head/helmet/nt/guard, - /obj/item/clothing/head/soft/sec/corp/guard, - /obj/item/clothing/head/beret/guard, - /obj/item/clothing/accessory/armband/whitered, - /obj/item/device/radio/headset/research_guard, - /obj/item/device/radio/headset/research_guard/alt, - /obj/item/clothing/mask/gas/half, - /obj/item/material/clipboard, - /obj/item/folder, - /obj/item/device/taperecorder, - /obj/item/device/tape/random = 3, - /obj/item/storage/belt/holster/security, - /obj/item/device/flash, - /obj/item/reagent_containers/spray/pepper, - /obj/item/melee/baton/loaded, - /obj/item/handcuffs = 2, - /obj/item/device/flashlight/maglight, - /obj/item/clothing/glasses/sunglasses, - /obj/item/clothing/glasses/tacgoggles, - /obj/item/clothing/mask/balaclava, - /obj/item/taperoll/research, - /obj/item/device/hailer, - /obj/item/clothing/accessory/storage/black_vest, - /obj/item/clothing/accessory/badge/holo/NT, - /obj/item/device/megaphone, - /obj/item/gun/energy/stunrevolver/secure, - /obj/item/clothing/shoes/jackboots, - new /datum/atom_creator/weighted(list(/obj/item/storage/backpack/security/exo, /obj/item/storage/backpack/satchel/sec/exo)), - new /datum/atom_creator/weighted(list(/obj/item/storage/backpack/dufflebag/sec, /obj/item/storage/backpack/messenger/sec/exo)) - ) - -/obj/structure/closet/secure_closet/ec_scientist - name = "scientist locker" - req_access = list(access_research_storage) - closet_appearance = /decl/closet_appearance/secure_closet/torch/science - -/obj/structure/closet/secure_closet/ec_scientist/WillContain() - return list( - /obj/item/clothing/suit/storage/toggle/labcoat/science/ec, - /obj/item/device/radio/headset/science, - /obj/item/device/radio/headset/science/alt, - /obj/item/clothing/mask/gas/half, - /obj/item/tank/oxygen_emergency_extended, - /obj/item/material/clipboard, - /obj/item/folder, - /obj/item/device/taperecorder, - /obj/item/device/tape/random = 3, - /obj/item/device/camera, - /obj/item/device/scanner/gas, - /obj/item/taperoll/research, - /obj/item/clothing/gloves/latex, - /obj/item/clothing/glasses/science, - /obj/item/storage/belt/general, - /obj/item/device/scanner/xenobio, - /obj/item/device/scanner/plant, - /obj/item/storage/backpack/dufflebag - ) diff --git a/maps/torch/structures/closets/security.dm b/maps/torch/structures/closets/security.dm deleted file mode 100644 index 5c4e181757c85..0000000000000 --- a/maps/torch/structures/closets/security.dm +++ /dev/null @@ -1,169 +0,0 @@ -/* - * Torch Security - */ - -/decl/closet_appearance/secure_closet/torch/security - extra_decals = list( - "stripe_vertical_mid_full" = COLOR_NT_RED, - "security" = COLOR_NT_RED - ) - -/decl/closet_appearance/secure_closet/torch/security/forensics - extra_decals = list( - "stripe_vertical_mid_full" = COLOR_NT_RED, - "forensics" = COLOR_NT_RED - ) - -/decl/closet_appearance/secure_closet/torch/security/warden - extra_decals = list( - "stripe_vertical_left_full" = COLOR_NT_RED, - "stripe_vertical_right_full" = COLOR_NT_RED, - "security" = COLOR_NT_RED - ) - -/decl/closet_appearance/secure_closet/torch/security/hos - extra_decals = list( - "stripe_vertical_left_full" = COLOR_NT_RED, - "stripe_vertical_mid_full" = COLOR_CLOSET_GOLD, - "stripe_vertical_right_full" = COLOR_NT_RED, - "security" = COLOR_CLOSET_GOLD - ) - -/obj/structure/closet/secure_closet/security_torch - name = "master at arms' locker" - req_access = list(access_brig) - closet_appearance = /decl/closet_appearance/secure_closet/torch/security - -/obj/structure/closet/secure_closet/security_torch/WillContain() - return list( - /obj/item/clothing/suit/armor/pcarrier/medium/security, - /obj/item/clothing/head/helmet/solgov/security, - /obj/item/device/radio/headset/headset_sec, - /obj/item/device/radio/headset/headset_sec/alt, - /obj/item/storage/belt/holster/security/full, - /obj/item/grenade/chem_grenade/teargas, - /obj/item/clothing/glasses/hud/security/prot, - /obj/item/taperoll/police, - //rubay code, - /obj/item/storage/firstaid/individual/military, - /obj/item/cell/guncell/medium, - /obj/item/cell/guncell/medium, - //rubay code end, - /obj/item/device/hailer, - /obj/item/clothing/accessory/storage/black_vest, - /obj/item/device/megaphone, - /obj/item/clothing/gloves/thick, - /obj/item/device/flashlight/maglight, - /obj/item/storage/belt/security, - /obj/item/material/knife/folding/swiss/sec, - /obj/item/storage/backpack/dufflebag/sec, - /obj/item/gun/energy/gun/small/secure - ) - - -/obj/structure/closet/secure_closet/cos - name = "chief of security's locker" - req_access = list(access_hos) - closet_appearance = /decl/closet_appearance/secure_closet/torch/security/hos - -/obj/structure/closet/secure_closet/cos/WillContain() - return list( - /obj/item/clothing/suit/armor/pcarrier/medium/command/security, - /obj/item/clothing/head/helmet/solgov/command, - /obj/item/device/radio/headset/heads/cos, - /obj/item/device/radio/headset/heads/cos/alt, - /obj/item/clothing/glasses/hud/security/prot, - /obj/item/taperoll/police, - //rubay code, - /obj/item/storage/firstaid/individual/military, - //rubay code end, - /obj/item/handcuffs, - /obj/item/storage/belt/holster/security/full, - /obj/item/storage/belt/security, - /obj/item/device/megaphone, - /obj/item/gun/energy/gun/secure/preauthorized, - /obj/item/melee/telebaton, - /obj/item/clothing/accessory/storage/black_vest, - /obj/item/device/hailer, - //proxima code start, - /obj/item/device/remote_device/head_of_security, - //proxima code end, - /obj/item/material/clipboard, - /obj/item/folder/red, - /obj/item/clothing/gloves/thick, - /obj/item/device/flashlight/maglight, - /obj/item/device/taperecorder, - /obj/item/material/knife/folding/swiss/officer, - /obj/item/device/personal_shield, - /obj/item/storage/backpack/dufflebag/sec - ) - -/obj/structure/closet/secure_closet/brigchief - name = "brig chief's locker" - req_access = list(access_armory) - closet_appearance = /decl/closet_appearance/secure_closet/torch/security/warden - -/obj/structure/closet/secure_closet/brigchief/WillContain() - return list( - /obj/item/clothing/suit/armor/pcarrier/medium/security, - /obj/item/clothing/head/helmet/solgov/security, - /obj/item/device/radio/headset/headset_sec, - /obj/item/device/radio/headset/headset_sec/alt, - /obj/item/clothing/glasses/hud/security/prot, - /obj/item/taperoll/police, - //rubay code, - /obj/item/storage/firstaid/individual/military, - //rubay code end, - /obj/item/storage/belt/holster/security, - /obj/item/storage/belt/security, - /obj/item/gun/energy/gun/secure/preauthorized, - /obj/item/clothing/accessory/storage/black_vest, - /obj/item/handcuffs, - /obj/item/device/hailer, - /obj/item/device/megaphone, - /obj/item/hand_labeler, - /obj/item/clothing/gloves/thick, - /obj/item/device/flashlight/maglight, - /obj/item/material/knife/folding/swiss/sec, - /obj/item/storage/backpack/dufflebag/sec - ) - -/obj/structure/closet/secure_closet/forensics - name = "forensics technician's locker" - req_access = list(access_forensics_lockers) - closet_appearance = /decl/closet_appearance/secure_closet/torch/security/forensics - -/obj/structure/closet/secure_closet/forensics/WillContain() - return list( - /obj/item/clothing/gloves/forensic, - /obj/item/device/radio/headset/headset_sec, - /obj/item/device/radio/headset/headset_sec/alt, - /obj/item/clothing/head/helmet/solgov/security, - /obj/item/clothing/suit/armor/pcarrier/medium/security, - /obj/item/gun/energy/gun/small/secure, - /obj/item/device/flash, - /obj/item/reagent_containers/spray/pepper, - /obj/item/taperoll/police, - //rubay code, - /obj/item/storage/firstaid/individual/military, - //rubay code end, - /obj/item/clothing/accessory/storage/black_vest, - /obj/item/device/tape/random = 3, - /obj/item/clothing/glasses/hud/security/prot, - /obj/item/clothing/glasses/hud/security/prot/aviators, - /obj/item/device/holowarrant, - /obj/item/device/flashlight/maglight, - /obj/item/storage/belt/holster/forensic, - /obj/item/storage/belt/forensic, - /obj/item/storage/belt/holster/security, - /obj/item/storage/belt/security, - /obj/item/clothing/gloves/thick, - /obj/item/material/knife/folding/swiss/sec, - /obj/item/storage/backpack/dufflebag/sec - ) - -/obj/structure/closet/bombclosetsecurity/WillContain() - return list( - /obj/item/clothing/suit/bomb_suit/security, - /obj/item/clothing/head/bomb_hood/security - ) diff --git a/maps/torch/structures/closets/services.dm b/maps/torch/structures/closets/services.dm deleted file mode 100644 index 149e1b6f67d99..0000000000000 --- a/maps/torch/structures/closets/services.dm +++ /dev/null @@ -1,82 +0,0 @@ -/* - * Torch Service - */ -/decl/closet_appearance/secure_closet/torch/hydroponics - extra_decals = list( - "stripe_vertical_right_partial" = COLOR_GREEN_GRAY, - "stripe_vertical_mid_partial" = COLOR_GREEN_GRAY, - "hydro" = COLOR_GREEN_GRAY - ) - -/obj/structure/closet/chefcloset_torch - name = "chef's closet" - desc = "It's a storage unit for foodservice equipment." - closet_appearance = /decl/closet_appearance/wardrobe/black - -/obj/structure/closet/chefcloset_torch/WillContain() - return list( - /obj/item/clothing/head/soft/mime, - /obj/item/device/radio/headset/headset_service, - /obj/item/storage/box/mousetraps, - /obj/item/clothing/under/rank/chef, - /obj/item/clothing/head/chefhat, - /obj/item/clothing/suit/chef/classic, - /obj/item/storage/box/silverware, - /obj/item/clothing/mask/surgical, - /obj/item/clothing/gloves/latex - ) - -/obj/structure/closet/secure_closet/hydroponics_torch //done so that it has no access reqs - name = "hydroponics locker" - req_access = list() - closet_appearance = /decl/closet_appearance/secure_closet/torch/hydroponics - -/obj/structure/closet/secure_closet/hydroponics_torch/WillContain() - return list( - /obj/item/clothing/head/soft/green, - /obj/item/storage/plants, - /obj/item/device/scanner/plant, - /obj/item/material/minihoe, - /obj/item/material/hatchet, - /obj/item/wirecutters/clippers, - /obj/item/reagent_containers/spray/plantbgone, - new /datum/atom_creator/weighted(list(/obj/item/clothing/suit/apron, /obj/item/clothing/suit/apron/overalls)), - new /datum/atom_creator/weighted(list(/obj/item/storage/backpack/hydroponics, /obj/item/storage/backpack/satchel/hyd)) - ) - -/obj/structure/closet/jcloset_torch - name = "custodial closet" - desc = "It's a storage unit for janitorial equipment." - closet_appearance = /decl/closet_appearance/wardrobe/mixed - -/obj/structure/closet/jcloset_torch/WillContain() - return list( - /obj/item/clothing/head/soft/purple, - /obj/item/device/radio/headset/headset_service, - /obj/item/clothing/gloves/thick, - /obj/item/device/flashlight, - /obj/item/caution = 4, - /obj/item/device/lightreplacer, - /obj/item/storage/bag/trash, - /obj/item/clothing/shoes/galoshes, - /obj/item/storage/box/detergent, - /obj/item/soap, - /obj/item/storage/belt/janitor, - /obj/item/clothing/glasses/hud/janitor - ) - -/obj/structure/closet/secure_closet/bar_torch - name = "bar locker" - desc = "It's a storage unit for bar equipment." - req_access = list(access_kitchen) - -/obj/structure/closet/secure_closet/bar_torch/WillContain() - return list( - /obj/item/clothing/head/soft/black, - /obj/item/device/radio/headset/headset_service, - /obj/item/reagent_containers/food/drinks/shaker, - /obj/item/glass_jar, - /obj/item/book/manual/barman_recipes, - /obj/item/clothing/under/rank/bartender, - /obj/item/clothing/shoes/laceup - ) diff --git a/maps/torch/structures/closets/supply.dm b/maps/torch/structures/closets/supply.dm deleted file mode 100644 index 5b6368b36c2b8..0000000000000 --- a/maps/torch/structures/closets/supply.dm +++ /dev/null @@ -1,107 +0,0 @@ -/* - * Torch Supply - */ -/decl/closet_appearance/secure_closet/torch/cargo - extra_decals = list( - "stripe_vertical_mid_full" = COLOR_BEASTY_BROWN, - "cargo_upper" = COLOR_BEASTY_BROWN - ) - -/decl/closet_appearance/secure_closet/torch/cargo/worker - extra_decals = list( - "stripe_vertical_left_full" = COLOR_BEASTY_BROWN, - "stripe_vertical_right_full" = COLOR_BEASTY_BROWN, - "cargo_upper" = COLOR_BEASTY_BROWN - ) - -/decl/closet_appearance/secure_closet/torch/cargo/deck_officer - extra_decals = list( - "stripe_vertical_mid_full" = COLOR_CLOSET_GOLD, - "stripe_vertical_left_full" = COLOR_BEASTY_BROWN, - "stripe_vertical_right_full" = COLOR_BEASTY_BROWN, - "cargo_upper" = COLOR_CLOSET_GOLD - ) - -/obj/structure/closet/secure_closet/decktech - name = "deck technician's locker" - req_access = list(access_cargo) - closet_appearance = /decl/closet_appearance/secure_closet/torch/cargo/worker - -/obj/structure/closet/secure_closet/decktech/WillContain() - return list( - /obj/item/device/radio/headset/headset_cargo, - /obj/item/device/radio/headset/headset_cargo/alt, - /obj/item/clothing/gloves/thick, - /obj/item/clothing/suit/storage/hazardvest, - /obj/item/clothing/accessory/storage/webbing_large, - /obj/item/storage/belt/utility/atmostech, - /obj/item/hand_labeler, - /obj/item/material/clipboard, - /obj/item/folder/yellow, - /obj/item/stack/package_wrap/twenty_five, - /obj/item/marshalling_wand, - /obj/item/marshalling_wand, - /obj/item/storage/belt/general, - /obj/item/stamp/cargo, - /obj/item/stamp/denied, - /obj/item/storage/backpack/dufflebag - ) - -/obj/structure/closet/secure_closet/deckofficer - name = "deck chief's locker" - req_access = list(access_qm) - closet_appearance = /decl/closet_appearance/secure_closet/torch/cargo/deck_officer - -/obj/structure/closet/secure_closet/deckofficer/WillContain() - return list( - /obj/item/device/radio/headset/headset_deckofficer, - /obj/item/device/radio/headset/headset_deckofficer/alt, - /obj/item/clothing/gloves/thick, - /obj/item/clothing/glasses/meson, - /obj/item/clothing/glasses/sunglasses, - /obj/item/clothing/suit/storage/hazardvest, - /obj/item/clothing/accessory/storage/brown_vest, - /obj/item/storage/belt/utility/full, - /obj/item/hand_labeler, - /obj/item/material/clipboard, - /obj/item/folder/yellow, - /obj/item/stack/package_wrap/twenty_five, - /obj/item/device/flash, - //proxima code start, - /obj/item/device/remote_device/quartermaster, - /obj/item/storage/box/encryptionkey/supply, - //proxima code end, - /obj/item/device/megaphone, - /obj/item/device/holowarrant, - /obj/item/clothing/suit/armor/pcarrier/light/sol, - /obj/item/device/binoculars, - /obj/item/storage/belt/general, - /obj/item/storage/backpack/dufflebag - ) - -/obj/structure/closet/secure_closet/prospector - name = "prospector's locker" - req_access = list(access_mining) - closet_appearance = /decl/closet_appearance/secure_closet/torch/cargo - -/obj/structure/closet/secure_closet/prospector/WillContain() - return list( - /obj/item/clothing/accessory/storage/brown_vest, - /obj/item/clothing/mask/gas/half, - /obj/item/clothing/gloves/thick, - /obj/item/clothing/shoes/workboots, - /obj/item/device/radio/headset/headset_mining, - /obj/item/device/radio/headset/headset_mining/alt, - /obj/item/device/flashlight/lantern, - /obj/item/shovel, - /obj/item/pickaxe, - /obj/item/crowbar, - /obj/item/wrench, - /obj/item/storage/ore, - /obj/item/device/scanner/mining, - /obj/item/device/gps, - /obj/item/device/radio, - /obj/item/clothing/glasses/material, - /obj/item/clothing/glasses/meson, - /obj/item/storage/backpack/dufflebag/eng - ) diff --git a/maps/torch/structures/signs.dm b/maps/torch/structures/signs.dm deleted file mode 100644 index e6399e9fdfac6..0000000000000 --- a/maps/torch/structures/signs.dm +++ /dev/null @@ -1,99 +0,0 @@ -/obj/structure/sign/dedicationplaque - name = "\improper SEV Torch dedication plaque" - icon_state = "lightplaque" - -/obj/structure/sign/dedicationplaque/Initialize() - . = ..() - desc = "S.E.V. Torch - Mako Class - Sol Expeditionary Corps Registry 95519 - Shiva Fleet Yards, Mars - First Vessel To Bear The Name - Launched [GLOB.using_map.game_year - 5] - Sol Central Government - 'Never was anything great achieved without danger.'" - -/obj/structure/sign/ecplaque - name = "\improper Expeditionary Directives" - desc = "A plaque with Expeditionary Corps logo etched in it." - icon = 'maps/torch/icons/obj/solgov-decals.dmi' - icon_state = "ecplaque" - var/directives = {"


              - 1. Exploring the unknown is your Primary Mission
              - - You are to look for land and resources that can be used by Humanity to advance and prosper. Explore. Document. Explain. Knowledge is the most valuable resource.
              - - 2. Every member of the Expeditionary Corps is an explorer
              - - Some are Explorers by rank or position, but everyone has to be one when duty calls. You should always expect being assigned to an expedition if needed. You have already volunteered when you signed up.
              - - 3. Danger is a part of the mission - avoid, not run away
              - - Keep your crew alive and hull intact, but remember - you are not here to sightsee. Dangers are obstacles to be cleared, not the roadblocks. Weigh risks carefully and keep your Primary Mission in mind. -

              "} - -/obj/structure/sign/ecplaque/examine(mob/user) - . = ..() - to_chat(user, "The founding principles of EC are written there: Expeditionary Directives") - -/obj/structure/sign/ecplaque/CanUseTopic() - return STATUS_INTERACTIVE - -/obj/structure/sign/ecplaque/OnTopic(href, href_list) - if(href_list["show_info"]) - to_chat(usr, directives) - return TOPIC_HANDLED - -/obj/structure/sign/ecplaque/attackby(var/obj/I, var/mob/user) - if(istype(I, /obj/item/grab)) - var/obj/item/grab/G = I - if(!ishuman(G.affecting)) - return - G.affecting.apply_damage(5, DAMAGE_BRUTE, BP_HEAD, used_weapon="Metal Plaque") - visible_message("[G.assailant] smashes [G.assailant] into \the [src] face-first!") - playsound(get_turf(src), 'sound/weapons/tablehit1.ogg', 50) - to_chat(G.affecting, "[directives]") - admin_attack_log(user, G.affecting, "educated victim on \the [src].", "Was educated on \the [src].", "used \a [src] to educate") - G.force_drop() - else - ..() - -/obj/effect/floor_decal/scglogo - alpha = 230 - icon = 'maps/torch/icons/obj/solgov_floor.dmi' - icon_state = "center" - -/obj/structure/sign/solgov - name = "\improper SolGov Seal" - desc = "A sign which signifies who this vessel belongs to." - icon = 'maps/torch/icons/obj/solgov-decals.dmi' - icon_state = "solgovseal" - -/obj/structure/sign/double/solgovflag - name = "Sol Central Government Flag" - desc = "The flag of the Sol Central Government, a symbol of many things to many people." - icon = 'maps/torch/icons/obj/solgov-decals.dmi' - -/obj/structure/sign/double/solgovflag/left - icon_state = "solgovflag-left" - -/obj/structure/sign/double/solgovflag/right - icon_state = "solgovflag-right" - -/obj/structure/sign/memorial - name = "\improper memorial rock" - desc = "A large stone slab, engraved with the names of uniformed personnel who gave their lives for scientific progress. Not a list you'd want to make. Add the dog tags of the fallen to the monument to memorialize them. At the foot of the memorial, at some distance from the rest of the pile of tokens, there is one with the inscription scratched on a steel frame \"Mr. Poraz, our eternal cook and comrade\"." - icon = 'maps/torch/icons/obj/solgov-64x.dmi' - icon_state = "memorial" - density = TRUE - anchored = TRUE - pixel_x = -16 - pixel_y = -16 - unacidable = TRUE - var/list/fallen = list() - -/obj/structure/sign/memorial/attackby(var/obj/D, var/mob/user) - if(istype(D, /obj/item/clothing/accessory/badge/solgov/tags)) - var/obj/item/clothing/accessory/badge/solgov/tags/T = D - if(T.owner_branch in list("Expeditionary Corps", "Fleet")) - to_chat(user, "You add \the [T.owner_name]'s \the [T] to \the [src].") - fallen += "[T.owner_rank] [T.owner_name] | [T.owner_branch]" - qdel(T) - -/obj/structure/sign/memorial/examine(mob/user, distance) - . = ..() - if (distance <= 2 && fallen.len) - to_chat(user, "The fallen: [jointext(fallen, "
              ")]") diff --git a/maps/torch/torch.dm b/maps/torch/torch.dm deleted file mode 100644 index 020e1673968bf..0000000000000 --- a/maps/torch/torch.dm +++ /dev/null @@ -1,182 +0,0 @@ -#if !defined(using_map_DATUM) - - #include "torch_announcements.dm" - #include "torch_antagonism.dm" - #include "torch_areas.dm" - #include "torch_elevator.dm" - #include "torch_events.dm" - #include "torch_holodecks.dm" - #include "torch_lobby.dm" - #include "torch_machinery.dm" - #include "torch_map_templates.dm" - #include "torch_npcs.dm" - #include "torch_overmap.dm" - #include "torch_presets.dm" - #include "torch_procs.dm" - #include "torch_ranks.dm" - #include "torch_security_state.dm" - #include "torch_setup.dm" - #include "torch_shuttles.dm" - #include "torch_submaps.dm" - #include "torch_turfs.dm" - #include "torch_unit_testing.dm" - - #include "datums/uniforms.dm" - #include "datums/uniforms_expedition.dm" - #include "datums/uniforms_fleet.dm" - #include "datums/uniforms_army.dm" - #include "datums/game_modes/torch_traitor.dm" - #include "datums/game_modes/torch_revolution.dm" - #include "datums/game_modes/torch_siege.dm" - #include "datums/game_modes/torch_meteor.dm" - #include "datums/game_modes/torch_uprising.dm" - #include "datums/reports/command.dm" - #include "datums/reports/corporate.dm" - #include "datums/reports/exploration.dm" - #include "datums/reports/engineering.dm" - #include "datums/reports/medical.dm" - #include "datums/reports/science.dm" - #include "datums/reports/security.dm" - #include "datums/reports/solgov.dm" - #include "datums/reports/deck.dm" - #include "datums/shackle_law_sets.dm" - #include "datums/supplypacks/security.dm" - #include "datums/supplypacks/science.dm" - #include "datums/department_exploration.dm" - - #include "game/antagonist/outsider/deathsquad.dm" - #include "game/antagonist/outsider/ert.dm" - #include "game/antagonist/outsider/foundation.dm" - #include "game/antagonist/outsider/mercenary.dm" - #include "game/antagonist/outsider/raider.dm" - - #include "items/cards_ids.dm" - #include "items/encryption_keys.dm" - #include "items/headsets.dm" - #include "items/items.dm" - #include "items/machinery.dm" - #include "items/manuals.dm" - #include "items/stamps.dm" - #include "items/uniform_vendor.dm" - #include "items/rigs.dm" - #include "items/solbanner.dm" - #include "items/explo_shotgun.dm" - #include "items/mecha.dm" - #include "items/memos.dm" - - #include "../../packs/faction_iccgn/_pack.dm" - - #include "items/clothing/ec_skillbadges.dm" - #include "items/clothing/solgov-accessory.dm" - #include "items/clothing/solgov-armor.dm" - #include "items/clothing/solgov-feet.dm" - #include "items/clothing/solgov-hands.dm" - #include "items/clothing/solgov-head.dm" - #include "items/clothing/solgov-suit.dm" - #include "items/clothing/solgov-under.dm" - - #include "items/weapon/storage/wallets.dm" - - #include "job/torch_access.dm" - #include "job/torch_jobs.dm" - #include "job/command_jobs.dm" - #include "job/corporate_jobs.dm" - #include "job/engineering_jobs.dm" - #include "job/exploration_jobs.dm" - #include "job/medical_jobs.dm" - #include "job/misc_jobs.dm" - #include "job/research_jobs.dm" - #include "job/security_jobs.dm" - #include "job/service_jobs.dm" - #include "job/supply_jobs.dm" - - #include "job/outfits/torch_outfits.dm" - #include "job/outfits/command_outfits.dm" - #include "job/outfits/corporate_outfits.dm" - #include "job/outfits/engineering_outfits.dm" - #include "job/outfits/exploration_outfits.dm" - #include "job/outfits/medical_outfits.dm" - #include "job/outfits/misc_outfits.dm" - #include "job/outfits/research_outfits.dm" - #include "job/outfits/security_outfits.dm" - #include "job/outfits/service_outfits.dm" - #include "job/outfits/supply_outfits.dm" - #include "job/outfits/unused_outfits.dm" - - #include "language/human/euro.dm" - #include "language/human/misc/spacer.dm" - - #include "machinery/apc_shuttle.dm" - #include "machinery/keycard authentication.dm" - #include "machinery/suit_storage.dm" - - #include "outfits/scgec.dm" - - #include "robot/module_flying_surveyor.dm" - - #include "structures/signs.dm" - #include "structures/closets.dm" - #include "structures/closets/closet_appearances.dm" - #include "structures/closets/command.dm" - #include "structures/closets/engineering.dm" - #include "structures/closets/medical.dm" - #include "structures/closets/misc.dm" - #include "structures/closets/research.dm" - #include "structures/closets/security.dm" - #include "structures/closets/services.dm" - #include "structures/closets/supply.dm" - #include "structures/closets/exploration.dm" - - #include "loadout/_defines.dm" - #include "loadout/loadout_accessories.dm" - #include "loadout/loadout_ec_skillbadges.dm" - #include "loadout/loadout_eyes.dm" - #include "loadout/loadout_gloves.dm" - #include "loadout/loadout_head.dm" - #include "loadout/loadout_shoes.dm" - #include "loadout/loadout_suit.dm" - #include "loadout/loadout_uniform.dm" - #include "loadout/loadout_xeno.dm" - #include "loadout/~defines.dm" - - #include "torch1_deck5.dmm" - #include "torch2_deck4.dmm" - #include "torch3_deck3.dmm" - #include "torch4_deck2.dmm" - #include "torch5_deck1.dmm" - #include "torch6_bridge.dmm" - #include "z1_admin.dmm" - #include "z2_transit.dmm" - - #include "../away/empty.dmm" - #include "../away/mining/mining.dm" - #include "../away/derelict/derelict.dm" - #include "../away/bearcat/bearcat.dm" - #include "../away/lost_supply_base/lost_supply_base.dm" - #include "../away/smugglers/smugglers.dm" - #include "../away/magshield/magshield.dm" - #include "../away/casino/casino.dm" - #include "../away/yacht/yacht.dm" - #include "../away/venera/venera.dm" - #include "../away/blueriver/blueriver.dm" - #include "../away/slavers/slavers_base.dm" - #include "../away/mobius_rift/mobius_rift.dm" - #include "../away/errant_pisces/errant_pisces.dm" - #include "../away/lar_maria/lar_maria.dm" - #include "../away/voxship/voxship.dm" - #include "../away/skrellscoutship/skrellscoutship.dm" - #include "../away/meatstation/meatstation.dm" - #include "../away/miningstation/miningstation.dm" - #include "../away/mininghome/mininghome.dm" - #include "../away/scavver/scavver_gantry.dm" - - #include "../event/iccgn_ship/icgnv_hound.dm" - - - #define using_map_DATUM /datum/map/torch - -#elif !defined(MAP_OVERRIDE) - - #warn A map has already been included, ignoring Torch - -#endif diff --git a/maps/torch/torch1_deck5.dmm b/maps/torch/torch1_deck5.dmm deleted file mode 100644 index 52b0174e4225b..0000000000000 --- a/maps/torch/torch1_deck5.dmm +++ /dev/null @@ -1,57918 +0,0 @@ -//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE -"aa" = ( -/turf/space, -/area/space) -"ab" = ( -/obj/effect/landmark, -/turf/space, -/area/space) -"ac" = ( -/obj/structure/table/steel, -/obj/item/pen/fancy, -/turf/simulated/floor/lino, -/area/command/pilot) -"ad" = ( -/obj/machinery/atmospherics/portables_connector, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/structure/extinguisher_cabinet{ - pixel_x = 32 - }, -/obj/machinery/light{ - dir = 1 - }, -/turf/simulated/floor/tiled/white/monotile, -/area/shuttle/petrov/toxins) -"ae" = ( -/obj/machinery/atmospherics/binary/pump{ - dir = 4; - name = "Heat Exchanger Input" - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/paint/silver, -/turf/simulated/wall/titanium, -/area/shuttle/petrov/toxins) -"af" = ( -/obj/machinery/atmospherics/binary/pump{ - dir = 4; - name = "Exterior Vent" - }, -/obj/effect/paint/silver, -/turf/simulated/wall/titanium, -/area/shuttle/petrov/toxins) -"ag" = ( -/obj/effect/paint/hull, -/turf/simulated/wall/titanium, -/area/exploration_shuttle/cockpit) -"ah" = ( -/obj/machinery/computer/modular/preset/supply_public, -/obj/effect/floor_decal/corner/purple/half{ - dir = 1 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/shuttle/petrov/control) -"ai" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden, -/obj/machinery/door/airlock/external{ - frequency = 1380; - icon_state = "closed"; - id_tag = "petrov_shuttle_dock_inner"; - name = "Docking Port Airlock" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/maintenance/fifthdeck/aftstarboard) -"aj" = ( -/obj/machinery/atmospherics/binary/pump{ - dir = 8; - name = "Heat Exchanger Output" - }, -/obj/effect/paint/silver, -/turf/simulated/wall/ocp_wall, -/area/shuttle/petrov/toxins) -"al" = ( -/obj/structure/disposalpipe/segment, -/obj/structure/cable{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/aftstarboard) -"am" = ( -/obj/machinery/suit_storage_unit/mining, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/light, -/turf/simulated/floor/tiled/monotile, -/area/quartermaster/expedition/eva) -"an" = ( -/turf/simulated/wall/r_wall/hull, -/area/maintenance/fifthdeck/fore) -"ap" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 4 - }, -/obj/machinery/atmospherics/binary/pump{ - dir = 8; - name = "Chamber Output" - }, -/obj/structure/disposalpipe/segment{ - dir = 8; - icon_state = "pipe-c" - }, -/turf/simulated/floor/tiled/white, -/area/shuttle/petrov/toxins) -"aq" = ( -/obj/machinery/atmospherics/pipe/simple/heat_exchanging/junction, -/obj/machinery/light/spot{ - dir = 1 - }, -/turf/simulated/floor/reinforced/airless, -/area/shuttle/petrov/toxins) -"ar" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, -/obj/structure/disposalpipe/segment{ - dir = 4; - icon_state = "pipe-c" - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/cyan{ - dir = 6 - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/fore) -"as" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/cyan{ - dir = 1 - }, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/fore) -"at" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/railing/mapped{ - dir = 4; - icon_state = "railing0-1" - }, -/obj/structure/railing/mapped{ - dir = 1; - icon_state = "railing0-1" - }, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/aftstarboard) -"au" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/obj/effect/floor_decal/corner/brown{ - dir = 5 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/fifthdeck/fore) -"av" = ( -/obj/item/stool/bar, -/turf/simulated/floor/wood/walnut{ - icon_state = "walnut_broken3" - }, -/area/vacant/bar) -"aw" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/door/firedoor, -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/door/airlock/maintenance, -/turf/simulated/floor/tiled/techfloor/grid, -/area/maintenance/fifthdeck/aftstarboard) -"ax" = ( -/obj/machinery/atmospherics/pipe/simple/visible{ - dir = 4 - }, -/obj/machinery/portable_atmospherics/powered/pump, -/turf/simulated/floor/tiled/white/monotile, -/area/shuttle/petrov/toxins) -"ay" = ( -/obj/machinery/atmospherics/pipe/simple/visible{ - dir = 4 - }, -/obj/structure/table/standard, -/obj/random/tool, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/item/storage/toolbox/mechanical, -/turf/simulated/floor/tiled/white/monotile, -/area/shuttle/petrov/toxins) -"az" = ( -/obj/machinery/atmospherics/pipe/simple/heat_exchanging, -/obj/machinery/air_sensor{ - id_tag = "toxins_sensor" - }, -/turf/simulated/floor/reinforced/airless, -/area/shuttle/petrov/toxins) -"aA" = ( -/obj/effect/wallframe_spawn/reinforced/titanium, -/obj/machinery/door/blast/regular/open{ - density = 0; - icon_state = "pdoor0"; - id_tag = "charon_shutters"; - name = "Protective Shutters"; - opacity = 0 - }, -/obj/effect/paint/hull, -/turf/simulated/floor/plating, -/area/exploration_shuttle/cockpit) -"aB" = ( -/obj/effect/wallframe_spawn/reinforced/titanium, -/obj/machinery/door/blast/regular/open{ - density = 0; - icon_state = "pdoor0"; - id_tag = "charon_shutters"; - name = "Protective Shutters"; - opacity = 0 - }, -/obj/effect/paint/hull, -/turf/simulated/floor/plating, -/area/exploration_shuttle/crew) -"aC" = ( -/obj/structure/disposalpipe/segment, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/aftport) -"aD" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/wall/prepainted, -/area/maintenance/fifthdeck/aftstarboard) -"aE" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 4; - level = 2 - }, -/turf/simulated/floor/tiled/monotile, -/area/quartermaster/expedition) -"aF" = ( -/turf/simulated/floor/tiled/monotile, -/area/hallway/primary/fifthdeck/fore) -"aG" = ( -/obj/machinery/computer/modular/preset/civilian{ - dir = 8; - icon_state = "console" - }, -/obj/machinery/light_switch{ - pixel_x = -10; - pixel_y = -21 - }, -/obj/machinery/button/windowtint{ - id = "rcheckinner_windows"; - pixel_x = 10; - pixel_y = -21 - }, -/turf/simulated/floor/tiled/dark, -/area/shuttle/petrov/control) -"aH" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/aftstarboard) -"aI" = ( -/obj/effect/floor_decal/corner/mauve{ - dir = 10 - }, -/obj/machinery/light, -/turf/simulated/floor/tiled, -/area/hallway/primary/fifthdeck/fore) -"aJ" = ( -/turf/simulated/wall/prepainted, -/area/quartermaster/hangar) -"aK" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/door/firedoor, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/door/airlock/maintenance, -/turf/simulated/floor/tiled/techfloor/grid, -/area/maintenance/fifthdeck/aftstarboard) -"aL" = ( -/obj/structure/catwalk, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/cyan{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/fore) -"aM" = ( -/turf/simulated/floor/plating, -/area/vacant/infirmary) -"aN" = ( -/obj/effect/floor_decal/corner/brown/half, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 1 - }, -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/monotile, -/area/hallway/primary/fifthdeck/aft) -"aO" = ( -/obj/structure/disposalpipe/segment, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/catwalk, -/obj/machinery/atmospherics/pipe/simple/hidden/cyan{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/fore) -"aP" = ( -/obj/effect/paint/hull, -/turf/simulated/wall/titanium, -/area/exploration_shuttle/crew) -"aQ" = ( -/obj/effect/floor_decal/industrial/warning, -/obj/machinery/atmospherics/pipe/simple/hidden/universal{ - dir = 4 - }, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 1 - }, -/turf/simulated/floor/tiled/dark, -/area/quartermaster/expedition/atmos) -"aR" = ( -/obj/machinery/computer/ship/helm{ - req_access = list(list("ACCESS_EXPLO_HELM")) - }, -/obj/machinery/atmospherics/unary/vent_pump/on, -/obj/machinery/light{ - dir = 8 - }, -/turf/simulated/floor/tiled/monotile, -/area/exploration_shuttle/cockpit) -"aS" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/fifthdeck/aft) -"aT" = ( -/obj/structure/sign/warning/airlock{ - dir = 8 - }, -/turf/simulated/wall/r_wall/hull, -/area/maintenance/fifthdeck/aftstarboard) -"aU" = ( -/obj/machinery/artifact_scanpad, -/obj/effect/floor_decal/industrial/hatch/yellow, -/obj/machinery/newscaster{ - pixel_y = 32 - }, -/turf/simulated/floor/tiled/white/monotile, -/area/shuttle/petrov/analysis) -"aV" = ( -/obj/effect/wallframe_spawn/reinforced_phoron/titanium, -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/simple/visible{ - dir = 4 - }, -/obj/machinery/meter, -/obj/effect/paint/silver, -/obj/machinery/door/blast/regular{ - density = 0; - dir = 4; - icon_state = "pdoor0"; - id_tag = "toxins_shutters"; - name = "Mixing Chamber Blast Shutters"; - opacity = 0 - }, -/turf/simulated/floor/reinforced/airless, -/area/shuttle/petrov/toxins) -"aW" = ( -/turf/simulated/wall/prepainted, -/area/maintenance/fifthdeck/aftstarboard) -"aX" = ( -/obj/effect/catwalk_plated, -/turf/simulated/floor/plating, -/area/quartermaster/hangar) -"aY" = ( -/obj/effect/paint/red, -/turf/simulated/wall/titanium, -/area/guppy_hangar/start) -"aZ" = ( -/obj/machinery/atmospherics/unary/engine, -/obj/structure/window/reinforced, -/turf/simulated/floor/plating, -/area/guppy_hangar/start) -"ba" = ( -/obj/effect/paint/red, -/obj/structure/sign/warning/hot_exhaust{ - dir = 1 - }, -/turf/simulated/wall/titanium, -/area/guppy_hangar/start) -"bb" = ( -/obj/effect/paint/silver, -/turf/simulated/wall/titanium, -/area/shuttle/petrov/analysis) -"bc" = ( -/obj/effect/paint/silver, -/turf/simulated/wall/titanium, -/area/shuttle/petrov/eva) -"bd" = ( -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/space_heater, -/turf/simulated/floor/tiled/dark, -/area/quartermaster/expedition/atmos) -"be" = ( -/obj/effect/wallframe_spawn/reinforced_phoron/titanium, -/obj/machinery/door/firedoor, -/obj/effect/paint/silver, -/obj/machinery/door/blast/regular{ - density = 0; - dir = 4; - icon_state = "pdoor0"; - id_tag = "toxins_shutters"; - name = "Mixing Chamber Blast Shutters"; - opacity = 0 - }, -/turf/simulated/floor/reinforced/airless, -/area/shuttle/petrov/toxins) -"bf" = ( -/obj/machinery/computer/shuttle_control/explore/exploration_shuttle, -/turf/simulated/floor/tiled/monotile, -/area/exploration_shuttle/cockpit) -"bg" = ( -/obj/effect/paint/hull, -/obj/effect/wallframe_spawn/reinforced/titanium, -/obj/machinery/door/firedoor, -/turf/simulated/floor/plating, -/area/exploration_shuttle/cockpit) -"bh" = ( -/obj/effect/floor_decal/corner/green{ - dir = 5 - }, -/obj/structure/bed/chair/shuttle/blue, -/turf/simulated/floor/tiled, -/area/exploration_shuttle/crew) -"bi" = ( -/turf/simulated/floor/plating, -/area/quartermaster/hangar) -"bj" = ( -/obj/effect/floor_decal/corner/green{ - dir = 5 - }, -/obj/structure/bed/chair/shuttle/blue, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, -/turf/simulated/floor/tiled, -/area/exploration_shuttle/crew) -"bk" = ( -/obj/structure/bed/chair/shuttle/blue, -/obj/effect/floor_decal/corner/green{ - dir = 5 - }, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 8 - }, -/turf/simulated/floor/tiled, -/area/exploration_shuttle/crew) -"bl" = ( -/obj/machinery/atmospherics/omni/mixer{ - tag_east = 2; - tag_north = 1; - tag_north_con = 0.33; - tag_south = 1; - tag_south_con = 0.33; - tag_west = 1; - tag_west_con = 0.34 - }, -/obj/machinery/button/ignition{ - id_tag = "toxlab"; - pixel_w = 6; - pixel_z = -23 - }, -/turf/simulated/floor/tiled/white/monotile, -/area/shuttle/petrov/toxins) -"bm" = ( -/obj/effect/floor_decal/corner/green{ - dir = 5 - }, -/obj/structure/bed/chair/shuttle/blue, -/obj/machinery/power/apc/shuttle/charon{ - dir = 4; - pixel_x = 24 - }, -/obj/structure/cable/cyan{ - d2 = 2; - icon_state = "0-2" - }, -/turf/simulated/floor/tiled, -/area/exploration_shuttle/crew) -"bn" = ( -/obj/machinery/atmospherics/binary/pump{ - dir = 4; - name = "Chamber Input" - }, -/obj/machinery/button/blast_door{ - id_tag = "toxin_exhaust"; - name = "Chamber Vent"; - pixel_w = 8; - pixel_y = -24 - }, -/obj/machinery/button/blast_door{ - id_tag = "toxins_shutters"; - name = "Chamber Protective Shutters"; - pixel_w = -5; - pixel_z = -24 - }, -/turf/simulated/floor/tiled/white/monotile, -/area/shuttle/petrov/toxins) -"bo" = ( -/obj/effect/wallframe_spawn/reinforced/titanium, -/obj/machinery/door/blast/regular/open{ - density = 0; - dir = 4; - icon_state = "pdoor0"; - id_tag = "charon_shutters"; - name = "Protective Shutters"; - opacity = 0 - }, -/obj/effect/paint/hull, -/turf/simulated/floor/plating, -/area/exploration_shuttle/cockpit) -"bp" = ( -/obj/machinery/atmospherics/valve/shutoff/supply, -/obj/structure/railing/mapped{ - dir = 4; - icon_state = "railing0-1" - }, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/aftstarboard) -"bq" = ( -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/mining/brace{ - dir = 4 - }, -/obj/machinery/power/apc{ - dir = 8; - name = "west bump"; - pixel_x = -24 - }, -/obj/structure/cable/green{ - d2 = 2; - icon_state = "0-2" - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/quartermaster/expedition/storage) -"br" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/fuel, -/obj/structure/cable/green{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/turf/simulated/floor/tiled/techfloor, -/area/guppy_hangar/start) -"bs" = ( -/obj/machinery/atmospherics/unary/outlet_injector{ - dir = 8; - frequency = 1441; - id = "toxins_in" - }, -/obj/machinery/atmospherics/pipe/simple/heat_exchanging{ - dir = 5 - }, -/obj/machinery/sparker{ - id_tag = "toxlab"; - pixel_w = 1; - pixel_z = -23 - }, -/turf/simulated/floor/reinforced/airless, -/area/shuttle/petrov/toxins) -"bt" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/effect/floor_decal/techfloor{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden{ - dir = 8 - }, -/obj/machinery/airlock_sensor{ - frequency = 1380; - id_tag = "petrov_shuttle_dock_sensor"; - pixel_x = -24 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/maintenance/fifthdeck/aftstarboard) -"bu" = ( -/obj/effect/paint/silver, -/turf/simulated/wall/titanium, -/area/shuttle/petrov/maint) -"bv" = ( -/obj/machinery/computer/ship/engines{ - dir = 4 - }, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 4 - }, -/obj/item/device/radio/intercom/hailing{ - pixel_y = 22 - }, -/turf/simulated/floor/tiled/monotile, -/area/exploration_shuttle/cockpit) -"bw" = ( -/obj/structure/bed/chair/shuttle/blue{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/obj/structure/cable/cyan{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/turf/simulated/floor/tiled, -/area/exploration_shuttle/cockpit) -"bx" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/button/blast_door{ - id_tag = "charon_shutters"; - name = "Protective Shutters Control"; - pixel_y = -36; - pixel_x = 1 - }, -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled, -/area/exploration_shuttle/cockpit) -"by" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/door/airlock/glass{ - name = "Cockpit" - }, -/turf/simulated/floor/tiled/steel_ridged, -/area/exploration_shuttle/cockpit) -"bz" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled, -/area/exploration_shuttle/crew) -"bA" = ( -/obj/structure/cable/cyan{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable/cyan{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/turf/simulated/floor/tiled, -/area/exploration_shuttle/crew) -"bB" = ( -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled, -/area/exploration_shuttle/crew) -"bC" = ( -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/turf/simulated/floor/tiled, -/area/exploration_shuttle/crew) -"bE" = ( -/obj/machinery/computer/air_control{ - dir = 8; - name = "Atmospheric Sensors"; - sensor_tag = "charon_out" - }, -/obj/machinery/camera/network/exploration_shuttle{ - c_tag = "Charon - Crew Compartment" - }, -/turf/simulated/floor/tiled/monotile, -/area/exploration_shuttle/crew) -"bF" = ( -/obj/effect/wallframe_spawn/reinforced/titanium, -/obj/machinery/door/blast/regular/open{ - density = 0; - dir = 4; - icon_state = "pdoor0"; - id_tag = "charon_shutters"; - name = "Protective Shutters"; - opacity = 0 - }, -/obj/effect/paint/hull, -/obj/effect/paint/hull, -/turf/simulated/floor/plating, -/area/exploration_shuttle/crew) -"bG" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/fuel{ - dir = 5 - }, -/obj/machinery/portable_atmospherics/canister/carbon_dioxide/engine_setup{ - start_pressure = 7498.00 - }, -/obj/machinery/atmospherics/portables_connector, -/obj/effect/floor_decal/industrial/outline/orange, -/turf/simulated/floor/tiled/techfloor, -/area/guppy_hangar/start) -"bH" = ( -/obj/machinery/atmospherics/pipe/simple/visible/fuel{ - dir = 5 - }, -/turf/simulated/floor/tiled/techfloor, -/area/guppy_hangar/start) -"bI" = ( -/obj/machinery/atmospherics/valve/open{ - dir = 4; - name = "fuel valve"; - open = 0 - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/effect/floor_decal/techfloor{ - dir = 9 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/guppy_hangar/start) -"bJ" = ( -/obj/structure/cable/cyan{ - d2 = 2; - icon_state = "0-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/fuel{ - dir = 9 - }, -/obj/machinery/power/terminal{ - dir = 1 - }, -/obj/effect/floor_decal/techfloor{ - dir = 5 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/guppy_hangar/start) -"bK" = ( -/obj/machinery/atmospherics/valve/open{ - name = "air supply valve"; - open = 0 - }, -/obj/machinery/airlock_sensor{ - frequency = 1431; - id_tag = "guppy_shuttle_interior_sensor"; - pixel_x = 24 - }, -/turf/simulated/floor/tiled/techfloor, -/area/guppy_hangar/start) -"bL" = ( -/obj/effect/catwalk_plated, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/turf/simulated/floor/plating, -/area/quartermaster/hangar) -"bM" = ( -/obj/structure/disposalpipe/segment{ - dir = 1; - icon_state = "pipe-c" - }, -/obj/structure/cable{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/aftstarboard) -"bN" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/effect/wallframe_spawn/no_grille, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/aftstarboard) -"bP" = ( -/obj/effect/paint/silver, -/turf/simulated/wall/titanium, -/area/shuttle/petrov/control) -"bQ" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/door/airlock/external{ - frequency = 1380; - icon_state = "closed"; - id_tag = "petrov_shuttle_outer"; - name = "Petrov Exterior Access" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/shuttle/petrov/maint) -"bS" = ( -/obj/machinery/shipsensors, -/turf/simulated/floor/plating, -/area/exploration_shuttle/cockpit) -"bT" = ( -/obj/machinery/computer/ship/sensors{ - dir = 4 - }, -/obj/machinery/alarm{ - dir = 1; - pixel_y = -22; - req_access = list("ACCESS_TORCH_CREW") - }, -/turf/simulated/floor/tiled/monotile, -/area/exploration_shuttle/cockpit) -"bU" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/cyan{ - dir = 4 - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/fore) -"bV" = ( -/obj/machinery/hologram/holopad/longrange, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/structure/cable/cyan, -/obj/machinery/camera/network/exploration_shuttle{ - c_tag = "Charon - Cockpit"; - dir = 1 - }, -/obj/machinery/power/apc/shuttle/charon{ - name = "south bump"; - pixel_y = -28 - }, -/turf/simulated/floor/tiled/monotile, -/area/exploration_shuttle/cockpit) -"bW" = ( -/obj/machinery/firealarm{ - dir = 1; - pixel_y = -24 - }, -/obj/structure/table/steel_reinforced, -/obj/machinery/dummy_airlock_controller{ - id_tag = "charon_shuttle" - }, -/turf/simulated/floor/tiled/monotile, -/area/exploration_shuttle/cockpit) -"bY" = ( -/obj/machinery/light{ - dir = 8 - }, -/obj/effect/floor_decal/corner/green{ - dir = 10 - }, -/turf/simulated/floor/tiled/monotile, -/area/exploration_shuttle/crew) -"bZ" = ( -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/effect/floor_decal/corner/green{ - dir = 10 - }, -/turf/simulated/floor/tiled/monotile, -/area/exploration_shuttle/crew) -"ca" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 8 - }, -/obj/structure/bed/chair/shuttle/blue{ - dir = 1 - }, -/obj/machinery/firealarm{ - dir = 1; - pixel_y = -24 - }, -/turf/simulated/floor/tiled, -/area/exploration_shuttle/crew) -"cb" = ( -/obj/machinery/computer/ship/navigation/telescreen{ - pixel_y = -32 - }, -/turf/simulated/floor/tiled, -/area/exploration_shuttle/crew) -"cc" = ( -/obj/machinery/alarm{ - dir = 1; - pixel_y = -22; - req_access = list("ACCESS_TORCH_CREW") - }, -/turf/simulated/floor/tiled, -/area/exploration_shuttle/crew) -"cd" = ( -/obj/structure/disposalpipe/segment{ - dir = 4; - icon_state = "pipe-c" - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/fore) -"ce" = ( -/turf/simulated/wall/prepainted, -/area/quartermaster/expedition/storage) -"cf" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 4; - icon_state = "warning" - }, -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/monotile, -/area/quartermaster/hangar) -"cg" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/guppy{ - id_tag = "guppy_shuttle_pump_out_scrubber"; - power_rating = 15000; - scrubbing = "siphon" - }, -/obj/structure/handrail{ - dir = 4 - }, -/obj/machinery/light{ - dir = 8 - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/effect/floor_decal/techfloor{ - dir = 8 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/guppy_hangar/start) -"ch" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 4 - }, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/effect/floor_decal/techfloor{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/guppy_hangar/start) -"ci" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden{ - dir = 4 - }, -/obj/effect/floor_decal/industrial/warning/corner, -/turf/simulated/floor/tiled/techfloor, -/area/guppy_hangar/start) -"cj" = ( -/obj/effect/paint/hull, -/turf/simulated/wall/titanium, -/area/guppy_hangar/start) -"cl" = ( -/obj/machinery/light, -/obj/machinery/computer/modular/preset/medical{ - dir = 8 - }, -/turf/simulated/floor/tiled/monotile, -/area/exploration_shuttle/crew) -"cm" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/multi_tile/glass, -/turf/simulated/floor/tiled/steel_ridged, -/area/exploration_shuttle/crew) -"cn" = ( -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/door/firedoor, -/turf/simulated/floor/tiled/steel_ridged, -/area/exploration_shuttle/crew) -"cq" = ( -/obj/effect/wallframe_spawn/reinforced/titanium, -/obj/machinery/door/blast/regular/open{ - density = 0; - dir = 4; - icon_state = "pdoor0"; - id_tag = "charon_shutters"; - name = "Protective Shutters"; - opacity = 0 - }, -/obj/effect/paint/hull, -/turf/simulated/floor/plating, -/area/exploration_shuttle/medical) -"cr" = ( -/obj/machinery/cryopod{ - dir = 2 - }, -/turf/simulated/floor/tiled/monotile, -/area/exploration_shuttle/medical) -"cs" = ( -/obj/structure/bed/chair/shuttle/blue, -/obj/machinery/computer/cryopod{ - pixel_y = 25 - }, -/turf/simulated/floor/tiled/monotile, -/area/exploration_shuttle/medical) -"ct" = ( -/obj/structure/sign/directions/engineering{ - dir = 1; - pixel_y = 3 - }, -/obj/structure/sign/directions/evac{ - dir = 1; - pixel_y = -4 - }, -/turf/simulated/wall/prepainted, -/area/hallway/primary/fifthdeck/fore) -"cu" = ( -/obj/machinery/sleeper, -/obj/machinery/light{ - dir = 1 - }, -/turf/simulated/floor/tiled/monotile, -/area/exploration_shuttle/medical) -"cv" = ( -/obj/structure/closet/medical_wall/filled{ - pixel_x = 32 - }, -/obj/random/firstaid, -/obj/random/medical, -/obj/random/medical, -/obj/random/medical, -/obj/random/medical, -/obj/random/medical, -/obj/random/medical, -/obj/structure/table/steel_reinforced, -/obj/item/bodybag/cryobag, -/obj/machinery/camera/network/exploration_shuttle{ - c_tag = "Charon - Medical Compartment" - }, -/obj/machinery/firealarm{ - pixel_y = 24 - }, -/turf/simulated/floor/tiled/monotile, -/area/exploration_shuttle/medical) -"cw" = ( -/obj/effect/paint/hull, -/turf/simulated/wall/titanium, -/area/exploration_shuttle/medical) -"cy" = ( -/obj/effect/floor_decal/industrial/warning/corner, -/turf/simulated/floor/tiled/monotile, -/area/quartermaster/hangar) -"cA" = ( -/obj/machinery/atmospherics/unary/vent_pump/high_volume/guppy{ - dir = 8; - id_tag = "guppy_shuttle_pump_out_internal" - }, -/obj/effect/overmap/visitable/ship/landable/guppy, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/effect/floor_decal/techfloor{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/guppy_hangar/start) -"cB" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/visible/cyan, -/turf/simulated/wall/prepainted, -/area/maintenance/fifthdeck/fore) -"cD" = ( -/obj/effect/floor_decal/corner/green{ - dir = 5 - }, -/obj/structure/cable/cyan{ - d2 = 4; - icon_state = "0-4" - }, -/obj/machinery/power/apc/shuttle/charon{ - dir = 8; - pixel_x = -24 - }, -/turf/simulated/floor/tiled/monotile, -/area/exploration_shuttle/cargo) -"cE" = ( -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/effect/floor_decal/corner/green{ - dir = 5 - }, -/obj/structure/cable/cyan{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/turf/simulated/floor/tiled/monotile, -/area/exploration_shuttle/cargo) -"cF" = ( -/obj/machinery/atmospherics/pipe/manifold4w/hidden, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/effect/floor_decal/techfloor{ - dir = 8 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/guppy_hangar/start) -"cG" = ( -/obj/machinery/atmospherics/unary/vent_pump/high_volume/guppy{ - dir = 8; - id_tag = "guppy_shuttle_pump_out_internal" - }, -/obj/effect/shuttle_landmark/torch/hangar/guppy, -/obj/effect/floor_decal/techfloor{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/guppy_hangar/start) -"cH" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 1 - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor, -/area/guppy_hangar/start) -"cI" = ( -/obj/machinery/mech_recharger, -/obj/effect/floor_decal/industrial/warning/fulltile, -/turf/simulated/floor/tiled/monotile, -/area/exploration_shuttle/cargo) -"cJ" = ( -/obj/machinery/light/spot{ - dir = 1 - }, -/obj/structure/table/steel, -/turf/simulated/floor/tiled/monotile, -/area/exploration_shuttle/cargo) -"cK" = ( -/obj/machinery/button/blast_door{ - id_tag = "charon_shutters"; - name = "Protective Shutters Control"; - pixel_y = 25 - }, -/obj/structure/handrail, -/turf/simulated/floor/tiled/monotile, -/area/exploration_shuttle/cargo) -"cL" = ( -/obj/machinery/conveyor_switch/oneway{ - id = "cargobay"; - name = "mining conveyor" - }, -/obj/machinery/alarm{ - pixel_y = 24; - req_access = list("ACCESS_TORCH_CREW") - }, -/turf/simulated/floor/tiled/monotile, -/area/exploration_shuttle/cargo) -"cM" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 8 - }, -/obj/machinery/conveyor{ - id = "cargobay" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/exploration_shuttle/cargo) -"cN" = ( -/obj/effect/wallframe_spawn/reinforced/titanium, -/obj/machinery/door/blast/regular/open{ - density = 0; - dir = 4; - icon_state = "pdoor0"; - id_tag = "charon_shutters"; - name = "Protective Shutters"; - opacity = 0 - }, -/obj/effect/paint/hull, -/turf/simulated/floor/plating, -/area/exploration_shuttle/cargo) -"cO" = ( -/turf/simulated/floor/tiled/monotile, -/area/exploration_shuttle/medical) -"cP" = ( -/turf/simulated/floor/tiled, -/area/exploration_shuttle/medical) -"cQ" = ( -/obj/machinery/atmospherics/unary/vent_pump/on, -/turf/simulated/floor/tiled, -/area/exploration_shuttle/medical) -"cR" = ( -/obj/structure/bed/padded, -/obj/item/device/radio/intercom{ - dir = 8; - pixel_x = 21 - }, -/turf/simulated/floor/tiled, -/area/exploration_shuttle/medical) -"cS" = ( -/obj/machinery/firealarm{ - dir = 8; - pixel_x = -24 - }, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 4 - }, -/obj/structure/handrail{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/exploration_shuttle/cargo) -"cT" = ( -/obj/machinery/hologram/holopad/longrange, -/obj/machinery/atmospherics/pipe/simple/hidden, -/obj/structure/handrail{ - dir = 4 - }, -/obj/machinery/light{ - dir = 8 - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/effect/floor_decal/techfloor{ - dir = 8 - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled/techfloor/grid, -/area/guppy_hangar/start) -"cU" = ( -/obj/machinery/tele_beacon, -/obj/effect/floor_decal/techfloor{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/guppy_hangar/start) -"cV" = ( -/obj/random/tech_supply, -/obj/random/tech_supply, -/obj/random/tech_supply, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/structure/closet/crate/secure/shuttle{ - dir = 8; - req_access = list("ACCESS_TORCH_GUP") - }, -/obj/random_multi/single_item/boombox, -/obj/item/device/radio, -/obj/item/device/radio, -/obj/machinery/embedded_controller/radio/airlock/tin_can{ - dir = 8; - frequency = 1431; - id_tag = "guppy_shuttle"; - pixel_x = 24 - }, -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 4; - icon_state = "warningcorner" - }, -/turf/simulated/floor/tiled/techfloor, -/area/guppy_hangar/start) -"cW" = ( -/obj/machinery/suit_storage_unit/science, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/alarm{ - dir = 4; - pixel_x = -22 - }, -/turf/simulated/floor/tiled/monotile, -/area/quartermaster/expedition/eva) -"cY" = ( -/obj/structure/cable/green{ - d2 = 4; - icon_state = "0-4" - }, -/obj/machinery/power/apc{ - dir = 8; - name = "west bump"; - pixel_x = -24 - }, -/turf/simulated/floor/tiled, -/area/quartermaster/expedition/eva) -"cZ" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/fore) -"da" = ( -/turf/simulated/wall/r_wall/hull, -/area/hallway/primary/fifthdeck/aft) -"db" = ( -/obj/structure/stairs/west, -/obj/structure/railing/mapped, -/turf/simulated/floor/tiled/monotile, -/area/hallway/primary/fifthdeck/fore) -"dc" = ( -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 4 - }, -/obj/effect/floor_decal/industrial/warning/corner, -/turf/simulated/floor/tiled, -/area/exploration_shuttle/cargo) -"dd" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 8 - }, -/obj/effect/floor_decal/industrial/warning, -/turf/simulated/floor/tiled, -/area/exploration_shuttle/cargo) -"de" = ( -/obj/effect/floor_decal/industrial/warning, -/turf/simulated/floor/tiled/monotile, -/area/exploration_shuttle/cargo) -"df" = ( -/obj/effect/floor_decal/industrial/warning, -/obj/effect/floor_decal/industrial/loading{ - dir = 4 - }, -/turf/simulated/floor/tiled/monotile, -/area/exploration_shuttle/cargo) -"dg" = ( -/obj/structure/table/rack, -/obj/item/storage/belt/utility/full, -/obj/item/storage/box/glowsticks, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled/monotile, -/area/exploration_shuttle/medical) -"dh" = ( -/obj/machinery/hologram/holopad/longrange, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, -/turf/simulated/floor/tiled/monotile, -/area/exploration_shuttle/medical) -"di" = ( -/obj/structure/cable/cyan{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/effect/floor_decal/corner/blue{ - dir = 6 - }, -/turf/simulated/floor/tiled, -/area/exploration_shuttle/medical) -"dj" = ( -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/door/airlock/glass{ - name = "Medical Compartment" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/door/firedoor, -/turf/simulated/floor/tiled/steel_ridged, -/area/exploration_shuttle/medical) -"dk" = ( -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/effect/floor_decal/corner/blue{ - dir = 9 - }, -/turf/simulated/floor/tiled, -/area/exploration_shuttle/cargo) -"dl" = ( -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/cable/cyan{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/machinery/tele_beacon, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 4 - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/exploration_shuttle/cargo) -"dm" = ( -/obj/effect/floor_decal/techfloor{ - dir = 9 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/exploration_shuttle/cargo) -"dn" = ( -/obj/machinery/optable, -/obj/item/reagent_containers/spray/sterilizine, -/turf/simulated/floor/tiled/white, -/area/vacant/infirmary) -"do" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/guppy{ - dir = 1; - id_tag = "guppy_shuttle_pump_out_scrubber"; - power_rating = 15000; - scrubbing = "siphon" - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/effect/floor_decal/techfloor{ - dir = 8 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/guppy_hangar/start) -"dp" = ( -/obj/effect/floor_decal/techfloor{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/guppy_hangar/start) -"du" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 1; - icon_state = "warning" - }, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/aftstarboard) -"dv" = ( -/obj/effect/floor_decal/techfloor{ - dir = 1 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/exploration_shuttle/cargo) -"dw" = ( -/obj/effect/floor_decal/techfloor{ - dir = 5 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/exploration_shuttle/cargo) -"dx" = ( -/obj/structure/table/rack, -/obj/item/device/radio, -/obj/item/device/radio, -/obj/item/device/radio, -/obj/item/device/spaceflare, -/obj/item/device/spaceflare, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled/monotile, -/area/exploration_shuttle/medical) -"dy" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 1 - }, -/turf/simulated/floor/tiled, -/area/exploration_shuttle/medical) -"dz" = ( -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled, -/area/exploration_shuttle/medical) -"dA" = ( -/turf/simulated/floor/tiled, -/area/exploration_shuttle/cargo) -"dB" = ( -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/effect/floor_decal/industrial/warning{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/exploration_shuttle/cargo) -"dD" = ( -/obj/effect/floor_decal/techfloor{ - dir = 8 - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled/techfloor/grid, -/area/exploration_shuttle/cargo) -"dE" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/effect/floor_decal/techfloor{ - dir = 10 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/guppy_hangar/start) -"dF" = ( -/obj/structure/bed/chair/shuttle/blue, -/obj/effect/floor_decal/techfloor{ - dir = 6 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/guppy_hangar/start) -"dG" = ( -/obj/machinery/computer/ship/engines{ - dir = 8 - }, -/obj/machinery/button/blast_door{ - id_tag = "guppy_window"; - name = "Window Shutter Control"; - pixel_x = 24; - pixel_y = -8; - req_access = list("ACCESS_TORCH_GUP") - }, -/obj/machinery/button/blast_door{ - id_tag = "guppy_hatch"; - name = "Rear Hatch Control"; - pixel_x = 24; - pixel_y = 8; - req_access = list("ACCESS_TORCH_GUP") - }, -/obj/item/device/radio/intercom/hailing{ - dir = 1; - pixel_y = -28 - }, -/turf/simulated/floor/tiled/techfloor, -/area/guppy_hangar/start) -"dJ" = ( -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled/techfloor/grid, -/area/exploration_shuttle/cargo) -"dK" = ( -/obj/effect/floor_decal/techfloor{ - dir = 4 - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled/techfloor/grid, -/area/exploration_shuttle/cargo) -"dL" = ( -/obj/machinery/disposal/deliveryChute{ - dir = 1 - }, -/obj/structure/disposalpipe/trunk{ - dir = 4 - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 8 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/exploration_shuttle/cargo) -"dM" = ( -/obj/machinery/computer/ship/helm{ - dir = 1; - req_access = list(list("ACCESS_TORCH_GUP_HELM")) - }, -/turf/simulated/floor/tiled/techfloor, -/area/guppy_hangar/start) -"dN" = ( -/obj/machinery/computer/shuttle_control/explore/guppy{ - dir = 1 - }, -/turf/simulated/floor/tiled/techfloor, -/area/guppy_hangar/start) -"dP" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/railing/mapped{ - dir = 8; - icon_state = "railing0-1" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/aftstarboard) -"dR" = ( -/turf/simulated/wall/r_wall/prepainted, -/area/hallway/primary/fifthdeck/aft) -"dT" = ( -/obj/effect/wallframe_spawn/reinforced/titanium, -/obj/structure/disposalpipe/segment{ - dir = 2; - icon_state = "pipe-c" - }, -/obj/machinery/door/blast/regular/open{ - density = 0; - dir = 4; - icon_state = "pdoor0"; - id_tag = "charon_shutters"; - name = "Protective Shutters"; - opacity = 0 - }, -/obj/effect/paint/hull, -/turf/simulated/floor/plating, -/area/exploration_shuttle/cargo) -"dU" = ( -/obj/structure/table/steel_reinforced, -/obj/structure/closet/secure_closet/explo_gun{ - pixel_x = -32 - }, -/obj/machinery/recharger, -/turf/simulated/floor/tiled/monotile, -/area/exploration_shuttle/medical) -"dV" = ( -/obj/machinery/light, -/obj/structure/table/steel_reinforced, -/obj/machinery/recharger, -/turf/simulated/floor/tiled/monotile, -/area/exploration_shuttle/medical) -"dW" = ( -/obj/structure/cable/cyan, -/obj/structure/table/steel_reinforced, -/obj/machinery/alarm{ - dir = 8; - pixel_x = 24; - req_access = list("ACCESS_TORCH_CREW") - }, -/obj/machinery/power/apc/shuttle/charon{ - name = "south bump"; - pixel_y = -28 - }, -/turf/simulated/floor/tiled/monotile, -/area/exploration_shuttle/medical) -"dY" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 4; - level = 2 - }, -/obj/effect/shuttle_landmark/torch/hangar/exploration_shuttle, -/obj/effect/overmap/visitable/ship/landable/exploration_shuttle, -/turf/simulated/floor/tiled/monotile, -/area/exploration_shuttle/cargo) -"dZ" = ( -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 4 - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 4 - }, -/turf/simulated/floor/tiled/monotile, -/area/exploration_shuttle/cargo) -"ea" = ( -/obj/effect/floor_decal/techfloor{ - dir = 10 - }, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 8 - }, -/obj/structure/handrail{ - dir = 1 - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled/techfloor/grid, -/area/exploration_shuttle/cargo) -"eb" = ( -/obj/effect/floor_decal/techfloor, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/light/spot, -/turf/simulated/floor/tiled/techfloor/grid, -/area/exploration_shuttle/cargo) -"ec" = ( -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/railing/mapped, -/obj/machinery/atmospherics/valve/shutoff/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/aftstarboard) -"ed" = ( -/obj/effect/floor_decal/techfloor, -/obj/effect/floor_decal/techfloor, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/structure/closet/firecloset, -/obj/machinery/camera/network/exploration_shuttle{ - c_tag = "Charon - Cargo Compartment"; - dir = 1 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/exploration_shuttle/cargo) -"ee" = ( -/obj/effect/floor_decal/industrial/warning, -/turf/simulated/floor/tiled/monotile, -/area/quartermaster/hangar) -"ef" = ( -/obj/effect/wallframe_spawn/reinforced/titanium, -/obj/effect/paint/hull, -/obj/machinery/door/blast/regular{ - id_tag = "guppy_window"; - name = "blast shield" - }, -/turf/simulated/floor/plating, -/area/guppy_hangar/start) -"eg" = ( -/obj/effect/floor_decal/techfloor{ - dir = 6 - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/floodlight, -/turf/simulated/floor/tiled/techfloor/grid, -/area/exploration_shuttle/cargo) -"eh" = ( -/obj/effect/paint/hull, -/turf/simulated/wall/titanium, -/area/exploration_shuttle/cargo) -"ei" = ( -/obj/structure/disposalpipe/segment, -/obj/effect/paint/hull, -/turf/simulated/wall/titanium, -/area/exploration_shuttle/cargo) -"ek" = ( -/obj/machinery/oxygen_pump{ - pixel_y = 32 - }, -/obj/structure/handrail, -/obj/effect/floor_decal/industrial/warning{ - dir = 8; - icon_state = "warning" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/exploration_shuttle/airlock) -"el" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/multi_tile/glass, -/turf/simulated/floor/tiled/steel_ridged, -/area/exploration_shuttle/cargo) -"em" = ( -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/door/firedoor, -/turf/simulated/floor/tiled/steel_ridged, -/area/exploration_shuttle/cargo) -"en" = ( -/obj/structure/disposalpipe/trunk{ - dir = 1 - }, -/obj/structure/disposaloutlet, -/obj/effect/floor_decal/industrial/warning/fulltile, -/turf/simulated/floor/tiled/monotile, -/area/exploration_shuttle/cargo) -"eo" = ( -/obj/machinery/atmospherics/portables_connector{ - dir = 1 - }, -/obj/machinery/portable_atmospherics/canister/air/airlock, -/obj/structure/sign/warning/compressed_gas{ - dir = 4; - pixel_x = -32 - }, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/fifthdeck/aftstarboard) -"eq" = ( -/obj/machinery/atmospherics/unary/vent_pump/high_volume/shuttle{ - id_tag = "charon_shuttle_pump_out_external" - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 8; - icon_state = "warning" - }, -/obj/machinery/access_button/airlock_exterior{ - frequency = 1331; - master_tag = "charon_shuttle"; - pixel_x = 20; - pixel_y = 20 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/exploration_shuttle/airlock) -"er" = ( -/turf/simulated/wall/prepainted, -/area/vacant/infirmary) -"es" = ( -/obj/machinery/door/blast/regular/open{ - density = 0; - dir = 4; - icon_state = "pdoor0"; - id_tag = "charon_shutters"; - name = "Protective Shutters"; - opacity = 0 - }, -/obj/effect/wallframe_spawn/reinforced/titanium, -/obj/effect/paint/hull, -/turf/simulated/floor/plating, -/area/exploration_shuttle/airlock) -"et" = ( -/obj/machinery/atmospherics/unary/vent_pump/high_volume/shuttle{ - id_tag = "charon_shuttle_pump_out_internal" - }, -/obj/structure/handrail, -/obj/machinery/oxygen_pump{ - pixel_y = 32 - }, -/obj/effect/floor_decal/techfloor{ - dir = 1 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/exploration_shuttle/airlock) -"eu" = ( -/turf/simulated/wall/prepainted, -/area/quartermaster/exploration) -"ev" = ( -/obj/effect/catwalk_plated, -/obj/machinery/light/spot{ - dir = 8 - }, -/obj/machinery/firealarm{ - dir = 8; - pixel_x = -24 - }, -/turf/simulated/floor/plating, -/area/quartermaster/hangar) -"ew" = ( -/obj/machinery/embedded_controller/radio/airlock/docking_port{ - cycle_to_external_air = 1; - frequency = 1331; - id_tag = "charon_shuttle"; - pixel_y = 24; - req_access = list("ACCESS_TORCH_CREW"); - tag_exterior_sensor = "charon_shuttle_sensor_external" - }, -/obj/machinery/light/small{ - dir = 1 - }, -/obj/structure/handrail, -/obj/machinery/atmospherics/unary/vent_pump/high_volume/shuttle{ - id_tag = "charon_shuttle_pump" - }, -/obj/effect/floor_decal/techfloor{ - dir = 1 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/exploration_shuttle/airlock) -"ey" = ( -/obj/machinery/atmospherics/unary/vent_pump/high_volume/shuttle{ - id_tag = "charon_shuttle_pump" - }, -/obj/machinery/airlock_sensor{ - frequency = 1331; - id_tag = "charon_shuttle_sensor"; - pixel_y = 24 - }, -/obj/structure/handrail, -/obj/effect/floor_decal/techfloor{ - dir = 1 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/exploration_shuttle/airlock) -"ez" = ( -/obj/effect/wallframe_spawn/reinforced/titanium, -/obj/effect/paint/hull, -/turf/simulated/floor/plating, -/area/exploration_shuttle/airlock) -"eA" = ( -/turf/simulated/floor/tiled/monotile, -/area/exploration_shuttle/airlock) -"eB" = ( -/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{ - dir = 1; - id_tag = "petrov_shuttle_dock_pump" - }, -/obj/effect/floor_decal/techfloor, -/obj/machinery/light/small, -/turf/simulated/floor/tiled/techfloor/grid, -/area/hallway/primary/fifthdeck/aft) -"eC" = ( -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/handrail{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/power/apc/shuttle/charon{ - dir = 4 - }, -/obj/structure/cable/cyan, -/turf/simulated/floor/tiled/monotile, -/area/exploration_shuttle/airlock) -"eE" = ( -/obj/effect/paint/hull, -/turf/simulated/wall/titanium, -/area/exploration_shuttle/airlock) -"eF" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/obj/structure/table/steel_reinforced, -/obj/machinery/power/apc/shuttle/charon{ - dir = 1; - name = "north bump"; - pixel_y = 24 - }, -/obj/structure/cable/cyan{ - d2 = 2; - icon_state = "0-2" - }, -/obj/random_multi/single_item/boombox, -/obj/machinery/cell_charger, -/obj/machinery/light_switch{ - dir = 4; - pixel_x = -22; - pixel_y = -10 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/exploration_shuttle/power) -"eH" = ( -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 8 - }, -/turf/simulated/floor/tiled/monotile, -/area/quartermaster/hangar) -"eK" = ( -/obj/structure/cable/cyan{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 4; - icon_state = "warning" - }, -/obj/machinery/firealarm{ - pixel_y = 24 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/exploration_shuttle/power) -"eM" = ( -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 4; - icon_state = "warningcorner" - }, -/obj/machinery/button/blast_door{ - id_tag = "hanger_atmos_storage"; - name = "Atmospheric Storage Door Control"; - pixel_x = 6; - pixel_y = 24 - }, -/turf/simulated/floor/tiled/monotile, -/area/quartermaster/hangar) -"eN" = ( -/obj/structure/railing/mapped, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/fore) -"eQ" = ( -/obj/machinery/power/smes/buildable/preset/torch/shuttle{ - RCon_tag = "Shuttle - Charon" - }, -/obj/effect/floor_decal/industrial/hatch/yellow, -/obj/structure/cable/cyan{ - d2 = 8; - icon_state = "0-8" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/exploration_shuttle/power) -"eS" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 4; - icon_state = "warning" - }, -/turf/simulated/floor/tiled/monotile, -/area/quartermaster/exploration) -"eT" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 8 - }, -/turf/simulated/floor/tiled/monotile, -/area/quartermaster/hangar) -"eU" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 4; - icon_state = "warning" - }, -/obj/machinery/floodlight, -/turf/simulated/floor/tiled/monotile, -/area/quartermaster/hangar) -"eV" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 8 - }, -/obj/machinery/floodlight, -/turf/simulated/floor/tiled/monotile, -/area/quartermaster/hangar) -"eW" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 4; - level = 2 - }, -/turf/simulated/floor/lino, -/area/shuttle/petrov/rd) -"eX" = ( -/obj/effect/wallframe_spawn/reinforced/titanium, -/obj/machinery/door/blast/regular/open{ - density = 0; - dir = 4; - icon_state = "pdoor0"; - id_tag = "charon_shutters"; - name = "Protective Shutters"; - opacity = 0 - }, -/obj/effect/paint/hull, -/turf/simulated/floor/plating, -/area/exploration_shuttle/power) -"eY" = ( -/obj/effect/floor_decal/industrial/warning/fulltile, -/turf/simulated/floor/tiled/monotile, -/area/exploration_shuttle/power) -"eZ" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden{ - dir = 8 - }, -/obj/machinery/air_sensor{ - id_tag = "charon_out" - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 8; - icon_state = "warning" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/exploration_shuttle/airlock) -"fa" = ( -/obj/machinery/door/airlock/external{ - autoset_access = 0; - frequency = 1331; - id_tag = "charon_shuttle_outer"; - name = "Charon External Access" - }, -/obj/machinery/shield_diffuser, -/obj/machinery/atmospherics/pipe/simple/visible{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/exploration_shuttle/airlock) -"fb" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/exploration_shuttle/airlock) -"fd" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden{ - dir = 8 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/exploration_shuttle/airlock) -"fe" = ( -/obj/machinery/atmospherics/pipe/manifold4w/hidden, -/turf/simulated/floor/tiled/techfloor/grid, -/area/exploration_shuttle/airlock) -"ff" = ( -/obj/machinery/door/airlock/external{ - autoset_access = 0; - frequency = 1331; - id_tag = "charon_shuttle_inner"; - name = "Charon External Access" - }, -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/exploration_shuttle/airlock) -"fi" = ( -/obj/machinery/atmospherics/valve/shutoff/scrubbers, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/aftstarboard) -"fj" = ( -/obj/effect/catwalk_plated, -/obj/structure/cable/green{ - d2 = 2; - icon_state = "0-2" - }, -/obj/machinery/power/apc{ - dir = 4; - name = "east bump"; - pixel_x = 24 - }, -/turf/simulated/floor/plating, -/area/quartermaster/hangar) -"fl" = ( -/turf/simulated/wall/prepainted, -/area/hallway/primary/fifthdeck/fore) -"fm" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/universal{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/exploration_shuttle/airlock) -"fn" = ( -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 8 - }, -/obj/structure/cable/cyan{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/effect/floor_decal/corner/yellow{ - dir = 6 - }, -/obj/machinery/access_button/airlock_interior{ - frequency = 1331; - master_tag = "charon_shuttle"; - pixel_x = 21; - pixel_y = 21 - }, -/turf/simulated/floor/tiled, -/area/exploration_shuttle/airlock) -"fo" = ( -/obj/machinery/door/airlock/hatch, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/door/firedoor, -/turf/simulated/floor/tiled/steel_ridged, -/area/exploration_shuttle/airlock) -"fp" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/exploration_shuttle/power) -"fq" = ( -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 4 - }, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/exploration_shuttle/power) -"fr" = ( -/obj/machinery/power/terminal{ - dir = 1 - }, -/obj/structure/cable/cyan{ - d2 = 4; - icon_state = "0-4" - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 1; - icon_state = "warning" - }, -/obj/structure/cable/yellow{ - d2 = 2; - icon_state = "0-2" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/exploration_shuttle/power) -"fu" = ( -/obj/effect/wallframe_spawn/reinforced/titanium, -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/door/blast/regular/open{ - density = 0; - dir = 4; - icon_state = "pdoor0"; - id_tag = "charon_shutters"; - name = "Protective Shutters"; - opacity = 0 - }, -/obj/effect/paint/hull, -/turf/simulated/floor/plating, -/area/exploration_shuttle/power) -"fx" = ( -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/floor_decal/industrial/warning/fulltile, -/turf/simulated/floor/tiled/monotile, -/area/exploration_shuttle/power) -"fy" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 8 - }, -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/monotile, -/area/quartermaster/hangar) -"fz" = ( -/turf/simulated/wall/walnut, -/area/vacant/bar) -"fB" = ( -/obj/effect/catwalk_plated, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/plating, -/area/quartermaster/hangar) -"fD" = ( -/obj/machinery/atmospherics/pipe/manifold/visible/blue{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/shuttle/petrov/isolation) -"fE" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled/white/monotile, -/area/shuttle/petrov/isolation) -"fF" = ( -/obj/effect/paint/red, -/turf/simulated/wall/titanium, -/area/shuttle/petrov/isolation) -"fG" = ( -/obj/machinery/atmospherics/binary/pump, -/obj/structure/handrail{ - dir = 8 - }, -/turf/simulated/floor/tiled/white/monotile, -/area/shuttle/petrov/isolation) -"fH" = ( -/obj/item/stool, -/turf/simulated/floor/tiled, -/area/quartermaster/exploration) -"fI" = ( -/obj/machinery/atmospherics/unary/vent_pump/high_volume/shuttle{ - dir = 1; - id_tag = "charon_shuttle_pump_out_external" - }, -/obj/machinery/airlock_sensor{ - frequency = 1331; - id_tag = "charon_shuttle_sensor_external"; - pixel_x = 25; - pixel_y = -25 - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 8; - icon_state = "warning" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/exploration_shuttle/airlock) -"fJ" = ( -/obj/machinery/atmospherics/unary/vent_pump/high_volume/shuttle{ - dir = 1; - id_tag = "charon_shuttle_pump_out_internal" - }, -/obj/structure/handrail{ - dir = 1 - }, -/obj/machinery/oxygen_pump{ - pixel_y = -32 - }, -/obj/effect/floor_decal/techfloor, -/obj/machinery/firealarm{ - dir = 1; - pixel_y = -26 - }, -/obj/machinery/camera/network/exploration_shuttle{ - c_tag = "Charon - Airlock Compartment"; - dir = 1 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/exploration_shuttle/airlock) -"fK" = ( -/obj/machinery/light/small, -/obj/structure/handrail{ - dir = 1 - }, -/obj/machinery/atmospherics/unary/vent_pump/high_volume/shuttle{ - dir = 1; - id_tag = "charon_shuttle_pump" - }, -/obj/effect/floor_decal/techfloor, -/turf/simulated/floor/tiled/techfloor/grid, -/area/exploration_shuttle/airlock) -"fL" = ( -/obj/machinery/atmospherics/unary/vent_pump/high_volume/shuttle{ - dir = 1; - id_tag = "charon_shuttle_pump" - }, -/obj/structure/handrail{ - dir = 1 - }, -/obj/effect/floor_decal/techfloor, -/obj/item/device/radio/intercom/hailing{ - dir = 1; - pixel_y = -28 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/exploration_shuttle/airlock) -"fM" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/exploration_shuttle/airlock) -"fN" = ( -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/handrail{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/firealarm{ - dir = 4; - pixel_x = 26 - }, -/turf/simulated/floor/tiled, -/area/exploration_shuttle/airlock) -"fO" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 1; - level = 2 - }, -/obj/machinery/light, -/obj/machinery/alarm{ - dir = 4; - pixel_x = -21; - req_access = list("ACCESS_TORCH_CREW") - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/exploration_shuttle/power) -"fP" = ( -/obj/machinery/recharge_station, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled/techfloor/grid, -/area/exploration_shuttle/power) -"fQ" = ( -/obj/machinery/power/port_gen/pacman{ - anchored = 1 - }, -/obj/effect/floor_decal/industrial/hatch/yellow, -/obj/structure/cable/yellow, -/obj/machinery/camera/network/exploration_shuttle{ - c_tag = "Charon - Power Compartment"; - dir = 1 - }, -/obj/item/stack/material/phoron/ten, -/turf/simulated/floor/tiled/techfloor/grid, -/area/exploration_shuttle/power) -"fR" = ( -/obj/structure/handrail{ - dir = 1 - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 8; - icon_state = "warning" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/exploration_shuttle/airlock) -"fS" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 1; - icon_state = "warning" - }, -/turf/simulated/floor/tiled/monotile, -/area/quartermaster/hangar) -"fT" = ( -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 1; - icon_state = "warningcorner" - }, -/turf/simulated/floor/tiled/monotile, -/area/quartermaster/hangar) -"fU" = ( -/obj/structure/closet/emcloset, -/obj/effect/floor_decal/corner/brown/half{ - dir = 1 - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled/monotile, -/area/hallway/primary/fifthdeck/aft) -"fW" = ( -) -"fX" = ( -/turf/simulated/floor/tiled/techfloor, -/area/quartermaster/hangar) -"fY" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/mining{ - id_tag = "hangarexit"; - name = "Hangar Bay" - }, -/turf/simulated/floor/tiled/steel_ridged, -/area/quartermaster/hangar) -"fZ" = ( -/obj/effect/paint/hull, -/turf/simulated/wall/titanium, -/area/exploration_shuttle/atmos) -"gb" = ( -/obj/machinery/light{ - dir = 8 - }, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/exploration_shuttle/airlock) -"gc" = ( -/obj/effect/shuttle_landmark/supply/station, -/turf/simulated/floor/plating, -/area/quartermaster/hangar) -"gd" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 4 - }, -/obj/machinery/atmospherics/unary/vent_pump/on, -/turf/simulated/floor/tiled/dark, -/area/quartermaster/expedition/storage) -"ge" = ( -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/structure/closet/secure_closet/scientist_torch, -/obj/machinery/light{ - dir = 1 - }, -/turf/simulated/floor/tiled/white/monotile, -/area/shuttle/petrov/hallwaya) -"gg" = ( -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 4 - }, -/obj/structure/sign/ecplaque{ - pixel_x = 30 - }, -/turf/simulated/floor/tiled, -/area/exploration_shuttle/airlock) -"gi" = ( -/obj/effect/paint/hull, -/turf/simulated/wall/titanium, -/area/exploration_shuttle/fuel) -"gj" = ( -/obj/effect/floor_decal/industrial/warning/fulltile, -/turf/simulated/floor/tiled/monotile, -/area/exploration_shuttle/fuel) -"gk" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/cyan{ - dir = 6 - }, -/obj/machinery/meter, -/turf/simulated/floor/tiled/techfloor, -/area/exploration_shuttle/atmos) -"gl" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/universal{ - dir = 4 - }, -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 4 - }, -/obj/machinery/alarm{ - pixel_y = 24; - req_access = list("ACCESS_TORCH_CREW") - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/exploration_shuttle/atmos) -"gm" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/fuel{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 1 - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, -/obj/structure/cable/cyan{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/machinery/light{ - dir = 1 - }, -/obj/machinery/light_switch{ - pixel_x = 10; - pixel_y = 22 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/exploration_shuttle/atmos) -"go" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/fuel{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/door/airlock/hatch, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/door/firedoor, -/turf/simulated/floor/tiled/steel_ridged, -/area/exploration_shuttle/atmos) -"gp" = ( -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/mining/drill, -/turf/simulated/floor/tiled/dark/monotile, -/area/quartermaster/expedition/storage) -"gq" = ( -/obj/structure/stairs/east, -/turf/simulated/floor/tiled/monotile, -/area/quartermaster/storage) -"gr" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/fuel{ - dir = 4 - }, -/obj/machinery/power/smes/buildable/preset/torch/shuttle{ - RCon_tag = "Shuttle - Guppy" - }, -/obj/effect/floor_decal/industrial/hatch/yellow, -/obj/structure/cable/green{ - d2 = 8; - icon_state = "0-8" - }, -/turf/simulated/floor/tiled/techfloor, -/area/guppy_hangar/start) -"gs" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/sign/warning/compressed_gas, -/turf/simulated/wall/prepainted, -/area/maintenance/fifthdeck/fore) -"gt" = ( -/obj/machinery/computer/modular/preset/civilian{ - dir = 4; - icon_state = "console" - }, -/obj/machinery/power/apc{ - dir = 8; - name = "west bump"; - pixel_x = -24 - }, -/obj/structure/cable/cyan{ - d2 = 4; - icon_state = "0-4" - }, -/turf/simulated/floor/tiled/white, -/area/shuttle/petrov/rnd) -"gv" = ( -/obj/effect/floor_decal/corner/brown{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/fifthdeck/fore) -"gw" = ( -/obj/machinery/light/spot{ - dir = 1 - }, -/obj/machinery/atmospherics/unary/vent_pump/on, -/turf/simulated/floor/tiled/monotile, -/area/quartermaster/hangar) -"gx" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/fuel{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/floor_decal/corner/paleblue{ - dir = 9 - }, -/turf/simulated/floor/tiled/monotile, -/area/exploration_shuttle/airlock) -"gy" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/fuel{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/effect/floor_decal/corner/orange{ - dir = 6 - }, -/turf/simulated/floor/tiled/monotile, -/area/exploration_shuttle/airlock) -"gz" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/fuel{ - dir = 4 - }, -/obj/machinery/door/airlock/hatch, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/door/firedoor, -/turf/simulated/floor/tiled/steel_ridged, -/area/exploration_shuttle/fuel) -"gB" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/catwalk, -/obj/machinery/alarm{ - pixel_y = 23; - req_access = list(list("ACCESS_ENGINE_EQUIP","ACCESS_ATMOS")) - }, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/fore) -"gC" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/monotile, -/area/hallway/primary/fifthdeck/aft) -"gD" = ( -/obj/structure/railing/mapped, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/disposalpipe/segment{ - dir = 8; - icon_state = "pipe-c" - }, -/turf/simulated/floor/tiled/monotile, -/area/quartermaster/storage) -"gE" = ( -/turf/simulated/floor/tiled, -/area/quartermaster/expedition) -"gF" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 4; - level = 2 - }, -/turf/simulated/floor/tiled, -/area/quartermaster/expedition/eva) -"gG" = ( -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/wall/prepainted, -/area/maintenance/fifthdeck/fore) -"gH" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 5 - }, -/turf/simulated/floor/tiled/monotile, -/area/hallway/primary/fifthdeck/aft) -"gI" = ( -/turf/simulated/wall/prepainted, -/area/maintenance/fifthdeck/aftport) -"gK" = ( -/obj/effect/catwalk_plated, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/plating, -/area/hallway/primary/fifthdeck/fore) -"gM" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/mining{ - name = "Expedition Storage" - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/cyan, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/tiled/steel_ridged, -/area/quartermaster/expedition/atmos) -"gO" = ( -/turf/simulated/wall/prepainted, -/area/quartermaster/shuttlefuel) -"gP" = ( -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/floodlight, -/obj/machinery/camera/network/supply{ - c_tag = "Supply Office - Warehouse Aft"; - dir = 1 - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 8 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/quartermaster/storage) -"gT" = ( -/obj/effect/floor_decal/industrial/outline/grey, -/obj/machinery/floodlight, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/fifthdeck/aftstarboard) -"gU" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/fore) -"gY" = ( -/obj/effect/paint/hull, -/obj/structure/sign/solgov, -/turf/simulated/wall/titanium, -/area/exploration_shuttle/cockpit) -"gZ" = ( -/obj/effect/wallframe_spawn/reinforced_phoron/titanium, -/obj/effect/paint/silver, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/reinforced, -/area/shuttle/petrov/cell2) -"ha" = ( -/obj/effect/wallframe_spawn/reinforced_phoron/titanium, -/obj/effect/paint/silver, -/turf/simulated/floor/reinforced, -/area/shuttle/petrov/cell2) -"hb" = ( -/obj/structure/catwalk, -/obj/machinery/alarm{ - dir = 1; - pixel_y = -24 - }, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/aftstarboard) -"hc" = ( -/obj/machinery/portable_atmospherics/canister/sleeping_agent, -/obj/structure/sign/warning/nosmoking_1{ - dir = 4; - pixel_x = -32 - }, -/obj/machinery/light/small{ - dir = 1 - }, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/floor/tiled/techfloor, -/area/rnd/canister) -"hd" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/fuel{ - dir = 1 - }, -/obj/structure/cable/cyan{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/machinery/light{ - dir = 1 - }, -/obj/machinery/light_switch{ - pixel_x = -10; - pixel_y = 22 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/exploration_shuttle/fuel) -"he" = ( -/obj/machinery/atmospherics/binary/pump{ - dir = 8 - }, -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 1 - }, -/obj/machinery/alarm{ - pixel_y = 24; - req_access = list("ACCESS_TORCH_CREW") - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/exploration_shuttle/fuel) -"hf" = ( -/obj/structure/sign/warning/nosmoking_1{ - dir = 8; - pixel_x = 32 - }, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/aftstarboard) -"hg" = ( -/obj/machinery/power/apc{ - dir = 1; - name = "north bump"; - pixel_y = 24 - }, -/obj/structure/cable/green{ - d2 = 2; - icon_state = "0-2" - }, -/obj/random_multi/single_item/poppy, -/turf/simulated/floor/tiled/techfloor, -/area/rnd/canister) -"hh" = ( -/obj/machinery/door/firedoor, -/obj/effect/floor_decal/industrial/hatch/yellow, -/turf/simulated/floor/tiled/monotile, -/area/hallway/primary/fifthdeck/fore) -"hi" = ( -/obj/structure/ladder/up, -/obj/effect/floor_decal/industrial/hatch/yellow, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/fifthdeck/aftstarboard) -"hj" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden, -/turf/simulated/wall/prepainted, -/area/hallway/primary/fifthdeck/aft) -"hk" = ( -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/mining/brace{ - dir = 8 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/quartermaster/expedition/storage) -"hl" = ( -/obj/effect/wallframe_spawn/no_grille, -/turf/simulated/floor/plating, -/area/quartermaster/exploration) -"hm" = ( -/obj/structure/closet/secure_closet/pilot, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/structure/sign/ecplaque{ - pixel_y = 30 - }, -/obj/item/material/hatchet/machete, -/turf/simulated/floor/tiled/dark/monotile, -/area/command/pilot) -"hn" = ( -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/suspension_gen, -/turf/simulated/floor/tiled/dark/monotile, -/area/quartermaster/expedition/storage) -"ho" = ( -/obj/random/junk, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/aftstarboard) -"hp" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/aftstarboard) -"hq" = ( -/turf/simulated/floor/tiled, -/area/quartermaster/expedition/eva) -"hs" = ( -/obj/machinery/portable_atmospherics/canister/carbon_dioxide/engine_setup{ - start_pressure = 7498.00 - }, -/obj/machinery/atmospherics/portables_connector{ - dir = 8 - }, -/obj/effect/floor_decal/industrial/outline/orange, -/turf/simulated/floor/tiled/techfloor, -/area/exploration_shuttle/fuel) -"ht" = ( -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/structure/closet/crate, -/obj/random_multi/single_item/boombox, -/turf/simulated/floor/tiled/dark/monotile, -/area/quartermaster/storage) -"hu" = ( -/obj/structure/railing/mapped, -/turf/simulated/floor/tiled/monotile, -/area/hallway/primary/fifthdeck/fore) -"hv" = ( -/obj/effect/floor_decal/corner/brown/half{ - dir = 1 - }, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/tiled/monotile, -/area/hallway/primary/fifthdeck/fore) -"hw" = ( -/obj/effect/floor_decal/corner/mauve{ - dir = 5 - }, -/turf/simulated/floor/tiled, -/area/quartermaster/exploration) -"hx" = ( -/obj/machinery/firealarm{ - pixel_y = 24 - }, -/obj/effect/floor_decal/corner/mauve/mono, -/obj/structure/closet/secure_closet/explorer, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/item/material/hatchet/machete, -/turf/simulated/floor/tiled/monotile, -/area/quartermaster/exploration) -"hy" = ( -/obj/machinery/status_display/supply_display, -/turf/simulated/wall/prepainted, -/area/quartermaster/storage) -"hz" = ( -/turf/simulated/floor/tiled, -/area/quartermaster/exploration) -"hA" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/random/trash, -/obj/structure/railing/mapped{ - dir = 4; - icon_state = "railing0-1" - }, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/aftstarboard) -"hE" = ( -/obj/machinery/door/blast/shutters{ - dir = 8; - id_tag = "qm_warehouse"; - name = "Warehouse Shutters" - }, -/obj/machinery/door/firedoor, -/turf/simulated/floor/tiled/steel_ridged, -/area/quartermaster/storage) -"hF" = ( -/obj/machinery/door/firedoor, -/obj/effect/floor_decal/industrial/hatch/yellow, -/turf/simulated/floor/tiled/monotile, -/area/hallway/primary/fifthdeck/aft) -"hG" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/effect/floor_decal/industrial/warning, -/turf/simulated/floor/tiled/dark, -/area/quartermaster/storage) -"hL" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 1 - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/aftstarboard) -"hM" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 2; - icon_state = "pipe-c" - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/fore) -"hN" = ( -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/fore) -"hO" = ( -/obj/effect/floor_decal/corner/mauve/mono, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/light{ - dir = 8 - }, -/obj/structure/closet/secure_closet/explorer/medic, -/obj/item/material/hatchet/machete, -/turf/simulated/floor/tiled/monotile, -/area/quartermaster/exploration) -"hP" = ( -/obj/structure/sign/warning/nosmoking_1{ - dir = 4; - pixel_x = -32 - }, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/structure/railing/mapped, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/aftstarboard) -"hR" = ( -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/structure/reagent_dispensers/watertank, -/turf/simulated/floor/tiled/dark/monotile, -/area/quartermaster/storage) -"hS" = ( -/obj/machinery/door/firedoor, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/door/airlock/maintenance, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/maintenance/fifthdeck/fore) -"hT" = ( -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 4; - icon_state = "warningcorner" - }, -/turf/simulated/floor/tiled/monotile, -/area/quartermaster/hangar) -"hV" = ( -/obj/machinery/portable_atmospherics/canister/air, -/obj/machinery/atmospherics/portables_connector, -/obj/effect/floor_decal/industrial/outline/blue, -/turf/simulated/floor/tiled/techfloor, -/area/exploration_shuttle/atmos) -"hW" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/cyan, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor, -/area/exploration_shuttle/atmos) -"hY" = ( -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 1 - }, -/turf/simulated/floor/tiled/monotile, -/area/quartermaster/hangar) -"hZ" = ( -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/quartermaster/storage) -"ia" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/fuel{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/exploration_shuttle/atmos) -"ie" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/hatch/maintenance, -/turf/simulated/floor/tiled/techfloor/grid, -/area/maintenance/fifthdeck/aftstarboard) -"if" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 8 - }, -/turf/simulated/floor/tiled, -/area/quartermaster/storage) -"ih" = ( -/obj/effect/catwalk_plated, -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/plating, -/area/quartermaster/hangar) -"ii" = ( -/obj/effect/floor_decal/corner/brown/half{ - dir = 4 - }, -/turf/simulated/floor/tiled/monotile, -/area/hallway/primary/fifthdeck/fore) -"il" = ( -/obj/effect/catwalk_plated, -/obj/machinery/rotating_alarm/security_alarm{ - dir = 8 - }, -/turf/simulated/floor/plating, -/area/quartermaster/hangar) -"im" = ( -/obj/effect/catwalk_plated, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 8 - }, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/plating, -/area/quartermaster/hangar) -"ip" = ( -/obj/machinery/light{ - dir = 8 - }, -/obj/machinery/vending/coffee{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/fifthdeck/fore) -"iq" = ( -/obj/machinery/atmospherics/unary/vent_pump/high_volume/guppy{ - dir = 4; - id_tag = "guppy_shuttle_pump_out_external" - }, -/obj/structure/handrail, -/obj/machinery/airlock_sensor{ - frequency = 1431; - id_tag = "guppy_shuttle_exterior_sensor"; - pixel_y = 24 - }, -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/plating, -/area/guppy_hangar/start) -"ir" = ( -/obj/machinery/camera/network/hangar, -/turf/simulated/floor/tiled/monotile, -/area/quartermaster/hangar) -"iu" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 - }, -/turf/simulated/floor/tiled, -/area/quartermaster/exploration) -"iv" = ( -/obj/machinery/computer/ship/navigation, -/obj/machinery/light{ - dir = 1 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/command/pilot) -"iw" = ( -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/mining/brace{ - dir = 4 - }, -/obj/machinery/light/small{ - dir = 1 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/quartermaster/expedition/storage) -"ix" = ( -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/structure/anomaly_container, -/obj/item/device/radio/intercom{ - dir = 4; - pixel_x = -21 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/quartermaster/expedition/storage) -"iy" = ( -/obj/effect/wallframe_spawn/no_grille, -/turf/simulated/floor/plating, -/area/command/pilot) -"iz" = ( -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/door/airlock/maintenance{ - name = "Pilot's Lounge Maintenance" - }, -/turf/simulated/floor/tiled/steel_ridged, -/area/command/pilot) -"iA" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/lino, -/area/command/pilot) -"iB" = ( -/obj/structure/bed/chair/comfy/blue, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/turf/simulated/floor/lino, -/area/command/pilot) -"iC" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 8 - }, -/turf/simulated/floor/lino, -/area/command/pilot) -"iD" = ( -/obj/effect/floor_decal/industrial/warning/corner, -/obj/structure/table/steel, -/obj/machinery/cell_charger, -/obj/random/powercell, -/obj/machinery/light/small{ - dir = 1 - }, -/obj/machinery/button/blast_door{ - id_tag = "mine_warehouse"; - name = "Storage Door Control"; - pixel_x = 24; - pixel_y = -6 - }, -/obj/machinery/light_switch{ - pixel_x = 22; - pixel_y = 22 - }, -/turf/simulated/floor/tiled/dark, -/area/quartermaster/expedition/storage) -"iE" = ( -/obj/machinery/firealarm{ - dir = 4; - pixel_x = 26 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/fifthdeck/fore) -"iF" = ( -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled/dark/monotile, -/area/quartermaster/storage) -"iG" = ( -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/structure/reagent_dispensers/fueltank, -/turf/simulated/floor/tiled/dark/monotile, -/area/quartermaster/storage) -"iH" = ( -/obj/structure/closet/crate/internals, -/obj/item/clothing/mask/gas{ - pixel_x = 3; - pixel_y = 3 - }, -/obj/item/clothing/mask/gas{ - pixel_x = 3; - pixel_y = 3 - }, -/obj/item/clothing/mask/gas, -/obj/item/clothing/mask/gas, -/obj/item/clothing/mask/gas{ - pixel_x = -3; - pixel_y = -3 - }, -/obj/item/clothing/mask/gas{ - pixel_x = -3; - pixel_y = -3 - }, -/obj/item/clothing/mask/gas{ - pixel_x = -3; - pixel_y = -3 - }, -/obj/item/clothing/mask/gas{ - pixel_x = -3; - pixel_y = -3 - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled/dark/monotile, -/area/quartermaster/storage) -"iI" = ( -/obj/structure/cable/green, -/obj/machinery/power/apc{ - dir = 8; - name = "west bump"; - pixel_x = -24 - }, -/turf/simulated/floor/lino, -/area/command/pilot) -"iJ" = ( -/obj/structure/closet/crate, -/obj/item/storage/briefcase/inflatable, -/obj/item/storage/briefcase/inflatable, -/obj/item/storage/box/lights/tubes, -/obj/item/storage/box/lights/bulbs, -/obj/item/device/flashlight/flare/glowstick/random, -/obj/item/device/flashlight/flare/glowstick/random, -/obj/item/device/flashlight/flare/glowstick/random, -/obj/item/device/flashlight, -/obj/item/device/flashlight, -/obj/item/device/flashlight, -/obj/item/device/flashlight, -/obj/item/device/flashlight, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled/dark/monotile, -/area/quartermaster/storage) -"iK" = ( -/obj/structure/table/steel, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/item/paper_bin{ - pixel_x = -3; - pixel_y = 7 - }, -/obj/item/folder/blue, -/turf/simulated/floor/lino, -/area/command/pilot) -"iL" = ( -/obj/machinery/door/airlock/mining{ - autoset_access = 0; - name = "Warehouse"; - req_access = list(list("ACCESS_CARGO","ACCESS_MINING")) - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/disposalpipe/segment, -/obj/machinery/door/firedoor, -/turf/simulated/floor/tiled/steel_ridged, -/area/quartermaster/storage) -"iM" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 4 - }, -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 - }, -/obj/machinery/power/apc/hyper/shuttle/charon{ - dir = 4; - pixel_x = 26 - }, -/obj/structure/cable/cyan, -/obj/machinery/atmospherics/pipe/simple/hidden/fuel{ - dir = 9 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/exploration_shuttle/atmos) -"iO" = ( -/obj/structure/table/steel, -/obj/item/paper_bin{ - pixel_x = -3; - pixel_y = 7 - }, -/obj/item/folder/blue, -/obj/structure/sign/ecplaque{ - pixel_y = 30 - }, -/obj/machinery/light_switch{ - pixel_x = 22; - pixel_y = 22 - }, -/obj/machinery/light{ - dir = 4 - }, -/obj/machinery/camera/network/exploration{ - c_tag = "Exploration Equipment"; - dir = 8 - }, -/obj/effect/floor_decal/corner/mauve/mono, -/turf/simulated/floor/tiled/monotile, -/area/quartermaster/exploration) -"iP" = ( -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/suit_storage_unit/pilot/sol, -/turf/simulated/floor/tiled/monotile, -/area/quartermaster/exploration) -"iQ" = ( -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/portable_atmospherics/canister/oxygen, -/turf/simulated/floor/tiled/monotile, -/area/quartermaster/exploration) -"iR" = ( -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/light/small{ - dir = 1 - }, -/obj/machinery/mech_recharger, -/mob/living/exosuit/premade/powerloader/old, -/turf/simulated/floor/tiled/dark/monotile, -/area/quartermaster/storage) -"iS" = ( -/obj/machinery/door/firedoor, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/door/airlock/mining{ - id_tag = "hangarexit2"; - name = "Hangar Bay" - }, -/turf/simulated/floor/tiled/steel_ridged, -/area/quartermaster/hangar) -"iT" = ( -/obj/machinery/door/airlock/glass/science{ - name = "Exploration Equipment" - }, -/obj/machinery/door/firedoor, -/turf/simulated/floor/tiled/steel_ridged, -/area/quartermaster/exploration) -"iU" = ( -/obj/effect/catwalk_plated, -/obj/effect/floor_decal/industrial/warning/corner, -/turf/simulated/floor/plating, -/area/quartermaster/hangar) -"iV" = ( -/obj/effect/catwalk_plated, -/obj/effect/floor_decal/industrial/warning{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/quartermaster/hangar) -"iW" = ( -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/fore) -"iX" = ( -/obj/random/torchcloset, -/obj/random/maintenance/solgov, -/obj/random/maintenance/solgov, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/floor/tiled/techfloor, -/area/quartermaster/hangar) -"iY" = ( -/obj/machinery/door/firedoor, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/door/airlock/maintenance, -/turf/simulated/floor/tiled/techfloor/grid, -/area/maintenance/fifthdeck/fore) -"iZ" = ( -/obj/machinery/power/apc{ - dir = 4; - name = "east bump"; - pixel_x = 24 - }, -/obj/structure/cable/green{ - d2 = 8; - icon_state = "0-8" - }, -/turf/simulated/floor/tiled/dark, -/area/quartermaster/storage) -"ja" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 8 - }, -/obj/machinery/camera/network/supply{ - c_tag = "Supply Office - Warehouse Fore" - }, -/obj/machinery/computer/guestpass{ - pixel_y = 32 - }, -/turf/simulated/floor/tiled, -/area/quartermaster/storage) -"jc" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/tiled/monotile, -/area/quartermaster/storage) -"jd" = ( -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 1 - }, -/obj/machinery/button/blast_door{ - id_tag = "qm_warehouse"; - name = "Warehouse Door Control"; - pixel_x = -24; - pixel_y = 6; - req_access = newlist() - }, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 4; - level = 2 - }, -/turf/simulated/floor/tiled, -/area/quartermaster/storage) -"je" = ( -/obj/structure/cable/green{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/obj/structure/disposalpipe/segment, -/obj/effect/floor_decal/industrial/warning/corner, -/turf/simulated/floor/tiled/monotile, -/area/quartermaster/storage) -"jf" = ( -/obj/structure/extinguisher_cabinet{ - pixel_x = -32 - }, -/obj/structure/table/standard{ - name = "plastic table frame" - }, -/obj/machinery/cell_charger, -/obj/random/powercell, -/turf/simulated/floor/tiled, -/area/quartermaster/storage) -"jg" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/disposalpipe/segment, -/obj/effect/floor_decal/industrial/warning{ - dir = 4; - icon_state = "warning" - }, -/turf/simulated/floor/tiled/monotile, -/area/quartermaster/storage) -"ji" = ( -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/portable_atmospherics/canister/oxygen, -/turf/simulated/floor/tiled/dark/monotile, -/area/quartermaster/storage) -"jj" = ( -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/structure/dispenser, -/turf/simulated/floor/tiled/dark/monotile, -/area/quartermaster/storage) -"jk" = ( -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/fifthdeck/fore) -"jl" = ( -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/floodlight, -/obj/effect/floor_decal/industrial/warning{ - dir = 8 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/quartermaster/storage) -"jm" = ( -/obj/structure/closet/crate/medical, -/obj/item/storage/firstaid/fire{ - pixel_x = -4; - pixel_y = -4 - }, -/obj/item/storage/firstaid/toxin{ - pixel_x = -2; - pixel_y = -2 - }, -/obj/item/storage/firstaid/regular, -/obj/item/storage/firstaid/o2{ - pixel_x = 2; - pixel_y = 2 - }, -/obj/item/storage/firstaid/adv{ - pixel_x = 4; - pixel_y = 4 - }, -/obj/item/stack/nanopaste, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled/dark/monotile, -/area/quartermaster/storage) -"jn" = ( -/obj/structure/table/rack{ - dir = 8 - }, -/obj/item/stack/material/cardboard/fifty, -/obj/random/maintenance/solgov, -/obj/random/maintenance/solgov, -/obj/random/maintenance/solgov, -/obj/item/tape_roll, -/obj/machinery/light/small, -/obj/machinery/alarm{ - dir = 1; - pixel_y = -25 - }, -/turf/simulated/floor/tiled, -/area/quartermaster/storage) -"jo" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/fifthdeck/fore) -"jp" = ( -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/light/small, -/obj/structure/closet/crate/freezer/rations, -/turf/simulated/floor/tiled/dark/monotile, -/area/quartermaster/storage) -"jq" = ( -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/floodlight, -/turf/simulated/floor/tiled/dark/monotile, -/area/quartermaster/expedition/storage) -"jr" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/mining{ - name = "Expedition Storage" - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled/steel_ridged, -/area/quartermaster/expedition/storage) -"js" = ( -/obj/machinery/door/blast/shutters{ - dir = 4; - id_tag = "mine_warehouse"; - name = "Storage Shutters" - }, -/turf/simulated/floor/tiled/steel_ridged, -/area/quartermaster/expedition/storage) -"jt" = ( -/obj/effect/catwalk_plated, -/obj/effect/floor_decal/industrial/warning{ - dir = 8 - }, -/turf/simulated/floor/plating, -/area/quartermaster/hangar) -"ju" = ( -/obj/structure/closet/firecloset, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/floor/tiled/techfloor, -/area/quartermaster/hangar) -"jv" = ( -/obj/effect/floor_decal/industrial/warning, -/obj/structure/handrail{ - dir = 4 - }, -/obj/machinery/alarm{ - dir = 4; - pixel_x = -21; - req_access = list("ACCESS_TORCH_CREW") - }, -/turf/simulated/floor/tiled/monotile, -/area/exploration_shuttle/airlock) -"jw" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 1; - level = 2 - }, -/turf/simulated/floor/lino, -/area/command/pilot) -"jx" = ( -/obj/structure/disposalpipe/segment{ - dir = 4; - icon_state = "pipe-c" - }, -/obj/machinery/light_switch{ - pixel_x = 22; - pixel_y = 22 - }, -/turf/simulated/floor/lino, -/area/command/pilot) -"jy" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/glass/science{ - name = "Pilot's Lounge" - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/simulated/floor/tiled/steel_ridged, -/area/command/pilot) -"jz" = ( -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/structure/stasis_cage, -/turf/simulated/floor/tiled/dark/monotile, -/area/quartermaster/expedition/storage) -"jA" = ( -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/structure/ore_box, -/obj/effect/floor_decal/industrial/warning/corner, -/turf/simulated/floor/tiled/dark/monotile, -/area/quartermaster/expedition/storage) -"jB" = ( -/obj/effect/catwalk_plated, -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 1; - icon_state = "warningcorner" - }, -/turf/simulated/floor/plating, -/area/quartermaster/hangar) -"jC" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/mining{ - name = "Expedition Prep" - }, -/turf/simulated/floor/tiled/steel_ridged, -/area/quartermaster/expedition/eva) -"jD" = ( -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/suit_storage_unit/explorer/engineer, -/turf/simulated/floor/tiled/monotile, -/area/quartermaster/exploration) -"jE" = ( -/obj/machinery/suit_storage_unit/explorer, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/firealarm{ - pixel_y = 24 - }, -/obj/machinery/light{ - dir = 1 - }, -/obj/machinery/camera/network/exploration{ - c_tag = "Exploration EVA"; - dir = 4 - }, -/turf/simulated/floor/tiled/monotile, -/area/quartermaster/exploration) -"jF" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/effect/floor_decal/corner/mauve{ - dir = 10 - }, -/obj/structure/disposalpipe/segment{ - dir = 4; - icon_state = "pipe-c" - }, -/turf/simulated/floor/tiled, -/area/quartermaster/exploration) -"jG" = ( -/obj/structure/table/steel, -/obj/machinery/chemical_dispenser/bar_soft/full, -/obj/machinery/camera/network/exploration{ - c_tag = "Pilot's Lounge"; - dir = 4 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/command/pilot) -"jH" = ( -/obj/structure/table/steel, -/obj/item/storage/box/glasses, -/obj/machinery/light, -/turf/simulated/floor/tiled/dark/monotile, -/area/command/pilot) -"jI" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark, -/area/quartermaster/expedition/storage) -"jJ" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark, -/area/quartermaster/expedition/storage) -"jK" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/turf/simulated/floor/tiled/dark, -/area/quartermaster/expedition/storage) -"jL" = ( -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 4 - }, -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 8; - icon_state = "warningcorner" - }, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 1 - }, -/obj/machinery/alarm{ - dir = 8; - pixel_x = 21 - }, -/turf/simulated/floor/tiled/dark, -/area/quartermaster/expedition/storage) -"jM" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/hatch/maintenance, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/tiled/steel_ridged, -/area/hallway/primary/fifthdeck/fore) -"jO" = ( -/obj/effect/floor_decal/corner/brown{ - dir = 5 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/fifthdeck/fore) -"jP" = ( -/obj/effect/floor_decal/corner/brown/half{ - dir = 1 - }, -/obj/machinery/embedded_controller/radio/airlock/docking_port{ - dir = 8; - display_name = "Aft Dock (Petrov)"; - frequency = 1380; - id_tag = "petrov_shuttle_dock_airlock"; - pixel_x = 24; - req_access = list(list("ACCESS_SECURITY","ACCESS_EXTERNAL","ACCESS_TORCH_PETROV")); - tag_airpump = "petrov_shuttle_dock_pump"; - tag_chamber_sensor = "petrov_shuttle_dock_sensor"; - tag_exterior_door = "petrov_shuttle_dock_outer"; - tag_interior_door = "petrov_shuttle_dock_inner" - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/structure/closet/emcloset, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden, -/obj/machinery/rotating_alarm/security_alarm, -/turf/simulated/floor/tiled/monotile, -/area/hallway/primary/fifthdeck/aft) -"jQ" = ( -/obj/machinery/disposal, -/obj/effect/floor_decal/industrial/hatch/yellow, -/obj/structure/disposalpipe/trunk{ - dir = 1 - }, -/obj/machinery/firealarm{ - dir = 1; - pixel_y = -24 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/command/pilot) -"jR" = ( -/obj/machinery/door/firedoor, -/obj/effect/wallframe_spawn/reinforced/no_grille, -/turf/simulated/floor/plating, -/area/quartermaster/shuttlefuel) -"jS" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/glass/mining{ - name = "Shuttle Fuel Bay Interior"; - normalspeed = 0 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/tiled/steel_ridged, -/area/quartermaster/shuttlefuel) -"jT" = ( -/obj/structure/closet/firecloset, -/obj/machinery/alarm{ - dir = 4; - pixel_x = -32 - }, -/obj/effect/floor_decal/industrial/warning/corner, -/turf/simulated/floor/tiled/monotile, -/area/quartermaster/shuttlefuel) -"jU" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/glass/mining{ - name = "Shuttle Fuel Bay Interior"; - normalspeed = 0 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/steel_ridged, -/area/quartermaster/shuttlefuel) -"jV" = ( -/obj/effect/floor_decal/industrial/warning, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable/green{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/turf/simulated/floor/tiled/monotile, -/area/quartermaster/shuttlefuel) -"jW" = ( -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/structure/cable/green{ - d2 = 4; - icon_state = "0-4" - }, -/obj/machinery/power/apc{ - dir = 8; - name = "west bump"; - pixel_x = -24 - }, -/obj/structure/table/steel, -/obj/item/stack/flag/green{ - pixel_x = 10; - pixel_y = 11 - }, -/obj/item/stack/flag/green{ - pixel_x = 7; - pixel_y = 8 - }, -/obj/item/stack/flag/yellow{ - pixel_x = 1; - pixel_y = 10 - }, -/obj/item/stack/flag/yellow{ - pixel_x = -2; - pixel_y = 8 - }, -/obj/item/stack/flag/red{ - pixel_x = -8; - pixel_y = 10 - }, -/obj/item/stack/flag/red{ - pixel_x = -10; - pixel_y = 8 - }, -/obj/item/device/spaceflare{ - pixel_x = 5; - pixel_y = -3 - }, -/obj/item/device/spaceflare{ - pixel_y = -2 - }, -/obj/item/device/spaceflare{ - pixel_x = -5; - pixel_y = -1 - }, -/obj/item/device/binoculars, -/obj/item/device/binoculars, -/obj/item/device/binoculars, -/turf/simulated/floor/tiled/monotile, -/area/quartermaster/expedition) -"jX" = ( -/obj/structure/largecrate, -/obj/random/maintenance/solgov, -/obj/random/maintenance/solgov, -/obj/random/maintenance/solgov, -/obj/random/maintenance/solgov, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/floor/tiled/techfloor, -/area/quartermaster/hangar) -"jY" = ( -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 4; - icon_state = "warningcorner" - }, -/obj/structure/closet/crate/internals/fuel, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/quartermaster/shuttlefuel) -"jZ" = ( -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/mineral/stacking_machine{ - input_turf = 2; - output_turf = 1 - }, -/turf/simulated/floor/plating, -/area/quartermaster/hangar) -"kb" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/obj/machinery/rotating_alarm/security_alarm, -/turf/simulated/floor/tiled/monotile, -/area/quartermaster/hangar) -"kd" = ( -/obj/effect/catwalk_plated, -/obj/machinery/light/spot{ - dir = 1 - }, -/turf/simulated/floor/plating, -/area/quartermaster/hangar) -"ke" = ( -/obj/effect/floor_decal/industrial/warning, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/handrail{ - dir = 8 - }, -/obj/machinery/access_button/airlock_interior{ - frequency = 1331; - master_tag = "charon_cargo"; - pixel_x = 24; - pixel_y = -10 - }, -/turf/simulated/floor/tiled/monotile, -/area/exploration_shuttle/airlock) -"kf" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/tiled, -/area/quartermaster/exploration) -"kg" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 8 - }, -/turf/simulated/floor/tiled, -/area/quartermaster/exploration) -"kh" = ( -/obj/effect/floor_decal/corner/mauve/mono, -/obj/machinery/power/apc{ - dir = 8; - name = "west bump"; - pixel_x = -24 - }, -/obj/structure/cable/green{ - d2 = 4; - icon_state = "0-4" - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/structure/closet/secure_closet/explorer/engineer, -/obj/item/material/hatchet/machete, -/turf/simulated/floor/tiled/monotile, -/area/quartermaster/exploration) -"ki" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/quartermaster/exploration) -"kj" = ( -/obj/effect/floor_decal/corner/mauve/mono, -/obj/structure/closet/secure_closet/explorer, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/item/material/hatchet/machete, -/turf/simulated/floor/tiled/monotile, -/area/quartermaster/exploration) -"kk" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/turf/simulated/floor/tiled, -/area/quartermaster/exploration) -"kl" = ( -/turf/unsimulated/mask, -/area/hallway/primary/fifthdeck/fore) -"km" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/fuel{ - dir = 8 - }, -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/obj/machinery/power/apc/hyper/shuttle/charon{ - dir = 8; - pixel_x = -27 - }, -/obj/structure/cable/cyan, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/exploration_shuttle/fuel) -"kn" = ( -/obj/structure/table/steel, -/obj/machinery/recharger, -/obj/item/clothing/glasses/science, -/obj/item/clothing/glasses/science, -/obj/item/clothing/glasses/science, -/obj/item/device/geiger, -/obj/item/device/geiger, -/obj/effect/floor_decal/corner/mauve{ - dir = 5 - }, -/obj/item/device/camera, -/turf/simulated/floor/tiled/monotile, -/area/quartermaster/exploration) -"ko" = ( -/obj/machinery/suit_storage_unit/explorer, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled/monotile, -/area/quartermaster/exploration) -"kp" = ( -/obj/structure/closet/secure_closet/explorer/marine, -/obj/effect/floor_decal/corner/red{ - dir = 6 - }, -/obj/effect/floor_decal/corner/red{ - dir = 5 - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled/monotile, -/area/quartermaster/exploration) -"kq" = ( -/obj/machinery/door/firedoor, -/obj/effect/wallframe_spawn/reinforced/no_grille, -/turf/simulated/floor/plating, -/area/quartermaster/exploration) -"kr" = ( -/obj/structure/table/rack, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/item/storage/box/greenglowsticks, -/obj/item/storage/box/greenglowsticks, -/obj/item/clothing/mask/gas/half, -/obj/item/clothing/mask/gas/half, -/obj/item/clothing/mask/gas/half, -/obj/effect/floor_decal/industrial/warning/corner, -/obj/item/device/radio/intercom{ - pixel_y = 23 - }, -/obj/machinery/light{ - dir = 1 - }, -/obj/item/storage/box/ammo/flashshells, -/obj/item/gun/projectile/flare, -/obj/item/clothing/mask/gas/half, -/obj/item/clothing/mask/gas/half, -/turf/simulated/floor/tiled/monotile, -/area/quartermaster/exploration) -"kt" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/glass/science{ - name = "Exploration Equipment" - }, -/turf/simulated/floor/tiled/steel_ridged, -/area/quartermaster/exploration) -"ku" = ( -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 4; - icon_state = "warningcorner" - }, -/obj/machinery/mech_recharger, -/obj/effect/floor_decal/industrial/warning{ - dir = 5; - icon_state = "warning" - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 10 - }, -/mob/living/exosuit/premade/light/exploration, -/turf/simulated/floor/tiled/monotile, -/area/quartermaster/exploration) -"kv" = ( -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/effect/floor_decal/industrial/warning{ - dir = 4 - }, -/obj/structure/sign/ecplaque{ - pixel_y = -30 - }, -/obj/machinery/suit_storage_unit/explorer/marine, -/turf/simulated/floor/tiled/monotile, -/area/quartermaster/exploration) -"kw" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 8 - }, -/turf/simulated/floor/tiled, -/area/quartermaster/exploration) -"kx" = ( -/obj/effect/catwalk_plated, -/obj/machinery/button/alternate/door{ - desc = "A remote control-switch for airlocks."; - id_tag = "hangarexit"; - name = "Hangar Exit Door Control"; - pixel_x = -24; - req_access = newlist() - }, -/turf/simulated/floor/plating, -/area/quartermaster/hangar) -"ky" = ( -/obj/structure/table/rack, -/obj/item/stack/flag/green, -/obj/item/stack/flag/green, -/obj/item/stack/flag/green, -/obj/item/stack/flag/green, -/obj/item/stack/flag/red, -/obj/item/stack/flag/red, -/obj/item/stack/flag/red, -/obj/item/stack/flag/red, -/obj/item/device/scanner/mining, -/obj/item/device/scanner/mining, -/obj/item/device/scanner/mining, -/obj/item/device/scanner/mining, -/obj/effect/floor_decal/corner/mauve{ - dir = 10 - }, -/turf/simulated/floor/tiled, -/area/quartermaster/exploration) -"kz" = ( -/obj/structure/table/rack, -/obj/item/device/scanner/xenobio, -/obj/item/device/scanner/xenobio, -/obj/item/device/scanner/xenobio, -/obj/item/device/scanner/xenobio, -/obj/item/storage/plants, -/obj/item/storage/plants, -/obj/item/storage/plants, -/obj/item/device/scanner/plant, -/obj/item/device/scanner/plant, -/obj/item/device/scanner/plant, -/obj/item/device/scanner/plant, -/obj/effect/floor_decal/corner/mauve{ - dir = 10 - }, -/obj/machinery/alarm{ - dir = 8; - pixel_x = 21 - }, -/obj/effect/floor_decal/corner/mauve/mono, -/turf/simulated/floor/tiled/monotile, -/area/quartermaster/exploration) -"kA" = ( -/obj/machinery/computer/modular/preset/civilian{ - dir = 8; - icon_state = "console" - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled/monotile, -/area/quartermaster/exploration) -"kB" = ( -/obj/machinery/door/airlock/glass/science{ - name = "Exploration Equipment" - }, -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/tiled/steel_ridged, -/area/quartermaster/exploration) -"kC" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/tiled/monotile, -/area/quartermaster/exploration) -"kD" = ( -/turf/simulated/floor/tiled, -/area/quartermaster/hangar) -"kE" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 8 - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/tiled/monotile, -/area/quartermaster/exploration) -"kF" = ( -/obj/machinery/atmospherics/pipe/simple/hidden, -/obj/effect/floor_decal/industrial/warning{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor, -/area/guppy_hangar/start) -"kG" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 8 - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/tiled/monotile, -/area/quartermaster/exploration) -"kI" = ( -/obj/effect/floor_decal/industrial/warning/corner, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 8 - }, -/turf/simulated/floor/tiled, -/area/quartermaster/exploration) -"kJ" = ( -/obj/machinery/door/airlock/maintenance{ - name = "Exploration Equipment Maintenance" - }, -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/tiled/steel_ridged, -/area/quartermaster/exploration) -"kK" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/fuel{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/exploration_shuttle/fuel) -"kL" = ( -/obj/structure/disposalpipe/trunk{ - dir = 8 - }, -/obj/machinery/disposal, -/obj/effect/floor_decal/corner/mauve{ - dir = 10 - }, -/turf/simulated/floor/tiled, -/area/quartermaster/exploration) -"kM" = ( -/obj/machinery/suit_storage_unit/explorer, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/alarm{ - dir = 4; - pixel_x = -32 - }, -/turf/simulated/floor/tiled/monotile, -/area/quartermaster/exploration) -"kP" = ( -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/light, -/obj/machinery/suit_storage_unit/explorer/medic, -/turf/simulated/floor/tiled/monotile, -/area/quartermaster/exploration) -"kQ" = ( -/obj/structure/table/rack, -/obj/machinery/door/window/northright{ - autoset_access = 0; - name = "heavy suit storage"; - req_access = list("ACCESS_TORCH_PATHFINDER") - }, -/obj/structure/window/reinforced{ - dir = 8 - }, -/obj/structure/window/reinforced, -/obj/structure/window/reinforced{ - dir = 4 - }, -/obj/item/rig/exploration/equipped, -/obj/item/clothing/mask/gas/half, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/light, -/turf/simulated/floor/tiled/monotile, -/area/quartermaster/exploration) -"kR" = ( -/obj/machinery/status_display, -/turf/simulated/wall/prepainted, -/area/hallway/primary/fifthdeck/fore) -"kS" = ( -/obj/machinery/status_display, -/turf/simulated/wall/prepainted, -/area/quartermaster/exploration) -"kT" = ( -/obj/effect/catwalk_plated, -/obj/machinery/light/spot{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/quartermaster/hangar) -"kU" = ( -/obj/effect/catwalk_plated, -/obj/machinery/light/spot{ - dir = 8 - }, -/turf/simulated/floor/plating, -/area/quartermaster/hangar) -"kV" = ( -/obj/effect/catwalk_plated, -/obj/machinery/light/spot{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/plating, -/area/quartermaster/hangar) -"kW" = ( -/obj/effect/floor_decal/industrial/warning/corner, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 8 - }, -/turf/simulated/floor/tiled/monotile, -/area/quartermaster/hangar) -"kX" = ( -/obj/effect/catwalk_plated, -/obj/machinery/light/spot, -/turf/simulated/floor/plating, -/area/quartermaster/hangar) -"kY" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/quartermaster/shuttlefuel) -"kZ" = ( -/obj/effect/shuttle_landmark/lift/cargo_bottom, -/turf/simulated/floor/plating, -/area/quartermaster/storage) -"la" = ( -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 1; - icon_state = "warningcorner" - }, -/obj/machinery/atmospherics/portables_connector, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/floor/tiled/techfloor/grid, -/area/quartermaster/shuttlefuel) -"lb" = ( -/obj/machinery/light/small, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/quartermaster/shuttlefuel) -"lc" = ( -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/effect/floor_decal/industrial/warning, -/turf/simulated/floor/tiled/dark/monotile, -/area/quartermaster/expedition/storage) -"ld" = ( -/obj/structure/closet/emcloset, -/obj/machinery/power/apc{ - dir = 4; - name = "east bump"; - pixel_x = 24 - }, -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 8; - icon_state = "warningcorner" - }, -/obj/structure/cable/green{ - d2 = 8; - icon_state = "0-8" - }, -/turf/simulated/floor/tiled/monotile, -/area/quartermaster/shuttlefuel) -"le" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/fuel{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor, -/area/exploration_shuttle/fuel) -"lf" = ( -/obj/effect/catwalk_plated, -/obj/structure/closet/crate/plastic, -/turf/simulated/floor/plating, -/area/quartermaster/hangar) -"lg" = ( -/obj/effect/catwalk_plated, -/obj/machinery/light/spot, -/obj/structure/closet/crate, -/obj/random_multi/single_item/boombox, -/turf/simulated/floor/plating, -/area/quartermaster/hangar) -"lh" = ( -/obj/structure/ladder/up, -/obj/effect/floor_decal/corner/brown{ - dir = 9 - }, -/obj/machinery/light{ - dir = 8 - }, -/turf/simulated/floor/tiled/steel_grid, -/area/hallway/primary/fifthdeck/aft) -"li" = ( -/obj/machinery/light/small{ - dir = 4; - icon_state = "bulb1" - }, -/obj/machinery/alarm{ - dir = 1; - pixel_y = -24 - }, -/turf/simulated/floor/tiled/techfloor, -/area/quartermaster/hangar) -"lj" = ( -/obj/machinery/alarm{ - dir = 4; - pixel_x = -21 - }, -/turf/simulated/floor/lino, -/area/command/pilot) -"lk" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/maintenance{ - name = "Hangar Maintenance" - }, -/turf/simulated/floor/tiled/steel_ridged, -/area/quartermaster/hangar) -"lm" = ( -/obj/effect/floor_decal/industrial/outline/blue, -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/portables_connector{ - dir = 4 - }, -/obj/machinery/portable_atmospherics/powered/pump/filled, -/turf/simulated/floor/tiled/dark, -/area/quartermaster/expedition/atmos) -"ln" = ( -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/fifthdeck/fore) -"lo" = ( -/obj/machinery/door/airlock/maintenance{ - name = "Cargo Maintenance" - }, -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/disposalpipe/segment, -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 4; - icon_state = "warningcorner" - }, -/turf/simulated/floor/tiled/steel_ridged, -/area/quartermaster/storage) -"lq" = ( -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/structure/ore_box, -/obj/effect/floor_decal/industrial/warning{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/quartermaster/expedition/storage) -"lr" = ( -/obj/structure/table/rack, -/obj/structure/window/reinforced{ - dir = 8 - }, -/obj/structure/window/reinforced, -/obj/machinery/door/window/northright{ - name = "suit storage" - }, -/obj/item/rig/industrial/equipped, -/obj/structure/window/reinforced{ - dir = 4 - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/effect/floor_decal/corner/brown{ - dir = 6 - }, -/obj/effect/floor_decal/corner/brown{ - dir = 9 - }, -/turf/simulated/floor/tiled/dark, -/area/quartermaster/expedition/storage) -"lt" = ( -/obj/machinery/computer/modular/preset/civilian, -/obj/machinery/computer/guestpass{ - pixel_y = 32 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/command/pilot) -"lu" = ( -/obj/effect/floor_decal/corner/brown/half{ - dir = 4 - }, -/obj/machinery/light{ - dir = 4 - }, -/obj/machinery/vending/snack{ - dir = 8 - }, -/obj/machinery/rotating_alarm/security_alarm{ - dir = 8 - }, -/turf/simulated/floor/tiled/monotile, -/area/hallway/primary/fifthdeck/aft) -"lv" = ( -/obj/machinery/door/firedoor, -/obj/effect/wallframe_spawn/reinforced/no_grille, -/turf/simulated/floor/plating, -/area/quartermaster/hangar) -"lw" = ( -/obj/machinery/door/firedoor, -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/wallframe_spawn/reinforced/no_grille, -/turf/simulated/floor/plating, -/area/quartermaster/hangar) -"lx" = ( -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/structure/anomaly_container, -/obj/machinery/light/small, -/turf/simulated/floor/tiled/dark/monotile, -/area/quartermaster/expedition/storage) -"ly" = ( -/obj/effect/floor_decal/industrial/hatch/yellow, -/obj/effect/floor_decal/industrial/warning{ - dir = 8 - }, -/obj/structure/ladder/up, -/obj/machinery/light/small, -/obj/machinery/camera/network/hangar{ - c_tag = "Expedition Storage"; - dir = 1 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/quartermaster/expedition/storage) -"lz" = ( -/obj/machinery/portable_atmospherics/canister/carbon_dioxide/engine_setup{ - start_pressure = 4769 - }, -/obj/machinery/light/small{ - dir = 4; - icon_state = "bulb1" - }, -/obj/effect/floor_decal/industrial/outline/orange, -/turf/simulated/floor/tiled/dark, -/area/quartermaster/expedition/atmos) -"lA" = ( -/obj/machinery/light/small{ - dir = 8 - }, -/obj/effect/floor_decal/industrial/outline/red, -/obj/machinery/atmospherics/portables_connector{ - dir = 4 - }, -/obj/machinery/portable_atmospherics/powered/scrubber, -/turf/simulated/floor/tiled/dark, -/area/quartermaster/expedition/atmos) -"lC" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 1 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/aftstarboard) -"lD" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 1 - }, -/obj/structure/cable/cyan{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/turf/simulated/floor/tiled/dark, -/area/quartermaster/expedition/atmos) -"lE" = ( -/obj/effect/floor_decal/industrial/warning, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, -/turf/simulated/floor/tiled/dark, -/area/quartermaster/expedition/atmos) -"lF" = ( -/obj/machinery/conveyor{ - id = "mining_internal" - }, -/turf/simulated/floor/plating, -/area/quartermaster/hangar) -"lG" = ( -/obj/machinery/conveyor{ - dir = 8; - id = "mining_internal" - }, -/turf/simulated/floor/plating, -/area/quartermaster/hangar) -"lH" = ( -/obj/effect/floor_decal/industrial/hatch/yellow, -/turf/simulated/floor/plating, -/area/quartermaster/hangar) -"lK" = ( -/obj/machinery/conveyor{ - dir = 5; - id = "mining_internal" - }, -/turf/simulated/floor/plating, -/area/quartermaster/hangar) -"lL" = ( -/obj/machinery/mineral/processing_unit{ - input_turf = 4; - output_turf = 8 - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/plating, -/area/quartermaster/hangar) -"lM" = ( -/obj/machinery/conveyor{ - dir = 1; - id = "mining_internal" - }, -/obj/structure/plasticflaps, -/turf/simulated/floor/tiled/monotile, -/area/quartermaster/hangar) -"lN" = ( -/obj/machinery/mineral/unloading_machine{ - input_turf = 1; - output_turf = 2 - }, -/obj/effect/floor_decal/industrial/hatch/yellow, -/obj/machinery/door/firedoor, -/turf/simulated/floor/tiled/monotile, -/area/quartermaster/hangar) -"lQ" = ( -/obj/effect/floor_decal/industrial/loading{ - dir = 1 - }, -/obj/structure/closet/crate, -/turf/simulated/floor/tiled/monotile, -/area/quartermaster/hangar) -"lR" = ( -/obj/effect/floor_decal/industrial/loading, -/turf/simulated/floor/tiled/monotile, -/area/quartermaster/hangar) -"lS" = ( -/obj/machinery/computer/mining, -/turf/simulated/wall/r_wall/prepainted, -/area/quartermaster/hangar) -"lT" = ( -/obj/machinery/status_display, -/turf/simulated/wall/r_wall/prepainted, -/area/quartermaster/hangar) -"lU" = ( -/obj/structure/bed/chair/shuttle/blue{ - dir = 4 - }, -/obj/machinery/power/apc/hyper{ - name = "east bump"; - pixel_y = -24; - req_access = list() - }, -/obj/machinery/camera/network/pod{ - c_tag = "General Utility Pod - Crew Compartment"; - dir = 4 - }, -/obj/structure/cable/green{ - d2 = 4; - icon_state = "0-4" - }, -/obj/machinery/recharger/wallcharger{ - dir = 4; - pixel_x = -23 - }, -/turf/simulated/floor/tiled/techfloor, -/area/guppy_hangar/start) -"lV" = ( -/obj/machinery/light/spot, -/turf/simulated/floor/tiled/monotile, -/area/quartermaster/hangar) -"lW" = ( -/obj/structure/closet/crate, -/turf/simulated/floor/tiled, -/area/quartermaster/hangar) -"lX" = ( -/obj/machinery/conveyor_switch/oneway{ - id = "mining_internal"; - name = "mining conveyor" - }, -/obj/effect/floor_decal/industrial/hatch/yellow, -/obj/machinery/light/spot, -/turf/simulated/floor/tiled/monotile, -/area/quartermaster/hangar) -"lY" = ( -/turf/simulated/wall/prepainted, -/area/quartermaster/expedition/atmos) -"lZ" = ( -/obj/machinery/door/blast/shutters{ - id_tag = "hanger_atmos_storage"; - name = "Storage Shutters" - }, -/turf/simulated/floor/tiled/dark, -/area/quartermaster/expedition/atmos) -"mb" = ( -/obj/structure/table/rack, -/obj/random/tech_supply, -/obj/random/tech_supply, -/obj/random/tech_supply, -/obj/random/tech_supply, -/obj/random/tech_supply, -/obj/random/tech_supply, -/obj/item/module/power_control, -/obj/random/powercell, -/obj/random/toolbox, -/obj/item/device/radio/intercom{ - dir = 8; - pixel_x = 20 - }, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 8 - }, -/turf/simulated/floor/tiled/techfloor, -/area/exploration_shuttle/fuel) -"mc" = ( -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 8; - icon_state = "warningcorner" - }, -/obj/machinery/button/blast_door{ - id_tag = "mine_warehouse"; - name = "Storage Door Control"; - pixel_x = -24; - pixel_y = -6 - }, -/obj/machinery/light/spot{ - dir = 1 - }, -/turf/simulated/floor/tiled/monotile, -/area/quartermaster/hangar) -"md" = ( -/obj/machinery/light/spot{ - dir = 1 - }, -/turf/simulated/floor/tiled/monotile, -/area/quartermaster/hangar) -"mf" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 1 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/structure/catwalk, -/obj/machinery/alarm{ - pixel_y = 23; - req_access = list(list("ACCESS_ENGINE_EQUIP","ACCESS_ATMOS")) - }, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/aftstarboard) -"mg" = ( -/obj/structure/disposalpipe/segment, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/fore) -"mh" = ( -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/fore) -"mk" = ( -/obj/structure/cable{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/fore) -"mm" = ( -/obj/structure/table/standard, -/obj/item/device/scanner/spectrometer/adv, -/obj/item/storage/box/syringes, -/obj/item/storage/box/beakers, -/obj/item/device/radio/intercom{ - dir = 8; - pixel_x = 20 - }, -/obj/item/reagent_containers/glass/beaker/large, -/obj/item/reagent_containers/dropper, -/turf/simulated/floor/tiled/dark/monotile, -/area/shuttle/petrov/analysis) -"mn" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/structure/disposalpipe/segment{ - dir = 1; - icon_state = "pipe-c" - }, -/obj/structure/catwalk, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/fore) -"mo" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/cyan{ - dir = 8 - }, -/turf/simulated/floor/tiled/techfloor, -/area/exploration_shuttle/atmos) -"mp" = ( -/obj/structure/cable/cyan{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/fore) -"mq" = ( -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/fore) -"mr" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/cyan{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor, -/area/exploration_shuttle/atmos) -"ms" = ( -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/door/airlock/maintenance{ - name = "Hangar Maintenance" - }, -/turf/simulated/floor/tiled/steel_ridged, -/area/quartermaster/hangar) -"mt" = ( -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/catwalk, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/fore) -"mv" = ( -/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{ - id_tag = "petrov_shuttle_dock_pump" - }, -/obj/effect/floor_decal/techfloor{ - dir = 1 - }, -/obj/machinery/airlock_sensor{ - frequency = 1380; - id_tag = "petrov_shuttle_dock_sensor"; - pixel_x = -24 - }, -/obj/machinery/oxygen_pump{ - pixel_y = 32 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/hallway/primary/fifthdeck/aft) -"mw" = ( -/obj/effect/catwalk_plated, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/plating, -/area/quartermaster/hangar) -"mx" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled/monotile, -/area/quartermaster/exploration) -"mA" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/obj/machinery/atmospherics/binary/pump/on{ - name = "port thrust pump" - }, -/turf/simulated/floor/tiled/techfloor, -/area/exploration_shuttle/atmos) -"mB" = ( -/obj/effect/catwalk_plated, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/plating, -/area/quartermaster/hangar) -"mC" = ( -/obj/effect/catwalk_plated, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/plating, -/area/quartermaster/hangar) -"mD" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 8 - }, -/turf/simulated/floor/tiled/dark, -/area/quartermaster/storage) -"mE" = ( -/obj/effect/catwalk_plated, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/machinery/tele_beacon, -/obj/structure/cable/cyan{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/turf/simulated/floor/plating, -/area/quartermaster/hangar) -"mF" = ( -/obj/effect/catwalk_plated, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/plating, -/area/quartermaster/hangar) -"mG" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/universal, -/obj/machinery/camera/network/exploration_shuttle{ - c_tag = "Charon - Atmospherics Compartment"; - dir = 8 - }, -/obj/structure/handrail{ - dir = 8 - }, -/turf/simulated/floor/tiled/techfloor, -/area/exploration_shuttle/atmos) -"mH" = ( -/obj/structure/cable/green{ - d2 = 2; - icon_state = "0-2" - }, -/obj/machinery/power/apc{ - dir = 1; - name = "north bump"; - pixel_y = 24 - }, -/obj/machinery/light/small{ - dir = 4; - icon_state = "bulb1" - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/fore) -"mI" = ( -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/fore) -"mJ" = ( -/obj/structure/cable/green{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/structure/catwalk, -/obj/machinery/alarm{ - dir = 8; - pixel_x = 24 - }, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/fifthdeck/fore) -"mK" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/aftport) -"mL" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/hatch/maintenance, -/turf/simulated/floor/tiled/techfloor/grid, -/area/maintenance/fifthdeck/aftport) -"mM" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/hatch/maintenance, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/tiled/steel_ridged, -/area/hallway/primary/fifthdeck/fore) -"mN" = ( -/obj/effect/floor_decal/corner/brown{ - dir = 6 - }, -/obj/machinery/alarm{ - dir = 8; - pixel_x = 24 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/fifthdeck/fore) -"mP" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/aftport) -"mQ" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/fifthdeck/fore) -"mR" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/aftport) -"mS" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/railing/mapped{ - dir = 4; - icon_state = "railing0-1" - }, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/aftport) -"mU" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/aftport) -"mX" = ( -/obj/machinery/atmospherics/valve/shutoff/supply, -/obj/structure/railing/mapped{ - dir = 4; - icon_state = "railing0-1" - }, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/aftport) -"mY" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/railing/mapped{ - dir = 4; - icon_state = "railing0-1" - }, -/obj/structure/railing/mapped, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/aftport) -"na" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/hologram/holopad, -/turf/simulated/floor/tiled/monotile, -/area/hallway/primary/fifthdeck/fore) -"nb" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/meter, -/obj/structure/railing/mapped{ - dir = 4; - icon_state = "railing0-1" - }, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/fore) -"nd" = ( -/obj/machinery/atmospherics/valve/shutoff/scrubbers, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/aftport) -"ne" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/catwalk, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/fore) -"nf" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/fore) -"ng" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/disposalpipe/segment{ - dir = 1; - icon_state = "pipe-c" - }, -/obj/structure/catwalk, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/fore) -"nh" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/meter, -/obj/structure/railing/mapped{ - dir = 1; - icon_state = "railing0-1" - }, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/aftport) -"ni" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/fore) -"nk" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/fore) -"nl" = ( -/obj/effect/catwalk_plated, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 - }, -/obj/structure/disposalpipe/segment{ - dir = 1; - icon_state = "pipe-c" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/turf/simulated/floor/plating, -/area/hallway/primary/fifthdeck/aft) -"nm" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, -/obj/structure/railing/mapped{ - dir = 1; - icon_state = "railing0-1" - }, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/aftport) -"nn" = ( -/obj/structure/disposalpipe/segment{ - dir = 1; - icon_state = "pipe-c" - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/railing/mapped{ - dir = 1; - icon_state = "railing0-1" - }, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/fore) -"no" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/railing/mapped{ - dir = 1; - icon_state = "railing0-1" - }, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/aftport) -"np" = ( -/obj/effect/paint/red, -/turf/simulated/wall/titanium, -/area/exploration_shuttle/atmos) -"nq" = ( -/obj/structure/cable/green{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/aftport) -"nr" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/railing/mapped{ - dir = 1; - icon_state = "railing0-1" - }, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/fore) -"ns" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/fore) -"nt" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/obj/structure/cable{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/fore) -"nu" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/fore) -"nv" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/meter, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/railing/mapped{ - dir = 4; - icon_state = "railing0-1" - }, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/fore) -"nw" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/disposalpipe/segment, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/fore) -"ny" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/fore) -"nz" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/fore) -"nA" = ( -/obj/machinery/suit_storage_unit/science, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/camera/network/expedition{ - c_tag = "Expedition - EVA Prep" - }, -/turf/simulated/floor/tiled/monotile, -/area/quartermaster/expedition/eva) -"nB" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/railing/mapped{ - dir = 4; - icon_state = "railing0-1" - }, -/obj/structure/railing/mapped{ - dir = 1; - icon_state = "railing0-1" - }, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/fore) -"nC" = ( -/obj/structure/disposalpipe/segment{ - dir = 2; - icon_state = "pipe-c" - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/catwalk, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/fifthdeck/fore) -"nD" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/aftport) -"nF" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/obj/structure/disposalpipe/segment, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/fore) -"nG" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/disposalpipe/segment{ - dir = 4; - icon_state = "pipe-c" - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/aftport) -"nH" = ( -/obj/structure/disposalpipe/segment, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/catwalk, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/aftport) -"nI" = ( -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/wall/prepainted, -/area/quartermaster/expedition/atmos) -"nJ" = ( -/obj/machinery/light/spot, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 1 - }, -/turf/simulated/floor/tiled/monotile, -/area/quartermaster/hangar) -"nK" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 1 - }, -/turf/simulated/floor/tiled/monotile, -/area/quartermaster/hangar) -"nL" = ( -/obj/structure/cable/green, -/obj/machinery/power/apc{ - dir = 8; - name = "west bump"; - pixel_x = -24 - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/aftport) -"nM" = ( -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 4; - icon_state = "warningcorner" - }, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 8 - }, -/turf/simulated/floor/tiled/monotile, -/area/quartermaster/hangar) -"nN" = ( -/obj/effect/catwalk_plated, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/plating, -/area/quartermaster/hangar) -"nO" = ( -/obj/effect/catwalk_plated, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/plating, -/area/quartermaster/hangar) -"nP" = ( -/obj/effect/catwalk_plated, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 4 - }, -/obj/structure/cable/cyan{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/turf/simulated/floor/plating, -/area/quartermaster/hangar) -"nQ" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/cyan, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/tiled/dark, -/area/quartermaster/expedition/atmos) -"nR" = ( -/obj/effect/catwalk_plated, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/plating, -/area/quartermaster/hangar) -"nT" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 - }, -/obj/machinery/door/airlock/external{ - autoset_access = 0; - frequency = 1331; - id_tag = "charon_cargo_inner"; - name = "Charon Cargo Bay" - }, -/turf/simulated/floor/tiled/steel_ridged, -/area/exploration_shuttle/airlock) -"nU" = ( -/obj/effect/catwalk_plated, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/plating, -/area/quartermaster/hangar) -"nV" = ( -/obj/effect/catwalk_plated, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/turf/simulated/floor/plating, -/area/quartermaster/hangar) -"nW" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/fore) -"nY" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/aftport) -"nZ" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/obj/structure/disposalpipe/segment{ - dir = 1; - icon_state = "pipe-c" - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/fore) -"oa" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/maintenance, -/obj/machinery/atmospherics/pipe/simple/hidden/cyan{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/maintenance/fifthdeck/aftport) -"ob" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/fore) -"oc" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 4 - }, -/obj/machinery/door/airlock/external{ - autoset_access = 0; - frequency = 1331; - id_tag = "charon_cargo_inner"; - name = "Charon Cargo Bay" - }, -/turf/simulated/floor/tiled/steel_ridged, -/area/exploration_shuttle/airlock) -"of" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/aftport) -"og" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/fore) -"oh" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/cyan{ - dir = 4 - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/aftport) -"oi" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/cyan{ - dir = 4 - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/aftport) -"oj" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/cyan{ - dir = 4 - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/aftport) -"ok" = ( -/obj/machinery/atmospherics/unary/tank/air, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/aftport) -"ol" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 8; - icon_state = "pipe-c" - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/cyan{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/aftport) -"om" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/aftport) -"on" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 1; - icon_state = "pipe-c" - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/aftport) -"oo" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/cable{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/aftport) -"oq" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/obj/structure/disposalpipe/segment{ - dir = 8; - icon_state = "pipe-c" - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/aftport) -"or" = ( -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/fore) -"os" = ( -/obj/machinery/firealarm{ - pixel_y = 24 - }, -/obj/machinery/light_switch{ - pixel_x = 6; - pixel_y = 24 - }, -/turf/simulated/floor/tiled, -/area/quartermaster/storage) -"ot" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 8 - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/tiled, -/area/quartermaster/storage) -"ou" = ( -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/mech_recharger, -/mob/living/exosuit/premade/powerloader/old, -/turf/simulated/floor/tiled/dark/monotile, -/area/quartermaster/storage) -"ov" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 8 - }, -/turf/simulated/floor/tiled, -/area/quartermaster/storage) -"ow" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/disposalpipe/segment{ - dir = 4; - icon_state = "pipe-c" - }, -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 1 - }, -/turf/simulated/floor/tiled/monotile, -/area/quartermaster/storage) -"ox" = ( -/obj/structure/railing/mapped, -/turf/simulated/floor/tiled/monotile, -/area/quartermaster/storage) -"oy" = ( -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 8; - icon_state = "warningcorner" - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 1 - }, -/turf/simulated/floor/tiled, -/area/quartermaster/storage) -"oB" = ( -/obj/structure/table/rack{ - dir = 4 - }, -/obj/item/storage/toolbox/mechanical, -/obj/item/storage/toolbox/mechanical, -/obj/item/storage/toolbox/electrical, -/obj/item/storage/toolbox/electrical, -/obj/item/storage/toolbox/emergency, -/obj/item/storage/toolbox/emergency, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled/dark/monotile, -/area/quartermaster/storage) -"oD" = ( -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/disposalpipe/segment, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/door/airlock/hatch/maintenance, -/turf/simulated/floor/tiled/steel_ridged, -/area/hallway/primary/fifthdeck/aft) -"oE" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/hatch/maintenance, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/steel_ridged, -/area/hallway/primary/fifthdeck/aft) -"oF" = ( -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/door/airlock/maintenance{ - name = "Hangar Maintenance" - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/steel_ridged, -/area/quartermaster/hangar) -"oG" = ( -/obj/effect/catwalk_plated, -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 4; - icon_state = "warningcorner" - }, -/obj/machinery/button/blast_door{ - id_tag = "qm_warehouse"; - name = "Warehouse Door Control"; - pixel_x = 24; - pixel_y = 6; - req_access = list(list("ACCESS_CARGO","ACCESS_MINING")) - }, -/obj/structure/closet/crate/radiation, -/turf/simulated/floor/plating, -/area/quartermaster/hangar) -"oI" = ( -/obj/effect/catwalk_plated, -/obj/machinery/camera/network/hangar, -/turf/simulated/floor/plating, -/area/quartermaster/hangar) -"oJ" = ( -/obj/turbolift_map_holder/torch, -/turf/unsimulated/mask, -/area/hallway/primary/fifthdeck/fore) -"oL" = ( -/obj/effect/catwalk_plated, -/obj/machinery/camera/network/hangar{ - dir = 8 - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/alarm{ - dir = 8; - pixel_x = 21 - }, -/turf/simulated/floor/plating, -/area/quartermaster/hangar) -"oM" = ( -/obj/effect/catwalk_plated, -/obj/machinery/camera/network/hangar{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/quartermaster/hangar) -"oN" = ( -/obj/effect/catwalk_plated, -/obj/machinery/camera/network/hangar{ - dir = 8 - }, -/turf/simulated/floor/plating, -/area/quartermaster/hangar) -"oO" = ( -/obj/effect/catwalk_plated, -/obj/machinery/camera/network/hangar{ - dir = 1 - }, -/turf/simulated/floor/plating, -/area/quartermaster/hangar) -"oQ" = ( -/obj/effect/floor_decal/corner/brown/half{ - dir = 4 - }, -/obj/structure/sign/deck/fifth{ - dir = 8; - pixel_x = 40 - }, -/obj/machinery/vending/cigarette{ - dir = 8 - }, -/turf/simulated/floor/tiled/monotile, -/area/hallway/primary/fifthdeck/aft) -"oR" = ( -/obj/effect/floor_decal/corner/brown/half{ - dir = 4 - }, -/obj/machinery/vending/cola{ - dir = 8 - }, -/obj/machinery/firealarm{ - dir = 4; - pixel_x = 21 - }, -/obj/machinery/firealarm{ - dir = 4; - pixel_x = 21 - }, -/turf/simulated/floor/tiled/monotile, -/area/hallway/primary/fifthdeck/aft) -"oS" = ( -/obj/effect/floor_decal/corner/brown/half{ - dir = 4 - }, -/obj/machinery/disposal, -/obj/effect/floor_decal/industrial/hatch/yellow, -/obj/machinery/light{ - dir = 4 - }, -/obj/structure/disposalpipe/trunk{ - dir = 8 - }, -/turf/simulated/floor/tiled/monotile, -/area/hallway/primary/fifthdeck/aft) -"oU" = ( -/obj/effect/floor_decal/corner/mauve{ - dir = 10 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/fifthdeck/fore) -"oW" = ( -/obj/effect/floor_decal/corner/mauve{ - dir = 8 - }, -/obj/structure/sign/deck/fifth{ - dir = 1; - pixel_y = -38 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/fifthdeck/fore) -"oX" = ( -/obj/structure/closet/emcloset, -/obj/effect/floor_decal/corner/mauve/half, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/light, -/obj/machinery/camera/network/fifth_deck{ - c_tag = "Fifth Deck Hallway - Lift"; - dir = 1 - }, -/obj/machinery/alarm{ - dir = 1; - pixel_y = -22 - }, -/turf/simulated/floor/tiled/monotile, -/area/hallway/primary/fifthdeck/fore) -"oY" = ( -/obj/effect/floor_decal/corner/mauve, -/turf/simulated/floor/tiled, -/area/hallway/primary/fifthdeck/fore) -"oZ" = ( -/obj/effect/floor_decal/corner/mauve/half{ - dir = 4 - }, -/turf/simulated/floor/tiled/monotile, -/area/hallway/primary/fifthdeck/fore) -"pa" = ( -/obj/effect/floor_decal/corner/mauve{ - dir = 6 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/fifthdeck/fore) -"pb" = ( -/obj/effect/catwalk_plated, -/obj/machinery/button/alternate/door{ - desc = "A remote control-switch for airlocks."; - id_tag = "hangarexit2"; - name = "Hangar Exit Door Control"; - pixel_x = 24; - req_access = newlist() - }, -/turf/simulated/floor/plating, -/area/quartermaster/hangar) -"pc" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/railing/mapped, -/obj/structure/railing/mapped{ - dir = 8; - icon_state = "railing0-1" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/aftstarboard) -"pe" = ( -/obj/structure/cable, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/alarm{ - dir = 4; - pixel_x = -32 - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 4; - icon_state = "warning" - }, -/obj/machinery/power/terminal{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/maintenance/substation/fifthdeck) -"pf" = ( -/obj/structure/sign/warning/high_voltage{ - dir = 8 - }, -/obj/structure/sign/warning/high_voltage{ - dir = 4 - }, -/turf/simulated/wall/prepainted, -/area/maintenance/substation/fifthdeck) -"ph" = ( -/turf/simulated/wall/prepainted, -/area/maintenance/substation/fifthdeck) -"pi" = ( -/obj/structure/table/steel, -/obj/random/tool, -/turf/simulated/floor/tiled/techmaint, -/area/maintenance/fifthdeck/fore) -"pk" = ( -/obj/effect/floor_decal/corner/brown/half{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/tiled/monotile, -/area/hallway/primary/fifthdeck/fore) -"pl" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/fore) -"pm" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/meter, -/obj/structure/railing/mapped{ - dir = 4; - icon_state = "railing0-1" - }, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/fore) -"po" = ( -/obj/machinery/atmospherics/unary/vent_pump/on, -/obj/effect/floor_decal/corner/brown{ - dir = 5 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/fifthdeck/fore) -"pp" = ( -/obj/structure/sign/directions/bridge{ - dir = 1; - pixel_y = 3 - }, -/obj/structure/sign/directions/security{ - dir = 1; - pixel_y = -4 - }, -/turf/simulated/wall/prepainted, -/area/hallway/primary/fifthdeck/fore) -"pq" = ( -/obj/structure/sign/directions/science{ - dir = 1; - pixel_y = 3 - }, -/obj/structure/sign/directions/infirmary{ - dir = 1; - pixel_y = -4 - }, -/turf/simulated/wall/prepainted, -/area/hallway/primary/fifthdeck/fore) -"pr" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/disposalpipe/segment{ - dir = 4; - icon_state = "pipe-c" - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/aftstarboard) -"ps" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/aftstarboard) -"pt" = ( -/obj/effect/floor_decal/industrial/outline/grey, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/fifthdeck/aftport) -"pu" = ( -/obj/machinery/portable_atmospherics/powered/pump/filled, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/fifthdeck/aftport) -"pv" = ( -/obj/structure/table/rack, -/obj/random/tech_supply, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/fifthdeck/aftport) -"pw" = ( -/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{ - id_tag = "petrov_shuttle_dock_pump" - }, -/obj/effect/floor_decal/techfloor{ - dir = 1 - }, -/obj/item/device/radio/intercom{ - dir = 8; - pixel_x = 22; - pixel_y = 4 - }, -/obj/machinery/light/small{ - dir = 1 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/hallway/primary/fifthdeck/aft) -"px" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/random/trash, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/aftport) -"py" = ( -/obj/random/trash, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/fifthdeck/fore) -"pz" = ( -/obj/structure/disposalpipe/up, -/obj/effect/floor_decal/industrial/warning{ - dir = 10 - }, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/aftport) -"pA" = ( -/obj/effect/floor_decal/industrial/warning, -/obj/machinery/atmospherics/pipe/simple/hidden/cyan{ - dir = 6 - }, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/aftport) -"pC" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/aftport) -"pD" = ( -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 5 - }, -/obj/random/trash, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/aftport) -"pF" = ( -/obj/effect/wallframe_spawn/reinforced/no_grille, -/turf/simulated/floor/plating, -/area/quartermaster/hangar) -"pG" = ( -/obj/machinery/atmospherics/pipe/zpipe/up/supply, -/obj/machinery/atmospherics/pipe/zpipe/up/scrubbers, -/obj/effect/floor_decal/industrial/warning{ - dir = 8; - icon_state = "warning" - }, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/aftstarboard) -"pH" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 4; - icon_state = "warning" - }, -/obj/structure/cable{ - d1 = 16; - d2 = 0; - icon_state = "16-0" - }, -/obj/structure/cable{ - d2 = 4; - icon_state = "0-4" - }, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/aftstarboard) -"pI" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 1; - icon_state = "warning" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/aftstarboard) -"pK" = ( -/obj/structure/table/steel, -/obj/machinery/alarm{ - dir = 4; - pixel_x = -22 - }, -/obj/item/storage/belt/utility{ - pixel_x = -4; - pixel_y = 16 - }, -/obj/item/storage/belt/utility{ - pixel_x = -6; - pixel_y = 12 - }, -/obj/item/wrench{ - pixel_x = -7; - pixel_y = -6 - }, -/obj/item/screwdriver{ - pixel_x = -2; - pixel_y = -1 - }, -/obj/item/weldingtool/largetank{ - pixel_x = 12; - pixel_y = 1 - }, -/obj/item/device/flashlight/lantern{ - pixel_x = -14; - pixel_y = 2 - }, -/turf/simulated/floor/tiled/monotile, -/area/quartermaster/expedition) -"pM" = ( -/obj/structure/iv_drip, -/obj/structure/hygiene/sink/kitchen{ - pixel_x = 32 - }, -/obj/effect/decal/cleanable/cobweb2, -/turf/simulated/floor/plating, -/area/vacant/infirmary) -"pN" = ( -/obj/structure/closet/crate/plastic, -/obj/item/bodybag, -/turf/simulated/floor/tiled/white, -/area/vacant/infirmary) -"pO" = ( -/obj/structure/sign/bluecross_2, -/turf/simulated/wall/prepainted, -/area/vacant/infirmary) -"pP" = ( -/obj/structure/table/steel, -/obj/item/device/scanner/gas{ - pixel_x = 6; - pixel_y = -5 - }, -/obj/item/device/scanner/gas{ - pixel_x = 6; - pixel_y = -6 - }, -/obj/item/storage/excavation{ - pixel_x = -8; - pixel_y = 11 - }, -/obj/item/device/measuring_tape{ - pixel_x = 9; - pixel_y = 13 - }, -/obj/machinery/light{ - dir = 8 - }, -/obj/item/device/scanner/mining{ - pixel_x = -11; - pixel_y = -6 - }, -/obj/item/device/scanner/mining{ - pixel_x = -10; - pixel_y = -7 - }, -/obj/item/clothing/glasses/meson{ - pixel_y = -8 - }, -/obj/item/clothing/glasses/meson{ - pixel_y = -4 - }, -/turf/simulated/floor/tiled/monotile, -/area/quartermaster/expedition) -"pQ" = ( -/obj/effect/floor_decal/industrial/outline/grey, -/obj/random/torchcloset, -/obj/random/maintenance, -/obj/random/maintenance, -/turf/simulated/floor/tiled/techmaint, -/area/maintenance/fifthdeck/fore) -"pR" = ( -/obj/machinery/disposal, -/obj/effect/floor_decal/industrial/hatch/yellow, -/obj/item/device/radio/intercom{ - dir = 4; - pixel_x = -21 - }, -/obj/structure/disposalpipe/trunk{ - dir = 4 - }, -/turf/simulated/floor/tiled/monotile, -/area/quartermaster/expedition) -"pS" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/fore) -"pT" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/random/trash, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/fore) -"pU" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/mining{ - name = "Expedition Prep" - }, -/obj/structure/disposalpipe/segment, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/steel_ridged, -/area/quartermaster/expedition) -"pV" = ( -/obj/machinery/vending/medical, -/turf/simulated/floor/tiled/white, -/area/vacant/infirmary) -"pW" = ( -/obj/machinery/chem_master, -/obj/machinery/power/apc{ - dir = 1; - name = "north bump"; - pixel_y = 24; - req_access = list(list("ACCESS_ENGINE_EQUIP","ACCESS_ATMOS")) - }, -/obj/structure/cable/green{ - d2 = 2; - icon_state = "0-2" - }, -/turf/simulated/floor/tiled/white, -/area/vacant/infirmary) -"pX" = ( -/obj/effect/paint/red, -/turf/simulated/wall/titanium, -/area/exploration_shuttle/fuel) -"pY" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/random/junk, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/fore) -"qa" = ( -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/railing/mapped, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/fore) -"qb" = ( -/obj/structure/fuel_port{ - pixel_x = 32 - }, -/obj/machinery/portable_atmospherics/canister/air/airlock{ - start_pressure = 6000 - }, -/obj/machinery/atmospherics/portables_connector, -/obj/effect/floor_decal/industrial/outline/blue, -/turf/simulated/floor/tiled/techfloor, -/area/guppy_hangar/start) -"qc" = ( -/obj/structure/catwalk, -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/fore) -"qd" = ( -/obj/structure/dispenser/oxygen, -/turf/simulated/floor/tiled/monotile, -/area/quartermaster/expedition/eva) -"qe" = ( -/obj/structure/closet/toolcloset/excavation, -/obj/effect/floor_decal/corner/brown/mono, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled/monotile, -/area/quartermaster/expedition) -"qf" = ( -/obj/structure/closet/secure_closet/secure_closet/xenoarchaeologist_torch, -/obj/effect/floor_decal/corner/brown/mono, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled/monotile, -/area/quartermaster/expedition) -"qg" = ( -/obj/structure/table/rack, -/obj/item/shovel{ - pixel_x = -5 - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/item/pickaxe, -/obj/item/shovel, -/obj/item/pickaxe, -/turf/simulated/floor/tiled/monotile, -/area/quartermaster/expedition) -"qh" = ( -/obj/structure/closet/secure_closet/prospector, -/obj/effect/floor_decal/corner/brown/mono, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/light{ - dir = 4 - }, -/turf/simulated/floor/tiled/monotile, -/area/quartermaster/expedition) -"qi" = ( -/obj/structure/table/rack, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/item/storage/ore, -/obj/item/storage/ore, -/obj/item/storage/ore, -/obj/item/storage/belt/archaeology, -/turf/simulated/floor/tiled/monotile, -/area/quartermaster/expedition) -"qj" = ( -/obj/machinery/portable_atmospherics/canister/oxygen, -/turf/simulated/floor/tiled/monotile, -/area/quartermaster/expedition/eva) -"qk" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/fuel{ - dir = 8 - }, -/obj/machinery/camera/network/exploration_shuttle{ - c_tag = "Charon - Fuel Compartment"; - dir = 4 - }, -/obj/structure/handrail{ - dir = 4 - }, -/obj/machinery/meter, -/turf/simulated/floor/tiled/techfloor, -/area/exploration_shuttle/fuel) -"ql" = ( -/obj/effect/wallframe_spawn/no_grille, -/obj/machinery/door/firedoor, -/turf/simulated/floor/plating, -/area/quartermaster/expedition) -"qm" = ( -/obj/machinery/suit_cycler/science, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled/monotile, -/area/quartermaster/expedition/eva) -"qn" = ( -/obj/machinery/suit_storage_unit/mining, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/item/device/radio/intercom{ - dir = 4; - pixel_x = -21 - }, -/turf/simulated/floor/tiled/monotile, -/area/quartermaster/expedition/eva) -"qo" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/tiled/monotile, -/area/quartermaster/expedition/eva) -"qp" = ( -/obj/machinery/suit_cycler/mining, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled/monotile, -/area/quartermaster/expedition/eva) -"qq" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/mining{ - name = "Expedition EVA" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/tiled/steel_ridged, -/area/quartermaster/expedition) -"qr" = ( -/obj/machinery/light_switch{ - pixel_x = 22; - pixel_y = -22 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/tiled/monotile, -/area/quartermaster/expedition/eva) -"qu" = ( -/obj/machinery/light_switch{ - pixel_x = 22; - pixel_y = -22 - }, -/obj/structure/disposalpipe/segment{ - dir = 2; - icon_state = "pipe-c" - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/tiled/monotile, -/area/quartermaster/expedition) -"qv" = ( -/obj/machinery/alarm{ - pixel_y = 23; - req_access = list(list("ACCESS_ENGINE_EQUIP","ACCESS_ATMOS")) - }, -/obj/effect/floor_decal/corner/brown{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/fifthdeck/aft) -"qy" = ( -/obj/effect/floor_decal/corner/brown{ - dir = 5 - }, -/obj/structure/disposalpipe/segment, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/fifthdeck/aft) -"qz" = ( -/obj/effect/floor_decal/corner/brown{ - dir = 1 - }, -/obj/machinery/alarm{ - pixel_y = 23; - req_access = list(list("ACCESS_ENGINE_EQUIP","ACCESS_ATMOS")) - }, -/obj/structure/sign/deck/fifth{ - pixel_y = 32 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/fifthdeck/aft) -"qA" = ( -/obj/effect/floor_decal/corner/brown/half{ - dir = 1 - }, -/obj/machinery/atmospherics/unary/vent_pump/on, -/turf/simulated/floor/tiled/monotile, -/area/hallway/primary/fifthdeck/aft) -"qB" = ( -/obj/effect/floor_decal/corner/brown{ - dir = 5 - }, -/obj/structure/cable/green{ - d2 = 2; - icon_state = "0-2" - }, -/obj/machinery/power/apc{ - dir = 1; - name = "north bump"; - pixel_y = 24 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/fifthdeck/aft) -"qC" = ( -/obj/machinery/door/airlock/external{ - frequency = 1380; - icon_state = "closed"; - id_tag = "petrov_shuttle_dock_inner"; - name = "Docking Port Airlock" - }, -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/hallway/primary/fifthdeck/aft) -"qD" = ( -/obj/effect/floor_decal/corner/brown/half, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/light, -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/closet/firecloset, -/turf/simulated/floor/tiled/monotile, -/area/hallway/primary/fifthdeck/aft) -"qE" = ( -/obj/effect/floor_decal/corner/brown{ - dir = 10 - }, -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/fifthdeck/aft) -"qF" = ( -/obj/effect/floor_decal/corner/brown{ - dir = 10 - }, -/obj/machinery/light, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/fifthdeck/aft) -"qH" = ( -/obj/effect/floor_decal/corner/brown/half, -/obj/machinery/firealarm{ - dir = 1; - pixel_y = -24 - }, -/turf/simulated/floor/tiled/monotile, -/area/hallway/primary/fifthdeck/aft) -"qI" = ( -/obj/effect/catwalk_plated, -/obj/structure/cable/green{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/plating, -/area/hallway/primary/fifthdeck/fore) -"qJ" = ( -/obj/effect/floor_decal/corner/brown/half{ - dir = 1 - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/structure/closet/firecloset, -/obj/machinery/rotating_alarm/security_alarm, -/turf/simulated/floor/tiled/monotile, -/area/hallway/primary/fifthdeck/fore) -"qK" = ( -/obj/effect/catwalk_plated, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/plating, -/area/hallway/primary/fifthdeck/fore) -"qL" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/disposalpipe/segment, -/obj/machinery/light{ - dir = 8 - }, -/turf/simulated/floor/tiled/monotile, -/area/hallway/primary/fifthdeck/fore) -"qM" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/random/trash, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/fore) -"qN" = ( -/obj/effect/catwalk_plated, -/obj/machinery/firealarm{ - dir = 8; - pixel_x = -24 - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/plating, -/area/hallway/primary/fifthdeck/fore) -"qO" = ( -/obj/structure/cable/green, -/obj/machinery/power/apc{ - dir = 8; - name = "west bump"; - pixel_x = -24 - }, -/obj/effect/floor_decal/corner/mauve/half, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/tiled/monotile, -/area/hallway/primary/fifthdeck/fore) -"qP" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 4; - icon_state = "warning" - }, -/turf/simulated/floor/plating, -/area/maintenance/substation/fifthdeck) -"qQ" = ( -/obj/machinery/door/blast/shutters{ - id_tag = "hanger_atmos_storage"; - name = "Storage Shutters" - }, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/dark, -/area/quartermaster/expedition/atmos) -"qR" = ( -/obj/effect/floor_decal/corner/mauve{ - dir = 6 - }, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 8 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/fifthdeck/fore) -"qS" = ( -/obj/structure/cable/green{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 8 - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/fore) -"qT" = ( -/obj/structure/cable, -/obj/effect/floor_decal/industrial/warning{ - dir = 4; - icon_state = "warning" - }, -/obj/machinery/power/terminal{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/maintenance/substation/fifthdeck) -"qU" = ( -/obj/machinery/light/small{ - dir = 4 - }, -/obj/machinery/power/breakerbox/activated{ - RCon_tag = "Fifth Deck Substation Bypass" - }, -/turf/simulated/floor/plating, -/area/maintenance/substation/fifthdeck) -"qV" = ( -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/fore) -"qW" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/fore) -"qX" = ( -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/fore) -"qY" = ( -/obj/structure/cable/green{ - d2 = 4; - icon_state = "0-4" - }, -/obj/machinery/power/apc{ - dir = 8; - name = "west bump"; - pixel_x = -24 - }, -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 4; - icon_state = "warningcorner" - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/turf/simulated/floor/plating, -/area/maintenance/substation/fifthdeck) -"qZ" = ( -/obj/structure/cable/green{ - d2 = 2; - icon_state = "0-2" - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/power/smes/buildable/preset/torch/substation{ - RCon_tag = "Substation - Fifth Deck" - }, -/turf/simulated/floor/plating, -/area/maintenance/substation/fifthdeck) -"ra" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, -/obj/structure/railing/mapped{ - dir = 8; - icon_state = "railing0-1" - }, -/obj/structure/railing/mapped{ - dir = 1; - icon_state = "railing0-1" - }, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/fore) -"rb" = ( -/obj/structure/sign/warning/high_voltage, -/turf/simulated/wall/prepainted, -/area/maintenance/substation/fifthdeck) -"rc" = ( -/obj/machinery/power/sensor{ - name = "Powernet Sensor - Fifth Deck Subgrid"; - name_tag = "Fifth Deck Subgrid" - }, -/obj/structure/cable/green, -/obj/structure/cable/green{ - d2 = 8; - icon_state = "0-8" - }, -/obj/machinery/camera/network/engineering{ - c_tag = "Substation - Fifth Deck"; - dir = 1 - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 1; - icon_state = "warning" - }, -/turf/simulated/floor/plating, -/area/maintenance/substation/fifthdeck) -"re" = ( -/obj/machinery/door/firedoor, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/door/airlock/engineering{ - name = "Fifth Deck Substation" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/maintenance/substation/fifthdeck) -"rg" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/fore) -"ri" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/obj/structure/railing/mapped{ - dir = 4; - icon_state = "railing0-1" - }, -/obj/structure/railing/mapped{ - dir = 1; - icon_state = "railing0-1" - }, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/fore) -"rj" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/wall/prepainted, -/area/maintenance/fifthdeck/aftport) -"rk" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/valve/shutoff/supply, -/obj/structure/railing/mapped{ - dir = 4; - icon_state = "railing0-1" - }, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/fore) -"rl" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/obj/structure/railing/mapped{ - dir = 1; - icon_state = "railing0-1" - }, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/fore) -"rm" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/railing/mapped{ - dir = 8; - icon_state = "railing0-1" - }, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/fore) -"rn" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/obj/structure/railing/mapped{ - dir = 8; - icon_state = "railing0-1" - }, -/obj/structure/railing/mapped, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/fore) -"ro" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/railing/mapped, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/fore) -"rp" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/random/trash, -/obj/structure/railing/mapped{ - dir = 4; - icon_state = "railing0-1" - }, -/obj/structure/railing/mapped, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/fore) -"rq" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/fore) -"rr" = ( -/obj/structure/cable/green{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/fore) -"rs" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/fuel{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/turf/simulated/floor/tiled/techfloor, -/area/exploration_shuttle/fuel) -"rt" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/fore) -"ru" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/fore) -"rw" = ( -/obj/structure/cable{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/structure/disposalpipe/segment, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/fore) -"rx" = ( -/obj/machinery/door/firedoor, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/door/airlock/engineering{ - name = "Fifth Deck Substation" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/maintenance/substation/fifthdeck) -"ry" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/disposalpipe/segment, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/fore) -"rz" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/aftport) -"rA" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/fore) -"rB" = ( -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/fore) -"rC" = ( -/obj/structure/cable/cyan{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/fore) -"rD" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/aftport) -"rE" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/wallframe_spawn/no_grille, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/fore) -"rF" = ( -/obj/machinery/power/smes/buildable/preset/torch/hangar{ - RCon_tag = "Substation - Hangar" - }, -/obj/structure/cable/cyan, -/turf/simulated/floor/plating, -/area/maintenance/substation/fifthdeck) -"rG" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/fore) -"rH" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/fore) -"rI" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/fore) -"rK" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/structure/catwalk, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/fore) -"rL" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/disposalpipe/segment, -/obj/machinery/door/firedoor, -/obj/effect/floor_decal/industrial/hatch/yellow, -/turf/simulated/floor/tiled/monotile, -/area/hallway/primary/fifthdeck/fore) -"rM" = ( -/obj/effect/catwalk_plated, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/disposalpipe/segment, -/obj/machinery/camera/network/fifth_deck{ - c_tag = "Fifth Deck Hallway - Stairwell"; - dir = 4 - }, -/turf/simulated/floor/plating, -/area/hallway/primary/fifthdeck/fore) -"rN" = ( -/obj/effect/catwalk_plated, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 8 - }, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/plating, -/area/hallway/primary/fifthdeck/fore) -"rO" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/tele_beacon, -/turf/simulated/floor/tiled, -/area/hallway/primary/fifthdeck/fore) -"rP" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/fifthdeck/fore) -"rQ" = ( -/obj/effect/catwalk_plated, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/hallway/primary/fifthdeck/fore) -"rR" = ( -/obj/effect/catwalk_plated, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/obj/structure/disposalpipe/sortjunction{ - dir = 2; - name = "Pilots Lounge"; - sort_type = "Pilot's Lounge" - }, -/turf/simulated/floor/plating, -/area/hallway/primary/fifthdeck/fore) -"rS" = ( -/obj/effect/catwalk_plated, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/hallway/primary/fifthdeck/fore) -"rT" = ( -/obj/effect/catwalk_plated, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 - }, -/turf/simulated/floor/plating, -/area/hallway/primary/fifthdeck/fore) -"rU" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/meter, -/obj/structure/railing/mapped{ - dir = 8; - icon_state = "railing0-1" - }, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/fore) -"rV" = ( -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/fore) -"rW" = ( -/obj/structure/table/standard, -/obj/item/bodybag, -/obj/item/storage/box/autoinjectors, -/turf/simulated/floor/tiled/white, -/area/vacant/infirmary) -"rY" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/aftport) -"rZ" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/meter, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/aftport) -"sa" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/aftport) -"sb" = ( -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/railing/mapped, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/meter, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/aftstarboard) -"sc" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/disposalpipe/segment, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/aftport) -"se" = ( -/obj/effect/floor_decal/industrial/outline/grey, -/obj/machinery/portable_atmospherics/powered/pump/filled, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/fifthdeck/fore) -"sf" = ( -/obj/machinery/light/small{ - dir = 4; - icon_state = "bulb1" - }, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/fifthdeck/fore) -"sg" = ( -/obj/machinery/light/small, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/fifthdeck/fore) -"sh" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/aftstarboard) -"si" = ( -/obj/structure/disposalpipe/segment{ - dir = 2; - icon_state = "pipe-c" - }, -/obj/structure/catwalk, -/obj/machinery/light/small{ - dir = 1 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/fore) -"sj" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/light/small{ - dir = 1 - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/aftport) -"sk" = ( -/obj/structure/ladder/up, -/obj/effect/floor_decal/industrial/hatch/yellow, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/fifthdeck/aftport) -"sl" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/hatch/maintenance, -/turf/simulated/floor/tiled/techfloor/grid, -/area/maintenance/fifthdeck/aftport) -"sm" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 8 - }, -/obj/effect/floor_decal/corner/brown{ - dir = 6 - }, -/obj/machinery/light{ - dir = 4 - }, -/obj/structure/sign/deck/fifth{ - dir = 8; - pixel_x = 40 - }, -/obj/machinery/rotating_alarm/security_alarm{ - dir = 8 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/fifthdeck/fore) -"sn" = ( -/obj/effect/floor_decal/corner/mauve/mono, -/turf/simulated/floor/tiled/monotile, -/area/hallway/primary/fifthdeck/fore) -"so" = ( -/obj/effect/floor_decal/corner/brown/mono, -/obj/structure/closet/hydrant{ - pixel_y = 32 - }, -/turf/simulated/floor/tiled/monotile, -/area/hallway/primary/fifthdeck/fore) -"sp" = ( -/obj/machinery/camera/network/expedition{ - c_tag = "Expedition - Prep"; - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 - }, -/turf/simulated/floor/tiled/monotile, -/area/quartermaster/expedition) -"sq" = ( -/turf/simulated/floor/tiled/white, -/area/vacant/infirmary) -"sr" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/hatch/maintenance, -/turf/simulated/floor/tiled/techfloor/grid, -/area/maintenance/fifthdeck/aftstarboard) -"ss" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/floor_decal/industrial/warning, -/turf/simulated/floor/tiled/dark, -/area/quartermaster/storage) -"su" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/fore) -"sw" = ( -/obj/structure/reagent_dispensers/watertank, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/fifthdeck/aftstarboard) -"sx" = ( -/obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/fifthdeck/aftstarboard) -"sz" = ( -/obj/structure/reagent_dispensers/fueltank, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/fifthdeck/aftstarboard) -"sA" = ( -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/table/steel, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/fifthdeck/aftstarboard) -"sB" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/binary/pump/on{ - name = "starboard thrust pump" - }, -/turf/simulated/floor/tiled/techfloor, -/area/exploration_shuttle/fuel) -"sC" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden, -/obj/structure/railing/mapped, -/obj/structure/railing/mapped{ - dir = 4; - icon_state = "railing0-1" - }, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/aftstarboard) -"sH" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 8 - }, -/obj/structure/fuel_port{ - pixel_x = 32 - }, -/turf/simulated/floor/tiled/techfloor, -/area/exploration_shuttle/fuel) -"sI" = ( -/obj/effect/landmark{ - name = "xeno_spawn"; - pixel_x = -1 - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/plating, -/area/vacant/infirmary) -"sJ" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden{ - dir = 1 - }, -/obj/machinery/door/airlock/external{ - autoset_access = 0; - frequency = 1431; - id_tag = "guppy_shuttle_outer"; - name = "Guppy External Access" - }, -/obj/machinery/shield_diffuser, -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/guppy_hangar/start) -"sL" = ( -/obj/machinery/atmospherics/unary/tank/air{ - dir = 1; - start_pressure = 4559.63 - }, -/obj/effect/floor_decal/industrial/outline/blue, -/obj/machinery/light{ - dir = 8 - }, -/turf/simulated/floor/tiled/techfloor, -/area/exploration_shuttle/atmos) -"sN" = ( -/obj/structure/bed/padded, -/obj/item/bedsheet/medical, -/turf/simulated/floor/tiled/white, -/area/vacant/infirmary) -"sP" = ( -/obj/structure/filingcabinet/chestdrawer, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/white, -/area/vacant/infirmary) -"sQ" = ( -/obj/structure/closet/secure_closet/medical2, -/obj/item/defibrillator/loaded, -/turf/simulated/floor/tiled/white, -/area/vacant/infirmary) -"sR" = ( -/obj/machinery/reagentgrinder, -/obj/item/reagent_containers/glass/beaker/large, -/turf/simulated/floor/plating, -/area/vacant/infirmary) -"sS" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/white, -/area/vacant/infirmary) -"sT" = ( -/obj/random_multi/single_item/skelestand/maint, -/turf/simulated/floor/plating, -/area/vacant/infirmary) -"sU" = ( -/obj/random/obstruction, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/plating, -/area/vacant/infirmary) -"sW" = ( -/obj/structure/sign/warning/biohazard, -/turf/simulated/wall/prepainted, -/area/rnd/canister) -"sX" = ( -/obj/machinery/portable_atmospherics/canister/oxygen, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/floor/tiled/techfloor, -/area/rnd/canister) -"sY" = ( -/obj/machinery/portable_atmospherics/canister/hydrogen, -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/obj/effect/floor_decal/industrial/outline/grey, -/obj/machinery/firealarm{ - pixel_y = 24 - }, -/turf/simulated/floor/tiled/techfloor, -/area/rnd/canister) -"sZ" = ( -/obj/machinery/portable_atmospherics/canister/empty, -/obj/structure/sign/warning/nosmoking_1{ - dir = 8; - pixel_x = 32 - }, -/obj/machinery/light/small{ - dir = 1 - }, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/floor/tiled/techfloor, -/area/rnd/canister) -"tb" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/effect/wallframe_spawn/reinforced, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/fore) -"tc" = ( -/obj/machinery/portable_atmospherics/canister/nitrogen, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/floor/tiled/techfloor, -/area/rnd/canister) -"td" = ( -/obj/machinery/portable_atmospherics/canister/air, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/floor/tiled/techfloor, -/area/rnd/canister) -"te" = ( -/obj/machinery/portable_atmospherics/canister/phoron, -/obj/effect/floor_decal/industrial/outline/grey, -/obj/structure/sign/warning/compressed_gas{ - dir = 8; - pixel_x = 32 - }, -/turf/simulated/floor/tiled/techfloor, -/area/rnd/canister) -"tf" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/research{ - name = "Canister Storage" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 4 - }, -/turf/simulated/floor/tiled/steel_ridged, -/area/rnd/canister) -"tg" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 4 - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/rnd/canister) -"th" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 4 - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/rnd/canister) -"ti" = ( -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 4 - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/rnd/canister) -"tj" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/research{ - name = "Canister Storage" - }, -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 4 - }, -/turf/simulated/floor/tiled/steel_ridged, -/area/rnd/canister) -"tk" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 1 - }, -/turf/simulated/floor/tiled/techfloor, -/area/rnd/canister) -"tl" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 4 - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/rnd/canister) -"tm" = ( -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/effect/wallframe_spawn/reinforced, -/turf/simulated/floor/plating, -/area/maintenance/substation/fifthdeck) -"tn" = ( -/obj/machinery/portable_atmospherics/canister/carbon_dioxide, -/obj/machinery/alarm{ - dir = 4; - pixel_x = -23 - }, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/floor/tiled/techfloor, -/area/rnd/canister) -"to" = ( -/obj/random/trash, -/obj/structure/disposalpipe/sortjunction/flipped{ - dir = 4; - name = "Expedition Prep"; - sort_type = "Expedition Prep" - }, -/obj/structure/railing/mapped{ - dir = 1; - icon_state = "railing0-1" - }, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/fore) -"tp" = ( -/obj/machinery/door/airlock/maintenance{ - name = "Expedition EVA Maintenance" - }, -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/tiled/steel_ridged, -/area/quartermaster/expedition/eva) -"tr" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/aftport) -"ts" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 8 - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/catwalk, -/obj/structure/disposalpipe/junction{ - dir = 4; - icon_state = "pipe-j2" - }, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/aftport) -"tt" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 1 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/aftport) -"tu" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/disposalpipe/segment{ - dir = 1; - icon_state = "pipe-c" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/obj/structure/cable{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/fifthdeck/aftport) -"tv" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/aftport) -"tw" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/fuel{ - dir = 6 - }, -/obj/machinery/atmospherics/unary/tank/air{ - dir = 1; - start_pressure = 4559.63 - }, -/obj/effect/floor_decal/industrial/outline/blue, -/turf/simulated/floor/tiled/techfloor, -/area/exploration_shuttle/atmos) -"tx" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/aftport) -"ty" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/random/junk, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/aftport) -"tz" = ( -/obj/item/seeds/appleseed, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/aftport) -"tA" = ( -/obj/machinery/portable_atmospherics/hydroponics, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/aftport) -"tC" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/door/airlock/maintenance, -/turf/simulated/floor/tiled/techfloor/grid, -/area/maintenance/fifthdeck/aftport) -"tD" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/structure/catwalk, -/obj/machinery/alarm{ - dir = 1; - pixel_y = -22 - }, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/aftport) -"tE" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 - }, -/obj/random/trash, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/aftport) -"tF" = ( -/obj/machinery/door/airlock/external{ - frequency = 1380; - icon_state = "closed"; - id_tag = "petrov_shuttle_dock_inner"; - name = "Docking Port Airlock" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/hallway/primary/fifthdeck/aft) -"tG" = ( -/obj/machinery/door/airlock/external{ - frequency = 1380; - icon_state = "closed"; - id_tag = "petrov_shuttle_dock_outer"; - name = "Docking Port Airlock" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/hallway/primary/fifthdeck/aft) -"tH" = ( -/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{ - dir = 1; - id_tag = "petrov_shuttle_dock_pump" - }, -/obj/effect/floor_decal/techfloor, -/turf/simulated/floor/tiled/techfloor/grid, -/area/hallway/primary/fifthdeck/aft) -"tJ" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/tiled/white, -/area/shuttle/petrov/hallwaya) -"tO" = ( -/obj/effect/catwalk_plated, -/obj/machinery/camera/network/hangar{ - dir = 4 - }, -/obj/machinery/rotating_alarm/security_alarm{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/quartermaster/hangar) -"tQ" = ( -/obj/effect/floor_decal/corner/brown{ - dir = 10 - }, -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/camera/network/fifth_deck{ - c_tag = "Fifth Deck Hallway - Aft"; - dir = 1 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/fifthdeck/aft) -"tR" = ( -/obj/structure/window/reinforced{ - dir = 1 - }, -/obj/structure/window/reinforced{ - dir = 8 - }, -/obj/machinery/chem_master, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/effect/floor_decal/industrial/warning{ - dir = 9 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/shuttle/petrov/analysis) -"tT" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 1 - }, -/turf/simulated/floor/reinforced/airless, -/area/shuttle/petrov/control) -"tU" = ( -/obj/structure/railing/mapped, -/obj/structure/railing/mapped{ - dir = 8; - icon_state = "railing0-1" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/aftport) -"tV" = ( -/obj/machinery/portable_atmospherics/canister/air, -/obj/effect/floor_decal/industrial/outline, -/turf/simulated/floor/tiled/dark, -/area/quartermaster/expedition/atmos) -"tW" = ( -/obj/effect/floor_decal/industrial/outline/grey, -/obj/structure/bed/chair/office/dark{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/fifthdeck/aftport) -"tX" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/railing/mapped, -/obj/structure/railing/mapped{ - dir = 4; - icon_state = "railing0-1" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/aftport) -"tY" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/meter, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/aftstarboard) -"ub" = ( -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/catwalk, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/aftport) -"uc" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/door/firedoor, -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/door/airlock/maintenance, -/turf/simulated/floor/tiled/techfloor/grid, -/area/maintenance/fifthdeck/aftport) -"ud" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/obj/structure/disposalpipe/segment, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/catwalk, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/aftport) -"ue" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/obj/structure/catwalk, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/aftport) -"ug" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/railing/mapped{ - dir = 8; - icon_state = "railing0-1" - }, -/obj/structure/railing/mapped, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/aftport) -"uh" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/aftport) -"ui" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/aftport) -"uj" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply, -/obj/structure/catwalk, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/aftport) -"uk" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/aftport) -"ul" = ( -/obj/machinery/light/small{ - dir = 1 - }, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/fifthdeck/aftport) -"um" = ( -/obj/effect/catwalk_plated, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/plating, -/area/hallway/primary/fifthdeck/aft) -"un" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 1 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/tele_beacon, -/turf/simulated/floor/tiled/monotile, -/area/hallway/primary/fifthdeck/aft) -"uo" = ( -/obj/effect/catwalk_plated, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 4 - }, -/obj/structure/disposalpipe/sortjunction/flipped{ - dir = 1; - name = "Mining"; - sort_type = "Mining" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/plating, -/area/hallway/primary/fifthdeck/aft) -"up" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/fifthdeck/aft) -"uq" = ( -/obj/machinery/door/firedoor, -/obj/effect/floor_decal/industrial/hatch/yellow, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/monotile, -/area/hallway/primary/fifthdeck/aft) -"ur" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/fifthdeck/aft) -"us" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/fifthdeck/aft) -"ut" = ( -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/hologram/holopad, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/monotile, -/area/hallway/primary/fifthdeck/aft) -"uu" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 4; - level = 2 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/fifthdeck/aft) -"uv" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/random/trash, -/obj/structure/railing/mapped{ - dir = 1; - icon_state = "railing0-1" - }, -/obj/structure/railing/mapped{ - dir = 8; - icon_state = "railing0-1" - }, -/obj/machinery/meter, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/aftport) -"uw" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/railing/mapped{ - dir = 4; - icon_state = "railing0-1" - }, -/obj/structure/railing/mapped{ - dir = 1; - icon_state = "railing0-1" - }, -/obj/machinery/meter, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/aftport) -"ux" = ( -/obj/structure/table/rack, -/obj/random/maintenance, -/obj/random/maintenance, -/obj/random/maintenance, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/floor/tiled/techmaint, -/area/maintenance/fifthdeck/fore) -"uy" = ( -/obj/structure/table/steel, -/obj/machinery/cell_charger, -/obj/random/powercell, -/turf/simulated/floor/tiled/techmaint, -/area/maintenance/fifthdeck/fore) -"uz" = ( -/obj/random/torchcloset, -/obj/random/maintenance, -/turf/simulated/floor/tiled/techmaint, -/area/maintenance/fifthdeck/fore) -"uA" = ( -/obj/structure/table/steel, -/obj/random/maintenance, -/obj/random/maintenance, -/turf/simulated/floor/tiled/techmaint, -/area/maintenance/fifthdeck/fore) -"uB" = ( -/obj/machinery/computer/modular/preset/engineering{ - dir = 4; - icon_state = "console" - }, -/turf/simulated/floor/tiled/techmaint, -/area/maintenance/fifthdeck/fore) -"uC" = ( -/obj/structure/railing/mapped{ - dir = 8; - icon_state = "railing0-1" - }, -/obj/machinery/atmospherics/valve/shutoff/scrubbers, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/fore) -"uD" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/random/junk, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/fore) -"uE" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/light/small, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/aftstarboard) -"uF" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/aftstarboard) -"uH" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/universal{ - dir = 4 - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/aftport) -"uI" = ( -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/fore) -"uK" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/fore) -"uL" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/fore) -"uM" = ( -/obj/structure/cable/green{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/railing/mapped{ - dir = 4; - icon_state = "railing0-1" - }, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/fore) -"uN" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/fuel{ - dir = 9 - }, -/obj/machinery/pipedispenser{ - anchored = 1 - }, -/turf/simulated/floor/tiled/techfloor, -/area/exploration_shuttle/atmos) -"uO" = ( -/obj/structure/cable/cyan{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/railing/mapped, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/fore) -"uP" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/railing/mapped{ - dir = 4; - icon_state = "railing0-1" - }, -/obj/structure/railing/mapped, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/fore) -"uQ" = ( -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/random/trash, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/fore) -"uS" = ( -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/fore) -"uT" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/fore) -"uU" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/effect/wallframe_spawn/no_grille, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/fore) -"uV" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/fifthdeck/fore) -"uW" = ( -/obj/structure/cable/green{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 1 - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/fore) -"uX" = ( -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 9 - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/aftport) -"uY" = ( -/obj/machinery/atmospherics/binary/pump, -/obj/structure/railing/mapped, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/aftport) -"uZ" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/wall/prepainted, -/area/maintenance/fifthdeck/fore) -"vc" = ( -/obj/effect/floor_decal/industrial/warning, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 8 - }, -/turf/simulated/floor/tiled/white, -/area/shuttle/petrov/rnd) -"ve" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/effect/floor_decal/techfloor{ - dir = 4 - }, -/obj/machinery/light/small{ - dir = 4; - icon_state = "bulb1" - }, -/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{ - dir = 8; - id_tag = "petrov_shuttle_dock_pump" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/maintenance/fifthdeck/aftstarboard) -"vf" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/railing/mapped{ - dir = 1; - icon_state = "railing0-1" - }, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/aftstarboard) -"vj" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/disposalpipe/segment, -/obj/effect/wallframe_spawn/no_grille, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/aftstarboard) -"vm" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/aftstarboard) -"vo" = ( -/obj/structure/table/standard, -/obj/item/paper_bin{ - pixel_x = 1; - pixel_y = 9 - }, -/obj/item/folder/nt, -/obj/item/pen, -/turf/simulated/floor/tiled/white, -/area/shuttle/petrov/analysis) -"vp" = ( -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, -/turf/simulated/floor/tiled/white, -/area/shuttle/petrov/hallwaya) -"vq" = ( -/obj/machinery/atmospherics/binary/pump{ - dir = 1 - }, -/obj/structure/handrail{ - dir = 4 - }, -/turf/simulated/floor/tiled/white/monotile, -/area/shuttle/petrov/isolation) -"vr" = ( -/obj/machinery/alarm{ - pixel_y = 24 - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/atmospherics/binary/pump/on{ - dir = 4; - target_pressure = 200 - }, -/turf/simulated/floor/tiled/techfloor, -/area/shuttle/petrov/maint) -"vs" = ( -/obj/machinery/portable_atmospherics/canister/empty, -/obj/machinery/atmospherics/portables_connector{ - dir = 1 - }, -/obj/effect/floor_decal/industrial/outline/red, -/turf/simulated/floor/tiled/techfloor, -/area/exploration_shuttle/atmos) -"vt" = ( -/obj/structure/shuttle/engine/heater{ - dir = 4 - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 8 - }, -/turf/simulated/floor/reinforced/airless, -/area/shuttle/petrov/isolation) -"vA" = ( -/obj/structure/cable/cyan{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden{ - dir = 1 - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/shuttle/petrov/maint) -"vC" = ( -/obj/machinery/atmospherics/pipe/simple/visible{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 - }, -/turf/simulated/floor/tiled/white, -/area/shuttle/petrov/toxins) -"vD" = ( -/obj/machinery/atmospherics/pipe/manifold4w/hidden, -/turf/simulated/floor/tiled/techfloor/grid, -/area/hallway/primary/fifthdeck/aft) -"vE" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/hallway/primary/fifthdeck/aft) -"vF" = ( -/obj/structure/sign/warning/airlock, -/turf/simulated/wall/r_wall/hull, -/area/hallway/primary/fifthdeck/aft) -"vG" = ( -/obj/structure/dispenser/oxygen, -/obj/item/device/radio/intercom{ - dir = 8; - pixel_x = 20 - }, -/turf/simulated/floor/tiled/white/monotile, -/area/shuttle/petrov/eva) -"vH" = ( -/obj/random/obstruction, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/aftport) -"vI" = ( -/obj/random/junk, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/aftport) -"vJ" = ( -/obj/item/seeds/potatoseed, -/obj/machinery/alarm{ - dir = 4; - pixel_x = -24 - }, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/aftport) -"vK" = ( -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/aftport) -"vL" = ( -/obj/structure/table/standard{ - name = "plastic table frame" - }, -/obj/item/device/flashlight/lamp, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/aftport) -"vM" = ( -/obj/structure/table/standard{ - name = "plastic table frame" - }, -/obj/random/junk, -/obj/random/maintenance/solgov, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/aftport) -"vN" = ( -/obj/machinery/smartfridge/drying_rack{ - dir = 1 - }, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/aftport) -"vO" = ( -/obj/random/junk, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/fifthdeck/aftport) -"vP" = ( -/obj/machinery/atmospherics/pipe/simple/hidden, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/aftport) -"vS" = ( -/obj/machinery/portable_atmospherics/canister/air/airlock, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/fifthdeck/aftport) -"vT" = ( -/obj/machinery/portable_atmospherics/hydroponics, -/obj/machinery/light_construct{ - dir = 1 - }, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/aftport) -"vU" = ( -/obj/item/light/tube, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/aftport) -"vW" = ( -/obj/item/material/minihoe, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/aftport) -"vY" = ( -/obj/machinery/portable_atmospherics/canister/oxygen, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/fifthdeck/aftport) -"vZ" = ( -/obj/machinery/floodlight, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/aftport) -"wa" = ( -/obj/random/trash, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/aftport) -"wc" = ( -/obj/structure/table/rack, -/obj/random/tech_supply, -/obj/random/tech_supply, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/fifthdeck/aftport) -"wd" = ( -/obj/structure/bed/chair/office/dark, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/aftport) -"we" = ( -/obj/random/junk, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/aftport) -"wf" = ( -/obj/effect/floor_decal/industrial/outline/grey, -/obj/structure/bed/chair/office/comfy/blue, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/fifthdeck/aftport) -"wg" = ( -/obj/effect/floor_decal/industrial/outline/grey, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/obj/random/trash, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/fifthdeck/aftport) -"wh" = ( -/obj/machinery/atmospherics/unary/vent_pump/high_volume/shuttle{ - dir = 1; - id_tag = "charon_cargo_pump" - }, -/obj/machinery/airlock_sensor{ - frequency = 1331; - id_tag = "charon_cargo_sensor"; - pixel_x = -23 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/exploration_shuttle/airlock) -"wj" = ( -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/fifthdeck/aftport) -"wk" = ( -/obj/effect/wallframe_spawn/no_grille, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/aftstarboard) -"wl" = ( -/obj/structure/handrail{ - dir = 8 - }, -/obj/machinery/light{ - dir = 4 - }, -/turf/simulated/floor/tiled/white/monotile, -/area/shuttle/petrov/analysis) -"wm" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/turf/simulated/floor/tiled/white, -/area/shuttle/petrov/phoron) -"wn" = ( -/obj/structure/table/standard, -/obj/item/storage/toolbox/mechanical, -/obj/item/clothing/mask/gas, -/obj/machinery/light{ - dir = 4 - }, -/turf/simulated/floor/tiled/white/monotile, -/area/shuttle/petrov/phoron) -"wr" = ( -/obj/machinery/portable_atmospherics/canister/empty, -/obj/effect/floor_decal/industrial/outline/red, -/obj/machinery/firealarm{ - pixel_y = 24 - }, -/turf/simulated/floor/tiled/dark, -/area/quartermaster/expedition/atmos) -"ws" = ( -/turf/simulated/wall/r_wall/hull, -/area/maintenance/fifthdeck/aftport) -"wt" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 1 - }, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/monotile, -/area/quartermaster/hangar) -"wu" = ( -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/hologram/holopad/longrange, -/obj/machinery/newscaster{ - pixel_y = -32 - }, -/turf/simulated/floor/lino, -/area/shuttle/petrov/rd) -"ww" = ( -/obj/machinery/atmospherics/unary/vent_pump/high_volume/shuttle{ - dir = 1; - id_tag = "charon_cargo_pump" - }, -/obj/machinery/embedded_controller/radio/airlock/airlock_controller{ - cycle_to_external_air = 1; - dir = 8; - frequency = 1331; - id_tag = "charon_cargo"; - pixel_x = 19; - req_access = list("ACCESS_TORCH_CREW"); - tag_airpump = "charon_cargo_pump"; - tag_exterior_door = "charon_cargo_outer"; - tag_exterior_sensor = "charon_cargo_exterior"; - tag_interior_door = "charon_cargo_inner"; - tag_interior_sensor = "charon_cargo_sensor" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/exploration_shuttle/airlock) -"wx" = ( -/obj/structure/table/standard, -/obj/item/device/integrated_electronics/wirer, -/obj/item/device/integrated_electronics/debugger{ - pixel_x = -5 - }, -/obj/item/device/integrated_electronics/analyzer{ - pixel_x = 6 - }, -/obj/structure/window/reinforced, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/light{ - dir = 4 - }, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/white, -/area/shuttle/petrov/equipment) -"wz" = ( -/obj/machinery/door/airlock/research{ - name = "Cockpit" - }, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/white/monotile, -/area/shuttle/petrov/cockpit) -"wA" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/catwalk, -/obj/machinery/alarm{ - dir = 8; - pixel_x = 24 - }, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/fore) -"wD" = ( -/obj/effect/wallframe_spawn/reinforced, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/aftport) -"wE" = ( -/obj/machinery/door/airlock/hatch/maintenance, -/turf/simulated/floor/tiled/white/monotile, -/area/shuttle/petrov/isolation) -"wF" = ( -/turf/simulated/wall/prepainted, -/area/command/pilot) -"wH" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/aftstarboard) -"wI" = ( -/obj/machinery/atmospherics/unary/tank/carbon_dioxide{ - dir = 1; - start_pressure = 1013.25 - }, -/obj/effect/floor_decal/industrial/outline/orange, -/turf/simulated/floor/tiled/techfloor, -/area/exploration_shuttle/fuel) -"wL" = ( -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 4 - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 8; - icon_state = "warning" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/access_button{ - command = "cycle_interior"; - frequency = 1380; - master_tag = "petrov_shuttle_airlock"; - pixel_x = -24; - pixel_y = 32 - }, -/turf/simulated/floor/tiled/white/monotile, -/area/shuttle/petrov/hallwaya) -"wM" = ( -/obj/effect/floor_decal/industrial/outline/orange, -/obj/machinery/atmospherics/unary/tank/carbon_dioxide{ - dir = 1; - start_pressure = 1013.25 - }, -/turf/simulated/floor/tiled/techfloor, -/area/exploration_shuttle/fuel) -"wU" = ( -/obj/machinery/door/blast/regular{ - dir = 8; - id_tag = "toxin_exhaust"; - name = "Toxins Exhaust Blast Doors" - }, -/turf/simulated/floor/reinforced/airless, -/area/shuttle/petrov/toxins) -"wW" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/catwalk, -/obj/structure/cable/green{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/cyan{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 1 - }, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/fore) -"wX" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden, -/turf/simulated/wall/prepainted, -/area/maintenance/fifthdeck/aftstarboard) -"wY" = ( -/obj/machinery/reagentgrinder, -/obj/item/reagent_containers/glass/beaker/large, -/obj/item/device/radio/intercom{ - dir = 4; - pixel_x = -21 - }, -/obj/machinery/light{ - dir = 8 - }, -/turf/simulated/floor/tiled/white/monotile, -/area/shuttle/petrov/equipment) -"wZ" = ( -/obj/structure/catwalk, -/obj/machinery/alarm{ - dir = 8; - pixel_x = 24 - }, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/fore) -"xd" = ( -/obj/structure/bed/chair/office/comfy/red{ - dir = 4 - }, -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/dark, -/area/shuttle/petrov/control) -"xg" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 8 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/fifthdeck/aft) -"xh" = ( -/obj/effect/wallframe_spawn/reinforced/titanium, -/obj/machinery/door/blast/regular{ - density = 0; - icon_state = "pdoor0"; - id_tag = "PetrovShield"; - name = "Petrov Blast Shutters"; - opacity = 0 - }, -/obj/effect/paint/silver, -/turf/simulated/floor/plating, -/area/shuttle/petrov/cockpit) -"xl" = ( -/obj/structure/ladder/up, -/obj/effect/floor_decal/corner/brown{ - dir = 9 - }, -/obj/structure/sign/deck/fifth{ - dir = 4; - pixel_x = -32 - }, -/turf/simulated/floor/tiled/steel_grid, -/area/hallway/primary/fifthdeck/aft) -"xm" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/fuel, -/obj/machinery/meter, -/turf/simulated/floor/tiled/techfloor, -/area/exploration_shuttle/fuel) -"xn" = ( -/obj/effect/floor_decal/industrial/outline{ - color = "#55007f"; - name = "purple outline" - }, -/obj/machinery/light{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor, -/area/exploration_shuttle/fuel) -"xp" = ( -/obj/machinery/rotating_alarm/security_alarm{ - dir = 1 - }, -/turf/simulated/floor/tiled/monotile, -/area/quartermaster/hangar) -"xr" = ( -/obj/structure/table/standard, -/obj/item/anodevice{ - pixel_x = 3; - pixel_y = 3 - }, -/obj/item/anodevice, -/obj/item/device/scanner/health, -/obj/machinery/light{ - dir = 8 - }, -/turf/simulated/floor/tiled/white/monotile, -/area/shuttle/petrov/analysis) -"xs" = ( -/obj/structure/closet/secure_closet/crew/research, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/random/maintenance/clean, -/obj/random/maintenance/clean, -/obj/random/maintenance/clean, -/obj/item/folder/nt, -/turf/simulated/floor/tiled/white/monotile, -/area/shuttle/petrov/equipment) -"xu" = ( -/obj/structure/shuttle/engine/heater, -/obj/structure/window/reinforced{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/visible/fuel{ - dir = 6 - }, -/turf/simulated/floor/plating, -/area/exploration_shuttle/atmos) -"xv" = ( -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/aftport) -"xw" = ( -/obj/structure/shuttle/engine/heater, -/obj/structure/window/reinforced{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/manifold/visible/fuel{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/exploration_shuttle/atmos) -"xy" = ( -/obj/machinery/atmospherics/portables_connector, -/obj/structure/handrail{ - dir = 8 - }, -/turf/simulated/floor/tiled/white/monotile, -/area/shuttle/petrov/isolation) -"xz" = ( -/obj/machinery/atmospherics/unary/vent_pump/high_volume/shuttle{ - id_tag = "charon_cargo_pump_out_internal" - }, -/obj/machinery/light/small{ - dir = 8 - }, -/obj/structure/handrail{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/exploration_shuttle/airlock) -"xA" = ( -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/structure/table/rack, -/obj/item/clothing/shoes/magboots, -/obj/item/clothing/suit/bio_suit/anomaly, -/obj/item/clothing/mask/breath, -/obj/item/clothing/head/bio_hood/anomaly, -/turf/simulated/floor/tiled/white/monotile, -/area/shuttle/petrov/hallwaya) -"xB" = ( -/obj/effect/floor_decal/industrial/hatch/yellow, -/obj/machinery/r_n_d/protolathe, -/obj/structure/window/reinforced{ - dir = 1 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/shuttle/petrov/rnd) -"xC" = ( -/obj/machinery/atmospherics/unary/vent_pump/high_volume/shuttle{ - id_tag = "charon_cargo_pump_out_internal" - }, -/obj/structure/handrail{ - dir = 8 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/exploration_shuttle/airlock) -"xJ" = ( -/obj/structure/shuttle/engine/heater, -/obj/structure/window/reinforced{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/manifold/visible/fuel{ - dir = 8 - }, -/turf/simulated/floor/plating, -/area/exploration_shuttle/fuel) -"xK" = ( -/obj/machinery/photocopier, -/turf/simulated/floor/lino, -/area/shuttle/petrov/rd) -"xL" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden, -/obj/structure/railing/mapped{ - dir = 4; - icon_state = "railing0-1" - }, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/aftstarboard) -"xN" = ( -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/light{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/dark/monotile, -/area/shuttle/petrov/control) -"xO" = ( -/obj/effect/wallframe_spawn/reinforced_phoron/titanium, -/obj/machinery/atmospherics/pipe/simple/visible/universal, -/obj/effect/paint/silver, -/turf/simulated/floor/reinforced, -/area/shuttle/petrov/cell1) -"xP" = ( -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/railing/mapped, -/obj/structure/railing/mapped{ - dir = 4; - icon_state = "railing0-1" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/fore) -"xR" = ( -/obj/structure/shuttle/engine/heater, -/obj/structure/window/reinforced{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/visible/fuel{ - dir = 10 - }, -/turf/simulated/floor/plating, -/area/exploration_shuttle/fuel) -"xS" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/universal, -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/shuttle/petrov/maint) -"xV" = ( -/obj/structure/closet/crate/secure/biohazard, -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/obj/machinery/alarm{ - pixel_y = 23; - req_access = list(list("ACCESS_ENGINE_EQUIP","ACCESS_ATMOS")) - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/shuttle/petrov/custodial) -"xW" = ( -/obj/machinery/atmospherics/unary/engine{ - dir = 1 - }, -/turf/simulated/floor/plating, -/area/exploration_shuttle/atmos) -"xX" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable/cyan{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/turf/simulated/floor/tiled/white, -/area/shuttle/petrov/analysis) -"xY" = ( -/obj/structure/closet/toolcloset/excavation, -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/turf/simulated/floor/tiled/white, -/area/shuttle/petrov/eva) -"xZ" = ( -/obj/machinery/suit_cycler/exploration, -/turf/simulated/floor/tiled, -/area/quartermaster/exploration) -"ya" = ( -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/door/airlock/maintenance, -/turf/simulated/floor/tiled/techfloor/grid, -/area/maintenance/fifthdeck/fore) -"yc" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/fore) -"ye" = ( -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/aftstarboard) -"yf" = ( -/obj/machinery/atmospherics/pipe/simple/heat_exchanging, -/turf/simulated/floor/reinforced/airless, -/area/shuttle/petrov/toxins) -"yi" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/cyan{ - dir = 9 - }, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/aftport) -"yk" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/aftstarboard) -"yl" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 1; - level = 2 - }, -/turf/simulated/floor/tiled/white, -/area/shuttle/petrov/hallwaya) -"ym" = ( -/obj/machinery/atmospherics/unary/vent_pump/high_volume/shuttle{ - dir = 4; - id_tag = "charon_cargo_pump_out_external" - }, -/obj/effect/floor_decal/industrial/warning, -/obj/structure/handrail{ - dir = 8 - }, -/obj/machinery/airlock_sensor{ - frequency = 1331; - id_tag = "charon_cargo_exterior"; - pixel_x = 24; - pixel_y = 8 - }, -/obj/machinery/access_button/airlock_exterior{ - frequency = 1331; - master_tag = "charon_cargo"; - pixel_x = 22; - pixel_y = -10 - }, -/turf/simulated/floor/plating, -/area/exploration_shuttle/airlock) -"yo" = ( -/obj/structure/sign/warning/hot_exhaust{ - dir = 4 - }, -/obj/effect/paint/silver, -/turf/simulated/wall/ocp_wall, -/area/shuttle/petrov/toxins) -"yp" = ( -/obj/effect/paint/red, -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 4 - }, -/turf/simulated/wall/titanium, -/area/exploration_shuttle/airlock) -"yq" = ( -/turf/simulated/wall/prepainted, -/area/maintenance/fifthdeck/fore) -"yr" = ( -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/closet/hydrant{ - pixel_y = 32 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/shuttle/petrov/hallwaya) -"ys" = ( -/obj/machinery/power/terminal{ - dir = 4 - }, -/obj/structure/cable/cyan{ - d2 = 8; - icon_state = "0-8" - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/shuttle/petrov/maint) -"yu" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/effect/floor_decal/techfloor{ - dir = 4 - }, -/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{ - dir = 8; - id_tag = "petrov_shuttle_dock_pump" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/maintenance/fifthdeck/aftstarboard) -"yv" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden, -/obj/machinery/shield_diffuser, -/obj/machinery/door/airlock/external{ - autoset_access = 0; - frequency = 1331; - id_tag = "charon_cargo_outer"; - name = "Charon External Access" - }, -/turf/simulated/floor/tiled/steel_ridged, -/area/exploration_shuttle/airlock) -"yx" = ( -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/cable/cyan{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/structure/handrail, -/obj/machinery/atmospherics/pipe/simple/hidden, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 1 - }, -/obj/item/device/radio/intercom{ - pixel_y = 23 - }, -/obj/structure/disposalpipe/segment{ - dir = 4; - icon_state = "pipe-c" - }, -/turf/simulated/floor/tiled/white, -/area/shuttle/petrov/hallwaya) -"yy" = ( -/obj/structure/table/standard, -/obj/item/crowbar, -/obj/item/flame/lighter/random, -/obj/item/storage/box/evidence, -/turf/simulated/floor/tiled/white, -/area/shuttle/petrov/analysis) -"yz" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/catwalk, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/aftstarboard) -"yA" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/cable{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/cyan{ - dir = 4 - }, -/obj/structure/railing/mapped{ - dir = 8; - icon_state = "railing0-1" - }, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/aftport) -"yB" = ( -/obj/machinery/atmospherics/binary/pump/on{ - dir = 1; - target_pressure = 2533.13 - }, -/obj/random_multi/single_item/poppy, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/fore) -"yC" = ( -/obj/effect/floor_decal/industrial/hatch/yellow, -/obj/machinery/fabricator, -/turf/simulated/floor/tiled/dark/monotile, -/area/shuttle/petrov/rnd) -"yG" = ( -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/dark/monotile, -/area/shuttle/petrov/control) -"yI" = ( -/turf/simulated/floor/plating, -/area/vacant/bar) -"yL" = ( -/obj/machinery/atmospherics/pipe/manifold4w/hidden, -/turf/simulated/floor/tiled/techfloor/grid, -/area/shuttle/petrov/hallwaya) -"yM" = ( -/obj/machinery/atmospherics/unary/vent_pump/high_volume/shuttle{ - dir = 8; - id_tag = "charon_cargo_pump_out_external" - }, -/obj/effect/floor_decal/industrial/warning, -/obj/structure/handrail{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/exploration_shuttle/airlock) -"yO" = ( -/obj/machinery/atmospherics/pipe/simple/visible{ - dir = 5 - }, -/turf/simulated/floor/tiled/white, -/area/shuttle/petrov/toxins) -"yP" = ( -/obj/machinery/door/airlock/research{ - name = "Analysis Lab" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/tiled/white/monotile, -/area/shuttle/petrov/analysis) -"yQ" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 6 - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/aftstarboard) -"yR" = ( -/obj/effect/wallframe_spawn/reinforced/titanium, -/obj/effect/paint/silver, -/turf/simulated/floor/plating, -/area/shuttle/petrov/equipment) -"yU" = ( -/obj/machinery/atmospherics/unary/heater, -/obj/machinery/light{ - dir = 1 - }, -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/white/monotile, -/area/shuttle/petrov/isolation) -"yW" = ( -/obj/effect/catwalk_plated, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/plating, -/area/hallway/primary/fifthdeck/aft) -"yY" = ( -/obj/random/junk, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/aftstarboard) -"za" = ( -/turf/simulated/floor/plating, -/area/shuttle/petrov/isolation) -"zd" = ( -/obj/machinery/atmospherics/binary/pump{ - dir = 8 - }, -/turf/simulated/floor/tiled/white, -/area/shuttle/petrov/isolation) -"zf" = ( -/obj/effect/catwalk_plated, -/obj/machinery/light/spot{ - dir = 8 - }, -/obj/machinery/alarm{ - dir = 4; - pixel_x = -32 - }, -/turf/simulated/floor/plating, -/area/quartermaster/hangar) -"zg" = ( -/obj/machinery/atmospherics/unary/engine{ - dir = 1 - }, -/turf/simulated/floor/plating, -/area/exploration_shuttle/fuel) -"zi" = ( -/obj/structure/bed, -/obj/structure/cable/cyan{ - d2 = 8; - icon_state = "0-8" - }, -/obj/machinery/power/apc{ - dir = 4; - name = "east bump"; - pixel_x = 24 - }, -/turf/simulated/floor/reinforced, -/area/shuttle/petrov/cell2) -"zk" = ( -/obj/structure/cable/cyan{ - d2 = 8; - icon_state = "0-8" - }, -/obj/machinery/power/apc{ - dir = 4; - name = "east bump"; - pixel_x = 24 - }, -/turf/simulated/floor/reinforced, -/area/shuttle/petrov/cell1) -"zl" = ( -/obj/effect/wallframe_spawn/reinforced/titanium, -/obj/effect/paint/silver, -/turf/simulated/floor/plating, -/area/shuttle/petrov/rnd) -"zm" = ( -/obj/structure/table/standard, -/obj/machinery/atmospherics/pipe/simple/visible/red, -/obj/random/tool, -/obj/machinery/button/blast_door{ - id_tag = "petrovcell1"; - name = "Test Chamber Vent"; - pixel_x = -26; - pixel_y = -26 - }, -/obj/machinery/button/ignition{ - id_tag = "Isocell1"; - pixel_x = -36; - pixel_y = -25 - }, -/turf/simulated/floor/tiled/white/monotile, -/area/shuttle/petrov/isolation) -"zn" = ( -/obj/random/tech_supply, -/obj/effect/floor_decal/industrial/outline/grey, -/obj/random/tech_supply, -/obj/random/tech_supply, -/obj/structure/largecrate, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/fifthdeck/aftport) -"zo" = ( -/obj/structure/table/reinforced, -/obj/machinery/button/blast_door{ - id_tag = "PetrovShield"; - name = "Blast Shutter Control"; - pixel_x = 5; - pixel_y = -3 - }, -/obj/item/device/radio, -/turf/simulated/floor/tiled/white/monotile, -/area/shuttle/petrov/cockpit) -"zp" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/visible{ - dir = 5 - }, -/turf/simulated/floor/tiled/white, -/area/shuttle/petrov/isolation) -"zr" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/catwalk, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/aftport) -"zs" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 8 - }, -/turf/simulated/floor/tiled/white, -/area/shuttle/petrov/phoron) -"zv" = ( -/obj/effect/floor_decal/industrial/warning/corner, -/obj/machinery/button/blast_door{ - id_tag = "hanger_atmos_storage"; - name = "Atmospheric Storage Door Control"; - pixel_x = 6; - pixel_y = -24 - }, -/obj/machinery/light_switch{ - pixel_x = -6; - pixel_y = -24 - }, -/obj/machinery/atmospherics/binary/pump/on{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark, -/area/quartermaster/expedition/atmos) -"zw" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/random/junk, -/obj/structure/railing/mapped{ - dir = 8; - icon_state = "railing0-1" - }, -/obj/structure/railing/mapped{ - dir = 1; - icon_state = "railing0-1" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/aftport) -"zB" = ( -/obj/item/device/radio/intercom{ - pixel_y = 23 - }, -/obj/machinery/camera/network/petrov{ - c_tag = "Petrov - Cockpit" - }, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/shuttle/petrov/cockpit) -"zC" = ( -/turf/simulated/floor/tiled/dark, -/area/shuttle/petrov/control) -"zH" = ( -/obj/machinery/atmospherics/pipe/simple/visible{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/shuttle/petrov/isolation) -"zK" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/shuttle/petrov/control) -"zL" = ( -/obj/structure/table/steel, -/obj/item/device/flashlight/lamp/green, -/turf/simulated/floor/wood/walnut{ - icon_state = "walnut_broken0" - }, -/area/vacant/bar) -"zO" = ( -/obj/effect/floor_decal/industrial/hatch/yellow, -/obj/machinery/r_n_d/destructive_analyzer, -/turf/simulated/floor/tiled/dark/monotile, -/area/shuttle/petrov/rnd) -"zP" = ( -/obj/machinery/atmospherics/pipe/simple/visible{ - dir = 4 - }, -/obj/machinery/meter, -/turf/simulated/floor/tiled/white/monotile, -/area/shuttle/petrov/isolation) -"zS" = ( -/obj/structure/sign/solgov, -/turf/simulated/wall/r_wall/hull, -/area/hallway/primary/fifthdeck/aft) -"zW" = ( -/obj/structure/cable/cyan{ - d2 = 2; - icon_state = "0-2" - }, -/obj/item/frame/apc, -/obj/machinery/light/small{ - dir = 1 - }, -/turf/simulated/floor/wood/walnut, -/area/vacant/bar) -"zZ" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/simulated/wall/prepainted, -/area/maintenance/fifthdeck/aftport) -"Ac" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/door/airlock/external{ - frequency = 1380; - icon_state = "closed"; - id_tag = "petrov_shuttle_outer"; - name = "Petrov Exterior Access" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/shuttle/petrov/maint) -"Ae" = ( -/obj/machinery/suit_cycler/science, -/obj/machinery/firealarm{ - dir = 8; - pixel_x = -24 - }, -/obj/machinery/light{ - dir = 8 - }, -/obj/structure/cable/cyan{ - d2 = 2; - icon_state = "0-2" - }, -/obj/machinery/power/apc{ - dir = 1; - name = "north bump"; - pixel_y = 24 - }, -/turf/simulated/floor/tiled/white/monotile, -/area/shuttle/petrov/eva) -"Ag" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 8; - icon_state = "warning" - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/shuttle/petrov/analysis) -"Ah" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/light/small{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/hidden, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/shuttle/petrov/maint) -"Ak" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 - }, -/obj/structure/cable/cyan{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/turf/simulated/floor/tiled/white, -/area/shuttle/petrov/equipment) -"Al" = ( -/obj/effect/paint/silver, -/turf/simulated/wall/titanium, -/area/shuttle/petrov/hallwaya) -"An" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 4 - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/aftstarboard) -"Ao" = ( -/obj/structure/handrail{ - dir = 1 - }, -/turf/simulated/floor/tiled/white, -/area/shuttle/petrov/hallwaya) -"Ap" = ( -/obj/structure/reagent_dispensers/coolanttank, -/turf/simulated/floor/tiled/white/monotile, -/area/shuttle/petrov/analysis) -"Aq" = ( -/obj/item/stool/padded, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 8 - }, -/turf/simulated/floor/tiled/white/monotile, -/area/shuttle/petrov/equipment) -"As" = ( -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/noticeboard{ - pixel_y = 32 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/shuttle/petrov/hallwaya) -"At" = ( -/obj/machinery/sparker{ - id_tag = "Isocell2"; - pixel_x = -18 - }, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/turf/simulated/floor/reinforced, -/area/shuttle/petrov/cell2) -"Ax" = ( -/obj/random/trash, -/turf/simulated/floor/plating, -/area/shuttle/petrov/isolation) -"Ay" = ( -/obj/structure/catwalk, -/obj/machinery/power/apc{ - dir = 4; - name = "east bump"; - pixel_x = 24 - }, -/obj/structure/cable/cyan{ - d2 = 8; - icon_state = "0-8" - }, -/turf/simulated/floor/plating, -/area/shuttle/petrov/maint) -"AK" = ( -/obj/effect/floor_decal/industrial/hatch/yellow, -/obj/machinery/artifact_analyser, -/turf/simulated/floor/tiled/white/monotile, -/area/shuttle/petrov/analysis) -"AL" = ( -/obj/structure/bed/chair/office/light{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/shuttle/petrov/rnd) -"AM" = ( -/obj/machinery/computer/modular/preset/cardslot/command{ - dir = 4; - icon_state = "console" - }, -/obj/item/device/radio/intercom{ - dir = 4; - pixel_x = -21 - }, -/turf/simulated/floor/lino, -/area/shuttle/petrov/rd) -"AP" = ( -/obj/machinery/sparker{ - id_tag = "Isocell3"; - pixel_x = -18 - }, -/turf/simulated/floor/reinforced, -/area/shuttle/petrov/cell3) -"AS" = ( -/obj/structure/table/glass, -/obj/item/modular_computer/tablet/lease/preset/command, -/obj/item/book/manual/nt_regs, -/turf/simulated/floor/lino, -/area/shuttle/petrov/rd) -"AT" = ( -/obj/structure/table/steel, -/obj/machinery/chemical_dispenser/bar_soft/full, -/turf/simulated/floor/wood/walnut, -/area/vacant/bar) -"AU" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/aftstarboard) -"AW" = ( -/obj/effect/paint/hull, -/obj/effect/wallframe_spawn/reinforced/titanium, -/obj/machinery/door/firedoor, -/turf/simulated/floor/plating, -/area/exploration_shuttle/medical) -"AY" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/door/airlock/hatch/maintenance, -/turf/simulated/floor/tiled/white/monotile, -/area/shuttle/petrov/maint) -"AZ" = ( -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/binary/pump, -/obj/structure/railing/mapped{ - dir = 4; - icon_state = "railing0-1" - }, -/obj/structure/railing/mapped, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/aftstarboard) -"Ba" = ( -/obj/effect/floor_decal/industrial/warning, -/obj/machinery/computer/rdconsole/petrov{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/shuttle/petrov/rnd) -"Bf" = ( -/obj/machinery/door/airlock/external{ - frequency = 1380; - icon_state = "closed"; - id_tag = "petrov_shuttle_inner"; - name = "Petrov Interior Access" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/shuttle/petrov/hallwaya) -"Bg" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 1; - level = 2 - }, -/obj/machinery/alarm{ - dir = 1; - pixel_y = -22 - }, -/turf/simulated/floor/tiled/white, -/area/shuttle/petrov/hallwaya) -"Bi" = ( -/obj/machinery/door/blast/regular{ - id_tag = "petrovcell3"; - name = "Test Chamber Blast Doors" - }, -/turf/simulated/floor/reinforced, -/area/shuttle/petrov/cell3) -"Bk" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/aftport) -"Bm" = ( -/obj/effect/catwalk_plated, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/plating, -/area/quartermaster/hangar) -"Bn" = ( -/obj/machinery/artifact_analyser, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 - }, -/turf/simulated/floor/reinforced, -/area/shuttle/petrov/cell1) -"Bo" = ( -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/shuttle/petrov/hallwaya) -"Br" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled, -/area/quartermaster/expedition/eva) -"Bs" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/shuttle/petrov/isolation) -"Bu" = ( -/obj/structure/table/standard, -/obj/item/storage/box/monkeycubes, -/obj/machinery/newscaster{ - pixel_y = 32 - }, -/turf/simulated/floor/tiled/white/monotile, -/area/shuttle/petrov/isolation) -"Bx" = ( -/obj/structure/closet/l3closet/scientist/multi, -/turf/simulated/floor/tiled/white/monotile, -/area/shuttle/petrov/equipment) -"By" = ( -/obj/machinery/atmospherics/pipe/manifold/visible, -/turf/simulated/floor/tiled/techfloor, -/area/shuttle/petrov/maint) -"BC" = ( -/turf/simulated/wall/r_wall/hull, -/area/rnd/canister) -"BD" = ( -/obj/effect/floor_decal/industrial/warning/fulltile, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/shuttle/petrov/hallwaya) -"BG" = ( -/obj/machinery/atmospherics/valve/shutoff/supply{ - dir = 4 - }, -/obj/structure/railing/mapped{ - dir = 1; - icon_state = "railing0-1" - }, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/aftstarboard) -"BH" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/lino, -/area/shuttle/petrov/rd) -"BJ" = ( -/obj/item/stool/padded, -/turf/simulated/floor/tiled/white/monotile, -/area/shuttle/petrov/equipment) -"BL" = ( -/obj/structure/catwalk, -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/plating, -/area/shuttle/petrov/maint) -"BM" = ( -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/shuttle/petrov/hallwaya) -"BN" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 4; - level = 2 - }, -/turf/simulated/floor/tiled/dark, -/area/shuttle/petrov/control) -"BO" = ( -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/structure/table/standard, -/obj/item/stack/material/plastic/ten, -/turf/simulated/floor/tiled/dark/monotile, -/area/shuttle/petrov/rnd) -"BR" = ( -/obj/machinery/atmospherics/pipe/manifold4w/visible, -/obj/machinery/meter, -/turf/simulated/floor/tiled/white, -/area/shuttle/petrov/toxins) -"BS" = ( -/obj/machinery/atmospherics/pipe/manifold/visible{ - dir = 1 - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/aftstarboard) -"BT" = ( -/obj/structure/shuttle/engine/heater{ - dir = 4 - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 8 - }, -/turf/simulated/floor/reinforced/airless, -/area/shuttle/petrov/custodial) -"BY" = ( -/obj/machinery/atmospherics/portables_connector, -/obj/machinery/portable_atmospherics/canister/empty, -/obj/effect/floor_decal/industrial/outline/blue, -/turf/simulated/floor/tiled/white/monotile, -/area/shuttle/petrov/toxins) -"Ch" = ( -/obj/structure/window/reinforced{ - dir = 1 - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 1 - }, -/obj/machinery/reagentgrinder, -/obj/item/reagent_containers/glass/beaker/large, -/obj/item/stack/material/phoron, -/turf/simulated/floor/tiled/dark/monotile, -/area/shuttle/petrov/analysis) -"Cj" = ( -/obj/structure/closet/secure_closet/explorer/marine, -/obj/effect/floor_decal/corner/red{ - dir = 6 - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled/monotile, -/area/quartermaster/exploration) -"Cm" = ( -/obj/machinery/atmospherics/unary/vent_pump/high_volume/guppy{ - dir = 4; - id_tag = "guppy_shuttle_pump_out_external" - }, -/obj/structure/handrail{ - dir = 1 - }, -/turf/simulated/floor/plating, -/area/guppy_hangar/start) -"Cn" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/obj/structure/closet/crate/trashcart, -/obj/machinery/atmospherics/pipe/simple/hidden, -/obj/machinery/light/small{ - dir = 8 - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/shuttle/petrov/maint) -"Cq" = ( -/obj/structure/disposalpipe/segment, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/aftstarboard) -"Cr" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/cyan{ - dir = 5 - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/fore) -"Cs" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/random/junk, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/aftstarboard) -"Ct" = ( -/obj/random_multi/single_item/piano, -/turf/simulated/floor/plating, -/area/vacant/bar) -"Cy" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/white/monotile, -/area/shuttle/petrov/phoron) -"CA" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden, -/obj/machinery/door/airlock/external{ - frequency = 1380; - icon_state = "closed"; - id_tag = "petrov_shuttle_inner"; - name = "Petrov Interior Access" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/shuttle/petrov/maint) -"CB" = ( -/obj/random/trash, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/fifthdeck/aftstarboard) -"CC" = ( -/obj/structure/closet/secure_closet/crew/research, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/random/maintenance/clean, -/obj/random/maintenance/clean, -/obj/random/maintenance/clean, -/obj/item/folder/nt, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/white/monotile, -/area/shuttle/petrov/equipment) -"CE" = ( -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply, -/obj/structure/cable/cyan{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/disposalpipe/junction{ - dir = 4; - icon_state = "pipe-j2" - }, -/turf/simulated/floor/tiled/white, -/area/shuttle/petrov/hallwaya) -"CG" = ( -/obj/machinery/atmospherics/pipe/simple/visible{ - dir = 10 - }, -/turf/simulated/floor/tiled/white, -/area/shuttle/petrov/toxins) -"CH" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/multi_tile/glass/research{ - id_tag = ""; - name = "Sublimation Chamber" - }, -/turf/simulated/floor/reinforced, -/area/shuttle/petrov/phoron) -"CJ" = ( -/obj/structure/bed/chair/office/comfy/red{ - dir = 1 - }, -/turf/simulated/floor/lino, -/area/shuttle/petrov/rd) -"CL" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/dark, -/area/quartermaster/storage) -"CR" = ( -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 4; - icon_state = "warningcorner" - }, -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/cyan{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/turf/simulated/floor/tiled/dark, -/area/quartermaster/expedition/atmos) -"CS" = ( -/obj/effect/paint/silver, -/turf/simulated/wall/titanium, -/area/shuttle/petrov/custodial) -"CT" = ( -/obj/effect/floor_decal/industrial/warning, -/turf/simulated/floor/reinforced/airless, -/area/shuttle/petrov/rd) -"CV" = ( -/obj/structure/table/standard, -/obj/item/device/scanner/health, -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/white/monotile, -/area/shuttle/petrov/isolation) -"CW" = ( -/obj/machinery/door/airlock/research{ - name = "Research Lab" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/tiled/white/monotile, -/area/shuttle/petrov/rnd) -"CX" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/catwalk, -/obj/machinery/alarm{ - pixel_y = 23; - req_access = list(list("ACCESS_ENGINE_EQUIP","ACCESS_ATMOS")) - }, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/aftport) -"CY" = ( -/obj/machinery/portable_atmospherics/canister/hydrogen, -/obj/machinery/alarm{ - dir = 4; - pixel_x = -32 - }, -/obj/structure/sign/warning/nosmoking_1{ - dir = 1; - pixel_y = -32 - }, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 4 - }, -/obj/machinery/camera/network/hangar{ - c_tag = "Fuel Bay"; - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/quartermaster/shuttlefuel) -"Dc" = ( -/obj/effect/paint/hull, -/obj/machinery/button/blast_door{ - id_tag = "guppy_hatch"; - name = "Rear Hatch Control"; - req_access = list("ACCESS_TORCH_GUP") - }, -/turf/simulated/wall/titanium, -/area/guppy_hangar/start) -"Dd" = ( -/obj/machinery/power/port_gen/pacman, -/obj/structure/cable/yellow{ - d2 = 8; - icon_state = "0-8" - }, -/obj/machinery/alarm{ - dir = 8; - pixel_x = 21 - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/shuttle/petrov/maint) -"Df" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/aftstarboard) -"Dh" = ( -/obj/machinery/atmospherics/unary/vent_pump/high_volume{ - dir = 1 - }, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/reinforced, -/area/shuttle/petrov/cell2) -"Di" = ( -/obj/effect/wallframe_spawn/reinforced_phoron/titanium, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/effect/paint/silver, -/turf/simulated/floor/reinforced, -/area/shuttle/petrov/cell3) -"Dl" = ( -/obj/structure/table/steel, -/obj/machinery/chemical_dispenser/bar_alc/full, -/obj/machinery/button/blast_door{ - id_tag = "auxbar"; - name = "Blast Shutter Control"; - pixel_x = 26 - }, -/turf/simulated/floor/plating, -/area/vacant/bar) -"Dm" = ( -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/wood/walnut{ - icon_state = "walnut_broken5" - }, -/area/vacant/bar) -"Dn" = ( -/obj/machinery/suit_storage_unit/science, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/light{ - dir = 1 - }, -/turf/simulated/floor/tiled/monotile, -/area/quartermaster/expedition/eva) -"Do" = ( -/obj/machinery/atmospherics/pipe/simple/visible{ - dir = 9 - }, -/obj/structure/cable/cyan{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/structure/catwalk, -/obj/structure/cable/cyan{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/turf/simulated/floor/plating, -/area/shuttle/petrov/maint) -"Dq" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/white, -/area/shuttle/petrov/hallwaya) -"Ds" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/maintenance, -/turf/simulated/floor/tiled/techfloor/grid, -/area/maintenance/fifthdeck/fore) -"Dt" = ( -/obj/machinery/portable_atmospherics/canister, -/obj/item/device/radio/intercom{ - dir = 4; - pixel_x = -21 - }, -/turf/simulated/floor/tiled/white, -/area/shuttle/petrov/phoron) -"Du" = ( -/obj/structure/table/glass, -/obj/item/device/paicard, -/turf/simulated/floor/lino, -/area/shuttle/petrov/rd) -"Dv" = ( -/turf/simulated/floor/reinforced, -/area/shuttle/petrov/phoron) -"Dw" = ( -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/firealarm{ - dir = 4; - pixel_x = 24 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/white/monotile, -/area/shuttle/petrov/cockpit) -"Dy" = ( -/obj/machinery/door/window/southright{ - dir = 1; - name = "Test Chamber" - }, -/obj/machinery/door/window/southright{ - name = "Test Chamber" - }, -/obj/effect/floor_decal/industrial/hatch/yellow, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/reinforced, -/area/shuttle/petrov/cell1) -"Dz" = ( -/obj/machinery/door/airlock/multi_tile/glass/research{ - dir = 8; - icon_state = "closed"; - id_tag = "PetrovAccess"; - name = "Petrov Access" - }, -/turf/simulated/floor/tiled/white/monotile, -/area/shuttle/petrov/hallwaya) -"DE" = ( -/obj/machinery/camera/network/petrov{ - c_tag = "Petrov - EVA"; - dir = 4 - }, -/obj/machinery/light_switch{ - pixel_x = -24; - pixel_y = 12 - }, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 1; - level = 2 - }, -/obj/structure/table/rack, -/obj/item/stack/flag/red, -/obj/item/stack/flag/red, -/obj/item/stack/flag/red, -/turf/simulated/floor/tiled/white/monotile, -/area/shuttle/petrov/eva) -"DF" = ( -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/fore) -"DG" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/button/ignition{ - id_tag = "Isocell3"; - pixel_x = -6; - pixel_y = -25 - }, -/turf/simulated/floor/tiled/white, -/area/shuttle/petrov/isolation) -"DK" = ( -/obj/effect/paint/silver, -/obj/machinery/button/blast_door{ - id_tag = "PetrovBiohazard"; - name = "Biohazard Shutter Control"; - pixel_x = -5; - pixel_y = -3 - }, -/turf/simulated/wall/titanium, -/area/shuttle/petrov/rd) -"DN" = ( -/obj/machinery/atmospherics/portables_connector{ - dir = 8 - }, -/obj/machinery/light{ - dir = 1 - }, -/obj/machinery/camera/network/petrov{ - c_tag = "Petrov - Anomaly Aft"; - dir = 8 - }, -/obj/item/device/radio/intercom{ - dir = 8; - pixel_x = 20 - }, -/turf/simulated/floor/tiled/white/monotile, -/area/shuttle/petrov/isolation) -"DO" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/binary/pump{ - dir = 4 - }, -/obj/machinery/light, -/obj/machinery/button/ignition{ - id_tag = "Isocell2"; - pixel_x = -6; - pixel_y = -25 - }, -/turf/simulated/floor/tiled/white, -/area/shuttle/petrov/isolation) -"DQ" = ( -/obj/effect/paint/red, -/turf/simulated/wall/titanium, -/area/shuttle/petrov/custodial) -"DR" = ( -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/suit_storage_unit/explorer/marine, -/turf/simulated/floor/tiled/monotile, -/area/quartermaster/exploration) -"DT" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/catwalk, -/obj/machinery/alarm{ - dir = 8; - pixel_x = 24 - }, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/fore) -"DX" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 1 - }, -/turf/simulated/floor/reinforced/airless, -/area/shuttle/petrov/equipment) -"DY" = ( -/obj/structure/railing/mapped{ - dir = 4; - icon_state = "railing0-1" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 - }, -/obj/machinery/atmospherics/binary/pump/on{ - dir = 4; - target_pressure = 15000 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/fore) -"DZ" = ( -/obj/structure/bed/chair/office/light, -/turf/simulated/floor/tiled/white, -/area/shuttle/petrov/analysis) -"Ea" = ( -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/fifthdeck/aftstarboard) -"Ec" = ( -/obj/effect/wallframe_spawn/reinforced/titanium, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/effect/paint/silver, -/turf/simulated/floor/plating, -/area/shuttle/petrov/isolation) -"Ed" = ( -/obj/machinery/door/airlock/research{ - name = "Equipment Storage" - }, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/tiled/white/monotile, -/area/shuttle/petrov/equipment) -"Ee" = ( -/obj/machinery/atmospherics/tvalve/digital{ - dir = 1; - id_tag = "fuelmode" - }, -/obj/machinery/light{ - dir = 8 - }, -/obj/machinery/power/apc{ - dir = 8; - name = "west bump"; - pixel_x = -24 - }, -/obj/structure/cable/cyan{ - d2 = 2; - icon_state = "0-2" - }, -/turf/simulated/floor/tiled/white/monotile, -/area/shuttle/petrov/toxins) -"Eg" = ( -/obj/structure/closet/secure_closet/prospector, -/obj/effect/floor_decal/corner/brown/mono, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled/monotile, -/area/quartermaster/expedition) -"Ek" = ( -/obj/structure/disposalpipe/segment{ - dir = 2; - icon_state = "pipe-c" - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden, -/turf/simulated/wall/prepainted, -/area/maintenance/fifthdeck/aftstarboard) -"El" = ( -/obj/structure/table/standard, -/obj/item/reagent_containers/glass/beaker/large, -/obj/item/reagent_containers/dropper, -/obj/item/device/scanner/reagent, -/obj/item/device/scanner/spectrometer/adv, -/turf/simulated/floor/tiled/white, -/area/shuttle/petrov/phoron) -"Em" = ( -/turf/simulated/wall/prepainted, -/area/quartermaster/storage) -"En" = ( -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/tiled/white, -/area/shuttle/petrov/equipment) -"Es" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/aftstarboard) -"Et" = ( -/obj/effect/catwalk_plated, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/plating, -/area/quartermaster/hangar) -"Ex" = ( -/obj/machinery/atmospherics/pipe/simple/visible, -/obj/machinery/light_switch{ - pixel_x = -24; - pixel_y = 12 - }, -/obj/machinery/camera/network/petrov{ - c_tag = "Petrov - Toxins"; - dir = 4 - }, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/vending/phoronresearch{ - dir = 4 - }, -/turf/simulated/floor/tiled/white/monotile, -/area/shuttle/petrov/toxins) -"Ey" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/random/trash, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/catwalk, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/aftstarboard) -"Ez" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/machinery/light/spot{ - dir = 1 - }, -/turf/simulated/floor/tiled, -/area/quartermaster/expedition) -"EC" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 1 - }, -/turf/simulated/floor/tiled/monotile, -/area/quartermaster/hangar) -"EE" = ( -/obj/machinery/atmospherics/pipe/manifold4w/visible, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/white, -/area/shuttle/petrov/isolation) -"EH" = ( -/obj/machinery/suit_storage_unit/science, -/turf/simulated/floor/tiled/white, -/area/shuttle/petrov/eva) -"EI" = ( -/obj/structure/disposalpipe/segment, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/catwalk, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/aftport) -"EJ" = ( -/obj/machinery/camera/network/petrov{ - c_tag = "Petrov - Desublimation"; - dir = 4 - }, -/obj/machinery/power/apc{ - dir = 8; - name = "west bump"; - pixel_x = -24 - }, -/obj/structure/cable/cyan{ - d2 = 4; - icon_state = "0-4" - }, -/turf/simulated/floor/tiled/white, -/area/shuttle/petrov/phoron) -"EK" = ( -/obj/machinery/portable_atmospherics/canister/empty, -/obj/effect/floor_decal/industrial/outline/red, -/obj/machinery/camera/network/hangar{ - c_tag = "Atmospheric Storage"; - dir = 8 - }, -/turf/simulated/floor/tiled/dark, -/area/quartermaster/expedition/atmos) -"EL" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/aftstarboard) -"EN" = ( -/obj/effect/shuttle_landmark/merc/hanger{ - name = "5th Deck, Aft Starboard" - }, -/turf/space, -/area/space) -"ER" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/obj/structure/catwalk, -/obj/machinery/alarm{ - dir = 8; - pixel_x = 24 - }, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/aftstarboard) -"ET" = ( -/obj/structure/closet/medical_wall{ - pixel_y = 32 - }, -/turf/simulated/floor/tiled/white, -/area/vacant/infirmary) -"EX" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/aftstarboard) -"Fd" = ( -/turf/simulated/floor/tiled/white, -/area/shuttle/petrov/equipment) -"Fe" = ( -/obj/effect/paint/hull, -/obj/structure/sign/solgov, -/turf/simulated/wall/titanium, -/area/exploration_shuttle/crew) -"Ff" = ( -/obj/effect/floor_decal/industrial/warning, -/obj/machinery/atmospherics/binary/pump{ - dir = 1 - }, -/obj/machinery/light{ - dir = 8 - }, -/turf/simulated/floor/tiled/white/monotile, -/area/shuttle/petrov/phoron) -"Fg" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 4 - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/aftstarboard) -"Fh" = ( -/obj/structure/railing/mapped{ - dir = 4; - icon_state = "railing0-1" - }, -/obj/machinery/atmospherics/valve/shutoff/supply, -/obj/machinery/atmospherics/valve/shutoff/scrubbers, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/fore) -"Fk" = ( -/turf/simulated/wall/prepainted, -/area/hallway/primary/fifthdeck/aft) -"Fn" = ( -/obj/structure/disposalpipe/segment{ - dir = 2; - icon_state = "pipe-c" - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 6; - icon_state = "warning" - }, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/aftport) -"Fo" = ( -/obj/structure/window/reinforced{ - dir = 1 - }, -/obj/machinery/chemical_dispenser/full, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/effect/floor_decal/industrial/warning{ - dir = 1 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/shuttle/petrov/analysis) -"Fu" = ( -/obj/structure/bed, -/turf/simulated/floor/reinforced, -/area/shuttle/petrov/cell2) -"Fw" = ( -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/fifthdeck/fore) -"Fx" = ( -/obj/effect/paint/silver, -/turf/simulated/wall/titanium, -/area/shuttle/petrov/cockpit) -"Fy" = ( -/obj/machinery/light/small{ - dir = 8 - }, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/reinforced, -/area/shuttle/petrov/cell2) -"FD" = ( -/obj/structure/table/standard, -/obj/item/device/flashlight/lamp, -/obj/machinery/light/small{ - dir = 4; - icon_state = "bulb1" - }, -/obj/machinery/alarm/monitor/isolation{ - alarm_id = "petrov2"; - dir = 8; - pixel_x = 24 - }, -/turf/simulated/floor/reinforced, -/area/shuttle/petrov/cell2) -"FR" = ( -/obj/random/junk, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/fifthdeck/aftstarboard) -"FS" = ( -/obj/effect/shuttle_landmark/skipjack/hanger{ - name = "5th Deck, Starboard" - }, -/turf/space, -/area/space) -"FU" = ( -/obj/machinery/camera/network/petrov{ - c_tag = "Petrov - Hallway Aft"; - dir = 1 - }, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 1; - level = 2 - }, -/turf/simulated/floor/tiled/white/monotile, -/area/shuttle/petrov/hallwaya) -"FW" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/turf/simulated/floor/tiled/dark, -/area/shuttle/petrov/rnd) -"FX" = ( -/obj/structure/table/reinforced, -/obj/machinery/button/blast_door{ - id_tag = "PetrovShield"; - name = "Blast Shutter Control"; - pixel_x = 5; - pixel_y = -3 - }, -/obj/machinery/button/blast_door{ - id_tag = "PetrovBiohazard"; - name = "Biohazard Shutter Control"; - pixel_x = -5; - pixel_y = -3 - }, -/turf/simulated/floor/tiled/white/monotile, -/area/shuttle/petrov/cockpit) -"FZ" = ( -/obj/structure/closet/hydrant{ - pixel_y = 32 - }, -/turf/simulated/floor/tiled/monotile, -/area/quartermaster/hangar) -"Gb" = ( -/obj/machinery/door/window/southright{ - dir = 1; - name = "Test Chamber" - }, -/obj/machinery/door/window/southright{ - name = "Test Chamber" - }, -/obj/effect/floor_decal/industrial/hatch/yellow, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/reinforced, -/area/shuttle/petrov/cell3) -"Gc" = ( -/obj/structure/table/glass, -/obj/machinery/photocopier/faxmachine{ - department = "Petrov - Chief Science Officer" - }, -/obj/machinery/requests_console{ - announcementConsole = 1; - department = "Chief Science Officer's Desk"; - departmentType = 5; - name = "Chief Science Officer RC"; - pixel_x = -30 - }, -/turf/simulated/floor/lino, -/area/shuttle/petrov/rd) -"Ge" = ( -/obj/random_multi/single_item/poppy, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/fifthdeck/aftstarboard) -"Gg" = ( -/obj/machinery/door/blast/regular{ - dir = 4; - id_tag = "guppy_hatch"; - name = "Rear Hatch" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/guppy_hangar/start) -"Gh" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden{ - dir = 8 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/shuttle/petrov/hallwaya) -"Gl" = ( -/obj/structure/sign/warning/nosmoking_1{ - dir = 1; - pixel_y = -32 - }, -/obj/machinery/atmospherics/binary/pump/high_power{ - dir = 1; - name = "CO2 to Hangar" - }, -/obj/machinery/firealarm{ - dir = 4; - pixel_x = 26 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/quartermaster/shuttlefuel) -"Gm" = ( -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 4 - }, -/obj/machinery/tele_beacon, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/shuttle/petrov/hallwaya) -"Gq" = ( -/obj/machinery/shipsensors/weak, -/turf/simulated/floor/plating, -/area/guppy_hangar/start) -"Gr" = ( -/obj/structure/table/standard, -/obj/random/tool, -/obj/machinery/firealarm{ - pixel_y = 24 - }, -/obj/machinery/light{ - dir = 1 - }, -/turf/simulated/floor/tiled/white/monotile, -/area/shuttle/petrov/isolation) -"Gv" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/catwalk, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/aftstarboard) -"Gw" = ( -/obj/effect/catwalk_plated, -/obj/structure/cable/green{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/turf/simulated/floor/plating, -/area/quartermaster/hangar) -"Gx" = ( -/obj/effect/wallframe_spawn/reinforced_phoron/titanium, -/obj/effect/paint/silver, -/turf/simulated/floor/reinforced, -/area/shuttle/petrov/cell3) -"Gy" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/disposalpipe/segment{ - dir = 4; - icon_state = "pipe-c" - }, -/turf/simulated/floor/tiled/white/monotile, -/area/shuttle/petrov/analysis) -"GB" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/white, -/area/shuttle/petrov/eva) -"GG" = ( -/obj/machinery/artifact_scanpad, -/turf/simulated/floor/reinforced, -/area/shuttle/petrov/cell1) -"GI" = ( -/obj/machinery/atmospherics/pipe/manifold/visible, -/obj/machinery/meter, -/turf/simulated/floor/tiled/white, -/area/shuttle/petrov/isolation) -"GK" = ( -/obj/machinery/power/apc{ - dir = 1; - name = "north bump"; - pixel_y = 24 - }, -/obj/structure/cable/cyan{ - d2 = 8; - icon_state = "0-8" - }, -/turf/simulated/floor/tiled/white/monotile, -/area/shuttle/petrov/equipment) -"GL" = ( -/obj/effect/wallframe_spawn/reinforced/titanium, -/obj/machinery/door/blast/regular{ - density = 0; - icon_state = "pdoor0"; - id_tag = "PetrovShield"; - name = "Petrov Blast Shutters"; - opacity = 0 - }, -/obj/effect/paint/silver, -/turf/simulated/floor/plating, -/area/shuttle/petrov/rnd) -"GM" = ( -/obj/effect/floor_decal/industrial/warning, -/turf/simulated/floor/reinforced, -/area/shuttle/petrov/cell3) -"GO" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/aftstarboard) -"GP" = ( -/obj/structure/table/steel, -/obj/machinery/power/apc{ - dir = 1; - name = "north bump"; - pixel_y = 24 - }, -/obj/structure/cable/green{ - d2 = 8; - icon_state = "0-8" - }, -/obj/item/stock_parts/power/battery/buildable/stock{ - pixel_x = 6; - pixel_y = 10 - }, -/obj/random/powercell{ - pixel_x = 10; - pixel_y = 2 - }, -/obj/item/wrench{ - pixel_x = -7; - pixel_y = 6 - }, -/obj/item/screwdriver{ - pixel_x = -2; - pixel_y = 6 - }, -/turf/simulated/floor/tiled/dark, -/area/quartermaster/expedition/atmos) -"GQ" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/aftstarboard) -"GR" = ( -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/tiled/white, -/area/shuttle/petrov/hallwaya) -"GX" = ( -/obj/structure/bed/chair/padded/red, -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/lino, -/area/shuttle/petrov/rd) -"Ha" = ( -/obj/machinery/atmospherics/pipe/simple/visible/red{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/visible/blue, -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/cable/cyan{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/turf/simulated/floor/tiled/white, -/area/shuttle/petrov/isolation) -"Hb" = ( -/obj/machinery/disposal, -/obj/machinery/light_switch{ - pixel_x = -6; - pixel_y = 24 - }, -/obj/machinery/button/windowtint{ - id = "rd_windows"; - pixel_x = 6; - pixel_y = 24; - range = 11 - }, -/obj/machinery/firealarm{ - dir = 4; - pixel_x = 26 - }, -/obj/effect/floor_decal/industrial/hatch/yellow, -/obj/machinery/light{ - dir = 4 - }, -/obj/structure/disposalpipe/trunk{ - dir = 8 - }, -/turf/simulated/floor/lino, -/area/shuttle/petrov/rd) -"Hc" = ( -/obj/effect/floor_decal/industrial/hatch/yellow, -/obj/machinery/power/emitter{ - desc = "A massive, heavy-duty industrial laser. This design is a fixed installation, capable of shooting in only one direction. It has a label on it reading 'SRV Petrov Analysis Lab.'"; - name = "emitter (Petrov)"; - req_lock_access = list("ACCESS_TORCH_PETROV_ANALYSIS") - }, -/obj/machinery/light{ - dir = 8 - }, -/turf/simulated/floor/tiled/white/monotile, -/area/shuttle/petrov/analysis) -"Hf" = ( -/obj/machinery/door/airlock/external{ - frequency = 1380; - icon_state = "closed"; - id_tag = "petrov_shuttle_inner"; - name = "Petrov Interior Access" - }, -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/shuttle/petrov/hallwaya) -"Hk" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/aftstarboard) -"Hl" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/turf/simulated/floor/tiled/white, -/area/shuttle/petrov/analysis) -"Hm" = ( -/obj/machinery/portable_atmospherics/canister/carbon_dioxide/engine_setup{ - start_pressure = 4769 - }, -/obj/effect/floor_decal/industrial/outline/orange, -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 8; - icon_state = "warningcorner" - }, -/turf/simulated/floor/tiled/dark, -/area/quartermaster/expedition/atmos) -"Ho" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 4; - icon_state = "warning" - }, -/turf/simulated/floor/tiled/monotile, -/area/quartermaster/hangar) -"Hr" = ( -/obj/machinery/atmospherics/pipe/simple/visible{ - dir = 4 - }, -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/shuttle/petrov/maint) -"Ht" = ( -/obj/machinery/air_sensor{ - id_tag = "phoron_sensor" - }, -/turf/simulated/floor/reinforced, -/area/shuttle/petrov/phoron) -"Hu" = ( -/obj/machinery/firealarm{ - dir = 1; - pixel_y = -24 - }, -/turf/simulated/floor/tiled/white, -/area/shuttle/petrov/hallwaya) -"Hv" = ( -/obj/structure/disposalpipe/segment{ - dir = 8; - icon_state = "pipe-c" - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/aftstarboard) -"Hw" = ( -/obj/structure/table/standard, -/obj/item/stock_parts/manipulator, -/obj/item/stock_parts/scanning_module, -/obj/item/device/paicard, -/obj/item/stock_parts/matter_bin, -/obj/item/stock_parts/console_screen, -/obj/item/stock_parts/micro_laser, -/obj/item/stock_parts/scanning_module{ - pixel_x = 2; - pixel_y = 3 - }, -/obj/effect/floor_decal/industrial/warning, -/turf/simulated/floor/tiled/white/monotile, -/area/shuttle/petrov/rnd) -"Hy" = ( -/obj/machinery/power/smes/buildable/preset/torch/shuttle{ - RCon_tag = "Shuttle - Petrov" - }, -/obj/structure/cable/cyan, -/turf/simulated/floor/plating, -/area/shuttle/petrov/maint) -"Hz" = ( -/obj/structure/table/glass, -/obj/item/pen, -/turf/simulated/floor/lino, -/area/shuttle/petrov/rd) -"HB" = ( -/turf/simulated/floor/tiled/dark, -/area/shuttle/petrov/rnd) -"HE" = ( -/obj/structure/table/steel, -/turf/simulated/floor/wood/walnut, -/area/vacant/bar) -"HF" = ( -/obj/machinery/vitals_monitor, -/turf/simulated/floor/tiled/white, -/area/vacant/infirmary) -"HH" = ( -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/obj/structure/railing/mapped{ - dir = 1; - icon_state = "railing0-1" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/aftstarboard) -"HJ" = ( -/obj/machinery/alarm{ - dir = 4; - pixel_x = -24 - }, -/obj/item/stool/padded, -/obj/effect/floor_decal/corner/purple/half{ - dir = 8 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/shuttle/petrov/control) -"HK" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/catwalk, -/obj/machinery/alarm{ - dir = 1; - pixel_y = -22 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/fore) -"HM" = ( -/obj/effect/floor_decal/industrial/outline/grey, -/obj/machinery/portable_atmospherics/canister/empty/carbon_dioxide, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/fifthdeck/aftstarboard) -"HN" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/valve/shutoff/supply, -/obj/structure/railing/mapped{ - dir = 8; - icon_state = "railing0-1" - }, -/obj/machinery/atmospherics/valve/shutoff/scrubbers, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/aftstarboard) -"HO" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled, -/area/quartermaster/expedition) -"HR" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/aftstarboard) -"HS" = ( -/obj/structure/disposalpipe/segment, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/catwalk, -/obj/machinery/alarm{ - dir = 8; - pixel_x = 24 - }, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/aftport) -"HU" = ( -/obj/effect/floor_decal/industrial/outline/grey, -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/table/steel, -/obj/random/tech_supply, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/fifthdeck/aftstarboard) -"HV" = ( -/obj/machinery/atmospherics/unary/vent_scrubber{ - dir = 1 - }, -/turf/simulated/floor/reinforced, -/area/shuttle/petrov/cell2) -"HX" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/visible{ - dir = 4 - }, -/obj/machinery/portable_atmospherics/powered/scrubber/huge/stationary, -/turf/simulated/floor/tiled/white/monotile, -/area/shuttle/petrov/toxins) -"HY" = ( -/obj/effect/catwalk_plated, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/plating, -/area/quartermaster/hangar) -"HZ" = ( -/obj/machinery/door/airlock/research{ - name = "Suit Storage" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/white/monotile, -/area/shuttle/petrov/equipment) -"Ia" = ( -/obj/structure/table/steel, -/turf/simulated/floor/plating, -/area/vacant/bar) -"Ib" = ( -/turf/simulated/floor/tiled/white/monotile, -/area/shuttle/petrov/analysis) -"Ic" = ( -/obj/structure/table/standard, -/obj/machinery/cell_charger, -/obj/item/stock_parts/capacitor, -/obj/item/stock_parts/capacitor, -/obj/random/powercell, -/obj/random/powercell, -/obj/random/powercell, -/obj/machinery/light{ - dir = 4 - }, -/obj/structure/reagent_dispensers/acid{ - density = 0; - pixel_x = 32 - }, -/turf/simulated/floor/tiled/white/monotile, -/area/shuttle/petrov/rnd) -"Ih" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/aftstarboard) -"Ij" = ( -/obj/machinery/artifact_harvester, -/turf/simulated/floor/tiled/white/monotile, -/area/shuttle/petrov/analysis) -"Ik" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/white, -/area/shuttle/petrov/eva) -"In" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/railing/mapped{ - dir = 4; - icon_state = "railing0-1" - }, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/fore) -"Iq" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/aftstarboard) -"It" = ( -/obj/effect/paint/silver, -/turf/simulated/wall/titanium, -/area/shuttle/petrov/cell1) -"Iu" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/quartermaster/expedition/eva) -"Iv" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/shuttle/petrov/equipment) -"IA" = ( -/obj/machinery/lapvend, -/turf/simulated/floor/tiled/white/monotile, -/area/shuttle/petrov/equipment) -"IB" = ( -/obj/machinery/disposal, -/obj/machinery/camera/network/petrov{ - c_tag = "Petrov - Fabrication" - }, -/obj/machinery/light_switch{ - pixel_x = -6; - pixel_y = 24 - }, -/obj/machinery/firealarm{ - dir = 8; - pixel_x = -24 - }, -/obj/effect/floor_decal/industrial/hatch/yellow, -/obj/structure/disposalpipe/trunk{ - dir = 4 - }, -/turf/simulated/floor/tiled/white/monotile, -/area/shuttle/petrov/rnd) -"IC" = ( -/obj/machinery/suspension_gen, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled/white/monotile, -/area/shuttle/petrov/equipment) -"IF" = ( -/obj/machinery/computer/shuttle_control{ - dir = 4; - req_access = list("ACCESS_TORCH_PETROV_HELM"); - shuttle_tag = "Petrov" - }, -/obj/machinery/newscaster{ - pixel_y = -32 - }, -/turf/simulated/floor/tiled/white/monotile, -/area/shuttle/petrov/cockpit) -"IH" = ( -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/door/airlock/maintenance, -/turf/simulated/floor/tiled/techfloor/grid, -/area/maintenance/fifthdeck/aftstarboard) -"IN" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/fore) -"IO" = ( -/obj/effect/catwalk_plated, -/obj/machinery/light/spot{ - dir = 4 - }, -/obj/machinery/firealarm{ - dir = 4; - pixel_x = 26 - }, -/turf/simulated/floor/plating, -/area/quartermaster/hangar) -"IR" = ( -/obj/machinery/portable_atmospherics/canister, -/obj/machinery/light_switch{ - pixel_x = -6; - pixel_y = 24 - }, -/obj/machinery/firealarm{ - dir = 8; - pixel_x = -24 - }, -/turf/simulated/floor/tiled/white/monotile, -/area/shuttle/petrov/phoron) -"IS" = ( -/obj/effect/paint/hull, -/obj/structure/sign/solgov, -/turf/simulated/wall/titanium, -/area/exploration_shuttle/fuel) -"IU" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/railing/mapped{ - dir = 4; - icon_state = "railing0-1" - }, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/aftport) -"IW" = ( -/obj/effect/shuttle_landmark/ert/hanger{ - name = "5th Deck, Aft Port" - }, -/turf/space, -/area/space) -"IY" = ( -/obj/machinery/atmospherics/portables_connector, -/obj/machinery/newscaster{ - pixel_x = 32 - }, -/turf/simulated/floor/tiled/white, -/area/shuttle/petrov/phoron) -"Jc" = ( -/obj/effect/floor_decal/industrial/outline/grey, -/obj/machinery/portable_atmospherics/canister/air/airlock, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/fifthdeck/fore) -"Jf" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/wallframe_spawn/no_grille, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/aftstarboard) -"Jh" = ( -/obj/structure/sign/warning/deathsposal, -/obj/effect/paint/silver, -/turf/simulated/wall/titanium, -/area/shuttle/petrov/maint) -"Ji" = ( -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/turf/simulated/floor/reinforced, -/area/shuttle/petrov/cell3) -"Jj" = ( -/obj/machinery/atmospherics/pipe/simple/visible, -/obj/machinery/atmospherics/pipe/simple/visible{ - dir = 4 - }, -/obj/effect/paint/silver, -/turf/simulated/wall/titanium, -/area/shuttle/petrov/toxins) -"Jk" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 8 - }, -/turf/simulated/floor/reinforced, -/area/shuttle/petrov/cockpit) -"Jl" = ( -/obj/effect/paint/silver, -/turf/simulated/wall/ocp_wall, -/area/shuttle/petrov/cell1) -"Jn" = ( -/obj/effect/catwalk_plated, -/obj/structure/closet/hydrant{ - pixel_x = -32 - }, -/turf/simulated/floor/plating, -/area/quartermaster/hangar) -"Jo" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/item/device/radio/intercom{ - dir = 8; - pixel_x = 20 - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/shuttle/petrov/maint) -"Jt" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/catwalk, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/aftstarboard) -"Ju" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/handrail{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden{ - dir = 8 - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/shuttle/petrov/maint) -"Jv" = ( -/obj/machinery/oxygen_pump{ - pixel_y = 32 - }, -/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{ - id_tag = "petrov_shuttle_pump" - }, -/obj/effect/floor_decal/techfloor{ - dir = 1 - }, -/obj/machinery/light/small{ - dir = 1 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/shuttle/petrov/hallwaya) -"Jx" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/white, -/area/shuttle/petrov/analysis) -"Jz" = ( -/obj/structure/cable/cyan{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 4 - }, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/white, -/area/shuttle/petrov/equipment) -"JA" = ( -/obj/structure/closet/crate/secure/biohazard, -/turf/simulated/floor/tiled/dark/monotile, -/area/shuttle/petrov/custodial) -"JB" = ( -/obj/machinery/atmospherics/pipe/manifold/visible/blue{ - dir = 8 - }, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/white, -/area/shuttle/petrov/isolation) -"JG" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/fore) -"JH" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/visible, -/obj/machinery/button/blast_door{ - id_tag = "petrovcell3"; - name = "Test Chamber Vent"; - pixel_x = -26; - pixel_y = -26 - }, -/turf/simulated/floor/tiled/white, -/area/shuttle/petrov/isolation) -"JK" = ( -/obj/structure/mopbucket, -/obj/item/mop, -/obj/structure/cable/cyan{ - d2 = 8; - icon_state = "0-8" - }, -/obj/machinery/power/apc{ - dir = 4; - name = "east bump"; - pixel_x = 24 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/shuttle/petrov/custodial) -"JL" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/disposalpipe/segment{ - dir = 4; - icon_state = "pipe-c" - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/fifthdeck/aft) -"JM" = ( -/obj/structure/bed/chair/shuttle/black{ - dir = 8 - }, -/turf/simulated/floor/tiled/white, -/area/shuttle/petrov/cockpit) -"JO" = ( -/obj/structure/closet/bombcloset, -/turf/simulated/floor/tiled/white/monotile, -/area/shuttle/petrov/equipment) -"JP" = ( -/obj/effect/wallframe_spawn/reinforced/titanium, -/obj/machinery/atmospherics/pipe/simple/hidden/universal, -/obj/effect/paint/silver, -/turf/simulated/floor/plating, -/area/shuttle/petrov/isolation) -"JS" = ( -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/structure/cable/cyan{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 8; - icon_state = "warningcorner" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 8 - }, -/turf/simulated/floor/tiled/white/monotile, -/area/shuttle/petrov/hallwaya) -"JX" = ( -/obj/effect/floor_decal/industrial/warning/fulltile, -/obj/machinery/firealarm{ - dir = 1; - pixel_y = -24 - }, -/turf/simulated/floor/tiled/white, -/area/shuttle/petrov/hallwaya) -"JY" = ( -/obj/structure/disposalpipe/segment, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/aftstarboard) -"Kb" = ( -/obj/machinery/sparker{ - id_tag = "Isocell1"; - pixel_x = -18 - }, -/turf/simulated/floor/reinforced, -/area/shuttle/petrov/cell1) -"Kc" = ( -/obj/machinery/door/blast/regular{ - density = 0; - icon_state = "pdoor0"; - id_tag = "PetrovShield"; - name = "Petrov Blast Shutters"; - opacity = 0 - }, -/obj/effect/wallframe_spawn/reinforced/polarized{ - id = "rd_windows" - }, -/obj/effect/paint/silver, -/turf/simulated/floor/plating, -/area/shuttle/petrov/rd) -"Kh" = ( -/obj/structure/table/standard, -/obj/item/folder/nt, -/obj/item/stack/nanopaste, -/obj/machinery/newscaster{ - pixel_x = 32 - }, -/turf/simulated/floor/tiled/white/monotile, -/area/shuttle/petrov/rnd) -"Ki" = ( -/obj/effect/floor_decal/industrial/warning/fulltile, -/obj/machinery/camera/network/petrov{ - c_tag = "Petrov - Hallway Fore"; - dir = 1 - }, -/obj/machinery/alarm{ - dir = 1; - pixel_y = -22 - }, -/turf/simulated/floor/tiled/white, -/area/shuttle/petrov/hallwaya) -"Kj" = ( -/obj/machinery/atmospherics/pipe/simple/visible{ - dir = 4 - }, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/tiled/white, -/area/shuttle/petrov/toxins) -"Kk" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/shuttle/petrov/custodial) -"Ko" = ( -/obj/structure/bed/chair/shuttle/blue{ - dir = 4 - }, -/obj/machinery/firealarm{ - pixel_y = 24 - }, -/obj/item/device/radio/intercom{ - dir = 4; - pixel_x = -21 - }, -/turf/simulated/floor/tiled/techfloor, -/area/guppy_hangar/start) -"Kr" = ( -/obj/structure/closet/secure_closet/scientist_torch, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/light{ - dir = 4 - }, -/turf/simulated/floor/tiled/white/monotile, -/area/shuttle/petrov/equipment) -"Kt" = ( -/obj/structure/shuttle/engine/propulsion{ - dir = 4 - }, -/turf/simulated/floor/reinforced/airless, -/area/shuttle/petrov/custodial) -"Ku" = ( -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/catwalk, -/obj/structure/sign/warning/compressed_gas{ - dir = 8; - pixel_x = 32 - }, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/aftstarboard) -"Kw" = ( -/obj/machinery/portable_atmospherics/canister/oxygen, -/turf/simulated/floor/tiled/white, -/area/shuttle/petrov/eva) -"KA" = ( -/obj/effect/catwalk_plated, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/plating, -/area/quartermaster/hangar) -"KD" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/white, -/area/shuttle/petrov/phoron) -"KI" = ( -/obj/structure/disposalpipe/segment{ - dir = 2; - icon_state = "pipe-c" - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/catwalk, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/aftstarboard) -"KL" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/structure/handrail{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/shuttle/petrov/maint) -"KN" = ( -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/machinery/artifact, -/turf/simulated/floor/reinforced, -/area/shuttle/petrov/cell1) -"KQ" = ( -/obj/machinery/light{ - dir = 4 - }, -/obj/machinery/alarm{ - dir = 8; - pixel_x = 21 - }, -/obj/machinery/papershredder, -/turf/simulated/floor/lino, -/area/shuttle/petrov/rd) -"KU" = ( -/obj/machinery/light/small{ - dir = 1 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/aftport) -"KV" = ( -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/white, -/area/shuttle/petrov/isolation) -"KW" = ( -/obj/structure/cable/cyan{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/fifthdeck/aftstarboard) -"KY" = ( -/obj/effect/floor_decal/industrial/warning/corner, -/obj/machinery/atmospherics/pipe/simple/visible{ - dir = 4 - }, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/tiled/white, -/area/shuttle/petrov/toxins) -"Lb" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/catwalk, -/obj/random/trash, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/fore) -"Ld" = ( -/obj/effect/floor_decal/corner/brown{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/fifthdeck/aft) -"Lf" = ( -/obj/machinery/atmospherics/unary/tank/air{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/fore) -"Lg" = ( -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/cable/cyan{ - d2 = 4; - icon_state = "0-4" - }, -/obj/machinery/power/apc{ - dir = 1; - name = "north bump"; - pixel_y = 24 - }, -/obj/structure/handrail, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/light{ - dir = 1 - }, -/turf/simulated/floor/tiled/white, -/area/shuttle/petrov/hallwaya) -"Li" = ( -/obj/effect/wallframe_spawn/reinforced/titanium, -/obj/effect/paint/silver, -/obj/machinery/door/firedoor, -/turf/simulated/floor/plating, -/area/shuttle/petrov/phoron) -"Lj" = ( -/turf/simulated/floor/wood/walnut{ - icon_state = "walnut_broken5" - }, -/area/vacant/bar) -"Lm" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 8; - icon_state = "pipe-c" - }, -/obj/structure/cable{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/structure/catwalk, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/aftport) -"Lo" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/railing/mapped{ - dir = 4; - icon_state = "railing0-1" - }, -/obj/machinery/atmospherics/valve/shutoff/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/aftstarboard) -"Lp" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/tiled, -/area/quartermaster/expedition) -"Lq" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/bed/chair/wheelchair, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/aftstarboard) -"Lt" = ( -/obj/effect/paint/silver, -/turf/simulated/wall/titanium, -/area/shuttle/petrov/rnd) -"Lu" = ( -/obj/machinery/atmospherics/pipe/simple/visible/blue{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/shuttle/petrov/isolation) -"Lv" = ( -/obj/machinery/portable_atmospherics/hydroponics, -/obj/machinery/light/small{ - dir = 4; - icon_state = "bulb1" - }, -/obj/machinery/alarm/monitor/isolation{ - alarm_id = "petrov3"; - dir = 8; - pixel_x = 24 - }, -/turf/simulated/floor/reinforced, -/area/shuttle/petrov/cell3) -"LA" = ( -/obj/effect/paint/silver, -/turf/simulated/wall/titanium, -/area/shuttle/petrov/rd) -"LB" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/random/trash, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/aftstarboard) -"LC" = ( -/obj/structure/table/rack, -/obj/item/device/flashlight, -/obj/item/device/radio, -/obj/item/crowbar, -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/item/device/radio/intercom{ - pixel_y = 23 - }, -/turf/simulated/floor/tiled/dark, -/area/shuttle/petrov/control) -"LE" = ( -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 1 - }, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 4; - level = 2 - }, -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/white, -/area/shuttle/petrov/analysis) -"LF" = ( -/obj/structure/table/standard, -/obj/machinery/light{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/shuttle/petrov/analysis) -"LG" = ( -/obj/machinery/atmospherics/pipe/simple/visible{ - dir = 10 - }, -/obj/effect/paint/silver, -/turf/simulated/wall/ocp_wall, -/area/shuttle/petrov/toxins) -"LI" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 1 - }, -/turf/simulated/floor/tiled/white, -/area/shuttle/petrov/phoron) -"LL" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/aftstarboard) -"LM" = ( -/obj/structure/shuttle/engine/propulsion{ - dir = 4 - }, -/turf/simulated/floor/reinforced/airless, -/area/shuttle/petrov/isolation) -"LN" = ( -/obj/effect/paint/silver, -/turf/simulated/wall/titanium, -/area/shuttle/petrov/equipment) -"LP" = ( -/obj/structure/table/reinforced, -/turf/simulated/floor/tiled/white/monotile, -/area/shuttle/petrov/cockpit) -"LQ" = ( -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/reinforced, -/area/shuttle/petrov/cell2) -"LT" = ( -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/light_switch{ - pixel_x = 22; - pixel_y = -22 - }, -/turf/simulated/floor/wood/walnut{ - icon_state = "walnut_broken0" - }, -/area/vacant/bar) -"LU" = ( -/obj/machinery/atmospherics/pipe/simple/heat_exchanging{ - dir = 9 - }, -/turf/simulated/floor/reinforced/airless, -/area/shuttle/petrov/toxins) -"LW" = ( -/obj/effect/wallframe_spawn/reinforced/polarized{ - id = "rd_windows" - }, -/obj/effect/paint/silver, -/turf/simulated/floor/plating, -/area/shuttle/petrov/rd) -"LX" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/aftport) -"Mb" = ( -/obj/structure/table/steel, -/obj/item/modular_computer/laptop/preset/custom_loadout/advanced, -/turf/simulated/floor/tiled/dark/monotile, -/area/shuttle/petrov/control) -"Mc" = ( -/obj/machinery/atmospherics/valve/shutoff/supply, -/obj/structure/railing/mapped{ - dir = 8; - icon_state = "railing0-1" - }, -/obj/machinery/atmospherics/valve/shutoff/scrubbers, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/aftport) -"Mg" = ( -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/structure/closet/secure_closet/scientist_torch, -/turf/simulated/floor/tiled/white/monotile, -/area/shuttle/petrov/hallwaya) -"Mj" = ( -/obj/structure/cable{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/structure/railing/mapped{ - dir = 8; - icon_state = "railing0-1" - }, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/aftport) -"Ml" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/white/monotile, -/area/shuttle/petrov/eva) -"Mm" = ( -/turf/simulated/wall/titanium, -/area/shuttle/petrov/analysis) -"Mn" = ( -/obj/machinery/power/apc{ - dir = 4; - name = "east bump"; - pixel_x = 24 - }, -/obj/structure/cable/cyan, -/obj/machinery/light, -/obj/machinery/alarm{ - dir = 1; - pixel_y = -22 - }, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 1; - level = 2 - }, -/turf/simulated/floor/tiled/white/monotile, -/area/shuttle/petrov/cockpit) -"Mo" = ( -/obj/machinery/light/small{ - dir = 8 - }, -/obj/machinery/atmospherics/unary/vent_scrubber{ - dir = 1 - }, -/obj/machinery/alarm/monitor/isolation{ - alarm_id = "petrov1"; - dir = 4; - pixel_x = -24 - }, -/turf/simulated/floor/reinforced, -/area/shuttle/petrov/cell1) -"Mr" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 8 - }, -/turf/simulated/floor/reinforced, -/area/shuttle/petrov/control) -"Mt" = ( -/obj/structure/handrail{ - dir = 4 - }, -/obj/machinery/light_switch{ - pixel_x = -10; - pixel_y = -21 - }, -/obj/machinery/firealarm{ - dir = 1; - pixel_y = -24 - }, -/turf/simulated/floor/tiled/white/monotile, -/area/shuttle/petrov/analysis) -"Mv" = ( -/obj/structure/table/steel, -/obj/item/paper_bin, -/obj/item/pen, -/obj/item/device/megaphone, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/obj/item/device/radio/intercom{ - dir = 8; - pixel_x = 20 - }, -/turf/simulated/floor/tiled/dark, -/area/shuttle/petrov/control) -"Mx" = ( -/obj/structure/table/rack{ - dir = 8 - }, -/obj/item/clothing/mask/gas, -/obj/item/clothing/mask/gas, -/turf/simulated/floor/tiled/white, -/area/shuttle/petrov/equipment) -"My" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/meter, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/aftstarboard) -"Mz" = ( -/obj/structure/stasis_cage, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/camera/network/petrov{ - c_tag = "Petrov - Equipment"; - dir = 4 - }, -/turf/simulated/floor/tiled/white/monotile, -/area/shuttle/petrov/equipment) -"MB" = ( -/obj/machinery/door/blast/regular{ - density = 0; - dir = 4; - icon_state = "pdoor0"; - id_tag = "PetrovBiohazard"; - name = "Petrov Biohazard Shutters"; - opacity = 0 - }, -/obj/effect/floor_decal/corner/red/mono, -/turf/simulated/floor/tiled/white/monotile, -/area/shuttle/petrov/hallwaya) -"MC" = ( -/obj/effect/floor_decal/industrial/warning, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/aftstarboard) -"MD" = ( -/obj/machinery/hologram/holopad/longrange, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled/white, -/area/shuttle/petrov/cockpit) -"ME" = ( -/obj/random/trash, -/turf/simulated/floor/plating, -/area/vacant/infirmary) -"MG" = ( -/obj/item/stool/bar, -/turf/simulated/floor/wood/walnut, -/area/vacant/bar) -"ML" = ( -/obj/machinery/door/airlock/external{ - frequency = 1380; - icon_state = "closed"; - id_tag = "petrov_shuttle_outer"; - name = "Petrov Exterior Access" - }, -/obj/effect/shuttle_landmark/petrov/start, -/turf/simulated/floor/tiled/techfloor/grid, -/area/shuttle/petrov/hallwaya) -"MN" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 1 - }, -/turf/simulated/floor/tiled/white, -/area/shuttle/petrov/hallwaya) -"MO" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/tiled, -/area/quartermaster/storage) -"MP" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/catwalk, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/fore) -"MQ" = ( -/obj/structure/table/standard, -/obj/machinery/reagent_temperature, -/turf/simulated/floor/tiled/dark/monotile, -/area/shuttle/petrov/analysis) -"MR" = ( -/turf/simulated/floor/tiled/steel_ridged, -/area/hallway/primary/fifthdeck/fore) -"MS" = ( -/turf/simulated/floor/tiled/monotile, -/area/quartermaster/storage) -"MW" = ( -/obj/structure/closet/medical_wall/filled{ - pixel_y = 32 - }, -/obj/machinery/light/small{ - dir = 1 - }, -/turf/simulated/floor/tiled, -/area/quartermaster/storage) -"MX" = ( -/obj/machinery/light{ - dir = 8 - }, -/turf/simulated/floor/tiled/white, -/area/shuttle/petrov/equipment) -"Na" = ( -/obj/effect/floor_decal/industrial/outline/grey, -/obj/machinery/portable_atmospherics/canister/empty/oxygen, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/fifthdeck/aftstarboard) -"Nb" = ( -/obj/effect/wallframe_spawn/reinforced/titanium, -/obj/machinery/door/blast/regular{ - density = 0; - dir = 4; - icon_state = "pdoor0"; - id_tag = "PetrovShield"; - name = "Petrov Blast Shutters"; - opacity = 0 - }, -/obj/effect/paint/silver, -/turf/simulated/floor/plating, -/area/shuttle/petrov/cockpit) -"Ne" = ( -/turf/simulated/floor/wood/walnut, -/area/vacant/bar) -"Nf" = ( -/obj/structure/table/standard, -/obj/item/storage/toolbox/mechanical, -/turf/simulated/floor/tiled/white/monotile, -/area/shuttle/petrov/analysis) -"Ng" = ( -/obj/effect/wallframe_spawn/reinforced_phoron/titanium, -/obj/machinery/door/firedoor, -/obj/effect/paint/silver, -/obj/machinery/atmospherics/pipe/simple/visible, -/turf/simulated/floor/reinforced, -/area/shuttle/petrov/phoron) -"Nh" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/aftstarboard) -"Ni" = ( -/obj/structure/table/steel, -/obj/machinery/door/window/brigdoor/eastleft{ - dir = 2; - name = "Petrov Security Desk" - }, -/obj/machinery/door/window/brigdoor/westright{ - dir = 1; - name = "Petrov Security Desk" - }, -/obj/machinery/door/blast/shutters{ - density = 0; - dir = 2; - icon_state = "shutter0"; - id_tag = "concheckwindow2"; - name = "Research Checkpoint Shutters"; - opacity = 0 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/shuttle/petrov/control) -"Np" = ( -/obj/effect/wallframe_spawn/reinforced, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/aftport) -"Nq" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 8 - }, -/turf/simulated/floor/reinforced, -/area/shuttle/petrov/cell1) -"Nr" = ( -/obj/effect/paint/hull, -/obj/structure/sign/solgov, -/turf/simulated/wall/titanium, -/area/exploration_shuttle/atmos) -"Nu" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/simple/visible, -/obj/machinery/atmospherics/pipe/cap/visible{ - dir = 4 - }, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/white, -/area/shuttle/petrov/isolation) -"Nv" = ( -/obj/structure/disposalpipe/segment, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/random/junk, -/obj/machinery/atmospherics/pipe/simple/hidden, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/aftstarboard) -"Nx" = ( -/obj/structure/sign/solgov, -/turf/simulated/wall/r_wall/hull, -/area/maintenance/fifthdeck/aftport) -"Ny" = ( -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 1 - }, -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/white/monotile, -/area/shuttle/petrov/eva) -"NC" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/white, -/area/shuttle/petrov/eva) -"ND" = ( -/obj/machinery/door/blast/regular{ - density = 0; - icon_state = "pdoor0"; - id_tag = "PetrovShield"; - name = "Petrov Blast Shutters"; - opacity = 0 - }, -/obj/effect/wallframe_spawn/reinforced/polarized{ - id = "rcheckinner_windows" - }, -/obj/effect/paint/silver, -/turf/simulated/floor/plating, -/area/shuttle/petrov/control) -"NF" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/railing/mapped{ - dir = 4; - icon_state = "railing0-1" - }, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/aftport) -"NG" = ( -/obj/machinery/atmospherics/binary/pump, -/turf/simulated/floor/tiled/white, -/area/shuttle/petrov/isolation) -"NI" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark, -/area/shuttle/petrov/control) -"NJ" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/door/airlock/external{ - frequency = 1380; - icon_state = "closed"; - id_tag = "petrov_shuttle_dock_inner"; - name = "Docking Port Airlock" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/maintenance/fifthdeck/aftstarboard) -"NL" = ( -/obj/random/obstruction, -/turf/simulated/floor/tiled/techfloor/grid, -/area/vacant/bar) -"NO" = ( -/obj/effect/wallframe_spawn/reinforced/polarized{ - id = "rcheckinner_windows" - }, -/obj/machinery/door/blast/regular{ - density = 0; - dir = 4; - icon_state = "pdoor0"; - id_tag = "PetrovShield"; - name = "Petrov Blast Shutters"; - opacity = 0 - }, -/obj/effect/paint/silver, -/turf/simulated/floor/plating, -/area/shuttle/petrov/control) -"NP" = ( -/obj/structure/table/rack{ - dir = 8 - }, -/obj/item/storage/toolbox/mechanical, -/obj/item/storage/toolbox/mechanical, -/turf/simulated/floor/tiled/white/monotile, -/area/shuttle/petrov/equipment) -"NS" = ( -/obj/effect/floor_decal/industrial/warning, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/turf/simulated/floor/tiled/white, -/area/shuttle/petrov/rnd) -"NW" = ( -/obj/effect/paint/silver, -/turf/simulated/wall/titanium, -/area/shuttle/petrov/toxins) -"NX" = ( -/obj/machinery/atmospherics/omni/filter{ - tag_east = 2; - tag_south = 3; - tag_west = 1 - }, -/turf/simulated/floor/tiled/white/monotile, -/area/shuttle/petrov/isolation) -"NY" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/turf/simulated/floor/tiled/white, -/area/shuttle/petrov/rnd) -"NZ" = ( -/obj/machinery/atmospherics/pipe/simple/visible{ - dir = 10 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/paint/silver, -/turf/simulated/wall/titanium, -/area/shuttle/petrov/toxins) -"Od" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/visible{ - dir = 10 - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/aftstarboard) -"Of" = ( -/obj/machinery/door/airlock/research{ - name = "Custodial Closet" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/white/monotile, -/area/shuttle/petrov/custodial) -"Og" = ( -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 1 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/shuttle/petrov/hallwaya) -"Oh" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 4 - }, -/obj/structure/disposaloutlet{ - dir = 4 - }, -/obj/structure/disposalpipe/trunk{ - dir = 8 - }, -/turf/simulated/floor/reinforced/airless, -/area/shuttle/petrov/toxins) -"Oi" = ( -/obj/machinery/atmospherics/binary/pump, -/turf/simulated/floor/tiled/white/monotile, -/area/shuttle/petrov/isolation) -"Ol" = ( -/obj/effect/floor_decal/industrial/outline/grey, -/obj/structure/cable{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/fifthdeck/aftport) -"Om" = ( -/obj/structure/disposalpipe/segment{ - dir = 8; - icon_state = "pipe-c" - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/fore) -"Oq" = ( -/obj/machinery/door/blast/regular{ - id_tag = "petrovcell1"; - name = "Test Chamber Blast Doors" - }, -/turf/simulated/floor/reinforced, -/area/shuttle/petrov/cell1) -"Oy" = ( -/obj/machinery/requests_console{ - department = "Cargo Bay"; - departmentType = 2; - pixel_x = 32 - }, -/obj/structure/railing/mapped, -/turf/simulated/floor/tiled/monotile, -/area/quartermaster/storage) -"OC" = ( -/obj/structure/table/standard, -/obj/item/stack/material/phoron, -/obj/item/stack/material/phoron, -/obj/machinery/alarm{ - dir = 8; - pixel_x = 21 - }, -/turf/simulated/floor/tiled/white, -/area/shuttle/petrov/phoron) -"OD" = ( -/obj/machinery/door/airlock/research{ - name = "Isolation Chambers" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/white/monotile, -/area/shuttle/petrov/isolation) -"OG" = ( -/turf/simulated/floor/tiled, -/area/quartermaster/storage) -"OH" = ( -/obj/structure/cable/cyan{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, -/turf/simulated/floor/tiled/white, -/area/shuttle/petrov/hallwaya) -"OM" = ( -/obj/machinery/atmospherics/portables_connector, -/obj/machinery/portable_atmospherics/canister/empty, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/newscaster{ - pixel_y = 32 - }, -/turf/simulated/floor/tiled/white/monotile, -/area/shuttle/petrov/toxins) -"ON" = ( -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/handrail{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/turf/simulated/floor/tiled/white/monotile, -/area/shuttle/petrov/cockpit) -"OO" = ( -/obj/effect/floor_decal/industrial/hatch/yellow, -/obj/machinery/r_n_d/circuit_imprinter, -/obj/item/reagent_containers/glass/beaker/sulphuric, -/obj/structure/window/reinforced{ - dir = 1 - }, -/obj/machinery/alarm{ - dir = 8; - pixel_x = 21 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/shuttle/petrov/rnd) -"OR" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/universal, -/obj/machinery/door/airlock/external{ - frequency = 1380; - icon_state = "closed"; - id_tag = "petrov_shuttle_inner"; - name = "Petrov Interior Access" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/shuttle/petrov/maint) -"OU" = ( -/obj/machinery/light{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark, -/area/shuttle/petrov/rnd) -"OW" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/random/junk, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/fore) -"OX" = ( -/turf/simulated/wall/r_wall/prepainted, -/area/quartermaster/exploration) -"OY" = ( -/obj/effect/catwalk_plated, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/turf/simulated/floor/plating, -/area/quartermaster/hangar) -"Pa" = ( -/obj/machinery/atmospherics/tvalve/mirrored/digital{ - dir = 1 - }, -/turf/simulated/floor/tiled/white, -/area/shuttle/petrov/toxins) -"Pd" = ( -/obj/random_multi/single_item/runtime, -/turf/simulated/floor/tiled, -/area/quartermaster/exploration) -"Pe" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 1 - }, -/turf/simulated/floor/reinforced/airless, -/area/shuttle/petrov/analysis) -"Pm" = ( -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 - }, -/obj/structure/disposalpipe/segment{ - dir = 1; - icon_state = "pipe-c" - }, -/turf/simulated/floor/lino, -/area/shuttle/petrov/rd) -"Pn" = ( -/obj/structure/hygiene/sink{ - dir = 4; - pixel_x = 11 - }, -/obj/machinery/light{ - dir = 4 - }, -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/obj/machinery/alarm{ - dir = 8; - pixel_x = 21 - }, -/turf/simulated/floor/tiled/white/monotile, -/area/shuttle/petrov/hallwaya) -"Pr" = ( -/obj/structure/table/standard, -/obj/machinery/atmospherics/pipe/manifold/visible/red{ - dir = 8 - }, -/obj/item/folder/nt, -/obj/machinery/power/apc{ - dir = 8; - name = "west bump"; - pixel_x = -24 - }, -/obj/structure/cable/cyan{ - d2 = 4; - icon_state = "0-4" - }, -/obj/machinery/camera/network/petrov{ - c_tag = "Petrov - Anomaly Fore"; - dir = 4 - }, -/turf/simulated/floor/tiled/white/monotile, -/area/shuttle/petrov/isolation) -"Pt" = ( -/obj/structure/sign/warning/airlock{ - dir = 8 - }, -/obj/effect/paint/silver, -/turf/simulated/wall/titanium, -/area/shuttle/petrov/hallwaya) -"Pv" = ( -/obj/machinery/door/firedoor, -/obj/structure/sign/directions/bridge{ - dir = 1; - pixel_y = 3 - }, -/obj/structure/sign/directions/security{ - dir = 1; - pixel_y = -4 - }, -/obj/effect/wallframe_spawn/no_grille, -/turf/simulated/floor/plating, -/area/hallway/primary/fifthdeck/aft) -"Px" = ( -/obj/machinery/radiocarbon_spectrometer, -/obj/machinery/alarm{ - dir = 8; - pixel_x = 21 - }, -/turf/simulated/floor/tiled/white/monotile, -/area/shuttle/petrov/analysis) -"Py" = ( -/obj/machinery/atmospherics/portables_connector{ - dir = 1 - }, -/obj/machinery/portable_atmospherics/canister/air/airlock, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/fifthdeck/aftstarboard) -"PC" = ( -/obj/machinery/power/terminal{ - dir = 8 - }, -/obj/structure/cable/yellow{ - d2 = 4; - icon_state = "0-4" - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/shuttle/petrov/maint) -"PE" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 4 - }, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 8 - }, -/turf/simulated/floor/reinforced/airless, -/area/shuttle/petrov/toxins) -"PK" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/white/monotile, -/area/shuttle/petrov/isolation) -"PM" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/aftstarboard) -"PO" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/railing/mapped{ - dir = 1; - icon_state = "railing0-1" - }, -/obj/structure/railing/mapped{ - dir = 4; - icon_state = "railing0-1" - }, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/aftport) -"PR" = ( -/obj/structure/table/glass, -/obj/item/paper_bin{ - pixel_x = 1; - pixel_y = 9 - }, -/obj/machinery/button/blast_door{ - id_tag = "PetrovShield"; - name = "Blast Shutter Control"; - pixel_x = 5; - pixel_y = -3 - }, -/obj/machinery/button/blast_door{ - id_tag = "PetrovBiohazard"; - name = "Biohazard Shutter Control"; - pixel_x = -5; - pixel_y = -3 - }, -/turf/simulated/floor/lino, -/area/shuttle/petrov/rd) -"Qd" = ( -/turf/simulated/wall/r_wall/hull, -/area/vacant/bar) -"Qe" = ( -/obj/machinery/atmospherics/portables_connector, -/obj/effect/floor_decal/industrial/outline/red, -/obj/machinery/alarm{ - pixel_y = 23; - req_access = list(list("ACCESS_ENGINE_EQUIP","ACCESS_ATMOS")) - }, -/turf/simulated/floor/tiled/white/monotile, -/area/shuttle/petrov/toxins) -"Qg" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/aftstarboard) -"Qi" = ( -/obj/machinery/atmospherics/pipe/simple/visible, -/obj/effect/paint/silver, -/turf/simulated/wall/ocp_wall, -/area/shuttle/petrov/toxins) -"Qj" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/aftstarboard) -"Qk" = ( -/obj/machinery/atmospherics/binary/pump{ - dir = 1 - }, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/white, -/area/shuttle/petrov/isolation) -"Qm" = ( -/obj/effect/paint/silver, -/turf/simulated/wall/titanium, -/area/shuttle/petrov/cell2) -"Qn" = ( -/turf/simulated/wall/prepainted, -/area/quartermaster/expedition/eva) -"Qo" = ( -/obj/structure/table/steel, -/obj/machinery/button/blast_door{ - id_tag = "PetrovShield"; - name = "Blast Shutter Control"; - pixel_x = 5; - pixel_y = -3 - }, -/obj/machinery/button/alternate/door{ - desc = "A remote control-switch for airlocks."; - id_tag = "PetrovAccess"; - name = "Petrov Interior Door Control"; - pixel_x = -5; - pixel_y = 6; - req_access = list("ACCESS_TORCH_PETROV_CONTROL") - }, -/obj/machinery/button/blast_door{ - id_tag = "PetrovBiohazard"; - name = "Biohazard Shutter Control"; - pixel_x = -5; - pixel_y = -3 - }, -/obj/machinery/camera/network/petrov{ - c_tag = "Petrov - Security"; - dir = 4 - }, -/obj/machinery/light{ - dir = 8 - }, -/obj/machinery/button/blast_door{ - id_tag = "concheckwindow2"; - name = "Office Shutter Control"; - pixel_x = 5; - pixel_y = 6 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/shuttle/petrov/control) -"Qp" = ( -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled/white/monotile, -/area/shuttle/petrov/hallwaya) -"Qr" = ( -/obj/effect/wallframe_spawn/reinforced/titanium, -/obj/machinery/door/blast/regular{ - density = 0; - icon_state = "pdoor0"; - id_tag = "PetrovShield"; - name = "Petrov Blast Shutters"; - opacity = 0 - }, -/obj/effect/paint/silver, -/turf/simulated/floor/plating, -/area/shuttle/petrov/equipment) -"Qz" = ( -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 1 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/shuttle/petrov/hallwaya) -"QA" = ( -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 1 - }, -/turf/simulated/floor/tiled/dark, -/area/quartermaster/expedition/atmos) -"QB" = ( -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/item/device/radio/intercom{ - pixel_y = 23 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/light{ - dir = 1 - }, -/turf/simulated/floor/tiled/white, -/area/shuttle/petrov/hallwaya) -"QE" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled, -/area/quartermaster/expedition/eva) -"QF" = ( -/obj/structure/table/rack, -/obj/item/stack/material/steel/fifty, -/obj/item/stack/material/glass/fifty, -/turf/simulated/floor/tiled/dark, -/area/shuttle/petrov/rnd) -"QH" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 1 - }, -/turf/simulated/floor/lino, -/area/shuttle/petrov/rd) -"QI" = ( -/obj/machinery/door/airlock/research{ - name = "Phoron Sublimation Lab" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/door/firedoor, -/turf/simulated/floor/tiled/white/monotile, -/area/shuttle/petrov/phoron) -"QK" = ( -/obj/structure/table/standard, -/obj/item/device/scanner/reagent, -/obj/item/device/scanner/spectrometer/adv, -/turf/simulated/floor/tiled/white/monotile, -/area/shuttle/petrov/equipment) -"QL" = ( -/obj/effect/wallframe_spawn/reinforced/hull, -/obj/machinery/door/blast/regular{ - id_tag = "auxbar"; - name = "Blast Shutters" - }, -/turf/simulated/floor/plating, -/area/vacant/bar) -"QQ" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/random/trash, -/obj/structure/railing/mapped, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/aftport) -"QR" = ( -/obj/structure/closet/crate/secure/biohazard, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 1; - level = 2 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/shuttle/petrov/custodial) -"QV" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/quartermaster/expedition/eva) -"QW" = ( -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 1 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/simulated/floor/tiled/white/monotile, -/area/shuttle/petrov/hallwaya) -"QX" = ( -/obj/structure/disposalpipe/segment, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/catwalk, -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/fore) -"QY" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/catwalk, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 8 - }, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/fore) -"Rc" = ( -/obj/machinery/door/firedoor, -/turf/simulated/floor/reinforced, -/area/shuttle/petrov/phoron) -"Rd" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden, -/obj/machinery/door/airlock/external{ - autoset_access = 0; - frequency = 1431; - id_tag = "guppy_shuttle_outer"; - name = "Guppy External Access" - }, -/obj/machinery/shield_diffuser, -/turf/simulated/floor/tiled/techfloor/grid, -/area/guppy_hangar/start) -"Re" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/catwalk, -/obj/machinery/atmospherics/pipe/simple/hidden/cyan{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/fore) -"Ri" = ( -/obj/machinery/door/airlock/research{ - name = "Cockpit" - }, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/white/monotile, -/area/shuttle/petrov/hallwaya) -"Rj" = ( -/obj/effect/floor_decal/industrial/outline/grey, -/obj/structure/largecrate, -/obj/random/maintenance/solgov, -/obj/random/maintenance/solgov, -/obj/random/maintenance/solgov, -/turf/simulated/floor/tiled/techmaint, -/area/maintenance/fifthdeck/fore) -"Rn" = ( -/obj/effect/floor_decal/industrial/warning, -/turf/simulated/floor/reinforced/airless, -/area/shuttle/petrov/rnd) -"Rp" = ( -/obj/machinery/atmospherics/pipe/simple/visible{ - dir = 5 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/turf/simulated/floor/tiled/white/monotile, -/area/shuttle/petrov/toxins) -"Rr" = ( -/obj/machinery/atmospherics/binary/pump{ - dir = 8 - }, -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/white, -/area/shuttle/petrov/isolation) -"Rt" = ( -/obj/effect/paint/silver, -/turf/simulated/wall/ocp_wall, -/area/shuttle/petrov/toxins) -"Rv" = ( -/obj/machinery/atmospherics/pipe/manifold4w/visible, -/turf/simulated/floor/tiled/techfloor, -/area/shuttle/petrov/maint) -"Rx" = ( -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 5 - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/shuttle/petrov/maint) -"Ry" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/catwalk, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/fore) -"Rz" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 1 - }, -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/turf/simulated/floor/tiled/dark, -/area/quartermaster/expedition/atmos) -"RB" = ( -/obj/machinery/atmospherics/unary/outlet_injector{ - dir = 1; - frequency = 1441; - icon_state = "map_injector"; - id = "phoron_in"; - use_power = 1 - }, -/turf/simulated/floor/reinforced, -/area/shuttle/petrov/phoron) -"RE" = ( -/obj/machinery/suit_storage_unit/science, -/obj/machinery/light{ - dir = 4 - }, -/obj/machinery/newscaster{ - pixel_y = 32 - }, -/turf/simulated/floor/tiled/white/monotile, -/area/shuttle/petrov/eva) -"RG" = ( -/obj/machinery/door/window/southright{ - dir = 1; - name = "Test Chamber" - }, -/obj/machinery/door/window/southright{ - name = "Test Chamber" - }, -/obj/effect/floor_decal/industrial/hatch/yellow, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/reinforced, -/area/shuttle/petrov/cell2) -"RN" = ( -/obj/effect/floor_decal/industrial/hatch/yellow, -/obj/machinery/artifact_scanpad, -/turf/simulated/floor/tiled/white/monotile, -/area/shuttle/petrov/analysis) -"RQ" = ( -/turf/simulated/wall/r_wall/hull, -/area/vacant/infirmary) -"RX" = ( -/obj/effect/floor_decal/industrial/warning, -/turf/simulated/floor/reinforced, -/area/shuttle/petrov/cell2) -"RZ" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 1 - }, -/obj/structure/table/standard, -/obj/item/anobattery{ - pixel_x = -6; - pixel_y = 2 - }, -/obj/item/anobattery{ - pixel_x = -2; - pixel_y = -2 - }, -/obj/item/anobattery{ - pixel_x = 2; - pixel_y = 2 - }, -/obj/item/anobattery{ - pixel_x = 6; - pixel_y = 6 - }, -/obj/machinery/camera/network/petrov{ - c_tag = "Petrov - Analysis"; - dir = 4 - }, -/obj/structure/cable/cyan{ - d2 = 4; - icon_state = "0-4" - }, -/obj/machinery/power/apc{ - dir = 8; - name = "west bump"; - pixel_x = -24 - }, -/turf/simulated/floor/tiled/white/monotile, -/area/shuttle/petrov/analysis) -"Sb" = ( -/obj/machinery/door/blast/regular{ - id_tag = "petrovcell2"; - name = "Test Chamber Blast Doors" - }, -/turf/simulated/floor/reinforced, -/area/shuttle/petrov/cell2) -"Sc" = ( -/obj/effect/catwalk_plated, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/plating, -/area/hallway/primary/fifthdeck/aft) -"Sg" = ( -/obj/structure/table/standard, -/obj/machinery/atmospherics/pipe/simple/visible/red, -/obj/machinery/computer/atmoscontrol/laptop{ - monitored_alarm_ids = list("petrov1","petrov2","petrov3"); - req_access = list("ACCESS_TORCH_PETROV") - }, -/obj/item/device/radio/intercom{ - dir = 4; - pixel_x = -21 - }, -/turf/simulated/floor/tiled/white/monotile, -/area/shuttle/petrov/isolation) -"So" = ( -/obj/machinery/portable_atmospherics/canister/air/airlock, -/obj/effect/floor_decal/industrial/outline/blue, -/obj/machinery/atmospherics/portables_connector, -/turf/simulated/floor/tiled/techfloor, -/area/shuttle/petrov/maint) -"Sp" = ( -/obj/machinery/atmospherics/portables_connector{ - dir = 4 - }, -/obj/effect/floor_decal/industrial/outline/blue, -/obj/structure/sign/warning/nosmoking_1{ - dir = 4; - pixel_x = -32 - }, -/turf/simulated/floor/tiled/white/monotile, -/area/shuttle/petrov/toxins) -"Sr" = ( -/obj/effect/floor_decal/corner/brown{ - dir = 5 - }, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/fifthdeck/aft) -"Ss" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/white, -/area/shuttle/petrov/analysis) -"Su" = ( -/obj/machinery/atmospherics/pipe/simple/visible{ - dir = 5 - }, -/obj/structure/disposalpipe/segment{ - dir = 4; - icon_state = "pipe-c" - }, -/turf/simulated/floor/tiled/white, -/area/shuttle/petrov/toxins) -"Sv" = ( -/obj/random/torchcloset, -/obj/random/maintenance/solgov, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/fifthdeck/aftport) -"Sw" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/aftstarboard) -"Sy" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 8; - icon_state = "warning" - }, -/obj/machinery/alarm{ - pixel_y = 24 - }, -/turf/simulated/floor/tiled/dark, -/area/quartermaster/expedition/atmos) -"Sz" = ( -/obj/structure/closet/secure_closet/scientist_torch, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled/white/monotile, -/area/shuttle/petrov/equipment) -"SB" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/aftstarboard) -"SE" = ( -/obj/effect/floor_decal/industrial/warning, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 8 - }, -/turf/simulated/floor/tiled/dark, -/area/quartermaster/expedition/atmos) -"SF" = ( -/obj/structure/table/standard, -/obj/machinery/reagent_temperature, -/obj/machinery/alarm{ - pixel_y = 23; - req_access = list(list("ACCESS_ENGINE_EQUIP","ACCESS_ATMOS")) - }, -/turf/simulated/floor/plating, -/area/vacant/infirmary) -"SH" = ( -/obj/machinery/portable_atmospherics/hydroponics, -/obj/structure/cable/cyan{ - d2 = 8; - icon_state = "0-8" - }, -/obj/machinery/power/apc{ - dir = 4; - name = "east bump"; - pixel_x = 24 - }, -/turf/simulated/floor/reinforced, -/area/shuttle/petrov/cell3) -"SI" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/reinforced, -/area/shuttle/petrov/cell1) -"SJ" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/fifthdeck/aftport) -"SK" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/dark/monotile, -/area/shuttle/petrov/rnd) -"SM" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 1 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/aftstarboard) -"SN" = ( -/obj/structure/table/rack{ - dir = 8 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/shuttle/petrov/rnd) -"SQ" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/simulated/floor/tiled/white/monotile, -/area/shuttle/petrov/hallwaya) -"SU" = ( -/obj/machinery/atmospherics/unary/vent_pump/high_volume{ - dir = 1 - }, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/reinforced, -/area/shuttle/petrov/cell1) -"SV" = ( -/obj/machinery/atmospherics/valve/shutoff/supply{ - dir = 4 - }, -/obj/structure/railing/mapped{ - dir = 4; - icon_state = "railing0-1" - }, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/aftstarboard) -"SW" = ( -/obj/effect/catwalk_plated, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/turf/simulated/floor/plating, -/area/quartermaster/hangar) -"Tc" = ( -/obj/effect/floor_decal/industrial/warning, -/obj/machinery/atmospherics/binary/pump, -/obj/machinery/light{ - dir = 4 - }, -/turf/simulated/floor/tiled/white/monotile, -/area/shuttle/petrov/phoron) -"Tg" = ( -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/disposalpipe/segment{ - dir = 2; - icon_state = "pipe-c" - }, -/turf/simulated/floor/tiled/white/monotile, -/area/shuttle/petrov/equipment) -"Tm" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/aftstarboard) -"Tp" = ( -/obj/effect/wallframe_spawn/reinforced/titanium, -/obj/machinery/door/blast/regular{ - density = 0; - icon_state = "pdoor0"; - id_tag = "PetrovShield"; - name = "Petrov Blast Shutters"; - opacity = 0 - }, -/obj/effect/paint/silver, -/turf/simulated/floor/plating, -/area/shuttle/petrov/eva) -"Tr" = ( -/obj/machinery/door/airlock/external{ - frequency = 1380; - icon_state = "closed"; - id_tag = "petrov_shuttle_outer"; - name = "Petrov Exterior Access" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/shuttle/petrov/hallwaya) -"Ts" = ( -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/shuttle/petrov/hallwaya) -"Tt" = ( -/obj/structure/cable/cyan{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/structure/catwalk, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/aftstarboard) -"Tu" = ( -/obj/machinery/atmospherics/pipe/simple/visible/blue{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/white, -/area/shuttle/petrov/isolation) -"Tw" = ( -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/railing/mapped, -/obj/machinery/atmospherics/pipe/simple/hidden/universal, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/fore) -"Tx" = ( -/obj/effect/wallframe_spawn/reinforced/titanium, -/obj/effect/paint/silver, -/turf/simulated/floor/plating, -/area/shuttle/petrov/analysis) -"TA" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable/cyan{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/aftstarboard) -"TC" = ( -/obj/structure/table/steel, -/obj/item/storage/box/glasses, -/obj/item/storage/box/glasses/rocks, -/turf/simulated/floor/wood/walnut{ - icon_state = "walnut_broken3" - }, -/area/vacant/bar) -"TD" = ( -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/white, -/area/shuttle/petrov/hallwaya) -"TF" = ( -/obj/machinery/atmospherics/pipe/simple/visible/red{ - dir = 4 - }, -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/white, -/area/shuttle/petrov/isolation) -"TG" = ( -/obj/machinery/power/apc{ - dir = 8; - name = "west bump"; - pixel_x = -24 - }, -/obj/structure/cable/cyan{ - d2 = 4; - icon_state = "0-4" - }, -/obj/structure/table/steel, -/obj/effect/floor_decal/corner/purple/half{ - dir = 8 - }, -/obj/item/deck/cards, -/turf/simulated/floor/tiled/dark/monotile, -/area/shuttle/petrov/control) -"TH" = ( -/obj/structure/table/standard, -/obj/machinery/cell_charger, -/obj/item/screwdriver{ - pixel_y = 15 - }, -/obj/item/melee/baton/loaded, -/turf/simulated/floor/tiled/white/monotile, -/area/shuttle/petrov/analysis) -"TL" = ( -/obj/structure/ladder/up, -/obj/effect/floor_decal/corner/brown{ - dir = 9 - }, -/obj/machinery/light{ - dir = 8 - }, -/obj/machinery/camera/network/fifth_deck{ - c_tag = "Fifth Deck Hallway - Ladders"; - dir = 1 - }, -/turf/simulated/floor/tiled/steel_grid, -/area/hallway/primary/fifthdeck/aft) -"TM" = ( -/obj/structure/table/glass, -/obj/item/folder/nt, -/obj/item/folder/nt, -/turf/simulated/floor/lino, -/area/shuttle/petrov/rd) -"TO" = ( -/obj/machinery/atmospherics/unary/vent_scrubber{ - dir = 1 - }, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/reinforced, -/area/shuttle/petrov/cell3) -"TP" = ( -/obj/effect/floor_decal/corner/brown{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/fifthdeck/aft) -"TR" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/shuttle/petrov/hallwaya) -"TS" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 8; - icon_state = "warning" - }, -/turf/simulated/floor/tiled/white/monotile, -/area/shuttle/petrov/hallwaya) -"TY" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/white, -/area/shuttle/petrov/hallwaya) -"TZ" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/effect/floor_decal/techfloor{ - dir = 4 - }, -/obj/structure/handrail{ - dir = 8 - }, -/obj/machinery/light/small{ - dir = 4; - icon_state = "bulb1" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/shuttle/petrov/maint) -"Ub" = ( -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/door/airlock/research{ - name = "Control Room" - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/shuttle/petrov/control) -"Um" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/fifthdeck/aftstarboard) -"Un" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/door/airlock/external{ - frequency = 1380; - icon_state = "closed"; - id_tag = "petrov_shuttle_dock_outer"; - name = "Docking Port Airlock" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/maintenance/fifthdeck/aftstarboard) -"Uq" = ( -/obj/machinery/atmospherics/unary/vent_pump/tank{ - dir = 8; - external_pressure_bound = 0; - external_pressure_bound_default = 0; - icon_state = "map_vent_in"; - id_tag = "toxins_out"; - initialize_directions = 1; - internal_pressure_bound = 4000; - internal_pressure_bound_default = 4000; - pressure_checks = 2; - pressure_checks_default = 2; - pump_direction = 0 - }, -/obj/machinery/atmospherics/pipe/simple/heat_exchanging/junction, -/turf/simulated/floor/reinforced/airless, -/area/shuttle/petrov/toxins) -"Ur" = ( -/obj/machinery/vending/assist, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 8 - }, -/obj/machinery/light_switch{ - pixel_x = -6; - pixel_y = 24 - }, -/turf/simulated/floor/tiled/white/monotile, -/area/shuttle/petrov/isolation) -"Us" = ( -/obj/structure/railing/mapped{ - dir = 8; - icon_state = "railing0-1" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/aftstarboard) -"Uu" = ( -/obj/machinery/atmospherics/pipe/manifold/visible, -/turf/simulated/floor/tiled/white, -/area/shuttle/petrov/isolation) -"Uw" = ( -/obj/effect/paint/silver, -/turf/simulated/wall/titanium, -/area/shuttle/petrov/cell3) -"Uy" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 8; - icon_state = "warning" - }, -/turf/simulated/floor/tiled/white, -/area/shuttle/petrov/analysis) -"UA" = ( -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/lino, -/area/shuttle/petrov/rd) -"UC" = ( -/obj/structure/table/rack, -/obj/random/maintenance/solgov, -/obj/random/maintenance/solgov, -/obj/random/maintenance/solgov, -/turf/simulated/floor/plating, -/area/shuttle/petrov/isolation) -"UE" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/random/junk, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/aftstarboard) -"UF" = ( -/obj/structure/table/standard, -/obj/item/device/integrated_circuit_printer, -/turf/simulated/floor/tiled/white/monotile, -/area/shuttle/petrov/equipment) -"UG" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/tiled, -/area/quartermaster/expedition) -"UH" = ( -/turf/simulated/floor/tiled/monotile, -/area/quartermaster/hangar) -"UL" = ( -/obj/structure/table/rack{ - dir = 4 - }, -/obj/item/stack/material/glass/reinforced{ - amount = 30 - }, -/obj/item/stack/material/glass/reinforced{ - amount = 30 - }, -/obj/item/stack/material/glass/reinforced{ - amount = 30 - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled/dark/monotile, -/area/quartermaster/storage) -"UM" = ( -/obj/machinery/door/airlock/research{ - name = "Chief Science Officer"; - secured_wires = 1 - }, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/tiled/white/monotile, -/area/shuttle/petrov/rd) -"UO" = ( -/turf/simulated/floor/tiled, -/area/hallway/primary/fifthdeck/aft) -"UQ" = ( -/obj/machinery/atmospherics/portables_connector{ - dir = 4 - }, -/obj/effect/floor_decal/industrial/outline/blue, -/obj/machinery/light{ - dir = 8 - }, -/turf/simulated/floor/tiled/white/monotile, -/area/shuttle/petrov/toxins) -"UT" = ( -/obj/effect/floor_decal/industrial/warning/fulltile, -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/shuttle/petrov/hallwaya) -"UX" = ( -/obj/machinery/atmospherics/unary/vent_pump/on, -/turf/simulated/floor/tiled/white, -/area/shuttle/petrov/toxins) -"Va" = ( -/obj/machinery/airlock_sensor{ - frequency = 1380; - id_tag = "petrov_shuttle_sensor"; - pixel_x = -24; - pixel_y = 12 - }, -/obj/machinery/oxygen_pump{ - pixel_y = 32 - }, -/obj/effect/floor_decal/techfloor{ - dir = 1 - }, -/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{ - id_tag = "petrov_shuttle_pump" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/shuttle/petrov/hallwaya) -"Ve" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/random/trash, -/obj/structure/railing/mapped, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/aftstarboard) -"Vk" = ( -/obj/structure/bed/chair/office/light{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/shuttle/petrov/analysis) -"Vm" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/door/airlock/external{ - frequency = 1380; - icon_state = "closed"; - id_tag = "petrov_shuttle_dock_outer"; - name = "Docking Port Airlock" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/maintenance/fifthdeck/aftstarboard) -"Vo" = ( -/obj/item/stool/padded, -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/shuttle/petrov/control) -"Vr" = ( -/obj/structure/sign/solgov, -/turf/simulated/wall/r_wall/hull, -/area/maintenance/fifthdeck/aftstarboard) -"Vv" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/disposalpipe/segment{ - dir = 8; - icon_state = "pipe-c" - }, -/turf/simulated/floor/tiled/white/monotile, -/area/shuttle/petrov/rnd) -"Vy" = ( -/obj/machinery/light/small{ - dir = 8 - }, -/obj/machinery/atmospherics/unary/vent_pump/high_volume{ - dir = 1 - }, -/turf/simulated/floor/reinforced, -/area/shuttle/petrov/cell3) -"Vz" = ( -/obj/structure/ladder/up, -/obj/effect/floor_decal/corner/brown{ - dir = 9 - }, -/obj/machinery/alarm{ - dir = 4; - pixel_x = -24 - }, -/turf/simulated/floor/tiled/steel_grid, -/area/hallway/primary/fifthdeck/aft) -"VA" = ( -/obj/structure/disposalpipe/segment, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/fore) -"VB" = ( -/obj/machinery/door/blast/regular{ - density = 0; - dir = 4; - icon_state = "pdoor0"; - id_tag = "PetrovBiohazard"; - name = "Petrov Biohazard Shutters"; - opacity = 0 - }, -/obj/effect/floor_decal/corner/red/mono, -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/simulated/floor/tiled/white/monotile, -/area/shuttle/petrov/hallwaya) -"VC" = ( -/obj/structure/railing/mapped, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/aftport) -"VD" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/visible{ - dir = 9 - }, -/obj/machinery/button/blast_door{ - id_tag = "petrovcell2"; - name = "Test Chamber Vent"; - pixel_x = -26; - pixel_y = -26 - }, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/white, -/area/shuttle/petrov/isolation) -"VF" = ( -/obj/machinery/atmospherics/pipe/simple/visible{ - dir = 9 - }, -/obj/machinery/light, -/turf/simulated/floor/tiled/white/monotile, -/area/shuttle/petrov/isolation) -"VG" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/effect/floor_decal/techfloor{ - dir = 8 - }, -/obj/item/device/radio/intercom{ - dir = 4; - pixel_x = -22 - }, -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 5 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/maintenance/fifthdeck/aftstarboard) -"VM" = ( -/obj/structure/noticeboard{ - pixel_y = 32 - }, -/obj/machinery/camera/network/petrov{ - c_tag = "Petrov - Chief Science Officer"; - dir = 4 - }, -/obj/machinery/light{ - dir = 8 - }, -/turf/simulated/floor/lino, -/area/shuttle/petrov/rd) -"VN" = ( -/obj/structure/closet/hydrant{ - pixel_x = -32 - }, -/turf/simulated/floor/tiled/monotile, -/area/quartermaster/hangar) -"VO" = ( -/obj/structure/table/rack, -/obj/item/storage/belt/archaeology, -/obj/item/storage/belt/archaeology, -/obj/item/storage/belt/archaeology, -/obj/item/clothing/glasses/meson, -/obj/item/clothing/glasses/meson, -/obj/item/clothing/glasses/meson, -/obj/item/pickaxe{ - pixel_x = 5 - }, -/obj/item/pickaxe{ - pixel_x = -2; - pixel_y = -2 - }, -/turf/simulated/floor/tiled/white, -/area/shuttle/petrov/eva) -"VP" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 4 - }, -/turf/simulated/floor/reinforced/airless, -/area/shuttle/petrov/isolation) -"VT" = ( -/turf/simulated/floor/lino, -/area/shuttle/petrov/rd) -"VU" = ( -/obj/structure/table/rack, -/obj/item/device/scanner/xenobio, -/obj/item/device/scanner/xenobio, -/obj/item/device/scanner/xenobio, -/obj/item/storage/excavation, -/obj/item/device/measuring_tape, -/turf/simulated/floor/tiled/white, -/area/shuttle/petrov/eva) -"VV" = ( -/obj/structure/closet/secure_closet/scientist_torch, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/newscaster{ - pixel_y = 32 - }, -/turf/simulated/floor/tiled/white/monotile, -/area/shuttle/petrov/equipment) -"VX" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/disposalpipe/segment, -/obj/random/junk, -/obj/structure/railing/mapped, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/aftstarboard) -"VY" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/obj/structure/catwalk, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/aftstarboard) -"VZ" = ( -/obj/effect/floor_decal/industrial/warning, -/obj/structure/disposalpipe/up{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/zpipe/up/cyan{ - dir = 8 - }, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/aftport) -"Wb" = ( -/obj/effect/shuttle_landmark/ninja/hanger{ - name = "5th Deck, Fore" - }, -/turf/space, -/area/space) -"Wg" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/obj/structure/disposalpipe/segment, -/obj/structure/cable{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/aftstarboard) -"Wl" = ( -/obj/effect/paint/silver, -/turf/simulated/wall/titanium, -/area/shuttle/petrov/isolation) -"Wn" = ( -/turf/simulated/floor/tiled/white, -/area/shuttle/petrov/hallwaya) -"Wo" = ( -/obj/structure/cable/green{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/obj/structure/railing/mapped{ - dir = 8; - icon_state = "railing0-1" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/aftstarboard) -"Wp" = ( -/obj/structure/table/reinforced, -/obj/machinery/recharger, -/obj/random/cash, -/turf/simulated/floor/tiled/white, -/area/shuttle/petrov/cockpit) -"Wt" = ( -/obj/machinery/light{ - dir = 8 - }, -/obj/structure/flora/pottedplant/unusual, -/turf/simulated/floor/lino, -/area/shuttle/petrov/rd) -"Wy" = ( -/obj/machinery/portable_atmospherics/canister/phoron, -/obj/machinery/atmospherics/unary/vent_pump/tank{ - dir = 1; - external_pressure_bound = 0; - external_pressure_bound_default = 0; - icon_state = "map_vent_in"; - id_tag = "phoron_out"; - initialize_directions = 1; - internal_pressure_bound = 4000; - internal_pressure_bound_default = 4000; - pressure_checks = 2; - pressure_checks_default = 2; - pump_direction = 0 - }, -/turf/simulated/floor/reinforced, -/area/shuttle/petrov/phoron) -"Wz" = ( -/obj/machinery/computer/air_control{ - input_tag = "phoron_in"; - name = "Test Chamber Gas Monitor"; - output_tag = "phoron_out"; - sensor_name = "Test Chamber"; - sensor_tag = "phoron_sensor" - }, -/turf/simulated/floor/tiled/white/monotile, -/area/shuttle/petrov/phoron) -"WD" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/obj/machinery/power/apc{ - dir = 8; - name = "west bump"; - pixel_x = -24 - }, -/obj/structure/cable/green, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/aftstarboard) -"WF" = ( -/obj/structure/cable/cyan{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/structure/catwalk, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/aftstarboard) -"WG" = ( -/obj/effect/floor_decal/industrial/warning, -/turf/simulated/floor/tiled/white/monotile, -/area/shuttle/petrov/phoron) -"WH" = ( -/obj/machinery/suit_storage_unit/mining, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled/monotile, -/area/quartermaster/expedition/eva) -"WO" = ( -/obj/structure/table/standard, -/obj/item/disk/tech_disk, -/obj/item/disk/tech_disk, -/obj/item/disk/design_disk, -/obj/item/disk/design_disk, -/obj/item/reagent_containers/dropper{ - pixel_y = -4 - }, -/turf/simulated/floor/tiled/white/monotile, -/area/shuttle/petrov/rnd) -"WR" = ( -/turf/simulated/floor/reinforced, -/area/shuttle/petrov/cell2) -"WU" = ( -/turf/simulated/wall/prepainted, -/area/quartermaster/expedition) -"Xa" = ( -/obj/machinery/atmospherics/pipe/simple/hidden, -/obj/effect/paint/silver, -/turf/simulated/wall/titanium, -/area/shuttle/petrov/maint) -"Xb" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 1 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 1 - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/aftstarboard) -"Xc" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark, -/area/shuttle/petrov/rnd) -"Xd" = ( -/obj/structure/sign/warning/nosmoking_1{ - dir = 8; - pixel_x = 32 - }, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 1 - }, -/obj/machinery/light, -/turf/simulated/floor/tiled/white/monotile, -/area/shuttle/petrov/hallwaya) -"Xe" = ( -/obj/structure/bed/chair/office/comfy/red, -/turf/simulated/floor/tiled/dark, -/area/shuttle/petrov/control) -"Xf" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/fore) -"Xi" = ( -/turf/simulated/floor/reinforced/airless, -/area/space) -"Xk" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/aftstarboard) -"Xl" = ( -/obj/random/junk, -/obj/machinery/atmospherics/pipe/simple/hidden/universal, -/obj/structure/railing/mapped{ - dir = 4; - icon_state = "railing0-1" - }, -/obj/structure/railing/mapped{ - dir = 1; - icon_state = "railing0-1" - }, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/aftstarboard) -"Xp" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/catwalk, -/obj/machinery/alarm{ - dir = 4; - pixel_x = -24 - }, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/aftstarboard) -"Xq" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 1 - }, -/turf/simulated/floor/tiled/white, -/area/shuttle/petrov/toxins) -"Xs" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 4; - level = 2 - }, -/turf/simulated/floor/tiled/white, -/area/shuttle/petrov/equipment) -"Xx" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/fore) -"Xz" = ( -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/fifthdeck/aft) -"XB" = ( -/obj/machinery/atmospherics/pipe/simple/visible{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/turf/simulated/floor/tiled/white, -/area/shuttle/petrov/toxins) -"XD" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/fore) -"XE" = ( -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/sign/warning/compressed_gas, -/turf/simulated/wall/prepainted, -/area/hallway/primary/fifthdeck/aft) -"XG" = ( -/obj/effect/paint/silver, -/turf/simulated/wall/ocp_wall, -/area/shuttle/petrov/phoron) -"XH" = ( -/obj/machinery/atmospherics/pipe/simple/visible{ - dir = 10 - }, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/white, -/area/shuttle/petrov/isolation) -"XI" = ( -/turf/simulated/wall/prepainted, -/area/vacant/bar) -"XJ" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/effect/floor_decal/techfloor{ - dir = 8 - }, -/obj/structure/handrail{ - dir = 4 - }, -/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{ - id_tag = "petrov_shuttle_pump" - }, -/obj/machinery/airlock_sensor{ - frequency = 1380; - id_tag = "petrov_shuttle_sensor"; - pixel_x = -24; - pixel_y = 12 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/shuttle/petrov/maint) -"XQ" = ( -/obj/machinery/atmospherics/portables_connector, -/turf/simulated/floor/tiled/white, -/area/shuttle/petrov/phoron) -"XT" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/aftport) -"XU" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 - }, -/obj/structure/railing/mapped{ - dir = 1; - icon_state = "railing0-1" - }, -/obj/machinery/meter, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/aftstarboard) -"XW" = ( -/turf/simulated/floor/tiled/white/monotile, -/area/shuttle/petrov/equipment) -"Yb" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/tiled/white, -/area/shuttle/petrov/hallwaya) -"Yc" = ( -/obj/machinery/computer/ship/sensors{ - dir = 8 - }, -/turf/simulated/floor/tiled/techfloor, -/area/guppy_hangar/start) -"Yf" = ( -/obj/machinery/atmospherics/pipe/manifold/visible{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/shuttle/petrov/isolation) -"Yg" = ( -/obj/structure/table/steel, -/obj/item/book/manual/nt_regs, -/obj/item/folder/nt, -/obj/structure/cable/cyan{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/machinery/newscaster{ - pixel_x = 32 - }, -/turf/simulated/floor/tiled/dark, -/area/shuttle/petrov/control) -"Yi" = ( -/obj/structure/table/rack{ - dir = 4 - }, -/obj/item/stack/material/steel{ - amount = 30 - }, -/obj/item/stack/material/steel{ - amount = 30 - }, -/obj/item/stack/material/steel{ - amount = 30 - }, -/obj/item/stack/material/plasteel{ - amount = 20 - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled/dark/monotile, -/area/quartermaster/storage) -"Yk" = ( -/obj/effect/paint/silver, -/turf/simulated/wall/titanium, -/area/shuttle/petrov/phoron) -"Ym" = ( -/turf/simulated/floor/plating, -/area/quartermaster/storage) -"Yn" = ( -/obj/machinery/disposal, -/obj/machinery/firealarm{ - dir = 1; - pixel_y = -24 - }, -/obj/machinery/light_switch{ - pixel_x = -10; - pixel_y = -21 - }, -/obj/effect/floor_decal/industrial/hatch/yellow, -/obj/structure/disposalpipe/trunk{ - dir = 4 - }, -/turf/simulated/floor/tiled/white/monotile, -/area/shuttle/petrov/equipment) -"Yo" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/structure/catwalk, -/obj/random_multi/single_item/poppy, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/aftport) -"Yp" = ( -/obj/machinery/atmospherics/pipe/simple/visible{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/visible, -/turf/simulated/floor/tiled/white, -/area/shuttle/petrov/toxins) -"Yr" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 1 - }, -/turf/simulated/floor/reinforced/airless, -/area/shuttle/petrov/eva) -"Ys" = ( -/obj/machinery/door/airlock/research{ - name = "Toxins Lab" - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/door/firedoor, -/turf/simulated/floor/tiled/white/monotile, -/area/shuttle/petrov/toxins) -"Yu" = ( -/obj/effect/catwalk_plated, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 8 - }, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/turf/simulated/floor/plating, -/area/quartermaster/hangar) -"Yw" = ( -/obj/machinery/atmospherics/pipe/simple/visible, -/obj/structure/dispenser, -/obj/item/device/radio/intercom{ - dir = 4; - pixel_x = -21 - }, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/white/monotile, -/area/shuttle/petrov/toxins) -"Yz" = ( -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/tiled/white, -/area/shuttle/petrov/hallwaya) -"YE" = ( -/obj/effect/wallframe_spawn/reinforced/titanium, -/obj/machinery/door/blast/shutters{ - density = 0; - dir = 2; - icon_state = "shutter0"; - id_tag = "concheckwindow2"; - name = "Research Checkpoint Shutters"; - opacity = 0 - }, -/turf/simulated/floor/plating, -/area/shuttle/petrov/control) -"YG" = ( -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 1 - }, -/obj/structure/cable/cyan{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/structure/disposalpipe/junction{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/shuttle/petrov/hallwaya) -"YH" = ( -/obj/random/obstruction, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/vacant/bar) -"YJ" = ( -/turf/simulated/floor/tiled/white, -/area/shuttle/petrov/phoron) -"YL" = ( -/obj/structure/disposalpipe/segment{ - dir = 2; - icon_state = "pipe-c" - }, -/obj/structure/cable{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/fifthdeck/aftport) -"YQ" = ( -/obj/structure/cable/cyan{ - d2 = 4; - icon_state = "0-4" - }, -/obj/machinery/power/apc{ - dir = 8; - name = "west bump"; - pixel_x = -24 - }, -/turf/simulated/floor/lino, -/area/shuttle/petrov/rd) -"YS" = ( -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply, -/obj/structure/cable/cyan{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/structure/disposalpipe/junction{ - dir = 4; - icon_state = "pipe-j2" - }, -/turf/simulated/floor/tiled/white, -/area/shuttle/petrov/hallwaya) -"YV" = ( -/obj/structure/hygiene/shower{ - dir = 4 - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/camera/network/petrov{ - c_tag = "Petrov - Entry"; - dir = 4 - }, -/obj/machinery/atmospherics/unary/vent_pump/on, -/obj/machinery/embedded_controller/radio/airlock/docking_port{ - dir = 4; - frequency = 1380; - id_tag = "petrov_shuttle_airlock"; - pixel_x = -24; - req_access = list("ACCESS_TORCH_PETROV"); - tag_airpump = "petrov_shuttle_pump"; - tag_chamber_sensor = "petrov_shuttle_sensor"; - tag_exterior_door = "petrov_shuttle_outer"; - tag_interior_door = "petrov_shuttle_inner" - }, -/turf/simulated/floor/tiled/white/monotile, -/area/shuttle/petrov/hallwaya) -"YW" = ( -/obj/random/junk, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/fore) -"YZ" = ( -/obj/machinery/atmospherics/unary/freezer{ - icon_state = "freezer" - }, -/obj/item/device/radio/intercom{ - pixel_y = 23 - }, -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/white/monotile, -/area/shuttle/petrov/isolation) -"Za" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/aftstarboard) -"Zb" = ( -/obj/structure/sign/directions/engineering{ - dir = 1; - pixel_y = 3 - }, -/obj/structure/sign/directions/evac{ - dir = 1; - pixel_y = -4 - }, -/turf/simulated/wall/prepainted, -/area/hallway/primary/fifthdeck/aft) -"Zc" = ( -/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{ - dir = 1; - id_tag = "petrov_shuttle_pump" - }, -/obj/effect/floor_decal/techfloor, -/obj/structure/handrail{ - dir = 1 - }, -/obj/machinery/light/small, -/turf/simulated/floor/tiled/techfloor/grid, -/area/shuttle/petrov/hallwaya) -"Zd" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/tiled, -/area/quartermaster/expedition/eva) -"Ze" = ( -/obj/machinery/computer/modular/preset/civilian, -/obj/effect/floor_decal/corner/purple/half{ - dir = 1 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/shuttle/petrov/control) -"Zj" = ( -/obj/structure/disposalpipe/segment, -/turf/simulated/wall/prepainted, -/area/maintenance/fifthdeck/fore) -"Zl" = ( -/obj/item/device/radio/intercom{ - pixel_y = 26 - }, -/obj/machinery/portable_atmospherics/powered/scrubber/broken, -/turf/simulated/floor/tiled/dark, -/area/quartermaster/expedition/atmos) -"Zm" = ( -/obj/structure/cable{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/effect/wallframe_spawn/no_grille, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/aftstarboard) -"Zn" = ( -/obj/machinery/atmospherics/pipe/manifold4w/hidden, -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/effect/floor_decal/techfloor{ - dir = 8 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/guppy_hangar/start) -"Zo" = ( -/obj/effect/catwalk_plated, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/plating, -/area/hallway/primary/fifthdeck/aft) -"Zp" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 4 - }, -/obj/machinery/computer/air_control{ - dir = 8; - input_tag = "toxins_in"; - name = "Toxins Gas Monitor"; - output_tag = "toxins_out"; - sensor_name = "Toxins Test Chamber"; - sensor_tag = "toxins_sensor" - }, -/turf/simulated/floor/tiled/white, -/area/shuttle/petrov/toxins) -"Zr" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/white, -/area/shuttle/petrov/hallwaya) -"Zu" = ( -/obj/machinery/atmospherics/pipe/simple/visible{ - dir = 9 - }, -/obj/machinery/light/small{ - dir = 4; - pixel_y = 8 - }, -/turf/simulated/floor/tiled/techfloor, -/area/shuttle/petrov/maint) -"Zw" = ( -/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{ - dir = 1; - id_tag = "petrov_shuttle_pump" - }, -/obj/effect/floor_decal/techfloor, -/obj/structure/handrail{ - dir = 1 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/shuttle/petrov/hallwaya) -"Zx" = ( -/obj/structure/window/reinforced, -/obj/structure/closet/crate/radiation, -/turf/simulated/floor/tiled/white, -/area/shuttle/petrov/equipment) -"Zy" = ( -/obj/effect/floor_decal/industrial/warning, -/turf/simulated/floor/reinforced, -/area/shuttle/petrov/cell1) -"ZA" = ( -/turf/simulated/wall/prepainted, -/area/rnd/canister) -"ZB" = ( -/obj/machinery/atmospherics/pipe/simple/visible{ - dir = 6 - }, -/obj/machinery/portable_atmospherics/canister, -/obj/machinery/alarm{ - pixel_y = 23; - req_access = list(list("ACCESS_ENGINE_EQUIP","ACCESS_ATMOS")) - }, -/obj/structure/cable/cyan{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/turf/simulated/floor/tiled/white/monotile, -/area/shuttle/petrov/isolation) -"ZD" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 1 - }, -/obj/machinery/light, -/turf/simulated/floor/tiled/white, -/area/shuttle/petrov/hallwaya) -"ZE" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/disposalpipe/segment, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/aftstarboard) -"ZF" = ( -/obj/effect/floor_decal/industrial/warning, -/turf/simulated/floor/tiled/monotile, -/area/quartermaster/exploration) -"ZG" = ( -/turf/simulated/wall/r_wall/hull, -/area/maintenance/fifthdeck/aftstarboard) -"ZJ" = ( -/obj/effect/wallframe_spawn/reinforced/titanium, -/obj/machinery/door/blast/regular{ - density = 0; - icon_state = "pdoor0"; - id_tag = "PetrovShield"; - name = "Petrov Blast Shutters"; - opacity = 0 - }, -/obj/effect/paint/silver, -/turf/simulated/floor/plating, -/area/shuttle/petrov/analysis) -"ZL" = ( -/obj/structure/sign/directions/science{ - dir = 1; - pixel_y = 3 - }, -/obj/structure/sign/directions/infirmary{ - dir = 1; - pixel_y = -4 - }, -/turf/simulated/wall/prepainted, -/area/hallway/primary/fifthdeck/aft) -"ZN" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/fore) -"ZQ" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/manifold/visible, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/white, -/area/shuttle/petrov/isolation) -"ZT" = ( -/obj/machinery/atmospherics/pipe/manifold/visible, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/fifthdeck/aftstarboard) -"ZU" = ( -/obj/structure/table/standard, -/obj/item/device/geiger, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 1 - }, -/turf/simulated/floor/tiled/white/monotile, -/area/shuttle/petrov/isolation) -"ZV" = ( -/obj/structure/window/reinforced{ - dir = 8 - }, -/obj/machinery/disposal, -/obj/effect/floor_decal/industrial/hatch/yellow, -/obj/effect/floor_decal/industrial/warning{ - dir = 8; - icon_state = "warning" - }, -/obj/structure/disposalpipe/trunk{ - dir = 8 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/shuttle/petrov/analysis) -"ZY" = ( -/turf/simulated/floor/tiled/white, -/area/shuttle/petrov/analysis) - -(1,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(2,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(3,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(4,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(5,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(6,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(7,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(8,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(9,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(10,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(11,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(12,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(13,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(14,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(15,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(16,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(17,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(18,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(19,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(20,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(21,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(22,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(23,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(24,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(25,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(26,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(27,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(28,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(29,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(30,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(31,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(32,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(33,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(34,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -Wb -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(35,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(36,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(37,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(38,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(39,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(40,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(41,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(42,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(43,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(44,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(45,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(46,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(47,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(48,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(49,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(50,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(51,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(52,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(53,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(54,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(55,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -an -RQ -RQ -RQ -RQ -RQ -an -an -an -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -an -an -an -an -an -an -an -an -an -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(56,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -an -an -RQ -RQ -RQ -RQ -RQ -an -an -an -an -aa -aa -aa -aa -aa -aa -aa -aa -aa -an -an -an -an -an -an -an -an -an -an -an -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(57,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -an -an -RQ -RQ -RQ -RQ -RQ -an -an -an -an -an -aa -aa -aa -aa -aa -aa -aa -an -an -an -an -an -an -an -an -an -an -an -an -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(58,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -an -an -RQ -rW -pN -sN -er -hN -hN -an -an -an -an -an -an -an -an -an -an -an -an -an -pi -pi -uB -yq -ux -ux -an -an -an -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(59,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -an -an -an -pV -aM -aM -HF -er -hN -eN -jk -an -an -an -an -an -an -an -an -an -an -an -mh -mh -mh -mh -mh -mh -mh -uy -an -an -an -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(60,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -an -an -an -pW -sI -sP -sS -sU -uK -eN -mh -an -an -an -an -an -an -an -an -an -an -an -mh -ra -uC -rU -rm -rn -mh -uA -an -an -an -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(61,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -an -an -an -SF -sq -sQ -sT -pO -uL -uO -cZ -ya -ln -or -iW -iW -iW -iW -iW -iW -qV -iY -qX -rl -hN -hN -hN -ro -mh -uz -an -an -an -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(62,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -an -an -an -an -er -ET -aM -ME -er -uM -uP -uT -uU -uV -uW -pl -qM -DT -qS -pl -OW -qW -tb -rA -ri -rk -pm -In -rp -IN -yq -an -an -an -an -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(63,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -an -an -se -Jc -er -pM -dn -sR -er -su -uQ -jk -yq -sf -jo -jk -wF -wF -iz -wF -wF -wF -wF -rB -mh -mh -mh -mh -rq -rr -ZN -ru -rH -an -an -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(64,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -an -an -jk -jk -er -er -er -er -er -su -DF -jk -fl -fl -jM -fl -wF -hm -iA -iI -lj -jG -wF -rB -mh -ph -ph -pf -ph -ph -ph -rg -rI -an -an -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(65,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -an -an -an -pS -XD -XD -XD -XD -XD -pY -Xf -DF -Rj -pp -db -mQ -ip -wF -iv -iB -iK -jw -jH -wF -rB -mk -re -pe -qP -qT -qY -rx -rt -rI -an -an -an -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(66,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -an -an -mp -rV -uI -uI -uI -uI -uI -uI -uI -uS -pQ -pq -hu -na -iE -wF -lt -iC -ac -jx -jQ -wF -rC -mI -tm -rF -qU -qZ -rc -rb -rg -rI -jk -an -an -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(67,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -an -an -mq -pT -mh -yq -yq -yq -yq -yq -yq -mh -fl -ct -ii -pk -fl -wF -iy -iy -wF -jy -wF -wF -fl -nk -ph -ph -ph -ph -ph -ph -gB -rI -py -an -an -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(68,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -an -an -mq -cd -VA -Zj -VA -VA -VA -VA -VA -Fw -mM -hv -gK -qI -rL -rM -rN -qK -qL -rR -qN -qO -mM -rw -ry -ry -ry -ry -ry -ry -ne -ng -ni -an -an -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(69,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -an -an -an -mt -QY -ZN -ZN -ZN -yc -mh -wZ -mh -sg -fl -so -mN -sm -hh -gv -rO -oY -oZ -qR -pa -sn -fl -mH -uT -uT -wA -uT -uT -uT -rG -rK -nk -an -an -an -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(70,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -an -an -an -an -gG -hS -ce -ce -ce -jr -ce -ce -fl -fl -fl -fl -fl -fl -kR -jO -rP -oU -kS -hl -hl -hl -eu -eu -eu -eu -eu -eu -eu -eu -eu -Ds -rE -an -an -an -an -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(71,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -an -an -Lf -YW -qa -MP -ce -iw -bq -jI -ix -lx -fl -kl -kl -kl -kl -oJ -pq -au -rQ -aI -eu -hx -kj -kj -kh -hO -eu -jE -ko -kM -jD -kP -eu -hM -nn -an -an -an -an -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(72,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -an -an -as -yB -Tw -Ry -ce -gp -gp -jJ -jz -jz -fl -kl -kl -kl -kl -kl -MR -jO -rS -oY -hl -hw -iu -kf -kk -jF -kB -kC -kE -kC -kG -kC -kJ -mn -nr -ns -nt -an -an -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(73,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -an -an -an -DY -Fh -xP -HK -ce -hk -hk -jJ -jA -lq -fl -kl -kl -kl -kl -kl -MR -jO -rS -oU -iT -hw -kg -Pd -ki -kL -hl -iP -kg -hz -mx -DR -eu -si -to -nf -nu -an -an -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -fW -"} -(74,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -an -an -an -aL -mh -qc -gU -ce -hn -jq -jJ -lc -lr -fl -kl -kl -kl -kl -kl -MR -po -rT -oW -hl -kn -fH -fH -kw -ky -hl -iQ -hz -xZ -kI -kv -eu -rg -nB -nb -nv -an -an -an -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(75,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -an -an -ar -aO -mg -QX -Om -ce -iD -gd -jK -jL -ly -fl -kl -kl -kl -kl -kl -fl -qJ -aF -oX -eu -iO -kp -Cj -kA -kz -OX -kr -eS -ku -ZF -kQ -eu -mJ -nC -nF -nw -nZ -an -an -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(76,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -an -an -bU -lY -lY -nI -lY -ce -ce -js -js -ce -ce -fl -fl -fl -fl -fl -fl -pp -lv -fY -lv -eu -eu -kq -kq -kq -OX -OX -kq -kt -kq -eu -eu -eu -aJ -aJ -aJ -uZ -JG -an -an -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(77,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -an -an -Re -lY -bd -lm -lA -lY -mc -jt -jt -jB -aX -kU -aX -Jn -aX -tO -zf -aX -aX -aX -aX -kx -ev -aX -aX -aX -oM -kU -aX -aX -aX -aX -lQ -lM -jZ -lH -aJ -ny -ob -an -an -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(78,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -an -an -wW -gM -nQ -CR -zv -lY -eM -aX -cy -Ho -eU -eU -eU -Ho -Ho -Ho -Ho -Ho -Ho -Ho -Ho -Ho -Ho -Ho -Ho -Ho -Ho -Ho -Ho -Ho -hT -aX -lV -lS -pF -lG -aJ -nz -gU -an -an -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(79,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -FS -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -an -an -Lb -lY -GP -Rz -aQ -lZ -EC -aX -ee -bi -bi -bi -bS -gY -cq -cq -cq -cq -cw -ek -eq -eZ -fI -fR -Nr -fZ -fZ -np -np -np -fS -aX -UH -lW -pF -lG -aJ -nz -gU -an -an -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(80,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -an -an -JG -lY -Zl -lD -lE -qQ -wt -SW -ee -bi -ag -bo -bo -ag -cr -cO -dg -dx -cw -cw -es -fa -es -fZ -fZ -hV -mo -sL -xu -xW -fS -aX -UH -kD -lS -lL -aJ -nz -gU -an -an -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(81,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -an -an -JG -lY -Sy -QA -SE -lZ -EC -ih -ee -ag -ag -bv -bT -ag -cs -cP -cP -cP -dU -cw -et -fb -fJ -fZ -gk -hW -mr -tw -xw -xW -fS -aX -UH -kD -pF -lH -aJ -uD -gU -an -an -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(82,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -an -an -JG -lY -wr -tV -Hm -lY -hY -ih -ee -aA -aR -bw -bV -ag -cu -cQ -dh -dy -dV -cw -ew -fd -fK -fZ -gl -ia -mA -uN -np -np -fS -aX -lX -pF -lT -lG -aJ -nz -gU -an -an -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(83,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -an -an -JG -lY -EK -tV -lz -lY -ir -ih -ee -aA -bf -bx -bW -ag -cv -cR -di -dz -dW -cw -ey -fe -fL -fZ -gm -iM -mG -vs -np -ym -fS -aX -lR -lN -lF -lK -aJ -nW -og -an -an -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(84,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ZG -ZG -IH -lY -lY -lY -lY -lY -md -ih -ee -ag -bg -by -bg -ag -cw -cw -dj -AW -cw -cw -ez -ff -ez -fZ -go -fZ -np -np -np -yp -fS -oO -gO -gO -gO -gO -gO -uZ -Xx -an -an -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(85,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ZG -ZG -aH -ye -aJ -iX -fX -aJ -UH -ih -ee -aB -bh -bz -bY -cm -cD -cS -dk -dA -dY -el -eA -fm -fM -gb -gx -jv -nT -wh -xz -yv -fS -aX -jR -jT -jR -jY -CY -uZ -Xx -an -an -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(86,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ZG -ZG -aH -ye -aJ -ju -fX -lk -UH -ih -ee -aB -bj -bA -bZ -cn -cE -dc -dl -dB -dZ -em -eC -fn -fN -gg -gy -ke -oc -ww -xC -yv -fS -OY -jU -jV -jS -kY -lb -gs -Xx -an -an -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(87,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ZG -ZG -aH -ho -aJ -jX -li -aJ -UH -ih -ee -aB -bk -bB -ca -aP -cI -dd -dm -dD -ea -eh -eE -fo -eE -gi -gz -gi -pX -pX -pX -yp -fS -Bm -jR -ld -jR -la -Gl -cB -Cr -an -an -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(88,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ZG -ZG -aH -ye -aJ -aJ -aJ -aJ -UH -ih -ee -aB -bh -bB -cb -aP -cJ -de -dv -dJ -eb -eh -eF -fp -fO -gi -hd -km -qk -wI -pX -yM -fS -Bm -gO -gO -gO -gO -gO -rj -oa -ws -ws -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(89,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ZG -ZG -lC -Ih -vf -fi -hp -aJ -FZ -ih -ee -aB -bm -bC -cc -aP -cK -de -dv -dJ -ed -eh -eK -fq -fP -gi -he -kK -rs -wM -pX -pX -fS -Bm -VN -aJ -mR -nd -QQ -nY -oh -ws -ws -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(90,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ZG -ZG -GO -AU -at -bp -hA -aJ -gw -fB -ee -aP -aP -bE -cl -aP -cL -df -dw -dK -eg -eh -eQ -fr -fQ -gi -hs -le -sB -xm -xJ -zg -fS -nR -nJ -aJ -mS -mX -mY -rz -oi -ws -ws -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(91,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ZG -ZG -aH -ye -ye -ye -sh -aJ -ir -nN -ee -bi -aP -bF -bF -aP -cM -cM -cM -dL -eh -eh -eX -fu -eX -gi -gi -mb -sH -xn -xR -zg -fS -Bm -xp -aJ -mK -nD -nD -rD -oj -ws -ws -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(92,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ZG -ZG -dP -Us -aW -aW -sr -aJ -UH -nN -ee -bi -bi -bi -bi -Fe -cN -cN -cN -dT -ei -en -eY -fx -eY -gj -IS -gi -gi -pX -pX -pX -fS -Bm -UH -aJ -mL -gI -gI -Mj -yA -ws -ws -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(93,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ZG -ZG -tY -My -aW -hi -uE -aJ -kb -nO -eH -eT -eV -eV -eV -eT -eT -eT -eT -eT -eT -eT -eT -fy -eT -eT -eT -eT -eT -eT -eT -eT -hY -nU -nK -aJ -sj -sk -gI -pz -ol -ws -ws -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(94,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ZG -ZG -Tm -HR -aW -hi -uF -ms -mF -nP -mw -mw -mB -Et -bL -mC -mC -mC -mC -mC -mC -im -mE -Yu -mF -mF -mF -mF -mF -mF -mF -mF -mF -nV -KA -oF -mP -sk -gI -pA -yi -ws -ws -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(95,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ZG -ZG -Tm -HR -aW -hi -hb -aJ -aX -cy -Ho -Ho -Ho -Ho -cf -Ho -Ho -Ho -Ho -Ho -Ho -nM -ih -kW -Ho -Ho -Ho -Ho -Ho -Ho -Ho -Ho -Ho -hT -oO -aJ -CX -sk -gI -VZ -om -ws -ws -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(96,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ZG -ZG -Lo -SV -aW -aW -ie -aJ -kd -ee -ba -aY -cj -cj -iq -Cm -cj -cj -cj -cj -Gq -fS -ih -ee -bi -bi -bi -bi -bi -bi -bi -bi -bi -fS -kX -aJ -sl -gI -gI -Fn -on -ws -ws -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(97,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ZG -ZG -vm -Za -aW -gT -Ge -aJ -aX -ee -aZ -bG -bH -cj -sJ -Rd -cj -Ko -lU -cj -cj -fS -ih -ee -bi -bi -bi -bi -bi -bi -bi -bi -bi -fS -aX -aJ -Yo -nL -gI -vK -LX -ws -ws -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(98,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ZG -ZG -mf -Xk -WD -Ea -Ea -aJ -aX -ee -aZ -br -bI -cg -Zn -cF -cT -do -dE -dM -ef -fS -ih -ee -bi -bi -bi -bi -bi -bi -bi -bi -bi -fS -aX -aJ -mU -wj -nm -rY -oo -ws -ws -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(99,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ZG -ZG -MC -pG -pI -Ea -CB -aJ -aX -ee -aZ -gr -bJ -ch -cA -cG -cU -dp -dF -dN -ef -fS -ih -ee -bi -bi -bi -bi -gc -bi -bi -bi -bi -fS -aX -aJ -mU -vO -nh -rZ -of -ws -ws -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(100,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ZG -ZG -MC -pH -du -FR -Ea -aJ -aX -ee -aY -qb -bK -ci -kF -cH -cV -Yc -dG -cj -cj -fS -ih -ee -bi -bi -bi -bi -bi -bi -bi -bi -bi -fS -aX -aJ -CX -wj -no -sa -of -ws -ws -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(101,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ZG -ZG -aH -Jf -aW -aW -aW -aJ -kd -ee -aY -aY -cj -Dc -Gg -Gg -cj -cj -cj -cj -bi -fS -ih -ee -bi -bi -bi -bi -bi -bi -bi -bi -bi -fS -lf -aJ -mU -wj -no -sa -of -ws -ws -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(102,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ZG -ZG -aH -Um -Ea -sw -sw -aJ -oI -eH -eT -eT -eT -eT -eT -eT -eT -eT -eT -eT -eT -fT -ih -eH -eT -eT -eT -eT -eT -eT -eT -eT -eT -fT -lg -aJ -px -wj -PO -IU -NF -ws -ws -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(103,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ZG -ZG -aH -Um -Ea -sx -sz -aJ -aX -aX -aX -il -aX -kT -aX -aX -aX -fj -kV -oL -HY -Gw -ih -pb -IO -il -aX -aX -aX -kT -oN -iU -iV -iV -oG -aJ -nq -nD -nG -sc -oq -ws -ws -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(104,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ZG -ZG -aH -Um -Ea -aW -aW -aJ -aJ -Qn -Qn -Qn -jC -Qn -WU -WU -WU -WU -WU -WU -lv -iS -lw -Fk -Fk -Fk -Fk -Fk -Em -Em -Em -Em -hE -hE -Em -Em -Em -Em -zZ -rj -tC -ws -ws -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(105,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ZG -ZG -KI -al -Cq -Cq -Cq -Cq -bM -Qn -cW -cY -hq -qn -ql -jW -pK -pP -pR -ql -fU -gC -qD -Zb -lh -Vz -xl -TL -hy -iR -ou -oy -if -if -jd -jf -jn -Em -KU -Bk -tv -ws -ws -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(106,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ZG -ZG -Wo -HN -pc -Ey -Jt -Gv -VY -Qn -nA -QE -gF -WH -ql -HO -gE -gE -aE -WU -qv -yW -qE -Pv -UO -uu -UO -UO -Em -ja -ov -ow -jc -jc -je -jg -jg -lo -ts -pC -tD -ws -ws -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(107,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -Qd -Qd -fz -NL -fz -fz -fz -EX -Es -Qn -Dn -Br -Iu -am -WU -Ez -qg -qi -qu -pU -qy -nl -up -uq -ur -us -ut -JL -iL -MO -ot -gD -hZ -hZ -hG -Ym -kZ -Em -tt -rz -tE -ws -ws -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(108,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -Xi -QL -Ct -Ne -Lj -zL -fz -EX -Xb -tp -qo -Zd -QV -qr -qq -Lp -UG -UG -sp -WU -qz -um -Xz -hF -UO -xg -UO -aS -Em -os -OG -ox -iF -iF -ss -Ym -Ym -Em -uh -wD -Np -ws -ws -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(109,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -Xi -QL -MG -av -Ne -Ia -fz -EX -Es -Qn -qd -qj -qm -qp -WU -qe -qf -qh -Eg -ql -qA -un -aN -ZL -lu -oQ -oR -oS -Em -MW -OG -Oy -Yi -UL -ss -Ym -Ym -Em -uh -pt -pu -ws -ws -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(110,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -Xi -QL -TC -HE -yI -XI -XI -aD -aK -Qn -Qn -Qn -Qn -Qn -WU -WU -WU -WU -WU -WU -qB -Sc -tQ -Fk -Fk -Fk -Fk -Fk -Em -MS -MS -Em -hR -iG -mD -jl -gP -Em -uh -pt -zn -ws -ws -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(111,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -Qd -Qd -zW -Dm -LT -YH -KW -yk -SM -Df -Xp -Df -Df -bN -Iq -UE -Ve -Df -LL -XE -Sr -Zo -qF -Fk -ul -wj -wj -wc -Em -gq -gq -Em -iH -ht -CL -ji -jm -Em -XT -Ol -pv -ws -ws -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(112,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -Qd -Qd -Qd -Dl -AT -fz -HU -Nh -yz -AU -AU -LB -pr -vj -PM -PM -VX -ZE -Wg -oD -TP -uo -Ld -oE -tu -tx -uv -tU -Em -Em -Em -Em -oB -iJ -iZ -jj -jp -Em -ui -gI -ws -ws -ws -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(113,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -Qd -Qd -Qd -Qd -fz -fz -sA -yQ -Ek -Nv -JY -JY -Hv -wX -xL -xL -sC -ps -Qg -hj -jP -gH -qH -Fk -SJ -ty -uw -tX -wf -tW -wg -Em -Em -Em -Em -Em -Em -Em -ui -ws -ws -ws -ws -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(114,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ZG -ZG -ZG -SB -Cs -Hk -Fg -Zm -Lq -wH -wH -wH -wH -wH -wH -wH -wH -EL -dR -dR -qC -tF -dR -YL -HS -aC -nH -EI -EI -ub -uc -ud -aC -aC -aC -aC -aC -Lm -ws -ws -ws -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(115,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ZG -ZG -TA -Ku -hf -An -wk -Na -HM -ZG -ZG -ZG -ZG -ZG -ZG -ZG -ZG -da -mv -vD -tH -da -ws -ws -ws -ws -ws -ws -ws -ws -ue -zr -zr -zw -Mc -ug -uj -ws -ws -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(116,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ZG -ZG -GQ -ZA -ZA -tf -ZA -ZA -BC -ZG -ZG -ZG -ZG -ZG -ZG -ZG -ZG -vF -pw -vE -eB -da -ws -ws -ws -ws -ws -ws -ws -ws -ws -gI -gI -gI -gI -gI -uk -ws -ws -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(117,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ZG -ZG -GQ -sW -hc -tg -tn -BC -BC -ZG -ZG -aa -aa -aa -aa -aa -aa -zS -da -tG -tG -zS -aa -aa -aa -aa -aa -aa -ws -ws -ws -ws -ok -pD -VC -we -uH -ws -ws -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(118,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ZG -ZG -GQ -ZA -sX -tg -tc -BC -BC -ZG -aa -aa -bP -bP -bP -bP -aa -Al -Al -ML -Tr -Al -aa -Fx -Nb -Nb -Fx -aa -aa -ws -ws -ws -ok -tr -uY -vP -uX -ws -ws -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(119,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ZG -ZG -GQ -ZA -hg -th -tk -BC -BC -aa -aa -bP -bP -bP -bP -bP -aa -Al -Va -Gh -Zw -Al -aa -xh -FX -IF -Fx -Fx -aa -aa -ws -ws -vK -vK -VC -xv -xv -ws -ws -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(120,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ZG -ZG -GQ -ZA -sY -tl -td -BC -BC -aa -aa -bP -bP -bP -bP -bP -Mr -Al -Jv -yL -Zc -Al -Jk -xh -Wp -JM -LP -xh -aa -aa -ws -ws -vK -vI -VC -wj -Sv -ws -ws -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(121,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ZG -ZG -GQ -sW -sZ -ti -te -BC -BC -aa -aa -tT -ND -TG -HJ -bP -NO -Al -Pt -Hf -Bf -Al -Nb -Fx -zB -MD -zo -xh -aa -aa -ws -ws -vK -vK -VC -vS -vY -ws -ws -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(122,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ZG -ZG -aw -ZA -ZA -tj -ZA -BC -BC -aa -aa -tT -ND -Vo -zK -Qo -Mb -YE -YV -OH -TD -Ri -Dw -wz -ON -Mn -Fx -Fx -aa -aa -ws -ws -gI -vH -gI -gI -gI -ws -ws -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(123,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ZG -ZG -WF -HH -hP -BS -eo -ZG -ZG -aa -bP -bP -bP -LC -NI -zC -Xe -Ni -Pn -vp -Ao -LA -LA -LA -LA -LA -LA -LA -LA -aa -ws -ws -tA -vK -wa -vJ -vL -ws -ws -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(124,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ZG -ZG -ye -BG -ec -BS -Py -ZG -ZG -aa -tT -ND -ah -xd -NI -BN -aG -bP -Al -Qp -Dz -LA -VM -YQ -Gc -AM -Wt -Kc -CT -aa -ws -ws -vT -vU -vK -wd -vM -ws -ws -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(125,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ZG -ZG -yY -XU -sb -BS -Py -ZG -ZG -aa -tT -ND -Ze -Yg -Mv -xN -yG -Ub -JS -wL -TS -LW -VT -GX -Hz -CJ -VT -Kc -CT -aa -ws -ws -tA -tz -vI -vK -vN -ws -ws -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(126,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ZG -ZG -hL -Xl -AZ -ZT -ZG -ZG -ZG -ZG -bu -bu -bu -bu -bu -bu -bu -bu -Lg -Gm -MN -LW -eW -GX -AS -PR -wu -LA -LA -ws -ws -ws -gI -gI -vH -gI -gI -ws -ws -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -IW -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(127,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ZG -ZG -Qj -Sw -Tt -Od -ai -bt -VG -Vm -bQ -XJ -CA -Ah -Ju -KL -Cn -Xa -yx -Yz -GR -UM -Pm -UA -BH -QH -VT -Kc -CT -ws -ws -ws -vZ -vK -vW -vK -ws -ws -ws -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(128,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ZG -ZG -ZG -ER -AU -AU -NJ -yu -ve -Un -Ac -TZ -OR -Rx -vA -xS -Jo -AY -BD -JX -DK -LA -Hb -TM -Du -xK -KQ -Kc -CT -ws -ws -ws -vK -vZ -wa -vK -ws -ws -ws -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(129,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ZG -ZG -ZG -ZG -ZG -ZG -ZG -aT -ZG -ZG -bu -bu -bu -vr -Hr -ys -bu -Jh -VB -MB -LA -LA -LA -LW -LW -LW -LA -LA -LA -ws -ws -ws -ws -ws -ws -ws -ws -ws -ws -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(130,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ZG -ZG -ZG -ZG -ZG -ZG -ZG -ZG -aa -bu -bu -So -Rv -Do -Hy -bu -Mg -UT -Ki -Lt -IB -gt -Ba -SN -Xc -QF -GL -Rn -aa -ws -ws -ws -ws -ws -ws -ws -ws -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(131,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ZG -ZG -ZG -ZG -ZG -ZG -ZG -aa -bu -bu -So -By -BL -PC -bu -ge -YG -tJ -CW -Vv -NY -NS -SK -FW -BO -GL -Rn -aa -ws -ws -ws -ws -ws -ws -ws -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(132,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ZG -ZG -ZG -ZG -ZG -ZG -aa -bu -bu -So -Zu -Ay -Dd -bu -xA -Qz -yl -zl -WO -AL -vc -xB -HB -yC -GL -Rn -aa -ws -ws -ws -ws -ws -ws -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(133,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ZG -ZG -Vr -ZG -ZG -bu -bu -bu -bu -bu -bu -bu -bu -xA -BM -Wn -zl -Ic -Kh -Hw -OO -OU -zO -Lt -Lt -Lt -ws -ws -Nx -ws -ws -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(134,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -bb -bb -bb -Hc -RN -AK -RZ -xr -bb -bb -BM -Wn -Yk -Yk -Yk -Yk -Yk -Yk -XG -XG -XG -XG -Yk -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(135,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -bb -bb -aU -Uy -Uy -Uy -LE -ZY -Mt -bb -yr -ZD -Yk -IR -Dt -EJ -XQ -Ff -Ng -Wy -Dv -XG -Yk -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(136,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -Pe -ZJ -Ij -ZY -Hl -Ss -xX -Jx -Gy -yP -YS -Zr -QI -Cy -KD -wm -LI -WG -CH -Dv -Dv -XG -Yk -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(137,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -Pe -ZJ -Ib -ZY -ZY -yy -tR -Ag -ZV -Mm -As -Wn -Li -Wz -zs -YJ -YJ -WG -Rc -Ht -Dv -XG -Yk -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(138,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -Pe -ZJ -Nf -ZY -DZ -vo -Fo -Vk -MQ -Tx -BM -Wn -Li -wn -El -OC -IY -Tc -Ng -RB -Dv -XG -Yk -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(139,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -bb -bb -Px -wl -Ap -TH -Ch -LF -mm -Tx -QW -FU -Wl -Wl -Wl -Wl -Wl -It -Jl -Jl -Jl -Jl -It -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(140,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -bb -bb -bb -bb -Tx -Tx -Tx -bb -bb -bb -QB -Dq -JP -vq -Pr -Sg -zm -xO -Nq -Mo -Kb -Zy -Oq -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(141,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -LN -LN -IA -MX -Mx -NP -IC -Mz -wY -yR -Bo -Yb -JP -Oi -Ha -JB -Tu -Dy -SI -SU -KN -Zy -Oq -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(142,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -DX -Qr -UF -Fd -Fd -XW -Xs -Fd -QK -yR -Og -Dq -Ec -ZU -TF -Lu -fD -xO -Bn -GG -zk -Zy -Oq -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(143,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -DX -Qr -Bx -Fd -Zx -xs -Iv -Fd -Yn -LN -Ts -Hu -Wl -Gr -Rr -zd -DO -It -It -It -It -It -It -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(144,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -LN -LN -JO -Ak -wx -CC -Jz -En -Tg -Ed -CE -TY -OD -PK -XH -EE -VD -gZ -Dh -Fy -At -RX -Sb -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(145,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -LN -LN -LN -HZ -LN -LN -GK -Aq -BJ -LN -TR -Bg -Wl -Ur -KV -zH -Bs -RG -HV -WR -LQ -RX -Sb -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(146,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -bc -bc -Ae -Ny -DE -LN -VV -Sz -Kr -LN -SQ -Xd -Wl -Bu -CV -zP -fE -ha -Fu -FD -zi -RX -Sb -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(147,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -Yr -Tp -xY -GB -VU -NW -NW -NW -NW -NW -Ys -NW -Wl -Wl -yU -Uu -DG -Qm -Qm -Qm -Qm -Qm -Qm -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(148,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -Yr -Tp -EH -NC -VO -NW -BY -Ee -Yw -Ex -Rp -Sp -UQ -Wl -YZ -Yf -JH -zp -Di -Vy -AP -GM -Bi -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(149,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -Yr -Tp -EH -Ik -Kw -NW -Qe -BR -yO -UX -vC -CG -bl -Wl -ZB -Qk -Nu -ZQ -Gb -TO -Ji -GM -Bi -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(150,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -bc -bc -RE -Ml -vG -NW -OM -Pa -Yp -yO -XB -Xq -bn -Wl -NX -NG -Yf -GI -Gx -Lv -SH -GM -Bi -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(151,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -CS -CS -CS -Of -CS -CS -ad -Su -Kj -KY -ap -Zp -HX -Wl -DN -xy -fG -VF -Uw -Uw -Uw -Uw -Uw -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(152,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -DQ -DQ -xV -Kk -QR -CS -NW -ay -ax -aj -aV -be -aV -Rt -Wl -Wl -Wl -wE -Wl -UC -UC -fF -fF -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(153,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -EN -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -DQ -JA -JK -JA -CS -NW -ae -af -LG -Uq -az -bs -Rt -Wl -Wl -Wl -za -za -Ax -za -fF -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(154,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -DQ -DQ -DQ -DQ -DQ -DQ -NZ -Jj -Qi -aq -yf -LU -Rt -Wl -Wl -fF -fF -fF -fF -fF -fF -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(155,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -DQ -BT -BT -BT -BT -DQ -Oh -PE -yo -wU -wU -wU -yo -VP -VP -fF -vt -vt -vt -vt -fF -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(156,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -DQ -Kt -Kt -Kt -Kt -DQ -aa -aa -aa -aa -aa -aa -aa -aa -aa -fF -LM -LM -LM -LM -fF -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(157,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(158,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(159,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(160,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(161,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(162,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(163,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(164,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(165,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(166,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(167,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(168,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(169,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(170,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(171,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(172,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(173,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(174,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(175,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(176,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(177,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(178,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(179,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(180,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(181,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(182,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(183,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(184,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(185,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(186,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(187,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(188,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(189,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(190,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(191,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(192,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(193,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(194,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(195,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(196,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(197,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(198,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(199,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(200,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} diff --git a/maps/torch/torch2_deck4.dmm b/maps/torch/torch2_deck4.dmm deleted file mode 100644 index 790f1aaf3163d..0000000000000 --- a/maps/torch/torch2_deck4.dmm +++ /dev/null @@ -1,56800 +0,0 @@ -//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE -"aa" = ( -/turf/space, -/area/space) -"ac" = ( -/obj/effect/shuttle_landmark/skipjack/deck5{ - name = "4th Deck, Aft Starboard" - }, -/turf/space, -/area/space) -"ad" = ( -/obj/effect/shuttle_landmark/torch/deck5/guppy{ - name = "4th Deck, Starboard" - }, -/turf/space, -/area/space) -"ae" = ( -/obj/effect/shuttle_landmark/merc/deck5{ - name = "4th Deck, Fore Starboard" - }, -/turf/space, -/area/space) -"af" = ( -/turf/simulated/wall/prepainted, -/area/crew_quarters/galley) -"ag" = ( -/obj/effect/floor_decal/corner/green{ - dir = 9 - }, -/turf/simulated/floor/tiled/dark, -/area/hallway/primary/fourthdeck/aft) -"ah" = ( -/turf/simulated/wall/r_wall/prepainted, -/area/maintenance/fourthdeck/aft) -"ai" = ( -/obj/effect/shuttle_landmark/scavver_gantry/torch/three, -/turf/space, -/area/space) -"aj" = ( -/obj/structure/sign/warning/docking_area, -/turf/simulated/wall/r_wall/hull, -/area/maintenance/fourthdeck/starboard) -"ak" = ( -/turf/simulated/wall/r_wall/hull, -/area/maintenance/fourthdeck/forestarboard) -"al" = ( -/obj/structure/sign/warning/docking_area{ - dir = 1 - }, -/turf/simulated/wall/r_wall/hull, -/area/maintenance/fourthdeck/forestarboard) -"an" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden{ - dir = 4 - }, -/turf/simulated/floor/tiled/monotile, -/area/maintenance/fourthdeck/forestarboard) -"ao" = ( -/turf/simulated/floor/tiled/dark/monotile, -/area/crew_quarters/galley) -"ap" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/civilian{ - name = "Galley"; - req_access = newlist() - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/command/captainmess) -"aq" = ( -/turf/simulated/wall/r_wall/hull, -/area/maintenance/fourthdeck/starboard) -"ar" = ( -/turf/simulated/wall/r_titanium, -/area/shuttle/escape_pod6/station) -"at" = ( -/obj/structure/stairs/south, -/turf/simulated/floor/tiled/dark/monotile, -/area/crew_quarters/galley) -"au" = ( -/obj/machinery/door/firedoor, -/obj/structure/table/steel_reinforced, -/obj/machinery/door/window/brigdoor/northleft{ - dir = 2; - name = "Deck Chief" - }, -/obj/machinery/door/blast/shutters{ - dir = 2; - id_tag = "do_office"; - name = "DO Office Shutters" - }, -/turf/simulated/floor/tiled, -/area/quartermaster/deckchief) -"av" = ( -/obj/effect/floor_decal/industrial/warning, -/turf/simulated/floor/reinforced/airless, -/area/maintenance/fourthdeck/port) -"aw" = ( -/turf/simulated/wall/r_titanium, -/area/shuttle/escape_pod7/station) -"ax" = ( -/obj/structure/table/reinforced, -/obj/machinery/door/window/brigdoor/southright{ - dir = 8; - name = "Supply Desk" - }, -/obj/machinery/door/firedoor, -/obj/machinery/door/blast/shutters{ - dir = 4; - id_tag = "sup_office"; - name = "Supply Desk Shutters" - }, -/turf/simulated/floor/tiled/monotile, -/area/quartermaster/office) -"ay" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/window/brigdoor/northleft{ - dir = 4; - name = "Security Checkpoint" - }, -/obj/structure/table/steel_reinforced, -/obj/structure/cable/green{ - d2 = 2; - icon_state = "0-2" - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/item/paper_bin{ - pixel_x = -3; - pixel_y = 7 - }, -/obj/item/pen{ - pixel_x = 4; - pixel_y = 4 - }, -/obj/machinery/door/blast/shutters{ - density = 0; - dir = 8; - icon_state = "shutter0"; - id_tag = "hangar_checkpoint_shutters"; - name = "Hangar Deck Checkpoint Shutters"; - opacity = 0 - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/turf/simulated/floor/tiled/dark, -/area/security/hangcheck) -"aA" = ( -/obj/structure/sign/warning/pods/east, -/turf/simulated/wall/prepainted, -/area/hallway/primary/fourthdeck/center) -"aD" = ( -/obj/machinery/atmospherics/pipe/zpipe/up/supply, -/obj/machinery/atmospherics/pipe/zpipe/up/scrubbers, -/obj/effect/floor_decal/industrial/warning, -/turf/simulated/floor/plating, -/area/maintenance/fourthdeck/starboard) -"aF" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 6; - icon_state = "warning" - }, -/turf/simulated/floor/plating, -/area/maintenance/fourthdeck/starboard) -"aG" = ( -/obj/machinery/portable_atmospherics/powered/scrubber, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/fourthdeck/starboard) -"aH" = ( -/obj/structure/table/rack, -/obj/random/maintenance/solgov, -/obj/random/maintenance/solgov, -/obj/random/maintenance/solgov, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/fourthdeck/starboard) -"aI" = ( -/obj/machinery/space_heater, -/obj/effect/floor_decal/industrial/outline/grey, -/obj/machinery/light/small{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/fourthdeck/starboard) -"aJ" = ( -/obj/effect/wallframe_spawn/reinforced/hull, -/turf/simulated/floor/plating, -/area/hallway/primary/fourthdeck/aft) -"aK" = ( -/obj/machinery/door/airlock/external{ - frequency = 1380; - icon_state = "closed"; - id_tag = "admin_shuttle_dock_inner"; - locked = 1; - name = "Docking Port Airlock" - }, -/obj/machinery/atmospherics/pipe/simple/hidden, -/turf/simulated/floor/plating, -/area/hallway/primary/fourthdeck/aft) -"aS" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/obj/random/junk, -/turf/simulated/floor/plating, -/area/maintenance/fourthdeck/forestarboard) -"aU" = ( -/obj/item/device/tape/random, -/obj/random/trash, -/turf/simulated/floor/plating, -/area/maintenance/fourthdeck/forestarboard) -"aV" = ( -/obj/random/trash, -/turf/simulated/floor/plating, -/area/maintenance/fourthdeck/forestarboard) -"aW" = ( -/turf/simulated/wall/prepainted, -/area/maintenance/fourthdeck/starboard) -"aY" = ( -/turf/simulated/floor/shuttle_ceiling/torch/air, -/area/quartermaster/hangar/catwalks_starboard) -"bc" = ( -/obj/structure/janitorialcart, -/obj/item/mop, -/obj/machinery/light/small{ - dir = 1 - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/firealarm{ - pixel_y = 24 - }, -/turf/simulated/floor/tiled/steel_grid, -/area/janitor/storage) -"bd" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden, -/obj/effect/catwalk_plated/dark, -/obj/structure/disposalpipe/segment, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/firealarm{ - dir = 4; - pixel_x = 24 - }, -/turf/simulated/floor/plating, -/area/hallway/primary/fourthdeck/aft) -"be" = ( -/obj/structure/janitorialcart, -/obj/item/mop, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/alarm{ - pixel_y = 24 - }, -/turf/simulated/floor/tiled/steel_grid, -/area/janitor/storage) -"bf" = ( -/obj/structure/catwalk, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/maintenance/fourthdeck/starboard) -"bi" = ( -/obj/effect/shuttle_landmark/escape_pod/start/pod6, -/obj/effect/wallframe_spawn/reinforced/titanium, -/turf/simulated/floor/tiled/monotile, -/area/shuttle/escape_pod6/station) -"bk" = ( -/obj/effect/floor_decal/corner/red/half{ - dir = 8 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/embedded_controller/radio/airlock/docking_port{ - dir = 4; - display_name = "Starboard Dock C"; - frequency = 1380; - id_tag = "admin_shuttle_dock_airlock"; - pixel_x = -24; - pixel_y = 32; - req_access = list(list("ACCESS_EXTERNAL","ACCESS_TORCH_CREW")); - tag_airpump = "admin_shuttle_dock_pump"; - tag_chamber_sensor = "admin_shuttle_dock_sensor"; - tag_exterior_door = "admin_shuttle_dock_outer"; - tag_interior_door = "admin_shuttle_dock_inner" - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/hallway/primary/fourthdeck/aft) -"bm" = ( -/obj/machinery/door/airlock/hatch/maintenance, -/obj/machinery/door/firedoor, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/hallway/primary/fourthdeck/aft) -"bn" = ( -/obj/effect/shuttle_landmark/torch/deck5/aquila{ - name = "4th Deck, Aft" - }, -/turf/space, -/area/space) -"bo" = ( -/turf/simulated/wall/prepainted, -/area/quartermaster/hangar/catwalks_starboard) -"bt" = ( -/obj/machinery/door/airlock/civilian{ - name = "Emergency Storage" - }, -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/simple/hidden/universal{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/maintenance/fourthdeck/forestarboard) -"bu" = ( -/obj/structure/railing/mapped, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/maintenance/fourthdeck/forestarboard) -"bv" = ( -/obj/structure/railing/mapped, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/plating, -/area/maintenance/fourthdeck/forestarboard) -"bw" = ( -/obj/structure/railing/mapped, -/turf/simulated/floor/plating, -/area/maintenance/fourthdeck/forestarboard) -"bx" = ( -/obj/effect/floor_decal/corner/brown{ - dir = 5 - }, -/obj/machinery/newscaster{ - pixel_y = 32 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/fourthdeck/aft) -"by" = ( -/obj/structure/catwalk, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/plating, -/area/maintenance/fourthdeck/starboard) -"bA" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/railing/mapped{ - dir = 8; - icon_state = "railing0-1" - }, -/obj/structure/railing/mapped{ - dir = 1; - icon_state = "railing0-1" - }, -/turf/simulated/floor/plating, -/area/maintenance/fourthdeck/aft) -"bB" = ( -/obj/machinery/door/airlock/hatch/maintenance, -/obj/machinery/door/firedoor, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/steel_ridged, -/area/hallway/primary/fourthdeck/aft) -"bC" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/turf/simulated/floor/tiled/steel_grid, -/area/janitor/storage) -"bE" = ( -/obj/effect/floor_decal/industrial/warning, -/turf/simulated/floor/tiled, -/area/hallway/primary/fourthdeck/aft) -"bF" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/disposalpipe/segment, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/fourthdeck/starboard) -"bI" = ( -/obj/structure/catwalk, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/plating, -/area/maintenance/fourthdeck/forestarboard) -"bJ" = ( -/obj/machinery/atmospherics/pipe/simple/hidden, -/obj/structure/disposalpipe/segment, -/obj/structure/sign/warning/docking_area{ - name = "\improper ESCAPE POD LAUNCH PATHWAY"; - pixel_x = 32 - }, -/turf/simulated/floor/tiled/dark, -/area/hallway/primary/fourthdeck/aft) -"bK" = ( -/obj/effect/shuttle_landmark/icgnv_hound/dock, -/turf/space, -/area/space) -"bM" = ( -/obj/effect/shuttle_landmark/merchant/out, -/turf/space, -/area/space) -"bN" = ( -/turf/simulated/floor/plating, -/area/maintenance/fourthdeck/forestarboard) -"bP" = ( -/turf/simulated/floor/tiled/monotile, -/area/shuttle/escape_pod6/station) -"bS" = ( -/obj/machinery/atmospherics/portables_connector{ - dir = 4 - }, -/obj/machinery/portable_atmospherics/canister/air/airlock, -/turf/simulated/floor/tiled/monotile, -/area/maintenance/fourthdeck/forestarboard) -"bT" = ( -/obj/structure/closet/emcloset, -/turf/simulated/floor/tiled, -/area/maintenance/fourthdeck/forestarboard) -"bU" = ( -/turf/simulated/floor/tiled/monotile, -/area/shuttle/escape_pod7/station) -"bV" = ( -/obj/structure/catwalk, -/obj/structure/cable/green{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 6 - }, -/turf/simulated/floor/plating, -/area/maintenance/fourthdeck/forestarboard) -"bX" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 1; - icon_state = "warning" - }, -/turf/simulated/floor/reinforced/airless, -/area/maintenance/fourthdeck/starboard) -"bY" = ( -/obj/structure/catwalk, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/light/small, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/maintenance/fourthdeck/forestarboard) -"bZ" = ( -/obj/structure/catwalk, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/maintenance/fourthdeck/forestarboard) -"cd" = ( -/obj/structure/railing/mapped, -/obj/structure/lattice, -/obj/structure/disposalpipe/up{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/zpipe/down/scrubbers{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/zpipe/down/supply{ - dir = 8 - }, -/turf/simulated/open, -/area/maintenance/fourthdeck/starboard) -"ce" = ( -/obj/effect/floor_decal/techfloor{ - dir = 4 - }, -/obj/structure/railing/mapped{ - dir = 4; - icon_state = "railing0-1" - }, -/obj/effect/floor_decal/corner/brown{ - dir = 8 - }, -/turf/simulated/floor/tiled/steel_grid, -/area/turbolift/cargo_lift) -"cf" = ( -/obj/structure/catwalk, -/obj/effect/floor_decal/industrial/warning{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/disposalpipe/segment{ - dir = 2; - icon_state = "pipe-c" - }, -/turf/simulated/floor/plating, -/area/maintenance/fourthdeck/starboard) -"cg" = ( -/obj/machinery/atmospherics/unary/vent_pump/on, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/light_switch{ - pixel_x = 24 - }, -/turf/simulated/floor/tiled/steel_grid, -/area/janitor/storage) -"cj" = ( -/obj/effect/floor_decal/corner/green{ - dir = 9 - }, -/obj/machinery/rotating_alarm/security_alarm{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark, -/area/hallway/primary/fourthdeck/aft) -"ck" = ( -/obj/structure/table/standard, -/obj/item/clothing/mask/plunger, -/obj/item/storage/box/mousetraps, -/obj/machinery/power/apc{ - dir = 4; - name = "east bump"; - pixel_x = 24 - }, -/obj/structure/cable/green{ - d2 = 8; - icon_state = "0-8" - }, -/turf/simulated/floor/tiled/steel_grid, -/area/janitor) -"cn" = ( -/obj/structure/catwalk, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden, -/obj/machinery/alarm{ - dir = 4; - pixel_x = -22 - }, -/turf/simulated/floor/plating, -/area/maintenance/fourthdeck/forestarboard) -"co" = ( -/obj/effect/floor_decal/industrial/outline/grey, -/obj/machinery/portable_atmospherics/canister/oxygen, -/turf/simulated/floor/tiled/techfloor/grid, -/area/hallway/primary/fourthdeck/aft) -"cq" = ( -/obj/structure/hygiene/sink/kitchen{ - pixel_y = 32 - }, -/obj/structure/table/marble, -/obj/item/reagent_containers/food/drinks/glass2/coffeecup/dais, -/obj/item/reagent_containers/food/drinks/glass2/coffeecup/dais, -/obj/item/reagent_containers/food/drinks/glass2/coffeecup/STC, -/obj/item/reagent_containers/food/drinks/glass2/coffeecup/metal, -/turf/simulated/floor/tiled/dark/monotile, -/area/command/captainmess) -"cr" = ( -/obj/structure/adherent_bath, -/obj/machinery/light_switch{ - pixel_y = -24 - }, -/turf/simulated/floor/crystal, -/area/crew_quarters/adherent) -"ct" = ( -/obj/effect/floor_decal/corner/brown, -/obj/machinery/light, -/turf/simulated/floor/tiled, -/area/hallway/primary/fourthdeck/center) -"cu" = ( -/obj/machinery/door/airlock/external{ - frequency = 1380; - icon_state = "closed"; - id_tag = "merchant_shuttle_station_exterior"; - locked = 1; - name = "Docking Port Airlock" - }, -/obj/machinery/shield_diffuser, -/turf/simulated/floor/plating, -/area/hallway/primary/fourthdeck/fore) -"cv" = ( -/obj/structure/sign/warning/docking_area, -/turf/simulated/wall/r_wall/hull, -/area/hallway/primary/fourthdeck/fore) -"cw" = ( -/obj/random/obstruction, -/turf/simulated/floor/plating, -/area/maintenance/fourthdeck/forestarboard) -"cx" = ( -/obj/machinery/light/small{ - dir = 8 - }, -/obj/structure/bed/chair/shuttle{ - dir = 4 - }, -/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{ - dir = 4; - id_tag = "escape_pod_6_pump" - }, -/turf/simulated/floor/tiled/monotile, -/area/shuttle/escape_pod6/station) -"cy" = ( -/obj/machinery/light/small{ - dir = 4 - }, -/obj/structure/bed/chair/shuttle{ - dir = 8 - }, -/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{ - dir = 8; - id_tag = "escape_pod_6_pump" - }, -/turf/simulated/floor/tiled/monotile, -/area/shuttle/escape_pod6/station) -"cA" = ( -/obj/machinery/atmospherics/portables_connector{ - dir = 4 - }, -/obj/machinery/portable_atmospherics/canister/air/airlock, -/obj/machinery/light/small{ - dir = 8 - }, -/turf/simulated/floor/tiled/monotile, -/area/maintenance/fourthdeck/forestarboard) -"cB" = ( -/obj/machinery/light/small{ - dir = 8 - }, -/obj/structure/bed/chair/shuttle{ - dir = 4 - }, -/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{ - dir = 4; - id_tag = "escape_pod_9_pump" - }, -/turf/simulated/floor/tiled/monotile, -/area/shuttle/escape_pod7/station) -"cC" = ( -/obj/machinery/light/small{ - dir = 4 - }, -/obj/structure/bed/chair/shuttle{ - dir = 8 - }, -/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{ - dir = 8; - id_tag = "escape_pod_7_pump" - }, -/turf/simulated/floor/tiled/monotile, -/area/shuttle/escape_pod7/station) -"cE" = ( -/obj/effect/floor_decal/corner/yellow{ - dir = 6 - }, -/obj/effect/floor_decal/corner/blue{ - dir = 9 - }, -/obj/machinery/newscaster{ - pixel_x = -32 - }, -/turf/simulated/floor/tiled/dark, -/area/command/captainmess) -"cF" = ( -/obj/machinery/door/firedoor, -/obj/effect/floor_decal/corner/brown{ - dir = 1 - }, -/turf/simulated/floor/tiled/monotile, -/area/hallway/primary/fourthdeck/center) -"cI" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 4 - }, -/obj/structure/catwalk, -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 1 - }, -/obj/machinery/light/small{ - dir = 1 - }, -/turf/simulated/floor/plating, -/area/maintenance/fourthdeck/starboard) -"cK" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/maintenance, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/maintenance/fourthdeck/forestarboard) -"cM" = ( -/obj/structure/catwalk, -/turf/simulated/open, -/area/maintenance/fourthdeck/starboard) -"cN" = ( -/obj/structure/railing/mapped{ - dir = 1; - icon_state = "railing0-1" - }, -/obj/structure/railing/mapped{ - dir = 4; - icon_state = "railing0-1" - }, -/turf/simulated/open, -/area/maintenance/fourthdeck/starboard) -"cO" = ( -/obj/structure/catwalk, -/obj/effect/floor_decal/industrial/warning{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/plating, -/area/maintenance/fourthdeck/starboard) -"cQ" = ( -/obj/structure/closet/l3closet/janitor, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/alarm{ - pixel_y = 24 - }, -/turf/simulated/floor/tiled/steel_grid, -/area/janitor) -"cR" = ( -/obj/machinery/atmospherics/unary/vent_pump/on, -/obj/structure/closet/jcloset_torch, -/obj/item/grenade/chem_grenade/cleaner, -/obj/item/grenade/chem_grenade/cleaner, -/obj/item/reagent_containers/spray/cleaner, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/firealarm{ - pixel_y = 24 - }, -/turf/simulated/floor/tiled/steel_grid, -/area/janitor) -"cT" = ( -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/random_multi/single_item/piano, -/turf/simulated/floor/tiled, -/area/crew_quarters/commissary) -"cU" = ( -/obj/structure/catwalk, -/obj/effect/floor_decal/industrial/warning/corner, -/obj/structure/cable/green{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, -/obj/structure/disposalpipe/segment{ - dir = 4; - icon_state = "pipe-c" - }, -/obj/structure/sign/directions/janitor{ - dir = 8; - pixel_y = 32 - }, -/turf/simulated/floor/plating, -/area/maintenance/fourthdeck/starboard) -"cV" = ( -/obj/effect/floor_decal/industrial/warning, -/obj/structure/cable/green{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 9 - }, -/obj/structure/disposalpipe/segment{ - dir = 8; - icon_state = "pipe-c" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/fourthdeck/starboard) -"cW" = ( -/obj/structure/catwalk, -/obj/effect/floor_decal/industrial/warning, -/turf/simulated/floor/plating, -/area/maintenance/fourthdeck/starboard) -"cY" = ( -/obj/structure/catwalk, -/obj/effect/floor_decal/industrial/warning{ - dir = 4; - icon_state = "warning" - }, -/turf/simulated/floor/plating, -/area/maintenance/fourthdeck/port) -"cZ" = ( -/obj/machinery/cryopod{ - dir = 4 - }, -/obj/machinery/computer/cryopod{ - pixel_x = -32 - }, -/turf/simulated/floor/tiled/monotile, -/area/shuttle/escape_pod6/station) -"da" = ( -/obj/effect/floor_decal/industrial/outline/grey, -/obj/structure/closet/crate, -/obj/item/stack/material/phoron, -/turf/simulated/floor/tiled/techfloor/grid, -/area/hallway/primary/fourthdeck/aft) -"dd" = ( -/obj/machinery/door/airlock/external/escapepod{ - icon_state = "closed"; - id_tag = "escape_pod_7_berth_hatch"; - name = "Escape Pod Two" - }, -/obj/machinery/shield_diffuser, -/turf/simulated/floor/plating, -/area/hallway/primary/fourthdeck/aft) -"dg" = ( -/turf/simulated/wall/r_wall/prepainted, -/area/teleporter/fourthdeck) -"dh" = ( -/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{ - id_tag = "merchant_shuttle_station_pump" - }, -/obj/effect/floor_decal/industrial/warning/full, -/obj/machinery/airlock_sensor{ - frequency = 1380; - id_tag = "merchant_shuttle_station_sensor"; - pixel_x = -24 - }, -/obj/machinery/light/small{ - dir = 4 - }, -/obj/item/device/radio/intercom/hailing{ - dir = 8; - pixel_x = 24 - }, -/turf/simulated/floor/plating, -/area/hallway/primary/fourthdeck/fore) -"dj" = ( -/obj/structure/bed/chair/shuttle{ - dir = 4 - }, -/turf/simulated/floor/tiled/monotile, -/area/shuttle/escape_pod6/station) -"dk" = ( -/obj/machinery/status_display{ - pixel_x = 32 - }, -/obj/structure/bed/chair/shuttle{ - dir = 8 - }, -/turf/simulated/floor/tiled/monotile, -/area/shuttle/escape_pod6/station) -"dl" = ( -/obj/machinery/status_display{ - pixel_x = -32 - }, -/obj/structure/bed/chair/shuttle{ - dir = 4 - }, -/turf/simulated/floor/tiled/monotile, -/area/shuttle/escape_pod7/station) -"dm" = ( -/obj/structure/bed/chair/shuttle{ - dir = 8 - }, -/turf/simulated/floor/tiled/monotile, -/area/shuttle/escape_pod7/station) -"dp" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden, -/obj/effect/floor_decal/corner/green{ - dir = 5 - }, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/tiled, -/area/hallway/primary/fourthdeck/aft) -"ds" = ( -/obj/machinery/atmospherics/pipe/simple/hidden, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/fourthdeck/starboard) -"dt" = ( -/obj/structure/railing/mapped{ - dir = 1; - icon_state = "railing0-1" - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 4 - }, -/obj/structure/railing/mapped{ - dir = 8; - icon_state = "railing0-1" - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/plating, -/area/maintenance/fourthdeck/starboard) -"du" = ( -/obj/structure/railing/mapped{ - dir = 1; - icon_state = "railing0-1" - }, -/turf/simulated/open, -/area/maintenance/fourthdeck/starboard) -"dw" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/door/airlock/civilian{ - name = "Custodial Storage" - }, -/obj/machinery/door/firedoor, -/turf/simulated/floor/tiled/steel_ridged, -/area/janitor) -"dx" = ( -/obj/structure/cable/green{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 1 - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/turf/simulated/floor/tiled/steel_grid, -/area/janitor) -"dy" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/steel_grid, -/area/janitor) -"dA" = ( -/obj/structure/largecrate, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/fourthdeck/starboard) -"dB" = ( -/obj/structure/railing/mapped{ - dir = 8; - icon_state = "railing0-1" - }, -/obj/structure/railing/mapped{ - dir = 1; - icon_state = "railing0-1" - }, -/obj/structure/lattice, -/turf/simulated/open, -/area/maintenance/fourthdeck/starboard) -"dC" = ( -/obj/structure/railing/mapped{ - dir = 1; - icon_state = "railing0-1" - }, -/obj/structure/lattice, -/turf/simulated/open, -/area/maintenance/fourthdeck/starboard) -"dI" = ( -/obj/structure/bed/chair/shuttle{ - dir = 8 - }, -/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{ - dir = 8; - id_tag = "escape_pod_9_pump" - }, -/turf/simulated/floor/tiled/monotile, -/area/shuttle/escape_pod7/station) -"dJ" = ( -/obj/random/trash, -/turf/simulated/floor/plating, -/area/maintenance/fourthdeck/aft) -"dK" = ( -/obj/machinery/door/airlock/external{ - frequency = 1380; - icon_state = "closed"; - id_tag = "merchant_shuttle_station_interior"; - locked = 1; - name = "Docking Port Airlock" - }, -/obj/machinery/atmospherics/pipe/simple/hidden, -/turf/simulated/floor/plating, -/area/hallway/primary/fourthdeck/fore) -"dM" = ( -/obj/structure/bed/chair/shuttle{ - dir = 8 - }, -/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{ - dir = 8; - id_tag = "escape_pod_6_pump" - }, -/turf/simulated/floor/tiled/monotile, -/area/shuttle/escape_pod6/station) -"dP" = ( -/obj/structure/bed/chair/shuttle{ - dir = 4 - }, -/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{ - dir = 4; - id_tag = "escape_pod_9_pump" - }, -/turf/simulated/floor/tiled/monotile, -/area/shuttle/escape_pod7/station) -"dR" = ( -/obj/machinery/firealarm{ - dir = 8; - pixel_x = -24; - pixel_y = 6 - }, -/obj/machinery/light{ - dir = 8 - }, -/turf/simulated/floor/tiled/dark, -/area/command/captainmess) -"dS" = ( -/turf/simulated/floor/carpet/blue2, -/area/command/captainmess) -"dT" = ( -/obj/effect/floor_decal/spline/fancy/wood{ - dir = 4 - }, -/obj/effect/floor_decal/spline/fancy/wood{ - dir = 8 - }, -/obj/machinery/light{ - dir = 1 - }, -/turf/simulated/floor/lino, -/area/command/captainmess) -"dU" = ( -/obj/structure/ladder, -/obj/structure/catwalk, -/turf/simulated/floor/tiled/techmaint, -/area/maintenance/fourthdeck/forestarboard) -"dY" = ( -/obj/structure/table/rack, -/obj/random/maintenance/solgov, -/obj/random/maintenance/solgov, -/obj/random/maintenance/solgov, -/obj/effect/floor_decal/industrial/outline/grey, -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 5 - }, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/fourthdeck/starboard) -"dZ" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 1; - icon_state = "warning" - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 4 - }, -/obj/random/junk, -/turf/simulated/floor/plating, -/area/maintenance/fourthdeck/starboard) -"ea" = ( -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 1 - }, -/obj/structure/catwalk, -/obj/structure/cable/green{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/plating, -/area/maintenance/fourthdeck/starboard) -"eb" = ( -/obj/structure/railing/mapped{ - dir = 8; - icon_state = "railing0-1" - }, -/turf/simulated/open, -/area/maintenance/fourthdeck/starboard) -"ec" = ( -/turf/simulated/open, -/area/maintenance/fourthdeck/starboard) -"ef" = ( -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/fourthdeck/starboard) -"ei" = ( -/obj/effect/floor_decal/scglogo{ - icon_state = "bottom-right" - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/fourthdeck/center) -"ej" = ( -/turf/simulated/wall/prepainted, -/area/storage/auxillary/starboard) -"ek" = ( -/obj/structure/closet/emcloset, -/obj/machinery/light{ - dir = 8; - icon_state = "tube1" - }, -/obj/effect/floor_decal/corner/red/half{ - dir = 8 - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled/monotile, -/area/hallway/primary/fourthdeck/fore) -"el" = ( -/obj/machinery/embedded_controller/radio/airlock/docking_port{ - display_name = "Starboard Dock A"; - frequency = 1380; - id_tag = "merchant_shuttle_station_dock"; - pixel_x = 24; - pixel_y = 24; - req_access = list(list("ACCESS_EXTERNAL","ACCESS_TORCH_CREW")); - tag_airpump = "merchant_shuttle_station_pump"; - tag_chamber_sensor = "merchant_shuttle_station_sensor"; - tag_exterior_door = "merchant_shuttle_station_exterior"; - tag_interior_door = "merchant_shuttle_station_interior" - }, -/obj/machinery/atmospherics/pipe/simple/hidden, -/turf/simulated/floor/tiled/monotile, -/area/hallway/primary/fourthdeck/fore) -"em" = ( -/obj/structure/bed/chair/wood/wings/mahogany{ - dir = 8 - }, -/turf/simulated/floor/carpet/blue2, -/area/command/captainmess) -"en" = ( -/obj/machinery/conveyor{ - dir = 8; - id = "packageSort1" - }, -/turf/simulated/floor/plating, -/area/quartermaster/sorting) -"ep" = ( -/obj/structure/railing/mapped, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/random/junk, -/turf/simulated/floor/plating, -/area/maintenance/fourthdeck/forestarboard) -"eq" = ( -/obj/structure/ladder, -/obj/structure/catwalk, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/fourthdeck/port) -"er" = ( -/turf/simulated/wall/prepainted, -/area/maintenance/fourthdeck/forestarboard) -"et" = ( -/obj/machinery/door/airlock/external{ - frequency = 1380; - icon_state = "closed"; - id_tag = "escape_pod_6_hatch"; - locked = 1; - name = "Escape Pod One Hatch" - }, -/turf/simulated/floor/tiled/monotile, -/area/shuttle/escape_pod6/station) -"ev" = ( -/obj/structure/catwalk, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/maintenance/fourthdeck/forestarboard) -"ew" = ( -/obj/structure/sign/warning/airlock{ - dir = 4 - }, -/turf/simulated/wall/r_wall/hull, -/area/eva) -"ex" = ( -/obj/structure/catwalk, -/obj/machinery/atmospherics/pipe/manifold/hidden, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/maintenance/fourthdeck/forestarboard) -"ey" = ( -/obj/machinery/door/airlock/external{ - frequency = 1380; - icon_state = "closed"; - id_tag = "escape_pod_7_hatch"; - locked = 1; - name = "Escape Pod Two Hatch" - }, -/turf/simulated/floor/tiled/monotile, -/area/shuttle/escape_pod7/station) -"eA" = ( -/obj/effect/floor_decal/corner/blue/three_quarters{ - dir = 4 - }, -/obj/machinery/camera/network/fourth_deck{ - c_tag = "Mess Hall - Officer's Mess"; - dir = 4 - }, -/turf/simulated/floor/tiled/dark, -/area/command/captainmess) -"eB" = ( -/obj/structure/bed/chair/wood/wings/mahogany{ - dir = 4 - }, -/turf/simulated/floor/carpet/blue2, -/area/command/captainmess) -"eC" = ( -/obj/structure/table/marble, -/obj/item/reagent_containers/food/drinks/pitcher, -/turf/simulated/floor/tiled/dark/monotile, -/area/command/captainmess) -"eE" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 1; - icon_state = "warning" - }, -/obj/structure/railing/mapped{ - dir = 4; - icon_state = "railing0-1" - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 10 - }, -/turf/simulated/floor/plating, -/area/maintenance/fourthdeck/starboard) -"eJ" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/maintenance{ - name = "Hangar Maintenance" - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/steel_ridged, -/area/maintenance/fourthdeck/port) -"eL" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/fourthdeck/starboard) -"eO" = ( -/obj/machinery/atmospherics/pipe/manifold4w/hidden, -/turf/simulated/floor/tiled/monotile, -/area/shuttle/escape_pod8/station) -"eP" = ( -/obj/structure/lattice, -/obj/random/maintenance/solgov/clean, -/turf/simulated/open, -/area/maintenance/fourthdeck/starboard) -"eQ" = ( -/obj/machinery/light/small{ - dir = 1 - }, -/obj/random/junk, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/fourthdeck/port) -"eV" = ( -/obj/structure/closet/crate, -/obj/random/maintenance/solgov, -/obj/random/maintenance/solgov, -/obj/random/maintenance/solgov, -/obj/effect/floor_decal/industrial/warning{ - dir = 1 - }, -/turf/simulated/floor/plating, -/area/maintenance/fourthdeck/starboard) -"eX" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 4 - }, -/obj/machinery/camera/network/fourth_deck{ - c_tag = "Fourth Deck - Starboard Escape Pods"; - dir = 4 - }, -/obj/effect/floor_decal/corner/green/half{ - dir = 8 - }, -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 8; - icon_state = "warningcorner" - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/hallway/primary/fourthdeck/aft) -"eY" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/simple/hidden, -/obj/machinery/light{ - dir = 4 - }, -/obj/effect/floor_decal/industrial/warning/corner, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/tiled/dark/monotile, -/area/hallway/primary/fourthdeck/aft) -"fa" = ( -/obj/structure/bookcase, -/obj/item/book/manual/solgov_law, -/obj/item/book/manual/sol_sop, -/obj/item/book/manual/military_law, -/obj/item/book/manual/nt_regs, -/turf/simulated/floor/wood, -/area/crew_quarters/lounge) -"fd" = ( -/turf/simulated/wall/mahogany, -/area/command/captainmess) -"fh" = ( -/obj/effect/floor_decal/industrial/hatch/yellow, -/obj/structure/ladder/up, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/fourthdeck/aft) -"fi" = ( -/obj/structure/closet/crate, -/obj/random/powercell, -/turf/simulated/floor/tiled/techfloor/grid, -/area/storage/auxillary/starboard) -"fj" = ( -/obj/structure/table/standard{ - name = "plastic table frame" - }, -/obj/machinery/camera/network/fourth_deck{ - c_tag = "Fourth Deck - Fore Starboard Docking Access"; - dir = 4 - }, -/obj/effect/floor_decal/corner/red{ - dir = 1 - }, -/obj/effect/floor_decal/corner/white{ - dir = 8 - }, -/turf/simulated/floor/tiled/steel_grid, -/area/hallway/primary/fourthdeck/fore) -"fk" = ( -/obj/machinery/atmospherics/pipe/simple/hidden, -/obj/machinery/firealarm{ - dir = 4; - pixel_x = 24 - }, -/obj/effect/catwalk_plated, -/turf/simulated/floor/plating, -/area/hallway/primary/fourthdeck/fore) -"fl" = ( -/turf/simulated/wall/prepainted, -/area/command/pathfinder) -"fo" = ( -/obj/effect/floor_decal/corner/brown{ - dir = 10 - }, -/obj/structure/bed/chair, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/crew_quarters/commissary) -"fp" = ( -/obj/effect/floor_decal/corner/brown/mono, -/obj/structure/table/rack, -/obj/random/maintenance/solgov/clean, -/obj/random/single/playing_cards, -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/turf/simulated/floor/tiled/monotile, -/area/crew_quarters/commissary) -"fq" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/maintenance, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/tiled/techfloor/grid, -/area/maintenance/fourthdeck/forestarboard) -"fr" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 1; - icon_state = "warning" - }, -/obj/machinery/light/small{ - dir = 8 - }, -/turf/simulated/floor/tiled/white/monotile, -/area/shuttle/escape_pod6/station) -"fs" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 1; - icon_state = "warning" - }, -/obj/machinery/atmospherics/pipe/simple/hidden, -/turf/simulated/floor/tiled/white/monotile, -/area/shuttle/escape_pod6/station) -"ft" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 1; - icon_state = "warning" - }, -/obj/structure/table/standard{ - name = "plastic table frame" - }, -/obj/machinery/light/small{ - dir = 4 - }, -/obj/random/firstaid, -/turf/simulated/floor/tiled/white/monotile, -/area/shuttle/escape_pod6/station) -"fu" = ( -/obj/structure/catwalk, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/plating, -/area/maintenance/fourthdeck/forestarboard) -"fv" = ( -/obj/structure/railing/mapped{ - dir = 8; - icon_state = "railing0-1" - }, -/obj/structure/railing/mapped{ - dir = 1; - icon_state = "railing0-1" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/maintenance/fourthdeck/forestarboard) -"fw" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 1; - icon_state = "warning" - }, -/obj/structure/table/standard{ - name = "plastic table frame" - }, -/obj/machinery/light/small{ - dir = 8 - }, -/obj/random/firstaid, -/turf/simulated/floor/tiled/white/monotile, -/area/shuttle/escape_pod7/station) -"fx" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 1; - icon_state = "warning" - }, -/obj/machinery/atmospherics/pipe/simple/hidden, -/turf/simulated/floor/tiled/white/monotile, -/area/shuttle/escape_pod7/station) -"fy" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 1; - icon_state = "warning" - }, -/obj/machinery/light/small{ - dir = 4 - }, -/turf/simulated/floor/tiled/white/monotile, -/area/shuttle/escape_pod7/station) -"fA" = ( -/obj/machinery/door/blast/shutters{ - dir = 2; - id_tag = "qm_warehouse2"; - name = "Warehouse Shutters" - }, -/turf/simulated/floor/tiled/steel_ridged, -/area/quartermaster/storage/upper) -"fB" = ( -/obj/structure/table/woodentable/walnut, -/obj/random_multi/single_item/runtime, -/obj/item/reagent_containers/food/drinks/glass2/coffeecup/SCG, -/turf/simulated/floor/carpet/blue2, -/area/command/captainmess) -"fC" = ( -/obj/structure/cable/green{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/universal{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/eva) -"fE" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 4 - }, -/obj/structure/catwalk, -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 4 - }, -/obj/structure/sign/directions/janitor{ - dir = 1; - pixel_y = 32 - }, -/turf/simulated/floor/plating, -/area/maintenance/fourthdeck/starboard) -"fF" = ( -/obj/structure/sign/directions/evac{ - dir = 4; - pixel_y = -4 - }, -/turf/simulated/wall/prepainted, -/area/hallway/primary/fourthdeck/center) -"fH" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 4 - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/fourthdeck/starboard) -"fJ" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/disposalpipe/segment, -/obj/structure/cable/green{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 9 - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/fourthdeck/starboard) -"fK" = ( -/obj/effect/catwalk_plated/dark, -/obj/machinery/atmospherics/pipe/simple/hidden, -/obj/structure/disposalpipe/segment, -/obj/structure/closet/hydrant{ - pixel_x = 32 - }, -/turf/simulated/floor/plating, -/area/hallway/primary/fourthdeck/aft) -"fP" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 4; - icon_state = "warning" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden, -/obj/machinery/embedded_controller/radio/simple_docking_controller/escape_pod_berth{ - dir = 8; - frequency = 1380; - id_tag = "escape_pod_7_berth"; - name = "escape pod two berth controller"; - pixel_x = 24; - pixel_y = 24; - tag_door = "escape_pod_7_berth_hatch" - }, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/tiled/dark, -/area/hallway/primary/fourthdeck/aft) -"fX" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled/monotile, -/area/eva) -"fY" = ( -/obj/structure/table/rack, -/obj/random/tech_supply, -/obj/random/tech_supply, -/obj/random/tool, -/obj/effect/floor_decal/techfloor, -/turf/simulated/floor/tiled/techfloor/grid, -/area/storage/auxillary/starboard) -"fZ" = ( -/obj/structure/closet/crate, -/obj/random/toy, -/obj/effect/floor_decal/techfloor, -/turf/simulated/floor/tiled/techfloor/grid, -/area/storage/auxillary/starboard) -"ga" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 4 - }, -/obj/machinery/alarm{ - dir = 4; - pixel_x = -25 - }, -/obj/structure/flora/pottedplant/large, -/obj/effect/floor_decal/corner/red{ - dir = 1 - }, -/obj/effect/floor_decal/corner/white{ - dir = 8 - }, -/turf/simulated/floor/tiled/steel_grid, -/area/hallway/primary/fourthdeck/fore) -"gb" = ( -/obj/machinery/atmospherics/pipe/simple/hidden, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/obj/effect/catwalk_plated, -/obj/machinery/rotating_alarm/security_alarm{ - dir = 8 - }, -/turf/simulated/floor/plating, -/area/hallway/primary/fourthdeck/fore) -"gc" = ( -/obj/effect/floor_decal/corner/mauve/mono, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/structure/closet/secure_closet/pathfinder, -/turf/simulated/floor/tiled/monotile, -/area/command/pathfinder) -"gd" = ( -/obj/effect/floor_decal/corner/mauve/mono, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/computer/ship/navigation, -/turf/simulated/floor/tiled/monotile, -/area/command/pathfinder) -"gf" = ( -/obj/effect/floor_decal/industrial/outline/grey, -/obj/machinery/suit_cycler/engineering/alt, -/turf/simulated/floor/tiled/dark/monotile, -/area/eva) -"gg" = ( -/obj/structure/catwalk, -/turf/simulated/floor/shuttle_ceiling/torch/air, -/area/quartermaster/hangar/catwalks_port) -"gh" = ( -/obj/structure/closet/crate/medical, -/obj/random/medical, -/obj/effect/floor_decal/industrial/outline/grey, -/obj/machinery/light/small{ - dir = 4; - icon_state = "bulb1" - }, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/fourthdeck/forestarboard) -"gi" = ( -/obj/machinery/atmospherics/unary/tank/air{ - dir = 4 - }, -/turf/simulated/floor/tiled/white/monotile, -/area/shuttle/escape_pod6/station) -"gj" = ( -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 9 - }, -/turf/simulated/floor/tiled/white/monotile, -/area/shuttle/escape_pod6/station) -"gk" = ( -/obj/machinery/sleeper{ - dir = 8 - }, -/obj/machinery/vending/wallmed1{ - dir = 8; - name = "Emergency NanoMed"; - pixel_x = 28 - }, -/turf/simulated/floor/tiled/white/monotile, -/area/shuttle/escape_pod6/station) -"gm" = ( -/obj/structure/railing/mapped, -/obj/structure/railing/mapped{ - dir = 8; - icon_state = "railing0-1" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/maintenance/fourthdeck/forestarboard) -"gn" = ( -/obj/machinery/sleeper{ - dir = 4 - }, -/obj/machinery/vending/wallmed1{ - dir = 4; - name = "Emergency NanoMed"; - pixel_x = -30 - }, -/turf/simulated/floor/tiled/white/monotile, -/area/shuttle/escape_pod7/station) -"go" = ( -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 5 - }, -/turf/simulated/floor/tiled/white/monotile, -/area/shuttle/escape_pod7/station) -"gp" = ( -/obj/machinery/atmospherics/unary/tank/air{ - dir = 8 - }, -/turf/simulated/floor/tiled/white/monotile, -/area/shuttle/escape_pod7/station) -"gq" = ( -/obj/effect/floor_decal/corner/brown/half{ - dir = 1 - }, -/obj/machinery/power/apc{ - dir = 1; - name = "north bump"; - pixel_y = 24 - }, -/obj/structure/cable/green{ - d2 = 2; - icon_state = "0-2" - }, -/turf/simulated/floor/tiled/monotile, -/area/hallway/primary/fourthdeck/aft) -"gr" = ( -/obj/effect/floor_decal/corner/yellow{ - dir = 6 - }, -/obj/effect/floor_decal/corner/blue{ - dir = 9 - }, -/obj/structure/cable/green{ - d2 = 2; - icon_state = "0-2" - }, -/obj/machinery/power/apc{ - dir = 8; - name = "west bump"; - pixel_x = -24 - }, -/turf/simulated/floor/tiled/dark, -/area/command/captainmess) -"gs" = ( -/obj/item/storage/box/donut, -/obj/structure/table/woodentable/walnut, -/turf/simulated/floor/carpet/blue2, -/area/command/captainmess) -"gu" = ( -/obj/structure/table/marble, -/obj/item/storage/box/glasses/pint, -/turf/simulated/floor/tiled/dark/monotile, -/area/command/captainmess) -"gw" = ( -/obj/structure/table/marble, -/obj/machinery/chemical_dispenser/bar_soft/full, -/obj/item/device/radio/intercom{ - dir = 8; - pixel_x = 22; - pixel_y = 4 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/command/captainmess) -"gx" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark, -/area/eva) -"gy" = ( -/obj/structure/catwalk, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/plating, -/area/maintenance/fourthdeck/aft) -"gz" = ( -/obj/machinery/door/airlock/civilian{ - name = "Cyborg Charging Station" - }, -/obj/machinery/door/firedoor, -/turf/simulated/floor/tiled/techfloor/grid, -/area/maintenance/fourthdeck/starboard) -"gD" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/catwalk, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/random/trash, -/turf/simulated/floor/plating, -/area/maintenance/fourthdeck/starboard) -"gL" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden, -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 4 - }, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/tiled/dark/monotile, -/area/hallway/primary/fourthdeck/aft) -"gM" = ( -/obj/effect/floor_decal/industrial/hatch/yellow, -/obj/machinery/door/firedoor, -/turf/simulated/floor/tiled/monotile, -/area/hallway/primary/fourthdeck/aft) -"gU" = ( -/obj/structure/catwalk, -/obj/machinery/rotating_alarm/security_alarm{ - dir = 8; - pixel_x = 16 - }, -/turf/simulated/open, -/area/quartermaster/hangar/catwalks_port) -"gW" = ( -/obj/effect/floor_decal/scglogo{ - icon_state = "center-right" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/fourthdeck/center) -"gX" = ( -/obj/structure/disposalpipe/down{ - dir = 8 - }, -/obj/structure/lattice, -/obj/structure/railing/mapped{ - dir = 8; - icon_state = "railing0-1" - }, -/obj/machinery/atmospherics/pipe/zpipe/up/cyan{ - dir = 4 - }, -/turf/simulated/open, -/area/maintenance/fourthdeck/port) -"gY" = ( -/obj/structure/closet/l3closet/general, -/obj/effect/floor_decal/techfloor{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/storage/auxillary/starboard) -"gZ" = ( -/obj/machinery/atmospherics/unary/vent_pump/on, -/obj/effect/floor_decal/techfloor{ - dir = 9 - }, -/turf/simulated/floor/tiled/steel_grid, -/area/storage/auxillary/starboard) -"ha" = ( -/obj/effect/floor_decal/industrial/warning/corner, -/obj/machinery/light/small{ - dir = 4; - icon_state = "bulb1" - }, -/obj/effect/floor_decal/techfloor{ - dir = 1 - }, -/obj/machinery/button/blast_door{ - id_tag = "starboardaux_warehouse"; - name = "Warehouse Door Control"; - pixel_x = 24; - pixel_y = 6 - }, -/turf/simulated/floor/tiled/steel_grid, -/area/storage/auxillary/starboard) -"hb" = ( -/obj/effect/floor_decal/corner/red{ - dir = 1 - }, -/obj/effect/floor_decal/corner/white{ - dir = 8 - }, -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 8; - icon_state = "warningcorner" - }, -/obj/machinery/button/blast_door{ - id_tag = "starboardaux_warehouse"; - name = "Warehouse Door Control"; - pixel_x = -24; - pixel_y = 6; - req_access = list("ACCESS_CARGO") - }, -/turf/simulated/floor/tiled/steel_grid, -/area/hallway/primary/fourthdeck/fore) -"hc" = ( -/obj/machinery/atmospherics/pipe/simple/hidden, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/effect/catwalk_plated, -/turf/simulated/floor/plating, -/area/hallway/primary/fourthdeck/fore) -"hd" = ( -/obj/effect/floor_decal/corner/mauve/mono, -/obj/machinery/power/apc{ - dir = 8; - name = "west bump"; - pixel_x = -24 - }, -/obj/structure/cable/green{ - d2 = 4; - icon_state = "0-4" - }, -/turf/simulated/floor/tiled/monotile, -/area/command/pathfinder) -"he" = ( -/obj/effect/floor_decal/corner/mauve{ - dir = 5 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled, -/area/command/pathfinder) -"hf" = ( -/obj/effect/floor_decal/corner/mauve{ - dir = 5 - }, -/obj/machinery/newscaster{ - pixel_y = 32 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 4; - level = 2 - }, -/turf/simulated/floor/tiled, -/area/command/pathfinder) -"hg" = ( -/obj/effect/floor_decal/industrial/hatch/yellow, -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/item/device/radio/intercom/entertainment{ - dir = 8; - pixel_x = 22 - }, -/turf/simulated/floor/tiled/monotile, -/area/crew_quarters/commissary) -"hh" = ( -/obj/structure/catwalk, -/turf/simulated/open, -/area/quartermaster/hangar/catwalks_starboard) -"hi" = ( -/obj/structure/disposalpipe/up, -/obj/effect/floor_decal/industrial/warning/full, -/turf/simulated/floor/plating, -/area/maintenance/fourthdeck/forestarboard) -"hj" = ( -/obj/structure/shuttle/engine/heater, -/obj/structure/window/reinforced{ - dir = 1 - }, -/turf/simulated/floor/plating, -/area/shuttle/escape_pod6/station) -"hk" = ( -/obj/structure/shuttle/engine/heater, -/obj/structure/window/reinforced{ - dir = 1 - }, -/turf/simulated/floor/plating, -/area/shuttle/escape_pod7/station) -"hl" = ( -/obj/machinery/door/airlock/maintenance{ - name = "Officer's Mess Maintenance" - }, -/obj/machinery/door/firedoor, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/command/captainmess) -"hm" = ( -/obj/item/tableflag, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/table/woodentable/walnut, -/turf/simulated/floor/carpet/blue2, -/area/command/captainmess) -"hn" = ( -/obj/structure/bed/chair/wood/wings/mahogany{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/simulated/floor/carpet/blue2, -/area/command/captainmess) -"ho" = ( -/obj/effect/floor_decal/corner/blue/three_quarters{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark, -/area/command/captainmess) -"hp" = ( -/obj/effect/floor_decal/spline/fancy/wood{ - dir = 10 - }, -/obj/effect/floor_decal/spline/fancy/wood/corner{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/obj/structure/disposalpipe/segment{ - dir = 2; - icon_state = "pipe-c" - }, -/turf/simulated/floor/lino, -/area/command/captainmess) -"hq" = ( -/obj/effect/floor_decal/spline/fancy/wood{ - dir = 1 - }, -/obj/effect/floor_decal/spline/fancy/wood, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/lino, -/area/command/captainmess) -"hr" = ( -/obj/machinery/alarm{ - dir = 4; - pixel_x = -25 - }, -/turf/simulated/floor/carpet, -/area/crew_quarters/lounge) -"hs" = ( -/obj/structure/bed/chair/shuttle{ - dir = 4 - }, -/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{ - dir = 4; - id_tag = "escape_pod_6_pump" - }, -/turf/simulated/floor/tiled/monotile, -/area/shuttle/escape_pod6/station) -"ht" = ( -/obj/structure/table/steel, -/obj/machinery/cell_charger, -/obj/random/powercell, -/obj/structure/cable{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/fourthdeck/starboard) -"hu" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/door/blast/shutters{ - density = 0; - dir = 8; - icon_state = "shutter0"; - id_tag = "hangar_hallway_shutters"; - name = "Hangar Deck Hallway Shutters"; - opacity = 0 - }, -/obj/effect/floor_decal/corner/red/mono, -/turf/simulated/floor/tiled/monotile, -/area/hallway/primary/fourthdeck/fore) -"hw" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/fourthdeck/starboard) -"hx" = ( -/obj/structure/reagent_dispensers/fueltank, -/turf/simulated/floor/plating, -/area/maintenance/fourthdeck/foreport) -"hz" = ( -/obj/structure/closet/crate/secure/biohazard, -/obj/effect/floor_decal/industrial/warning{ - dir = 1 - }, -/turf/simulated/floor/plating, -/area/maintenance/fourthdeck/starboard) -"hB" = ( -/obj/structure/railing/mapped{ - dir = 8; - icon_state = "railing0-1" - }, -/obj/structure/lattice, -/turf/simulated/open, -/area/maintenance/fourthdeck/starboard) -"hE" = ( -/obj/effect/wallframe_spawn/no_grille, -/turf/simulated/floor/plating, -/area/storage/primary) -"hO" = ( -/obj/structure/table/rack, -/obj/random/tech_supply, -/obj/random/tech_supply, -/obj/random/medical, -/obj/structure/cable/green{ - d2 = 4; - icon_state = "0-4" - }, -/obj/machinery/power/apc{ - dir = 8; - name = "west bump"; - pixel_x = -24 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/storage/auxillary/starboard) -"hP" = ( -/obj/structure/closet/crate/internals, -/obj/random/tank, -/obj/random/tank, -/obj/random/tank, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/floor_decal/techfloor{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/storage/auxillary/starboard) -"hQ" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable/green{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/effect/floor_decal/techfloor{ - dir = 8 - }, -/turf/simulated/floor/tiled/steel_grid, -/area/storage/auxillary/starboard) -"hR" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 4; - icon_state = "warning" - }, -/turf/simulated/floor/tiled/steel_grid, -/area/storage/auxillary/starboard) -"hS" = ( -/obj/effect/floor_decal/industrial/hatch/yellow, -/obj/machinery/door/blast/shutters{ - dir = 4; - id_tag = "starboardaux_warehouse"; - name = "Warehouse Shutters" - }, -/turf/simulated/floor/tiled/steel_grid, -/area/storage/auxillary/starboard) -"hT" = ( -/obj/effect/floor_decal/corner/red{ - dir = 1 - }, -/obj/effect/floor_decal/corner/white{ - dir = 8 - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 8; - icon_state = "warning" - }, -/turf/simulated/floor/tiled/steel_grid, -/area/hallway/primary/fourthdeck/fore) -"hU" = ( -/obj/machinery/atmospherics/pipe/simple/hidden, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/light{ - dir = 4; - icon_state = "tube1" - }, -/obj/effect/catwalk_plated, -/turf/simulated/floor/plating, -/area/hallway/primary/fourthdeck/fore) -"hV" = ( -/obj/effect/floor_decal/corner/mauve/half{ - dir = 8 - }, -/obj/machinery/photocopier, -/obj/machinery/alarm{ - dir = 4; - pixel_x = -22 - }, -/turf/simulated/floor/tiled/monotile, -/area/command/pathfinder) -"hW" = ( -/turf/simulated/floor/tiled, -/area/command/pathfinder) -"hX" = ( -/obj/structure/table/standard, -/obj/item/folder/blue, -/turf/simulated/floor/tiled, -/area/command/pathfinder) -"hY" = ( -/obj/machinery/alarm{ - dir = 4; - pixel_x = -22 - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden, -/obj/structure/catwalk, -/obj/structure/disposalpipe/segment{ - dir = 1; - icon_state = "pipe-c" - }, -/turf/simulated/floor/plating, -/area/maintenance/fourthdeck/forestarboard) -"hZ" = ( -/obj/structure/closet/firecloset, -/obj/structure/cable/green{ - d2 = 8; - icon_state = "0-8" - }, -/obj/machinery/power/apc{ - dir = 4; - name = "east bump"; - pixel_x = 24 - }, -/obj/effect/floor_decal/industrial/outline/grey, -/obj/structure/disposalpipe/junction{ - dir = 1; - icon_state = "pipe-j2" - }, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/fourthdeck/forestarboard) -"ib" = ( -/obj/structure/shuttle/engine/propulsion, -/turf/simulated/wall/r_titanium, -/area/shuttle/escape_pod6/station) -"ic" = ( -/obj/machinery/alarm{ - alarm_id = "xenobio4_alarm"; - dir = 2; - icon_state = "alarm0"; - pixel_x = 0; - pixel_y = 24 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/fourthdeck/center) -"id" = ( -/obj/structure/table/rack{ - dir = 8 - }, -/obj/random/maintenance/solgov, -/turf/simulated/floor/tiled/techmaint, -/area/maintenance/fourthdeck/forestarboard) -"ie" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 1; - icon_state = "warning" - }, -/obj/machinery/door/blast/regular/escape_pod, -/turf/simulated/floor/reinforced, -/area/maintenance/fourthdeck/starboard) -"if" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/turf/simulated/floor/tiled/techmaint, -/area/quartermaster/hangar/catwalks_port) -"ig" = ( -/obj/structure/shuttle/engine/propulsion, -/turf/simulated/wall/r_titanium, -/area/shuttle/escape_pod7/station) -"ii" = ( -/obj/machinery/door/firedoor, -/obj/effect/floor_decal/corner/brown{ - dir = 8 - }, -/turf/simulated/floor/tiled/monotile, -/area/hallway/primary/fourthdeck/center) -"ij" = ( -/obj/machinery/light{ - dir = 8 - }, -/turf/simulated/floor/tiled/dark, -/area/command/captainmess) -"in" = ( -/obj/effect/floor_decal/spline/fancy/wood{ - dir = 1 - }, -/obj/effect/floor_decal/spline/fancy/wood, -/obj/machinery/alarm{ - dir = 8; - pixel_x = 25 - }, -/turf/simulated/floor/lino, -/area/command/captainmess) -"io" = ( -/obj/effect/floor_decal/corner/brown/three_quarters{ - dir = 8 - }, -/obj/machinery/light_switch{ - pixel_x = 22; - pixel_y = 26 - }, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/tiled, -/area/quartermaster/deckchief) -"ix" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/maintenance/fourthdeck/starboard) -"iy" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 4 - }, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/fourthdeck/starboard) -"iA" = ( -/obj/structure/table/rack, -/obj/item/clothing/mask/plunger, -/obj/item/clothing/mask/plunger, -/obj/item/clothing/mask/plunger, -/turf/simulated/floor/tiled/steel_grid, -/area/janitor/storage) -"iC" = ( -/obj/structure/table/rack, -/obj/item/device/paint_sprayer, -/obj/item/device/paint_sprayer, -/obj/machinery/light/small{ - dir = 1 - }, -/turf/simulated/floor/tiled/steel_grid, -/area/janitor/storage) -"iD" = ( -/obj/effect/floor_decal/industrial/outline/grey, -/obj/structure/closet/crate/internals, -/turf/simulated/floor/tiled/techfloor/grid, -/area/hallway/primary/fourthdeck/aft) -"iI" = ( -/obj/structure/railing/mapped{ - dir = 4; - icon_state = "railing0-1" - }, -/obj/machinery/light{ - dir = 1 - }, -/turf/simulated/floor/shuttle_ceiling/torch/air, -/area/quartermaster/hangar/catwalks_port) -"iM" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/crystal, -/area/crew_quarters/adherent) -"iO" = ( -/obj/structure/catwalk, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/disposalpipe/segment, -/obj/machinery/alarm{ - dir = 8; - pixel_x = 25; - req_access = list(list("ACCESS_ENGINE_EQUIP","ACCESS_ATMOS")) - }, -/turf/simulated/floor/plating, -/area/maintenance/fourthdeck/starboard) -"iQ" = ( -/obj/effect/floor_decal/corner/green{ - dir = 1 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/fourthdeck/aft) -"iS" = ( -/turf/simulated/wall/walnut, -/area/crew_quarters/lounge) -"iT" = ( -/obj/effect/floor_decal/corner/brown{ - dir = 5 - }, -/obj/structure/sign/warning/pods/east{ - pixel_y = 32 - }, -/obj/machinery/light{ - dir = 1 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/fourthdeck/aft) -"iZ" = ( -/turf/simulated/floor/tiled/techfloor/grid, -/area/storage/auxillary/starboard) -"ja" = ( -/obj/structure/bed/chair/office/light{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/storage/auxillary/starboard) -"jb" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 4 - }, -/obj/machinery/light/small, -/turf/simulated/floor/tiled/techfloor/grid, -/area/storage/auxillary/starboard) -"jc" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/effect/floor_decal/techfloor{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/storage/auxillary/starboard) -"jd" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/effect/floor_decal/techfloor{ - dir = 8 - }, -/turf/simulated/floor/tiled/steel_grid, -/area/storage/auxillary/starboard) -"je" = ( -/obj/machinery/atmospherics/pipe/simple/hidden, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/item/device/radio/intercom{ - dir = 8; - pixel_x = 21 - }, -/turf/simulated/floor/tiled/steel_grid, -/area/hallway/primary/fourthdeck/fore) -"jf" = ( -/obj/effect/floor_decal/corner/mauve/half{ - dir = 8 - }, -/obj/machinery/papershredder, -/obj/machinery/light{ - dir = 8 - }, -/turf/simulated/floor/tiled/monotile, -/area/command/pathfinder) -"jg" = ( -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/hologram/holopad/longrange, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled/monotile, -/area/command/pathfinder) -"jh" = ( -/obj/structure/disposalpipe/segment, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/item/device/radio/intercom{ - dir = 8; - pixel_x = 22 - }, -/turf/simulated/floor/tiled/monotile, -/area/crew_quarters/commissary) -"ji" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden, -/obj/structure/catwalk, -/obj/structure/disposalpipe/segment{ - dir = 4; - icon_state = "pipe-c" - }, -/turf/simulated/floor/plating, -/area/maintenance/fourthdeck/forestarboard) -"jj" = ( -/obj/effect/floor_decal/industrial/hatch/yellow, -/obj/structure/ladder/up, -/obj/structure/disposalpipe/segment{ - dir = 8; - icon_state = "pipe-c" - }, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/fourthdeck/forestarboard) -"jn" = ( -/obj/machinery/door/firedoor, -/obj/effect/wallframe_spawn/reinforced/polarized/no_grille{ - id = "offmess_windows" - }, -/turf/simulated/floor/plating, -/area/command/captainmess) -"jq" = ( -/obj/structure/stairs/west, -/obj/structure/railing/mapped{ - dir = 1; - icon_state = "railing0-1" - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/command/captainmess) -"jr" = ( -/obj/machinery/firealarm{ - dir = 8; - pixel_x = -24; - pixel_y = 6 - }, -/turf/simulated/floor/wood/walnut, -/area/crew_quarters/lounge) -"js" = ( -/obj/structure/catwalk, -/obj/machinery/light, -/turf/simulated/floor/shuttle_ceiling/torch/air, -/area/quartermaster/hangar/catwalks_port) -"ju" = ( -/obj/structure/railing/mapped{ - dir = 8; - icon_state = "railing0-1" - }, -/obj/machinery/light/spot, -/turf/simulated/open, -/area/quartermaster/storage/upper) -"jv" = ( -/obj/structure/hygiene/toilet{ - dir = 4 - }, -/obj/machinery/light/small{ - dir = 1 - }, -/turf/simulated/floor/tiled/freezer, -/area/crew_quarters/laundry) -"jw" = ( -/obj/structure/hygiene/sink{ - dir = 1; - pixel_y = 16 - }, -/obj/item/storage/mirror{ - pixel_y = 32 - }, -/turf/simulated/floor/tiled/freezer, -/area/crew_quarters/laundry) -"jz" = ( -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 8 - }, -/obj/random/maintenance/solgov, -/obj/machinery/light/small{ - dir = 8 - }, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/fourthdeck/starboard) -"jB" = ( -/obj/machinery/computer/modular/preset/civilian, -/obj/structure/noticeboard{ - pixel_y = 32 - }, -/obj/machinery/button/blast_door{ - id_tag = "sup_office"; - name = "Desk Shutter Control"; - pixel_x = 26; - pixel_y = 28 - }, -/obj/effect/floor_decal/corner/brown/half{ - dir = 1 - }, -/turf/simulated/floor/tiled/monotile, -/area/quartermaster/office) -"jE" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden, -/obj/machinery/oxygen_pump{ - pixel_x = 32 - }, -/obj/machinery/light{ - dir = 4 - }, -/obj/effect/catwalk_plated/dark, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/plating, -/area/hallway/primary/fourthdeck/aft) -"jF" = ( -/obj/structure/grille, -/turf/simulated/floor/plating, -/area/maintenance/fourthdeck/aft) -"jW" = ( -/obj/effect/catwalk_plated, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/hallway/primary/fourthdeck/aft) -"jX" = ( -/obj/machinery/door/blast/regular/escape_pod, -/turf/simulated/floor/reinforced/airless, -/area/maintenance/fourthdeck/port) -"jY" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/mining{ - id_tag = "hangarexit"; - name = "Hangar Catwalk Access" - }, -/turf/simulated/floor/tiled/steel_ridged, -/area/quartermaster/hangar/catwalks_port) -"ka" = ( -/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{ - dir = 1; - id_tag = "eva_airlock_pump" - }, -/obj/effect/floor_decal/techfloor, -/obj/machinery/airlock_sensor{ - frequency = 1380; - id_tag = "eva_airlock_sensor"; - pixel_y = -25 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/eva) -"kb" = ( -/obj/structure/catwalk, -/obj/machinery/light{ - dir = 8 - }, -/turf/simulated/floor/shuttle_ceiling/torch/air, -/area/quartermaster/hangar/catwalks_starboard) -"kc" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/camera/network/command{ - c_tag = "EVA - Suit Cyclers"; - dir = 8 - }, -/obj/item/device/radio/intercom{ - dir = 8; - pixel_x = 21 - }, -/turf/simulated/floor/tiled/dark, -/area/eva) -"kg" = ( -/obj/effect/floor_decal/corner/mauve/mono, -/obj/machinery/button/windowtint{ - id = "pathfinder_office"; - pixel_x = -24; - pixel_y = 6 - }, -/obj/machinery/light_switch{ - pixel_x = -24; - pixel_y = -6 - }, -/obj/structure/table/standard, -/obj/machinery/photocopier/faxmachine{ - department = "Torch - Pathfinder" - }, -/turf/simulated/floor/tiled/monotile, -/area/command/pathfinder) -"kh" = ( -/obj/effect/floor_decal/corner/mauve{ - dir = 10 - }, -/obj/machinery/firealarm{ - dir = 1; - pixel_y = -24 - }, -/obj/machinery/camera/network/fourth_deck{ - c_tag = "Fourth Deck - Pathfinder's Office"; - dir = 1 - }, -/turf/simulated/floor/tiled, -/area/command/pathfinder) -"ki" = ( -/obj/effect/floor_decal/corner/mauve{ - dir = 10 - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/disposalpipe/segment{ - dir = 4; - icon_state = "pipe-c" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/tiled, -/area/command/pathfinder) -"kj" = ( -/obj/machinery/door/airlock/glass/civilian{ - autoset_access = 0; - name = "Commissary" - }, -/obj/machinery/door/firedoor, -/obj/structure/disposalpipe/segment, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/steel_ridged, -/area/crew_quarters/commissary) -"kl" = ( -/turf/unsimulated/mask, -/area/hallway/primary/fourthdeck/center) -"ko" = ( -/obj/machinery/power/apc{ - dir = 8; - name = "west bump"; - pixel_x = -24 - }, -/obj/structure/cable/green{ - d2 = 4; - icon_state = "0-4" - }, -/turf/simulated/floor/tiled/techmaint, -/area/quartermaster/hangar/catwalks_starboard) -"ks" = ( -/obj/structure/lattice, -/obj/structure/railing/mapped{ - dir = 8; - icon_state = "railing0-1" - }, -/turf/simulated/open, -/area/maintenance/fourthdeck/starboard) -"ku" = ( -/obj/machinery/portable_atmospherics/canister/air, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/floor/tiled/techfloor/grid, -/area/hallway/primary/fourthdeck/aft) -"kw" = ( -/obj/structure/catwalk, -/obj/structure/disposalpipe/segment{ - dir = 4; - icon_state = "pipe-c" - }, -/turf/simulated/floor/plating, -/area/maintenance/fourthdeck/port) -"kA" = ( -/obj/structure/curtain, -/turf/simulated/floor/tiled/freezer, -/area/crew_quarters/laundry) -"kC" = ( -/obj/structure/table/rack, -/obj/item/storage/box/lights/mixed, -/obj/item/storage/box/lights/mixed, -/obj/item/storage/box/mousetraps, -/obj/item/storage/box/mousetraps, -/turf/simulated/floor/tiled/steel_grid, -/area/janitor/storage) -"kD" = ( -/obj/effect/floor_decal/industrial/outline/grey, -/obj/machinery/alarm{ - pixel_y = 24 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/hallway/primary/fourthdeck/aft) -"kF" = ( -/obj/effect/floor_decal/corner/blue/diagonal, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/white, -/area/crew_quarters/laundry) -"kH" = ( -/obj/random/junk, -/obj/structure/catwalk, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/plating, -/area/maintenance/fourthdeck/aft) -"kM" = ( -/obj/effect/floor_decal/corner/brown{ - dir = 9 - }, -/obj/structure/ladder, -/obj/effect/catwalk_plated, -/obj/structure/sign/deck/fourth{ - dir = 4; - pixel_x = -32 - }, -/turf/simulated/floor/tiled/steel_grid, -/area/hallway/primary/fourthdeck/aft) -"kP" = ( -/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{ - id_tag = "eva_airlock_pump" - }, -/obj/machinery/light{ - dir = 1 - }, -/obj/machinery/oxygen_pump{ - pixel_y = 32 - }, -/obj/effect/floor_decal/techfloor{ - dir = 1 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/eva) -"kQ" = ( -/obj/structure/catwalk, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/maintenance/fourthdeck/forestarboard) -"kS" = ( -/obj/structure/disposalpipe/trunk, -/obj/structure/disposaloutlet{ - dir = 8; - name = "cargo outlet" - }, -/obj/effect/floor_decal/industrial/hatch/yellow, -/obj/structure/window/reinforced{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/dark/monotile, -/area/quartermaster/sorting) -"kT" = ( -/obj/effect/floor_decal/corner/blue/diagonal, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/tiled/white, -/area/crew_quarters/laundry) -"kW" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/tiled/monotile, -/area/hallway/primary/fourthdeck/fore) -"kX" = ( -/obj/structure/ladder/up, -/obj/effect/floor_decal/corner/green{ - dir = 6 - }, -/obj/machinery/light{ - dir = 4 - }, -/turf/simulated/floor/tiled/steel_grid, -/area/hallway/primary/fourthdeck/aft) -"kZ" = ( -/obj/effect/floor_decal/industrial/outline/grey, -/obj/structure/table/rack{ - dir = 8 - }, -/obj/item/tank/oxygen_emergency_double, -/obj/item/tank/oxygen_emergency_double, -/obj/item/tank/oxygen_emergency_double, -/obj/item/tank/oxygen_emergency_double, -/obj/item/tank/oxygen_emergency_double, -/obj/item/tank/oxygen_emergency_double, -/obj/item/tank/oxygen_emergency_double, -/obj/item/tank/oxygen_emergency_double, -/turf/simulated/floor/tiled/dark/monotile, -/area/eva) -"la" = ( -/obj/machinery/status_display, -/turf/simulated/wall/prepainted, -/area/storage/auxillary/starboard) -"lb" = ( -/obj/machinery/door/firedoor, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/door/airlock/mining{ - name = "Starboard Auxiliary Storage" - }, -/obj/effect/floor_decal/techfloor/corner{ - dir = 1 - }, -/turf/simulated/floor/tiled/steel_ridged, -/area/storage/auxillary/starboard) -"lc" = ( -/obj/structure/table/rack{ - dir = 8 - }, -/obj/item/stack/material/glass/reinforced{ - amount = 50 - }, -/obj/item/stack/material/glass/reinforced{ - amount = 50 - }, -/obj/item/stack/material/glass{ - amount = 50 - }, -/obj/item/stack/material/glass{ - amount = 50 - }, -/obj/item/stack/material/glass{ - amount = 50 - }, -/obj/machinery/camera/network/command{ - c_tag = "EVA - Center"; - dir = 4 - }, -/obj/machinery/firealarm{ - dir = 8; - pixel_x = -24; - pixel_y = 6 - }, -/turf/simulated/floor/tiled/monotile, -/area/eva) -"ld" = ( -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden, -/obj/machinery/door/airlock/glass/civilian{ - name = "Fore Starboad Docking Access" - }, -/turf/simulated/floor/tiled/steel_ridged, -/area/hallway/primary/fourthdeck/fore) -"le" = ( -/turf/simulated/wall/prepainted, -/area/hallway/primary/fourthdeck/fore) -"lf" = ( -/obj/machinery/door/airlock/science{ - name = "Pathfinder's Office" - }, -/obj/machinery/door/firedoor, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/tiled/steel_ridged, -/area/command/pathfinder) -"lh" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/effect/floor_decal/corner/white{ - dir = 1 - }, -/obj/effect/floor_decal/corner/red{ - dir = 4 - }, -/obj/structure/disposalpipe/sortjunction/flipped{ - dir = 1; - name = "Commissary"; - sort_type = "Commissary" - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden, -/turf/simulated/floor/tiled, -/area/hallway/primary/fourthdeck/fore) -"lk" = ( -/obj/structure/railing/mapped, -/obj/structure/railing/mapped{ - dir = 4; - icon_state = "railing0-1" - }, -/turf/simulated/open, -/area/quartermaster/hangar/catwalks_port) -"lo" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden, -/turf/simulated/floor/tiled/monotile, -/area/shuttle/escape_pod9/station) -"lt" = ( -/obj/structure/railing/mapped{ - dir = 8; - icon_state = "railing0-1" - }, -/obj/structure/railing/mapped{ - dir = 1; - icon_state = "railing0-1" - }, -/turf/simulated/floor/plating, -/area/maintenance/waterstore) -"lu" = ( -/obj/structure/railing/mapped{ - dir = 1; - icon_state = "railing0-1" - }, -/obj/item/reagent_containers/glass/rag, -/turf/simulated/floor/plating, -/area/maintenance/waterstore) -"lw" = ( -/obj/effect/floor_decal/corner/blue/diagonal, -/obj/machinery/washing_machine, -/obj/machinery/firealarm{ - pixel_y = 24 - }, -/turf/simulated/floor/tiled/white, -/area/crew_quarters/laundry) -"ly" = ( -/obj/structure/cable/green{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/turf/simulated/floor/tiled/steel_grid, -/area/janitor/storage) -"lz" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 8; - icon_state = "warning" - }, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/fourthdeck/starboard) -"lB" = ( -/obj/machinery/cryopod, -/obj/machinery/computer/cryopod{ - pixel_x = 32 - }, -/turf/simulated/floor/tiled/monotile, -/area/shuttle/escape_pod7/station) -"lD" = ( -/obj/machinery/vending/snix, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/fourthdeck/aft) -"lE" = ( -/obj/random_multi/single_item/poppy, -/turf/simulated/floor/plating, -/area/vacant/monitoring) -"lG" = ( -/obj/machinery/light/small{ - dir = 8 - }, -/obj/effect/floor_decal/industrial/outline/grey, -/obj/machinery/portable_atmospherics/powered/scrubber, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/fourthdeck/aft) -"lH" = ( -/obj/machinery/disposal, -/obj/effect/floor_decal/industrial/hatch/yellow, -/obj/structure/disposalpipe/trunk{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/fourthdeck/aft) -"lJ" = ( -/obj/effect/floor_decal/corner/white{ - dir = 1 - }, -/obj/effect/floor_decal/corner/red{ - dir = 8 - }, -/obj/machinery/rotating_alarm/security_alarm{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark, -/area/hallway/primary/fourthdeck/aft) -"lK" = ( -/obj/random/trash, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/fourthdeck/aft) -"lM" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/tele_beacon, -/turf/simulated/floor/tiled/monotile, -/area/hallway/primary/fourthdeck/aft) -"lR" = ( -/obj/machinery/rotating_alarm/security_alarm{ - dir = 1; - pixel_y = -16 - }, -/obj/effect/floor_decal/corner/brown{ - dir = 10 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/fourthdeck/center) -"lU" = ( -/obj/machinery/light{ - dir = 1 - }, -/obj/machinery/oxygen_pump{ - pixel_y = 32 - }, -/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{ - id_tag = "eva_airlock_pump" - }, -/obj/effect/floor_decal/techfloor{ - dir = 1 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/eva) -"lX" = ( -/obj/structure/disposalpipe/segment{ - dir = 1; - icon_state = "pipe-c" - }, -/turf/simulated/wall/walnut, -/area/crew_quarters/lounge) -"lY" = ( -/obj/effect/floor_decal/corner/brown/half{ - dir = 4 - }, -/obj/structure/table/standard, -/obj/machinery/recharger, -/obj/structure/disposalpipe/segment{ - dir = 2; - icon_state = "pipe-c" - }, -/obj/machinery/requests_console{ - department = "Commissary"; - departmentType = 2; - name = "Commissary Requests Console"; - pixel_x = 32 - }, -/obj/item/device/radio/intercom{ - pixel_y = 23 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/turf/simulated/floor/tiled/monotile, -/area/crew_quarters/commissary) -"mb" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/effect/floor_decal/corner/blue{ - dir = 5 - }, -/turf/simulated/floor/tiled/dark, -/area/eva) -"mc" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/obj/effect/floor_decal/corner/blue{ - dir = 5 - }, -/turf/simulated/floor/tiled/dark, -/area/eva) -"md" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 8 - }, -/obj/machinery/camera/network/command{ - c_tag = "EVA - Storage"; - dir = 8 - }, -/obj/effect/floor_decal/corner/blue{ - dir = 5 - }, -/obj/item/device/radio/intercom{ - dir = 8; - pixel_x = 21 - }, -/turf/simulated/floor/tiled/dark, -/area/eva) -"me" = ( -/obj/structure/cable/green{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 4 - }, -/obj/structure/closet/emcloset, -/obj/effect/floor_decal/corner/paleblue/mono, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled/monotile, -/area/hallway/primary/fourthdeck/fore) -"mf" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/obj/effect/floor_decal/corner/paleblue{ - dir = 5 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/fourthdeck/fore) -"mg" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/floor_decal/corner/paleblue{ - dir = 5 - }, -/obj/structure/closet/hydrant{ - pixel_y = 32 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/fourthdeck/fore) -"mh" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/floor_decal/corner/paleblue{ - dir = 5 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/fourthdeck/fore) -"mi" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/effect/floor_decal/corner/white{ - dir = 1 - }, -/obj/effect/floor_decal/corner/red{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/fourthdeck/fore) -"mj" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, -/turf/simulated/floor/tiled/monotile, -/area/hallway/primary/fourthdeck/fore) -"mk" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/extinguisher_cabinet{ - pixel_y = 32 - }, -/obj/effect/floor_decal/corner/white{ - dir = 1 - }, -/obj/effect/floor_decal/corner/red{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/fourthdeck/fore) -"ml" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/unary/vent_pump/on, -/obj/effect/floor_decal/corner/white{ - dir = 1 - }, -/obj/effect/floor_decal/corner/red{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/fourthdeck/fore) -"mm" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/effect/floor_decal/corner/white{ - dir = 1 - }, -/obj/effect/floor_decal/corner/red{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/fourthdeck/fore) -"mn" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/light{ - dir = 1 - }, -/obj/effect/floor_decal/industrial/warning/fulltile, -/turf/simulated/floor/tiled/steel_grid, -/area/hallway/primary/fourthdeck/fore) -"mo" = ( -/obj/machinery/hologram/holopad/longrange, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/tiled/monotile, -/area/quartermaster/office) -"mp" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/floor_decal/industrial/warning/fulltile, -/obj/machinery/newscaster{ - pixel_y = 32 - }, -/turf/simulated/floor/tiled/steel_grid, -/area/hallway/primary/fourthdeck/fore) -"mr" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/camera/network/fourth_deck{ - c_tag = "Fourth Deck Hallway - Stairwell"; - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 4 - }, -/obj/machinery/rotating_alarm/security_alarm{ - dir = 1; - pixel_y = -16 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/fourthdeck/fore) -"ms" = ( -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/fourthdeck/fore) -"mt" = ( -/obj/structure/cable/green{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/machinery/atmospherics/unary/vent_pump/on, -/obj/structure/closet/emcloset, -/obj/effect/floor_decal/corner/red/mono, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled/monotile, -/area/hallway/primary/fourthdeck/fore) -"my" = ( -/obj/structure/table/standard, -/obj/effect/floor_decal/corner/mauve/half{ - dir = 4 - }, -/obj/item/paper_bin{ - pixel_x = -3; - pixel_y = 7 - }, -/obj/item/pen{ - pixel_x = 4; - pixel_y = 4 - }, -/turf/simulated/floor/tiled/monotile, -/area/command/pathfinder) -"mz" = ( -/obj/machinery/light, -/obj/machinery/newscaster/security_unit{ - pixel_y = -32 - }, -/obj/effect/floor_decal/corner/brown/half, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/tiled/monotile, -/area/quartermaster/office) -"mB" = ( -/obj/structure/railing/mapped, -/obj/structure/railing/mapped{ - dir = 8; - icon_state = "railing0-1" - }, -/turf/simulated/floor/shuttle_ceiling/torch/air, -/area/quartermaster/hangar/catwalks_port) -"mD" = ( -/obj/effect/floor_decal/corner/green{ - dir = 9 - }, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/tiled/dark, -/area/hallway/primary/fourthdeck/aft) -"mG" = ( -/obj/structure/railing/mapped, -/turf/simulated/open, -/area/quartermaster/hangar/catwalks_port) -"mH" = ( -/turf/simulated/floor/tiled/steel_grid, -/area/janitor/storage) -"mJ" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/civilian{ - name = "Water Stores" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/maintenance/waterstore) -"mK" = ( -/obj/machinery/door/airlock/glass/civilian{ - autoset_access = 0; - name = "Commissary" - }, -/obj/machinery/door/firedoor, -/turf/simulated/floor/tiled/steel_ridged, -/area/crew_quarters/commissary) -"mL" = ( -/obj/machinery/atmospherics/valve/shutoff/supply{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/maintenance/fourthdeck/foreport) -"mM" = ( -/obj/effect/floor_decal/corner/blue/diagonal, -/obj/item/ironingiron, -/obj/item/ironingiron, -/obj/item/storage/box/detergent, -/obj/item/storage/box/detergent, -/obj/structure/table/rack, -/obj/item/soap, -/obj/machinery/light{ - dir = 8 - }, -/turf/simulated/floor/tiled/white, -/area/crew_quarters/laundry) -"mP" = ( -/obj/random/maintenance/solgov, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/fourthdeck/starboard) -"mQ" = ( -/obj/effect/floor_decal/corner/green/half{ - dir = 8 - }, -/obj/machinery/rotating_alarm/security_alarm{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/hallway/primary/fourthdeck/aft) -"mR" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden{ - dir = 4 - }, -/obj/machinery/light/small{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/hallway/primary/fourthdeck/aft) -"mS" = ( -/obj/structure/grille/broken, -/turf/simulated/floor/plating, -/area/maintenance/fourthdeck/aft) -"mT" = ( -/obj/structure/closet/firecloset, -/obj/effect/floor_decal/industrial/hatch/yellow, -/turf/simulated/floor/tiled/steel_grid, -/area/janitor/storage) -"mV" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/plating, -/area/maintenance/fourthdeck/aft) -"mY" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/catwalk, -/obj/structure/sign/warning/docking_area{ - name = "\improper ESCAPE POD LAUNCH PATHWAY"; - pixel_y = 32 - }, -/turf/simulated/floor/plating, -/area/maintenance/fourthdeck/aft) -"ng" = ( -/obj/effect/wallframe_spawn/no_grille, -/turf/simulated/floor/plating, -/area/eva) -"ni" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/door/airlock/glass/command{ - name = "E.V.A. Storage" - }, -/obj/machinery/door/firedoor, -/turf/simulated/floor/tiled/steel_ridged, -/area/eva) -"nk" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/effect/floor_decal/corner/paleblue{ - dir = 9 - }, -/obj/machinery/light{ - dir = 8 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/fourthdeck/fore) -"nl" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 8 - }, -/obj/effect/catwalk_plated, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 - }, -/turf/simulated/floor/plating, -/area/hallway/primary/fourthdeck/fore) -"nm" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/effect/catwalk_plated, -/turf/simulated/floor/plating, -/area/hallway/primary/fourthdeck/fore) -"nn" = ( -/obj/effect/wallframe_spawn/reinforced/polarized/no_grille{ - id = "pathfinder_office" - }, -/turf/simulated/floor/plating, -/area/command/pathfinder) -"no" = ( -/obj/machinery/power/apc{ - name = "south bump"; - pixel_y = -24 - }, -/obj/structure/cable/green, -/obj/effect/floor_decal/corner/red, -/obj/effect/floor_decal/corner/white{ - dir = 8 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/fourthdeck/fore) -"np" = ( -/obj/machinery/alarm{ - dir = 1; - pixel_y = -22 - }, -/obj/effect/floor_decal/corner/red/half, -/turf/simulated/floor/tiled/monotile, -/area/hallway/primary/fourthdeck/fore) -"nq" = ( -/obj/machinery/firealarm{ - dir = 1; - pixel_y = -24 - }, -/obj/effect/floor_decal/corner/red, -/obj/effect/floor_decal/corner/white{ - dir = 8 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/fourthdeck/fore) -"nr" = ( -/obj/item/device/radio/intercom{ - dir = 1; - pixel_y = -28 - }, -/obj/machinery/camera/network/fourth_deck{ - c_tag = "Fourth Deck Hallway - Fore Starboard"; - dir = 1 - }, -/obj/effect/floor_decal/corner/red, -/obj/effect/floor_decal/corner/white{ - dir = 8 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/fourthdeck/fore) -"ns" = ( -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, -/obj/effect/catwalk_plated, -/turf/simulated/floor/plating, -/area/hallway/primary/fourthdeck/fore) -"nt" = ( -/obj/effect/floor_decal/corner/red, -/obj/effect/floor_decal/corner/white{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled, -/area/hallway/primary/fourthdeck/fore) -"nu" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 4 - }, -/obj/machinery/door/blast/shutters{ - density = 0; - dir = 8; - icon_state = "shutter0"; - id_tag = "hangar_hallway_shutters"; - name = "Hangar Deck Hallway Shutters"; - opacity = 0 - }, -/obj/effect/floor_decal/corner/red/mono, -/turf/simulated/floor/tiled/monotile, -/area/hallway/primary/fourthdeck/fore) -"nv" = ( -/obj/structure/sign/directions/bridge{ - dir = 1; - pixel_y = 3 - }, -/obj/structure/sign/directions/security{ - dir = 1; - pixel_y = -4 - }, -/turf/simulated/wall/prepainted, -/area/hallway/primary/fourthdeck/fore) -"nx" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 4 - }, -/obj/effect/catwalk_plated, -/turf/simulated/floor/plating, -/area/hallway/primary/fourthdeck/fore) -"nA" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/effect/floor_decal/corner/white, -/obj/effect/floor_decal/corner/red{ - dir = 4 - }, -/obj/structure/sign/deck/fourth{ - dir = 8; - pixel_x = 32 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/fourthdeck/fore) -"nD" = ( -/obj/effect/shuttle_landmark/escape_pod/start/pod7, -/obj/effect/wallframe_spawn/reinforced/titanium, -/turf/simulated/floor/tiled/monotile, -/area/shuttle/escape_pod7/station) -"nG" = ( -/obj/effect/floor_decal/scglogo{ - icon_state = "top-left" - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/fourthdeck/center) -"nH" = ( -/obj/structure/catwalk, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/maintenance/fourthdeck/aft) -"nR" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 8 - }, -/obj/random_multi/single_item/runtime, -/turf/simulated/floor/tiled, -/area/hallway/primary/fourthdeck/aft) -"nT" = ( -/obj/structure/bed/roller/ironingboard, -/obj/effect/floor_decal/corner/blue/diagonal, -/obj/item/device/radio/intercom{ - dir = 4; - pixel_x = -22 - }, -/turf/simulated/floor/tiled/white, -/area/crew_quarters/laundry) -"nU" = ( -/obj/effect/floor_decal/corner/blue/diagonal, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/crew_quarters/laundry) -"nZ" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/steel_grid, -/area/janitor/storage) -"oa" = ( -/obj/structure/table/standard, -/obj/item/storage/box/lights/mixed, -/obj/item/device/paint_sprayer, -/obj/machinery/requests_console{ - department = "Janitorial"; - departmentType = 1; - pixel_x = 31 - }, -/turf/simulated/floor/tiled/steel_grid, -/area/janitor) -"oc" = ( -/obj/machinery/door/airlock/civilian{ - name = "Emergency Storage" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/hallway/primary/fourthdeck/aft) -"od" = ( -/obj/structure/grille, -/turf/simulated/floor/tiled/techmaint, -/area/maintenance/fourthdeck/aft) -"og" = ( -/obj/structure/catwalk, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/maintenance/fourthdeck/aft) -"oh" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/effect/floor_decal/corner/paleblue{ - dir = 9 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/fourthdeck/fore) -"ok" = ( -/obj/structure/catwalk, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/disposalpipe/sortjunction/untagged/flipped{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/plating, -/area/maintenance/fourthdeck/port) -"on" = ( -/obj/effect/floor_decal/corner/red{ - dir = 8 - }, -/obj/effect/floor_decal/corner/white{ - dir = 1 - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 8; - icon_state = "warning" - }, -/turf/simulated/floor/tiled/steel_grid, -/area/hallway/primary/fourthdeck/fore) -"os" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 4 - }, -/obj/machinery/light, -/turf/simulated/floor/tiled/dark, -/area/eva) -"ot" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/eva) -"ou" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, -/turf/simulated/floor/tiled, -/area/eva) -"ov" = ( -/obj/structure/reagent_dispensers/fueltank, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/turf/simulated/floor/tiled/monotile, -/area/eva) -"ow" = ( -/obj/effect/catwalk_plated, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/plating, -/area/hallway/primary/fourthdeck/aft) -"oy" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/effect/floor_decal/industrial/warning/corner, -/turf/simulated/floor/tiled, -/area/hallway/primary/fourthdeck/fore) -"oz" = ( -/obj/machinery/status_display, -/turf/simulated/wall/r_wall/prepainted, -/area/teleporter/fourthdeck) -"oA" = ( -/turf/simulated/wall/prepainted, -/area/teleporter/fourthdeck) -"oB" = ( -/obj/effect/wallframe_spawn/reinforced, -/turf/simulated/floor/plating, -/area/storage/primary) -"oC" = ( -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/door/airlock/glass/civilian{ - name = "Primary Tool Storage" - }, -/turf/simulated/floor/tiled/steel_ridged, -/area/storage/primary) -"oD" = ( -/obj/structure/reagent_dispensers/watertank, -/obj/item/reagent_containers/glass/bucket, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled/steel_grid, -/area/janitor/storage) -"oE" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/effect/floor_decal/corner/brown/half{ - dir = 1 - }, -/turf/simulated/floor/tiled/monotile, -/area/hallway/primary/fourthdeck/fore) -"oF" = ( -/turf/simulated/floor/tiled/monotile, -/area/hallway/primary/fourthdeck/fore) -"oG" = ( -/obj/structure/catwalk, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/plating, -/area/maintenance/waterstore) -"oH" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden, -/obj/structure/disposalpipe/segment, -/obj/effect/catwalk_plated, -/turf/simulated/floor/plating, -/area/hallway/primary/fourthdeck/fore) -"oI" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/effect/floor_decal/corner/white, -/obj/effect/floor_decal/corner/red{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/fourthdeck/fore) -"oK" = ( -/obj/machinery/atmospherics/pipe/manifold4w/hidden, -/turf/simulated/floor/tiled/techfloor/grid, -/area/eva) -"oM" = ( -/obj/machinery/cryopod, -/obj/machinery/computer/cryopod{ - pixel_x = 32 - }, -/turf/simulated/floor/tiled/monotile, -/area/shuttle/escape_pod9/station) -"oO" = ( -/obj/effect/floor_decal/corner/mauve/mono, -/obj/machinery/disposal, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/structure/disposalpipe/trunk{ - dir = 8 - }, -/obj/structure/sign/ecplaque{ - pixel_x = 30 - }, -/turf/simulated/floor/tiled/monotile, -/area/command/pathfinder) -"oV" = ( -/obj/effect/floor_decal/corner/green{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/fourthdeck/aft) -"oW" = ( -/obj/structure/railing/mapped{ - dir = 1; - icon_state = "railing0-1" - }, -/turf/simulated/open, -/area/quartermaster/hangar/catwalks_starboard) -"oZ" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/crystal, -/area/crew_quarters/adherent) -"pc" = ( -/turf/simulated/floor/tiled/steel_grid, -/area/turbolift/cargo_lift) -"pf" = ( -/obj/structure/bed/roller/ironingboard, -/obj/effect/floor_decal/corner/blue/diagonal, -/obj/machinery/alarm{ - dir = 4; - pixel_x = -23 - }, -/turf/simulated/floor/tiled/white, -/area/crew_quarters/laundry) -"pg" = ( -/obj/effect/floor_decal/corner/blue/diagonal, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/crew_quarters/laundry) -"pi" = ( -/obj/structure/bed/chair{ - dir = 8 - }, -/obj/effect/floor_decal/corner/blue/diagonal, -/obj/machinery/light_switch{ - pixel_x = 22 - }, -/turf/simulated/floor/tiled/white, -/area/crew_quarters/laundry) -"pl" = ( -/obj/effect/floor_decal/industrial/outline/grey, -/obj/machinery/suit_storage_unit/standard_unit, -/turf/simulated/floor/tiled/dark/monotile, -/area/eva) -"po" = ( -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/random/maintenance/solgov/clean, -/obj/random/maintenance/solgov/clean, -/obj/random/maintenance/solgov/clean, -/obj/structure/closet/crate/plastic, -/turf/simulated/floor/tiled/techfloor/grid, -/area/hallway/primary/fourthdeck/aft) -"pp" = ( -/obj/effect/floor_decal/industrial/warning, -/turf/simulated/floor/reinforced/airless, -/area/maintenance/fourthdeck/aft) -"pr" = ( -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/structure/closet/emcloset, -/turf/simulated/floor/tiled/techfloor/grid, -/area/hallway/primary/fourthdeck/aft) -"pu" = ( -/obj/effect/floor_decal/corner/green/three_quarters, -/obj/machinery/light{ - dir = 8 - }, -/turf/simulated/floor/tiled/dark, -/area/hallway/primary/fourthdeck/aft) -"px" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 1; - icon_state = "warning" - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/fourthdeck/aft) -"py" = ( -/obj/structure/bookcase, -/obj/item/book/manual/solgov_law, -/obj/item/book/manual/sol_sop, -/obj/item/book/manual/military_law, -/obj/item/book/manual/nt_regs, -/turf/simulated/floor/wood, -/area/command/captainmess) -"pz" = ( -/obj/machinery/camera/network/fourth_deck{ - c_tag = "Fourth Deck - Hangar Bridge"; - dir = 1 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/fourthdeck/center) -"pD" = ( -/obj/structure/railing/mapped{ - dir = 8; - icon_state = "railing0-1" - }, -/obj/structure/railing/mapped, -/turf/simulated/floor/plating, -/area/maintenance/fourthdeck/aft) -"pG" = ( -/obj/effect/wallframe_spawn/reinforced/hull, -/obj/machinery/door/firedoor, -/obj/machinery/door/blast/regular{ - density = 0; - icon_state = "pdoor0"; - id_tag = "lounge_shutters"; - name = "Blast Shields"; - opacity = 0 - }, -/turf/simulated/floor/plating, -/area/crew_quarters/lounge) -"pI" = ( -/turf/simulated/open, -/area/quartermaster/hangar/catwalks_port) -"pJ" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/effect/floor_decal/corner/paleblue{ - dir = 8 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/fourthdeck/fore) -"pK" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/effect/floor_decal/industrial/warning{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/fourthdeck/fore) -"pL" = ( -/obj/machinery/door/blast/shutters{ - dir = 8; - id_tag = "teleport4"; - name = "Fourth Deck Teleporter Access Shutters" - }, -/obj/effect/floor_decal/industrial/hatch/yellow, -/obj/effect/floor_decal/techfloor{ - dir = 8 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/teleporter/fourthdeck) -"pM" = ( -/obj/machinery/tele_pad, -/obj/effect/floor_decal/industrial/hatch/yellow, -/turf/simulated/floor/tiled/techfloor/grid, -/area/teleporter/fourthdeck) -"pN" = ( -/obj/machinery/tele_beacon, -/obj/machinery/button/blast_door{ - id_tag = "teleport4"; - name = "Fourth Deck Teleporter Access Shutter Control"; - pixel_x = -6; - pixel_y = 24 - }, -/obj/effect/floor_decal/techfloor{ - dir = 8 - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 8; - icon_state = "warning" - }, -/turf/simulated/floor/tiled/dark, -/area/teleporter/fourthdeck) -"pO" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/obj/machinery/light{ - dir = 1 - }, -/turf/simulated/floor/tiled/dark, -/area/teleporter/fourthdeck) -"pP" = ( -/obj/structure/closet/crate, -/obj/random/tank, -/obj/machinery/camera/network/fourth_deck{ - c_tag = "Fourth Deck - Teleporter" - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/teleporter/fourthdeck) -"pQ" = ( -/obj/structure/table/standard, -/obj/machinery/cell_charger, -/obj/random/powercell, -/obj/random/powercell, -/obj/random/powercell, -/obj/machinery/alarm{ - dir = 4; - pixel_x = -22 - }, -/turf/simulated/floor/tiled/monotile, -/area/storage/primary) -"pR" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled, -/area/storage/primary) -"pS" = ( -/obj/machinery/firealarm{ - pixel_y = 24 - }, -/obj/machinery/vending/tool{ - dir = 8 - }, -/turf/simulated/floor/tiled/monotile, -/area/storage/primary) -"pT" = ( -/obj/random/junk, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/fourthdeck/aft) -"pU" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 1 - }, -/turf/simulated/floor/tiled/monotile, -/area/hallway/primary/fourthdeck/fore) -"pV" = ( -/obj/structure/stairs/east, -/turf/simulated/floor/tiled/monotile, -/area/hallway/primary/fourthdeck/fore) -"pW" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/fourthdeck/forestarboard) -"pX" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/effect/floor_decal/corner/red/half{ - dir = 4 - }, -/obj/machinery/light{ - dir = 4 - }, -/turf/simulated/floor/tiled/monotile, -/area/hallway/primary/fourthdeck/fore) -"pZ" = ( -/obj/structure/sign/directions/science{ - dir = 1; - pixel_y = 3 - }, -/obj/structure/sign/directions/infirmary{ - dir = 1; - pixel_y = -4 - }, -/turf/simulated/wall/prepainted, -/area/hallway/primary/fourthdeck/center) -"qa" = ( -/obj/effect/floor_decal/corner/green{ - dir = 5 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/fourthdeck/center) -"qb" = ( -/obj/structure/sign/directions/bridge{ - dir = 1; - pixel_y = 3 - }, -/obj/structure/sign/directions/security{ - dir = 1; - pixel_y = -4 - }, -/turf/simulated/wall/prepainted, -/area/command/pathfinder) -"qc" = ( -/obj/structure/sign/directions/evac{ - dir = 4; - pixel_y = -4 - }, -/obj/structure/sign/directions/engineering{ - dir = 1; - pixel_y = 3 - }, -/turf/simulated/wall/prepainted, -/area/command/pathfinder) -"qf" = ( -/obj/effect/floor_decal/corner/brown{ - dir = 5 - }, -/obj/machinery/computer/guestpass{ - pixel_y = 32 - }, -/turf/simulated/floor/tiled, -/area/quartermaster/deckchief) -"qg" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 4 - }, -/obj/effect/floor_decal/industrial/warning/fulltile, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 1 - }, -/turf/simulated/floor/tiled/steel_grid, -/area/hallway/primary/fourthdeck/fore) -"ql" = ( -/obj/effect/floor_decal/corner/brown{ - dir = 10 - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/fourthdeck/aft) -"qn" = ( -/obj/structure/catwalk, -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 8; - icon_state = "warningcorner" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/turf/simulated/floor/plating, -/area/maintenance/fourthdeck/starboard) -"qo" = ( -/obj/structure/reagent_dispensers/watertank, -/obj/item/reagent_containers/glass/bucket, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled/steel_grid, -/area/janitor) -"qr" = ( -/obj/effect/wallframe_spawn/no_grille, -/obj/machinery/door/firedoor, -/turf/simulated/floor/plating, -/area/crew_quarters/laundry) -"qv" = ( -/obj/structure/catwalk, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/sign/warning/docking_area{ - name = "\improper ESCAPE POD LAUNCH PATHWAY"; - pixel_y = -32 - }, -/turf/simulated/floor/plating, -/area/maintenance/fourthdeck/starboard) -"qx" = ( -/turf/simulated/floor/tiled/monotile, -/area/hallway/primary/fourthdeck/center) -"qy" = ( -/obj/machinery/door/airlock/civilian{ - name = "Custodial Closet" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/door/firedoor, -/turf/simulated/floor/tiled/steel_ridged, -/area/janitor) -"qz" = ( -/obj/effect/floor_decal/scglogo{ - icon_state = "bottom-left" - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/fourthdeck/center) -"qC" = ( -/obj/machinery/vending/tool/adherent, -/obj/machinery/light{ - dir = 4 - }, -/turf/simulated/floor/crystal, -/area/crew_quarters/adherent) -"qJ" = ( -/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{ - dir = 1; - id_tag = "eva_airlock_pump" - }, -/obj/effect/floor_decal/techfloor, -/turf/simulated/floor/tiled/techfloor/grid, -/area/eva) -"qM" = ( -/obj/machinery/rotating_alarm/security_alarm{ - pixel_y = 14 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/fourthdeck/center) -"qQ" = ( -/obj/machinery/door/airlock/external{ - frequency = 1380; - icon_state = "closed"; - id_tag = "eva_airlock_outer"; - locked = 1; - name = "EVA External Access" - }, -/obj/effect/shuttle_landmark/scavver_gantry/torch/two, -/turf/simulated/floor/tiled/techfloor/grid, -/area/eva) -"qR" = ( -/turf/simulated/floor/tiled, -/area/eva) -"qT" = ( -/obj/structure/table/steel_reinforced, -/obj/item/device/radio/off, -/obj/item/device/radio/off, -/obj/item/device/radio/off, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/tiled/monotile, -/area/eva) -"qV" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/newscaster{ - pixel_x = 32 - }, -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 4; - icon_state = "warningcorner" - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/fourthdeck/fore) -"qW" = ( -/obj/machinery/tele_projector, -/turf/simulated/floor/tiled/techfloor/grid, -/area/teleporter/fourthdeck) -"qX" = ( -/obj/effect/floor_decal/techfloor{ - dir = 8 - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 8; - icon_state = "warning" - }, -/turf/simulated/floor/tiled/dark, -/area/teleporter/fourthdeck) -"qY" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/dark, -/area/teleporter/fourthdeck) -"qZ" = ( -/obj/structure/table/rack, -/obj/random/tech_supply, -/turf/simulated/floor/tiled/dark/monotile, -/area/teleporter/fourthdeck) -"ra" = ( -/obj/structure/table/standard, -/obj/random/tech_supply, -/obj/random/tech_supply, -/obj/random/tech_supply, -/obj/random/tech_supply, -/obj/random/tech_supply, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 4 - }, -/obj/machinery/light{ - dir = 8 - }, -/obj/item/device/radio/intercom{ - dir = 4; - pixel_x = -21 - }, -/turf/simulated/floor/tiled, -/area/storage/primary) -"rb" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/effect/catwalk_plated, -/turf/simulated/floor/plating, -/area/storage/primary) -"rc" = ( -/obj/machinery/lapvend{ - dir = 8 - }, -/turf/simulated/floor/tiled, -/area/storage/primary) -"re" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden, -/obj/structure/disposalpipe/segment, -/obj/item/device/radio/intercom{ - dir = 4; - pixel_x = -21 - }, -/obj/effect/catwalk_plated, -/turf/simulated/floor/plating, -/area/hallway/primary/fourthdeck/fore) -"rg" = ( -/obj/effect/floor_decal/corner/mauve{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/fourthdeck/center) -"rh" = ( -/obj/effect/floor_decal/corner/green/half{ - dir = 1 - }, -/turf/simulated/floor/tiled/monotile, -/area/hallway/primary/fourthdeck/center) -"ri" = ( -/obj/machinery/atmospherics/unary/vent_pump/on, -/obj/effect/floor_decal/corner/green{ - dir = 5 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/fourthdeck/center) -"rj" = ( -/obj/effect/floor_decal/corner/white{ - dir = 1 - }, -/obj/effect/floor_decal/corner/red{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/fourthdeck/center) -"rk" = ( -/obj/structure/railing/mapped{ - dir = 4; - icon_state = "railing0-1" - }, -/obj/effect/floor_decal/industrial/warning, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/turf/simulated/floor/plating, -/area/maintenance/fourthdeck/starboard) -"rl" = ( -/obj/effect/floor_decal/corner/mauve{ - dir = 5 - }, -/obj/machinery/atmospherics/unary/vent_pump/on, -/turf/simulated/floor/tiled, -/area/hallway/primary/fourthdeck/center) -"rm" = ( -/obj/structure/railing/mapped, -/obj/machinery/light{ - dir = 8 - }, -/turf/simulated/open, -/area/quartermaster/hangar/catwalks_port) -"rn" = ( -/obj/effect/floor_decal/industrial/outline/grey, -/obj/structure/table/rack, -/obj/random/tech_supply, -/obj/random/tech_supply, -/obj/random/maintenance/solgov, -/obj/random/medical, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/fourthdeck/port) -"ro" = ( -/obj/effect/wallframe_spawn/reinforced, -/obj/machinery/door/firedoor, -/turf/simulated/floor/plating, -/area/hallway/primary/fourthdeck/center) -"rp" = ( -/turf/simulated/wall/prepainted, -/area/hallway/primary/fourthdeck/center) -"rr" = ( -/obj/machinery/computer/arcade, -/turf/simulated/floor/plating, -/area/maintenance/fourthdeck/forestarboard) -"rs" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/fourthdeck/port) -"rt" = ( -/obj/structure/catwalk, -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/turf/simulated/floor/plating, -/area/maintenance/fourthdeck/port) -"ru" = ( -/obj/effect/floor_decal/corner/brown/half{ - dir = 1 - }, -/turf/simulated/floor/tiled/monotile, -/area/hallway/primary/fourthdeck/aft) -"rz" = ( -/obj/machinery/door/firedoor, -/obj/effect/floor_decal/industrial/hatch/yellow, -/turf/simulated/floor/tiled/monotile, -/area/hallway/primary/fourthdeck/aft) -"rF" = ( -/obj/machinery/light/small, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, -/obj/structure/disposalpipe/segment{ - dir = 1; - icon_state = "pipe-c" - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/fourthdeck/starboard) -"rG" = ( -/obj/effect/floor_decal/industrial/outline/grey, -/obj/machinery/portable_atmospherics/canister/air/airlock, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/fourthdeck/port) -"rH" = ( -/obj/effect/floor_decal/corner/green{ - dir = 5 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/fourthdeck/aft) -"rO" = ( -/obj/structure/cable/green{ - d2 = 2; - icon_state = "0-2" - }, -/obj/structure/cable/green{ - d2 = 8; - icon_state = "0-8" - }, -/obj/machinery/power/sensor{ - name = "Powernet Sensor - Fourth Deck Subgrid"; - name_tag = "Fourth Deck Subgrid" - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 8; - icon_state = "warning" - }, -/obj/machinery/light/small{ - dir = 1 - }, -/turf/simulated/floor/plating, -/area/maintenance/substation/fourthdeck) -"rP" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/fourthdeck/aft) -"rU" = ( -/obj/machinery/light{ - dir = 1 - }, -/obj/effect/floor_decal/corner/brown{ - dir = 5 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/fourthdeck/center) -"sd" = ( -/obj/machinery/atmospherics/pipe/simple/hidden, -/obj/effect/catwalk_plated/dark, -/obj/structure/disposalpipe/segment, -/obj/structure/closet/hydrant{ - pixel_x = 32 - }, -/turf/simulated/floor/plating, -/area/hallway/primary/fourthdeck/aft) -"sf" = ( -/obj/structure/catwalk, -/obj/structure/cable/green{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/structure/disposalpipe/segment{ - dir = 2; - icon_state = "pipe-c" - }, -/obj/structure/mopbucket, -/turf/simulated/floor/plating, -/area/maintenance/fourthdeck/foreport) -"sh" = ( -/turf/simulated/wall/prepainted, -/area/quartermaster/sorting) -"sj" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/obj/effect/floor_decal/industrial/warning{ - dir = 1; - icon_state = "warning" - }, -/turf/simulated/floor/tiled, -/area/quartermaster/storage/upper) -"sk" = ( -/obj/machinery/access_button{ - command = "cycle_interior"; - frequency = 1380; - master_tag = "eva_airlock"; - name = "interior access button"; - pixel_x = -24; - pixel_y = 24; - req_access = list("ACCESS_EVA") - }, -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 4 - }, -/turf/simulated/floor/tiled/monotile, -/area/eva) -"sl" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden{ - dir = 1 - }, -/obj/machinery/hologram/holopad, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled, -/area/eva) -"sm" = ( -/obj/machinery/atmospherics/binary/pump/on{ - dir = 8; - target_pressure = 200 - }, -/turf/simulated/floor/tiled, -/area/eva) -"sn" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 8 - }, -/turf/simulated/floor/tiled/monotile, -/area/eva) -"so" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/glass/command{ - name = "E.V.A."; - secured_wires = 1 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled/steel_ridged, -/area/eva) -"sp" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/effect/floor_decal/corner/paleblue{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/fourthdeck/fore) -"sq" = ( -/obj/machinery/firealarm{ - dir = 4; - pixel_x = 26 - }, -/obj/machinery/camera/network/fourth_deck{ - c_tag = "Fourth Deck Hallway - Primary Docking Port"; - dir = 8 - }, -/obj/effect/catwalk_plated, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/hallway/primary/fourthdeck/fore) -"sr" = ( -/obj/machinery/computer/teleporter{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/teleporter/fourthdeck) -"ss" = ( -/obj/machinery/hologram/holopad, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled/dark, -/area/teleporter/fourthdeck) -"st" = ( -/obj/machinery/alarm{ - dir = 8; - pixel_x = 25 - }, -/obj/structure/closet/secure_closet/crew, -/obj/random/maintenance/solgov, -/obj/random/maintenance/solgov, -/obj/random/maintenance/solgov, -/turf/simulated/floor/tiled/dark/monotile, -/area/teleporter/fourthdeck) -"su" = ( -/obj/structure/table/standard, -/obj/random/tech_supply, -/obj/random/tech_supply, -/obj/random/tech_supply, -/obj/random/tech_supply, -/obj/random/tech_supply, -/obj/item/stack/package_wrap/twenty_five, -/obj/item/hand_labeler, -/obj/item/device/destTagger, -/turf/simulated/floor/tiled, -/area/storage/primary) -"sv" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/effect/landmark{ - name = "lightsout" - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/effect/catwalk_plated, -/turf/simulated/floor/plating, -/area/storage/primary) -"sw" = ( -/obj/machinery/disposal, -/obj/effect/floor_decal/industrial/hatch/yellow, -/obj/structure/disposalpipe/trunk, -/turf/simulated/floor/tiled/monotile, -/area/storage/primary) -"sx" = ( -/obj/machinery/vending/assist, -/turf/simulated/floor/tiled/monotile, -/area/storage/primary) -"sy" = ( -/obj/structure/table/rack{ - dir = 8 - }, -/obj/random/tech_supply, -/obj/random/tech_supply, -/obj/random/tech_supply, -/obj/random/tech_supply, -/obj/random/tech_supply, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled/monotile, -/area/storage/primary) -"sz" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/hidden, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 8 - }, -/obj/effect/catwalk_plated, -/obj/structure/disposalpipe/sortjunction{ - dir = 1; - name = "Pathfinder's Office"; - sort_type = "Pathfinder's Office" - }, -/turf/simulated/floor/plating, -/area/hallway/primary/fourthdeck/fore) -"sA" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/tele_beacon, -/turf/simulated/floor/tiled, -/area/hallway/primary/fourthdeck/fore) -"sC" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/simulated/floor/tiled/monotile, -/area/hallway/primary/fourthdeck/center) -"sD" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 1 - }, -/obj/effect/catwalk_plated, -/obj/structure/cable/green{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/hallway/primary/fourthdeck/center) -"sF" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/catwalk_plated, -/turf/simulated/floor/plating, -/area/hallway/primary/fourthdeck/center) -"sG" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/fourthdeck/center) -"sH" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/turf/simulated/floor/tiled/monotile, -/area/hallway/primary/fourthdeck/center) -"sI" = ( -/obj/effect/catwalk_plated, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/plating, -/area/hallway/primary/fourthdeck/center) -"sJ" = ( -/turf/simulated/floor/reinforced/airless, -/area/space) -"sK" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/monotile, -/area/hallway/primary/fourthdeck/center) -"sL" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 1 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/catwalk_plated, -/turf/simulated/floor/plating, -/area/hallway/primary/fourthdeck/center) -"sR" = ( -/obj/effect/floor_decal/corner/brown{ - dir = 10 - }, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 1 - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/fourthdeck/aft) -"sS" = ( -/obj/effect/floor_decal/scglogo{ - icon_state = "top-right" - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/fourthdeck/center) -"sZ" = ( -/obj/structure/cable/green{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/turf/simulated/floor/tiled/techmaint, -/area/quartermaster/hangar/catwalks_port) -"tc" = ( -/obj/effect/catwalk_plated, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4; - icon_state = "pipe-c" - }, -/turf/simulated/floor/plating, -/area/hallway/primary/fourthdeck/aft) -"te" = ( -/obj/structure/catwalk, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/maintenance/fourthdeck/aft) -"tg" = ( -/obj/structure/catwalk, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/maintenance/fourthdeck/port) -"th" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/simulated/floor/tiled/monotile, -/area/hallway/primary/fourthdeck/aft) -"ti" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/wallframe_spawn/reinforced, -/obj/machinery/door/firedoor, -/turf/simulated/floor/plating, -/area/hallway/primary/fourthdeck/aft) -"tj" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply, -/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers, -/obj/machinery/hologram/holopad, -/obj/machinery/atmospherics/pipe/simple/hidden, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/tiled/monotile, -/area/hallway/primary/fourthdeck/aft) -"tk" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/door/airlock/crystal{ - name = "Adherent Maintenance" - }, -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/crystal, -/area/crew_quarters/adherent) -"tl" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/fourthdeck/aft) -"tp" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/fourthdeck/aft) -"tq" = ( -/obj/structure/sign/warning/high_voltage{ - dir = 4 - }, -/obj/structure/sign/warning/high_voltage{ - dir = 8 - }, -/turf/simulated/wall/prepainted, -/area/maintenance/substation/fourthdeck) -"tr" = ( -/obj/structure/cable{ - d2 = 2; - icon_state = "0-2" - }, -/obj/machinery/power/terminal{ - dir = 4 - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/substation/fourthdeck) -"ts" = ( -/obj/machinery/power/smes/buildable/preset/torch/substation{ - RCon_tag = "Substation - Fourth Deck" - }, -/obj/structure/cable/green, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 8; - icon_state = "warning" - }, -/turf/simulated/floor/plating, -/area/maintenance/substation/fourthdeck) -"tz" = ( -/obj/effect/wallframe_spawn/reinforced, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/plating, -/area/quartermaster/sorting) -"tA" = ( -/obj/effect/floor_decal/corner/brown/half, -/turf/simulated/floor/tiled/monotile, -/area/quartermaster/storage/upper) -"tC" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/railing/mapped{ - dir = 4; - icon_state = "railing0-1" - }, -/turf/simulated/floor/plating, -/area/maintenance/fourthdeck/aft) -"tG" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 9; - icon_state = "warning" - }, -/obj/machinery/airlock_sensor{ - frequency = 1380; - id_tag = "admin_shuttle_dock_sensor"; - pixel_x = -30; - pixel_y = -8 - }, -/turf/simulated/floor/plating, -/area/hallway/primary/fourthdeck/aft) -"tH" = ( -/obj/machinery/atmospherics/unary/vent_pump/on, -/obj/machinery/light{ - dir = 4; - icon_state = "tube1" - }, -/turf/simulated/floor/tiled/dark, -/area/eva) -"tJ" = ( -/obj/machinery/alarm{ - dir = 4; - pixel_x = -22 - }, -/obj/machinery/suit_cycler/science, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/floor/tiled/dark/monotile, -/area/eva) -"tK" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/catwalk_plated, -/turf/simulated/floor/plating, -/area/hallway/primary/fourthdeck/aft) -"tO" = ( -/obj/machinery/atmospherics/pipe/simple/hidden, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled, -/area/eva) -"tP" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled, -/area/eva) -"tQ" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/turf/simulated/floor/tiled, -/area/eva) -"tR" = ( -/obj/structure/table/steel_reinforced, -/obj/machinery/cell_charger, -/obj/item/stack/cable_coil{ - pixel_x = 3; - pixel_y = -7 - }, -/obj/item/stack/cable_coil{ - pixel_x = 3; - pixel_y = -7 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/item/cell/high, -/obj/item/cell/high, -/turf/simulated/floor/tiled/monotile, -/area/eva) -"tS" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/eva) -"tU" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/item/device/radio/intercom{ - dir = 8; - pixel_x = 21 - }, -/obj/effect/catwalk_plated, -/turf/simulated/floor/plating, -/area/hallway/primary/fourthdeck/fore) -"tV" = ( -/obj/machinery/firealarm{ - dir = 8; - pixel_x = -24; - pixel_y = 6 - }, -/obj/effect/floor_decal/techfloor{ - dir = 1 - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 1; - icon_state = "warning" - }, -/turf/simulated/floor/tiled/dark, -/area/teleporter/fourthdeck) -"tW" = ( -/obj/effect/floor_decal/corner_techfloor_grid{ - dir = 1 - }, -/obj/effect/floor_decal/techfloor/corner{ - dir = 1 - }, -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 1 - }, -/turf/simulated/floor/tiled/dark, -/area/teleporter/fourthdeck) -"tX" = ( -/obj/structure/table/standard, -/obj/item/device/radio/intercom{ - dir = 8; - pixel_x = 21 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/teleporter/fourthdeck) -"tY" = ( -/obj/structure/table/standard, -/obj/random/tech_supply, -/obj/random/tech_supply, -/obj/random/tech_supply, -/obj/random/tech_supply, -/obj/random/tech_supply, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 4 - }, -/obj/machinery/camera/network/fourth_deck{ - c_tag = "Fourth Deck Hallway - Tool Storage"; - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/storage/primary) -"tZ" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/effect/catwalk_plated, -/turf/simulated/floor/plating, -/area/storage/primary) -"ua" = ( -/obj/structure/disposalpipe/segment{ - dir = 1; - icon_state = "pipe-c" - }, -/turf/simulated/floor/tiled, -/area/storage/primary) -"ub" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/simulated/floor/tiled/monotile, -/area/storage/primary) -"uc" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/wallframe_spawn/no_grille, -/turf/simulated/floor/plating, -/area/storage/primary) -"ud" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden, -/obj/effect/floor_decal/industrial/warning/fulltile, -/obj/structure/disposalpipe/sortjunction/flipped{ - dir = 1; - name = "Primary Tool Storage"; - sort_type = "Primary Tool Storage" - }, -/turf/simulated/floor/tiled/steel_grid, -/area/hallway/primary/fourthdeck/fore) -"ue" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/effect/floor_decal/industrial/warning/fulltile, -/turf/simulated/floor/tiled/steel_grid, -/area/hallway/primary/fourthdeck/fore) -"uf" = ( -/obj/structure/disposalpipe/segment, -/obj/machinery/door/firedoor, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/door/airlock/civilian{ - name = "Emergency Storage" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden, -/turf/simulated/floor/tiled/steel_ridged, -/area/hallway/primary/fourthdeck/fore) -"ug" = ( -/obj/machinery/firealarm{ - dir = 1; - pixel_y = -24 - }, -/obj/effect/floor_decal/corner/red, -/turf/simulated/floor/tiled/monotile, -/area/hallway/primary/fourthdeck/center) -"uh" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/effect/floor_decal/corner/red{ - dir = 10 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/fourthdeck/center) -"ui" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 1 - }, -/obj/item/device/radio/intercom{ - dir = 1; - pixel_y = -28 - }, -/obj/machinery/camera/network/fourth_deck{ - c_tag = "Fourth Deck Hallway - Lift"; - dir = 1 - }, -/obj/effect/floor_decal/corner/red{ - dir = 8 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/fourthdeck/center) -"uj" = ( -/obj/effect/floor_decal/corner/white{ - dir = 1 - }, -/obj/effect/floor_decal/corner/red{ - dir = 8 - }, -/turf/simulated/floor/tiled/dark, -/area/hallway/primary/fourthdeck/aft) -"uk" = ( -/obj/structure/closet/emcloset, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/alarm{ - pixel_y = 24 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/hallway/primary/fourthdeck/aft) -"ul" = ( -/turf/simulated/open, -/area/quartermaster/storage/upper) -"um" = ( -/obj/effect/floor_decal/corner/brown{ - dir = 10 - }, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 1 - }, -/obj/machinery/light, -/turf/simulated/floor/tiled, -/area/hallway/primary/fourthdeck/center) -"un" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/floor_decal/corner/red, -/obj/effect/floor_decal/corner/white{ - dir = 8 - }, -/obj/machinery/rotating_alarm/security_alarm{ - dir = 1; - pixel_y = -16 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/fourthdeck/fore) -"uo" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/quartermaster/office) -"up" = ( -/obj/effect/floor_decal/corner/brown/half, -/turf/simulated/floor/tiled/monotile, -/area/hallway/primary/fourthdeck/center) -"uq" = ( -/obj/machinery/door/blast/shutters{ - dir = 4; - id_tag = "sup_office"; - name = "Supply Desk Shutters" - }, -/obj/effect/wallframe_spawn/reinforced/no_grille, -/obj/machinery/door/firedoor, -/turf/simulated/floor/plating, -/area/quartermaster/office) -"ur" = ( -/obj/structure/adherent_pylon, -/obj/structure/sign/warning/high_voltage{ - pixel_y = 32 - }, -/turf/simulated/floor/crystal, -/area/crew_quarters/adherent) -"ut" = ( -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 10 - }, -/obj/item/device/radio/intercom{ - dir = 8; - pixel_x = 21 - }, -/turf/simulated/floor/tiled/dark, -/area/eva) -"uu" = ( -/obj/structure/railing/mapped{ - dir = 4; - icon_state = "railing0-1" - }, -/turf/simulated/open, -/area/quartermaster/expedition/storage) -"uw" = ( -/obj/machinery/door/airlock/maintenance{ - name = "Lounge Maintenance" - }, -/obj/machinery/door/firedoor, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/crew_quarters/lounge) -"uy" = ( -/obj/effect/floor_decal/spline/fancy/wood, -/obj/effect/floor_decal/spline/fancy/wood/corner{ - dir = 1 - }, -/obj/effect/floor_decal/spline/fancy/wood/corner{ - dir = 4 - }, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 8 - }, -/turf/simulated/floor/lino, -/area/command/captainmess) -"uA" = ( -/obj/structure/closet/jcloset_torch, -/obj/item/grenade/chem_grenade/cleaner, -/obj/item/grenade/chem_grenade/cleaner, -/obj/item/reagent_containers/spray/cleaner, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled/steel_grid, -/area/janitor/storage) -"uB" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 1 - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/turf/simulated/floor/tiled/techmaint, -/area/quartermaster/hangar/catwalks_starboard) -"uH" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/machinery/firealarm{ - dir = 1; - pixel_y = -24 - }, -/obj/effect/floor_decal/corner/brown, -/turf/simulated/floor/tiled, -/area/hallway/primary/fourthdeck/aft) -"uI" = ( -/obj/machinery/button/blast_door{ - id_tag = "qm_warehouse2"; - name = "Warehouse Door Control"; - pixel_x = -6; - pixel_y = 24; - req_access = newlist() - }, -/obj/machinery/light_switch{ - pixel_x = 10; - pixel_y = 32 - }, -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 1; - icon_state = "warningcorner" - }, -/turf/simulated/floor/tiled/monotile, -/area/quartermaster/storage/upper) -"uK" = ( -/obj/effect/floor_decal/corner/green{ - dir = 10 - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/tiled, -/area/hallway/primary/fourthdeck/aft) -"uL" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/fourthdeck/forestarboard) -"uM" = ( -/turf/simulated/floor/crystal, -/area/crew_quarters/adherent) -"uN" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 1 - }, -/turf/simulated/floor/crystal, -/area/crew_quarters/adherent) -"uO" = ( -/obj/structure/sign/warning/caution{ - dir = 8; - pixel_x = 32 - }, -/turf/simulated/floor/crystal, -/area/crew_quarters/adherent) -"uP" = ( -/obj/structure/catwalk, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/plating, -/area/maintenance/fourthdeck/aft) -"uR" = ( -/obj/machinery/power/breakerbox/activated{ - RCon_tag = "Fourth Deck Substation Bypass" - }, -/obj/machinery/camera/network/engineering{ - c_tag = "Substation - Fourth Deck"; - dir = 1 - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 8; - icon_state = "warning" - }, -/turf/simulated/floor/plating, -/area/maintenance/substation/fourthdeck) -"uT" = ( -/obj/structure/reagent_dispensers/beerkeg, -/turf/simulated/floor/tiled/techfloor/grid, -/area/storage/auxillary/port) -"uY" = ( -/obj/structure/catwalk, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/maintenance/fourthdeck/forestarboard) -"uZ" = ( -/obj/effect/floor_decal/industrial/outline/grey, -/obj/structure/table/rack{ - dir = 8 - }, -/obj/item/tank/jetpack/carbondioxide, -/obj/item/tank/jetpack/carbondioxide, -/obj/machinery/light{ - dir = 1 - }, -/obj/item/tank/jetpack/carbondioxide, -/obj/item/tank/jetpack/carbondioxide, -/obj/item/tank/jetpack/carbondioxide, -/turf/simulated/floor/tiled/dark/monotile, -/area/eva) -"va" = ( -/obj/structure/catwalk, -/obj/machinery/rotating_alarm/security_alarm{ - dir = 8 - }, -/turf/simulated/open, -/area/quartermaster/hangar/catwalks_starboard) -"vb" = ( -/obj/structure/reagent_dispensers/watertank, -/obj/effect/floor_decal/industrial/outline/blue, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 8 - }, -/obj/machinery/alarm{ - pixel_y = 24 - }, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/waterstore) -"vh" = ( -/obj/structure/railing/mapped{ - dir = 1; - icon_state = "railing0-1" - }, -/obj/structure/railing/mapped{ - dir = 4; - icon_state = "railing0-1" - }, -/turf/simulated/open, -/area/maintenance/fourthdeck/foreport) -"vi" = ( -/obj/effect/floor_decal/industrial/warning, -/obj/machinery/button/blast_door{ - id_tag = "qm_warehouse2"; - name = "Warehouse Door Control"; - pixel_x = 26; - pixel_y = -25; - req_access = list(list("ACCESS_CARGO","ACCESS_MINING")) - }, -/obj/machinery/alarm{ - dir = 8; - pixel_x = 24 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/fourthdeck/aft) -"vj" = ( -/obj/effect/floor_decal/corner/brown/half{ - dir = 1 - }, -/obj/structure/sign/directions/janitor{ - dir = 1; - pixel_y = 32 - }, -/turf/simulated/floor/tiled/monotile, -/area/hallway/primary/fourthdeck/aft) -"vk" = ( -/obj/machinery/portable_atmospherics/canister/oxygen, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled/monotile, -/area/eva) -"vm" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/effect/floor_decal/corner/paleblue{ - dir = 9 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/fourthdeck/fore) -"vn" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 8 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/fourthdeck/fore) -"vo" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/command{ - name = "Fourth Deck Teleporter" - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled/steel_ridged, -/area/teleporter/fourthdeck) -"vp" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark, -/area/teleporter/fourthdeck) -"vq" = ( -/obj/machinery/power/apc{ - name = "south bump"; - pixel_y = -24 - }, -/obj/structure/cable/green{ - d2 = 8; - icon_state = "0-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark, -/area/teleporter/fourthdeck) -"vr" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/obj/machinery/light, -/turf/simulated/floor/tiled/dark, -/area/teleporter/fourthdeck) -"vs" = ( -/obj/structure/table/standard, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 8 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/teleporter/fourthdeck) -"vt" = ( -/obj/structure/table/standard, -/obj/machinery/recharger, -/obj/item/device/paicard, -/obj/structure/cable/green{ - d2 = 4; - icon_state = "0-4" - }, -/obj/machinery/power/apc{ - dir = 8; - name = "west bump"; - pixel_x = -24 - }, -/turf/simulated/floor/tiled/monotile, -/area/storage/primary) -"vu" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable/green{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/turf/simulated/floor/tiled, -/area/storage/primary) -"vv" = ( -/obj/machinery/hologram/holopad, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled, -/area/storage/primary) -"vw" = ( -/obj/machinery/requests_console{ - department = "Tool Storage"; - pixel_y = -30 - }, -/obj/machinery/light, -/obj/structure/bed/chair{ - dir = 4 - }, -/turf/simulated/floor/tiled/monotile, -/area/storage/primary) -"vx" = ( -/obj/machinery/computer/modular/preset/civilian{ - dir = 8; - icon_state = "console" - }, -/turf/simulated/floor/tiled, -/area/storage/primary) -"vy" = ( -/obj/structure/reagent_dispensers/watertank, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled/monotile, -/area/storage/primary) -"vz" = ( -/obj/structure/reagent_dispensers/fueltank, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled/monotile, -/area/storage/primary) -"vA" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden, -/obj/machinery/door/blast/shutters{ - density = 0; - dir = 2; - icon_state = "shutter0"; - id_tag = "hangar_hallway_shutters"; - name = "Hangar Deck Hallway Shutters"; - opacity = 0 - }, -/obj/effect/floor_decal/corner/red/mono, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/tiled/monotile, -/area/hallway/primary/fourthdeck/fore) -"vB" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/door/blast/shutters{ - density = 0; - dir = 2; - icon_state = "shutter0"; - id_tag = "hangar_hallway_shutters"; - name = "Hangar Deck Hallway Shutters"; - opacity = 0 - }, -/obj/effect/floor_decal/corner/red/mono, -/turf/simulated/floor/tiled/monotile, -/area/hallway/primary/fourthdeck/fore) -"vC" = ( -/obj/machinery/status_display, -/turf/simulated/wall/prepainted, -/area/security/hangcheck) -"vD" = ( -/turf/simulated/wall/prepainted, -/area/maintenance/fourthdeck/aft) -"vE" = ( -/obj/machinery/door/airlock/security{ - name = "Security Checkpoint"; - secured_wires = 1 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/steel_ridged, -/area/security/hangcheck) -"vF" = ( -/turf/simulated/wall/prepainted, -/area/crew_quarters/commissary) -"vH" = ( -/obj/structure/railing/mapped{ - dir = 1; - icon_state = "railing0-1" - }, -/turf/simulated/floor/shuttle_ceiling/torch/air, -/area/quartermaster/hangar/catwalks_starboard) -"vJ" = ( -/obj/machinery/door/firedoor, -/obj/effect/wallframe_spawn/reinforced/no_grille, -/turf/simulated/floor/plating, -/area/hallway/primary/fourthdeck/center) -"vK" = ( -/turf/simulated/wall/prepainted, -/area/quartermaster/deckchief) -"vO" = ( -/obj/structure/table/rack{ - dir = 8 - }, -/obj/item/storage/briefcase/inflatable{ - pixel_x = 3; - pixel_y = 6 - }, -/obj/item/storage/briefcase/inflatable{ - pixel_y = 3 - }, -/obj/item/storage/briefcase/inflatable{ - pixel_x = -3 - }, -/obj/machinery/power/apc{ - dir = 8; - name = "west bump"; - pixel_x = -24 - }, -/obj/structure/cable/green{ - d2 = 4; - icon_state = "0-4" - }, -/obj/machinery/rotating_alarm/security_alarm{ - dir = 1 - }, -/turf/simulated/floor/tiled/monotile, -/area/eva) -"vQ" = ( -/turf/simulated/wall/prepainted, -/area/quartermaster/office) -"vW" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/eva) -"vZ" = ( -/obj/structure/sign/directions/infirmary{ - dir = 1; - pixel_y = -4 - }, -/obj/structure/sign/directions/science{ - dir = 1; - pixel_y = 3 - }, -/turf/simulated/wall/prepainted, -/area/hallway/primary/fourthdeck/aft) -"wb" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/structure/catwalk, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/effect/floor_decal/industrial/warning{ - dir = 1 - }, -/turf/simulated/floor/plating, -/area/maintenance/fourthdeck/starboard) -"wc" = ( -/obj/effect/floor_decal/industrial/warning, -/obj/machinery/door/blast/regular/escape_pod, -/turf/simulated/floor/reinforced, -/area/maintenance/fourthdeck/aft) -"we" = ( -/obj/structure/sign/directions/bridge{ - dir = 1; - pixel_y = 3 - }, -/obj/structure/sign/directions/security{ - dir = 1; - pixel_y = -4 - }, -/turf/simulated/wall/prepainted, -/area/hallway/primary/fourthdeck/aft) -"wg" = ( -/obj/machinery/atmospherics/pipe/manifold4w/hidden, -/turf/simulated/floor/tiled/monotile, -/area/shuttle/escape_pod9/station) -"wh" = ( -/obj/machinery/status_display, -/turf/simulated/wall/prepainted, -/area/hallway/primary/fourthdeck/aft) -"wi" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/fourthdeck/aft) -"wl" = ( -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/monotile, -/area/hallway/primary/fourthdeck/center) -"wm" = ( -/obj/machinery/status_display/supply_display, -/turf/simulated/wall/prepainted, -/area/maintenance/fourthdeck/aft) -"wn" = ( -/obj/machinery/status_display, -/turf/simulated/wall/prepainted, -/area/hallway/primary/fourthdeck/center) -"wp" = ( -/obj/machinery/door/blast/regular/escape_pod, -/turf/simulated/floor/reinforced/airless, -/area/maintenance/fourthdeck/aft) -"wq" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/effect/catwalk_plated, -/obj/structure/closet/hydrant{ - pixel_y = 32 - }, -/turf/simulated/floor/plating, -/area/hallway/primary/fourthdeck/fore) -"ws" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/maintenance{ - name = "Hangar Maintenance" - }, -/turf/simulated/floor/tiled/steel_ridged, -/area/quartermaster/hangar/catwalks_port) -"wt" = ( -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/waterstore) -"wx" = ( -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 - }, -/obj/effect/floor_decal/corner/blue{ - dir = 9 - }, -/obj/machinery/light{ - dir = 1 - }, -/turf/simulated/floor/tiled/dark, -/area/eva) -"wz" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 1 - }, -/turf/simulated/floor/tiled, -/area/eva) -"wA" = ( -/obj/structure/dispenser/oxygen, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/obj/machinery/light{ - dir = 4; - icon_state = "tube1" - }, -/turf/simulated/floor/tiled/monotile, -/area/eva) -"wC" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/effect/floor_decal/corner/paleblue/half{ - dir = 8 - }, -/turf/simulated/floor/tiled/monotile, -/area/hallway/primary/fourthdeck/fore) -"wD" = ( -/obj/machinery/light{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/tiled/monotile, -/area/hallway/primary/fourthdeck/fore) -"wE" = ( -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/door/airlock/glass/civilian{ - name = "Primary Tool Storage" - }, -/turf/simulated/floor/tiled/steel_ridged, -/area/storage/primary) -"wF" = ( -/turf/simulated/wall/prepainted, -/area/storage/primary) -"wG" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden, -/obj/machinery/light{ - dir = 8; - icon_state = "tube1" - }, -/obj/effect/floor_decal/industrial/warning/fulltile, -/obj/structure/disposalpipe/sortjunction{ - dir = 1; - name = "Security Checkpoint - Deck 4"; - sort_type = "Security Checkpoint - Deck 4" - }, -/turf/simulated/floor/tiled/steel_grid, -/area/hallway/primary/fourthdeck/fore) -"wH" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/camera/network/fourth_deck{ - c_tag = "Fourth Deck Hallway - Primary Tool Storage"; - dir = 8 - }, -/obj/effect/floor_decal/industrial/warning/fulltile, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/simulated/floor/tiled/steel_grid, -/area/hallway/primary/fourthdeck/fore) -"wI" = ( -/obj/machinery/firealarm{ - pixel_y = 24 - }, -/obj/structure/table/steel, -/obj/machinery/button/blast_door{ - desc = "A remote control-switch for shutters."; - id_tag = "hangar_checkpoint_shutters"; - name = "Checkpoint Window Shutters"; - pixel_x = -3; - pixel_y = 7 - }, -/obj/machinery/button/blast_door{ - desc = "A remote control-switch for shutters."; - id_tag = "hangar_hallway_shutters"; - name = "Hallway Checkpoint Shutters"; - pixel_x = -3; - pixel_y = -3 - }, -/obj/effect/floor_decal/corner/red/mono, -/obj/machinery/light_switch{ - pixel_x = 10; - pixel_y = 32 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/security/hangcheck) -"wJ" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/floor_decal/corner/red/half{ - dir = 1 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/security/hangcheck) -"wK" = ( -/obj/effect/floor_decal/corner/red/half{ - dir = 1 - }, -/obj/machinery/requests_console{ - announcementConsole = 1; - department = "Security"; - departmentType = 5; - pixel_y = 30 - }, -/obj/structure/disposalpipe/segment/bent, -/turf/simulated/floor/tiled/dark/monotile, -/area/security/hangcheck) -"wL" = ( -/obj/machinery/door/airlock/civilian{ - name = "Custodial Storage" - }, -/obj/machinery/door/firedoor, -/turf/simulated/floor/tiled/steel_ridged, -/area/janitor/storage) -"wM" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/effect/floor_decal/corner/red/mono, -/obj/machinery/computer/modular/preset/security{ - dir = 8; - icon_state = "console" - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/security/hangcheck) -"wQ" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden{ - dir = 1 - }, -/turf/simulated/floor/tiled/monotile, -/area/shuttle/escape_pod7/station) -"wS" = ( -/obj/structure/railing/mapped{ - dir = 4; - icon_state = "railing0-1" - }, -/turf/simulated/floor/shuttle_ceiling/torch/air, -/area/quartermaster/hangar/catwalks_port) -"wT" = ( -/obj/effect/wallframe_spawn/no_grille, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/maintenance/fourthdeck/port) -"wW" = ( -/obj/machinery/door/blast/regular/escape_pod, -/turf/simulated/floor/reinforced/airless, -/area/maintenance/fourthdeck/starboard) -"wX" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 1; - icon_state = "warning" - }, -/turf/simulated/floor/reinforced/airless, -/area/maintenance/fourthdeck/aft) -"xb" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden{ - dir = 8 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/eva) -"xi" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/fourthdeck/starboard) -"xm" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/fourthdeck/aft) -"xn" = ( -/obj/effect/floor_decal/corner/brown{ - dir = 5 - }, -/turf/simulated/floor/tiled, -/area/quartermaster/deckchief) -"xo" = ( -/obj/structure/closet/emcloset, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled/techfloor/grid, -/area/hallway/primary/fourthdeck/aft) -"xr" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden, -/obj/effect/catwalk_plated/dark, -/obj/structure/disposalpipe/segment, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/alarm{ - dir = 8; - pixel_x = 21 - }, -/turf/simulated/floor/plating, -/area/hallway/primary/fourthdeck/aft) -"xu" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/power/apc{ - dir = 8; - name = "west bump"; - pixel_x = -24 - }, -/obj/structure/cable/green, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/fourthdeck/aft) -"xv" = ( -/obj/structure/cable{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/structure/catwalk, -/obj/random/torchcloset, -/obj/random/maintenance/solgov, -/obj/random/maintenance/solgov, -/turf/simulated/floor/plating, -/area/maintenance/fourthdeck/aft) -"xw" = ( -/obj/effect/floor_decal/scglogo, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/fourthdeck/center) -"xy" = ( -/obj/machinery/atmospherics/pipe/simple/hidden, -/turf/simulated/floor/tiled/monotile, -/area/shuttle/escape_pod9/station) -"xA" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/catwalk, -/obj/structure/disposalpipe/segment{ - dir = 1; - icon_state = "pipe-c" - }, -/turf/simulated/floor/plating, -/area/maintenance/fourthdeck/aft) -"xB" = ( -/obj/structure/closet/firecloset, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled/monotile, -/area/hallway/primary/fourthdeck/center) -"xE" = ( -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/random/maintenance/solgov/clean, -/obj/random/maintenance/solgov/clean, -/obj/structure/closet/emcloset, -/obj/random/maintenance/solgov/clean, -/turf/simulated/floor/tiled/techfloor/grid, -/area/hallway/primary/fourthdeck/aft) -"xJ" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled/monotile, -/area/hallway/primary/fourthdeck/aft) -"xL" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/railing/mapped{ - dir = 1; - icon_state = "railing0-1" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/maintenance/fourthdeck/port) -"xN" = ( -/obj/effect/floor_decal/corner/brown{ - dir = 5 - }, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/fourthdeck/aft) -"xO" = ( -/obj/effect/shuttle_landmark/vox_raider/dock, -/turf/space, -/area/space) -"xP" = ( -/obj/machinery/door/airlock/glass/command{ - name = "E.V.A. Suit Storage" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/door/firedoor, -/turf/simulated/floor/tiled/steel_ridged, -/area/eva) -"xR" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/alarm{ - dir = 4; - pixel_x = -23 - }, -/obj/effect/floor_decal/corner/paleblue{ - dir = 9 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/fourthdeck/fore) -"xS" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/obj/effect/catwalk_plated, -/turf/simulated/floor/plating, -/area/hallway/primary/fourthdeck/fore) -"xT" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/newscaster{ - pixel_y = 32 - }, -/obj/effect/catwalk_plated, -/turf/simulated/floor/plating, -/area/hallway/primary/fourthdeck/fore) -"xU" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 1 - }, -/obj/item/device/radio/intercom{ - pixel_y = 23 - }, -/obj/effect/catwalk_plated, -/turf/simulated/floor/plating, -/area/hallway/primary/fourthdeck/fore) -"xV" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/alarm{ - pixel_y = 24 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 1 - }, -/turf/simulated/floor/tiled/monotile, -/area/hallway/primary/fourthdeck/fore) -"xW" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/firealarm{ - pixel_y = 24 - }, -/obj/effect/catwalk_plated, -/turf/simulated/floor/plating, -/area/hallway/primary/fourthdeck/fore) -"xX" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atm{ - pixel_y = 32 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 1 - }, -/obj/machinery/camera/network/fourth_deck{ - c_tag = "Fourth Deck Hallway - Fore Port" - }, -/obj/effect/catwalk_plated, -/turf/simulated/floor/plating, -/area/hallway/primary/fourthdeck/fore) -"xY" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 6 - }, -/obj/effect/catwalk_plated, -/turf/simulated/floor/plating, -/area/hallway/primary/fourthdeck/fore) -"xZ" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 4 - }, -/turf/simulated/floor/tiled/monotile, -/area/hallway/primary/fourthdeck/fore) -"ya" = ( -/obj/structure/railing/mapped{ - dir = 4; - icon_state = "railing0-1" - }, -/obj/structure/railing/mapped, -/turf/simulated/open, -/area/quartermaster/expedition/storage) -"yb" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 4 - }, -/obj/effect/catwalk_plated, -/turf/simulated/floor/plating, -/area/hallway/primary/fourthdeck/fore) -"yc" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 4 - }, -/obj/effect/catwalk_plated, -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers, -/turf/simulated/floor/plating, -/area/hallway/primary/fourthdeck/fore) -"yd" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/effect/floor_decal/corner/red{ - dir = 6 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/fourthdeck/fore) -"ye" = ( -/obj/effect/floor_decal/corner/red/half{ - dir = 8 - }, -/obj/structure/bed/chair/padded/red{ - dir = 8 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/security/hangcheck) -"yf" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/hologram/holopad, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled/dark, -/area/security/hangcheck) -"yg" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 8 - }, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/tiled/dark, -/area/security/hangcheck) -"yh" = ( -/turf/simulated/floor/tiled/dark, -/area/security/hangcheck) -"yi" = ( -/obj/effect/floor_decal/corner/red{ - dir = 6 - }, -/obj/structure/table/steel, -/obj/machinery/recharger, -/turf/simulated/floor/tiled/dark, -/area/security/hangcheck) -"yj" = ( -/obj/effect/floor_decal/corner/brown/mono, -/obj/structure/railing/mapped{ - dir = 4; - icon_state = "railing0-1" - }, -/turf/simulated/floor/tiled/monotile, -/area/quartermaster/storage/upper) -"yl" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/railing/mapped, -/obj/structure/railing/mapped{ - dir = 4; - icon_state = "railing0-1" - }, -/turf/simulated/floor/plating, -/area/maintenance/fourthdeck/aft) -"yp" = ( -/obj/machinery/power/apc{ - dir = 8; - name = "west bump"; - pixel_x = -24 - }, -/obj/structure/cable/green{ - d2 = 4; - icon_state = "0-4" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/turf/simulated/floor/tiled/techmaint, -/area/quartermaster/hangar/catwalks_port) -"yr" = ( -/obj/effect/shuttle_landmark/merc/dock, -/turf/space, -/area/space) -"yu" = ( -/obj/effect/floor_decal/techfloor{ - dir = 4 - }, -/obj/structure/railing/mapped{ - dir = 4; - icon_state = "railing0-1" - }, -/obj/effect/floor_decal/corner/brown{ - dir = 1 - }, -/turf/simulated/floor/tiled/steel_grid, -/area/turbolift/cargo_lift) -"yy" = ( -/turf/simulated/floor/tiled, -/area/quartermaster/office) -"yB" = ( -/obj/structure/catwalk, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/plating, -/area/maintenance/fourthdeck/forestarboard) -"yC" = ( -/turf/simulated/floor/tiled, -/area/hallway/primary/fourthdeck/aft) -"yD" = ( -/obj/machinery/hologram/holopad, -/obj/effect/landmark/test/safe_turf, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled/monotile, -/area/hallway/primary/fourthdeck/aft) -"yF" = ( -/obj/structure/ladder/up, -/obj/effect/floor_decal/corner/green{ - dir = 6 - }, -/obj/structure/sign/deck/fourth{ - dir = 8; - pixel_x = 32 - }, -/turf/simulated/floor/tiled/steel_grid, -/area/hallway/primary/fourthdeck/aft) -"yG" = ( -/obj/machinery/conveyor{ - dir = 8; - id = "packageSort1" - }, -/obj/random/junk, -/obj/machinery/firealarm{ - dir = 1; - pixel_y = -24 - }, -/turf/simulated/floor/plating, -/area/quartermaster/sorting) -"yH" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/tiled, -/area/hallway/primary/fourthdeck/aft) -"yN" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/catwalk, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/plating, -/area/maintenance/fourthdeck/aft) -"yP" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/random/trash, -/obj/structure/railing/mapped{ - dir = 1; - icon_state = "railing0-1" - }, -/turf/simulated/floor/plating, -/area/maintenance/fourthdeck/aft) -"yQ" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/railing/mapped{ - dir = 1; - icon_state = "railing0-1" - }, -/turf/simulated/floor/plating, -/area/maintenance/fourthdeck/aft) -"za" = ( -/obj/effect/floor_decal/corner/brown{ - dir = 5 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/fourthdeck/center) -"ze" = ( -/obj/structure/railing/mapped{ - dir = 1; - icon_state = "railing0-1" - }, -/obj/structure/railing/mapped{ - dir = 8; - icon_state = "railing0-1" - }, -/turf/simulated/floor/plating, -/area/maintenance/fourthdeck/aft) -"zj" = ( -/turf/simulated/wall/r_wall/hull, -/area/eva) -"zk" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 4 - }, -/obj/effect/floor_decal/corner/paleblue{ - dir = 9 - }, -/turf/simulated/floor/tiled/dark, -/area/eva) -"zl" = ( -/obj/machinery/conveyor{ - dir = 8; - id = "packageSort1" - }, -/obj/random/junk, -/obj/machinery/alarm{ - dir = 1; - pixel_y = -22 - }, -/turf/simulated/floor/plating, -/area/quartermaster/sorting) -"zm" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 4 - }, -/obj/structure/closet/emcloset, -/obj/effect/floor_decal/corner/paleblue/mono, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled/monotile, -/area/hallway/primary/fourthdeck/fore) -"zn" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 - }, -/obj/effect/floor_decal/corner/paleblue{ - dir = 10 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/fourthdeck/fore) -"zo" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4; - icon_state = "pipe-c" - }, -/turf/simulated/floor/carpet, -/area/crew_quarters/lounge) -"zp" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/simple/hidden, -/turf/simulated/floor/tiled/dark/monotile, -/area/hallway/primary/fourthdeck/aft) -"zq" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/effect/floor_decal/corner/red, -/obj/effect/floor_decal/corner/white{ - dir = 8 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/fourthdeck/fore) -"zr" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 1 - }, -/obj/machinery/light, -/obj/effect/floor_decal/corner/red/half, -/turf/simulated/floor/tiled/monotile, -/area/hallway/primary/fourthdeck/fore) -"zs" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/item/device/radio/intercom{ - dir = 1; - pixel_y = -28 - }, -/obj/effect/floor_decal/corner/red, -/obj/effect/floor_decal/corner/white{ - dir = 8 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/fourthdeck/fore) -"zt" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 1 - }, -/obj/effect/floor_decal/corner/red, -/obj/effect/floor_decal/corner/white{ - dir = 8 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/fourthdeck/fore) -"zu" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden, -/obj/effect/floor_decal/corner/red, -/obj/effect/floor_decal/corner/white{ - dir = 8 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/fourthdeck/fore) -"zv" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/machinery/light, -/obj/effect/floor_decal/corner/red/half, -/turf/simulated/floor/tiled/monotile, -/area/hallway/primary/fourthdeck/fore) -"zx" = ( -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/fourthdeck/port) -"zy" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/light, -/obj/effect/floor_decal/corner/red/half, -/turf/simulated/floor/tiled/monotile, -/area/hallway/primary/fourthdeck/fore) -"zz" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden, -/obj/structure/cable/green{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/effect/floor_decal/corner/red, -/obj/effect/floor_decal/corner/white{ - dir = 8 - }, -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled, -/area/hallway/primary/fourthdeck/fore) -"zA" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 1 - }, -/obj/structure/closet/emcloset, -/obj/effect/floor_decal/corner/red/mono, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled/monotile, -/area/hallway/primary/fourthdeck/fore) -"zC" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 1 - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/turf/simulated/floor/tiled/dark, -/area/security/hangcheck) -"zD" = ( -/obj/machinery/light_switch{ - pixel_x = 6; - pixel_y = -24 - }, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 4 - }, -/obj/structure/table/rack, -/obj/random/maintenance/solgov, -/turf/simulated/floor/tiled, -/area/crew_quarters/commissary) -"zE" = ( -/obj/effect/floor_decal/corner/mauve/half{ - dir = 4 - }, -/obj/structure/filingcabinet/chestdrawer, -/turf/simulated/floor/tiled/monotile, -/area/command/pathfinder) -"zF" = ( -/obj/machinery/power/apc{ - dir = 4; - name = "east bump"; - pixel_x = 24 - }, -/obj/structure/cable/green{ - d2 = 8; - icon_state = "0-8" - }, -/obj/effect/floor_decal/corner/red{ - dir = 6 - }, -/obj/structure/ladder/up, -/obj/effect/floor_decal/industrial/hatch/yellow, -/turf/simulated/floor/tiled/dark, -/area/security/hangcheck) -"zM" = ( -/obj/structure/bed/chair/padded/brown{ - dir = 8 - }, -/turf/simulated/floor/tiled, -/area/quartermaster/deckchief) -"zP" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/fourthdeck/aft) -"zS" = ( -/turf/simulated/open, -/area/maintenance/fourthdeck/foreport) -"zZ" = ( -/obj/item/device/radio/intercom{ - dir = 8; - pixel_x = 21 - }, -/obj/structure/ladder/up, -/obj/effect/floor_decal/corner/green{ - dir = 6 - }, -/turf/simulated/floor/tiled/steel_grid, -/area/hallway/primary/fourthdeck/aft) -"Aa" = ( -/obj/structure/bed/chair/shuttle{ - dir = 8 - }, -/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{ - dir = 8; - id_tag = "escape_pod_9_pump" - }, -/turf/simulated/floor/tiled/monotile, -/area/shuttle/escape_pod9/station) -"Ab" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/fourthdeck/aft) -"Ad" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 8 - }, -/turf/simulated/floor/tiled, -/area/quartermaster/deckchief) -"Ae" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 4 - }, -/obj/machinery/camera/network/fourth_deck{ - c_tag = "Fourth Deck Hallway - Port"; - dir = 4 - }, -/obj/item/device/radio/intercom{ - dir = 4; - pixel_x = -21 - }, -/obj/effect/floor_decal/corner/green/half{ - dir = 8 - }, -/obj/structure/disposalpipe/segment{ - dir = 1; - icon_state = "pipe-c" - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/hallway/primary/fourthdeck/aft) -"Aj" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/railing/mapped, -/obj/structure/disposalpipe/segment{ - dir = 2; - icon_state = "pipe-c" - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/plating, -/area/maintenance/fourthdeck/aft) -"Ak" = ( -/obj/structure/railing/mapped, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/random/trash, -/obj/structure/cable{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/turf/simulated/floor/plating, -/area/maintenance/fourthdeck/aft) -"Al" = ( -/obj/effect/floor_decal/industrial/outline/grey, -/obj/structure/table/steel, -/obj/random/maintenance/solgov, -/obj/random/maintenance/solgov, -/obj/random/single/lighter, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/fourthdeck/foreport) -"Am" = ( -/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{ - id_tag = "eva_airlock_pump" - }, -/obj/effect/floor_decal/techfloor{ - dir = 1 - }, -/obj/machinery/embedded_controller/radio/airlock/airlock_controller{ - frequency = 1380; - id_tag = "eva_airlock"; - pixel_y = 20; - tag_airpump = "eva_airlock_pump"; - tag_chamber_sensor = "eva_airlock_sensor"; - tag_exterior_door = "eva_airlock_outer"; - tag_interior_door = "eva_airlock_inner" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/eva) -"An" = ( -/obj/structure/closet/emcloset, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled/monotile, -/area/hallway/primary/fourthdeck/center) -"Ap" = ( -/obj/machinery/door/firedoor, -/obj/effect/floor_decal/corner/brown{ - dir = 4 - }, -/turf/simulated/floor/tiled/monotile, -/area/hallway/primary/fourthdeck/center) -"Aq" = ( -/obj/structure/catwalk, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/plating, -/area/maintenance/fourthdeck/port) -"Ar" = ( -/obj/structure/catwalk, -/obj/machinery/light{ - dir = 4 - }, -/turf/simulated/open, -/area/quartermaster/hangar/catwalks_starboard) -"At" = ( -/obj/structure/table/standard{ - name = "plastic table frame" - }, -/obj/item/storage/toolbox/mechanical{ - pixel_x = -2; - pixel_y = -1 - }, -/obj/item/storage/belt/utility, -/obj/item/storage/firstaid/regular{ - pixel_x = 6; - pixel_y = -5 - }, -/obj/effect/floor_decal/corner/brown/mono, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/recharger/wallcharger{ - dir = 4; - pixel_x = -23; - pixel_y = -3 - }, -/turf/simulated/floor/tiled/monotile, -/area/quartermaster/office) -"AB" = ( -/obj/effect/floor_decal/corner/red{ - dir = 1 - }, -/obj/effect/floor_decal/corner/white{ - dir = 8 - }, -/obj/machinery/rotating_alarm/security_alarm{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark, -/area/hallway/primary/fourthdeck/aft) -"AC" = ( -/obj/structure/catwalk, -/obj/structure/cable/green{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/turf/simulated/floor/plating, -/area/maintenance/fourthdeck/port) -"AD" = ( -/obj/structure/closet/crate/freezer, -/obj/random/single/cola, -/obj/random/single/cola, -/obj/random/single/cola, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/fourthdeck/forestarboard) -"AE" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/effect/floor_decal/corner/red{ - dir = 6 - }, -/turf/simulated/floor/tiled/dark, -/area/eva) -"AF" = ( -/obj/effect/floor_decal/industrial/outline/grey, -/obj/machinery/suit_storage_unit/security/alt, -/turf/simulated/floor/tiled/dark/monotile, -/area/eva) -"AH" = ( -/turf/simulated/wall/prepainted, -/area/storage/auxillary/port) -"AI" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/mining{ - name = "Port Auxiliary Storage" - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/effect/floor_decal/techfloor/corner{ - dir = 8 - }, -/turf/simulated/floor/tiled/steel_ridged, -/area/storage/auxillary/port) -"AJ" = ( -/obj/machinery/status_display, -/turf/simulated/wall/prepainted, -/area/hallway/primary/fourthdeck/fore) -"AK" = ( -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden, -/obj/machinery/door/airlock/glass/civilian{ - name = "Fore Port Docking Access" - }, -/turf/simulated/floor/tiled/steel_ridged, -/area/hallway/primary/fourthdeck/fore) -"AL" = ( -/obj/machinery/door/airlock/hatch/maintenance, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden, -/obj/machinery/door/firedoor, -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/steel_ridged, -/area/hallway/primary/fourthdeck/fore) -"AM" = ( -/obj/random/trash, -/obj/structure/catwalk, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/plating, -/area/maintenance/fourthdeck/aft) -"AN" = ( -/obj/effect/floor_decal/corner/red/mono, -/obj/machinery/camera/network/security{ - c_tag = "Checkpoint - Deck Four"; - dir = 1 - }, -/obj/structure/disposalpipe/trunk{ - dir = 1 - }, -/obj/machinery/disposal, -/obj/effect/floor_decal/industrial/hatch/yellow, -/turf/simulated/floor/tiled/dark/monotile, -/area/security/hangcheck) -"AO" = ( -/obj/machinery/photocopier, -/obj/effect/floor_decal/corner/red/mono, -/obj/effect/floor_decal/industrial/outline/grey, -/obj/item/device/radio/intercom/department/security{ - dir = 8; - pixel_x = 21 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/security/hangcheck) -"AP" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/fourthdeck/starboard) -"AT" = ( -/obj/structure/sign/warning/bomb_range{ - pixel_y = 32 - }, -/obj/effect/floor_decal/industrial/outline/grey, -/obj/structure/closet/bombcloset, -/obj/item/latexballon, -/turf/simulated/floor/tiled/techfloor/grid, -/area/hallway/primary/fourthdeck/aft) -"Bf" = ( -/obj/effect/floor_decal/techfloor{ - dir = 8 - }, -/obj/structure/railing/mapped{ - dir = 8; - icon_state = "railing0-1" - }, -/obj/effect/floor_decal/corner/brown, -/obj/effect/shuttle_landmark/lift/cargo_top, -/turf/simulated/floor/tiled/steel_grid, -/area/turbolift/cargo_lift) -"Bm" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/floor_decal/corner/red, -/obj/effect/floor_decal/corner/white{ - dir = 8 - }, -/obj/machinery/alarm{ - dir = 1; - pixel_y = -22 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/fourthdeck/fore) -"Bo" = ( -/obj/structure/sign/warning/docking_area, -/turf/simulated/wall/prepainted, -/area/hallway/primary/fourthdeck/aft) -"Bs" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/fourthdeck/aft) -"Bu" = ( -/obj/structure/catwalk, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/plating, -/area/maintenance/fourthdeck/aft) -"By" = ( -/obj/effect/floor_decal/industrial/warning, -/obj/machinery/door/blast/regular/escape_pod, -/turf/simulated/floor/reinforced, -/area/maintenance/fourthdeck/port) -"BC" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/effect/floor_decal/corner/paleblue{ - dir = 1 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/fourthdeck/fore) -"BD" = ( -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/fourthdeck/foreport) -"BH" = ( -/obj/effect/floor_decal/industrial/outline/grey, -/obj/structure/closet/crate, -/obj/random/maintenance/solgov, -/obj/random/maintenance/solgov, -/obj/random/maintenance/solgov, -/obj/structure/cable/green{ - d2 = 2; - icon_state = "0-2" - }, -/obj/machinery/power/apc{ - dir = 1; - name = "north bump"; - pixel_y = 24 - }, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/fourthdeck/port) -"BK" = ( -/turf/simulated/wall/r_wall/hull, -/area/storage/auxillary/port) -"BL" = ( -/obj/structure/closet/crate, -/obj/random/firstaid, -/turf/simulated/floor/tiled/techfloor/grid, -/area/storage/auxillary/port) -"BM" = ( -/turf/simulated/floor/tiled/techfloor/grid, -/area/storage/auxillary/port) -"BN" = ( -/obj/machinery/light/small{ - dir = 1 - }, -/obj/machinery/portable_atmospherics/canister/air, -/obj/machinery/alarm{ - pixel_y = 24 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/storage/auxillary/port) -"BO" = ( -/obj/machinery/portable_atmospherics/canister/air, -/obj/item/device/radio/intercom{ - pixel_y = 23 - }, -/obj/effect/floor_decal/techfloor{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/storage/auxillary/port) -"BP" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/effect/floor_decal/techfloor{ - dir = 8 - }, -/turf/simulated/floor/tiled/steel_grid, -/area/storage/auxillary/port) -"BQ" = ( -/obj/effect/floor_decal/industrial/warning/corner, -/obj/machinery/button/blast_door{ - id_tag = "portaux_warehouse"; - name = "Warehouse Door Control"; - pixel_x = 24; - pixel_y = -6 - }, -/obj/machinery/firealarm{ - pixel_y = 24 - }, -/obj/structure/closet/secure_closet/crew, -/obj/random/maintenance/solgov/clean, -/obj/random/maintenance/solgov/clean, -/obj/random/maintenance/solgov/clean, -/turf/simulated/floor/tiled/steel_grid, -/area/storage/auxillary/port) -"BR" = ( -/obj/machinery/button/blast_door{ - id_tag = "portaux_warehouse"; - name = "Warehouse Door Control"; - pixel_x = -24; - pixel_y = -6; - req_access = list("ACCESS_CARGO") - }, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 4 - }, -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 8 - }, -/obj/effect/floor_decal/corner/red/diagonal{ - dir = 8 - }, -/obj/effect/floor_decal/corner/white{ - dir = 1 - }, -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 8; - icon_state = "warningcorner" - }, -/turf/simulated/floor/tiled/steel_grid, -/area/hallway/primary/fourthdeck/fore) -"BS" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden, -/turf/simulated/floor/tiled/steel_grid, -/area/hallway/primary/fourthdeck/fore) -"BT" = ( -/obj/machinery/computer/atmos_alert, -/turf/simulated/floor/plating, -/area/vacant/monitoring) -"BU" = ( -/obj/structure/table/steel, -/obj/random/maintenance/solgov, -/obj/random_multi/single_item/boombox, -/turf/simulated/floor/plating, -/area/vacant/monitoring) -"BV" = ( -/turf/simulated/wall/prepainted, -/area/vacant/monitoring) -"BW" = ( -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 6 - }, -/obj/random/trash, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/fourthdeck/foreport) -"BX" = ( -/obj/machinery/atmospherics/binary/pump/on{ - dir = 8; - target_pressure = 200 - }, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/fourthdeck/foreport) -"BY" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/universal{ - dir = 4 - }, -/obj/machinery/light/small{ - dir = 1 - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/fourthdeck/foreport) -"BZ" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden, -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/fourthdeck/foreport) -"Ca" = ( -/obj/effect/floor_decal/industrial/hatch/yellow, -/obj/structure/ladder/up, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/fourthdeck/foreport) -"Cc" = ( -/obj/structure/closet/crate, -/obj/random/firstaid, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/floor/tiled/techfloor/grid, -/area/hallway/primary/fourthdeck/aft) -"Cg" = ( -/obj/structure/railing/mapped, -/obj/structure/railing/mapped{ - dir = 4; - icon_state = "railing0-1" - }, -/turf/simulated/floor/shuttle_ceiling/torch/air, -/area/quartermaster/hangar/catwalks_port) -"Ci" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden{ - dir = 8 - }, -/obj/effect/floor_decal/corner/blue{ - dir = 9 - }, -/turf/simulated/floor/tiled/dark, -/area/eva) -"Cm" = ( -/obj/structure/railing/mapped{ - dir = 1; - icon_state = "railing0-1" - }, -/obj/structure/railing/mapped{ - dir = 4; - icon_state = "railing0-1" - }, -/turf/simulated/floor/shuttle_ceiling/torch/air, -/area/quartermaster/hangar/catwalks_starboard) -"Cr" = ( -/obj/machinery/door/blast/shutters{ - dir = 2; - id_tag = "sup_office"; - name = "Supply Office Shutters" - }, -/obj/effect/wallframe_spawn/reinforced/no_grille, -/obj/machinery/door/firedoor, -/turf/simulated/floor/plating, -/area/quartermaster/office) -"Ct" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/random_multi/single_item/runtime, -/turf/simulated/floor/tiled, -/area/crew_quarters/commissary) -"Cy" = ( -/obj/structure/lattice, -/obj/machinery/atmospherics/pipe/simple/hidden/cyan{ - dir = 4 - }, -/turf/simulated/open, -/area/maintenance/fourthdeck/port) -"CB" = ( -/obj/machinery/status_display/supply_display, -/turf/simulated/wall/r_wall/prepainted, -/area/maintenance/fourthdeck/aft) -"CC" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, -/obj/structure/cable/green{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/turf/simulated/floor/crystal, -/area/crew_quarters/adherent) -"CD" = ( -/obj/machinery/firealarm{ - dir = 4; - pixel_x = 21 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/fourthdeck/aft) -"CG" = ( -/turf/simulated/floor/shuttle_ceiling/torch/air, -/area/quartermaster/hangar/catwalks_port) -"CH" = ( -/obj/effect/floor_decal/spline/fancy/wood{ - dir = 1 - }, -/obj/structure/bed/chair/comfy/brown, -/turf/simulated/floor/carpet, -/area/crew_quarters/lounge) -"CK" = ( -/obj/machinery/atmospherics/pipe/simple/hidden, -/turf/simulated/floor/tiled/monotile, -/area/shuttle/escape_pod7/station) -"CL" = ( -/turf/simulated/floor/tiled/monotile, -/area/hallway/primary/fourthdeck/aft) -"CN" = ( -/obj/structure/closet/crate, -/obj/random/junk, -/turf/simulated/floor/tiled/techfloor/grid, -/area/storage/auxillary/port) -"CO" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/storage/auxillary/port) -"CP" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/effect/floor_decal/techfloor{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/storage/auxillary/port) -"CQ" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/random_multi/single_item/boombox, -/obj/effect/floor_decal/techfloor{ - dir = 8 - }, -/turf/simulated/floor/tiled/steel_grid, -/area/storage/auxillary/port) -"CR" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 4; - icon_state = "warning" - }, -/turf/simulated/floor/tiled/steel_grid, -/area/storage/auxillary/port) -"CS" = ( -/obj/effect/floor_decal/industrial/hatch/yellow, -/obj/machinery/door/blast/shutters{ - dir = 4; - id_tag = "portaux_warehouse"; - name = "Warehouse Shutters" - }, -/turf/simulated/floor/tiled/steel_grid, -/area/storage/auxillary/port) -"CT" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden, -/obj/item/device/radio/intercom{ - dir = 8; - pixel_x = 21 - }, -/obj/effect/catwalk_plated, -/turf/simulated/floor/plating, -/area/hallway/primary/fourthdeck/fore) -"CU" = ( -/obj/structure/table/steel, -/obj/item/frame/fire_alarm, -/turf/simulated/floor/plating, -/area/vacant/monitoring) -"CV" = ( -/turf/simulated/floor/plating, -/area/vacant/monitoring) -"CW" = ( -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 5 - }, -/obj/random/smokes, -/obj/random/drinkbottle, -/obj/structure/closet, -/obj/random/junk, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/fourthdeck/foreport) -"CX" = ( -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 4 - }, -/obj/random/trash, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/fourthdeck/foreport) -"CY" = ( -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 4 - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/fourthdeck/foreport) -"CZ" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden, -/obj/structure/catwalk, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/disposalpipe/segment{ - dir = 1; - icon_state = "pipe-c" - }, -/turf/simulated/floor/plating, -/area/maintenance/fourthdeck/foreport) -"Da" = ( -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 10 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/catwalk, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/maintenance/fourthdeck/foreport) -"Db" = ( -/obj/structure/catwalk, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/maintenance/fourthdeck/foreport) -"Dc" = ( -/turf/simulated/wall/prepainted, -/area/maintenance/fourthdeck/foreport) -"Dd" = ( -/turf/simulated/wall/prepainted, -/area/eva) -"Dk" = ( -/obj/structure/reagent_dispensers/watertank, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/monotile, -/area/eva) -"Dq" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/maintenance{ - name = "Cargo Maintenance" - }, -/turf/simulated/floor/tiled/steel_ridged, -/area/quartermaster/office) -"Dr" = ( -/obj/effect/floor_decal/corner/brown/mono, -/obj/machinery/photocopier, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled/monotile, -/area/quartermaster/office) -"Ds" = ( -/turf/simulated/wall/r_wall/prepainted, -/area/quartermaster/storage/upper) -"Dt" = ( -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/fourthdeck/aft) -"Dw" = ( -/obj/effect/floor_decal/corner/green{ - dir = 9 - }, -/obj/machinery/oxygen_pump{ - pixel_x = -32 - }, -/turf/simulated/floor/tiled/dark, -/area/hallway/primary/fourthdeck/aft) -"Dx" = ( -/obj/effect/floor_decal/industrial/outline/grey, -/obj/machinery/light{ - dir = 8 - }, -/obj/machinery/suit_storage_unit/medical/alt/sol, -/turf/simulated/floor/tiled/dark/monotile, -/area/eva) -"DA" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/fourthdeck/aft) -"DF" = ( -/obj/random/trash, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/fourthdeck/aft) -"DL" = ( -/obj/structure/table/rack, -/obj/random/tech_supply, -/obj/random/tech_supply, -/obj/random/tank, -/obj/structure/cable/green{ - d2 = 4; - icon_state = "0-4" - }, -/obj/machinery/power/apc{ - dir = 8; - name = "west bump"; - pixel_x = -24 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/storage/auxillary/port) -"DM" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/floor_decal/techfloor{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/storage/auxillary/port) -"DN" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable/green{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/effect/floor_decal/techfloor{ - dir = 8 - }, -/turf/simulated/floor/tiled/steel_grid, -/area/storage/auxillary/port) -"DO" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden, -/obj/machinery/light{ - dir = 4; - icon_state = "tube1" - }, -/obj/effect/catwalk_plated, -/turf/simulated/floor/plating, -/area/hallway/primary/fourthdeck/fore) -"DP" = ( -/obj/machinery/alarm{ - dir = 4; - pixel_x = -22 - }, -/turf/simulated/floor/plating, -/area/vacant/monitoring) -"DQ" = ( -/turf/simulated/floor/plating, -/area/maintenance/fourthdeck/foreport) -"DR" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/railing/mapped{ - dir = 4; - icon_state = "railing0-1" - }, -/obj/structure/railing/mapped{ - dir = 1; - icon_state = "railing0-1" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/turf/simulated/floor/plating, -/area/maintenance/fourthdeck/foreport) -"DS" = ( -/obj/machinery/atmospherics/pipe/simple/hidden, -/obj/structure/catwalk, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/maintenance/fourthdeck/foreport) -"DT" = ( -/turf/simulated/wall/r_wall/hull, -/area/maintenance/fourthdeck/foreport) -"DU" = ( -/turf/simulated/wall/r_titanium, -/area/shuttle/escape_pod8/station) -"DV" = ( -/obj/structure/shuttle/engine/propulsion{ - dir = 1 - }, -/turf/simulated/wall/r_titanium, -/area/shuttle/escape_pod8/station) -"DX" = ( -/turf/simulated/wall/r_titanium, -/area/shuttle/escape_pod9/station) -"DY" = ( -/obj/structure/shuttle/engine/propulsion{ - dir = 1 - }, -/turf/simulated/wall/r_titanium, -/area/shuttle/escape_pod9/station) -"Ea" = ( -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, -/turf/simulated/floor/tiled/dark, -/area/eva) -"Ed" = ( -/obj/machinery/door/airlock/glass/civilian{ - name = "Laundry Room" - }, -/obj/machinery/door/firedoor, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/tiled/steel_ridged, -/area/crew_quarters/laundry) -"Em" = ( -/obj/effect/floor_decal/corner/brown/half{ - dir = 8 - }, -/turf/simulated/floor/tiled/monotile, -/area/quartermaster/office) -"En" = ( -/obj/effect/floor_decal/corner/green/mono, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/simple/hidden, -/obj/structure/sign/warning/pods/west{ - dir = 8; - pixel_x = 40 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/hallway/primary/fourthdeck/aft) -"Eo" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/disposalpipe/segment{ - dir = 1; - icon_state = "pipe-c" - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/effect/floor_decal/corner/red{ - dir = 4 - }, -/obj/effect/floor_decal/corner/white{ - dir = 1 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/fourthdeck/fore) -"Eq" = ( -/obj/effect/floor_decal/corner/brown{ - dir = 6 - }, -/obj/machinery/light/spot{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/disposalpipe/segment, -/obj/effect/floor_decal/industrial/warning{ - dir = 8 - }, -/turf/simulated/floor/tiled, -/area/quartermaster/storage/upper) -"Et" = ( -/obj/machinery/atmospherics/pipe/manifold4w/hidden, -/turf/simulated/floor/tiled/monotile, -/area/shuttle/escape_pod6/station) -"Ew" = ( -/obj/structure/railing/mapped, -/turf/simulated/floor/plating, -/area/maintenance/fourthdeck/aft) -"EC" = ( -/obj/structure/railing/mapped{ - dir = 8; - icon_state = "railing0-1" - }, -/turf/simulated/floor/shuttle_ceiling/torch/air, -/area/quartermaster/hangar/catwalks_port) -"EE" = ( -/obj/structure/table/rack, -/obj/random/tech_supply, -/obj/random/tech_supply, -/obj/effect/floor_decal/techfloor{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/storage/auxillary/port) -"EF" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 1 - }, -/obj/effect/floor_decal/techfloor{ - dir = 10 - }, -/turf/simulated/floor/tiled/steel_grid, -/area/storage/auxillary/port) -"EG" = ( -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 4 - }, -/obj/machinery/light/small{ - dir = 4; - icon_state = "bulb1" - }, -/obj/effect/floor_decal/techfloor, -/turf/simulated/floor/tiled/steel_grid, -/area/storage/auxillary/port) -"EH" = ( -/obj/effect/floor_decal/corner/red{ - dir = 8 - }, -/obj/effect/floor_decal/corner/white{ - dir = 1 - }, -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 1; - icon_state = "warningcorner" - }, -/turf/simulated/floor/tiled/steel_grid, -/area/hallway/primary/fourthdeck/fore) -"EI" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden, -/obj/effect/catwalk_plated, -/turf/simulated/floor/plating, -/area/hallway/primary/fourthdeck/fore) -"EJ" = ( -/obj/random/junk, -/turf/simulated/floor/plating, -/area/vacant/monitoring) -"EK" = ( -/obj/machinery/power/apc{ - dir = 1; - name = "north bump"; - pixel_y = 24 - }, -/obj/structure/cable/green{ - d2 = 2; - icon_state = "0-2" - }, -/turf/simulated/floor/plating, -/area/vacant/monitoring) -"EL" = ( -/obj/machinery/computer/modular/preset/security{ - dir = 8; - icon_state = "console" - }, -/turf/simulated/floor/plating, -/area/vacant/monitoring) -"EM" = ( -/obj/machinery/atmospherics/pipe/simple/hidden, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/fourthdeck/foreport) -"EO" = ( -/obj/structure/shuttle/engine/heater{ - dir = 1 - }, -/obj/structure/window/reinforced, -/turf/simulated/floor/plating, -/area/shuttle/escape_pod8/station) -"EQ" = ( -/obj/structure/shuttle/engine/heater{ - dir = 1 - }, -/obj/structure/window/reinforced, -/turf/simulated/floor/plating, -/area/shuttle/escape_pod9/station) -"ER" = ( -/obj/item/storage/pill_bottle/dice_nerd, -/obj/structure/table/woodentable, -/turf/simulated/floor/carpet, -/area/crew_quarters/lounge) -"ES" = ( -/obj/structure/bed/chair/comfy/brown{ - dir = 8 - }, -/turf/simulated/floor/carpet, -/area/crew_quarters/lounge) -"ET" = ( -/obj/machinery/light/small{ - dir = 1 - }, -/turf/simulated/floor/carpet, -/area/crew_quarters/lounge) -"EW" = ( -/obj/machinery/light/small{ - dir = 1 - }, -/obj/machinery/camera/network/fourth_deck{ - c_tag = "Fourth Deck - Lounge Aft"; - name = "security camera" - }, -/turf/simulated/floor/carpet, -/area/crew_quarters/lounge) -"EY" = ( -/obj/item/paper_bin, -/obj/structure/table/woodentable, -/turf/simulated/floor/carpet, -/area/crew_quarters/lounge) -"EZ" = ( -/obj/structure/bed/chair/comfy/brown{ - dir = 8 - }, -/obj/item/device/radio/intercom/entertainment{ - dir = 8; - pixel_x = 22 - }, -/obj/random_multi/single_item/runtime, -/turf/simulated/floor/carpet, -/area/crew_quarters/lounge) -"Fb" = ( -/obj/effect/landmark{ - name = "lightsout" - }, -/turf/simulated/floor/tiled, -/area/quartermaster/office) -"Fd" = ( -/obj/effect/floor_decal/corner/brown/half{ - dir = 4 - }, -/obj/machinery/requests_console{ - department = "Cargo Bay"; - departmentType = 2; - pixel_x = 30 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/disposalpipe/segment, -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 1; - icon_state = "warningcorner" - }, -/turf/simulated/floor/tiled/monotile, -/area/quartermaster/storage/upper) -"Fe" = ( -/obj/effect/floor_decal/industrial/outline/grey, -/obj/machinery/light{ - dir = 4; - icon_state = "tube1" - }, -/obj/machinery/suit_storage_unit/security/alt, -/turf/simulated/floor/tiled/dark/monotile, -/area/eva) -"Fi" = ( -/obj/structure/reagent_dispensers/watertank, -/obj/effect/floor_decal/industrial/outline/blue, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/waterstore) -"Fj" = ( -/obj/structure/table/rack{ - dir = 8 - }, -/obj/item/storage/toolbox/electrical{ - pixel_x = 1; - pixel_y = -1 - }, -/obj/item/storage/toolbox/mechanical{ - pixel_x = -2; - pixel_y = -1 - }, -/obj/item/device/multitool, -/obj/item/clothing/head/welding, -/obj/item/storage/belt/utility, -/obj/machinery/atmospherics/pipe/simple/hidden, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 4 - }, -/obj/machinery/alarm{ - dir = 4; - pixel_x = -22 - }, -/obj/item/inflatable_dispenser, -/turf/simulated/floor/tiled/monotile, -/area/eva) -"Fk" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 4 - }, -/obj/machinery/newscaster{ - pixel_x = -32 - }, -/obj/machinery/light{ - dir = 8 - }, -/obj/effect/floor_decal/corner/green/half{ - dir = 8 - }, -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 8; - icon_state = "warningcorner" - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/hallway/primary/fourthdeck/aft) -"Fl" = ( -/obj/structure/table/rack, -/obj/random/tech_supply, -/obj/random/tech_supply, -/obj/effect/floor_decal/techfloor{ - dir = 1 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/storage/auxillary/port) -"Fm" = ( -/obj/structure/closet/crate/freezer, -/obj/random/medical, -/obj/effect/floor_decal/techfloor{ - dir = 1 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/storage/auxillary/port) -"Fn" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 4 - }, -/obj/machinery/alarm{ - dir = 4; - pixel_x = -25 - }, -/obj/structure/closet/secure_closet/crew, -/obj/random/maintenance/solgov/clean, -/obj/random/maintenance/solgov/clean, -/obj/random/maintenance/solgov/clean, -/obj/effect/floor_decal/corner/red{ - dir = 8 - }, -/obj/effect/floor_decal/corner/white{ - dir = 1 - }, -/turf/simulated/floor/tiled/steel_grid, -/area/hallway/primary/fourthdeck/fore) -"Fo" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/simple/hidden, -/obj/effect/catwalk_plated, -/obj/machinery/rotating_alarm/security_alarm{ - dir = 8 - }, -/turf/simulated/floor/plating, -/area/hallway/primary/fourthdeck/fore) -"Fp" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/turf/simulated/floor/plating, -/area/vacant/monitoring) -"Fq" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/plating, -/area/vacant/monitoring) -"Fr" = ( -/obj/random/obstruction, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/plating, -/area/vacant/monitoring) -"Fs" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/railing/mapped, -/turf/simulated/floor/plating, -/area/maintenance/fourthdeck/foreport) -"Ft" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/structure/railing/mapped{ - dir = 4; - icon_state = "railing0-1" - }, -/obj/structure/railing/mapped, -/turf/simulated/floor/plating, -/area/maintenance/fourthdeck/foreport) -"Fv" = ( -/obj/machinery/atmospherics/unary/tank/air{ - dir = 4 - }, -/turf/simulated/floor/tiled/white/monotile, -/area/shuttle/escape_pod8/station) -"Fw" = ( -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 10 - }, -/turf/simulated/floor/tiled/white/monotile, -/area/shuttle/escape_pod8/station) -"Fx" = ( -/obj/machinery/sleeper{ - dir = 8 - }, -/obj/machinery/vending/wallmed1{ - dir = 8; - name = "Emergency NanoMed"; - pixel_x = 28 - }, -/turf/simulated/floor/tiled/white/monotile, -/area/shuttle/escape_pod8/station) -"Fy" = ( -/obj/machinery/sleeper{ - dir = 4 - }, -/obj/machinery/vending/wallmed1{ - dir = 4; - name = "Emergency NanoMed"; - pixel_x = -30 - }, -/turf/simulated/floor/tiled/white/monotile, -/area/shuttle/escape_pod9/station) -"Fz" = ( -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 6 - }, -/turf/simulated/floor/tiled/white/monotile, -/area/shuttle/escape_pod9/station) -"FA" = ( -/obj/machinery/atmospherics/unary/tank/air{ - dir = 8 - }, -/turf/simulated/floor/tiled/white/monotile, -/area/shuttle/escape_pod9/station) -"FB" = ( -/obj/structure/bed/chair/comfy/brown{ - dir = 1 - }, -/turf/simulated/floor/carpet, -/area/crew_quarters/lounge) -"FD" = ( -/obj/machinery/hologram/holopad, -/turf/simulated/floor/carpet, -/area/crew_quarters/lounge) -"FI" = ( -/obj/effect/floor_decal/spline/fancy/wood{ - dir = 8 - }, -/obj/machinery/vending/snack{ - dir = 8 - }, -/turf/simulated/floor/wood/walnut, -/area/crew_quarters/lounge) -"FK" = ( -/obj/effect/wallframe_spawn/reinforced, -/turf/simulated/floor/plating, -/area/quartermaster/sorting) -"FL" = ( -/obj/effect/floor_decal/corner/brown/half{ - dir = 8 - }, -/obj/machinery/papershredder, -/turf/simulated/floor/tiled/monotile, -/area/quartermaster/office) -"FM" = ( -/obj/effect/floor_decal/corner/brown{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/disposalpipe/segment, -/obj/structure/cable/green{ - d2 = 2; - icon_state = "0-2" - }, -/obj/machinery/power/apc{ - dir = 4; - name = "east bump"; - pixel_x = 24 - }, -/turf/simulated/floor/tiled, -/area/quartermaster/storage/upper) -"FS" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden, -/obj/effect/floor_decal/industrial/warning/corner, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/tiled/dark/monotile, -/area/hallway/primary/fourthdeck/aft) -"FV" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/catwalk, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/plating, -/area/maintenance/fourthdeck/starboard) -"FY" = ( -/obj/structure/closet/crate, -/obj/random/plushie, -/turf/simulated/floor/tiled/techfloor/grid, -/area/storage/auxillary/port) -"FZ" = ( -/obj/structure/table/standard{ - name = "plastic table frame" - }, -/obj/machinery/camera/network/fourth_deck{ - c_tag = "Fourth Deck - Fore Port Docking Access"; - dir = 4 - }, -/obj/effect/floor_decal/corner/red{ - dir = 8 - }, -/obj/effect/floor_decal/corner/white{ - dir = 1 - }, -/turf/simulated/floor/tiled/steel_grid, -/area/hallway/primary/fourthdeck/fore) -"Ga" = ( -/turf/simulated/open, -/area/quartermaster/hangar/catwalks_starboard) -"Gb" = ( -/obj/random/trash, -/turf/simulated/floor/plating, -/area/vacant/monitoring) -"Gc" = ( -/obj/structure/bed/chair/office/dark{ - dir = 8 - }, -/turf/simulated/floor/plating, -/area/vacant/monitoring) -"Gd" = ( -/obj/random/technology_scanner, -/turf/simulated/floor/plating, -/area/vacant/monitoring) -"Ge" = ( -/obj/structure/table/steel, -/obj/machinery/cell_charger, -/obj/random/powercell, -/obj/random/powercell, -/obj/random/powercell, -/turf/simulated/floor/plating, -/area/vacant/monitoring) -"Gf" = ( -/obj/random/junk, -/turf/simulated/floor/plating, -/area/maintenance/fourthdeck/foreport) -"Gg" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden{ - dir = 4 - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/fourthdeck/foreport) -"Gh" = ( -/obj/effect/floor_decal/industrial/warning, -/obj/machinery/light/small{ - dir = 8 - }, -/turf/simulated/floor/tiled/white/monotile, -/area/shuttle/escape_pod8/station) -"Gi" = ( -/obj/effect/floor_decal/industrial/warning, -/obj/machinery/atmospherics/pipe/simple/hidden, -/turf/simulated/floor/tiled/white/monotile, -/area/shuttle/escape_pod8/station) -"Gj" = ( -/obj/effect/floor_decal/industrial/warning, -/obj/structure/table/standard{ - name = "plastic table frame" - }, -/obj/machinery/light/small{ - dir = 4 - }, -/obj/random/firstaid, -/turf/simulated/floor/tiled/white/monotile, -/area/shuttle/escape_pod8/station) -"Gl" = ( -/obj/structure/catwalk, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/plating, -/area/maintenance/fourthdeck/foreport) -"Gm" = ( -/obj/effect/floor_decal/industrial/warning, -/obj/structure/table/standard{ - name = "plastic table frame" - }, -/obj/machinery/light/small{ - dir = 8 - }, -/obj/random/firstaid, -/turf/simulated/floor/tiled/white/monotile, -/area/shuttle/escape_pod9/station) -"Gn" = ( -/obj/effect/floor_decal/industrial/warning, -/obj/machinery/atmospherics/pipe/simple/hidden, -/turf/simulated/floor/tiled/white/monotile, -/area/shuttle/escape_pod9/station) -"Go" = ( -/obj/effect/floor_decal/industrial/warning, -/obj/machinery/light/small{ - dir = 4 - }, -/turf/simulated/floor/tiled/white/monotile, -/area/shuttle/escape_pod9/station) -"Gp" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/simulated/floor/carpet, -/area/crew_quarters/lounge) -"Gq" = ( -/obj/effect/floor_decal/spline/fancy/wood{ - dir = 1 - }, -/obj/machinery/light/small, -/obj/structure/reagent_dispensers/water_cooler{ - dir = 1 - }, -/turf/simulated/floor/wood/walnut, -/area/crew_quarters/lounge) -"Gr" = ( -/obj/machinery/power/apc{ - dir = 4; - name = "east bump"; - pixel_x = 24 - }, -/obj/structure/cable/green{ - d2 = 8; - icon_state = "0-8" - }, -/obj/effect/floor_decal/spline/fancy/wood{ - dir = 8 - }, -/obj/machinery/vending/cigarette{ - dir = 8 - }, -/turf/simulated/floor/wood/walnut, -/area/crew_quarters/lounge) -"Gt" = ( -/obj/effect/shuttle_landmark/scavver_gantry/torch, -/turf/space, -/area/space) -"Gu" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 4; - icon_state = "warning" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden, -/obj/machinery/embedded_controller/radio/simple_docking_controller/escape_pod_berth{ - dir = 8; - does_spin = null; - frequency = 1380; - id_tag = "escape_pod_9_berth"; - name = "escape pod four berth controller"; - pixel_x = 24; - pixel_y = -24; - tag_door = "escape_pod_9_berth_hatch" - }, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/tiled/dark, -/area/hallway/primary/fourthdeck/aft) -"Gv" = ( -/obj/machinery/door/airlock/external/escapepod{ - icon_state = "closed"; - id_tag = "escape_pod_9_berth_hatch"; - name = "Escape Pod Four" - }, -/obj/machinery/shield_diffuser, -/turf/simulated/floor/plating, -/area/hallway/primary/fourthdeck/aft) -"Gw" = ( -/obj/structure/bed/chair/shuttle{ - dir = 4 - }, -/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{ - dir = 4; - id_tag = "escape_pod_8_pump" - }, -/turf/simulated/floor/tiled/monotile, -/area/shuttle/escape_pod8/station) -"GB" = ( -/obj/machinery/atmospherics/pipe/simple/hidden, -/obj/machinery/embedded_controller/radio/airlock/docking_port{ - dir = 8; - display_name = "Port Dock A"; - frequency = 1380; - id_tag = "skipjack_shuttle_dock_airlock"; - pixel_x = 24; - req_access = list(list("ACCESS_EXTERNAL","ACCESS_TORCH_CREW")); - tag_airpump = "skipjack_shuttle_dock_pump"; - tag_chamber_sensor = "skipjack_shuttle_dock_sensor"; - tag_exterior_door = "skipjack_shuttle_dock_outer"; - tag_interior_door = "skipjack_shuttle_dock_inner" - }, -/turf/simulated/floor/tiled/monotile, -/area/hallway/primary/fourthdeck/fore) -"GC" = ( -/obj/machinery/constructable_frame/computerframe, -/turf/simulated/floor/plating, -/area/vacant/monitoring) -"GD" = ( -/obj/structure/table/steel, -/obj/machinery/recharger, -/turf/simulated/floor/plating, -/area/vacant/monitoring) -"GE" = ( -/obj/structure/bed/chair/office/dark, -/turf/simulated/floor/plating, -/area/vacant/monitoring) -"GF" = ( -/obj/structure/table/steel, -/obj/random/junk, -/turf/simulated/floor/plating, -/area/vacant/monitoring) -"GG" = ( -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/portable_atmospherics/canister/air/airlock, -/obj/machinery/atmospherics/portables_connector{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/fourthdeck/foreport) -"GI" = ( -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 9 - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/fourthdeck/foreport) -"GJ" = ( -/obj/structure/bed/chair/shuttle{ - dir = 4 - }, -/turf/simulated/floor/tiled/monotile, -/area/shuttle/escape_pod8/station) -"GK" = ( -/turf/simulated/floor/tiled/monotile, -/area/shuttle/escape_pod8/station) -"GL" = ( -/obj/machinery/door/airlock/external{ - frequency = 1380; - icon_state = "closed"; - id_tag = "escape_pod_8_hatch"; - locked = 1; - name = "Escape Pod Three Hatch" - }, -/turf/simulated/floor/tiled/monotile, -/area/shuttle/escape_pod8/station) -"GQ" = ( -/obj/machinery/door/airlock/external{ - frequency = 1380; - icon_state = "closed"; - id_tag = "escape_pod_9_hatch"; - locked = 1; - name = "Escape Pod Four Hatch" - }, -/turf/simulated/floor/tiled/monotile, -/area/shuttle/escape_pod9/station) -"GR" = ( -/turf/simulated/floor/tiled/monotile, -/area/shuttle/escape_pod9/station) -"GS" = ( -/obj/structure/bed/chair/shuttle{ - dir = 8 - }, -/turf/simulated/floor/tiled/monotile, -/area/shuttle/escape_pod9/station) -"GT" = ( -/turf/simulated/wall/r_wall/hull, -/area/maintenance/fourthdeck/port) -"GU" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, -/obj/effect/catwalk_plated, -/turf/simulated/floor/plating, -/area/hallway/primary/fourthdeck/aft) -"GW" = ( -/turf/simulated/wall/prepainted, -/area/maintenance/fourthdeck/port) -"GX" = ( -/obj/machinery/atmospherics/pipe/simple/hidden, -/turf/simulated/floor/tiled/monotile, -/area/shuttle/escape_pod8/station) -"GY" = ( -/obj/effect/floor_decal/spline/fancy/wood{ - dir = 1 - }, -/obj/item/storage/box/cups, -/obj/structure/table/woodentable, -/turf/simulated/floor/wood/walnut, -/area/crew_quarters/lounge) -"GZ" = ( -/obj/machinery/vending/games{ - dir = 8 - }, -/turf/simulated/floor/wood/walnut, -/area/crew_quarters/lounge) -"Hd" = ( -/obj/machinery/door/airlock/hatch/maintenance, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/steel_ridged, -/area/hallway/primary/fourthdeck/aft) -"Hg" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/simple/hidden, -/obj/machinery/light{ - dir = 4 - }, -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 4 - }, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/tiled/dark/monotile, -/area/hallway/primary/fourthdeck/aft) -"Hh" = ( -/obj/effect/floor_decal/scglogo{ - icon_state = "bottom-center" - }, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 1 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/fourthdeck/center) -"Hm" = ( -/obj/structure/cable{ - d1 = 16; - d2 = 0; - icon_state = "16-0" - }, -/obj/structure/cable, -/obj/effect/floor_decal/industrial/warning{ - dir = 9; - icon_state = "warning" - }, -/obj/structure/railing/mapped{ - dir = 8; - icon_state = "railing0-1" - }, -/turf/simulated/floor/plating, -/area/maintenance/fourthdeck/aft) -"Hn" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/effect/floor_decal/corner/green{ - dir = 5 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/fourthdeck/aft) -"Ho" = ( -/obj/machinery/atmospherics/pipe/simple/hidden, -/obj/machinery/door/airlock/external{ - frequency = 1380; - icon_state = "closed"; - id_tag = "skipjack_shuttle_dock_inner"; - locked = 1; - name = "Docking Port Airlock" - }, -/turf/simulated/floor/plating, -/area/hallway/primary/fourthdeck/fore) -"Hp" = ( -/turf/simulated/wall/r_wall/hull, -/area/vacant/monitoring) -"Hr" = ( -/obj/structure/bed/chair/shuttle{ - dir = 8 - }, -/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{ - dir = 8; - id_tag = "escape_pod_8_pump" - }, -/turf/simulated/floor/tiled/monotile, -/area/shuttle/escape_pod8/station) -"Hu" = ( -/obj/structure/bed/chair/shuttle{ - dir = 4 - }, -/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{ - dir = 4; - id_tag = "escape_pod_9_pump" - }, -/turf/simulated/floor/tiled/monotile, -/area/shuttle/escape_pod9/station) -"Hv" = ( -/obj/structure/stairs/north, -/obj/structure/railing/mapped{ - dir = 4; - icon_state = "railing0-1" - }, -/turf/simulated/floor/plating, -/area/crew_quarters/lounge) -"Hw" = ( -/obj/effect/floor_decal/corner/brown{ - dir = 4 - }, -/obj/machinery/light{ - dir = 1 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/fourthdeck/center) -"HB" = ( -/obj/machinery/door/airlock/maintenance{ - name = "Lounge Maintenance" - }, -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/tiled/techfloor/grid, -/area/crew_quarters/lounge) -"HE" = ( -/obj/effect/wallframe_spawn/reinforced/no_grille, -/obj/machinery/door/firedoor, -/turf/simulated/floor/plating, -/area/hallway/primary/fourthdeck/center) -"HF" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/obj/structure/disposalpipe/segment{ - dir = 8; - icon_state = "pipe-c" - }, -/obj/structure/catwalk, -/obj/structure/cable{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/turf/simulated/floor/plating, -/area/maintenance/fourthdeck/starboard) -"HL" = ( -/obj/effect/floor_decal/techfloor{ - dir = 8 - }, -/obj/structure/railing/mapped{ - dir = 8; - icon_state = "railing0-1" - }, -/obj/effect/floor_decal/corner/brown{ - dir = 4 - }, -/obj/machinery/computer/shuttle_control/lift/cargo, -/turf/simulated/floor/tiled/steel_grid, -/area/turbolift/cargo_lift) -"HP" = ( -/obj/machinery/camera/network/fourth_deck{ - c_tag = "Fourth Deck - Adherent Maintenance"; - dir = 8 - }, -/obj/structure/sign/warning/caution{ - dir = 8; - pixel_x = 32 - }, -/turf/simulated/floor/crystal, -/area/crew_quarters/adherent) -"HQ" = ( -/obj/structure/catwalk, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/disposalpipe/segment{ - dir = 1; - icon_state = "pipe-c" - }, -/turf/simulated/floor/plating, -/area/maintenance/fourthdeck/aft) -"HR" = ( -/obj/effect/floor_decal/industrial/warning/full, -/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{ - dir = 1; - id_tag = "skipjack_shuttle_dock_pump" - }, -/obj/machinery/airlock_sensor{ - frequency = 1380; - id_tag = "skipjack_shuttle_dock_sensor"; - pixel_x = -24 - }, -/obj/machinery/light/small{ - dir = 4 - }, -/obj/item/device/radio/intercom/hailing{ - dir = 8; - pixel_x = 24 - }, -/turf/simulated/floor/plating, -/area/hallway/primary/fourthdeck/fore) -"HS" = ( -/turf/simulated/floor/tiled/dark, -/area/eva) -"HU" = ( -/obj/machinery/status_display{ - pixel_x = 32 - }, -/obj/structure/bed/chair/shuttle{ - dir = 8 - }, -/turf/simulated/floor/tiled/monotile, -/area/shuttle/escape_pod8/station) -"HV" = ( -/obj/structure/catwalk, -/turf/simulated/open, -/area/quartermaster/storage/upper) -"HW" = ( -/obj/structure/hygiene/shower{ - dir = 8 - }, -/turf/simulated/floor/tiled/freezer, -/area/crew_quarters/laundry) -"HX" = ( -/obj/machinery/status_display{ - pixel_x = -32 - }, -/obj/structure/bed/chair/shuttle{ - dir = 4 - }, -/turf/simulated/floor/tiled/monotile, -/area/shuttle/escape_pod9/station) -"Ib" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/fourthdeck/port) -"Ic" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, -/obj/structure/disposalpipe/segment{ - dir = 8; - icon_state = "pipe-c" - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/fourthdeck/port) -"Id" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/fourthdeck/port) -"Ie" = ( -/obj/machinery/alarm{ - pixel_y = 23; - req_access = list(list("ACCESS_ENGINE_EQUIP","ACCESS_ATMOS")) - }, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/fourthdeck/port) -"If" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/catwalk, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/maintenance/fourthdeck/port) -"Ii" = ( -/obj/machinery/atmospherics/pipe/simple/hidden, -/turf/simulated/floor/tiled/monotile, -/area/shuttle/escape_pod6/station) -"Il" = ( -/obj/effect/floor_decal/techfloor, -/obj/effect/floor_decal/techfloor{ - dir = 1 - }, -/obj/machinery/light/small/red{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/hallway/primary/fourthdeck/aft) -"Im" = ( -/obj/structure/hygiene/sink{ - dir = 1; - pixel_y = 16 - }, -/obj/machinery/light/small{ - dir = 1 - }, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/waterstore) -"In" = ( -/obj/structure/reagent_dispensers/fueltank, -/obj/effect/floor_decal/industrial/warning{ - dir = 1 - }, -/turf/simulated/floor/plating, -/area/maintenance/fourthdeck/starboard) -"Io" = ( -/obj/machinery/door/airlock/external{ - frequency = 1380; - icon_state = "closed"; - id_tag = "skipjack_shuttle_dock_outer"; - locked = 1; - name = "Docking Port Airlock" - }, -/obj/machinery/shield_diffuser, -/turf/simulated/floor/plating, -/area/hallway/primary/fourthdeck/fore) -"Iq" = ( -/obj/effect/floor_decal/corner/red{ - dir = 6 - }, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 1 - }, -/turf/simulated/floor/tiled/dark, -/area/eva) -"Ir" = ( -/obj/machinery/light/small{ - dir = 8 - }, -/obj/structure/bed/chair/shuttle{ - dir = 4 - }, -/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{ - dir = 4; - id_tag = "escape_pod_8_pump" - }, -/turf/simulated/floor/tiled/monotile, -/area/shuttle/escape_pod8/station) -"Is" = ( -/obj/machinery/light/small{ - dir = 4 - }, -/obj/structure/bed/chair/shuttle{ - dir = 8 - }, -/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{ - dir = 8; - id_tag = "escape_pod_8_pump" - }, -/turf/simulated/floor/tiled/monotile, -/area/shuttle/escape_pod8/station) -"It" = ( -/obj/machinery/light/small{ - dir = 8 - }, -/obj/structure/bed/chair/shuttle{ - dir = 4 - }, -/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{ - dir = 4; - id_tag = "escape_pod_9_pump" - }, -/turf/simulated/floor/tiled/monotile, -/area/shuttle/escape_pod9/station) -"Iu" = ( -/obj/machinery/light/small{ - dir = 4 - }, -/obj/structure/bed/chair/shuttle{ - dir = 8 - }, -/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{ - dir = 8; - id_tag = "escape_pod_9_pump" - }, -/turf/simulated/floor/tiled/monotile, -/area/shuttle/escape_pod9/station) -"Iv" = ( -/obj/structure/catwalk, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 8 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 8 - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/plating, -/area/maintenance/fourthdeck/port) -"Iw" = ( -/obj/machinery/atmospherics/pipe/simple/hidden, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 - }, -/obj/effect/floor_decal/corner/blue{ - dir = 9 - }, -/turf/simulated/floor/tiled/dark, -/area/eva) -"Ix" = ( -/obj/machinery/cryopod{ - dir = 4 - }, -/obj/machinery/computer/cryopod{ - pixel_x = -32 - }, -/turf/simulated/floor/tiled/monotile, -/area/shuttle/escape_pod8/station) -"IB" = ( -/obj/effect/catwalk_plated/dark, -/obj/machinery/atmospherics/pipe/simple/hidden, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/plating, -/area/hallway/primary/fourthdeck/aft) -"IC" = ( -/obj/structure/adherent_bath, -/obj/machinery/firealarm{ - dir = 1; - pixel_y = -24 - }, -/obj/machinery/light{ - dir = 4 - }, -/turf/simulated/floor/crystal, -/area/crew_quarters/adherent) -"IF" = ( -/obj/structure/bed/chair/office/light{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/quartermaster/office) -"II" = ( -/obj/effect/floor_decal/corner/brown/half{ - dir = 1 - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/structure/closet/firecloset, -/turf/simulated/floor/tiled/monotile, -/area/hallway/primary/fourthdeck/center) -"IL" = ( -/obj/structure/catwalk, -/obj/structure/cable/green{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/turf/simulated/floor/plating, -/area/maintenance/fourthdeck/foreport) -"IN" = ( -/obj/structure/catwalk, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/plating, -/area/maintenance/fourthdeck/foreport) -"IQ" = ( -/obj/machinery/atmospherics/portables_connector{ - dir = 1 - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/portable_atmospherics/canister/air/airlock, -/obj/machinery/light{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark, -/area/eva) -"IT" = ( -/obj/effect/wallframe_spawn/no_grille, -/turf/simulated/floor/plating, -/area/maintenance/fourthdeck/port) -"IX" = ( -/obj/structure/disposalpipe/trunk{ - dir = 8 - }, -/obj/machinery/disposal/deliveryChute{ - dir = 4 - }, -/obj/effect/floor_decal/industrial/hatch/yellow, -/turf/simulated/floor/plating, -/area/quartermaster/sorting) -"IY" = ( -/obj/machinery/disposal, -/obj/effect/floor_decal/spline/fancy/wood{ - dir = 1 - }, -/obj/structure/disposalpipe/trunk{ - dir = 1 - }, -/turf/simulated/floor/wood/walnut, -/area/crew_quarters/lounge) -"IZ" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 1 - }, -/turf/simulated/floor/plating, -/area/maintenance/fourthdeck/starboard) -"Jh" = ( -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled/monotile, -/area/eva) -"Ji" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 1; - icon_state = "warning" - }, -/obj/machinery/door/blast/regular/escape_pod, -/turf/simulated/floor/reinforced, -/area/maintenance/fourthdeck/aft) -"Jn" = ( -/obj/item/device/radio/intercom{ - dir = 1; - pixel_y = -28 - }, -/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{ - dir = 1; - id_tag = "eva_airlock_pump" - }, -/obj/effect/floor_decal/techfloor, -/turf/simulated/floor/tiled/techfloor/grid, -/area/eva) -"Jo" = ( -/obj/effect/floor_decal/spline/fancy/wood{ - dir = 1 - }, -/turf/simulated/floor/carpet, -/area/crew_quarters/lounge) -"Js" = ( -/obj/structure/catwalk, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/plating, -/area/maintenance/fourthdeck/port) -"Jx" = ( -/obj/machinery/light{ - dir = 8 - }, -/obj/effect/floor_decal/corner/white{ - dir = 1 - }, -/obj/effect/floor_decal/corner/red{ - dir = 8 - }, -/obj/structure/sign/warning/docking_area{ - name = "\improper ESCAPE POD LAUNCH PATHWAY"; - pixel_x = -32 - }, -/turf/simulated/floor/tiled/dark, -/area/hallway/primary/fourthdeck/aft) -"JA" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 4 - }, -/obj/effect/floor_decal/corner/green/three_quarters{ - dir = 8 - }, -/obj/machinery/light{ - dir = 8 - }, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/tiled/dark, -/area/hallway/primary/fourthdeck/aft) -"JB" = ( -/obj/structure/sign/warning/docking_area, -/turf/simulated/wall/r_wall/hull, -/area/maintenance/fourthdeck/foreport) -"JD" = ( -/obj/machinery/alarm{ - dir = 4; - pixel_x = -22 - }, -/obj/effect/floor_decal/industrial/outline/grey, -/obj/machinery/suit_storage_unit/standard_unit, -/turf/simulated/floor/tiled/dark/monotile, -/area/eva) -"JG" = ( -/obj/structure/table/woodentable, -/obj/item/storage/box/donut, -/turf/simulated/floor/carpet, -/area/crew_quarters/lounge) -"JI" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/railing/mapped{ - dir = 4; - icon_state = "railing0-1" - }, -/obj/structure/railing/mapped{ - dir = 1; - icon_state = "railing0-1" - }, -/turf/simulated/floor/plating, -/area/maintenance/fourthdeck/aft) -"JL" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/fourthdeck/port) -"JO" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/hatch/maintenance, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/hallway/primary/fourthdeck/aft) -"JP" = ( -/obj/effect/floor_decal/corner/red/half{ - dir = 8 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/embedded_controller/radio/airlock/docking_port{ - dir = 4; - display_name = "Port Dock C"; - frequency = 1331; - id_tag = "rescue_shuttle_dock_airlock"; - pixel_x = -24; - pixel_y = -32; - req_access = list(list("ACCESS_EXTERNAL","ACCESS_TORCH_CREW")); - tag_airpump = "rescue_shuttle_dock_pump"; - tag_chamber_sensor = "rescue_shuttle_dock_sensor"; - tag_exterior_door = "rescue_shuttle_dock_outer"; - tag_interior_door = "rescue_shuttle_dock_inner" - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/hallway/primary/fourthdeck/aft) -"JQ" = ( -/obj/machinery/atmospherics/pipe/simple/hidden, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 8; - icon_state = "pipe-c" - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/hallway/primary/fourthdeck/aft) -"JR" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/hatch/maintenance, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/hallway/primary/fourthdeck/aft) -"JS" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/fourthdeck/aft) -"JU" = ( -/obj/effect/shuttle_landmark/escape_pod/start/pod8, -/obj/effect/wallframe_spawn/reinforced/titanium, -/turf/simulated/floor/plating, -/area/shuttle/escape_pod8/station) -"JX" = ( -/obj/effect/shuttle_landmark/escape_pod/start/pod9, -/obj/effect/wallframe_spawn/reinforced/titanium, -/turf/simulated/floor/plating, -/area/shuttle/escape_pod9/station) -"JY" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/crew_quarters/commissary) -"Kb" = ( -/obj/structure/ladder/up, -/obj/effect/floor_decal/industrial/hatch/yellow, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/fourthdeck/port) -"Kc" = ( -/obj/effect/floor_decal/industrial/outline/grey, -/obj/structure/largecrate, -/obj/random/maintenance/solgov, -/obj/random/maintenance/solgov, -/obj/random/maintenance/solgov, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/fourthdeck/port) -"Kd" = ( -/obj/random/trash, -/turf/simulated/floor/plating, -/area/maintenance/fourthdeck/port) -"Ke" = ( -/obj/random/junk, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/fourthdeck/port) -"Kf" = ( -/obj/machinery/light/small{ - dir = 4 - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/fourthdeck/port) -"Kh" = ( -/obj/machinery/atmospherics/pipe/simple/hidden, -/obj/machinery/door/airlock/external{ - frequency = 1331; - icon_state = "closed"; - id_tag = "rescue_shuttle_dock_inner"; - locked = 1; - name = "Docking Port Airlock" - }, -/turf/simulated/floor/plating, -/area/hallway/primary/fourthdeck/aft) -"Ki" = ( -/obj/structure/table/rack{ - dir = 8 - }, -/obj/item/storage/box/lights/mixed, -/obj/machinery/light/small{ - dir = 8 - }, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/fourthdeck/aft) -"Kj" = ( -/obj/structure/ladder/up, -/obj/effect/floor_decal/corner/green{ - dir = 6 - }, -/obj/machinery/light{ - dir = 4 - }, -/obj/machinery/firealarm{ - dir = 1; - pixel_y = -24 - }, -/obj/machinery/rotating_alarm/security_alarm{ - dir = 8 - }, -/turf/simulated/floor/tiled/steel_grid, -/area/hallway/primary/fourthdeck/aft) -"Kk" = ( -/obj/effect/floor_decal/industrial/outline/grey, -/obj/machinery/suit_cycler/medical/alt, -/turf/simulated/floor/tiled/dark/monotile, -/area/eva) -"Kl" = ( -/obj/structure/sign/warning/docking_area, -/turf/simulated/wall/r_wall/hull, -/area/maintenance/fourthdeck/port) -"Kn" = ( -/obj/effect/shuttle_landmark/skipjack/dock, -/turf/space, -/area/space) -"Ko" = ( -/obj/effect/shuttle_landmark/ert/dock, -/obj/effect/shuttle_landmark/skrellscout/dock, -/turf/space, -/area/space) -"Kp" = ( -/obj/effect/shuttle_landmark/ert/deck5{ - name = "4th Deck, Fore Port" - }, -/turf/space, -/area/space) -"Kq" = ( -/obj/effect/landmark/test/space_turf, -/turf/space, -/area/space) -"Ks" = ( -/turf/simulated/floor/tiled/monotile, -/area/crew_quarters/commissary) -"Kt" = ( -/obj/structure/railing/mapped, -/turf/simulated/open, -/area/quartermaster/expedition/storage) -"Ku" = ( -/obj/effect/floor_decal/corner/brown{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/crew_quarters/commissary) -"Kw" = ( -/obj/structure/catwalk, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/obj/structure/disposalpipe/segment{ - dir = 1; - icon_state = "pipe-c" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/turf/simulated/floor/plating, -/area/maintenance/fourthdeck/port) -"Kx" = ( -/obj/structure/table/glass, -/obj/machinery/alarm{ - dir = 1; - pixel_y = -24 - }, -/turf/simulated/floor/crystal, -/area/crew_quarters/adherent) -"Kz" = ( -/obj/structure/catwalk, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/plating, -/area/maintenance/fourthdeck/port) -"KA" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/fourthdeck/aft) -"KB" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden, -/obj/effect/floor_decal/corner/green{ - dir = 10 - }, -/obj/structure/disposalpipe/segment, -/obj/structure/cable{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/fourthdeck/aft) -"KD" = ( -/obj/machinery/fabricator, -/obj/effect/floor_decal/corner/brown/half, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, -/turf/simulated/floor/tiled/monotile, -/area/quartermaster/office) -"KE" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/mining{ - name = "Mail Room" - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/tiled/steel_ridged, -/area/quartermaster/sorting) -"KF" = ( -/obj/effect/wallframe_spawn/no_grille, -/turf/simulated/floor/plating, -/area/quartermaster/expedition/storage) -"KG" = ( -/obj/effect/floor_decal/corner/brown{ - dir = 10 - }, -/obj/structure/disposalpipe/segment, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/fourthdeck/aft) -"KH" = ( -/obj/machinery/door/blast/shutters{ - density = 0; - dir = 2; - icon_state = "shutter0"; - id_tag = "hangar_checkpoint_shutters"; - name = "Hangar Deck Checkpoint Shutters"; - opacity = 0 - }, -/obj/structure/cable/green{ - d2 = 4; - icon_state = "0-4" - }, -/obj/effect/wallframe_spawn/reinforced, -/turf/simulated/floor/plating, -/area/security/hangcheck) -"KI" = ( -/turf/simulated/floor/tiled/techfloor, -/area/quartermaster/expedition/storage) -"KL" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 5 - }, -/turf/simulated/floor/plating, -/area/maintenance/fourthdeck/starboard) -"KN" = ( -/obj/structure/reagent_dispensers/fueltank, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/floor/tiled/techmaint, -/area/maintenance/fourthdeck/forestarboard) -"KO" = ( -/obj/machinery/recharge_station, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/alarm{ - pixel_y = 24 - }, -/turf/simulated/floor/bluegrid, -/area/maintenance/fourthdeck/starboard) -"KQ" = ( -/obj/structure/disposalpipe/sortjunction{ - dir = 8; - name = "Sorting Office"; - sort_type = "Sorting Office" - }, -/obj/effect/floor_decal/industrial/warning, -/obj/effect/floor_decal/industrial/warning{ - dir = 1; - icon_state = "warning" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/dark, -/area/quartermaster/sorting) -"KR" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/effect/floor_decal/corner/red{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/fourthdeck/fore) -"KU" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 4 - }, -/obj/effect/floor_decal/corner/green/half{ - dir = 8 - }, -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 1 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/hallway/primary/fourthdeck/aft) -"KW" = ( -/turf/simulated/floor/tiled/dark, -/area/command/captainmess) -"KZ" = ( -/obj/machinery/door/airlock/mining{ - name = "Deck Chief" - }, -/obj/machinery/door/firedoor, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/tiled/steel_ridged, -/area/quartermaster/deckchief) -"La" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/quartermaster/deckchief) -"Lb" = ( -/obj/random/obstruction, -/turf/simulated/floor/plating, -/area/maintenance/fourthdeck/foreport) -"Le" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/floor_decal/corner/red, -/obj/effect/floor_decal/corner/white{ - dir = 8 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/fourthdeck/fore) -"Lf" = ( -/obj/structure/railing/mapped{ - dir = 1; - icon_state = "railing0-1" - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/plating, -/area/maintenance/waterstore) -"Lh" = ( -/obj/structure/bed/chair/padded/purple{ - dir = 1 - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/tiled, -/area/command/pathfinder) -"Li" = ( -/obj/structure/bookcase, -/obj/item/book/manual/medical_cloning, -/obj/item/book/manual/medical_diagnostics_manual, -/obj/item/book/manual/nuclear, -/obj/item/book/manual/detective, -/turf/simulated/floor/wood, -/area/crew_quarters/lounge) -"Lj" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/fourthdeck/starboard) -"Lk" = ( -/obj/structure/railing/mapped{ - dir = 4; - icon_state = "railing0-1" - }, -/turf/simulated/open, -/area/quartermaster/hangar/catwalks_port) -"Lm" = ( -/obj/structure/catwalk, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/maintenance/fourthdeck/starboard) -"Lo" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 4; - level = 2 - }, -/turf/simulated/floor/tiled, -/area/quartermaster/office) -"Lq" = ( -/obj/effect/floor_decal/corner/brown/half{ - dir = 8 - }, -/obj/structure/table/standard{ - name = "plastic table frame" - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/item/folder/red{ - pixel_x = -3 - }, -/obj/item/folder/blue, -/turf/simulated/floor/tiled/monotile, -/area/quartermaster/office) -"Lu" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 4 - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/fourthdeck/forestarboard) -"Lw" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/waterstore) -"Lx" = ( -/obj/effect/floor_decal/corner/brown/half, -/obj/machinery/photocopier, -/obj/machinery/power/apc{ - name = "south bump"; - pixel_y = -24 - }, -/obj/structure/cable/green{ - d2 = 8; - icon_state = "0-8" - }, -/turf/simulated/floor/tiled/monotile, -/area/quartermaster/deckchief) -"Lz" = ( -/turf/simulated/wall/r_wall/prepainted, -/area/quartermaster/deckchief) -"LA" = ( -/turf/simulated/wall/r_wall/hull, -/area/hallway/primary/fourthdeck/aft) -"LB" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - level = 2 - }, -/turf/simulated/floor/tiled, -/area/quartermaster/storage/upper) -"LC" = ( -/obj/effect/floor_decal/industrial/outline/grey, -/obj/structure/table/rack, -/obj/random/tech_supply, -/obj/random/tech_supply, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/fourthdeck/port) -"LD" = ( -/obj/machinery/door/airlock/external{ - frequency = 1380; - icon_state = "closed"; - id_tag = "eva_airlock_inner"; - locked = 1; - name = "EVA Internal Access" - }, -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/eva) -"LG" = ( -/turf/simulated/open, -/area/maintenance/fourthdeck/port) -"LI" = ( -/obj/machinery/light, -/obj/effect/floor_decal/corner/brown{ - dir = 10 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/fourthdeck/center) -"LK" = ( -/obj/structure/catwalk, -/obj/structure/cable/green{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 6 - }, -/obj/structure/disposalpipe/segment{ - dir = 4; - icon_state = "pipe-c" - }, -/turf/simulated/floor/plating, -/area/maintenance/fourthdeck/forestarboard) -"LM" = ( -/obj/machinery/recharge_station, -/obj/machinery/light/small{ - dir = 1 - }, -/turf/simulated/floor/bluegrid, -/area/maintenance/fourthdeck/starboard) -"LN" = ( -/obj/effect/floor_decal/industrial/hatch/yellow, -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/turf/simulated/floor/tiled/dark/monotile, -/area/quartermaster/sorting) -"LO" = ( -/obj/structure/railing/mapped{ - dir = 1; - icon_state = "railing0-1" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/meter, -/turf/simulated/floor/plating, -/area/maintenance/fourthdeck/foreport) -"LQ" = ( -/obj/structure/table/marble, -/obj/item/reagent_containers/food/drinks/teapot, -/turf/simulated/floor/tiled/dark/monotile, -/area/command/captainmess) -"LS" = ( -/obj/structure/catwalk, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/turf/simulated/floor/plating, -/area/maintenance/fourthdeck/aft) -"LT" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 4 - }, -/obj/effect/floor_decal/industrial/outline/grey, -/obj/machinery/suit_storage_unit/standard_unit, -/turf/simulated/floor/tiled/dark/monotile, -/area/eva) -"LU" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 4 - }, -/obj/machinery/newscaster{ - pixel_x = -32 - }, -/obj/machinery/light{ - dir = 8 - }, -/obj/effect/floor_decal/corner/green/half{ - dir = 8 - }, -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 1; - icon_state = "warningcorner" - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/hallway/primary/fourthdeck/aft) -"LV" = ( -/obj/random/torchcloset, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/fourthdeck/starboard) -"LW" = ( -/obj/machinery/atmospherics/binary/pump/on{ - dir = 8; - target_pressure = 200 - }, -/turf/simulated/floor/tiled, -/area/maintenance/fourthdeck/forestarboard) -"LZ" = ( -/obj/structure/table/rack, -/obj/random/single/lighter, -/obj/machinery/newscaster{ - pixel_y = 32 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/crew_quarters/commissary) -"Ma" = ( -/obj/effect/floor_decal/spline/fancy/wood{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/wood/walnut, -/area/crew_quarters/lounge) -"Mb" = ( -/obj/effect/floor_decal/industrial/outline/grey, -/obj/structure/table/standard{ - name = "plastic table frame" - }, -/turf/simulated/floor/tiled/techmaint, -/area/quartermaster/hangar/catwalks_starboard) -"Mc" = ( -/obj/structure/sign/warning/docking_area, -/turf/simulated/wall/r_wall/hull, -/area/eva) -"Me" = ( -/turf/simulated/floor/tiled, -/area/quartermaster/storage/upper) -"Mf" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/fourthdeck/fore) -"Mh" = ( -/obj/structure/catwalk, -/turf/simulated/open, -/area/quartermaster/expedition/storage) -"Mi" = ( -/obj/effect/floor_decal/corner/paleblue{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 - }, -/turf/simulated/floor/tiled/dark, -/area/eva) -"Mk" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 1; - icon_state = "warning" - }, -/obj/structure/catwalk, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/turf/simulated/floor/plating, -/area/maintenance/fourthdeck/aft) -"Ml" = ( -/obj/machinery/light/small, -/turf/simulated/floor/wood/walnut, -/area/crew_quarters/lounge) -"Mo" = ( -/obj/effect/wallframe_spawn/no_grille, -/obj/machinery/door/firedoor, -/turf/simulated/floor/plating, -/area/crew_quarters/adherent) -"Mp" = ( -/turf/simulated/wall/prepainted, -/area/command/captainmess) -"Mq" = ( -/obj/structure/railing/mapped{ - dir = 8; - icon_state = "railing0-1" - }, -/turf/simulated/open, -/area/maintenance/fourthdeck/port) -"Mr" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/crew_quarters/commissary) -"Ms" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 10 - }, -/obj/machinery/airlock_sensor{ - frequency = 1331; - id_tag = "rescue_shuttle_dock_sensor"; - pixel_x = -28; - pixel_y = 6 - }, -/turf/simulated/floor/plating, -/area/hallway/primary/fourthdeck/aft) -"Mt" = ( -/obj/structure/railing/mapped, -/obj/structure/railing/mapped{ - dir = 8; - icon_state = "railing0-1" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/maintenance/fourthdeck/forestarboard) -"Mu" = ( -/obj/effect/floor_decal/spline/fancy/wood{ - dir = 1 - }, -/obj/machinery/libraryscanner, -/turf/simulated/floor/wood/walnut, -/area/crew_quarters/lounge) -"Mv" = ( -/obj/structure/railing/mapped{ - dir = 1; - icon_state = "railing0-1" - }, -/obj/machinery/atmospherics/valve/shutoff/supply{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/maintenance/fourthdeck/forestarboard) -"Mw" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 1; - icon_state = "warning" - }, -/obj/structure/catwalk, -/obj/structure/cable/green{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, -/turf/simulated/floor/plating, -/area/maintenance/fourthdeck/aft) -"Mx" = ( -/obj/machinery/light{ - dir = 8 - }, -/obj/effect/floor_decal/corner/red{ - dir = 1 - }, -/obj/effect/floor_decal/corner/white{ - dir = 8 - }, -/obj/structure/sign/warning/docking_area{ - name = "\improper ESCAPE POD LAUNCH PATHWAY"; - pixel_x = -32 - }, -/turf/simulated/floor/tiled/dark, -/area/hallway/primary/fourthdeck/aft) -"My" = ( -/obj/effect/floor_decal/corner/brown/mono, -/obj/machinery/alarm{ - dir = 8; - pixel_x = 21 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/turf/simulated/floor/tiled/monotile, -/area/quartermaster/office) -"MB" = ( -/obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/floor/tiled/techfloor/grid, -/area/hallway/primary/fourthdeck/aft) -"MC" = ( -/obj/structure/railing/mapped, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/random/junk, -/turf/simulated/floor/plating, -/area/maintenance/fourthdeck/forestarboard) -"MD" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/dark, -/area/security/hangcheck) -"MF" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 4 - }, -/obj/machinery/alarm{ - pixel_y = 24 - }, -/obj/machinery/firealarm{ - dir = 8; - pixel_x = -24 - }, -/turf/simulated/floor/tiled/techmaint, -/area/quartermaster/hangar/catwalks_starboard) -"MH" = ( -/obj/machinery/space_heater, -/obj/effect/floor_decal/industrial/outline/grey, -/obj/structure/cable{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/fourthdeck/starboard) -"MI" = ( -/obj/effect/catwalk_plated, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/hallway/primary/fourthdeck/aft) -"MJ" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/obj/structure/disposalpipe/segment, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/fourthdeck/aft) -"MM" = ( -/obj/structure/table/steel, -/obj/random/maintenance/solgov, -/obj/random/maintenance/solgov, -/obj/random/maintenance/solgov, -/obj/random/maintenance/solgov, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/fourthdeck/aft) -"MN" = ( -/obj/structure/table/woodentable, -/obj/item/reagent_containers/food/drinks/glass2/coffeecup/SCG{ - pixel_x = -5; - pixel_y = 9 - }, -/obj/item/reagent_containers/food/drinks/glass2/coffeecup/SCG{ - pixel_x = 7; - pixel_y = 5 - }, -/obj/item/reagent_containers/food/drinks/glass2/coffeecup/SCG{ - pixel_x = -1; - pixel_y = 1 - }, -/turf/simulated/floor/wood/walnut, -/area/crew_quarters/lounge) -"MR" = ( -/turf/simulated/floor/tiled/steel_ridged, -/area/hallway/primary/fourthdeck/center) -"MS" = ( -/obj/effect/floor_decal/industrial/outline/grey, -/obj/machinery/suit_storage_unit/engineering/alt/sol, -/turf/simulated/floor/tiled/dark/monotile, -/area/eva) -"MT" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled, -/area/hallway/primary/fourthdeck/aft) -"MW" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/fourthdeck/center) -"MX" = ( -/turf/simulated/wall/r_wall/prepainted, -/area/command/captainmess) -"MY" = ( -/obj/effect/floor_decal/spline/fancy/wood{ - dir = 1 - }, -/turf/simulated/floor/wood/walnut, -/area/crew_quarters/lounge) -"MZ" = ( -/obj/structure/railing/mapped{ - dir = 1; - icon_state = "railing0-1" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/turf/simulated/floor/plating, -/area/maintenance/fourthdeck/foreport) -"Nb" = ( -/obj/structure/bookcase, -/obj/item/book/manual/anomaly_spectroscopy, -/obj/item/book/manual/anomaly_testing, -/obj/item/book/manual/materials_chemistry_analysis, -/obj/item/book/manual/stasis, -/turf/simulated/floor/wood, -/area/crew_quarters/lounge) -"Nc" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/tiled/dark, -/area/security/hangcheck) -"Nd" = ( -/obj/structure/disposalpipe/segment, -/obj/machinery/power/apc{ - dir = 4; - name = "east bump"; - pixel_x = 24 - }, -/obj/structure/cable/green{ - d2 = 2; - icon_state = "0-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled/monotile, -/area/crew_quarters/commissary) -"Nf" = ( -/obj/structure/railing/mapped{ - dir = 8; - icon_state = "railing0-1" - }, -/obj/structure/railing/mapped, -/turf/simulated/open, -/area/hallway/primary/fourthdeck/fore) -"Ng" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/waterstore) -"Ni" = ( -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/fourthdeck/port) -"Nj" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/railing/mapped{ - dir = 4; - icon_state = "railing0-1" - }, -/turf/simulated/floor/plating, -/area/maintenance/fourthdeck/foreport) -"Nk" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden, -/obj/structure/disposalpipe/segment, -/obj/effect/catwalk_plated/dark, -/turf/simulated/floor/plating, -/area/hallway/primary/fourthdeck/aft) -"Nl" = ( -/obj/effect/floor_decal/corner/brown/mono, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/obj/machinery/alarm{ - dir = 8; - pixel_x = 21 - }, -/obj/structure/disposalpipe/segment{ - dir = 8; - icon_state = "pipe-c" - }, -/turf/simulated/floor/tiled/monotile, -/area/quartermaster/storage/upper) -"Nm" = ( -/obj/machinery/door/blast/shutters{ - density = 0; - dir = 8; - icon_state = "shutter0"; - id_tag = "hangar_checkpoint_shutters"; - name = "Hangar Deck Checkpoint Shutters"; - opacity = 0 - }, -/obj/structure/cable/green{ - d2 = 2; - icon_state = "0-2" - }, -/obj/effect/wallframe_spawn/reinforced, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/security/hangcheck) -"Nn" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 1 - }, -/turf/simulated/floor/carpet, -/area/crew_quarters/lounge) -"Np" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/quartermaster/storage/upper) -"Nq" = ( -/obj/structure/railing/mapped, -/obj/effect/floor_decal/industrial/warning{ - dir = 4 - }, -/obj/structure/railing/mapped{ - dir = 8; - icon_state = "railing0-1" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 8 - }, -/turf/simulated/floor/plating, -/area/maintenance/fourthdeck/starboard) -"Nr" = ( -/obj/structure/catwalk, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, -/turf/simulated/floor/plating, -/area/maintenance/fourthdeck/foreport) -"Nt" = ( -/obj/structure/cable/green{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/obj/structure/disposalpipe/segment{ - dir = 2; - icon_state = "pipe-c" - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/fourthdeck/aft) -"Nu" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/effect/catwalk_plated, -/turf/simulated/floor/plating, -/area/hallway/primary/fourthdeck/fore) -"Nv" = ( -/obj/structure/sign/solgov, -/turf/simulated/wall/r_wall/hull, -/area/hallway/primary/fourthdeck/fore) -"Nw" = ( -/obj/structure/bed/chair/comfy/brown{ - dir = 4 - }, -/obj/machinery/button/blast_door{ - desc = "A remote control-switch for shutters."; - id_tag = "lounge_shutters"; - name = "Window Shutters"; - pixel_x = -26; - pixel_y = -24 - }, -/turf/simulated/floor/carpet, -/area/crew_quarters/lounge) -"Nx" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/disposalpipe/segment, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/fourthdeck/aft) -"Nz" = ( -/obj/effect/floor_decal/industrial/outline/grey, -/obj/machinery/suit_storage_unit/atmos/alt/sol, -/turf/simulated/floor/tiled/dark/monotile, -/area/eva) -"NA" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/floor_decal/corner/white{ - dir = 1 - }, -/obj/effect/floor_decal/corner/red{ - dir = 4 - }, -/obj/machinery/atm{ - pixel_y = 32 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/fourthdeck/fore) -"NC" = ( -/obj/structure/table/woodentable, -/obj/item/device/flashlight/lamp/green, -/turf/simulated/floor/carpet, -/area/crew_quarters/lounge) -"ND" = ( -/obj/structure/catwalk, -/obj/machinery/light{ - dir = 4 - }, -/turf/simulated/open, -/area/quartermaster/hangar/catwalks_port) -"NH" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/wall/prepainted, -/area/maintenance/fourthdeck/starboard) -"NL" = ( -/obj/structure/railing/mapped{ - dir = 4; - icon_state = "railing0-1" - }, -/obj/structure/railing/mapped, -/turf/simulated/open, -/area/quartermaster/hangar/catwalks_port) -"NM" = ( -/obj/effect/fluid_mapped, -/turf/simulated/floor/reinforced, -/area/maintenance/waterstore) -"NN" = ( -/obj/machinery/door/blast/shutters{ - density = 0; - dir = 4; - icon_state = "shutter0"; - id_tag = "hangar_checkpoint_shutters"; - name = "Hangar Deck Checkpoint Shutters"; - opacity = 0 - }, -/obj/structure/cable/green, -/obj/effect/wallframe_spawn/reinforced, -/obj/machinery/door/firedoor, -/turf/simulated/floor/plating, -/area/security/hangcheck) -"NP" = ( -/turf/simulated/floor/tiled, -/area/hallway/primary/fourthdeck/center) -"NQ" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 10 - }, -/obj/random/junk, -/turf/simulated/floor/plating, -/area/maintenance/fourthdeck/starboard) -"NR" = ( -/obj/effect/catwalk_plated, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 1 - }, -/turf/simulated/floor/plating, -/area/hallway/primary/fourthdeck/aft) -"NT" = ( -/obj/machinery/cryopod, -/obj/item/device/radio/intercom{ - dir = 8; - pixel_x = 21 - }, -/obj/machinery/embedded_controller/radio/simple_docking_controller/escape_pod{ - dir = 1; - frequency = 1380; - id_tag = "escape_pod_8"; - name = "escape pod three controller"; - pixel_y = -32; - tag_door = "escape_pod_8_hatch" - }, -/turf/simulated/floor/tiled/monotile, -/area/shuttle/escape_pod8/station) -"NU" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/random_multi/single_item/poppy, -/turf/simulated/floor/plating, -/area/maintenance/fourthdeck/forestarboard) -"NV" = ( -/obj/machinery/door/firedoor, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/door/airlock/engineering{ - name = "Fourth Deck Substation" - }, -/obj/structure/catwalk, -/turf/simulated/floor/tiled/techfloor/grid, -/area/maintenance/substation/fourthdeck) -"NX" = ( -/obj/structure/catwalk, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, -/obj/structure/disposalpipe/segment{ - dir = 4; - icon_state = "pipe-c" - }, -/turf/simulated/floor/plating, -/area/maintenance/fourthdeck/port) -"NY" = ( -/obj/machinery/atmospherics/unary/vent_pump/on, -/obj/machinery/light{ - dir = 1 - }, -/obj/effect/floor_decal/corner/brown{ - dir = 1 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/fourthdeck/aft) -"NZ" = ( -/obj/machinery/computer/modular/preset/civilian{ - dir = 8; - icon_state = "console" - }, -/obj/machinery/newscaster{ - pixel_x = 32 - }, -/turf/simulated/floor/wood/walnut, -/area/crew_quarters/lounge) -"Oa" = ( -/obj/structure/catwalk, -/obj/structure/sign/warning/docking_area{ - name = "\improper ESCAPE POD LAUNCH PATHWAY"; - pixel_y = -32 - }, -/turf/simulated/floor/plating, -/area/maintenance/fourthdeck/port) -"Oc" = ( -/obj/machinery/barrier, -/turf/simulated/floor/tiled/monotile, -/area/maintenance/fourthdeck/forestarboard) -"Od" = ( -/obj/machinery/suit_cycler/mining, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/floor/tiled/dark/monotile, -/area/eva) -"Oe" = ( -/obj/machinery/atmospherics/pipe/manifold4w/hidden, -/turf/simulated/floor/tiled/monotile, -/area/shuttle/escape_pod7/station) -"Og" = ( -/obj/structure/railing/mapped{ - dir = 4; - icon_state = "railing0-1" - }, -/turf/simulated/open, -/area/maintenance/fourthdeck/foreport) -"Oh" = ( -/obj/structure/table/rack, -/obj/random/maintenance/solgov, -/turf/simulated/floor/tiled, -/area/crew_quarters/commissary) -"Oj" = ( -/obj/machinery/door/blast/shutters{ - density = 0; - dir = 4; - icon_state = "shutter0"; - id_tag = "hangar_checkpoint_shutters"; - name = "Hangar Deck Checkpoint Shutters"; - opacity = 0 - }, -/obj/structure/cable/green{ - d2 = 8; - icon_state = "0-8" - }, -/obj/structure/cable/green{ - d2 = 2; - icon_state = "0-2" - }, -/obj/effect/wallframe_spawn/reinforced, -/obj/machinery/door/firedoor, -/turf/simulated/floor/plating, -/area/security/hangcheck) -"Ol" = ( -/obj/machinery/button/windowtint{ - id = "offmess_windows"; - pixel_x = -4; - pixel_y = -24 - }, -/obj/machinery/light_switch{ - pixel_x = 4; - pixel_y = -24 - }, -/obj/machinery/disposal, -/obj/effect/floor_decal/industrial/hatch/yellow, -/obj/machinery/light, -/obj/structure/disposalpipe/trunk{ - dir = 1 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/command/captainmess) -"Om" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 1 - }, -/obj/machinery/light/small, -/turf/simulated/floor/tiled/steel_grid, -/area/janitor/storage) -"On" = ( -/obj/structure/disposalpipe/segment{ - dir = 8; - icon_state = "pipe-c" - }, -/obj/effect/floor_decal/industrial/warning, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 8 - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/turf/simulated/floor/tiled/dark, -/area/quartermaster/sorting) -"Or" = ( -/obj/structure/railing/mapped{ - dir = 1; - icon_state = "railing0-1" - }, -/turf/simulated/floor/plating, -/area/maintenance/fourthdeck/foreport) -"Os" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/maintenance/fourthdeck/forestarboard) -"Ou" = ( -/obj/effect/floor_decal/industrial/hatch/yellow, -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/monotile, -/area/hallway/primary/fourthdeck/aft) -"Ow" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/fourthdeck/starboard) -"Ox" = ( -/obj/machinery/conveyor{ - dir = 8; - id = "packageSort1" - }, -/obj/structure/plasticflaps, -/turf/simulated/floor/plating, -/area/quartermaster/sorting) -"Oy" = ( -/obj/structure/closet/crate, -/obj/random/maintenance/solgov, -/obj/random/maintenance/solgov, -/obj/random/junk, -/turf/simulated/floor/plating, -/area/maintenance/fourthdeck/foreport) -"OA" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/mining{ - name = "Expedition Storage" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/quartermaster/expedition/storage) -"OB" = ( -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/fourthdeck/aft) -"OC" = ( -/obj/effect/floor_decal/industrial/outline/grey, -/obj/machinery/suit_storage_unit/medical/alt/sol, -/turf/simulated/floor/tiled/dark/monotile, -/area/eva) -"OG" = ( -/obj/structure/railing/mapped, -/obj/structure/sign/deck/fourth{ - dir = 8; - pixel_x = 32 - }, -/turf/simulated/open, -/area/hallway/primary/fourthdeck/fore) -"OI" = ( -/obj/item/reagent_containers/food/condiment/small/peppermill{ - pixel_x = 3 - }, -/obj/item/reagent_containers/food/condiment/small/saltshaker{ - pixel_x = -3 - }, -/obj/structure/table/woodentable/walnut, -/turf/simulated/floor/carpet/blue2, -/area/command/captainmess) -"OJ" = ( -/obj/machinery/computer/modular/preset/security{ - dir = 1; - icon_state = "console" - }, -/obj/effect/floor_decal/corner/red/mono, -/turf/simulated/floor/tiled/dark/monotile, -/area/security/hangcheck) -"OK" = ( -/obj/structure/catwalk, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/plating, -/area/maintenance/fourthdeck/aft) -"OM" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/fourthdeck/foreport) -"OO" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/wood/walnut, -/area/crew_quarters/lounge) -"OQ" = ( -/obj/structure/table/rack, -/obj/random/drinkbottle, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/button/blast_door{ - id_tag = "shop_shutters"; - name = "Counter Shutters"; - pixel_y = 24; - req_access = list(list("ACCESS_HEADS","ACCESS_TORCH_SHOP")) - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/crew_quarters/commissary) -"OS" = ( -/obj/structure/railing/mapped{ - dir = 1; - icon_state = "railing0-1" - }, -/turf/simulated/open, -/area/maintenance/fourthdeck/foreport) -"OT" = ( -/obj/machinery/status_display, -/turf/simulated/wall/r_wall/prepainted, -/area/hallway/primary/fourthdeck/aft) -"OU" = ( -/obj/structure/sign/directions/engineering{ - dir = 1; - pixel_y = 3 - }, -/obj/structure/sign/directions/evac{ - dir = 4; - pixel_y = -4 - }, -/obj/effect/wallframe_spawn/no_grille, -/turf/simulated/floor/plating, -/area/storage/primary) -"OV" = ( -/obj/structure/cable/green{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 5 - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/fourthdeck/starboard) -"OW" = ( -/turf/simulated/floor/shuttle_ceiling, -/area/space) -"OX" = ( -/turf/simulated/wall/prepainted, -/area/security/hangcheck) -"OZ" = ( -/obj/structure/table/marble, -/obj/structure/flora/pottedplant/deskferntrim{ - pixel_y = 4 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/command/captainmess) -"Pa" = ( -/obj/machinery/door/blast/shutters{ - dir = 2; - id_tag = "do_office"; - name = "DO Office Shutters" - }, -/obj/effect/wallframe_spawn/no_grille, -/turf/simulated/floor/plating, -/area/quartermaster/deckchief) -"Pc" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden, -/obj/effect/floor_decal/corner/green/mono, -/obj/structure/disposalpipe/segment, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/sign/warning/pods/east{ - dir = 8; - pixel_x = 40 - }, -/turf/simulated/floor/tiled/monotile, -/area/hallway/primary/fourthdeck/aft) -"Pe" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/simulated/floor/carpet, -/area/crew_quarters/lounge) -"Pf" = ( -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/door/airlock/maintenance{ - name = "Hangar Maintenance" - }, -/turf/simulated/floor/tiled/steel_ridged, -/area/quartermaster/hangar/catwalks_starboard) -"Pg" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/quartermaster/storage/upper) -"Ph" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/floor_decal/industrial/warning, -/obj/effect/floor_decal/industrial/warning{ - dir = 1; - icon_state = "warning" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/dark, -/area/quartermaster/sorting) -"Pi" = ( -/obj/structure/closet/crate/plastic, -/obj/random/maintenance/solgov, -/obj/random/single/lighter, -/turf/simulated/floor/plating, -/area/maintenance/fourthdeck/foreport) -"Pj" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/disposalpipe/segment{ - dir = 2; - icon_state = "pipe-c" - }, -/turf/simulated/floor/tiled, -/area/quartermaster/deckchief) -"Pk" = ( -/obj/structure/catwalk, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 - }, -/turf/simulated/floor/plating, -/area/maintenance/fourthdeck/foreport) -"Pm" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 10; - icon_state = "warning" - }, -/obj/structure/disposalpipe/up{ - dir = 8 - }, -/obj/structure/railing/mapped{ - dir = 8; - icon_state = "railing0-1" - }, -/turf/simulated/floor/plating, -/area/maintenance/fourthdeck/aft) -"Pn" = ( -/obj/structure/railing/mapped{ - dir = 8; - icon_state = "railing0-1" - }, -/obj/structure/railing/mapped{ - dir = 1; - icon_state = "railing0-1" - }, -/turf/simulated/floor/shuttle_ceiling/torch/air, -/area/quartermaster/hangar/catwalks_starboard) -"Po" = ( -/obj/structure/catwalk, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/plating, -/area/maintenance/fourthdeck/forestarboard) -"Pp" = ( -/obj/structure/catwalk, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/turf/simulated/floor/plating, -/area/maintenance/fourthdeck/foreport) -"Pq" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 4 - }, -/obj/machinery/alarm{ - dir = 4; - pixel_x = -22 - }, -/obj/effect/floor_decal/corner/blue{ - dir = 5 - }, -/turf/simulated/floor/tiled/dark, -/area/eva) -"Pt" = ( -/obj/structure/catwalk, -/obj/machinery/light{ - dir = 1 - }, -/turf/simulated/floor/shuttle_ceiling/torch/air, -/area/quartermaster/hangar/catwalks_starboard) -"Pu" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/meter, -/turf/simulated/floor/plating, -/area/maintenance/fourthdeck/foreport) -"Pv" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 4 - }, -/turf/simulated/floor/tiled/monotile, -/area/hallway/primary/fourthdeck/fore) -"Px" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 9 - }, -/obj/machinery/atmospherics/unary/vent_pump/high_volume/shuttle{ - dir = 4; - id_tag = "rescue_shuttle_dock_pump" - }, -/turf/simulated/floor/plating, -/area/hallway/primary/fourthdeck/aft) -"Pz" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/floor_decal/corner/paleblue{ - dir = 10 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/fourthdeck/fore) -"PB" = ( -/obj/structure/railing/mapped, -/turf/simulated/open, -/area/quartermaster/storage/upper) -"PC" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/carpet, -/area/crew_quarters/lounge) -"PE" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/obj/structure/disposalpipe/segment{ - dir = 1; - icon_state = "pipe-c" - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/fourthdeck/foreport) -"PG" = ( -/obj/effect/floor_decal/industrial/hatch/yellow, -/obj/structure/sign/warning/mail_delivery{ - pixel_y = 32 - }, -/obj/structure/ladder/up, -/obj/machinery/power/apc{ - dir = 8; - name = "west bump"; - pixel_x = -24 - }, -/obj/structure/cable/green{ - d2 = 2; - icon_state = "0-2" - }, -/obj/machinery/camera/network/supply{ - c_tag = "Supply Office - Sorting"; - dir = 4 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/quartermaster/sorting) -"PH" = ( -/obj/structure/closet/emcloset, -/turf/simulated/floor/plating, -/area/maintenance/fourthdeck/foreport) -"PI" = ( -/obj/effect/floor_decal/corner/brown{ - dir = 5 - }, -/obj/machinery/alarm{ - pixel_y = 24 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/fourthdeck/aft) -"PJ" = ( -/turf/simulated/wall/prepainted, -/area/crew_quarters/laundry) -"PK" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/turf/simulated/floor/carpet, -/area/crew_quarters/lounge) -"PM" = ( -/turf/simulated/wall/r_wall/hull, -/area/crew_quarters/commissary) -"PN" = ( -/obj/effect/floor_decal/corner/brown{ - dir = 10 - }, -/obj/machinery/light_switch{ - pixel_x = 6; - pixel_y = -24 - }, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/crew_quarters/commissary) -"PO" = ( -/obj/structure/railing/mapped{ - dir = 4; - icon_state = "railing0-1" - }, -/obj/machinery/light_switch{ - pixel_x = -24 - }, -/turf/simulated/floor/plating, -/area/crew_quarters/lounge) -"PQ" = ( -/obj/effect/floor_decal/corner/brown/half, -/obj/structure/disposalpipe/segment, -/obj/structure/cable/green{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/tiled/monotile, -/area/quartermaster/office) -"PR" = ( -/obj/structure/railing/mapped{ - dir = 1; - icon_state = "railing0-1" - }, -/obj/machinery/atmospherics/valve/shutoff/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/maintenance/fourthdeck/foreport) -"PS" = ( -/obj/effect/floor_decal/corner/green/half{ - dir = 1 - }, -/obj/machinery/light{ - dir = 1 - }, -/turf/simulated/floor/tiled/monotile, -/area/hallway/primary/fourthdeck/center) -"PT" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/turf/simulated/floor/tiled, -/area/quartermaster/deckchief) -"PU" = ( -/obj/random/junk, -/obj/structure/disposalpipe/segment{ - dir = 8; - icon_state = "pipe-c" - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/fourthdeck/port) -"PV" = ( -/obj/structure/table/rack{ - dir = 8 - }, -/obj/random/junk, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/fourthdeck/aft) -"PX" = ( -/obj/machinery/door/blast/shutters{ - dir = 4; - id_tag = "sup_office"; - name = "Supply Desk Shutters" - }, -/obj/effect/wallframe_spawn/no_grille, -/turf/simulated/floor/plating, -/area/quartermaster/office) -"PY" = ( -/obj/structure/table/rack, -/obj/random/single/cola, -/obj/machinery/alarm{ - dir = 4; - pixel_x = -22 - }, -/turf/simulated/floor/tiled/monotile, -/area/crew_quarters/commissary) -"PZ" = ( -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/waterstore) -"Qa" = ( -/obj/structure/railing/mapped, -/obj/machinery/atmospherics/valve/shutoff/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/valve/shutoff/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/maintenance/fourthdeck/aft) -"Qb" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 8 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/fourthdeck/aft) -"Qc" = ( -/obj/structure/table/steel, -/obj/random/junk, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/fourthdeck/starboard) -"Qd" = ( -/obj/structure/sign/solgov, -/turf/simulated/wall/r_wall/hull, -/area/hallway/primary/fourthdeck/aft) -"Qe" = ( -/obj/effect/floor_decal/corner/brown/mono, -/obj/structure/closet/secure_closet/decktech, -/obj/item/material/coin/silver{ - pixel_x = -3; - pixel_y = 3 - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/effect/floor_decal/industrial/warning{ - dir = 1; - icon_state = "warning" - }, -/turf/simulated/floor/tiled/monotile, -/area/quartermaster/storage/upper) -"Qf" = ( -/obj/structure/catwalk, -/obj/machinery/light, -/turf/simulated/open, -/area/quartermaster/hangar/catwalks_port) -"Qg" = ( -/obj/machinery/door/airlock/civilian{ - name = "Emergency Storage" - }, -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/simple/hidden, -/turf/simulated/floor/tiled/steel_ridged, -/area/maintenance/fourthdeck/forestarboard) -"Qj" = ( -/obj/structure/railing/mapped{ - dir = 1; - icon_state = "railing0-1" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/meter, -/turf/simulated/floor/plating, -/area/maintenance/fourthdeck/forestarboard) -"Qn" = ( -/obj/structure/railing/mapped, -/obj/structure/railing/mapped{ - dir = 4; - icon_state = "railing0-1" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/maintenance/fourthdeck/forestarboard) -"Qp" = ( -/obj/structure/catwalk, -/obj/effect/floor_decal/industrial/warning{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/maintenance/fourthdeck/starboard) -"Qq" = ( -/obj/effect/floor_decal/corner/red/half{ - dir = 1 - }, -/obj/structure/bed/chair/padded/red{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/security/hangcheck) -"Qr" = ( -/obj/structure/railing/mapped, -/obj/machinery/light/small{ - dir = 8 - }, -/turf/simulated/open, -/area/quartermaster/expedition/storage) -"Qs" = ( -/obj/effect/floor_decal/industrial/warning, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/plating, -/area/maintenance/fourthdeck/starboard) -"Qt" = ( -/obj/effect/floor_decal/spline/fancy/wood{ - dir = 1 - }, -/obj/machinery/recharger, -/obj/structure/table/woodentable, -/turf/simulated/floor/wood/walnut, -/area/crew_quarters/lounge) -"Qu" = ( -/obj/structure/table/standard, -/obj/item/device/megaphone, -/turf/simulated/floor/tiled, -/area/quartermaster/deckchief) -"Qy" = ( -/obj/structure/railing/mapped, -/obj/random/trash, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/turf/simulated/floor/plating, -/area/maintenance/fourthdeck/aft) -"QA" = ( -/turf/simulated/floor/tiled/dark/monotile, -/area/command/captainmess) -"QB" = ( -/obj/machinery/access_button{ - command = "cycle_exterior"; - frequency = 1380; - master_tag = "eva_airlock"; - name = "exterior access button"; - pixel_x = -5; - pixel_y = -22; - req_access = list("ACCESS_MAINT") - }, -/turf/space, -/area/space) -"QC" = ( -/obj/effect/floor_decal/corner/brown{ - dir = 10 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/fourthdeck/center) -"QD" = ( -/obj/effect/floor_decal/corner/brown/half, -/obj/structure/filingcabinet, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/monotile, -/area/quartermaster/deckchief) -"QG" = ( -/obj/structure/table/standard, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/item/stamp/path, -/obj/random_multi/single_item/memo_research, -/obj/random_multi/single_item/memo_exploration, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/tiled, -/area/command/pathfinder) -"QI" = ( -/obj/machinery/door/airlock/mining{ - name = "Warehouse" - }, -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/simulated/floor/tiled/steel_ridged, -/area/quartermaster/storage/upper) -"QJ" = ( -/obj/structure/railing/mapped{ - dir = 4; - icon_state = "railing0-1" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/maintenance/fourthdeck/foreport) -"QK" = ( -/obj/structure/railing/mapped{ - dir = 4; - icon_state = "railing0-1" - }, -/obj/structure/railing/mapped{ - dir = 1; - icon_state = "railing0-1" - }, -/turf/simulated/open, -/area/quartermaster/storage/upper) -"QL" = ( -/turf/simulated/floor/plating, -/area/maintenance/fourthdeck/aft) -"QM" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden{ - dir = 4 - }, -/obj/machinery/light/small{ - dir = 4 - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 6 - }, -/turf/simulated/floor/plating, -/area/hallway/primary/fourthdeck/aft) -"QR" = ( -/obj/structure/catwalk, -/obj/structure/disposalpipe/sortjunction{ - dir = 8; - name = "Lounge"; - sort_type = "Lounge" - }, -/turf/simulated/floor/plating, -/area/maintenance/fourthdeck/port) -"QS" = ( -/obj/machinery/portable_atmospherics/powered/pump/filled, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/floor/tiled/techfloor/grid, -/area/hallway/primary/fourthdeck/aft) -"QU" = ( -/obj/structure/sign/warning/docking_area, -/turf/simulated/wall/r_wall/hull, -/area/maintenance/fourthdeck/aft) -"QV" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/fourthdeck/foreport) -"QW" = ( -/turf/simulated/wall/prepainted, -/area/crew_quarters/adherent) -"QX" = ( -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/fourthdeck/forestarboard) -"QZ" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 8 - }, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/waterstore) -"Ra" = ( -/obj/structure/catwalk, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/turf/simulated/floor/plating, -/area/maintenance/fourthdeck/foreport) -"Rb" = ( -/obj/structure/bed/chair/office/light, -/turf/simulated/floor/tiled, -/area/quartermaster/office) -"Re" = ( -/obj/machinery/pager/cargo{ - pixel_y = 26 - }, -/obj/machinery/atmospherics/unary/vent_pump/on{ - level = 2 - }, -/obj/machinery/computer/modular/preset/supply_public, -/turf/simulated/floor/tiled/monotile, -/area/hallway/primary/fourthdeck/aft) -"Rf" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/item/device/radio/intercom{ - dir = 1; - pixel_y = -28 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/simulated/floor/carpet, -/area/crew_quarters/lounge) -"Rg" = ( -/obj/structure/railing/mapped{ - dir = 4; - icon_state = "railing0-1" - }, -/turf/simulated/open, -/area/quartermaster/hangar/catwalks_starboard) -"Rk" = ( -/obj/structure/railing/mapped{ - dir = 1; - icon_state = "railing0-1" - }, -/obj/structure/railing/mapped{ - dir = 4; - icon_state = "railing0-1" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/maintenance/fourthdeck/foreport) -"Rm" = ( -/obj/structure/sign/warning/high_voltage{ - dir = 4 - }, -/turf/simulated/wall/prepainted, -/area/security/hangcheck) -"Rn" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply, -/obj/effect/catwalk_plated, -/turf/simulated/floor/plating, -/area/hallway/primary/fourthdeck/fore) -"Ro" = ( -/obj/effect/floor_decal/corner/blue/diagonal, -/obj/structure/closet/secure_closet/personal, -/obj/machinery/newscaster{ - pixel_x = 32 - }, -/obj/machinery/camera/network/fourth_deck{ - c_tag = "Fourth Deck - Laundry Room"; - dir = 8 - }, -/turf/simulated/floor/tiled/white, -/area/crew_quarters/laundry) -"Rp" = ( -/obj/machinery/door/airlock/glass/command{ - name = "E.V.A. Cycler Access" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/door/firedoor, -/turf/simulated/floor/tiled/steel_ridged, -/area/eva) -"Rq" = ( -/obj/structure/bookcase, -/obj/item/book/manual/anomaly_spectroscopy, -/obj/item/book/manual/anomaly_testing, -/obj/item/book/manual/materials_chemistry_analysis, -/obj/item/book/manual/stasis, -/turf/simulated/floor/wood, -/area/command/captainmess) -"Rr" = ( -/obj/effect/floor_decal/corner/brown{ - dir = 5 - }, -/obj/machinery/atmospherics/unary/vent_pump/on, -/obj/structure/closet/hydrant{ - pixel_y = 32 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/fourthdeck/aft) -"Rs" = ( -/obj/structure/railing/mapped{ - dir = 8; - icon_state = "railing0-1" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/maintenance/fourthdeck/forestarboard) -"Rt" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 - }, -/obj/effect/floor_decal/corner/red{ - dir = 4 - }, -/obj/effect/floor_decal/corner/white, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/fourthdeck/fore) -"Rv" = ( -/obj/effect/floor_decal/corner/red{ - dir = 6 - }, -/obj/machinery/camera/network/command{ - c_tag = "EVA - Suit Storage"; - dir = 1 - }, -/obj/item/device/radio/intercom{ - dir = 1; - pixel_y = -28 - }, -/turf/simulated/floor/tiled/dark, -/area/eva) -"Rw" = ( -/obj/structure/flora/pottedplant/crystal, -/obj/machinery/power/apc{ - dir = 1; - name = "north bump"; - pixel_y = 24 - }, -/obj/structure/cable/green{ - d2 = 2; - icon_state = "0-2" - }, -/turf/simulated/floor/crystal, -/area/crew_quarters/adherent) -"Rx" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 1 - }, -/obj/effect/floor_decal/corner/brown{ - dir = 8 - }, -/obj/machinery/light, -/turf/simulated/floor/tiled, -/area/hallway/primary/fourthdeck/aft) -"Ry" = ( -/obj/structure/sign/directions/bridge{ - dir = 1; - pixel_y = 3 - }, -/obj/structure/sign/directions/security{ - dir = 1; - pixel_y = -4 - }, -/obj/effect/wallframe_spawn/no_grille, -/turf/simulated/floor/plating, -/area/storage/primary) -"RA" = ( -/turf/simulated/wall/prepainted, -/area/quartermaster/expedition/storage) -"RB" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/effect/catwalk_plated, -/obj/machinery/rotating_alarm/security_alarm{ - dir = 1; - pixel_y = -16 - }, -/turf/simulated/floor/plating, -/area/hallway/primary/fourthdeck/fore) -"RC" = ( -/obj/machinery/firealarm{ - dir = 1; - pixel_y = -24 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/command/captainmess) -"RD" = ( -/obj/machinery/alarm{ - dir = 1; - pixel_y = -22 - }, -/obj/effect/floor_decal/corner/brown{ - dir = 9 - }, -/obj/structure/ladder, -/obj/effect/catwalk_plated, -/obj/machinery/light{ - dir = 8 - }, -/turf/simulated/floor/tiled/steel_grid, -/area/hallway/primary/fourthdeck/aft) -"RG" = ( -/obj/structure/cable/green{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/structure/cable{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/fourthdeck/aft) -"RH" = ( -/obj/machinery/door/airlock/maintenance{ - name = "Cargo Maintenance" - }, -/obj/machinery/door/firedoor, -/turf/simulated/floor/tiled/steel_ridged, -/area/quartermaster/storage/upper) -"RI" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/catwalk, -/obj/effect/floor_decal/industrial/warning{ - dir = 4; - icon_state = "warning" - }, -/turf/simulated/floor/plating, -/area/maintenance/fourthdeck/port) -"RK" = ( -/obj/effect/floor_decal/corner/brown{ - dir = 5 - }, -/obj/machinery/light{ - dir = 1 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/fourthdeck/aft) -"RL" = ( -/obj/structure/table/marble, -/obj/machinery/chemical_dispenser/bar_coffee/full{ - pixel_y = 3 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/command/captainmess) -"RM" = ( -/obj/effect/floor_decal/corner/brown{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 8 - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/quartermaster/office) -"RN" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 4 - }, -/obj/effect/floor_decal/corner/red/diagonal, -/obj/effect/floor_decal/corner/white{ - dir = 8 - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 8; - icon_state = "warning" - }, -/turf/simulated/floor/tiled/steel_grid, -/area/hallway/primary/fourthdeck/fore) -"RP" = ( -/obj/effect/catwalk_plated, -/turf/simulated/floor/plating, -/area/maintenance/fourthdeck/forestarboard) -"RQ" = ( -/turf/simulated/wall/r_wall/hull, -/area/storage/auxillary/starboard) -"RR" = ( -/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{ - dir = 4; - id_tag = "admin_shuttle_dock_pump" - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 10 - }, -/turf/simulated/floor/plating, -/area/hallway/primary/fourthdeck/aft) -"RS" = ( -/obj/structure/catwalk, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/maintenance/fourthdeck/port) -"RT" = ( -/obj/effect/floor_decal/corner/blue/three_quarters, -/turf/simulated/floor/tiled/dark, -/area/command/captainmess) -"RU" = ( -/obj/effect/floor_decal/industrial/outline/grey, -/obj/structure/closet/crate/freezer/rations, -/turf/simulated/floor/tiled/techfloor/grid, -/area/hallway/primary/fourthdeck/aft) -"RV" = ( -/obj/structure/table/woodentable, -/obj/machinery/chemical_dispenser/bar_coffee/full{ - pixel_y = 3 - }, -/obj/machinery/light/small{ - dir = 4 - }, -/turf/simulated/floor/wood/walnut, -/area/crew_quarters/lounge) -"RW" = ( -/obj/effect/floor_decal/corner/brown/half, -/turf/simulated/floor/tiled/monotile, -/area/hallway/primary/fourthdeck/aft) -"RY" = ( -/turf/simulated/floor/wood/walnut, -/area/crew_quarters/lounge) -"RZ" = ( -/obj/machinery/door/blast/shutters{ - dir = 2; - id_tag = "shop_shutters"; - name = "Commissary Shutters" - }, -/obj/structure/table/marble, -/turf/simulated/floor/tiled/monotile, -/area/crew_quarters/commissary) -"Sa" = ( -/obj/machinery/light/small{ - dir = 8 - }, -/obj/structure/railing/mapped, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, -/turf/simulated/floor/plating, -/area/maintenance/fourthdeck/aft) -"Sd" = ( -/turf/simulated/wall/prepainted, -/area/crew_quarters/lounge) -"Se" = ( -/obj/effect/floor_decal/corner/paleblue/half{ - dir = 8 - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/monotile, -/area/hallway/primary/fourthdeck/fore) -"Sf" = ( -/obj/effect/floor_decal/industrial/outline/grey, -/obj/machinery/computer/modular/preset/civilian{ - dir = 8; - icon_state = "console" - }, -/turf/simulated/floor/tiled/techmaint, -/area/quartermaster/hangar/catwalks_starboard) -"Sg" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/civilian{ - name = "Cistern" - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/techfloor/grid, -/area/maintenance/waterstore) -"Sh" = ( -/obj/effect/floor_decal/corner/brown/half{ - dir = 4 - }, -/obj/structure/table/standard, -/obj/machinery/camera/network/supply{ - c_tag = "Supply Office - Deck Officer"; - dir = 8 - }, -/obj/machinery/light{ - dir = 4 - }, -/obj/machinery/photocopier/faxmachine{ - department = "Torch - Deck Chief's Office" - }, -/turf/simulated/floor/tiled/monotile, -/area/quartermaster/deckchief) -"Si" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 4 - }, -/obj/effect/floor_decal/industrial/warning/fulltile, -/turf/simulated/floor/tiled/steel_grid, -/area/hallway/primary/fourthdeck/fore) -"Sj" = ( -/obj/machinery/door/firedoor, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/door/airlock/engineering{ - name = "Fourth Deck Substation" - }, -/obj/structure/catwalk, -/turf/simulated/floor/tiled/techfloor/grid, -/area/maintenance/substation/fourthdeck) -"Sl" = ( -/obj/machinery/power/apc{ - dir = 1; - name = "north bump"; - pixel_y = 24 - }, -/obj/structure/cable/green{ - d2 = 8; - icon_state = "0-8" - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/fourthdeck/foreport) -"So" = ( -/obj/structure/table/standard{ - name = "plastic table frame" - }, -/obj/effect/floor_decal/corner/blue/diagonal, -/obj/structure/bedsheetbin, -/turf/simulated/floor/tiled/white, -/area/crew_quarters/laundry) -"Sp" = ( -/obj/structure/table/rack{ - dir = 8 - }, -/obj/random/maintenance/solgov, -/obj/random/maintenance/solgov, -/obj/random/maintenance/solgov, -/turf/simulated/floor/plating, -/area/maintenance/fourthdeck/foreport) -"Sq" = ( -/obj/machinery/cryopod{ - dir = 4 - }, -/obj/machinery/embedded_controller/radio/simple_docking_controller/escape_pod{ - dir = 1; - frequency = 1380; - id_tag = "escape_pod_9"; - name = "escape pod four controller"; - pixel_y = -32; - tag_door = "escape_pod_9_hatch" - }, -/obj/item/device/radio/intercom{ - dir = 4; - pixel_x = -21 - }, -/turf/simulated/floor/tiled/monotile, -/area/shuttle/escape_pod9/station) -"Sr" = ( -/obj/machinery/light/small, -/turf/simulated/floor/plating, -/area/maintenance/waterstore) -"Ss" = ( -/turf/simulated/wall/r_wall/prepainted, -/area/maintenance/fourthdeck/port) -"St" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden{ - dir = 1 - }, -/turf/simulated/floor/tiled/monotile, -/area/shuttle/escape_pod6/station) -"Su" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/monotile, -/area/hallway/primary/fourthdeck/fore) -"Sv" = ( -/obj/effect/floor_decal/corner/red/mono, -/turf/simulated/floor/tiled/monotile, -/area/hallway/primary/fourthdeck/fore) -"Sx" = ( -/obj/structure/railing/mapped{ - dir = 4; - icon_state = "railing0-1" - }, -/turf/simulated/open, -/area/quartermaster/storage/upper) -"Sy" = ( -/obj/effect/floor_decal/corner/brown/half{ - dir = 4 - }, -/obj/structure/table/standard, -/obj/structure/noticeboard{ - pixel_x = 32 - }, -/obj/random_multi/single_item/memo_supply, -/turf/simulated/floor/tiled/monotile, -/area/quartermaster/deckchief) -"Sz" = ( -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 4; - icon_state = "warningcorner" - }, -/obj/structure/railing/mapped{ - dir = 8; - icon_state = "railing0-1" - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/maintenance/fourthdeck/starboard) -"SA" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/valve/shutoff/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/valve/shutoff/supply{ - dir = 4 - }, -/obj/effect/floor_decal/industrial/shutoff{ - dir = 4 - }, -/turf/simulated/floor/tiled/monotile, -/area/hallway/primary/fourthdeck/center) -"SC" = ( -/obj/machinery/door/blast/shutters{ - dir = 2; - id_tag = "shop_shutters"; - name = "Commissary Shutters" - }, -/obj/structure/table/marble, -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/monotile, -/area/crew_quarters/commissary) -"SD" = ( -/obj/machinery/door/blast/shutters{ - density = 0; - dir = 2; - icon_state = "shutter0"; - id_tag = "hangar_checkpoint_shutters"; - name = "Hangar Deck Checkpoint Shutters"; - opacity = 0 - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/cable/green{ - d2 = 8; - icon_state = "0-8" - }, -/obj/structure/cable/green, -/obj/effect/wallframe_spawn/reinforced, -/turf/simulated/floor/plating, -/area/security/hangcheck) -"SE" = ( -/obj/structure/railing/mapped{ - dir = 8; - icon_state = "railing0-1" - }, -/obj/machinery/power/apc{ - name = "south bump"; - pixel_y = -24 - }, -/obj/structure/cable/green{ - d2 = 8; - icon_state = "0-8" - }, -/turf/simulated/floor/plating, -/area/maintenance/waterstore) -"SF" = ( -/obj/effect/floor_decal/industrial/hatch/yellow, -/obj/machinery/door/firedoor, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/door/airlock/glass/civilian, -/turf/simulated/floor/tiled/steel_ridged, -/area/hallway/primary/fourthdeck/aft) -"SG" = ( -/obj/effect/floor_decal/corner/blue/diagonal, -/turf/simulated/floor/tiled/white, -/area/crew_quarters/laundry) -"SH" = ( -/obj/structure/table/rack{ - dir = 8 - }, -/obj/item/stack/material/plasteel{ - amount = 10 - }, -/obj/item/stack/material/plasteel{ - amount = 10 - }, -/obj/item/stack/material/steel{ - amount = 50 - }, -/obj/item/stack/material/steel{ - amount = 50 - }, -/obj/item/stack/material/steel{ - amount = 50 - }, -/obj/item/stack/material/rods{ - amount = 50 - }, -/obj/item/stack/material/rods{ - amount = 50 - }, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 4 - }, -/obj/machinery/requests_console{ - department = "EVA"; - pixel_x = -32 - }, -/obj/machinery/light{ - dir = 8 - }, -/turf/simulated/floor/tiled/monotile, -/area/eva) -"SI" = ( -/turf/simulated/wall/prepainted, -/area/maintenance/substation/fourthdeck) -"SK" = ( -/obj/effect/floor_decal/corner/brown{ - dir = 9 - }, -/obj/structure/table/rack{ - dir = 8 - }, -/obj/random/tech_supply, -/obj/random/tech_supply, -/obj/random/tech_supply, -/obj/random/tech_supply, -/obj/random/tech_supply, -/obj/random/tech_supply, -/obj/structure/disposalpipe/segment{ - dir = 1; - icon_state = "pipe-c" - }, -/obj/machinery/light{ - dir = 8 - }, -/turf/simulated/floor/tiled, -/area/quartermaster/deckchief) -"SL" = ( -/obj/effect/floor_decal/techfloor, -/obj/effect/floor_decal/techfloor{ - dir = 1 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/hallway/primary/fourthdeck/aft) -"SO" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/turf/simulated/floor/tiled/monotile, -/area/hallway/primary/fourthdeck/aft) -"SP" = ( -/obj/effect/floor_decal/spline/fancy/wood{ - dir = 1 - }, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 1; - level = 2 - }, -/turf/simulated/floor/wood/walnut, -/area/crew_quarters/lounge) -"SR" = ( -/obj/machinery/portable_atmospherics/powered/pump/filled, -/obj/machinery/alarm{ - pixel_y = 24 - }, -/turf/simulated/floor/tiled/monotile, -/area/maintenance/fourthdeck/forestarboard) -"SS" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/mining{ - name = "Supply Office" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/steel_ridged, -/area/quartermaster/office) -"ST" = ( -/obj/machinery/light{ - dir = 1 - }, -/obj/structure/table/standard{ - name = "plastic table frame" - }, -/obj/item/paper_bin{ - pixel_x = -3; - pixel_y = 7 - }, -/obj/random/clipboard, -/obj/item/stamp/deckoff, -/obj/item/pen{ - pixel_x = 4; - pixel_y = 4 - }, -/obj/item/pen/red{ - pixel_x = 2; - pixel_y = 6 - }, -/obj/machinery/button/blast_door{ - id_tag = "do_office"; - name = "DO Shutter Control"; - pixel_x = 6; - pixel_y = 24 - }, -/obj/effect/floor_decal/corner/brown/mono, -/obj/item/device/radio/intercom/department/security{ - dir = 8; - pixel_x = 21 - }, -/turf/simulated/floor/tiled/monotile, -/area/quartermaster/deckchief) -"SU" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/floor_decal/corner/red{ - dir = 4 - }, -/obj/effect/floor_decal/corner/white{ - dir = 1 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/fourthdeck/fore) -"SV" = ( -/obj/structure/closet, -/obj/random/maintenance/solgov, -/obj/random/maintenance/solgov, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/floor/tiled/techmaint, -/area/maintenance/fourthdeck/forestarboard) -"SW" = ( -/obj/effect/floor_decal/corner/blue/diagonal, -/obj/machinery/power/apc{ - dir = 1; - name = "north bump"; - pixel_y = 24 - }, -/obj/structure/cable/green{ - d2 = 2; - icon_state = "0-2" - }, -/turf/simulated/floor/tiled/white, -/area/crew_quarters/laundry) -"SX" = ( -/obj/structure/catwalk, -/obj/structure/cable/green{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 4 - }, -/obj/structure/disposalpipe/segment, -/obj/random/trash, -/turf/simulated/floor/plating, -/area/maintenance/fourthdeck/starboard) -"SY" = ( -/obj/random/obstruction, -/turf/simulated/floor/plating, -/area/hallway/primary/fourthdeck/aft) -"SZ" = ( -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/door/airlock/glass/command{ - name = "E.V.A. Miscellaneous Suit Storage" - }, -/obj/machinery/door/firedoor, -/turf/simulated/floor/tiled/steel_ridged, -/area/eva) -"Ta" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/effect/landmark{ - name = "lightsout" - }, -/obj/structure/disposalpipe/segment{ - dir = 2; - icon_state = "pipe-c" - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/fourthdeck/aft) -"Tb" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 6 - }, -/obj/machinery/atmospherics/unary/vent_pump/high_volume/shuttle{ - dir = 1; - id_tag = "rescue_shuttle_dock_pump" - }, -/obj/item/device/radio/intercom/hailing{ - dir = 8; - pixel_x = 24 - }, -/turf/simulated/floor/plating, -/area/hallway/primary/fourthdeck/aft) -"Tf" = ( -/obj/structure/catwalk, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/turf/simulated/floor/plating, -/area/maintenance/fourthdeck/aft) -"Tg" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/simulated/wall/prepainted, -/area/quartermaster/sorting) -"Ti" = ( -/obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/floor/tiled/techmaint, -/area/maintenance/fourthdeck/forestarboard) -"Tj" = ( -/obj/structure/catwalk, -/obj/structure/disposalpipe/segment{ - dir = 2; - icon_state = "pipe-c" - }, -/turf/simulated/floor/plating, -/area/maintenance/fourthdeck/aft) -"Tm" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/techmaint, -/area/quartermaster/hangar/catwalks_starboard) -"To" = ( -/obj/effect/floor_decal/industrial/warning, -/turf/simulated/floor/plating, -/area/maintenance/fourthdeck/aft) -"Tp" = ( -/obj/structure/railing/mapped{ - dir = 8; - icon_state = "railing0-1" - }, -/turf/simulated/floor/shuttle_ceiling/torch/air, -/area/quartermaster/hangar/catwalks_starboard) -"Tr" = ( -/obj/effect/floor_decal/corner/brown/half{ - dir = 8 - }, -/obj/machinery/requests_console{ - department = "Cargo Bay"; - departmentType = 2; - pixel_x = -30 - }, -/turf/simulated/floor/tiled/monotile, -/area/quartermaster/office) -"Ts" = ( -/obj/structure/bed/chair/office/comfy/purple, -/obj/effect/floor_decal/corner/mauve{ - dir = 5 - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/machinery/light{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/turf/simulated/floor/tiled, -/area/command/pathfinder) -"Tt" = ( -/obj/structure/closet/emcloset, -/obj/effect/floor_decal/industrial/outline/grey, -/obj/random/single/lighter, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/fourthdeck/foreport) -"Tu" = ( -/obj/machinery/cryopod, -/obj/machinery/embedded_controller/radio/simple_docking_controller/escape_pod{ - frequency = 1380; - id_tag = "escape_pod_6"; - name = "escape pod one controller"; - pixel_y = 32; - tag_door = "escape_pod_6_hatch" - }, -/obj/item/device/radio/intercom{ - dir = 8; - pixel_x = 21 - }, -/turf/simulated/floor/tiled/monotile, -/area/shuttle/escape_pod6/station) -"Tv" = ( -/obj/structure/sign/directions/science{ - dir = 1; - pixel_y = 3 - }, -/obj/structure/sign/directions/infirmary{ - dir = 1; - pixel_y = -4 - }, -/turf/simulated/wall/prepainted, -/area/storage/primary) -"Tx" = ( -/obj/effect/floor_decal/spline/fancy/wood{ - dir = 1 - }, -/obj/machinery/firealarm{ - dir = 1; - pixel_y = -24 - }, -/turf/simulated/floor/wood/walnut, -/area/crew_quarters/lounge) -"Tz" = ( -/obj/structure/table/standard, -/obj/machinery/recharger, -/obj/item/device/radio/intercom{ - pixel_y = 23 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/command/captainmess) -"TA" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/fourthdeck/fore) -"TB" = ( -/obj/random/maintenance/solgov/clean, -/obj/machinery/light, -/obj/structure/closet/secure_closet{ - name = "Security Equipment Locker"; - req_access = list("ACCESS_SECURITY") - }, -/obj/machinery/alarm{ - dir = 4; - pixel_x = -25 - }, -/obj/effect/floor_decal/corner/red/mono, -/obj/effect/floor_decal/industrial/outline/grey, -/obj/random_multi/single_item/boombox, -/obj/item/device/binoculars, -/turf/simulated/floor/tiled/dark/monotile, -/area/security/hangcheck) -"TD" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/catwalk, -/obj/machinery/alarm{ - dir = 4; - pixel_x = -32 - }, -/turf/simulated/floor/plating, -/area/maintenance/fourthdeck/aft) -"TE" = ( -/obj/machinery/newscaster/security_unit{ - pixel_y = -32 - }, -/obj/effect/floor_decal/corner/red/mono, -/obj/effect/floor_decal/industrial/outline/grey, -/obj/machinery/papershredder, -/turf/simulated/floor/tiled/dark/monotile, -/area/security/hangcheck) -"TH" = ( -/obj/effect/floor_decal/corner/brown{ - dir = 5 - }, -/obj/machinery/rotating_alarm/security_alarm, -/turf/simulated/floor/tiled, -/area/hallway/primary/fourthdeck/aft) -"TJ" = ( -/obj/structure/catwalk, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/plating, -/area/maintenance/fourthdeck/foreport) -"TM" = ( -/obj/structure/railing/mapped{ - dir = 1; - icon_state = "railing0-1" - }, -/obj/structure/railing/mapped{ - dir = 4; - icon_state = "railing0-1" - }, -/turf/simulated/open, -/area/quartermaster/hangar/catwalks_starboard) -"TN" = ( -/obj/machinery/door/airlock/external{ - frequency = 1331; - icon_state = "closed"; - id_tag = "rescue_shuttle_dock_outer"; - locked = 1; - name = "Docking Port Airlock" - }, -/obj/machinery/shield_diffuser, -/turf/simulated/floor/plating, -/area/hallway/primary/fourthdeck/aft) -"TO" = ( -/obj/effect/floor_decal/corner/brown{ - dir = 9 - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/structure/closet/secure_closet/deckofficer, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/tiled, -/area/quartermaster/deckchief) -"TP" = ( -/obj/random/trash, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/fourthdeck/aft) -"TQ" = ( -/obj/structure/grille/broken, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/techfloor/grid, -/area/maintenance/fourthdeck/aft) -"TS" = ( -/turf/simulated/open, -/area/quartermaster/expedition/storage) -"TT" = ( -/obj/effect/wallframe_spawn/reinforced/polarized/no_grille{ - id = "pathfinder_office" - }, -/obj/machinery/door/firedoor, -/turf/simulated/floor/plating, -/area/command/pathfinder) -"TU" = ( -/obj/machinery/door/airlock/civilian{ - name = "Commissary Counter" - }, -/turf/simulated/floor/tiled/steel_ridged, -/area/crew_quarters/commissary) -"TW" = ( -/obj/structure/railing/mapped{ - dir = 8; - icon_state = "railing0-1" - }, -/turf/simulated/floor/plating, -/area/maintenance/fourthdeck/port) -"TX" = ( -/obj/machinery/door/airlock/external{ - frequency = 1380; - icon_state = "closed"; - id_tag = "admin_shuttle_dock_outer"; - locked = 1; - name = "Docking Port Airlock" - }, -/obj/machinery/shield_diffuser, -/obj/effect/shuttle_landmark/skrellscoutshuttle/altdock, -/turf/simulated/floor/plating, -/area/hallway/primary/fourthdeck/aft) -"TY" = ( -/turf/simulated/floor/carpet, -/area/crew_quarters/lounge) -"Ub" = ( -/turf/simulated/wall/prepainted, -/area/janitor) -"Ud" = ( -/obj/machinery/embedded_controller/radio/simple_docking_controller/escape_pod_berth{ - dir = 4; - frequency = 1380; - id_tag = "escape_pod_8_berth"; - name = "escape pod three berth controller"; - pixel_x = -24; - pixel_y = -24; - tag_door = "escape_pod_8_berth_hatch" - }, -/obj/effect/floor_decal/corner/green{ - dir = 9 - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 8; - icon_state = "warning" - }, -/turf/simulated/floor/tiled/dark, -/area/hallway/primary/fourthdeck/aft) -"Uh" = ( -/obj/effect/floor_decal/corner/brown/half, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/simulated/floor/tiled/monotile, -/area/quartermaster/storage/upper) -"Ui" = ( -/obj/machinery/power/apc{ - dir = 1; - name = "north bump"; - pixel_y = 24 - }, -/obj/structure/cable/green{ - d2 = 2; - icon_state = "0-2" - }, -/turf/simulated/floor/tiled/steel_grid, -/area/janitor/storage) -"Uj" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/carpet, -/area/crew_quarters/lounge) -"Ul" = ( -/obj/machinery/light{ - dir = 1 - }, -/obj/random/vendor, -/turf/simulated/floor/tiled, -/area/crew_quarters/commissary) -"Um" = ( -/obj/machinery/portable_atmospherics/powered/scrubber, -/obj/effect/floor_decal/industrial/outline/grey, -/obj/machinery/alarm{ - pixel_y = 24 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/hallway/primary/fourthdeck/aft) -"Un" = ( -/obj/effect/floor_decal/spline/fancy/wood{ - dir = 8 - }, -/obj/effect/floor_decal/spline/fancy/wood/corner, -/turf/simulated/floor/lino, -/area/command/captainmess) -"Uo" = ( -/obj/effect/floor_decal/corner/blue/three_quarters{ - dir = 1 - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark, -/area/command/captainmess) -"Up" = ( -/obj/effect/floor_decal/corner/red{ - dir = 10 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/fourthdeck/center) -"Uq" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/effect/floor_decal/corner/red/half, -/turf/simulated/floor/tiled/monotile, -/area/hallway/primary/fourthdeck/center) -"Ur" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/fourthdeck/aft) -"Uu" = ( -/turf/simulated/wall/r_wall/hull, -/area/crew_quarters/lounge) -"Uv" = ( -/obj/effect/catwalk_plated, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/hallway/primary/fourthdeck/fore) -"Ux" = ( -/obj/machinery/door/airlock/maintenance{ - name = "Lounge Maintenance" - }, -/obj/machinery/door/firedoor, -/obj/structure/disposalpipe/segment{ - dir = 2; - icon_state = "pipe-c" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/crew_quarters/lounge) -"Uy" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/light{ - dir = 1 - }, -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/obj/item/device/radio/intercom{ - pixel_y = 23 - }, -/obj/effect/floor_decal/corner/red/half{ - dir = 1 - }, -/turf/simulated/floor/tiled/monotile, -/area/hallway/primary/fourthdeck/fore) -"UA" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/railing/mapped{ - dir = 1; - icon_state = "railing0-1" - }, -/turf/simulated/floor/plating, -/area/maintenance/fourthdeck/forestarboard) -"UB" = ( -/obj/machinery/portable_atmospherics/powered/pump/filled, -/turf/simulated/floor/tiled/monotile, -/area/maintenance/fourthdeck/forestarboard) -"UC" = ( -/obj/effect/floor_decal/industrial/outline/grey, -/obj/machinery/light/small{ - dir = 1 - }, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/fourthdeck/forestarboard) -"UD" = ( -/obj/machinery/bookbinder, -/turf/simulated/floor/wood/walnut, -/area/crew_quarters/lounge) -"UE" = ( -/obj/structure/catwalk, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/turf/simulated/floor/plating, -/area/maintenance/fourthdeck/forestarboard) -"UH" = ( -/obj/machinery/door/airlock/hatch/maintenance, -/obj/machinery/door/firedoor, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/hallway/primary/fourthdeck/aft) -"UI" = ( -/obj/structure/table/standard, -/obj/item/paper_bin{ - pixel_x = -3; - pixel_y = 7 - }, -/obj/item/pen, -/obj/machinery/camera/network/supply{ - c_tag = "Supply Office - Desk"; - dir = 8 - }, -/turf/simulated/floor/tiled, -/area/quartermaster/office) -"UJ" = ( -/obj/structure/railing/mapped, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/meter, -/turf/simulated/floor/plating, -/area/maintenance/fourthdeck/forestarboard) -"UL" = ( -/obj/machinery/door/airlock/maintenance{ - name = "Cargo Maintenance" - }, -/obj/machinery/door/firedoor, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled/steel_ridged, -/area/quartermaster/sorting) -"UM" = ( -/obj/effect/catwalk_plated, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 1 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/hallway/primary/fourthdeck/aft) -"UN" = ( -/turf/simulated/wall/prepainted, -/area/quartermaster/hangar/catwalks_port) -"UQ" = ( -/obj/structure/catwalk, -/obj/structure/ladder, -/turf/simulated/floor/tiled/techfloor, -/area/quartermaster/expedition/storage) -"UR" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden{ - dir = 4 - }, -/obj/structure/disposalpipe/junction{ - dir = 8; - icon_state = "pipe-j2" - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/hallway/primary/fourthdeck/aft) -"US" = ( -/obj/machinery/embedded_controller/radio/simple_docking_controller/escape_pod_berth{ - dir = 4; - frequency = 1380; - id_tag = "escape_pod_6_berth"; - name = "escape pod one berth controller"; - pixel_x = -24; - pixel_y = 24; - tag_door = "escape_pod_6_berth_hatch" - }, -/obj/effect/floor_decal/corner/green{ - dir = 9 - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 8; - icon_state = "warning" - }, -/turf/simulated/floor/tiled/dark, -/area/hallway/primary/fourthdeck/aft) -"UT" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 5 - }, -/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{ - id_tag = "admin_shuttle_dock_pump" - }, -/obj/item/device/radio/intercom/hailing{ - dir = 8; - pixel_x = 24 - }, -/turf/simulated/floor/plating, -/area/hallway/primary/fourthdeck/aft) -"UV" = ( -/obj/structure/railing/mapped{ - dir = 4; - icon_state = "railing0-1" - }, -/obj/structure/railing/mapped, -/obj/machinery/atmospherics/pipe/simple/hidden, -/turf/simulated/floor/plating, -/area/maintenance/fourthdeck/starboard) -"UX" = ( -/obj/effect/floor_decal/scglogo{ - icon_state = "center-left" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/fourthdeck/center) -"UY" = ( -/obj/effect/catwalk_plated, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/hallway/primary/fourthdeck/center) -"UZ" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/effect/catwalk_plated, -/turf/simulated/floor/plating, -/area/hallway/primary/fourthdeck/aft) -"Va" = ( -/obj/structure/catwalk, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, -/turf/simulated/floor/plating, -/area/maintenance/fourthdeck/forestarboard) -"Vb" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 1; - icon_state = "warning" - }, -/obj/machinery/light/spot{ - dir = 8 - }, -/turf/simulated/floor/tiled, -/area/quartermaster/storage/upper) -"Vd" = ( -/obj/structure/disposalpipe/segment, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/fourthdeck/foreport) -"Vf" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, -/turf/simulated/floor/tiled/monotile, -/area/hallway/primary/fourthdeck/aft) -"Vh" = ( -/obj/item/reagent_containers/glass/bucket, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/waterstore) -"Vi" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/floor_decal/corner/brown{ - dir = 8 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/fourthdeck/aft) -"Vj" = ( -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/fourthdeck/aft) -"Vm" = ( -/obj/effect/floor_decal/corner/brown{ - dir = 5 - }, -/obj/machinery/computer/modular/preset/dock{ - dir = 4; - icon_state = "console" - }, -/turf/simulated/floor/tiled, -/area/quartermaster/deckchief) -"Vo" = ( -/obj/structure/railing/mapped{ - dir = 8; - icon_state = "railing0-1" - }, -/turf/simulated/open, -/area/quartermaster/storage/upper) -"Vp" = ( -/obj/effect/floor_decal/corner/yellow{ - dir = 9 - }, -/obj/machinery/alarm{ - dir = 1; - pixel_y = -22 - }, -/turf/simulated/floor/tiled/dark, -/area/eva) -"Vr" = ( -/turf/simulated/wall/r_wall/hull, -/area/maintenance/fourthdeck/aft) -"Vt" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/fourthdeck/port) -"Vv" = ( -/obj/structure/disposalpipe/trunk{ - dir = 1 - }, -/obj/structure/disposaloutlet, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled/dark/monotile, -/area/quartermaster/sorting) -"Vw" = ( -/obj/effect/floor_decal/corner/brown/half{ - dir = 1 - }, -/obj/structure/filingcabinet/filingcabinet, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled/monotile, -/area/quartermaster/office) -"Vx" = ( -/obj/effect/catwalk_plated, -/obj/machinery/atmospherics/pipe/manifold/hidden{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/maintenance/fourthdeck/forestarboard) -"Vy" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 1 - }, -/obj/structure/janitorialcart, -/obj/item/mop, -/obj/machinery/light/small, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/light_switch{ - pixel_y = -24 - }, -/turf/simulated/floor/tiled/steel_grid, -/area/janitor) -"VA" = ( -/obj/effect/floor_decal/corner/brown{ - dir = 9 - }, -/obj/structure/ladder, -/obj/effect/catwalk_plated, -/obj/machinery/alarm{ - dir = 4; - pixel_x = -22 - }, -/turf/simulated/floor/tiled/steel_grid, -/area/hallway/primary/fourthdeck/aft) -"VB" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/fourthdeck/foreport) -"VC" = ( -/obj/structure/table/standard{ - name = "plastic table frame" - }, -/obj/effect/floor_decal/corner/brown/half{ - dir = 1 - }, -/obj/item/folder/yellow, -/obj/item/stamp/supply, -/obj/item/stamp/denied{ - pixel_x = 4; - pixel_y = -2 - }, -/obj/item/device/radio/intercom{ - pixel_y = 23 - }, -/obj/machinery/light{ - dir = 1 - }, -/turf/simulated/floor/tiled/monotile, -/area/quartermaster/office) -"VD" = ( -/obj/structure/railing/mapped, -/obj/machinery/atmospherics/valve/shutoff/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/maintenance/fourthdeck/forestarboard) -"VF" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 1; - icon_state = "warning" - }, -/obj/structure/catwalk, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/maintenance/fourthdeck/aft) -"VG" = ( -/obj/effect/floor_decal/industrial/outline/grey, -/obj/machinery/portable_atmospherics/canister/carbon_dioxide, -/turf/simulated/floor/tiled/dark/monotile, -/area/eva) -"VI" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 1 - }, -/obj/machinery/camera/network/command{ - c_tag = "EVA - Miscellaneous Suit Storage"; - dir = 8 - }, -/turf/simulated/floor/tiled/dark, -/area/eva) -"VJ" = ( -/obj/effect/catwalk_plated, -/obj/structure/cable/green{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/disposalpipe/segment{ - dir = 8; - icon_state = "pipe-c" - }, -/turf/simulated/floor/plating, -/area/hallway/primary/fourthdeck/center) -"VL" = ( -/obj/machinery/camera/network/fourth_deck{ - c_tag = "Fourth Deck Hallway - Ladders"; - dir = 1 - }, -/obj/effect/floor_decal/corner/brown{ - dir = 10 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/fourthdeck/aft) -"VO" = ( -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/structure/closet/emcloset, -/turf/simulated/floor/tiled/monotile, -/area/hallway/primary/fourthdeck/center) -"VQ" = ( -/obj/structure/lattice, -/turf/simulated/open, -/area/maintenance/fourthdeck/starboard) -"VR" = ( -/obj/structure/catwalk, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/maintenance/fourthdeck/forestarboard) -"VS" = ( -/obj/machinery/light{ - dir = 1 - }, -/obj/structure/disposalpipe/trunk{ - dir = 4 - }, -/obj/machinery/disposal, -/obj/effect/floor_decal/industrial/hatch/yellow, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/crew_quarters/commissary) -"VU" = ( -/obj/effect/floor_decal/corner/mauve{ - dir = 10 - }, -/turf/simulated/floor/tiled, -/area/command/pathfinder) -"VW" = ( -/turf/simulated/wall/prepainted, -/area/maintenance/waterstore) -"VY" = ( -/obj/structure/lattice, -/obj/structure/disposalpipe/down{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/zpipe/down/cyan{ - dir = 8 - }, -/turf/simulated/open, -/area/maintenance/fourthdeck/port) -"Wa" = ( -/obj/structure/catwalk, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/maintenance/fourthdeck/starboard) -"Wc" = ( -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled, -/area/crew_quarters/commissary) -"Wd" = ( -/obj/machinery/firealarm{ - pixel_y = 24 - }, -/turf/simulated/open, -/area/quartermaster/storage/upper) -"We" = ( -/obj/structure/cable/green{ - d2 = 4; - icon_state = "0-4" - }, -/obj/structure/cable/green, -/obj/machinery/power/apc{ - dir = 8; - name = "west bump"; - pixel_x = -24 - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/substation/fourthdeck) -"Wf" = ( -/obj/structure/railing/mapped, -/turf/simulated/floor/shuttle_ceiling/torch/air, -/area/quartermaster/hangar/catwalks_port) -"Wh" = ( -/obj/structure/bed/chair/comfy/brown{ - dir = 4 - }, -/turf/simulated/floor/carpet, -/area/crew_quarters/lounge) -"Wi" = ( -/obj/structure/sign/warning/moving_parts, -/turf/simulated/wall/prepainted, -/area/quartermaster/sorting) -"Wj" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden, -/turf/simulated/floor/tiled/monotile, -/area/shuttle/escape_pod8/station) -"Wk" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/command/pathfinder) -"Wl" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden, -/obj/effect/catwalk_plated/dark, -/obj/machinery/oxygen_pump{ - pixel_x = 32 - }, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/plating, -/area/hallway/primary/fourthdeck/aft) -"Wm" = ( -/obj/effect/floor_decal/corner/green/mono, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/tiled/monotile, -/area/hallway/primary/fourthdeck/aft) -"Wn" = ( -/obj/structure/sign/directions/engineering{ - dir = 1; - pixel_y = 3 - }, -/obj/structure/sign/directions/evac{ - dir = 4; - pixel_y = -4 - }, -/turf/simulated/wall/prepainted, -/area/hallway/primary/fourthdeck/aft) -"Wo" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/mining{ - id_tag = "hangarexit"; - name = "Hangar Catwalk Access" - }, -/turf/simulated/floor/tiled/steel_ridged, -/area/quartermaster/hangar/catwalks_starboard) -"Wp" = ( -/obj/structure/disposalpipe/segment{ - dir = 2; - icon_state = "pipe-c" - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/fourthdeck/foreport) -"Wu" = ( -/obj/effect/floor_decal/corner/yellow{ - dir = 9 - }, -/turf/simulated/floor/tiled/dark, -/area/eva) -"Ww" = ( -/obj/structure/cable/green{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/catwalk, -/obj/machinery/alarm{ - pixel_y = 23 - }, -/turf/simulated/floor/plating, -/area/maintenance/fourthdeck/foreport) -"Wx" = ( -/obj/effect/floor_decal/spline/fancy/wood{ - dir = 4 - }, -/obj/effect/floor_decal/spline/fancy/wood{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/lino, -/area/command/captainmess) -"Wy" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/turf/simulated/floor/tiled/steel_grid, -/area/janitor/storage) -"Wz" = ( -/obj/structure/cable/green{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, -/obj/structure/disposalpipe/segment{ - dir = 4; - icon_state = "pipe-c" - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/fourthdeck/starboard) -"WA" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/railing/mapped{ - dir = 8; - icon_state = "railing0-1" - }, -/obj/structure/railing/mapped{ - dir = 1; - icon_state = "railing0-1" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/maintenance/fourthdeck/port) -"WB" = ( -/obj/effect/shuttle_landmark/admin/out, -/turf/space, -/area/space) -"WC" = ( -/obj/effect/floor_decal/corner/mauve{ - dir = 5 - }, -/obj/structure/disposalpipe/segment, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/tiled, -/area/hallway/primary/fourthdeck/center) -"WD" = ( -/obj/structure/synthesized_instrument/synthesizer/minimoog, -/obj/item/device/radio/intercom/entertainment{ - dir = 4; - pixel_x = -22 - }, -/turf/simulated/floor/carpet, -/area/crew_quarters/lounge) -"WF" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/item/device/radio/intercom{ - dir = 4; - pixel_x = -22 - }, -/turf/simulated/floor/tiled/steel_grid, -/area/janitor) -"WG" = ( -/obj/structure/catwalk, -/obj/structure/disposalpipe/segment{ - dir = 8; - icon_state = "pipe-c" - }, -/turf/simulated/floor/plating, -/area/maintenance/fourthdeck/aft) -"WH" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/tiled/monotile, -/area/hallway/primary/fourthdeck/fore) -"WI" = ( -/obj/structure/catwalk, -/turf/simulated/floor/shuttle_ceiling/torch/air, -/area/quartermaster/hangar/catwalks_starboard) -"WJ" = ( -/obj/machinery/conveyor{ - dir = 8; - id = "packageSort1" - }, -/obj/random/junk, -/obj/machinery/light/spot, -/turf/simulated/floor/plating, -/area/quartermaster/sorting) -"WK" = ( -/obj/random_multi/single_item/boombox, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/fourthdeck/aft) -"WM" = ( -/obj/structure/catwalk, -/turf/simulated/open, -/area/quartermaster/hangar/catwalks_port) -"WN" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/railing/mapped{ - dir = 4; - icon_state = "railing0-1" - }, -/obj/structure/railing/mapped{ - dir = 1; - icon_state = "railing0-1" - }, -/obj/machinery/atmospherics/valve/shutoff/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/valve/shutoff/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/maintenance/fourthdeck/port) -"WO" = ( -/obj/structure/railing/mapped, -/obj/structure/railing/mapped{ - dir = 8; - icon_state = "railing0-1" - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/plating, -/area/maintenance/fourthdeck/aft) -"WQ" = ( -/obj/machinery/door/firedoor, -/obj/effect/floor_decal/corner/brown, -/turf/simulated/floor/tiled/monotile, -/area/hallway/primary/fourthdeck/center) -"WR" = ( -/obj/effect/floor_decal/corner/mauve{ - dir = 5 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/fourthdeck/center) -"WS" = ( -/obj/effect/floor_decal/corner/brown/half, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/monotile, -/area/hallway/primary/fourthdeck/aft) -"WU" = ( -/obj/structure/table/marble, -/obj/item/storage/box/glasses/wine, -/obj/item/reagent_containers/food/drinks/glass2/carafe, -/turf/simulated/floor/tiled/dark/monotile, -/area/command/captainmess) -"WW" = ( -/obj/machinery/door/airlock/mining{ - name = "Deck Chief" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/disposalpipe/segment, -/obj/machinery/door/firedoor, -/turf/simulated/floor/tiled/steel_ridged, -/area/quartermaster/deckchief) -"WX" = ( -/obj/effect/floor_decal/corner/green/mono, -/turf/simulated/floor/tiled/dark/monotile, -/area/hallway/primary/fourthdeck/aft) -"WY" = ( -/obj/effect/floor_decal/industrial/outline/grey, -/obj/machinery/portable_atmospherics/powered/pump/filled, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/fourthdeck/port) -"WZ" = ( -/turf/simulated/wall/r_wall/hull, -/area/hallway/primary/fourthdeck/fore) -"Xc" = ( -/obj/machinery/atmospherics/pipe/simple/hidden, -/obj/effect/catwalk_plated/dark, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/plating, -/area/hallway/primary/fourthdeck/aft) -"Xd" = ( -/obj/structure/closet/l3closet/janitor, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled/steel_grid, -/area/janitor/storage) -"Xf" = ( -/obj/structure/sign/warning/fall, -/turf/simulated/wall/prepainted, -/area/maintenance/fourthdeck/starboard) -"Xg" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/bed/chair/wood/wings/mahogany{ - dir = 4 - }, -/turf/simulated/floor/carpet/blue2, -/area/command/captainmess) -"Xh" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 1 - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/fourthdeck/forestarboard) -"Xj" = ( -/obj/structure/railing/mapped, -/obj/structure/railing/mapped{ - dir = 4; - icon_state = "railing0-1" - }, -/obj/structure/lattice, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/cable{ - d1 = 32; - icon_state = "32-1" - }, -/turf/simulated/open, -/area/maintenance/fourthdeck/starboard) -"Xk" = ( -/obj/structure/sign/directions/science{ - dir = 1; - pixel_y = 3 - }, -/obj/structure/sign/directions/infirmary{ - dir = 1; - pixel_y = -4 - }, -/obj/effect/wallframe_spawn/no_grille, -/turf/simulated/floor/plating, -/area/storage/primary) -"Xl" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 4 - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/fourthdeck/forestarboard) -"Xm" = ( -/obj/structure/catwalk, -/obj/structure/cable/green{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/obj/structure/disposalpipe/segment{ - dir = 1; - icon_state = "pipe-c" - }, -/turf/simulated/floor/plating, -/area/maintenance/fourthdeck/forestarboard) -"Xn" = ( -/turf/simulated/wall/prepainted, -/area/hallway/primary/fourthdeck/aft) -"Xo" = ( -/obj/effect/floor_decal/corner/mauve{ - dir = 1 - }, -/turf/simulated/floor/tiled/monotile, -/area/hallway/primary/fourthdeck/center) -"Xr" = ( -/obj/effect/floor_decal/corner/brown/half, -/obj/item/device/radio/intercom{ - dir = 4; - pixel_x = -21 - }, -/turf/simulated/floor/tiled/monotile, -/area/quartermaster/storage/upper) -"Xs" = ( -/obj/effect/catwalk_plated, -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/maintenance/fourthdeck/forestarboard) -"Xt" = ( -/obj/machinery/light/small{ - dir = 1 - }, -/obj/machinery/camera/network/fourth_deck{ - c_tag = "Fourth Deck - Lounge Fore"; - name = "security camera" - }, -/turf/simulated/floor/carpet, -/area/crew_quarters/lounge) -"Xv" = ( -/obj/effect/floor_decal/corner/brown{ - dir = 10 - }, -/obj/machinery/camera/network/fourth_deck{ - c_tag = "Fourth Deck Hallway - Aft"; - dir = 1 - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/fourthdeck/aft) -"Xw" = ( -/obj/structure/railing/mapped{ - dir = 4; - icon_state = "railing0-1" - }, -/turf/simulated/floor/plating, -/area/maintenance/fourthdeck/port) -"Xz" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/firealarm{ - pixel_y = 24 - }, -/obj/machinery/light{ - dir = 1 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/floor_decal/corner/red{ - dir = 4 - }, -/obj/effect/floor_decal/corner/white{ - dir = 1 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/fourthdeck/fore) -"XA" = ( -/obj/effect/floor_decal/corner/brown{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 4 - }, -/obj/structure/cable/green{ - d2 = 2; - icon_state = "0-2" - }, -/obj/machinery/power/apc{ - dir = 4; - name = "east bump"; - pixel_x = 24 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled, -/area/quartermaster/office) -"XB" = ( -/obj/structure/catwalk, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 1; - icon_state = "pipe-c" - }, -/turf/simulated/floor/plating, -/area/maintenance/fourthdeck/foreport) -"XC" = ( -/obj/structure/catwalk, -/obj/machinery/light/small{ - dir = 4; - pixel_y = 8 - }, -/turf/simulated/open, -/area/quartermaster/expedition/storage) -"XD" = ( -/obj/machinery/door/airlock/civilian{ - name = "Commissary Counter" - }, -/obj/machinery/door/firedoor, -/turf/simulated/floor/tiled/steel_ridged, -/area/crew_quarters/commissary) -"XF" = ( -/obj/effect/floor_decal/corner/blue/diagonal, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/turf/simulated/floor/tiled/white, -/area/crew_quarters/laundry) -"XG" = ( -/obj/structure/catwalk, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/maintenance/fourthdeck/forestarboard) -"XH" = ( -/obj/effect/floor_decal/corner/brown/half{ - dir = 8 - }, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 4 - }, -/turf/simulated/floor/tiled/monotile, -/area/crew_quarters/commissary) -"XI" = ( -/obj/structure/catwalk, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/plating, -/area/maintenance/fourthdeck/forestarboard) -"XL" = ( -/obj/structure/disposalpipe/junction{ - dir = 2; - icon_state = "pipe-j2" - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/fourthdeck/port) -"XM" = ( -/obj/effect/floor_decal/spline/fancy/wood{ - dir = 4 - }, -/obj/effect/floor_decal/spline/fancy/wood{ - dir = 8 - }, -/turf/simulated/floor/lino, -/area/command/captainmess) -"XN" = ( -/obj/effect/floor_decal/corner/brown/mono, -/obj/machinery/papershredder, -/obj/machinery/alarm{ - dir = 8; - pixel_x = 21 - }, -/obj/machinery/newscaster/security_unit{ - pixel_y = -32 - }, -/turf/simulated/floor/tiled/monotile, -/area/quartermaster/deckchief) -"XP" = ( -/obj/effect/floor_decal/corner/brown/mono, -/obj/effect/floor_decal/industrial/hatch/yellow, -/obj/machinery/disposal, -/obj/machinery/firealarm{ - dir = 1; - pixel_y = -24 - }, -/obj/structure/disposalpipe/trunk{ - dir = 4 - }, -/turf/simulated/floor/tiled/monotile, -/area/quartermaster/deckchief) -"XQ" = ( -/obj/machinery/door/blast/shutters{ - density = 0; - dir = 8; - icon_state = "shutter0"; - id_tag = "hangar_checkpoint_shutters"; - name = "Hangar Deck Checkpoint Shutters"; - opacity = 0 - }, -/obj/structure/cable/green, -/obj/effect/wallframe_spawn/reinforced, -/turf/simulated/floor/plating, -/area/security/hangcheck) -"XS" = ( -/obj/effect/floor_decal/corner/brown/mono, -/obj/machinery/alarm{ - dir = 4; - pixel_x = -22 - }, -/turf/simulated/floor/tiled/monotile, -/area/crew_quarters/commissary) -"XT" = ( -/turf/simulated/wall/r_wall/prepainted, -/area/maintenance/fourthdeck/starboard) -"XV" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/hologram/holopad, -/obj/structure/cable/green{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/turf/simulated/floor/tiled/monotile, -/area/hallway/primary/fourthdeck/center) -"XW" = ( -/obj/structure/table/woodentable, -/obj/machinery/chemical_dispenser/bar_soft/full, -/obj/item/modular_computer/telescreen/preset/generic{ - pixel_x = 32 - }, -/turf/simulated/floor/wood/walnut, -/area/crew_quarters/lounge) -"XX" = ( -/obj/effect/floor_decal/corner/brown{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/disposalpipe/segment, -/obj/effect/floor_decal/industrial/warning{ - dir = 8 - }, -/turf/simulated/floor/tiled, -/area/quartermaster/storage/upper) -"XY" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/floor_decal/industrial/warning, -/obj/effect/floor_decal/industrial/warning{ - dir = 1; - icon_state = "warning" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/turf/simulated/floor/tiled/dark, -/area/quartermaster/sorting) -"XZ" = ( -/obj/item/device/flashlight/lamp/green, -/obj/structure/table/woodentable, -/turf/simulated/floor/carpet, -/area/crew_quarters/lounge) -"Ya" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden, -/obj/effect/catwalk_plated/dark, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/plating, -/area/hallway/primary/fourthdeck/aft) -"Yb" = ( -/obj/effect/floor_decal/industrial/outline/grey, -/obj/machinery/suit_cycler/security/alt, -/turf/simulated/floor/tiled/dark/monotile, -/area/eva) -"Yc" = ( -/obj/random/obstruction, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/fourthdeck/aft) -"Yd" = ( -/obj/machinery/door/firedoor, -/obj/effect/wallframe_spawn/reinforced/no_grille, -/turf/simulated/floor/plating, -/area/crew_quarters/lounge) -"Ye" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/catwalk_plated, -/turf/simulated/floor/plating, -/area/storage/primary) -"Yf" = ( -/turf/simulated/wall/prepainted, -/area/quartermaster/storage/upper) -"Yj" = ( -/obj/machinery/door/firedoor, -/obj/effect/wallframe_spawn/reinforced/hull, -/turf/simulated/floor/plating, -/area/hallway/primary/fourthdeck/aft) -"Yk" = ( -/turf/simulated/floor/tiled/monotile, -/area/maintenance/fourthdeck/forestarboard) -"Yl" = ( -/obj/effect/floor_decal/industrial/outline/grey, -/obj/machinery/light/small{ - dir = 1 - }, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/fourthdeck/foreport) -"Ym" = ( -/obj/effect/floor_decal/corner/brown{ - dir = 9 - }, -/obj/structure/ladder, -/obj/effect/catwalk_plated, -/obj/machinery/light{ - dir = 8 - }, -/turf/simulated/floor/tiled/steel_grid, -/area/hallway/primary/fourthdeck/aft) -"Yn" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/catwalk_plated, -/turf/simulated/floor/plating, -/area/hallway/primary/fourthdeck/center) -"Yr" = ( -/obj/effect/floor_decal/industrial/outline/grey, -/obj/structure/table/steel, -/obj/random/junk, -/obj/random/junk, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/fourthdeck/foreport) -"Ys" = ( -/obj/structure/table/standard{ - name = "plastic table frame" - }, -/obj/item/stack/material/glass{ - pixel_x = 3; - pixel_y = 3 - }, -/obj/item/stack/material/steel, -/obj/effect/floor_decal/corner/brown/half, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled/monotile, -/area/quartermaster/office) -"Yt" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/cable{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/machinery/alarm{ - dir = 4; - pixel_x = -32 - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/substation/fourthdeck) -"Yu" = ( -/obj/effect/floor_decal/corner/yellow{ - dir = 9 - }, -/obj/effect/floor_decal/corner/blue{ - dir = 6 - }, -/turf/simulated/floor/tiled/dark, -/area/command/captainmess) -"Yv" = ( -/obj/structure/catwalk, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden, -/turf/simulated/floor/plating, -/area/maintenance/fourthdeck/forestarboard) -"Yw" = ( -/obj/machinery/shield_diffuser, -/obj/machinery/door/airlock/external/escapepod{ - id_tag = "escape_pod_6_berth_hatch"; - name = "Escape Pod One" - }, -/turf/simulated/floor/plating, -/area/hallway/primary/fourthdeck/aft) -"Yx" = ( -/obj/structure/railing/mapped{ - dir = 1; - icon_state = "railing0-1" - }, -/turf/simulated/open, -/area/hallway/primary/fourthdeck/fore) -"Yy" = ( -/obj/structure/cable/green, -/obj/machinery/power/apc{ - name = "south bump"; - pixel_y = -24 - }, -/obj/effect/floor_decal/corner/brown{ - dir = 10 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/fourthdeck/center) -"Yz" = ( -/obj/structure/disposalpipe/sortjunction/untagged/flipped, -/obj/effect/floor_decal/industrial/warning{ - dir = 1; - icon_state = "warning" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/universal{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/dark, -/area/quartermaster/sorting) -"YB" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/obj/effect/floor_decal/industrial/warning/corner, -/obj/machinery/light, -/obj/machinery/camera/network/fourth_deck{ - c_tag = "Fourth Deck - Ladders"; - dir = 1 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/fourthdeck/aft) -"YC" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/turf/simulated/floor/plating, -/area/maintenance/waterstore) -"YD" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 - }, -/turf/simulated/floor/carpet, -/area/crew_quarters/lounge) -"YE" = ( -/obj/machinery/firealarm{ - dir = 1; - pixel_y = -24 - }, -/obj/random/single/lighter, -/obj/structure/table/rack, -/turf/simulated/floor/tiled, -/area/crew_quarters/commissary) -"YF" = ( -/obj/machinery/light/small{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/fourthdeck/port) -"YG" = ( -/obj/effect/floor_decal/corner/blue/diagonal, -/obj/machinery/washing_machine, -/obj/machinery/light{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/crew_quarters/laundry) -"YH" = ( -/obj/effect/floor_decal/techfloor, -/obj/effect/floor_decal/techfloor{ - dir = 1 - }, -/obj/machinery/light/small{ - dir = 8 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/hallway/primary/fourthdeck/aft) -"YI" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden, -/obj/structure/disposalpipe/segment, -/obj/structure/cable{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/hallway/primary/fourthdeck/aft) -"YJ" = ( -/turf/simulated/wall/r_wall/prepainted, -/area/hallway/primary/fourthdeck/aft) -"YK" = ( -/obj/structure/sign/warning/docking_area{ - dir = 1 - }, -/turf/simulated/wall/r_wall/hull, -/area/hallway/primary/fourthdeck/fore) -"YL" = ( -/obj/effect/floor_decal/scglogo{ - icon_state = "top-center" - }, -/obj/machinery/atmospherics/unary/vent_pump/on, -/turf/simulated/floor/tiled, -/area/hallway/primary/fourthdeck/center) -"YN" = ( -/turf/simulated/wall/prepainted, -/area/janitor/storage) -"YQ" = ( -/obj/structure/railing/mapped{ - dir = 4; - icon_state = "railing0-1" - }, -/obj/structure/railing/mapped{ - dir = 1; - icon_state = "railing0-1" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/maintenance/fourthdeck/forestarboard) -"YR" = ( -/obj/effect/floor_decal/corner/red{ - dir = 1 - }, -/obj/effect/floor_decal/corner/white{ - dir = 8 - }, -/turf/simulated/floor/tiled/dark, -/area/hallway/primary/fourthdeck/aft) -"YS" = ( -/obj/machinery/firealarm{ - pixel_y = 24 - }, -/obj/machinery/light_switch{ - pixel_x = 10; - pixel_y = 32 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/quartermaster/office) -"YV" = ( -/obj/machinery/computer/modular/preset/engineering, -/obj/machinery/atmospherics/pipe/simple/hidden, -/obj/machinery/power/apc{ - dir = 8; - name = "west bump"; - pixel_x = -24 - }, -/obj/structure/cable/green{ - d2 = 2; - icon_state = "0-2" - }, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/fourthdeck/starboard) -"YX" = ( -/obj/structure/reagent_dispensers/watertank, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/floor/tiled/techmaint, -/area/maintenance/fourthdeck/forestarboard) -"YY" = ( -/obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/fourthdeck/starboard) -"YZ" = ( -/obj/structure/bed/chair/comfy/brown{ - dir = 4 - }, -/turf/simulated/floor/wood/walnut, -/area/crew_quarters/lounge) -"Za" = ( -/obj/structure/table/rack, -/obj/random/donkpocket_box, -/obj/machinery/light/small{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/maintenance/fourthdeck/forestarboard) -"Zb" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 10 - }, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/fourthdeck/starboard) -"Zc" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/simple/hidden, -/obj/effect/catwalk_plated/dark, -/turf/simulated/floor/plating, -/area/hallway/primary/fourthdeck/aft) -"Zd" = ( -/obj/structure/railing/mapped{ - dir = 1; - icon_state = "railing0-1" - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/command/captainmess) -"Ze" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/turf/simulated/floor/plating, -/area/maintenance/fourthdeck/foreport) -"Zg" = ( -/obj/effect/floor_decal/industrial/warning/corner, -/obj/structure/railing/mapped{ - dir = 8; - icon_state = "railing0-1" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, -/obj/random/trash, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/plating, -/area/maintenance/fourthdeck/starboard) -"Zi" = ( -/obj/structure/sign/poster/poraz, -/turf/simulated/wall/prepainted, -/area/crew_quarters/galley) -"Zj" = ( -/obj/effect/floor_decal/corner/red, -/obj/effect/floor_decal/corner/white{ - dir = 8 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/fourthdeck/fore) -"Zk" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/carpet, -/area/crew_quarters/lounge) -"Zl" = ( -/obj/structure/disposalpipe/segment{ - dir = 2; - icon_state = "pipe-c" - }, -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 1; - icon_state = "warningcorner" - }, -/obj/machinery/atmospherics/unary/vent_pump{ - controlled = 0; - dir = 8; - external_pressure_bound = 105; - icon_state = "map_vent_in"; - pump_direction = 0; - use_power = 1 - }, -/obj/structure/table/standard{ - name = "plastic table frame" - }, -/obj/item/device/destTagger{ - pixel_x = 4; - pixel_y = 3 - }, -/obj/item/stack/package_wrap/twenty_five, -/obj/item/hand_labeler, -/obj/item/wrapping_paper, -/obj/machinery/light/spot{ - dir = 1 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/quartermaster/sorting) -"Zm" = ( -/obj/effect/floor_decal/corner/brown/half, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/simulated/floor/tiled/monotile, -/area/quartermaster/storage/upper) -"Zo" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/wall/prepainted, -/area/maintenance/fourthdeck/starboard) -"Zp" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/structure/disposalpipe/segment{ - dir = 2; - icon_state = "pipe-c" - }, -/turf/simulated/floor/carpet, -/area/crew_quarters/lounge) -"Zq" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/carpet, -/area/crew_quarters/lounge) -"Zr" = ( -/obj/machinery/atmospherics/portables_connector{ - dir = 1 - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/portable_atmospherics/canister/air/airlock, -/turf/simulated/floor/tiled/dark, -/area/eva) -"Zt" = ( -/obj/effect/floor_decal/industrial/outline/grey, -/obj/structure/table/rack{ - dir = 8 - }, -/obj/item/device/suit_cooling_unit, -/obj/item/device/suit_cooling_unit, -/obj/item/device/suit_cooling_unit, -/turf/simulated/floor/tiled/dark/monotile, -/area/eva) -"Zu" = ( -/obj/effect/floor_decal/industrial/warning/full, -/obj/machinery/conveyor_switch/oneway{ - id = "packageSort1" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/quartermaster/sorting) -"Zv" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/floor_decal/industrial/warning, -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 1; - icon_state = "warningcorner" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/dark, -/area/quartermaster/sorting) -"Zw" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 4 - }, -/obj/structure/catwalk, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/plating, -/area/maintenance/fourthdeck/starboard) -"Zy" = ( -/obj/effect/wallframe_spawn/reinforced/no_grille, -/turf/simulated/floor/plating, -/area/maintenance/waterstore) -"Zz" = ( -/obj/machinery/computer/modular/preset/cardslot/command{ - dir = 8; - icon_state = "console" - }, -/obj/effect/floor_decal/corner/mauve/mono, -/obj/item/device/radio/intercom{ - pixel_y = 23 - }, -/turf/simulated/floor/tiled/monotile, -/area/command/pathfinder) -"ZA" = ( -/obj/machinery/door/airlock/external/escapepod{ - icon_state = "closed"; - id_tag = "escape_pod_8_berth_hatch"; - name = "Escape Pod Three" - }, -/obj/machinery/shield_diffuser, -/turf/simulated/floor/plating, -/area/hallway/primary/fourthdeck/aft) -"ZB" = ( -/obj/structure/railing/mapped{ - dir = 1; - icon_state = "railing0-1" - }, -/obj/structure/railing/mapped{ - dir = 8; - icon_state = "railing0-1" - }, -/turf/simulated/open, -/area/quartermaster/storage/upper) -"ZC" = ( -/obj/effect/floor_decal/industrial/hatch/yellow, -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/glass/civilian, -/turf/simulated/floor/tiled/steel_ridged, -/area/hallway/primary/fourthdeck/aft) -"ZE" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 8 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/fourthdeck/aft) -"ZF" = ( -/obj/machinery/newscaster{ - pixel_x = -32 - }, -/turf/simulated/floor/tiled/monotile, -/area/crew_quarters/commissary) -"ZG" = ( -/obj/effect/catwalk_plated, -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 6 - }, -/obj/structure/closet/firecloset, -/turf/simulated/floor/plating, -/area/maintenance/fourthdeck/forestarboard) -"ZI" = ( -/obj/machinery/atmospherics/unary/vent_pump/on, -/turf/simulated/floor/tiled/techmaint, -/area/quartermaster/hangar/catwalks_port) -"ZJ" = ( -/obj/machinery/cryopod{ - dir = 4 - }, -/obj/machinery/embedded_controller/radio/simple_docking_controller/escape_pod{ - frequency = 1380; - id_tag = "escape_pod_7"; - name = "escape pod two controller"; - pixel_y = 32; - tag_door = "escape_pod_7_hatch" - }, -/obj/item/device/radio/intercom{ - dir = 4; - pixel_x = -21 - }, -/turf/simulated/floor/tiled/monotile, -/area/shuttle/escape_pod7/station) -"ZL" = ( -/obj/structure/catwalk, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/sign/warning/docking_area{ - name = "\improper ESCAPE POD LAUNCH PATHWAY"; - pixel_y = -32 - }, -/turf/simulated/floor/plating, -/area/maintenance/fourthdeck/aft) -"ZM" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/fourthdeck/starboard) -"ZN" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4; - icon_state = "pipe-c" - }, -/turf/simulated/floor/tiled, -/area/quartermaster/office) -"ZO" = ( -/obj/machinery/firealarm{ - dir = 1; - pixel_y = -24 - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 4; - icon_state = "warning" - }, -/turf/simulated/floor/tiled/steel_grid, -/area/storage/auxillary/starboard) -"ZP" = ( -/obj/machinery/oxygen_pump{ - pixel_x = -32 - }, -/obj/effect/floor_decal/corner/green{ - dir = 9 - }, -/turf/simulated/floor/tiled/dark, -/area/hallway/primary/fourthdeck/aft) -"ZQ" = ( -/obj/effect/floor_decal/corner/brown/half, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable/green{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/disposalpipe/sortjunction{ - dir = 2; - name = "Deck Chief"; - sort_type = "Deck Chief" - }, -/turf/simulated/floor/tiled/monotile, -/area/quartermaster/deckchief) -"ZR" = ( -/obj/effect/floor_decal/spline/fancy/wood{ - dir = 4 - }, -/obj/effect/floor_decal/spline/fancy/wood{ - dir = 8 - }, -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/turf/simulated/floor/lino, -/area/command/captainmess) -"ZS" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 8 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/fourthdeck/aft) -"ZU" = ( -/obj/effect/catwalk_plated/dark, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden, -/turf/simulated/floor/plating, -/area/hallway/primary/fourthdeck/aft) -"ZV" = ( -/obj/item/stool/bar/padded, -/turf/simulated/floor/carpet, -/area/crew_quarters/lounge) -"ZW" = ( -/obj/structure/reagent_dispensers/watertank, -/turf/simulated/floor/plating, -/area/maintenance/fourthdeck/foreport) -"ZX" = ( -/obj/structure/catwalk, -/obj/structure/cable/green{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 9 - }, -/obj/structure/disposalpipe/segment{ - dir = 2; - icon_state = "pipe-c" - }, -/turf/simulated/floor/plating, -/area/maintenance/fourthdeck/forestarboard) -"ZZ" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/floor_decal/corner/red, -/obj/effect/floor_decal/corner/white{ - dir = 8 - }, -/obj/item/device/radio/intercom{ - dir = 1; - pixel_y = -28 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/fourthdeck/fore) - -(1,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(2,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(3,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(4,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(5,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(6,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(7,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(8,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(9,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(10,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(11,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(12,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(13,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(14,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(15,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(16,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(17,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(18,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(19,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(20,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(21,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(22,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(23,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(24,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(25,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(26,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(27,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -Gt -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(28,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(29,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(30,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(31,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(32,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ae -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(33,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(34,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -yr -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(35,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(36,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(37,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(38,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(39,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(40,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(41,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -QB -zj -zj -qQ -ew -zj -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -Kp -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(42,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -zj -Mc -zj -zj -zj -zj -kP -xb -qJ -zj -zj -zj -zj -Mc -zj -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(43,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -zj -zj -zj -tJ -gf -Od -zj -Am -oK -ka -zj -pl -LT -JD -zj -zj -zj -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(44,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -zj -zj -zj -Yb -HS -HS -os -zj -lU -oK -Jn -zj -wx -Iw -Ci -Zr -zj -zj -zj -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(45,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -zj -zj -zj -zj -Kk -tH -kc -gx -zj -zj -LD -zj -zj -Ea -VI -ut -IQ -zj -zj -zj -zj -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(46,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -zj -zj -zj -zj -Dd -Dd -Dd -Dd -Rp -Dd -lc -sk -vO -Dd -SZ -Dd -Dd -Dd -Dd -Dd -Dd -zj -zj -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(47,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -zj -zj -zj -zj -Dd -VG -Pq -ng -fX -SH -qR -sl -tO -Fj -Jh -ng -Dx -MS -MS -Nz -Dd -zj -zj -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(48,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -zj -zj -zj -zj -Dd -uZ -mb -ng -ot -vW -qR -sm -tP -tS -ot -ng -zk -Wu -Wu -Vp -Dd -zj -zj -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(49,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -zj -zj -zj -zj -Dd -kZ -mc -ni -ou -vW -qR -fC -tQ -tS -wz -xP -Mi -AE -Iq -Rv -Dd -zj -zj -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(50,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -zj -zj -zj -zj -Dd -Zt -md -ng -ov -Dk -qT -sn -tR -vk -wA -ng -OC -AF -AF -Fe -Dd -zj -zj -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(51,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -zj -zj -zj -zj -Dd -Dd -Dd -Dd -Dd -ng -ng -so -ng -ng -ng -Dd -Dd -Dd -Dd -Dd -Dd -zj -zj -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(52,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -RQ -RQ -RQ -iZ -ej -me -nk -Se -oh -oh -pJ -sp -BC -vm -wC -xR -zm -AH -BL -CN -BK -BK -BK -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(53,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -RQ -RQ -RQ -ja -la -mf -nl -WH -oy -pK -qV -sq -tU -vn -wD -xS -zn -AH -uT -BM -BK -BK -BK -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(54,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -RQ -RQ -RQ -hO -jb -ej -mg -nm -oA -oz -pL -dg -dg -dg -vo -dg -wq -Pz -AH -BN -CO -DL -BK -BK -BK -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(55,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -RQ -RQ -RQ -gY -hP -jc -ej -mh -RB -oA -dg -pM -qW -sr -tV -vp -dg -xT -Pz -AH -BO -CP -DM -EE -BK -BK -BK -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(56,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -RQ -RQ -RQ -fY -gZ -hQ -jd -lb -mi -Nu -no -dg -pN -qX -qX -tW -vq -dg -xU -zq -AI -BP -CQ -DN -EF -Fl -BK -BK -BK -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(57,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -RQ -RQ -RQ -fi -fZ -ha -hR -ZO -ej -Uy -mj -np -dg -pO -qY -ss -qY -vr -dg -xV -zr -AH -BQ -CR -CR -EG -Fm -FY -BK -BK -BK -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(58,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -RQ -RQ -ej -ej -ej -ej -hS -hS -ej -mk -nm -nq -dg -pP -qZ -st -tX -vs -dg -xW -zs -AH -AH -CS -CS -AH -AH -AH -BK -BK -BK -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(59,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -Nv -WZ -cv -ek -fj -ga -hb -hT -RN -le -ml -Rn -nr -dg -dg -dg -dg -dg -dg -dg -xX -zt -AJ -BR -on -on -EH -Fn -FZ -ek -YK -WZ -Nv -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(60,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -bM -cu -dh -dK -el -fk -gb -hc -hU -je -ld -mm -ns -Zj -wF -pQ -ra -su -tY -vt -oB -xY -zu -AK -BS -CT -DO -EI -Fo -fk -GB -Ho -HR -Io -Kn -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(61,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -YK -WZ -WZ -XD -vF -vF -mK -vF -vF -vF -NA -Uv -nt -oC -pR -rb -sv -tZ -vu -wE -xZ -zv -le -le -le -le -le -le -le -le -WZ -WZ -cv -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(62,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -PM -PM -XH -XS -TU -Ks -ZF -PY -vF -mn -Si -Sv -wF -pS -rc -sw -ua -vv -oB -nx -Le -le -BT -CU -DP -CV -CV -Gb -GC -Hp -Hp -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(63,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -PM -PM -VS -PN -vF -Ul -Mr -YE -vF -hu -nu -nv -Tv -wF -wF -sx -ub -vw -wF -nx -un -le -BU -CV -CV -EJ -lE -Gc -GD -Hp -Hp -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(64,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -PM -PM -LZ -Ku -RZ -cT -Ct -Oh -vF -mp -qg -oE -Su -pU -Xk -sy -Ye -vx -hE -yb -Le -le -BV -BV -BV -EK -Fp -Gd -GE -Hp -Hp -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(65,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -PM -PM -OQ -fo -RZ -Wc -JY -zD -vF -SU -Mf -Yx -Nf -oF -Ry -sy -Ye -vy -hE -nx -Bm -le -BW -CW -BV -EL -Fq -Ge -GF -Hp -Hp -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(66,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -PM -PM -lY -fp -SC -hg -Nd -jh -kj -Eo -TA -Yx -OG -pV -OU -sy -ub -vz -hE -nx -ZZ -le -BX -CX -BV -BV -Fr -BV -BV -Hp -Hp -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(67,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -PM -PM -vF -vF -vF -vF -vF -vF -vF -Xz -mr -le -le -le -wF -hE -uc -wF -wF -Pv -zy -le -BY -CY -Or -Gf -Fs -GG -GG -DT -DT -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(68,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ak -ak -LK -fq -bI -bI -hY -ji -uf -lh -ms -oH -oH -kW -re -sz -ud -vA -wG -yc -zz -AL -BZ -CZ -DR -Nj -Ft -CY -CY -DT -DT -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(69,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ak -ak -uL -er -gh -hi -hZ -jj -le -mt -Rt -nA -oI -pX -KR -sA -ue -vB -wH -yd -zA -le -Ca -Da -DS -EM -EM -Gg -GI -DT -DT -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(70,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ak -ak -uL -er -er -er -er -rp -rp -rp -rp -rp -rp -rp -rj -sG -Up -vC -Nm -ay -XQ -OX -OX -Db -QV -Dc -Dc -Dc -Dc -DT -DT -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(71,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ak -ak -kQ -KF -TS -Qr -KI -rp -kl -kl -kl -kl -kl -pZ -rh -sC -ug -OX -wI -ye -OJ -OX -OX -Db -QV -Dc -Pi -ZW -Oy -DT -DT -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(72,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ak -ak -kQ -KF -TS -Kt -KI -rp -kl -kl -kl -kl -kl -MR -qa -sD -uh -vE -wJ -yf -zC -TB -OX -Db -QV -Lb -DQ -DQ -hx -DT -DT -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(73,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ak -ak -kQ -KF -TS -Kt -KI -rp -kl -kl -kl -kl -kl -MR -ri -sL -ui -OX -wK -yg -Nc -AN -OX -Db -QV -Dc -PH -DQ -Sp -DT -DT -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(74,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ak -ak -kQ -RA -uu -ya -KI -rp -kl -kl -kl -kl -kl -MR -qa -sF -Up -KH -Qq -yh -MD -TE -OX -Db -QV -Dc -Dc -Dc -Dc -DT -DT -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(75,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -al -ak -ak -uL -OA -Mh -XC -UQ -rp -kl -kl -kl -kl -kl -rp -PS -XV -Uq -SD -wM -yi -zF -AO -OX -sf -TJ -PE -OS -zS -zS -DT -DT -JB -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(76,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ak -ak -ak -ak -ak -uL -er -er -er -er -fl -fl -fl -fl -fl -fl -qb -WR -sG -lR -Rm -Oj -NN -OX -OX -OX -UN -UN -VB -vh -Og -Og -DT -DT -DT -DT -DT -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(77,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ak -ak -ak -ak -ak -ak -er -ev -fu -UE -QX -id -fl -gc -hd -hV -jf -kg -qc -WR -sH -Yy -rp -pI -pI -pI -pI -rm -WM -UN -Sl -BD -Tt -Yr -Al -DT -DT -DT -DT -DT -DT -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(78,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ak -ak -ak -ak -bS -cA -bS -er -uY -fv -gm -QX -id -fl -gd -he -hW -Wk -kh -fl -rl -sI -um -rp -pI -pI -pI -pI -mG -WM -UN -Ww -OM -Gl -Gl -Gl -Gl -OM -IL -DT -DT -DT -DT -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(79,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ak -ak -ak -ZG -Vx -Vx -an -Qg -ex -UA -MC -QX -er -fl -fl -hf -hX -jg -VU -nn -rg -UY -QC -vJ -CG -CG -CG -CG -Wf -gg -ws -Wp -Vd -Vd -Vd -Vd -Vd -Vd -XB -Or -DT -DT -DT -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(80,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ak -ak -SR -Xs -RP -RP -Yk -er -uY -Qj -UJ -QX -Ti -SV -fl -Ts -QG -Lh -ki -lf -WC -VJ -QC -vJ -CG -CG -CG -CG -Wf -gg -UN -Yl -Yr -iS -iS -iS -iS -iS -Ra -MZ -Ze -DT -DT -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(81,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ak -ak -UB -LW -bT -Za -Oc -er -uY -Mv -VD -QX -KN -YX -fl -Zz -my -zE -oO -nn -Xo -sK -up -HE -CG -CG -CG -CG -Wf -gg -Sd -iS -iS -iS -Nb -Li -fa -iS -Db -LO -Pu -DT -DT -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(82,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ak -ak -er -bt -er -er -er -er -uY -YQ -Qn -QX -bo -bo -fl -TT -TT -TT -fl -fl -Hw -MW -ct -rp -iI -wS -wS -wS -Cg -gg -Yd -WD -hr -YD -SP -RY -RY -iS -Db -PR -mL -DT -DT -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(83,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ak -ak -Va -Po -bV -Yv -Yv -cn -ZX -yB -XI -Xm -bo -MF -ko -WI -WI -WI -kb -Wo -za -MW -QC -jY -gg -gg -gg -gg -gg -gg -Yd -ZV -TY -PC -MY -YZ -Ml -iS -IN -Rk -QJ -DT -DT -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(84,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ak -ak -Rs -Mt -XG -af -af -af -af -af -UC -Xh -Pf -Tm -uB -WI -Pn -Tp -Tp -rp -cF -wl -ii -rp -EC -EC -EC -EC -mB -js -Sd -Xt -PK -Zq -Mu -NZ -UD -iS -Nr -Pp -Pk -DT -DT -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(85,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ak -ak -Os -ep -XG -Zi -ao -ao -at -af -AD -pW -bo -Sf -Mb -WI -vH -aY -aY -ro -za -Yn -QC -ro -CG -CG -CG -CG -Wf -gg -Yd -Wh -TY -Zk -Sd -Sd -Sd -Sd -uw -iS -iS -Uu -Uu -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(86,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ak -ak -NU -bu -XG -Mp -ap -Mp -Mp -Mp -fd -hl -Mp -Mp -Mp -Pt -vH -aY -aY -ro -za -Yn -QC -ro -CG -CG -CG -CG -Wf -gg -Yd -ER -FB -Zk -Sd -Hv -PO -jr -OO -Jo -Nw -pG -sJ -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(87,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ak -ak -aS -bv -Lu -fd -QA -dR -eA -cE -gr -Uo -ij -jn -WI -WI -vH -aY -aY -ro -za -Yn -QC -ro -CG -CG -CG -CG -Wf -gg -Yd -ES -TY -Zk -MY -RY -RY -RY -OO -CH -JG -pG -sJ -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(88,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ak -ak -er -er -Xl -fd -QA -dS -eB -eB -eB -Xg -dS -jn -WI -Pn -aY -aY -aY -ro -za -sK -QC -ro -CG -CG -CG -CG -Wf -gg -Sd -ET -FD -Nn -SP -RY -RY -RY -OO -CH -NC -pG -sJ -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(89,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ak -ak -rr -er -VR -fd -Tz -dS -OI -fB -gs -hm -dS -jn -WI -vH -aY -aY -rp -fF -rU -Yn -LI -aA -rp -CG -CG -CG -Wf -gg -Yd -Wh -TY -zo -IY -RV -XW -MN -OO -Jo -ES -pG -sJ -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(90,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ak -ak -aV -er -VR -fd -Rq -dS -em -em -em -hn -dS -jn -WI -Cm -aY -aY -rp -An -qx -Yn -qx -xB -rp -CG -CG -CG -Wf -gg -Yd -XZ -FB -Rf -Sd -Sd -iS -iS -Ux -lX -iS -Uu -Uu -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(91,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ak -ak -aU -er -VR -fd -py -KW -RT -Yu -Yu -ho -KW -jn -WI -WI -vH -aY -rp -rp -qM -Yn -NP -wn -rp -CG -CG -CG -Wf -gg -Yd -ES -TY -Gp -GY -iS -NX -Kz -rt -QR -Ni -GT -GT -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(92,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ak -ak -cw -er -bY -Mp -Mp -dT -ZR -Wx -Wx -hp -Ol -MX -Mp -Pt -vH -aY -aY -ro -nG -UX -qz -ro -CG -CG -CG -CG -Wf -js -Sd -EW -PK -Pe -Qt -iS -YF -zx -Ss -RI -cY -GT -GT -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(93,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ak -ak -bN -bw -bZ -dU -fd -OZ -eC -WU -gu -hq -LQ -jq -Mp -hh -oW -Ga -Ga -ro -YL -xw -Hh -ro -pI -pI -pI -pI -mG -WM -Yd -Wh -TY -Gp -Gq -iS -Ib -eq -IT -gX -Mq -GT -GT -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(94,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ak -ak -bN -bw -bZ -dU -fd -Un -XM -XM -XM -uy -QA -Zd -Mp -hh -TM -Rg -Ga -ro -sS -gW -ei -ro -pI -pI -pI -pI -mG -WM -Yd -EY -FB -Zp -Ma -HB -Ic -eq -IT -Cy -LG -GT -GT -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(95,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ak -ak -bN -bw -bZ -dU -fd -fd -cq -gw -RL -in -QA -RC -Mp -hh -hh -hh -rp -rp -ic -Yn -pz -rp -rp -pI -pI -pI -lk -WM -Yd -EZ -TY -Uj -Tx -iS -Id -eq -IT -VY -LG -GT -GT -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(96,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ak -ak -er -er -cK -er -Mp -Mp -Mp -Mp -Mp -Mp -Mp -Mp -Mp -VW -VW -Pt -rp -II -qx -Yn -qx -VO -rp -pI -pI -mG -WM -WM -Sd -Sd -FI -Gr -GZ -Sd -Id -Ss -Ss -wT -IT -GT -GT -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(97,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aq -aq -MH -Ow -Zb -ds -dY -Zo -KO -Ow -ht -VW -NM -NM -NM -NM -VW -WI -rp -aA -rU -Yn -LI -fF -rp -pI -pI -NL -WM -if -yp -Sd -iS -iS -iS -Sd -If -kw -XL -PU -Ni -GT -GT -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(98,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aq -aq -Zg -Nq -Qp -dt -Sz -aW -LM -ef -Qc -VW -NM -NM -NM -NM -VW -WI -vH -ro -za -SA -QC -ro -pI -pI -mG -WM -WM -ZI -sZ -eJ -Aq -Aq -Aq -Aq -AC -Iv -ok -Js -Kw -GT -GT -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(99,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aq -aq -aq -Qs -cd -cM -du -dZ -aW -aW -gz -NH -VW -Zy -Zy -Zy -Zy -VW -WI -vH -ro -za -Yn -QC -ro -pI -pI -mG -Qf -vQ -uq -Dq -vQ -vQ -vQ -vQ -sh -sh -UL -Tg -sh -RS -GT -GT -GT -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(100,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aq -aq -aq -rk -Xj -cM -cN -eE -UV -YV -OV -hw -Sg -Ng -Lw -Lf -YC -VW -WI -vH -ro -za -Yn -QC -ro -pI -pI -mG -WM -Cr -Dr -Em -Tr -FL -Lq -At -sh -PG -XY -IX -sh -RS -GT -GT -GT -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(101,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aq -aq -aq -qn -cf -cO -cO -ea -by -iO -SX -rF -VW -Fi -Vh -PZ -oG -mJ -WI -vH -ro -za -Yn -QC -ro -pI -pI -mG -WM -Cr -Vw -yy -Fb -Lo -Rb -Ys -FK -LN -Ph -Ox -sh -RS -GT -GT -GT -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(102,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aq -aq -YN -YN -YN -YN -YN -YN -YN -YN -Wa -AP -VW -vb -QZ -lt -SE -VW -hh -TM -rp -Ap -wl -WQ -rp -Lk -Lk -lk -WM -vQ -VC -yy -yy -uo -yy -KD -tz -kS -KQ -WJ -sh -JL -rG -GT -GT -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(103,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aq -aq -YN -iA -kC -mT -Xd -uA -uA -YN -Wa -AP -VW -Im -wt -lu -Sr -VW -va -Ar -Wo -ru -xJ -RW -jY -WM -ND -gU -WM -vQ -jB -IF -UI -mo -yy -mz -sh -Zu -Zv -zl -sh -JL -LC -GT -GT -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(104,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aq -aq -YN -iC -ly -nZ -cg -Wy -Om -YN -fH -AP -VW -PJ -PJ -PJ -PJ -PJ -PJ -PJ -PJ -NY -NR -Rx -we -Xn -Xn -Xn -Xn -vQ -PX -ax -vQ -YS -ZN -PQ -KE -Yz -On -yG -sh -JL -rn -GT -GT -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(105,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aq -aq -YN -Ui -bC -Ub -Ub -dw -Ub -Ub -fE -eL -hz -PJ -jv -PJ -So -mM -nT -pf -qr -rH -UZ -VL -Wn -Ym -kM -VA -RD -Xn -Re -Vf -SS -XA -RM -My -Wi -Zl -Vv -en -sh -JL -WY -GT -GT -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(106,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aq -aq -YN -be -mH -Ub -cQ -dx -WF -qy -wb -xi -In -PJ -jw -kA -SG -SG -nU -pg -qr -oV -UZ -yC -gM -xm -yH -Ab -MT -Ou -Qb -YB -Yf -Yf -QI -Yf -sh -FK -sh -sh -sh -JL -GW -GT -GT -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(107,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aq -aq -YN -bc -mH -Ub -cR -dy -Vy -Ub -cI -gD -eV -PJ -HW -PJ -SW -kF -XF -kT -Ed -Hn -GU -yC -rz -ZE -yD -ZS -yC -gM -nR -bE -fA -Vb -Np -Xr -HL -Bf -Yf -BH -Vt -rs -Kb -GT -GT -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(108,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aq -aq -YN -oD -mH -Ub -oa -ck -qo -Ub -fH -FV -IZ -PJ -PJ -PJ -lw -YG -Ro -pi -qr -iQ -jW -yC -rz -yC -yC -yC -yC -gM -CD -vi -fA -sj -Pg -tA -pc -pc -Yf -Ie -Ni -JL -Kc -GT -GT -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(109,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aq -aq -YN -YN -wL -Ub -Ub -Ub -Ub -Ub -fH -FV -KL -ix -aW -PJ -PJ -PJ -PJ -PJ -PJ -vj -lM -CL -vZ -kX -yF -zZ -Kj -Xn -Yf -Yf -Yf -uI -Uh -yj -yu -ce -Yf -eQ -Ni -WA -TW -GT -GT -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(110,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aq -aq -dA -jz -lz -aW -cU -Zw -Zw -Zw -fJ -HF -iy -iy -ZM -iy -iy -iy -iy -iy -bB -xN -ow -uH -Xn -Xn -Xn -Xn -Xn -Xn -ul -PB -Qe -LB -Zm -QK -Sx -Sx -Yf -zx -Ni -xL -Kd -GT -GT -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(111,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aq -aq -LV -Wz -bF -bF -cV -dB -eb -eb -eb -eb -hB -eb -Xf -eb -eb -eb -ks -eb -Xn -iT -tc -KG -KZ -io -TO -SK -XP -vK -Wd -PB -Qe -Me -Uh -HV -HV -HV -RH -zx -Ni -WN -Xw -GT -GT -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -Kq -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(112,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aq -aq -YY -Lj -mP -aW -cW -dC -ec -ec -ec -ec -eP -ec -aW -ec -ec -ec -VQ -ec -Xn -bx -MI -Vi -vK -qf -PT -Pj -ZQ -WW -XX -Eq -Fd -FM -Nl -ZB -Vo -ju -Yf -zx -Ni -tg -Ni -GT -GT -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(113,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aj -aq -NQ -qv -XT -XT -XT -XT -XT -XT -XT -XT -XT -XT -XT -YJ -SY -Xn -Xn -Xn -Xn -PI -tK -ql -Pa -Vm -Qu -La -QD -Lz -Ds -Ds -Ds -Ds -Ds -Ds -Ds -Ds -Ds -Ss -Ss -tg -Oa -GT -Kl -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(114,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -bX -wW -aD -Lm -ie -ar -ar -ar -ar -ar -ar -ar -ar -ar -ar -YJ -kD -RU -SL -po -Xn -gq -SO -WS -au -xn -zM -Ad -Lx -Lz -DU -DU -DU -DU -DU -DU -DU -DU -DU -DU -By -tg -Ke -jX -av -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(115,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -bX -wW -aF -bf -ie -ar -cZ -cx -dj -hs -dj -fr -gi -hj -ib -YJ -AT -da -Il -xE -Xn -TH -MI -ql -vK -ST -Sh -Sy -XN -Lz -DV -EO -Fv -Gh -GJ -Gw -GJ -Ir -Ix -DU -By -tg -Ni -jX -av -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(116,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -bX -wW -aG -bf -ie -bi -bP -St -Ii -Et -Ii -fs -gj -hj -ib -YJ -Xn -Xn -Xn -Xn -Xn -Rr -UM -sR -vK -vK -vK -vK -vK -Lz -DV -EO -Fw -Gi -GX -eO -GX -Wj -GK -JU -By -tg -Ni -jX -av -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(117,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -bX -wW -aH -bf -ie -ar -Tu -cy -dk -dM -bP -ft -gk -hj -ib -YJ -Um -MB -YH -pr -Xn -RK -MI -Xv -Xn -uk -YH -Cc -ku -YJ -DV -EO -Fx -Gj -GK -Hr -HU -Is -NT -DU -By -tg -Ni -jX -av -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(118,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ai -aa -aa -aa -aa -aa -aa -aa -aa -aa -bX -wW -aI -bf -ie -ar -ar -ar -ar -ar -et -ar -ar -ar -ar -YJ -iD -QS -SL -pr -Xn -ru -th -WS -Xn -xo -SL -MB -co -YJ -DU -DU -DU -DU -GL -DU -DU -DU -DU -DU -By -tg -Kf -jX -av -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(119,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -xO -aa -aa -aa -aa -aa -Qd -LA -LA -LA -UH -YJ -YJ -YJ -Yj -Yj -YJ -Yw -YJ -Yj -Yj -YJ -YJ -Xn -Xn -oc -Xn -Xn -ZC -ti -SF -wh -Xn -oc -Xn -Xn -YJ -YJ -Yj -Yj -YJ -ZA -YJ -Yj -Yj -YJ -YJ -YJ -JO -LA -LA -LA -Qd -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(120,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -Yj -tG -RR -aJ -bk -Mx -AB -YR -YR -YR -eX -US -LU -ag -ag -ZP -ag -ag -mQ -ag -pu -WX -rH -Ta -uK -Wm -JA -mD -Ae -cj -ag -Dw -ag -ag -Fk -Ud -KU -uj -uj -uj -lJ -Jx -JP -aJ -Px -Ms -Yj -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(121,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -bK -WB -TX -UT -QM -aK -UR -bJ -sd -Xc -Xc -Xc -eY -fP -gL -Ya -Ya -jE -Nk -Zc -zp -ZU -ZU -En -dp -tj -KB -Pc -xr -bd -YI -Nk -Nk -Wl -Ya -Ya -FS -Gu -Hg -Xc -Xc -IB -fK -bJ -JQ -Kh -mR -Tb -TN -Ko -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(122,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -Qd -LA -LA -LA -bm -YJ -YJ -YJ -Yj -Yj -YJ -dd -YJ -Yj -Yj -YJ -YJ -Xn -Xn -Xn -QW -QW -Mo -tk -Mo -QW -QW -Xn -Hd -Bo -OT -YJ -Yj -Yj -YJ -Gv -YJ -Yj -Yj -YJ -YJ -YJ -JR -LA -LA -LA -Qd -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(123,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -wX -wp -Sa -LS -Ji -aw -aw -aw -aw -aw -ey -aw -aw -aw -aw -ah -lD -jF -dJ -QW -ur -uM -iM -uM -cr -QW -To -KA -DF -ah -DX -DX -DX -DX -GQ -DX -DX -DX -DX -DX -wc -JS -Ki -wp -pp -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(124,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -wX -wp -Qa -te -Ji -aw -ZJ -cB -dl -dP -bU -fw -gn -hk -ig -ah -QL -jF -WK -QW -Rw -oZ -CC -uN -Kx -QW -To -KA -Vj -ah -DY -EQ -Fy -Gm -GR -Hu -HX -It -Sq -DX -wc -JS -PV -wp -pp -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(125,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -wX -wp -Qy -Tf -Ji -nD -bU -wQ -CK -Oe -CK -fx -go -hk -ig -ah -TP -mS -OB -QW -qC -HP -iM -uO -IC -QW -To -KA -Vj -ah -DY -EQ -Fz -Gn -xy -wg -xy -lo -GR -JX -wc -JS -MM -wp -pp -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(126,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -wX -wp -Ew -nH -Ji -aw -lB -cC -dm -dI -dm -fy -gp -hk -ig -ah -vD -Yc -vD -QW -QW -QW -tk -QW -QW -QW -wm -KA -Vj -ah -DY -EQ -FA -Go -GS -Aa -GS -Iu -oM -DX -wc -JS -OB -wp -pp -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(127,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -wX -wp -Ew -nH -Ji -aw -aw -aw -aw -aw -aw -aw -aw -aw -aw -ah -lG -OB -od -Mw -OK -OK -tp -wi -TD -xu -rP -yN -Bs -ah -DX -DX -DX -DX -DX -DX -DX -DX -DX -DX -wc -JS -OB -wp -pp -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(128,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -QU -Vr -Vr -ZL -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -lH -OB -od -VF -SI -SI -tq -SI -SI -tl -ze -WO -og -CB -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -mY -OB -Vr -QU -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(129,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -Vr -Vr -Vr -Nt -Nx -xA -wi -wi -wi -wi -wi -JI -tC -tC -tC -yl -zP -mV -TQ -Mk -NV -We -tr -Yt -Sj -RG -yP -Aj -MJ -Nx -Nx -uP -uP -uP -uP -uP -HQ -OK -OK -wi -wi -Ur -Vr -Vr -Vr -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(130,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -Vr -Vr -Vr -Vr -Vr -Tj -gy -AM -Dt -fh -lK -gy -gy -gy -gy -kH -WG -Vj -od -px -SI -rO -ts -uR -SI -xv -yQ -Ak -Bu -DA -DA -DA -DA -DA -bA -Hm -Pm -pD -pT -Vj -Vr -Vr -Vr -Vr -Vr -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(131,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -Vr -Vr -Vr -Vr -Vr -Vr -Vr -Vr -Vr -Vr -Vr -Vr -Vr -Vr -Vr -Vr -Vr -Vr -Vr -Vr -Vr -Vr -Vr -Vr -Vr -Vr -Vr -Vr -Vr -Vr -Vr -Vr -Vr -Vr -Vr -Vr -Vr -Vr -Vr -Vr -Vr -Vr -Vr -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(132,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -Vr -Vr -Vr -Vr -Vr -Vr -Vr -Vr -Vr -Vr -Vr -Vr -Vr -Vr -Vr -Vr -Vr -Vr -Vr -Vr -Vr -Vr -Vr -Vr -Vr -Vr -Vr -Vr -Vr -Vr -Vr -Vr -Vr -Vr -Vr -Vr -Vr -Vr -Vr -Vr -Vr -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(133,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -Vr -Vr -Vr -Vr -Vr -Vr -Vr -Vr -Vr -Vr -Vr -Vr -Vr -Vr -Vr -Vr -Vr -Vr -Vr -Vr -Vr -Vr -Vr -Vr -Vr -Vr -Vr -Vr -Vr -Vr -Vr -Vr -Vr -Vr -Vr -Vr -Vr -Vr -Vr -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(134,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -OW -OW -OW -OW -OW -OW -OW -OW -OW -OW -OW -OW -OW -OW -OW -OW -OW -OW -OW -OW -OW -OW -OW -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(135,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -OW -OW -OW -OW -OW -OW -OW -OW -OW -OW -OW -OW -OW -OW -OW -OW -OW -OW -OW -OW -OW -OW -OW -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(136,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -OW -OW -OW -OW -OW -OW -OW -OW -OW -OW -OW -OW -OW -OW -OW -OW -OW -OW -OW -OW -OW -OW -OW -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(137,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -OW -OW -OW -OW -OW -OW -OW -OW -OW -OW -OW -OW -OW -OW -OW -OW -OW -OW -OW -OW -OW -OW -OW -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(138,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -OW -OW -OW -OW -OW -OW -OW -OW -OW -OW -OW -OW -OW -OW -OW -OW -OW -OW -OW -OW -OW -OW -OW -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(139,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -OW -OW -OW -OW -OW -OW -OW -OW -OW -OW -OW -OW -OW -OW -OW -OW -OW -OW -OW -OW -OW -OW -OW -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(140,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -OW -OW -OW -OW -OW -OW -OW -OW -OW -OW -OW -OW -OW -OW -OW -OW -OW -OW -OW -OW -OW -OW -OW -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(141,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -OW -OW -OW -OW -OW -OW -OW -OW -OW -OW -OW -OW -OW -OW -OW -OW -OW -OW -OW -OW -OW -OW -OW -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(142,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -OW -OW -OW -OW -OW -OW -OW -OW -OW -OW -OW -OW -OW -OW -OW -OW -OW -OW -OW -OW -OW -OW -OW -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(143,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -OW -OW -OW -OW -OW -OW -OW -OW -OW -OW -OW -OW -OW -OW -OW -OW -OW -OW -OW -OW -OW -OW -OW -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(144,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -OW -OW -OW -OW -OW -OW -OW -OW -OW -OW -OW -OW -OW -OW -OW -OW -OW -OW -OW -OW -OW -OW -OW -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(145,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ac -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -OW -OW -OW -OW -OW -OW -OW -OW -OW -OW -OW -OW -OW -OW -OW -OW -OW -OW -OW -OW -OW -OW -OW -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(146,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -OW -OW -OW -OW -OW -OW -OW -OW -OW -OW -OW -OW -OW -OW -OW -OW -OW -OW -OW -OW -OW -OW -OW -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(147,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -OW -OW -OW -OW -OW -OW -OW -OW -OW -OW -OW -OW -OW -OW -OW -OW -OW -OW -OW -OW -OW -OW -OW -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(148,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -OW -OW -OW -OW -OW -OW -OW -OW -OW -OW -OW -OW -OW -OW -OW -OW -OW -OW -OW -OW -OW -OW -OW -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(149,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -OW -OW -OW -OW -OW -OW -OW -OW -OW -OW -OW -OW -OW -OW -OW -OW -OW -OW -OW -OW -OW -OW -OW -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(150,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -OW -OW -OW -OW -OW -OW -OW -OW -OW -OW -OW -OW -OW -OW -OW -OW -OW -OW -OW -OW -OW -OW -OW -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(151,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -OW -OW -OW -OW -OW -OW -OW -OW -OW -OW -OW -OW -OW -OW -OW -OW -OW -OW -OW -OW -OW -OW -OW -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(152,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -OW -OW -OW -OW -OW -OW -OW -OW -OW -OW -OW -OW -OW -OW -OW -OW -OW -OW -OW -OW -OW -OW -OW -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(153,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -OW -OW -OW -OW -OW -OW -OW -OW -OW -OW -OW -OW -OW -OW -OW -OW -OW -OW -OW -OW -OW -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(154,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -OW -OW -OW -OW -OW -OW -OW -OW -OW -OW -OW -OW -OW -OW -OW -OW -OW -OW -OW -OW -OW -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(155,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -OW -OW -OW -OW -OW -OW -OW -OW -OW -OW -OW -OW -OW -OW -OW -OW -OW -OW -OW -OW -OW -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(156,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -OW -OW -OW -OW -OW -OW -aa -aa -aa -aa -aa -aa -aa -aa -aa -OW -OW -OW -OW -OW -OW -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(157,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(158,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(159,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(160,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -bn -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(161,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(162,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(163,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(164,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(165,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(166,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(167,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(168,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(169,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(170,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(171,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(172,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(173,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(174,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(175,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(176,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(177,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(178,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(179,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(180,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(181,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(182,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(183,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(184,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(185,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(186,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(187,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(188,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(189,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(190,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(191,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(192,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(193,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(194,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(195,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(196,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(197,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(198,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(199,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(200,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} diff --git a/maps/torch/torch3_deck3.dmm b/maps/torch/torch3_deck3.dmm deleted file mode 100644 index af699c87463b9..0000000000000 --- a/maps/torch/torch3_deck3.dmm +++ /dev/null @@ -1,61720 +0,0 @@ -//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE -"aa" = ( -/turf/space, -/area/space) -"ab" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8"; - pixel_x = 0 - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 1 - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/substation/thirddeck) -"ad" = ( -/turf/simulated/wall/r_wall/hull, -/area/vacant/brig) -"ae" = ( -/turf/simulated/floor/tiled, -/area/vacant/brig) -"af" = ( -/obj/machinery/computer/arcade, -/turf/simulated/floor/tiled/monotile, -/area/vacant/brig) -"ag" = ( -/turf/simulated/floor/plating, -/area/vacant/brig) -"ah" = ( -/obj/structure/table/standard, -/obj/random/junk, -/turf/simulated/floor/tiled/monotile, -/area/vacant/brig) -"ai" = ( -/obj/structure/table/standard, -/turf/simulated/floor/tiled/monotile, -/area/vacant/brig) -"aj" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/obj/machinery/light{ - dir = 1 - }, -/obj/structure/closet/secure_closet/hydroponics_torch, -/obj/machinery/light_switch{ - pixel_y = 24 - }, -/obj/effect/floor_decal/corner/green/mono, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled/monotile, -/area/hydroponics/storage) -"ak" = ( -/obj/random/junk, -/turf/simulated/floor/tiled, -/area/vacant/brig) -"al" = ( -/obj/random/trash, -/turf/simulated/floor/tiled, -/area/vacant/brig) -"am" = ( -/obj/machinery/shieldwallgen{ - anchored = 1 - }, -/turf/simulated/floor/plating, -/area/vacant/brig) -"an" = ( -/obj/random/junk, -/obj/structure/railing/mapped{ - dir = 1; - icon_state = "railing0-1" - }, -/obj/structure/railing/mapped{ - dir = 8; - icon_state = "railing0-1" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/plating, -/area/maintenance/thirddeck/foreport) -"ao" = ( -/obj/structure/grille/broken, -/turf/simulated/floor/plating, -/area/vacant/brig) -"ap" = ( -/obj/structure/bed/chair/comfy/black{ - dir = 1 - }, -/turf/simulated/floor/tiled, -/area/vacant/brig) -"aq" = ( -/obj/effect/landmark{ - name = "xeno_spawn"; - pixel_x = -1 - }, -/turf/simulated/floor/tiled, -/area/vacant/brig) -"ar" = ( -/obj/effect/decal/cleanable/vomit, -/turf/simulated/floor/tiled, -/area/vacant/brig) -"as" = ( -/obj/structure/hygiene/toilet{ - dir = 8 - }, -/turf/simulated/floor/plating, -/area/vacant/brig) -"at" = ( -/obj/random/junk, -/turf/simulated/floor/plating, -/area/vacant/brig) -"au" = ( -/obj/structure/wall_frame, -/obj/structure/grille, -/turf/simulated/floor/plating, -/area/vacant/brig) -"av" = ( -/obj/effect/wallframe_spawn/reinforced, -/turf/simulated/floor/plating, -/area/vacant/brig) -"aw" = ( -/obj/structure/bed, -/turf/simulated/floor/plating, -/area/vacant/brig) -"ax" = ( -/obj/effect/floor_decal/corner/red{ - dir = 1; - icon_state = "corner_white" - }, -/obj/machinery/constructable_frame/computerframe, -/turf/simulated/floor/tiled, -/area/vacant/brig) -"ay" = ( -/obj/effect/floor_decal/corner/red{ - dir = 1; - icon_state = "corner_white" - }, -/obj/structure/table/steel_reinforced, -/turf/simulated/floor/tiled, -/area/vacant/brig) -"az" = ( -/obj/structure/door_assembly, -/turf/simulated/floor/tiled, -/area/vacant/brig) -"aA" = ( -/obj/structure/table/steel_reinforced, -/turf/simulated/floor/tiled, -/area/vacant/brig) -"aB" = ( -/obj/structure/closet{ - name = "Prisoner's Locker" - }, -/turf/simulated/floor/plating, -/area/vacant/brig) -"aC" = ( -/obj/structure/reagent_dispensers/peppertank{ - pixel_y = -32 - }, -/turf/simulated/floor/tiled/monotile, -/area/vacant/brig) -"aD" = ( -/obj/machinery/portable_atmospherics/hydroponics, -/turf/simulated/floor/tiled/monotile, -/area/vacant/brig) -"aE" = ( -/obj/machinery/door/airlock/security{ - name = "Old Brig" - }, -/turf/simulated/floor/tiled, -/area/vacant/brig) -"aF" = ( -/obj/random/obstruction, -/turf/simulated/floor/plating, -/area/vacant/brig) -"aG" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 9 - }, -/obj/structure/closet/secure_closet/brig, -/turf/simulated/floor/tiled, -/area/vacant/brig) -"aH" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 5 - }, -/obj/machinery/portable_atmospherics/canister/sleeping_agent, -/turf/simulated/floor/tiled, -/area/vacant/brig) -"aI" = ( -/turf/simulated/floor/reinforced/airless, -/area/space) -"aJ" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 10 - }, -/turf/simulated/floor/tiled, -/area/vacant/brig) -"aK" = ( -/obj/structure/cable/green{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/turf/simulated/floor/tiled, -/area/vacant/brig) -"aL" = ( -/obj/machinery/power/apc{ - dir = 4; - name = "east bump"; - pixel_x = 24 - }, -/obj/structure/cable/green{ - d2 = 8; - icon_state = "0-8" - }, -/turf/simulated/floor/plating, -/area/vacant/brig) -"aM" = ( -/turf/simulated/wall/r_wall/prepainted, -/area/tcommsat/chamber) -"aN" = ( -/turf/simulated/wall/r_wall/prepainted, -/area/tcommsat/storage) -"aO" = ( -/turf/simulated/wall/r_wall/hull, -/area/maintenance/thirddeck/forestarboard) -"aP" = ( -/turf/simulated/wall/r_wall/hull, -/area/hydroponics/storage) -"aQ" = ( -/turf/simulated/wall/r_wall/hull, -/area/maintenance/thirddeck/starboard) -"aR" = ( -/obj/machinery/atmospherics/unary/vent_pump/on, -/obj/structure/sign/deck/third{ - pixel_y = 32 - }, -/obj/machinery/camera/network/third_deck{ - c_tag = "Third Deck Hallway - Head" - }, -/obj/effect/floor_decal/corner/green{ - dir = 5 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/thirddeck/center) -"aS" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/door/airlock/security{ - name = "Old Brig" - }, -/turf/simulated/floor/tiled, -/area/vacant/brig) -"aT" = ( -/turf/simulated/wall/r_wall/hull, -/area/maintenance/thirddeck/aftstarboard) -"aU" = ( -/turf/simulated/wall/r_wall/hull, -/area/space) -"aV" = ( -/obj/structure/lattice, -/obj/structure/grille, -/turf/space, -/area/space) -"aW" = ( -/turf/simulated/wall/r_wall/hull, -/area/hydroponics) -"aX" = ( -/obj/random/torchcloset, -/obj/random/maintenance/solgov, -/turf/simulated/floor/plating, -/area/maintenance/thirddeck/starboard) -"aY" = ( -/turf/simulated/floor/plating, -/area/maintenance/thirddeck/starboard) -"aZ" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/plating, -/area/maintenance/thirddeck/starboard) -"ba" = ( -/obj/structure/table/rack, -/obj/random/maintenance/solgov, -/turf/simulated/floor/plating, -/area/maintenance/thirddeck/starboard) -"bb" = ( -/obj/structure/lattice, -/turf/space, -/area/space) -"bc" = ( -/obj/machinery/camera/network/third_deck{ - c_tag = "Third Deck Hallway - Ladders" - }, -/obj/effect/floor_decal/corner/yellow{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/thirddeck/aft) -"bd" = ( -/turf/simulated/wall/r_wall/hull, -/area/thruster/d3starboard) -"be" = ( -/obj/effect/wallframe_spawn/reinforced/hull, -/obj/machinery/door/firedoor, -/obj/machinery/door/blast/regular{ - density = 0; - icon_state = "pdoor0"; - id_tag = "hydroponics_shutters"; - name = "Blast Shields"; - opacity = 0 - }, -/turf/simulated/floor/plating, -/area/hydroponics) -"bf" = ( -/obj/effect/floor_decal/corner/yellow{ - dir = 9 - }, -/obj/structure/ladder/up, -/turf/simulated/floor/tiled/steel_grid, -/area/hallway/primary/thirddeck/aft) -"bg" = ( -/obj/structure/sign/directions/bridge{ - dir = 1; - pixel_x = 0; - pixel_y = 12; - pixel_z = 0 - }, -/turf/simulated/wall/prepainted, -/area/storage/tools) -"bh" = ( -/obj/structure/bed/roller, -/obj/machinery/power/apc{ - dir = 1; - name = "north bump"; - pixel_x = 0; - pixel_y = 24 - }, -/obj/structure/cable/green{ - d2 = 2; - icon_state = "0-2" - }, -/turf/simulated/floor/plating, -/area/maintenance/thirddeck/starboard) -"bi" = ( -/obj/structure/table/steel, -/obj/item/device/multitool, -/obj/machinery/light{ - dir = 1 - }, -/turf/simulated/floor/tiled/dark, -/area/tcommsat/chamber) -"bj" = ( -/obj/structure/table/steel, -/obj/item/paper_bin, -/obj/item/folder/yellow, -/obj/item/pen/blue{ - pixel_x = -3; - pixel_y = 2 - }, -/obj/structure/cable/cyan{ - d2 = 2; - icon_state = "0-2" - }, -/obj/machinery/power/apc/super/critical{ - dir = 1; - is_critical = 1; - name = "north bump"; - pixel_y = 24 - }, -/turf/simulated/floor/tiled/dark, -/area/tcommsat/chamber) -"bk" = ( -/turf/simulated/wall/prepainted, -/area/tcommsat/storage) -"bl" = ( -/obj/item/stock_parts/subspace/amplifier, -/obj/item/stock_parts/subspace/amplifier, -/obj/item/stock_parts/subspace/amplifier, -/obj/structure/table/rack, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 4 - }, -/turf/simulated/floor/tiled/monotile, -/area/tcommsat/storage) -"bm" = ( -/obj/item/stock_parts/subspace/ansible, -/obj/item/stock_parts/subspace/ansible, -/obj/item/stock_parts/subspace/ansible, -/obj/structure/table/rack, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/firealarm{ - dir = 2; - pixel_y = 24 - }, -/turf/simulated/floor/tiled/monotile, -/area/tcommsat/storage) -"bn" = ( -/obj/item/stock_parts/subspace/crystal, -/obj/item/stock_parts/subspace/crystal, -/obj/item/stock_parts/subspace/crystal, -/obj/structure/table/rack, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/obj/machinery/alarm{ - pixel_y = 24 - }, -/turf/simulated/floor/tiled/monotile, -/area/tcommsat/storage) -"bo" = ( -/obj/item/stock_parts/subspace/filter, -/obj/item/stock_parts/subspace/filter, -/obj/item/stock_parts/subspace/filter, -/obj/item/stock_parts/subspace/filter, -/obj/item/stock_parts/subspace/filter, -/obj/structure/table/rack, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 8 - }, -/turf/simulated/floor/tiled/monotile, -/area/tcommsat/storage) -"bp" = ( -/obj/random/torchcloset, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/thirddeck/forestarboard) -"bq" = ( -/obj/machinery/constructable_frame/computerframe, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/thirddeck/forestarboard) -"br" = ( -/obj/machinery/space_heater, -/obj/structure/largecrate, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/thirddeck/forestarboard) -"bs" = ( -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/thirddeck/forestarboard) -"bt" = ( -/obj/machinery/atmospherics/binary/pump/on, -/obj/structure/railing/mapped{ - dir = 8; - icon_state = "railing0-1" - }, -/turf/simulated/floor/plating, -/area/command/disperser) -"bu" = ( -/turf/simulated/floor/plating, -/area/maintenance/thirddeck/forestarboard) -"bv" = ( -/obj/machinery/alarm{ - dir = 4; - pixel_x = -23; - pixel_y = 0 - }, -/obj/machinery/light/small, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/thirddeck/starboard) -"bw" = ( -/obj/effect/floor_decal/corner/green/mono, -/obj/machinery/vending/hydronutrients/generic, -/turf/simulated/floor/tiled/monotile, -/area/hydroponics/storage) -"bx" = ( -/obj/machinery/seed_storage/garden, -/obj/effect/floor_decal/corner/green/mono, -/obj/machinery/camera/network/third_deck{ - c_tag = "Hydroponics - Storage" - }, -/turf/simulated/floor/tiled/monotile, -/area/hydroponics/storage) -"by" = ( -/obj/machinery/firealarm{ - dir = 2; - pixel_y = 24 - }, -/obj/structure/closet/secure_closet/hydroponics_torch, -/obj/effect/floor_decal/corner/green/mono, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled/monotile, -/area/hydroponics/storage) -"bz" = ( -/obj/structure/closet/crate, -/obj/item/stock_parts/circuitboard/batteryrack, -/obj/item/stock_parts/circuitboard/batteryrack, -/obj/item/stock_parts/circuitboard/smes, -/obj/item/stock_parts/circuitboard/smes, -/obj/item/stock_parts/smes_coil/super_io, -/obj/item/stock_parts/smes_coil/super_io, -/obj/item/stock_parts/smes_coil/super_capacity, -/obj/item/stock_parts/smes_coil/super_capacity, -/obj/item/stock_parts/smes_coil, -/obj/item/stock_parts/smes_coil, -/obj/machinery/camera/network/engineering{ - c_tag = "Engineering - Hard Storage"; - dir = 4 - }, -/obj/effect/floor_decal/corner/yellow/mono, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled/dark/monotile, -/area/engineering/hardstorage) -"bA" = ( -/turf/simulated/wall/prepainted, -/area/hydroponics) -"bB" = ( -/obj/item/device/radio/intercom/entertainment{ - dir = 4; - pixel_x = -22 - }, -/obj/structure/dogbed, -/mob/living/simple_animal/passive/corgi/Ein, -/turf/simulated/floor/lino, -/area/crew_quarters/bar) -"bC" = ( -/obj/structure/table/standard, -/obj/item/material/hatchet, -/obj/item/material/minihoe, -/obj/effect/floor_decal/corner/green{ - dir = 5 - }, -/turf/simulated/floor/tiled, -/area/hydroponics) -"bD" = ( -/obj/machinery/alarm{ - dir = 8; - icon_state = "alarm0"; - pixel_x = 24 - }, -/obj/machinery/light{ - dir = 4 - }, -/obj/machinery/portable_atmospherics/hydroponics, -/obj/effect/floor_decal/corner/green/mono, -/obj/effect/floor_decal/industrial/hatch/yellow, -/turf/simulated/floor/tiled/monotile, -/area/hydroponics) -"bE" = ( -/obj/random/obstruction, -/turf/simulated/floor/plating, -/area/maintenance/thirddeck/starboard) -"bF" = ( -/obj/random/junk, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/plating, -/area/maintenance/thirddeck/starboard) -"bG" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/plating, -/area/maintenance/thirddeck/starboard) -"bH" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/railing/mapped{ - dir = 4; - icon_state = "railing0-1" - }, -/turf/simulated/floor/plating, -/area/maintenance/thirddeck/starboard) -"bI" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/structure/disposalpipe/segment{ - dir = 4; - icon_state = "pipe-c" - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/thirddeck/starboard) -"bJ" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/thirddeck/starboard) -"bK" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/maintenance, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/maintenance/thirddeck/aftstarboard) -"bL" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/thirddeck/aftstarboard) -"bM" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/thirddeck/aftstarboard) -"bN" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/thirddeck/aftstarboard) -"bO" = ( -/obj/machinery/computer/air_control{ - dir = 2; - frequency = 1441; - input_tag = "d3so2_in"; - name = "Oxygen Supply Control"; - output_tag = "d3so2_out"; - sensor_name = "Oxygen Supply Tank"; - sensor_tag = "d3so2_sensor" - }, -/obj/effect/floor_decal/industrial/outline/blue, -/obj/machinery/alarm{ - pixel_y = 24 - }, -/turf/simulated/floor/tiled/techfloor, -/area/thruster/d3starboard) -"bP" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/effect/floor_decal/spline/fancy/wood{ - dir = 8 - }, -/obj/machinery/light_switch{ - pixel_x = -24; - pixel_y = 24 - }, -/obj/effect/floor_decal/spline/fancy/wood/corner, -/turf/simulated/floor/lino, -/area/crew_quarters/bar) -"bQ" = ( -/turf/simulated/floor/tiled/dark, -/area/tcommsat/chamber) -"bR" = ( -/obj/machinery/telecomms/processor/preset_two, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/floor/bluegrid, -/area/tcommsat/chamber) -"bS" = ( -/obj/machinery/telecomms/bus/preset_two, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/floor/bluegrid, -/area/tcommsat/chamber) -"bT" = ( -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/item/device/radio/intercom{ - dir = 8; - pixel_x = 21 - }, -/turf/simulated/floor/tiled/dark, -/area/tcommsat/chamber) -"bU" = ( -/obj/item/stock_parts/subspace/analyzer, -/obj/item/stock_parts/subspace/analyzer, -/obj/item/stock_parts/subspace/analyzer, -/obj/structure/table/rack, -/obj/machinery/light/small{ - dir = 8 - }, -/turf/simulated/floor/tiled/monotile, -/area/tcommsat/storage) -"bV" = ( -/obj/effect/landmark{ - name = "xeno_spawn"; - pixel_x = -1 - }, -/turf/simulated/floor/tiled, -/area/tcommsat/storage) -"bW" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled, -/area/tcommsat/storage) -"bX" = ( -/obj/item/stock_parts/subspace/transmitter, -/obj/item/stock_parts/subspace/transmitter, -/obj/structure/table/rack, -/obj/item/stock_parts/computer/hard_drive/portable, -/obj/item/stock_parts/computer/hard_drive/portable, -/turf/simulated/floor/tiled/monotile, -/area/tcommsat/storage) -"bY" = ( -/obj/random/junk, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/thirddeck/forestarboard) -"bZ" = ( -/obj/structure/table/steel, -/obj/random/maintenance/solgov, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/thirddeck/forestarboard) -"ca" = ( -/turf/simulated/wall/prepainted, -/area/hydroponics/storage) -"cb" = ( -/obj/effect/floor_decal/corner/green{ - dir = 9 - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/obj/structure/disposalpipe/segment{ - dir = 2; - icon_state = "pipe-c" - }, -/turf/simulated/floor/tiled, -/area/hydroponics/storage) -"cc" = ( -/turf/simulated/floor/tiled, -/area/hydroponics/storage) -"cd" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/effect/floor_decal/corner/green{ - dir = 6 - }, -/obj/machinery/power/apc{ - dir = 4; - name = "east bump"; - pixel_x = 24 - }, -/obj/structure/cable/green{ - d2 = 2; - icon_state = "0-2" - }, -/turf/simulated/floor/tiled, -/area/hydroponics/storage) -"ce" = ( -/obj/machinery/power/apc{ - dir = 8; - name = "west bump"; - pixel_x = -24 - }, -/obj/structure/cable/green{ - d2 = 4; - icon_state = "0-4" - }, -/obj/structure/closet/crate/hydroponics/beekeeping, -/obj/item/screwdriver, -/obj/effect/floor_decal/corner/green{ - dir = 8 - }, -/turf/simulated/floor/tiled/monotile, -/area/hydroponics) -"cf" = ( -/obj/structure/cable/green{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled, -/area/hydroponics) -"cg" = ( -/obj/effect/floor_decal/corner/yellow/half{ - dir = 1; - icon_state = "bordercolorhalf" - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/thirddeck/aft) -"ch" = ( -/obj/machinery/atmospherics/unary/vent_pump/on, -/turf/simulated/floor/tiled, -/area/hydroponics) -"ci" = ( -/obj/machinery/button/blast_door{ - desc = "A remote control-switch for shutters."; - id_tag = "hydroponics_shutters"; - name = "Window Shutters"; - pixel_x = 26; - pixel_y = 6 - }, -/obj/machinery/portable_atmospherics/hydroponics, -/obj/effect/floor_decal/corner/green/mono, -/obj/effect/floor_decal/industrial/hatch/yellow, -/turf/simulated/floor/tiled/monotile, -/area/hydroponics) -"cj" = ( -/obj/structure/closet/emcloset, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/thirddeck/starboard) -"ck" = ( -/obj/structure/railing/mapped, -/turf/simulated/open, -/area/maintenance/thirddeck/starboard) -"cl" = ( -/turf/simulated/wall/prepainted, -/area/maintenance/thirddeck/starboard) -"cm" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/door/firedoor, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/tiled/techfloor/grid, -/area/maintenance/thirddeck/starboard) -"cn" = ( -/obj/machinery/door/airlock/civilian{ - locked = 1; - name = "Old Mess" - }, -/turf/simulated/floor/tiled/steel_ridged, -/area/vacant/mess) -"co" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/thirddeck/aftstarboard) -"cp" = ( -/obj/machinery/alarm{ - dir = 1; - icon_state = "alarm0"; - pixel_y = -22 - }, -/obj/random/trash, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/thirddeck/aftstarboard) -"cq" = ( -/obj/structure/railing/mapped{ - dir = 1; - icon_state = "railing0-1" - }, -/turf/simulated/floor/plating, -/area/maintenance/thirddeck/aftstarboard) -"cr" = ( -/obj/machinery/power/apc{ - dir = 2; - name = "south bump"; - pixel_y = -24 - }, -/obj/structure/cable/green, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/thirddeck/aftstarboard) -"cs" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/door/airlock/civilian{ - name = "Galley" - }, -/turf/simulated/floor/tiled/steel_ridged, -/area/crew_quarters/galley) -"ct" = ( -/obj/machinery/door/airlock/command{ - autoset_access = 0; - name = "Officer's Mess"; - req_access = newlist() - }, -/obj/effect/floor_decal/corner/blue/diagonal{ - dir = 4 - }, -/obj/machinery/door/firedoor, -/turf/simulated/floor/tiled/white, -/area/crew_quarters/mess) -"cu" = ( -/obj/machinery/atmospherics/unary/engine{ - dir = 8 - }, -/turf/simulated/floor/plating, -/area/thruster/d3starboard) -"cv" = ( -/obj/structure/lattice, -/turf/simulated/wall/r_wall/hull, -/area/maintenance/thirddeck/aftstarboard) -"cw" = ( -/obj/effect/floor_decal/corner/green/half{ - dir = 1; - icon_state = "bordercolorhalf" - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/thirddeck/aft) -"cx" = ( -/obj/machinery/telecomms/bus/preset_one, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/floor/bluegrid, -/area/tcommsat/chamber) -"cy" = ( -/obj/machinery/telecomms/processor/preset_one, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/floor/bluegrid, -/area/tcommsat/chamber) -"cz" = ( -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/dark, -/area/tcommsat/chamber) -"cA" = ( -/obj/item/stock_parts/micro_laser, -/obj/item/stock_parts/manipulator, -/obj/item/stock_parts/manipulator, -/obj/item/stock_parts/manipulator, -/obj/item/stock_parts/manipulator, -/obj/item/stock_parts/capacitor, -/obj/item/stock_parts/micro_laser/high, -/obj/item/stock_parts/micro_laser/high, -/obj/item/stock_parts/micro_laser/high, -/obj/item/stock_parts/micro_laser/high, -/obj/structure/table/rack, -/obj/item/device/radio/intercom{ - dir = 4; - pixel_x = -21 - }, -/turf/simulated/floor/tiled/monotile, -/area/tcommsat/storage) -"cB" = ( -/turf/simulated/floor/tiled, -/area/tcommsat/storage) -"cC" = ( -/obj/machinery/light/small{ - dir = 4 - }, -/obj/machinery/firealarm{ - dir = 4; - pixel_x = 24 - }, -/turf/simulated/floor/tiled/monotile, -/area/tcommsat/storage) -"cD" = ( -/obj/structure/table/rack, -/obj/random/maintenance/solgov, -/obj/random/technology_scanner, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/thirddeck/forestarboard) -"cE" = ( -/obj/structure/table/rack, -/obj/random/maintenance/solgov, -/obj/random/tank, -/obj/random/maintenance/solgov, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/thirddeck/forestarboard) -"cF" = ( -/obj/structure/table/rack, -/obj/random/maintenance/solgov, -/obj/random/maintenance/solgov, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/thirddeck/forestarboard) -"cG" = ( -/turf/simulated/wall/prepainted, -/area/maintenance/thirddeck/forestarboard) -"cH" = ( -/obj/machinery/portable_atmospherics/powered/pump/filled, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/thirddeck/forestarboard) -"cI" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, -/obj/structure/disposalpipe/segment{ - dir = 4; - icon_state = "pipe-c" - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/thirddeck/forestarboard) -"cJ" = ( -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/maintenance/thirddeck/forestarboard) -"cK" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/thirddeck/forestarboard) -"cL" = ( -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/door/airlock/maintenance{ - name = "Hydroponics Storage Maintenance" - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/steel_ridged, -/area/hydroponics/storage) -"cM" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/effect/floor_decal/corner/green{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/obj/structure/disposalpipe/segment{ - dir = 1; - icon_state = "pipe-c" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/obj/machinery/honey_extractor, -/obj/machinery/alarm{ - dir = 4; - pixel_x = -23; - pixel_y = 0 - }, -/turf/simulated/floor/tiled, -/area/hydroponics/storage) -"cN" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/hydroponics/storage) -"cO" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/floor_decal/corner/green{ - dir = 6 - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/turf/simulated/floor/tiled, -/area/hydroponics/storage) -"cP" = ( -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/door/airlock/glass/civilian{ - name = "Hydroponics Storage" - }, -/turf/simulated/floor/tiled/steel_ridged, -/area/hydroponics) -"cQ" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/floor_decal/corner/green{ - dir = 9 - }, -/turf/simulated/floor/tiled/monotile, -/area/hydroponics) -"cR" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/hologram/holopad, -/obj/structure/cable/green{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/hydroponics) -"cS" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/catwalk_plated, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply, -/turf/simulated/floor/plating, -/area/hallway/primary/thirddeck/center) -"cT" = ( -/obj/effect/floor_decal/corner/blue/diagonal{ - dir = 4 - }, -/obj/structure/disposalpipe/segment, -/obj/item/stool/bar/padded, -/turf/simulated/floor/tiled/white, -/area/crew_quarters/mess) -"cU" = ( -/obj/structure/table/standard, -/obj/machinery/power/apc{ - dir = 8; - name = "west bump"; - pixel_x = -24 - }, -/obj/structure/cable/green{ - d2 = 4; - icon_state = "0-4" - }, -/obj/item/sticky_pad/random, -/turf/simulated/floor/tiled/dark, -/area/crew_quarters/bar) -"cV" = ( -/obj/effect/floor_decal/corner/green{ - dir = 10; - icon_state = "corner_white" - }, -/turf/simulated/floor/tiled/monotile, -/area/hallway/primary/thirddeck/center) -"cW" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark, -/area/engineering/hardstorage) -"cX" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/turf/simulated/floor/tiled, -/area/hydroponics) -"cY" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/floor_decal/corner/green{ - dir = 6 - }, -/turf/simulated/floor/tiled, -/area/hydroponics) -"cZ" = ( -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/door/airlock/maintenance{ - name = "Hydroponics Maintenance" - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/steel_ridged, -/area/hydroponics) -"da" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/thirddeck/starboard) -"db" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 1 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/catwalk, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/plating, -/area/maintenance/thirddeck/starboard) -"dc" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/obj/structure/disposalpipe/segment{ - dir = 2; - icon_state = "pipe-c" - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/structure/catwalk, -/obj/effect/floor_decal/industrial/warning{ - dir = 8; - icon_state = "warning" - }, -/turf/simulated/floor/plating, -/area/maintenance/thirddeck/starboard) -"dd" = ( -/turf/simulated/floor/tiled, -/area/maintenance/thirddeck/starboard) -"de" = ( -/obj/item/beach_ball, -/turf/simulated/floor/plating, -/area/maintenance/thirddeck/starboard) -"df" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/disposalpipe/segment, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/thirddeck/starboard) -"dg" = ( -/obj/machinery/space_heater, -/turf/simulated/floor/plating, -/area/maintenance/thirddeck/starboard) -"dh" = ( -/obj/effect/floor_decal/corner/blue/diagonal{ - dir = 4 - }, -/obj/machinery/vending/sovietsoda, -/turf/simulated/floor/tiled/dark, -/area/vacant/mess) -"di" = ( -/obj/effect/floor_decal/corner/blue/diagonal{ - dir = 4 - }, -/obj/machinery/computer/arcade/orion_trail, -/turf/simulated/floor/tiled/dark, -/area/vacant/mess) -"dj" = ( -/obj/effect/floor_decal/corner/blue/diagonal{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark, -/area/vacant/mess) -"dk" = ( -/obj/structure/closet/secure_closet/freezer/fridge, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/item/reagent_containers/food/condiment/enzyme, -/turf/simulated/floor/tiled/freezer, -/area/crew_quarters/galleybackroom) -"dl" = ( -/turf/simulated/wall/prepainted, -/area/maintenance/substation/thirddeck) -"dm" = ( -/obj/structure/sign/warning/high_voltage, -/turf/simulated/wall/prepainted, -/area/maintenance/substation/thirddeck) -"dn" = ( -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/thirddeck/aftstarboard) -"do" = ( -/obj/structure/closet/emcloset, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/thirddeck/port) -"dp" = ( -/obj/machinery/firealarm{ - dir = 4; - pixel_x = 24 - }, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/tcommsat/chamber) -"dq" = ( -/obj/structure/table/rack, -/obj/item/stock_parts/subspace/treatment, -/obj/item/stock_parts/subspace/treatment, -/obj/item/stock_parts/subspace/treatment, -/turf/simulated/floor/tiled/monotile, -/area/tcommsat/storage) -"dr" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 8 - }, -/turf/simulated/floor/tiled/dark, -/area/engineering/hardstorage) -"ds" = ( -/obj/structure/window/reinforced{ - dir = 1 - }, -/obj/structure/window/reinforced, -/obj/machinery/door/window/brigdoor/southleft{ - dir = 8; - name = "suit storage" - }, -/obj/item/rig/eva/equipped, -/obj/item/rig/eva/equipped, -/obj/structure/table/rack{ - dir = 8 - }, -/obj/machinery/light/small{ - dir = 4; - icon_state = "bulb1" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/engineering/hardstorage) -"dt" = ( -/obj/machinery/power/apc{ - dir = 4; - name = "east bump"; - pixel_x = 24 - }, -/obj/structure/cable/green{ - d2 = 8; - icon_state = "0-8" - }, -/turf/simulated/floor/tiled/monotile, -/area/tcommsat/storage) -"du" = ( -/obj/effect/floor_decal/corner/grey/diagonal{ - dir = 4 - }, -/obj/random_multi/single_item/runtime, -/turf/simulated/floor/tiled/white, -/area/crew_quarters/galley) -"dv" = ( -/turf/simulated/wall/prepainted, -/area/engineering/atmos/aux) -"dw" = ( -/obj/random/obstruction, -/turf/simulated/floor/plating, -/area/maintenance/thirddeck/forestarboard) -"dx" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/disposalpipe/segment, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/thirddeck/forestarboard) -"dy" = ( -/turf/simulated/wall/prepainted, -/area/crew_quarters/galleybackroom) -"dz" = ( -/obj/structure/railing/mapped{ - dir = 1; - icon_state = "railing0-1" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/blue{ - dir = 5; - icon_state = "intact" - }, -/obj/random/trash, -/obj/machinery/light{ - dir = 8 - }, -/turf/simulated/floor/plating, -/area/command/disperser) -"dA" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/blast/shutters{ - dir = 2; - id_tag = "kitchen"; - name = "Kitchen Shutters" - }, -/obj/effect/wallframe_spawn/no_grille, -/turf/simulated/floor/plating, -/area/hydroponics/storage) -"dB" = ( -/obj/effect/floor_decal/corner/green{ - dir = 8 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/thirddeck/center) -"dC" = ( -/obj/effect/floor_decal/corner/green{ - dir = 10 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/thirddeck/center) -"dD" = ( -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/thirddeck/starboard) -"dE" = ( -/obj/machinery/door/blast/shutters{ - density = 0; - dir = 4; - icon_state = "shutter0"; - id_tag = "hab_checkpoint_shutters"; - name = "Hangar Deck Checkpoint Shutters"; - opacity = 0 - }, -/obj/structure/table/steel_reinforced, -/obj/machinery/door/window/brigdoor/eastleft{ - name = "Checkpoint Desk" - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/security/habcheck) -"dF" = ( -/obj/effect/floor_decal/corner/blue/diagonal{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/bed/chair{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/crew_quarters/mess) -"dG" = ( -/obj/structure/reagent_dispensers/watertank, -/obj/item/reagent_containers/glass/bucket, -/obj/machinery/light{ - dir = 8 - }, -/obj/machinery/camera/network/third_deck{ - c_tag = "Hydroponics - Fore"; - dir = 1 - }, -/obj/effect/floor_decal/corner/green{ - dir = 1; - icon_state = "corner_white" - }, -/turf/simulated/floor/tiled/monotile, -/area/hydroponics) -"dH" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/machinery/seed_storage/garden, -/turf/simulated/floor/tiled, -/area/hydroponics) -"dI" = ( -/obj/structure/catwalk, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/turf/simulated/floor/plating, -/area/maintenance/thirddeck/starboard) -"dK" = ( -/obj/machinery/door/airlock/civilian{ - name = "Head" - }, -/obj/machinery/door/firedoor, -/turf/simulated/floor/tiled/steel_ridged, -/area/crew_quarters/head) -"dM" = ( -/obj/machinery/suit_storage_unit/atmos/alt/sol, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled/techfloor/grid, -/area/engineering/hardstorage) -"dN" = ( -/obj/machinery/disposal, -/obj/structure/disposalpipe/trunk{ - dir = 8 - }, -/obj/machinery/light{ - dir = 4 - }, -/obj/machinery/camera/network/third_deck{ - c_tag = "Hydroponics - Aft"; - dir = 1 - }, -/obj/effect/floor_decal/industrial/hatch/yellow, -/turf/simulated/floor/tiled, -/area/hydroponics) -"dO" = ( -/obj/machinery/field_generator, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/thirddeck/starboard) -"dP" = ( -/obj/machinery/light, -/obj/effect/floor_decal/corner/green{ - dir = 10; - icon_state = "corner_white" - }, -/obj/machinery/power/apc{ - dir = 2; - name = "south bump"; - pixel_y = -24 - }, -/obj/structure/cable/green, -/turf/simulated/floor/tiled, -/area/hallway/primary/thirddeck/center) -"dQ" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/disposalpipe/segment, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/catwalk, -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 1; - icon_state = "warningcorner" - }, -/obj/machinery/alarm{ - dir = 8; - pixel_x = 25; - pixel_y = 0; - req_access = list(list("ACCESS_ENGINE_EQUIP","ACCESS_ATMOS")) - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 8; - icon_state = "warning" - }, -/turf/simulated/floor/plating, -/area/maintenance/thirddeck/starboard) -"dR" = ( -/obj/structure/closet/athletic_mixed, -/turf/simulated/floor/plating, -/area/maintenance/thirddeck/starboard) -"dS" = ( -/obj/machinery/washing_machine, -/turf/simulated/floor/tiled, -/area/maintenance/thirddeck/starboard) -"dT" = ( -/obj/machinery/alarm{ - dir = 8; - icon_state = "alarm0"; - pixel_x = 24 - }, -/obj/machinery/portable_atmospherics/powered/scrubber, -/turf/simulated/floor/plating, -/area/maintenance/thirddeck/starboard) -"dU" = ( -/obj/effect/floor_decal/corner/blue/diagonal{ - dir = 4 - }, -/obj/effect/decal/cleanable/cobweb, -/obj/structure/table/steel, -/obj/item/storage/box/condimentbottles, -/turf/simulated/floor/tiled/dark, -/area/vacant/mess) -"dV" = ( -/obj/effect/floor_decal/corner/blue/diagonal{ - dir = 4 - }, -/obj/structure/bed/chair/comfy/brown{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/dark, -/area/vacant/mess) -"dW" = ( -/obj/effect/decal/cleanable/dirt, -/obj/random_multi/single_item/poppy, -/turf/simulated/floor/plating, -/area/vacant/mess) -"dX" = ( -/obj/effect/decal/cleanable/dirt, -/obj/item/frame/apc, -/turf/simulated/floor/plating, -/area/vacant/mess) -"dY" = ( -/obj/effect/floor_decal/corner/blue/diagonal{ - dir = 4 - }, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 4 - }, -/obj/structure/disposalpipe/segment, -/obj/item/stool/bar/padded, -/turf/simulated/floor/tiled/white, -/area/crew_quarters/mess) -"dZ" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/thirddeck/aftstarboard) -"ea" = ( -/obj/machinery/door/firedoor, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/door/airlock/engineering{ - name = "Third Deck Substation" - }, -/turf/simulated/floor/tiled/steel_ridged, -/area/maintenance/substation/thirddeck) -"eb" = ( -/obj/structure/cable/green{ - d2 = 4; - icon_state = "0-4" - }, -/obj/structure/cable/green{ - d2 = 2; - icon_state = "0-2" - }, -/obj/structure/cable/green{ - d2 = 8; - icon_state = "0-8" - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 4 - }, -/obj/machinery/power/sensor{ - name = "Powernet Sensor - Third Deck Subgrid"; - name_tag = "Third Deck Subgrid" - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/substation/thirddeck) -"ec" = ( -/obj/structure/cable/green{ - d2 = 4; - icon_state = "0-4" - }, -/obj/structure/cable/green{ - d2 = 8; - icon_state = "0-8" - }, -/obj/machinery/power/smes/buildable/preset/torch/substation{ - RCon_tag = "Substation - Third Deck" - }, -/obj/item/device/radio/intercom{ - pixel_y = 23 - }, -/turf/simulated/floor/plating, -/area/maintenance/substation/thirddeck) -"ed" = ( -/obj/machinery/power/breakerbox/activated{ - RCon_tag = "Third Deck Substation Bypass" - }, -/obj/machinery/light/small{ - dir = 1 - }, -/turf/simulated/floor/plating, -/area/maintenance/substation/thirddeck) -"ee" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 4 - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/manifold/visible/fuel{ - dir = 8 - }, -/turf/simulated/floor/tiled/techfloor, -/area/thruster/d3starboard) -"ef" = ( -/obj/random/maintenance/solgov, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/thirddeck/aftstarboard) -"eg" = ( -/obj/random/torchcloset, -/obj/item/storage/box/lights/mixed, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/thirddeck/aftstarboard) -"eh" = ( -/obj/machinery/telecomms/broadcaster/preset_right, -/obj/machinery/light{ - dir = 8 - }, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/floor/bluegrid, -/area/tcommsat/chamber) -"ei" = ( -/obj/structure/table/rack, -/obj/item/stock_parts/circuitboard/telecomms/processor, -/obj/item/stock_parts/circuitboard/telecomms/processor, -/obj/item/stock_parts/circuitboard/telecomms/receiver, -/obj/item/stock_parts/circuitboard/telecomms/server, -/obj/item/stock_parts/circuitboard/telecomms/server, -/obj/item/stock_parts/circuitboard/telecomms/bus, -/obj/item/stock_parts/circuitboard/telecomms/bus, -/obj/item/stock_parts/circuitboard/telecomms/broadcaster, -/turf/simulated/floor/tiled, -/area/tcommsat/storage) -"ej" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/obj/structure/cable/green{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/tcommsat/chamber) -"ek" = ( -/obj/machinery/telecomms/server/presets/science, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/floor/bluegrid, -/area/tcommsat/chamber) -"el" = ( -/obj/machinery/telecomms/server/presets/supply, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/floor/bluegrid, -/area/tcommsat/chamber) -"em" = ( -/obj/machinery/telecomms/server/presets/medical, -/obj/effect/floor_decal/industrial/outline/grey, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/bluegrid, -/area/tcommsat/chamber) -"en" = ( -/turf/simulated/wall/prepainted, -/area/tcommsat/computer) -"eo" = ( -/obj/machinery/door/airlock/highsecurity{ - name = "Telecoms Storage" - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/steel_ridged, -/area/tcommsat/computer) -"ep" = ( -/turf/simulated/wall/r_wall/prepainted, -/area/tcommsat/computer) -"eq" = ( -/obj/structure/grille, -/turf/simulated/floor/plating, -/area/maintenance/thirddeck/forestarboard) -"er" = ( -/obj/machinery/atmospherics/unary/tank/air, -/obj/effect/floor_decal/industrial/outline/blue, -/turf/simulated/floor/tiled/techfloor, -/area/engineering/atmos/aux) -"es" = ( -/obj/structure/table/rack, -/obj/random/maintenance/solgov, -/obj/random/maintenance/solgov, -/obj/random/maintenance/solgov, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/thirddeck/forestarboard) -"et" = ( -/obj/machinery/power/apc{ - dir = 1; - name = "north bump"; - pixel_x = 0; - pixel_y = 24 - }, -/obj/structure/cable/green{ - d2 = 2; - icon_state = "0-2" - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/structure/closet/secure_closet/freezer/meat, -/obj/item/reagent_containers/food/condiment/barbecue, -/turf/simulated/floor/tiled/freezer, -/area/crew_quarters/galleybackroom) -"eu" = ( -/obj/machinery/icecream_vat, -/turf/simulated/floor/tiled/freezer, -/area/crew_quarters/galleybackroom) -"ev" = ( -/turf/simulated/wall/prepainted, -/area/crew_quarters/galley) -"ew" = ( -/obj/effect/floor_decal/corner/grey/diagonal{ - dir = 4 - }, -/obj/machinery/light{ - dir = 4; - icon_state = "tube1" - }, -/turf/simulated/floor/tiled/white, -/area/crew_quarters/galley) -"ex" = ( -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 8; - icon_state = "warningcorner" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark, -/area/engineering/hardstorage) -"ey" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/blast/shutters{ - dir = 2; - id_tag = "kitchen"; - name = "Kitchen Shutters" - }, -/obj/effect/wallframe_spawn/no_grille, -/turf/simulated/floor/plating, -/area/crew_quarters/galley) -"ez" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/hatch/maintenance, -/turf/simulated/floor/tiled/steel_ridged, -/area/hallway/primary/thirddeck/fore) -"eA" = ( -/obj/random/trash, -/turf/simulated/floor/tiled/monotile, -/area/vacant/brig) -"eB" = ( -/obj/machinery/light{ - dir = 1; - icon_state = "tube1" - }, -/obj/structure/table/rack, -/obj/item/towel/random, -/obj/item/towel/random, -/obj/item/towel/random, -/obj/machinery/firealarm{ - pixel_y = 21 - }, -/turf/simulated/floor/tiled/freezer, -/area/crew_quarters/head) -"eC" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/disposalpipe/segment, -/obj/machinery/door/airlock/glass/civilian{ - name = "Hydroponics Bay" - }, -/obj/machinery/door/firedoor, -/turf/simulated/floor/tiled/steel_ridged, -/area/hydroponics) -"eD" = ( -/obj/machinery/vending/lavatory, -/turf/simulated/floor/tiled/freezer, -/area/crew_quarters/head) -"eE" = ( -/obj/machinery/door/unpowered/simple/plastic/open, -/turf/simulated/floor/tiled/freezer, -/area/crew_quarters/head) -"eF" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/door/firedoor, -/obj/structure/disposalpipe/segment, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/maintenance/thirddeck/starboard) -"eG" = ( -/obj/effect/floor_decal/corner/blue/diagonal{ - dir = 4 - }, -/obj/item/device/radio/intercom/entertainment{ - dir = 8; - pixel_x = 22 - }, -/obj/machinery/vending/snix{ - dir = 4; - icon_state = "snix" - }, -/turf/simulated/floor/tiled/dark, -/area/vacant/mess) -"eH" = ( -/obj/machinery/door/airlock/maintenance, -/obj/machinery/door/firedoor, -/turf/simulated/floor/tiled/techfloor/grid, -/area/maintenance/thirddeck/foreport) -"eI" = ( -/turf/simulated/wall/prepainted, -/area/engineering/hardstorage) -"eJ" = ( -/obj/machinery/alarm{ - dir = 4; - icon_state = "alarm0"; - pixel_x = -22; - pixel_y = 0 - }, -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 4; - icon_state = "warningcorner" - }, -/obj/structure/catwalk, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/plating, -/area/maintenance/substation/thirddeck) -"eK" = ( -/obj/machinery/power/terminal{ - dir = 1; - icon_state = "term" - }, -/obj/structure/cable{ - d2 = 4; - icon_state = "0-4" - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 1 - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/substation/thirddeck) -"eL" = ( -/obj/structure/disposalpipe/trunk{ - dir = 4 - }, -/obj/machinery/disposal, -/obj/machinery/newscaster{ - pixel_x = -32 - }, -/obj/effect/floor_decal/industrial/hatch/yellow, -/obj/machinery/camera/network/third_deck{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/crew_quarters/gym) -"eM" = ( -/obj/machinery/door/firedoor, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/door/airlock/engineering{ - name = "Utility Up" - }, -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 1; - icon_state = "warningcorner" - }, -/turf/simulated/floor/tiled/steel_ridged, -/area/maintenance/substation/thirddeck) -"eN" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/thirddeck/aftstarboard) -"eO" = ( -/obj/machinery/atmospherics/pipe/simple/visible/fuel{ - dir = 6 - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/thruster/d3starboard) -"eP" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/catwalk, -/obj/machinery/atmospherics/binary/pump/high_power/on{ - dir = 4; - target_pressure = 15000 - }, -/turf/simulated/floor/plating, -/area/thruster/d3starboard) -"eQ" = ( -/obj/item/device/radio/intercom{ - dir = 4; - pixel_x = -21 - }, -/obj/machinery/disposal, -/obj/effect/floor_decal/industrial/hatch/yellow, -/obj/structure/disposalpipe/trunk{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark, -/area/crew_quarters/bar) -"eR" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/obj/structure/cable{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/structure/disposalpipe/segment{ - dir = 2; - icon_state = "pipe-c" - }, -/obj/machinery/atmospherics/pipe/simple/visible/fuel{ - dir = 10 - }, -/obj/machinery/alarm{ - dir = 8; - icon_state = "alarm0"; - pixel_x = 24 - }, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/thirddeck/aftstarboard) -"eS" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark, -/area/tcommsat/chamber) -"eT" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 4 - }, -/obj/effect/catwalk_plated/dark, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/plating, -/area/tcommsat/chamber) -"eU" = ( -/obj/machinery/telecomms/server/presets/engineering, -/turf/simulated/floor/bluegrid, -/area/tcommsat/chamber) -"eV" = ( -/obj/machinery/telecomms/server/presets/security, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/floor/bluegrid, -/area/tcommsat/chamber) -"eW" = ( -/obj/machinery/telecomms/server/presets/service, -/obj/effect/floor_decal/industrial/outline/grey, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/bluegrid, -/area/tcommsat/chamber) -"eX" = ( -/obj/effect/wallframe_spawn/reinforced, -/turf/simulated/floor/plating, -/area/tcommsat/computer) -"eY" = ( -/obj/structure/cable/cyan{ - d2 = 2; - icon_state = "0-2" - }, -/obj/machinery/power/smes/buildable/preset/on_full{ - RCon_tag = "Substation - Telecommunications" - }, -/turf/simulated/floor/tiled/dark, -/area/tcommsat/computer) -"eZ" = ( -/obj/machinery/power/terminal{ - dir = 8 - }, -/obj/structure/cable/green{ - d2 = 2; - icon_state = "0-2" - }, -/turf/simulated/floor/tiled/dark, -/area/tcommsat/computer) -"fa" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/dark, -/area/tcommsat/computer) -"fb" = ( -/obj/machinery/light{ - dir = 1 - }, -/obj/structure/closet/toolcloset, -/turf/simulated/floor/tiled/dark/monotile, -/area/tcommsat/computer) -"fc" = ( -/obj/machinery/atmospherics/pipe/manifold/visible/cyan{ - dir = 8; - icon_state = "map" - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 1; - icon_state = "warning" - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/engineering/atmos/aux) -"fd" = ( -/obj/machinery/atmospherics/pipe/manifold/visible/cyan, -/obj/effect/floor_decal/industrial/warning{ - dir = 1; - icon_state = "warning" - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/engineering/atmos/aux) -"fe" = ( -/obj/machinery/atmospherics/pipe/simple/visible/cyan{ - dir = 9; - icon_state = "intact" - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 1; - icon_state = "warning" - }, -/obj/machinery/portable_atmospherics/canister/empty, -/turf/simulated/floor/tiled/techfloor, -/area/engineering/atmos/aux) -"ff" = ( -/obj/machinery/door/firedoor, -/turf/simulated/floor/tiled/techfloor/grid, -/area/maintenance/thirddeck/forestarboard) -"fg" = ( -/obj/machinery/alarm{ - dir = 4; - pixel_x = -23; - pixel_y = 0 - }, -/obj/structure/railing/mapped{ - dir = 4; - icon_state = "railing0-1" - }, -/obj/structure/railing/mapped{ - dir = 1; - icon_state = "railing0-1" - }, -/obj/random_multi/single_item/poppy, -/turf/simulated/floor/plating, -/area/maintenance/thirddeck/forestarboard) -"fh" = ( -/obj/structure/disposalpipe/segment, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/random/trash, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 8 - }, -/obj/structure/catwalk, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 8 - }, -/turf/simulated/floor/plating, -/area/maintenance/thirddeck/forestarboard) -"fi" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/railing/mapped{ - dir = 8; - icon_state = "railing0-1" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/maintenance/thirddeck/forestarboard) -"fj" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/turf/simulated/floor/plating, -/area/maintenance/thirddeck/forestarboard) -"fk" = ( -/obj/structure/cable/green{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/tcommsat/chamber) -"fl" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/civilian{ - name = "Head" - }, -/turf/simulated/floor/tiled/steel_ridged, -/area/crew_quarters/head) -"fm" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 8 - }, -/turf/simulated/floor/tiled/white/monotile, -/area/crew_quarters/sleep/cryo) -"fn" = ( -/obj/machinery/door/airlock/engineering{ - name = "Engineering Hard Storage" - }, -/obj/machinery/door/firedoor, -/turf/simulated/floor/tiled/dark/monotile, -/area/engineering/hardstorage) -"fo" = ( -/obj/item/storage/mirror{ - pixel_y = 32 - }, -/obj/structure/hygiene/sink{ - dir = 1; - pixel_y = 16 - }, -/turf/simulated/floor/tiled/freezer, -/area/crew_quarters/head) -"fp" = ( -/obj/effect/floor_decal/corner/grey/diagonal{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/crew_quarters/galley) -"fq" = ( -/obj/effect/floor_decal/corner/grey/diagonal{ - dir = 4 - }, -/obj/machinery/cooker/grill, -/obj/machinery/light{ - dir = 1 - }, -/obj/structure/closet/shipping_wall/filled{ - pixel_y = 32 - }, -/turf/simulated/floor/tiled/white, -/area/crew_quarters/galley) -"fr" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 8 - }, -/turf/simulated/floor/tiled/dark, -/area/engineering/hardstorage) -"fs" = ( -/obj/effect/floor_decal/corner/lime{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/disposalpipe/segment, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/thirddeck/aft) -"ft" = ( -/obj/machinery/firealarm{ - dir = 8; - pixel_x = -24 - }, -/obj/structure/closet/secure_closet/bar_torch, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark, -/area/crew_quarters/bar) -"fv" = ( -/obj/structure/table/marble, -/obj/machinery/microwave{ - pixel_x = -3; - pixel_y = 6 - }, -/obj/effect/floor_decal/corner/grey/diagonal{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/crew_quarters/galley) -"fw" = ( -/obj/structure/table/marble, -/obj/machinery/reagentgrinder/juicer, -/obj/item/reagent_containers/glass/beaker/large, -/obj/effect/floor_decal/corner/grey/diagonal{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/crew_quarters/galley) -"fy" = ( -/obj/structure/table/marble, -/obj/item/reagent_containers/food/condiment/enzyme, -/obj/effect/floor_decal/corner/grey/diagonal{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/crew_quarters/galley) -"fz" = ( -/obj/structure/sign/poster, -/turf/simulated/wall/prepainted, -/area/crew_quarters/head) -"fA" = ( -/obj/effect/floor_decal/corner/blue{ - dir = 6 - }, -/turf/simulated/floor/tiled/dark, -/area/command/disperser) -"fB" = ( -/turf/simulated/wall/prepainted, -/area/crew_quarters/mess) -"fC" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 1; - icon_state = "map-scrubbers" - }, -/turf/simulated/floor/tiled/monotile, -/area/hallway/primary/thirddeck/fore) -"fD" = ( -/obj/item/storage/secure/safe{ - pixel_x = 32; - pixel_y = 0 - }, -/obj/structure/closet/secure_closet/personal/empty, -/turf/simulated/floor/tiled/freezer, -/area/crew_quarters/head) -"fE" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 8; - icon_state = "warning" - }, -/obj/structure/catwalk, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/maintenance/thirddeck/starboard) -"fF" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/catwalk, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 1 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/maintenance/thirddeck/starboard) -"fG" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/alarm{ - dir = 1; - icon_state = "alarm0"; - pixel_y = -22 - }, -/obj/structure/catwalk, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/maintenance/thirddeck/starboard) -"fH" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9; - pixel_y = 0 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/structure/disposalpipe/segment{ - dir = 8; - icon_state = "pipe-c" - }, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/thirddeck/starboard) -"fI" = ( -/obj/structure/grille, -/obj/structure/lattice, -/turf/space, -/area/space) -"fJ" = ( -/turf/simulated/floor/wood/walnut, -/area/crew_quarters/observation) -"fK" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/obj/structure/disposalpipe/segment{ - dir = 1; - icon_state = "pipe-c" - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/thirddeck/starboard) -"fL" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/alarm{ - dir = 1; - icon_state = "alarm0"; - pixel_y = -22 - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/thirddeck/starboard) -"fM" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 1 - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/thirddeck/starboard) -"fN" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9; - pixel_y = 0 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/structure/disposalpipe/segment{ - dir = 8; - icon_state = "pipe-c" - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/thirddeck/starboard) -"fO" = ( -/obj/effect/floor_decal/corner/blue/diagonal{ - dir = 4 - }, -/obj/structure/table/marble, -/turf/simulated/floor/tiled/dark, -/area/vacant/mess) -"fP" = ( -/obj/effect/floor_decal/corner/red/diagonal, -/obj/effect/decal/cleanable/dirt, -/obj/random/junk, -/turf/simulated/floor/tiled/dark, -/area/vacant/mess) -"fQ" = ( -/obj/structure/table, -/obj/random/trash, -/turf/simulated/floor/plating, -/area/vacant/mess) -"fR" = ( -/obj/effect/floor_decal/corner/red/diagonal, -/obj/structure/closet/cabinet, -/turf/simulated/floor/tiled/dark, -/area/vacant/mess) -"fS" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/door/airlock/civilian{ - name = "Head" - }, -/obj/machinery/door/firedoor, -/turf/simulated/floor/tiled/freezer, -/area/crew_quarters/sleep/cryo) -"fT" = ( -/obj/structure/table/rack, -/obj/random/maintenance/solgov, -/obj/random/maintenance/solgov, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/thirddeck/foreport) -"fU" = ( -/obj/structure/table/steel, -/obj/random/maintenance/solgov, -/obj/random/maintenance/solgov, -/turf/simulated/floor/tiled, -/area/maintenance/thirddeck/starboard) -"fV" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 1 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 1 - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/turf/simulated/floor/tiled/freezer, -/area/crew_quarters/head) -"fW" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/alarm{ - dir = 1; - pixel_y = -22 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/tiled/freezer, -/area/crew_quarters/head) -"fX" = ( -/obj/structure/cable{ - d1 = 16; - d2 = 0; - icon_state = "16-0"; - pixel_y = 0 - }, -/obj/effect/floor_decal/industrial/warning/full, -/obj/machinery/atmospherics/pipe/zpipe/up/scrubbers{ - color = "#ff0000"; - dir = 1 - }, -/obj/machinery/atmospherics/pipe/zpipe/up/supply{ - color = "#0000ff"; - dir = 1 - }, -/obj/structure/cable, -/obj/structure/railing/mapped{ - dir = 1; - icon_state = "railing0-1" - }, -/turf/simulated/floor/plating, -/area/maintenance/thirddeck/aftstarboard) -"fY" = ( -/obj/machinery/atmospherics/pipe/simple/visible/fuel{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/thruster/d3starboard) -"fZ" = ( -/obj/effect/floor_decal/industrial/hatch/yellow, -/obj/structure/ladder/up, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/thirddeck/aftstarboard) -"ga" = ( -/obj/machinery/telecomms/hub/preset, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/floor/bluegrid, -/area/tcommsat/chamber) -"gb" = ( -/obj/machinery/bluespacerelay, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/floor/bluegrid, -/area/tcommsat/chamber) -"gc" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/obj/effect/catwalk_plated/dark, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/plating, -/area/tcommsat/chamber) -"gd" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/effect/catwalk_plated/dark, -/turf/simulated/floor/plating, -/area/tcommsat/chamber) -"ge" = ( -/obj/structure/cable/green{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/light_switch{ - pixel_x = 22; - pixel_y = -22 - }, -/turf/simulated/floor/tiled, -/area/tcommsat/storage) -"gf" = ( -/obj/machinery/door/airlock/hatch{ - name = "Telecoms Server Access"; - secured_wires = 1 - }, -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled/techmaint, -/area/tcommsat/computer) -"gg" = ( -/obj/machinery/light, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark, -/area/tcommsat/computer) -"gh" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/extinguisher_cabinet{ - pixel_y = -32 - }, -/turf/simulated/floor/tiled/dark, -/area/tcommsat/computer) -"gi" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark, -/area/tcommsat/computer) -"gj" = ( -/obj/machinery/alarm{ - dir = 8; - icon_state = "alarm0"; - pixel_x = 24 - }, -/obj/structure/table/rack, -/obj/item/clothing/suit/storage/hooded/wintercoat/engineering, -/obj/item/clothing/suit/storage/hooded/wintercoat/dais{ - pixel_y = 12 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/tcommsat/computer) -"gk" = ( -/obj/machinery/atmospherics/pipe/manifold/visible/cyan{ - dir = 8; - icon_state = "map" - }, -/obj/machinery/light/small{ - dir = 8 - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/engineering/atmos/aux) -"gl" = ( -/obj/machinery/atmospherics/portables_connector{ - dir = 8 - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/portable_atmospherics/powered/pump/filled, -/turf/simulated/floor/tiled/techfloor, -/area/engineering/atmos/aux) -"gm" = ( -/obj/machinery/atmospherics/portables_connector{ - dir = 4 - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/portable_atmospherics/powered/scrubber, -/turf/simulated/floor/tiled/techfloor, -/area/engineering/atmos/aux) -"gn" = ( -/obj/machinery/atmospherics/pipe/simple/visible/red{ - dir = 10; - icon_state = "intact" - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/engineering/atmos/aux) -"go" = ( -/obj/machinery/atmospherics/unary/freezer, -/obj/machinery/light/small{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor, -/area/engineering/atmos/aux) -"gp" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/plating, -/area/maintenance/thirddeck/forestarboard) -"gq" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable/green, -/obj/machinery/power/apc{ - dir = 8; - name = "west bump"; - pixel_x = -24 - }, -/obj/machinery/light{ - dir = 8 - }, -/turf/simulated/floor/tiled/dark, -/area/teleporter/thirddeck) -"gr" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/light, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/tiled/freezer, -/area/crew_quarters/head) -"gs" = ( -/turf/simulated/floor/tiled/freezer, -/area/crew_quarters/galleybackroom) -"gt" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/thirddeck/port) -"gu" = ( -/obj/structure/largecrate, -/obj/random/maintenance/solgov, -/obj/random/maintenance/solgov, -/obj/random/maintenance/solgov, -/obj/random/maintenance/solgov, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/thirddeck/foreport) -"gv" = ( -/obj/effect/floor_decal/corner/blue/diagonal{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4; - icon_state = "pipe-c" - }, -/turf/simulated/floor/tiled/white, -/area/crew_quarters/mess) -"gw" = ( -/obj/effect/floor_decal/corner/grey/diagonal{ - dir = 4 - }, -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/obj/effect/floor_decal/industrial/warning{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/crew_quarters/galley) -"gx" = ( -/obj/structure/lattice, -/obj/structure/disposalpipe/down{ - dir = 8 - }, -/turf/simulated/open, -/area/maintenance/thirddeck/aftport) -"gy" = ( -/obj/structure/disposalpipe/segment{ - dir = 4; - icon_state = "pipe-c" - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/effect/floor_decal/corner/blue/diagonal{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/crew_quarters/mess) -"gz" = ( -/obj/effect/floor_decal/corner/blue/diagonal{ - dir = 4 - }, -/obj/structure/disposalpipe/junction, -/turf/simulated/floor/tiled/white, -/area/crew_quarters/mess) -"gA" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/maintenance{ - name = "Mess Hall Maintenance" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/steel_ridged, -/area/crew_quarters/mess) -"gB" = ( -/obj/effect/floor_decal/industrial/outline/grey, -/obj/random_multi/single_item/piano, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/thirddeck/forestarboard) -"gC" = ( -/obj/structure/disposalpipe/up{ - dir = 1 - }, -/turf/simulated/floor/plating, -/area/maintenance/thirddeck/starboard) -"gD" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 8; - icon_state = "warning" - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/thirddeck/starboard) -"gE" = ( -/obj/effect/shuttle_landmark/ninja/deck4{ - name = "3rd Deck, Aft" - }, -/turf/space, -/area/space) -"gF" = ( -/obj/structure/disposalpipe/segment{ - dir = 8; - icon_state = "pipe-c" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9; - pixel_y = 0 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, -/obj/effect/catwalk_plated, -/turf/simulated/floor/plating, -/area/hallway/primary/thirddeck/fore) -"gG" = ( -/obj/effect/decal/cleanable/flour, -/turf/simulated/floor/plating, -/area/vacant/mess) -"gH" = ( -/obj/effect/landmark{ - name = "xeno_spawn"; - pixel_x = -1 - }, -/turf/simulated/floor/plating, -/area/vacant/mess) -"gI" = ( -/obj/effect/floor_decal/corner/red/diagonal, -/obj/effect/decal/cleanable/flour, -/turf/simulated/floor/tiled/dark, -/area/vacant/mess) -"gJ" = ( -/obj/structure/closet/secure_closet/freezer/fridge, -/obj/random/single/cola, -/obj/random/single/cola, -/obj/random/single/cola, -/obj/random/single/cola, -/obj/random/single/cola, -/obj/effect/decal/cleanable/dirt, -/obj/effect/floor_decal/corner/red/diagonal, -/turf/simulated/floor/tiled/dark, -/area/vacant/mess) -"gK" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled/freezer, -/area/crew_quarters/head) -"gL" = ( -/obj/structure/cable/green{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/hygiene/drain, -/turf/simulated/floor/tiled/freezer, -/area/crew_quarters/head) -"gM" = ( -/obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/thirddeck/foreport) -"gN" = ( -/obj/structure/curtain/black{ - name = "changing room" - }, -/turf/simulated/floor/carpet/magenta, -/area/crew_quarters/sleep/bunk) -"gO" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/tiled/freezer, -/area/crew_quarters/head) -"gP" = ( -/obj/effect/floor_decal/techfloor{ - dir = 4; - icon_state = "techfloor_edges" - }, -/obj/item/modular_computer/telescreen/preset/engineering{ - pixel_y = 32 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/engineering/hardstorage) -"gQ" = ( -/obj/structure/railing/mapped{ - dir = 1; - icon_state = "railing0-1" - }, -/obj/structure/railing/mapped{ - dir = 8; - icon_state = "railing0-1" - }, -/obj/random/trash, -/turf/simulated/floor/plating, -/area/maintenance/thirddeck/foreport) -"gR" = ( -/obj/structure/table/rack{ - dir = 8 - }, -/obj/item/device/suit_cooling_unit, -/obj/item/device/suit_cooling_unit, -/obj/effect/floor_decal/corner/yellow/half{ - dir = 8; - icon_state = "bordercolorhalf" - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled/dark/monotile, -/area/engineering/hardstorage) -"gS" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 4 - }, -/obj/structure/railing/mapped{ - dir = 8; - icon_state = "railing0-1" - }, -/turf/simulated/floor/tiled/dark, -/area/command/disperser) -"gT" = ( -/obj/structure/railing/mapped{ - dir = 1; - icon_state = "railing0-1" - }, -/obj/random/junk, -/turf/simulated/floor/plating, -/area/maintenance/thirddeck/foreport) -"gU" = ( -/obj/machinery/door/firedoor, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/disposalpipe/segment, -/obj/effect/floor_decal/industrial/hatch/yellow, -/turf/simulated/floor/tiled/monotile, -/area/hallway/primary/thirddeck/aft) -"gV" = ( -/obj/machinery/atmospherics/pipe/simple/visible/fuel{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/light_switch{ - pixel_x = -24; - pixel_y = 24 - }, -/turf/simulated/floor/tiled/techfloor, -/area/thruster/d3starboard) -"gW" = ( -/obj/machinery/atmospherics/pipe/simple/visible/fuel{ - dir = 4 - }, -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/techfloor, -/area/thruster/d3starboard) -"gX" = ( -/obj/effect/floor_decal/industrial/hatch/yellow, -/obj/structure/ladder, -/obj/structure/catwalk, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/thirddeck/aftstarboard) -"gY" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark, -/area/tcommsat/chamber) -"gZ" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 4 - }, -/obj/effect/catwalk_plated/dark, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/plating, -/area/tcommsat/chamber) -"ha" = ( -/obj/machinery/telecomms/server/presets/common, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/floor/bluegrid, -/area/tcommsat/chamber) -"hb" = ( -/obj/machinery/telecomms/server/presets/command, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/floor/bluegrid, -/area/tcommsat/chamber) -"hc" = ( -/obj/effect/floor_decal/industrial/outline/grey, -/obj/machinery/telecomms/server/presets/exploration, -/turf/simulated/floor/bluegrid, -/area/tcommsat/chamber) -"hd" = ( -/obj/effect/floor_decal/industrial/warning, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/camera/network/command{ - c_tag = "Telecommunications - Server Entry"; - dir = 4 - }, -/turf/simulated/floor/tiled/dark, -/area/tcommsat/computer) -"he" = ( -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 8; - icon_state = "warningcorner" - }, -/obj/structure/window/reinforced, -/obj/structure/table/steel, -/obj/machinery/cell_charger, -/obj/item/storage/lunchbox/dais{ - pixel_x = 6; - pixel_y = 6 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/tcommsat/computer) -"hf" = ( -/obj/machinery/alarm{ - dir = 8; - icon_state = "alarm0"; - pixel_x = 24 - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/thirddeck/forestarboard) -"hg" = ( -/obj/machinery/atmospherics/pipe/manifold/visible/cyan{ - dir = 8; - icon_state = "map" - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/engineering/atmos/aux) -"hh" = ( -/obj/machinery/atmospherics/pipe/manifold4w/visible/red, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/engineering/atmos/aux) -"hi" = ( -/obj/machinery/atmospherics/pipe/manifold/visible/red{ - dir = 4; - icon_state = "map" - }, -/obj/structure/railing/mapped{ - dir = 8; - icon_state = "railing0-1" - }, -/obj/structure/railing/mapped{ - dir = 1; - icon_state = "railing0-1" - }, -/obj/structure/closet/hydrant{ - pixel_x = 32 - }, -/turf/simulated/floor/plating, -/area/engineering/atmos/aux) -"hj" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/freezer, -/area/crew_quarters/head) -"hk" = ( -/obj/machinery/alarm{ - dir = 1; - icon_state = "alarm0"; - pixel_y = -22 - }, -/obj/machinery/camera/network/engineering{ - c_tag = "Substation - Third Deck"; - dir = 1 - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/substation/thirddeck) -"hl" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/seed_extractor, -/turf/simulated/floor/tiled, -/area/hydroponics/storage) -"hm" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/tiled/freezer, -/area/crew_quarters/galleybackroom) -"hn" = ( -/obj/machinery/light_switch{ - pixel_x = 24; - pixel_y = 28 - }, -/obj/machinery/firealarm{ - dir = 4; - pixel_x = 24 - }, -/obj/machinery/light{ - dir = 4 - }, -/turf/simulated/floor/tiled/freezer, -/area/crew_quarters/galleybackroom) -"ho" = ( -/obj/effect/floor_decal/corner/grey/diagonal{ - dir = 4 - }, -/obj/item/device/radio/intercom{ - dir = 4; - pixel_x = -21 - }, -/obj/machinery/cooker/oven, -/turf/simulated/floor/tiled/white, -/area/crew_quarters/galley) -"hp" = ( -/obj/machinery/light/small, -/obj/item/storage/secure/safe{ - pixel_x = 32; - pixel_y = 0 - }, -/obj/structure/closet/secure_closet/personal/empty, -/turf/simulated/floor/tiled/freezer, -/area/crew_quarters/head) -"hq" = ( -/obj/machinery/power/apc{ - dir = 1; - name = "north bump"; - pixel_x = 0; - pixel_y = 24 - }, -/obj/structure/cable/green{ - d2 = 2; - icon_state = "0-2" - }, -/obj/machinery/newscaster{ - pixel_x = 32 - }, -/turf/simulated/floor/tiled/dark, -/area/chapel/office) -"hr" = ( -/obj/structure/table/marble, -/obj/item/material/kitchen/rollingpin, -/obj/effect/floor_decal/corner/grey/diagonal{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/crew_quarters/galley) -"hs" = ( -/obj/effect/floor_decal/corner/grey/diagonal{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 4; - icon_state = "warningcorner" - }, -/turf/simulated/floor/tiled/white, -/area/crew_quarters/galley) -"ht" = ( -/obj/effect/floor_decal/corner/grey/diagonal{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4; - icon_state = "pipe-c" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 1; - icon_state = "warning" - }, -/turf/simulated/floor/tiled/white, -/area/crew_quarters/galley) -"hu" = ( -/obj/effect/floor_decal/corner/blue/diagonal{ - dir = 4 - }, -/obj/structure/disposalpipe/segment, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/jukebox{ - pixel_y = 4 - }, -/turf/simulated/floor/tiled/white, -/area/crew_quarters/mess) -"hv" = ( -/obj/structure/railing/mapped{ - dir = 1; - icon_state = "railing0-1" - }, -/turf/simulated/floor/plating, -/area/maintenance/thirddeck/foreport) -"hw" = ( -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/floor_decal/corner/blue/diagonal{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/crew_quarters/mess) -"hx" = ( -/obj/structure/fitness/weightlifter, -/turf/simulated/floor/tiled, -/area/crew_quarters/gym) -"hy" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 1; - icon_state = "warning" - }, -/obj/machinery/light, -/turf/simulated/floor/plating, -/area/maintenance/thirddeck/starboard) -"hz" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 1; - icon_state = "warningcorner" - }, -/obj/structure/catwalk, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 - }, -/turf/simulated/floor/plating, -/area/maintenance/thirddeck/starboard) -"hA" = ( -/turf/simulated/floor/reinforced{ - name = "Holodeck Projector Floor" - }, -/area/holodeck/alphadeck) -"hB" = ( -/obj/effect/floor_decal/corner/red/diagonal, -/obj/structure/table/marble, -/obj/machinery/chemical_dispenser/bar_soft/full, -/turf/simulated/floor/tiled/dark, -/area/vacant/mess) -"hC" = ( -/obj/effect/floor_decal/corner/red/diagonal, -/obj/structure/table/marble, -/turf/simulated/floor/tiled/dark, -/area/vacant/mess) -"hD" = ( -/obj/effect/floor_decal/corner/red/diagonal, -/obj/structure/table/marble, -/obj/machinery/reagentgrinder/juicer, -/obj/item/reagent_containers/glass/beaker/large, -/turf/simulated/floor/tiled/dark, -/area/vacant/mess) -"hE" = ( -/obj/structure/table/marble, -/obj/machinery/microwave, -/turf/simulated/floor/plating, -/area/vacant/mess) -"hG" = ( -/obj/structure/flora/pottedplant/minitree, -/turf/simulated/floor/wood/walnut, -/area/crew_quarters/recreation) -"hH" = ( -/obj/effect/floor_decal/techfloor/corner, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 8 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/engineering/hardstorage) -"hI" = ( -/obj/structure/lattice, -/obj/machinery/atmospherics/unary/vent_pump/tank{ - dir = 2; - external_pressure_bound = 0; - external_pressure_bound_default = 0; - icon_state = "map_vent_in"; - id_tag = "d3ph_out"; - initialize_directions = 1; - internal_pressure_bound = 2000; - internal_pressure_bound_default = 2000; - pressure_checks = 2; - pressure_checks_default = 2; - pump_direction = 0; - use_power = 1 - }, -/turf/simulated/floor/reinforced/hydrogen, -/area/thruster/d3port) -"hJ" = ( -/obj/structure/railing/mapped, -/obj/structure/lattice, -/obj/machinery/atmospherics/pipe/simple/hidden/cyan, -/turf/simulated/open, -/area/maintenance/thirddeck/port) -"hK" = ( -/obj/structure/railing/mapped{ - dir = 4; - icon_state = "railing0-1" - }, -/obj/structure/railing/mapped{ - dir = 1; - icon_state = "railing0-1" - }, -/turf/simulated/open, -/area/hallway/primary/thirddeck/fore) -"hL" = ( -/turf/simulated/wall/walnut, -/area/crew_quarters/head/sauna) -"hM" = ( -/obj/effect/floor_decal/industrial/warning/corner, -/turf/simulated/floor/airless, -/area/command/disperser) -"hN" = ( -/obj/random/junk, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/thirddeck/aftport) -"hO" = ( -/obj/machinery/atmospherics/pipe/simple/visible/fuel{ - dir = 4 - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 1 - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/machinery/light/small{ - dir = 1 - }, -/turf/simulated/floor/tiled/techfloor, -/area/thruster/d3starboard) -"hP" = ( -/obj/structure/window/reinforced/polarized/full, -/turf/simulated/floor/tiled/techfloor, -/area/crew_quarters/head/sauna) -"hQ" = ( -/obj/machinery/telecomms/receiver/preset_right, -/obj/machinery/light{ - dir = 8 - }, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/floor/bluegrid, -/area/tcommsat/chamber) -"hS" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 1 - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/tcommsat/chamber) -"hT" = ( -/obj/machinery/r_n_d/server/robotics, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/floor/bluegrid, -/area/tcommsat/chamber) -"hU" = ( -/obj/effect/floor_decal/industrial/outline/grey, -/obj/machinery/message_server, -/turf/simulated/floor/bluegrid, -/area/tcommsat/chamber) -"hV" = ( -/obj/machinery/r_n_d/server/core, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/floor/bluegrid, -/area/tcommsat/chamber) -"hW" = ( -/obj/structure/cable/green{ - d2 = 2; - icon_state = "0-2" - }, -/obj/effect/wallframe_spawn/reinforced, -/turf/simulated/floor/plating, -/area/tcommsat/computer) -"hX" = ( -/obj/machinery/computer/telecomms/monitor{ - dir = 4; - icon_state = "computer"; - network = "tcommsat" - }, -/turf/simulated/floor/lino, -/area/tcommsat/computer) -"hY" = ( -/obj/structure/table/steel, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 4 - }, -/obj/item/storage/toolbox/mechanical, -/obj/item/stack/cable_coil{ - pixel_x = 3; - pixel_y = -7 - }, -/obj/random/smokes, -/obj/item/reagent_containers/food/drinks/glass2/coffeecup/dais{ - pixel_x = -6; - pixel_y = 12 - }, -/turf/simulated/floor/lino, -/area/tcommsat/computer) -"hZ" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/lino, -/area/tcommsat/computer) -"ia" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 8 - }, -/obj/structure/reagent_dispensers/water_cooler{ - dir = 8 - }, -/obj/machinery/light{ - dir = 4 - }, -/turf/simulated/floor/lino, -/area/tcommsat/computer) -"ib" = ( -/obj/machinery/portable_atmospherics/powered/scrubber, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/thirddeck/forestarboard) -"ic" = ( -/obj/machinery/atmospherics/pipe/manifold/visible/red{ - dir = 4; - icon_state = "map" - }, -/obj/item/device/radio/intercom{ - dir = 8; - pixel_x = 21 - }, -/obj/structure/railing/mapped{ - dir = 8; - icon_state = "railing0-1" - }, -/turf/simulated/floor/plating, -/area/engineering/atmos/aux) -"id" = ( -/obj/structure/railing/mapped, -/turf/simulated/floor/plating, -/area/maintenance/thirddeck/forestarboard) -"ie" = ( -/obj/structure/disposalpipe/segment{ - dir = 1; - icon_state = "pipe-c" - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/effect/floor_decal/industrial/warning/corner, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/obj/structure/catwalk, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/turf/simulated/floor/plating, -/area/maintenance/thirddeck/forestarboard) -"if" = ( -/obj/structure/disposalpipe/up{ - dir = 8 - }, -/obj/effect/floor_decal/industrial/warning/full, -/obj/structure/railing/mapped{ - dir = 8; - icon_state = "railing0-1" - }, -/obj/structure/railing/mapped{ - dir = 4; - icon_state = "railing0-1" - }, -/turf/simulated/floor/plating, -/area/maintenance/thirddeck/forestarboard) -"ig" = ( -/obj/effect/floor_decal/corner/grey/diagonal{ - dir = 4 - }, -/obj/machinery/light_switch{ - pixel_x = -22; - pixel_y = 26 - }, -/turf/simulated/floor/tiled/white, -/area/crew_quarters/galley) -"ih" = ( -/obj/structure/closet/crate/freezer, -/turf/simulated/floor/tiled/freezer, -/area/crew_quarters/galleybackroom) -"ii" = ( -/obj/effect/floor_decal/corner/grey/diagonal{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/extinguisher_cabinet{ - pixel_y = -32 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/light, -/turf/simulated/floor/tiled/white, -/area/crew_quarters/galley) -"ij" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 1; - icon_state = "map-scrubbers" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/tiled/freezer, -/area/crew_quarters/galleybackroom) -"ik" = ( -/obj/effect/floor_decal/corner/grey/diagonal{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/crew_quarters/galley) -"il" = ( -/obj/effect/floor_decal/corner/grey/diagonal{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 1; - icon_state = "map-scrubbers" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 1 - }, -/turf/simulated/floor/tiled/white, -/area/crew_quarters/galley) -"im" = ( -/obj/effect/floor_decal/corner/grey/diagonal{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply, -/obj/structure/disposalpipe/segment{ - dir = 4; - icon_state = "pipe-c" - }, -/turf/simulated/floor/tiled/white, -/area/crew_quarters/galley) -"in" = ( -/obj/item/stool/padded, -/turf/simulated/floor/tiled/freezer, -/area/crew_quarters/head) -"ip" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/light, -/obj/effect/floor_decal/corner/green, -/turf/simulated/floor/tiled, -/area/hallway/primary/thirddeck/fore) -"iq" = ( -/obj/machinery/atmospherics/portables_connector{ - dir = 4 - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 4 - }, -/obj/effect/floor_decal/industrial/hatch/blue, -/turf/simulated/floor/tiled/techfloor, -/area/thruster/d3port) -"ir" = ( -/obj/effect/floor_decal/corner/grey/diagonal{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/crew_quarters/galley) -"is" = ( -/obj/effect/floor_decal/corner/grey/diagonal{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 8; - icon_state = "pipe-c" - }, -/obj/machinery/firealarm{ - dir = 4; - pixel_x = 24 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/turf/simulated/floor/tiled/white, -/area/crew_quarters/galley) -"it" = ( -/turf/simulated/floor/reinforced/hydrogen, -/area/thruster/d3port) -"iu" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/disposalpipe/segment, -/obj/effect/wallframe_spawn/no_grille, -/turf/simulated/floor/plating, -/area/crew_quarters/mess) -"iv" = ( -/obj/structure/disposalpipe/segment, -/obj/effect/floor_decal/corner/blue/diagonal{ - dir = 4 - }, -/obj/machinery/door/firedoor, -/obj/effect/floor_decal/industrial/hatch/yellow, -/turf/simulated/floor/tiled/white, -/area/crew_quarters/mess) -"iw" = ( -/obj/effect/floor_decal/industrial/hatch/yellow, -/obj/machinery/light, -/obj/structure/ship_munition/disperser_charge/mining, -/turf/simulated/floor/tiled/dark, -/area/command/disperser) -"ix" = ( -/obj/machinery/light, -/turf/simulated/floor/airless, -/area/command/disperser) -"iy" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/door/window/northleft, -/obj/machinery/door/window, -/obj/structure/curtain/open/shower, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/wood/walnut, -/area/crew_quarters/head/sauna) -"iz" = ( -/obj/effect/wallframe_spawn/reinforced/hull, -/obj/machinery/door/blast/regular/open{ - dir = 4; - icon_state = "pdoor0"; - id_tag = "bsa-window"; - name = "Observation Blast Door" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/blue{ - dir = 4; - icon_state = "intact" - }, -/turf/simulated/floor/plating, -/area/command/disperser) -"iA" = ( -/obj/machinery/atmospherics/pipe/manifold/visible/fuel{ - dir = 8 - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor, -/area/thruster/d3starboard) -"iB" = ( -/obj/structure/hygiene/shower{ - dir = 4; - icon_state = "shower"; - pixel_x = 0; - pixel_y = 0 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, -/turf/simulated/floor/tiled/freezer, -/area/crew_quarters/head) -"iC" = ( -/obj/structure/table/woodentable/mahogany, -/obj/structure/cable/green{ - d2 = 4; - icon_state = "0-4" - }, -/obj/machinery/power/apc{ - dir = 8; - name = "west bump"; - pixel_x = -24 - }, -/turf/simulated/floor/tiled/dark, -/area/chapel/memorial) -"iD" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/turf/simulated/floor/tiled/freezer, -/area/crew_quarters/head) -"iE" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 1 - }, -/turf/simulated/floor/tiled/dark, -/area/turret_protected/ai_upload) -"iF" = ( -/obj/structure/closet/crate/freezer, -/obj/item/reagent_containers/food/drinks/cans/speer, -/obj/item/reagent_containers/food/drinks/cans/speer, -/obj/item/reagent_containers/food/drinks/cans/speer, -/obj/item/reagent_containers/food/drinks/cans/ale, -/obj/item/reagent_containers/food/drinks/cans/ale, -/obj/item/reagent_containers/food/drinks/cans/ale, -/obj/item/reagent_containers/food/drinks/cans/artbru, -/obj/item/reagent_containers/food/drinks/cans/waterbottle, -/obj/item/reagent_containers/food/drinks/cans/waterbottle, -/obj/item/reagent_containers/food/drinks/cans/waterbottle, -/obj/item/reagent_containers/food/drinks/cans/waterbottle, -/obj/machinery/firealarm{ - pixel_y = 21 - }, -/turf/simulated/floor/wood/walnut, -/area/crew_quarters/head/sauna) -"iG" = ( -/obj/structure/railing/mapped{ - dir = 8; - icon_state = "railing0-1" - }, -/obj/machinery/atmospherics/pipe/simple/visible/fuel{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/plating, -/area/maintenance/thirddeck/aftstarboard) -"iH" = ( -/obj/structure/railing/mapped{ - dir = 4; - icon_state = "railing0-1" - }, -/obj/machinery/atmospherics/valve/shutoff/fuel{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/maintenance/thirddeck/aftstarboard) -"iI" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/effect/floor_decal/corner/green/half, -/turf/simulated/floor/tiled/monotile, -/area/hallway/primary/thirddeck/fore) -"iJ" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/cable/green{ - d2 = 2; - icon_state = "0-2" - }, -/obj/effect/wallframe_spawn/reinforced, -/turf/simulated/floor/plating, -/area/tcommsat/computer) -"iK" = ( -/obj/machinery/computer/telecomms/server{ - dir = 4; - icon_state = "computer"; - network = "tcommsat" - }, -/turf/simulated/floor/lino, -/area/tcommsat/computer) -"iL" = ( -/obj/structure/bed/chair/office/dark{ - dir = 8 - }, -/turf/simulated/floor/lino, -/area/tcommsat/computer) -"iM" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/hologram/holopad, -/turf/simulated/floor/lino, -/area/tcommsat/computer) -"iN" = ( -/obj/machinery/camera/network/command{ - c_tag = "Telecommunications - Control"; - dir = 8 - }, -/obj/machinery/computer/modular/preset/aislot/research{ - dir = 8; - icon_state = "console" - }, -/turf/simulated/floor/lino, -/area/tcommsat/computer) -"iO" = ( -/obj/machinery/atmospherics/valve, -/obj/machinery/light/small{ - dir = 8 - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/engineering/atmos/aux) -"iP" = ( -/obj/machinery/computer/atmos_alert, -/turf/simulated/floor/tiled/techfloor, -/area/engineering/atmos/aux) -"iQ" = ( -/obj/machinery/atmospherics/pipe/simple/visible/red{ - dir = 9; - icon_state = "intact" - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/engineering/atmos/aux) -"iR" = ( -/obj/machinery/atmospherics/valve, -/obj/machinery/light/small{ - dir = 4 - }, -/obj/structure/railing/mapped{ - dir = 8; - icon_state = "railing0-1" - }, -/obj/structure/railing/mapped, -/turf/simulated/floor/plating, -/area/engineering/atmos/aux) -"iS" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 4 - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/thirddeck/forestarboard) -"iT" = ( -/obj/structure/disposalpipe/down{ - dir = 8 - }, -/obj/structure/lattice, -/obj/structure/railing/mapped, -/obj/structure/railing/mapped{ - dir = 8; - icon_state = "railing0-1" - }, -/obj/structure/railing/mapped{ - dir = 4; - icon_state = "railing0-1" - }, -/turf/simulated/open, -/area/maintenance/thirddeck/forestarboard) -"iU" = ( -/obj/structure/closet/secure_closet/freezer/meat, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled/freezer, -/area/crew_quarters/galleybackroom) -"iV" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, -/obj/item/stool/wood, -/turf/simulated/floor/wood/walnut, -/area/crew_quarters/head/sauna) -"iW" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 1 - }, -/obj/machinery/chem_master/condimaster{ - name = "CondiMaster Neo"; - pixel_x = 0 - }, -/turf/simulated/floor/tiled/freezer, -/area/crew_quarters/galleybackroom) -"iX" = ( -/obj/effect/floor_decal/corner/grey/diagonal{ - dir = 4 - }, -/obj/structure/cable/green, -/obj/machinery/power/apc{ - dir = 2; - name = "south bump"; - pixel_y = -24 - }, -/obj/structure/hygiene/sink/kitchen{ - pixel_x = -32 - }, -/turf/simulated/floor/tiled/white, -/area/crew_quarters/galley) -"iY" = ( -/obj/machinery/disposal, -/obj/effect/floor_decal/industrial/hatch/yellow, -/obj/effect/floor_decal/corner/grey/diagonal{ - dir = 4 - }, -/obj/structure/disposalpipe/trunk{ - dir = 1 - }, -/obj/machinery/light{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/crew_quarters/galley) -"iZ" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/wood/walnut, -/area/crew_quarters/head/sauna) -"ja" = ( -/obj/structure/railing/mapped{ - dir = 1; - icon_state = "railing0-1" - }, -/obj/structure/railing/mapped{ - dir = 4; - icon_state = "railing0-1" - }, -/obj/random/trash, -/turf/simulated/floor/plating, -/area/maintenance/thirddeck/foreport) -"jb" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/crew_quarters/gym) -"jc" = ( -/obj/effect/floor_decal/corner/blue/diagonal{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/crew_quarters/mess) -"jd" = ( -/obj/effect/floor_decal/corner/blue/diagonal{ - dir = 4 - }, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/tiled/white, -/area/crew_quarters/mess) -"je" = ( -/obj/effect/floor_decal/corner/green{ - dir = 10 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/thirddeck/aft) -"jf" = ( -/obj/effect/floor_decal/corner/blue/diagonal{ - dir = 4 - }, -/obj/machinery/camera/network/third_deck{ - c_tag = "Mess Hall - Center" - }, -/obj/machinery/power/apc{ - dir = 1; - name = "north bump"; - pixel_x = 0; - pixel_y = 24 - }, -/obj/structure/cable/green{ - d2 = 2; - icon_state = "0-2" - }, -/obj/structure/table/standard{ - name = "plastic table frame" - }, -/obj/machinery/alarm{ - dir = 8; - icon_state = "alarm0"; - pixel_x = 24 - }, -/obj/item/paper_bin, -/turf/simulated/floor/tiled/white, -/area/crew_quarters/mess) -"jg" = ( -/obj/machinery/atmospherics/pipe/simple/visible/cyan{ - dir = 4 - }, -/turf/simulated/wall/r_wall/hull, -/area/thruster/d3starboard) -"jh" = ( -/obj/machinery/door/airlock/vault/bolted{ - id_tag = "civsafedoor"; - name = "Third Deck Safe Room" - }, -/obj/machinery/door/firedoor, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/steel_ridged, -/area/crew_quarters/safe_room/thirddeck) -"ji" = ( -/obj/effect/floor_decal/corner/green/half, -/turf/simulated/floor/tiled/monotile, -/area/hallway/primary/thirddeck/aft) -"jj" = ( -/obj/effect/floor_decal/corner/blue/diagonal{ - dir = 4 - }, -/obj/machinery/vending/coffee{ - dir = 1; - icon_state = "coffee" - }, -/turf/simulated/floor/tiled/white, -/area/crew_quarters/mess) -"jk" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/catwalk, -/turf/simulated/open, -/area/maintenance/thirddeck/port) -"jl" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/turf/simulated/floor/wood/walnut, -/area/crew_quarters/head/sauna) -"jm" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/camera/network/third_deck{ - c_tag = "Third Deck - Ladders"; - dir = 1 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/thirddeck/aft) -"jn" = ( -/obj/effect/floor_decal/corner/blue/diagonal{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/bed/chair{ - dir = 8; - icon_state = "chair_preview" - }, -/turf/simulated/floor/tiled/white, -/area/crew_quarters/mess) -"jo" = ( -/turf/simulated/floor/bluegrid, -/area/tcommsat/chamber) -"jp" = ( -/obj/machinery/button/windowtint{ - pixel_x = 28 - }, -/obj/machinery/alarm/warm{ - alarm_frequency = 1439; - pixel_y = 24 - }, -/obj/item/stool/wood, -/obj/item/bikehorn/rubberducky, -/turf/simulated/floor/wood/walnut, -/area/crew_quarters/head/sauna) -"jq" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 8 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/engineering/hardstorage) -"jr" = ( -/obj/machinery/floodlight, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/floor/plating, -/area/maintenance/thirddeck/foreport) -"js" = ( -/obj/structure/hygiene/shower{ - dir = 4; - icon_state = "shower"; - pixel_x = 0; - pixel_y = 0 - }, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 1 - }, -/turf/simulated/floor/tiled/freezer, -/area/crew_quarters/head) -"jt" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/door/airlock/maintenance, -/obj/machinery/door/firedoor, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/maintenance/thirddeck/port) -"ju" = ( -/obj/machinery/light/small, -/obj/item/stool/wood, -/turf/simulated/floor/tiled/freezer, -/area/crew_quarters/head) -"jv" = ( -/obj/random/trash, -/obj/structure/railing/mapped{ - dir = 8; - icon_state = "railing0-1" - }, -/obj/structure/railing/mapped, -/obj/machinery/atmospherics/valve/shutoff/supply, -/obj/machinery/atmospherics/valve/shutoff/scrubbers, -/turf/simulated/floor/plating, -/area/maintenance/thirddeck/aftstarboard) -"jw" = ( -/obj/structure/railing/mapped{ - dir = 4; - icon_state = "railing0-1" - }, -/obj/structure/railing/mapped, -/turf/simulated/floor/plating, -/area/maintenance/thirddeck/aftstarboard) -"jx" = ( -/obj/item/device/radio/intercom{ - dir = 4; - pixel_x = -21 - }, -/turf/simulated/floor/tiled/dark, -/area/tcommsat/chamber) -"jy" = ( -/obj/machinery/telecomms/bus/preset_four, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/floor/bluegrid, -/area/tcommsat/chamber) -"jz" = ( -/obj/machinery/telecomms/processor/preset_four, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/floor/bluegrid, -/area/tcommsat/chamber) -"jA" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/turf/simulated/floor/tiled/dark, -/area/tcommsat/chamber) -"jB" = ( -/obj/structure/cable/green{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/structure/cable/green{ - d2 = 4; - icon_state = "0-4" - }, -/obj/effect/wallframe_spawn/reinforced, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/plating, -/area/tcommsat/computer) -"jC" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/computer/message_monitor{ - dir = 4; - icon_state = "computer" - }, -/turf/simulated/floor/lino, -/area/tcommsat/computer) -"jD" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/lino, -/area/tcommsat/computer) -"jE" = ( -/obj/structure/cable/green{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/lino, -/area/tcommsat/computer) -"jF" = ( -/obj/structure/table/steel, -/obj/structure/cable/green{ - d2 = 8; - icon_state = "0-8" - }, -/obj/item/storage/box/cups, -/obj/machinery/power/apc/hyper{ - dir = 4; - name = "east bump"; - pixel_x = 24 - }, -/turf/simulated/floor/lino, -/area/tcommsat/computer) -"jG" = ( -/obj/structure/ore_box, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/thirddeck/forestarboard) -"jH" = ( -/obj/machinery/atmospherics/pipe/simple/visible/cyan{ - dir = 5; - icon_state = "intact" - }, -/obj/machinery/firealarm{ - dir = 8; - pixel_x = -24; - pixel_y = 0 - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/engineering/atmos/aux) -"jI" = ( -/obj/machinery/atmospherics/pipe/simple/visible/universal{ - dir = 4 - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/engineering/atmos/aux) -"jJ" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, -/obj/effect/landmark{ - name = "xeno_spawn"; - pixel_x = -1 - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/engineering/atmos/aux) -"jK" = ( -/obj/machinery/atmospherics/pipe/simple/visible/red{ - dir = 9; - icon_state = "intact" - }, -/obj/machinery/alarm{ - dir = 8; - icon_state = "alarm0"; - pixel_x = 24 - }, -/obj/structure/closet/secure_closet/atmos_torch, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/floor/tiled/techfloor, -/area/engineering/atmos/aux) -"jL" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 4; - icon_state = "warningcorner" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/catwalk, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/plating, -/area/maintenance/thirddeck/forestarboard) -"jM" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 1 - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/thirddeck/forestarboard) -"jN" = ( -/obj/machinery/light{ - dir = 1 - }, -/obj/effect/floor_decal/industrial/outline/grey, -/obj/structure/closet/emcloset, -/turf/simulated/floor/tiled/techfloor/grid, -/area/crew_quarters/safe_room/thirddeck) -"jO" = ( -/obj/machinery/light/small{ - dir = 8 - }, -/obj/item/stool/wood, -/turf/simulated/floor/wood/walnut, -/area/crew_quarters/head/sauna) -"jP" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/button/alternate/door/bolts{ - id_tag = "civsafedoor"; - name = "safe room door-control"; - pixel_x = 32 - }, -/obj/machinery/light_switch{ - pixel_x = 24; - pixel_y = 24 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/crew_quarters/safe_room/thirddeck) -"jQ" = ( -/obj/effect/catwalk_plated/dark, -/turf/simulated/open, -/area/security/habcheck) -"jR" = ( -/obj/structure/cable/green{ - d2 = 4; - icon_state = "0-4" - }, -/obj/machinery/power/apc{ - dir = 8; - name = "west bump"; - pixel_x = -24 - }, -/obj/structure/bed/chair{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/crew_quarters/safe_room/thirddeck) -"jS" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/techfloor/grid, -/area/crew_quarters/safe_room/thirddeck) -"jT" = ( -/obj/machinery/vending/wallmed1{ - dir = 8; - icon_state = "wallmed"; - name = "Emergency NanoMed"; - pixel_x = 28; - pixel_y = 0 - }, -/obj/machinery/portable_atmospherics/hydroponics, -/obj/effect/floor_decal/corner/green/mono, -/obj/effect/floor_decal/industrial/hatch/yellow, -/turf/simulated/floor/tiled/monotile, -/area/hydroponics) -"jU" = ( -/obj/machinery/power/apc{ - dir = 8; - name = "west bump"; - pixel_x = -24 - }, -/obj/structure/cable/green{ - d2 = 4; - icon_state = "0-4" - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/thirddeck/foreport) -"jV" = ( -/obj/effect/floor_decal/corner/blue/diagonal{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 - }, -/turf/simulated/floor/tiled/white, -/area/crew_quarters/mess) -"jW" = ( -/obj/effect/floor_decal/corner/blue/diagonal{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/crew_quarters/mess) -"jX" = ( -/obj/effect/floor_decal/corner/blue/diagonal{ - dir = 4 - }, -/obj/effect/landmark{ - name = "lightsout" - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atm{ - pixel_y = 32 - }, -/turf/simulated/floor/tiled/white, -/area/crew_quarters/mess) -"jY" = ( -/obj/effect/floor_decal/corner/blue/diagonal{ - dir = 4 - }, -/obj/structure/disposalpipe/segment, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/white, -/area/crew_quarters/mess) -"jZ" = ( -/turf/simulated/wall/r_wall/hull, -/area/maintenance/thirddeck/aftport) -"ka" = ( -/obj/effect/floor_decal/corner/blue/diagonal{ - dir = 4 - }, -/obj/structure/table/standard, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/crew_quarters/mess) -"kb" = ( -/obj/structure/disposalpipe/segment{ - dir = 1; - icon_state = "pipe-c" - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/effect/floor_decal/corner/blue/diagonal{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/crew_quarters/mess) -"kc" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/biogenerator, -/turf/simulated/floor/tiled, -/area/hydroponics/storage) -"kd" = ( -/obj/structure/table/standard, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 8 - }, -/obj/item/device/radio/intercom{ - dir = 4; - pixel_x = -21 - }, -/turf/simulated/floor/tiled/dark, -/area/holocontrol) -"ke" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on/sauna{ - dir = 1; - icon_state = "map_scrubber_on" - }, -/turf/simulated/floor/wood/walnut, -/area/crew_quarters/head/sauna) -"kf" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/wood/walnut, -/area/crew_quarters/head/sauna) -"kg" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 1 - }, -/turf/simulated/floor/wood/walnut, -/area/crew_quarters/head/sauna) -"kh" = ( -/obj/machinery/light/small{ - dir = 4; - icon_state = "bulb1" - }, -/obj/item/stool/wood, -/turf/simulated/floor/wood/walnut, -/area/crew_quarters/head/sauna) -"ki" = ( -/obj/machinery/light/small{ - dir = 4; - pixel_y = 8 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/engineering/hardstorage) -"kj" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/wall/r_wall/prepainted, -/area/engineering/hardstorage) -"kk" = ( -/obj/machinery/atmospherics/pipe/simple/visible/blue{ - dir = 5 - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 1 - }, -/obj/machinery/light/small{ - dir = 8 - }, -/turf/simulated/floor/tiled/techfloor, -/area/thruster/d3port) -"kl" = ( -/obj/machinery/meter, -/obj/machinery/atmospherics/pipe/simple/visible/blue{ - dir = 6 - }, -/obj/effect/wallframe_spawn/reinforced_phoron, -/turf/simulated/floor/reinforced, -/area/thruster/d3starboard) -"km" = ( -/obj/item/stool/wood, -/turf/simulated/floor/wood/walnut, -/area/crew_quarters/head/sauna) -"ko" = ( -/obj/machinery/space_heater, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/thirddeck/port) -"kp" = ( -/obj/structure/lattice, -/turf/simulated/wall/r_wall/hull, -/area/thruster/d3starboard) -"kq" = ( -/obj/structure/table/rack, -/obj/random/maintenance/solgov, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/thirddeck/port) -"kr" = ( -/obj/machinery/door/airlock/external{ - frequency = 1379; - id_tag = "bsa_ex"; - locked = 1; - name = "Obstruction Field Disperser Maintenance External Airlock" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/command/disperser) -"ks" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/techfloor/grid, -/area/crew_quarters/safe_room/thirddeck) -"kt" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 4; - external_pressure_bound = 202; - external_pressure_bound_default = 202 - }, -/obj/machinery/space_heater{ - set_temperature = 348.15 - }, -/turf/simulated/floor/wood/walnut, -/area/crew_quarters/head/sauna) -"ku" = ( -/obj/structure/table/steel, -/obj/item/cell/high, -/obj/item/cell/high, -/obj/item/cell/high, -/turf/simulated/floor/tiled/dark, -/area/tcommsat/chamber) -"kv" = ( -/obj/machinery/telecomms/processor/preset_three, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/floor/bluegrid, -/area/tcommsat/chamber) -"kw" = ( -/obj/machinery/telecomms/bus/preset_three, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/floor/bluegrid, -/area/tcommsat/chamber) -"kx" = ( -/obj/machinery/light, -/turf/simulated/floor/tiled/dark, -/area/tcommsat/chamber) -"ky" = ( -/obj/structure/cable/green, -/obj/effect/wallframe_spawn/reinforced, -/turf/simulated/floor/plating, -/area/tcommsat/computer) -"kz" = ( -/obj/machinery/computer/rdservercontrol{ - dir = 4; - icon_state = "computer" - }, -/turf/simulated/floor/lino, -/area/tcommsat/computer) -"kA" = ( -/obj/structure/table/steel, -/obj/item/device/flashlight/lamp, -/obj/random_multi/single_item/boombox, -/turf/simulated/floor/lino, -/area/tcommsat/computer) -"kB" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/lino, -/area/tcommsat/computer) -"kC" = ( -/obj/structure/table/steel, -/obj/structure/noticeboard{ - pixel_x = 32 - }, -/obj/item/paper_bin, -/obj/item/pen, -/obj/item/sticky_pad/random, -/turf/simulated/floor/lino, -/area/tcommsat/computer) -"kD" = ( -/obj/machinery/power/apc{ - dir = 8; - name = "west bump"; - pixel_x = -24 - }, -/obj/structure/cable/green{ - d2 = 4; - icon_state = "0-4" - }, -/obj/structure/railing/mapped{ - dir = 1; - icon_state = "railing0-1" - }, -/turf/simulated/floor/plating, -/area/engineering/atmos/aux) -"kE" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/railing/mapped{ - dir = 4; - icon_state = "railing0-1" - }, -/obj/structure/railing/mapped{ - dir = 1; - icon_state = "railing0-1" - }, -/turf/simulated/floor/plating, -/area/engineering/atmos/aux) -"kF" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 8 - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/engineering/atmos/aux) -"kG" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 8 - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/engineering/atmos/aux) -"kH" = ( -/obj/structure/closet/emcloset, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/floor/tiled/techfloor, -/area/engineering/atmos/aux) -"kI" = ( -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/disposalpipe/segment, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/maintenance/thirddeck/forestarboard) -"kJ" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/thirddeck/forestarboard) -"kL" = ( -/turf/simulated/wall/prepainted, -/area/crew_quarters/bar) -"kM" = ( -/obj/machinery/power/apc{ - dir = 2; - name = "south bump"; - pixel_y = -24 - }, -/obj/structure/cable/green, -/obj/machinery/atmospherics/binary/pump{ - dir = 8; - in_use = 0 - }, -/obj/item/reagent_containers/glass/bucket/wood, -/obj/structure/hygiene/sink{ - pixel_z = -14 - }, -/turf/simulated/floor/wood/walnut, -/area/crew_quarters/head/sauna) -"kN" = ( -/obj/machinery/light/spot{ - dir = 1 - }, -/obj/effect/floor_decal/spline/fancy/wood, -/turf/simulated/floor/lino, -/area/crew_quarters/bar) -"kO" = ( -/obj/effect/floor_decal/spline/fancy/wood/corner{ - dir = 8 - }, -/turf/simulated/floor/lino, -/area/crew_quarters/bar) -"kP" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 4 - }, -/obj/effect/floor_decal/techfloor{ - dir = 1; - icon_state = "techfloor_edges" - }, -/turf/simulated/floor/tiled/techfloor, -/area/crew_quarters/safe_room/thirddeck) -"kQ" = ( -/obj/effect/floor_decal/corner/blue/diagonal{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/white, -/area/crew_quarters/mess) -"kR" = ( -/obj/structure/cable/green{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 1 - }, -/obj/structure/disposalpipe/sortjunction{ - dir = 4; - name = "Chapel"; - sort_type = "Chapel" - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/monotile, -/area/hallway/primary/thirddeck/aft) -"kS" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 1; - level = 2 - }, -/obj/machinery/alarm{ - dir = 8; - pixel_x = 25; - pixel_y = 0 - }, -/turf/simulated/floor/plating, -/area/command/disperser) -"kT" = ( -/obj/structure/sign/directions/bridge{ - dir = 1; - pixel_y = 3; - pixel_z = 0 - }, -/obj/structure/sign/directions/security{ - dir = 8; - icon_state = "direction_sec"; - pixel_y = -4; - pixel_z = 0 - }, -/turf/simulated/wall/prepainted, -/area/crew_quarters/bar) -"kU" = ( -/obj/machinery/atmospherics/portables_connector{ - dir = 8 - }, -/obj/machinery/portable_atmospherics/reagent_sublimator/sauna{ - anchored = 1 - }, -/turf/simulated/floor/wood/walnut, -/area/crew_quarters/head/sauna) -"kW" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 8 - }, -/obj/machinery/firealarm{ - dir = 8; - pixel_x = -24 - }, -/obj/machinery/light/spot, -/obj/structure/table/standard, -/turf/simulated/floor/tiled/dark, -/area/holocontrol) -"kX" = ( -/obj/structure/railing/mapped{ - dir = 8; - icon_state = "railing0-1" - }, -/obj/structure/railing/mapped, -/obj/random/maintenance/solgov, -/turf/simulated/floor/plating, -/area/maintenance/thirddeck/foreport) -"kY" = ( -/obj/structure/catwalk, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/turf/simulated/floor/plating, -/area/maintenance/thirddeck/starboard) -"kZ" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/wall/r_wall/prepainted, -/area/engineering/hardstorage) -"la" = ( -/obj/machinery/atmospherics/pipe/simple/visible/fuel{ - dir = 4 - }, -/obj/effect/floor_decal/industrial/warning, -/obj/machinery/atmospherics/binary/pump/on{ - dir = 1; - target_pressure = 15000 - }, -/obj/effect/floor_decal/industrial/outline/orange, -/turf/simulated/floor/tiled/techfloor, -/area/thruster/d3port) -"lb" = ( -/obj/structure/railing/mapped, -/obj/random/trash, -/turf/simulated/floor/plating, -/area/maintenance/thirddeck/foreport) -"lc" = ( -/obj/effect/floor_decal/corner/green{ - dir = 5 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/thirddeck/aft) -"ld" = ( -/turf/simulated/open, -/area/crew_quarters/mess) -"le" = ( -/obj/effect/floor_decal/corner/green/half{ - dir = 1; - icon_state = "bordercolorhalf" - }, -/obj/structure/noticeboard{ - pixel_y = 32 - }, -/turf/simulated/floor/tiled/monotile, -/area/hallway/primary/thirddeck/center) -"lf" = ( -/obj/structure/railing/mapped, -/obj/random/junk, -/obj/random/trash, -/obj/random/tech_supply, -/turf/simulated/floor/plating, -/area/maintenance/thirddeck/foreport) -"lg" = ( -/obj/structure/closet/crate/internals/fuel, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/firealarm{ - dir = 2; - pixel_y = 24 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/engineering/hardstorage) -"lh" = ( -/obj/structure/railing/mapped{ - dir = 4; - icon_state = "railing0-1" - }, -/obj/structure/railing/mapped, -/turf/simulated/floor/plating, -/area/maintenance/thirddeck/foreport) -"li" = ( -/obj/machinery/alarm{ - dir = 1; - icon_state = "alarm0"; - pixel_y = -22 - }, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/thirddeck/foreport) -"lj" = ( -/obj/machinery/door/airlock/civilian{ - name = "Emergency Storage" - }, -/obj/machinery/door/firedoor, -/turf/simulated/floor/tiled/steel_ridged, -/area/maintenance/thirddeck/aftstarboard) -"lk" = ( -/obj/machinery/atmospherics/pipe/manifold4w/visible/fuel, -/obj/effect/floor_decal/industrial/warning{ - dir = 4 - }, -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 1 - }, -/turf/simulated/floor/tiled/techfloor, -/area/thruster/d3starboard) -"lm" = ( -/obj/machinery/disposal, -/obj/effect/floor_decal/industrial/hatch/yellow, -/obj/structure/disposalpipe/trunk{ - dir = 4 - }, -/obj/machinery/newscaster{ - pixel_y = -32 - }, -/obj/item/device/radio/intercom{ - dir = 4; - pixel_x = -21 - }, -/turf/simulated/floor/tiled/dark, -/area/tcommsat/computer) -"lo" = ( -/obj/structure/filingcabinet, -/obj/machinery/light{ - dir = 4 - }, -/obj/machinery/firealarm{ - dir = 4; - pixel_x = 24 - }, -/turf/simulated/floor/lino, -/area/tcommsat/computer) -"lp" = ( -/obj/structure/table/rack, -/obj/random/maintenance/solgov, -/obj/random/tool, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/thirddeck/forestarboard) -"lq" = ( -/obj/structure/sign/warning/secure_area, -/turf/simulated/wall/prepainted, -/area/engineering/atmos/aux) -"lr" = ( -/obj/machinery/door/airlock/atmos{ - name = "Auxiliary Atmospherics"; - secured_wires = 1 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/door/firedoor, -/turf/simulated/floor/tiled/techfloor/grid, -/area/engineering/atmos/aux) -"ls" = ( -/obj/structure/iv_drip, -/turf/simulated/floor/plating, -/area/maintenance/thirddeck/forestarboard) -"lt" = ( -/obj/effect/floor_decal/industrial/hatch/yellow, -/obj/structure/ladder/updown, -/obj/structure/catwalk, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/thirddeck/forestarboard) -"lu" = ( -/turf/unsimulated/mask, -/area/hallway/primary/thirddeck/center) -"lv" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/obj/item/device/radio/intercom{ - dir = 8; - pixel_x = 21 - }, -/obj/effect/floor_decal/techfloor{ - dir = 5; - icon_state = "techfloor_edges" - }, -/turf/simulated/floor/tiled/techfloor, -/area/crew_quarters/safe_room/thirddeck) -"lw" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/effect/floor_decal/spline/fancy/wood{ - dir = 8 - }, -/obj/effect/floor_decal/spline/fancy/wood{ - dir = 4 - }, -/turf/simulated/floor/lino, -/area/crew_quarters/bar) -"lx" = ( -/obj/structure/hygiene/sink/kitchen{ - pixel_y = 28 - }, -/obj/effect/floor_decal/spline/fancy/wood, -/turf/simulated/floor/lino, -/area/crew_quarters/bar) -"ly" = ( -/obj/effect/floor_decal/corner/blue/diagonal{ - dir = 4 - }, -/obj/machinery/disposal, -/obj/structure/disposalpipe/trunk{ - dir = 4 - }, -/obj/effect/floor_decal/industrial/hatch/yellow, -/turf/simulated/floor/tiled/white, -/area/crew_quarters/mess) -"lz" = ( -/obj/effect/floor_decal/corner/blue/diagonal{ - dir = 4 - }, -/obj/structure/table/standard, -/turf/simulated/floor/tiled/white, -/area/crew_quarters/mess) -"lA" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/table/standard, -/turf/simulated/floor/tiled, -/area/hydroponics) -"lB" = ( -/obj/effect/floor_decal/corner/blue/diagonal{ - dir = 4 - }, -/obj/structure/bed/chair, -/turf/simulated/floor/tiled/white, -/area/crew_quarters/mess) -"lC" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 8 - }, -/turf/simulated/floor/tiled/dark, -/area/engineering/hardstorage) -"lD" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/hologram/holopad, -/turf/simulated/floor/tiled/techfloor, -/area/crew_quarters/safe_room/thirddeck) -"lE" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9; - pixel_y = 0 - }, -/obj/effect/floor_decal/techfloor{ - dir = 4; - icon_state = "techfloor_edges" - }, -/turf/simulated/floor/tiled/techfloor, -/area/crew_quarters/safe_room/thirddeck) -"lF" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/universal, -/obj/effect/floor_decal/corner_techfloor_grid{ - dir = 8; - icon_state = "corner_techfloor_grid" - }, -/obj/effect/floor_decal/techfloor/corner{ - dir = 8; - icon_state = "techfloor_corners" - }, -/obj/machinery/tele_beacon, -/turf/simulated/floor/tiled/techfloor, -/area/crew_quarters/safe_room/thirddeck) -"lH" = ( -/obj/machinery/atmospherics/pipe/simple/visible/cyan{ - dir = 9; - icon_state = "intact" - }, -/obj/machinery/meter, -/obj/effect/wallframe_spawn/reinforced_phoron, -/turf/simulated/floor/tiled/techfloor, -/area/thruster/d3starboard) -"lI" = ( -/obj/structure/lattice, -/turf/simulated/floor/reinforced/hydrogen, -/area/thruster/d3starboard) -"lJ" = ( -/obj/effect/floor_decal/corner/green{ - dir = 5 - }, -/obj/machinery/atmospherics/unary/vent_pump/on, -/turf/simulated/floor/tiled, -/area/hallway/primary/thirddeck/aft) -"lK" = ( -/obj/structure/bed/chair{ - dir = 4 - }, -/obj/machinery/light{ - dir = 8 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/crew_quarters/safe_room/thirddeck) -"lL" = ( -/obj/machinery/door/airlock/vault/bolted{ - id_tag = "civsafedoorport"; - name = "Third Deck Safe Room" - }, -/obj/machinery/door/firedoor, -/turf/simulated/floor/tiled/techfloor/grid, -/area/crew_quarters/safe_room/thirddeck) -"lM" = ( -/obj/machinery/atmospherics/pipe/zpipe/up/fuel{ - dir = 1 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/floor_decal/industrial/warning/cee{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/maintenance/thirddeck/aftport) -"lN" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 1 - }, -/obj/structure/closet/crate, -/obj/random/powercell, -/obj/random/powercell, -/obj/machinery/firealarm{ - dir = 1; - pixel_y = -24 - }, -/obj/effect/floor_decal/techfloor{ - dir = 10; - icon_state = "techfloor_edges" - }, -/turf/simulated/floor/tiled/techfloor, -/area/crew_quarters/safe_room/thirddeck) -"lP" = ( -/obj/item/device/radio/intercom{ - pixel_y = 23 - }, -/turf/simulated/floor/wood/walnut, -/area/crew_quarters/recreation) -"lQ" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark, -/area/chapel/main) -"lR" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/thirddeck/foreport) -"lT" = ( -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/structure/closet/emcloset, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/thirddeck/aftstarboard) -"lU" = ( -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/portable_atmospherics/powered/scrubber, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/thirddeck/aftstarboard) -"lV" = ( -/obj/effect/floor_decal/corner/green/half{ - dir = 1; - icon_state = "bordercolorhalf" - }, -/obj/structure/flora/pottedplant/orientaltree, -/turf/simulated/floor/tiled/dark/monotile, -/area/crew_quarters/observation) -"lW" = ( -/obj/machinery/vending/hydronutrients/generic, -/obj/effect/floor_decal/corner/green/half{ - dir = 1; - icon_state = "bordercolorhalf" - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/crew_quarters/observation) -"lX" = ( -/obj/machinery/seed_storage/garden, -/obj/effect/floor_decal/corner/green/half{ - dir = 1; - icon_state = "bordercolorhalf" - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/crew_quarters/observation) -"lY" = ( -/obj/structure/table/standard, -/obj/item/material/minihoe, -/obj/item/material/hatchet, -/obj/effect/floor_decal/corner/green/half{ - dir = 1; - icon_state = "bordercolorhalf" - }, -/obj/machinery/light/spot{ - dir = 1 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/crew_quarters/observation) -"lZ" = ( -/obj/structure/reagent_dispensers/watertank, -/obj/item/reagent_containers/glass/bucket, -/obj/effect/floor_decal/corner/green/half{ - dir = 1; - icon_state = "bordercolorhalf" - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/crew_quarters/observation) -"ma" = ( -/obj/structure/closet/crate/hydroponics/beekeeping, -/obj/effect/floor_decal/corner/green/half{ - dir = 1; - icon_state = "bordercolorhalf" - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/crew_quarters/observation) -"mc" = ( -/obj/effect/floor_decal/corner/green/half{ - dir = 1; - icon_state = "bordercolorhalf" - }, -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/obj/machinery/alarm{ - dir = 8; - icon_state = "alarm0"; - pixel_x = 24 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/crew_quarters/observation) -"md" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/highsecurity{ - name = "Telecommunications" - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/tiled/steel_ridged, -/area/tcommsat/computer) -"me" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/structure/disposalpipe/segment{ - dir = 4; - icon_state = "pipe-c" - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/thirddeck/forestarboard) -"mf" = ( -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 4; - icon_state = "warningcorner" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/thirddeck/forestarboard) -"mg" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 1; - icon_state = "warning" - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/thirddeck/forestarboard) -"mh" = ( -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/thirddeck/forestarboard) -"mi" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9; - pixel_y = 0 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/obj/structure/disposalpipe/segment{ - dir = 8; - icon_state = "pipe-c" - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/thirddeck/forestarboard) -"mj" = ( -/turf/simulated/wall/prepainted, -/area/hallway/primary/thirddeck/fore) -"mk" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/door/airlock/hatch/maintenance, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/door/firedoor, -/turf/simulated/floor/tiled/steel_ridged, -/area/hallway/primary/thirddeck/fore) -"ml" = ( -/obj/structure/table/standard, -/obj/machinery/button/blast_door{ - id_tag = "bar"; - name = "Bar Shutters"; - pixel_x = -24; - pixel_y = 0 - }, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 4 - }, -/obj/machinery/camera/network/third_deck{ - c_tag = "Mess Hall - Bar"; - dir = 4 - }, -/obj/item/toy/figure/poraz, -/turf/simulated/floor/tiled/dark, -/area/crew_quarters/bar) -"mm" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 4 - }, -/obj/effect/floor_decal/spline/fancy/wood{ - dir = 8 - }, -/obj/effect/floor_decal/spline/fancy/wood{ - dir = 4 - }, -/turf/simulated/floor/lino, -/area/crew_quarters/bar) -"mn" = ( -/obj/structure/table/standard, -/obj/machinery/chemical_dispenser/bar_alc/full, -/turf/simulated/floor/tiled/dark, -/area/crew_quarters/bar) -"mo" = ( -/obj/structure/table/standard, -/obj/machinery/chemical_dispenser/bar_soft/full, -/turf/simulated/floor/tiled/dark, -/area/crew_quarters/bar) -"mp" = ( -/obj/effect/floor_decal/corner/blue/diagonal{ - dir = 4 - }, -/obj/structure/table/standard, -/obj/random/single/cola, -/turf/simulated/floor/tiled/white, -/area/crew_quarters/mess) -"mq" = ( -/obj/effect/floor_decal/corner/blue/diagonal{ - dir = 4 - }, -/obj/structure/table/standard{ - name = "plastic table frame" - }, -/turf/simulated/floor/tiled/white, -/area/crew_quarters/mess) -"mv" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/turf/simulated/floor/reinforced/airless, -/area/space) -"mx" = ( -/obj/machinery/light{ - dir = 8 - }, -/turf/simulated/floor/tiled/monotile, -/area/holocontrol) -"my" = ( -/obj/structure/table/standard, -/obj/item/paper{ - desc = ""; - info = "Bruises sustained in the holodeck can be healed simply by sleeping."; - name = "Holodeck Disclaimer" - }, -/obj/machinery/alarm{ - pixel_y = 24 - }, -/obj/machinery/camera/network/third_deck{ - c_tag = "Holodeck Control"; - dir = 8 - }, -/turf/simulated/floor/tiled/monotile, -/area/holocontrol) -"mB" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/item/flame/candle/scented/incense{ - pixel_x = -12; - pixel_y = 12 - }, -/obj/effect/floor_decal/corner/purple{ - dir = 6 - }, -/turf/simulated/floor/tiled/dark, -/area/chapel/memorial) -"mE" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 8 - }, -/obj/machinery/light, -/turf/simulated/floor/tiled, -/area/hallway/primary/thirddeck/aft) -"mF" = ( -/obj/effect/floor_decal/corner/grey/diagonal{ - dir = 4 - }, -/obj/machinery/cooker/fryer, -/turf/simulated/floor/tiled/white, -/area/crew_quarters/galley) -"mG" = ( -/obj/structure/railing/mapped, -/turf/simulated/open, -/area/maintenance/thirddeck/aftstarboard) -"mK" = ( -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/thirddeck/aftstarboard) -"mL" = ( -/obj/structure/flora/ausbushes/ppflowers, -/turf/simulated/floor/grass, -/area/crew_quarters/observation) -"mM" = ( -/obj/structure/flora/ausbushes/lavendergrass, -/turf/simulated/floor/grass, -/area/crew_quarters/observation) -"mN" = ( -/obj/structure/flora/ausbushes/brflowers, -/turf/simulated/floor/grass, -/area/crew_quarters/observation) -"mO" = ( -/obj/structure/flora/ausbushes/sparsegrass, -/turf/simulated/floor/grass, -/area/crew_quarters/observation) -"mR" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/firealarm{ - dir = 4; - pixel_x = 26 - }, -/turf/simulated/floor/grass, -/area/crew_quarters/observation) -"mS" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 4 - }, -/obj/structure/closet/emcloset, -/obj/effect/floor_decal/corner/paleblue/mono, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled/monotile, -/area/hallway/primary/thirddeck/fore) -"mT" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/disposalpipe/segment{ - dir = 1; - icon_state = "pipe-c" - }, -/obj/effect/floor_decal/corner/paleblue{ - dir = 5 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/thirddeck/fore) -"mU" = ( -/obj/structure/disposalpipe/segment{ - dir = 2; - icon_state = "pipe-c" - }, -/obj/structure/sign/warning/secure_area{ - pixel_y = 32 - }, -/obj/effect/floor_decal/corner/paleblue{ - dir = 5 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/thirddeck/fore) -"mV" = ( -/obj/machinery/light{ - dir = 4 - }, -/obj/effect/floor_decal/corner/paleblue/mono, -/obj/structure/closet/hydrant{ - pixel_y = 32 - }, -/obj/machinery/firealarm{ - dir = 4; - pixel_x = 24 - }, -/turf/simulated/floor/tiled/monotile, -/area/hallway/primary/thirddeck/fore) -"mW" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/disposalpipe/segment, -/obj/machinery/alarm{ - dir = 8; - icon_state = "alarm0"; - pixel_x = 24 - }, -/obj/structure/catwalk, -/obj/structure/cable/green{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/turf/simulated/floor/plating, -/area/maintenance/thirddeck/forestarboard) -"mY" = ( -/obj/structure/sign/directions/bridge{ - dir = 1; - pixel_x = -5; - pixel_y = 3; - pixel_z = 0 - }, -/obj/structure/sign/directions/security{ - dir = 1; - pixel_x = -4; - pixel_y = -5; - pixel_z = 0 - }, -/turf/simulated/wall/prepainted, -/area/hallway/primary/thirddeck/fore) -"mZ" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/effect/catwalk_plated, -/turf/simulated/floor/plating, -/area/hallway/primary/thirddeck/fore) -"na" = ( -/obj/machinery/atmospherics/unary/vent_pump/on, -/obj/structure/closet/emcloset, -/obj/effect/floor_decal/corner/green/mono, -/turf/simulated/floor/tiled/monotile, -/area/hallway/primary/thirddeck/fore) -"nb" = ( -/obj/item/storage/mirror{ - icon_state = "mirror_broke"; - pixel_y = 32 - }, -/turf/simulated/floor/plating, -/area/vacant/brig) -"nc" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/effect/floor_decal/spline/fancy/wood{ - dir = 4 - }, -/obj/effect/floor_decal/spline/fancy/wood{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/lino, -/area/crew_quarters/bar) -"nd" = ( -/obj/structure/table/standard, -/obj/machinery/chemical_dispenser/bar_coffee/full{ - pixel_y = 3 - }, -/turf/simulated/floor/tiled/dark, -/area/crew_quarters/bar) -"nf" = ( -/obj/effect/floor_decal/spline/fancy/wood{ - dir = 8 - }, -/turf/simulated/floor/lino, -/area/crew_quarters/bar) -"nh" = ( -/obj/effect/floor_decal/corner/blue/diagonal{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 8 - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/white, -/area/crew_quarters/mess) -"ni" = ( -/obj/effect/floor_decal/corner/blue/diagonal{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/bed/chair{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/crew_quarters/mess) -"nj" = ( -/obj/effect/floor_decal/corner/blue/diagonal{ - dir = 4 - }, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 8 - }, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/tiled/white, -/area/crew_quarters/mess) -"nk" = ( -/obj/effect/floor_decal/corner/blue/diagonal{ - dir = 4 - }, -/obj/structure/bed/chair{ - dir = 1 - }, -/turf/simulated/floor/tiled/white, -/area/crew_quarters/mess) -"nl" = ( -/obj/structure/bed/chair/office/dark{ - dir = 4 - }, -/obj/machinery/firealarm{ - dir = 8; - pixel_x = -24 - }, -/turf/simulated/floor/tiled, -/area/holocontrol) -"nm" = ( -/obj/structure/table/steel, -/obj/random/maintenance/solgov, -/obj/random/maintenance/solgov, -/obj/random/tech_supply, -/turf/simulated/floor/plating, -/area/maintenance/thirddeck/starboard) -"nn" = ( -/obj/effect/wallframe_spawn/no_grille, -/turf/simulated/floor/plating, -/area/holocontrol) -"no" = ( -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 1; - icon_state = "warningcorner" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark, -/area/engineering/hardstorage) -"np" = ( -/obj/effect/floor_decal/corner/green/half, -/obj/structure/flora/pottedplant/stoutbush, -/turf/simulated/floor/tiled/dark/monotile, -/area/crew_quarters/observation) -"nq" = ( -/obj/machinery/firealarm{ - dir = 1; - pixel_x = 0; - pixel_y = -24 - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/substation/thirddeck) -"ns" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 1; - level = 2 - }, -/turf/simulated/floor/carpet, -/area/crew_quarters/recreation) -"nt" = ( -/obj/effect/floor_decal/industrial/warning/corner, -/obj/machinery/computer/HolodeckControl{ - dir = 8; - icon_state = "computer"; - linkedholodeck_area = /area/holodeck/alphadeck; - programs_list_id = "TorchMainPrograms" - }, -/turf/simulated/floor/tiled, -/area/holocontrol) -"nu" = ( -/obj/structure/disposalpipe/segment{ - dir = 8; - icon_state = "pipe-c" - }, -/turf/simulated/floor/tiled/monotile, -/area/storage/tools) -"nw" = ( -/obj/machinery/atmospherics/unary/vent_pump/on, -/obj/machinery/light/small{ - dir = 8 - }, -/obj/machinery/button/blast_door{ - id_tag = "d3fore_shutters"; - name = "Garden Shutter Control"; - pixel_x = -23; - pixel_y = -9 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/crew_quarters/observation) -"ny" = ( -/obj/effect/floor_decal/industrial/hatch/yellow, -/obj/structure/ladder, -/obj/structure/catwalk, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/thirddeck/port) -"nz" = ( -/obj/structure/railing/mapped{ - dir = 4; - icon_state = "railing0-1" - }, -/obj/structure/railing/mapped{ - dir = 1; - icon_state = "railing0-1" - }, -/turf/simulated/floor/plating, -/area/maintenance/thirddeck/aftstarboard) -"nA" = ( -/turf/simulated/wall/r_wall/prepainted, -/area/engineering/hardstorage) -"nB" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/dark/monotile, -/area/crew_quarters/observation) -"nC" = ( -/turf/simulated/wall/prepainted, -/area/vacant/mess) -"nE" = ( -/obj/machinery/atmospherics/valve/digital{ - dir = 4; - id_tag = "fuelmode" - }, -/obj/effect/floor_decal/industrial/outline/red, -/turf/simulated/floor/reinforced/oxygen, -/area/thruster/d3port) -"nG" = ( -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/portable_atmospherics/powered/pump/filled, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/thirddeck/aftstarboard) -"nI" = ( -/obj/structure/table/steel, -/obj/structure/flora/pottedplant/small{ - pixel_y = 13 - }, -/obj/machinery/requests_console{ - announcementConsole = 1; - department = "Security"; - departmentType = 5; - pixel_y = -32 - }, -/obj/effect/floor_decal/corner/red{ - dir = 10 - }, -/turf/simulated/floor/tiled/dark, -/area/security/habcheck) -"nJ" = ( -/obj/machinery/portable_atmospherics/hydroponics/soil, -/turf/simulated/floor/grass, -/area/crew_quarters/observation) -"nL" = ( -/obj/structure/flora/ausbushes/ywflowers, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/grass, -/area/crew_quarters/observation) -"nO" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/hygiene/drain, -/turf/simulated/floor/tiled, -/area/hydroponics) -"nP" = ( -/obj/structure/cable/green{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/item/device/radio/intercom{ - dir = 4; - pixel_x = -21 - }, -/obj/effect/floor_decal/corner/paleblue{ - dir = 9; - icon_state = "corner_white" - }, -/obj/machinery/camera/network/third_deck{ - c_tag = "Third Deck Hallway - Fore Starboard"; - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/thirddeck/fore) -"nQ" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 8 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/structure/disposalpipe/segment{ - dir = 4; - icon_state = "pipe-c" - }, -/obj/effect/catwalk_plated, -/turf/simulated/floor/plating, -/area/hallway/primary/thirddeck/fore) -"nR" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/disposalpipe/junction{ - dir = 8 - }, -/obj/effect/catwalk_plated, -/turf/simulated/floor/plating, -/area/hallway/primary/thirddeck/fore) -"nS" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/floor_decal/corner/paleblue/half{ - dir = 4; - icon_state = "bordercolorhalf" - }, -/turf/simulated/floor/tiled/monotile, -/area/hallway/primary/thirddeck/fore) -"nT" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/door/airlock/hatch/maintenance, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/door/firedoor, -/turf/simulated/floor/tiled/steel_ridged, -/area/hallway/primary/thirddeck/fore) -"nU" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/thirddeck/forestarboard) -"nV" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9; - pixel_y = 0 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/structure/disposalpipe/segment{ - dir = 8; - icon_state = "pipe-c" - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/thirddeck/forestarboard) -"nY" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/carpet, -/area/crew_quarters/recreation) -"nZ" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/floor_decal/corner/green{ - dir = 8 - }, -/turf/simulated/floor/tiled/monotile, -/area/hydroponics) -"oa" = ( -/obj/structure/stairs/west, -/turf/simulated/floor/tiled, -/area/hallway/primary/thirddeck/fore) -"ob" = ( -/obj/effect/floor_decal/corner/green/half{ - dir = 8; - icon_state = "bordercolorhalf" - }, -/obj/machinery/disposal, -/obj/structure/disposalpipe/trunk, -/turf/simulated/floor/tiled/monotile, -/area/hallway/primary/thirddeck/fore) -"oc" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 4 - }, -/obj/effect/floor_decal/corner/green/half{ - dir = 4; - icon_state = "bordercolorhalf" - }, -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 8; - icon_state = "warningcorner" - }, -/turf/simulated/floor/tiled/monotile, -/area/hallway/primary/thirddeck/fore) -"od" = ( -/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/effect/catwalk_plated, -/turf/simulated/floor/plating, -/area/hallway/primary/thirddeck/fore) -"oe" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 - }, -/obj/effect/floor_decal/corner/green{ - dir = 6 - }, -/obj/structure/sign/deck/third{ - dir = 8; - icon_state = "deck-3"; - pixel_x = 32 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/thirddeck/fore) -"og" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/effect/floor_decal/spline/fancy/wood{ - dir = 4 - }, -/obj/effect/floor_decal/spline/fancy/wood{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/disposalpipe/segment{ - dir = 2; - icon_state = "pipe-c" - }, -/turf/simulated/floor/lino, -/area/crew_quarters/bar) -"oh" = ( -/obj/structure/table/standard, -/obj/structure/reagent_dispensers/beerkeg, -/turf/simulated/floor/tiled/dark, -/area/crew_quarters/bar) -"oi" = ( -/turf/simulated/floor/tiled/dark, -/area/crew_quarters/bar) -"ok" = ( -/obj/machinery/power/apc{ - dir = 8; - name = "west bump"; - pixel_x = -24 - }, -/obj/structure/cable/green{ - d2 = 2; - icon_state = "0-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 - }, -/turf/simulated/floor/tiled, -/area/holocontrol) -"ol" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 8 - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/holocontrol) -"om" = ( -/turf/simulated/floor/tiled/steel_ridged, -/area/holocontrol) -"on" = ( -/obj/structure/dispenser/oxygen, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled/dark/monotile, -/area/engineering/hardstorage) -"oo" = ( -/obj/machinery/suit_cycler/engineering/alt, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled/dark/monotile, -/area/engineering/hardstorage) -"op" = ( -/obj/effect/catwalk_plated, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/fuel, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/plating, -/area/hallway/primary/thirddeck/aft) -"or" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/catwalk, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/plating, -/area/maintenance/thirddeck/port) -"os" = ( -/obj/structure/railing/mapped{ - dir = 8; - icon_state = "railing0-1" - }, -/obj/structure/railing/mapped, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/random/junk, -/turf/simulated/floor/plating, -/area/maintenance/thirddeck/starboard) -"ot" = ( -/obj/structure/closet/crate/medical, -/obj/random/maintenance/solgov, -/obj/random/maintenance/solgov, -/obj/random/maintenance/solgov, -/obj/random/maintenance/solgov, -/obj/structure/grille/broken, -/turf/simulated/floor/plating, -/area/maintenance/thirddeck/foreport) -"ov" = ( -/obj/effect/floor_decal/corner/green{ - dir = 10 - }, -/obj/machinery/light, -/obj/structure/disposalpipe/segment{ - dir = 1; - icon_state = "pipe-c" - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/thirddeck/aft) -"oy" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/effect/floor_decal/corner/red{ - dir = 6; - icon_state = "corner_white" - }, -/obj/machinery/light{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/thirddeck/fore) -"oz" = ( -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 4; - icon_state = "warningcorner" - }, -/obj/structure/sign/warning/moving_parts{ - dir = 2; - pixel_y = 32 - }, -/turf/simulated/floor/airless, -/area/command/disperser) -"oA" = ( -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/structure/reagent_dispensers/fueltank, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/thirddeck/aftstarboard) -"oB" = ( -/obj/effect/wallframe_spawn/reinforced_phoron, -/turf/simulated/floor/reinforced, -/area/thruster/d3starboard) -"oC" = ( -/obj/machinery/light{ - dir = 4 - }, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 8 - }, -/turf/simulated/floor/tiled, -/area/crew_quarters/gym) -"oH" = ( -/obj/structure/railing/mapped{ - dir = 1; - icon_state = "railing0-1" - }, -/turf/simulated/open, -/area/maintenance/thirddeck/starboard) -"oJ" = ( -/obj/structure/flora/ausbushes/lavendergrass, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/light/spot{ - dir = 4 - }, -/turf/simulated/floor/grass, -/area/crew_quarters/observation) -"oK" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9; - pixel_y = 0 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/dark, -/area/turret_protected/ai_upload) -"oL" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 4 - }, -/obj/effect/floor_decal/corner/paleblue{ - dir = 9; - icon_state = "corner_white" - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/thirddeck/fore) -"oM" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/disposalpipe/segment, -/obj/effect/catwalk_plated, -/obj/structure/extinguisher_cabinet{ - pixel_x = 25; - pixel_y = 0 - }, -/turf/simulated/floor/plating, -/area/hallway/primary/thirddeck/fore) -"oO" = ( -/obj/effect/floor_decal/spline/fancy/wood{ - dir = 9; - icon_state = "spline_fancy" - }, -/obj/structure/table/gamblingtable, -/obj/item/deck/cards, -/turf/simulated/floor/carpet, -/area/crew_quarters/recreation) -"oS" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 1; - level = 2 - }, -/turf/simulated/floor/bluegrid, -/area/turret_protected/ai_upload_foyer) -"oT" = ( -/obj/structure/railing/mapped{ - dir = 1; - icon_state = "railing0-1" - }, -/turf/simulated/open, -/area/hallway/primary/thirddeck/fore) -"oU" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 4 - }, -/obj/effect/floor_decal/corner/green/half{ - dir = 4; - icon_state = "bordercolorhalf" - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 8; - icon_state = "warning" - }, -/turf/simulated/floor/tiled/monotile, -/area/hallway/primary/thirddeck/fore) -"oV" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/effect/catwalk_plated, -/turf/simulated/floor/plating, -/area/hallway/primary/thirddeck/fore) -"oW" = ( -/obj/machinery/camera/network/third_deck{ - c_tag = "Third Deck Hallway - Stairwell"; - dir = 8 - }, -/obj/item/device/radio/intercom{ - dir = 8; - pixel_x = 21 - }, -/obj/effect/floor_decal/corner/green{ - dir = 6 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/thirddeck/fore) -"oX" = ( -/obj/structure/bed/chair/wood{ - dir = 1 - }, -/obj/effect/floor_decal/corner/lime/mono, -/obj/item/device/radio/intercom{ - dir = 1; - pixel_y = -28 - }, -/obj/machinery/light/spot, -/obj/machinery/atmospherics/pipe/simple/hidden/fuel{ - dir = 5; - icon_state = "intact" - }, -/turf/simulated/floor/tiled/monotile, -/area/hallway/primary/thirddeck/aft) -"oY" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/obj/effect/floor_decal/spline/fancy/wood/corner{ - dir = 1 - }, -/obj/effect/floor_decal/spline/fancy/wood{ - dir = 8 - }, -/obj/machinery/light/spot, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply, -/obj/structure/disposalpipe/segment{ - dir = 1; - icon_state = "pipe-c" - }, -/turf/simulated/floor/lino, -/area/crew_quarters/bar) -"oZ" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/effect/floor_decal/spline/fancy/wood{ - dir = 1; - icon_state = "spline_fancy" - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/simulated/floor/lino, -/area/crew_quarters/bar) -"pa" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/floor_decal/spline/fancy/wood{ - dir = 1; - icon_state = "spline_fancy" - }, -/turf/simulated/floor/lino, -/area/crew_quarters/bar) -"pb" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/floor_decal/spline/fancy/wood/corner{ - dir = 4 - }, -/turf/simulated/floor/lino, -/area/crew_quarters/bar) -"pc" = ( -/obj/structure/window/reinforced{ - dir = 1 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/door/window/brigdoor/eastleft{ - name = "Bar" - }, -/turf/simulated/floor/lino, -/area/crew_quarters/bar) -"pd" = ( -/obj/effect/floor_decal/corner/blue/diagonal{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/disposalpipe/sortjunction/flipped{ - dir = 1; - name = "Bar"; - sort_type = "Bar" - }, -/turf/simulated/floor/tiled/white, -/area/crew_quarters/mess) -"pe" = ( -/obj/effect/floor_decal/corner/blue/diagonal{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 4 - }, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/tiled/white, -/area/crew_quarters/mess) -"pf" = ( -/obj/effect/floor_decal/corner/blue/diagonal{ - dir = 4 - }, -/obj/machinery/firealarm{ - dir = 1; - pixel_x = 0; - pixel_y = -24 - }, -/turf/simulated/floor/tiled/white, -/area/crew_quarters/mess) -"pg" = ( -/obj/effect/floor_decal/corner/blue/diagonal{ - dir = 4 - }, -/obj/machinery/light/spot, -/obj/structure/table/standard{ - name = "plastic table frame" - }, -/obj/machinery/recharger, -/turf/simulated/floor/tiled/white, -/area/crew_quarters/mess) -"pi" = ( -/obj/effect/floor_decal/corner/blue/diagonal{ - dir = 4 - }, -/obj/machinery/camera/network/third_deck{ - c_tag = "Mess Hall - Port"; - dir = 1 - }, -/obj/machinery/computer/arcade, -/turf/simulated/floor/tiled/white, -/area/crew_quarters/mess) -"pj" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, -/obj/machinery/light{ - dir = 8 - }, -/obj/item/device/radio/intercom{ - dir = 4; - pixel_x = -21 - }, -/turf/simulated/floor/tiled, -/area/holocontrol) -"pk" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 8 - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/holocontrol) -"pm" = ( -/obj/machinery/light/small, -/obj/effect/floor_decal/corner/yellow/half, -/turf/simulated/floor/tiled/dark, -/area/engineering/hardstorage) -"pn" = ( -/obj/machinery/door/blast/shutters{ - density = 0; - dir = 4; - icon_state = "shutter0"; - id_tag = "hab_hallway_shutters"; - name = "Habitation Deck Hallway Shutters"; - opacity = 0 - }, -/obj/effect/floor_decal/corner/red/mono, -/obj/machinery/alarm{ - dir = 1; - pixel_y = -22 - }, -/turf/simulated/floor/tiled/monotile, -/area/hallway/primary/thirddeck/center) -"pp" = ( -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 8 - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled, -/area/crew_quarters/gym) -"pq" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/floor_decal/corner/paleblue{ - dir = 10 - }, -/turf/simulated/floor/tiled/monotile, -/area/hallway/primary/thirddeck/fore) -"pr" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/catwalk_plated, -/obj/structure/cable/green{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/turf/simulated/floor/plating, -/area/hallway/primary/thirddeck/center) -"ps" = ( -/obj/machinery/atmospherics/pipe/simple/visible/fuel{ - dir = 5 - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/thruster/d3port) -"pw" = ( -/obj/structure/railing/mapped{ - dir = 8; - icon_state = "railing0-1" - }, -/obj/structure/railing/mapped{ - dir = 1; - icon_state = "railing0-1" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/plating, -/area/maintenance/thirddeck/starboard) -"py" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/door/firedoor, -/obj/structure/disposalpipe/segment, -/obj/machinery/door/airlock/glass/civilian{ - name = "Computer Lab" - }, -/turf/simulated/floor/tiled/steel_ridged, -/area/crew_quarters/office) -"pz" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/obj/structure/disposalpipe/segment{ - dir = 2; - icon_state = "pipe-c" - }, -/obj/effect/decal/cleanable/cobweb2, -/obj/structure/cable/green{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/thirddeck/aftstarboard) -"pD" = ( -/obj/structure/flora/ausbushes/pointybush, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/grass, -/area/crew_quarters/observation) -"pE" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/wall/r_wall/hull, -/area/hydroponics) -"pF" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/effect/floor_decal/corner/paleblue/half{ - dir = 8; - icon_state = "bordercolorhalf" - }, -/turf/simulated/floor/tiled/monotile, -/area/hallway/primary/thirddeck/fore) -"pG" = ( -/obj/machinery/atmospherics/unary/vent_pump/on, -/obj/machinery/firealarm{ - dir = 8; - pixel_x = -24; - pixel_y = 0 - }, -/turf/simulated/floor/tiled/dark, -/area/turret_protected/ai_upload) -"pH" = ( -/obj/machinery/computer/robotics, -/obj/machinery/firealarm{ - dir = 8; - pixel_x = -24; - pixel_y = 0 - }, -/turf/simulated/floor/tiled/dark, -/area/turret_protected/ai_upload_foyer) -"pI" = ( -/turf/simulated/wall/r_wall/hull, -/area/thruster/d3port) -"pJ" = ( -/obj/machinery/power/apc{ - dir = 1; - name = "north bump"; - pixel_x = 0; - pixel_y = 24 - }, -/obj/structure/cable/green{ - d2 = 2; - icon_state = "0-2" - }, -/turf/simulated/floor/bluegrid, -/area/turret_protected/ai_upload) -"pK" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/door/firedoor, -/turf/simulated/floor/tiled/techfloor/grid, -/area/maintenance/thirddeck/foreport) -"pL" = ( -/obj/item/device/radio/intercom/locked/ai_private{ - pixel_y = 22 - }, -/obj/machinery/porta_turret{ - dir = 8 - }, -/obj/machinery/light/small{ - dir = 8 - }, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/floor/tiled/dark, -/area/turret_protected/ai_upload) -"pM" = ( -/turf/simulated/wall/r_wall/prepainted, -/area/turret_protected/ai_upload_foyer) -"pO" = ( -/turf/simulated/open, -/area/hallway/primary/thirddeck/fore) -"pP" = ( -/obj/machinery/light, -/obj/effect/floor_decal/industrial/warning{ - dir = 8; - icon_state = "warning" - }, -/obj/effect/floor_decal/corner/green/half{ - dir = 4; - icon_state = "bordercolorhalf" - }, -/turf/simulated/floor/tiled/monotile, -/area/hallway/primary/thirddeck/fore) -"pR" = ( -/obj/machinery/computer/modular/preset/cardslot/command{ - dir = 4; - icon_state = "console" - }, -/turf/simulated/floor/tiled/monotile, -/area/command/disperser) -"pS" = ( -/obj/structure/sign/directions/evac{ - dir = 2; - pixel_y = -4 - }, -/obj/structure/sign/directions/engineering{ - dir = 1; - pixel_y = 3; - pixel_z = 0 - }, -/turf/simulated/wall/prepainted, -/area/hallway/primary/thirddeck/center) -"pT" = ( -/turf/simulated/floor/tiled/steel_ridged, -/area/hallway/primary/thirddeck/center) -"pU" = ( -/obj/structure/sign/directions/infirmary{ - dir = 1; - pixel_y = -4; - pixel_z = 0 - }, -/obj/structure/sign/directions/science{ - dir = 1; - pixel_y = 3; - pixel_z = 0 - }, -/turf/simulated/wall/prepainted, -/area/hallway/primary/thirddeck/center) -"pV" = ( -/obj/machinery/door/blast/shutters{ - dir = 2; - id_tag = "bar"; - name = "Bar Shutters" - }, -/obj/effect/wallframe_spawn/reinforced, -/turf/simulated/floor/plating, -/area/crew_quarters/bar) -"pW" = ( -/obj/structure/sign/double/barsign, -/turf/simulated/wall/prepainted, -/area/crew_quarters/bar) -"pX" = ( -/obj/effect/floor_decal/corner/blue/diagonal{ - dir = 4 - }, -/obj/machinery/door/firedoor, -/obj/structure/disposalpipe/segment, -/obj/machinery/door/airlock/glass/civilian{ - name = "Mess Hall" - }, -/turf/simulated/floor/tiled/white, -/area/crew_quarters/mess) -"pY" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/disposalpipe/segment, -/obj/effect/wallframe_spawn/no_grille, -/obj/machinery/door/firedoor, -/turf/simulated/floor/plating, -/area/crew_quarters/mess) -"pZ" = ( -/obj/effect/floor_decal/corner/blue/diagonal{ - dir = 4 - }, -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/glass/civilian{ - name = "Mess Hall" - }, -/turf/simulated/floor/tiled/white, -/area/crew_quarters/mess) -"qb" = ( -/obj/effect/wallframe_spawn/no_grille, -/turf/simulated/floor/plating, -/area/crew_quarters/mess) -"qc" = ( -/obj/machinery/door/airlock/multi_tile/glass/civilian{ - name = "Holodeck" - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/tiled/steel_ridged, -/area/holocontrol) -"qd" = ( -/turf/simulated/wall/prepainted, -/area/holocontrol) -"qe" = ( -/obj/machinery/status_display, -/turf/simulated/wall/prepainted, -/area/holocontrol) -"qg" = ( -/obj/structure/closet/secure_closet/personal, -/obj/effect/floor_decal/corner/lime{ - dir = 10 - }, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 1 - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/light/small, -/turf/simulated/floor/tiled/monotile, -/area/crew_quarters/cryolocker) -"qh" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/railing/mapped, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/plating, -/area/maintenance/thirddeck/forestarboard) -"qi" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 - }, -/obj/structure/railing/mapped, -/obj/structure/railing/mapped{ - dir = 8; - icon_state = "railing0-1" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, -/turf/simulated/floor/plating, -/area/maintenance/thirddeck/port) -"ql" = ( -/obj/machinery/atmospherics/pipe/simple/visible/cyan, -/obj/machinery/meter, -/obj/effect/wallframe_spawn/reinforced_phoron, -/turf/simulated/floor/tiled/techfloor, -/area/thruster/d3starboard) -"qn" = ( -/obj/machinery/light{ - dir = 8 - }, -/obj/machinery/gibber, -/turf/simulated/floor/tiled/freezer, -/area/crew_quarters/galleybackroom) -"qp" = ( -/obj/machinery/atmospherics/portables_connector{ - dir = 4 - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 4 - }, -/obj/effect/floor_decal/industrial/hatch/blue, -/turf/simulated/floor/tiled/techfloor, -/area/thruster/d3starboard) -"qq" = ( -/obj/effect/floor_decal/industrial/hatch/blue, -/obj/machinery/light{ - dir = 1; - icon_state = "tube1" - }, -/obj/structure/ship_munition/disperser_charge/emp, -/turf/simulated/floor/tiled/dark, -/area/command/disperser) -"qr" = ( -/obj/structure/bed/chair/wood{ - dir = 4 - }, -/obj/effect/floor_decal/corner/lime/three_quarters{ - dir = 8 - }, -/obj/machinery/alarm{ - pixel_y = 24 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/fuel{ - dir = 6; - icon_state = "intact" - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/thirddeck/aft) -"qs" = ( -/obj/structure/table/woodentable, -/obj/item/reagent_containers/food/drinks/glass2/coffeecup, -/obj/effect/floor_decal/corner/lime{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/fuel{ - dir = 9; - icon_state = "intact" - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/thirddeck/aft) -"qt" = ( -/obj/effect/floor_decal/corner/lime/three_quarters{ - dir = 1 - }, -/obj/machinery/vending/cola{ - dir = 8; - icon_state = "Cola_Machine" - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/thirddeck/aft) -"qu" = ( -/turf/simulated/floor/bluegrid, -/area/turret_protected/ai_upload) -"qv" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/thirddeck/aftstarboard) -"qx" = ( -/obj/effect/wallframe_spawn/reinforced, -/obj/machinery/door/firedoor, -/obj/machinery/door/blast/regular{ - density = 0; - dir = 4; - icon_state = "pdoor0"; - id_tag = "d3fore_shutters"; - name = "Blast Shields"; - opacity = 0 - }, -/turf/simulated/floor/plating, -/area/crew_quarters/observation) -"qC" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/wood/walnut, -/area/crew_quarters/observation) -"qG" = ( -/obj/machinery/light/small{ - dir = 8 - }, -/turf/simulated/floor/tiled/dark, -/area/turret_protected/ai_upload_foyer) -"qH" = ( -/obj/structure/closet/walllocker/emerglocker, -/turf/simulated/wall/prepainted, -/area/maintenance/thirddeck/forestarboard) -"qI" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/machinery/hologram/holopad, -/obj/effect/landmark{ - name = "lightsout" - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/bluegrid, -/area/turret_protected/ai_upload) -"qL" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/effect/catwalk_plated, -/obj/structure/disposalpipe/junction{ - dir = 4; - icon_state = "pipe-j2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/hallway/primary/thirddeck/fore) -"qM" = ( -/obj/structure/catwalk, -/obj/machinery/atmospherics/valve/shutoff/fuel, -/turf/simulated/floor/plating, -/area/maintenance/thirddeck/aftport) -"qN" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/catwalk, -/obj/effect/floor_decal/industrial/warning{ - dir = 4; - icon_state = "warning" - }, -/turf/simulated/floor/plating, -/area/maintenance/thirddeck/port) -"qO" = ( -/obj/effect/floor_decal/industrial/outline/grey, -/obj/structure/largecrate, -/obj/random/maintenance/clean, -/obj/random/maintenance/solgov, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/thirddeck/port) -"qP" = ( -/obj/effect/floor_decal/corner/green/half{ - dir = 1; - icon_state = "bordercolorhalf" - }, -/turf/simulated/floor/tiled/monotile, -/area/hallway/primary/thirddeck/center) -"qQ" = ( -/obj/machinery/atmospherics/unary/vent_pump/on, -/obj/effect/floor_decal/corner/green{ - dir = 5 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/thirddeck/center) -"qR" = ( -/obj/machinery/door/firedoor, -/obj/effect/floor_decal/industrial/hatch/yellow, -/turf/simulated/floor/tiled/monotile, -/area/hallway/primary/thirddeck/center) -"qS" = ( -/obj/structure/disposalpipe/segment, -/obj/effect/floor_decal/corner/green{ - dir = 5 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/thirddeck/center) -"qU" = ( -/obj/machinery/camera/network/third_deck{ - c_tag = "Third Deck Hallway - Cryogenic Storage" - }, -/obj/effect/floor_decal/corner/green{ - dir = 1; - icon_state = "corner_white" - }, -/obj/machinery/light{ - dir = 1 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/thirddeck/center) -"qV" = ( -/obj/machinery/atm{ - pixel_y = 32 - }, -/obj/effect/floor_decal/corner/green{ - dir = 5 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/thirddeck/center) -"qW" = ( -/obj/machinery/atmospherics/valve/digital{ - dir = 4; - id_tag = "fuelmode" - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 1 - }, -/obj/effect/floor_decal/industrial/outline/red, -/turf/simulated/floor/tiled/techfloor, -/area/thruster/d3port) -"qY" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/bluegrid, -/area/turret_protected/ai_upload) -"qZ" = ( -/obj/machinery/door/airlock/maintenance, -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/fuel, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/steel_ridged, -/area/hallway/primary/thirddeck/aft) -"ra" = ( -/obj/effect/floor_decal/corner/yellow{ - dir = 5; - icon_state = "corner_white" - }, -/obj/machinery/door/airlock/glass/civilian, -/obj/machinery/door/firedoor, -/turf/simulated/floor/tiled/steel_ridged, -/area/hallway/primary/thirddeck/aft) -"rb" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/obj/effect/floor_decal/corner/red{ - dir = 6; - icon_state = "corner_white" - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/thirddeck/fore) -"rc" = ( -/obj/effect/floor_decal/corner/green{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/tiled, -/area/hallway/primary/thirddeck/center) -"re" = ( -/obj/effect/floor_decal/corner/green/half, -/turf/simulated/floor/tiled, -/area/hallway/primary/thirddeck/aft) -"rf" = ( -/obj/effect/floor_decal/corner/green{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/thirddeck/aft) -"rh" = ( -/obj/machinery/atmospherics/unary/vent_pump/on, -/obj/machinery/atm{ - pixel_y = 32 - }, -/obj/effect/floor_decal/corner/green{ - dir = 1; - icon_state = "corner_white" - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/thirddeck/aft) -"ri" = ( -/obj/machinery/light{ - dir = 1 - }, -/obj/item/device/radio/intercom{ - pixel_y = 23 - }, -/obj/effect/floor_decal/corner/green/half{ - dir = 1; - icon_state = "bordercolorhalf" - }, -/turf/simulated/floor/tiled/monotile, -/area/hallway/primary/thirddeck/aft) -"rk" = ( -/obj/effect/floor_decal/corner/yellow{ - dir = 5; - icon_state = "corner_white" - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/thirddeck/aft) -"rl" = ( -/obj/machinery/alarm{ - pixel_y = 24 - }, -/obj/effect/floor_decal/corner/yellow{ - dir = 1 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/thirddeck/aft) -"rm" = ( -/obj/structure/table/marble, -/obj/effect/floor_decal/corner/grey/diagonal{ - dir = 4 - }, -/obj/item/book/manual/chef_recipes, -/obj/item/sticky_pad/random, -/turf/simulated/floor/tiled/white, -/area/crew_quarters/galley) -"rp" = ( -/obj/machinery/door/firedoor, -/obj/effect/floor_decal/industrial/hatch/yellow, -/turf/simulated/floor/tiled/monotile, -/area/hallway/primary/thirddeck/aft) -"rr" = ( -/obj/machinery/power/apc{ - dir = 1; - name = "north bump"; - pixel_x = 0; - pixel_y = 24 - }, -/obj/structure/cable/green{ - d2 = 2; - icon_state = "0-2" - }, -/obj/effect/floor_decal/corner/green{ - dir = 1; - icon_state = "corner_white" - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/thirddeck/aft) -"rt" = ( -/obj/machinery/camera/network/third_deck{ - c_tag = "Third Deck Hallway - Aft" - }, -/obj/machinery/light{ - dir = 1 - }, -/obj/effect/floor_decal/corner/green/half{ - dir = 1; - icon_state = "bordercolorhalf" - }, -/turf/simulated/floor/tiled/monotile, -/area/hallway/primary/thirddeck/aft) -"ru" = ( -/obj/effect/floor_decal/corner/green{ - dir = 5 - }, -/obj/machinery/atm{ - pixel_y = 32 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/thirddeck/aft) -"rv" = ( -/obj/machinery/hologram/holopad, -/obj/machinery/camera/network/third_deck{ - c_tag = "Holodeck - Center" - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/alarm{ - dir = 4; - pixel_x = -23; - pixel_y = 0 - }, -/turf/simulated/floor/tiled/dark, -/area/holocontrol) -"rw" = ( -/obj/effect/floor_decal/corner/green{ - dir = 5 - }, -/obj/machinery/light{ - dir = 1 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/thirddeck/aft) -"rx" = ( -/obj/effect/floor_decal/industrial/hatch/yellow, -/obj/machinery/door/firedoor, -/obj/machinery/newscaster{ - pixel_y = 32 - }, -/turf/simulated/floor/tiled/monotile, -/area/hallway/primary/thirddeck/aft) -"rz" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/thirddeck/starboard) -"rA" = ( -/obj/structure/window/phoronreinforced{ - dir = 8; - icon_state = "rwindow" - }, -/obj/structure/closet/crate, -/obj/item/stack/material/phoron{ - amount = 50 - }, -/obj/item/stack/material/phoron{ - amount = 50 - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 8 - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled/techfloor/grid, -/area/engineering/hardstorage) -"rB" = ( -/obj/effect/floor_decal/corner/lime/three_quarters{ - dir = 1 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/thirddeck/aft) -"rC" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark, -/area/engineering/hardstorage) -"rD" = ( -/obj/structure/lattice, -/obj/structure/grille, -/turf/simulated/wall/r_wall/hull, -/area/space) -"rE" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/door/firedoor, -/obj/structure/curtain/black, -/turf/simulated/floor/tiled/techfloor/grid, -/area/chapel/main) -"rG" = ( -/obj/structure/sign/warning/nosmoking_1{ - dir = 4; - icon_state = "nosmoking"; - pixel_x = -32 - }, -/turf/simulated/floor/tiled/dark, -/area/command/disperser) -"rH" = ( -/obj/structure/reagent_dispensers/watertank, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/thirddeck/starboard) -"rK" = ( -/obj/structure/railing/mapped{ - dir = 8; - icon_state = "railing0-1" - }, -/obj/random_multi/single_item/poppy, -/turf/simulated/floor/plating, -/area/maintenance/thirddeck/starboard) -"rL" = ( -/obj/effect/floor_decal/corner/blue/diagonal{ - dir = 4 - }, -/obj/machinery/door/firedoor, -/obj/effect/floor_decal/industrial/hatch/yellow, -/turf/simulated/floor/tiled/white, -/area/crew_quarters/mess) -"rM" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/floor_decal/corner/blue/diagonal{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/crew_quarters/mess) -"rP" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, -/obj/structure/cable/green{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/machinery/camera/network/third_deck{ - c_tag = "Third Deck Hallway - Observatory"; - dir = 8 - }, -/turf/simulated/floor/wood/walnut, -/area/crew_quarters/observation) -"rQ" = ( -/obj/effect/wallframe_spawn/no_grille, -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/plating, -/area/crew_quarters/observation) -"rR" = ( -/obj/structure/cable/green{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/tele_beacon, -/obj/effect/floor_decal/corner/paleblue{ - dir = 9; - icon_state = "corner_white" - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/thirddeck/fore) -"rS" = ( -/obj/structure/disposalpipe/segment, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply, -/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers, -/obj/effect/catwalk_plated, -/turf/simulated/floor/plating, -/area/hallway/primary/thirddeck/fore) -"rT" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/bluegrid, -/area/turret_protected/ai_upload_foyer) -"rU" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 4; - icon_state = "warning" - }, -/turf/simulated/floor/bluegrid, -/area/turret_protected/ai_upload_foyer) -"rV" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/effect/catwalk_plated, -/turf/simulated/floor/plating, -/area/crew_quarters/cryolocker) -"sc" = ( -/obj/effect/floor_decal/corner/green/half{ - dir = 1; - icon_state = "bordercolorhalf" - }, -/obj/structure/bed/chair, -/turf/simulated/floor/tiled/monotile, -/area/hallway/primary/thirddeck/fore) -"se" = ( -/obj/effect/floor_decal/corner/green/half{ - dir = 1; - icon_state = "bordercolorhalf" - }, -/obj/machinery/power/apc{ - dir = 1; - name = "north bump"; - pixel_x = 0; - pixel_y = 24 - }, -/obj/structure/cable/green{ - d2 = 4; - icon_state = "0-4" - }, -/turf/simulated/floor/tiled/monotile, -/area/hallway/primary/thirddeck/fore) -"sf" = ( -/obj/structure/disposalpipe/segment{ - dir = 4; - icon_state = "pipe-c" - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/machinery/hologram/holopad, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 8 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/monotile, -/area/hallway/primary/thirddeck/fore) -"sg" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/thirddeck/fore) -"sh" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/wallframe_spawn/no_grille, -/turf/simulated/floor/plating, -/area/hallway/primary/thirddeck/center) -"si" = ( -/obj/machinery/air_sensor{ - id_tag = "d3sh_sensor" - }, -/turf/simulated/floor/reinforced/hydrogen, -/area/thruster/d3starboard) -"sj" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/catwalk_plated, -/turf/simulated/floor/plating, -/area/hallway/primary/thirddeck/center) -"sk" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 1 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/catwalk_plated, -/turf/simulated/floor/plating, -/area/hallway/primary/thirddeck/center) -"sl" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/door/blast/shutters{ - density = 0; - dir = 4; - icon_state = "shutter0"; - id_tag = "hab_hallway_shutters"; - name = "Habitation Deck Hallway Shutters"; - opacity = 0 - }, -/obj/effect/floor_decal/corner/red/mono, -/turf/simulated/floor/tiled/monotile, -/area/hallway/primary/thirddeck/center) -"sn" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 8; - icon_state = "pipe-c" - }, -/obj/effect/catwalk_plated, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/hallway/primary/thirddeck/center) -"so" = ( -/obj/structure/cable/green{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply, -/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers, -/obj/machinery/tele_beacon, -/obj/structure/disposalpipe/segment{ - dir = 1; - icon_state = "pipe-c" - }, -/obj/machinery/hologram/holopad, -/obj/effect/catwalk_plated, -/turf/simulated/floor/plating, -/area/hallway/primary/thirddeck/center) -"sp" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/disposalpipe/sortjunction{ - dir = 4; - name = "Cryogenic Storage"; - sort_type = "Cryogenic Storage" - }, -/obj/effect/catwalk_plated, -/turf/simulated/floor/plating, -/area/hallway/primary/thirddeck/center) -"sr" = ( -/obj/machinery/door/firedoor, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/floor_decal/industrial/hatch/yellow, -/turf/simulated/floor/tiled/monotile, -/area/hallway/primary/thirddeck/center) -"su" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 1 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/turf/simulated/floor/tiled/monotile, -/area/hallway/primary/thirddeck/aft) -"sv" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/simulated/floor/tiled/monotile, -/area/hallway/primary/thirddeck/aft) -"sw" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/disposalpipe/junction{ - dir = 4; - icon_state = "pipe-j2" - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply, -/obj/effect/catwalk_plated, -/turf/simulated/floor/plating, -/area/hallway/primary/thirddeck/aft) -"sx" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 1 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/catwalk_plated, -/turf/simulated/floor/plating, -/area/hallway/primary/thirddeck/aft) -"sy" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 1 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/simulated/floor/tiled/monotile, -/area/hallway/primary/thirddeck/aft) -"sz" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/floor_decal/industrial/shutoff{ - dir = 4 - }, -/obj/machinery/atmospherics/valve/shutoff/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/valve/shutoff/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled/monotile, -/area/hallway/primary/thirddeck/aft) -"sB" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/wallframe_spawn/no_grille, -/turf/simulated/floor/plating, -/area/hallway/primary/thirddeck/aft) -"sC" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/effect/catwalk_plated, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/hallway/primary/thirddeck/aft) -"sE" = ( -/obj/effect/catwalk_plated, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, -/obj/structure/cable/green{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/turf/simulated/floor/plating, -/area/hallway/primary/thirddeck/aft) -"sF" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/catwalk_plated, -/turf/simulated/floor/plating, -/area/hallway/primary/thirddeck/aft) -"sG" = ( -/obj/effect/catwalk_plated, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/turf/simulated/floor/plating, -/area/hallway/primary/thirddeck/aft) -"sH" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 - }, -/turf/simulated/floor/lino, -/area/crew_quarters/office) -"sI" = ( -/obj/machinery/door/airlock/glass/civilian{ - name = "Gym" - }, -/obj/structure/disposalpipe/segment, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/door/firedoor, -/turf/simulated/floor/tiled/steel_ridged, -/area/crew_quarters/gym) -"sJ" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/effect/catwalk_plated, -/turf/simulated/floor/plating, -/area/hallway/primary/thirddeck/aft) -"sL" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/hologram/holopad, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/bluegrid, -/area/turret_protected/ai_upload_foyer) -"sM" = ( -/obj/effect/floor_decal/industrial/outline/grey, -/obj/random_multi/single_item/piano, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/thirddeck/foreport) -"sN" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/catwalk_plated, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply, -/turf/simulated/floor/plating, -/area/hallway/primary/thirddeck/fore) -"sP" = ( -/obj/structure/table/rack{ - dir = 8 - }, -/obj/item/storage/briefcase/inflatable{ - pixel_x = 3; - pixel_y = 6 - }, -/obj/item/storage/briefcase/inflatable{ - pixel_x = 3; - pixel_y = 6 - }, -/obj/item/storage/briefcase/inflatable{ - pixel_x = 3; - pixel_y = 6 - }, -/obj/item/storage/briefcase/inflatable{ - pixel_x = 3; - pixel_y = 6 - }, -/obj/item/inflatable_dispenser, -/obj/item/grenade/chem_grenade/metalfoam, -/obj/item/grenade/chem_grenade/metalfoam, -/obj/item/grenade/chem_grenade/metalfoam, -/obj/item/grenade/chem_grenade/metalfoam, -/obj/item/grenade/chem_grenade/metalfoam, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/engineering/hardstorage) -"sQ" = ( -/obj/effect/floor_decal/industrial/outline/grey, -/obj/machinery/portable_atmospherics/powered/pump/filled, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/thirddeck/port) -"sR" = ( -/obj/effect/floor_decal/industrial/hatch/yellow, -/obj/machinery/door/firedoor, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/monotile, -/area/hallway/primary/thirddeck/aft) -"sS" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/catwalk, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/maintenance/thirddeck/port) -"sU" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 1; - icon_state = "map-scrubbers" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/thirddeck/aft) -"sW" = ( -/turf/simulated/floor/tiled, -/area/hallway/primary/thirddeck/aft) -"sX" = ( -/obj/effect/floor_decal/corner/lime{ - dir = 6 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/thirddeck/aft) -"sZ" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/thirddeck/starboard) -"tc" = ( -/obj/machinery/alarm{ - dir = 4; - pixel_x = -25; - pixel_y = 0 - }, -/turf/simulated/floor/wood/walnut, -/area/crew_quarters/recreation) -"td" = ( -/obj/machinery/atmospherics/binary/pump/high_power/on{ - target_pressure = 3000 - }, -/turf/simulated/wall/ocp_wall, -/area/thruster/d3starboard) -"te" = ( -/obj/structure/sign/warning/fire{ - dir = 1 - }, -/turf/simulated/wall/ocp_wall, -/area/thruster/d3starboard) -"tf" = ( -/obj/machinery/atmospherics/pipe/simple/visible/fuel, -/obj/machinery/door/airlock/external, -/obj/machinery/door/blast/regular{ - dir = 1; - id_tag = "d3starboardnacelle"; - implicit_material = null - }, -/turf/simulated/floor/reinforced, -/area/thruster/d3starboard) -"tj" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/wood/walnut, -/area/crew_quarters/observation) -"tl" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/disposalpipe/segment, -/obj/effect/catwalk_plated, -/turf/simulated/floor/plating, -/area/hallway/primary/thirddeck/fore) -"tp" = ( -/obj/effect/floor_decal/spline/fancy/wood{ - dir = 6; - icon_state = "spline_fancy" - }, -/turf/simulated/floor/carpet, -/area/crew_quarters/recreation) -"ts" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/effect/floor_decal/corner/paleblue{ - dir = 9; - icon_state = "corner_white" - }, -/obj/machinery/camera/network/third_deck{ - c_tag = "Third Deck Hallway - Fore Port"; - dir = 4 - }, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/thirddeck/fore) -"tt" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/glass/civilian, -/turf/simulated/floor/tiled/steel_ridged, -/area/hallway/primary/thirddeck/center) -"tu" = ( -/obj/structure/table/rack, -/obj/random/maintenance/solgov, -/obj/random/maintenance/solgov, -/obj/random/maintenance/solgov, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/thirddeck/starboard) -"tv" = ( -/obj/effect/floor_decal/corner/red{ - dir = 10 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/thirddeck/center) -"tw" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 1 - }, -/obj/effect/floor_decal/corner/red{ - dir = 10 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/thirddeck/center) -"tx" = ( -/obj/machinery/camera/network/third_deck{ - c_tag = "Third Deck Hallway - Lift"; - dir = 1 - }, -/obj/machinery/firealarm{ - dir = 1; - pixel_x = 0; - pixel_y = -24 - }, -/obj/effect/floor_decal/corner/red{ - dir = 10 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/thirddeck/center) -"ty" = ( -/obj/effect/floor_decal/corner/blue{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/tiled/dark, -/area/command/disperser) -"tz" = ( -/obj/structure/catwalk, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/plating, -/area/maintenance/thirddeck/port) -"tA" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/thirddeck/aft) -"tC" = ( -/obj/machinery/light, -/obj/effect/floor_decal/corner/green{ - dir = 10; - icon_state = "corner_white" - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/thirddeck/center) -"tD" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 1 - }, -/obj/effect/floor_decal/corner/green{ - dir = 10; - icon_state = "corner_white" - }, -/obj/item/device/radio/intercom{ - dir = 1; - pixel_y = -28 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/thirddeck/center) -"tE" = ( -/obj/machinery/firealarm{ - dir = 1; - pixel_x = 0; - pixel_y = -24 - }, -/obj/effect/floor_decal/corner/green/half, -/turf/simulated/floor/tiled/monotile, -/area/hallway/primary/thirddeck/center) -"tF" = ( -/obj/machinery/alarm{ - pixel_y = 24 - }, -/obj/effect/floor_decal/corner/green{ - dir = 5 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/thirddeck/center) -"tG" = ( -/obj/effect/floor_decal/techfloor{ - dir = 1; - icon_state = "techfloor_edges" - }, -/obj/structure/bed/chair, -/turf/simulated/floor/tiled/techfloor, -/area/crew_quarters/safe_room/thirddeck) -"tH" = ( -/obj/effect/floor_decal/corner/green/half, -/turf/simulated/floor/tiled/monotile, -/area/hallway/primary/thirddeck/center) -"tI" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 1 - }, -/obj/machinery/computer/guestpass{ - pixel_y = -32 - }, -/obj/effect/floor_decal/corner/green{ - dir = 10; - icon_state = "corner_white" - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/thirddeck/center) -"tJ" = ( -/obj/machinery/atm{ - pixel_y = -32 - }, -/obj/effect/floor_decal/corner/green{ - dir = 10; - icon_state = "corner_white" - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/thirddeck/center) -"tK" = ( -/obj/structure/lattice, -/turf/simulated/wall/r_wall/hull, -/area/thruster/d3port) -"tL" = ( -/obj/machinery/camera/network/third_deck{ - c_tag = "Third Deck Hallway - Center"; - dir = 1 - }, -/obj/effect/floor_decal/corner/green{ - dir = 10 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/thirddeck/center) -"tN" = ( -/obj/structure/bed/chair/pew/left/mahogany, -/obj/machinery/light{ - dir = 4; - icon_state = "tube1" - }, -/turf/simulated/floor/tiled/dark, -/area/chapel/main) -"tP" = ( -/obj/effect/floor_decal/corner/red/half, -/turf/simulated/floor/tiled/monotile, -/area/hallway/primary/thirddeck/center) -"tR" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/door/airlock/glass/civilian{ - name = "Recreation" - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/wood/walnut, -/area/hallway/primary/thirddeck/fore) -"tS" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 1 - }, -/obj/effect/floor_decal/corner/green{ - dir = 10 - }, -/obj/structure/extinguisher_cabinet{ - pixel_y = -32 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/thirddeck/aft) -"tT" = ( -/obj/structure/closet/medical_wall/filled{ - pixel_x = -32 - }, -/turf/simulated/floor/tiled/monotile, -/area/crew_quarters/gym) -"tU" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/catwalk, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 - }, -/turf/simulated/floor/plating, -/area/maintenance/thirddeck/foreport) -"tW" = ( -/obj/machinery/light, -/obj/effect/floor_decal/corner/green{ - dir = 10 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/thirddeck/aft) -"tZ" = ( -/obj/structure/cable/green{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/structure/catwalk, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/maintenance/thirddeck/port) -"ua" = ( -/obj/effect/floor_decal/corner/green{ - dir = 10 - }, -/obj/machinery/alarm{ - dir = 1; - pixel_y = -22 - }, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 1 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/thirddeck/aft) -"ub" = ( -/turf/simulated/wall/walnut, -/area/vacant/cabin) -"ue" = ( -/obj/effect/floor_decal/corner/green/half, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/tiled/monotile, -/area/hallway/primary/thirddeck/aft) -"uf" = ( -/obj/machinery/atmospherics/pipe/simple/visible/cyan{ - dir = 5; - icon_state = "intact" - }, -/turf/simulated/floor/reinforced/oxygen, -/area/thruster/d3port) -"ug" = ( -/obj/structure/railing/mapped{ - dir = 8; - icon_state = "railing0-1" - }, -/turf/simulated/floor/plating, -/area/maintenance/thirddeck/port) -"uh" = ( -/obj/machinery/suit_storage_unit/engineering/alt/sol, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled/techfloor/grid, -/area/engineering/hardstorage) -"ui" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/wall/r_wall/hull, -/area/space) -"uj" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/disposalpipe/segment{ - dir = 2; - icon_state = "pipe-c" - }, -/obj/machinery/light_switch{ - pixel_x = 22; - pixel_y = -22 - }, -/turf/simulated/floor/lino, -/area/tcommsat/computer) -"uk" = ( -/obj/effect/floor_decal/industrial/hatch/yellow, -/obj/machinery/door/firedoor, -/turf/simulated/floor/tiled/monotile, -/area/hallway/primary/thirddeck/aft) -"ul" = ( -/obj/effect/floor_decal/corner/lime{ - dir = 10 - }, -/obj/machinery/firealarm{ - dir = 1; - pixel_x = 0; - pixel_y = -24 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/thirddeck/aft) -"um" = ( -/obj/effect/floor_decal/corner/lime{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/fuel, -/turf/simulated/floor/tiled, -/area/hallway/primary/thirddeck/aft) -"un" = ( -/turf/simulated/wall/r_wall/prepainted, -/area/thruster/d3starboard) -"uo" = ( -/obj/effect/floor_decal/corner/lime/three_quarters{ - dir = 4 - }, -/obj/machinery/disposal, -/obj/effect/floor_decal/industrial/hatch/yellow, -/obj/structure/disposalpipe/trunk{ - dir = 8 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/thirddeck/aft) -"up" = ( -/obj/effect/wallframe_spawn/reinforced, -/obj/machinery/door/blast/shutters{ - density = 0; - dir = 4; - icon_state = "shutter0"; - id_tag = "hab_checkpoint_shutters"; - name = "Hangar Deck Checkpoint Shutters"; - opacity = 0 - }, -/obj/structure/cable/green, -/turf/simulated/floor/plating, -/area/security/habcheck) -"uq" = ( -/obj/machinery/hologram/holopad, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/tiled/dark, -/area/chapel/main) -"uv" = ( -/obj/structure/flora/ausbushes/pointybush, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/grass, -/area/crew_quarters/observation) -"ux" = ( -/obj/effect/floor_decal/corner/lime{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/thirddeck/aft) -"uz" = ( -/obj/structure/flora/pottedplant/large, -/turf/simulated/floor/wood/walnut, -/area/crew_quarters/recreation) -"uA" = ( -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 8; - icon_state = "warningcorner" - }, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 4 - }, -/turf/simulated/floor/airless, -/area/command/disperser) -"uB" = ( -/obj/machinery/camera/network/command{ - c_tag = "AI Upload - Center"; - dir = 1 - }, -/turf/simulated/floor/bluegrid, -/area/turret_protected/ai_upload) -"uC" = ( -/obj/structure/table/rack, -/obj/structure/window/reinforced{ - dir = 4 - }, -/obj/structure/window/reinforced{ - dir = 8 - }, -/obj/machinery/door/window/northright{ - name = "Utility Modules" - }, -/obj/item/aiModule/freeform, -/obj/item/aiModule/protectStation, -/turf/simulated/floor/tiled/dark, -/area/turret_protected/ai_upload) -"uG" = ( -/obj/machinery/porta_turret{ - dir = 8 - }, -/obj/machinery/flasher{ - pixel_x = 24; - pixel_y = 0 - }, -/turf/simulated/floor/bluegrid, -/area/turret_protected/ai_upload) -"uH" = ( -/turf/simulated/wall/r_wall/prepainted, -/area/turret_protected/ai_upload) -"uI" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/effect/catwalk_plated, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/plating, -/area/hallway/primary/thirddeck/fore) -"uK" = ( -/obj/machinery/status_display, -/turf/simulated/wall/prepainted, -/area/security/habcheck) -"uL" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/door/airlock/hatch/maintenance, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/door/firedoor, -/turf/simulated/floor/tiled/steel_ridged, -/area/hallway/primary/thirddeck/center) -"uM" = ( -/turf/simulated/wall/prepainted, -/area/crew_quarters/sleep/bunk) -"uN" = ( -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/door/airlock/security{ - name = "Security Checkpoint"; - secured_wires = 1 - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/tiled/steel_ridged, -/area/security/habcheck) -"uO" = ( -/obj/effect/shuttle_landmark/torch/deck4/exploration_shuttle{ - name = "3rd Deck, Fore Port" - }, -/turf/space, -/area/space) -"uQ" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/glass/civilian{ - name = "Cryogenic Storage" - }, -/turf/simulated/floor/tiled/steel_ridged, -/area/crew_quarters/sleep/cryo) -"uR" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/disposalpipe/segment{ - dir = 4; - icon_state = "pipe-c" - }, -/obj/effect/wallframe_spawn/no_grille, -/obj/machinery/door/firedoor, -/turf/simulated/floor/plating, -/area/crew_quarters/sleep/cryo) -"uS" = ( -/obj/machinery/door/firedoor, -/obj/structure/disposalpipe/segment{ - dir = 8; - icon_state = "pipe-c" - }, -/obj/machinery/door/airlock/glass/civilian{ - name = "Cryogenic Storage" - }, -/turf/simulated/floor/tiled/steel_ridged, -/area/crew_quarters/sleep/cryo) -"uT" = ( -/obj/machinery/status_display, -/turf/simulated/wall/prepainted, -/area/crew_quarters/sleep/cryo) -"uU" = ( -/turf/simulated/wall/prepainted, -/area/crew_quarters/head) -"uV" = ( -/obj/structure/catwalk, -/obj/machinery/atmospherics/pipe/simple/visible/fuel, -/turf/simulated/floor/plating, -/area/maintenance/thirddeck/aftport) -"vb" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/obj/machinery/light/small{ - dir = 8 - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/item/device/radio/intercom{ - dir = 4; - pixel_x = -21 - }, -/obj/machinery/recharge_station, -/turf/simulated/floor/tiled/monotile, -/area/crew_quarters/cryolocker) -"vc" = ( -/obj/machinery/light/small{ - dir = 1 - }, -/turf/simulated/floor/plating, -/area/maintenance/thirddeck/aftstarboard) -"vd" = ( -/obj/structure/catwalk, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/turf/simulated/floor/plating, -/area/maintenance/thirddeck/starboard) -"ve" = ( -/turf/simulated/wall/prepainted, -/area/maintenance/thirddeck/aftstarboard) -"vf" = ( -/obj/machinery/atmospherics/unary/vent_pump/high_volume/airlock{ - dir = 4; - id_tag = "bsa_pump" - }, -/obj/machinery/airlock_sensor{ - id_tag = "bsa_sensor"; - pixel_x = -21; - pixel_y = -10 - }, -/obj/machinery/embedded_controller/radio/airlock/airlock_controller{ - dir = 1; - id_tag = "bsa_airlock"; - pixel_y = -21; - tag_airpump = "bsa_pump"; - tag_chamber_sensor = "bsa_sensor"; - tag_exterior_door = "bsa_ex"; - tag_interior_door = "bsa_in" - }, -/obj/machinery/light/small{ - dir = 8 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/command/disperser) -"vg" = ( -/obj/effect/wallframe_spawn/no_grille, -/turf/simulated/floor/plating, -/area/crew_quarters/office) -"vh" = ( -/turf/simulated/wall/prepainted, -/area/crew_quarters/office) -"vi" = ( -/obj/machinery/papershredder, -/obj/machinery/alarm{ - dir = 8; - pixel_x = 25; - pixel_y = 0 - }, -/turf/simulated/floor/lino, -/area/crew_quarters/office) -"vj" = ( -/obj/machinery/atmospherics/unary/vent_pump/tank{ - dir = 8; - external_pressure_bound = 0; - external_pressure_bound_default = 0; - icon_state = "map_vent_in"; - id_tag = "d3po2_out"; - initialize_directions = 1; - internal_pressure_bound = 4000; - internal_pressure_bound_default = 4000; - pressure_checks = 2; - pressure_checks_default = 2; - pump_direction = 0; - use_power = 1 - }, -/turf/simulated/floor/reinforced/oxygen, -/area/thruster/d3port) -"vk" = ( -/obj/structure/cable/green{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/structure/catwalk, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/obj/machinery/light/small{ - dir = 1 - }, -/turf/simulated/floor/plating, -/area/maintenance/thirddeck/port) -"vm" = ( -/obj/machinery/door/airlock/chaplain{ - name = "Chapel" - }, -/obj/machinery/door/firedoor, -/turf/simulated/floor/tiled/techfloor/grid, -/area/chapel/main) -"vn" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/door/firedoor, -/obj/structure/disposalpipe/segment, -/obj/machinery/door/airlock/chaplain{ - name = "Chapel" - }, -/obj/machinery/holosign/chapel{ - id_tag = "chapel" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/chapel/main) -"vo" = ( -/obj/machinery/light/small{ - dir = 1 - }, -/turf/simulated/floor/tiled/dark, -/area/chapel/memorial) -"vr" = ( -/obj/structure/table/marble, -/obj/machinery/door/blast/shutters{ - dir = 4; - id_tag = "bar"; - name = "Bar Shutters" - }, -/obj/item/material/ashtray/glass, -/turf/simulated/floor/lino, -/area/crew_quarters/bar) -"vt" = ( -/turf/simulated/wall/r_wall/hull, -/area/crew_quarters/observation) -"vu" = ( -/obj/structure/bed/chair/wood{ - dir = 4 - }, -/obj/effect/floor_decal/corner/lime/three_quarters, -/obj/item/device/radio/intercom/entertainment{ - dir = 1; - pixel_y = -28 - }, -/obj/machinery/camera/network/third_deck{ - c_tag = "Third Deck Hallway - Observation Bubble"; - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/fuel{ - dir = 5; - icon_state = "intact" - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/thirddeck/aft) -"vy" = ( -/obj/item/beach_ball, -/turf/simulated/floor/grass, -/area/crew_quarters/observation) -"vz" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold4w/visible/fuel, -/turf/simulated/floor/tiled/techfloor, -/area/thruster/d3starboard) -"vD" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/light/spot{ - dir = 4 - }, -/turf/simulated/floor/grass, -/area/crew_quarters/observation) -"vF" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 4 - }, -/obj/effect/floor_decal/corner/paleblue{ - dir = 9; - icon_state = "corner_white" - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/thirddeck/fore) -"vG" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/disposalpipe/segment, -/obj/effect/catwalk_plated, -/turf/simulated/floor/plating, -/area/hallway/primary/thirddeck/fore) -"vI" = ( -/obj/machinery/light/small{ - dir = 4; - icon_state = "bulb1" - }, -/turf/simulated/wall/prepainted, -/area/turret_protected/ai_upload) -"vM" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/thirddeck/foreport) -"vN" = ( -/obj/structure/bed/padded, -/obj/item/bedsheet, -/obj/item/storage/secure/safe{ - pixel_x = -22; - pixel_y = 0 - }, -/obj/item/book/manual/sol_sop, -/turf/simulated/floor/carpet, -/area/crew_quarters/sleep/bunk) -"vO" = ( -/obj/machinery/light/small, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark, -/area/crew_quarters/sleep/bunk) -"vP" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark, -/area/crew_quarters/sleep/bunk) -"vR" = ( -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/structure/closet/emcloset, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/thirddeck/foreport) -"vS" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 4 - }, -/obj/effect/landmark{ - name = "JoinLateCryo" - }, -/turf/simulated/floor/tiled/white, -/area/crew_quarters/sleep/cryo) -"vT" = ( -/obj/machinery/cryopod, -/turf/simulated/floor/tiled/techmaint, -/area/crew_quarters/sleep/cryo) -"vU" = ( -/obj/machinery/cryopod{ - dir = 4 - }, -/turf/simulated/floor/tiled/techmaint, -/area/crew_quarters/sleep/cryo) -"vV" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 8 - }, -/obj/effect/landmark{ - name = "JoinLateCryo" - }, -/turf/simulated/floor/tiled/white, -/area/crew_quarters/sleep/cryo) -"vW" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/tiled/white, -/area/crew_quarters/sleep/cryo) -"vY" = ( -/obj/structure/hygiene/toilet{ - pixel_y = 8 - }, -/obj/machinery/light/small{ - dir = 1 - }, -/obj/item/taperoll/bog{ - pixel_x = -12 - }, -/turf/simulated/floor/tiled/freezer, -/area/crew_quarters/head) -"vZ" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/turf/simulated/floor/tiled, -/area/hydroponics) -"wf" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/thirddeck/port) -"wg" = ( -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/light_switch{ - pixel_x = 22; - pixel_y = -22 - }, -/obj/effect/catwalk_plated/dark, -/turf/simulated/floor/plating, -/area/tcommsat/chamber) -"wj" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/thirddeck/aft) -"wk" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 8 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/thirddeck/aft) -"wl" = ( -/turf/simulated/wall/prepainted, -/area/hallway/primary/thirddeck/aft) -"wm" = ( -/obj/machinery/air_sensor{ - id_tag = "d3ph_sensor" - }, -/turf/simulated/floor/reinforced/hydrogen, -/area/thruster/d3port) -"wn" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/hydroponics) -"wp" = ( -/turf/simulated/floor/lino, -/area/crew_quarters/office) -"wq" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply, -/obj/effect/catwalk_plated, -/turf/simulated/floor/plating, -/area/crew_quarters/cryolocker) -"wr" = ( -/obj/machinery/light_switch{ - pixel_x = -6; - pixel_y = 24 - }, -/obj/machinery/disposal, -/obj/effect/floor_decal/industrial/hatch/yellow, -/obj/structure/disposalpipe/trunk{ - dir = 8 - }, -/obj/machinery/firealarm{ - dir = 4; - pixel_x = 24 - }, -/turf/simulated/floor/lino, -/area/crew_quarters/office) -"wt" = ( -/obj/machinery/light{ - dir = 8; - icon_state = "tube1"; - pixel_y = 0 - }, -/obj/machinery/alarm{ - pixel_y = 24 - }, -/obj/machinery/disposal, -/obj/effect/floor_decal/industrial/hatch/yellow, -/obj/structure/disposalpipe/trunk{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark, -/area/chapel/main) -"wu" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark, -/area/chapel/main) -"ww" = ( -/obj/effect/floor_decal/corner/grey/diagonal{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/table/marble, -/obj/machinery/reagent_temperature/cooler, -/turf/simulated/floor/tiled/white, -/area/crew_quarters/galley) -"wy" = ( -/obj/machinery/computer/upload/ai{ - dir = 1 - }, -/obj/item/device/radio/intercom/locked/ai_private{ - dir = 1; - pixel_y = -28 - }, -/obj/machinery/light/small{ - dir = 4; - icon_state = "bulb1" - }, -/turf/simulated/floor/tiled/dark, -/area/turret_protected/ai_upload) -"wz" = ( -/obj/machinery/computer/modular/preset/civilian, -/turf/simulated/floor/carpet/purple, -/area/chapel/office) -"wA" = ( -/obj/machinery/light{ - dir = 1 - }, -/obj/structure/flora/pottedplant/flower, -/obj/machinery/alarm{ - pixel_y = 24 - }, -/turf/simulated/floor/carpet/purple, -/area/chapel/office) -"wB" = ( -/obj/machinery/firealarm{ - dir = 2; - pixel_y = 24 - }, -/obj/effect/floor_decal/corner/green{ - dir = 5 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/thirddeck/aft) -"wC" = ( -/obj/structure/kitchenspike, -/turf/simulated/floor/tiled/freezer, -/area/crew_quarters/galleybackroom) -"wD" = ( -/turf/simulated/wall/prepainted, -/area/hallway/primary/thirddeck/center) -"wH" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/obj/structure/flora/pottedplant/stoutbush, -/obj/effect/floor_decal/corner/purple/half{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/chapel/memorial) -"wI" = ( -/obj/structure/disposalpipe/segment{ - dir = 1; - icon_state = "pipe-c" - }, -/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 8 - }, -/obj/effect/catwalk_plated, -/turf/simulated/floor/plating, -/area/hallway/primary/thirddeck/fore) -"wJ" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/item/device/radio/intercom{ - pixel_y = 23 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/tiled/monotile, -/area/hallway/primary/thirddeck/fore) -"wK" = ( -/obj/machinery/atmospherics/unary/vent_pump/on, -/obj/structure/flora/pottedplant/stoutbush, -/obj/effect/floor_decal/corner/purple/half{ - dir = 8 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/chapel/memorial) -"wL" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 1; - icon_state = "map-scrubbers" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 1 - }, -/obj/effect/catwalk_plated, -/turf/simulated/floor/plating, -/area/hallway/primary/thirddeck/fore) -"wM" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/catwalk_plated, -/obj/machinery/light{ - dir = 1 - }, -/turf/simulated/floor/plating, -/area/hallway/primary/thirddeck/fore) -"wN" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 1 - }, -/obj/effect/floor_decal/industrial/hatch/yellow, -/obj/machinery/door/firedoor, -/turf/simulated/floor/tiled/monotile, -/area/hallway/primary/thirddeck/fore) -"wO" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/camera/network/third_deck{ - c_tag = "Third Deck Hallway - Teleporter" - }, -/obj/effect/catwalk_plated, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 1; - icon_state = "map-scrubbers" - }, -/turf/simulated/floor/plating, -/area/hallway/primary/thirddeck/fore) -"wP" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/catwalk_plated, -/obj/machinery/atm{ - pixel_y = 32 - }, -/turf/simulated/floor/plating, -/area/hallway/primary/thirddeck/fore) -"wQ" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/catwalk_plated, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/firealarm{ - dir = 2; - pixel_y = 24 - }, -/turf/simulated/floor/plating, -/area/hallway/primary/thirddeck/fore) -"wR" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/floor_decal/industrial/warning/fulltile, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled/steel_grid, -/area/hallway/primary/thirddeck/fore) -"wS" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/glass/civilian{ - name = "Observation" - }, -/turf/simulated/floor/tiled/steel_ridged, -/area/crew_quarters/observation) -"wU" = ( -/obj/structure/sign/warning/vent_port{ - dir = 1 - }, -/turf/simulated/wall/r_wall/hull, -/area/thruster/d3port) -"wV" = ( -/obj/structure/sign/deck/third{ - dir = 1; - pixel_y = -32 - }, -/obj/effect/floor_decal/corner/green{ - dir = 10; - icon_state = "corner_white" - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/thirddeck/center) -"wW" = ( -/turf/simulated/wall/walnut, -/area/crew_quarters/sleep/bunk) -"wY" = ( -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/portable_atmospherics/powered/scrubber, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/thirddeck/foreport) -"xb" = ( -/obj/effect/wallframe_spawn/reinforced, -/obj/machinery/door/blast/shutters{ - density = 0; - dir = 2; - icon_state = "shutter0"; - id_tag = "hab_checkpoint_shutters"; - name = "Hangar Deck Checkpoint Shutters"; - opacity = 0 - }, -/obj/structure/cable/green{ - d2 = 8; - icon_state = "0-8" - }, -/turf/simulated/floor/plating, -/area/security/habcheck) -"xf" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 1 - }, -/obj/effect/floor_decal/corner/green, -/turf/simulated/floor/tiled, -/area/hallway/primary/thirddeck/center) -"xg" = ( -/obj/effect/floor_decal/industrial/outline/grey, -/obj/structure/closet/emcloset, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/thirddeck/port) -"xi" = ( -/obj/effect/wallframe_spawn/reinforced, -/obj/machinery/door/firedoor, -/obj/machinery/door/blast/regular{ - density = 0; - dir = 4; - icon_state = "pdoor0"; - id_tag = "d3aft_shutters"; - name = "Blast Shields"; - opacity = 0 - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/plating, -/area/hallway/primary/thirddeck/aft) -"xk" = ( -/obj/effect/floor_decal/industrial/outline/grey, -/obj/structure/reagent_dispensers/fueltank, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/thirddeck/port) -"xl" = ( -/obj/structure/ladder, -/obj/effect/floor_decal/corner/brown{ - dir = 6 - }, -/obj/structure/sign/deck/third{ - dir = 8; - icon_state = "deck-3"; - pixel_x = 32 - }, -/obj/effect/catwalk_plated, -/turf/simulated/floor/tiled/steel_grid, -/area/hallway/primary/thirddeck/aft) -"xm" = ( -/turf/simulated/floor/plating, -/area/maintenance/thirddeck/port) -"xn" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/vending/hydronutrients/generic, -/turf/simulated/floor/tiled, -/area/hydroponics) -"xo" = ( -/obj/structure/table/standard, -/obj/item/material/bell, -/turf/simulated/floor/lino, -/area/crew_quarters/office) -"xp" = ( -/obj/structure/bed/chair/office/dark{ - dir = 8 - }, -/obj/machinery/light, -/turf/simulated/floor/lino, -/area/crew_quarters/office) -"xr" = ( -/obj/structure/table/rack, -/obj/random/maintenance/solgov, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/thirddeck/forestarboard) -"xs" = ( -/obj/effect/floor_decal/chapel{ - dir = 1; - icon_state = "chapel" - }, -/obj/structure/bed/chair/pew/mahogany, -/turf/simulated/floor/tiled/dark, -/area/chapel/main) -"xt" = ( -/obj/effect/floor_decal/chapel{ - dir = 4; - icon_state = "chapel" - }, -/obj/structure/bed/chair/pew/left/mahogany, -/turf/simulated/floor/tiled/dark, -/area/chapel/main) -"xu" = ( -/obj/structure/table/standard, -/obj/item/hand_labeler, -/obj/item/stack/package_wrap/twenty_five, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 4 - }, -/turf/simulated/floor/lino, -/area/crew_quarters/office) -"xv" = ( -/obj/effect/floor_decal/techfloor{ - dir = 4; - icon_state = "techfloor_edges" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/engineering/hardstorage) -"xx" = ( -/obj/effect/wallframe_spawn/reinforced/polarized/no_grille{ - id = "chapoff_windows" - }, -/turf/simulated/floor/plating, -/area/chapel/office) -"xy" = ( -/turf/simulated/floor/carpet/purple, -/area/chapel/office) -"xz" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/effect/floor_decal/corner/yellow/half{ - dir = 1; - icon_state = "bordercolorhalf" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/tiled/dark, -/area/engineering/hardstorage) -"xE" = ( -/obj/effect/floor_decal/corner/green{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/thirddeck/center) -"xF" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/turf/simulated/floor/tiled/monotile, -/area/crew_quarters/gym) -"xG" = ( -/obj/machinery/light/small{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/dark, -/area/crew_quarters/sleep/bunk) -"xI" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/effect/floor_decal/corner/paleblue{ - dir = 9; - icon_state = "corner_white" - }, -/obj/effect/floor_decal/corner/paleblue/mono, -/obj/structure/extinguisher_cabinet{ - pixel_x = -32 - }, -/turf/simulated/floor/tiled/monotile, -/area/hallway/primary/thirddeck/fore) -"xJ" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/effect/floor_decal/corner/paleblue{ - dir = 10 - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/thirddeck/fore) -"xM" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/floor_decal/corner/paleblue{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable/green{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/thirddeck/fore) -"xN" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/floor_decal/corner/paleblue{ - dir = 8 - }, -/obj/machinery/alarm{ - dir = 1; - icon_state = "alarm0"; - pixel_y = -22 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/thirddeck/fore) -"xO" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/disposalpipe/segment{ - dir = 1; - icon_state = "pipe-c" - }, -/turf/simulated/floor/lino, -/area/crew_quarters/office) -"xP" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/floor_decal/corner/paleblue{ - dir = 10 - }, -/obj/effect/floor_decal/industrial/warning, -/turf/simulated/floor/tiled, -/area/hallway/primary/thirddeck/fore) -"xQ" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/floor_decal/corner/paleblue{ - dir = 10 - }, -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 8 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/thirddeck/fore) -"xR" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/floor_decal/industrial/warning/fulltile, -/turf/simulated/floor/tiled/steel_grid, -/area/hallway/primary/thirddeck/fore) -"xS" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/tiled, -/area/hallway/primary/thirddeck/aft) -"xT" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/firealarm{ - dir = 1; - pixel_x = 0; - pixel_y = -24 - }, -/obj/effect/floor_decal/corner/green{ - dir = 10; - icon_state = "corner_white" - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/thirddeck/fore) -"xU" = ( -/obj/effect/wallframe_spawn/reinforced, -/obj/machinery/door/blast/shutters{ - density = 0; - dir = 4; - icon_state = "shutter0"; - id_tag = "hab_checkpoint_shutters"; - name = "Hangar Deck Checkpoint Shutters"; - opacity = 0 - }, -/obj/structure/cable/green{ - d2 = 4; - icon_state = "0-4" - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/turf/simulated/floor/plating, -/area/security/habcheck) -"xV" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/crew_quarters/safe_room/thirddeck) -"xW" = ( -/obj/machinery/door/window/brigdoor{ - color = "PURPLE"; - dir = 8; - icon_state = "leftsecure" - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/engineering/hardstorage) -"xX" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 1 - }, -/obj/structure/closet/emcloset, -/obj/machinery/alarm{ - dir = 1; - pixel_y = -25 - }, -/obj/effect/floor_decal/corner/red/mono, -/turf/simulated/floor/tiled, -/area/hallway/primary/thirddeck/fore) -"xY" = ( -/obj/structure/bed/padded, -/obj/item/bedsheet, -/obj/item/storage/secure/safe{ - pixel_x = -22; - pixel_y = 0 - }, -/turf/simulated/floor/carpet, -/area/crew_quarters/sleep/bunk) -"xZ" = ( -/obj/machinery/light/spot{ - dir = 8 - }, -/obj/machinery/vending/snack{ - dir = 4; - icon_state = "snack" - }, -/obj/structure/closet/hydrant{ - pixel_y = 32 - }, -/turf/simulated/floor/tiled/white/monotile, -/area/crew_quarters/sleep/cryo) -"ya" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/civilian{ - name = "Emergency Storage" - }, -/turf/simulated/floor/tiled/steel_ridged, -/area/maintenance/thirddeck/foreport) -"yb" = ( -/obj/structure/table/standard, -/obj/structure/cable/green{ - d2 = 4; - icon_state = "0-4" - }, -/obj/machinery/power/apc/super/critical{ - dir = 8; - name = "west bump"; - pixel_x = -24 - }, -/obj/item/book/manual/solgov_law, -/turf/simulated/floor/tiled/white/monotile, -/area/crew_quarters/sleep/cryo) -"yc" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/white, -/area/crew_quarters/sleep/cryo) -"yd" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/tiled/white, -/area/crew_quarters/sleep/cryo) -"ye" = ( -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/crew_quarters/sleep/cryo) -"yf" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/crew_quarters/sleep/cryo) -"yg" = ( -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/crew_quarters/sleep/cryo) -"yh" = ( -/obj/machinery/computer/upload/robot, -/obj/item/device/radio/intercom/locked/ai_private{ - pixel_y = 22 - }, -/obj/machinery/light/small{ - dir = 4; - icon_state = "bulb1" - }, -/turf/simulated/floor/tiled/dark, -/area/turret_protected/ai_upload) -"yk" = ( -/obj/machinery/camera/network/third_deck{ - c_tag = "Cryogenic Storage - Aft Starboard"; - dir = 8 - }, -/obj/structure/table/standard, -/obj/item/storage/box/cups{ - pixel_x = 2; - pixel_y = 2 - }, -/obj/item/storage/box/cups, -/turf/simulated/floor/tiled/white/monotile, -/area/crew_quarters/sleep/cryo) -"yp" = ( -/obj/structure/ladder, -/obj/effect/floor_decal/corner/brown{ - dir = 6 - }, -/obj/item/device/radio/intercom{ - dir = 8; - pixel_x = 21 - }, -/obj/effect/catwalk_plated, -/turf/simulated/floor/tiled/steel_grid, -/area/hallway/primary/thirddeck/aft) -"yq" = ( -/obj/machinery/computer/modular/preset/civilian{ - dir = 4; - icon_state = "console" - }, -/turf/simulated/floor/lino, -/area/crew_quarters/office) -"yr" = ( -/obj/machinery/firealarm{ - dir = 4; - pixel_x = 24 - }, -/obj/machinery/light/small{ - dir = 1 - }, -/turf/simulated/floor/tiled/dark, -/area/chapel/memorial) -"yt" = ( -/obj/machinery/light, -/turf/simulated/floor/lino, -/area/crew_quarters/office) -"yu" = ( -/obj/structure/hygiene/drain/bath, -/turf/simulated/floor/pool, -/area/crew_quarters/observation) -"yv" = ( -/obj/effect/floor_decal/chapel{ - dir = 8; - icon_state = "chapel" - }, -/obj/structure/bed/chair/pew/mahogany, -/turf/simulated/floor/tiled/dark, -/area/chapel/main) -"yw" = ( -/obj/effect/floor_decal/chapel, -/obj/structure/bed/chair/pew/left/mahogany, -/turf/simulated/floor/tiled/dark, -/area/chapel/main) -"yy" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/disposalpipe/segment, -/obj/machinery/light{ - dir = 4 - }, -/turf/simulated/floor/tiled/monotile, -/area/hallway/primary/thirddeck/fore) -"yz" = ( -/obj/effect/floor_decal/spline/fancy/black{ - dir = 5; - icon_state = "spline_fancy" - }, -/turf/simulated/floor/wood/maple, -/area/chapel/main) -"yB" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/turf/simulated/floor/carpet/purple, -/area/chapel/office) -"yC" = ( -/obj/structure/table/woodentable/maple, -/obj/item/paper_bin, -/obj/item/pen, -/turf/simulated/floor/carpet/purple, -/area/chapel/office) -"yD" = ( -/obj/machinery/suit_storage_unit/engineering/alt/sol, -/obj/machinery/camera/network/engineering{ - c_tag = "Engineering - EVA"; - dir = 8 - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled/techfloor/grid, -/area/engineering/hardstorage) -"yG" = ( -/obj/effect/floor_decal/corner/green/half, -/obj/structure/table/standard, -/obj/item/storage/box/glasses/pint, -/obj/item/reagent_containers/food/drinks/glass2/carafe, -/turf/simulated/floor/tiled/dark/monotile, -/area/crew_quarters/observation) -"yH" = ( -/turf/simulated/wall/prepainted, -/area/crew_quarters/observation) -"yI" = ( -/obj/effect/floor_decal/corner/green/half, -/obj/structure/table/standard, -/obj/item/storage/box/cups, -/turf/simulated/floor/tiled/dark/monotile, -/area/crew_quarters/observation) -"yL" = ( -/obj/machinery/power/apc{ - dir = 2; - name = "south bump"; - pixel_y = -24 - }, -/obj/structure/cable/green, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/substation/thirddeck) -"yM" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/disposalpipe/segment, -/obj/effect/catwalk_plated, -/obj/machinery/alarm{ - dir = 8; - icon_state = "alarm0"; - pixel_x = 24 - }, -/turf/simulated/floor/plating, -/area/hallway/primary/thirddeck/fore) -"yN" = ( -/turf/simulated/wall/r_wall/prepainted, -/area/teleporter/thirddeck) -"yO" = ( -/obj/machinery/door/blast/shutters{ - dir = 2; - id_tag = "teleport3"; - name = "Third Deck Teleporter Access Shutters" - }, -/obj/effect/floor_decal/industrial/hatch/yellow, -/turf/simulated/floor/tiled/techfloor/grid, -/area/teleporter/thirddeck) -"yP" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/command{ - name = "Third Deck Teleporter" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/steel_ridged, -/area/teleporter/thirddeck) -"yQ" = ( -/obj/machinery/portable_atmospherics/powered/scrubber, -/turf/simulated/floor/plating, -/area/maintenance/thirddeck/starboard) -"yR" = ( -/obj/structure/curtain/open/bed, -/turf/simulated/floor/carpet, -/area/crew_quarters/sleep/bunk) -"yS" = ( -/obj/item/storage/secure/safe{ - pixel_x = -22; - pixel_y = 0 - }, -/obj/machinery/alarm{ - pixel_y = 24 - }, -/obj/machinery/atmospherics/unary/vent_pump/on, -/turf/simulated/floor/carpet, -/area/crew_quarters/sleep/bunk) -"yT" = ( -/obj/structure/bed/padded, -/obj/item/bedsheet, -/obj/random/plushie, -/turf/simulated/floor/carpet, -/area/crew_quarters/sleep/bunk) -"yU" = ( -/obj/structure/table/standard, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 4 - }, -/obj/machinery/firealarm{ - dir = 8; - pixel_x = -24 - }, -/obj/random/coin, -/turf/simulated/floor/tiled/white/monotile, -/area/crew_quarters/sleep/cryo) -"yV" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/crew_quarters/sleep/cryo) -"yW" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers, -/obj/structure/disposalpipe/segment, -/obj/machinery/tele_beacon, -/obj/effect/landmark{ - name = "Observer-Start" - }, -/turf/simulated/floor/tiled/white, -/area/crew_quarters/sleep/cryo) -"yX" = ( -/obj/effect/floor_decal/industrial/warning/corner, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/crew_quarters/sleep/cryo) -"yY" = ( -/obj/effect/floor_decal/industrial/warning, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/crew_quarters/sleep/cryo) -"yZ" = ( -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 8 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/crew_quarters/sleep/cryo) -"za" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/crew_quarters/sleep/cryo) -"ze" = ( -/obj/structure/railing/mapped{ - dir = 8; - icon_state = "railing0-1" - }, -/turf/simulated/open, -/area/maintenance/thirddeck/starboard) -"zg" = ( -/obj/random_multi/single_item/runtime, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/portable_atmospherics/hydroponics, -/obj/effect/floor_decal/corner/green/mono, -/obj/effect/floor_decal/industrial/hatch/yellow, -/turf/simulated/floor/tiled/monotile, -/area/hydroponics) -"zh" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden{ - dir = 4; - icon_state = "map" - }, -/turf/simulated/floor/plating, -/area/command/disperser) -"zl" = ( -/obj/random_multi/single_item/skelestand/maint, -/turf/simulated/floor/plating, -/area/maintenance/thirddeck/foreport) -"zn" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/wall/r_wall/hull, -/area/crew_quarters/cryolocker) -"zo" = ( -/obj/effect/floor_decal/corner/green{ - dir = 8; - icon_state = "corner_white" - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/thirddeck/center) -"zq" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/disposalpipe/segment, -/obj/effect/catwalk_plated, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/plating, -/area/hallway/primary/thirddeck/aft) -"zr" = ( -/obj/machinery/light{ - dir = 8; - icon_state = "tube1"; - pixel_y = 0 - }, -/obj/structure/bed/chair/pew/mahogany, -/turf/simulated/floor/tiled/dark, -/area/chapel/main) -"zs" = ( -/obj/structure/bed/chair/pew/left/mahogany, -/turf/simulated/floor/tiled/dark, -/area/chapel/main) -"zt" = ( -/obj/structure/catwalk, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/maintenance/thirddeck/aftport) -"zu" = ( -/obj/structure/bed/chair/pew/mahogany, -/turf/simulated/floor/tiled/dark, -/area/chapel/main) -"zx" = ( -/obj/machinery/power/apc{ - dir = 2; - name = "south bump"; - operating = 1; - pixel_y = -28 - }, -/obj/machinery/atmospherics/pipe/simple/visible{ - dir = 4; - icon_state = "intact" - }, -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 8 - }, -/obj/structure/cable/green, -/turf/simulated/floor/tiled/techfloor, -/area/thruster/d3starboard) -"zy" = ( -/turf/simulated/wall/r_wall/prepainted, -/area/thruster/d3port) -"zz" = ( -/obj/effect/floor_decal/corner/green/half, -/obj/structure/reagent_dispensers/water_cooler{ - dir = 1; - icon_state = "water_cooler" - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/crew_quarters/observation) -"zB" = ( -/obj/effect/floor_decal/corner/green/half, -/obj/structure/flora/pottedplant/stoutbush, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 1; - level = 2 - }, -/obj/structure/cable/green, -/obj/machinery/power/apc{ - dir = 4; - name = "east bump"; - pixel_x = 24 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/crew_quarters/observation) -"zC" = ( -/obj/machinery/computer/modular/preset/engineering{ - dir = 1 - }, -/obj/machinery/camera/network/command{ - c_tag = "AI Upload - Foyer"; - dir = 1 - }, -/turf/simulated/floor/tiled/dark, -/area/turret_protected/ai_upload_foyer) -"zD" = ( -/obj/machinery/camera/network/third_deck{ - c_tag = "Third Deck - Recreation"; - dir = 4 - }, -/obj/structure/bed/chair/comfy/brown{ - dir = 1 - }, -/obj/machinery/light{ - dir = 8 - }, -/turf/simulated/floor/wood/walnut, -/area/crew_quarters/recreation) -"zE" = ( -/obj/structure/reagent_dispensers/fueltank, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 4 - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/item/device/radio/intercom{ - pixel_y = 23 - }, -/turf/simulated/floor/tiled/monotile, -/area/storage/tools) -"zF" = ( -/obj/structure/railing/mapped{ - dir = 1; - icon_state = "railing0-1" - }, -/obj/machinery/atmospherics/binary/pump{ - dir = 8 - }, -/turf/simulated/floor/plating, -/area/command/disperser) -"zG" = ( -/turf/simulated/wall/r_wall/hull, -/area/crew_quarters/cryolocker) -"zH" = ( -/obj/machinery/computer/teleporter{ - dir = 2; - icon_state = "computer" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/teleporter/thirddeck) -"zI" = ( -/obj/machinery/tele_projector, -/obj/machinery/button/blast_door{ - id_tag = "teleport3"; - name = "Third Deck Teleporter Access Shutter Control"; - pixel_x = -6; - pixel_y = 24 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/teleporter/thirddeck) -"zJ" = ( -/obj/machinery/tele_pad, -/obj/effect/floor_decal/industrial/hatch/yellow, -/turf/simulated/floor/tiled/techfloor/grid, -/area/teleporter/thirddeck) -"zL" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/dark, -/area/teleporter/thirddeck) -"zR" = ( -/obj/effect/floor_decal/industrial/hatch/yellow, -/obj/structure/ladder/updown, -/obj/structure/catwalk, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/thirddeck/foreport) -"zS" = ( -/turf/simulated/wall/prepainted, -/area/maintenance/thirddeck/foreport) -"zU" = ( -/obj/item/storage/secure/safe{ - pixel_x = -22; - pixel_y = 0 - }, -/obj/machinery/button/alternate/door/bolts{ - id_tag = "dorm1"; - name = "Private Room Bolt Control"; - pixel_x = 25; - pixel_y = -25 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/turf/simulated/floor/carpet, -/area/crew_quarters/sleep/bunk) -"zV" = ( -/obj/structure/closet/secure_closet/personal, -/obj/machinery/light/spot{ - dir = 4 - }, -/obj/item/device/radio/intercom{ - dir = 8; - pixel_x = 21 - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled/white/monotile, -/area/crew_quarters/sleep/cryo) -"zW" = ( -/obj/structure/sign/warning/hot_exhaust, -/turf/simulated/wall/ocp_wall, -/area/thruster/d3port) -"zY" = ( -/obj/machinery/door/firedoor, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/disposalpipe/segment, -/obj/machinery/door/airlock/glass/civilian{ - name = "Auxiliary Tool Storage" - }, -/obj/effect/floor_decal/techfloor/corner, -/turf/simulated/floor/tiled/steel_ridged, -/area/storage/tools) -"zZ" = ( -/obj/machinery/door/firedoor, -/turf/simulated/floor/tiled/techfloor/grid, -/area/maintenance/thirddeck/port) -"Ac" = ( -/obj/machinery/atmospherics/pipe/simple/visible/fuel, -/turf/simulated/wall/ocp_wall, -/area/thruster/d3starboard) -"Ae" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/engineering/hardstorage) -"Ag" = ( -/turf/simulated/floor/tiled/dark, -/area/chapel/main) -"Aj" = ( -/obj/machinery/atmospherics/pipe/simple/visible/fuel{ - dir = 9 - }, -/obj/machinery/meter, -/turf/simulated/floor/tiled/techfloor/grid, -/area/thruster/d3starboard) -"Al" = ( -/turf/simulated/floor/tiled/techfloor/grid, -/area/thruster/d3starboard) -"Ap" = ( -/obj/effect/floor_decal/spline/plain/red, -/obj/structure/window/reinforced, -/obj/machinery/light{ - dir = 8 - }, -/turf/simulated/floor/wood, -/area/crew_quarters/gym) -"Aq" = ( -/obj/machinery/firealarm{ - dir = 4; - pixel_x = 24 - }, -/obj/effect/floor_decal/corner/blue/diagonal{ - dir = 4 - }, -/obj/structure/bed/chair{ - dir = 1 - }, -/turf/simulated/floor/tiled/white, -/area/crew_quarters/mess) -"Ar" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 8 - }, -/turf/simulated/floor/tiled/dark, -/area/engineering/hardstorage) -"As" = ( -/obj/structure/table/marble, -/obj/machinery/door/blast/shutters{ - dir = 2; - id_tag = "kitchen"; - name = "Kitchen Shutters" - }, -/obj/effect/floor_decal/corner/grey/diagonal{ - dir = 4 - }, -/obj/item/material/bell, -/turf/simulated/floor/tiled/white, -/area/crew_quarters/galley) -"At" = ( -/obj/effect/floor_decal/techfloor{ - dir = 1; - icon_state = "techfloor_edges" - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 1; - icon_state = "warning" - }, -/turf/simulated/floor/tiled/dark, -/area/teleporter/thirddeck) -"Au" = ( -/obj/machinery/tele_beacon, -/obj/effect/floor_decal/techfloor{ - dir = 1; - icon_state = "techfloor_edges" - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 1; - icon_state = "warning" - }, -/obj/machinery/light{ - dir = 4; - icon_state = "tube1" - }, -/turf/simulated/floor/tiled/dark, -/area/teleporter/thirddeck) -"AA" = ( -/obj/effect/floor_decal/corner/blue/diagonal{ - dir = 4 - }, -/obj/structure/bed/chair{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/crew_quarters/mess) -"AB" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/thirddeck/foreport) -"AC" = ( -/obj/machinery/light/spot{ - dir = 1 - }, -/obj/effect/floor_decal/corner/blue/diagonal{ - dir = 4 - }, -/obj/machinery/vending/cigarette, -/turf/simulated/floor/tiled/white, -/area/crew_quarters/mess) -"AD" = ( -/obj/machinery/door/airlock/civilian{ - id_tag = "dorm1"; - name = "Private Room 1" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/carpet, -/area/crew_quarters/sleep/bunk) -"AE" = ( -/obj/structure/closet/secure_closet/personal, -/obj/structure/extinguisher_cabinet{ - pixel_x = 32 - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled/white/monotile, -/area/crew_quarters/sleep/cryo) -"AG" = ( -/obj/structure/hygiene/shower{ - dir = 8; - icon_state = "shower"; - pixel_x = 0; - pixel_y = 0 - }, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 8 - }, -/turf/simulated/floor/tiled/freezer, -/area/crew_quarters/head) -"AI" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/storage/tools) -"AJ" = ( -/obj/machinery/atmospherics/pipe/manifold/visible/fuel{ - dir = 4 - }, -/obj/machinery/air_sensor{ - id_tag = "cChamber3s" - }, -/turf/simulated/floor/reinforced/airless, -/area/thruster/d3starboard) -"AK" = ( -/obj/structure/table/rack{ - dir = 8 - }, -/obj/random/tech_supply, -/obj/random/tech_supply, -/obj/random/tech_supply, -/obj/random/tech_supply, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/firealarm{ - dir = 2; - pixel_y = 24 - }, -/turf/simulated/floor/tiled/monotile, -/area/storage/tools) -"AL" = ( -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/vending/assist, -/turf/simulated/floor/tiled/monotile, -/area/storage/tools) -"AM" = ( -/obj/structure/closet/toolcloset, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/camera/network/third_deck{ - c_tag = "Third Deck - Auxillary Storage" - }, -/obj/machinery/alarm{ - pixel_y = 24 - }, -/turf/simulated/floor/tiled/monotile, -/area/storage/tools) -"AN" = ( -/turf/simulated/wall/prepainted, -/area/storage/tools) -"AP" = ( -/turf/simulated/floor/tiled/dark, -/area/chapel/memorial) -"AQ" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/floor_decal/corner/purple{ - dir = 5 - }, -/turf/simulated/floor/tiled/dark, -/area/chapel/memorial) -"AR" = ( -/obj/effect/catwalk_plated, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 1; - icon_state = "map-scrubbers" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/plating, -/area/hallway/primary/thirddeck/aft) -"AS" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/dark, -/area/chapel/memorial) -"AV" = ( -/obj/effect/floor_decal/spline/fancy/black{ - dir = 9; - icon_state = "spline_fancy" - }, -/turf/simulated/floor/wood/maple, -/area/chapel/main) -"AW" = ( -/obj/effect/floor_decal/spline/fancy/black{ - dir = 1; - icon_state = "spline_fancy" - }, -/turf/simulated/floor/wood/maple, -/area/chapel/main) -"AX" = ( -/obj/item/device/radio/intercom{ - dir = 4; - pixel_x = -21 - }, -/obj/structure/closet/secure_closet/freezer/kitchen{ - req_access = newlist() - }, -/obj/item/reagent_containers/food/snacks/mint, -/turf/simulated/floor/tiled/freezer, -/area/crew_quarters/galleybackroom) -"Ba" = ( -/turf/simulated/floor/plating, -/area/maintenance/thirddeck/aftport) -"Bb" = ( -/obj/effect/floor_decal/industrial/warning, -/obj/machinery/atmospherics/tvalve/mirrored/digital{ - dir = 4; - id_tag = "fuelmode" - }, -/obj/effect/floor_decal/industrial/outline/red, -/turf/simulated/floor/tiled/techfloor, -/area/thruster/d3port) -"Bc" = ( -/turf/simulated/wall/prepainted, -/area/maintenance/thirddeck/aftport) -"Bd" = ( -/obj/machinery/door/firedoor, -/turf/simulated/floor/tiled/techfloor/grid, -/area/maintenance/thirddeck/aftport) -"Be" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden, -/obj/random/trash, -/obj/machinery/firealarm{ - dir = 1; - pixel_x = 0; - pixel_y = -24 - }, -/turf/simulated/floor/plating, -/area/command/disperser) -"Bg" = ( -/obj/effect/floor_decal/corner/green{ - dir = 5 - }, -/obj/machinery/atmospherics/unary/vent_pump/on, -/obj/machinery/light{ - dir = 1 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/thirddeck/aft) -"Bh" = ( -/obj/item/device/radio/intercom{ - dir = 8; - pixel_x = 21 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/dark, -/area/crew_quarters/sleep/bunk) -"Bi" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 8 - }, -/turf/simulated/floor/tiled/dark, -/area/teleporter/thirddeck) -"Bj" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark, -/area/teleporter/thirddeck) -"Bk" = ( -/obj/machinery/hologram/holopad, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/item/device/radio/intercom{ - dir = 8; - pixel_x = 22; - pixel_y = 4 - }, -/turf/simulated/floor/tiled/dark, -/area/teleporter/thirddeck) -"Bl" = ( -/obj/machinery/atmospherics/unary/outlet_injector{ - dir = 1; - frequency = 1441; - icon_state = "map_injector"; - id = "d3sh_in"; - injecting = 0; - use_power = 1 - }, -/turf/simulated/floor/reinforced/hydrogen, -/area/thruster/d3starboard) -"Bm" = ( -/turf/simulated/wall/r_wall/prepainted, -/area/crew_quarters/safe_room/thirddeck) -"Bn" = ( -/obj/structure/sign/warning/secure_area, -/turf/simulated/wall/r_wall/prepainted, -/area/crew_quarters/safe_room/thirddeck) -"Bp" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/thirddeck/foreport) -"Bq" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/thirddeck/foreport) -"Br" = ( -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/random/torchcloset, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/thirddeck/foreport) -"Bs" = ( -/obj/effect/floor_decal/industrial/outline/grey, -/obj/structure/closet/wardrobe/xenos, -/turf/simulated/floor/tiled/dark/monotile, -/area/crew_quarters/sleep/bunk) -"Bt" = ( -/obj/machinery/vending/clothboutique, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/floor/tiled/dark/monotile, -/area/crew_quarters/sleep/bunk) -"Bu" = ( -/obj/machinery/camera/network/third_deck{ - c_tag = "Third Deck - Bunk Room" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 - }, -/turf/simulated/floor/tiled/dark, -/area/crew_quarters/sleep/bunk) -"Bv" = ( -/obj/machinery/alarm{ - dir = 1; - pixel_y = -22 - }, -/obj/structure/undies_wardrobe, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 1 - }, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/floor/tiled/dark/monotile, -/area/crew_quarters/sleep/bunk) -"Bw" = ( -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/uniform_vendor{ - dir = 8 - }, -/turf/simulated/floor/tiled/white/monotile, -/area/crew_quarters/sleep/cryo) -"By" = ( -/obj/structure/hygiene/shower{ - dir = 8; - icon_state = "shower"; - pixel_x = 0; - pixel_y = 0 - }, -/obj/item/soap, -/turf/simulated/floor/tiled/freezer, -/area/crew_quarters/head) -"Bz" = ( -/obj/structure/reagent_dispensers/watertank, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled/monotile, -/area/storage/tools) -"BA" = ( -/obj/structure/disposalpipe/segment{ - dir = 4; - icon_state = "pipe-c" - }, -/turf/simulated/floor/tiled, -/area/storage/tools) -"BD" = ( -/obj/structure/flora/pottedplant/orientaltree, -/turf/simulated/floor/wood/walnut, -/area/crew_quarters/recreation) -"BF" = ( -/obj/effect/floor_decal/spline/fancy/black, -/obj/item/device/radio/intercom/entertainment{ - dir = 1; - pixel_y = -28 - }, -/turf/simulated/floor/wood/maple, -/area/chapel/main) -"BH" = ( -/obj/machinery/firealarm{ - pixel_y = 21 - }, -/obj/structure/hygiene/shower{ - dir = 4; - icon_state = "shower"; - pixel_x = 0; - pixel_y = 0 - }, -/turf/simulated/floor/tiled/freezer, -/area/crew_quarters/head) -"BK" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/storage/tools) -"BL" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/turf/simulated/floor/tiled, -/area/storage/tools) -"BN" = ( -/obj/structure/table/woodentable_reinforced/mahogany, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/wood/maple, -/area/chapel/main) -"BO" = ( -/obj/effect/floor_decal/spline/fancy/black{ - dir = 8; - icon_state = "spline_fancy" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/wood/maple, -/area/chapel/main) -"BP" = ( -/obj/structure/table/woodentable_reinforced/mahogany, -/turf/simulated/floor/wood/maple, -/area/chapel/main) -"BQ" = ( -/obj/structure/bed/chair/wood/walnut, -/turf/simulated/floor/tiled/dark/monotile, -/area/crew_quarters/observation) -"BR" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 8 - }, -/turf/simulated/floor/tiled/dark, -/area/chapel/office) -"BS" = ( -/obj/structure/railing/mapped{ - dir = 8; - icon_state = "railing0-1" - }, -/obj/structure/railing/mapped{ - dir = 1; - icon_state = "railing0-1" - }, -/turf/simulated/floor/plating, -/area/maintenance/thirddeck/port) -"BU" = ( -/obj/machinery/alarm{ - dir = 4; - pixel_x = -21; - pixel_y = 0 - }, -/obj/structure/bed/chair/wood/maple, -/turf/simulated/floor/carpet/purple, -/area/chapel/office) -"BV" = ( -/turf/simulated/wall/r_wall/hull, -/area/maintenance/thirddeck/foreport) -"BW" = ( -/obj/random/torchcloset, -/obj/random/maintenance/solgov, -/turf/simulated/floor/plating, -/area/maintenance/thirddeck/foreport) -"BX" = ( -/turf/simulated/floor/plating, -/area/maintenance/thirddeck/foreport) -"BY" = ( -/obj/machinery/button/blast_door{ - id_tag = "d3starboardnacelle"; - name = "combustion chamber blast door control"; - pixel_x = 0; - pixel_y = -24 - }, -/obj/effect/floor_decal/industrial/warning, -/obj/machinery/atmospherics/pipe/simple/visible/fuel{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor, -/area/thruster/d3starboard) -"BZ" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/visible/fuel, -/turf/simulated/floor/tiled/techfloor, -/area/thruster/d3port) -"Cb" = ( -/obj/machinery/newscaster{ - pixel_y = 32 - }, -/obj/effect/catwalk_plated, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/hallway/primary/thirddeck/fore) -"Cc" = ( -/obj/structure/table/standard, -/turf/simulated/floor/tiled/dark, -/area/teleporter/thirddeck) -"Ce" = ( -/obj/machinery/camera/network/third_deck{ - c_tag = "Third Deck - Teleporter"; - dir = 1 - }, -/obj/structure/table/standard, -/turf/simulated/floor/tiled/dark, -/area/teleporter/thirddeck) -"Cf" = ( -/obj/structure/table/rack, -/obj/random/tech_supply, -/turf/simulated/floor/tiled/dark, -/area/teleporter/thirddeck) -"Cg" = ( -/obj/structure/closet/crate, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 1 - }, -/obj/random/tank, -/turf/simulated/floor/tiled/dark, -/area/teleporter/thirddeck) -"Cj" = ( -/obj/machinery/light/spot{ - dir = 4 - }, -/obj/structure/reagent_dispensers/water_cooler{ - dir = 8 - }, -/turf/simulated/floor/tiled/white/monotile, -/area/crew_quarters/sleep/cryo) -"Ck" = ( -/obj/effect/floor_decal/industrial/outline/grey, -/obj/structure/reagent_dispensers/watertank, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/thirddeck/port) -"Cn" = ( -/turf/simulated/floor/tiled/dark, -/area/crew_quarters/sleep/bunk) -"Co" = ( -/obj/machinery/light/small, -/turf/simulated/floor/tiled/dark, -/area/crew_quarters/sleep/bunk) -"Cp" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/dark, -/area/crew_quarters/sleep/bunk) -"Cq" = ( -/obj/machinery/power/apc{ - dir = 1; - name = "north bump"; - pixel_x = 0; - pixel_y = 24 - }, -/obj/structure/cable/green{ - d2 = 4; - icon_state = "0-4" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark, -/area/crew_quarters/sleep/bunk) -"Cr" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/button/alternate/door/bolts{ - desc = "Security access door button for emergency situations."; - id_tag = "dorm1"; - name = "Room EM Bolt Control"; - pixel_x = 25; - pixel_y = 25; - req_access = list("ACCESS_SECURITY") - }, -/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply, -/turf/simulated/floor/tiled/dark, -/area/crew_quarters/sleep/bunk) -"Cs" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/light/small{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 1 - }, -/turf/simulated/floor/tiled/dark, -/area/crew_quarters/sleep/bunk) -"Ct" = ( -/obj/structure/closet/secure_closet/personal, -/obj/item/device/radio/intercom/entertainment{ - dir = 8; - pixel_x = 22 - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled/white/monotile, -/area/crew_quarters/sleep/cryo) -"Cv" = ( -/obj/structure/table/steel, -/obj/random/tech_supply, -/obj/random/tech_supply, -/obj/random/tech_supply, -/obj/random/tech_supply, -/obj/machinery/power/apc{ - dir = 2; - name = "south bump"; - pixel_y = -24 - }, -/obj/structure/cable/green, -/turf/simulated/floor/tiled/monotile, -/area/storage/tools) -"Cw" = ( -/obj/structure/table/steel, -/obj/random/tech_supply, -/obj/random/tech_supply, -/obj/random/tech_supply, -/obj/random/tech_supply, -/obj/machinery/light, -/obj/machinery/recharger/wallcharger{ - dir = 1; - icon_state = "wrecharger0"; - pixel_y = -22 - }, -/turf/simulated/floor/tiled/monotile, -/area/storage/tools) -"Cx" = ( -/obj/structure/table/steel, -/obj/random/tech_supply, -/obj/random/tech_supply, -/obj/random/tech_supply, -/obj/random/tech_supply, -/obj/machinery/recharger/wallcharger{ - dir = 1; - icon_state = "wrecharger0"; - pixel_y = -22 - }, -/turf/simulated/floor/tiled/monotile, -/area/storage/tools) -"Cy" = ( -/obj/structure/table/steel, -/obj/machinery/cell_charger, -/obj/random/powercell, -/obj/random/powercell, -/obj/random/powercell, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 1 - }, -/obj/machinery/firealarm{ - dir = 4; - pixel_x = 24 - }, -/turf/simulated/floor/tiled/monotile, -/area/storage/tools) -"CE" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/thirddeck/port) -"CF" = ( -/turf/simulated/wall/prepainted, -/area/crew_quarters/recreation) -"CH" = ( -/turf/simulated/floor/tiled/monotile, -/area/maintenance/thirddeck/starboard) -"CI" = ( -/obj/effect/floor_decal/spline/fancy/black{ - dir = 10; - icon_state = "spline_fancy" - }, -/obj/structure/banner{ - pixel_y = -32 - }, -/turf/simulated/floor/wood/maple, -/area/chapel/main) -"CJ" = ( -/obj/machinery/light, -/obj/effect/floor_decal/spline/fancy/black, -/turf/simulated/floor/wood/maple, -/area/chapel/main) -"CL" = ( -/obj/machinery/camera/network/third_deck{ - c_tag = "Chapel"; - dir = 4 - }, -/obj/machinery/firealarm{ - dir = 8; - pixel_x = -24; - pixel_y = 0 - }, -/turf/simulated/floor/tiled/dark, -/area/chapel/main) -"CM" = ( -/obj/structure/table/rack, -/obj/random/maintenance/solgov, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/thirddeck/foreport) -"CN" = ( -/obj/item/device/radio/intercom/locked/confessional{ - dir = 8; - pixel_x = 22 - }, -/obj/item/paper_bin, -/obj/item/pen, -/obj/machinery/light{ - dir = 8; - icon_state = "tube1"; - pixel_y = 0 - }, -/obj/structure/table/woodentable/maple, -/turf/simulated/floor/carpet/purple, -/area/chapel/office) -"CO" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/blast/shutters{ - dir = 4; - id_tag = "kitchen"; - name = "Kitchen Shutters" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/effect/wallframe_spawn/no_grille, -/turf/simulated/floor/plating, -/area/crew_quarters/galley) -"CQ" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 8 - }, -/turf/simulated/floor/lino, -/area/crew_quarters/office) -"CS" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/reinforced/airless, -/area/space) -"CT" = ( -/obj/random/trash, -/obj/structure/catwalk, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8"; - pixel_x = 0 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/turf/simulated/floor/plating, -/area/maintenance/thirddeck/aftstarboard) -"CU" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/thirddeck/aftport) -"CX" = ( -/obj/structure/curtain/open/bed, -/obj/effect/floor_decal/techfloor{ - dir = 8; - icon_state = "techfloor_edges" - }, -/turf/simulated/floor/tiled/techfloor, -/area/crew_quarters/safe_room/thirddeck) -"CY" = ( -/obj/structure/bed/padded, -/obj/item/bedsheet/green, -/turf/simulated/floor/tiled/techfloor, -/area/crew_quarters/safe_room/thirddeck) -"CZ" = ( -/obj/machinery/camera/network/third_deck{ - c_tag = "Cryogenic Storage - Fore Starboard"; - dir = 4 - }, -/obj/machinery/vending/cola{ - dir = 4; - icon_state = "Cola_Machine" - }, -/turf/simulated/floor/tiled/white/monotile, -/area/crew_quarters/sleep/cryo) -"Da" = ( -/obj/structure/table/standard, -/obj/machinery/alarm{ - dir = 4; - icon_state = "alarm0"; - pixel_x = -22; - pixel_y = 0 - }, -/obj/machinery/light/spot{ - dir = 8 - }, -/obj/machinery/recharger, -/turf/simulated/floor/tiled/white/monotile, -/area/crew_quarters/sleep/cryo) -"Db" = ( -/obj/machinery/disposal, -/obj/effect/floor_decal/industrial/hatch/yellow, -/obj/structure/disposalpipe/trunk{ - dir = 4 - }, -/obj/machinery/light{ - dir = 8 - }, -/turf/simulated/floor/tiled/white/monotile, -/area/crew_quarters/sleep/cryo) -"Dc" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/white, -/area/crew_quarters/sleep/cryo) -"Dd" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/disposalpipe/segment{ - dir = 8; - icon_state = "pipe-c" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 8 - }, -/obj/effect/landmark{ - name = "lightsout" - }, -/turf/simulated/floor/tiled/white, -/area/crew_quarters/sleep/cryo) -"De" = ( -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/crew_quarters/sleep/cryo) -"Df" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/crew_quarters/sleep/cryo) -"Dg" = ( -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/crew_quarters/sleep/cryo) -"Dh" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 8 - }, -/obj/machinery/light{ - dir = 4 - }, -/obj/structure/closet/secure_closet/personal, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled/white/monotile, -/area/crew_quarters/sleep/cryo) -"Di" = ( -/obj/effect/wallframe_spawn/reinforced, -/obj/machinery/door/firedoor, -/obj/machinery/door/blast/regular{ - density = 0; - dir = 2; - icon_state = "pdoor0"; - id_tag = "d3fore_shutters"; - name = "Blast Shields"; - opacity = 0 - }, -/turf/simulated/floor/plating, -/area/crew_quarters/observation) -"Dj" = ( -/obj/structure/railing/mapped, -/obj/structure/railing/mapped{ - dir = 4; - icon_state = "railing0-1" - }, -/turf/simulated/floor/plating, -/area/maintenance/thirddeck/aftstarboard) -"Dk" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/door/firedoor, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/maintenance/thirddeck/port) -"Dn" = ( -/turf/simulated/wall/prepainted, -/area/vacant/cabin) -"Do" = ( -/obj/structure/cable/green{ - d2 = 2; - icon_state = "0-2" - }, -/obj/machinery/power/apc{ - dir = 1; - name = "north bump"; - pixel_x = 0; - pixel_y = 24 - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/thirddeck/aftport) -"Dp" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/obj/structure/disposalpipe/segment{ - dir = 1; - icon_state = "pipe-c" - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/thirddeck/aftstarboard) -"Dq" = ( -/obj/random/obstruction, -/turf/simulated/floor/plating, -/area/maintenance/thirddeck/aftport) -"Dt" = ( -/obj/structure/extinguisher_cabinet{ - pixel_y = -32 - }, -/obj/effect/floor_decal/corner/green{ - dir = 10 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/thirddeck/center) -"Du" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/chaplain{ - name = "Chapel" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/chapel/memorial) -"Dv" = ( -/obj/structure/table/steel, -/obj/item/paper_bin{ - pixel_x = -3; - pixel_y = 7 - }, -/obj/item/pen, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/thirddeck/port) -"Dy" = ( -/obj/structure/catwalk, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/maintenance/thirddeck/port) -"Dz" = ( -/obj/effect/floor_decal/industrial/outline/grey, -/obj/structure/reagent_dispensers/fueltank, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/thirddeck/starboard) -"DA" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/floor_decal/corner/purple{ - dir = 5 - }, -/turf/simulated/floor/tiled/dark, -/area/chapel/memorial) -"DB" = ( -/obj/item/device/radio/intercom{ - dir = 4; - pixel_x = -21 - }, -/turf/simulated/floor/tiled/dark, -/area/crew_quarters/sleep/bunk) -"DD" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/catwalk, -/obj/structure/cable/green{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/turf/simulated/floor/plating, -/area/maintenance/thirddeck/port) -"DE" = ( -/obj/machinery/power/apc{ - dir = 1; - name = "north bump"; - pixel_x = 0; - pixel_y = 24 - }, -/obj/structure/cable/green{ - d2 = 2; - icon_state = "0-2" - }, -/turf/simulated/floor/tiled/dark, -/area/turret_protected/ai_upload_foyer) -"DF" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/wall/prepainted, -/area/command/disperser) -"DI" = ( -/obj/structure/table/standard, -/obj/item/reagent_containers/food/drinks/glass2/coffeecup/SCG, -/obj/item/deck/cards, -/turf/simulated/floor/tiled/techfloor, -/area/crew_quarters/safe_room/thirddeck) -"DJ" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/obj/effect/catwalk_plated/dark, -/turf/simulated/floor/plating, -/area/command/disperser) -"DK" = ( -/obj/random/firstaid, -/obj/random/medical, -/obj/random/medical, -/obj/random/medical, -/obj/machinery/light{ - dir = 4; - icon_state = "tube1" - }, -/obj/structure/closet/medical_wall/filled{ - pixel_x = 32 - }, -/obj/effect/floor_decal/techfloor{ - dir = 4; - icon_state = "techfloor_edges" - }, -/turf/simulated/floor/tiled/techfloor, -/area/crew_quarters/safe_room/thirddeck) -"DL" = ( -/obj/machinery/power/apc{ - dir = 1; - name = "north bump"; - pixel_x = 0; - pixel_y = 24 - }, -/obj/structure/cable/green{ - d2 = 4; - icon_state = "0-4" - }, -/turf/simulated/floor/tiled, -/area/crew_quarters/cryolocker) -"DM" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark, -/area/command/disperser) -"DN" = ( -/obj/item/stool/padded, -/turf/simulated/floor/carpet/magenta, -/area/crew_quarters/sleep/bunk) -"DO" = ( -/obj/structure/table/rack, -/turf/simulated/floor/carpet/magenta, -/area/crew_quarters/sleep/bunk) -"DP" = ( -/obj/structure/table/standard, -/obj/item/device/paicard, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 4 - }, -/obj/machinery/requests_console{ - department = "Cryogenic Storage"; - pixel_x = -32; - pixel_y = 0 - }, -/turf/simulated/floor/tiled/white/monotile, -/area/crew_quarters/sleep/cryo) -"DQ" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/turf/simulated/floor/tiled/white, -/area/crew_quarters/sleep/cryo) -"DR" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply, -/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers, -/obj/machinery/hologram/holopad, -/obj/structure/cable/green{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled/white, -/area/crew_quarters/sleep/cryo) -"DS" = ( -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/door/airlock/maintenance{ - name = "Cryogenic Storage Maintenance" - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/white/monotile, -/area/crew_quarters/sleep/cryo) -"DT" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/door/firedoor, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/maintenance/thirddeck/port) -"DU" = ( -/obj/machinery/camera/network/command{ - c_tag = "Fire Control - Storage"; - dir = 4; - network = list("Command") - }, -/turf/simulated/floor/tiled/dark, -/area/command/disperser) -"DV" = ( -/obj/effect/floor_decal/corner/lime{ - dir = 8 - }, -/obj/structure/bed/chair/comfy/lime, -/obj/random/junk, -/turf/simulated/floor/tiled, -/area/vacant/cabin) -"DW" = ( -/obj/effect/floor_decal/corner/lime, -/obj/effect/decal/cleanable/cobweb2, -/turf/simulated/floor/tiled, -/area/vacant/cabin) -"DX" = ( -/obj/machinery/atmospherics/valve/digital{ - dir = 4; - id_tag = "fuelmode" - }, -/obj/effect/floor_decal/industrial/outline/red, -/turf/simulated/floor/reinforced/oxygen, -/area/thruster/d3starboard) -"DY" = ( -/obj/machinery/door/airlock/civilian{ - id_tag = "dorm2"; - name = "Private Room 2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/carpet, -/area/crew_quarters/sleep/bunk) -"DZ" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/thirddeck/aftport) -"Ea" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/obj/structure/disposalpipe/segment{ - dir = 2; - icon_state = "pipe-c" - }, -/obj/machinery/atmospherics/pipe/simple/visible/fuel, -/obj/structure/cable/green{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/thirddeck/aftstarboard) -"Eb" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/catwalk, -/obj/machinery/atmospherics/pipe/manifold/visible/fuel{ - dir = 1 - }, -/turf/simulated/floor/plating, -/area/maintenance/thirddeck/aftport) -"Ed" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/catwalk, -/obj/effect/floor_decal/industrial/warning/corner, -/obj/machinery/atmospherics/pipe/simple/visible/fuel{ - dir = 10 - }, -/turf/simulated/floor/plating, -/area/maintenance/thirddeck/aftport) -"Ee" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9; - pixel_y = 0 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/obj/structure/catwalk, -/obj/machinery/alarm{ - dir = 8; - icon_state = "alarm0"; - pixel_x = 24 - }, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/effect/floor_decal/industrial/warning, -/obj/machinery/atmospherics/pipe/simple/visible/fuel, -/turf/simulated/floor/plating, -/area/maintenance/thirddeck/aftport) -"Ef" = ( -/obj/structure/grille, -/turf/simulated/floor/plating, -/area/maintenance/thirddeck/foreport) -"Eg" = ( -/obj/effect/decal/cleanable/dirt, -/obj/random/trash, -/obj/structure/table/marble, -/obj/item/material/kitchen/rollingpin, -/obj/item/device/radio/intercom{ - dir = 4; - pixel_x = -21 - }, -/obj/random_multi/single_item/boombox, -/turf/simulated/floor/plating, -/area/vacant/mess) -"Eh" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 8; - icon_state = "pipe-c" - }, -/turf/simulated/floor/tiled/dark, -/area/chapel/main) -"Ej" = ( -/obj/machinery/door/morgue{ - dir = 2; - name = "Confession Booth (Chaplain)" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/chapel/office) -"Ek" = ( -/obj/effect/floor_decal/corner/blue{ - dir = 4 - }, -/obj/structure/railing/mapped, -/obj/machinery/light{ - dir = 8 - }, -/turf/simulated/floor/tiled/dark, -/area/command/disperser) -"Em" = ( -/obj/structure/sign/directions/supply{ - dir = 2; - pixel_y = -4; - pixel_z = 0 - }, -/obj/structure/sign/directions/evac{ - dir = 2; - pixel_y = 3 - }, -/obj/effect/wallframe_spawn/no_grille, -/turf/simulated/floor/plating, -/area/hallway/primary/thirddeck/aft) -"En" = ( -/obj/machinery/camera/network/third_deck{ - c_tag = "Cryogenic Storage - Fore Port"; - dir = 4 - }, -/obj/machinery/vending/coffee{ - dir = 4; - icon_state = "coffee" - }, -/turf/simulated/floor/tiled/white/monotile, -/area/crew_quarters/sleep/cryo) -"Ep" = ( -/obj/machinery/atmospherics/binary/pump/on{ - dir = 2; - target_pressure = 200 - }, -/obj/machinery/light{ - dir = 8 - }, -/obj/effect/floor_decal/techfloor{ - dir = 8; - icon_state = "techfloor_edges" - }, -/turf/simulated/floor/tiled/techfloor, -/area/crew_quarters/safe_room/thirddeck) -"Eq" = ( -/obj/structure/railing/mapped{ - dir = 8; - icon_state = "railing0-1" - }, -/turf/simulated/floor/plating, -/area/maintenance/thirddeck/starboard) -"Er" = ( -/obj/structure/closet, -/obj/item/storage/candle_box, -/obj/item/storage/candle_box/incense, -/obj/item/flame/lighter/random, -/turf/simulated/floor/tiled/dark, -/area/chapel/memorial) -"Es" = ( -/obj/random/torchcloset, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/thirddeck/foreport) -"Et" = ( -/obj/structure/table/standard, -/obj/machinery/computer/cryopod{ - density = 0; - pixel_x = -32; - pixel_y = 0 - }, -/obj/random/plushie, -/turf/simulated/floor/tiled/white/monotile, -/area/crew_quarters/sleep/cryo) -"Ew" = ( -/obj/structure/closet/emcloset, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/random_multi/single_item/boombox, -/obj/structure/sign/double/solgovflag/left{ - pixel_y = -32 - }, -/turf/simulated/floor/tiled/white/monotile, -/area/crew_quarters/sleep/cryo) -"Ex" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/thirddeck/port) -"Ez" = ( -/turf/simulated/wall/prepainted, -/area/maintenance/thirddeck/port) -"EA" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/structure/catwalk, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, -/obj/structure/cable/green{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/turf/simulated/floor/plating, -/area/maintenance/thirddeck/port) -"EB" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/thirddeck/port) -"EC" = ( -/obj/effect/floor_decal/corner/lime{ - dir = 8 - }, -/turf/simulated/floor/tiled, -/area/vacant/cabin) -"ED" = ( -/turf/simulated/floor/plating, -/area/vacant/cabin) -"EE" = ( -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/thirddeck/aftport) -"EF" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 4 - }, -/obj/structure/railing/mapped{ - dir = 8; - icon_state = "railing0-1" - }, -/obj/structure/railing/mapped{ - dir = 1; - icon_state = "railing0-1" - }, -/turf/simulated/floor/plating, -/area/maintenance/thirddeck/starboard) -"EG" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 4; - icon_state = "warning" - }, -/obj/structure/railing/mapped{ - dir = 8; - icon_state = "railing0-1" - }, -/obj/structure/railing/mapped{ - dir = 1; - icon_state = "railing0-1" - }, -/obj/machinery/atmospherics/pipe/simple/visible/fuel{ - dir = 5 - }, -/turf/simulated/floor/plating, -/area/maintenance/thirddeck/aftport) -"EH" = ( -/obj/structure/lattice, -/turf/simulated/wall/r_wall/hull, -/area/maintenance/thirddeck/aftport) -"EI" = ( -/obj/structure/reagent_dispensers/fueltank, -/obj/effect/decal/cleanable/cobweb2, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/thirddeck/forestarboard) -"EJ" = ( -/turf/simulated/wall/r_wall/hull, -/area/tcommsat/storage) -"EK" = ( -/obj/effect/floor_decal/corner/blue/diagonal{ - dir = 4 - }, -/obj/machinery/media/music_writer{ - pixel_x = 32 - }, -/turf/simulated/floor/tiled/white, -/area/crew_quarters/mess) -"EL" = ( -/obj/machinery/firealarm{ - dir = 4; - pixel_x = 24 - }, -/obj/random/maintenance/clean, -/obj/random/maintenance/clean, -/obj/random/maintenance/clean, -/obj/structure/closet/secure_closet/crew, -/obj/effect/floor_decal/corner/lime{ - dir = 10 - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled/monotile, -/area/crew_quarters/cryolocker) -"EN" = ( -/obj/machinery/atmospherics/portables_connector{ - dir = 4 - }, -/obj/machinery/portable_atmospherics/canister/air, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled/techfloor/grid, -/area/crew_quarters/safe_room/thirddeck) -"EO" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/cyan{ - dir = 1; - icon_state = "map" - }, -/obj/structure/fireaxecabinet{ - pixel_y = 32 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/crew_quarters/safe_room/thirddeck) -"EP" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/cyan{ - dir = 4; - icon_state = "intact" - }, -/obj/machinery/door/airlock/atmos{ - name = "Safe Room Atmospherics" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/crew_quarters/safe_room/thirddeck) -"EQ" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/cyan{ - dir = 4 - }, -/obj/effect/floor_decal/techfloor{ - dir = 8; - icon_state = "techfloor_edges" - }, -/obj/effect/landmark{ - name = "xeno_spawn"; - pixel_x = -1 - }, -/turf/simulated/floor/tiled/techfloor, -/area/crew_quarters/safe_room/thirddeck) -"ES" = ( -/obj/random/trash, -/obj/structure/catwalk, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/plating, -/area/maintenance/thirddeck/aftstarboard) -"EU" = ( -/obj/machinery/jukebox/old, -/turf/simulated/floor/wood/walnut, -/area/crew_quarters/recreation) -"EV" = ( -/obj/item/storage/secure/safe{ - pixel_x = 5; - pixel_y = 25 - }, -/obj/machinery/button/alternate/door/bolts{ - id_tag = "dorm2"; - name = "Private Room Bolt Control"; - pixel_x = -25; - pixel_y = -25 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 8 - }, -/turf/simulated/floor/carpet, -/area/crew_quarters/sleep/bunk) -"EW" = ( -/obj/machinery/light/spot{ - dir = 8 - }, -/obj/structure/sign/ecplaque{ - pixel_y = -30 - }, -/obj/machinery/vending/cigarette{ - dir = 4; - icon_state = "cigs" - }, -/turf/simulated/floor/tiled/white/monotile, -/area/crew_quarters/sleep/cryo) -"EX" = ( -/turf/simulated/floor/tiled/white, -/area/crew_quarters/sleep/cryo) -"Fa" = ( -/obj/structure/catwalk, -/obj/structure/cable{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/turf/simulated/floor/plating, -/area/maintenance/thirddeck/aftstarboard) -"Fc" = ( -/obj/structure/closet/secure_closet/personal, -/obj/effect/floor_decal/corner/lime{ - dir = 10 - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/monotile, -/area/crew_quarters/cryolocker) -"Fd" = ( -/turf/simulated/wall/prepainted, -/area/crew_quarters/sleep/cryo) -"Fe" = ( -/obj/structure/ladder/updown, -/obj/effect/floor_decal/industrial/hatch/yellow, -/obj/machinery/light/small{ - dir = 8 - }, -/obj/structure/catwalk, -/turf/simulated/floor/tiled, -/area/maintenance/thirddeck/port) -"Ff" = ( -/obj/machinery/door/airlock/maintenance{ - autoset_access = 0; - name = "Cargo Storage Maintenance"; - req_access = list("ACCESS_MAINT","ACCESS_CARGO") - }, -/obj/machinery/door/firedoor, -/turf/simulated/floor/tiled/steel_ridged, -/area/maintenance/thirddeck/port) -"Fg" = ( -/obj/item/frame/apc, -/turf/simulated/floor/plating, -/area/vacant/cabin) -"Fh" = ( -/obj/effect/floor_decal/corner/lime, -/obj/random/trash, -/turf/simulated/floor/tiled, -/area/vacant/cabin) -"Fi" = ( -/obj/structure/bed/chair/office/light{ - dir = 8 - }, -/turf/simulated/floor/plating, -/area/vacant/cabin) -"Fj" = ( -/turf/simulated/floor/tiled/dark, -/area/vacant/cabin) -"Fk" = ( -/obj/random/junk, -/turf/simulated/floor/tiled/dark, -/area/vacant/cabin) -"Fl" = ( -/obj/machinery/alarm{ - dir = 8; - pixel_x = 25; - pixel_y = 0; - req_access = list(list("ACCESS_ENGINE_EQUIP","ACCESS_ATMOS")) - }, -/obj/structure/bed/chair/wood/maple{ - dir = 1; - icon_state = "wooden_chair_preview" - }, -/turf/simulated/floor/carpet/purple, -/area/chapel/main) -"Fm" = ( -/obj/machinery/power/port_gen/pacman, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/thirddeck/aftport) -"Fn" = ( -/obj/structure/table/woodentable/walnut, -/obj/structure/flora/pottedplant/deskleaf, -/turf/simulated/floor/tiled/dark/monotile, -/area/crew_quarters/observation) -"Fo" = ( -/obj/structure/ladder/up, -/obj/effect/floor_decal/industrial/hatch/yellow, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/thirddeck/aftport) -"Fp" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 4; - icon_state = "warning" - }, -/obj/structure/disposalpipe/segment{ - dir = 4; - icon_state = "pipe-c" - }, -/obj/structure/railing/mapped{ - dir = 8; - icon_state = "railing0-1" - }, -/turf/simulated/floor/plating, -/area/maintenance/thirddeck/aftport) -"Fq" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/door/airlock/civilian{ - name = "Shower" - }, -/turf/simulated/floor/tiled/freezer, -/area/crew_quarters/head) -"Fr" = ( -/obj/machinery/door/airlock/multi_tile/glass/civilian{ - dir = 8; - name = "Holodeck" - }, -/turf/simulated/floor/tiled/steel_ridged, -/area/holocontrol) -"Fs" = ( -/obj/structure/disposalpipe/segment, -/obj/structure/cable/green{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled, -/area/crew_quarters/gym) -"Ft" = ( -/obj/structure/bed/chair/wheelchair, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/thirddeck/foreport) -"Fv" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/cyan{ - dir = 9; - icon_state = "intact" - }, -/obj/structure/closet/emcloset, -/obj/machinery/light/small{ - dir = 4 - }, -/obj/effect/floor_decal/industrial/outline/grey, -/obj/machinery/alarm{ - dir = 1; - icon_state = "alarm0"; - pixel_y = -22 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/crew_quarters/safe_room/thirddeck) -"Fw" = ( -/obj/structure/table/marble, -/obj/item/reagent_containers/food/condiment/small/saltshaker{ - pixel_x = -3; - pixel_y = 0 - }, -/obj/item/reagent_containers/food/condiment/small/peppermill{ - pixel_x = 3 - }, -/obj/effect/floor_decal/corner/grey/diagonal{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/crew_quarters/galley) -"Fx" = ( -/obj/effect/wallframe_spawn/no_grille, -/turf/simulated/floor/plating, -/area/crew_quarters/galley) -"Fy" = ( -/obj/structure/table/rack, -/obj/random/tech_supply, -/obj/random/maintenance/solgov, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/thirddeck/forestarboard) -"Fz" = ( -/obj/machinery/firealarm{ - dir = 2; - pixel_y = 24 - }, -/obj/machinery/disposal, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/effect/floor_decal/corner/red{ - dir = 5 - }, -/obj/effect/floor_decal/industrial/hatch/yellow, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/disposalpipe/trunk{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark, -/area/security/habcheck) -"FA" = ( -/obj/machinery/atmospherics/unary/vent_pump/high_volume{ - controlled = 0; - dir = 1; - internal_pressure_bound = 35000; - internal_pressure_bound_default = 35000; - pressure_checks = 2; - pressure_checks_default = 2; - use_power = 1 - }, -/turf/simulated/floor/airless, -/area/thruster/d3port) -"FC" = ( -/obj/structure/bed/padded, -/obj/item/bedsheet, -/turf/simulated/floor/carpet, -/area/crew_quarters/sleep/bunk) -"FD" = ( -/obj/machinery/door/firedoor, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/door/airlock/civilian{ - name = "Cryogenic Storage Wardrobe" - }, -/turf/simulated/floor/tiled/steel_ridged, -/area/crew_quarters/sleep/cryo) -"FE" = ( -/obj/effect/floor_decal/corner/blue{ - dir = 9 - }, -/turf/simulated/floor/tiled/dark, -/area/command/disperser) -"FG" = ( -/obj/effect/floor_decal/corner/grey/diagonal{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/button/blast_door{ - id_tag = "kitchen"; - name = "Kitchen Shutters"; - pixel_y = -21 - }, -/turf/simulated/floor/tiled/white, -/area/crew_quarters/galley) -"FH" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/alarm{ - dir = 4; - pixel_x = -23; - pixel_y = 0 - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/thirddeck/port) -"FI" = ( -/obj/structure/bookcase, -/obj/effect/decal/cleanable/cobweb, -/turf/simulated/floor/tiled/dark, -/area/vacant/cabin) -"FJ" = ( -/obj/structure/bedsheetbin, -/turf/simulated/floor/tiled/dark, -/area/vacant/cabin) -"FK" = ( -/obj/random/trash, -/turf/simulated/floor/tiled/dark, -/area/vacant/cabin) -"FL" = ( -/obj/effect/floor_decal/corner/lime, -/turf/simulated/floor/tiled, -/area/vacant/cabin) -"FM" = ( -/obj/structure/table/steel, -/obj/random/maintenance/solgov, -/turf/simulated/floor/plating, -/area/vacant/cabin) -"FN" = ( -/obj/structure/table/steel, -/turf/simulated/floor/tiled/dark, -/area/vacant/cabin) -"FO" = ( -/obj/machinery/power/rad_collector, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/thirddeck/aftport) -"FQ" = ( -/obj/structure/flora/ausbushes/grassybush, -/turf/simulated/floor/grass, -/area/crew_quarters/observation) -"FR" = ( -/obj/structure/window/phoronreinforced{ - dir = 8; - icon_state = "rwindow" - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 8 - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/power/emitter, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/engineering/hardstorage) -"FS" = ( -/turf/simulated/wall/prepainted, -/area/crew_quarters/cryolocker) -"FT" = ( -/obj/machinery/portable_atmospherics/canister/oxygen, -/obj/machinery/light_switch{ - pixel_x = 6; - pixel_y = -24 - }, -/obj/effect/floor_decal/corner/yellow/mono, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled/dark/monotile, -/area/engineering/hardstorage) -"FU" = ( -/obj/structure/catwalk, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/plating, -/area/command/disperser) -"FV" = ( -/obj/effect/floor_decal/industrial/outline/grey, -/obj/structure/closet/wardrobe/black, -/turf/simulated/floor/tiled/dark/monotile, -/area/crew_quarters/sleep/bunk) -"FW" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/door/airlock/civilian{ - name = "Bunk Room" - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/crew_quarters/sleep/bunk) -"FY" = ( -/obj/effect/floor_decal/corner/grey/diagonal{ - dir = 4 - }, -/obj/machinery/vending/dinnerware, -/obj/effect/floor_decal/industrial/warning{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/crew_quarters/galley) -"FZ" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/catwalk, -/obj/machinery/atmospherics/pipe/simple/visible/fuel{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/maintenance/thirddeck/aftport) -"Ga" = ( -/obj/machinery/door/airlock/maintenance{ - name = "Security Checkpoint Maintenance" - }, -/obj/machinery/door/firedoor, -/turf/simulated/floor/tiled/dark/monotile, -/area/security/habcheck) -"Ge" = ( -/obj/structure/railing/mapped{ - dir = 1; - icon_state = "railing0-1" - }, -/turf/simulated/floor/plating, -/area/maintenance/thirddeck/port) -"Gf" = ( -/obj/effect/floor_decal/industrial/outline/grey, -/obj/random/junk, -/obj/random/junk, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/thirddeck/port) -"Gh" = ( -/obj/effect/floor_decal/industrial/outline/grey, -/obj/machinery/camera/network/command{ - c_tag = "Telecommunications - Server Room Starboard" - }, -/obj/machinery/power/smes/batteryrack, -/obj/structure/cable/cyan{ - d2 = 4; - icon_state = "0-4" - }, -/turf/simulated/floor/bluegrid, -/area/tcommsat/chamber) -"Gi" = ( -/obj/item/storage/secure/safe{ - pixel_x = -22; - pixel_y = 0 - }, -/obj/random_multi/single_item/poppy, -/turf/simulated/floor/tiled/dark, -/area/vacant/cabin) -"Gj" = ( -/obj/random/junk, -/turf/simulated/floor/plating, -/area/vacant/cabin) -"Gk" = ( -/obj/item/frame/air_alarm, -/turf/simulated/floor/tiled/dark, -/area/vacant/cabin) -"Gl" = ( -/obj/machinery/door/airlock{ - name = "Cabin" - }, -/turf/simulated/floor/plating, -/area/vacant/cabin) -"Gm" = ( -/obj/random/trash, -/turf/simulated/floor/plating, -/area/vacant/cabin) -"Gn" = ( -/obj/structure/door_assembly, -/turf/simulated/floor/tiled/dark, -/area/vacant/cabin) -"Go" = ( -/obj/effect/landmark{ - name = "xeno_spawn"; - pixel_x = -1 - }, -/turf/simulated/floor/tiled/dark, -/area/vacant/cabin) -"Gp" = ( -/obj/structure/undies_wardrobe, -/turf/simulated/floor/tiled/dark, -/area/vacant/cabin) -"Gq" = ( -/obj/structure/reagent_dispensers/fueltank, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/thirddeck/aftport) -"Gr" = ( -/obj/structure/disposalpipe/up{ - dir = 4 - }, -/obj/effect/floor_decal/industrial/warning/cee{ - dir = 8 - }, -/turf/simulated/floor/plating, -/area/maintenance/thirddeck/aftport) -"Gs" = ( -/obj/structure/table/rack, -/obj/random/maintenance/solgov, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/thirddeck/foreport) -"Gt" = ( -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/structure/closet/firecloset, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/thirddeck/foreport) -"Gu" = ( -/obj/machinery/alarm{ - dir = 1; - icon_state = "alarm0"; - pixel_y = -22 - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/thirddeck/foreport) -"Gv" = ( -/obj/machinery/door/firedoor, -/turf/simulated/floor/tiled/techfloor/grid, -/area/maintenance/thirddeck/foreport) -"Gw" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/thirddeck/foreport) -"Gx" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/white/monotile, -/area/crew_quarters/sleep/cryo) -"Gy" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/thirddeck/foreport) -"Gz" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/catwalk, -/obj/effect/floor_decal/industrial/warning{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/maintenance/thirddeck/starboard) -"GA" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/door/airlock/maintenance, -/obj/machinery/door/firedoor, -/turf/simulated/floor/tiled/steel_ridged, -/area/crew_quarters/cryolocker) -"GB" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/catwalk_plated, -/turf/simulated/floor/plating, -/area/crew_quarters/cryolocker) -"GC" = ( -/obj/effect/floor_decal/corner/green{ - dir = 10 - }, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 1 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/thirddeck/aft) -"GD" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 1 - }, -/obj/effect/catwalk_plated, -/turf/simulated/floor/plating, -/area/crew_quarters/cryolocker) -"GE" = ( -/obj/machinery/door/airlock/maintenance{ - name = "Galley Maintenance" - }, -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/tiled/freezer, -/area/crew_quarters/galleybackroom) -"GF" = ( -/obj/effect/floor_decal/corner/lime/mono, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/fuel{ - dir = 10; - icon_state = "intact" - }, -/turf/simulated/floor/tiled/monotile, -/area/hallway/primary/thirddeck/aft) -"GI" = ( -/turf/simulated/floor/carpet, -/area/vacant/cabin) -"GJ" = ( -/obj/structure/bed/chair/comfy/beige{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark, -/area/vacant/cabin) -"GK" = ( -/obj/item/device/radio/intercom/entertainment{ - dir = 1; - pixel_y = -28 - }, -/obj/structure/table/steel, -/obj/random/junk, -/turf/simulated/floor/tiled/dark, -/area/vacant/cabin) -"GL" = ( -/obj/structure/closet/cabinet, -/obj/random/maintenance/solgov, -/turf/simulated/floor/plating, -/area/vacant/cabin) -"GN" = ( -/obj/structure/table/steel, -/obj/machinery/microwave{ - pixel_x = -3; - pixel_y = 6 - }, -/turf/simulated/floor/tiled/dark, -/area/vacant/cabin) -"GO" = ( -/obj/machinery/alarm{ - dir = 1; - icon_state = "alarm0"; - pixel_y = -22 - }, -/turf/simulated/floor/plating, -/area/vacant/cabin) -"GP" = ( -/obj/structure/flora/pottedplant/dead, -/turf/simulated/floor/tiled/dark, -/area/vacant/cabin) -"GQ" = ( -/obj/structure/reagent_dispensers/watertank, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/thirddeck/aftport) -"GS" = ( -/obj/structure/reagent_dispensers/watertank, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/thirddeck/foreport) -"GT" = ( -/obj/structure/reagent_dispensers/fueltank, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/thirddeck/foreport) -"GU" = ( -/obj/effect/decal/cleanable/cobweb2, -/obj/machinery/portable_atmospherics/canister/empty/oxygen, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/thirddeck/foreport) -"GV" = ( -/obj/machinery/floodlight, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/thirddeck/foreport) -"GW" = ( -/obj/machinery/alarm{ - dir = 1; - icon_state = "alarm0"; - pixel_y = -22 - }, -/obj/structure/filingcabinet/chestdrawer, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/thirddeck/foreport) -"GY" = ( -/obj/structure/hygiene/drain, -/turf/simulated/floor/tiled, -/area/hydroponics) -"GZ" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/turf/simulated/floor/tiled/white, -/area/crew_quarters/sleep/cryo) -"Hc" = ( -/turf/simulated/open, -/area/crew_quarters/sleep/cryo) -"Hd" = ( -/obj/structure/railing/mapped{ - dir = 8; - icon_state = "railing0-1" - }, -/obj/structure/railing/mapped{ - dir = 1; - icon_state = "railing0-1" - }, -/obj/effect/floor_decal/industrial/warning, -/turf/simulated/floor/plating, -/area/maintenance/thirddeck/port) -"Hf" = ( -/turf/simulated/wall/r_wall/hull, -/area/maintenance/thirddeck/port) -"Hh" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/catwalk, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/plating, -/area/maintenance/thirddeck/port) -"Hi" = ( -/obj/structure/bed, -/obj/structure/plushie/drone, -/turf/simulated/floor/plating, -/area/vacant/cabin) -"Hj" = ( -/obj/structure/bed, -/turf/simulated/floor/carpet, -/area/vacant/cabin) -"Hk" = ( -/obj/random/obstruction, -/turf/simulated/floor/plating, -/area/vacant/cabin) -"Hl" = ( -/obj/machinery/portable_atmospherics/canister/empty/carbon_dioxide, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/thirddeck/foreport) -"Hm" = ( -/obj/structure/bed/chair/comfy/brown{ - dir = 1 - }, -/turf/simulated/floor/plating, -/area/maintenance/thirddeck/foreport) -"Hn" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/catwalk, -/obj/structure/cable/green{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/turf/simulated/floor/plating, -/area/maintenance/thirddeck/port) -"Ho" = ( -/obj/random/junk, -/obj/random/junk, -/obj/random/junk, -/obj/structure/closet/crate/trashcart, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/thirddeck/foreport) -"Hp" = ( -/obj/random/torchcloset, -/obj/random/maintenance/solgov, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/thirddeck/foreport) -"Hr" = ( -/obj/structure/sign/warning/hot_exhaust{ - dir = 8; - icon_state = "fire" - }, -/turf/simulated/wall/r_wall/hull, -/area/maintenance/thirddeck/aftstarboard) -"Hu" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/tiled, -/area/storage/tools) -"Hv" = ( -/obj/effect/floor_decal/techfloor{ - dir = 8; - icon_state = "techfloor_edges" - }, -/obj/item/device/radio/intercom/entertainment{ - dir = 4; - pixel_x = -22 - }, -/obj/structure/table/standard, -/obj/item/modular_computer/laptop/preset/custom_loadout/cheap, -/turf/simulated/floor/tiled/techfloor, -/area/crew_quarters/safe_room/thirddeck) -"Hw" = ( -/obj/effect/floor_decal/spline/fancy/wood{ - dir = 4 - }, -/turf/simulated/floor/carpet, -/area/crew_quarters/recreation) -"Hx" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/structure/catwalk, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/turf/simulated/floor/plating, -/area/maintenance/thirddeck/port) -"Hy" = ( -/obj/structure/cable/green{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/structure/catwalk, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/turf/simulated/floor/plating, -/area/maintenance/thirddeck/port) -"Hz" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/maintenance, -/turf/simulated/floor/tiled/techfloor/grid, -/area/maintenance/thirddeck/aftport) -"HB" = ( -/obj/machinery/light/small{ - dir = 4; - icon_state = "bulb1" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/railing/mapped{ - dir = 1; - icon_state = "railing0-1" - }, -/turf/simulated/floor/plating, -/area/command/disperser) -"HD" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/catwalk, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/maintenance/thirddeck/port) -"HE" = ( -/obj/random/torchcloset, -/obj/random/maintenance/solgov, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/thirddeck/port) -"HG" = ( -/obj/structure/largecrate, -/obj/random/maintenance/solgov, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/thirddeck/port) -"HH" = ( -/obj/effect/wallframe_spawn/reinforced/hull, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/door/blast/regular/open{ - dir = 4; - icon_state = "pdoor0"; - id_tag = "bsa-window"; - name = "Observation Blast Door" - }, -/turf/simulated/floor/plating, -/area/command/disperser) -"HI" = ( -/obj/structure/sign/warning/secure_area, -/turf/simulated/wall/r_wall/hull, -/area/command/disperser) -"HJ" = ( -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/door/airlock/highsecurity{ - icon_state = "closed"; - locked = 0; - name = "Fire Control" - }, -/turf/simulated/floor/tiled/steel_ridged, -/area/command/disperser) -"HK" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/door/airlock/highsecurity{ - icon_state = "closed"; - locked = 0; - name = "Fire Control" - }, -/turf/simulated/floor/tiled/steel_ridged, -/area/command/disperser) -"HL" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 9 - }, -/obj/machinery/camera/network/command{ - c_tag = "Fire Control - Access" - }, -/turf/simulated/floor/plating, -/area/command/disperser) -"HM" = ( -/obj/structure/catwalk, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/plating, -/area/command/disperser) -"HN" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/structure/catwalk, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/plating, -/area/command/disperser) -"HO" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 5 - }, -/obj/structure/cable/green{ - d2 = 8; - icon_state = "0-8" - }, -/obj/machinery/power/apc/hyper{ - dir = 4; - name = "east bump"; - pixel_x = 24 - }, -/turf/simulated/floor/plating, -/area/command/disperser) -"HP" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 10 - }, -/obj/machinery/light/small, -/turf/simulated/floor/plating, -/area/command/disperser) -"HQ" = ( -/obj/effect/floor_decal/corner/blue{ - dir = 5 - }, -/obj/structure/railing/mapped, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/turf/simulated/floor/tiled/dark, -/area/command/disperser) -"HR" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 6 - }, -/obj/machinery/light/small, -/turf/simulated/floor/plating, -/area/command/disperser) -"HS" = ( -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/door/airlock/highsecurity{ - icon_state = "closed"; - locked = 0; - name = "Fire Control" - }, -/turf/simulated/floor/tiled/steel_ridged, -/area/command/disperser) -"HT" = ( -/obj/structure/disposaloutlet, -/obj/structure/disposalpipe/trunk{ - dir = 4 - }, -/turf/simulated/floor/tiled/airless, -/area/command/disperser) -"HU" = ( -/obj/effect/floor_decal/industrial/hatch/yellow, -/obj/machinery/disposal/deliveryChute{ - dir = 4 - }, -/obj/structure/disposalpipe/trunk{ - dir = 8 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/command/disperser) -"HV" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/effect/catwalk_plated/dark, -/turf/simulated/floor/plating, -/area/command/disperser) -"HW" = ( -/turf/simulated/wall/prepainted, -/area/command/disperser) -"HX" = ( -/obj/effect/floor_decal/industrial/hatch/blue, -/obj/structure/ship_munition/disperser_charge/emp, -/turf/simulated/floor/tiled/dark, -/area/command/disperser) -"HZ" = ( -/obj/effect/floor_decal/industrial/loading, -/turf/simulated/floor/tiled/airless, -/area/command/disperser) -"Ia" = ( -/obj/effect/wallframe_spawn/reinforced/hull, -/obj/machinery/door/blast/regular/open{ - dir = 4; - icon_state = "pdoor0"; - id_tag = "bsa-window"; - name = "Observation Blast Door" - }, -/turf/simulated/floor/plating, -/area/command/disperser) -"Ib" = ( -/obj/effect/floor_decal/corner/blue{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 1 - }, -/obj/item/device/radio/intercom{ - dir = 8; - pixel_x = 22; - pixel_y = 4 - }, -/turf/simulated/floor/tiled/dark, -/area/command/disperser) -"Ic" = ( -/obj/machinery/light{ - dir = 1; - icon_state = "tube1" - }, -/turf/simulated/floor/airless, -/area/command/disperser) -"Id" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 1 - }, -/turf/simulated/floor/airless, -/area/command/disperser) -"Ie" = ( -/obj/structure/table/steel, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 - }, -/turf/simulated/floor/tiled/monotile, -/area/command/disperser) -"If" = ( -/obj/machinery/light/small{ - dir = 4; - icon_state = "bulb1" - }, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 1 - }, -/turf/simulated/floor/tiled/dark, -/area/command/disperser) -"Ih" = ( -/obj/effect/floor_decal/industrial/hatch/orange, -/obj/structure/ship_munition/disperser_charge/fire, -/turf/simulated/floor/tiled/dark, -/area/command/disperser) -"Ik" = ( -/obj/effect/floor_decal/corner/green{ - dir = 10 - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/tiled, -/area/hallway/primary/thirddeck/aft) -"Im" = ( -/obj/machinery/shield_diffuser, -/obj/machinery/door/blast/regular{ - dir = 4; - id_tag = "bsa-core"; - name = "OFD Blast Door" - }, -/turf/simulated/floor/airless, -/area/command/disperser) -"In" = ( -/obj/machinery/disperser/front{ - dir = 8 - }, -/turf/simulated/floor/airless, -/area/command/disperser) -"Io" = ( -/obj/machinery/disperser/middle{ - dir = 8 - }, -/turf/simulated/floor/airless, -/area/command/disperser) -"Ip" = ( -/obj/machinery/disperser/back{ - dir = 8 - }, -/turf/simulated/floor/airless, -/area/command/disperser) -"Iq" = ( -/obj/effect/floor_decal/corner/green{ - dir = 6 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/thirddeck/fore) -"Ir" = ( -/obj/machinery/camera/network/command{ - c_tag = "Fire Control - Controls"; - dir = 4 - }, -/obj/machinery/computer/ship/disperser{ - dir = 4; - icon_state = "computer" - }, -/turf/simulated/floor/tiled/monotile, -/area/command/disperser) -"Is" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 1 - }, -/obj/effect/catwalk_plated/dark, -/turf/simulated/floor/plating, -/area/command/disperser) -"It" = ( -/obj/machinery/door/airlock/command{ - name = "Obstruction Field Disperser Magazine"; - secured_wires = 1 - }, -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark, -/area/command/disperser) -"Iv" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/dark, -/area/chapel/memorial) -"Iw" = ( -/obj/effect/floor_decal/industrial/hatch/red, -/obj/structure/ship_munition/disperser_charge/explosive, -/turf/simulated/floor/tiled/dark, -/area/command/disperser) -"Ix" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 8 - }, -/obj/item/stool/padded, -/turf/simulated/floor/tiled/freezer, -/area/crew_quarters/head) -"Iy" = ( -/obj/structure/sign/warning/hot_exhaust{ - dir = 1; - icon_state = "fire" - }, -/turf/simulated/wall/r_wall/hull, -/area/command/disperser) -"IA" = ( -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 4; - icon_state = "intact" - }, -/obj/structure/sign/warning/airlock{ - dir = 1; - icon_state = "doors"; - pixel_y = -32 - }, -/obj/machinery/access_button{ - command = "cycle_interior"; - frequency = 1379; - master_tag = "bsa_airlock"; - pixel_x = -20; - pixel_y = -20 - }, -/turf/simulated/floor/plating, -/area/command/disperser) -"IB" = ( -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 4; - icon_state = "intact" - }, -/turf/simulated/floor/plating, -/area/command/disperser) -"ID" = ( -/obj/random_multi/single_item/punitelly, -/turf/simulated/floor/tiled, -/area/vacant/brig) -"IE" = ( -/obj/random_multi/single_item/punitelly, -/turf/simulated/floor/plating, -/area/maintenance/thirddeck/starboard) -"IF" = ( -/obj/structure/sign/poster/torch, -/turf/simulated/wall/prepainted, -/area/turret_protected/ai_upload) -"IH" = ( -/obj/structure/table/steel, -/obj/random_multi/single_item/punitelly, -/turf/simulated/floor/tiled/dark, -/area/vacant/cabin) -"II" = ( -/obj/random_multi/single_item/punitelly, -/turf/simulated/floor/tiled/dark, -/area/vacant/cabin) -"IJ" = ( -/obj/random_multi/single_item/punitelly, -/obj/structure/railing/mapped{ - dir = 4; - icon_state = "railing0-1" - }, -/turf/simulated/floor/plating, -/area/maintenance/thirddeck/aftport) -"IK" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/effect/catwalk_plated/dark, -/turf/simulated/floor/plating, -/area/command/disperser) -"IL" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 - }, -/obj/structure/railing/mapped{ - dir = 4; - icon_state = "railing0-1" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, -/turf/simulated/floor/plating, -/area/maintenance/thirddeck/forestarboard) -"IM" = ( -/obj/structure/disposalpipe/segment, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 - }, -/obj/structure/catwalk, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/turf/simulated/floor/plating, -/area/maintenance/thirddeck/forestarboard) -"IN" = ( -/obj/random/junk, -/obj/machinery/atmospherics/valve/shutoff/supply, -/obj/structure/railing/mapped{ - dir = 4; - icon_state = "railing0-1" - }, -/obj/machinery/atmospherics/valve/shutoff/scrubbers, -/turf/simulated/floor/plating, -/area/maintenance/thirddeck/forestarboard) -"IO" = ( -/obj/structure/disposalpipe/segment, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/thirddeck/forestarboard) -"IP" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/obj/structure/railing/mapped{ - dir = 4; - icon_state = "railing0-1" - }, -/obj/structure/railing/mapped, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/turf/simulated/floor/plating, -/area/maintenance/thirddeck/forestarboard) -"IQ" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/floor_decal/corner/paleblue/half, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 1 - }, -/obj/effect/floor_decal/industrial/hatch/yellow, -/obj/machinery/door/firedoor, -/turf/simulated/floor/tiled/monotile, -/area/hallway/primary/thirddeck/fore) -"IR" = ( -/obj/machinery/door/airlock/freezer{ - name = "Galley Cold Room" - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/tiled/freezer, -/area/crew_quarters/galleybackroom) -"IS" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/door/firedoor, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/maintenance/thirddeck/aftstarboard) -"IU" = ( -/obj/machinery/atmospherics/pipe/simple/visible/blue{ - dir = 4 - }, -/turf/simulated/wall/r_wall/hull, -/area/thruster/d3starboard) -"IV" = ( -/obj/effect/floor_decal/corner/yellow{ - dir = 9 - }, -/obj/structure/ladder/up, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/turf/simulated/floor/tiled/steel_grid, -/area/hallway/primary/thirddeck/aft) -"IW" = ( -/obj/structure/catwalk, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8"; - pixel_x = 0 - }, -/turf/simulated/floor/plating, -/area/maintenance/thirddeck/aftstarboard) -"IX" = ( -/obj/item/stool/padded, -/obj/effect/floor_decal/corner/green/half, -/obj/machinery/button/blast_door{ - id_tag = "d3fore_shutters"; - name = "Garden Shutter Control"; - pixel_x = -7; - pixel_y = -23 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/crew_quarters/observation) -"IY" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/floor_decal/industrial/shutoff{ - dir = 4 - }, -/obj/machinery/atmospherics/valve/shutoff/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/valve/shutoff/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled/monotile, -/area/hallway/primary/thirddeck/center) -"IZ" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/catwalk_plated, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/hallway/primary/thirddeck/center) -"Ja" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/disposalpipe/sortjunction{ - dir = 4; - name = "Auxiliary Tool Storage"; - sort_type = "Auxiliary Tool Storage" - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/effect/catwalk_plated, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/hallway/primary/thirddeck/aft) -"Jb" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/catwalk_plated, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/hallway/primary/thirddeck/aft) -"Jc" = ( -/obj/effect/floor_decal/corner/green, -/turf/simulated/floor/tiled, -/area/hallway/primary/thirddeck/center) -"Jd" = ( -/obj/effect/floor_decal/corner/green{ - dir = 10; - icon_state = "corner_white" - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/thirddeck/center) -"Je" = ( -/obj/structure/disposalpipe/segment, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/thirddeck/aft) -"Jg" = ( -/obj/structure/table/standard, -/obj/machinery/recharger, -/obj/item/wrench, -/obj/machinery/light_switch{ - pixel_x = 6; - pixel_y = -24 - }, -/turf/simulated/floor/tiled/monotile, -/area/crew_quarters/gym) -"Jh" = ( -/obj/machinery/atmospherics/pipe/simple/visible/fuel{ - dir = 4 - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 1 - }, -/turf/simulated/floor/tiled/techfloor, -/area/thruster/d3starboard) -"Ji" = ( -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/door/airlock/maintenance, -/turf/simulated/floor/tiled/steel_ridged, -/area/crew_quarters/cryolocker) -"Jk" = ( -/obj/effect/floor_decal/industrial/warning, -/obj/machinery/atmospherics/pipe/simple/visible/fuel{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor, -/area/thruster/d3port) -"Jm" = ( -/obj/machinery/atmospherics/tvalve/digital{ - dir = 4; - id_tag = "fuelmode" - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 1 - }, -/obj/effect/floor_decal/industrial/outline/red, -/turf/simulated/floor/tiled/techfloor, -/area/thruster/d3starboard) -"Jo" = ( -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/visible/fuel{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor, -/area/thruster/d3starboard) -"Jp" = ( -/obj/machinery/atmospherics/pipe/manifold4w/visible/fuel, -/obj/effect/floor_decal/industrial/warning{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor, -/area/thruster/d3starboard) -"Jq" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/obj/structure/disposalpipe/segment{ - dir = 1; - icon_state = "pipe-c" - }, -/obj/machinery/atmospherics/pipe/simple/visible/fuel{ - dir = 5 - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/thirddeck/aftstarboard) -"Jr" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/obj/structure/disposalpipe/segment{ - dir = 2; - icon_state = "pipe-c" - }, -/obj/machinery/atmospherics/pipe/simple/visible/fuel{ - dir = 10 - }, -/obj/structure/railing/mapped{ - dir = 8; - icon_state = "railing0-1" - }, -/turf/simulated/floor/plating, -/area/maintenance/thirddeck/aftstarboard) -"Js" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/simple/visible/fuel, -/obj/structure/railing/mapped, -/obj/structure/railing/mapped{ - dir = 8; - icon_state = "railing0-1" - }, -/turf/simulated/floor/plating, -/area/maintenance/thirddeck/aftstarboard) -"Jt" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 1 - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/visible/fuel{ - dir = 4 - }, -/obj/structure/catwalk, -/obj/structure/cable{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/turf/simulated/floor/plating, -/area/maintenance/thirddeck/aftstarboard) -"Ju" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/obj/structure/disposalpipe/segment{ - dir = 1; - icon_state = "pipe-c" - }, -/obj/machinery/atmospherics/pipe/simple/visible/fuel{ - dir = 5 - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/thirddeck/aftstarboard) -"Jw" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/simple/visible/fuel, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/thirddeck/aftstarboard) -"Jx" = ( -/obj/effect/floor_decal/industrial/warning, -/obj/machinery/atmospherics/binary/passive_gate/on{ - dir = 4; - max_pressure_setting = 30000; - regulate_mode = 2; - target_pressure = 30000; - use_power = 1 - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/light/small, -/turf/simulated/floor/tiled/techfloor, -/area/thruster/d3port) -"Jy" = ( -/obj/machinery/atmospherics/pipe/simple/visible/fuel{ - dir = 5 - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor, -/area/thruster/d3starboard) -"Jz" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/visible/fuel{ - dir = 4 - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/thirddeck/aftstarboard) -"JB" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/railing/mapped{ - dir = 4; - icon_state = "railing0-1" - }, -/obj/structure/railing/mapped{ - dir = 1; - icon_state = "railing0-1" - }, -/turf/simulated/floor/plating, -/area/maintenance/thirddeck/aftstarboard) -"JC" = ( -/obj/structure/disposalpipe/segment{ - dir = 1; - icon_state = "pipe-c" - }, -/obj/structure/railing/mapped{ - dir = 1; - icon_state = "railing0-1" - }, -/obj/structure/railing/mapped{ - dir = 8; - icon_state = "railing0-1" - }, -/obj/machinery/atmospherics/pipe/simple/visible/fuel, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/plating, -/area/maintenance/thirddeck/aftstarboard) -"JD" = ( -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/simple/visible/fuel{ - dir = 10 - }, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/thirddeck/aftstarboard) -"JE" = ( -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/simple/visible/fuel, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/thirddeck/aftstarboard) -"JF" = ( -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/simple/visible/fuel, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/obj/structure/cable{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/thirddeck/aftstarboard) -"JG" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/door/firedoor, -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/simple/visible/fuel, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/maintenance/thirddeck/aftstarboard) -"JI" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/disposalpipe/segment, -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/maintenance, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/fuel, -/turf/simulated/floor/tiled/steel_ridged, -/area/hallway/primary/thirddeck/aft) -"JK" = ( -/obj/effect/floor_decal/corner/lime/mono, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/disposalpipe/segment, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/fuel{ - dir = 9; - icon_state = "intact" - }, -/turf/simulated/floor/tiled/monotile, -/area/hallway/primary/thirddeck/aft) -"JL" = ( -/obj/structure/railing/mapped{ - dir = 1; - icon_state = "railing0-1" - }, -/turf/simulated/open, -/area/maintenance/thirddeck/port) -"JM" = ( -/obj/machinery/light/small{ - icon_state = "bulb1"; - dir = 4 - }, -/obj/item/device/radio/intercom/locked/ai_private{ - pixel_y = 22 - }, -/turf/simulated/floor/tiled/dark, -/area/turret_protected/ai_upload_foyer) -"JN" = ( -/obj/effect/floor_decal/spline/fancy/wood{ - dir = 10; - icon_state = "spline_fancy" - }, -/obj/structure/bed/chair/comfy/brown, -/turf/simulated/floor/carpet, -/area/crew_quarters/recreation) -"JO" = ( -/obj/effect/catwalk_plated, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 4 - }, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/disposalpipe/junction{ - dir = 1; - icon_state = "pipe-j2" - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/plating, -/area/hallway/primary/thirddeck/aft) -"JP" = ( -/obj/effect/floor_decal/corner/lime{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/thirddeck/aft) -"JR" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/obj/machinery/firealarm{ - dir = 1; - pixel_x = 0; - pixel_y = -24 - }, -/turf/simulated/floor/tiled/dark, -/area/chapel/office) -"JS" = ( -/obj/machinery/atmospherics/pipe/simple/visible/blue{ - dir = 6 - }, -/obj/effect/floor_decal/industrial/warning, -/obj/machinery/light/small{ - dir = 8 - }, -/turf/simulated/floor/tiled/techfloor, -/area/thruster/d3starboard) -"JT" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/visible/fuel{ - dir = 4 - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/thirddeck/aftport) -"JU" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/visible/fuel, -/obj/structure/catwalk, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/plating, -/area/maintenance/thirddeck/aftport) -"JV" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/thirddeck/port) -"JX" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/visible/fuel{ - dir = 6 - }, -/obj/structure/catwalk, -/obj/structure/cable/green{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/turf/simulated/floor/plating, -/area/maintenance/thirddeck/aftport) -"JY" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/simple/visible/fuel{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/maintenance/thirddeck/aftport) -"JZ" = ( -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/simple/visible/fuel, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/maintenance/thirddeck/aftport) -"Kb" = ( -/obj/machinery/atmospherics/pipe/simple/visible/fuel, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/thirddeck/aftport) -"Kc" = ( -/obj/structure/bed/chair/padded/red{ - dir = 1; - icon_state = "chair_preview" - }, -/obj/effect/floor_decal/corner/red/half{ - dir = 8; - icon_state = "bordercolorhalf" - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/security/habcheck) -"Kd" = ( -/obj/machinery/vending/games, -/turf/simulated/floor/wood/walnut, -/area/crew_quarters/recreation) -"Ke" = ( -/obj/machinery/light_switch{ - pixel_x = 28 - }, -/turf/simulated/floor/tiled/dark, -/area/chapel/memorial) -"Kf" = ( -/obj/machinery/atmospherics/unary/engine{ - dir = 8 - }, -/turf/simulated/floor/plating, -/area/thruster/d3port) -"Kg" = ( -/obj/machinery/atmospherics/pipe/simple/visible/fuel{ - dir = 6 - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor, -/area/thruster/d3port) -"Kh" = ( -/obj/machinery/atmospherics/pipe/manifold/visible/fuel{ - dir = 8 - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor, -/area/thruster/d3port) -"Ki" = ( -/obj/machinery/alarm{ - dir = 8; - icon_state = "alarm0"; - pixel_x = 24 - }, -/obj/machinery/atmospherics/pipe/simple/visible/fuel, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/thirddeck/aftport) -"Kk" = ( -/obj/random/junk, -/obj/machinery/atmospherics/pipe/simple/visible/fuel{ - dir = 10 - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/thirddeck/aftport) -"Kl" = ( -/obj/machinery/atmospherics/pipe/simple/visible/fuel{ - dir = 5 - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/thirddeck/aftport) -"Km" = ( -/obj/machinery/atmospherics/pipe/simple/visible/blue{ - dir = 4 - }, -/turf/simulated/wall/r_wall/hull, -/area/thruster/d3port) -"Kn" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/item/reagent_containers/syringe, -/obj/machinery/light, -/obj/structure/hygiene/sink/kitchen{ - pixel_y = -32 - }, -/obj/effect/floor_decal/corner/green, -/turf/simulated/floor/tiled/monotile, -/area/hydroponics) -"Ko" = ( -/obj/effect/floor_decal/corner/blue/diagonal{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/table/standard, -/turf/simulated/floor/tiled/white, -/area/crew_quarters/mess) -"Kp" = ( -/obj/machinery/power/apc{ - dir = 1; - name = "north bump"; - pixel_x = 0; - pixel_y = 24 - }, -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 1; - icon_state = "warningcorner" - }, -/obj/structure/cable/green{ - d2 = 2; - icon_state = "0-2" - }, -/obj/machinery/atmospherics/pipe/simple/visible{ - dir = 4; - icon_state = "intact" - }, -/turf/simulated/floor/tiled/techfloor, -/area/thruster/d3port) -"Kq" = ( -/obj/machinery/atmospherics/pipe/simple/visible/fuel{ - dir = 10 - }, -/obj/machinery/meter, -/turf/simulated/floor/tiled/techfloor/grid, -/area/thruster/d3port) -"Kr" = ( -/turf/simulated/floor/tiled/techfloor/grid, -/area/thruster/d3port) -"Ks" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/catwalk, -/obj/machinery/atmospherics/binary/pump/high_power/on{ - dir = 4; - target_pressure = 15000 - }, -/turf/simulated/floor/plating, -/area/thruster/d3port) -"Kt" = ( -/obj/effect/floor_decal/corner/lime, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/thirddeck/aft) -"Ku" = ( -/obj/machinery/atmospherics/pipe/simple/visible/fuel{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/thruster/d3port) -"Kv" = ( -/obj/machinery/atmospherics/pipe/simple/visible/fuel{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/techfloor, -/area/thruster/d3port) -"Kw" = ( -/obj/machinery/atmospherics/pipe/simple/visible/fuel{ - dir = 4 - }, -/obj/effect/floor_decal/industrial/warning/corner, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/techfloor, -/area/thruster/d3port) -"Kx" = ( -/obj/machinery/atmospherics/pipe/simple/visible/fuel{ - dir = 4 - }, -/obj/effect/floor_decal/industrial/warning, -/obj/structure/cable/green{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/machinery/light/small, -/turf/simulated/floor/tiled/techfloor, -/area/thruster/d3port) -"Ky" = ( -/obj/effect/floor_decal/spline/fancy/wood{ - dir = 8 - }, -/obj/item/stool/padded, -/turf/simulated/floor/lino, -/area/crew_quarters/bar) -"Kz" = ( -/obj/machinery/atmospherics/pipe/manifold4w/visible/fuel, -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 8 - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor, -/area/thruster/d3port) -"KA" = ( -/obj/machinery/computer/air_control{ - dir = 1; - frequency = 1441; - input_tag = "d3po2_in"; - name = "Oxygen Supply Control"; - output_tag = "d3po2_out"; - sensor_name = "Oxygen Supply Tank"; - sensor_tag = "d3po2_sensor" - }, -/obj/effect/floor_decal/industrial/outline/blue, -/obj/machinery/alarm{ - dir = 1; - pixel_y = -25 - }, -/turf/simulated/floor/tiled/techfloor, -/area/thruster/d3port) -"KB" = ( -/obj/machinery/power/terminal{ - dir = 1; - icon_state = "term" - }, -/obj/machinery/pointdefense{ - initial_id_tag = "torch_primary_pd" - }, -/obj/structure/cable/green, -/turf/simulated/floor/reinforced/airless, -/area/space) -"KC" = ( -/turf/simulated/open, -/area/maintenance/thirddeck/starboard) -"KE" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 8 - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/visible/fuel{ - dir = 8 - }, -/turf/simulated/floor/tiled/techfloor, -/area/thruster/d3port) -"KF" = ( -/obj/machinery/atmospherics/pipe/simple/visible/fuel{ - dir = 4 - }, -/obj/machinery/meter, -/obj/effect/floor_decal/industrial/warning{ - dir = 1 - }, -/turf/simulated/floor/tiled/techfloor, -/area/thruster/d3starboard) -"KG" = ( -/obj/machinery/atmospherics/binary/passive_gate/on{ - dir = 4; - max_pressure_setting = 30000; - regulate_mode = 2; - target_pressure = 30000; - use_power = 1 - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 1 - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/light/small{ - dir = 1 - }, -/turf/simulated/floor/tiled/techfloor, -/area/thruster/d3starboard) -"KH" = ( -/obj/machinery/atmospherics/pipe/simple/visible{ - dir = 4; - icon_state = "intact" - }, -/obj/effect/floor_decal/industrial/warning, -/turf/simulated/floor/tiled/techfloor, -/area/thruster/d3starboard) -"KI" = ( -/obj/structure/reagent_dispensers/fueltank, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/thirddeck/starboard) -"KJ" = ( -/obj/machinery/atmospherics/omni/mixer{ - set_flow_rate = 50; - tag_east = 1; - tag_east_con = 0.2; - tag_north = 1; - tag_north_con = 0.4; - tag_south = 2; - tag_south_con = null; - tag_west = 1; - tag_west_con = 0.4 - }, -/obj/effect/floor_decal/industrial/warning/full, -/obj/effect/floor_decal/industrial/outline/blue, -/turf/simulated/floor/tiled/techfloor/grid, -/area/thruster/d3starboard) -"KK" = ( -/obj/machinery/atmospherics/binary/pump/high_power/on{ - dir = 8; - max_pressure_setting = 15000; - target_pressure = 15000 - }, -/obj/effect/floor_decal/industrial/outline/orange, -/turf/simulated/floor/tiled/techfloor/grid, -/area/thruster/d3starboard) -"KL" = ( -/obj/machinery/meter, -/obj/machinery/atmospherics/pipe/simple/visible/fuel, -/obj/effect/floor_decal/industrial/warning, -/turf/simulated/floor/tiled/techfloor, -/area/thruster/d3starboard) -"KM" = ( -/obj/effect/floor_decal/industrial/warning, -/turf/simulated/floor/tiled/techfloor, -/area/thruster/d3starboard) -"KN" = ( -/obj/machinery/atmospherics/pipe/simple/visible/fuel{ - dir = 6 - }, -/obj/effect/floor_decal/industrial/warning, -/obj/machinery/meter, -/turf/simulated/floor/tiled/techfloor, -/area/thruster/d3starboard) -"KO" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark, -/area/crew_quarters/sleep/bunk) -"KP" = ( -/turf/simulated/wall/ocp_wall, -/area/thruster/d3starboard) -"KR" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/reinforced/airless, -/area/space) -"KS" = ( -/obj/structure/table/steel, -/obj/machinery/button/blast_door{ - desc = "A remote control-switch for shutters."; - id_tag = "hab_checkpoint_shutters"; - name = "Checkpoint Window Shutters"; - pixel_x = -3; - pixel_y = 7 - }, -/obj/machinery/button/blast_door{ - desc = "A remote control-switch for shutters."; - id_tag = "hab_hallway_shutters"; - name = "Hallway Checkpoint Shutters"; - pixel_x = -3; - pixel_y = -3 - }, -/obj/machinery/newscaster/security_unit{ - pixel_y = -32 - }, -/obj/effect/floor_decal/corner/red/mono, -/obj/machinery/light, -/turf/simulated/floor/tiled/dark/monotile, -/area/security/habcheck) -"KT" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 8 - }, -/obj/machinery/light/small{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/visible/fuel{ - dir = 6 - }, -/turf/simulated/floor/tiled/techfloor, -/area/thruster/d3starboard) -"KV" = ( -/obj/machinery/atmospherics/unary/vent_pump/siphon/on/atmos{ - dir = 4; - internal_pressure_bound = 35000; - internal_pressure_bound_default = 35000 - }, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/floor/reinforced/airless, -/area/thruster/d3starboard) -"KW" = ( -/obj/structure/railing/mapped{ - dir = 1; - icon_state = "railing0-1" - }, -/obj/random/trash, -/obj/effect/floor_decal/industrial/warning{ - dir = 8 - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/plating, -/area/maintenance/thirddeck/port) -"KZ" = ( -/obj/effect/floor_decal/corner/green/half, -/obj/structure/closet/athletic_mixed, -/turf/simulated/floor/tiled/dark/monotile, -/area/crew_quarters/observation) -"La" = ( -/turf/simulated/wall/ocp_wall, -/area/thruster/d3port) -"Lb" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/blast/shutters{ - dir = 4; - id_tag = "kitchen"; - name = "Kitchen Shutters" - }, -/obj/effect/wallframe_spawn/no_grille, -/turf/simulated/floor/plating, -/area/crew_quarters/galley) -"Lc" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 8 - }, -/obj/machinery/light/small{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/visible/fuel{ - dir = 5 - }, -/turf/simulated/floor/tiled/techfloor, -/area/thruster/d3port) -"Le" = ( -/obj/machinery/atmospherics/unary/vent_pump/siphon/on/atmos{ - dir = 4; - internal_pressure_bound = 35000; - internal_pressure_bound_default = 35000 - }, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/floor/reinforced/airless, -/area/thruster/d3port) -"Lh" = ( -/obj/structure/closet/emcloset, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/structure/sign/double/solgovflag/right{ - pixel_y = -32 - }, -/turf/simulated/floor/tiled/white/monotile, -/area/crew_quarters/sleep/cryo) -"Li" = ( -/obj/machinery/door/blast/regular{ - dir = 1; - id_tag = "cChamber3pV"; - name = "Chamber Vent" - }, -/turf/simulated/floor/reinforced/airless, -/area/thruster/d3port) -"Lj" = ( -/obj/machinery/hologram/holopad, -/obj/effect/landmark{ - name = "lightsout" - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled/monotile, -/area/hallway/primary/thirddeck/aft) -"Lk" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/effect/catwalk_plated, -/turf/simulated/floor/plating, -/area/crew_quarters/cryolocker) -"Ll" = ( -/obj/machinery/atmospherics/pipe/simple/visible/fuel, -/obj/machinery/meter, -/obj/effect/floor_decal/industrial/warning{ - dir = 1 - }, -/turf/simulated/floor/tiled/techfloor, -/area/thruster/d3port) -"Lm" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 1 - }, -/turf/simulated/floor/tiled/techfloor, -/area/thruster/d3port) -"Ln" = ( -/obj/machinery/atmospherics/pipe/simple/visible/fuel{ - dir = 5 - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 1 - }, -/turf/simulated/floor/tiled/techfloor, -/area/thruster/d3port) -"Lp" = ( -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 1; - icon_state = "warningcorner" - }, -/obj/machinery/atmospherics/pipe/simple/visible/fuel{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor, -/area/thruster/d3port) -"Lq" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/visible{ - dir = 4; - icon_state = "intact" - }, -/turf/simulated/floor/tiled/techfloor, -/area/thruster/d3port) -"Lr" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/catwalk, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/maintenance/thirddeck/aftport) -"Ls" = ( -/obj/machinery/atmospherics/omni/mixer{ - set_flow_rate = 50; - tag_east = 1; - tag_east_con = 0.2; - tag_north = 2; - tag_north_con = null; - tag_south = 1; - tag_south_con = 0.4; - tag_west = 1; - tag_west_con = 0.4 - }, -/obj/effect/floor_decal/industrial/warning/full, -/obj/effect/floor_decal/industrial/outline/blue, -/turf/simulated/floor/tiled/techfloor/grid, -/area/thruster/d3port) -"Lt" = ( -/obj/machinery/atmospherics/binary/pump/high_power/on{ - dir = 8; - max_pressure_setting = 15000; - target_pressure = 15000 - }, -/obj/effect/floor_decal/industrial/outline/orange, -/turf/simulated/floor/tiled/techfloor/grid, -/area/thruster/d3port) -"Lu" = ( -/obj/effect/floor_decal/industrial/warning, -/obj/machinery/atmospherics/pipe/simple/visible/fuel{ - dir = 4 - }, -/obj/machinery/meter, -/turf/simulated/floor/tiled/techfloor, -/area/thruster/d3port) -"Lw" = ( -/obj/effect/landmark{ - name = "xeno_spawn"; - pixel_x = -1 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/effect/catwalk_plated, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/disposalpipe/segment{ - dir = 1; - icon_state = "pipe-c" - }, -/turf/simulated/floor/plating, -/area/hallway/primary/thirddeck/aft) -"Lx" = ( -/obj/effect/floor_decal/corner/blue/diagonal{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 8; - icon_state = "pipe-c" - }, -/turf/simulated/floor/tiled/white, -/area/crew_quarters/mess) -"Ly" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/effect/floor_decal/corner/green/half, -/turf/simulated/floor/tiled, -/area/hallway/primary/thirddeck/aft) -"Lz" = ( -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/door/airlock/engineering{ - name = "Engineering Hard Storage" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/engineering/hardstorage) -"LA" = ( -/obj/item/device/radio/intercom{ - dir = 4; - pixel_x = -21 - }, -/turf/simulated/floor/wood/walnut, -/area/crew_quarters/recreation) -"LB" = ( -/obj/machinery/portable_atmospherics/powered/scrubber, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/thirddeck/foreport) -"LC" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/floor_decal/corner/green{ - dir = 8 - }, -/obj/structure/extinguisher_cabinet{ - pixel_y = -32 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/thirddeck/fore) -"LE" = ( -/obj/machinery/computer/air_control{ - dir = 2; - frequency = 1441; - input_info = null; - input_tag = "d3sh_in"; - name = "Hydrogen Supply Control"; - output_tag = "d3sh_out"; - sensor_name = "Hydrogen Supply Tank"; - sensor_tag = "d3sh_sensor" - }, -/obj/effect/floor_decal/industrial/outline/orange, -/turf/simulated/floor/tiled/techfloor, -/area/thruster/d3starboard) -"LF" = ( -/obj/effect/floor_decal/spline/fancy/wood{ - dir = 8 - }, -/turf/simulated/floor/carpet, -/area/crew_quarters/recreation) -"LH" = ( -/obj/machinery/atmospherics/unary/vent_pump/tank{ - dir = 8; - external_pressure_bound = 0; - external_pressure_bound_default = 0; - icon_state = "map_vent_in"; - id_tag = "d3so2_out"; - initialize_directions = 1; - internal_pressure_bound = 4000; - internal_pressure_bound_default = 4000; - pressure_checks = 2; - pressure_checks_default = 2; - pump_direction = 0; - use_power = 1 - }, -/turf/simulated/floor/reinforced/oxygen, -/area/thruster/d3starboard) -"LI" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/light, -/turf/simulated/floor/tiled/dark, -/area/chapel/office) -"LK" = ( -/obj/effect/floor_decal/industrial/outline/grey, -/obj/machinery/computer/modular/preset/civilian{ - dir = 8; - icon_state = "console" - }, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/thirddeck/port) -"LL" = ( -/obj/structure/table/standard{ - name = "plastic table frame" - }, -/obj/item/lipstick/random{ - pixel_x = 5; - pixel_y = 3 - }, -/obj/item/device/flashlight/lamp/lava/red{ - pixel_x = -5; - pixel_y = -8; - pixel_z = 14 - }, -/turf/simulated/floor/tiled/freezer, -/area/crew_quarters/head) -"LM" = ( -/obj/effect/floor_decal/spline/fancy/black{ - dir = 4; - icon_state = "spline_fancy" - }, -/turf/simulated/floor/wood/maple, -/area/chapel/main) -"LN" = ( -/obj/effect/shuttle_landmark/skipjack/deck4{ - name = "3rd Deck, Aft Port" - }, -/turf/space, -/area/space) -"LO" = ( -/obj/machinery/sparker{ - id_tag = "engines"; - pixel_x = -24 - }, -/obj/machinery/atmospherics/unary/vent_pump/siphon/on/atmos{ - dir = 4; - internal_pressure_bound = 35000; - internal_pressure_bound_default = 35000 - }, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/floor/reinforced/airless, -/area/thruster/d3port) -"LP" = ( -/obj/structure/cable/green{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/turf/simulated/floor/reinforced/airless, -/area/space) -"LQ" = ( -/obj/item/flame/candle{ - pixel_x = 10; - pixel_y = 14 - }, -/obj/item/flame/candle{ - pixel_x = 13; - pixel_y = 5 - }, -/obj/item/flame/candle{ - pixel_x = 5; - pixel_y = 8 - }, -/obj/item/flame/candle{ - pixel_y = 11 - }, -/obj/item/flame/candle{ - pixel_x = -9; - pixel_y = 13 - }, -/obj/item/flame/candle{ - pixel_x = -5; - pixel_y = 4 - }, -/obj/item/flame/candle{ - pixel_x = -11; - pixel_y = 2 - }, -/obj/item/flame/candle{ - pixel_x = 8 - }, -/turf/simulated/floor/tiled/dark, -/area/chapel/memorial) -"LS" = ( -/obj/structure/table/gamblingtable, -/obj/item/reagent_containers/food/drinks/bottle/specialwhiskey, -/turf/simulated/floor/wood/walnut, -/area/crew_quarters/recreation) -"LT" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/catwalk, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, -/turf/simulated/floor/plating, -/area/maintenance/thirddeck/aftstarboard) -"LV" = ( -/obj/effect/wallframe_spawn/reinforced, -/obj/machinery/door/blast/shutters{ - density = 0; - dir = 2; - icon_state = "shutter0"; - id_tag = "hab_checkpoint_shutters"; - name = "Hangar Deck Checkpoint Shutters"; - opacity = 0 - }, -/obj/structure/cable/green{ - d2 = 4; - icon_state = "0-4" - }, -/turf/simulated/floor/plating, -/area/security/habcheck) -"LW" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/catwalk, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/maintenance/thirddeck/foreport) -"LX" = ( -/obj/machinery/firealarm{ - dir = 1; - pixel_x = 0; - pixel_y = -24 - }, -/turf/simulated/wall/prepainted, -/area/crew_quarters/sleep/cryo) -"LY" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9; - pixel_y = 0 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/thirddeck/foreport) -"Ma" = ( -/obj/machinery/atmospherics/valve/shutoff/supply, -/obj/structure/railing/mapped{ - dir = 8; - icon_state = "railing0-1" - }, -/obj/structure/railing/mapped, -/obj/machinery/atmospherics/valve/shutoff/scrubbers, -/turf/simulated/floor/plating, -/area/maintenance/thirddeck/foreport) -"Mb" = ( -/obj/effect/shuttle_landmark/ert/deck4{ - name = "3rd Deck, Starboard" - }, -/turf/space, -/area/space) -"Mf" = ( -/obj/structure/closet/emcloset, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/thirddeck/foreport) -"Mg" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 8 - }, -/obj/machinery/atmospherics/valve/digital{ - id_tag = "fuelmode" - }, -/obj/effect/floor_decal/industrial/outline/red, -/turf/simulated/floor/tiled/techfloor, -/area/thruster/d3port) -"Mh" = ( -/obj/effect/floor_decal/techfloor{ - dir = 4; - icon_state = "techfloor_edges" - }, -/obj/item/device/radio/intercom{ - dir = 1; - pixel_y = -28 - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 8 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/engineering/hardstorage) -"Mi" = ( -/obj/effect/floor_decal/corner/green, -/turf/simulated/floor/tiled, -/area/hallway/primary/thirddeck/aft) -"Mj" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/tiled/dark, -/area/chapel/main) -"Mn" = ( -/obj/structure/disposalpipe/segment{ - dir = 4; - icon_state = "pipe-c" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 1; - icon_state = "map-scrubbers" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 1 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/effect/floor_decal/corner/green{ - dir = 10; - icon_state = "corner_white" - }, -/turf/simulated/floor/tiled/monotile, -/area/hydroponics) -"Mo" = ( -/obj/effect/floor_decal/spline/fancy/wood{ - dir = 1; - icon_state = "spline_fancy" - }, -/turf/simulated/floor/carpet, -/area/crew_quarters/recreation) -"Mp" = ( -/obj/structure/cable/green{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, -/obj/structure/disposalpipe/segment{ - dir = 4; - icon_state = "pipe-c" - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/thirddeck/forestarboard) -"Ms" = ( -/obj/effect/floor_decal/corner/blue/diagonal{ - dir = 4 - }, -/obj/machinery/vending/hotfood, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/dark, -/area/vacant/mess) -"Mt" = ( -/obj/machinery/atmospherics/unary/outlet_injector{ - dir = 1; - injecting = 1; - use_power = 1 - }, -/turf/simulated/floor/airless, -/area/thruster/d3starboard) -"Mu" = ( -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/thirddeck/forestarboard) -"Mv" = ( -/obj/structure/noticeboard{ - pixel_y = 32 - }, -/turf/simulated/wall/prepainted, -/area/crew_quarters/galleybackroom) -"Mx" = ( -/turf/simulated/floor/tiled, -/area/hydroponics) -"My" = ( -/obj/structure/table/rack, -/obj/structure/window/reinforced{ - dir = 8 - }, -/obj/structure/window/reinforced{ - dir = 4 - }, -/obj/machinery/door/window/southright{ - name = "AI Maintenance" - }, -/obj/item/aiModule/solgov, -/obj/item/aiModule/reset, -/turf/simulated/floor/tiled/dark, -/area/turret_protected/ai_upload) -"Mz" = ( -/obj/structure/disposalpipe/segment, -/obj/effect/floor_decal/corner/green{ - dir = 10; - icon_state = "corner_white" - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/thirddeck/center) -"MB" = ( -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/effect/catwalk_plated, -/turf/simulated/floor/plating, -/area/hallway/primary/thirddeck/fore) -"MC" = ( -/obj/structure/table/marble, -/obj/machinery/cooker/candy, -/obj/effect/floor_decal/corner/grey/diagonal{ - dir = 4 - }, -/obj/machinery/alarm{ - dir = 4; - icon_state = "alarm0"; - pixel_x = -22; - pixel_y = 0 - }, -/turf/simulated/floor/tiled/white, -/area/crew_quarters/galley) -"MD" = ( -/obj/structure/sign/directions/science{ - dir = 1; - pixel_y = 3; - pixel_z = 0 - }, -/obj/structure/sign/directions/infirmary{ - dir = 1; - pixel_y = -4; - pixel_z = 0 - }, -/turf/simulated/wall/prepainted, -/area/hallway/primary/thirddeck/fore) -"ME" = ( -/obj/machinery/door/airlock/external{ - frequency = 1379; - id_tag = "bsa_in"; - locked = 1; - name = "Obstruction Field Disperser Maintenance Internal Airlock" - }, -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 4; - icon_state = "intact" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/command/disperser) -"MF" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/carpet, -/area/crew_quarters/recreation) -"MG" = ( -/turf/simulated/floor/tiled/dark, -/area/teleporter/thirddeck) -"MI" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/turf/simulated/floor/plating, -/area/maintenance/thirddeck/starboard) -"MJ" = ( -/obj/structure/disposalpipe/segment{ - dir = 4; - icon_state = "pipe-c" - }, -/obj/structure/railing/mapped, -/obj/structure/railing/mapped{ - dir = 8; - icon_state = "railing0-1" - }, -/turf/simulated/floor/plating, -/area/maintenance/thirddeck/starboard) -"ML" = ( -/turf/simulated/wall/prepainted, -/area/turret_protected/ai_upload) -"MM" = ( -/turf/simulated/wall/r_wall/hull, -/area/hallway/primary/thirddeck/aft) -"MN" = ( -/obj/structure/sign/directions/security{ - dir = 1; - pixel_y = 12; - pixel_z = 0 - }, -/turf/simulated/wall/prepainted, -/area/storage/tools) -"MP" = ( -/obj/machinery/computer/modular/preset/civilian{ - dir = 1; - icon_state = "console" - }, -/obj/structure/window/reinforced{ - dir = 4 - }, -/obj/structure/window/reinforced{ - dir = 8 - }, -/turf/simulated/floor/wood/walnut, -/area/crew_quarters/recreation) -"MR" = ( -/obj/machinery/air_sensor{ - id_tag = "d3po2_sensor" - }, -/turf/simulated/floor/reinforced/oxygen, -/area/thruster/d3port) -"MS" = ( -/obj/machinery/firealarm{ - dir = 2; - pixel_y = 24 - }, -/obj/effect/floor_decal/corner/green{ - dir = 5 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/thirddeck/center) -"MU" = ( -/obj/effect/floor_decal/corner/yellow/half, -/turf/simulated/floor/tiled/dark, -/area/engineering/hardstorage) -"MV" = ( -/obj/item/storage/secure/safe{ - pixel_x = 5; - pixel_y = 25 - }, -/obj/machinery/alarm{ - dir = 8; - pixel_x = 24 - }, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 8 - }, -/turf/simulated/floor/carpet, -/area/crew_quarters/sleep/bunk) -"MW" = ( -/obj/machinery/atmospherics/binary/passive_gate/on{ - dir = 1; - target_pressure = 2000; - use_power = 1 - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 8 - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled/techfloor, -/area/thruster/d3port) -"MX" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/turf/simulated/floor/tiled/freezer, -/area/crew_quarters/head) -"MY" = ( -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/catwalk, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/plating, -/area/maintenance/thirddeck/forestarboard) -"MZ" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 8 - }, -/turf/simulated/floor/tiled/dark, -/area/chapel/main) -"Na" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/simple/visible/fuel, -/obj/structure/catwalk, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/plating, -/area/maintenance/thirddeck/aftstarboard) -"Nb" = ( -/obj/effect/shuttle_landmark/merc/deck4{ - name = "3rd Deck, Port" - }, -/turf/space, -/area/space) -"Nc" = ( -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 4 - }, -/obj/structure/railing/mapped{ - dir = 8; - icon_state = "railing0-1" - }, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/plating, -/area/maintenance/thirddeck/aftport) -"Nd" = ( -/obj/structure/table/standard, -/obj/item/device/radio/intercom{ - dir = 4; - pixel_x = -21 - }, -/obj/item/storage/box/cups{ - pixel_x = 2; - pixel_y = 2 - }, -/obj/item/storage/box/cups, -/turf/simulated/floor/tiled, -/area/crew_quarters/gym) -"Ne" = ( -/obj/structure/lattice, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/simulated/open, -/area/maintenance/thirddeck/aftport) -"Nf" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/tiled, -/area/hallway/primary/thirddeck/aft) -"Ng" = ( -/obj/machinery/alarm{ - dir = 1; - pixel_y = -24 - }, -/turf/simulated/floor/tiled/dark, -/area/turret_protected/ai_upload_foyer) -"Nj" = ( -/obj/effect/floor_decal/industrial/outline/grey, -/obj/machinery/portable_atmospherics/canister/empty/carbon_dioxide, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/thirddeck/port) -"Nm" = ( -/obj/structure/table/woodentable/maple, -/turf/simulated/floor/carpet/purple, -/area/chapel/office) -"Nn" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/effect/floor_decal/industrial/warning/fulltile, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/tiled/steel_grid, -/area/hallway/primary/thirddeck/center) -"Nq" = ( -/obj/structure/closet/crate/trashcart, -/obj/random/junk, -/obj/random/junk, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/thirddeck/aftport) -"Ns" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 1 - }, -/obj/effect/floor_decal/corner/red/half{ - dir = 4; - icon_state = "bordercolorhalf" - }, -/obj/item/device/radio/intercom/department/security{ - dir = 8; - icon_state = "intercom"; - pixel_x = 21 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/security/habcheck) -"Nt" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/tcommsat/chamber) -"Nu" = ( -/obj/machinery/meter, -/obj/machinery/atmospherics/pipe/simple/visible/cyan, -/obj/effect/wallframe_spawn/reinforced_phoron, -/turf/simulated/floor/reinforced, -/area/thruster/d3port) -"Nv" = ( -/obj/effect/floor_decal/spline/fancy/wood, -/obj/structure/bed/chair/comfy/brown, -/turf/simulated/floor/carpet, -/area/crew_quarters/recreation) -"Nw" = ( -/obj/effect/wallframe_spawn/no_grille, -/obj/machinery/door/firedoor, -/turf/simulated/floor/plating, -/area/crew_quarters/mess) -"Nx" = ( -/obj/machinery/light{ - dir = 1 - }, -/turf/simulated/floor/wood, -/area/crew_quarters/gym) -"Ny" = ( -/obj/machinery/power/apc{ - dir = 8; - name = "west bump"; - pixel_x = -24 - }, -/obj/structure/cable/green{ - d2 = 2; - icon_state = "0-2" - }, -/obj/structure/table/rack, -/obj/random/maintenance/solgov, -/obj/random/maintenance/solgov, -/obj/random/maintenance/solgov, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/thirddeck/port) -"Nz" = ( -/obj/item/device/radio/intercom/locked/confessional{ - pixel_x = 0; - pixel_y = 23 - }, -/obj/item/paper_bin, -/obj/item/pen, -/obj/machinery/light{ - dir = 4; - icon_state = "tube1" - }, -/obj/structure/table/woodentable/maple, -/turf/simulated/floor/carpet/purple, -/area/chapel/main) -"NA" = ( -/obj/effect/floor_decal/industrial/warning/fulltile, -/obj/machinery/light{ - dir = 1 - }, -/turf/simulated/floor/tiled/steel_grid, -/area/hallway/primary/thirddeck/center) -"NB" = ( -/obj/machinery/firealarm{ - dir = 4; - pixel_x = 24 - }, -/turf/simulated/floor/tiled/monotile, -/area/crew_quarters/gym) -"NC" = ( -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/tcommsat/chamber) -"ND" = ( -/obj/structure/sign/warning/server_room, -/turf/simulated/wall/prepainted, -/area/tcommsat/computer) -"NE" = ( -/obj/effect/floor_decal/corner/green{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/thirddeck/fore) -"NF" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/civilian{ - name = "Lounge" - }, -/turf/simulated/floor/tiled/white/monotile, -/area/crew_quarters/sleep/cryo) -"NH" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/thirddeck/starboard) -"NI" = ( -/obj/machinery/photocopier, -/turf/simulated/floor/lino, -/area/crew_quarters/office) -"NJ" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/maintenance/thirddeck/foreport) -"NK" = ( -/obj/structure/sign/warning/vent_port, -/turf/simulated/wall/r_wall/hull, -/area/thruster/d3starboard) -"NL" = ( -/obj/machinery/portable_atmospherics/hydroponics/soil, -/obj/machinery/hologram/holopad/longrange, -/turf/simulated/floor/grass, -/area/crew_quarters/observation) -"NM" = ( -/obj/machinery/jukebox/old, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plating, -/area/vacant/mess) -"NN" = ( -/obj/effect/floor_decal/spline/plain/red, -/obj/structure/window/reinforced, -/obj/machinery/light{ - dir = 4 - }, -/turf/simulated/floor/wood, -/area/crew_quarters/gym) -"NO" = ( -/obj/random_multi/single_item/punitelly, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plating, -/area/vacant/mess) -"NQ" = ( -/obj/machinery/atmospherics/unary/vent_pump/high_volume{ - controlled = 0; - internal_pressure_bound = 35000; - internal_pressure_bound_default = 35000; - pressure_checks = 2; - pressure_checks_default = 2; - use_power = 1 - }, -/turf/simulated/floor/airless, -/area/thruster/d3starboard) -"NS" = ( -/obj/structure/sign/warning/hot_exhaust{ - dir = 1; - icon_state = "fire" - }, -/turf/simulated/wall/ocp_wall, -/area/thruster/d3starboard) -"NV" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/catwalk, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, -/turf/simulated/floor/plating, -/area/maintenance/thirddeck/foreport) -"NW" = ( -/obj/effect/floor_decal/corner/blue/diagonal{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/obj/random/junk, -/turf/simulated/floor/tiled/dark, -/area/vacant/mess) -"NY" = ( -/turf/simulated/floor/tiled/techfloor/grid, -/area/crew_quarters/safe_room/thirddeck) -"NZ" = ( -/obj/machinery/door/morgue{ - dir = 2; - name = "Confession Booth" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/chapel/main) -"Oa" = ( -/obj/machinery/atmospherics/unary/outlet_injector{ - frequency = 1447; - id = "fuelmode"; - injecting = 1; - use_power = 1; - volume_rate = 4000 - }, -/obj/effect/floor_decal/industrial/outline/red, -/turf/simulated/floor/reinforced/airless, -/area/thruster/d3port) -"Ob" = ( -/obj/effect/shuttle_landmark/torch/deck4/aquila{ - name = "3rd Deck, Fore" - }, -/turf/space, -/area/space) -"Oc" = ( -/obj/machinery/vending/fitness{ - dir = 4; - icon_state = "fitness" - }, -/turf/simulated/floor/tiled, -/area/crew_quarters/gym) -"Od" = ( -/obj/effect/floor_decal/corner/grey/diagonal{ - dir = 4 - }, -/obj/machinery/atmospherics/unary/vent_pump/on, -/obj/structure/table/marble, -/obj/machinery/reagent_temperature, -/turf/simulated/floor/tiled/white, -/area/crew_quarters/galley) -"Oe" = ( -/obj/machinery/atmospherics/unary/vent_pump/on, -/obj/machinery/light{ - dir = 1 - }, -/obj/machinery/smartfridge/drying_rack, -/obj/effect/floor_decal/corner/green/mono, -/obj/item/device/radio/intercom{ - dir = 4; - pixel_x = -21 - }, -/turf/simulated/floor/tiled/monotile, -/area/hydroponics/storage) -"Of" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/disposalpipe/segment, -/obj/effect/catwalk_plated, -/obj/machinery/firealarm{ - dir = 4; - pixel_x = 24 - }, -/turf/simulated/floor/plating, -/area/hallway/primary/thirddeck/fore) -"Og" = ( -/obj/structure/table/standard, -/obj/item/paper_bin{ - pixel_x = -3; - pixel_y = 7 - }, -/obj/item/pen/green, -/obj/item/device/radio/intercom{ - dir = 4; - pixel_x = -21 - }, -/turf/simulated/floor/lino, -/area/crew_quarters/office) -"Oj" = ( -/obj/effect/floor_decal/industrial/outline/grey, -/obj/structure/table/steel, -/obj/random/maintenance/solgov, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/thirddeck/port) -"Ok" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/effect/floor_decal/spline/fancy/wood{ - dir = 5; - icon_state = "spline_fancy" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/carpet, -/area/crew_quarters/recreation) -"Ol" = ( -/obj/random_multi/single_item/runtime, -/turf/simulated/floor/tiled/freezer, -/area/crew_quarters/galleybackroom) -"Om" = ( -/obj/machinery/firealarm{ - dir = 4; - pixel_x = 21 - }, -/turf/simulated/floor/wood/walnut, -/area/crew_quarters/recreation) -"Op" = ( -/obj/structure/cable/green{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/structure/bed/chair{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/hydroponics) -"Oq" = ( -/obj/effect/floor_decal/corner/green{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/thirddeck/aft) -"Or" = ( -/obj/machinery/atmospherics/pipe/simple/visible/fuel, -/obj/structure/sign/warning/hot_exhaust{ - dir = 1; - icon_state = "fire" - }, -/turf/simulated/wall/ocp_wall, -/area/thruster/d3port) -"Ot" = ( -/obj/structure/railing/mapped{ - dir = 8; - icon_state = "railing0-1" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/plating, -/area/maintenance/thirddeck/starboard) -"Ou" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/door/firedoor, -/turf/simulated/floor/tiled/techfloor/grid, -/area/maintenance/thirddeck/foreport) -"Ov" = ( -/obj/machinery/atmospherics/valve/shutoff/supply{ - dir = 4 - }, -/obj/structure/railing/mapped, -/obj/machinery/atmospherics/valve/shutoff/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/maintenance/thirddeck/port) -"Ow" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/turf/simulated/floor/tiled/dark, -/area/command/disperser) -"Ox" = ( -/obj/random_multi/single_item/poppy, -/turf/simulated/floor/tiled/dark, -/area/vacant/cabin) -"Oy" = ( -/obj/effect/floor_decal/corner/green{ - dir = 5 - }, -/turf/simulated/floor/tiled, -/area/hydroponics) -"Oz" = ( -/obj/machinery/light/small{ - dir = 1 - }, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/thirddeck/foreport) -"OA" = ( -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/thirddeck/aftstarboard) -"OB" = ( -/obj/effect/floor_decal/corner/blue/diagonal{ - dir = 4 - }, -/obj/structure/bookcase, -/obj/item/book/manual/sol_sop, -/obj/item/book/manual/solgov_law, -/obj/item/book/manual/military_law, -/obj/item/book/manual/nt_regs, -/turf/simulated/floor/tiled/white, -/area/crew_quarters/mess) -"OC" = ( -/obj/effect/floor_decal/techfloor{ - dir = 4; - icon_state = "techfloor_edges" - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark, -/area/teleporter/thirddeck) -"OE" = ( -/obj/effect/floor_decal/industrial/outline/grey, -/obj/machinery/portable_atmospherics/powered/pump/filled, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/thirddeck/starboard) -"OG" = ( -/obj/structure/bed/chair/office/comfy, -/obj/machinery/button/windowtint{ - id = "chapoff_windows"; - pixel_x = 6; - pixel_y = 24 - }, -/obj/item/device/radio/intercom{ - dir = 8; - pixel_x = 22; - pixel_y = 4 - }, -/turf/simulated/floor/carpet/purple, -/area/chapel/office) -"OH" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 8 - }, -/obj/machinery/atmospherics/valve/digital{ - id_tag = "fuelmode" - }, -/obj/effect/floor_decal/industrial/outline/red, -/turf/simulated/floor/tiled/techfloor, -/area/thruster/d3starboard) -"OI" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/effect/floor_decal/industrial/warning/fulltile, -/turf/simulated/floor/tiled/steel_grid, -/area/hallway/primary/thirddeck/center) -"OJ" = ( -/obj/effect/floor_decal/spline/fancy/wood, -/turf/simulated/floor/carpet, -/area/crew_quarters/recreation) -"OK" = ( -/obj/machinery/atmospherics/pipe/simple/visible/cyan{ - dir = 4 - }, -/turf/simulated/wall/r_wall/hull, -/area/thruster/d3port) -"OL" = ( -/obj/structure/bed/chair/office/dark{ - dir = 1; - icon_state = "officechair_preview" - }, -/turf/simulated/floor/carpet/purple, -/area/chapel/office) -"OM" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/tcommsat/chamber) -"OO" = ( -/obj/machinery/alarm{ - dir = 8; - icon_state = "alarm0"; - pixel_x = 24 - }, -/obj/structure/table/steel, -/obj/random/junk, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/thirddeck/port) -"OP" = ( -/obj/structure/closet/wardrobe/pjs, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 1 - }, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/floor/tiled/dark/monotile, -/area/crew_quarters/sleep/bunk) -"OQ" = ( -/obj/machinery/computer/ship/navigation{ - dir = 4; - icon_state = "computer" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/blue{ - dir = 10; - icon_state = "intact" - }, -/turf/simulated/floor/tiled/monotile, -/area/command/disperser) -"OS" = ( -/obj/machinery/atmospherics/binary/pump/on{ - dir = 4; - target_pressure = 15000 - }, -/obj/effect/floor_decal/industrial/outline/orange, -/turf/simulated/floor/tiled/techfloor, -/area/thruster/d3port) -"OT" = ( -/obj/machinery/portable_atmospherics/canister/phoron, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/alarm{ - dir = 8; - pixel_x = 25; - pixel_y = 0 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/engineering/hardstorage) -"OW" = ( -/obj/structure/sign/directions/engineering{ - dir = 1; - pixel_y = 3; - pixel_z = 0 - }, -/obj/structure/sign/directions/infirmary{ - dir = 1; - pixel_y = -4; - pixel_z = 0 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/effect/wallframe_spawn/no_grille, -/turf/simulated/floor/plating, -/area/hallway/primary/thirddeck/aft) -"OX" = ( -/obj/machinery/alarm{ - dir = 4; - icon_state = "alarm0"; - pixel_x = -22; - pixel_y = 0 - }, -/obj/machinery/vending/boozeomat, -/turf/simulated/floor/tiled/dark, -/area/crew_quarters/bar) -"OY" = ( -/obj/effect/floor_decal/corner/green{ - dir = 10 - }, -/obj/machinery/door/airlock/glass/civilian, -/obj/machinery/door/firedoor, -/turf/simulated/floor/tiled/steel_ridged, -/area/hallway/primary/thirddeck/aft) -"OZ" = ( -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/door/airlock/maintenance{ - name = "Lounge Maintenance" - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/steel_ridged, -/area/maintenance/thirddeck/port) -"Pa" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/turf/simulated/floor/tiled/monotile, -/area/crew_quarters/gym) -"Pc" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/wood/walnut, -/area/crew_quarters/recreation) -"Pd" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/railing/mapped, -/turf/simulated/floor/plating, -/area/maintenance/thirddeck/starboard) -"Pg" = ( -/obj/structure/closet/secure_closet/chaplain, -/turf/simulated/floor/carpet/purple, -/area/chapel/office) -"Pj" = ( -/obj/structure/railing/mapped{ - dir = 8; - icon_state = "railing0-1" - }, -/turf/simulated/open, -/area/maintenance/thirddeck/port) -"Pl" = ( -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 1; - icon_state = "warningcorner" - }, -/turf/simulated/floor/airless, -/area/command/disperser) -"Pn" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/floor_decal/corner/green{ - dir = 10; - icon_state = "corner_white" - }, -/obj/machinery/beehive, -/turf/simulated/floor/tiled, -/area/hydroponics) -"Po" = ( -/obj/structure/disposalpipe/segment{ - dir = 4; - icon_state = "pipe-c" - }, -/turf/simulated/floor/plating, -/area/maintenance/thirddeck/starboard) -"Pp" = ( -/turf/simulated/floor/tiled/dark, -/area/command/disperser) -"Pq" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold4w/visible/fuel, -/turf/simulated/floor/tiled/techfloor, -/area/thruster/d3port) -"Pr" = ( -/obj/effect/floor_decal/corner/yellow{ - dir = 9 - }, -/obj/machinery/alarm{ - dir = 4; - pixel_x = -23; - pixel_y = 0 - }, -/obj/structure/ladder/up, -/turf/simulated/floor/tiled/steel_grid, -/area/hallway/primary/thirddeck/aft) -"Ps" = ( -/obj/effect/floor_decal/techfloor, -/obj/structure/bed/chair{ - dir = 1 - }, -/turf/simulated/floor/tiled/techfloor, -/area/crew_quarters/safe_room/thirddeck) -"Pw" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/white, -/area/crew_quarters/sleep/cryo) -"Px" = ( -/obj/structure/catwalk, -/obj/structure/cable/green{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/turf/simulated/floor/plating, -/area/maintenance/thirddeck/foreport) -"Pz" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9; - pixel_y = 0 - }, -/obj/effect/floor_decal/spline/fancy/wood{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/turf/simulated/floor/carpet, -/area/crew_quarters/recreation) -"PA" = ( -/obj/structure/sign/directions/science{ - dir = 1; - pixel_x = 0; - pixel_y = 12; - pixel_z = 0 - }, -/turf/simulated/wall/prepainted, -/area/storage/tools) -"PB" = ( -/obj/machinery/portable_atmospherics/powered/pump/filled, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/thirddeck/foreport) -"PC" = ( -/obj/structure/lattice, -/obj/machinery/meter, -/obj/machinery/atmospherics/pipe/simple/visible/blue, -/obj/effect/wallframe_spawn/reinforced_phoron, -/turf/simulated/floor/reinforced, -/area/thruster/d3starboard) -"PE" = ( -/obj/effect/floor_decal/techfloor{ - dir = 9; - icon_state = "techfloor_edges" - }, -/obj/machinery/alarm{ - dir = 4; - pixel_x = -23; - pixel_y = 0 - }, -/obj/structure/bed/chair, -/turf/simulated/floor/tiled/techfloor, -/area/crew_quarters/safe_room/thirddeck) -"PF" = ( -/obj/effect/floor_decal/corner/blue/diagonal{ - dir = 4 - }, -/obj/structure/table/steel, -/obj/item/board, -/obj/machinery/firealarm{ - dir = 8; - pixel_x = -24; - pixel_y = 0 - }, -/turf/simulated/floor/tiled/dark, -/area/vacant/mess) -"PG" = ( -/obj/effect/floor_decal/spline/plain/red, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, -/turf/simulated/floor/wood, -/area/crew_quarters/gym) -"PH" = ( -/obj/effect/floor_decal/corner/green/half, -/obj/structure/flora/pottedplant/minitree, -/obj/machinery/light/spot, -/turf/simulated/floor/tiled/dark/monotile, -/area/crew_quarters/observation) -"PI" = ( -/obj/structure/closet/chefcloset_torch, -/turf/simulated/floor/tiled/freezer, -/area/crew_quarters/galleybackroom) -"PJ" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled/white/monotile, -/area/crew_quarters/sleep/cryo) -"PL" = ( -/obj/machinery/atmospherics/unary/vent_pump/siphon/on/atmos{ - dir = 1; - internal_pressure_bound = 35000; - internal_pressure_bound_default = 35000 - }, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/floor/reinforced/airless, -/area/thruster/d3starboard) -"PM" = ( -/obj/machinery/portable_atmospherics/powered/pump/filled, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/thirddeck/port) -"PN" = ( -/obj/machinery/atmospherics/portables_connector{ - dir = 8 - }, -/obj/effect/floor_decal/industrial/hatch/orange, -/obj/machinery/light/small{ - dir = 8 - }, -/obj/machinery/firealarm{ - dir = 1; - pixel_x = 0; - pixel_y = -24 - }, -/turf/simulated/floor/tiled/techfloor, -/area/thruster/d3starboard) -"PO" = ( -/obj/effect/floor_decal/corner/blue/diagonal{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/white, -/area/crew_quarters/mess) -"PP" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/plating, -/area/maintenance/thirddeck/starboard) -"PQ" = ( -/obj/structure/table/rack{ - dir = 8 - }, -/obj/item/stack/material/glass/phoronrglass{ - amount = 20 - }, -/obj/item/stack/material/glass/phoronrglass{ - amount = 20 - }, -/obj/item/stack/material/titanium/ten, -/obj/item/stack/material/titanium/ten, -/obj/item/stack/material/titanium/ten, -/obj/item/stack/material/titanium/ten, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/engineering/hardstorage) -"PT" = ( -/obj/effect/floor_decal/corner/lime/three_quarters{ - dir = 4 - }, -/obj/machinery/vending/coffee{ - dir = 8 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/thirddeck/aft) -"PV" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/monotile, -/area/hallway/primary/thirddeck/fore) -"PW" = ( -/obj/machinery/atmospherics/pipe/simple/visible/fuel{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/door/airlock/hatch/maintenance, -/obj/machinery/door/firedoor, -/turf/simulated/floor/tiled/steel_ridged, -/area/thruster/d3starboard) -"PX" = ( -/obj/effect/floor_decal/corner/green/half{ - dir = 1; - icon_state = "bordercolorhalf" - }, -/turf/simulated/floor/tiled/monotile, -/area/hallway/primary/thirddeck/aft) -"PY" = ( -/obj/machinery/atmospherics/pipe/manifold/visible/fuel{ - dir = 4 - }, -/turf/simulated/floor/reinforced/airless, -/area/thruster/d3starboard) -"Qd" = ( -/obj/structure/reagent_dispensers/water_cooler{ - dir = 4; - icon_state = "water_cooler" - }, -/turf/simulated/floor/tiled, -/area/crew_quarters/gym) -"Qe" = ( -/obj/machinery/smartfridge, -/obj/machinery/door/firedoor, -/turf/simulated/floor/tiled, -/area/hydroponics/storage) -"Qf" = ( -/obj/structure/hygiene/faucet, -/turf/simulated/floor/pool, -/area/crew_quarters/observation) -"Qi" = ( -/obj/machinery/atmospherics/binary/pump/high_power/on{ - dir = 1; - target_pressure = 3000 - }, -/turf/simulated/wall/ocp_wall, -/area/thruster/d3port) -"Qj" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 1 - }, -/turf/simulated/floor/tiled/dark, -/area/command/disperser) -"Qk" = ( -/obj/machinery/button/blast_door{ - id_tag = "d3portnacelle"; - name = "combustion chamber blast door control"; - pixel_x = 0; - pixel_y = 24 - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/visible/fuel{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor, -/area/thruster/d3port) -"Ql" = ( -/obj/structure/railing/mapped{ - dir = 1; - icon_state = "railing0-1" - }, -/obj/structure/railing/mapped{ - dir = 4; - icon_state = "railing0-1" - }, -/turf/simulated/floor/plating, -/area/maintenance/thirddeck/port) -"Qm" = ( -/obj/machinery/light/small{ - dir = 4; - pixel_y = 8 - }, -/obj/structure/railing/mapped{ - dir = 8; - icon_state = "railing0-1" - }, -/obj/structure/disposalpipe/segment{ - dir = 8; - icon_state = "pipe-c" - }, -/turf/simulated/floor/plating, -/area/maintenance/thirddeck/aftport) -"Qn" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/item/device/radio/intercom{ - dir = 1; - pixel_y = -28 - }, -/obj/structure/table/standard, -/obj/machinery/reagentgrinder/juicer, -/obj/item/reagent_containers/glass/beaker{ - pixel_x = 5 - }, -/obj/item/reagent_containers/glass/beaker{ - pixel_x = 5 - }, -/obj/effect/floor_decal/corner/green{ - dir = 10; - icon_state = "corner_white" - }, -/turf/simulated/floor/tiled, -/area/hydroponics) -"Qq" = ( -/turf/simulated/wall/r_wall/hull, -/area/command/disperser) -"Qr" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/visible/fuel, -/turf/simulated/floor/tiled/techfloor, -/area/thruster/d3starboard) -"Qs" = ( -/obj/effect/floor_decal/corner/green{ - dir = 5 - }, -/obj/structure/disposalpipe/segment, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled, -/area/hallway/primary/thirddeck/aft) -"Qu" = ( -/obj/effect/floor_decal/corner/grey/diagonal{ - dir = 4 - }, -/obj/machinery/smartfridge/foods, -/obj/machinery/door/blast/shutters{ - dir = 2; - id_tag = "kitchen"; - name = "Kitchen Shutters" - }, -/turf/simulated/floor/tiled/white, -/area/crew_quarters/galley) -"Qv" = ( -/obj/machinery/computer/modular/preset/security, -/obj/effect/floor_decal/corner/red{ - dir = 5 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/turf/simulated/floor/tiled/dark, -/area/security/habcheck) -"Qx" = ( -/obj/machinery/computer/modular/preset/security, -/obj/effect/floor_decal/corner/red/mono, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/security/habcheck) -"Qy" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/catwalk, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/light/small{ - dir = 1 - }, -/turf/simulated/floor/plating, -/area/maintenance/thirddeck/port) -"Qz" = ( -/obj/machinery/alarm{ - dir = 1; - icon_state = "alarm0"; - pixel_y = -22 - }, -/obj/random_multi/single_item/punitelly, -/turf/simulated/floor/tiled/techfloor, -/area/crew_quarters/safe_room/thirddeck) -"QC" = ( -/turf/simulated/floor/tiled/monotile, -/area/vacant/brig) -"QE" = ( -/obj/structure/table/rack, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 4 - }, -/obj/item/device/binoculars, -/obj/effect/floor_decal/corner/red{ - dir = 5 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/dark, -/area/security/habcheck) -"QF" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/effect/floor_decal/corner/green/half, -/turf/simulated/floor/tiled/monotile, -/area/hallway/primary/thirddeck/aft) -"QH" = ( -/obj/structure/bed/chair/office/dark{ - dir = 8 - }, -/turf/simulated/floor/lino, -/area/crew_quarters/office) -"QJ" = ( -/obj/machinery/atmospherics/unary/vent_pump/on, -/turf/simulated/floor/tiled, -/area/hallway/primary/thirddeck/fore) -"QK" = ( -/obj/machinery/firealarm{ - dir = 2; - pixel_y = 24 - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 8 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/engineering/hardstorage) -"QL" = ( -/obj/effect/floor_decal/industrial/hatch/yellow, -/obj/structure/ship_munition/disperser_charge/mining, -/turf/simulated/floor/tiled/dark, -/area/command/disperser) -"QM" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/disposalpipe/segment, -/obj/effect/floor_decal/corner/green{ - dir = 5 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/thirddeck/center) -"QQ" = ( -/obj/effect/wallframe_spawn/no_grille, -/obj/machinery/door/firedoor, -/turf/simulated/floor/plating, -/area/crew_quarters/observation) -"QR" = ( -/obj/machinery/light/small{ - dir = 4; - icon_state = "bulb1" - }, -/turf/simulated/wall/prepainted, -/area/maintenance/thirddeck/forestarboard) -"QS" = ( -/obj/structure/reagent_dispensers/watertank, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/thirddeck/forestarboard) -"QT" = ( -/obj/structure/table/rack, -/obj/random/maintenance/solgov, -/turf/simulated/floor/tiled/monotile, -/area/maintenance/thirddeck/starboard) -"QU" = ( -/obj/structure/railing/mapped{ - dir = 4; - icon_state = "railing0-1" - }, -/turf/simulated/floor/plating, -/area/maintenance/thirddeck/aftstarboard) -"QV" = ( -/obj/effect/floor_decal/spline/plain/red, -/obj/structure/window/reinforced, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 8 - }, -/turf/simulated/floor/wood, -/area/crew_quarters/gym) -"QX" = ( -/obj/machinery/atmospherics/pipe/simple/visible/fuel, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/door/airlock/hatch/maintenance, -/obj/machinery/door/firedoor, -/turf/simulated/floor/tiled/steel_ridged, -/area/thruster/d3starboard) -"QY" = ( -/obj/structure/railing/mapped, -/obj/effect/floor_decal/industrial/warning{ - dir = 8 - }, -/turf/simulated/floor/plating, -/area/maintenance/thirddeck/starboard) -"QZ" = ( -/obj/structure/lattice, -/obj/machinery/atmospherics/pipe/simple/visible/blue, -/obj/machinery/meter, -/obj/effect/wallframe_spawn/reinforced_phoron, -/turf/simulated/floor/reinforced, -/area/thruster/d3port) -"Ra" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/catwalk, -/obj/effect/floor_decal/industrial/warning, -/turf/simulated/floor/plating, -/area/maintenance/thirddeck/aftport) -"Re" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/dark, -/area/chapel/office) -"Rf" = ( -/turf/simulated/floor/wood, -/area/crew_quarters/gym) -"Rh" = ( -/obj/machinery/door/airlock/highsecurity{ - name = "AI Upload" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/techfloor, -/area/turret_protected/ai_upload) -"Ri" = ( -/obj/structure/sign/warning/fire{ - dir = 2 - }, -/turf/simulated/wall/ocp_wall, -/area/thruster/d3port) -"Rk" = ( -/obj/random/maintenance/solgov/clean, -/obj/random/maintenance/solgov/clean, -/obj/random/maintenance/solgov/clean, -/obj/structure/closet/secure_closet/crew, -/obj/effect/floor_decal/corner/lime{ - dir = 10 - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled/monotile, -/area/crew_quarters/cryolocker) -"Rl" = ( -/obj/effect/floor_decal/industrial/hatch, -/obj/structure/closet/crate{ - name = "hermes crate" - }, -/turf/simulated/floor/tiled/dark, -/area/command/disperser) -"Rm" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/chaplain{ - name = "Chaplain's Office" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/chapel/office) -"Rn" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/light, -/obj/structure/table/standard, -/obj/effect/floor_decal/corner/green{ - dir = 10; - icon_state = "corner_white" - }, -/turf/simulated/floor/tiled, -/area/hydroponics) -"Ro" = ( -/obj/machinery/power/apc{ - dir = 4; - name = "east bump"; - pixel_x = 24 - }, -/obj/structure/cable/green{ - d2 = 8; - icon_state = "0-8" - }, -/turf/simulated/floor/tiled, -/area/crew_quarters/gym) -"Rq" = ( -/obj/machinery/status_display, -/turf/simulated/wall/prepainted, -/area/crew_quarters/galley) -"Rr" = ( -/obj/structure/cable{ - d1 = 32; - d2 = 1; - icon_state = "32-1" - }, -/obj/structure/railing/mapped{ - dir = 1; - icon_state = "railing0-1" - }, -/obj/structure/lattice, -/obj/machinery/atmospherics/pipe/simple/visible/fuel{ - dir = 9 - }, -/turf/simulated/open, -/area/maintenance/thirddeck/aftport) -"Rs" = ( -/obj/structure/catwalk, -/obj/structure/cable{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/turf/simulated/floor/plating, -/area/maintenance/thirddeck/aftstarboard) -"Rv" = ( -/obj/machinery/light/small{ - dir = 1 - }, -/obj/machinery/meter, -/obj/effect/floor_decal/industrial/warning{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/visible/fuel, -/turf/simulated/floor/tiled/techfloor, -/area/thruster/d3port) -"Ry" = ( -/obj/machinery/alarm/cold{ - dir = 4; - icon_state = "alarm0"; - pixel_x = -22 - }, -/turf/simulated/floor/tiled/freezer, -/area/crew_quarters/galleybackroom) -"RA" = ( -/obj/machinery/camera/network/third_deck{ - c_tag = "Third Deck Saferoom" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/crew_quarters/safe_room/thirddeck) -"RB" = ( -/obj/structure/catwalk, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/plating, -/area/maintenance/thirddeck/starboard) -"RC" = ( -/obj/effect/floor_decal/corner/green{ - dir = 10 - }, -/obj/structure/disposalpipe/segment{ - dir = 2; - icon_state = "pipe-c" - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/thirddeck/aft) -"RE" = ( -/obj/machinery/alarm{ - pixel_y = 16 - }, -/obj/structure/hygiene/shower{ - dir = 8; - icon_state = "shower"; - pixel_x = 0; - pixel_y = 0 - }, -/turf/simulated/floor/tiled/freezer, -/area/crew_quarters/head) -"RF" = ( -/obj/random/junk, -/turf/simulated/floor/tiled, -/area/maintenance/thirddeck/starboard) -"RG" = ( -/turf/simulated/wall/prepainted, -/area/chapel/main) -"RH" = ( -/obj/machinery/atmospherics/pipe/simple/visible/fuel{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/door/airlock/hatch/maintenance, -/obj/machinery/door/firedoor, -/turf/simulated/floor/tiled/steel_ridged, -/area/thruster/d3port) -"RI" = ( -/obj/machinery/atmospherics/pipe/simple/visible/fuel, -/obj/structure/sign/warning/hot_exhaust, -/turf/simulated/wall/ocp_wall, -/area/thruster/d3starboard) -"RM" = ( -/obj/machinery/atmospherics/valve/digital{ - dir = 4; - id_tag = "fuelmode" - }, -/obj/effect/floor_decal/industrial/warning, -/obj/effect/floor_decal/industrial/outline/red, -/turf/simulated/floor/tiled/techfloor, -/area/thruster/d3starboard) -"RN" = ( -/obj/effect/floor_decal/corner/blue/diagonal{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/crew_quarters/mess) -"RP" = ( -/obj/machinery/door/airlock/glass/civilian{ - name = "Observation" - }, -/obj/machinery/door/firedoor, -/turf/simulated/floor/tiled/steel_ridged, -/area/crew_quarters/observation) -"RQ" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/simulated/floor/tiled/monotile, -/area/hallway/primary/thirddeck/center) -"RR" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/item/flame/candle/scented/incense{ - pixel_x = 12; - pixel_y = 12 - }, -/obj/effect/floor_decal/corner/purple{ - dir = 9 - }, -/turf/simulated/floor/tiled/dark, -/area/chapel/memorial) -"RS" = ( -/obj/machinery/atmospherics/pipe/simple/visible/cyan{ - dir = 10; - icon_state = "intact" - }, -/obj/machinery/meter, -/obj/effect/wallframe_spawn/reinforced_phoron, -/turf/simulated/floor/reinforced, -/area/thruster/d3port) -"RT" = ( -/obj/structure/table/rack, -/obj/random/maintenance/solgov, -/obj/random/maintenance/solgov, -/obj/random/maintenance/solgov, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/thirddeck/port) -"RV" = ( -/obj/machinery/portable_atmospherics/powered/pump/filled, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/thirddeck/foreport) -"RW" = ( -/obj/machinery/light{ - dir = 8 - }, -/obj/machinery/vending/fitness{ - dir = 4; - icon_state = "fitness" - }, -/turf/simulated/floor/tiled, -/area/crew_quarters/gym) -"RX" = ( -/obj/structure/bed/padded, -/obj/item/bedsheet, -/obj/item/storage/secure/safe{ - pixel_x = -22; - pixel_y = 0 - }, -/obj/random/plushie, -/turf/simulated/floor/carpet, -/area/crew_quarters/sleep/bunk) -"Sb" = ( -/obj/machinery/atmospherics/pipe/manifold/visible/fuel{ - dir = 4 - }, -/turf/simulated/floor/reinforced/airless, -/area/thruster/d3port) -"Sf" = ( -/obj/structure/fitness/punchingbag, -/turf/simulated/floor/wood, -/area/crew_quarters/gym) -"Sg" = ( -/obj/machinery/door/blast/regular{ - dir = 1; - id_tag = "cChamber3sV"; - name = "Chamber Vent" - }, -/turf/simulated/floor/reinforced/airless, -/area/thruster/d3starboard) -"Sh" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/obj/machinery/camera/network/third_deck{ - c_tag = "Third Deck Hallway - Observatory Aux"; - dir = 4 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/crew_quarters/observation) -"Si" = ( -/obj/machinery/atmospherics/pipe/simple/visible/fuel, -/obj/machinery/door/airlock/external, -/obj/machinery/door/blast/regular{ - dir = 1; - id_tag = "d3portnacelle" - }, -/turf/simulated/floor/reinforced, -/area/thruster/d3port) -"Sj" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/maintenance{ - name = "Bunk Room Maintenance" - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/crew_quarters/sleep/bunk) -"Sm" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9; - pixel_y = 0 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable/green, -/obj/machinery/power/apc{ - dir = 4; - name = "east bump"; - pixel_x = 24 - }, -/obj/effect/floor_decal/corner/red/mono, -/obj/structure/cable/green{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/machinery/light_switch{ - pixel_x = -22; - pixel_y = 26 - }, -/obj/structure/disposalpipe/segment{ - dir = 8; - icon_state = "pipe-c" - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/security/habcheck) -"Sn" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9; - pixel_y = 0 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/structure/closet/emcloset, -/obj/effect/floor_decal/corner/green{ - dir = 10; - icon_state = "corner_white" - }, -/turf/simulated/floor/tiled, -/area/hydroponics) -"So" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/catwalk, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9; - pixel_y = 0 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/turf/simulated/floor/plating, -/area/maintenance/thirddeck/port) -"Sp" = ( -/obj/structure/cable/green{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/turf/simulated/floor/reinforced/airless, -/area/space) -"Sq" = ( -/obj/structure/sign/hydrostorage{ - dir = 4; - icon_state = "hydro" - }, -/turf/simulated/wall/prepainted, -/area/hydroponics) -"Ss" = ( -/obj/structure/railing/mapped{ - dir = 8; - icon_state = "railing0-1" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/obj/structure/railing/mapped, -/turf/simulated/floor/plating, -/area/maintenance/thirddeck/starboard) -"St" = ( -/obj/structure/railing/mapped, -/obj/structure/lattice, -/obj/machinery/atmospherics/pipe/zpipe/down/supply, -/obj/machinery/atmospherics/pipe/zpipe/down/scrubbers, -/turf/simulated/open, -/area/maintenance/thirddeck/aftstarboard) -"Su" = ( -/obj/effect/wallframe_spawn/reinforced, -/obj/machinery/door/firedoor, -/obj/machinery/door/blast/regular{ - density = 0; - dir = 2; - icon_state = "pdoor0"; - id_tag = "d3aft_shutters"; - name = "Blast Shields"; - opacity = 0 - }, -/turf/simulated/floor/plating, -/area/hallway/primary/thirddeck/aft) -"Sv" = ( -/obj/effect/floor_decal/corner/blue/diagonal{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/hologram/holopad, -/turf/simulated/floor/tiled/white, -/area/crew_quarters/mess) -"Sw" = ( -/obj/structure/sign/hydro, -/turf/simulated/wall/prepainted, -/area/hydroponics) -"Sx" = ( -/obj/structure/table/rack, -/obj/random/maintenance/solgov, -/obj/random/maintenance/solgov, -/turf/simulated/floor/plating, -/area/maintenance/thirddeck/starboard) -"Sy" = ( -/obj/machinery/atmospherics/unary/outlet_injector{ - dir = 2; - frequency = 1441; - icon_state = "map_injector"; - id = "d3ph_in"; - use_power = 1 - }, -/turf/simulated/floor/reinforced/hydrogen, -/area/thruster/d3port) -"SA" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/unary/vent_pump/on, -/turf/simulated/floor/tiled/freezer, -/area/crew_quarters/galleybackroom) -"SC" = ( -/obj/structure/railing/mapped{ - dir = 8; - icon_state = "railing0-1" - }, -/turf/simulated/floor/plating, -/area/maintenance/thirddeck/forestarboard) -"SD" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/visible/fuel, -/obj/machinery/door/firedoor, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/maintenance/thirddeck/aftport) -"SE" = ( -/obj/effect/wallframe_spawn/no_grille, -/obj/machinery/door/firedoor, -/turf/simulated/floor/plating, -/area/hallway/primary/thirddeck/fore) -"SF" = ( -/turf/simulated/floor/carpet, -/area/crew_quarters/recreation) -"SH" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/visible/fuel{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/thirddeck/aftstarboard) -"SI" = ( -/obj/structure/railing/mapped{ - dir = 1; - icon_state = "railing0-1" - }, -/obj/machinery/atmospherics/pipe/zpipe/down/cyan{ - dir = 1; - icon_state = "down" - }, -/obj/structure/lattice, -/turf/simulated/open, -/area/maintenance/thirddeck/port) -"SJ" = ( -/obj/machinery/air_sensor{ - id_tag = "d3so2_sensor" - }, -/turf/simulated/floor/reinforced/oxygen, -/area/thruster/d3starboard) -"SK" = ( -/obj/structure/sign/memorial, -/obj/structure/sign/double/solgovflag/left{ - pixel_x = -16; - pixel_y = 32 - }, -/obj/structure/sign/double/solgovflag/right{ - pixel_x = 16; - pixel_y = 32 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/chapel/memorial) -"SL" = ( -/obj/structure/table/rack{ - dir = 8 - }, -/obj/item/tank/oxygen_emergency_double, -/obj/item/tank/oxygen_emergency_double, -/obj/item/tank/oxygen_emergency_double, -/obj/item/tank/oxygen_emergency_double, -/obj/machinery/light/small{ - dir = 8 - }, -/obj/effect/floor_decal/corner/yellow/half{ - dir = 8; - icon_state = "bordercolorhalf" - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/alarm{ - dir = 4; - pixel_x = -23; - pixel_y = 0 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/engineering/hardstorage) -"SO" = ( -/obj/machinery/power/terminal{ - dir = 8 - }, -/obj/machinery/pointdefense{ - id_tag = null; - initial_id_tag = "torch_primary_pd" - }, -/obj/structure/cable/green{ - d2 = 8; - icon_state = "0-8" - }, -/turf/simulated/floor/reinforced/airless, -/area/space) -"SP" = ( -/obj/structure/table/standard, -/obj/machinery/fabricator/micro/bartender, -/turf/simulated/floor/tiled/dark, -/area/crew_quarters/bar) -"SS" = ( -/obj/structure/cable/green{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/structure/disposalpipe/sortjunction/flipped{ - dir = 1; - name = "Galley"; - sort_type = "Galley" - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply, -/obj/structure/cable/green{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/effect/floor_decal/corner/blue/diagonal{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/crew_quarters/mess) -"ST" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9; - pixel_y = 0 - }, -/obj/item/stack/material/plastic/ten, -/turf/simulated/floor/tiled/freezer, -/area/crew_quarters/galleybackroom) -"SU" = ( -/obj/structure/fitness/weightlifter, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/crew_quarters/gym) -"SW" = ( -/obj/effect/floor_decal/spline/fancy/black{ - dir = 6; - icon_state = "spline_fancy" - }, -/obj/structure/banner{ - pixel_y = -32 - }, -/turf/simulated/floor/wood/maple, -/area/chapel/main) -"SX" = ( -/obj/structure/bed/chair/armchair/brown, -/turf/simulated/floor/wood/walnut, -/area/crew_quarters/recreation) -"SY" = ( -/obj/effect/floor_decal/industrial/outline/grey, -/obj/machinery/computer/modular/preset/engineering{ - dir = 4; - icon_state = "console" - }, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/thirddeck/aftstarboard) -"Tb" = ( -/obj/structure/disposalpipe/segment{ - dir = 2; - icon_state = "pipe-c" - }, -/obj/effect/floor_decal/corner/blue/diagonal{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/crew_quarters/mess) -"Td" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/portable_atmospherics/hydroponics, -/obj/effect/floor_decal/corner/green/mono, -/obj/effect/floor_decal/industrial/hatch/yellow, -/turf/simulated/floor/tiled/monotile, -/area/hydroponics) -"Te" = ( -/obj/structure/table/woodentable, -/obj/item/storage/pill_bottle/dice_nerd, -/turf/simulated/floor/wood/walnut, -/area/crew_quarters/recreation) -"Tg" = ( -/obj/effect/floor_decal/corner/grey/diagonal{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/crew_quarters/galley) -"Th" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/wood/walnut, -/area/crew_quarters/observation) -"Tk" = ( -/obj/structure/railing/mapped{ - dir = 4; - icon_state = "railing0-1" - }, -/turf/simulated/floor/plating, -/area/maintenance/thirddeck/aftport) -"Tm" = ( -/obj/machinery/light{ - dir = 8 - }, -/obj/structure/table/standard, -/obj/effect/floor_decal/corner/green{ - dir = 5 - }, -/obj/effect/floor_decal/corner/green{ - dir = 9 - }, -/turf/simulated/floor/tiled, -/area/hydroponics) -"Tn" = ( -/obj/effect/floor_decal/corner/lime{ - dir = 5 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/thirddeck/aft) -"To" = ( -/obj/structure/lattice, -/turf/simulated/wall/r_wall/hull, -/area/space) -"Tp" = ( -/obj/random/obstruction, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/thirddeck/foreport) -"Tq" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/effect/floor_decal/corner/paleblue{ - dir = 1 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/thirddeck/fore) -"Tr" = ( -/obj/effect/floor_decal/corner/red/diagonal, -/turf/simulated/floor/tiled/dark, -/area/vacant/mess) -"Ts" = ( -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/thirddeck/port) -"Tt" = ( -/obj/structure/cable/green{ - d2 = 2; - icon_state = "0-2" - }, -/obj/machinery/power/apc{ - dir = 1; - name = "north bump"; - pixel_x = 0; - pixel_y = 24 - }, -/turf/simulated/floor/tiled/freezer, -/area/crew_quarters/head) -"Tu" = ( -/obj/effect/wallframe_spawn/reinforced, -/obj/machinery/door/firedoor, -/obj/machinery/door/blast/regular{ - density = 0; - dir = 4; - icon_state = "pdoor0"; - id_tag = "d3aft_shutters"; - name = "Blast Shields"; - opacity = 0 - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/turf/simulated/floor/plating, -/area/hallway/primary/thirddeck/aft) -"Tv" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/simulated/floor/lino, -/area/crew_quarters/office) -"Tw" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/catwalk, -/obj/effect/floor_decal/industrial/warning/corner, -/turf/simulated/floor/plating, -/area/maintenance/thirddeck/port) -"Tx" = ( -/obj/effect/floor_decal/corner/blue/diagonal{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/white, -/area/crew_quarters/mess) -"Tz" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/bluegrid, -/area/turret_protected/ai_upload) -"TB" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/cyan, -/obj/structure/catwalk, -/turf/simulated/open, -/area/maintenance/thirddeck/port) -"TC" = ( -/obj/machinery/atmospherics/unary/vent_pump/on, -/turf/simulated/floor/tiled, -/area/hallway/primary/thirddeck/aft) -"TE" = ( -/turf/simulated/wall/prepainted, -/area/chapel/office) -"TG" = ( -/obj/machinery/atmospherics/unary/outlet_injector{ - dir = 2; - frequency = 1441; - id = "d3so2_in"; - injecting = 1; - use_power = 1 - }, -/turf/simulated/floor/reinforced/oxygen, -/area/thruster/d3starboard) -"TH" = ( -/obj/structure/table/marble, -/obj/effect/floor_decal/corner/grey/diagonal{ - dir = 4 - }, -/obj/machinery/fabricator/micro{ - pixel_x = 8 - }, -/obj/machinery/door/blast/shutters{ - dir = 2; - id_tag = "kitchen"; - name = "Kitchen Shutters" - }, -/turf/simulated/floor/tiled/white, -/area/crew_quarters/galley) -"TJ" = ( -/obj/random/junk, -/turf/simulated/floor/plating, -/area/maintenance/thirddeck/forestarboard) -"TL" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/machinery/camera/network/third_deck{ - c_tag = "Computer Lab"; - dir = 1 - }, -/turf/simulated/floor/lino, -/area/crew_quarters/office) -"TN" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/alarm{ - pixel_y = 24 - }, -/obj/structure/railing/mapped, -/obj/structure/railing/mapped{ - dir = 4; - icon_state = "railing0-1" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/maintenance/thirddeck/port) -"TO" = ( -/obj/machinery/door/airlock/hatch/maintenance, -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/tiled/steel_ridged, -/area/hallway/primary/thirddeck/center) -"TQ" = ( -/obj/effect/floor_decal/industrial/outline/grey, -/obj/structure/largecrate, -/obj/random/maintenance/clean, -/obj/random/maintenance/clean, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/thirddeck/port) -"TR" = ( -/obj/effect/wallframe_spawn/reinforced/polarized/no_grille{ - id = "chapel_windows" - }, -/turf/simulated/floor/plating, -/area/chapel/main) -"TS" = ( -/obj/effect/floor_decal/corner/red{ - dir = 10 - }, -/turf/simulated/floor/tiled/dark, -/area/security/habcheck) -"TT" = ( -/obj/effect/floor_decal/spline/fancy/wood{ - dir = 8 - }, -/obj/structure/bed/chair/comfy/brown{ - dir = 1 - }, -/turf/simulated/floor/carpet, -/area/crew_quarters/recreation) -"TV" = ( -/obj/effect/floor_decal/industrial/hatch/yellow, -/obj/machinery/disposal, -/obj/structure/disposalpipe/trunk{ - dir = 4 - }, -/turf/simulated/floor/tiled/monotile, -/area/storage/tools) -"TW" = ( -/obj/structure/table/marble, -/obj/effect/floor_decal/corner/grey/diagonal{ - dir = 4 - }, -/obj/machinery/camera/network/third_deck{ - c_tag = "Mess Hall - Galley"; - dir = 4 - }, -/obj/machinery/cooker/cereal, -/turf/simulated/floor/tiled/white, -/area/crew_quarters/galley) -"TX" = ( -/obj/machinery/portable_atmospherics/hydroponics, -/obj/effect/floor_decal/corner/green/mono, -/obj/effect/floor_decal/industrial/hatch/yellow, -/turf/simulated/floor/tiled/monotile, -/area/hydroponics) -"TY" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/camera/network/third_deck{ - c_tag = "Chapel - Chaplain's Office"; - dir = 4 - }, -/turf/simulated/floor/tiled/dark, -/area/chapel/office) -"TZ" = ( -/obj/structure/closet/athletic_mixed, -/turf/simulated/floor/tiled/freezer, -/area/crew_quarters/head) -"Ub" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/closet/medical_wall/filled{ - pixel_y = -32 - }, -/turf/simulated/floor/tiled/white, -/area/crew_quarters/sleep/cryo) -"Uc" = ( -/obj/structure/table/rack, -/obj/structure/window/reinforced{ - dir = 8 - }, -/obj/structure/window/reinforced{ - dir = 4 - }, -/obj/machinery/door/window{ - base_state = "right"; - dir = 2; - icon_state = "right"; - name = "Core Modules" - }, -/obj/item/aiModule/freeform, -/obj/item/aiModule/corp, -/obj/item/aiModule/solgov_aggressive, -/obj/item/aiModule/robocop, -/obj/item/aiModule/paladin, -/obj/item/aiModule/asimov, -/turf/simulated/floor/tiled/dark, -/area/turret_protected/ai_upload) -"Ud" = ( -/obj/machinery/atmospherics/pipe/simple/visible/cyan{ - dir = 6; - icon_state = "intact" - }, -/turf/simulated/floor/reinforced/oxygen, -/area/thruster/d3starboard) -"Uf" = ( -/obj/machinery/atmospherics/unary/outlet_injector{ - injecting = 1; - use_power = 1 - }, -/turf/simulated/floor/airless, -/area/thruster/d3port) -"Ug" = ( -/obj/machinery/smartfridge/drinks{ - dir = 4; - icon_state = "fridge_dark" - }, -/obj/machinery/door/blast/shutters{ - dir = 4; - id_tag = "bar"; - name = "Bar Shutters" - }, -/turf/simulated/floor/lino, -/area/crew_quarters/bar) -"Uh" = ( -/obj/structure/fountain/mundane, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/wood/walnut, -/area/crew_quarters/observation) -"Ui" = ( -/obj/machinery/meter/turf, -/turf/simulated/floor/airless, -/area/command/disperser) -"Um" = ( -/obj/machinery/light{ - dir = 1 - }, -/obj/structure/closet/shipping_wall/filled{ - pixel_y = 32 - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/effect/floor_decal/corner/green{ - dir = 5 - }, -/turf/simulated/floor/tiled, -/area/hydroponics) -"Un" = ( -/obj/machinery/status_display, -/turf/simulated/wall/prepainted, -/area/crew_quarters/office) -"Uo" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/floor_decal/corner/paleblue{ - dir = 10 - }, -/obj/effect/floor_decal/industrial/warning/corner, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 1 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/thirddeck/fore) -"Up" = ( -/turf/simulated/floor/tiled/dark, -/area/engineering/hardstorage) -"Uq" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/tiled/freezer, -/area/crew_quarters/galleybackroom) -"Ur" = ( -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/thirddeck/foreport) -"Us" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 1 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/effect/floor_decal/industrial/warning/fulltile, -/obj/structure/disposalpipe/junction{ - dir = 4; - icon_state = "pipe-j1" - }, -/turf/simulated/floor/tiled/steel_grid, -/area/hallway/primary/thirddeck/center) -"Ut" = ( -/obj/machinery/power/apc{ - dir = 4; - name = "east bump"; - pixel_x = 24 - }, -/obj/structure/cable/green{ - d2 = 8; - icon_state = "0-8" - }, -/obj/machinery/light{ - dir = 4 - }, -/turf/simulated/floor/wood/walnut, -/area/crew_quarters/recreation) -"Uu" = ( -/obj/structure/railing/mapped{ - dir = 1; - icon_state = "railing0-1" - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 4; - icon_state = "warning" - }, -/obj/structure/railing/mapped{ - dir = 8; - icon_state = "railing0-1" - }, -/turf/simulated/floor/plating, -/area/maintenance/thirddeck/port) -"Uv" = ( -/obj/structure/railing/mapped{ - dir = 1; - icon_state = "railing0-1" - }, -/obj/structure/railing/mapped{ - dir = 4; - icon_state = "railing0-1" - }, -/turf/simulated/open, -/area/maintenance/thirddeck/starboard) -"Uw" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/camera/network/third_deck{ - c_tag = "Chapel - Memorial Room"; - dir = 1 - }, -/obj/effect/floor_decal/corner/purple{ - dir = 5 - }, -/turf/simulated/floor/tiled/dark, -/area/chapel/memorial) -"Ux" = ( -/obj/structure/table/rack, -/obj/random/maintenance/solgov, -/obj/random/maintenance/solgov, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/thirddeck/starboard) -"Uy" = ( -/obj/machinery/power/apc{ - dir = 1; - name = "north bump"; - pixel_x = 0; - pixel_y = 24 - }, -/obj/structure/cable/green{ - d2 = 4; - icon_state = "0-4" - }, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/thirddeck/forestarboard) -"UA" = ( -/obj/effect/wallframe_spawn/reinforced, -/obj/machinery/door/blast/shutters{ - density = 0; - dir = 2; - icon_state = "shutter0"; - id_tag = "hab_checkpoint_shutters"; - name = "Hangar Deck Checkpoint Shutters"; - opacity = 0 - }, -/obj/structure/cable/green{ - d2 = 2; - icon_state = "0-2" - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/turf/simulated/floor/plating, -/area/security/habcheck) -"UC" = ( -/obj/effect/floor_decal/spline/plain/red, -/obj/structure/window/reinforced, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 4 - }, -/turf/simulated/floor/wood, -/area/crew_quarters/gym) -"UD" = ( -/obj/structure/grille, -/obj/structure/wall_frame, -/turf/simulated/floor/plating, -/area/vacant/brig) -"UE" = ( -/obj/machinery/portable_atmospherics/powered/scrubber, -/obj/effect/floor_decal/industrial/outline/grey, -/obj/machinery/light/small{ - dir = 1 - }, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/thirddeck/port) -"UF" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/obj/effect/floor_decal/spline/fancy/wood{ - dir = 1; - icon_state = "spline_fancy" - }, -/turf/simulated/floor/carpet, -/area/crew_quarters/recreation) -"UG" = ( -/obj/structure/catwalk, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/plating, -/area/maintenance/thirddeck/aftstarboard) -"UH" = ( -/obj/item/device/radio/intercom/locked/ai_private{ - dir = 1; - pixel_y = -28 - }, -/obj/machinery/light/small{ - dir = 4; - icon_state = "bulb1" - }, -/turf/simulated/floor/tiled/dark, -/area/turret_protected/ai_upload_foyer) -"UI" = ( -/obj/structure/table/steel, -/obj/random/tech_supply, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/thirddeck/foreport) -"UJ" = ( -/obj/structure/catwalk, -/obj/structure/closet/emcloset, -/turf/simulated/floor/plating, -/area/maintenance/thirddeck/forestarboard) -"UK" = ( -/obj/effect/floor_decal/corner/blue/diagonal{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 8; - icon_state = "pipe-c" - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/white, -/area/crew_quarters/mess) -"UL" = ( -/obj/effect/floor_decal/techfloor{ - dir = 6; - icon_state = "techfloor_edges" - }, -/obj/machinery/button/alternate/door/bolts{ - id_tag = "civsafedoorport"; - name = "safe room door-control"; - pixel_x = -32; - pixel_y = -32 - }, -/turf/simulated/floor/tiled/techfloor, -/area/crew_quarters/safe_room/thirddeck) -"UM" = ( -/obj/effect/floor_decal/corner/green/half{ - dir = 1; - icon_state = "bordercolorhalf" - }, -/obj/machinery/button/blast_door{ - id_tag = "d3fore_shutters"; - name = "Garden Shutter Control"; - pixel_x = -7; - pixel_y = 23 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/crew_quarters/observation) -"UN" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/effect/catwalk_plated/dark, -/turf/simulated/floor/plating, -/area/command/disperser) -"UO" = ( -/obj/structure/largecrate, -/obj/random/maintenance/solgov, -/obj/random/maintenance/solgov, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/thirddeck/foreport) -"UQ" = ( -/obj/item/device/radio/intercom{ - dir = 1; - pixel_y = -28 - }, -/obj/machinery/light, -/obj/effect/floor_decal/corner/green{ - dir = 10 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/thirddeck/center) -"UR" = ( -/obj/machinery/sparker{ - id_tag = "engines"; - pixel_x = -24 - }, -/obj/machinery/atmospherics/unary/vent_pump/siphon/on/atmos{ - dir = 4; - internal_pressure_bound = 35000; - internal_pressure_bound_default = 35000 - }, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/floor/reinforced/airless, -/area/thruster/d3starboard) -"UU" = ( -/obj/machinery/atmospherics/portables_connector{ - dir = 8 - }, -/obj/machinery/portable_atmospherics/canister/air, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/plating, -/area/command/disperser) -"UV" = ( -/obj/effect/floor_decal/corner/green{ - dir = 8; - icon_state = "corner_white" - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/thirddeck/aft) -"UX" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/thirddeck/foreport) -"UY" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/white, -/area/crew_quarters/sleep/cryo) -"UZ" = ( -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/thirddeck/port) -"Vb" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/floor_decal/corner/paleblue{ - dir = 10 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/thirddeck/fore) -"Vc" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/crew_quarters/gym) -"Vd" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 8 - }, -/turf/simulated/floor/tiled/dark, -/area/engineering/hardstorage) -"Ve" = ( -/obj/machinery/power/port_gen/pacman{ - anchored = 0; - sheets = 25 - }, -/obj/effect/floor_decal/corner/yellow/half{ - dir = 8; - icon_state = "bordercolorhalf" - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled/dark/monotile, -/area/engineering/hardstorage) -"Vf" = ( -/obj/structure/railing/mapped{ - dir = 1; - icon_state = "railing0-1" - }, -/obj/structure/railing/mapped{ - dir = 4; - icon_state = "railing0-1" - }, -/obj/machinery/atmospherics/pipe/zpipe/up/cyan{ - dir = 8; - icon_state = "up" - }, -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 8 - }, -/turf/simulated/floor/plating, -/area/maintenance/thirddeck/port) -"Vg" = ( -/obj/structure/table/marble, -/obj/machinery/door/blast/shutters{ - dir = 4; - id_tag = "bar"; - name = "Bar Shutters" - }, -/turf/simulated/floor/lino, -/area/crew_quarters/bar) -"Vi" = ( -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/door/airlock/glass/civilian{ - name = "Galley" - }, -/turf/simulated/floor/tiled/white, -/area/crew_quarters/bar) -"Vl" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/effect/floor_decal/corner/paleblue{ - dir = 8 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/thirddeck/fore) -"Vm" = ( -/obj/effect/floor_decal/corner/green{ - dir = 9 - }, -/obj/effect/floor_decal/corner/green{ - dir = 5 - }, -/obj/structure/closet/emcloset, -/turf/simulated/floor/tiled, -/area/hydroponics) -"Vn" = ( -/obj/effect/floor_decal/corner/lime{ - dir = 1 - }, -/obj/machinery/button/blast_door{ - desc = "A remote control-switch for shutters."; - id_tag = "d3aft_shutters"; - name = "Window Shutters"; - pixel_x = -26; - pixel_y = 26 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/fuel, -/turf/simulated/floor/tiled, -/area/hallway/primary/thirddeck/aft) -"Vo" = ( -/obj/effect/wallframe_spawn/reinforced/hull, -/obj/structure/sign/solgov, -/obj/machinery/door/blast/regular/open{ - dir = 4; - icon_state = "pdoor0"; - id_tag = "bsa-window"; - name = "Observation Blast Door" - }, -/turf/simulated/floor/plating, -/area/command/disperser) -"Vp" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/visible/fuel{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor, -/area/thruster/d3starboard) -"Vr" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/wall/r_wall/hull, -/area/maintenance/thirddeck/port) -"Vt" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 1 - }, -/obj/item/device/radio/intercom/entertainment{ - dir = 4; - pixel_x = -22 - }, -/obj/machinery/light/small{ - dir = 8 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/crew_quarters/observation) -"Vv" = ( -/obj/structure/catwalk, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/maintenance/thirddeck/starboard) -"Vw" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/structure/catwalk, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 - }, -/turf/simulated/floor/plating, -/area/maintenance/thirddeck/port) -"Vx" = ( -/turf/simulated/wall/prepainted, -/area/security/habcheck) -"Vz" = ( -/obj/machinery/portable_atmospherics/powered/scrubber, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/thirddeck/port) -"VA" = ( -/obj/machinery/atmospherics/pipe/simple/visible/fuel, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/door/airlock/hatch/maintenance, -/obj/machinery/door/firedoor, -/turf/simulated/floor/tiled/steel_ridged, -/area/thruster/d3port) -"VB" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/turf/simulated/floor/tiled/dark, -/area/chapel/office) -"VC" = ( -/obj/machinery/newscaster{ - pixel_y = 32 - }, -/obj/effect/floor_decal/corner/green/half{ - dir = 1; - icon_state = "bordercolorhalf" - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/thirddeck/center) -"VD" = ( -/obj/structure/catwalk, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/turf/simulated/floor/plating, -/area/maintenance/thirddeck/starboard) -"VE" = ( -/obj/effect/floor_decal/corner/green/mono, -/obj/structure/extinguisher_cabinet{ - pixel_y = -32 - }, -/obj/structure/disposalpipe/trunk{ - dir = 1 - }, -/obj/effect/floor_decal/industrial/hatch/yellow, -/obj/machinery/disposal, -/turf/simulated/floor/tiled/monotile, -/area/hallway/primary/thirddeck/aft) -"VF" = ( -/turf/simulated/floor/tiled, -/area/crew_quarters/gym) -"VG" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/door/airlock/hatch/maintenance, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/door/firedoor, -/turf/simulated/floor/tiled/steel_ridged, -/area/hallway/primary/thirddeck/aft) -"VI" = ( -/obj/structure/ladder, -/obj/effect/floor_decal/corner/red/mono, -/obj/effect/floor_decal/industrial/hatch/yellow, -/obj/effect/catwalk_plated/dark, -/obj/machinery/light, -/obj/machinery/alarm{ - dir = 8; - icon_state = "alarm0"; - pixel_x = 21 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/security/habcheck) -"VJ" = ( -/obj/structure/disposalpipe/segment, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled, -/area/crew_quarters/gym) -"VL" = ( -/obj/effect/floor_decal/techfloor{ - dir = 10; - icon_state = "techfloor_edges" - }, -/obj/machinery/newscaster{ - pixel_x = -32 - }, -/obj/structure/bed/chair{ - dir = 1 - }, -/turf/simulated/floor/tiled/techfloor, -/area/crew_quarters/safe_room/thirddeck) -"VM" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/simulated/floor/tiled/monotile, -/area/hallway/primary/thirddeck/center) -"VQ" = ( -/obj/structure/bed/chair/comfy/black{ - dir = 8 - }, -/obj/machinery/button/blast_door{ - desc = "A remote control-switch for the Bluespace Artillery's core."; - id_tag = "bsa-core"; - name = "Artillery Core Blast Doors"; - pixel_x = -5; - pixel_y = 28 - }, -/obj/machinery/button/blast_door{ - desc = "A remote control-switch for the Bluespace Artillery observation windows."; - id_tag = "bsa-window"; - name = "Observation Blast Doors"; - pixel_x = 5; - pixel_y = 28 - }, -/obj/effect/floor_decal/corner/grey/border{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/turf/simulated/floor/tiled/monotile, -/area/command/disperser) -"VR" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/catwalk, -/obj/structure/lattice, -/turf/simulated/open, -/area/maintenance/thirddeck/starboard) -"VT" = ( -/obj/structure/disposalpipe/sortjunction/flipped{ - dir = 4; - name = "Hydroponics"; - sort_type = "Hydroponics" - }, -/obj/effect/floor_decal/corner/blue/diagonal{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/crew_quarters/mess) -"VU" = ( -/turf/simulated/floor/tiled, -/area/hallway/primary/thirddeck/fore) -"VV" = ( -/obj/machinery/atmospherics/pipe/simple/visible/fuel{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/light_switch{ - pixel_x = -24; - pixel_y = -24 - }, -/turf/simulated/floor/tiled/techfloor, -/area/thruster/d3port) -"VW" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 1 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/effect/floor_decal/industrial/warning/fulltile, -/turf/simulated/floor/tiled/steel_grid, -/area/hallway/primary/thirddeck/center) -"VY" = ( -/obj/structure/stairs/west, -/obj/effect/floor_decal/corner/yellow/half{ - dir = 8; - icon_state = "bordercolorhalf" - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/engineering/hardstorage) -"VZ" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/thirddeck/starboard) -"Wb" = ( -/turf/simulated/wall/prepainted, -/area/crew_quarters/gym) -"We" = ( -/obj/random_multi/single_item/poppy, -/turf/simulated/floor/tiled, -/area/vacant/brig) -"Wh" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/monotile, -/area/hallway/primary/thirddeck/aft) -"Wi" = ( -/obj/machinery/power/terminal{ - dir = 1; - icon_state = "term" - }, -/obj/structure/cable/green{ - d2 = 4; - icon_state = "0-4" - }, -/turf/simulated/floor/bluegrid, -/area/tcommsat/chamber) -"Wl" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/turf/simulated/floor/carpet, -/area/crew_quarters/recreation) -"Wo" = ( -/obj/machinery/meter, -/obj/effect/floor_decal/industrial/warning{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/visible/fuel, -/turf/simulated/floor/tiled/techfloor, -/area/thruster/d3starboard) -"Wp" = ( -/obj/structure/sign/warning/engineering_access, -/turf/simulated/wall/prepainted, -/area/engineering/hardstorage) -"Wq" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/thirddeck/foreport) -"Wr" = ( -/obj/structure/railing/mapped{ - dir = 1; - icon_state = "railing0-1" - }, -/obj/machinery/atmospherics/valve/shutoff/fuel{ - dir = 4 - }, -/turf/simulated/open, -/area/maintenance/thirddeck/aftport) -"Ws" = ( -/obj/effect/wallframe_spawn/reinforced_phoron, -/turf/simulated/floor/reinforced, -/area/thruster/d3port) -"Wu" = ( -/obj/machinery/light/small{ - dir = 8 - }, -/obj/machinery/computer/air_control{ - dir = 1; - frequency = 1441; - input_tag = "d3ph_in"; - name = "Hydrogen Supply Control"; - output_tag = "d3ph_out"; - sensor_name = "Hydrogen Supply Tank"; - sensor_tag = "d3ph_sensor" - }, -/obj/effect/floor_decal/industrial/outline/orange, -/turf/simulated/floor/tiled/techfloor, -/area/thruster/d3port) -"Ww" = ( -/turf/simulated/wall/r_wall/prepainted, -/area/crew_quarters/observation) -"Wx" = ( -/obj/effect/floor_decal/corner/green{ - dir = 5 - }, -/obj/structure/closet/hydrant{ - pixel_y = 32 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/thirddeck/aft) -"Wy" = ( -/obj/machinery/atmospherics/pipe/manifold/visible/fuel{ - dir = 4 - }, -/obj/machinery/air_sensor{ - id_tag = "cChamber3p" - }, -/turf/simulated/floor/reinforced/airless, -/area/thruster/d3port) -"Wz" = ( -/obj/machinery/alarm{ - dir = 8; - pixel_x = 25; - pixel_y = 0; - req_access = list(list("ACCESS_ENGINE_EQUIP","ACCESS_ATMOS")) - }, -/turf/simulated/floor/bluegrid, -/area/turret_protected/ai_upload) -"WA" = ( -/obj/effect/floor_decal/spline/fancy/black{ - dir = 1; - icon_state = "spline_fancy" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/wood/maple, -/area/chapel/main) -"WB" = ( -/turf/simulated/floor/tiled/monotile, -/area/crew_quarters/gym) -"WC" = ( -/turf/simulated/floor/reinforced/hydrogen, -/area/thruster/d3starboard) -"WD" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/floor_decal/corner/red/mono, -/obj/machinery/door/blast/shutters{ - density = 0; - dir = 4; - icon_state = "shutter0"; - id_tag = "hab_hallway_shutters"; - name = "Habitation Deck Hallway Shutters"; - opacity = 0 - }, -/turf/simulated/floor/tiled/monotile, -/area/hallway/primary/thirddeck/fore) -"WE" = ( -/obj/effect/floor_decal/corner/green{ - dir = 5 - }, -/obj/machinery/alarm{ - pixel_y = 24 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/thirddeck/aft) -"WF" = ( -/obj/effect/wallframe_spawn/reinforced_phoron, -/turf/simulated/floor/tiled/techfloor, -/area/thruster/d3starboard) -"WG" = ( -/obj/effect/floor_decal/corner/grey{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/universal, -/turf/simulated/floor/tiled/dark, -/area/command/disperser) -"WH" = ( -/obj/effect/floor_decal/corner/blue/diagonal{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/disposalpipe/segment{ - dir = 4; - icon_state = "pipe-c" - }, -/turf/simulated/floor/tiled/white, -/area/crew_quarters/mess) -"WL" = ( -/obj/structure/lattice, -/obj/machinery/atmospherics/pipe/simple/hidden/cyan, -/turf/simulated/open, -/area/maintenance/thirddeck/port) -"WN" = ( -/obj/structure/catwalk, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/plating, -/area/maintenance/thirddeck/starboard) -"WP" = ( -/obj/structure/sign/warning/fire, -/turf/simulated/wall/r_wall/prepainted, -/area/engineering/hardstorage) -"WQ" = ( -/obj/structure/table/steel, -/obj/random/junk, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/thirddeck/forestarboard) -"WR" = ( -/obj/machinery/button/alternate/door/bolts{ - desc = "Security access door button for emergency situations."; - id_tag = "dorm2"; - name = "Room EM Bolt Control"; - pixel_x = 25; - pixel_y = 25; - req_access = list("ACCESS_SECURITY") - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, -/turf/simulated/floor/tiled/dark, -/area/crew_quarters/sleep/bunk) -"WT" = ( -/obj/machinery/power/apc{ - dir = 1; - name = "north bump"; - pixel_x = 0; - pixel_y = 24 - }, -/obj/structure/cable/green{ - d2 = 8; - icon_state = "0-8" - }, -/obj/machinery/light{ - dir = 4; - icon_state = "tube1" - }, -/obj/machinery/button/windowtint{ - id = "chapel_windows"; - pixel_x = -10; - pixel_y = 24 - }, -/obj/machinery/light_switch{ - pixel_x = 24; - pixel_y = 18 - }, -/obj/machinery/button/holosign{ - id_tag = "chapel"; - pixel_x = -10; - pixel_y = 32 - }, -/turf/simulated/floor/tiled/dark, -/area/chapel/main) -"WU" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/thirddeck/port) -"WW" = ( -/obj/structure/extinguisher_cabinet{ - pixel_x = 32 - }, -/obj/machinery/camera/network/third_deck{ - c_tag = "Third Deck Hallway - Recreation"; - dir = 8 - }, -/obj/structure/bed/chair/armchair/brown{ - dir = 8 - }, -/turf/simulated/floor/wood/walnut, -/area/crew_quarters/recreation) -"WX" = ( -/obj/machinery/light{ - dir = 1 - }, -/obj/structure/flora/pottedplant/flower, -/turf/simulated/floor/wood/walnut, -/area/crew_quarters/recreation) -"WY" = ( -/obj/structure/bed/chair/wood, -/obj/effect/floor_decal/corner/lime/mono, -/obj/item/device/radio/intercom{ - pixel_y = 23 - }, -/obj/machinery/light/spot{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/fuel{ - dir = 6; - icon_state = "intact" - }, -/turf/simulated/floor/tiled/monotile, -/area/hallway/primary/thirddeck/aft) -"WZ" = ( -/obj/structure/disposalpipe/down{ - dir = 8 - }, -/obj/structure/lattice, -/obj/structure/railing/mapped, -/turf/simulated/open, -/area/maintenance/thirddeck/starboard) -"Xa" = ( -/obj/structure/bed/chair/office/dark{ - dir = 1; - icon_state = "officechair_preview" - }, -/turf/simulated/floor/tiled/dark, -/area/chapel/office) -"Xb" = ( -/obj/structure/lattice, -/obj/machinery/atmospherics/unary/vent_pump/tank{ - dir = 1; - external_pressure_bound = 0; - external_pressure_bound_default = 0; - icon_state = "map_vent_in"; - id_tag = "d3sh_out"; - initialize_directions = 1; - internal_pressure_bound = 2000; - internal_pressure_bound_default = 2000; - pressure_checks = 2; - pressure_checks_default = 2; - pump_direction = 0; - use_power = 1 - }, -/turf/simulated/floor/reinforced/hydrogen, -/area/thruster/d3starboard) -"Xc" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/obj/machinery/alarm{ - dir = 4; - pixel_x = -25; - pixel_y = 0 - }, -/turf/simulated/floor/tiled/dark, -/area/teleporter/thirddeck) -"Xd" = ( -/obj/machinery/light{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark, -/area/command/disperser) -"Xe" = ( -/obj/machinery/atmospherics/pipe/simple/visible/fuel{ - dir = 4 - }, -/obj/machinery/atmospherics/binary/pump/on{ - dir = 2; - target_pressure = 15000 - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 1 - }, -/obj/effect/floor_decal/industrial/outline/orange, -/turf/simulated/floor/tiled/techfloor, -/area/thruster/d3starboard) -"Xf" = ( -/obj/machinery/alarm/server{ - dir = 4; - pixel_x = -22; - pixel_y = 0; - req_access = list(list("ACCESS_ENGINE_EQUIP","ACCESS_ATMOS")) - }, -/turf/simulated/floor/tiled/dark, -/area/tcommsat/chamber) -"Xg" = ( -/obj/structure/table/rack, -/obj/structure/window/reinforced{ - dir = 4 - }, -/obj/structure/window/reinforced{ - dir = 8 - }, -/obj/machinery/door/window{ - base_state = "left"; - dir = 1; - icon_state = "left"; - name = "High-Risk Modules" - }, -/obj/item/aiModule/purge, -/obj/item/aiModule/quarantine, -/obj/item/aiModule/teleporterOffline, -/obj/item/aiModule/antimov, -/obj/item/aiModule/oneHuman, -/obj/item/aiModule/oxygen, -/turf/simulated/floor/tiled/dark, -/area/turret_protected/ai_upload) -"Xi" = ( -/obj/effect/floor_decal/industrial/outline/grey, -/obj/machinery/camera/network/command{ - c_tag = "Telecommunications - Server Room Port"; - dir = 1 - }, -/obj/machinery/ntnet_relay, -/turf/simulated/floor/bluegrid, -/area/tcommsat/chamber) -"Xj" = ( -/obj/effect/floor_decal/industrial/outline/grey, -/obj/machinery/floodlight, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/thirddeck/port) -"Xk" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/light/small{ - dir = 8 - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/thirddeck/forestarboard) -"Xm" = ( -/obj/machinery/chem_master/condimaster{ - name = "CondiMaster Neo"; - pixel_x = -5 - }, -/turf/simulated/floor/tiled, -/area/hydroponics) -"Xn" = ( -/obj/effect/floor_decal/corner/green{ - dir = 5 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/thirddeck/center) -"Xp" = ( -/obj/machinery/floodlight, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/thirddeck/aftstarboard) -"Xq" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/tiled/dark/monotile, -/area/crew_quarters/observation) -"Xr" = ( -/obj/machinery/pointdefense{ - id_tag = null; - initial_id_tag = "torch_primary_pd" - }, -/obj/machinery/power/terminal, -/obj/structure/cable/green{ - d2 = 2; - icon_state = "0-2" - }, -/turf/simulated/floor/reinforced/airless, -/area/space) -"Xs" = ( -/obj/effect/floor_decal/corner/blue/diagonal{ - dir = 4 - }, -/obj/structure/table/standard{ - name = "plastic table frame" - }, -/obj/item/board, -/obj/item/device/radio/intercom/entertainment{ - dir = 8; - pixel_x = 22 - }, -/turf/simulated/floor/tiled/white, -/area/crew_quarters/mess) -"Xt" = ( -/obj/machinery/meter, -/obj/effect/floor_decal/industrial/warning{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/visible/fuel, -/turf/simulated/floor/tiled/techfloor, -/area/thruster/d3port) -"Xu" = ( -/obj/structure/railing/mapped, -/turf/simulated/floor/plating, -/area/maintenance/thirddeck/aftstarboard) -"Xv" = ( -/obj/effect/catwalk_plated, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/plating, -/area/hallway/primary/thirddeck/aft) -"Xy" = ( -/obj/effect/floor_decal/industrial/warning, -/obj/machinery/access_button{ - command = "cycle_exterior"; - frequency = 1379; - master_tag = "bsa_airlock"; - pixel_x = -20; - pixel_y = -20 - }, -/turf/simulated/floor/airless, -/area/command/disperser) -"Xz" = ( -/obj/structure/closet/crate/solar, -/obj/effect/floor_decal/corner/yellow/half{ - dir = 8; - icon_state = "bordercolorhalf" - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled/dark/monotile, -/area/engineering/hardstorage) -"XA" = ( -/obj/machinery/atmospherics/pipe/simple/visible/fuel, -/turf/simulated/wall/ocp_wall, -/area/thruster/d3port) -"XB" = ( -/obj/structure/table/woodentable/mahogany, -/obj/machinery/alarm{ - dir = 4; - pixel_x = -25; - pixel_y = 0 - }, -/obj/item/tableflag, -/turf/simulated/floor/tiled/dark, -/area/chapel/memorial) -"XC" = ( -/obj/effect/floor_decal/techfloor{ - dir = 6; - icon_state = "techfloor_edges" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/engineering/hardstorage) -"XD" = ( -/obj/machinery/power/apc{ - dir = 1; - name = "north bump"; - pixel_x = 0; - pixel_y = 24 - }, -/obj/structure/cable/green{ - d2 = 8; - icon_state = "0-8" - }, -/obj/effect/floor_decal/corner/yellow/half{ - dir = 1; - icon_state = "bordercolorhalf" - }, -/turf/simulated/floor/tiled/dark, -/area/engineering/hardstorage) -"XE" = ( -/obj/structure/ore_box, -/turf/simulated/floor/plating, -/area/maintenance/thirddeck/starboard) -"XF" = ( -/obj/structure/cable/green{ - d2 = 4; - icon_state = "0-4" - }, -/obj/machinery/power/apc{ - dir = 2; - name = "south bump"; - pixel_y = -24 - }, -/turf/simulated/floor/lino, -/area/crew_quarters/office) -"XH" = ( -/obj/effect/floor_decal/corner_techfloor_grid{ - dir = 4; - icon_state = "corner_techfloor_grid" - }, -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark, -/area/teleporter/thirddeck) -"XJ" = ( -/obj/machinery/camera/network/security{ - c_tag = "Checkpoint - Deck Three"; - dir = 1 - }, -/obj/effect/floor_decal/corner/red{ - dir = 10 - }, -/obj/machinery/hologram/holopad, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/recharger/wallcharger{ - dir = 1; - icon_state = "wrecharger0"; - pixel_y = -22 - }, -/turf/simulated/floor/tiled/dark, -/area/security/habcheck) -"XK" = ( -/obj/structure/disposalpipe/segment{ - dir = 2; - icon_state = "pipe-c" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled, -/area/crew_quarters/gym) -"XM" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/dark/monotile, -/area/engineering/hardstorage) -"XN" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 1; - level = 2 - }, -/turf/simulated/floor/tiled/dark, -/area/command/disperser) -"XO" = ( -/obj/effect/floor_decal/corner/blue/diagonal{ - dir = 4 - }, -/obj/structure/bed/chair{ - dir = 8; - icon_state = "chair_preview" - }, -/turf/simulated/floor/tiled/white, -/area/crew_quarters/mess) -"XP" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/catwalk_plated, -/obj/structure/disposalpipe/junction{ - dir = 4; - icon_state = "pipe-j1" - }, -/turf/simulated/floor/plating, -/area/hallway/primary/thirddeck/aft) -"XR" = ( -/obj/machinery/newscaster{ - pixel_x = -32 - }, -/obj/machinery/computer/modular/preset/civilian{ - dir = 4; - icon_state = "console" - }, -/turf/simulated/floor/tiled/white/monotile, -/area/crew_quarters/sleep/cryo) -"XS" = ( -/obj/random/torchcloset, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/floor/plating, -/area/maintenance/thirddeck/foreport) -"XT" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/table/standard, -/obj/item/reagent_containers/dropper, -/obj/effect/floor_decal/corner/green{ - dir = 10; - icon_state = "corner_white" - }, -/turf/simulated/floor/tiled, -/area/hydroponics) -"XU" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 4 - }, -/obj/machinery/light_switch{ - pixel_x = 6; - pixel_y = -24 - }, -/obj/structure/table/woodentable/maple, -/obj/item/sticky_pad, -/obj/item/device/taperecorder, -/turf/simulated/floor/carpet/purple, -/area/chapel/office) -"XX" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/floor_decal/corner/red/mono, -/obj/machinery/door/blast/shutters{ - density = 0; - dir = 4; - icon_state = "shutter0"; - id_tag = "hab_hallway_shutters"; - name = "Habitation Deck Hallway Shutters"; - opacity = 0 - }, -/turf/simulated/floor/tiled/monotile, -/area/hallway/primary/thirddeck/fore) -"XY" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 8 - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/dark, -/area/chapel/main) -"XZ" = ( -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 1 - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/thirddeck/forestarboard) -"Ya" = ( -/obj/structure/bed, -/obj/item/bedsheet/mime, -/obj/random/junk, -/turf/simulated/floor/carpet, -/area/vacant/cabin) -"Yb" = ( -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/thirddeck/foreport) -"Yc" = ( -/obj/structure/bed/chair/comfy/brown, -/turf/simulated/floor/wood/walnut, -/area/crew_quarters/recreation) -"Yd" = ( -/obj/machinery/computer/arcade/battle, -/turf/simulated/floor/wood/walnut, -/area/crew_quarters/recreation) -"Ye" = ( -/obj/machinery/light/small, -/obj/machinery/meter, -/obj/effect/floor_decal/industrial/warning{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/visible/fuel, -/turf/simulated/floor/tiled/techfloor, -/area/thruster/d3starboard) -"Yj" = ( -/obj/structure/railing/mapped{ - dir = 8; - icon_state = "railing0-1" - }, -/obj/structure/railing/mapped, -/turf/simulated/open, -/area/maintenance/thirddeck/port) -"Yk" = ( -/obj/effect/floor_decal/spline/fancy/wood{ - dir = 1; - icon_state = "spline_fancy" - }, -/obj/structure/bed/chair/comfy/brown{ - dir = 8 - }, -/turf/simulated/floor/carpet, -/area/crew_quarters/recreation) -"Yl" = ( -/obj/structure/table/standard, -/obj/machinery/reagentgrinder/juicer{ - pixel_y = 8 - }, -/obj/item/reagent_containers/glass/beaker/large, -/turf/simulated/floor/tiled/dark, -/area/crew_quarters/bar) -"Yn" = ( -/turf/simulated/wall/prepainted, -/area/chapel/memorial) -"Yr" = ( -/turf/simulated/floor/grass, -/area/crew_quarters/observation) -"Ys" = ( -/obj/structure/disposalpipe/segment{ - dir = 2; - icon_state = "pipe-c" - }, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/thirddeck/aftstarboard) -"Yt" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/door/airlock/highsecurity{ - name = "AI Upload Access" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor, -/area/turret_protected/ai_upload_foyer) -"Yv" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/turf/simulated/floor/tiled/dark, -/area/engineering/hardstorage) -"Yx" = ( -/obj/structure/table/standard, -/obj/item/reagent_containers/spray/cleaner, -/obj/item/reagent_containers/glass/rag, -/turf/simulated/floor/tiled/dark, -/area/crew_quarters/bar) -"Yy" = ( -/obj/machinery/firealarm{ - dir = 4; - pixel_x = 24 - }, -/turf/simulated/floor/tiled/dark, -/area/crew_quarters/sleep/bunk) -"YA" = ( -/obj/structure/lattice, -/turf/simulated/floor/reinforced/hydrogen, -/area/thruster/d3port) -"YB" = ( -/obj/structure/bed/chair/wood/walnut{ - dir = 1 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/crew_quarters/observation) -"YC" = ( -/obj/machinery/space_heater, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/thirddeck/foreport) -"YD" = ( -/obj/effect/floor_decal/corner/blue/diagonal{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/structure/table/standard{ - name = "plastic table frame" - }, -/obj/item/device/radio/intercom{ - dir = 8; - pixel_x = 22; - pixel_y = 4 - }, -/turf/simulated/floor/tiled/white, -/area/crew_quarters/mess) -"YF" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/glass/civilian{ - name = "Galley" - }, -/turf/simulated/floor/tiled/steel_ridged, -/area/hydroponics/storage) -"YG" = ( -/obj/structure/fitness/weightlifter, -/obj/machinery/alarm{ - dir = 8; - pixel_x = 25; - pixel_y = 0 - }, -/turf/simulated/floor/tiled, -/area/crew_quarters/gym) -"YH" = ( -/obj/structure/railing/mapped{ - dir = 1; - icon_state = "railing0-1" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/cyan{ - dir = 6; - icon_state = "intact" - }, -/obj/effect/floor_decal/industrial/warning, -/turf/simulated/floor/plating, -/area/maintenance/thirddeck/port) -"YJ" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/effect/floor_decal/corner/red, -/turf/simulated/floor/tiled, -/area/hallway/primary/thirddeck/fore) -"YK" = ( -/turf/simulated/floor/tiled/freezer, -/area/crew_quarters/head) -"YL" = ( -/obj/machinery/hologram/holopad/longrange, -/turf/simulated/floor/tiled/monotile, -/area/command/disperser) -"YM" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 8; - icon_state = "warning" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/obj/structure/catwalk, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/turf/simulated/floor/plating, -/area/maintenance/thirddeck/forestarboard) -"YO" = ( -/obj/effect/floor_decal/industrial/warning/corner, -/obj/machinery/flasher{ - pixel_x = 24; - pixel_y = 0 - }, -/turf/simulated/floor/tiled/dark, -/area/turret_protected/ai_upload_foyer) -"YP" = ( -/obj/machinery/door/blast/shutters{ - density = 0; - dir = 4; - icon_state = "shutter0"; - id_tag = "hab_hallway_shutters"; - name = "Habitation Deck Hallway Shutters"; - opacity = 0 - }, -/obj/effect/floor_decal/corner/red/mono, -/turf/simulated/floor/tiled/monotile, -/area/hallway/primary/thirddeck/center) -"YQ" = ( -/obj/structure/ladder, -/obj/effect/floor_decal/corner/brown{ - dir = 6 - }, -/obj/effect/catwalk_plated, -/turf/simulated/floor/tiled/steel_grid, -/area/hallway/primary/thirddeck/aft) -"YR" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/turf/simulated/floor/reinforced/airless, -/area/space) -"YS" = ( -/obj/structure/table/woodentable, -/obj/effect/floor_decal/corner/lime{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/fuel{ - dir = 10; - icon_state = "intact" - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/thirddeck/aft) -"YT" = ( -/obj/machinery/atmospherics/binary/passive_gate/on{ - target_pressure = 2000; - use_power = 1 - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 8 - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled/techfloor, -/area/thruster/d3starboard) -"YU" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/effect/floor_decal/corner/red{ - dir = 6; - icon_state = "corner_white" - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/thirddeck/fore) -"YV" = ( -/obj/item/stool, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/thirddeck/aftstarboard) -"YW" = ( -/obj/effect/floor_decal/industrial/warning/fulltile, -/turf/simulated/floor/tiled/steel_grid, -/area/hallway/primary/thirddeck/center) -"YX" = ( -/obj/structure/sign/warning/hot_exhaust{ - dir = 8; - icon_state = "fire" - }, -/turf/simulated/wall/r_wall/hull, -/area/maintenance/thirddeck/aftport) -"YY" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/effect/floor_decal/corner/green{ - dir = 10; - icon_state = "corner_white" - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/thirddeck/center) -"YZ" = ( -/obj/machinery/door/airlock/maintenance{ - name = "Auxiliary Tool Storage Maintenance" - }, -/obj/machinery/door/firedoor, -/turf/simulated/floor/tiled/steel_ridged, -/area/storage/tools) -"Zb" = ( -/obj/effect/wallframe_spawn/no_grille, -/turf/simulated/floor/plating, -/area/crew_quarters/gym) -"Zc" = ( -/obj/machinery/atmospherics/binary/pump/on{ - dir = 4; - target_pressure = 15000 - }, -/obj/effect/floor_decal/industrial/outline/orange, -/turf/simulated/floor/tiled/techfloor, -/area/thruster/d3starboard) -"Zd" = ( -/obj/machinery/atmospherics/pipe/simple/visible/blue{ - dir = 5 - }, -/obj/machinery/meter, -/obj/effect/wallframe_spawn/reinforced_phoron, -/turf/simulated/floor/reinforced, -/area/thruster/d3port) -"Ze" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/hatch/maintenance, -/turf/simulated/floor/tiled/techfloor/grid, -/area/crew_quarters/recreation) -"Zg" = ( -/obj/effect/floor_decal/industrial/outline/grey, -/obj/random/torchcloset, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/thirddeck/aftstarboard) -"Zi" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/obj/structure/disposalpipe/segment{ - dir = 8; - icon_state = "pipe-c" - }, -/turf/simulated/floor/tiled, -/area/storage/tools) -"Zj" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/turf/simulated/floor/bluegrid, -/area/turret_protected/ai_upload_foyer) -"Zk" = ( -/turf/simulated/floor/wood/walnut, -/area/crew_quarters/recreation) -"Zl" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/structure/catwalk, -/obj/structure/cable/green{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply, -/turf/simulated/floor/plating, -/area/maintenance/thirddeck/port) -"Zm" = ( -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 4; - icon_state = "warningcorner" - }, -/obj/machinery/turretid/stun{ - control_area = "\improper AI Upload Chamber"; - name = "AI Upload turret control"; - pixel_x = 32; - pixel_y = 0 - }, -/turf/simulated/floor/tiled/dark, -/area/turret_protected/ai_upload_foyer) -"Zn" = ( -/obj/effect/floor_decal/corner/green/half, -/obj/machinery/vending/fitness{ - dir = 1; - icon_state = "fitness" - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/crew_quarters/observation) -"Zo" = ( -/obj/structure/sign/directions/engineering{ - dir = 1; - pixel_y = 3; - pixel_z = 0 - }, -/obj/structure/sign/directions/supply{ - dir = 2; - pixel_y = -4; - pixel_z = 0 - }, -/turf/simulated/wall/prepainted, -/area/hallway/primary/thirddeck/fore) -"Zp" = ( -/obj/effect/floor_decal/techfloor{ - dir = 4; - icon_state = "techfloor_edges" - }, -/turf/simulated/floor/tiled/techfloor, -/area/crew_quarters/safe_room/thirddeck) -"Zr" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/catwalk, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/plating, -/area/maintenance/thirddeck/starboard) -"Zt" = ( -/obj/item/device/radio/intercom/locked/ai_private{ - dir = 1; - pixel_y = -28 - }, -/obj/machinery/porta_turret{ - dir = 8 - }, -/obj/machinery/light/small{ - dir = 8 - }, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/floor/tiled/dark, -/area/turret_protected/ai_upload) -"Zv" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/disposalpipe/junction{ - dir = 4; - icon_state = "pipe-j1" - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 1 - }, -/obj/effect/catwalk_plated, -/turf/simulated/floor/plating, -/area/hallway/primary/thirddeck/aft) -"Zx" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 8 - }, -/turf/simulated/floor/tiled/freezer, -/area/crew_quarters/galleybackroom) -"Zy" = ( -/obj/structure/closet/crate/internals, -/obj/random/tank, -/obj/random/tank, -/obj/structure/railing/mapped{ - dir = 4; - icon_state = "railing0-1" - }, -/turf/simulated/floor/plating, -/area/maintenance/thirddeck/starboard) -"Zz" = ( -/obj/structure/railing/mapped{ - dir = 1; - icon_state = "railing0-1" - }, -/obj/random/trash, -/turf/simulated/floor/plating, -/area/maintenance/thirddeck/port) -"ZA" = ( -/obj/structure/railing/mapped{ - dir = 8; - icon_state = "railing0-1" - }, -/turf/simulated/open, -/area/crew_quarters/galley) -"ZB" = ( -/obj/effect/floor_decal/corner/grey/diagonal{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/white, -/area/crew_quarters/galley) -"ZD" = ( -/obj/machinery/light/small{ - dir = 1 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/floor_decal/corner/yellow/half{ - dir = 1; - icon_state = "bordercolorhalf" - }, -/turf/simulated/floor/tiled/dark, -/area/engineering/hardstorage) -"ZE" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 1 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/thirddeck/aft) -"ZF" = ( -/obj/machinery/atmospherics/portables_connector{ - dir = 8 - }, -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 4; - icon_state = "warningcorner" - }, -/obj/effect/floor_decal/industrial/hatch/orange, -/obj/machinery/light/small{ - dir = 8 - }, -/obj/machinery/firealarm{ - dir = 2; - pixel_y = 24 - }, -/turf/simulated/floor/tiled/techfloor, -/area/thruster/d3port) -"ZH" = ( -/obj/effect/floor_decal/techfloor{ - dir = 4; - icon_state = "techfloor_edges" - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 8 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/engineering/hardstorage) -"ZI" = ( -/obj/machinery/atmospherics/unary/vent_pump/siphon/on/atmos{ - internal_pressure_bound = 35000; - internal_pressure_bound_default = 35000 - }, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/floor/reinforced/airless, -/area/thruster/d3port) -"ZJ" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 - }, -/obj/structure/catwalk, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/turf/simulated/floor/plating, -/area/maintenance/thirddeck/foreport) -"ZK" = ( -/obj/effect/floor_decal/corner/blue/diagonal{ - dir = 4 - }, -/obj/machinery/alarm{ - dir = 8; - icon_state = "alarm0"; - pixel_x = 24 - }, -/obj/machinery/computer/modular/preset/civilian, -/turf/simulated/floor/tiled/white, -/area/crew_quarters/mess) -"ZL" = ( -/turf/simulated/floor/pool, -/area/crew_quarters/observation) -"ZM" = ( -/obj/machinery/computer/arcade/orion_trail, -/obj/machinery/light, -/turf/simulated/floor/wood/walnut, -/area/crew_quarters/recreation) -"ZN" = ( -/turf/simulated/wall/r_wall/hull, -/area/tcommsat/chamber) -"ZQ" = ( -/obj/machinery/newscaster{ - pixel_x = 32 - }, -/obj/effect/floor_decal/corner/blue/diagonal{ - dir = 4 - }, -/obj/machinery/light/spot{ - dir = 4 - }, -/obj/structure/bed/chair, -/turf/simulated/floor/tiled/white, -/area/crew_quarters/mess) -"ZR" = ( -/obj/machinery/atmospherics/unary/outlet_injector{ - dir = 1; - frequency = 1441; - id = "d3po2_in"; - injecting = 1; - use_power = 1 - }, -/turf/simulated/floor/reinforced/oxygen, -/area/thruster/d3port) -"ZT" = ( -/obj/machinery/atmospherics/unary/outlet_injector{ - dir = 1; - frequency = 1447; - id = "fuelmode"; - injecting = 1; - use_power = 1; - volume_rate = 4000 - }, -/obj/effect/floor_decal/industrial/outline/red, -/turf/simulated/floor/reinforced/airless, -/area/thruster/d3starboard) -"ZU" = ( -/obj/structure/flora/ausbushes/ywflowers, -/turf/simulated/floor/grass, -/area/crew_quarters/observation) -"ZV" = ( -/obj/structure/railing/mapped, -/turf/simulated/floor/plating, -/area/maintenance/thirddeck/starboard) -"ZW" = ( -/obj/structure/table/woodentable_reinforced/mahogany, -/obj/item/spirit_board, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9; - pixel_y = 0 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/turf/simulated/floor/wood/maple, -/area/chapel/main) -"ZX" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/grass, -/area/crew_quarters/observation) -"ZY" = ( -/obj/structure/disposalpipe/segment, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/monotile, -/area/crew_quarters/gym) -"ZZ" = ( -/obj/machinery/beehive, -/turf/simulated/floor/grass, -/area/crew_quarters/observation) - -(1,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(2,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(3,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(4,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(5,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(6,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(7,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(8,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(9,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(10,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(11,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(12,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(13,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(14,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(15,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(16,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(17,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(18,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(19,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(20,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(21,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -Ob -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(22,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(23,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(24,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(25,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(26,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(27,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -uO -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(28,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(29,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(30,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(31,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(32,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(33,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(34,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(35,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(36,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(37,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(38,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(39,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(40,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -qx -qx -qx -qx -vt -qx -qx -qx -vt -qx -qx -qx -qx -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(41,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ZN -ZN -ZN -ZN -ZN -ZN -ZN -ZN -aa -aa -Di -Di -BQ -Fn -YB -nw -Xq -Sh -nB -Vt -BQ -Fn -YB -Di -Di -aa -aa -BV -BV -BV -BV -BV -BV -BV -BV -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(42,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ZN -ZN -ZN -ZN -ZN -ZN -ZN -ZN -ZN -aa -aa -Di -lV -Yr -ZU -mL -FQ -fJ -Th -fJ -FQ -Yr -Yr -Yr -np -Di -aa -aa -BV -BV -BV -BV -BV -BV -BV -BV -BV -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(43,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ZN -ZN -ZN -ZN -ZN -ZN -ZN -ZN -ZN -ZN -ZN -ZN -vt -UM -mL -nJ -nJ -mN -Yr -Th -Yr -mL -Yr -mN -Yr -IX -vt -BV -BV -BV -BV -BV -BV -BV -BV -BV -BV -BV -BV -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(44,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ZN -ZN -ZN -ZN -ZN -eh -bQ -ga -bQ -hQ -ZN -ZN -ZN -Ww -lW -mM -ZZ -nJ -ZU -Yr -Th -Yr -Yr -vy -Yr -Yr -KZ -yH -BV -BV -BV -zl -BX -BX -BX -BX -BV -BV -BV -BV -BV -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(45,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ZN -ZN -ZN -ZN -ZN -Gh -Wi -eS -gb -gY -jo -Xi -aM -aM -Ww -lX -mN -nJ -nJ -mN -fJ -Th -fJ -Yr -ZL -ZL -mN -yG -yH -BV -BV -BW -BX -ot -Ef -Ef -BX -BV -BV -BV -BV -BV -BV -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(46,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ZN -ZN -ZN -ZN -bQ -Xf -NC -ej -eT -gc -gZ -hS -Nt -jx -ku -Ww -lY -ZU -mL -mO -mL -fJ -Uh -fJ -Yr -Qf -yu -Yr -PH -yH -CF -CF -CF -CF -CF -CF -CF -BX -BX -BX -BX -BV -BV -BV -BV -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(47,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ZN -ZN -ZN -ZN -bR -cx -NC -ek -eU -gd -ha -hT -OM -jy -kv -Ww -lZ -mO -nJ -NL -mM -fJ -Th -fJ -Yr -ZL -ZL -Yr -zz -yH -Yc -LS -zD -tc -LA -uz -CF -zS -zS -zS -BX -BV -BV -BV -BV -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(48,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ZN -ZN -ZN -bi -bS -cy -NC -el -eV -gd -hb -hU -OM -jz -kw -Ww -ma -Yr -ZZ -nJ -ZU -Yr -Th -Yr -ZU -Yr -mL -Yr -yI -yH -Yc -oO -TT -LF -JN -MP -CF -GV -RV -YC -Yb -Yb -BV -BV -BV -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(49,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ZN -ZN -ZN -bj -bT -cz -dp -em -eW -wg -hc -hV -fk -jA -kx -Ww -ma -mN -nJ -nJ -mL -Yr -Th -Yr -Yr -Yr -Yr -Yr -Zn -yH -lP -Yk -SF -SF -Nv -MP -CF -Yb -Ur -Ur -Ur -Gu -BV -BV -BV -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(50,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -EJ -EJ -EJ -bk -bk -bk -bk -en -eX -gf -en -hW -iJ -jB -ky -Ww -mc -mR -nL -oJ -pD -qC -rP -tj -uv -vD -ZX -ZX -zB -yH -WX -UF -Wl -ns -Nv -ZM -CF -Mf -Es -zS -Yb -Ur -BV -BV -BV -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(51,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -EJ -EJ -EJ -bl -bU -cA -dq -en -eY -gg -ND -hX -iK -jC -kz -Ww -Ww -yH -yH -yH -QQ -wS -rQ -RP -QQ -yH -yH -yH -yH -yH -SX -Mo -nY -SF -Nv -Yd -CF -zS -zS -zS -CM -Ur -BV -BV -BV -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(52,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -EJ -EJ -EJ -bm -bV -cB -ei -en -eZ -gh -en -hY -iL -jD -kA -lm -ep -mS -nP -oL -pF -Vl -rR -Tq -pF -vF -ts -xI -mj -Kd -Zk -Mo -MF -SF -OJ -hG -CF -Gs -UO -zS -CM -Ur -BV -BV -BV -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(53,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -EJ -EJ -EJ -bn -bW -bW -ge -eo -fa -gi -hd -hZ -iM -jE -kB -uj -md -mT -nQ -oM -yy -yM -rS -Of -yy -vG -wI -xJ -tR -Pc -Pc -Ok -Pz -Hw -tp -Zk -Ze -Yb -Ur -Ur -Ur -Ur -BV -BV -BV -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(54,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -EJ -EJ -EJ -bo -bX -cC -dt -en -fb -gj -he -ia -iN -jF -kC -lo -ep -mU -nR -pM -pM -pM -Yt -pM -pM -pM -wJ -pq -mj -EU -Zk -BD -Ut -WW -Om -Te -CF -UI -Yb -Yb -Yb -Ur -BV -BV -BV -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(55,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -EJ -EJ -EJ -aN -aN -aN -aN -ep -ep -ep -ep -ep -ep -ep -ep -ep -ep -mV -nS -pM -pH -qG -rT -qG -zC -pM -Cb -Vb -yN -yN -yN -yN -yN -yN -zS -zS -zS -zS -eH -zS -GS -Ur -BV -BV -BV -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(56,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aO -aO -aO -bp -bs -QS -bZ -eq -bu -bu -bu -ib -bp -jG -xr -lp -cG -mj -nT -pM -DE -Zj -sL -oS -Ng -pM -wL -xM -yP -zL -gq -Xc -Cg -yN -fT -Ur -Ur -Ur -Yb -zS -GT -Ur -BV -BV -BV -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(57,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aO -aO -aO -bq -bs -bs -Mu -Mu -Mu -Mu -hf -Mu -Mu -Mu -Mu -Mu -ff -bs -nU -pM -JM -YO -rU -Zm -UH -pM -wM -xN -yN -OC -XH -Bj -Cf -yN -fT -Ur -gQ -kX -Yb -zS -zS -Gv -BV -BV -BV -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(58,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aO -aO -aO -br -bs -cD -dv -dv -dv -dv -dv -dv -dv -dv -dv -dv -QR -Uy -nU -uH -uH -uH -Rh -uH -uH -uH -wN -IQ -yN -zH -At -Bi -Cc -yN -gu -Ur -gT -lb -Yb -Tp -Ur -Ur -BV -BV -BV -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(59,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aO -aO -aO -gB -bs -xr -dv -er -fc -gk -hg -hg -iO -jH -kD -dv -me -mW -nV -uH -pL -pG -oK -iE -Zt -uH -wO -Uo -yN -zI -At -MG -Cc -yN -gM -Ur -hv -lf -Yb -zS -GU -Hl -BV -BV -BV -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(60,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aO -aO -aO -EI -bY -cF -dv -er -fd -gl -gl -gl -iP -jI -kE -lq -mf -cG -Mu -uH -My -qu -Tz -qu -uC -uH -wP -xP -yO -zJ -Au -Bk -Ce -yN -Ft -Ur -ja -lh -Yb -zS -zS -zS -BV -BV -BV -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(61,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aO -aO -aO -SC -SC -SC -dv -er -fd -gm -gm -gm -gm -jJ -kF -lr -mg -cG -Mu -uH -pJ -qY -qI -qu -uB -uH -wQ -xQ -yN -yN -yN -yN -yN -yN -Ur -Ur -Ur -Ur -Yb -Yb -zS -XS -BV -BV -BV -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(62,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aO -aO -aO -bu -bu -bu -dv -er -fd -gn -hh -hh -iQ -jI -kG -lq -mh -qH -Mu -uH -Uc -qu -qu -qu -Xg -uH -wR -xR -ez -Ur -Ur -Ur -Ur -Ur -Ur -Bm -Bm -Bm -Bm -Yb -BX -Hm -BV -BV -BV -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(63,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aO -aO -aO -aO -bu -bu -dv -er -fe -go -hi -ic -iR -jK -kH -dv -cK -cG -UJ -uH -yh -uG -Wz -uG -wy -uH -WD -XX -Bm -Bm -Bm -Bm -Bm -Bm -Bm -Bm -EN -EN -Bm -Yb -jr -BV -BV -BV -BV -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(64,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aU -aO -aO -aO -aO -ff -dv -dv -dv -dv -dv -dv -dv -dv -dv -dv -cK -cG -cG -ML -ML -ML -ML -vI -ML -IF -wR -xR -Bm -jN -jR -lK -PE -Hv -VL -Bm -EO -Fv -Bm -Yb -BV -BV -BV -BV -aU -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(65,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aU -aU -aO -aO -aO -bu -dw -bu -bu -bu -bu -id -cF -cE -cG -ls -cK -Zo -oa -oT -pO -SE -sc -VU -VU -ob -qL -xT -Bm -NY -xV -NY -tG -DI -Ps -Bm -EP -Bm -Bm -Oz -BV -BV -BV -aU -aU -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(66,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aU -aU -aO -aO -aO -cG -cG -cG -cG -TJ -bu -id -cI -dx -kI -dx -mi -MD -VU -hK -pO -SE -sc -VU -VU -QJ -sN -ip -Bn -RA -xV -NY -kP -lD -lF -Ep -EQ -lN -Bm -Yb -BV -BV -BV -aU -aU -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(67,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aU -aU -aO -aO -aO -cH -xr -xr -fg -IL -IN -IP -cK -cG -cG -cG -mj -mY -oc -oU -pP -mj -se -VU -VU -VU -fC -iI -jh -jP -jS -ks -lv -lE -DK -Zp -Zp -UL -lL -Yb -BV -BV -BV -aU -aU -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(68,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aU -aU -aO -aO -aO -cI -dx -dx -fh -IM -IO -ie -iS -jL -Xk -kJ -mk -PV -od -oV -mZ -mZ -sf -MB -uI -tl -gF -LC -Bm -Bm -Bm -Bm -Bm -CX -Bm -CX -Bm -CX -Bm -li -BV -BV -BV -aU -aU -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(69,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aU -aU -aO -aO -aO -cJ -cG -cG -fi -cG -cG -if -iT -jM -lt -bs -mj -na -oe -oW -Iq -NE -sg -YJ -oy -YU -rb -xX -mj -zR -jU -Bm -Bm -CY -Bm -CY -Bm -CY -Bm -Yb -BV -BV -BV -aU -aU -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(70,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aU -aU -aO -aO -aO -cK -cG -es -fj -gp -qh -MY -YM -XZ -wD -wD -wD -wD -wD -wD -wD -tt -sh -tt -uK -xU -dE -up -Vx -LB -Wq -Qz -Bm -Bm -Bm -Bm -Bm -Bm -Bm -Yb -BV -BV -BV -aU -aU -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(71,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aU -aU -aO -aO -aO -cK -cG -dy -dy -dy -dy -dy -GE -dy -wD -lu -lu -lu -lu -lu -pS -qP -VM -tP -LV -Qx -Kc -KS -Vx -Px -AB -Bp -NV -pK -vM -vM -vM -vM -vM -vM -Gw -BV -BV -aU -aU -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(72,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aU -aU -aO -aO -aO -cK -cG -dy -AX -Ry -qn -wC -Uq -PI -wD -lu -lu -lu -lu -lu -pT -Xn -sj -tv -UA -Qv -jQ -nI -Vx -tU -an -Ma -ZJ -uM -uM -uM -uM -uM -uM -uM -NJ -BV -BV -aU -aU -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(73,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aU -aU -aO -aO -Fy -cK -WQ -dy -iU -gs -Ol -gs -Uq -ih -wD -lu -lu -lu -lu -lu -pT -qQ -sk -tw -xb -QE -jQ -XJ -Vx -Ou -uM -uM -Sj -uM -vN -yR -DB -yR -xY -uM -LW -BV -BV -aU -aU -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(74,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aU -aO -aO -aO -Mp -mi -bp -dy -et -SA -hm -Zx -ST -eu -wD -lu -lu -lu -lu -lu -pT -Xn -sj -tx -Vx -Fz -jQ -TS -Ga -Bq -uM -FV -Cn -wW -wW -wW -vO -wW -wW -uM -Bq -BV -BV -aU -aU -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(75,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aO -aO -aO -aO -cK -bs -Fy -dy -dk -gs -hn -ij -iW -dy -wD -lu -lu -lu -lu -lu -wD -NA -Us -Nn -uN -Sm -Ns -VI -Vx -Bq -uM -Bs -Cn -wW -xY -yR -vP -yR -RX -uM -Bq -BV -BV -BV -aU -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(76,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -Mb -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aP -aP -aP -aP -cL -ca -ca -dy -dy -Mv -dy -IR -dy -dy -wD -wD -wD -wD -wD -wD -pU -YP -sl -pn -Vx -Vx -Vx -Vx -Vx -Bq -uM -Bt -Co -wW -wW -wW -KO -wW -wW -uM -Bq -GW -BV -BV -BV -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(77,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aP -aP -aP -Oe -cb -cM -dA -MC -rm -TW -ho -ik -iX -kL -OX -SP -ml -cU -eQ -ft -kT -YW -VW -OI -uL -vM -vM -vM -vM -LY -uM -Bu -Cp -Bh -Cp -xG -WR -Yy -Cn -Sj -Bq -PB -BV -BV -BV -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(78,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aP -aP -aP -bw -cc -kc -dA -mF -fp -fp -fp -il -ZB -Vi -bP -lw -mm -nc -og -oY -kL -Xn -sj -wV -wD -zS -ya -uM -uM -uM -uM -Cq -Cn -wW -gN -wW -DY -wW -uM -uM -Ou -zS -BV -BV -BV -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(79,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aP -aP -aP -bx -cc -hl -ca -fq -fp -Od -ww -im -iY -kL -lx -mn -Yx -nd -oh -oZ -pV -Xn -pr -dP -wD -vR -wY -uM -yS -zU -AD -Cr -Bv -wW -DN -wW -EV -FC -uM -sM -Gy -Ho -BV -BV -BV -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(80,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aP -aP -aP -by -cc -cN -YF -ig -fp -du -Fw -ii -ev -kL -kN -mo -oi -oi -Yl -pa -pV -qQ -sk -tD -wD -Gt -Br -uM -yT -FC -uM -Cs -OP -wW -DO -wW -MV -FC -uM -UX -lR -Hp -BV -BV -BV -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(81,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aP -aP -aP -aj -cd -cO -Qe -ew -fp -fp -fy -Tg -Fx -bB -kO -nf -Ky -nf -nf -pb -pW -qP -IY -tE -Fd -Fd -Fd -Fd -Fd -Fd -uM -FW -uM -Fd -Fd -Fd -Fd -Fd -FS -GA -FS -FS -zG -BV -BV -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(82,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aP -aP -aW -Sq -bA -cP -bA -Rq -fv -fp -hr -FG -ev -Ug -Vg -Vg -vr -Vg -Vg -pc -kL -xE -IZ -Jc -Fd -xZ -CZ -yb -yU -Da -Et -Gx -XR -Db -DP -En -EW -Fd -vb -GB -Rk -FS -zG -BV -BV -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(83,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aI -aW -aW -Vm -ce -cQ -dG -ey -fv -fp -fw -Tg -Qu -gv -cT -cT -cT -dY -cT -pd -pX -qS -sn -Jd -uQ -EX -EX -yc -yV -EX -EX -GZ -Pw -Dc -DQ -EX -EX -Fd -DL -GD -qg -zG -zG -aU -aU -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(84,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -Xr -mv -be -Tm -Op -cf -cR -dH -ey -FY -gw -hs -ir -As -jV -kQ -PO -Sv -nh -WH -pe -pY -QM -so -YY -uR -vW -vW -yd -yW -vW -vW -vW -vW -Dd -DR -UY -UY -FD -rV -wq -Fc -zn -zn -ui -KR -KB -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(85,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -CS -be -bC -lA -Xm -wn -xn -ey -ZA -ZA -ht -is -TH -jW -AA -AA -AA -ni -RN -jc -pZ -Xn -sp -Mz -uS -vS -vS -ye -yX -vS -vS -vS -vS -De -za -Fd -LX -Fd -Fd -Lk -EL -zG -zG -aU -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -Nb -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(86,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -CS -be -TX -Td -TX -wn -Kn -ev -Lb -CO -cs -ev -ev -jX -lz -mp -lz -ka -RN -pf -fB -qU -sj -zo -uT -vT -vT -yf -yY -vT -vT -vT -vT -Df -za -NF -Hc -Hc -Fd -Ji -FS -zG -zG -aU -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(87,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -CS -be -Oy -nO -Mx -wn -Mn -eC -kb -gy -SS -iu -hu -UK -lz -lz -lz -Ko -RN -pg -fB -le -VM -tH -Fd -vU -vU -yf -yY -vU -vU -vU -vU -Df -Ub -Fd -Fd -Fd -Fd -Dy -Ql -Hf -Hf -aU -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(88,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -CS -be -TX -zg -TX -wn -nZ -Sw -Tb -VT -rM -qb -ly -Tx -XO -XO -XO -jn -RN -jj -Nw -qQ -sk -tI -Fd -vV -vV -yg -yZ -vV -vV -vV -vV -Dg -za -Ew -Fd -Nj -Gf -Dy -qO -Hf -Hf -aU -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(89,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -LP -pE -Um -vZ -Mx -wn -Pn -bA -AC -Tb -hw -iv -gz -jY -jd -jd -jd -nj -Lx -jc -Nw -Xn -sj -tJ -Fd -Cj -yk -fm -PJ -zV -AE -Bw -Ct -Dh -PJ -Lh -Fd -Oj -Xj -Dy -PM -Hf -Hf -aU -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(90,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -CS -be -TX -TX -TX -wn -XT -bA -ZK -Aq -rM -rL -AA -dF -jc -lB -mq -nk -jc -pi -fB -qV -sj -tC -Fd -Fd -Fd -Fd -fS -Fd -Fd -Fd -Fd -Fd -DS -Fd -Fd -Ez -Ez -Dy -Vz -Hf -Hf -aU -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(91,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -CS -be -Oy -Mx -Mx -wn -Qn -bA -fB -fB -gA -fB -jf -YD -jc -ZQ -Xs -nk -EK -OB -fB -qR -sr -qR -uU -vY -eE -YK -gK -uU -BH -iB -js -uU -WU -Ex -Tw -qN -qN -gt -Uu -Hf -Hf -aU -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(92,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -CS -be -TX -TX -TX -wn -Rn -bA -Po -gC -hy -fB -fB -fB -ct -fB -fB -fB -fB -fB -fB -tF -sj -tL -uU -uU -uU -Tt -fV -Fq -gO -iD -ju -uU -UE -UZ -Hd -Pj -Yj -jk -JL -Hf -Hf -aU -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(93,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -CS -be -Oy -GY -ch -cX -Sn -bA -fE -gD -hz -WN -kY -fB -ld -fB -Sx -nm -fU -XE -wD -Xn -sj -Dt -uU -vY -eE -YK -fW -uU -RE -AG -By -uU -do -UZ -YH -WL -hJ -TB -SI -Hf -Hf -aU -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(94,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -Xr -YR -be -bD -jT -ci -cY -dN -bA -fF -pw -Ot -os -VD -fB -ld -fB -QT -dd -aY -RF -wD -MS -sj -UQ -uU -uU -fz -YK -gr -uU -hL -hL -hL -hL -hL -UZ -Vf -Ez -Ez -DD -KW -Vr -Vr -ui -KR -KB -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(95,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aI -aW -aW -bA -bA -cZ -bA -bA -fG -cl -cl -ZV -Vv -fB -fB -fB -cl -yQ -aY -CH -wD -qP -RQ -cV -uU -fo -YK -YK -gK -TZ -hL -iF -jO -km -hL -UZ -kq -Ez -xk -CE -Ge -Hf -Hf -aU -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(96,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ad -ad -aa -aa -aa -aa -aI -aQ -aQ -aQ -cj -rz -dO -cl -NH -Ux -cl -aY -vd -RB -RB -RB -RB -dI -kY -cl -wD -Xn -sj -dB -uU -fo -YK -YK -gK -LL -hP -iV -ke -kt -hL -UZ -TQ -Ez -Ck -CE -Ge -Hf -Hf -aU -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(97,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ag -at -aw -ad -aa -aa -aa -aa -aa -aI -aQ -aQ -MJ -db -Zr -cm -fH -tu -cl -Dz -rK -ze -ze -ze -ze -Ss -VZ -RB -TO -rc -cS -dC -dK -YK -YK -MX -gL -hj -iy -iZ -kf -kM -hL -zZ -Ez -Ez -Ez -OZ -Ez -Hf -Hf -aI -aa -aa -aa -aa -aa -Qq -Qq -Im -Qq -Qq -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(98,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -nb -ag -ag -ad -ad -aa -aa -aa -aa -aI -aQ -aQ -Pd -Gz -EF -cl -dD -cl -cl -OE -aY -KC -KC -KC -KC -aY -Eq -Eq -wD -aR -sk -xf -uU -eB -YK -in -Ix -in -hP -jl -kg -kU -hL -Vw -wf -wf -FH -Zl -Ts -Hf -Hf -aI -aa -aa -aa -aa -aa -Qq -Ic -In -ix -Qq -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(99,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ag -ao -ak -av -ag -ad -ad -aa -aa -aI -aQ -aQ -aQ -WZ -VR -oH -cl -cl -Wb -Wb -Wb -Wb -Wb -Wb -Wb -Wb -Wb -Wb -Wb -Wb -VC -RQ -dC -uU -eD -YK -fD -fD -hp -hL -jp -kh -km -hL -CE -Ez -Ff -Ez -HD -Ts -Hf -Hf -Hf -aI -aa -aa -Qq -Qq -Qq -oz -Io -hM -Qq -Qq -Qq -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(100,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -QC -ae -ae -ag -ae -ae -aB -ad -aa -aI -aQ -aQ -aQ -aQ -ck -VR -Uv -cl -dD -Wb -Rf -Rf -Ap -tT -eL -Qd -Nd -RW -Oc -Jg -Wb -sW -sv -re -uU -uU -fl -uU -uU -uU -hL -hL -hL -hL -hL -CE -Ez -Fe -Ez -Qy -Ts -Hf -Hf -Hf -Hf -aI -aa -Qq -HT -HZ -Id -Ip -Xy -kr -vf -Qq -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(101,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -af -ag -ag -ae -ae -ag -QC -ad -aa -aI -aQ -aQ -aQ -bE -QY -dc -dQ -eF -fK -Wb -Rf -Sf -UC -WB -jb -VF -VF -VF -VF -WB -Zb -cw -su -Ly -VG -wf -wf -wf -wf -wf -wf -wf -wf -Dk -wf -EA -Ez -Ez -Ez -Hy -Hh -Hx -Hf -Hf -Hf -aI -aa -Qq -HH -Ia -Pl -Ui -uA -Iy -ME -Qq -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(102,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -QC -ae -ae -ag -av -az -av -ad -ad -ad -ad -aQ -bh -MI -cl -bE -cl -cl -da -Wb -Nx -Rf -PG -xF -SU -VF -hx -Vc -hx -WB -Zb -rf -XP -ov -wl -Ez -Ts -Ts -BS -Ez -LK -OO -Dv -Ez -Ez -DT -Dn -Dn -Dn -Dn -Dn -HD -Ts -Hf -Qq -Qq -Qq -Qq -HU -Vo -Ia -Ia -iz -Vo -IA -Qq -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(103,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ag -ak -ap -au -ax -ag -aC -ad -aG -aJ -ad -aX -aY -bF -cl -aY -dR -cl -da -Wb -Rf -Sf -QV -Pa -XK -Fs -VJ -pp -VJ -ZY -sI -Qs -sw -RC -VE -Ez -xg -sQ -Zz -AN -AN -AN -AN -Ez -Ny -Hn -ub -FI -Gi -Gj -ub -HD -Ts -HE -HI -HL -HP -HI -fA -Ek -pR -Ir -OQ -dz -IB -Qq -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(104,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ag -ae -aq -ao -We -ID -ag -az -ag -ag -aE -IE -aY -PP -cl -dd -IE -cl -fL -Wb -Rf -Rf -NN -WB -hx -Ro -hx -oC -YG -NB -Wb -rh -sx -tS -wl -wl -wl -wl -wl -AN -zE -Bz -TV -AN -RT -CE -ub -Gj -GI -Hi -ub -sS -tz -tz -HJ -HM -HM -HJ -UN -HQ -Ie -VQ -YL -zF -IB -Qq -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(105,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -QC -ae -ag -av -ag -ag -eA -aE -ae -aK -aS -aZ -aZ -bG -cl -de -dd -cl -da -Wb -Wb -eI -eI -eI -eI -eI -eI -eI -eI -eI -eI -ri -sy -QF -OW -IV -Pr -bf -bf -bg -AI -BA -nu -YZ -Ts -CE -ub -Fj -GI -Hj -ub -vk -or -or -HK -HN -FU -HS -HV -ty -gS -WG -bt -zh -Be -Qq -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(106,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -QC -al -ae -av -ay -aA -ag -aF -aH -aL -ad -ba -aY -PP -cl -aX -dS -cl -da -dD -bv -Wp -bz -Xz -Ve -VY -VY -gR -SL -FT -Wp -bc -Ja -Je -gU -wj -xS -xS -Nf -zY -Hu -Zi -Cv -AN -qi -So -ub -FJ -Gk -GJ -ub -Ts -Ts -HG -HI -HO -HR -HI -FE -Ib -If -Is -HB -kS -UU -Qq -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(107,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ah -ag -ae -ag -ag -av -av -ad -ad -ad -ad -aQ -Zy -bH -cl -cl -cl -cl -fM -sZ -sZ -Lz -xz -fr -lC -Ae -XM -Yv -Up -MU -fn -rk -Jb -sW -rp -wk -Lj -sW -jm -PA -AK -BK -Cw -AN -Ov -JV -ub -ED -II -FN -ub -ko -ny -Hf -Qq -Qq -Qq -Qq -HW -DF -HW -It -HW -HW -HW -Qq -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(108,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ai -ae -ar -ae -ag -ae -aD -ad -aa -aI -aQ -aQ -aQ -bI -cm -df -df -df -fN -rH -KI -eI -ZD -sP -ex -cW -Vd -no -on -MU -eI -rl -Jb -sW -rp -sW -sW -sW -mE -MN -AL -BK -Cx -AN -TN -JV -ub -Fj -Fj -GK -ub -ug -Hf -Hf -Hf -aI -aa -Qq -HX -DM -DU -IK -rG -Pp -QL -Qq -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(109,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ag -ae -ag -ag -ak -ag -aD -ad -aa -aI -aQ -aQ -aQ -bJ -cl -dg -dT -nC -nC -nC -nC -eI -XD -PQ -rC -dr -Up -Ar -oo -pm -eI -cg -sz -re -Em -YQ -xl -yp -YQ -AN -AM -BL -Cy -AN -tZ -EB -ub -FK -ED -GL -ub -xm -Hf -Hf -Hf -aI -aa -Qq -qq -Ow -Qj -DJ -XN -Pp -iw -Qq -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(110,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -am -ag -ae -UD -am -ad -ad -aa -aI -aQ -aQ -aQ -bJ -nC -nC -nC -nC -fO -Eg -hB -eI -QK -jq -hH -ZH -ZH -ZH -ZH -Mh -eI -ra -sB -OY -wl -wl -wl -wl -wl -AN -AN -AN -AN -AN -jt -Dn -Dn -Dn -Gl -Dn -Dn -xm -Hf -Hf -Hf -aI -aa -Qq -Qq -Rl -Pp -Pp -Pp -Rl -Qq -Qq -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(111,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ag -at -ag -ad -ad -aa -aa -aI -aT -aT -aT -bK -nC -dh -dU -PF -fP -gG -hC -eI -gP -xv -XC -ds -uh -yD -dM -dM -eI -rk -sC -tW -vh -yq -Og -yq -Yn -Er -XB -iC -Yn -Ba -CE -Dn -DV -Fg -EC -Gm -Dn -Hz -jZ -jZ -jZ -aI -aa -aa -Qq -Qq -Ih -Pp -Iw -Qq -Qq -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(112,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -as -ag -ag -ad -aa -aa -aa -aI -aT -aT -aT -bL -nC -di -dV -NM -fQ -gH -hD -WP -rA -xW -FR -nA -qd -qd -qd -qd -qd -sW -sv -sW -Un -QH -xo -xp -Yn -vo -AP -AS -Du -Ba -CE -Dn -DW -Fh -FL -FL -Hk -Ba -jZ -jZ -jZ -aI -aa -aa -aa -Qq -Ih -Xd -Iw -Qq -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(113,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ad -ad -aa -aa -aa -aI -aT -aT -mG -bL -cn -dj -dW -NW -NO -gI -hE -nA -lg -ki -OT -nA -mx -nl -ok -pj -qc -Oq -sE -je -vg -wp -xu -XF -Yn -wK -RR -AQ -Yn -Ba -CE -Dn -Dn -Dn -Gn -Dn -Dn -Ba -jZ -jZ -jZ -aI -aa -aa -aa -Qq -Qq -Qq -Qq -Qq -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(114,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aI -aT -aT -St -LT -nC -Ms -dX -eG -fR -Tr -gJ -nA -nA -kj -kZ -nA -my -nt -ol -pk -om -lc -Zv -Ik -py -xO -sH -TL -Yn -SK -LQ -Uw -Yn -Ba -CE -ub -Fi -Fj -ED -ED -ub -Ba -jZ -jZ -jZ -aI -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(115,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aI -aT -aT -mG -bL -nC -nC -nC -nC -nC -qd -qd -qd -rv -kd -kW -qd -qd -nn -om -Fr -qd -rr -sG -je -vg -Tv -CQ -yt -Yn -wH -mB -DA -Yn -Nq -CU -ub -Fj -FM -Go -GN -ub -Ba -jZ -jZ -jZ -aI -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(116,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aI -aT -aT -aT -bL -OA -OA -dn -Zg -SY -qd -hA -hA -hA -hA -hA -hA -hA -hA -hA -hA -qd -Bg -AR -ua -vh -wr -vi -NI -Yn -yr -Ke -Iv -Yn -Do -DZ -ub -Fk -IH -Gm -GO -ub -Ba -jZ -jZ -jZ -aI -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(117,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aI -aT -aT -aT -bM -co -co -dZ -dn -YV -qd -hA -hA -hA -hA -hA -hA -hA -hA -hA -hA -qd -PX -Wh -ji -RG -RG -RG -RG -RG -RG -RG -rE -RG -RG -CU -ub -Ox -FK -Fj -GP -ub -Ba -jZ -jZ -jZ -aI -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(118,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aI -aT -aT -aT -bN -cp -dl -ea -dl -dl -qd -hA -hA -hA -hA -hA -hA -hA -hA -hA -hA -qd -wB -sJ -sW -RG -wt -xs -yv -zr -CL -AV -BO -CI -RG -Lr -ub -ED -Fj -Gp -ub -ub -Ba -jZ -jZ -jZ -aI -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(119,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aI -aT -aT -aT -bN -OA -dm -eb -eJ -yL -qd -hA -hA -hA -hA -hA -hA -hA -hA -hA -hA -qd -Wx -sF -Mi -TR -wu -xt -yw -zs -Ag -AW -BN -CJ -RG -CU -ub -ED -ub -ub -ub -IJ -Tk -jZ -jZ -jZ -aI -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(120,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aI -aT -aT -aT -qv -cr -dl -ec -eK -nq -qd -hA -hA -hA -hA -hA -hA -hA -hA -hA -hA -qd -rt -kR -ue -vn -Eh -Mj -uq -Mj -XY -WA -ZW -BF -RG -CU -ub -Ya -ub -Gq -GQ -EE -EE -jZ -jZ -jZ -aI -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(121,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aI -aT -aT -aT -pz -Dp -dl -ed -ab -hk -qd -hA -hA -hA -hA -hA -hA -hA -hA -hA -hA -qd -lc -Xv -UV -TR -MZ -xs -yv -zu -lQ -AW -BP -CJ -RG -CU -Dn -Dn -Dn -EE -EE -EE -EE -jZ -jZ -jZ -aI -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(122,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aI -bd -bd -bd -un -IS -dl -dl -eM -dl -qd -hA -hA -hA -hA -hA -hA -hA -hA -hA -hA -qd -ru -Xv -sW -RG -WT -xt -yw -tN -lQ -yz -LM -SW -RG -JX -JZ -Kb -Kb -Ki -Kb -Kl -zy -pI -pI -pI -aI -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(123,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aI -bd -bd -eO -QX -Ea -Jq -OA -eN -cq -qd -hA -hA -hA -hA -hA -hA -hA -hA -hA -hA -qd -WE -Xv -sW -TE -TE -xx -xx -TE -lQ -Ag -Ag -Ag -vm -FZ -Bc -Bc -Bc -Bc -EE -Kk -VA -ps -pI -pI -aI -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(124,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aI -bd -bd -eP -bd -Hr -Jr -Js -Ju -cq -qd -hA -hA -hA -hA -hA -hA -hA -hA -hA -hA -qe -lJ -AR -GC -TE -wz -OL -XU -TE -Rm -RG -Ag -Ag -RG -JY -Bc -Fm -FO -Bc -Bd -YX -pI -Ks -pI -pI -aI -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(125,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aI -bd -bd -fY -bd -aT -vc -Xu -Jt -fX -qd -hA -hA -hA -hA -hA -hA -hA -hA -hA -hA -qd -rw -Xv -je -TE -wA -xy -yB -TY -JR -RG -RG -NZ -RG -JT -Dq -EE -EE -Gr -EE -jZ -pI -Ku -pI -pI -aI -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(126,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -bd -bd -fY -bd -aT -QU -Dj -Jz -nz -qd -qd -qd -qd -qd -qd -qd -qd -qd -qd -qd -qd -rx -sR -uk -TE -Pg -xy -yC -BR -Re -RG -Nz -Fl -RG -Eb -uV -qM -uV -lM -EE -jZ -pI -Ku -pI -pI -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(127,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -bd -bd -fY -bd -aT -dn -ef -SH -fZ -dn -Fa -ES -UG -Rs -ve -lT -mK -nG -oA -wl -wl -Tn -Xv -ul -TE -TE -OG -Nm -Xa -LI -TE -TE -TE -TE -JT -EE -Fo -hN -zt -EE -jZ -pI -Ku -pI -pI -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(128,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -bd -bd -fY -bd -aT -aT -eg -eR -Jw -Jw -JC -iG -jv -CT -ve -lU -mK -mK -wl -wl -qr -Vn -op -um -vu -TE -TE -TE -hq -VB -Ej -BU -CN -TE -Ed -EG -Fp -Nc -Qm -jZ -jZ -pI -Ku -pI -pI -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(129,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aV -bd -fY -bd -aT -aT -aT -aT -Xp -dn -JB -iH -jw -IW -ve -ve -lj -ve -wl -WY -qs -TC -sU -ZE -YS -oX -TE -TE -TE -TE -TE -TE -TE -TE -Ra -Wr -Ne -jZ -jZ -jZ -EH -pI -Ku -pI -aV -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(130,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aV -bd -fY -bd -aT -aT -aT -aT -aT -gX -Ys -JD -JE -JF -JG -Na -Na -Na -JI -JK -fs -zq -JO -Lw -JP -GF -qZ -JU -JU -JU -JU -JU -SD -JU -Ee -Rr -gx -jZ -jZ -jZ -EH -pI -Ku -pI -aV -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(131,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aV -bd -fY -bd -cv -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -MM -Su -qt -ux -tA -Kt -PT -Su -MM -jZ -jZ -jZ -jZ -jZ -jZ -jZ -jZ -jZ -jZ -jZ -jZ -jZ -jZ -pI -Ku -pI -aV -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(132,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -bd -bd -fY -bd -aT -aT -aT -aT -cv -cv -aT -aT -aT -aT -aT -aT -aI -aI -aI -Su -Su -rB -sX -uo -Su -Su -aI -aI -aI -jZ -jZ -jZ -jZ -jZ -jZ -EH -EH -jZ -jZ -jZ -jZ -pI -Ku -pI -pI -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(133,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -bd -bd -PW -bd -kp -bd -kp -aT -cv -aT -aT -aT -aT -aT -aI -aI -aI -aI -Sp -KR -xi -xi -Tu -xi -xi -KR -mv -aI -aI -aI -aI -jZ -jZ -jZ -jZ -EH -EH -jZ -pI -pI -tK -pI -RH -pI -pI -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(134,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -bd -LE -gV -JS -PC -Xb -kp -bd -aT -aT -aT -aT -aT -aa -aa -aa -aa -aa -SO -aa -aa -aa -aa -aa -aa -aa -SO -aa -aa -aa -aa -aa -jZ -jZ -jZ -jZ -jZ -pI -pI -hI -QZ -kk -VV -Wu -pI -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(135,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -bd -bO -Vp -RM -oB -lI -si -bd -aT -aT -aT -aT -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -jZ -jZ -jZ -jZ -pI -wm -YA -Ws -qW -Kv -KA -pI -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(136,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -bd -qp -gW -KH -kl -Bl -WC -bd -aT -aT -aT -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -jZ -jZ -jZ -pI -it -Sy -Zd -Lq -Kw -iq -pI -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(137,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -bd -bd -jg -hO -zx -IU -bd -bd -bd -bb -aT -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -jZ -bb -pI -pI -pI -Km -Kp -Kx -OK -pI -pI -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(138,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -bd -TG -lH -Jh -Zc -PN -bd -KP -bd -bb -aV -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aV -To -pI -La -pI -ZF -OS -Jk -RS -ZR -pI -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(139,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -bd -Ud -ql -Xe -KJ -KL -td -ZT -KP -bd -fI -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -rD -aU -La -Oa -Qi -Ll -Ls -la -Nu -uf -pI -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(140,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -bd -DX -WF -KF -KK -KM -te -KV -UR -KP -NK -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -wU -La -LO -Le -Ri -Lm -Lt -Lu -Ws -nE -pI -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(141,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -bd -LH -WF -Jm -Aj -KN -tf -PY -AJ -PL -Sg -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -Li -ZI -Wy -Sb -Si -Ln -Kq -Bb -Ws -vj -pI -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(142,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -bd -SJ -WF -Jh -Al -BY -KP -KP -KP -KP -bd -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -pI -La -La -La -La -Qk -Kr -Jk -Ws -MR -pI -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(143,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -NS -bd -bd -KG -Al -Jo -KT -OH -YT -Ye -RI -Mt -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -Uf -Or -Rv -MW -Mg -Lc -Lp -Kr -Jx -pI -pI -zW -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(144,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -NQ -Ac -ee -lk -Wo -Jp -vz -Qr -iA -Jy -bd -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -pI -Kg -Kh -BZ -Pq -Pq -Xt -Kz -KE -XA -FA -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(145,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -NS -bd -cu -cu -bd -cu -cu -bd -cu -cu -bd -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -pI -Kf -Kf -pI -Kf -Kf -pI -Kf -Kf -pI -zW -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(146,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(147,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -LN -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(148,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(149,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(150,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(151,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(152,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(153,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(154,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(155,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(156,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(157,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(158,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(159,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(160,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(161,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(162,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(163,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(164,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -gE -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(165,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(166,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(167,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(168,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(169,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(170,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(171,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(172,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(173,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(174,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(175,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(176,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(177,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(178,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(179,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(180,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(181,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(182,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(183,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(184,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(185,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(186,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(187,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(188,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(189,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(190,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(191,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(192,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(193,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(194,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(195,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(196,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(197,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(198,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(199,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(200,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} diff --git a/maps/torch/torch4_deck2.dmm b/maps/torch/torch4_deck2.dmm deleted file mode 100644 index c83ee7de66ef6..0000000000000 --- a/maps/torch/torch4_deck2.dmm +++ /dev/null @@ -1,59510 +0,0 @@ -//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE -"aa" = ( -/turf/space, -/area/space) -"ab" = ( -/obj/structure/disposalpipe/segment{ - dir = 4; - icon_state = "pipe-c" - }, -/obj/machinery/atmospherics/unary/vent_pump/on, -/obj/structure/cable/green{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/disposal) -"ac" = ( -/obj/machinery/cryopod{ - dir = 1; - icon_state = "body_scanner_0" - }, -/obj/item/device/radio/intercom{ - dir = 1; - pixel_y = -28 - }, -/obj/machinery/embedded_controller/radio/simple_docking_controller/escape_pod{ - dir = 4; - frequency = 1380; - id_tag = "escape_pod_11"; - name = "escape pod six controller"; - pixel_x = -32; - pixel_y = 0; - tag_door = "escape_pod_11_hatch" - }, -/turf/simulated/floor/tiled/monotile, -/area/shuttle/escape_pod11/station) -"ad" = ( -/obj/machinery/fusion_fuel_injector/mapped{ - initial_id_tag = "aux_fusion_plant" - }, -/turf/simulated/floor/reinforced, -/area/vacant/prototype/engine) -"ae" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/cyan{ - dir = 4; - icon_state = "intact" - }, -/obj/effect/floor_decal/corner/yellow/half{ - dir = 8; - icon_state = "bordercolorhalf" - }, -/turf/simulated/floor/tiled, -/area/engineering/engine_monitoring) -"af" = ( -/obj/structure/lattice, -/obj/structure/grille, -/turf/space, -/area/space) -"ag" = ( -/obj/structure/lattice, -/turf/space, -/area/space) -"ah" = ( -/obj/machinery/power/tracker, -/obj/structure/cable/yellow{ - d2 = 2; - icon_state = "0-2" - }, -/turf/simulated/floor/airless, -/area/solar/auxstarboard) -"ai" = ( -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/airless, -/area/solar/auxstarboard) -"aj" = ( -/obj/structure/cable/yellow{ - d2 = 2; - icon_state = "0-2" - }, -/obj/machinery/power/solar{ - id = "auxsolarstarboard"; - name = "Starboard Auxiliary Solar Array" - }, -/obj/effect/floor_decal/solarpanel, -/turf/simulated/floor/airless, -/area/solar/auxstarboard) -"ak" = ( -/obj/structure/cable/yellow{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/turf/simulated/floor/airless, -/area/solar/auxstarboard) -"al" = ( -/obj/structure/cable/yellow{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/airless, -/area/solar/auxstarboard) -"am" = ( -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/airless, -/area/solar/auxstarboard) -"an" = ( -/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/structure/cable/yellow{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/turf/simulated/floor/airless, -/area/solar/auxstarboard) -"ao" = ( -/obj/structure/cable/yellow{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/airless, -/area/solar/auxstarboard) -"ap" = ( -/obj/structure/cable/yellow{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/turf/simulated/floor/airless, -/area/solar/auxstarboard) -"aq" = ( -/obj/structure/cable/yellow, -/obj/machinery/power/solar{ - id = "auxsolarstarboard"; - name = "Starboard Auxiliary Solar Array" - }, -/obj/effect/floor_decal/solarpanel, -/turf/simulated/floor/airless, -/area/solar/auxstarboard) -"ar" = ( -/obj/machinery/power/solar{ - id = "auxsolarstarboard"; - name = "Starboard Auxiliary Solar Array" - }, -/obj/structure/cable/yellow, -/obj/effect/floor_decal/solarpanel, -/turf/simulated/floor/airless, -/area/solar/auxstarboard) -"as" = ( -/obj/structure/crematorium, -/turf/simulated/floor/tiled/dark/monotile, -/area/medical/morgue) -"at" = ( -/obj/structure/window/reinforced{ - dir = 4 - }, -/obj/machinery/door/window/brigdoor/northleft{ - name = "Specialty Engine Controls" - }, -/obj/machinery/button/blast_door{ - desc = "A switch made to open the vent from the core into space. Use to vent all gasses from the engine core."; - id_tag = "EngineVent"; - name = "Emergency Core Vent Control"; - pixel_x = -24; - pixel_y = 9 - }, -/obj/machinery/button/blast_door{ - desc = "A switch designed to vent all gasses from the engine room into space. Press it if there is a fire in the engine room."; - id_tag = "engineroomvent"; - name = "Emergency Engine Room Vents"; - pixel_x = -24; - pixel_y = -9 - }, -/obj/effect/floor_decal/industrial/hatch/red, -/obj/machinery/button/mass_driver{ - desc = "A switch used to remotely eject the engine core into space. The vent must be opened to eject the core, otherwise it will explode while still in the ship, causing monumental damage. Only press if core is about to explode."; - id_tag = "enginecore"; - name = "Emergency Core Eject"; - pixel_x = -24 - }, -/obj/structure/sign/warning{ - desc = "A warning sign that indicates 'Trained Personnel Operational Only'. It implies that if you do not know what these buttons do, you should not touch them."; - dir = 1; - name = "\improper TRAINED PERSONNEL OPERATION ONLY"; - pixel_y = -32 - }, -/turf/simulated/floor/tiled/monotile, -/area/engineering/engine_monitoring) -"au" = ( -/obj/structure/table/rack{ - dir = 8 - }, -/obj/item/storage/box/lights/mixed, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/item/storage/box/lights/mixed, -/obj/item/device/lightreplacer, -/obj/item/clothing/gloves/thick, -/obj/item/clothing/gloves/thick, -/turf/simulated/floor/tiled, -/area/engineering/engineering_bay) -"av" = ( -/turf/simulated/floor/airless, -/area/space) -"aw" = ( -/obj/machinery/conveyor_switch/oneway{ - convdir = -1; - id = "garbage"; - name = "disposal conveyor" - }, -/obj/effect/floor_decal/industrial/hatch/yellow, -/obj/structure/railing/mapped{ - dir = 4; - icon_state = "railing0-1" - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/sign/warning/moving_parts{ - pixel_y = -32 - }, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/disposal) -"ax" = ( -/turf/simulated/wall/r_wall/prepainted, -/area/maintenance/seconddeck/aftstarboard) -"ay" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 8 - }, -/obj/machinery/alarm{ - dir = 1; - icon_state = "alarm0"; - pixel_y = -22 - }, -/obj/structure/cable{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/turf/simulated/floor/tiled/techfloor, -/area/vacant/prototype/engine) -"az" = ( -/turf/simulated/wall/prepainted, -/area/engineering/engine_smes) -"aA" = ( -/obj/machinery/access_button{ - command = "cycle_exterior"; - frequency = 1379; - master_tag = "solar_starboard_airlock"; - name = "exterior access button"; - pixel_x = -24; - pixel_y = -24; - req_access = list("ACCESS_ENGINE_EQUIP","ACCESS_EXTERNAL") - }, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/airless, -/area/solar/auxstarboard) -"aB" = ( -/obj/machinery/conveyor{ - dir = 2; - id = "garbage" - }, -/obj/random/junk, -/obj/structure/disposalpipe/segment{ - dir = 2; - icon_state = "pipe-c" - }, -/turf/simulated/floor/plating, -/area/maintenance/disposal) -"aC" = ( -/turf/simulated/wall/r_wall/hull, -/area/maintenance/seconddeck/central) -"aD" = ( -/turf/simulated/wall/r_wall/hull, -/area/maintenance/auxsolarstarboard) -"aE" = ( -/obj/machinery/door/airlock/external{ - frequency = 1379; - icon_state = "closed"; - id_tag = "solar_starboard_outer"; - locked = 1; - name = "Engineering External Access" - }, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/shield_diffuser, -/turf/simulated/floor/tiled/techfloor/grid, -/area/maintenance/auxsolarstarboard) -"aF" = ( -/obj/structure/table/standard{ - name = "plastic table frame" - }, -/obj/item/device/integrated_electronics/wirer, -/obj/item/device/integrated_electronics/debugger, -/obj/item/device/integrated_electronics/analyzer, -/obj/item/device/radio/intercom{ - dir = 4; - pixel_x = -21 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/storage/tech) -"aG" = ( -/obj/machinery/door/airlock/maintenance{ - name = "Disposal Access" - }, -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/door/firedoor, -/turf/simulated/floor/tiled/techfloor/grid, -/area/maintenance/disposal) -"aH" = ( -/obj/machinery/light{ - dir = 1 - }, -/turf/simulated/floor/tiled/dark, -/area/medical/morgue) -"aI" = ( -/obj/structure/disposaloutlet{ - dir = 1; - icon_state = "outlet" - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/structure/disposalpipe/trunk{ - dir = 1 - }, -/turf/simulated/floor/plating, -/area/maintenance/disposal) -"aJ" = ( -/obj/machinery/vending/assist, -/obj/effect/floor_decal/industrial/outline/grey, -/obj/machinery/power/apc{ - dir = 8; - name = "west bump"; - pixel_x = -24 - }, -/obj/structure/cable/green{ - d2 = 4; - icon_state = "0-4" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/storage/tech) -"aK" = ( -/turf/simulated/wall/prepainted, -/area/vacant/armory) -"aL" = ( -/obj/machinery/embedded_controller/radio/airlock/airlock_controller{ - dir = 8; - frequency = 1379; - id_tag = "solar_starboard_airlock"; - pixel_x = 24; - req_access = list("ACCESS_EXTERNAL"); - tag_airpump = "solar_starboard_pump"; - tag_chamber_sensor = "solar_starboard_sensor"; - tag_exterior_door = "solar_starboard_outer"; - tag_interior_door = "solar_starboard_inner" - }, -/obj/machinery/airlock_sensor{ - frequency = 1379; - id_tag = "solar_starboard_sensor"; - pixel_x = 24; - pixel_y = 12 - }, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/light/small{ - dir = 8 - }, -/obj/machinery/oxygen_pump{ - pixel_x = -32 - }, -/obj/machinery/atmospherics/unary/vent_pump/high_volume/airlock{ - dir = 2; - id_tag = "solar_starboard_pump" - }, -/obj/effect/floor_decal/techfloor{ - dir = 4; - icon_state = "techfloor_edges" - }, -/obj/effect/floor_decal/techfloor{ - dir = 8; - icon_state = "techfloor_edges" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/maintenance/auxsolarstarboard) -"aM" = ( -/obj/item/stock_parts/circuitboard/shield_diffuser, -/obj/item/stock_parts/circuitboard/shield_diffuser, -/obj/item/stock_parts/circuitboard/shield_diffuser, -/obj/item/stock_parts/circuitboard/shield_generator, -/obj/item/stock_parts/circuitboard/shield_generator, -/obj/item/stock_parts/circuitboard/shield_generator, -/obj/item/stock_parts/circuitboard/shield_generator, -/obj/item/stock_parts/circuitboard/shield_generator, -/obj/structure/table/rack, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled/techfloor/grid, -/area/storage/tech) -"aN" = ( -/obj/structure/table/rack, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/item/stock_parts/circuitboard/helm, -/turf/simulated/floor/tiled/techfloor/grid, -/area/storage/tech) -"aO" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/obj/machinery/camera/network/engine{ - c_tag = "Tech Storage - Secure" - }, -/obj/effect/floor_decal/techfloor{ - dir = 8; - icon_state = "techfloor_edges" - }, -/obj/effect/floor_decal/techfloor{ - dir = 4; - icon_state = "techfloor_edges" - }, -/obj/machinery/firealarm{ - pixel_y = 21 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/storage/tech) -"aP" = ( -/obj/structure/table/rack, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/item/stock_parts/circuitboard/borgupload, -/obj/item/stock_parts/circuitboard/aiupload, -/turf/simulated/floor/tiled/techfloor/grid, -/area/storage/tech) -"aQ" = ( -/obj/structure/table/rack, -/obj/item/caution, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/seconddeck/aftstarboard) -"aR" = ( -/obj/structure/sign/warning/biohazard{ - pixel_y = 32 - }, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/seconddeck/aftstarboard) -"aS" = ( -/obj/machinery/alarm{ - pixel_y = 24 - }, -/obj/random_multi/single_item/skelestand, -/turf/simulated/floor/tiled/dark, -/area/medical/morgue) -"aT" = ( -/obj/machinery/camera/network/medbay{ - c_tag = "Infirmary - Morgue"; - dir = 2 - }, -/obj/machinery/light{ - dir = 1 - }, -/turf/simulated/floor/tiled/dark, -/area/medical/morgue) -"aU" = ( -/obj/structure/morgue{ - dir = 2; - icon_state = "morgue1" - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/medical/morgue) -"aV" = ( -/obj/structure/catwalk, -/obj/effect/floor_decal/industrial/warning{ - dir = 10 - }, -/turf/simulated/floor/plating, -/area/maintenance/seconddeck/central) -"aW" = ( -/obj/random_multi/single_item/runtime, -/turf/simulated/floor/tiled/dark, -/area/medical/morgue) -"aX" = ( -/obj/structure/catwalk, -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/plating, -/area/maintenance/seconddeck/aftstarboard) -"aY" = ( -/obj/structure/closet/crate, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/seconddeck/aftstarboard) -"aZ" = ( -/obj/structure/catwalk, -/obj/structure/disposalpipe/segment, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/valve/shutoff/supply, -/turf/simulated/floor/plating, -/area/maintenance/seconddeck/aftstarboard) -"ba" = ( -/obj/structure/closet/crate/trashcart, -/obj/random/maintenance/solgov, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/seconddeck/aftstarboard) -"bb" = ( -/obj/structure/sign/warning/docking_area, -/turf/simulated/wall/r_wall/hull, -/area/maintenance/seconddeck/forestarboard) -"bc" = ( -/obj/structure/closet/crate, -/obj/random/technology_scanner, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/seconddeck/forestarboard) -"bd" = ( -/turf/simulated/floor/plating, -/area/maintenance/seconddeck/forestarboard) -"be" = ( -/obj/structure/table/rack, -/obj/random/maintenance/solgov, -/turf/simulated/floor/plating, -/area/maintenance/seconddeck/forestarboard) -"bf" = ( -/turf/simulated/wall/prepainted, -/area/maintenance/seconddeck/central) -"bg" = ( -/obj/effect/floor_decal/industrial/hatch/yellow, -/obj/machinery/door/blast/regular{ - dir = 4; - id_tag = "prototype_exhaust" - }, -/turf/simulated/floor/reinforced/airless, -/area/vacant/prototype/engine) -"bh" = ( -/obj/structure/table/rack, -/obj/random/junk, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/seconddeck/central) -"bi" = ( -/obj/structure/table/rack, -/obj/random/tech_supply, -/obj/random/tech_supply, -/obj/random/tech_supply, -/obj/random/tech_supply, -/obj/random/tech_supply, -/obj/random/tech_supply, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/seconddeck/central) -"bj" = ( -/obj/structure/closet/emcloset, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/seconddeck/central) -"bk" = ( -/obj/machinery/door/airlock/external{ - frequency = 1379; - icon_state = "closed"; - id_tag = "solar_starboard_inner"; - locked = 1; - name = "Engineering External Access" - }, -/obj/machinery/atmospherics/pipe/simple/hidden, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/maintenance/auxsolarstarboard) -"bl" = ( -/obj/machinery/camera/network/engine{ - c_tag = "Engine - Prototype SMES" - }, -/obj/machinery/light_switch{ - pixel_x = 6; - pixel_y = 24 - }, -/obj/structure/bed/chair/padded/yellow{ - dir = 4; - icon_state = "chair_preview" - }, -/turf/simulated/floor/tiled/steel_grid, -/area/vacant/prototype/control) -"bm" = ( -/obj/machinery/conveyor{ - dir = 9; - id = "garbage2" - }, -/obj/structure/plasticflaps, -/obj/random/junk, -/obj/item/handcuffs/cable, -/turf/simulated/floor/plating, -/area/maintenance/disposal) -"bn" = ( -/obj/structure/closet/crate/hydroponics/prespawned, -/obj/random/maintenance/solgov, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/seconddeck/aftstarboard) -"bo" = ( -/obj/machinery/meter, -/obj/machinery/atmospherics/pipe/manifold/visible/black{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/engineering/engine_room) -"bp" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 1; - icon_state = "warning" - }, -/obj/machinery/atmospherics/pipe/simple/heat_exchanging{ - dir = 9; - icon_state = "intact" - }, -/turf/simulated/floor/reinforced/airless, -/area/engineering/engine_room) -"bq" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/bluegrid, -/area/engineering/bluespace) -"br" = ( -/obj/machinery/alarm{ - dir = 4; - pixel_x = -23; - pixel_y = 0 - }, -/obj/effect/floor_decal/techfloor, -/obj/effect/floor_decal/techfloor{ - dir = 1; - icon_state = "techfloor_edges" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/storage/tech) -"bs" = ( -/obj/machinery/door/airlock/highsecurity{ - autoset_access = 0; - name = "Secure Tech Storage"; - req_access = list("ACCESS_BRIDGE","ACCESS_TECH_STORAGE") - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/effect/floor_decal/techfloor{ - dir = 1; - icon_state = "techfloor_edges" - }, -/obj/machinery/door/firedoor, -/turf/simulated/floor/tiled/techfloor/grid, -/area/storage/tech) -"bt" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/highsecurity{ - icon_state = "closed"; - locked = 1; - name = "Auxiliary Armory" - }, -/turf/simulated/floor/plating, -/area/vacant/armory) -"bu" = ( -/obj/random/obstruction, -/turf/simulated/floor/plating, -/area/maintenance/seconddeck/aftstarboard) -"bv" = ( -/obj/structure/table/rack{ - dir = 8 - }, -/obj/item/stack/material/steel{ - amount = 50 - }, -/obj/item/stack/material/steel{ - amount = 50 - }, -/obj/item/stack/material/steel{ - amount = 50 - }, -/obj/item/stack/material/steel{ - amount = 50 - }, -/obj/item/stack/material/steel{ - amount = 50 - }, -/obj/effect/floor_decal/industrial/outline/grey, -/obj/item/stack/material/aluminium/fifty, -/obj/machinery/alarm{ - dir = 8; - icon_state = "alarm0"; - pixel_x = 24 - }, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/seconddeck/aftstarboard) -"bw" = ( -/obj/machinery/power/rad_collector, -/turf/simulated/floor/plating, -/area/maintenance/seconddeck/central) -"bx" = ( -/obj/machinery/portable_atmospherics/powered/pump/filled, -/turf/simulated/floor/plating, -/area/maintenance/seconddeck/central) -"by" = ( -/obj/effect/floor_decal/industrial/outline/grey, -/obj/machinery/firealarm{ - dir = 4; - pixel_x = 24 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/medical/morgue) -"bz" = ( -/obj/effect/floor_decal/industrial/hatch/yellow, -/obj/structure/ladder/up, -/obj/item/device/radio/intercom/department/medbay{ - dir = 1; - pixel_y = -28 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/medical/morgue) -"bA" = ( -/obj/structure/table/rack{ - dir = 8 - }, -/obj/item/stack/material/glass{ - amount = 50 - }, -/obj/item/stack/material/glass{ - amount = 50 - }, -/obj/item/stack/material/glass{ - amount = 50 - }, -/obj/item/stack/material/glass{ - amount = 50 - }, -/obj/item/stack/material/glass/reinforced{ - amount = 50 - }, -/obj/item/stack/material/glass/reinforced{ - amount = 50 - }, -/obj/item/stack/material/glass/reinforced{ - amount = 50 - }, -/obj/item/stack/material/glass/reinforced{ - amount = 50 - }, -/obj/effect/floor_decal/industrial/outline/grey, -/obj/machinery/power/apc{ - dir = 4; - name = "east bump"; - pixel_x = 24 - }, -/obj/structure/cable/green{ - d2 = 2; - icon_state = "0-2" - }, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/seconddeck/aftstarboard) -"bB" = ( -/obj/structure/cable/green{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, -/turf/simulated/floor/tiled/dark, -/area/medical/morgue) -"bC" = ( -/obj/random/torchcloset, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/seconddeck/aftstarboard) -"bD" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/lattice, -/obj/structure/railing/mapped{ - dir = 4; - icon_state = "railing0-1" - }, -/obj/structure/railing/mapped{ - dir = 1; - icon_state = "railing0-1" - }, -/obj/structure/cable{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/turf/simulated/open, -/area/maintenance/seconddeck/central) -"bE" = ( -/turf/simulated/wall/walnut, -/area/vacant/chapel) -"bF" = ( -/obj/machinery/door/airlock/external{ - frequency = 1379; - icon_state = "closed"; - id_tag = "auxdock_outer"; - locked = 1; - name = "Auxiliary Docking Port Exterior" - }, -/obj/machinery/shield_diffuser, -/turf/simulated/floor/tiled/techfloor/grid, -/area/maintenance/seconddeck/forestarboard) -"bG" = ( -/obj/machinery/portable_atmospherics/powered/scrubber, -/obj/effect/decal/cleanable/cobweb, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/seconddeck/forestarboard) -"bH" = ( -/turf/simulated/floor/plating, -/area/vacant/armory) -"bI" = ( -/turf/simulated/wall/prepainted, -/area/maintenance/seconddeck/forestarboard) -"bJ" = ( -/obj/machinery/barrier, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/seconddeck/central) -"bK" = ( -/turf/simulated/floor/plating, -/area/maintenance/seconddeck/central) -"bL" = ( -/obj/machinery/alarm{ - dir = 8; - icon_state = "alarm0"; - pixel_x = 24 - }, -/obj/machinery/portable_atmospherics/powered/pump/filled, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/seconddeck/central) -"bM" = ( -/obj/machinery/power/solar_control{ - id = "auxsolarstarboard"; - name = "Starboard Solar Control"; - track = 0 - }, -/obj/structure/cable/yellow{ - d2 = 4; - icon_state = "0-4" - }, -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 4 - }, -/obj/structure/sign/warning/airlock{ - pixel_y = 32 - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/plating, -/area/maintenance/auxsolarstarboard) -"bN" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden{ - dir = 8; - icon_state = "map" - }, -/obj/machinery/access_button{ - command = "cycle_interior"; - frequency = 1379; - master_tag = "solar_starboard_airlock"; - name = "interior access button"; - pixel_x = 24; - pixel_y = 24; - req_access = list("ACCESS_ENGINE_EQUIP","ACCESS_EXTERNAL") - }, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/auxsolarstarboard) -"bO" = ( -/obj/machinery/portable_atmospherics/canister/air/airlock, -/obj/machinery/atmospherics/portables_connector{ - dir = 8 - }, -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 1 - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/firealarm{ - dir = 4; - pixel_x = 26 - }, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/auxsolarstarboard) -"bP" = ( -/obj/effect/wallframe_spawn/reinforced/no_grille, -/turf/simulated/floor/plating, -/area/maintenance/disposal) -"bQ" = ( -/obj/effect/floor_decal/techfloor{ - dir = 8; - icon_state = "techfloor_edges" - }, -/obj/effect/floor_decal/techfloor{ - dir = 4; - icon_state = "techfloor_edges" - }, -/obj/machinery/light/small{ - dir = 1 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/storage/tech) -"bR" = ( -/obj/structure/table/standard{ - name = "plastic table frame" - }, -/obj/item/device/flashlight{ - pixel_x = 1; - pixel_y = 5 - }, -/obj/item/device/flashlight{ - pixel_x = 1; - pixel_y = 5 - }, -/obj/item/device/flashlight{ - pixel_x = 1; - pixel_y = 5 - }, -/obj/item/device/flash, -/obj/item/device/flash, -/turf/simulated/floor/tiled/techfloor/grid, -/area/storage/tech) -"bS" = ( -/obj/effect/floor_decal/techfloor{ - dir = 8; - icon_state = "techfloor_edges" - }, -/obj/effect/floor_decal/techfloor{ - dir = 4; - icon_state = "techfloor_edges" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/storage/tech) -"bT" = ( -/obj/structure/disposalpipe/segment{ - dir = 2; - icon_state = "pipe-c" - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 8; - icon_state = "warning" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/catwalk, -/obj/structure/cable{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/turf/simulated/floor/plating, -/area/maintenance/seconddeck/central) -"bU" = ( -/obj/structure/table/rack, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/item/stock_parts/circuitboard/robotics, -/obj/machinery/light/small{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/storage/tech) -"bV" = ( -/obj/structure/catwalk, -/obj/structure/disposalpipe/segment, -/obj/structure/cable/green{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 8 - }, -/turf/simulated/floor/plating, -/area/maintenance/seconddeck/aftstarboard) -"bW" = ( -/obj/machinery/power/apc{ - dir = 2; - name = "south bump"; - pixel_y = -24 - }, -/obj/structure/cable/green{ - d2 = 4; - icon_state = "0-4" - }, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark, -/area/medical/morgue) -"bX" = ( -/obj/structure/railing/mapped{ - dir = 4; - icon_state = "railing0-1" - }, -/obj/machinery/button/blast_door{ - id_tag = "med_lift"; - name = "Medical Lift Access"; - pixel_y = -26 - }, -/turf/simulated/floor/tiled/dark, -/area/medical/morgue) -"bY" = ( -/obj/structure/closet/crate/plastic, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/item/device/scanner/health, -/obj/item/storage/firstaid/empty, -/obj/item/device/assembly/prox_sensor{ - pixel_x = -8; - pixel_y = 4 - }, -/obj/item/device/assembly/prox_sensor{ - pixel_x = -8; - pixel_y = 4 - }, -/obj/item/device/flash/synthetic, -/obj/item/device/flash/synthetic, -/obj/item/device/flash/synthetic, -/obj/item/device/flash/synthetic, -/obj/item/device/flash, -/obj/item/device/flash, -/obj/item/stack/cable_coil, -/obj/item/stack/cable_coil, -/obj/item/storage/toolbox/mechanical, -/obj/item/storage/box/beakers, -/turf/simulated/floor/tiled/dark/monotile, -/area/assembly/robotics) -"bZ" = ( -/obj/item/stock_parts/scanning_module, -/obj/item/stock_parts/manipulator, -/obj/item/stock_parts/manipulator, -/obj/item/reagent_containers/dropper{ - pixel_y = -4 - }, -/obj/structure/closet/crate/plastic, -/obj/random/powercell, -/obj/random/powercell, -/obj/random/powercell, -/obj/random/powercell, -/obj/item/device/robotanalyzer, -/obj/item/organ/internal/posibrain, -/obj/item/organ/internal/posibrain, -/obj/item/organ/internal/posibrain, -/obj/item/aicard, -/obj/item/clothing/gloves/insulated, -/obj/item/clothing/gloves/insulated, -/obj/item/device/radio/headset/headset_eng, -/obj/item/device/radio/headset/headset_eng, -/obj/item/device/multitool{ - pixel_x = 3 - }, -/obj/item/device/multitool{ - pixel_x = 3 - }, -/obj/item/storage/belt/utility/full, -/obj/item/storage/belt/utility/full, -/obj/item/clothing/glasses/welding, -/obj/item/clothing/head/welding{ - pixel_x = -3; - pixel_y = 5 - }, -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 8; - icon_state = "warningcorner" - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/item/device/robotanalyzer, -/obj/item/stack/nanopaste, -/obj/item/stack/nanopaste, -/obj/machinery/light{ - dir = 1; - icon_state = "tube1" - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/assembly/robotics) -"ca" = ( -/obj/effect/floor_decal/industrial/outline/grey, -/obj/machinery/light{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/medical/morgue) -"cb" = ( -/obj/item/frame/fire_alarm, -/turf/simulated/floor/plating, -/area/vacant/armory) -"cc" = ( -/obj/machinery/shieldgen, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/seconddeck/aftstarboard) -"cd" = ( -/obj/machinery/embedded_controller/radio/airlock/airlock_controller{ - frequency = 1379; - id_tag = "auxdock_airlock"; - pixel_x = 0; - req_access = list("ACCESS_EXTERNAL"); - tag_airpump = "auxdock_pump"; - tag_chamber_sensor = "auxdock_sensor"; - tag_exterior_door = "auxdock_outer"; - tag_interior_door = "auxdock_inner" - }, -/obj/structure/table/steel_reinforced, -/turf/simulated/floor/plating, -/area/maintenance/seconddeck/forestarboard) -"ce" = ( -/obj/effect/wallframe_spawn/reinforced, -/turf/simulated/floor/plating, -/area/maintenance/seconddeck/forestarboard) -"cf" = ( -/obj/machinery/oxygen_pump{ - pixel_x = 32 - }, -/obj/effect/floor_decal/techfloor{ - dir = 8; - icon_state = "techfloor_edges" - }, -/obj/effect/floor_decal/techfloor{ - dir = 4; - icon_state = "techfloor_edges" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/maintenance/seconddeck/forestarboard) -"cg" = ( -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/bluegrid, -/area/engineering/bluespace) -"ch" = ( -/obj/structure/cable{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, -/obj/structure/catwalk, -/obj/structure/cable/green{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/turf/simulated/floor/plating, -/area/maintenance/seconddeck/forestarboard) -"ci" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8"; - pixel_x = 0 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/seconddeck/forestarboard) -"cj" = ( -/obj/structure/cable{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/obj/structure/railing/mapped{ - dir = 8; - icon_state = "railing0-1" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/turf/simulated/floor/plating, -/area/maintenance/seconddeck/forestarboard) -"ck" = ( -/obj/structure/closet/crate/medical, -/obj/item/bodybag, -/obj/random/firstaid, -/obj/random/medical, -/obj/random/medical, -/obj/random/medical, -/obj/random/medical, -/obj/random/medical, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/seconddeck/central) -"cl" = ( -/obj/machinery/alarm{ - dir = 8; - icon_state = "alarm0"; - pixel_x = 24 - }, -/turf/simulated/floor/plating, -/area/vacant/armory) -"cm" = ( -/obj/item/stool, -/obj/machinery/alarm{ - dir = 4; - icon_state = "alarm0"; - pixel_x = -22 - }, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/auxsolarstarboard) -"cn" = ( -/obj/machinery/atmospherics/binary/pump/on{ - dir = 1; - target_pressure = 200 - }, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/auxsolarstarboard) -"co" = ( -/obj/machinery/power/terminal, -/obj/structure/cable/yellow{ - d2 = 8; - icon_state = "0-8" - }, -/obj/machinery/light/small{ - dir = 4 - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/auxsolarstarboard) -"cp" = ( -/obj/structure/table/standard{ - name = "plastic table frame" - }, -/obj/item/aicard, -/turf/simulated/floor/tiled/techfloor/grid, -/area/storage/tech) -"cq" = ( -/obj/structure/railing/mapped{ - dir = 4; - icon_state = "railing0-1" - }, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/disposal) -"cr" = ( -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/item/stack/material/glass{ - amount = 20; - pixel_x = -3; - pixel_y = 3 - }, -/obj/item/stack/material/glass{ - amount = 20; - pixel_x = -3; - pixel_y = 3 - }, -/obj/item/stack/material/glass{ - amount = 20; - pixel_x = -3; - pixel_y = 3 - }, -/obj/item/stack/material/steel{ - amount = 50 - }, -/obj/item/stack/material/steel{ - amount = 50 - }, -/obj/item/stack/material/steel{ - amount = 50 - }, -/obj/item/stack/material/steel{ - amount = 50 - }, -/obj/item/stack/material/steel{ - amount = 50 - }, -/obj/item/stack/material/plasteel{ - amount = 20 - }, -/obj/item/stack/material/plasteel{ - amount = 20 - }, -/obj/item/stack/material/aluminium/fifty, -/obj/structure/closet/crate/plastic, -/obj/machinery/recharger/wallcharger{ - pixel_y = 24 - }, -/obj/structure/extinguisher_cabinet{ - pixel_x = 32 - }, -/obj/item/stack/material/plastic/fifty, -/turf/simulated/floor/tiled/dark/monotile, -/area/assembly/robotics) -"cs" = ( -/obj/structure/table/rack, -/obj/effect/floor_decal/industrial/outline/grey, -/obj/item/stock_parts/circuitboard/arcade/battle, -/obj/item/stock_parts/circuitboard/arcade/orion_trail, -/turf/simulated/floor/tiled/techfloor/grid, -/area/storage/tech) -"ct" = ( -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 1 - }, -/turf/simulated/floor/bluegrid, -/area/engineering/bluespace) -"cu" = ( -/obj/machinery/door/window/brigdoor/northleft{ - name = "Weapons locker" - }, -/obj/structure/window/reinforced{ - dir = 8 - }, -/obj/structure/window/reinforced, -/obj/random/ammo, -/turf/simulated/floor/plating, -/area/vacant/armory) -"cv" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 8; - icon_state = "warning" - }, -/obj/machinery/light_switch{ - pixel_x = -22; - pixel_y = 24 - }, -/turf/simulated/floor/tiled/dark, -/area/assembly/robotics) -"cw" = ( -/turf/simulated/wall/r_wall/prepainted, -/area/storage/tech) -"cx" = ( -/obj/structure/table/steel, -/obj/machinery/alarm{ - pixel_y = 24 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/assembly/robotics) -"cy" = ( -/obj/machinery/door/airlock/maintenance{ - name = "Medical Storage Maintenance" - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/door/firedoor, -/turf/simulated/floor/tiled/techfloor/grid, -/area/storage/medical) -"cz" = ( -/turf/simulated/floor/tiled/dark, -/area/assembly/robotics) -"cA" = ( -/obj/machinery/robotics_fabricator, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled/dark/monotile, -/area/assembly/robotics) -"cB" = ( -/turf/simulated/floor/plating, -/area/medical/morgue) -"cC" = ( -/turf/simulated/wall/prepainted, -/area/medical/morgue) -"cD" = ( -/obj/effect/floor_decal/industrial/hatch/yellow, -/obj/structure/ladder/up, -/obj/effect/floor_decal/industrial/warning, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/seconddeck/aftstarboard) -"cE" = ( -/obj/structure/closet/toolcloset, -/obj/effect/floor_decal/industrial/warning, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/seconddeck/aftstarboard) -"cF" = ( -/obj/structure/table/rack{ - dir = 8 - }, -/obj/machinery/door/window/brigdoor/northleft{ - name = "Weapons locker" - }, -/obj/structure/window/reinforced, -/turf/simulated/floor/plating, -/area/vacant/armory) -"cG" = ( -/obj/structure/table/marble, -/turf/simulated/floor/plating, -/area/vacant/chapel) -"cH" = ( -/turf/simulated/wall/prepainted, -/area/vacant/chapel) -"cI" = ( -/obj/machinery/light/small{ - dir = 8 - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/seconddeck/forestarboard) -"cJ" = ( -/obj/machinery/atmospherics/unary/vent_pump/high_volume/airlock{ - dir = 2; - id_tag = "auxdock_pump" - }, -/obj/machinery/airlock_sensor{ - frequency = 1379; - id_tag = "auxdock_sensor"; - pixel_x = 25; - pixel_y = 12 - }, -/obj/effect/floor_decal/techfloor{ - dir = 8; - icon_state = "techfloor_edges" - }, -/obj/effect/floor_decal/techfloor{ - dir = 4; - icon_state = "techfloor_edges" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/maintenance/seconddeck/forestarboard) -"cK" = ( -/obj/structure/table/rack{ - dir = 8 - }, -/obj/structure/window/reinforced, -/obj/random/maintenance/solgov, -/obj/machinery/door/window/brigdoor/northleft{ - name = "Weapons locker" - }, -/turf/simulated/floor/plating, -/area/vacant/armory) -"cL" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/door/airlock/engineering{ - name = "Utility Up" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/maintenance/seconddeck/forestarboard) -"cM" = ( -/obj/structure/table/rack{ - dir = 8 - }, -/obj/machinery/door/window/brigdoor/northleft{ - name = "Weapons locker" - }, -/obj/structure/window/reinforced{ - dir = 4 - }, -/obj/structure/window/reinforced, -/obj/random/ammo, -/turf/simulated/floor/plating, -/area/vacant/armory) -"cN" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/plating, -/area/maintenance/seconddeck/forestarboard) -"cO" = ( -/obj/structure/closet/firecloset, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/seconddeck/central) -"cP" = ( -/obj/structure/table/rack, -/obj/random/technology_scanner, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/seconddeck/central) -"cQ" = ( -/obj/machinery/light/small, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/seconddeck/central) -"cR" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock{ - name = "Emergency Storage" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/maintenance/seconddeck/central) -"cS" = ( -/obj/effect/floor_decal/techfloor{ - dir = 4; - icon_state = "techfloor_edges" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/engineering/engineering_bay) -"cT" = ( -/obj/structure/closet/emcloset, -/obj/machinery/firealarm{ - dir = 1; - pixel_x = 0; - pixel_y = -24 - }, -/obj/structure/sign/warning/fire{ - dir = 8; - icon_state = "fire"; - pixel_x = 32 - }, -/turf/simulated/floor/plating, -/area/maintenance/incinerator) -"cU" = ( -/turf/simulated/wall/prepainted, -/area/maintenance/auxsolarstarboard) -"cV" = ( -/obj/structure/cable{ - d2 = 4; - icon_state = "0-4" - }, -/obj/machinery/power/apc{ - dir = 8; - name = "west bump"; - pixel_x = -24 - }, -/obj/machinery/camera/network/engineering{ - c_tag = "Solar Control - Starboard"; - dir = 1 - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/auxsolarstarboard) -"cW" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/universal, -/obj/structure/cable{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/structure/cable{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/auxsolarstarboard) -"cX" = ( -/obj/machinery/power/smes/buildable{ - RCon_tag = "Solar - Starboard"; - charge = 0 - }, -/obj/structure/cable{ - d2 = 8; - icon_state = "0-8" - }, -/obj/item/device/radio/intercom{ - dir = 8; - pixel_x = 21 - }, -/turf/simulated/floor/plating, -/area/maintenance/auxsolarstarboard) -"cY" = ( -/obj/machinery/portable_atmospherics/powered/scrubber, -/turf/simulated/floor/plating, -/area/maintenance/seconddeck/central) -"cZ" = ( -/obj/structure/table/rack, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/item/stack/material/plasteel{ - amount = 10 - }, -/obj/item/stack/material/plasteel{ - amount = 10 - }, -/obj/item/stack/material/plasteel{ - amount = 10 - }, -/obj/item/stack/material/plasteel{ - amount = 10 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/engineering/engineering_bay) -"da" = ( -/obj/machinery/conveyor{ - dir = 2; - id = "garbage" - }, -/obj/machinery/light/small{ - dir = 4; - pixel_y = 0 - }, -/turf/simulated/floor/plating, -/area/maintenance/disposal) -"db" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 4; - icon_state = "warning" - }, -/obj/structure/railing/mapped{ - dir = 4; - icon_state = "railing0-1" - }, -/turf/simulated/floor/plating, -/area/maintenance/seconddeck/central) -"dc" = ( -/obj/structure/table/standard{ - name = "plastic table frame" - }, -/obj/random/tech_supply, -/obj/random/tech_supply, -/obj/random/tech_supply, -/obj/random/tech_supply, -/turf/simulated/floor/tiled/techfloor/grid, -/area/storage/tech) -"de" = ( -/obj/structure/table/rack, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/item/crowbar/brace_jack, -/obj/item/clothing/gloves/insulated, -/obj/item/storage/toolbox/electrical{ - pixel_x = 1; - pixel_y = -1 - }, -/obj/item/device/t_scanner, -/obj/item/device/multitool, -/obj/item/clothing/glasses/meson, -/obj/machinery/light/small{ - dir = 1 - }, -/obj/machinery/camera/network/engine{ - c_tag = "Tech Storage - Main" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/storage/tech) -"df" = ( -/obj/structure/table/rack, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/item/stock_parts/computer/tesla_link, -/obj/item/stock_parts/computer/processor_unit, -/obj/item/stock_parts/computer/nano_printer, -/obj/item/stock_parts/computer/network_card, -/obj/item/stock_parts/computer/hard_drive/portable, -/obj/item/stock_parts/computer/hard_drive, -/obj/item/stock_parts/computer/card_slot, -/obj/item/stock_parts/computer/battery_module, -/obj/item/stock_parts/computer/ai_slot, -/obj/item/stock_parts/circuitboard/modular_computer, -/obj/machinery/alarm{ - pixel_y = 24 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/storage/tech) -"dg" = ( -/obj/effect/floor_decal/techfloor{ - dir = 8; - icon_state = "techfloor_edges" - }, -/obj/effect/floor_decal/techfloor{ - dir = 4; - icon_state = "techfloor_edges" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/techfloor/grid, -/area/storage/tech) -"dh" = ( -/obj/structure/table/rack, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/item/stock_parts/circuitboard/autolathe, -/obj/item/stock_parts/circuitboard/unary_atmos/cooler, -/obj/item/stock_parts/circuitboard/unary_atmos/heater, -/obj/item/stock_parts/circuitboard/unary_atmos/engine, -/obj/item/stock_parts/circuitboard/unary_atmos/engine, -/obj/item/stock_parts/circuitboard/unary_atmos/engine, -/obj/item/stock_parts/circuitboard/unary_atmos/engine, -/obj/item/stock_parts/circuitboard/oxyregenerator, -/obj/structure/sign/warning/engineering_access{ - pixel_y = 32 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/storage/tech) -"di" = ( -/obj/structure/table/rack, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/item/stock_parts/circuitboard/rdserver, -/obj/machinery/newscaster{ - pixel_y = 32 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/storage/tech) -"dj" = ( -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 4; - icon_state = "warningcorner" - }, -/turf/simulated/floor/plating, -/area/vacant/prototype/engine) -"dk" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 8; - icon_state = "warning" - }, -/turf/simulated/floor/tiled/dark, -/area/assembly/robotics) -"dl" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/techfloor, -/area/storage/medical) -"dm" = ( -/obj/item/stool/padded, -/turf/simulated/floor/tiled/dark, -/area/assembly/robotics) -"dn" = ( -/obj/structure/bed/roller, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled, -/area/hallway/primary/seconddeck/elevator) -"do" = ( -/obj/effect/decal/cleanable/cobweb2, -/obj/structure/table/rack, -/obj/random/maintenance/solgov, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/seconddeck/aftstarboard) -"dp" = ( -/turf/simulated/wall/r_wall/prepainted, -/area/engineering/engine_room) -"dq" = ( -/turf/simulated/floor/plating, -/area/vacant/chapel) -"dr" = ( -/obj/random/trash, -/turf/simulated/floor/plating, -/area/vacant/chapel) -"ds" = ( -/obj/structure/table/marble, -/obj/random/action_figure, -/turf/simulated/floor/plating, -/area/vacant/chapel) -"dt" = ( -/obj/structure/sign/warning/airlock, -/turf/simulated/wall/prepainted, -/area/maintenance/seconddeck/forestarboard) -"du" = ( -/obj/machinery/door/airlock/external{ - frequency = 1379; - icon_state = "closed"; - id_tag = "auxdock_inner"; - locked = 1; - name = "Auxiliary Docking Port Interior" - }, -/obj/machinery/atmospherics/pipe/simple/hidden, -/turf/simulated/floor/tiled/techfloor/grid, -/area/maintenance/seconddeck/forestarboard) -"dv" = ( -/obj/effect/floor_decal/industrial/hatch/yellow, -/obj/structure/ladder/up, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/seconddeck/forestarboard) -"dw" = ( -/obj/effect/landmark{ - name = "xeno_spawn"; - pixel_x = -1 - }, -/turf/simulated/floor/plating, -/area/maintenance/seconddeck/central) -"dx" = ( -/obj/structure/sign/warning/high_voltage, -/turf/simulated/wall/prepainted, -/area/maintenance/auxsolarstarboard) -"dy" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/door/airlock/engineering{ - icon_state = "closed"; - locked = 0; - name = "Starboard Solar Access" - }, -/obj/machinery/door/firedoor, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/maintenance/auxsolarstarboard) -"dz" = ( -/obj/structure/sign/warning/airlock, -/turf/simulated/wall/prepainted, -/area/maintenance/auxsolarstarboard) -"dA" = ( -/turf/simulated/wall/prepainted, -/area/maintenance/seconddeck/aftstarboard) -"dB" = ( -/obj/effect/floor_decal/techfloor{ - dir = 8; - icon_state = "techfloor_edges" - }, -/obj/effect/floor_decal/corner_techfloor_grid{ - dir = 4; - icon_state = "corner_techfloor_grid" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/turf/simulated/floor/tiled/techfloor, -/area/storage/tech) -"dC" = ( -/obj/effect/floor_decal/techfloor{ - dir = 1; - icon_state = "techfloor_edges" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor, -/area/storage/tech) -"dD" = ( -/obj/effect/floor_decal/techfloor{ - dir = 1; - icon_state = "techfloor_edges" - }, -/obj/effect/floor_decal/techfloor, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/storage/tech) -"dE" = ( -/obj/machinery/door/blast/shutters{ - id_tag = "med_lift"; - name = "Medical Lift Access" - }, -/obj/machinery/door/firedoor, -/turf/simulated/floor/tiled/techfloor/grid, -/area/storage/medical) -"dF" = ( -/obj/structure/table/steel, -/obj/machinery/light{ - dir = 4 - }, -/obj/item/device/paint_sprayer, -/turf/simulated/floor/tiled/dark/monotile, -/area/assembly/robotics) -"dG" = ( -/obj/structure/catwalk, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/plating, -/area/maintenance/seconddeck/aftstarboard) -"dH" = ( -/obj/structure/closet/crate/med_crate/oxyloss, -/obj/effect/floor_decal/industrial/outline/grey, -/obj/machinery/light/small{ - dir = 8 - }, -/turf/simulated/floor/tiled/techfloor, -/area/storage/medical) -"dJ" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/turf/simulated/floor/tiled/techfloor, -/area/storage/medical) -"dK" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/turf/simulated/floor/tiled/dark, -/area/assembly/robotics) -"dL" = ( -/obj/structure/sign/warning/hot_exhaust, -/turf/simulated/wall/ocp_wall, -/area/engineering/wastetank) -"dM" = ( -/obj/structure/railing/mapped{ - dir = 8; - icon_state = "railing0-1" - }, -/turf/simulated/open, -/area/maintenance/seconddeck/aftstarboard) -"dO" = ( -/obj/structure/table/rack{ - desc = "A simple wooden altar covered in cloth."; - icon = 'icons/obj/cult.dmi'; - icon_state = "churchaltar"; - name = "wooden altar" - }, -/turf/simulated/floor/wood/walnut, -/area/vacant/chapel) -"dP" = ( -/obj/structure/railing/mapped, -/turf/simulated/open, -/area/maintenance/seconddeck/forestarboard) -"dQ" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/hidden, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/seconddeck/forestarboard) -"dR" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/seconddeck/aftstarboard) -"dS" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8"; - pixel_x = 0 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/catwalk, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/plating, -/area/maintenance/seconddeck/forestarboard) -"dT" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8"; - pixel_x = 0 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/seconddeck/forestarboard) -"dU" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8"; - pixel_x = 0 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/meter, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/seconddeck/forestarboard) -"dV" = ( -/obj/machinery/power/apc{ - dir = 1; - name = "north bump"; - pixel_x = 0; - pixel_y = 24 - }, -/obj/structure/cable/green{ - d2 = 2; - icon_state = "0-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor, -/area/storage/medical) -"dW" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8"; - pixel_x = 0 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/seconddeck/central) -"dX" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/seconddeck/foreport) -"dY" = ( -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/seconddeck/central) -"ea" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8"; - pixel_x = 0 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 2; - icon_state = "pipe-c" - }, -/obj/effect/floor_decal/industrial/warning/corner, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/seconddeck/central) -"eb" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8"; - pixel_x = 0 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/effect/floor_decal/industrial/warning, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/seconddeck/central) -"ec" = ( -/obj/structure/catwalk, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8"; - pixel_x = 0 - }, -/obj/structure/cable{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 8 - }, -/turf/simulated/floor/plating, -/area/maintenance/seconddeck/central) -"ed" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor, -/area/storage/medical) -"ee" = ( -/obj/structure/table/steel, -/obj/machinery/cell_charger, -/turf/simulated/floor/tiled/dark/monotile, -/area/assembly/robotics) -"ef" = ( -/obj/structure/closet/crate, -/obj/random/maintenance/solgov, -/obj/random/maintenance/solgov, -/obj/random/maintenance/solgov, -/obj/random/maintenance/solgov, -/obj/random/maintenance/solgov, -/turf/simulated/floor/plating, -/area/maintenance/seconddeck/central) -"eg" = ( -/obj/structure/lattice, -/obj/structure/grille, -/obj/structure/disposalpipe/segment{ - dir = 4; - icon_state = "pipe-c" - }, -/turf/space, -/area/space) -"eh" = ( -/obj/machinery/power/fusion_core/mapped{ - initial_id_tag = "aux_fusion_plant" - }, -/obj/structure/cable/yellow{ - d2 = 4; - icon_state = "0-4" - }, -/turf/simulated/floor/reinforced/airless, -/area/vacant/prototype/engine) -"ei" = ( -/obj/structure/reagent_dispensers/fueltank, -/turf/simulated/floor/plating, -/area/maintenance/seconddeck/central) -"ej" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/turf/simulated/floor/tiled/techfloor, -/area/storage/medical) -"ek" = ( -/obj/effect/floor_decal/techfloor{ - dir = 4; - icon_state = "techfloor_edges" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/light_switch{ - pixel_x = 24; - pixel_y = -24 - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/turf/simulated/floor/tiled/techfloor, -/area/storage/tech) -"el" = ( -/obj/structure/table/rack, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/item/airlock_electronics/brace, -/obj/item/airlock_electronics/brace, -/obj/item/airlock_electronics/brace, -/obj/item/airlock_brace, -/obj/item/airlock_brace, -/obj/item/airlock_brace, -/turf/simulated/floor/tiled/techfloor/grid, -/area/storage/tech) -"em" = ( -/obj/structure/table/rack, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/item/airlock_electronics, -/obj/item/airlock_electronics, -/obj/item/airlock_electronics, -/obj/item/airlock_electronics, -/obj/item/airlock_electronics, -/turf/simulated/floor/tiled/techfloor/grid, -/area/storage/tech) -"en" = ( -/obj/structure/table/rack, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/item/module/power_control, -/obj/item/module/power_control, -/obj/item/module/power_control, -/obj/item/module/power_control, -/turf/simulated/floor/tiled/techfloor/grid, -/area/storage/tech) -"eo" = ( -/obj/structure/table/rack, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/item/stock_parts/circuitboard/atmos_alert, -/obj/item/stock_parts/circuitboard/powermonitor, -/obj/item/stock_parts/circuitboard/stationalert, -/turf/simulated/floor/tiled/techfloor/grid, -/area/storage/tech) -"ep" = ( -/obj/machinery/alarm{ - pixel_y = 24 - }, -/turf/simulated/floor/tiled/techfloor, -/area/storage/medical) -"eq" = ( -/obj/machinery/button/blast_door{ - id_tag = "med_lift"; - name = "Medical Lift Access"; - pixel_y = 24 - }, -/turf/simulated/floor/tiled/techfloor, -/area/storage/medical) -"er" = ( -/obj/structure/table/rack, -/obj/item/rig/medical/equipped, -/obj/machinery/light/small{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor, -/area/storage/medical) -"es" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8"; - pixel_x = 0 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/maintenance, -/turf/simulated/floor/tiled/techfloor/grid, -/area/maintenance/seconddeck/forestarboard) -"et" = ( -/obj/machinery/power/emitter/gyrotron/anchored{ - dir = 8; - initial_id_tag = "aux_fusion_plant" - }, -/obj/structure/cable{ - d2 = 4; - icon_state = "0-4" - }, -/turf/simulated/floor/reinforced, -/area/vacant/prototype/engine) -"eu" = ( -/obj/structure/cable{ - d1 = 32; - d2 = 2; - icon_state = "32-2" - }, -/obj/machinery/atmospherics/pipe/zpipe/down/scrubbers{ - color = "#ff0000"; - dir = 2 - }, -/obj/machinery/atmospherics/pipe/zpipe/down/supply{ - color = "#0000ff"; - dir = 2 - }, -/obj/structure/lattice, -/obj/structure/railing/mapped{ - dir = 8; - icon_state = "railing0-1" - }, -/turf/simulated/open, -/area/maintenance/seconddeck/aftstarboard) -"ev" = ( -/obj/structure/ladder, -/obj/effect/floor_decal/industrial/hatch/yellow, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/seconddeck/aftstarboard) -"ew" = ( -/obj/structure/cable/yellow{ - d2 = 2; - icon_state = "0-2" - }, -/obj/machinery/power/port_gen/pacman/mrs{ - anchored = 1 - }, -/turf/simulated/floor/reinforced/airless, -/area/vacant/prototype/engine) -"ex" = ( -/obj/random/torchcloset, -/turf/simulated/floor/plating, -/area/maintenance/seconddeck/forestarboard) -"ey" = ( -/obj/item/device/flashlight/lantern, -/turf/simulated/floor/wood/walnut, -/area/vacant/chapel) -"ez" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden{ - dir = 8; - icon_state = "map" - }, -/obj/machinery/alarm{ - dir = 4; - icon_state = "alarm0"; - pixel_x = -22; - pixel_y = 0 - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/seconddeck/forestarboard) -"eA" = ( -/obj/machinery/atmospherics/portables_connector{ - dir = 8 - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/portable_atmospherics/canister/air/airlock, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/seconddeck/forestarboard) -"eB" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden{ - dir = 8; - icon_state = "map" - }, -/turf/simulated/floor/tiled/monotile, -/area/shuttle/escape_pod11/station) -"eC" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/seconddeck/forestarboard) -"eD" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/seconddeck/forestarboard) -"eE" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/meter, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/seconddeck/forestarboard) -"eF" = ( -/obj/machinery/power/sensor{ - name = "Powernet Sensor - Second Deck Subgrid"; - name_tag = "Second Deck Subgrid" - }, -/obj/structure/cable/green{ - d2 = 2; - icon_state = "0-2" - }, -/obj/structure/cable/green{ - d2 = 8; - icon_state = "0-8" - }, -/obj/item/device/radio/intercom{ - pixel_y = 23 - }, -/obj/effect/floor_decal/industrial/warning/corner, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/substation/seconddeck) -"eG" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/seconddeck/central) -"eH" = ( -/obj/machinery/fusion_fuel_injector/mapped{ - dir = 1; - icon_state = "injector0"; - initial_id_tag = "aux_fusion_plant" - }, -/turf/simulated/floor/reinforced, -/area/vacant/prototype/engine) -"eI" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/wallframe_spawn/reinforced, -/turf/simulated/floor/plating, -/area/maintenance/seconddeck/central) -"eJ" = ( -/obj/structure/cable/green{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/structure/disposalpipe/segment, -/obj/effect/floor_decal/industrial/warning{ - dir = 4 - }, -/obj/structure/railing/mapped{ - dir = 1; - icon_state = "railing0-1" - }, -/turf/simulated/floor/plating, -/area/maintenance/seconddeck/central) -"eK" = ( -/obj/structure/disposalpipe/down, -/obj/structure/lattice, -/obj/structure/railing/mapped{ - dir = 1; - icon_state = "railing0-1" - }, -/obj/structure/railing/mapped{ - dir = 4; - icon_state = "railing0-1" - }, -/turf/simulated/open, -/area/maintenance/seconddeck/central) -"eL" = ( -/obj/machinery/camera/network/engineering{ - c_tag = "Substation - Second Deck" - }, -/obj/machinery/power/terminal, -/obj/structure/cable{ - d2 = 4; - icon_state = "0-4" - }, -/obj/effect/floor_decal/industrial/warning, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/substation/seconddeck) -"eM" = ( -/obj/effect/floor_decal/techfloor{ - dir = 8; - icon_state = "techfloor_edges" - }, -/obj/machinery/firealarm{ - dir = 1; - pixel_x = 0; - pixel_y = -24 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/techfloor, -/area/storage/tech) -"eN" = ( -/obj/machinery/hologram/holopad, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/techfloor, -/area/storage/tech) -"eO" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8"; - pixel_x = 0 - }, -/obj/structure/cable{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/machinery/alarm{ - pixel_y = 24 - }, -/obj/effect/floor_decal/industrial/warning, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/substation/seconddeck) -"eP" = ( -/turf/simulated/floor/tiled/techfloor, -/area/storage/medical) -"eQ" = ( -/obj/structure/table/rack, -/obj/item/device/flashlight, -/obj/item/device/flashlight, -/obj/item/device/flashlight, -/obj/item/device/radio, -/obj/item/device/radio, -/obj/item/device/radio, -/obj/item/crowbar/prybar, -/obj/item/crowbar/prybar, -/obj/item/crowbar/prybar, -/obj/item/bodybag, -/obj/item/bodybag, -/obj/item/storage/box/bodybags{ - pixel_x = 1; - pixel_y = 2 - }, -/obj/item/storage/box/bodybags{ - pixel_x = 1; - pixel_y = 2 - }, -/obj/item/storage/box/bodybags{ - pixel_x = 1; - pixel_y = 2 - }, -/turf/simulated/floor/tiled/techfloor, -/area/storage/medical) -"eR" = ( -/obj/item/device/integrated_circuit_printer, -/obj/item/device/integrated_electronics/analyzer, -/obj/item/device/integrated_electronics/wirer, -/obj/item/device/integrated_electronics/debugger, -/obj/structure/table/steel, -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 1 - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/light{ - dir = 8 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/assembly/robotics) -"eS" = ( -/obj/structure/table/rack, -/obj/item/defibrillator/compact, -/obj/machinery/firealarm{ - dir = 4; - pixel_x = 24 - }, -/turf/simulated/floor/tiled/techfloor, -/area/storage/medical) -"eT" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/maintenance, -/turf/simulated/floor/tiled/techfloor/grid, -/area/maintenance/seconddeck/forestarboard) -"eU" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/dark, -/area/assembly/robotics) -"eV" = ( -/obj/machinery/fabricator, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/camera/network/engineering{ - c_tag = "Robotics - Lower"; - dir = 8 - }, -/obj/machinery/light{ - dir = 4 - }, -/obj/structure/reagent_dispensers/acid{ - pixel_x = 32 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/assembly/robotics) -"eW" = ( -/obj/structure/disposalpipe/segment, -/obj/structure/table/rack, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/item/stack/material/aluminium/fifty, -/obj/item/stack/material/aluminium/fifty, -/obj/item/stack/material/ocp/fifty, -/turf/simulated/floor/tiled/techfloor/grid, -/area/engineering/engineering_bay) -"eX" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 1 - }, -/turf/simulated/floor/plating, -/area/maintenance/seconddeck/aftstarboard) -"eY" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/grille, -/obj/effect/floor_decal/industrial/warning{ - dir = 1 - }, -/turf/simulated/floor/plating, -/area/maintenance/seconddeck/aftstarboard) -"fa" = ( -/obj/structure/sign/warning/nosmoking_1{ - dir = 8; - icon_state = "nosmoking"; - pixel_x = 32 - }, -/obj/structure/table/steel, -/obj/machinery/cell_charger, -/obj/random/powercell, -/obj/random/powercell, -/obj/item/cell/high, -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 4 - }, -/turf/simulated/floor/tiled/steel_grid, -/area/engineering/engineering_bay) -"fc" = ( -/obj/structure/table/steel, -/obj/machinery/cell_charger, -/obj/random/powercell, -/obj/random/powercell, -/obj/effect/floor_decal/corner/yellow/half, -/obj/random/powercell, -/turf/simulated/floor/tiled/monotile, -/area/engineering/storage) -"fd" = ( -/obj/machinery/alarm{ - pixel_y = 24 - }, -/turf/simulated/floor/plating, -/area/maintenance/seconddeck/forestarboard) -"fe" = ( -/obj/structure/reagent_dispensers/watertank, -/turf/simulated/floor/plating, -/area/maintenance/seconddeck/forestarboard) -"ff" = ( -/obj/machinery/alarm{ - dir = 4; - icon_state = "alarm0"; - pixel_x = -22; - pixel_y = 0 - }, -/obj/random_multi/single_item/piano, -/turf/simulated/floor/plating, -/area/vacant/chapel) -"fg" = ( -/obj/effect/decal/cleanable/generic, -/turf/simulated/floor/wood/walnut, -/area/vacant/chapel) -"fh" = ( -/obj/machinery/atmospherics/pipe/simple/visible/black, -/obj/structure/sign/warning/secure_area, -/turf/simulated/wall/r_wall/prepainted, -/area/engineering/atmos) -"fi" = ( -/obj/effect/floor_decal/industrial/warning, -/turf/simulated/floor/plating, -/area/maintenance/seconddeck/forestarboard) -"fk" = ( -/obj/machinery/atmospherics/binary/pump/on{ - dir = 1; - target_pressure = 200 - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/seconddeck/forestarboard) -"fl" = ( -/obj/machinery/light/small{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/seconddeck/forestarboard) -"fm" = ( -/obj/structure/cable, -/obj/structure/cable{ - d1 = 16; - d2 = 0; - icon_state = "16-0"; - pixel_y = 0 - }, -/obj/machinery/atmospherics/pipe/zpipe/up/scrubbers{ - color = "#ff0000"; - dir = 1 - }, -/obj/machinery/atmospherics/pipe/zpipe/up/supply{ - color = "#0000ff"; - dir = 1 - }, -/obj/effect/floor_decal/industrial/warning/full, -/turf/simulated/floor/plating, -/area/maintenance/seconddeck/forestarboard) -"fn" = ( -/obj/machinery/atmospherics/pipe/manifold4w/hidden, -/turf/simulated/floor/tiled/monotile, -/area/shuttle/escape_pod11/station) -"fp" = ( -/turf/simulated/wall/r_wall/prepainted, -/area/engineering/storage) -"fs" = ( -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/structure/closet/firecloset, -/turf/simulated/floor/tiled, -/area/engineering/engineering_bay) -"ft" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/structure/disposalpipe/segment, -/obj/effect/floor_decal/industrial/warning{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/maintenance/seconddeck/central) -"fu" = ( -/obj/structure/cable/green{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/structure/disposalpipe/segment{ - dir = 1; - icon_state = "pipe-c" - }, -/obj/structure/lattice, -/turf/simulated/open, -/area/maintenance/seconddeck/central) -"fv" = ( -/obj/machinery/door/airlock/civilian{ - name = "Auxiliary Head" - }, -/obj/machinery/door/firedoor, -/turf/simulated/floor/plating, -/area/maintenance/seconddeck/forestarboard) -"fw" = ( -/obj/effect/floor_decal/corner/yellow/diagonal, -/obj/random_multi/single_item/punitelly, -/turf/simulated/floor/tiled/freezer, -/area/maintenance/seconddeck/forestarboard) -"fx" = ( -/obj/item/storage/mirror{ - icon_state = "mirror_broke"; - pixel_x = 28 - }, -/obj/structure/hygiene/sink{ - dir = 4; - icon_state = "sink"; - pixel_x = 11; - pixel_y = 5 - }, -/turf/simulated/floor/plating, -/area/maintenance/seconddeck/forestarboard) -"fy" = ( -/obj/structure/table/steel, -/obj/machinery/power/apc{ - dir = 8; - name = "west bump"; - pixel_x = -24 - }, -/obj/structure/cable/green{ - d2 = 4; - icon_state = "0-4" - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/assembly/robotics) -"fz" = ( -/obj/item/stool/padded, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/dark, -/area/assembly/robotics) -"fA" = ( -/obj/structure/catwalk, -/obj/structure/cable/green{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9; - pixel_y = 0 - }, -/turf/simulated/floor/plating, -/area/maintenance/seconddeck/aftstarboard) -"fB" = ( -/obj/effect/floor_decal/corner/yellow/diagonal, -/obj/machinery/alarm{ - dir = 1; - pixel_y = -22 - }, -/obj/effect/landmark{ - name = "xeno_spawn"; - pixel_x = -1 - }, -/turf/simulated/floor/tiled/freezer, -/area/maintenance/seconddeck/forestarboard) -"fC" = ( -/obj/machinery/vending/lavatory, -/obj/effect/floor_decal/corner/yellow/diagonal, -/turf/simulated/floor/tiled/freezer, -/area/maintenance/seconddeck/forestarboard) -"fD" = ( -/obj/structure/table/steel, -/turf/simulated/floor/tiled/dark/monotile, -/area/assembly/robotics) -"fE" = ( -/turf/simulated/wall/ocp_wall, -/area/storage/research) -"fF" = ( -/obj/structure/table/steel, -/obj/machinery/light, -/turf/simulated/floor/tiled/dark/monotile, -/area/assembly/robotics) -"fG" = ( -/obj/machinery/robotics_fabricator, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/structure/extinguisher_cabinet{ - pixel_y = -32 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/assembly/robotics) -"fH" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/meter, -/obj/structure/catwalk, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/plating, -/area/maintenance/seconddeck/aftstarboard) -"fI" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/obj/structure/catwalk, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/plating, -/area/maintenance/seconddeck/aftstarboard) -"fJ" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/effect/catwalk_plated, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/plating, -/area/engineering/engineering_bay) -"fK" = ( -/obj/item/device/radio/intercom{ - dir = 1; - pixel_y = -28 - }, -/obj/structure/reagent_dispensers/fueltank, -/turf/simulated/floor/tiled/dark/monotile, -/area/assembly/robotics) -"fL" = ( -/obj/machinery/space_heater, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/seconddeck/aftstarboard) -"fM" = ( -/obj/machinery/portable_atmospherics/powered/pump/filled, -/obj/effect/floor_decal/industrial/outline/grey, -/obj/effect/decal/cleanable/cobweb2, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/seconddeck/aftstarboard) -"fN" = ( -/obj/random/junk, -/turf/simulated/floor/plating, -/area/maintenance/seconddeck/aftstarboard) -"fO" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/seconddeck/aftstarboard) -"fP" = ( -/obj/structure/sign/warning/high_voltage{ - dir = 8; - icon_state = "shock" - }, -/turf/simulated/wall/prepainted, -/area/maintenance/seconddeck/aftstarboard) -"fQ" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/effect/catwalk_plated, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/plating, -/area/hallway/primary/seconddeck) -"fR" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/effect/catwalk_plated, -/obj/machinery/alarm{ - pixel_y = 24 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/plating, -/area/hallway/primary/seconddeck) -"fS" = ( -/obj/machinery/floodlight, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/seconddeck/foreport) -"fT" = ( -/turf/simulated/wall/r_wall/hull, -/area/space) -"fU" = ( -/turf/simulated/wall/r_titanium, -/area/shuttle/escape_pod11/station) -"fV" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 1 - }, -/obj/machinery/camera/network/second_deck{ - c_tag = "Second Deck Hallway - Central West" - }, -/obj/machinery/light{ - dir = 1 - }, -/obj/effect/floor_decal/corner/yellow{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/seconddeck) -"fW" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 8; - icon_state = "warning" - }, -/obj/machinery/light/small, -/turf/simulated/floor/tiled, -/area/engineering/engineering_bay) -"fY" = ( -/obj/structure/reagent_dispensers/fueltank, -/turf/simulated/floor/plating, -/area/maintenance/seconddeck/forestarboard) -"fZ" = ( -/obj/structure/table/standard, -/obj/random/junk, -/turf/simulated/floor/plating, -/area/vacant/chapel) -"ga" = ( -/obj/item/flame/candle, -/turf/simulated/floor/plating, -/area/vacant/chapel) -"gb" = ( -/turf/simulated/open, -/area/maintenance/seconddeck/forestarboard) -"gc" = ( -/obj/structure/disposalpipe/down, -/obj/structure/lattice, -/turf/simulated/open, -/area/maintenance/seconddeck/forestarboard) -"gd" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/maintenance{ - name = "Auxiliary Docking Port" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/universal, -/turf/simulated/floor/tiled/techfloor/grid, -/area/maintenance/seconddeck/forestarboard) -"ge" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/effect/floor_decal/corner/yellow{ - dir = 5; - icon_state = "corner_white" - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/seconddeck) -"gg" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/power/apc{ - dir = 1; - name = "north bump"; - pixel_x = 0; - pixel_y = 24 - }, -/obj/effect/floor_decal/corner/yellow{ - dir = 5; - icon_state = "corner_white" - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/cable/green{ - d2 = 4; - icon_state = "0-4" - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/seconddeck) -"gi" = ( -/turf/simulated/floor/tiled, -/area/hallway/primary/seconddeck) -"gj" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 1 - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/turf/simulated/floor/plating, -/area/maintenance/seconddeck/central) -"gk" = ( -/obj/structure/disposalpipe/segment{ - dir = 2; - icon_state = "pipe-c" - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 1 - }, -/obj/structure/railing/mapped{ - dir = 4; - icon_state = "railing0-1" - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/plating, -/area/maintenance/seconddeck/central) -"gl" = ( -/obj/structure/disposalpipe/segment, -/obj/structure/catwalk, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/plating, -/area/maintenance/seconddeck/central) -"gm" = ( -/obj/machinery/firealarm{ - dir = 1; - pixel_y = -24 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/seconddeck) -"gn" = ( -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 8 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/seconddeck) -"go" = ( -/obj/effect/floor_decal/industrial/outline/blue, -/obj/machinery/atmospherics/unary/tank/hydrogen, -/turf/simulated/floor/plating, -/area/maintenance/incinerator) -"gp" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/effect/catwalk_plated, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/plating, -/area/engineering/engineering_bay) -"gq" = ( -/turf/simulated/wall/prepainted, -/area/maintenance/substation/seconddeck) -"gr" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 1 - }, -/obj/effect/floor_decal/industrial/warning/corner, -/turf/simulated/floor/tiled, -/area/hallway/primary/seconddeck) -"gs" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8"; - pixel_x = 0 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/railing/mapped{ - dir = 8; - icon_state = "railing0-1" - }, -/obj/structure/railing/mapped{ - dir = 1; - icon_state = "railing0-1" - }, -/obj/random/maintenance/solgov, -/turf/simulated/floor/plating, -/area/maintenance/seconddeck/aftstarboard) -"gt" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8"; - pixel_x = 0 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/railing/mapped{ - dir = 1; - icon_state = "railing0-1" - }, -/turf/simulated/floor/plating, -/area/maintenance/seconddeck/aftstarboard) -"gu" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/meter, -/obj/structure/railing/mapped{ - dir = 4; - icon_state = "railing0-1" - }, -/obj/structure/railing/mapped{ - dir = 1; - icon_state = "railing0-1" - }, -/turf/simulated/floor/plating, -/area/maintenance/seconddeck/aftstarboard) -"gv" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/seconddeck/aftstarboard) -"gw" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/obj/structure/cable{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/seconddeck/aftstarboard) -"gy" = ( -/obj/random/torchcloset, -/obj/random/maintenance/solgov, -/obj/random/junk, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/seconddeck/aftstarboard) -"gz" = ( -/obj/effect/floor_decal/industrial/hatch/yellow, -/obj/machinery/door/blast/regular{ - id_tag = "engineroomvent"; - name = "Engine room vent" - }, -/turf/simulated/floor/airless, -/area/engineering/engine_room) -"gA" = ( -/obj/machinery/atmospherics/pipe/simple/visible/black{ - dir = 4 - }, -/turf/simulated/wall/r_wall/prepainted, -/area/engineering/engine_room) -"gB" = ( -/obj/machinery/power/sensor{ - name = "Powernet Sensor - Atmospherics Subgrid"; - name_tag = "Atmospherics Subgrid" - }, -/obj/structure/cable/cyan{ - d2 = 4; - icon_state = "0-4" - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 4 - }, -/obj/structure/cable/cyan{ - d2 = 2; - icon_state = "0-2" - }, -/obj/structure/table/steel, -/obj/item/storage/toolbox/electrical, -/obj/item/clothing/gloves/insulated, -/turf/simulated/floor/plating, -/area/engineering/engine_smes) -"gC" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/structure/cable/green{ - d2 = 4; - icon_state = "0-4" - }, -/obj/machinery/power/apc{ - dir = 8; - name = "west bump"; - pixel_x = -24 - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 4 - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/substation/seconddeck) -"gD" = ( -/obj/effect/floor_decal/industrial/warning, -/turf/simulated/floor/tiled, -/area/hallway/primary/seconddeck) -"gE" = ( -/obj/structure/sign/warning/radioactive, -/turf/simulated/wall/r_wall/hull, -/area/space) -"gF" = ( -/obj/machinery/power/smes/buildable/preset/torch/substation{ - RCon_tag = "Substation - Second Deck" - }, -/obj/structure/cable/green{ - d2 = 4; - icon_state = "0-4" - }, -/obj/structure/cable/green{ - d2 = 8; - icon_state = "0-8" - }, -/turf/simulated/floor/plating, -/area/maintenance/substation/seconddeck) -"gG" = ( -/obj/machinery/light/small{ - dir = 1 - }, -/obj/structure/bed/chair/shuttle, -/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{ - dir = 2; - id_tag = "escape_pod_11_pump" - }, -/turf/simulated/floor/tiled/monotile, -/area/shuttle/escape_pod11/station) -"gH" = ( -/obj/structure/bed/chair/shuttle, -/turf/simulated/floor/tiled/monotile, -/area/shuttle/escape_pod11/station) -"gI" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 8 - }, -/obj/machinery/light/small{ - dir = 1 - }, -/turf/simulated/floor/tiled/white/monotile, -/area/shuttle/escape_pod11/station) -"gJ" = ( -/obj/machinery/atmospherics/unary/tank/air, -/turf/simulated/floor/tiled/white/monotile, -/area/shuttle/escape_pod11/station) -"gK" = ( -/obj/structure/shuttle/engine/heater{ - dir = 4; - icon_state = "heater" - }, -/obj/structure/window/reinforced{ - dir = 8 - }, -/turf/simulated/floor/plating, -/area/shuttle/escape_pod11/station) -"gL" = ( -/obj/structure/shuttle/engine/propulsion{ - dir = 4 - }, -/turf/simulated/wall/r_titanium, -/area/shuttle/escape_pod11/station) -"gM" = ( -/obj/random/junk, -/turf/simulated/floor/plating, -/area/maintenance/seconddeck/forestarboard) -"gN" = ( -/obj/item/device/radio/intercom{ - dir = 4; - pixel_x = -21 - }, -/turf/simulated/floor/plating, -/area/vacant/chapel) -"gO" = ( -/obj/structure/table/standard, -/obj/item/flame/candle, -/turf/simulated/floor/wood/walnut, -/area/vacant/chapel) -"gP" = ( -/obj/structure/disposalpipe/segment, -/obj/structure/lattice, -/obj/structure/railing/mapped, -/turf/simulated/open, -/area/maintenance/seconddeck/forestarboard) -"gQ" = ( -/obj/structure/cable/green{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/techfloor, -/area/storage/medical) -"gR" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/seconddeck/forestarboard) -"gS" = ( -/obj/structure/catwalk, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/plating, -/area/maintenance/seconddeck/forestarboard) -"gT" = ( -/obj/structure/table/rack, -/obj/random/maintenance/solgov, -/obj/random/maintenance/solgov, -/obj/random/maintenance/solgov, -/obj/structure/catwalk, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/turf/simulated/floor/plating, -/area/maintenance/seconddeck/forestarboard) -"gW" = ( -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/door/airlock/hatch{ - frequency = 1379; - id_tag = ""; - name = "Engine Airlock Exterior" - }, -/obj/machinery/door/firedoor, -/turf/simulated/floor/tiled/techfloor/grid, -/area/engineering/engine_room) -"gX" = ( -/obj/effect/shuttle_landmark/merc/deck3{ - name = "2nd Deck, Aft" - }, -/turf/space, -/area/space) -"gY" = ( -/obj/effect/floor_decal/industrial/warning/corner, -/obj/structure/extinguisher_cabinet{ - pixel_x = 32 - }, -/obj/structure/holoplant, -/turf/simulated/floor/tiled, -/area/engineering/engineering_bay) -"gZ" = ( -/obj/machinery/door/airlock/maintenance, -/obj/machinery/door/firedoor, -/turf/simulated/floor/tiled/techfloor/grid, -/area/maintenance/seconddeck/foreport) -"ha" = ( -/obj/effect/wallframe_spawn/reinforced_phoron, -/obj/machinery/door/blast/regular/open{ - id_tag = "bsdwindow"; - name = "Drive Containment" - }, -/obj/machinery/door/firedoor, -/turf/simulated/floor/plating, -/area/engineering/bluespace) -"hb" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/disposalpipe/segment, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/seconddeck/central) -"hc" = ( -/obj/machinery/shieldgen, -/turf/simulated/floor/tiled/techfloor/grid, -/area/maintenance/seconddeck/aftport) -"he" = ( -/obj/structure/catwalk, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 - }, -/turf/simulated/floor/plating, -/area/maintenance/seconddeck/aftstarboard) -"hf" = ( -/obj/structure/sign/solgov{ - pixel_x = 32; - pixel_y = 32 - }, -/turf/space, -/area/space) -"hg" = ( -/obj/structure/catwalk, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply, -/obj/structure/cable/green{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/plating, -/area/maintenance/seconddeck/aftstarboard) -"hh" = ( -/obj/machinery/alarm{ - pixel_y = 24 - }, -/obj/structure/cable/cyan{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/machinery/computer/modular/preset/engineering, -/turf/simulated/floor/plating, -/area/engineering/engine_smes) -"hi" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/catwalk, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/turf/simulated/floor/plating, -/area/maintenance/seconddeck/aftstarboard) -"hj" = ( -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/seconddeck/aftstarboard) -"hk" = ( -/obj/machinery/door/airlock/engineering{ - name = "SMES Maintenance" - }, -/obj/machinery/door/firedoor, -/obj/machinery/power/sensor{ - name = "Powernet Sensor - Master Grid"; - name_tag = "Master" - }, -/obj/structure/cable{ - d2 = 8; - icon_state = "0-8" - }, -/obj/structure/cable{ - d2 = 4; - icon_state = "0-4" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/engineering/engine_smes) -"hl" = ( -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 4 - }, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8"; - pixel_x = 0 - }, -/turf/simulated/floor/plating, -/area/engineering/engine_smes) -"hm" = ( -/obj/structure/cable/yellow{ - d2 = 2; - icon_state = "0-2" - }, -/obj/machinery/power/terminal{ - dir = 1; - icon_state = "term" - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 1; - icon_state = "warning" - }, -/turf/simulated/floor/plating, -/area/engineering/engine_smes) -"ho" = ( -/obj/machinery/fabricator, -/obj/effect/floor_decal/industrial/hatch/yellow, -/obj/effect/floor_decal/industrial/warning{ - dir = 8; - icon_state = "warning" - }, -/obj/structure/sign/warning/moving_parts{ - pixel_y = 32 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/engineering/engineering_bay) -"hp" = ( -/turf/simulated/wall/r_wall/prepainted, -/area/engineering/engine_smes) -"hq" = ( -/obj/machinery/portable_atmospherics/powered/scrubber, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/seconddeck/aftstarboard) -"hr" = ( -/turf/simulated/floor/tiled/dark, -/area/engineering/storage) -"hw" = ( -/obj/structure/bed/chair/shuttle{ - dir = 1; - icon_state = "shuttle_chair_preview" - }, -/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{ - dir = 1; - id_tag = "escape_pod_10_pump" - }, -/turf/simulated/floor/tiled/monotile, -/area/shuttle/escape_pod10/station) -"hz" = ( -/turf/simulated/floor/tiled/monotile, -/area/shuttle/escape_pod11/station) -"hA" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 4 - }, -/turf/simulated/floor/tiled/white/monotile, -/area/shuttle/escape_pod11/station) -"hB" = ( -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 9; - icon_state = "intact" - }, -/turf/simulated/floor/tiled/white/monotile, -/area/shuttle/escape_pod11/station) -"hC" = ( -/obj/structure/table/rack, -/obj/random/tech_supply, -/turf/simulated/floor/plating, -/area/maintenance/seconddeck/forestarboard) -"hD" = ( -/obj/structure/table/standard, -/obj/random/maintenance/solgov, -/turf/simulated/floor/wood/walnut, -/area/vacant/chapel) -"hF" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/turf/simulated/floor/plating, -/area/maintenance/seconddeck/aftport) -"hG" = ( -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/machinery/firealarm{ - dir = 1; - pixel_x = 0; - pixel_y = -24 - }, -/obj/structure/cable/yellow{ - d2 = 4; - icon_state = "0-4" - }, -/obj/machinery/power/sensor{ - name = "Powernet Sensor - Engine Output"; - name_tag = "Engine Output" - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/engineering/engine_smes) -"hH" = ( -/obj/machinery/alarm{ - dir = 8; - pixel_x = 25; - pixel_y = 0; - req_access = list(list("ACCESS_ENGINE_EQUIP","ACCESS_ATMOS")) - }, -/turf/simulated/floor/tiled, -/area/engineering/engineering_bay) -"hK" = ( -/turf/simulated/floor/tiled/steel_grid, -/area/engineering/engineering_bay) -"hM" = ( -/obj/random/obstruction, -/turf/simulated/floor/plating, -/area/maintenance/seconddeck/forestarboard) -"hO" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/seconddeck/fore) -"hQ" = ( -/obj/effect/floor_decal/industrial/warning/corner, -/obj/machinery/rotating_alarm/supermatter{ - dir = 8 - }, -/turf/simulated/floor/tiled, -/area/engineering/engineering_bay) -"hU" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/light/small, -/turf/simulated/floor/tiled, -/area/engineering/engineering_bay) -"hV" = ( -/obj/machinery/power/apc/super/critical{ - dir = 2; - is_critical = 1; - name = "south bump"; - pixel_y = -24 - }, -/obj/structure/cable/green{ - d2 = 8; - icon_state = "0-8" - }, -/turf/simulated/floor/tiled, -/area/engineering/engineering_bay) -"hW" = ( -/obj/structure/table/rack{ - dir = 8 - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/item/device/flashlight/lantern, -/obj/item/device/radio/off{ - pixel_x = 6; - pixel_y = 4 - }, -/obj/item/device/radio/off{ - pixel_x = 6; - pixel_y = 4 - }, -/obj/item/device/radio/off{ - pixel_x = 6; - pixel_y = 4 - }, -/obj/item/device/radio/off{ - pixel_x = 6; - pixel_y = 4 - }, -/obj/item/tape_roll, -/obj/item/tape_roll, -/turf/simulated/floor/tiled, -/area/engineering/engineering_bay) -"hX" = ( -/obj/structure/closet/secure_closet/engineering_electrical, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled/steel_grid, -/area/engineering/engineering_bay) -"ia" = ( -/obj/structure/table/standard{ - name = "plastic table frame" - }, -/obj/item/storage/box/lights/bulbs, -/obj/item/storage/box/lights/tubes, -/turf/simulated/floor/tiled/techfloor/grid, -/area/storage/tech) -"ib" = ( -/obj/effect/floor_decal/techfloor{ - dir = 5; - icon_state = "techfloor_edges" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/engineering/engineering_bay) -"ic" = ( -/obj/structure/disposalpipe/segment{ - dir = 1; - icon_state = "pipe-c" - }, -/obj/structure/cable/green{ - d2 = 4; - icon_state = "0-4" - }, -/obj/machinery/power/apc{ - dir = 8; - name = "west bump"; - pixel_x = -24 - }, -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 4; - icon_state = "warningcorner" - }, -/turf/simulated/floor/plating, -/area/maintenance/seconddeck/central) -"id" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/light/small{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/effect/catwalk_plated, -/turf/simulated/floor/plating, -/area/hallway/primary/seconddeck/fore) -"ie" = ( -/obj/machinery/atmospherics/unary/vent_pump/on, -/turf/simulated/floor/tiled/techfloor, -/area/engineering/engine_room) -"if" = ( -/turf/simulated/floor/tiled/techfloor, -/area/engineering/engine_room) -"ig" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/turf/simulated/floor/tiled/techfloor, -/area/engineering/engine_room) -"ih" = ( -/obj/machinery/atmospherics/pipe/simple/visible/cyan{ - dir = 6; - icon_state = "intact" - }, -/turf/simulated/floor/tiled/techfloor, -/area/engineering/engine_room) -"ii" = ( -/obj/machinery/atmospherics/pipe/simple/visible/cyan{ - dir = 4; - icon_state = "intact" - }, -/turf/simulated/wall/r_wall/hull, -/area/engineering/engine_room) -"ij" = ( -/obj/machinery/atmospherics/pipe/simple/heat_exchanging/junction{ - dir = 4; - icon_state = "intact" - }, -/obj/structure/lattice, -/turf/space, -/area/space) -"ik" = ( -/obj/machinery/atmospherics/pipe/simple/heat_exchanging{ - dir = 4; - icon_state = "intact" - }, -/obj/structure/lattice, -/turf/space, -/area/space) -"il" = ( -/obj/machinery/atmospherics/pipe/simple/heat_exchanging{ - dir = 10; - icon_state = "intact" - }, -/obj/structure/lattice, -/turf/space, -/area/space) -"io" = ( -/obj/machinery/light/small, -/obj/structure/bed/chair/shuttle{ - dir = 1; - icon_state = "shuttle_chair_preview" - }, -/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{ - dir = 1; - id_tag = "escape_pod_11_pump" - }, -/turf/simulated/floor/tiled/monotile, -/area/shuttle/escape_pod11/station) -"ip" = ( -/obj/machinery/status_display{ - pixel_y = -32 - }, -/obj/structure/bed/chair/shuttle{ - dir = 1; - icon_state = "shuttle_chair_preview" - }, -/turf/simulated/floor/tiled/monotile, -/area/shuttle/escape_pod11/station) -"iq" = ( -/obj/structure/bed/chair/shuttle{ - dir = 1; - icon_state = "shuttle_chair_preview" - }, -/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{ - dir = 1; - id_tag = "escape_pod_11_pump" - }, -/turf/simulated/floor/tiled/monotile, -/area/shuttle/escape_pod11/station) -"ir" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 8 - }, -/obj/machinery/light/small, -/obj/structure/table/standard{ - name = "plastic table frame" - }, -/obj/random/firstaid, -/turf/simulated/floor/tiled/white/monotile, -/area/shuttle/escape_pod11/station) -"is" = ( -/obj/machinery/sleeper{ - dir = 1 - }, -/obj/machinery/vending/wallmed1{ - dir = 1; - icon_state = "wallmed"; - name = "Emergency NanoMed"; - pixel_x = 0; - pixel_y = -32 - }, -/turf/simulated/floor/tiled/white/monotile, -/area/shuttle/escape_pod11/station) -"it" = ( -/obj/machinery/portable_atmospherics/powered/pump/filled, -/turf/simulated/floor/plating, -/area/maintenance/seconddeck/forestarboard) -"iu" = ( -/obj/structure/barricade, -/obj/effect/wallframe_spawn/reinforced, -/turf/simulated/floor/plating, -/area/vacant/chapel) -"iv" = ( -/obj/machinery/door/airlock{ - name = "Memorial" - }, -/obj/machinery/door/firedoor, -/turf/simulated/floor/tiled/steel_ridged, -/area/vacant/chapel) -"ix" = ( -/obj/structure/disposalpipe/segment, -/obj/structure/catwalk, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/plating, -/area/maintenance/seconddeck/forestarboard) -"iy" = ( -/obj/structure/window/reinforced, -/obj/machinery/atmospherics/binary/pump/on{ - dir = 8; - name = "Air to Supply" - }, -/turf/simulated/floor/tiled/techfloor, -/area/engineering/atmos) -"iC" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 8 - }, -/obj/structure/catwalk, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/plating, -/area/maintenance/seconddeck/central) -"iD" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 1; - icon_state = "pipe-c" - }, -/obj/structure/catwalk, -/obj/structure/cable/green{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/turf/simulated/floor/plating, -/area/maintenance/seconddeck/central) -"iE" = ( -/obj/structure/disposalpipe/segment, -/obj/effect/floor_decal/techfloor/corner{ - dir = 1; - icon_state = "techfloor_corners" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/engineering/engineering_bay) -"iF" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/seconddeck/aftstarboard) -"iG" = ( -/obj/effect/floor_decal/corner/yellow/half{ - dir = 1; - icon_state = "bordercolorhalf" - }, -/turf/simulated/floor/tiled, -/area/engineering/engineering_bay) -"iI" = ( -/obj/machinery/door/airlock/multi_tile/engineering{ - name = "Engineering Bay" - }, -/obj/machinery/door/firedoor, -/turf/simulated/floor/tiled/steel_ridged, -/area/engineering/engineering_bay) -"iL" = ( -/obj/machinery/power/breakerbox/activated{ - RCon_tag = "Second Deck Substation Bypass" - }, -/turf/simulated/floor/plating, -/area/maintenance/substation/seconddeck) -"iM" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/effect/floor_decal/corner/yellow{ - dir = 4 - }, -/obj/machinery/light/small{ - dir = 4; - icon_state = "bulb1" - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/seconddeck/fore) -"iN" = ( -/turf/simulated/wall/prepainted, -/area/engineering/engineering_bay) -"iO" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/catwalk_plated, -/obj/machinery/atmospherics/pipe/simple/hidden/cyan{ - dir = 4; - icon_state = "intact" - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/plating, -/area/engineering/foyer) -"iP" = ( -/obj/machinery/door/firedoor, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/disposalpipe/segment, -/obj/machinery/door/airlock/engineering{ - name = "Drone Bay"; - secured_wires = 1 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/steel_ridged, -/area/engineering/drone_fabrication) -"iQ" = ( -/obj/structure/catwalk, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/plating, -/area/maintenance/seconddeck/aftstarboard) -"iR" = ( -/obj/effect/decal/cleanable/cobweb, -/obj/machinery/space_heater, -/turf/simulated/floor/plating, -/area/maintenance/seconddeck/forestarboard) -"iS" = ( -/obj/machinery/atmospherics/unary/vent_pump/on, -/obj/structure/bed/chair/armchair/green, -/obj/machinery/computer/cryopod{ - pixel_y = 32 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/synth/borg_upload) -"iT" = ( -/obj/structure/table/steel, -/obj/item/book{ - desc = "A book, written by an IPC unknown. While it's mostly humorous, cerctain radically oriented individuals may see this offensive. ...Or use it as an offense."; - name = "Why did I started to hate humans. One hundreds methods to self control" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/synth/borg_upload) -"iW" = ( -/obj/structure/cable/cyan{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/turf/simulated/floor/bluegrid, -/area/synth/borg_upload) -"iX" = ( -/obj/machinery/status_display, -/turf/simulated/wall/r_wall/prepainted, -/area/engineering/engine_smes) -"iY" = ( -/obj/machinery/atmospherics/pipe/simple/visible/cyan{ - dir = 6; - icon_state = "intact" - }, -/obj/machinery/alarm{ - pixel_y = 24 - }, -/turf/simulated/floor/tiled/techfloor, -/area/engineering/engine_room) -"iZ" = ( -/obj/machinery/atmospherics/pipe/simple/visible/cyan{ - dir = 4; - icon_state = "intact" - }, -/obj/item/device/radio/intercom{ - pixel_y = 23 - }, -/turf/simulated/floor/tiled/techfloor, -/area/engineering/engine_room) -"ja" = ( -/obj/machinery/atmospherics/pipe/manifold/visible/cyan{ - dir = 1 - }, -/obj/machinery/light{ - dir = 1 - }, -/turf/simulated/floor/tiled/techfloor, -/area/engineering/engine_room) -"jb" = ( -/obj/machinery/atmospherics/pipe/simple/visible/cyan{ - dir = 4; - icon_state = "intact" - }, -/obj/machinery/meter, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/turf/simulated/floor/tiled/techfloor, -/area/engineering/engine_room) -"jc" = ( -/obj/machinery/atmospherics/pipe/manifold/visible/cyan{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/turf/simulated/floor/tiled/techfloor, -/area/engineering/engine_room) -"jd" = ( -/obj/machinery/atmospherics/pipe/manifold/visible/cyan{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/turf/simulated/floor/tiled/techfloor, -/area/engineering/engine_room) -"je" = ( -/obj/machinery/atmospherics/pipe/simple/visible/cyan{ - dir = 4; - icon_state = "intact" - }, -/obj/machinery/meter, -/turf/simulated/floor/tiled/techfloor, -/area/engineering/engine_room) -"jf" = ( -/obj/machinery/atmospherics/pipe/manifold/visible/cyan{ - dir = 1 - }, -/turf/simulated/floor/tiled/techfloor, -/area/engineering/engine_room) -"jg" = ( -/obj/machinery/atmospherics/pipe/manifold4w/visible/cyan, -/obj/machinery/button/blast_door{ - desc = "A remote control-switch for the engine radiator viewport shutters."; - id_tag = "EngineRadiatorViewport"; - name = "Engine Radiator Viewport Shutters"; - pixel_x = 25; - pixel_y = 0 - }, -/turf/simulated/floor/tiled/techfloor, -/area/engineering/engine_room) -"jh" = ( -/obj/machinery/atmospherics/pipe/simple/heat_exchanging/junction{ - dir = 4; - icon_state = "intact" - }, -/turf/space, -/area/space) -"ji" = ( -/obj/machinery/atmospherics/pipe/simple/heat_exchanging{ - dir = 4; - icon_state = "intact" - }, -/turf/space, -/area/space) -"jj" = ( -/obj/machinery/atmospherics/pipe/simple/heat_exchanging{ - dir = 9; - icon_state = "intact" - }, -/obj/structure/lattice, -/turf/space, -/area/space) -"jk" = ( -/obj/machinery/door/airlock/external{ - frequency = 1380; - icon_state = "closed"; - id_tag = "escape_pod_11_hatch"; - locked = 1; - name = "Escape Pod Six Hatch" - }, -/turf/simulated/floor/tiled/steel_ridged, -/area/shuttle/escape_pod11/station) -"jn" = ( -/obj/item/frame/apc, -/obj/structure/railing/mapped, -/turf/simulated/floor/plating, -/area/maintenance/seconddeck/forestarboard) -"jo" = ( -/obj/structure/ladder, -/obj/effect/floor_decal/industrial/hatch/yellow, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/seconddeck/forestarboard) -"jp" = ( -/turf/unsimulated/mask, -/area/hallway/primary/seconddeck/elevator) -"jq" = ( -/obj/machinery/door/blast/shutters{ - density = 0; - dir = 2; - icon_state = "shutter0"; - id_tag = "Skynet_launch"; - name = "Mech Bay"; - opacity = 0 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/door/firedoor, -/turf/simulated/floor/tiled/dark/monotile, -/area/assembly/chargebay) -"jv" = ( -/obj/structure/lattice, -/obj/structure/disposaloutlet{ - dir = 4 - }, -/obj/structure/disposalpipe/trunk{ - dir = 8 - }, -/turf/space, -/area/space) -"jw" = ( -/obj/machinery/disposal, -/obj/structure/disposalpipe/trunk, -/obj/effect/floor_decal/industrial/hatch/yellow, -/obj/structure/sign/warning/mail_delivery{ - pixel_y = 32 - }, -/obj/machinery/camera/network/engineering{ - c_tag = "Engineering - Equipment"; - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/engineering/engineering_bay) -"jx" = ( -) -"jy" = ( -/turf/simulated/wall/prepainted, -/area/engineering/storage) -"jz" = ( -/obj/structure/railing/mapped{ - dir = 4; - icon_state = "railing0-1" - }, -/turf/simulated/open, -/area/engineering/engineering_bay) -"jA" = ( -/obj/structure/table/steel, -/obj/item/storage/toolbox/mechanical, -/obj/item/clothing/glasses/welding, -/obj/item/modular_computer/telescreen/preset/engineering{ - pixel_y = 32 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/engineering/engineering_bay) -"jB" = ( -/obj/machinery/firealarm{ - dir = 8; - pixel_x = -24 - }, -/obj/structure/cable/cyan, -/obj/machinery/power/apc{ - dir = 2; - name = "south bump"; - pixel_y = -24 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/synth/borg_upload) -"jC" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 1 - }, -/obj/machinery/light, -/obj/machinery/vending/medical/torch/synthetic{ - dir = 1 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/synth/borg_upload) -"jD" = ( -/obj/structure/closet/secure_closet/synth_med, -/turf/simulated/floor/tiled/techfloor/grid, -/area/synth/borg_upload) -"jE" = ( -/obj/structure/closet/secure_closet/synth_eng, -/turf/simulated/floor/tiled/techfloor/grid, -/area/synth/borg_upload) -"jH" = ( -/obj/machinery/door/airlock/hatch{ - icon_state = "closed"; - id_tag = "engine_electrical_maintenance"; - locked = 1; - name = "SMES Access" - }, -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/door/firedoor, -/turf/simulated/floor/tiled/techfloor/grid, -/area/engineering/engine_smes) -"jI" = ( -/obj/machinery/button/alternate/door/bolts{ - id_tag = "engine_electrical_maintenance"; - name = "Door Bolt Control"; - pixel_x = -24; - pixel_y = -24; - req_access = list("ACCESS_ENGINEERING") - }, -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/visible/cyan, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/engineering/engine_room) -"jJ" = ( -/obj/structure/cable/yellow{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/engineering/engine_room) -"jK" = ( -/obj/machinery/atmospherics/binary/pump/high_power, -/obj/effect/floor_decal/industrial/warning/corner, -/obj/effect/engine_setup/pump_max, -/turf/simulated/floor/tiled/techfloor/grid, -/area/engineering/engine_room) -"jL" = ( -/obj/effect/floor_decal/industrial/warning, -/turf/simulated/floor/tiled/techfloor/grid, -/area/engineering/engine_room) -"jM" = ( -/obj/machinery/atmospherics/pipe/simple/visible/cyan, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 8; - icon_state = "warningcorner" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/engineering/engine_room) -"jN" = ( -/obj/machinery/atmospherics/pipe/simple/visible/cyan, -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 8; - icon_state = "warningcorner" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/engineering/engine_room) -"jO" = ( -/obj/machinery/atmospherics/pipe/manifold/visible/cyan{ - dir = 8; - icon_state = "map" - }, -/turf/simulated/floor/tiled/techfloor, -/area/engineering/engine_room) -"jP" = ( -/obj/machinery/alarm{ - dir = 1; - pixel_y = -22 - }, -/turf/simulated/floor/tiled, -/area/engineering/foyer) -"jQ" = ( -/obj/machinery/door/airlock/external/escapepod{ - frequency = 1380; - icon_state = "closed"; - id_tag = "escape_pod_11_berth_hatch"; - locked = 1; - name = "Escape Pod Six" - }, -/obj/machinery/shield_diffuser, -/turf/simulated/floor/tiled/steel_ridged, -/area/maintenance/seconddeck/forestarboard) -"jS" = ( -/obj/machinery/camera/network/second_deck{ - c_tag = "Second Deck - Ladders"; - dir = 1 - }, -/obj/machinery/firealarm{ - dir = 1; - pixel_x = 0; - pixel_y = -24 - }, -/turf/simulated/floor/tiled, -/area/engineering/foyer) -"jV" = ( -/turf/simulated/wall/r_wall/prepainted, -/area/engineering/bluespace) -"jW" = ( -/obj/structure/lattice, -/obj/structure/grille, -/obj/structure/disposalpipe/segment, -/turf/space, -/area/space) -"jX" = ( -/obj/item/device/radio/intercom{ - pixel_y = 23 - }, -/obj/machinery/light{ - dir = 8 - }, -/obj/structure/closet/secure_closet/crew, -/obj/random/maintenance/solgov/clean, -/obj/random/maintenance/solgov/clean, -/turf/simulated/floor/tiled/dark, -/area/teleporter/seconddeck) -"jY" = ( -/obj/structure/disposalpipe/segment, -/obj/effect/floor_decal/techfloor{ - dir = 9; - icon_state = "techfloor_edges" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/engineering/engineering_bay) -"jZ" = ( -/obj/structure/table/rack, -/obj/random/tech_supply, -/obj/machinery/firealarm{ - pixel_y = 21 - }, -/turf/simulated/floor/tiled/dark, -/area/teleporter/seconddeck) -"kb" = ( -/obj/machinery/alarm{ - dir = 8; - pixel_x = 25; - pixel_y = 0; - req_access = list(list("ACCESS_ENGINE_EQUIP","ACCESS_ATMOS")) - }, -/obj/structure/cable/green{ - d2 = 8; - icon_state = "0-8" - }, -/obj/machinery/power/apc{ - dir = 1; - name = "north bump"; - pixel_x = 0; - pixel_y = 24 - }, -/obj/machinery/camera/network/engineering{ - c_tag = "Waste Tank" - }, -/obj/machinery/atmospherics/portables_connector, -/turf/simulated/floor/tiled/techfloor, -/area/engineering/wastetank) -"kc" = ( -/obj/effect/catwalk_plated, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 1 - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/plating, -/area/engineering/engineering_bay) -"ke" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/catwalk, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/plating, -/area/maintenance/seconddeck/aftstarboard) -"kf" = ( -/obj/machinery/power/apc{ - dir = 1; - name = "north bump"; - pixel_x = 0; - pixel_y = 24 - }, -/obj/structure/cable/green{ - d2 = 8; - icon_state = "0-8" - }, -/turf/simulated/floor/tiled/dark, -/area/teleporter/seconddeck) -"kh" = ( -/obj/machinery/atmospherics/portables_connector{ - dir = 8 - }, -/obj/machinery/button/blast_door{ - id_tag = "engstorage"; - name = "Equipment Storage"; - pixel_y = 24 - }, -/obj/effect/floor_decal/corner/yellow/mono, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/portable_atmospherics/powered/pump/filled, -/turf/simulated/floor/tiled/monotile, -/area/engineering/storage) -"ki" = ( -/obj/machinery/atmospherics/pipe/manifold/visible/cyan, -/turf/simulated/floor/tiled/techfloor/grid, -/area/engineering/atmos) -"kj" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/maintenance{ - name = "Second Deck Teleporter" - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/teleporter/seconddeck) -"kk" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/dark, -/area/teleporter/seconddeck) -"kl" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/obj/structure/catwalk, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/turf/simulated/floor/plating, -/area/maintenance/seconddeck/aftstarboard) -"km" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 4 - }, -/obj/effect/floor_decal/corner_techfloor_grid, -/obj/effect/floor_decal/techfloor/corner, -/obj/effect/floor_decal/industrial/warning/corner, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/dark, -/area/teleporter/seconddeck) -"kn" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/cyan, -/obj/structure/catwalk, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/plating, -/area/maintenance/seconddeck/aftport) -"kp" = ( -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/glass/engineering{ - name = "SMES" - }, -/turf/simulated/floor/tiled/steel_ridged, -/area/engineering/engine_smes) -"kr" = ( -/obj/machinery/camera/network/engine{ - c_tag = "Engine - Entrance"; - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/visible/cyan, -/obj/machinery/airlock_sensor{ - command = "cycle_exterior"; - frequency = 1379; - id_tag = "engine_airlock_exterior_sensor"; - master_tag = "engine_airlock"; - pixel_x = -24; - pixel_y = 0 - }, -/turf/simulated/floor/tiled/techfloor, -/area/engineering/engine_room) -"ks" = ( -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/engineering/engine_room) -"kt" = ( -/obj/machinery/atmospherics/pipe/simple/visible/cyan{ - dir = 5; - icon_state = "intact" - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 4; - icon_state = "warning" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/engineering/engine_room) -"ku" = ( -/obj/machinery/atmospherics/binary/circulator{ - anchored = 1; - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/engineering/engine_room) -"kv" = ( -/obj/machinery/atmospherics/pipe/simple/visible/cyan{ - dir = 9; - icon_state = "intact" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/effect/floor_decal/industrial/warning{ - dir = 8; - icon_state = "warning" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/engineering/engine_room) -"kw" = ( -/obj/machinery/atmospherics/pipe/simple/visible/cyan{ - dir = 9; - icon_state = "intact" - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 8; - icon_state = "warning" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/engineering/engine_room) -"kx" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/obj/effect/floor_decal/techfloor, -/obj/effect/floor_decal/industrial/warning, -/obj/structure/cable/green{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/turf/simulated/floor/tiled/dark, -/area/teleporter/seconddeck) -"ky" = ( -/obj/machinery/shield_diffuser, -/turf/simulated/floor/reinforced/airless, -/area/torchexterior) -"kz" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/cyan{ - dir = 5; - icon_state = "intact" - }, -/turf/simulated/floor/tiled/dark, -/area/engineering/storage) -"kA" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 1; - icon_state = "warning" - }, -/obj/machinery/embedded_controller/radio/simple_docking_controller/escape_pod_berth{ - frequency = 1380; - id_tag = "escape_pod_11_berth"; - name = "escape pod six berth controller"; - pixel_x = -24; - pixel_y = 24; - tag_door = "escape_pod_11_berth_hatch" - }, -/turf/simulated/floor/tiled/techfloor, -/area/hallway/primary/seconddeck/fore) -"kB" = ( -/obj/machinery/atmospherics/portables_connector{ - dir = 8 - }, -/obj/machinery/alarm{ - alarm_id = "misc_research"; - dir = 8; - icon_state = "alarm0"; - pixel_x = 24 - }, -/obj/machinery/light{ - dir = 4 - }, -/obj/effect/floor_decal/corner/yellow/mono, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/portable_atmospherics/powered/pump/filled, -/turf/simulated/floor/tiled/monotile, -/area/engineering/storage) -"kD" = ( -/turf/simulated/wall/prepainted, -/area/hallway/primary/seconddeck/center) -"kE" = ( -/obj/structure/table/standard, -/turf/simulated/floor/tiled/dark, -/area/teleporter/seconddeck) -"kF" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark, -/area/engineering/storage) -"kG" = ( -/obj/machinery/tele_pad, -/turf/simulated/floor/tiled/techfloor/grid, -/area/teleporter/seconddeck) -"kH" = ( -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/structure/closet/secure_closet/engineering_torch, -/turf/simulated/floor/tiled/techfloor/grid, -/area/engineering/engineering_bay) -"kK" = ( -/obj/structure/table/rack, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/item/clothing/glasses/welding, -/obj/item/clothing/glasses/welding, -/obj/item/clothing/glasses/welding, -/obj/item/clothing/head/welding, -/obj/item/clothing/head/welding, -/obj/item/clothing/head/welding, -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/turf/simulated/floor/tiled/techfloor/grid, -/area/engineering/engineering_bay) -"kL" = ( -/obj/structure/largecrate, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/seconddeck/foreport) -"kM" = ( -/obj/machinery/alarm{ - dir = 1; - pixel_y = -22 - }, -/obj/machinery/tele_projector, -/turf/simulated/floor/tiled/techfloor/grid, -/area/teleporter/seconddeck) -"kN" = ( -/obj/structure/disposalpipe/segment, -/obj/structure/catwalk, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/alarm{ - dir = 8; - icon_state = "alarm0"; - pixel_x = 24 - }, -/turf/simulated/floor/plating, -/area/maintenance/seconddeck/central) -"kO" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/cyan, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/catwalk, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/plating, -/area/maintenance/seconddeck/aftport) -"kP" = ( -/obj/machinery/door/airlock/engineering{ - name = "Synth's Storage"; - secured_wires = 1 - }, -/turf/simulated/floor/tiled/techfloor, -/area/synth/borg_upload) -"kQ" = ( -/obj/structure/table/steel_reinforced, -/obj/item/device/geiger, -/obj/machinery/rotating_alarm/supermatter, -/turf/simulated/floor/tiled/steel_grid, -/area/engineering/engine_monitoring) -"kR" = ( -/obj/effect/catwalk_plated, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9; - pixel_y = 0 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/obj/structure/cable{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/turf/simulated/floor/plating, -/area/engineering/engineering_bay) -"kS" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/door/firedoor, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/door/airlock/maintenance, -/turf/simulated/floor/tiled/techfloor/grid, -/area/maintenance/seconddeck/aftstarboard) -"kU" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 8; - icon_state = "warning" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/monotile, -/area/engineering/engineering_bay) -"kV" = ( -/obj/structure/lattice, -/obj/structure/disposalpipe/segment{ - dir = 4; - icon_state = "pipe-c" - }, -/turf/space, -/area/space) -"kW" = ( -/obj/structure/closet/emcloset, -/obj/effect/floor_decal/corner/yellow/half{ - dir = 8; - icon_state = "bordercolorhalf" - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled/steel_grid, -/area/engineering/engine_monitoring) -"kY" = ( -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/closet/radiation, -/obj/item/clothing/glasses/meson, -/obj/item/clothing/glasses/meson, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/firealarm{ - dir = 4; - pixel_x = 24 - }, -/turf/simulated/floor/tiled/steel_grid, -/area/engineering/engine_monitoring) -"la" = ( -/obj/structure/hygiene/shower{ - dir = 4; - icon_state = "shower"; - pixel_x = 5; - pixel_y = 0 - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 9; - icon_state = "warning" - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/firealarm{ - dir = 8; - pixel_x = -24; - pixel_y = 0 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/engineering/engine_room) -"lb" = ( -/obj/structure/closet/radiation, -/obj/effect/floor_decal/industrial/warning{ - dir = 5 - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled/techfloor/grid, -/area/engineering/engine_room) -"le" = ( -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/engineering/engine_room) -"lf" = ( -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 4; - icon_state = "warning" - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/engineering/engine_room) -"lg" = ( -/obj/structure/cable/yellow{ - d2 = 8; - icon_state = "0-8" - }, -/obj/structure/cable/yellow{ - d2 = 4; - icon_state = "0-4" - }, -/obj/machinery/power/generator{ - anchored = 1; - dir = 2 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/engineering/engine_room) -"lh" = ( -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/effect/floor_decal/industrial/warning{ - dir = 8; - icon_state = "warning" - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/engineering/engine_room) -"li" = ( -/obj/structure/cable/yellow{ - d2 = 8; - icon_state = "0-8" - }, -/obj/machinery/power/generator{ - anchored = 1; - dir = 2 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/engineering/engine_room) -"lj" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 8; - icon_state = "warning" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/engineering/engine_room) -"lk" = ( -/turf/simulated/floor/reinforced/airless, -/area/torchexterior) -"ll" = ( -/obj/effect/floor_decal/corner/blue{ - dir = 6 - }, -/obj/structure/ladder/up, -/obj/structure/extinguisher_cabinet{ - pixel_x = 32 - }, -/turf/simulated/floor/tiled/steel_grid, -/area/engineering/foyer) -"lm" = ( -/obj/item/device/radio/intercom{ - dir = 1; - pixel_y = -28 - }, -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/engineering/shieldbay) -"ln" = ( -/obj/structure/lattice, -/obj/structure/grille, -/obj/structure/disposalpipe/segment{ - dir = 8; - icon_state = "pipe-c" - }, -/turf/space, -/area/space) -"lo" = ( -/obj/structure/sign/directions/supply{ - dir = 2; - pixel_z = -10 - }, -/obj/structure/sign/directions/evac{ - dir = 2 - }, -/obj/structure/sign/directions/engineering{ - dir = 4; - pixel_z = 10 - }, -/turf/simulated/wall/prepainted, -/area/hallway/primary/seconddeck/center) -"lp" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 4 - }, -/obj/effect/floor_decal/corner/yellow/half{ - dir = 8; - icon_state = "bordercolorhalf" - }, -/obj/structure/cable/green{ - d2 = 2; - icon_state = "0-2" - }, -/obj/machinery/camera/network/second_deck{ - c_tag = "Second Deck - Stairwell"; - dir = 4 - }, -/obj/machinery/power/apc{ - dir = 1; - name = "north bump"; - pixel_x = 0; - pixel_y = 24 - }, -/turf/simulated/floor/tiled/monotile, -/area/hallway/primary/seconddeck/center) -"lq" = ( -/obj/structure/railing/mapped, -/obj/machinery/light{ - dir = 4; - icon_state = "tube1" - }, -/turf/simulated/open, -/area/hallway/primary/seconddeck/center) -"lr" = ( -/turf/simulated/wall/r_wall/prepainted, -/area/maintenance/seconddeck/foreport) -"ls" = ( -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/plating, -/area/maintenance/seconddeck/foreport) -"lt" = ( -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/seconddeck/aftport) -"lu" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/bluegrid, -/area/synth/borg_upload) -"lx" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/tiled/dark, -/area/engineering/storage) -"ly" = ( -/obj/machinery/requests_console{ - announcementConsole = 1; - department = "Engineering"; - departmentType = 3; - name = "Engineering RC"; - pixel_x = -32; - pixel_y = 0 - }, -/obj/effect/floor_decal/techfloor{ - dir = 8; - icon_state = "techfloor_edges" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/engineering/engineering_bay) -"lz" = ( -/obj/structure/table/steel, -/obj/item/hand_labeler, -/obj/item/storage/backpack/dufflebag/eng, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/engineering/engineering_bay) -"lA" = ( -/obj/structure/table/steel, -/obj/item/storage/toolbox/mechanical, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/engineering/engineering_bay) -"lB" = ( -/obj/structure/table/steel, -/obj/machinery/recharger{ - pixel_y = 0 - }, -/obj/item/book/manual/engineering_construction, -/obj/item/book/manual/engineering_guide, -/obj/item/book/manual/engineering_hacking, -/obj/item/book/manual/atmospipes, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/obj/structure/cable{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/engineering/engineering_bay) -"lC" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/catwalk, -/obj/structure/cable/green{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/structure/sign/warning/secure_area{ - dir = 4; - pixel_x = -32 - }, -/turf/simulated/floor/plating, -/area/maintenance/seconddeck/aftport) -"lE" = ( -/obj/machinery/alarm{ - pixel_y = 24 - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/seconddeck/forestarboard) -"lG" = ( -/obj/machinery/shieldgen, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/seconddeck/foreport) -"lJ" = ( -/obj/item/stool/padded, -/obj/effect/floor_decal/industrial/warning, -/turf/simulated/floor/tiled/techfloor/grid, -/area/engineering/engineering_bay) -"lK" = ( -/obj/structure/railing/mapped, -/turf/simulated/open, -/area/engineering/engineering_bay) -"lL" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/engineering{ - name = "Engine Control Room" - }, -/turf/simulated/floor/tiled/steel_ridged, -/area/engineering/engine_monitoring) -"lM" = ( -/obj/machinery/light_switch{ - pixel_x = -22; - pixel_y = -22 - }, -/obj/effect/floor_decal/corner/yellow/half{ - dir = 8; - icon_state = "bordercolorhalf" - }, -/turf/simulated/floor/tiled, -/area/engineering/engine_monitoring) -"lO" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/maintenance, -/turf/simulated/floor/tiled/techfloor/grid, -/area/maintenance/seconddeck/aftport) -"lP" = ( -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/door/airlock/hatch{ - frequency = 1379; - id_tag = ""; - name = "Engine Airlock Interior" - }, -/obj/machinery/door/firedoor, -/turf/simulated/floor/tiled/techfloor/grid, -/area/engineering/engine_room) -"lQ" = ( -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 10 - }, -/obj/machinery/light/small, -/obj/machinery/camera/network/engine{ - c_tag = "Engine - Access"; - dir = 1 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/engineering/engine_room) -"lR" = ( -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 6 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/engineering/engine_room) -"lT" = ( -/obj/machinery/atmospherics/pipe/simple/visible/cyan, -/obj/structure/cable/cyan{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/turf/simulated/floor/tiled/techfloor, -/area/engineering/engine_room) -"lV" = ( -/obj/machinery/atmospherics/pipe/simple/visible/green{ - dir = 6; - icon_state = "intact" - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 4; - icon_state = "warning" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/engineering/engine_room) -"lW" = ( -/obj/machinery/atmospherics/binary/circulator{ - anchored = 1; - dir = 8 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/engineering/engine_room) -"lX" = ( -/obj/machinery/atmospherics/pipe/simple/visible/yellow{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/effect/floor_decal/industrial/warning{ - dir = 8; - icon_state = "warning" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/engineering/engine_room) -"lY" = ( -/obj/machinery/atmospherics/pipe/simple/visible/yellow{ - dir = 10 - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 8; - icon_state = "warning" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/engineering/engine_room) -"lZ" = ( -/obj/machinery/atmospherics/pipe/simple/visible/cyan{ - dir = 5; - icon_state = "intact" - }, -/obj/structure/sign/warning/fire{ - dir = 8; - icon_state = "fire"; - pixel_x = 32 - }, -/turf/simulated/floor/tiled/techfloor, -/area/engineering/engine_room) -"ma" = ( -/turf/simulated/floor/airless, -/area/solar/port) -"mb" = ( -/turf/simulated/wall/r_wall/prepainted, -/area/vacant/prototype/engine) -"mc" = ( -/obj/effect/floor_decal/industrial/warning/corner, -/turf/simulated/floor/plating, -/area/vacant/prototype/engine) -"md" = ( -/obj/effect/floor_decal/industrial/warning, -/obj/machinery/light{ - dir = 1 - }, -/turf/simulated/floor/plating, -/area/vacant/prototype/engine) -"me" = ( -/turf/simulated/floor/plating, -/area/vacant/prototype/engine) -"mf" = ( -/obj/machinery/computer/fusion/fuel_control{ - dir = 4; - icon_state = "computer"; - initial_id_tag = "aux_fusion_plant"; - req_access = list("ACCESS_ENGINE_EQUIP") - }, -/obj/effect/floor_decal/corner/yellow/half{ - dir = 1; - icon_state = "bordercolorhalf" - }, -/obj/effect/floor_decal/corner/yellow{ - dir = 9 - }, -/turf/simulated/floor/tiled/monotile, -/area/vacant/prototype/control) -"mg" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 8; - icon_state = "warning" - }, -/turf/simulated/floor/reinforced/airless, -/area/vacant/prototype/engine) -"mh" = ( -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 8; - icon_state = "warning" - }, -/turf/simulated/floor/reinforced/airless, -/area/vacant/prototype/engine) -"mi" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock, -/turf/simulated/floor/tiled, -/area/hallway/primary/seconddeck/center) -"mj" = ( -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 4; - icon_state = "warningcorner" - }, -/obj/effect/floor_decal/corner/yellow/half{ - dir = 8; - icon_state = "bordercolorhalf" - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/turf/simulated/floor/tiled/monotile, -/area/hallway/primary/seconddeck/center) -"mk" = ( -/obj/structure/railing/mapped{ - dir = 8; - icon_state = "railing0-1" - }, -/obj/structure/railing/mapped, -/turf/simulated/open, -/area/hallway/primary/seconddeck/center) -"mo" = ( -/obj/machinery/atmospherics/portables_connector{ - dir = 1 - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled/techfloor, -/area/engineering/atmos) -"mp" = ( -/obj/machinery/atmospherics/pipe/simple/visible/black, -/obj/machinery/light{ - dir = 8 - }, -/obj/effect/floor_decal/industrial/warning/corner, -/turf/simulated/floor/tiled/techfloor/grid, -/area/engineering/engine_room) -"mq" = ( -/obj/machinery/door/blast/shutters{ - dir = 2; - id_tag = "engstorage"; - name = "Engineering Storage Shutters" - }, -/turf/simulated/floor/tiled/monotile, -/area/engineering/storage) -"mr" = ( -/obj/effect/floor_decal/industrial/warning, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/seconddeck) -"mt" = ( -/obj/structure/disposalpipe/segment, -/obj/effect/floor_decal/techfloor, -/turf/simulated/floor/tiled/techfloor/grid, -/area/engineering/engineering_bay) -"mw" = ( -/obj/structure/table/rack{ - dir = 8 - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/item/device/paint_sprayer, -/obj/item/device/paint_sprayer, -/obj/item/reagent_containers/spray/cleaner, -/turf/simulated/floor/tiled, -/area/engineering/engineering_bay) -"mx" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/visible{ - dir = 10; - icon_state = "intact" - }, -/turf/simulated/floor/tiled/techfloor, -/area/engineering/atmos) -"mz" = ( -/turf/simulated/open, -/area/engineering/engineering_bay) -"mB" = ( -/obj/effect/floor_decal/techfloor{ - dir = 1; - icon_state = "techfloor_edges" - }, -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/turf/simulated/floor/tiled/techfloor/grid, -/area/engineering/engineering_bay) -"mC" = ( -/obj/structure/table/steel, -/obj/random/tech_supply, -/obj/random/tech_supply, -/obj/structure/fireaxecabinet{ - pixel_x = 0; - pixel_y = -32 - }, -/obj/effect/floor_decal/corner/yellow/half, -/turf/simulated/floor/tiled/monotile, -/area/engineering/storage) -"mD" = ( -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/effect/floor_decal/industrial/hatch/yellow, -/turf/simulated/floor/tiled/steel_grid, -/area/engineering/engine_monitoring) -"mE" = ( -/turf/simulated/floor/tiled, -/area/engineering/engineering_bay) -"mF" = ( -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/engineering/engineering_bay) -"mI" = ( -/obj/structure/sign/warning/nosmoking_1{ - dir = 4; - icon_state = "nosmoking"; - pixel_x = -32 - }, -/obj/effect/floor_decal/corner/yellow/half{ - dir = 8; - icon_state = "bordercolorhalf" - }, -/turf/simulated/floor/tiled, -/area/engineering/engine_monitoring) -"mJ" = ( -/obj/structure/sign/warning/radioactive{ - dir = 1; - icon_state = "radiation" - }, -/turf/simulated/wall/r_wall/prepainted, -/area/engineering/engine_room) -"mK" = ( -/obj/machinery/light{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/visible/cyan, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 8; - icon_state = "warningcorner" - }, -/turf/simulated/floor/tiled/techfloor, -/area/engineering/engine_room) -"mL" = ( -/obj/machinery/atmospherics/pipe/simple/visible/green{ - dir = 5 - }, -/turf/simulated/floor/tiled/techfloor, -/area/engineering/engine_room) -"mM" = ( -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/visible/green{ - dir = 4; - icon_state = "map" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/engineering/engine_room) -"mN" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 1 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/engineering/engine_room) -"mO" = ( -/obj/machinery/atmospherics/pipe/manifold/visible/yellow{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 1; - icon_state = "warningcorner" - }, -/obj/effect/floor_decal/industrial/warning/corner, -/turf/simulated/floor/tiled/techfloor/grid, -/area/engineering/engine_room) -"mP" = ( -/obj/machinery/atmospherics/pipe/simple/visible/yellow{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/visible/green, -/obj/machinery/camera/network/engine{ - c_tag = "Engine - TEGs"; - dir = 1 - }, -/obj/effect/floor_decal/industrial/warning, -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/engineering/engine_room) -"mQ" = ( -/obj/machinery/atmospherics/pipe/simple/visible/yellow{ - dir = 4 - }, -/obj/effect/floor_decal/industrial/warning, -/obj/effect/floor_decal/industrial/warning{ - dir = 1 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/engineering/engine_room) -"mR" = ( -/obj/structure/table/rack, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/item/stack/material/rods{ - amount = 50 - }, -/obj/item/stack/material/rods{ - amount = 50 - }, -/obj/item/stack/material/rods{ - amount = 50 - }, -/obj/item/stack/material/rods{ - amount = 50 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/engineering/engineering_bay) -"mS" = ( -/obj/machinery/light{ - dir = 4; - icon_state = "tube1" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/engineering/engine_room) -"mT" = ( -/turf/simulated/wall/walnut, -/area/vacant/cargo) -"mW" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/blast/shutters{ - density = 0; - dir = 4; - icon_state = "shutter0"; - id_tag = "engineeringdeskshutters"; - name = "Engineering Desk Shutters"; - opacity = 0 - }, -/obj/effect/wallframe_spawn/reinforced/no_grille, -/obj/machinery/atmospherics/pipe/simple/hidden/cyan{ - dir = 4; - icon_state = "intact" - }, -/turf/simulated/floor/plating, -/area/engineering/engineering_bay) -"mX" = ( -/obj/effect/floor_decal/corner/yellow/half{ - dir = 8; - icon_state = "bordercolorhalf" - }, -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 4; - icon_state = "warningcorner" - }, -/obj/machinery/light, -/turf/simulated/floor/tiled/monotile, -/area/hallway/primary/seconddeck/center) -"mY" = ( -/obj/machinery/alarm{ - dir = 1; - pixel_y = -24 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/seconddeck/center) -"mZ" = ( -/obj/structure/stairs/east, -/obj/machinery/firealarm{ - dir = 1; - pixel_y = -26 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/seconddeck/center) -"na" = ( -/obj/structure/sign/directions/supply{ - dir = 2; - pixel_z = -10 - }, -/obj/structure/sign/directions/evac{ - dir = 2 - }, -/obj/structure/sign/directions/engineering{ - dir = 4; - pixel_z = 10 - }, -/turf/simulated/wall/prepainted, -/area/hallway/primary/seconddeck/elevator) -"nb" = ( -/obj/machinery/disposal/deliveryChute{ - dir = 4; - icon_state = "intake" - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/structure/disposalpipe/trunk{ - dir = 1 - }, -/turf/simulated/floor/plating, -/area/maintenance/disposal) -"nc" = ( -/turf/simulated/wall/prepainted, -/area/maintenance/seconddeck/foreport) -"nd" = ( -/obj/machinery/recharge_station, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/camera/network/second_deck, -/turf/simulated/floor/tiled/dark/monotile, -/area/assembly/chargebay) -"nf" = ( -/obj/structure/window/reinforced, -/turf/simulated/floor/tiled/techfloor, -/area/engineering/atmos) -"ng" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark, -/area/assembly/robotics) -"nk" = ( -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 8; - icon_state = "warningcorner" - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/seconddeck/fore) -"nm" = ( -/obj/structure/disposalpipe/segment, -/obj/random/junk, -/obj/structure/catwalk, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 - }, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, -/turf/simulated/floor/plating, -/area/maintenance/seconddeck/central) -"nn" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/alarm{ - dir = 8; - icon_state = "alarm0"; - pixel_x = 24 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/cyan, -/obj/structure/catwalk, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/plating, -/area/maintenance/seconddeck/aftport) -"no" = ( -/obj/machinery/bluespacedrive, -/turf/simulated/floor/bluegrid, -/area/engineering/bluespace) -"np" = ( -/obj/machinery/atmospherics/pipe/simple/visible/green{ - dir = 6; - icon_state = "intact" - }, -/obj/machinery/meter, -/turf/simulated/floor/tiled/techfloor/grid, -/area/engineering/atmos) -"nq" = ( -/obj/structure/cable/green{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/dark, -/area/assembly/robotics) -"nr" = ( -/obj/structure/closet/emcloset, -/obj/effect/floor_decal/corner/yellow/mono, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/light{ - dir = 1 - }, -/turf/simulated/floor/tiled/monotile, -/area/engineering/foyer) -"nu" = ( -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/turf/simulated/floor/tiled/monotile, -/area/engineering/engine_monitoring) -"nw" = ( -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/monotile, -/area/engineering/engine_monitoring) -"nx" = ( -/obj/structure/sign/warning/internals_required{ - name = "\improper RADIATION GEAR REQUIRED" - }, -/turf/simulated/wall/r_wall/prepainted, -/area/engineering/engine_room) -"ny" = ( -/obj/machinery/alarm{ - dir = 4; - icon_state = "alarm0"; - pixel_x = -22; - pixel_y = 0 - }, -/obj/effect/floor_decal/corner/yellow/half{ - dir = 8; - icon_state = "bordercolorhalf" - }, -/turf/simulated/floor/tiled, -/area/engineering/engine_monitoring) -"nz" = ( -/obj/structure/extinguisher_cabinet{ - pixel_x = -32 - }, -/obj/effect/floor_decal/techfloor{ - dir = 10; - icon_state = "techfloor_edges" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/engineering/engineering_bay) -"nA" = ( -/obj/structure/closet/medical_wall/filled{ - pixel_x = 0; - pixel_y = -32 - }, -/obj/item/storage/med_pouch/radiation, -/obj/effect/floor_decal/techfloor{ - dir = 6; - icon_state = "techfloor_edges" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/engineering/engineering_bay) -"nB" = ( -/obj/structure/table/standard, -/obj/random/tank, -/obj/effect/floor_decal/techfloor{ - dir = 4; - icon_state = "techfloor_edges" - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark, -/area/teleporter/seconddeck) -"nC" = ( -/obj/machinery/door/blast/regular{ - density = 0; - dir = 4; - icon_state = "pdoor0"; - id_tag = "EngineBlast"; - name = "Engine Monitoring Room Blast Doors"; - opacity = 0 - }, -/obj/effect/wallframe_spawn/reinforced, -/obj/machinery/door/firedoor, -/turf/simulated/floor/plating, -/area/engineering/engine_monitoring) -"nF" = ( -/obj/machinery/atmospherics/pipe/simple/visible/cyan, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 8; - icon_state = "warning" - }, -/turf/simulated/floor/tiled/techfloor, -/area/engineering/engine_room) -"nH" = ( -/obj/machinery/atmospherics/pipe/manifold/visible/green{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 - }, -/turf/simulated/floor/tiled/techfloor, -/area/engineering/engine_room) -"nI" = ( -/obj/machinery/atmospherics/pipe/simple/visible/yellow, -/obj/machinery/atmospherics/pipe/simple/visible/green{ - dir = 4; - icon_state = "intact" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9; - pixel_y = 0 - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 4; - icon_state = "warning" - }, -/obj/machinery/button/alternate/door/bolts{ - desc = "A remote control-switch for the engine core airlock hatch bolts."; - id_tag = "engine_access_hatch"; - name = "Engine Hatch Bolt Control"; - pixel_x = 24; - pixel_y = 8; - req_access = list("ACCESS_ENGINEERING") - }, -/obj/machinery/rotating_alarm/supermatter{ - dir = 8 - }, -/turf/simulated/floor/tiled/techfloor, -/area/engineering/engine_room) -"nJ" = ( -/obj/machinery/atmospherics/pipe/simple/visible/green{ - dir = 9; - icon_state = "intact" - }, -/turf/simulated/wall/r_wall/prepainted, -/area/engineering/engine_room) -"nL" = ( -/obj/structure/sign/warning/radioactive{ - dir = 4; - icon_state = "radiation" - }, -/turf/simulated/wall/r_wall/hull, -/area/engineering/engine_room) -"nN" = ( -/obj/structure/cable, -/obj/machinery/power/terminal{ - dir = 4 - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/engineering/shieldbay) -"nP" = ( -/obj/structure/sign/directions/security{ - dir = 2; - pixel_y = -4; - pixel_z = 0 - }, -/obj/structure/sign/directions/bridge{ - dir = 1; - pixel_z = 6 - }, -/turf/simulated/wall/prepainted, -/area/hallway/primary/seconddeck/center) -"nQ" = ( -/obj/structure/sign/directions/security{ - pixel_y = -7 - }, -/obj/structure/sign/directions/bridge{ - dir = 1; - pixel_z = 6 - }, -/turf/simulated/wall/prepainted, -/area/hallway/primary/seconddeck/elevator) -"nS" = ( -/obj/machinery/atmospherics/portables_connector{ - dir = 4 - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/portable_atmospherics/powered/pump/filled, -/turf/simulated/floor/tiled/techfloor, -/area/engineering/atmos) -"nT" = ( -/obj/structure/sign/directions/infirmary{ - dir = 1; - pixel_z = -6 - }, -/obj/structure/sign/directions/science{ - dir = 2; - pixel_z = 6 - }, -/turf/simulated/wall/prepainted, -/area/hallway/primary/seconddeck/elevator) -"nW" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark, -/area/assembly/robotics) -"nY" = ( -/turf/simulated/wall/prepainted, -/area/engineering/foyer) -"oa" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/maintenance, -/obj/machinery/atmospherics/pipe/simple/hidden/cyan, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/techfloor/grid, -/area/maintenance/seconddeck/aftport) -"ob" = ( -/obj/effect/floor_decal/corner/yellow/half{ - dir = 1; - icon_state = "bordercolorhalf" - }, -/turf/simulated/floor/tiled/steel_grid, -/area/engineering/foyer) -"oc" = ( -/turf/simulated/floor/tiled, -/area/engineering/foyer) -"od" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 1 - }, -/turf/simulated/floor/tiled, -/area/engineering/engineering_bay) -"oe" = ( -/obj/machinery/firealarm{ - dir = 1; - pixel_x = 0; - pixel_y = -24 - }, -/obj/machinery/atmospherics/pipe/manifold/visible/cyan, -/turf/simulated/floor/tiled/techfloor, -/area/engineering/engine_room) -"oh" = ( -/obj/machinery/portable_atmospherics/powered/pump/filled, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/seconddeck/foreport) -"oi" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/effect/floor_decal/industrial/outline/blue, -/obj/machinery/portable_atmospherics/canister/hydrogen, -/turf/simulated/floor/tiled/techfloor/grid, -/area/engineering/engine_room) -"ok" = ( -/obj/machinery/light{ - dir = 4; - icon_state = "tube1" - }, -/obj/effect/floor_decal/industrial/warning, -/obj/machinery/atmospherics/pipe/cap/visible/fuel, -/turf/simulated/floor/tiled/techfloor, -/area/engineering/engine_room) -"ol" = ( -/obj/machinery/cryopod{ - dir = 2 - }, -/obj/item/device/radio/intercom{ - pixel_y = 23 - }, -/obj/machinery/embedded_controller/radio/simple_docking_controller/escape_pod{ - dir = 4; - frequency = 1380; - id_tag = "escape_pod_10"; - name = "escape pod five controller"; - pixel_x = -32; - pixel_y = 0; - tag_door = "escape_pod_10_hatch" - }, -/turf/simulated/floor/tiled/monotile, -/area/shuttle/escape_pod10/station) -"on" = ( -/obj/structure/catwalk, -/turf/simulated/open, -/area/maintenance/seconddeck/aftstarboard) -"oq" = ( -/obj/machinery/light/small{ - dir = 8 - }, -/obj/structure/hygiene/shower{ - pixel_y = 24 - }, -/obj/structure/hygiene/shower{ - pixel_y = 24 - }, -/obj/random/maintenance/solgov, -/turf/simulated/floor/plating, -/area/maintenance/seconddeck/forestarboard) -"or" = ( -/obj/effect/floor_decal/industrial/warning/corner, -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/obj/effect/floor_decal/corner/yellow/half{ - dir = 1; - icon_state = "bordercolorhalf" - }, -/obj/machinery/light{ - dir = 4 - }, -/turf/simulated/floor/tiled/steel_grid, -/area/engineering/engineering_bay) -"ot" = ( -/obj/effect/floor_decal/corner/yellow/half{ - dir = 8; - icon_state = "bordercolorhalf" - }, -/obj/structure/closet/hydrant{ - pixel_x = -32; - pixel_y = 0 - }, -/turf/simulated/floor/tiled, -/area/engineering/engine_monitoring) -"ou" = ( -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/effect/catwalk_plated, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/plating, -/area/engineering/engine_monitoring) -"ov" = ( -/obj/structure/bed/chair/padded/yellow{ - dir = 4; - icon_state = "chair_preview" - }, -/turf/simulated/floor/tiled/steel_grid, -/area/engineering/engine_monitoring) -"ow" = ( -/obj/machinery/computer/modular/preset/engineering{ - dir = 8; - icon_state = "console" - }, -/turf/simulated/floor/tiled/steel_grid, -/area/engineering/engine_monitoring) -"ox" = ( -/turf/simulated/floor/airless, -/area/engineering/engine_room) -"oy" = ( -/obj/machinery/portable_atmospherics/canister/oxygen, -/obj/effect/floor_decal/industrial/outline/grey, -/obj/structure/railing/mapped{ - dir = 1; - icon_state = "railing0-1" - }, -/turf/simulated/floor/plating, -/area/engineering/atmos/storage) -"oz" = ( -/obj/machinery/atmospherics/pipe/simple/visible/cyan, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 8; - icon_state = "warning" - }, -/turf/simulated/floor/tiled/techfloor, -/area/engineering/engine_room) -"oA" = ( -/obj/effect/floor_decal/industrial/warning/corner, -/obj/machinery/atmospherics/pipe/simple/visible/black, -/turf/simulated/floor/tiled/techfloor/grid, -/area/engineering/engine_room) -"oB" = ( -/obj/machinery/atmospherics/pipe/simple/visible/green, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/effect/floor_decal/industrial/warning, -/turf/simulated/floor/tiled/techfloor/grid, -/area/engineering/engine_room) -"oC" = ( -/obj/machinery/atmospherics/pipe/manifold/visible/yellow{ - dir = 8 - }, -/obj/machinery/meter, -/obj/effect/floor_decal/industrial/warning{ - dir = 6 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/engineering/engine_room) -"oD" = ( -/obj/machinery/atmospherics/pipe/manifold/visible/black{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor, -/area/engineering/atmos) -"oE" = ( -/obj/machinery/portable_atmospherics/powered/pump/filled, -/obj/effect/floor_decal/corner/yellow/mono, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/light/small, -/turf/simulated/floor/tiled/monotile, -/area/engineering/foyer) -"oF" = ( -/obj/structure/disposalpipe/segment, -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/catwalk, -/obj/structure/cable/green{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/turf/simulated/floor/plating, -/area/maintenance/seconddeck/central) -"oH" = ( -/obj/structure/sign/warning/vent_port{ - dir = 4; - icon_state = "securearea" - }, -/turf/simulated/wall/r_wall/prepainted, -/area/space) -"oK" = ( -/turf/simulated/floor/tiled/dark, -/area/medical/morgue) -"oM" = ( -/obj/structure/lattice, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/space, -/area/space) -"oN" = ( -/obj/effect/floor_decal/techfloor{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/engineering/engineering_bay) -"oO" = ( -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 4; - icon_state = "warningcorner" - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/seconddeck/forestarboard) -"oQ" = ( -/obj/structure/sign/warning/vent_port{ - dir = 1; - icon_state = "securearea" - }, -/turf/simulated/wall/r_wall/hull, -/area/engineering/engine_room) -"oS" = ( -/turf/simulated/floor/plating, -/area/maintenance/seconddeck/aftstarboard) -"oU" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/catwalk, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply, -/turf/simulated/floor/plating, -/area/maintenance/seconddeck/aftstarboard) -"oV" = ( -/obj/structure/table/marble, -/turf/simulated/floor/wood/walnut, -/area/vacant/chapel) -"oY" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/cyan{ - dir = 10; - icon_state = "intact" - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/seconddeck/aftport) -"pb" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 1; - icon_state = "warning" - }, -/turf/simulated/floor/tiled/steel_ridged, -/area/engineering/engineering_bay) -"pe" = ( -/obj/structure/lattice, -/obj/structure/disposalpipe/segment{ - dir = 8; - icon_state = "pipe-c" - }, -/turf/space, -/area/space) -"pi" = ( -/turf/simulated/floor/plating, -/area/maintenance/seconddeck/foreport) -"pk" = ( -/obj/machinery/alarm{ - dir = 8; - icon_state = "alarm0"; - pixel_x = 24 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9; - pixel_y = 0 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/techfloor, -/area/engineering/shieldbay) -"pl" = ( -/obj/structure/lattice, -/obj/structure/disposalpipe/segment, -/turf/space, -/area/space) -"po" = ( -/obj/structure/table/rack, -/obj/random/maintenance/solgov, -/obj/random/maintenance/solgov, -/obj/random/maintenance/solgov, -/obj/structure/catwalk, -/obj/machinery/power/apc{ - dir = 1; - name = "north bump"; - pixel_x = 0; - pixel_y = 24 - }, -/obj/structure/cable/green{ - d2 = 8; - icon_state = "0-8" - }, -/turf/simulated/floor/plating, -/area/maintenance/seconddeck/forestarboard) -"pp" = ( -/obj/structure/table/steel_reinforced, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 8 - }, -/obj/random_multi/single_item/memo_engineering, -/turf/simulated/floor/tiled/steel_grid, -/area/engineering/engine_monitoring) -"pq" = ( -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 - }, -/turf/simulated/floor/tiled/monotile, -/area/engineering/engine_monitoring) -"pr" = ( -/obj/structure/ladder/up, -/obj/effect/floor_decal/industrial/hatch/yellow, -/turf/simulated/floor/tiled/dark, -/area/assembly/robotics) -"pv" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/cyan{ - dir = 4; - icon_state = "intact" - }, -/obj/effect/floor_decal/corner/yellow/half{ - dir = 1; - icon_state = "bordercolorhalf" - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/monotile, -/area/engineering/foyer) -"pw" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/catwalk_plated, -/obj/machinery/atmospherics/pipe/simple/hidden/cyan{ - dir = 4; - icon_state = "intact" - }, -/obj/machinery/firealarm{ - pixel_y = 21 - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/plating, -/area/engineering/foyer) -"py" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/catwalk_plated, -/obj/machinery/atmospherics/pipe/simple/hidden/cyan{ - dir = 4; - icon_state = "intact" - }, -/obj/structure/cable{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/turf/simulated/floor/plating, -/area/engineering/foyer) -"pA" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8"; - pixel_x = 0 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/door/airlock/maintenance, -/obj/machinery/door/firedoor, -/turf/simulated/floor/tiled/techfloor/grid, -/area/maintenance/seconddeck/forestarboard) -"pB" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/blast/shutters{ - density = 0; - dir = 2; - icon_state = "shutter0"; - id_tag = "engineeringdeskshutters"; - name = "Engineering Desk Shutters"; - opacity = 0 - }, -/obj/effect/wallframe_spawn/reinforced/no_grille, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/plating, -/area/engineering/engineering_bay) -"pE" = ( -/obj/structure/table/rack, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/item/aiModule/reset, -/turf/simulated/floor/tiled/techfloor/grid, -/area/storage/tech) -"pF" = ( -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/effect/floor_decal/industrial/warning, -/turf/simulated/floor/tiled/techfloor/grid, -/area/engineering/shieldbay) -"pG" = ( -/obj/structure/table/rack{ - dir = 8 - }, -/obj/item/clothing/head/hardhat, -/obj/item/clothing/head/hardhat, -/obj/item/clothing/head/hardhat, -/obj/item/clothing/suit/storage/hazardvest, -/obj/item/clothing/suit/storage/hazardvest, -/obj/item/clothing/suit/storage/hazardvest, -/obj/structure/sign/warning/caution{ - pixel_y = 28 - }, -/obj/effect/floor_decal/corner/yellow/mono, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled/monotile, -/area/engineering/foyer) -"pH" = ( -/obj/machinery/computer/modular/preset/engineering, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/tiled/steel_grid, -/area/engineering/engineering_bay) -"pI" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/seconddeck/elevator) -"pJ" = ( -/obj/machinery/tele_beacon, -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/turf/simulated/floor/tiled, -/area/hallway/primary/seconddeck/fore) -"pK" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/effect/floor_decal/corner/yellow{ - dir = 1 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/light{ - dir = 1 - }, -/obj/machinery/camera/network/second_deck{ - c_tag = "Second Deck Hallway - Central East" - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/seconddeck) -"pL" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 1 - }, -/obj/effect/floor_decal/corner/yellow{ - dir = 5; - icon_state = "corner_white" - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/seconddeck) -"pM" = ( -/obj/effect/catwalk_plated, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply, -/turf/simulated/floor/plating, -/area/hallway/primary/seconddeck) -"pN" = ( -/obj/random_multi/single_item/poppy, -/turf/simulated/floor/tiled/techfloor, -/area/vacant/cargo) -"pO" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/cyan{ - dir = 4; - icon_state = "intact" - }, -/turf/simulated/floor/tiled/monotile, -/area/engineering/engineering_bay) -"pR" = ( -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/effect/catwalk_plated, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/cyan{ - dir = 10; - icon_state = "intact" - }, -/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply, -/turf/simulated/floor/plating, -/area/engineering/engine_monitoring) -"pS" = ( -/obj/structure/table/steel_reinforced, -/obj/machinery/button/blast_door{ - desc = "A remote control-switch for the engine control room blast doors."; - id_tag = "EngineBlast"; - name = "Engine Monitoring Room Blast Doors"; - pixel_x = 0; - pixel_y = -3 - }, -/obj/machinery/button/blast_door{ - desc = "A remote control-switch for the engine charging port."; - id_tag = "SupermatterPort"; - name = "Reactor Blast Doors"; - pixel_x = -6; - pixel_y = 7 - }, -/obj/machinery/button/alternate{ - desc = "A remote control-switch which toggles the engine emitter."; - id_tag = "EngineEmitter"; - name = "Engine Emitter"; - pixel_x = 6; - pixel_y = 7; - req_access = list("ACCESS_ENGINEERING") - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled/steel_grid, -/area/engineering/engine_monitoring) -"pT" = ( -/obj/machinery/computer/air_control/supermatter_core{ - dir = 8; - frequency = 1438; - icon_state = "computer"; - input_tag = "cooling_in"; - name = "Engine Cooling Control"; - output_tag = "cooling_out"; - pressure_setting = 100; - sensor_name = "Engine Core"; - sensor_tag = "engine_sensor" - }, -/obj/structure/cable/cyan{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled/steel_grid, -/area/engineering/engine_monitoring) -"pU" = ( -/obj/machinery/door/blast/regular{ - density = 0; - dir = 4; - icon_state = "pdoor0"; - id_tag = "EngineBlast"; - name = "Engine Monitoring Room Blast Doors"; - opacity = 0 - }, -/obj/effect/wallframe_spawn/reinforced, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/door/firedoor, -/turf/simulated/floor/plating, -/area/engineering/engine_monitoring) -"pV" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/window/reinforced, -/obj/effect/floor_decal/industrial/outline/blue, -/obj/machinery/portable_atmospherics/canister/hydrogen, -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/engineering/engine_room) -"pX" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/catwalk_plated, -/obj/machinery/light{ - dir = 1; - icon_state = "tube1" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/cyan{ - dir = 4; - icon_state = "intact" - }, -/turf/simulated/floor/plating, -/area/engineering/foyer) -"pZ" = ( -/obj/effect/floor_decal/industrial/hatch/yellow, -/obj/machinery/power/emitter{ - anchored = 1; - dir = 4; - id_tag = "EngineEmitter"; - state = 2 - }, -/obj/structure/cable/cyan{ - d2 = 8; - icon_state = "0-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/engineering/engine_room) -"qa" = ( -/obj/effect/floor_decal/industrial/hatch/yellow, -/obj/machinery/atmospherics/pipe/simple/visible/green, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/engineering/engine_room) -"qb" = ( -/obj/effect/floor_decal/industrial/hatch/yellow, -/obj/machinery/atmospherics/valve/digital{ - name = "TEG bypass valve" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/engineering/engine_room) -"qc" = ( -/obj/machinery/door/blast/regular{ - id_tag = "SupermatterPort"; - name = "Reactor Blast Door" - }, -/obj/effect/wallframe_spawn/reinforced_phoron, -/turf/simulated/floor/reinforced/airless, -/area/engineering/engine_room) -"qe" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/catwalk_plated, -/obj/machinery/alarm{ - pixel_y = 24 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/cyan{ - dir = 4; - icon_state = "intact" - }, -/turf/simulated/floor/plating, -/area/engineering/foyer) -"qf" = ( -/obj/machinery/atmospherics/pipe/simple/visible/green, -/obj/machinery/atmospherics/binary/pump{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/tiled/techfloor/grid, -/area/engineering/atmos) -"qh" = ( -/obj/structure/cable/yellow{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/turf/simulated/floor/reinforced/airless, -/area/vacant/prototype/engine) -"qi" = ( -/obj/effect/wallframe_spawn/reinforced/no_grille, -/obj/machinery/door/firedoor, -/turf/simulated/floor/plating, -/area/vacant/prototype/control) -"qj" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 1; - icon_state = "warning" - }, -/turf/simulated/floor/plating, -/area/vacant/prototype/engine) -"qk" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/door/firedoor, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8"; - pixel_x = 0 - }, -/obj/machinery/door/airlock/multi_tile/engineering{ - dir = 4; - name = "Engineering Bay" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/vacant/prototype/control) -"qm" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/effect/catwalk_plated, -/turf/simulated/floor/plating, -/area/hallway/primary/seconddeck/fore) -"qt" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark, -/area/assembly/robotics) -"qu" = ( -/obj/effect/shuttle_landmark/torch/deck3/aquila{ - name = "2nd Deck, Aft Port" - }, -/turf/space, -/area/space) -"qv" = ( -/turf/simulated/wall/prepainted, -/area/engineering/drone_fabrication) -"qw" = ( -/turf/simulated/wall/r_wall/hull, -/area/vacant/prototype/engine) -"qy" = ( -/obj/machinery/power/shield_generator{ - current_energy = 9000000000; - max_energy = 9000000000; - pixel_x = -1; - pixel_y = 3 - }, -/obj/structure/cable/cyan{ - d2 = 2; - icon_state = "0-2" - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/light{ - dir = 8 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/engineering/shieldbay) -"qA" = ( -/obj/machinery/door/firedoor, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/door/airlock/command{ - name = "Second Deck Teleporter" - }, -/turf/simulated/floor/tiled/steel_ridged, -/area/engineering/storage) -"qB" = ( -/obj/machinery/portable_atmospherics/canister/hydrogen, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/floor/plating, -/area/engineering/atmos/storage) -"qC" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 1 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/cyan{ - dir = 4; - icon_state = "intact" - }, -/obj/effect/floor_decal/corner/yellow/half{ - dir = 1; - icon_state = "bordercolorhalf" - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/turf/simulated/floor/tiled/monotile, -/area/engineering/foyer) -"qE" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 1 - }, -/obj/effect/floor_decal/corner/yellow/half, -/turf/simulated/floor/tiled, -/area/engineering/foyer) -"qF" = ( -/obj/structure/sign/warning/hot_exhaust{ - dir = 8; - icon_state = "fire" - }, -/turf/simulated/wall/r_wall/hull, -/area/vacant/prototype/engine) -"qH" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/catwalk_plated, -/obj/structure/closet/hydrant{ - pixel_x = 0; - pixel_y = 32 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/cyan{ - dir = 4; - icon_state = "intact" - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/turf/simulated/floor/plating, -/area/engineering/foyer) -"qI" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 1 - }, -/obj/effect/catwalk_plated, -/obj/machinery/atmospherics/pipe/simple/hidden/cyan{ - dir = 4; - icon_state = "intact" - }, -/obj/machinery/tele_beacon{ - autoset_name = 0; - beacon_name = "Engineering - Lobby" - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/turf/simulated/floor/plating, -/area/engineering/foyer) -"qK" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/table/steel_reinforced, -/obj/machinery/door/window/brigdoor/northleft{ - dir = 4; - name = "engineering front desk" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/item/paper_bin{ - pixel_x = -3; - pixel_y = 7 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/cyan{ - dir = 4; - icon_state = "intact" - }, -/obj/machinery/door/firedoor, -/obj/machinery/door/blast/shutters{ - density = 0; - dir = 4; - icon_state = "shutter0"; - id_tag = "engineeringdeskshutters"; - name = "Engineering Desk Shutters"; - opacity = 0 - }, -/turf/simulated/floor/tiled/monotile, -/area/engineering/engineering_bay) -"qL" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/pager/engineering{ - pixel_x = 26; - pixel_y = 56 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/cyan{ - dir = 4; - icon_state = "intact" - }, -/turf/simulated/floor/tiled/monotile, -/area/engineering/foyer) -"qM" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/catwalk_plated, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/cyan{ - dir = 4; - icon_state = "intact" - }, -/turf/simulated/floor/plating, -/area/engineering/engineering_bay) -"qN" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/tiled, -/area/engineering/foyer) -"qO" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/cyan{ - dir = 4; - icon_state = "intact" - }, -/turf/simulated/floor/tiled/monotile, -/area/engineering/foyer) -"qP" = ( -/obj/structure/bed/chair/padded/yellow{ - dir = 8; - icon_state = "chair_preview" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/disposalpipe/junction{ - dir = 4; - icon_state = "pipe-j2" - }, -/obj/machinery/light_switch{ - pixel_x = -24; - pixel_y = 34 - }, -/obj/machinery/button/blast_door{ - id_tag = "engineeringdeskshutters"; - name = "Desk Shutter Control"; - pixel_x = -26; - pixel_y = 24 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/cyan{ - dir = 4; - icon_state = "intact" - }, -/turf/simulated/floor/tiled/steel_grid, -/area/engineering/engineering_bay) -"qQ" = ( -/obj/effect/catwalk_plated, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/cyan{ - dir = 4; - icon_state = "intact" - }, -/turf/simulated/floor/plating, -/area/engineering/engineering_bay) -"qR" = ( -/obj/structure/disposalpipe/segment, -/obj/effect/catwalk_plated, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9; - pixel_y = 0 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/cyan{ - dir = 10; - icon_state = "intact" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/turf/simulated/floor/plating, -/area/engineering/engineering_bay) -"qT" = ( -/obj/structure/bed/chair/padded/yellow, -/turf/simulated/floor/tiled/steel_grid, -/area/engineering/engineering_bay) -"qU" = ( -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 4 - }, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 1 - }, -/obj/machinery/rotating_alarm/supermatter{ - dir = 8 - }, -/turf/simulated/floor/tiled/steel_grid, -/area/engineering/engineering_bay) -"qV" = ( -/turf/simulated/wall/prepainted, -/area/engineering/engine_monitoring) -"qW" = ( -/obj/structure/disposalpipe/segment{ - dir = 2; - icon_state = "pipe-c" - }, -/obj/machinery/hologram/holopad, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/cyan{ - dir = 4; - icon_state = "intact" - }, -/turf/simulated/floor/tiled/monotile, -/area/engineering/engineering_bay) -"qX" = ( -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/effect/catwalk_plated, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/cyan, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/plating, -/area/engineering/engine_monitoring) -"qY" = ( -/obj/machinery/atmospherics/portables_connector{ - dir = 4 - }, -/obj/effect/floor_decal/industrial/outline/blue, -/obj/effect/engine_setup/coolant_canister, -/turf/simulated/floor/tiled/techfloor/grid, -/area/engineering/engine_room) -"qZ" = ( -/obj/machinery/atmospherics/binary/pump{ - dir = 4 - }, -/obj/effect/engine_setup/pump_max, -/turf/simulated/floor/tiled/techfloor/grid, -/area/engineering/engine_room) -"rb" = ( -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 8; - icon_state = "warning" - }, -/obj/machinery/atmospherics/pipe/simple/visible/cyan, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/turf/simulated/floor/tiled/techfloor, -/area/engineering/engine_room) -"rc" = ( -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/visible/black, -/turf/simulated/floor/tiled/techfloor/grid, -/area/engineering/engine_room) -"rd" = ( -/obj/machinery/atmospherics/pipe/manifold4w/visible/green, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/effect/floor_decal/industrial/warning{ - dir = 1; - icon_state = "warning" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/engineering/engine_room) -"re" = ( -/obj/machinery/atmospherics/pipe/manifold/visible/green, -/obj/machinery/meter, -/obj/effect/floor_decal/industrial/warning{ - dir = 5 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/engineering/engine_room) -"rh" = ( -/obj/machinery/atmospherics/pipe/simple/visible/yellow{ - dir = 4 - }, -/obj/machinery/door/airlock/hatch{ - icon_state = "closed"; - id_tag = "engine_access_hatch"; - locked = 1 - }, -/turf/simulated/floor/reinforced/airless, -/area/engineering/engine_room) -"ri" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, -/obj/structure/cable{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/turf/simulated/floor/tiled/steel_grid, -/area/vacant/prototype/control) -"rj" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 1; - icon_state = "warning" - }, -/obj/machinery/light, -/turf/simulated/floor/plating, -/area/vacant/prototype/engine) -"rl" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 1 - }, -/obj/effect/floor_decal/corner/yellow/half, -/obj/effect/floor_decal/industrial/warning, -/turf/simulated/floor/tiled, -/area/engineering/foyer) -"rm" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/sign/deck/second{ - dir = 1; - pixel_y = -32 - }, -/obj/effect/floor_decal/industrial/warning/corner, -/obj/effect/floor_decal/corner/yellow{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/seconddeck/elevator) -"rn" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/structure/disposalpipe/segment{ - dir = 4; - icon_state = "pipe-c" - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/seconddeck/aftport) -"rq" = ( -/obj/structure/table/rack, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/item/stack/material/steel{ - amount = 50 - }, -/obj/item/stack/material/steel{ - amount = 50 - }, -/obj/item/stack/material/steel{ - amount = 50 - }, -/obj/item/stack/material/steel{ - amount = 50 - }, -/obj/item/stack/material/steel{ - amount = 50 - }, -/obj/item/stack/material/steel{ - amount = 50 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/engineering/engineering_bay) -"rr" = ( -/obj/structure/catwalk, -/obj/structure/cable{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/turf/simulated/floor/plating, -/area/maintenance/seconddeck/aftstarboard) -"rs" = ( -/obj/structure/sign/deck/second{ - pixel_y = 38 - }, -/obj/structure/sign/warning/pods/west{ - pixel_y = 25 - }, -/turf/simulated/open, -/area/hallway/primary/seconddeck/center) -"rt" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/maintenance, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/maintenance/seconddeck/foreport) -"ru" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/maintenance, -/turf/simulated/floor/tiled/techfloor/grid, -/area/maintenance/seconddeck/foreport) -"rv" = ( -/obj/machinery/door/airlock/hatch, -/turf/simulated/floor/airless, -/area/engineering/engine_room) -"rw" = ( -/obj/effect/floor_decal/techfloor/corner, -/turf/simulated/floor/tiled/techfloor/grid, -/area/engineering/engineering_bay) -"ry" = ( -/obj/structure/table/steel_reinforced, -/obj/machinery/button/blast_door{ - id_tag = "cChamber1sV"; - name = "Deck One Starboard Chamber Vent"; - pixel_x = -6; - pixel_y = 6 - }, -/obj/machinery/button/blast_door{ - id_tag = "cChamber3sV"; - name = "Deck Three Starboard Chamber Vent"; - pixel_x = -6; - pixel_y = -4 - }, -/obj/machinery/button/blast_door{ - id_tag = "cChamber3pV"; - name = "Deck Three Port Chamber Vent"; - pixel_x = 6; - pixel_y = -4 - }, -/obj/machinery/button/blast_door{ - id_tag = "cChamber1pV"; - name = "Deck One Port Chamber Vent"; - pixel_x = 6; - pixel_y = 6 - }, -/obj/machinery/status_light{ - id_tag = "cChamber1p"; - name = "Deck One Port status indicator"; - pixel_x = 8; - pixel_y = -36 - }, -/obj/machinery/status_light{ - id_tag = "cChamber1s"; - name = "Deck One Starboard status indicator"; - pixel_x = -8; - pixel_y = -36 - }, -/obj/machinery/status_light{ - id_tag = "cChamber3s"; - name = "Deck Three Starboard status indicator"; - pixel_x = -8; - pixel_y = -24 - }, -/obj/machinery/status_light{ - id_tag = "cChamber3p"; - name = "Deck Three Port status indicator"; - pixel_x = 8; - pixel_y = -24 - }, -/obj/item/paper{ - desc = ""; - info = "To turn on burn mode, toggle the fuel mode then wait 15 seconds and press the ignition switch. If indicator light turns red, press the corresponding vent button. When disabling burn mode, vent all chambers to prevent a blowout."; - name = "Burn mode instructions" - }, -/turf/simulated/floor/tiled/steel_grid, -/area/engineering/engineering_bay) -"rA" = ( -/obj/machinery/drone_fabricator/torch, -/turf/simulated/floor/tiled/techfloor, -/area/engineering/drone_fabrication) -"rB" = ( -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/techfloor, -/area/engineering/drone_fabrication) -"rC" = ( -/obj/structure/railing/mapped{ - dir = 1; - icon_state = "railing0-1" - }, -/turf/simulated/open, -/area/maintenance/seconddeck/aftstarboard) -"rD" = ( -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable/green{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/turf/simulated/floor/tiled/techfloor, -/area/engineering/drone_fabrication) -"rE" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 4 - }, -/obj/machinery/power/apc{ - dir = 1; - name = "north bump"; - pixel_x = 0; - pixel_y = 24 - }, -/obj/structure/cable/cyan{ - d2 = 2; - icon_state = "0-2" - }, -/turf/simulated/floor/tiled/techfloor, -/area/engineering/drone_fabrication) -"rF" = ( -/obj/machinery/recharge_station, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled/techfloor, -/area/engineering/drone_fabrication) -"rM" = ( -/obj/machinery/atmospherics/pipe/simple/visible/red, -/turf/simulated/floor/tiled/techfloor, -/area/engineering/atmos) -"rO" = ( -/obj/structure/closet/emcloset, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled, -/area/hallway/primary/seconddeck) -"rP" = ( -/turf/simulated/wall/r_wall/hull, -/area/maintenance/disposal) -"rR" = ( -/obj/structure/sign/directions/supply{ - dir = 2; - pixel_y = -4; - pixel_z = 0 - }, -/obj/structure/sign/directions/engineering{ - dir = 4; - pixel_y = 3; - pixel_z = 0 - }, -/obj/structure/sign/directions/bridge{ - dir = 1; - pixel_y = 10; - pixel_z = 0 - }, -/turf/simulated/wall/prepainted, -/area/engineering/foyer) -"rS" = ( -/obj/machinery/door/firedoor, -/obj/effect/floor_decal/industrial/hatch/yellow, -/turf/simulated/floor/tiled/monotile, -/area/engineering/foyer) -"rU" = ( -/obj/structure/railing/mapped{ - dir = 1; - icon_state = "railing0-1" - }, -/turf/simulated/floor/plating, -/area/maintenance/seconddeck/forestarboard) -"rV" = ( -/obj/structure/sign/warning/secure_area{ - dir = 1; - pixel_y = -32 - }, -/obj/effect/floor_decal/industrial/warning/corner, -/turf/simulated/floor/tiled/steel_grid, -/area/hallway/primary/seconddeck) -"rW" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 1 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/seconddeck) -"rY" = ( -/obj/structure/table/steel, -/obj/machinery/recharger{ - pixel_y = 0 - }, -/obj/item/storage/toolbox/electrical, -/obj/item/device/multitool, -/turf/simulated/floor/tiled/steel_grid, -/area/engineering/engineering_bay) -"rZ" = ( -/obj/machinery/hologram/holopad, -/obj/effect/landmark{ - name = "lightsout" - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/turf/simulated/floor/tiled, -/area/engineering/foyer) -"sc" = ( -/obj/effect/floor_decal/corner/yellow/half, -/obj/machinery/light/small, -/obj/machinery/atmospherics/pipe/simple/hidden/cyan{ - dir = 4; - icon_state = "intact" - }, -/turf/simulated/floor/tiled, -/area/engineering/foyer) -"sd" = ( -/obj/machinery/power/apc{ - dir = 2; - name = "south bump"; - pixel_y = -24 - }, -/obj/effect/floor_decal/corner/yellow/half, -/obj/machinery/atmospherics/pipe/simple/hidden/cyan{ - dir = 4; - icon_state = "intact" - }, -/obj/structure/cable/green, -/turf/simulated/floor/tiled, -/area/engineering/foyer) -"se" = ( -/obj/random/obstruction, -/obj/effect/floor_decal/industrial/warning/corner, -/turf/simulated/floor/plating, -/area/vacant/chapel) -"sf" = ( -/obj/machinery/button/toggle/valve{ - id_tag = "fuelmode"; - name = "fuel mode control"; - operating = 0; - pixel_x = 6; - pixel_y = -26 - }, -/obj/machinery/button/ignition{ - id_tag = "engines"; - operating = 0; - pixel_x = -6; - pixel_y = -26 - }, -/obj/machinery/computer/ship/engines{ - dir = 1 - }, -/turf/simulated/floor/tiled/steel_grid, -/area/engineering/engineering_bay) -"si" = ( -/obj/effect/floor_decal/corner/yellow/half{ - dir = 8; - icon_state = "bordercolorhalf" - }, -/obj/machinery/light{ - dir = 8 - }, -/turf/simulated/floor/tiled, -/area/engineering/engine_monitoring) -"sk" = ( -/obj/structure/table/steel_reinforced, -/obj/item/storage/firstaid/toxin, -/obj/item/storage/med_pouch/radiation, -/obj/machinery/power/apc/super/critical{ - dir = 2; - is_critical = 1; - name = "south bump"; - pixel_y = -24 - }, -/obj/structure/cable/cyan, -/turf/simulated/floor/tiled/steel_grid, -/area/engineering/engine_monitoring) -"sl" = ( -/obj/machinery/light, -/obj/machinery/atmospherics/portables_connector{ - dir = 4 - }, -/obj/effect/floor_decal/industrial/outline/blue, -/obj/effect/engine_setup/coolant_canister, -/turf/simulated/floor/tiled/techfloor/grid, -/area/engineering/engine_room) -"sm" = ( -/obj/structure/sign/warning/radioactive{ - dir = 1; - pixel_y = -32 - }, -/obj/machinery/atmospherics/binary/pump{ - dir = 4 - }, -/obj/effect/engine_setup/pump_max, -/turf/simulated/floor/tiled/techfloor/grid, -/area/engineering/engine_room) -"so" = ( -/obj/machinery/atmospherics/pipe/simple/visible/green{ - dir = 4; - icon_state = "intact" - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 1; - icon_state = "warning" - }, -/obj/machinery/meter, -/turf/simulated/floor/tiled/techfloor/grid, -/area/engineering/engine_room) -"sq" = ( -/obj/machinery/atmospherics/pipe/simple/visible/green, -/obj/machinery/atmospherics/pipe/simple/visible/cyan{ - dir = 4; - icon_state = "intact" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/techfloor, -/area/engineering/engine_room) -"sr" = ( -/obj/machinery/atmospherics/pipe/simple/visible/cyan{ - dir = 10 - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 4; - icon_state = "warning" - }, -/obj/machinery/rotating_alarm/supermatter{ - dir = 8 - }, -/turf/simulated/floor/tiled/techfloor, -/area/engineering/engine_room) -"ss" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/catwalk, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/plating, -/area/maintenance/seconddeck/aftstarboard) -"su" = ( -/obj/machinery/mech_recharger, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled/dark/monotile, -/area/assembly/robotics) -"sv" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/seconddeck/foreport) -"sw" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8"; - pixel_x = 0 - }, -/turf/simulated/floor/plating, -/area/engineering/engine_smes) -"sy" = ( -/obj/machinery/atmospherics/pipe/simple/visible/cyan{ - dir = 4; - icon_state = "intact" - }, -/turf/simulated/wall/r_wall/prepainted, -/area/engineering/atmos) -"sA" = ( -/obj/machinery/door/airlock/engineering{ - name = "Second Deck Substation" - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/door/firedoor, -/turf/simulated/floor/tiled/techfloor/grid, -/area/maintenance/substation/seconddeck) -"sC" = ( -/obj/machinery/computer/drone_control, -/obj/structure/sign/warning/secure_area{ - dir = 4; - pixel_x = -32 - }, -/obj/machinery/light/small{ - dir = 1 - }, -/turf/simulated/floor/tiled/techfloor, -/area/engineering/drone_fabrication) -"sE" = ( -/obj/structure/disposalpipe/segment, -/obj/effect/landmark{ - name = "lightsout" - }, -/obj/structure/catwalk, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/plating, -/area/engineering/drone_fabrication) -"sF" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor, -/area/engineering/drone_fabrication) -"sG" = ( -/obj/machinery/door/blast/regular{ - density = 1; - icon_state = "pdoor1"; - id_tag = "RubbishOuter"; - name = "Disposal Maintenance"; - opacity = 1 - }, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/plating, -/area/maintenance/disposal) -"sH" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/door/blast/shutters{ - dir = 2; - id_tag = "engstorage"; - name = "Engineering Storage Shutters" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/cyan, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/monotile, -/area/engineering/storage) -"sK" = ( -/obj/structure/closet/toolcloset, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/floor/tiled/techfloor/grid, -/area/maintenance/seconddeck/foreport) -"sN" = ( -/obj/effect/floor_decal/techfloor, -/obj/effect/floor_decal/techfloor{ - dir = 1; - icon_state = "techfloor_edges" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/storage/tech) -"sQ" = ( -/obj/effect/floor_decal/corner/blue{ - dir = 6 - }, -/obj/structure/ladder/up, -/turf/simulated/floor/tiled/steel_grid, -/area/engineering/foyer) -"sS" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/catwalk_plated, -/obj/machinery/atmospherics/pipe/simple/hidden/cyan{ - dir = 4; - icon_state = "intact" - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/plating, -/area/engineering/foyer) -"sU" = ( -/obj/structure/sign/directions/infirmary{ - dir = 1; - pixel_y = -3; - pixel_z = 0 - }, -/obj/structure/sign/directions/science{ - dir = 1; - pixel_y = 3; - pixel_z = 0 - }, -/turf/simulated/wall/prepainted, -/area/engineering/engineering_bay) -"sW" = ( -/obj/effect/wallframe_spawn/reinforced, -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/turf/simulated/floor/plating, -/area/engineering/atmos) -"sX" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/glass/atmos{ - name = "Atmospherics" - }, -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/cyan, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/turf/simulated/floor/tiled/steel_ridged, -/area/engineering/atmos) -"sY" = ( -/obj/machinery/computer/modular/preset/engineering{ - dir = 1 - }, -/obj/machinery/light, -/turf/simulated/floor/tiled/steel_grid, -/area/engineering/engineering_bay) -"sZ" = ( -/turf/simulated/wall/r_wall/prepainted, -/area/engineering/atmos) -"tb" = ( -/obj/machinery/atmospherics/pipe/simple/visible/green, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/sign/warning/nosmoking_1{ - dir = 4; - icon_state = "nosmoking"; - pixel_x = -32 - }, -/turf/simulated/floor/tiled/techfloor, -/area/engineering/engine_room) -"tc" = ( -/obj/machinery/atmospherics/pipe/simple/visible/cyan{ - dir = 5; - icon_state = "intact" - }, -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor, -/area/engineering/engine_room) -"td" = ( -/obj/machinery/camera/network/engine{ - c_tag = "Engine - Heat Exchangers" - }, -/obj/machinery/atmospherics/pipe/manifold/visible/cyan{ - dir = 1 - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 1 - }, -/turf/simulated/floor/tiled/techfloor, -/area/engineering/engine_room) -"te" = ( -/obj/machinery/atmospherics/pipe/simple/visible/cyan{ - dir = 4; - icon_state = "intact" - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 1 - }, -/turf/simulated/floor/tiled/techfloor, -/area/engineering/engine_room) -"tf" = ( -/obj/machinery/atmospherics/pipe/simple/visible/cyan{ - dir = 10 - }, -/obj/machinery/light{ - dir = 4; - icon_state = "tube1" - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 1 - }, -/turf/simulated/floor/tiled/techfloor, -/area/engineering/engine_room) -"tg" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 4 - }, -/turf/simulated/floor/tiled/steel_grid, -/area/engineering/engineering_bay) -"th" = ( -/turf/simulated/floor/tiled/techfloor/grid, -/area/maintenance/incinerator) -"ti" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/monotile, -/area/engineering/engineering_bay) -"tj" = ( -/obj/structure/table/rack{ - dir = 8 - }, -/obj/random/junk, -/obj/random/junk, -/turf/simulated/floor/tiled/techfloor, -/area/hallway/primary/seconddeck/fore) -"tk" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 8 - }, -/turf/simulated/floor/tiled/techfloor, -/area/engineering/drone_fabrication) -"tl" = ( -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/catwalk, -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/plating, -/area/engineering/drone_fabrication) -"tm" = ( -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/structure/table/rack{ - dir = 8 - }, -/obj/structure/window/reinforced{ - dir = 4 - }, -/obj/structure/window/reinforced{ - dir = 2 - }, -/obj/structure/window/reinforced{ - dir = 1 - }, -/obj/machinery/door/window/brigdoor/westright{ - autoset_access = 0; - name = "Synth's suit storage"; - req_access = list("ACCESS_CAPTAIN") - }, -/obj/item/rig/zero/synth/equipped, -/turf/simulated/floor/tiled/techfloor, -/area/engineering/drone_fabrication) -"to" = ( -/obj/structure/window/reinforced, -/obj/machinery/portable_atmospherics/canister/carbon_dioxide, -/obj/machinery/atmospherics/pipe/simple/hidden/black{ - dir = 2; - icon_state = "intact" - }, -/obj/machinery/atmospherics/pipe/simple/visible/yellow{ - dir = 4 - }, -/obj/machinery/light/spot{ - dir = 4; - icon_state = "tube_map" - }, -/obj/effect/floor_decal/corner/orange, -/obj/effect/floor_decal/corner/black{ - dir = 4; - icon_state = "corner_white" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/engineering/atmos) -"tq" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/door/airlock/highsecurity{ - name = "Bluespace Drive" - }, -/obj/effect/floor_decal/industrial/hatch/yellow, -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/engineering/bluespace) -"ts" = ( -/obj/structure/disposalpipe/segment, -/obj/effect/catwalk_plated, -/obj/machinery/atmospherics/pipe/simple/hidden/cyan, -/turf/simulated/floor/plating, -/area/engineering/engineering_bay) -"tt" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable/cyan{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/turf/simulated/floor/tiled/techfloor, -/area/engineering/shieldbay) -"tv" = ( -/obj/effect/floor_decal/corner/lime{ - dir = 9 - }, -/obj/structure/ladder, -/obj/machinery/status_display{ - pixel_x = -32 - }, -/obj/effect/catwalk_plated, -/turf/simulated/floor/tiled/steel_grid, -/area/engineering/foyer) -"tw" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/engineering/foyer) -"ty" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 8 - }, -/turf/simulated/floor/tiled, -/area/engineering/foyer) -"tz" = ( -/obj/structure/table/steel_reinforced, -/obj/item/book/manual/supermatter_engine, -/obj/item/device/radio/intercom{ - dir = 1; - pixel_y = -28 - }, -/obj/machinery/camera/network/engine{ - c_tag = "Engine - Control"; - dir = 1 - }, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 8 - }, -/turf/simulated/floor/tiled/steel_grid, -/area/engineering/engine_monitoring) -"tA" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/effect/floor_decal/corner/yellow/half, -/obj/effect/floor_decal/industrial/warning, -/obj/machinery/atmospherics/pipe/simple/hidden/cyan{ - dir = 6; - icon_state = "intact" - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled, -/area/engineering/foyer) -"tB" = ( -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/cyan, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/tiled/monotile, -/area/engineering/engine_monitoring) -"tD" = ( -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/cryopod{ - dir = 2 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/synth/borg_upload) -"tE" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/black, -/turf/simulated/floor/tiled/techfloor, -/area/engineering/wastetank) -"tG" = ( -/obj/structure/table/standard{ - name = "plastic table frame" - }, -/obj/machinery/alarm{ - dir = 4; - icon_state = "alarm0"; - pixel_x = -22; - pixel_y = 0 - }, -/obj/machinery/firealarm{ - pixel_y = 21 - }, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/disposal) -"tH" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/turf/simulated/floor/bluegrid, -/area/engineering/bluespace) -"tJ" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 4; - level = 2 - }, -/obj/machinery/alarm{ - pixel_y = 24 - }, -/turf/simulated/floor/tiled/techfloor, -/area/engineering/atmos) -"tL" = ( -/obj/structure/closet/secure_closet/atmos_torch, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/item/rpd, -/turf/simulated/floor/tiled/techfloor, -/area/engineering/atmos) -"tM" = ( -/obj/structure/window/reinforced{ - dir = 4 - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/suit_storage_unit/atmos/alt/sol, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/techfloor, -/area/engineering/atmos) -"tN" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/turf/simulated/floor/tiled/techfloor, -/area/engineering/atmos) -"tO" = ( -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 4 - }, -/obj/machinery/meter, -/obj/machinery/atmospherics/pipe/manifold4w/visible, -/turf/simulated/floor/tiled/techfloor, -/area/engineering/atmos) -"tP" = ( -/obj/machinery/atmospherics/binary/passive_gate/on{ - dir = 8; - max_pressure_setting = 15000; - name = "CO2 to Hangar"; - regulate_mode = 2; - target_pressure = 2500; - use_power = 1 - }, -/obj/machinery/camera/network/engineering{ - c_tag = "Atmospherics - North" - }, -/obj/structure/extinguisher_cabinet{ - pixel_y = 32 - }, -/turf/simulated/floor/tiled/techfloor, -/area/engineering/atmos) -"tQ" = ( -/obj/machinery/atmospherics/pipe/simple/visible/black, -/obj/machinery/atmospherics/pipe/simple/visible/yellow{ - dir = 4 - }, -/obj/machinery/light/spot{ - dir = 1 - }, -/obj/machinery/firealarm{ - pixel_y = 21 - }, -/turf/simulated/floor/tiled/techfloor, -/area/engineering/atmos) -"tV" = ( -/obj/machinery/atmospherics/unary/outlet_injector{ - dir = 8; - frequency = 1441; - icon_state = "map_injector"; - id = "co2_in"; - pixel_y = 0; - use_power = 1 - }, -/turf/simulated/floor/reinforced/carbon_dioxide, -/area/engineering/atmos) -"tX" = ( -/obj/structure/table/rack, -/obj/random/maintenance/solgov, -/turf/simulated/floor/plating, -/area/maintenance/seconddeck/aftport) -"tY" = ( -/obj/machinery/atmospherics/pipe/manifold/visible/cyan{ - dir = 8; - icon_state = "map" - }, -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 8; - icon_state = "warningcorner" - }, -/obj/structure/sign/warning/fire{ - dir = 8; - icon_state = "fire"; - pixel_x = 32 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/engineering/engine_room) -"ub" = ( -/obj/effect/floor_decal/industrial/warning/corner, -/obj/machinery/light/small{ - dir = 1 - }, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/seconddeck/foreport) -"uc" = ( -/obj/effect/floor_decal/industrial/warning, -/obj/machinery/embedded_controller/radio/simple_docking_controller/escape_pod_berth{ - dir = 1; - frequency = 1380; - id_tag = "escape_pod_10_berth"; - name = "escape pod five berth controller"; - pixel_x = -24; - pixel_y = -24; - tag_door = "escape_pod_10_berth_hatch" - }, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/seconddeck/foreport) -"ud" = ( -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 8; - icon_state = "warningcorner" - }, -/turf/simulated/floor/plating, -/area/vacant/prototype/engine) -"ue" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 4; - icon_state = "warning" - }, -/turf/simulated/floor/plating, -/area/vacant/prototype/engine) -"ug" = ( -/obj/machinery/cryopod/robot{ - dir = 4 - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/computer/cryopod/robot{ - pixel_x = -32 - }, -/turf/simulated/floor/tiled/techfloor, -/area/engineering/drone_fabrication) -"uh" = ( -/obj/machinery/door/firedoor, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/steel_ridged, -/area/engineering/engineering_bay) -"ui" = ( -/obj/effect/floor_decal/corner/lime{ - dir = 9 - }, -/obj/structure/ladder, -/obj/item/device/radio/intercom{ - dir = 4; - pixel_x = -21 - }, -/obj/effect/catwalk_plated, -/turf/simulated/floor/tiled/steel_grid, -/area/engineering/foyer) -"um" = ( -/obj/structure/railing/mapped{ - dir = 8; - icon_state = "railing0-1" - }, -/obj/structure/railing/mapped, -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 8; - icon_state = "warningcorner" - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 8 - }, -/obj/effect/floor_decal/industrial/warning, -/turf/simulated/floor/plating, -/area/maintenance/seconddeck/aftstarboard) -"un" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 8 - }, -/obj/machinery/light{ - dir = 4 - }, -/obj/machinery/firealarm{ - dir = 4; - pixel_x = 24 - }, -/turf/simulated/floor/tiled/dark, -/area/assembly/chargebay) -"ur" = ( -/obj/effect/floor_decal/corner/blue{ - dir = 6 - }, -/obj/structure/ladder/up, -/obj/item/device/radio/intercom{ - dir = 8; - pixel_x = 21 - }, -/turf/simulated/floor/tiled/steel_grid, -/area/engineering/foyer) -"us" = ( -/obj/structure/closet/secure_closet/atmos_torch, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable/cyan{ - d2 = 4; - icon_state = "0-4" - }, -/obj/machinery/power/apc/super/critical{ - dir = 1; - is_critical = 1; - name = "north bump"; - pixel_y = 24 - }, -/obj/item/rpd, -/turf/simulated/floor/tiled/techfloor, -/area/engineering/atmos) -"ut" = ( -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/obj/effect/catwalk_plated, -/obj/machinery/atmospherics/pipe/simple/hidden/cyan, -/turf/simulated/floor/plating, -/area/engineering/atmos) -"uu" = ( -/obj/machinery/atmospherics/pipe/simple/visible/green{ - dir = 10; - icon_state = "intact" - }, -/turf/simulated/floor/tiled/techfloor, -/area/engineering/atmos) -"uv" = ( -/obj/machinery/atmospherics/binary/pump/on{ - dir = 4; - name = "Scrubber to Waste" - }, -/turf/simulated/floor/tiled/techfloor, -/area/engineering/atmos) -"uw" = ( -/obj/machinery/atmospherics/pipe/simple/visible/red{ - dir = 4; - icon_state = "intact" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/techfloor/grid, -/area/engineering/atmos) -"uy" = ( -/obj/machinery/atmospherics/pipe/manifold4w/visible/red, -/turf/simulated/floor/tiled/techfloor/grid, -/area/engineering/atmos) -"uz" = ( -/obj/structure/table/rack, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/item/device/radio/intercom{ - dir = 8; - pixel_x = 21 - }, -/obj/item/stock_parts/circuitboard/teleporter, -/obj/item/stock_parts/circuitboard/protolathe, -/obj/item/stock_parts/circuitboard/destructive_analyzer, -/obj/item/stock_parts/circuitboard/rdconsole, -/turf/simulated/floor/tiled/techfloor/grid, -/area/storage/tech) -"uA" = ( -/obj/structure/catwalk, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/plating, -/area/engineering/shieldbay) -"uD" = ( -/obj/machinery/atmospherics/pipe/simple/visible/yellow{ - dir = 4 - }, -/obj/machinery/door/firedoor, -/obj/effect/wallframe_spawn/reinforced_phoron, -/obj/machinery/meter, -/turf/simulated/floor/plating, -/area/engineering/atmos) -"uE" = ( -/obj/machinery/atmospherics/unary/vent_pump/tank{ - dir = 8; - external_pressure_bound = 0; - external_pressure_bound_default = 0; - icon_state = "map_vent_in"; - id_tag = "co2_out"; - initialize_directions = 1; - internal_pressure_bound = 4000; - internal_pressure_bound_default = 4000; - pressure_checks = 2; - pressure_checks_default = 2; - pump_direction = 0; - use_power = 1 - }, -/obj/machinery/air_sensor{ - id_tag = "co2_sensor" - }, -/turf/simulated/floor/reinforced/carbon_dioxide, -/area/engineering/atmos) -"uF" = ( -/obj/machinery/atmospherics/pipe/manifold/visible/green{ - dir = 8; - icon_state = "map" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/techfloor, -/area/engineering/engine_room) -"uG" = ( -/obj/machinery/atmospherics/valve/digital{ - dir = 4; - icon_state = "map_valve0"; - name = "emergency cooling valve" - }, -/turf/simulated/floor/tiled/techfloor, -/area/engineering/engine_room) -"uH" = ( -/obj/machinery/meter, -/obj/machinery/atmospherics/pipe/manifold4w/visible/green, -/obj/effect/floor_decal/industrial/warning{ - dir = 4; - icon_state = "warning" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/engineering/engine_room) -"uI" = ( -/obj/machinery/atmospherics/unary/heat_exchanger{ - dir = 8 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/engineering/engine_room) -"uJ" = ( -/obj/machinery/atmospherics/unary/heat_exchanger{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/engineering/engine_room) -"uK" = ( -/obj/machinery/atmospherics/pipe/manifold4w/visible/cyan, -/obj/machinery/meter, -/obj/effect/floor_decal/industrial/warning{ - dir = 8; - icon_state = "warning" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/engineering/engine_room) -"uL" = ( -/obj/machinery/shield_diffuser, -/obj/machinery/door/airlock/external/escapepod{ - id_tag = "escape_pod_10_berth_hatch"; - locked = 1; - name = "Escape Pod Five" - }, -/turf/simulated/floor/tiled/steel_ridged, -/area/maintenance/seconddeck/foreport) -"uM" = ( -/obj/machinery/alarm{ - dir = 4; - icon_state = "alarm0"; - pixel_x = -22; - pixel_y = 0 - }, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/seconddeck/foreport) -"uN" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/seconddeck/foreport) -"uQ" = ( -/obj/structure/cable{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/seconddeck/foreport) -"uS" = ( -/obj/machinery/cryopod/robot{ - dir = 4 - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled/techfloor, -/area/engineering/drone_fabrication) -"uT" = ( -/obj/machinery/door/blast/regular/open{ - begins_closed = 1; - dir = 4; - id_tag = "WasteGate"; - name = "Waste Gate" - }, -/turf/simulated/floor/reinforced/airless, -/area/engineering/wastetank) -"uY" = ( -/obj/effect/floor_decal/corner/yellow/half, -/obj/effect/floor_decal/industrial/warning, -/turf/simulated/floor/tiled, -/area/engineering/foyer) -"uZ" = ( -/obj/machinery/shield_diffuser, -/turf/simulated/floor/reinforced/airless, -/area/space) -"vb" = ( -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/recharge_station, -/turf/simulated/floor/tiled/techfloor, -/area/engineering/drone_fabrication) -"vc" = ( -/obj/effect/catwalk_plated, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/plating, -/area/engineering/engineering_bay) -"ve" = ( -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/obj/effect/catwalk_plated, -/obj/machinery/atmospherics/pipe/simple/hidden/cyan, -/turf/simulated/floor/plating, -/area/engineering/atmos) -"vf" = ( -/obj/machinery/atmospherics/pipe/simple/visible/universal{ - dir = 4 - }, -/obj/machinery/meter, -/turf/simulated/floor/tiled/techfloor, -/area/engineering/atmos) -"vg" = ( -/obj/machinery/atmospherics/binary/pump/on{ - dir = 8; - name = "Air to Supply" - }, -/turf/simulated/floor/tiled/techfloor, -/area/engineering/atmos) -"vh" = ( -/obj/machinery/atmospherics/pipe/simple/visible/cyan{ - dir = 4; - icon_state = "intact" - }, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 1 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/engineering/atmos) -"vi" = ( -/obj/machinery/firealarm{ - dir = 1; - pixel_x = 0; - pixel_y = -24 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8"; - pixel_x = 0 - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 4 - }, -/turf/simulated/floor/tiled/monotile, -/area/vacant/prototype/control) -"vj" = ( -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/power/sensor{ - name = "R-UST Power Generation - Powernet Sensor"; - name_tag = "R-UST Power Generation" - }, -/obj/structure/cable/yellow{ - d2 = 8; - icon_state = "0-8" - }, -/turf/simulated/floor/plating, -/area/vacant/prototype/engine) -"vk" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/door/airlock/engineering{ - name = "Fusion Testing Facility"; - secured_wires = 1 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/door/firedoor, -/turf/simulated/floor/tiled/steel_ridged, -/area/vacant/prototype/control) -"vl" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/seconddeck/aftport) -"vm" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/visible/yellow{ - dir = 10 - }, -/obj/machinery/alarm{ - pixel_y = 24 - }, -/turf/simulated/floor/tiled/techfloor, -/area/engineering/atmos) -"vn" = ( -/obj/machinery/computer/air_control{ - dir = 8; - frequency = 1441; - icon_state = "computer"; - input_tag = "co2_in"; - name = "Carbon Dioxide Supply Control"; - output_tag = "co2_out"; - sensor_name = "Carbon Dioxide Supply"; - sensor_tag = "co2_sensor" - }, -/obj/machinery/atmospherics/pipe/simple/visible/green{ - dir = 4; - icon_state = "intact" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/black{ - dir = 2; - icon_state = "intact" - }, -/obj/effect/floor_decal/corner/black{ - dir = 6; - icon_state = "corner_white" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/engineering/atmos) -"vp" = ( -/obj/machinery/atmospherics/pipe/simple/visible/green, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/turf/simulated/floor/tiled/techfloor, -/area/engineering/engine_room) -"vq" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 8 - }, -/turf/simulated/floor/tiled/techfloor, -/area/engineering/engine_room) -"vr" = ( -/obj/machinery/atmospherics/pipe/manifold/visible/green{ - dir = 8; - icon_state = "map" - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 4; - icon_state = "warning" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/engineering/engine_room) -"vs" = ( -/obj/machinery/atmospherics/pipe/manifold4w/visible/cyan, -/obj/effect/floor_decal/industrial/warning{ - dir = 8; - icon_state = "warning" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/engineering/engine_room) -"vt" = ( -/turf/simulated/wall/r_titanium, -/area/shuttle/escape_pod10/station) -"vv" = ( -/obj/machinery/door/airlock/external{ - frequency = 1380; - icon_state = "closed"; - id_tag = "escape_pod_10_hatch"; - locked = 1; - name = "Escape Pod Five Hatch" - }, -/turf/simulated/floor/tiled/steel_ridged, -/area/shuttle/escape_pod10/station) -"vy" = ( -/obj/machinery/door/blast/regular{ - dir = 8; - id_tag = "bsd"; - name = "Drive Containment" - }, -/turf/simulated/floor/bluegrid, -/area/engineering/bluespace) -"vz" = ( -/obj/structure/ladder, -/obj/effect/floor_decal/industrial/hatch/yellow, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/seconddeck/foreport) -"vA" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 8 - }, -/obj/machinery/alarm{ - dir = 1; - pixel_y = -22 - }, -/turf/simulated/floor/tiled/techfloor, -/area/engineering/drone_fabrication) -"vB" = ( -/obj/machinery/disposal, -/obj/effect/floor_decal/industrial/hatch/yellow, -/obj/structure/disposalpipe/trunk{ - dir = 1 - }, -/turf/simulated/floor/tiled/techfloor, -/area/engineering/drone_fabrication) -"vC" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 4 - }, -/obj/machinery/light/small, -/obj/machinery/firealarm{ - dir = 1; - pixel_x = 0; - pixel_y = -24 - }, -/turf/simulated/floor/tiled/techfloor, -/area/engineering/drone_fabrication) -"vD" = ( -/obj/machinery/door/firedoor, -/obj/effect/wallframe_spawn/reinforced_phoron, -/obj/machinery/meter, -/obj/machinery/atmospherics/pipe/manifold/visible/yellow{ - dir = 1; - icon_state = "map" - }, -/turf/simulated/floor/plating, -/area/engineering/atmos) -"vF" = ( -/obj/structure/cable/cyan{ - d2 = 4; - icon_state = "0-4" - }, -/obj/machinery/power/apc{ - dir = 2; - name = "south bump"; - pixel_y = -24 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/engineering/bluespace) -"vH" = ( -/obj/structure/cable/green{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/seconddeck/forestarboard) -"vJ" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/engineering{ - name = "Tech Storage" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/effect/floor_decal/techfloor{ - dir = 1; - icon_state = "techfloor_edges" - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/storage/tech) -"vN" = ( -/obj/effect/catwalk_plated, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/plating, -/area/engineering/engineering_bay) -"vO" = ( -/turf/simulated/floor/plating, -/area/assembly/robotics) -"vR" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/seconddeck/forestarboard) -"vS" = ( -/turf/simulated/floor/tiled/dark, -/area/teleporter/seconddeck) -"vU" = ( -/obj/structure/disposalpipe/segment, -/obj/machinery/door/window/brigdoor/northleft{ - dir = 2 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/cyan{ - dir = 5; - icon_state = "intact" - }, -/obj/machinery/meter, -/turf/simulated/floor/tiled/techfloor, -/area/engineering/atmos) -"vV" = ( -/obj/structure/window/reinforced, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/pipedispenser/disposal, -/obj/machinery/atmospherics/pipe/simple/hidden/cyan{ - dir = 4; - icon_state = "intact" - }, -/obj/effect/catwalk_plated, -/turf/simulated/floor/plating, -/area/engineering/atmos) -"vX" = ( -/obj/machinery/atmospherics/binary/pump{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor, -/area/engineering/atmos) -"wb" = ( -/obj/structure/sign/solgov{ - pixel_x = 32; - pixel_y = -32 - }, -/turf/space, -/area/space) -"wc" = ( -/obj/machinery/atmospherics/binary/pump{ - dir = 4 - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled/techfloor/grid, -/area/engineering/atmos) -"wd" = ( -/obj/machinery/alarm{ - pixel_y = 24 - }, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 4 - }, -/obj/effect/floor_decal/industrial/outline/blue, -/obj/machinery/portable_atmospherics/canister/carbon_dioxide, -/turf/simulated/floor/tiled/techfloor/grid, -/area/engineering/engine_room) -"we" = ( -/obj/machinery/atmospherics/pipe/simple/visible/green, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/obj/machinery/light{ - dir = 8 - }, -/turf/simulated/floor/tiled/techfloor, -/area/engineering/engine_room) -"wf" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 8 - }, -/turf/simulated/floor/tiled/techfloor, -/area/engineering/engine_room) -"wg" = ( -/obj/machinery/atmospherics/pipe/simple/visible/green{ - dir = 5 - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 4; - icon_state = "warning" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/engineering/engine_room) -"wi" = ( -/obj/machinery/light/small{ - dir = 1 - }, -/obj/structure/bed/chair/shuttle, -/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{ - dir = 2; - id_tag = "escape_pod_10_pump" - }, -/turf/simulated/floor/tiled/monotile, -/area/shuttle/escape_pod10/station) -"wj" = ( -/obj/machinery/status_display{ - pixel_y = 32 - }, -/obj/structure/bed/chair/shuttle, -/turf/simulated/floor/tiled/monotile, -/area/shuttle/escape_pod10/station) -"wk" = ( -/obj/structure/bed/chair/shuttle, -/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{ - dir = 2; - id_tag = "escape_pod_10_pump" - }, -/turf/simulated/floor/tiled/monotile, -/area/shuttle/escape_pod10/station) -"wl" = ( -/turf/simulated/floor/tiled/monotile, -/area/shuttle/escape_pod10/station) -"wm" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 8 - }, -/obj/structure/table/standard{ - name = "plastic table frame" - }, -/obj/machinery/light/small{ - dir = 1 - }, -/obj/random/firstaid, -/turf/simulated/floor/tiled/white/monotile, -/area/shuttle/escape_pod10/station) -"wn" = ( -/obj/machinery/sleeper, -/obj/machinery/vending/wallmed1{ - name = "Emergency NanoMed"; - pixel_x = 0; - pixel_y = 32 - }, -/turf/simulated/floor/tiled/white/monotile, -/area/shuttle/escape_pod10/station) -"wo" = ( -/obj/structure/shuttle/engine/heater{ - dir = 4; - icon_state = "heater" - }, -/obj/structure/window/reinforced{ - dir = 8 - }, -/turf/simulated/floor/plating, -/area/shuttle/escape_pod10/station) -"wp" = ( -/obj/structure/shuttle/engine/propulsion{ - dir = 4 - }, -/turf/simulated/wall/r_titanium, -/area/shuttle/escape_pod10/station) -"wq" = ( -/obj/machinery/space_heater, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/seconddeck/foreport) -"wu" = ( -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/portable_atmospherics/canister/helium{ - start_pressure = 14999 - }, -/turf/simulated/floor/plating, -/area/vacant/prototype/engine) -"ww" = ( -/obj/structure/table/rack{ - dir = 8 - }, -/obj/random/maintenance/solgov, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/seconddeck/foreport) -"wx" = ( -/obj/structure/railing/mapped{ - dir = 8; - icon_state = "railing0-1" - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/plating, -/area/maintenance/seconddeck/forestarboard) -"wz" = ( -/obj/machinery/portable_atmospherics/canister/nitrogen, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/floor/plating, -/area/engineering/atmos/storage) -"wA" = ( -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/structure/reagent_dispensers/fueltank, -/obj/structure/sign/warning/nosmoking_1{ - dir = 4; - icon_state = "nosmoking"; - pixel_x = -32 - }, -/turf/simulated/floor/tiled, -/area/engineering/engineering_bay) -"wC" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 1; - icon_state = "warning" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/engineering/shieldbay) -"wG" = ( -/obj/structure/catwalk, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/obj/structure/cable{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/turf/simulated/floor/plating, -/area/maintenance/seconddeck/central) -"wH" = ( -/obj/structure/cable{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/structure/cable{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/structure/catwalk, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/maintenance/seconddeck/aftstarboard) -"wK" = ( -/obj/effect/floor_decal/techfloor{ - dir = 1; - icon_state = "techfloor_edges" - }, -/obj/effect/floor_decal/techfloor{ - dir = 9; - icon_state = "techfloor_edges" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/engineering/engineering_bay) -"wL" = ( -/obj/random/junk, -/obj/structure/disposalpipe/segment{ - dir = 2; - icon_state = "pipe-c" - }, -/obj/structure/catwalk, -/obj/structure/cable/green{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/turf/simulated/floor/plating, -/area/maintenance/seconddeck/aftport) -"wM" = ( -/obj/machinery/atmospherics/pipe/simple/visible/fuel{ - dir = 4 - }, -/obj/structure/catwalk, -/obj/structure/sign/warning/secure_area{ - pixel_y = 24 - }, -/turf/simulated/floor/plating, -/area/maintenance/seconddeck/aftport) -"wN" = ( -/obj/machinery/atmospherics/pipe/simple/visible/green{ - dir = 4; - icon_state = "intact" - }, -/obj/structure/disposalpipe/segment, -/obj/effect/floor_decal/industrial/warning{ - dir = 8; - icon_state = "warning" - }, -/obj/machinery/meter, -/turf/simulated/floor/tiled/techfloor, -/area/engineering/atmos) -"wP" = ( -/obj/structure/dispenser, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled/techfloor, -/area/engineering/atmos) -"wQ" = ( -/obj/structure/window/reinforced{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/visible/red{ - dir = 4; - icon_state = "intact" - }, -/obj/machinery/meter, -/turf/simulated/floor/tiled/techfloor/grid, -/area/engineering/atmos) -"wR" = ( -/obj/structure/reagent_dispensers/fueltank, -/turf/simulated/floor/wood/walnut, -/area/vacant/chapel) -"wS" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 8 - }, -/obj/machinery/atmospherics/portables_connector{ - dir = 1 - }, -/turf/simulated/floor/plating, -/area/vacant/prototype/engine) -"wT" = ( -/obj/structure/cable/green{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/effect/floor_decal/corner/yellow{ - dir = 6 - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 1; - icon_state = "warning" - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/seconddeck/fore) -"wU" = ( -/turf/simulated/wall/r_wall/hull, -/area/maintenance/seconddeck/aftport) -"wV" = ( -/obj/structure/catwalk, -/obj/machinery/alarm{ - dir = 4; - pixel_x = -23 - }, -/turf/simulated/floor/plating, -/area/engineering/shieldbay) -"wW" = ( -/obj/machinery/atmospherics/pipe/manifold/visible/green{ - dir = 8; - icon_state = "map" - }, -/obj/item/device/radio/intercom{ - dir = 4; - pixel_x = -21 - }, -/turf/simulated/floor/tiled/techfloor, -/area/engineering/engine_room) -"wX" = ( -/obj/machinery/atmospherics/portables_connector{ - dir = 4 - }, -/obj/machinery/portable_atmospherics/powered/pump/filled, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled/techfloor, -/area/engineering/atmos) -"wY" = ( -/obj/machinery/atmospherics/pipe/manifold/visible/black{ - dir = 1; - icon_state = "map" - }, -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/engineering/engine_room) -"wZ" = ( -/obj/machinery/atmospherics/binary/pump{ - dir = 8 - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 1 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/engineering/engine_room) -"xa" = ( -/obj/machinery/atmospherics/pipe/manifold/visible/cyan{ - dir = 1 - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 1 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/engineering/engine_room) -"xb" = ( -/obj/machinery/atmospherics/pipe/manifold4w/visible/cyan, -/obj/machinery/button/blast_door{ - desc = "A remote control-switch for the engine radiator viewport shutters."; - id_tag = "EngineRadiatorViewport"; - name = "Engine Radiator Viewport Shutters"; - pixel_x = 25; - pixel_y = 0 - }, -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 1; - icon_state = "warningcorner" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/engineering/engine_room) -"xc" = ( -/obj/machinery/atmospherics/portables_connector{ - dir = 8 - }, -/obj/effect/floor_decal/industrial/hatch/yellow, -/turf/simulated/floor/tiled/techfloor/grid, -/area/engineering/atmos) -"xe" = ( -/obj/machinery/cryopod{ - dir = 2 - }, -/obj/machinery/computer/cryopod{ - pixel_y = 32 - }, -/turf/simulated/floor/tiled/monotile, -/area/shuttle/escape_pod11/station) -"xf" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 4 - }, -/turf/simulated/floor/tiled/white/monotile, -/area/shuttle/escape_pod10/station) -"xg" = ( -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 10; - icon_state = "intact" - }, -/turf/simulated/floor/tiled/white/monotile, -/area/shuttle/escape_pod10/station) -"xh" = ( -/obj/machinery/portable_atmospherics/powered/scrubber, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/seconddeck/foreport) -"xi" = ( -/obj/random/tool, -/turf/simulated/floor/plating, -/area/maintenance/seconddeck/foreport) -"xj" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 1 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/seconddeck) -"xl" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/visible/yellow{ - dir = 5; - icon_state = "intact" - }, -/turf/simulated/floor/tiled/techfloor, -/area/engineering/atmos) -"xp" = ( -/obj/random/junk, -/obj/structure/cable{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/seconddeck/foreport) -"xr" = ( -/obj/structure/cable/green{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/turf/simulated/floor/plating, -/area/maintenance/seconddeck/forestarboard) -"xs" = ( -/obj/structure/sign/warning/deathsposal{ - icon_state = "space" - }, -/turf/simulated/wall/r_wall/hull, -/area/maintenance/disposal) -"xu" = ( -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/power/breakerbox/activated{ - RCon_tag = "Shield Substation Bypass" - }, -/turf/simulated/floor/plating, -/area/engineering/shieldbay) -"xv" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 8 - }, -/turf/simulated/floor/tiled, -/area/engineering/engineering_bay) -"xw" = ( -/obj/effect/wingrille_spawn/reinforced_phoron/full, -/obj/machinery/door/blast/regular/open{ - dir = 4; - icon_state = "pdoor0"; - id_tag = "prototype_chamber_blast" - }, -/turf/simulated/floor/reinforced/airless, -/area/vacant/prototype/engine) -"xy" = ( -/obj/machinery/light, -/obj/structure/catwalk, -/obj/structure/extinguisher_cabinet{ - pixel_x = 0; - pixel_y = -32 - }, -/turf/simulated/floor/plating, -/area/engineering/engine_smes) -"xB" = ( -/obj/machinery/atmospherics/pipe/simple/visible/green{ - dir = 6; - icon_state = "intact" - }, -/turf/simulated/floor/tiled/techfloor, -/area/engineering/engine_room) -"xC" = ( -/turf/simulated/floor/tiled/techfloor/grid, -/area/teleporter/seconddeck) -"xD" = ( -/turf/simulated/floor/reinforced/nitrogen, -/area/engineering/atmos) -"xE" = ( -/obj/machinery/atmospherics/unary/outlet_injector{ - dir = 4; - frequency = 1441; - icon_state = "map_injector"; - id = "n2_in"; - use_power = 1 - }, -/turf/simulated/floor/reinforced/nitrogen, -/area/engineering/atmos) -"xG" = ( -/obj/structure/sign/warning/compressed_gas{ - dir = 1; - icon_state = "hikpa" - }, -/turf/simulated/wall/r_wall/prepainted, -/area/engineering/atmos) -"xI" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/structure/closet/secure_closet/medical_torch, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled/techfloor, -/area/storage/medical) -"xK" = ( -/obj/machinery/atmospherics/pipe/simple/visible/green{ - dir = 6; - icon_state = "intact" - }, -/obj/structure/disposalpipe/segment, -/obj/effect/floor_decal/industrial/warning{ - dir = 8; - icon_state = "warning" - }, -/obj/machinery/meter, -/turf/simulated/floor/tiled/techfloor, -/area/engineering/atmos) -"xL" = ( -/obj/machinery/atmospherics/pipe/manifold4w/visible/cyan, -/turf/simulated/floor/tiled/techfloor/grid, -/area/engineering/atmos) -"xO" = ( -/obj/machinery/vending/engineering, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/item/device/radio/intercom{ - pixel_y = 23 - }, -/obj/machinery/light{ - dir = 1 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/engineering/engineering_bay) -"xP" = ( -/obj/machinery/meter, -/obj/machinery/atmospherics/pipe/manifold4w/visible/cyan, -/turf/simulated/floor/tiled/techfloor/grid, -/area/engineering/atmos) -"xQ" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 8; - icon_state = "warning" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/dark, -/area/assembly/chargebay) -"xR" = ( -/turf/simulated/floor/tiled/techfloor, -/area/hallway/primary/seconddeck/fore) -"xS" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/unary/vent_pump/on, -/turf/simulated/floor/tiled, -/area/hallway/primary/seconddeck/fore) -"xT" = ( -/obj/machinery/atmospherics/pipe/manifold/visible/cyan, -/turf/simulated/floor/tiled/techfloor, -/area/engineering/engine_room) -"xW" = ( -/obj/machinery/light/small, -/obj/structure/bed/chair/shuttle{ - dir = 1; - icon_state = "shuttle_chair_preview" - }, -/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{ - dir = 1; - id_tag = "escape_pod_10_pump" - }, -/turf/simulated/floor/tiled/monotile, -/area/shuttle/escape_pod10/station) -"xX" = ( -/obj/structure/bed/chair/shuttle{ - dir = 1; - icon_state = "shuttle_chair_preview" - }, -/turf/simulated/floor/tiled/monotile, -/area/shuttle/escape_pod10/station) -"xY" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 8 - }, -/obj/machinery/light/small, -/turf/simulated/floor/tiled/white/monotile, -/area/shuttle/escape_pod10/station) -"xZ" = ( -/obj/machinery/atmospherics/unary/tank/air{ - dir = 1 - }, -/turf/simulated/floor/tiled/white/monotile, -/area/shuttle/escape_pod10/station) -"ya" = ( -/obj/random/torchcloset, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/seconddeck/foreport) -"yf" = ( -/turf/simulated/wall/prepainted, -/area/vacant/prototype/control) -"yg" = ( -/turf/simulated/wall/prepainted, -/area/maintenance/incinerator) -"yh" = ( -/obj/machinery/alarm{ - dir = 4; - icon_state = "alarm0"; - pixel_x = -22; - pixel_y = 0 - }, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/seconddeck/foreport) -"yi" = ( -/obj/random/obstruction, -/turf/simulated/floor/plating, -/area/maintenance/seconddeck/foreport) -"yj" = ( -/obj/machinery/conveyor{ - dir = 2; - id = "garbage2" - }, -/obj/random/junk, -/obj/machinery/door/blast/regular{ - density = 0; - icon_state = "pdoor0"; - id_tag = "RubbishOuter"; - name = "Disposal Maintenance"; - opacity = 1 - }, -/turf/simulated/floor/plating, -/area/maintenance/disposal) -"yk" = ( -/obj/structure/table/standard{ - name = "plastic table frame" - }, -/obj/random/technology_scanner, -/obj/random/technology_scanner, -/obj/random/bomb_supply, -/obj/random/bomb_supply, -/turf/simulated/floor/tiled/techfloor/grid, -/area/storage/tech) -"yl" = ( -/obj/machinery/portable_atmospherics/canister/sleeping_agent, -/obj/effect/floor_decal/industrial/outline/grey, -/obj/structure/railing/mapped{ - dir = 1; - icon_state = "railing0-1" - }, -/turf/simulated/floor/plating, -/area/engineering/atmos/storage) -"yo" = ( -/turf/simulated/floor/bluegrid, -/area/engineering/bluespace) -"yp" = ( -/obj/machinery/door/airlock/maintenance{ - name = "Medical Storage Maintenance" - }, -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/storage/medical) -"yq" = ( -/obj/structure/table/rack, -/obj/random/maintenance/solgov, -/obj/effect/floor_decal/industrial/outline/grey, -/obj/random/maintenance/solgov, -/obj/random/maintenance/solgov, -/obj/random/maintenance/solgov, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/seconddeck/foreport) -"yr" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 4; - icon_state = "warning" - }, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/engineering/shieldbay) -"yt" = ( -/obj/structure/catwalk, -/obj/machinery/atmospherics/pipe/simple/visible/black{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/maintenance/seconddeck/aftport) -"yv" = ( -/obj/structure/table/steel, -/obj/random/tank, -/obj/machinery/light, -/obj/effect/floor_decal/corner/yellow/half, -/turf/simulated/floor/tiled/monotile, -/area/engineering/storage) -"yx" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8"; - pixel_x = 0 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/hallway/primary/seconddeck/fore) -"yy" = ( -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/power/smes/buildable/preset/torch/substation_full{ - RCon_tag = "Substation - Shield" - }, -/obj/structure/cable/cyan, -/obj/structure/cable/cyan{ - d2 = 2; - icon_state = "0-2" - }, -/obj/machinery/light{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/engineering/shieldbay) -"yz" = ( -/obj/structure/sign/warning/compressed_gas{ - dir = 4; - icon_state = "hikpa" - }, -/turf/simulated/wall/r_wall/prepainted, -/area/engineering/atmos) -"yA" = ( -/obj/machinery/atmospherics/omni/mixer{ - active_power_usage = 7500; - tag_east = 2; - tag_east_con = null; - tag_north = 1; - tag_north_con = 0.79; - tag_south = 1; - tag_south_con = 0.21; - tag_west = 0; - tag_west_con = null; - use_power = 1 - }, -/obj/machinery/light/spot{ - dir = 8 - }, -/obj/effect/floor_decal/corner/red{ - dir = 9; - icon_state = "corner_white" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/engineering/atmos) -"yB" = ( -/obj/machinery/atmospherics/pipe/simple/visible/cyan{ - dir = 4; - icon_state = "intact" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/engineering/atmos) -"yE" = ( -/obj/machinery/atmospherics/pipe/simple/visible/green, -/obj/machinery/atmospherics/pipe/simple/visible/cyan{ - dir = 4; - icon_state = "intact" - }, -/obj/effect/floor_decal/techfloor{ - dir = 9; - icon_state = "techfloor_edges" - }, -/obj/effect/floor_decal/industrial/warning/corner, -/turf/simulated/floor/tiled/techfloor/grid, -/area/engineering/atmos) -"yF" = ( -/obj/machinery/atmospherics/pipe/simple/visible/cyan{ - dir = 4; - icon_state = "intact" - }, -/obj/effect/floor_decal/techfloor{ - dir = 1; - icon_state = "techfloor_edges" - }, -/obj/effect/floor_decal/industrial/warning, -/turf/simulated/floor/tiled/techfloor/grid, -/area/engineering/atmos) -"yG" = ( -/obj/machinery/atmospherics/pipe/manifold/visible/cyan{ - dir = 1 - }, -/obj/effect/floor_decal/techfloor{ - dir = 1; - icon_state = "techfloor_edges" - }, -/obj/effect/floor_decal/industrial/warning, -/turf/simulated/floor/tiled/techfloor/grid, -/area/engineering/atmos) -"yI" = ( -/obj/structure/railing/mapped, -/obj/effect/floor_decal/industrial/warning, -/turf/simulated/floor/plating, -/area/maintenance/seconddeck/aftstarboard) -"yJ" = ( -/obj/machinery/atmospherics/pipe/simple/visible/cyan{ - dir = 9; - icon_state = "intact" - }, -/obj/effect/floor_decal/techfloor{ - dir = 1; - icon_state = "techfloor_edges" - }, -/obj/effect/floor_decal/industrial/warning, -/turf/simulated/floor/tiled/techfloor/grid, -/area/engineering/atmos) -"yK" = ( -/obj/machinery/portable_atmospherics/powered/scrubber, -/obj/machinery/atmospherics/portables_connector, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled/techfloor, -/area/engineering/atmos) -"yM" = ( -/obj/machinery/atmospherics/pipe/manifold/visible{ - dir = 8; - icon_state = "map" - }, -/turf/simulated/floor/tiled/techfloor, -/area/engineering/atmos) -"yN" = ( -/obj/machinery/atmospherics/unary/outlet_injector{ - dir = 8; - frequency = 1441; - icon_state = "map_injector"; - id = "n2o_in"; - pixel_y = 0; - use_power = 1 - }, -/turf/simulated/floor/reinforced/n20, -/area/engineering/atmos) -"yO" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/door/airlock, -/turf/simulated/floor/tiled/steel_ridged, -/area/hallway/primary/seconddeck/elevator) -"yQ" = ( -/obj/machinery/atmospherics/binary/pump{ - dir = 1 - }, -/turf/simulated/wall/ocp_wall, -/area/vacant/prototype/engine) -"yR" = ( -/turf/simulated/floor/tiled/techfloor/grid, -/area/engineering/engine_room) -"yT" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8"; - pixel_x = 0 - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 4 - }, -/turf/simulated/floor/tiled/monotile, -/area/engineering/engineering_bay) -"yU" = ( -/obj/machinery/atmospherics/unary/tank/oxygen{ - dir = 2; - volume = 3200 - }, -/obj/effect/floor_decal/industrial/outline/blue, -/turf/simulated/floor/plating, -/area/maintenance/incinerator) -"yV" = ( -/obj/machinery/atmospherics/portables_connector, -/obj/effect/floor_decal/industrial/outline/blue, -/turf/simulated/floor/plating, -/area/maintenance/incinerator) -"yW" = ( -/obj/machinery/light/small{ - dir = 1 - }, -/obj/structure/extinguisher_cabinet{ - pixel_y = 32 - }, -/turf/simulated/floor/plating, -/area/maintenance/incinerator) -"yX" = ( -/obj/machinery/atmospherics/portables_connector, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/plating, -/area/maintenance/incinerator) -"yY" = ( -/obj/machinery/power/apc{ - dir = 1; - name = "north bump"; - pixel_x = 0; - pixel_y = 24 - }, -/obj/structure/cable/green{ - d2 = 2; - icon_state = "0-2" - }, -/obj/structure/sign/warning/nosmoking_1{ - dir = 8; - icon_state = "nosmoking"; - pixel_x = 32 - }, -/turf/simulated/floor/plating, -/area/maintenance/incinerator) -"yZ" = ( -/obj/machinery/door/blast/regular{ - id_tag = "engineroomvent"; - name = "Engine room vent" - }, -/obj/effect/floor_decal/industrial/hatch/yellow, -/turf/simulated/floor/airless, -/area/engineering/engine_room) -"zb" = ( -/obj/machinery/portable_atmospherics/canister/carbon_dioxide, -/obj/effect/floor_decal/industrial/outline/grey, -/obj/structure/railing/mapped{ - dir = 1; - icon_state = "railing0-1" - }, -/turf/simulated/floor/plating, -/area/engineering/atmos/storage) -"zc" = ( -/obj/effect/floor_decal/techfloor{ - dir = 1 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/engineering/engineering_bay) -"zd" = ( -/obj/item/stock_parts/subspace/treatment, -/obj/item/stock_parts/subspace/analyzer, -/obj/item/stock_parts/subspace/amplifier, -/obj/item/stock_parts/subspace/ansible, -/obj/item/stock_parts/subspace/crystal, -/obj/item/stock_parts/subspace/filter, -/obj/item/stock_parts/subspace/transmitter, -/obj/structure/table/rack, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/light/small{ - dir = 8 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/storage/tech) -"ze" = ( -/obj/machinery/alarm{ - dir = 8; - icon_state = "alarm0"; - pixel_x = 24 - }, -/obj/effect/floor_decal/industrial/outline/grey, -/obj/machinery/portable_atmospherics/canister/air, -/obj/structure/railing/mapped{ - dir = 1; - icon_state = "railing0-1" - }, -/turf/simulated/floor/plating, -/area/engineering/atmos/storage) -"zf" = ( -/obj/machinery/atmospherics/binary/pump{ - dir = 1 - }, -/turf/simulated/floor/tiled/techfloor, -/area/engineering/atmos) -"zh" = ( -/obj/item/stock_parts/circuitboard/telecomms/processor, -/obj/item/stock_parts/circuitboard/telecomms/receiver, -/obj/item/stock_parts/circuitboard/telecomms/server, -/obj/item/stock_parts/circuitboard/telecomms/bus, -/obj/item/stock_parts/circuitboard/telecomms/broadcaster, -/obj/structure/table/rack, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled/techfloor/grid, -/area/storage/tech) -"zi" = ( -/obj/machinery/button/crematorium{ - pixel_y = -24 - }, -/obj/item/device/radio/intercom{ - dir = 4; - pixel_x = -21 - }, -/turf/simulated/floor/tiled/dark, -/area/medical/morgue) -"zl" = ( -/obj/machinery/atmospherics/pipe/simple/visible/green{ - dir = 4; - icon_state = "intact" - }, -/obj/machinery/computer/air_control{ - dir = 4; - frequency = 1441; - input_tag = "o2_in"; - name = "Oxygen Supply Control"; - output_tag = "o2_out"; - sensor_name = "Oxygen Supply"; - sensor_tag = "o2_sensor" - }, -/obj/machinery/atmospherics/pipe/simple/visible/yellow, -/obj/effect/floor_decal/corner/blue{ - dir = 9; - icon_state = "corner_white" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/engineering/atmos) -"zr" = ( -/obj/machinery/atmospherics/pipe/simple/visible/green, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/effect/floor_decal/techfloor{ - dir = 8; - icon_state = "techfloor_edges" - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/engineering/atmos) -"zs" = ( -/obj/machinery/atmospherics/pipe/simple/visible/green, -/obj/effect/floor_decal/techfloor{ - dir = 5; - icon_state = "techfloor_edges" - }, -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 8 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/engineering/atmos) -"zt" = ( -/obj/machinery/atmospherics/pipe/simple/visible, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor, -/area/engineering/atmos) -"zv" = ( -/obj/machinery/atmospherics/portables_connector{ - dir = 4 - }, -/obj/effect/floor_decal/industrial/hatch/yellow, -/turf/simulated/floor/tiled/techfloor/grid, -/area/engineering/atmos) -"zw" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/seconddeck/forestarboard) -"zx" = ( -/obj/machinery/atmospherics/unary/vent_pump/tank{ - dir = 8; - external_pressure_bound = 0; - external_pressure_bound_default = 0; - icon_state = "map_vent_in"; - id_tag = "n2o_out"; - initialize_directions = 1; - internal_pressure_bound = 4000; - internal_pressure_bound_default = 4000; - pressure_checks = 2; - pressure_checks_default = 2; - pump_direction = 0; - use_power = 1 - }, -/obj/machinery/air_sensor{ - id_tag = "n2o_sensor" - }, -/turf/simulated/floor/reinforced/n20, -/area/engineering/atmos) -"zA" = ( -/obj/structure/closet, -/obj/random/single/cola, -/turf/simulated/floor/plating, -/area/maintenance/seconddeck/foreport) -"zB" = ( -/obj/structure/filingcabinet, -/turf/simulated/floor/plating, -/area/maintenance/seconddeck/foreport) -"zC" = ( -/obj/machinery/shieldwallgen, -/turf/simulated/floor/plating, -/area/maintenance/seconddeck/foreport) -"zD" = ( -/obj/machinery/atmospherics/pipe/simple/visible{ - dir = 5; - icon_state = "intact" - }, -/obj/machinery/alarm{ - dir = 4; - icon_state = "alarm0"; - pixel_x = -22; - pixel_y = 0 - }, -/turf/simulated/floor/plating, -/area/maintenance/incinerator) -"zE" = ( -/obj/machinery/atmospherics/omni/mixer{ - active_power_usage = 7500; - tag_east = 0; - tag_east_con = null; - tag_north = 1; - tag_north_con = 0.5; - tag_south = 2; - tag_south_con = null; - tag_west = 1; - tag_west_con = 0.5; - use_power = 1 - }, -/turf/simulated/floor/plating, -/area/maintenance/incinerator) -"zF" = ( -/obj/machinery/atmospherics/binary/pump, -/turf/simulated/floor/plating, -/area/maintenance/incinerator) -"zG" = ( -/turf/simulated/floor/plating, -/area/maintenance/incinerator) -"zH" = ( -/obj/machinery/atmospherics/binary/pump{ - dir = 1 - }, -/turf/simulated/floor/plating, -/area/maintenance/incinerator) -"zI" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/turf/simulated/floor/plating, -/area/maintenance/incinerator) -"zJ" = ( -/obj/machinery/door/airlock/maintenance{ - name = "Incinerator" - }, -/obj/machinery/door/firedoor, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/maintenance/incinerator) -"zK" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/seconddeck/foreport) -"zL" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/seconddeck/foreport) -"zM" = ( -/obj/structure/cable/green{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/seconddeck/foreport) -"zN" = ( -/obj/machinery/atmospherics/pipe/simple/visible/green, -/obj/effect/floor_decal/techfloor{ - dir = 8; - icon_state = "techfloor_edges" - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/engineering/atmos) -"zO" = ( -/turf/simulated/wall/prepainted, -/area/engineering/atmos/storage) -"zP" = ( -/obj/structure/railing/mapped{ - dir = 8; - icon_state = "railing0-1" - }, -/obj/structure/railing/mapped{ - dir = 1; - icon_state = "railing0-1" - }, -/turf/simulated/open, -/area/maintenance/seconddeck/aftstarboard) -"zT" = ( -/obj/structure/disposalpipe/segment{ - dir = 2; - icon_state = "pipe-c" - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/seconddeck/aftport) -"zV" = ( -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/seconddeck/aftport) -"zZ" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 8 - }, -/obj/effect/floor_decal/techfloor, -/obj/effect/floor_decal/industrial/warning, -/turf/simulated/floor/tiled/dark, -/area/teleporter/seconddeck) -"Ab" = ( -/obj/machinery/atmospherics/portables_connector{ - dir = 4 - }, -/obj/item/device/radio/intercom{ - dir = 4; - pixel_x = -21 - }, -/obj/effect/floor_decal/corner/yellow/mono, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/portable_atmospherics/powered/scrubber, -/turf/simulated/floor/tiled/monotile, -/area/engineering/storage) -"Ac" = ( -/obj/machinery/atmospherics/pipe/simple/visible/green{ - dir = 4; - icon_state = "intact" - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 4 - }, -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/turf/simulated/floor/tiled/techfloor/grid, -/area/engineering/atmos) -"Ad" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 1 - }, -/obj/machinery/atmospherics/binary/pump/on{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark, -/area/engineering/storage) -"Af" = ( -/obj/structure/disposalpipe/segment, -/obj/effect/floor_decal/industrial/warning{ - dir = 8; - icon_state = "warning" - }, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 4; - level = 2 - }, -/turf/simulated/floor/tiled/techfloor, -/area/engineering/atmos) -"Aj" = ( -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/portable_atmospherics/canister/hydrogen{ - start_pressure = 14999 - }, -/turf/simulated/floor/plating, -/area/vacant/prototype/engine) -"Al" = ( -/obj/effect/floor_decal/techfloor{ - dir = 8; - icon_state = "techfloor_edges" - }, -/obj/effect/floor_decal/techfloor{ - dir = 4; - icon_state = "techfloor_edges" - }, -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/turf/simulated/floor/tiled/techfloor/grid, -/area/storage/tech) -"Am" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/structure/disposalpipe/segment{ - dir = 4; - icon_state = "pipe-c" - }, -/obj/effect/floor_decal/industrial/warning, -/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply, -/turf/simulated/floor/tiled, -/area/hallway/primary/seconddeck/elevator) -"An" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/cyan{ - dir = 5; - icon_state = "intact" - }, -/obj/structure/catwalk, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/plating, -/area/maintenance/seconddeck/aftport) -"Ao" = ( -/obj/machinery/computer/air_control{ - dir = 8; - frequency = 1441; - input_tag = "h2_in"; - name = "Hydrogen Supply Control"; - output_tag = "h2_out"; - sensor_name = "Hydrogen Supply"; - sensor_tag = "tox_sensor" - }, -/obj/machinery/atmospherics/pipe/simple/visible/green{ - dir = 4; - icon_state = "intact" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/black{ - dir = 2; - icon_state = "intact" - }, -/obj/effect/floor_decal/corner/orange{ - dir = 6; - icon_state = "corner_white" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/engineering/atmos) -"Aq" = ( -/obj/machinery/atmospherics/pipe/simple/visible/black{ - dir = 4 - }, -/obj/structure/sign/warning/compressed_gas, -/turf/simulated/wall/r_wall/prepainted, -/area/engineering/atmos) -"Ar" = ( -/obj/item/device/radio/intercom/department/medbay{ - pixel_y = 23 - }, -/turf/simulated/floor/tiled/techfloor, -/area/storage/medical) -"As" = ( -/obj/machinery/space_heater, -/obj/machinery/atmospherics/pipe/simple/visible/black{ - dir = 4 - }, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/seconddeck/aftport) -"At" = ( -/obj/machinery/atmospherics/pipe/simple/visible/black{ - dir = 4 - }, -/turf/simulated/wall/r_wall/prepainted, -/area/maintenance/seconddeck/aftport) -"Au" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/bluegrid, -/area/synth/borg_upload) -"Aw" = ( -/obj/structure/reagent_dispensers/fueltank, -/turf/simulated/floor/plating, -/area/maintenance/incinerator) -"Ax" = ( -/obj/machinery/atmospherics/pipe/simple/visible{ - dir = 5; - icon_state = "intact" - }, -/obj/item/device/radio/intercom{ - dir = 1; - pixel_y = -28 - }, -/turf/simulated/floor/plating, -/area/maintenance/incinerator) -"Ay" = ( -/obj/machinery/embedded_controller/radio/airlock/access_controller{ - id_tag = "incinerator_access_control"; - name = "Incinerator Access Console"; - pixel_x = -6; - pixel_y = -26; - tag_exterior_door = "incinerator_airlock_exterior"; - tag_interior_door = "incinerator_airlock_interior" - }, -/obj/machinery/button/ignition{ - id_tag = "Incinerator"; - pixel_x = 6; - pixel_y = -24 - }, -/obj/machinery/meter, -/obj/effect/floor_decal/industrial/warning, -/obj/machinery/atmospherics/pipe/manifold4w/visible, -/turf/simulated/floor/plating, -/area/maintenance/incinerator) -"Az" = ( -/obj/effect/floor_decal/industrial/warning, -/obj/machinery/atmospherics/valve{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/maintenance/incinerator) -"AA" = ( -/obj/machinery/meter, -/obj/machinery/button/blast_door{ - id_tag = "disvent"; - name = "Incinerator Vent Control"; - pixel_x = 0; - pixel_y = -24 - }, -/obj/effect/floor_decal/industrial/warning, -/obj/machinery/atmospherics/pipe/manifold/visible{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/maintenance/incinerator) -"AD" = ( -/obj/machinery/power/apc{ - dir = 2; - name = "south bump"; - pixel_y = -24 - }, -/obj/structure/cable/green, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/seconddeck/foreport) -"AE" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/structure/disposalpipe/segment{ - dir = 4; - icon_state = "pipe-c" - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/seconddeck/foreport) -"AF" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/seconddeck/foreport) -"AG" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/structure/catwalk, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/turf/simulated/floor/plating, -/area/maintenance/seconddeck/foreport) -"AH" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/maintenance, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/maintenance/seconddeck/foreport) -"AI" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/alarm{ - alarm_id = "xenobio4_alarm"; - dir = 2; - icon_state = "alarm0"; - pixel_x = 0; - pixel_y = 24 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/seconddeck/fore) -"AK" = ( -/obj/machinery/door/airlock/engineering{ - name = "Engineering Locker Room" - }, -/obj/machinery/door/firedoor, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/steel_ridged, -/area/engineering/engineering_bay) -"AM" = ( -/obj/random/junk, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/seconddeck/foreport) -"AN" = ( -/turf/simulated/wall/prepainted, -/area/storage/cargo) -"AO" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/maintenance{ - name = "Cargo Storage Maintenance" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/storage/cargo) -"AQ" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/seconddeck/aftstarboard) -"AS" = ( -/obj/structure/window/reinforced{ - dir = 4 - }, -/obj/structure/table/steel, -/obj/item/stack/material/wood/fifty, -/obj/effect/floor_decal/industrial/warning{ - dir = 4; - icon_state = "warning" - }, -/obj/machinery/camera/network/engineering{ - c_tag = "Engineering - Bay" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/engineering/engineering_bay) -"AT" = ( -/obj/structure/disposalpipe/segment, -/obj/machinery/alarm{ - dir = 4; - icon_state = "alarm0"; - pixel_x = -22; - pixel_y = 0 - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 8; - icon_state = "warning" - }, -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/turf/simulated/floor/tiled/techfloor, -/area/engineering/atmos) -"AU" = ( -/obj/structure/closet/crate, -/obj/random/maintenance/solgov, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/seconddeck/aftstarboard) -"Bb" = ( -/obj/structure/closet/crate/med_crate/trauma, -/obj/effect/floor_decal/industrial/outline/grey, -/obj/machinery/light/small{ - dir = 1 - }, -/turf/simulated/floor/tiled/techfloor, -/area/storage/medical) -"Bc" = ( -/turf/simulated/wall/r_wall/prepainted, -/area/maintenance/seconddeck/aftport) -"Be" = ( -/obj/structure/reagent_dispensers/fueltank, -/turf/simulated/floor/plating, -/area/maintenance/seconddeck/foreport) -"Bf" = ( -/obj/structure/reagent_dispensers/watertank, -/turf/simulated/floor/plating, -/area/maintenance/seconddeck/foreport) -"Bh" = ( -/obj/machinery/atmospherics/pipe/simple/hidden, -/turf/simulated/wall/ocp_wall, -/area/maintenance/incinerator) -"Bi" = ( -/obj/machinery/door/airlock/glass{ - autoclose = 0; - frequency = 1379; - heat_proof = 1; - icon_state = "closed"; - id_tag = "incinerator_airlock_interior"; - locked = 1; - name = "Mixing Room Interior Airlock" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/maintenance/incinerator) -"Bk" = ( -/turf/simulated/wall/prepainted, -/area/vacant/cargo) -"Bl" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/mining{ - name = "Quartermaster" - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/steel_ridged, -/area/vacant/cargo) -"Bm" = ( -/turf/simulated/wall/r_wall/prepainted, -/area/vacant/cargo) -"Bq" = ( -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 8 - }, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/seconddeck/foreport) -"Bs" = ( -/turf/simulated/floor/tiled/techfloor, -/area/storage/cargo) -"Bu" = ( -/obj/effect/floor_decal/industrial/warning, -/obj/effect/floor_decal/industrial/warning{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/techfloor, -/area/engineering/drone_fabrication) -"Bw" = ( -/obj/structure/catwalk, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/plating, -/area/maintenance/seconddeck/aftport) -"Bx" = ( -/obj/structure/cable/green{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/catwalk, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/maintenance/seconddeck/aftport) -"BA" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/catwalk, -/obj/machinery/door/airlock/maintenance, -/turf/simulated/floor/plating, -/area/maintenance/seconddeck/aftport) -"BB" = ( -/obj/structure/cable/green{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/structure/catwalk, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/maintenance/seconddeck/aftport) -"BC" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/door/airlock/engineering{ - name = "Auxilary Bays" - }, -/obj/machinery/door/firedoor, -/turf/simulated/floor/tiled/techfloor/grid, -/area/engineering/atmos) -"BD" = ( -/obj/structure/disposalpipe/segment{ - dir = 8; - icon_state = "pipe-c" - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 8; - icon_state = "warning" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/turf/simulated/floor/tiled/techfloor, -/area/engineering/atmos) -"BE" = ( -/obj/machinery/atmospherics/pipe/simple/visible/green{ - dir = 4; - icon_state = "intact" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 1; - icon_state = "warning" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/engineering/atmos) -"BG" = ( -/obj/structure/table/rack, -/obj/random/tech_supply, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/seconddeck/aftport) -"BH" = ( -/obj/random/tool, -/turf/simulated/floor/plating, -/area/maintenance/seconddeck/aftport) -"BI" = ( -/turf/simulated/wall/prepainted, -/area/maintenance/seconddeck/aftport) -"BJ" = ( -/obj/structure/ladder, -/obj/effect/floor_decal/industrial/hatch/yellow, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/seconddeck/aftport) -"BK" = ( -/obj/machinery/access_button{ - command = "cycle_exterior"; - frequency = 1379; - master_tag = "incinerator_access_control"; - name = "Incinerator airlock control"; - pixel_x = 10; - pixel_y = -22 - }, -/obj/structure/sign/warning/fire{ - dir = 4; - pixel_x = -32; - pixel_y = 0 - }, -/obj/machinery/light/small{ - dir = 8 - }, -/obj/machinery/atmospherics/binary/pump, -/obj/effect/floor_decal/techfloor{ - dir = 8; - icon_state = "techfloor_edges" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/maintenance/incinerator) -"BL" = ( -/obj/machinery/access_button{ - command = "cycle_interior"; - frequency = 1379; - master_tag = "incinerator_access_control"; - name = "Incinerator airlock control"; - pixel_x = -8; - pixel_y = 24 - }, -/obj/structure/sign/warning/fire{ - dir = 8; - pixel_x = 32; - pixel_y = 0 - }, -/obj/machinery/atmospherics/binary/pump{ - dir = 1 - }, -/obj/effect/floor_decal/techfloor{ - dir = 4; - icon_state = "techfloor_edges" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/maintenance/incinerator) -"BM" = ( -/obj/effect/floor_decal/industrial/hatch/yellow, -/obj/structure/ladder/up, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/seconddeck/foreport) -"BN" = ( -/obj/structure/disposalpipe/up{ - dir = 1 - }, -/obj/effect/floor_decal/industrial/warning/full, -/turf/simulated/floor/plating, -/area/maintenance/seconddeck/foreport) -"BO" = ( -/obj/item/stool, -/obj/effect/decal/cleanable/cobweb, -/obj/machinery/firealarm{ - pixel_y = 21 - }, -/turf/simulated/floor/tiled/techfloor, -/area/vacant/cargo) -"BP" = ( -/obj/machinery/alarm{ - pixel_y = 24 - }, -/turf/simulated/floor/tiled/techfloor, -/area/vacant/cargo) -"BQ" = ( -/obj/structure/table/steel_reinforced, -/obj/machinery/door/firedoor, -/obj/machinery/door/window/brigdoor/eastleft{ - name = "Requisitions" - }, -/obj/random/maintenance/solgov, -/turf/simulated/floor/plating, -/area/vacant/cargo) -"BR" = ( -/obj/structure/bed/chair/office/dark{ - dir = 8 - }, -/obj/structure/noticeboard{ - pixel_y = 32 - }, -/turf/simulated/floor/tiled/techfloor, -/area/vacant/cargo) -"BS" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/techfloor, -/area/vacant/cargo) -"BT" = ( -/obj/machinery/constructable_frame/machine_frame, -/obj/machinery/alarm{ - pixel_y = 24 - }, -/turf/simulated/floor/tiled/techfloor, -/area/vacant/cargo) -"BU" = ( -/obj/structure/table/rack{ - dir = 8 - }, -/obj/random/action_figure, -/obj/random/action_figure, -/obj/random/maintenance/solgov, -/obj/random/maintenance/solgov, -/turf/simulated/floor/tiled/techfloor, -/area/vacant/cargo) -"BV" = ( -/obj/structure/table/rack{ - dir = 8 - }, -/obj/random/bomb_supply, -/obj/random/bomb_supply, -/obj/random/bomb_supply, -/obj/random/bomb_supply, -/obj/random/bomb_supply, -/obj/random/maintenance/solgov, -/turf/simulated/floor/tiled/techfloor, -/area/vacant/cargo) -"BW" = ( -/obj/structure/table/rack{ - dir = 8 - }, -/obj/machinery/alarm{ - pixel_y = 24 - }, -/obj/random/junk, -/obj/random/maintenance/solgov, -/turf/simulated/floor/tiled/techfloor, -/area/vacant/cargo) -"BX" = ( -/obj/structure/table/rack{ - dir = 8 - }, -/obj/random/maintenance/solgov, -/obj/random/maintenance/solgov, -/obj/random/maintenance/solgov, -/turf/simulated/floor/tiled/techfloor, -/area/vacant/cargo) -"BY" = ( -/turf/simulated/wall/r_wall/prepainted, -/area/maintenance/auxsolarport) -"BZ" = ( -/obj/structure/sign/warning/high_voltage{ - dir = 1; - icon_state = "shock" - }, -/turf/simulated/wall/prepainted, -/area/maintenance/auxsolarport) -"Ca" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/door/airlock/engineering{ - icon_state = "closed"; - locked = 0; - name = "Port Solar Access" - }, -/obj/machinery/door/firedoor, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/steel_ridged, -/area/maintenance/auxsolarport) -"Cb" = ( -/obj/structure/sign/warning/airlock{ - dir = 1; - icon_state = "doors" - }, -/turf/simulated/wall/prepainted, -/area/maintenance/auxsolarport) -"Cc" = ( -/turf/simulated/wall/prepainted, -/area/maintenance/auxsolarport) -"Cd" = ( -/obj/machinery/firealarm{ - dir = 8; - pixel_x = -24; - pixel_y = 0 - }, -/obj/structure/cable/green{ - d2 = 4; - icon_state = "0-4" - }, -/obj/machinery/power/apc{ - dir = 1; - name = "north bump"; - pixel_x = 0; - pixel_y = 24 - }, -/turf/simulated/floor/tiled/techfloor, -/area/storage/cargo) -"Cf" = ( -/obj/machinery/light/small{ - dir = 4 - }, -/obj/machinery/alarm{ - frequency = 1439; - pixel_y = 23; - req_access = list(list("ACCESS_ENGINE_EQUIP","ACCESS_ATMOS")) - }, -/turf/simulated/floor/tiled/techfloor, -/area/storage/cargo) -"Cg" = ( -/turf/simulated/wall/prepainted, -/area/storage/research) -"Ch" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/maintenance{ - name = "Research Storage Maintenance" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/storage/research) -"Cj" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/visible/black{ - dir = 6 - }, -/obj/structure/catwalk, -/obj/machinery/light/small{ - dir = 8 - }, -/turf/simulated/floor/plating, -/area/maintenance/seconddeck/aftport) -"Ck" = ( -/obj/effect/floor_decal/industrial/warning, -/obj/machinery/atmospherics/pipe/simple/heat_exchanging{ - dir = 10; - icon_state = "intact" - }, -/turf/simulated/floor/reinforced/airless, -/area/engineering/engine_room) -"Cl" = ( -/obj/structure/table/rack, -/obj/item/stock_parts/console_screen, -/obj/item/stock_parts/matter_bin, -/obj/item/stock_parts/matter_bin, -/obj/item/stock_parts/micro_laser, -/obj/item/stock_parts/micro_laser/high, -/obj/item/stock_parts/capacitor, -/obj/item/stock_parts/capacitor, -/obj/item/stock_parts/capacitor, -/obj/item/stock_parts/manipulator, -/obj/item/stock_parts/manipulator, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled/techfloor/grid, -/area/storage/tech) -"Cm" = ( -/obj/random/technology_scanner, -/turf/simulated/floor/plating, -/area/maintenance/seconddeck/foreport) -"Cn" = ( -/obj/machinery/atmospherics/pipe/simple/hidden, -/obj/machinery/meter, -/turf/simulated/wall/ocp_wall, -/area/maintenance/incinerator) -"Co" = ( -/obj/machinery/door/airlock/glass{ - autoclose = 0; - frequency = 1379; - heat_proof = 1; - icon_state = "closed"; - id_tag = "incinerator_airlock_exterior"; - locked = 1; - name = "Mixing Room Exterior Airlock" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/maintenance/incinerator) -"Cp" = ( -/obj/machinery/alarm{ - dir = 4; - pixel_x = -23; - pixel_y = 0 - }, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/seconddeck/foreport) -"Cq" = ( -/obj/item/stool, -/obj/item/frame/fire_alarm, -/turf/simulated/floor/tiled/techfloor, -/area/vacant/cargo) -"Cr" = ( -/turf/simulated/floor/tiled/techfloor, -/area/vacant/cargo) -"Cs" = ( -/obj/structure/barricade, -/obj/effect/wallframe_spawn/reinforced, -/turf/simulated/floor/plating, -/area/vacant/cargo) -"Ct" = ( -/obj/structure/table/rack{ - dir = 8 - }, -/obj/random/tech_supply, -/obj/random/tech_supply, -/obj/random/tech_supply, -/obj/random/tech_supply, -/obj/random/maintenance/solgov, -/obj/random/maintenance/solgov, -/turf/simulated/floor/tiled/techfloor, -/area/vacant/cargo) -"Cu" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/random/junk, -/turf/simulated/floor/tiled/techfloor, -/area/vacant/cargo) -"Cv" = ( -/obj/machinery/door/firedoor, -/turf/simulated/floor/tiled/techfloor/grid, -/area/vacant/cargo) -"Cw" = ( -/obj/random/torchcloset, -/obj/random/maintenance/solgov, -/obj/random/maintenance/solgov, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/floor/tiled/techfloor, -/area/vacant/cargo) -"Cx" = ( -/obj/structure/cable{ - d2 = 4; - icon_state = "0-4" - }, -/obj/machinery/power/apc{ - dir = 8; - name = "west bump"; - pixel_x = -24 - }, -/obj/machinery/camera/network/engineering{ - c_tag = "Solar Control - Port" - }, -/turf/simulated/floor/plating, -/area/maintenance/auxsolarport) -"Cy" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/structure/cable{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/universal, -/turf/simulated/floor/plating, -/area/maintenance/auxsolarport) -"Cz" = ( -/obj/machinery/power/smes/buildable{ - RCon_tag = "Solar - Port"; - charge = 0 - }, -/obj/structure/cable{ - d2 = 8; - icon_state = "0-8" - }, -/obj/item/device/radio/intercom{ - dir = 8; - pixel_x = 21 - }, -/turf/simulated/floor/plating, -/area/maintenance/auxsolarport) -"CB" = ( -/obj/random/toolbox, -/turf/simulated/floor/tiled/techfloor, -/area/storage/cargo) -"CC" = ( -/obj/structure/table/steel_reinforced, -/obj/item/folder/yellow, -/obj/machinery/atmospherics/pipe/simple/hidden/cyan{ - dir = 4; - icon_state = "intact" - }, -/turf/simulated/floor/tiled/steel_grid, -/area/engineering/engineering_bay) -"CD" = ( -/obj/structure/table/rack, -/obj/item/stack/material/steel/fifty, -/obj/item/stack/material/steel/fifty, -/obj/item/stack/material/glass/fifty, -/obj/item/stack/material/glass/fifty, -/obj/item/stack/material/aluminium/fifty, -/obj/item/stack/material/plastic/fifty, -/obj/item/stack/material/plasteel/fifty, -/turf/simulated/floor/tiled/techfloor, -/area/storage/research) -"CE" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/turf/simulated/floor/tiled/techfloor, -/area/storage/research) -"CF" = ( -/obj/structure/cable/green{ - d2 = 8; - icon_state = "0-8" - }, -/obj/machinery/power/apc{ - dir = 4; - name = "east bump"; - pixel_x = 24 - }, -/obj/structure/table/rack, -/obj/item/storage/box/monkeycubes/stokcubes, -/obj/item/storage/box/monkeycubes/neaeracubes, -/obj/item/storage/box/monkeycubes/farwacubes, -/obj/item/storage/box/monkeycubes/farwacubes, -/obj/item/storage/box/monkeycubes, -/turf/simulated/floor/tiled/techfloor, -/area/storage/research) -"CG" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/effect/floor_decal/corner/yellow/half, -/turf/simulated/floor/tiled/monotile, -/area/engineering/storage) -"CH" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/visible/black, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/seconddeck/aftport) -"CJ" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/seconddeck/aftport) -"CM" = ( -/obj/machinery/atmospherics/pipe/simple/visible/cyan{ - dir = 4; - icon_state = "intact" - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/cap/visible/fuel{ - dir = 1 - }, -/turf/simulated/floor/tiled/techfloor, -/area/engineering/engine_room) -"CN" = ( -/obj/structure/disposalpipe/down, -/obj/structure/lattice, -/obj/structure/railing/mapped{ - dir = 8; - icon_state = "railing0-1" - }, -/obj/machinery/atmospherics/pipe/manifold/visible/fuel{ - dir = 1 - }, -/turf/simulated/open, -/area/maintenance/seconddeck/aftport) -"CP" = ( -/obj/machinery/atmospherics/unary/outlet_injector{ - dir = 1; - frequency = 1443; - icon_state = "map_injector"; - id = "air_in"; - use_power = 1 - }, -/obj/machinery/sparker{ - id_tag = "Incinerator"; - pixel_x = -20 - }, -/turf/simulated/floor/reinforced, -/area/maintenance/incinerator) -"CQ" = ( -/turf/simulated/floor/reinforced, -/area/maintenance/incinerator) -"CR" = ( -/obj/machinery/atmospherics/unary/vent_pump{ - dir = 1; - external_pressure_bound = 0; - external_pressure_bound_default = 0; - icon_state = "map_vent_in"; - initialize_directions = 1; - internal_pressure_bound = 4000; - internal_pressure_bound_default = 4000; - pressure_checks = 2; - pressure_checks_default = 2; - pump_direction = 0; - use_power = 1 - }, -/obj/structure/sign/warning/vacuum{ - pixel_x = 32 - }, -/turf/simulated/floor/reinforced, -/area/maintenance/incinerator) -"CS" = ( -/obj/machinery/portable_atmospherics/powered/pump/filled, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/seconddeck/foreport) -"CT" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/mining{ - name = "Requisitions" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/vacant/cargo) -"CU" = ( -/obj/random/maintenance/solgov, -/turf/simulated/floor/tiled/techfloor, -/area/vacant/cargo) -"CV" = ( -/obj/structure/closet/secure_closet/crew, -/obj/random/maintenance/solgov/clean, -/obj/random/maintenance/solgov/clean, -/obj/random/maintenance/solgov/clean, -/turf/simulated/floor/tiled/techfloor, -/area/vacant/cargo) -"CW" = ( -/obj/structure/table/rack{ - dir = 8 - }, -/obj/random/junk, -/obj/random/maintenance/solgov, -/turf/simulated/floor/tiled/techfloor, -/area/vacant/cargo) -"CX" = ( -/obj/structure/table/rack{ - dir = 8 - }, -/obj/structure/cable/green, -/obj/machinery/power/apc{ - dir = 2; - name = "south bump"; - pixel_y = -24 - }, -/obj/random/maintenance/solgov, -/obj/random/maintenance/solgov, -/obj/random/maintenance/solgov, -/turf/simulated/floor/tiled/techfloor, -/area/vacant/cargo) -"CY" = ( -/obj/structure/table/rack{ - dir = 8 - }, -/obj/random/single/cola, -/obj/random/maintenance/solgov, -/obj/random/maintenance/solgov, -/obj/machinery/firealarm{ - dir = 1; - pixel_y = -26 - }, -/turf/simulated/floor/tiled/techfloor, -/area/vacant/cargo) -"CZ" = ( -/obj/item/stool, -/obj/machinery/alarm{ - dir = 4; - icon_state = "alarm0"; - pixel_x = -22 - }, -/turf/simulated/floor/plating, -/area/maintenance/auxsolarport) -"Da" = ( -/obj/machinery/atmospherics/binary/pump/on, -/obj/structure/cable/yellow{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/turf/simulated/floor/plating, -/area/maintenance/auxsolarport) -"Db" = ( -/obj/machinery/power/terminal{ - dir = 1; - icon_state = "term" - }, -/obj/structure/cable/yellow{ - d2 = 8; - icon_state = "0-8" - }, -/obj/machinery/light/small{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/maintenance/auxsolarport) -"Dc" = ( -/turf/simulated/wall/r_wall/hull, -/area/storage/cargo) -"Dd" = ( -/obj/structure/table/steel, -/obj/machinery/cell_charger, -/obj/item/cell/high, -/obj/random/powercell, -/obj/random/powercell, -/turf/simulated/floor/tiled/techfloor, -/area/storage/cargo) -"De" = ( -/obj/structure/closet/secure_closet/decktech, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/floor/tiled/techfloor, -/area/storage/cargo) -"Df" = ( -/obj/machinery/alarm{ - dir = 4; - icon_state = "alarm0"; - pixel_x = -22; - pixel_y = 0 - }, -/turf/simulated/floor/tiled/techfloor, -/area/storage/research) -"Dg" = ( -/turf/simulated/floor/tiled/techfloor, -/area/storage/research) -"Dh" = ( -/obj/structure/table/rack, -/obj/item/storage/box/beakers, -/obj/item/storage/box/bodybags, -/obj/item/storage/box/masks, -/obj/item/storage/box/gloves{ - pixel_x = 4; - pixel_y = 4 - }, -/turf/simulated/floor/tiled/techfloor, -/area/storage/research) -"Di" = ( -/obj/machinery/door/airlock/engineering{ - name = "Waste Tank Access" - }, -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/simple/hidden/black, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/engineering/wastetank) -"Dm" = ( -/obj/effect/floor_decal/industrial/hatch/yellow, -/obj/structure/ladder/up, -/obj/effect/floor_decal/industrial/warning{ - dir = 4; - icon_state = "warning" - }, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/seconddeck/aftport) -"Dn" = ( -/obj/structure/disposalpipe/up{ - dir = 1 - }, -/obj/structure/lattice, -/obj/structure/railing/mapped{ - dir = 8; - icon_state = "railing0-1" - }, -/obj/structure/railing/mapped, -/obj/machinery/atmospherics/pipe/simple/visible/fuel{ - dir = 5 - }, -/turf/simulated/open, -/area/maintenance/seconddeck/aftport) -"Do" = ( -/obj/machinery/atmospherics/binary/pump{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/black{ - dir = 2; - icon_state = "intact" - }, -/obj/effect/floor_decal/corner/orange{ - dir = 6; - icon_state = "corner_white" - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled/techfloor/grid, -/area/engineering/atmos) -"Dp" = ( -/obj/structure/sign/warning/fire, -/turf/simulated/wall/r_wall/hull, -/area/maintenance/incinerator) -"Dq" = ( -/obj/machinery/constructable_frame/computerframe, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/seconddeck/foreport) -"Dr" = ( -/obj/structure/cable, -/obj/structure/cable{ - d1 = 16; - d2 = 0; - icon_state = "16-0"; - pixel_y = 0 - }, -/obj/effect/floor_decal/industrial/warning/full, -/obj/structure/railing/mapped{ - dir = 1; - icon_state = "railing0-1" - }, -/turf/simulated/floor/plating, -/area/maintenance/seconddeck/foreport) -"Ds" = ( -/obj/random/torchcloset, -/obj/random/maintenance/solgov, -/turf/simulated/floor/plating, -/area/maintenance/seconddeck/foreport) -"Dt" = ( -/obj/structure/cable/yellow{ - d2 = 4; - icon_state = "0-4" - }, -/obj/effect/floor_decal/industrial/warning/corner, -/obj/machinery/power/solar_control{ - dir = 1; - id = "auxsolarport"; - name = "Port Solar Control"; - track = 0 - }, -/turf/simulated/floor/plating, -/area/maintenance/auxsolarport) -"Du" = ( -/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/effect/floor_decal/industrial/warning, -/obj/machinery/access_button{ - command = "cycle_interior"; - frequency = 1379; - master_tag = "solar_port_airlock"; - name = "interior access button"; - pixel_x = 24; - pixel_y = -24; - req_access = list("ACCESS_ENGINE_EQUIP","ACCESS_MAINT") - }, -/obj/machinery/atmospherics/pipe/manifold/hidden{ - dir = 8; - icon_state = "map" - }, -/turf/simulated/floor/plating, -/area/maintenance/auxsolarport) -"Dv" = ( -/obj/machinery/portable_atmospherics/canister/air/airlock, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/atmospherics/portables_connector{ - dir = 8 - }, -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 8 - }, -/obj/machinery/firealarm{ - dir = 4; - pixel_x = 26 - }, -/turf/simulated/floor/plating, -/area/maintenance/auxsolarport) -"Dw" = ( -/obj/structure/dispenser/oxygen, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/floor/tiled/techfloor, -/area/storage/cargo) -"Dx" = ( -/obj/machinery/portable_atmospherics/powered/scrubber, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/floor/tiled/techfloor, -/area/storage/cargo) -"Dy" = ( -/obj/machinery/firealarm{ - dir = 8; - pixel_x = -24; - pixel_y = 0 - }, -/turf/simulated/floor/tiled/techfloor, -/area/storage/research) -"Dz" = ( -/obj/effect/floor_decal/industrial/hatch/yellow, -/obj/structure/ladder/up, -/turf/simulated/floor/tiled/techfloor, -/area/storage/research) -"DB" = ( -/obj/machinery/firealarm{ - dir = 8; - pixel_x = -24 - }, -/obj/machinery/button/blast_door{ - desc = "A control switch to open and close the waste gate."; - id_tag = "WasteGate"; - name = "Waste Gate Control"; - pixel_x = 0; - pixel_y = 25 - }, -/turf/simulated/floor/tiled/techfloor, -/area/engineering/wastetank) -"DC" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/black, -/obj/structure/cable/green{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/turf/simulated/floor/tiled/techfloor, -/area/engineering/wastetank) -"DE" = ( -/obj/effect/floor_decal/industrial/warning/corner, -/obj/machinery/atmospherics/valve/digital{ - name = "Emergency Cooling Bypass valve" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/engineering/engine_room) -"DF" = ( -/turf/simulated/floor/reinforced/airless, -/area/engineering/wastetank) -"DG" = ( -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/atmospherics/unary/freezer{ - dir = 1; - icon_state = "freezer" - }, -/obj/structure/sign/warning/secure_area{ - dir = 1; - pixel_y = -32 - }, -/turf/simulated/floor/tiled/techfloor, -/area/engineering/atmos) -"DH" = ( -/obj/structure/table/rack, -/obj/random/junk, -/obj/random/maintenance/solgov, -/obj/item/storage/box/matches, -/turf/simulated/floor/plating, -/area/maintenance/seconddeck/forestarboard) -"DI" = ( -/obj/machinery/meter, -/obj/machinery/atmospherics/pipe/manifold/visible/cyan{ - dir = 4; - icon_state = "map" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/engineering/atmos) -"DK" = ( -/obj/machinery/door/window/brigdoor/northleft{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/visible/cyan{ - dir = 4; - icon_state = "intact" - }, -/obj/machinery/meter, -/turf/simulated/floor/tiled/techfloor/grid, -/area/engineering/atmos) -"DL" = ( -/obj/machinery/atmospherics/binary/pump/high_power/on{ - dir = 4; - target_pressure = 15000 - }, -/obj/effect/floor_decal/techfloor{ - dir = 1; - icon_state = "techfloor_edges" - }, -/obj/effect/floor_decal/industrial/warning, -/turf/simulated/floor/tiled/techfloor/grid, -/area/engineering/atmos) -"DM" = ( -/obj/machinery/light/small{ - dir = 4 - }, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/techfloor, -/area/engineering/shieldbay) -"DN" = ( -/obj/machinery/portable_atmospherics/powered/pump/filled, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/seconddeck/aftport) -"DO" = ( -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 4; - icon_state = "warningcorner" - }, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/seconddeck/aftport) -"DP" = ( -/obj/item/caution/cone, -/obj/effect/floor_decal/industrial/warning{ - dir = 1 - }, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/seconddeck/aftport) -"DR" = ( -/obj/random/junk, -/turf/simulated/floor/plating, -/area/maintenance/seconddeck/foreport) -"DS" = ( -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden, -/obj/machinery/door/airlock/external{ - frequency = 1379; - icon_state = "closed"; - id_tag = "solar_port_inner"; - locked = 1; - name = "Engineering External Access" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/maintenance/auxsolarport) -"DT" = ( -/obj/random/tank, -/turf/simulated/floor/tiled/techfloor, -/area/storage/cargo) -"DU" = ( -/obj/structure/filingcabinet/filingcabinet, -/turf/simulated/floor/tiled/techfloor, -/area/storage/cargo) -"DV" = ( -/obj/structure/closet/secure_closet/crew/research, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/floor/tiled/techfloor, -/area/storage/research) -"DW" = ( -/obj/structure/closet/secure_closet/scientist_torch, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/floor/tiled/techfloor, -/area/storage/research) -"DX" = ( -/obj/machinery/light/small, -/turf/simulated/floor/tiled/techfloor, -/area/storage/research) -"DY" = ( -/obj/structure/closet/secure_closet/secure_closet/xenoarchaeologist_torch, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/floor/tiled/techfloor, -/area/storage/research) -"DZ" = ( -/obj/machinery/computer/air_control{ - dir = 4; - frequency = 1441; - input_tag = "waste_in"; - name = "Waste Tank Control"; - output_tag = "waste_out"; - sensor_name = "Waste Tank"; - sensor_tag = "waste_sensor" - }, -/obj/machinery/light{ - dir = 8; - icon_state = "tube1" - }, -/turf/simulated/floor/tiled/techfloor, -/area/engineering/wastetank) -"Eb" = ( -/obj/machinery/light{ - dir = 4; - icon_state = "tube1" - }, -/obj/machinery/atmospherics/binary/pump{ - dir = 1 - }, -/turf/simulated/floor/tiled/techfloor, -/area/engineering/wastetank) -"Ec" = ( -/obj/machinery/atmospherics/pipe/simple/visible/fuel{ - dir = 4 - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/seconddeck/aftport) -"Ed" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 10 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/engineering/engineering_bay) -"Ee" = ( -/obj/structure/closet/emcloset, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/seconddeck/aftport) -"Ef" = ( -/obj/structure/sign/warning/vent_port, -/turf/simulated/wall/r_wall/hull, -/area/maintenance/incinerator) -"Eg" = ( -/obj/machinery/embedded_controller/radio/airlock/airlock_controller{ - dir = 8; - frequency = 1379; - id_tag = "solar_port_airlock"; - pixel_x = 24; - req_access = list("ACCESS_EXTERNAL"); - tag_airpump = "solar_port_pump"; - tag_chamber_sensor = "solar_port_sensor"; - tag_exterior_door = "solar_port_outer"; - tag_interior_door = "solar_port_inner" - }, -/obj/machinery/atmospherics/unary/vent_pump/high_volume/airlock{ - dir = 1; - id_tag = "solar_port_pump" - }, -/obj/machinery/airlock_sensor{ - frequency = 1379; - id_tag = "solar_port_sensor"; - pixel_x = 24; - pixel_y = 12 - }, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/light/small{ - dir = 8 - }, -/obj/machinery/oxygen_pump{ - pixel_x = -32 - }, -/obj/effect/floor_decal/techfloor{ - dir = 8; - icon_state = "techfloor_edges" - }, -/obj/effect/floor_decal/techfloor{ - dir = 4; - icon_state = "techfloor_edges" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/maintenance/auxsolarport) -"Eh" = ( -/turf/simulated/wall/r_wall/hull, -/area/storage/research) -"Ei" = ( -/obj/machinery/suit_storage_unit/standard_unit, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/floor/tiled/techfloor, -/area/storage/research) -"Ej" = ( -/obj/machinery/door/blast/regular/open{ - dir = 1; - icon_state = "pdoor0"; - id_tag = "prototype_chamber_blast" - }, -/obj/effect/wingrille_spawn/reinforced_phoron/full, -/turf/simulated/floor/reinforced/airless, -/area/vacant/prototype/engine) -"Ek" = ( -/obj/machinery/atmospherics/pipe/simple/visible/black, -/obj/effect/wallframe_spawn/reinforced_phoron, -/obj/machinery/door/firedoor, -/turf/simulated/floor/reinforced, -/area/engineering/wastetank) -"El" = ( -/obj/machinery/door/blast/regular{ - dir = 4; - id_tag = "SupermatterPort"; - name = "Reactor Blast Door" - }, -/obj/effect/wallframe_spawn/reinforced_phoron, -/turf/simulated/floor/reinforced/airless, -/area/engineering/engine_room) -"Eo" = ( -/obj/effect/floor_decal/industrial/warning/corner, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/seconddeck/aftport) -"Ep" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/light/small{ - dir = 1 - }, -/obj/structure/catwalk, -/obj/structure/sign/warning/secure_area{ - pixel_y = 24 - }, -/turf/simulated/floor/plating, -/area/maintenance/seconddeck/aftport) -"Es" = ( -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/door/airlock/external{ - frequency = 1379; - icon_state = "closed"; - id_tag = "solar_port_outer"; - locked = 1; - name = "Engineering External Access" - }, -/obj/machinery/shield_diffuser, -/turf/simulated/floor/tiled/techfloor/grid, -/area/maintenance/auxsolarport) -"Et" = ( -/obj/machinery/atmospherics/pipe/manifold/visible/black{ - dir = 4 - }, -/obj/machinery/meter, -/turf/simulated/floor/reinforced/airless, -/area/engineering/wastetank) -"Eu" = ( -/obj/machinery/atmospherics/unary/vent_pump/tank{ - dir = 1; - external_pressure_bound = 0; - external_pressure_bound_default = 0; - icon_state = "map_vent_in"; - id_tag = "waste_out"; - initialize_directions = 1; - internal_pressure_bound = 4000; - internal_pressure_bound_default = 4000; - pressure_checks = 2; - pressure_checks_default = 2; - pump_direction = 0; - use_power = 0 - }, -/turf/simulated/floor/reinforced/airless, -/area/engineering/wastetank) -"Ev" = ( -/obj/structure/cable/green{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/machinery/atmospherics/pipe/simple/visible/fuel{ - dir = 6 - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/seconddeck/aftport) -"Ew" = ( -/obj/machinery/door/airlock/maintenance, -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/simple/visible/fuel{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/maintenance/seconddeck/aftport) -"Ey" = ( -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/access_button{ - command = "cycle_exterior"; - frequency = 1379; - master_tag = "solar_port_airlock"; - name = "exterior access button"; - pixel_x = -24; - pixel_y = 24; - req_access = list("ACCESS_ENGINE_EQUIP","ACCESS_EXTERNAL") - }, -/turf/simulated/floor/airless, -/area/solar/port) -"EA" = ( -/obj/structure/cable/yellow{ - d2 = 2; - icon_state = "0-2" - }, -/obj/machinery/power/solar{ - id = "auxsolarsport"; - name = "Port Auxiliary Solar Array" - }, -/obj/effect/floor_decal/solarpanel, -/turf/simulated/floor/airless, -/area/solar/port) -"EB" = ( -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/airless, -/area/solar/port) -"EC" = ( -/obj/structure/cable/yellow{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/turf/simulated/floor/airless, -/area/solar/port) -"ED" = ( -/obj/structure/cable/yellow{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/airless, -/area/solar/port) -"EE" = ( -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/airless, -/area/solar/port) -"EF" = ( -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/airless, -/area/solar/port) -"EG" = ( -/obj/structure/cable/yellow{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/airless, -/area/solar/port) -"EH" = ( -/obj/structure/cable/yellow{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/turf/simulated/floor/airless, -/area/solar/port) -"EI" = ( -/obj/structure/cable/yellow, -/obj/machinery/power/solar{ - id = "auxsolarsport"; - name = "Port Auxiliary Solar Array" - }, -/obj/effect/floor_decal/solarpanel, -/turf/simulated/floor/airless, -/area/solar/port) -"EK" = ( -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/airless, -/area/solar/port) -"EL" = ( -/obj/machinery/power/tracker, -/obj/structure/cable/yellow, -/turf/simulated/floor/airless, -/area/solar/port) -"EO" = ( -/obj/effect/floor_decal/corner/lime{ - dir = 9 - }, -/obj/structure/ladder, -/obj/effect/catwalk_plated, -/obj/machinery/light{ - dir = 8; - icon_state = "tube1"; - pixel_y = 0 - }, -/turf/simulated/floor/tiled/steel_grid, -/area/engineering/foyer) -"EQ" = ( -/obj/random_multi/single_item/punitelly, -/turf/simulated/floor/plating, -/area/vacant/chapel) -"ES" = ( -/obj/machinery/atmospherics/pipe/manifold/visible/cyan{ - dir = 4; - icon_state = "map" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/engineering/atmos) -"ET" = ( -/obj/machinery/atmospherics/unary/tank/air{ - dir = 4 - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled/techfloor, -/area/engineering/atmos) -"EU" = ( -/turf/simulated/wall/ocp_wall, -/area/maintenance/incinerator) -"EV" = ( -/obj/structure/sign/warning/fire, -/turf/simulated/wall/ocp_wall, -/area/maintenance/incinerator) -"EX" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/railing/mapped{ - dir = 8; - icon_state = "railing0-1" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/plating, -/area/maintenance/seconddeck/forestarboard) -"EY" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/plating, -/area/maintenance/seconddeck/forestarboard) -"EZ" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/railing/mapped{ - dir = 8; - icon_state = "railing0-1" - }, -/obj/structure/railing/mapped, -/obj/machinery/atmospherics/valve/shutoff/supply, -/obj/machinery/atmospherics/valve/shutoff/scrubbers, -/turf/simulated/floor/plating, -/area/maintenance/seconddeck/forestarboard) -"Fa" = ( -/obj/structure/railing/mapped, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/plating, -/area/maintenance/seconddeck/forestarboard) -"Fb" = ( -/obj/machinery/atmospherics/unary/vent_pump/tank{ - dir = 4; - external_pressure_bound = 0; - external_pressure_bound_default = 0; - icon_state = "map_vent_in"; - id_tag = "o2_out"; - initialize_directions = 1; - internal_pressure_bound = 4000; - internal_pressure_bound_default = 4000; - pressure_checks = 2; - pressure_checks_default = 2; - pump_direction = 0; - use_power = 1 - }, -/obj/machinery/air_sensor{ - id_tag = "o2_sensor" - }, -/turf/simulated/floor/reinforced/oxygen, -/area/engineering/atmos) -"Fc" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/engineering/engineering_bay) -"Fd" = ( -/obj/machinery/atmospherics/binary/pump{ - dir = 4 - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/camera/network/engineering{ - c_tag = "Atmospherics - West"; - dir = 1 - }, -/obj/structure/sign/warning/secure_area{ - dir = 1; - pixel_y = -32 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/engineering/atmos) -"Ff" = ( -/obj/machinery/atmospherics/pipe/simple/visible/black{ - dir = 6 - }, -/obj/machinery/air_sensor{ - id_tag = "waste_sensor" - }, -/turf/simulated/floor/reinforced/airless, -/area/engineering/wastetank) -"Fg" = ( -/obj/effect/floor_decal/industrial/warning/corner, -/turf/simulated/floor/reinforced/airless, -/area/vacant/prototype/engine) -"Fh" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 8 - }, -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 4; - icon_state = "warningcorner" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/turf/simulated/floor/plating, -/area/vacant/prototype/engine) -"Fi" = ( -/obj/machinery/computer/modular/preset/engineering{ - dir = 8; - icon_state = "console" - }, -/obj/effect/floor_decal/corner/yellow{ - dir = 6 - }, -/obj/effect/floor_decal/corner/yellow{ - dir = 1 - }, -/turf/simulated/floor/tiled/monotile, -/area/vacant/prototype/control) -"Fj" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 8 - }, -/obj/machinery/light_switch{ - pixel_y = -24 - }, -/turf/simulated/floor/tiled/dark, -/area/medical/morgue) -"Fk" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 4; - icon_state = "warning" - }, -/obj/structure/catwalk, -/obj/machinery/atmospherics/pipe/simple/visible/fuel{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/maintenance/seconddeck/aftport) -"Fl" = ( -/turf/simulated/wall/prepainted, -/area/engineering/fuelbay) -"Fm" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 8; - icon_state = "warningcorner" - }, -/obj/machinery/light, -/obj/machinery/firealarm{ - dir = 1; - pixel_y = -24 - }, -/obj/effect/floor_decal/corner/yellow, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/seconddeck/elevator) -"Fn" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/seconddeck/aftport) -"Fo" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/engineering{ - name = "Fuel Bay" - }, -/obj/effect/floor_decal/industrial/warning/corner, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/visible/fuel, -/turf/simulated/floor/tiled/techfloor/grid, -/area/engineering/fuelbay) -"Fp" = ( -/turf/simulated/wall/r_wall/prepainted, -/area/engineering/fuelbay) -"Fq" = ( -/obj/structure/cable/green{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/machinery/light{ - dir = 1 - }, -/turf/simulated/floor/tiled/techfloor, -/area/engineering/fuelbay) -"Fr" = ( -/obj/effect/decal/cleanable/cobweb, -/obj/machinery/firealarm{ - dir = 8; - pixel_x = -24; - pixel_y = 0 - }, -/obj/machinery/alarm{ - pixel_y = 24 - }, -/obj/machinery/camera/network/engineering{ - c_tag = "Engineering - Fuel Bay"; - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor, -/area/engineering/fuelbay) -"Fs" = ( -/obj/effect/wallframe_spawn/reinforced_phoron, -/obj/machinery/door/firedoor, -/turf/simulated/floor/plating, -/area/engineering/fuelbay) -"Ft" = ( -/obj/machinery/atmospherics/unary/vent_pump/tank{ - dir = 4; - external_pressure_bound = 0; - external_pressure_bound_default = 0; - icon_state = "map_vent_in"; - id_tag = "n2_out"; - initialize_directions = 1; - internal_pressure_bound = 4000; - internal_pressure_bound_default = 4000; - pressure_checks = 2; - pressure_checks_default = 2; - pump_direction = 0; - use_power = 1 - }, -/turf/simulated/floor/reinforced/nitrogen, -/area/engineering/atmos) -"Fw" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/turf/simulated/floor/tiled/techfloor, -/area/engineering/fuelbay) -"Fx" = ( -/obj/machinery/power/apc{ - dir = 8; - name = "west bump"; - pixel_x = -24 - }, -/obj/structure/cable/green{ - d2 = 4; - icon_state = "0-4" - }, -/turf/simulated/floor/tiled/techfloor, -/area/engineering/fuelbay) -"Fy" = ( -/obj/effect/wallframe_spawn/reinforced_phoron, -/obj/machinery/atmospherics/pipe/simple/visible/fuel{ - dir = 4 - }, -/obj/machinery/meter, -/obj/machinery/door/firedoor, -/turf/simulated/floor/plating, -/area/engineering/fuelbay) -"Fz" = ( -/obj/machinery/atmospherics/pipe/simple/visible/fuel{ - dir = 5 - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 8 - }, -/turf/simulated/floor/plating, -/area/engineering/fuelbay) -"FA" = ( -/obj/machinery/atmospherics/pipe/manifold/visible/yellow{ - dir = 1; - icon_state = "map" - }, -/obj/effect/floor_decal/corner/red{ - dir = 9; - icon_state = "corner_white" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/engineering/atmos) -"FB" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 4; - icon_state = "warning" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/maintenance/seconddeck/aftport) -"FD" = ( -/obj/machinery/computer/ship/engines{ - dir = 1 - }, -/turf/simulated/floor/tiled/techfloor, -/area/engineering/fuelbay) -"FE" = ( -/obj/machinery/computer/air_control{ - dir = 1; - frequency = 1441; - input_tag = "fuel_in"; - name = "Fuel Supply Control"; - output_tag = "fuel_out"; - sensor_name = "Fuel Tank"; - sensor_tag = "fuel_sensor" - }, -/turf/simulated/floor/tiled/techfloor, -/area/engineering/fuelbay) -"FF" = ( -/obj/machinery/atmospherics/portables_connector{ - dir = 4 - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 8 - }, -/turf/simulated/floor/plating, -/area/engineering/fuelbay) -"FG" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 4; - icon_state = "warning" - }, -/obj/machinery/camera/network/engineering{ - c_tag = "Engineering - Shield Bay"; - dir = 1 - }, -/obj/effect/floor_decal/industrial/warning, -/obj/machinery/power/sensor{ - name = "Powernet Sensor - Shield Subgrid"; - name_tag = "Shield Subgrid" - }, -/obj/structure/cable/cyan{ - d2 = 8; - icon_state = "0-8" - }, -/obj/structure/cable/cyan{ - d2 = 4; - icon_state = "0-4" - }, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/engineering/shieldbay) -"FH" = ( -/obj/effect/decal/cleanable/vomit, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/plating, -/area/maintenance/seconddeck/aftport) -"FI" = ( -/obj/effect/floor_decal/corner_techfloor_grid{ - dir = 8; - icon_state = "corner_techfloor_grid" - }, -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 8; - icon_state = "warningcorner" - }, -/obj/machinery/light{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark, -/area/teleporter/seconddeck) -"FJ" = ( -/obj/machinery/button/blast_door{ - desc = "A remote-control switch."; - id_tag = "RubbishOuter"; - name = "Waste Disposal Maintenance"; - pixel_x = -24; - pixel_y = 0 - }, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/disposal) -"FL" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 8; - icon_state = "warning" - }, -/turf/simulated/floor/tiled, -/area/engineering/engineering_bay) -"FS" = ( -/obj/effect/shuttle_landmark/skipjack/deck3{ - name = "2nd Deck, Fore Port" - }, -/turf/space, -/area/space) -"FT" = ( -/obj/effect/shuttle_landmark/torch/deck3/exploration_shuttle{ - name = "2nd Deck, Port" - }, -/turf/space, -/area/space) -"FV" = ( -/obj/machinery/computer/teleporter{ - dir = 1 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/teleporter/seconddeck) -"FW" = ( -/obj/structure/sign/warning/radioactive{ - dir = 1; - icon_state = "radiation" - }, -/turf/simulated/wall/r_wall/hull, -/area/space) -"Gb" = ( -/obj/effect/shuttle_landmark/torch/deck3/guppy{ - name = "2nd Deck, Fore" - }, -/turf/space, -/area/space) -"Gd" = ( -/obj/structure/cable/cyan{ - d2 = 8; - icon_state = "0-8" - }, -/obj/machinery/power/smes/buildable/preset/torch/substation_full{ - RCon_tag = "Substation - Atmospherics" - }, -/turf/simulated/floor/plating, -/area/engineering/engine_smes) -"Gf" = ( -/obj/machinery/alarm{ - pixel_y = 24 - }, -/obj/machinery/light{ - dir = 1 - }, -/obj/effect/floor_decal/corner/yellow{ - dir = 5; - icon_state = "corner_white" - }, -/turf/simulated/floor/tiled/steel_grid, -/area/vacant/prototype/control) -"Gg" = ( -/obj/effect/floor_decal/industrial/warning, -/turf/simulated/floor/reinforced/airless, -/area/vacant/prototype/engine) -"Gh" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/plating, -/area/vacant/prototype/engine) -"Gi" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, -/obj/machinery/newscaster{ - pixel_y = -32 - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8"; - pixel_x = 0 - }, -/turf/simulated/floor/tiled/steel_grid, -/area/vacant/prototype/control) -"Gj" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/effect/floor_decal/industrial/warning{ - dir = 9 - }, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/techfloor, -/area/vacant/prototype/engine) -"Gl" = ( -/obj/structure/sign/warning/compressed_gas{ - dir = 1; - icon_state = "hikpa" - }, -/turf/simulated/wall/prepainted, -/area/engineering/fuelbay) -"Gm" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/alarm{ - dir = 1; - pixel_y = -25 - }, -/obj/effect/floor_decal/corner/yellow{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/seconddeck/elevator) -"Gn" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/structure/disposalpipe/segment{ - dir = 8; - icon_state = "pipe-c" - }, -/obj/structure/catwalk, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/maintenance/seconddeck/aftport) -"Go" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/black{ - dir = 2; - icon_state = "intact" - }, -/obj/structure/window/reinforced, -/obj/machinery/portable_atmospherics/canister/hydrogen, -/obj/machinery/light/spot{ - dir = 4; - icon_state = "tube_map" - }, -/obj/effect/floor_decal/corner/white, -/obj/effect/floor_decal/corner/orange{ - dir = 4; - icon_state = "corner_white" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/engineering/atmos) -"Gs" = ( -/obj/structure/cable{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/hallway/primary/seconddeck/fore) -"Gw" = ( -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 4 - }, -/obj/machinery/light{ - dir = 4; - icon_state = "tube1" - }, -/turf/simulated/floor/tiled, -/area/engineering/engineering_bay) -"GA" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/blast/shutters{ - density = 0; - dir = 2; - icon_state = "shutter0"; - id_tag = "engineeringdeskshutters"; - name = "Engineering Desk Shutters"; - opacity = 0 - }, -/obj/effect/wallframe_spawn/reinforced/no_grille, -/turf/simulated/floor/plating, -/area/engineering/engineering_bay) -"GC" = ( -/obj/structure/catwalk, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/sign/warning/secure_area{ - pixel_y = 24 - }, -/turf/simulated/floor/plating, -/area/maintenance/seconddeck/aftport) -"GF" = ( -/obj/structure/cable{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 1 - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/seconddeck/forestarboard) -"GG" = ( -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 4; - icon_state = "warningcorner" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/maintenance/seconddeck/aftport) -"GH" = ( -/obj/machinery/light/small{ - dir = 4; - icon_state = "bulb1" - }, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/seconddeck/foreport) -"GI" = ( -/obj/machinery/conveyor_switch/oneway{ - convdir = -1; - id = "garbage2"; - name = "disposal conveyor" - }, -/obj/effect/floor_decal/industrial/hatch/yellow, -/obj/structure/railing/mapped{ - dir = 4; - icon_state = "railing0-1" - }, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/disposal) -"GJ" = ( -/obj/machinery/light/small{ - dir = 4 - }, -/obj/structure/holoplant, -/turf/simulated/floor/tiled, -/area/engineering/engine_monitoring) -"GM" = ( -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/seconddeck/aftstarboard) -"GP" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/effect/catwalk_plated, -/obj/machinery/camera/network/second_deck{ - c_tag = "Second Deck Hallway - Fore Corridor" - }, -/turf/simulated/floor/plating, -/area/hallway/primary/seconddeck/fore) -"GQ" = ( -/obj/machinery/atmospherics/pipe/simple/visible/green, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/extinguisher_cabinet{ - pixel_x = -32 - }, -/turf/simulated/floor/tiled/techfloor, -/area/engineering/engine_room) -"GR" = ( -/obj/effect/wallframe_spawn/reinforced_phoron, -/obj/machinery/atmospherics/pipe/simple/visible/yellow{ - dir = 4 - }, -/obj/machinery/door/firedoor, -/obj/machinery/meter, -/turf/simulated/floor/plating, -/area/engineering/atmos) -"GW" = ( -/turf/simulated/wall/r_wall/hull, -/area/medical/morgue) -"GX" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/catwalk, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/plating, -/area/maintenance/seconddeck/aftstarboard) -"GY" = ( -/obj/machinery/door/airlock/maintenance, -/turf/simulated/floor/tiled/techfloor/grid, -/area/maintenance/seconddeck/forestarboard) -"GZ" = ( -/obj/random_multi/single_item/poppy, -/turf/simulated/floor/plating, -/area/maintenance/seconddeck/foreport) -"Ha" = ( -/obj/structure/disposalpipe/segment{ - dir = 1; - icon_state = "pipe-c" - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/seconddeck/aftport) -"Hb" = ( -/obj/effect/shuttle_landmark/petrov/out, -/turf/space, -/area/space) -"Hc" = ( -/obj/machinery/atmospherics/pipe/simple/visible/green, -/obj/machinery/atmospherics/pipe/simple/visible/yellow{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/engineering/atmos) -"Hf" = ( -/obj/machinery/power/apc/super/critical{ - dir = 1; - is_critical = 1; - name = "north bump"; - pixel_y = 24 - }, -/obj/effect/floor_decal/corner/yellow{ - dir = 5; - icon_state = "corner_white" - }, -/obj/structure/cable/green{ - d2 = 2; - icon_state = "0-2" - }, -/obj/structure/bed/chair/padded/yellow{ - dir = 4; - icon_state = "chair_preview" - }, -/turf/simulated/floor/tiled/steel_grid, -/area/vacant/prototype/control) -"Hg" = ( -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 8; - icon_state = "warningcorner" - }, -/turf/simulated/floor/reinforced/airless, -/area/vacant/prototype/engine) -"Hh" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/vacant/prototype/engine) -"Hi" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 1 - }, -/obj/structure/disposalpipe/sortjunction/flipped{ - dir = 4; - name = "Engineering Bay"; - sort_type = "Engineering Bay" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/cyan{ - dir = 4; - icon_state = "intact" - }, -/obj/effect/floor_decal/corner/yellow/half{ - dir = 1; - icon_state = "bordercolorhalf" - }, -/turf/simulated/floor/tiled/monotile, -/area/engineering/foyer) -"Hj" = ( -/obj/structure/hygiene/shower{ - pixel_y = 28 - }, -/obj/machinery/light/small{ - dir = 8 - }, -/turf/simulated/floor/tiled/techfloor, -/area/vacant/prototype/control) -"Hk" = ( -/obj/structure/sign/atmosplaque, -/turf/simulated/wall/r_wall/prepainted, -/area/engineering/engineering_bay) -"Hl" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/access_button/airlock_exterior{ - master_tag = "prototype_controller"; - pixel_x = 23; - pixel_y = -23 - }, -/obj/machinery/access_button/airlock_interior{ - master_tag = "prototype_controller"; - pixel_x = -23; - pixel_y = 23 - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8"; - pixel_x = 0 - }, -/turf/simulated/floor/tiled/techfloor, -/area/vacant/prototype/control) -"Hn" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/effect/landmark{ - name = "xeno_spawn"; - pixel_x = -1 - }, -/obj/structure/catwalk, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/turf/simulated/floor/plating, -/area/maintenance/seconddeck/aftport) -"Ho" = ( -/obj/machinery/computer/air_control{ - dir = 8; - frequency = 1441; - input_tag = "n2o_in"; - name = "Nitrous Oxide Supply Control"; - output_tag = "n2o_out"; - sensor_name = "Nitrous Oxide Supply"; - sensor_tag = "n2o_sensor" - }, -/obj/machinery/atmospherics/pipe/simple/visible/green{ - dir = 4; - icon_state = "intact" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/black{ - dir = 2; - icon_state = "intact" - }, -/obj/effect/floor_decal/corner/white{ - dir = 6; - icon_state = "corner_white" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/engineering/atmos) -"Hp" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 4 - }, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/techfloor, -/area/engineering/drone_fabrication) -"Hq" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 4 - }, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/turf/simulated/floor/tiled/techfloor, -/area/engineering/drone_fabrication) -"Hs" = ( -/obj/effect/wallframe_spawn/reinforced_phoron, -/obj/machinery/atmospherics/pipe/simple/visible/yellow, -/obj/machinery/door/firedoor, -/turf/simulated/floor/reinforced, -/area/engineering/wastetank) -"Hu" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/cyan{ - dir = 4; - icon_state = "intact" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, -/turf/simulated/floor/tiled/monotile, -/area/engineering/engineering_bay) -"Hw" = ( -/obj/structure/window/reinforced, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/pipedispenser, -/obj/machinery/atmospherics/pipe/simple/hidden/cyan{ - dir = 4; - icon_state = "intact" - }, -/obj/effect/catwalk_plated, -/turf/simulated/floor/plating, -/area/engineering/atmos) -"Hy" = ( -/obj/structure/catwalk, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/maintenance/seconddeck/aftstarboard) -"Hz" = ( -/obj/random/junk, -/turf/simulated/floor/wood/walnut, -/area/vacant/chapel) -"HB" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8"; - pixel_x = 0 - }, -/obj/machinery/atmospherics/valve/shutoff/supply{ - dir = 4 - }, -/obj/structure/railing/mapped{ - dir = 1; - icon_state = "railing0-1" - }, -/obj/structure/railing/mapped{ - dir = 4; - icon_state = "railing0-1" - }, -/obj/machinery/atmospherics/valve/shutoff/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/maintenance/seconddeck/aftstarboard) -"HE" = ( -/obj/machinery/conveyor{ - dir = 2; - id = "garbage" - }, -/turf/simulated/floor/plating, -/area/maintenance/disposal) -"HF" = ( -/obj/effect/floor_decal/techfloor/corner{ - dir = 8; - icon_state = "techfloor_corners" - }, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/engineering/engineering_bay) -"HN" = ( -/obj/structure/window/reinforced{ - dir = 1 - }, -/obj/effect/floor_decal/industrial/hatch/yellow, -/obj/machinery/disposal, -/obj/structure/disposalpipe/trunk, -/obj/machinery/light/small{ - dir = 8 - }, -/turf/simulated/floor/tiled, -/area/engineering/engineering_bay) -"HO" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/plating, -/area/maintenance/seconddeck/aftport) -"HP" = ( -/obj/machinery/door/airlock/engineering{ - name = "Shield Bay Maintenance" - }, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/techfloor/grid, -/area/engineering/shieldbay) -"HQ" = ( -/obj/effect/landmark{ - name = "JoinLateCyborg" - }, -/obj/effect/landmark/start{ - name = "Cyborg" - }, -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 8; - icon_state = "warningcorner" - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 1 - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/turf/simulated/floor/tiled/dark, -/area/assembly/chargebay) -"HU" = ( -/obj/structure/table/rack, -/obj/random/maintenance/solgov, -/obj/random/maintenance/solgov, -/turf/simulated/floor/plating, -/area/maintenance/seconddeck/aftstarboard) -"HW" = ( -/obj/machinery/atmospherics/pipe/simple/visible/black{ - dir = 9 - }, -/obj/structure/sign/warning/vacuum, -/turf/simulated/wall/r_wall/prepainted, -/area/engineering/engine_room) -"HY" = ( -/obj/structure/lattice, -/obj/machinery/atmospherics/pipe/simple/hidden/cyan, -/obj/structure/railing/mapped{ - dir = 1; - icon_state = "railing0-1" - }, -/obj/structure/railing/mapped{ - dir = 8; - icon_state = "railing0-1" - }, -/turf/simulated/open, -/area/maintenance/seconddeck/aftport) -"Ib" = ( -/obj/effect/wallframe_spawn/reinforced/hull, -/obj/machinery/door/firedoor, -/turf/simulated/floor/plating, -/area/maintenance/seconddeck/forestarboard) -"Ic" = ( -/obj/machinery/atmospherics/pipe/simple/visible/green{ - dir = 5 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/engineering/atmos) -"Id" = ( -/obj/effect/engine_setup/smes, -/obj/machinery/power/smes/buildable/preset/torch/substation_full{ - RCon_tag = "Substation - Engine" - }, -/obj/structure/cable/cyan{ - d2 = 8; - icon_state = "0-8" - }, -/obj/machinery/camera/network/engine{ - c_tag = "Engine - SMES"; - dir = 2 - }, -/turf/simulated/floor/plating, -/area/engineering/engine_smes) -"Ie" = ( -/obj/item/device/radio/intercom{ - dir = 1; - pixel_y = -28 - }, -/obj/machinery/atmospherics/pipe/simple/visible/cyan{ - dir = 4; - icon_state = "intact" - }, -/obj/machinery/atmospherics/pipe/simple/visible/black, -/turf/simulated/floor/tiled/techfloor, -/area/engineering/engine_room) -"If" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8"; - pixel_x = 0 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 1 - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/seconddeck/forestarboard) -"Ih" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 1 - }, -/obj/structure/cable/yellow{ - d2 = 2; - icon_state = "0-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/turf/simulated/floor/plating, -/area/vacant/prototype/engine) -"Ij" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/steel_grid, -/area/vacant/prototype/control) -"Ik" = ( -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/structure/closet/secure_closet/engineering_torch, -/obj/machinery/light, -/turf/simulated/floor/tiled/techfloor/grid, -/area/engineering/engineering_bay) -"Il" = ( -/obj/machinery/atmospherics/omni/filter{ - tag_east = 8; - tag_north = 2; - tag_south = 7; - tag_west = 1 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/engineering/atmos) -"Im" = ( -/obj/structure/disposalpipe/segment{ - dir = 8; - icon_state = "pipe-c" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 1 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/seconddeck) -"In" = ( -/obj/machinery/portable_atmospherics/canister/air, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/seconddeck/aftport) -"Io" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/door/airlock/engineering{ - name = "Synth's Storage"; - secured_wires = 1 - }, -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/techfloor, -/area/synth/borg_upload) -"Ip" = ( -/obj/machinery/alarm{ - dir = 8; - icon_state = "alarm0"; - pixel_x = 24 - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/seconddeck/forestarboard) -"Iq" = ( -/obj/structure/railing/mapped, -/obj/structure/railing/mapped{ - dir = 4; - icon_state = "railing0-1" - }, -/turf/simulated/open, -/area/engineering/engineering_bay) -"Ir" = ( -/turf/simulated/wall/r_wall/hull, -/area/maintenance/auxsolarport) -"Is" = ( -/obj/machinery/shieldgen, -/turf/simulated/floor/plating, -/area/maintenance/seconddeck/aftport) -"Iv" = ( -/obj/structure/table/rack, -/obj/random/maintenance/solgov, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/seconddeck/aftstarboard) -"Iw" = ( -/obj/machinery/portable_atmospherics/canister/air, -/obj/machinery/atmospherics/portables_connector{ - dir = 8 - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled/techfloor, -/area/engineering/atmos) -"Iz" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/obj/structure/catwalk, -/obj/structure/cable/green{ - d2 = 2; - icon_state = "0-2" - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 4; - icon_state = "warning" - }, -/obj/machinery/power/apc{ - dir = 1; - name = "north bump"; - pixel_x = 0; - pixel_y = 24 - }, -/turf/simulated/floor/plating, -/area/engineering/atmos/storage) -"IA" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 8 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/seconddeck/elevator) -"IB" = ( -/obj/machinery/door/airlock/glass/engineering{ - name = "Engine Control Room" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/simple/hidden/cyan{ - dir = 4; - icon_state = "intact" - }, -/turf/simulated/floor/tiled/steel_ridged, -/area/engineering/engine_monitoring) -"IE" = ( -/turf/simulated/wall/r_wall/hull, -/area/maintenance/seconddeck/aftstarboard) -"II" = ( -/obj/machinery/atmospherics/pipe/simple/visible/green, -/obj/effect/floor_decal/techfloor{ - dir = 4; - icon_state = "techfloor_edges" - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/tiled/techfloor/grid, -/area/engineering/atmos) -"IK" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/effect/floor_decal/corner/yellow/half{ - dir = 1; - icon_state = "bordercolorhalf" - }, -/turf/simulated/floor/tiled/steel_grid, -/area/engineering/foyer) -"IL" = ( -/obj/effect/wallframe_spawn/reinforced/no_grille, -/turf/simulated/floor/plating, -/area/assembly/chargebay) -"IM" = ( -/obj/machinery/power/smes/buildable{ - charge = 5e+006; - input_attempt = 1; - output_attempt = 1 - }, -/obj/structure/cable/cyan{ - d2 = 2; - icon_state = "0-2" - }, -/turf/simulated/floor/tiled/techfloor, -/area/engineering/drone_fabrication) -"IN" = ( -/obj/effect/floor_decal/industrial/hatch/yellow, -/obj/structure/ladder/up, -/turf/simulated/floor/plating, -/area/maintenance/seconddeck/central) -"IR" = ( -/obj/structure/grille, -/turf/simulated/floor/airless, -/area/space) -"IU" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 8; - icon_state = "warning" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/dark, -/area/assembly/chargebay) -"IW" = ( -/obj/machinery/light_switch{ - pixel_x = 24; - pixel_y = -24 - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/turf/simulated/floor/tiled, -/area/engineering/engineering_bay) -"IX" = ( -/obj/effect/decal/cleanable/filth, -/obj/structure/cable/green{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 1; - icon_state = "warning" - }, -/turf/simulated/floor/plating, -/area/maintenance/seconddeck/aftport) -"Jb" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/catwalk, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 4; - icon_state = "warning" - }, -/turf/simulated/floor/plating, -/area/engineering/atmos/storage) -"Jc" = ( -/obj/structure/catwalk, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/plating, -/area/engineering/shieldbay) -"Jd" = ( -/obj/structure/cable{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/machinery/constructable_frame/machine_frame, -/obj/effect/floor_decal/industrial/hatch/yellow, -/turf/simulated/floor/plating, -/area/engineering/engine_smes) -"Jf" = ( -/obj/machinery/firealarm{ - dir = 1; - pixel_y = -24 - }, -/obj/structure/cable{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/turf/simulated/floor/tiled/techfloor, -/area/engineering/shieldbay) -"Jg" = ( -/obj/effect/floor_decal/industrial/warning, -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 1; - icon_state = "warningcorner" - }, -/turf/simulated/floor/plating, -/area/vacant/prototype/engine) -"Jh" = ( -/obj/machinery/atmospherics/unary/vent_pump/on, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/steel_grid, -/area/vacant/prototype/control) -"Ji" = ( -/obj/effect/landmark{ - name = "xeno_spawn"; - pixel_x = -1 - }, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 4 - }, -/obj/effect/floor_decal/corner/yellow{ - dir = 9 - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 8 - }, -/obj/structure/cable{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/turf/simulated/floor/tiled/steel_grid, -/area/hallway/primary/seconddeck/fore) -"Jj" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 - }, -/turf/simulated/floor/plating, -/area/vacant/prototype/engine) -"Jl" = ( -/obj/machinery/atmospherics/omni/filter{ - tag_east = 5; - tag_north = 2; - tag_south = 1; - tag_west = 0 - }, -/obj/item/device/radio/intercom{ - pixel_y = 23 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/engineering/atmos) -"Jn" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/seconddeck/aftport) -"Jo" = ( -/obj/machinery/atmospherics/binary/pump{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/black{ - dir = 2; - icon_state = "intact" - }, -/obj/effect/floor_decal/corner/white{ - dir = 6; - icon_state = "corner_white" - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled/techfloor/grid, -/area/engineering/atmos) -"Jp" = ( -/obj/effect/floor_decal/corner/blue{ - dir = 6 - }, -/obj/structure/ladder/up, -/obj/machinery/light{ - dir = 4; - icon_state = "tube1" - }, -/turf/simulated/floor/tiled/steel_grid, -/area/engineering/foyer) -"Jr" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/door/airlock/maintenance{ - name = "Engineering Maintenance" - }, -/obj/machinery/door/firedoor, -/turf/simulated/floor/tiled/steel_ridged, -/area/engineering/engineering_bay) -"Js" = ( -/obj/structure/fireaxecabinet{ - pixel_x = -32 - }, -/obj/machinery/computer/air_control{ - dir = 4; - frequency = 1441; - name = "Tank Monitor"; - sensor_tag = "o2_sensor" - }, -/turf/simulated/floor/tiled/techfloor, -/area/engineering/atmos) -"Jt" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/floor_decal/corner/yellow, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/power/apc{ - dir = 2; - name = "south bump"; - operating = 1; - pixel_y = -28 - }, -/obj/structure/cable/green{ - d2 = 4; - icon_state = "0-4" - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/seconddeck/elevator) -"Jv" = ( -/obj/structure/closet/secure_closet/engineering_senior, -/obj/effect/floor_decal/industrial/hatch/yellow, -/turf/simulated/floor/tiled/techfloor/grid, -/area/engineering/engineering_bay) -"Jx" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/cable{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/engineering/shieldbay) -"JA" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/catwalk, -/obj/machinery/alarm{ - pixel_y = 24 - }, -/turf/simulated/floor/plating, -/area/maintenance/seconddeck/aftport) -"JD" = ( -/obj/structure/catwalk, -/obj/structure/cable{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/turf/simulated/floor/plating, -/area/maintenance/seconddeck/aftstarboard) -"JE" = ( -/obj/structure/disposalpipe/segment, -/obj/structure/catwalk, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 - }, -/turf/simulated/floor/plating, -/area/engineering/drone_fabrication) -"JF" = ( -/turf/simulated/wall/r_wall/hull, -/area/engineering/fuelbay) -"JG" = ( -/obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/seconddeck/central) -"JH" = ( -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 4; - icon_state = "warningcorner" - }, -/obj/structure/closet/secure_closet/crew, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled, -/area/hallway/primary/seconddeck/fore) -"JJ" = ( -/obj/item/stool/padded, -/obj/machinery/light/small{ - dir = 1 - }, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/disposal) -"JL" = ( -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/structure/closet/secure_closet/crew/research, -/obj/machinery/light/small{ - dir = 8 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/seconddeck/fore) -"JN" = ( -/obj/item/stool/padded, -/obj/machinery/power/apc{ - dir = 2; - name = "south bump"; - pixel_y = -24 - }, -/obj/structure/cable/green{ - d2 = 4; - icon_state = "0-4" - }, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/disposal) -"JQ" = ( -/obj/structure/table/steel, -/obj/machinery/recharger{ - pixel_y = 0 - }, -/obj/effect/floor_decal/corner/yellow/half{ - dir = 1; - icon_state = "bordercolorhalf" - }, -/turf/simulated/floor/tiled/steel_grid, -/area/engineering/engineering_bay) -"JR" = ( -/obj/machinery/air_sensor{ - id_tag = "n2_sensor" - }, -/turf/simulated/floor/reinforced/nitrogen, -/area/engineering/atmos) -"JW" = ( -/obj/structure/railing/mapped, -/obj/machinery/atmospherics/pipe/zpipe/up/fuel{ - dir = 8 - }, -/turf/simulated/open, -/area/maintenance/seconddeck/aftport) -"JX" = ( -/turf/simulated/wall/r_wall/hull, -/area/maintenance/seconddeck/forestarboard) -"JY" = ( -/turf/simulated/wall/ocp_wall, -/area/engineering/fuelbay) -"Ka" = ( -/obj/machinery/door/blast/regular{ - dir = 8; - id_tag = "bsd"; - name = "Drive Containment" - }, -/obj/effect/floor_decal/industrial/hatch/yellow, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/engineering/bluespace) -"Kb" = ( -/obj/effect/shuttle_landmark/ert/deck3{ - name = "2nd Deck, Fore Starboard" - }, -/turf/space, -/area/space) -"Kc" = ( -/obj/machinery/atmospherics/pipe/manifold/visible/black{ - dir = 1; - icon_state = "map" - }, -/turf/simulated/wall/r_wall/prepainted, -/area/engineering/atmos) -"Kd" = ( -/obj/effect/engine_setup/smes, -/obj/machinery/power/smes/buildable/preset/torch/engine_main{ - RCon_tag = "Engine - Main" - }, -/obj/structure/cable{ - d2 = 8; - icon_state = "0-8" - }, -/turf/simulated/floor/plating, -/area/engineering/engine_smes) -"Kf" = ( -/turf/simulated/floor/reinforced/airless, -/area/vacant/prototype/engine) -"Kg" = ( -/obj/effect/floor_decal/industrial/warning, -/obj/structure/cable/green{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/turf/simulated/floor/plating, -/area/vacant/prototype/engine) -"Kh" = ( -/obj/random/obstruction, -/turf/simulated/floor/plating, -/area/maintenance/seconddeck/aftport) -"Kj" = ( -/obj/effect/floor_decal/industrial/warning/corner, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/vacant/prototype/engine) -"Kk" = ( -/obj/effect/floor_decal/techfloor{ - dir = 8; - icon_state = "techfloor_edges" - }, -/obj/machinery/light_switch{ - pixel_x = -24; - pixel_y = -24 - }, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/effect/floor_decal/techfloor/corner, -/turf/simulated/floor/tiled/techfloor/grid, -/area/engineering/engineering_bay) -"Kl" = ( -/obj/random_multi/single_item/poppy, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/disposal) -"Km" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/effect/catwalk_plated, -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/turf/simulated/floor/plating, -/area/hallway/primary/seconddeck) -"Kn" = ( -/obj/machinery/atmospherics/pipe/zpipe/down/cyan{ - dir = 1; - icon_state = "down" - }, -/obj/structure/lattice, -/obj/structure/railing/mapped{ - dir = 8; - icon_state = "railing0-1" - }, -/turf/simulated/open, -/area/maintenance/seconddeck/aftport) -"Ko" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/black{ - dir = 2; - icon_state = "intact" - }, -/obj/machinery/portable_atmospherics/canister/sleeping_agent, -/obj/machinery/camera/network/engineering{ - c_tag = "Atmospherics - South"; - dir = 8 - }, -/obj/effect/floor_decal/corner/white{ - dir = 4; - icon_state = "corner_white" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/engineering/atmos) -"Kp" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/catwalk, -/obj/structure/cable/green{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/turf/simulated/floor/plating, -/area/maintenance/seconddeck/aftport) -"Kv" = ( -/obj/structure/railing/mapped, -/turf/simulated/floor/plating, -/area/maintenance/seconddeck/forestarboard) -"Kx" = ( -/obj/machinery/portable_atmospherics/canister/hydrogen, -/obj/effect/floor_decal/industrial/outline/grey, -/obj/machinery/atmospherics/pipe/simple/hidden/red{ - dir = 5 - }, -/turf/simulated/floor/plating, -/area/engineering/atmos/storage) -"Ky" = ( -/turf/simulated/floor/plating, -/area/maintenance/seconddeck/aftport) -"KA" = ( -/obj/machinery/button/blast_door{ - id_tag = "bsdwindow"; - name = "Window Containment Doors"; - pixel_x = -6; - pixel_y = 26 - }, -/obj/machinery/button/blast_door{ - id_tag = "bsd"; - name = "Bluespace Drive Containment"; - pixel_x = 6; - pixel_y = 26 - }, -/obj/machinery/computer/modular/preset/engineering{ - dir = 4 - }, -/obj/structure/sign/warning/secure_area{ - dir = 4; - pixel_x = -32 - }, -/turf/simulated/floor/tiled/techfloor, -/area/engineering/shieldbay) -"KE" = ( -/obj/structure/table/rack, -/obj/random/maintenance/solgov, -/obj/random/maintenance/solgov, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/seconddeck/aftport) -"KI" = ( -/obj/machinery/atmospherics/portables_connector, -/obj/machinery/portable_atmospherics/powered/scrubber, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled/techfloor, -/area/engineering/atmos) -"KJ" = ( -/obj/machinery/atmospherics/pipe/simple/visible/green{ - dir = 4; - icon_state = "intact" - }, -/obj/machinery/atmospherics/binary/pump{ - dir = 1 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/engineering/atmos) -"KK" = ( -/obj/machinery/atmospherics/pipe/manifold/visible{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor, -/area/engineering/atmos) -"KP" = ( -/obj/machinery/atmospherics/pipe/simple/visible/cyan{ - dir = 4; - icon_state = "intact" - }, -/obj/machinery/meter, -/obj/machinery/light, -/turf/simulated/floor/tiled/techfloor, -/area/engineering/engine_room) -"KQ" = ( -/obj/machinery/door/firedoor, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/door/airlock/engineering{ - name = "Robotics Workshop" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/assembly/robotics) -"KT" = ( -/obj/structure/closet/crate, -/obj/random/single/cola, -/obj/random/tech_supply, -/obj/random/junk, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/seconddeck/central) -"KV" = ( -/obj/structure/sign/warning/compressed_gas, -/turf/simulated/wall/r_wall/prepainted, -/area/engineering/atmos) -"KZ" = ( -/obj/machinery/power/apc{ - dir = 4; - name = "east bump"; - pixel_x = 24 - }, -/obj/structure/cable/green, -/turf/simulated/floor/tiled, -/area/hallway/primary/seconddeck/fore) -"Lb" = ( -/obj/effect/shuttle_landmark/ninja/deck3{ - name = "2nd Deck, Aft Starboard" - }, -/turf/space, -/area/space) -"Lc" = ( -/obj/effect/floor_decal/industrial/warning, -/turf/simulated/floor/plating, -/area/vacant/prototype/engine) -"Ld" = ( -/obj/machinery/atmospherics/pipe/simple/visible/green{ - dir = 4; - icon_state = "intact" - }, -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 1; - icon_state = "warningcorner" - }, -/obj/machinery/atmospherics/pipe/simple/visible/cyan, -/turf/simulated/floor/tiled/techfloor, -/area/engineering/engine_room) -"Le" = ( -/obj/machinery/door/blast/regular{ - id_tag = "SupermatterPort"; - name = "Reactor Blast Door" - }, -/obj/effect/wallframe_spawn/reinforced_phoron, -/obj/machinery/atmospherics/pipe/simple/visible/fuel, -/turf/simulated/floor/reinforced/airless, -/area/engineering/engine_room) -"Lf" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8"; - pixel_x = 0 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/seconddeck/forestarboard) -"Lh" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply, -/obj/effect/catwalk_plated, -/turf/simulated/floor/plating, -/area/hallway/primary/seconddeck/fore) -"Li" = ( -/turf/simulated/floor/reinforced, -/area/vacant/prototype/engine) -"Lj" = ( -/obj/structure/cable/yellow, -/obj/machinery/power/terminal, -/obj/effect/floor_decal/industrial/warning, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/vacant/prototype/engine) -"Lk" = ( -/turf/simulated/wall/prepainted, -/area/storage/medical) -"Lm" = ( -/obj/structure/disposalpipe/segment{ - dir = 1; - icon_state = "pipe-c" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/cyan{ - dir = 6; - icon_state = "intact" - }, -/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply, -/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers, -/obj/effect/floor_decal/industrial/warning{ - dir = 1 - }, -/obj/structure/cable{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/structure/cable{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/seconddeck) -"Lp" = ( -/turf/simulated/wall/prepainted, -/area/synth/borg_upload) -"Lr" = ( -/obj/machinery/atmospherics/pipe/simple/visible/cyan{ - dir = 4; - icon_state = "intact" - }, -/turf/simulated/floor/tiled/techfloor, -/area/engineering/atmos) -"Ls" = ( -/turf/simulated/floor/reinforced/airless, -/area/space) -"Lt" = ( -/obj/machinery/portable_atmospherics/powered/scrubber, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/seconddeck/forestarboard) -"Lu" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark, -/area/engineering/storage) -"Lz" = ( -/obj/machinery/vending/engivend, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/newscaster{ - pixel_y = 32 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/engineering/engineering_bay) -"LD" = ( -/obj/machinery/computer/cryopod/robot{ - pixel_y = 30 - }, -/obj/machinery/recharge_station, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled/dark/monotile, -/area/assembly/chargebay) -"LF" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/turf/simulated/floor/tiled/dark, -/area/assembly/robotics) -"LJ" = ( -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/effect/floor_decal/industrial/hatch/yellow, -/turf/simulated/floor/tiled/monotile, -/area/engineering/foyer) -"LM" = ( -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/cyan{ - dir = 5; - icon_state = "intact" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 4 - }, -/obj/effect/catwalk_plated, -/turf/simulated/floor/plating, -/area/engineering/atmos) -"LN" = ( -/obj/structure/table/standard{ - name = "plastic table frame" - }, -/obj/machinery/cell_charger{ - pixel_y = 5 - }, -/obj/random/powercell, -/obj/item/cell/high, -/obj/item/cell/high, -/obj/machinery/light/small{ - dir = 8 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/storage/tech) -"LO" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 4 - }, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 8 - }, -/turf/simulated/floor/tiled/techfloor, -/area/engineering/drone_fabrication) -"LX" = ( -/obj/machinery/atmospherics/unary/outlet_injector{ - dir = 4; - frequency = 1441; - icon_state = "map_injector"; - id = "o2_in"; - use_power = 1 - }, -/turf/simulated/floor/reinforced/oxygen, -/area/engineering/atmos) -"LZ" = ( -/obj/machinery/vending/tool, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/requests_console{ - announcementConsole = 1; - department = "Engineering"; - departmentType = 3; - name = "Engineering RC"; - pixel_x = 0; - pixel_y = 32 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/engineering/engineering_bay) -"Ma" = ( -/obj/random/junk, -/turf/simulated/floor/plating, -/area/maintenance/seconddeck/aftport) -"Mb" = ( -/obj/structure/morgue{ - dir = 1; - icon_state = "morgue1" - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/medical/morgue) -"Mc" = ( -/obj/machinery/atmospherics/pipe/simple/visible/green{ - dir = 9; - icon_state = "intact" - }, -/obj/structure/disposalpipe/segment, -/obj/effect/floor_decal/industrial/warning{ - dir = 8; - icon_state = "warning" - }, -/turf/simulated/floor/tiled/techfloor, -/area/engineering/atmos) -"Md" = ( -/obj/machinery/atmospherics/pipe/simple/visible/green{ - dir = 4; - icon_state = "intact" - }, -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/visible/black, -/turf/simulated/floor/tiled/techfloor/grid, -/area/engineering/engine_room) -"Me" = ( -/obj/structure/table/rack, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/item/device/scanner/gas, -/obj/item/device/scanner/gas, -/obj/item/device/scanner/plant, -/obj/item/device/scanner/health, -/obj/structure/sign/warning/detailed{ - pixel_y = 32 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/storage/tech) -"Mf" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8"; - pixel_x = 0 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/seconddeck/forestarboard) -"Mg" = ( -/obj/effect/floor_decal/industrial/warning/corner, -/obj/machinery/atmospherics/unary/vent_pump/on, -/turf/simulated/floor/plating, -/area/vacant/prototype/engine) -"Mh" = ( -/obj/machinery/shield_diffuser, -/obj/effect/floor_decal/industrial/warning, -/turf/simulated/floor/reinforced/airless, -/area/vacant/prototype/engine) -"Mi" = ( -/obj/machinery/button/blast_door{ - desc = "A remote control-switch for the prototype exhaust."; - id_tag = "prototype_exhaust"; - name = "Chamber Exhaust"; - pixel_x = -11; - pixel_y = 29 - }, -/obj/machinery/button/blast_door{ - desc = "A remote control-switch for the engine containment doors."; - id_tag = "prototype_chamber_blast"; - name = "Chamber Containment"; - pixel_x = 0; - pixel_y = 29 - }, -/obj/machinery/button/blast_door{ - desc = "A remote control-switch for the observation shutters."; - id_tag = "fusion_observation"; - name = "Chamber Observation"; - pixel_x = 11; - pixel_y = 29 - }, -/obj/effect/floor_decal/corner/yellow{ - dir = 5; - icon_state = "corner_white" - }, -/turf/simulated/floor/tiled/steel_grid, -/area/vacant/prototype/control) -"Mj" = ( -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 8; - icon_state = "warningcorner" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply, -/turf/simulated/floor/plating, -/area/vacant/prototype/engine) -"Mk" = ( -/obj/structure/table/rack, -/obj/item/storage/toolbox/mechanical{ - pixel_x = 2; - pixel_y = 3 - }, -/obj/item/storage/toolbox/mechanical{ - pixel_x = -2; - pixel_y = -1 - }, -/obj/item/clothing/glasses/welding, -/obj/item/clothing/glasses/welding, -/obj/item/clothing/head/welding{ - pixel_x = -3; - pixel_y = 5 - }, -/obj/item/clothing/head/welding{ - pixel_x = -3; - pixel_y = 5 - }, -/obj/item/device/multitool{ - pixel_x = 3 - }, -/obj/item/device/multitool{ - pixel_x = 3 - }, -/turf/simulated/floor/tiled/techfloor, -/area/storage/research) -"Ml" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 1 - }, -/obj/structure/table/rack, -/obj/random/technology_scanner, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/seconddeck/aftport) -"Mm" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/simple/hidden/cyan{ - dir = 4; - icon_state = "intact" - }, -/obj/machinery/door/airlock/engineering{ - name = "Engineering" - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/steel_ridged, -/area/engineering/foyer) -"Mn" = ( -/obj/effect/floor_decal/industrial/hatch/yellow, -/obj/structure/ladder/up, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/seconddeck/aftport) -"Mo" = ( -/obj/machinery/atmospherics/pipe/manifold/visible/black{ - dir = 8 - }, -/obj/machinery/meter, -/turf/simulated/wall/r_wall/prepainted, -/area/engineering/atmos) -"Mt" = ( -/turf/simulated/wall/r_wall/prepainted, -/area/engineering/atmos/storage) -"Mu" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/effect/floor_decal/industrial/warning{ - dir = 1; - icon_state = "warning" - }, -/obj/structure/sign/warning/nosmoking_1{ - dir = 4; - pixel_x = -32 - }, -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 8 - }, -/turf/simulated/floor/tiled/steel_grid, -/area/hallway/primary/seconddeck/fore) -"Mx" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/universal{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark, -/area/engineering/storage) -"Mz" = ( -/obj/structure/sign/warning/pods/west{ - pixel_y = 32 - }, -/obj/machinery/light/small{ - dir = 1 - }, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/seconddeck/foreport) -"MD" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/catwalk, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/plating, -/area/maintenance/seconddeck/aftstarboard) -"ME" = ( -/obj/structure/sign/warning/vent_port, -/turf/simulated/wall/r_wall/hull, -/area/engineering/engine_room) -"MI" = ( -/obj/machinery/atmospherics/pipe/zpipe/down/fuel{ - dir = 8 - }, -/turf/simulated/open, -/area/maintenance/seconddeck/aftport) -"MJ" = ( -/obj/structure/table/rack, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/item/airlock_electronics, -/obj/item/airlock_electronics, -/obj/item/airlock_electronics, -/obj/item/airlock_electronics, -/obj/item/airlock_electronics, -/obj/item/module/power_control, -/obj/item/module/power_control, -/obj/item/airalarm_electronics, -/obj/item/airalarm_electronics, -/obj/machinery/atmospherics/unary/vent_pump/on, -/turf/simulated/floor/tiled/techfloor/grid, -/area/engineering/engineering_bay) -"MK" = ( -/obj/effect/floor_decal/techfloor, -/turf/simulated/floor/tiled/techfloor/grid, -/area/engineering/engineering_bay) -"MP" = ( -/obj/machinery/atmospherics/binary/pump, -/turf/simulated/floor/tiled/techfloor, -/area/engineering/engine_room) -"MQ" = ( -/obj/machinery/door/blast/regular/escape_pod{ - dir = 4; - icon_state = "pdoor1" - }, -/turf/simulated/floor/reinforced/airless, -/area/maintenance/seconddeck/foreport) -"MS" = ( -/obj/random/junk, -/turf/simulated/floor/airless, -/area/engineering/engine_room) -"MW" = ( -/obj/structure/table/rack, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/item/stock_parts/circuitboard/holodeckcontrol, -/obj/item/stock_parts/circuitboard/mech_recharger, -/obj/item/stock_parts/circuitboard/solar_control, -/turf/simulated/floor/tiled/techfloor/grid, -/area/storage/tech) -"Na" = ( -/obj/machinery/atmospherics/unary/outlet_injector{ - frequency = 1441; - id = "rust_injector"; - injecting = 1; - use_power = 1 - }, -/turf/simulated/floor/reinforced/airless, -/area/vacant/prototype/engine) -"Nd" = ( -/obj/machinery/power/terminal{ - dir = 1; - icon_state = "term" - }, -/obj/structure/cable{ - d2 = 4; - icon_state = "0-4" - }, -/obj/structure/cable{ - d2 = 8; - icon_state = "0-8" - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 1; - icon_state = "warning" - }, -/turf/simulated/floor/plating, -/area/engineering/engine_smes) -"Ne" = ( -/obj/effect/engine_setup/pump_max, -/obj/machinery/atmospherics/binary/pump/high_power/on{ - dir = 8; - icon_state = "map_on" - }, -/obj/machinery/light, -/turf/simulated/floor/tiled/techfloor/grid, -/area/engineering/engine_room) -"Nf" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8"; - pixel_x = 0 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/seconddeck/forestarboard) -"Ng" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/plating, -/area/vacant/prototype/engine) -"Nh" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 6 - }, -/turf/simulated/floor/reinforced/airless, -/area/vacant/prototype/engine) -"Ni" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 8 - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8"; - pixel_x = 0 - }, -/turf/simulated/floor/plating, -/area/vacant/prototype/engine) -"Nj" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/obj/machinery/access_button/airlock_interior{ - master_tag = "prototype_controller"; - pixel_x = 23; - pixel_y = 23 - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 8 - }, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/cable{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/turf/simulated/floor/tiled/techfloor, -/area/vacant/prototype/engine) -"Nk" = ( -/obj/structure/sign/directions/infirmary{ - dir = 1; - pixel_z = -6 - }, -/obj/structure/sign/directions/science{ - dir = 1; - pixel_z = 6 - }, -/turf/simulated/wall/prepainted, -/area/hallway/primary/seconddeck/center) -"Nl" = ( -/obj/structure/table/standard, -/obj/item/storage/toolbox/electrical, -/obj/machinery/alarm{ - dir = 8; - pixel_x = 25; - pixel_y = 0; - req_access = list(list("ACCESS_ENGINE_EQUIP","ACCESS_ATMOS")) - }, -/obj/effect/floor_decal/corner/yellow{ - dir = 6 - }, -/obj/effect/floor_decal/corner/yellow{ - dir = 8 - }, -/turf/simulated/floor/tiled/monotile, -/area/vacant/prototype/control) -"Nm" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/seconddeck/foreport) -"Nn" = ( -/obj/structure/railing/mapped{ - dir = 8; - icon_state = "railing0-1" - }, -/turf/simulated/floor/tiled/dark, -/area/medical/morgue) -"No" = ( -/obj/machinery/atmospherics/pipe/simple/visible/black{ - dir = 9 - }, -/turf/simulated/wall/r_wall/prepainted, -/area/engineering/atmos) -"Nq" = ( -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 8 - }, -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/techfloor, -/area/engineering/drone_fabrication) -"NA" = ( -/obj/structure/catwalk, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/plating, -/area/maintenance/seconddeck/forestarboard) -"NB" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/turf/simulated/floor/tiled/techfloor, -/area/storage/cargo) -"NC" = ( -/obj/machinery/atmospherics/unary/outlet_injector{ - dir = 1; - frequency = 1441; - icon_state = "map_injector"; - id = "waste_in"; - use_power = 1 - }, -/turf/simulated/floor/reinforced/airless, -/area/engineering/wastetank) -"ND" = ( -/obj/structure/sign/warning/airlock{ - dir = 1; - icon_state = "doors" - }, -/turf/simulated/wall/r_wall/hull, -/area/maintenance/auxsolarport) -"NF" = ( -/obj/structure/disposalpipe/segment{ - dir = 1; - icon_state = "pipe-c" - }, -/obj/structure/catwalk, -/obj/structure/cable/green{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/turf/simulated/floor/plating, -/area/maintenance/seconddeck/aftport) -"NG" = ( -/obj/random/obstruction, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/plating, -/area/maintenance/seconddeck/aftport) -"NH" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/catwalk, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/maintenance/seconddeck/aftport) -"NJ" = ( -/obj/structure/closet/crate, -/obj/effect/decal/cleanable/cobweb2, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/seconddeck/foreport) -"NL" = ( -/obj/effect/shuttle_landmark/lift/robotics_bottom, -/turf/simulated/floor/plating, -/area/assembly/robotics) -"NN" = ( -/obj/structure/closet/crate/med_crate/toxin, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/floor/tiled/techfloor, -/area/storage/medical) -"NQ" = ( -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/seconddeck/forestarboard) -"NS" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/seconddeck/forestarboard) -"NU" = ( -/obj/structure/table/standard{ - name = "plastic table frame" - }, -/obj/random/single/playing_cards, -/obj/structure/sign/warning/nosmoking_1{ - dir = 4; - icon_state = "nosmoking"; - pixel_x = -32 - }, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/disposal) -"NW" = ( -/obj/machinery/vending/assist, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/seconddeck/forestarboard) -"NX" = ( -/obj/machinery/door/airlock/glass/engineering{ - name = "Shield Bay" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/engineering/shieldbay) -"NY" = ( -/obj/effect/floor_decal/industrial/hatch/yellow, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/obj/structure/cable/cyan{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/engineering/bluespace) -"NZ" = ( -/obj/structure/table/steel, -/obj/item/stack/cable_coil{ - pixel_x = 3; - pixel_y = 3 - }, -/obj/item/stack/cable_coil{ - pixel_x = 3; - pixel_y = 3 - }, -/turf/simulated/floor/plating, -/area/engineering/engine_smes) -"Oa" = ( -/obj/structure/cable/green{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/catwalk, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/plating, -/area/maintenance/seconddeck/aftstarboard) -"Ob" = ( -/obj/structure/closet/crate/med_crate/burn, -/obj/effect/floor_decal/industrial/outline/grey, -/obj/item/device/radio/intercom{ - dir = 4; - pixel_x = -21 - }, -/turf/simulated/floor/tiled/techfloor, -/area/storage/medical) -"Oc" = ( -/obj/machinery/atmospherics/pipe/simple/visible/green, -/obj/machinery/atmospherics/binary/pump{ - dir = 8 - }, -/obj/effect/floor_decal/techfloor{ - dir = 4; - icon_state = "techfloor_edges" - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/tiled/techfloor/grid, -/area/engineering/atmos) -"Od" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 1; - icon_state = "warning" - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8"; - pixel_x = 0 - }, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/plating, -/area/engineering/engine_smes) -"Oe" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 8 - }, -/obj/structure/disposalpipe/segment{ - dir = 4; - icon_state = "pipe-c" - }, -/obj/structure/cable{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 8 - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/seconddeck/forestarboard) -"Of" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/disposalpipe/sortjunction{ - dir = 4; - name = "Drone Fabrication"; - sort_type = "Drone Fabrication" - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8"; - pixel_x = 0 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/catwalk, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/plating, -/area/maintenance/seconddeck/forestarboard) -"Og" = ( -/obj/effect/shuttle_landmark/escape_pod/start/pod11, -/obj/effect/wallframe_spawn/reinforced/titanium, -/turf/simulated/floor/plating, -/area/shuttle/escape_pod11/station) -"Oh" = ( -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 4 - }, -/turf/simulated/floor/reinforced/airless, -/area/vacant/prototype/engine) -"Oi" = ( -/obj/machinery/light/small{ - dir = 4 - }, -/obj/structure/table/standard, -/obj/item/book/manual/rust_engine, -/obj/effect/floor_decal/corner/yellow{ - dir = 6 - }, -/turf/simulated/floor/tiled/monotile, -/area/vacant/prototype/control) -"Oj" = ( -/obj/machinery/door/airlock/hatch/maintenance/bolted{ - frequency = 1379; - id_tag = "prototype_interior"; - name = "Fusion Maintenance" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/door/firedoor, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8"; - pixel_x = 0 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/vacant/prototype/control) -"Ok" = ( -/obj/effect/wallframe_spawn/reinforced_phoron, -/obj/machinery/door/blast/regular{ - dir = 4; - id_tag = "fusion_observation" - }, -/obj/machinery/door/firedoor, -/turf/simulated/floor/plating, -/area/vacant/prototype/control) -"Ol" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/red{ - dir = 9; - icon_state = "intact" - }, -/turf/simulated/floor/tiled/dark, -/area/engineering/storage) -"Om" = ( -/obj/item/stool, -/obj/machinery/camera/network/second_deck{ - c_tag = "Second Deck Hallway - Lift"; - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/seconddeck/elevator) -"On" = ( -/obj/machinery/atmospherics/unary/outlet_injector{ - dir = 8; - frequency = 1441; - icon_state = "map_injector"; - id = "h2_in"; - pixel_y = 0; - use_power = 1 - }, -/turf/simulated/floor/reinforced/hydrogen, -/area/engineering/atmos) -"Oo" = ( -/turf/simulated/floor/reinforced/carbon_dioxide, -/area/engineering/fuelbay) -"Os" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/catwalk, -/obj/structure/sign/warning/pods/east{ - dir = 4; - icon_state = "podseast"; - pixel_x = -32 - }, -/obj/structure/sign/warning/pods/west{ - dir = 4; - icon_state = "podswest"; - pixel_x = -44 - }, -/turf/simulated/floor/plating, -/area/hallway/primary/seconddeck/fore) -"Ot" = ( -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/structure/closet/secure_closet/engineering_torch, -/obj/structure/noticeboard{ - pixel_y = 32 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/engineering/engineering_bay) -"Ou" = ( -/obj/machinery/atmospherics/pipe/simple/visible/red, -/obj/machinery/atmospherics/pipe/simple/visible/cyan{ - dir = 4; - icon_state = "intact" - }, -/turf/simulated/floor/tiled/techfloor, -/area/engineering/atmos) -"Ow" = ( -/obj/effect/floor_decal/industrial/outline/grey, -/obj/machinery/atmospherics/portables_connector, -/obj/machinery/portable_atmospherics/powered/scrubber, -/turf/simulated/floor/plating, -/area/engineering/atmos/storage) -"Oy" = ( -/obj/effect/floor_decal/corner/yellow/half, -/turf/simulated/floor/tiled, -/area/engineering/foyer) -"OB" = ( -/obj/structure/sign/warning/vent_port, -/turf/simulated/wall/r_wall/hull, -/area/space) -"OC" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 4 - }, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 8 - }, -/turf/simulated/floor/tiled/techfloor, -/area/engineering/atmos) -"OE" = ( -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/structure/reagent_dispensers/watertank, -/obj/machinery/firealarm{ - dir = 8; - pixel_x = -24; - pixel_y = 0 - }, -/turf/simulated/floor/tiled, -/area/engineering/engineering_bay) -"OF" = ( -/obj/machinery/light{ - dir = 8 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/engineering/bluespace) -"OG" = ( -/obj/machinery/shield_diffuser, -/turf/simulated/floor/reinforced/airless, -/area/engineering/wastetank) -"OI" = ( -/obj/machinery/computer/modular/preset/engineering{ - dir = 4; - icon_state = "console" - }, -/obj/item/device/radio/intercom{ - dir = 1; - pixel_y = -28 - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/engineering/engine_smes) -"OK" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/maintenance, -/turf/simulated/floor/tiled/techfloor/grid, -/area/maintenance/seconddeck/aftport) -"OL" = ( -/obj/machinery/camera/network/engineering{ - c_tag = "Engineering - Bluespace Drive"; - dir = 4 - }, -/obj/machinery/alarm{ - frequency = 1439; - pixel_y = 23; - req_access = list(list("ACCESS_ENGINE_EQUIP","ACCESS_ATMOS")) - }, -/obj/structure/sign/warning/secure_area{ - dir = 4; - pixel_x = -32 - }, -/turf/simulated/floor/bluegrid, -/area/engineering/bluespace) -"OM" = ( -/turf/simulated/wall/r_wall/hull, -/area/maintenance/incinerator) -"OO" = ( -/obj/machinery/atmospherics/pipe/manifold4w/hidden, -/turf/simulated/floor/tiled/monotile, -/area/shuttle/escape_pod10/station) -"OR" = ( -/obj/machinery/camera/network/second_deck{ - c_tag = "Second Deck Hallway - Engineering"; - dir = 1 - }, -/obj/effect/floor_decal/corner/yellow/half, -/obj/effect/floor_decal/industrial/warning/corner, -/turf/simulated/floor/tiled, -/area/engineering/foyer) -"OS" = ( -/obj/effect/floor_decal/industrial/warning/corner, -/turf/simulated/floor/tiled/techfloor/grid, -/area/maintenance/seconddeck/aftport) -"OU" = ( -/obj/structure/sign/warning/compressed_gas{ - dir = 8; - icon_state = "hikpa" - }, -/obj/structure/sign/warning/fire, -/turf/simulated/wall/r_wall/prepainted, -/area/engineering/atmos) -"OV" = ( -/turf/simulated/wall/prepainted, -/area/hallway/primary/seconddeck/elevator) -"OW" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 8 - }, -/obj/machinery/atmospherics/valve/shutoff/fuel, -/turf/simulated/floor/plating, -/area/engineering/fuelbay) -"OY" = ( -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 4; - icon_state = "warningcorner" - }, -/obj/machinery/light/small, -/turf/simulated/floor/tiled/techfloor, -/area/hallway/primary/seconddeck/fore) -"Pa" = ( -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled/techfloor, -/area/engineering/engine_room) -"Pb" = ( -/obj/machinery/atmospherics/pipe/simple/visible/black{ - dir = 6 - }, -/turf/simulated/wall/r_wall/prepainted, -/area/engineering/atmos) -"Pd" = ( -/obj/machinery/power/terminal{ - dir = 1; - icon_state = "term" - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 1; - icon_state = "warning" - }, -/obj/structure/cable{ - d2 = 8; - icon_state = "0-8" - }, -/obj/structure/cable{ - d2 = 4; - icon_state = "0-4" - }, -/turf/simulated/floor/plating, -/area/engineering/engine_smes) -"Pe" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 8 - }, -/turf/simulated/floor/plating, -/area/vacant/prototype/engine) -"Pf" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 - }, -/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/hidden/scrubbers{ - dir = 9 - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/seconddeck/forestarboard) -"Pg" = ( -/obj/machinery/computer/fusion/gyrotron{ - dir = 4; - icon_state = "computer"; - initial_id_tag = "aux_fusion_plant"; - req_access = list("ACCESS_ENGINE_EQUIP") - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/floor_decal/corner/yellow{ - dir = 9 - }, -/obj/effect/floor_decal/corner/yellow, -/turf/simulated/floor/tiled/monotile, -/area/vacant/prototype/control) -"Ph" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 1 - }, -/turf/simulated/floor/reinforced/airless, -/area/vacant/prototype/engine) -"Pi" = ( -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 1; - icon_state = "warningcorner" - }, -/turf/simulated/floor/plating, -/area/vacant/prototype/engine) -"Pj" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply, -/obj/structure/window/reinforced, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/portable_atmospherics/canister/hydrogen, -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/engineering/engine_room) -"Pk" = ( -/obj/machinery/door/blast/regular/open{ - dir = 4; - id_tag = "EngineRadiatorViewport"; - name = "Engine Radiator Shutters" - }, -/obj/machinery/door/firedoor, -/obj/effect/wallframe_spawn/reinforced/hull, -/turf/simulated/floor/plating, -/area/engineering/engine_room) -"Pl" = ( -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/cyan, -/turf/simulated/floor/tiled/techfloor, -/area/engineering/atmos) -"Pm" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/cyan, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/effect/floor_decal/industrial/warning, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/cable{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/seconddeck) -"Pn" = ( -/obj/machinery/atmospherics/unary/vent_pump/tank{ - dir = 8; - external_pressure_bound = 0; - external_pressure_bound_default = 0; - icon_state = "map_vent_in"; - id_tag = "h2_out"; - initialize_directions = 1; - internal_pressure_bound = 4000; - internal_pressure_bound_default = 4000; - pressure_checks = 2; - pressure_checks_default = 2; - pump_direction = 0; - use_power = 1 - }, -/obj/machinery/air_sensor{ - id_tag = "tox_sensor" - }, -/turf/simulated/floor/reinforced/hydrogen, -/area/engineering/atmos) -"Po" = ( -/obj/structure/closet/coffin, -/turf/simulated/floor/wood/walnut, -/area/vacant/chapel) -"Pq" = ( -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 4 - }, -/turf/simulated/floor/tiled/monotile, -/area/shuttle/escape_pod10/station) -"Pr" = ( -/obj/structure/disposalpipe/segment, -/obj/structure/railing/mapped, -/obj/structure/railing/mapped{ - dir = 4; - icon_state = "railing0-1" - }, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/plating, -/area/maintenance/seconddeck/central) -"Pt" = ( -/obj/structure/closet/crate, -/obj/item/stock_parts/circuitboard/smes, -/obj/item/stock_parts/circuitboard/smes, -/obj/item/stock_parts/smes_coil/super_io, -/obj/item/stock_parts/smes_coil/super_io, -/obj/item/stock_parts/smes_coil/super_capacity, -/obj/item/stock_parts/smes_coil/super_capacity, -/obj/item/stock_parts/smes_coil, -/obj/item/stock_parts/smes_coil, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/turf/simulated/floor/plating, -/area/engineering/shieldbay) -"Py" = ( -/obj/effect/floor_decal/corner/lime{ - dir = 9 - }, -/obj/structure/ladder, -/obj/structure/sign/deck/second{ - dir = 4; - pixel_x = -32 - }, -/obj/effect/catwalk_plated, -/turf/simulated/floor/tiled/steel_grid, -/area/engineering/foyer) -"PA" = ( -/obj/structure/reagent_dispensers/fueltank, -/obj/effect/floor_decal/corner/yellow/mono, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/firealarm{ - dir = 4; - pixel_x = 26 - }, -/turf/simulated/floor/tiled/monotile, -/area/engineering/storage) -"PC" = ( -/turf/simulated/wall/r_wall/hull, -/area/storage/tech) -"PD" = ( -/turf/simulated/wall/prepainted, -/area/maintenance/disposal) -"PF" = ( -/obj/structure/closet/firecloset, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled, -/area/hallway/primary/seconddeck) -"PH" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/catwalk, -/obj/random/junk, -/turf/simulated/floor/plating, -/area/maintenance/seconddeck/aftport) -"PI" = ( -/obj/machinery/power/apc{ - dir = 8; - name = "west bump"; - pixel_x = -24 - }, -/obj/structure/cable/cyan{ - d2 = 2; - icon_state = "0-2" - }, -/obj/structure/cable/cyan, -/turf/simulated/floor/tiled/techfloor, -/area/engineering/shieldbay) -"PL" = ( -/obj/structure/table/steel, -/obj/item/device/destTagger, -/obj/item/stack/package_wrap/twenty_five, -/obj/item/device/radio/intercom{ - dir = 8; - pixel_x = 21 - }, -/obj/effect/floor_decal/techfloor{ - dir = 6; - icon_state = "techfloor_edges" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/engineering/engineering_bay) -"PO" = ( -/obj/structure/cable/green{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/random_multi/single_item/punitelly, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/seconddeck/forestarboard) -"PP" = ( -/obj/machinery/door/blast/regular/escape_pod{ - dir = 4; - icon_state = "pdoor1" - }, -/turf/simulated/floor/reinforced/airless, -/area/maintenance/seconddeck/forestarboard) -"PS" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 8 - }, -/obj/machinery/alarm{ - dir = 8; - pixel_x = 24 - }, -/turf/simulated/floor/tiled/dark, -/area/assembly/chargebay) -"PV" = ( -/obj/machinery/light/spot{ - dir = 8 - }, -/obj/item/device/radio/intercom{ - dir = 4; - pixel_x = -21 - }, -/obj/structure/table/steel, -/obj/item/tank/jetpack, -/obj/item/book/manual/atmospipes, -/obj/item/tank/oxygen_emergency_double, -/turf/simulated/floor/tiled/techfloor, -/area/engineering/atmos) -"PX" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 1 - }, -/obj/structure/cable{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/turf/simulated/floor/tiled/techfloor, -/area/engineering/shieldbay) -"PY" = ( -/obj/structure/grille, -/turf/simulated/floor/plating, -/area/engineering/engine_room) -"Qa" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 4 - }, -/obj/machinery/atmospherics/binary/pump, -/turf/simulated/floor/tiled/techfloor, -/area/engineering/atmos) -"Qb" = ( -/obj/machinery/door/firedoor, -/obj/effect/wallframe_spawn/reinforced_phoron, -/obj/machinery/meter, -/obj/machinery/atmospherics/pipe/simple/visible/green{ - dir = 4; - icon_state = "intact" - }, -/turf/simulated/floor/plating, -/area/engineering/atmos) -"Qd" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 1; - icon_state = "warning" - }, -/obj/structure/cable{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/turf/simulated/floor/plating, -/area/engineering/engine_smes) -"Qe" = ( -/turf/simulated/wall/r_wall/prepainted, -/area/vacant/prototype/control) -"Qf" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 1 - }, -/obj/structure/cable/yellow, -/turf/simulated/floor/plating, -/area/vacant/prototype/engine) -"Qg" = ( -/obj/item/device/radio/intercom{ - dir = 1; - pixel_y = -28 - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/turf/simulated/floor/tiled/steel_grid, -/area/vacant/prototype/control) -"Qh" = ( -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 1; - icon_state = "warningcorner" - }, -/turf/simulated/floor/reinforced/airless, -/area/vacant/prototype/engine) -"Qi" = ( -/obj/machinery/light, -/obj/effect/floor_decal/industrial/warning{ - dir = 4; - icon_state = "warning" - }, -/obj/machinery/camera/network/engine{ - c_tag = "Engine - Prototype Chamber Two"; - dir = 1 - }, -/turf/simulated/floor/plating, -/area/vacant/prototype/engine) -"Qj" = ( -/obj/machinery/door/airlock/hatch/maintenance/bolted{ - frequency = 1379; - id_tag = "prototype_exterior"; - name = "Fusion Maintenance" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/door/firedoor, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8"; - pixel_x = 0 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/vacant/prototype/control) -"Qn" = ( -/obj/machinery/atmospherics/omni/filter{ - tag_east = 2; - tag_south = 8; - tag_west = 1 - }, -/obj/effect/engine_setup/filter, -/turf/simulated/floor/tiled/techfloor, -/area/engineering/engine_room) -"Qo" = ( -/obj/machinery/atmospherics/unary/vent_pump/tank{ - dir = 8; - external_pressure_bound = 0; - external_pressure_bound_default = 0; - icon_state = "map_vent_in"; - id_tag = "fuel_out"; - initialize_directions = 1; - internal_pressure_bound = 8000; - internal_pressure_bound_default = 8000; - pressure_checks = 2; - pressure_checks_default = 2; - pump_direction = 0; - use_power = 1 - }, -/obj/machinery/air_sensor{ - id_tag = "fuel_sensor" - }, -/turf/simulated/floor/reinforced/carbon_dioxide, -/area/engineering/fuelbay) -"Qp" = ( -/obj/machinery/atmospherics/portables_connector{ - dir = 4 - }, -/obj/effect/floor_decal/corner/yellow/mono, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/portable_atmospherics/powered/scrubber, -/turf/simulated/floor/tiled/monotile, -/area/engineering/storage) -"Qt" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 4; - level = 2 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/seconddeck/elevator) -"Qu" = ( -/obj/machinery/atmospherics/pipe/simple/visible/black{ - dir = 4 - }, -/turf/simulated/wall/r_wall/prepainted, -/area/engineering/atmos) -"Qv" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/tele_beacon, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/turf/simulated/floor/tiled/dark, -/area/teleporter/seconddeck) -"Qw" = ( -/turf/simulated/wall/ocp_wall, -/area/engineering/wastetank) -"Qz" = ( -/obj/structure/reagent_dispensers/watertank, -/obj/machinery/power/apc{ - dir = 4; - name = "east bump"; - pixel_x = 24 - }, -/obj/structure/cable/green{ - d2 = 8; - icon_state = "0-8" - }, -/obj/effect/floor_decal/corner/yellow/mono, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled/monotile, -/area/engineering/storage) -"QA" = ( -/obj/machinery/vending/robotics{ - dir = 4; - products = list(/obj/item/reagent_containers/food/drinks/bottle/oiljug=5,/obj/item/stack/cable_coil=6,/obj/item/device/flash/synthetic=4,/obj/item/cell/standard=4,/obj/item/device/scanner/health=2,/obj/item/scalpel=1,/obj/item/circular_saw=1,/obj/item/tank/anesthetic=2,/obj/item/clothing/mask/breath/medical=5,/obj/item/screwdriver=2,/obj/item/crowbar=2) - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/requests_console{ - department = "Robotics"; - departmentType = 2; - name = "Robotics RC"; - pixel_x = -31 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/assembly/robotics) -"QB" = ( -/obj/structure/railing/mapped{ - dir = 1; - icon_state = "railing0-1" - }, -/obj/structure/railing/mapped{ - dir = 4; - icon_state = "railing0-1" - }, -/turf/simulated/open, -/area/maintenance/seconddeck/aftport) -"QC" = ( -/obj/structure/disposalpipe/segment, -/obj/structure/catwalk, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/turf/simulated/floor/plating, -/area/engineering/drone_fabrication) -"QD" = ( -/turf/simulated/wall/r_wall/prepainted, -/area/engineering/shieldbay) -"QE" = ( -/obj/machinery/light/small{ - dir = 1 - }, -/obj/random/junk, -/turf/simulated/floor/airless, -/area/engineering/engine_room) -"QI" = ( -/obj/structure/closet/toolcloset, -/obj/effect/floor_decal/corner/yellow/mono, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled/monotile, -/area/engineering/storage) -"QJ" = ( -/obj/structure/catwalk, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/maintenance/seconddeck/aftstarboard) -"QK" = ( -/obj/effect/floor_decal/industrial/warning, -/turf/simulated/floor/tiled/techfloor/grid, -/area/engineering/engineering_bay) -"QM" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/effect/catwalk_plated, -/turf/simulated/floor/plating, -/area/hallway/primary/seconddeck/fore) -"QN" = ( -/obj/effect/wallframe_spawn/reinforced_phoron, -/obj/machinery/door/firedoor, -/turf/simulated/floor/reinforced, -/area/engineering/wastetank) -"QQ" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/dark, -/area/assembly/robotics) -"QR" = ( -/obj/random_multi/single_item/punitelly, -/turf/simulated/floor/plating, -/area/maintenance/seconddeck/forestarboard) -"QT" = ( -/obj/structure/sign/warning/vent_port{ - dir = 1; - icon_state = "securearea" - }, -/turf/simulated/wall/r_wall/hull, -/area/space) -"QU" = ( -/obj/machinery/computer/modular/preset/engineering{ - dir = 8; - icon_state = "console" - }, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/steel_grid, -/area/engineering/engine_monitoring) -"QV" = ( -/obj/effect/floor_decal/corner/yellow/half{ - dir = 1; - icon_state = "bordercolorhalf" - }, -/obj/structure/bed/chair/padded/yellow{ - dir = 1; - icon_state = "chair_preview" - }, -/turf/simulated/floor/tiled/steel_grid, -/area/engineering/engineering_bay) -"QX" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/sign/warning/fire{ - dir = 4; - pixel_x = -32 - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/seconddeck/foreport) -"Rb" = ( -/obj/machinery/atmospherics/pipe/simple/visible/red{ - dir = 4; - icon_state = "intact" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/tiled/techfloor/grid, -/area/engineering/atmos) -"Rd" = ( -/obj/machinery/atmospherics/unary/outlet_injector{ - dir = 8; - frequency = 1438; - icon_state = "map_injector"; - id = "cooling_in"; - name = "Coolant Injector"; - pixel_y = 0; - power_rating = 30000; - use_power = 1; - volume_rate = 700 - }, -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/heat_exchanging/junction{ - dir = 1 - }, -/turf/simulated/floor/reinforced/airless, -/area/engineering/engine_room) -"Re" = ( -/obj/effect/floor_decal/industrial/warning, -/obj/effect/floor_decal/industrial/warning{ - dir = 1 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/assembly/chargebay) -"Rf" = ( -/obj/machinery/computer/fusion/core_control{ - dir = 4; - icon_state = "computer"; - initial_id_tag = "aux_fusion_plant"; - req_access = list("ACCESS_ENGINE_EQUIP") - }, -/obj/effect/floor_decal/corner/yellow{ - dir = 9 - }, -/turf/simulated/floor/tiled/monotile, -/area/vacant/prototype/control) -"Rg" = ( -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 8; - icon_state = "warningcorner" - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 4; - icon_state = "warning" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/plating, -/area/vacant/prototype/engine) -"Rh" = ( -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/turf/simulated/floor/reinforced/airless, -/area/vacant/prototype/engine) -"Ri" = ( -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8"; - pixel_x = 0 - }, -/turf/simulated/floor/plating, -/area/vacant/prototype/engine) -"Rj" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/turf/simulated/floor/tiled/steel_grid, -/area/vacant/prototype/control) -"Rk" = ( -/obj/effect/wallframe_spawn/reinforced_phoron, -/obj/machinery/door/blast/regular{ - dir = 4; - id_tag = "fusion_observation" - }, -/obj/machinery/door/firedoor, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/plating, -/area/vacant/prototype/control) -"Rl" = ( -/obj/machinery/atmospherics/pipe/simple/visible/green{ - dir = 4; - icon_state = "intact" - }, -/obj/machinery/computer/air_control{ - dir = 4; - frequency = 1441; - input_tag = "n2_in"; - name = "Nitrogen Supply Control"; - output_tag = "n2_out"; - sensor_name = "Nitrogen Supply Tank"; - sensor_tag = "n2_sensor" - }, -/obj/effect/floor_decal/corner/red{ - dir = 9; - icon_state = "corner_white" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/engineering/atmos) -"Rm" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/alarm{ - dir = 8; - pixel_x = 24 - }, -/turf/simulated/floor/plating, -/area/maintenance/seconddeck/forestarboard) -"Rn" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 4; - icon_state = "warning" - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 1; - icon_state = "warning" - }, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/engineering/shieldbay) -"Ro" = ( -/obj/machinery/atmospherics/unary/outlet_injector{ - dir = 8; - frequency = 1441; - icon_state = "map_injector"; - id = "fuel_in"; - pixel_y = 1; - use_power = 1 - }, -/turf/simulated/floor/reinforced/carbon_dioxide, -/area/engineering/fuelbay) -"Rq" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9; - pixel_y = 0 - }, -/obj/structure/disposalpipe/segment{ - dir = 8; - icon_state = "pipe-c" - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/seconddeck/aftstarboard) -"Ru" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/plating, -/area/maintenance/seconddeck/aftport) -"Rv" = ( -/obj/structure/sign/warning/high_voltage{ - dir = 8; - pixel_x = 32 - }, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/techfloor, -/area/engineering/shieldbay) -"Rx" = ( -/obj/machinery/portable_atmospherics/canister/oxygen, -/turf/simulated/floor/plating, -/area/maintenance/seconddeck/forestarboard) -"RE" = ( -/obj/effect/floor_decal/industrial/warning, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/seconddeck/aftstarboard) -"RF" = ( -/turf/simulated/floor/tiled/techfloor/grid, -/area/engineering/bluespace) -"RG" = ( -/obj/structure/closet/secure_closet/engineering_welding, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/item/device/radio/intercom{ - pixel_y = 23 - }, -/obj/machinery/light{ - dir = 1 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/engineering/engineering_bay) -"RH" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/turf/simulated/floor/tiled/dark, -/area/assembly/robotics) -"RI" = ( -/obj/effect/floor_decal/techfloor{ - dir = 1; - icon_state = "techfloor_edges" - }, -/obj/machinery/atmospherics/unary/vent_pump/on, -/turf/simulated/floor/tiled/techfloor/grid, -/area/engineering/engineering_bay) -"RJ" = ( -/turf/simulated/open, -/area/maintenance/seconddeck/aftstarboard) -"RK" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/effect/floor_decal/corner/yellow{ - dir = 1 - }, -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 1; - icon_state = "warningcorner" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/turf/simulated/floor/tiled/steel_grid, -/area/hallway/primary/seconddeck/fore) -"RL" = ( -/obj/structure/table/steel, -/obj/item/device/robotanalyzer{ - pixel_y = 4 - }, -/obj/item/reagent_containers/food/drinks/bottle/patron{ - pixel_x = -2; - pixel_y = 18 - }, -/obj/item/reagent_containers/food/drinks/bottle/oiljug{ - pixel_x = 9; - pixel_y = 15 - }, -/obj/item/stack/nanopaste{ - pixel_x = -8 - }, -/obj/machinery/alarm{ - pixel_y = 24 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/synth/borg_upload) -"RO" = ( -/obj/structure/table/rack, -/obj/random/maintenance/solgov, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/seconddeck/forestarboard) -"RP" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden{ - dir = 8; - icon_state = "map" - }, -/turf/simulated/floor/tiled/monotile, -/area/shuttle/escape_pod10/station) -"RR" = ( -/obj/structure/window/reinforced{ - dir = 1 - }, -/obj/structure/closet/emcloset, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/camera/network/engineering{ - c_tag = "Engineering - Monitoring Room"; - dir = 8 - }, -/turf/simulated/floor/tiled/steel_grid, -/area/engineering/engineering_bay) -"RT" = ( -/turf/simulated/wall/r_wall/hull, -/area/vacant/cargo) -"RV" = ( -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/structure/closet/secure_closet/engineering_torch, -/obj/machinery/light{ - dir = 1 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/engineering/engineering_bay) -"RX" = ( -/obj/structure/table/standard, -/obj/structure/bedsheetbin, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/machinery/light_switch{ - pixel_y = -24 - }, -/turf/simulated/floor/tiled/techfloor, -/area/storage/medical) -"RY" = ( -/obj/machinery/cryopod/robot{ - dir = 4 - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled/dark/monotile, -/area/assembly/chargebay) -"Sa" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 4; - level = 2 - }, -/turf/simulated/floor/tiled/dark, -/area/assembly/robotics) -"Sb" = ( -/obj/machinery/atmospherics/pipe/simple/visible/green, -/obj/machinery/atmospherics/portables_connector{ - dir = 4 - }, -/obj/effect/floor_decal/industrial/hatch/yellow, -/turf/simulated/floor/tiled/techfloor/grid, -/area/engineering/atmos) -"Sc" = ( -/turf/simulated/floor/tiled/techfloor/grid, -/area/engineering/atmos) -"Sd" = ( -/obj/structure/catwalk, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/machinery/light, -/obj/item/stool/padded, -/turf/simulated/floor/plating, -/area/engineering/engine_smes) -"Se" = ( -/turf/simulated/wall/ocp_wall, -/area/vacant/prototype/engine) -"Sf" = ( -/obj/structure/bed/chair/padded/yellow{ - dir = 8; - icon_state = "chair_preview" - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/turf/simulated/floor/tiled/steel_grid, -/area/vacant/prototype/control) -"Sg" = ( -/obj/structure/closet/crate/radiation, -/obj/item/stack/material/tritium/ten, -/obj/item/stack/material/tritium/ten, -/obj/machinery/camera/network/engine{ - c_tag = "Engine - Prototype Chamber One" - }, -/turf/simulated/floor/reinforced/airless, -/area/vacant/prototype/engine) -"Sh" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 4 - }, -/obj/effect/floor_decal/industrial/outline/blue, -/obj/machinery/portable_atmospherics/canister/hydrogen, -/turf/simulated/floor/tiled/techfloor/grid, -/area/engineering/engine_room) -"Si" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 8 - }, -/obj/item/device/radio/intercom{ - dir = 1; - pixel_y = -28 - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8"; - pixel_x = 0 - }, -/turf/simulated/floor/plating, -/area/vacant/prototype/engine) -"Sj" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 8 - }, -/turf/simulated/floor/tiled/steel_grid, -/area/vacant/prototype/control) -"Sk" = ( -/obj/effect/floor_decal/industrial/warning, -/obj/machinery/camera/network/engine{ - c_tag = "Engine - Core Interior"; - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/heat_exchanging/junction, -/turf/simulated/floor/reinforced/airless, -/area/engineering/engine_room) -"Sl" = ( -/obj/machinery/cryopod{ - dir = 1; - icon_state = "body_scanner_0" - }, -/obj/machinery/computer/cryopod{ - pixel_y = -32 - }, -/turf/simulated/floor/tiled/monotile, -/area/shuttle/escape_pod10/station) -"Sn" = ( -/obj/machinery/meter, -/obj/machinery/atmospherics/pipe/simple/visible/green{ - dir = 5 - }, -/obj/machinery/camera/network/engine{ - c_tag = "Engine - Port Area"; - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor, -/area/engineering/engine_room) -"So" = ( -/obj/machinery/atmospherics/pipe/simple/visible/yellow{ - dir = 9 - }, -/obj/effect/floor_decal/industrial/warning, -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 1; - icon_state = "warningcorner" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/engineering/engine_room) -"Sp" = ( -/obj/machinery/firealarm{ - dir = 1; - pixel_y = -24 - }, -/obj/structure/sign/warning/secure_area{ - dir = 4; - pixel_x = -32 - }, -/turf/simulated/floor/bluegrid, -/area/engineering/bluespace) -"Sr" = ( -/obj/structure/window/reinforced{ - dir = 1 - }, -/obj/machinery/computer/modular/preset/engineering, -/turf/simulated/floor/tiled/steel_grid, -/area/engineering/engineering_bay) -"Ss" = ( -/turf/simulated/floor/tiled/steel_ridged, -/area/hallway/primary/seconddeck/elevator) -"St" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/catwalk, -/obj/machinery/alarm{ - pixel_y = 24 - }, -/turf/simulated/floor/plating, -/area/maintenance/seconddeck/aftport) -"Sv" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/red{ - dir = 1; - icon_state = "map" - }, -/turf/simulated/floor/tiled/dark, -/area/engineering/storage) -"Sx" = ( -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 1; - icon_state = "warningcorner" - }, -/turf/simulated/floor/tiled/techfloor, -/area/hallway/primary/seconddeck/fore) -"SB" = ( -/obj/effect/shuttle_landmark/lift/medical_bottom, -/turf/simulated/floor/plating, -/area/medical/morgue) -"SC" = ( -/obj/structure/window/reinforced{ - dir = 4 - }, -/obj/structure/table/steel, -/obj/item/stack/material/plasteel{ - amount = 10 - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 6 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/engineering/engineering_bay) -"SD" = ( -/turf/simulated/open, -/area/hallway/primary/seconddeck/center) -"SH" = ( -/obj/machinery/atmospherics/valve/shutoff/supply, -/obj/item/device/radio/intercom{ - dir = 4; - pixel_x = -21 - }, -/obj/effect/floor_decal/corner/yellow/mono, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/effect/floor_decal/industrial/shutoff, -/obj/machinery/atmospherics/valve/shutoff/scrubbers, -/turf/simulated/floor/tiled/monotile, -/area/engineering/engineering_bay) -"SI" = ( -/obj/machinery/button/blast_door{ - id_tag = "engstorage"; - name = "Equipment Storage"; - pixel_y = -24 - }, -/obj/effect/floor_decal/corner/yellow/half, -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/cyan{ - dir = 4; - icon_state = "intact" - }, -/turf/simulated/floor/tiled, -/area/engineering/foyer) -"SM" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/catwalk, -/obj/structure/cable/green{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/turf/simulated/floor/plating, -/area/maintenance/seconddeck/aftport) -"SN" = ( -/obj/machinery/atmospherics/valve/digital/open{ - dir = 4; - icon_state = "map_valve1" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/engineering/atmos) -"SQ" = ( -/obj/effect/floor_decal/corner/yellow/diagonal, -/obj/random/junk, -/obj/structure/hygiene/toilet, -/turf/simulated/floor/tiled/freezer, -/area/maintenance/seconddeck/forestarboard) -"SR" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply, -/turf/simulated/floor/tiled/techfloor, -/area/engineering/shieldbay) -"SU" = ( -/obj/structure/sign/warning/pods/east{ - dir = 1; - icon_state = "podseast"; - pixel_y = -32 - }, -/obj/machinery/light/small, -/turf/simulated/floor/tiled/techfloor, -/area/hallway/primary/seconddeck/fore) -"SZ" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/door/airlock, -/turf/simulated/floor/tiled/steel_ridged, -/area/hallway/primary/seconddeck/elevator) -"Tb" = ( -/obj/machinery/atmospherics/pipe/manifold/visible/cyan{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/tiled/techfloor/grid, -/area/engineering/atmos) -"Tc" = ( -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/structure/table/steel, -/turf/simulated/floor/tiled/techfloor, -/area/engineering/drone_fabrication) -"Td" = ( -/obj/structure/catwalk, -/obj/structure/cable/cyan{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/turf/simulated/floor/plating, -/area/engineering/engine_smes) -"Te" = ( -/obj/structure/lattice, -/obj/structure/sign/solgov{ - pixel_y = -32 - }, -/turf/space, -/area/space) -"Tg" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/catwalk, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/maintenance/seconddeck/foreport) -"Th" = ( -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 8; - icon_state = "warningcorner" - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 1 - }, -/obj/structure/cable/yellow{ - d2 = 8; - icon_state = "0-8" - }, -/turf/simulated/floor/plating, -/area/vacant/prototype/engine) -"Tj" = ( -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 1; - icon_state = "warningcorner" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/plating, -/area/vacant/prototype/engine) -"Tk" = ( -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/wingrille_spawn/reinforced_phoron/full, -/obj/machinery/door/blast/regular/open{ - dir = 4; - icon_state = "pdoor0"; - id_tag = "prototype_chamber_blast" - }, -/turf/simulated/floor/reinforced/airless, -/area/vacant/prototype/engine) -"Tl" = ( -/obj/machinery/atmospherics/pipe/manifold/visible/yellow, -/obj/item/device/radio/intercom{ - dir = 1; - pixel_y = -28 - }, -/obj/effect/floor_decal/corner/blue{ - dir = 9; - icon_state = "corner_white" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/engineering/atmos) -"Tn" = ( -/obj/machinery/atmospherics/pipe/simple/visible/green{ - dir = 9; - icon_state = "intact" - }, -/turf/simulated/floor/tiled/techfloor, -/area/engineering/engine_room) -"To" = ( -/obj/machinery/air_sensor/engine{ - id_tag = "engine_sensor" - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/heat_exchanging, -/turf/simulated/floor/reinforced/airless, -/area/engineering/engine_room) -"Tp" = ( -/obj/structure/sign/warning/vacuum, -/turf/simulated/wall/r_wall/prepainted, -/area/engineering/engine_room) -"Tq" = ( -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/structure/closet/secure_closet/engineering_torch, -/obj/machinery/camera/network/engineering{ - c_tag = "Engineering - Locker Room" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/engineering/engineering_bay) -"Ts" = ( -/obj/structure/sign/warning/secure_area{ - dir = 1; - pixel_y = -32 - }, -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 8 - }, -/obj/effect/floor_decal/industrial/warning/corner, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8"; - pixel_x = 0 - }, -/turf/simulated/floor/tiled/steel_grid, -/area/hallway/primary/seconddeck) -"Tu" = ( -/obj/machinery/space_heater, -/obj/effect/floor_decal/corner/yellow/mono, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled/monotile, -/area/engineering/foyer) -"Tv" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, -/obj/effect/floor_decal/corner/yellow{ - dir = 5; - icon_state = "corner_white" - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply, -/turf/simulated/floor/tiled, -/area/hallway/primary/seconddeck) -"Tx" = ( -/obj/machinery/atmospherics/pipe/simple/visible/cyan{ - dir = 4; - icon_state = "intact" - }, -/obj/machinery/atmospherics/pipe/simple/visible/red, -/turf/simulated/floor/tiled/techfloor/grid, -/area/engineering/atmos) -"Tz" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/cyan{ - dir = 4; - icon_state = "intact" - }, -/turf/simulated/floor/tiled, -/area/engineering/foyer) -"TA" = ( -/obj/effect/floor_decal/industrial/warning, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8"; - pixel_x = 0 - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/seconddeck) -"TD" = ( -/obj/machinery/computer/rdconsole/robotics, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled/dark/monotile, -/area/assembly/robotics) -"TG" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 1; - icon_state = "warning" - }, -/turf/simulated/floor/plating, -/area/maintenance/seconddeck/aftport) -"TJ" = ( -/turf/simulated/wall/prepainted, -/area/engineering/shieldbay) -"TK" = ( -/obj/structure/grille, -/turf/simulated/floor/airless, -/area/engineering/engine_room) -"TL" = ( -/obj/structure/railing/mapped{ - dir = 8; - icon_state = "railing0-1" - }, -/obj/structure/railing/mapped{ - dir = 1; - icon_state = "railing0-1" - }, -/turf/simulated/floor/plating, -/area/maintenance/seconddeck/forestarboard) -"TV" = ( -/obj/structure/ladder, -/obj/effect/floor_decal/industrial/hatch/yellow, -/turf/simulated/floor/tiled/techfloor, -/area/storage/cargo) -"TW" = ( -/obj/structure/fireaxecabinet{ - pixel_y = -32 - }, -/turf/simulated/floor/tiled/techfloor, -/area/storage/medical) -"TX" = ( -/obj/structure/window/reinforced{ - dir = 1 - }, -/obj/machinery/computer/atmos_alert, -/turf/simulated/floor/tiled/steel_grid, -/area/engineering/engineering_bay) -"TY" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/disposalpipe/segment, -/obj/machinery/door/airlock/maintenance, -/obj/machinery/door/firedoor, -/turf/simulated/floor/tiled/techfloor/grid, -/area/maintenance/seconddeck/central) -"Ua" = ( -/obj/effect/wallframe_spawn/reinforced, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/plating, -/area/engineering/shieldbay) -"Uc" = ( -/obj/machinery/atmospherics/pipe/simple/visible/green, -/turf/simulated/floor/tiled/techfloor/grid, -/area/engineering/atmos) -"Ud" = ( -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/structure/catwalk, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/plating, -/area/engineering/engine_smes) -"Ue" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/disposalpipe/segment, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/seconddeck/forestarboard) -"Uf" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9; - pixel_y = 0 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/seconddeck/forestarboard) -"Ug" = ( -/obj/machinery/camera/network/engine{ - c_tag = "Engine - Prototype Chamber 01" - }, -/obj/effect/floor_decal/corner/yellow/half{ - dir = 1; - icon_state = "bordercolorhalf" - }, -/obj/machinery/computer/air_control{ - dir = 8; - input_tag = "rust_injector"; - name = "R-UST Gas Injection Controls"; - output_tag = null - }, -/obj/effect/floor_decal/corner/yellow, -/obj/effect/floor_decal/industrial/warning/corner, -/turf/simulated/floor/tiled/monotile, -/area/vacant/prototype/control) -"Uh" = ( -/obj/structure/cable/yellow{ - d2 = 4; - icon_state = "0-4" - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 1 - }, -/turf/simulated/floor/plating, -/area/vacant/prototype/engine) -"Uj" = ( -/obj/machinery/power/smes/buildable/preset/torch/engine_main{ - RCon_tag = "Prototype - Main" - }, -/obj/machinery/firealarm{ - dir = 1; - pixel_x = 0; - pixel_y = -24 - }, -/obj/structure/cable{ - d2 = 4; - icon_state = "0-4" - }, -/turf/simulated/floor/plating, -/area/vacant/prototype/engine) -"Ul" = ( -/obj/structure/table/rack, -/obj/item/storage/belt/medical, -/obj/item/storage/belt/medical, -/obj/item/storage/belt/medical, -/obj/item/storage/belt/medical, -/obj/item/clothing/accessory/stethoscope, -/obj/item/clothing/accessory/stethoscope, -/obj/item/clothing/accessory/stethoscope, -/obj/item/clothing/accessory/stethoscope, -/obj/item/device/flashlight/pen, -/obj/item/device/flashlight/pen, -/obj/item/device/flashlight/pen, -/obj/item/roller, -/obj/item/roller, -/obj/item/roller, -/obj/item/roller, -/turf/simulated/floor/tiled/techfloor, -/area/storage/medical) -"Um" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/seconddeck/aftstarboard) -"Un" = ( -/obj/machinery/atmospherics/tvalve/mirrored/digital{ - name = "phoron bypass valve" - }, -/turf/simulated/floor/tiled/techfloor, -/area/engineering/engine_room) -"Uo" = ( -/obj/machinery/mass_driver{ - dir = 4; - id_tag = "enginecore" - }, -/obj/machinery/power/supermatter, -/obj/effect/engine_setup/core, -/obj/machinery/atmospherics/pipe/simple/heat_exchanging, -/turf/simulated/floor/greengrid/airless, -/area/engineering/engine_room) -"Up" = ( -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 4 - }, -/turf/simulated/floor/tiled/monotile, -/area/shuttle/escape_pod11/station) -"Uz" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/effect/floor_decal/industrial/warning{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/cyan{ - dir = 8; - icon_state = "map" - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/dark, -/area/engineering/storage) -"UB" = ( -/obj/machinery/door/airlock/atmos{ - name = "Atmospherics Tank Storage"; - secured_wires = 1 - }, -/obj/machinery/door/firedoor, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/techfloor/grid, -/area/engineering/atmos/storage) -"UF" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/cyan{ - dir = 4; - icon_state = "intact" - }, -/turf/simulated/floor/tiled, -/area/engineering/foyer) -"UN" = ( -/obj/machinery/firealarm{ - dir = 4; - pixel_x = 26 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/seconddeck/fore) -"UQ" = ( -/obj/structure/table/rack{ - dir = 8 - }, -/obj/random/junk, -/obj/random/junk, -/obj/random/junk, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/seconddeck/foreport) -"UU" = ( -/obj/structure/sign/warning/nosmoking_1, -/turf/simulated/wall/r_wall/prepainted, -/area/engineering/atmos) -"UY" = ( -/obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/seconddeck/aftstarboard) -"Va" = ( -/obj/effect/wallframe_spawn/reinforced_phoron, -/obj/machinery/atmospherics/pipe/simple/visible/green{ - dir = 4; - icon_state = "intact" - }, -/obj/machinery/door/firedoor, -/obj/machinery/meter, -/turf/simulated/floor/plating, -/area/engineering/atmos) -"Vb" = ( -/obj/machinery/atmospherics/pipe/manifold/visible/cyan{ - dir = 4; - icon_state = "map" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/tiled/techfloor, -/area/engineering/atmos) -"Vc" = ( -/obj/machinery/atmospherics/omni/filter{ - tag_east = 1; - tag_north = 4; - tag_south = 2; - tag_west = 3 - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled/techfloor/grid, -/area/engineering/atmos) -"Ve" = ( -/obj/structure/table/rack, -/obj/item/stack/material/tritium{ - amount = 50 - }, -/obj/item/stack/material/deuterium/fifty, -/obj/structure/window/reinforced{ - dir = 8 - }, -/obj/item/stack/material/deuterium/fifty, -/obj/machinery/power/apc/super/critical{ - dir = 1; - is_critical = 1; - name = "north bump"; - pixel_y = 24 - }, -/obj/structure/cable/green{ - d2 = 2; - icon_state = "0-2" - }, -/turf/simulated/floor/reinforced/airless, -/area/vacant/prototype/engine) -"Vf" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/light_switch{ - pixel_x = 22; - pixel_y = 24 - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 4 - }, -/turf/simulated/floor/tiled/monotile, -/area/vacant/prototype/control) -"Vg" = ( -/obj/machinery/door/airlock/hatch/maintenance/bolted, -/turf/simulated/floor/reinforced, -/area/vacant/prototype/engine) -"Vh" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/obj/structure/cable/green{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/steel_grid, -/area/vacant/prototype/control) -"Vi" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/obj/structure/cable{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/turf/simulated/floor/plating, -/area/vacant/prototype/engine) -"Vj" = ( -/obj/machinery/light/small, -/obj/machinery/alarm{ - dir = 1; - icon_state = "alarm0"; - pixel_y = -22 - }, -/obj/structure/closet/radiation, -/turf/simulated/floor/tiled/techfloor, -/area/vacant/prototype/control) -"Vl" = ( -/obj/machinery/atmospherics/pipe/simple/visible/cyan{ - dir = 4; - icon_state = "intact" - }, -/obj/machinery/door/blast/regular/open{ - dir = 4; - id_tag = "EngineRadiatorViewport"; - name = "Engine Radiator Shutters" - }, -/obj/machinery/door/firedoor, -/obj/effect/wallframe_spawn/reinforced/hull, -/turf/simulated/floor/plating, -/area/engineering/engine_room) -"Vm" = ( -/obj/structure/railing/mapped{ - dir = 8; - icon_state = "railing0-1" - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 8 - }, -/obj/random/trash, -/turf/simulated/floor/plating, -/area/maintenance/seconddeck/aftstarboard) -"Vn" = ( -/obj/machinery/atmospherics/pipe/manifold/visible/black{ - dir = 1; - icon_state = "map" - }, -/turf/simulated/floor/tiled/techfloor, -/area/engineering/engine_room) -"Vo" = ( -/obj/machinery/atmospherics/pipe/simple/heat_exchanging, -/turf/simulated/floor/greengrid/airless, -/area/engineering/engine_room) -"Vq" = ( -/turf/simulated/wall/r_wall/hull, -/area/engineering/wastetank) -"Vr" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 4; - icon_state = "warning" - }, -/turf/simulated/floor/reinforced/airless, -/area/maintenance/seconddeck/foreport) -"Vu" = ( -/obj/machinery/portable_atmospherics/powered/scrubber, -/turf/simulated/floor/tiled/techfloor/grid, -/area/maintenance/seconddeck/aftport) -"VB" = ( -/obj/effect/floor_decal/techfloor/corner, -/obj/effect/floor_decal/techfloor{ - dir = 1; - icon_state = "techfloor_edges" - }, -/obj/effect/floor_decal/corner_techfloor_grid, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 1 - }, -/turf/simulated/floor/tiled/techfloor, -/area/storage/tech) -"VC" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 8 - }, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/monotile, -/area/engineering/engineering_bay) -"VE" = ( -/obj/machinery/door/airlock/engineering{ - name = "Robotics" - }, -/obj/machinery/door/firedoor, -/turf/simulated/floor/tiled/dark, -/area/assembly/robotics) -"VK" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/catwalk, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/maintenance/seconddeck/aftport) -"VL" = ( -/obj/structure/sign/warning/radioactive{ - dir = 4; - icon_state = "radiation" - }, -/turf/simulated/wall/r_wall/prepainted, -/area/vacant/prototype/control) -"VM" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/effect/floor_decal/industrial/warning, -/turf/simulated/floor/tiled, -/area/hallway/primary/seconddeck/fore) -"VP" = ( -/obj/structure/closet/radiation, -/obj/effect/floor_decal/industrial/outline/grey, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/techfloor, -/area/storage/medical) -"VR" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/seconddeck/fore) -"VT" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 4; - icon_state = "warning" - }, -/turf/simulated/floor/reinforced/airless, -/area/maintenance/seconddeck/forestarboard) -"VX" = ( -/obj/effect/floor_decal/industrial/outline/grey, -/obj/structure/reagent_dispensers/watertank, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/seconddeck/central) -"Wa" = ( -/obj/effect/floor_decal/industrial/outline/grey, -/obj/structure/closet/crate/freezer/rations, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/seconddeck/central) -"Wb" = ( -/obj/machinery/atmospherics/pipe/simple/visible/cyan, -/turf/simulated/floor/tiled/techfloor, -/area/engineering/engine_room) -"Wd" = ( -/obj/structure/cable/cyan{ - d2 = 8; - icon_state = "0-8" - }, -/obj/machinery/power/sensor{ - name = "Powernet Sensor - Engine Subgrid"; - name_tag = "Engine Subgrid" - }, -/obj/machinery/power/apc/super/critical{ - dir = 2; - is_critical = 1; - name = "south bump"; - pixel_y = -24 - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/engineering/engine_smes) -"We" = ( -/obj/effect/floor_decal/techfloor, -/obj/effect/floor_decal/techfloor/corner{ - dir = 4; - icon_state = "techfloor_corners" - }, -/obj/effect/floor_decal/techfloor/corner{ - dir = 1; - icon_state = "techfloor_corners" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/storage/tech) -"Wf" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/hallway/primary/seconddeck/fore) -"Wg" = ( -/obj/machinery/shield_diffuser, -/turf/simulated/floor/reinforced/airless, -/area/vacant/prototype/engine) -"Wh" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/effect/floor_decal/corner/yellow{ - dir = 8 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 8 - }, -/turf/simulated/floor/tiled/steel_grid, -/area/hallway/primary/seconddeck/fore) -"Wi" = ( -/obj/effect/floor_decal/corner/yellow/diagonal, -/obj/machinery/door/airlock/civilian{ - name = "Shower" - }, -/turf/simulated/floor/tiled/freezer, -/area/maintenance/seconddeck/forestarboard) -"Wj" = ( -/obj/machinery/embedded_controller/radio/airlock/access_controller{ - dir = 1; - id_tag = "prototype_controller"; - name = "Fusion Maintenance Access Controller"; - pixel_x = 0; - pixel_y = -21; - req_access = list("ACCESS_ENGINE_EQUIP"); - tag_exterior_door = "prototype_exterior"; - tag_interior_door = "prototype_interior" - }, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 1 - }, -/turf/simulated/floor/tiled/steel_grid, -/area/vacant/prototype/control) -"Wk" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 8 - }, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 4; - level = 2 - }, -/turf/simulated/floor/tiled/techfloor, -/area/engineering/drone_fabrication) -"Wl" = ( -/obj/effect/shuttle_landmark/escape_pod/start/pod10, -/obj/effect/wallframe_spawn/reinforced/titanium, -/turf/simulated/floor/plating, -/area/shuttle/escape_pod10/station) -"Wm" = ( -/obj/effect/floor_decal/techfloor{ - dir = 1; - icon_state = "techfloor_edges" - }, -/obj/effect/floor_decal/techfloor, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 8 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/storage/tech) -"Wn" = ( -/obj/machinery/atmospherics/omni/filter{ - tag_east = 8; - tag_north = 1; - tag_west = 2 - }, -/obj/effect/engine_setup/filter, -/turf/simulated/floor/tiled/techfloor, -/area/engineering/engine_room) -"Wo" = ( -/obj/machinery/door/blast/regular{ - dir = 4; - icon_state = "pdoor1"; - id_tag = "EngineVent"; - name = "Reactor Vent"; - p_open = 0 - }, -/obj/machinery/shield_diffuser, -/turf/simulated/floor/reinforced/airless, -/area/engineering/engine_room) -"Wp" = ( -/turf/simulated/wall/r_wall/hull, -/area/maintenance/seconddeck/foreport) -"Wq" = ( -/obj/machinery/atmospherics/pipe/simple/visible/green, -/obj/machinery/atmospherics/pipe/simple/visible/cyan{ - dir = 4; - icon_state = "intact" - }, -/obj/structure/disposalpipe/segment, -/obj/effect/floor_decal/industrial/warning{ - dir = 8; - icon_state = "warning" - }, -/turf/simulated/floor/tiled/techfloor, -/area/engineering/atmos) -"Wr" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 1; - icon_state = "warning" - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/seconddeck/fore) -"Ws" = ( -/obj/machinery/computer/modular/preset/engineering{ - dir = 4 - }, -/obj/machinery/firealarm{ - dir = 8; - pixel_x = -24; - pixel_y = 0 - }, -/obj/machinery/light_switch{ - pixel_x = -22; - pixel_y = 24 - }, -/turf/simulated/floor/tiled/techfloor, -/area/engineering/atmos) -"Wv" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/monotile, -/area/engineering/engineering_bay) -"Wx" = ( -/obj/effect/floor_decal/industrial/warning, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/turf/simulated/floor/tiled/steel_grid, -/area/hallway/primary/seconddeck) -"Wy" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/cyan, -/obj/structure/catwalk, -/obj/structure/cable/green{ - d2 = 8; - icon_state = "0-8" - }, -/obj/machinery/power/apc{ - dir = 4; - name = "east bump"; - pixel_x = 24 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/plating, -/area/maintenance/seconddeck/aftport) -"Wz" = ( -/obj/effect/floor_decal/techfloor{ - dir = 1; - icon_state = "techfloor_edges" - }, -/obj/effect/floor_decal/techfloor, -/turf/simulated/floor/tiled/techfloor/grid, -/area/storage/tech) -"WA" = ( -/obj/effect/floor_decal/techfloor, -/obj/effect/floor_decal/industrial/warning, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark, -/area/teleporter/seconddeck) -"WB" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/catwalk, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/plating, -/area/maintenance/seconddeck/central) -"WC" = ( -/obj/structure/bed/chair/shuttle, -/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{ - dir = 2; - id_tag = "escape_pod_11_pump" - }, -/turf/simulated/floor/tiled/monotile, -/area/shuttle/escape_pod11/station) -"WF" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8"; - pixel_x = 0 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/obj/structure/railing/mapped{ - dir = 8; - icon_state = "railing0-1" - }, -/obj/structure/railing/mapped{ - dir = 1; - icon_state = "railing0-1" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/turf/simulated/floor/plating, -/area/maintenance/seconddeck/aftstarboard) -"WG" = ( -/obj/structure/sign/warning/compressed_gas{ - dir = 8; - icon_state = "hikpa" - }, -/obj/machinery/atmospherics/pipe/simple/visible/yellow{ - dir = 9 - }, -/turf/simulated/wall/r_wall/prepainted, -/area/engineering/atmos) -"WH" = ( -/obj/machinery/button/blast_door{ - id_tag = "Skynet_launch"; - name = "Charging Bay Door Control"; - pixel_x = 24; - pixel_y = 22 - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 1 - }, -/obj/machinery/light_switch{ - pixel_x = 24; - pixel_y = 32 - }, -/obj/structure/cable/green{ - d2 = 8; - icon_state = "0-8" - }, -/obj/machinery/power/apc{ - dir = 4; - name = "west bump"; - pixel_x = 24 - }, -/turf/simulated/floor/tiled/dark, -/area/assembly/chargebay) -"WI" = ( -/obj/machinery/atmospherics/pipe/simple/visible/green{ - dir = 4; - icon_state = "intact" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/engineering/atmos) -"WJ" = ( -/obj/machinery/light/spot, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/atmospherics/unary/heater{ - dir = 1; - icon_state = "heater_0" - }, -/turf/simulated/floor/tiled/techfloor, -/area/engineering/atmos) -"WK" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/seconddeck/aftstarboard) -"WM" = ( -/obj/machinery/mech_recharger, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled/dark/monotile, -/area/assembly/chargebay) -"WN" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/techfloor, -/area/engineering/drone_fabrication) -"WP" = ( -/obj/effect/wallframe_spawn/reinforced, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/plating, -/area/engineering/engine_smes) -"WR" = ( -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/cyan, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/engineering{ - name = "Atmospherics" - }, -/turf/simulated/floor/tiled/steel_ridged, -/area/engineering/atmos) -"WT" = ( -/obj/structure/table/rack{ - dir = 8 - }, -/obj/random/maintenance/solgov, -/obj/random/maintenance/solgov, -/obj/random/maintenance/solgov, -/obj/machinery/firealarm{ - pixel_y = 21 - }, -/turf/simulated/floor/tiled/techfloor, -/area/vacant/cargo) -"WU" = ( -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/engineering/engine_room) -"WX" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/dark, -/area/assembly/robotics) -"Xa" = ( -/obj/machinery/door/airlock/engineering{ - name = "Second Deck Substation" - }, -/obj/machinery/door/firedoor, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8"; - pixel_x = 0 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/maintenance/substation/seconddeck) -"Xb" = ( -/obj/machinery/atmospherics/pipe/simple/visible, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor, -/area/engineering/atmos) -"Xc" = ( -/obj/machinery/atmospherics/pipe/simple/visible/red{ - dir = 4; - icon_state = "intact" - }, -/obj/machinery/atmospherics/valve/digital/open, -/turf/simulated/floor/tiled/techfloor/grid, -/area/engineering/atmos) -"Xe" = ( -/obj/machinery/fusion_fuel_compressor, -/obj/machinery/light{ - dir = 1 - }, -/turf/simulated/floor/reinforced/airless, -/area/vacant/prototype/engine) -"Xf" = ( -/obj/machinery/shield_diffuser, -/obj/effect/floor_decal/industrial/warning{ - dir = 1; - icon_state = "warning" - }, -/turf/simulated/floor/reinforced/airless, -/area/vacant/prototype/engine) -"Xg" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 4; - icon_state = "warning" - }, -/turf/simulated/floor/reinforced/airless, -/area/vacant/prototype/engine) -"Xh" = ( -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 8; - icon_state = "warningcorner" - }, -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/plating, -/area/vacant/prototype/engine) -"Xi" = ( -/obj/machinery/firealarm{ - dir = 1; - pixel_x = 0; - pixel_y = -24 - }, -/turf/simulated/floor/tiled/steel_grid, -/area/vacant/prototype/control) -"Xk" = ( -/obj/machinery/door/blast/regular{ - dir = 1; - id_tag = "disvent"; - name = "Incinerator Vent" - }, -/obj/machinery/shield_diffuser, -/turf/simulated/floor/reinforced, -/area/maintenance/incinerator) -"Xl" = ( -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/seconddeck/forestarboard) -"Xm" = ( -/obj/effect/floor_decal/techfloor{ - dir = 1; - icon_state = "techfloor_edges" - }, -/obj/effect/floor_decal/techfloor, -/obj/machinery/light/small{ - dir = 4; - pixel_y = 0 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/storage/tech) -"Xn" = ( -/obj/machinery/atmospherics/portables_connector{ - dir = 4; - icon_state = "map_connector" - }, -/obj/machinery/portable_atmospherics/canister/empty/phoron, -/turf/simulated/floor/tiled/techfloor/grid, -/area/engineering/engine_room) -"Xo" = ( -/obj/machinery/door/airlock/hatch{ - icon_state = "closed"; - id_tag = "engine_access_hatch"; - locked = 1 - }, -/obj/machinery/atmospherics/pipe/simple/visible/green{ - dir = 4; - icon_state = "intact" - }, -/turf/simulated/floor/reinforced/airless, -/area/engineering/engine_room) -"Xp" = ( -/obj/machinery/atmospherics/pipe/simple/visible/green{ - dir = 5 - }, -/obj/machinery/light/spot, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/obj/effect/floor_decal/techfloor{ - dir = 8; - icon_state = "techfloor_edges" - }, -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/engineering/atmos) -"Xr" = ( -/obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/floor/tiled/dark/monotile, -/area/medical/morgue) -"Xt" = ( -/obj/machinery/atmospherics/pipe/simple/visible/green, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/obj/effect/floor_decal/techfloor{ - dir = 8; - icon_state = "techfloor_edges" - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/engineering/atmos) -"Xv" = ( -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/structure/table/rack{ - dir = 8 - }, -/obj/item/clothing/mask/gas/half, -/obj/item/clothing/mask/gas/half, -/obj/item/clothing/mask/gas/half, -/obj/item/clothing/mask/gas/half, -/obj/item/clothing/mask/gas/half, -/obj/item/clothing/mask/gas/half, -/obj/item/clothing/mask/gas/half, -/obj/item/tank/oxygen, -/obj/item/tank/oxygen, -/obj/item/tank/nitrogen, -/obj/item/tank/nitrogen, -/turf/simulated/floor/tiled, -/area/engineering/engineering_bay) -"Xx" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/door/firedoor, -/turf/simulated/floor/tiled/techfloor/grid, -/area/vacant/prototype/control) -"Xy" = ( -/obj/structure/sign/warning/high_voltage{ - dir = 4; - icon_state = "shock" - }, -/turf/simulated/wall/prepainted, -/area/maintenance/seconddeck/forestarboard) -"Xz" = ( -/obj/structure/catwalk, -/obj/effect/floor_decal/industrial/warning{ - dir = 8; - icon_state = "warning" - }, -/turf/simulated/floor/plating, -/area/engineering/atmos/storage) -"XA" = ( -/turf/simulated/floor/tiled, -/area/hallway/primary/seconddeck/fore) -"XB" = ( -/obj/structure/closet/emcloset, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/seconddeck/forestarboard) -"XI" = ( -/obj/structure/catwalk, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 8 - }, -/turf/simulated/floor/plating, -/area/maintenance/seconddeck/central) -"XJ" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/seconddeck/forestarboard) -"XO" = ( -/obj/machinery/r_n_d/circuit_imprinter, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled/dark/monotile, -/area/assembly/robotics) -"XP" = ( -/turf/simulated/wall/prepainted, -/area/assembly/robotics) -"XU" = ( -/obj/effect/floor_decal/industrial/warning/corner, -/obj/effect/floor_decal/industrial/warning{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/techfloor, -/area/engineering/drone_fabrication) -"XV" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/unary/vent_pump/on, -/obj/effect/floor_decal/techfloor{ - dir = 8; - icon_state = "techfloor_edges" - }, -/obj/effect/floor_decal/techfloor{ - dir = 4; - icon_state = "techfloor_edges" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/storage/tech) -"XX" = ( -/obj/machinery/door/blast/shutters{ - density = 0; - dir = 2; - icon_state = "shutter0"; - id_tag = "Skynet_launch"; - name = "Mech Bay"; - opacity = 0 - }, -/obj/machinery/door/firedoor, -/turf/simulated/floor/tiled/dark/monotile, -/area/assembly/chargebay) -"XZ" = ( -/obj/structure/sign/warning/high_voltage{ - dir = 8; - icon_state = "shock" - }, -/turf/simulated/wall/prepainted, -/area/maintenance/seconddeck/forestarboard) -"Yc" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor, -/area/engineering/atmos) -"Ye" = ( -/obj/structure/disposalpipe/segment{ - dir = 1; - icon_state = "pipe-c" - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8"; - pixel_x = 0 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 1 - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/seconddeck/forestarboard) -"Yf" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 5 - }, -/turf/simulated/floor/reinforced/airless, -/area/vacant/prototype/engine) -"Yg" = ( -/obj/structure/table/rack, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/item/stack/material/glass/reinforced{ - amount = 50 - }, -/obj/item/stack/material/glass/reinforced{ - amount = 50 - }, -/obj/item/stack/material/glass/reinforced{ - amount = 50 - }, -/obj/item/stack/material/glass{ - amount = 50 - }, -/obj/item/stack/material/glass{ - amount = 50 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/engineering/engineering_bay) -"Yh" = ( -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/plating, -/area/vacant/prototype/engine) -"Yj" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 1 - }, -/turf/simulated/floor/plating, -/area/vacant/prototype/engine) -"Yn" = ( -/obj/machinery/atmospherics/binary/pump{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/black{ - dir = 2; - icon_state = "intact" - }, -/obj/effect/floor_decal/corner/black{ - dir = 6; - icon_state = "corner_white" - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled/techfloor/grid, -/area/engineering/atmos) -"Yo" = ( -/obj/item/clothing/gloves/insulated, -/obj/item/storage/toolbox/electrical, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/structure/table/steel, -/obj/machinery/firealarm{ - pixel_y = 21 - }, -/obj/random/masks, -/turf/simulated/floor/plating, -/area/engineering/shieldbay) -"Yp" = ( -/obj/structure/catwalk, -/obj/effect/floor_decal/industrial/warning{ - dir = 8; - icon_state = "warning" - }, -/obj/machinery/firealarm{ - pixel_y = 21 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/universal{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/engineering/atmos/storage) -"Yq" = ( -/obj/machinery/atmospherics/pipe/manifold/visible/red, -/turf/simulated/floor/tiled/techfloor/grid, -/area/engineering/atmos) -"Yu" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/effect/floor_decal/techfloor{ - dir = 4; - icon_state = "techfloor_edges" - }, -/obj/effect/floor_decal/techfloor/corner{ - dir = 8; - icon_state = "techfloor_corners" - }, -/obj/effect/floor_decal/techfloor/corner{ - dir = 1; - icon_state = "techfloor_corners" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/storage/tech) -"Yy" = ( -/turf/simulated/wall/r_wall/prepainted, -/area/teleporter/seconddeck) -"Yz" = ( -/obj/structure/catwalk, -/obj/structure/cable/green{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/turf/simulated/floor/plating, -/area/maintenance/seconddeck/forestarboard) -"YG" = ( -/obj/machinery/atmospherics/pipe/simple/visible/green, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 1 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/engineering/atmos) -"YI" = ( -/obj/structure/sign/warning/high_voltage, -/turf/simulated/wall/prepainted, -/area/engineering/engine_smes) -"YL" = ( -/obj/machinery/atmospherics/pipe/simple/heat_exchanging/junction{ - dir = 4; - icon_state = "intact" - }, -/obj/structure/lattice, -/obj/structure/sign/warning/fire{ - dir = 4; - pixel_x = -32 - }, -/turf/space, -/area/space) -"YQ" = ( -/turf/simulated/wall/prepainted, -/area/engineering/wastetank) -"YU" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/unary/tank, -/obj/structure/sign/warning/secure_area{ - pixel_y = 24 - }, -/turf/simulated/floor/tiled/techfloor, -/area/engineering/atmos) -"YV" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/visible/yellow, -/turf/simulated/floor/tiled/techfloor, -/area/engineering/atmos) -"Za" = ( -/obj/machinery/atmospherics/pipe/simple/visible/cyan{ - dir = 9; - icon_state = "intact" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/engineering/atmos) -"Zb" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 1; - icon_state = "warning" - }, -/obj/machinery/atmospherics/pipe/simple/visible{ - dir = 10; - icon_state = "intact" - }, -/turf/simulated/floor/tiled/techfloor, -/area/engineering/atmos) -"Zc" = ( -/obj/machinery/atmospherics/pipe/simple/visible/green{ - dir = 4; - icon_state = "intact" - }, -/obj/machinery/firealarm{ - dir = 1; - pixel_x = 0; - pixel_y = -24 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 1; - icon_state = "warning" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/engineering/atmos) -"Ze" = ( -/obj/machinery/atmospherics/pipe/simple/visible/green{ - dir = 9; - icon_state = "intact" - }, -/obj/effect/floor_decal/techfloor{ - dir = 4; - icon_state = "techfloor_edges" - }, -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9; - pixel_y = 0 - }, -/obj/structure/sign/warning/secure_area{ - dir = 1; - pixel_y = -32 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/engineering/atmos) -"Zf" = ( -/obj/machinery/power/apc/super/critical{ - dir = 1; - is_critical = 1; - name = "north bump"; - pixel_y = 24 - }, -/obj/structure/cable/cyan{ - d2 = 4; - icon_state = "0-4" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/obj/effect/floor_decal/industrial/outline/blue, -/obj/machinery/portable_atmospherics/canister/carbon_dioxide, -/turf/simulated/floor/tiled/techfloor/grid, -/area/engineering/engine_room) -"Zg" = ( -/obj/machinery/atmospherics/pipe/simple/visible/fuel{ - dir = 4 - }, -/obj/machinery/alarm{ - pixel_y = 24 - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/seconddeck/aftport) -"Zh" = ( -/obj/machinery/atmospherics/unary/vent_pump/engine{ - dir = 8; - external_pressure_bound = 100; - external_pressure_bound_default = 0; - icon_state = "map_vent_in"; - id_tag = "cooling_out"; - initialize_directions = 1; - pressure_checks = 1; - pressure_checks_default = 1; - pump_direction = 0; - use_power = 1 - }, -/obj/effect/floor_decal/industrial/warning/corner, -/obj/machinery/atmospherics/pipe/simple/heat_exchanging{ - dir = 6; - icon_state = "intact" - }, -/turf/simulated/floor/reinforced/airless, -/area/engineering/engine_room) -"Zi" = ( -/obj/structure/cable/yellow{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/structure/cable/yellow{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 1 - }, -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 1 - }, -/turf/simulated/floor/plating, -/area/vacant/prototype/engine) -"Zj" = ( -/obj/machinery/light/small{ - dir = 1 - }, -/obj/machinery/camera/network/second_deck{ - c_tag = "Second Deck - Drone Fabrication" - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 8 - }, -/obj/machinery/power/terminal{ - dir = 8 - }, -/obj/structure/cable/green{ - d2 = 4; - icon_state = "0-4" - }, -/turf/simulated/floor/tiled/techfloor, -/area/engineering/drone_fabrication) -"Zk" = ( -/obj/structure/lattice, -/obj/structure/sign/solgov{ - pixel_y = 32 - }, -/turf/space, -/area/space) -"Zl" = ( -/obj/structure/disposalpipe/segment, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/door/airlock/maintenance, -/obj/machinery/door/firedoor, -/turf/simulated/floor/tiled/techfloor/grid, -/area/maintenance/seconddeck/forestarboard) -"Zm" = ( -/obj/structure/bed/chair/padded/yellow{ - dir = 8; - icon_state = "chair_preview" - }, -/obj/item/device/radio/intercom{ - pixel_y = 23 - }, -/obj/machinery/atmospherics/unary/vent_pump/on, -/turf/simulated/floor/tiled/techfloor, -/area/engineering/shieldbay) -"Zn" = ( -/obj/machinery/atmospherics/omni/filter{ - tag_east = 2; - tag_north = 1; - tag_south = 0; - tag_west = 6 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/engineering/engine_room) -"Zo" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 1; - icon_state = "warning" - }, -/obj/machinery/atmospherics/pipe/simple/heat_exchanging{ - dir = 5; - icon_state = "intact" - }, -/turf/simulated/floor/reinforced/airless, -/area/engineering/engine_room) -"Zp" = ( -/obj/item/ammo_magazine/pistol/small/empty, -/turf/simulated/floor/plating, -/area/vacant/armory) -"Zr" = ( -/obj/structure/railing/mapped{ - dir = 8; - icon_state = "railing0-1" - }, -/turf/simulated/floor/plating, -/area/maintenance/seconddeck/forestarboard) -"Zs" = ( -/turf/simulated/wall/r_wall/hull, -/area/engineering/engine_room) -"Zt" = ( -/obj/effect/floor_decal/industrial/warning, -/turf/simulated/floor/tiled, -/area/hallway/primary/seconddeck/fore) -"Zu" = ( -/turf/simulated/wall/prepainted, -/area/storage/tech) -"ZB" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 4; - level = 2 - }, -/turf/simulated/floor/tiled/dark, -/area/engineering/storage) -"ZC" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/sign/warning/nosmoking_1{ - dir = 4; - icon_state = "nosmoking"; - pixel_x = -32 - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/seconddeck/foreport) -"ZF" = ( -/obj/structure/table/rack, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/item/stock_parts/circuitboard/message_monitor, -/turf/simulated/floor/tiled/techfloor/grid, -/area/storage/tech) -"ZG" = ( -/turf/simulated/wall/prepainted, -/area/assembly/chargebay) -"ZH" = ( -/obj/structure/sign/warning/radioactive{ - dir = 4; - icon_state = "radiation" - }, -/turf/simulated/wall/prepainted, -/area/vacant/prototype/control) -"ZI" = ( -/obj/machinery/atmospherics/pipe/simple/visible/cyan, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/turf/simulated/floor/tiled/techfloor, -/area/engineering/atmos) -"ZJ" = ( -/obj/structure/catwalk, -/obj/structure/cable/green{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/plating, -/area/maintenance/seconddeck/aftstarboard) -"ZL" = ( -/obj/structure/catwalk, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, -/turf/simulated/floor/plating, -/area/maintenance/seconddeck/aftstarboard) -"ZS" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/effect/catwalk_plated, -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 1 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/plating, -/area/hallway/primary/seconddeck) -"ZT" = ( -/obj/machinery/meter, -/obj/machinery/atmospherics/pipe/manifold4w/visible, -/turf/simulated/floor/tiled/techfloor, -/area/engineering/atmos) -"ZV" = ( -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/seconddeck/foreport) -"ZX" = ( -/obj/effect/floor_decal/industrial/outline/grey, -/obj/structure/reagent_dispensers/fueltank, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/seconddeck/central) -"ZZ" = ( -/obj/machinery/light/small, -/turf/simulated/floor/airless, -/area/engineering/engine_room) - -(1,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(2,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(3,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(4,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(5,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(6,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(7,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(8,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(9,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(10,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(11,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(12,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(13,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(14,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(15,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(16,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(17,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(18,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(19,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(20,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(21,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(22,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(23,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(24,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(25,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(26,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(27,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(28,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(29,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(30,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -Gb -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(31,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(32,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(33,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(34,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(35,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(36,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(37,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(38,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(39,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(40,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -qw -qw -qF -Xf -Wg -Mh -qF -qw -qw -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(41,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -qw -qw -qw -qw -Yf -Xg -Nh -qw -qw -qw -qw -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(42,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -qw -qw -qw -Se -Se -bg -bg -bg -Se -Se -qw -qw -qw -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(43,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -qw -mc -ue -Se -Kf -mg -mg -mg -Kf -Se -ue -dj -qw -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -FS -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(44,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -qw -Lc -ad -Ej -Kf -Fg -Xg -Oh -Kf -Ej -eH -qj -qw -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(45,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -qw -md -ad -Ej -Kf -Gg -eh -Ph -Kf -Ej -eH -rj -qw -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(46,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -hf -aa -aa -aa -aa -qw -Lc -ad -Ej -Kf -Hg -mh -Qh -Kf -Ej -eH -qj -qw -aa -aa -aa -aa -wb -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(47,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -JX -JX -VT -VT -VT -VT -VT -qw -ud -Pe -Se -Kf -Kf -qh -Rh -Na -yQ -wS -Pi -qw -Vr -Vr -Vr -Vr -Vr -Wp -Wp -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(48,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -JX -JX -JX -PP -PP -PP -PP -PP -qw -wu -me -Se -Vg -xw -xw -Tk -Vg -Se -me -Aj -qw -MQ -MQ -MQ -MQ -MQ -Wp -Wp -Wp -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(49,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -Kb -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -JX -JX -JX -fU -fU -Og -fU -fU -qw -wu -Mg -Rg -Fh -Jg -Li -Th -Jj -Tj -Yj -Aj -qw -vt -vt -Wl -vt -vt -Wp -Wp -Wp -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(50,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -JX -JX -JX -fU -xe -hz -ac -fU -qw -mb -mb -Ve -Gh -Kg -et -Uh -Kj -Qi -mb -mb -qw -vt -ol -wl -Sl -vt -Wp -Wp -Wp -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(51,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -JX -JX -JX -fU -gG -eB -io -fU -qw -mb -mb -Sg -Hh -Xh -Ni -Zi -Lj -Uj -mb -mb -qw -vt -wi -RP -xW -vt -Wp -Wp -Wp -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(52,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -JX -JX -JX -fU -gH -Up -ip -fU -JX -mb -mb -Xe -Ih -Yh -Ri -vj -Mj -Si -mb -mb -Wp -vt -wj -Pq -xX -vt -Wp -Wp -Wp -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(53,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -JX -JX -JX -fU -WC -fn -iq -fU -JX -OY -mb -ew -Qf -Ng -Vi -Gj -Nj -ay -mb -ub -Wp -vt -wk -OO -hw -vt -Wp -Wp -Wp -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(54,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -JX -JX -JX -fU -gH -Up -hz -jk -jQ -kA -Qe -Ok -Ok -Rk -Qe -Qe -Oj -Qe -Qe -uc -uL -vv -wl -Pq -xX -vt -Wp -Wp -Wp -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(55,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -JX -JX -JX -fU -gI -hA -ir -fU -JX -Sx -yf -mf -Rf -Pg -Qe -Hj -Hl -Vj -Qe -Bq -Wp -vt -wm -xf -xY -vt -Wp -Wp -Wp -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(56,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -JX -JX -JX -fU -gJ -hB -is -fU -JX -xR -yf -Mi -Sf -Qg -Qe -qi -Qj -VL -Qe -ZV -Wp -vt -wn -xg -xZ -vt -Wp -Wp -Wp -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(57,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -JX -JX -JX -fU -gK -gK -gK -fU -JX -xR -yf -Gf -Jh -ri -vk -Ij -Rj -Wj -yf -ZV -Wp -vt -wo -wo -wo -vt -Wp -Wp -Wp -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(58,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -JX -JX -JX -fU -gL -gL -gL -fU -JX -xR -yf -Hf -Vh -Gi -yf -bl -Sj -Xi -yf -ZV -Wp -vt -wp -wp -wp -vt -Wp -Wp -Wp -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(59,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -JX -JX -JX -JX -JX -JX -JX -JX -JX -SU -yf -Ug -Vf -vi -yf -Fi -Oi -Nl -yf -Mz -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(60,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -JX -JX -JX -JX -iR -gM -Rx -bd -bI -tj -xR -yf -yf -Xx -qk -ZH -yf -yf -yf -yf -ZV -uM -UQ -nc -wq -xh -ya -Wp -Wp -Wp -Wp -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(61,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -JX -JX -JX -JX -fd -bd -bd -QR -bd -GY -Gs -Wf -Os -Mu -Wh -Ji -RK -VM -rt -sv -sv -sv -sv -uN -pi -xi -pi -pi -pi -Wp -Wp -Wp -Wp -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(62,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -JX -JX -JX -JX -ex -fe -fY -be -hC -it -bI -yx -xR -xR -wT -iM -xS -Lh -Zt -gZ -ZV -ZV -GH -ZV -dX -aK -bt -aK -aK -pi -pi -Wp -Wp -Wp -Wp -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(63,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -JX -JX -JX -cH -bE -bE -bE -bE -bE -cH -bI -pA -kD -lo -mi -Nk -kD -VR -nk -Lp -Lp -kP -Lp -Lp -dX -aK -bH -cu -aK -zA -pi -Be -Wp -Wp -Wp -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(64,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -JX -JX -JX -Hz -ey -ff -fZ -gN -gO -iu -Kv -ci -kD -lp -mj -mX -nP -qm -XA -Lp -tD -iW -jB -Lp -dX -aK -Zp -cF -aK -nc -GZ -Bf -Wp -Wp -Wp -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(65,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -JX -JX -JX -JX -dO -dq -EQ -dq -dr -dq -iv -Kv -ci -kD -rs -mk -mY -kD -id -XA -Lp -iS -lu -jC -Lp -dX -aK -cb -cK -aK -zB -pi -pi -Wp -Wp -Wp -Wp -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(66,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -JX -JX -JX -JX -wR -dq -dr -fg -ga -gO -hD -iu -jn -ci -kD -SD -lq -mZ -kD -GP -XA -Lp -RL -Au -jD -Lp -dX -aK -cl -cM -aK -zC -pi -pi -pi -Wp -Wp -Wp -Wp -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(67,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -JX -JX -JX -Po -dr -Hz -bE -se -bE -bE -bE -cH -bI -ci -kD -kD -kD -kD -kD -AI -XA -Lp -iT -Au -jE -Lp -dX -aK -aK -yg -yg -yg -yg -yg -pi -Cm -Wp -Wp -Wp -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(68,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -JX -JX -JX -cG -ds -oV -bE -fi -gb -dP -GF -zw -zw -Uf -NQ -bI -JH -JL -pJ -QM -XA -Lp -Lp -Io -Lp -Lp -uQ -sv -uN -yg -go -zD -Aw -yg -pi -pi -Wp -Wp -Wp -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(69,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -JX -JX -JX -JX -bE -bE -bE -bE -fi -gc -gP -Ye -jo -XB -NQ -NQ -GY -Wr -UN -XA -hO -KZ -qv -sC -WN -qv -oh -vz -kL -dX -yg -yU -zE -Ax -EU -EU -EU -EU -EU -OM -Ef -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -jx -"} -(70,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -Ls -Ls -Ib -cd -cI -Xl -Xl -hM -fi -gb -dP -If -OV -OV -OV -OV -OV -OV -OV -nQ -yO -qv -qv -rA -XU -qv -qv -qv -qv -dX -yg -yV -zF -Ay -Bh -BK -Cn -CP -Xk -lk -ky -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -jx -"} -(71,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -JX -JX -JX -ce -ce -bI -oO -bI -bI -bI -bI -Lf -OV -jp -jp -jp -jp -jp -na -Om -Jt -qv -IM -rB -Bu -ug -uS -uS -qv -dX -yg -yW -zG -Az -Bi -th -Co -CQ -EV -lk -ky -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -jx -"} -(72,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -wb -uZ -lk -lk -bF -cf -cJ -du -dQ -ez -fk -gd -gR -Mf -OV -jp -jp -jp -jp -jp -Ss -Qt -rm -qv -Zj -tk -Nq -tk -Wk -vA -qv -dX -yg -yX -zH -AA -Bh -BL -Cn -CR -Xk -lk -ky -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -jx -"} -(73,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -JX -JX -bb -JX -bI -bI -bI -bI -eA -fl -dt -Xl -Nf -OV -jp -jp -jp -jp -jp -Ss -pI -Am -iP -rD -sE -tl -QC -JE -vB -qv -dX -yg -yY -zI -cT -EU -EU -EU -EU -EU -OM -OM -Dp -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -jx -"} -(74,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -JX -JX -JX -bG -RO -NQ -dv -bI -bI -bI -bI -lE -Nf -OV -jp -jp -jp -jp -jp -Ss -IA -Fm -qv -rE -Hp -Hq -LO -sF -vC -qv -dX -yg -yg -zJ -yg -nc -BM -Cp -CS -Dq -Wp -Wp -Wp -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -jx -"} -(75,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -JX -JX -JX -Lt -vH -Ip -NS -XJ -XJ -NA -NA -Yz -Nf -OV -jp -jp -jp -jp -jp -OV -dn -Gm -qv -Tc -Tc -tm -vb -rF -rF -qv -xp -yh -ZC -zK -QX -sv -sv -sv -sv -Dr -Wp -Wp -Wp -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(76,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -JX -JX -JX -JX -bI -vR -bI -XZ -bI -bI -bI -bI -gS -Nf -OV -OV -OV -OV -OV -OV -OV -nT -SZ -qv -qv -qv -qv -qv -qv -qv -qv -nc -yi -yi -zL -AD -nc -nc -lr -yi -lr -Wp -Wp -Wp -Wp -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(77,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -JX -JX -JX -bc -PO -ch -cL -cN -Rm -cN -fm -bI -gT -Of -ix -ix -ix -ix -ix -ix -ix -Zl -Im -mr -ru -Nm -Nm -Nm -Nm -Nm -Nm -Nm -Nm -Nm -zM -AE -ls -BN -lr -pi -pi -pi -Wp -Wp -Wp -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -FT -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(78,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -JX -JX -JX -NW -vR -ci -bI -Xy -bI -bI -bI -bI -po -Nf -bd -bd -hM -bd -bd -bd -bd -bI -ZS -gn -nc -pi -AM -ZV -pi -ZV -yi -xh -pi -pi -pi -AF -Bk -Bk -Bk -CT -Bk -pi -Wp -Wp -Wp -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(79,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -JX -JX -JX -Zr -wx -cj -EX -EZ -Oe -Ue -Ue -Ue -Ue -Pf -DH -be -bI -bI -bI -fv -bI -bI -fQ -gi -nc -ZV -ZV -pi -oh -ww -zO -zO -zO -zO -zO -AF -mT -BO -Cq -CU -mT -pi -Wp -Wp -Wp -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(80,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -af -af -af -af -af -af -af -af -af -af -af -af -af -JX -JX -JX -bd -xr -EY -EY -Fa -dS -eC -Xl -Xl -XP -XP -XP -XP -XP -oq -bI -fw -fB -bI -fR -gm -nc -nc -NJ -sK -fS -nc -zO -qB -yl -zb -zO -AF -mT -BP -Cr -CV -mT -pi -Wp -Wp -Wp -af -af -af -af -af -af -af -af -af -af -af -af -af -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(81,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -af -ag -ag -aa -aa -ag -aa -aa -aa -ag -aa -aa -ag -aa -aC -aC -bf -bf -bf -bf -bf -dT -eD -TL -Zr -XP -vO -vO -NL -XP -SQ -Wi -fx -fC -bI -fV -xj -rO -jV -jV -jV -jV -jV -Ow -Kx -yl -zb -zO -AF -Bk -BQ -Cs -Cs -Bk -DR -Wp -fT -aa -ag -aa -aa -ag -aa -aa -aa -ag -aa -aa -ag -ag -af -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(82,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -af -ag -aj -ak -aq -ag -aj -ak -aq -ag -aj -ak -aq -aa -aC -aC -Wa -bJ -bJ -cO -bf -dU -eE -rU -XP -XP -vO -vO -vO -XP -XP -XP -XP -XP -XP -pL -gr -jV -jV -OL -OF -Sp -jV -Mt -Yp -Xz -Xz -zO -AF -mT -BR -Ct -CW -mT -pi -Wp -fT -aa -EA -EC -EI -ag -EA -EC -EI -ag -EA -EC -EI -ag -af -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(83,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -af -aa -aj -al -aq -ag -aj -al -aq -ag -aj -al -aq -ag -aC -aC -bh -VX -ZX -cP -bf -es -eT -bI -XP -bY -cv -dk -dk -eR -QA -su -fy -ee -XP -ge -gD -ha -yo -yo -RF -yo -yo -Mt -Iz -Jb -Jb -UB -AG -Bl -BS -Cu -CX -mT -lG -Wp -fT -ag -EA -ED -EI -ag -EA -ED -EI -ag -EA -ED -EI -aa -af -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(84,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -af -ag -aj -al -aq -ag -aj -al -aq -ag -aj -al -aq -ag -ag -aC -bi -JG -JG -cQ -bf -dW -eG -bK -XP -bZ -pr -cz -nW -Sa -nW -Sa -fz -fF -XP -gg -gD -ha -RF -RF -no -RF -vF -jV -wz -oy -ze -zO -Tg -mT -BT -pN -CY -mT -yq -Wp -ag -ag -EA -ED -EI -ag -EA -ED -EI -ag -EA -ED -EI -ag -af -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(85,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -af -ag -aj -al -aq -ag -aj -al -aq -ag -aj -al -aq -ag -ag -aC -bj -bL -ck -dY -bf -dW -eG -bK -XP -cr -cz -cz -dK -eU -ng -RH -QQ -fG -XP -ge -gD -ha -tH -bq -NY -cg -ct -jV -wz -oy -zO -zO -AH -Bk -Bk -Cv -Bk -Bk -pi -Wp -ag -ag -EA -ED -EI -ag -EA -ED -EI -ag -EA -ED -EI -ag -af -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(86,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -af -aa -aj -al -aq -ag -aj -al -aq -ag -aj -al -aq -aa -aa -aC -bf -bf -bf -cR -bf -dW -eG -bK -XP -XP -cA -cz -cz -eV -XO -qt -QQ -fK -XP -ge -gn -jV -jV -vy -Ka -vy -jV -jV -QD -QD -QD -QD -VK -mT -BU -Cr -mT -pi -pi -Wp -aa -aa -EA -ED -EI -ag -EA -ED -EI -ag -EA -ED -EI -aa -af -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(87,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -af -aa -aj -al -aq -ag -aj -al -aq -ag -aj -al -aq -aa -aa -aC -aC -KT -dY -dY -dY -dW -eG -bK -bw -XP -su -dm -fD -XP -TD -LF -nq -WX -KQ -Tv -xj -PF -jV -jV -tq -jV -jV -wV -wC -qy -pF -QD -VK -mT -BV -Cr -mT -Ds -Wp -Wp -aa -aa -EA -ED -EI -ag -EA -ED -EI -ag -EA -ED -EI -aa -af -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(88,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -af -ag -aj -al -aq -ag -aj -al -aq -ag -aj -al -aq -ag -ag -ag -aC -aC -bK -IN -dw -dW -eG -bK -bw -XP -cx -dF -ee -ZG -ZG -VE -IL -IL -ZG -pL -rW -rO -TJ -KA -tt -PI -Ua -uA -Rn -yr -FG -QD -VK -mT -BW -Cr -Bk -Wp -Wp -ag -ag -ag -EA -ED -EI -ag -EA -ED -EI -ag -EA -ED -EI -ag -af -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(89,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -af -ag -aj -al -aq -ag -aj -al -aq -ag -aj -al -aq -ag -ag -ag -ag -aC -aC -bK -bK -dW -eG -bK -bx -XP -XP -XP -XP -ZG -RY -Re -WM -WM -ZG -pK -rV -TJ -TJ -Zm -SR -PX -NX -Jc -Jx -nN -lm -QD -VK -mT -WT -Cr -RT -Wp -ag -ag -ag -ag -EA -ED -EI -ag -EA -ED -EI -ag -EA -ED -EI -ag -af -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(90,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -af -aa -aj -al -aq -ag -aj -al -aq -ag -aj -al -aq -aa -aa -aa -aa -aa -aC -bK -bf -dW -eI -bf -bf -bf -cY -bK -ef -ZG -LD -HQ -IU -xQ -jq -pM -Wx -HP -Rv -DM -pk -Jf -QD -Yo -xu -yy -Pt -QD -VK -mT -BX -Cw -RT -aa -aa -aa -aa -aa -EA -ED -EI -ag -EA -ED -EI -ag -EA -ED -EI -aa -af -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(91,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -af -af -af -ag -aj -al -aq -ag -aj -al -aq -ag -aj -al -aq -aa -aa -aa -aD -aD -aD -cU -cU -ea -eJ -ft -ic -bf -bK -bK -ei -ZG -nd -WH -un -PS -XX -fQ -Ts -TJ -TJ -TJ -TJ -TJ -QD -QD -QD -QD -QD -QD -VK -Bm -BY -BY -Ir -Ir -Ir -aa -aa -aa -EA -ED -EI -ag -EA -ED -EI -ag -EA -ED -EI -ag -af -af -af -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(92,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -af -ag -ag -ag -ag -am -ag -ag -av -am -av -ag -ag -am -ag -ag -aD -aD -aD -bM -cm -cV -dx -eb -eK -fu -gj -bf -db -db -db -ZG -ZG -ZG -ZG -ZG -ZG -Km -TA -OK -vl -vl -Kp -vl -lC -PH -vl -vl -vl -rn -Gn -In -BZ -Cx -CZ -Dt -ND -Ir -Ir -ag -ag -EE -ag -ag -ma -EE -ma -ag -ag -EE -ag -ag -ag -ag -af -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(93,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -af -ag -ah -ai -ai -an -ai -ai -ai -an -ai -ai -ai -an -ai -aA -aE -aL -bk -bN -cn -cW -dy -ec -aV -bD -gk -Pr -nm -iC -hb -hb -WB -WB -WB -WB -TY -Lm -Pm -oa -kn -kn -kO -nn -Wy -kn -kn -kn -kn -An -Hn -Jn -Ca -Cy -Da -Du -DS -Eg -Es -Ey -EB -EF -EB -EB -EB -EF -EB -EB -EB -EK -EB -EB -EL -ag -af -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(94,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -af -ag -ag -ag -ag -am -ag -ag -av -am -av -ag -ag -am -ag -Te -aD -aD -aD -bO -co -cX -dz -wG -XI -bT -oF -gl -kN -iD -iN -iN -iN -iN -iN -iN -iN -Mm -nY -nY -nY -BI -NG -BI -BI -BI -BI -BI -BI -oY -HY -Kn -Cb -Cz -Db -Dv -Ir -Ir -Ir -Zk -ag -EE -ag -ag -ma -EE -ma -ag -ag -EE -ag -ag -ag -ag -af -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(95,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -af -af -af -ag -aj -ao -aq -ag -aj -ao -aq -ag -aj -ao -ar -aa -aa -aa -aD -aD -rP -PD -PD -PD -dA -dA -dA -dA -dA -kS -iN -kH -wK -ly -nz -kH -iN -pv -qE -Tu -nY -hc -IX -FH -HO -HO -hF -Ma -Ky -Fn -QB -BI -Cc -Cc -Ir -Ir -Ir -aa -aa -aa -EA -EG -EI -ag -EA -EG -EI -ag -EA -EG -EI -ag -af -af -af -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(96,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -af -aa -aj -ao -aq -ag -aj -ao -aq -ag -aj -ao -aq -aa -aa -aa -aa -aa -rP -tG -NU -PD -aQ -ba -AU -aY -dA -iF -iN -Tq -RI -lz -MK -Ik -iN -pw -Oy -oE -nY -hc -TG -Ma -Ky -Ma -Ru -Ky -Kh -zT -Ha -lt -zV -Mn -wU -aa -aa -aa -aa -aa -EA -EG -EI -ag -EA -EG -EI -ag -EA -EG -EI -aa -af -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(97,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -af -ag -aj -ao -aq -ag -aj -ao -aq -ag -aj -ao -aq -ag -ag -ag -ag -rP -rP -JJ -JN -PD -aR -aY -GM -aY -dA -iF -iN -Ot -zc -lA -MK -Jv -iN -iO -Oy -jy -jy -jy -jy -jy -Vu -OS -FB -GG -BI -BI -lO -AN -AN -AN -Dc -Dc -ag -ag -ag -ag -EA -EG -EI -ag -EA -EG -EI -ag -EA -EG -EI -ag -af -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(98,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -af -ag -aj -ao -aq -ag -aj -ao -aq -ag -aj -ao -aq -ag -ag -rP -rP -xs -FJ -Kl -ab -aG -aX -aZ -aX -aX -bV -Rq -iN -RV -mB -lB -HF -Kk -AK -py -OR -jy -Qp -Ab -QI -jy -fp -Yy -kj -Yy -Yy -Is -Fn -AN -Cd -CB -Dd -Dc -Dc -ag -ag -ag -EA -EG -EI -ag -EA -EG -EI -ag -EA -EG -EI -ag -af -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(99,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -af -aa -aj -ao -aq -ag -aj -ao -aq -ag -aj -ao -aq -kV -pl -sG -nb -bP -GI -cq -aw -PD -PD -Vm -um -GM -QJ -hj -iN -kH -zc -Fc -rw -PL -iN -pX -uY -mq -Sv -Ol -hr -fc -fp -jX -kk -kE -Yy -tX -SM -AO -NB -Bs -Bs -Dw -Dc -Dc -aa -aa -EA -EG -EI -ag -EA -EG -EI -ag -EA -EG -EI -aa -af -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(100,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -af -aa -aj -ao -aq -ag -aj -ao -aq -ag -aj -ao -aq -oM -aa -rP -bm -yj -HE -da -aB -aI -PD -bn -yI -GM -QJ -iN -iN -Hk -zc -Fc -MK -iN -iN -qe -uY -mq -Ad -ZB -hr -yv -fp -jZ -km -nB -Yy -Yy -Fn -AN -TV -Bs -Bs -Bs -DT -Dc -aa -aa -EA -EG -EI -ag -EA -EG -EI -ag -EA -EG -EI -aa -af -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(101,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -af -ag -aj -ao -aq -ag -aj -ao -aq -ag -aj -ao -aq -oM -aa -rP -PD -PD -PD -PD -PD -PD -PD -oS -bv -bA -Hy -iN -jw -jY -iE -mF -mt -eW -pB -Hi -rl -mq -Mx -kF -Lu -mC -fp -vS -WA -xC -kG -Yy -Fn -AN -Cf -Bs -De -Dx -DU -Dc -aa -aa -EA -EG -EI -ag -EA -EG -EI -ag -EA -EG -EI -ag -af -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(102,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -af -ag -aj -ao -aq -ag -aj -ao -aq -ag -aj -ao -aq -oM -aa -PC -dc -yk -cp -LN -aF -aJ -Zu -bu -dA -dA -QJ -iN -xO -zc -MJ -mR -MK -cZ -GA -qC -tA -sH -Uz -kz -lx -CG -qA -Qv -kx -xC -kM -Yy -JA -AN -AN -AN -AN -AN -AN -Dc -aa -aa -EA -EG -EI -ag -EA -EG -EI -ag -EA -EG -EI -ag -af -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(103,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -af -aa -aj -ao -aq -ag -aj -ao -aq -ag -aj -ao -aq -oM -aa -PC -bQ -bS -bS -Al -dB -eM -Zu -he -dG -Oa -fA -iN -Lz -zc -kK -Yg -MK -rq -GA -sS -SI -jy -kh -kB -Qz -PA -fp -kf -zZ -xC -FV -Yy -wL -NF -Cg -Mk -Df -Dy -DV -Eh -aa -aa -EA -EG -EI -ag -EA -EG -EI -ag -EA -EG -EI -aa -af -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(104,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -af -ag -aj -ap -aq -ag -aj -ap -aq -ag -aj -ap -aq -oM -aa -PC -ia -bR -cs -Cl -dC -eN -Zu -hi -Um -dR -Iv -iN -LZ -ib -cS -oN -nA -iN -iN -qH -sd -jy -jy -jy -jy -jy -fp -vS -FI -Yy -Yy -Yy -KE -Bw -Cg -CD -Dg -Dz -DW -Eh -aa -aa -EA -EH -EI -ag -EA -EH -EI -ag -EA -EH -EI -ag -af -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(105,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -af -ag -ag -aa -aa -ag -aa -aa -aa -ag -aa -aa -kV -pe -PC -PC -cw -cw -cw -de -VB -ek -vJ -hg -gq -sA -gq -iN -FL -FL -FL -kU -fW -iN -nr -sS -sc -rR -tv -Py -ui -EO -sZ -sZ -sZ -sZ -KE -zV -zV -Bx -Ch -CE -Dg -Dg -DX -Eh -Eh -aa -ag -aa -aa -ag -aa -aa -aa -ag -aa -aa -ag -ag -af -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(106,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -af -af -af -af -af -af -af -af -af -af -eg -jW -ln -PC -PC -aM -br -zd -cw -df -dD -el -Zu -ss -gq -eF -gC -iN -mz -lK -mw -kc -od -iI -ob -sS -Tz -rS -oc -tw -oc -jP -sZ -xD -JR -sZ -sZ -sZ -sZ -NH -Cg -CF -Dh -DY -Dg -Ei -Eh -Eh -af -af -af -af -af -af -af -af -af -af -af -af -af -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(107,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -jv -aa -PC -PC -PC -aN -sN -zh -cw -Me -dD -em -Zu -GX -gq -eL -gF -iN -jz -Iq -au -vN -IW -uh -IK -qI -UF -LJ -qN -rZ -oc -oc -xG -xE -Ft -sZ -LX -Fb -KV -NH -Cg -Cg -Cg -Cg -Cg -fE -fE -fE -Qw -Vq -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(108,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -PC -PC -PC -aO -Yu -XV -bs -dg -We -en -Zu -AQ -gq -eO -iL -iN -ho -Ed -hK -vN -hU -iN -pG -qL -qO -rS -oc -ty -oc -jS -sZ -Va -GR -yz -Va -GR -sZ -BA -BI -BI -YQ -DB -DZ -QN -Ff -NC -Qw -Vq -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(109,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -PC -PC -PC -aP -uz -bU -cw -dh -Wm -ZF -Zu -AQ -gq -Xa -gq -iN -RG -QK -hK -ti -hV -iN -iN -qK -mW -sU -ll -sQ -ur -Jp -sZ -Rl -FA -yA -zl -Tl -sZ -BB -Cj -CH -Di -DC -tE -Ek -Et -NC -Qw -Vq -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(110,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -PC -PC -PC -cw -cw -cw -cw -di -Wz -eo -Zu -GX -rr -JD -HU -iN -jA -lJ -hK -ti -hW -HN -pH -qP -CC -iN -sZ -sZ -sZ -sZ -sZ -WI -wc -yB -WI -Fd -sZ -GC -yt -CJ -YQ -kb -Eb -Hs -Eu -DF -Qw -Vq -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(111,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -GW -GW -GW -as -Xr -zi -Zu -MW -Xm -pE -Zu -kl -WF -iN -iN -iN -AS -SC -hK -vN -mE -pb -iG -qM -Hu -SH -sW -Ws -Js -PV -nf -WI -xc -yB -WI -xc -sZ -BC -Qu -CJ -Fl -Fl -Fl -JY -Qw -uT -Qw -Vq -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(112,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -GW -GW -GW -oK -oK -oK -Lk -Lk -Lk -Lk -Lk -iQ -HB -iN -wA -OE -fs -Xv -hK -vN -mE -pb -iG -qW -qR -ts -sX -Pl -ut -ve -vU -wN -xK -Wq -Mc -Af -AT -BD -Qu -St -Fl -Fr -Fx -FE -Qw -DF -dL -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(113,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -GW -GW -GW -aH -aW -bz -Lk -NN -dH -Ob -Lk -ZL -wH -Jr -gp -fJ -vc -Wv -VC -kR -hX -Sr -JQ -qQ -hK -sY -sZ -tJ -vf -vf -iy -uu -Vc -yE -zN -Xt -zr -Xp -Qu -Ep -Gl -Fq -Fw -FD -Qw -DF -OG -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(114,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -GW -GW -GW -aU -Xr -bW -Lk -Ar -eP -TW -Lk -MD -gs -iN -gY -yT -Gw -hH -xv -hK -rY -TX -QV -qQ -qT -sf -sZ -us -uv -vg -Hw -yK -Yq -yF -ET -ET -ET -Zc -Qu -Ev -Fo -OW -Fz -FF -Qw -Qw -dL -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(115,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -GW -GW -GW -aU -Xr -bB -cy -dl -dJ -xI -Lk -MD -gt -az -az -hk -az -az -hQ -tg -fa -RR -or -pO -qU -ry -sZ -tL -uw -vh -vV -wP -SN -yG -ES -DI -Za -BE -Qu -Ec -Fp -Fs -Fy -Fy -JF -JF -JF -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(116,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -GW -GW -GW -aU -Xr -Fj -Lk -Bb -ed -VP -Lk -fH -gu -az -NZ -sw -OI -az -qV -lL -qV -qV -qV -IB -qV -qV -UU -tM -wQ -DK -sy -KI -Yq -DL -nS -nS -wX -BE -Qu -Ew -Fp -Oo -Qo -Ro -JF -JF -JF -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(117,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -GW -GW -GW -aU -Xr -bX -Lk -Lk -dV -RX -Lk -fI -gv -YI -gB -hl -Sd -YI -kW -lM -mI -ny -ot -ae -si -at -sZ -YU -uy -Tx -Ou -rM -Yq -yG -xL -xP -ki -BE -Qu -Ec -Fp -Oo -Oo -Oo -JF -JF -JF -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(118,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -GW -GW -GW -aT -oK -SB -cB -dE -ej -gQ -yp -ZJ -oU -az -Gd -Nd -Td -kp -mD -nw -nw -pq -ou -pR -qX -tB -WR -LM -Rb -Tb -Vb -ZI -Xc -yJ -Lr -Iw -Iw -BE -Qu -Ec -Fp -Oo -Oo -Oo -JF -JF -JF -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(119,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -Lb -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -GW -GW -GW -aS -oK -cB -cB -dE -eP -Ul -Lk -hj -ke -az -hh -Od -Ud -WP -kY -nu -GJ -pp -ov -pS -ov -tz -sZ -tP -vX -vX -np -YG -qf -zs -Oc -II -II -Ze -Qu -wM -Fp -Oo -Oo -Oo -JF -JF -JF -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(120,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -GW -GW -GW -aU -Xr -Nn -cC -Lk -eq -eQ -Lk -hq -WK -az -Id -Pd -Wd -hp -dp -lP -dp -kQ -ow -pT -QU -sk -Pb -tQ -oD -oD -KJ -Xb -KK -zt -ZT -zf -yM -mo -Qu -Zg -Fp -Oo -Oo -Oo -JF -JF -JF -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(121,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -GW -GW -GW -aU -Xr -Xr -Mb -Lk -ep -eP -Lk -fL -WK -YI -Jd -Qd -xy -hp -la -lQ -dp -nC -nC -pU -nC -nC -Qu -vm -YV -xl -Ac -tN -Yc -OC -mx -Qa -tO -WJ -Qu -Ec -Fp -Oo -Oo -Oo -JF -JF -JF -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(122,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -GW -GW -GW -aU -by -ca -Mb -Lk -er -eS -Lk -fM -WK -az -Kd -hm -hG -hp -lb -lR -mJ -wd -Sh -pV -qY -sl -Kc -Jl -Sb -Hc -Il -Sb -Uc -Ic -zv -Sc -Zb -DG -Qu -wM -Fp -Fp -Fp -Oo -JF -JF -JF -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(123,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -GW -GW -GW -cC -cC -cC -cC -Lk -Lk -Lk -Lk -dA -WK -az -hp -iX -jH -hp -nx -gW -dp -Zf -oi -Pj -qZ -sm -Kc -vn -Yn -to -Ao -Do -Go -Ho -Jo -Ko -Mo -fh -No -Ec -zV -DN -Fp -Fp -JF -JF -JF -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(124,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -IE -IE -IE -bC -GM -cD -on -on -on -eX -fN -WK -UY -dp -iY -jI -kr -Wb -lT -mK -nF -oz -rb -Ld -oe -Qu -Qb -vD -WG -Qb -uD -OU -Qb -uD -Pb -No -lt -Eo -Fk -Dm -DO -Ee -wU -wU -wU -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(125,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ag -IE -IE -IE -cc -RE -zP -dM -eu -eY -fO -gw -hq -dp -iZ -jJ -ks -le -if -xB -MP -oA -rc -Md -Ie -No -tV -uE -sZ -On -Pn -sZ -yN -zx -Aq -BG -lt -BI -CN -Dn -DP -wU -wU -wU -ag -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(126,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ag -IE -IE -IE -IE -cE -rC -dA -dA -dA -fP -GM -dp -dp -ja -jK -kt -lf -lV -mM -mL -jL -pZ -so -KP -sZ -sZ -sZ -sZ -sZ -sZ -sZ -sZ -sZ -Qu -lt -lt -BI -MI -JW -Ml -wU -wU -wU -ag -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(127,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ag -aa -IE -IE -IE -IE -RJ -dA -ev -GM -GM -GM -dp -ie -jb -jL -ku -lg -lW -mN -nH -oB -qa -rd -sq -tb -GQ -uF -vp -we -wW -Sn -Xn -dp -As -zV -BJ -BI -BH -wU -wU -wU -wU -aa -ag -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(128,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ag -aa -IE -IE -IE -IE -IE -ax -ax -ax -do -gy -dp -if -jc -jM -kv -lh -lX -mO -nI -oC -qb -re -sr -tc -Pa -uG -vq -wf -Qn -Tn -Ne -dp -At -Bc -Bc -Bc -Bc -wU -wU -wU -wU -aa -ag -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(129,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ag -aa -aa -IE -IE -IE -IE -IE -ax -ax -dp -dp -dp -ig -jd -jK -kt -lf -lV -mP -nJ -rh -El -Xo -dp -td -DE -uH -vr -wg -wY -Un -Zn -dp -gA -dp -dp -dp -wU -wU -wU -wU -aa -aa -ag -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(130,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ag -ag -aa -aa -aa -IE -IE -IE -IE -dp -Tp -WU -yR -if -je -jL -ku -li -lW -mQ -qc -Zh -To -Rd -Le -CM -jL -uI -uI -uI -wZ -Vn -bo -mp -HW -dp -dp -Zs -wU -wU -aa -aa -aa -ag -ag -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(131,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ag -ag -aa -aa -aa -TK -ox -MS -yZ -PY -mN -yR -if -jf -jN -kw -lj -lY -So -qc -Ck -Uo -Zo -qc -te -jL -uJ -uJ -uJ -xa -Wn -yR -jL -PY -gz -ox -ox -TK -aa -aa -aa -ag -ag -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(132,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ag -ag -aa -aa -TK -ox -ox -gz -PY -mN -mS -ih -jg -jO -jO -jO -lZ -ok -Le -Sk -Vo -bp -qc -tf -tY -uK -vs -vs -xb -xT -mS -jL -PY -gz -ox -ox -TK -aa -aa -ag -ag -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(133,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ag -ag -aa -oQ -Zs -ox -Zs -Zs -Zs -Zs -ii -ii -Vl -Vl -ii -ii -Pk -nL -Zs -Wo -Zs -nL -Pk -ii -ii -Vl -Vl -ii -ii -Zs -Zs -Zs -Zs -MS -Zs -ME -aa -ag -ag -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(134,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ag -ag -Zs -Zs -ox -Zs -Zs -Zs -fT -ij -jh -ij -ij -jh -YL -Ls -aa -aa -lk -aa -aa -Ls -YL -jh -ij -ij -jh -ij -fT -Zs -Zs -Zs -ox -Zs -Zs -ag -ag -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(135,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ag -fT -Zs -ox -ox -ox -ox -rv -ik -ji -ik -ik -ji -ik -Ls -ag -ag -lk -ag -ag -Ls -ik -ji -ik -ik -ji -ik -rv -ox -ox -ox -ox -Zs -fT -ag -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(136,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ag -fT -fT -fT -QE -ox -fT -ik -ik -ik -ik -ik -ik -aa -aa -aa -ky -aa -aa -aa -ik -ik -ik -ik -ik -ik -fT -ox -ZZ -fT -fT -fT -ag -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(137,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ag -fT -fT -fT -ox -fT -ik -ji -ik -ik -ji -ik -aa -aa -aa -lk -aa -aa -aa -ik -ji -ik -ik -ji -ik -fT -ox -fT -fT -fT -ag -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(138,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ag -fT -fT -ox -fT -ik -ji -ik -ik -ji -ik -ag -ag -oH -lk -oH -ag -ag -ik -ji -ik -ik -ji -ik -fT -ox -fT -fT -ag -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(139,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ag -fT -ox -fT -ik -ji -ik -ik -ji -ik -aa -aa -aa -ky -aa -aa -aa -ik -ji -ik -ik -ji -ik -fT -MS -fT -ag -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(140,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -Hb -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -FW -ox -fT -ik -ik -ik -ik -ik -ik -aa -aa -aa -lk -aa -aa -aa -ik -ik -ik -ik -ik -ik -fT -ox -gE -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(141,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -TK -ox -fT -ik -ji -ik -ik -ji -ik -aa -aa -aa -lk -aa -aa -aa -ik -ji -ik -ik -ji -ik -fT -ox -TK -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(142,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -QT -ox -rv -ik -ji -ik -ik -ji -ik -aa -aa -aa -ky -aa -aa -aa -ik -ji -ik -ik -ji -ik -rv -ox -OB -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(143,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -TK -ox -fT -il -jj -il -jj -il -jj -ag -ag -aa -lk -aa -ag -ag -il -jj -il -jj -il -jj -fT -ox -IR -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(144,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -fT -fT -fT -fT -fT -fT -fT -fT -fT -fT -ag -aa -lk -aa -ag -fT -fT -fT -fT -fT -fT -fT -fT -fT -fT -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -qu -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(145,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -fT -fT -fT -fT -fT -fT -fT -fT -gE -ag -aa -ky -aa -ag -FW -fT -fT -fT -fT -fT -fT -fT -fT -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(146,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -fT -fT -fT -fT -fT -fT -fT -fT -ag -aa -lk -aa -ag -fT -fT -fT -fT -fT -fT -fT -fT -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(147,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ag -af -af -ag -ag -lk -ag -ag -af -af -ag -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(148,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ag -ag -af -af -oH -ky -oH -af -af -ag -ag -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(149,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(150,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(151,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(152,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(153,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(154,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(155,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(156,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(157,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(158,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(159,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(160,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(161,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(162,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(163,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(164,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -gX -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(165,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(166,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(167,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(168,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(169,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(170,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(171,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(172,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(173,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(174,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(175,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(176,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(177,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(178,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(179,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(180,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(181,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(182,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(183,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(184,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(185,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(186,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(187,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(188,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(189,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(190,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(191,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(192,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(193,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(194,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(195,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(196,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(197,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(198,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(199,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(200,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} diff --git a/maps/torch/torch5_deck1.dmm b/maps/torch/torch5_deck1.dmm deleted file mode 100644 index 1419641b6205a..0000000000000 --- a/maps/torch/torch5_deck1.dmm +++ /dev/null @@ -1,70691 +0,0 @@ -//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE -"aaa" = ( -/turf/space, -/area/space) -"aab" = ( -/obj/effect/shuttle_landmark/merc/deck2{ - name = "1st Deck, Aft Starboard" - }, -/turf/space, -/area/space) -"aac" = ( -/obj/effect/shuttle_landmark/torch/deck2/exploration_shuttle{ - name = "1st Deck, Fore Starboard" - }, -/turf/space, -/area/space) -"aad" = ( -/obj/effect/shuttle_landmark/torch/deck2/guppy{ - name = "1st Deck, Aft" - }, -/turf/space, -/area/space) -"aae" = ( -/obj/structure/closet/firecloset, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/firstdeck/centralstarboard) -"aaf" = ( -/obj/machinery/atmospherics/unary/tank/hydrogen, -/turf/simulated/floor/reinforced/airless, -/area/engineering/fuelbay/aux) -"aag" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 8 - }, -/turf/simulated/floor/reinforced/airless, -/area/engineering/fuelbay/aux) -"aah" = ( -/obj/machinery/alarm{ - dir = 1; - pixel_y = -25 - }, -/obj/machinery/light, -/obj/effect/floor_decal/corner/green/half, -/turf/simulated/floor/tiled/monotile, -/area/hallway/primary/firstdeck/center) -"aai" = ( -/obj/machinery/camera/network/first_deck{ - c_tag = "First Deck Hallway - Lift"; - dir = 1 - }, -/obj/machinery/firealarm{ - dir = 1; - pixel_y = -24 - }, -/obj/effect/floor_decal/corner/green/half, -/turf/simulated/floor/tiled/monotile, -/area/hallway/primary/firstdeck/center) -"aaj" = ( -/obj/machinery/door/airlock/civilian{ - name = "Auxiliary Head" - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/door/firedoor, -/turf/simulated/floor/tiled/freezer, -/area/crew_quarters/head/aux) -"aak" = ( -/obj/machinery/light/spot{ - dir = 1 - }, -/turf/simulated/floor/reinforced/airless, -/area/engineering/fuelbay/aux) -"aam" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 4 - }, -/obj/machinery/button/blast_door{ - id_tag = "auxfuelvent"; - name = "Auxiliary Fuel Storage Vent Control"; - pixel_y = 32; - req_access = list("ACCESS_CONSTRUCTION") - }, -/turf/simulated/floor/reinforced/airless, -/area/engineering/fuelbay/aux) -"aan" = ( -/obj/machinery/atmospherics/unary/tank/hydrogen{ - dir = 4 - }, -/turf/simulated/floor/reinforced/airless, -/area/engineering/fuelbay/aux) -"aao" = ( -/obj/machinery/atmospherics/pipe/manifold4w/visible/fuel, -/turf/simulated/floor/reinforced/airless, -/area/engineering/fuelbay/aux) -"aap" = ( -/obj/machinery/atmospherics/pipe/manifold4w/visible/fuel, -/obj/machinery/meter, -/turf/simulated/floor/reinforced/airless, -/area/engineering/fuelbay/aux) -"aaq" = ( -/obj/machinery/atmospherics/valve{ - dir = 4 - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 8 - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/reinforced/airless, -/area/engineering/fuelbay/aux) -"aar" = ( -/obj/effect/shuttle_landmark/skipjack/deck2{ - name = "1st Deck, Fore" - }, -/turf/space, -/area/space) -"aas" = ( -/obj/machinery/atmospherics/pipe/manifold/visible/fuel{ - dir = 1 - }, -/turf/simulated/floor/reinforced/airless, -/area/engineering/fuelbay/aux) -"aat" = ( -/obj/machinery/atmospherics/valve{ - dir = 4 - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 4 - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/reinforced/airless, -/area/engineering/fuelbay/aux) -"aau" = ( -/obj/machinery/atmospherics/unary/tank/hydrogen{ - dir = 8 - }, -/turf/simulated/floor/reinforced/airless, -/area/engineering/fuelbay/aux) -"aav" = ( -/obj/machinery/atmospherics/unary/tank/hydrogen{ - dir = 1 - }, -/turf/simulated/floor/reinforced/airless, -/area/engineering/fuelbay/aux) -"aaw" = ( -/obj/machinery/atmospherics/pipe/simple/visible/fuel, -/turf/simulated/floor/reinforced/airless, -/area/engineering/fuelbay/aux) -"aax" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 4 - }, -/turf/simulated/floor/reinforced/airless, -/area/engineering/fuelbay/aux) -"aay" = ( -/obj/structure/sign/warning/compressed_gas{ - dir = 8 - }, -/turf/simulated/wall/r_wall/hull, -/area/engineering/fuelbay/aux) -"aaz" = ( -/obj/machinery/atmospherics/pipe/manifold/visible/fuel{ - dir = 8 - }, -/obj/machinery/light/spot{ - dir = 8 - }, -/turf/simulated/floor/reinforced/airless, -/area/engineering/fuelbay/aux) -"aaA" = ( -/obj/machinery/atmospherics/pipe/simple/visible/fuel{ - dir = 4 - }, -/obj/machinery/meter, -/turf/simulated/floor/reinforced/airless, -/area/engineering/fuelbay/aux) -"aaB" = ( -/obj/structure/disposalpipe/trunk{ - dir = 8 - }, -/obj/structure/lattice, -/obj/structure/disposaloutlet{ - dir = 4 - }, -/turf/space, -/area/space) -"aaC" = ( -/obj/machinery/atmospherics/valve{ - dir = 4 - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/reinforced/airless, -/area/engineering/fuelbay/aux) -"aaD" = ( -/obj/machinery/atmospherics/pipe/simple/visible/fuel{ - dir = 4 - }, -/turf/simulated/floor/reinforced/airless, -/area/engineering/fuelbay/aux) -"aaE" = ( -/obj/machinery/atmospherics/pipe/simple/visible/fuel{ - dir = 4 - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 8 - }, -/turf/simulated/floor/reinforced/airless, -/area/engineering/fuelbay/aux) -"aaF" = ( -/obj/machinery/atmospherics/pipe/simple/visible/fuel{ - dir = 4 - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 4 - }, -/turf/simulated/floor/reinforced/airless, -/area/engineering/fuelbay/aux) -"aaG" = ( -/obj/machinery/atmospherics/pipe/manifold/visible/fuel{ - dir = 4 - }, -/obj/machinery/light/spot{ - dir = 4 - }, -/turf/simulated/floor/reinforced/airless, -/area/engineering/fuelbay/aux) -"aaH" = ( -/obj/structure/sign/warning/compressed_gas{ - dir = 4 - }, -/turf/simulated/wall/r_wall/hull, -/area/engineering/fuelbay/aux) -"aaI" = ( -/obj/machinery/light/spot, -/obj/machinery/atmospherics/unary/tank/hydrogen{ - dir = 1 - }, -/turf/simulated/floor/reinforced/airless, -/area/engineering/fuelbay/aux) -"aaJ" = ( -/obj/machinery/atmospherics/pipe/simple/visible{ - dir = 6 - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 8 - }, -/turf/simulated/floor/reinforced/airless, -/area/engineering/fuelbay/aux) -"aaK" = ( -/obj/machinery/access_button{ - command = "cycle_exterior"; - frequency = 1379; - master_tag = "auxfuel_airlock"; - name = "exterior access button"; - pixel_x = 24; - pixel_y = -24; - req_access = list("ACCESS_CONSTRUCTION") - }, -/obj/machinery/atmospherics/pipe/simple/visible{ - dir = 4 - }, -/obj/machinery/atmospherics/binary/pump/high_power, -/turf/simulated/floor/reinforced/airless, -/area/engineering/fuelbay/aux) -"aaL" = ( -/obj/machinery/alarm{ - pixel_y = 24 - }, -/turf/simulated/floor/tiled/freezer, -/area/crew_quarters/head/aux) -"aaM" = ( -/obj/machinery/portable_atmospherics/canister/air/airlock, -/obj/machinery/atmospherics/portables_connector{ - dir = 8 - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 4 - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/reinforced/airless, -/area/engineering/fuelbay/aux) -"aaN" = ( -/obj/machinery/shield_diffuser, -/obj/machinery/door/blast/regular{ - id_tag = "auxfuelvent"; - name = "Auxiliary Fuel Storage Vent" - }, -/turf/simulated/floor/reinforced/airless, -/area/engineering/fuelbay/aux) -"aaO" = ( -/obj/machinery/door/airlock/external{ - frequency = 1379; - icon_state = "closed"; - id_tag = "auxfuel_outer"; - locked = 1; - name = "Aux Fuel Storage Exterior Access" - }, -/obj/machinery/atmospherics/pipe/simple/visible, -/turf/simulated/floor/reinforced, -/area/engineering/fuelbay/aux) -"aaP" = ( -/obj/machinery/atmospherics/pipe/simple/visible/fuel, -/obj/machinery/door/airlock/external{ - frequency = 1379; - icon_state = "closed"; - id_tag = "auxfuel_outer"; - locked = 1; - name = "Aux Fuel Storage Exterior Access" - }, -/turf/simulated/floor/reinforced, -/area/engineering/fuelbay/aux) -"aaQ" = ( -/obj/machinery/oxygen_pump{ - pixel_x = -32 - }, -/obj/machinery/light/small{ - dir = 1 - }, -/obj/machinery/atmospherics/unary/vent_pump/high_volume/airlock{ - dir = 4; - id_tag = "auxfuel_pump" - }, -/turf/simulated/floor/reinforced, -/area/engineering/fuelbay/aux) -"aaR" = ( -/obj/machinery/atmospherics/pipe/manifold4w/visible, -/obj/machinery/meter, -/turf/simulated/floor/reinforced, -/area/engineering/fuelbay/aux) -"aaS" = ( -/obj/machinery/atmospherics/pipe/simple/visible{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/visible/fuel, -/turf/simulated/floor/reinforced, -/area/engineering/fuelbay/aux) -"aaT" = ( -/obj/machinery/embedded_controller/radio/airlock/airlock_controller{ - dir = 8; - id_tag = "auxfuel_airlock"; - pixel_x = 25; - req_access = list("ACCESS_CONSTRUCTION"); - tag_airpump = "auxfuel_pump"; - tag_chamber_sensor = "auxfuel_sensor"; - tag_exterior_door = "auxfuel_outer"; - tag_interior_door = "auxfuel_inner" - }, -/obj/machinery/airlock_sensor{ - id_tag = "auxfuel_sensor"; - pixel_x = 25; - pixel_y = 12 - }, -/obj/machinery/atmospherics/unary/vent_pump/high_volume/airlock{ - dir = 8; - id_tag = "auxfuel_pump" - }, -/turf/simulated/floor/reinforced, -/area/engineering/fuelbay/aux) -"aaU" = ( -/obj/structure/cable/green{ - d2 = 4; - icon_state = "0-4" - }, -/obj/machinery/power/apc{ - dir = 8; - name = "west bump"; - pixel_x = -24 - }, -/turf/simulated/floor/reinforced, -/area/engineering/fuelbay/aux) -"aaV" = ( -/obj/structure/cable/green{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/machinery/atmospherics/binary/pump/on{ - dir = 1; - target_pressure = 200 - }, -/turf/simulated/floor/reinforced, -/area/engineering/fuelbay/aux) -"aaW" = ( -/obj/machinery/atmospherics/pipe/simple/visible/fuel, -/obj/machinery/meter, -/turf/simulated/floor/reinforced, -/area/engineering/fuelbay/aux) -"aaX" = ( -/obj/machinery/button/blast_door{ - id_tag = "auxfuelvent"; - name = "Auxiliary Fuel Storage Vent Control"; - pixel_x = 32; - req_access = list("ACCESS_CONSTRUCTION") - }, -/turf/simulated/floor/reinforced, -/area/engineering/fuelbay/aux) -"aaY" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/door/airlock/external{ - frequency = 1379; - icon_state = "closed"; - id_tag = "auxfuel_inner"; - locked = 1; - name = "Auxiliary Fuel Storage Interior Access" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/universal, -/turf/simulated/floor/reinforced, -/area/engineering/fuelbay/aux) -"aaZ" = ( -/obj/machinery/atmospherics/pipe/simple/visible/fuel, -/obj/machinery/door/airlock/external{ - frequency = 1379; - icon_state = "closed"; - id_tag = "auxfuel_inner"; - locked = 1; - name = "Auxiliary Fuel Storage Interior Access" - }, -/turf/simulated/floor/reinforced, -/area/engineering/fuelbay/aux) -"aba" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/firstdeck/aftstarboard) -"abb" = ( -/obj/machinery/access_button{ - command = "cycle_interior"; - frequency = 1379; - master_tag = "auxfuel_airlock"; - name = "interior access button"; - pixel_x = 24; - pixel_y = 24; - req_access = list("ACCESS_CONSTRUCTION") - }, -/obj/structure/catwalk, -/obj/machinery/atmospherics/pipe/simple/visible/fuel{ - dir = 5 - }, -/turf/simulated/floor/plating, -/area/maintenance/firstdeck/aftstarboard) -"abc" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/catwalk, -/obj/structure/cable/green{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply, -/turf/simulated/floor/plating, -/area/maintenance/firstdeck/aftstarboard) -"abd" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/firstdeck/centralstarboard) -"abe" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/catwalk, -/obj/structure/cable/green{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/turf/simulated/floor/plating, -/area/maintenance/firstdeck/centralstarboard) -"abf" = ( -/obj/effect/floor_decal/corner/paleblue{ - dir = 5 - }, -/obj/machinery/pager/robotics{ - pixel_y = 30 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/firstdeck/center) -"abi" = ( -/obj/effect/floor_decal/floordetail/edgedrain{ - dir = 1 - }, -/obj/effect/floor_decal/corner/red{ - dir = 10 - }, -/obj/structure/hygiene/sink{ - dir = 4; - pixel_x = 11 - }, -/obj/machinery/camera/network/medbay{ - c_tag = "Infirmary - Autopsy"; - dir = 8 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/medical/morgue/autopsy) -"abj" = ( -/obj/structure/table/standard, -/obj/random/maintenance/solgov, -/turf/simulated/floor/plating, -/area/maintenance/firstdeck/aftstarboard) -"abk" = ( -/turf/simulated/wall/prepainted, -/area/medical/counselor) -"abl" = ( -/obj/machinery/chemical_dispenser/full, -/obj/effect/floor_decal/corner/beige/mono, -/obj/machinery/firealarm{ - dir = 8; - pixel_x = -24 - }, -/obj/structure/sign/warning/nosmoking_1{ - pixel_y = 24 - }, -/turf/simulated/floor/tiled/white/monotile, -/area/medical/chemistry) -"abm" = ( -/obj/structure/table/standard, -/obj/item/stack/material/phoron{ - amount = 6 - }, -/obj/item/reagent_containers/dropper, -/obj/item/reagent_containers/glass/beaker/insulated/large, -/obj/item/reagent_containers/glass/beaker/large, -/obj/effect/floor_decal/corner/beige/mono, -/obj/machinery/light{ - dir = 1 - }, -/turf/simulated/floor/tiled/white/monotile, -/area/medical/chemistry) -"abn" = ( -/obj/effect/floor_decal/corner/beige/mono, -/obj/structure/closet/secure_closet/medical_wall{ - name = "Pill Cabinet"; - pixel_y = 32 - }, -/obj/machinery/reagentgrinder, -/obj/item/reagent_containers/glass/beaker/large, -/turf/simulated/floor/tiled/white/monotile, -/area/medical/chemistry) -"abo" = ( -/obj/machinery/optable, -/obj/machinery/light{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/medical/morgue/autopsy) -"abp" = ( -/obj/structure/bed/chair/office/light{ - dir = 8 - }, -/turf/simulated/floor/plating, -/area/maintenance/firstdeck/aftstarboard) -"abq" = ( -/obj/random_multi/single_item/skelestand, -/turf/simulated/floor/tiled/dark, -/area/medical/morgue/autopsy) -"abr" = ( -/obj/machinery/chem_master, -/obj/effect/floor_decal/corner/beige/mono, -/turf/simulated/floor/tiled/white/monotile, -/area/medical/chemistry) -"abs" = ( -/obj/effect/floor_decal/corner/beige{ - dir = 5 - }, -/obj/effect/floor_decal/corner/beige{ - dir = 10 - }, -/obj/structure/bed/chair/comfy/blue{ - dir = 8 - }, -/turf/simulated/floor/tiled/white, -/area/medical/chemistry) -"abt" = ( -/obj/effect/floor_decal/corner/beige/mono, -/obj/structure/table/standard, -/obj/machinery/reagent_temperature/cooler, -/turf/simulated/floor/tiled/white/monotile, -/area/medical/chemistry) -"abu" = ( -/obj/structure/table/standard, -/obj/effect/floor_decal/corner/beige/mono, -/obj/machinery/power/apc{ - dir = 1; - name = "north bump"; - pixel_y = 24 - }, -/obj/structure/cable/green{ - d2 = 2; - icon_state = "0-2" - }, -/obj/machinery/reagent_temperature, -/turf/simulated/floor/tiled/white/monotile, -/area/medical/chemistry) -"abv" = ( -/obj/machinery/light{ - dir = 1 - }, -/obj/effect/floor_decal/corner/beige{ - dir = 5 - }, -/obj/effect/floor_decal/corner/beige{ - dir = 10 - }, -/turf/simulated/floor/tiled/white, -/area/medical/chemistry) -"abw" = ( -/obj/effect/floor_decal/floordetail/edgedrain, -/obj/effect/floor_decal/corner/red{ - dir = 5 - }, -/obj/item/device/radio/intercom/department/medbay{ - dir = 8; - pixel_x = 24 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/medical/morgue/autopsy) -"abx" = ( -/obj/structure/filingcabinet/chestdrawer{ - dir = 1 - }, -/obj/item/folder/blue, -/obj/item/folder/red, -/obj/item/folder, -/obj/item/folder/nt, -/obj/item/folder/yellow, -/obj/item/folder/white, -/obj/item/folder/white, -/obj/item/folder/white, -/obj/effect/decal/cleanable/cobweb{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/maintenance/firstdeck/aftstarboard) -"aby" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/glass/medical{ - name = "Chemistry" - }, -/turf/simulated/floor/tiled/white/monotile, -/area/medical/chemistry) -"abz" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/tiled/freezer, -/area/crew_quarters/head/aux) -"abA" = ( -/obj/effect/floor_decal/corner/beige{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 1 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/white, -/area/medical/chemistry) -"abB" = ( -/obj/effect/floor_decal/corner/beige{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/white, -/area/medical/chemistry) -"abC" = ( -/obj/effect/floor_decal/corner/beige{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/white, -/area/medical/chemistry) -"abD" = ( -/obj/effect/floor_decal/corner/beige{ - dir = 10 - }, -/obj/effect/floor_decal/corner/beige{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/turf/simulated/floor/tiled/white, -/area/medical/chemistry) -"abE" = ( -/turf/simulated/wall/r_wall/prepainted, -/area/maintenance/firstdeck/forestarboard) -"abF" = ( -/obj/machinery/shield_diffuser, -/turf/simulated/floor/reinforced/airless, -/area/maintenance/firstdeck/forestarboard) -"abG" = ( -/obj/effect/floor_decal/corner/beige{ - dir = 10 - }, -/obj/effect/floor_decal/corner/beige{ - dir = 5 - }, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 8 - }, -/turf/simulated/floor/tiled/white, -/area/medical/chemistry) -"abH" = ( -/obj/machinery/smartfridge/secure/medbay{ - dir = 1; - req_access = list(list("ACCESS_CHEMISTRY","ACCESS_MEDICAL_EQUIP")) - }, -/obj/machinery/door/firedoor, -/turf/simulated/floor/plating, -/area/medical/chemistry) -"abI" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 8 - }, -/obj/machinery/camera/network/first_deck{ - c_tag = "Command Hallway - Aft"; - dir = 4 - }, -/obj/effect/landmark{ - name = "lightsout" - }, -/obj/effect/catwalk_plated, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/plating, -/area/hallway/primary/firstdeck/fore) -"abJ" = ( -/obj/machinery/power/apc{ - dir = 4; - name = "east bump"; - pixel_x = 24 - }, -/obj/structure/cable/green{ - d2 = 8; - icon_state = "0-8" - }, -/obj/structure/table/standard, -/obj/item/reagent_containers/glass/beaker{ - pixel_x = 4; - pixel_y = 9 - }, -/turf/simulated/floor/tiled/dark, -/area/rnd/development) -"abK" = ( -/obj/effect/floor_decal/corner/beige{ - dir = 10 - }, -/obj/structure/table/standard, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 1 - }, -/obj/machinery/light_switch{ - pixel_y = -22 - }, -/turf/simulated/floor/tiled/white, -/area/medical/chemistry) -"abL" = ( -/turf/simulated/wall/r_wall/prepainted, -/area/maintenance/firstdeck/aftstarboard) -"abM" = ( -/obj/structure/lattice, -/obj/structure/grille, -/turf/space, -/area/space) -"abN" = ( -/turf/simulated/wall/r_wall/hull, -/area/thruster/d1starboard) -"abO" = ( -/obj/machinery/access_button{ - command = "cycle_exterior"; - frequency = 1379; - master_tag = "bridgestarboard_airlock"; - name = "exterior access button"; - pixel_x = 24; - pixel_y = -24; - req_access = list("ACCESS_MAINT") - }, -/obj/effect/floor_decal/industrial/warning, -/turf/simulated/floor/reinforced/airless, -/area/maintenance/firstdeck/forestarboard) -"abP" = ( -/turf/simulated/wall/r_wall/hull, -/area/maintenance/firstdeck/centralstarboard) -"abQ" = ( -/obj/machinery/disposal, -/obj/effect/floor_decal/corner/beige/mono, -/obj/effect/floor_decal/industrial/hatch/yellow, -/obj/structure/disposalpipe/trunk, -/turf/simulated/floor/tiled/white/monotile, -/area/medical/chemistry) -"abR" = ( -/obj/machinery/power/apc{ - dir = 8; - name = "west bump"; - pixel_x = -24 - }, -/obj/structure/cable/green{ - d2 = 4; - icon_state = "0-4" - }, -/turf/simulated/floor/tiled/freezer, -/area/crew_quarters/head/aux) -"abS" = ( -/obj/machinery/light/small, -/obj/structure/cable/green{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 1; - level = 2 - }, -/turf/simulated/floor/tiled/freezer, -/area/crew_quarters/head/aux) -"abT" = ( -/obj/effect/floor_decal/corner/beige{ - dir = 10 - }, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 1 - }, -/obj/structure/table/standard, -/turf/simulated/floor/tiled/white, -/area/medical/chemistry) -"abU" = ( -/obj/effect/floor_decal/corner/beige{ - dir = 10 - }, -/obj/effect/floor_decal/corner/beige{ - dir = 5 - }, -/obj/structure/bed/chair/padded, -/turf/simulated/floor/tiled/white, -/area/medical/chemistry) -"abV" = ( -/obj/machinery/computer/air_control{ - input_tag = "d1sh_in"; - name = "Hydrogen Supply Control"; - output_tag = "d1sh_out"; - sensor_name = "Hydrogen Supply Tank"; - sensor_tag = "d1sh_sensor" - }, -/obj/effect/floor_decal/industrial/outline/orange, -/turf/simulated/floor/tiled/techfloor, -/area/thruster/d1starboard) -"abW" = ( -/obj/machinery/computer/air_control{ - input_tag = "d1so2_in"; - name = "Oxygen Supply Control"; - output_tag = "d1so2_out"; - sensor_name = "Oxygen Supply Tank"; - sensor_tag = "d1so2_sensor" - }, -/obj/effect/floor_decal/industrial/outline/blue, -/obj/machinery/alarm{ - pixel_y = 24 - }, -/turf/simulated/floor/tiled/techfloor, -/area/thruster/d1starboard) -"abX" = ( -/obj/machinery/r_n_d/destructive_analyzer, -/obj/effect/floor_decal/industrial/hatch/yellow, -/obj/machinery/camera/network/research{ - c_tag = "Research - Development Laboratory"; - dir = 8 - }, -/obj/machinery/firealarm{ - dir = 4; - pixel_x = 24 - }, -/turf/simulated/floor/tiled/dark, -/area/rnd/development) -"abY" = ( -/obj/machinery/door/airlock/atmos{ - name = "Safe Room Atmospherics" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/cyan{ - dir = 4 - }, -/obj/machinery/door/firedoor, -/turf/simulated/floor/tiled/techfloor/grid, -/area/crew_quarters/safe_room/firstdeck) -"abZ" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 4 - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/manifold/visible/fuel{ - dir = 8 - }, -/turf/simulated/floor/tiled/techfloor, -/area/thruster/d1starboard) -"aca" = ( -/obj/machinery/atmospherics/unary/engine{ - dir = 8 - }, -/turf/simulated/floor/plating, -/area/thruster/d1starboard) -"acb" = ( -/obj/structure/sign/warning/airlock, -/turf/simulated/wall/r_wall/hull, -/area/maintenance/firstdeck/forestarboard) -"acc" = ( -/obj/machinery/door/airlock/external{ - frequency = 1379; - icon_state = "closed"; - id_tag = "bridgestarboard_outer"; - locked = 1; - name = "Engineering External Access" - }, -/obj/machinery/shield_diffuser, -/turf/simulated/floor/tiled/techfloor/grid, -/area/maintenance/firstdeck/forestarboard) -"acd" = ( -/turf/simulated/floor/reinforced/airless, -/area/space) -"ace" = ( -/obj/structure/closet/secure_closet/chemical, -/obj/item/storage/box/pillbottles, -/obj/item/device/radio/headset/headset_med, -/obj/item/book/manual/chemistry_recipes, -/obj/item/clothing/glasses/science, -/obj/effect/floor_decal/corner/beige/mono, -/obj/machinery/button/blast_door{ - id_tag = "chemcounter"; - name = "Chemistry Counter Lockdown Control"; - pixel_x = -6; - pixel_y = -24 - }, -/obj/machinery/camera/network/medbay{ - c_tag = "Infirmary - Chemistry"; - dir = 8 - }, -/obj/structure/extinguisher_cabinet{ - pixel_x = 32 - }, -/turf/simulated/floor/tiled/white/monotile, -/area/medical/chemistry) -"acf" = ( -/turf/simulated/wall/prepainted, -/area/medical/chemistry) -"acg" = ( -/obj/machinery/atmospherics/pipe/simple/visible/fuel{ - dir = 6 - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/thruster/d1starboard) -"ach" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/catwalk, -/obj/machinery/atmospherics/binary/pump/high_power/on{ - dir = 4; - target_pressure = 15000 - }, -/turf/simulated/floor/plating, -/area/thruster/d1starboard) -"aci" = ( -/obj/machinery/atmospherics/pipe/simple/visible/fuel{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/thruster/d1starboard) -"acj" = ( -/obj/machinery/atmospherics/pipe/simple/visible/fuel{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/door/airlock/hatch/maintenance, -/obj/machinery/door/firedoor, -/turf/simulated/floor/tiled/steel_ridged, -/area/thruster/d1starboard) -"ack" = ( -/obj/machinery/atmospherics/pipe/simple/visible/fuel{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/light_switch{ - pixel_x = -24; - pixel_y = 24 - }, -/turf/simulated/floor/tiled/techfloor, -/area/thruster/d1starboard) -"acl" = ( -/obj/machinery/atmospherics/pipe/simple/visible/fuel{ - dir = 4 - }, -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/techfloor, -/area/thruster/d1starboard) -"acm" = ( -/obj/machinery/atmospherics/pipe/simple/visible/fuel{ - dir = 4 - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 1 - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/machinery/light/small{ - dir = 1 - }, -/turf/simulated/floor/tiled/techfloor, -/area/thruster/d1starboard) -"acn" = ( -/obj/machinery/atmospherics/pipe/simple/visible/fuel{ - dir = 4 - }, -/obj/machinery/meter, -/obj/effect/floor_decal/industrial/warning{ - dir = 1 - }, -/turf/simulated/floor/tiled/techfloor, -/area/thruster/d1starboard) -"aco" = ( -/obj/machinery/door/airlock/civilian{ - name = "Equipment Storage" - }, -/obj/machinery/door/firedoor, -/turf/simulated/floor/tiled/techfloor/grid, -/area/crew_quarters/safe_room/firstdeck) -"acp" = ( -/obj/machinery/atmospherics/binary/passive_gate/on{ - dir = 4; - max_pressure_setting = 30000; - target_pressure = 30000; - use_power = 1 - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 1 - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/light/small{ - dir = 1 - }, -/turf/simulated/floor/tiled/techfloor, -/area/thruster/d1starboard) -"acq" = ( -/obj/machinery/atmospherics/pipe/manifold4w/visible/fuel, -/obj/effect/floor_decal/industrial/warning{ - dir = 4 - }, -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 1 - }, -/turf/simulated/floor/tiled/techfloor, -/area/thruster/d1starboard) -"acr" = ( -/obj/machinery/light/small{ - dir = 8 - }, -/obj/effect/floor_decal/techfloor{ - dir = 8 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/maintenance/firstdeck/forestarboard) -"acs" = ( -/obj/effect/floor_decal/techfloor{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/maintenance/firstdeck/forestarboard) -"act" = ( -/turf/simulated/wall/r_titanium, -/area/shuttle/escape_pod12/station) -"acu" = ( -/obj/machinery/button/blast_door{ - id_tag = "d1starboardnacelle"; - name = "combustion chamber blast door control"; - pixel_y = -24 - }, -/obj/effect/floor_decal/industrial/warning, -/obj/machinery/atmospherics/pipe/simple/visible/fuel{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor, -/area/thruster/d1starboard) -"acv" = ( -/obj/machinery/atmospherics/unary/outlet_injector{ - dir = 1; - frequency = 1447; - id = "fuelmode"; - injecting = 1; - use_power = 1; - volume_rate = 4000 - }, -/obj/effect/floor_decal/industrial/outline/red, -/turf/simulated/floor/reinforced, -/area/thruster/d1starboard) -"acw" = ( -/turf/simulated/wall/r_titanium, -/area/shuttle/escape_pod13/station) -"acx" = ( -/obj/machinery/atmospherics/unary/outlet_injector{ - frequency = 1447; - id = "fuelmode"; - injecting = 1; - use_power = 1; - volume_rate = 4000 - }, -/obj/effect/floor_decal/industrial/outline/red, -/turf/simulated/floor/reinforced, -/area/thruster/d1port) -"acy" = ( -/obj/effect/floor_decal/corner/pink{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/floor_decal/corner/pink{ - dir = 8 - }, -/turf/simulated/floor/tiled/white, -/area/medical/staging) -"acz" = ( -/turf/simulated/wall/prepainted, -/area/medical/medicalhallway) -"acB" = ( -/obj/machinery/door/firedoor, -/obj/structure/table/steel_reinforced, -/obj/effect/floor_decal/industrial/hatch/yellow, -/obj/machinery/door/window/brigdoor/eastleft{ - name = "Emergency Armory Desk" - }, -/obj/machinery/door/blast/regular/open{ - dir = 4; - id_tag = "armory_lock"; - name = "Armory Lockdown Shutters" - }, -/turf/simulated/floor/tiled/dark, -/area/command/armoury/access) -"acC" = ( -/obj/structure/closet/firecloset, -/obj/effect/floor_decal/industrial/outline/grey, -/obj/structure/sign/warning/compressed_gas{ - pixel_y = 32 - }, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/firstdeck/aftstarboard) -"acD" = ( -/turf/simulated/wall/prepainted, -/area/maintenance/firstdeck/centralstarboard) -"acE" = ( -/obj/effect/wallframe_spawn/reinforced/polarized/full{ - id = "roboticlab_window" - }, -/obj/machinery/door/blast/shutters{ - density = 0; - dir = 2; - icon_state = "shutter0"; - id_tag = "robotics_lab"; - name = "Robotics Laboratory Lockdown"; - opacity = 0 - }, -/turf/simulated/floor/plating, -/area/assembly/robotics/laboratory) -"acF" = ( -/obj/structure/table/standard, -/obj/item/device/robotanalyzer, -/obj/item/stack/nanopaste, -/obj/item/stack/nanopaste, -/obj/machinery/button/windowtint{ - id = "roboticlab_window"; - pixel_x = -24; - pixel_y = 5 - }, -/obj/machinery/light_switch{ - pixel_x = -24; - pixel_y = -5 - }, -/obj/machinery/button/alternate/door{ - id_tag = "roboticslab"; - name = "Robotics Laboratory Hallway Door"; - pixel_x = -34; - pixel_y = 5; - req_access = list("ACCESS_ROBOTICS") - }, -/obj/machinery/button/blast_door{ - id_tag = "robotics_lab"; - name = "Robotics Laboratory Lockdown"; - pixel_x = -34; - pixel_y = -6; - req_access = list(list("ACCESS_MEDICAL","ACCESS_ROBOTICS")) - }, -/obj/machinery/camera/network/medbay{ - c_tag = "Infirmary - Robotics Laboratory"; - dir = 4; - network = list("Medical, Engineering") - }, -/obj/effect/floor_decal/corner/paleblue/mono, -/turf/simulated/floor/tiled/white/monotile, -/area/assembly/robotics/laboratory) -"acG" = ( -/obj/structure/disposalpipe/segment, -/obj/machinery/door/blast/regular{ - density = 0; - icon_state = "pdoor0"; - id_tag = "Biohazard"; - name = "Biohazard Shutter"; - opacity = 0 - }, -/obj/structure/table/reinforced, -/obj/item/material/bell, -/obj/machinery/door/window/southright{ - name = "Fabricator Lab Desk" - }, -/obj/machinery/door/firedoor, -/turf/simulated/floor/tiled/monotile, -/area/rnd/development) -"acH" = ( -/obj/machinery/atmospherics/pipe/simple/visible/fuel{ - dir = 10 - }, -/obj/structure/catwalk, -/obj/structure/sign/warning/airlock{ - pixel_y = 32 - }, -/turf/simulated/floor/plating, -/area/maintenance/firstdeck/aftstarboard) -"acI" = ( -/obj/machinery/door/airlock/civilian{ - autoset_access = 0; - id_tag = "med_washroom"; - name = "Decontamination" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/freezer, -/area/medical/medicalhallway) -"acJ" = ( -/obj/structure/closet/crate/freezer, -/obj/random/firstaid, -/obj/random/firstaid, -/obj/random/medical, -/obj/random/medical, -/obj/effect/decal/cleanable/dirt, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/firstdeck/aftstarboard) -"acK" = ( -/obj/effect/floor_decal/industrial/outline/grey, -/obj/machinery/washing_machine, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/firstdeck/aftstarboard) -"acL" = ( -/turf/simulated/wall/prepainted, -/area/maintenance/firstdeck/aftstarboard) -"acM" = ( -/obj/structure/closet/secure_closet/personal/patient, -/obj/random/maintenance/solgov, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/firstdeck/aftstarboard) -"acN" = ( -/obj/structure/closet/secure_closet/crew, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/firstdeck/aftstarboard) -"acO" = ( -/obj/effect/wallframe_spawn/reinforced/no_grille, -/obj/structure/disposalpipe/segment, -/obj/machinery/door/blast/shutters{ - density = 0; - dir = 2; - icon_state = "shutter0"; - id_tag = "chemcounter"; - name = "Chemistry Counter Shutters"; - opacity = 0 - }, -/turf/simulated/floor/plating, -/area/medical/chemistry) -"acP" = ( -/obj/machinery/portable_atmospherics/powered/scrubber, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/firstdeck/aftstarboard) -"acQ" = ( -/obj/machinery/portable_atmospherics/powered/pump/filled, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/firstdeck/aftstarboard) -"acR" = ( -/obj/structure/table/rack, -/obj/item/bodybag, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/firstdeck/aftstarboard) -"acS" = ( -/obj/structure/reagent_dispensers/watertank, -/obj/effect/decal/cleanable/dirt, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/firstdeck/aftstarboard) -"acT" = ( -/obj/structure/reagent_dispensers/fueltank, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/firstdeck/aftstarboard) -"acU" = ( -/obj/structure/disposalpipe/segment{ - dir = 4; - icon_state = "pipe-c" - }, -/obj/effect/wallframe_spawn/reinforced/no_grille, -/obj/machinery/door/blast/shutters{ - density = 0; - dir = 2; - icon_state = "shutter0"; - id_tag = "chemcounter"; - name = "Chemistry Counter Shutters"; - opacity = 0 - }, -/turf/simulated/floor/plating, -/area/medical/chemistry) -"acV" = ( -/obj/structure/table/rack, -/obj/random/toolbox, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/firstdeck/aftstarboard) -"acW" = ( -/obj/machinery/atmospherics/pipe/simple/visible/fuel, -/obj/machinery/door/airlock/hatch/maintenance, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/door/firedoor, -/turf/simulated/floor/tiled/steel_ridged, -/area/thruster/d1starboard) -"acX" = ( -/obj/machinery/atmospherics/pipe/simple/visible{ - dir = 4 - }, -/obj/effect/floor_decal/industrial/warning, -/turf/simulated/floor/tiled/techfloor, -/area/thruster/d1starboard) -"acY" = ( -/obj/machinery/power/apc{ - name = "south bump"; - pixel_y = -28 - }, -/obj/machinery/atmospherics/pipe/simple/visible{ - dir = 4 - }, -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 8 - }, -/obj/structure/cable/green, -/turf/simulated/floor/tiled/techfloor, -/area/thruster/d1starboard) -"acZ" = ( -/obj/machinery/atmospherics/binary/pump/on{ - dir = 4; - target_pressure = 15000 - }, -/obj/effect/floor_decal/industrial/outline/orange, -/turf/simulated/floor/tiled/techfloor, -/area/thruster/d1starboard) -"ada" = ( -/obj/machinery/atmospherics/omni/mixer{ - set_flow_rate = 50; - tag_east = 1; - tag_east_con = 0.2; - tag_north = 1; - tag_north_con = 0.4; - tag_south = 2; - tag_south_con = null; - tag_west = 1; - tag_west_con = 0.4 - }, -/obj/effect/floor_decal/industrial/warning/full, -/obj/effect/floor_decal/industrial/outline/blue, -/turf/simulated/floor/tiled/techfloor/grid, -/area/thruster/d1starboard) -"adb" = ( -/obj/machinery/atmospherics/binary/pump/high_power/on{ - dir = 8; - target_pressure = 15000 - }, -/obj/effect/floor_decal/industrial/outline/orange, -/turf/simulated/floor/tiled/techfloor/grid, -/area/thruster/d1starboard) -"adc" = ( -/obj/machinery/atmospherics/pipe/simple/visible/fuel{ - dir = 9 - }, -/obj/machinery/meter, -/turf/simulated/floor/tiled/techfloor/grid, -/area/thruster/d1starboard) -"ade" = ( -/obj/machinery/meter, -/obj/effect/floor_decal/industrial/warning{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/visible/fuel, -/turf/simulated/floor/tiled/techfloor, -/area/thruster/d1starboard) -"adf" = ( -/obj/machinery/atmospherics/unary/vent_pump/high_volume/airlock{ - dir = 4; - id_tag = "bridgestarboard_pump" - }, -/obj/machinery/oxygen_pump{ - pixel_x = -32 - }, -/obj/effect/floor_decal/techfloor{ - dir = 8 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/maintenance/firstdeck/forestarboard) -"adg" = ( -/obj/machinery/airlock_sensor{ - id_tag = "bridgestarboard_sensor"; - pixel_x = 25; - pixel_y = -6 - }, -/obj/machinery/embedded_controller/radio/airlock/airlock_controller{ - dir = 8; - id_tag = "bridgestarboard_airlock"; - pixel_x = 25; - pixel_y = 8; - req_access = list("ACCESS_MAINT"); - tag_airpump = "bridgestarboard_pump"; - tag_chamber_sensor = "bridgestarboard_sensor"; - tag_exterior_door = "bridgestarboard_outer"; - tag_interior_door = "bridgestarboard_inner" - }, -/obj/machinery/atmospherics/pipe/simple/visible{ - dir = 10 - }, -/obj/effect/floor_decal/techfloor{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/maintenance/firstdeck/forestarboard) -"adh" = ( -/obj/structure/table/reinforced, -/obj/machinery/door/window/westright{ - dir = 1; - name = "Chemistry Desk" - }, -/obj/machinery/door/firedoor, -/obj/machinery/door/blast/shutters{ - density = 0; - dir = 2; - icon_state = "shutter0"; - id_tag = "chemcounter"; - name = "Chemistry Counter Shutters"; - opacity = 0 - }, -/obj/item/material/bell, -/obj/structure/disposalpipe/segment{ - dir = 2; - icon_state = "pipe-c" - }, -/turf/simulated/floor/tiled/white/monotile, -/area/medical/chemistry) -"adj" = ( -/obj/effect/floor_decal/corner/paleblue/mono, -/obj/machinery/disposal, -/obj/effect/floor_decal/industrial/hatch/yellow, -/obj/structure/disposalpipe/trunk, -/obj/machinery/firealarm{ - pixel_y = 24 - }, -/turf/simulated/floor/tiled/white/monotile, -/area/medical/medicalhallway) -"adk" = ( -/obj/machinery/firealarm{ - pixel_y = 24 - }, -/obj/structure/hygiene/sink{ - dir = 4; - pixel_x = 11 - }, -/obj/item/storage/mirror{ - pixel_x = 32 - }, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 8 - }, -/turf/simulated/floor/tiled/freezer, -/area/crew_quarters/head/aux) -"adl" = ( -/obj/effect/floor_decal/corner/paleblue{ - dir = 5 - }, -/obj/structure/bed/chair/padded/blue, -/obj/machinery/power/apc{ - dir = 1; - name = "north bump"; - pixel_y = 24 - }, -/obj/structure/cable/green{ - d2 = 2; - icon_state = "0-2" - }, -/turf/simulated/floor/tiled/white, -/area/medical/medicalhallway) -"adm" = ( -/obj/effect/floor_decal/corner/paleblue/three_quarters{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/white, -/area/medical/medicalhallway) -"adn" = ( -/obj/effect/floor_decal/corner/paleblue/mono, -/obj/structure/reagent_dispensers/water_cooler, -/obj/machinery/computer/guestpass{ - pixel_y = 32 - }, -/turf/simulated/floor/tiled/white/monotile, -/area/medical/medicalhallway) -"ado" = ( -/obj/machinery/light/small{ - dir = 8 - }, -/turf/simulated/floor/tiled/freezer, -/area/crew_quarters/head/aux) -"adp" = ( -/obj/structure/hygiene/sink{ - dir = 4; - pixel_x = 11 - }, -/obj/item/storage/mirror{ - pixel_x = 32 - }, -/turf/simulated/floor/tiled/freezer, -/area/crew_quarters/head/aux) -"adq" = ( -/obj/machinery/firealarm{ - pixel_y = 24 - }, -/obj/machinery/firealarm{ - dir = 1; - pixel_x = 0; - pixel_y = -24 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/catwalk, -/obj/machinery/atmospherics/pipe/simple/visible/fuel{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/thruster/d1starboard) -"ads" = ( -/obj/effect/floor_decal/corner/paleblue, -/turf/simulated/floor/tiled/white, -/area/medical/sleeper) -"adt" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/simple/visible/fuel{ - dir = 5 - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/firstdeck/aftstarboard) -"adu" = ( -/obj/effect/floor_decal/corner/paleblue{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/turf/simulated/floor/tiled/white, -/area/medical/sleeper) -"adv" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/catwalk, -/obj/machinery/atmospherics/pipe/simple/visible/fuel{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/maintenance/firstdeck/aftstarboard) -"adw" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/decal/cleanable/dirt, -/obj/structure/catwalk, -/obj/machinery/atmospherics/pipe/simple/visible/fuel{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/maintenance/firstdeck/aftstarboard) -"adx" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 1 - }, -/obj/effect/floor_decal/corner/green, -/turf/simulated/floor/tiled, -/area/hallway/primary/firstdeck/center) -"ady" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/visible/fuel{ - dir = 4 - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/firstdeck/aftstarboard) -"adz" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/obj/effect/decal/cleanable/cobweb2, -/obj/structure/cable/green{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/effect/decal/cleanable/dirt, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/catwalk, -/obj/machinery/atmospherics/pipe/manifold/visible/fuel{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/maintenance/firstdeck/aftstarboard) -"adA" = ( -/obj/structure/lattice, -/turf/space, -/area/space) -"adB" = ( -/obj/effect/floor_decal/corner/paleblue/three_quarters{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/white, -/area/medical/sleeper) -"adC" = ( -/obj/machinery/atmospherics/pipe/simple/visible/blue{ - dir = 4 - }, -/turf/simulated/wall/r_wall/hull, -/area/thruster/d1starboard) -"adD" = ( -/obj/machinery/atmospherics/portables_connector{ - dir = 8 - }, -/obj/effect/floor_decal/industrial/hatch/orange, -/obj/machinery/light/small{ - dir = 8 - }, -/obj/machinery/firealarm{ - dir = 1; - pixel_y = -24 - }, -/turf/simulated/floor/tiled/techfloor, -/area/thruster/d1starboard) -"adE" = ( -/obj/machinery/meter, -/obj/machinery/atmospherics/pipe/simple/visible/fuel, -/obj/effect/floor_decal/industrial/warning, -/turf/simulated/floor/tiled/techfloor, -/area/thruster/d1starboard) -"adF" = ( -/obj/effect/floor_decal/industrial/warning, -/turf/simulated/floor/tiled/techfloor, -/area/thruster/d1starboard) -"adG" = ( -/obj/machinery/atmospherics/pipe/simple/visible/fuel{ - dir = 6 - }, -/obj/effect/floor_decal/industrial/warning, -/turf/simulated/floor/tiled/techfloor, -/area/thruster/d1starboard) -"adH" = ( -/obj/effect/floor_decal/corner/paleblue/three_quarters, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 5 - }, -/turf/simulated/floor/tiled/white, -/area/medical/sleeper) -"adI" = ( -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/visible/fuel{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor, -/area/thruster/d1starboard) -"adJ" = ( -/obj/machinery/atmospherics/pipe/manifold4w/visible/fuel, -/obj/effect/floor_decal/industrial/warning{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor, -/area/thruster/d1starboard) -"adK" = ( -/turf/simulated/wall/r_wall/prepainted, -/area/crew_quarters/safe_room/firstdeck) -"adL" = ( -/obj/effect/floor_decal/corner/paleblue{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/medical/sleeper) -"adM" = ( -/turf/simulated/floor/plating, -/area/maintenance/firstdeck/forestarboard) -"adN" = ( -/obj/machinery/portable_atmospherics/powered/pump/filled, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/firstdeck/forestarboard) -"adO" = ( -/obj/effect/floor_decal/corner/paleblue{ - dir = 10 - }, -/obj/machinery/button/alternate/door{ - id_tag = "ETC_hall"; - name = "Treatment Center Exit"; - pixel_x = 7; - pixel_y = 24 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/medical/sleeper) -"adP" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/universal{ - dir = 4 - }, -/obj/structure/railing/mapped, -/obj/structure/railing/mapped{ - dir = 8; - icon_state = "railing0-1" - }, -/turf/simulated/floor/plating, -/area/maintenance/firstdeck/forestarboard) -"adQ" = ( -/obj/effect/floor_decal/industrial/hatch/blue, -/obj/machinery/door/firedoor, -/obj/structure/sign/directions/infm{ - pixel_y = 32 - }, -/obj/machinery/door/blast/shutters{ - density = 0; - dir = 4; - icon_state = "shutter0"; - id_tag = "infirm_pub"; - name = "Infirmary Public Hallway Lockdown"; - opacity = 0 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 4 - }, -/turf/simulated/floor/tiled/white/monotile, -/area/medical/sleeper) -"adR" = ( -/obj/machinery/atmospherics/pipe/simple/visible{ - dir = 10 - }, -/obj/effect/decal/cleanable/cobweb2, -/obj/structure/railing/mapped, -/turf/simulated/floor/plating, -/area/maintenance/firstdeck/forestarboard) -"adS" = ( -/turf/simulated/wall/prepainted, -/area/maintenance/firstdeck/forestarboard) -"adT" = ( -/obj/machinery/door/airlock/external{ - frequency = 1379; - icon_state = "closed"; - id_tag = "bridgestarboard_inner"; - locked = 1; - name = "Engineering External Access" - }, -/obj/machinery/atmospherics/pipe/simple/visible, -/turf/simulated/floor/tiled/techfloor/grid, -/area/maintenance/firstdeck/forestarboard) -"adU" = ( -/obj/structure/sign/warning/airlock, -/turf/simulated/wall/prepainted, -/area/maintenance/firstdeck/forestarboard) -"adV" = ( -/obj/effect/floor_decal/industrial/hatch/yellow, -/obj/structure/ladder/up, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/firstdeck/forestarboard) -"adW" = ( -/obj/machinery/atmospherics/pipe/simple/visible{ - dir = 6 - }, -/obj/structure/dispenser/oxygen, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/firstdeck/forestarboard) -"adX" = ( -/obj/machinery/atmospherics/pipe/simple/visible{ - dir = 4 - }, -/obj/structure/closet, -/obj/random/tech_supply, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/firstdeck/forestarboard) -"adY" = ( -/obj/machinery/atmospherics/pipe/simple/visible{ - dir = 4 - }, -/obj/machinery/space_heater, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/firstdeck/forestarboard) -"adZ" = ( -/obj/machinery/atmospherics/portables_connector{ - dir = 8 - }, -/obj/machinery/portable_atmospherics/canister/air/airlock, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/firstdeck/forestarboard) -"aea" = ( -/obj/machinery/shieldgen, -/turf/simulated/floor/plating, -/area/maintenance/firstdeck/centralstarboard) -"aeb" = ( -/obj/machinery/space_heater, -/obj/effect/decal/cleanable/cobweb2, -/turf/simulated/floor/plating, -/area/maintenance/firstdeck/centralstarboard) -"aec" = ( -/obj/effect/floor_decal/corner/green{ - dir = 10 - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled, -/area/hallway/primary/firstdeck/center) -"aed" = ( -/obj/effect/floor_decal/corner/paleblue{ - dir = 10 - }, -/obj/structure/disposalpipe/segment{ - dir = 1; - icon_state = "pipe-c" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/medical/medicalhallway) -"aee" = ( -/obj/structure/hygiene/shower{ - dir = 4 - }, -/obj/item/soap, -/turf/simulated/floor/tiled/freezer, -/area/crew_quarters/head/aux) -"aef" = ( -/obj/structure/table/rack, -/obj/random/maintenance/solgov, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/firstdeck/centralstarboard) -"aeg" = ( -/turf/simulated/floor/plating, -/area/maintenance/firstdeck/centralstarboard) -"aeh" = ( -/obj/effect/floor_decal/industrial/outline/grey, -/obj/structure/dispenser{ - oxygentanks = 0 - }, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/firstdeck/centralstarboard) -"aei" = ( -/obj/effect/floor_decal/corner/paleblue{ - dir = 5 - }, -/obj/effect/floor_decal/corner/paleblue{ - dir = 10 - }, -/obj/item/reagent_containers/ivbag, -/obj/item/reagent_containers/ivbag, -/obj/item/reagent_containers/ivbag/nanoblood, -/obj/item/reagent_containers/ivbag/nanoblood, -/obj/item/reagent_containers/ivbag/nanoblood, -/obj/item/reagent_containers/ivbag/nanoblood, -/obj/structure/closet/secure_closet/medical_wall{ - name = "IV Equipment Cabinet"; - pixel_y = 32 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/white, -/area/medical/sleeper) -"aej" = ( -/obj/effect/floor_decal/corner/paleblue{ - dir = 10 - }, -/obj/structure/disposalpipe/sortjunction/flipped{ - dir = 1; - name = "Chemistry"; - sort_type = "Chemistry" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/medical/medicalhallway) -"aek" = ( -/obj/machinery/optable, -/obj/effect/floor_decal/floordetail/edgedrain{ - dir = 1 - }, -/obj/effect/floor_decal/corner/paleblue{ - dir = 10 - }, -/obj/machinery/oxygen_pump{ - pixel_x = -32; - pixel_y = 32 - }, -/obj/machinery/body_scan_display{ - pixel_y = 24 - }, -/turf/simulated/floor/tiled/white, -/area/medical/surgery) -"ael" = ( -/obj/effect/floor_decal/corner/paleblue{ - dir = 9 - }, -/obj/structure/disposalpipe/segment, -/obj/machinery/tele_beacon, -/turf/simulated/floor/tiled/white, -/area/medical/medicalhallway) -"aem" = ( -/obj/effect/floor_decal/corner/paleblue{ - dir = 10 - }, -/obj/structure/disposalpipe/junction{ - dir = 2; - icon_state = "pipe-j2" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 1 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/medical/medicalhallway) -"aen" = ( -/obj/effect/floor_decal/corner/paleblue{ - dir = 10 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/sign/chemistry{ - pixel_y = 32 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/medical/medicalhallway) -"aeo" = ( -/obj/effect/floor_decal/corner/paleblue{ - dir = 10 - }, -/obj/machinery/light/spot{ - dir = 1 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/sign/warning/nosmoking_1{ - pixel_y = 23 - }, -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/medical/medicalhallway) -"aep" = ( -/obj/effect/floor_decal/corner/paleblue{ - dir = 10 - }, -/obj/structure/disposalpipe/segment{ - dir = 8; - icon_state = "pipe-c" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/medical/medicalhallway) -"aeq" = ( -/obj/structure/bed/chair/office/comfy/red, -/obj/structure/cable/green{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/effect/floor_decal/corner/red{ - dir = 9 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/security/bo) -"aer" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/visible/fuel, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/firstdeck/aftstarboard) -"aes" = ( -/obj/structure/closet/emcloset, -/obj/random/maintenance/solgov, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/firstdeck/aftstarboard) -"aet" = ( -/turf/simulated/wall/ocp_wall, -/area/thruster/d1starboard) -"aeu" = ( -/obj/effect/floor_decal/corner/paleblue{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 1 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/medical/medicalhallway) -"aev" = ( -/obj/effect/floor_decal/corner/red/diagonal, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/turf/simulated/floor/tiled/freezer, -/area/security/brig) -"aew" = ( -/obj/effect/floor_decal/corner/paleblue/three_quarters{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/medical/medicalhallway) -"aex" = ( -/obj/effect/floor_decal/corner/red/mono, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/computer/modular/preset/security{ - dir = 8; - icon_state = "console" - }, -/obj/machinery/requests_console{ - announcementConsole = 1; - department = "Security"; - departmentType = 5; - pixel_x = 32 - }, -/turf/simulated/floor/tiled/monotile, -/area/security/locker) -"aey" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 8 - }, -/obj/machinery/light/small{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/visible/fuel{ - dir = 6 - }, -/turf/simulated/floor/tiled/techfloor, -/area/thruster/d1starboard) -"aez" = ( -/obj/machinery/door/airlock/vault/bolted{ - id_tag = "selfddoor"; - name = "Self Destruct Access" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/button/alternate/door/bolts{ - id_tag = "selfddoor"; - name = "Self Destruct Airlock Bolt Control"; - pixel_y = -32; - req_access = list("ACCESS_VAULT") - }, -/obj/item/airlock_brace{ - req_access = list("ACCESS_VAULT") - }, -/obj/machinery/door/firedoor, -/turf/simulated/floor/tiled/steel_ridged, -/area/security/nuke_storage) -"aeA" = ( -/obj/effect/floor_decal/techfloor{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/cyan{ - dir = 10 - }, -/obj/machinery/firealarm, -/turf/simulated/floor/tiled/techfloor/grid, -/area/crew_quarters/safe_room/firstdeck) -"aeB" = ( -/obj/effect/floor_decal/corner/paleblue{ - dir = 10 - }, -/obj/effect/floor_decal/corner/paleblue{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/medical/medicalhallway) -"aeC" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/door/airlock/glass/medical{ - autoset_access = 0; - name = "Medical Foyer"; - req_access = list(list("ACCESS_MEDICAL","ACCESS_MORGUE","ACCESS_FORENSICS")) - }, -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 4 - }, -/turf/simulated/floor/tiled/white/monotile, -/area/medical/foyer) -"aeD" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/firstdeck/forestarboard) -"aeE" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/firstdeck/forestarboard) -"aeF" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 1 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/medical/foyer) -"aeG" = ( -/obj/machinery/atmospherics/pipe/simple/visible{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/firstdeck/forestarboard) -"aeH" = ( -/obj/machinery/atmospherics/pipe/simple/visible{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/firstdeck/forestarboard) -"aeI" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 4 - }, -/obj/structure/catwalk, -/obj/machinery/atmospherics/binary/pump/on{ - dir = 4; - target_pressure = 200 - }, -/turf/simulated/floor/plating, -/area/maintenance/firstdeck/forestarboard) -"aeJ" = ( -/obj/machinery/atmospherics/pipe/manifold/visible, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, -/obj/structure/disposalpipe/segment{ - dir = 4; - icon_state = "pipe-c" - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/machinery/access_button{ - command = "cycle_interior"; - frequency = 1379; - master_tag = "bridgestarboard_airlock"; - name = "interior access button"; - pixel_x = 24; - pixel_y = 24; - req_access = list("ACCESS_MAINT") - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 1 - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/firstdeck/forestarboard) -"aeK" = ( -/obj/machinery/atmospherics/pipe/simple/visible{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 1 - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/firstdeck/forestarboard) -"aeL" = ( -/obj/machinery/atmospherics/pipe/simple/visible{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/firstdeck/forestarboard) -"aeM" = ( -/obj/machinery/atmospherics/pipe/simple/visible{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/firstdeck/forestarboard) -"aeN" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/firstdeck/forestarboard) -"aeO" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/obj/structure/disposalpipe/segment{ - dir = 2; - icon_state = "pipe-c" - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/firstdeck/forestarboard) -"aeP" = ( -/obj/structure/closet/emcloset, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, -/turf/simulated/floor/plating, -/area/maintenance/firstdeck/centralstarboard) -"aeR" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/turf/simulated/floor/plating, -/area/maintenance/firstdeck/centralstarboard) -"aeS" = ( -/obj/structure/shuttle/engine/propulsion, -/turf/simulated/wall/r_titanium, -/area/shuttle/escape_pod12/station) -"aeT" = ( -/obj/machinery/door/airlock/external{ - frequency = 1380; - icon_state = "closed"; - id_tag = "escape_pod_12_hatch"; - locked = 1; - name = "Escape Pod Seven Hatch" - }, -/turf/simulated/floor/plating, -/area/shuttle/escape_pod12/station) -"aeU" = ( -/obj/structure/shuttle/engine/propulsion, -/turf/simulated/wall/r_titanium, -/area/shuttle/escape_pod13/station) -"aeV" = ( -/obj/machinery/door/airlock/external{ - frequency = 1380; - icon_state = "closed"; - id_tag = "escape_pod_13_hatch"; - locked = 1; - name = "Escape Pod Eight Hatch" - }, -/turf/simulated/floor/plating, -/area/shuttle/escape_pod13/station) -"aeW" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 9 - }, -/turf/simulated/floor/tiled/white, -/area/medical/foyer) -"aeX" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 1 - }, -/turf/simulated/floor/tiled/white, -/area/medical/foyer) -"aeY" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 1 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/turf/simulated/floor/tiled/white, -/area/medical/foyer) -"aeZ" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/white, -/area/medical/foyer) -"afa" = ( -/obj/effect/floor_decal/corner/paleblue/three_quarters{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/turf/simulated/floor/tiled/white, -/area/medical/sleeper) -"afb" = ( -/obj/effect/floor_decal/industrial/hatch/blue, -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/multi_tile/glass/medical{ - dir = 4; - id_tag = "ETC_hall"; - name = "Treatment Center" - }, -/obj/machinery/door/blast/shutters{ - density = 0; - dir = 4; - icon_state = "shutter0"; - id_tag = "infirm_pub"; - name = "Infirmary Public Hallway Lockdown"; - opacity = 0 - }, -/turf/simulated/floor/tiled/white/monotile, -/area/medical/sleeper) -"afc" = ( -/obj/effect/floor_decal/corner/paleblue{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/white, -/area/medical/sleeper) -"afd" = ( -/obj/effect/floor_decal/spline/plain/blue{ - dir = 9 - }, -/obj/structure/bed/roller, -/turf/simulated/floor/tiled/white, -/area/medical/sleeper) -"afe" = ( -/obj/effect/floor_decal/corner/paleblue{ - dir = 5 - }, -/turf/simulated/floor/tiled/white, -/area/medical/medicalhallway) -"aff" = ( -/obj/effect/floor_decal/corner/paleblue/three_quarters{ - dir = 1 - }, -/obj/structure/disposalpipe/segment, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/white, -/area/medical/medicalhallway) -"afg" = ( -/obj/effect/floor_decal/corner/paleblue/three_quarters{ - dir = 8 - }, -/obj/structure/disposalpipe/sortjunction/flipped{ - dir = 2; - name = "Medical Foyer"; - sort_type = "Medical Foyer" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/white, -/area/medical/medicalhallway) -"afh" = ( -/obj/effect/floor_decal/corner/paleblue{ - dir = 5 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/medical/medicalhallway) -"afi" = ( -/obj/effect/floor_decal/corner/paleblue{ - dir = 5 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/hologram/holopad, -/obj/machinery/camera/network/medbay{ - c_tag = "Infirmary - Lobby"; - dir = 1 - }, -/turf/simulated/floor/tiled/white, -/area/medical/medicalhallway) -"afj" = ( -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/structure/closet/secure_closet/brig, -/turf/simulated/floor/tiled/monotile, -/area/security/wing) -"afk" = ( -/obj/effect/floor_decal/corner/paleblue{ - dir = 5 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/white, -/area/medical/medicalhallway) -"afl" = ( -/obj/effect/floor_decal/corner/paleblue/three_quarters{ - dir = 1 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/medical/medicalhallway) -"afm" = ( -/obj/effect/floor_decal/corner/paleblue/mono, -/obj/structure/bed/chair/padded/blue{ - dir = 8 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/simulated/floor/tiled/white/monotile, -/area/medical/medicalhallway) -"afn" = ( -/obj/structure/closet/l3closet/general, -/obj/effect/floor_decal/industrial/outline/grey, -/obj/structure/railing/mapped{ - dir = 4; - icon_state = "railing0-1" - }, -/obj/machinery/light{ - dir = 1 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/medical/foyer/storeroom) -"afo" = ( -/obj/effect/wallframe_spawn/no_grille, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/door/blast/shutters{ - density = 0; - dir = 4; - icon_state = "shutter0"; - id_tag = "infirm_windows"; - name = "Infirmary Window Lockdown"; - opacity = 0 - }, -/turf/simulated/floor/plating, -/area/medical/foyer) -"afp" = ( -/obj/effect/floor_decal/corner/paleblue{ - dir = 10 - }, -/obj/structure/disposalpipe/segment{ - dir = 2; - icon_state = "pipe-c" - }, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 1 - }, -/turf/simulated/floor/tiled/white, -/area/medical/foyer) -"afq" = ( -/turf/simulated/wall/r_wall/hull, -/area/engineering/fuelbay/aux) -"afr" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/machinery/atmospherics/pipe/simple/visible/fuel{ - dir = 5 - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/firstdeck/aftstarboard) -"afs" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/simple/visible/fuel{ - dir = 4 - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/firstdeck/aftstarboard) -"aft" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/simple/visible/fuel{ - dir = 10 - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/firstdeck/aftstarboard) -"afu" = ( -/obj/effect/floor_decal/corner/paleblue{ - dir = 10 - }, -/turf/simulated/floor/tiled/white, -/area/medical/foyer) -"afv" = ( -/obj/effect/floor_decal/corner/paleblue{ - dir = 10 - }, -/obj/machinery/power/apc{ - name = "south bump"; - pixel_y = -24 - }, -/obj/structure/cable/green, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 1 - }, -/turf/simulated/floor/tiled/white, -/area/medical/foyer) -"afw" = ( -/obj/machinery/atmospherics/unary/vent_pump/siphon/on/atmos{ - dir = 4; - internal_pressure_bound = 35000; - internal_pressure_bound_default = 35000 - }, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/floor/reinforced, -/area/thruster/d1starboard) -"afx" = ( -/obj/effect/floor_decal/corner/paleblue{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/white, -/area/medical/foyer) -"afy" = ( -/obj/effect/floor_decal/corner/paleblue{ - dir = 10 - }, -/obj/structure/closet/crate/secure/biohazard/alt, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/alarm{ - dir = 1; - pixel_y = -22 - }, -/turf/simulated/floor/tiled/white, -/area/medical/foyer) -"afz" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 8 - }, -/obj/machinery/atmospherics/valve/digital{ - id_tag = "fuelmode" - }, -/turf/simulated/floor/tiled/techfloor, -/area/thruster/d1starboard) -"afA" = ( -/obj/machinery/atmospherics/pipe/manifold/visible/fuel{ - dir = 4 - }, -/turf/simulated/floor/reinforced, -/area/thruster/d1starboard) -"afB" = ( -/obj/structure/bed/roller, -/obj/effect/floor_decal/spline/plain/blue{ - dir = 5 - }, -/obj/machinery/firealarm{ - dir = 1; - pixel_y = -24 - }, -/turf/simulated/floor/tiled/white, -/area/medical/sleeper) -"afC" = ( -/obj/effect/floor_decal/techfloor{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/cyan{ - dir = 10 - }, -/turf/simulated/floor/tiled/techfloor, -/area/crew_quarters/safe_room/firstdeck) -"afD" = ( -/obj/item/modular_computer/telescreen/preset/medical{ - pixel_y = -32 - }, -/obj/machinery/light/spot, -/obj/structure/table/standard, -/obj/effect/floor_decal/corner/paleblue{ - dir = 5 - }, -/obj/effect/floor_decal/corner/paleblue{ - dir = 10 - }, -/turf/simulated/floor/tiled/white, -/area/medical/sleeper) -"afE" = ( -/obj/machinery/hologram/holopad, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 - }, -/turf/simulated/floor/tiled/techfloor, -/area/crew_quarters/safe_room/firstdeck) -"afF" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/turf/simulated/floor/tiled/techfloor, -/area/crew_quarters/safe_room/firstdeck) -"afG" = ( -/obj/structure/curtain/open/bed, -/turf/simulated/floor/tiled/techfloor, -/area/crew_quarters/safe_room/firstdeck) -"afH" = ( -/obj/effect/floor_decal/corner/paleblue/mono, -/obj/structure/table/reinforced, -/obj/machinery/cell_charger, -/obj/item/modular_computer/telescreen/preset/medical{ - pixel_y = 32 - }, -/turf/simulated/floor/tiled/white/monotile, -/area/medical/staging) -"afI" = ( -/turf/simulated/wall/prepainted, -/area/hallway/primary/firstdeck/fore) -"afJ" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/door/airlock/hatch/maintenance, -/obj/structure/disposalpipe/segment, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/door/firedoor, -/turf/simulated/floor/tiled/steel_ridged, -/area/hallway/primary/firstdeck/fore) -"afK" = ( -/obj/effect/floor_decal/corner/paleblue{ - dir = 5 - }, -/obj/effect/floor_decal/corner/paleblue{ - dir = 10 - }, -/obj/structure/table/standard, -/turf/simulated/floor/tiled/white, -/area/medical/sleeper) -"afL" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/disposalpipe/segment, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/firstdeck/forestarboard) -"afM" = ( -/obj/machinery/portable_atmospherics/powered/scrubber, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/firstdeck/forestarboard) -"afN" = ( -/obj/structure/reagent_dispensers/watertank, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/firstdeck/forestarboard) -"afO" = ( -/obj/structure/reagent_dispensers/fueltank, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/firstdeck/forestarboard) -"afP" = ( -/obj/structure/cable/green{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, -/obj/structure/catwalk, -/obj/structure/disposalpipe/segment{ - dir = 4; - icon_state = "pipe-c" - }, -/turf/simulated/floor/plating, -/area/maintenance/firstdeck/centralstarboard) -"afQ" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 - }, -/obj/structure/catwalk, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/turf/simulated/floor/plating, -/area/maintenance/firstdeck/centralstarboard) -"afR" = ( -/obj/structure/cable/green{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/catwalk, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/maintenance/firstdeck/centralstarboard) -"afS" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/obj/structure/catwalk, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/turf/simulated/floor/plating, -/area/maintenance/firstdeck/centralstarboard) -"afT" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/random/obstruction, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/firstdeck/centralstarboard) -"afU" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/structure/catwalk, -/obj/structure/disposalpipe/segment{ - dir = 2; - icon_state = "pipe-c" - }, -/turf/simulated/floor/plating, -/area/maintenance/firstdeck/centralstarboard) -"afV" = ( -/obj/machinery/door/airlock/external/escapepod{ - icon_state = "closed"; - id_tag = "escape_pod_12_berth_hatch"; - name = "Escape Pod Seven" - }, -/obj/machinery/shield_diffuser, -/turf/simulated/floor/plating, -/area/maintenance/firstdeck/centralstarboard) -"afW" = ( -/obj/machinery/door/airlock/external/escapepod{ - icon_state = "closed"; - id_tag = "escape_pod_13_berth_hatch"; - name = "Escape Pod Eight" - }, -/obj/machinery/shield_diffuser, -/turf/simulated/floor/plating, -/area/maintenance/firstdeck/centralstarboard) -"afX" = ( -/obj/effect/floor_decal/industrial/shutoff, -/obj/machinery/atmospherics/valve/shutoff/fuel{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/firstdeck/aftstarboard) -"afY" = ( -/obj/machinery/vending/medical/torch{ - dir = 1 - }, -/obj/effect/floor_decal/corner/paleblue/mono, -/turf/simulated/floor/tiled/white/monotile, -/area/medical/sleeper) -"afZ" = ( -/obj/effect/wallframe_spawn/no_grille, -/obj/machinery/door/blast/shutters{ - density = 0; - dir = 4; - icon_state = "shutter0"; - id_tag = "infirm_windows"; - name = "Infirmary Window Lockdown"; - opacity = 0 - }, -/turf/simulated/floor/plating, -/area/medical/sleeper) -"aga" = ( -/obj/machinery/door/firedoor, -/obj/effect/floor_decal/industrial/hatch/blue, -/obj/machinery/door/airlock/multi_tile/glass/medical{ - id_tag = "ETC_stage"; - name = "Treatment Center" - }, -/turf/simulated/floor/tiled/white/monotile, -/area/medical/sleeper) -"agb" = ( -/obj/machinery/door/firedoor, -/obj/effect/floor_decal/industrial/hatch/blue, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/white/monotile, -/area/medical/sleeper) -"agc" = ( -/obj/effect/floor_decal/corner/paleblue{ - dir = 6 - }, -/turf/simulated/floor/tiled/white, -/area/medical/staging) -"agd" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/medical/medicalhallway) -"agf" = ( -/obj/effect/floor_decal/corner/paleblue{ - dir = 6 - }, -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 1 - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/white, -/area/medical/medicalhallway) -"agg" = ( -/obj/machinery/atmospherics/unary/tank/air{ - dir = 8; - start_pressure = 450 - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/button/alternate/door/bolts{ - id_tag = "medsafe_aft"; - name = "safe room door-control"; - pixel_x = 25 - }, -/obj/machinery/alarm{ - pixel_y = 24 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/crew_quarters/safe_room/medical) -"agh" = ( -/obj/effect/floor_decal/corner/paleblue{ - dir = 9 - }, -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, -/turf/simulated/floor/tiled/white, -/area/medical/medicalhallway) -"agi" = ( -/obj/effect/floor_decal/corner/paleblue{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/white, -/area/medical/staging) -"agj" = ( -/obj/effect/floor_decal/corner/paleblue/mono, -/obj/structure/bed/roller, -/turf/simulated/floor/tiled/white/monotile, -/area/medical/staging) -"agl" = ( -/obj/effect/wallframe_spawn/reinforced/polarized/no_grille{ - id = "counselor_office" - }, -/turf/simulated/floor/plating, -/area/medical/counselor) -"agn" = ( -/obj/structure/railing/mapped{ - dir = 4; - icon_state = "railing0-1" - }, -/turf/simulated/floor/tiled/dark, -/area/medical/foyer/storeroom) -"ago" = ( -/obj/effect/floor_decal/corner/paleblue{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/white, -/area/medical/staging) -"agp" = ( -/obj/machinery/door/airlock/medical{ - id_tag = "counselor"; - name = "Counselor's Office" - }, -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/white/monotile, -/area/medical/counselor) -"agq" = ( -/obj/structure/table/standard, -/obj/machinery/alarm{ - pixel_y = 24 - }, -/obj/item/autopsy_scanner, -/obj/item/scalpel, -/obj/machinery/light/small{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/medical/morgue/autopsy) -"agr" = ( -/obj/structure/ladder, -/obj/effect/floor_decal/industrial/hatch/yellow, -/obj/effect/catwalk_plated, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/firstdeck/aftstarboard) -"ags" = ( -/obj/effect/floor_decal/corner/paleblue{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/turf/simulated/floor/tiled/white, -/area/medical/staging) -"agt" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/simple/visible/fuel{ - dir = 5 - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/firstdeck/aftstarboard) -"agu" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/decal/cleanable/generic, -/obj/machinery/atmospherics/pipe/simple/visible/fuel{ - dir = 4 - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/firstdeck/aftstarboard) -"agv" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/machinery/atmospherics/pipe/simple/visible/fuel{ - dir = 10 - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/firstdeck/aftstarboard) -"agw" = ( -/obj/machinery/sparker{ - id_tag = "engines"; - pixel_x = -24 - }, -/obj/machinery/atmospherics/unary/vent_pump/siphon/on/atmos{ - dir = 4; - internal_pressure_bound = 35000; - internal_pressure_bound_default = 35000 - }, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/floor/reinforced, -/area/thruster/d1starboard) -"agx" = ( -/obj/effect/floor_decal/corner/paleblue{ - dir = 5 - }, -/obj/effect/floor_decal/corner/paleblue{ - dir = 10 - }, -/turf/simulated/floor/tiled/white, -/area/medical/staging) -"agy" = ( -/obj/machinery/atmospherics/binary/passive_gate/on{ - id_tag = "fuelmode"; - target_pressure = 2000; - use_power = 1 - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 8 - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled/techfloor, -/area/thruster/d1starboard) -"agz" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/cyan{ - dir = 9 - }, -/turf/simulated/floor/tiled/techfloor, -/area/crew_quarters/safe_room/firstdeck) -"agA" = ( -/obj/machinery/atmospherics/binary/pump/on, -/turf/simulated/floor/tiled/techfloor, -/area/crew_quarters/safe_room/firstdeck) -"agB" = ( -/obj/effect/floor_decal/corner/paleblue{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden, -/turf/simulated/floor/tiled/white, -/area/medical/sleeper) -"agC" = ( -/obj/structure/closet/crate/paper_refill, -/turf/simulated/floor/plating, -/area/maintenance/firstdeck/forestarboard) -"agD" = ( -/obj/structure/closet/emcloset, -/obj/effect/floor_decal/corner/blue/mono, -/turf/simulated/floor/tiled/monotile, -/area/hallway/primary/firstdeck/fore) -"agE" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/disposalpipe/segment, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/light{ - dir = 4 - }, -/obj/effect/floor_decal/corner/blue/half{ - dir = 1 - }, -/turf/simulated/floor/tiled/monotile, -/area/hallway/primary/firstdeck/fore) -"agF" = ( -/obj/structure/table/steel, -/obj/item/hand_labeler, -/turf/simulated/floor/tiled/dark/monotile, -/area/command/conference) -"agG" = ( -/obj/machinery/photocopier, -/turf/simulated/floor/tiled/dark/monotile, -/area/command/conference) -"agH" = ( -/obj/effect/floor_decal/corner/paleblue{ - dir = 5 - }, -/obj/effect/floor_decal/corner/paleblue{ - dir = 10 - }, -/obj/structure/bed/chair/padded/blue, -/turf/simulated/floor/tiled/white, -/area/medical/staging) -"agI" = ( -/obj/effect/floor_decal/corner/paleblue{ - dir = 9 - }, -/turf/simulated/floor/tiled/white, -/area/medical/staging) -"agJ" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/obj/structure/disposalpipe/segment{ - dir = 1; - icon_state = "pipe-c" - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/firstdeck/forestarboard) -"agK" = ( -/obj/effect/floor_decal/corner/paleblue{ - dir = 5 - }, -/obj/machinery/button/alternate/door{ - id_tag = "inf_stage"; - name = "Infirmary Staging Exit"; - pixel_y = -23 - }, -/obj/machinery/camera/network/medbay{ - c_tag = "Infirmary - Staging"; - dir = 1 - }, -/obj/effect/floor_decal/sign/tr, -/obj/machinery/light/spot, -/turf/simulated/floor/tiled/white, -/area/medical/staging) -"agM" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/obj/structure/disposalpipe/segment{ - dir = 8; - icon_state = "pipe-c" - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/firstdeck/centralstarboard) -"agN" = ( -/turf/simulated/wall/prepainted, -/area/maintenance/substation/firstdeck) -"agO" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/engineering{ - name = "First Deck Substation" - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/maintenance/substation/firstdeck) -"agP" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/firstdeck/centralstarboard) -"agQ" = ( -/obj/machinery/atmospherics/valve/shutoff/supply{ - dir = 4 - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/atmospherics/valve/shutoff/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/maintenance/firstdeck/centralstarboard) -"agR" = ( -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 4; - icon_state = "warningcorner" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/firstdeck/centralstarboard) -"agS" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 1; - icon_state = "warning" - }, -/obj/machinery/embedded_controller/radio/simple_docking_controller/escape_pod_berth{ - frequency = 1380; - id_tag = "escape_pod_12_berth"; - name = "escape pod seven berth controller"; - pixel_x = -24; - pixel_y = 24; - tag_door = "escape_pod_12_berth_hatch" - }, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/firstdeck/centralstarboard) -"agT" = ( -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 1 - }, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/firstdeck/centralstarboard) -"agU" = ( -/obj/effect/floor_decal/industrial/hatch/blue, -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/glass/medical{ - autoset_access = 0; - id_tag = "inf_recep"; - name = "Infirmary Reception"; - req_access = list("ACCESS_MEDICAL") - }, -/turf/simulated/floor/tiled/white/monotile, -/area/medical/staging) -"agV" = ( -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 4; - icon_state = "warningcorner" - }, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/firstdeck/centralstarboard) -"agW" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 1; - icon_state = "warning" - }, -/obj/machinery/embedded_controller/radio/simple_docking_controller/escape_pod_berth{ - frequency = 1380; - id_tag = "escape_pod_13_berth"; - name = "escape pod eight berth controller"; - pixel_x = -24; - pixel_y = 24; - tag_door = "escape_pod_13_berth_hatch" - }, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/firstdeck/centralstarboard) -"agX" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/maintenance, -/turf/simulated/floor/tiled/techfloor/grid, -/area/maintenance/firstdeck/centralstarboard) -"agY" = ( -/obj/effect/floor_decal/corner/paleblue{ - dir = 5 - }, -/turf/simulated/floor/tiled/white, -/area/medical/staging) -"agZ" = ( -/obj/machinery/door/firedoor, -/obj/effect/floor_decal/industrial/hatch/blue, -/obj/machinery/door/airlock/multi_tile/glass/medical{ - id_tag = "inf_stage"; - name = "Infirmary Staging" - }, -/obj/machinery/door/blast/shutters{ - density = 0; - dir = 2; - icon_state = "shutter0"; - id_tag = "infirm_stage"; - name = "Infirmary Staging Lockdown"; - opacity = 0 - }, -/turf/simulated/floor/tiled/white/monotile, -/area/medical/staging) -"aha" = ( -/obj/machinery/door/firedoor, -/obj/effect/floor_decal/industrial/hatch/blue, -/obj/machinery/door/blast/shutters{ - density = 0; - dir = 2; - icon_state = "shutter0"; - id_tag = "infirm_stage"; - name = "Infirmary Staging Lockdown"; - opacity = 0 - }, -/turf/simulated/floor/tiled/white/monotile, -/area/medical/staging) -"ahb" = ( -/obj/structure/ladder, -/obj/effect/floor_decal/industrial/hatch/yellow, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/firstdeck/centralstarboard) -"ahc" = ( -/obj/effect/wallframe_spawn/reinforced/no_grille, -/obj/machinery/door/blast/shutters{ - density = 0; - dir = 2; - icon_state = "shutter0"; - id_tag = "inf_recep_window"; - name = "Infirmary Reception Window Lockdown"; - opacity = 0 - }, -/turf/simulated/floor/plating, -/area/medical/staging) -"ahd" = ( -/turf/simulated/wall/prepainted, -/area/medical/counselor/therapy) -"ahe" = ( -/obj/effect/wallframe_spawn/reinforced/polarized/no_grille{ - id = "counselor_therapy" - }, -/turf/simulated/floor/plating, -/area/medical/counselor/therapy) -"ahf" = ( -/obj/structure/bookcase, -/obj/item/book/manual/medical_diagnostics_manual, -/obj/item/book/manual/military_law, -/obj/effect/floor_decal/corner/paleblue/mono, -/obj/machinery/light_switch{ - pixel_x = 6; - pixel_y = 24 - }, -/obj/machinery/button/windowtint{ - id = "counselor_office"; - pixel_x = -2; - pixel_y = 24 - }, -/turf/simulated/floor/tiled/white/monotile, -/area/medical/counselor) -"ahg" = ( -/obj/machinery/computer/modular/preset/medical, -/obj/effect/floor_decal/corner/paleblue/mono, -/turf/simulated/floor/tiled/white/monotile, -/area/medical/counselor) -"ahh" = ( -/obj/structure/table/standard, -/obj/effect/floor_decal/corner/paleblue/mono, -/obj/random_multi/single_item/runtime, -/obj/item/paper_bin{ - pixel_x = -3; - pixel_y = 7 - }, -/obj/item/storage/medical_lolli_jar, -/turf/simulated/floor/tiled/white/monotile, -/area/medical/counselor) -"ahi" = ( -/obj/effect/floor_decal/corner/paleblue{ - dir = 9 - }, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/medical/counselor) -"ahj" = ( -/obj/effect/floor_decal/corner/paleblue{ - dir = 6 - }, -/obj/machinery/power/apc{ - dir = 4; - name = "east bump"; - pixel_x = 24 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/cable/green, -/turf/simulated/floor/tiled/white, -/area/medical/counselor) -"ahk" = ( -/obj/machinery/light_switch{ - pixel_x = 6; - pixel_y = 24 - }, -/obj/machinery/button/windowtint{ - id = "counselor_therapy"; - pixel_x = -2; - pixel_y = 24 - }, -/obj/item/stool/bar/padded, -/obj/machinery/power/apc{ - dir = 8; - name = "west bump"; - pixel_x = -24 - }, -/obj/structure/cable/green{ - d2 = 2; - icon_state = "0-2" - }, -/turf/simulated/floor/wood/walnut, -/area/medical/counselor/therapy) -"ahl" = ( -/obj/structure/table/woodentable/walnut, -/turf/simulated/floor/wood/walnut, -/area/medical/counselor/therapy) -"ahm" = ( -/obj/item/stool/bar/padded, -/obj/effect/floor_decal/spline/plain/beige{ - dir = 4 - }, -/turf/simulated/floor/wood/walnut, -/area/medical/counselor/therapy) -"ahn" = ( -/turf/simulated/floor/carpet, -/area/medical/counselor/therapy) -"aho" = ( -/obj/structure/table/woodentable/walnut, -/obj/random/clipboard, -/turf/simulated/floor/carpet, -/area/medical/counselor/therapy) -"ahp" = ( -/obj/structure/table/woodentable/walnut, -/obj/item/storage/candle_box/scented, -/obj/random/single/lighter, -/obj/machinery/alarm{ - pixel_y = 24 - }, -/turf/simulated/floor/carpet, -/area/medical/counselor/therapy) -"ahq" = ( -/obj/effect/floor_decal/corner/paleblue{ - dir = 5 - }, -/obj/effect/floor_decal/corner/paleblue{ - dir = 10 - }, -/obj/machinery/camera/network/medbay{ - c_tag = "Infirmary - Counselor's Office"; - dir = 4 - }, -/obj/machinery/light{ - dir = 8 - }, -/turf/simulated/floor/tiled/white, -/area/medical/counselor) -"ahr" = ( -/obj/structure/bed/chair/comfy{ - dir = 4 - }, -/obj/effect/floor_decal/corner/paleblue{ - dir = 5 - }, -/obj/effect/floor_decal/corner/paleblue{ - dir = 10 - }, -/turf/simulated/floor/tiled/white, -/area/medical/counselor) -"ahs" = ( -/obj/structure/table/standard, -/obj/effect/floor_decal/corner/paleblue/mono, -/obj/item/reagent_containers/food/drinks/glass2/coffeecup/foundation, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 4 - }, -/turf/simulated/floor/tiled/white/monotile, -/area/medical/counselor) -"aht" = ( -/obj/structure/bed/chair/padded/blue{ - dir = 8 - }, -/obj/effect/floor_decal/corner/paleblue{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/medical/counselor) -"ahu" = ( -/obj/effect/floor_decal/corner/paleblue{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/light{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/medical/counselor) -"ahv" = ( -/obj/machinery/camera/network/medbay{ - c_tag = "Infirmary - Counselor's Therapy Room"; - dir = 4 - }, -/obj/machinery/light{ - dir = 8 - }, -/obj/machinery/atmospherics/unary/vent_pump/on, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/wood/walnut, -/area/medical/counselor/therapy) -"ahw" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/turf/simulated/floor/wood/walnut, -/area/medical/counselor/therapy) -"ahx" = ( -/obj/effect/decal/cleanable/cobweb2, -/obj/structure/railing/mapped{ - dir = 8; - icon_state = "railing0-1" - }, -/turf/simulated/floor/plating, -/area/maintenance/firstdeck/aftstarboard) -"ahy" = ( -/obj/machinery/atmospherics/unary/vent_pump/siphon/on/atmos{ - dir = 1; - internal_pressure_bound = 35000; - internal_pressure_bound_default = 35000 - }, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/floor/reinforced, -/area/thruster/d1starboard) -"ahz" = ( -/obj/effect/floor_decal/spline/plain/beige{ - dir = 4 - }, -/turf/simulated/floor/wood/walnut, -/area/medical/counselor/therapy) -"ahA" = ( -/obj/machinery/light/small, -/obj/machinery/meter, -/obj/effect/floor_decal/industrial/warning{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/visible/fuel, -/turf/simulated/floor/tiled/techfloor, -/area/thruster/d1starboard) -"ahB" = ( -/obj/machinery/atmospherics/pipe/simple/visible/fuel{ - dir = 5 - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor, -/area/thruster/d1starboard) -"ahC" = ( -/obj/machinery/atmospherics/unary/vent_pump/on, -/turf/simulated/floor/tiled/techfloor, -/area/crew_quarters/safe_room/firstdeck) -"ahD" = ( -/obj/structure/bed/chair, -/turf/simulated/floor/tiled/techfloor, -/area/crew_quarters/safe_room/firstdeck) -"ahE" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/techfloor, -/area/crew_quarters/safe_room/firstdeck) -"ahF" = ( -/obj/structure/bed/chair, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/tiled/techfloor, -/area/crew_quarters/safe_room/firstdeck) -"ahG" = ( -/obj/machinery/camera/network/first_deck{ - c_tag = "First Deck - Safe Room"; - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/techfloor, -/area/crew_quarters/safe_room/firstdeck) -"ahH" = ( -/obj/structure/bed/chair/armchair/brown, -/turf/simulated/floor/carpet, -/area/medical/counselor/therapy) -"ahI" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/disposalpipe/segment, -/obj/item/device/radio/intercom{ - dir = 8; - pixel_x = 21 - }, -/obj/effect/catwalk_plated, -/turf/simulated/floor/plating, -/area/hallway/primary/firstdeck/fore) -"ahJ" = ( -/obj/structure/table/woodentable/walnut, -/obj/item/device/flashlight/lamp/green, -/obj/structure/noticeboard{ - pixel_x = 32 - }, -/turf/simulated/floor/carpet, -/area/medical/counselor/therapy) -"ahK" = ( -/obj/effect/floor_decal/corner/blue/three_quarters{ - dir = 8 - }, -/turf/simulated/floor/tiled/dark, -/area/command/conference) -"ahL" = ( -/obj/effect/floor_decal/industrial/outline/grey, -/obj/machinery/fabricator/hacked{ - desc = "A typical autolathe. This one is hacked."; - name = "autolathe" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/command/armoury) -"ahM" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/firstdeck/forestarboard) -"ahN" = ( -/obj/structure/cable/green{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 1 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/firstdeck/forestarboard) -"ahO" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/maintenance, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/maintenance/firstdeck/centralstarboard) -"ahP" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/structure/disposalpipe/segment{ - dir = 8; - icon_state = "pipe-c" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/firstdeck/centralstarboard) -"ahQ" = ( -/obj/structure/sign/warning/high_voltage, -/turf/simulated/wall/prepainted, -/area/maintenance/substation/firstdeck) -"ahR" = ( -/obj/structure/cable/green{ - d2 = 2; - icon_state = "0-2" - }, -/obj/structure/cable/green{ - d2 = 4; - icon_state = "0-4" - }, -/obj/machinery/power/sensor{ - name = "Powernet Sensor - First Deck Subgrid"; - name_tag = "First Deck Subgrid" - }, -/obj/structure/cable/green, -/obj/effect/floor_decal/industrial/warning, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/substation/firstdeck) -"ahS" = ( -/obj/structure/cable/green{ - d2 = 8; - icon_state = "0-8" - }, -/obj/machinery/power/apc{ - dir = 1; - name = "north bump"; - pixel_y = 24 - }, -/obj/machinery/camera/network/engineering{ - c_tag = "Substation - First Deck" - }, -/obj/machinery/light/small{ - dir = 4 - }, -/obj/machinery/firealarm{ - dir = 4; - pixel_x = 24 - }, -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 8; - icon_state = "warningcorner" - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/substation/firstdeck) -"ahT" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/structure/catwalk, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/disposalpipe/segment, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/plating, -/area/maintenance/firstdeck/centralstarboard) -"ahU" = ( -/obj/structure/filingcabinet/chestdrawer{ - dir = 1 - }, -/obj/item/folder/blue, -/obj/item/folder/red, -/obj/item/folder, -/obj/item/folder/nt, -/obj/item/folder/yellow, -/obj/item/folder/white, -/obj/item/folder/white, -/obj/item/folder/white, -/obj/effect/floor_decal/corner/paleblue/mono, -/obj/machinery/button/alternate/door{ - id_tag = "counselor"; - name = "Counselor's Hallway Door"; - pixel_x = -24; - pixel_y = 5 - }, -/obj/machinery/button/alternate/door{ - id_tag = "counselortherapy"; - name = "Counselor's Therapy Door"; - pixel_x = -24; - pixel_y = -5 - }, -/turf/simulated/floor/tiled/white/monotile, -/area/medical/counselor) -"ahV" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/firstdeck/centralstarboard) -"ahW" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/item/device/radio/intercom{ - dir = 1; - pixel_y = -28 - }, -/obj/structure/catwalk, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/maintenance/firstdeck/centralstarboard) -"ahX" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/firstdeck/centralstarboard) -"ahY" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/firealarm{ - dir = 1; - pixel_y = -24 - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/firstdeck/centralstarboard) -"ahZ" = ( -/obj/effect/floor_decal/corner/paleblue{ - dir = 5 - }, -/obj/effect/floor_decal/corner/paleblue{ - dir = 10 - }, -/turf/simulated/floor/tiled/white, -/area/medical/counselor) -"aia" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/oxygen_pump{ - pixel_y = -32 - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/firstdeck/centralstarboard) -"aib" = ( -/obj/machinery/psi_meter, -/obj/effect/floor_decal/corner/paleblue/mono, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 4 - }, -/turf/simulated/floor/tiled/white/monotile, -/area/medical/counselor) -"aic" = ( -/obj/effect/floor_decal/corner/paleblue{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 1 - }, -/turf/simulated/floor/tiled/white, -/area/medical/counselor) -"aid" = ( -/obj/effect/floor_decal/corner/paleblue{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, -/obj/structure/cable/green{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/turf/simulated/floor/tiled/white, -/area/medical/counselor) -"aie" = ( -/obj/machinery/door/airlock/medical{ - id_tag = "counselortherapy"; - name = "Counselor's Therapy Room" - }, -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/door/firedoor, -/turf/simulated/floor/tiled/white/monotile, -/area/medical/counselor) -"aif" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/turf/simulated/floor/wood/walnut, -/area/medical/counselor/therapy) -"aig" = ( -/obj/random_multi/single_item/runtime, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/wood/walnut, -/area/medical/counselor/therapy) -"aih" = ( -/obj/machinery/light{ - dir = 4 - }, -/turf/simulated/floor/carpet, -/area/medical/counselor/therapy) -"aii" = ( -/obj/structure/closet/secure_closet/counselor, -/obj/effect/floor_decal/corner/paleblue/mono, -/turf/simulated/floor/tiled/white/monotile, -/area/medical/counselor) -"aij" = ( -/obj/effect/floor_decal/corner/paleblue{ - dir = 10 - }, -/obj/effect/floor_decal/corner/paleblue{ - dir = 5 - }, -/obj/machinery/alarm{ - dir = 1; - pixel_y = -28 - }, -/turf/simulated/floor/tiled/white, -/area/medical/counselor) -"aik" = ( -/obj/effect/floor_decal/corner/paleblue{ - dir = 10 - }, -/obj/effect/floor_decal/corner/paleblue{ - dir = 5 - }, -/obj/structure/extinguisher_cabinet{ - pixel_y = -32 - }, -/turf/simulated/floor/tiled/white, -/area/medical/counselor) -"ail" = ( -/obj/effect/floor_decal/corner/paleblue{ - dir = 9 - }, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 1 - }, -/turf/simulated/floor/tiled/white, -/area/medical/counselor) -"aim" = ( -/obj/effect/floor_decal/corner/paleblue{ - dir = 6 - }, -/obj/machinery/firealarm{ - dir = 1; - pixel_y = -26 - }, -/turf/simulated/floor/tiled/white, -/area/medical/counselor) -"ain" = ( -/obj/structure/table/woodentable/walnut, -/obj/item/reagent_containers/food/drinks/glass2/coffeecup/teacup, -/obj/item/reagent_containers/food/drinks/teapot, -/obj/item/reagent_containers/food/drinks/glass2/coffeecup/teacup, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 1 - }, -/turf/simulated/floor/wood/walnut, -/area/medical/counselor/therapy) -"aio" = ( -/obj/structure/table/woodentable/walnut, -/obj/item/storage/lunchbox/cat/filled, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 1 - }, -/turf/simulated/floor/wood/walnut, -/area/medical/counselor/therapy) -"aip" = ( -/obj/structure/flora/pottedplant/smalltree, -/obj/effect/floor_decal/spline/plain/beige{ - dir = 4 - }, -/turf/simulated/floor/wood/walnut, -/area/medical/counselor/therapy) -"aiq" = ( -/obj/machinery/firealarm{ - dir = 1; - pixel_y = -26 - }, -/turf/simulated/floor/carpet, -/area/medical/counselor/therapy) -"air" = ( -/obj/structure/bed/psych, -/turf/simulated/floor/carpet, -/area/medical/counselor/therapy) -"ais" = ( -/obj/machinery/door/airlock/maintenance, -/obj/machinery/door/firedoor, -/turf/simulated/floor/tiled/steel_ridged, -/area/medical/counselor/therapy) -"aiu" = ( -/turf/simulated/wall/prepainted, -/area/security/evidence) -"aiG" = ( -/obj/structure/railing/mapped{ - dir = 8; - icon_state = "railing0-1" - }, -/obj/machinery/alarm{ - dir = 8; - pixel_x = 24 - }, -/turf/simulated/floor/plating, -/area/maintenance/firstdeck/aftstarboard) -"aiI" = ( -/obj/machinery/atmospherics/pipe/simple/visible/fuel, -/obj/structure/sign/warning/hot_exhaust, -/turf/simulated/wall/ocp_wall, -/area/thruster/d1starboard) -"aiK" = ( -/obj/effect/floor_decal/techfloor{ - dir = 10 - }, -/obj/structure/bed/chair{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/cyan{ - dir = 5 - }, -/turf/simulated/floor/tiled/techfloor, -/area/crew_quarters/safe_room/firstdeck) -"aiL" = ( -/obj/effect/floor_decal/techfloor, -/obj/structure/table/standard, -/obj/machinery/recharger, -/obj/machinery/atmospherics/pipe/simple/hidden/cyan{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor, -/area/crew_quarters/safe_room/firstdeck) -"aiM" = ( -/obj/effect/floor_decal/techfloor, -/obj/structure/table/standard, -/obj/item/modular_computer/laptop/preset/custom_loadout/cheap, -/obj/machinery/atmospherics/pipe/manifold/hidden/cyan, -/turf/simulated/floor/tiled/techfloor, -/area/crew_quarters/safe_room/firstdeck) -"aiN" = ( -/obj/effect/floor_decal/techfloor, -/obj/structure/table/standard, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/cyan{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor, -/area/crew_quarters/safe_room/firstdeck) -"aiO" = ( -/obj/machinery/newscaster{ - pixel_y = 32 - }, -/obj/effect/floor_decal/techfloor{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/cyan{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/turf/simulated/floor/tiled/techfloor, -/area/crew_quarters/safe_room/firstdeck) -"aiP" = ( -/obj/item/device/radio/intercom/entertainment{ - pixel_y = 24 - }, -/obj/machinery/atmospherics/unary/vent_pump/on, -/obj/effect/floor_decal/techfloor{ - dir = 1 - }, -/turf/simulated/floor/tiled/techfloor, -/area/crew_quarters/safe_room/firstdeck) -"aiQ" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/obj/machinery/light{ - dir = 1 - }, -/obj/machinery/alarm{ - pixel_y = 24 - }, -/obj/effect/floor_decal/techfloor{ - dir = 1 - }, -/turf/simulated/floor/tiled/techfloor, -/area/crew_quarters/safe_room/firstdeck) -"aiR" = ( -/obj/structure/cable/green{ - d2 = 2; - icon_state = "0-2" - }, -/obj/machinery/power/apc{ - dir = 1; - name = "north bump"; - pixel_y = 24 - }, -/obj/effect/floor_decal/techfloor{ - dir = 1 - }, -/turf/simulated/floor/tiled/techfloor, -/area/crew_quarters/safe_room/firstdeck) -"aiS" = ( -/obj/structure/closet/secure_closet/guncabinet/sidearm/small, -/obj/effect/floor_decal/techfloor{ - dir = 5 - }, -/turf/simulated/floor/tiled/techfloor, -/area/crew_quarters/safe_room/firstdeck) -"aiU" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/disposalpipe/segment, -/obj/effect/catwalk_plated, -/turf/simulated/floor/plating, -/area/hallway/primary/firstdeck/fore) -"aiX" = ( -/obj/random/junk, -/obj/structure/railing/mapped{ - dir = 1; - icon_state = "railing0-1" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/turf/simulated/floor/plating, -/area/maintenance/firstdeck/forestarboard) -"aiY" = ( -/obj/random/obstruction, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/firstdeck/forestarboard) -"aiZ" = ( -/obj/machinery/power/port_gen/pacman, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/firstdeck/forestarboard) -"ajb" = ( -/obj/random/junk, -/obj/random/junk, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/firstdeck/forestarboard) -"ajc" = ( -/obj/structure/closet/crate/trashcart, -/obj/random/material, -/obj/random/junk, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/firstdeck/forestarboard) -"ajd" = ( -/obj/machinery/alarm{ - dir = 4; - pixel_x = -23 - }, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/firstdeck/centralstarboard) -"aje" = ( -/obj/structure/cable/green{ - d2 = 2; - icon_state = "0-2" - }, -/obj/structure/cable/green, -/obj/item/device/radio/intercom{ - dir = 4; - pixel_x = -21 - }, -/obj/machinery/power/smes/buildable/preset/torch/substation{ - RCon_tag = "Substation - First Deck" - }, -/turf/simulated/floor/plating, -/area/maintenance/substation/firstdeck) -"ajf" = ( -/obj/structure/cable{ - d2 = 2; - icon_state = "0-2" - }, -/obj/machinery/power/terminal{ - dir = 8 - }, -/obj/machinery/alarm{ - dir = 8; - pixel_x = 24 - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 8; - icon_state = "warning" - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/substation/firstdeck) -"ajg" = ( -/obj/structure/catwalk, -/obj/machinery/alarm{ - dir = 8; - icon_state = "alarm0"; - pixel_x = 24 - }, -/turf/simulated/floor/plating, -/area/maintenance/firstdeck/forestarboard) -"ajh" = ( -/obj/structure/sign/warning/high_voltage, -/turf/simulated/wall/prepainted, -/area/maintenance/firstdeck/centralstarboard) -"aji" = ( -/turf/simulated/wall/prepainted, -/area/engineering/auxpower) -"ajv" = ( -/turf/simulated/floor/tiled/white, -/area/assembly/robotics/surgery) -"ajG" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/visible/fuel, -/obj/structure/catwalk, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/turf/simulated/floor/plating, -/area/maintenance/firstdeck/aftstarboard) -"ajH" = ( -/obj/machinery/atmospherics/valve/shutoff/supply{ - dir = 4 - }, -/obj/structure/railing/mapped{ - dir = 8; - icon_state = "railing0-1" - }, -/obj/structure/railing/mapped, -/obj/machinery/atmospherics/valve/shutoff/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/maintenance/firstdeck/aftstarboard) -"ajI" = ( -/obj/structure/cable/green{ - d2 = 2; - icon_state = "0-2" - }, -/obj/machinery/power/apc{ - dir = 4; - name = "east bump"; - pixel_x = 24 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/obj/structure/railing/mapped, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/turf/simulated/floor/plating, -/area/maintenance/firstdeck/aftstarboard) -"ajJ" = ( -/obj/machinery/atmospherics/unary/outlet_injector{ - dir = 1; - injecting = 1; - use_power = 1 - }, -/turf/simulated/floor/airless, -/area/thruster/d1starboard) -"ajO" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/cyan{ - dir = 4 - }, -/obj/machinery/door/airlock/civilian{ - name = "Living Area" - }, -/obj/effect/floor_decal/techfloor, -/obj/effect/floor_decal/techfloor{ - dir = 1 - }, -/obj/machinery/door/firedoor, -/turf/simulated/floor/tiled/techfloor, -/area/crew_quarters/safe_room/firstdeck) -"ajP" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/cyan{ - dir = 9 - }, -/obj/effect/floor_decal/techfloor, -/obj/structure/table/standard, -/obj/random/soap, -/obj/machinery/light_switch{ - pixel_y = -24 - }, -/turf/simulated/floor/tiled/techfloor, -/area/crew_quarters/safe_room/firstdeck) -"ajQ" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, -/obj/effect/floor_decal/techfloor, -/obj/structure/bed/chair{ - dir = 8 - }, -/obj/machinery/firealarm{ - dir = 1; - pixel_y = -24 - }, -/turf/simulated/floor/tiled/techfloor, -/area/crew_quarters/safe_room/firstdeck) -"ajR" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/effect/floor_decal/techfloor, -/turf/simulated/floor/tiled/techfloor, -/area/crew_quarters/safe_room/firstdeck) -"ajS" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/button/alternate/door/bolts{ - id_tag = "opssafedoor"; - name = "safe room door-control"; - pixel_x = 32; - pixel_y = 32 - }, -/obj/effect/floor_decal/techfloor{ - dir = 6 - }, -/turf/simulated/floor/tiled/techfloor, -/area/crew_quarters/safe_room/firstdeck) -"ajT" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/vault/bolted{ - id_tag = "opssafedoor"; - name = "Operations Safe Room" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/steel_ridged, -/area/crew_quarters/safe_room/firstdeck) -"ajU" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/floor_decal/corner/blue{ - dir = 9 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/firstdeck/fore) -"ajV" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/light{ - dir = 4 - }, -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/effect/catwalk_plated, -/turf/simulated/floor/plating, -/area/hallway/primary/firstdeck/fore) -"ajW" = ( -/obj/effect/floor_decal/corner/blue{ - dir = 6 - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/tiled/dark, -/area/command/conference) -"ajX" = ( -/obj/structure/bed/chair/padded/blue, -/obj/effect/floor_decal/scglogo{ - dir = 8; - icon_state = "bottom-left" - }, -/turf/simulated/floor/tiled/dark, -/area/command/conference) -"ajZ" = ( -/obj/structure/bed/chair/padded/blue, -/obj/effect/floor_decal/scglogo{ - dir = 8; - icon_state = "top-left" - }, -/turf/simulated/floor/tiled/dark, -/area/command/conference) -"akb" = ( -/obj/machinery/cryopod{ - dir = 2 - }, -/obj/machinery/computer/cryopod{ - pixel_x = -32 - }, -/turf/simulated/floor/plating, -/area/shuttle/escape_pod12/station) -"ake" = ( -/obj/machinery/power/breakerbox/activated{ - RCon_tag = "First Deck Substation Bypass" - }, -/obj/effect/floor_decal/industrial/warning/corner, -/turf/simulated/floor/plating, -/area/maintenance/substation/firstdeck) -"akf" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/cable{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/structure/cable{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 10 - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/substation/firstdeck) -"akg" = ( -/obj/machinery/door/airlock/engineering{ - name = "First Deck Substation" - }, -/obj/machinery/door/firedoor, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 8; - icon_state = "warningcorner" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/maintenance/substation/firstdeck) -"akh" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 8 - }, -/obj/structure/catwalk, -/obj/structure/disposalpipe/segment, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/plating, -/area/maintenance/firstdeck/centralstarboard) -"aki" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/cable{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 4; - icon_state = "warning" - }, -/obj/structure/railing/mapped{ - dir = 8; - icon_state = "railing0-1" - }, -/turf/simulated/floor/plating, -/area/maintenance/firstdeck/centralstarboard) -"akj" = ( -/obj/structure/cable{ - d2 = 8; - icon_state = "0-8" - }, -/obj/structure/cable{ - d1 = 16; - d2 = 0; - icon_state = "16-0" - }, -/obj/machinery/atmospherics/pipe/zpipe/up/supply{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/zpipe/up/scrubbers{ - dir = 8 - }, -/turf/simulated/floor/plating, -/area/maintenance/firstdeck/centralstarboard) -"akl" = ( -/obj/structure/table/standard, -/obj/random/tech_supply, -/obj/random/tech_supply, -/obj/random/tech_supply, -/obj/random/tech_supply, -/obj/random/tech_supply, -/obj/random/maintenance/solgov, -/obj/structure/catwalk, -/obj/machinery/power/apc{ - dir = 1; - name = "north bump"; - pixel_y = 24 - }, -/obj/structure/cable{ - d2 = 4; - icon_state = "0-4" - }, -/obj/structure/cable{ - d2 = 2; - icon_state = "0-2" - }, -/obj/machinery/firealarm{ - dir = 8; - pixel_x = -24; - pixel_y = 6 - }, -/turf/simulated/floor/plating, -/area/engineering/auxpower) -"akn" = ( -/obj/structure/cable{ - d2 = 8; - icon_state = "0-8" - }, -/obj/machinery/power/smes/buildable/preset/torch/substation{ - RCon_tag = "Utility - Backup" - }, -/turf/simulated/floor/plating, -/area/engineering/auxpower) -"akp" = ( -/obj/effect/floor_decal/techfloor{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/universal{ - dir = 4 - }, -/obj/machinery/power/apc/high{ - dir = 1; - name = "north bump"; - pixel_y = 24 - }, -/obj/structure/cable/green{ - d2 = 2; - icon_state = "0-2" - }, -/obj/machinery/camera/network/medbay{ - c_tag = "Medical Safe Room" - }, -/turf/simulated/floor/tiled/techfloor, -/area/crew_quarters/safe_room/medical) -"akK" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/machinery/atmospherics/pipe/simple/visible/fuel{ - dir = 5 - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/firstdeck/aftstarboard) -"akL" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/visible/fuel{ - dir = 4 - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/firstdeck/aftstarboard) -"akM" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/simple/visible/fuel{ - dir = 4 - }, -/obj/structure/catwalk, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/turf/simulated/floor/plating, -/area/maintenance/firstdeck/aftstarboard) -"akN" = ( -/obj/machinery/atmospherics/portables_connector{ - dir = 4 - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/portable_atmospherics/canister/air, -/turf/simulated/floor/tiled/techfloor/grid, -/area/crew_quarters/safe_room/firstdeck) -"akV" = ( -/obj/machinery/camera/network/first_deck{ - c_tag = "First Deck Fore Hallway - Starboard Maintenence"; - dir = 4 - }, -/obj/effect/floor_decal/corner/blue{ - dir = 1 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/firstdeck/fore) -"akW" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/disposalpipe/segment, -/obj/effect/catwalk_plated, -/turf/simulated/floor/plating, -/area/hallway/primary/firstdeck/fore) -"akX" = ( -/obj/effect/floor_decal/scglogo{ - dir = 8; - icon_state = "2,1" - }, -/obj/effect/floor_decal/scglogo{ - dir = 8; - icon_state = "center-right" - }, -/turf/simulated/floor/tiled/dark, -/area/command/conference) -"akY" = ( -/obj/effect/floor_decal/scglogo{ - dir = 8; - icon_state = "1,0" - }, -/obj/structure/bed/chair/padded/blue, -/obj/effect/floor_decal/scglogo{ - dir = 8; - icon_state = "bottom-center" - }, -/turf/simulated/floor/tiled/dark, -/area/command/conference) -"akZ" = ( -/obj/structure/hygiene/sink{ - dir = 8; - pixel_x = -12; - pixel_y = 2 - }, -/turf/simulated/floor/tiled/freezer, -/area/crew_quarters/head/aux) -"ala" = ( -/obj/machinery/light/small{ - dir = 4; - icon_state = "bulb1" - }, -/turf/simulated/floor/tiled/freezer, -/area/crew_quarters/head/aux) -"alh" = ( -/obj/structure/cable{ - d1 = 32; - icon_state = "32-1" - }, -/obj/machinery/atmospherics/pipe/zpipe/down/scrubbers, -/obj/machinery/atmospherics/pipe/zpipe/down/supply, -/obj/structure/lattice, -/turf/simulated/open, -/area/maintenance/substation/firstdeck) -"ali" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/catwalk, -/obj/structure/disposalpipe/segment, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/plating, -/area/maintenance/firstdeck/centralstarboard) -"alj" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 4 - }, -/obj/structure/railing/mapped, -/obj/structure/railing/mapped{ - dir = 8; - icon_state = "railing0-1" - }, -/turf/simulated/floor/plating, -/area/maintenance/firstdeck/centralstarboard) -"alk" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 1 - }, -/obj/structure/railing/mapped, -/turf/simulated/floor/plating, -/area/maintenance/firstdeck/centralstarboard) -"all" = ( -/obj/structure/table/standard, -/obj/machinery/cell_charger, -/obj/random/powercell, -/obj/random/powercell, -/obj/random/powercell, -/obj/structure/catwalk, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/alarm{ - dir = 4; - pixel_x = -23 - }, -/turf/simulated/floor/plating, -/area/engineering/auxpower) -"alm" = ( -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 4; - icon_state = "warningcorner" - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/engineering/auxpower) -"aln" = ( -/obj/structure/cable{ - d2 = 2; - icon_state = "0-2" - }, -/obj/machinery/power/terminal{ - dir = 1 - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 1; - icon_state = "warning" - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/engineering/auxpower) -"alo" = ( -/obj/structure/closet/l3closet/general, -/obj/effect/floor_decal/industrial/outline/grey, -/obj/structure/sign/warning/nosmoking_1{ - pixel_y = 24 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/medical/foyer/storeroom) -"alp" = ( -/obj/machinery/atmospherics/binary/pump{ - dir = 8 - }, -/turf/simulated/floor/plating, -/area/maintenance/firstdeck/centralstarboard) -"alq" = ( -/obj/machinery/atmospherics/binary/passive_gate{ - dir = 8 - }, -/turf/simulated/floor/plating, -/area/maintenance/firstdeck/centralstarboard) -"alr" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden{ - dir = 4 - }, -/obj/structure/catwalk, -/obj/effect/floor_decal/industrial/warning{ - dir = 8 - }, -/turf/simulated/floor/plating, -/area/maintenance/firstdeck/centralstarboard) -"alD" = ( -/obj/effect/floor_decal/techfloor{ - dir = 4 - }, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor, -/area/crew_quarters/safe_room/medical) -"alN" = ( -/obj/machinery/power/apc{ - name = "south bump"; - pixel_y = -24 - }, -/obj/structure/cable/green, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/firstdeck/centralstarboard) -"alO" = ( -/obj/structure/table/rack, -/obj/item/screwdriver, -/obj/item/storage/box/masks, -/obj/item/storage/box/gloves, -/obj/item/storage/box/gloves, -/obj/item/clothing/glasses/hud/health, -/obj/item/clothing/glasses/hud/health, -/obj/effect/floor_decal/corner/paleblue/mono, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/light_switch{ - pixel_y = 24 - }, -/turf/simulated/floor/tiled/white/monotile, -/area/medical/equipstorage) -"alR" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/visible/fuel, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/firstdeck/aftstarboard) -"alS" = ( -/obj/machinery/atmospherics/portables_connector{ - dir = 4 - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/portable_atmospherics/canister/air, -/obj/machinery/alarm{ - dir = 4; - pixel_x = -22 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/crew_quarters/safe_room/firstdeck) -"alT" = ( -/obj/machinery/photocopier, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled/monotile, -/area/security/detectives_office) -"alV" = ( -/obj/structure/closet/secure_closet/forensics, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled/monotile, -/area/security/detectives_office) -"alW" = ( -/turf/simulated/floor/tiled/dark, -/area/security/evidence) -"alX" = ( -/obj/machinery/dnaforensics, -/obj/structure/table/glass, -/turf/simulated/floor/tiled/white, -/area/security/detectives_office) -"alZ" = ( -/turf/simulated/floor/tiled/dark, -/area/command/conference) -"amb" = ( -/obj/structure/closet{ - name = "Evidence Closet" - }, -/obj/effect/floor_decal/industrial/outline/grey, -/obj/machinery/light/small{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark, -/area/security/evidence) -"amg" = ( -/obj/effect/floor_decal/scglogo{ - dir = 8; - icon_state = "bottom-right" - }, -/turf/simulated/floor/tiled/dark, -/area/command/conference) -"amh" = ( -/obj/effect/floor_decal/scglogo{ - dir = 8; - icon_state = "top-right" - }, -/turf/simulated/floor/tiled/dark, -/area/command/conference) -"ami" = ( -/obj/structure/hygiene/toilet{ - dir = 4 - }, -/turf/simulated/floor/tiled/freezer, -/area/crew_quarters/head/aux) -"amn" = ( -/obj/effect/floor_decal/industrial/warning, -/turf/simulated/floor/plating, -/area/maintenance/firstdeck/centralstarboard) -"amp" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 8 - }, -/turf/simulated/floor/tiled/white, -/area/assembly/robotics/surgery) -"amq" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/engineering{ - name = "Utility Down" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/effect/floor_decal/industrial/warning{ - dir = 1 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/maintenance/substation/firstdeck) -"amr" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/firstdeck/centralstarboard) -"ams" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/firstdeck/centralstarboard) -"amt" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/engineering{ - name = "Auxiliary Power Storage" - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/engineering/auxpower) -"amu" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/cable{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/engineering/auxpower) -"amv" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/light/small, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/engineering/auxpower) -"amw" = ( -/obj/structure/cable{ - d2 = 8; - icon_state = "0-8" - }, -/obj/structure/cable, -/obj/machinery/power/sensor{ - name = "Powernet Sensor - Auxiliary Power Storage"; - name_tag = "Auxiliary Power Storage" - }, -/obj/structure/catwalk, -/obj/structure/closet/secure_closet/engineering_electrical, -/turf/simulated/floor/plating, -/area/engineering/auxpower) -"amy" = ( -/obj/machinery/atmospherics/binary/pump{ - dir = 4 - }, -/obj/random_multi/single_item/poppy, -/turf/simulated/floor/plating, -/area/maintenance/firstdeck/centralstarboard) -"amz" = ( -/obj/machinery/atmospherics/tvalve/bypass{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/maintenance/firstdeck/centralstarboard) -"amA" = ( -/obj/machinery/atmospherics/unary/tank/air{ - dir = 1 - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/plating, -/area/maintenance/firstdeck/centralstarboard) -"amP" = ( -/obj/structure/table/rack, -/obj/effect/floor_decal/corner/paleblue/mono, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/requests_console{ - announcementConsole = 1; - department = "Medbay"; - departmentType = 1; - name = "Medbay RC"; - pixel_x = -32 - }, -/obj/machinery/power/apc{ - dir = 1; - name = "north bump"; - pixel_y = 24 - }, -/obj/structure/cable/green{ - d2 = 2; - icon_state = "0-2" - }, -/obj/item/storage/box/autoinjectors, -/obj/item/storage/box/beakers, -/obj/item/storage/box/syringes, -/turf/simulated/floor/tiled/white/monotile, -/area/medical/equipstorage) -"amZ" = ( -/obj/structure/table/rack, -/obj/item/storage/briefcase/crimekit{ - pixel_y = 7 - }, -/obj/item/storage/briefcase/crimekit{ - pixel_y = 1 - }, -/turf/simulated/floor/tiled/monotile, -/area/security/detectives_office) -"ana" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 4; - level = 2 - }, -/turf/simulated/floor/tiled, -/area/security/detectives_office) -"anb" = ( -/obj/machinery/cryopod{ - dir = 2 - }, -/obj/machinery/computer/cryopod{ - pixel_x = -32 - }, -/turf/simulated/floor/plating, -/area/shuttle/escape_pod13/station) -"ang" = ( -/obj/structure/table/steel_reinforced, -/obj/item/paper_bin{ - pixel_x = -3; - pixel_y = 7 - }, -/obj/item/pen, -/turf/simulated/floor/tiled/dark, -/area/command/conference) -"anm" = ( -/obj/structure/lattice, -/turf/simulated/open, -/area/maintenance/firstdeck/centralstarboard) -"ann" = ( -/turf/simulated/open, -/area/maintenance/firstdeck/centralstarboard) -"anp" = ( -/obj/structure/railing/mapped{ - dir = 4; - icon_state = "railing0-1" - }, -/turf/simulated/open, -/area/maintenance/firstdeck/centralstarboard) -"anq" = ( -/obj/structure/catwalk, -/obj/structure/disposalpipe/segment{ - dir = 4; - icon_state = "pipe-c" - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 8 - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 8 - }, -/turf/simulated/floor/plating, -/area/maintenance/firstdeck/centralstarboard) -"anr" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/firstdeck/centralstarboard) -"ans" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 - }, -/obj/structure/catwalk, -/obj/structure/disposalpipe/segment{ - dir = 8; - icon_state = "pipe-c" - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/machinery/alarm{ - dir = 8; - pixel_x = 24 - }, -/turf/simulated/floor/plating, -/area/maintenance/firstdeck/centralstarboard) -"anH" = ( -/obj/effect/floor_decal/corner/paleblue{ - dir = 5 - }, -/obj/effect/floor_decal/corner/paleblue{ - dir = 10 - }, -/obj/machinery/button/alternate/door{ - name = "Infirmary Staging Exit"; - pixel_x = -7; - pixel_y = 23 - }, -/obj/machinery/button/alternate/door{ - id_tag = "ETC_stage"; - name = "Treatment to Staging"; - pixel_x = -7; - pixel_y = 33 - }, -/obj/machinery/button/alternate/door{ - id_tag = "ETC_hall"; - name = "Treatment Center Exit"; - pixel_x = 8; - pixel_y = 33 - }, -/obj/machinery/button/alternate/door{ - id_tag = "inf_recep"; - name = "Reception Doors"; - pixel_x = 8; - pixel_y = 23 - }, -/obj/structure/bed/chair/padded/blue, -/turf/simulated/floor/tiled/white, -/area/medical/staging) -"anL" = ( -/obj/effect/floor_decal/corner/paleblue{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden, -/turf/simulated/floor/tiled/white, -/area/medical/sleeper) -"anM" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 1 - }, -/turf/simulated/floor/tiled/white, -/area/medical/sleeper) -"aoa" = ( -/obj/effect/floor_decal/corner/blue/three_quarters, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark, -/area/command/conference) -"aob" = ( -/obj/machinery/button/windowtint{ - id = "conference_window"; - pixel_x = 6; - pixel_y = -24; - range = 11 - }, -/obj/machinery/light_switch{ - pixel_x = -6; - pixel_y = -24 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark, -/area/command/conference) -"aoc" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 8 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark, -/area/command/conference) -"aol" = ( -/obj/structure/railing/mapped{ - dir = 4; - icon_state = "railing0-1" - }, -/obj/structure/lattice, -/turf/simulated/open, -/area/maintenance/firstdeck/centralstarboard) -"aom" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/disposalpipe/segment, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/firstdeck/centralstarboard) -"aop" = ( -/obj/effect/floor_decal/corner/yellow, -/obj/effect/floor_decal/techfloor{ - dir = 1 - }, -/obj/machinery/computer/shuttle_control/lift/robotics, -/turf/simulated/floor/tiled/steel_grid, -/area/turbolift/robotics_lift) -"aor" = ( -/obj/structure/ladder, -/obj/effect/floor_decal/corner/yellow{ - dir = 5 - }, -/obj/effect/floor_decal/industrial/hatch/yellow, -/obj/machinery/firealarm{ - pixel_y = 24 - }, -/obj/effect/catwalk_plated, -/turf/simulated/floor/tiled/monotile, -/area/assembly/robotics/office) -"ape" = ( -/obj/structure/closet/secure_closet{ - name = "Secure Evidence Locker"; - req_access = list("ACCESS_SECURITY") - }, -/obj/effect/floor_decal/industrial/outline/grey, -/obj/machinery/camera/network/security{ - c_tag = "Security Wing - Evidence Storage"; - dir = 8 - }, -/turf/simulated/floor/tiled/dark, -/area/security/evidence) -"apf" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/light{ - dir = 4 - }, -/obj/structure/disposalpipe/segment, -/obj/effect/catwalk_plated, -/turf/simulated/floor/plating, -/area/hallway/primary/firstdeck/fore) -"aph" = ( -/obj/machinery/door/airlock/hatch/maintenance, -/obj/machinery/door/firedoor, -/turf/simulated/floor/tiled/steel_ridged, -/area/hallway/primary/firstdeck/fore) -"apk" = ( -/obj/machinery/atmospherics/pipe/simple/visible/fuel{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/catwalk, -/obj/machinery/alarm{ - dir = 1; - pixel_y = -24 - }, -/obj/machinery/firealarm{ - dir = 2; - pixel_y = 24 - }, -/turf/simulated/floor/plating, -/area/thruster/d1port) -"apm" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled, -/area/assembly/robotics/office) -"apo" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/effect/floor_decal/corner/pink/border{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/assembly/robotics/laboratory) -"apP" = ( -/obj/structure/table/rack, -/obj/random/firstaid, -/obj/random/medical, -/obj/random/medical, -/obj/random/medical, -/obj/random/medical/lite, -/obj/random/medical/lite, -/obj/effect/floor_decal/corner/paleblue/mono, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled/white/monotile, -/area/medical/equipstorage) -"apR" = ( -/obj/effect/floor_decal/corner/paleblue{ - dir = 5 - }, -/obj/effect/floor_decal/corner/paleblue{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/white, -/area/medical/equipstorage) -"apT" = ( -/obj/machinery/papershredder, -/turf/simulated/floor/tiled/dark/monotile, -/area/command/conference) -"apZ" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/effect/catwalk_plated, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/plating, -/area/hallway/primary/firstdeck/fore) -"aqa" = ( -/obj/structure/extinguisher_cabinet{ - pixel_y = 32 - }, -/obj/effect/floor_decal/corner/blue{ - dir = 5 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/firstdeck/fore) -"aqb" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/effect/floor_decal/corner/blue{ - dir = 5 - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/tiled, -/area/hallway/primary/firstdeck/fore) -"aqc" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/obj/effect/floor_decal/corner/blue{ - dir = 5 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/firstdeck/fore) -"aqd" = ( -/obj/effect/floor_decal/corner/blue{ - dir = 1 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/firstdeck/fore) -"aqg" = ( -/obj/machinery/atmospherics/unary/vent_pump/on, -/obj/effect/floor_decal/corner/blue{ - dir = 5 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/firstdeck/fore) -"aqk" = ( -/obj/machinery/atm{ - pixel_y = 32 - }, -/obj/machinery/light{ - dir = 1 - }, -/obj/effect/floor_decal/corner/blue{ - dir = 5 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/firstdeck/fore) -"aql" = ( -/obj/machinery/atmospherics/unary/vent_pump/on, -/obj/item/device/radio/intercom{ - pixel_y = 23 - }, -/obj/effect/floor_decal/corner/blue{ - dir = 5 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/firstdeck/fore) -"aqm" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/effect/floor_decal/corner/blue/three_quarters{ - dir = 1 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/firstdeck/fore) -"aqn" = ( -/turf/unsimulated/mask, -/area/hallway/primary/firstdeck/center) -"aqp" = ( -/obj/effect/floor_decal/corner/yellow{ - dir = 4 - }, -/obj/effect/floor_decal/techfloor, -/turf/simulated/floor/tiled/steel_grid, -/area/turbolift/robotics_lift) -"aqL" = ( -/obj/effect/floor_decal/corner/paleblue, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 8 - }, -/turf/simulated/floor/tiled/white, -/area/medical/medicalhallway) -"aqM" = ( -/obj/machinery/status_display, -/turf/simulated/wall/prepainted, -/area/medical/medicalhallway) -"aqP" = ( -/obj/effect/floor_decal/corner/paleblue/three_quarters{ - dir = 4 - }, -/obj/structure/table/standard, -/obj/item/reagent_containers/food/drinks/glass2/coffeecup/one{ - custom_desc = "A white coffee cup, prominently featuring a #1 Gorpsman. Someone has scratched the C into a G." - }, -/turf/simulated/floor/tiled/white, -/area/medical/medicalhallway) -"aqQ" = ( -/obj/effect/wallframe_spawn/no_grille, -/obj/machinery/door/blast/shutters{ - density = 0; - dir = 4; - icon_state = "shutter0"; - id_tag = "infirm_windows"; - name = "Infirmary Window Lockdown"; - opacity = 0 - }, -/turf/simulated/floor/plating, -/area/medical/foyer) -"aqR" = ( -/obj/machinery/disposal, -/obj/effect/floor_decal/corner/paleblue/mono, -/obj/effect/floor_decal/industrial/hatch/yellow, -/obj/structure/disposalpipe/trunk{ - dir = 1 - }, -/obj/machinery/light, -/turf/simulated/floor/tiled/white/monotile, -/area/medical/foyer) -"aqS" = ( -/obj/effect/floor_decal/corner/paleblue/mono, -/obj/structure/flora/pottedplant/orientaltree, -/obj/machinery/firealarm{ - dir = 1; - pixel_y = -24 - }, -/turf/simulated/floor/tiled/white/monotile, -/area/medical/foyer) -"aqT" = ( -/obj/machinery/door/airlock/medical{ - name = "Medical Paperwork Office" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/door/firedoor, -/turf/simulated/floor/tiled/white/monotile, -/area/medical/medpaperworkoffice) -"arb" = ( -/obj/machinery/door/airlock/vault/bolted{ - autoset_access = 0; - id_tag = "medsafe"; - name = "Medical Safe Room" - }, -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/crew_quarters/safe_room/medical) -"are" = ( -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/machinery/door/airlock/security{ - id_tag = "detdoor"; - name = "Investigations"; - secured_wires = 1 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/simulated/floor/tiled/steel_ridged, -/area/security/detectives_office) -"arm" = ( -/obj/structure/disposalpipe/segment{ - dir = 1; - icon_state = "pipe-c" - }, -/obj/effect/catwalk_plated, -/obj/structure/cable/green{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 8 - }, -/turf/simulated/floor/plating, -/area/hallway/primary/firstdeck/fore) -"art" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/firealarm{ - dir = 1; - pixel_y = -24 - }, -/obj/machinery/light, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/monotile, -/area/hallway/primary/firstdeck/fore) -"aru" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/item/device/radio/intercom{ - dir = 1; - pixel_y = -28 - }, -/obj/effect/catwalk_plated, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/plating, -/area/hallway/primary/firstdeck/fore) -"arx" = ( -/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 1 - }, -/obj/structure/disposalpipe/segment{ - dir = 2; - icon_state = "pipe-c" - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/catwalk_plated, -/turf/simulated/floor/plating, -/area/hallway/primary/firstdeck/fore) -"ary" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/obj/machinery/light{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/effect/floor_decal/corner/blue{ - dir = 6 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/firstdeck/fore) -"arA" = ( -/obj/random/obstruction, -/turf/simulated/floor/plating, -/area/maintenance/firstdeck/centralstarboard) -"arT" = ( -/obj/effect/floor_decal/corner/paleblue{ - dir = 10 - }, -/obj/effect/floor_decal/sign/ex, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/white, -/area/medical/medicalhallway) -"ase" = ( -/obj/effect/floor_decal/corner/paleblue/mono, -/obj/machinery/atmospherics/unary/vent_pump/on, -/obj/machinery/alarm{ - pixel_y = 24 - }, -/obj/structure/sign/warning/nosmoking_1{ - dir = 8; - pixel_x = 32 - }, -/obj/machinery/papershredder, -/turf/simulated/floor/tiled/white/monotile, -/area/medical/medpaperworkoffice) -"ask" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/firstdeck/aftstarboard) -"asl" = ( -/obj/structure/grille, -/turf/simulated/floor/plating, -/area/maintenance/firstdeck/aftstarboard) -"asq" = ( -/obj/effect/floor_decal/corner/blue/three_quarters{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark, -/area/command/conference) -"ast" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 4 - }, -/obj/effect/catwalk_plated, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/plating, -/area/hallway/primary/firstdeck/fore) -"asv" = ( -/obj/effect/wallframe_spawn/reinforced, -/obj/machinery/door/blast/regular{ - density = 0; - icon_state = "pdoor0"; - id_tag = "Secure Gate"; - name = "Security Blast Door"; - opacity = 0 - }, -/obj/structure/cable/green{ - d2 = 4; - icon_state = "0-4" - }, -/obj/structure/cable/green{ - d2 = 2; - icon_state = "0-2" - }, -/turf/simulated/floor/plating, -/area/security/brig) -"asx" = ( -/obj/structure/table/standard, -/obj/item/book/manual/solgov_law, -/obj/machinery/light{ - dir = 1 - }, -/obj/item/sticky_pad/random, -/turf/simulated/floor/tiled, -/area/security/brig) -"asy" = ( -/turf/simulated/wall/r_wall/prepainted, -/area/hallway/primary/firstdeck/fore) -"asA" = ( -/turf/simulated/floor/tiled/dark, -/area/security/bo) -"asB" = ( -/obj/structure/sign/directions/engineering{ - pixel_y = -4 - }, -/obj/structure/sign/directions/infirmary{ - dir = 4; - pixel_z = 3 - }, -/turf/simulated/wall/prepainted, -/area/hallway/primary/firstdeck/fore) -"asD" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/effect/floor_decal/corner/blue/half{ - dir = 4 - }, -/turf/simulated/floor/tiled/monotile, -/area/hallway/primary/firstdeck/fore) -"asE" = ( -/obj/structure/disposalpipe/segment, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/catwalk, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/turf/simulated/floor/plating, -/area/maintenance/firstdeck/centralstarboard) -"asF" = ( -/obj/machinery/atmospherics/valve/shutoff/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/valve/shutoff/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/maintenance/firstdeck/centralstarboard) -"ata" = ( -/obj/machinery/light_switch{ - pixel_x = -22; - pixel_y = 24 - }, -/obj/machinery/button/windowtint{ - id = "exam_windows"; - pixel_x = -30; - pixel_y = 24 - }, -/obj/effect/floor_decal/corner/paleblue{ - dir = 5 - }, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/medical/exam_room) -"atb" = ( -/obj/effect/floor_decal/corner/paleblue{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/turf/simulated/floor/tiled/white, -/area/medical/exam_room) -"atf" = ( -/obj/structure/filingcabinet/chestdrawer{ - dir = 1 - }, -/obj/item/folder/blue, -/obj/item/folder/red, -/obj/item/folder, -/obj/item/folder/nt, -/obj/item/folder/yellow, -/obj/item/folder/white, -/obj/item/folder/white, -/obj/item/folder/white, -/obj/effect/floor_decal/corner/paleblue/mono, -/turf/simulated/floor/tiled/white/monotile, -/area/medical/medpaperworkoffice) -"atg" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/effect/floor_decal/corner/paleblue{ - dir = 5 - }, -/turf/simulated/floor/tiled/white, -/area/medical/medpaperworkoffice) -"atm" = ( -/obj/effect/floor_decal/corner/paleblue{ - dir = 5 - }, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 8 - }, -/obj/item/device/radio/intercom/department/medbay{ - dir = 8; - pixel_x = 24 - }, -/turf/simulated/floor/tiled/white, -/area/medical/locker) -"atn" = ( -/obj/structure/cable/green{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/simple/visible/fuel{ - dir = 6 - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/firstdeck/aftstarboard) -"ato" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/structure/catwalk, -/obj/machinery/atmospherics/pipe/simple/visible/fuel{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/maintenance/firstdeck/aftstarboard) -"ats" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/effect/floor_decal/corner/red{ - dir = 6 - }, -/turf/simulated/floor/tiled, -/area/security/wing) -"atw" = ( -/obj/effect/floor_decal/techfloor{ - dir = 4 - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark, -/area/teleporter/firstdeck) -"atA" = ( -/obj/machinery/atmospherics/unary/vent_pump/on, -/obj/machinery/alarm{ - dir = 4; - pixel_x = -22 - }, -/obj/machinery/firealarm{ - pixel_y = 24 - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/recharge_station, -/turf/simulated/floor/tiled, -/area/hallway/primary/firstdeck/fore) -"atB" = ( -/obj/machinery/lapvend, -/obj/structure/window/reinforced{ - dir = 4 - }, -/obj/machinery/recharger/wallcharger{ - pixel_y = 24 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/firstdeck/fore) -"atC" = ( -/obj/structure/stairs/west, -/obj/structure/railing/mapped, -/turf/simulated/floor/tiled, -/area/hallway/primary/firstdeck/fore) -"atD" = ( -/obj/structure/railing/mapped, -/turf/simulated/floor/tiled, -/area/hallway/primary/firstdeck/fore) -"atE" = ( -/obj/effect/floor_decal/corner/blue{ - dir = 9 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/firstdeck/fore) -"atF" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/firealarm{ - dir = 4; - pixel_x = 24 - }, -/obj/effect/floor_decal/corner/blue{ - dir = 6 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/firstdeck/fore) -"atG" = ( -/obj/structure/disposalpipe/segment, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 - }, -/obj/structure/catwalk, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, -/turf/simulated/floor/plating, -/area/maintenance/firstdeck/centralstarboard) -"atH" = ( -/obj/structure/reagent_dispensers/fueltank, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 - }, -/obj/structure/catwalk, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/turf/simulated/floor/plating, -/area/maintenance/firstdeck/centralstarboard) -"atK" = ( -/obj/machinery/light{ - dir = 4 - }, -/obj/structure/hygiene/sink{ - dir = 4; - pixel_x = 11; - pixel_y = 5 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/firealarm{ - dir = 4; - pixel_x = 21 - }, -/obj/effect/floor_decal/corner/paleblue/mono, -/obj/effect/floor_decal/corner/pink/border{ - dir = 4 - }, -/turf/simulated/floor/tiled/white/monotile, -/area/assembly/robotics/laboratory) -"aua" = ( -/obj/structure/bed/padded, -/obj/item/bedsheet/medical, -/turf/simulated/floor/tiled/white, -/area/medical/exam_room) -"aub" = ( -/obj/machinery/vending/wallmed1{ - dir = 8; - name = "Emergency NanoMed"; - pixel_x = 28 - }, -/obj/structure/bed/chair/comfy/blue{ - dir = 8 - }, -/obj/effect/floor_decal/corner/paleblue{ - dir = 5 - }, -/obj/effect/floor_decal/corner/paleblue{ - dir = 10 - }, -/turf/simulated/floor/tiled/white, -/area/medical/exam_room) -"auc" = ( -/obj/effect/floor_decal/corner/paleblue/mono, -/obj/structure/table/standard, -/obj/item/paper_bin, -/turf/simulated/floor/tiled/white/monotile, -/area/medical/exam_room) -"aug" = ( -/obj/effect/floor_decal/corner/paleblue{ - dir = 10 - }, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 8 - }, -/turf/simulated/floor/tiled/white, -/area/medical/locker) -"auj" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/door/airlock/hatch/maintenance, -/obj/machinery/atmospherics/pipe/simple/visible/fuel, -/obj/machinery/door/firedoor, -/turf/simulated/floor/tiled/steel_ridged, -/area/hallway/primary/firstdeck/aft) -"auk" = ( -/turf/simulated/wall/prepainted, -/area/hallway/primary/firstdeck/aft) -"auv" = ( -/obj/effect/catwalk_plated, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/security/wing) -"auy" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/light{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/firstdeck/fore) -"auB" = ( -/obj/structure/cable/green{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/tiled/dark, -/area/teleporter/firstdeck) -"auE" = ( -/obj/structure/cable/green{ - d2 = 4; - icon_state = "0-4" - }, -/obj/machinery/power/apc{ - dir = 8; - name = "west bump"; - pixel_x = -24 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, -/obj/machinery/camera/network/first_deck{ - c_tag = "First Deck - Stairs"; - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/firstdeck/fore) -"auF" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/effect/floor_decal/industrial/warning/corner, -/obj/structure/disposalpipe/segment{ - dir = 4; - icon_state = "pipe-c" - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/firstdeck/fore) -"auG" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/hologram/holopad, -/obj/effect/floor_decal/industrial/warning, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled/monotile, -/area/hallway/primary/firstdeck/fore) -"auH" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/effect/floor_decal/industrial/warning, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/firstdeck/fore) -"auI" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 8; - icon_state = "warningcorner" - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/floor_decal/corner/paleblue/half{ - dir = 4 - }, -/turf/simulated/floor/tiled/monotile, -/area/hallway/primary/firstdeck/fore) -"auJ" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/disposalpipe/junction{ - dir = 1; - icon_state = "pipe-j2" - }, -/obj/effect/catwalk_plated, -/turf/simulated/floor/plating, -/area/hallway/primary/firstdeck/fore) -"auL" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/door/airlock/hatch/maintenance, -/obj/structure/disposalpipe/segment, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/door/firedoor, -/turf/simulated/floor/tiled/steel_ridged, -/area/hallway/primary/firstdeck/center) -"auM" = ( -/obj/structure/sign/warning/pods/south, -/turf/simulated/wall/prepainted, -/area/hallway/primary/firstdeck/center) -"auN" = ( -/turf/simulated/wall/prepainted, -/area/hallway/primary/firstdeck/center) -"auO" = ( -/obj/machinery/power/apc{ - dir = 8; - name = "west bump"; - pixel_x = -24 - }, -/obj/structure/cable/green{ - d2 = 4; - icon_state = "0-4" - }, -/obj/machinery/vitals_monitor, -/obj/effect/floor_decal/floordetail/edgedrain{ - dir = 8 - }, -/obj/effect/floor_decal/corner/paleblue{ - dir = 6 - }, -/obj/machinery/button/windowtint{ - id = "roboticlab_or"; - pixel_x = 4; - pixel_y = -24 - }, -/obj/machinery/button/holosign{ - id_tag = "roboticlab_or"; - pixel_x = 12; - pixel_y = -23 - }, -/obj/structure/hygiene/sink{ - pixel_y = -12 - }, -/obj/machinery/camera/network/medbay{ - c_tag = "Infirmary - Robotics Operation Theater"; - dir = 4; - network = list("Medical, Engineering") - }, -/obj/machinery/light_switch{ - pixel_x = -11; - pixel_y = -24 - }, -/turf/simulated/floor/tiled/white/monotile, -/area/assembly/robotics/surgery) -"auP" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/disposalpipe/segment, -/obj/structure/cable/green{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/turf/simulated/floor/tiled/white, -/area/assembly/robotics/surgery) -"auS" = ( -/obj/machinery/light{ - dir = 8; - icon_state = "tube1"; - pixel_y = 0 - }, -/obj/structure/bed/chair/padded/yellow, -/obj/effect/floor_decal/corner/paleblue/mono, -/turf/simulated/floor/tiled/white/monotile, -/area/assembly/robotics/laboratory) -"auY" = ( -/obj/machinery/light, -/turf/simulated/floor/reinforced, -/area/rnd/misc_lab) -"avl" = ( -/obj/effect/floor_decal/corner/paleblue{ - dir = 10 - }, -/obj/structure/closet/secure_closet/personal/patient, -/turf/simulated/floor/tiled/white, -/area/medical/exam_room) -"avo" = ( -/obj/effect/floor_decal/corner/paleblue{ - dir = 10 - }, -/obj/machinery/camera/network/medbay{ - c_tag = "Infirmary - Examination Room"; - dir = 1 - }, -/obj/item/device/radio/intercom/department/medbay{ - dir = 1; - pixel_y = -28 - }, -/turf/simulated/floor/tiled/white, -/area/medical/exam_room) -"avq" = ( -/obj/item/stool/padded, -/obj/effect/floor_decal/corner/paleblue/mono, -/obj/machinery/light/small, -/obj/random_multi/single_item/runtime, -/obj/random_multi/single_item/skelestand, -/obj/structure/curtain/open/bed, -/turf/simulated/floor/tiled/white/monotile, -/area/medical/exam_room) -"avs" = ( -/obj/effect/floor_decal/corner/paleblue{ - dir = 10 - }, -/obj/effect/floor_decal/corner/paleblue{ - dir = 5 - }, -/obj/machinery/computer/modular/preset/medical{ - dir = 1 - }, -/obj/structure/sign/warning/nosmoking_1{ - dir = 4; - pixel_x = -37 - }, -/turf/simulated/floor/tiled/white, -/area/medical/medpaperworkoffice) -"avu" = ( -/obj/effect/floor_decal/corner/paleblue{ - dir = 10 - }, -/obj/effect/floor_decal/corner/paleblue{ - dir = 5 - }, -/obj/machinery/computer/modular/preset/medical{ - dir = 1 - }, -/obj/item/device/radio/intercom/department/medbay{ - dir = 1; - pixel_y = -28 - }, -/turf/simulated/floor/tiled/white, -/area/medical/medpaperworkoffice) -"avx" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/firealarm{ - dir = 8; - pixel_x = -24 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/fuel, -/obj/machinery/camera/network/first_deck{ - c_tag = "First Deck Hallway - Emergency Armory Entrance"; - dir = 4 - }, -/obj/effect/floor_decal/corner/blue/mono, -/turf/simulated/floor/tiled/monotile, -/area/hallway/primary/firstdeck/aft) -"avy" = ( -/obj/effect/floor_decal/corner/blue/mono, -/obj/effect/floor_decal/industrial/hatch/yellow, -/obj/machinery/disposal, -/obj/structure/disposalpipe/trunk, -/obj/machinery/light{ - dir = 1 - }, -/turf/simulated/floor/tiled/monotile, -/area/hallway/primary/firstdeck/aft) -"avI" = ( -/obj/effect/floor_decal/corner/red{ - dir = 10 - }, -/obj/machinery/light, -/turf/simulated/floor/tiled, -/area/security/wing) -"avO" = ( -/obj/effect/floor_decal/corner/pink/mono, -/obj/machinery/body_scanconsole{ - dir = 1 - }, -/turf/simulated/floor/tiled/white/monotile, -/area/medical/sleeper) -"avS" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 1 - }, -/obj/machinery/light, -/obj/item/device/radio/intercom{ - dir = 4; - pixel_x = -21 - }, -/obj/structure/closet/emcloset, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled, -/area/hallway/primary/firstdeck/fore) -"avT" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 4 - }, -/obj/structure/disposalpipe/trunk{ - dir = 1 - }, -/obj/effect/floor_decal/industrial/hatch/yellow, -/obj/machinery/disposal, -/obj/structure/sign/deck/first{ - dir = 1; - pixel_y = -32 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/firstdeck/fore) -"avU" = ( -/obj/structure/railing/mapped{ - dir = 1; - icon_state = "railing0-1" - }, -/obj/structure/railing/mapped{ - dir = 8; - icon_state = "railing0-1" - }, -/turf/simulated/open, -/area/hallway/primary/firstdeck/fore) -"avV" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 8; - icon_state = "warning" - }, -/obj/effect/floor_decal/corner/paleblue/half{ - dir = 4 - }, -/turf/simulated/floor/tiled/monotile, -/area/hallway/primary/firstdeck/fore) -"avW" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 8 - }, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/tiled/monotile, -/area/hallway/primary/firstdeck/fore) -"avX" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 8 - }, -/obj/effect/floor_decal/corner/blue/half{ - dir = 4 - }, -/obj/machinery/alarm{ - dir = 8; - icon_state = "alarm0"; - pixel_x = 24 - }, -/turf/simulated/floor/tiled/monotile, -/area/hallway/primary/firstdeck/fore) -"avZ" = ( -/obj/structure/sign/directions/evac{ - pixel_y = 3 - }, -/obj/structure/sign/directions/supply{ - pixel_y = -4 - }, -/turf/simulated/wall/prepainted, -/area/hallway/primary/firstdeck/center) -"awa" = ( -/turf/simulated/floor/tiled/steel_ridged, -/area/hallway/primary/firstdeck/center) -"awb" = ( -/obj/structure/sign/directions/infirmary{ - dir = 4; - pixel_x = -5; - pixel_y = -4 - }, -/obj/structure/sign/directions/science{ - dir = 4; - pixel_x = -5; - pixel_y = 3 - }, -/turf/simulated/wall/prepainted, -/area/hallway/primary/firstdeck/center) -"awc" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/disposalpipe/segment, -/obj/effect/floor_decal/corner/green/mono, -/turf/simulated/floor/tiled/monotile, -/area/hallway/primary/firstdeck/center) -"awd" = ( -/obj/structure/closet/emcloset, -/obj/effect/floor_decal/corner/green/mono, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled/monotile, -/area/hallway/primary/firstdeck/center) -"awG" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/effect/landmark{ - name = "xeno_spawn"; - pixel_x = -1 - }, -/obj/effect/floor_decal/corner/blue/mono, -/obj/machinery/atmospherics/pipe/simple/hidden/fuel{ - dir = 5 - }, -/turf/simulated/floor/tiled/monotile, -/area/hallway/primary/firstdeck/aft) -"awH" = ( -/obj/effect/floor_decal/corner/blue{ - dir = 1 - }, -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/simple/hidden/fuel{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/firstdeck/aft) -"awI" = ( -/obj/effect/floor_decal/industrial/loading{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/fuel{ - dir = 4 - }, -/turf/simulated/floor/tiled/steel_grid, -/area/hallway/primary/firstdeck/aft) -"awJ" = ( -/obj/effect/wallframe_spawn/reinforced, -/turf/simulated/floor/plating, -/area/hallway/primary/firstdeck/aft) -"awL" = ( -/obj/machinery/button/blast_door{ - id_tag = "armory_lock"; - name = "Armory Lockdown Shutter Control"; - pixel_x = -24; - pixel_y = -6 - }, -/obj/structure/table/steel, -/obj/item/stamp/denied{ - pixel_x = 5 - }, -/obj/item/stamp, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 1 - }, -/obj/item/paper_bin{ - pixel_x = -3; - pixel_y = 7 - }, -/obj/item/pen{ - pixel_x = 4; - pixel_y = 4 - }, -/obj/item/device/radio/intercom{ - pixel_y = 23 - }, -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/turf/simulated/floor/tiled/dark/monotile, -/area/command/armoury/access) -"awM" = ( -/obj/effect/floor_decal/corner/paleblue/half{ - dir = 1 - }, -/obj/machinery/atm{ - pixel_y = 32 - }, -/turf/simulated/floor/tiled/monotile, -/area/hallway/primary/firstdeck/aft) -"awV" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/tiled, -/area/hallway/primary/firstdeck/fore) -"awY" = ( -/obj/structure/cable/green{ - d2 = 2; - icon_state = "0-2" - }, -/obj/effect/wallframe_spawn/reinforced/polarized{ - id = "processwindow" - }, -/turf/simulated/floor/plating, -/area/security/processing) -"awZ" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/effect/floor_decal/corner/blue{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/firstdeck/fore) -"axa" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/glass/civilian, -/turf/simulated/floor/tiled/steel_ridged, -/area/hallway/primary/firstdeck/center) -"axc" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/obj/effect/floor_decal/corner/green{ - dir = 5 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/firstdeck/center) -"axd" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/disposalpipe/segment, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/effect/floor_decal/corner/green{ - dir = 5 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/firstdeck/center) -"axe" = ( -/obj/effect/floor_decal/corner/yellow{ - dir = 5; - icon_state = "corner_white" - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/firstdeck/center) -"axh" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/obj/effect/floor_decal/corner/paleblue/half{ - dir = 1 - }, -/turf/simulated/floor/tiled/monotile, -/area/hallway/primary/firstdeck/center) -"axi" = ( -/obj/machinery/alarm{ - pixel_y = 24 - }, -/obj/effect/floor_decal/corner/yellow{ - dir = 5 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/firstdeck/center) -"axl" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/vault/bolted{ - autoset_access = 0; - id_tag = "medsafe_fore"; - name = "Emergency Exit" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/maintenance/firstdeck/centralstarboard) -"axu" = ( -/obj/effect/wallframe_spawn/reinforced/polarized{ - id = "bo_windows" - }, -/obj/structure/cable/green{ - d2 = 8; - icon_state = "0-8" - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/turf/simulated/floor/plating, -/area/security/bo) -"axw" = ( -/obj/effect/floor_decal/corner/paleblue{ - dir = 5 - }, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/tiled, -/area/hallway/primary/firstdeck/aft) -"axy" = ( -/obj/structure/sign/directions/med{ - pixel_y = 32 - }, -/obj/effect/floor_decal/corner/paleblue{ - dir = 5 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/firstdeck/aft) -"axB" = ( -/obj/effect/floor_decal/corner/paleblue/half{ - dir = 1 - }, -/obj/machinery/newscaster{ - pixel_y = 32 - }, -/turf/simulated/floor/tiled/monotile, -/area/hallway/primary/firstdeck/aft) -"axD" = ( -/obj/structure/cable/green{ - d2 = 2; - icon_state = "0-2" - }, -/obj/machinery/power/apc{ - dir = 1; - name = "north bump"; - pixel_y = 24 - }, -/obj/effect/floor_decal/corner/paleblue{ - dir = 5 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/firstdeck/aft) -"axF" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/effect/floor_decal/industrial/warning/fulltile, -/turf/simulated/floor/tiled/steel_grid, -/area/hallway/primary/firstdeck/aft) -"axK" = ( -/obj/structure/bed/chair/padded/red{ - dir = 4 - }, -/obj/machinery/power/apc{ - dir = 1; - name = "north bump"; - pixel_y = 24 - }, -/obj/structure/cable/green{ - d2 = 2; - icon_state = "0-2" - }, -/obj/effect/floor_decal/corner/red{ - dir = 9 - }, -/turf/simulated/floor/tiled, -/area/security/processing) -"axN" = ( -/obj/machinery/light_switch{ - pixel_x = -6; - pixel_y = 24 - }, -/obj/machinery/button/windowtint{ - id = "processwindow"; - pixel_x = 6; - pixel_y = 24 - }, -/turf/simulated/floor/tiled, -/area/security/processing) -"axO" = ( -/obj/machinery/door/airlock/security{ - id_tag = "secprocessing"; - name = "Security Processing" - }, -/obj/machinery/door/blast/regular{ - density = 0; - dir = 4; - icon_state = "pdoor0"; - id_tag = "Prison Gate"; - name = "Security Blast Door"; - opacity = 0 - }, -/obj/machinery/door/firedoor, -/turf/simulated/floor/tiled/steel_ridged, -/area/security/processing) -"axT" = ( -/obj/structure/closet/crate, -/obj/item/stock_parts/circuitboard/smes, -/obj/item/stock_parts/circuitboard/smes, -/obj/item/stock_parts/smes_coil, -/obj/item/stock_parts/smes_coil, -/obj/item/stock_parts/smes_coil/super_capacity, -/obj/item/stock_parts/smes_coil/super_capacity, -/obj/item/stock_parts/smes_coil/super_io, -/obj/item/stock_parts/smes_coil/super_io, -/obj/item/stock_parts/circuitboard/batteryrack, -/obj/item/stock_parts/circuitboard/batteryrack, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/floor/tiled/techfloor, -/area/engineering/hardstorage/aux) -"axY" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/effect/catwalk_plated, -/turf/simulated/floor/plating, -/area/hallway/primary/firstdeck/fore) -"axZ" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/effect/wallframe_spawn/reinforced, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/hallway/primary/firstdeck/center) -"aya" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/floor_decal/industrial/shutoff{ - dir = 4 - }, -/obj/machinery/atmospherics/valve/shutoff/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/valve/shutoff/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled/monotile, -/area/hallway/primary/firstdeck/center) -"ayb" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/effect/catwalk_plated, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/hallway/primary/firstdeck/center) -"ayd" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, -/obj/effect/catwalk_plated, -/turf/simulated/floor/plating, -/area/hallway/primary/firstdeck/center) -"aye" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/effect/catwalk_plated, -/turf/simulated/floor/plating, -/area/hallway/primary/firstdeck/center) -"ayf" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply, -/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers, -/obj/structure/disposalpipe/segment{ - dir = 1; - icon_state = "pipe-c" - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/effect/catwalk_plated, -/turf/simulated/floor/plating, -/area/hallway/primary/firstdeck/center) -"ayg" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/effect/catwalk_plated, -/turf/simulated/floor/plating, -/area/hallway/primary/firstdeck/center) -"ayh" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/firstdeck/center) -"ayi" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, -/turf/simulated/floor/tiled/monotile, -/area/hallway/primary/firstdeck/center) -"ayj" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/structure/disposalpipe/junction{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 1 - }, -/obj/effect/catwalk_plated, -/turf/simulated/floor/plating, -/area/hallway/primary/firstdeck/center) -"aym" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/wallframe_spawn/reinforced, -/turf/simulated/floor/plating, -/area/hallway/primary/firstdeck/center) -"ayp" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/firstdeck/center) -"ayw" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/disposalpipe/sortjunction{ - dir = 4; - name = "Xenobotany"; - sort_type = "Xenobotany" - }, -/obj/effect/catwalk_plated, -/turf/simulated/floor/plating, -/area/hallway/primary/firstdeck/aft) -"ayy" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, -/obj/structure/disposalpipe/sortjunction{ - dir = 4; - name = "Research Development"; - sort_type = "Research and Development" - }, -/obj/effect/catwalk_plated, -/turf/simulated/floor/plating, -/area/hallway/primary/firstdeck/aft) -"ayz" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/effect/wallframe_spawn/reinforced, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/door/firedoor, -/turf/simulated/floor/plating, -/area/hallway/primary/firstdeck/aft) -"ayA" = ( -/obj/effect/floor_decal/techfloor/orange{ - dir = 4 - }, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 8 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/crew_quarters/safe_room/medical) -"ayB" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/catwalk_plated, -/turf/simulated/floor/plating, -/area/hallway/primary/firstdeck/aft) -"ayC" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/catwalk_plated, -/turf/simulated/floor/plating, -/area/hallway/primary/firstdeck/aft) -"ayF" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/door/blast/shutters{ - density = 0; - dir = 4; - icon_state = "shutter0"; - id_tag = "operation_hallway_shutters"; - name = "Operation Checkpoint Shutters"; - opacity = 0 - }, -/obj/effect/floor_decal/corner/red/mono, -/turf/simulated/floor/tiled/monotile, -/area/hallway/primary/firstdeck/aft) -"ayG" = ( -/obj/structure/cable/green{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/structure/disposalpipe/segment{ - dir = 2; - icon_state = "pipe-c" - }, -/obj/effect/floor_decal/industrial/warning/fulltile, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/tiled/steel_grid, -/area/hallway/primary/firstdeck/aft) -"ayH" = ( -/obj/structure/disposalpipe/segment, -/obj/machinery/tele_beacon, -/obj/machinery/hologram/holopad, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled/monotile, -/area/hallway/primary/firstdeck/aft) -"ayJ" = ( -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/atmospherics/pipe/simple/hidden/fuel, -/turf/simulated/floor/tiled/steel_grid, -/area/hallway/primary/firstdeck/aft) -"ayK" = ( -/obj/effect/wallframe_spawn/reinforced, -/obj/effect/floor_decal/industrial/hatch/yellow, -/obj/machinery/door/blast/regular/open{ - dir = 4; - id_tag = "armory_lock"; - name = "Armory Lockdown Shutters" - }, -/obj/structure/cable/green{ - d2 = 4; - icon_state = "0-4" - }, -/turf/simulated/floor/plating, -/area/command/armoury/access) -"ayL" = ( -/obj/structure/cable/green{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/dark, -/area/command/armoury/access) -"ayP" = ( -/obj/structure/bed/chair/padded/red{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/effect/floor_decal/corner/red{ - dir = 9 - }, -/turf/simulated/floor/tiled, -/area/security/processing) -"azi" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/effect/floor_decal/corner/green/mono, -/turf/simulated/floor/tiled/monotile, -/area/hallway/primary/firstdeck/center) -"azm" = ( -/obj/machinery/light, -/obj/effect/floor_decal/corner/green{ - dir = 10 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/firstdeck/center) -"azn" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 1 - }, -/obj/effect/floor_decal/corner/green/half, -/obj/machinery/firealarm{ - dir = 1; - pixel_y = -24 - }, -/turf/simulated/floor/tiled/monotile, -/area/hallway/primary/firstdeck/center) -"azp" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/disposalpipe/segment, -/obj/effect/floor_decal/corner/green{ - dir = 10 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/firstdeck/center) -"azq" = ( -/obj/machinery/light, -/obj/structure/extinguisher_cabinet{ - pixel_y = -32 - }, -/obj/effect/floor_decal/corner/green{ - dir = 10 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/firstdeck/center) -"azs" = ( -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/effect/floor_decal/corner/green/mono, -/obj/structure/sign/warning/pods/west{ - dir = 4; - pixel_x = -40 - }, -/turf/simulated/floor/tiled/monotile, -/area/hallway/primary/firstdeck/center) -"azN" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 1 - }, -/obj/effect/floor_decal/corner/paleblue{ - dir = 10 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/firstdeck/aft) -"azR" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/disposalpipe/junction{ - dir = 2; - icon_state = "pipe-j2" - }, -/obj/effect/floor_decal/industrial/warning/fulltile, -/turf/simulated/floor/tiled/steel_grid, -/area/hallway/primary/firstdeck/aft) -"azS" = ( -/obj/structure/disposalpipe/segment{ - dir = 8; - icon_state = "pipe-c" - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/firstdeck/aft) -"azT" = ( -/obj/item/device/radio/intercom{ - dir = 1; - pixel_y = -28 - }, -/obj/effect/floor_decal/corner/paleblue/half, -/turf/simulated/floor/tiled/monotile, -/area/hallway/primary/firstdeck/aft) -"azU" = ( -/obj/machinery/firealarm{ - dir = 8; - pixel_x = -24 - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/dark/monotile, -/area/command/armoury/access) -"azV" = ( -/obj/effect/shuttle_landmark/ert/deck2{ - name = "1st Deck, Fore Port" - }, -/turf/space, -/area/space) -"aAb" = ( -/obj/structure/bed/chair/padded/red{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/effect/floor_decal/corner/red{ - dir = 9 - }, -/turf/simulated/floor/tiled, -/area/security/processing) -"aAe" = ( -/obj/machinery/computer/modular/preset/security{ - dir = 8; - icon_state = "console" - }, -/obj/effect/floor_decal/corner/red{ - dir = 6 - }, -/turf/simulated/floor/tiled, -/area/security/processing) -"aAl" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 8 - }, -/obj/effect/floor_decal/corner/blue/half{ - dir = 4 - }, -/turf/simulated/floor/tiled/monotile, -/area/hallway/primary/firstdeck/fore) -"aAm" = ( -/turf/simulated/wall/prepainted, -/area/crew_quarters/head/aux) -"aAr" = ( -/turf/simulated/wall/r_wall/prepainted, -/area/crew_quarters/sleep/cryo/aux) -"aAs" = ( -/obj/machinery/status_display, -/turf/simulated/wall/prepainted, -/area/crew_quarters/sleep/cryo/aux) -"aAt" = ( -/obj/effect/wallframe_spawn/no_grille, -/turf/simulated/floor/plating, -/area/crew_quarters/sleep/cryo/aux) -"aAu" = ( -/obj/machinery/door/firedoor, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/disposalpipe/segment, -/obj/machinery/door/airlock/glass/civilian{ - name = "Auxiliary Cryogenic Storage" - }, -/turf/simulated/floor/tiled/steel_ridged, -/area/crew_quarters/sleep/cryo/aux) -"aAx" = ( -/obj/machinery/door/airlock/civilian{ - name = "Emergency Storage" - }, -/obj/machinery/door/firedoor, -/turf/simulated/floor/tiled/steel_ridged, -/area/hallway/primary/firstdeck/center) -"aAI" = ( -/obj/machinery/alarm{ - alarm_id = "xenobio1_alarm"; - pixel_y = 24 - }, -/turf/simulated/floor/tiled/dark, -/area/security/evidence) -"aAJ" = ( -/obj/machinery/door/blast/regular{ - density = 0; - icon_state = "pdoor0"; - id_tag = "Biohazard"; - name = "Biohazard Shutter"; - opacity = 0 - }, -/obj/structure/cable/green{ - d2 = 8; - icon_state = "0-8" - }, -/obj/effect/wallframe_spawn/reinforced/no_grille, -/turf/simulated/floor/plating, -/area/rnd/development) -"aAK" = ( -/turf/simulated/wall/prepainted, -/area/crew_quarters/sleep/cryo/aux) -"aAT" = ( -/turf/simulated/wall/r_wall/prepainted, -/area/teleporter/firstdeck) -"aAU" = ( -/obj/item/device/radio/intercom{ - dir = 4; - pixel_x = -21 - }, -/obj/effect/floor_decal/corner/blue/mono, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 8 - }, -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/simple/hidden/fuel{ - dir = 6 - }, -/turf/simulated/floor/tiled/monotile, -/area/hallway/primary/firstdeck/aft) -"aAV" = ( -/obj/effect/floor_decal/corner/blue{ - dir = 8 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/fuel{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/firstdeck/aft) -"aAW" = ( -/obj/effect/floor_decal/industrial/loading{ - dir = 8 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/fuel{ - dir = 4 - }, -/turf/simulated/floor/tiled/steel_grid, -/area/hallway/primary/firstdeck/aft) -"aAX" = ( -/obj/effect/floor_decal/industrial/warning/fulltile, -/obj/machinery/door/airlock/command{ - name = "Emergency Armory Access"; - secured_wires = 1 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/door/firedoor, -/turf/simulated/floor/tiled/steel_grid, -/area/command/armoury/access) -"aAY" = ( -/obj/effect/floor_decal/industrial/warning/fulltile, -/obj/structure/cable/green{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/camera/network/command{ - c_tag = "Bridge - Emergency Armory - Access"; - dir = 1 - }, -/turf/simulated/floor/tiled/steel_grid, -/area/command/armoury/access) -"aAZ" = ( -/obj/effect/floor_decal/industrial/warning/fulltile, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/light, -/turf/simulated/floor/tiled/steel_grid, -/area/command/armoury/access) -"aBa" = ( -/obj/effect/floor_decal/industrial/warning/fulltile, -/obj/machinery/door/airlock/highsecurity{ - name = "Emergency Armory" - }, -/obj/machinery/door/blast/regular/open{ - dir = 4; - id_tag = "armory_entrylock"; - name = "Armory Lockdown Shutters" - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/door/firedoor, -/turf/simulated/floor/tiled/steel_grid, -/area/command/armoury) -"aBb" = ( -/turf/simulated/wall/r_wall/prepainted, -/area/maintenance/firstdeck/foreport) -"aBc" = ( -/turf/simulated/wall/r_wall/prepainted, -/area/command/armoury/tactical) -"aBd" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled, -/area/security/processing) -"aBf" = ( -/obj/structure/table/steel, -/obj/item/paper_bin{ - pixel_x = -3; - pixel_y = 7 - }, -/obj/item/pen, -/obj/item/folder/red, -/obj/effect/floor_decal/corner/red{ - dir = 6 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/turf/simulated/floor/tiled/monotile, -/area/security/processing) -"aBw" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/door/airlock/hatch/maintenance, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/door/firedoor, -/turf/simulated/floor/tiled/steel_ridged, -/area/hallway/primary/firstdeck/center) -"aBx" = ( -/obj/structure/sign/warning/pods/south{ - dir = 1 - }, -/turf/simulated/wall/prepainted, -/area/hallway/primary/firstdeck/center) -"aBy" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 4 - }, -/obj/machinery/vending/coffee{ - dir = 4 - }, -/turf/simulated/floor/tiled/white/monotile, -/area/crew_quarters/sleep/cryo/aux) -"aBz" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 1 - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/machinery/atm{ - pixel_y = 32 - }, -/obj/effect/floor_decal/industrial/warning/corner, -/turf/simulated/floor/tiled/white, -/area/crew_quarters/sleep/cryo/aux) -"aBA" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/light/spot{ - dir = 1 - }, -/obj/effect/floor_decal/industrial/warning, -/turf/simulated/floor/tiled/white, -/area/crew_quarters/sleep/cryo/aux) -"aBB" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/floor_decal/industrial/warning, -/turf/simulated/floor/tiled/white, -/area/crew_quarters/sleep/cryo/aux) -"aBC" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 1 - }, -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 8 - }, -/turf/simulated/floor/tiled/white, -/area/crew_quarters/sleep/cryo/aux) -"aBD" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply, -/obj/structure/disposalpipe/segment{ - dir = 1; - icon_state = "pipe-c" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/turf/simulated/floor/tiled/white, -/area/crew_quarters/sleep/cryo/aux) -"aBE" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 1 - }, -/obj/effect/floor_decal/industrial/warning/corner, -/turf/simulated/floor/tiled/white, -/area/crew_quarters/sleep/cryo/aux) -"aBF" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/effect/floor_decal/industrial/warning, -/turf/simulated/floor/tiled/white, -/area/crew_quarters/sleep/cryo/aux) -"aBG" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/light/spot{ - dir = 1 - }, -/obj/effect/floor_decal/industrial/warning, -/turf/simulated/floor/tiled/white, -/area/crew_quarters/sleep/cryo/aux) -"aBH" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 1 - }, -/obj/structure/disposalpipe/segment{ - dir = 2; - icon_state = "pipe-c" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 8 - }, -/turf/simulated/floor/tiled/white, -/area/crew_quarters/sleep/cryo/aux) -"aBI" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 8 - }, -/obj/structure/closet/emcloset, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled/white/monotile, -/area/crew_quarters/sleep/cryo/aux) -"aBJ" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/disposalpipe/segment, -/obj/machinery/door/airlock/hatch/maintenance, -/obj/machinery/door/firedoor, -/turf/simulated/floor/tiled/steel_ridged, -/area/hallway/primary/firstdeck/center) -"aBM" = ( -/obj/structure/railing/mapped{ - dir = 4; - icon_state = "railing0-1" - }, -/obj/structure/table/rack, -/obj/random/firstaid, -/obj/item/storage/box/lights/mixed, -/turf/simulated/floor/plating, -/area/maintenance/firstdeck/centralport) -"aBP" = ( -/turf/simulated/wall/prepainted, -/area/rnd/entry) -"aCf" = ( -/turf/simulated/wall/prepainted, -/area/rnd/development) -"aCp" = ( -/obj/machinery/tele_pad, -/obj/effect/floor_decal/industrial/hatch/yellow, -/turf/simulated/floor/tiled/techfloor/grid, -/area/teleporter/firstdeck) -"aCq" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/simple/hidden/fuel, -/obj/effect/floor_decal/corner/blue/mono, -/turf/simulated/floor/tiled/monotile, -/area/hallway/primary/firstdeck/aft) -"aCr" = ( -/obj/effect/floor_decal/corner/blue/mono, -/obj/structure/closet/emcloset, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/light, -/turf/simulated/floor/tiled/monotile, -/area/hallway/primary/firstdeck/aft) -"aCu" = ( -/obj/effect/floor_decal/corner/red/mono, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/structure/closet/secure_closet/security_torch, -/turf/simulated/floor/tiled/monotile, -/area/security/locker) -"aCv" = ( -/obj/effect/wallframe_spawn/reinforced, -/turf/simulated/floor/plating, -/area/security/locker) -"aCx" = ( -/obj/structure/disposalpipe/segment, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 8 - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/turf/simulated/floor/tiled, -/area/security/wing) -"aCy" = ( -/obj/machinery/door/airlock/glass/security{ - name = "Security Processing" - }, -/obj/machinery/door/firedoor, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/tiled/steel_ridged, -/area/security/processing) -"aCA" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/tiled, -/area/hallway/primary/firstdeck/fore) -"aCF" = ( -/obj/structure/table/rack{ - dir = 8 - }, -/obj/item/storage/briefcase/inflatable{ - pixel_x = 3; - pixel_y = 6 - }, -/obj/item/storage/briefcase/inflatable{ - pixel_x = 3; - pixel_y = 6 - }, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/floor/tiled/techfloor, -/area/engineering/hardstorage/aux) -"aCM" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/firstdeck/foreport) -"aCN" = ( -/turf/simulated/floor/plating, -/area/maintenance/firstdeck/foreport) -"aCP" = ( -/obj/structure/table/standard, -/obj/random/medical, -/obj/machinery/light/spot{ - dir = 8 - }, -/obj/item/device/radio/intercom{ - dir = 4; - pixel_x = -21 - }, -/turf/simulated/floor/tiled/white/monotile, -/area/crew_quarters/sleep/cryo/aux) -"aCQ" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 4; - icon_state = "warning" - }, -/obj/effect/landmark{ - name = "JoinLateCryo" - }, -/turf/simulated/floor/tiled/white, -/area/crew_quarters/sleep/cryo/aux) -"aCR" = ( -/obj/machinery/cryopod, -/turf/simulated/floor/tiled/techmaint, -/area/crew_quarters/sleep/cryo/aux) -"aCS" = ( -/obj/machinery/cryopod{ - dir = 4 - }, -/turf/simulated/floor/tiled/techmaint, -/area/crew_quarters/sleep/cryo/aux) -"aCT" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/effect/floor_decal/industrial/warning{ - dir = 8 - }, -/obj/effect/landmark{ - name = "JoinLateCryo" - }, -/turf/simulated/floor/tiled/white, -/area/crew_quarters/sleep/cryo/aux) -"aCU" = ( -/obj/machinery/hologram/holopad, -/turf/simulated/floor/tiled/white, -/area/crew_quarters/sleep/cryo/aux) -"aCV" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/effect/floor_decal/industrial/warning{ - dir = 4; - icon_state = "warning" - }, -/obj/effect/landmark{ - name = "JoinLateCryo" - }, -/turf/simulated/floor/tiled/white, -/area/crew_quarters/sleep/cryo/aux) -"aCW" = ( -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/effect/floor_decal/industrial/warning{ - dir = 8 - }, -/obj/effect/landmark{ - name = "JoinLateCryo" - }, -/turf/simulated/floor/tiled/white, -/area/crew_quarters/sleep/cryo/aux) -"aCX" = ( -/obj/machinery/newscaster{ - pixel_x = 32 - }, -/obj/machinery/computer/arcade, -/obj/machinery/light/spot{ - dir = 4 - }, -/turf/simulated/floor/tiled/white/monotile, -/area/crew_quarters/sleep/cryo/aux) -"aCZ" = ( -/turf/simulated/floor/plating, -/area/maintenance/firstdeck/centralport) -"aDA" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/disposalpipe/segment, -/obj/machinery/door/airlock/hatch/maintenance, -/obj/machinery/atmospherics/pipe/simple/visible/fuel, -/obj/machinery/door/firedoor, -/turf/simulated/floor/tiled/steel_ridged, -/area/hallway/primary/firstdeck/aft) -"aDB" = ( -/turf/simulated/wall/r_wall/prepainted, -/area/maintenance/firstdeck/aftport) -"aDD" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/alarm{ - dir = 8; - pixel_x = 24 - }, -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/security/wing) -"aDE" = ( -/turf/simulated/wall/r_wall/prepainted, -/area/security/bo) -"aDF" = ( -/obj/structure/table/steel_reinforced, -/obj/machinery/door/firedoor, -/obj/machinery/door/window/brigdoor/westright{ - dir = 2; - name = "Brig Chief Desk" - }, -/obj/machinery/door/blast/shutters/open{ - dir = 2; - id_tag = "bo_pshutters"; - name = "Privacy Shutters" - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/security/bo) -"aDG" = ( -/obj/effect/wallframe_spawn/reinforced/polarized{ - id = "bo_windows" - }, -/obj/structure/cable/green{ - d2 = 8; - icon_state = "0-8" - }, -/turf/simulated/floor/plating, -/area/security/bo) -"aDI" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/dark, -/area/security/bo) -"aDK" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/effect/catwalk_plated, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/plating, -/area/hallway/primary/firstdeck/fore) -"aDL" = ( -/turf/simulated/wall/r_wall/prepainted, -/area/security/nuke_storage) -"aDN" = ( -/obj/machinery/status_display, -/turf/simulated/wall/r_wall/prepainted, -/area/security/nuke_storage) -"aDP" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/effect/floor_decal/corner/blue/half{ - dir = 4 - }, -/obj/machinery/light{ - dir = 4 - }, -/turf/simulated/floor/tiled/monotile, -/area/hallway/primary/firstdeck/fore) -"aDU" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/obj/structure/catwalk, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/turf/simulated/floor/plating, -/area/maintenance/firstdeck/foreport) -"aDW" = ( -/obj/structure/table/rack, -/obj/random/maintenance/solgov, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/firstdeck/foreport) -"aDX" = ( -/obj/structure/table/standard, -/obj/item/device/paicard, -/obj/machinery/firealarm{ - dir = 8; - pixel_x = -24 - }, -/turf/simulated/floor/tiled/white/monotile, -/area/crew_quarters/sleep/cryo/aux) -"aDY" = ( -/turf/simulated/floor/tiled/white, -/area/crew_quarters/sleep/cryo/aux) -"aDZ" = ( -/obj/item/device/radio/intercom/entertainment{ - dir = 8; - pixel_x = 22 - }, -/obj/machinery/vending/fitness{ - dir = 8 - }, -/turf/simulated/floor/tiled/white/monotile, -/area/crew_quarters/sleep/cryo/aux) -"aEa" = ( -/obj/structure/railing/mapped{ - dir = 1; - icon_state = "railing0-1" - }, -/obj/random/junk, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 - }, -/obj/structure/railing/mapped{ - dir = 4; - icon_state = "railing0-1" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/turf/simulated/floor/plating, -/area/maintenance/firstdeck/centralport) -"aEb" = ( -/obj/structure/railing/mapped{ - dir = 4; - icon_state = "railing0-1" - }, -/obj/structure/railing/mapped, -/turf/simulated/floor/plating, -/area/maintenance/firstdeck/centralport) -"aEC" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/simple/visible/fuel, -/obj/structure/catwalk, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/plating, -/area/maintenance/firstdeck/aftport) -"aED" = ( -/obj/structure/largecrate, -/obj/random/maintenance/solgov, -/obj/effect/decal/cleanable/cobweb2, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/firstdeck/aftport) -"aEG" = ( -/obj/effect/floor_decal/industrial/outline/grey, -/obj/structure/table/rack, -/obj/item/clothing/shoes/dutyboots, -/obj/item/clothing/accessory/storage/holster/thigh, -/obj/item/clothing/glasses/tacgoggles, -/obj/item/clothing/suit/armor/pcarrier/medium/sol, -/obj/item/clothing/head/helmet, -/turf/simulated/floor/tiled/techfloor/grid, -/area/command/armoury/tactical) -"aEH" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/disposalpipe/segment, -/obj/effect/catwalk_plated, -/turf/simulated/floor/plating, -/area/security/wing) -"aEK" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - level = 2 - }, -/obj/machinery/light{ - dir = 1 - }, -/obj/item/device/radio/intercom/department/security{ - pixel_y = 23 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/security/bo) -"aEL" = ( -/obj/machinery/requests_console{ - announcementConsole = 1; - department = "Security"; - departmentType = 5; - pixel_x = 32; - pixel_y = 32 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/security/bo) -"aEO" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/structure/disposalpipe/segment{ - dir = 1; - icon_state = "pipe-c" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/obj/effect/catwalk_plated, -/turf/simulated/floor/plating, -/area/hallway/primary/firstdeck/fore) -"aEU" = ( -/obj/effect/catwalk_plated, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/hallway/primary/firstdeck/fore) -"aEW" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 1 - }, -/obj/effect/catwalk_plated, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/hallway/primary/firstdeck/fore) -"aEY" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/disposalpipe/segment{ - dir = 8; - icon_state = "pipe-c" - }, -/obj/effect/catwalk_plated, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/hallway/primary/firstdeck/fore) -"aEZ" = ( -/obj/item/device/radio/intercom{ - dir = 8; - pixel_x = 21 - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/effect/floor_decal/corner/blue{ - dir = 6 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/firstdeck/fore) -"aFb" = ( -/obj/machinery/door/blast/regular{ - density = 0; - dir = 4; - icon_state = "pdoor0"; - id_tag = "Biohazard"; - name = "Biohazard Shutter"; - opacity = 0 - }, -/obj/structure/cable/green{ - d2 = 2; - icon_state = "0-2" - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/structure/cable/green{ - d2 = 4; - icon_state = "0-4" - }, -/obj/effect/wallframe_spawn/reinforced/no_grille, -/turf/simulated/floor/plating, -/area/rnd/development) -"aFd" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/firstdeck/foreport) -"aFf" = ( -/obj/machinery/atmospherics/valve/shutoff/supply, -/obj/structure/railing/mapped{ - dir = 8; - icon_state = "railing0-1" - }, -/obj/machinery/atmospherics/valve/shutoff/scrubbers, -/turf/simulated/floor/plating, -/area/maintenance/firstdeck/foreport) -"aFg" = ( -/obj/structure/extinguisher_cabinet{ - pixel_x = -32 - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/random/maintenance/clean, -/obj/random/maintenance/clean, -/obj/random/maintenance/clean, -/obj/structure/closet/secure_closet/crew/research, -/turf/simulated/floor/tiled/white/monotile, -/area/crew_quarters/sleep/cryo/aux) -"aFh" = ( -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 8 - }, -/obj/effect/landmark{ - name = "JoinLateCryo" - }, -/turf/simulated/floor/tiled/white, -/area/crew_quarters/sleep/cryo/aux) -"aFi" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/tiled/white/monotile, -/area/crew_quarters/sleep/cryo/aux) -"aFj" = ( -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/door/airlock/maintenance{ - name = "Auxiliary Cryogenic Storage Maintenance" - }, -/turf/simulated/floor/tiled/white, -/area/crew_quarters/sleep/cryo/aux) -"aFl" = ( -/obj/structure/table/rack, -/obj/random/maintenance/solgov, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/obj/structure/railing/mapped{ - dir = 8; - icon_state = "railing0-1" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/turf/simulated/floor/plating, -/area/maintenance/firstdeck/centralport) -"aFo" = ( -/obj/effect/floor_decal/industrial/outline/grey, -/obj/machinery/portable_atmospherics/powered/scrubber, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/firstdeck/centralport) -"aFL" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/simple/visible/fuel, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/firstdeck/aftport) -"aFM" = ( -/obj/machinery/portable_atmospherics/powered/scrubber, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/firstdeck/aftport) -"aFQ" = ( -/obj/effect/wallframe_spawn/reinforced/polarized{ - id = "bo_windows" - }, -/obj/structure/cable/green, -/turf/simulated/floor/plating, -/area/security/bo) -"aFR" = ( -/obj/structure/table/steel, -/obj/item/device/multitool, -/obj/item/stamp/brig, -/obj/item/stamp/denied{ - pixel_x = 5 - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/random_multi/single_item/memo_security, -/obj/structure/cable/green{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/turf/simulated/floor/tiled/dark, -/area/security/bo) -"aFS" = ( -/obj/structure/table/steel, -/obj/item/paper_bin{ - pixel_x = -3; - pixel_y = 7 - }, -/obj/random/clipboard, -/obj/item/folder/red, -/obj/item/pen, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/item/sticky_pad/random, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/dark, -/area/security/bo) -"aFU" = ( -/obj/effect/floor_decal/corner/red/three_quarters, -/obj/machinery/pager/security{ - pixel_y = -23 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/firstdeck/fore) -"aFV" = ( -/obj/effect/floor_decal/corner/red{ - dir = 10 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/firstdeck/fore) -"aFX" = ( -/obj/machinery/light, -/obj/effect/floor_decal/corner/red{ - dir = 10 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/firstdeck/fore) -"aGb" = ( -/obj/item/device/radio/intercom{ - dir = 1; - pixel_y = -28 - }, -/obj/effect/floor_decal/corner/red{ - dir = 10 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/firstdeck/fore) -"aGe" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 1 - }, -/obj/effect/floor_decal/corner/red{ - dir = 10 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/firstdeck/fore) -"aGh" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 1 - }, -/obj/effect/floor_decal/corner/red{ - dir = 10 - }, -/obj/structure/extinguisher_cabinet{ - pixel_y = -32 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/firstdeck/fore) -"aGi" = ( -/obj/effect/floor_decal/corner/red{ - dir = 10 - }, -/obj/effect/floor_decal/corner/blue{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/firstdeck/fore) -"aGo" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/alarm{ - dir = 4; - pixel_x = -23 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 - }, -/obj/structure/catwalk, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, -/turf/simulated/floor/plating, -/area/maintenance/firstdeck/foreport) -"aGq" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 - }, -/obj/structure/railing/mapped{ - dir = 8; - icon_state = "railing0-1" - }, -/obj/structure/railing/mapped, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/turf/simulated/floor/plating, -/area/maintenance/firstdeck/foreport) -"aGr" = ( -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/structure/closet/secure_closet/crew, -/obj/random/maintenance/solgov/clean, -/obj/random/maintenance/solgov/clean, -/obj/random/maintenance/solgov/clean, -/turf/simulated/floor/tiled/white/monotile, -/area/crew_quarters/sleep/cryo/aux) -"aGs" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 4; - icon_state = "warning" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/effect/landmark{ - name = "JoinLateCryo" - }, -/turf/simulated/floor/tiled/white, -/area/crew_quarters/sleep/cryo/aux) -"aGt" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/effect/landmark{ - name = "JoinLateCryo" - }, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/tiled/white, -/area/crew_quarters/sleep/cryo/aux) -"aGu" = ( -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/structure/closet/secure_closet/personal, -/turf/simulated/floor/tiled/white/monotile, -/area/crew_quarters/sleep/cryo/aux) -"aGw" = ( -/obj/machinery/atmospherics/valve/shutoff/supply, -/obj/structure/railing/mapped{ - dir = 8; - icon_state = "railing0-1" - }, -/obj/structure/railing/mapped, -/obj/machinery/atmospherics/valve/shutoff/scrubbers, -/turf/simulated/floor/plating, -/area/maintenance/firstdeck/centralport) -"aGx" = ( -/obj/effect/floor_decal/corner/paleblue{ - dir = 5 - }, -/obj/effect/floor_decal/corner/paleblue{ - dir = 10 - }, -/obj/item/stool/padded, -/turf/simulated/floor/tiled/white, -/area/medical/staging) -"aGE" = ( -/obj/effect/wallframe_spawn/reinforced/no_grille, -/turf/simulated/floor/plating, -/area/rnd/development) -"aGL" = ( -/obj/effect/catwalk_plated, -/obj/machinery/light{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/plating, -/area/security/wing) -"aGM" = ( -/obj/structure/bed/chair/padded/red{ - dir = 1 - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/dark, -/area/security/bo) -"aGN" = ( -/turf/simulated/wall/r_wall/prepainted, -/area/command/armoury/access) -"aGP" = ( -/turf/simulated/wall/r_wall/prepainted, -/area/security/brig) -"aGX" = ( -/obj/effect/floor_decal/corner/red/diagonal, -/obj/structure/hygiene/urinal{ - pixel_y = 32 - }, -/obj/machinery/light{ - dir = 8 - }, -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/turf/simulated/floor/tiled/freezer, -/area/security/brig) -"aGY" = ( -/obj/machinery/door/airlock/hatch/maintenance, -/turf/simulated/floor/tiled/steel_ridged, -/area/hallway/primary/firstdeck/fore) -"aGZ" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable/green{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/catwalk, -/obj/machinery/alarm{ - dir = 4; - pixel_x = -23; - pixel_y = 0 - }, -/turf/simulated/floor/plating, -/area/maintenance/firstdeck/foreport) -"aHb" = ( -/obj/machinery/power/apc{ - dir = 4; - name = "east bump"; - pixel_x = 24 - }, -/obj/structure/cable/green{ - d2 = 8; - icon_state = "0-8" - }, -/obj/structure/bed/roller, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/firstdeck/foreport) -"aHc" = ( -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/structure/closet/secure_closet/crew, -/obj/random/maintenance/solgov/clean, -/obj/random/maintenance/solgov/clean, -/obj/random/maintenance/solgov/clean, -/obj/machinery/camera/network/first_deck{ - c_tag = "Auxiliary Cryogenic Storage - Port"; - dir = 4 - }, -/turf/simulated/floor/tiled/white/monotile, -/area/crew_quarters/sleep/cryo/aux) -"aHd" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 8 - }, -/obj/effect/landmark{ - name = "JoinLateCryo" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/turf/simulated/floor/tiled/white, -/area/crew_quarters/sleep/cryo/aux) -"aHe" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 8 - }, -/turf/simulated/floor/tiled/white, -/area/crew_quarters/sleep/cryo/aux) -"aHf" = ( -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/structure/closet/secure_closet/personal, -/obj/machinery/camera/network/first_deck{ - c_tag = "Auxiliary Cryogenic Storage - Starboard"; - dir = 8 - }, -/turf/simulated/floor/tiled/white/monotile, -/area/crew_quarters/sleep/cryo/aux) -"aHh" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/firstdeck/centralport) -"aHi" = ( -/turf/simulated/wall/prepainted, -/area/rnd/misc_lab) -"aHn" = ( -/turf/simulated/wall/prepainted, -/area/rnd/locker) -"aHQ" = ( -/turf/simulated/wall/r_wall/prepainted, -/area/rnd/misc_lab) -"aHR" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/simple/visible/fuel, -/obj/structure/catwalk, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/turf/simulated/floor/plating, -/area/maintenance/firstdeck/aftport) -"aHS" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/obj/structure/railing/mapped{ - dir = 8; - icon_state = "railing0-1" - }, -/obj/structure/railing/mapped{ - dir = 1; - icon_state = "railing0-1" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/turf/simulated/floor/plating, -/area/maintenance/firstdeck/aftport) -"aHT" = ( -/turf/simulated/wall/r_wall/prepainted, -/area/command/armoury) -"aHX" = ( -/obj/effect/catwalk_plated, -/obj/structure/cable/green{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 8 - }, -/obj/structure/disposalpipe/sortjunction{ - dir = 1; - name = "Brig Chief"; - sort_type = "Brig Chief" - }, -/turf/simulated/floor/plating, -/area/security/wing) -"aHY" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/turf/simulated/floor/tiled/dark, -/area/security/bo) -"aHZ" = ( -/obj/structure/disposalpipe/segment{ - dir = 2; - icon_state = "pipe-c" - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark, -/area/security/bo) -"aIa" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/turf/simulated/floor/tiled/dark, -/area/security/bo) -"aIb" = ( -/obj/machinery/computer/station_alert/security{ - dir = 8 - }, -/obj/machinery/button/alternate/door{ - id_tag = "prisonexit"; - name = "Exit Doors"; - pixel_x = 6; - pixel_y = 24; - req_access = list("ACCESS_BRIG") - }, -/obj/machinery/button/alternate/door{ - id_tag = "prisonentry"; - name = "Entry Doors"; - pixel_x = -6; - pixel_y = 24; - req_access = list("ACCESS_BRIG") - }, -/obj/machinery/button/flasher{ - id_tag = "permflash"; - name = "Brig Flash Control"; - pixel_x = -6; - pixel_y = 40; - req_access = list("ACCESS_BRIG") - }, -/obj/machinery/button/blast_door{ - id_tag = "Secure Gate"; - name = "Brig Lockdown Control"; - pixel_x = 6; - pixel_y = 40 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/security/bo) -"aIc" = ( -/obj/structure/table/standard, -/obj/machinery/microwave, -/turf/simulated/floor/tiled/monotile, -/area/security/brig) -"aIe" = ( -/obj/structure/bed/chair{ - dir = 4 - }, -/obj/machinery/alarm{ - pixel_y = 24 - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/machinery/light{ - dir = 1 - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/turf/simulated/floor/tiled, -/area/security/brig) -"aIf" = ( -/obj/structure/table/standard, -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/obj/item/deck/cards, -/obj/structure/cable/green{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/turf/simulated/floor/tiled, -/area/security/brig) -"aIg" = ( -/obj/structure/table/standard, -/obj/machinery/recharger, -/obj/item/newspaper, -/turf/simulated/floor/tiled, -/area/security/brig) -"aIi" = ( -/obj/structure/reagent_dispensers/water_cooler, -/obj/machinery/firealarm{ - pixel_y = 24 - }, -/turf/simulated/floor/tiled, -/area/security/brig) -"aIj" = ( -/obj/machinery/computer/modular/preset/civilian, -/obj/machinery/atmospherics/unary/vent_pump/on, -/turf/simulated/floor/tiled, -/area/security/brig) -"aIk" = ( -/obj/machinery/computer/arcade, -/turf/simulated/floor/tiled/monotile, -/area/security/brig) -"aIm" = ( -/obj/effect/floor_decal/corner/red/diagonal, -/obj/structure/hygiene/shower{ - dir = 8 - }, -/obj/item/soap, -/turf/simulated/floor/tiled/freezer, -/area/security/brig) -"aIn" = ( -/obj/effect/floor_decal/corner/red/diagonal, -/obj/machinery/firealarm{ - dir = 4; - pixel_x = 26 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/tiled/freezer, -/area/security/brig) -"aIr" = ( -/turf/simulated/wall/prepainted, -/area/maintenance/firstdeck/foreport) -"aIs" = ( -/obj/machinery/light/spot{ - dir = 8 - }, -/obj/structure/undies_wardrobe, -/turf/simulated/floor/tiled/white/monotile, -/area/crew_quarters/sleep/cryo/aux) -"aIt" = ( -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 4 - }, -/obj/effect/floor_decal/industrial/warning/corner, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/white, -/area/crew_quarters/sleep/cryo/aux) -"aIu" = ( -/obj/effect/floor_decal/industrial/warning, -/obj/effect/floor_decal/industrial/warning{ - dir = 1; - icon_state = "warning" - }, -/turf/simulated/floor/tiled/white, -/area/crew_quarters/sleep/cryo/aux) -"aIv" = ( -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 1 - }, -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 8 - }, -/turf/simulated/floor/tiled/white, -/area/crew_quarters/sleep/cryo/aux) -"aIx" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 4 - }, -/obj/effect/floor_decal/industrial/warning/corner, -/turf/simulated/floor/tiled/white, -/area/crew_quarters/sleep/cryo/aux) -"aIy" = ( -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 1 - }, -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/tiled/white, -/area/crew_quarters/sleep/cryo/aux) -"aIz" = ( -/obj/machinery/light/spot{ - dir = 4 - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/uniform_vendor{ - dir = 8 - }, -/turf/simulated/floor/tiled/white/monotile, -/area/crew_quarters/sleep/cryo/aux) -"aIB" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/firstdeck/centralport) -"aIG" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/research{ - id_tag = null; - name = "Locker Room" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/white/monotile, -/area/rnd/locker) -"aJa" = ( -/obj/structure/table/steel_reinforced, -/obj/machinery/door/firedoor, -/obj/machinery/door/window/brigdoor/westright{ - dir = 8; - name = "Brig Chief Desk" - }, -/obj/item/material/bell, -/obj/machinery/door/blast/shutters/open{ - dir = 2; - id_tag = "bo_pshutters"; - name = "Privacy Shutters" - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/security/bo) -"aJi" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/disposalpipe/segment, -/obj/structure/catwalk, -/obj/machinery/atmospherics/pipe/simple/visible/fuel, -/turf/simulated/floor/plating, -/area/maintenance/firstdeck/aftport) -"aJj" = ( -/obj/machinery/atmospherics/valve/shutoff/supply, -/obj/structure/railing/mapped{ - dir = 8; - icon_state = "railing0-1" - }, -/obj/machinery/atmospherics/valve/shutoff/scrubbers, -/obj/machinery/alarm{ - dir = 8; - icon_state = "alarm0"; - pixel_x = 24 - }, -/turf/simulated/floor/plating, -/area/maintenance/firstdeck/aftport) -"aJl" = ( -/obj/machinery/suit_storage_unit/standard_unit, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/floor/tiled/techfloor/grid, -/area/command/armoury) -"aJm" = ( -/obj/machinery/portable_atmospherics/canister/oxygen, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/floor/tiled/techfloor/grid, -/area/command/armoury) -"aJn" = ( -/obj/effect/floor_decal/corner/red/half{ - dir = 8 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/landmark{ - name = "lightsout" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled/monotile, -/area/security/wing) -"aJo" = ( -/obj/effect/floor_decal/industrial/outline/grey, -/obj/structure/closet/secure_closet/brigchief, -/obj/item/device/radio, -/obj/item/crowbar, -/obj/item/clothing/mask/gas/half, -/obj/effect/floor_decal/industrial/hatch/yellow, -/obj/machinery/firealarm{ - dir = 8; - pixel_x = -24 - }, -/obj/machinery/light, -/obj/machinery/power/apc{ - name = "south bump"; - pixel_y = -28 - }, -/obj/structure/cable/green, -/turf/simulated/floor/tiled/dark/monotile, -/area/security/bo) -"aJp" = ( -/obj/machinery/disposal, -/obj/structure/disposalpipe/trunk{ - dir = 1 - }, -/obj/effect/floor_decal/industrial/hatch/yellow, -/obj/machinery/alarm{ - dir = 1; - pixel_y = -24 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/security/bo) -"aJq" = ( -/obj/machinery/photocopier, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled/dark/monotile, -/area/security/bo) -"aJr" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 - }, -/obj/machinery/light, -/turf/simulated/floor/tiled, -/area/security/processing) -"aJs" = ( -/obj/machinery/computer/prisoner{ - dir = 8 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/security/bo) -"aJv" = ( -/obj/structure/bed/chair/office/comfy/red{ - dir = 1 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/dark, -/area/rnd/rnd_sec) -"aJw" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 1 - }, -/turf/simulated/floor/tiled, -/area/security/brig) -"aJy" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/security/brig) -"aJz" = ( -/obj/machinery/flasher{ - id_tag = "permflash"; - name = "Floor mounted flash" - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/tiled/monotile, -/area/security/brig) -"aJA" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply, -/turf/simulated/floor/tiled, -/area/security/brig) -"aJB" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 1 - }, -/turf/simulated/floor/tiled/monotile, -/area/security/brig) -"aJC" = ( -/obj/machinery/door/airlock/civilian{ - autoset_access = 0; - name = "Head" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/door/firedoor, -/turf/simulated/floor/tiled/steel_ridged, -/area/security/brig) -"aJE" = ( -/obj/effect/floor_decal/corner/red/diagonal, -/obj/structure/hygiene/shower{ - dir = 8 - }, -/obj/machinery/alarm{ - dir = 8; - pixel_x = 24 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/turf/simulated/floor/tiled/freezer, -/area/security/brig) -"aJG" = ( -/obj/structure/table/rack, -/obj/random/maintenance/solgov, -/obj/random/maintenance/solgov, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/firstdeck/foreport) -"aJK" = ( -/obj/structure/cable/green{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/firstdeck/foreport) -"aJL" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/firstdeck/foreport) -"aJN" = ( -/obj/structure/table/standard, -/obj/random/coin, -/turf/simulated/floor/tiled/white/monotile, -/area/crew_quarters/sleep/cryo/aux) -"aJO" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 8 - }, -/obj/effect/landmark{ - name = "JoinLateCryo" - }, -/turf/simulated/floor/tiled/white, -/area/crew_quarters/sleep/cryo/aux) -"aJP" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/crew_quarters/sleep/cryo/aux) -"aJQ" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 4; - icon_state = "warning" - }, -/obj/effect/landmark{ - name = "JoinLateCryo" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/turf/simulated/floor/tiled/white, -/area/crew_quarters/sleep/cryo/aux) -"aJS" = ( -/turf/simulated/wall/prepainted, -/area/maintenance/firstdeck/centralport) -"aKv" = ( -/turf/simulated/floor/tiled/dark, -/area/security/armoury) -"aKw" = ( -/obj/structure/table/rack{ - dir = 4 - }, -/obj/effect/floor_decal/industrial/outline/grey, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/item/airlock_brace, -/obj/item/airlock_brace, -/obj/item/airlock_brace, -/turf/simulated/floor/tiled/dark/monotile, -/area/security/storage) -"aKy" = ( -/obj/machinery/camera/network/security{ - c_tag = "Security Wing - Equipment Storage"; - dir = 8 - }, -/obj/machinery/firealarm{ - dir = 4; - pixel_x = 21 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/security/storage) -"aKA" = ( -/obj/machinery/door/airlock/multi_tile/glass/security{ - name = "Brig Wing" - }, -/obj/machinery/door/firedoor, -/turf/simulated/floor/tiled/steel_ridged, -/area/security/wing) -"aKB" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/door/firedoor, -/turf/simulated/floor/tiled/steel_ridged, -/area/security/wing) -"aKE" = ( -/obj/effect/wallframe_spawn/reinforced/polarized{ - id = "bo_windows" - }, -/obj/structure/cable/green{ - d2 = 4; - icon_state = "0-4" - }, -/turf/simulated/floor/plating, -/area/security/bo) -"aKG" = ( -/obj/effect/floor_decal/corner/paleblue{ - dir = 5 - }, -/obj/structure/closet/hydrant{ - pixel_y = 32 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/firstdeck/aft) -"aKH" = ( -/turf/simulated/wall/prepainted, -/area/security/brig) -"aKJ" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/tiled, -/area/security/brig) -"aKK" = ( -/obj/machinery/alarm{ - dir = 1; - pixel_y = -22 - }, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 8 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/teleporter/firstdeck) -"aKL" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 1 - }, -/turf/simulated/floor/tiled, -/area/security/brig) -"aKN" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/tiled/monotile, -/area/security/brig) -"aKR" = ( -/obj/structure/closet/crate, -/obj/random/maintenance/solgov, -/obj/random/maintenance/solgov, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/firstdeck/foreport) -"aKT" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/firstdeck/foreport) -"aKU" = ( -/obj/structure/table/standard, -/obj/item/storage/toolbox/emergency, -/obj/machinery/power/apc{ - dir = 8; - name = "west bump"; - pixel_x = -24 - }, -/obj/structure/cable/green{ - d2 = 4; - icon_state = "0-4" - }, -/turf/simulated/floor/tiled/white/monotile, -/area/crew_quarters/sleep/cryo/aux) -"aKV" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable/green{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 4; - icon_state = "warning" - }, -/obj/effect/landmark{ - name = "JoinLateCryo" - }, -/turf/simulated/floor/tiled/white, -/area/crew_quarters/sleep/cryo/aux) -"aKW" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 4; - icon_state = "warning" - }, -/obj/effect/landmark{ - name = "JoinLateCryo" - }, -/turf/simulated/floor/tiled/white, -/area/crew_quarters/sleep/cryo/aux) -"aKX" = ( -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/effect/floor_decal/industrial/warning{ - dir = 8 - }, -/obj/effect/landmark{ - name = "JoinLateCryo" - }, -/turf/simulated/floor/tiled/white, -/area/crew_quarters/sleep/cryo/aux) -"aKY" = ( -/obj/structure/disposalpipe/segment, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/firstdeck/centralport) -"aLj" = ( -/obj/structure/grille, -/turf/simulated/floor/reinforced/airless, -/area/space) -"aLo" = ( -/turf/simulated/floor/tiled/white, -/area/rnd/misc_lab) -"aLu" = ( -/turf/simulated/floor/plating, -/area/maintenance/firstdeck/aftport) -"aLv" = ( -/obj/effect/floor_decal/industrial/outline/grey, -/obj/machinery/flasher/portable, -/turf/simulated/floor/tiled/dark/monotile, -/area/security/storage) -"aLw" = ( -/obj/effect/floor_decal/industrial/outline/grey, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 8 - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/table/rack{ - dir = 4 - }, -/obj/item/device/flashlight/flare, -/obj/item/device/flashlight/flare, -/obj/item/device/flashlight/flare, -/obj/item/device/flashlight/flare, -/obj/item/device/flashlight/flare, -/obj/item/device/flashlight/flare, -/turf/simulated/floor/tiled/dark/monotile, -/area/security/storage) -"aLx" = ( -/obj/effect/floor_decal/industrial/outline/grey, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/table/rack{ - dir = 4 - }, -/obj/item/storage/toolbox/emergency{ - pixel_y = 3 - }, -/obj/item/storage/toolbox/mechanical{ - pixel_y = -3 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/security/storage) -"aLy" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 8 - }, -/turf/simulated/floor/tiled/dark, -/area/security/storage) -"aLz" = ( -/obj/effect/floor_decal/industrial/outline/grey, -/obj/item/device/radio/intercom/department/security{ - dir = 8; - pixel_x = 21 - }, -/obj/structure/closet/l3closet/security, -/turf/simulated/floor/tiled/dark/monotile, -/area/security/storage) -"aLA" = ( -/obj/effect/floor_decal/corner/red{ - dir = 9 - }, -/obj/machinery/light{ - dir = 8 - }, -/turf/simulated/floor/tiled, -/area/security/wing) -"aLD" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 1 - }, -/obj/machinery/power/apc{ - dir = 1; - name = "north bump"; - pixel_y = 24 - }, -/obj/structure/cable/green{ - d2 = 8; - icon_state = "0-8" - }, -/turf/simulated/floor/tiled/monotile, -/area/security/wing) -"aLE" = ( -/obj/effect/catwalk_plated, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/computer/guestpass{ - pixel_y = 32 - }, -/turf/simulated/floor/plating, -/area/security/wing) -"aLG" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled/monotile, -/area/security/wing) -"aLH" = ( -/obj/effect/catwalk_plated, -/obj/structure/cable/green{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/structure/holoplant, -/turf/simulated/floor/plating, -/area/security/wing) -"aLK" = ( -/turf/simulated/floor/tiled/monotile, -/area/security/brig) -"aLL" = ( -/obj/machinery/camera/network/security{ - c_tag = "Brig - Center"; - dir = 8 - }, -/turf/simulated/floor/tiled/monotile, -/area/security/brig) -"aLN" = ( -/obj/structure/disposalpipe/up{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/maintenance/firstdeck/foreport) -"aLO" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 8; - icon_state = "warning" - }, -/obj/structure/railing/mapped{ - dir = 4; - icon_state = "railing0-1" - }, -/turf/simulated/floor/plating, -/area/maintenance/firstdeck/foreport) -"aLP" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 8 - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/firstdeck/foreport) -"aLQ" = ( -/obj/structure/grille, -/obj/machinery/atmospherics/pipe/simple/hidden/universal{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/maintenance/firstdeck/foreport) -"aLR" = ( -/obj/machinery/atmospherics/binary/pump{ - dir = 8 - }, -/obj/structure/disposalpipe/segment{ - dir = 2; - icon_state = "pipe-c" - }, -/turf/simulated/floor/plating, -/area/maintenance/firstdeck/foreport) -"aLS" = ( -/obj/structure/largecrate, -/obj/machinery/atmospherics/pipe/manifold/hidden{ - dir = 1 - }, -/turf/simulated/floor/plating, -/area/maintenance/firstdeck/foreport) -"aLT" = ( -/obj/machinery/atmospherics/unary/tank/air{ - dir = 8 - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 9; - icon_state = "warning" - }, -/turf/simulated/floor/plating, -/area/maintenance/firstdeck/foreport) -"aLU" = ( -/obj/structure/table/standard, -/obj/structure/closet/medical_wall/filled{ - pixel_x = -32 - }, -/obj/machinery/recharger, -/turf/simulated/floor/tiled/white/monotile, -/area/crew_quarters/sleep/cryo/aux) -"aLV" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/effect/floor_decal/industrial/warning{ - dir = 4; - icon_state = "warning" - }, -/obj/effect/landmark{ - name = "JoinLateCryo" - }, -/turf/simulated/floor/tiled/white, -/area/crew_quarters/sleep/cryo/aux) -"aLW" = ( -/obj/structure/disposalpipe/segment{ - dir = 1; - icon_state = "pipe-c" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/effect/floor_decal/industrial/warning{ - dir = 8 - }, -/obj/effect/landmark{ - name = "JoinLateCryo" - }, -/turf/simulated/floor/tiled/white, -/area/crew_quarters/sleep/cryo/aux) -"aLX" = ( -/obj/machinery/disposal, -/obj/effect/floor_decal/industrial/hatch/yellow, -/obj/structure/disposalpipe/trunk{ - dir = 8 - }, -/obj/machinery/alarm{ - dir = 8; - pixel_x = 25; - req_access = list(list("ACCESS_ENGINE_EQUIP","ACCESS_ATMOS")) - }, -/turf/simulated/floor/tiled/white/monotile, -/area/crew_quarters/sleep/cryo/aux) -"aMy" = ( -/obj/structure/closet, -/obj/random/action_figure, -/obj/random/tech_supply, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/firstdeck/aftport) -"aMB" = ( -/obj/effect/floor_decal/industrial/outline/grey, -/obj/structure/closet/crate/medical, -/obj/item/storage/firstaid/fire{ - pixel_x = -4; - pixel_y = -4 - }, -/obj/item/storage/firstaid/toxin{ - pixel_x = -2; - pixel_y = -2 - }, -/obj/item/storage/firstaid/regular, -/obj/item/storage/firstaid/o2{ - pixel_x = 2; - pixel_y = 2 - }, -/obj/item/storage/firstaid/adv{ - pixel_x = 4; - pixel_y = 4 - }, -/obj/item/stack/nanopaste, -/obj/item/bodybag/rescue/loaded, -/turf/simulated/floor/tiled/techfloor/grid, -/area/command/armoury) -"aMC" = ( -/obj/machinery/light, -/turf/simulated/floor/tiled/dark, -/area/security/storage) -"aMD" = ( -/obj/effect/floor_decal/corner/red/three_quarters, -/obj/item/device/radio/intercom/department/security{ - dir = 4; - pixel_x = -21 - }, -/turf/simulated/floor/tiled, -/area/security/wing) -"aME" = ( -/obj/effect/floor_decal/corner/red{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled, -/area/security/wing) -"aMF" = ( -/obj/machinery/door_timer/cell_1{ - name = "Cell One"; - pixel_y = -32 - }, -/obj/effect/floor_decal/corner/red/half, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 1 - }, -/obj/machinery/camera/network/security{ - c_tag = "Security Hallway - Cells"; - dir = 1 - }, -/turf/simulated/floor/tiled/monotile, -/area/security/wing) -"aMJ" = ( -/obj/machinery/door_timer/cell_2{ - name = "Cell Two"; - pixel_y = -32 - }, -/obj/effect/floor_decal/corner/red/half, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 1 - }, -/obj/machinery/light, -/turf/simulated/floor/tiled/monotile, -/area/security/wing) -"aMK" = ( -/obj/machinery/button/flasher{ - id_tag = "permentryflash"; - name = "entry flash"; - pixel_x = 22; - pixel_y = 24; - req_access = list("ACCESS_BRIG") - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/security/wing) -"aML" = ( -/obj/machinery/flasher{ - id_tag = "permentryflash"; - name = "Floor mounted flash" - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/structure/cable/green{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/tiled/monotile, -/area/security/brig) -"aMM" = ( -/obj/machinery/door/airlock/glass/security{ - id_tag = "prisonentry"; - name = "Brig Entry" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/door/firedoor, -/turf/simulated/floor/tiled/steel_ridged, -/area/security/brig) -"aMN" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 - }, -/turf/simulated/floor/tiled, -/area/security/brig) -"aMO" = ( -/obj/machinery/alarm{ - pixel_y = 24 - }, -/obj/machinery/recharge_station, -/turf/simulated/floor/tiled, -/area/security/brig) -"aMP" = ( -/obj/effect/floor_decal/industrial/warning/corner, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 8 - }, -/turf/simulated/floor/tiled, -/area/security/brig) -"aMQ" = ( -/obj/machinery/atmospherics/unary/vent_pump/on, -/obj/machinery/light_switch{ - pixel_x = 24; - pixel_y = -6 - }, -/obj/structure/closet{ - name = "Prisoner's Locker" - }, -/obj/random/tech_supply, -/obj/item/flame/lighter/zippo/random, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/random/smokes, -/obj/effect/floor_decal/industrial/warning, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 8 - }, -/obj/machinery/firealarm{ - dir = 2; - pixel_y = 24 - }, -/turf/simulated/floor/tiled, -/area/security/brig) -"aMS" = ( -/obj/machinery/portable_atmospherics/powered/pump/filled, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/firstdeck/foreport) -"aMT" = ( -/obj/structure/disposalpipe/segment, -/obj/machinery/hologram/holopad, -/turf/simulated/floor/tiled, -/area/security/detectives_office) -"aMV" = ( -/obj/structure/disposalpipe/up, -/obj/effect/floor_decal/industrial/warning, -/obj/structure/railing/mapped, -/turf/simulated/floor/plating, -/area/maintenance/firstdeck/foreport) -"aMW" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 8; - icon_state = "warning" - }, -/obj/structure/railing/mapped, -/obj/structure/railing/mapped{ - dir = 4; - icon_state = "railing0-1" - }, -/turf/simulated/floor/plating, -/area/maintenance/firstdeck/foreport) -"aMX" = ( -/obj/structure/grille/broken, -/obj/structure/closet/crate, -/obj/random/material, -/obj/random/material, -/turf/simulated/floor/plating, -/area/maintenance/firstdeck/foreport) -"aMY" = ( -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/plating, -/area/maintenance/firstdeck/foreport) -"aMZ" = ( -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 5 - }, -/turf/simulated/floor/plating, -/area/maintenance/firstdeck/foreport) -"aNa" = ( -/obj/machinery/atmospherics/unary/tank/air{ - dir = 8 - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 10 - }, -/turf/simulated/floor/plating, -/area/maintenance/firstdeck/foreport) -"aNb" = ( -/obj/machinery/light/spot{ - dir = 8 - }, -/obj/machinery/computer/modular/preset/civilian{ - dir = 4; - icon_state = "console" - }, -/turf/simulated/floor/tiled/white/monotile, -/area/crew_quarters/sleep/cryo/aux) -"aNc" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/effect/floor_decal/industrial/warning{ - dir = 8 - }, -/obj/effect/landmark{ - name = "JoinLateCryo" - }, -/turf/simulated/floor/tiled/white, -/area/crew_quarters/sleep/cryo/aux) -"aNd" = ( -/obj/machinery/light/spot{ - dir = 4 - }, -/obj/machinery/vending/cigarette{ - dir = 8 - }, -/turf/simulated/floor/tiled/white/monotile, -/area/crew_quarters/sleep/cryo/aux) -"aNy" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/visible/fuel{ - dir = 4 - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/firstdeck/aftport) -"aNA" = ( -/obj/structure/table/rack, -/obj/item/storage/box/lights/mixed, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/firstdeck/aftport) -"aNB" = ( -/obj/structure/lattice, -/turf/simulated/wall/r_wall/hull, -/area/maintenance/firstdeck/aftport) -"aNE" = ( -/obj/effect/floor_decal/industrial/outline/grey, -/obj/structure/closet/crate/freezer/rations, -/turf/simulated/floor/tiled/techfloor/grid, -/area/command/armoury) -"aNG" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/tiled, -/area/security/wing) -"aNH" = ( -/turf/simulated/wall/prepainted, -/area/security/wing) -"aNL" = ( -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/structure/closet/secure_closet/brig, -/obj/machinery/alarm{ - dir = 8; - pixel_x = 24 - }, -/turf/simulated/floor/tiled/monotile, -/area/security/wing) -"aNP" = ( -/obj/structure/table/standard, -/obj/item/device/radio/intercom/department/security{ - dir = 4; - pixel_x = -21 - }, -/obj/machinery/camera/network/security{ - c_tag = "Brig - Bunk Room"; - dir = 4 - }, -/obj/structure/bedsheetbin, -/turf/simulated/floor/tiled, -/area/security/brig) -"aNQ" = ( -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/effect/floor_decal/industrial/warning{ - dir = 4 - }, -/obj/machinery/flasher{ - id_tag = "permflash"; - name = "Floor mounted flash" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/turf/simulated/floor/tiled/monotile, -/area/security/brig) -"aNV" = ( -/obj/structure/cable/green{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 - }, -/obj/structure/disposalpipe/segment, -/obj/structure/closet/crate, -/obj/random/maintenance/solgov, -/obj/random/maintenance/solgov, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/firstdeck/foreport) -"aNW" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/firstdeck/foreport) -"aNY" = ( -/obj/effect/floor_decal/industrial/warning/corner, -/obj/structure/grille/broken, -/turf/simulated/floor/plating, -/area/maintenance/firstdeck/foreport) -"aNZ" = ( -/obj/structure/grille, -/obj/effect/floor_decal/industrial/warning, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/plating, -/area/maintenance/firstdeck/foreport) -"aOa" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 4 - }, -/obj/machinery/vending/cola{ - dir = 4 - }, -/turf/simulated/floor/tiled/white/monotile, -/area/crew_quarters/sleep/cryo/aux) -"aOb" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 4; - icon_state = "warning" - }, -/obj/effect/landmark{ - name = "JoinLateCryo" - }, -/turf/simulated/floor/tiled/white, -/area/crew_quarters/sleep/cryo/aux) -"aOc" = ( -/obj/machinery/cryopod, -/obj/machinery/light/spot, -/turf/simulated/floor/tiled/techmaint, -/area/crew_quarters/sleep/cryo/aux) -"aOd" = ( -/obj/machinery/computer/cryopod{ - pixel_y = -32 - }, -/turf/simulated/floor/tiled/white, -/area/crew_quarters/sleep/cryo/aux) -"aOe" = ( -/obj/machinery/cryopod{ - dir = 4 - }, -/obj/machinery/light/spot, -/turf/simulated/floor/tiled/techmaint, -/area/crew_quarters/sleep/cryo/aux) -"aOf" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 8 - }, -/obj/effect/landmark{ - name = "JoinLateCryo" - }, -/turf/simulated/floor/tiled/white, -/area/crew_quarters/sleep/cryo/aux) -"aOg" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 8 - }, -/obj/machinery/vending/snack{ - dir = 8 - }, -/turf/simulated/floor/tiled/white/monotile, -/area/crew_quarters/sleep/cryo/aux) -"aOj" = ( -/obj/structure/bookcase/manuals/xenoarchaeology, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/firstdeck/centralport) -"aOt" = ( -/obj/structure/hygiene/sink{ - dir = 4; - pixel_x = 11; - pixel_y = 5 - }, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 8 - }, -/obj/machinery/power/apc{ - dir = 4; - name = "east bump"; - pixel_x = 24 - }, -/obj/structure/cable/green{ - d2 = 8; - icon_state = "0-8" - }, -/obj/machinery/button/alternate/door/bolts{ - id_tag = "med_washroom"; - name = "Decontamination Door Bolt"; - pixel_y = -22 - }, -/turf/simulated/floor/tiled/freezer, -/area/medical/washroom) -"aOz" = ( -/obj/machinery/sparker{ - id_tag = "Xenobio"; - pixel_x = -18 - }, -/turf/simulated/floor/reinforced, -/area/rnd/misc_lab) -"aOC" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/disposalpipe/segment, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/visible/fuel, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/firstdeck/aftport) -"aOD" = ( -/obj/machinery/atmospherics/unary/outlet_injector{ - id = "rust_injector"; - injecting = 1; - use_power = 1 - }, -/turf/simulated/floor/airless, -/area/thruster/d1port) -"aOE" = ( -/obj/structure/table/rack, -/obj/item/gun/energy/gun/secure, -/obj/item/gun/energy/gun/secure, -/obj/structure/window/reinforced{ - dir = 1 - }, -/obj/structure/window/reinforced{ - dir = 8 - }, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/floor/tiled/dark/monotile, -/area/security/armoury) -"aOF" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 8 - }, -/obj/machinery/alarm{ - pixel_y = 24 - }, -/turf/simulated/floor/tiled/dark, -/area/security/armoury) -"aOG" = ( -/obj/structure/table/steel, -/obj/effect/floor_decal/industrial/outline/grey, -/obj/item/screwdriver, -/obj/machinery/cell_charger, -/obj/machinery/recharger/wallcharger{ - dir = 8; - pixel_x = 23; - pixel_y = -3 - }, -/obj/item/storage/box/chemimp{ - pixel_x = -4; - pixel_y = 11 - }, -/obj/item/storage/box/trackimp{ - pixel_x = 8; - pixel_y = 11 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/security/armoury) -"aOI" = ( -/obj/structure/hygiene/sink{ - dir = 8; - pixel_x = -12; - pixel_y = 2 - }, -/obj/item/storage/mirror{ - pixel_x = -32 - }, -/turf/simulated/floor/tiled, -/area/security/wing) -"aOJ" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 4 - }, -/obj/effect/floor_decal/corner/blue{ - dir = 9 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/firstdeck/fore) -"aOK" = ( -/obj/machinery/status_display, -/turf/simulated/wall/prepainted, -/area/security/wing) -"aOL" = ( -/obj/structure/disposalpipe/segment, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/random/torchcloset, -/obj/random/coin, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/firstdeck/foreport) -"aOM" = ( -/obj/structure/ladder, -/obj/effect/floor_decal/industrial/hatch/yellow, -/obj/structure/catwalk, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/firstdeck/foreport) -"aON" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 4 - }, -/obj/structure/railing/mapped{ - dir = 8; - icon_state = "railing0-1" - }, -/turf/simulated/floor/plating, -/area/maintenance/firstdeck/foreport) -"aOO" = ( -/obj/structure/disposalpipe/down{ - dir = 1 - }, -/obj/effect/decal/cleanable/cobweb2, -/obj/structure/lattice, -/turf/simulated/open, -/area/maintenance/firstdeck/foreport) -"aOP" = ( -/obj/structure/reagent_dispensers/fueltank, -/obj/effect/decal/cleanable/cobweb, -/turf/simulated/floor/plating, -/area/maintenance/firstdeck/centralport) -"aPb" = ( -/obj/effect/floor_decal/corner/yellow/mono, -/obj/machinery/computer/modular{ - dir = 8 - }, -/obj/machinery/power/apc{ - dir = 1; - name = "north bump"; - pixel_y = 24 - }, -/obj/structure/cable/green{ - d2 = 2; - icon_state = "0-2" - }, -/obj/structure/extinguisher_cabinet{ - pixel_x = 32 - }, -/turf/simulated/floor/tiled/monotile, -/area/assembly/robotics/office) -"aPq" = ( -/turf/simulated/wall/ocp_wall, -/area/thruster/d1port) -"aPs" = ( -/obj/machinery/atmospherics/pipe/simple/visible/fuel, -/obj/structure/sign/warning/hot_exhaust{ - dir = 1 - }, -/turf/simulated/wall/ocp_wall, -/area/thruster/d1port) -"aPu" = ( -/turf/simulated/floor/tiled/dark/monotile, -/area/security/armoury) -"aPv" = ( -/obj/structure/hygiene/toilet{ - dir = 4 - }, -/obj/effect/floor_decal/corner/red{ - dir = 10 - }, -/obj/machinery/flasher{ - id_tag = "Cell 1"; - pixel_x = -24 - }, -/obj/machinery/alarm{ - dir = 1; - pixel_y = -22 - }, -/turf/simulated/floor/tiled, -/area/security/wing) -"aPw" = ( -/obj/machinery/computer/arcade, -/turf/simulated/floor/plating, -/area/maintenance/firstdeck/foreport) -"aPC" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/firstdeck/foreport) -"aPE" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/alarm{ - dir = 1; - pixel_y = -22 - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/firstdeck/foreport) -"aPF" = ( -/obj/structure/disposalpipe/segment{ - dir = 8; - icon_state = "pipe-c" - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/firstdeck/foreport) -"aPG" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/firstdeck/foreport) -"aPH" = ( -/obj/random/junk, -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 4; - icon_state = "warningcorner" - }, -/obj/structure/railing/mapped, -/obj/structure/railing/mapped{ - dir = 8; - icon_state = "railing0-1" - }, -/turf/simulated/floor/plating, -/area/maintenance/firstdeck/foreport) -"aPI" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 1 - }, -/obj/structure/railing/mapped, -/turf/simulated/floor/plating, -/area/maintenance/firstdeck/foreport) -"aPJ" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/firstdeck/centralport) -"aPL" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/floor_decal/industrial/warning, -/obj/machinery/embedded_controller/radio/simple_docking_controller/escape_pod_berth{ - dir = 1; - frequency = 1380; - id_tag = "escape_pod_15_berth"; - name = "escape pod ten berth controller"; - pixel_x = 24; - pixel_y = -24; - tag_door = "escape_pod_15_berth_hatch" - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/firstdeck/centralport) -"aPM" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 8 - }, -/obj/item/device/radio/intercom{ - pixel_y = 23 - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/firstdeck/centralport) -"aPN" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/oxygen_pump{ - pixel_y = 32 - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/firstdeck/centralport) -"aPO" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/floor_decal/industrial/warning/corner, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/firstdeck/centralport) -"aPP" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/floor_decal/industrial/warning, -/obj/machinery/embedded_controller/radio/simple_docking_controller/escape_pod_berth{ - dir = 1; - frequency = 1380; - id_tag = "escape_pod_16_berth"; - name = "escape pod eleven berth controller"; - pixel_x = 24; - pixel_y = -24; - tag_door = "escape_pod_16_berth_hatch" - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/firstdeck/centralport) -"aPQ" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 8 - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/firstdeck/centralport) -"aPR" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/floor_decal/industrial/warning, -/obj/machinery/embedded_controller/radio/simple_docking_controller/escape_pod_berth{ - dir = 1; - frequency = 1380; - id_tag = "escape_pod_17_berth"; - name = "escape pod twelve berth controller"; - pixel_x = 24; - pixel_y = -24; - tag_door = "escape_pod_17_berth_hatch" - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/firstdeck/centralport) -"aPS" = ( -/obj/structure/disposalpipe/segment, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/firstdeck/centralport) -"aPT" = ( -/obj/structure/closet/emcloset, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/firstdeck/centralport) -"aPU" = ( -/obj/structure/ladder, -/obj/effect/floor_decal/industrial/hatch/yellow, -/obj/structure/catwalk, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/firstdeck/centralport) -"aQk" = ( -/obj/machinery/atmospherics/unary/vent_pump/siphon/on/atmos{ - internal_pressure_bound = 35000; - internal_pressure_bound_default = 35000 - }, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/floor/reinforced, -/area/thruster/d1port) -"aQm" = ( -/obj/machinery/light/small{ - dir = 1 - }, -/obj/machinery/meter, -/obj/effect/floor_decal/industrial/warning{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/visible/fuel, -/turf/simulated/floor/tiled/techfloor, -/area/thruster/d1port) -"aQn" = ( -/obj/machinery/atmospherics/pipe/simple/visible/fuel{ - dir = 6 - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor, -/area/thruster/d1port) -"aQo" = ( -/obj/machinery/atmospherics/unary/engine{ - dir = 8 - }, -/turf/simulated/floor/plating, -/area/thruster/d1port) -"aQp" = ( -/obj/structure/table/rack, -/obj/item/clothing/suit/armor/riot, -/obj/item/clothing/suit/armor/riot, -/obj/item/clothing/suit/armor/riot, -/obj/item/clothing/suit/armor/riot, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/floor/tiled/dark/monotile, -/area/security/armoury) -"aQq" = ( -/obj/machinery/shieldwallgen, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/floor/tiled/techfloor/grid, -/area/command/armoury) -"aQr" = ( -/obj/machinery/barrier, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/floor/tiled/techfloor/grid, -/area/command/armoury) -"aQs" = ( -/obj/effect/floor_decal/industrial/outline/grey, -/obj/machinery/power/port_gen/pacman{ - anchored = 1 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/command/armoury) -"aQt" = ( -/obj/effect/floor_decal/industrial/outline/grey, -/obj/machinery/portable_atmospherics/powered/pump/filled, -/turf/simulated/floor/tiled/techfloor/grid, -/area/command/armoury) -"aQu" = ( -/obj/machinery/floodlight, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/floor/tiled/techfloor/grid, -/area/command/armoury) -"aQx" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 - }, -/obj/structure/railing/mapped, -/obj/structure/railing/mapped{ - dir = 8; - icon_state = "railing0-1" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, -/turf/simulated/floor/plating, -/area/maintenance/firstdeck/foreport) -"aQy" = ( -/obj/machinery/atmospherics/valve/shutoff/supply{ - dir = 4 - }, -/obj/structure/railing/mapped, -/obj/machinery/atmospherics/valve/shutoff/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/maintenance/firstdeck/foreport) -"aQz" = ( -/obj/structure/cable/green{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/structure/disposalpipe/segment{ - dir = 4; - icon_state = "pipe-c" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/firstdeck/foreport) -"aQA" = ( -/obj/structure/closet, -/obj/random/maintenance/solgov, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/firstdeck/foreport) -"aQC" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/effect/floor_decal/industrial/warning/corner, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/firstdeck/foreport) -"aQD" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/floor_decal/industrial/warning, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/firstdeck/foreport) -"aQE" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 8; - icon_state = "warningcorner" - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/firstdeck/foreport) -"aQF" = ( -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/door/airlock/maintenance, -/turf/simulated/floor/tiled/techfloor/grid, -/area/maintenance/firstdeck/foreport) -"aQG" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/firstdeck/centralport) -"aQI" = ( -/obj/machinery/door/airlock/external/escapepod{ - icon_state = "closed"; - id_tag = "escape_pod_15_berth_hatch"; - name = "Escape Pod Ten" - }, -/obj/machinery/shield_diffuser, -/turf/simulated/floor/plating, -/area/maintenance/firstdeck/centralport) -"aQJ" = ( -/obj/machinery/door/airlock/external/escapepod{ - icon_state = "closed"; - id_tag = "escape_pod_16_berth_hatch"; - name = "Escape Pod Eleven" - }, -/obj/machinery/shield_diffuser, -/turf/simulated/floor/plating, -/area/maintenance/firstdeck/centralport) -"aQK" = ( -/obj/machinery/door/airlock/external/escapepod{ - icon_state = "closed"; - id_tag = "escape_pod_17_berth_hatch"; - name = "Escape Pod Twelve" - }, -/obj/machinery/shield_diffuser, -/turf/simulated/floor/plating, -/area/maintenance/firstdeck/centralport) -"aRb" = ( -/obj/effect/floor_decal/corner/yellow/mono, -/obj/structure/closet/wardrobe/robotics_black, -/obj/item/clothing/under/rank/roboticist/skirt, -/obj/item/clothing/under/rank/roboticist/skirt, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/obj/machinery/light_switch{ - pixel_x = 24 - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/turf/simulated/floor/tiled/monotile, -/area/assembly/robotics/office) -"aRd" = ( -/obj/structure/ladder, -/obj/structure/catwalk, -/obj/effect/floor_decal/industrial/hatch/yellow, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/firstdeck/aftport) -"aRe" = ( -/obj/structure/disposalpipe/down{ - dir = 4 - }, -/obj/structure/lattice, -/obj/structure/railing/mapped{ - dir = 8; - icon_state = "railing0-1" - }, -/obj/machinery/atmospherics/pipe/simple/visible/fuel{ - dir = 6 - }, -/turf/simulated/open, -/area/maintenance/firstdeck/aftport) -"aRf" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 8; - icon_state = "warning" - }, -/obj/machinery/atmospherics/pipe/simple/visible/fuel{ - dir = 6 - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/firstdeck/aftport) -"aRg" = ( -/obj/machinery/sparker{ - id_tag = "engines"; - pixel_x = -24 - }, -/obj/machinery/atmospherics/unary/vent_pump/siphon/on/atmos{ - dir = 4; - internal_pressure_bound = 35000; - internal_pressure_bound_default = 35000 - }, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/floor/reinforced, -/area/thruster/d1port) -"aRh" = ( -/obj/machinery/atmospherics/pipe/manifold/visible/fuel{ - dir = 4 - }, -/turf/simulated/floor/reinforced, -/area/thruster/d1port) -"aRj" = ( -/obj/machinery/atmospherics/binary/passive_gate/on{ - dir = 1; - target_pressure = 2000; - use_power = 1 - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 8 - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled/techfloor, -/area/thruster/d1port) -"aRk" = ( -/obj/machinery/atmospherics/pipe/manifold/visible/fuel{ - dir = 8 - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor, -/area/thruster/d1port) -"aRm" = ( -/obj/machinery/barrier, -/obj/effect/floor_decal/industrial/outline/grey, -/obj/machinery/camera/network/command{ - c_tag = "Bridge - Emergency Armory - Port"; - dir = 1 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/command/armoury) -"aRo" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/firstdeck/foreport) -"aRp" = ( -/obj/machinery/atmospherics/pipe/simple/visible{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/firstdeck/foreport) -"aRq" = ( -/obj/machinery/atmospherics/pipe/simple/visible{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/firstdeck/foreport) -"aRr" = ( -/obj/machinery/atmospherics/pipe/simple/visible{ - dir = 4 - }, -/obj/effect/floor_decal/industrial/warning/corner, -/obj/structure/catwalk, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/structure/disposalpipe/segment{ - dir = 1; - icon_state = "pipe-c" - }, -/turf/simulated/floor/plating, -/area/maintenance/firstdeck/foreport) -"aRs" = ( -/obj/machinery/access_button{ - command = "cycle_interior"; - frequency = 1379; - master_tag = "bridgeport_airlock"; - name = "interior access button"; - pixel_x = 24; - pixel_y = -24; - req_access = list("ACCESS_MAINT") - }, -/obj/effect/floor_decal/industrial/warning, -/obj/structure/catwalk, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/visible{ - dir = 1 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/maintenance/firstdeck/foreport) -"aRt" = ( -/obj/machinery/atmospherics/pipe/simple/visible{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 8; - icon_state = "warningcorner" - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/firstdeck/foreport) -"aRu" = ( -/obj/machinery/atmospherics/pipe/simple/visible{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/firstdeck/foreport) -"aRv" = ( -/obj/machinery/atmospherics/pipe/simple/visible{ - dir = 10 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/catwalk, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/maintenance/firstdeck/foreport) -"aRw" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/firstdeck/foreport) -"aRy" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/structure/disposalpipe/segment{ - dir = 8; - icon_state = "pipe-c" - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/firstdeck/foreport) -"aRz" = ( -/obj/structure/cable{ - d1 = 32; - d2 = 4; - icon_state = "32-4" - }, -/obj/structure/lattice, -/obj/structure/railing/mapped{ - dir = 1; - icon_state = "railing0-1" - }, -/turf/simulated/open, -/area/maintenance/firstdeck/foreport) -"aRA" = ( -/obj/structure/cable{ - d2 = 8; - icon_state = "0-8" - }, -/obj/structure/cable{ - d1 = 16; - d2 = 0; - icon_state = "16-0" - }, -/obj/structure/railing/mapped{ - dir = 1; - icon_state = "railing0-1" - }, -/turf/simulated/floor/plating, -/area/maintenance/firstdeck/foreport) -"aRB" = ( -/obj/structure/shuttle/engine/propulsion{ - dir = 1 - }, -/turf/simulated/wall/r_titanium, -/area/shuttle/escape_pod15/station) -"aRC" = ( -/obj/machinery/door/airlock/external{ - frequency = 1380; - icon_state = "closed"; - id_tag = "escape_pod_15_hatch"; - locked = 1; - name = "Escape Pod Ten Hatch" - }, -/turf/simulated/floor/plating, -/area/shuttle/escape_pod15/station) -"aRD" = ( -/obj/structure/shuttle/engine/propulsion{ - dir = 1 - }, -/turf/simulated/wall/r_titanium, -/area/shuttle/escape_pod16/station) -"aRE" = ( -/obj/machinery/door/airlock/external{ - frequency = 1380; - icon_state = "closed"; - id_tag = "escape_pod_16_hatch"; - locked = 1; - name = "Escape Pod Eleven Hatch" - }, -/turf/simulated/floor/plating, -/area/shuttle/escape_pod16/station) -"aRF" = ( -/obj/structure/shuttle/engine/propulsion{ - dir = 1 - }, -/turf/simulated/wall/r_titanium, -/area/shuttle/escape_pod17/station) -"aRG" = ( -/obj/machinery/door/airlock/external{ - frequency = 1380; - icon_state = "closed"; - id_tag = "escape_pod_17_hatch"; - locked = 1; - name = "Escape Pod Twelve Hatch" - }, -/turf/simulated/floor/plating, -/area/shuttle/escape_pod17/station) -"aRH" = ( -/obj/structure/disposalpipe/segment{ - dir = 1; - icon_state = "pipe-c" - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/firstdeck/centralport) -"aRI" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/firstdeck/centralport) -"aRJ" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/structure/catwalk, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/turf/simulated/floor/plating, -/area/maintenance/firstdeck/centralport) -"aRK" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/firstdeck/centralport) -"aRL" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/catwalk, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, -/turf/simulated/floor/plating, -/area/maintenance/firstdeck/centralport) -"aRM" = ( -/obj/structure/disposalpipe/segment{ - dir = 2; - icon_state = "pipe-c" - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/firstdeck/centralport) -"aRX" = ( -/obj/effect/floor_decal/corner/research{ - dir = 5 - }, -/turf/simulated/floor/tiled/white, -/area/rnd/xenobiology/xenoflora) -"aSb" = ( -/obj/effect/floor_decal/corner/yellow{ - dir = 10 - }, -/obj/effect/floor_decal/corner/yellow{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/light{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/assembly/robotics/office) -"aSd" = ( -/obj/structure/catwalk, -/turf/simulated/open, -/area/maintenance/firstdeck/aftport) -"aSe" = ( -/obj/structure/railing/mapped{ - dir = 8; - icon_state = "railing0-1" - }, -/obj/machinery/atmospherics/valve/shutoff/fuel, -/turf/simulated/open, -/area/maintenance/firstdeck/aftport) -"aSf" = ( -/obj/structure/railing/mapped{ - dir = 4; - icon_state = "railing0-1" - }, -/turf/simulated/open, -/area/maintenance/firstdeck/aftport) -"aSh" = ( -/obj/machinery/atmospherics/unary/vent_pump/siphon/on/atmos{ - dir = 4; - internal_pressure_bound = 35000; - internal_pressure_bound_default = 35000 - }, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/floor/reinforced, -/area/thruster/d1port) -"aSk" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 8 - }, -/obj/machinery/atmospherics/valve/digital{ - id_tag = "fuelmode" - }, -/obj/effect/floor_decal/industrial/outline/red, -/turf/simulated/floor/tiled/techfloor, -/area/thruster/d1port) -"aSl" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/visible/fuel, -/turf/simulated/floor/tiled/techfloor, -/area/thruster/d1port) -"aSm" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/obj/machinery/portable_atmospherics/powered/scrubber, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/firstdeck/foreport) -"aSn" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/universal{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/firstdeck/foreport) -"aSo" = ( -/obj/machinery/atmospherics/binary/pump/on{ - dir = 4; - target_pressure = 200 - }, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/firstdeck/foreport) -"aSp" = ( -/obj/machinery/atmospherics/pipe/simple/visible{ - dir = 9; - icon_state = "intact" - }, -/obj/structure/largecrate, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/firstdeck/foreport) -"aSq" = ( -/obj/machinery/door/airlock/external{ - frequency = 1379; - icon_state = "closed"; - id_tag = "bridgeport_inner"; - locked = 1; - name = "Engineering External Access" - }, -/obj/machinery/atmospherics/pipe/simple/visible, -/turf/simulated/floor/plating, -/area/maintenance/firstdeck/foreport) -"aSs" = ( -/obj/effect/floor_decal/industrial/hatch/yellow, -/obj/structure/ladder/up, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/firstdeck/foreport) -"aSt" = ( -/obj/machinery/atmospherics/pipe/simple/visible{ - dir = 5; - icon_state = "intact" - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/firstdeck/foreport) -"aSu" = ( -/obj/machinery/atmospherics/pipe/simple/visible{ - dir = 4 - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/firstdeck/foreport) -"aSv" = ( -/obj/machinery/atmospherics/pipe/simple/visible{ - dir = 4 - }, -/obj/machinery/space_heater, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/firstdeck/foreport) -"aSw" = ( -/obj/machinery/atmospherics/portables_connector{ - dir = 8 - }, -/obj/machinery/portable_atmospherics/canister/air/airlock, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/firstdeck/foreport) -"aSx" = ( -/turf/simulated/wall/r_titanium, -/area/shuttle/escape_pod15/station) -"aSz" = ( -/turf/simulated/wall/r_titanium, -/area/shuttle/escape_pod16/station) -"aSB" = ( -/turf/simulated/wall/r_titanium, -/area/shuttle/escape_pod17/station) -"aSD" = ( -/obj/machinery/power/apc{ - name = "south bump"; - pixel_y = -24 - }, -/obj/structure/cable/green, -/obj/structure/railing/mapped{ - dir = 1; - icon_state = "railing0-1" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/obj/structure/railing/mapped{ - dir = 8; - icon_state = "railing0-1" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/turf/simulated/floor/plating, -/area/maintenance/firstdeck/centralport) -"aSE" = ( -/obj/machinery/alarm{ - dir = 1; - pixel_y = -22 - }, -/obj/structure/railing/mapped{ - dir = 1; - icon_state = "railing0-1" - }, -/obj/machinery/atmospherics/valve/shutoff/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/valve/shutoff/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/maintenance/firstdeck/centralport) -"aSK" = ( -/turf/simulated/wall/prepainted, -/area/rnd/xenobiology/xenoflora) -"aSS" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 8 - }, -/obj/machinery/light/small{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/visible/fuel{ - dir = 5 - }, -/turf/simulated/floor/tiled/techfloor, -/area/thruster/d1port) -"aST" = ( -/obj/machinery/atmospherics/unary/vent_pump/high_volume/airlock{ - dir = 4; - id_tag = "bridgeport_pump" - }, -/obj/machinery/oxygen_pump{ - pixel_x = -32 - }, -/obj/effect/floor_decal/techfloor{ - dir = 8 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/maintenance/firstdeck/foreport) -"aSY" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/obj/structure/disposalpipe/segment{ - dir = 1; - icon_state = "pipe-c" - }, -/obj/structure/bed/roller, -/obj/structure/cable/green{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/firstdeck/centralport) -"aSZ" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/firstdeck/centralport) -"aTa" = ( -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/door/airlock/maintenance, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/white, -/area/maintenance/firstdeck/centralport) -"aTb" = ( -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/door/airlock/engineering{ - name = "Robotics" - }, -/turf/simulated/floor/tiled/white/monotile, -/area/assembly/robotics/office) -"aTd" = ( -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/door/airlock/maintenance, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/white, -/area/maintenance/firstdeck/aftport) -"aTe" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/firstdeck/aftport) -"aTg" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/catwalk, -/obj/effect/floor_decal/industrial/warning{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/visible/fuel{ - dir = 6 - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/turf/simulated/floor/plating, -/area/maintenance/firstdeck/aftport) -"aTh" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/catwalk, -/obj/effect/floor_decal/industrial/warning{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/visible/fuel{ - dir = 9 - }, -/turf/simulated/floor/plating, -/area/maintenance/firstdeck/aftport) -"aTi" = ( -/obj/machinery/atmospherics/pipe/simple/visible/blue{ - dir = 4 - }, -/turf/simulated/wall/r_wall/hull, -/area/thruster/d1port) -"aTj" = ( -/obj/machinery/atmospherics/portables_connector{ - dir = 8 - }, -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 4; - icon_state = "warningcorner" - }, -/obj/effect/floor_decal/industrial/hatch/orange, -/obj/machinery/light/small{ - dir = 8 - }, -/obj/machinery/firealarm{ - pixel_y = 24 - }, -/turf/simulated/floor/tiled/techfloor, -/area/thruster/d1port) -"aTk" = ( -/obj/machinery/atmospherics/pipe/simple/visible/fuel, -/obj/machinery/meter, -/obj/effect/floor_decal/industrial/warning{ - dir = 1 - }, -/turf/simulated/floor/tiled/techfloor, -/area/thruster/d1port) -"aTl" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 1 - }, -/turf/simulated/floor/tiled/techfloor, -/area/thruster/d1port) -"aTm" = ( -/obj/machinery/atmospherics/pipe/simple/visible/fuel{ - dir = 5 - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 1 - }, -/turf/simulated/floor/tiled/techfloor, -/area/thruster/d1port) -"aTn" = ( -/obj/machinery/button/blast_door{ - id_tag = "d1portnacelle"; - name = "combustion chamber blast door control"; - pixel_y = 24 - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/visible/fuel{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor, -/area/thruster/d1port) -"aTo" = ( -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 1; - icon_state = "warningcorner" - }, -/obj/machinery/atmospherics/pipe/simple/visible/fuel{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor, -/area/thruster/d1port) -"aTp" = ( -/obj/machinery/light/small{ - dir = 8 - }, -/obj/effect/floor_decal/techfloor{ - dir = 8 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/maintenance/firstdeck/foreport) -"aTq" = ( -/obj/effect/floor_decal/techfloor{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/maintenance/firstdeck/foreport) -"aTA" = ( -/obj/structure/closet/crate/secure/biohazard, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/firstdeck/centralport) -"aTB" = ( -/obj/machinery/embedded_controller/radio/airlock/access_controller{ - dir = 4; - id_tag = "xeno_airlock_control"; - name = "Xenobiology Access Console"; - pixel_x = -24; - pixel_y = -24; - req_access = list("ACCESS_XENOBIO"); - tag_exterior_door = "xeno_airlock_exterior"; - tag_interior_door = "xeno_airlock_interior" - }, -/obj/effect/floor_decal/industrial/hatch/yellow, -/obj/machinery/door/blast/regular{ - density = 0; - icon_state = "pdoor0"; - id_tag = "Biohazard"; - name = "Biohazard Shutter"; - opacity = 0 - }, -/obj/machinery/alarm{ - dir = 4; - pixel_x = -23 - }, -/turf/simulated/floor/tiled/white/monotile, -/area/rnd/xenobiology/entry) -"aTC" = ( -/obj/effect/floor_decal/industrial/hatch/yellow, -/obj/machinery/door/blast/regular{ - density = 0; - icon_state = "pdoor0"; - id_tag = "Biohazard"; - name = "Biohazard Shutter"; - opacity = 0 - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/tiled/white/monotile, -/area/rnd/xenobiology/entry) -"aTE" = ( -/obj/structure/closet/crate/freezer, -/obj/random/medical, -/obj/random/medical, -/obj/random/medical, -/obj/random/firstaid, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/firstdeck/aftport) -"aTF" = ( -/obj/random/torchcloset, -/obj/item/storage/box/lights/mixed, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/firstdeck/aftport) -"aTH" = ( -/obj/structure/railing/mapped{ - dir = 8; - icon_state = "railing0-1" - }, -/obj/structure/railing/mapped{ - dir = 1; - icon_state = "railing0-1" - }, -/turf/simulated/floor/plating, -/area/maintenance/firstdeck/aftport) -"aTI" = ( -/obj/random/trash, -/obj/structure/railing/mapped{ - dir = 1; - icon_state = "railing0-1" - }, -/turf/simulated/floor/plating, -/area/maintenance/firstdeck/aftport) -"aTK" = ( -/turf/simulated/wall/prepainted, -/area/maintenance/firstdeck/aftport) -"aTL" = ( -/obj/structure/reagent_dispensers/watertank, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/firstdeck/aftport) -"aTM" = ( -/obj/structure/reagent_dispensers/fueltank, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/firstdeck/aftport) -"aTN" = ( -/obj/random/torchcloset, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/firstdeck/aftport) -"aTO" = ( -/obj/structure/closet/crate, -/obj/random/powercell, -/obj/random/powercell, -/obj/random/powercell, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/firstdeck/aftport) -"aTP" = ( -/obj/item/stool, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/firstdeck/aftport) -"aTQ" = ( -/obj/machinery/door/airlock/hatch/maintenance, -/obj/machinery/atmospherics/pipe/simple/visible/fuel, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/door/firedoor, -/turf/simulated/floor/tiled/techfloor/grid, -/area/thruster/d1port) -"aTR" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/visible{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor, -/area/thruster/d1port) -"aTS" = ( -/obj/machinery/power/apc{ - dir = 1; - name = "north bump"; - pixel_y = 24 - }, -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 1; - icon_state = "warningcorner" - }, -/obj/structure/cable/green{ - d2 = 2; - icon_state = "0-2" - }, -/obj/machinery/atmospherics/pipe/simple/visible{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor, -/area/thruster/d1port) -"aTT" = ( -/obj/machinery/atmospherics/binary/pump/on{ - dir = 4; - target_pressure = 15000 - }, -/obj/effect/floor_decal/industrial/outline/orange, -/turf/simulated/floor/tiled/techfloor, -/area/thruster/d1port) -"aTU" = ( -/obj/machinery/atmospherics/omni/mixer{ - set_flow_rate = 50; - tag_east = 1; - tag_east_con = 0.2; - tag_north = 2; - tag_north_con = null; - tag_south = 1; - tag_south_con = 0.4; - tag_west = 1; - tag_west_con = 0.4 - }, -/obj/effect/floor_decal/industrial/warning/full, -/obj/effect/floor_decal/industrial/outline/blue, -/turf/simulated/floor/tiled/techfloor/grid, -/area/thruster/d1port) -"aTV" = ( -/obj/machinery/atmospherics/binary/pump/high_power/on{ - dir = 8; - target_pressure = 15000 - }, -/obj/effect/floor_decal/industrial/outline/orange, -/turf/simulated/floor/tiled/techfloor/grid, -/area/thruster/d1port) -"aTW" = ( -/obj/machinery/atmospherics/pipe/simple/visible/fuel{ - dir = 10 - }, -/obj/machinery/meter, -/turf/simulated/floor/tiled/techfloor/grid, -/area/thruster/d1port) -"aTY" = ( -/obj/machinery/meter, -/obj/effect/floor_decal/industrial/warning{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/visible/fuel, -/turf/simulated/floor/tiled/techfloor, -/area/thruster/d1port) -"aTZ" = ( -/obj/structure/sign/warning/airlock{ - dir = 1 - }, -/turf/simulated/wall/r_wall/hull, -/area/maintenance/firstdeck/foreport) -"aUa" = ( -/obj/machinery/door/airlock/external{ - frequency = 1379; - icon_state = "closed"; - id_tag = "bridgeport_outer"; - locked = 1; - name = "Engineering External Access" - }, -/obj/machinery/shield_diffuser, -/turf/simulated/floor/plating, -/area/maintenance/firstdeck/foreport) -"aUb" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/research{ - frequency = 1379; - id_tag = "xeno_airlock_exterior"; - locked = 1; - name = "Xenobiology External Airlock" - }, -/turf/simulated/floor/tiled/white, -/area/rnd/xenobiology/entry) -"aUc" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/disposalpipe/segment, -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/research{ - frequency = 1379; - id_tag = "xeno_airlock_exterior"; - locked = 1; - name = "Xenobiology External Airlock" - }, -/turf/simulated/floor/tiled/white, -/area/rnd/xenobiology/entry) -"aUd" = ( -/obj/machinery/atmospherics/pipe/simple/visible/fuel{ - dir = 5 - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/thruster/d1port) -"aUe" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/catwalk, -/obj/machinery/atmospherics/binary/pump/high_power/on{ - dir = 4; - target_pressure = 15000 - }, -/turf/simulated/floor/plating, -/area/thruster/d1port) -"aUf" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/catwalk, -/obj/machinery/atmospherics/pipe/simple/visible/fuel{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/thruster/d1port) -"aUg" = ( -/obj/machinery/atmospherics/pipe/simple/visible/fuel{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/door/airlock/hatch/maintenance, -/obj/machinery/door/firedoor, -/turf/simulated/floor/plating, -/area/thruster/d1port) -"aUh" = ( -/obj/machinery/atmospherics/pipe/simple/visible/fuel{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/techfloor, -/area/thruster/d1port) -"aUi" = ( -/obj/machinery/atmospherics/pipe/simple/visible/fuel{ - dir = 4 - }, -/obj/effect/floor_decal/industrial/warning/corner, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/techfloor, -/area/thruster/d1port) -"aUj" = ( -/obj/machinery/atmospherics/pipe/simple/visible/fuel{ - dir = 4 - }, -/obj/effect/floor_decal/industrial/warning, -/obj/structure/cable/green{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/machinery/light/small, -/turf/simulated/floor/tiled/techfloor, -/area/thruster/d1port) -"aUk" = ( -/obj/effect/floor_decal/industrial/warning, -/obj/machinery/atmospherics/pipe/simple/visible/fuel{ - dir = 4 - }, -/obj/machinery/meter, -/turf/simulated/floor/tiled/techfloor, -/area/thruster/d1port) -"aUm" = ( -/obj/effect/floor_decal/industrial/warning, -/obj/machinery/atmospherics/binary/passive_gate/on{ - dir = 4; - max_pressure_setting = 30000; - target_pressure = 30000; - use_power = 1 - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/light/small, -/turf/simulated/floor/tiled/techfloor, -/area/thruster/d1port) -"aUn" = ( -/obj/machinery/atmospherics/pipe/manifold4w/visible/fuel, -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 8 - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor, -/area/thruster/d1port) -"aUo" = ( -/obj/machinery/access_button{ - command = "cycle_exterior"; - frequency = 1379; - master_tag = "bridgeport_airlock"; - name = "exterior access button"; - pixel_x = 24; - pixel_y = 24; - req_access = list("ACCESS_MAINT") - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 1; - icon_state = "warning" - }, -/turf/simulated/floor/reinforced/airless, -/area/maintenance/firstdeck/foreport) -"aUp" = ( -/turf/simulated/wall/r_wall/hull, -/area/rnd/xenobiology/entry) -"aUq" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 9 - }, -/obj/structure/hygiene/sink{ - dir = 8; - pixel_x = -12; - pixel_y = 2 - }, -/obj/machinery/firealarm{ - dir = 8; - pixel_x = -24 - }, -/obj/machinery/light{ - dir = 1 - }, -/turf/simulated/floor/tiled/white, -/area/rnd/xenobiology/entry) -"aUr" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/rnd/xenobiology/entry) -"aUs" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/disposalpipe/segment, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/white, -/area/rnd/xenobiology/entry) -"aUt" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 5 - }, -/obj/structure/closet/emcloset, -/obj/machinery/power/apc{ - dir = 4; - name = "east bump"; - pixel_x = 24 - }, -/obj/structure/cable/green{ - d2 = 8; - icon_state = "0-8" - }, -/turf/simulated/floor/tiled/white, -/area/rnd/xenobiology/entry) -"aUu" = ( -/obj/machinery/computer/air_control{ - dir = 1; - input_tag = "d1ph_in"; - name = "Hydrogen Supply Control"; - output_tag = "d1ph_out"; - sensor_name = "Hydrogen Supply Tank"; - sensor_tag = "d1ph_sensor" - }, -/obj/effect/floor_decal/industrial/outline/orange, -/turf/simulated/floor/tiled/techfloor, -/area/thruster/d1port) -"aUv" = ( -/obj/machinery/computer/air_control{ - dir = 1; - input_tag = "d1po2_in"; - name = "Oxygen Supply Control"; - output_tag = "d1po2_out"; - sensor_name = "Oxygen Supply Tank"; - sensor_tag = "d1po2_sensor" - }, -/obj/effect/floor_decal/industrial/outline/blue, -/obj/machinery/alarm{ - dir = 1; - pixel_y = -24 - }, -/turf/simulated/floor/tiled/techfloor, -/area/thruster/d1port) -"aUy" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 8 - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/visible/fuel{ - dir = 8 - }, -/turf/simulated/floor/tiled/techfloor, -/area/thruster/d1port) -"aUz" = ( -/obj/machinery/shield_diffuser, -/turf/simulated/floor/reinforced/airless, -/area/maintenance/firstdeck/foreport) -"aUA" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 10 - }, -/obj/machinery/embedded_controller/radio/airlock/access_controller{ - dir = 1; - id_tag = "xeno_airlock_control"; - name = "Xenobiology Access Console"; - pixel_x = 8; - pixel_y = -24; - tag_exterior_door = "xeno_airlock_exterior"; - tag_interior_door = "xeno_airlock_interior" - }, -/obj/structure/hygiene/shower{ - dir = 4 - }, -/obj/machinery/alarm{ - dir = 4; - pixel_x = -22 - }, -/turf/simulated/floor/tiled/white, -/area/rnd/xenobiology/entry) -"aUB" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/rnd/xenobiology/entry) -"aUC" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/disposalpipe/segment, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/white, -/area/rnd/xenobiology/entry) -"aUD" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 6 - }, -/obj/structure/closet/l3closet/scientist, -/obj/structure/sign/warning/internals_required{ - pixel_x = 32 - }, -/obj/machinery/camera/network/research{ - c_tag = "Xenobiology - Entry"; - dir = 1 - }, -/turf/simulated/floor/tiled/white, -/area/rnd/xenobiology/entry) -"aUE" = ( -/turf/simulated/wall/r_wall/prepainted, -/area/rnd/xenobiology) -"aUF" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/research{ - frequency = 1379; - id_tag = "xeno_airlock_interior"; - locked = 1; - name = "Xenobiology Internal Airlock" - }, -/turf/simulated/floor/tiled/white, -/area/rnd/xenobiology) -"aUG" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/disposalpipe/segment, -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/research{ - frequency = 1379; - id_tag = "xeno_airlock_interior"; - locked = 1; - name = "Xenobiology Internal Airlock" - }, -/turf/simulated/floor/tiled/white, -/area/rnd/xenobiology) -"aUH" = ( -/obj/structure/sign/warning/deathsposal{ - icon_state = "space" - }, -/turf/simulated/wall/r_wall/hull, -/area/rnd/xenobiology) -"aUI" = ( -/obj/machinery/reagentgrinder, -/obj/item/reagent_containers/glass/beaker/large, -/obj/structure/cable/green{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/item/stack/material/phoron{ - amount = 5 - }, -/obj/machinery/light{ - dir = 1 - }, -/obj/machinery/newscaster{ - pixel_y = 32 - }, -/turf/simulated/floor/tiled/white/monotile, -/area/rnd/xenobiology) -"aUJ" = ( -/obj/structure/table/standard, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/item/storage/box/beakers{ - pixel_x = 2; - pixel_y = 2 - }, -/obj/item/storage/box/syringes, -/obj/structure/cable/green{ - d2 = 4; - icon_state = "0-4" - }, -/obj/machinery/firealarm{ - pixel_y = 24 - }, -/obj/machinery/computer/atmoscontrol/laptop{ - monitored_alarm_ids = list("xenobio1_alarm","xenobio2_alarm","xenobio3_alarm","xenobio4_alarm"); - req_access = list("ACCESS_RESEARCH") - }, -/turf/simulated/floor/tiled/white/monotile, -/area/rnd/xenobiology) -"aUP" = ( -/obj/machinery/smartfridge/secure/extract, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/item/device/radio/intercom{ - pixel_y = 23 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/simulated/floor/tiled/white/monotile, -/area/rnd/xenobiology) -"aUQ" = ( -/obj/machinery/optable{ - name = "Xenobiology Operating Table" - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/item/device/scanner/xenobio, -/obj/machinery/vending/wallmed2{ - pixel_y = 32; - req_access = newlist() - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/simulated/floor/tiled/white/monotile, -/area/rnd/xenobiology) -"aUR" = ( -/obj/machinery/computer/operating{ - name = "Xenobiology Operating Computer" - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/machinery/light{ - dir = 1 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/simulated/floor/tiled/white/monotile, -/area/rnd/xenobiology) -"aUS" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/simulated/wall/r_wall/hull, -/area/rnd/xenobiology) -"aUT" = ( -/obj/structure/disposalpipe/segment{ - dir = 4; - icon_state = "pipe-c" - }, -/turf/simulated/wall/r_wall/hull, -/area/rnd/xenobiology) -"aUU" = ( -/obj/structure/reagent_dispensers/watertank, -/obj/structure/cable/green{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/machinery/button/blast_door{ - id_tag = "xenobio1_vent"; - name = "Cell 1 Vent"; - pixel_x = -6; - pixel_y = 24 - }, -/obj/structure/disposalpipe/segment{ - dir = 2; - icon_state = "pipe-c" - }, -/obj/machinery/camera/network/research{ - c_tag = "Xenobiology - Fore" - }, -/obj/machinery/button/blast_door{ - id_tag = "xenobio1"; - name = "Containment Blast Doors"; - pixel_x = 6; - pixel_y = 24 - }, -/turf/simulated/floor/tiled/white/monotile, -/area/rnd/xenobiology) -"aUV" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/turf/simulated/floor/tiled/white, -/area/rnd/xenobiology) -"aUW" = ( -/turf/simulated/floor/tiled/white, -/area/rnd/xenobiology) -"aVa" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/turf/simulated/floor/tiled/white, -/area/rnd/xenobiology) -"aVb" = ( -/obj/structure/table/standard, -/obj/item/circular_saw, -/obj/item/scalpel{ - pixel_y = 12 - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/machinery/button/blast_door{ - id_tag = "xenobio4"; - name = "Containment Blast Doors"; - pixel_x = -6; - pixel_y = 24 - }, -/obj/structure/disposalpipe/segment{ - dir = 4; - icon_state = "pipe-c" - }, -/obj/machinery/camera/network/research{ - c_tag = "Xenobiology - Aft" - }, -/obj/machinery/button/blast_door{ - id_tag = "xenobio4_vent"; - name = "Cell 4 Vent"; - pixel_x = 6; - pixel_y = 24 - }, -/turf/simulated/floor/tiled/white/monotile, -/area/rnd/xenobiology) -"aVc" = ( -/obj/structure/disposalpipe/segment{ - dir = 2; - icon_state = "pipe-c" - }, -/turf/simulated/wall/r_wall/hull, -/area/rnd/xenobiology) -"aVe" = ( -/obj/structure/disposaloutlet, -/obj/structure/disposalpipe/trunk{ - dir = 1 - }, -/turf/simulated/floor/reinforced, -/area/rnd/xenobiology) -"aVf" = ( -/obj/machinery/alarm/monitor{ - alarm_id = "xenobio1_alarm"; - pixel_y = 24 - }, -/turf/simulated/floor/reinforced, -/area/rnd/xenobiology) -"aVg" = ( -/obj/structure/cable/green, -/obj/effect/wallframe_spawn/reinforced, -/obj/machinery/door/blast/regular{ - density = 0; - icon_state = "pdoor0"; - id_tag = "xenobio1"; - name = "Containment Blast Doors"; - opacity = 0 - }, -/obj/structure/disposalpipe/segment{ - dir = 1; - icon_state = "pipe-c" - }, -/turf/simulated/floor/plating, -/area/rnd/xenobiology) -"aVh" = ( -/obj/machinery/disposal, -/obj/structure/disposalpipe/trunk{ - dir = 8 - }, -/obj/structure/window/reinforced, -/turf/simulated/floor/tiled/white, -/area/rnd/xenobiology) -"aVi" = ( -/obj/machinery/atmospherics/portables_connector{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/rnd/xenobiology) -"aVn" = ( -/obj/machinery/atmospherics/portables_connector{ - dir = 8 - }, -/turf/simulated/floor/tiled/white, -/area/rnd/xenobiology) -"aVo" = ( -/obj/machinery/disposal, -/obj/structure/disposalpipe/trunk{ - dir = 4 - }, -/obj/structure/window/reinforced, -/turf/simulated/floor/tiled/white, -/area/rnd/xenobiology) -"aVp" = ( -/obj/structure/cable/green, -/obj/effect/wallframe_spawn/reinforced, -/obj/structure/disposalpipe/segment{ - dir = 8; - icon_state = "pipe-c" - }, -/obj/machinery/door/blast/regular{ - density = 0; - icon_state = "pdoor0"; - id_tag = "xenobio4"; - name = "Containment Blast Doors"; - opacity = 0 - }, -/turf/simulated/floor/plating, -/area/rnd/xenobiology) -"aVq" = ( -/obj/machinery/alarm/monitor{ - alarm_id = "xenobio4_alarm"; - pixel_y = 24 - }, -/turf/simulated/floor/reinforced, -/area/rnd/xenobiology) -"aVs" = ( -/obj/machinery/atmospherics/unary/vent_pump/high_volume{ - dir = 4 - }, -/obj/random_multi/single_item/boombox, -/turf/simulated/floor/reinforced, -/area/rnd/xenobiology) -"aVu" = ( -/obj/machinery/door/window/westright{ - name = "Containment Pen" - }, -/obj/machinery/door/blast/regular{ - density = 0; - icon_state = "pdoor0"; - id_tag = "xenobio1"; - name = "Containment Blast Doors"; - opacity = 0 - }, -/obj/effect/floor_decal/industrial/hatch/yellow, -/turf/simulated/floor/reinforced, -/area/rnd/xenobiology) -"aVv" = ( -/obj/machinery/door/window/eastleft{ - name = "Containment Pen" - }, -/turf/simulated/floor/tiled/white, -/area/rnd/xenobiology) -"aVC" = ( -/obj/machinery/door/window/westright{ - name = "Containment Pen" - }, -/turf/simulated/floor/tiled/white, -/area/rnd/xenobiology) -"aVD" = ( -/obj/machinery/door/window/eastleft{ - name = "Containment Pen" - }, -/obj/effect/floor_decal/industrial/hatch/yellow, -/obj/machinery/door/blast/regular{ - density = 0; - icon_state = "pdoor0"; - id_tag = "xenobio4"; - name = "Containment Blast Doors"; - opacity = 0 - }, -/turf/simulated/floor/reinforced, -/area/rnd/xenobiology) -"aVF" = ( -/obj/machinery/atmospherics/unary/vent_pump/high_volume{ - dir = 8 - }, -/turf/simulated/floor/reinforced, -/area/rnd/xenobiology) -"aVG" = ( -/obj/machinery/light, -/obj/machinery/atmospherics/unary/vent_scrubber{ - dir = 4 - }, -/turf/simulated/floor/reinforced, -/area/rnd/xenobiology) -"aVI" = ( -/obj/structure/cable/green{ - d2 = 4; - icon_state = "0-4" - }, -/obj/effect/wallframe_spawn/reinforced, -/obj/machinery/door/blast/regular{ - density = 0; - icon_state = "pdoor0"; - id_tag = "xenobio1"; - name = "Containment Blast Doors"; - opacity = 0 - }, -/obj/structure/disposalpipe/segment{ - dir = 4; - icon_state = "pipe-c" - }, -/turf/simulated/floor/plating, -/area/rnd/xenobiology) -"aVJ" = ( -/obj/machinery/door/blast/regular{ - density = 0; - icon_state = "pdoor0"; - id_tag = "xenobio2"; - name = "Containment Blast Doors"; - opacity = 0 - }, -/obj/structure/cable/green{ - d2 = 4; - icon_state = "0-4" - }, -/obj/effect/wallframe_spawn/reinforced, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/plating, -/area/rnd/xenobiology) -"aVK" = ( -/obj/machinery/door/blast/regular{ - density = 0; - icon_state = "pdoor0"; - id_tag = "xenobio2"; - name = "Containment Blast Doors"; - opacity = 0 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/cable/green{ - d2 = 4; - icon_state = "0-4" - }, -/obj/effect/wallframe_spawn/reinforced, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/rnd/xenobiology) -"aVM" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/window/reinforced{ - dir = 8 - }, -/obj/machinery/disposal, -/obj/machinery/alarm{ - dir = 1; - pixel_y = -25 - }, -/obj/structure/disposalpipe/trunk{ - dir = 8 - }, -/turf/simulated/floor/tiled/white/monotile, -/area/rnd/xenobiology) -"aVN" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/structure/window/reinforced{ - dir = 4 - }, -/obj/machinery/disposal, -/obj/machinery/power/apc{ - name = "south bump"; - pixel_y = -28 - }, -/obj/structure/cable/green, -/obj/structure/disposalpipe/trunk{ - dir = 4 - }, -/turf/simulated/floor/tiled/white/monotile, -/area/rnd/xenobiology) -"aVP" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/cable/green{ - d2 = 8; - icon_state = "0-8" - }, -/obj/machinery/door/blast/regular{ - density = 0; - icon_state = "pdoor0"; - id_tag = "xenobio3"; - name = "Containment Blast Doors"; - opacity = 0 - }, -/obj/effect/wallframe_spawn/reinforced, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/rnd/xenobiology) -"aVQ" = ( -/obj/structure/cable/green{ - d2 = 8; - icon_state = "0-8" - }, -/obj/machinery/door/blast/regular{ - density = 0; - icon_state = "pdoor0"; - id_tag = "xenobio4"; - name = "Containment Blast Doors"; - opacity = 0 - }, -/obj/effect/wallframe_spawn/reinforced, -/obj/structure/disposalpipe/segment{ - dir = 2; - icon_state = "pipe-c" - }, -/turf/simulated/floor/plating, -/area/rnd/xenobiology) -"aVS" = ( -/obj/machinery/light, -/obj/machinery/atmospherics/unary/vent_scrubber{ - dir = 8 - }, -/turf/simulated/floor/reinforced, -/area/rnd/xenobiology) -"aVU" = ( -/obj/structure/disposalpipe/trunk{ - dir = 1 - }, -/obj/structure/disposaloutlet{ - dir = 4 - }, -/turf/simulated/floor/reinforced, -/area/rnd/xenobiology) -"aVV" = ( -/obj/machinery/atmospherics/unary/vent_scrubber, -/turf/simulated/floor/reinforced, -/area/rnd/xenobiology) -"aVW" = ( -/obj/machinery/atmospherics/unary/vent_pump/high_volume, -/turf/simulated/floor/reinforced, -/area/rnd/xenobiology) -"aVX" = ( -/obj/machinery/door/blast/regular{ - density = 0; - icon_state = "pdoor0"; - id_tag = "xenobio2"; - name = "Containment Blast Doors"; - opacity = 0 - }, -/obj/structure/cable/green, -/obj/effect/wallframe_spawn/reinforced, -/turf/simulated/floor/plating, -/area/rnd/xenobiology) -"aWa" = ( -/obj/structure/cable/green, -/obj/machinery/door/blast/regular{ - density = 0; - icon_state = "pdoor0"; - id_tag = "xenobio3"; - name = "Containment Blast Doors"; - opacity = 0 - }, -/obj/effect/wallframe_spawn/reinforced, -/turf/simulated/floor/plating, -/area/rnd/xenobiology) -"aWb" = ( -/obj/structure/disposaloutlet{ - dir = 8 - }, -/obj/structure/disposalpipe/trunk{ - dir = 1 - }, -/turf/simulated/floor/reinforced, -/area/rnd/xenobiology) -"aWn" = ( -/obj/effect/shuttle_landmark/ninja/deck2{ - name = "1st Deck, Aft Port" - }, -/turf/space, -/area/space) -"aWo" = ( -/obj/effect/shuttle_landmark/torch/deck2/aquila{ - name = "1st Deck, Port" - }, -/turf/space, -/area/space) -"aXb" = ( -/obj/structure/sign/solgov{ - pixel_y = -32 - }, -/turf/space, -/area/space) -"aXh" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/universal, -/turf/simulated/floor/tiled/techfloor, -/area/crew_quarters/safe_room/firstdeck) -"aYj" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, -/obj/structure/disposalpipe/junction{ - dir = 8 - }, -/obj/effect/catwalk_plated, -/turf/simulated/floor/plating, -/area/hallway/primary/firstdeck/fore) -"bbb" = ( -/obj/machinery/atmospherics/binary/pump/high_power/on{ - target_pressure = 3000 - }, -/turf/simulated/wall/ocp_wall, -/area/thruster/d1starboard) -"bdb" = ( -/obj/machinery/atmospherics/pipe/simple/visible/fuel, -/obj/machinery/door/airlock/external, -/obj/machinery/door/blast/regular{ - id_tag = "d1starboardnacelle" - }, -/turf/simulated/floor/reinforced, -/area/thruster/d1starboard) -"bdo" = ( -/obj/effect/wallframe_spawn/reinforced/polarized{ - id = "processwindow" - }, -/obj/structure/cable/green{ - d2 = 2; - icon_state = "0-2" - }, -/obj/machinery/door/blast/regular{ - density = 0; - dir = 4; - icon_state = "pdoor0"; - id_tag = "Prison Gate"; - name = "Security Blast Door"; - opacity = 0 - }, -/turf/simulated/floor/plating, -/area/security/processing) -"bdz" = ( -/obj/machinery/air_sensor{ - id_tag = "d1po2_sensor" - }, -/turf/simulated/floor/reinforced/oxygen, -/area/thruster/d1port) -"bdL" = ( -/obj/machinery/door/airlock/maintenance{ - name = "Infirmary Maintenance Access" - }, -/obj/machinery/door/firedoor, -/turf/simulated/floor/tiled/steel_ridged, -/area/medical/foyer/storeroom) -"bhb" = ( -/obj/machinery/door/blast/regular{ - id_tag = "cChamber1sV"; - name = "Chamber Vent" - }, -/turf/simulated/floor/reinforced, -/area/thruster/d1starboard) -"bhy" = ( -/obj/effect/floor_decal/corner/paleblue{ - dir = 5 - }, -/obj/structure/iv_drip, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/light{ - dir = 1 - }, -/obj/item/device/radio/intercom/department/medbay{ - pixel_y = 23 - }, -/turf/simulated/floor/tiled/white, -/area/medical/foyer) -"bhL" = ( -/obj/structure/hygiene/toilet{ - dir = 1 - }, -/obj/effect/floor_decal/corner/red/diagonal, -/obj/machinery/light/small{ - dir = 4; - icon_state = "bulb1" - }, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 8 - }, -/turf/simulated/floor/tiled/freezer, -/area/security/brig) -"bii" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/dark, -/area/security/storage) -"biu" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/disposalpipe/segment, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/catwalk, -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 1; - icon_state = "warningcorner" - }, -/turf/simulated/floor/plating, -/area/maintenance/firstdeck/centralstarboard) -"bjI" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/alarm{ - dir = 1; - pixel_y = -22 - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/firstdeck/centralstarboard) -"bkb" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/white, -/area/assembly/robotics/laboratory) -"bkG" = ( -/obj/structure/table/rack{ - dir = 8 - }, -/obj/item/storage/box/mousetraps, -/obj/item/storage/box/lights/mixed, -/obj/item/hand_labeler, -/obj/item/stack/package_wrap/twenty_five, -/obj/item/reagent_containers/spray/cleaner{ - pixel_x = -5 - }, -/obj/effect/floor_decal/corner/paleblue/mono, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/structure/sign/warning/nosmoking_1{ - pixel_y = 24 - }, -/turf/simulated/floor/tiled/white/monotile, -/area/medical/equipstorage) -"bmb" = ( -/obj/effect/wallframe_spawn/reinforced/no_grille, -/turf/simulated/floor/plating, -/area/rnd/xenobiology/xenoflora) -"bmB" = ( -/obj/effect/floor_decal/corner/blue{ - dir = 8 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/firstdeck/fore) -"bmO" = ( -/turf/simulated/floor/tiled, -/area/security/detectives_office) -"bnG" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/firstdeck/foreport) -"bob" = ( -/obj/effect/catwalk_plated, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/firealarm{ - pixel_y = 24 - }, -/turf/simulated/floor/plating, -/area/security/wing) -"bpb" = ( -/obj/effect/catwalk_plated, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 1 - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/turf/simulated/floor/plating, -/area/security/wing) -"bpA" = ( -/obj/structure/cable/green{ - d2 = 2; - icon_state = "0-2" - }, -/obj/effect/wallframe_spawn/reinforced/polarized{ - id = "interviewwindow" - }, -/turf/simulated/floor/plating, -/area/security/questioning) -"bpG" = ( -/obj/machinery/door/blast/shutters{ - density = 0; - dir = 4; - icon_state = "shutter0"; - id_tag = "concheckwindow"; - name = "RnD Checkpoint Shutters"; - opacity = 0 - }, -/obj/effect/wallframe_spawn/reinforced/polarized{ - id = "rndpost" - }, -/obj/structure/cable/green{ - d2 = 8; - icon_state = "0-8" - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/turf/simulated/floor/plating, -/area/rnd/rnd_sec) -"bqb" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/door/blast/regular{ - dir = 4; - id_tag = "selfdestruct"; - name = "Self Destruct Access Blast Door" - }, -/obj/machinery/button/blast_door{ - id_tag = "selfdestruct"; - name = "Self Destruct Access Blast Door Control"; - pixel_y = 32 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/security/nuke_storage) -"bqv" = ( -/obj/machinery/atmospherics/pipe/simple/visible/fuel{ - dir = 4 - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 1 - }, -/turf/simulated/floor/tiled/techfloor, -/area/thruster/d1starboard) -"brb" = ( -/obj/structure/closet/crate, -/obj/random/tank, -/obj/machinery/light{ - dir = 8 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/teleporter/firstdeck) -"brj" = ( -/obj/effect/catwalk_plated, -/obj/structure/disposalpipe/segment, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/security/wing) -"brU" = ( -/obj/machinery/door/airlock/medical{ - autoset_access = 0; - name = "Robotics Surgery"; - req_access = list(list("ACCESS_MEDICAL","ACCESS_ROBOTICS")) - }, -/obj/machinery/holosign/surgery{ - dir = 4; - id_tag = "roboticlab_or" - }, -/obj/effect/floor_decal/industrial/hatch/blue, -/turf/simulated/floor/tiled/white/monotile, -/area/assembly/robotics/surgery) -"bta" = ( -/obj/effect/floor_decal/corner/research{ - dir = 1 - }, -/obj/machinery/camera/network/research{ - c_tag = "Research - Port Hallway"; - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/rnd/research) -"btb" = ( -/obj/machinery/door/blast/regular{ - id_tag = "cChamber1pV"; - name = "Chamber Vent" - }, -/turf/simulated/floor/reinforced, -/area/thruster/d1port) -"btE" = ( -/turf/simulated/floor/tiled/dark, -/area/security/questioning) -"bvI" = ( -/obj/machinery/atmospherics/pipe/simple/visible/fuel{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/thruster/d1port) -"bvY" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 8 - }, -/turf/simulated/floor/tiled/white, -/area/assembly/robotics/surgery) -"bxz" = ( -/obj/effect/floor_decal/corner/blue{ - dir = 6 - }, -/turf/simulated/floor/tiled/dark, -/area/command/conference) -"bxK" = ( -/obj/structure/table/standard, -/obj/item/storage/toolbox/mechanical{ - pixel_y = 8 - }, -/obj/item/device/mmi, -/obj/item/device/mmi, -/obj/item/storage/firstaid/surgery, -/obj/effect/floor_decal/floordetail/edgedrain{ - dir = 8 - }, -/obj/effect/floor_decal/corner/paleblue{ - dir = 6 - }, -/obj/machinery/body_scan_display{ - pixel_y = 24 - }, -/obj/machinery/firealarm{ - dir = 8; - pixel_x = -24 - }, -/turf/simulated/floor/tiled/white/monotile, -/area/assembly/robotics/surgery) -"byb" = ( -/obj/machinery/atmospherics/binary/pump/high_power/on{ - dir = 1; - target_pressure = 3000 - }, -/turf/simulated/wall/ocp_wall, -/area/thruster/d1port) -"bzb" = ( -/obj/structure/sign/warning/fire, -/turf/simulated/wall/ocp_wall, -/area/thruster/d1port) -"bAb" = ( -/obj/machinery/atmospherics/pipe/simple/visible/fuel, -/obj/machinery/door/airlock/external, -/obj/machinery/door/blast/regular{ - id_tag = "d1portnacelle" - }, -/turf/simulated/floor/reinforced, -/area/thruster/d1port) -"bBb" = ( -/obj/structure/sign/solgov{ - pixel_y = 32 - }, -/turf/space, -/area/space) -"bBm" = ( -/obj/effect/floor_decal/industrial/warning/fulltile, -/obj/machinery/light{ - dir = 1 - }, -/turf/simulated/floor/tiled/steel_grid, -/area/hallway/primary/firstdeck/aft) -"bBt" = ( -/obj/machinery/space_heater, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/firstdeck/aftstarboard) -"bBv" = ( -/obj/effect/floor_decal/techfloor, -/obj/effect/floor_decal/corner_techfloor_grid{ - dir = 4 - }, -/obj/effect/floor_decal/techfloor/corner{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark, -/area/command/armoury) -"bCb" = ( -/obj/machinery/door/blast/regular{ - dir = 4; - id_tag = "xenobio1_vent"; - name = "Chamber Vent" - }, -/turf/simulated/floor/reinforced, -/area/rnd/xenobiology) -"bCX" = ( -/obj/structure/table/steel, -/obj/item/storage/box/cdeathalarm_kit, -/obj/item/melee/telebaton, -/obj/item/melee/telebaton, -/obj/item/melee/telebaton, -/obj/item/device/flash, -/obj/item/device/flash, -/obj/item/device/flash, -/obj/item/device/flash, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/floor/tiled/techfloor/grid, -/area/command/armoury/tactical) -"bDb" = ( -/obj/machinery/door/blast/regular{ - dir = 4; - id_tag = "xenobio4_vent"; - name = "Chamber Vent" - }, -/turf/simulated/floor/reinforced, -/area/rnd/xenobiology) -"bDK" = ( -/turf/simulated/wall/r_wall/hull, -/area/maintenance/firstdeck/aftport) -"bEb" = ( -/obj/machinery/door/blast/regular{ - id_tag = "xenobio2_vent"; - name = "Chamber Vent" - }, -/turf/simulated/floor/reinforced, -/area/rnd/xenobiology) -"bEQ" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/catwalk_plated, -/obj/structure/disposalpipe/segment{ - dir = 8; - icon_state = "pipe-c" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, -/obj/structure/cable/green{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/hallway/primary/firstdeck/aft) -"bFb" = ( -/obj/machinery/door/blast/regular{ - id_tag = "xenobio3_vent"; - name = "Chamber Vent" - }, -/turf/simulated/floor/reinforced, -/area/rnd/xenobiology) -"bGb" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/decal/cleanable/dirt, -/obj/structure/catwalk, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/visible/fuel{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/maintenance/firstdeck/aftstarboard) -"bGZ" = ( -/obj/effect/floor_decal/sign/or1, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/white, -/area/medical/sleeper) -"bHb" = ( -/obj/effect/shuttle_landmark/escape_pod/start/pod12, -/obj/effect/wallframe_spawn/reinforced/titanium, -/turf/simulated/floor/reinforced/airless, -/area/shuttle/escape_pod12/station) -"bHp" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/effect/catwalk_plated, -/obj/structure/cable/green{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/turf/simulated/floor/plating, -/area/hallway/primary/firstdeck/center) -"bIb" = ( -/obj/effect/shuttle_landmark/escape_pod/start/pod13, -/obj/effect/wallframe_spawn/reinforced/titanium, -/turf/simulated/floor/reinforced/airless, -/area/shuttle/escape_pod13/station) -"bLb" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/obj/structure/disposalpipe/segment{ - dir = 1; - icon_state = "pipe-c" - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/structure/cable/green{ - d2 = 4; - icon_state = "0-4" - }, -/obj/machinery/power/apc{ - dir = 8; - name = "west bump"; - pixel_x = -24 - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/firstdeck/forestarboard) -"bLJ" = ( -/obj/item/paper_bin, -/obj/item/pen/blue, -/obj/item/pen/green, -/obj/item/pen/red, -/obj/item/pen/crayon, -/obj/item/pen, -/obj/item/sticky_pad/random, -/obj/effect/floor_decal/corner/paleblue/mono, -/obj/structure/table/glass, -/turf/simulated/floor/tiled/white/monotile, -/area/medical/medpaperworkoffice) -"bMb" = ( -/turf/simulated/wall/prepainted, -/area/engineering/hardstorage/aux) -"bMB" = ( -/obj/effect/floor_decal/corner_techfloor_grid{ - dir = 6 - }, -/obj/effect/floor_decal/techfloor/corner{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark, -/area/command/armoury) -"bNb" = ( -/obj/machinery/status_display{ - pixel_x = 32 - }, -/obj/structure/bed/chair/shuttle{ - dir = 1 - }, -/obj/machinery/light/small{ - dir = 8 - }, -/turf/simulated/floor/plating, -/area/shuttle/escape_pod12/station) -"bNL" = ( -/obj/effect/floor_decal/corner/red{ - dir = 1 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/firstdeck/fore) -"bOb" = ( -/obj/machinery/status_display{ - pixel_x = 32 - }, -/obj/structure/bed/chair/shuttle{ - dir = 1 - }, -/obj/machinery/light/small{ - dir = 8 - }, -/turf/simulated/floor/plating, -/area/shuttle/escape_pod13/station) -"bOZ" = ( -/obj/machinery/firealarm{ - pixel_y = 24 - }, -/obj/effect/floor_decal/corner/research{ - dir = 1 - }, -/turf/simulated/floor/tiled/white, -/area/rnd/research) -"bPR" = ( -/obj/structure/table/rack, -/obj/random/maintenance/solgov, -/obj/effect/decal/cleanable/cobweb2, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/firstdeck/centralport) -"bQb" = ( -/obj/item/device/radio/intercom{ - dir = 8; - pixel_x = 21 - }, -/obj/machinery/embedded_controller/radio/simple_docking_controller/escape_pod{ - dir = 4; - frequency = 1380; - id_tag = "escape_pod_12"; - name = "escape pod seven controller"; - pixel_x = -24; - tag_door = "escape_pod_12_hatch" - }, -/obj/structure/bed/chair/shuttle{ - dir = 1 - }, -/turf/simulated/floor/plating, -/area/shuttle/escape_pod12/station) -"bRb" = ( -/obj/item/device/radio/intercom{ - dir = 8; - pixel_x = 21 - }, -/obj/machinery/embedded_controller/radio/simple_docking_controller/escape_pod{ - dir = 4; - frequency = 1380; - id_tag = "escape_pod_13"; - name = "escape pod eight controller"; - pixel_x = -24; - tag_door = "escape_pod_13_hatch" - }, -/obj/structure/bed/chair/shuttle{ - dir = 1 - }, -/turf/simulated/floor/plating, -/area/shuttle/escape_pod13/station) -"bSz" = ( -/obj/effect/wallframe_spawn/reinforced, -/obj/machinery/door/blast/regular{ - density = 0; - icon_state = "pdoor0"; - id_tag = "Secure Gate"; - name = "Security Blast Door"; - opacity = 0 - }, -/obj/structure/cable/green{ - d2 = 8; - icon_state = "0-8" - }, -/turf/simulated/floor/plating, -/area/security/brig) -"bSD" = ( -/obj/structure/table/standard, -/obj/machinery/newscaster{ - pixel_x = -32 - }, -/obj/effect/floor_decal/corner/research/mono, -/turf/simulated/floor/tiled/white/monotile, -/area/rnd/office) -"bTb" = ( -/obj/item/device/radio/intercom{ - dir = 4; - pixel_x = -21 - }, -/obj/machinery/light/small{ - dir = 4 - }, -/obj/machinery/embedded_controller/radio/simple_docking_controller/escape_pod{ - dir = 8; - frequency = 1380; - id_tag = "escape_pod_15"; - name = "escape pod ten controller"; - pixel_x = 24; - tag_door = "escape_pod_15_hatch" - }, -/obj/structure/bed/chair/shuttle, -/turf/simulated/floor/plating, -/area/shuttle/escape_pod15/station) -"bUb" = ( -/obj/item/device/radio/intercom{ - dir = 4; - pixel_x = -21 - }, -/obj/machinery/light/small{ - dir = 4 - }, -/obj/machinery/embedded_controller/radio/simple_docking_controller/escape_pod{ - dir = 8; - frequency = 1380; - id_tag = "escape_pod_16"; - name = "escape pod eleven controller"; - pixel_x = 24; - tag_door = "escape_pod_16_hatch" - }, -/obj/structure/bed/chair/shuttle, -/turf/simulated/floor/plating, -/area/shuttle/escape_pod16/station) -"bUZ" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/catwalk, -/obj/effect/floor_decal/industrial/warning{ - dir = 1 - }, -/obj/effect/landmark{ - name = "xeno_spawn"; - pixel_x = -1 - }, -/turf/simulated/floor/plating, -/area/maintenance/firstdeck/aftport) -"bVb" = ( -/obj/item/device/radio/intercom{ - dir = 4; - pixel_x = -21 - }, -/obj/machinery/light/small{ - dir = 4 - }, -/obj/machinery/embedded_controller/radio/simple_docking_controller/escape_pod{ - dir = 8; - frequency = 1380; - id_tag = "escape_pod_17"; - name = "escape pod twelve controller"; - pixel_x = 24; - tag_door = "escape_pod_17_hatch" - }, -/obj/structure/bed/chair/shuttle, -/turf/simulated/floor/plating, -/area/shuttle/escape_pod17/station) -"bWb" = ( -/obj/machinery/status_display{ - pixel_x = -32 - }, -/obj/machinery/computer/cryopod{ - pixel_x = 32 - }, -/obj/structure/bed/chair/shuttle, -/turf/simulated/floor/plating, -/area/shuttle/escape_pod15/station) -"bWw" = ( -/obj/machinery/power/apc{ - dir = 4; - name = "east bump"; - pixel_x = 24 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable/green{ - d2 = 2; - icon_state = "0-2" - }, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/tiled, -/area/security/detectives_office) -"bWA" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/obj/effect/floor_decal/corner/paleblue{ - dir = 5 - }, -/obj/machinery/light{ - dir = 1 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/firstdeck/aft) -"bXb" = ( -/obj/machinery/status_display{ - pixel_x = -32 - }, -/obj/machinery/computer/cryopod{ - pixel_x = 32 - }, -/obj/structure/bed/chair/shuttle, -/turf/simulated/floor/plating, -/area/shuttle/escape_pod16/station) -"bYb" = ( -/obj/machinery/status_display{ - pixel_x = -32 - }, -/obj/machinery/computer/cryopod{ - pixel_x = 32 - }, -/obj/structure/bed/chair/shuttle, -/turf/simulated/floor/plating, -/area/shuttle/escape_pod17/station) -"bYj" = ( -/obj/machinery/button/blast_door{ - id_tag = "armory_entrylock"; - name = "Armory Entry Lockdown Shutter Control"; - pixel_x = 24; - pixel_y = 6 - }, -/obj/machinery/button/blast_door{ - id_tag = "armory_lock"; - name = "Armory Lockdown Shutter Control"; - pixel_x = 24; - pixel_y = -6 - }, -/obj/machinery/atmospherics/unary/vent_pump/on, -/obj/machinery/button/blast_door{ - id_tag = "operation_hallway_shutters"; - name = "Hallway Checkpoint Shutters"; - pixel_x = 35; - pixel_y = 6 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/command/armoury/access) -"bZb" = ( -/obj/machinery/cryopod{ - dir = 1 - }, -/turf/simulated/floor/plating, -/area/shuttle/escape_pod15/station) -"cab" = ( -/obj/machinery/cryopod{ - dir = 1 - }, -/turf/simulated/floor/plating, -/area/shuttle/escape_pod16/station) -"cap" = ( -/obj/effect/floor_decal/industrial/outline/grey, -/obj/machinery/portable_atmospherics/powered/pump/filled, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/firstdeck/centralstarboard) -"cbb" = ( -/obj/machinery/cryopod{ - dir = 1 - }, -/turf/simulated/floor/plating, -/area/shuttle/escape_pod17/station) -"cbj" = ( -/obj/effect/floor_decal/corner/paleblue/mono, -/obj/machinery/computer/modular/preset/medical, -/obj/machinery/alarm{ - pixel_y = 24 - }, -/obj/machinery/firealarm{ - dir = 4; - pixel_x = 21 - }, -/turf/simulated/floor/tiled/white/monotile, -/area/medical/exam_room) -"ccb" = ( -/obj/effect/shuttle_landmark/escape_pod/start/pod15, -/obj/effect/wallframe_spawn/reinforced/titanium, -/turf/simulated/floor/plating, -/area/shuttle/escape_pod15/station) -"cdb" = ( -/obj/effect/shuttle_landmark/escape_pod/start/pod16, -/obj/effect/wallframe_spawn/reinforced/titanium, -/turf/simulated/floor/plating, -/area/shuttle/escape_pod16/station) -"ceb" = ( -/obj/effect/shuttle_landmark/escape_pod/start/pod17, -/obj/effect/wallframe_spawn/reinforced/titanium, -/turf/simulated/floor/plating, -/area/shuttle/escape_pod17/station) -"cfn" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/light_switch{ - pixel_y = -24 - }, -/turf/simulated/floor/tiled/dark, -/area/security/evidence) -"cgu" = ( -/obj/effect/landmark{ - name = "lightsout" - }, -/obj/effect/floor_decal/corner/paleblue{ - dir = 10 - }, -/obj/machinery/light, -/turf/simulated/floor/tiled, -/area/hallway/primary/firstdeck/aft) -"chb" = ( -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/firstdeck/aftstarboard) -"cib" = ( -/obj/structure/cable/green{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/firstdeck/centralstarboard) -"cix" = ( -/obj/effect/floor_decal/corner/red{ - dir = 9 - }, -/obj/machinery/vending/wallmed1{ - dir = 4; - name = "Emergency NanoMed"; - pixel_x = -30 - }, -/turf/simulated/floor/tiled, -/area/security/wing) -"cjb" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/firstdeck/centralstarboard) -"ckb" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/firstdeck/aftstarboard) -"cmY" = ( -/obj/effect/floor_decal/corner/paleblue{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/turf/simulated/floor/tiled/white, -/area/medical/equipstorage) -"cob" = ( -/obj/effect/floor_decal/industrial/outline/grey, -/obj/random_multi/single_item/skelestand/maint, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/firstdeck/aftstarboard) -"cor" = ( -/obj/effect/floor_decal/corner/red{ - dir = 6 - }, -/obj/item/stool/padded, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled, -/area/security/locker) -"cqb" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/table/rack, -/obj/random/firstaid, -/obj/item/storage/box/bodybags, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/firstdeck/aftstarboard) -"csb" = ( -/obj/structure/bed/padded, -/obj/item/bedsheet/blue, -/turf/simulated/floor/carpet/orange, -/area/crew_quarters/safe_room/firstdeck) -"csy" = ( -/obj/structure/sign/warning/secure_area{ - dir = 1 - }, -/turf/simulated/wall/r_wall/prepainted, -/area/security/armoury) -"ctb" = ( -/obj/effect/floor_decal/floordetail/edgedrain{ - dir = 8 - }, -/obj/effect/floor_decal/corner/paleblue{ - dir = 6 - }, -/obj/structure/hygiene/sink{ - dir = 8; - pixel_x = -12; - pixel_y = 2 - }, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 4 - }, -/obj/item/device/radio/intercom/department/medbay{ - dir = 4; - pixel_x = -24 - }, -/turf/simulated/floor/tiled/white, -/area/medical/surgery2) -"cub" = ( -/obj/effect/floor_decal/techfloor{ - dir = 9 - }, -/obj/structure/bed/chair/padded/blue, -/obj/machinery/newscaster{ - pixel_y = 32 - }, -/obj/machinery/button/alternate/door/bolts{ - id_tag = "medsafe_fore"; - name = "safe room door-control"; - pixel_x = -25 - }, -/turf/simulated/floor/tiled/techfloor, -/area/crew_quarters/safe_room/medical) -"cur" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/wall/prepainted, -/area/security/brig) -"cvb" = ( -/obj/effect/floor_decal/techfloor{ - dir = 1 - }, -/obj/structure/bed/chair/padded/blue, -/obj/item/modular_computer/telescreen/preset/medical{ - pixel_y = 32 - }, -/turf/simulated/floor/tiled/techfloor, -/area/crew_quarters/safe_room/medical) -"cwb" = ( -/obj/effect/floor_decal/techfloor{ - dir = 1 - }, -/obj/structure/bed/chair/padded/blue, -/obj/structure/closet/medical_wall/filled{ - pixel_y = 32 - }, -/obj/random/firstaid, -/obj/random/firstaid, -/obj/random/medical, -/obj/item/reagent_containers/food/snacks/proteinbar, -/turf/simulated/floor/tiled/techfloor, -/area/crew_quarters/safe_room/medical) -"cwQ" = ( -/obj/machinery/computer/modular/preset/security{ - dir = 4; - icon_state = "console" - }, -/obj/machinery/button/alternate/door{ - desc = "A remote control switch for the brig foyer."; - id_tag = "secprocessing"; - name = "Security Processing Entry Control"; - pixel_x = 5; - pixel_y = 34 - }, -/obj/machinery/button/blast_door{ - id_tag = "Prison Gate"; - name = "Security Wing Entry Lockdown Control"; - pixel_x = 6; - pixel_y = 24 - }, -/obj/machinery/button/blast_door{ - id_tag = "bo_pshutters"; - name = "Privacy Shutters"; - pixel_x = -6; - pixel_y = 24 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/button/alternate/door{ - desc = "A remote control switch for the brig foyer."; - id_tag = "BrigFoyer"; - name = "Security Wing Entry Control"; - pixel_x = -5; - pixel_y = 34 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/security/bo) -"cxb" = ( -/obj/effect/floor_decal/techfloor{ - dir = 4 - }, -/obj/effect/floor_decal/corner/yellow{ - dir = 8 - }, -/obj/machinery/computer/shuttle_control/lift/medical, -/turf/simulated/floor/tiled/steel_grid, -/area/turbolift/medical_lift) -"cxk" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/security/storage) -"cyb" = ( -/obj/effect/floor_decal/techfloor{ - dir = 1 - }, -/obj/random_multi/single_item/boombox, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 - }, -/obj/structure/sign/thera{ - pixel_y = 32 - }, -/turf/simulated/floor/tiled/techfloor, -/area/crew_quarters/safe_room/medical) -"czb" = ( -/obj/effect/floor_decal/techfloor{ - dir = 5 - }, -/obj/machinery/atmospherics/binary/pump/on{ - dir = 4; - target_pressure = 200 - }, -/obj/item/device/radio/intercom{ - pixel_y = 23 - }, -/turf/simulated/floor/tiled/techfloor, -/area/crew_quarters/safe_room/medical) -"czN" = ( -/obj/effect/floor_decal/industrial/outline/grey, -/obj/structure/reagent_dispensers/watertank, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/firstdeck/centralport) -"cAb" = ( -/obj/machinery/atmospherics/pipe/manifold/visible{ - dir = 1 - }, -/obj/machinery/meter, -/obj/structure/fireaxecabinet{ - pixel_y = 32 - }, -/obj/random/maintenance/solgov, -/turf/simulated/floor/tiled/techfloor/grid, -/area/crew_quarters/safe_room/medical) -"cAh" = ( -/obj/effect/floor_decal/techfloor{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark, -/area/command/armoury) -"cAO" = ( -/obj/structure/table/standard, -/obj/random/clipboard, -/obj/effect/floor_decal/corner/research/mono, -/obj/item/pen/crayon/yellow{ - desc = "A colourful crayon. Please refrain from eating it or putting it in your nose. This one is labeled 'Canary Yellow.'" - }, -/obj/item/hand_labeler, -/obj/item/stack/package_wrap/twenty_five, -/obj/item/device/destTagger, -/turf/simulated/floor/tiled/white/monotile, -/area/rnd/office) -"cBU" = ( -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 1 - }, -/obj/structure/closet/medical_wall{ - pixel_y = 32 - }, -/obj/random/firstaid, -/obj/random/medical, -/obj/random/medical, -/obj/random/medical, -/obj/random/medical, -/obj/random/medical, -/obj/random/medical, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/firstdeck/centralstarboard) -"cCb" = ( -/obj/structure/ladder, -/obj/effect/floor_decal/industrial/hatch/yellow, -/obj/effect/catwalk_plated, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/firstdeck/centralstarboard) -"cDb" = ( -/obj/effect/floor_decal/techfloor/orange, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/techfloor, -/area/crew_quarters/safe_room/medical) -"cDO" = ( -/obj/structure/table/steel, -/obj/item/storage/box/evidence, -/obj/machinery/camera/network/security{ - c_tag = "Security Wing - Processing"; - dir = 4 - }, -/obj/item/device/radio/intercom/department/security{ - dir = 4; - pixel_x = -21 - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/machinery/atmospherics/unary/vent_pump/on{ - level = 2 - }, -/obj/effect/floor_decal/corner/red{ - dir = 9 - }, -/obj/item/screwdriver, -/turf/simulated/floor/tiled/monotile, -/area/security/processing) -"cEb" = ( -/obj/machinery/light{ - dir = 8 - }, -/obj/machinery/atmospherics/unary/freezer{ - dir = 4; - icon_state = "freezer"; - set_temperature = 80; - use_power = 1 - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled/dark/monotile, -/area/medical/foyer/storeroom) -"cFb" = ( -/obj/machinery/hologram/holopad, -/turf/simulated/floor/tiled/techfloor, -/area/crew_quarters/safe_room/medical) -"cGd" = ( -/obj/effect/floor_decal/techfloor{ - dir = 1 - }, -/turf/simulated/floor/tiled/dark, -/area/medical/foyer/storeroom) -"cGB" = ( -/obj/effect/floor_decal/corner/red{ - dir = 8 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/firstdeck/fore) -"cHb" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 1 - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/turf/simulated/floor/tiled/techfloor, -/area/crew_quarters/safe_room/medical) -"cHj" = ( -/turf/simulated/wall/prepainted, -/area/security/bo) -"cHm" = ( -/obj/machinery/air_sensor{ - id_tag = "d1sh_sensor" - }, -/turf/simulated/floor/reinforced/hydrogen, -/area/thruster/d1starboard) -"cIb" = ( -/obj/effect/floor_decal/techfloor{ - dir = 8 - }, -/obj/effect/floor_decal/corner/yellow, -/turf/simulated/floor/tiled/steel_grid, -/area/turbolift/medical_lift) -"cKO" = ( -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/tiled, -/area/security/wing) -"cLb" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/structure/catwalk, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/turf/simulated/floor/plating, -/area/maintenance/firstdeck/centralstarboard) -"cMb" = ( -/obj/effect/floor_decal/techfloor/orange{ - dir = 8 - }, -/turf/simulated/floor/tiled/techfloor, -/area/crew_quarters/safe_room/medical) -"cNb" = ( -/obj/item/usedcryobag, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor, -/area/crew_quarters/safe_room/medical) -"cNn" = ( -/obj/machinery/door/window/northright{ - dir = 8; - name = "Forensic Lab" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/security/detectives_office) -"cOb" = ( -/obj/machinery/vitals_monitor, -/obj/effect/floor_decal/floordetail/edgedrain{ - dir = 9 - }, -/obj/effect/floor_decal/corner/paleblue, -/obj/machinery/alarm{ - dir = 4; - pixel_x = -21 - }, -/turf/simulated/floor/tiled/white, -/area/medical/surgery2) -"cOH" = ( -/obj/machinery/power/apc{ - dir = 4; - name = "east bump"; - pixel_x = 24 - }, -/obj/structure/cable/green{ - d2 = 8; - icon_state = "0-8" - }, -/turf/simulated/floor/tiled/dark, -/area/command/armoury/access) -"cPY" = ( -/obj/structure/window/reinforced{ - dir = 8 - }, -/turf/simulated/floor/tiled/white, -/area/security/detectives_office) -"cQb" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 8 - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/turf/simulated/floor/tiled/techfloor, -/area/crew_quarters/safe_room/medical) -"cQo" = ( -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/firstdeck/centralport) -"cRb" = ( -/obj/machinery/atmospherics/pipe/manifold/visible, -/turf/simulated/floor/tiled/techfloor/grid, -/area/crew_quarters/safe_room/medical) -"cSb" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/vault/bolted{ - autoset_access = 0; - id_tag = "medsafe_aft"; - name = "Emergency Exit" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/maintenance/firstdeck/aftstarboard) -"cSj" = ( -/obj/effect/floor_decal/corner/blue{ - dir = 9 - }, -/obj/structure/bed/chair/padded/blue, -/turf/simulated/floor/tiled/dark, -/area/command/conference) -"cTb" = ( -/obj/structure/table/standard, -/obj/item/storage/firstaid/surgery, -/obj/effect/floor_decal/floordetail/edgedrain{ - dir = 1 - }, -/obj/effect/floor_decal/corner/paleblue{ - dir = 10 - }, -/obj/machinery/light{ - dir = 1 - }, -/turf/simulated/floor/tiled/white, -/area/medical/surgery2) -"cUb" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/glass/research{ - name = "Fabricator Laboratory" - }, -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/white/monotile, -/area/rnd/development) -"cVb" = ( -/obj/structure/ladder, -/obj/effect/floor_decal/industrial/hatch/yellow, -/obj/effect/catwalk_plated, -/turf/simulated/floor/tiled/dark/monotile, -/area/medical/foyer/storeroom) -"cWb" = ( -/obj/structure/closet/wardrobe/medic_torch, -/obj/effect/floor_decal/industrial/outline/grey, -/obj/machinery/alarm{ - pixel_y = 24 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/medical/foyer/storeroom) -"cWR" = ( -/obj/machinery/camera/network/security{ - c_tag = "Security Wing - Interview Room 1"; - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/turf/simulated/floor/tiled/dark, -/area/security/questioning) -"cXb" = ( -/obj/structure/closet/l3closet/general, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/floor/tiled/dark/monotile, -/area/medical/foyer/storeroom) -"cXj" = ( -/obj/structure/cable/green{ - d2 = 2; - icon_state = "0-2" - }, -/obj/effect/wallframe_spawn/reinforced, -/obj/machinery/door/blast/regular{ - density = 0; - dir = 4; - icon_state = "pdoor0"; - id_tag = "Prison Gate"; - name = "Security Blast Door"; - opacity = 0 - }, -/turf/simulated/floor/plating, -/area/security/wing) -"cYe" = ( -/obj/machinery/atmospherics/unary/vent_pump/high_volume{ - controlled = 0; - dir = 1; - internal_pressure_bound = 35000; - internal_pressure_bound_default = 35000; - pressure_checks = 2; - pressure_checks_default = 2; - use_power = 1 - }, -/turf/simulated/floor/airless, -/area/thruster/d1port) -"cYB" = ( -/obj/structure/dispenser, -/obj/effect/floor_decal/industrial/outline/grey, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/techfloor/grid, -/area/command/armoury) -"cZb" = ( -/obj/structure/hygiene/toilet{ - dir = 4 - }, -/obj/machinery/light/small{ - dir = 1 - }, -/turf/simulated/floor/tiled/freezer, -/area/medical/washroom) -"cZd" = ( -/obj/machinery/suit_storage_unit/standard_unit, -/obj/effect/floor_decal/industrial/outline/grey, -/obj/machinery/light{ - dir = 1 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/command/armoury) -"cZi" = ( -/obj/effect/floor_decal/industrial/outline/grey, -/obj/machinery/barrier, -/turf/simulated/floor/tiled/dark/monotile, -/area/security/storage) -"cZS" = ( -/obj/effect/floor_decal/corner/yellow{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/tiled, -/area/hallway/primary/firstdeck/center) -"dab" = ( -/obj/structure/table/standard, -/obj/structure/sign/warning/nosmoking_1{ - pixel_y = 24 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/medical/morgue/autopsy) -"daB" = ( -/obj/machinery/disposal, -/obj/effect/floor_decal/corner/red/mono, -/obj/effect/floor_decal/industrial/hatch/yellow, -/obj/item/device/radio/intercom/department/security{ - dir = 4; - pixel_x = -21 - }, -/obj/structure/disposalpipe/trunk{ - dir = 4 - }, -/obj/machinery/light{ - dir = 8 - }, -/turf/simulated/floor/tiled/monotile, -/area/security/locker) -"daN" = ( -/obj/structure/table/rack{ - dir = 4 - }, -/obj/effect/floor_decal/industrial/outline/grey, -/obj/item/crowbar/brace_jack, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/security/storage) -"dcb" = ( -/obj/machinery/suit_storage_unit/standard_unit{ - req_access = newlist() - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/structure/sign/warning/nosmoking_1{ - dir = 8; - pixel_x = 32 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/crew_quarters/safe_room/medical) -"ddP" = ( -/obj/structure/lattice, -/obj/structure/lattice, -/turf/simulated/wall/r_wall/hull, -/area/thruster/d1port) -"deb" = ( -/obj/effect/floor_decal/techfloor, -/obj/structure/bed/chair/padded/blue{ - dir = 1 - }, -/obj/machinery/light, -/turf/simulated/floor/tiled/techfloor, -/area/crew_quarters/safe_room/medical) -"deo" = ( -/obj/structure/table/rack, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/item/clothing/mask/gas/half, -/obj/item/clothing/mask/gas/half, -/obj/item/clothing/mask/gas/half, -/obj/item/clothing/mask/gas/half, -/obj/item/clothing/mask/gas/half, -/obj/item/clothing/mask/gas/half, -/obj/machinery/newscaster/security_unit{ - pixel_y = 32 - }, -/obj/effect/floor_decal/corner/red/mono, -/obj/item/clothing/mask/gas/half, -/obj/item/clothing/mask/gas/half, -/obj/item/clothing/mask/gas/half, -/turf/simulated/floor/tiled/monotile, -/area/security/locker) -"dfb" = ( -/obj/effect/floor_decal/techfloor, -/obj/structure/bed/chair/padded/blue{ - dir = 1 - }, -/obj/machinery/button/alternate/door/bolts{ - id_tag = "medsafe"; - name = "safe room door-control"; - pixel_y = -23 - }, -/obj/machinery/light_switch{ - pixel_x = -8; - pixel_y = -23 - }, -/turf/simulated/floor/tiled/techfloor, -/area/crew_quarters/safe_room/medical) -"dfZ" = ( -/obj/effect/floor_decal/corner/research{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/white, -/area/rnd/office) -"dgb" = ( -/obj/effect/floor_decal/techfloor, -/turf/simulated/floor/tiled/techfloor, -/area/crew_quarters/safe_room/medical) -"dhb" = ( -/obj/effect/floor_decal/techfloor{ - dir = 6 - }, -/obj/machinery/firealarm{ - dir = 1; - pixel_y = -24 - }, -/turf/simulated/floor/tiled/techfloor, -/area/crew_quarters/safe_room/medical) -"dib" = ( -/obj/structure/closet/firecloset, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/item/storage/briefcase/inflatable, -/obj/machinery/light, -/turf/simulated/floor/tiled/techfloor/grid, -/area/crew_quarters/safe_room/medical) -"diz" = ( -/obj/structure/lattice, -/turf/simulated/floor/reinforced/hydrogen, -/area/thruster/d1port) -"dkb" = ( -/obj/machinery/optable, -/obj/effect/floor_decal/floordetail/edgedrain{ - dir = 1 - }, -/obj/effect/floor_decal/corner/paleblue{ - dir = 10 - }, -/obj/machinery/oxygen_pump{ - pixel_x = -32; - pixel_y = 32 - }, -/obj/machinery/body_scan_display{ - pixel_y = 24 - }, -/turf/simulated/floor/tiled/white, -/area/medical/surgery2) -"dkG" = ( -/obj/effect/floor_decal/industrial/outline/grey, -/obj/structure/closet/secure_closet{ - name = "Secure Evidence Locker"; - req_access = list("ACCESS_SECURITY") - }, -/turf/simulated/floor/tiled/dark, -/area/security/evidence) -"dkJ" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 1 - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/structure/disposalpipe/junction{ - dir = 4 - }, -/obj/effect/catwalk_plated, -/turf/simulated/floor/plating, -/area/hallway/primary/firstdeck/center) -"dkV" = ( -/obj/effect/floor_decal/corner/red{ - dir = 10 - }, -/obj/machinery/light/small, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/turf/simulated/floor/tiled, -/area/security/wing) -"dlb" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 4 - }, -/obj/machinery/recharger, -/obj/structure/table/standard, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/engineering/auxpower) -"dlf" = ( -/obj/effect/floor_decal/corner/research{ - dir = 5 - }, -/obj/machinery/computer/guestpass{ - pixel_y = 32 - }, -/turf/simulated/floor/tiled/white, -/area/rnd/research) -"dmz" = ( -/obj/machinery/firealarm{ - dir = 8; - pixel_x = -24 - }, -/obj/effect/floor_decal/corner/red{ - dir = 10 - }, -/obj/structure/flora/pottedplant/minitree, -/turf/simulated/floor/tiled, -/area/security/detectives_office) -"dob" = ( -/obj/machinery/atmospherics/unary/vent_pump/on, -/obj/structure/table/standard, -/obj/item/stack/material/plastic/ten, -/turf/simulated/floor/tiled/white/monotile, -/area/rnd/development) -"doR" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/turf/simulated/floor/tiled/freezer, -/area/medical/washroom) -"dqb" = ( -/obj/structure/hygiene/sink{ - dir = 1; - pixel_y = 16 - }, -/obj/item/storage/mirror{ - pixel_y = 32 - }, -/turf/simulated/floor/tiled/freezer, -/area/medical/washroom) -"dqU" = ( -/obj/effect/floor_decal/industrial/warning, -/obj/machinery/atmospherics/pipe/simple/visible/fuel{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor, -/area/thruster/d1port) -"drc" = ( -/obj/structure/railing/mapped{ - dir = 1; - icon_state = "railing0-1" - }, -/turf/simulated/floor/plating, -/area/maintenance/firstdeck/centralport) -"dsd" = ( -/obj/machinery/meter, -/obj/machinery/atmospherics/pipe/simple/visible/cyan, -/obj/effect/wallframe_spawn/reinforced_phoron, -/obj/machinery/door/firedoor, -/turf/simulated/floor/reinforced, -/area/thruster/d1port) -"dtb" = ( -/obj/structure/window/reinforced{ - dir = 8 - }, -/obj/machinery/computer/modular/preset/medical{ - dir = 4; - icon_state = "console" - }, -/obj/machinery/power/apc{ - dir = 1; - name = "north bump"; - pixel_y = 24 - }, -/obj/structure/cable/green{ - d2 = 2; - icon_state = "0-2" - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/medical/morgue/autopsy) -"dub" = ( -/obj/item/stool/padded, -/turf/simulated/floor/tiled/dark/monotile, -/area/medical/morgue/autopsy) -"dxm" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/floor_decal/corner/research{ - dir = 10 - }, -/turf/simulated/floor/tiled/white, -/area/rnd/research) -"dzG" = ( -/obj/effect/floor_decal/industrial/hatch/yellow, -/obj/machinery/disposal, -/obj/structure/disposalpipe/trunk{ - dir = 8 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/command/conference) -"dBF" = ( -/obj/machinery/atmospherics/unary/vent_pump/on, -/turf/simulated/floor/tiled/dark, -/area/command/conference) -"dDb" = ( -/turf/simulated/wall/r_wall/prepainted, -/area/medical/chemistry) -"dDc" = ( -/turf/simulated/floor/tiled, -/area/hallway/primary/firstdeck/aft) -"dEb" = ( -/obj/random/torchcloset, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/firstdeck/aftstarboard) -"dFb" = ( -/obj/effect/floor_decal/floordetail/edgedrain{ - dir = 9 - }, -/obj/effect/floor_decal/corner/paleblue, -/turf/simulated/floor/tiled/dark/monotile, -/area/medical/morgue/autopsy) -"dFH" = ( -/obj/effect/floor_decal/corner/yellow{ - dir = 8 - }, -/obj/effect/floor_decal/techfloor{ - dir = 1 - }, -/turf/simulated/floor/tiled/steel_grid, -/area/turbolift/robotics_lift) -"dIb" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/dark, -/area/medical/foyer/storeroom) -"dIA" = ( -/obj/structure/railing/mapped{ - dir = 4; - icon_state = "railing0-1" - }, -/obj/structure/railing/mapped, -/obj/machinery/atmospherics/valve/shutoff/fuel{ - dir = 4 - }, -/turf/simulated/open, -/area/maintenance/firstdeck/aftport) -"dJb" = ( -/obj/machinery/door/window/northright{ - dir = 8; - name = "Autopsy" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/turf/simulated/floor/tiled/dark, -/area/medical/morgue/autopsy) -"dJp" = ( -/obj/effect/floor_decal/industrial/warning/fulltile, -/turf/simulated/floor/tiled/steel_grid, -/area/hallway/primary/firstdeck/aft) -"dJv" = ( -/obj/effect/floor_decal/techfloor/corner, -/obj/effect/floor_decal/techfloor{ - dir = 1 - }, -/obj/machinery/power/apc{ - name = "south bump"; - pixel_y = -28 - }, -/obj/structure/cable/green{ - d2 = 4; - icon_state = "0-4" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/command/armoury/tactical) -"dJY" = ( -/obj/structure/sign/warning/hot_exhaust{ - dir = 1 - }, -/turf/simulated/wall/r_wall/prepainted, -/area/thruster/d1port) -"dKb" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 8 - }, -/turf/simulated/floor/tiled/dark, -/area/medical/morgue/autopsy) -"dMb" = ( -/obj/item/storage/box/syringes{ - pixel_x = 4; - pixel_y = 4 - }, -/obj/random/soap, -/obj/random/firstaid, -/obj/random/medical, -/obj/random/medical, -/obj/random/medical, -/obj/random/medical, -/obj/random/medical, -/obj/random/medical, -/obj/random/medical/lite, -/obj/random/medical/lite, -/obj/random/medical/lite, -/obj/random/medical/lite, -/obj/effect/floor_decal/corner/paleblue{ - dir = 10 - }, -/obj/effect/floor_decal/corner/paleblue{ - dir = 5 - }, -/obj/item/defibrillator/loaded, -/obj/structure/closet/secure_closet/medical_wall{ - name = "Medical Equipment Cabinet"; - pixel_y = 32 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/item/reagent_containers/syringe/antiviral, -/obj/item/reagent_containers/syringe/antiviral, -/obj/item/reagent_containers/syringe/antiviral, -/obj/item/reagent_containers/glass/bottle/inaprovaline, -/obj/item/reagent_containers/glass/bottle/inaprovaline, -/obj/item/reagent_containers/glass/bottle/antitoxin, -/obj/item/reagent_containers/glass/bottle/antitoxin, -/obj/item/reagent_containers/glass/bottle/antitoxin, -/obj/item/reagent_containers/glass/bottle/inaprovaline, -/turf/simulated/floor/tiled/white, -/area/medical/sleeper) -"dMe" = ( -/obj/effect/floor_decal/corner/paleblue{ - dir = 5 - }, -/obj/structure/sign/directions/med{ - pixel_y = 32 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/firstdeck/aft) -"dNb" = ( -/obj/effect/floor_decal/corner/paleblue/mono, -/obj/machinery/alarm{ - dir = 8; - pixel_x = 24 - }, -/obj/machinery/atmospherics/unary/cryo_cell, -/turf/simulated/floor/tiled/white/monotile, -/area/medical/sleeper) -"dPA" = ( -/obj/effect/floor_decal/corner/red{ - dir = 10 - }, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 1 - }, -/turf/simulated/floor/tiled, -/area/security/wing) -"dQb" = ( -/obj/random_multi/single_item/skelestand, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/firstdeck/aftstarboard) -"dRb" = ( -/obj/structure/table/rack, -/obj/item/storage/box/bodybags{ - pixel_x = 1; - pixel_y = 2 - }, -/obj/effect/floor_decal/industrial/outline/grey, -/obj/machinery/firealarm{ - dir = 8; - pixel_x = -24 - }, -/obj/random/medical/lite, -/obj/random/medical/lite, -/turf/simulated/floor/tiled/dark/monotile, -/area/medical/foyer/storeroom) -"dRf" = ( -/obj/effect/floor_decal/corner/paleblue{ - dir = 5 - }, -/obj/structure/closet/hydrant{ - pixel_y = 32 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/firstdeck/center) -"dRs" = ( -/obj/effect/floor_decal/corner/yellow{ - dir = 5 - }, -/obj/machinery/disposal, -/obj/effect/floor_decal/industrial/hatch/yellow, -/obj/machinery/alarm{ - pixel_y = 24 - }, -/obj/structure/disposalpipe/trunk, -/turf/simulated/floor/tiled, -/area/assembly/robotics/office) -"dSb" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark, -/area/medical/foyer/storeroom) -"dSR" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 4 - }, -/obj/effect/floor_decal/corner/paleblue{ - dir = 5 - }, -/obj/machinery/firealarm{ - dir = 4; - pixel_x = 21 - }, -/turf/simulated/floor/tiled/white, -/area/medical/medpaperworkoffice) -"dTb" = ( -/obj/effect/floor_decal/floordetail/edgedrain{ - dir = 8 - }, -/obj/effect/floor_decal/corner/red{ - dir = 6 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/medical/morgue/autopsy) -"dUb" = ( -/obj/machinery/door/window/westleft{ - name = "Autopsy" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/turf/simulated/floor/tiled/dark, -/area/medical/morgue/autopsy) -"dUZ" = ( -/obj/structure/sign/warning/vent_port, -/turf/simulated/wall/r_wall/hull, -/area/thruster/d1starboard) -"dVp" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold4w/visible/fuel, -/turf/simulated/floor/tiled/techfloor, -/area/thruster/d1starboard) -"dVw" = ( -/turf/simulated/wall/r_wall/hull, -/area/command/armoury/tactical) -"dWb" = ( -/obj/effect/floor_decal/corner/paleblue{ - dir = 5 - }, -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/turf/simulated/floor/tiled/white, -/area/medical/sleeper) -"dXM" = ( -/obj/effect/floor_decal/corner/paleblue{ - dir = 6 - }, -/obj/machinery/light/spot{ - dir = 4 - }, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 8 - }, -/obj/item/device/radio/intercom{ - dir = 8; - pixel_x = 21 - }, -/turf/simulated/floor/tiled/white, -/area/medical/medicalhallway) -"dYb" = ( -/obj/effect/floor_decal/corner/paleblue/three_quarters{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 6 - }, -/turf/simulated/floor/tiled/white, -/area/medical/sleeper) -"dZb" = ( -/obj/effect/floor_decal/corner/paleblue{ - dir = 5 - }, -/turf/simulated/floor/tiled/white, -/area/medical/sleeper) -"dZx" = ( -/obj/structure/table/steel, -/obj/item/stack/package_wrap/twenty_five, -/obj/item/hand_labeler, -/obj/item/device/destTagger{ - pixel_y = 13 - }, -/obj/effect/floor_decal/corner/red/mono, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/recharger/wallcharger{ - dir = 4; - pixel_x = -23; - pixel_y = -3 - }, -/turf/simulated/floor/tiled/monotile, -/area/security/locker) -"eab" = ( -/obj/effect/floor_decal/corner/paleblue{ - dir = 5 - }, -/obj/effect/floor_decal/corner/paleblue{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/turf/simulated/floor/tiled/white, -/area/medical/sleeper) -"eaF" = ( -/obj/effect/floor_decal/corner/paleblue{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/white, -/area/medical/equipstorage) -"eaS" = ( -/obj/effect/floor_decal/industrial/hatch/yellow, -/obj/machinery/self_destruct, -/obj/machinery/firealarm{ - dir = 8; - pixel_x = -24 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/security/nuke_storage) -"ebb" = ( -/obj/effect/floor_decal/corner/paleblue{ - dir = 5 - }, -/obj/machinery/atmospherics/unary/vent_pump/on, -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 9 - }, -/obj/item/device/radio/intercom/department/medbay{ - dir = 8; - pixel_x = 24 - }, -/turf/simulated/floor/tiled/white, -/area/medical/sleeper) -"ecI" = ( -/obj/item/device/radio/intercom{ - dir = 8; - pixel_x = 21 - }, -/obj/structure/disposalpipe/segment{ - dir = 2; - icon_state = "pipe-c" - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/firstdeck/fore) -"edb" = ( -/obj/machinery/light/small{ - dir = 1 - }, -/obj/machinery/portable_atmospherics/powered/pump/filled, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/floor/tiled/techfloor, -/area/engineering/hardstorage/aux) -"edM" = ( -/obj/machinery/meter, -/obj/machinery/atmospherics/pipe/manifold/hidden{ - dir = 4 - }, -/obj/structure/catwalk, -/obj/effect/floor_decal/industrial/warning{ - dir = 8 - }, -/turf/simulated/floor/plating, -/area/maintenance/firstdeck/centralstarboard) -"edT" = ( -/obj/structure/sign/warning/high_voltage{ - dir = 4 - }, -/turf/simulated/wall/prepainted, -/area/security/brig) -"ehT" = ( -/obj/structure/railing/mapped, -/turf/simulated/floor/plating, -/area/maintenance/firstdeck/centralport) -"ehZ" = ( -/obj/structure/table/steel, -/obj/item/paper_bin{ - pixel_x = -3; - pixel_y = 7 - }, -/obj/item/pen, -/obj/item/device/taperecorder, -/obj/item/reagent_containers/spray/cleaner, -/obj/effect/floor_decal/corner/red/mono, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/recharger/wallcharger{ - dir = 4; - pixel_x = -23; - pixel_y = -3 - }, -/obj/item/sticky_pad/random, -/turf/simulated/floor/tiled/monotile, -/area/security/locker) -"eiF" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/dark, -/area/rnd/rnd_sec) -"ejb" = ( -/obj/structure/curtain/open/shower, -/obj/structure/hygiene/shower{ - dir = 4; - pixel_x = -5 - }, -/obj/machinery/alarm{ - pixel_y = 24 - }, -/turf/simulated/floor/tiled/freezer, -/area/medical/washroom) -"ekb" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 - }, -/turf/simulated/floor/tiled/freezer, -/area/medical/washroom) -"elT" = ( -/obj/effect/floor_decal/industrial/outline/grey, -/obj/machinery/power/port_gen/pacman{ - anchored = 1 - }, -/obj/machinery/light{ - dir = 1 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/security/storage) -"emb" = ( -/obj/effect/floor_decal/industrial/outline/grey, -/obj/structure/table/standard, -/obj/machinery/light{ - dir = 8 - }, -/obj/item/paper_bin, -/obj/item/sticky_pad/random, -/obj/item/reagent_containers/spray/cleaner{ - pixel_x = -5 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/medical/foyer/storeroom) -"emQ" = ( -/obj/effect/floor_decal/techfloor{ - dir = 1 - }, -/obj/random/snack, -/turf/simulated/floor/tiled/techfloor, -/area/crew_quarters/safe_room/firstdeck) -"enb" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 8 - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden, -/turf/simulated/floor/tiled/dark, -/area/medical/foyer/storeroom) -"enM" = ( -/turf/simulated/floor/tiled/dark, -/area/security/storage) -"eob" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 8 - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/engineering/hardstorage/aux) -"eoj" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/effect/floor_decal/corner/paleblue{ - dir = 5 - }, -/turf/simulated/floor/tiled/white, -/area/medical/medpaperworkoffice) -"epb" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 8 - }, -/turf/simulated/floor/tiled/dark, -/area/medical/foyer/storeroom) -"eqb" = ( -/obj/structure/window/reinforced{ - dir = 8 - }, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 1 - }, -/turf/simulated/floor/tiled/dark, -/area/medical/morgue/autopsy) -"equ" = ( -/obj/machinery/camera/network/first_deck{ - c_tag = "First Deck - Ladders"; - dir = 1 - }, -/obj/effect/floor_decal/corner/research/half, -/obj/machinery/light, -/turf/simulated/floor/tiled/monotile, -/area/hallway/primary/firstdeck/aft) -"erb" = ( -/obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/floor/tiled/dark/monotile, -/area/medical/morgue/autopsy) -"etb" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/white, -/area/medical/sleeper) -"etI" = ( -/obj/structure/table/rack, -/obj/item/gun/energy/stunrevolver/rifle, -/obj/item/gun/energy/stunrevolver/rifle, -/obj/structure/window/reinforced{ - dir = 8 - }, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/floor/tiled/dark/monotile, -/area/security/armoury) -"evb" = ( -/obj/effect/floor_decal/industrial/outline/grey, -/obj/structure/table/standard, -/obj/structure/flora/pottedplant/small{ - pixel_y = 10 - }, -/obj/machinery/power/apc{ - dir = 8; - name = "west bump"; - pixel_x = -24 - }, -/obj/structure/cable/green{ - d2 = 4; - icon_state = "0-4" - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/medical/foyer/storeroom) -"ewb" = ( -/obj/effect/floor_decal/corner/paleblue{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/white, -/area/medical/sleeper) -"ewc" = ( -/obj/effect/floor_decal/corner/green/mono, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/light{ - dir = 1 - }, -/obj/structure/closet/emcloset, -/turf/simulated/floor/tiled/monotile, -/area/hallway/primary/firstdeck/center) -"exb" = ( -/obj/effect/floor_decal/corner/paleblue{ - dir = 9 - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply, -/obj/structure/cable/green{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/machinery/atmospherics/pipe/simple/hidden, -/turf/simulated/floor/tiled/white, -/area/medical/sleeper) -"exc" = ( -/obj/machinery/atmospherics/portables_connector{ - dir = 4 - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 4 - }, -/obj/effect/floor_decal/industrial/hatch/blue, -/turf/simulated/floor/tiled/techfloor, -/area/thruster/d1port) -"eyY" = ( -/turf/simulated/floor/tiled, -/area/security/processing) -"ezb" = ( -/turf/simulated/floor/tiled/white, -/area/medical/sleeper) -"eAb" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/white, -/area/medical/sleeper) -"eCb" = ( -/obj/machinery/alarm{ - alarm_id = "xenobio4_alarm"; - pixel_y = 24 - }, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 8 - }, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/floor/tiled/techfloor, -/area/engineering/hardstorage/aux) -"eEE" = ( -/obj/effect/floor_decal/industrial/outline/grey, -/obj/machinery/portable_atmospherics/powered/pump/filled, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/firstdeck/centralport) -"eGb" = ( -/obj/structure/table/standard, -/obj/item/stack/material/uranium, -/obj/item/stack/material/uranium, -/obj/item/device/scanner/reagent, -/obj/item/device/scanner/spectrometer/adv, -/turf/simulated/floor/tiled/dark, -/area/rnd/misc_lab) -"eGl" = ( -/obj/machinery/atmospherics/unary/outlet_injector{ - dir = 1; - frequency = 1441; - icon_state = "map_injector"; - id = "d1sh_in"; - use_power = 1 - }, -/turf/simulated/floor/reinforced/hydrogen, -/area/thruster/d1starboard) -"eGY" = ( -/obj/structure/sign/monkey_painting{ - pixel_x = -32 - }, -/obj/effect/floor_decal/corner/research{ - dir = 10 - }, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/turf/simulated/floor/tiled/white, -/area/rnd/office) -"eHb" = ( -/obj/machinery/bodyscanner{ - dir = 1 - }, -/obj/effect/floor_decal/corner/pink/mono, -/turf/simulated/floor/tiled/white/monotile, -/area/medical/sleeper) -"eIb" = ( -/obj/structure/curtain/open/shower, -/obj/structure/hygiene/shower{ - dir = 4; - pixel_x = -5 - }, -/turf/simulated/floor/tiled/freezer, -/area/medical/washroom) -"eIP" = ( -/obj/machinery/door/blast/shutters{ - density = 0; - dir = 4; - icon_state = "shutter0"; - id_tag = "concheckwindow"; - name = "RnD Checkpoint Shutters"; - opacity = 0 - }, -/obj/effect/wallframe_spawn/reinforced/polarized{ - id = "rndpost" - }, -/obj/structure/cable/green{ - d2 = 2; - icon_state = "0-2" - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/plating, -/area/rnd/rnd_sec) -"eJb" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden, -/turf/simulated/floor/tiled/dark, -/area/medical/foyer/storeroom) -"eJy" = ( -/obj/effect/wallframe_spawn/reinforced_phoron, -/obj/machinery/door/firedoor, -/turf/simulated/floor/reinforced, -/area/thruster/d1starboard) -"eKb" = ( -/obj/structure/closet/crate/plastic, -/obj/effect/floor_decal/industrial/outline/grey, -/obj/machinery/light_switch{ - pixel_x = -4; - pixel_y = -23 - }, -/obj/item/stack/material/steel/fifty, -/turf/simulated/floor/tiled/dark/monotile, -/area/medical/foyer/storeroom) -"eLb" = ( -/obj/structure/window/reinforced{ - dir = 8 - }, -/obj/effect/floor_decal/industrial/outline/grey, -/obj/structure/closet/secure_closet{ - name = "Secure Morgue Locker"; - req_access = list("ACCESS_MEDICAL") - }, -/obj/machinery/light_switch{ - pixel_x = -4; - pixel_y = -23 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/medical/morgue/autopsy) -"eMb" = ( -/obj/structure/morgue{ - dir = 1 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/medical/morgue/autopsy) -"ePb" = ( -/obj/machinery/door/airlock/medical{ - name = "Operating Room 1" - }, -/obj/machinery/holosign/surgery{ - dir = 4; - id_tag = "or1" - }, -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/floor_decal/industrial/hatch/blue, -/turf/simulated/floor/tiled/white/monotile, -/area/medical/surgery) -"eQK" = ( -/obj/effect/floor_decal/techfloor{ - dir = 9 - }, -/obj/machinery/firealarm{ - dir = 8; - pixel_x = -24; - pixel_y = 0 - }, -/turf/simulated/floor/tiled/techfloor, -/area/crew_quarters/safe_room/firstdeck) -"eRb" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/tiled/white, -/area/medical/sleeper) -"eRQ" = ( -/obj/machinery/door/airlock/medical{ - autoset_access = 0; - name = "Robotics Laboratory"; - req_access = list(list("ACCESS_MEDICAL","ACCESS_ROBOTICS")) - }, -/obj/effect/floor_decal/industrial/hatch/blue, -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/white/monotile, -/area/assembly/robotics/laboratory) -"eRU" = ( -/turf/simulated/wall/r_wall/hull, -/area/command/armoury) -"eTb" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/white, -/area/medical/sleeper) -"eUb" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/white, -/area/medical/sleeper) -"eUO" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/light{ - dir = 4 - }, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/tiled, -/area/hallway/primary/firstdeck/fore) -"eUW" = ( -/obj/effect/floor_decal/scglogo{ - dir = 8 - }, -/turf/simulated/floor/tiled/dark, -/area/command/conference) -"eVQ" = ( -/turf/simulated/floor/tiled, -/area/security/brig) -"eWb" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/turf/simulated/floor/tiled/white/monotile, -/area/medical/surgery) -"eXk" = ( -/obj/effect/floor_decal/corner/paleblue{ - dir = 5 - }, -/obj/structure/iv_drip, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/recharger/wallcharger{ - pixel_y = 24 - }, -/obj/machinery/camera/network/medbay{ - c_tag = "Medical - Foyer"; - dir = 8 - }, -/turf/simulated/floor/tiled/white, -/area/medical/foyer) -"eZQ" = ( -/obj/machinery/lapvend{ - dir = 4 - }, -/turf/simulated/floor/tiled/monotile, -/area/teleporter/firstdeck) -"fbQ" = ( -/obj/machinery/door/airlock/glass/civilian{ - autoset_access = 0; - name = "Brig Bunk Room" - }, -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/tiled/steel_ridged, -/area/security/brig) -"fdQ" = ( -/obj/effect/floor_decal/industrial/outline/grey, -/obj/machinery/space_heater, -/obj/structure/railing/mapped{ - dir = 1; - icon_state = "railing0-1" - }, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/firstdeck/aftstarboard) -"fkb" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/door/airlock/medical{ - name = "Medical Storeroom" - }, -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/simple/hidden, -/turf/simulated/floor/tiled/white/monotile, -/area/medical/foyer/storeroom) -"fll" = ( -/obj/effect/floor_decal/industrial/outline/grey, -/obj/machinery/flasher/portable, -/turf/simulated/floor/tiled/techfloor/grid, -/area/command/armoury) -"flB" = ( -/obj/structure/disposalpipe/segment, -/obj/effect/floor_decal/corner/research{ - dir = 10 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/firstdeck/aft) -"fmb" = ( -/obj/machinery/atmospherics/portables_connector{ - dir = 4 - }, -/obj/machinery/portable_atmospherics/canister/oxygen/prechilled, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled/dark/monotile, -/area/medical/foyer/storeroom) -"fnu" = ( -/obj/effect/floor_decal/corner/green{ - dir = 8 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/firstdeck/center) -"fnR" = ( -/obj/structure/bed, -/obj/item/bedsheet/hos, -/turf/simulated/floor/plating, -/area/maintenance/firstdeck/aftport) -"foP" = ( -/obj/effect/floor_decal/corner/research{ - dir = 5 - }, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 4 - }, -/obj/machinery/power/apc{ - dir = 8; - name = "west bump"; - pixel_x = -24 - }, -/obj/structure/cable/green{ - d2 = 2; - icon_state = "0-2" - }, -/turf/simulated/floor/tiled/white, -/area/rnd/office) -"fps" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden{ - dir = 8 - }, -/obj/machinery/meter, -/turf/simulated/floor/plating, -/area/maintenance/firstdeck/centralstarboard) -"fpu" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 1 - }, -/obj/effect/floor_decal/corner/paleblue{ - dir = 10 - }, -/obj/machinery/light{ - dir = 8 - }, -/obj/structure/bed/chair/comfy/blue, -/turf/simulated/floor/tiled/white, -/area/medical/medpaperworkoffice) -"frA" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 4; - level = 2 - }, -/obj/machinery/power/apc{ - dir = 8; - name = "west bump"; - pixel_x = -24 - }, -/obj/structure/cable/green{ - d2 = 4; - icon_state = "0-4" - }, -/obj/machinery/light{ - dir = 8 - }, -/obj/effect/floor_decal/corner/red/mono, -/turf/simulated/floor/tiled/monotile, -/area/security/locker) -"fuV" = ( -/obj/machinery/atmospherics/unary/outlet_injector{ - frequency = 1441; - id = "d1so2_in"; - injecting = 1; - use_power = 1 - }, -/turf/simulated/floor/reinforced/oxygen, -/area/thruster/d1starboard) -"fvb" = ( -/obj/effect/floor_decal/corner/paleblue/mono, -/obj/machinery/sleeper{ - dir = 4 - }, -/turf/simulated/floor/tiled/white/monotile, -/area/medical/sleeper) -"fxb" = ( -/obj/machinery/meter, -/obj/machinery/atmospherics/pipe/manifold/hidden, -/turf/simulated/floor/tiled/dark, -/area/medical/foyer/storeroom) -"fxe" = ( -/turf/simulated/floor/tiled/white/monotile, -/area/medical/surgery2) -"fBb" = ( -/obj/structure/window/reinforced{ - dir = 8 - }, -/obj/structure/table/standard, -/obj/item/device/integrated_circuit_printer, -/turf/simulated/floor/tiled/dark, -/area/rnd/misc_lab) -"fCb" = ( -/obj/structure/table/standard, -/obj/item/storage/firstaid/surgery, -/obj/effect/floor_decal/floordetail/edgedrain{ - dir = 1 - }, -/obj/effect/floor_decal/corner/paleblue{ - dir = 10 - }, -/obj/machinery/light{ - dir = 1 - }, -/turf/simulated/floor/tiled/white, -/area/medical/surgery) -"fDJ" = ( -/obj/effect/floor_decal/corner/blue{ - dir = 5 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/firstdeck/fore) -"fDR" = ( -/obj/structure/reagent_dispensers/watertank, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/catwalk, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/maintenance/firstdeck/centralstarboard) -"fEb" = ( -/obj/effect/floor_decal/corner/paleblue{ - dir = 6 - }, -/turf/simulated/floor/tiled/white, -/area/medical/sleeper) -"fHk" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/security/brig) -"fIn" = ( -/obj/effect/floor_decal/techfloor, -/obj/effect/floor_decal/corner_techfloor_grid{ - dir = 5 - }, -/obj/effect/floor_decal/techfloor/corner{ - dir = 1 - }, -/obj/effect/floor_decal/techfloor/corner{ - dir = 4 - }, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 8 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/command/armoury) -"fKb" = ( -/obj/machinery/hologram/holopad, -/turf/simulated/floor/tiled/white, -/area/medical/sleeper) -"fKJ" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/machinery/light{ - dir = 4 - }, -/obj/effect/floor_decal/corner/blue{ - dir = 6 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/firstdeck/fore) -"fLg" = ( -/obj/effect/floor_decal/industrial/outline/grey, -/obj/structure/table/rack{ - dir = 4 - }, -/obj/item/stack/material/steel{ - amount = 30 - }, -/obj/item/stack/material/steel{ - amount = 30 - }, -/obj/item/stack/material/steel{ - amount = 30 - }, -/obj/item/stack/material/plasteel{ - amount = 20 - }, -/obj/item/stack/material/ocp{ - amount = 10 - }, -/obj/structure/window/reinforced{ - dir = 4 - }, -/obj/machinery/light{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/command/armoury) -"fMr" = ( -/obj/effect/wallframe_spawn/reinforced/no_grille, -/obj/machinery/door/blast/shutters{ - density = 0; - dir = 2; - icon_state = "shutter0"; - id_tag = "infirm_windows"; - name = "Infirmary Window Lockdown"; - opacity = 0 - }, -/turf/simulated/floor/plating, -/area/medical/staging) -"fMI" = ( -/obj/effect/floor_decal/industrial/outline/grey, -/obj/random/assembly, -/obj/structure/table/steel, -/obj/random/material, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/firstdeck/centralstarboard) -"fOb" = ( -/obj/effect/floor_decal/corner/paleblue{ - dir = 10 - }, -/obj/structure/flora/pottedplant/flower, -/turf/simulated/floor/tiled/white, -/area/medical/medicalhallway) -"fOr" = ( -/obj/structure/table/steel, -/obj/random/maintenance/solgov/clean, -/obj/random/maintenance/solgov/clean, -/obj/random/maintenance/solgov/clean, -/obj/machinery/recharger/wallcharger{ - dir = 8; - pixel_x = 23; - pixel_y = -3 - }, -/turf/simulated/floor/tiled/dark, -/area/command/armoury/access) -"fOu" = ( -/obj/machinery/door/airlock/medical{ - name = "Locker Room" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/door/firedoor, -/turf/simulated/floor/tiled/white/monotile, -/area/medical/equipstorage) -"fQf" = ( -/obj/effect/floor_decal/corner/paleblue{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/medical/locker) -"fRi" = ( -/obj/structure/sign/warning/hot_exhaust{ - dir = 1 - }, -/turf/simulated/wall/ocp_wall, -/area/thruster/d1starboard) -"fRN" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/disposalpipe/segment, -/obj/effect/catwalk_plated, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/plating, -/area/hallway/primary/firstdeck/fore) -"fTU" = ( -/obj/machinery/atmospherics/pipe/simple/visible/blue{ - dir = 6 - }, -/obj/effect/floor_decal/industrial/warning, -/obj/machinery/light/small{ - dir = 8 - }, -/turf/simulated/floor/tiled/techfloor, -/area/thruster/d1starboard) -"fUW" = ( -/obj/structure/table/standard, -/obj/item/hand_labeler, -/obj/item/device/radio/intercom/department/security{ - pixel_y = 23 - }, -/turf/simulated/floor/tiled/monotile, -/area/security/detectives_office) -"fVb" = ( -/obj/effect/floor_decal/corner/paleblue{ - dir = 5 - }, -/obj/structure/iv_drip, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/structure/noticeboard{ - pixel_y = 32 - }, -/turf/simulated/floor/tiled/white, -/area/medical/foyer) -"fVw" = ( -/obj/structure/extinguisher_cabinet{ - pixel_x = -32 - }, -/obj/machinery/vending/fitness{ - dir = 4 - }, -/turf/simulated/floor/tiled/monotile, -/area/teleporter/firstdeck) -"fVC" = ( -/obj/effect/catwalk_plated, -/obj/structure/disposalpipe/segment, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/plating, -/area/security/wing) -"fWb" = ( -/obj/effect/floor_decal/corner/paleblue{ - dir = 6 - }, -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/white, -/area/medical/medicalhallway) -"fYb" = ( -/obj/machinery/door/airlock/medical{ - id_tag = "examdoor"; - name = "Examination Room" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/door/firedoor, -/turf/simulated/floor/tiled/white/monotile, -/area/medical/exam_room) -"fYv" = ( -/obj/machinery/firealarm{ - dir = 8; - pixel_x = -24 - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, -/obj/structure/disposalpipe/segment{ - dir = 4; - icon_state = "pipe-c" - }, -/turf/simulated/floor/tiled/dark, -/area/command/conference) -"fZn" = ( -/obj/effect/floor_decal/techfloor, -/obj/effect/floor_decal/techfloor{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/command/armoury) -"gab" = ( -/obj/machinery/power/port_gen/pacman{ - anchored = 1; - sheets = 25 - }, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/floor/tiled/techfloor, -/area/engineering/hardstorage/aux) -"gbb" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 8 - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/engineering/hardstorage/aux) -"gcY" = ( -/obj/structure/table/standard, -/obj/structure/window/reinforced{ - dir = 2 - }, -/obj/machinery/reagent_temperature/cooler, -/turf/simulated/floor/tiled/dark, -/area/rnd/misc_lab) -"geb" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 8 - }, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/floor/tiled/techfloor, -/area/engineering/hardstorage/aux) -"gep" = ( -/obj/machinery/door/firedoor, -/obj/effect/floor_decal/industrial/hatch/red, -/obj/machinery/door/airlock/research{ - name = "Research Checkpoint" - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/dark/monotile, -/area/rnd/rnd_sec) -"ggA" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 1 - }, -/obj/effect/floor_decal/corner/green/half, -/obj/machinery/newscaster{ - pixel_y = -32 - }, -/turf/simulated/floor/tiled/monotile, -/area/hallway/primary/firstdeck/center) -"ghb" = ( -/obj/structure/iv_drip, -/obj/effect/floor_decal/floordetail/edgedrain{ - dir = 8 - }, -/obj/effect/floor_decal/corner/paleblue{ - dir = 6 - }, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 4 - }, -/obj/machinery/power/apc{ - dir = 8; - name = "west bump"; - pixel_x = -24 - }, -/obj/structure/cable/green{ - d2 = 4; - icon_state = "0-4" - }, -/turf/simulated/floor/tiled/white, -/area/medical/surgery) -"ghI" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 1 - }, -/obj/effect/floor_decal/corner/green/half, -/obj/item/device/radio/intercom{ - dir = 1; - pixel_y = -28 - }, -/turf/simulated/floor/tiled/monotile, -/area/hallway/primary/firstdeck/center) -"gib" = ( -/turf/simulated/floor/tiled/white/monotile, -/area/medical/surgery) -"gig" = ( -/obj/machinery/photocopier, -/obj/effect/floor_decal/corner/research/mono, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 1 - }, -/obj/machinery/firealarm{ - dir = 1; - pixel_y = -24 - }, -/turf/simulated/floor/tiled/white/monotile, -/area/rnd/office) -"gij" = ( -/obj/effect/floor_decal/techfloor{ - dir = 8 - }, -/obj/structure/disposalpipe/segment{ - dir = 4; - icon_state = "pipe-c" - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/turf/simulated/floor/tiled, -/area/assembly/robotics/office) -"gjb" = ( -/obj/structure/table/standard, -/obj/item/storage/firstaid/adv, -/obj/effect/floor_decal/floordetail/edgedrain{ - dir = 4 - }, -/obj/effect/floor_decal/corner/paleblue{ - dir = 9 - }, -/turf/simulated/floor/tiled/white, -/area/medical/surgery) -"gkb" = ( -/obj/effect/wallframe_spawn/reinforced/polarized/no_grille/regular{ - id = "or1" - }, -/turf/simulated/floor/plating, -/area/medical/surgery) -"glb" = ( -/obj/effect/floor_decal/spline/plain/blue{ - dir = 6 - }, -/turf/simulated/floor/tiled/white, -/area/medical/sleeper) -"gnt" = ( -/obj/structure/bed/chair/padded/blue, -/obj/effect/floor_decal/scglogo{ - dir = 8; - icon_state = "top-center" - }, -/turf/simulated/floor/tiled/dark, -/area/command/conference) -"gnC" = ( -/turf/simulated/wall/r_wall/hull, -/area/security/detectives_office) -"goa" = ( -/obj/machinery/vending/security, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/alarm{ - dir = 4; - pixel_x = -22 - }, -/obj/effect/floor_decal/corner/red/mono, -/turf/simulated/floor/tiled/monotile, -/area/security/locker) -"gos" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/bed/chair/padded/yellow{ - dir = 8 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled, -/area/assembly/robotics/office) -"grI" = ( -/obj/structure/table/steel, -/obj/item/device/taperecorder, -/obj/item/device/camera, -/obj/effect/floor_decal/corner/red{ - dir = 6 - }, -/obj/machinery/light{ - dir = 4 - }, -/turf/simulated/floor/tiled/monotile, -/area/security/processing) -"guP" = ( -/obj/structure/table/rack, -/obj/item/storage/firstaid/regular{ - pixel_x = 5; - pixel_y = 5 - }, -/obj/item/storage/firstaid/toxin, -/obj/random/medical/lite, -/obj/effect/floor_decal/corner/paleblue/mono, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/light, -/turf/simulated/floor/tiled/white/monotile, -/area/medical/equipstorage) -"gvC" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/obj/machinery/light{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor, -/area/crew_quarters/safe_room/firstdeck) -"gvJ" = ( -/turf/simulated/wall/r_wall/prepainted, -/area/security/questioning) -"gxi" = ( -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/hologram/holopad, -/turf/simulated/floor/tiled, -/area/security/processing) -"gxX" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/effect/catwalk_plated, -/turf/simulated/floor/plating, -/area/hallway/primary/firstdeck/aft) -"gyj" = ( -/obj/structure/railing/mapped, -/turf/simulated/floor/plating, -/area/maintenance/firstdeck/aftstarboard) -"gyP" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/door/airlock/engineering{ - name = "Auxiliary Engineering Hard Storage"; - secured_wires = 1 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/engineering/hardstorage/aux) -"gyV" = ( -/obj/effect/wallframe_spawn/no_grille, -/turf/simulated/floor/plating, -/area/medical/sleeper) -"gyY" = ( -/turf/simulated/wall/r_wall/hull, -/area/crew_quarters/safe_room/firstdeck) -"gzb" = ( -/obj/structure/table/reinforced, -/obj/effect/floor_decal/corner/paleblue/mono, -/obj/machinery/door/blast/shutters{ - density = 0; - dir = 4; - icon_state = "shutter0"; - id_tag = "inf_recep_window"; - name = "Infirmary Reception Window Lockdown"; - opacity = 0 - }, -/obj/machinery/door/window/eastright{ - name = "Medical Reception" - }, -/obj/item/storage/medical_lolli_jar, -/obj/machinery/door/firedoor, -/turf/simulated/floor/tiled/white/monotile, -/area/medical/staging) -"gzM" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/catwalk_plated, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/plating, -/area/hallway/primary/firstdeck/fore) -"gAU" = ( -/obj/structure/disposalpipe/segment{ - dir = 4; - icon_state = "pipe-c" - }, -/obj/effect/floor_decal/corner/research{ - dir = 10 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/firstdeck/aft) -"gDb" = ( -/obj/effect/floor_decal/corner/paleblue{ - dir = 6 - }, -/obj/structure/bed/chair/padded/blue{ - dir = 8 - }, -/turf/simulated/floor/tiled/white, -/area/medical/medicalhallway) -"gDm" = ( -/obj/effect/floor_decal/techfloor{ - dir = 4 - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 4 - }, -/obj/machinery/tele_beacon, -/turf/simulated/floor/tiled/dark, -/area/teleporter/firstdeck) -"gEb" = ( -/obj/effect/wallframe_spawn/reinforced/polarized/no_grille/regular{ - id = "exam_windows" - }, -/obj/machinery/door/blast/shutters{ - density = 0; - dir = 4; - icon_state = "shutter0"; - id_tag = "infirm_windows"; - name = "Infirmary Window Lockdown"; - opacity = 0 - }, -/turf/simulated/floor/plating, -/area/medical/exam_room) -"gEY" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 - }, -/obj/random/junk, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/firstdeck/centralstarboard) -"gFb" = ( -/obj/effect/floor_decal/corner/paleblue{ - dir = 10 - }, -/turf/simulated/floor/tiled/white, -/area/medical/medpaperworkoffice) -"gGO" = ( -/obj/item/device/radio/intercom/department/security{ - pixel_y = 23 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/security/storage) -"gHb" = ( -/obj/structure/closet/crate, -/obj/item/stack/material/phoron{ - amount = 50 - }, -/obj/item/stack/material/phoron{ - amount = 50 - }, -/obj/machinery/light/small{ - dir = 4; - icon_state = "bulb1" - }, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/floor/tiled/techfloor, -/area/engineering/hardstorage/aux) -"gML" = ( -/obj/structure/sign/warning/vent_port{ - dir = 1 - }, -/turf/simulated/wall/r_wall/hull, -/area/thruster/d1port) -"gQb" = ( -/obj/structure/dispenser{ - oxygentanks = 0 - }, -/obj/machinery/firealarm{ - dir = 8; - pixel_x = -24 - }, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/floor/tiled/techfloor, -/area/engineering/hardstorage/aux) -"gQn" = ( -/obj/effect/floor_decal/techfloor{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/cyan, -/turf/simulated/floor/tiled/techfloor, -/area/crew_quarters/safe_room/firstdeck) -"gQI" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, -/obj/structure/disposalpipe/segment{ - dir = 8; - icon_state = "pipe-c" - }, -/obj/structure/bed/chair/padded/yellow{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled, -/area/assembly/robotics/office) -"gRb" = ( -/obj/effect/floor_decal/corner/paleblue{ - dir = 10 - }, -/obj/item/stool/padded, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 1 - }, -/turf/simulated/floor/tiled/white, -/area/medical/exam_room) -"gVR" = ( -/obj/effect/floor_decal/corner/blue{ - dir = 6 - }, -/obj/machinery/power/apc{ - dir = 8; - name = "west bump"; - pixel_x = -24 - }, -/obj/structure/cable/green{ - d2 = 2; - icon_state = "0-2" - }, -/obj/machinery/light{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/tiled/dark, -/area/command/conference) -"gWb" = ( -/obj/effect/wallframe_spawn/reinforced/no_grille, -/obj/machinery/door/blast/shutters{ - density = 0; - dir = 2; - icon_state = "shutter0"; - id_tag = "infirm_windows"; - name = "Infirmary Window Lockdown"; - opacity = 0 - }, -/turf/simulated/floor/plating, -/area/medical/medicalhallway) -"gWY" = ( -/obj/machinery/optable, -/obj/effect/floor_decal/floordetail/edgedrain{ - dir = 8 - }, -/obj/effect/floor_decal/corner/paleblue{ - dir = 6 - }, -/obj/machinery/oxygen_pump{ - dir = 8; - pixel_x = -32 - }, -/turf/simulated/floor/tiled/white/monotile, -/area/assembly/robotics/surgery) -"gXb" = ( -/obj/effect/wallframe_spawn/reinforced/polarized/full{ - id = "exam_windows" - }, -/obj/machinery/door/blast/shutters{ - density = 0; - dir = 2; - icon_state = "shutter0"; - id_tag = "infirm_windows"; - name = "Infirmary Window Lockdown"; - opacity = 0 - }, -/turf/simulated/floor/plating, -/area/medical/exam_room) -"gZb" = ( -/obj/structure/cable/green{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 10 - }, -/turf/simulated/floor/tiled/dark, -/area/medical/foyer/storeroom) -"gZT" = ( -/obj/effect/floor_decal/scglogo{ - dir = 8; - icon_state = "center-left" - }, -/turf/simulated/floor/tiled/dark, -/area/command/conference) -"haT" = ( -/obj/structure/sign/warning/high_voltage{ - dir = 1 - }, -/turf/simulated/wall/prepainted, -/area/rnd/development) -"haV" = ( -/obj/effect/floor_decal/corner/paleblue{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply, -/turf/simulated/floor/tiled/white, -/area/medical/locker) -"hbP" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/security{ - name = "Equipment Storage" - }, -/turf/simulated/floor/tiled/steel_ridged, -/area/security/storage) -"hcb" = ( -/obj/machinery/camera/network/first_deck{ - c_tag = "First Deck Hallway - Ladders" - }, -/obj/effect/floor_decal/corner/paleblue{ - dir = 5 - }, -/obj/machinery/light{ - dir = 1 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/firstdeck/aft) -"hdb" = ( -/obj/effect/floor_decal/corner/paleblue/half{ - dir = 1 - }, -/turf/simulated/floor/tiled/monotile, -/area/hallway/primary/firstdeck/aft) -"heb" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/effect/catwalk_plated, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/hallway/primary/firstdeck/center) -"hfb" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/catwalk_plated, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/hallway/primary/firstdeck/aft) -"hgb" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/disposalpipe/junction{ - dir = 4 - }, -/obj/effect/catwalk_plated, -/turf/simulated/floor/plating, -/area/hallway/primary/firstdeck/aft) -"hgt" = ( -/obj/effect/floor_decal/corner/paleblue{ - dir = 10 - }, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 4 - }, -/obj/machinery/firealarm{ - dir = 8; - pixel_x = -24 - }, -/turf/simulated/floor/tiled/white, -/area/medical/locker) -"hgP" = ( -/obj/machinery/vitals_monitor, -/obj/effect/floor_decal/floordetail/edgedrain{ - dir = 9 - }, -/obj/effect/floor_decal/corner/paleblue, -/obj/machinery/alarm{ - dir = 4; - pixel_x = -21 - }, -/turf/simulated/floor/tiled/white, -/area/medical/surgery) -"hhb" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/disposalpipe/sortjunction{ - dir = 4; - name = "Research Equipment"; - sort_type = "Research Equipment" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 1 - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/effect/catwalk_plated, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 1 - }, -/turf/simulated/floor/plating, -/area/hallway/primary/firstdeck/aft) -"hhB" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/tiled/techfloor, -/area/crew_quarters/safe_room/firstdeck) -"hib" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/effect/catwalk_plated, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/hallway/primary/firstdeck/aft) -"hjk" = ( -/obj/structure/closet/secure_closet/brig, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled/monotile, -/area/security/brig) -"hku" = ( -/obj/effect/floor_decal/floordetail/edgedrain{ - dir = 4 - }, -/obj/effect/floor_decal/corner/paleblue{ - dir = 9 - }, -/turf/simulated/floor/tiled/white, -/area/medical/surgery2) -"hlb" = ( -/obj/effect/floor_decal/corner/paleblue{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/medical/sleeper) -"hml" = ( -/obj/machinery/air_sensor{ - id_tag = "d1so2_sensor" - }, -/turf/simulated/floor/reinforced/oxygen, -/area/thruster/d1starboard) -"hmQ" = ( -/obj/machinery/atmospherics/valve/digital{ - dir = 4; - id_tag = "fuelmode" - }, -/obj/effect/floor_decal/industrial/outline/red, -/turf/simulated/floor/reinforced/oxygen, -/area/thruster/d1port) -"hnL" = ( -/obj/effect/catwalk_plated, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 1 - }, -/obj/machinery/tele_beacon{ - autoset_name = 0; - beacon_name = "Security - Lobby" - }, -/turf/simulated/floor/plating, -/area/security/wing) -"hnN" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/catwalk_plated, -/turf/simulated/floor/plating, -/area/hallway/primary/firstdeck/aft) -"hqS" = ( -/obj/machinery/atmospherics/pipe/simple/visible/fuel, -/turf/simulated/wall/ocp_wall, -/area/thruster/d1starboard) -"hrb" = ( -/turf/simulated/wall/r_wall/prepainted, -/area/rnd/rnd_sec) -"hrE" = ( -/obj/effect/floor_decal/industrial/outline/grey, -/obj/structure/table/rack{ - dir = 4 - }, -/obj/item/storage/box/syringegun, -/obj/item/gun/launcher/syringe, -/obj/structure/window/reinforced, -/obj/structure/window/reinforced{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/command/armoury) -"hsb" = ( -/obj/structure/sign/science_1{ - dir = 1 - }, -/obj/structure/sign/directions/bridge{ - dir = 8; - pixel_z = 3 - }, -/obj/structure/sign/directions/infirmary{ - dir = 1; - pixel_y = -8 - }, -/turf/simulated/wall/r_wall/prepainted, -/area/rnd/rnd_sec) -"htb" = ( -/obj/machinery/door/blast/shutters{ - density = 0; - dir = 2; - icon_state = "shutter0"; - id_tag = "d1ladderwindow"; - name = "Ladderwell Checkpoint Shutters"; - opacity = 0 - }, -/obj/effect/wallframe_spawn/reinforced/no_grille, -/turf/simulated/floor/plating, -/area/rnd/entry) -"htq" = ( -/obj/effect/floor_decal/corner/red{ - dir = 9 - }, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/security/wing) -"htK" = ( -/obj/structure/table/rack, -/obj/effect/floor_decal/industrial/outline/grey, -/obj/structure/window/reinforced{ - dir = 1 - }, -/obj/structure/window/reinforced{ - dir = 8 - }, -/obj/item/gun/energy/stunrevolver/rifle, -/obj/item/gun/energy/taser/carbine, -/obj/item/gun/energy/taser/carbine, -/turf/simulated/floor/tiled/techfloor/grid, -/area/command/armoury/tactical) -"hub" = ( -/obj/machinery/door/firedoor, -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/effect/floor_decal/corner/red/mono, -/obj/machinery/door/blast/shutters{ - density = 0; - dir = 2; - icon_state = "shutter0"; - id_tag = "d1ladderwindow"; - name = "Ladderwell Checkpoint Shutters"; - opacity = 0 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/tiled/monotile, -/area/rnd/entry) -"huf" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 4; - level = 2 - }, -/turf/simulated/floor/tiled/dark, -/area/security/storage) -"hvb" = ( -/obj/machinery/door/firedoor, -/obj/effect/floor_decal/corner/red/mono, -/obj/machinery/door/blast/shutters{ - density = 0; - dir = 2; - icon_state = "shutter0"; - id_tag = "d1ladderwindow"; - name = "Ladderwell Checkpoint Shutters"; - opacity = 0 - }, -/turf/simulated/floor/tiled/monotile, -/area/rnd/entry) -"hvY" = ( -/obj/structure/table/standard, -/obj/structure/window/reinforced{ - dir = 8 - }, -/obj/item/stack/material/phoron, -/obj/item/stack/material/phoron, -/obj/item/stack/material/phoron, -/obj/item/stack/material/phoron, -/obj/item/stack/material/phoron, -/obj/item/storage/box/beakers, -/obj/machinery/light/spot{ - dir = 1 - }, -/obj/item/reagent_containers/glass/beaker/large, -/obj/item/reagent_containers/dropper, -/turf/simulated/floor/tiled/dark, -/area/rnd/misc_lab) -"hwb" = ( -/obj/structure/sign/science_1{ - dir = 1 - }, -/obj/structure/sign/directions/security{ - dir = 8; - pixel_y = -4 - }, -/turf/simulated/wall/prepainted, -/area/rnd/development) -"hwx" = ( -/obj/effect/floor_decal/corner/paleblue/three_quarters{ - dir = 1 - }, -/turf/simulated/floor/tiled/white, -/area/medical/sleeper) -"hyb" = ( -/obj/structure/disposalpipe/segment, -/obj/machinery/door/blast/regular{ - density = 0; - icon_state = "pdoor0"; - id_tag = "Biohazard"; - name = "Biohazard Shutter"; - opacity = 0 - }, -/obj/structure/cable/green{ - d2 = 2; - icon_state = "0-2" - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/effect/wallframe_spawn/reinforced/no_grille, -/turf/simulated/floor/plating, -/area/rnd/development) -"hyj" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/extinguisher_cabinet{ - pixel_y = 32 - }, -/obj/effect/catwalk_plated, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/hallway/primary/firstdeck/fore) -"hzb" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable/green{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/engineering/hardstorage/aux) -"hzl" = ( -/obj/machinery/door/airlock/highsecurity{ - name = "Security Armory" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/door/firedoor, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/security/armoury) -"hzT" = ( -/obj/item/device/radio/intercom/department/medbay{ - dir = 1; - pixel_y = -28 - }, -/turf/simulated/floor/tiled/dark, -/area/medical/foyer/storeroom) -"hAb" = ( -/obj/structure/table/standard, -/obj/effect/floor_decal/corner/red{ - dir = 5 - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/item/paper_bin, -/turf/simulated/floor/tiled/dark, -/area/rnd/rnd_sec) -"hBb" = ( -/obj/structure/disposalpipe/segment, -/obj/effect/floor_decal/corner/red{ - dir = 5 - }, -/obj/structure/table/standard, -/obj/random/clipboard, -/obj/item/pen, -/obj/item/pen/red{ - pixel_x = -1; - pixel_y = 3 - }, -/obj/item/pen/blue{ - pixel_x = -5; - pixel_y = -1 - }, -/turf/simulated/floor/tiled/dark, -/area/rnd/rnd_sec) -"hBr" = ( -/turf/simulated/wall/r_wall/hull, -/area/maintenance/firstdeck/forestarboard) -"hCb" = ( -/obj/item/device/radio/intercom{ - pixel_y = 23 - }, -/obj/structure/filingcabinet/chestdrawer, -/obj/item/folder/nt, -/obj/item/folder/nt, -/obj/item/folder/nt, -/obj/item/folder/nt, -/obj/effect/floor_decal/corner/red/three_quarters{ - dir = 1 - }, -/turf/simulated/floor/tiled/dark, -/area/rnd/rnd_sec) -"hCE" = ( -/obj/item/device/radio/intercom/department/security{ - dir = 1; - pixel_y = -28 - }, -/turf/simulated/floor/tiled/dark, -/area/security/evidence) -"hDp" = ( -/obj/structure/filingcabinet/chestdrawer, -/obj/machinery/light_switch{ - pixel_x = -24; - pixel_y = 6 - }, -/obj/machinery/button/windowtint{ - id = "bo_windows"; - pixel_x = -24; - pixel_y = -6 - }, -/turf/simulated/floor/tiled/dark, -/area/security/bo) -"hDV" = ( -/obj/effect/floor_decal/techfloor{ - dir = 10 - }, -/obj/structure/table/standard{ - name = "plastic table frame" - }, -/obj/item/modular_computer/laptop/preset/custom_loadout/standard, -/obj/item/device/radio/intercom/department/medbay{ - dir = 4; - pixel_x = -24 - }, -/turf/simulated/floor/tiled/techfloor, -/area/crew_quarters/safe_room/medical) -"hEU" = ( -/obj/effect/floor_decal/corner/paleblue{ - dir = 9 - }, -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply, -/turf/simulated/floor/tiled/white, -/area/medical/medicalhallway) -"hFb" = ( -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 1; - icon_state = "warning" - }, -/turf/simulated/floor/tiled, -/area/rnd/entry) -"hFu" = ( -/obj/structure/table/rack, -/obj/effect/floor_decal/industrial/outline/grey, -/obj/structure/window/reinforced{ - dir = 8 - }, -/obj/item/gun/energy/laser/secure, -/obj/item/gun/energy/laser/secure, -/obj/item/gun/energy/laser/secure, -/turf/simulated/floor/tiled/techfloor/grid, -/area/command/armoury/tactical) -"hGb" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 8 - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 1; - icon_state = "warning" - }, -/turf/simulated/floor/tiled, -/area/rnd/entry) -"hGs" = ( -/turf/simulated/wall/prepainted, -/area/security/locker) -"hIb" = ( -/obj/structure/sign/directions/supply{ - pixel_y = -4 - }, -/obj/structure/sign/directions/engineering{ - pixel_y = 3 - }, -/turf/simulated/wall/prepainted, -/area/rnd/development) -"hIl" = ( -/obj/structure/bed/chair/padded/blue, -/turf/simulated/floor/tiled/dark, -/area/command/conference) -"hJb" = ( -/obj/structure/table/standard, -/obj/machinery/cell_charger, -/obj/item/stock_parts/capacitor, -/obj/item/stock_parts/capacitor, -/obj/random/powercell, -/obj/random/powercell, -/obj/random/powercell, -/obj/item/folder/nt, -/obj/item/stack/nanopaste, -/obj/machinery/alarm{ - alarm_id = "xenobio1_alarm"; - pixel_y = 24 - }, -/obj/machinery/light{ - dir = 1 - }, -/turf/simulated/floor/tiled/white/monotile, -/area/rnd/development) -"hJq" = ( -/obj/effect/floor_decal/corner/blue/three_quarters{ - dir = 1 - }, -/obj/structure/sign/double/solgovflag/right{ - pixel_y = 32 - }, -/turf/simulated/floor/tiled/dark, -/area/command/conference) -"hKb" = ( -/obj/structure/disposalpipe/segment, -/obj/effect/floor_decal/industrial/warning{ - dir = 4; - icon_state = "warning" - }, -/obj/structure/bed/chair/comfy/lime{ - dir = 1 - }, -/turf/simulated/floor/tiled/white, -/area/rnd/development) -"hLf" = ( -/obj/machinery/light{ - dir = 1 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/security/armoury) -"hLD" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/tiled, -/area/hallway/primary/firstdeck/fore) -"hOb" = ( -/obj/structure/table/rack, -/obj/effect/floor_decal/industrial/outline/grey, -/obj/structure/window/reinforced, -/obj/structure/window/reinforced{ - dir = 8 - }, -/obj/item/gun/energy/ionrifle, -/obj/item/gun/energy/ionrifle/small, -/turf/simulated/floor/tiled/techfloor/grid, -/area/command/armoury/tactical) -"hOZ" = ( -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/firstdeck/forestarboard) -"hPb" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 8 - }, -/obj/structure/catwalk, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 8 - }, -/obj/random_multi/single_item/runtime, -/turf/simulated/floor/plating, -/area/maintenance/firstdeck/centralport) -"hPt" = ( -/obj/machinery/light, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 1 - }, -/turf/simulated/floor/tiled/white, -/area/medical/staging) -"hQb" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/floor_decal/industrial/outline/grey, -/obj/machinery/portable_atmospherics/powered/scrubber, -/turf/simulated/floor/tiled/techfloor, -/area/engineering/hardstorage/aux) -"hQd" = ( -/obj/machinery/light{ - dir = 8 - }, -/obj/machinery/disposal, -/obj/structure/disposalpipe/trunk{ - dir = 4 - }, -/obj/effect/floor_decal/corner/red{ - dir = 9 - }, -/obj/effect/floor_decal/industrial/hatch/yellow, -/turf/simulated/floor/tiled/dark, -/area/rnd/rnd_sec) -"hUb" = ( -/obj/machinery/door/blast/shutters{ - density = 0; - dir = 4; - icon_state = "shutter0"; - id_tag = "concheckwindow"; - name = "RnD Checkpoint Shutters"; - opacity = 0 - }, -/obj/effect/wallframe_spawn/reinforced/polarized{ - id = "rndpost" - }, -/obj/structure/cable/green{ - d2 = 2; - icon_state = "0-2" - }, -/turf/simulated/floor/plating, -/area/rnd/rnd_sec) -"hUc" = ( -/obj/structure/table/rack{ - dir = 4 - }, -/obj/effect/floor_decal/industrial/outline/grey, -/obj/item/storage/box/handcuffs{ - pixel_x = 3; - pixel_y = 3 - }, -/obj/item/storage/box/handcuffs, -/turf/simulated/floor/tiled/dark/monotile, -/area/security/storage) -"hUE" = ( -/obj/machinery/atmospherics/tvalve/digital{ - dir = 4; - id_tag = "fuelmode" - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 1 - }, -/obj/effect/floor_decal/industrial/outline/red, -/turf/simulated/floor/tiled/techfloor, -/area/thruster/d1starboard) -"hUM" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 4 - }, -/obj/effect/floor_decal/corner/blue{ - dir = 9 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/firstdeck/fore) -"hVb" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 8; - icon_state = "warning" - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/recharge_station, -/turf/simulated/floor/tiled, -/area/rnd/entry) -"hWb" = ( -/obj/structure/cable/green{ - d2 = 8; - icon_state = "0-8" - }, -/obj/machinery/power/apc{ - dir = 4; - name = "east bump"; - pixel_x = 24 - }, -/obj/effect/floor_decal/industrial/outline/grey, -/obj/machinery/portable_atmospherics/powered/scrubber, -/turf/simulated/floor/tiled/techfloor, -/area/engineering/hardstorage/aux) -"hXI" = ( -/obj/structure/railing/mapped{ - dir = 4; - icon_state = "railing0-1" - }, -/obj/random_multi/single_item/skelestand/maint, -/turf/simulated/floor/plating, -/area/maintenance/firstdeck/centralport) -"hYM" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/hologram/holopad, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled/monotile, -/area/hallway/primary/firstdeck/aft) -"hZb" = ( -/obj/machinery/door/blast/regular{ - density = 0; - dir = 4; - icon_state = "pdoor0"; - id_tag = "Biohazard"; - name = "Biohazard Shutter"; - opacity = 0 - }, -/obj/structure/cable/green{ - d2 = 2; - icon_state = "0-2" - }, -/obj/effect/wallframe_spawn/reinforced/no_grille, -/turf/simulated/floor/plating, -/area/rnd/development) -"ibb" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 4; - icon_state = "warning" - }, -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/turf/simulated/floor/tiled/white, -/area/rnd/development) -"iej" = ( -/obj/effect/wallframe_spawn/reinforced_phoron, -/obj/machinery/door/firedoor, -/turf/simulated/floor/reinforced, -/area/thruster/d1port) -"igb" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/firstdeck/centralport) -"igK" = ( -/obj/machinery/atmospherics/pipe/simple/visible/fuel, -/turf/simulated/wall/ocp_wall, -/area/thruster/d1port) -"ijb" = ( -/obj/effect/wallframe_spawn/reinforced/polarized{ - id = "rndpost" - }, -/obj/machinery/door/blast/shutters{ - density = 0; - dir = 2; - icon_state = "shutter0"; - id_tag = "outercheckwindow"; - name = "RnD Checkpoint Outer Shutters"; - opacity = 0 - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/structure/cable/green{ - d2 = 2; - icon_state = "0-2" - }, -/turf/simulated/floor/plating, -/area/rnd/rnd_sec) -"ikZ" = ( -/obj/machinery/atmospherics/valve/shutoff/supply, -/obj/effect/floor_decal/industrial/shutoff, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/firstdeck/centralstarboard) -"ila" = ( -/obj/effect/floor_decal/industrial/warning, -/obj/machinery/atmospherics/tvalve/mirrored/digital{ - dir = 4; - id_tag = "fuelmode" - }, -/obj/effect/floor_decal/industrial/outline/red, -/turf/simulated/floor/tiled/techfloor, -/area/thruster/d1port) -"ilb" = ( -/obj/machinery/door/blast/shutters{ - density = 0; - dir = 4; - icon_state = "shutter0"; - id_tag = "concheckwindow"; - name = "RnD Checkpoint Shutters"; - opacity = 0 - }, -/obj/structure/table/steel_reinforced, -/obj/machinery/door/window/brigdoor/northleft{ - dir = 8; - name = "Research Checkpoint" - }, -/obj/machinery/door/window/southleft{ - dir = 4; - name = "Research Checkpoint" - }, -/obj/machinery/door/firedoor, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/rnd/rnd_sec) -"ilh" = ( -/obj/effect/floor_decal/corner/red{ - dir = 9 - }, -/obj/machinery/firealarm{ - pixel_y = 24 - }, -/obj/structure/bed/chair/padded/red{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark, -/area/security/questioning) -"imb" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 8; - icon_state = "warning" - }, -/turf/simulated/floor/tiled, -/area/rnd/entry) -"imF" = ( -/obj/structure/sign/warning/biohazard, -/turf/simulated/wall/r_wall/hull, -/area/maintenance/firstdeck/aftport) -"imK" = ( -/obj/effect/wallframe_spawn/reinforced/polarized/no_grille{ - id = "conference_window" - }, -/turf/simulated/floor/plating, -/area/command/conference) -"ipc" = ( -/obj/structure/noticeboard{ - pixel_y = 32 - }, -/obj/effect/floor_decal/corner/paleblue/mono, -/obj/machinery/recharger, -/obj/structure/table/glass, -/obj/random/smokes, -/turf/simulated/floor/tiled/white/monotile, -/area/medical/medpaperworkoffice) -"iqb" = ( -/obj/structure/bed/chair/comfy/lime, -/turf/simulated/floor/tiled/dark, -/area/rnd/misc_lab) -"irb" = ( -/obj/structure/table/standard, -/obj/item/disk/tech_disk, -/obj/item/disk/tech_disk, -/obj/item/disk/design_disk, -/obj/item/disk/design_disk, -/obj/item/reagent_containers/dropper{ - pixel_y = -4 - }, -/obj/item/stock_parts/manipulator, -/obj/item/stock_parts/scanning_module, -/obj/item/stock_parts/matter_bin, -/obj/item/stock_parts/console_screen, -/obj/item/stock_parts/micro_laser, -/obj/item/stock_parts/scanning_module{ - pixel_x = 2; - pixel_y = 3 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/white/monotile, -/area/rnd/development) -"isb" = ( -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 4 - }, -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/hologram/holopad, -/turf/simulated/floor/tiled/white, -/area/rnd/development) -"isR" = ( -/obj/effect/floor_decal/corner/blue{ - dir = 6 - }, -/obj/machinery/alarm{ - dir = 4; - pixel_x = -22 - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/tiled/dark, -/area/command/conference) -"itb" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 5; - icon_state = "warning" - }, -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/turf/simulated/floor/tiled/white, -/area/rnd/development) -"itr" = ( -/obj/structure/sign/warning/high_voltage{ - dir = 8 - }, -/turf/simulated/wall/prepainted, -/area/engineering/auxpower) -"iui" = ( -/obj/machinery/door/airlock/command{ - name = "First Deck Teleporter" - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/door/firedoor, -/turf/simulated/floor/tiled/steel_ridged, -/area/teleporter/firstdeck) -"iuB" = ( -/obj/machinery/light, -/turf/simulated/floor/tiled, -/area/security/brig) -"ivf" = ( -/obj/random/obstruction, -/turf/simulated/floor/tiled/techfloor/grid, -/area/maintenance/firstdeck/foreport) -"ivh" = ( -/obj/machinery/status_display, -/turf/simulated/wall/prepainted, -/area/rnd/misc_lab) -"ivT" = ( -/obj/effect/floor_decal/corner/paleblue{ - dir = 5 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/firstdeck/aft) -"ixb" = ( -/obj/structure/disposalpipe/segment, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/firstdeck/centralport) -"ixf" = ( -/obj/effect/floor_decal/corner/paleblue{ - dir = 9 - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden, -/turf/simulated/floor/tiled/white, -/area/medical/sleeper) -"ixB" = ( -/obj/structure/closet/emcloset, -/obj/random/drinkbottle, -/obj/machinery/firealarm{ - dir = 8; - pixel_x = -24; - pixel_y = 0 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/crew_quarters/safe_room/firstdeck) -"iyb" = ( -/obj/structure/table/steel, -/obj/effect/floor_decal/corner/yellow{ - dir = 5 - }, -/obj/machinery/recharger/wallcharger{ - pixel_y = 24 - }, -/obj/machinery/camera/network/engineering{ - c_tag = "Engineering - Robotics Office" - }, -/obj/item/book/manual/ripley_build_and_repair, -/obj/item/book/manual/robotics_cyborgs, -/turf/simulated/floor/tiled, -/area/assembly/robotics/office) -"izb" = ( -/obj/structure/cable/green{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/turf/simulated/floor/tiled/dark, -/area/rnd/rnd_sec) -"izd" = ( -/obj/machinery/atmospherics/pipe/simple/visible/cyan, -/obj/machinery/meter, -/obj/effect/wallframe_spawn/reinforced_phoron, -/obj/machinery/door/firedoor, -/turf/simulated/floor/tiled/techfloor, -/area/thruster/d1starboard) -"iAS" = ( -/obj/structure/table/rack, -/obj/effect/floor_decal/industrial/outline/grey, -/obj/structure/window/reinforced, -/obj/structure/window/reinforced{ - dir = 4 - }, -/obj/item/cell/guncell/medium, -/obj/item/cell/guncell/medium, -/obj/item/cell/guncell/medium, -/obj/item/cell/guncell/medium, -/obj/item/cell/guncell/medium, -/obj/item/cell/guncell/medium, -/obj/item/gun/energy/k342, -/obj/item/gun/energy/k342, -/turf/simulated/floor/tiled/techfloor/grid, -/area/command/armoury/tactical) -"iAZ" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/catwalk_plated, -/turf/simulated/floor/plating, -/area/hallway/primary/firstdeck/fore) -"iBb" = ( -/obj/structure/table/steel, -/obj/machinery/cell_charger, -/obj/random/powercell, -/obj/random/powercell, -/obj/random/powercell, -/obj/item/screwdriver{ - pixel_y = 15 - }, -/obj/machinery/light{ - dir = 1 - }, -/obj/item/device/radio/intercom{ - dir = 4; - pixel_x = -21 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/command/armoury) -"iBT" = ( -/turf/simulated/floor/reinforced/hydrogen, -/area/thruster/d1port) -"iCj" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/disposalpipe/segment, -/obj/effect/catwalk_plated, -/turf/simulated/floor/plating, -/area/hallway/primary/firstdeck/fore) -"iDb" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/light, -/turf/simulated/floor/tiled/dark, -/area/security/questioning) -"iEb" = ( -/obj/effect/floor_decal/corner/blue{ - dir = 9 - }, -/turf/simulated/floor/tiled/dark, -/area/command/conference) -"iFb" = ( -/obj/structure/table/glass, -/obj/machinery/firealarm{ - dir = 4; - pixel_x = 26 - }, -/turf/simulated/floor/tiled/white, -/area/security/detectives_office) -"iGb" = ( -/obj/effect/floor_decal/floordetail/edgedrain, -/obj/effect/floor_decal/corner/paleblue{ - dir = 5 - }, -/obj/machinery/organ_printer/flesh/mapped, -/turf/simulated/floor/tiled/white, -/area/medical/surgery) -"iHb" = ( -/obj/machinery/door/blast/regular{ - density = 0; - dir = 4; - icon_state = "pdoor0"; - id_tag = "Biohazard"; - name = "Biohazard Shutter"; - opacity = 0 - }, -/obj/structure/cable/green, -/obj/effect/wallframe_spawn/reinforced/no_grille, -/turf/simulated/floor/plating, -/area/rnd/development) -"iHX" = ( -/obj/effect/floor_decal/sign/or2, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/white, -/area/medical/sleeper) -"iKb" = ( -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 4 - }, -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/white, -/area/rnd/development) -"iLb" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 1 - }, -/turf/simulated/floor/tiled/white, -/area/rnd/development) -"iLA" = ( -/obj/effect/floor_decal/industrial/outline/grey, -/obj/machinery/light, -/turf/simulated/floor/tiled/dark/monotile, -/area/security/storage) -"iLB" = ( -/obj/machinery/door/airlock/maintenance, -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/simple/hidden/universal, -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 8 - }, -/turf/simulated/floor/plating, -/area/maintenance/firstdeck/centralstarboard) -"iMW" = ( -/obj/effect/floor_decal/corner/paleblue{ - dir = 5 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/white, -/area/medical/exam_room) -"iNb" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/disposalpipe/segment, -/obj/machinery/alarm{ - dir = 4; - pixel_x = -23 - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/firstdeck/centralport) -"iOh" = ( -/obj/effect/floor_decal/industrial/outline/grey, -/obj/random_multi/single_item/piano, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/firstdeck/centralport) -"iPb" = ( -/obj/machinery/door/blast/regular{ - density = 0; - icon_state = "pdoor0"; - id_tag = "Biohazard"; - name = "Biohazard Shutter"; - opacity = 0 - }, -/obj/effect/floor_decal/industrial/hatch/yellow, -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/multi_tile/glass/research{ - id_tag = "researchdoor_interior"; - name = "Research Division" - }, -/turf/simulated/floor/tiled/white/monotile, -/area/rnd/entry) -"iPj" = ( -/obj/effect/floor_decal/corner/blue{ - dir = 9 - }, -/obj/machinery/camera/network/first_deck{ - c_tag = "Briefing Room"; - dir = 8 - }, -/turf/simulated/floor/tiled/dark, -/area/command/conference) -"iPV" = ( -/obj/structure/cable/green{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, -/obj/structure/disposalpipe/segment{ - dir = 4; - icon_state = "pipe-c" - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/firstdeck/centralstarboard) -"iQb" = ( -/obj/machinery/door/blast/regular{ - density = 0; - icon_state = "pdoor0"; - id_tag = "Biohazard"; - name = "Biohazard Shutter"; - opacity = 0 - }, -/obj/effect/floor_decal/industrial/hatch/yellow, -/obj/machinery/door/firedoor, -/turf/simulated/floor/tiled/white/monotile, -/area/rnd/entry) -"iRb" = ( -/obj/machinery/status_display, -/turf/simulated/wall/prepainted, -/area/rnd/development) -"iSb" = ( -/obj/structure/table/standard, -/obj/structure/window/reinforced{ - dir = 8 - }, -/obj/structure/window/reinforced{ - dir = 2 - }, -/obj/item/device/integrated_electronics/wirer, -/obj/item/device/integrated_electronics/debugger{ - pixel_x = -5 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/rnd/misc_lab) -"iTC" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/effect/catwalk_plated, -/obj/structure/disposalpipe/segment{ - dir = 1; - icon_state = "pipe-c" - }, -/turf/simulated/floor/plating, -/area/hallway/primary/firstdeck/aft) -"iTP" = ( -/obj/structure/cable/green{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 8 - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/structure/disposalpipe/segment{ - dir = 4; - icon_state = "pipe-c" - }, -/turf/simulated/floor/tiled, -/area/security/wing) -"iUb" = ( -/obj/effect/floor_decal/corner/research/half, -/obj/machinery/light, -/turf/simulated/floor/tiled/monotile, -/area/hallway/primary/firstdeck/aft) -"iVb" = ( -/obj/structure/disposalpipe/segment, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/effect/floor_decal/industrial/warning, -/obj/machinery/atmospherics/valve/shutoff/supply, -/obj/effect/floor_decal/industrial/shutoff, -/obj/machinery/atmospherics/valve/shutoff/scrubbers, -/turf/simulated/floor/tiled, -/area/hallway/primary/firstdeck/aft) -"iVM" = ( -/obj/structure/bed/chair/padded/red{ - dir = 1 - }, -/turf/simulated/floor/tiled, -/area/security/detectives_office) -"iXb" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 1 - }, -/obj/structure/disposalpipe/segment, -/obj/effect/floor_decal/corner/research{ - dir = 10 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/firstdeck/aft) -"iZb" = ( -/obj/structure/disposalpipe/segment{ - dir = 8; - icon_state = "pipe-c" - }, -/obj/effect/floor_decal/corner/research{ - dir = 10 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/firstdeck/aft) -"jab" = ( -/obj/machinery/alarm{ - dir = 1; - pixel_y = -22 - }, -/obj/machinery/camera/network/first_deck{ - c_tag = "First Deck Hallway - Aft"; - dir = 1 - }, -/obj/machinery/light, -/obj/effect/floor_decal/corner/research/half, -/turf/simulated/floor/tiled/monotile, -/area/hallway/primary/firstdeck/aft) -"jbk" = ( -/obj/structure/lattice, -/turf/simulated/wall/r_wall/hull, -/area/thruster/d1port) -"jbR" = ( -/obj/machinery/atmospherics/unary/vent_pump/tank{ - dir = 8; - external_pressure_bound = 0; - external_pressure_bound_default = 0; - icon_state = "map_vent_in"; - id_tag = "d1po2_out"; - initialize_directions = 1; - internal_pressure_bound = 4000; - internal_pressure_bound_default = 4000; - pressure_checks = 2; - pressure_checks_default = 2; - pump_direction = 0; - use_power = 1 - }, -/turf/simulated/floor/reinforced/oxygen, -/area/thruster/d1port) -"jcb" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/turf/simulated/floor/tiled/white/monotile, -/area/medical/surgery) -"jcg" = ( -/obj/effect/floor_decal/corner/red{ - dir = 9 - }, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/tiled, -/area/security/locker) -"jcu" = ( -/obj/effect/floor_decal/spline/plain/blue{ - dir = 5 - }, -/obj/machinery/light/spot{ - dir = 8 - }, -/obj/machinery/camera/network/medbay{ - c_tag = "Infirmary - Treatment Centre"; - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/medical/sleeper) -"jcO" = ( -/obj/structure/sign/xenobio_1{ - dir = 1 - }, -/turf/simulated/wall/prepainted, -/area/rnd/research) -"jeb" = ( -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/white, -/area/rnd/research) -"jei" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/structure/catwalk, -/obj/structure/disposalpipe/segment{ - dir = 4; - icon_state = "pipe-c" - }, -/turf/simulated/floor/plating, -/area/maintenance/firstdeck/foreport) -"jfb" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/rnd/research) -"jfn" = ( -/obj/machinery/computer/modular/preset/security{ - dir = 4; - icon_state = "console" - }, -/turf/simulated/floor/tiled, -/area/security/detectives_office) -"jft" = ( -/obj/effect/floor_decal/industrial/outline/grey, -/obj/structure/closet/bombclosetsecurity, -/turf/simulated/floor/tiled/dark/monotile, -/area/security/storage) -"jhb" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/glass/civilian, -/turf/simulated/floor/tiled/steel_ridged, -/area/hallway/primary/firstdeck/aft) -"jhf" = ( -/obj/effect/floor_decal/industrial/outline/grey, -/obj/machinery/recharger/wallcharger{ - dir = 8; - pixel_x = 23; - pixel_y = -3 - }, -/obj/machinery/fabricator/hacked{ - desc = "A typical autolathe. This one is hacked."; - name = "autolathe" - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/security/armoury) -"jhq" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/white/monotile, -/area/medical/surgery2) -"jhS" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/visible/fuel{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor, -/area/thruster/d1starboard) -"jiq" = ( -/obj/structure/iv_drip, -/obj/effect/floor_decal/floordetail/edgedrain{ - dir = 8 - }, -/obj/effect/floor_decal/corner/paleblue{ - dir = 6 - }, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 4 - }, -/obj/machinery/power/apc{ - dir = 8; - name = "west bump"; - pixel_x = -24 - }, -/obj/structure/cable/green{ - d2 = 4; - icon_state = "0-4" - }, -/turf/simulated/floor/tiled/white, -/area/medical/surgery2) -"jjb" = ( -/obj/effect/floor_decal/industrial/hatch/yellow, -/obj/machinery/disposal, -/obj/structure/disposalpipe/trunk{ - dir = 4 - }, -/turf/simulated/floor/tiled/white/monotile, -/area/rnd/development) -"jjh" = ( -/turf/simulated/wall/r_wall/hull, -/area/maintenance/firstdeck/centralport) -"jjK" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/catwalk, -/obj/machinery/meter, -/turf/simulated/floor/plating, -/area/maintenance/firstdeck/forestarboard) -"jkb" = ( -/obj/structure/disposalpipe/segment{ - dir = 8; - icon_state = "pipe-c" - }, -/obj/machinery/light_switch{ - pixel_x = -24; - pixel_y = -24 - }, -/turf/simulated/floor/tiled/white, -/area/rnd/development) -"jkm" = ( -/obj/structure/table/rack{ - dir = 8 - }, -/obj/random/maintenance/solgov, -/obj/random/maintenance/solgov, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/firstdeck/forestarboard) -"jlb" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/effect/floor_decal/corner/paleblue/half, -/turf/simulated/floor/tiled/monotile, -/area/hallway/primary/firstdeck/aft) -"jnd" = ( -/obj/effect/floor_decal/industrial/outline/grey, -/obj/structure/closet/crate/internals, -/obj/item/clothing/mask/gas{ - pixel_x = 3; - pixel_y = 3 - }, -/obj/item/clothing/mask/gas{ - pixel_x = 3; - pixel_y = 3 - }, -/obj/item/clothing/mask/gas, -/obj/item/clothing/mask/gas, -/obj/item/clothing/mask/gas{ - pixel_x = -3; - pixel_y = -3 - }, -/obj/item/clothing/mask/gas{ - pixel_x = -3; - pixel_y = -3 - }, -/obj/item/clothing/mask/gas{ - pixel_x = -3; - pixel_y = -3 - }, -/obj/item/clothing/mask/gas{ - pixel_x = -3; - pixel_y = -3 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/techfloor/grid, -/area/command/armoury) -"job" = ( -/obj/machinery/alarm{ - dir = 1; - pixel_y = -22 - }, -/obj/effect/floor_decal/corner/paleblue{ - dir = 10 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/firstdeck/aft) -"jpt" = ( -/obj/effect/floor_decal/corner/red{ - dir = 10 - }, -/turf/simulated/floor/tiled, -/area/security/wing) -"jqb" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/security/locker) -"jqn" = ( -/obj/machinery/door/blast/shutters{ - density = 0; - dir = 4; - icon_state = "shutter0"; - id_tag = "operation_hallway_shutters"; - name = "Operation Checkpoint Shutters"; - opacity = 0 - }, -/obj/effect/floor_decal/corner/red/mono, -/turf/simulated/floor/tiled/monotile, -/area/hallway/primary/firstdeck/aft) -"jqD" = ( -/obj/effect/wallframe_spawn/reinforced/polarized{ - id = "forensicswindow" - }, -/obj/structure/cable/green, -/turf/simulated/floor/plating, -/area/security/detectives_office) -"jqF" = ( -/obj/structure/noticeboard{ - pixel_y = 32 - }, -/turf/simulated/floor/tiled/monotile, -/area/security/detectives_office) -"jrH" = ( -/obj/structure/sign/warning/secure_area/armory{ - dir = 8 - }, -/turf/simulated/wall/r_wall/prepainted, -/area/command/armoury/access) -"jsb" = ( -/obj/structure/disposalpipe/segment, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/firstdeck/centralport) -"jsk" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/glass/civilian, -/obj/effect/floor_decal/corner/green{ - dir = 8 - }, -/turf/simulated/floor/tiled/steel_ridged, -/area/hallway/primary/firstdeck/center) -"jtb" = ( -/obj/machinery/door/airlock/maintenance{ - name = "Research Maintenance Access" - }, -/obj/machinery/door/firedoor, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/white/monotile, -/area/rnd/locker) -"jub" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/white, -/area/rnd/locker) -"jul" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 1 - }, -/obj/item/device/radio/intercom/department/medbay{ - dir = 1; - pixel_y = -28 - }, -/turf/simulated/floor/tiled/white, -/area/medical/staging) -"jvb" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/white, -/area/rnd/research) -"jxa" = ( -/turf/simulated/floor/tiled/dark, -/area/medical/morgue/autopsy) -"jxb" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/white/monotile, -/area/medical/surgery) -"jxG" = ( -/obj/effect/floor_decal/corner/paleblue/half{ - dir = 4 - }, -/turf/simulated/floor/tiled/monotile, -/area/hallway/primary/firstdeck/fore) -"jyb" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply, -/obj/machinery/hologram/holopad, -/turf/simulated/floor/tiled/white, -/area/rnd/research) -"jzb" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 1 - }, -/obj/structure/disposalpipe/segment{ - dir = 4; - icon_state = "pipe-c" - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/effect/floor_decal/corner/research, -/turf/simulated/floor/tiled/white, -/area/rnd/research) -"jAb" = ( -/obj/structure/table/standard, -/obj/structure/window/reinforced{ - dir = 2 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/rnd/misc_lab) -"jAl" = ( -/obj/effect/floor_decal/techfloor{ - dir = 4 - }, -/obj/effect/floor_decal/corner/blue{ - dir = 1 - }, -/turf/simulated/floor/tiled/dark, -/area/command/armoury) -"jAr" = ( -/obj/effect/floor_decal/corner/red{ - dir = 10 - }, -/turf/simulated/floor/tiled, -/area/security/detectives_office) -"jAM" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/simulated/floor/tiled/monotile, -/area/hallway/primary/firstdeck/aft) -"jBk" = ( -/obj/effect/floor_decal/corner/red{ - dir = 9 - }, -/obj/machinery/power/apc{ - dir = 8; - name = "west bump"; - pixel_x = -24 - }, -/obj/structure/cable/green{ - d2 = 4; - icon_state = "0-4" - }, -/turf/simulated/floor/tiled/dark, -/area/security/questioning) -"jBW" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/disposalpipe/segment{ - dir = 4; - icon_state = "pipe-c" - }, -/obj/effect/floor_decal/corner/red{ - dir = 9 - }, -/turf/simulated/floor/tiled, -/area/security/locker) -"jCM" = ( -/turf/simulated/wall/prepainted, -/area/medical/morgue/autopsy) -"jCU" = ( -/obj/effect/floor_decal/corner/paleblue{ - dir = 5 - }, -/obj/machinery/button/blast_door{ - id_tag = "infirm_pub"; - name = "Infirmary Public Hallway Lockdown"; - pixel_x = 7; - pixel_y = -34; - req_access = list("ACCESS_MEDICAL") - }, -/obj/machinery/button/blast_door{ - id_tag = "infirm_windows"; - name = "Infirmary Windows Lockdown"; - pixel_x = -7; - pixel_y = -34; - req_access = list("ACCESS_MEDICAL") - }, -/obj/machinery/button/blast_door{ - id_tag = "inf_recep_window"; - name = "Infirmary Reception Lockdown"; - pixel_x = 7; - pixel_y = -24; - req_access = list("ACCESS_MEDICAL") - }, -/obj/machinery/button/blast_door{ - id_tag = "infirm_stage"; - name = "Infirmary Staging Lockdown"; - pixel_x = -7; - pixel_y = -24; - req_access = list("ACCESS_MEDICAL") - }, -/turf/simulated/floor/tiled/white, -/area/medical/staging) -"jDX" = ( -/obj/machinery/atmospherics/pipe/manifold/visible/fuel{ - dir = 8 - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor, -/area/thruster/d1starboard) -"jGb" = ( -/obj/effect/floor_decal/corner/research{ - dir = 5 - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/obj/machinery/firealarm{ - pixel_y = 24 - }, -/obj/structure/closet/secure_closet/hydroponics_torch, -/turf/simulated/floor/tiled/white, -/area/rnd/locker) -"jHb" = ( -/obj/effect/floor_decal/corner/research{ - dir = 5 - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/structure/closet/l3closet/scientist/multi, -/turf/simulated/floor/tiled/white, -/area/rnd/locker) -"jHp" = ( -/obj/structure/flora/pottedplant/minitree, -/obj/machinery/firealarm{ - pixel_y = 24 - }, -/obj/effect/floor_decal/corner/red/three_quarters{ - dir = 8 - }, -/obj/machinery/alarm{ - dir = 4; - pixel_x = -22 - }, -/turf/simulated/floor/tiled/dark, -/area/rnd/rnd_sec) -"jIb" = ( -/obj/machinery/light/small{ - dir = 4; - pixel_y = 8 - }, -/obj/effect/floor_decal/corner/research{ - dir = 5 - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/structure/closet/bombcloset, -/turf/simulated/floor/tiled/white, -/area/rnd/locker) -"jIG" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/firstdeck/foreport) -"jJb" = ( -/obj/machinery/requests_console{ - announcementConsole = 1; - department = "Science"; - departmentType = 2; - name = "Science Requests Console"; - pixel_x = -30 - }, -/obj/effect/floor_decal/corner/research{ - dir = 5 - }, -/turf/simulated/floor/tiled/white, -/area/rnd/research) -"jKb" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/tiled/white, -/area/rnd/research) -"jMb" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/obj/effect/floor_decal/corner/research{ - dir = 5 - }, -/turf/simulated/floor/tiled/white, -/area/rnd/research) -"jMx" = ( -/obj/machinery/atmospherics/unary/outlet_injector{ - dir = 1; - frequency = 1441; - id = "d1po2_in"; - injecting = 1; - use_power = 1 - }, -/turf/simulated/floor/reinforced/oxygen, -/area/thruster/d1port) -"jNb" = ( -/obj/machinery/atmospherics/unary/vent_pump/on, -/obj/effect/floor_decal/corner/research{ - dir = 5 - }, -/obj/machinery/alarm{ - pixel_y = 24 - }, -/turf/simulated/floor/tiled/white, -/area/rnd/research) -"jON" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/disposalpipe/segment, -/obj/structure/cable/green{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/firealarm{ - dir = 4; - pixel_x = 21 - }, -/turf/simulated/floor/tiled/monotile, -/area/security/wing) -"jPb" = ( -/obj/item/modular_computer/telescreen/preset/generic{ - pixel_y = 32 - }, -/obj/effect/floor_decal/corner/research{ - dir = 5 - }, -/turf/simulated/floor/tiled/white, -/area/rnd/research) -"jPY" = ( -/obj/effect/floor_decal/corner/blue, -/obj/machinery/power/apc{ - dir = 8; - name = "west bump"; - pixel_x = -24 - }, -/obj/structure/cable/green, -/turf/simulated/floor/tiled/dark, -/area/command/armoury) -"jQb" = ( -/obj/effect/floor_decal/corner/research{ - dir = 1 - }, -/turf/simulated/floor/tiled/white, -/area/rnd/research) -"jQY" = ( -/obj/effect/floor_decal/techfloor/corner{ - dir = 8 - }, -/obj/effect/floor_decal/techfloor{ - dir = 1 - }, -/obj/machinery/firealarm{ - dir = 1; - pixel_y = -24 - }, -/obj/machinery/camera/network/command{ - c_tag = "Emergency Armory - Tactical"; - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/command/armoury/tactical) -"jRb" = ( -/obj/machinery/light{ - dir = 1 - }, -/obj/effect/floor_decal/corner/research{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/rnd/research) -"jTb" = ( -/obj/effect/floor_decal/corner/research{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/rnd/research) -"jTV" = ( -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/firstdeck/foreport) -"jUb" = ( -/obj/machinery/alarm{ - pixel_y = 24 - }, -/obj/machinery/atmospherics/unary/vent_pump/on, -/obj/machinery/light{ - dir = 1 - }, -/obj/effect/floor_decal/corner/research{ - dir = 5 - }, -/turf/simulated/floor/tiled/white, -/area/rnd/research) -"jUP" = ( -/obj/structure/sign/warning/high_voltage, -/turf/simulated/wall/prepainted, -/area/security/bo) -"jWb" = ( -/obj/effect/floor_decal/corner/research{ - dir = 5 - }, -/turf/simulated/floor/tiled/white, -/area/rnd/research) -"jXb" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, -/obj/machinery/light, -/turf/simulated/floor/tiled/white, -/area/rnd/research) -"jXp" = ( -/obj/machinery/door/airlock/civilian{ - name = "Emergency Storage" - }, -/obj/machinery/door/firedoor, -/turf/simulated/floor/tiled/techfloor/grid, -/area/maintenance/firstdeck/centralport) -"jYb" = ( -/obj/machinery/light{ - dir = 1 - }, -/obj/effect/floor_decal/corner/research{ - dir = 5 - }, -/turf/simulated/floor/tiled/white, -/area/rnd/research) -"jYD" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/turf/simulated/floor/tiled/white/monotile, -/area/medical/surgery2) -"jYZ" = ( -/obj/effect/floor_decal/corner/paleblue/half{ - dir = 1 - }, -/obj/structure/extinguisher_cabinet{ - pixel_y = 32 - }, -/turf/simulated/floor/tiled/monotile, -/area/hallway/primary/firstdeck/aft) -"jZb" = ( -/obj/effect/wallframe_spawn/reinforced/polarized/no_grille{ - id = "misc_lab" - }, -/turf/simulated/floor/plating, -/area/rnd/misc_lab) -"kab" = ( -/obj/structure/table/standard, -/turf/simulated/floor/tiled/white/monotile, -/area/rnd/misc_lab) -"kaS" = ( -/obj/structure/closet/crate/freezer, -/obj/random/medical, -/obj/effect/floor_decal/industrial/outline/grey, -/obj/random/medical, -/obj/random/medical, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/firstdeck/aftstarboard) -"kbb" = ( -/obj/structure/table/standard, -/obj/machinery/light_switch{ - pixel_x = -4; - pixel_y = 26 - }, -/obj/machinery/button/windowtint{ - id = "misc_lab"; - pixel_x = 4; - pixel_y = 26 - }, -/turf/simulated/floor/tiled/white/monotile, -/area/rnd/misc_lab) -"kcb" = ( -/obj/effect/floor_decal/floordetail/edgedrain{ - dir = 4 - }, -/obj/effect/floor_decal/corner/paleblue{ - dir = 9 - }, -/obj/effect/floor_decal/sign/or1, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/white, -/area/medical/surgery) -"kdb" = ( -/obj/machinery/power/apc{ - name = "south bump"; - pixel_y = -24 - }, -/obj/structure/cable/green, -/obj/structure/bed/chair/padded/yellow{ - dir = 8 - }, -/obj/machinery/alarm{ - dir = 8; - pixel_x = 25; - req_access = list(list("ACCESS_ENGINE_EQUIP","ACCESS_ATMOS")) - }, -/obj/effect/floor_decal/corner/paleblue/mono, -/obj/effect/floor_decal/corner/pink/border{ - dir = 4 - }, -/turf/simulated/floor/tiled/white/monotile, -/area/assembly/robotics/laboratory) -"kdd" = ( -/obj/structure/closet/emcloset, -/obj/effect/floor_decal/corner/green/mono, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/light, -/turf/simulated/floor/tiled/monotile, -/area/hallway/primary/firstdeck/center) -"kfb" = ( -/obj/structure/table/steel, -/obj/item/paper_bin, -/obj/item/pen, -/obj/item/folder/yellow, -/obj/item/tape_roll, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled, -/area/assembly/robotics/office) -"kfG" = ( -/turf/simulated/floor/tiled/techfloor/grid, -/area/thruster/d1starboard) -"kgi" = ( -/obj/structure/disposalpipe/segment{ - dir = 8; - icon_state = "pipe-c" - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/turf/simulated/floor/tiled/white, -/area/assembly/robotics/surgery) -"kgu" = ( -/obj/machinery/alarm{ - dir = 4; - pixel_x = -22 - }, -/turf/simulated/floor/tiled, -/area/security/detectives_office) -"khb" = ( -/obj/structure/table/standard, -/obj/structure/window/reinforced{ - dir = 2 - }, -/obj/item/device/integrated_electronics/analyzer{ - pixel_x = 6 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/rnd/misc_lab) -"kib" = ( -/obj/machinery/requests_console{ - department = "Robotics"; - departmentType = 2; - name = "Robotics RC"; - pixel_y = 30 - }, -/obj/effect/floor_decal/corner/yellow{ - dir = 5 - }, -/turf/simulated/floor/tiled, -/area/assembly/robotics/office) -"kiR" = ( -/obj/structure/table/steel, -/obj/machinery/recharger, -/obj/effect/floor_decal/corner/red/mono, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/recharger/wallcharger{ - dir = 4; - pixel_x = -23; - pixel_y = -3 - }, -/obj/item/book/manual/sol_sop, -/obj/random_multi/single_item/memo_security, -/turf/simulated/floor/tiled/monotile, -/area/security/locker) -"kku" = ( -/obj/machinery/door/blast/regular{ - density = 0; - icon_state = "pdoor0"; - id_tag = "xenobio2"; - name = "Containment Blast Doors"; - opacity = 0 - }, -/obj/structure/cable/green{ - d2 = 4; - icon_state = "0-4" - }, -/obj/effect/wallframe_spawn/reinforced, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/plating, -/area/rnd/xenobiology) -"kkN" = ( -/obj/effect/floor_decal/corner/research{ - dir = 10 - }, -/turf/simulated/floor/tiled/white, -/area/rnd/xenobiology/xenoflora) -"kld" = ( -/obj/random/single/cola, -/obj/machinery/light/small{ - dir = 8 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/crew_quarters/safe_room/firstdeck) -"kmE" = ( -/obj/machinery/mech_recharger, -/obj/machinery/firealarm{ - dir = 8; - pixel_x = -24 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/command/armoury) -"knb" = ( -/obj/effect/floor_decal/corner/yellow{ - dir = 10 - }, -/turf/simulated/floor/tiled, -/area/assembly/robotics/office) -"knu" = ( -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/effect/floor_decal/corner/green{ - dir = 10 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/firstdeck/center) -"kny" = ( -/obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/firstdeck/foreport) -"koX" = ( -/obj/machinery/firealarm{ - pixel_y = 24 - }, -/obj/effect/floor_decal/corner/paleblue{ - dir = 5 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/firstdeck/center) -"kpb" = ( -/obj/machinery/reagentgrinder, -/obj/item/reagent_containers/glass/beaker/large, -/turf/simulated/floor/tiled/dark, -/area/rnd/misc_lab) -"kqb" = ( -/obj/effect/floor_decal/corner/blue{ - dir = 6 - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/light{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/tiled/dark, -/area/command/conference) -"krc" = ( -/obj/effect/floor_decal/corner/red{ - dir = 9 - }, -/obj/machinery/keycard_auth/torch{ - pixel_x = -24 - }, -/obj/machinery/camera/network/security{ - c_tag = "Security Hallway - Center"; - dir = 4 - }, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/security/wing) -"ksh" = ( -/obj/machinery/firealarm{ - pixel_y = 24 - }, -/obj/machinery/light/small{ - dir = 1 - }, -/obj/item/taperoll/bog, -/turf/simulated/floor/tiled/freezer, -/area/crew_quarters/head/aux) -"kss" = ( -/obj/machinery/power/apc{ - dir = 1; - name = "north bump"; - pixel_y = 24 - }, -/obj/structure/cable/green{ - d2 = 2; - icon_state = "0-2" - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/security/storage) -"ksK" = ( -/obj/effect/floor_decal/techfloor{ - dir = 4 - }, -/obj/effect/floor_decal/techfloor{ - dir = 8 - }, -/obj/machinery/door/airlock/highsecurity{ - name = "Tactical Armory" - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/door/firedoor, -/turf/simulated/floor/tiled/techfloor/grid, -/area/command/armoury/tactical) -"kvb" = ( -/obj/effect/wallframe_spawn/reinforced/polarized/no_grille/regular{ - id = "roboticlab_window" - }, -/turf/simulated/floor/plating, -/area/assembly/robotics/office) -"kwb" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply, -/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers, -/turf/simulated/floor/tiled/white, -/area/rnd/research) -"kxs" = ( -/obj/structure/table/steel, -/obj/item/paper_bin{ - pixel_x = -3; - pixel_y = 7 - }, -/obj/item/pen/red, -/obj/item/pen/blue{ - pixel_x = 4; - pixel_y = 4 - }, -/obj/item/folder/red, -/turf/simulated/floor/tiled, -/area/security/detectives_office) -"kyb" = ( -/obj/machinery/door/airlock/maintenance, -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/tiled/steel_ridged, -/area/assembly/robotics/laboratory) -"kyt" = ( -/obj/effect/floor_decal/techfloor, -/obj/effect/floor_decal/techfloor{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/command/armoury) -"kzy" = ( -/obj/effect/floor_decal/techfloor, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/cyan{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor, -/area/crew_quarters/safe_room/firstdeck) -"kCb" = ( -/turf/simulated/wall/prepainted, -/area/medical/surgery) -"kCl" = ( -/obj/effect/floor_decal/corner/blue{ - dir = 9 - }, -/obj/machinery/light{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark, -/area/command/conference) -"kCN" = ( -/obj/structure/sign/warning/secure_area/armory{ - dir = 1; - pixel_y = -32 - }, -/turf/simulated/floor/tiled/dark, -/area/security/storage) -"kDb" = ( -/obj/machinery/light{ - dir = 4 - }, -/obj/structure/closet/crate/secure/biohazard/alt, -/obj/effect/floor_decal/corner/paleblue/mono, -/turf/simulated/floor/tiled/white/monotile, -/area/assembly/robotics/surgery) -"kFT" = ( -/obj/machinery/button/windowtint{ - id = "exam_windows"; - pixel_x = -5; - pixel_y = -24 - }, -/obj/effect/floor_decal/corner/paleblue{ - dir = 10 - }, -/obj/machinery/button/alternate/door{ - id_tag = "examdoor"; - name = "Examination Room Door Control"; - pixel_x = 5; - pixel_y = -24; - req_access = list("ACCESS_MEDICAL") - }, -/turf/simulated/floor/tiled/white, -/area/medical/exam_room) -"kGb" = ( -/obj/machinery/cryopod, -/obj/machinery/computer/cryopod{ - pixel_x = 32 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/security/brig) -"kGX" = ( -/obj/effect/floor_decal/corner/paleblue{ - dir = 5 - }, -/obj/machinery/firealarm{ - pixel_y = 24 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/firstdeck/aft) -"kHb" = ( -/obj/structure/bed/padded, -/obj/effect/floor_decal/corner/pink/mono, -/obj/machinery/alarm{ - dir = 4; - pixel_x = -23 - }, -/obj/structure/closet/hydrant{ - pixel_y = 32 - }, -/turf/simulated/floor/tiled/white/monotile, -/area/medical/staging) -"kIb" = ( -/obj/structure/closet/secure_closet/personal/patient, -/obj/effect/floor_decal/corner/pink/mono, -/obj/machinery/body_scan_display{ - pixel_y = 24 - }, -/obj/random/plushie, -/turf/simulated/floor/tiled/white/monotile, -/area/medical/staging) -"kJb" = ( -/obj/structure/bed/padded, -/obj/item/bedsheet/medical, -/obj/effect/floor_decal/corner/pink/mono, -/obj/machinery/power/apc{ - dir = 1; - name = "north bump"; - pixel_y = 24 - }, -/obj/structure/cable/green{ - d2 = 2; - icon_state = "0-2" - }, -/turf/simulated/floor/tiled/white/monotile, -/area/medical/staging) -"kKb" = ( -/obj/effect/wallframe_spawn/reinforced/polarized/no_grille/regular{ - id = "postop_window" - }, -/turf/simulated/floor/plating, -/area/medical/staging) -"kLb" = ( -/obj/machinery/bodyscanner{ - dir = 1 - }, -/obj/effect/floor_decal/corner/pink/mono, -/obj/machinery/light{ - dir = 1 - }, -/turf/simulated/floor/tiled/white/monotile, -/area/medical/staging) -"kLY" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/firstdeck/centralstarboard) -"kOb" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/turf/simulated/floor/tiled/white, -/area/assembly/robotics/laboratory) -"kPb" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 1 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/white, -/area/assembly/robotics/laboratory) -"kPp" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/visible/fuel, -/turf/simulated/floor/tiled/techfloor, -/area/thruster/d1starboard) -"kPD" = ( -/obj/machinery/atmospherics/pipe/simple/visible/cyan{ - dir = 4 - }, -/turf/simulated/wall/r_wall/hull, -/area/thruster/d1port) -"kQb" = ( -/obj/effect/floor_decal/corner/pink{ - dir = 5 - }, -/obj/effect/floor_decal/sign/pop, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 1 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/white, -/area/medical/staging) -"kRb" = ( -/obj/effect/floor_decal/corner/pink{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/turf/simulated/floor/tiled/white, -/area/medical/staging) -"kSb" = ( -/obj/structure/curtain/open/privacy, -/obj/effect/floor_decal/corner/pink{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/white, -/area/medical/staging) -"kSc" = ( -/obj/structure/closet/crate, -/obj/random/maintenance/solgov, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/firstdeck/foreport) -"kSi" = ( -/obj/structure/sign/warning/high_voltage{ - dir = 8 - }, -/turf/simulated/wall/prepainted, -/area/maintenance/substation/firstdeck) -"kSs" = ( -/obj/structure/table/rack, -/obj/item/gun/energy/gun/secure, -/obj/item/gun/energy/gun/secure, -/obj/structure/window/reinforced{ - dir = 8 - }, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/floor/tiled/dark/monotile, -/area/security/armoury) -"kTb" = ( -/obj/effect/floor_decal/corner/pink/mono, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/body_scanconsole{ - dir = 1 - }, -/turf/simulated/floor/tiled/white/monotile, -/area/medical/staging) -"kTl" = ( -/obj/structure/table/rack, -/obj/item/defibrillator/compact/loaded, -/obj/item/auto_cpr, -/obj/effect/floor_decal/corner/paleblue/mono, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/item/device/radio/intercom/department/medbay{ - dir = 8; - pixel_x = 24 - }, -/turf/simulated/floor/tiled/white/monotile, -/area/medical/equipstorage) -"kUb" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/disposalpipe/segment, -/obj/effect/wallframe_spawn/reinforced/polarized/full{ - id = "roboticlab_or" - }, -/turf/simulated/floor/plating, -/area/assembly/robotics/surgery) -"kUt" = ( -/obj/effect/floor_decal/industrial/outline/grey, -/obj/structure/closet{ - name = "Evidence Closet" - }, -/turf/simulated/floor/tiled/dark, -/area/security/evidence) -"kVb" = ( -/obj/structure/table/standard, -/obj/item/reagent_containers/spray/sterilizine, -/obj/item/storage/toolbox/mechanical, -/obj/effect/floor_decal/corner/paleblue{ - dir = 9 - }, -/obj/effect/floor_decal/corner/paleblue, -/turf/simulated/floor/tiled/white, -/area/assembly/robotics/laboratory) -"kVi" = ( -/obj/effect/floor_decal/corner/red{ - dir = 9 - }, -/obj/item/device/radio/intercom/department/security{ - dir = 4; - pixel_x = -21 - }, -/obj/structure/holoplant, -/turf/simulated/floor/tiled/dark, -/area/security/questioning) -"kWb" = ( -/turf/simulated/floor/tiled/white, -/area/assembly/robotics/laboratory) -"kXb" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 1 - }, -/obj/effect/floor_decal/corner/paleblue{ - dir = 6 - }, -/obj/effect/floor_decal/corner/paleblue{ - dir = 8 - }, -/turf/simulated/floor/tiled/white, -/area/assembly/robotics/laboratory) -"kYM" = ( -/obj/effect/floor_decal/techfloor{ - dir = 8 - }, -/obj/effect/floor_decal/corner/yellow{ - dir = 4 - }, -/obj/effect/shuttle_landmark/lift/medical_top, -/turf/simulated/floor/tiled/steel_grid, -/area/turbolift/medical_lift) -"kZb" = ( -/turf/simulated/wall/prepainted, -/area/medical/foyer/storeroom) -"lab" = ( -/obj/machinery/button/windowtint{ - id = "postop_window"; - pixel_y = -24 - }, -/turf/simulated/floor/tiled/white, -/area/medical/staging) -"lbb" = ( -/obj/structure/curtain/open/privacy, -/obj/machinery/firealarm{ - dir = 1; - pixel_y = -24 - }, -/turf/simulated/floor/tiled/white, -/area/medical/staging) -"lcb" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 1 - }, -/turf/simulated/floor/tiled/white, -/area/medical/staging) -"lcq" = ( -/obj/effect/floor_decal/corner/paleblue/mono, -/obj/machinery/organ_printer/robot/mapped, -/turf/simulated/floor/tiled/white/monotile, -/area/assembly/robotics/surgery) -"lcI" = ( -/obj/machinery/camera/network/security{ - c_tag = "Security Wing - Armory"; - dir = 8 - }, -/obj/effect/floor_decal/industrial/outline/grey, -/obj/structure/table/rack{ - dir = 4 - }, -/obj/item/stack/material/plastic/ten, -/obj/item/stack/material/steel/fifty, -/obj/item/stack/material/aluminium/fifty, -/obj/item/stack/material/glass/fifty, -/turf/simulated/floor/tiled/dark/monotile, -/area/security/armoury) -"lcL" = ( -/obj/machinery/door/window/brigdoor/westleft{ - dir = 2; - id = "Cell 2"; - name = "Cell Two" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable/green{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/turf/simulated/floor/tiled/steel_grid, -/area/security/wing) -"lcS" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 1 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/security/bo) -"ldb" = ( -/obj/machinery/door/airlock/medical{ - id_tag = "roboticslab"; - name = "Robotics Laboratory" - }, -/obj/machinery/door/firedoor, -/obj/effect/floor_decal/industrial/hatch/blue, -/obj/machinery/door/blast/shutters{ - density = 0; - dir = 2; - icon_state = "shutter0"; - id_tag = "robotics_lab"; - name = "Robotics Laboratory Lockdown"; - opacity = 0 - }, -/turf/simulated/floor/tiled/white/monotile, -/area/assembly/robotics/laboratory) -"ldP" = ( -/obj/structure/table/rack, -/obj/random/maintenance/solgov, -/turf/simulated/floor/plating, -/area/maintenance/firstdeck/aftport) -"leb" = ( -/turf/simulated/wall/prepainted, -/area/medical/staging) -"lfb" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/obj/effect/floor_decal/corner/yellow/half{ - dir = 1 - }, -/turf/simulated/floor/tiled/monotile, -/area/hallway/primary/firstdeck/center) -"lfM" = ( -/obj/structure/table/rack, -/obj/random/maintenance/solgov, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/firstdeck/centralport) -"lgb" = ( -/obj/machinery/camera/network/first_deck{ - c_tag = "First Deck Hallway - Auxiliary Cryogenic Storage" - }, -/obj/structure/cable/green{ - d2 = 2; - icon_state = "0-2" - }, -/obj/machinery/power/apc{ - dir = 1; - name = "north bump"; - pixel_y = 24 - }, -/obj/effect/floor_decal/corner/yellow{ - dir = 5 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/firstdeck/center) -"lgd" = ( -/obj/structure/bed/chair/office/light{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/security/detectives_office) -"lhb" = ( -/obj/effect/floor_decal/corner/paleblue{ - dir = 5 - }, -/obj/structure/sign/emergonly{ - pixel_y = 26 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/firstdeck/center) -"lib" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/landmark{ - name = "lightsout" - }, -/obj/effect/catwalk_plated, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/hallway/primary/firstdeck/center) -"ljb" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 4 - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/effect/floor_decal/industrial/warning{ - dir = 8; - icon_state = "warning" - }, -/obj/structure/closet/firecloset, -/turf/simulated/floor/tiled, -/area/rnd/entry) -"lkb" = ( -/obj/structure/ladder, -/obj/effect/catwalk_plated, -/turf/simulated/floor/tiled, -/area/rnd/entry) -"lkp" = ( -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/item/device/radio/intercom{ - dir = 8; - pixel_x = 22 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/fuel{ - dir = 10 - }, -/turf/simulated/floor/tiled/steel_grid, -/area/hallway/primary/firstdeck/aft) -"llb" = ( -/obj/machinery/fabricator, -/obj/effect/floor_decal/industrial/hatch/yellow, -/obj/structure/disposalpipe/segment, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/dark, -/area/rnd/development) -"llM" = ( -/obj/effect/floor_decal/corner/red{ - dir = 9 - }, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 1; - icon_state = "pipe-c" - }, -/turf/simulated/floor/tiled, -/area/security/wing) -"lmb" = ( -/obj/machinery/r_n_d/protolathe, -/obj/effect/floor_decal/industrial/hatch/yellow, -/turf/simulated/floor/tiled/dark, -/area/rnd/development) -"lnb" = ( -/obj/machinery/r_n_d/circuit_imprinter, -/obj/effect/floor_decal/industrial/hatch/yellow, -/obj/structure/reagent_dispensers/acid{ - density = 0; - pixel_x = 32 - }, -/obj/machinery/light{ - dir = 1 - }, -/obj/structure/extinguisher_cabinet{ - pixel_y = 32 - }, -/turf/simulated/floor/tiled/dark, -/area/rnd/development) -"lob" = ( -/obj/effect/floor_decal/corner/red{ - dir = 6 - }, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 8 - }, -/turf/simulated/floor/tiled/dark, -/area/rnd/rnd_sec) -"lom" = ( -/obj/machinery/air_sensor{ - id_tag = "d1ph_sensor" - }, -/turf/simulated/floor/reinforced/hydrogen, -/area/thruster/d1port) -"lpb" = ( -/obj/structure/disposalpipe/segment, -/obj/structure/cable/green{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/dark, -/area/rnd/development) -"lqb" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/dark, -/area/rnd/development) -"lst" = ( -/obj/effect/floor_decal/corner_techfloor_grid{ - dir = 6 - }, -/obj/effect/floor_decal/techfloor/corner, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark, -/area/command/armoury) -"lsT" = ( -/obj/effect/floor_decal/corner/paleblue{ - dir = 1 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/firstdeck/aft) -"ltb" = ( -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/computer/rdconsole/core{ - dir = 1 - }, -/turf/simulated/floor/tiled/dark, -/area/rnd/development) -"lte" = ( -/obj/machinery/light/small{ - dir = 1 - }, -/obj/structure/hygiene/shower{ - dir = 8 - }, -/turf/simulated/floor/tiled/freezer, -/area/crew_quarters/head/aux) -"ltt" = ( -/obj/machinery/door/unpowered/simple/plastic/open, -/turf/simulated/floor/tiled/freezer, -/area/crew_quarters/head/aux) -"lvb" = ( -/obj/structure/table/rack{ - dir = 8 - }, -/obj/random/tank, -/obj/random/tank, -/obj/random/tank, -/obj/random/tank, -/obj/effect/floor_decal/industrial/outline/grey, -/obj/structure/fireaxecabinet{ - pixel_x = -32 - }, -/turf/simulated/floor/tiled/techfloor, -/area/engineering/hardstorage/aux) -"lvm" = ( -/obj/structure/railing/mapped{ - dir = 1; - icon_state = "railing0-1" - }, -/turf/simulated/floor/plating, -/area/maintenance/firstdeck/forestarboard) -"lwb" = ( -/obj/structure/table/reinforced, -/obj/item/modular_computer/laptop/preset/custom_loadout/advanced, -/obj/effect/floor_decal/corner/red, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/camera/network/research{ - c_tag = "Research - Research Checkpoint"; - dir = 1 - }, -/turf/simulated/floor/tiled/dark, -/area/rnd/rnd_sec) -"lxb" = ( -/obj/machinery/button/blast_door{ - dir = 1; - id_tag = "concheckwindow"; - name = "Research Checkpoint Shutter Control"; - pixel_x = 5; - pixel_y = 6; - req_access = list("ACCESS_RESEARCH_SECURITY") - }, -/obj/machinery/button/blast_door{ - dir = 1; - id_tag = "outercheckwindow"; - name = "Research Outer Checkpoint Shutter Control"; - pixel_x = 5; - pixel_y = -3; - req_access = list("ACCESS_RESEARCH_SECURITY") - }, -/obj/structure/table/reinforced, -/obj/machinery/light, -/obj/machinery/button/alternate/door{ - desc = "A remote control-switch for the cargo doors."; - dir = 1; - id_tag = "researchdoor_interior"; - name = "Research Door Control"; - pixel_x = -6; - pixel_y = -3; - req_access = list("ACCESS_RESEARCH_SECURITY") - }, -/obj/effect/floor_decal/corner/red/three_quarters{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/button/blast_door{ - dir = 1; - id_tag = "d1ladderwindow"; - name = "Ladderwell Shutter Control"; - pixel_x = -6; - pixel_y = 6 - }, -/turf/simulated/floor/tiled/dark, -/area/rnd/rnd_sec) -"lxs" = ( -/obj/structure/bed/chair/comfy/lime{ - dir = 8 - }, -/obj/effect/floor_decal/corner/research{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/turf/simulated/floor/tiled/white, -/area/rnd/office) -"lxE" = ( -/obj/machinery/atmospherics/portables_connector{ - dir = 4 - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 4 - }, -/obj/effect/floor_decal/industrial/hatch/blue, -/turf/simulated/floor/tiled/techfloor, -/area/thruster/d1starboard) -"lyb" = ( -/obj/machinery/light, -/obj/machinery/power/apc{ - name = "south bump"; - pixel_y = -28 - }, -/obj/structure/cable/green{ - d2 = 4; - icon_state = "0-4" - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 10 - }, -/obj/machinery/camera/network/research{ - c_tag = "Research - Entry"; - dir = 1 - }, -/obj/machinery/pager/science{ - dir = 8; - pixel_x = -10; - pixel_y = -25 - }, -/turf/simulated/floor/tiled, -/area/rnd/entry) -"lym" = ( -/obj/structure/table/glass, -/obj/machinery/light{ - dir = 1; - icon_state = "tube1" - }, -/obj/machinery/microscope, -/turf/simulated/floor/tiled/white, -/area/security/detectives_office) -"lAb" = ( -/obj/machinery/camera/network/research{ - c_tag = "Research - Lockers"; - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/floor_decal/corner/research{ - dir = 10; - icon_state = "corner_white" - }, -/turf/simulated/floor/tiled/white, -/area/rnd/research) -"lAp" = ( -/obj/machinery/power/apc/high{ - dir = 1; - name = "north bump"; - pixel_y = 24 - }, -/obj/structure/cable/green{ - d2 = 4; - icon_state = "0-4" - }, -/obj/effect/floor_decal/corner/paleblue{ - dir = 5 - }, -/obj/effect/floor_decal/corner/paleblue{ - dir = 10 - }, -/obj/structure/table/standard, -/turf/simulated/floor/tiled/white, -/area/medical/sleeper) -"lAC" = ( -/obj/structure/table/standard, -/obj/structure/closet/medical_wall/filled{ - pixel_y = 32 - }, -/obj/random/firstaid, -/obj/random/medical, -/obj/random/medical, -/obj/random/medical, -/obj/effect/floor_decal/techfloor{ - dir = 1 - }, -/turf/simulated/floor/tiled/techfloor, -/area/crew_quarters/safe_room/firstdeck) -"lBb" = ( -/obj/structure/disposalpipe/segment{ - dir = 8; - icon_state = "pipe-c" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/effect/floor_decal/corner/research{ - dir = 10 - }, -/turf/simulated/floor/tiled/white, -/area/rnd/research) -"lBd" = ( -/obj/structure/railing/mapped{ - dir = 1; - icon_state = "railing0-1" - }, -/turf/simulated/floor/plating, -/area/maintenance/firstdeck/aftstarboard) -"lCb" = ( -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/engineering/hardstorage/aux) -"lCN" = ( -/obj/structure/table/standard, -/obj/item/device/tape/random, -/obj/item/device/tape/random, -/turf/simulated/floor/tiled/dark, -/area/security/evidence) -"lEb" = ( -/obj/effect/floor_decal/corner/paleblue{ - dir = 5 - }, -/obj/machinery/atmospherics/unary/vent_pump/on, -/turf/simulated/floor/tiled/white, -/area/medical/equipstorage) -"lGw" = ( -/obj/effect/floor_decal/techfloor{ - dir = 4 - }, -/obj/effect/floor_decal/corner_techfloor_grid{ - dir = 9 - }, -/obj/effect/floor_decal/techfloor/corner{ - dir = 8 - }, -/obj/effect/floor_decal/techfloor/corner{ - dir = 1 - }, -/obj/machinery/hologram/holopad, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled/techfloor/grid, -/area/command/armoury) -"lHO" = ( -/turf/simulated/wall/prepainted, -/area/medical/sleeper) -"lJb" = ( -/obj/structure/table/glass, -/obj/machinery/alarm{ - dir = 8; - pixel_x = 25; - req_access = list(list("ACCESS_ENGINE_EQUIP","ACCESS_ATMOS")) - }, -/obj/machinery/atmospherics/unary/vent_pump/on, -/obj/item/storage/box/swabs{ - pixel_y = 8 - }, -/obj/item/storage/box/swabs{ - pixel_y = 4 - }, -/obj/item/reagent_containers/spray/luminol{ - pixel_x = -9 - }, -/obj/item/reagent_containers/spray/sterilizine{ - pixel_x = 3 - }, -/turf/simulated/floor/tiled/white, -/area/security/detectives_office) -"lJj" = ( -/obj/machinery/atmospherics/pipe/simple/visible/cyan{ - dir = 10 - }, -/obj/machinery/meter, -/obj/effect/wallframe_spawn/reinforced_phoron, -/obj/machinery/door/firedoor, -/turf/simulated/floor/reinforced, -/area/thruster/d1port) -"lKb" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/light_switch{ - pixel_x = -24 - }, -/obj/random/junk, -/obj/structure/table/rack, -/turf/simulated/floor/tiled/dark, -/area/security/evidence) -"lLD" = ( -/obj/machinery/computer/arcade, -/turf/simulated/floor/plating, -/area/maintenance/firstdeck/aftport) -"lMb" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/engineering/hardstorage/aux) -"lNb" = ( -/obj/structure/closet/crate/solar, -/obj/machinery/light/small, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/floor/tiled/techfloor, -/area/engineering/hardstorage/aux) -"lOb" = ( -/obj/structure/closet/crate/solar, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/floor/tiled/techfloor, -/area/engineering/hardstorage/aux) -"lRa" = ( -/obj/machinery/light_switch{ - pixel_x = -6; - pixel_y = 24 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/security/storage) -"lVb" = ( -/obj/machinery/door/airlock/security{ - id_tag = "detdoor"; - name = "Forensic Lab"; - secured_wires = 1 - }, -/obj/machinery/door/firedoor, -/turf/simulated/wall/prepainted, -/area/security/evidence) -"lVZ" = ( -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/effect/floor_decal/corner/red/mono, -/obj/structure/closet/bombclosetsecurity, -/turf/simulated/floor/tiled/monotile, -/area/security/locker) -"lWb" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/tiled/dark, -/area/security/evidence) -"lWh" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/disposalpipe/segment, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/catwalk, -/obj/effect/floor_decal/industrial/warning{ - dir = 8 - }, -/turf/simulated/floor/plating, -/area/maintenance/firstdeck/centralstarboard) -"lYS" = ( -/obj/machinery/computer/teleporter{ - dir = 8 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/teleporter/firstdeck) -"mav" = ( -/turf/simulated/wall/prepainted, -/area/rnd/office) -"mbb" = ( -/obj/effect/floor_decal/floordetail/edgedrain{ - dir = 10 - }, -/obj/effect/floor_decal/corner/paleblue{ - dir = 4 - }, -/obj/machinery/organ_printer/robot/mapped, -/obj/machinery/firealarm{ - dir = 8; - pixel_x = -24 - }, -/turf/simulated/floor/tiled/white, -/area/medical/surgery) -"mbM" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/firstdeck/centralport) -"mcA" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, -/obj/structure/disposalpipe/segment, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/white, -/area/assembly/robotics/surgery) -"mdv" = ( -/obj/effect/wallframe_spawn/reinforced/polarized{ - id = "processwindow" - }, -/obj/machinery/door/blast/regular{ - density = 0; - dir = 4; - icon_state = "pdoor0"; - id_tag = "Prison Gate"; - name = "Security Blast Door"; - opacity = 0 - }, -/obj/structure/cable/green{ - d2 = 8; - icon_state = "0-8" - }, -/obj/structure/cable/green, -/turf/simulated/floor/plating, -/area/security/processing) -"mer" = ( -/obj/machinery/atmospherics/pipe/simple/visible/blue{ - dir = 5 - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 1 - }, -/obj/machinery/light/small{ - dir = 8 - }, -/turf/simulated/floor/tiled/techfloor, -/area/thruster/d1port) -"mfb" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 - }, -/obj/machinery/firealarm{ - dir = 1; - pixel_y = -24 - }, -/turf/simulated/floor/tiled/dark, -/area/security/evidence) -"mfg" = ( -/obj/effect/wallframe_spawn/reinforced, -/turf/simulated/floor/plating, -/area/security/storage) -"mgb" = ( -/obj/structure/table/steel, -/obj/item/book/manual/solgov_law, -/turf/simulated/floor/tiled, -/area/security/detectives_office) -"mhb" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, -/obj/effect/catwalk_plated, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/plating, -/area/hallway/primary/firstdeck/fore) -"mib" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/catwalk_plated, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/hallway/primary/firstdeck/fore) -"mig" = ( -/obj/structure/table/steel, -/obj/item/device/flashlight/lamp, -/obj/machinery/atmospherics/unary/vent_pump/on, -/turf/simulated/floor/tiled/dark, -/area/security/questioning) -"miG" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 8 - }, -/turf/simulated/floor/tiled/dark, -/area/security/evidence) -"mjb" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/effect/catwalk_plated, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/plating, -/area/hallway/primary/firstdeck/fore) -"mjt" = ( -/obj/machinery/portable_atmospherics/canister/air, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/firstdeck/aftport) -"mkb" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/camera/network/first_deck{ - c_tag = "First Deck Fore Hallway - Starboard"; - dir = 1 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/catwalk_plated, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/plating, -/area/hallway/primary/firstdeck/fore) -"mlb" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 1 - }, -/obj/effect/floor_decal/corner/paleblue{ - dir = 10 - }, -/obj/machinery/light{ - dir = 4 - }, -/obj/structure/bed/chair/comfy/blue, -/obj/random_multi/single_item/runtime, -/turf/simulated/floor/tiled/white, -/area/medical/medpaperworkoffice) -"mlw" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/teleporter/firstdeck) -"mlX" = ( -/obj/machinery/computer/modular/preset/civilian, -/obj/effect/floor_decal/corner/research/mono, -/obj/item/device/radio/intercom{ - dir = 4; - pixel_x = -21 - }, -/turf/simulated/floor/tiled/white/monotile, -/area/rnd/office) -"mmb" = ( -/obj/effect/floor_decal/corner/paleblue{ - dir = 10 - }, -/obj/effect/floor_decal/corner/paleblue{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 8 - }, -/obj/machinery/power/apc{ - dir = 8; - name = "west bump"; - pixel_x = -24 - }, -/obj/structure/cable/green, -/turf/simulated/floor/tiled/white, -/area/medical/medpaperworkoffice) -"mmP" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/obj/effect/floor_decal/corner/research{ - dir = 5 - }, -/obj/structure/noticeboard{ - pixel_y = 32 - }, -/turf/simulated/floor/tiled/white, -/area/rnd/research) -"mpq" = ( -/obj/effect/floor_decal/corner/research{ - dir = 8 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/firstdeck/aft) -"mpy" = ( -/turf/simulated/wall/r_wall/hull, -/area/maintenance/firstdeck/aftstarboard) -"mrr" = ( -/obj/effect/floor_decal/techfloor{ - dir = 4 - }, -/obj/effect/floor_decal/techfloor{ - dir = 8 - }, -/obj/machinery/light{ - dir = 1 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/command/armoury/tactical) -"mrW" = ( -/obj/structure/closet/secure_closet/medical_torchsenior, -/obj/effect/floor_decal/corner/paleblue/mono, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/alarm{ - pixel_y = 24 - }, -/turf/simulated/floor/tiled/white/monotile, -/area/medical/locker) -"mrX" = ( -/obj/effect/wallframe_spawn/reinforced/polarized/full{ - id = "roboticlab_or" - }, -/turf/simulated/floor/plating, -/area/assembly/robotics/surgery) -"mtk" = ( -/obj/item/crowbar/prybar, -/obj/effect/floor_decal/industrial/outline/grey, -/obj/structure/closet/crate, -/obj/random/maintenance/solgov, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/firstdeck/foreport) -"mtB" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, -/obj/structure/cable/green{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/structure/disposalpipe/segment{ - dir = 1; - icon_state = "pipe-c" - }, -/turf/simulated/floor/tiled, -/area/security/detectives_office) -"mtF" = ( -/obj/structure/table/steel, -/obj/item/storage/secure/safe{ - pixel_x = -24 - }, -/obj/item/device/camera, -/obj/item/device/taperecorder, -/turf/simulated/floor/tiled, -/area/security/detectives_office) -"mvl" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/catwalk_plated, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply, -/obj/structure/disposalpipe/sortjunction/flipped{ - dir = 4; - name = "Robotics"; - sort_type = "Robotics" - }, -/turf/simulated/floor/plating, -/area/hallway/primary/firstdeck/center) -"mvE" = ( -/obj/machinery/light/spot{ - dir = 4 - }, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 1 - }, -/turf/simulated/floor/tiled/white, -/area/medical/sleeper) -"mvL" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/firstdeck/foreport) -"mww" = ( -/obj/effect/floor_decal/techfloor{ - dir = 4 - }, -/obj/effect/floor_decal/corner/yellow{ - dir = 1 - }, -/turf/simulated/floor/tiled/steel_grid, -/area/turbolift/medical_lift) -"mwy" = ( -/obj/structure/hygiene/toilet{ - dir = 4 - }, -/obj/effect/floor_decal/corner/red{ - dir = 10 - }, -/obj/machinery/flasher{ - id_tag = "Cell 2"; - pixel_x = -24 - }, -/obj/machinery/camera/network/security{ - c_tag = "Brig - Cell Two"; - dir = 4 - }, -/obj/machinery/alarm{ - dir = 1; - pixel_y = -22 - }, -/turf/simulated/floor/tiled, -/area/security/wing) -"mwA" = ( -/obj/effect/floor_decal/corner_techfloor_grid{ - dir = 6 - }, -/obj/effect/floor_decal/techfloor/corner, -/obj/effect/floor_decal/techfloor/corner{ - dir = 4 - }, -/obj/effect/floor_decal/corner/blue{ - dir = 1 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark, -/area/command/armoury) -"mwJ" = ( -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/fuel{ - dir = 9 - }, -/turf/simulated/floor/tiled/steel_grid, -/area/hallway/primary/firstdeck/aft) -"mwV" = ( -/obj/effect/floor_decal/floordetail/edgedrain{ - dir = 6 - }, -/obj/effect/floor_decal/corner/paleblue{ - dir = 1 - }, -/obj/effect/floor_decal/sign/or2, -/obj/machinery/button/holosign{ - id_tag = "or2"; - pixel_x = 6; - pixel_y = -24 - }, -/obj/machinery/button/windowtint{ - id = "or2"; - pixel_x = -6; - pixel_y = -24 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/camera/network/medbay{ - c_tag = "Infirmary - Operating Theatre 2"; - dir = 1 - }, -/turf/simulated/floor/tiled/white, -/area/medical/surgery2) -"mzb" = ( -/obj/effect/floor_decal/corner/paleblue{ - dir = 6 - }, -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/white, -/area/medical/medicalhallway) -"mBb" = ( -/obj/structure/bed/chair/office/comfy/red{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/dark, -/area/security/questioning) -"mCe" = ( -/obj/structure/table/glass, -/turf/simulated/floor/tiled/white, -/area/security/detectives_office) -"mCi" = ( -/obj/structure/bed/padded, -/obj/item/bedsheet/orange, -/obj/effect/floor_decal/corner/red{ - dir = 10 - }, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 8 - }, -/obj/machinery/camera/network/security{ - c_tag = "Brig - Cell One"; - dir = 8 - }, -/obj/machinery/firealarm{ - dir = 1; - pixel_y = -26 - }, -/turf/simulated/floor/tiled, -/area/security/wing) -"mCk" = ( -/obj/structure/table/steel, -/obj/item/book/manual/sol_sop, -/obj/item/book/manual/solgov_law, -/obj/machinery/light{ - dir = 1 - }, -/obj/effect/floor_decal/corner/red{ - dir = 5 - }, -/turf/simulated/floor/tiled, -/area/security/wing) -"mDb" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/disposalpipe/sortjunction/flipped{ - dir = 1; - name = "Forensics Office"; - sort_type = "Forensics Office" - }, -/turf/simulated/floor/tiled, -/area/security/wing) -"mEV" = ( -/turf/simulated/wall/r_wall/prepainted, -/area/thruster/d1starboard) -"mFb" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atm{ - pixel_x = 32 - }, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/tiled, -/area/hallway/primary/firstdeck/fore) -"mGb" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 1; - icon_state = "warning" - }, -/obj/machinery/keycard_auth/torch{ - pixel_x = -28 - }, -/turf/simulated/floor/blackgrid, -/area/security/nuke_storage) -"mGj" = ( -/obj/machinery/atmospherics/pipe/simple/visible/cyan{ - dir = 4 - }, -/turf/simulated/wall/r_wall/hull, -/area/thruster/d1starboard) -"mHb" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 1; - icon_state = "warning" - }, -/turf/simulated/floor/blackgrid, -/area/security/nuke_storage) -"mHr" = ( -/obj/machinery/atmospherics/pipe/simple/visible/cyan{ - dir = 6 - }, -/turf/simulated/floor/reinforced/oxygen, -/area/thruster/d1starboard) -"mJb" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/security/wing) -"mJJ" = ( -/obj/effect/floor_decal/techfloor, -/obj/effect/floor_decal/techfloor/corner{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/techfloor/grid, -/area/command/armoury) -"mJY" = ( -/obj/structure/closet/wardrobe/chemistry_white, -/obj/effect/floor_decal/corner/beige/mono, -/obj/item/device/radio/intercom{ - pixel_y = 23 - }, -/turf/simulated/floor/tiled/white/monotile, -/area/medical/chemistry) -"mKb" = ( -/obj/machinery/light_switch{ - pixel_x = -6; - pixel_y = -24 - }, -/obj/machinery/button/windowtint{ - id = "forensicswindow"; - pixel_x = 6; - pixel_y = -24 - }, -/obj/effect/floor_decal/corner/red{ - dir = 10 - }, -/turf/simulated/floor/tiled, -/area/security/detectives_office) -"mKq" = ( -/obj/structure/table/rack, -/obj/item/clothing/head/helmet/riot, -/obj/item/clothing/head/helmet/riot, -/obj/item/clothing/head/helmet/riot, -/obj/item/clothing/head/helmet/riot, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/floor/tiled/dark/monotile, -/area/security/armoury) -"mKw" = ( -/obj/structure/railing/mapped{ - dir = 8; - icon_state = "railing0-1" - }, -/obj/structure/railing/mapped, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/turf/simulated/floor/plating, -/area/maintenance/firstdeck/centralport) -"mLb" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/effect/floor_decal/industrial/warning/corner, -/obj/machinery/camera/network/first_deck{ - c_tag = "Command Hallway - Fore"; - dir = 8 - }, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/tiled/steel_grid, -/area/hallway/primary/firstdeck/fore) -"mLu" = ( -/obj/machinery/portable_atmospherics/powered/pump/filled, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/floor/plating, -/area/maintenance/firstdeck/centralstarboard) -"mMb" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 5; - icon_state = "warning" - }, -/obj/machinery/alarm{ - dir = 4; - pixel_x = -22 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/security/nuke_storage) -"mMX" = ( -/obj/effect/floor_decal/corner/green, -/turf/simulated/floor/tiled, -/area/hallway/primary/firstdeck/center) -"mNb" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/random_multi/single_item/poppy, -/turf/simulated/floor/blackgrid, -/area/security/nuke_storage) -"mOb" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 9 - }, -/obj/item/modular_computer/telescreen/preset/generic{ - pixel_x = 32 - }, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 8 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/security/nuke_storage) -"mRb" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 8 - }, -/turf/simulated/floor/tiled/steel_grid, -/area/hallway/primary/firstdeck/fore) -"mTb" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/effect/floor_decal/corner/research{ - dir = 10 - }, -/turf/simulated/floor/tiled/white, -/area/rnd/research) -"mUb" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/machinery/hologram/holopad, -/turf/simulated/floor/tiled/dark/monotile, -/area/security/nuke_storage) -"mUm" = ( -/obj/structure/sign/warning/nosmoking_1, -/turf/simulated/wall/prepainted, -/area/rnd/entry) -"mVb" = ( -/obj/machinery/nuclearbomb/station{ - name = "ship self-destruct terminal" - }, -/turf/simulated/floor/blackgrid, -/area/security/nuke_storage) -"mVW" = ( -/obj/effect/wallframe_spawn/reinforced/polarized{ - id = "forensicswindow" - }, -/obj/structure/cable/green{ - d2 = 4; - icon_state = "0-4" - }, -/turf/simulated/floor/plating, -/area/security/detectives_office) -"mWb" = ( -/obj/machinery/camera/network/command{ - c_tag = "Vault - Interior"; - dir = 8 - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 8 - }, -/obj/machinery/nuke_cylinder_dispenser{ - pixel_x = 2 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/security/nuke_storage) -"mXb" = ( -/obj/machinery/atmospherics/unary/vent_pump/on, -/turf/simulated/floor/tiled/dark, -/area/teleporter/firstdeck) -"nbb" = ( -/obj/structure/cable/green{ - d2 = 2; - icon_state = "0-2" - }, -/obj/structure/cable/green, -/obj/effect/wallframe_spawn/reinforced/polarized{ - id = "processwindow" - }, -/turf/simulated/floor/plating, -/area/security/processing) -"nbl" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable/green{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/turf/simulated/floor/tiled/dark, -/area/security/questioning) -"ncb" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 4 - }, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/tiled/steel_grid, -/area/hallway/primary/firstdeck/fore) -"ndb" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 6; - icon_state = "warning" - }, -/obj/machinery/power/apc{ - dir = 8; - name = "west bump"; - pixel_x = -24 - }, -/obj/structure/cable/green, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/security/nuke_storage) -"neb" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/blackgrid, -/area/security/nuke_storage) -"nfb" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 10 - }, -/obj/item/modular_computer/telescreen/preset/generic{ - pixel_x = 32; - pixel_y = -9 - }, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 8 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/security/nuke_storage) -"ngb" = ( -/obj/structure/table/rack, -/obj/machinery/camera/network/first_deck{ - c_tag = "First Deck - Teleporter"; - dir = 4 - }, -/obj/random/tech_supply, -/turf/simulated/floor/tiled/dark/monotile, -/area/teleporter/firstdeck) -"nhb" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/tiled/dark, -/area/teleporter/firstdeck) -"nib" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/disposalpipe/segment, -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 8 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/firstdeck/fore) -"njb" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/security/locker) -"njg" = ( -/obj/structure/table/standard, -/obj/item/reagent_containers/spray/cleaner{ - pixel_x = -5 - }, -/obj/item/reagent_containers/spray/sterilizine, -/obj/machinery/vending/wallmed1{ - pixel_y = 32 - }, -/obj/effect/floor_decal/floordetail/edgedrain{ - dir = 5 - }, -/obj/effect/floor_decal/corner/paleblue{ - dir = 8 - }, -/turf/simulated/floor/tiled/white, -/area/medical/surgery) -"njj" = ( -/turf/simulated/wall/prepainted, -/area/command/conference) -"njm" = ( -/obj/effect/floor_decal/techfloor/corner{ - dir = 8 - }, -/obj/effect/floor_decal/techfloor/corner, -/obj/effect/floor_decal/techfloor/corner{ - dir = 4 - }, -/obj/effect/floor_decal/techfloor/corner{ - dir = 1 - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/command/armoury/tactical) -"njQ" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/door/airlock/engineering{ - name = "Auxiliary Engineering Hard Storage"; - secured_wires = 1 - }, -/turf/simulated/floor/tiled/steel_ridged, -/area/engineering/hardstorage/aux) -"nkb" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/glass/security{ - id_tag = "detdoor"; - name = "Locker Room" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/noticeboard{ - pixel_y = 32 - }, -/turf/simulated/floor/tiled/steel_ridged, -/area/security/locker) -"nkh" = ( -/obj/structure/closet/secure_closet/brig{ - id = "Cell 1"; - name = "Cell Locker" - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 8 - }, -/obj/item/device/radio/intercom/department/security{ - dir = 8; - pixel_x = 21 - }, -/turf/simulated/floor/tiled, -/area/security/wing) -"nkr" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/firstdeck/fore) -"nkz" = ( -/obj/structure/sign/warning/airlock{ - dir = 1 - }, -/turf/simulated/wall/prepainted, -/area/maintenance/firstdeck/foreport) -"nlb" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled, -/area/security/wing) -"nli" = ( -/turf/simulated/wall/r_wall/hull, -/area/security/storage) -"nmb" = ( -/obj/structure/cable/green, -/obj/structure/cable/green{ - d2 = 4; - icon_state = "0-4" - }, -/obj/effect/wallframe_spawn/reinforced/polarized{ - id = "processwindow" - }, -/turf/simulated/floor/plating, -/area/security/processing) -"nnb" = ( -/obj/effect/floor_decal/industrial/warning, -/obj/machinery/keycard_auth/torch{ - pixel_x = -28 - }, -/turf/simulated/floor/blackgrid, -/area/security/nuke_storage) -"nob" = ( -/obj/effect/floor_decal/industrial/warning, -/turf/simulated/floor/blackgrid, -/area/security/nuke_storage) -"npb" = ( -/obj/structure/table/standard, -/obj/item/device/radio/intercom{ - dir = 4; - pixel_x = -21 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/teleporter/firstdeck) -"npe" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/light{ - dir = 4 - }, -/obj/effect/floor_decal/corner/red{ - dir = 6 - }, -/turf/simulated/floor/tiled, -/area/security/wing) -"nqb" = ( -/obj/machinery/hologram/holopad, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/tiled/dark/monotile, -/area/teleporter/firstdeck) -"nrF" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 2; - icon_state = "pipe-c" - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled, -/area/security/wing) -"nsb" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/disposalpipe/segment, -/obj/effect/floor_decal/industrial/warning{ - dir = 8 - }, -/turf/simulated/floor/tiled/monotile, -/area/hallway/primary/firstdeck/fore) -"nub" = ( -/obj/structure/table/standard, -/obj/machinery/power/apc{ - dir = 8; - name = "west bump"; - pixel_x = -24 - }, -/obj/structure/cable/green{ - d2 = 4; - icon_state = "0-4" - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/teleporter/firstdeck) -"nvb" = ( -/obj/effect/floor_decal/corner_techfloor_grid{ - dir = 4 - }, -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark, -/area/teleporter/firstdeck) -"nvs" = ( -/obj/structure/table/steel, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/photocopier/faxmachine{ - department = "Torch - Investigations Office" - }, -/turf/simulated/floor/tiled, -/area/security/detectives_office) -"nvX" = ( -/obj/structure/reagent_dispensers/fueltank, -/obj/machinery/alarm{ - dir = 4; - pixel_x = -22 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/command/armoury) -"nxK" = ( -/obj/effect/floor_decal/corner/yellow{ - dir = 1 - }, -/obj/effect/floor_decal/techfloor, -/obj/effect/shuttle_landmark/lift/robotics_top, -/turf/simulated/floor/tiled/steel_grid, -/area/turbolift/robotics_lift) -"nyb" = ( -/obj/effect/catwalk_plated, -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/plating, -/area/hallway/primary/firstdeck/fore) -"nys" = ( -/obj/machinery/atmospherics/pipe/simple/visible/fuel{ - dir = 4 - }, -/obj/machinery/atmospherics/binary/pump/on{ - target_pressure = 15000 - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 1 - }, -/obj/effect/floor_decal/industrial/outline/orange, -/turf/simulated/floor/tiled/techfloor, -/area/thruster/d1starboard) -"nAb" = ( -/obj/structure/table/standard, -/obj/item/device/flashlight/lamp{ - pixel_x = -4; - pixel_y = -1 - }, -/obj/effect/floor_decal/corner/red{ - dir = 5 - }, -/obj/machinery/recharger, -/turf/simulated/floor/tiled/dark, -/area/rnd/rnd_sec) -"nAp" = ( -/obj/structure/table/rack, -/obj/random/maintenance/solgov, -/obj/random/action_figure, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/firstdeck/centralport) -"nBb" = ( -/obj/effect/wallframe_spawn/reinforced/polarized/no_grille/regular{ - id = "exam_windows" - }, -/obj/machinery/door/blast/shutters{ - density = 0; - dir = 2; - icon_state = "shutter0"; - id_tag = "infirm_windows"; - name = "Infirmary Window Lockdown"; - opacity = 0 - }, -/turf/simulated/floor/plating, -/area/medical/exam_room) -"nCb" = ( -/turf/simulated/wall/prepainted, -/area/medical/exam_room) -"nDd" = ( -/obj/effect/floor_decal/corner/paleblue/mono, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 8 - }, -/obj/machinery/light_switch{ - pixel_y = 24 - }, -/obj/machinery/photocopier, -/turf/simulated/floor/tiled/white/monotile, -/area/medical/medpaperworkoffice) -"nDx" = ( -/obj/machinery/door/airlock/medical{ - name = "Operating Room 2" - }, -/obj/machinery/holosign/surgery{ - dir = 4; - id_tag = "or2" - }, -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/floor_decal/industrial/hatch/blue, -/turf/simulated/floor/tiled/white/monotile, -/area/medical/surgery2) -"nDB" = ( -/obj/effect/catwalk_plated, -/obj/structure/disposalpipe/segment, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/light{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/security/wing) -"nEb" = ( -/obj/structure/table/standard, -/obj/machinery/firealarm{ - dir = 1; - pixel_y = -24 - }, -/obj/machinery/light{ - dir = 8 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/teleporter/firstdeck) -"nFh" = ( -/obj/structure/table/steel, -/obj/machinery/camera/network/security{ - c_tag = "Security Wing - Brig Chief"; - dir = 4 - }, -/obj/machinery/newscaster/security_unit{ - pixel_x = -32 - }, -/obj/machinery/photocopier/faxmachine, -/turf/simulated/floor/tiled/dark, -/area/security/bo) -"nHf" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/effect/floor_decal/corner/blue{ - dir = 6 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/firstdeck/fore) -"nIb" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark, -/area/rnd/rnd_sec) -"nJb" = ( -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/effect/floor_decal/torchltdlogo{ - icon_state = "topleft" - }, -/obj/machinery/tele_beacon{ - autoset_name = 0; - beacon_name = "Research - Lobby" - }, -/turf/simulated/floor/tiled, -/area/rnd/entry) -"nJo" = ( -/obj/effect/wallframe_spawn/reinforced, -/obj/structure/cable/green{ - d2 = 4; - icon_state = "0-4" - }, -/turf/simulated/floor/plating, -/area/security/wing) -"nKb" = ( -/obj/effect/floor_decal/torchltdlogo{ - icon_state = "topright" - }, -/turf/simulated/floor/tiled, -/area/rnd/entry) -"nLb" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 4; - icon_state = "warning" - }, -/obj/structure/ladder, -/obj/effect/catwalk_plated, -/turf/simulated/floor/tiled, -/area/rnd/entry) -"nLo" = ( -/obj/effect/floor_decal/corner/paleblue{ - dir = 5 - }, -/obj/item/storage/pill_bottle/tramadol, -/obj/item/storage/pill_bottle/antitox, -/obj/machinery/alarm{ - dir = 8; - pixel_x = 24 - }, -/obj/structure/closet/secure_closet/medical_wall{ - name = "Pill Cabinet"; - pixel_y = 32 - }, -/obj/item/storage/pill_bottle, -/obj/item/storage/pill_bottle, -/turf/simulated/floor/tiled/white, -/area/medical/equipstorage) -"nOO" = ( -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/tiled, -/area/security/detectives_office) -"nPb" = ( -/obj/effect/wallframe_spawn/reinforced/polarized{ - id = "rndpost" - }, -/obj/machinery/door/blast/shutters{ - density = 0; - dir = 2; - icon_state = "shutter0"; - id_tag = "outercheckwindow"; - name = "RnD Checkpoint Outer Shutters"; - opacity = 0 - }, -/obj/structure/disposalpipe/segment, -/obj/structure/cable/green{ - d2 = 8; - icon_state = "0-8" - }, -/turf/simulated/floor/plating, -/area/rnd/rnd_sec) -"nPT" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/catwalk, -/obj/effect/floor_decal/industrial/warning{ - dir = 8; - icon_state = "warning" - }, -/obj/machinery/atmospherics/pipe/simple/visible/fuel{ - dir = 9 - }, -/turf/simulated/floor/plating, -/area/maintenance/firstdeck/aftport) -"nQb" = ( -/obj/structure/bed/chair/office/comfy/red{ - dir = 4 - }, -/obj/effect/floor_decal/corner/red{ - dir = 6 - }, -/turf/simulated/floor/tiled/dark, -/area/rnd/rnd_sec) -"nRb" = ( -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/effect/floor_decal/torchltdlogo, -/turf/simulated/floor/tiled, -/area/rnd/entry) -"nSb" = ( -/obj/effect/floor_decal/torchltdlogo{ - icon_state = "bottomright" - }, -/turf/simulated/floor/tiled, -/area/rnd/entry) -"nUp" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/hologram/holopad, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled/monotile, -/area/hallway/primary/firstdeck/center) -"nVe" = ( -/obj/structure/disposalpipe/segment{ - dir = 4; - icon_state = "pipe-c" - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/structure/table/standard, -/obj/item/reagent_containers/spray/sterilizine, -/obj/item/reagent_containers/spray/cleaner{ - pixel_x = -5 - }, -/obj/machinery/vending/wallmed1{ - pixel_y = 32 - }, -/obj/item/device/robotanalyzer{ - pixel_y = 13 - }, -/obj/item/stack/nanopaste{ - pixel_x = 7 - }, -/turf/simulated/floor/tiled/white, -/area/assembly/robotics/surgery) -"nWb" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 1 - }, -/obj/effect/catwalk_plated, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/hallway/primary/firstdeck/fore) -"nWl" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 1 - }, -/obj/effect/floor_decal/corner/research{ - dir = 10 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/firstdeck/aft) -"nWP" = ( -/obj/effect/floor_decal/techfloor{ - dir = 4 - }, -/obj/effect/floor_decal/techfloor/corner{ - dir = 1 - }, -/obj/machinery/light, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 8 - }, -/obj/machinery/recharger/wallcharger{ - dir = 1; - pixel_y = -22 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/command/armoury/tactical) -"nWV" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/wall/r_wall/hull, -/area/rnd/xenobiology) -"nXk" = ( -/obj/effect/floor_decal/industrial/warning, -/obj/random/assembly, -/turf/simulated/floor/plating, -/area/maintenance/firstdeck/centralstarboard) -"nZb" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/camera/network/first_deck{ - c_tag = "First Deck Fore Hallway - Port" - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/simulated/floor/tiled/monotile, -/area/hallway/primary/firstdeck/fore) -"nZm" = ( -/obj/structure/table/rack, -/obj/random/maintenance/solgov, -/obj/random/maintenance/solgov, -/obj/random/maintenance/solgov, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/firstdeck/aftstarboard) -"nZB" = ( -/obj/machinery/tele_projector, -/obj/machinery/button/blast_door{ - id_tag = "teleport1"; - name = "First Deck Teleporter Access Shutter Control"; - pixel_x = 24; - pixel_y = 6 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/teleporter/firstdeck) -"nZR" = ( -/obj/machinery/atmospherics/pipe/simple/visible/cyan{ - dir = 9 - }, -/obj/machinery/meter, -/obj/effect/wallframe_spawn/reinforced_phoron, -/obj/machinery/door/firedoor, -/turf/simulated/floor/tiled/techfloor, -/area/thruster/d1starboard) -"nZZ" = ( -/obj/effect/floor_decal/techfloor{ - dir = 4 - }, -/obj/effect/floor_decal/techfloor/corner{ - dir = 1 - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/techfloor/grid, -/area/command/armoury) -"obb" = ( -/obj/effect/floor_decal/industrial/warning, -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable/green{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/tiled, -/area/rnd/entry) -"obr" = ( -/obj/structure/sign/warning/hot_exhaust, -/turf/simulated/wall/ocp_wall, -/area/thruster/d1port) -"oby" = ( -/obj/effect/wallframe_spawn/reinforced, -/obj/structure/cable/green{ - d2 = 8; - icon_state = "0-8" - }, -/turf/simulated/floor/plating, -/area/security/wing) -"obZ" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/effect/catwalk_plated, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/hallway/primary/firstdeck/fore) -"ocb" = ( -/obj/effect/floor_decal/industrial/warning, -/turf/simulated/floor/tiled, -/area/rnd/entry) -"ocG" = ( -/obj/structure/filingcabinet/chestdrawer{ - dir = 1 - }, -/obj/item/folder/blue, -/obj/item/folder/red, -/obj/item/folder, -/obj/item/folder/nt, -/obj/item/folder/yellow, -/obj/item/folder/white, -/obj/item/folder/yellow, -/obj/effect/floor_decal/corner/yellow{ - dir = 5 - }, -/obj/effect/floor_decal/techfloor{ - dir = 8 - }, -/obj/machinery/light{ - dir = 1 - }, -/turf/simulated/floor/tiled, -/area/assembly/robotics/office) -"odb" = ( -/obj/machinery/light, -/obj/machinery/alarm{ - dir = 1; - pixel_y = -24 - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 6; - icon_state = "warning" - }, -/obj/structure/ladder, -/obj/effect/catwalk_plated, -/turf/simulated/floor/tiled, -/area/rnd/entry) -"oeb" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/effect/floor_decal/corner/research{ - dir = 8 - }, -/turf/simulated/floor/tiled/white, -/area/rnd/research) -"ofb" = ( -/obj/structure/table/reinforced, -/obj/effect/floor_decal/corner/paleblue/mono, -/obj/machinery/door/blast/shutters{ - density = 0; - dir = 4; - icon_state = "shutter0"; - id_tag = "inf_recep_window"; - name = "Infirmary Reception Window Lockdown"; - opacity = 0 - }, -/obj/machinery/door/window/eastright{ - base_state = "left"; - icon_state = "left"; - name = "Medical Reception" - }, -/obj/machinery/door/firedoor, -/obj/item/modular_computer/telescreen/preset/medical{ - pixel_y = 32 - }, -/turf/simulated/floor/tiled/white/monotile, -/area/medical/staging) -"ogb" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 1 - }, -/obj/effect/floor_decal/corner/red{ - dir = 10 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/firstdeck/fore) -"ohy" = ( -/obj/structure/bed/chair/padded/yellow, -/obj/effect/floor_decal/corner/paleblue{ - dir = 9 - }, -/obj/effect/floor_decal/corner/paleblue{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/assembly/robotics/laboratory) -"oib" = ( -/obj/structure/table/standard, -/obj/item/pen/red, -/obj/item/pen, -/obj/item/device/camera, -/obj/effect/floor_decal/corner/research/mono, -/obj/structure/sign/ecplaque{ - pixel_x = 1; - pixel_y = 32 - }, -/turf/simulated/floor/tiled/white/monotile, -/area/rnd/office) -"ojb" = ( -/obj/structure/table/standard, -/obj/effect/floor_decal/corner/research/mono, -/obj/random_multi/single_item/memo_research, -/turf/simulated/floor/tiled/white/monotile, -/area/rnd/office) -"okp" = ( -/obj/effect/floor_decal/corner/red/mono, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/structure/closet/secure_closet/security_torch, -/obj/machinery/camera/network/security{ - c_tag = "Security Wing - Locker Room"; - dir = 8 - }, -/obj/machinery/firealarm{ - dir = 4; - pixel_x = 26 - }, -/obj/machinery/light_switch{ - pixel_x = 22; - pixel_y = -10 - }, -/turf/simulated/floor/tiled/monotile, -/area/security/locker) -"omb" = ( -/obj/machinery/light{ - dir = 1 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/bed/chair/padded/blue, -/obj/effect/floor_decal/corner/paleblue{ - dir = 5 - }, -/turf/simulated/floor/tiled/white, -/area/medical/exam_room) -"onM" = ( -/obj/effect/floor_decal/corner/blue, -/turf/simulated/floor/tiled/dark, -/area/command/armoury) -"oox" = ( -/obj/effect/floor_decal/corner/paleblue{ - dir = 5 - }, -/obj/machinery/firealarm{ - pixel_y = 20 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/firstdeck/aft) -"ooN" = ( -/obj/effect/floor_decal/techfloor, -/turf/simulated/floor/tiled/dark, -/area/command/armoury) -"opg" = ( -/obj/machinery/atmospherics/valve/digital{ - dir = 4; - id_tag = "fuelmode" - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 1 - }, -/obj/effect/floor_decal/industrial/outline/red, -/turf/simulated/floor/tiled/techfloor, -/area/thruster/d1port) -"oqp" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/catwalk, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 8 - }, -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 8 - }, -/turf/simulated/floor/plating, -/area/maintenance/firstdeck/centralstarboard) -"orb" = ( -/obj/effect/floor_decal/industrial/outline/blue, -/turf/simulated/floor/tiled/white, -/area/medical/medicalhallway) -"osb" = ( -/obj/effect/floor_decal/industrial/hatch/yellow, -/obj/machinery/self_destruct, -/turf/simulated/floor/tiled/dark/monotile, -/area/security/nuke_storage) -"osX" = ( -/obj/machinery/atmospherics/pipe/manifold/visible/fuel{ - dir = 4 - }, -/obj/machinery/air_sensor{ - id_tag = "cChamber1s" - }, -/turf/simulated/floor/reinforced, -/area/thruster/d1starboard) -"otb" = ( -/obj/machinery/light{ - dir = 1 - }, -/obj/effect/floor_decal/industrial/hatch/yellow, -/obj/machinery/self_destruct, -/turf/simulated/floor/tiled/dark/monotile, -/area/security/nuke_storage) -"oty" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 10 - }, -/turf/simulated/floor/tiled/dark, -/area/medical/foyer/storeroom) -"ouI" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/firstdeck/foreport) -"ovb" = ( -/obj/effect/floor_decal/industrial/hatch/blue, -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/glass/medical{ - autoset_access = 0; - id_tag = "inf_recep"; - name = "Infirmary Reception"; - req_access = list("ACCESS_MEDICAL") - }, -/obj/machinery/door/blast/shutters{ - density = 0; - dir = 4; - icon_state = "shutter0"; - id_tag = "inf_recep_window"; - name = "Infirmary Reception Window Lockdown"; - opacity = 0 - }, -/turf/simulated/floor/tiled/white/monotile, -/area/medical/staging) -"ovZ" = ( -/obj/structure/closet/secure_closet/medical_torchsenior, -/obj/effect/floor_decal/corner/paleblue/mono, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/structure/sign/warning/nosmoking_1{ - pixel_y = 24 - }, -/turf/simulated/floor/tiled/white/monotile, -/area/medical/locker) -"owb" = ( -/turf/simulated/floor/tiled/white, -/area/medical/medicalhallway) -"oxa" = ( -/obj/effect/floor_decal/floordetail/edgedrain{ - dir = 10 - }, -/obj/effect/floor_decal/corner/paleblue{ - dir = 4 - }, -/obj/machinery/firealarm{ - dir = 1; - pixel_y = -24 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/medical/morgue/autopsy) -"oxb" = ( -/obj/effect/floor_decal/corner/paleblue{ - dir = 9 - }, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/tiled/white, -/area/medical/medicalhallway) -"oyb" = ( -/obj/machinery/light, -/obj/effect/floor_decal/industrial/hatch/yellow, -/obj/machinery/self_destruct, -/turf/simulated/floor/tiled/dark/monotile, -/area/security/nuke_storage) -"oye" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/cable/green{ - d2 = 8; - icon_state = "0-8" - }, -/obj/machinery/door/blast/regular{ - density = 0; - icon_state = "pdoor0"; - id_tag = "xenobio3"; - name = "Containment Blast Doors"; - opacity = 0 - }, -/obj/effect/wallframe_spawn/reinforced, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/turf/simulated/floor/plating, -/area/rnd/xenobiology) -"ozm" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/random/junk, -/obj/structure/railing/mapped, -/obj/structure/railing/mapped{ - dir = 4; - icon_state = "railing0-1" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/maintenance/firstdeck/foreport) -"oAp" = ( -/obj/effect/floor_decal/corner/research{ - dir = 10 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/firstdeck/aft) -"oAx" = ( -/obj/structure/sign/warning/pods/south{ - dir = 1 - }, -/turf/simulated/wall/r_wall/hull, -/area/maintenance/firstdeck/centralport) -"oAC" = ( -/obj/effect/floor_decal/corner/research{ - dir = 5 - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/white, -/area/rnd/research) -"oBG" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 4; - level = 2 - }, -/turf/simulated/floor/tiled, -/area/security/brig) -"oBZ" = ( -/obj/effect/floor_decal/techfloor{ - dir = 9 - }, -/obj/structure/closet/hydrant{ - pixel_y = 32 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/crew_quarters/safe_room/firstdeck) -"oCf" = ( -/obj/effect/floor_decal/corner/pink{ - dir = 9 - }, -/obj/effect/floor_decal/sign/d, -/turf/simulated/floor/tiled/white, -/area/medical/staging) -"oDg" = ( -/turf/simulated/wall/prepainted, -/area/security/questioning) -"oGG" = ( -/obj/structure/hygiene/shower{ - dir = 8 - }, -/turf/simulated/floor/tiled/freezer, -/area/crew_quarters/head/aux) -"oHP" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/effect/floor_decal/corner/green{ - dir = 10 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/firstdeck/center) -"oIb" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/security/wing) -"oIq" = ( -/obj/effect/floor_decal/industrial/outline/grey, -/obj/structure/closet/emcloset, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/firstdeck/foreport) -"oJb" = ( -/turf/simulated/wall/prepainted, -/area/assembly/robotics/laboratory) -"oLz" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 4; - level = 2 - }, -/obj/item/device/radio/intercom/department/security{ - pixel_y = 23 - }, -/turf/simulated/floor/tiled/dark, -/area/security/armoury) -"oLK" = ( -/obj/effect/floor_decal/corner/paleblue{ - dir = 5 - }, -/obj/item/device/radio/intercom/department/medbay{ - dir = 1; - pixel_y = -28 - }, -/turf/simulated/floor/tiled/white, -/area/medical/staging) -"oMb" = ( -/obj/machinery/door/window/brigdoor/eastleft{ - dir = 2; - id = "Cell 1"; - name = "Cell One" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable/green{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/turf/simulated/floor/tiled/steel_grid, -/area/security/wing) -"oMi" = ( -/obj/effect/floor_decal/floordetail/edgedrain{ - dir = 8 - }, -/obj/effect/floor_decal/corner/paleblue{ - dir = 6 - }, -/obj/structure/hygiene/sink{ - dir = 8; - pixel_x = -12; - pixel_y = 2 - }, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 4 - }, -/obj/item/device/radio/intercom/department/medbay{ - dir = 4; - pixel_x = -24 - }, -/turf/simulated/floor/tiled/white, -/area/medical/surgery) -"oMq" = ( -/obj/effect/floor_decal/corner/yellow{ - dir = 10 - }, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 1 - }, -/turf/simulated/floor/tiled, -/area/assembly/robotics/office) -"oOb" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/dark, -/area/rnd/rnd_sec) -"oOt" = ( -/obj/effect/floor_decal/floordetail/edgedrain, -/obj/effect/floor_decal/corner/paleblue{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/obj/structure/closet/crate/secure/biohazard/alt, -/turf/simulated/floor/tiled/white, -/area/medical/surgery2) -"oPb" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 1 - }, -/obj/structure/table/standard, -/obj/structure/closet/shipping_wall/filled{ - pixel_x = 26 - }, -/obj/machinery/light, -/turf/simulated/floor/tiled/white, -/area/rnd/development) -"oPD" = ( -/obj/structure/disposalpipe/segment, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/door/airlock/engineering{ - name = "Robotics Surgery" - }, -/obj/machinery/holosign/surgery{ - dir = 1; - id_tag = "roboticlab_or"; - pixel_y = 5 - }, -/turf/simulated/floor/tiled/monotile, -/area/assembly/robotics/surgery) -"oQb" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/effect/floor_decal/corner/research, -/turf/simulated/floor/tiled/white, -/area/rnd/research) -"oRb" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/light_switch{ - pixel_x = 24; - pixel_y = 22 - }, -/turf/simulated/floor/tiled/white, -/area/rnd/locker) -"oRF" = ( -/obj/machinery/light_switch{ - dir = 1; - pixel_x = 10; - pixel_y = -21 - }, -/obj/machinery/button/windowtint{ - dir = 1; - id = "rndpost"; - pixel_x = 2; - pixel_y = -21 - }, -/obj/effect/floor_decal/industrial/outline/red, -/obj/structure/cable/green{ - d2 = 4; - icon_state = "0-4" - }, -/obj/structure/closet/secure_closet/research_guard, -/obj/machinery/power/apc{ - dir = 8; - name = "west bump"; - pixel_x = -24 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/rnd/rnd_sec) -"oSb" = ( -/obj/effect/catwalk_plated, -/obj/structure/cable/green{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/structure/disposalpipe/segment{ - dir = 1; - icon_state = "pipe-c" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 8 - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/turf/simulated/floor/plating, -/area/security/wing) -"oSD" = ( -/obj/effect/floor_decal/corner/red{ - dir = 9 - }, -/obj/structure/disposalpipe/segment{ - dir = 8; - icon_state = "pipe-c" - }, -/turf/simulated/floor/tiled, -/area/security/locker) -"oTb" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, -/obj/machinery/hologram/holopad, -/obj/effect/floor_decal/corner/research{ - dir = 10 - }, -/turf/simulated/floor/tiled/white, -/area/rnd/research) -"oUb" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply, -/obj/effect/floor_decal/corner/research{ - dir = 10 - }, -/turf/simulated/floor/tiled/white, -/area/rnd/research) -"oVb" = ( -/obj/effect/wallframe_spawn/reinforced, -/obj/structure/cable/green{ - d2 = 2; - icon_state = "0-2" - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/plating, -/area/security/brig) -"oWb" = ( -/obj/machinery/light_switch{ - pixel_x = 6; - pixel_y = -24 - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled/monotile, -/area/security/brig) -"oWF" = ( -/obj/machinery/newscaster{ - pixel_y = -32 - }, -/obj/structure/closet{ - name = "Prisoner's Locker" - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/random/drinkbottle, -/obj/item/clothing/suit/apron/overalls, -/obj/effect/floor_decal/industrial/warning{ - dir = 1 - }, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 8 - }, -/turf/simulated/floor/tiled, -/area/security/brig) -"oXb" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/floor_decal/corner/research{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/rnd/research) -"oXv" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/dark, -/area/security/armoury) -"oXx" = ( -/obj/structure/table/rack, -/obj/item/clothing/head/helmet/ablative, -/obj/item/clothing/head/helmet/ablative, -/obj/item/clothing/head/helmet/ablative, -/obj/effect/floor_decal/industrial/outline/grey, -/obj/item/clothing/head/helmet/ablative, -/turf/simulated/floor/tiled/dark/monotile, -/area/security/armoury) -"oZb" = ( -/obj/effect/floor_decal/corner/paleblue{ - dir = 10 - }, -/turf/simulated/floor/tiled/white, -/area/medical/exam_room) -"pab" = ( -/obj/machinery/light_switch{ - pixel_x = 20; - pixel_y = 24 - }, -/turf/simulated/floor/tiled/white, -/area/rnd/research) -"pbb" = ( -/turf/simulated/floor/tiled/dark, -/area/rnd/misc_lab) -"pcb" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/effect/floor_decal/corner/research{ - dir = 10 - }, -/obj/structure/closet/medical_wall/filled{ - pixel_y = -32 - }, -/obj/machinery/camera/network/research{ - c_tag = "Research - Hallway"; - dir = 1 - }, -/turf/simulated/floor/tiled/white, -/area/rnd/research) -"pdb" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/effect/floor_decal/corner/research{ - dir = 8 - }, -/turf/simulated/floor/tiled/white, -/area/rnd/research) -"pdO" = ( -/obj/effect/floor_decal/techfloor{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/cyan{ - dir = 8 - }, -/obj/machinery/light{ - dir = 8 - }, -/turf/simulated/floor/tiled/techfloor, -/area/crew_quarters/safe_room/firstdeck) -"peb" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 1 - }, -/turf/simulated/floor/tiled/white, -/area/rnd/research) -"pfb" = ( -/obj/machinery/door/firedoor, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/door/airlock/research{ - name = "Miscellaneous Laboratory" - }, -/turf/simulated/floor/tiled/white/monotile, -/area/rnd/misc_lab) -"pgb" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/turf/simulated/floor/tiled/white, -/area/rnd/misc_lab) -"phb" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/white, -/area/rnd/misc_lab) -"pib" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 8; - icon_state = "warning" - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/dark, -/area/rnd/misc_lab) -"pjb" = ( -/obj/structure/cable/green{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/turf/simulated/floor/tiled/dark, -/area/rnd/misc_lab) -"pjR" = ( -/turf/simulated/wall/r_wall/prepainted, -/area/security/detectives_office) -"pjV" = ( -/obj/effect/floor_decal/corner/pink{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 1 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/white, -/area/medical/staging) -"pkb" = ( -/turf/simulated/wall/prepainted, -/area/rnd/research) -"pmb" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/effect/floor_decal/corner/research{ - dir = 6; - icon_state = "corner_white" - }, -/turf/simulated/floor/tiled/white, -/area/rnd/research) -"pmz" = ( -/obj/effect/floor_decal/corner/paleblue{ - dir = 5 - }, -/obj/machinery/light{ - dir = 1 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/firstdeck/aft) -"pnb" = ( -/obj/machinery/alarm{ - dir = 8; - pixel_x = 24 - }, -/obj/machinery/chem_master, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled/dark/monotile, -/area/rnd/misc_lab) -"poS" = ( -/turf/simulated/wall/r_wall/prepainted, -/area/crew_quarters/safe_room/medical) -"pqb" = ( -/obj/effect/floor_decal/corner/research{ - dir = 10 - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/power/apc{ - name = "south bump"; - pixel_y = -28 - }, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 1; - id_tag = null - }, -/obj/structure/cable/green, -/turf/simulated/floor/tiled/white, -/area/rnd/locker) -"prb" = ( -/obj/effect/floor_decal/corner/research{ - dir = 10 - }, -/obj/machinery/alarm{ - dir = 1; - pixel_y = -22 - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/structure/closet/secure_closet/scientist_torch, -/turf/simulated/floor/tiled/white, -/area/rnd/locker) -"psb" = ( -/obj/structure/closet/secure_closet/secure_closet/xenoarchaeologist_torch, -/obj/effect/floor_decal/corner/research{ - dir = 10 - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/light/small{ - dir = 4; - pixel_y = 8 - }, -/turf/simulated/floor/tiled/white, -/area/rnd/locker) -"ptb" = ( -/obj/structure/closet/emcloset, -/obj/structure/extinguisher_cabinet{ - pixel_x = -32 - }, -/obj/effect/floor_decal/corner/research{ - dir = 10 - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled/white, -/area/rnd/research) -"pub" = ( -/obj/machinery/lapvend, -/obj/effect/floor_decal/corner/research{ - dir = 10 - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/firealarm{ - dir = 4; - pixel_x = 21 - }, -/turf/simulated/floor/tiled/white, -/area/rnd/research) -"pud" = ( -/obj/machinery/mech_recharger, -/obj/machinery/firealarm{ - dir = 4; - pixel_x = 21 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/security/armoury) -"puw" = ( -/obj/effect/floor_decal/industrial/hatch/yellow, -/obj/machinery/atmospherics/pipe/simple/hidden/fuel, -/turf/simulated/floor/tiled/steel_grid, -/area/hallway/primary/firstdeck/aft) -"puL" = ( -/obj/machinery/power/apc{ - dir = 1; - name = "north bump"; - pixel_y = 24 - }, -/obj/structure/cable/green{ - d2 = 4; - icon_state = "0-4" - }, -/turf/simulated/floor/tiled, -/area/security/brig) -"pvb" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/universal, -/obj/machinery/smartfridge, -/turf/simulated/floor/plating, -/area/rnd/xenobiology/xenoflora) -"pwb" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/disposalpipe/segment, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/door/airlock/glass/research{ - name = "Xenoflora Laboratory" - }, -/obj/machinery/door/firedoor, -/turf/simulated/floor/tiled/white/monotile, -/area/rnd/xenobiology/xenoflora) -"pxb" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/simple/visible/fuel, -/obj/structure/cable/green{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/structure/catwalk, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, -/turf/simulated/floor/plating, -/area/maintenance/firstdeck/aftport) -"pxv" = ( -/obj/effect/floor_decal/industrial/outline/grey, -/obj/structure/closet/crate/medical, -/obj/item/storage/firstaid/regular, -/obj/item/storage/firstaid/fire{ - pixel_x = -4; - pixel_y = -4 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/security/storage) -"pyb" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 - }, -/obj/machinery/power/apc{ - dir = 4; - name = "east bump"; - pixel_x = 24 - }, -/obj/structure/cable/green{ - d2 = 8; - icon_state = "0-8" - }, -/obj/structure/railing/mapped{ - dir = 8; - icon_state = "railing0-1" - }, -/obj/structure/railing/mapped, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/turf/simulated/floor/plating, -/area/maintenance/firstdeck/aftport) -"pyg" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/door/airlock/glass/security{ - id_tag = "prisonexit"; - name = "Brig Entry" - }, -/obj/machinery/door/firedoor, -/turf/simulated/floor/tiled/steel_ridged, -/area/security/brig) -"pzH" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/security/detectives_office) -"pzZ" = ( -/obj/effect/floor_decal/industrial/hatch/blue, -/obj/structure/disposalpipe/segment, -/obj/machinery/door/blast/shutters{ - density = 0; - dir = 2; - icon_state = "shutter0"; - id_tag = "infirm_pub"; - name = "Infirmary Public Hallway Lockdown"; - opacity = 0 - }, -/obj/machinery/door/firedoor, -/turf/simulated/floor/tiled/white, -/area/medical/medicalhallway) -"pAb" = ( -/obj/machinery/newscaster{ - pixel_x = -32 - }, -/turf/simulated/floor/tiled/white, -/area/rnd/research) -"pAg" = ( -/obj/machinery/atmospherics/pipe/manifold/visible/fuel{ - dir = 4 - }, -/obj/machinery/air_sensor{ - id_tag = "cChamber1p" - }, -/turf/simulated/floor/reinforced, -/area/thruster/d1port) -"pBb" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/universal, -/obj/effect/wallframe_spawn/reinforced/polarized/no_grille{ - id = "misc_lab" - }, -/turf/simulated/floor/plating, -/area/rnd/misc_lab) -"pBL" = ( -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/door/airlock/sol{ - name = "Briefing Room" - }, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/tiled/dark/monotile, -/area/command/conference) -"pCb" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/obj/machinery/firealarm{ - dir = 8; - pixel_x = -24 - }, -/turf/simulated/floor/tiled/white, -/area/rnd/misc_lab) -"pDb" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 8; - icon_state = "warning" - }, -/turf/simulated/floor/tiled/dark, -/area/rnd/misc_lab) -"pEb" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/turf/simulated/floor/tiled/dark, -/area/rnd/misc_lab) -"pEr" = ( -/obj/effect/floor_decal/corner/paleblue{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/turf/simulated/floor/tiled/white, -/area/medical/equipstorage) -"pFb" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/bed/chair/comfy/lime{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark, -/area/rnd/misc_lab) -"pGb" = ( -/obj/machinery/power/apc{ - dir = 4; - name = "east bump"; - pixel_x = 24 - }, -/obj/structure/cable/green{ - d2 = 8; - icon_state = "0-8" - }, -/obj/machinery/chemical_dispenser/full, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled/dark/monotile, -/area/rnd/misc_lab) -"pHb" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/disposalpipe/segment, -/obj/effect/floor_decal/corner/research, -/obj/machinery/requests_console{ - announcementConsole = 1; - department = "Security"; - departmentType = 5; - pixel_x = 32 - }, -/turf/simulated/floor/tiled/white, -/area/rnd/research) -"pIb" = ( -/obj/machinery/atmospherics/binary/pump{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 - }, -/obj/structure/disposalpipe/segment{ - dir = 4; - icon_state = "pipe-c" - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/effect/floor_decal/corner/research{ - dir = 9 - }, -/turf/simulated/floor/tiled/white, -/area/rnd/xenobiology/xenoflora) -"pIk" = ( -/obj/structure/table/standard, -/obj/item/storage/firstaid/adv, -/obj/effect/floor_decal/floordetail/edgedrain{ - dir = 4 - }, -/obj/effect/floor_decal/corner/paleblue{ - dir = 9 - }, -/turf/simulated/floor/tiled/white, -/area/medical/surgery2) -"pIA" = ( -/turf/simulated/floor/tiled, -/area/hallway/primary/firstdeck/fore) -"pIW" = ( -/obj/structure/lattice, -/obj/machinery/atmospherics/pipe/simple/visible/blue, -/obj/machinery/meter, -/obj/effect/wallframe_spawn/reinforced_phoron, -/obj/machinery/door/firedoor, -/turf/simulated/floor/reinforced, -/area/thruster/d1port) -"pJb" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/obj/structure/disposalpipe/segment{ - dir = 8; - icon_state = "pipe-c" - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/turf/simulated/floor/tiled/white, -/area/rnd/xenobiology/xenoflora) -"pKb" = ( -/obj/machinery/atmospherics/portables_connector, -/obj/effect/floor_decal/industrial/outline/blue, -/turf/simulated/floor/tiled/white, -/area/rnd/misc_lab) -"pLb" = ( -/obj/machinery/atmospherics/portables_connector, -/obj/effect/floor_decal/industrial/outline/blue, -/obj/machinery/light_switch{ - pixel_x = -10; - pixel_y = 28 - }, -/obj/machinery/firealarm{ - pixel_y = 24 - }, -/turf/simulated/floor/tiled/white, -/area/rnd/xenobiology/xenoflora) -"pMb" = ( -/obj/machinery/atmospherics/portables_connector, -/obj/effect/floor_decal/industrial/outline/blue, -/obj/item/device/radio/intercom{ - pixel_y = 23 - }, -/turf/simulated/floor/tiled/white/monotile, -/area/rnd/xenobiology/xenoflora) -"pNb" = ( -/obj/machinery/atmospherics/portables_connector, -/obj/effect/floor_decal/industrial/outline/blue, -/obj/machinery/camera/network/research{ - c_tag = "Research - Miscellaneous Laboratory" - }, -/turf/simulated/floor/tiled/white, -/area/rnd/misc_lab) -"pOb" = ( -/obj/machinery/seed_extractor, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled/white, -/area/rnd/xenobiology/xenoflora) -"pOL" = ( -/obj/effect/floor_decal/corner/research{ - dir = 5 - }, -/obj/machinery/atmospherics/unary/vent_pump/on, -/turf/simulated/floor/tiled/white, -/area/rnd/office) -"pPa" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/white, -/area/medical/sleeper) -"pPb" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 8 - }, -/turf/simulated/floor/tiled/white, -/area/rnd/misc_lab) -"pQb" = ( -/obj/machinery/botany/editor, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled/white, -/area/rnd/xenobiology/xenoflora) -"pQO" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/disposalpipe/segment, -/obj/effect/floor_decal/corner/red{ - dir = 9 - }, -/turf/simulated/floor/tiled/monotile, -/area/security/wing) -"pRb" = ( -/obj/machinery/botany/extractor, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled/white, -/area/rnd/xenobiology/xenoflora) -"pRm" = ( -/obj/machinery/meter, -/obj/machinery/atmospherics/pipe/simple/visible/blue, -/obj/effect/wallframe_spawn/reinforced_phoron, -/obj/machinery/door/firedoor, -/turf/simulated/floor/reinforced, -/area/thruster/d1starboard) -"pSb" = ( -/obj/machinery/computer/air_control{ - input_tag = "test_in"; - name = "Test Chamber Gas Monitor"; - output_tag = "test_out"; - sensor_name = "Test Chamber Sensor"; - sensor_tag = "testchamber_sensor" - }, -/obj/machinery/atmospherics/pipe/simple/visible/red, -/turf/simulated/floor/tiled/white, -/area/rnd/misc_lab) -"pUb" = ( -/obj/structure/closet/toolcloset, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/firstdeck/aftport) -"pUr" = ( -/obj/effect/floor_decal/corner/red{ - dir = 6 - }, -/obj/machinery/alarm{ - dir = 8; - pixel_x = 25; - req_access = list(list("ACCESS_ENGINE_EQUIP","ACCESS_ATMOS")) - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/turf/simulated/floor/tiled, -/area/security/processing) -"pVv" = ( -/obj/machinery/disposal, -/obj/effect/floor_decal/industrial/hatch/yellow, -/obj/structure/disposalpipe/trunk, -/obj/machinery/light{ - dir = 1; - icon_state = "tube1" - }, -/turf/simulated/floor/tiled/monotile, -/area/security/detectives_office) -"pWb" = ( -/turf/simulated/floor/tiled/white, -/area/rnd/research) -"pWc" = ( -/obj/structure/table/rack, -/obj/item/storage/firstaid/o2{ - pixel_x = 5; - pixel_y = 5 - }, -/obj/item/storage/firstaid/fire, -/obj/random/medical/lite, -/obj/effect/floor_decal/corner/paleblue/mono, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/firealarm{ - dir = 8; - pixel_x = -24 - }, -/turf/simulated/floor/tiled/white/monotile, -/area/medical/equipstorage) -"pWW" = ( -/turf/simulated/wall/prepainted, -/area/medical/locker) -"pXm" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/sol{ - name = "Briefing Room" - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/command/conference) -"pXG" = ( -/obj/structure/table/standard, -/obj/random/smokes, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/firstdeck/forestarboard) -"pYb" = ( -/obj/effect/floor_decal/industrial/warning, -/turf/simulated/floor/tiled/white, -/area/rnd/xenobiology/xenoflora) -"pZb" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/light{ - dir = 4 - }, -/obj/effect/floor_decal/corner/research{ - dir = 6 - }, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/tiled/white, -/area/rnd/research) -"pZj" = ( -/obj/effect/floor_decal/techfloor, -/obj/effect/floor_decal/techfloor{ - dir = 1 - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/command/armoury) -"pZy" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/maintenance{ - name = "Security Wing Maintenance"; - secured_wires = 1 - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/tiled/steel_ridged, -/area/security/wing) -"pZE" = ( -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/firstdeck/aftstarboard) -"qab" = ( -/obj/machinery/atmospherics/unary/outlet_injector{ - frequency = 1441; - icon_state = "map_injector"; - id = "xenobot_in"; - use_power = 1 - }, -/obj/machinery/light/small{ - dir = 8 - }, -/turf/simulated/floor/reinforced, -/area/rnd/xenobiology/xenoflora) -"qbb" = ( -/obj/machinery/air_sensor{ - id_tag = "xenobot_sensor" - }, -/turf/simulated/floor/reinforced, -/area/rnd/xenobiology/xenoflora) -"qbH" = ( -/obj/effect/floor_decal/industrial/outline/grey, -/obj/structure/table/rack{ - dir = 4 - }, -/obj/item/stack/material/glass/reinforced{ - amount = 30 - }, -/obj/item/stack/material/glass/reinforced{ - amount = 30 - }, -/obj/item/stack/material/glass/reinforced{ - amount = 30 - }, -/obj/item/stack/material/glass/phoronrglass{ - amount = 5 - }, -/obj/structure/window/reinforced{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/command/armoury) -"qcb" = ( -/obj/machinery/atmospherics/unary/vent_pump/tank{ - external_pressure_bound = 0; - external_pressure_bound_default = 0; - icon_state = "map_vent_in"; - id_tag = "xenobot_out"; - internal_pressure_bound = 2000; - internal_pressure_bound_default = 2000; - pressure_checks = 2; - pressure_checks_default = 2; - pump_direction = 0 - }, -/turf/simulated/floor/reinforced, -/area/rnd/xenobiology/xenoflora) -"qcJ" = ( -/obj/structure/disposalpipe/segment{ - dir = 8; - icon_state = "pipe-c" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark, -/area/rnd/rnd_sec) -"qdb" = ( -/turf/simulated/floor/reinforced, -/area/rnd/xenobiology/xenoflora) -"qeb" = ( -/obj/machinery/atmospherics/pipe/manifold/visible/red{ - dir = 8 - }, -/obj/structure/table/standard, -/obj/item/storage/box/botanydisk, -/obj/item/storage/box/beakers{ - pixel_x = 2; - pixel_y = 2 - }, -/obj/item/storage/box/syringes, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/disposalpipe/segment, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/effect/floor_decal/corner/research{ - dir = 9 - }, -/turf/simulated/floor/tiled/white, -/area/rnd/xenobiology/xenoflora) -"qfa" = ( -/obj/effect/floor_decal/corner/paleblue{ - dir = 10 - }, -/obj/effect/floor_decal/corner/paleblue{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable/green{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/turf/simulated/floor/tiled/white, -/area/medical/locker) -"qfb" = ( -/obj/machinery/atmospherics/pipe/simple/visible/red{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/universal, -/turf/simulated/floor/tiled/white, -/area/rnd/xenobiology/xenoflora) -"qgb" = ( -/obj/machinery/atmospherics/omni/filter{ - tag_north = 1; - tag_south = 2; - tag_west = 2 - }, -/turf/simulated/floor/tiled/white, -/area/rnd/xenobiology/xenoflora) -"qgw" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark, -/area/command/conference) -"qhb" = ( -/obj/machinery/atmospherics/binary/pump, -/obj/effect/floor_decal/industrial/warning/corner, -/turf/simulated/floor/tiled/white/monotile, -/area/rnd/xenobiology/xenoflora) -"qib" = ( -/obj/effect/floor_decal/industrial/warning, -/obj/structure/hygiene/sink{ - dir = 4; - pixel_x = 11; - pixel_y = 5 - }, -/turf/simulated/floor/tiled/white, -/area/rnd/xenobiology/xenoflora) -"qig" = ( -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/hologram/holopad, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/tiled/dark/monotile, -/area/security/bo) -"qiL" = ( -/obj/effect/floor_decal/corner/blue/half{ - dir = 1 - }, -/turf/simulated/floor/tiled/monotile, -/area/hallway/primary/firstdeck/fore) -"qjb" = ( -/obj/machinery/atmospherics/binary/pump, -/obj/machinery/light{ - dir = 8; - icon_state = "tube1" - }, -/turf/simulated/floor/tiled/white, -/area/rnd/misc_lab) -"qju" = ( -/obj/effect/floor_decal/floordetail/edgedrain, -/obj/effect/floor_decal/corner/paleblue{ - dir = 5 - }, -/obj/machinery/light, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/white, -/area/medical/surgery2) -"qkb" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/turf/simulated/floor/tiled/white, -/area/rnd/misc_lab) -"qkc" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/firealarm{ - dir = 1; - pixel_y = -24 - }, -/turf/simulated/floor/tiled, -/area/security/processing) -"qlb" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 8 - }, -/turf/simulated/floor/tiled/white, -/area/rnd/misc_lab) -"qmb" = ( -/obj/machinery/atmospherics/omni/filter{ - tag_east = 2; - tag_north = 2; - tag_south = 1 - }, -/turf/simulated/floor/tiled/white, -/area/rnd/misc_lab) -"qnb" = ( -/obj/machinery/atmospherics/pipe/simple/visible/red{ - dir = 10 - }, -/turf/simulated/floor/tiled/white, -/area/rnd/misc_lab) -"qnz" = ( -/obj/effect/wallframe_spawn/reinforced/polarized/no_grille/regular{ - id = "or2" - }, -/turf/simulated/floor/plating, -/area/medical/surgery2) -"qnA" = ( -/obj/effect/floor_decal/floordetail/edgedrain, -/obj/effect/floor_decal/corner/paleblue{ - dir = 5 - }, -/obj/machinery/light, -/obj/structure/closet/crate/freezer, -/obj/item/device/mmi, -/obj/item/reagent_containers/ivbag/nanoblood, -/obj/item/reagent_containers/ivbag/nanoblood, -/turf/simulated/floor/tiled/white, -/area/medical/surgery) -"qqb" = ( -/obj/effect/wallframe_spawn/reinforced/polarized/full{ - id = "sci_office" - }, -/turf/simulated/floor/plating, -/area/rnd/office) -"qrb" = ( -/obj/effect/floor_decal/corner/research{ - dir = 8 - }, -/turf/simulated/floor/tiled/white, -/area/rnd/research) -"qrq" = ( -/obj/effect/floor_decal/corner/paleblue{ - dir = 5 - }, -/obj/machinery/hologram/holopad, -/turf/simulated/floor/tiled/white, -/area/medical/staging) -"qsO" = ( -/obj/structure/table/standard, -/obj/item/paper_bin, -/obj/item/pen/blue, -/obj/effect/floor_decal/corner/research/mono, -/obj/machinery/light{ - dir = 1 - }, -/turf/simulated/floor/tiled/white/monotile, -/area/rnd/office) -"qtb" = ( -/obj/effect/wallframe_spawn/reinforced/no_grille, -/turf/simulated/floor/reinforced, -/area/rnd/xenobiology/xenoflora) -"qtQ" = ( -/obj/machinery/door/unpowered/simple/plastic/open, -/turf/simulated/floor/tiled/freezer, -/area/medical/washroom) -"qvX" = ( -/obj/structure/table/rack, -/obj/random/maintenance/solgov, -/obj/structure/railing/mapped{ - dir = 8; - icon_state = "railing0-1" - }, -/turf/simulated/floor/plating, -/area/maintenance/firstdeck/foreport) -"qwk" = ( -/obj/effect/floor_decal/corner/blue/half{ - dir = 8 - }, -/turf/simulated/floor/tiled/monotile, -/area/hallway/primary/firstdeck/fore) -"qxb" = ( -/obj/structure/reagent_dispensers/fueltank, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/firstdeck/foreport) -"qxQ" = ( -/obj/machinery/flasher{ - id_tag = "permflash"; - name = "Floor mounted flash" - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/monotile, -/area/security/brig) -"qya" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/power/apc{ - dir = 8; - name = "west bump"; - pixel_x = -24 - }, -/obj/item/hand_labeler, -/obj/structure/table/standard, -/obj/structure/cable/green{ - d2 = 2; - icon_state = "0-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, -/turf/simulated/floor/tiled/dark, -/area/security/evidence) -"qyb" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/effect/floor_decal/corner/research{ - dir = 6 - }, -/obj/structure/disposalpipe/segment, -/obj/machinery/firealarm{ - dir = 4; - pixel_x = 21 - }, -/turf/simulated/floor/tiled/white, -/area/rnd/research) -"qyX" = ( -/obj/structure/table/rack, -/obj/effect/floor_decal/industrial/outline/grey, -/obj/item/clothing/suit/armor/laserproof{ - pixel_x = -2; - pixel_y = -2 - }, -/obj/item/clothing/suit/armor/laserproof{ - pixel_x = -2; - pixel_y = -2 - }, -/obj/item/clothing/suit/armor/laserproof{ - pixel_x = -2; - pixel_y = -2 - }, -/obj/item/clothing/suit/armor/laserproof{ - pixel_x = -2; - pixel_y = -2 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/security/armoury) -"qzb" = ( -/obj/machinery/atmospherics/pipe/simple/visible, -/obj/machinery/meter, -/obj/effect/wallframe_spawn/reinforced/no_grille, -/turf/simulated/floor/reinforced, -/area/rnd/xenobiology/xenoflora) -"qAb" = ( -/obj/machinery/door/window/westright{ - dir = 1; - name = "Xenoflora Environment" - }, -/obj/machinery/door/window/southright{ - name = "Xenoflora Environment" - }, -/turf/simulated/floor/reinforced, -/area/rnd/xenobiology/xenoflora) -"qBb" = ( -/obj/machinery/atmospherics/binary/pump{ - dir = 1 - }, -/turf/simulated/floor/tiled/white, -/area/rnd/misc_lab) -"qCb" = ( -/obj/machinery/atmospherics/pipe/simple/visible, -/turf/simulated/floor/tiled/white, -/area/rnd/misc_lab) -"qCs" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/structure/catwalk, -/obj/structure/disposalpipe/segment{ - dir = 8; - icon_state = "pipe-c" - }, -/turf/simulated/floor/plating, -/area/maintenance/firstdeck/foreport) -"qDb" = ( -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/vending/assist{ - dir = 8 - }, -/turf/simulated/floor/tiled/white, -/area/rnd/misc_lab) -"qDJ" = ( -/obj/structure/bed/chair{ - dir = 4 - }, -/obj/machinery/camera/network/first_deck{ - c_tag = "First Deck - Safe Room Entrance"; - dir = 4 - }, -/obj/effect/floor_decal/techfloor, -/obj/effect/floor_decal/corner_techfloor_grid{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/cyan{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/turf/simulated/floor/tiled/techfloor, -/area/crew_quarters/safe_room/firstdeck) -"qDM" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold4w/visible/fuel, -/turf/simulated/floor/tiled/techfloor, -/area/thruster/d1port) -"qEb" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/door/airlock/research{ - name = "Research Paperwork Office" - }, -/obj/machinery/door/firedoor, -/turf/simulated/floor/tiled/white/monotile, -/area/rnd/office) -"qFb" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/floor_decal/corner/research{ - dir = 9 - }, -/turf/simulated/floor/tiled/white, -/area/rnd/research) -"qGb" = ( -/obj/machinery/atmospherics/pipe/simple/visible/red, -/obj/machinery/reagentgrinder, -/obj/item/reagent_containers/glass/beaker/large, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/light{ - dir = 8; - icon_state = "tube1" - }, -/obj/structure/disposalpipe/segment, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/alarm{ - dir = 4; - pixel_x = -22 - }, -/obj/effect/floor_decal/corner/research{ - dir = 9 - }, -/turf/simulated/floor/tiled/white, -/area/rnd/xenobiology/xenoflora) -"qGx" = ( -/obj/effect/floor_decal/corner/paleblue{ - dir = 5 - }, -/obj/effect/floor_decal/corner/paleblue{ - dir = 10 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/iv_drip, -/obj/machinery/light/spot{ - dir = 1 - }, -/obj/structure/sign/warning/nosmoking_1{ - pixel_y = 24 - }, -/turf/simulated/floor/tiled/white, -/area/medical/sleeper) -"qGE" = ( -/obj/effect/floor_decal/corner/paleblue{ - dir = 10 - }, -/turf/simulated/floor/tiled/white, -/area/medical/equipstorage) -"qHb" = ( -/obj/machinery/portable_atmospherics/hydroponics/soil, -/turf/simulated/floor/grass, -/area/rnd/xenobiology/xenoflora) -"qHq" = ( -/obj/structure/sign/directions/bridge{ - dir = 1; - pixel_y = 3 - }, -/obj/structure/sign/directions/security{ - dir = 8; - pixel_y = -4 - }, -/turf/simulated/wall/prepainted, -/area/hallway/primary/firstdeck/fore) -"qHx" = ( -/obj/structure/sign/warning/secure_area, -/turf/simulated/wall/r_wall/prepainted, -/area/teleporter/firstdeck) -"qIb" = ( -/obj/machinery/atmospherics/pipe/simple/visible/blue, -/turf/simulated/floor/tiled/white, -/area/rnd/xenobiology/xenoflora) -"qJb" = ( -/obj/machinery/atmospherics/pipe/simple/visible{ - dir = 5 - }, -/turf/simulated/floor/tiled/white, -/area/rnd/xenobiology/xenoflora) -"qKb" = ( -/obj/machinery/atmospherics/pipe/manifold/visible{ - dir = 4 - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 4 - }, -/obj/machinery/meter, -/turf/simulated/floor/tiled/white/monotile, -/area/rnd/xenobiology/xenoflora) -"qKx" = ( -/obj/effect/floor_decal/corner/paleblue{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/medical/locker) -"qKH" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/tiled/monotile, -/area/hallway/primary/firstdeck/fore) -"qKQ" = ( -/obj/structure/table/rack, -/obj/effect/floor_decal/industrial/outline/grey, -/obj/structure/window/reinforced{ - dir = 1 - }, -/obj/structure/window/reinforced{ - dir = 4 - }, -/obj/item/storage/box/teargas{ - pixel_x = 3; - pixel_y = 2 - }, -/obj/item/storage/box/flashbangs, -/obj/item/storage/box/smokes, -/obj/item/storage/box/handcuffs, -/obj/item/shield/riot/metal, -/obj/item/shield/riot/metal, -/obj/item/shield/riot/metal, -/turf/simulated/floor/tiled/techfloor/grid, -/area/command/armoury/tactical) -"qLb" = ( -/obj/machinery/portable_atmospherics/hydroponics{ - closed_system = 1; - name = "isolation tray" - }, -/obj/machinery/atmospherics/portables_connector, -/obj/effect/floor_decal/industrial/hatch/yellow, -/turf/simulated/floor/tiled/freezer, -/area/rnd/xenobiology/xenoflora) -"qLr" = ( -/obj/effect/floor_decal/corner/paleblue/mono, -/obj/structure/table/standard, -/obj/item/reagent_containers/food/snacks/lunacake/mooncake, -/obj/machinery/alarm{ - dir = 1; - pixel_y = -22 - }, -/turf/simulated/floor/tiled/white/monotile, -/area/medical/medicalhallway) -"qMb" = ( -/obj/machinery/portable_atmospherics/hydroponics{ - closed_system = 1; - name = "isolation tray" - }, -/obj/machinery/atmospherics/portables_connector, -/obj/effect/floor_decal/industrial/hatch/yellow, -/obj/machinery/light/spot{ - dir = 4 - }, -/turf/simulated/floor/tiled/freezer, -/area/rnd/xenobiology/xenoflora) -"qNb" = ( -/obj/machinery/atmospherics/pipe/simple/visible/red{ - dir = 5 - }, -/turf/simulated/floor/tiled/white, -/area/rnd/misc_lab) -"qOb" = ( -/obj/machinery/atmospherics/pipe/simple/visible/red{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/visible, -/turf/simulated/floor/tiled/white, -/area/rnd/misc_lab) -"qPb" = ( -/obj/machinery/atmospherics/pipe/manifold/visible/red, -/obj/machinery/meter, -/turf/simulated/floor/tiled/white, -/area/rnd/misc_lab) -"qQb" = ( -/obj/machinery/atmospherics/valve{ - dir = 8 - }, -/turf/simulated/floor/tiled/white, -/area/rnd/misc_lab) -"qQd" = ( -/obj/structure/bed/chair/comfy/lime{ - dir = 1 - }, -/obj/effect/floor_decal/corner/research{ - dir = 5 - }, -/turf/simulated/floor/tiled/white, -/area/rnd/office) -"qRb" = ( -/obj/machinery/atmospherics/valve{ - dir = 8 - }, -/obj/effect/floor_decal/corner/research/half, -/obj/effect/floor_decal/industrial/warning, -/turf/simulated/floor/tiled/white/monotile, -/area/rnd/misc_lab) -"qRE" = ( -/obj/effect/floor_decal/corner/red/diagonal, -/obj/structure/hygiene/sink{ - dir = 8; - pixel_x = -12; - pixel_y = 2 - }, -/obj/item/storage/mirror{ - pixel_x = -32 - }, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 1; - level = 2 - }, -/turf/simulated/floor/tiled/freezer, -/area/security/brig) -"qSb" = ( -/obj/machinery/atmospherics/pipe/simple/visible{ - dir = 4 - }, -/obj/machinery/atmospherics/binary/pump{ - dir = 1 - }, -/obj/effect/floor_decal/corner/research/half, -/obj/effect/floor_decal/industrial/warning, -/turf/simulated/floor/tiled/white/monotile, -/area/rnd/misc_lab) -"qSx" = ( -/obj/item/clothing/suit/storage/toggle/labcoat, -/obj/item/storage/box/evidence, -/obj/item/storage/box/syringes, -/obj/item/storage/box/gloves, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/structure/window/reinforced{ - dir = 8 - }, -/obj/structure/closet/secure_closet/forensics, -/turf/simulated/floor/tiled/white, -/area/security/detectives_office) -"qSD" = ( -/obj/structure/closet{ - name = "Evidence Closet" - }, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/floor/tiled/dark, -/area/security/evidence) -"qTX" = ( -/obj/effect/floor_decal/industrial/outline/grey, -/obj/structure/closet/crate, -/obj/item/stack/material/phoron{ - amount = 25 - }, -/obj/item/stack/material/phoron{ - amount = 25 - }, -/obj/item/stack/material/phoron{ - amount = 25 - }, -/obj/item/stack/material/phoron{ - amount = 25 - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/techfloor/grid, -/area/command/armoury) -"qUb" = ( -/obj/machinery/atmospherics/pipe/manifold/visible{ - dir = 1 - }, -/obj/machinery/meter, -/obj/effect/floor_decal/corner/research/half, -/turf/simulated/floor/tiled/white/monotile, -/area/rnd/misc_lab) -"qUl" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/security/detectives_office) -"qVb" = ( -/obj/random/junk, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/firstdeck/foreport) -"qWb" = ( -/obj/structure/table/standard, -/obj/item/clothing/mask/gas, -/obj/item/clothing/mask/gas, -/obj/item/clothing/mask/gas, -/obj/item/clothing/mask/gas, -/obj/effect/floor_decal/corner/research/half, -/obj/machinery/light/spot{ - dir = 4 - }, -/turf/simulated/floor/tiled/white/monotile, -/area/rnd/misc_lab) -"qWE" = ( -/turf/simulated/wall/prepainted, -/area/security/detectives_office) -"qWF" = ( -/obj/structure/table/rack, -/obj/item/shield/riot, -/obj/item/shield/riot, -/obj/effect/floor_decal/industrial/outline/grey, -/obj/structure/window/reinforced, -/obj/structure/window/reinforced{ - dir = 8 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/security/armoury) -"qYb" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 4 - }, -/obj/effect/floor_decal/corner/research{ - dir = 6 - }, -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/turf/simulated/floor/tiled/white, -/area/rnd/research) -"qYy" = ( -/obj/effect/floor_decal/corner/red{ - dir = 9 - }, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/security/wing) -"qZb" = ( -/obj/machinery/atmospherics/pipe/manifold/visible{ - dir = 8 - }, -/obj/machinery/camera/network/research{ - c_tag = "Research - Xenobotany Environment"; - dir = 4 - }, -/obj/effect/floor_decal/corner/research/mono, -/obj/effect/floor_decal/industrial/warning{ - dir = 1; - icon_state = "warning" - }, -/obj/item/device/radio/intercom{ - dir = 4; - pixel_x = -21 - }, -/turf/simulated/floor/tiled/white/monotile, -/area/rnd/xenobiology/xenoflora) -"rab" = ( -/obj/machinery/computer/air_control{ - input_tag = "xenobot_in"; - name = "Xenoflora Gas Monitor"; - output_tag = "xenobot_out"; - sensor_name = "Xenoflora Environment"; - sensor_tag = "xenobot_sensor" - }, -/obj/machinery/atmospherics/pipe/simple/visible{ - dir = 10 - }, -/obj/effect/floor_decal/corner/research/mono, -/obj/effect/floor_decal/industrial/warning{ - dir = 1; - icon_state = "warning" - }, -/turf/simulated/floor/tiled/white/monotile, -/area/rnd/xenobiology/xenoflora) -"rap" = ( -/obj/machinery/firealarm{ - pixel_y = 24 - }, -/obj/effect/floor_decal/corner/research{ - dir = 5 - }, -/turf/simulated/floor/tiled/white, -/area/rnd/research) -"rbb" = ( -/obj/machinery/atmospherics/omni/filter{ - tag_east = 2; - tag_north = 2; - tag_south = 1 - }, -/obj/effect/floor_decal/corner/research/mono, -/obj/effect/floor_decal/industrial/warning{ - dir = 1; - icon_state = "warning" - }, -/turf/simulated/floor/tiled/white/monotile, -/area/rnd/xenobiology/xenoflora) -"rcb" = ( -/obj/machinery/atmospherics/pipe/simple/visible/red{ - dir = 4 - }, -/obj/effect/floor_decal/corner/research/mono, -/obj/effect/floor_decal/industrial/warning{ - dir = 1; - icon_state = "warning" - }, -/turf/simulated/floor/tiled/white/monotile, -/area/rnd/xenobiology/xenoflora) -"rcx" = ( -/obj/effect/floor_decal/industrial/warning, -/turf/simulated/floor/tiled, -/area/hallway/primary/firstdeck/aft) -"rdb" = ( -/obj/machinery/atmospherics/pipe/simple/visible/red{ - dir = 4 - }, -/obj/effect/wallframe_spawn/reinforced/no_grille, -/turf/simulated/floor/plating, -/area/rnd/xenobiology/xenoflora) -"reb" = ( -/obj/machinery/biogenerator, -/obj/machinery/atmospherics/pipe/manifold/visible/red{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 8 - }, -/obj/structure/disposalpipe/segment, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/effect/floor_decal/corner/research{ - dir = 9 - }, -/turf/simulated/floor/tiled/white, -/area/rnd/xenobiology/xenoflora) -"rfb" = ( -/obj/machinery/atmospherics/pipe/simple/visible/blue, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/rnd/xenobiology/xenoflora) -"rgb" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 8 - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled/white, -/area/rnd/xenobiology/xenoflora) -"rhb" = ( -/obj/machinery/atmospherics/pipe/simple/visible, -/obj/effect/floor_decal/industrial/warning{ - dir = 4 - }, -/turf/simulated/floor/tiled/white/monotile, -/area/rnd/xenobiology/xenoflora) -"rhO" = ( -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/firstdeck/centralstarboard) -"rib" = ( -/obj/machinery/atmospherics/valve, -/turf/simulated/floor/tiled/freezer, -/area/rnd/xenobiology/xenoflora) -"riC" = ( -/obj/structure/table/steel_reinforced, -/obj/machinery/door/firedoor, -/obj/effect/wallframe_spawn/reinforced/polarized{ - id = "bo_windows" - }, -/obj/machinery/door/blast/regular{ - density = 0; - dir = 4; - icon_state = "pdoor0"; - id_tag = "Prison Gate"; - name = "Security Blast Door"; - opacity = 0 - }, -/obj/structure/cable/green{ - d2 = 8; - icon_state = "0-8" - }, -/turf/simulated/floor/plating, -/area/security/bo) -"riD" = ( -/turf/simulated/floor/tiled/freezer, -/area/crew_quarters/head/aux) -"riX" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/firstdeck/forestarboard) -"rjb" = ( -/obj/machinery/door/window/brigdoor/northright{ - name = "Test Chamber" - }, -/obj/machinery/door/window/brigdoor/southright{ - name = "Test Chamber" - }, -/obj/machinery/door/blast/regular{ - density = 0; - icon_state = "pdoor0"; - id_tag = "misclab"; - name = "Test Chamber Blast Doors"; - opacity = 0 - }, -/turf/simulated/floor/reinforced, -/area/rnd/misc_lab) -"rjk" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, -/turf/simulated/floor/tiled/white, -/area/rnd/research) -"rkb" = ( -/obj/machinery/atmospherics/valve, -/obj/machinery/camera/network/research{ - c_tag = "Research - Xenobotany Laboratory"; - dir = 8 - }, -/turf/simulated/floor/tiled/freezer, -/area/rnd/xenobiology/xenoflora) -"rlb" = ( -/obj/machinery/atmospherics/unary/freezer{ - dir = 1; - icon_state = "freezer" - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 8; - icon_state = "warning" - }, -/obj/effect/floor_decal/corner/research/mono, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled/white/monotile, -/area/rnd/misc_lab) -"rma" = ( -/obj/structure/closet/firecloset, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/firstdeck/centralport) -"rmb" = ( -/obj/machinery/atmospherics/unary/heater{ - dir = 1 - }, -/obj/effect/floor_decal/corner/research/mono, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled/white/monotile, -/area/rnd/misc_lab) -"rnb" = ( -/obj/machinery/portable_atmospherics/canister, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/effect/floor_decal/corner/research/mono, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled/white/monotile, -/area/rnd/misc_lab) -"rnp" = ( -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/structure/table/rack, -/obj/item/device/radio, -/obj/item/device/radio, -/obj/item/device/radio, -/obj/item/device/radio, -/obj/item/device/radio, -/obj/item/device/radio, -/obj/item/crowbar/prybar, -/obj/item/crowbar/prybar, -/obj/item/crowbar/prybar, -/obj/item/crowbar/prybar, -/obj/item/crowbar/prybar, -/obj/item/crowbar/prybar, -/obj/structure/reagent_dispensers/peppertank{ - pixel_x = -30 - }, -/obj/effect/floor_decal/corner/red/mono, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled/monotile, -/area/security/locker) -"rob" = ( -/obj/structure/extinguisher_cabinet{ - pixel_y = -32 - }, -/obj/effect/floor_decal/corner/research/mono, -/obj/effect/floor_decal/corner/research/mono, -/turf/simulated/floor/tiled/white/monotile, -/area/rnd/misc_lab) -"rpb" = ( -/obj/structure/table/standard, -/obj/item/storage/toolbox/mechanical, -/obj/effect/floor_decal/corner/research/mono, -/obj/effect/floor_decal/corner/research/mono, -/turf/simulated/floor/tiled/white/monotile, -/area/rnd/misc_lab) -"rpn" = ( -/obj/structure/table/standard, -/obj/item/reagent_containers/spray/cleaner{ - pixel_x = -5 - }, -/obj/item/reagent_containers/spray/sterilizine, -/obj/machinery/vending/wallmed1{ - pixel_y = 32 - }, -/obj/effect/floor_decal/floordetail/edgedrain{ - dir = 5 - }, -/obj/effect/floor_decal/corner/paleblue{ - dir = 8 - }, -/turf/simulated/floor/tiled/white, -/area/medical/surgery2) -"rpB" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/turf/simulated/floor/tiled/monotile, -/area/security/detectives_office) -"rrI" = ( -/obj/effect/floor_decal/corner/research{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/white, -/area/rnd/office) -"rsb" = ( -/obj/effect/landmark{ - name = "xeno_spawn"; - pixel_x = -1 - }, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/rnd/research) -"rsu" = ( -/obj/effect/wallframe_spawn/reinforced/polarized{ - id = "rndpost" - }, -/obj/machinery/door/blast/shutters{ - density = 0; - dir = 2; - icon_state = "shutter0"; - id_tag = "outercheckwindow"; - name = "RnD Checkpoint Outer Shutters"; - opacity = 0 - }, -/obj/structure/cable/green{ - d2 = 4; - icon_state = "0-4" - }, -/turf/simulated/floor/plating, -/area/rnd/rnd_sec) -"rsV" = ( -/obj/structure/closet/hydrant{ - pixel_y = 32 - }, -/obj/effect/floor_decal/corner/yellow{ - dir = 5 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/firstdeck/center) -"rtb" = ( -/obj/structure/table/standard, -/obj/structure/sign/warning/fire{ - dir = 4; - pixel_x = -32 - }, -/obj/machinery/atmospherics/pipe/manifold/visible{ - dir = 8 - }, -/obj/effect/floor_decal/corner/research/half, -/obj/effect/floor_decal/industrial/warning, -/turf/simulated/floor/tiled/white/monotile, -/area/rnd/misc_lab) -"rub" = ( -/obj/machinery/button/ignition{ - id_tag = "Xenobio"; - pixel_x = 6; - pixel_y = -28 - }, -/obj/machinery/button/blast_door{ - id_tag = "misclab"; - name = "Test Chamber Blast Doors"; - pixel_x = 6; - pixel_y = -20 - }, -/obj/machinery/button/blast_door{ - id_tag = "misclabdoor"; - name = "Test Chamber Entrance"; - pixel_x = -6; - pixel_y = -20 - }, -/obj/machinery/atmospherics/pipe/simple/visible{ - dir = 4 - }, -/obj/effect/floor_decal/corner/research/half, -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 8; - icon_state = "warningcorner" - }, -/turf/simulated/floor/tiled/white/monotile, -/area/rnd/misc_lab) -"ruz" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/floor_decal/industrial/warning/fulltile, -/turf/simulated/floor/tiled/steel_grid, -/area/hallway/primary/firstdeck/aft) -"ruS" = ( -/obj/effect/floor_decal/corner/green/mono, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/structure/closet/emcloset, -/turf/simulated/floor/tiled/monotile, -/area/hallway/primary/firstdeck/center) -"rvb" = ( -/obj/machinery/atmospherics/pipe/manifold/visible{ - dir = 4 - }, -/obj/effect/floor_decal/corner/research/half, -/turf/simulated/floor/tiled/white/monotile, -/area/rnd/misc_lab) -"rvY" = ( -/obj/effect/floor_decal/corner/research, -/turf/simulated/floor/tiled, -/area/hallway/primary/firstdeck/aft) -"rwb" = ( -/obj/machinery/atmospherics/pipe/simple/visible{ - dir = 9 - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 4 - }, -/turf/simulated/floor/tiled/white/monotile, -/area/rnd/xenobiology/xenoflora) -"rxb" = ( -/obj/machinery/atmospherics/unary/outlet_injector{ - dir = 1; - frequency = 1441; - icon_state = "map_injector"; - id = "test_in"; - use_power = 1 - }, -/turf/simulated/floor/reinforced, -/area/rnd/misc_lab) -"rxK" = ( -/obj/structure/closet/emcloset, -/obj/effect/floor_decal/industrial/outline/grey, -/obj/machinery/light/small{ - dir = 1 - }, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/firstdeck/centralport) -"ryb" = ( -/turf/simulated/floor/reinforced, -/area/rnd/misc_lab) -"ryt" = ( -/obj/effect/floor_decal/techfloor{ - dir = 4 - }, -/obj/effect/floor_decal/techfloor{ - dir = 8 - }, -/obj/item/device/radio/intercom{ - pixel_y = 23 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/command/armoury/tactical) -"rzb" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/effect/floor_decal/corner/research{ - dir = 6 - }, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/tiled/white, -/area/rnd/research) -"rAb" = ( -/obj/machinery/power/apc{ - dir = 8; - name = "west bump"; - pixel_x = -24 - }, -/obj/structure/cable/green{ - d2 = 4; - icon_state = "0-4" - }, -/obj/structure/disposalpipe/segment{ - dir = 4; - icon_state = "pipe-c" - }, -/obj/structure/reagent_dispensers/water_cooler{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/rnd/research) -"rAu" = ( -/turf/simulated/wall/prepainted, -/area/medical/washroom) -"rBb" = ( -/obj/machinery/atmospherics/binary/pump{ - dir = 1 - }, -/obj/effect/floor_decal/corner/research{ - dir = 5 - }, -/obj/machinery/firealarm{ - dir = 8; - pixel_x = -24 - }, -/turf/simulated/floor/tiled/white, -/area/rnd/xenobiology/xenoflora) -"rCb" = ( -/obj/machinery/atmospherics/binary/pump{ - dir = 1 - }, -/obj/effect/floor_decal/corner/research{ - dir = 5 - }, -/turf/simulated/floor/tiled/white, -/area/rnd/xenobiology/xenoflora) -"rCc" = ( -/obj/machinery/atmospherics/unary/vent_pump/high_volume{ - controlled = 0; - internal_pressure_bound = 35000; - internal_pressure_bound_default = 35000; - pressure_checks = 2; - pressure_checks_default = 2; - use_power = 1 - }, -/turf/simulated/floor/airless, -/area/thruster/d1starboard) -"rDb" = ( -/obj/machinery/atmospherics/portables_connector{ - dir = 1 - }, -/obj/effect/floor_decal/corner/research{ - dir = 5 - }, -/turf/simulated/floor/tiled/white, -/area/rnd/xenobiology/xenoflora) -"rDC" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/catwalk, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/turf/simulated/floor/plating, -/area/maintenance/firstdeck/foreport) -"rEb" = ( -/obj/machinery/atmospherics/pipe/simple/visible/red, -/obj/machinery/honey_extractor, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/disposalpipe/segment, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/effect/floor_decal/corner/research{ - dir = 9 - }, -/turf/simulated/floor/tiled/white, -/area/rnd/xenobiology/xenoflora) -"rEz" = ( -/obj/machinery/atmospherics/unary/vent_pump/tank{ - dir = 1; - external_pressure_bound = 0; - external_pressure_bound_default = 0; - icon_state = "map_vent_in"; - id_tag = "d1sh_out"; - initialize_directions = 1; - internal_pressure_bound = 2000; - internal_pressure_bound_default = 2000; - pressure_checks = 2; - pressure_checks_default = 2; - pump_direction = 0; - use_power = 1 - }, -/turf/simulated/floor/reinforced/hydrogen, -/area/thruster/d1starboard) -"rEK" = ( -/obj/structure/table/rack, -/obj/item/gun/energy/ionrifle, -/obj/effect/floor_decal/industrial/outline/grey, -/obj/structure/window/reinforced, -/obj/structure/window/reinforced{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/security/armoury) -"rFb" = ( -/obj/machinery/atmospherics/pipe/simple/visible/blue{ - dir = 5 - }, -/turf/simulated/floor/tiled/white, -/area/rnd/xenobiology/xenoflora) -"rFK" = ( -/obj/effect/floor_decal/techfloor{ - dir = 1 - }, -/obj/effect/floor_decal/techfloor, -/turf/simulated/floor/tiled/techfloor/grid, -/area/command/armoury) -"rGb" = ( -/obj/machinery/atmospherics/binary/pump{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/rnd/xenobiology/xenoflora) -"rGw" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 8; - icon_state = "warning" - }, -/obj/structure/railing/mapped{ - dir = 1; - icon_state = "railing0-1" - }, -/turf/simulated/floor/plating, -/area/maintenance/firstdeck/foreport) -"rGU" = ( -/obj/machinery/newscaster{ - pixel_y = -32 - }, -/obj/structure/closet{ - name = "Prisoner's Locker" - }, -/obj/item/book/manual/solgov_law{ - pixel_x = 3; - pixel_y = 3 - }, -/obj/item/book/manual/solgov_law, -/turf/simulated/floor/tiled/monotile, -/area/security/brig) -"rHb" = ( -/obj/machinery/atmospherics/pipe/manifold4w/visible, -/obj/structure/table/standard, -/obj/effect/floor_decal/industrial/warning{ - dir = 4 - }, -/turf/simulated/floor/tiled/white/monotile, -/area/rnd/xenobiology/xenoflora) -"rIb" = ( -/obj/machinery/portable_atmospherics/hydroponics, -/obj/machinery/atmospherics/pipe/manifold/visible, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled/freezer, -/area/rnd/xenobiology/xenoflora) -"rJb" = ( -/obj/machinery/portable_atmospherics/hydroponics, -/obj/machinery/atmospherics/pipe/simple/visible{ - dir = 9 - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled/freezer, -/area/rnd/xenobiology/xenoflora) -"rKb" = ( -/obj/effect/wallframe_spawn/reinforced_phoron, -/obj/machinery/atmospherics/pipe/simple/visible, -/obj/machinery/door/blast/regular{ - density = 0; - icon_state = "pdoor0"; - id_tag = "misclab"; - name = "Test Chamber Blast Doors"; - opacity = 0 - }, -/obj/machinery/meter, -/turf/simulated/floor/reinforced, -/area/rnd/misc_lab) -"rKo" = ( -/obj/effect/floor_decal/corner/green{ - dir = 5 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/firstdeck/center) -"rKD" = ( -/obj/random/torchcloset, -/turf/simulated/floor/plating, -/area/maintenance/firstdeck/centralstarboard) -"rKL" = ( -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/firstdeck/centralport) -"rKP" = ( -/obj/structure/table/rack, -/obj/item/clothing/head/helmet/ballistic, -/obj/item/clothing/head/helmet/ballistic, -/obj/item/clothing/head/helmet/ballistic, -/obj/item/clothing/head/helmet/ballistic, -/obj/effect/floor_decal/industrial/outline/grey, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/security/armoury) -"rLb" = ( -/obj/machinery/atmospherics/pipe/simple/visible, -/obj/effect/wallframe_spawn/reinforced_phoron, -/obj/machinery/door/blast/regular{ - density = 0; - icon_state = "pdoor0"; - id_tag = "misclab"; - name = "Test Chamber Blast Doors"; - opacity = 0 - }, -/obj/machinery/meter, -/turf/simulated/floor/reinforced, -/area/rnd/misc_lab) -"rMb" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/effect/floor_decal/corner/research{ - dir = 6 - }, -/obj/structure/disposalpipe/segment, -/obj/machinery/alarm{ - dir = 8; - pixel_x = 24 - }, -/turf/simulated/floor/tiled/white, -/area/rnd/research) -"rNb" = ( -/obj/machinery/atmospherics/portables_connector{ - dir = 1 - }, -/obj/machinery/light{ - dir = 8; - icon_state = "tube1" - }, -/obj/machinery/alarm{ - dir = 4; - pixel_x = -22 - }, -/turf/simulated/floor/tiled/white, -/area/rnd/xenobiology/xenoflora) -"rOb" = ( -/obj/machinery/atmospherics/valve, -/turf/simulated/floor/tiled/white, -/area/rnd/xenobiology/xenoflora) -"rOE" = ( -/obj/effect/floor_decal/corner/red{ - dir = 9 - }, -/turf/simulated/floor/tiled, -/area/security/wing) -"rPb" = ( -/obj/machinery/disposal, -/obj/effect/floor_decal/industrial/hatch/yellow, -/obj/item/device/radio/intercom{ - dir = 4; - pixel_x = -21 - }, -/obj/structure/disposalpipe/trunk{ - dir = 1 - }, -/turf/simulated/floor/tiled/white, -/area/rnd/research) -"rPz" = ( -/obj/item/roller{ - pixel_y = 8 - }, -/obj/item/roller{ - pixel_y = 16 - }, -/obj/item/roller, -/obj/effect/floor_decal/corner/paleblue/mono, -/obj/structure/table/reinforced, -/turf/simulated/floor/tiled/white/monotile, -/area/medical/staging) -"rQb" = ( -/obj/structure/ladder, -/obj/effect/floor_decal/industrial/hatch/yellow, -/obj/effect/catwalk_plated/white, -/turf/simulated/floor/tiled/white, -/area/rnd/research) -"rRb" = ( -/obj/machinery/atmospherics/unary/vent_pump/on, -/turf/simulated/floor/tiled/white, -/area/rnd/xenobiology/xenoflora) -"rSb" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/turf/simulated/floor/tiled/white, -/area/rnd/xenobiology/xenoflora) -"rTb" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/disposalpipe/segment, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/effect/floor_decal/corner/research{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/simple/visible, -/turf/simulated/floor/tiled/white, -/area/rnd/xenobiology/xenoflora) -"rUb" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/rnd/xenobiology/xenoflora) -"rUh" = ( -/obj/structure/lattice, -/obj/structure/lattice, -/obj/machinery/atmospherics/unary/vent_pump/tank{ - external_pressure_bound = 0; - external_pressure_bound_default = 0; - icon_state = "map_vent_in"; - id_tag = "d1ph_out"; - initialize_directions = 1; - internal_pressure_bound = 2000; - internal_pressure_bound_default = 2000; - pressure_checks = 2; - pressure_checks_default = 2; - pump_direction = 0; - use_power = 1 - }, -/turf/simulated/floor/reinforced/hydrogen, -/area/thruster/d1port) -"rUO" = ( -/obj/machinery/alarm{ - alarm_id = "xenobio1_alarm"; - pixel_y = 24 - }, -/obj/structure/table/steel, -/obj/item/device/taperecorder, -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/turf/simulated/floor/tiled/dark, -/area/security/questioning) -"rVb" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 8 - }, -/turf/simulated/floor/tiled/white, -/area/rnd/xenobiology/xenoflora) -"rWb" = ( -/obj/machinery/atmospherics/pipe/manifold/visible{ - dir = 8 - }, -/obj/structure/table/standard, -/obj/effect/floor_decal/industrial/warning{ - dir = 4 - }, -/turf/simulated/floor/tiled/white/monotile, -/area/rnd/xenobiology/xenoflora) -"rXb" = ( -/obj/machinery/portable_atmospherics/hydroponics, -/obj/machinery/atmospherics/pipe/manifold/visible{ - dir = 1 - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled/freezer, -/area/rnd/xenobiology/xenoflora) -"rXJ" = ( -/obj/structure/cable/green{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/firstdeck/foreport) -"rYb" = ( -/obj/machinery/portable_atmospherics/hydroponics, -/obj/machinery/atmospherics/pipe/simple/visible{ - dir = 10 - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled/freezer, -/area/rnd/xenobiology/xenoflora) -"rYd" = ( -/turf/simulated/floor/tiled/techfloor/grid, -/area/thruster/d1port) -"rYN" = ( -/obj/machinery/papershredder, -/obj/effect/floor_decal/corner/research/mono, -/obj/machinery/light, -/turf/simulated/floor/tiled/white/monotile, -/area/rnd/office) -"rZb" = ( -/obj/machinery/atmospherics/unary/vent_pump/tank{ - dir = 1; - external_pressure_bound = 0; - external_pressure_bound_default = 0; - icon_state = "map_vent_in"; - id_tag = "test_out"; - initialize_directions = 1; - internal_pressure_bound = 4000; - internal_pressure_bound_default = 4000; - pressure_checks = 2; - pressure_checks_default = 2; - pump_direction = 0 - }, -/turf/simulated/floor/reinforced, -/area/rnd/misc_lab) -"rZf" = ( -/obj/structure/sign/directions/evac{ - pixel_y = 3 - }, -/obj/structure/sign/directions/supply{ - pixel_y = -4 - }, -/turf/simulated/wall/prepainted, -/area/hallway/primary/firstdeck/fore) -"sab" = ( -/obj/effect/floor_decal/corner/research/mono, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/vending/hydronutrients{ - categories = 3; - dir = 1 - }, -/turf/simulated/floor/tiled/white/monotile, -/area/rnd/xenobiology/xenoflora) -"sag" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/universal, -/obj/structure/catwalk, -/obj/effect/floor_decal/industrial/warning{ - dir = 8 - }, -/obj/machinery/alarm{ - dir = 8; - icon_state = "alarm0"; - pixel_x = 24 - }, -/turf/simulated/floor/plating, -/area/maintenance/firstdeck/centralstarboard) -"saS" = ( -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/effect/floor_decal/corner/red/mono, -/obj/structure/closet/l3closet/security, -/turf/simulated/floor/tiled/monotile, -/area/security/locker) -"sbb" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/light{ - dir = 4 - }, -/obj/effect/floor_decal/corner/research{ - dir = 6 - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/structure/disposalpipe/segment{ - dir = 8; - icon_state = "pipe-c" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/rnd/research) -"sbJ" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/catwalk, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 - }, -/turf/simulated/floor/plating, -/area/maintenance/firstdeck/forestarboard) -"scb" = ( -/obj/structure/sign/warning/biohazard, -/turf/simulated/wall/prepainted, -/area/rnd/research) -"scd" = ( -/obj/structure/closet/crate/freezer, -/obj/random/medical, -/obj/random/medical, -/obj/effect/floor_decal/industrial/outline/grey, -/obj/random/medical, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/firstdeck/aftstarboard) -"scr" = ( -/obj/machinery/door/airlock/medical{ - name = "Equipment Storage" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/door/firedoor, -/turf/simulated/floor/tiled/white/monotile, -/area/medical/equipstorage) -"scD" = ( -/obj/structure/table/steel_reinforced, -/obj/item/tableflag{ - pixel_x = 4 - }, -/turf/simulated/floor/tiled/dark, -/area/command/conference) -"sdb" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/research{ - name = "Xenobiology Access" - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/white/monotile, -/area/rnd/research) -"sde" = ( -/turf/simulated/floor/plating, -/area/maintenance/firstdeck/aftstarboard) -"seb" = ( -/obj/machinery/door/airlock/maintenance{ - name = "Xenoflora Lab Maintenance" - }, -/obj/machinery/door/firedoor, -/turf/simulated/floor/tiled/white, -/area/rnd/xenobiology/xenoflora) -"sfb" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/light/small{ - dir = 1 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/white, -/area/rnd/xenobiology/entry) -"sgb" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply, -/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers, -/obj/structure/disposalpipe/segment{ - dir = 2; - icon_state = "pipe-c" - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/turf/simulated/floor/tiled/white, -/area/rnd/xenobiology/entry) -"shb" = ( -/obj/machinery/portable_atmospherics/powered/pump/filled, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/firstdeck/aftport) -"shq" = ( -/obj/structure/closet/emcloset, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/firstdeck/foreport) -"shQ" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 1 - }, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/firstdeck/centralstarboard) -"sib" = ( -/obj/machinery/power/apc{ - dir = 8; - name = "west bump"; - pixel_x = -24 - }, -/obj/structure/cable/green{ - d2 = 4; - icon_state = "0-4" - }, -/turf/simulated/floor/tiled/white, -/area/rnd/xenobiology/xenoflora) -"sik" = ( -/turf/simulated/wall/r_wall/hull, -/area/security/locker) -"siI" = ( -/obj/effect/floor_decal/corner/paleblue{ - dir = 5 - }, -/obj/effect/floor_decal/corner/paleblue{ - dir = 10 - }, -/obj/structure/table/standard, -/obj/item/defibrillator/loaded, -/obj/item/bodybag/rescue/loaded, -/obj/item/auto_cpr, -/obj/item/auto_cpr, -/turf/simulated/floor/tiled/white, -/area/medical/staging) -"sjb" = ( -/obj/machinery/atmospherics/pipe/simple/visible{ - dir = 5 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/meter, -/turf/simulated/floor/tiled/white, -/area/rnd/xenobiology/xenoflora) -"skb" = ( -/obj/machinery/atmospherics/pipe/simple/visible{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/white, -/area/rnd/xenobiology/xenoflora) -"slb" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/obj/structure/disposalpipe/segment{ - dir = 4; - icon_state = "pipe-c" - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/visible{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/rnd/xenobiology/xenoflora) -"smb" = ( -/obj/machinery/door/airlock/glass/research{ - name = "Xenoflora Laboratory" - }, -/obj/machinery/atmospherics/pipe/simple/visible{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/door/firedoor, -/turf/simulated/floor/tiled/white/monotile, -/area/rnd/xenobiology/xenoflora) -"smp" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 - }, -/obj/structure/filingcabinet, -/turf/simulated/floor/tiled/dark, -/area/security/evidence) -"smX" = ( -/obj/structure/closet/crate/solar, -/obj/random/tech_supply, -/turf/simulated/floor/plating, -/area/maintenance/firstdeck/forestarboard) -"snb" = ( -/obj/machinery/atmospherics/pipe/manifold4w/visible, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 - }, -/obj/structure/disposalpipe/segment{ - dir = 8; - icon_state = "pipe-c" - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/effect/floor_decal/corner/research{ - dir = 9 - }, -/turf/simulated/floor/tiled/white, -/area/rnd/xenobiology/xenoflora) -"sne" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 1 - }, -/obj/effect/catwalk_plated, -/turf/simulated/floor/plating, -/area/hallway/primary/firstdeck/center) -"snG" = ( -/obj/machinery/status_display, -/turf/simulated/wall/prepainted, -/area/hallway/primary/firstdeck/aft) -"sob" = ( -/obj/machinery/atmospherics/pipe/manifold/visible{ - dir = 1 - }, -/obj/machinery/meter, -/turf/simulated/floor/tiled/white, -/area/rnd/xenobiology/xenoflora) -"spb" = ( -/obj/machinery/atmospherics/valve{ - dir = 8 - }, -/turf/simulated/floor/tiled/white, -/area/rnd/xenobiology/xenoflora) -"spj" = ( -/obj/machinery/atmospherics/pipe/simple/visible/cyan{ - dir = 5 - }, -/turf/simulated/floor/reinforced/oxygen, -/area/thruster/d1port) -"sqb" = ( -/obj/machinery/air_sensor{ - id_tag = "testchamber_sensor" - }, -/obj/effect/landmark{ - name = "bluespacerift" - }, -/turf/simulated/floor/reinforced, -/area/rnd/misc_lab) -"srb" = ( -/obj/machinery/camera/network/research{ - c_tag = "Research - Miscellaneous Test Chamber"; - dir = 8; - network = list("Research","Miscellaneous Reseach") - }, -/turf/simulated/floor/reinforced, -/area/rnd/misc_lab) -"srR" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/effect/floor_decal/corner/research{ - dir = 10 - }, -/obj/machinery/newscaster{ - pixel_y = -32 - }, -/turf/simulated/floor/tiled/white, -/area/rnd/research) -"ssb" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/effect/floor_decal/corner/research{ - dir = 4 - }, -/obj/effect/floor_decal/corner/research{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/rnd/research) -"ssg" = ( -/obj/effect/floor_decal/corner/paleblue{ - dir = 5 - }, -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/firstdeck/aft) -"stb" = ( -/obj/effect/floor_decal/corner/research/mono, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/structure/extinguisher_cabinet{ - pixel_x = -32 - }, -/obj/machinery/seed_storage/xenobotany{ - dir = 1 - }, -/turf/simulated/floor/tiled/white/monotile, -/area/rnd/xenobiology/xenoflora) -"sub" = ( -/obj/structure/closet/secure_closet/hydroponics_torch, -/obj/effect/floor_decal/corner/research/mono, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled/white/monotile, -/area/rnd/xenobiology/xenoflora) -"suM" = ( -/obj/effect/floor_decal/corner/red{ - dir = 6 - }, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 1 - }, -/obj/structure/closet/medical_wall/filled{ - pixel_y = -32 - }, -/turf/simulated/floor/tiled, -/area/security/locker) -"svb" = ( -/obj/structure/disposalpipe/trunk{ - dir = 1 - }, -/obj/machinery/disposal, -/obj/effect/floor_decal/corner/research/mono, -/obj/effect/floor_decal/industrial/hatch/yellow, -/turf/simulated/floor/tiled/white/monotile, -/area/rnd/xenobiology/xenoflora) -"svH" = ( -/obj/effect/floor_decal/techfloor{ - dir = 4 - }, -/obj/effect/floor_decal/techfloor{ - dir = 8 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/command/armoury/tactical) -"swb" = ( -/obj/machinery/status_display, -/turf/simulated/wall/prepainted, -/area/rnd/xenobiology/xenoflora) -"sww" = ( -/obj/structure/railing/mapped{ - dir = 4; - icon_state = "railing0-1" - }, -/obj/structure/railing/mapped{ - dir = 1; - icon_state = "railing0-1" - }, -/turf/simulated/floor/plating, -/area/maintenance/firstdeck/aftstarboard) -"swz" = ( -/obj/effect/floor_decal/techfloor{ - dir = 8 - }, -/obj/effect/floor_decal/techfloor/corner{ - dir = 4 - }, -/obj/machinery/alarm{ - dir = 1; - pixel_y = -25 - }, -/obj/machinery/light, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/command/armoury/tactical) -"sxb" = ( -/obj/machinery/atmospherics/unary/heater{ - dir = 1 - }, -/obj/effect/floor_decal/corner/research/mono, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled/white, -/area/rnd/xenobiology/xenoflora) -"sxG" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/blast/regular{ - density = 0; - dir = 4; - icon_state = "pdoor0"; - id_tag = "Prison Gate"; - name = "Security Blast Door"; - opacity = 0 - }, -/obj/machinery/door/airlock/multi_tile/glass/security{ - autoset_access = 0; - dir = 8; - id_tag = "BrigFoyer"; - name = "Security Wing"; - req_access = list(list("ACCESS_SEC_DOORS","ACCESS_TORCH_CREW")) - }, -/turf/simulated/floor/tiled, -/area/security/wing) -"sxT" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/dark, -/area/security/questioning) -"syb" = ( -/obj/machinery/atmospherics/unary/freezer{ - dir = 1; - icon_state = "freezer" - }, -/obj/machinery/light, -/obj/effect/floor_decal/corner/research/mono, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled/white, -/area/rnd/xenobiology/xenoflora) -"syI" = ( -/obj/machinery/light_switch{ - pixel_x = -6; - pixel_y = 24 - }, -/obj/machinery/button/windowtint{ - id = "interviewwindow"; - pixel_x = 6; - pixel_y = 24 - }, -/obj/structure/table/steel, -/obj/item/paper_bin{ - pixel_x = -3; - pixel_y = 7 - }, -/obj/item/pen, -/obj/item/folder/red, -/turf/simulated/floor/tiled/dark, -/area/security/questioning) -"szb" = ( -/obj/structure/reagent_dispensers/watertank, -/obj/item/reagent_containers/glass/bucket, -/obj/effect/floor_decal/corner/research/half, -/obj/effect/floor_decal/industrial/warning{ - dir = 4 - }, -/turf/simulated/floor/tiled/white/monotile, -/area/rnd/xenobiology/xenoflora) -"sAb" = ( -/obj/machinery/portable_atmospherics/hydroponics{ - closed_system = 1; - name = "isolation tray" - }, -/obj/machinery/atmospherics/portables_connector{ - dir = 1 - }, -/obj/effect/floor_decal/industrial/hatch/yellow, -/turf/simulated/floor/tiled/freezer, -/area/rnd/xenobiology/xenoflora) -"sBb" = ( -/obj/machinery/portable_atmospherics/hydroponics{ - closed_system = 1; - name = "isolation tray" - }, -/obj/machinery/atmospherics/portables_connector{ - dir = 1 - }, -/obj/effect/floor_decal/industrial/hatch/yellow, -/obj/machinery/light/spot, -/turf/simulated/floor/tiled/freezer, -/area/rnd/xenobiology/xenoflora) -"sBg" = ( -/obj/structure/table/rack, -/obj/structure/window/reinforced{ - dir = 8 - }, -/obj/structure/window/reinforced, -/obj/effect/floor_decal/industrial/outline/grey, -/obj/item/gun/launcher/grenade, -/turf/simulated/floor/tiled/dark/monotile, -/area/security/armoury) -"sCb" = ( -/obj/machinery/airlock_sensor{ - id_tag = "bridgeport_sensor"; - pixel_x = 25; - pixel_y = 12 - }, -/obj/machinery/embedded_controller/radio/airlock/airlock_controller{ - dir = 8; - id_tag = "bridgeport_airlock"; - pixel_x = 25; - req_access = list("ACCESS_MAINT"); - tag_airpump = "bridgeport_pump"; - tag_chamber_sensor = "bridgeport_sensor"; - tag_exterior_door = "bridgeport_outer"; - tag_interior_door = "bridgeport_inner" - }, -/obj/machinery/atmospherics/pipe/simple/visible{ - dir = 9 - }, -/obj/effect/floor_decal/techfloor{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/maintenance/firstdeck/foreport) -"sCu" = ( -/obj/structure/railing/mapped{ - dir = 8; - icon_state = "railing0-1" - }, -/obj/machinery/atmospherics/valve/shutoff/fuel, -/turf/simulated/floor/plating, -/area/maintenance/firstdeck/aftstarboard) -"sCx" = ( -/obj/machinery/atmospherics/valve/digital{ - dir = 4; - id_tag = "fuelmode" - }, -/obj/effect/floor_decal/industrial/outline/red, -/turf/simulated/floor/reinforced/oxygen, -/area/thruster/d1starboard) -"sCM" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 4 - }, -/obj/effect/floor_decal/corner/red{ - dir = 9 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/firstdeck/fore) -"sEm" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/tiled/monotile, -/area/hallway/primary/firstdeck/fore) -"sFb" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/catwalk, -/obj/machinery/atmospherics/pipe/simple/visible/fuel{ - dir = 5 - }, -/turf/simulated/floor/plating, -/area/maintenance/firstdeck/aftstarboard) -"sGs" = ( -/obj/structure/sign/warning/nosmoking_1{ - dir = 4; - pixel_x = -32 - }, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 1 - }, -/obj/item/device/radio/intercom{ - dir = 1; - pixel_y = -28 - }, -/obj/effect/floor_decal/corner/pink{ - dir = 9 - }, -/turf/simulated/floor/tiled/white, -/area/medical/staging) -"sHb" = ( -/obj/structure/closet/secure_closet/medical_torchsenior, -/obj/effect/floor_decal/corner/paleblue/mono, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/power/apc{ - dir = 8; - name = "west bump"; - pixel_x = -24 - }, -/obj/machinery/light_switch{ - pixel_y = 24 - }, -/obj/structure/cable/green{ - d2 = 4; - icon_state = "0-4" - }, -/turf/simulated/floor/tiled/white/monotile, -/area/medical/locker) -"sHN" = ( -/turf/simulated/wall/r_wall/prepainted, -/area/security/armoury) -"sJr" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/disposalpipe/segment, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/visible/fuel, -/obj/machinery/alarm{ - dir = 8; - pixel_x = 24 - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/firstdeck/aftport) -"sLb" = ( -/obj/machinery/atmospherics/unary/cryo_cell, -/obj/effect/floor_decal/corner/paleblue/mono, -/turf/simulated/floor/tiled/white/monotile, -/area/medical/sleeper) -"sMf" = ( -/obj/effect/floor_decal/corner/red/diagonal, -/obj/machinery/alarm{ - dir = 4; - pixel_x = -22 - }, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 1 - }, -/turf/simulated/floor/tiled/freezer, -/area/security/brig) -"sNb" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 - }, -/turf/simulated/floor/tiled/white, -/area/rnd/locker) -"sNn" = ( -/obj/effect/floor_decal/corner/green/half{ - dir = 1 - }, -/obj/machinery/light{ - dir = 1 - }, -/turf/simulated/floor/tiled/monotile, -/area/hallway/primary/firstdeck/center) -"sOb" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/hygiene/sink{ - dir = 1; - pixel_y = 16 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 - }, -/turf/simulated/floor/tiled/white/monotile, -/area/rnd/xenobiology) -"sOd" = ( -/obj/structure/table/steel_reinforced, -/obj/item/storage/slide_projector, -/turf/simulated/floor/tiled/dark, -/area/command/conference) -"sOo" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/obj/structure/disposalpipe/segment{ - dir = 8; - icon_state = "pipe-c" - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/machinery/atmospherics/pipe/simple/visible/fuel{ - dir = 9 - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/firstdeck/aftport) -"sPb" = ( -/obj/machinery/embedded_controller/radio/airlock/access_controller{ - id_tag = "xeno_airlock_control"; - name = "Xenobiology Access Console"; - pixel_x = 8; - pixel_y = 24; - req_access = list("ACCESS_XENOBIO"); - tag_exterior_door = "xeno_airlock_exterior"; - tag_interior_door = "xeno_airlock_interior" - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/disposal, -/obj/structure/disposalpipe/trunk{ - dir = 4 - }, -/obj/machinery/light_switch{ - pixel_x = -6; - pixel_y = 24 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 1 - }, -/turf/simulated/floor/tiled/white/monotile, -/area/rnd/xenobiology) -"sQb" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/tiled/white/monotile, -/area/rnd/xenobiology) -"sRb" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/disposalpipe/segment{ - dir = 8; - icon_state = "pipe-c" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/turf/simulated/floor/tiled/white/monotile, -/area/rnd/xenobiology) -"sRV" = ( -/turf/simulated/wall/r_wall/hull, -/area/rnd/xenobiology) -"sSb" = ( -/obj/machinery/disposal, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/floor_decal/industrial/hatch/yellow, -/obj/structure/disposalpipe/trunk{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/turf/simulated/floor/tiled/white/monotile, -/area/rnd/xenobiology) -"sTb" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 1 - }, -/turf/simulated/floor/tiled/white, -/area/rnd/xenobiology) -"sTK" = ( -/obj/machinery/door/airlock/security{ - name = "Security Interview Room" - }, -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/turf/simulated/floor/tiled/steel_ridged, -/area/security/questioning) -"sTT" = ( -/obj/structure/bed/chair{ - dir = 8 - }, -/turf/simulated/floor/tiled, -/area/security/brig) -"sUb" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/turf/simulated/floor/tiled/white, -/area/rnd/xenobiology) -"sVb" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/universal{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/rnd/xenobiology) -"sVL" = ( -/obj/effect/floor_decal/corner/yellow{ - dir = 10 - }, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 1 - }, -/turf/simulated/floor/tiled, -/area/assembly/robotics/office) -"sWb" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/binary/pump{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/rnd/xenobiology) -"sWP" = ( -/obj/effect/floor_decal/corner/paleblue{ - dir = 5 - }, -/obj/structure/bed/chair/wheelchair, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/structure/closet/shipping_wall/filled{ - pixel_y = 32 - }, -/turf/simulated/floor/tiled/white, -/area/medical/foyer) -"sXb" = ( -/obj/machinery/atmospherics/pipe/simple/visible/blue{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 8 - }, -/turf/simulated/floor/tiled/white, -/area/rnd/xenobiology) -"sYb" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 8 - }, -/turf/simulated/floor/tiled/white, -/area/rnd/xenobiology) -"sYT" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 8 - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 8 - }, -/obj/structure/disposalpipe/segment, -/obj/effect/floor_decal/corner/red{ - dir = 8 - }, -/turf/simulated/floor/tiled, -/area/security/wing) -"sYU" = ( -/obj/structure/curtain/open/shower, -/turf/simulated/floor/tiled/freezer, -/area/crew_quarters/head/aux) -"sZb" = ( -/obj/machinery/atmospherics/pipe/manifold/visible/red{ - dir = 1 - }, -/obj/effect/landmark{ - name = "xeno_spawn"; - pixel_x = -1 - }, -/turf/simulated/floor/tiled/white, -/area/rnd/xenobiology) -"tab" = ( -/obj/machinery/atmospherics/binary/pump{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/rnd/xenobiology) -"taR" = ( -/obj/structure/table/steel_reinforced, -/obj/machinery/door/firedoor, -/obj/structure/cable/green{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/machinery/door/window/brigdoor/westright{ - dir = 1; - name = "Brig Chief Desk" - }, -/obj/machinery/door/blast/shutters/open{ - dir = 2; - id_tag = "bo_pshutters"; - name = "Privacy Shutters" - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/security/bo) -"tbb" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/universal{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/rnd/xenobiology) -"tcb" = ( -/obj/effect/landmark{ - name = "lightsout" - }, -/obj/machinery/atmospherics/pipe/manifold/visible/blue{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/turf/simulated/floor/tiled/white, -/area/rnd/xenobiology) -"tcA" = ( -/obj/machinery/sleeper, -/obj/effect/floor_decal/techfloor{ - dir = 1 - }, -/turf/simulated/floor/tiled/techfloor, -/area/crew_quarters/safe_room/firstdeck) -"tdb" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/mob/living/carbon/slime, -/turf/simulated/floor/reinforced, -/area/rnd/xenobiology) -"teb" = ( -/obj/structure/table/standard, -/obj/machinery/button/blast_door{ - id_tag = "xenobio2"; - name = "Containment Blast Doors"; - pixel_x = 6 - }, -/obj/item/extinguisher, -/obj/item/storage/box/monkeycubes, -/obj/item/storage/box/monkeycubes, -/obj/machinery/button/blast_door{ - id_tag = "xenobio2_vent"; - name = "Cell 2 Vent"; - pixel_x = -6 - }, -/turf/simulated/floor/tiled/white, -/area/rnd/xenobiology) -"tfb" = ( -/obj/machinery/atmospherics/binary/pump{ - dir = 1; - name = "waste pump" - }, -/turf/simulated/floor/tiled/white, -/area/rnd/xenobiology) -"tgb" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/white, -/area/rnd/xenobiology) -"tgg" = ( -/obj/effect/floor_decal/corner/paleblue{ - dir = 6 - }, -/obj/item/modular_computer/telescreen/preset/medical{ - pixel_x = 32 - }, -/turf/simulated/floor/tiled/white, -/area/medical/medicalhallway) -"tgs" = ( -/obj/machinery/door/airlock/security{ - name = "Brig Chief" - }, -/obj/machinery/door/firedoor, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled/steel_ridged, -/area/security/bo) -"tgu" = ( -/obj/structure/railing/mapped, -/obj/structure/railing/mapped{ - dir = 8; - icon_state = "railing0-1" - }, -/obj/machinery/atmospherics/pipe/manifold/visible/fuel{ - dir = 8 - }, -/turf/simulated/open, -/area/maintenance/firstdeck/aftport) -"tgT" = ( -/obj/machinery/power/apc{ - name = "south bump"; - pixel_y = -24 - }, -/obj/structure/cable/green, -/turf/simulated/floor/tiled/dark, -/area/security/armoury) -"thb" = ( -/obj/machinery/atmospherics/binary/pump, -/turf/simulated/floor/tiled/white, -/area/rnd/xenobiology) -"thO" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/obj/structure/railing/mapped{ - dir = 8; - icon_state = "railing0-1" - }, -/obj/structure/railing/mapped{ - dir = 1; - icon_state = "railing0-1" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/turf/simulated/floor/plating, -/area/maintenance/firstdeck/foreport) -"tib" = ( -/obj/structure/table/standard, -/obj/machinery/button/blast_door{ - id_tag = "xenobio3"; - name = "Containment Blast Doors"; - pixel_x = -6 - }, -/obj/item/extinguisher, -/obj/item/storage/box/monkeycubes, -/obj/item/storage/box/monkeycubes, -/obj/machinery/button/blast_door{ - id_tag = "xenobio3_vent"; - name = "Cell 3 Vent"; - pixel_x = 6 - }, -/turf/simulated/floor/tiled/white, -/area/rnd/xenobiology) -"tiz" = ( -/obj/effect/floor_decal/corner/paleblue{ - dir = 10 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/firstdeck/aft) -"tiQ" = ( -/turf/simulated/wall/prepainted, -/area/security/armoury) -"tjb" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 - }, -/mob/living/carbon/slime, -/turf/simulated/floor/reinforced, -/area/rnd/xenobiology) -"tkb" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/turf/simulated/floor/reinforced, -/area/rnd/xenobiology) -"tlb" = ( -/obj/machinery/door/window/southleft{ - dir = 1; - name = "Containment Pen" - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/red, -/turf/simulated/floor/tiled/white/monotile, -/area/rnd/xenobiology) -"tmb" = ( -/obj/machinery/door/window/southright{ - dir = 1; - name = "Containment Pen" - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/blue, -/turf/simulated/floor/tiled/white/monotile, -/area/rnd/xenobiology) -"tmc" = ( -/obj/effect/floor_decal/corner/paleblue{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden, -/turf/simulated/floor/tiled/white, -/area/medical/foyer) -"tnb" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, -/turf/simulated/floor/reinforced, -/area/rnd/xenobiology) -"tnV" = ( -/obj/structure/railing/mapped{ - dir = 1; - icon_state = "railing0-1" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/meter, -/turf/simulated/floor/plating, -/area/maintenance/firstdeck/forestarboard) -"tob" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/wall/r_wall/hull, -/area/rnd/xenobiology) -"tpb" = ( -/obj/effect/floor_decal/industrial/hatch/yellow, -/obj/machinery/door/window/southleft{ - name = "Containment Pen" - }, -/obj/machinery/door/blast/regular{ - density = 0; - icon_state = "pdoor0"; - id_tag = "xenobio2"; - name = "Containment Blast Doors"; - opacity = 0 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/universal, -/turf/simulated/floor/reinforced, -/area/rnd/xenobiology) -"tqb" = ( -/obj/effect/floor_decal/industrial/hatch/yellow, -/obj/machinery/door/window/southright{ - name = "Containment Pen" - }, -/obj/machinery/door/blast/regular{ - density = 0; - icon_state = "pdoor0"; - id_tag = "xenobio3"; - name = "Containment Blast Doors"; - opacity = 0 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/universal, -/turf/simulated/floor/reinforced, -/area/rnd/xenobiology) -"trb" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/turf/simulated/wall/r_wall/hull, -/area/rnd/xenobiology) -"trC" = ( -/obj/machinery/meter, -/obj/machinery/atmospherics/pipe/simple/visible/blue{ - dir = 6 - }, -/obj/effect/wallframe_spawn/reinforced_phoron, -/obj/machinery/door/firedoor, -/turf/simulated/floor/reinforced, -/area/thruster/d1starboard) -"tsb" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/wall/r_wall/prepainted, -/area/rnd/xenobiology) -"ttb" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, -/obj/machinery/alarm/monitor{ - alarm_id = "xenobio2_alarm"; - dir = 4; - pixel_x = -24 - }, -/turf/simulated/floor/reinforced, -/area/rnd/xenobiology) -"tub" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply, -/turf/simulated/floor/reinforced, -/area/rnd/xenobiology) -"tvb" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/reinforced, -/area/rnd/xenobiology) -"tvV" = ( -/obj/effect/floor_decal/industrial/outline/grey, -/obj/structure/reagent_dispensers/fueltank, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/firstdeck/centralport) -"twb" = ( -/obj/machinery/light{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, -/turf/simulated/floor/reinforced, -/area/rnd/xenobiology) -"twz" = ( -/turf/simulated/floor/tiled/white, -/area/medical/exam_room) -"txb" = ( -/obj/machinery/light{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply, -/turf/simulated/floor/reinforced, -/area/rnd/xenobiology) -"tyb" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, -/obj/machinery/alarm/monitor{ - alarm_id = "xenobio3_alarm"; - dir = 8; - pixel_x = 24 - }, -/turf/simulated/floor/reinforced, -/area/rnd/xenobiology) -"tzb" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/turf/simulated/wall/r_wall/hull, -/area/rnd/xenobiology) -"tzg" = ( -/obj/random/torchcloset, -/obj/random/maintenance/solgov, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/firstdeck/centralport) -"tzv" = ( -/obj/effect/floor_decal/techfloor{ - dir = 8 - }, -/obj/effect/floor_decal/techfloor{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/cyan, -/obj/machinery/light/small, -/turf/simulated/floor/tiled/techfloor/grid, -/area/crew_quarters/safe_room/firstdeck) -"tAS" = ( -/turf/simulated/wall/r_wall/hull, -/area/maintenance/firstdeck/foreport) -"tCu" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/visible/fuel, -/obj/structure/catwalk, -/obj/effect/floor_decal/industrial/warning{ - dir = 8; - icon_state = "warning" - }, -/turf/simulated/floor/plating, -/area/maintenance/firstdeck/aftport) -"tCw" = ( -/obj/effect/floor_decal/floordetail/edgedrain{ - dir = 10 - }, -/obj/effect/floor_decal/corner/paleblue{ - dir = 4 - }, -/obj/machinery/firealarm{ - dir = 8; - pixel_x = -24 - }, -/obj/structure/closet/crate/freezer, -/obj/item/device/mmi, -/obj/item/reagent_containers/ivbag/nanoblood, -/obj/item/reagent_containers/ivbag/nanoblood, -/turf/simulated/floor/tiled/white, -/area/medical/surgery2) -"tCO" = ( -/obj/effect/floor_decal/corner/paleblue{ - dir = 5 - }, -/obj/effect/floor_decal/corner/paleblue{ - dir = 10 - }, -/obj/item/auto_cpr, -/obj/item/bodybag/rescue/loaded, -/obj/item/reagent_containers/glass/beaker/cryoxadone{ - pixel_x = 7; - pixel_y = 1 - }, -/obj/item/reagent_containers/glass/beaker/cryoxadone{ - pixel_x = 7; - pixel_y = 1 - }, -/obj/structure/sign/noidle{ - pixel_y = 32 - }, -/obj/structure/table/standard, -/turf/simulated/floor/tiled/white, -/area/medical/sleeper) -"tEs" = ( -/obj/structure/filingcabinet/chestdrawer{ - dir = 1 - }, -/obj/item/folder/blue, -/obj/item/folder/red, -/obj/item/folder, -/obj/item/folder/nt, -/obj/item/folder/yellow, -/obj/item/folder/white, -/obj/item/folder/nt, -/obj/item/folder/nt, -/obj/effect/floor_decal/corner/research/mono, -/obj/machinery/light_switch{ - pixel_x = 22; - pixel_y = 6 - }, -/obj/machinery/button/windowtint{ - id = "sci_office"; - pixel_x = 22; - pixel_y = -6 - }, -/turf/simulated/floor/tiled/white/monotile, -/area/rnd/office) -"tGe" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/catwalk, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/turf/simulated/floor/plating, -/area/maintenance/firstdeck/centralstarboard) -"tIF" = ( -/obj/machinery/atmospherics/unary/outlet_injector{ - frequency = 1441; - icon_state = "map_injector"; - id = "d1ph_in"; - use_power = 1 - }, -/turf/simulated/floor/reinforced/hydrogen, -/area/thruster/d1port) -"tJM" = ( -/obj/effect/catwalk_plated, -/obj/structure/cable/green{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/security/wing) -"tJO" = ( -/turf/simulated/floor/tiled/white, -/area/security/detectives_office) -"tKE" = ( -/obj/machinery/space_heater, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/firstdeck/foreport) -"tLL" = ( -/obj/item/storage/briefcase, -/obj/structure/table/rack, -/obj/item/device/paicard, -/obj/effect/floor_decal/corner/research/mono, -/obj/machinery/alarm{ - dir = 1; - pixel_y = -22 - }, -/obj/item/device/taperecorder, -/obj/item/device/tape, -/turf/simulated/floor/tiled/white/monotile, -/area/rnd/office) -"tRX" = ( -/obj/structure/railing/mapped{ - dir = 8; - icon_state = "railing0-1" - }, -/obj/structure/railing/mapped{ - dir = 1; - icon_state = "railing0-1" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/plating, -/area/maintenance/firstdeck/centralport) -"tTA" = ( -/obj/structure/table/standard, -/obj/item/storage/box/cups, -/turf/simulated/floor/tiled/monotile, -/area/security/brig) -"tTY" = ( -/obj/structure/railing/mapped{ - dir = 1; - icon_state = "railing0-1" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 - }, -/turf/simulated/floor/plating, -/area/maintenance/firstdeck/forestarboard) -"tUl" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 8 - }, -/turf/simulated/floor/tiled/dark, -/area/security/evidence) -"tVi" = ( -/obj/structure/sign/warning/hot_exhaust{ - dir = 8 - }, -/turf/simulated/wall/r_wall/prepainted, -/area/maintenance/firstdeck/aftstarboard) -"tWo" = ( -/obj/structure/disposalpipe/segment, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/turf/simulated/floor/tiled, -/area/security/wing) -"tWZ" = ( -/obj/effect/floor_decal/techfloor{ - dir = 1 - }, -/obj/machinery/alarm{ - pixel_y = 24 - }, -/turf/simulated/floor/tiled/techfloor, -/area/crew_quarters/safe_room/firstdeck) -"tYV" = ( -/obj/machinery/atmospherics/pipe/simple/visible/fuel{ - dir = 4 - }, -/obj/effect/floor_decal/industrial/warning, -/obj/machinery/atmospherics/binary/pump/on{ - dir = 1; - target_pressure = 15000 - }, -/obj/effect/floor_decal/industrial/outline/orange, -/turf/simulated/floor/tiled/techfloor, -/area/thruster/d1port) -"tZR" = ( -/obj/structure/table/rack{ - dir = 4 - }, -/obj/effect/floor_decal/industrial/outline/grey, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/item/storage/box/smokes, -/obj/item/storage/box/smokes, -/obj/item/storage/box/flashbangs{ - pixel_x = -2; - pixel_y = -2 - }, -/obj/item/storage/box/teargas{ - pixel_x = 3; - pixel_y = 2 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/security/storage) -"ubf" = ( -/obj/machinery/atmospherics/portables_connector{ - dir = 1 - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/plating, -/area/maintenance/firstdeck/centralstarboard) -"udY" = ( -/obj/machinery/washing_machine, -/obj/structure/closet/walllocker{ - name = "Washing Machine Supplies"; - pixel_y = 28; - pixel_z = 3 - }, -/obj/item/storage/box/detergent, -/obj/item/soap, -/obj/machinery/light/small{ - dir = 4; - icon_state = "bulb1" - }, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 8 - }, -/obj/item/roller/ironingboard, -/obj/item/ironingiron, -/obj/machinery/firealarm{ - dir = 4; - pixel_x = 26 - }, -/turf/simulated/floor/tiled/freezer, -/area/medical/washroom) -"ugg" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/hologram/holopad, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 1 - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/turf/simulated/floor/tiled/monotile, -/area/hallway/primary/firstdeck/aft) -"uhl" = ( -/obj/structure/railing/mapped{ - dir = 1; - icon_state = "railing0-1" - }, -/turf/simulated/floor/plating, -/area/maintenance/firstdeck/aftport) -"uiY" = ( -/turf/simulated/wall/prepainted, -/area/medical/equipstorage) -"ujx" = ( -/obj/machinery/light{ - dir = 1 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/security/storage) -"umz" = ( -/obj/structure/table/rack, -/obj/item/gun/energy/ionrifle, -/obj/effect/floor_decal/industrial/outline/grey, -/obj/machinery/light, -/obj/structure/window/reinforced, -/obj/structure/window/reinforced{ - dir = 8 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/security/armoury) -"umI" = ( -/obj/item/device/radio/intercom{ - pixel_y = 23 - }, -/obj/effect/floor_decal/corner/paleblue{ - dir = 5 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/firstdeck/center) -"umT" = ( -/obj/effect/floor_decal/spline/plain/blue{ - dir = 4 - }, -/obj/structure/bed/roller, -/obj/item/device/radio/intercom/department/medbay{ - dir = 4; - pixel_x = -24 - }, -/turf/simulated/floor/tiled/white, -/area/medical/sleeper) -"uoC" = ( -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/tiled, -/area/hallway/primary/firstdeck/aft) -"urd" = ( -/obj/structure/railing/mapped{ - dir = 4; - icon_state = "railing0-1" - }, -/obj/structure/railing/mapped, -/turf/simulated/floor/plating, -/area/maintenance/firstdeck/aftstarboard) -"ure" = ( -/obj/effect/floor_decal/corner/green{ - dir = 10 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/firstdeck/center) -"usV" = ( -/obj/structure/railing/mapped{ - dir = 8; - icon_state = "railing0-1" - }, -/obj/machinery/atmospherics/pipe/simple/visible/fuel{ - dir = 9 - }, -/turf/simulated/floor/plating, -/area/maintenance/firstdeck/aftstarboard) -"uuS" = ( -/obj/effect/floor_decal/corner/paleblue{ - dir = 10 - }, -/obj/effect/floor_decal/corner/paleblue{ - dir = 5 - }, -/turf/simulated/floor/tiled/white, -/area/medical/exam_room) -"uvj" = ( -/obj/effect/floor_decal/corner/paleblue{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/white, -/area/medical/equipstorage) -"uBg" = ( -/obj/structure/sign/double/solgovflag/left{ - pixel_y = 32 - }, -/turf/simulated/floor/tiled/dark, -/area/command/conference) -"uCe" = ( -/obj/effect/floor_decal/techfloor{ - dir = 8 - }, -/obj/effect/floor_decal/techfloor{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/command/armoury) -"uCA" = ( -/obj/machinery/papershredder, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled/monotile, -/area/security/detectives_office) -"uDu" = ( -/obj/effect/wallframe_spawn/reinforced/polarized{ - id = "interviewwindow" - }, -/obj/structure/cable/green{ - d2 = 2; - icon_state = "0-2" - }, -/obj/structure/cable/green, -/turf/simulated/floor/plating, -/area/security/questioning) -"uFk" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden, -/turf/simulated/floor/tiled/dark, -/area/medical/foyer/storeroom) -"uGu" = ( -/obj/machinery/door/firedoor, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/door/airlock/security{ - name = "Evidence Storage" - }, -/turf/simulated/floor/tiled/steel_ridged, -/area/security/evidence) -"uHz" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/lattice, -/obj/structure/railing/mapped{ - dir = 4; - icon_state = "railing0-1" - }, -/obj/machinery/atmospherics/pipe/zpipe/down/fuel{ - dir = 8 - }, -/turf/simulated/open, -/area/maintenance/firstdeck/aftport) -"uJd" = ( -/obj/effect/floor_decal/corner/red/half{ - dir = 8 - }, -/turf/simulated/floor/tiled, -/area/security/wing) -"uJn" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/security/processing) -"uKa" = ( -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/firstdeck/foreport) -"uKs" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 4 - }, -/obj/machinery/pager/medical{ - pixel_x = -23; - pixel_y = -10 - }, -/turf/simulated/floor/tiled/white, -/area/medical/medicalhallway) -"uLB" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 1 - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled, -/area/security/wing) -"uLQ" = ( -/obj/effect/floor_decal/corner/blue, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/machinery/light_switch{ - pixel_x = -24; - pixel_y = 24 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark, -/area/command/armoury) -"uMP" = ( -/obj/structure/closet/bombclosetsecurity, -/obj/effect/floor_decal/industrial/outline/grey, -/obj/machinery/recharger/wallcharger{ - dir = 1; - pixel_y = -22 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/command/armoury/tactical) -"uPc" = ( -/obj/machinery/light, -/obj/effect/floor_decal/corner/red/half, -/turf/simulated/floor/tiled/monotile, -/area/hallway/primary/firstdeck/fore) -"uRO" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/dark, -/area/security/storage) -"uSl" = ( -/turf/simulated/wall/prepainted, -/area/assembly/robotics/surgery) -"uUC" = ( -/obj/machinery/flasher{ - id_tag = "permflash"; - name = "Floor mounted flash" - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled/monotile, -/area/security/brig) -"uUK" = ( -/obj/structure/table/rack{ - dir = 8 - }, -/obj/item/device/scanner/spectrometer, -/obj/item/storage/box/freezer, -/obj/item/storage/box/beakers/insulated, -/obj/item/reagent_containers/dropper, -/obj/item/storage/box/beakers, -/obj/item/hand_labeler, -/obj/item/stack/package_wrap/twenty_five, -/obj/item/reagent_containers/spray/cleaner{ - desc = "Someone has crossed out the 'Space' from Space Cleaner and written in Chemistry. Scrawled on the back is, 'Okay, whoever filled this with polytrinic acid, it was only funny the first time. It was hard enough replacing the CMO's first cat!'"; - name = "Chemistry Cleaner" - }, -/obj/effect/floor_decal/corner/beige/mono, -/obj/item/device/radio/intercom/department/medbay{ - dir = 8; - pixel_x = 24 - }, -/turf/simulated/floor/tiled/white/monotile, -/area/medical/chemistry) -"uVf" = ( -/obj/machinery/atmospherics/valve/digital{ - dir = 4; - id_tag = "fuelmode" - }, -/obj/effect/floor_decal/industrial/warning, -/obj/effect/floor_decal/industrial/outline/red, -/turf/simulated/floor/tiled/techfloor, -/area/thruster/d1starboard) -"uVw" = ( -/obj/structure/table/standard, -/obj/machinery/light, -/obj/machinery/vending/wallmed1{ - dir = 1; - name = "Emergency NanoMed"; - pixel_y = -32 - }, -/turf/simulated/floor/tiled/monotile, -/area/security/brig) -"uWa" = ( -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 6 - }, -/obj/structure/closet/firecloset, -/obj/item/storage/briefcase/inflatable, -/obj/item/wrench, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/floor/plating, -/area/maintenance/firstdeck/centralstarboard) -"uXe" = ( -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/firstdeck/aftstarboard) -"uXr" = ( -/obj/machinery/door/blast/shutters{ - dir = 4; - id_tag = "teleport1"; - name = "First Deck Teleporter Access Shutters" - }, -/obj/effect/floor_decal/industrial/hatch/yellow, -/turf/simulated/floor/tiled/techfloor/grid, -/area/teleporter/firstdeck) -"uXJ" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/catwalk, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/turf/simulated/floor/plating, -/area/maintenance/firstdeck/forestarboard) -"uXW" = ( -/obj/machinery/light_switch{ - pixel_x = -6; - pixel_y = -24 - }, -/obj/machinery/button/windowtint{ - id = "forensicswindow"; - pixel_x = 6; - pixel_y = -24 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 - }, -/turf/simulated/floor/tiled/white, -/area/security/detectives_office) -"uZi" = ( -/obj/effect/floor_decal/corner/paleblue{ - dir = 8 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/firstdeck/aft) -"uZO" = ( -/obj/structure/table/steel, -/obj/machinery/recharger, -/obj/item/pinpointer, -/obj/structure/extinguisher_cabinet{ - pixel_x = -32 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/command/armoury) -"uZY" = ( -/obj/machinery/newscaster/security_unit{ - pixel_y = -32 - }, -/obj/machinery/light, -/obj/effect/floor_decal/corner/red{ - dir = 10 - }, -/turf/simulated/floor/tiled, -/area/security/detectives_office) -"vci" = ( -/obj/effect/wallframe_spawn/reinforced_phoron, -/obj/machinery/door/firedoor, -/turf/simulated/floor/tiled/techfloor, -/area/thruster/d1starboard) -"vcy" = ( -/obj/effect/floor_decal/industrial/outline/grey, -/obj/machinery/portable_atmospherics/powered/scrubber, -/obj/machinery/light, -/turf/simulated/floor/tiled/techfloor/grid, -/area/command/armoury) -"veT" = ( -/obj/effect/floor_decal/techfloor{ - dir = 4 - }, -/obj/effect/floor_decal/techfloor{ - dir = 8 - }, -/obj/machinery/recharger/wallcharger{ - pixel_y = 24 - }, -/obj/machinery/light{ - dir = 1 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/command/armoury/tactical) -"vfK" = ( -/obj/machinery/door/airlock/maintenance, -/obj/machinery/door/firedoor, -/turf/simulated/floor/tiled/steel_ridged, -/area/medical/equipstorage) -"vhs" = ( -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/hologram/holopad, -/obj/structure/noticeboard{ - pixel_y = 32 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/command/conference) -"vii" = ( -/obj/structure/closet/secure_closet/medical_torch, -/obj/effect/floor_decal/corner/paleblue/mono, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled/white/monotile, -/area/medical/locker) -"vjY" = ( -/obj/structure/table/rack, -/obj/effect/floor_decal/industrial/outline/grey, -/obj/structure/window/reinforced{ - dir = 8 - }, -/obj/item/gun/energy/gun/secure, -/obj/item/gun/energy/gun/secure, -/obj/item/gun/energy/gun/secure, -/turf/simulated/floor/tiled/techfloor/grid, -/area/command/armoury/tactical) -"vkW" = ( -/obj/effect/floor_decal/techfloor{ - dir = 1 - }, -/obj/effect/floor_decal/corner_techfloor_grid{ - dir = 10 - }, -/obj/effect/floor_decal/techfloor/corner{ - dir = 8 - }, -/obj/effect/floor_decal/techfloor/corner, -/turf/simulated/floor/tiled/techfloor/grid, -/area/command/armoury) -"vlw" = ( -/obj/effect/floor_decal/techfloor, -/obj/effect/floor_decal/techfloor{ - dir = 1 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/command/armoury) -"vnz" = ( -/obj/effect/floor_decal/industrial/outline/grey, -/obj/machinery/light, -/obj/machinery/flasher/portable, -/turf/simulated/floor/tiled/techfloor/grid, -/area/command/armoury) -"vnC" = ( -/obj/effect/floor_decal/corner/paleblue/mono, -/obj/machinery/power/apc{ - dir = 1; - name = "north bump"; - pixel_y = 24 - }, -/obj/structure/cable/green{ - d2 = 8; - icon_state = "0-8" - }, -/obj/structure/table/standard, -/obj/item/device/flashlight/pen, -/obj/item/clothing/accessory/stethoscope, -/turf/simulated/floor/tiled/white/monotile, -/area/medical/exam_room) -"vpA" = ( -/obj/machinery/status_display, -/turf/simulated/wall/prepainted, -/area/security/brig) -"vrM" = ( -/obj/structure/sign/warning/secure_area{ - dir = 4 - }, -/turf/simulated/wall/prepainted, -/area/maintenance/firstdeck/foreport) -"vtY" = ( -/obj/structure/sign/warning/high_voltage{ - dir = 8 - }, -/turf/simulated/wall/prepainted, -/area/hallway/primary/firstdeck/aft) -"vvn" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 8 - }, -/obj/structure/disposalpipe/segment{ - dir = 2; - icon_state = "pipe-c" - }, -/turf/simulated/floor/tiled/monotile, -/area/security/detectives_office) -"vzp" = ( -/obj/effect/catwalk_plated, -/obj/structure/disposalpipe/sortjunction/flipped{ - dir = 1; - name = "Brig Storage"; - sort_type = "Brig Storage" - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/turf/simulated/floor/plating, -/area/security/wing) -"vzy" = ( -/turf/simulated/wall/prepainted, -/area/medical/surgery2) -"vBa" = ( -/obj/machinery/atmospherics/unary/vent_pump/tank{ - dir = 8; - external_pressure_bound = 0; - external_pressure_bound_default = 0; - icon_state = "map_vent_in"; - id_tag = "d1so2_out"; - initialize_directions = 1; - internal_pressure_bound = 4000; - internal_pressure_bound_default = 4000; - pressure_checks = 2; - pressure_checks_default = 2; - pump_direction = 0; - use_power = 1 - }, -/turf/simulated/floor/reinforced/oxygen, -/area/thruster/d1starboard) -"vBV" = ( -/obj/random/obstruction, -/turf/simulated/floor/plating, -/area/maintenance/firstdeck/aftport) -"vDD" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/security/detectives_office) -"vEa" = ( -/obj/effect/floor_decal/corner/paleblue{ - dir = 5 - }, -/turf/simulated/floor/tiled/white, -/area/medical/equipstorage) -"vFa" = ( -/obj/structure/table/rack, -/obj/item/shield/riot, -/obj/effect/floor_decal/industrial/outline/grey, -/obj/machinery/light, -/obj/structure/window/reinforced, -/obj/structure/window/reinforced{ - dir = 4 - }, -/obj/item/shield/riot, -/turf/simulated/floor/tiled/dark/monotile, -/area/security/armoury) -"vFj" = ( -/obj/structure/table/glass, -/obj/item/device/scanner/reagent, -/obj/item/device/scanner/spectrometer, -/turf/simulated/floor/tiled/white, -/area/security/detectives_office) -"vFF" = ( -/obj/machinery/atmospherics/pipe/simple/visible/fuel{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/light_switch{ - pixel_x = -24; - pixel_y = -24 - }, -/turf/simulated/floor/tiled/techfloor, -/area/thruster/d1port) -"vHB" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/obj/effect/floor_decal/corner/paleblue{ - dir = 5 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/firstdeck/aft) -"vIn" = ( -/obj/effect/floor_decal/industrial/hatch/blue, -/obj/structure/disposalpipe/segment, -/obj/machinery/door/blast/shutters{ - density = 0; - dir = 2; - icon_state = "shutter0"; - id_tag = "infirm_pub"; - name = "Infirmary Public Hallway Lockdown"; - opacity = 0 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/door/firedoor, -/turf/simulated/floor/tiled/white, -/area/medical/medicalhallway) -"vIP" = ( -/obj/structure/filingcabinet/chestdrawer, -/obj/machinery/camera/network/security{ - c_tag = "Security Wing - Investigations"; - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/security/detectives_office) -"vJO" = ( -/obj/structure/bed/chair/padded/red, -/obj/effect/floor_decal/corner/red{ - dir = 5 - }, -/turf/simulated/floor/tiled, -/area/security/wing) -"vMm" = ( -/obj/structure/closet/crate, -/obj/random/tank, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/firstdeck/forestarboard) -"vMw" = ( -/turf/simulated/wall/r_wall/prepainted, -/area/security/evidence) -"vMH" = ( -/turf/simulated/wall/r_wall/prepainted, -/area/security/locker) -"vTH" = ( -/obj/effect/wallframe_spawn/reinforced/polarized{ - id = "forensicswindow" - }, -/obj/structure/cable/green{ - d2 = 8; - icon_state = "0-8" - }, -/obj/structure/cable/green{ - d2 = 2; - icon_state = "0-2" - }, -/turf/simulated/floor/plating, -/area/security/detectives_office) -"vTY" = ( -/obj/effect/wallframe_spawn/reinforced/polarized{ - id = "processwindow" - }, -/obj/machinery/door/blast/regular{ - density = 0; - icon_state = "pdoor0"; - id_tag = "Prison Gate"; - name = "Security Blast Door"; - opacity = 0 - }, -/turf/simulated/floor/plating, -/area/security/processing) -"vUl" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark, -/area/security/bo) -"vUD" = ( -/obj/structure/closet/crate, -/obj/item/grenade/chem_grenade/metalfoam, -/obj/item/grenade/chem_grenade/metalfoam, -/obj/item/grenade/chem_grenade/metalfoam, -/obj/item/grenade/chem_grenade/metalfoam, -/obj/item/storage/briefcase/inflatable, -/obj/item/storage/briefcase/inflatable, -/obj/effect/floor_decal/industrial/outline/grey, -/obj/item/storage/box/lights/tubes, -/obj/item/storage/box/lights/bulbs, -/obj/item/device/flashlight/flare/glowstick/random, -/obj/item/device/flashlight/flare/glowstick/random, -/obj/item/device/flashlight/flare/glowstick/random, -/obj/item/device/flashlight, -/obj/item/device/flashlight, -/obj/item/device/flashlight, -/obj/item/device/flashlight, -/obj/item/device/flashlight, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/techfloor/grid, -/area/command/armoury) -"vVe" = ( -/turf/simulated/floor/reinforced/hydrogen, -/area/thruster/d1starboard) -"vZI" = ( -/obj/effect/floor_decal/corner/paleblue{ - dir = 5 - }, -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/obj/machinery/camera/network/medbay{ - c_tag = "Infirmary - Equipment Storage"; - dir = 4 - }, -/obj/structure/closet/hydrant{ - pixel_x = -32 - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/white, -/area/medical/equipstorage) -"vZK" = ( -/obj/effect/floor_decal/corner/paleblue{ - dir = 5 - }, -/obj/machinery/light{ - dir = 8 - }, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/medical/locker) -"wcQ" = ( -/obj/machinery/pager/security{ - pixel_x = -25 - }, -/obj/effect/floor_decal/corner/red{ - dir = 1 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/firstdeck/fore) -"whd" = ( -/obj/effect/floor_decal/corner/blue{ - dir = 6 - }, -/obj/structure/bed/chair/padded/blue, -/turf/simulated/floor/tiled/dark, -/area/command/conference) -"whm" = ( -/obj/structure/closet/secure_closet/brig{ - id = "Cell 2"; - name = "Cell Locker" - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 8 - }, -/obj/item/device/radio/intercom/department/security{ - dir = 8; - pixel_x = 21 - }, -/turf/simulated/floor/tiled, -/area/security/wing) -"wjP" = ( -/obj/structure/table/rack{ - dir = 4 - }, -/obj/effect/floor_decal/industrial/outline/grey, -/obj/item/storage/toolbox/mechanical, -/obj/item/storage/toolbox/mechanical, -/obj/structure/window/reinforced{ - dir = 1 - }, -/obj/item/storage/toolbox/electrical, -/obj/item/storage/toolbox/electrical, -/obj/item/storage/toolbox/emergency, -/obj/item/storage/toolbox/emergency, -/obj/structure/window/reinforced{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/command/armoury) -"wkS" = ( -/obj/effect/catwalk_plated, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply, -/turf/simulated/floor/plating, -/area/hallway/primary/firstdeck/fore) -"wlG" = ( -/obj/structure/table/rack{ - dir = 8 - }, -/obj/item/cane{ - pixel_x = -3; - pixel_y = 2 - }, -/obj/item/cane{ - pixel_x = -3; - pixel_y = 2 - }, -/obj/item/cane{ - pixel_x = -3; - pixel_y = 2 - }, -/obj/item/storage/box/rxglasses, -/obj/item/clothing/accessory/stethoscope, -/obj/item/device/flashlight/pen, -/obj/effect/floor_decal/corner/paleblue/mono, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/light{ - dir = 1 - }, -/turf/simulated/floor/tiled/white/monotile, -/area/medical/equipstorage) -"wmK" = ( -/obj/effect/catwalk_plated, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/obj/structure/disposalpipe/segment{ - dir = 2; - icon_state = "pipe-c" - }, -/turf/simulated/floor/plating, -/area/security/wing) -"wtS" = ( -/obj/random/medical, -/obj/random/medical, -/obj/random/medical, -/obj/random/medical, -/obj/random/medical, -/obj/random/medical, -/obj/random/medical, -/obj/random/firstaid, -/obj/item/device/scanner/health, -/obj/structure/closet/medical_wall{ - pixel_y = 32 - }, -/obj/item/roller{ - pixel_y = 8 - }, -/obj/machinery/atmospherics/unary/vent_pump/on, -/obj/effect/floor_decal/corner/paleblue{ - dir = 6 - }, -/obj/effect/floor_decal/corner/paleblue{ - dir = 1 - }, -/turf/simulated/floor/tiled/white, -/area/assembly/robotics/laboratory) -"wvZ" = ( -/obj/machinery/alarm{ - pixel_y = 24 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/security/storage) -"wyb" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/door/firedoor, -/obj/machinery/door/blast/regular{ - density = 0; - dir = 4; - icon_state = "pdoor0"; - id_tag = "Prison Gate"; - name = "Security Blast Door"; - opacity = 0 - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/turf/simulated/floor/tiled, -/area/security/wing) -"wzN" = ( -/obj/effect/floor_decal/corner/red{ - dir = 9 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/firstdeck/fore) -"wAK" = ( -/obj/effect/floor_decal/corner/red/diagonal, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/door/unpowered/simple/plastic/open, -/turf/simulated/floor/tiled/freezer, -/area/security/brig) -"wDm" = ( -/obj/structure/table/glass, -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/obj/item/forensics/sample_kit/powder, -/obj/item/forensics/swab, -/turf/simulated/floor/tiled/white, -/area/security/detectives_office) -"wEb" = ( -/obj/structure/bed/padded, -/obj/item/bedsheet/orange, -/obj/effect/floor_decal/corner/red{ - dir = 10 - }, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 8 - }, -/obj/machinery/firealarm{ - dir = 1; - pixel_y = -26 - }, -/turf/simulated/floor/tiled, -/area/security/wing) -"wEn" = ( -/turf/simulated/wall/r_wall/hull, -/area/security/questioning) -"wEw" = ( -/turf/simulated/wall/r_wall/prepainted, -/area/thruster/d1port) -"wGe" = ( -/obj/effect/floor_decal/industrial/outline/grey, -/obj/machinery/portable_atmospherics/powered/scrubber, -/turf/simulated/floor/tiled/techfloor/grid, -/area/command/armoury) -"wMh" = ( -/obj/structure/bed/padded, -/obj/item/bedsheet/orange, -/obj/machinery/atm{ - pixel_y = -32 - }, -/turf/simulated/floor/tiled, -/area/security/brig) -"wMo" = ( -/obj/structure/railing/mapped{ - dir = 1; - icon_state = "railing0-1" - }, -/turf/simulated/open, -/area/hallway/primary/firstdeck/fore) -"wNX" = ( -/obj/structure/railing/mapped{ - dir = 1; - icon_state = "railing0-1" - }, -/turf/simulated/floor/plating, -/area/maintenance/firstdeck/centralstarboard) -"wRs" = ( -/obj/structure/bed/chair/office/dark{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/dark, -/area/command/armoury/access) -"wUg" = ( -/obj/effect/floor_decal/techfloor{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/turf/simulated/floor/tiled/dark, -/area/medical/foyer/storeroom) -"wWc" = ( -/obj/structure/sign/warning/secure_area{ - dir = 4 - }, -/turf/simulated/wall/r_wall/prepainted, -/area/teleporter/firstdeck) -"wWr" = ( -/obj/effect/floor_decal/corner/green/half{ - dir = 1 - }, -/turf/simulated/floor/tiled/monotile, -/area/hallway/primary/firstdeck/center) -"wXc" = ( -/obj/item/device/radio/intercom/entertainment{ - dir = 4; - pixel_x = -22 - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/holoplant, -/turf/simulated/floor/tiled, -/area/security/brig) -"wXN" = ( -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/obj/machinery/light, -/turf/simulated/floor/tiled, -/area/security/brig) -"xaC" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/firstdeck/aftport) -"xcW" = ( -/turf/simulated/wall/prepainted, -/area/assembly/robotics/office) -"xhX" = ( -/obj/structure/table/steel, -/obj/random/clipboard, -/obj/item/folder/red, -/obj/item/hand_labeler, -/obj/machinery/light{ - dir = 1 - }, -/obj/machinery/alarm{ - dir = 8; - pixel_x = 24 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/command/armoury/access) -"xie" = ( -/obj/effect/wallframe_spawn/reinforced/polarized{ - id = "rndpost" - }, -/turf/simulated/floor/plating, -/area/rnd/rnd_sec) -"xjr" = ( -/obj/structure/sign/warning/high_voltage{ - dir = 4 - }, -/turf/simulated/wall/prepainted, -/area/maintenance/substation/firstdeck) -"xoo" = ( -/obj/effect/wallframe_spawn/reinforced, -/obj/machinery/door/blast/regular{ - density = 0; - icon_state = "pdoor0"; - id_tag = "Secure Gate"; - name = "Security Blast Door"; - opacity = 0 - }, -/obj/structure/cable/green{ - d2 = 8; - icon_state = "0-8" - }, -/obj/structure/cable/green{ - d2 = 4; - icon_state = "0-4" - }, -/turf/simulated/floor/plating, -/area/security/brig) -"xqk" = ( -/obj/effect/floor_decal/industrial/outline/grey, -/obj/machinery/suit_cycler, -/obj/machinery/firealarm{ - pixel_y = 24 - }, -/obj/machinery/camera/network/command{ - c_tag = "Emergency Armory - Starboard" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/command/armoury) -"xtq" = ( -/obj/machinery/atmospherics/pipe/simple/visible/fuel{ - dir = 10 - }, -/obj/structure/railing/mapped{ - dir = 8; - icon_state = "railing0-1" - }, -/turf/simulated/floor/plating, -/area/maintenance/firstdeck/aftstarboard) -"xuW" = ( -/turf/simulated/floor/tiled/dark, -/area/medical/foyer/storeroom) -"xvt" = ( -/obj/effect/floor_decal/floordetail/edgedrain{ - dir = 6 - }, -/obj/effect/floor_decal/corner/paleblue{ - dir = 1 - }, -/obj/machinery/button/windowtint{ - id = "or1"; - pixel_x = -6; - pixel_y = -24 - }, -/obj/machinery/button/holosign{ - id_tag = "or1"; - pixel_x = 6; - pixel_y = -24 - }, -/obj/machinery/camera/network/medbay{ - c_tag = "Infirmary - Operating Theatre 1"; - dir = 1 - }, -/obj/structure/closet/crate/secure/biohazard/alt, -/turf/simulated/floor/tiled/white, -/area/medical/surgery) -"xxB" = ( -/obj/machinery/constructable_frame/computerframe, -/turf/simulated/floor/plating, -/area/maintenance/firstdeck/aftport) -"xxU" = ( -/obj/machinery/button/alternate/door{ - desc = "A remote control-switch for the cargo doors."; - dir = 1; - id_tag = "researchdoor_interior"; - name = "Research Door Control"; - pixel_x = 6; - pixel_y = 6; - req_access = list("ACCESS_RESEARCH_SECURITY") - }, -/obj/machinery/button/blast_door{ - dir = 1; - id_tag = "Biohazard"; - name = "Biohazard Shutter Control"; - pixel_x = -7; - pixel_y = 6; - req_access = list("ACCESS_RESEARCH_SECURITY") - }, -/turf/simulated/wall/prepainted, -/area/rnd/xenobiology/xenoflora) -"xxY" = ( -/obj/effect/floor_decal/corner/research{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/white, -/area/rnd/office) -"xzj" = ( -/obj/effect/floor_decal/techfloor, -/obj/machinery/camera/network/command{ - c_tag = "Emergency Armory - Port"; - dir = 4 - }, -/turf/simulated/floor/tiled/dark, -/area/command/armoury) -"xzK" = ( -/obj/structure/bed/chair/padded/red, -/obj/machinery/camera/network/security{ - c_tag = "Security Wing - Lobby" - }, -/obj/effect/floor_decal/corner/red{ - dir = 5 - }, -/turf/simulated/floor/tiled, -/area/security/wing) -"xzN" = ( -/obj/effect/floor_decal/corner/paleblue/mono, -/obj/item/flame/candle/scented/incense{ - desc = "An incense cone. It produces fragrant smoke when burned. This one is branded 'IQ-incense, for the smart and sensual.' " - }, -/obj/item/material/ashtray/plastic{ - pixel_x = 5; - pixel_y = 5 - }, -/obj/structure/table/glass, -/obj/random_multi/single_item/memo_medical, -/turf/simulated/floor/tiled/white/monotile, -/area/medical/medpaperworkoffice) -"xBk" = ( -/obj/structure/railing/mapped{ - dir = 4; - icon_state = "railing0-1" - }, -/turf/simulated/floor/plating, -/area/maintenance/firstdeck/aftstarboard) -"xCf" = ( -/obj/effect/floor_decal/corner/research{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 1 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/white, -/area/rnd/office) -"xCn" = ( -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/hologram/holopad, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/tiled/monotile, -/area/security/brig) -"xCS" = ( -/turf/simulated/wall/r_wall/prepainted, -/area/security/storage) -"xDX" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/catwalk_plated, -/turf/simulated/floor/plating, -/area/hallway/primary/firstdeck/fore) -"xEq" = ( -/obj/structure/sign/warning/pods/south, -/turf/simulated/wall/r_wall/hull, -/area/maintenance/firstdeck/centralstarboard) -"xFL" = ( -/turf/simulated/floor/tiled/steel_grid, -/area/turbolift/robotics_lift) -"xJi" = ( -/obj/machinery/door/window/brigdoor/eastleft{ - name = "Suit Storage" - }, -/obj/structure/table/rack, -/obj/structure/window/reinforced, -/obj/structure/window/reinforced{ - dir = 1 - }, -/obj/structure/window/reinforced{ - dir = 8 - }, -/obj/item/rig/hazard/research_guard/equipped, -/turf/simulated/floor/tiled/dark/monotile, -/area/rnd/rnd_sec) -"xJG" = ( -/turf/simulated/floor/tiled/dark, -/area/rnd/rnd_sec) -"xJP" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/effect/floor_decal/corner/blue, -/turf/simulated/floor/tiled, -/area/hallway/primary/firstdeck/fore) -"xKq" = ( -/obj/machinery/portable_atmospherics/canister/air, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/firstdeck/aftstarboard) -"xKz" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/glass/civilian, -/obj/effect/floor_decal/corner/paleblue{ - dir = 5 - }, -/turf/simulated/floor/tiled/steel_ridged, -/area/hallway/primary/firstdeck/center) -"xKY" = ( -/obj/effect/floor_decal/techfloor{ - dir = 8 - }, -/obj/effect/floor_decal/corner/yellow, -/obj/structure/disposalpipe/segment, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled, -/area/assembly/robotics/office) -"xMx" = ( -/obj/structure/disposalpipe/segment, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/firstdeck/centralport) -"xMy" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/tiled/white, -/area/medical/exam_room) -"xMP" = ( -/obj/structure/table/standard, -/obj/machinery/reagent_temperature, -/turf/simulated/floor/tiled/dark/monotile, -/area/rnd/misc_lab) -"xPU" = ( -/turf/simulated/wall/r_wall/hull, -/area/thruster/d1port) -"xRh" = ( -/turf/simulated/wall/prepainted, -/area/security/processing) -"xRu" = ( -/obj/structure/table/rack, -/obj/effect/floor_decal/industrial/outline/grey, -/obj/item/clothing/suit/armor/bulletproof{ - pixel_x = -2; - pixel_y = -2 - }, -/obj/item/clothing/suit/armor/bulletproof{ - pixel_x = -2; - pixel_y = -2 - }, -/obj/item/clothing/suit/armor/bulletproof{ - pixel_x = -2; - pixel_y = -2 - }, -/obj/item/clothing/suit/armor/bulletproof{ - pixel_x = -2; - pixel_y = -2 - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/security/armoury) -"xSd" = ( -/obj/machinery/atmospherics/pipe/simple/visible/blue{ - dir = 5 - }, -/obj/machinery/meter, -/obj/effect/wallframe_spawn/reinforced_phoron, -/obj/machinery/door/firedoor, -/turf/simulated/floor/reinforced, -/area/thruster/d1port) -"xSf" = ( -/obj/structure/sign/emergonly{ - pixel_y = 26 - }, -/obj/effect/floor_decal/corner/paleblue{ - dir = 5 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/firstdeck/center) -"xTc" = ( -/obj/structure/table/rack, -/obj/random/maintenance/solgov, -/obj/structure/catwalk, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/turf/simulated/floor/plating, -/area/maintenance/firstdeck/centralstarboard) -"xTh" = ( -/obj/machinery/sleeper{ - dir = 4 - }, -/obj/effect/floor_decal/corner/paleblue/mono, -/turf/simulated/floor/tiled/white/monotile, -/area/medical/sleeper) -"xTT" = ( -/obj/effect/floor_decal/industrial/outline/grey, -/obj/structure/closet/emcloset, -/obj/random/maintenance/solgov, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/firstdeck/aftstarboard) -"xVt" = ( -/obj/machinery/computer/modular/preset/civilian, -/obj/effect/floor_decal/corner/research/mono, -/turf/simulated/floor/tiled/white/monotile, -/area/rnd/office) -"xYM" = ( -/turf/simulated/wall/prepainted, -/area/medical/medpaperworkoffice) -"ybv" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/firstdeck/fore) -"ycp" = ( -/obj/effect/floor_decal/corner/research/half, -/turf/simulated/floor/tiled/white/monotile, -/area/rnd/misc_lab) -"ycz" = ( -/obj/effect/floor_decal/corner/paleblue{ - dir = 5 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/firstdeck/center) -"yeI" = ( -/obj/structure/bed/chair/office/comfy/red, -/obj/structure/disposalpipe/segment{ - dir = 1; - icon_state = "pipe-c" - }, -/turf/simulated/floor/tiled, -/area/security/detectives_office) -"yfH" = ( -/obj/structure/fireaxecabinet{ - pixel_y = -32 - }, -/obj/machinery/alarm{ - dir = 8; - pixel_x = 24 - }, -/obj/effect/floor_decal/techfloor{ - dir = 8 - }, -/obj/effect/floor_decal/techfloor{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/crew_quarters/safe_room/firstdeck) -"ygK" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, -/obj/effect/catwalk_plated, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/hallway/primary/firstdeck/aft) -"yii" = ( -/obj/effect/floor_decal/corner/paleblue{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, -/turf/simulated/floor/tiled/white, -/area/medical/locker) -"ykr" = ( -/obj/structure/closet/toolcloset, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/firstdeck/centralstarboard) - -(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 -"} -(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 -"} -(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 -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -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 -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -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 -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -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 -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -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 -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -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 -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -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 -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -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 -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -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 -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -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 -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -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 -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -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 -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -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 -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -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 -"} -(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 -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -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 -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -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 -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -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 -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aar -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -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 -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -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 -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -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 -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -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 -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -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 -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -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 -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -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 -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -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 -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -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 -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -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 -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -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 -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -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 -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -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 -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -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 -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -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 -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -hBr -hBr -hBr -hBr -hBr -hBr -hBr -hBr -hBr -hBr -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -tAS -tAS -tAS -tAS -tAS -tAS -tAS -tAS -tAS -tAS -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -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 -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -hBr -hBr -hBr -hBr -hBr -hBr -hBr -hBr -hBr -hBr -hBr -hBr -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -tAS -tAS -tAS -tAS -tAS -tAS -tAS -tAS -tAS -tAS -tAS -tAS -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -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 -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -hBr -hBr -hBr -hBr -hBr -hBr -hBr -hBr -hBr -hBr -hBr -hBr -hBr -hBr -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -tAS -tAS -tAS -tAS -tAS -tAS -tAS -tAS -tAS -tAS -tAS -tAS -tAS -tAS -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -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 -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -hBr -hBr -gyY -adK -adK -adK -adK -adK -adK -pjR -pjR -gnC -gnC -gnC -gnC -gnC -gnC -wEn -wEn -wEn -wEn -wEn -sik -sik -sik -sik -sik -sik -sik -nli -nli -cZi -cZi -aLv -pxv -sHN -aOE -kSs -etI -sBg -tAS -tAS -tAS -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -azV -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -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 -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -hBr -hBr -adK -akN -alS -adK -kld -ixB -adK -qWE -qWE -pjR -pjR -gnC -gnC -gnC -gnC -wEn -wEn -wEn -wEn -wEn -sik -sik -sik -sik -sik -sik -sik -nli -elT -cZi -cZi -aLv -iLA -sHN -hLf -aPu -aPu -aPu -umz -tAS -tAS -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -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 -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -hBr -hBr -adK -aeA -tzv -adK -oBZ -yfH -adK -qWE -alT -uCA -pjR -pjR -pjR -pjR -pjR -gvJ -gvJ -gvJ -gvJ -gvJ -vMH -vMH -vMH -vMH -vMH -vMH -vMH -xCS -wvZ -huf -enM -enM -enM -csy -oLz -mKq -aQp -aKv -rEK -tAS -tAS -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -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 -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -hBr -hBr -adK -adK -abY -adK -aco -adK -adK -qWE -jqF -bmO -vIP -jfn -mtF -kgu -dmz -oDg -ilh -jBk -kVi -oDg -goa -frA -rnp -ehZ -kiR -dZx -daB -xCS -gGO -daN -aKw -aLw -bii -hzl -oXv -rKP -xRu -tgT -tiQ -tAS -tAS -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -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 -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -hBr -hBr -adK -eQK -afC -pdO -gQn -aiK -adK -qWE -pVv -nOO -aMT -yeI -mgb -iVM -uZY -oDg -mig -nbl -cWR -oDg -deo -jBW -jcg -jcg -jcg -jcg -oSD -xCS -kss -tZR -hUc -aLx -kCN -sHN -aOF -oXx -qyX -aKv -qWF -tAS -tAS -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -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 -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -hBr -hBr -adK -tcA -ahC -agz -ahD -aiL -adK -qWE -alV -bmO -ana -nvs -kxs -pzH -jAr -oDg -rUO -mBb -iDb -oDg -lVZ -jqb -cor -cor -cor -cor -suM -xCS -ujx -uRO -enM -aLy -aMC -sHN -hLf -aPu -aPu -aPu -vFa -tAS -tAS -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -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 -aaa -aaa -aaa -aaa -aaa -aaa -aaa -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 -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -hBr -hBr -adK -lAC -afE -aXh -agA -aiM -adK -qWE -fUW -amZ -rpB -vvn -bWw -mtB -mKb -oDg -syI -btE -sxT -oDg -saS -njb -okp -aCu -aCu -aCu -aex -xCS -lRa -cxk -aKy -aLz -jft -sHN -aOG -jhf -lcI -pud -tAS -tAS -tAS -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -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 -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -hBr -hBr -adK -emQ -afF -hhB -ahF -aiN -adK -qWE -qSx -cPY -cPY -cNn -qWE -are -jqD -oDg -bpA -uDu -sTK -oDg -hGs -nkb -hGs -aCv -aCv -aCv -hGs -xCS -mfg -hbP -xCS -xCS -xCS -sHN -sHN -sHN -sHN -sHN -tAS -tAS -tAS -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -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 -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -hBr -hBr -adK -tWZ -gvC -ahE -ahG -kzy -adK -qWE -alX -tJO -wDm -qUl -mVW -nrF -cKO -cKO -cKO -llM -mJb -aLA -htq -nlb -cix -rOE -qYy -uJd -uJd -krc -rOE -aJn -aKA -aLA -aMD -nJo -aOI -aPv -aNH -vrM -tAS -tAS -tAS -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -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 -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -hBr -hBr -hBr -adK -afG -adK -afG -adK -ajO -adK -pjR -lym -lgd -vFj -vDD -vTH -uLB -npe -ats -iTP -mDb -tWo -fVC -brj -vzp -nDB -aCx -aDD -aEH -aEH -aGL -aHX -jON -aKB -oSb -aME -oMb -aNG -dkV -aNH -kSc -tAS -tAS -tAS -tAS -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -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 -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -hBr -hBr -hBr -adK -csb -adK -csb -adK -aiO -qDJ -pjR -mCe -iFb -lJb -uXW -qWE -uGu -aiu -cXj -wyb -sxG -xRh -awY -nbb -nmb -xRh -aCy -cHj -aKE -cHj -cHj -tgs -cHj -cHj -bob -jpt -oby -nkh -mCi -aNH -uKa -tKE -tAS -tAS -tAS -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -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 -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -hBr -hBr -hBr -abE -abE -abE -abE -adK -aiP -ajP -vMw -aiu -aiu -aiu -lVb -aiu -cfn -aiu -vJO -oIb -avI -xRh -axK -ayP -aAb -cDO -aJr -cHj -cwQ -nFh -hDp -aHY -aJo -cHj -aLD -aMF -aNH -aNH -aNH -aNH -bnG -aSm -tAS -tAS -tAS -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -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 -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -hBr -hBr -hBr -riX -aeD -lvm -agC -adK -aiQ -ajQ -vMw -lCN -smp -lKb -lWb -qya -mfb -aiu -vJO -auv -jpt -vTY -eyY -eyY -eyY -aBd -uJn -aDF -aeq -aFR -aGM -aHZ -aJp -cHj -aLE -jpt -nJo -aOI -mwy -aNH -aRo -aSn -tAS -tAS -tAS -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -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 -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -hBr -hBr -hBr -adP -aeE -lvm -adM -adK -aiR -ajR -vMw -aAI -miG -alW -alW -tUl -hCE -aiu -mCk -hnL -dPA -vTY -eyY -eyY -gxi -aBd -qkc -cHj -aEK -aFS -qig -vUl -aJq -aKE -bpb -aME -lcL -aNG -dkV -aNH -aRo -aSo -tAS -tAS -tAS -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -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 -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -hBr -hBr -hBr -hBr -adR -aeG -lvm -smX -adK -aiS -ajS -vMw -qSD -amb -dkG -ape -amb -kUt -aiu -xzK -auv -jpt -xRh -axN -grI -aAe -aBf -pUr -cHj -aEL -aDI -asA -aIa -lcS -taR -tJM -jpt -oby -whm -wEb -aNH -aRp -aSp -tAS -tAS -tAS -tAS -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -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 -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -hBr -hBr -hBr -abE -abE -adS -aeH -afI -afI -adK -adK -ajT -vMw -aiu -aiu -aiu -aiu -aiu -aiu -aiu -vJO -oIb -avI -xRh -axO -xRh -bdo -mdv -xRh -cHj -aJa -riC -cHj -aIb -aJs -aDG -aLG -aMJ -aNH -aNH -aNH -aNH -aRq -aIr -aBb -tAS -tAS -tAS -tAS -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -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 -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aXb -hBr -hBr -acb -acr -adf -adU -aeI -afI -agD -hUM -bmB -ajU -akV -atE -aOJ -qwk -atE -atE -aqd -cGB -bNL -ybv -cGB -wcQ -pIA -cGB -wzN -wzN -wzN -sCM -wzN -aFU -aDE -axu -aFQ -jUP -wmK -sYT -pQO -pQO -pQO -pZy -aRr -nkz -aST -aTp -aTZ -tAS -tAS -bBb -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -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 -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -abF -abO -acc -acs -adg -adT -aeJ -afJ -agE -ahI -aiU -ajV -akW -akW -ast -qKH -apf -apZ -arm -auy -nkr -ecI -mFb -mLb -mRb -ncb -awV -eUO -aCA -aDK -aEO -aFV -aGP -aIc -tTA -aKH -aLH -aMK -aNL -afj -afj -aOK -aRs -aSq -sCb -aTq -aUa -aUo -aUz -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -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 -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -hBr -hBr -hBr -abE -abE -adS -aeK -njj -njj -njj -njj -njj -njj -njj -njj -njj -njj -aqa -xDX -aDL -aDL -aDL -aDL -aDL -aez -aDL -aDL -aDL -aDL -aDL -iAZ -aFV -aGP -puL -oBG -aKH -aKH -pyg -aKH -aGP -aNH -aNH -aRt -aIr -tAS -tAS -tAS -tAS -tAS -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -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 -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -hBr -hBr -hBr -hBr -hBr -adV -aeL -njj -agF -dBF -gVR -ajW -isR -ajW -kqb -fYv -pBL -aqb -aYj -aDL -aDL -aDL -aDL -aDL -bqb -aDL -aDL -aDL -aDL -aDL -hyj -aFX -aGP -aIe -qxQ -wXc -oVb -aML -oWb -aGP -mtk -kny -aRu -aSs -tAS -tAS -tAS -tAS -tAS -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -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 -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -hBr -hBr -hBr -hBr -jkm -aeL -njj -apT -ahK -cSj -cSj -cSj -iEb -iEb -aoa -pXm -aqc -mhb -aDL -aDL -osb -mGb -mMb -mUb -ndb -nnb -eaS -aDL -aDL -nWb -ogb -asv -aIf -fHk -iuB -edT -aMM -aKH -aGP -aDW -kny -aRu -jTV -tAS -tAS -tAS -tAS -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -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 -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -hBr -hBr -hBr -adW -aeM -njj -agG -alZ -hIl -ajX -akY -amg -ang -aob -njj -aqd -mib -aDL -aDN -otb -mHb -mNb -mVb -neb -nob -oyb -aDN -aDL -obZ -aFV -xoo -aIg -aJw -aKJ -aKN -aMN -hjk -aGP -jTV -jTV -aRv -aSt -tAS -tAS -tAS -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -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 -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -hBr -hBr -hBr -adX -aeN -njj -njj -vhs -alZ -gZT -eUW -akX -sOd -qgw -imK -fDJ -mjb -aDL -aDL -osb -mHb -mOb -mWb -nfb -nob -osb -aDL -aDL -obZ -aFV -bSz -sTT -xCn -eVQ -aLK -uUC -uVw -aGP -qvX -aQx -rDC -aSu -tAS -tAS -tAS -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -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 -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -hBr -hBr -hBr -adY -uXJ -aiX -njj -uBg -hIl -ajZ -gnt -amh -scD -aoc -imK -fDJ -mkb -aDL -aDL -aDL -aDL -aDL -aDL -aDL -aDL -aDL -aDL -aDL -obZ -aGb -aGP -aIi -aJy -aKL -aLL -eVQ -rGU -aGP -aPw -aQy -aRw -aSv -tAS -tAS -tAS -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -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 -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -hBr -hBr -hBr -adZ -jjK -tnV -njj -hJq -whd -whd -whd -bxz -bxz -asq -imK -qiL -art -afI -asy -asy -asy -aAT -aAT -aAT -aAT -aAT -aAT -qHx -nZb -uPc -aGP -asx -aJz -iuB -aKH -vpA -aKH -aGP -aGP -ozm -aRw -aSw -tAS -tAS -tAS -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -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 -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -hBr -hBr -hBr -hBr -sbJ -tTY -njj -alZ -kCl -iEb -iPj -iEb -kCl -dzG -njj -aqg -aru -afI -atA -auE -avS -aAT -brb -ngb -npb -nub -nEb -aAT -aEU -aFV -aGP -aIj -aJA -eVQ -aKH -aMO -aNP -wMh -aGP -aQz -aRy -tAS -tAS -tAS -tAS -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -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 -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -hBr -hBr -hBr -aeN -adS -njj -njj -njj -njj -njj -njj -njj -njj -njj -fDJ -gzM -afI -atB -auF -avT -aAT -mXb -nhb -nqb -auB -mlw -iui -wkS -aFV -aGP -aIk -aJB -aKN -fbQ -aMP -aNQ -wXN -aGP -aPC -tAS -tAS -tAS -tAS -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -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 -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -hBr -hBr -aeO -afL -agJ -adS -afN -afN -aiY -pXG -vMm -jkm -afI -fDJ -xDX -qHq -atC -auG -avU -aAT -atw -atw -gDm -nvb -aKK -qHx -aEW -aGe -aGP -aKH -aJC -aKH -aKH -aMQ -kGb -oWF -aGP -aPC -tAS -tAS -tAS -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -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 -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -hBr -hBr -hBr -afM -aeO -bLb -ajg -hOZ -hOZ -hOZ -hOZ -hOZ -aph -fDJ -xDX -rZf -atD -auH -wMo -aAT -lYS -nZB -aCp -aAT -aAT -aAT -iAZ -aFX -aGP -aGX -aev -qRE -aKH -aKH -cur -aGP -aGP -aPC -tAS -tAS -tAS -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -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 -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -hBr -hBr -hBr -adS -adS -ahM -bMb -bMb -bMb -bMb -bMb -bMb -bMb -aqk -gzM -asB -jxG -auI -avV -aAT -wWc -aAT -uXr -aAT -eZQ -fVw -iAZ -aFV -aGP -aIm -aJE -aIn -wAK -sMf -bhL -aBb -jei -qCs -tAS -tAS -tAS -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -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 -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -hBr -hBr -hBr -afO -aiZ -ahM -bMb -edb -gab -gQb -lvb -aCF -bMb -aql -arx -sEm -iCj -auJ -avW -hLD -abI -nib -nsb -nyb -fRN -sEm -aEY -aGh -aGP -aGP -aGP -aGP -aGP -aGP -aGP -aBb -aPC -aQA -tAS -tAS -tAS -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -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 -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -hBr -hBr -hBr -hBr -ajb -ahN -gyP -eob -gbb -hzb -lMb -lMb -njQ -aqm -ary -asD -atF -fKJ -avX -awZ -axY -xJP -aAl -nHf -nHf -aDP -aEZ -aGi -aGY -jTV -aJG -aKR -aBb -aMS -aMS -jTV -aPC -tAS -tAS -tAS -tAS -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -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 -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -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 -hBr -hBr -hBr -ajc -ahM -bMb -eCb -geb -hQb -lCb -lNb -auN -auN -auN -auN -auN -auN -auN -axa -axZ -axa -aAm -aAm -aAm -aAm -aAm -aAm -aAm -jTV -jTV -jTV -uKa -uKa -uKa -uKa -aPE -tAS -tAS -tAS -acd -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -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 -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -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 -hBr -hBr -hBr -adN -ahM -bMb -axT -gHb -hWb -lCb -lOb -auN -aqn -aqn -aqn -aqn -aqn -avZ -wWr -aya -aah -aAm -ksh -ami -aAm -ksh -ami -aAm -aAm -aAm -aAm -aIr -qxb -qVb -jTV -aPC -tAS -tAS -tAS -acd -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -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 -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -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 -abP -abP -abP -acD -ahO -bMb -bMb -bMb -bMb -bMb -bMb -auN -aqn -aqn -aqn -aqn -aqn -awa -rKo -ayb -ure -aAm -ltt -aAm -aAm -ltt -aAm -aAm -akZ -ami -aAm -aIr -aIr -aIr -aIr -aPC -tAS -tAS -tAS -acd -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -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 -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -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 -abP -abP -abP -abP -iPV -ahP -rhO -wNX -aeg -amn -anm -anm -auN -aqn -aqn -aqn -aqn -aqn -awa -axc -ayd -adx -aAm -aaL -abR -riD -riD -ado -ltt -ala -riD -aAm -aLN -aMV -aNV -aOL -aPF -tAS -tAS -tAS -tAS -acd -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -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 -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -abP -abP -abP -abP -afP -agM -ahb -ykr -wNX -aeg -amn -ann -anm -auN -aqn -aqn -aqn -aqn -aqn -awa -rKo -sne -aec -aaj -abz -abS -aAm -sYU -aAm -aAm -aAm -aAm -aAm -aLO -aMW -aNW -aOM -aPG -aQC -tAS -tAS -tAS -tAS -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -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 -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -abP -abP -abP -aeP -afQ -agN -kSi -agN -agN -agN -nXk -ann -anm -auN -aqn -aqn -aqn -aqn -aqn -auN -sNn -nUp -aai -aAm -adk -adp -aAm -riD -aee -aAm -jTV -aJK -aKT -aLP -aCM -jIG -jTV -jTV -aQD -aRz -tAS -tAS -tAS -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -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 -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -abP -abP -abP -abP -asF -afR -agO -ahR -aje -ake -agN -ahQ -anp -aol -auN -auN -auN -auN -auN -auN -awb -rKo -aye -ure -aAm -aAm -aAm -aAm -lte -oGG -aAm -jTV -aJL -aIr -aLQ -aMX -aNY -aON -aPH -aQD -aRA -tAS -tAS -tAS -tAS -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -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 -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -abP -abP -abP -aea -aeR -afS -agN -ahS -ajf -akf -alh -amq -anq -lWh -biu -aom -aom -asE -atG -auL -awc -axd -ayf -oHP -azi -aBw -mvL -aAm -aAm -aAm -aAm -jTV -aJL -aIr -aLR -aMY -aNZ -aOO -aPI -aQE -rGw -aCN -tAS -tAS -tAS -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -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 -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -abP -abP -abP -rKD -acD -afT -agN -xjr -agN -akg -agN -agN -anr -acD -rhO -fMI -acD -asF -fDR -auM -ruS -rKo -ayg -ure -awd -aBx -rXJ -aDU -aFd -aGo -aGZ -ouI -jIG -aIr -aLS -aMZ -aIr -aIr -aIr -aQF -aIr -ivf -tAS -tAS -tAS -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -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 -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -abP -abP -abP -aeb -arA -afU -oqp -ahT -aom -akh -ali -ali -ans -acD -cap -aeh -acD -xTc -atH -auN -ewc -rKo -ayg -ure -kdd -auN -jTV -thO -aFf -aGq -aHb -oIq -shq -aIr -aLT -aNa -aIr -aOP -aPJ -aQG -drc -aCZ -jjh -jjh -jjh -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -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 -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -abP -abP -abP -abP -abP -abP -agQ -ahV -ajh -aki -alj -amr -xcW -acD -acD -acD -acD -uSl -uSl -uSl -uSl -axe -ayh -ure -aAK -aAK -aAK -aAK -aAK -aAK -aAK -aAK -aAK -aAK -aAK -aAK -aAr -aAK -aIB -jjh -jjh -jjh -jjh -jjh -jjh -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -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 -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -act -act -act -act -aeS -abP -agR -tGe -acD -akj -alk -ams -xcW -dFH -xFL -nxK -uSl -bxK -gWY -auO -uSl -rsV -ayg -ure -aAs -aBy -aCP -aDX -aFg -aGr -aHc -aIs -aJN -aKU -aLU -aNb -aOa -aAK -aPO -jjh -aRB -aSx -aSx -aSx -aSx -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -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 -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -bHb -akb -bNb -bQb -aeT -afV -agS -ahW -aji -aji -itr -amt -xcW -aop -xFL -aqp -uSl -nVe -mcA -auP -kUb -cZS -mvl -azm -aAK -aBz -aCQ -aCQ -aCQ -aGs -aGs -aIt -aGs -aKV -aLV -aLV -aOb -aAK -aPL -aQI -aRC -bTb -bWb -bZb -ccb -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aWo -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -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 -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -act -act -act -act -aeS -abP -agT -ahX -aji -akl -all -amu -xcW -ocG -gij -xKY -oPD -kgi -bvY -amp -mrX -lfb -ayi -ggA -aAK -aBA -aCR -aCR -aCR -aCR -aCR -aIu -aCR -aCR -aCR -aCR -aOc -aAK -aPM -jjh -aRB -aSx -aSx -aSx -aSx -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -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 -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aXb -abP -abP -abP -abP -abP -xEq -rhO -ahY -aji -dlb -alm -amv -xcW -aor -apm -knb -mrX -kDb -ajv -lcq -uSl -axi -ayg -ure -aAt -aBB -aCS -aCS -aCS -aCS -aCS -aIu -aCS -aCS -aCS -aCS -aCS -aAK -aPN -oAx -jjh -jjh -jjh -jjh -jjh -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -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 -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -acw -acw -acw -acw -aeU -abP -agV -bjI -aji -akn -aln -amw -xcW -dRs -gQI -oMq -uSl -mrX -brU -uSl -uSl -lgb -bHp -mMX -aAt -aBC -aCT -aCT -aCT -aCT -aHd -aIv -aJO -aJO -aJO -aJO -aJO -aAK -aPO -jjh -aRD -aSz -aSz -aSz -aSz -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -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 -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -bIb -anb -bOb -bRb -aeV -afW -agW -aia -aji -aji -aji -aji -xcW -iyb -kfb -sVL -kvb -auS -kWb -acF -acE -ycz -ayj -azp -aAu -aBD -aCU -aDY -aDY -aDY -aHe -aDY -aJP -aDY -aDY -aDY -aOd -aAK -aPP -aQJ -aRE -bUb -bXb -cab -cdb -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -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 -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -acw -acw -acw -acw -aeU -abP -cBU -ahX -acD -uWa -fps -amA -xcW -kib -gos -knb -kvb -ohy -kWb -kVb -acE -ycz -ayg -fnu -aAt -aBE -aCV -aCV -aCV -aCV -aCV -aIx -aJQ -aKW -aKW -aKW -aKW -aAK -aPQ -jjh -aRD -aSz -aSz -aSz -aSz -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -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 -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aXb -abP -abP -abP -abP -abP -xEq -cCb -ahX -acD -alp -amy -mLu -xcW -aPb -aRb -aSb -aTb -bkb -kOb -kWb -ldb -ycz -lib -ure -aAt -aBF -aCR -aCR -aCR -aCR -aCR -aIu -aCR -aCR -aCR -aCR -aCR -aAK -aPN -oAx -jjh -jjh -jjh -jjh -jjh -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -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 -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -abP -abP -abP -aae -rhO -rhO -rhO -ahX -acD -alq -amz -ubf -xcW -xcW -xcW -xcW -xcW -wtS -kPb -kXb -acE -axh -ayi -ghI -aAK -aBG -aCS -aCS -aCS -aCS -aCS -aIu -aCS -aCS -aCS -aCS -aOe -aAK -aPO -jjh -aRF -aSB -aSB -aSB -aSB -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -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 -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -abP -abP -abP -rhO -abd -agP -agP -cLb -iLB -alr -edM -sag -shQ -ikZ -kLY -kLY -kyb -atK -apo -kdb -oJb -abf -ayg -azq -aAK -aBH -aCW -aCW -aFh -aGt -aGt -aIy -aGt -aKX -aLW -aNc -aOf -aAK -aPR -aQK -aRG -bVb -bYb -cbb -ceb -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -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 -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -abP -abP -abP -ajd -abe -alN -vzy -vzy -vzy -vzy -vzy -kCb -kCb -kCb -kCb -kCb -kCb -oJb -eRQ -oJb -oJb -koX -ayg -ure -aAs -aBI -aCX -aDZ -aFi -aGu -aHf -aIz -aGu -aGu -aLX -aNd -aOg -aAK -aPQ -jjh -aRF -aSB -aSB -aSB -aSB -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -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 -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -abP -abP -abP -rhO -cjb -rhO -vzy -cOb -jiq -ctb -tCw -kCb -hgP -ghb -oMi -mbb -kCb -kHb -acy -sGs -leb -xKz -aym -jsk -aAK -aAK -aAK -aAK -aFj -aAK -aAK -aAK -aAK -aAK -aAK -aAK -aAK -aAK -aIB -jjh -jjh -jjh -jjh -jjh -jjh -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -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 -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -abP -abP -abP -aef -cjb -rhO -vzy -dkb -jYD -jhq -oOt -kCb -aek -eWb -jcb -iGb -kCb -kIb -kQb -hPt -leb -dRf -dkJ -knu -azs -aBJ -hPb -igb -ixb -iNb -xMx -jsb -aKY -aKY -aKY -aKY -aKY -aKY -aPS -aKY -aRH -cQo -jjh -jjh -jjh -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -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 -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -abP -abP -abP -aef -cjb -rhO -vzy -cTb -fxe -fxe -qju -kCb -fCb -gib -jxb -qnA -kCb -kJb -kRb -lab -leb -umI -ayg -ure -awd -auN -aFl -aGw -aHh -tRX -mKw -mbM -aJS -czN -cQo -tzg -aJS -aJS -aJS -aJS -aRI -cQo -jjh -jjh -jjh -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -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 -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -abP -abP -abP -rhO -ahX -rhO -vzy -rpn -pIk -hku -mwV -kCb -njg -gjb -kcb -xvt -kCb -kKb -kSb -lbb -leb -ycz -ayg -azm -auN -auN -aJS -aJS -jXp -aJS -ehT -mbM -aJS -tvV -cQo -lfM -aOj -aJS -aPT -cQo -aRJ -aSD -jjh -jjh -jjh -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -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 -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -afq -afq -aay -afq -afq -aaa -aaa -aaa -aaa -abP -abP -cib -agP -gEY -rhO -vzy -vzy -qnz -qnz -nDx -kCb -kCb -gkb -ePb -gkb -kCb -kLb -kTb -lcb -fMr -axh -ayi -azn -auN -aBM -hXI -aEb -rKL -aHn -aHn -jtb -aHn -aHn -cQo -cQo -iOh -aJS -aPU -cQo -aRK -aSE -jjh -jjh -jjh -aaa -aaa -aaa -aaa -sRV -bCb -bCb -bCb -sRV -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -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 -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -afq -aaf -aaz -aav -afq -aaa -aaa -aaa -aaa -abP -abP -cjb -poS -poS -axl -poS -poS -lAp -dZb -iHX -jcu -umT -glb -bGZ -ezb -gyV -oCf -pjV -jul -leb -lhb -ayg -ure -aAx -rKL -rKL -rKL -rKL -aHn -jGb -sNb -pqb -mav -mav -mav -mav -mav -mav -cQo -aRL -aEa -jjh -jjh -jjh -aaa -aaa -aaa -aaa -aUT -aVe -aVs -aVG -sRV -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -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 -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -afq -afq -aaf -aao -aav -afq -afq -aaa -aaa -aaa -abP -abP -cjb -poS -cub -cMb -hDV -poS -aei -dWb -etb -eRb -anM -ads -ewb -fEb -aga -agc -ago -agc -agZ -ycz -heb -ure -auN -rxK -rma -eEE -aFo -aHn -jHb -jub -prb -mav -mlX -foP -eGY -bSD -mav -aJS -aRI -cQo -jjh -jjh -jjh -aaa -aaa -aaa -sRV -aUS -aVf -tdb -tkb -tob -trb -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -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 -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -afq -afq -aan -aaf -aao -aav -aan -afq -afq -aaa -aaa -abP -abP -cjb -poS -cvb -cFb -deb -poS -dMb -dZb -eTb -eHb -avO -adu -afa -afc -agb -agi -ags -agI -aha -ycz -ayg -ure -hrb -hrb -hrb -hrb -hrb -hrb -jIb -oRb -psb -mav -oib -lxs -xxY -tLL -mav -aCZ -aRI -cQo -jjh -jjh -jjh -aaa -aaa -sRV -sRV -aUU -aVg -aVu -aVI -aVU -nWV -sRV -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -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 -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -afq -aaf -aao -aav -aaA -aaf -aao -aav -aaN -abM -abP -abP -abP -cjb -poS -cwb -cNb -dfb -poS -qGx -hwx -ewb -fEb -fEb -adB -dZb -afd -gyV -agj -agx -agK -leb -xSf -ayp -ure -hrb -jHp -hQd -xJi -oRF -hrb -aHn -aIG -aHn -mav -qsO -cAO -dfZ -rYN -mav -nAp -aRI -cQo -jjh -jjh -jjh -jjh -aaa -sRV -aUI -aUV -aVh -aVv -aVJ -aVV -ttb -bEb -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -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 -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -afq -aaf -aao -aav -aaC -aaf -aao -aav -aaN -adA -abP -abP -abP -agX -poS -cyb -cHb -cDb -arb -eab -dYb -exb -ixf -anL -adH -dZb -afB -lHO -agj -aGx -agY -fMr -ivT -gxX -dDc -rsu -nAb -nIb -xJG -oOb -xie -jJb -jvb -ptb -qqb -ojb -qQd -xCf -gig -mav -bPR -aRM -aKY -aSY -jjh -jjh -jjh -aaa -sRV -aUJ -aUW -aUW -aUW -aVK -aVW -tub -bEb -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -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 -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -afq -aaf -aao -aav -aaD -aaf -aao -aav -afq -afq -afq -afq -acC -ckb -poS -akp -cQb -dgb -poS -sLb -agB -pPa -xTh -fvb -adL -dZb -afD -lHO -afH -rPz -agU -leb -hcb -hfb -rvY -ijb -hAb -aJv -eiF -izb -gep -oAC -rjk -pub -qqb -xVt -pOL -rrI -tEs -mav -pkb -pkb -pkb -aSZ -aTA -jjh -aUp -aUp -sRV -sOb -sTb -aVi -teb -kku -aVX -tvb -bEb -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -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 -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -afq -aaf -aap -aav -aaD -aaf -aap -aaI -afq -aaQ -aaU -afq -uXe -ckb -poS -czb -alD -dhb -poS -tCO -hlb -pPa -ezb -fKb -adL -dZb -afK -gyV -agH -agx -oLK -leb -oox -hgb -flB -nPb -hBb -qcJ -xJG -lwb -xie -jMb -jXb -pkb -mav -qqb -qqb -qEb -mav -mav -rAb -rPb -jcO -aTa -aJS -jjh -aUq -aUA -sRV -sPb -sUb -sZb -tfb -tlb -tpb -twb -bEb -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -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 -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -afq -aag -aaq -aag -aaE -aag -aaq -aaJ -aaO -aaR -aaV -aaY -aba -abc -poS -cAb -cRb -dib -poS -dNb -ebb -eAb -eUb -mvE -adL -dZb -afK -gyV -siI -aGx -qrq -ahc -vHB -ayB -nWl -hrb -hCb -lob -nQb -lxb -hrb -jNb -jyb -pWb -pAb -pWb -qrb -qFb -bta -rsb -jfb -rQb -scb -sfb -aTB -aUb -aUr -aUB -aUF -sQb -sVb -tab -aUW -aVM -aUE -tsb -sRV -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -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 -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -afq -aak -aas -aaw -aao -aaw -aap -aaK -aaP -aaS -aaW -aaZ -abb -ckb -poS -agg -ayA -dcb -dDb -acf -acf -aby -abH -acf -adO -dZb -afY -lHO -anH -agx -jCU -leb -hdb -hYM -iUb -hsb -hUb -eIP -ilb -bpG -hrb -jPb -jzb -pmb -pHb -pZb -qyb -qYb -rzb -rMb -sbb -ssb -sdb -sgb -aTC -aUc -aUs -aUC -aUG -sRb -sWb -tbb -tgb -aVN -aUE -tsb -sRV -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -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 -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -afq -aam -aat -aax -aaF -aax -aat -aaM -afq -aaT -aaX -afq -afX -ckb -poS -poS -cSb -poS -dDb -abl -abr -abA -abK -acf -adQ -afb -afZ -lHO -ofb -gzb -ovb -leb -dMe -hnN -mpq -htb -ljb -hVb -imb -lyb -aBP -bOZ -lAb -xxU -aSK -aSK -aSK -aSK -aSK -aSK -aSK -aSK -aSK -aTd -aTK -imF -aUt -aUD -aUH -sSb -sXb -tcb -thb -tmb -tqb -txb -bFb -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -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 -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -afq -aaf -aap -aav -aaD -aaf -aap -aav -afq -afq -afq -afq -acH -adt -uXe -uXe -uXe -kaS -acf -abm -abs -abB -abQ -acO -aed -afe -agd -uKs -orb -orb -owb -gWb -ivT -hhb -iVb -hub -hFb -nJb -nRb -obb -iPb -jeb -lBb -qtb -qHb -qab -qzb -qZb -rBb -rNb -sib -stb -aSK -aTe -aTE -bDK -aUp -aUp -sRV -aUP -sYb -aVn -tib -oye -aWa -tvb -bFb -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -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 -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -afq -aaf -aao -aav -aaC -aaf -aao -aav -aaN -adA -mpy -mpy -uXe -adw -sde -sde -uXe -scd -acf -abn -abt -abC -abT -acU -aej -aff -agf -fWb -mzb -mzb -mzb -vIn -ssg -bEQ -rcx -hvb -hGb -nKb -nSb -ocb -iQb -pab -dxm -qtb -qHb -qbb -qtb -rab -rCb -rOb -sjb -sab -aSK -aTe -aFM -bDK -bDK -aaa -sRV -aUQ -aUW -aUW -aUW -aVP -aVW -tub -bFb -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -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 -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -afq -aaf -aao -aav -aaA -aaf -aao -aav -aaN -abM -mpy -mpy -acJ -adw -sde -uXe -uXe -sde -acf -acf -abu -abD -abU -adh -aem -afg -agh -hEU -ael -oxb -oxb -pzZ -axw -iTC -rvY -htb -lkb -nLb -nLb -odb -mUm -jRb -dxm -qtb -qHb -qcb -qzb -rbb -rDb -rRb -skb -sub -aSK -aTe -aTF -bDK -bDK -aaa -sRV -aUR -aVa -aVo -aVC -aVP -aVV -tyb -bFb -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -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 -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -afq -afq -aau -aaf -aao -aav -aau -afq -afq -aaa -mpy -mpy -acK -adw -uXe -uXe -uXe -uXe -cqb -acf -abv -abG -ace -acf -aen -afh -aqL -dXM -tgg -gDb -gDb -gWb -hdb -jAM -equ -hwb -hIb -hZb -aFb -iHb -iRb -jWb -mTb -qtb -qHb -qdb -qAb -rcb -aRX -rSb -slb -svb -aSK -aTe -mjt -bDK -bDK -aaa -sRV -aUS -aVb -aVp -aVD -aVQ -aWb -nWV -sRV -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -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 -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -afq -afq -aaf -aao -aav -afq -afq -aaa -aaa -mpy -mpy -xTT -adv -sde -sde -sde -dEb -dQb -acf -mJY -uUK -acf -acf -aeo -afi -aqM -nCb -nCb -gEb -gEb -nCb -axy -hib -oAp -haT -hJb -dob -irb -jjb -aCf -dlf -srR -aSK -qtb -qtb -aSK -rdb -bmb -bmb -smb -swb -aSK -aTe -aTH -bDK -bDK -aaa -aaa -aUS -aUS -aVq -tjb -tnb -tob -tzb -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -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 -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -afq -aaf -aaG -aav -afq -aaa -aaa -aaa -mpy -mpy -acM -adv -kZb -kZb -bdL -rAu -rAu -rAu -rAu -rAu -acz -adj -aep -afh -fOb -nBb -ata -aua -avl -gXb -vHB -ayy -iXb -acG -hKb -ibb -isb -jkb -aGE -jQb -oeb -pvb -pIb -qeb -qGb -reb -rEb -rTb -snb -sxb -aSK -aTe -uhl -bDK -bDK -aaa -aaa -aaB -aVc -aVe -aVF -aVS -sRV -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -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 -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -afq -afq -aaH -afq -afq -aaa -aaa -mpy -mpy -mpy -acN -adw -kZb -cVb -xuW -rAu -cZb -rAu -ejb -eIb -acz -adl -aeu -afk -arT -fYb -atb -xMy -gRb -gXb -ivT -hnN -gAU -hyb -llb -lpb -itb -iKb -cUb -jKb -kwb -pwb -pJb -qfb -qIb -rfb -rFb -rUb -sob -syb -aSK -aTe -aTI -bDK -bDK -bDK -aaa -aaa -sRV -bDb -bDb -bDb -sRV -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -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 -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -mpy -mpy -mpy -chb -adw -kZb -cWb -xuW -rAu -dqb -qtQ -ekb -doR -acI -adm -aew -afl -aqP -nBb -iMW -twz -oZb -gXb -ivT -ayw -iZb -aAJ -lmb -lqb -ltb -iLb -aGE -jTb -oQb -aSK -pLb -qgb -qJb -rgb -rGb -rVb -spb -kkN -seb -aTe -uhl -bDK -bDK -bDK -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -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 -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -mpy -mpy -acP -uXe -adw -kZb -cXb -hzT -rAu -rAu -rAu -udY -aOt -acz -adn -aeB -afm -qLr -nCb -omb -twz -avo -nCb -awM -jAM -jab -aCf -lnb -abJ -abX -oPb -aCf -mmP -oTb -aSK -pMb -qhb -qKb -rhb -rHb -rWb -rwb -szb -aSK -aTe -uhl -bDK -bDK -bDK -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -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 -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -mpy -mpy -acQ -uXe -adv -kZb -alo -xuW -cEb -fmb -rAu -rAu -rAu -rAu -aqQ -aeC -afo -aqQ -nCb -vnC -auc -kFT -nCb -jhb -ayz -jhb -abk -abk -abk -abk -abk -abk -jUb -oUb -bmb -pOb -pYb -qLb -rib -rIb -rXb -rib -sAb -aSK -aTe -aTK -bDK -bDK -bDK -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -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 -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -mpy -mpy -acS -uXe -adw -kZb -afn -agn -oty -fxb -dRb -emb -evb -kZb -sWP -aeF -afp -aqR -nCb -cbj -aub -uuS -nCb -axB -jAM -azT -abk -ahf -ahq -ahU -aii -abk -rap -mTb -bmb -pQb -pYb -qLb -rib -rIb -rXb -rib -sBb -aSK -aTe -aTL -bDK -bDK -bDK -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -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 -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -mpy -mpy -acT -uXe -adw -kZb -kYM -cIb -wUg -gZb -uFk -enb -eJb -fkb -tmc -aeW -afu -aqS -nCb -nCb -nCb -avq -nCb -ivT -hib -tiz -agl -ahg -ahr -ahZ -aij -abk -jWb -oXb -bmb -pRb -qib -qMb -rkb -rJb -rYb -rib -sAb -aSK -aTe -aTM -bDK -bDK -bDK -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -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 -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -mpy -mpy -mpy -acR -adw -kZb -mww -cxb -cGd -dIb -dSb -epb -eKb -kZb -bhy -aeX -afv -xYM -xYM -atf -xYM -xYM -xYM -bWA -ygK -azN -agl -ahh -ahs -aib -aik -abk -jWb -pcb -aHi -aHi -aHi -aHi -aHi -aHQ -aHQ -aHQ -aHQ -aHQ -aTe -aTN -bDK -bDK -bDK -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -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 -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -mpy -mpy -mpy -cob -bGb -kZb -jCM -jCM -dtb -dJb -dUb -eqb -eLb -jCM -fVb -aeY -afx -aqT -mmb -atg -fpu -avs -xYM -aKG -hnN -tiz -agl -ahi -aht -aic -ail -abk -jYb -pdb -jZb -pKb -qjb -qCb -rtb -rKb -rxb -aOz -ryb -aHQ -aTe -aTO -bDK -bDK -bDK -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -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 -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -mpy -mpy -mpy -cqb -adv -pZE -jCM -dab -dub -dKb -jxa -erb -eMb -jCM -eXk -aeZ -afy -xYM -nDd -eoj -gFb -bLJ -xYM -jYZ -ugg -jlb -agp -ahj -ahu -aid -aim -abk -jWb -peb -pBb -pSb -qBb -qNb -qRb -rjb -ryb -sqb -auY -aHQ -aTe -aTP -bDK -bDK -bDK -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -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 -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -mpy -mpy -mpy -acV -adw -pZE -jCM -agq -abq -dFb -dTb -oxa -jCM -jCM -uiY -scr -uiY -uiY -ipc -eoj -gFb -xzN -xYM -axD -ayC -job -abk -abk -abk -aie -abk -abk -jZb -pfb -aHi -pNb -qmb -qOb -qSb -rLb -rZb -srb -ryb -aHQ -aTe -shb -bDK -bDK -bDK -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -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 -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -abN -abN -abN -mEV -ady -acL -jCM -jCM -jCM -abi -abo -abw -jCM -amP -vZI -pEr -pWc -uiY -ase -dSR -mlb -avu -xYM -ivT -hnN -cgu -ahd -ahk -ahv -aif -ain -ahd -kab -pgb -pCb -qkb -qnb -qPb -rub -aHQ -aHQ -aHQ -aHQ -aHQ -aTe -wEw -xPU -xPU -xPU -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -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 -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -abN -abN -acg -acW -adz -aer -afr -agr -jCM -jCM -jCM -jCM -jCM -alO -lEb -eaF -apP -uiY -xYM -xYM -xYM -xYM -xYM -kGX -hnN -tiz -ahe -ahl -ahw -aig -aio -ahd -kbb -phb -pPb -qlb -aLo -qQb -qUb -rlb -aHi -aRd -aSd -aSd -aTg -aTQ -aUd -xPU -xPU -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -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 -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -abN -abN -ach -mEV -tVi -aes -afs -pZE -lBd -abj -abj -abx -uiY -wlG -vEa -uvj -guP -uiY -sHb -vZK -hgt -vii -pWW -pmz -hnN -tiz -ahe -ahm -ahz -ahz -aip -ahd -hvY -pib -pDb -fBb -iSb -qnb -rvb -rmb -aHi -aRe -aSe -tgu -aTh -dJY -aUe -xPU -xPU -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -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 -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -abM -abN -aci -mEV -abL -abL -aft -agt -lBd -sde -abp -sde -uiY -bkG -vEa -cmY -apR -fOu -qfa -yii -haV -vii -pWW -vHB -ayB -azN -ahe -ahn -ahn -ahn -aiq -ahd -kpb -pjb -pEb -iqb -jAb -aLo -ycp -rnb -aHi -uHz -aSf -dIA -bUZ -wEw -apk -xPU -abM -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -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 -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -abM -abN -adq -mEV -abL -abL -abL -agu -sww -xBk -xBk -xBk -uiY -uiY -nLo -qGE -kTl -uiY -ovZ -fQf -qKx -vii -pWW -lsT -hnN -uZi -ahe -aho -ahH -ahn -air -ahd -eGb -pbb -pFb -pbb -khb -aLo -ycp -rob -aHi -aRf -tCu -nPT -xaC -wEw -bvI -jbk -abM -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -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 -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -abM -abN -aci -mEV -abL -abL -abL -agv -aer -aer -ajG -akK -lBd -uiY -uiY -vfK -uiY -uiY -mrW -atm -aug -vii -pWW -bBm -ruz -dJp -ahd -ahp -ahJ -aih -ahn -ahd -aHi -pnb -pGb -xMP -gcY -qDb -qWb -rpb -aHi -aNy -aDB -aDB -aDB -wEw -bvI -jbk -abM -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -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 -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -abN -abN -aci -abN -mpy -mpy -mpy -mpy -ahx -aiG -ajH -akL -lBd -nZm -gyj -pZE -fdQ -pWW -pWW -pWW -pWW -pWW -pWW -jqn -ayF -jqn -ahd -ahd -ahd -ahd -ais -ahd -aHi -aHi -aHi -aHi -ivh -aHi -aHi -aHi -aHi -aNy -bDK -bDK -bDK -xPU -aUf -xPU -xPU -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -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 -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -abN -abN -acj -abN -abN -abN -abN -mpy -mpy -mpy -ajI -akM -sww -xBk -urd -pZE -sww -xBk -urd -atn -auj -avx -awG -axF -ayG -azR -aAU -aCq -aDA -aEC -aFL -aFL -aHR -aJi -pxb -aFL -aOC -aOC -aOC -sJr -aOC -sOo -jbk -jbk -ddP -xPU -aUg -xPU -xPU -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -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 -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -abN -abV -ack -fTU -pRm -rEz -abN -abN -mpy -mpy -mpy -agv -alR -alR -alR -alR -alR -sFb -ask -ato -auk -avy -awH -uoC -ayH -azS -aAV -aCr -auk -aED -aFM -aFM -aHS -aJj -pyb -pUb -aMy -aNA -bDK -bDK -bDK -xPU -xPU -rUh -pIW -mer -vFF -aUu -xPU -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -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 -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -abN -abW -jhS -uVf -eJy -vVe -cHm -abN -mpy -mpy -mpy -mpy -mpy -mpy -bBt -xKq -acL -xtq -sCu -usV -auk -vtY -awI -awJ -awJ -awJ -aAW -vtY -auk -aTK -vBV -aTK -bDK -bDK -bDK -bDK -bDK -bDK -bDK -bDK -bDK -xPU -lom -diz -iej -opg -aUh -aUv -xPU -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -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 -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -abN -lxE -acl -acX -trC -eGl -vVe -abN -mpy -mpy -mpy -mpy -mpy -mpy -mpy -mpy -mpy -acL -asl -asl -acL -snG -lkp -puw -ayJ -ayJ -mwJ -snG -aTK -xxB -aLu -ldP -bDK -bDK -bDK -bDK -bDK -aNB -aNB -bDK -bDK -xPU -iBT -tIF -xSd -aTR -aUi -exc -xPU -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -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 -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -abN -abN -mGj -acm -acY -adC -abN -abN -abN -acd -mpy -mpy -mpy -mpy -mpy -mpy -mpy -mpy -uXe -sde -sde -abL -aGN -aGN -acB -ayK -jrH -aAX -aGN -lLD -aLu -aLu -fnR -bDK -bDK -bDK -bDK -bDK -aNB -aNB -bDK -acd -xPU -xPU -xPU -aTi -aTS -aUj -kPD -xPU -xPU -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -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 -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -abN -fuV -nZR -bqv -acZ -adD -abN -aet -abN -adA -abM -mpy -mpy -mpy -mpy -mpy -dVw -dVw -aBc -aBc -aBc -aBc -aGN -awL -wRs -ayL -azU -aAY -aGN -aHT -aHT -aHT -aHT -eRU -eRU -bDK -bDK -bDK -aNB -aNB -abM -adA -xPU -aPq -xPU -aTj -aTT -dqU -lJj -jMx -xPU -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -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 -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -abN -mHr -izd -nys -ada -adE -bbb -acv -aet -abN -abM -acd -acd -acd -acd -dVw -dVw -dVw -aBc -aBc -aBc -aBc -aGN -xhX -fOr -cOH -bYj -aAZ -aGN -aHT -aHT -aHT -aHT -eRU -eRU -eRU -acd -acd -acd -acd -aLj -xPU -aPq -acx -byb -aTk -aTU -tYV -dsd -spj -xPU -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -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 -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -abN -sCx -vci -acn -adb -adF -aet -afw -agw -aet -dUZ -aaa -acd -acd -acd -acd -dVw -dVw -htK -hFu -vjY -hOb -aBc -aHT -aHT -aHT -aHT -aBa -aHT -uZO -xzj -aQr -aRm -eRU -eRU -acd -acd -acd -acd -aaa -gML -aPq -aRg -aSh -bzb -aTl -aTV -aUk -iej -hmQ -xPU -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -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 -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -abN -vBa -vci -hUE -adc -adG -bdb -afA -osX -ahy -bhb -aaa -aaa -aaa -acd -acd -dVw -dVw -veT -svH -svH -swz -aBc -iBb -nvX -kmE -onM -uLQ -jPY -onM -ooN -fll -vnz -eRU -eRU -acd -acd -aaa -aaa -aaa -btb -aQk -pAg -aRh -bAb -aTm -aTW -ila -iej -jbR -xPU -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -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 -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -abN -hml -vci -bqv -kfG -acu -aet -aet -aet -aet -abN -aaa -aaa -aaa -acd -acd -dVw -dVw -aEG -aEG -aEG -dJv -aBc -bMB -lst -cAh -jAl -mwA -jAl -jAl -bBv -aQs -aQs -eRU -eRU -acd -acd -aaa -aaa -aaa -xPU -aPq -aPq -aPq -wEw -aTn -rYd -dqU -iej -bdz -xPU -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -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 -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -fRi -abN -abN -acp -kfG -adI -aey -afz -agy -ahA -aiI -ajJ -aaa -aaa -acd -acd -dVw -dVw -ryt -svH -svH -njm -ksK -nZZ -mJJ -cYB -qTX -pZj -jnd -vUD -fZn -aQq -aQq -eRU -eRU -acd -acd -aaa -aaa -aOD -aPs -aQm -aRj -aSk -aSS -aTo -rYd -aUm -xPU -xPU -obr -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aWn -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -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 -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -rCc -hqS -abZ -acq -ade -adJ -dVp -kPp -jDX -ahB -abN -aaa -aaa -acd -acd -acd -dVw -dVw -aEG -aEG -aEG -jQY -aBc -xqk -rFK -aMB -aNE -vlw -aMB -ahL -kyt -aQt -aQt -eRU -eRU -acd -acd -acd -aaa -aaa -xPU -aQn -aRk -aSl -qDM -qDM -aTY -aUn -aUy -igK -cYe -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -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 -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -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 -fRi -abN -aca -aca -abN -aca -aca -abN -aca -aca -abN -aaa -aaa -acd -acd -acd -dVw -dVw -mrr -svH -svH -nWP -aBc -cZd -vkW -uCe -uCe -lGw -uCe -uCe -fIn -wGe -vcy -eRU -eRU -acd -acd -acd -aaa -aaa -xPU -aQo -aQo -xPU -aQo -aQo -xPU -aQo -aQo -xPU -obr -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -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 -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -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 -acd -acd -dVw -dVw -qKQ -iAS -bCX -uMP -aBc -aJl -rFK -aJm -wjP -fLg -qbH -hrE -vlw -aQu -aQu -eRU -eRU -acd -acd -acd -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -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 -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -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 -acd -acd -dVw -dVw -dVw -dVw -dVw -dVw -dVw -eRU -eRU -eRU -eRU -eRU -eRU -eRU -eRU -eRU -eRU -eRU -eRU -acd -acd -acd -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -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 -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -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 -acd -acd -dVw -dVw -dVw -dVw -dVw -dVw -eRU -eRU -eRU -eRU -eRU -eRU -eRU -eRU -eRU -eRU -eRU -acd -acd -acd -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -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 -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -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 -acd -acd -acd -acd -acd -acd -acd -aaa -aaa -aaa -aaa -aaa -acd -acd -acd -acd -acd -acd -acd -acd -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -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 -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -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 -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -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 -acd -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -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 -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -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 -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -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 -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -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 -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -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 -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -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 -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -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 -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -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 -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -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 -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -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 -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -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 -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -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 -"} -(160,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 -"} -(161,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 -"} -(162,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 -"} -(163,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 -"} -(164,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 -"} -(165,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 -"} -(166,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 -"} -(167,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 -"} -(168,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 -"} -(169,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 -"} -(170,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 -"} -(171,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 -"} -(172,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 -"} -(173,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 -"} -(174,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 -"} -(175,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 -"} -(176,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 -"} -(177,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 -"} -(178,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 -"} -(179,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 -"} -(180,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 -"} -(181,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 -"} -(182,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 -"} -(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 -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -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 -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -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 -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -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 -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -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 -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -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 -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -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 -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -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 -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -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 -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -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 -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -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 -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -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 -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -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 -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -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 -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -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 -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -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 -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -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 -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -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 -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -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/torch/torch6_bridge.dmm b/maps/torch/torch6_bridge.dmm deleted file mode 100644 index 0c4c9dafc4866..0000000000000 --- a/maps/torch/torch6_bridge.dmm +++ /dev/null @@ -1,57636 +0,0 @@ -//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE -"aa" = ( -/turf/space, -/area/space) -"ab" = ( -/obj/effect/wallframe_spawn/reinforced/polarized{ - id = "meeting_windows" - }, -/obj/structure/cable/green, -/turf/simulated/floor/plating, -/area/bridge/meeting_room) -"ac" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/turf/simulated/floor/tiled/white, -/area/aquila/medical) -"ad" = ( -/turf/simulated/floor/reinforced/airless, -/area/space) -"ae" = ( -/obj/structure/lattice, -/turf/space, -/area/space) -"af" = ( -/turf/simulated/wall/r_wall/hull, -/area/maintenance/bridge/forestarboard) -"ag" = ( -/turf/simulated/wall/prepainted, -/area/maintenance/bridge/aftstarboard) -"ah" = ( -/obj/structure/cable/yellow{ - d2 = 2; - icon_state = "0-2" - }, -/obj/machinery/power/solar{ - id = "auxsolarsbridge"; - name = "Bridge Auxiliary Solar Array" - }, -/obj/effect/floor_decal/solarpanel, -/turf/simulated/floor/reinforced/airless, -/area/solar/bridge) -"ai" = ( -/obj/item/device/radio/intercom{ - pixel_y = 23 - }, -/obj/structure/disposalpipe/trunk, -/obj/machinery/disposal, -/turf/simulated/floor/wood/walnut, -/area/crew_quarters/heads/office/cl) -"aj" = ( -/turf/simulated/floor/plating, -/area/maintenance/bridge/forestarboard) -"ak" = ( -/obj/machinery/power/apc{ - dir = 1; - name = "north bump"; - pixel_y = 24 - }, -/obj/structure/cable/green{ - d2 = 2; - icon_state = "0-2" - }, -/obj/machinery/papershredder, -/obj/machinery/light{ - dir = 1 - }, -/turf/simulated/floor/wood/walnut, -/area/crew_quarters/heads/office/cl) -"al" = ( -/turf/simulated/wall/prepainted, -/area/maintenance/bridge/forestarboard) -"am" = ( -/obj/random/closet, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/bridge/forestarboard) -"an" = ( -/obj/machinery/alarm{ - pixel_y = 24 - }, -/turf/simulated/floor/plating, -/area/maintenance/bridge/forestarboard) -"ao" = ( -/obj/random/maintenance/solgov, -/turf/simulated/floor/plating, -/area/maintenance/bridge/forestarboard) -"ap" = ( -/obj/structure/cable/green{ - d2 = 2; - icon_state = "0-2" - }, -/obj/machinery/power/apc{ - dir = 1; - name = "north bump"; - pixel_y = 24 - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/bridge/forestarboard) -"aq" = ( -/obj/structure/ladder, -/obj/effect/floor_decal/industrial/hatch/yellow, -/obj/structure/catwalk, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/bridge/forestarboard) -"ar" = ( -/obj/structure/dispenser/oxygen, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/bridge/forestarboard) -"as" = ( -/obj/structure/closet, -/obj/random/tech_supply, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/bridge/forestarboard) -"at" = ( -/obj/machinery/space_heater, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/bridge/forestarboard) -"au" = ( -/obj/effect/floor_decal/industrial/hatch/yellow, -/obj/structure/cable/yellow{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/turf/simulated/floor/airless, -/area/solar/bridge) -"av" = ( -/obj/effect/floor_decal/industrial/hatch/yellow, -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/cable/yellow{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/turf/simulated/floor/airless, -/area/solar/bridge) -"aw" = ( -/obj/effect/floor_decal/industrial/hatch/yellow, -/obj/structure/cable/yellow{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/turf/simulated/floor/airless, -/area/solar/bridge) -"ax" = ( -/obj/structure/cable/green{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/effect/catwalk_plated, -/obj/structure/disposalpipe/segment{ - dir = 4; - icon_state = "pipe-c" - }, -/turf/simulated/floor/plating, -/area/hallway/primary/bridge/fore) -"ay" = ( -/obj/structure/catwalk, -/obj/structure/grille/broken, -/turf/simulated/floor/plating, -/area/maintenance/bridge/forestarboard) -"az" = ( -/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply, -/obj/structure/cable/green{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 5 - }, -/obj/effect/catwalk_plated, -/obj/structure/disposalpipe/segment{ - dir = 2; - icon_state = "pipe-c" - }, -/turf/simulated/floor/plating, -/area/hallway/primary/bridge/aft) -"aA" = ( -/obj/structure/catwalk, -/obj/machinery/door/firedoor, -/turf/simulated/floor/plating, -/area/maintenance/bridge/forestarboard) -"aB" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/carpet, -/area/crew_quarters/heads/office/xo) -"aC" = ( -/obj/machinery/door/firedoor, -/obj/structure/cable/green{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/door/airlock/research{ - id_tag = "liaisondoor2"; - name = "Corporate Liaison"; - secured_wires = 1 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/simulated/floor/wood/walnut, -/area/crew_quarters/heads/office/cl) -"aD" = ( -/obj/structure/catwalk, -/obj/structure/cable/green{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, -/turf/simulated/floor/plating, -/area/maintenance/bridge/forestarboard) -"aE" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/bridge/forestarboard) -"aF" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/turf/simulated/floor/plating, -/area/maintenance/bridge/forestarboard) -"aG" = ( -/obj/random_multi/single_item/poppy, -/turf/simulated/floor/plating, -/area/maintenance/bridge/aftstarboard) -"aH" = ( -/obj/effect/floor_decal/industrial/hatch/yellow, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/airless, -/area/solar/bridge) -"aI" = ( -/obj/structure/cable/yellow, -/obj/machinery/power/solar{ - id = "auxsolarsbridge"; - name = "Bridge Auxiliary Solar Array" - }, -/obj/effect/floor_decal/solarpanel, -/turf/simulated/floor/reinforced/airless, -/area/solar/bridge) -"aJ" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/structure/disposalpipe/segment{ - dir = 8; - icon_state = "pipe-c" - }, -/turf/simulated/floor/wood/walnut, -/area/crew_quarters/heads/office/cl) -"aK" = ( -/turf/simulated/wall/prepainted, -/area/crew_quarters/heads/cobed) -"aL" = ( -/obj/structure/table/rack, -/obj/random/tech_supply, -/obj/random/maintenance/solgov, -/obj/effect/floor_decal/industrial/outline/grey, -/obj/structure/railing/mapped{ - dir = 1; - icon_state = "railing0-1" - }, -/turf/simulated/floor/plating, -/area/maintenance/bridge/forestarboard) -"aM" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/tiled/dark, -/area/aquila/storage) -"aN" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/effect/catwalk_plated, -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/plating, -/area/hallway/primary/bridge/fore) -"aO" = ( -/turf/simulated/wall/prepainted, -/area/crew_quarters/heads/office/xo) -"aP" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/plating, -/area/maintenance/bridge/forestarboard) -"aQ" = ( -/obj/machinery/portable_atmospherics/powered/scrubber, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/bridge/aftstarboard) -"aR" = ( -/obj/structure/reagent_dispensers/watertank, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/bridge/aftstarboard) -"aS" = ( -/obj/structure/reagent_dispensers/fueltank, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/bridge/aftstarboard) -"aT" = ( -/obj/random/storage, -/obj/structure/railing/mapped, -/turf/simulated/floor/plating, -/area/maintenance/bridge/aftstarboard) -"aU" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 4 - }, -/obj/effect/catwalk_plated, -/turf/simulated/floor/plating, -/area/hallway/primary/bridge/aft) -"aV" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 4 - }, -/turf/simulated/floor/tiled/monotile, -/area/hallway/primary/bridge/aft) -"aW" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden, -/obj/structure/cable/green{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/catwalk_plated, -/turf/simulated/floor/plating, -/area/hallway/primary/bridge/aft) -"aX" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/effect/floor_decal/corner/blue{ - dir = 10 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/bridge/aft) -"aY" = ( -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/uniform_vendor, -/obj/machinery/recharger/wallcharger{ - pixel_y = 24 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/bridge/storage) -"aZ" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark, -/area/bridge) -"ba" = ( -/obj/structure/sign/warning/high_voltage{ - dir = 4 - }, -/turf/simulated/wall/prepainted, -/area/crew_quarters/heads/office/xo) -"bb" = ( -/obj/structure/closet/emcloset, -/obj/effect/floor_decal/corner/blue/mono, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled/monotile, -/area/hallway/primary/bridge/fore) -"bc" = ( -/obj/machinery/newscaster{ - pixel_y = 32 - }, -/obj/structure/sign/warning/smoking{ - pixel_x = 26 - }, -/obj/machinery/photocopier, -/turf/simulated/floor/wood/walnut, -/area/crew_quarters/heads/office/cl) -"bd" = ( -/obj/structure/disposalpipe/segment, -/obj/structure/bed/chair/comfy/blue{ - dir = 4 - }, -/turf/simulated/floor/wood/walnut, -/area/crew_quarters/heads/office/xo) -"be" = ( -/obj/machinery/computer/modular/preset/cardslot/command, -/obj/effect/floor_decal/corner/blue/mono, -/turf/simulated/floor/tiled/dark/monotile, -/area/crew_quarters/heads/office/xo) -"bf" = ( -/obj/structure/closet/secure_closet/bridgeofficer, -/obj/effect/floor_decal/industrial/outline/grey, -/obj/machinery/button/blast_door{ - id_tag = "bridge sensors"; - name = "Bridge Sensor Shroud Control"; - pixel_x = -28; - req_access = list("ACCESS_BRIDGE") - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/bridge/storage) -"bg" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/bridge/forestarboard) -"bh" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/alarm{ - dir = 1; - pixel_y = -22 - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/bridge/forestarboard) -"bi" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/door/firedoor, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/door/airlock/maintenance, -/turf/simulated/floor/tiled/steel_ridged, -/area/maintenance/bridge/forestarboard) -"bj" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/floor_decal/corner/research{ - dir = 5 - }, -/turf/simulated/floor/tiled, -/area/crew_quarters/heads/office/rd) -"bk" = ( -/obj/effect/floor_decal/corner/white/full, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/suit_storage_unit/command, -/turf/simulated/floor/tiled/dark, -/area/aux_eva) -"bm" = ( -/obj/random/closet, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/bridge/aftstarboard) -"bo" = ( -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 10 - }, -/turf/simulated/floor/plating, -/area/maintenance/bridge/forestarboard) -"bq" = ( -/turf/simulated/wall/prepainted, -/area/crew_quarters/heads/office/co) -"bs" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/light{ - dir = 4; - icon_state = "tube1" - }, -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/valve/shutoff/supply, -/obj/effect/floor_decal/industrial/shutoff, -/obj/machinery/atmospherics/valve/shutoff/scrubbers, -/obj/machinery/rotating_alarm/security_alarm{ - dir = 8 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/bridge/fore) -"bt" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden{ - dir = 4 - }, -/obj/machinery/meter, -/obj/machinery/light/small{ - dir = 4; - icon_state = "bulb1" - }, -/turf/simulated/floor/plating, -/area/maintenance/bridge/forestarboard) -"bu" = ( -/obj/machinery/door/firedoor, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/door/airlock/research{ - id_tag = "liaisondoor3"; - name = "Corporate Liaison"; - secured_wires = 1 - }, -/turf/simulated/floor/wood/walnut, -/area/crew_quarters/heads/office/cl) -"bv" = ( -/obj/structure/cable/green{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/effect/catwalk_plated, -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/plating, -/area/hallway/primary/bridge/fore) -"bw" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/effect/catwalk_plated, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/plating, -/area/hallway/primary/bridge/fore) -"bx" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/bridge/aftstarboard) -"by" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/wood/walnut, -/area/crew_quarters/heads/office/cl) -"bB" = ( -/obj/structure/cable/green{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/bridge/aftstarboard) -"bC" = ( -/turf/simulated/wall/prepainted, -/area/maintenance/substation/bridge) -"bD" = ( -/turf/simulated/wall/r_wall/hull, -/area/maintenance/substation/bridge) -"bE" = ( -/obj/effect/floor_decal/industrial/hatch/yellow, -/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/simulated/floor/airless, -/area/solar/bridge) -"bF" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 4 - }, -/obj/effect/catwalk_plated, -/obj/machinery/light{ - dir = 4; - icon_state = "tube1" - }, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/plating, -/area/hallway/primary/bridge/fore) -"bG" = ( -/obj/machinery/light{ - dir = 8; - icon_state = "tube1" - }, -/obj/structure/flora/pottedplant/large, -/turf/simulated/floor/wood/walnut, -/area/crew_quarters/heads/office/cl) -"bH" = ( -/obj/structure/hygiene/toilet{ - dir = 4 - }, -/turf/simulated/floor/tiled/freezer, -/area/crew_quarters/heads/cobed) -"bI" = ( -/obj/machinery/atmospherics/portables_connector{ - dir = 1 - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/plating, -/area/maintenance/bridge/forestarboard) -"bJ" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/effect/floor_decal/industrial/warning/fulltile, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/tiled, -/area/hallway/primary/bridge/fore) -"bK" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/tiled, -/area/hallway/primary/bridge/fore) -"bL" = ( -/obj/machinery/door/airlock/research{ - id_tag = "liaisondoor"; - name = "Corporate Liaison"; - secured_wires = 1 - }, -/obj/machinery/door/firedoor, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/wood/walnut, -/area/crew_quarters/heads/office/cl) -"bM" = ( -/obj/structure/disposalpipe/trunk, -/obj/machinery/disposal, -/obj/structure/extinguisher_cabinet{ - pixel_y = 32 - }, -/obj/effect/floor_decal/corner/blue/three_quarters{ - dir = 8 - }, -/obj/effect/floor_decal/industrial/hatch/yellow, -/turf/simulated/floor/tiled/dark/monotile, -/area/bridge/hallway/starboard) -"bN" = ( -/obj/effect/floor_decal/spline/plain/beige{ - dir = 4 - }, -/turf/simulated/floor/carpet, -/area/crew_quarters/heads/office/xo) -"bO" = ( -/turf/simulated/floor/wood/walnut, -/area/crew_quarters/heads/office/xo) -"bP" = ( -/obj/effect/wallframe_spawn/reinforced/polarized{ - id = "meeting_windows" - }, -/obj/structure/cable/green{ - d2 = 2; - icon_state = "0-2" - }, -/obj/structure/cable/green{ - d2 = 4; - icon_state = "0-4" - }, -/turf/simulated/floor/plating, -/area/bridge/meeting_room) -"bQ" = ( -/obj/structure/cable/green{ - d2 = 4; - icon_state = "0-4" - }, -/obj/effect/wallframe_spawn/reinforced/polarized{ - id = "xo_windows" - }, -/obj/machinery/door/blast/shutters{ - density = 0; - dir = 2; - icon_state = "shutter0"; - id_tag = "bridge entry star"; - name = "Bridge Starboard Lockdown Window Shutters"; - opacity = 0 - }, -/turf/simulated/floor/plating, -/area/crew_quarters/heads/office/xo) -"bR" = ( -/obj/machinery/alarm{ - pixel_y = 24 - }, -/obj/structure/table/standard{ - name = "plastic table frame" - }, -/obj/item/storage/box/cups, -/obj/effect/floor_decal/corner/blue{ - dir = 5 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/bridge/hallway/starboard) -"bS" = ( -/obj/machinery/camera/network/command{ - c_tag = "Bridge - Entry Starboard" - }, -/obj/machinery/light{ - dir = 1 - }, -/obj/structure/reagent_dispensers/water_cooler, -/obj/effect/floor_decal/corner/blue{ - dir = 5 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/bridge/hallway/starboard) -"bT" = ( -/turf/simulated/floor/tiled, -/area/hallway/primary/bridge/fore) -"bU" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/floor_decal/corner/blue{ - dir = 9 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/bridge/fore) -"bV" = ( -/obj/effect/wallframe_spawn/reinforced/polarized{ - id = "cl_windows" - }, -/obj/structure/cable/green, -/turf/simulated/floor/plating, -/area/crew_quarters/heads/office/cl) -"bX" = ( -/obj/machinery/door/blast/shutters{ - density = 0; - dir = 2; - icon_state = "shutter0"; - id_tag = "heads_meeting"; - name = "Meeting Room Window Shutters"; - opacity = 0 - }, -/obj/structure/cable/green{ - d2 = 4; - icon_state = "0-4" - }, -/obj/structure/cable/green{ - d2 = 8; - icon_state = "0-8" - }, -/obj/effect/wallframe_spawn/reinforced/polarized{ - id = "meeting_windows" - }, -/turf/simulated/floor/plating, -/area/bridge/meeting_room) -"bY" = ( -/obj/effect/floor_decal/corner/blue{ - dir = 5 - }, -/turf/simulated/floor/tiled/dark, -/area/bridge/hallway/starboard) -"bZ" = ( -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable/green{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/effect/floor_decal/corner/blue{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/tiled/dark, -/area/bridge/hallway/starboard) -"ca" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/floor_decal/corner/blue{ - dir = 5 - }, -/turf/simulated/floor/tiled/dark, -/area/bridge/hallway/starboard) -"cb" = ( -/obj/machinery/power/port_gen/pacman, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/bridge/aftstarboard) -"cc" = ( -/obj/random/obstruction, -/turf/simulated/floor/plating, -/area/maintenance/bridge/aftstarboard) -"cd" = ( -/obj/random/maintenance/solgov, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/bridge/aftstarboard) -"ce" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/bridge/aftstarboard) -"cf" = ( -/obj/structure/cable/green{ - d2 = 4; - icon_state = "0-4" - }, -/obj/structure/cable/green{ - d2 = 2; - icon_state = "0-2" - }, -/obj/machinery/camera/network/engineering{ - c_tag = "Substation - Bridge" - }, -/obj/machinery/power/sensor{ - name = "Powernet Sensor - Bridge Subgrid"; - name_tag = "Bridge Subgrid" - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/maintenance/substation/bridge) -"cg" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/tiled, -/area/hallway/primary/bridge/fore) -"ch" = ( -/obj/machinery/power/breakerbox/activated{ - RCon_tag = "Bridge Substation Bypass" - }, -/turf/simulated/floor/plating, -/area/maintenance/substation/bridge) -"ci" = ( -/obj/effect/floor_decal/corner/blue{ - dir = 9 - }, -/obj/structure/closet/emcloset, -/obj/effect/floor_decal/industrial/outline/grey, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/tiled/dark, -/area/bridge/hallway/starboard) -"cj" = ( -/obj/structure/cable/green{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/effect/floor_decal/corner/research{ - dir = 5 - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/hologram/holopad/longrange, -/turf/simulated/floor/tiled, -/area/crew_quarters/heads/office/rd) -"ck" = ( -/turf/simulated/wall/prepainted, -/area/bridge) -"cl" = ( -/turf/simulated/floor/tiled/dark, -/area/bridge/hallway/starboard) -"cm" = ( -/obj/structure/disposalpipe/segment{ - dir = 4; - icon_state = "pipe-c" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, -/obj/effect/floor_decal/corner/blue, -/obj/structure/cable/green{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/turf/simulated/floor/tiled/dark, -/area/bridge/hallway/starboard) -"cn" = ( -/obj/structure/disposalpipe/junction{ - dir = 4; - icon_state = "pipe-j2" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, -/obj/machinery/power/apc{ - name = "south bump"; - pixel_y = -24 - }, -/obj/effect/floor_decal/corner/blue{ - dir = 10 - }, -/obj/structure/cable/green, -/obj/structure/cable/green{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply, -/turf/simulated/floor/tiled/dark, -/area/bridge/hallway/starboard) -"co" = ( -/turf/simulated/floor/carpet, -/area/crew_quarters/heads/office/xo) -"cp" = ( -/obj/structure/table/woodentable/walnut, -/obj/item/reagent_containers/food/drinks/glass2/coffeecup/SCG{ - pixel_x = -5; - pixel_y = 5 - }, -/obj/item/reagent_containers/food/drinks/glass2/coffeecup/SCG{ - pixel_x = 8; - pixel_y = -3 - }, -/turf/simulated/floor/carpet, -/area/crew_quarters/heads/office/xo) -"cq" = ( -/obj/effect/floor_decal/spline/plain/beige{ - dir = 4 - }, -/obj/structure/bed/chair/comfy/blue{ - dir = 8 - }, -/turf/simulated/floor/carpet, -/area/crew_quarters/heads/office/xo) -"cr" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/floor_decal/corner/blue{ - dir = 10 - }, -/obj/machinery/atmospherics/valve/shutoff/supply{ - dir = 4 - }, -/obj/effect/floor_decal/industrial/shutoff{ - dir = 4 - }, -/obj/machinery/atmospherics/valve/shutoff/scrubbers{ - dir = 4 - }, -/obj/machinery/rotating_alarm/security_alarm{ - dir = 1 - }, -/turf/simulated/floor/tiled/dark, -/area/bridge/hallway/starboard) -"cs" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply, -/obj/machinery/alarm{ - dir = 1; - pixel_y = -28; - req_access = list(list("ACCESS_ENGINE_EQUIP","ACCESS_ATMOS")) - }, -/obj/structure/disposalpipe/junction{ - dir = 4; - icon_state = "pipe-j2" - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/bridge/fore) -"ct" = ( -/obj/structure/bed/chair/padded/blue{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/machinery/light{ - dir = 8; - icon_state = "tube1" - }, -/obj/effect/floor_decal/corner/blue{ - dir = 9 - }, -/obj/structure/disposalpipe/segment{ - dir = 1; - icon_state = "pipe-c" - }, -/turf/simulated/floor/tiled/dark, -/area/bridge/hallway/starboard) -"cu" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark, -/area/bridge/hallway/starboard) -"cv" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/unary/vent_pump/on, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark, -/area/bridge/hallway/starboard) -"cw" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/hologram/holopad, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark, -/area/bridge/hallway/starboard) -"cx" = ( -/obj/structure/disposalpipe/junction{ - dir = 1; - icon_state = "pipe-j2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/effect/floor_decal/corner/blue{ - dir = 6 - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/machinery/firealarm{ - dir = 4; - pixel_x = 26 - }, -/turf/simulated/floor/tiled/dark, -/area/bridge/hallway/starboard) -"cy" = ( -/obj/effect/floor_decal/corner/blue/mono, -/obj/machinery/keycard_auth/torch{ - pixel_y = 38 - }, -/obj/machinery/recharger/wallcharger{ - pixel_x = 6; - pixel_y = 20 - }, -/obj/machinery/recharger/wallcharger{ - pixel_x = -8; - pixel_y = 20 - }, -/obj/structure/table/glass, -/obj/item/paper_bin{ - pixel_x = -3; - pixel_y = 7 - }, -/obj/item/pen, -/obj/item/pen/red, -/obj/item/pen/blue, -/turf/simulated/floor/tiled/dark/monotile, -/area/bridge) -"cz" = ( -/obj/structure/table/glass, -/obj/effect/floor_decal/corner/blue/mono, -/obj/structure/noticeboard{ - pixel_y = 30 - }, -/obj/item/storage/toolbox/emergency, -/obj/item/device/flashlight, -/turf/simulated/floor/tiled/dark/monotile, -/area/bridge) -"cA" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/effect/floor_decal/corner/blue/three_quarters, -/turf/simulated/floor/tiled/dark, -/area/bridge/hallway/starboard) -"cB" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/effect/floor_decal/corner/blue{ - dir = 10 - }, -/turf/simulated/floor/tiled/dark, -/area/bridge/hallway/starboard) -"cC" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply, -/obj/structure/sign/warning/nosmoking_1{ - dir = 1; - pixel_x = 2; - pixel_y = -34 - }, -/obj/effect/floor_decal/corner/blue{ - dir = 10 - }, -/turf/simulated/floor/tiled/dark, -/area/bridge/hallway/starboard) -"cD" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/effect/floor_decal/corner/blue{ - dir = 8 - }, -/turf/simulated/floor/tiled/dark, -/area/bridge/hallway/starboard) -"cE" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/disposalpipe/sortjunction/flipped{ - dir = 1; - name = "Bridge Storage"; - sort_type = "Bridge Storage" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 4 - }, -/obj/machinery/light{ - dir = 4; - icon_state = "tube1" - }, -/obj/effect/floor_decal/corner/blue{ - dir = 6 - }, -/turf/simulated/floor/tiled/dark, -/area/bridge/hallway/starboard) -"cF" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/disposalpipe/segment, -/obj/effect/catwalk_plated, -/obj/machinery/camera/network/bridge{ - c_tag = "Command Hallway - Center Fore Port"; - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/plating, -/area/hallway/primary/bridge/fore) -"cG" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/disposalpipe/sortjunction{ - dir = 1; - name = "Chief of Security"; - sort_type = "Chief of Security" - }, -/obj/effect/floor_decal/corner/blue, -/turf/simulated/floor/tiled, -/area/hallway/primary/bridge/fore) -"cH" = ( -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 6 - }, -/obj/structure/railing/mapped{ - dir = 4; - icon_state = "railing0-1" - }, -/turf/simulated/floor/plating, -/area/maintenance/bridge/aftstarboard) -"cI" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 8 - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 10 - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/bridge/aftstarboard) -"cJ" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/door/airlock/engineering{ - name = "Bridge Substation" - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/plating, -/area/maintenance/substation/bridge) -"cK" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/obj/structure/catwalk, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/turf/simulated/floor/plating, -/area/maintenance/substation/bridge) -"cL" = ( -/obj/machinery/power/terminal{ - dir = 1 - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 1 - }, -/obj/structure/cable{ - d2 = 4; - icon_state = "0-4" - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/substation/bridge) -"cM" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/cable{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 - }, -/obj/structure/catwalk, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, -/turf/simulated/floor/plating, -/area/maintenance/substation/bridge) -"cN" = ( -/obj/machinery/atmospherics/pipe/zpipe/down/scrubbers{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/zpipe/down/supply{ - dir = 8 - }, -/obj/structure/cable{ - d1 = 32; - d2 = 8; - icon_state = "32-8" - }, -/obj/structure/lattice, -/turf/simulated/open, -/area/maintenance/substation/bridge) -"cO" = ( -/obj/effect/floor_decal/industrial/hatch/yellow, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/turf/simulated/floor/airless, -/area/solar/bridge) -"cP" = ( -/obj/effect/floor_decal/industrial/hatch/yellow, -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/airless, -/area/solar/bridge) -"cQ" = ( -/obj/effect/floor_decal/industrial/hatch/yellow, -/obj/structure/cable/yellow{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/turf/simulated/floor/airless, -/area/solar/bridge) -"cR" = ( -/obj/structure/catwalk, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 - }, -/turf/simulated/floor/plating, -/area/maintenance/bridge/forestarboard) -"cS" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/research{ - id_tag = "csodoor"; - name = "Chief Science Officer"; - secured_wires = 1 - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable/green{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/turf/simulated/floor/tiled/white, -/area/crew_quarters/heads/office/rd) -"cT" = ( -/obj/structure/table/standard{ - name = "plastic table frame" - }, -/obj/random/cash, -/obj/random/cash, -/obj/random_multi/single_item/boombox, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/item/hand_labeler, -/turf/simulated/floor/tiled/dark, -/area/bridge/storage) -"cU" = ( -/obj/machinery/light{ - dir = 1 - }, -/obj/machinery/firealarm{ - pixel_y = 24 - }, -/obj/effect/floor_decal/corner/blue/three_quarters{ - dir = 8 - }, -/turf/simulated/floor/tiled/dark, -/area/bridge/meeting_room) -"cV" = ( -/obj/machinery/computer/modular/preset/aislot/sysadmin{ - dir = 1; - icon_state = "console" - }, -/obj/effect/floor_decal/corner/blue/mono, -/obj/machinery/power/apc/super/critical{ - name = "south bump"; - pixel_y = -24 - }, -/obj/structure/cable/green, -/turf/simulated/floor/tiled/dark/monotile, -/area/bridge) -"cW" = ( -/obj/item/device/radio/intercom{ - pixel_y = 23 - }, -/obj/machinery/camera/network/command{ - c_tag = "Bridge - Conference Room Starboard" - }, -/obj/effect/floor_decal/corner/blue{ - dir = 5 - }, -/turf/simulated/floor/tiled/dark, -/area/bridge/meeting_room) -"cX" = ( -/obj/structure/table/woodentable/walnut, -/obj/effect/floor_decal/corner/blue{ - dir = 5 - }, -/obj/item/book/manual/solgov_law, -/turf/simulated/floor/tiled/dark/monotile, -/area/bridge/meeting_room) -"cY" = ( -/obj/structure/table/woodentable/walnut, -/obj/item/book/manual/sol_sop, -/obj/effect/floor_decal/corner/blue{ - dir = 5 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/bridge/meeting_room) -"cZ" = ( -/obj/structure/table/woodentable/walnut, -/obj/item/paper_bin{ - pixel_x = -3; - pixel_y = 7 - }, -/obj/item/pen, -/obj/item/hand_labeler, -/obj/item/sticky_pad/random, -/obj/effect/floor_decal/corner/blue/three_quarters{ - dir = 1 - }, -/obj/structure/sign/warning/smoking{ - pixel_x = 26 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/bridge/meeting_room) -"da" = ( -/obj/machinery/alarm{ - dir = 8; - pixel_x = 24 - }, -/obj/item/device/radio/intercom{ - pixel_y = 23 - }, -/obj/effect/floor_decal/corner/yellow/mono, -/obj/structure/flora/pottedplant/smallcactus{ - desc = "This is a small cactus. Its needles are sharp. It seems neglected, as if no one loves it." - }, -/turf/simulated/floor/tiled/monotile, -/area/crew_quarters/heads/office/ce) -"db" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 4 - }, -/obj/effect/floor_decal/corner/blue{ - dir = 9 - }, -/turf/simulated/floor/tiled/dark, -/area/bridge/hallway/starboard) -"dc" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers, -/obj/effect/floor_decal/corner/blue{ - dir = 6 - }, -/turf/simulated/floor/tiled/dark, -/area/bridge/hallway/starboard) -"dd" = ( -/obj/item/pen, -/obj/item/stamp/xo, -/obj/structure/table/woodentable_reinforced/walnut, -/obj/random_multi/single_item/memo_command, -/obj/random_multi/single_item/memo_supply, -/turf/simulated/floor/wood/walnut, -/area/crew_quarters/heads/office/xo) -"de" = ( -/obj/structure/cable/green{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/light_switch{ - pixel_x = -23; - pixel_y = 25 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/floor_decal/corner/blue{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/turf/simulated/floor/tiled/dark, -/area/bridge/meeting_room) -"df" = ( -/obj/machinery/camera/network/engineering{ - c_tag = "Command Hallway - Center Fore Staboard"; - dir = 4; - network = list("Bridge") - }, -/obj/effect/floor_decal/corner/blue{ - dir = 9 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/bridge/fore) -"dg" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/dark, -/area/bridge/meeting_room) -"dh" = ( -/obj/effect/floor_decal/corner/blue{ - dir = 6 - }, -/obj/structure/table/glass, -/obj/machinery/light{ - dir = 4; - icon_state = "tube1" - }, -/obj/machinery/photocopier/faxmachine{ - department = "Torch - Bridge" - }, -/obj/machinery/button/alternate/door{ - id_tag = "meetingstarboard"; - name = "Bridge Meeting Starboard Door Control"; - pixel_x = 34; - pixel_y = 6; - req_access = list("ACCESS_BRIDGE") - }, -/obj/machinery/button/alternate/door{ - id_tag = "meetingport"; - name = "Bridge Meeting Port Door Control"; - pixel_x = 34; - pixel_y = -6; - req_access = list("ACCESS_BRIDGE") - }, -/obj/item/device/radio/intercom/hailing{ - dir = 8; - pixel_x = 24 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/bridge) -"di" = ( -/obj/effect/floor_decal/industrial/outline/grey, -/obj/structure/table/rack{ - dir = 8 - }, -/obj/structure/window/reinforced{ - dir = 1 - }, -/obj/structure/window/reinforced, -/obj/structure/window/reinforced{ - dir = 8 - }, -/obj/machinery/door/window/brigdoor/westright{ - autoset_access = 0; - dir = 4; - name = "CMO's suit storage"; - req_access = list("ACCESS_CHIEF_MEDICAL_OFFICER") - }, -/obj/effect/floor_decal/corner/paleblue/diagonal, -/obj/effect/floor_decal/corner/paleblue/diagonal{ - dir = 4 - }, -/obj/item/tank/oxygen_emergency_double, -/obj/item/rig/command/medical/equipped, -/turf/simulated/floor/tiled/dark, -/area/aux_eva) -"dj" = ( -/obj/effect/floor_decal/corner/blue{ - dir = 6 - }, -/turf/simulated/floor/tiled/dark, -/area/bridge/disciplinary_board_room) -"dk" = ( -/turf/simulated/wall/prepainted, -/area/crew_quarters/heads/office/cl/backroom) -"dl" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 8 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/dark, -/area/bridge/meeting_room) -"dm" = ( -/turf/simulated/wall/r_wall/hull, -/area/turret_protected/ai_foyer) -"do" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/dark, -/area/bridge/meeting_room) -"dp" = ( -/obj/structure/cable/green{ - d2 = 8; - icon_state = "0-8" - }, -/obj/structure/cable/green{ - d2 = 4; - icon_state = "0-4" - }, -/obj/effect/wallframe_spawn/reinforced/polarized{ - id = "ce_windows" - }, -/turf/simulated/floor/plating, -/area/crew_quarters/heads/office/ce) -"dq" = ( -/obj/structure/cable/green{ - d2 = 8; - icon_state = "0-8" - }, -/obj/machinery/power/apc{ - dir = 4; - name = "east bump"; - pixel_x = 24 - }, -/obj/effect/floor_decal/corner/blue{ - dir = 6 - }, -/turf/simulated/floor/tiled/dark, -/area/bridge/meeting_room) -"dr" = ( -/obj/machinery/atmospherics/binary/pump/on{ - dir = 1; - target_pressure = 200 - }, -/obj/structure/railing/mapped, -/obj/structure/railing/mapped{ - dir = 4; - icon_state = "railing0-1" - }, -/turf/simulated/floor/plating, -/area/maintenance/bridge/aftstarboard) -"ds" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/bridge/aftstarboard) -"dt" = ( -/obj/structure/sign/warning/high_voltage{ - dir = 8 - }, -/turf/simulated/wall/prepainted, -/area/maintenance/substation/bridge) -"du" = ( -/obj/structure/cable/green, -/obj/machinery/power/apc{ - name = "south bump"; - pixel_y = -24 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/turf/simulated/floor/plating, -/area/maintenance/substation/bridge) -"dv" = ( -/obj/machinery/alarm{ - dir = 1; - pixel_y = -22 - }, -/obj/machinery/atmospherics/valve/shutoff/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/valve/shutoff/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/maintenance/substation/bridge) -"dw" = ( -/obj/machinery/firealarm{ - dir = 4; - pixel_x = 24 - }, -/obj/machinery/light/small, -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/turf/simulated/floor/plating, -/area/maintenance/substation/bridge) -"dA" = ( -/obj/structure/sign/double/solgovflag/left{ - dir = 4; - pixel_x = -32 - }, -/turf/simulated/floor/wood/walnut, -/area/crew_quarters/heads/office/co) -"dE" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/dark, -/area/bridge/storage) -"dF" = ( -/obj/structure/table/rack, -/obj/structure/window/reinforced{ - dir = 8 - }, -/obj/structure/window/reinforced{ - dir = 1 - }, -/obj/item/rcd, -/obj/item/rcd_ammo, -/obj/item/rcd_ammo, -/obj/item/rcd_ammo, -/obj/item/rcd_ammo, -/obj/item/rcd_ammo, -/obj/item/rcd_ammo, -/obj/machinery/door/window/brigdoor/eastleft{ - name = "CE's Equipment Storage" - }, -/obj/structure/window/reinforced{ - dir = 2 - }, -/turf/simulated/floor/tiled/monotile, -/area/crew_quarters/heads/office/ce) -"dG" = ( -/turf/simulated/floor/wood/walnut, -/area/crew_quarters/heads/cobed) -"dH" = ( -/obj/machinery/camera/network/bridge{ - c_tag = "Bridge - Stairs"; - dir = 4 - }, -/obj/effect/floor_decal/corner/blue{ - dir = 9 - }, -/obj/machinery/light{ - dir = 8; - icon_state = "tube1" - }, -/obj/structure/disposalpipe/segment{ - dir = 1; - icon_state = "pipe-c" - }, -/obj/machinery/vending/cola{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/bridge/fore) -"dI" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/obj/machinery/firealarm{ - dir = 4; - pixel_x = 21 - }, -/turf/simulated/floor/carpet, -/area/crew_quarters/heads/office/xo) -"dJ" = ( -/obj/effect/floor_decal/corner/blue{ - dir = 9 - }, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 4 - }, -/obj/machinery/light{ - dir = 8; - icon_state = "tube1" - }, -/turf/simulated/floor/tiled/dark, -/area/crew_quarters/heads/office/xo) -"dK" = ( -/obj/structure/table/woodentable/walnut, -/obj/random/clipboard, -/obj/item/folder/blue, -/turf/simulated/floor/carpet/blue2, -/area/bridge/meeting_room) -"dL" = ( -/obj/structure/closet/secure_closet/engineering_chief_torch, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled/monotile, -/area/crew_quarters/heads/office/ce) -"dM" = ( -/obj/machinery/power/apc{ - name = "south bump"; - pixel_y = -24 - }, -/obj/structure/cable/green, -/obj/effect/floor_decal/industrial/warning{ - dir = 8; - icon_state = "warning" - }, -/turf/simulated/floor/tiled, -/area/crew_quarters/heads/office/ce) -"dN" = ( -/obj/machinery/camera/network/command{ - c_tag = "Chief Engineer - Office"; - dir = 1; - network = list("Command","Engineering") - }, -/obj/machinery/button/alternate/door{ - desc = "A remote control-switch for the office door."; - id_tag = "cedoor"; - name = "CE's Office Door Control"; - pixel_y = -27; - req_access = list("ACCESS_CHIEF_ENGINEER") - }, -/obj/effect/floor_decal/industrial/outline/grey, -/obj/machinery/light, -/obj/machinery/papershredder, -/turf/simulated/floor/tiled, -/area/crew_quarters/heads/office/ce) -"dO" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/disposalpipe/segment, -/obj/effect/floor_decal/corner/red/half, -/turf/simulated/floor/tiled/monotile, -/area/hallway/primary/bridge/fore) -"dP" = ( -/obj/structure/table/woodentable/walnut, -/obj/random_multi/single_item/memo_scgr, -/obj/random_multi/single_item/memo_command, -/obj/random_multi/single_item/memo_corporate, -/turf/simulated/floor/carpet/blue2, -/area/bridge/meeting_room) -"dQ" = ( -/obj/effect/floor_decal/corner/blue{ - dir = 6 - }, -/obj/structure/noticeboard{ - pixel_x = 32 - }, -/turf/simulated/floor/tiled/dark, -/area/bridge/meeting_room) -"dR" = ( -/obj/structure/disposalpipe/segment, -/obj/structure/cable/green{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/effect/floor_decal/spline/plain/beige{ - dir = 1 - }, -/turf/simulated/floor/tiled/dark, -/area/crew_quarters/heads/office/xo) -"dS" = ( -/obj/effect/floor_decal/corner/blue{ - dir = 6 - }, -/obj/machinery/requests_console{ - announcementConsole = 1; - department = "Bridge Conference Room"; - departmentType = 5; - name = "Bridge Conference Room"; - pixel_x = 32 - }, -/turf/simulated/floor/tiled/dark, -/area/bridge/meeting_room) -"dT" = ( -/obj/structure/table/glass, -/obj/effect/floor_decal/corner/blue{ - dir = 6 - }, -/obj/structure/flora/pottedplant/deskleaf{ - desc = "A tiny waxy leafed plant specimen. It has 'Green's replacement' scribbled into the pot." - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/bridge) -"dU" = ( -/obj/structure/table/glass, -/obj/effect/floor_decal/corner/blue/mono, -/obj/machinery/button/blast_door{ - id_tag = "bridge blast"; - name = "Bridge Window Lockdown Control"; - pixel_x = -30 - }, -/obj/machinery/light/spot{ - dir = 8 - }, -/obj/item/storage/box/donut, -/obj/machinery/rotating_alarm/security_alarm{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/bridge) -"dV" = ( -/turf/simulated/wall/r_wall/hull, -/area/maintenance/auxsolarbridge) -"dW" = ( -/obj/structure/table/glass, -/obj/effect/floor_decal/corner/blue{ - dir = 10 - }, -/obj/machinery/camera/network/command{ - c_tag = "Bridge"; - dir = 1 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/bridge) -"dY" = ( -/turf/simulated/wall/r_wall/hull, -/area/shield/bridge) -"dZ" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/universal, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/bridge/aftstarboard) -"eb" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 4 - }, -/turf/simulated/floor/reinforced/airless, -/area/space) -"ec" = ( -/obj/effect/paint/hull, -/turf/simulated/wall/titanium, -/area/aquila/cockpit) -"ed" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 4 - }, -/obj/effect/floor_decal/corner/blue{ - dir = 9 - }, -/turf/simulated/floor/tiled/dark, -/area/bridge/hallway/port) -"ee" = ( -/obj/structure/closet/secure_closet/bridgeofficer, -/obj/effect/floor_decal/industrial/outline/grey, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/bridge/storage) -"ef" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 8 - }, -/obj/structure/disposalpipe/sortjunction{ - dir = 1; - name = "Bridge Conference Room"; - sort_type = "Bridge Conference Room" - }, -/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers, -/obj/effect/floor_decal/corner/blue{ - dir = 6 - }, -/turf/simulated/floor/tiled/dark, -/area/bridge/hallway/port) -"eg" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 8; - icon_state = "warning" - }, -/turf/simulated/floor/reinforced/airless, -/area/space) -"ej" = ( -/obj/effect/floor_decal/industrial/outline/grey, -/obj/machinery/camera/all/command{ - c_tag = "AI Core - Aft"; - dir = 8 - }, -/obj/machinery/power/terminal, -/obj/structure/cable/green{ - d2 = 4; - icon_state = "0-4" - }, -/obj/structure/table/steel_reinforced, -/turf/simulated/floor/tiled/dark, -/area/turret_protected/ai) -"ek" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/floor_decal/corner/blue{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/obj/machinery/light_switch{ - pixel_x = -23; - pixel_y = -25 - }, -/turf/simulated/floor/tiled/dark, -/area/bridge/meeting_room) -"el" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark, -/area/bridge/meeting_room) -"em" = ( -/obj/structure/table/standard{ - name = "plastic table frame" - }, -/obj/item/device/flashlight/lamp{ - pixel_y = 3 - }, -/turf/simulated/floor/tiled/dark, -/area/crew_quarters/heads/office/cos) -"en" = ( -/obj/machinery/alarm{ - pixel_y = 24 - }, -/obj/machinery/camera/network/command{ - c_tag = "Executive Officer - Office" - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/flora/pottedplant/fern, -/turf/simulated/floor/wood/walnut, -/area/crew_quarters/heads/office/xo) -"eo" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 8 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark, -/area/bridge/meeting_room) -"ep" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark, -/area/bridge/meeting_room) -"eq" = ( -/obj/machinery/door/airlock/sol{ - name = "XO's Quarters"; - secured_wires = 1 - }, -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/crew_quarters/heads/office/xo) -"er" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/railing/mapped{ - dir = 8; - icon_state = "railing0-1" - }, -/turf/simulated/floor/plating, -/area/maintenance/bridge/forestarboard) -"es" = ( -/obj/structure/disposalpipe/segment{ - dir = 2; - icon_state = "pipe-c" - }, -/obj/machinery/alarm{ - dir = 8; - pixel_x = 24 - }, -/obj/effect/floor_decal/corner/blue{ - dir = 6 - }, -/turf/simulated/floor/tiled/dark, -/area/bridge/meeting_room) -"et" = ( -/obj/structure/table/steel_reinforced, -/obj/effect/floor_decal/corner/blue/mono, -/obj/machinery/door/firedoor, -/obj/item/material/bell, -/obj/machinery/door/window/brigdoor/eastright{ - dir = 8; - name = "Executive Officer's Desk" - }, -/obj/item/paper_bin{ - pixel_x = -3; - pixel_y = 7 - }, -/obj/machinery/door/blast/shutters{ - dir = 4; - id_tag = "hop_office_desk"; - name = "XO Queue Privacy Shutters" - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/crew_quarters/heads/office/xo) -"eu" = ( -/obj/structure/table/standard{ - name = "plastic table frame" - }, -/obj/effect/floor_decal/corner/red/mono, -/obj/machinery/keycard_auth/torch{ - pixel_x = 26 - }, -/obj/item/paper_bin{ - pixel_x = -3; - pixel_y = 7 - }, -/obj/item/pen, -/obj/item/toy/figure/secofficer{ - desc = "A 'Space Life' brand Security Officer action figure. This one seems rather old. A small heart is sewn into the armor vest." - }, -/obj/item/sticky_pad/random, -/turf/simulated/floor/tiled/dark/monotile, -/area/crew_quarters/heads/office/cos) -"ev" = ( -/obj/effect/floor_decal/corner/blue/mono, -/obj/machinery/keycard_auth/torch{ - pixel_y = -38 - }, -/obj/machinery/firealarm{ - dir = 1; - pixel_y = -24 - }, -/obj/structure/table/glass, -/obj/item/book/manual/solgov_law, -/obj/item/book/manual/sol_sop, -/turf/simulated/floor/tiled/dark/monotile, -/area/bridge) -"ew" = ( -/obj/structure/table/glass, -/obj/effect/floor_decal/corner/blue/mono, -/turf/simulated/floor/tiled/dark/monotile, -/area/bridge) -"ex" = ( -/obj/structure/cable/green{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/structure/disposalpipe/segment{ - dir = 4; - icon_state = "pipe-c" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/effect/floor_decal/corner/blue/three_quarters{ - dir = 8 - }, -/turf/simulated/floor/tiled/dark, -/area/bridge/hallway/port) -"ey" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/turf/simulated/floor/wood/walnut, -/area/crew_quarters/heads/office/cl) -"ez" = ( -/obj/structure/bed/chair/padded/green{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply, -/turf/simulated/floor/wood/walnut, -/area/crew_quarters/heads/office/cl) -"eB" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/effect/floor_decal/corner/blue{ - dir = 5 - }, -/turf/simulated/floor/tiled/dark, -/area/bridge/hallway/port) -"eC" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 1 - }, -/obj/structure/sign/warning/nosmoking_1{ - pixel_x = 2; - pixel_y = 24 - }, -/obj/effect/floor_decal/corner/blue{ - dir = 5 - }, -/turf/simulated/floor/tiled/dark, -/area/bridge/hallway/port) -"eD" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/effect/floor_decal/corner/blue{ - dir = 1 - }, -/turf/simulated/floor/tiled/dark, -/area/bridge/hallway/port) -"eE" = ( -/obj/structure/disposalpipe/junction{ - dir = 1; - icon_state = "pipe-j2" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 4 - }, -/obj/machinery/light{ - dir = 4; - icon_state = "tube1" - }, -/obj/effect/floor_decal/corner/blue{ - dir = 6 - }, -/turf/simulated/floor/tiled/dark, -/area/bridge/hallway/port) -"eF" = ( -/obj/machinery/firealarm{ - dir = 8; - pixel_x = -24 - }, -/obj/effect/floor_decal/corner/red/mono, -/obj/structure/closet/secure_closet{ - name = "Security Equipment Locker"; - req_access = list("ACCESS_SECURITY") - }, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/floor/tiled/dark/monotile, -/area/security/bridgecheck) -"eG" = ( -/obj/machinery/light, -/obj/effect/floor_decal/corner/blue/three_quarters, -/turf/simulated/floor/tiled/dark, -/area/bridge/meeting_room) -"eH" = ( -/obj/machinery/computer/ship/helm{ - req_access = list(list("ACCESS_TORCH_AQUILA_HELM")) - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/aquila/cockpit) -"eI" = ( -/obj/machinery/computer/shuttle_control/explore/aquila, -/turf/simulated/floor/tiled/dark/monotile, -/area/aquila/cockpit) -"eJ" = ( -/obj/machinery/computer/ship/sensors, -/turf/simulated/floor/tiled/dark/monotile, -/area/aquila/cockpit) -"eK" = ( -/obj/item/device/radio/intercom{ - dir = 1; - pixel_y = -28 - }, -/obj/machinery/camera/network/command{ - c_tag = "Bridge - Conference Room Port"; - dir = 1 - }, -/obj/effect/floor_decal/corner/blue{ - dir = 10 - }, -/turf/simulated/floor/tiled/dark, -/area/bridge/meeting_room) -"eL" = ( -/obj/machinery/photocopier, -/obj/effect/floor_decal/corner/blue{ - dir = 10 - }, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/floor/tiled/dark/monotile, -/area/bridge/meeting_room) -"eM" = ( -/obj/structure/cable/green{ - d2 = 4; - icon_state = "0-4" - }, -/obj/structure/cable/green{ - d2 = 2; - icon_state = "0-2" - }, -/obj/machinery/door/firedoor, -/obj/effect/wallframe_spawn/reinforced/hull, -/turf/simulated/floor/plating, -/area/bridge/storage) -"eN" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 8 - }, -/turf/simulated/floor/tiled/dark, -/area/bridge/storage) -"eO" = ( -/obj/machinery/papershredder, -/obj/effect/floor_decal/corner/blue{ - dir = 10 - }, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/floor/tiled/dark/monotile, -/area/bridge/meeting_room) -"eP" = ( -/turf/simulated/wall/r_wall/prepainted, -/area/bridge) -"eQ" = ( -/obj/machinery/hologram/holopad, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark, -/area/crew_quarters/heads/office/xo) -"eR" = ( -/obj/structure/disposalpipe/trunk{ - dir = 1 - }, -/obj/machinery/disposal, -/obj/effect/floor_decal/corner/blue/three_quarters{ - dir = 4 - }, -/obj/effect/floor_decal/industrial/hatch/yellow, -/obj/structure/sign/ecplaque{ - pixel_x = 29 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/bridge/meeting_room) -"eS" = ( -/obj/structure/cable/green{ - d2 = 8; - icon_state = "0-8" - }, -/obj/effect/wallframe_spawn/reinforced/polarized{ - id = "xo_windows" - }, -/obj/machinery/door/blast/shutters{ - dir = 4; - id_tag = "hop_office_desk"; - name = "XO Queue Privacy Shutters" - }, -/turf/simulated/floor/plating, -/area/crew_quarters/heads/office/xo) -"eT" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/floor_decal/corner/blue/mono, -/obj/machinery/photocopier, -/turf/simulated/floor/tiled/dark/monotile, -/area/crew_quarters/heads/office/xo) -"eU" = ( -/obj/machinery/light{ - dir = 1 - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/floor_decal/corner/blue/three_quarters{ - dir = 8 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/bridge/fore) -"eV" = ( -/obj/structure/cable/green{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/structure/disposalpipe/segment, -/obj/machinery/light{ - dir = 8; - icon_state = "tube1" - }, -/obj/structure/bed/chair/padded/blue{ - dir = 4 - }, -/obj/effect/floor_decal/corner/blue{ - dir = 9 - }, -/turf/simulated/floor/tiled/dark, -/area/bridge/hallway/port) -"eW" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/dark, -/area/bridge/hallway/port) -"eX" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/structure/disposalpipe/segment{ - dir = 4; - icon_state = "pipe-c" - }, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 1 - }, -/turf/simulated/floor/tiled/dark, -/area/bridge/hallway/port) -"eY" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/wood/walnut, -/area/crew_quarters/heads/office/cl) -"eZ" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 1 - }, -/turf/simulated/floor/wood/walnut, -/area/crew_quarters/heads/office/cl) -"fa" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/hologram/holopad, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark, -/area/bridge/hallway/port) -"fb" = ( -/obj/item/device/radio/intercom/locked/ai_private{ - pixel_y = 22 - }, -/turf/simulated/floor/reinforced, -/area/turret_protected/ai_outer_chamber) -"fc" = ( -/obj/structure/disposalpipe/junction{ - dir = 1; - icon_state = "pipe-j2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/effect/floor_decal/corner/blue{ - dir = 6 - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/machinery/firealarm{ - dir = 4; - pixel_x = 26 - }, -/turf/simulated/floor/tiled/dark, -/area/bridge/hallway/port) -"fd" = ( -/obj/machinery/power/apc{ - dir = 1; - name = "north bump"; - pixel_y = 24 - }, -/obj/structure/cable/green{ - d2 = 2; - icon_state = "0-2" - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/bridge/aftstarboard) -"fe" = ( -/obj/machinery/firealarm{ - dir = 4; - pixel_x = 24 - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/shield/bridge) -"ff" = ( -/obj/machinery/atmospherics/portables_connector{ - dir = 4 - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/portable_atmospherics/canister/air/airlock, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/bridge/aftstarboard) -"fg" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/bridge/aftstarboard) -"fh" = ( -/obj/structure/cable/green{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 10 - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/bridge/aftstarboard) -"fj" = ( -/obj/effect/floor_decal/industrial/warning/corner, -/turf/simulated/floor/reinforced/airless, -/area/space) -"fk" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 6; - icon_state = "warning" - }, -/turf/simulated/floor/reinforced/airless, -/area/space) -"fl" = ( -/obj/structure/table/glass, -/obj/random/clipboard, -/obj/random_multi/single_item/memo_research, -/obj/random_multi/single_item/memo_exploration, -/turf/simulated/floor/tiled, -/area/crew_quarters/heads/office/rd) -"fm" = ( -/obj/structure/table/steel_reinforced, -/turf/simulated/floor/tiled/dark/monotile, -/area/aquila/cockpit) -"fn" = ( -/obj/machinery/button/blast_door{ - id_tag = "aquila_shutters"; - name = "Protective Shutters Control"; - pixel_x = -32 - }, -/obj/machinery/turretid/stun{ - enabled = 0; - name = "Aquila point defense control"; - pixel_x = 32; - req_access = list("ACCESS_TORCH_AQUILA_HELM") - }, -/obj/structure/bed/chair/shuttle/blue{ - dir = 1 - }, -/turf/simulated/floor/tiled/dark, -/area/aquila/cockpit) -"fo" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/disposalpipe/segment, -/obj/structure/closet/emcloset, -/obj/effect/floor_decal/industrial/outline/grey, -/obj/effect/floor_decal/corner/blue{ - dir = 9 - }, -/turf/simulated/floor/tiled/dark, -/area/bridge/hallway/port) -"fp" = ( -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 8; - icon_state = "warningcorner" - }, -/turf/simulated/floor/reinforced/airless, -/area/space) -"fu" = ( -/obj/structure/sign/warning/high_voltage{ - dir = 8 - }, -/turf/simulated/wall/r_wall/hull, -/area/maintenance/bridge/forestarboard) -"fv" = ( -/obj/effect/floor_decal/spline/fancy/wood{ - dir = 8 - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 8 - }, -/turf/simulated/floor/tiled/dark, -/area/crew_quarters/heads/office/co) -"fw" = ( -/turf/simulated/floor/tiled/dark, -/area/bridge/hallway/port) -"fx" = ( -/obj/structure/sign/warning/secure_area{ - pixel_y = -7 - }, -/turf/simulated/wall/prepainted, -/area/crew_quarters/heads/office/xo) -"fy" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 - }, -/turf/simulated/floor/tiled/dark, -/area/bridge/hallway/port) -"fz" = ( -/obj/effect/floor_decal/spline/plain/beige{ - dir = 4 - }, -/obj/machinery/disposal, -/obj/structure/disposalpipe/trunk{ - dir = 4 - }, -/obj/machinery/requests_console{ - announcementConsole = 1; - department = "XO's Desk"; - departmentType = 5; - name = "XO Request Console"; - pixel_y = 30 - }, -/turf/simulated/floor/carpet, -/area/crew_quarters/heads/office/xo) -"fA" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark, -/area/bridge/hallway/port) -"fB" = ( -/turf/simulated/wall/prepainted, -/area/hallway/primary/bridge/fore) -"fC" = ( -/obj/structure/disposalpipe/segment{ - dir = 1; - icon_state = "pipe-c" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply, -/obj/effect/floor_decal/corner/blue{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/turf/simulated/floor/tiled/dark, -/area/bridge/hallway/port) -"fD" = ( -/obj/effect/wallframe_spawn/reinforced, -/turf/simulated/floor/plating, -/area/hallway/primary/bridge/fore) -"fE" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/power/apc{ - dir = 1; - name = "north bump"; - pixel_y = 24 - }, -/obj/effect/floor_decal/corner/blue{ - dir = 5 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/cable/green{ - d2 = 4; - icon_state = "0-4" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark, -/area/bridge/hallway/port) -"fF" = ( -/obj/structure/flora/pottedplant/smelly{ - desc = "This is some kind of tropical plant. It reeks of rotten eggs. This one has a hand-painted Nametag on the rim. It reads 'Steve'" - }, -/obj/effect/floor_decal/corner/red/mono, -/obj/machinery/alarm{ - dir = 8; - pixel_x = 24 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/crew_quarters/heads/office/cos) -"fG" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/computer/guestpass{ - pixel_y = 32 - }, -/obj/effect/floor_decal/corner/blue{ - dir = 5 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/valve/shutoff/supply{ - dir = 4 - }, -/obj/effect/floor_decal/industrial/shutoff{ - dir = 4 - }, -/obj/machinery/atmospherics/valve/shutoff/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark, -/area/bridge/hallway/port) -"fH" = ( -/obj/structure/table/rack, -/obj/structure/window/reinforced, -/obj/machinery/door/window/brigdoor/westright{ - autoset_access = 0; - name = "CE's suit storage"; - req_access = list("ACCESS_CHIEF_ENGINEER") - }, -/obj/effect/floor_decal/industrial/outline/grey, -/obj/structure/window/reinforced{ - dir = 4 - }, -/obj/structure/window/reinforced{ - dir = 1 - }, -/obj/item/tank/oxygen_emergency_double, -/obj/effect/floor_decal/corner/yellow/full, -/obj/item/rig/ce/equipped, -/turf/simulated/floor/tiled/monotile, -/area/aux_eva) -"fI" = ( -/turf/simulated/wall/prepainted, -/area/hallway/primary/bridge/aft) -"fJ" = ( -/obj/machinery/light{ - dir = 8; - icon_state = "tube1" - }, -/obj/machinery/computer/ship/engines, -/turf/simulated/floor/tiled/dark/monotile, -/area/aquila/cockpit) -"fK" = ( -/obj/machinery/hologram/holopad/longrange, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled/dark, -/area/aquila/cockpit) -"fL" = ( -/obj/machinery/camera/network/aquila{ - c_tag = "Aquila - Cockpit"; - dir = 8 - }, -/obj/machinery/computer/modular/preset/cardslot/command, -/obj/item/device/radio/intercom/hailing{ - dir = 8; - pixel_x = 24 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/aquila/cockpit) -"fM" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/structure/disposalpipe/segment{ - dir = 8; - icon_state = "pipe-c" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/effect/floor_decal/corner/blue/three_quarters, -/turf/simulated/floor/tiled/dark, -/area/bridge/hallway/port) -"fN" = ( -/obj/effect/floor_decal/corner/blue{ - dir = 5 - }, -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/obj/structure/cable/green{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/dark, -/area/bridge) -"fO" = ( -/obj/structure/disposalpipe/segment, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 8 - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/bridge/aftport) -"fP" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/effect/floor_decal/corner/blue{ - dir = 10 - }, -/turf/simulated/floor/tiled/dark, -/area/bridge/hallway/port) -"fQ" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 4 - }, -/obj/effect/floor_decal/corner/blue{ - dir = 10 - }, -/turf/simulated/floor/tiled/dark, -/area/bridge/hallway/port) -"fR" = ( -/obj/machinery/light, -/obj/effect/floor_decal/corner/blue{ - dir = 10 - }, -/turf/simulated/floor/tiled/dark, -/area/bridge/hallway/port) -"fS" = ( -/obj/machinery/alarm{ - dir = 1; - pixel_y = -28; - req_access = list(list("ACCESS_ENGINE_EQUIP","ACCESS_ATMOS")) - }, -/obj/effect/floor_decal/corner/blue{ - dir = 10 - }, -/turf/simulated/floor/tiled/dark, -/area/bridge/hallway/port) -"fT" = ( -/obj/machinery/camera/network/command{ - c_tag = "Bridge - Entry Port"; - dir = 1 - }, -/obj/effect/floor_decal/corner/blue{ - dir = 10 - }, -/obj/machinery/rotating_alarm/security_alarm{ - dir = 1 - }, -/turf/simulated/floor/tiled/dark, -/area/bridge/hallway/port) -"fU" = ( -/obj/effect/floor_decal/corner/blue{ - dir = 10 - }, -/turf/simulated/floor/tiled/dark, -/area/bridge/hallway/port) -"fV" = ( -/obj/effect/floor_decal/spline/fancy/wood{ - dir = 1 - }, -/obj/structure/table/woodentable/walnut, -/obj/item/device/radio/intercom{ - dir = 4; - pixel_x = -21 - }, -/obj/prefab/hand_teleporter, -/obj/item/toy/torchmodel, -/turf/simulated/floor/wood/walnut, -/area/crew_quarters/heads/cobed) -"fW" = ( -/obj/structure/cable/green{ - d2 = 2; - icon_state = "0-2" - }, -/obj/effect/wallframe_spawn/reinforced/polarized{ - id = "cmo_windows" - }, -/turf/simulated/floor/plating, -/area/crew_quarters/heads/office/cmo) -"fX" = ( -/obj/effect/paint/red, -/obj/machinery/atmospherics/pipe/manifold/hidden/fuel{ - dir = 1 - }, -/turf/simulated/wall/titanium, -/area/aquila/storage) -"fY" = ( -/obj/effect/floor_decal/corner/red/half, -/obj/machinery/vending/coffee{ - dir = 4 - }, -/obj/machinery/firealarm{ - dir = 8; - pixel_x = -24 - }, -/obj/machinery/firealarm{ - dir = 8; - pixel_x = -24; - pixel_y = 0 - }, -/turf/simulated/floor/tiled/monotile, -/area/hallway/primary/bridge/fore) -"fZ" = ( -/obj/effect/floor_decal/industrial/hatch/yellow, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/airless, -/area/solar/bridge) -"ga" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/extinguisher_cabinet{ - pixel_y = -28 - }, -/obj/effect/floor_decal/corner/blue{ - dir = 10 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/bridge/fore) -"gb" = ( -/obj/effect/floor_decal/industrial/outline/grey, -/obj/machinery/porta_turret{ - dir = 8 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/airlock_sensor{ - frequency = 1379; - id_tag = "ai_core_sensor"; - pixel_x = -24; - pixel_y = 0 - }, -/obj/effect/floor_decal/industrial/warning/corner, -/obj/effect/floor_decal/industrial/warning/corner{ - icon_state = "warningcorner"; - dir = 1 - }, -/turf/simulated/floor/tiled/techmaint, -/area/turret_protected/ai_foyer) -"gc" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/turf/simulated/floor/wood/walnut, -/area/crew_quarters/heads/office/cl) -"gd" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/effect/floor_decal/corner/b_green{ - dir = 5 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/bridge/fore) -"gf" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/unary/vent_pump/on, -/obj/effect/floor_decal/corner/blue{ - dir = 5 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/bridge/fore) -"gg" = ( -/obj/effect/floor_decal/corner/blue/mono, -/obj/machinery/power/apc{ - name = "south bump"; - pixel_y = -24 - }, -/obj/structure/cable/green, -/turf/simulated/floor/tiled/dark/monotile, -/area/bridge/disciplinary_board_room) -"gh" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/bridge/aftstarboard) -"gi" = ( -/turf/simulated/wall/prepainted, -/area/shield/bridge) -"gj" = ( -/obj/machinery/door/airlock/highsecurity{ - icon_state = "closed"; - locked = 1; - name = "AI Core Access" - }, -/turf/simulated/floor/tiled/dark/airless, -/area/turret_protected/ai) -"gk" = ( -/obj/structure/cable/green{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/effect/floor_decal/corner/research{ - dir = 5 - }, -/obj/effect/floor_decal/corner/research, -/turf/simulated/floor/tiled, -/area/hallway/primary/bridge/fore) -"gl" = ( -/obj/effect/shuttle_landmark/torch/deck1/exploration_shuttle{ - name = "B-Deck, Fore Port" - }, -/turf/space, -/area/space) -"gm" = ( -/turf/unsimulated/mask, -/area/hallway/primary/bridge/aft) -"gn" = ( -/obj/machinery/access_button{ - command = "cycle_exterior"; - frequency = 1379; - master_tag = "bridge_eva_airlock"; - name = "exterior access button"; - pixel_x = -24; - req_access = list("ACCESS_MAINT") - }, -/turf/simulated/floor/reinforced/airless, -/area/space) -"go" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 4 - }, -/obj/structure/closet/emcloset, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/alarm{ - dir = 4; - pixel_x = -22 - }, -/obj/machinery/firealarm{ - dir = 1; - pixel_y = -26 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/aquila/cockpit) -"gp" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/bed/chair/shuttle/blue{ - dir = 1 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/aquila/cockpit) -"gq" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, -/obj/effect/floor_decal/corner/blue{ - dir = 10 - }, -/obj/structure/cable/cyan{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/turf/simulated/floor/tiled/dark, -/area/aquila/cockpit) -"gr" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/bed/chair/shuttle/blue{ - dir = 1 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/aquila/cockpit) -"gs" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 8 - }, -/obj/structure/table/steel_reinforced, -/obj/machinery/power/apc/shuttle/aquila{ - dir = 4; - name = "east bump"; - pixel_x = 24 - }, -/obj/structure/cable/cyan{ - d2 = 8; - icon_state = "0-8" - }, -/obj/item/device/radio, -/obj/machinery/recharger, -/turf/simulated/floor/tiled/dark/monotile, -/area/aquila/cockpit) -"gv" = ( -/obj/machinery/computer/modular/preset/cardslot/command{ - dir = 8; - icon_state = "console" - }, -/obj/item/modular_computer/tablet/lease/preset/command, -/obj/machinery/button/alternate/door{ - desc = "A remote control-switch for the office door."; - id_tag = "repdoor"; - name = "SCGR's Office Door Control"; - pixel_x = 27; - pixel_y = 5; - req_access = list("ACCESS_TORCH_REPRESENTATIVE") - }, -/obj/machinery/button/windowtint{ - id = "sgr_windows"; - pixel_x = 25; - pixel_y = -6; - range = 11 - }, -/turf/simulated/floor/carpet/blue2, -/area/crew_quarters/heads/office/sgr) -"gw" = ( -/obj/effect/paint/hull, -/turf/simulated/wall/titanium, -/area/aquila/medical) -"gz" = ( -/turf/simulated/wall/r_wall/hull, -/area/maintenance/bridge/aftstarboard) -"gD" = ( -/obj/item/device/radio/intercom/locked/ai_private{ - pixel_y = 22 - }, -/obj/machinery/hologram/holopad, -/turf/simulated/floor/bluegrid, -/area/turret_protected/ai_foyer) -"gJ" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/effect/catwalk_plated, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply, -/turf/simulated/floor/plating, -/area/hallway/primary/bridge/fore) -"gK" = ( -/obj/machinery/power/smes/buildable{ - charge = 5e+006; - input_attempt = 1; - input_level = 250000; - output_attempt = 1; - output_level = 250000 - }, -/obj/structure/cable/cyan{ - d2 = 8; - icon_state = "0-8" - }, -/turf/simulated/floor/tiled/dark, -/area/turret_protected/ai) -"gL" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/bridge/fore) -"gM" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply, -/turf/simulated/floor/tiled, -/area/hallway/primary/bridge/fore) -"gN" = ( -/obj/structure/bed/chair/office/comfy/green, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/carpet/green, -/area/crew_quarters/heads/office/cl) -"gO" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/floor_decal/corner/yellow{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, -/turf/simulated/floor/tiled, -/area/hallway/primary/bridge/fore) -"gP" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 4; - icon_state = "warning" - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/bridge/foreport) -"gR" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/firealarm{ - dir = 1; - pixel_y = -24 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/bridge/fore) -"gS" = ( -/obj/effect/floor_decal/industrial/outline/grey, -/obj/machinery/camera/all/command{ - c_tag = "AI Core - Port"; - dir = 1 - }, -/obj/machinery/computer/modular/preset/engineering{ - dir = 1 - }, -/turf/simulated/floor/tiled/dark, -/area/turret_protected/ai) -"gT" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 8 - }, -/turf/simulated/floor/tiled/dark, -/area/security/bridgecheck) -"gV" = ( -/obj/machinery/shield_diffuser, -/obj/machinery/door/airlock/external{ - frequency = 1379; - icon_state = "closed"; - id_tag = "bridge_eva_outer"; - locked = 1; - name = "Bridge EVA External Access" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/hallway/primary/bridge/aft) -"gX" = ( -/obj/structure/sign/warning/airlock, -/turf/simulated/wall/r_wall/hull, -/area/hallway/primary/bridge/aft) -"gY" = ( -/obj/effect/floor_decal/industrial/warning, -/turf/simulated/floor/reinforced/airless, -/area/space) -"gZ" = ( -/obj/machinery/porta_turret{ - dir = 8; - enabled = 0; - lethal = 1 - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/airless, -/area/aquila/cockpit) -"ha" = ( -/obj/effect/paint/hull, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/wall/titanium, -/area/aquila/power) -"hb" = ( -/obj/machinery/door/airlock/hatch{ - name = "Cockpit" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/door/firedoor, -/turf/simulated/floor/tiled/steel_ridged, -/area/aquila/cockpit) -"hc" = ( -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/porta_turret{ - dir = 8; - enabled = 0; - lethal = 1 - }, -/turf/simulated/floor/airless, -/area/aquila/cockpit) -"hg" = ( -/obj/machinery/rotating_alarm/security_alarm{ - dir = 4 - }, -/turf/space, -/area/space) -"hi" = ( -/obj/effect/floor_decal/industrial/outline/grey, -/obj/structure/table/rack{ - dir = 8 - }, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 8 - }, -/obj/item/tank/oxygen_emergency_double, -/obj/item/tank/oxygen_emergency_double, -/turf/simulated/floor/tiled/dark/monotile, -/area/aux_eva) -"hj" = ( -/obj/machinery/light{ - dir = 8; - icon_state = "tube1" - }, -/turf/simulated/floor/tiled/monotile, -/area/crew_quarters/heads/office/rd) -"hn" = ( -/turf/simulated/floor/tiled/dark, -/area/bridge) -"hq" = ( -/turf/simulated/wall/prepainted, -/area/bridge/meeting_room) -"hs" = ( -/turf/simulated/wall/r_wall/prepainted, -/area/bridge/meeting_room) -"hu" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 1 - }, -/obj/effect/floor_decal/corner/blue{ - dir = 8 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/bridge/fore) -"hx" = ( -/obj/structure/sign/warning/high_voltage{ - dir = 1 - }, -/turf/simulated/wall/prepainted, -/area/crew_quarters/heads/office/ce) -"hz" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/door/airlock/engineering{ - id_tag = "cedoor"; - name = "Chief Engineer"; - secured_wires = 1 - }, -/obj/structure/disposalpipe/segment, -/obj/machinery/door/firedoor, -/turf/simulated/floor/tiled/monotile, -/area/crew_quarters/heads/office/ce) -"hA" = ( -/obj/structure/cable/green{ - d2 = 8; - icon_state = "0-8" - }, -/obj/effect/wallframe_spawn/reinforced/polarized{ - id = "ce_windows" - }, -/turf/simulated/floor/plating, -/area/crew_quarters/heads/office/ce) -"hC" = ( -/turf/simulated/wall/r_wall/prepainted, -/area/hallway/primary/bridge/fore) -"hE" = ( -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/effect/floor_decal/industrial/warning/fulltile, -/turf/simulated/floor/tiled, -/area/hallway/primary/bridge/fore) -"hF" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/door/blast/shutters{ - density = 0; - dir = 2; - icon_state = "shutter0"; - id_tag = "bridge_hallway_shutters"; - name = "Bridge Deck Hallway Shutters"; - opacity = 0 - }, -/obj/effect/floor_decal/corner/red/mono, -/turf/simulated/floor/tiled/monotile, -/area/hallway/primary/bridge/fore) -"hH" = ( -/obj/machinery/camera/network/command{ - c_tag = "Bridge Exterior"; - dir = 8 - }, -/obj/structure/lattice, -/turf/space, -/area/space) -"hI" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden{ - dir = 1 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/hallway/primary/bridge/aft) -"hJ" = ( -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/hallway/primary/bridge/aft) -"hK" = ( -/obj/machinery/atmospherics/unary/vent_pump/high_volume/airlock{ - dir = 8; - id_tag = "bridge_eva_pump" - }, -/obj/effect/floor_decal/techfloor{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/hallway/primary/bridge/aft) -"hL" = ( -/obj/machinery/camera/network/aquila{ - c_tag = "Aquila - Crew Compartment" - }, -/obj/structure/bed/chair/shuttle/blue{ - dir = 4 - }, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 4 - }, -/obj/item/device/radio/intercom{ - dir = 4; - pixel_x = -21 - }, -/obj/machinery/firealarm{ - pixel_y = 24 - }, -/turf/simulated/floor/tiled/techfloor, -/area/aquila/crew) -"hM" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/effect/floor_decal/techfloor{ - dir = 8 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/aquila/crew) -"hN" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 4 - }, -/obj/effect/floor_decal/corner/blue{ - dir = 5 - }, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/cable/cyan{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/turf/simulated/floor/tiled/dark, -/area/aquila/crew) -"hO" = ( -/obj/machinery/power/apc/shuttle/aquila{ - dir = 1; - name = "north bump"; - pixel_y = 24 - }, -/obj/structure/cable/cyan{ - d2 = 8; - icon_state = "0-8" - }, -/obj/structure/bed/chair/shuttle/blue{ - dir = 8 - }, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 8 - }, -/obj/machinery/alarm{ - dir = 8; - pixel_x = 24 - }, -/turf/simulated/floor/tiled/techfloor, -/area/aquila/crew) -"hR" = ( -/obj/effect/floor_decal/industrial/hatch/yellow, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/airless, -/area/space) -"hU" = ( -/obj/structure/bed/chair/padded/blue, -/obj/effect/floor_decal/corner/blue{ - dir = 6 - }, -/obj/structure/sign/double/solgovflag/left{ - dir = 8; - pixel_x = 32 - }, -/turf/simulated/floor/tiled/dark, -/area/crew_quarters/heads/office/sea) -"hV" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/sol{ - id_tag = "starboardbridgedoor"; - name = "Bridge"; - secured_wires = 1 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/bridge) -"hW" = ( -/obj/structure/bed/chair/padded/green{ - dir = 8 - }, -/turf/simulated/floor/carpet/green, -/area/crew_quarters/heads/office/cl/backroom) -"ia" = ( -/obj/machinery/flasher{ - pixel_x = 32; - pixel_y = -32 - }, -/obj/item/device/radio/intercom/locked/ai_private{ - dir = 1; - pixel_y = -22 - }, -/turf/simulated/floor/bluegrid, -/area/turret_protected/ai) -"ib" = ( -/obj/item/device/radio/intercom/locked/ai_private{ - dir = 1; - pixel_y = -22 - }, -/obj/machinery/hologram/holopad, -/turf/simulated/floor/bluegrid, -/area/turret_protected/ai_foyer) -"ic" = ( -/obj/effect/floor_decal/industrial/outline/grey, -/obj/machinery/computer/modular/preset/cardslot/command, -/obj/machinery/camera/all/command{ - c_tag = "AI Core - Starboard" - }, -/turf/simulated/floor/tiled/dark, -/area/turret_protected/ai) -"id" = ( -/obj/machinery/door/blast/shutters{ - density = 0; - dir = 2; - icon_state = "shutter0"; - id_tag = "heads_meeting"; - name = "Meeting Room Window Shutters"; - opacity = 0 - }, -/obj/structure/cable/green{ - d2 = 8; - icon_state = "0-8" - }, -/obj/effect/wallframe_spawn/reinforced/polarized{ - id = "meeting_windows" - }, -/turf/simulated/floor/plating, -/area/bridge/meeting_room) -"ie" = ( -/turf/simulated/wall/prepainted, -/area/crew_quarters/heads/office/ce) -"if" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/bluegrid, -/area/turret_protected/ai_foyer) -"ig" = ( -/obj/structure/filingcabinet/chestdrawer{ - dir = 1 - }, -/obj/item/folder/blue, -/obj/item/folder/red, -/obj/item/folder, -/obj/item/folder/nt, -/obj/item/folder/yellow, -/obj/item/folder/white, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/button/windowtint{ - id = "ce_windows"; - pixel_x = -24; - pixel_y = 6 - }, -/obj/machinery/light_switch{ - pixel_x = -24; - pixel_y = -6 - }, -/obj/item/paper/monitorkey, -/obj/machinery/firealarm{ - pixel_y = 24 - }, -/turf/simulated/floor/tiled/monotile, -/area/crew_quarters/heads/office/ce) -"ih" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/tiled, -/area/crew_quarters/heads/office/ce) -"ii" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 8 - }, -/turf/simulated/floor/tiled, -/area/crew_quarters/heads/office/ce) -"ij" = ( -/obj/structure/bed/chair/padded/yellow, -/obj/effect/floor_decal/corner/yellow{ - dir = 6 - }, -/turf/simulated/floor/tiled, -/area/crew_quarters/heads/office/ce) -"ik" = ( -/obj/machinery/photocopier/faxmachine{ - department = "Torch - Corporate Liasion" - }, -/obj/structure/table/woodentable_reinforced/walnut, -/obj/structure/noticeboard{ - pixel_x = 32 - }, -/obj/machinery/button/alternate/door/bolts{ - desc = "A remote control-switch for the office door."; - id_tag = "liaisondoor2"; - name = "CL's Rear Office Door Bolt Control"; - pixel_x = 6; - pixel_y = 26; - req_access = list("ACCESS_TORCH_CORPORATE_LIAISON") - }, -/obj/machinery/button/alternate/door/bolts{ - desc = "A remote control-switch for the office door."; - id_tag = "liaisondoor"; - name = "CL's Front Office Door Bolt Control"; - pixel_x = -5; - pixel_y = 26; - req_access = list("ACCESS_TORCH_CORPORATE_LIAISON") - }, -/obj/machinery/light_switch{ - pixel_x = 1; - pixel_y = 37 - }, -/turf/simulated/floor/carpet/green, -/area/crew_quarters/heads/office/cl) -"il" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 4 - }, -/turf/simulated/floor/tiled/monotile, -/area/hallway/primary/bridge/fore) -"im" = ( -/obj/structure/railing/mapped, -/turf/simulated/open, -/area/hallway/primary/bridge/fore) -"in" = ( -/obj/structure/sign/directions/engineering{ - pixel_z = 10 - }, -/obj/structure/sign/directions/evac, -/obj/structure/sign/directions/supply{ - pixel_z = -10 - }, -/turf/simulated/wall/prepainted, -/area/hallway/primary/bridge/fore) -"io" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/alarm{ - dir = 8; - pixel_x = 24 - }, -/obj/effect/floor_decal/industrial/warning/fulltile, -/turf/simulated/floor/tiled, -/area/hallway/primary/bridge/fore) -"ip" = ( -/obj/machinery/embedded_controller/radio/airlock/airlock_controller{ - dir = 4; - id_tag = "bridge_eva_airlock"; - name = "Engineering Airlock Console"; - pixel_x = -24; - req_access = list("ACCESS_MAINT"); - tag_airpump = "bridge_eva_pump"; - tag_chamber_sensor = "bridge_eva_sensor"; - tag_exterior_door = "bridge_eva_outer"; - tag_interior_door = "bridge_eva_inner" - }, -/obj/machinery/atmospherics/unary/vent_pump/high_volume/airlock{ - dir = 4; - id_tag = "bridge_eva_pump" - }, -/obj/effect/floor_decal/techfloor{ - dir = 8 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/hallway/primary/bridge/aft) -"iq" = ( -/obj/machinery/atmospherics/pipe/manifold4w/hidden, -/turf/simulated/floor/tiled/techfloor/grid, -/area/hallway/primary/bridge/aft) -"is" = ( -/obj/machinery/airlock_sensor{ - id_tag = "bridge_eva_sensor"; - pixel_x = 24 - }, -/obj/machinery/atmospherics/unary/vent_pump/high_volume/airlock{ - dir = 8; - id_tag = "bridge_eva_pump" - }, -/obj/effect/floor_decal/techfloor{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/hallway/primary/bridge/aft) -"it" = ( -/obj/machinery/suit_storage_unit/standard_unit, -/turf/simulated/floor/tiled/dark, -/area/aquila/suits) -"iu" = ( -/obj/machinery/alarm{ - dir = 8; - pixel_x = 24 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/obj/structure/cable/cyan{ - d2 = 2; - icon_state = "0-2" - }, -/obj/machinery/power/apc/shuttle/aquila{ - dir = 1; - name = "north bump"; - pixel_y = 24 - }, -/obj/effect/floor_decal/techfloor/corner, -/turf/simulated/floor/tiled/dark, -/area/aquila/suits) -"iv" = ( -/obj/structure/bed/chair/shuttle/blue{ - dir = 4 - }, -/obj/machinery/light{ - dir = 8 - }, -/turf/simulated/floor/tiled/techfloor, -/area/aquila/crew) -"iw" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/dark, -/area/aquila/crew) -"ix" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/cyan, -/turf/simulated/floor/plating, -/area/aquila/air) -"iy" = ( -/obj/structure/bed/chair/shuttle/blue{ - dir = 8 - }, -/obj/machinery/light{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor, -/area/aquila/crew) -"iz" = ( -/obj/machinery/door/blast/regular/open{ - density = 0; - icon_state = "pdoor0"; - id_tag = "aquila_shutters"; - name = "Protective Shutters"; - opacity = 0 - }, -/obj/effect/wallframe_spawn/reinforced/titanium, -/obj/effect/paint/hull, -/turf/simulated/floor/plating, -/area/aquila/air) -"iA" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/cyan{ - dir = 9 - }, -/turf/simulated/floor/plating, -/area/aquila/air) -"iB" = ( -/obj/effect/floor_decal/corner/blue{ - dir = 6 - }, -/obj/effect/floor_decal/spline/plain/beige{ - dir = 1 - }, -/turf/simulated/floor/tiled/dark, -/area/crew_quarters/heads/office/xo) -"iH" = ( -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/machinery/hologram/holopad, -/obj/structure/cable/cyan{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/turf/simulated/floor/bluegrid, -/area/turret_protected/ai) -"iI" = ( -/obj/structure/cable/green{ - d2 = 2; - icon_state = "0-2" - }, -/obj/structure/cable/green{ - d2 = 4; - icon_state = "0-4" - }, -/obj/effect/wallframe_spawn/reinforced/polarized{ - id = "bridge_starboard" - }, -/turf/simulated/floor/plating, -/area/bridge) -"iJ" = ( -/obj/structure/cable/green{ - d2 = 8; - icon_state = "0-8" - }, -/obj/effect/wallframe_spawn/reinforced/polarized{ - id = "bridge_starboard" - }, -/turf/simulated/floor/plating, -/area/bridge) -"iP" = ( -/obj/machinery/recharger/wallcharger{ - dir = 4; - pixel_x = -23; - pixel_y = -3 - }, -/obj/effect/floor_decal/industrial/warning, -/obj/machinery/disposal, -/obj/effect/floor_decal/industrial/hatch/yellow, -/obj/structure/disposalpipe/trunk{ - dir = 4 - }, -/turf/simulated/floor/tiled/monotile, -/area/crew_quarters/heads/office/ce) -"iR" = ( -/obj/machinery/hologram/holopad, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled, -/area/crew_quarters/heads/office/ce) -"iS" = ( -/obj/structure/table/standard{ - name = "plastic table frame" - }, -/obj/effect/floor_decal/corner/yellow{ - dir = 6 - }, -/obj/random_multi/single_item/memo_engineering, -/obj/item/storage/box/encryptionkey/engineering, -/turf/simulated/floor/tiled, -/area/crew_quarters/heads/office/ce) -"iU" = ( -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 4 - }, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/monotile, -/area/hallway/primary/bridge/fore) -"iV" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 1; - icon_state = "warning" - }, -/turf/simulated/floor/tiled/monotile, -/area/hallway/primary/bridge/fore) -"iX" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/monotile, -/area/hallway/primary/bridge/fore) -"iY" = ( -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/bridge/fore) -"iZ" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 8 - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/effect/floor_decal/corner/blue{ - dir = 6 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/bridge/fore) -"ja" = ( -/obj/machinery/oxygen_pump{ - pixel_x = -32 - }, -/obj/machinery/atmospherics/unary/vent_pump/high_volume/airlock{ - dir = 4; - id_tag = "bridge_eva_pump" - }, -/obj/effect/floor_decal/techfloor{ - dir = 8 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/hallway/primary/bridge/aft) -"jc" = ( -/obj/structure/hygiene/drain, -/turf/simulated/floor/tiled/freezer, -/area/crew_quarters/heads/cobed) -"je" = ( -/obj/structure/handrail{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark, -/area/aquila/storage) -"jf" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 4 - }, -/obj/machinery/firealarm{ - dir = 1; - pixel_y = -24 - }, -/obj/structure/handrail{ - dir = 1 - }, -/turf/simulated/floor/tiled/dark, -/area/aquila/suits) -"jg" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/machinery/light/small, -/obj/effect/floor_decal/techfloor{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark, -/area/aquila/suits) -"jh" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/floor_decal/techfloor{ - dir = 1 - }, -/obj/effect/floor_decal/techfloor, -/turf/simulated/floor/tiled/dark, -/area/aquila/crew) -"jj" = ( -/obj/effect/floor_decal/techfloor{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/aquila/crew) -"jk" = ( -/obj/structure/bed/chair/shuttle/blue{ - dir = 8 - }, -/obj/machinery/computer/ship/navigation/telescreen{ - pixel_x = 32 - }, -/turf/simulated/floor/tiled/techfloor, -/area/aquila/crew) -"jl" = ( -/obj/machinery/atmospherics/unary/tank/air{ - dir = 6 - }, -/obj/effect/floor_decal/industrial/outline/blue, -/turf/simulated/floor/plating, -/area/aquila/air) -"ju" = ( -/obj/effect/floor_decal/industrial/outline/grey, -/obj/machinery/porta_turret{ - dir = 8 - }, -/turf/simulated/floor/tiled/dark, -/area/turret_protected/ai) -"jv" = ( -/obj/structure/cable/cyan{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/bluegrid, -/area/turret_protected/ai_foyer) -"jw" = ( -/obj/effect/floor_decal/corner/blue, -/turf/simulated/floor/tiled/dark, -/area/bridge) -"jx" = ( -/obj/structure/railing/mapped, -/turf/simulated/floor/plating, -/area/maintenance/bridge/aftstarboard) -"jz" = ( -/obj/machinery/computer/modular/preset/cardslot/command, -/obj/effect/floor_decal/corner/blue/three_quarters{ - dir = 1 - }, -/obj/machinery/button/alternate/door{ - id_tag = "starboardbridgeaccess"; - name = "Bridge Access Starboard Door Control"; - pixel_x = 38; - pixel_y = 24; - req_access = list("ACCESS_BRIDGE") - }, -/obj/machinery/button/alternate/door{ - id_tag = "starboardbridgedoor"; - name = "Bridge Starboard Door Control"; - pixel_x = 26; - pixel_y = 24; - req_access = list("ACCESS_BRIDGE") - }, -/obj/machinery/button/windowtint{ - id = "bridge_starboard"; - pixel_x = 24; - pixel_y = 34 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/bridge) -"jA" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 8 - }, -/turf/simulated/floor/tiled/dark, -/area/bridge/storage) -"jB" = ( -/obj/machinery/door/blast/shutters{ - density = 0; - dir = 2; - icon_state = "shutter0"; - id_tag = "bridgehallway"; - name = "Bridge Interior Hallway Shutters"; - opacity = 0 - }, -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/effect/floor_decal/industrial/hatch/yellow, -/obj/machinery/door/firedoor, -/turf/simulated/floor/tiled/dark/monotile, -/area/bridge/hallway/port) -"jD" = ( -/obj/machinery/power/apc{ - dir = 4; - name = "east bump"; - pixel_x = 24 - }, -/obj/structure/cable/green{ - d2 = 8; - icon_state = "0-8" - }, -/obj/machinery/papershredder, -/obj/effect/floor_decal/corner/paleblue/diagonal, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled/white, -/area/crew_quarters/heads/office/cmo) -"jF" = ( -/obj/effect/floor_decal/industrial/outline/grey, -/obj/machinery/porta_turret{ - dir = 8 - }, -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 4 - }, -/obj/effect/floor_decal/industrial/warning/corner{ - icon_state = "warningcorner"; - dir = 8 - }, -/turf/simulated/floor/tiled/techmaint, -/area/turret_protected/ai_foyer) -"jH" = ( -/obj/effect/floor_decal/corner/blue{ - dir = 6 - }, -/obj/machinery/light{ - dir = 4; - icon_state = "tube1" - }, -/turf/simulated/floor/tiled/dark, -/area/bridge/meeting_room) -"jM" = ( -/obj/effect/floor_decal/corner/yellow{ - dir = 6 - }, -/obj/structure/bed/chair/comfy/yellow{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/crew_quarters/heads/office/ce) -"jO" = ( -/obj/machinery/door/blast/shutters{ - density = 0; - dir = 2; - icon_state = "shutter0"; - id_tag = "heads_meeting"; - name = "Meeting Room Window Shutters"; - opacity = 0 - }, -/obj/structure/cable/green{ - d2 = 8; - icon_state = "0-8" - }, -/obj/structure/cable/green{ - d2 = 4; - icon_state = "0-4" - }, -/obj/effect/wallframe_spawn/reinforced/polarized{ - id = "meeting_windows" - }, -/turf/simulated/floor/plating, -/area/bridge/meeting_room) -"jR" = ( -/obj/effect/floor_decal/corner/blue{ - dir = 9 - }, -/turf/simulated/floor/tiled/monotile, -/area/hallway/primary/bridge/fore) -"jS" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 8 - }, -/obj/structure/disposalpipe/junction, -/turf/simulated/floor/tiled, -/area/hallway/primary/bridge/fore) -"jT" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 8 - }, -/obj/effect/floor_decal/corner/blue{ - dir = 6 - }, -/obj/machinery/rotating_alarm/security_alarm{ - dir = 8 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/bridge/fore) -"jU" = ( -/obj/structure/sign/directions/bridge{ - dir = 8; - pixel_y = 3 - }, -/obj/structure/sign/directions/security{ - pixel_y = -4 - }, -/turf/simulated/wall/prepainted, -/area/hallway/primary/bridge/aft) -"jV" = ( -/turf/simulated/floor/tiled, -/area/hallway/primary/bridge/aft) -"jW" = ( -/obj/structure/sign/directions/infirmary{ - pixel_y = -4 - }, -/obj/structure/sign/directions/science{ - pixel_y = 3 - }, -/turf/simulated/wall/prepainted, -/area/hallway/primary/bridge/aft) -"jX" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/door/airlock/hatch/maintenance, -/obj/machinery/atmospherics/pipe/simple/hidden, -/obj/machinery/door/firedoor, -/obj/structure/catwalk, -/turf/simulated/floor/tiled/steel_ridged, -/area/maintenance/bridge/aftstarboard) -"jY" = ( -/obj/machinery/atmospherics/pipe/simple/hidden, -/obj/machinery/door/airlock/external{ - frequency = 1379; - icon_state = "closed"; - id_tag = "bridge_eva_inner"; - locked = 1; - name = "Bridge EVA Internal Access" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/hallway/primary/bridge/aft) -"jZ" = ( -/obj/machinery/door/airlock/external{ - frequency = 1379; - icon_state = "closed"; - id_tag = "bridge_eva_inner"; - locked = 1; - name = "Bridge EVA Internal Access" - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/hallway/primary/bridge/aft) -"kb" = ( -/obj/effect/paint/hull, -/turf/simulated/wall/titanium, -/area/aquila/suits) -"kc" = ( -/obj/machinery/atmospherics/unary/engine{ - dir = 1 - }, -/turf/simulated/floor/airless, -/area/aquila/storage) -"kd" = ( -/obj/machinery/flasher{ - pixel_x = 32; - pixel_y = 32 - }, -/obj/item/device/radio/intercom/locked/ai_private{ - pixel_y = 22 - }, -/turf/simulated/floor/bluegrid, -/area/turret_protected/ai) -"ke" = ( -/obj/structure/bed/chair/shuttle/blue{ - dir = 4 - }, -/obj/structure/bed/chair/shuttle/blue{ - dir = 4 - }, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 4 - }, -/obj/machinery/computer/cryopod{ - pixel_x = -32 - }, -/obj/random_multi/single_item/boombox, -/turf/simulated/floor/tiled/techfloor, -/area/aquila/crew) -"kf" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/effect/floor_decal/techfloor{ - dir = 8 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/aquila/crew) -"kg" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 8 - }, -/obj/effect/floor_decal/corner/lime{ - dir = 10 - }, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/dark, -/area/aquila/crew) -"kh" = ( -/obj/machinery/firealarm{ - dir = 4; - pixel_x = 26 - }, -/obj/machinery/cryopod, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 8 - }, -/turf/simulated/floor/tiled/techfloor, -/area/aquila/crew) -"ki" = ( -/obj/item/device/radio/intercom{ - dir = 4; - pixel_x = -21 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/cyan, -/turf/simulated/floor/plating, -/area/aquila/air) -"kj" = ( -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/machinery/ai_slipper, -/obj/structure/cable/green{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/turf/simulated/floor/bluegrid, -/area/turret_protected/ai_foyer) -"kn" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/bluegrid, -/area/turret_protected/ai_foyer) -"kv" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/disposalpipe/segment{ - dir = 8; - icon_state = "pipe-c" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/turf/simulated/floor/tiled/dark, -/area/crew_quarters/heads/office/sea) -"kw" = ( -/obj/effect/floor_decal/corner/blue{ - dir = 6 - }, -/obj/effect/floor_decal/corner/blue{ - dir = 9 - }, -/turf/simulated/floor/tiled/dark, -/area/bridge) -"kx" = ( -/obj/effect/floor_decal/corner/blue{ - dir = 6 - }, -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/tiled/dark, -/area/bridge/hallway/port) -"ky" = ( -/obj/machinery/status_display, -/turf/simulated/wall/prepainted, -/area/crew_quarters/heads/office/sgr) -"kA" = ( -/obj/structure/cable/green{ - d2 = 4; - icon_state = "0-4" - }, -/obj/structure/cable/green{ - d2 = 2; - icon_state = "0-2" - }, -/obj/effect/wallframe_spawn/reinforced/polarized{ - id = "xo_windows" - }, -/obj/machinery/door/blast/shutters{ - dir = 4; - id_tag = "hop_office"; - name = "XO Office Privacy Shutters" - }, -/turf/simulated/floor/plating, -/area/crew_quarters/heads/office/xo) -"kE" = ( -/obj/structure/lattice, -/obj/machinery/light/navigation/delay2, -/turf/space, -/area/space) -"kH" = ( -/obj/machinery/atmospherics/unary/vent_pump/high_volume{ - controlled = 0; - dir = 8; - icon_state = "map_vent_in"; - pressure_checks = 2; - pressure_checks_default = 2; - use_power = 1 - }, -/turf/simulated/floor/airless, -/area/aquila/air) -"kI" = ( -/obj/effect/floor_decal/corner/yellow{ - dir = 6 - }, -/obj/structure/table/standard{ - name = "plastic table frame" - }, -/obj/item/toy/desk/newtoncradle, -/turf/simulated/floor/tiled, -/area/crew_quarters/heads/office/ce) -"kJ" = ( -/turf/simulated/wall/prepainted, -/area/crew_quarters/heads/office/cmo) -"kK" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/effect/floor_decal/corner/blue{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/bridge/fore) -"kL" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/glass/civilian, -/turf/simulated/floor/tiled/steel_ridged, -/area/hallway/primary/bridge/fore) -"kM" = ( -/obj/effect/floor_decal/corner/blue/half{ - dir = 1 - }, -/turf/simulated/floor/tiled/monotile, -/area/hallway/primary/bridge/aft) -"kN" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/obj/effect/floor_decal/corner/blue{ - dir = 5 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/bridge/aft) -"kO" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden, -/obj/effect/floor_decal/corner/blue{ - dir = 5 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/bridge/aft) -"kP" = ( -/obj/structure/extinguisher_cabinet{ - pixel_y = 32 - }, -/obj/effect/floor_decal/corner/blue/half{ - dir = 1 - }, -/turf/simulated/floor/tiled/monotile, -/area/hallway/primary/bridge/aft) -"kQ" = ( -/obj/machinery/light{ - dir = 1 - }, -/obj/effect/floor_decal/corner/blue{ - dir = 5 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/bridge/aft) -"kR" = ( -/obj/machinery/atmospherics/pipe/simple/hidden, -/obj/machinery/access_button{ - command = "cycle_interior"; - frequency = 1379; - master_tag = "bridge_eva_airlock"; - name = "interior access button"; - pixel_x = -24; - pixel_y = 24; - req_access = list("ACCESS_MAINT") - }, -/obj/effect/floor_decal/corner/blue{ - dir = 5 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/bridge/aft) -"kS" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/obj/effect/floor_decal/corner/blue/mono, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/monotile, -/area/hallway/primary/bridge/aft) -"kT" = ( -/obj/effect/wallframe_spawn/reinforced, -/obj/structure/cable/green{ - d2 = 2; - icon_state = "0-2" - }, -/turf/simulated/floor/plating, -/area/hallway/primary/bridge/aft) -"kU" = ( -/obj/machinery/alarm{ - pixel_y = 24 - }, -/obj/effect/floor_decal/corner/blue/three_quarters{ - dir = 1 - }, -/obj/structure/closet/emcloset, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled, -/area/hallway/primary/bridge/aft) -"kV" = ( -/obj/structure/cable/green, -/obj/effect/wallframe_spawn/reinforced/polarized{ - id = "xo_windows" - }, -/obj/machinery/door/blast/shutters{ - dir = 4; - id_tag = "hop_office"; - name = "XO Office Privacy Shutters" - }, -/turf/simulated/floor/plating, -/area/crew_quarters/heads/office/xo) -"kW" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/cyan{ - dir = 5 - }, -/obj/machinery/light{ - dir = 8 - }, -/turf/simulated/floor/plating, -/area/aquila/air) -"kX" = ( -/obj/machinery/light_switch{ - pixel_x = -23; - pixel_y = 25 - }, -/obj/effect/floor_decal/corner/red/mono, -/obj/machinery/newscaster/security_unit{ - pixel_x = -32 - }, -/obj/machinery/disposal, -/obj/effect/floor_decal/industrial/hatch/yellow, -/obj/structure/disposalpipe/trunk{ - dir = 4 - }, -/obj/machinery/rotating_alarm/security_alarm{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/security/bridgecheck) -"la" = ( -/obj/machinery/firealarm{ - dir = 4; - pixel_x = 24 - }, -/obj/item/device/radio/intercom/locked/ai_private{ - dir = 1; - pixel_y = -22 - }, -/turf/simulated/floor/reinforced, -/area/turret_protected/ai_outer_chamber) -"lc" = ( -/obj/machinery/firealarm{ - dir = 4; - pixel_x = 24 - }, -/obj/item/device/radio/intercom/locked/ai_private{ - pixel_y = 22 - }, -/turf/simulated/floor/reinforced, -/area/turret_protected/ai_outer_chamber) -"lm" = ( -/obj/machinery/hologram/holopad/longrange, -/obj/effect/landmark{ - name = "lightsout" - }, -/obj/effect/floor_decal/corner/blue{ - dir = 6 - }, -/obj/effect/floor_decal/corner/blue{ - dir = 9 - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled/dark, -/area/bridge) -"ln" = ( -/obj/machinery/ai_status_display, -/turf/simulated/wall/r_wall/hull, -/area/turret_protected/ai_outer_chamber) -"lo" = ( -/obj/effect/floor_decal/scglogo, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/dark, -/area/bridge) -"lp" = ( -/obj/effect/paint/red, -/obj/machinery/atmospherics/pipe/simple/hidden/fuel{ - dir = 6 - }, -/turf/simulated/wall/titanium, -/area/aquila/power) -"lq" = ( -/obj/machinery/disposal, -/obj/effect/floor_decal/industrial/hatch/yellow, -/obj/structure/disposalpipe/trunk{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/crew_quarters/heads/office/cos) -"lt" = ( -/obj/structure/table/glass, -/obj/effect/floor_decal/corner/blue{ - dir = 9 - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/item/reagent_containers/food/drinks/glass2/coffeecup/SCG{ - pixel_x = -5; - pixel_y = 5 - }, -/obj/random_multi/single_item/memo_command, -/obj/random_multi/single_item/memo_supply, -/obj/random_multi/single_item/memo_medical, -/turf/simulated/floor/tiled/dark, -/area/bridge) -"lu" = ( -/obj/effect/floor_decal/spline/fancy/wood{ - dir = 1 - }, -/obj/structure/table/woodentable/walnut, -/obj/item/device/flashlight/lamp/green, -/turf/simulated/floor/wood/walnut, -/area/crew_quarters/heads/cobed) -"lx" = ( -/obj/effect/floor_decal/corner/blue{ - dir = 1 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/bridge/fore) -"ly" = ( -/obj/effect/floor_decal/corner/paleblue/diagonal, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/white, -/area/crew_quarters/heads/office/cmo) -"lA" = ( -/obj/structure/sign/warning/high_voltage{ - dir = 8 - }, -/turf/simulated/wall/prepainted, -/area/crew_quarters/heads/office/cmo) -"lB" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 8 - }, -/obj/effect/catwalk_plated, -/obj/machinery/camera/network/bridge{ - c_tag = "Command Hallway - Center Aft"; - dir = 4 - }, -/obj/effect/landmark{ - name = "lightsout" - }, -/obj/structure/disposalpipe/segment{ - dir = 1; - icon_state = "pipe-c" - }, -/obj/machinery/firealarm{ - dir = 8; - pixel_x = -24 - }, -/turf/simulated/floor/plating, -/area/hallway/primary/bridge/fore) -"lC" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/disposalpipe/sortjunction{ - dir = 4; - name = "Chief Medical Officer"; - sort_type = "Chief Medical Officer" - }, -/obj/machinery/tele_beacon, -/turf/simulated/floor/tiled, -/area/hallway/primary/bridge/fore) -"lD" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/effect/wallframe_spawn/reinforced, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/hallway/primary/bridge/fore) -"lE" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/floor_decal/industrial/shutoff{ - dir = 4 - }, -/obj/machinery/atmospherics/valve/shutoff/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/valve/shutoff/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled/monotile, -/area/hallway/primary/bridge/aft) -"lH" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, -/obj/effect/catwalk_plated, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/hallway/primary/bridge/aft) -"lL" = ( -/obj/effect/wallframe_spawn/reinforced, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/cable/green{ - d2 = 2; - icon_state = "0-2" - }, -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/plating, -/area/bridge) -"lN" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/floor_decal/corner/blue/half{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/turf/simulated/floor/tiled/monotile, -/area/hallway/primary/bridge/aft) -"lO" = ( -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 4 - }, -/obj/machinery/door/airlock/glass/command{ - name = "Aquila Dock"; - secured_wires = 1 - }, -/obj/machinery/door/firedoor, -/obj/structure/cable/green{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/steel_ridged, -/area/hallway/primary/bridge/aft) -"lR" = ( -/obj/machinery/airlock_sensor{ - frequency = 1331; - id_tag = "aquila_shuttle_dock_sensor"; - pixel_y = 24 - }, -/obj/machinery/atmospherics/unary/vent_pump/high_volume/shuttle{ - dir = 8; - id_tag = "aquila_shuttle_dock_pump" - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/floor_decal/techfloor{ - dir = 1 - }, -/obj/effect/floor_decal/techfloor, -/obj/item/device/radio/intercom/hailing{ - dir = 1; - pixel_y = -28 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/hallway/primary/bridge/aft) -"lS" = ( -/obj/effect/floor_decal/scglogo{ - dir = 4; - icon_state = "bottom-right" - }, -/turf/simulated/floor/tiled/dark, -/area/bridge/disciplinary_board_room) -"lT" = ( -/obj/item/taperoll/bog, -/turf/simulated/floor/tiled/freezer, -/area/crew_quarters/heads/cobed) -"lW" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/catwalk, -/obj/structure/cable/green{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/structure/disposalpipe/segment{ - dir = 1; - icon_state = "pipe-c" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/turf/simulated/floor/plating, -/area/maintenance/bridge/foreport) -"lX" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 4 - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 8; - icon_state = "warning" - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/aquila/airlock) -"lY" = ( -/turf/simulated/wall/r_wall/prepainted, -/area/turret_protected/ai_outer_chamber) -"lZ" = ( -/obj/machinery/door/airlock/hatch{ - name = "Passenger Seating" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/door/firedoor, -/obj/machinery/door/firedoor, -/turf/simulated/floor/tiled/steel_ridged, -/area/aquila/airlock) -"mb" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/turf/simulated/floor/plating, -/area/aquila/air) -"mc" = ( -/obj/structure/cable/green, -/obj/machinery/door/firedoor, -/obj/effect/wallframe_spawn/reinforced/hull, -/obj/machinery/door/blast/regular/open{ - dir = 4; - id_tag = "bridge blast"; - name = "Bridge Blast Doors" - }, -/turf/simulated/floor/plating, -/area/bridge) -"mk" = ( -/obj/effect/floor_decal/industrial/outline/grey, -/obj/machinery/porta_turret{ - dir = 8 - }, -/turf/simulated/floor/tiled/techmaint, -/area/turret_protected/ai_outer_chamber) -"mo" = ( -/obj/machinery/light{ - dir = 1 - }, -/turf/simulated/floor/bluegrid, -/area/turret_protected/ai_foyer) -"mp" = ( -/obj/structure/table/woodentable/walnut, -/obj/item/storage/briefcase{ - pixel_x = 3 - }, -/obj/item/hand_labeler, -/obj/item/device/taperecorder{ - pixel_x = -4; - pixel_y = 2 - }, -/obj/item/device/camera{ - pixel_x = 3; - pixel_y = -4 - }, -/obj/structure/sign/double/solgovflag/right{ - dir = 1; - pixel_y = -32 - }, -/turf/simulated/floor/carpet/blue2, -/area/crew_quarters/heads/office/sgr) -"mx" = ( -/obj/effect/paint/red, -/obj/machinery/atmospherics/pipe/simple/hidden/fuel{ - dir = 5 - }, -/turf/simulated/wall/titanium, -/area/aquila/storage) -"mz" = ( -/obj/structure/table/standard{ - name = "plastic table frame" - }, -/obj/effect/floor_decal/corner/blue/mono, -/obj/item/stamp/sea, -/obj/machinery/button/alternate/door{ - desc = "A remote control-switch for the office door."; - id_tag = "seaforedoor"; - name = "SEA's Office Door Control"; - pixel_x = -6; - pixel_y = -25; - req_access = list("ACCESS_TORCH_SENIOR_ADVISOR") - }, -/obj/machinery/button/windowtint{ - id = "sea_windows"; - pixel_x = 9; - pixel_y = -24 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/crew_quarters/heads/office/sea) -"mA" = ( -/obj/structure/cable/green{ - d2 = 8; - icon_state = "0-8" - }, -/obj/structure/cable/green{ - d2 = 4; - icon_state = "0-4" - }, -/obj/effect/wallframe_spawn/reinforced, -/obj/machinery/door/blast/shutters{ - density = 0; - dir = 2; - icon_state = "shutter0"; - id_tag = "bridge_checkpoint_shutters"; - name = "Bridge Deck Checkpoint Shutters"; - opacity = 0 - }, -/turf/simulated/floor/plating, -/area/security/bridgecheck) -"mE" = ( -/turf/simulated/wall/prepainted, -/area/crew_quarters/heads/office/cos) -"mG" = ( -/obj/machinery/papershredder, -/obj/machinery/recharger/wallcharger{ - dir = 4; - pixel_x = -23; - pixel_y = -3 - }, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/floor/tiled/dark/monotile, -/area/crew_quarters/heads/office/cos) -"mH" = ( -/obj/machinery/power/apc{ - dir = 1; - name = "north bump"; - pixel_y = 24 - }, -/obj/structure/cable/green{ - d2 = 2; - icon_state = "0-2" - }, -/obj/machinery/photocopier, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/floor/tiled/dark/monotile, -/area/crew_quarters/heads/office/cos) -"mI" = ( -/obj/structure/closet/secure_closet/cos, -/obj/effect/floor_decal/industrial/outline/grey, -/obj/machinery/light{ - dir = 1 - }, -/obj/machinery/camera/network/command{ - c_tag = "Chief of Security - Office"; - network = list("Command","Security") - }, -/obj/machinery/button/alternate/door{ - desc = "A remote control-switch for the office door."; - id_tag = "cosdoor"; - name = "COS's Office Door Control"; - pixel_y = 27; - req_access = list("ACCESS_HEAD_OF_SECURITY") - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/crew_quarters/heads/office/cos) -"mJ" = ( -/obj/structure/table/standard{ - name = "plastic table frame" - }, -/obj/effect/floor_decal/corner/red/mono, -/obj/machinery/newscaster/security_unit{ - pixel_y = 32 - }, -/obj/item/device/radio/intercom{ - dir = 8; - pixel_x = 20 - }, -/obj/machinery/photocopier/faxmachine{ - department = "Torch - Chief of Security" - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/crew_quarters/heads/office/cos) -"mN" = ( -/obj/structure/cable/green{ - d2 = 8; - icon_state = "0-8" - }, -/obj/effect/wallframe_spawn/reinforced, -/obj/machinery/door/blast/shutters{ - density = 0; - dir = 2; - icon_state = "shutter0"; - id_tag = "bridge_checkpoint_shutters"; - name = "Bridge Deck Checkpoint Shutters"; - opacity = 0 - }, -/turf/simulated/floor/plating, -/area/security/bridgecheck) -"mO" = ( -/obj/structure/sign/warning/high_voltage{ - dir = 4 - }, -/turf/simulated/wall/prepainted, -/area/security/bridgecheck) -"mQ" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/effect/floor_decal/corner/blue, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/tiled, -/area/hallway/primary/bridge/fore) -"mS" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/effect/floor_decal/corner/paleblue{ - dir = 10 - }, -/turf/simulated/floor/tiled/monotile, -/area/hallway/primary/bridge/aft) -"mT" = ( -/obj/structure/table/woodentable/walnut, -/turf/simulated/floor/wood/walnut, -/area/crew_quarters/heads/cobed) -"mU" = ( -/obj/effect/landmark/start{ - name = "AI" - }, -/obj/machinery/requests_console{ - department = "AI"; - departmentType = 5; - pixel_x = -32; - pixel_y = -32 - }, -/obj/machinery/newscaster/security_unit{ - pixel_x = 32; - pixel_y = -32 - }, -/obj/machinery/button/blast_door{ - desc = "A remote control-switch for the AI core maintenance door."; - id_tag = "AICore"; - name = "AI Core Shutter Control"; - pixel_x = 24; - pixel_y = 24 - }, -/obj/machinery/flasher{ - pixel_x = 24; - pixel_y = 38 - }, -/obj/machinery/turretid/stun{ - check_synth = 1; - name = "AI Chamber turret control"; - pixel_x = -32; - pixel_y = 32 - }, -/obj/item/device/radio/intercom/locked/ai_private{ - dir = 1; - pixel_y = -22 - }, -/obj/item/device/radio/intercom{ - dir = 4; - pixel_x = -21 - }, -/obj/item/device/radio/intercom/custom{ - pixel_y = 22 - }, -/obj/structure/cable/cyan{ - d2 = 4; - icon_state = "0-4" - }, -/turf/simulated/floor/greengrid, -/area/turret_protected/ai) -"mV" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 1 - }, -/obj/machinery/alarm{ - dir = 1; - pixel_y = -28 - }, -/obj/effect/floor_decal/corner/paleblue{ - dir = 10 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/bridge/aft) -"mW" = ( -/obj/machinery/camera/network/bridge{ - c_tag = "Bridge Hallway - Lift"; - dir = 1 - }, -/obj/machinery/power/apc{ - name = "south bump"; - pixel_y = -28 - }, -/obj/structure/cable/green, -/obj/effect/floor_decal/corner/blue/half, -/turf/simulated/floor/tiled/monotile, -/area/hallway/primary/bridge/aft) -"mX" = ( -/obj/effect/floor_decal/corner/blue{ - dir = 10 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/bridge/aft) -"mY" = ( -/obj/structure/disposalpipe/segment, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/effect/floor_decal/corner/blue{ - dir = 10 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/bridge/aft) -"mZ" = ( -/obj/structure/extinguisher_cabinet{ - pixel_y = -32 - }, -/obj/effect/floor_decal/corner/blue/half, -/obj/machinery/rotating_alarm/security_alarm{ - dir = 1 - }, -/turf/simulated/floor/tiled/monotile, -/area/hallway/primary/bridge/aft) -"na" = ( -/obj/machinery/firealarm{ - dir = 1; - pixel_y = -24 - }, -/obj/effect/floor_decal/corner/blue{ - dir = 10 - }, -/obj/machinery/camera/network/bridge{ - c_tag = "Bridge Hallway - Aft"; - dir = 1 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/bridge/aft) -"nb" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/effect/catwalk_plated, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/hallway/primary/bridge/aft) -"nc" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 1 - }, -/obj/structure/closet/emcloset, -/obj/effect/floor_decal/corner/blue/mono, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled/monotile, -/area/hallway/primary/bridge/aft) -"nd" = ( -/obj/effect/wallframe_spawn/reinforced, -/obj/structure/cable/green, -/turf/simulated/floor/plating, -/area/hallway/primary/bridge/aft) -"ne" = ( -/obj/item/device/radio/intercom{ - dir = 1; - pixel_y = -28 - }, -/obj/effect/floor_decal/corner/blue/three_quarters{ - dir = 4 - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/structure/closet/secure_closet/crew, -/obj/random/maintenance/solgov/clean, -/obj/random/maintenance/solgov/clean, -/obj/random/maintenance/solgov/clean, -/obj/machinery/light{ - dir = 4; - icon_state = "tube1" - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/bridge/aft) -"nf" = ( -/obj/effect/floor_decal/corner/blue/mono, -/obj/machinery/alarm{ - pixel_y = 24 - }, -/obj/machinery/computer/ship/sensors, -/turf/simulated/floor/tiled/dark/monotile, -/area/bridge) -"ni" = ( -/obj/structure/handrail{ - dir = 1 - }, -/obj/effect/floor_decal/techfloor, -/obj/item/device/radio/intercom/hailing{ - dir = 1; - pixel_y = -28 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply, -/turf/simulated/floor/tiled/techfloor/grid, -/area/aquila/airlock) -"nj" = ( -/obj/machinery/atmospherics/unary/vent_pump/on, -/turf/simulated/floor/tiled, -/area/crew_quarters/heads/office/rd) -"nk" = ( -/obj/machinery/access_button{ - command = "cycle_interior"; - frequency = 1331; - master_tag = "aquila_shuttle"; - name = "interior access button"; - pixel_x = -24; - pixel_y = -21; - req_access = newlist() - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 1 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/aquila/airlock) -"nl" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 8 - }, -/obj/structure/handrail{ - dir = 8 - }, -/obj/machinery/camera/network/aquila{ - c_tag = "Aquila - Docking Port"; - dir = 8 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/aquila/airlock) -"nm" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 4 - }, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/effect/overmap/visitable/ship/landable/aquila, -/turf/simulated/floor/tiled/dark, -/area/aquila/airlock) -"nn" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark, -/area/aquila/airlock) -"no" = ( -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/machinery/firealarm{ - dir = 1; - pixel_y = -24 - }, -/obj/effect/floor_decal/corner/orange/half{ - dir = 8 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/aquila/airlock) -"np" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 1 - }, -/obj/machinery/firealarm{ - dir = 1; - pixel_y = -26 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/aquila/air) -"nq" = ( -/obj/machinery/camera/network/aquila{ - c_tag = "Aquila - Seating"; - dir = 1 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, -/obj/effect/floor_decal/industrial/warning{ - dir = 1 - }, -/obj/structure/table/rack, -/obj/random/toolbox, -/turf/simulated/floor/tiled/dark/monotile, -/area/aquila/air) -"nr" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 10; - icon_state = "warning" - }, -/turf/simulated/floor/reinforced/airless, -/area/space) -"ns" = ( -/obj/structure/table/woodentable_reinforced/walnut, -/obj/machinery/alarm{ - dir = 8; - pixel_x = 24 - }, -/obj/machinery/camera/network/command{ - c_tag = "Corporate Liaison - Office"; - dir = 8 - }, -/obj/item/storage/box/donut, -/turf/simulated/floor/carpet/green, -/area/crew_quarters/heads/office/cl) -"nt" = ( -/obj/machinery/camera/all/command{ - c_tag = "AI Core - Fore"; - dir = 4 - }, -/obj/machinery/hologram/holopad, -/turf/simulated/floor/bluegrid, -/area/turret_protected/ai) -"nu" = ( -/obj/structure/table/glass, -/obj/effect/floor_decal/corner/blue{ - dir = 5 - }, -/obj/item/device/binoculars, -/turf/simulated/floor/tiled/dark/monotile, -/area/bridge) -"nv" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 1 - }, -/turf/simulated/floor/carpet/green, -/area/crew_quarters/heads/office/cl/backroom) -"nE" = ( -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 1; - icon_state = "warningcorner" - }, -/turf/simulated/floor/reinforced/airless, -/area/space) -"nG" = ( -/obj/structure/filingcabinet/chestdrawer{ - dir = 1 - }, -/obj/item/folder/blue, -/obj/item/folder/red, -/obj/item/folder, -/obj/item/folder/nt, -/obj/item/folder/yellow, -/obj/item/folder/white, -/obj/effect/floor_decal/corner/paleblue/diagonal, -/obj/structure/noticeboard{ - pixel_y = -30 - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled/white, -/area/crew_quarters/heads/office/cmo) -"nH" = ( -/obj/effect/floor_decal/corner/blue{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark, -/area/bridge) -"nI" = ( -/obj/machinery/door/firedoor, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/door/airlock/sol{ - name = "Deliberation Room" - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/bridge/disciplinary_board_room/deliberation) -"nJ" = ( -/obj/machinery/computer/modular/preset/cardslot/command{ - dir = 1; - icon_state = "console" - }, -/obj/effect/floor_decal/corner/blue/three_quarters{ - dir = 4 - }, -/obj/machinery/button/alternate/door{ - id_tag = "portbridgeaccess"; - name = "Bridge Access Port Door Control"; - pixel_x = 38; - pixel_y = -26; - req_access = list("ACCESS_BRIDGE") - }, -/obj/machinery/button/alternate/door{ - id_tag = "portbridgedoor"; - name = "Bridge Port Door Control"; - pixel_x = 26; - pixel_y = -26; - req_access = list("ACCESS_BRIDGE") - }, -/obj/machinery/button/windowtint{ - id = "bridge_port"; - pixel_x = 24; - pixel_y = -35 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/bridge) -"nK" = ( -/obj/machinery/atmospherics/binary/pump/on{ - dir = 1; - target_pressure = 200 - }, -/obj/machinery/button/alternate/door/bolts{ - id_tag = "bridgesafe_back"; - name = "Emergency Exit door-control"; - pixel_x = 25; - pixel_y = -25 - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/effect/floor_decal/techfloor/orange, -/turf/simulated/floor/tiled/techfloor/grid, -/area/crew_quarters/safe_room/bridge) -"nL" = ( -/obj/machinery/access_button{ - command = "cycle_exterior"; - frequency = 1379; - master_tag = "ai_core_airlock"; - name = "exterior access button"; - pixel_x = -24; - pixel_y = 0; - req_access = list("ACCESS_AI_UPLOAD") - }, -/obj/machinery/light{ - icon_state = "tube1"; - dir = 8 - }, -/turf/simulated/floor/bluegrid, -/area/turret_protected/ai_foyer) -"nM" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 1 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/bridge/fore) -"nR" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/blue{ - dir = 4; - icon_state = "map" - }, -/obj/machinery/ai_slipper, -/turf/simulated/floor/tiled/techmaint, -/area/turret_protected/ai_foyer) -"nU" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/unary/vent_pump/on, -/obj/structure/disposalpipe/segment{ - dir = 2; - icon_state = "pipe-c" - }, -/turf/simulated/floor/tiled/dark, -/area/crew_quarters/heads/office/cos) -"nV" = ( -/obj/effect/floor_decal/corner/red{ - dir = 6 - }, -/obj/structure/bed/chair/comfy/red, -/turf/simulated/floor/tiled/dark/monotile, -/area/crew_quarters/heads/office/cos) -"nZ" = ( -/obj/structure/table/standard{ - name = "plastic table frame" - }, -/obj/item/device/binoculars, -/obj/item/crowbar/prybar, -/obj/random/maintenance/solgov/clean, -/obj/machinery/button/blast_door{ - desc = "A remote control-switch for shutters."; - id_tag = "bridge_checkpoint_shutters"; - name = "Checkpoint Window Shutters"; - pixel_x = 26; - pixel_y = 25 - }, -/obj/machinery/button/blast_door{ - desc = "A remote control-switch for shutters."; - id_tag = "bridge_hallway_shutters"; - name = "Hallway Checkpoint Shutters"; - pixel_x = 26; - pixel_y = 37 - }, -/obj/effect/floor_decal/corner/red/half{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/security/bridgecheck) -"oa" = ( -/obj/effect/floor_decal/industrial/hatch/yellow, -/obj/structure/cable/yellow, -/obj/machinery/power/tracker, -/turf/simulated/floor/reinforced/airless, -/area/space) -"ob" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/bridge/fore) -"oc" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/effect/floor_decal/corner/blue{ - dir = 6 - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/tiled, -/area/hallway/primary/bridge/fore) -"oe" = ( -/obj/structure/cable/green{ - d2 = 4; - icon_state = "0-4" - }, -/obj/structure/cable/green, -/obj/effect/wallframe_spawn/reinforced/polarized{ - id = "cmo_windows" - }, -/turf/simulated/floor/plating, -/area/crew_quarters/heads/office/cmo) -"of" = ( -/obj/structure/cable/green{ - d2 = 4; - icon_state = "0-4" - }, -/obj/structure/cable/green{ - d2 = 8; - icon_state = "0-8" - }, -/obj/effect/wallframe_spawn/reinforced/polarized{ - id = "cmo_windows" - }, -/turf/simulated/floor/plating, -/area/crew_quarters/heads/office/cmo) -"og" = ( -/obj/structure/cable/green{ - d2 = 8; - icon_state = "0-8" - }, -/obj/effect/wallframe_spawn/reinforced/polarized{ - id = "cmo_windows" - }, -/turf/simulated/floor/plating, -/area/crew_quarters/heads/office/cmo) -"oh" = ( -/turf/simulated/wall/prepainted, -/area/maintenance/bridge/aftport) -"oi" = ( -/obj/structure/disposalpipe/segment, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/door/airlock/hatch/maintenance, -/obj/machinery/door/firedoor, -/turf/simulated/floor/tiled/steel_ridged, -/area/maintenance/bridge/aftport) -"ol" = ( -/obj/effect/wallframe_spawn/reinforced, -/obj/structure/cable/green{ - d2 = 8; - icon_state = "0-8" - }, -/turf/simulated/floor/plating, -/area/aux_eva) -"on" = ( -/turf/simulated/wall/prepainted, -/area/aux_eva) -"os" = ( -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/firealarm{ - dir = 1; - pixel_x = 0; - pixel_y = -24 - }, -/obj/machinery/ai_slipper, -/turf/simulated/floor/bluegrid, -/area/turret_protected/ai_foyer) -"ox" = ( -/obj/structure/cable/green, -/obj/structure/cable/green{ - d2 = 4; - icon_state = "0-4" - }, -/obj/effect/wallframe_spawn/reinforced/polarized{ - id = "bridge_port" - }, -/turf/simulated/floor/plating, -/area/bridge) -"oy" = ( -/obj/structure/cable/green{ - d2 = 8; - icon_state = "0-8" - }, -/obj/effect/wallframe_spawn/reinforced/polarized{ - id = "bridge_port" - }, -/turf/simulated/floor/plating, -/area/bridge) -"oz" = ( -/obj/effect/floor_decal/corner/blue{ - dir = 6 - }, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 8 - }, -/turf/simulated/floor/tiled/dark, -/area/crew_quarters/heads/office/xo) -"oA" = ( -/obj/structure/lattice, -/obj/machinery/camera/network/command{ - c_tag = "Bridge Exterior - Starboard" - }, -/turf/space, -/area/space) -"oB" = ( -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/bridge/foreport) -"oC" = ( -/obj/machinery/firealarm{ - dir = 8; - pixel_x = -24 - }, -/obj/machinery/ai_slipper, -/turf/simulated/floor/bluegrid, -/area/turret_protected/ai) -"oE" = ( -/obj/item/device/flashlight/lamp, -/obj/structure/table/woodentable/walnut, -/obj/item/device/radio/intercom{ - dir = 8; - pixel_x = 20 - }, -/turf/simulated/floor/carpet/green, -/area/crew_quarters/heads/office/cl/backroom) -"oF" = ( -/obj/machinery/hologram/holopad, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled/dark, -/area/crew_quarters/heads/office/cos) -"oI" = ( -/obj/machinery/light_switch{ - pixel_x = 23; - pixel_y = -23 - }, -/obj/effect/floor_decal/corner/blue{ - dir = 6 - }, -/obj/machinery/papershredder, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/dark, -/area/crew_quarters/heads/office/xo) -"oJ" = ( -/obj/machinery/door/blast/shutters{ - density = 0; - dir = 2; - icon_state = "shutter0"; - id_tag = "heads_meeting"; - name = "Meeting Room Window Shutters"; - opacity = 0 - }, -/obj/structure/cable/green{ - d2 = 4; - icon_state = "0-4" - }, -/obj/effect/wallframe_spawn/reinforced/polarized{ - id = "meeting_windows" - }, -/obj/structure/cable/green{ - d2 = 2; - icon_state = "0-2" - }, -/turf/simulated/floor/plating, -/area/bridge/meeting_room) -"oK" = ( -/obj/effect/wallframe_spawn/reinforced, -/obj/machinery/door/blast/shutters{ - density = 0; - dir = 4; - icon_state = "shutter0"; - id_tag = "bridge_checkpoint_shutters"; - name = "Bridge Deck Checkpoint Shutters"; - opacity = 0 - }, -/obj/structure/cable/green{ - d2 = 4; - icon_state = "0-4" - }, -/turf/simulated/floor/plating, -/area/security/bridgecheck) -"oO" = ( -/obj/effect/floor_decal/corner/paleblue/diagonal, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/light_switch{ - pixel_x = -23; - pixel_y = 25 - }, -/turf/simulated/floor/tiled/white, -/area/crew_quarters/heads/office/cmo) -"oP" = ( -/obj/effect/floor_decal/corner/paleblue/diagonal, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 8 - }, -/turf/simulated/floor/tiled/white, -/area/crew_quarters/heads/office/cmo) -"oQ" = ( -/obj/item/device/radio/intercom/locked/ai_private{ - dir = 4; - pixel_x = -22 - }, -/obj/machinery/light{ - icon_state = "tube1"; - dir = 8 - }, -/turf/simulated/floor/bluegrid, -/area/turret_protected/ai) -"oR" = ( -/obj/effect/floor_decal/corner/paleblue/diagonal, -/obj/structure/flora/pottedplant/overgrown, -/obj/structure/cable/green{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/item/device/radio/intercom{ - dir = 8; - pixel_x = 20 - }, -/obj/machinery/camera/network/command{ - c_tag = "Chief Medical Officer - Office"; - network = list("Command","Medical") - }, -/obj/machinery/light{ - dir = 1 - }, -/turf/simulated/floor/tiled/white, -/area/crew_quarters/heads/office/cmo) -"oS" = ( -/obj/machinery/portable_atmospherics/powered/scrubber, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/bridge/aftport) -"oT" = ( -/obj/structure/disposalpipe/segment, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/bridge/aftport) -"oU" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/alarm{ - pixel_y = 24 - }, -/obj/effect/floor_decal/corner/brown/half{ - dir = 8 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/aquila/storage) -"oW" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/light_switch{ - pixel_x = 23; - pixel_y = 24 - }, -/turf/simulated/floor/tiled/dark, -/area/aux_eva) -"oY" = ( -/obj/effect/wallframe_spawn/reinforced/titanium, -/obj/machinery/door/blast/regular/open{ - density = 0; - dir = 4; - icon_state = "pdoor0"; - id_tag = "aquila_shutters"; - name = "Protective Shutters"; - opacity = 0 - }, -/obj/effect/paint/hull, -/obj/machinery/atmospherics/pipe/simple/hidden/universal{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/aquila/air) -"oZ" = ( -/obj/machinery/recharge_station, -/obj/effect/floor_decal/industrial/outline/red, -/turf/simulated/floor/tiled/dark/monotile, -/area/aquila/power) -"pa" = ( -/obj/machinery/alarm{ - pixel_y = 24 - }, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/aquila/power) -"pb" = ( -/obj/structure/cable/cyan{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, -/obj/structure/handrail, -/turf/simulated/floor/tiled/dark, -/area/aquila/power) -"pc" = ( -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/door/airlock/hatch{ - name = "Engineering" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/door/firedoor, -/turf/simulated/floor/tiled/steel_ridged, -/area/aquila/power) -"pd" = ( -/obj/machinery/power/apc/shuttle/aquila{ - dir = 8; - name = "west bump"; - pixel_x = -24 - }, -/obj/structure/cable/cyan{ - d2 = 2; - icon_state = "0-2" - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/aquila/airlock) -"pe" = ( -/obj/structure/lattice, -/obj/machinery/light/navigation/delay5, -/turf/space, -/area/space) -"pf" = ( -/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply, -/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/effect/floor_decal/corner/blue{ - dir = 10 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/aquila/airlock) -"ph" = ( -/obj/machinery/door/airlock/hatch, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/door/firedoor, -/turf/simulated/floor/tiled/steel_ridged, -/area/aquila/airlock) -"pi" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/firealarm{ - pixel_y = 24 - }, -/obj/machinery/light_switch{ - pixel_x = -10; - pixel_y = 22 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/aquila/storage) -"pj" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/aquila/storage) -"pk" = ( -/obj/structure/table/standard{ - name = "plastic table frame" - }, -/obj/random/single/cola, -/obj/machinery/power/apc/hyper/shuttle/aquila{ - dir = 1; - pixel_y = 19 - }, -/obj/structure/cable/cyan{ - d2 = 8; - icon_state = "0-8" - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/aquila/storage) -"pl" = ( -/obj/structure/table/standard{ - name = "plastic table frame" - }, -/obj/machinery/microwave, -/turf/simulated/floor/tiled/dark/monotile, -/area/aquila/storage) -"pr" = ( -/obj/effect/floor_decal/industrial/hatch/yellow, -/obj/item/device/radio/intercom/locked/ai_private{ - pixel_y = 22 - }, -/obj/machinery/computer/teleporter{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/turret_protected/ai_foyer) -"pw" = ( -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 8; - icon_state = "warningcorner" - }, -/obj/effect/floor_decal/industrial/hatch/yellow, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/airless, -/area/space) -"py" = ( -/obj/structure/filingcabinet/chestdrawer{ - dir = 1 - }, -/obj/item/folder/blue, -/obj/item/folder/red, -/obj/item/folder, -/obj/item/folder/nt, -/obj/item/folder/yellow, -/obj/item/folder/white, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/light_switch{ - pixel_x = -24; - pixel_y = 6 - }, -/obj/machinery/button/windowtint{ - id = "cos_windows"; - pixel_x = -24; - pixel_y = -6 - }, -/obj/machinery/firealarm{ - dir = 1; - pixel_y = -24 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/crew_quarters/heads/office/cos) -"pz" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/tiled/dark, -/area/crew_quarters/heads/office/cos) -"pA" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 8 - }, -/turf/simulated/floor/tiled/dark, -/area/crew_quarters/heads/office/cos) -"pB" = ( -/obj/structure/bed/chair/padded/red{ - dir = 1 - }, -/obj/effect/floor_decal/corner/red{ - dir = 6 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/crew_quarters/heads/office/cos) -"pE" = ( -/obj/machinery/computer/modular/preset/cardslot/command{ - dir = 1; - icon_state = "console" - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/security/bridgecheck) -"pF" = ( -/obj/machinery/computer/modular/preset/cardslot/command{ - dir = 1; - icon_state = "console" - }, -/obj/effect/floor_decal/corner/red/half{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/security/bridgecheck) -"pG" = ( -/obj/machinery/status_display, -/turf/simulated/wall/prepainted, -/area/security/bridgecheck) -"pI" = ( -/obj/structure/cable/green, -/obj/effect/wallframe_spawn/reinforced/polarized{ - id = "cmo_windows" - }, -/turf/simulated/floor/plating, -/area/crew_quarters/heads/office/cmo) -"pJ" = ( -/obj/effect/floor_decal/corner/paleblue/diagonal, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 1 - }, -/turf/simulated/floor/tiled/white, -/area/crew_quarters/heads/office/cmo) -"pL" = ( -/obj/effect/floor_decal/corner/paleblue/diagonal, -/obj/machinery/hologram/holopad, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled/white, -/area/crew_quarters/heads/office/cmo) -"pM" = ( -/obj/effect/floor_decal/corner/paleblue/diagonal, -/obj/structure/cable/green{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/turf/simulated/floor/tiled/white, -/area/crew_quarters/heads/office/cmo) -"pN" = ( -/obj/machinery/alarm{ - pixel_y = 24 - }, -/turf/simulated/floor/bluegrid, -/area/turret_protected/ai_foyer) -"pQ" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/dark, -/area/aux_eva) -"pR" = ( -/obj/effect/floor_decal/industrial/outline/grey, -/obj/structure/table/rack{ - dir = 8 - }, -/obj/item/device/suit_cooling_unit, -/obj/item/device/suit_cooling_unit, -/turf/simulated/floor/tiled/dark/monotile, -/area/aux_eva) -"pS" = ( -/obj/machinery/mech_recharger, -/obj/effect/floor_decal/industrial/outline/red, -/turf/simulated/floor/tiled/dark/monotile, -/area/aquila/power) -"pT" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/aquila/power) -"pU" = ( -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/turf/simulated/floor/tiled/dark, -/area/aquila/power) -"pW" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/turf/simulated/floor/plating, -/area/aquila/air) -"pX" = ( -/obj/machinery/recharger/wallcharger{ - dir = 4; - pixel_x = -23 - }, -/turf/simulated/floor/tiled/dark, -/area/aquila/storage) -"pY" = ( -/obj/machinery/door/airlock/hatch{ - name = "Engineering" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/door/firedoor, -/turf/simulated/floor/tiled/steel_ridged, -/area/aquila/medical) -"pZ" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 4 - }, -/obj/effect/floor_decal/industrial/warning/corner, -/turf/simulated/floor/tiled/dark/monotile, -/area/aquila/storage) -"qa" = ( -/obj/structure/bed/chair/comfy/blue{ - dir = 4 - }, -/turf/simulated/floor/carpet, -/area/crew_quarters/heads/office/xo) -"qb" = ( -/obj/machinery/recharger/wallcharger{ - dir = 4; - pixel_x = -23 - }, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark, -/area/aquila/storage) -"qc" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 8 - }, -/turf/simulated/floor/tiled/dark, -/area/aquila/storage) -"qd" = ( -/turf/simulated/floor/tiled/white, -/area/aquila/medical) -"qe" = ( -/obj/structure/table/standard{ - name = "plastic table frame" - }, -/obj/random/snack, -/obj/machinery/light/small{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/aquila/storage) -"qf" = ( -/obj/effect/floor_decal/scglogo{ - icon_state = "top-right" - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/structure/bed/chair/comfy/blue{ - dir = 8 - }, -/turf/simulated/floor/tiled/dark, -/area/bridge) -"qg" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/effect/floor_decal/corner/blue{ - dir = 9 - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/bridge/fore) -"qh" = ( -/obj/effect/floor_decal/scglogo{ - icon_state = "bottom-right" - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/structure/bed/chair/comfy/blue, -/turf/simulated/floor/tiled/dark, -/area/bridge) -"qi" = ( -/obj/effect/floor_decal/industrial/outline/grey, -/obj/structure/table/rack{ - dir = 8 - }, -/obj/structure/window/reinforced{ - dir = 1 - }, -/obj/structure/window/reinforced, -/obj/structure/window/reinforced{ - dir = 8 - }, -/obj/item/tank/oxygen_emergency_double, -/obj/machinery/door/window/brigdoor/westright{ - autoset_access = 0; - dir = 4; - name = "CSO's suit storage"; - req_access = list("ACCESS_RESEARCH_DIRECTOR") - }, -/obj/item/rig/command/science/equipped, -/turf/simulated/floor/tiled/dark, -/area/aux_eva) -"qm" = ( -/obj/structure/sign/warning/high_voltage, -/turf/simulated/wall/prepainted, -/area/crew_quarters/heads/office/cos) -"qn" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/carpet/green, -/area/crew_quarters/heads/office/cl/backroom) -"qo" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/security{ - id_tag = "cosdoor"; - name = "Chief of Security"; - secured_wires = 1 - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/tiled/dark/monotile, -/area/crew_quarters/heads/office/cos) -"qp" = ( -/obj/structure/cable/green{ - d2 = 4; - icon_state = "0-4" - }, -/obj/structure/cable/green{ - d2 = 8; - icon_state = "0-8" - }, -/obj/effect/wallframe_spawn/reinforced/polarized{ - id = "cos_windows" - }, -/turf/simulated/floor/plating, -/area/crew_quarters/heads/office/cos) -"qq" = ( -/obj/structure/cable/green{ - d2 = 8; - icon_state = "0-8" - }, -/obj/effect/wallframe_spawn/reinforced/polarized{ - id = "cos_windows" - }, -/turf/simulated/floor/plating, -/area/crew_quarters/heads/office/cos) -"qs" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/universal{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/maintenance/bridge/forestarboard) -"qt" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/effect/floor_decal/industrial/warning/fulltile, -/turf/simulated/floor/tiled, -/area/hallway/primary/bridge/fore) -"qu" = ( -/obj/machinery/requests_console{ - announcementConsole = 1; - department = "Chief Medical Officer's Desk"; - departmentType = 5; - name = "Chief Medical Officer RC"; - pixel_x = 32 - }, -/obj/effect/floor_decal/corner/paleblue/diagonal, -/obj/effect/floor_decal/industrial/hatch/yellow, -/obj/machinery/disposal, -/obj/structure/disposalpipe/trunk{ - dir = 8 - }, -/turf/simulated/floor/tiled/white, -/area/crew_quarters/heads/office/cmo) -"qv" = ( -/obj/effect/floor_decal/corner/paleblue/diagonal, -/obj/structure/table/glass, -/obj/item/paper_bin, -/obj/item/pen, -/obj/item/pen/blue, -/obj/random/clipboard, -/obj/item/storage/medical_lolli_jar, -/obj/item/storage/box/encryptionkey/medical, -/turf/simulated/floor/tiled/white, -/area/crew_quarters/heads/office/cmo) -"qw" = ( -/obj/effect/floor_decal/corner/red/half{ - dir = 8 - }, -/obj/structure/disposalpipe/segment{ - dir = 8; - icon_state = "pipe-c" - }, -/turf/simulated/floor/tiled/dark, -/area/security/bridgecheck) -"qx" = ( -/obj/effect/floor_decal/corner/paleblue/diagonal, -/obj/structure/table/glass, -/obj/item/reagent_containers/food/snacks/cookie, -/obj/item/reagent_containers/food/snacks/cookie, -/obj/item/reagent_containers/food/snacks/cookie, -/obj/item/reagent_containers/food/snacks/cookie, -/obj/item/reagent_containers/food/snacks/cookie, -/obj/item/storage/lunchbox/cat, -/turf/simulated/floor/tiled/white, -/area/crew_quarters/heads/office/cmo) -"qy" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/blue{ - dir = 6; - icon_state = "intact" - }, -/obj/effect/floor_decal/techfloor{ - icon_state = "techfloor_edges"; - dir = 8 - }, -/obj/effect/floor_decal/industrial/warning{ - icon_state = "warning"; - dir = 8 - }, -/obj/machinery/hologram/holopad, -/turf/simulated/floor/tiled/dark, -/area/turret_protected/ai_foyer) -"qz" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/floor_decal/corner/blue{ - dir = 10 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/bridge/fore) -"qA" = ( -/obj/machinery/camera/network/command{ - c_tag = "Bridge Exterior - Port"; - dir = 1 - }, -/turf/space, -/area/space) -"qB" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 1 - }, -/turf/simulated/floor/wood/walnut, -/area/crew_quarters/heads/office/sgr) -"qD" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 1 - }, -/turf/simulated/floor/plating, -/area/aquila/power) -"qE" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 1 - }, -/turf/simulated/floor/plating, -/area/aquila/power) -"qF" = ( -/obj/effect/floor_decal/industrial/warning/corner, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 1 - }, -/turf/simulated/floor/plating, -/area/aquila/power) -"qH" = ( -/turf/simulated/wall/prepainted, -/area/crew_quarters/heads/office/sea) -"qI" = ( -/obj/structure/table/standard{ - name = "plastic table frame" - }, -/obj/machinery/recharger, -/turf/simulated/floor/tiled/dark/monotile, -/area/aquila/storage) -"qO" = ( -/turf/simulated/wall/r_wall/prepainted, -/area/bridge/storage) -"qP" = ( -/obj/effect/floor_decal/spline/fancy/wood{ - dir = 8 - }, -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/turf/simulated/floor/tiled/dark, -/area/crew_quarters/heads/office/co) -"qQ" = ( -/obj/machinery/light_switch{ - pixel_x = 23; - pixel_y = 24 - }, -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/obj/machinery/camera/network/command{ - c_tag = "CO - Office Port" - }, -/turf/simulated/floor/tiled/dark, -/area/crew_quarters/heads/office/co) -"qR" = ( -/obj/structure/flora/pottedplant/large, -/obj/machinery/firealarm{ - dir = 1; - pixel_y = -24 - }, -/obj/item/device/radio/intercom{ - dir = 8; - pixel_x = 20 - }, -/turf/simulated/floor/wood/walnut, -/area/crew_quarters/heads/office/cl) -"qU" = ( -/obj/structure/table/woodentable_reinforced/walnut, -/obj/item/paper_bin{ - pixel_x = -3; - pixel_y = 7 - }, -/obj/item/pen, -/turf/simulated/floor/carpet/green, -/area/crew_quarters/heads/office/cl) -"qY" = ( -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/door/blast/regular/open{ - density = 0; - dir = 4; - icon_state = "pdoor0"; - id_tag = "bridge entry port"; - name = "Port Bridge Blast Doors"; - opacity = 0 - }, -/obj/effect/floor_decal/corner/blue/three_quarters, -/obj/effect/floor_decal/industrial/hatch/yellow, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/tiled/steel_ridged, -/area/bridge/hallway/port) -"ra" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, -/obj/effect/catwalk_plated, -/turf/simulated/floor/plating, -/area/hallway/primary/bridge/fore) -"rb" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/effect/catwalk_plated, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 1 - }, -/turf/simulated/floor/plating, -/area/hallway/primary/bridge/fore) -"rc" = ( -/obj/structure/disposalpipe/segment{ - dir = 2; - icon_state = "pipe-c" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 1 - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/machinery/alarm{ - pixel_y = 24 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/bridge/fore) -"rd" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/bridge/fore) -"re" = ( -/obj/effect/floor_decal/corner/red{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/tiled, -/area/hallway/primary/bridge/fore) -"rf" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/effect/floor_decal/corner/red{ - dir = 1 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/bridge/fore) -"rg" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/effect/catwalk_plated, -/turf/simulated/floor/plating, -/area/hallway/primary/bridge/fore) -"rj" = ( -/obj/structure/cable/cyan{ - d2 = 4; - icon_state = "0-4" - }, -/obj/machinery/power/apc/super/critical{ - dir = 8; - name = "west bump"; - pixel_x = -24 - }, -/obj/structure/cable/cyan{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/turf/simulated/floor/bluegrid, -/area/turret_protected/ai) -"rk" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/effect/catwalk_plated, -/obj/structure/extinguisher_cabinet{ - pixel_y = 32 - }, -/turf/simulated/floor/plating, -/area/hallway/primary/bridge/fore) -"rl" = ( -/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply, -/turf/simulated/floor/tiled, -/area/hallway/primary/bridge/fore) -"rm" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/obj/structure/disposalpipe/segment{ - dir = 1; - icon_state = "pipe-c" - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/bridge/fore) -"rn" = ( -/obj/effect/floor_decal/corner/paleblue/diagonal, -/obj/machinery/computer/modular/preset/cardslot/command{ - dir = 4; - icon_state = "console" - }, -/obj/item/modular_computer/tablet/lease/preset/command, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/crew_quarters/heads/office/cmo) -"rp" = ( -/obj/effect/floor_decal/corner/paleblue/diagonal, -/turf/simulated/floor/tiled/white, -/area/crew_quarters/heads/office/cmo) -"rr" = ( -/obj/effect/paint/red, -/obj/machinery/atmospherics/pipe/simple/hidden/fuel{ - dir = 4 - }, -/turf/simulated/wall/titanium, -/area/aquila/power) -"rt" = ( -/obj/machinery/door/firedoor, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/door/airlock/command{ - id_tag = "meetingstarboard"; - name = "Conference Room" - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/bridge/meeting_room) -"rv" = ( -/obj/machinery/atmospherics/unary/tank/carbon_dioxide{ - dir = 4; - start_pressure = 5000 - }, -/obj/effect/floor_decal/industrial/outline/red, -/turf/simulated/floor/tiled/techfloor, -/area/aquila/power) -"rw" = ( -/obj/machinery/atmospherics/pipe/simple/visible/fuel{ - dir = 10 - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 4; - icon_state = "warning" - }, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/turf/simulated/floor/plating, -/area/aquila/power) -"rx" = ( -/obj/effect/paint/hull, -/turf/simulated/wall/titanium, -/area/aquila/power) -"ry" = ( -/obj/machinery/light{ - dir = 8 - }, -/obj/machinery/body_scanconsole{ - dir = 1 - }, -/turf/simulated/floor/tiled/white/monotile, -/area/aquila/medical) -"rz" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark, -/area/bridge/storage) -"rA" = ( -/obj/effect/floor_decal/scglogo{ - dir = 4; - icon_state = "bottom-left" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark, -/area/bridge/disciplinary_board_room) -"rC" = ( -/obj/machinery/light{ - dir = 1 - }, -/obj/item/device/radio/intercom{ - pixel_y = 23 - }, -/obj/item/toy/torchmodel, -/obj/structure/table/woodentable_reinforced/walnut, -/obj/random_multi/single_item/runtime, -/turf/simulated/floor/wood/walnut, -/area/crew_quarters/heads/office/xo) -"rD" = ( -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/wall/r_wall/prepainted, -/area/turret_protected/ai) -"rE" = ( -/obj/structure/handrail{ - dir = 8 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/aquila/storage) -"rI" = ( -/obj/structure/bed/chair/comfy/blue{ - dir = 8 - }, -/obj/effect/floor_decal/spline/fancy/wood{ - dir = 8 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/structure/disposalpipe/segment{ - dir = 4; - icon_state = "pipe-c" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 - }, -/turf/simulated/floor/tiled/dark, -/area/crew_quarters/heads/office/co) -"rJ" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, -/turf/simulated/floor/tiled/dark, -/area/crew_quarters/heads/office/co) -"rK" = ( -/obj/machinery/door/airlock/sol{ - id_tag = "captaindoor"; - name = "Commanding Officer"; - secured_wires = 1 - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/door/firedoor, -/turf/simulated/floor/tiled/dark/monotile, -/area/crew_quarters/heads/office/co) -"rQ" = ( -/obj/machinery/status_display, -/turf/simulated/wall/r_wall/prepainted, -/area/crew_quarters/safe_room/bridge) -"rR" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/vault/bolted{ - id_tag = "bridge_safe_exterior"; - name = "Bridge Safe Room" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/crew_quarters/safe_room/bridge) -"rS" = ( -/obj/structure/sign/warning/detailed{ - dir = 1; - name = "\improper SECURE AREA"; - pixel_y = -4 - }, -/turf/simulated/wall/r_wall/prepainted, -/area/crew_quarters/safe_room/bridge) -"rT" = ( -/obj/structure/closet/toolcloset, -/obj/random/action_figure, -/obj/effect/floor_decal/industrial/outline/grey, -/obj/random/powercell, -/turf/simulated/floor/plating, -/area/maintenance/bridge/foreport) -"rV" = ( -/obj/effect/floor_decal/corner/blue{ - dir = 8 - }, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 1 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/bridge/fore) -"rY" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 1 - }, -/obj/effect/floor_decal/corner/blue{ - dir = 10 - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/structure/disposalpipe/segment{ - dir = 8; - icon_state = "pipe-c" - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/bridge/fore) -"rZ" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/floor_decal/corner/blue, -/turf/simulated/floor/tiled, -/area/hallway/primary/bridge/fore) -"sa" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/effect/floor_decal/corner/blue{ - dir = 10 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/bridge/fore) -"se" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/item/device/radio/intercom{ - dir = 1; - pixel_y = -28 - }, -/obj/effect/floor_decal/corner/blue{ - dir = 10 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/bridge/fore) -"sf" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/floor_decal/corner/blue{ - dir = 10 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/bridge/fore) -"sh" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/effect/floor_decal/corner/blue{ - dir = 10 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/bridge/fore) -"si" = ( -/obj/structure/bed/padded, -/obj/item/bedsheet/hop, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/obj/item/device/radio/intercom{ - dir = 4; - pixel_x = -21 - }, -/turf/simulated/floor/carpet, -/area/crew_quarters/heads/office/xo) -"sl" = ( -/obj/structure/flora/pottedplant/shoot, -/obj/machinery/alarm{ - pixel_y = 24 - }, -/obj/machinery/atmospherics/unary/vent_pump/on, -/obj/machinery/light/small{ - dir = 8 - }, -/turf/simulated/floor/carpet, -/area/crew_quarters/heads/office/xo) -"sm" = ( -/obj/machinery/shipsensors, -/turf/simulated/floor/reinforced/airless, -/area/bridge/storage) -"sn" = ( -/obj/machinery/atmospherics/pipe/simple/visible/fuel{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/turf/simulated/floor/plating, -/area/aquila/power) -"so" = ( -/obj/structure/table/standard, -/obj/item/reagent_containers/syringe/antiviral, -/obj/item/reagent_containers/syringe/antiviral, -/obj/item/stack/medical/advanced/bruise_pack, -/obj/item/reagent_containers/spray/cleaner, -/obj/machinery/power/apc/hyper/shuttle/aquila{ - dir = 8; - pixel_x = -26 - }, -/obj/structure/cable/cyan{ - d2 = 4; - icon_state = "0-4" - }, -/turf/simulated/floor/tiled/white/monotile, -/area/aquila/medical) -"st" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/obj/effect/floor_decal/industrial/warning, -/turf/simulated/floor/tiled/dark/monotile, -/area/aquila/storage) -"su" = ( -/obj/effect/floor_decal/industrial/warning, -/turf/simulated/floor/tiled/dark/monotile, -/area/aquila/storage) -"sx" = ( -/obj/structure/sign/warning/high_voltage{ - dir = 8 - }, -/turf/simulated/wall/r_wall/hull, -/area/maintenance/bridge/foreport) -"sy" = ( -/obj/structure/cable/green{ - d2 = 8; - icon_state = "0-8" - }, -/obj/structure/cable/green{ - d2 = 4; - icon_state = "0-4" - }, -/obj/effect/wallframe_spawn/reinforced/polarized{ - id = "sea_windows" - }, -/turf/simulated/floor/plating, -/area/crew_quarters/heads/office/sea) -"sz" = ( -/obj/machinery/door/airlock/sol{ - id_tag = "seaforedoor"; - name = "Senior Enlisted Advisor"; - secured_wires = 1 - }, -/obj/machinery/door/firedoor, -/obj/structure/cable/green{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/tiled/dark/monotile, -/area/crew_quarters/heads/office/sea) -"sA" = ( -/obj/machinery/ai_slipper, -/turf/simulated/floor/bluegrid, -/area/turret_protected/ai) -"sB" = ( -/turf/simulated/wall/r_wall/prepainted, -/area/crew_quarters/heads/office/sea) -"sC" = ( -/obj/structure/bookcase, -/obj/item/book/manual/solgov_law, -/obj/item/book/manual/sol_sop, -/obj/item/book/manual/military_law, -/turf/simulated/floor/carpet, -/area/crew_quarters/heads/office/xo) -"sF" = ( -/obj/structure/cable/green{ - d2 = 2; - icon_state = "0-2" - }, -/obj/machinery/door/firedoor, -/obj/effect/wallframe_spawn/reinforced/hull, -/obj/machinery/door/blast/regular/open{ - dir = 4; - id_tag = "bridge blast"; - name = "Bridge Blast Doors" - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/turf/simulated/floor/plating, -/area/bridge) -"sH" = ( -/obj/structure/cable/green{ - d2 = 4; - icon_state = "0-4" - }, -/obj/effect/wallframe_spawn/reinforced/polarized{ - id = "sgr_windows" - }, -/turf/simulated/floor/plating, -/area/crew_quarters/heads/office/sgr) -"sI" = ( -/obj/structure/cable/green{ - d2 = 4; - icon_state = "0-4" - }, -/obj/structure/cable/green{ - d2 = 8; - icon_state = "0-8" - }, -/obj/effect/wallframe_spawn/reinforced/polarized{ - id = "sgr_windows" - }, -/turf/simulated/floor/plating, -/area/crew_quarters/heads/office/sgr) -"sJ" = ( -/turf/simulated/wall/prepainted, -/area/crew_quarters/heads/office/cl) -"sL" = ( -/turf/simulated/wall/prepainted, -/area/crew_quarters/heads/office/sgr) -"sP" = ( -/obj/structure/sign/warning/high_voltage{ - dir = 1 - }, -/turf/simulated/wall/prepainted, -/area/crew_quarters/heads/office/sgr) -"sQ" = ( -/obj/structure/cable/green{ - d2 = 4; - icon_state = "0-4" - }, -/obj/effect/wallframe_spawn/reinforced/polarized{ - id = "rd_windows" - }, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/plating, -/area/crew_quarters/heads/office/rd) -"sS" = ( -/obj/machinery/door/airlock/sol{ - name = "Disciplinary Board Room" - }, -/obj/machinery/door/firedoor, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/tiled/dark/monotile, -/area/bridge/disciplinary_board_room) -"sT" = ( -/turf/simulated/wall/prepainted, -/area/crew_quarters/heads/office/rd) -"sU" = ( -/obj/machinery/atmospherics/portables_connector{ - dir = 4 - }, -/obj/machinery/portable_atmospherics/canister/carbon_dioxide/engine_setup, -/obj/effect/floor_decal/industrial/outline/orange, -/turf/simulated/floor/tiled/techfloor, -/area/aquila/power) -"sV" = ( -/obj/machinery/atmospherics/binary/pump/high_power{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/aquila/power) -"sW" = ( -/obj/machinery/atmospherics/pipe/manifold/visible/fuel{ - dir = 4 - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/aquila/power) -"sY" = ( -/obj/structure/closet/medical_wall{ - pixel_x = -32 - }, -/obj/structure/table/standard, -/obj/item/storage/firstaid/surgery, -/obj/item/clothing/mask/surgical, -/obj/item/clothing/gloves/latex, -/turf/simulated/floor/tiled/white/monotile, -/area/aquila/medical) -"ta" = ( -/obj/machinery/door/firedoor, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/door/airlock/command{ - id_tag = "meetingport"; - name = "Conference Room" - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/bridge/meeting_room) -"tb" = ( -/obj/structure/cable/green{ - d2 = 4; - icon_state = "0-4" - }, -/obj/structure/cable/green{ - d2 = 8; - icon_state = "0-8" - }, -/obj/item/device/radio/intercom{ - pixel_y = 23 - }, -/obj/machinery/power/smes/buildable/preset/torch/substation{ - RCon_tag = "Substation - Bridge Deck" - }, -/turf/simulated/floor/plating, -/area/maintenance/substation/bridge) -"tc" = ( -/obj/machinery/embedded_controller/radio/airlock/docking_port{ - cycle_to_external_air = 1; - frequency = 1331; - id_tag = "aquila_shuttle"; - pixel_y = 24; - req_access = list("ACCESS_TORCH_CREW"); - tag_exterior_sensor = "aquila_shuttle_sensor_external" - }, -/obj/structure/handrail, -/obj/effect/floor_decal/techfloor{ - dir = 1 - }, -/obj/machinery/atmospherics/unary/vent_pump/high_volume/shuttle{ - dir = 8; - id_tag = "aquila_shuttle_pump_out_internal" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/aquila/airlock) -"td" = ( -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 4 - }, -/obj/machinery/power/apc/shuttle/aquila{ - dir = 8; - name = "west bump"; - pixel_x = -24 - }, -/obj/structure/cable/cyan, -/obj/structure/handrail{ - dir = 1 - }, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 1 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/aquila/air) -"te" = ( -/obj/effect/floor_decal/techfloor{ - dir = 9 - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled/techfloor, -/area/aquila/storage) -"tf" = ( -/obj/effect/floor_decal/techfloor{ - dir = 5 - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled/techfloor, -/area/aquila/storage) -"tg" = ( -/turf/simulated/wall/r_wall/hull, -/area/maintenance/bridge/foreport) -"th" = ( -/obj/machinery/light{ - dir = 8; - icon_state = "tube1" - }, -/turf/simulated/floor/carpet/blue, -/area/crew_quarters/heads/office/co) -"ti" = ( -/turf/simulated/wall/r_wall/prepainted, -/area/crew_quarters/safe_room/bridge) -"tj" = ( -/obj/machinery/computer/modular/preset/cardslot/command{ - dir = 8; - icon_state = "console" - }, -/obj/item/modular_computer/tablet/lease/preset/command, -/obj/item/device/radio/intercom{ - dir = 8; - pixel_x = 20 - }, -/turf/simulated/floor/tiled/monotile, -/area/crew_quarters/heads/office/rd) -"tm" = ( -/obj/effect/floor_decal/corner/blue{ - dir = 6 - }, -/obj/structure/flora/pottedplant/unusual, -/turf/simulated/floor/tiled/dark, -/area/crew_quarters/heads/office/sea) -"to" = ( -/obj/structure/sign/warning/nosmoking_1{ - dir = 4; - pixel_x = -37 - }, -/obj/effect/floor_decal/techfloor{ - dir = 8 - }, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor, -/area/crew_quarters/safe_room/bridge) -"tp" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, -/turf/simulated/floor/tiled/techfloor, -/area/crew_quarters/safe_room/bridge) -"ts" = ( -/obj/structure/cable/green{ - d2 = 8; - icon_state = "0-8" - }, -/obj/structure/cable/green{ - d2 = 2; - icon_state = "0-2" - }, -/obj/effect/wallframe_spawn/reinforced/polarized{ - id = "sgr_windows" - }, -/turf/simulated/floor/plating, -/area/crew_quarters/heads/office/sgr) -"tt" = ( -/obj/machinery/disposal, -/obj/structure/disposalpipe/trunk, -/turf/simulated/floor/wood/walnut, -/area/crew_quarters/heads/office/sgr) -"tu" = ( -/obj/machinery/hologram/holopad, -/turf/simulated/floor/wood/walnut, -/area/crew_quarters/heads/office/sgr) -"tv" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 8 - }, -/turf/simulated/floor/wood/walnut, -/area/crew_quarters/heads/office/sgr) -"tx" = ( -/obj/structure/bookcase, -/obj/item/book/manual/solgov_law, -/obj/item/book/manual/sol_sop, -/obj/item/book/manual/military_law, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, -/obj/item/device/radio/intercom{ - pixel_y = 23 - }, -/turf/simulated/floor/wood/walnut, -/area/crew_quarters/heads/office/sgr) -"ty" = ( -/obj/structure/closet/secure_closet/representative, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 8 - }, -/obj/random/drinkbottle, -/obj/structure/sign/warning/nosmoking_1{ - desc = "A warning sign which reads 'NO SMOKING'. Someone has scratched a variety of crude words in gutter across the entire sign."; - pixel_y = 26 - }, -/turf/simulated/floor/wood/walnut, -/area/crew_quarters/heads/office/sgr) -"tz" = ( -/obj/structure/table/woodentable/walnut, -/obj/item/sticky_pad/random, -/obj/item/device/flashlight/lamp/green, -/obj/structure/noticeboard{ - pixel_x = 32 - }, -/turf/simulated/floor/wood/walnut, -/area/crew_quarters/heads/office/sgr) -"tC" = ( -/obj/effect/floor_decal/corner/blue{ - dir = 5 - }, -/obj/machinery/hologram/holopad, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/tiled/dark, -/area/bridge/disciplinary_board_room) -"tH" = ( -/obj/structure/cable/green{ - d2 = 2; - icon_state = "0-2" - }, -/obj/machinery/power/apc{ - dir = 1; - name = "north bump"; - pixel_y = 24 - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/bridge/aftport) -"tI" = ( -/obj/structure/table/rack, -/obj/random/tech_supply, -/obj/random/tech_supply, -/obj/random/tech_supply, -/obj/random/tech_supply, -/obj/effect/floor_decal/industrial/warning{ - dir = 1 - }, -/turf/simulated/floor/tiled/techfloor, -/area/aquila/power) -"tJ" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 1 - }, -/turf/simulated/floor/tiled/techfloor, -/area/aquila/power) -"tK" = ( -/obj/machinery/atmospherics/pipe/simple/visible/fuel, -/obj/structure/table/rack, -/obj/random/toolbox, -/obj/random/toolbox, -/obj/random/powercell, -/obj/random/powercell, -/obj/effect/floor_decal/industrial/warning{ - dir = 1 - }, -/turf/simulated/floor/tiled/techfloor, -/area/aquila/power) -"tL" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 8 - }, -/turf/simulated/floor/tiled/dark, -/area/aquila/storage) -"tM" = ( -/obj/machinery/firealarm{ - dir = 8; - pixel_x = -24 - }, -/obj/effect/floor_decal/techfloor{ - dir = 10 - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/light, -/obj/structure/closet/crate/freezer/rations, -/turf/simulated/floor/tiled/techfloor, -/area/aquila/storage) -"tN" = ( -/obj/effect/floor_decal/techfloor, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/structure/closet/secure_closet/crew, -/turf/simulated/floor/tiled/techfloor, -/area/aquila/storage) -"tO" = ( -/obj/effect/floor_decal/techfloor{ - dir = 6 - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/structure/closet/secure_closet/guncabinet/sidearm/small, -/turf/simulated/floor/tiled/techfloor, -/area/aquila/storage) -"tR" = ( -/obj/machinery/hologram/holopad, -/turf/simulated/floor/wood/walnut, -/area/crew_quarters/heads/office/co) -"tT" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/wood/walnut, -/area/crew_quarters/heads/office/co) -"tW" = ( -/obj/machinery/disposal, -/obj/effect/floor_decal/corner/blue/mono, -/obj/effect/floor_decal/industrial/hatch/yellow, -/obj/structure/disposalpipe/trunk{ - dir = 4 - }, -/obj/machinery/light{ - dir = 8; - icon_state = "tube1" - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/crew_quarters/heads/office/sea) -"tX" = ( -/obj/effect/floor_decal/corner/blue{ - dir = 9 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark, -/area/crew_quarters/heads/office/sea) -"tZ" = ( -/obj/effect/floor_decal/corner/blue{ - dir = 6 - }, -/obj/machinery/light{ - dir = 4; - icon_state = "tube1" - }, -/turf/simulated/floor/tiled/dark, -/area/crew_quarters/heads/office/sea) -"ua" = ( -/obj/machinery/firealarm{ - dir = 1; - pixel_y = -24 - }, -/turf/simulated/floor/carpet/green, -/area/crew_quarters/heads/office/cl/backroom) -"ub" = ( -/obj/structure/bed/chair/padded/blue{ - dir = 4 - }, -/obj/machinery/light{ - dir = 8 - }, -/obj/effect/floor_decal/techfloor{ - dir = 8 - }, -/turf/simulated/floor/tiled/techfloor, -/area/crew_quarters/safe_room/bridge) -"ud" = ( -/obj/structure/bed/chair/padded/blue{ - dir = 8 - }, -/obj/machinery/newscaster{ - pixel_x = 32 - }, -/obj/machinery/camera/network/bridge{ - c_tag = "Bridge - Safe Room"; - dir = 8 - }, -/obj/effect/floor_decal/techfloor{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor, -/area/crew_quarters/safe_room/bridge) -"ug" = ( -/obj/structure/cable/green, -/obj/effect/wallframe_spawn/reinforced/polarized{ - id = "sgr_windows" - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/crew_quarters/heads/office/sgr) -"uh" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 8; - icon_state = "pipe-c" - }, -/turf/simulated/floor/wood/walnut, -/area/crew_quarters/heads/office/sgr) -"ui" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 1 - }, -/turf/simulated/floor/wood/walnut, -/area/crew_quarters/heads/office/sgr) -"uj" = ( -/obj/structure/bed/chair/padded/blue, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/turf/simulated/floor/wood/walnut, -/area/crew_quarters/heads/office/sgr) -"uk" = ( -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/door/airlock/sol{ - name = "SolGov Representative"; - secured_wires = 1 - }, -/turf/simulated/floor/wood/walnut, -/area/crew_quarters/heads/office/sgr) -"ul" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/firealarm{ - dir = 1; - pixel_y = -24 - }, -/turf/simulated/floor/wood/walnut, -/area/crew_quarters/heads/office/sgr) -"um" = ( -/obj/item/stool/padded, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 8 - }, -/obj/machinery/alarm{ - dir = 1; - pixel_y = -28; - req_access = list(list("ACCESS_ENGINE_EQUIP","ACCESS_ATMOS")) - }, -/turf/simulated/floor/wood/walnut, -/area/crew_quarters/heads/office/sgr) -"un" = ( -/obj/structure/table/woodentable/walnut, -/obj/item/storage/secure/safe{ - pixel_x = 36 - }, -/obj/item/folder/envelope/rep, -/obj/item/documents/scgr, -/turf/simulated/floor/wood/walnut, -/area/crew_quarters/heads/office/sgr) -"uo" = ( -/obj/effect/floor_decal/corner/blue{ - dir = 9 - }, -/obj/structure/bed/chair/padded/red{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark, -/area/bridge/disciplinary_board_room) -"up" = ( -/obj/effect/floor_decal/scglogo{ - dir = 4; - icon_state = "top-right" - }, -/turf/simulated/floor/tiled/dark, -/area/bridge/disciplinary_board_room) -"uq" = ( -/obj/effect/floor_decal/scglogo{ - dir = 4; - icon_state = "center-right" - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/tiled/dark, -/area/bridge/disciplinary_board_room) -"us" = ( -/obj/structure/disposalpipe/segment, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/lattice, -/obj/structure/railing/mapped, -/turf/simulated/open, -/area/maintenance/bridge/aftport) -"ut" = ( -/obj/structure/disposalpipe/segment{ - dir = 4; - icon_state = "pipe-c" - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/bridge/aftport) -"uu" = ( -/obj/structure/disposalpipe/segment{ - dir = 8; - icon_state = "pipe-c" - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/bridge/aftport) -"uv" = ( -/obj/effect/floor_decal/industrial/warning/cee{ - dir = 1; - icon_state = "warningcee" - }, -/turf/simulated/floor/reinforced/airless, -/area/space) -"uw" = ( -/turf/simulated/floor/tiled/dark, -/area/aquila/storage) -"uy" = ( -/turf/simulated/wall/walnut, -/area/crew_quarters/heads/cobed) -"uz" = ( -/obj/structure/table/woodentable/walnut, -/obj/item/device/flashlight/lamp/green, -/obj/structure/noticeboard{ - pixel_x = 32 - }, -/turf/simulated/floor/carpet/blue2, -/area/crew_quarters/heads/office/sgr) -"uB" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/wood/walnut, -/area/crew_quarters/heads/office/co) -"uC" = ( -/obj/item/reagent_containers/food/drinks/flask{ - pixel_x = 8 - }, -/obj/item/clothing/mask/smokable/cigarette/cigar, -/obj/structure/table/woodentable_reinforced/walnut/maple, -/obj/machinery/power/apc{ - dir = 4; - name = "east bump"; - pixel_x = 24 - }, -/obj/structure/cable/green{ - d2 = 8; - icon_state = "0-8" - }, -/turf/simulated/floor/wood/walnut, -/area/crew_quarters/heads/office/co) -"uE" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/red, -/turf/simulated/wall/r_wall/prepainted, -/area/turret_protected/ai_foyer) -"uG" = ( -/obj/structure/bed/chair/padded/blue, -/turf/simulated/floor/tiled/dark, -/area/crew_quarters/heads/office/sea) -"uH" = ( -/turf/simulated/floor/tiled/techfloor, -/area/crew_quarters/safe_room/bridge) -"uI" = ( -/obj/structure/bed/chair/padded/blue{ - dir = 8 - }, -/obj/machinery/alarm{ - dir = 8; - pixel_x = 24 - }, -/obj/effect/floor_decal/techfloor{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor, -/area/crew_quarters/safe_room/bridge) -"uJ" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atm{ - pixel_y = 32 - }, -/obj/effect/floor_decal/corner/blue{ - dir = 1 - }, -/obj/structure/disposalpipe/segment{ - dir = 4; - icon_state = "pipe-c" - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/bridge/fore) -"uK" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/firealarm{ - dir = 2; - pixel_y = 24 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/bridge/fore) -"uM" = ( -/obj/machinery/camera/network/command{ - c_tag = "Sol Government Representative - Office"; - dir = 4 - }, -/turf/simulated/floor/carpet/blue2, -/area/crew_quarters/heads/office/sgr) -"uN" = ( -/obj/structure/table/woodentable_reinforced/walnut, -/obj/item/paper_bin{ - pixel_x = -3; - pixel_y = 7 - }, -/obj/item/pen, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 1 - }, -/turf/simulated/floor/carpet/blue2, -/area/crew_quarters/heads/office/sgr) -"uO" = ( -/obj/structure/table/woodentable_reinforced/walnut, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/item/reagent_containers/food/drinks/glass2/coffeecup/SCG{ - pixel_x = 11; - pixel_y = 1 - }, -/obj/item/tableflag, -/turf/simulated/floor/carpet/blue2, -/area/crew_quarters/heads/office/sgr) -"uS" = ( -/obj/structure/table/steel_reinforced, -/obj/item/reagent_containers/food/drinks/glass2/carafe, -/obj/item/reagent_containers/food/drinks/glass2/square, -/obj/effect/floor_decal/corner/blue/three_quarters{ - dir = 8 - }, -/obj/structure/sign/warning/nosmoking_1{ - dir = 4; - pixel_x = -37 - }, -/obj/structure/sign/double/solgovflag/left{ - pixel_y = 32 - }, -/turf/simulated/floor/tiled/dark, -/area/bridge/disciplinary_board_room) -"uT" = ( -/obj/effect/floor_decal/corner/blue{ - dir = 9 - }, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 4 - }, -/obj/machinery/light{ - dir = 8; - icon_state = "tube1" - }, -/turf/simulated/floor/tiled/dark, -/area/bridge/disciplinary_board_room) -"uU" = ( -/obj/effect/floor_decal/scglogo{ - dir = 4; - icon_state = "top-center" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark, -/area/bridge/disciplinary_board_room) -"uV" = ( -/obj/structure/sign/deck/bridge{ - dir = 8 - }, -/turf/simulated/wall/prepainted, -/area/hallway/primary/bridge/fore) -"uW" = ( -/obj/effect/floor_decal/corner/blue{ - dir = 6 - }, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 8 - }, -/obj/machinery/light{ - dir = 4; - icon_state = "tube1" - }, -/turf/simulated/floor/tiled/dark, -/area/bridge/disciplinary_board_room) -"uX" = ( -/turf/simulated/wall/prepainted, -/area/maintenance/auxsolarbridge) -"uZ" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 8; - icon_state = "warning" - }, -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 4 - }, -/turf/simulated/floor/reinforced/airless, -/area/space) -"vb" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 4; - icon_state = "warning" - }, -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 1; - icon_state = "warningcorner" - }, -/turf/simulated/floor/reinforced/airless, -/area/space) -"vd" = ( -/obj/machinery/power/shield_generator, -/obj/structure/cable/green{ - d2 = 4; - icon_state = "0-4" - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/plating, -/area/shield/bridge) -"vf" = ( -/obj/effect/floor_decal/scglogo{ - icon_state = "top-center" - }, -/turf/simulated/floor/tiled/dark, -/area/bridge) -"vg" = ( -/obj/effect/floor_decal/corner/blue{ - dir = 1 - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/dark, -/area/bridge) -"vj" = ( -/obj/effect/floor_decal/corner/blue{ - dir = 9 - }, -/obj/machinery/power/apc{ - dir = 8; - name = "west bump"; - pixel_x = -24 - }, -/obj/structure/cable/green{ - d2 = 4; - icon_state = "0-4" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, -/obj/machinery/camera/network/command{ - c_tag = "Senior Enlisted Advisor - Office"; - dir = 4 - }, -/turf/simulated/floor/tiled/dark, -/area/crew_quarters/heads/office/sea) -"vk" = ( -/obj/structure/table/standard{ - name = "plastic table frame" - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/obj/item/paper_bin{ - pixel_x = -3; - pixel_y = 7 - }, -/obj/item/pen, -/turf/simulated/floor/tiled/dark, -/area/crew_quarters/heads/office/sea) -"vm" = ( -/obj/structure/filingcabinet/chestdrawer{ - dir = 1 - }, -/obj/item/folder/blue, -/obj/item/folder/red, -/obj/item/folder, -/obj/item/folder/nt, -/obj/item/folder/yellow, -/obj/item/folder/white, -/obj/effect/floor_decal/corner/blue/mono, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/item/material/clipboard, -/turf/simulated/floor/tiled/dark/monotile, -/area/crew_quarters/heads/office/sea) -"vn" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 1 - }, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/aquila/air) -"vp" = ( -/obj/structure/bed/chair/padded/blue{ - dir = 8 - }, -/obj/item/device/radio/intercom{ - dir = 8; - pixel_x = 20 - }, -/obj/effect/floor_decal/techfloor{ - dir = 6 - }, -/turf/simulated/floor/tiled/techfloor, -/area/crew_quarters/safe_room/bridge) -"vs" = ( -/obj/machinery/space_heater, -/obj/effect/floor_decal/industrial/outline/grey, -/obj/effect/floor_decal/industrial/warning{ - dir = 8 - }, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/bridge/foreport) -"vu" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/structure/bed/chair/comfy/blue{ - dir = 4 - }, -/turf/simulated/floor/carpet/blue2, -/area/crew_quarters/heads/office/sgr) -"vv" = ( -/turf/simulated/wall/prepainted, -/area/bridge/disciplinary_board_room/deliberation) -"vx" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 8 - }, -/obj/effect/floor_decal/industrial/warning/fulltile, -/turf/simulated/floor/tiled, -/area/hallway/primary/bridge/fore) -"vy" = ( -/obj/structure/table/woodentable_reinforced/walnut/maple, -/obj/effect/floor_decal/corner/blue/mono, -/obj/structure/noticeboard{ - pixel_x = 32 - }, -/obj/item/reagent_containers/food/drinks/glass2/rocks, -/obj/item/reagent_containers/food/drinks/glass2/rocks, -/obj/item/reagent_containers/food/drinks/glass2/rocks, -/obj/item/reagent_containers/food/drinks/ice, -/obj/item/reagent_containers/food/drinks/bottle/cognac, -/obj/machinery/atmospherics/unary/vent_pump/on, -/obj/machinery/keycard_auth/torch{ - pixel_y = 24 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/bridge/disciplinary_board_room/deliberation) -"vA" = ( -/obj/structure/catwalk, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/plating, -/area/space) -"vB" = ( -/obj/effect/floor_decal/industrial/hatch/yellow, -/obj/structure/cable/green{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/turf/simulated/floor/airless, -/area/space) -"vE" = ( -/obj/structure/lattice, -/obj/structure/disposalpipe/down{ - dir = 4 - }, -/turf/simulated/open, -/area/maintenance/bridge/aftport) -"vF" = ( -/obj/structure/disposalpipe/segment{ - dir = 2; - icon_state = "pipe-c" - }, -/obj/structure/lattice, -/turf/simulated/open, -/area/maintenance/bridge/aftport) -"vG" = ( -/obj/structure/sign/warning/airlock{ - dir = 8 - }, -/turf/simulated/wall/prepainted, -/area/maintenance/auxsolarbridge) -"vI" = ( -/obj/machinery/power/terminal{ - dir = 8 - }, -/obj/structure/cable/yellow{ - d2 = 2; - icon_state = "0-2" - }, -/obj/machinery/light/small{ - dir = 1 - }, -/turf/simulated/floor/plating, -/area/maintenance/auxsolarbridge) -"vJ" = ( -/obj/machinery/portable_atmospherics/canister/air/airlock, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/atmospherics/portables_connector, -/turf/simulated/floor/plating, -/area/maintenance/auxsolarbridge) -"vK" = ( -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 4 - }, -/turf/simulated/floor/reinforced/airless, -/area/space) -"vL" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 1; - icon_state = "warning" - }, -/turf/simulated/floor/reinforced/airless, -/area/space) -"vO" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 1 - }, -/obj/effect/floor_decal/corner/blue/three_quarters, -/obj/machinery/alarm{ - dir = 4; - pixel_x = -23 - }, -/turf/simulated/floor/tiled/dark, -/area/crew_quarters/heads/office/sea) -"vP" = ( -/obj/effect/floor_decal/corner/blue{ - dir = 10 - }, -/turf/simulated/floor/tiled/dark, -/area/crew_quarters/heads/office/sea) -"vQ" = ( -/obj/machinery/computer/modular/preset/cardslot/command{ - dir = 8; - icon_state = "console" - }, -/obj/item/modular_computer/tablet/lease/preset/command, -/obj/effect/floor_decal/corner/blue/three_quarters{ - dir = 4 - }, -/obj/item/device/radio/intercom{ - dir = 8; - pixel_x = 20 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/crew_quarters/heads/office/sea) -"vS" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/crew_quarters/safe_room/bridge) -"vT" = ( -/obj/machinery/atmospherics/pipe/manifold/visible{ - dir = 1 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/crew_quarters/safe_room/bridge) -"vU" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 8 - }, -/obj/structure/fireaxecabinet{ - pixel_x = 32 - }, -/obj/item/modular_computer/laptop/preset/custom_loadout/standard, -/obj/structure/table/standard{ - name = "plastic table frame" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/crew_quarters/safe_room/bridge) -"vX" = ( -/obj/structure/filingcabinet/chestdrawer{ - dir = 1 - }, -/obj/item/folder/blue, -/obj/item/folder/red, -/obj/item/folder, -/obj/item/folder/nt, -/obj/item/folder/yellow, -/obj/item/folder/white, -/obj/machinery/newscaster/security_unit{ - pixel_x = -32 - }, -/turf/simulated/floor/carpet/blue2, -/area/crew_quarters/heads/office/sgr) -"vY" = ( -/turf/simulated/floor/carpet/blue2, -/area/crew_quarters/heads/office/sgr) -"vZ" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 8 - }, -/turf/simulated/floor/tiled/dark, -/area/crew_quarters/heads/office/sea) -"wb" = ( -/obj/structure/bed/chair/padded/beige{ - dir = 4 - }, -/obj/effect/floor_decal/corner/blue/mono, -/turf/simulated/floor/tiled/dark/monotile, -/area/bridge/disciplinary_board_room/deliberation) -"wc" = ( -/obj/effect/floor_decal/corner/blue/diagonal, -/obj/structure/cable/green{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/turf/simulated/floor/tiled/dark, -/area/bridge/disciplinary_board_room/deliberation) -"wd" = ( -/obj/effect/floor_decal/corner/blue{ - dir = 1 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply, -/turf/simulated/floor/tiled/dark, -/area/bridge/disciplinary_board_room/deliberation) -"wf" = ( -/obj/item/paper_bin{ - pixel_x = -3; - pixel_y = 7 - }, -/obj/item/pen, -/obj/effect/floor_decal/corner/blue{ - dir = 10 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/item/reagent_containers/food/drinks/glass2/square, -/obj/item/reagent_containers/food/drinks/glass2/square, -/obj/structure/table/woodentable_reinforced/walnut, -/turf/simulated/floor/tiled/dark, -/area/bridge/disciplinary_board_room) -"wg" = ( -/obj/item/tableflag{ - pixel_x = 4 - }, -/obj/effect/floor_decal/corner/blue{ - dir = 10 - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 - }, -/obj/structure/table/woodentable_reinforced/walnut, -/turf/simulated/floor/tiled/dark, -/area/bridge/disciplinary_board_room) -"wh" = ( -/obj/item/book/manual/military_law, -/obj/effect/floor_decal/corner/blue{ - dir = 10 - }, -/obj/item/reagent_containers/food/drinks/glass2/square, -/obj/structure/table/woodentable_reinforced/walnut, -/turf/simulated/floor/tiled/dark, -/area/bridge/disciplinary_board_room) -"wj" = ( -/obj/structure/disposalpipe/segment, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, -/obj/structure/lattice, -/turf/simulated/open, -/area/maintenance/bridge/aftport) -"wk" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/lattice, -/obj/structure/railing/mapped{ - dir = 4; - icon_state = "railing0-1" - }, -/turf/simulated/open, -/area/maintenance/bridge/aftport) -"wl" = ( -/obj/structure/disposalpipe/segment{ - dir = 8; - icon_state = "pipe-c" - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/obj/structure/cable{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 8 - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/bridge/aftport) -"wm" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/engineering{ - icon_state = "closed"; - name = "Bridge Solar Access" - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/steel_ridged, -/area/maintenance/auxsolarbridge) -"wn" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/universal{ - dir = 4 - }, -/obj/structure/cable{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/structure/cable{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/auxsolarbridge) -"wo" = ( -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/machinery/atmospherics/binary/pump/on{ - dir = 4; - target_pressure = 200 - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/auxsolarbridge) -"wp" = ( -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden, -/obj/structure/cable/yellow{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/machinery/access_button{ - command = "cycle_interior"; - frequency = 1379; - master_tag = "solar_bridge_airlock"; - name = "interior access button"; - pixel_x = 24; - pixel_y = 24; - req_access = list("ACCESS_ENGINE_EQUIP","ACCESS_EXTERNAL") - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/auxsolarbridge) -"wq" = ( -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 4 - }, -/obj/machinery/door/airlock/external{ - frequency = 1379; - icon_state = "closed"; - id_tag = "solar_bridge_inner"; - locked = 1; - name = "Engineering External Access" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/maintenance/auxsolarbridge) -"wr" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/universal, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/aquila/air) -"ws" = ( -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/shield_diffuser, -/obj/machinery/door/airlock/external{ - frequency = 1379; - icon_state = "closed"; - id_tag = "solar_bridge_outer"; - locked = 1; - name = "Engineering External Access" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/maintenance/auxsolarbridge) -"wt" = ( -/obj/machinery/access_button{ - command = "cycle_exterior"; - frequency = 1379; - master_tag = "solar_bridge_airlock"; - name = "exterior access button"; - pixel_x = -24; - pixel_y = 24; - req_access = list("ACCESS_ENGINE_EQUIP","ACCESS_EXTERNAL") - }, -/obj/effect/floor_decal/industrial/hatch/yellow, -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/cable/yellow{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/turf/simulated/floor/airless, -/area/solar/bridge) -"wu" = ( -/obj/effect/floor_decal/industrial/hatch/yellow, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/turf/simulated/floor/airless, -/area/solar/bridge) -"ww" = ( -/obj/structure/closet/secure_closet/sea, -/obj/effect/floor_decal/corner/blue/mono, -/obj/effect/floor_decal/industrial/outline/grey, -/obj/structure/noticeboard{ - pixel_x = -32 - }, -/obj/machinery/keycard_auth/torch{ - pixel_y = -24 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/crew_quarters/heads/office/sea) -"wx" = ( -/obj/structure/table/standard{ - name = "plastic table frame" - }, -/obj/effect/floor_decal/corner/blue/mono, -/obj/item/toy/bosunwhistle, -/obj/item/sticky_pad/random, -/obj/machinery/newscaster/security_unit{ - pixel_x = 32 - }, -/obj/machinery/light, -/turf/simulated/floor/tiled/dark/monotile, -/area/crew_quarters/heads/office/sea) -"wz" = ( -/obj/random/maintenance/solgov, -/obj/machinery/firealarm{ - dir = 8; - pixel_x = -24 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/crew_quarters/safe_room/bridge) -"wA" = ( -/obj/machinery/atmospherics/pipe/manifold/visible{ - dir = 8 - }, -/obj/machinery/meter, -/turf/simulated/floor/tiled/techfloor/grid, -/area/crew_quarters/safe_room/bridge) -"wB" = ( -/obj/effect/floor_decal/corner/blue/mono, -/obj/structure/closet/emcloset, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled/monotile, -/area/hallway/primary/bridge/fore) -"wC" = ( -/obj/structure/table/standard{ - name = "plastic table frame" - }, -/obj/effect/floor_decal/corner/red{ - dir = 6 - }, -/obj/item/stamp/cos, -/obj/random_multi/single_item/memo_security, -/obj/item/book/manual/sol_sop, -/turf/simulated/floor/tiled/dark/monotile, -/area/crew_quarters/heads/office/cos) -"wD" = ( -/obj/structure/table/woodentable/walnut, -/obj/machinery/photocopier/faxmachine{ - department = "Torch - SolGov Representative" - }, -/obj/item/device/radio/intercom{ - dir = 4; - pixel_x = -21 - }, -/obj/machinery/light, -/turf/simulated/floor/carpet/blue2, -/area/crew_quarters/heads/office/sgr) -"wH" = ( -/obj/structure/bed/chair/padded/beige{ - dir = 4 - }, -/obj/effect/floor_decal/corner/blue/mono, -/obj/item/device/radio/intercom{ - dir = 4; - pixel_x = -21 - }, -/obj/machinery/light/small, -/turf/simulated/floor/tiled/dark/monotile, -/area/bridge/disciplinary_board_room/deliberation) -"wI" = ( -/obj/effect/floor_decal/corner/blue{ - dir = 1 - }, -/obj/machinery/power/apc{ - name = "south bump"; - pixel_y = -24 - }, -/obj/structure/cable/green, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 1 - }, -/obj/machinery/camera/network/command{ - c_tag = "Disciplinary Board Room - Deliberations"; - dir = 1 - }, -/turf/simulated/floor/tiled/dark, -/area/bridge/disciplinary_board_room/deliberation) -"wJ" = ( -/obj/machinery/firealarm{ - dir = 1; - pixel_y = -24 - }, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 1 - }, -/turf/simulated/floor/tiled/dark, -/area/bridge/disciplinary_board_room/deliberation) -"wL" = ( -/obj/structure/bed/chair/comfy/blue{ - dir = 1 - }, -/obj/effect/floor_decal/corner/blue/mono, -/turf/simulated/floor/tiled/dark/monotile, -/area/bridge/disciplinary_board_room) -"wM" = ( -/obj/structure/cable/green{ - d2 = 2; - icon_state = "0-2" - }, -/obj/machinery/door/firedoor, -/obj/effect/wallframe_spawn/reinforced/hull, -/obj/machinery/door/blast/regular/open{ - dir = 4; - id_tag = "bridge blast"; - name = "Bridge Blast Doors" - }, -/turf/simulated/floor/plating, -/area/bridge) -"wN" = ( -/obj/structure/bed/chair/comfy/blue{ - dir = 1 - }, -/obj/effect/floor_decal/corner/blue/mono, -/obj/machinery/camera/network/command{ - c_tag = "Disciplinary Board Room"; - dir = 1 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/bridge/disciplinary_board_room) -"wP" = ( -/turf/simulated/open, -/area/maintenance/bridge/aftport) -"wQ" = ( -/obj/structure/disposalpipe/segment, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/lattice, -/turf/simulated/open, -/area/maintenance/bridge/aftport) -"wR" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 8 - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/bridge/aftport) -"wS" = ( -/obj/structure/sign/warning/high_voltage{ - dir = 8 - }, -/turf/simulated/wall/prepainted, -/area/maintenance/auxsolarbridge) -"wT" = ( -/obj/structure/cable, -/obj/machinery/power/apc{ - name = "south bump"; - pixel_y = -24 - }, -/turf/simulated/floor/plating, -/area/maintenance/auxsolarbridge) -"wU" = ( -/obj/item/stool, -/obj/machinery/alarm{ - dir = 1; - pixel_y = -22 - }, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/auxsolarbridge) -"wV" = ( -/obj/structure/cable/yellow, -/obj/machinery/power/solar_control{ - id = "auxsolarbridge"; - name = "Bridge Solar Control"; - track = 1 - }, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/auxsolarbridge) -"wW" = ( -/obj/structure/sign/warning/airlock{ - dir = 8 - }, -/turf/simulated/wall/r_wall/hull, -/area/maintenance/auxsolarbridge) -"wY" = ( -/obj/machinery/alarm{ - dir = 4; - pixel_x = -23 - }, -/obj/structure/railing/mapped, -/turf/simulated/open, -/area/maintenance/bridge/aftport) -"wZ" = ( -/obj/effect/floor_decal/industrial/hatch/yellow, -/obj/structure/cable/green{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/turf/simulated/floor/airless, -/area/space) -"xa" = ( -/obj/item/device/radio/intercom/locked/ai_private{ - dir = 1; - pixel_y = -22 - }, -/turf/simulated/floor/reinforced, -/area/turret_protected/ai_outer_chamber) -"xb" = ( -/obj/structure/closet/crate, -/obj/random/maintenance/solgov, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/bridge/foreport) -"xc" = ( -/turf/simulated/wall/prepainted, -/area/maintenance/bridge/foreport) -"xe" = ( -/obj/machinery/door/firedoor, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/door/airlock/vault/bolted{ - autoset_access = 0; - id_tag = "bridgesafe_back"; - name = "Emergency Exit" - }, -/obj/item/airlock_brace{ - req_access = list("ACCESS_BRIDGE") - }, -/obj/machinery/atmospherics/pipe/simple/hidden/universal, -/turf/simulated/floor/tiled/techfloor/grid, -/area/maintenance/bridge/foreport) -"xg" = ( -/obj/machinery/atmospherics/unary/vent_pump/high_volume/airlock{ - dir = 4; - id_tag = "bridge_eva_pump" - }, -/obj/machinery/oxygen_pump{ - pixel_x = -32 - }, -/obj/effect/floor_decal/techfloor{ - dir = 8 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/hallway/primary/bridge/aft) -"xh" = ( -/obj/random/junk, -/obj/structure/catwalk, -/turf/simulated/open, -/area/maintenance/bridge/foreport) -"xi" = ( -/obj/structure/cable/green{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, -/obj/structure/disposalpipe/segment{ - dir = 4; - icon_state = "pipe-c" - }, -/obj/structure/catwalk, -/turf/simulated/open, -/area/maintenance/bridge/foreport) -"xj" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/bridge/foreport) -"xk" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/maintenance, -/turf/simulated/floor/tiled/steel_ridged, -/area/maintenance/bridge/foreport) -"xl" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/bridge/aftport) -"xm" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/alarm{ - dir = 1; - pixel_y = -22 - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/bridge/aftport) -"xn" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/door/firedoor, -/turf/simulated/floor/tiled/techfloor/grid, -/area/maintenance/bridge/aftport) -"xo" = ( -/obj/random/maintenance/solgov, -/obj/random/closet, -/obj/random/maintenance/solgov/clean, -/obj/random/maintenance/solgov, -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 8 - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/bridge/aftport) -"xr" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/disposalpipe/segment, -/obj/structure/railing/mapped{ - dir = 1; - icon_state = "railing0-1" - }, -/obj/structure/railing/mapped{ - dir = 4; - icon_state = "railing0-1" - }, -/obj/structure/lattice, -/turf/simulated/open, -/area/maintenance/bridge/foreport) -"xs" = ( -/obj/structure/closet, -/obj/random/maintenance/solgov, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/bridge/foreport) -"xt" = ( -/obj/machinery/portable_atmospherics/powered/pump/filled, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/bridge/aftport) -"xv" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/railing/mapped{ - dir = 1; - icon_state = "railing0-1" - }, -/obj/structure/lattice, -/turf/simulated/open, -/area/maintenance/bridge/aftport) -"xx" = ( -/obj/item/storage/secure/safe{ - pixel_y = -24 - }, -/obj/machinery/computer/modular/preset/cardslot/command{ - dir = 1; - icon_state = "console" - }, -/turf/simulated/floor/wood/walnut, -/area/crew_quarters/heads/cobed) -"xy" = ( -/obj/structure/catwalk, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/door/firedoor, -/turf/simulated/floor/plating, -/area/maintenance/bridge/foreport) -"xz" = ( -/obj/structure/catwalk, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/maintenance/bridge/foreport) -"xB" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/obj/structure/disposalpipe/segment{ - dir = 8; - icon_state = "pipe-c" - }, -/obj/structure/railing/mapped{ - dir = 4; - icon_state = "railing0-1" - }, -/obj/structure/lattice, -/turf/simulated/open, -/area/maintenance/bridge/foreport) -"xD" = ( -/obj/structure/cable{ - d1 = 32; - icon_state = "32-1" - }, -/obj/structure/lattice, -/turf/simulated/open, -/area/maintenance/bridge/aftport) -"xE" = ( -/obj/structure/reagent_dispensers/fueltank, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/bridge/foreport) -"xF" = ( -/obj/structure/reagent_dispensers/watertank, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/bridge/foreport) -"xJ" = ( -/obj/structure/ladder, -/obj/effect/floor_decal/industrial/hatch/yellow, -/obj/structure/catwalk, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/bridge/foreport) -"xK" = ( -/obj/machinery/alarm{ - dir = 1; - pixel_y = -22 - }, -/obj/structure/railing/mapped{ - dir = 8; - icon_state = "railing0-1" - }, -/turf/simulated/open, -/area/maintenance/bridge/foreport) -"xN" = ( -/obj/structure/railing/mapped{ - dir = 1; - icon_state = "railing0-1" - }, -/turf/simulated/open, -/area/maintenance/bridge/forestarboard) -"xP" = ( -/obj/effect/landmark/map_data{ - height = 6 - }, -/turf/space, -/area/space) -"xQ" = ( -/obj/effect/paint/red, -/turf/simulated/wall/titanium, -/area/aquila/storage) -"xR" = ( -/obj/effect/floor_decal/industrial/hatch/yellow, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/airless, -/area/solar/bridge) -"xU" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/floor_decal/corner/b_green{ - dir = 1 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/bridge/fore) -"xV" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/obj/effect/floor_decal/corner/blue{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/bridge/fore) -"xW" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/light{ - dir = 1 - }, -/obj/effect/floor_decal/corner/blue{ - dir = 5 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/bridge/fore) -"xX" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/effect/catwalk_plated, -/turf/simulated/floor/plating, -/area/hallway/primary/bridge/fore) -"xY" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 1 - }, -/obj/effect/catwalk_plated, -/turf/simulated/floor/plating, -/area/hallway/primary/bridge/fore) -"xZ" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/effect/catwalk_plated, -/turf/simulated/floor/plating, -/area/hallway/primary/bridge/fore) -"yb" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/light, -/obj/effect/floor_decal/corner/blue{ - dir = 10 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/bridge/fore) -"yc" = ( -/obj/structure/catwalk, -/obj/random/junk, -/turf/simulated/floor/plating, -/area/maintenance/bridge/forestarboard) -"yd" = ( -/obj/effect/wallframe_spawn/reinforced/polarized{ - id = "meeting_windows" - }, -/obj/structure/cable/green{ - d2 = 2; - icon_state = "0-2" - }, -/turf/simulated/floor/plating, -/area/bridge/meeting_room) -"yf" = ( -/obj/effect/wallframe_spawn/reinforced/polarized{ - id = "bridge_starboard" - }, -/obj/structure/cable/green, -/obj/structure/cable/green{ - d2 = 8; - icon_state = "0-8" - }, -/turf/simulated/floor/plating, -/area/bridge) -"yg" = ( -/obj/machinery/status_display, -/turf/simulated/wall/prepainted, -/area/crew_quarters/heads/office/xo) -"yh" = ( -/obj/effect/floor_decal/scglogo{ - icon_state = "bottom-center" - }, -/turf/simulated/floor/tiled/dark, -/area/bridge) -"yi" = ( -/obj/effect/floor_decal/corner/red/full, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/suit_storage_unit/security/alt, -/turf/simulated/floor/tiled/dark, -/area/aux_eva) -"yk" = ( -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/aquila/airlock) -"yl" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/dark, -/area/aquila/storage) -"yp" = ( -/obj/structure/table/standard{ - name = "plastic table frame" - }, -/obj/effect/floor_decal/corner/blue{ - dir = 6 - }, -/obj/item/reagent_containers/food/drinks/cans/waterbottle, -/obj/structure/sign/double/solgovflag/right{ - dir = 8; - pixel_x = 32 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/crew_quarters/heads/office/sea) -"yw" = ( -/obj/effect/floor_decal/corner/paleblue/diagonal, -/obj/structure/table/glass, -/obj/item/sticky_pad/random, -/obj/item/storage/box/cups, -/obj/item/reagent_containers/food/drinks/bottle/orangejuice, -/obj/item/reagent_containers/food/drinks/ice, -/obj/machinery/light, -/obj/machinery/keycard_auth/torch{ - pixel_y = -24 - }, -/obj/machinery/button/alternate/door{ - desc = "A remote control-switch for the office door."; - id_tag = "cmodoor"; - name = "CMO's Office Door Control"; - pixel_x = -5; - pixel_y = -35; - req_access = list("ACCESS_CHIEF_MEDICAL_OFFICER") - }, -/obj/machinery/button/windowtint{ - id = "cmo_windows"; - pixel_x = 7; - pixel_y = -34; - range = 11 - }, -/turf/simulated/floor/tiled/white, -/area/crew_quarters/heads/office/cmo) -"yy" = ( -/obj/structure/railing/mapped{ - dir = 1; - icon_state = "railing0-1" - }, -/turf/simulated/open, -/area/maintenance/bridge/aftport) -"yA" = ( -/obj/effect/shuttle_landmark/skipjack/deck1{ - name = "B-Deck, Port" - }, -/turf/space, -/area/space) -"yB" = ( -/obj/effect/shuttle_landmark/torch/deck1/guppy{ - name = "B-Deck, Aft Starboard" - }, -/turf/space, -/area/space) -"yD" = ( -/turf/simulated/floor/tiled/dark, -/area/aux_eva) -"yI" = ( -/obj/structure/table/woodentable_reinforced/walnut, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/item/material/ashtray/plastic, -/obj/random/smokes, -/obj/item/flame/lighter/random, -/turf/simulated/floor/carpet/green, -/area/crew_quarters/heads/office/cl) -"yL" = ( -/obj/machinery/suit_storage_unit/standard_unit{ - req_access = newlist() - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled/techfloor/grid, -/area/crew_quarters/safe_room/bridge) -"yM" = ( -/obj/structure/sign/dedicationplaque{ - desc = "S.E.V. Torch - Mako Class - Sol Expeditionary Corps Registry 95519 - Shiva Fleet Yards, Mars - First Vessel To Bear The Name - Launched 2302 - Sol Central Government - 'Never was anything great achieved without danger.'" - }, -/turf/simulated/wall/r_wall/prepainted, -/area/bridge/storage) -"yR" = ( -/obj/machinery/door/airlock/security{ - name = "Security Checkpoint"; - secured_wires = 1 - }, -/obj/machinery/door/firedoor, -/obj/structure/cable/green{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/tiled/dark/monotile, -/area/security/bridgecheck) -"yS" = ( -/obj/structure/bed/chair/comfy/blue{ - dir = 4 - }, -/turf/simulated/floor/wood/walnut, -/area/crew_quarters/heads/office/co) -"yU" = ( -/obj/structure/table/woodentable_reinforced/walnut, -/obj/item/sticky_pad/random, -/obj/item/book/manual/nt_regs, -/turf/simulated/floor/carpet/green, -/area/crew_quarters/heads/office/cl) -"yV" = ( -/obj/random/closet, -/obj/effect/floor_decal/industrial/outline/grey, -/obj/random/maintenance/solgov/clean, -/obj/random/maintenance/solgov/clean, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/bridge/aftstarboard) -"yW" = ( -/turf/simulated/wall/prepainted, -/area/security/bridgecheck) -"yX" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/machinery/camera/all/command{ - c_tag = "AI Core - Aft Port"; - dir = 8 - }, -/obj/item/device/radio/intercom/locked/ai_private{ - dir = 1; - pixel_y = -22 - }, -/turf/simulated/floor/bluegrid, -/area/turret_protected/ai_foyer) -"za" = ( -/obj/structure/closet/secure_closet/XO, -/obj/random/drinkbottle, -/turf/simulated/floor/carpet, -/area/crew_quarters/heads/office/xo) -"zb" = ( -/obj/effect/shuttle_landmark/merc/deck1{ - name = "B-Deck, Aft" - }, -/turf/space, -/area/space) -"zc" = ( -/obj/structure/hygiene/sink{ - dir = 4; - pixel_x = 11 - }, -/obj/machinery/firealarm{ - dir = 4; - pixel_x = 21 - }, -/turf/simulated/floor/tiled/white/monotile, -/area/aquila/medical) -"zf" = ( -/obj/structure/bed/chair/comfy/blue{ - dir = 4 - }, -/turf/simulated/floor/carpet/blue2, -/area/bridge/meeting_room) -"zg" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/structure/bed/chair/comfy/blue{ - dir = 8 - }, -/turf/simulated/floor/tiled/dark, -/area/bridge) -"zh" = ( -/obj/structure/cable/green, -/obj/effect/wallframe_spawn/reinforced/polarized{ - id = "bridge_port" - }, -/turf/simulated/floor/plating, -/area/bridge) -"zm" = ( -/obj/machinery/flasher{ - pixel_x = -32; - pixel_y = 32 - }, -/turf/simulated/floor/bluegrid, -/area/turret_protected/ai) -"zo" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/effect/catwalk_plated, -/obj/structure/extinguisher_cabinet{ - pixel_y = -32 - }, -/obj/structure/disposalpipe/sortjunction/flipped{ - dir = 4; - name = "Chief Science Officer"; - sort_type = "Chief Science Officer" - }, -/turf/simulated/floor/plating, -/area/hallway/primary/bridge/fore) -"zq" = ( -/obj/structure/railing/mapped{ - dir = 1; - icon_state = "railing0-1" - }, -/turf/simulated/floor/plating, -/area/maintenance/bridge/forestarboard) -"zs" = ( -/obj/effect/floor_decal/industrial/outline/grey, -/obj/machinery/computer/modular/preset/civilian{ - icon_state = "console"; - dir = 1 - }, -/turf/simulated/floor/tiled/dark, -/area/turret_protected/ai) -"zt" = ( -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 8 - }, -/obj/structure/sign/warning/lethal_turrets{ - pixel_y = 32 - }, -/obj/structure/table/rack, -/obj/item/clothing/suit/space, -/obj/item/clothing/mask/breath, -/obj/item/clothing/head/helmet/space/fishbowl, -/obj/effect/floor_decal/industrial/warning/corner, -/turf/simulated/floor/tiled/dark/monotile, -/area/turret_protected/ai_foyer) -"zx" = ( -/obj/structure/catwalk, -/obj/machinery/pointdefense{ - initial_id_tag = "torch_primary_pd" - }, -/obj/machinery/power/terminal{ - dir = 4 - }, -/obj/structure/cable/green{ - d2 = 4; - icon_state = "0-4" - }, -/turf/simulated/floor/plating, -/area/space) -"zz" = ( -/obj/effect/floor_decal/corner/white/full, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/suit_storage_unit/command, -/obj/machinery/light{ - dir = 4; - icon_state = "tube1" - }, -/turf/simulated/floor/tiled/dark, -/area/aux_eva) -"zC" = ( -/obj/structure/table/rack, -/obj/item/storage/box/PDAs{ - pixel_x = 4; - pixel_y = 4 - }, -/obj/item/storage/box/ids, -/obj/item/storage/box/lights/mixed, -/obj/random/coin, -/obj/random/firstaid, -/obj/effect/floor_decal/industrial/outline/grey, -/obj/structure/sign/warning/nosmoking_1{ - pixel_x = 2; - pixel_y = 24 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/bridge/storage) -"zF" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 1 - }, -/obj/effect/floor_decal/corner/blue, -/turf/simulated/floor/tiled, -/area/hallway/primary/bridge/fore) -"zM" = ( -/obj/structure/table/steel_reinforced, -/obj/machinery/door/blast/shutters{ - density = 0; - dir = 4; - icon_state = "shutter0"; - id_tag = "bridge_checkpoint_shutters"; - name = "Bridge Deck Checkpoint Shutters"; - opacity = 0 - }, -/obj/machinery/door/window/brigdoor/northleft{ - dir = 8; - name = "Security Checkpoint" - }, -/obj/item/paper_bin{ - pixel_x = -3; - pixel_y = 7 - }, -/obj/item/pen{ - pixel_x = 4; - pixel_y = 4 - }, -/obj/machinery/door/firedoor, -/turf/simulated/floor/plating, -/area/security/bridgecheck) -"zN" = ( -/obj/effect/floor_decal/corner/blue{ - dir = 8 - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/dark, -/area/bridge) -"zP" = ( -/obj/structure/filingcabinet/chestdrawer{ - dir = 1 - }, -/obj/item/folder/blue, -/obj/item/folder/red, -/obj/item/folder, -/obj/item/folder/nt, -/obj/item/folder/yellow, -/obj/item/folder/white, -/obj/item/folder/blue, -/obj/machinery/light, -/turf/simulated/floor/wood/walnut, -/area/crew_quarters/heads/cobed) -"zQ" = ( -/obj/structure/railing/mapped{ - dir = 4; - icon_state = "railing0-1" - }, -/turf/simulated/open, -/area/maintenance/bridge/aftport) -"zT" = ( -/obj/effect/floor_decal/corner/blue{ - dir = 6 - }, -/turf/simulated/floor/tiled/dark, -/area/crew_quarters/heads/office/xo) -"zV" = ( -/obj/effect/wallframe_spawn/reinforced, -/obj/machinery/door/blast/shutters{ - density = 0; - dir = 2; - icon_state = "shutter0"; - id_tag = "bridge_checkpoint_shutters"; - name = "Bridge Deck Checkpoint Shutters"; - opacity = 0 - }, -/obj/structure/cable/green{ - d2 = 4; - icon_state = "0-4" - }, -/turf/simulated/floor/plating, -/area/security/bridgecheck) -"zW" = ( -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/bridge/aftstarboard) -"zX" = ( -/obj/effect/floor_decal/industrial/outline/grey, -/obj/machinery/porta_turret{ - dir = 8 - }, -/obj/machinery/light{ - dir = 4; - icon_state = "tube1" - }, -/turf/simulated/floor/tiled/dark, -/area/turret_protected/ai) -"zY" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/door/blast/shutters{ - density = 0; - dir = 2; - icon_state = "shutter0"; - id_tag = "bridge_hallway_shutters"; - name = "Bridge Deck Hallway Shutters"; - opacity = 0 - }, -/obj/effect/floor_decal/corner/red/mono, -/turf/simulated/floor/tiled/monotile, -/area/hallway/primary/bridge/fore) -"Ab" = ( -/obj/effect/shuttle_landmark/ninja/deck1{ - name = "B-Deck, Aft Port" - }, -/turf/space, -/area/space) -"Ac" = ( -/obj/machinery/optable, -/obj/item/device/radio/intercom{ - dir = 1; - pixel_y = -28 - }, -/turf/simulated/floor/tiled/white/monotile, -/area/aquila/medical) -"Ad" = ( -/obj/structure/bed/chair/office/comfy/blue{ - dir = 8 - }, -/turf/simulated/floor/wood/walnut, -/area/crew_quarters/heads/office/xo) -"Af" = ( -/obj/effect/floor_decal/corner/blue{ - dir = 5 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/dark, -/area/bridge) -"Ag" = ( -/obj/effect/paint/hull, -/obj/effect/wallframe_spawn/reinforced/titanium, -/obj/machinery/door/blast/regular/open{ - density = 0; - dir = 4; - icon_state = "pdoor0"; - id_tag = "aquila_shutters"; - name = "Protective Shutters"; - opacity = 0 - }, -/turf/simulated/floor/plating, -/area/aquila/air) -"Ah" = ( -/obj/structure/bed/chair/comfy/blue{ - dir = 1 - }, -/turf/simulated/floor/carpet/blue2, -/area/bridge/meeting_room) -"Ai" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark, -/area/aux_eva) -"Aj" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/turf/simulated/floor/tiled, -/area/crew_quarters/heads/office/rd) -"Al" = ( -/obj/effect/floor_decal/industrial/hatch/yellow, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/airless, -/area/space) -"Am" = ( -/obj/structure/window/reinforced{ - dir = 8 - }, -/obj/machinery/computer/ship/navigation{ - dir = 4 - }, -/obj/effect/floor_decal/corner/blue{ - dir = 8 - }, -/turf/simulated/floor/tiled/dark, -/area/bridge) -"An" = ( -/obj/item/device/radio/intercom{ - dir = 4; - pixel_x = -21 - }, -/obj/machinery/light, -/turf/simulated/floor/wood/walnut, -/area/crew_quarters/heads/office/co) -"Ao" = ( -/obj/structure/bed/chair/padded/green{ - dir = 1 - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/tiled, -/area/crew_quarters/heads/office/rd) -"Ap" = ( -/obj/effect/floor_decal/corner/blue, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 1 - }, -/obj/machinery/light, -/turf/simulated/floor/tiled, -/area/hallway/primary/bridge/fore) -"Aq" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 1 - }, -/obj/effect/floor_decal/corner/blue{ - dir = 10 - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/bridge/fore) -"Av" = ( -/obj/machinery/newscaster/security_unit{ - pixel_x = -32 - }, -/obj/structure/table/woodentable/walnut, -/obj/item/reagent_containers/food/drinks/ice, -/obj/item/reagent_containers/food/drinks/glass2/rocks, -/obj/item/reagent_containers/food/drinks/glass2/rocks, -/obj/random/drinkbottle, -/turf/simulated/floor/wood/walnut, -/area/crew_quarters/heads/cobed) -"Aw" = ( -/obj/structure/sign/warning/high_voltage{ - dir = 8 - }, -/turf/simulated/wall/r_wall/hull, -/area/bridge) -"Ay" = ( -/obj/machinery/alarm{ - dir = 8; - pixel_x = 24 - }, -/obj/effect/floor_decal/corner/red/half, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/hologram/holopad, -/turf/simulated/floor/tiled/monotile, -/area/hallway/primary/bridge/fore) -"AA" = ( -/obj/effect/floor_decal/corner/red/half{ - dir = 4 - }, -/obj/structure/table/standard{ - name = "plastic table frame" - }, -/obj/machinery/recharger{ - pixel_y = 4 - }, -/turf/simulated/floor/tiled/dark, -/area/security/bridgecheck) -"AB" = ( -/obj/structure/cable/green, -/obj/structure/cable/green{ - d2 = 2; - icon_state = "0-2" - }, -/obj/structure/cable/green{ - d2 = 4; - icon_state = "0-4" - }, -/obj/machinery/door/firedoor, -/obj/effect/wallframe_spawn/reinforced/hull, -/obj/machinery/door/blast/regular/open{ - dir = 4; - id_tag = "bridge blast"; - name = "Bridge Blast Doors" - }, -/turf/simulated/floor/plating, -/area/bridge) -"AE" = ( -/obj/structure/bed/chair/comfy/green, -/turf/simulated/floor/tiled, -/area/crew_quarters/heads/office/rd) -"AF" = ( -/obj/effect/floor_decal/industrial/outline/grey, -/obj/machinery/computer/modular/preset/security, -/turf/simulated/floor/tiled/dark, -/area/turret_protected/ai) -"AH" = ( -/obj/effect/wallframe_spawn/reinforced/polarized{ - id = "bridge_starboard" - }, -/obj/structure/cable/green{ - d2 = 2; - icon_state = "0-2" - }, -/turf/simulated/floor/plating, -/area/bridge) -"AI" = ( -/obj/structure/cable/green, -/obj/structure/cable/green{ - d2 = 4; - icon_state = "0-4" - }, -/obj/effect/wallframe_spawn/reinforced, -/obj/machinery/door/blast/shutters{ - density = 0; - dir = 2; - icon_state = "shutter0"; - id_tag = "bridge_checkpoint_shutters"; - name = "Bridge Deck Checkpoint Shutters"; - opacity = 0 - }, -/obj/structure/cable/green{ - d2 = 8; - icon_state = "0-8" - }, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/plating, -/area/security/bridgecheck) -"AJ" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/blast/regular/open{ - density = 0; - dir = 4; - icon_state = "pdoor0"; - id_tag = "bridge entry port"; - name = "Port Bridge Blast Doors"; - opacity = 0 - }, -/obj/effect/floor_decal/industrial/hatch/yellow, -/obj/machinery/door/airlock/multi_tile/glass/command{ - autoset_access = 0; - dir = 8; - id_tag = "portbridgeaccess"; - name = "Bridge Access"; - req_access = list(list("ACCESS_BRIDGE","ACCESS_TORCH_CREW")) - }, -/turf/simulated/floor/tiled/steel_ridged, -/area/bridge/hallway/port) -"AN" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/effect/floor_decal/techfloor{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/aquila/crew) -"AP" = ( -/obj/machinery/status_display, -/turf/simulated/wall/prepainted, -/area/hallway/primary/bridge/fore) -"AR" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 4 - }, -/obj/effect/floor_decal/corner/blue{ - dir = 9 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/bridge/fore) -"AS" = ( -/obj/machinery/porta_turret{ - dir = 8 - }, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/floor/reinforced, -/area/turret_protected/ai_outer_chamber) -"AU" = ( -/obj/machinery/light{ - dir = 4 - }, -/obj/machinery/power/smes/buildable/preset/torch/shuttle{ - RCon_tag = "Shuttle - Aquila Primary" - }, -/obj/structure/cable/cyan{ - d2 = 8; - icon_state = "0-8" - }, -/turf/simulated/floor/plating, -/area/aquila/power) -"AX" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/effect/catwalk_plated, -/turf/simulated/floor/plating, -/area/hallway/primary/bridge/fore) -"AZ" = ( -/obj/machinery/computer/modular/preset/cardslot/command{ - dir = 8; - icon_state = "console" - }, -/obj/machinery/requests_console{ - announcementConsole = 1; - department = "Chief Engineer's Desk"; - departmentType = 6; - name = "Chief Engineer RC"; - pixel_x = 32 - }, -/obj/effect/floor_decal/corner/yellow/mono, -/obj/item/modular_computer/tablet/lease/preset/command, -/turf/simulated/floor/tiled/monotile, -/area/crew_quarters/heads/office/ce) -"Bc" = ( -/obj/item/reagent_containers/glass/bottle/stoxin, -/obj/item/reagent_containers/glass/bottle/stoxin, -/obj/item/reagent_containers/syringe, -/obj/item/clothing/mask/surgical, -/obj/item/clothing/gloves/latex, -/obj/item/tank/anesthetic, -/obj/item/clothing/mask/breath/medical, -/obj/structure/iv_drip, -/obj/random/medical, -/obj/random/medical, -/obj/random/firstaid, -/turf/simulated/floor/tiled/white/monotile, -/area/aquila/medical) -"Bd" = ( -/obj/machinery/portable_atmospherics/powered/pump/filled, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/floor/plating, -/area/maintenance/bridge/forestarboard) -"Bp" = ( -/obj/effect/floor_decal/corner/red/full, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/suit_storage_unit/security/alt, -/obj/machinery/light{ - dir = 8; - icon_state = "tube1" - }, -/turf/simulated/floor/tiled/dark, -/area/aux_eva) -"Bs" = ( -/obj/machinery/light{ - dir = 8; - icon_state = "tube1" - }, -/turf/simulated/floor/carpet, -/area/crew_quarters/heads/office/xo) -"Bw" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/effect/catwalk_plated, -/obj/machinery/camera/network/bridge{ - c_tag = "Command Hallway - Center Starboard"; - dir = 1 - }, -/turf/simulated/floor/plating, -/area/hallway/primary/bridge/fore) -"BE" = ( -/obj/structure/table/glass, -/obj/effect/floor_decal/corner/blue/mono, -/obj/machinery/button/blast_door{ - id_tag = "bridge blast"; - name = "Bridge Window Lockdown Control"; - pixel_x = -30 - }, -/obj/machinery/light/spot{ - dir = 8 - }, -/obj/machinery/rotating_alarm/security_alarm{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/bridge) -"BF" = ( -/obj/effect/floor_decal/industrial/warning, -/obj/effect/floor_decal/industrial/hatch/yellow, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/airless, -/area/space) -"BG" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/railing/mapped{ - dir = 8; - icon_state = "railing0-1" - }, -/obj/structure/lattice, -/turf/simulated/open, -/area/maintenance/bridge/foreport) -"BI" = ( -/obj/structure/cable/green{ - d2 = 2; - icon_state = "0-2" - }, -/obj/machinery/door/firedoor, -/obj/effect/wallframe_spawn/reinforced/hull, -/obj/machinery/door/blast/regular/open{ - dir = 4; - id_tag = "cap_window"; - name = "CO's Quarters Shutters" - }, -/turf/simulated/floor/plating, -/area/crew_quarters/heads/office/co) -"BK" = ( -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/ai_slipper, -/turf/simulated/floor/bluegrid, -/area/turret_protected/ai_foyer) -"BO" = ( -/obj/machinery/power/port_gen/pacman{ - anchored = 1; - sheets = 25 - }, -/obj/effect/floor_decal/industrial/hatch/yellow, -/obj/structure/cable/yellow, -/turf/simulated/floor/tiled/techfloor, -/area/aquila/power) -"BR" = ( -/obj/structure/table/glass, -/obj/item/paper_bin{ - pixel_x = 1; - pixel_y = 9 - }, -/obj/item/pen, -/obj/machinery/light{ - dir = 4; - icon_state = "tube1" - }, -/turf/simulated/floor/tiled/monotile, -/area/crew_quarters/heads/office/rd) -"BW" = ( -/obj/structure/disposalpipe/segment, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/effect/floor_decal/industrial/warning{ - dir = 8 - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/bridge/aftport) -"BX" = ( -/obj/machinery/power/apc{ - dir = 8; - name = "west bump"; - pixel_x = -24 - }, -/obj/structure/cable/green{ - d2 = 4; - icon_state = "0-4" - }, -/obj/effect/floor_decal/corner/blue{ - dir = 9 - }, -/obj/structure/closet/emcloset, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/tiled, -/area/hallway/primary/bridge/fore) -"BY" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/obj/effect/floor_decal/corner/blue{ - dir = 1 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/bridge/fore) -"Cb" = ( -/obj/effect/shuttle_landmark/torch/deck1/aquila{ - name = "B-Deck, Fore Starboard" - }, -/turf/space, -/area/space) -"Cc" = ( -/obj/structure/closet/medical_wall{ - name = "blood storage"; - pixel_y = -32 - }, -/obj/item/reagent_containers/ivbag/blood/OMinus, -/obj/item/reagent_containers/ivbag/blood/OMinus, -/obj/item/reagent_containers/ivbag/blood/OMinus, -/obj/item/reagent_containers/ivbag/blood/OMinus, -/obj/item/reagent_containers/ivbag/blood/OMinus, -/obj/item/reagent_containers/ivbag/blood/OMinus, -/obj/item/reagent_containers/ivbag/blood/OMinus, -/turf/simulated/floor/tiled/white/monotile, -/area/aquila/medical) -"Cd" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/obj/structure/cable/green{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/machinery/light{ - dir = 8; - icon_state = "tube1" - }, -/turf/simulated/floor/wood/walnut, -/area/crew_quarters/heads/office/cl) -"Ce" = ( -/obj/effect/floor_decal/corner/blue{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark, -/area/crew_quarters/heads/office/xo) -"Cf" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 8; - icon_state = "warning" - }, -/turf/simulated/floor/tiled, -/area/crew_quarters/heads/office/ce) -"Cg" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 4 - }, -/obj/machinery/hologram/holopad/longrange, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/structure/cable/cyan{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/turf/simulated/floor/tiled/dark, -/area/aquila/crew) -"Ch" = ( -/obj/structure/bed/chair/comfy/captain{ - dir = 8 - }, -/obj/effect/floor_decal/scglogo{ - icon_state = "center-left" - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/turf/simulated/floor/tiled/dark, -/area/bridge) -"Ci" = ( -/obj/effect/floor_decal/corner/paleblue/diagonal{ - dir = 4 - }, -/obj/effect/floor_decal/corner/paleblue/diagonal, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/suit_storage_unit/medical/alt/sol, -/turf/simulated/floor/tiled/dark, -/area/aux_eva) -"Cj" = ( -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/bluegrid/airless, -/area/turret_protected/ai) -"Ck" = ( -/obj/effect/floor_decal/corner/blue{ - dir = 10 - }, -/obj/structure/bed/chair/comfy/blue{ - dir = 1 - }, -/turf/simulated/floor/tiled/dark, -/area/crew_quarters/heads/office/sea) -"Cl" = ( -/obj/machinery/requests_console{ - announcementConsole = 1; - department = "CO's Desk"; - departmentType = 5; - name = "CO Request Console"; - pixel_x = -30; - pixel_y = 32 - }, -/obj/machinery/light{ - dir = 8; - icon_state = "tube1" - }, -/turf/simulated/floor/carpet/blue, -/area/crew_quarters/heads/cobed) -"Cn" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/catwalk, -/turf/simulated/open, -/area/maintenance/bridge/aftport) -"Cr" = ( -/obj/effect/floor_decal/spline/fancy/wood/corner{ - dir = 4 - }, -/turf/simulated/floor/wood/walnut, -/area/crew_quarters/heads/cobed) -"Cs" = ( -/obj/structure/noticeboard{ - pixel_x = 32 - }, -/obj/machinery/newscaster{ - pixel_y = -32 - }, -/obj/effect/floor_decal/corner/yellow/mono, -/obj/machinery/photocopier, -/turf/simulated/floor/tiled/monotile, -/area/crew_quarters/heads/office/ce) -"Cv" = ( -/obj/structure/cable/green{ - d2 = 8; - icon_state = "0-8" - }, -/obj/structure/cable/green{ - d2 = 2; - icon_state = "0-2" - }, -/obj/effect/wallframe_spawn/reinforced/polarized{ - id = "cmo_windows" - }, -/obj/structure/cable/green, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/crew_quarters/heads/office/cmo) -"Cx" = ( -/obj/machinery/uniform_vendor{ - dir = 1 - }, -/turf/simulated/floor/wood/walnut, -/area/crew_quarters/heads/cobed) -"CD" = ( -/obj/effect/wallframe_spawn/reinforced/titanium, -/obj/machinery/door/blast/regular/open{ - density = 0; - dir = 4; - icon_state = "pdoor0"; - id_tag = "aquila_shutters"; - name = "Protective Shutters"; - opacity = 0 - }, -/obj/effect/paint/hull, -/turf/simulated/floor/plating, -/area/aquila/airlock) -"CE" = ( -/obj/structure/table/glass, -/obj/effect/floor_decal/corner/blue/mono, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/item/device/radio, -/turf/simulated/floor/tiled/dark/monotile, -/area/bridge) -"CG" = ( -/turf/simulated/floor/reinforced, -/area/turret_protected/ai_outer_chamber) -"CH" = ( -/obj/structure/sign/directions/bridge{ - dir = 8; - pixel_y = 3 - }, -/obj/structure/sign/directions/security{ - pixel_y = -4 - }, -/turf/simulated/wall/r_wall/prepainted, -/area/hallway/primary/bridge/fore) -"CL" = ( -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/hologram/holopad, -/turf/simulated/floor/bluegrid, -/area/turret_protected/ai_foyer) -"CM" = ( -/obj/machinery/alarm{ - dir = 1; - pixel_y = -28; - req_access = list(list("ACCESS_ENGINE_EQUIP","ACCESS_ATMOS")) - }, -/turf/simulated/floor/reinforced, -/area/turret_protected/ai_outer_chamber) -"CN" = ( -/turf/simulated/wall/r_wall/hull, -/area/maintenance/bridge/aftport) -"CO" = ( -/turf/simulated/wall/r_wall/hull, -/area/aux_eva) -"CP" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 1 - }, -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 8; - icon_state = "warningcorner" - }, -/obj/structure/disposalpipe/segment{ - dir = 8; - icon_state = "pipe-c" - }, -/turf/simulated/floor/tiled, -/area/crew_quarters/heads/office/ce) -"CU" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/effect/floor_decal/corner/blue/mono, -/obj/structure/disposalpipe/junction, -/turf/simulated/floor/tiled/monotile, -/area/hallway/primary/bridge/aft) -"CV" = ( -/obj/machinery/hologram/holopad, -/turf/simulated/floor/wood/walnut, -/area/crew_quarters/heads/cobed) -"CW" = ( -/obj/structure/table/woodentable_reinforced/walnut/maple, -/obj/item/reagent_containers/food/drinks/glass2/rocks, -/obj/machinery/newscaster/security_unit{ - pixel_y = -32 - }, -/obj/item/material/ashtray/bronze, -/turf/simulated/floor/wood/walnut, -/area/crew_quarters/heads/office/co) -"CY" = ( -/obj/machinery/light{ - dir = 4; - icon_state = "tube1" - }, -/turf/simulated/floor/bluegrid, -/area/turret_protected/ai_foyer) -"CZ" = ( -/obj/machinery/door/blast/shutters{ - density = 0; - dir = 2; - icon_state = "shutter0"; - id_tag = "bridgehallway"; - name = "Bridge Interior Hallway Shutters"; - opacity = 0 - }, -/obj/effect/floor_decal/industrial/hatch/yellow, -/obj/machinery/door/firedoor, -/turf/simulated/floor/tiled/dark/monotile, -/area/bridge/hallway/port) -"Db" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/door/airlock/hatch{ - name = "Storage" - }, -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/door/firedoor, -/turf/simulated/floor/tiled/steel_ridged, -/area/aquila/suits) -"Dc" = ( -/obj/structure/table/standard, -/obj/item/defibrillator/loaded, -/turf/simulated/floor/tiled/white/monotile, -/area/aquila/medical) -"De" = ( -/obj/structure/disposalpipe/segment, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/dark, -/area/bridge/storage) -"Dg" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/wood/walnut, -/area/crew_quarters/heads/office/cl) -"Dh" = ( -/obj/structure/table/woodentable_reinforced/walnut, -/obj/random_multi/single_item/memo_corporate, -/turf/simulated/floor/carpet/green, -/area/crew_quarters/heads/office/cl) -"Dj" = ( -/obj/structure/bed/chair/comfy/green, -/turf/simulated/floor/carpet/green, -/area/crew_quarters/heads/office/cl/backroom) -"Dq" = ( -/obj/effect/floor_decal/industrial/outline/grey, -/obj/structure/table/rack{ - dir = 8 - }, -/obj/structure/window/reinforced{ - dir = 1 - }, -/obj/structure/window/reinforced, -/obj/structure/window/reinforced{ - dir = 4 - }, -/obj/effect/floor_decal/corner/blue/diagonal, -/obj/effect/floor_decal/corner/blue/diagonal{ - dir = 4 - }, -/obj/item/tank/oxygen_emergency_double, -/obj/item/rig/command/xo/equipped, -/obj/machinery/door/window/brigdoor/westright{ - autoset_access = 0; - name = "XO's suit storage"; - req_access = list("ACCESS_HEAD_OF_PERSONNEL") - }, -/turf/simulated/floor/tiled/dark, -/area/aux_eva) -"Dr" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/bridge/fore) -"Dt" = ( -/obj/structure/dispenser/oxygen, -/obj/effect/floor_decal/industrial/outline/grey, -/obj/machinery/rotating_alarm/security_alarm{ - dir = 1 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/aux_eva) -"Du" = ( -/obj/structure/extinguisher_cabinet{ - pixel_x = 32 - }, -/obj/structure/table/rack, -/obj/item/aicard, -/obj/item/pinpointer, -/obj/item/storage/toolbox/mechanical, -/obj/item/device/multitool, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/floor/tiled/dark/monotile, -/area/bridge/storage) -"Dw" = ( -/turf/simulated/floor/tiled/dark, -/area/aquila/airlock) -"Dx" = ( -/obj/structure/cable/green{ - d2 = 2; - icon_state = "0-2" - }, -/obj/effect/wallframe_spawn/reinforced/polarized{ - id = "co_windows" - }, -/turf/simulated/floor/plating, -/area/crew_quarters/heads/office/co) -"DA" = ( -/obj/machinery/button/blast_door{ - pixel_x = 5; - pixel_y = -8; - id_tag = "AICoreLastResort"; - name = "AI Core Last Resort" - }, -/turf/simulated/wall/r_wall/prepainted, -/area/turret_protected/ai) -"DE" = ( -/obj/structure/cable/green, -/obj/machinery/door/firedoor, -/obj/effect/wallframe_spawn/reinforced/hull, -/turf/simulated/floor/plating, -/area/bridge/storage) -"DH" = ( -/obj/effect/floor_decal/corner/blue{ - dir = 9 - }, -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/turf/simulated/floor/tiled/dark, -/area/bridge/meeting_room) -"DI" = ( -/obj/structure/table/rack, -/obj/random/maintenance/solgov/clean, -/obj/random/maintenance/solgov/clean, -/turf/simulated/floor/plating, -/area/maintenance/bridge/forestarboard) -"DN" = ( -/turf/simulated/wall/r_wall/hull, -/area/hallway/primary/bridge/aft) -"DO" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/blue, -/turf/simulated/wall/r_wall/prepainted, -/area/turret_protected/ai_foyer) -"DP" = ( -/obj/machinery/status_display, -/turf/simulated/wall/prepainted, -/area/bridge/meeting_room) -"DQ" = ( -/obj/structure/bed/chair/comfy/captain{ - dir = 4 - }, -/turf/simulated/floor/wood/walnut, -/area/crew_quarters/heads/cobed) -"DR" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 4 - }, -/obj/structure/handrail, -/turf/simulated/floor/tiled/dark, -/area/aquila/suits) -"DV" = ( -/obj/structure/bed/chair/padded/blue, -/obj/effect/floor_decal/corner/blue{ - dir = 5 - }, -/obj/structure/sign/double/solgovflag/right{ - pixel_y = 32 - }, -/turf/simulated/floor/tiled/dark, -/area/bridge/disciplinary_board_room) -"DY" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 1 - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/turf/simulated/floor/wood/walnut, -/area/crew_quarters/heads/cobed) -"DZ" = ( -/obj/structure/flora/pottedplant/tall, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 8 - }, -/obj/machinery/light_switch{ - pixel_x = 23; - pixel_y = 24 - }, -/obj/machinery/alarm{ - dir = 8; - pixel_x = 24 - }, -/obj/machinery/light{ - dir = 1 - }, -/turf/simulated/floor/wood/walnut, -/area/crew_quarters/heads/office/sgr) -"Eb" = ( -/obj/machinery/camera/network/engineering{ - c_tag = "Shield Generator - Bridge Deck" - }, -/obj/machinery/alarm{ - dir = 4; - pixel_x = -22 - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/shield/bridge) -"Ec" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 6 - }, -/turf/simulated/floor/reinforced/airless, -/area/space) -"El" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/machinery/hologram/holopad, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/simulated/floor/tiled/monotile, -/area/hallway/primary/bridge/aft) -"En" = ( -/obj/effect/floor_decal/corner/blue{ - dir = 9 - }, -/turf/simulated/floor/tiled/dark, -/area/crew_quarters/heads/office/sea) -"Eq" = ( -/obj/machinery/power/apc{ - dir = 8; - name = "west bump"; - pixel_x = -24 - }, -/obj/effect/floor_decal/corner/red/mono, -/obj/structure/cable/green{ - d2 = 4; - icon_state = "0-4" - }, -/obj/structure/table/rack, -/obj/item/device/binoculars, -/obj/machinery/light, -/obj/machinery/requests_console{ - announcementConsole = 1; - department = "Security"; - departmentType = 5; - pixel_y = -32 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/security/bridgecheck) -"Es" = ( -/obj/structure/cable/green, -/obj/machinery/door/firedoor, -/obj/effect/wallframe_spawn/reinforced/hull, -/obj/machinery/door/blast/regular/open{ - dir = 4; - id_tag = "bridge blast"; - name = "Bridge Blast Doors" - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/turf/simulated/floor/plating, -/area/bridge) -"Ey" = ( -/obj/machinery/light, -/obj/machinery/disposal, -/obj/effect/floor_decal/corner/blue/mono, -/obj/effect/floor_decal/industrial/hatch/yellow, -/obj/structure/disposalpipe/trunk{ - dir = 4 - }, -/turf/simulated/floor/tiled/monotile, -/area/hallway/primary/bridge/aft) -"Ez" = ( -/obj/effect/floor_decal/techfloor{ - dir = 8 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/aquila/crew) -"EE" = ( -/obj/machinery/oxygen_pump{ - pixel_y = 32 - }, -/obj/structure/handrail, -/obj/effect/floor_decal/techfloor{ - dir = 1 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/aquila/airlock) -"EJ" = ( -/obj/effect/floor_decal/spline/fancy/wood{ - dir = 1 - }, -/turf/simulated/floor/wood/walnut, -/area/crew_quarters/heads/cobed) -"EM" = ( -/obj/structure/sign/warning/detailed, -/turf/simulated/wall/prepainted, -/area/crew_quarters/heads/office/xo) -"EN" = ( -/obj/effect/floor_decal/corner/paleblue/diagonal, -/obj/structure/sign/goldenplaque/medical{ - pixel_y = -32 - }, -/turf/simulated/floor/tiled/white, -/area/crew_quarters/heads/office/cmo) -"EP" = ( -/obj/effect/floor_decal/corner/paleblue/diagonal, -/obj/structure/closet/secure_closet/CMO_torch, -/obj/item/storage/belt/medical, -/obj/item/book/manual/sol_sop, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/firealarm{ - dir = 4; - pixel_x = 21 - }, -/turf/simulated/floor/tiled/white, -/area/crew_quarters/heads/office/cmo) -"EV" = ( -/obj/effect/floor_decal/corner/blue{ - dir = 10 - }, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 1 - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/dark, -/area/bridge) -"Fb" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/effect/catwalk_plated, -/turf/simulated/floor/plating, -/area/hallway/primary/bridge/fore) -"Fc" = ( -/obj/machinery/atmospherics/unary/vent_pump/high_volume/shuttle{ - dir = 4; - id_tag = "aquila_shuttle_pump_out_external" - }, -/obj/machinery/airlock_sensor{ - dir = 4; - frequency = 1331; - id_tag = "aquila_shuttle_sensor_external"; - pixel_x = 25; - pixel_y = -6 - }, -/obj/structure/handrail{ - dir = 8 - }, -/obj/machinery/access_button{ - command = "cycle_exterior"; - frequency = 1331; - master_tag = "aquila_shuttle"; - name = "exterior access button"; - pixel_x = 23; - pixel_y = 6 - }, -/turf/simulated/floor/airless, -/area/aquila/airlock) -"Fd" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/alarm{ - dir = 1; - pixel_y = -28; - req_access = list(list("ACCESS_ENGINE_EQUIP","ACCESS_ATMOS")) - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/blue{ - dir = 8; - icon_state = "map" - }, -/obj/machinery/light, -/obj/effect/floor_decal/techfloor{ - icon_state = "techfloor_edges"; - dir = 8 - }, -/obj/effect/floor_decal/industrial/warning{ - icon_state = "warning"; - dir = 8 - }, -/turf/simulated/floor/tiled/dark, -/area/turret_protected/ai_foyer) -"Ff" = ( -/obj/structure/table/rack, -/obj/effect/floor_decal/industrial/outline/grey, -/obj/item/device/radio, -/obj/item/crowbar/prybar, -/obj/item/device/binoculars, -/obj/item/storage/box/armband/sec, -/obj/item/storage/box/encryptionkey/security, -/obj/item/storage/box/armband/red_sec, -/turf/simulated/floor/tiled/dark/monotile, -/area/crew_quarters/heads/office/cos) -"Fg" = ( -/obj/structure/bed/chair/comfy/captain{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/carpet/blue, -/area/crew_quarters/heads/office/co) -"Fi" = ( -/obj/effect/floor_decal/industrial/outline/grey, -/obj/machinery/portable_atmospherics/canister/oxygen, -/turf/simulated/floor/tiled/dark/monotile, -/area/aux_eva) -"Fj" = ( -/obj/machinery/computer/rdservercontrol{ - dir = 4 - }, -/turf/simulated/floor/tiled/monotile, -/area/crew_quarters/heads/office/rd) -"Fl" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/item/reagent_containers/food/drinks/glass2/coffeecup/SCG{ - pixel_x = 3 - }, -/obj/structure/table/woodentable_reinforced/ebony/walnut, -/obj/structure/cable/green{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/turf/simulated/floor/carpet/blue, -/area/crew_quarters/heads/office/co) -"Fn" = ( -/obj/effect/floor_decal/scglogo{ - dir = 4; - icon_state = "bottom-center" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark, -/area/bridge/disciplinary_board_room) -"Fo" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/camera/all/command{ - c_tag = "AI Core - Entry"; - dir = 1 - }, -/obj/machinery/turretid/stun{ - check_synth = 1; - name = "AI Entry Chamber turret control"; - pixel_x = 0; - pixel_y = -32 - }, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 8 - }, -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/turret_protected/ai_foyer) -"Fp" = ( -/turf/simulated/wall/r_wall/hull, -/area/bridge/storage) -"Fv" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/blue{ - icon_state = "intact"; - dir = 4 - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 8 - }, -/obj/machinery/hologram/holopad, -/turf/simulated/floor/tiled/techmaint, -/area/turret_protected/ai_foyer) -"Fy" = ( -/obj/structure/window/reinforced{ - dir = 8 - }, -/obj/machinery/computer/modular/preset/cardslot/command{ - dir = 4; - icon_state = "console" - }, -/obj/effect/floor_decal/corner/blue{ - dir = 1 - }, -/turf/simulated/floor/tiled/dark, -/area/bridge) -"Fz" = ( -/turf/simulated/open, -/area/maintenance/bridge/foreport) -"FA" = ( -/obj/effect/floor_decal/industrial/outline/grey, -/obj/machinery/porta_turret{ - dir = 8 - }, -/turf/simulated/floor/tiled/dark, -/area/space) -"FE" = ( -/obj/machinery/computer/modular/preset/engineering{ - dir = 1 - }, -/obj/effect/floor_decal/corner/blue/mono, -/turf/simulated/floor/tiled/dark/monotile, -/area/bridge) -"FG" = ( -/obj/machinery/photocopier/faxmachine{ - department = "Torch - Executive Officer" - }, -/obj/structure/noticeboard{ - pixel_y = 30 - }, -/obj/structure/table/woodentable_reinforced/walnut, -/obj/machinery/newscaster{ - pixel_x = 32 - }, -/turf/simulated/floor/wood/walnut, -/area/crew_quarters/heads/office/xo) -"FK" = ( -/obj/effect/paint/hull, -/turf/simulated/wall/titanium, -/area/aquila/airlock) -"FL" = ( -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 6 - }, -/turf/simulated/floor/plating, -/area/maintenance/bridge/forestarboard) -"FR" = ( -/obj/machinery/camera/all/command{ - c_tag = "AI Core - Auxiliary Access"; - dir = 1 - }, -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/alarm{ - dir = 1; - pixel_y = -28; - req_access = list(list("ACCESS_ENGINE_EQUIP","ACCESS_ATMOS")) - }, -/obj/item/device/radio/intercom/locked/ai_private{ - pixel_y = 22 - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 8 - }, -/obj/machinery/hologram/holopad, -/turf/simulated/floor/tiled/techmaint, -/area/turret_protected/ai_outer_chamber) -"FS" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/camera/network/bridge{ - c_tag = "Command Hallway - Center Port" - }, -/obj/effect/floor_decal/corner/red{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/bridge/fore) -"FX" = ( -/obj/effect/floor_decal/corner/blue{ - dir = 5 - }, -/obj/structure/bed/chair/padded/blue, -/obj/structure/sign/double/solgovflag/left{ - pixel_y = 32 - }, -/turf/simulated/floor/tiled/dark, -/area/bridge/disciplinary_board_room) -"Ga" = ( -/obj/effect/floor_decal/corner/yellow{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 1 - }, -/obj/structure/disposalpipe/sortjunction{ - dir = 4; - name = "Chief Engineer"; - sort_type = "Chief Engineer" - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/bridge/fore) -"Gb" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply, -/obj/effect/floor_decal/corner/red{ - dir = 5 - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/bridge/fore) -"Gc" = ( -/obj/effect/paint/hull, -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 4 - }, -/turf/simulated/wall/titanium, -/area/aquila/suits) -"Gf" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/dark, -/area/crew_quarters/heads/office/cos) -"Gg" = ( -/obj/structure/window/reinforced{ - dir = 8 - }, -/obj/machinery/computer/modular/preset/cardslot/command{ - dir = 4; - icon_state = "console" - }, -/turf/simulated/floor/tiled/dark, -/area/bridge) -"Gi" = ( -/obj/random/closet, -/obj/random/maintenance/solgov, -/obj/random/maintenance/solgov/clean, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/bridge/aftport) -"Gj" = ( -/turf/simulated/floor/tiled, -/area/crew_quarters/heads/office/rd) -"Gn" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 4 - }, -/obj/effect/catwalk_plated, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/plating, -/area/hallway/primary/bridge/fore) -"Gp" = ( -/obj/machinery/alarm{ - dir = 1; - pixel_y = -28; - req_access = list(list("ACCESS_ENGINE_EQUIP","ACCESS_ATMOS")) - }, -/turf/simulated/floor/bluegrid, -/area/turret_protected/ai_foyer) -"Gr" = ( -/obj/structure/cable/green{ - d2 = 4; - icon_state = "0-4" - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/machinery/power/apc/super{ - dir = 1; - name = "north bump"; - pixel_y = 24 - }, -/turf/simulated/floor/tiled/dark, -/area/bridge/storage) -"Gs" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/extinguisher_cabinet{ - pixel_y = 28 - }, -/obj/effect/floor_decal/corner/blue{ - dir = 5 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/bridge/fore) -"Gy" = ( -/obj/structure/cable/green{ - d2 = 8; - icon_state = "0-8" - }, -/obj/effect/wallframe_spawn/reinforced/polarized{ - id = "cl_windows" - }, -/turf/simulated/floor/plating, -/area/crew_quarters/heads/office/cl) -"GA" = ( -/obj/structure/table/woodentable/walnut, -/obj/machinery/power/apc{ - dir = 1; - name = "north bump"; - pixel_y = 24 - }, -/obj/structure/cable/green{ - d2 = 2; - icon_state = "0-2" - }, -/obj/item/documents/nanotrasen, -/obj/item/storage/briefcase{ - pixel_x = 3 - }, -/obj/item/material/clipboard, -/obj/machinery/light{ - dir = 1 - }, -/turf/simulated/floor/carpet/green, -/area/crew_quarters/heads/office/cl/backroom) -"GB" = ( -/obj/machinery/computer/modular/preset/cardslot/command{ - dir = 8; - icon_state = "console" - }, -/obj/item/modular_computer/tablet/lease/preset/command, -/obj/machinery/button/alternate/door{ - desc = "A remote control-switch for the office door."; - id_tag = "liaisondoor"; - name = "CL's Front Office Door Control"; - pixel_x = 27; - pixel_y = -7; - req_access = list("ACCESS_TORCH_CORPORATE_LIAISON") - }, -/obj/machinery/button/windowtint{ - id = "cl_windows"; - pixel_x = 25; - pixel_y = 7 - }, -/turf/simulated/floor/carpet/green, -/area/crew_quarters/heads/office/cl) -"GD" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/effect/catwalk_plated, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 1 - }, -/turf/simulated/floor/plating, -/area/hallway/primary/bridge/fore) -"GI" = ( -/obj/structure/railing/mapped{ - dir = 8; - icon_state = "railing0-1" - }, -/obj/structure/railing/mapped{ - dir = 1; - icon_state = "railing0-1" - }, -/turf/simulated/open, -/area/maintenance/bridge/foreport) -"GM" = ( -/obj/effect/floor_decal/industrial/outline/blue, -/obj/machinery/atmospherics/portables_connector{ - dir = 1 - }, -/obj/machinery/portable_atmospherics/canister/air, -/turf/simulated/floor/reinforced, -/area/turret_protected/ai_outer_chamber) -"GU" = ( -/obj/structure/displaycase, -/obj/item/gun/projectile/revolver/medium/captain{ - pixel_y = -3 - }, -/obj/structure/sign/ecplaque{ - pixel_x = 29 - }, -/obj/machinery/light, -/obj/structure/sign/warning/smoking{ - pixel_y = -26 - }, -/turf/simulated/floor/wood/walnut, -/area/crew_quarters/heads/office/co) -"GV" = ( -/obj/machinery/computer/modular/preset/cardslot/command{ - dir = 4; - icon_state = "console" - }, -/obj/effect/floor_decal/corner/blue/mono, -/turf/simulated/floor/tiled/dark/monotile, -/area/bridge) -"GW" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden, -/obj/machinery/meter, -/turf/simulated/floor/plating, -/area/maintenance/bridge/forestarboard) -"GX" = ( -/obj/machinery/vending/wallmed1{ - pixel_y = 32; - products = list(/obj/item/stack/medical/bruise_pack=6,/obj/item/stack/medical/ointment=6,/obj/item/reagent_containers/pill/paracetamol=8,/obj/item/storage/med_pouch/trauma=4,/obj/item/storage/med_pouch/burn=2,/obj/item/storage/med_pouch/oxyloss=2,/obj/item/storage/med_pouch/toxin=2) - }, -/obj/machinery/pointdefense_control{ - initial_id_tag = "torch_primary_pd"; - name = "Point Defense Controller" - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/bridge/storage) -"GY" = ( -/obj/machinery/newscaster/security_unit{ - pixel_y = 32 - }, -/obj/machinery/computer/modular/preset/cardslot/command, -/turf/simulated/floor/tiled/dark/monotile, -/area/bridge/storage) -"GZ" = ( -/obj/machinery/firealarm{ - pixel_y = 24 - }, -/obj/structure/noticeboard{ - pixel_x = 32 - }, -/obj/machinery/computer/modular/preset/aislot/sysadmin, -/turf/simulated/floor/tiled/dark/monotile, -/area/bridge/storage) -"Hc" = ( -/obj/structure/bed/chair/padded/blue{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/turf/simulated/floor/tiled/dark, -/area/bridge/storage) -"He" = ( -/obj/structure/cable/green{ - d2 = 2; - icon_state = "0-2" - }, -/obj/structure/cable/green, -/obj/effect/wallframe_spawn/reinforced/polarized{ - id = "cl_windows" - }, -/turf/simulated/floor/plating, -/area/crew_quarters/heads/office/cl) -"Hf" = ( -/obj/structure/filingcabinet/chestdrawer{ - dir = 1 - }, -/obj/item/folder/blue, -/obj/item/folder/red, -/obj/item/folder, -/obj/item/folder/nt, -/obj/item/folder/yellow, -/obj/item/folder/white, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled/dark/monotile, -/area/bridge/storage) -"Hg" = ( -/obj/machinery/atmospherics/unary/vent_pump/high_volume/shuttle{ - dir = 1; - id_tag = "aquila_shuttle_pump_out_internal" - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/aquila/airlock) -"Hh" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/tiled/dark, -/area/crew_quarters/heads/office/xo) -"Hi" = ( -/obj/random/obstruction, -/turf/simulated/floor/plating, -/area/maintenance/bridge/aftport) -"Ho" = ( -/obj/machinery/door/airlock/sol{ - id_tag = "hopdoor"; - name = "Executive Officer"; - secured_wires = 1 - }, -/obj/machinery/door/firedoor, -/obj/structure/cable/green{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/tiled/dark/monotile, -/area/crew_quarters/heads/office/xo) -"Hp" = ( -/obj/structure/cable/green{ - d2 = 8; - icon_state = "0-8" - }, -/obj/effect/wallframe_spawn/reinforced/polarized{ - id = "xo_windows" - }, -/obj/machinery/door/blast/shutters{ - density = 0; - dir = 2; - icon_state = "shutter0"; - id_tag = "bridge entry star"; - name = "Bridge Starboard Lockdown Window Shutters"; - opacity = 0 - }, -/turf/simulated/floor/plating, -/area/crew_quarters/heads/office/xo) -"Hq" = ( -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/bluegrid, -/area/turret_protected/ai_foyer) -"Hr" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/door/airlock/external{ - frequency = 1379; - icon_state = "closed"; - id_tag = "ai_core_outer"; - locked = 1; - name = "AI Core Internal Access" - }, -/turf/simulated/floor/tiled/techmaint, -/area/turret_protected/ai_foyer) -"Hs" = ( -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/door/blast/regular/open{ - density = 0; - dir = 4; - icon_state = "pdoor0"; - id_tag = "bridge entry star"; - name = "Starboard Bridge Blast Doors"; - opacity = 0 - }, -/obj/effect/floor_decal/industrial/hatch/yellow, -/obj/machinery/door/airlock/multi_tile/glass/command{ - autoset_access = 0; - dir = 8; - id_tag = "starboardbridgeaccess"; - name = "Bridge Access"; - req_access = list(list("ACCESS_BRIDGE","ACCESS_TORCH_CREW")) - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/tiled/steel_ridged, -/area/bridge/hallway/starboard) -"Ht" = ( -/obj/item/soap, -/obj/item/bikehorn/rubberducky, -/obj/structure/hygiene/shower{ - dir = 8 - }, -/turf/simulated/floor/tiled/freezer, -/area/crew_quarters/heads/cobed) -"Hv" = ( -/obj/effect/wallframe_spawn/reinforced/polarized{ - id = "meeting_windows" - }, -/obj/structure/cable/green, -/obj/structure/cable/green{ - d2 = 4; - icon_state = "0-4" - }, -/turf/simulated/floor/plating, -/area/bridge/meeting_room) -"Hw" = ( -/obj/machinery/atmospherics/unary/vent_pump/on, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/carpet/green, -/area/crew_quarters/heads/office/cl) -"Hx" = ( -/obj/structure/cable/green{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/structure/disposalpipe/segment{ - dir = 1; - icon_state = "pipe-c" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply, -/obj/machinery/light_switch{ - pixel_x = 23; - pixel_y = 24 - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/turf/simulated/floor/tiled/dark, -/area/bridge) -"Hz" = ( -/obj/structure/cable/green, -/obj/structure/cable/green{ - d2 = 2; - icon_state = "0-2" - }, -/obj/machinery/door/firedoor, -/obj/effect/wallframe_spawn/reinforced/hull, -/obj/machinery/door/blast/regular/open{ - dir = 4; - id_tag = "bridge blast"; - name = "Bridge Blast Doors" - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/plating, -/area/bridge) -"HB" = ( -/obj/machinery/door/airlock/highsecurity{ - name = "AI Outer Ring Access" - }, -/turf/simulated/floor/tiled/techmaint, -/area/turret_protected/ai_outer_chamber) -"HC" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/dark, -/area/bridge) -"HE" = ( -/obj/machinery/status_display, -/turf/simulated/wall/r_wall/hull, -/area/bridge) -"HF" = ( -/obj/machinery/computer/modular/preset/dock, -/obj/effect/floor_decal/corner/blue{ - dir = 5 - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/bridge) -"HG" = ( -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/door/airlock/research{ - id_tag = "liaisondoor3"; - name = "Corporate Liaison"; - secured_wires = 1 - }, -/turf/simulated/floor/wood/walnut, -/area/crew_quarters/heads/office/cl) -"HH" = ( -/obj/effect/floor_decal/scglogo{ - icon_state = "top-left" - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/dark, -/area/bridge) -"HI" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/glass/command{ - name = "Bridge Storage" - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/bridge) -"HJ" = ( -/obj/structure/table/woodentable/walnut, -/obj/item/stamp/solgov, -/obj/item/stamp/denied{ - pixel_x = 4; - pixel_y = -2 - }, -/obj/random_multi/single_item/memo_scgr, -/obj/structure/sign/double/solgovflag/left{ - dir = 1; - pixel_y = -32 - }, -/turf/simulated/floor/carpet/blue2, -/area/crew_quarters/heads/office/sgr) -"HK" = ( -/obj/effect/overmap/visitable/ship/torch, -/turf/simulated/floor/tiled/dark, -/area/bridge) -"HP" = ( -/obj/machinery/computer/modular/preset/supply_public{ - dir = 1; - icon_state = "console" - }, -/obj/effect/floor_decal/corner/blue{ - dir = 10 - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/bridge) -"HS" = ( -/obj/effect/floor_decal/corner/blue{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/dark, -/area/bridge) -"HW" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/newscaster/security_unit{ - pixel_y = -32 - }, -/turf/simulated/floor/tiled/dark, -/area/bridge) -"HX" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/sol{ - id_tag = "portbridgedoor"; - name = "Bridge"; - secured_wires = 1 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/bridge) -"Ia" = ( -/obj/structure/table/standard{ - name = "plastic table frame" - }, -/obj/item/paper_bin{ - pixel_x = -3; - pixel_y = 7 - }, -/obj/item/pen, -/obj/item/stamp/ce, -/obj/item/sticky_pad/random, -/turf/simulated/floor/tiled, -/area/crew_quarters/heads/office/ce) -"Ib" = ( -/obj/machinery/door/blast/regular/open{ - density = 0; - icon_state = "pdoor0"; - id_tag = "aquila_shutters"; - name = "Protective Shutters"; - opacity = 0 - }, -/obj/effect/wallframe_spawn/reinforced/titanium, -/obj/effect/paint/hull, -/turf/simulated/floor/plating, -/area/aquila/cockpit) -"Ic" = ( -/obj/effect/floor_decal/industrial/warning/corner{ - icon_state = "warningcorner"; - dir = 8 - }, -/turf/simulated/floor/reinforced/airless, -/area/space) -"Id" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/carpet/blue, -/area/crew_quarters/heads/office/co) -"Ie" = ( -/turf/simulated/wall/r_wall/hull, -/area/bridge) -"If" = ( -/obj/effect/floor_decal/corner/blue/three_quarters{ - dir = 8 - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/bed/chair/comfy/blue{ - dir = 8 - }, -/turf/simulated/floor/tiled/dark, -/area/bridge) -"Ig" = ( -/obj/item/paper_bin{ - pixel_x = -3; - pixel_y = 7 - }, -/obj/item/pen, -/obj/structure/table/woodentable_reinforced/ebony/walnut, -/turf/simulated/floor/carpet/blue, -/area/crew_quarters/heads/office/co) -"Ih" = ( -/obj/item/stamp/co, -/obj/structure/table/woodentable_reinforced/ebony/walnut, -/turf/simulated/floor/carpet/blue, -/area/crew_quarters/heads/office/co) -"Ii" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 8 - }, -/obj/machinery/light{ - dir = 4; - icon_state = "tube1" - }, -/obj/structure/holoplant, -/turf/simulated/floor/tiled/dark, -/area/crew_quarters/heads/office/co) -"Ij" = ( -/obj/structure/cable/cyan{ - d2 = 4; - icon_state = "0-4" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/red{ - dir = 5; - icon_state = "intact" - }, -/obj/machinery/power/apc/super/critical{ - dir = 1; - is_critical = 1; - name = "north bump"; - pixel_y = 24 - }, -/obj/effect/floor_decal/techfloor{ - icon_state = "techfloor_edges"; - dir = 8 - }, -/obj/effect/floor_decal/industrial/warning{ - icon_state = "warning"; - dir = 8 - }, -/turf/simulated/floor/tiled/dark, -/area/turret_protected/ai_foyer) -"Ik" = ( -/obj/machinery/button/alternate/door/bolts{ - id_tag = "bridge_safe_exterior"; - name = "safe room door-control"; - pixel_x = -25; - pixel_y = -1 - }, -/obj/effect/floor_decal/techfloor/orange{ - dir = 9 - }, -/obj/machinery/light_switch{ - pixel_x = -24; - pixel_y = 8 - }, -/turf/simulated/floor/tiled/techfloor, -/area/crew_quarters/safe_room/bridge) -"In" = ( -/obj/effect/floor_decal/spline/fancy/wood{ - dir = 10 - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 8 - }, -/turf/simulated/floor/tiled/dark, -/area/crew_quarters/heads/office/co) -"Io" = ( -/obj/effect/floor_decal/spline/fancy/wood, -/obj/machinery/requests_console{ - announcementConsole = 1; - department = "Captain's Desk"; - departmentType = 5; - name = "Captain RC"; - pixel_x = 30 - }, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 8 - }, -/turf/simulated/floor/tiled/dark, -/area/crew_quarters/heads/office/co) -"Ip" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/tiled/dark, -/area/crew_quarters/heads/office/sea) -"Iq" = ( -/obj/structure/bookcase, -/obj/item/book/manual/solgov_law, -/obj/item/book/manual/sol_sop, -/obj/item/book/manual/military_law, -/obj/effect/floor_decal/corner/blue/mono, -/turf/simulated/floor/tiled/dark/monotile, -/area/crew_quarters/heads/office/sea) -"Is" = ( -/obj/structure/bed/chair/padded/blue, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/dark, -/area/crew_quarters/heads/office/sea) -"Iv" = ( -/obj/machinery/door/airlock/sol{ - name = "CO's Quarters"; - secured_wires = 1 - }, -/obj/machinery/door/firedoor, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/wood/walnut, -/area/crew_quarters/heads/cobed) -"Ix" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/carpet/green, -/area/crew_quarters/heads/office/cl) -"Iz" = ( -/obj/effect/floor_decal/spline/fancy/wood{ - dir = 8 - }, -/obj/machinery/camera/network/command{ - c_tag = "CO - Quarters" - }, -/obj/machinery/recharger/wallcharger{ - pixel_y = 24 - }, -/turf/simulated/floor/wood/walnut, -/area/crew_quarters/heads/cobed) -"IA" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/light_switch{ - pixel_x = 23; - pixel_y = 24 - }, -/turf/simulated/floor/wood/walnut, -/area/crew_quarters/heads/cobed) -"IB" = ( -/obj/structure/bookcase, -/obj/item/book/manual/solgov_law, -/obj/item/book/manual/sol_sop, -/obj/item/book/manual/military_law, -/turf/simulated/floor/wood/walnut, -/area/crew_quarters/heads/cobed) -"IE" = ( -/obj/structure/table/standard{ - name = "plastic table frame" - }, -/obj/machinery/photocopier/faxmachine{ - department = "Torch - Senior Enlisted Advisor" - }, -/obj/effect/floor_decal/corner/blue/mono, -/obj/machinery/requests_console{ - announcementConsole = 1; - department = "Senior Enlisted Advisor's Desk"; - departmentType = 6; - name = "Senior Enlisted Advisor RC"; - pixel_y = -34 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/crew_quarters/heads/office/sea) -"IF" = ( -/obj/machinery/atmospherics/unary/tank/air{ - dir = 8; - start_pressure = 450 - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/rotating_alarm/security_alarm{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/crew_quarters/safe_room/bridge) -"IG" = ( -/obj/effect/floor_decal/spline/fancy/wood{ - dir = 8 - }, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 4 - }, -/turf/simulated/floor/wood/walnut, -/area/crew_quarters/heads/cobed) -"IH" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/disposalpipe/segment{ - dir = 1; - icon_state = "pipe-c" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/wood/walnut, -/area/crew_quarters/heads/cobed) -"IJ" = ( -/obj/effect/paint/red, -/obj/machinery/atmospherics/pipe/simple/hidden/fuel{ - dir = 9 - }, -/turf/simulated/wall/titanium, -/area/aquila/power) -"IK" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/hatch/maintenance, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/tiled/steel_ridged, -/area/hallway/primary/bridge/fore) -"IL" = ( -/obj/effect/paint/red, -/obj/machinery/atmospherics/pipe/manifold4w/hidden/fuel, -/turf/simulated/wall/titanium, -/area/aquila/power) -"IT" = ( -/obj/structure/table/glass, -/obj/machinery/keycard_auth/torch{ - pixel_x = 26 - }, -/obj/structure/noticeboard{ - pixel_y = 30 - }, -/obj/item/sticky_pad/random, -/obj/machinery/button/alternate/door{ - desc = "A remote control-switch for the office door."; - id_tag = "csodoor"; - name = "CSO's Office Door Control"; - pixel_x = 28; - pixel_y = 28; - req_access = list("ACCESS_RESEARCH_DIRECTOR") - }, -/obj/effect/floor_decal/corner/research/half{ - dir = 1 - }, -/turf/simulated/floor/tiled/monotile, -/area/crew_quarters/heads/office/rd) -"IW" = ( -/obj/effect/floor_decal/corner/yellow/full, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/suit_storage_unit/atmos/alt/sol, -/turf/simulated/floor/tiled/dark, -/area/aux_eva) -"IX" = ( -/obj/effect/landmark{ - name = "lightsout" - }, -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/ai_slipper, -/obj/machinery/door/blast/regular/open{ - density = 0; - dir = 4; - icon_state = "pdoor0"; - id_tag = "AICoreLastResort"; - name = "Last Resort"; - opacity = 0; - maxhealth = 5500 - }, -/turf/simulated/floor/bluegrid/airless, -/area/turret_protected/ai) -"IY" = ( -/obj/structure/table/glass, -/obj/effect/floor_decal/corner/blue{ - dir = 6 - }, -/obj/item/device/destTagger, -/obj/item/stack/package_wrap/twenty_five, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/bridge) -"Jc" = ( -/obj/machinery/power/apc{ - dir = 1; - name = "north bump"; - pixel_y = 24; - req_access = list(list("ACCESS_ENGINE_EQUIP","ACCESS_ATMOS")) - }, -/obj/machinery/light/small{ - dir = 4; - icon_state = "bulb1" - }, -/obj/structure/cable/green{ - d2 = 2; - icon_state = "0-2" - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/shield/bridge) -"Je" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/turf/simulated/floor/tiled/dark, -/area/bridge/storage) -"Jg" = ( -/obj/machinery/atmospherics/unary/vent_pump/high_volume/shuttle{ - id_tag = "aquila_shuttle_pump" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/aquila/airlock) -"Jh" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark, -/area/bridge/storage) -"Ji" = ( -/obj/random/obstruction, -/turf/simulated/floor/plating, -/area/maintenance/bridge/foreport) -"Jj" = ( -/obj/structure/bed/chair/padded/green{ - dir = 1 - }, -/turf/simulated/floor/tiled, -/area/crew_quarters/heads/office/rd) -"Jn" = ( -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/ai_slipper, -/turf/simulated/floor/tiled/techmaint, -/area/turret_protected/ai_outer_chamber) -"Jo" = ( -/obj/effect/floor_decal/corner/blue/mono, -/turf/simulated/floor/tiled/dark/monotile, -/area/bridge/disciplinary_board_room) -"Jp" = ( -/obj/machinery/atmospherics/unary/tank/air{ - dir = 1 - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/plating, -/area/maintenance/bridge/forestarboard) -"Jt" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 1; - icon_state = "warning" - }, -/turf/simulated/floor/tiled/monotile, -/area/hallway/primary/bridge/fore) -"JA" = ( -/obj/machinery/atmospherics/pipe/simple/visible/fuel{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/plating, -/area/aquila/power) -"JE" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 8 - }, -/turf/simulated/floor/tiled/white, -/area/aquila/medical) -"JF" = ( -/obj/structure/grille, -/obj/structure/railing/mapped{ - dir = 1; - icon_state = "railing0-1" - }, -/turf/simulated/floor/plating, -/area/maintenance/bridge/forestarboard) -"JG" = ( -/obj/structure/catwalk, -/turf/simulated/open, -/area/maintenance/bridge/foreport) -"JN" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 8 - }, -/turf/simulated/floor/reinforced/airless, -/area/space) -"JT" = ( -/obj/effect/floor_decal/industrial/outline/grey, -/obj/random_multi/single_item/piano, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/bridge/forestarboard) -"JV" = ( -/obj/machinery/atmospherics/portables_connector, -/obj/effect/floor_decal/industrial/outline, -/obj/machinery/portable_atmospherics/canister/air/airlock{ - start_pressure = 1900 - }, -/turf/simulated/floor/plating, -/area/aquila/air) -"Ka" = ( -/obj/structure/cable/green, -/obj/effect/wallframe_spawn/reinforced/polarized{ - id = "cl_windows" - }, -/turf/simulated/floor/plating, -/area/crew_quarters/heads/office/cl) -"Kb" = ( -/obj/structure/sign/warning/high_voltage{ - pixel_y = -6 - }, -/turf/simulated/wall/prepainted, -/area/crew_quarters/heads/office/rd) -"Kc" = ( -/obj/machinery/oxygen_pump{ - pixel_y = 32 - }, -/obj/structure/handrail, -/obj/effect/floor_decal/techfloor{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden{ - dir = 8 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/aquila/airlock) -"Ke" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/tiled/dark, -/area/bridge/storage) -"Kf" = ( -/obj/effect/floor_decal/corner/paleblue/diagonal, -/obj/structure/table/glass, -/obj/random_multi/single_item/memo_medical, -/turf/simulated/floor/tiled/white, -/area/crew_quarters/heads/office/cmo) -"Kh" = ( -/obj/structure/window/reinforced{ - dir = 1 - }, -/obj/structure/table/woodentable_reinforced/walnut/maple, -/obj/machinery/keycard_auth/torch{ - pixel_x = 26 - }, -/obj/item/storage/box/matches, -/obj/random/smokes, -/turf/simulated/floor/wood/walnut, -/area/crew_quarters/heads/office/co) -"Kj" = ( -/obj/machinery/camera/network/command{ - c_tag = "Chief Science Officer - Office"; - dir = 8; - network = list("Command","Research") - }, -/obj/machinery/papershredder, -/turf/simulated/floor/tiled/monotile, -/area/crew_quarters/heads/office/rd) -"Km" = ( -/obj/structure/disposalpipe/segment{ - dir = 8; - icon_state = "pipe-c" - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/obj/structure/catwalk, -/turf/simulated/open, -/area/maintenance/bridge/aftport) -"Kq" = ( -/obj/structure/closet/secure_closet/CO, -/obj/structure/noticeboard{ - pixel_y = 30 - }, -/obj/item/aiModule/freeform, -/turf/simulated/floor/carpet/blue, -/area/crew_quarters/heads/cobed) -"Kr" = ( -/obj/effect/floor_decal/industrial/warning/corner, -/obj/effect/floor_decal/industrial/hatch/yellow, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/airless, -/area/space) -"Ks" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/tiled/dark, -/area/bridge/storage) -"Kt" = ( -/obj/effect/floor_decal/scglogo{ - icon_state = "bottom-left" - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/dark, -/area/bridge) -"Ku" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/blue{ - icon_state = "intact"; - dir = 4 - }, -/obj/machinery/door/airlock/external{ - frequency = 1379; - icon_state = "closed"; - id_tag = "ai_core_inner"; - locked = 1; - name = "AI Internal Access" - }, -/turf/simulated/floor/tiled/techmaint, -/area/turret_protected/ai_foyer) -"Kv" = ( -/obj/machinery/alarm{ - dir = 8; - pixel_x = 24 - }, -/obj/machinery/disposal, -/obj/effect/floor_decal/industrial/hatch/yellow, -/obj/structure/disposalpipe/trunk{ - dir = 8 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/bridge/storage) -"Kx" = ( -/obj/structure/filingcabinet/chestdrawer{ - dir = 1 - }, -/obj/item/folder/blue, -/obj/item/folder/red, -/obj/item/folder, -/obj/item/folder/nt, -/obj/item/folder/yellow, -/obj/item/folder/white, -/obj/item/storage/secure/safe{ - pixel_x = 36 - }, -/obj/machinery/newscaster{ - pixel_y = 32 - }, -/turf/simulated/floor/carpet/green, -/area/crew_quarters/heads/office/cl/backroom) -"KB" = ( -/obj/structure/largecrate, -/turf/simulated/floor/plating, -/area/maintenance/bridge/forestarboard) -"KC" = ( -/obj/structure/flora/pottedplant/bamboo, -/obj/machinery/power/apc{ - dir = 4; - name = "east bump"; - pixel_x = 24 - }, -/obj/structure/cable/green{ - d2 = 8; - icon_state = "0-8" - }, -/turf/simulated/floor/wood/walnut, -/area/crew_quarters/heads/cobed) -"KG" = ( -/obj/structure/cable/green{ - d2 = 2; - icon_state = "0-2" - }, -/obj/structure/cable/green{ - d2 = 4; - icon_state = "0-4" - }, -/obj/machinery/door/firedoor, -/obj/effect/wallframe_spawn/reinforced/hull, -/obj/machinery/door/blast/regular/open{ - dir = 4; - id_tag = "bridge blast"; - name = "Bridge Blast Doors" - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/turf/simulated/floor/plating, -/area/bridge) -"KH" = ( -/obj/structure/railing/mapped{ - dir = 1; - icon_state = "railing0-1" - }, -/turf/simulated/floor/plating, -/area/maintenance/bridge/aftstarboard) -"KI" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/floor_decal/corner/brown/half{ - dir = 4 - }, -/obj/item/device/radio/intercom{ - dir = 1; - pixel_y = -28 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/aquila/airlock) -"KN" = ( -/obj/machinery/camera/network/aquila{ - c_tag = "Aquila - Infirmary"; - dir = 8 - }, -/obj/machinery/sleeper{ - dir = 8 - }, -/turf/simulated/floor/tiled/white/monotile, -/area/aquila/medical) -"KP" = ( -/obj/effect/floor_decal/corner/paleblue/diagonal, -/obj/structure/table/glass, -/obj/machinery/photocopier/faxmachine{ - department = "Torch - Chief Medical Officer" - }, -/obj/item/stamp/cmo, -/obj/item/device/radio{ - frequency = 1487; - name = "medbay emergency radio link" - }, -/turf/simulated/floor/tiled/white, -/area/crew_quarters/heads/office/cmo) -"KW" = ( -/obj/structure/cable/cyan{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/machinery/camera/all/command{ - c_tag = "AI Core - Aft Starboard"; - dir = 8 - }, -/obj/item/device/radio/intercom/locked/ai_private{ - pixel_y = 22 - }, -/turf/simulated/floor/bluegrid, -/area/turret_protected/ai_foyer) -"KX" = ( -/obj/effect/floor_decal/corner/blue{ - dir = 9 - }, -/turf/simulated/floor/tiled/dark, -/area/bridge/hallway/starboard) -"KZ" = ( -/obj/random/plushie/large, -/turf/simulated/floor/plating, -/area/maintenance/bridge/foreport) -"La" = ( -/obj/structure/sign/directions/supply{ - pixel_y = -4 - }, -/obj/structure/sign/directions/engineering{ - pixel_y = 3 - }, -/turf/simulated/wall/r_wall/prepainted, -/area/hallway/primary/bridge/fore) -"Lb" = ( -/obj/effect/floor_decal/corner/blue{ - dir = 6 - }, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 8 - }, -/obj/item/device/radio/intercom{ - dir = 8; - pixel_x = 20 - }, -/turf/simulated/floor/tiled/dark, -/area/bridge/disciplinary_board_room) -"Le" = ( -/obj/structure/sign/warning/high_voltage, -/turf/simulated/wall/prepainted, -/area/crew_quarters/heads/office/cl) -"Lf" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/unary/vent_pump/on, -/turf/simulated/floor/tiled, -/area/hallway/primary/bridge/fore) -"Lg" = ( -/obj/machinery/light/small, -/obj/machinery/atmospherics/unary/vent_pump/high_volume/shuttle{ - dir = 4; - id_tag = "aquila_shuttle_pump" - }, -/obj/machinery/airlock_sensor{ - frequency = 1331; - id_tag = "aquila_shuttle_sensor"; - pixel_y = -24 - }, -/obj/structure/handrail{ - dir = 1 - }, -/obj/effect/floor_decal/techfloor, -/turf/simulated/floor/tiled/techfloor/grid, -/area/aquila/airlock) -"Lh" = ( -/obj/effect/floor_decal/corner/blue{ - dir = 9 - }, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark, -/area/bridge/disciplinary_board_room) -"Li" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers, -/obj/effect/floor_decal/corner/lime{ - dir = 5 - }, -/obj/machinery/tele_beacon, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/cable/cyan{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/aquila/airlock) -"Lj" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/bridge/aftstarboard) -"Ll" = ( -/obj/effect/floor_decal/corner/paleblue/diagonal, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/crew_quarters/heads/office/cmo) -"Lr" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/catwalk, -/obj/effect/floor_decal/industrial/warning{ - dir = 8 - }, -/turf/simulated/floor/plating, -/area/maintenance/bridge/foreport) -"Lv" = ( -/obj/structure/table/glass, -/obj/item/book/manual/nt_regs, -/obj/item/stamp/rd, -/obj/effect/floor_decal/corner/research{ - dir = 5 - }, -/turf/simulated/floor/tiled, -/area/crew_quarters/heads/office/rd) -"Lw" = ( -/obj/machinery/button/blast_door{ - id_tag = "bridge entry port"; - name = "Port Bridge Entrance Lockdown Control"; - pixel_x = 32; - pixel_y = -42; - req_access = list("ACCESS_BRIDGE") - }, -/obj/machinery/button/blast_door{ - id_tag = "bridge entry star"; - name = "Starboard Bridge Entrance Lockdown Control"; - pixel_x = 32; - pixel_y = -24; - req_access = list("ACCESS_BRIDGE") - }, -/obj/machinery/button/blast_door{ - id_tag = "bridgehallway"; - name = "Bridge Internal Hallway Lockdown Control"; - pixel_x = 25; - pixel_y = -33; - req_access = list("ACCESS_BRIDGE") - }, -/obj/machinery/button/blast_door{ - id_tag = "heads_meeting"; - name = "Bridge Meeting Room Shutters Control"; - pixel_x = 39; - pixel_y = -33; - req_access = list("ACCESS_BRIDGE") - }, -/obj/effect/floor_decal/corner/blue{ - dir = 10 - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/dark, -/area/bridge) -"LF" = ( -/obj/effect/floor_decal/industrial/warning/corner{ - icon_state = "warningcorner"; - dir = 1 - }, -/turf/simulated/floor/reinforced/airless, -/area/space) -"LJ" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/light{ - dir = 8; - icon_state = "tube1" - }, -/turf/simulated/floor/tiled/dark, -/area/bridge/storage) -"LL" = ( -/obj/structure/cable/cyan{ - d2 = 4; - icon_state = "0-4" - }, -/obj/machinery/power/sensor{ - name = "Powernet Sensor - AI Subgrid"; - name_tag = "AI Subgrid" - }, -/obj/structure/cable/cyan{ - d2 = 8; - icon_state = "0-8" - }, -/obj/structure/table/steel_reinforced, -/turf/simulated/floor/tiled/dark, -/area/turret_protected/ai) -"LM" = ( -/obj/structure/catwalk, -/turf/simulated/open, -/area/maintenance/bridge/aftport) -"LN" = ( -/obj/structure/table/woodentable/walnut, -/obj/item/material/ashtray/glass, -/turf/simulated/floor/carpet/blue2, -/area/bridge/meeting_room) -"LP" = ( -/obj/structure/cable/green{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/turf/simulated/floor/tiled/dark, -/area/bridge/storage) -"LQ" = ( -/obj/effect/paint/red, -/obj/machinery/atmospherics/pipe/manifold/hidden/fuel{ - dir = 1 - }, -/turf/simulated/wall/titanium, -/area/aquila/medical) -"LR" = ( -/obj/structure/table/woodentable/walnut, -/obj/machinery/alarm{ - pixel_y = 24 - }, -/obj/item/stamp/denied{ - pixel_x = 4; - pixel_y = -2 - }, -/obj/item/stamp/nt, -/obj/item/pen/blue{ - pixel_x = -5; - pixel_y = -1 - }, -/obj/item/pen/green, -/obj/item/pen/red{ - pixel_x = -1; - pixel_y = 3 - }, -/obj/item/reagent_containers/food/drinks/glass2/coffeecup/corp, -/obj/item/storage/box/large/union_cards, -/turf/simulated/floor/carpet/green, -/area/crew_quarters/heads/office/cl/backroom) -"LY" = ( -/obj/structure/sign/double/solgovflag/right{ - dir = 4; - pixel_x = -32 - }, -/turf/simulated/floor/wood/walnut, -/area/crew_quarters/heads/office/co) -"Ma" = ( -/obj/structure/railing/mapped{ - dir = 1; - icon_state = "railing0-1" - }, -/turf/simulated/open, -/area/maintenance/bridge/foreport) -"Mb" = ( -/obj/effect/floor_decal/corner/blue/three_quarters{ - dir = 4 - }, -/obj/machinery/firealarm{ - dir = 4; - pixel_x = 21 - }, -/turf/simulated/floor/tiled/dark, -/area/bridge/disciplinary_board_room) -"Mc" = ( -/turf/simulated/floor/tiled/techfloor/grid, -/area/aquila/airlock) -"Me" = ( -/obj/machinery/power/apc/super/critical{ - dir = 1; - is_critical = 1; - name = "north bump"; - pixel_y = 24 - }, -/obj/structure/cable/cyan{ - d2 = 8; - icon_state = "0-8" - }, -/obj/machinery/light, -/obj/effect/floor_decal/industrial/warning{ - icon_state = "warning"; - dir = 4 - }, -/obj/machinery/turretid/stun{ - pixel_y = -32 - }, -/turf/simulated/floor/tiled/techmaint, -/area/turret_protected/ai_outer_chamber) -"Mf" = ( -/obj/structure/table/woodentable_reinforced/walnut/maple, -/obj/item/folder/envelope/captain, -/obj/random_multi/single_item/runtime, -/turf/simulated/floor/wood/walnut, -/area/crew_quarters/heads/office/co) -"Mh" = ( -/obj/effect/floor_decal/scglogo{ - dir = 4; - icon_state = "top-left" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark, -/area/bridge/disciplinary_board_room) -"Mi" = ( -/obj/structure/sign/ecplaque{ - pixel_x = 29 - }, -/obj/structure/disposalpipe/segment, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/dark, -/area/bridge/storage) -"Mj" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 4 - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/bridge/aftstarboard) -"Mn" = ( -/obj/machinery/computer/modular/preset/cardslot/command_sec{ - dir = 8; - icon_state = "console" - }, -/obj/effect/floor_decal/corner/red/mono, -/obj/machinery/requests_console{ - announcementConsole = 1; - department = "Chief of Security's Desk"; - departmentType = 5; - name = "Chief of Security RC"; - pixel_x = 32 - }, -/obj/item/modular_computer/tablet/lease/preset/command, -/turf/simulated/floor/tiled/dark/monotile, -/area/crew_quarters/heads/office/cos) -"Mq" = ( -/obj/structure/sign/directions/infirmary{ - pixel_y = -4 - }, -/obj/structure/sign/directions/science{ - pixel_y = 3 - }, -/turf/simulated/wall/r_wall/prepainted, -/area/hallway/primary/bridge/fore) -"Mr" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/effect/catwalk_plated, -/turf/simulated/floor/plating, -/area/hallway/primary/bridge/fore) -"Mw" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/floor_decal/techfloor/corner{ - dir = 8 - }, -/obj/effect/floor_decal/techfloor/corner{ - dir = 1 - }, -/turf/simulated/floor/tiled/dark, -/area/aquila/crew) -"Mz" = ( -/obj/machinery/status_display, -/turf/simulated/wall/r_wall/hull, -/area/crew_quarters/heads/office/co) -"MA" = ( -/turf/simulated/floor/carpet/blue, -/area/crew_quarters/heads/cobed) -"MD" = ( -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/bridge/aftstarboard) -"MU" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 4 - }, -/obj/structure/table/rack, -/obj/random/solgov, -/obj/random/solgov, -/turf/simulated/floor/tiled/dark/monotile, -/area/aquila/storage) -"MV" = ( -/obj/structure/disposalpipe/segment{ - dir = 4; - icon_state = "pipe-c" - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/dark, -/area/bridge/storage) -"Nb" = ( -/obj/structure/bed/chair/comfy/captain{ - dir = 1 - }, -/obj/effect/floor_decal/corner/blue/mono, -/turf/simulated/floor/tiled/dark/monotile, -/area/bridge/disciplinary_board_room) -"Nc" = ( -/obj/structure/handrail{ - dir = 1 - }, -/obj/effect/floor_decal/techfloor, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/aquila/airlock) -"Nd" = ( -/obj/structure/cable/green{ - d2 = 8; - icon_state = "0-8" - }, -/obj/structure/cable/green{ - d2 = 2; - icon_state = "0-2" - }, -/obj/effect/wallframe_spawn/reinforced/polarized{ - id = "cl_windows" - }, -/turf/simulated/floor/plating, -/area/crew_quarters/heads/office/cl) -"Ne" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/turf/simulated/floor/tiled/dark, -/area/bridge/storage) -"Nf" = ( -/obj/structure/bed/chair/comfy/blue{ - dir = 8 - }, -/turf/simulated/floor/wood/walnut, -/area/crew_quarters/heads/office/co) -"Ng" = ( -/obj/machinery/button/alternate/door{ - desc = "A remote control-switch for the office door."; - id_tag = "captaindoor"; - name = "Aft Office Door Control"; - pixel_x = 6; - pixel_y = 24 - }, -/obj/machinery/button/alternate/door{ - desc = "A remote control-switch for the office door."; - id_tag = "captaindoorfore"; - name = "Fore Office Door Control"; - pixel_x = -6; - pixel_y = 24 - }, -/obj/machinery/photocopier/faxmachine{ - department = "Torch - Commanding Officer" - }, -/obj/machinery/button/windowtint{ - id = "co_windows"; - pixel_x = 6; - pixel_y = 33 - }, -/obj/machinery/button/blast_door{ - id_tag = "cap_window"; - name = "CO's Office Window Blast Door Control"; - pixel_x = -6; - pixel_y = 33 - }, -/obj/structure/table/woodentable_reinforced/ebony/walnut, -/turf/simulated/floor/carpet/blue, -/area/crew_quarters/heads/office/co) -"Ni" = ( -/obj/machinery/door/airlock/engineering{ - name = "Bridge Deck Shield Generator" - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/steel_ridged, -/area/shield/bridge) -"Nk" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/disposalpipe/segment, -/obj/machinery/light{ - dir = 4; - icon_state = "tube1" - }, -/obj/machinery/atmospherics/valve/shutoff/scrubbers, -/obj/machinery/atmospherics/valve/shutoff/supply, -/obj/effect/floor_decal/industrial/shutoff, -/obj/effect/floor_decal/corner/blue{ - dir = 6 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/bridge/fore) -"Nn" = ( -/obj/structure/table/standard{ - name = "plastic table frame" - }, -/obj/item/reagent_containers/food/drinks/glass2/coffeecup/pawn, -/obj/item/reagent_containers/food/condiment/small/packet/coffee, -/turf/simulated/floor/tiled/dark, -/area/crew_quarters/heads/office/sea) -"Np" = ( -/obj/structure/railing/mapped, -/obj/structure/railing/mapped{ - dir = 4; - icon_state = "railing0-1" - }, -/turf/simulated/open, -/area/maintenance/bridge/aftport) -"Nr" = ( -/obj/machinery/atmospherics/binary/passive_gate{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/maintenance/bridge/forestarboard) -"Ns" = ( -/obj/structure/railing/mapped{ - dir = 4; - icon_state = "railing0-1" - }, -/obj/structure/railing/mapped{ - dir = 1; - icon_state = "railing0-1" - }, -/turf/simulated/floor/plating, -/area/maintenance/bridge/aftstarboard) -"Nt" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled, -/area/crew_quarters/heads/office/rd) -"Nw" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 - }, -/turf/simulated/floor/wood/walnut, -/area/crew_quarters/heads/office/cl) -"NC" = ( -/turf/simulated/floor/carpet/green, -/area/crew_quarters/heads/office/cl/backroom) -"ND" = ( -/obj/structure/table/woodentable/walnut, -/obj/machinery/alarm{ - dir = 1; - pixel_y = -28; - req_access = list(list("ACCESS_ENGINE_EQUIP","ACCESS_ATMOS")) - }, -/obj/item/storage/secure/briefcase/nukedisk, -/turf/simulated/floor/wood/walnut, -/area/crew_quarters/heads/cobed) -"NE" = ( -/obj/machinery/door/airlock/security{ - name = "Security Checkpoint"; - secured_wires = 1 - }, -/obj/machinery/door/firedoor, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/dark, -/area/security/bridgecheck) -"NH" = ( -/obj/effect/floor_decal/corner/blue/mono, -/obj/structure/bed/chair/comfy/beige{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/crew_quarters/heads/office/xo) -"NL" = ( -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/closet/secure_closet/guncabinet/sidearm/combined, -/obj/structure/sign/warning/nosmoking_1{ - dir = 4; - pixel_x = -37 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/bridge/storage) -"NM" = ( -/obj/machinery/atmospherics/binary/pump{ - dir = 8 - }, -/turf/simulated/floor/plating, -/area/maintenance/bridge/forestarboard) -"NN" = ( -/obj/item/tableflag, -/obj/structure/table/woodentable_reinforced/ebony/walnut, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/carpet/blue, -/area/crew_quarters/heads/office/co) -"NW" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 4; - icon_state = "warning" - }, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/bridge/foreport) -"Oa" = ( -/obj/machinery/door/airlock/vault/bolted{ - name = "AI Core External Access" - }, -/turf/simulated/floor/tiled/techmaint, -/area/turret_protected/ai_outer_chamber) -"Ob" = ( -/obj/machinery/door/airlock/hatch{ - name = "Crew Area" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/door/firedoor, -/turf/simulated/floor/tiled/steel_ridged, -/area/aquila/airlock) -"Oc" = ( -/obj/structure/sign/solgov{ - pixel_x = 32; - pixel_y = -32 - }, -/turf/simulated/floor/reinforced/airless, -/area/space) -"Od" = ( -/obj/machinery/power/apc{ - dir = 8; - name = "west bump"; - pixel_x = -24 - }, -/obj/structure/cable/green{ - d2 = 4; - icon_state = "0-4" - }, -/obj/effect/floor_decal/corner/blue{ - dir = 9 - }, -/obj/effect/floor_decal/spline/plain/beige{ - dir = 1 - }, -/turf/simulated/floor/tiled/dark, -/area/crew_quarters/heads/office/xo) -"Oe" = ( -/obj/machinery/requests_console{ - announcementConsole = 1; - department = "Bridge"; - departmentType = 5; - name = "Bridge RC"; - pixel_x = 30 - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/turf/simulated/floor/tiled/dark, -/area/bridge/storage) -"Of" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/door/blast/shutters{ - density = 0; - dir = 2; - icon_state = "shutter0"; - id_tag = "bridge_hallway_shutters"; - name = "Bridge Deck Hallway Shutters"; - opacity = 0 - }, -/obj/effect/floor_decal/corner/red/mono, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/tiled/monotile, -/area/hallway/primary/bridge/fore) -"Og" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 1 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/floor_decal/corner/blue{ - dir = 9 - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/bridge/fore) -"Oh" = ( -/obj/item/stool/padded, -/obj/structure/cable/green{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/turf/simulated/floor/carpet/green, -/area/crew_quarters/heads/office/cl/backroom) -"Oi" = ( -/obj/structure/hygiene/sink{ - dir = 4; - pixel_x = 11 - }, -/obj/item/storage/mirror{ - pixel_x = 28 - }, -/turf/simulated/floor/tiled/freezer, -/area/crew_quarters/heads/cobed) -"Oj" = ( -/obj/machinery/computer/rdconsole{ - dir = 4 - }, -/turf/simulated/floor/tiled/monotile, -/area/crew_quarters/heads/office/rd) -"Ok" = ( -/obj/machinery/bodyscanner{ - dir = 1 - }, -/turf/simulated/floor/tiled/white/monotile, -/area/aquila/medical) -"Om" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/effect/floor_decal/corner/red/half{ - dir = 8 - }, -/turf/simulated/floor/tiled/dark, -/area/security/bridgecheck) -"Oq" = ( -/obj/effect/paint/red, -/obj/machinery/atmospherics/pipe/simple/hidden/fuel{ - dir = 4 - }, -/turf/simulated/wall/titanium, -/area/aquila/medical) -"Os" = ( -/obj/effect/floor_decal/corner/blue{ - dir = 9 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/bridge/fore) -"Ou" = ( -/obj/item/device/radio/intercom/locked/ai_private{ - dir = 4; - pixel_x = -22 - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/bluegrid, -/area/turret_protected/ai_foyer) -"Ov" = ( -/obj/structure/table/woodentable/walnut, -/obj/item/device/camera{ - pixel_x = 3; - pixel_y = -4 - }, -/obj/item/hand_labeler, -/turf/simulated/floor/carpet/green, -/area/crew_quarters/heads/office/cl/backroom) -"Ox" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/obj/machinery/button/alternate/door/bolts{ - desc = "A remote control-switch for the office door."; - id_tag = "liaisondoor3"; - name = "CL's Backroom Door Bolt Control"; - pixel_x = -26; - pixel_y = -7; - req_access = list("ACCESS_TORCH_CORPORATE_LIAISON") - }, -/obj/machinery/light_switch{ - pixel_x = -24; - pixel_y = 6 - }, -/turf/simulated/floor/carpet/green, -/area/crew_quarters/heads/office/cl/backroom) -"Oy" = ( -/obj/structure/table/woodentable_reinforced/walnut, -/obj/item/device/flashlight/lamp, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 8 - }, -/turf/simulated/floor/carpet/green, -/area/crew_quarters/heads/office/cl) -"OD" = ( -/obj/effect/floor_decal/corner/blue{ - dir = 9 - }, -/turf/simulated/floor/tiled/dark, -/area/bridge/hallway/port) -"OE" = ( -/obj/structure/cable/green{ - d2 = 2; - icon_state = "0-2" - }, -/obj/structure/cable/green{ - d2 = 4; - icon_state = "0-4" - }, -/obj/effect/wallframe_spawn/reinforced/polarized{ - id = "cl_windows" - }, -/turf/simulated/floor/plating, -/area/crew_quarters/heads/office/cl) -"OK" = ( -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/bridge/aftport) -"OM" = ( -/obj/effect/floor_decal/spline/fancy/wood{ - dir = 1 - }, -/turf/simulated/floor/wood/walnut, -/area/crew_quarters/heads/office/co) -"OO" = ( -/obj/effect/floor_decal/corner/paleblue/diagonal, -/obj/structure/bed/chair/comfy/teal{ - dir = 1 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/crew_quarters/heads/office/cmo) -"OR" = ( -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/ai_status_display, -/turf/simulated/wall/r_wall/prepainted, -/area/turret_protected/ai_foyer) -"OS" = ( -/obj/structure/railing/mapped{ - dir = 1; - icon_state = "railing0-1" - }, -/obj/structure/railing/mapped{ - dir = 8; - icon_state = "railing0-1" - }, -/turf/simulated/floor/plating, -/area/maintenance/bridge/forestarboard) -"OU" = ( -/turf/simulated/floor/bluegrid, -/area/turret_protected/ai) -"OV" = ( -/obj/machinery/alarm{ - pixel_y = 24 - }, -/turf/simulated/floor/reinforced, -/area/turret_protected/ai_outer_chamber) -"OX" = ( -/obj/machinery/shipsensors, -/obj/effect/floor_decal/industrial/hatch/yellow, -/turf/simulated/floor/airless, -/area/aquila/air) -"Pb" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 1 - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 4 - }, -/obj/structure/cable/cyan{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/machinery/alarm{ - pixel_y = 23; - req_access = list(list("ACCESS_ENGINE_EQUIP","ACCESS_ATMOS")) - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/aquila/air) -"Pc" = ( -/obj/structure/cable{ - d2 = 2; - icon_state = "0-2" - }, -/obj/machinery/power/smes/buildable{ - RCon_tag = "Solar - Bridge"; - capacity = 1e+007; - dir = 4 - }, -/obj/item/device/radio/intercom{ - pixel_y = 23 - }, -/obj/machinery/camera/network/engineering{ - c_tag = "Solar Control - Bridge"; - dir = 4 - }, -/turf/simulated/floor/plating, -/area/maintenance/auxsolarbridge) -"Pd" = ( -/obj/item/device/radio/intercom{ - dir = 4; - pixel_x = -21 - }, -/obj/effect/floor_decal/industrial/hatch/yellow, -/obj/machinery/disposal, -/obj/structure/disposalpipe/trunk, -/turf/simulated/floor/tiled/monotile, -/area/hallway/primary/bridge/fore) -"Pe" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/bridge/fore) -"Pf" = ( -/obj/structure/bed/chair/padded/blue{ - dir = 4 - }, -/obj/structure/closet/medical_wall/filled{ - pixel_x = -32 - }, -/obj/random/firstaid, -/obj/random/firstaid, -/obj/random/medical, -/obj/random/drinkbottle, -/obj/effect/floor_decal/techfloor{ - dir = 10 - }, -/turf/simulated/floor/tiled/techfloor, -/area/crew_quarters/safe_room/bridge) -"Pg" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/vault/bolted{ - autoset_access = 0; - id_tag = "bridgesafe_front"; - name = "Auxillary Safe Room Door" - }, -/obj/item/airlock_brace{ - req_access = list("ACCESS_BRIDGE") - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/techfloor/grid, -/area/hallway/primary/bridge/fore) -"Pl" = ( -/obj/structure/closet/secure_closet/liaison, -/obj/machinery/camera/network/command{ - c_tag = "Corporate Liaison - Backroom"; - dir = 8 - }, -/turf/simulated/floor/carpet/green, -/area/crew_quarters/heads/office/cl/backroom) -"Pn" = ( -/obj/item/device/taperecorder{ - pixel_x = -4; - pixel_y = 2 - }, -/obj/structure/table/woodentable/walnut, -/obj/machinery/light{ - dir = 4; - icon_state = "tube1" - }, -/turf/simulated/floor/carpet/green, -/area/crew_quarters/heads/office/cl/backroom) -"Pr" = ( -/obj/machinery/flasher{ - pixel_x = -32; - pixel_y = -32 - }, -/turf/simulated/floor/bluegrid, -/area/turret_protected/ai) -"Pt" = ( -/turf/simulated/floor/wood/walnut, -/area/crew_quarters/heads/office/co) -"Pw" = ( -/obj/machinery/status_display, -/turf/simulated/wall/prepainted, -/area/crew_quarters/heads/office/cl/backroom) -"Py" = ( -/obj/structure/bed/chair/comfy/blue{ - dir = 4 - }, -/obj/machinery/firealarm{ - dir = 1; - pixel_y = -24 - }, -/obj/machinery/camera/network/command{ - c_tag = "CO - Office Starboard"; - dir = 1 - }, -/turf/simulated/floor/wood/walnut, -/area/crew_quarters/heads/office/co) -"PA" = ( -/obj/effect/paint/red, -/obj/machinery/atmospherics/pipe/simple/hidden/fuel{ - dir = 4 - }, -/turf/simulated/wall/titanium, -/area/aquila/storage) -"PB" = ( -/obj/effect/floor_decal/techfloor{ - dir = 1 - }, -/obj/structure/sign/thera{ - pixel_y = 27 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, -/turf/simulated/floor/tiled/techfloor, -/area/crew_quarters/safe_room/bridge) -"PC" = ( -/obj/machinery/atmospherics/pipe/manifold4w/hidden/cyan, -/obj/machinery/meter, -/turf/simulated/floor/plating, -/area/aquila/air) -"PH" = ( -/obj/structure/cable/cyan{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/machinery/camera/all/command{ - c_tag = "AI Core - Fore Starboard Access"; - dir = 4 - }, -/obj/item/device/radio/intercom/locked/ai_private{ - pixel_y = 22 - }, -/turf/simulated/floor/bluegrid, -/area/turret_protected/ai_foyer) -"PN" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/machinery/camera/all/command{ - c_tag = "AI Core - Fore Port Access"; - dir = 4 - }, -/obj/item/device/radio/intercom/locked/ai_private{ - dir = 1; - pixel_y = -22 - }, -/turf/simulated/floor/bluegrid, -/area/turret_protected/ai_foyer) -"PP" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 8 - }, -/obj/effect/floor_decal/industrial/warning, -/turf/simulated/floor/tiled/dark/monotile, -/area/aquila/storage) -"PW" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/turf/simulated/floor/carpet/green, -/area/crew_quarters/heads/office/cl/backroom) -"Qb" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 8 - }, -/obj/effect/shuttle_landmark/torch/hangar/aquila, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/dark, -/area/aquila/airlock) -"Qc" = ( -/obj/machinery/door/airlock/glass/command{ - name = "Auxiliary E.V.A."; - secured_wires = 1 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/machinery/door/firedoor, -/turf/simulated/floor/tiled/steel_ridged, -/area/aux_eva) -"Qd" = ( -/obj/structure/filingcabinet/chestdrawer{ - dir = 1 - }, -/obj/item/folder/blue, -/obj/item/folder/red, -/obj/item/folder, -/obj/item/folder/nt, -/obj/item/folder/yellow, -/obj/item/folder/white, -/obj/machinery/button/blast_door{ - desc = "A remote control-switch for shutters."; - id_tag = "hop_office_desk"; - name = "Queue Desk Privacy Shutter"; - pixel_x = 24; - pixel_y = -6; - req_access = list("ACCESS_HEAD_OF_PERSONNEL") - }, -/obj/machinery/button/blast_door{ - desc = "A remote control-switch for shutters."; - id_tag = "hop_office"; - name = "XO Desk Privacy Shutter"; - pixel_x = 24; - pixel_y = 6; - req_access = list("ACCESS_HEAD_OF_PERSONNEL") - }, -/obj/effect/floor_decal/corner/blue/mono, -/obj/effect/floor_decal/spline/plain/beige{ - dir = 1 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/crew_quarters/heads/office/xo) -"Qe" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/unary/vent_pump/on, -/obj/effect/floor_decal/corner/b_green{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/bridge/fore) -"Qf" = ( -/obj/effect/floor_decal/techfloor, -/turf/simulated/floor/tiled/techfloor, -/area/crew_quarters/safe_room/bridge) -"Qg" = ( -/obj/effect/floor_decal/scglogo{ - dir = 4 - }, -/obj/structure/bed/chair, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply, -/turf/simulated/floor/tiled/dark, -/area/bridge/disciplinary_board_room) -"Qh" = ( -/obj/effect/floor_decal/industrial/outline/grey, -/obj/structure/table/rack{ - dir = 8 - }, -/obj/item/storage/toolbox/mechanical, -/obj/machinery/light{ - dir = 8; - icon_state = "tube1" - }, -/obj/item/device/radio/intercom{ - pixel_y = 23 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/aux_eva) -"Qi" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/bridge/aftstarboard) -"Qj" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/crew_quarters/heads/office/rd) -"Qp" = ( -/obj/machinery/door/airlock/sol{ - id_tag = "captaindoorfore"; - name = "Commanding Officer"; - secured_wires = 1 - }, -/obj/machinery/door/firedoor, -/turf/simulated/floor/tiled/dark/monotile, -/area/bridge) -"Qs" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/wall/r_wall/prepainted, -/area/turret_protected/ai_foyer) -"Qv" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/effect/floor_decal/corner/blue{ - dir = 9 - }, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 1 - }, -/turf/simulated/floor/tiled/dark, -/area/bridge/meeting_room) -"Qw" = ( -/obj/structure/table/glass, -/obj/effect/floor_decal/corner/blue{ - dir = 9 - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/random_multi/single_item/memo_security, -/obj/random_multi/single_item/memo_engineering, -/obj/random_multi/single_item/memo_research, -/obj/random_multi/single_item/memo_exploration, -/turf/simulated/floor/tiled/dark, -/area/bridge) -"Qz" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/aquila/airlock) -"QE" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 4 - }, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 1 - }, -/turf/simulated/floor/tiled/dark, -/area/aux_eva) -"QF" = ( -/obj/effect/paint/hull, -/turf/simulated/wall/titanium, -/area/aquila/air) -"QK" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/hatch/maintenance, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/tiled/steel_ridged, -/area/hallway/primary/bridge/fore) -"QL" = ( -/obj/effect/paint/hull, -/turf/simulated/wall/titanium, -/area/aquila/storage) -"QN" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/bridge/fore) -"QQ" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/light/small{ - dir = 8 - }, -/obj/machinery/button/alternate/door/bolts{ - id_tag = "bridgestorage_exit"; - name = "Emergency Exit door-control"; - pixel_x = 25; - req_access = list("ACCESS_BRIDGE") - }, -/obj/item/stool/padded, -/turf/simulated/floor/tiled/dark/monotile, -/area/bridge/storage) -"QS" = ( -/obj/structure/table/woodentable/walnut, -/obj/machinery/firealarm{ - dir = 1; - pixel_y = -24 - }, -/obj/item/pen/retractable/green, -/obj/item/pen/retractable/red{ - pixel_x = -1; - pixel_y = 3 - }, -/obj/item/pen/retractable/blue{ - pixel_x = -5; - pixel_y = -1 - }, -/obj/item/book/manual/solgov_law, -/turf/simulated/floor/carpet/blue2, -/area/crew_quarters/heads/office/sgr) -"QU" = ( -/turf/simulated/wall/r_wall/prepainted, -/area/turret_protected/ai_foyer) -"QW" = ( -/obj/machinery/computer/ship/engines{ - dir = 4 - }, -/obj/effect/floor_decal/corner/blue/mono, -/turf/simulated/floor/tiled/dark/monotile, -/area/bridge) -"QX" = ( -/obj/item/device/flashlight/lamp/green, -/obj/machinery/keycard_auth/torch{ - pixel_y = 24 - }, -/obj/machinery/button/alternate/door{ - desc = "A remote control-switch for the office door."; - id_tag = "hopdoor"; - name = "XO's Office Door Control"; - pixel_x = -5; - pixel_y = 38; - req_access = list("ACCESS_HEAD_OF_PERSONNEL") - }, -/obj/machinery/button/windowtint{ - id = "xo_windows"; - pixel_x = 8; - pixel_y = 39 - }, -/obj/structure/table/woodentable_reinforced/walnut, -/obj/item/paper_bin{ - pixel_x = -3; - pixel_y = 7 - }, -/turf/simulated/floor/wood/walnut, -/area/crew_quarters/heads/office/xo) -"QY" = ( -/obj/structure/railing/mapped{ - dir = 8; - icon_state = "railing0-1" - }, -/turf/simulated/floor/plating, -/area/maintenance/bridge/forestarboard) -"Ra" = ( -/obj/effect/floor_decal/corner/blue/mono, -/obj/machinery/computer/modular/preset/security, -/turf/simulated/floor/tiled/dark/monotile, -/area/bridge) -"Rb" = ( -/obj/machinery/door/airlock/hatch{ - name = "Infirmary" - }, -/obj/machinery/door/firedoor, -/turf/simulated/floor/tiled/steel_ridged, -/area/aquila/storage) -"Rd" = ( -/obj/machinery/hologram/holopad, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 8 - }, -/turf/simulated/floor/wood/walnut, -/area/crew_quarters/heads/office/cl) -"Re" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/item/device/radio/intercom{ - pixel_y = 23 - }, -/obj/effect/floor_decal/corner/blue{ - dir = 5 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/bridge/fore) -"Rf" = ( -/obj/machinery/power/apc{ - dir = 8; - name = "west bump"; - pixel_x = -24 - }, -/obj/structure/cable/green{ - d2 = 4; - icon_state = "0-4" - }, -/turf/simulated/floor/carpet/blue2, -/area/crew_quarters/heads/office/sgr) -"Rg" = ( -/obj/effect/floor_decal/industrial/hatch/yellow, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/structure/sign/solgov{ - pixel_x = -32; - pixel_y = 32 - }, -/turf/simulated/floor/airless, -/area/solar/bridge) -"Rh" = ( -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 8 - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 8; - icon_state = "warning" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/dark, -/area/aux_eva) -"Ri" = ( -/obj/structure/cable/green{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/obj/structure/catwalk, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/plating, -/area/maintenance/bridge/aftstarboard) -"Rj" = ( -/obj/machinery/button/windowtint{ - id = "rd_windows"; - pixel_x = 6; - pixel_y = -24; - range = 11 - }, -/obj/machinery/light_switch{ - pixel_x = -6; - pixel_y = -24 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/crew_quarters/heads/office/rd) -"Rl" = ( -/obj/machinery/light/small{ - dir = 1 - }, -/turf/simulated/floor/tiled/freezer, -/area/crew_quarters/heads/cobed) -"Rp" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/bridge/fore) -"Rq" = ( -/obj/machinery/computer/ship/helm{ - dir = 4; - req_access = list(list("ACCESS_TORCH_HELM")) - }, -/obj/effect/floor_decal/corner/blue/mono, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/bridge) -"Rr" = ( -/turf/simulated/wall/r_wall/hull, -/area/turret_protected/ai_outer_chamber) -"Rs" = ( -/obj/machinery/light{ - dir = 4; - icon_state = "tube1" - }, -/obj/structure/table/standard{ - name = "plastic table frame" - }, -/obj/item/device/flash, -/obj/item/device/flash, -/obj/item/device/megaphone, -/obj/item/storage/secure/briefcase{ - pixel_x = 4; - pixel_y = 4 - }, -/obj/item/storage/secure/briefcase, -/turf/simulated/floor/tiled/dark/monotile, -/area/bridge/storage) -"Rz" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 8; - icon_state = "warning" - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/dark, -/area/aux_eva) -"RC" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/effect/floor_decal/industrial/warning/fulltile, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/tiled, -/area/hallway/primary/bridge/fore) -"RD" = ( -/obj/effect/floor_decal/corner/blue/mono, -/obj/machinery/alarm{ - dir = 8; - pixel_x = 24 - }, -/obj/structure/reagent_dispensers/water_cooler{ - dir = 8 - }, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/floor/tiled/dark/monotile, -/area/bridge/disciplinary_board_room) -"RE" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/item/device/radio/intercom{ - dir = 8; - pixel_x = 20 - }, -/obj/effect/floor_decal/corner/blue/three_quarters{ - dir = 4 - }, -/turf/simulated/floor/tiled/monotile, -/area/hallway/primary/bridge/fore) -"RG" = ( -/obj/effect/floor_decal/industrial/outline/grey, -/obj/machinery/computer/modular/preset/medical, -/turf/simulated/floor/tiled/dark, -/area/turret_protected/ai) -"RH" = ( -/obj/effect/paint/red, -/turf/simulated/wall/titanium, -/area/aquila/medical) -"RK" = ( -/obj/machinery/firealarm{ - pixel_y = 24 - }, -/obj/structure/disposalpipe/segment{ - dir = 2; - icon_state = "pipe-c" - }, -/obj/structure/bed/chair/comfy/blue{ - dir = 4 - }, -/turf/simulated/floor/wood/walnut, -/area/crew_quarters/heads/office/xo) -"RP" = ( -/turf/simulated/wall/r_wall/prepainted, -/area/turret_protected/ai) -"RQ" = ( -/obj/machinery/firealarm{ - dir = 8; - pixel_x = -24 - }, -/obj/structure/flora/pottedplant/unusual, -/turf/simulated/floor/tiled/monotile, -/area/crew_quarters/heads/office/rd) -"RT" = ( -/obj/structure/cable/green{ - d2 = 4; - icon_state = "0-4" - }, -/obj/effect/wallframe_spawn/reinforced/polarized{ - id = "sea_windows" - }, -/turf/simulated/floor/plating, -/area/crew_quarters/heads/office/sea) -"RU" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/effect/catwalk_plated, -/obj/machinery/light{ - dir = 8; - icon_state = "tube1" - }, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/plating, -/area/hallway/primary/bridge/fore) -"RV" = ( -/obj/structure/cable/green{ - d2 = 4; - icon_state = "0-4" - }, -/obj/structure/cable/green, -/obj/machinery/door/firedoor, -/obj/effect/wallframe_spawn/reinforced/hull, -/obj/machinery/door/blast/regular/open{ - dir = 4; - id_tag = "cap_window"; - name = "CO's Quarters Shutters" - }, -/turf/simulated/floor/plating, -/area/crew_quarters/heads/office/co) -"Sb" = ( -/obj/machinery/power/apc/hyper/shuttle/aquila{ - dir = 4; - pixel_x = 28 - }, -/obj/structure/cable/cyan, -/turf/simulated/floor/tiled/dark, -/area/aquila/power) -"Se" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/obj/machinery/light_switch{ - pixel_x = 23; - pixel_y = -23 - }, -/obj/structure/holoplant, -/turf/simulated/floor/tiled/dark, -/area/bridge/storage) -"Sf" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/carpet/blue2, -/area/crew_quarters/heads/office/sgr) -"Sg" = ( -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 4 - }, -/obj/machinery/embedded_controller/radio/airlock/docking_port{ - dir = 8; - display_name = "Bridge Deck Dock"; - frequency = 1331; - id_tag = "aquila_shuttle_dock_airlock"; - pixel_x = 24; - pixel_y = 24; - req_access = list(list("ACCESS_BRIDGE","ACCESS_TORCH_CREW")); - tag_airpump = "aquila_shuttle_dock_pump"; - tag_chamber_sensor = "aquila_shuttle_dock_sensor"; - tag_exterior_door = "aquila_shuttle_dock_outer"; - tag_interior_door = "aquila_shuttle_dock_inner" - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/steel_grid, -/area/hallway/primary/bridge/aft) -"Sh" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/turf/simulated/floor/tiled/dark, -/area/aux_eva) -"Sj" = ( -/obj/machinery/alarm{ - dir = 8; - pixel_x = 24 - }, -/obj/effect/floor_decal/industrial/hatch/yellow, -/obj/machinery/disposal, -/obj/structure/disposalpipe/trunk{ - dir = 8 - }, -/turf/simulated/floor/tiled/monotile, -/area/crew_quarters/heads/office/rd) -"Sn" = ( -/obj/effect/floor_decal/corner/blue{ - dir = 6 - }, -/obj/machinery/newscaster/security_unit{ - pixel_x = 32 - }, -/obj/machinery/rotating_alarm/security_alarm{ - dir = 8 - }, -/turf/simulated/floor/tiled/dark, -/area/bridge/meeting_room) -"So" = ( -/obj/machinery/atmospherics/binary/pump, -/turf/simulated/floor/plating, -/area/aquila/air) -"Sy" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/wall/r_wall/hull, -/area/turret_protected/ai_outer_chamber) -"Sz" = ( -/obj/structure/sign/kiddieplaque{ - pixel_x = -32; - pixel_y = 0 - }, -/obj/machinery/tele_projector{ - dir = 6 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/turret_protected/ai_foyer) -"SA" = ( -/obj/effect/wallframe_spawn/reinforced/titanium, -/obj/machinery/door/blast/regular/open{ - density = 0; - dir = 4; - icon_state = "pdoor0"; - id_tag = "aquila_shutters"; - name = "Protective Shutters"; - opacity = 0 - }, -/obj/effect/paint/hull, -/turf/simulated/floor/plating, -/area/aquila/cockpit) -"SB" = ( -/obj/structure/table/steel_reinforced, -/obj/item/device/tape/random, -/obj/item/device/tape/random, -/obj/item/device/tape/random, -/obj/item/device/taperecorder, -/obj/effect/floor_decal/corner/blue/mono, -/turf/simulated/floor/tiled/dark/monotile, -/area/bridge/disciplinary_board_room) -"SE" = ( -/obj/structure/cable/green, -/obj/structure/cable/green{ - d2 = 4; - icon_state = "0-4" - }, -/obj/machinery/door/firedoor, -/obj/effect/wallframe_spawn/reinforced/hull, -/obj/machinery/door/blast/regular/open{ - dir = 4; - id_tag = "bridge blast"; - name = "Bridge Blast Doors" - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/turf/simulated/floor/plating, -/area/bridge) -"SG" = ( -/obj/machinery/papershredder, -/obj/machinery/firealarm{ - dir = 1; - pixel_y = -24 - }, -/turf/simulated/floor/wood/walnut, -/area/crew_quarters/heads/cobed) -"SJ" = ( -/obj/effect/floor_decal/corner/blue{ - dir = 10 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/dark, -/area/bridge) -"SK" = ( -/obj/machinery/light, -/turf/simulated/floor/bluegrid, -/area/turret_protected/ai_foyer) -"SL" = ( -/obj/structure/table/woodentable_reinforced/walnut, -/obj/item/material/ashtray/bronze, -/obj/item/flame/lighter/zippo/random, -/obj/random/smokes, -/obj/structure/sign/warning/smoking{ - pixel_x = 26 - }, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 1 - }, -/turf/simulated/floor/carpet/blue2, -/area/crew_quarters/heads/office/sgr) -"SM" = ( -/obj/machinery/status_display, -/turf/simulated/wall/r_wall/prepainted, -/area/turret_protected/ai) -"SN" = ( -/obj/effect/floor_decal/corner/blue{ - dir = 5 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/bridge/aft) -"SQ" = ( -/obj/machinery/atmospherics/unary/engine{ - dir = 1 - }, -/turf/simulated/floor/airless, -/area/aquila/medical) -"SR" = ( -/obj/structure/sign/warning/lethal_turrets, -/turf/simulated/wall/r_wall/hull, -/area/turret_protected/ai_outer_chamber) -"SU" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 8; - icon_state = "warning" - }, -/turf/simulated/floor/tiled/dark, -/area/aux_eva) -"SV" = ( -/obj/machinery/door/airlock/civilian{ - autoset_access = 0; - name = "Head" - }, -/obj/machinery/door/firedoor, -/turf/simulated/floor/tiled/freezer, -/area/crew_quarters/heads/cobed) -"Ta" = ( -/obj/structure/table/standard{ - name = "plastic table frame" - }, -/obj/item/paper_bin{ - pixel_x = -3; - pixel_y = 7 - }, -/obj/item/pen, -/obj/item/pen, -/obj/structure/noticeboard{ - pixel_x = -32 - }, -/obj/effect/floor_decal/corner/blue/three_quarters{ - dir = 8 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/bridge/fore) -"Tb" = ( -/obj/machinery/light{ - dir = 4 - }, -/obj/structure/handrail{ - dir = 8 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/aquila/airlock) -"Tc" = ( -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/unary/vent_pump/high_volume/airlock{ - dir = 8; - id_tag = "solar_bridge_pump" - }, -/obj/machinery/light/small, -/obj/machinery/oxygen_pump{ - pixel_y = -32 - }, -/obj/machinery/embedded_controller/radio/airlock/airlock_controller{ - id_tag = "solar_bridge_airlock"; - pixel_x = 2; - pixel_y = 24; - req_access = list("ACCESS_EXTERNAL"); - tag_airpump = "solar_bridge_pump"; - tag_chamber_sensor = "solar_bridge_sensor"; - tag_exterior_door = "solar_bridge_outer"; - tag_interior_door = "solar_bridge_inner" - }, -/obj/machinery/airlock_sensor{ - id_tag = "solar_bridge_sensor"; - pixel_x = -12; - pixel_y = 24 - }, -/obj/effect/floor_decal/techfloor, -/obj/effect/floor_decal/techfloor{ - dir = 1 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/maintenance/auxsolarbridge) -"Te" = ( -/turf/simulated/floor/carpet/blue2, -/area/bridge/meeting_room) -"Tf" = ( -/obj/structure/table/woodentable_reinforced/walnut/maple, -/obj/effect/floor_decal/corner/blue/mono, -/obj/machinery/alarm{ - dir = 4; - pixel_x = -23 - }, -/obj/item/material/ashtray/glass, -/obj/item/flame/lighter/zippo/random, -/obj/random/smokes, -/obj/structure/sign/warning/smoking{ - pixel_y = 26 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/bridge/disciplinary_board_room/deliberation) -"Tg" = ( -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 4 - }, -/obj/machinery/door/airlock/external{ - autoset_access = 0; - frequency = 1331; - icon_state = "closed"; - id_tag = "aquila_shuttle_dock_inner"; - locked = 1; - name = "Docking Port Airlock"; - req_access = list("ACCESS_TORCH_CREW") - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/hallway/primary/bridge/aft) -"Th" = ( -/obj/effect/floor_decal/industrial/outline/grey, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 8 - }, -/obj/structure/table/rack{ - dir = 8 - }, -/obj/item/inflatable_dispenser, -/obj/item/storage/briefcase/inflatable, -/obj/item/storage/briefcase/inflatable, -/obj/item/storage/briefcase/inflatable, -/obj/machinery/light{ - dir = 4; - icon_state = "tube1" - }, -/obj/machinery/camera/network/command{ - c_tag = "EVA - Command" - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/aux_eva) -"Ti" = ( -/obj/effect/floor_decal/industrial/outline/grey, -/obj/effect/floor_decal/corner/research/mono, -/obj/structure/closet/secure_closet/RD_torch, -/turf/simulated/floor/tiled/monotile, -/area/crew_quarters/heads/office/rd) -"Tl" = ( -/turf/simulated/floor/tiled/dark, -/area/bridge/storage) -"Tn" = ( -/obj/structure/bed/chair/padded/blue{ - dir = 4 - }, -/obj/effect/floor_decal/techfloor{ - dir = 8 - }, -/turf/simulated/floor/tiled/techfloor, -/area/crew_quarters/safe_room/bridge) -"To" = ( -/obj/machinery/disposal, -/obj/structure/disposalpipe/trunk{ - dir = 8 - }, -/obj/machinery/light{ - dir = 4; - icon_state = "tube1" - }, -/turf/simulated/floor/wood/walnut, -/area/crew_quarters/heads/cobed) -"Tx" = ( -/obj/machinery/atmospherics/tvalve/mirrored/bypass{ - dir = 8 - }, -/turf/simulated/floor/plating, -/area/maintenance/bridge/forestarboard) -"Tz" = ( -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/door/blast/shutters{ - density = 0; - dir = 2; - icon_state = "shutter0"; - id_tag = "bridge_hallway_shutters"; - name = "Bridge Deck Hallway Shutters"; - opacity = 0 - }, -/obj/effect/floor_decal/corner/red/mono, -/turf/simulated/floor/tiled/monotile, -/area/hallway/primary/bridge/fore) -"TA" = ( -/obj/machinery/portable_atmospherics/powered/scrubber, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/bridge/forestarboard) -"TB" = ( -/turf/simulated/floor/reinforced/airless, -/area/bridge/storage) -"TE" = ( -/obj/structure/cable/green{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/item/device/radio/intercom/locked/ai_private{ - dir = 8; - pixel_x = 22 - }, -/obj/machinery/atmospherics/unary/vent_pump/high_volume/airlock{ - dir = 1; - id_tag = "ai_core_pump" - }, -/obj/effect/floor_decal/industrial/warning, -/turf/simulated/floor/tiled/techmaint, -/area/turret_protected/ai_foyer) -"TI" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/obj/machinery/light, -/turf/simulated/floor/tiled/dark, -/area/bridge/storage) -"TJ" = ( -/obj/structure/bed/chair/padded/blue, -/obj/effect/floor_decal/corner/blue/three_quarters{ - dir = 1 - }, -/obj/structure/sign/double/solgovflag/right{ - pixel_y = 32 - }, -/turf/simulated/floor/tiled/dark, -/area/bridge/disciplinary_board_room) -"TK" = ( -/obj/effect/floor_decal/corner/blue/three_quarters, -/obj/structure/cable/green{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/structure/bed/chair/comfy/blue, -/turf/simulated/floor/tiled/dark, -/area/bridge) -"TM" = ( -/obj/structure/disposalpipe/junction{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/bridge/fore) -"TP" = ( -/obj/structure/curtain/open/bed, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/tiled/dark/monotile, -/area/bridge/storage) -"TQ" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 8; - icon_state = "warning" - }, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 1 - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/dark, -/area/aux_eva) -"TT" = ( -/obj/effect/floor_decal/techfloor{ - dir = 4 - }, -/obj/item/modular_computer/telescreen/preset/medical{ - pixel_x = 32 - }, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 8 - }, -/turf/simulated/floor/tiled/techfloor, -/area/crew_quarters/safe_room/bridge) -"TW" = ( -/obj/machinery/atmospherics/binary/pump/on{ - dir = 4; - target_pressure = 200 - }, -/obj/machinery/access_button{ - command = "cycle_interior"; - frequency = 1379; - master_tag = "ai_core_airlock"; - name = "interior access button"; - pixel_x = 24; - pixel_y = -24; - req_access = list("ACCESS_AI_UPLOAD") - }, -/obj/effect/floor_decal/industrial/warning{ - icon_state = "warning"; - dir = 4 - }, -/obj/machinery/tele_beacon, -/turf/simulated/floor/tiled/dark/monotile, -/area/turret_protected/ai_foyer) -"TX" = ( -/turf/simulated/wall/prepainted, -/area/bridge/disciplinary_board_room) -"Ub" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/effect/floor_decal/corner/blue{ - dir = 5 - }, -/turf/simulated/floor/tiled/white, -/area/aquila/medical) -"Ue" = ( -/obj/machinery/status_display, -/turf/simulated/wall/r_wall/hull, -/area/maintenance/bridge/forestarboard) -"Uf" = ( -/obj/structure/bed/chair/padded/beige, -/obj/effect/floor_decal/corner/blue/mono, -/obj/machinery/atmospherics/unary/vent_pump/on, -/obj/machinery/light/small{ - dir = 1 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/bridge/disciplinary_board_room/deliberation) -"Ug" = ( -/obj/machinery/shield_diffuser, -/obj/machinery/door/airlock/external{ - autoset_access = 0; - frequency = 1331; - icon_state = "closed"; - id_tag = "aquila_shuttle_dock_outer"; - locked = 1; - name = "Docking Port Airlock"; - req_access = list("ACCESS_TORCH_CREW") - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/hallway/primary/bridge/aft) -"Uh" = ( -/obj/structure/window/reinforced, -/obj/structure/table/rack{ - dir = 8 - }, -/obj/structure/window/reinforced{ - dir = 1 - }, -/obj/structure/window/reinforced{ - dir = 4 - }, -/obj/machinery/door/window/brigdoor/westright{ - autoset_access = 0; - name = "CO's suit storage"; - req_access = list("ACCESS_CAPTAIN") - }, -/obj/effect/floor_decal/corner/blue/diagonal, -/obj/effect/floor_decal/corner/blue/diagonal{ - dir = 4 - }, -/obj/item/tank/oxygen_emergency_double, -/obj/item/rig/command/co/equipped, -/turf/simulated/floor/tiled/dark, -/area/aux_eva) -"Ui" = ( -/obj/structure/sign/ecplaque{ - pixel_y = 30 - }, -/obj/machinery/photocopier, -/obj/effect/floor_decal/corner/research/mono, -/turf/simulated/floor/tiled/monotile, -/area/crew_quarters/heads/office/rd) -"Uk" = ( -/obj/effect/floor_decal/industrial/hatch/yellow, -/obj/machinery/door/firedoor, -/obj/machinery/door/blast/regular/open{ - density = 0; - dir = 4; - icon_state = "pdoor0"; - id_tag = "bridge entry star"; - name = "Starboard Bridge Blast Doors"; - opacity = 0 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/steel_ridged, -/area/bridge/hallway/starboard) -"Uo" = ( -/obj/structure/bed/chair/padded/green, -/turf/simulated/floor/wood/walnut, -/area/crew_quarters/heads/office/cl) -"Uu" = ( -/obj/machinery/hologram/holopad, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled/dark/monotile, -/area/security/bridgecheck) -"Uy" = ( -/obj/structure/table/glass, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/obj/item/device/paicard, -/turf/simulated/floor/tiled, -/area/crew_quarters/heads/office/rd) -"UA" = ( -/turf/simulated/floor/tiled/dark, -/area/security/bridgecheck) -"UC" = ( -/obj/structure/closet/firecloset, -/obj/item/storage/briefcase/inflatable, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/floor/plating, -/area/maintenance/bridge/forestarboard) -"UE" = ( -/obj/structure/catwalk, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/plating, -/area/maintenance/bridge/foreport) -"UF" = ( -/obj/machinery/firealarm{ - dir = 8; - pixel_x = -24; - pixel_y = 0 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/tele_pad, -/turf/simulated/floor/tiled/techfloor/grid, -/area/turret_protected/ai_foyer) -"UL" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/item/device/radio/intercom{ - dir = 8; - pixel_x = 20 - }, -/obj/effect/floor_decal/corner/blue{ - dir = 5 - }, -/turf/simulated/floor/tiled/monotile, -/area/hallway/primary/bridge/fore) -"UU" = ( -/obj/effect/shuttle_landmark/ert/deck1{ - name = "B-Deck, Fore" - }, -/turf/space, -/area/space) -"UW" = ( -/obj/effect/paint/red, -/obj/machinery/atmospherics/pipe/simple/hidden/fuel{ - dir = 10 - }, -/turf/simulated/wall/titanium, -/area/aquila/storage) -"UX" = ( -/obj/structure/undies_wardrobe, -/turf/simulated/floor/carpet/blue, -/area/crew_quarters/heads/cobed) -"UY" = ( -/obj/machinery/computer/modular/preset/cardslot/command, -/obj/item/modular_computer/tablet/lease/preset/command, -/turf/simulated/floor/carpet/blue, -/area/crew_quarters/heads/office/co) -"Vb" = ( -/obj/machinery/atmospherics/pipe/manifold/visible/fuel{ - dir = 4 - }, -/obj/machinery/meter, -/obj/effect/floor_decal/industrial/warning{ - dir = 4; - icon_state = "warning" - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/plating, -/area/aquila/power) -"Vc" = ( -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/wood/walnut, -/area/crew_quarters/heads/office/xo) -"Vf" = ( -/obj/effect/floor_decal/scglogo{ - dir = 4; - icon_state = "center-left" - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/tiled/dark, -/area/bridge/disciplinary_board_room) -"Vg" = ( -/obj/machinery/door/airlock/external{ - autoset_access = 0; - frequency = 1331; - icon_state = "closed"; - id_tag = "aquila_shuttle_outer"; - locked = 1; - name = "Aquila External Access"; - req_access = list("ACCESS_TORCH_CREW") - }, -/obj/machinery/shield_diffuser, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/steel_ridged, -/area/aquila/airlock) -"Vh" = ( -/obj/effect/floor_decal/corner/paleblue/diagonal, -/obj/random_multi/single_item/runtime, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/crew_quarters/heads/office/cmo) -"Vi" = ( -/obj/structure/filingcabinet/chestdrawer{ - dir = 1 - }, -/obj/item/folder/blue, -/obj/item/folder/red, -/obj/item/folder, -/obj/item/folder/nt, -/obj/item/folder/yellow, -/obj/item/folder/white, -/obj/machinery/requests_console{ - announcementConsole = 1; - department = "Chief Science Officer's Desk"; - departmentType = 5; - name = "Chief Science Officer RC"; - pixel_y = 30 - }, -/obj/item/folder/nt, -/obj/effect/floor_decal/corner/research/mono, -/turf/simulated/floor/tiled/monotile, -/area/crew_quarters/heads/office/rd) -"Vj" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/obj/effect/floor_decal/corner/research{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 8; - icon_state = "pipe-c" - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/bridge/fore) -"Vl" = ( -/obj/effect/floor_decal/corner/blue{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled, -/area/hallway/primary/bridge/fore) -"Vn" = ( -/obj/machinery/door/blast/shutters{ - density = 0; - dir = 2; - icon_state = "shutter0"; - id_tag = "heads_meeting"; - name = "Meeting Room Window Shutters"; - opacity = 0 - }, -/obj/structure/cable/green, -/obj/structure/cable/green{ - d2 = 4; - icon_state = "0-4" - }, -/obj/effect/wallframe_spawn/reinforced/polarized{ - id = "meeting_windows" - }, -/turf/simulated/floor/plating, -/area/bridge/meeting_room) -"Vs" = ( -/obj/machinery/atmospherics/unary/engine{ - dir = 1 - }, -/turf/simulated/floor/airless, -/area/aquila/power) -"Vw" = ( -/obj/effect/floor_decal/corner/blue{ - dir = 5 - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/button/blast_door{ - id_tag = "heads_meeting"; - name = "Bridge Meeting Room Shutters Control"; - pixel_x = 39; - pixel_y = 31; - req_access = list("ACCESS_BRIDGE") - }, -/obj/machinery/button/blast_door{ - id_tag = "bridgehallway"; - name = "Bridge Internal Hallway Lockdown Control"; - pixel_x = 25; - pixel_y = 31; - req_access = list("ACCESS_BRIDGE") - }, -/obj/machinery/button/blast_door{ - id_tag = "bridge entry star"; - name = "Starboard Bridge Entrance Lockdown Control"; - pixel_x = 32; - pixel_y = 40; - req_access = list("ACCESS_BRIDGE") - }, -/obj/machinery/button/blast_door{ - id_tag = "bridge entry port"; - name = "Port Bridge Entrance Lockdown Control"; - pixel_x = 32; - pixel_y = 22; - req_access = list("ACCESS_BRIDGE") - }, -/turf/simulated/floor/tiled/dark, -/area/bridge) -"VB" = ( -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/bridge/forestarboard) -"VF" = ( -/obj/item/reagent_containers/food/drinks/flask/barflask{ - pixel_x = -4; - pixel_y = 8 - }, -/obj/item/device/taperecorder{ - pixel_x = -4; - pixel_y = 2 - }, -/obj/structure/table/woodentable/walnut, -/obj/item/sticky_pad/random, -/turf/simulated/floor/carpet, -/area/crew_quarters/heads/office/xo) -"VI" = ( -/obj/effect/floor_decal/industrial/hatch/yellow, -/obj/structure/cable/green{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/turf/simulated/floor/airless, -/area/space) -"VL" = ( -/obj/effect/floor_decal/corner/red/half, -/turf/simulated/floor/tiled/monotile, -/area/hallway/primary/bridge/fore) -"VN" = ( -/obj/effect/wallframe_spawn/reinforced/polarized{ - id = "bridge_port" - }, -/obj/structure/cable/green{ - d2 = 2; - icon_state = "0-2" - }, -/obj/structure/cable/green{ - d2 = 8; - icon_state = "0-8" - }, -/turf/simulated/floor/plating, -/area/bridge) -"VO" = ( -/obj/effect/floor_decal/industrial/outline/grey, -/obj/machinery/porta_turret{ - dir = 8 - }, -/turf/simulated/floor/tiled/dark, -/area/turret_protected/ai_foyer) -"VP" = ( -/obj/effect/floor_decal/corner/paleblue{ - dir = 10 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/bridge/aft) -"VV" = ( -/obj/machinery/ai_status_display, -/turf/simulated/wall/r_wall/prepainted, -/area/turret_protected/ai) -"VW" = ( -/obj/structure/bed/padded, -/obj/item/bedsheet/captain, -/turf/simulated/floor/carpet/blue, -/area/crew_quarters/heads/cobed) -"VY" = ( -/obj/machinery/button/alternate/door/bolts{ - id_tag = "bridgesafe_front"; - name = "safe room door-control"; - pixel_x = 25; - pixel_y = -1 - }, -/obj/effect/floor_decal/techfloor/orange{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/turf/simulated/floor/tiled/techfloor, -/area/crew_quarters/safe_room/bridge) -"Wa" = ( -/obj/structure/bed/chair/padded/red{ - dir = 4 - }, -/obj/effect/floor_decal/corner/red/half{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark, -/area/security/bridgecheck) -"Wb" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/white, -/area/aquila/medical) -"Wd" = ( -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/atmospherics/portables_connector, -/obj/machinery/portable_atmospherics/canister/empty, -/turf/simulated/floor/reinforced, -/area/turret_protected/ai_outer_chamber) -"We" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/effect/floor_decal/corner/blue{ - dir = 9 - }, -/turf/simulated/floor/tiled/dark, -/area/bridge/meeting_room) -"Wg" = ( -/obj/effect/wallframe_spawn/reinforced/titanium, -/obj/effect/paint/hull, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/aquila/airlock) -"Wh" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/effect/floor_decal/corner/red/half{ - dir = 8 - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/turf/simulated/floor/tiled/dark, -/area/security/bridgecheck) -"Wi" = ( -/obj/structure/table/glass, -/obj/machinery/photocopier/faxmachine{ - department = "Torch - Chief Science Officer" - }, -/obj/machinery/newscaster{ - pixel_y = 32 - }, -/obj/effect/floor_decal/corner/research/mono, -/turf/simulated/floor/tiled/monotile, -/area/crew_quarters/heads/office/rd) -"Wj" = ( -/obj/machinery/alarm{ - dir = 4; - pixel_x = -23 - }, -/obj/machinery/camera/network/security{ - c_tag = "Checkpoint - Bridge"; - dir = 4 - }, -/obj/effect/floor_decal/corner/red/mono, -/turf/simulated/floor/tiled/dark/monotile, -/area/security/bridgecheck) -"Wr" = ( -/obj/machinery/atmospherics/binary/pump{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/maintenance/bridge/forestarboard) -"Ws" = ( -/obj/effect/paint/red, -/turf/simulated/wall/titanium, -/area/aquila/power) -"Wv" = ( -/obj/structure/closet/secure_closet/bridgeofficer, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/floor/tiled/dark/monotile, -/area/bridge/storage) -"Ww" = ( -/obj/structure/handrail, -/turf/simulated/floor/tiled/white, -/area/aquila/medical) -"WF" = ( -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/machinery/embedded_controller/radio/airlock/airlock_controller{ - frequency = 1379; - id_tag = "ai_core_airlock"; - name = "AI Core Airlock Console"; - pixel_x = 24; - pixel_y = 0; - req_access = list("ACCESS_AI_UPLOAD"); - tag_airpump = "ai_core_pump"; - tag_chamber_sensor = "ai_core_sensor"; - tag_exterior_door = "ai_core_outer"; - tag_interior_door = "ai_core_inner" - }, -/obj/machinery/atmospherics/unary/vent_pump/high_volume/airlock{ - dir = 2; - id_tag = "ai_core_pump" - }, -/obj/machinery/light{ - icon_state = "tube1"; - dir = 4 - }, -/obj/effect/floor_decal/industrial/warning{ - icon_state = "warning"; - dir = 1 - }, -/turf/simulated/floor/tiled/techmaint, -/area/turret_protected/ai_foyer) -"WK" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 4 - }, -/obj/effect/floor_decal/corner/blue{ - dir = 9 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/bridge/fore) -"WL" = ( -/obj/machinery/computer/modular/preset/cardslot/command{ - dir = 8; - icon_state = "console" - }, -/turf/simulated/floor/wood/walnut, -/area/crew_quarters/heads/office/xo) -"WW" = ( -/obj/structure/table/glass, -/obj/effect/floor_decal/corner/blue/mono, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/bridge) -"WX" = ( -/obj/structure/catwalk, -/obj/structure/cable/green{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/turf/simulated/floor/plating, -/area/maintenance/bridge/foreport) -"WY" = ( -/obj/structure/sign/warning/high_voltage{ - dir = 8; - pixel_x = 4; - pixel_y = -6 - }, -/turf/simulated/wall/prepainted, -/area/bridge/meeting_room) -"Xa" = ( -/obj/structure/closet/firecloset, -/obj/item/storage/briefcase/inflatable, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/power/apc/high{ - dir = 8; - name = "west bump"; - pixel_x = -24 - }, -/obj/structure/cable/green{ - d2 = 4; - icon_state = "0-4" - }, -/obj/machinery/light/small, -/turf/simulated/floor/tiled/techfloor/grid, -/area/crew_quarters/safe_room/bridge) -"Xb" = ( -/obj/effect/floor_decal/techfloor{ - dir = 1 - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled/techfloor, -/area/aquila/storage) -"Xe" = ( -/obj/structure/bed/chair/comfy/blue, -/turf/simulated/floor/carpet/blue2, -/area/bridge/meeting_room) -"Xg" = ( -/obj/structure/bed/chair/comfy/blue{ - dir = 8 - }, -/turf/simulated/floor/carpet/blue2, -/area/bridge/meeting_room) -"Xh" = ( -/obj/effect/floor_decal/industrial/outline/grey, -/obj/structure/table/rack{ - dir = 8 - }, -/obj/structure/window/reinforced{ - dir = 1 - }, -/obj/structure/window/reinforced, -/obj/structure/window/reinforced{ - dir = 8 - }, -/obj/machinery/door/window/brigdoor/westright{ - autoset_access = 0; - dir = 4; - name = "CoS' suit storage"; - req_access = list("ACCESS_HEAD_OF_SECURITY") - }, -/obj/effect/floor_decal/corner/red/full, -/obj/item/tank/oxygen_emergency_double, -/obj/item/rig/command/security/equipped, -/turf/simulated/floor/tiled/dark, -/area/aux_eva) -"Xi" = ( -/obj/random/junk, -/obj/structure/railing/mapped{ - dir = 1; - icon_state = "railing0-1" - }, -/turf/simulated/floor/plating, -/area/maintenance/bridge/aftstarboard) -"Xj" = ( -/obj/structure/disposalpipe/segment{ - dir = 2; - icon_state = "pipe-c" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers, -/obj/effect/floor_decal/industrial/warning/fulltile, -/turf/simulated/floor/tiled, -/area/hallway/primary/bridge/fore) -"Xo" = ( -/obj/effect/floor_decal/industrial/warning, -/obj/item/device/radio/intercom{ - dir = 8; - pixel_x = 21 - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 1 - }, -/turf/simulated/floor/plating, -/area/aquila/power) -"Xp" = ( -/obj/structure/sign/solgov, -/obj/effect/paint/hull, -/turf/simulated/wall/titanium, -/area/aquila/airlock) -"Xq" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/lattice, -/turf/simulated/open, -/area/maintenance/bridge/foreport) -"Xu" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/ai_slipper, -/turf/simulated/floor/bluegrid, -/area/turret_protected/ai_foyer) -"Xw" = ( -/obj/machinery/door/airlock/vault/bolted{ - name = "AI Core Backup Access" - }, -/obj/machinery/door/blast/regular{ - dir = 4; - id_tag = "AICore"; - name = "AI Core Security Shutters"; - maxhealth = 5000 - }, -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/floor_decal/industrial/hatch/yellow, -/turf/simulated/floor/tiled/techmaint, -/area/turret_protected/ai_outer_chamber) -"Xx" = ( -/obj/effect/floor_decal/corner/paleblue/diagonal, -/obj/machinery/door/airlock/medical{ - id_tag = "cmodoor"; - name = "Chief Medical Officer"; - secured_wires = 1 - }, -/obj/machinery/door/firedoor, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/crew_quarters/heads/office/cmo) -"Xy" = ( -/obj/effect/floor_decal/industrial/hatch/yellow, -/obj/structure/cable/green{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/turf/simulated/floor/airless, -/area/space) -"Xz" = ( -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/structure/closet/secure_closet/guncabinet/PPE, -/turf/simulated/floor/tiled/dark/monotile, -/area/bridge/storage) -"XA" = ( -/turf/simulated/floor/bluegrid, -/area/turret_protected/ai_foyer) -"XB" = ( -/obj/structure/bed/chair/comfy/captain, -/turf/simulated/floor/plating, -/area/maintenance/bridge/forestarboard) -"XC" = ( -/obj/effect/floor_decal/corner/blue, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/dark, -/area/bridge) -"XH" = ( -/obj/machinery/power/terminal{ - dir = 1 - }, -/obj/structure/cable/yellow{ - d2 = 2; - icon_state = "0-2" - }, -/obj/structure/cable/green{ - d2 = 8; - icon_state = "0-8" - }, -/turf/simulated/floor/plating, -/area/aquila/power) -"XI" = ( -/obj/machinery/door/airlock/external{ - autoset_access = 0; - frequency = 1331; - icon_state = "closed"; - id_tag = "aquila_shuttle_inner"; - locked = 1; - name = "Aquila External Access"; - req_access = list("ACCESS_TORCH_CREW") - }, -/turf/simulated/floor/tiled/steel_ridged, -/area/aquila/airlock) -"XJ" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 10; - icon_state = "warning" - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/bridge/aftport) -"XN" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/effect/floor_decal/corner/blue{ - dir = 6 - }, -/turf/simulated/floor/tiled/monotile, -/area/hallway/primary/bridge/fore) -"XO" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/turf/simulated/floor/tiled/dark, -/area/bridge/storage) -"XQ" = ( -/obj/machinery/door/blast/regular/open{ - dir = 4; - id_tag = "bridge sensors"; - name = "Sensor Shroud" - }, -/turf/simulated/floor/reinforced/airless, -/area/bridge/storage) -"XR" = ( -/obj/structure/cable/green{ - d2 = 2; - icon_state = "0-2" - }, -/obj/effect/wallframe_spawn/reinforced/polarized{ - id = "co_windows" - }, -/turf/simulated/floor/plating, -/area/bridge) -"XW" = ( -/obj/structure/catwalk, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable/green{ - d2 = 4; - icon_state = "0-4" - }, -/obj/machinery/power/apc{ - dir = 1; - name = "north bump"; - pixel_y = 24; - req_access = list(list("ACCESS_ENGINE_EQUIP","ACCESS_ATMOS")) - }, -/turf/simulated/floor/plating, -/area/maintenance/bridge/foreport) -"XY" = ( -/obj/machinery/status_display, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/wall/r_wall/prepainted, -/area/turret_protected/ai) -"Yb" = ( -/obj/machinery/light{ - dir = 4 - }, -/obj/machinery/sleeper{ - dir = 8 - }, -/turf/simulated/floor/tiled/white/monotile, -/area/aquila/medical) -"Yd" = ( -/obj/structure/disposalpipe/segment, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, -/turf/simulated/floor/tiled/dark, -/area/crew_quarters/heads/office/xo) -"Ye" = ( -/obj/machinery/button/blast_door{ - id_tag = "bridgehallway"; - name = "Bridge Internal Hallway Lockdown Control"; - pixel_x = -38; - pixel_y = 7; - req_access = list("ACCESS_BRIDGE") - }, -/obj/machinery/button/blast_door{ - id_tag = "heads_meeting"; - name = "Bridge Meeting Room Shutters Control"; - pixel_x = -26; - pixel_y = 7; - req_access = list("ACCESS_BRIDGE") - }, -/obj/machinery/button/windowtint{ - id = "meeting_windows"; - pixel_x = -24; - pixel_y = -7 - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/effect/floor_decal/corner/blue{ - dir = 9 - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/hologram/holopad/longrange, -/turf/simulated/floor/tiled/dark, -/area/bridge/meeting_room) -"Yf" = ( -/obj/effect/floor_decal/corner/blue/three_quarters, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark, -/area/bridge/disciplinary_board_room) -"Yh" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 8; - icon_state = "warning" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/dark, -/area/aux_eva) -"Yi" = ( -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/door/airlock/external{ - frequency = 1379; - icon_state = "closed"; - id_tag = "ai_core_outer"; - locked = 1; - name = "AI Core Internal Access" - }, -/turf/simulated/floor/tiled/techmaint, -/area/turret_protected/ai_foyer) -"Yj" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 - }, -/obj/effect/floor_decal/industrial/warning/fulltile, -/obj/machinery/atm{ - pixel_x = 32 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/bridge/fore) -"Yk" = ( -/obj/effect/floor_decal/industrial/outline/grey, -/obj/machinery/computer/modular/preset/aislot/research{ - icon_state = "console"; - dir = 1 - }, -/turf/simulated/floor/tiled/dark, -/area/turret_protected/ai) -"Ys" = ( -/obj/random_multi/single_item/poppy, -/turf/simulated/floor/plating, -/area/maintenance/bridge/forestarboard) -"Yx" = ( -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/bluegrid, -/area/turret_protected/ai_foyer) -"Yz" = ( -/obj/structure/flora/pottedplant/orientaltree, -/obj/effect/floor_decal/spline/fancy/wood/corner{ - dir = 1 - }, -/obj/machinery/alarm{ - dir = 4; - pixel_x = -23 - }, -/turf/simulated/floor/wood/walnut, -/area/crew_quarters/heads/office/co) -"YA" = ( -/obj/machinery/computer/modular/preset/cardslot/command{ - dir = 8; - icon_state = "console" - }, -/obj/item/modular_computer/tablet/lease/preset/command, -/turf/simulated/floor/wood/walnut, -/area/crew_quarters/heads/office/xo) -"YC" = ( -/obj/machinery/door/airlock/sol{ - id_tag = "repdoor"; - name = "SolGov Representative"; - secured_wires = 1 - }, -/obj/machinery/door/firedoor, -/obj/structure/cable/green{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/wood/walnut, -/area/crew_quarters/heads/office/sgr) -"YH" = ( -/obj/machinery/alarm{ - dir = 4; - pixel_x = -25; - pixel_y = 0 - }, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/turf/simulated/floor/bluegrid, -/area/turret_protected/ai) -"YI" = ( -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/bridge/forestarboard) -"YJ" = ( -/obj/machinery/atmospherics/unary/vent_pump/on, -/obj/effect/floor_decal/corner/red/half{ - dir = 8 - }, -/turf/simulated/floor/tiled/dark, -/area/security/bridgecheck) -"YK" = ( -/obj/effect/floor_decal/corner/blue{ - dir = 6 - }, -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/tiled/dark, -/area/bridge/hallway/starboard) -"YL" = ( -/obj/structure/railing/mapped{ - dir = 1; - icon_state = "railing0-1" - }, -/obj/structure/railing/mapped{ - dir = 4; - icon_state = "railing0-1" - }, -/turf/simulated/open, -/area/maintenance/bridge/forestarboard) -"YN" = ( -/obj/machinery/door/airlock/maintenance{ - name = "Disciplinary Board Room Maintenance Access" - }, -/obj/machinery/door/firedoor, -/turf/simulated/floor/tiled/dark/monotile, -/area/bridge/disciplinary_board_room) -"YS" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/effect/catwalk_plated, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/hallway/primary/bridge/aft) -"YW" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 8; - icon_state = "warning" - }, -/obj/machinery/power/apc{ - name = "south bump"; - pixel_y = -24 - }, -/obj/structure/cable/green, -/turf/simulated/floor/tiled/dark, -/area/aux_eva) -"YX" = ( -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/door/airlock/vault/bolted{ - autoset_access = 0; - id_tag = "bridgestorage_exit"; - name = "Emergency Exit"; - req_access = list("ACCESS_BRIDGE") - }, -/obj/item/airlock_brace{ - req_access = list("ACCESS_BRIDGE") - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/bridge/storage) -"YY" = ( -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/effect/floor_decal/techfloor{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/aquila/crew) -"Za" = ( -/obj/machinery/shield_diffuser, -/obj/machinery/door/airlock/external{ - frequency = 1379; - icon_state = "closed"; - id_tag = "bridge_eva_outer"; - locked = 1; - name = "Bridge EVA External Access" - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/hallway/primary/bridge/aft) -"Zb" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 4 - }, -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/white, -/area/aquila/medical) -"Ze" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/effect/floor_decal/corner/blue{ - dir = 9 - }, -/turf/simulated/floor/tiled/dark, -/area/bridge/meeting_room) -"Zg" = ( -/obj/effect/floor_decal/scglogo{ - icon_state = "center-right" - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/turf/simulated/floor/tiled/dark, -/area/bridge) -"Zh" = ( -/obj/effect/floor_decal/industrial/outline/grey, -/obj/machinery/suit_cycler/command, -/turf/simulated/floor/tiled/dark, -/area/aux_eva) -"Zi" = ( -/obj/machinery/power/apc{ - dir = 8; - name = "west bump"; - pixel_x = -24 - }, -/obj/structure/cable/green{ - d2 = 4; - icon_state = "0-4" - }, -/obj/effect/floor_decal/corner/research/half{ - dir = 1 - }, -/turf/simulated/floor/tiled/monotile, -/area/crew_quarters/heads/office/rd) -"Zj" = ( -/obj/effect/paint/hull, -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 10 - }, -/turf/simulated/wall/titanium, -/area/aquila/suits) -"Zs" = ( -/obj/machinery/computer/account_database, -/obj/machinery/recharger/wallcharger{ - pixel_y = 24 - }, -/turf/simulated/floor/carpet, -/area/crew_quarters/heads/office/xo) -"Zt" = ( -/obj/effect/floor_decal/corner/red{ - dir = 6 - }, -/obj/structure/noticeboard{ - pixel_y = 30 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/crew_quarters/heads/office/cos) -"Zx" = ( -/obj/structure/table/standard{ - name = "plastic table frame" - }, -/obj/machinery/keycard_auth/torch{ - pixel_x = 26 - }, -/obj/effect/floor_decal/corner/yellow/mono, -/obj/machinery/photocopier/faxmachine{ - department = "Torch - Chief Engineer" - }, -/turf/simulated/floor/tiled/monotile, -/area/crew_quarters/heads/office/ce) -"Zy" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 4 - }, -/obj/machinery/alarm{ - dir = 1; - pixel_y = -28 - }, -/turf/simulated/floor/tiled/dark, -/area/aux_eva) -"ZA" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/alarm{ - pixel_y = 24 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/aquila/airlock) -"ZB" = ( -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/firealarm{ - pixel_y = 24 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable/cyan{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/effect/floor_decal/corner/orange/half{ - dir = 4 - }, -/obj/machinery/light_switch{ - pixel_x = 10; - pixel_y = 22 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/aquila/power) -"ZD" = ( -/obj/structure/disposalpipe/segment{ - dir = 4; - icon_state = "pipe-c" - }, -/turf/simulated/floor/tiled, -/area/crew_quarters/heads/office/rd) -"ZI" = ( -/obj/machinery/alarm{ - dir = 8; - pixel_x = 24 - }, -/obj/machinery/photocopier, -/obj/effect/floor_decal/corner/paleblue/diagonal, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled/white, -/area/crew_quarters/heads/office/cmo) -"ZJ" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/wood/walnut, -/area/crew_quarters/heads/office/cl) -"ZM" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/effect/catwalk_plated, -/obj/structure/disposalpipe/junction{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/plating, -/area/hallway/primary/bridge/fore) -"ZR" = ( -/obj/machinery/firealarm{ - pixel_y = 24 - }, -/obj/machinery/light_switch{ - pixel_x = 23; - pixel_y = 24 - }, -/turf/simulated/floor/tiled/dark, -/area/crew_quarters/heads/office/sea) -"ZT" = ( -/obj/structure/dogbed, -/obj/effect/floor_decal/corner/blue{ - dir = 9 - }, -/obj/random/plushie, -/mob/living/simple_animal/passive/corgi/Ian, -/turf/simulated/floor/tiled/dark, -/area/crew_quarters/heads/office/xo) -"ZV" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/firealarm{ - dir = 2; - pixel_y = 24 - }, -/obj/machinery/ai_slipper, -/turf/simulated/floor/bluegrid, -/area/turret_protected/ai_foyer) -"ZX" = ( -/obj/effect/floor_decal/corner/paleblue/diagonal, -/obj/structure/bed/chair/padded/teal, -/turf/simulated/floor/tiled/white, -/area/crew_quarters/heads/office/cmo) - -(1,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -xP -"} -(2,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(3,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(4,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(5,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(6,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(7,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(8,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(9,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(10,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(11,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(12,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(13,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(14,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(15,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(16,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(17,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -UU -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(18,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(19,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(20,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -Cb -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(21,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(22,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(23,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(24,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(25,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -gl -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(26,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(27,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(28,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(29,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(30,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(31,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(32,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(33,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(34,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -pe -aa -aa -hg -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -pe -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(35,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -af -af -af -af -af -af -af -af -af -af -aa -ae -aa -aa -zx -aa -aa -kE -aa -aa -aa -kE -aa -aa -zx -aa -aa -ae -qA -tg -tg -tg -tg -tg -tg -tg -tg -tg -tg -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(36,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -af -af -af -af -af -af -af -af -af -af -af -af -oA -aa -aa -vA -aa -aa -hH -aa -aa -aa -ae -aa -aa -vA -aa -aa -ae -tg -tg -tg -tg -tg -tg -tg -tg -tg -tg -tg -tg -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(37,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -af -af -af -af -af -af -af -af -af -af -Ue -af -af -fu -XQ -XQ -sF -Hz -SE -Aw -wM -AB -mc -Aw -KG -Hz -Es -aa -aa -sx -tg -tg -tg -tg -uy -uy -uy -uy -uy -uy -tg -tg -tg -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(38,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -af -af -af -VB -yc -VB -cR -YX -QQ -TP -LJ -LP -NL -DE -TB -sm -HE -Ra -CE -BE -QW -Rq -GV -dU -WW -FE -HE -BI -RV -Mz -Yz -LY -dA -An -uy -Kq -Cl -fV -Av -uy -uy -tg -tg -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(39,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -af -af -KB -VB -OS -QY -er -qO -qO -qO -Gr -rz -Xz -Fp -eM -DE -Ie -nf -If -lt -vg -zg -zN -Qw -TK -cV -Ie -Ng -Id -th -OM -Pt -yS -Py -uy -VW -MA -EJ -DQ -xx -uy -tg -tg -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(40,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -af -af -XB -VB -zq -aj -qs -UC -qO -aY -dE -Jh -Hf -bf -ee -Wv -eP -cy -Af -hn -hn -HK -hn -hn -SJ -ev -ck -UY -Fg -Ig -OM -tR -Mf -CW -uy -UX -MA -lu -mT -ND -uy -tg -tg -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(41,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -af -af -DI -VB -zq -FL -GW -Ys -qO -zC -dE -XO -eN -Ke -Ks -TI -eP -cz -HC -jw -kw -lm -kw -nH -HC -ew -XR -NN -Fl -Ih -OM -Pt -Nf -Nf -uy -Iz -IG -Cr -CV -zP -uy -tg -tg -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(42,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -af -af -aj -VB -zq -Nr -Tx -bI -qO -GX -cT -Tl -jA -Je -Ne -Jh -HI -aZ -XC -kw -Fy -Gg -Am -kw -HS -aZ -Qp -qP -rI -fv -In -tT -uB -tT -Iv -IA -IH -DY -dG -SG -uy -tg -tg -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(43,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -af -af -TA -VB -zq -Wr -NM -Bd -qO -GY -Hc -MV -De -Mi -Oe -Se -lL -Hx -EV -Vw -HH -Ch -Kt -Lw -fN -HW -ck -qQ -rJ -Ii -Io -Kh -uC -GU -uy -IB -To -KC -dG -Cx -uy -tg -tg -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(44,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -af -af -at -VB -aL -bo -bt -Jp -qO -GZ -Rs -Kv -Du -qO -qO -yM -eP -hV -eP -nu -vf -lo -yh -dW -eP -HX -eP -Dx -rK -bq -bq -bq -bq -bq -uy -uy -uy -uy -SV -uy -uy -tg -tg -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(45,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -af -af -al -aA -al -aO -aO -aO -aO -aO -aO -aO -aO -aO -bM -ci -ct -cA -iI -HF -qf -Zg -qh -HP -ox -ex -eV -fo -fM -RT -vm -tW -Iq -qH -qH -qH -qH -Rl -jc -bH -aK -tg -tg -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(46,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -af -af -am -ay -JF -aO -sC -Bs -qa -aO -sl -si -VF -aO -bR -cl -cu -cB -iJ -jz -dT -dh -IY -nJ -oy -eB -eW -fw -fP -sy -En -tX -En -vj -vO -ww -qH -Oi -lT -Ht -aK -tg -tg -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(47,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -af -af -af -YI -VB -JF -aO -Zs -co -cp -aO -dI -aB -za -fx -bS -cl -cv -cC -eP -AH -yf -eP -VN -zh -eP -eC -eX -fy -fQ -sz -Ip -kv -Is -vk -vP -IE -qH -aK -aK -aK -aK -tg -tg -tg -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(48,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -af -af -af -an -VB -xN -aO -fz -bN -cq -aO -aO -eq -aO -yg -bY -cl -cw -cD -db -KX -KX -CZ -OD -OD -ed -eD -fa -fA -fR -qH -ZR -vZ -uG -Nn -Ck -mz -qH -xc -xc -xc -xc -tg -tg -tg -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(49,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -af -af -af -aj -VB -xN -aO -en -bO -bO -Od -dJ -Ce -ZT -bQ -bY -cm -cx -cE -dc -YK -YK -jB -kx -kx -ef -eE -fc -fC -fS -qH -tm -tZ -hU -yp -vQ -wx -sB -xc -Ji -KZ -Ma -tg -tg -tg -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(50,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -af -af -af -ao -VB -xN -aO -RK -bd -Vc -dR -Yd -eQ -Hh -Ho -bZ -cn -hq -hq -rt -yd -Hv -WY -bP -ab -ta -hq -hq -fE -fT -rQ -ti -ti -ti -ti -ti -ti -ti -ti -ti -rT -Ma -tg -tg -tg -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(51,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -af -af -af -aj -VB -xN -aO -QX -dd -bO -iB -oz -zT -oI -Hp -ca -cr -hq -cU -de -Qv -We -Ye -Ze -DH -ek -eG -hq -fG -fU -rR -Ik -to -ub -Tn -Pf -vS -wz -Xa -ti -oB -Ma -tg -tg -tg -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(52,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -af -af -af -aj -VB -YL -aO -rC -Ad -bO -Qd -be -NH -eT -EM -Uk -Hs -hs -cW -dg -Te -zf -zf -zf -Te -el -eK -hs -qY -AJ -rS -PB -tp -uH -uH -Qf -vT -wA -nK -xe -WX -Ma -tg -tg -tg -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(53,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -af -af -af -aj -VB -aj -aO -FG -YA -WL -aO -aO -et -eS -aO -eU -qg -Vn -cX -dl -Xe -dK -dP -LN -Ah -eo -eL -oJ -Og -Vl -Pg -VY -TT -ud -uI -vp -vU -IF -yL -ti -xy -xc -tg -tg -tg -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(54,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -af -af -af -aj -VB -al -aO -aO -kA -kV -ba -Ta -Os -Os -Os -BY -ra -jO -cY -do -Te -Xg -Xg -Xg -Te -ep -eO -bX -GD -Ap -ti -ti -ti -ti -ti -ti -ti -ti -ti -ti -XW -xE -tg -tg -tg -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(55,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -af -af -af -VB -VB -al -bb -AR -bU -Os -df -lx -bT -QN -bT -Lf -gJ -id -cZ -dq -jH -Sn -dQ -dS -jH -es -eR -id -rb -rV -jR -WK -Os -Os -Os -AR -wB -fB -xb -oB -xz -xF -tg -tg -tg -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(56,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -af -af -af -ap -aD -QK -UL -ax -aN -bs -bv -bw -bw -bF -bK -cg -cs -hq -hq -hq -DP -hq -hq -hq -hq -hq -hq -hq -rc -cG -XN -Gn -ZM -Nk -cF -AX -RE -IK -UE -UE -lW -oB -tg -tg -tg -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(57,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -af -af -af -aq -aE -sJ -sJ -aC -bV -sJ -Nd -He -Ka -sJ -Le -Pe -gL -hx -ig -iP -dF -dL -mE -mG -Ff -lq -py -qm -rd -sf -sP -ts -ug -ky -sL -sL -sL -sL -oB -oB -xj -xJ -tg -tg -tg -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(58,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -af -af -af -YI -aE -sJ -ai -aJ -Dg -Cd -Rd -by -ey -bG -OE -Qe -Ga -hz -ih -CP -Cf -dM -mE -mH -Gf -nU -pz -qo -re -rY -sH -tt -uh -uM -Rf -vX -wD -sL -NW -NW -gP -NW -tg -tg -tg -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(59,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -af -af -af -ar -aE -sJ -ak -gc -yU -Ix -Oy -qU -Nw -eY -bL -gd -gO -dp -ii -Ia -iR -dN -mE -mI -oF -em -pA -qp -rf -rZ -sI -tu -ui -uN -Sf -vY -mp -sL -JG -GI -BG -xK -tg -tg -tg -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(60,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -af -af -af -as -aE -sJ -bc -Uo -Dh -Hw -gN -yI -ez -eZ -Gy -xU -xX -hA -ij -iS -jM -kI -mE -Zt -nV -wC -pB -qq -xY -sa -YC -tv -uj -uO -vu -vY -HJ -sL -JG -Ma -Xq -Fz -tg -tg -tg -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(61,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -af -af -af -at -aE -sJ -sJ -sJ -ik -Ix -GB -ns -ZJ -qR -sJ -xV -Fb -ie -da -Zx -AZ -Cs -mE -mJ -Mn -eu -fF -mE -xZ -hu -sL -DZ -qB -SL -gv -uz -QS -sL -JG -Ma -Xq -Fz -tg -tg -tg -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(62,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -af -af -af -JT -aE -VB -VB -sJ -sJ -bu -sJ -sJ -HG -sJ -sJ -Gs -gR -ie -ie -ie -ie -ie -mE -mE -mE -mE -mE -mE -uK -ga -sL -sL -uk -sL -vv -vv -vv -vv -xh -Ma -Xq -Fz -tg -tg -tg -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(63,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -af -af -af -af -aF -aP -bg -dk -LR -qn -NC -Ox -PW -nv -Pw -xW -Rp -fD -Pd -BX -dH -fY -zV -kX -eF -Wj -Eq -yW -FS -yb -sL -tx -ul -sL -Tf -wb -wH -vv -xi -xr -xB -tg -tg -tg -tg -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(64,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -af -af -af -af -aj -bh -dk -GA -Oh -NC -Ov -Dj -ua -dk -gf -gM -fD -il -iU -TM -dO -AI -qw -YJ -Om -Wh -yR -Gb -Aq -sL -ty -um -sL -Uf -wc -wI -vv -Lr -vs -tg -tg -tg -tg -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(65,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -af -af -af -al -bi -dk -Kx -NC -Pl -Pn -oE -hW -dk -Re -Bw -CH -im -iV -nM -VL -NE -UA -Uu -gT -pE -mA -rg -se -sL -tz -un -sL -vy -wd -wJ -vv -xj -xs -tg -tg -tg -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(66,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -gz -gz -gz -aQ -bx -sT -sT -sT -sT -sT -sT -sT -Kb -xW -xX -Mq -im -Jt -Dr -Ay -mN -AA -nZ -Wa -pF -mN -rg -yb -TX -TX -TX -TX -vv -nI -vv -vv -xk -xc -tg -tg -tg -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(67,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -gz -gz -gz -cb -bx -sT -Ti -Zi -hj -RQ -Fj -Oj -sT -uJ -zo -hC -La -iX -Dr -fB -yW -mO -oK -zM -pG -yW -rk -qz -TX -uS -uo -uT -Lh -Yf -gg -TX -xl -xt -CN -CN -CN -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(68,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -gz -gz -gz -fd -gh -sT -Ui -bj -nj -Aj -Gj -ZD -sQ -Vj -Xj -Tz -hE -iY -jS -RU -lB -Mr -ob -vx -zY -qt -rl -zF -TX -DV -up -uU -Mh -wf -wL -TX -xl -xt -CN -CN -CN -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(69,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -gz -gz -gz -cc -bx -sT -Vi -cj -Nt -Uy -Ao -Qj -cS -gk -Yj -hF -io -iZ -jT -kK -lC -mQ -oc -bJ -Of -RC -rm -sh -sS -tC -uq -Qg -Vf -wg -Nb -TX -xl -CN -CN -CN -CN -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(70,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -gz -gz -cd -bx -sT -Wi -Lv -AE -fl -Jj -Rj -sT -fB -fB -AP -fB -uV -in -kL -lD -kL -lA -Xx -kJ -fW -Cv -pI -kJ -FX -lS -Fn -rA -wh -wN -TX -xm -CN -CN -CN -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(71,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -gz -gz -aR -bx -sT -sT -IT -tj -BR -Kj -Sj -sT -gm -gm -gm -gm -gm -jU -kM -lE -mS -oe -oO -pJ -qv -rn -KP -kJ -TJ -dj -uW -Lb -Mb -Jo -YN -xl -CN -CN -CN -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(72,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -gz -gz -aS -bx -bm -ag -sT -sT -sT -sT -sT -sT -gm -gm -gm -gm -gm -jV -SN -YS -VP -of -oP -ZX -Kf -OO -yw -kJ -SB -RD -TX -TX -TX -TX -TX -xn -CN -CN -CN -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(73,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -gz -gz -gz -gz -bB -Qi -KH -cc -jx -MD -MD -yV -fI -gm -gm -gm -gm -gm -jV -SN -YS -VP -og -ly -pL -qx -Ll -nG -kJ -TX -TX -TX -vE -vE -wP -wY -Cn -CN -CN -CN -CN -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(74,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -gz -gz -dY -dY -dY -gi -bx -Xi -aG -aT -MD -MD -zW -fI -gm -gm -gm -gm -gm -jV -kN -lH -mV -kJ -oR -pM -rp -Vh -EN -kJ -oS -OK -oh -vF -wj -wQ -us -Km -yy -CN -CN -CN -CN -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(75,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -gz -gz -dY -Eb -vd -gi -bx -Ns -cH -dr -dZ -Lj -ff -fI -gm -gm -gm -gm -gm -fI -kM -El -mW -kJ -kJ -jD -ZI -qu -EP -kJ -Gi -OK -Hi -zQ -wk -zQ -Np -LM -yy -wP -CN -CN -CN -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(76,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -gz -gz -dY -Jc -fe -Ni -Ri -ce -cI -ds -ds -Mj -fg -fI -fI -fI -fI -fI -fI -jW -SN -nb -mX -Ey -oh -oh -oh -oh -oh -oh -tH -ut -fO -BW -wl -wR -wR -XJ -xv -xD -CN -CN -CN -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(77,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -gz -gz -gz -dY -dY -dY -bC -bC -cJ -dt -bC -zW -fh -ds -ds -ds -ds -ds -ds -jX -kO -az -mY -CU -oi -oT -oT -oT -oT -oT -oT -uu -uX -vG -wm -wS -uX -xo -CN -CN -CN -CN -CN -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(78,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -gz -gz -gz -gz -bD -cf -cK -du -bD -gz -gz -gz -gz -DN -DN -DN -DN -DN -kP -aV -mZ -on -on -on -on -on -on -on -on -on -uX -Pc -wn -wT -dV -CN -CN -CN -CN -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(79,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ad -ad -gz -gz -bD -tb -cL -dv -bD -gz -gz -gz -gz -DN -xg -ip -ja -DN -kQ -aU -na -on -Qh -Xh -di -qi -yi -Bp -Ci -on -uX -vI -wo -wU -dV -CN -CN -ad -ad -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(80,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ad -ad -ad -gz -bD -ch -cM -dw -bD -gz -ad -ad -gn -gV -hI -iq -iq -jY -kR -aW -aX -Qc -Rh -Yh -Yh -TQ -Rz -SU -YW -on -dV -vJ -wp -wV -dV -CN -ad -ad -ad -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(81,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ad -ad -gz -bD -bD -cN -bD -bD -gz -vB -Al -Al -Za -hJ -hJ -hJ -jZ -kS -lN -nc -ol -oW -Zh -hi -pR -yD -Fi -Dt -CO -dV -dV -wq -wW -dV -CN -ad -ad -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -yA -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(82,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ad -ad -ad -bD -bD -bD -bD -bD -ad -hR -Oc -ad -gX -hK -is -hK -DN -kT -lO -nd -CO -Sh -pQ -pQ -QE -Ai -Ai -Zy -CO -dV -dV -Tc -dV -dV -ad -ad -ad -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(83,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ad -ad -ad -ad -bD -bD -bD -ad -ad -hR -ad -DN -DN -DN -DN -DN -DN -kU -Sg -ne -CO -Th -Dq -Uh -fH -bk -zz -IW -CO -dV -dV -ws -dV -ad -ad -ad -ad -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(84,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -au -aH -aH -aH -bE -aH -cO -ad -ad -ad -hR -ad -DN -DN -DN -DN -DN -DN -DN -Tg -DN -CO -CO -CO -CO -CO -CO -CO -CO -CO -dV -ad -wt -aH -Rg -aH -aH -aH -xR -oa -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(85,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ah -av -aI -ad -ah -av -aI -cP -ad -ad -ad -hR -ad -DN -DN -DN -DN -DN -DN -DN -lR -DN -DN -DN -DN -DN -DN -DN -DN -DN -DN -dV -vK -cP -ah -av -aI -ad -ah -av -aI -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(86,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ah -av -aI -ad -ah -av -aI -cP -ad -ad -ad -hR -ad -ad -fj -eb -eb -Ec -Fc -DN -Ug -DN -rx -rx -rx -rx -rx -rx -rx -Ws -Ws -Ws -vL -cP -ah -av -aI -ad -ah -av -aI -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(87,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ah -av -aI -ad -ah -av -aI -cP -ad -ad -ad -hR -ad -ad -gY -kb -kb -kb -Gc -Xp -Vg -CD -rx -oZ -pS -qD -rv -rv -sU -tI -lp -Vs -vL -cP -ah -av -aI -ad -ah -av -aI -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(88,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ah -av -aI -ad -ah -av -aI -cP -vB -Al -Al -wZ -ad -ad -gY -kb -it -it -Zj -Kc -Hg -Nc -ha -pa -pT -qE -JA -sn -sV -tJ -rr -Ws -vL -cP -ah -av -aI -ad -ah -av -aI -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(89,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ah -av -aI -ad -ah -av -aI -cP -hR -ad -ad -ad -ad -fj -fk -kb -DR -jf -kb -tc -Mc -Lg -rx -pb -pU -qF -rw -Vb -sW -tK -IL -Vs -vL -cP -ah -av -aI -ad -ah -av -aI -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(90,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ah -av -aI -ad -ah -av -aI -cP -hR -ad -ad -fj -eb -fk -gZ -kb -iu -jg -kb -EE -Jg -ni -rx -ZB -Sb -Xo -AU -XH -BO -lp -IJ -Ws -vL -cP -ah -av -aI -ad -ah -av -aI -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(91,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ah -av -aI -ad -ah -av -aI -cP -Kr -eb -eb -fk -ec -ec -ec -kb -kb -Db -kb -FK -XI -Wg -rx -pc -rx -rx -rx -rx -rx -rr -uv -uZ -nE -cP -ah -av -aI -ad -ah -av -aI -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(92,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ah -av -aI -ad -ah -av -aI -cP -BF -ec -SA -SA -ec -go -ec -hL -iv -jh -ke -FK -lX -nk -pd -no -gw -Ok -ry -so -sY -Oq -RH -vL -ad -cP -ah -av -aI -ad -ah -av -aI -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(93,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ah -av -aI -ad -ah -av -aI -cP -BF -Ib -eH -fm -fJ -gp -ec -hM -Ez -Mw -kf -FK -ZA -nn -Dw -yk -gw -Ww -qd -Zb -Ac -LQ -SQ -vL -ad -cP -ah -av -aI -ad -ah -av -aI -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(94,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ah -av -aI -ad -ah -av -aI -cP -BF -Ib -eI -fn -fK -gq -hb -hN -iw -Cg -kg -Ob -Li -nm -Qb -pf -pY -Ub -Wb -ac -Bc -Oq -RH -vL -ad -cP -ah -av -aI -ad -ah -av -aI -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(95,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ah -av -aI -ad -ah -av -aI -cP -BF -Ib -eJ -fm -fL -gr -ec -YY -jj -jj -AN -FK -Qz -Tb -nl -KI -gw -Ww -qd -JE -Cc -LQ -SQ -vL -ad -cP -ah -av -aI -ad -ah -av -aI -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(96,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ad -ad -aa -aa -aa -aa -ad -ad -ah -av -aI -ad -ah -av -aI -cP -BF -ec -SA -SA -ec -gs -ec -hO -iy -jk -kh -FK -lZ -FK -FK -ph -gw -KN -Yb -zc -Dc -Oq -RH -vL -ad -cP -ah -av -aI -ad -ah -av -aI -ad -ad -aa -aa -aa -aa -ad -ad -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(97,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ad -ad -aa -aa -aa -aa -ad -ad -ah -av -aI -ad -ah -av -aI -cP -pw -eg -eg -nr -ec -ec -ec -QF -QF -QF -QF -QF -Pb -td -QL -oU -QL -QL -QL -QL -QL -PA -uv -vb -vK -cP -ah -av -aI -ad -ah -av -aI -ad -ad -aa -aa -aa -aa -ad -ad -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(98,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ad -ad -ad -ad -aa -aa -aa -ad -ad -ah -av -aI -ad -ah -av -aI -cP -hR -ad -ad -fp -eg -nr -hc -QF -QF -jl -ki -kW -mb -np -QL -pi -qb -pX -je -pZ -MU -UW -mx -xQ -vL -cP -ah -av -aI -ad -ah -av -aI -ad -ad -aa -aa -aa -ad -ad -ad -ad -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(99,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ad -ad -ad -ad -ad -ad -aa -aa -ad -ad -ah -av -aI -ad -ah -av -aI -cP -hR -ad -ad -ad -ad -fp -nr -OX -iz -JV -So -PC -wr -vn -Rb -pj -qc -aM -yl -st -te -tM -fX -kc -vL -cP -ah -av -aI -ad -ah -av -aI -ad -ad -aa -aa -ad -ad -ad -ad -ad -ad -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(100,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ad -ad -ad -ad -ad -ad -aa -ad -ad -ad -ah -av -aI -ad -ah -av -aI -cP -hR -ad -ad -ad -ad -ad -gY -QF -QF -jl -ix -iA -pW -nq -QL -pk -tL -uw -uw -PP -Xb -tN -PA -xQ -vL -cP -ah -av -aI -ad -ah -av -aI -ad -ad -ad -aa -ad -ad -ad -ad -ad -ad -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(101,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ad -ad -ad -ad -ad -ad -aa -ad -ad -ad -ah -av -aI -ad -ah -av -aI -cP -hR -ad -ad -ad -ad -ad -gY -QF -QF -Ag -Ag -Ag -Ag -oY -QL -pl -qe -qI -rE -su -tf -tO -UW -kc -vL -cP -ah -av -aI -ad -ah -av -aI -ad -ad -ad -aa -ad -ad -ad -ad -ad -ad -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(102,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ah -av -aI -ad -ah -av -aI -cP -hR -ad -ad -ad -ad -ad -fp -eg -eg -eg -eg -eg -nr -kH -QL -QL -QL -QL -QL -QL -QL -xQ -xQ -xQ -vL -cP -ah -av -aI -ad -ah -av -aI -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(103,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ah -av -aI -ad -ah -av -aI -cP -hR -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -fp -eg -eg -eg -eg -eg -eg -eg -eg -eg -eg -eg -nE -cP -ah -av -aI -ad -ah -av -aI -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(104,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ah -av -aI -ad -ah -av -aI -cQ -fZ -aH -aH -aH -aH -aH -aH -aH -aH -aH -aH -aH -aH -aH -aH -aH -aH -aH -aH -aH -aH -aH -aH -aH -aH -wu -ah -av -aI -ad -ah -av -aI -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(105,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ah -av -aI -ad -ah -av -aI -ad -hR -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ah -av -aI -ad -ah -av -aI -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(106,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ah -av -aI -ad -ah -av -aI -ad -Xy -Al -Al -Al -Al -Al -Al -Al -Al -Al -Al -Al -Al -VI -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ah -av -aI -ad -ah -av -aI -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(107,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ah -av -aI -ad -ah -av -aI -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -Rr -Rr -ln -Sy -Rr -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ah -av -aI -ad -ah -av -aI -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(108,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ad -ad -ad -ad -ad -ad -aa -ad -ad -ad -ah -av -aI -ad -ah -av -aI -ad -ad -ad -ad -ad -ad -Rr -Rr -Rr -Rr -Rr -Rr -Rr -Rr -Sy -Rr -Rr -Rr -Rr -Rr -Rr -ad -ad -ad -ad -ad -ad -ah -av -aI -ad -ah -av -aI -ad -ad -ad -aa -ad -ad -ad -ad -ad -ad -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(109,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ad -ad -ad -ad -ad -ad -aa -ad -ad -ad -ah -av -aI -ad -ah -av -aI -ad -ad -ad -ad -ad -Rr -Rr -Rr -Rr -Rr -Rr -dm -pr -Sz -UF -dm -Rr -Rr -Rr -Rr -Rr -Rr -ad -ad -ad -ad -ad -ah -av -aI -ad -ah -av -aI -ad -ad -ad -aa -ad -ad -ad -ad -ad -ad -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(110,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ad -ad -ad -ad -ad -ad -aa -ad -ad -ad -ah -av -aI -ad -ah -av -aI -ad -ad -ad -ad -Rr -Rr -Rr -CG -CG -CG -Wd -uE -Ij -qy -Fd -DO -GM -CG -CG -CG -Rr -Rr -Rr -ad -ad -ad -ad -ah -av -aI -ad -ah -av -aI -ad -ad -ad -aa -ad -ad -ad -ad -ad -ad -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(111,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ad -ad -ad -ad -aa -aa -ad -ad -ad -ah -av -aI -ad -ah -av -aI -ad -ad -ad -Rr -Rr -Rr -fb -CG -lY -lY -lY -QU -zt -TW -Fo -QU -lY -lY -lY -CG -xa -Rr -Rr -Rr -ad -ad -ad -ah -av -aI -ad -ah -av -aI -ad -ad -ad -aa -aa -ad -ad -ad -ad -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(112,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ad -ad -aa -aa -aa -ad -ad -ad -ah -av -aI -ad -ah -av -aI -ad -ad -Rr -Rr -Rr -CG -CG -lY -QU -QU -QU -QU -OR -Ku -Qs -QU -QU -QU -QU -lY -CG -CG -Rr -Rr -Rr -ad -ad -ah -av -aI -ad -ah -av -aI -ad -ad -ad -aa -aa -aa -ad -ad -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(113,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ad -ad -aa -aa -ad -ad -ad -ad -ah -av -aI -ad -ah -av -aI -ad -ad -Rr -Rr -AS -CG -lY -QU -QU -VO -nL -QU -jF -Fv -gb -QU -nL -FA -QU -QU -lY -CG -AS -Rr -Rr -ad -ad -ah -av -aI -ad -ah -av -aI -ad -ad -ad -ad -aa -aa -ad -ad -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(114,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ad -ah -av -aI -ad -ah -av -aI -ad -ad -Rr -Rr -CG -lY -QU -QU -PH -BK -Hq -Yi -WF -nR -TE -Hr -if -if -PN -QU -QU -lY -CG -Rr -Rr -ad -ad -ah -av -aI -ad -ah -av -aI -ad -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(115,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ad -ah -av -aI -ad -ah -av -aI -ad -ad -Rr -Rr -CG -lY -QU -VO -Yx -XA -QU -RP -RP -SM -RP -RP -RP -XA -kn -VO -QU -lY -CG -Rr -Rr -ad -ad -ah -av -aI -ad -ah -av -aI -ad -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(116,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ad -ah -av -aI -ad -ah -av -aI -ad -ad -Rr -Rr -CG -lY -QU -mo -Yx -VO -gj -oQ -oC -nt -OU -oQ -gj -VO -Xu -SK -QU -lY -CG -Rr -Rr -ad -ad -ah -av -aI -ad -ah -av -aI -ad -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(117,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ad -ah -av -aI -ad -ah -av -aI -ad -ad -Rr -Rr -CM -lY -QU -pN -Yx -VV -RP -ju -RP -RP -RP -ju -RP -VV -kn -Gp -QU -lY -OV -Rr -Rr -ad -ad -ah -av -aI -ad -ah -av -aI -ad -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(118,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ad -ah -av -aI -ad -ah -av -aI -ad -ad -Rr -Rr -CG -lY -QU -VO -Yx -RP -RG -zm -RP -mU -RP -Pr -zs -RP -kn -VO -QU -lY -CG -Rr -Rr -ad -ad -ah -av -aI -ad -ah -av -aI -ad -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(119,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ad -ah -av -aI -ad -ah -av -aI -ad -ad -ln -Rr -fb -lY -QU -gD -os -RP -ic -sA -DA -Cj -RP -sA -gS -RP -ZV -ib -QU -lY -xa -Rr -ln -ad -ad -ah -av -aI -ad -ah -av -aI -ad -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(120,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ad -ah -aw -aI -ad -ah -aw -aI -ad -ad -Rr -Rr -CG -lY -QU -VO -Yx -RP -AF -ju -RP -IX -RP -ju -Yk -RP -kn -VO -QU -lY -CG -Rr -Rr -ad -ad -ah -aw -aI -ad -ah -aw -aI -ad -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(121,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -Rr -Rr -CG -lY -QU -XA -Yx -VV -RP -kd -rj -iH -YH -ia -RP -VV -kn -XA -QU -lY -CG -Rr -Rr -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(122,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -Rr -Rr -CG -lY -QU -mo -Yx -VO -RP -zX -LL -ej -gK -zX -RP -VO -Xu -SK -QU -lY -CG -Rr -Rr -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(123,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -Rr -Rr -CG -lY -QU -VO -Yx -XA -RP -RP -rD -XY -RP -RP -RP -XA -kn -VO -QU -lY -CG -Rr -Rr -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(124,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -Rr -Rr -CG -lY -QU -QU -KW -BK -Hq -Hq -jv -kj -Ou -if -if -if -yX -QU -QU -lY -CG -Rr -Rr -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(125,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -Rr -Rr -AS -CG -lY -QU -QU -VO -CY -XA -VO -CL -VO -XA -CY -VO -QU -QU -lY -CG -AS -Rr -Rr -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(126,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ae -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -Rr -Rr -Rr -CG -CG -lY -lY -lY -lY -lY -lY -Xw -lY -lY -lY -lY -lY -lY -CG -CG -Rr -Rr -Rr -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ae -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(127,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ae -ae -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -Rr -Rr -Rr -lc -CG -lY -lY -lY -lY -lY -FR -lY -lY -lY -lY -lY -CG -la -Rr -Rr -Rr -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ae -ae -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(128,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ae -ae -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -Rr -Rr -Rr -CG -CG -CG -CG -HB -mk -Jn -mk -HB -CG -CG -CG -CG -Rr -Rr -Rr -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ae -ae -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(129,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -Rr -Rr -Rr -Rr -Rr -Rr -Rr -Rr -Me -Rr -Rr -Rr -Rr -Rr -Rr -Rr -Rr -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(130,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -yB -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ad -ae -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -Rr -Rr -Rr -Rr -Rr -Rr -SR -Oa -ln -Rr -Rr -Rr -Rr -Rr -Rr -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ae -ad -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(131,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ad -ae -ae -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -Ic -JN -LF -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ae -ae -ad -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(132,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ad -ad -ae -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ae -ad -ad -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(133,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(134,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ad -ad -ad -ad -ad -ae -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ae -ad -ad -ad -ad -ad -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(135,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ad -ad -ad -ad -ad -ae -ae -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ae -ae -ad -ad -ad -ad -ad -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(136,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ad -ad -ad -ad -ad -ad -ae -aa -aa -aa -aa -aa -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -aa -aa -aa -aa -aa -ae -ad -ad -ad -ad -ad -ad -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(137,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -aa -aa -aa -aa -aa -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -aa -aa -aa -aa -aa -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -Ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(138,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -aa -aa -aa -aa -aa -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -aa -aa -aa -aa -aa -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(139,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -aa -aa -aa -aa -aa -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -aa -aa -aa -aa -aa -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(140,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -aa -aa -aa -aa -aa -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -aa -aa -aa -aa -aa -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(141,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -aa -aa -aa -aa -aa -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -aa -aa -aa -aa -aa -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(142,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -aa -aa -aa -aa -aa -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -aa -aa -aa -aa -aa -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(143,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(144,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(145,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(146,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(147,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(148,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(149,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(150,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(151,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(152,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(153,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(154,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -zb -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(155,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(156,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(157,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(158,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(159,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(160,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(161,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(162,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(163,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(164,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(165,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(166,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(167,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(168,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(169,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(170,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(171,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(172,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(173,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(174,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(175,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(176,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(177,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(178,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(179,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(180,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(181,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(182,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(183,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(184,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(185,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(186,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(187,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(188,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(189,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(190,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(191,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(192,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(193,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(194,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(195,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(196,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(197,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(198,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(199,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(200,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} diff --git a/maps/torch/torch_announcements.dm b/maps/torch/torch_announcements.dm deleted file mode 100644 index 94d1aab19503a..0000000000000 --- a/maps/torch/torch_announcements.dm +++ /dev/null @@ -1,40 +0,0 @@ -/datum/map/torch - emergency_shuttle_docked_message = "Внимание всему экипажу: спасательные капсулы разблокированы. У вас есть %ETD% чтобы занять места в спасательных капсулах." - emergency_shuttle_leaving_dock = "Внимание всему экипажу: активация двигателей спасательных капсул. Расчетное время прибытия до пункта встречи шлюпок: %ETA%." - - emergency_shuttle_called_message = "Внимание всему экипажу: получен запрос аварийной эвакуации судна. Спасательные капсулы разблокируются через: %ETA%" - emergency_shuttle_called_sound = sound('sound/AI/torch/abandonship.ogg', volume = 45) - - emergency_shuttle_recall_message = "Внимание всему экипажу: аварийная эвакуации отменена. Возвращайтесь к выполнению своих рабочих обязанностей." - - command_report_sound = sound('sound/AI/torch/commandreport.ogg', volume = 45) - - grid_check_message = "Обнаружены отклонения в работе энергосети %STATION_NAME%. Энергосеть аварийно отключена для полной калибровки. Пожалуйста, ожидайте." - grid_check_sound = sound('sound/AI/torch/poweroff.ogg', volume = 45) - - grid_restored_message = "Накопители энергии %STATION_NAME% были заряжены из аварийного хранилища." - grid_restored_sound = sound('sound/AI/torch/poweron.ogg', volume = 45) - - meteor_detected_sound = sound('sound/AI/torch/meteors.ogg', volume = 45) - - radiation_detected_message = "Зафиксировано повышение уровня радиации поблизости %STATION_NAME%. Всему экипажу настоятельно рекомендуется пройти в технические туннели." - radiation_detected_sound = sound('sound/AI/torch/radiation.ogg', volume = 45) - - space_time_anomaly_sound = sound('sound/AI/torch/spanomalies.ogg', volume = 45) - - unknown_biological_entities_message = "Неизвестные биологические существа обнаружены в космическом пространстве %STATION_NAME%. Пожалуйста, ожидайте." - - unidentified_lifesigns_message = "Обнаружена неопознанная форма жизни на борту %STATION_NAME%. Настоятельно рекомендуется заблокировать все внешние шлюзы." - unidentified_lifesigns_sound = sound('sound/AI/torch/aliens.ogg', volume = 45) - - lifesign_spawn_sound = sound('sound/AI/torch/aliens.ogg', volume = 45) - - electrical_storm_moderate_sound = sound('sound/AI/torch/electricalstormmoderate.ogg', volume = 45) - electrical_storm_major_sound = sound('sound/AI/torch/electricalstormmajor.ogg', volume = 45) - -/datum/map/torch/level_x_biohazard_sound(var/bio_level) - switch(bio_level) - if(7) - return sound('sound/AI/torch/outbreak7.ogg', volume = 45) - else - return sound('sound/AI/torch/outbreak5.ogg', volume = 45) diff --git a/maps/torch/torch_antagonism.dm b/maps/torch/torch_antagonism.dm deleted file mode 100644 index 0f7a1d7b4f8b5..0000000000000 --- a/maps/torch/torch_antagonism.dm +++ /dev/null @@ -1,62 +0,0 @@ -//Makes sure we don't get any merchant antags as a balance concern. Can also be used for future Torch specific antag restrictions. -/datum/antagonist/changeling - blacklisted_jobs = list(/datum/job/ai, /datum/job/cyborg, /datum/job/merchant, /datum/job/captain, /datum/job/hop, /datum/job/submap, /datum/job/synthetic) - protected_jobs = list(/datum/job/medical_trainee, /datum/job/engineer_trainee, /datum/job/junior_doctor, /datum/job/research_guard) - -/datum/antagonist/godcultist - blacklisted_jobs = list(/datum/job/ai, /datum/job/cyborg, /datum/job/chaplain, /datum/job/merchant, /datum/job/captain, /datum/job/hop, /datum/job/hos, /datum/job/submap, /datum/job/synthetic) - protected_jobs = list(/datum/job/medical_trainee, /datum/job/engineer_trainee, /datum/job/junior_doctor) - -/datum/antagonist/cultist - blacklisted_jobs = list(/datum/job/ai, /datum/job/cyborg, /datum/job/chaplain, /datum/job/psychiatrist, /datum/job/merchant, /datum/job/captain, /datum/job/hop, /datum/job/hos, /datum/job/submap, /datum/job/synthetic) - protected_jobs = list(/datum/job/medical_trainee, /datum/job/engineer_trainee, /datum/job/junior_doctor, /datum/job/research_guard) - -/datum/antagonist/loyalists - blacklisted_jobs = list(/datum/job/ai, /datum/job/cyborg, /datum/job/submap, /datum/job/merchant) - protected_jobs = list(/datum/job/officer, /datum/job/medical_trainee, /datum/job/engineer_trainee, /datum/job/junior_doctor) - -/datum/antagonist/revolutionary - blacklisted_jobs = list(/datum/job/ai, /datum/job/cyborg, /datum/job/submap, /datum/job/merchant, /datum/job/synthetic) - restricted_jobs = list(/datum/job/captain, /datum/job/hop) - protected_jobs = list(/datum/job/officer, /datum/job/medical_trainee, /datum/job/engineer_trainee, /datum/job/junior_doctor, /datum/job/research_guard) - -/datum/antagonist/traitor - blacklisted_jobs = list(/datum/job/merchant, /datum/job/captain, /datum/job/hop, /datum/job/ai, /datum/job/submap, /datum/job/hos, /datum/job/medical_trainee, /datum/job/engineer_trainee, /datum/job/junior_doctor, /datum/job/research_guard, /datum/job/synthetic) - -/datum/antagonist/ert - var/sic //Second-In-Command - leader_welcome_text = "As leader of the Emergency Response Team, you are part of the Sol Central Government Fleet, and are there with the intention of restoring normal operation to the vessel or the safe evacuation of crew and passengers. You should, to this effect, aid the Commanding Officer or ranking officer aboard in their endeavours to achieve this." - -/datum/antagonist/ert/equip(var/mob/living/carbon/human/player) - - if(!..()) - return 0 - - player.char_branch = GLOB.mil_branches.get_branch("Fleet") - if(player.mind == leader) - player.char_rank = GLOB.mil_branches.get_rank("Fleet", "Lieutenant") - else if(!sic) - sic = player.mind - player.char_rank = GLOB.mil_branches.get_rank("Fleet", "Chief Petty Officer") - else if(prob(50)) - player.char_rank = GLOB.mil_branches.get_rank("Fleet", "Petty Officer Second Class") - else - player.char_rank = GLOB.mil_branches.get_rank("Fleet", "Petty Officer First Class") - - var/decl/hierarchy/outfit/ert_outfit = outfit_by_type((player.mind == leader) ? /decl/hierarchy/outfit/job/torch/ert/leader : /decl/hierarchy/outfit/job/torch/ert) - ert_outfit.equip(player) - - if(player.char_rank && player.char_rank.accessory) - for(var/accessory_path in player.char_rank.accessory) - var/list/accessory_data = player.char_rank.accessory[accessory_path] - if(islist(accessory_data)) - var/amt = accessory_data[1] - var/list/accessory_args = accessory_data.Copy() - accessory_args[1] = src - for(var/i in 1 to amt) - player.equip_to_slot_or_del(new accessory_path(arglist(accessory_args)), slot_tie) - else - for(var/i in 1 to (isnull(accessory_data)? 1 : accessory_data)) - player.equip_to_slot_or_del(new accessory_path(src), slot_tie) - - return 1 diff --git a/maps/torch/torch_areas.dm b/maps/torch/torch_areas.dm deleted file mode 100644 index fa1824f75c80d..0000000000000 --- a/maps/torch/torch_areas.dm +++ /dev/null @@ -1,1780 +0,0 @@ -/datum/map/torch - - base_floor_type = /turf/simulated/floor/reinforced/airless - base_floor_area = /area/torchexterior - - post_round_safe_areas = list ( - /area/centcom, - /area/shuttle/escape/centcom, - /area/shuttle/escape_pod1/centcom, - /area/shuttle/escape_pod2/centcom, - /area/shuttle/escape_pod3/centcom, - /area/shuttle/escape_pod5/centcom, - /area/shuttle/transport1/centcom, - /area/shuttle/administration/centcom, - /area/shuttle/specops/centcom, - ) - -//Fifth Deck (Z-0) -/area/hallway/primary/fifthdeck/fore - name = "\improper Fifth Deck Fore Hallway" - icon_state = "hallF" - -/area/hallway/primary/fifthdeck/aft - name = "\improper Fifth Deck Aft Hallway" - icon_state = "hallA" - -/area/maintenance/fifthdeck - name = "Fifth Deck Maintenance" - icon_state = "maintcentral" - -/area/maintenance/fifthdeck/aftport - name = "Fifth Deck Aft Port Maintenance" - icon_state = "apmaint" - -/area/maintenance/fifthdeck/aftstarboard - name = "Fifth Deck Aft Starboard Maintenance" - icon_state = "asmaint" - -/area/maintenance/fifthdeck/fore - name = "Fifth Deck Fore Maintenance" - icon_state = "fmaint" - -/area/maintenance/substation/fifthdeck - name = "Fifth Deck Substation" - -//Fourth Deck (Z-1) -/area/hallway/primary/fourthdeck/fore - name = "\improper Fourth Deck Fore Hallway" - icon_state = "hallF" - -/area/hallway/primary/fourthdeck/center - name = "\improper Fourth Deck Central Hallway" - icon_state = "hallC3" - -/area/hallway/primary/fourthdeck/aft - name = "\improper Fourth Deck Aft Hallway" - icon_state = "hallA" - -/area/maintenance/fourthdeck - name = "Fourth Deck Maintenance" - icon_state = "maintcentral" - -/area/maintenance/fourthdeck/aft - name = "Fourth Deck Aft Maintenance" - icon_state = "amaint" - -/area/maintenance/fourthdeck/foreport - name = "Fourth Deck Fore Port Maintenance" - icon_state = "fpmaint" - -/area/maintenance/fourthdeck/forestarboard - name = "Fourth Deck Fore Starboard Maintenance" - icon_state = "fsmaint" - -/area/maintenance/fourthdeck/starboard - name = "Fourth Deck Starboard Maintenance" - icon_state = "smaint" - -/area/maintenance/fourthdeck/port - name = "Fourth Deck Port Maintenance" - icon_state = "pmaint" - -/area/teleporter/fourthdeck - name = "\improper Fourth Deck Teleporter" - icon_state = "teleporter" - -/area/maintenance/substation/fourthdeck - name = "Fourth Deck Substation" - -//Third Deck (Z-2) -/area/hallway/primary/thirddeck/fore - name = "\improper Third Deck Fore Hallway" - icon_state = "hallF" - -/area/hallway/primary/thirddeck/center - name = "\improper Third Deck Central Hallway" - icon_state = "hallC3" - -/area/hallway/primary/thirddeck/aft - name = "\improper Third Deck Aft Hallway" - icon_state = "hallA" - -/area/maintenance/thirddeck - name = "Third Deck Maintenance" - icon_state = "maintcentral" - -/area/maintenance/thirddeck/foreport - name = "Third Deck Fore Port Maintenance" - icon_state = "fpmaint" - -/area/maintenance/thirddeck/forestarboard - name = "Third Deck Fore Starboard Maintenance" - icon_state = "fsmaint" - -/area/maintenance/thirddeck/starboard - name = "Third Deck Starboard Maintenance" - icon_state = "smaint" - -/area/maintenance/thirddeck/port - name = "Third Deck Port Maintenance" - icon_state = "pmaint" - -/area/maintenance/thirddeck/aftstarboard - name = "Third Deck Aft Starboard Maintenance" - icon_state = "asmaint" - -/area/maintenance/thirddeck/aftport - name = "Third Deck Aft Port Maintenance" - icon_state = "apmaint" - -/area/teleporter/thirddeck - name = "\improper Third Deck Teleporter" - icon_state = "teleporter" - -/area/maintenance/substation/thirddeck - name = "Third Deck Substation" - -/area/crew_quarters/safe_room - area_flags = AREA_FLAG_RAD_SHIELDED | AREA_FLAG_ION_SHIELDED - -/area/crew_quarters/safe_room/thirddeck - name = "\improper Third Deck Safe Room" - -/area/crew_quarters/laundry - name = "\improper Laundry Room" - icon_state = "Sleep" - -//Second Deck (Z-3) -/area/maintenance/seconddeck - name = "Second Deck Maintenance" - icon_state = "maintcentral" - -/area/maintenance/seconddeck/aftstarboard - name = "Second Deck Aft Starboard Maintenance" - icon_state = "asmaint" - -/area/maintenance/seconddeck/aftport - name = "Second Deck Aft Port Maintenance" - icon_state = "apmaint" - -/area/maintenance/seconddeck/foreport - name = "Second Deck Fore Port Maintenance" - icon_state = "fpmaint" - -/area/maintenance/seconddeck/forestarboard - name = "Second Deck Fore Starboard Maintenance" - icon_state = "fsmaint" - -/area/maintenance/seconddeck/central - name = "Second Deck Central Maintenance" - icon_state = "maintcentral" - -/area/hallway/primary/seconddeck - name = "Second Deck Central Hallway" - icon_state = "hallC2" - -/area/hallway/primary/seconddeck/center - name = "\improper Second Deck Stairwell" - -/area/hallway/primary/seconddeck/elevator - name = "Second Deck Elevator Landing" - icon_state = "hallC2_e" - -/area/hallway/primary/seconddeck/fore - name = "Second Deck Fore Hallway" - icon_state = "hallF2" - -/area/teleporter/seconddeck - name = "\improper Second Deck Teleporter" - icon_state = "teleporter" - -/area/maintenance/substation/seconddeck - name = "Second Deck Substation" - -//First Deck (Z-4) -/area/maintenance/firstdeck - name = "First Deck Maintenance" - icon_state = "maintcentral" - -/area/maintenance/firstdeck/aftstarboard - name = "First Deck Aft Starboard Maintenance" - icon_state = "asmaint" - -/area/maintenance/firstdeck/aftport - name = "First Deck Aft Port Maintenance" - icon_state = "apmaint" - -/area/maintenance/firstdeck/forestarboard - name = "First Deck Fore Starboard Maintenance" - icon_state = "fsmaint" - -/area/maintenance/firstdeck/foreport - name = "First Deck Fore Port Maintenance" - icon_state = "fpmaint" - -/area/maintenance/firstdeck/centralstarboard - name = "First Deck Starboard Maintenance" - icon_state = "smaint" - -/area/maintenance/firstdeck/centralport - name = "First Deck Port Maintenance" - icon_state = "pmaint" - -/area/teleporter/firstdeck - name = "\improper First Deck Teleporter" - icon_state = "teleporter" - -/area/hallway/primary/firstdeck/fore - name = "\improper First Deck Fore Hallway" - icon_state = "hallF" - -/area/hallway/primary/firstdeck/center - name = "\improper First Deck Central Hallway" - icon_state = "hallC1" - -/area/hallway/primary/firstdeck/aft - name = "\improper First Deck Aft Hallway" - icon_state = "hallA" - -/area/crew_quarters/safe_room/firstdeck - name = "\improper First Deck Safe Room" - -/area/crew_quarters/safe_room/medical - name = "\improper Medical Safe Room" - -/area/maintenance/substation/firstdeck // First Deck (Z-4) - name = "First Deck Substation" - -//Bridge (Z-5) -/area/maintenance/bridge - name = "Bridge Maintenance" - icon_state = "maintcentral" - -/area/maintenance/bridge/aftstarboard - name = "Bridge Aft Starboard Maintenance" - icon_state = "asmaint" - -/area/maintenance/bridge/aftport - name = "Bridge Aft Port Maintenance" - icon_state = "apmaint" - -/area/maintenance/bridge/forestarboard - name = "Bridge Fore Starboard Maintenance" - icon_state = "fsmaint" - -/area/maintenance/bridge/foreport - name = "Bridge Fore Port Maintenance" - icon_state = "fpmaint" - -/area/hallway/primary/bridge/fore - name = "\improper Bridge Fore Hallway" - icon_state = "hallF" - -/area/hallway/primary/bridge/aft - name = "\improper Bridge Aft Hallway" - icon_state = "hallA" - -/area/maintenance/substation/bridge // First Deck (Z-4) - name = "Bridge Substation" - -/area/crew_quarters/safe_room/bridge - name = "\improper Bridge Safe Room" - -/area/bridge/storage - name = "\improper Bridge Storage" - req_access = list(access_bridge) - -// Shuttles -/area/shuttle/transport1/centcom - icon_state = "shuttle" - name = "\improper Transport Shuttle Centcom" - -//torch large pods -/area/shuttle/escape_pod6/station - holomap_color = HOLOMAP_AREACOLOR_ESCAPE - name = "Escape Pod One" - area_flags = AREA_FLAG_RAD_SHIELDED | AREA_FLAG_ION_SHIELDED | AREA_FLAG_IS_NOT_PERSISTENT - -/area/shuttle/escape_pod7/station - holomap_color = HOLOMAP_AREACOLOR_ESCAPE - name = "Escape Pod Two" - area_flags = AREA_FLAG_RAD_SHIELDED | AREA_FLAG_ION_SHIELDED | AREA_FLAG_IS_NOT_PERSISTENT - -/area/shuttle/escape_pod8/station - holomap_color = HOLOMAP_AREACOLOR_ESCAPE - name = "Escape Pod Three" - area_flags = AREA_FLAG_RAD_SHIELDED | AREA_FLAG_ION_SHIELDED | AREA_FLAG_IS_NOT_PERSISTENT - -/area/shuttle/escape_pod9/station - holomap_color = HOLOMAP_AREACOLOR_ESCAPE - name = "Escape Pod Four" - area_flags = AREA_FLAG_RAD_SHIELDED | AREA_FLAG_ION_SHIELDED | AREA_FLAG_IS_NOT_PERSISTENT - -/area/shuttle/escape_pod10/station - holomap_color = HOLOMAP_AREACOLOR_ESCAPE - name = "Escape Pod Five" - area_flags = AREA_FLAG_RAD_SHIELDED | AREA_FLAG_ION_SHIELDED | AREA_FLAG_IS_NOT_PERSISTENT - -/area/shuttle/escape_pod11/station - name = "Escape Pod Six" - area_flags = AREA_FLAG_RAD_SHIELDED | AREA_FLAG_ION_SHIELDED | AREA_FLAG_IS_NOT_PERSISTENT - holomap_color = HOLOMAP_AREACOLOR_ESCAPE - -//torch small pods -/area/shuttle/escape_pod12/station - name = "Escape Pod Seven" - area_flags = AREA_FLAG_RAD_SHIELDED | AREA_FLAG_ION_SHIELDED | AREA_FLAG_IS_NOT_PERSISTENT - holomap_color = HOLOMAP_AREACOLOR_ESCAPE - -/area/shuttle/escape_pod13/station - name = "Escape Pod Eight" - area_flags = AREA_FLAG_RAD_SHIELDED | AREA_FLAG_ION_SHIELDED | AREA_FLAG_IS_NOT_PERSISTENT - holomap_color = HOLOMAP_AREACOLOR_ESCAPE - -/area/shuttle/escape_pod15/station - name = "Escape Pod Ten" - area_flags = AREA_FLAG_RAD_SHIELDED | AREA_FLAG_ION_SHIELDED | AREA_FLAG_IS_NOT_PERSISTENT - holomap_color = HOLOMAP_AREACOLOR_ESCAPE - -/area/shuttle/escape_pod16/station - name = "Escape Pod Eleven" - area_flags = AREA_FLAG_RAD_SHIELDED | AREA_FLAG_ION_SHIELDED | AREA_FLAG_IS_NOT_PERSISTENT - holomap_color = HOLOMAP_AREACOLOR_ESCAPE - -/area/shuttle/escape_pod17/station - name = "Escape Pod Twelve" - area_flags = AREA_FLAG_RAD_SHIELDED | AREA_FLAG_ION_SHIELDED | AREA_FLAG_IS_NOT_PERSISTENT - holomap_color = HOLOMAP_AREACOLOR_ESCAPE - -//Charon - -/area/exploration_shuttle - name = "\improper Charon" - icon_state = "shuttlered" - base_turf = /turf/simulated/floor/plating - area_flags = AREA_FLAG_RAD_SHIELDED | AREA_FLAG_ION_SHIELDED | AREA_FLAG_HIDE_FROM_HOLOMAP - base_turf_special_handling = TRUE - -/area/exploration_shuttle/cockpit - name = "\improper Charon - Cockpit" - req_access = list(access_expedition_shuttle) - -/area/exploration_shuttle/atmos - name = "\improper Charon - Atmos Compartment" - -/area/exploration_shuttle/power - name = "\improper Charon - Power Compartment" - -/area/exploration_shuttle/crew - name = "\improper Charon - Crew Compartment" - -/area/exploration_shuttle/cargo - name = "\improper Charon - Cargo Bay" - -/area/exploration_shuttle/airlock - name = "\improper Charon - Airlock Compartment" - -/area/exploration_shuttle/fuel - name = "\improper Charon - Fuel Compartment" - -/area/exploration_shuttle/medical - name = "\improper Charon - Medical Compartment" - -//Aquila - -/area/aquila - name = "\improper SEV Aquila" - icon_state = "shuttlered" - base_turf = /turf/simulated/floor/reinforced/airless - requires_power = 1 - dynamic_lighting = 1 - area_flags = AREA_FLAG_RAD_SHIELDED | AREA_FLAG_ION_SHIELDED | AREA_FLAG_HIDE_FROM_HOLOMAP - base_turf_special_handling = TRUE - -/area/aquila/cockpit - name = "\improper SEV Aquila - Cockpit" - req_access = list(access_aquila) - -/area/aquila/power - name = "\improper SEV Aquila - Engineering Compartment" - req_access = list(access_solgov_crew) - -/area/aquila/storage - name = "\improper SEV Aquila - Storage Bay" - req_access = list(access_solgov_crew) - -/area/aquila/suits - name = "\improper SEV Aquila - Suit Storage Compartment" - req_access = list(access_aquila) - -/area/aquila/air - name = "\improper SEV Aquila - Life Support Compartment" - -/area/aquila/crew - name = "\improper SEV Aquila - Crew Compartment" - -/area/aquila/medical - name = "\improper SEV Aquila - Medical Compartment" - lighting_tone = AREA_LIGHTING_COOL - -/area/aquila/airlock - name = "\improper SEV Aquila - Airlock Compartment" - req_access = list(access_solgov_crew) - -//Guppy - -/area/guppy_hangar/start - name = "\improper Guppy" - icon_state = "shuttlered" - requires_power = 1 - dynamic_lighting = 1 - area_flags = AREA_FLAG_RAD_SHIELDED | AREA_FLAG_ION_SHIELDED | AREA_FLAG_HIDE_FROM_HOLOMAP - req_access = list(access_guppy) - base_turf_special_handling = TRUE - - -//Petrov - -/area/shuttle/petrov - name = "\improper SRV Petrov" - requires_power = 1 - dynamic_lighting = 1 - area_flags = AREA_FLAG_RAD_SHIELDED | AREA_FLAG_ION_SHIELDED - req_access = list(access_petrov) - lighting_tone = AREA_LIGHTING_COOL - -/area/shuttle/petrov/cell1 - name = "\improper SRV Petrov - Isolation Cell 1" - icon_state = "shuttle" -/area/shuttle/petrov/cell2 - name = "\improper SRV Petrov - Isolation Cell 2" - icon_state = "shuttlegrn" -/area/shuttle/petrov/cell3 - name = "\improper SRV Petrov - Isolation Cell 3" - icon_state = "shuttle" - -/area/shuttle/petrov/hallwaya - name = "\improper SRV Petrov - Lower Hallway" - icon_state = "hallA" - -/area/shuttle/petrov/control - name = "\improper SRV Petrov - Control Room" - icon_state = "checkpoint1" - req_access = list(access_petrov_control) - -/area/shuttle/petrov/rd - icon_state = "heads_rd" - name = "\improper SRV Petrov - CSO's Office" - icon_state = "head_quarters" - req_access = list(access_petrov_rd) - -/area/shuttle/petrov/cockpit - name = "\improper SRV Petrov - Cockpit" - icon_state = "shuttlered" - req_access = list(access_petrov_helm) - -/area/shuttle/petrov/maint - name = "\improper SRV Petrov - Maintenance" - icon_state = "engine" - req_access = list(access_petrov_maint) - lighting_tone = AREA_LIGHTING_DEFAULT - -/area/shuttle/petrov/analysis - name = "\improper SRV Petrov - Analysis Lab" - icon_state = "devlab" - req_access = list(access_petrov_analysis) - -/area/shuttle/petrov/toxins - name = "\improper SRV Petrov - Toxins Lab" - icon_state = "toxstorage" - req_access = list(access_petrov_toxins) - -/area/shuttle/petrov/rnd - name = "\improper SRV Petrov - Fabricator Lab" - icon_state = "devlab" - -/area/shuttle/petrov/isolation - name = "\improper SRV Petrov - Isolation Lab" - icon_state = "xeno_lab" - -/area/shuttle/petrov/phoron - name = "\improper SRV Petrov - Sublimation Lab" - icon_state = "toxstorage" - req_access = list(access_petrov_phoron) - -/area/shuttle/petrov/custodial - name = "\improper SRV Petrov - Custodial" - icon_state = "decontamination" - lighting_tone = AREA_LIGHTING_DEFAULT - -/area/shuttle/petrov/equipment - name = "\improper SRV Petrov - Equipment Storage" - icon_state = "locker" - -/area/shuttle/petrov/eva - name = "\improper SRV Petrov - EVA Storage" - icon_state = "locker" - -//Turbolift -/area/turbolift - name = "\improper Turbolift" - icon_state = "shuttle" - requires_power = 0 - dynamic_lighting = 1 - area_flags = AREA_FLAG_RAD_SHIELDED | AREA_FLAG_ION_SHIELDED - req_access = list(access_maint_tunnels) - -/area/turbolift/start - name = "\improper Turbolift Start" - -/area/turbolift/bridge - name = "\improper bridge" - base_turf = /turf/simulated/open - -/area/turbolift/firstdeck - name = "\improper first deck" - base_turf = /turf/simulated/open - -/area/turbolift/seconddeck - name = "\improper second deck" - base_turf = /turf/simulated/open - -/area/turbolift/thirddeck - name = "\improper third deck" - base_turf = /turf/simulated/open - -/area/turbolift/fourthdeck - name = "\improper fourth deck" - base_turf = /turf/simulated/floor/plating - -/area/turbolift/cargo_lift - name = "\improper Cargo Lift" - icon_state = "shuttle3" - base_turf = /turf/simulated/open - -/area/turbolift/robotics_lift - name = "\improper Robotics Lift" - icon_state = "shuttle3" - base_turf = /turf/simulated/open - -/area/turbolift/medical_lift - name = "\improper Medical Lift" - icon_state = "shuttle3" - base_turf = /turf/simulated/open - lighting_tone = AREA_LIGHTING_COOL - -//Merchant - -/area/shuttle/merchant/home - name = "\improper Merchant Vessel" - icon_state = "shuttlegrn" - req_access = list(access_merchant) - area_flags = AREA_FLAG_RAD_SHIELDED | AREA_FLAG_ION_SHIELDED - -// Elevator areas. -/area/turbolift/torch_top - name = "lift (bridge)" - lift_floor_label = "Bridge" - lift_floor_name = "Bridge" - lift_announce_str = "Arriving at Command Deck: Bridge. Meeting Room. Command Offices. AI Core. Auxiliary Hangar. Auxiliary EVA." - -/area/turbolift/torch_fourth - name = "lift (first deck)" - lift_floor_label = "Deck 1" - lift_floor_name = "Operations Deck" - lift_announce_str = "Arriving at Operations Deck: Infirmary. Security Wing. Research Wing. Auxiliary Cryogenic Storage. Emergency Armory." - -/area/turbolift/torch_third - name = "lift (second deck)" - lift_floor_label = "Deck 2" - lift_floor_name = "Maintenance Deck" - lift_announce_str = "Arriving at Maintenance Deck: Engineering. Atmospherics. Storage." - -/area/turbolift/torch_second - name = "lift (third deck)" - lift_floor_label = "Deck 3" - lift_floor_name = "Habitation Deck" - lift_announce_str = "Arriving at Habitation Deck: Telecommunications. Mess Hall. Officer's Mess. Lounge. Observation. Hydroponics. Cryogenic Storage. Holodeck. Gym." - -/area/turbolift/torch_first - name = "lift (fourth deck)" - lift_floor_label = "Deck 4" - lift_floor_name = "Supply Deck" - lift_announce_str = "Arriving at Supply Deck: EVA. Docking Ports. Pathfinder's Office. Cargo Storage. Supply Office. Laundry. Sanitation." - -/area/turbolift/torch_ground - name = "lift (fifth deck)" - lift_floor_label = "Deck 5" - lift_floor_name = "Hangar Deck" - lift_announce_str = "Arriving at Hangar Deck: Main Hangar. Supply Warehouse. Expedition Preparation. Mineral Processing." - base_turf = /turf/simulated/floor - -// Command -/area/command - holomap_color = HOLOMAP_AREACOLOR_COMMAND - -/area/command/conference - name = "Briefing Room" - icon_state = "briefing_room" - sound_env = MEDIUM_SOFTFLOOR - -/area/command/captainmess - name = "Officer's Mess" - icon_state = "bar" - sound_env = MEDIUM_SOFTFLOOR - lighting_tone = AREA_LIGHTING_WARM - -/area/command/pathfinder - name = "\improper Pathfinder's Office" - icon_state = "pathfinder_office" - sound_env = MEDIUM_SOFTFLOOR - req_access = list(access_pathfinder) - holomap_color = HOLOMAP_AREACOLOR_EXPLORATION - -/area/command/pilot - name = "\improper Pilot's Lounge" - icon_state = "pilot_lounge" - sound_env = MEDIUM_SOFTFLOOR - req_access = list(access_pilot) - holomap_color = HOLOMAP_AREACOLOR_EXPLORATION - -/area/command/armoury - name = "\improper Emergency Armory" - icon_state = "Warden" - req_access = list(list(access_bridge, access_emergency_armory)) - -/area/command/armoury/access - name = "\improper Emergency Armory - Access" - -/area/command/armoury/tactical - name = "\improper Emergency Armory - Tactical" - icon_state = "Tactical" - req_access = list(access_emergency_armory) - -/area/command/disperser - name = "\improper Obstruction Field Disperser" - icon_state = "disperser" - req_access = list(access_bridge) - -/area/crew_quarters/heads - icon_state = "heads" - req_access = list(access_heads) - -/area/crew_quarters/heads/cobed - icon_state = "heads_cap" - name = "\improper Command - CO's Quarters" - sound_env = MEDIUM_SOFTFLOOR - req_access = list(access_captain) - lighting_tone = AREA_LIGHTING_WARM - -/area/crew_quarters/heads/office/co - icon_state = "heads_cap" - name = "\improper Command - CO's Office" - sound_env = MEDIUM_SOFTFLOOR - req_access = list(access_captain) - lighting_tone = AREA_LIGHTING_WARM - -/area/crew_quarters/heads/office/xo - icon_state = "heads_hop" - name = "\improper Command - XO's Office" - req_access = list(access_hop) - lighting_tone = AREA_LIGHTING_WARM - -/area/crew_quarters/heads/office/rd - icon_state = "heads_rd" - name = "\improper Command - CSO's Office" - req_access = list(access_rd) - lighting_tone = AREA_LIGHTING_COOL - -/area/crew_quarters/heads/office/cmo - icon_state = "heads_cmo" - name = "\improper Command - CMO's Office" - req_access = list(access_cmo) - lighting_tone = AREA_LIGHTING_COOL - -/area/crew_quarters/heads/office/ce - icon_state = "heads_ce" - name = "\improper Engineering - CE's Office" - req_access = list(access_ce) - -/area/crew_quarters/heads/office/cos - icon_state = "heads_hos" - name = "\improper Command - CoS' Office" - req_access = list(access_hos) - -/area/crew_quarters/heads/office/cl - icon_state = "heads_cl" - name = "\improper Command - CL's Office" - req_access = list(access_liaison) - lighting_tone = AREA_LIGHTING_WARM - -/area/crew_quarters/heads/office/cl/backroom - icon_state = "heads_cl" - name = "\improper Command - CL's Backroom" - req_access = list(access_liaison) - -/area/crew_quarters/heads/office/sgr - icon_state = "heads_sr" - name = "\improper Command - SCGR's Office" - req_access = list(access_representative) - lighting_tone = AREA_LIGHTING_WARM - -/area/crew_quarters/heads/office/sea - icon_state = "heads_sea" - name = "\improper Command - SEA's Office" - req_access = list(access_senadv) - -// Engineering -/area/engineering/shieldbay - name = "Shield Bay" - icon_state = "engineering" - req_access = list(access_engine, access_engine_equip) - -/area/engineering/bluespace - name = "Bluespace Drive Containment" - icon_state = "engineering" - color = COLOR_BLUE_LIGHT - req_access = list(list(access_engine_equip, access_heads), access_engine, access_maint_tunnels) - -/area/engineering/atmos/aux - name = "\improper Auxiliary Atmospherics" - icon_state = "atmos" - sound_env = SMALL_ENCLOSED - req_access = list(access_atmospherics) - -/area/engineering/auxpower - name = "\improper Auxiliary Power Storage" - icon_state = "engine_smes" - sound_env = SMALL_ENCLOSED - req_access = list(access_engine_equip) - -/area/engineering/hardstorage - name = "\improper Engineering Hard Storage" - icon_state = "engineering_storage" - sound_env = SMALL_ENCLOSED - req_access = list(access_engine_equip) - -/area/engineering/hardstorage/aux - name = "\improper Auxiliary Engineering Hard Storage" - icon_state = "engineering_storage" - -//Vacant Areas -/area/vacant - name = "\improper Vacant Area" - icon_state = "construction" - -/area/vacant/armory - name = "\improper Vacant Armory" - icon_state = "Tactical" - -/area/vacant/cabin - name = "\improper Vacant Cabins" - icon_state = "crew_quarters" - -/area/vacant/mess - name = "\improper Old Mess" - icon_state = "bar" - lighting_tone = AREA_LIGHTING_WARM - -/area/vacant/chapel - name = "\improper Unused Chapel" - icon_state = "chapel" - -/area/vacant/infirmary - name = "\improper Auxiliary Infirmary" - icon_state = "medbay" - lighting_tone = AREA_LIGHTING_COOL - -/area/vacant/monitoring - name = "\improper Auxiliary Monitoring Room" - icon_state = "engine_monitoring" - -/area/vacant/prototype - req_access = list(access_engine) - -/area/vacant/prototype/control - name = "\improper Prototype Fusion Reactor Control Room" - icon_state = "engine_monitoring" - -/area/vacant/prototype/engine - name = "\improper Prototype Fusion Reactor Chamber" - icon_state = "rust_reactor" - -/area/vacant/cargo - name = "\improper Requisitions Office" - icon_state = "quart" - holomap_color = HOLOMAP_AREACOLOR_CARGO - -/area/vacant/brig - name = "\improper Permanent Brig" - icon_state = "brig" - holomap_color = HOLOMAP_AREACOLOR_SECURITY - -/area/vacant/bar - name = "\improper Hidden Bar" - icon_state = "bar" - lighting_tone = AREA_LIGHTING_WARM - -// Storage -/area/storage/auxillary - req_access = list(access_cargo) - -/area/storage/auxillary/port - name = "Port Auxillary Storage" - icon_state = "auxstorage" - -/area/storage/auxillary/starboard - name = "Starboard Auxillary Storage" - icon_state = "auxstorage" - -/area/storage/cargo - name = "Cargo Storage" - icon_state = "quartstorage" - sound_env = SMALL_ENCLOSED - req_access = list(access_cargo) - holomap_color = HOLOMAP_AREACOLOR_CARGO - -/area/storage/medical - name = "Medical Storage" - icon_state = "medbay4" - sound_env = SMALL_ENCLOSED - req_access = list(access_medical) - lighting_tone = AREA_LIGHTING_COOL - holomap_color = HOLOMAP_AREACOLOR_MEDICAL - -/area/storage/research - name = "Research Storage" - icon_state = "toxstorage" - sound_env = SMALL_ENCLOSED - req_access = list(access_research) - lighting_tone = AREA_LIGHTING_COOL - holomap_color = HOLOMAP_AREACOLOR_SCIENCE - -// Supply - -/area/quartermaster - req_access = list(access_cargo) - holomap_color = HOLOMAP_AREACOLOR_CARGO - -/area/quartermaster/office - name = "\improper Supply Office" - icon_state = "quartoffice" - -/area/quartermaster/storage - name = "\improper Supply Warehouse" - icon_state = "quartstorage" - sound_env = LARGE_ENCLOSED - -/area/quartermaster/sorting - name ="\improper Supply Sorting" - icon_state = "quartstorage" - -/area/quartermaster/storage/upper - name = "\improper Supply Upper Warehouse" - -/area/quartermaster/deckchief - name = "\improper Deck Chief's Office" - icon_state = "quart" - req_access = list(access_qm) - -/area/quartermaster/expedition - name = "\improper Expedition Preparation" - icon_state = "mining" - req_access = list(list(access_mining, access_nanotrasen, access_xenoarch)) - -/area/quartermaster/expedition/eva - name = "\improper Expedition EVA" - icon_state = "mining" - req_access = list(list(access_mining, access_xenoarch)) - -/area/quartermaster/expedition/storage - name = "\improper Hangar Expedition Storage" - icon_state = "mining" - req_access = list(list(access_mining, access_explorer, access_xenoarch)) - -/area/quartermaster/expedition/atmos - name = "\improper Hangar Atmospheric Storage" - icon_state = "mining" - req_access = list(list(access_mining, access_explorer, access_xenoarch)) - -/area/quartermaster/exploration - name = "\improper Exploration Equipment" - icon_state = "exploration" - req_access = list(list(access_explorer, access_pathfinder, access_pilot)) - holomap_color = HOLOMAP_AREACOLOR_EXPLORATION - -/area/quartermaster/shuttlefuel - name = "\improper Shuttle Fuel Bay" - icon_state = "toxstorage" - req_access = list(list(access_hangar, access_cargo)) - -/area/quartermaster/hangar - name = "\improper Hangar Deck" - icon_state = "hangar" - sound_env = LARGE_ENCLOSED - req_access = list(access_hangar) - -/area/quartermaster/hangar/catwalks_port - name = "\improper Hangar Port Upper Walkway" - req_access = list() - icon_state = "hangar_catwalk_p" - -/area/quartermaster/hangar/catwalks_starboard - name = "\improper Hangar Starboard Upper Walkway" - req_access = list() - icon_state = "hangar_catwalk_s" - -// Research -/area/rnd/canister - name = "\improper Canister Storage" - icon_state = "toxstorage" - req_access = list(access_tox_storage) - -/area/rnd/development - name = "\improper Fabricator Lab" - icon_state = "devlab" - -/area/rnd/office - name = "\improper Research Paperwork Office" - icon_state = "devlab" - -/area/rnd/entry - name = "\improper Research and Development Access" - icon_state = "decontamination" - req_access = list() - -/area/rnd/locker - name = "\improper Research Locker Room" - icon_state = "locker" - -/area/rnd/xenobiology/entry - name = "\improper Xenobiology Access" - icon_state = "xeno_lab" - req_access = list() // This is a separate vestibule thing, needs low access. - -// Crew areas -/area/crew_quarters - holomap_color = HOLOMAP_AREACOLOR_CREW - -/area/crew_quarters/bar - name = "\improper Bar" - icon_state = "bar" - sound_env = LARGE_SOFTFLOOR - req_access = list(access_kitchen) - lighting_tone = AREA_LIGHTING_WARM - -/area/crew_quarters/cryolocker - name = "\improper Cryogenic Storage Wardrobe" - icon_state = "locker" - -/area/crew_quarters/head - name = "\improper Third Deck Head" - icon_state = "toilet" - sound_env = SMALL_ENCLOSED - -/area/crew_quarters/head/aux - name = "\improper First Deck Head" - -/area/crew_quarters/head/sauna - name = "\improper Sauna" - icon_state = "sauna" - -/area/crew_quarters/gym - name = "\improper Gym" - icon_state = "fitness" - -/area/crew_quarters/mess - name = "\improper Mess Hall" - icon_state = "cafeteria" - lighting_tone = AREA_LIGHTING_WARM - -/area/crew_quarters/recreation - name = "\improper Recreation" - icon_state = "crew_quarters" - lighting_tone = AREA_LIGHTING_WARM - -/area/crew_quarters/observation - name = "\improper Observation" - icon_state = "fitness" - -/area/crew_quarters/galley - name = "\improper Galley" - icon_state = "kitchen" - req_access = list(access_kitchen) - lighting_tone = AREA_LIGHTING_COOL - -/area/crew_quarters/galleybackroom - name = "\improper Galley Cold Storage" - icon_state = "kitchen" - req_access = list(access_kitchen) - lighting_tone = AREA_LIGHTING_COOL - -/area/crew_quarters/commissary - name = "\improper Commissary" - icon_state = "crew_quarters" - req_access = list(access_commissary) - -/area/crew_quarters/lounge - name = "\improper Lounge" - icon_state = "crew_quarters" - sound_env = MEDIUM_SOFTFLOOR - lighting_tone = AREA_LIGHTING_WARM - -/area/crew_quarters/safe_room - name = "\improper Safe Room" - icon_state = "crew_quarters" - sound_env = SMALL_ENCLOSED - area_flags = AREA_FLAG_RAD_SHIELDED | AREA_FLAG_ION_SHIELDED - -/area/crew_quarters/sleep/bunk - name = "\improper Bunk Room" - icon_state = "Sleep" - sound_env = SMALL_SOFTFLOOR - area_flags = AREA_FLAG_RAD_SHIELDED | AREA_FLAG_ION_SHIELDED - lighting_tone = AREA_LIGHTING_WARM - -/area/crew_quarters/sleep/cryo/aux - name = "\improper First Deck Cryogenic Storage" - icon_state = "Sleep" - area_flags = AREA_FLAG_RAD_SHIELDED | AREA_FLAG_ION_SHIELDED - -/area/crew_quarters/adherent - name = "\improper Adherent Maintenence" - icon_state = "robotics" - -/area/crew_quarters/office - name = "\improper Computer Lab" - icon_state = "conference" - -/area/holocontrol - name = "\improper Holodeck Control" - icon_state = "Holodeck" - -/area/hydroponics/storage - name = "\improper Hydroponics Storage" - -// Tcomms -/area/tcommsat/storage - name = "\improper Telecoms Storage" - icon_state = "tcomsatstore" - -// Borg Upload ((now synth's storage -- evie)) - -/area/synth/borg_upload - name = "\improper Synthetic Storage" - icon_state = "ai_upload" - ambience = list('sound/ambience/ambimalf.ogg') - req_access = list(access_ai_upload) - -// Security - -/area/security/bo - name = "\improper Security - Brig Chief" - icon_state = "Warden" - req_access = list(access_armory) - -/area/security/storage - name = "\improper Security - Equipment Storage" - icon_state = "security" - req_access = list(access_brig) - -/area/security/armoury - name = "\improper Security - Armory" - icon_state = "Warden" - req_access = list(access_armory) - -/area/security/detectives_office - name = "\improper Security - Investigations Office" - icon_state = "detective" - sound_env = MEDIUM_SOFTFLOOR - req_access = list(access_forensics_lockers) - lighting_tone = AREA_LIGHTING_COOL - -/area/security/locker - name = "\improper Security - Locker Room" - icon_state = "security" - -/area/security/evidence - name = "\improper Security - Evidence Storage" - icon_state = "security" - -/area/security/processing - name = "\improper Security - Processing" - icon_state = "security" - -/area/security/questioning - name = "\improper Security - Interview Room" - icon_state = "security" - -/area/security/wing - name = "\improper Security Wing" - icon_state = "security" - -/area/security/bridgecheck - name = "\improper Bridge Deck Security Checkpoint" - icon_state = "checkpoint" - -//area/security/opscheck - //name = "\improper First Deck Security Checkpoint" - //icon_state = "checkpoint" unused - -/area/security/habcheck - name = "\improper Third Deck Security Checkpoint" - icon_state = "checkpoint" - -/area/security/hangcheck - name = "\improper Fourth Deck Security Checkpoint" - icon_state = "checkpoint" - -// AI -/area/turret_protected/ai_foyer - name = "\improper AI Chamber Foyer" - icon_state = "ai_foyer" - sound_env = SMALL_ENCLOSED - req_access = list(access_ai_upload) - -/area/turret_protected/ai_outer_chamber - name = "\improper Outer AI Chamber" - icon_state = "ai_chamber" - sound_env = SMALL_ENCLOSED - req_access = list(access_ai_upload) - -// Medbay - -/area/medical/equipstorage - name = "\improper Medical Equipment Storage" - icon_state = "medbay4" - ambience = list('sound/ambience/signal.ogg') - req_access = list(access_medical_equip) - -/area/medical/medicalhallway - name = "\improper Medical Public Hallway" - icon_state = "medbay" - -/area/medical/foyer - name = "\improper Medical Foyer" - icon_state = "medbay" - req_access = list(list(access_medical,access_morgue,access_forensics_lockers)) - -/area/medical/foyer/storeroom - name = "\improper Medical Storeroom" - icon_state = "medbay" - -/area/medical/locker - name = "\improper Medical Locker Room" - icon_state = "locker" - req_access = list(access_medical_equip) - -/area/medical/medpaperworkoffice - name = "\improper Medical Paperwork Office" - icon_state = "locker" - req_access = list(access_medical) - -/area/medical/washroom - name = "\improper Medical Washroom" - icon_state = "toilet" - sound_env = SMALL_ENCLOSED - req_access = list() - -/area/medical/counselor - name = "\improper Counselor's Office" - icon_state = "medbay3" - ambience = list('sound/ambience/signal.ogg') - req_access = list(access_psychiatrist) - sound_env = SMALL_SOFTFLOOR - -/area/medical/counselor/therapy - name = "\improper Counselor's Therapy Room" - icon_state = "medbay3" - lighting_tone = AREA_LIGHTING_WARM - -/area/medical/sleeper - name = "\improper Emergency Treatment Centre" - icon_state = "exam_room" - -/area/medical/surgery - name = "\improper Operating Theatre 1" - icon_state = "surgery" - req_access = list(access_surgery) - -/area/medical/surgery2 - name = "\improper Operating Theatre 2" - icon_state = "surgery" - req_access = list(access_surgery) - -/area/medical/staging - name = "\improper Infirmary Staging" - icon_state = "patients" - req_access = list(access_medical) - -/area/medical/chemistry - name = "\improper Chemistry" - icon_state = "chem" - req_access = list(access_chemistry) - -/area/medical/exam_room - name = "\improper Exam Room" - icon_state = "exam_room" - -/area/medical/morgue - name = "\improper Morgue" - icon_state = "morgue" - ambience = list('sound/ambience/ambimo1.ogg','sound/ambience/ambimo2.ogg','sound/music/main.ogg') - req_access = list(list(access_morgue,access_forensics_lockers)) - -/area/medical/morgue/autopsy - name = "\improper Autopsy" - icon_state = "autopsy" - -// Shield Rooms - -/area/shield - name = "\improper Shield Generator" - icon_state = "engineering" - sound_env = SMALL_ENCLOSED - req_access = list(access_engine_equip) - holomap_color = HOLOMAP_AREACOLOR_ENGINEERING - -/area/shield/bridge - name = "\improper Bridge Shield Generator" - -// Misc -/area/teleporter - name = "\improper Teleporter" - icon_state = "teleporter" - sound_env = SMALL_ENCLOSED - req_access = list(access_teleporter) - holomap_color = HOLOMAP_AREACOLOR_COMMAND - -/area/maintenance/auxsolarbridge - name = "Solar Maintenance - Bridge" - icon_state = "SolarcontrolS" - sound_env = SMALL_ENCLOSED - holomap_color = HOLOMAP_AREACOLOR_AIRLOCK - -/area/solar/bridge - name = "\improper Bridge Solar Array" - icon_state = "panelsS" - -/area/eva - name = "\improper EVA Storage" - icon_state = "eva" - req_access = list(access_eva) - holomap_color = HOLOMAP_AREACOLOR_AIRLOCK - -/area/aux_eva - name = "\improper Command EVA Storage" - icon_state = "eva" - req_access = list(access_eva) - holomap_color = HOLOMAP_AREACOLOR_AIRLOCK - -/area/thruster - icon_state = "thruster" - req_access = list(access_engine) - holomap_color = HOLOMAP_AREACOLOR_ENGINEERING - -/area/thruster/d1port - name = "\improper First Deck Port Nacelle" - -/area/thruster/d1starboard - name = "\improper First Deck Starboard Nacelle" - -/area/thruster/d3port - name = "\improper Third Deck Port Nacelle" - -/area/thruster/d3starboard - name = "\improper Third Deck Starboard Nacelle" - -/area/engineering/fuelbay - name = "\improper Fuel Bay" - icon_state = "engineering" - req_access = list(access_construction) - -/area/engineering/fuelbay/aux - name = "\improper Auxiliary Fuel Bay" - icon_state = "engineering" - req_access = list(access_construction) - -/area/engineering/wastetank - name = "\improper Waste Tank" - icon_state = "engineering" - req_access = list(access_atmospherics) - -// Command - -/area/bridge - name = "\improper SEV Torch Bridge" - icon_state = "bridge" - req_access = list(access_bridge) - holomap_color = HOLOMAP_AREACOLOR_COMMAND - -/area/bridge/hallway - name = "\improper Bridge Access Hallway" - icon_state = "bridge_hallway" - req_access = list(access_solgov_crew) - -/area/bridge/hallway/port - name = "\improper Bridge Port Access Hallway" - -/area/bridge/hallway/starboard - name = "\improper Bridge Starboard Access Hallway" - -/area/bridge/meeting_room - name = "\improper Command Meeting Room" - icon_state = "bridge_meeting" - ambience = list() - sound_env = MEDIUM_SOFTFLOOR - -/area/bridge/disciplinary_board_room - name = "\improper Disciplinary Board Room" - sound_env = SMALL_ENCLOSED - -/area/bridge/disciplinary_board_room/deliberation - name = "\improper Deliberation Room" - sound_env = SMALL_ENCLOSED - -/area/crew_quarters/heads - icon_state = "head_quarters" - req_access = list(access_heads) - -/area/maintenance/substation - name = "Substation" - icon_state = "substation" - sound_env = SMALL_ENCLOSED - req_access = list(access_engine_equip) - holomap_color = HOLOMAP_AREACOLOR_ENGINEERING - -/area/torchexterior - name = "\improper Exterior Reinforcements" - icon_state = "maint_exterior" - area_flags = AREA_FLAG_EXTERNAL - has_gravity = FALSE - turf_initializer = /decl/turf_initializer/maintenance/space - req_access = list(access_external_airlocks, access_maint_tunnels) - -// CentCom - -/area/centcom/control - name = "\improper Centcom Control" - -/area/centcom/creed - name = "Creed's Office" - -/area/centcom/evac - name = "\improper Centcom Emergency Shuttle" - -/area/centcom/ferry - name = "\improper Centcom Transport Shuttle" - -/area/centcom/living - name = "\improper Centcom Living Quarters" - -/area/centcom/suppy - name = "\improper Centcom Supply Shuttle" - -/area/centcom/test - name = "\improper Centcom Testing Facility" - -// Solars -/area/maintenance/auxsolarport - name = "Solar Maintenance - Port" - icon_state = "SolarcontrolP" - sound_env = SMALL_ENCLOSED - req_access = list(access_engine_equip, access_maint_tunnels) - holomap_color = HOLOMAP_AREACOLOR_AIRLOCK - -/area/maintenance/auxsolarstarboard - name = "Solar Maintenance - Starboard" - icon_state = "SolarcontrolS" - sound_env = SMALL_ENCLOSED - req_access = list(access_engine_equip, access_maint_tunnels) - holomap_color = HOLOMAP_AREACOLOR_AIRLOCK - -/area/solar - area_flags = AREA_FLAG_EXTERNAL - requires_power = 1 - always_unpowered = 1 - has_gravity = FALSE - base_turf = /turf/space - req_access = list(access_engine_equip) - -/area/solar/auxstarboard - name = "\improper Fore Starboard Solar Array" - icon_state = "panelsA" - -/area/solar/port - name = "\improper Port Auxiliary Solar Array" - icon_state = "panelsP" - -// Maintenance - -/area/maintenance/disposal - name = "Waste Disposal" - icon_state = "disposal" - -/area/maintenance/incinerator - name = "\improper Incinerator" - icon_state = "disposal" - req_access = list(list(access_engine, access_medical, access_cargo)) - -/area/maintenance/waterstore - name = "\improper Cistern" - icon_state = "disposal" - -// Storage - -/area/storage/primary - name = "Primary Tool Storage" - icon_state = "primarystorage" - -/area/storage/tech - name = "Technical Storage" - icon_state = "storage" - req_access = list(access_tech_storage) - -/area/storage/tools - name = "Auxiliary Tool Storage" - icon_state = "auxstorage" - -// Holodecks - -/area/holodeck - name = "\improper Holodeck" - icon_state = "Holodeck" - dynamic_lighting = 0 - sound_env = LARGE_ENCLOSED - area_flags = AREA_FLAG_NO_MODIFY - -/area/holodeck/alphadeck - name = "\improper Holodeck Alpha" - -/area/holodeck/source_plating - name = "\improper Holodeck - Off" - -/area/holodeck/source_emptycourt - name = "\improper Holodeck - Empty Court" - sound_env = ARENA - -/area/holodeck/source_boxingcourt - name = "\improper Holodeck - Boxing Court" - sound_env = ARENA - -/area/holodeck/source_basketball - name = "\improper Holodeck - Basketball Court" - sound_env = ARENA - -/area/holodeck/source_thunderdomecourt - name = "\improper Holodeck - Thunderdome Court" - sound_env = ARENA - -/area/holodeck/source_courtroom - name = "\improper Holodeck - Courtroom" - sound_env = AUDITORIUM - -/area/holodeck/source_beach - name = "\improper Holodeck - Beach" - sound_env = PLAIN - -/area/holodeck/source_wildlife - name = "\improper Holodeck - Wildlife Simulation" - -/area/holodeck/source_meetinghall - name = "\improper Holodeck - Meeting Hall" - sound_env = AUDITORIUM - -/area/holodeck/source_theatre - name = "\improper Holodeck - Theatre" - sound_env = CONCERT_HALL - -/area/holodeck/source_picnicarea - name = "\improper Holodeck - Picnic Area" - sound_env = PLAIN - -/area/holodeck/source_snowfield - name = "\improper Holodeck - Snow Field" - sound_env = FOREST - -/area/holodeck/source_desert - name = "\improper Holodeck - Desert" - sound_env = PLAIN - -/area/holodeck/source_space - name = "\improper Holodeck - Space" - has_gravity = 0 - sound_env = SPACE - -/area/holodeck/source_cafe - name = "\improper Holodeck - Cafe" - sound_env = PLAIN - -/area/holodeck/source_volleyball - name = "\improper Holodeck - Volleyball" - sound_env = PLAIN - -/area/holodeck/source_temple - name = "\improper Holodeck - Temple" - sound_env = SMALL_ENCLOSED - -/area/holodeck/source_plaza - name = "\improper Holodeck - Plaza" - sound_env = SMALL_ENCLOSED - -// Engineering - -/area/engineering/atmos/storage - name = "\improper Atmospherics Storage" - icon_state = "atmos_storage" - sound_env = SMALL_ENCLOSED - req_access = list(access_atmospherics) - -/area/engineering/engine_room - name = "\improper Engine Room" - icon_state = "engine" - sound_env = LARGE_ENCLOSED - req_access = list(access_engine, access_engine_equip) - -/area/engineering/drone_fabrication - name = "\improper Engineering Drone Fabrication" - icon_state = "drone_fab" - sound_env = SMALL_ENCLOSED - req_access = list(access_robotics) - -/area/engineering/engine_monitoring - name = "\improper Engine Monitoring Room" - icon_state = "engine_monitoring" - req_access = list(access_engine, access_engine_equip) - -/area/engineering/engine_smes - name = "\improper Engineering SMES" - icon_state = "engine_smes" - sound_env = SMALL_ENCLOSED - req_access = list(access_engine, access_engine_equip) - -/area/engineering/foyer - name = "\improper Engineering Foyer" - icon_state = "engineering_foyer" - req_access = list() - -/area/engineering/engineering_bay - name = "\improper Engineering Bay" - icon_state = "engineering_locker" - req_access = list(access_engine) - -/area/engineering/storage - name = "\improper Engineering Storage" - icon_state = "engineering_storage" - req_access = list() - -/area/engineering/atmos - name = "\improper Atmospherics" - icon_state = "atmos" - sound_env = LARGE_ENCLOSED - req_access = list(access_atmospherics) - -// Research -/area/assembly - req_access = list(access_robotics) - -/area/assembly/chargebay - name = "\improper Mech Bay" - icon_state = "mechbay" - -/area/assembly/robotics - name = "\improper Robotics Workshop" - icon_state = "robotics" - -/area/assembly/robotics/laboratory - name = "\improper Robotics Laboratory" - req_access = list(list(access_medical,access_robotics)) - -/area/assembly/robotics/office - name = "\improper Robotics Office" - -/area/assembly/robotics/surgery - name = "\improper Robotics Operating Theatre" - lighting_tone = AREA_LIGHTING_COOL - -/area/rnd/misc_lab - name = "\improper Miscellaneous Research" - icon_state = "misclab" - -/area/rnd/rnd_sec - name = "\improper Research Checkpoint" - icon_state = "rnd_sec" - req_access = list(list(access_liaison, access_research_security)) - -/area/rnd/research - name = "\improper Research Hallway" - icon_state = "research" - -// Shuttles -/area/shuttle/administration/centcom - name = "\improper Administration Shuttle" - icon_state = "shuttlered" - req_access = list(access_cent_general) - area_flags = AREA_FLAG_RAD_SHIELDED | AREA_FLAG_ION_SHIELDED - -/area/shuttle/escape_pod1/centcom - icon_state = "shuttle" - req_access = list(access_cent_general) - -/area/shuttle/escape_pod2/centcom - icon_state = "shuttle" - req_access = list(access_cent_general) - -/area/shuttle/escape_pod3/centcom - icon_state = "shuttle" - req_access = list(access_cent_general) - -/area/shuttle/escape_pod5/centcom - icon_state = "shuttle" - req_access = list(access_cent_general) - -/area/supply/dock - name = "Supply Shuttle" - icon_state = "shuttle3" - requires_power = 0 - req_access = list(access_cent_storage) - -// Secure - -/area/prison/solitary - name = "Solitary Confinement" - icon_state = "brig" - req_access = list(access_brig) - -/area/security/nuke_storage - name = "\improper Vault" - icon_state = "nuke_storage" - area_flags = AREA_FLAG_IS_NOT_PERSISTENT - req_access = list(access_heads_vault) - -// Crew - -/area/crew_quarters/sleep/cryo - name = "\improper Third Deck Cryogenic Storage" - icon_state = "Sleep" - area_flags = AREA_FLAG_RAD_SHIELDED | AREA_FLAG_ION_SHIELDED - -/area/hydroponics - name = "\improper Hydroponics" - icon_state = "hydro" - lighting_tone = AREA_LIGHTING_COOL - -/area/janitor - name = "\improper Custodial Closet" - icon_state = "janitor" - req_access = list(access_janitor) - -/area/janitor/storage - name = "\improper Custodial Storage Closet" - -// Tcomm -/area/tcommsat - ambience = list('sound/ambience/ambisin2.ogg', 'sound/ambience/signal.ogg', 'sound/ambience/signal.ogg', 'sound/ambience/ambigen10.ogg') - req_access = list(access_tcomsat) - -/area/tcommsat/chamber - name = "\improper Telecoms Central Compartment" - icon_state = "tcomsatcham" - -/area/tcommsat/computer - name = "\improper Telecoms Control Room" - icon_state = "tcomsatcomp" - -// AI - -///area/ai_monitored - //name = "AI Monitored Area" unused proxima - -//area/ai_monitored/storage/eva - //name = "\improper EVA Storage" -// icon_state = "eva" -// req_access = list(access_eva) unused proxima - -/area/turret_protected/ai - name = "\improper AI Chamber" - icon_state = "ai_chamber" - ambience = list('sound/ambience/ambimalf.ogg') - req_access = list(access_ai_upload) - -/area/turret_protected/ai_upload - name = "\improper AI Upload Chamber" - icon_state = "ai_upload" - ambience = list('sound/ambience/ambimalf.ogg') - req_access = list(access_ai_upload) - -/area/turret_protected/ai_upload_foyer - name = "\improper AI Upload Access" - icon_state = "ai_foyer" - ambience = list('sound/ambience/ambimalf.ogg') - sound_env = SMALL_ENCLOSED - req_access = list(access_ai_upload) - -// Chapel - -/area/chapel/main - name = "\improper Chapel" - icon_state = "chapel" - ambience = list('sound/ambience/ambicha1.ogg','sound/ambience/ambicha2.ogg','sound/ambience/ambicha3.ogg','sound/ambience/ambicha4.ogg','sound/music/traitor.ogg') - sound_env = LARGE_ENCLOSED - -/area/chapel/office - name = "\improper Chaplain's Office" - req_access = list(access_chapel_office) - color = COLOR_GRAY80 - sound_env = SMALL_SOFTFLOOR - -/area/chapel/memorial - name = "\improper Memorial Room" - color = COLOR_GRAY80 - sound_env = SMALL_SOFTFLOOR - -// Merchant - -/area/merchant_station - name = "\improper Merchant Station" - icon_state = "LP" - req_access = list(access_merchant) - -// ACTORS GUILD -/area/acting - name = "\improper Centcom Acting Guild" - icon_state = "red" - dynamic_lighting = 0 - requires_power = 0 - -/area/acting/backstage - name = "\improper Backstage" - -/area/acting/stage - name = "\improper Stage" - dynamic_lighting = 1 - icon_state = "yellow" - -// Thunderdome - -/area/tdome - name = "\improper Thunderdome" - icon_state = "thunder" - requires_power = 0 - dynamic_lighting = 0 - sound_env = ARENA - req_access = list(access_cent_thunder) - -/area/tdome/tdome1 - name = "\improper Thunderdome (Team 1)" - icon_state = "green" - -/area/tdome/tdome2 - name = "\improper Thunderdome (Team 2)" - icon_state = "yellow" - -/area/tdome/tdomeadmin - name = "\improper Thunderdome (Admin.)" - icon_state = "purple" - -/area/tdome/tdomeobserve - name = "\improper Thunderdome (Observer.)" - icon_state = "purple" diff --git a/maps/torch/torch_define.dm b/maps/torch/torch_define.dm deleted file mode 100644 index 725e64216ca9c..0000000000000 --- a/maps/torch/torch_define.dm +++ /dev/null @@ -1,57 +0,0 @@ -/datum/map/torch - name = "\improper Torch" - full_name = "\improper SEV Torch" - path = "torch" - flags = MAP_HAS_BRANCH | MAP_HAS_RANK - config_path = "config/torch_config.txt" - - admin_levels = list(7) - escape_levels = list(8) - empty_levels = list(9) - accessible_z_levels = list("1"=1,"2"=3,"3"=1,"4"=1,"5"=1,"6"=1,"9"=30) - overmap_size = 35 - overmap_event_areas = 34 - usable_email_tlds = list("torch.ec.scg", "torch.fleet.mil", "army.mil", "freemail.net", "torch.scg") - - allowed_spawns = list("Cryogenic Storage", "Cyborg Storage") - default_spawn = "Cryogenic Storage" - - station_name = "\improper SEV Torch" - station_short = "\improper Torch" - dock_name = "TBD" - boss_name = "Expeditionary Command" - boss_short = "Command" - company_name = "Sol Central Government" - company_short = "SolGov" - - map_admin_faxes = list( - "Expeditionary Corps Command", - "Expeditionary Corps Logistics", - "EXO Head Office", - "EXO Internal Affairs", - "SFP Territory Support", - "SFP Special Investigations", - "SFP Fugitive Recovery", - "Sol Fleet Mars Commmand", - "Sol Army Commmand", - "Bureau of Diplomatic Affairs", - "Emergency Management Bureau", - "Secure Routing Service" - ) - - //These should probably be moved into the evac controller... - shuttle_docked_message = "Внимание всему персоналу: подготовка к подпространственному прыжку завершена. Начата процедура безопасной активации генератора подпространства. Расчетное время до начала прыжка: %ETD%." - shuttle_leaving_dock = "Внимание всему персоналу: прыжок начат. Примерное время окончания прыжка: %ETA%. Сохраняйте спокойствие и трезвость мышления." - shuttle_called_message = "Внимание всему персоналу: запущена процедура подготовки к подпространственному прыжку в следующий сектор. Расчетное время окончания зарядки генератора блюспейса: %ETA%." - shuttle_recall_message = "Внимание всему персоналу: процедура подготовки к подпространственному прыжку отменена. Возвращайтесь к исполнению своих рабочих обязанностей." - - evac_controller_type = /datum/evacuation_controller/starship - - default_law_type = /datum/ai_laws/solgov - use_overmap = 1 - num_exoplanets = 1 - - away_site_budget = 3 - min_offmap_players = 12 - - id_hud_icons = 'maps/torch/icons/assignment_hud.dmi' diff --git a/maps/torch/torch_elevator.dm b/maps/torch/torch_elevator.dm deleted file mode 100644 index cfc8598f8b9b5..0000000000000 --- a/maps/torch/torch_elevator.dm +++ /dev/null @@ -1,114 +0,0 @@ -/obj/turbolift_map_holder/torch - name = "Torch turbolift map placeholder" - depth = 6 - lift_size_x = 4 - lift_size_y = 4 - - areas_to_use = list( - /area/turbolift/torch_ground, - /area/turbolift/torch_first, - /area/turbolift/torch_second, - /area/turbolift/torch_third, - /area/turbolift/torch_fourth, - /area/turbolift/torch_top - ) - - -/obj/machinery/computer/shuttle_control/lift/cargo - name = "cargo lift controls" - shuttle_tag = "Primary Cargo Lift" - ui_template = "shuttle_control_console_lift.tmpl" - icon_state = "tiny" - icon_keyboard = "tiny_keyboard" - icon_screen = "lift" - density = FALSE - -/obj/machinery/computer/shuttle_control/lift/robotics - name = "robotics lift controls" - shuttle_tag = "Robotics Lift" - ui_template = "shuttle_control_console_lift.tmpl" - icon_state = "tiny" - icon_keyboard = "tiny_keyboard" - icon_screen = "lift" - density = FALSE - -/obj/machinery/computer/shuttle_control/lift/medical - name = "medical lift controls" - shuttle_tag = "Medical Lift" - ui_template = "shuttle_control_console_lift.tmpl" - icon_state = "tiny" - icon_keyboard = "tiny_keyboard" - icon_screen = "lift" - density = FALSE - -/datum/shuttle/autodock/ferry/cargo_lift - name = "Primary Cargo Lift" - shuttle_area = /area/turbolift/cargo_lift - warmup_time = 3 - waypoint_station = "nav_cargo_lift_top" - waypoint_offsite = "nav_cargo_lift_bottom" - sound_takeoff = 'sound/effects/lift_heavy_start.ogg' - sound_landing = 'sound/effects/lift_heavy_stop.ogg' - ceiling_type = null - knockdown = 0 - -/datum/shuttle/autodock/ferry/robotics_lift - name = "Robotics Lift" - shuttle_area = /area/turbolift/robotics_lift - warmup_time = 3 - waypoint_station = "nav_robotics_lift_top" - waypoint_offsite = "nav_robotics_lift_bottom" - sound_takeoff = 'sound/effects/lift_heavy_start.ogg' - sound_landing = 'sound/effects/lift_heavy_stop.ogg' - ceiling_type = null - knockdown = 0 - -/datum/shuttle/autodock/ferry/medical_lift - name = "Medical Lift" - shuttle_area = /area/turbolift/medical_lift - warmup_time = 3 - waypoint_station = "nav_medical_lift_top" - waypoint_offsite = "nav_medical_lift_bottom" - sound_takeoff = 'sound/effects/lift_heavy_start.ogg' - sound_landing = 'sound/effects/lift_heavy_stop.ogg' - ceiling_type = null - knockdown = 0 - -/obj/effect/shuttle_landmark/lift/cargo_top - name = "Top Deck" - landmark_tag = "nav_cargo_lift_top" - base_area = /area/quartermaster/storage/upper - base_turf = /turf/simulated/open - -/obj/effect/shuttle_landmark/lift/cargo_bottom - name = "Lower Deck" - landmark_tag = "nav_cargo_lift_bottom" - flags = SLANDMARK_FLAG_AUTOSET - base_area = /area/quartermaster/storage - base_turf = /turf/simulated/floor/plating - -/obj/effect/shuttle_landmark/lift/robotics_top - name = "Top Deck" - landmark_tag = "nav_robotics_lift_top" - base_area = /area/assembly/robotics - base_turf = /turf/simulated/open - -/obj/effect/shuttle_landmark/lift/robotics_bottom - name = "Lower Deck" - landmark_tag = "nav_robotics_lift_bottom" - flags = SLANDMARK_FLAG_AUTOSET - base_area = /area/assembly/robotics - base_turf = /turf/simulated/floor/plating - -/obj/effect/shuttle_landmark/lift/medical_top - name = "Top Deck" - landmark_tag = "nav_medical_lift_top" - base_area = /area/medical/foyer/storeroom - base_turf = /turf/simulated/open - -/obj/effect/shuttle_landmark/lift/medical_bottom - name = "Lower Deck" - landmark_tag = "nav_medical_lift_bottom" - flags = SLANDMARK_FLAG_AUTOSET - base_area = /area/medical/morgue - base_turf = /turf/simulated/floor/plating \ No newline at end of file diff --git a/maps/torch/torch_events.dm b/maps/torch/torch_events.dm deleted file mode 100644 index 8a4a9f449c0ab..0000000000000 --- a/maps/torch/torch_events.dm +++ /dev/null @@ -1,55 +0,0 @@ -#define ASSIGNMENT_ENGINEER "Engineer" -#define ASSIGNMENT_SUPPLY "Supply" -#define ASSIGNMENT_SECURITY "Security" - -/datum/map/torch/setup_events() - map_event_container = list( - num2text(EVENT_LEVEL_MODERATE) = new/datum/event_container/moderate/torch, - num2text(EVENT_LEVEL_MAJOR) = new/datum/event_container/major/torch - ) - -/datum/event/prison_break/xenobiology - eventDept = "Science" - areaName = list("Xenobiology") - areaType = list(/area/rnd/xenobiology) - areaNotType = list(/area/rnd/xenobiology/xenoflora, /area/rnd/xenobiology/xenoflora_storage) - -/datum/event/prison_break/station - eventDept = "Local" - areaName = list("Brig","Supply Warehouse","Xenobiology","Engineering Hard Storage") - areaType = list(/area/security/prison, /area/security/brig, /area/quartermaster/storage, /area/rnd/xenobiology, /area/engineering/hardstorage) - areaNotType = list(/area/rnd/xenobiology/xenoflora, /area/rnd/xenobiology/xenoflora_storage, /area/quartermaster/storage/upper) - -/datum/event/prison_break/warehouse - eventDept = "Supply" - areaName = list("Supply Warehouse") - areaType = list(/area/quartermaster/storage) - areaNotType = list(/area/quartermaster/storage/upper) - -/datum/event/prison_break/hardstorage - eventDept = "Engineering" - areaName = list("Engineering Hard Storage") - areaType = list(/area/engineering/hardstorage) - -/datum/event/prison_break/armory - eventDept = "Security" - areaName = list("Emergency Armory") - areaType = list(/area/command/armoury) - areaNotType = list(/area/command/armoury/tactical) - -/datum/event_container/moderate/torch - available_events = list( - new/datum/event_meta(EVENT_LEVEL_MODERATE, "Xenobiology Breach", /datum/event/prison_break/xenobiology, 0, list(ASSIGNMENT_SCIENCE = 100)), - new/datum/event_meta(EVENT_LEVEL_MODERATE, "Warehouse Breach", /datum/event/prison_break/warehouse, 0, list(ASSIGNMENT_SUPPLY = 100)), - new/datum/event_meta(EVENT_LEVEL_MODERATE, "Hard Storage Breach", /datum/event/prison_break/hardstorage, 0, list(ASSIGNMENT_ENGINEER = 100)), - new/datum/event_meta(EVENT_LEVEL_MODERATE, "Armory Breach", /datum/event/prison_break/armory, 0, list(ASSIGNMENT_SECURITY = 100)) - ) - -/datum/event_container/major/torch - available_events = list( - new/datum/event_meta(EVENT_LEVEL_MAJOR, "Containment Breach", /datum/event/prison_break/station, 0, list(ASSIGNMENT_ANY = 5)) - ) - -#undef ASSIGNMENT_ENGINEER -#undef ASSIGNMENT_SUPPLY -#undef ASSIGNMENT_SECURITY diff --git a/maps/torch/torch_holodecks.dm b/maps/torch/torch_holodecks.dm deleted file mode 100644 index 23ec9bef4485b..0000000000000 --- a/maps/torch/torch_holodecks.dm +++ /dev/null @@ -1,79 +0,0 @@ - -/datum/map/torch - - holodeck_programs = list( - "emptycourt" = new/datum/holodeck_program(/area/holodeck/source_emptycourt, list('sound/music/THUNDERDOME.ogg')), - "boxingcourt" = new/datum/holodeck_program(/area/holodeck/source_boxingcourt, list('sound/music/THUNDERDOME.ogg')), - "basketball" = new/datum/holodeck_program(/area/holodeck/source_basketball, list('sound/music/THUNDERDOME.ogg')), - "thunderdomecourt" = new/datum/holodeck_program(/area/holodeck/source_thunderdomecourt, list('sound/music/THUNDERDOME.ogg')), - "beach" = new/datum/holodeck_program(/area/holodeck/source_beach, list('sound/music/europa/WildEncounters.ogg')), - "desert" = new/datum/holodeck_program(/area/holodeck/source_desert, - list( - 'sound/effects/wind/wind_2_1.ogg', - 'sound/effects/wind/wind_2_2.ogg', - 'sound/effects/wind/wind_3_1.ogg', - 'sound/effects/wind/wind_4_1.ogg', - 'sound/effects/wind/wind_4_2.ogg', - 'sound/effects/wind/wind_5_1.ogg' - ) - ), - "snowfield" = new/datum/holodeck_program(/area/holodeck/source_snowfield, - list( - 'sound/effects/wind/wind_2_1.ogg', - 'sound/effects/wind/wind_2_2.ogg', - 'sound/effects/wind/wind_3_1.ogg', - 'sound/effects/wind/wind_4_1.ogg', - 'sound/effects/wind/wind_4_2.ogg', - 'sound/effects/wind/wind_5_1.ogg' - ) - ), - "space" = new/datum/holodeck_program(/area/holodeck/source_space, - list( - 'sound/ambience/ambispace.ogg', - 'sound/music/main.ogg', - 'sound/music/space.ogg', - 'sound/music/traitor.ogg', - ) - ), - "picnicarea" = new/datum/holodeck_program(/area/holodeck/source_picnicarea, list('sound/music/title2.ogg')), - "theatre" = new/datum/holodeck_program(/area/holodeck/source_theatre), - "meetinghall" = new/datum/holodeck_program(/area/holodeck/source_meetinghall), - "courtroom" = new/datum/holodeck_program(/area/holodeck/source_courtroom, list('sound/music/traitor.ogg')), - "volleyball" = new/datum/holodeck_program(/area/holodeck/source_volleyball, list('sound/music/THUNDERDOME.ogg')), - "cafe" = new/datum/holodeck_program(/area/holodeck/source_cafe), - "wildlifecarp" = new/datum/holodeck_program(/area/holodeck/source_wildlife, list()), - "temple" = new/datum/holodeck_program(/area/holodeck/source_temple), - "plaza" = new/datum/holodeck_program(/area/holodeck/source_plaza), - "turnoff" = new/datum/holodeck_program(/area/holodeck/source_plating, list()) - ) - - holodeck_supported_programs = list( - - "TorchMainPrograms" = list( - "Basketball Court" = "basketball", - "Beach" = "beach", - "Boxing Ring" = "boxingcourt", - "Cafe" = "cafe", - "Courtroom" = "courtroom", - "Desert" = "desert", - "Empty Court" = "emptycourt", - "Meeting Hall" = "meetinghall", - "Picnic Area" = "picnicarea", - "Snow Field" = "snowfield", - "Space" = "space", - "Theatre" = "theatre", - "Thunderdome Court" = "thunderdomecourt", - "Volleyball Court" = "volleyball", - "Bathhouse" = "temple", - "Plaza" = "plaza" - ) - - ) - - holodeck_restricted_programs = list( - - "TorchMainPrograms" = list( - "Wildlife Simulation" = "wildlifecarp" - ) - - ) \ No newline at end of file diff --git a/maps/torch/torch_lobby.dm b/maps/torch/torch_lobby.dm deleted file mode 100644 index f087013810bc6..0000000000000 --- a/maps/torch/torch_lobby.dm +++ /dev/null @@ -1,26 +0,0 @@ -/datum/map/torch - lobby_screens = list('maps/torch/lobby/proxima.gif', 'maps/torch/lobby/bobot.gif', 'maps/torch/lobby/unknown.gif', 'maps/torch/lobby/pioneers.gif') - lobby_tracks = list( - /decl/audio/track/clouds_of_neptune, - /decl/audio/track/chasing_time, - /decl/audio/track/torch, - /decl/audio/track/human, - /decl/audio/track/marhaba, - /decl/audio/track/treacherous_voyage, - /decl/audio/track/comet_haley, - /decl/audio/track/lysendraa, - /decl/audio/track/lasers, - /decl/audio/track/martian_cowboy, - /decl/audio/track/monument, - /decl/audio/track/as_far_as_it_gets, - /decl/audio/track/eighties, - /decl/audio/track/torn, - /decl/audio/track/nebula, - /decl/audio/track/epicintro2015, - /decl/audio/track/epicintro2017, - /decl/audio/track/hull_rupture, - /decl/audio/track/on_the_rocks, - /decl/audio/track/rimward_cruise, - /decl/audio/track/misanthropic_corridors, - /decl/audio/track/voidsent - ) diff --git a/maps/torch/torch_machinery.dm b/maps/torch/torch_machinery.dm deleted file mode 100644 index 0e2f518a27863..0000000000000 --- a/maps/torch/torch_machinery.dm +++ /dev/null @@ -1,3 +0,0 @@ -/obj/machinery/computer/rdconsole/petrov - name = "petrov fabricator console" - id = 3 diff --git a/maps/torch/torch_map_templates.dm b/maps/torch/torch_map_templates.dm deleted file mode 100644 index 37c2879c38d75..0000000000000 --- a/maps/torch/torch_map_templates.dm +++ /dev/null @@ -1,3 +0,0 @@ -#include "../random_ruins/exoplanet_ruins/ec_old_crash/ec_old_crash.dm" -#include "../random_ruins/exoplanet_ruins/playablecolony/playablecolony.dm" -#include "../random_ruins/exoplanet_ruins/playablecolony2/playablecolony2.dm" \ No newline at end of file diff --git a/maps/torch/torch_npcs.dm b/maps/torch/torch_npcs.dm deleted file mode 100644 index 57c416d9957f3..0000000000000 --- a/maps/torch/torch_npcs.dm +++ /dev/null @@ -1,27 +0,0 @@ -/obj/random_multi/single_item/punitelly - name = "Multi Point - Warrant Officer Punitelli" - id = "Punitelli" - item_path = /mob/living/carbon/human/monkey/punitelli - -/mob/living/carbon/human/monkey/punitelli/New() - ..() - name = "Warrant Officer Punitelli" - real_name = name - gender = MALE - var/obj/item/clothing/C - C = new /obj/item/clothing/under/solgov/utility/expeditionary/monkey(src) - equip_to_appropriate_slot(C) - put_in_hands(new /obj/item/reagent_containers/food/drinks/glass2/coffeecup/punitelli) - equip_to_appropriate_slot(new /obj/item/clothing/mask/smokable/cigarette/jerichos) - if(prob(50)) - equip_to_appropriate_slot(new /obj/item/clothing/shoes/sandal) - -/obj/random_multi/single_item/runtime - name = "Multi Point - Runtime" - id = "Runtime" - item_path = /mob/living/simple_animal/passive/cat/fluff/Runtime - -/obj/random_multi/single_item/poppy - name = "Multi Point - Poppy" - id = "Poppy" - item_path = /mob/living/simple_animal/passive/opossum/poppy diff --git a/maps/torch/torch_overmap.dm b/maps/torch/torch_overmap.dm deleted file mode 100644 index 0a4a4cd837bba..0000000000000 --- a/maps/torch/torch_overmap.dm +++ /dev/null @@ -1,123 +0,0 @@ -/obj/effect/overmap/visitable/ship/torch - name = "SEV Torch" - desc = "A frankensteined HNS Mako-class corvette, broadcasting SCGEC codes and the designation \"SEV Torch, HSC-4-13-X\"." - fore_dir = WEST - vessel_mass = 100000 - burn_delay = 2 SECONDS - base = TRUE - - initial_restricted_waypoints = list( - "Charon" = list("nav_hangar_charon"), //can't have random shuttles popping inside the ship - "Guppy" = list("nav_hangar_guppy"), - "Aquila" = list("nav_hangar_aquila"), - "Skrellian Scout" = list("nav_skrellscout_dock"), //restricts Skrell Scoutship specific docking waypoint on deck 4 portside - "Skrellian Shuttle" = list("nav_skrellscoutsh_altdock"), - "Rescue" = list("nav_ert_dock"), //restricts ERT Shuttle specific docking waypoint on deck 4 portside - "ITV The Reclaimer" = list("nav_hangar_gantry_torch"), //gantry shuttles - "ITV Vulcan" = list("nav_hangar_gantry_torch_two"), - "ITV Spiritus" = list("nav_hangar_gantry_torch_three"), - "SRV Venerable Catfish" = list("nav_verne_5"), //docking location for verne shuttle - "Cyclopes" = list("nav_merc_dock"), - "ICGNV Hound" = list("nav_hound_dock"), - ) - - initial_generic_waypoints = list( - //start Bridge Deck - "nav_merc_deck5", - "nav_ninja_deck5", - "nav_skipjack_deck5", - "nav_ert_deck5", - "nav_bridge_charon", - "nav_bridge_guppy", - "nav_bridge_aquila", - - //start First Deck - "nav_merc_deck1", - "nav_ninja_deck1", - "nav_skipjack_deck1", - "nav_ert_deck4", - "nav_deck4_charon", - "nav_deck4_guppy", - "nav_deck4_aquila", - - //start Second Deck - "nav_merc_deck2", - "nav_ninja_deck2", - "nav_skipjack_deck2", - "nav_ert_deck3", - "nav_deck3_charon", - "nav_deck3_guppy", - "nav_deck3_aquila", - - //start Third Deck - "nav_merc_deck3", - "nav_ninja_deck3", - "nav_skipjack_deck3", - "nav_ert_deck2", - "nav_deck2_charon", - "nav_deck2_guppy", - "nav_deck2_aquila", - - //start Forth Deck - "nav_merc_deck4", - "nav_ninja_deck4", - "nav_skipjack_deck4", - "nav_ert_deck1", - "nav_deck1_charon", - "nav_deck1_guppy", - "nav_deck1_aquila", - "nav_vox_raider_dock", - - //start Hanger Deck - "nav_merc_hanger", - "nav_ninja_hanger", - "nav_skipjack_hanger", - "nav_ert_hanger", - ) - -/obj/effect/overmap/visitable/ship/landable/exploration_shuttle - name = "Charon" - desc = "An SSE-U11 long range shuttle, broadcasting SCGEC codes and the callsign \"Torch-2 Charon\"." - shuttle = "Charon" - max_speed = 1/(2 SECONDS) - burn_delay = 1 SECONDS - vessel_mass = 3000 - fore_dir = NORTH - skill_needed = SKILL_BASIC - vessel_size = SHIP_SIZE_SMALL - -/obj/effect/overmap/visitable/ship/landable/aquila - name = "Aquila" - desc = "A PM-24 modular transport, broadcasting SCGEC codes and the callsign \"Torch-1 Aquila\"." - shuttle = "Aquila" - vessel_mass = 10000 - max_speed = 1/(1 SECONDS) - burn_delay = 0.5 SECONDS //spammable, but expensive - fore_dir = NORTH - vessel_size = SHIP_SIZE_SMALL - -/obj/effect/overmap/visitable/ship/landable/guppy - name = "Guppy" - desc = "An SSE-U3 utility pod, broadcasting SCGEC codes and the callsign \"Torch-3 Guppy\"." - shuttle = "Guppy" - max_speed = 1/(3 SECONDS) - burn_delay = 2 SECONDS - vessel_mass = 1800 - fore_dir = SOUTH - skill_needed = SKILL_BASIC - vessel_size = SHIP_SIZE_TINY - -/obj/machinery/computer/shuttle_control/explore/aquila - name = "aquila control console" - shuttle_tag = "Aquila" - req_access = list(access_aquila_helm) - -/obj/machinery/computer/shuttle_control/explore/exploration_shuttle - name = "shuttle control console" - shuttle_tag = "Charon" - req_access = list(access_expedition_shuttle_helm) - -/obj/machinery/computer/shuttle_control/explore/guppy - name = "guppy control console" - shuttle_tag = "Guppy" - req_access = list(access_guppy_helm) diff --git a/maps/torch/torch_presets.dm b/maps/torch/torch_presets.dm deleted file mode 100644 index c3b090da9cad2..0000000000000 --- a/maps/torch/torch_presets.dm +++ /dev/null @@ -1,239 +0,0 @@ -var/global/const/NETWORK_AQUILA = "Aquila" -var/global/const/NETWORK_BRIDGE = "Bridge" -var/global/const/NETWORK_CHARON = "Charon" -var/global/const/NETWORK_EXPEDITION = "Expedition" -var/global/const/NETWORK_FIRST_DECK = "First Deck" -var/global/const/NETWORK_FOURTH_DECK = "Fourth Deck" -var/global/const/NETWORK_POD = "General Utility Pod" -var/global/const/NETWORK_SECOND_DECK = "Second Deck" -var/global/const/NETWORK_SUPPLY = "Supply" -var/global/const/NETWORK_HANGAR = "Hangar" -var/global/const/NETWORK_EXPLO = "Exploration" -var/global/const/NETWORK_THIRD_DECK = "Third Deck" -var/global/const/NETWORK_FIFTH_DECK = "Fifth Deck" -var/global/const/NETWORK_PETROV = "Petrov" - -/datum/map/torch/get_network_access(var/network) - switch(network) - if(NETWORK_AQUILA) - return access_aquila - if(NETWORK_BRIDGE) - return access_heads - if(NETWORK_CHARON) - return access_expedition_shuttle - if(NETWORK_POD) - return access_guppy - if(NETWORK_SUPPLY) - return access_mailsorting - if(NETWORK_HANGAR) - return access_hangar - if(NETWORK_EXPLO) - return access_explorer - if(NETWORK_PETROV) - return access_petrov - return get_shared_network_access(network) || ..() - -/datum/map/torch - // Networks that will show up as options in the camera monitor program - station_networks = list( - NETWORK_ROBOTS, - NETWORK_FIRST_DECK, - NETWORK_SECOND_DECK, - NETWORK_THIRD_DECK, - NETWORK_FOURTH_DECK, - NETWORK_FIFTH_DECK, - NETWORK_BRIDGE, - NETWORK_COMMAND, - NETWORK_ENGINEERING, - NETWORK_ENGINE, - NETWORK_MEDICAL, - NETWORK_RESEARCH, - NETWORK_SECURITY, - NETWORK_SUPPLY, - NETWORK_EXPEDITION, - NETWORK_EXPLO, - NETWORK_HANGAR, - NETWORK_AQUILA, - NETWORK_CHARON, - NETWORK_POD, - NETWORK_PETROV, - NETWORK_ALARM_ATMOS, - NETWORK_ALARM_CAMERA, - NETWORK_ALARM_FIRE, - NETWORK_ALARM_MOTION, - NETWORK_ALARM_POWER, - NETWORK_THUNDER, - ) - -// -// Cameras -// - -// Networks -/obj/machinery/camera/network/aquila - network = list(NETWORK_AQUILA) - -/obj/machinery/camera/network/bridge - network = list(NETWORK_BRIDGE) - -/obj/machinery/camera/network/exploration_shuttle - network = list(NETWORK_CHARON) - -/obj/machinery/camera/network/expedition - network = list(NETWORK_EXPEDITION) - -/obj/machinery/camera/network/first_deck - network = list(NETWORK_FIRST_DECK) - -/obj/machinery/camera/network/fourth_deck - network = list(NETWORK_FOURTH_DECK) - -/obj/machinery/camera/network/fifth_deck - network = list(NETWORK_FIFTH_DECK) - -/obj/machinery/camera/network/pod - network = list(NETWORK_POD) - -/obj/machinery/camera/network/second_deck - network = list(NETWORK_SECOND_DECK) - -/obj/machinery/camera/network/supply - network = list(NETWORK_SUPPLY) - -/obj/machinery/camera/network/hangar - network = list(NETWORK_HANGAR) - -/obj/machinery/camera/network/exploration - network = list(NETWORK_EXPLO) - -/obj/machinery/camera/network/third_deck - network = list(NETWORK_THIRD_DECK) - -/obj/machinery/camera/network/command - network = list(NETWORK_COMMAND) - -/obj/machinery/camera/network/crescent - network = list(NETWORK_CRESCENT) - -/obj/machinery/camera/network/engine - network = list(NETWORK_ENGINE) - -/obj/machinery/camera/network/engineering_outpost - network = list(NETWORK_ENGINEERING_OUTPOST) - -/obj/machinery/camera/network/petrov - network = list(NETWORK_PETROV) - -// Motion -/obj/machinery/camera/motion/engineering_outpost - network = list(NETWORK_ENGINEERING_OUTPOST) - -// All Upgrades -/obj/machinery/camera/all/command - network = list(NETWORK_COMMAND) - - -// -// SMES units -// - -// Substation SMES -/obj/machinery/power/smes/buildable/preset/torch/substation - uncreated_component_parts = list(/obj/item/stock_parts/smes_coil = 1) // Note that it gets one more from construction - _input_maxed = TRUE - _output_maxed = TRUE - -// Substation SMES (charged and with full I/O setting) -/obj/machinery/power/smes/buildable/preset/torch/substation_full - uncreated_component_parts = list(/obj/item/stock_parts/smes_coil = 1) - _input_maxed = TRUE - _output_maxed = TRUE - _input_on = TRUE - _output_on = TRUE - _fully_charged = TRUE - -// Main Engine output SMES -/obj/machinery/power/smes/buildable/preset/torch/engine_main - uncreated_component_parts = list( - /obj/item/stock_parts/smes_coil/super_io = 2, - /obj/item/stock_parts/smes_coil/super_capacity = 2) - _input_maxed = TRUE - _output_maxed = TRUE - _input_on = TRUE - _output_on = TRUE - _fully_charged = TRUE - -// Shuttle SMES -/obj/machinery/power/smes/buildable/preset/torch/shuttle - uncreated_component_parts = list( - /obj/item/stock_parts/smes_coil/super_io = 1, - /obj/item/stock_parts/smes_coil/super_capacity = 1) - _input_maxed = TRUE - _output_maxed = TRUE - _input_on = TRUE - _output_on = TRUE - _fully_charged = TRUE - -// Hangar SMES. Charges the shuttles so needs a pretty big throughput. -/obj/machinery/power/smes/buildable/preset/torch/hangar - uncreated_component_parts = list( - /obj/item/stock_parts/smes_coil/super_io = 2) - _input_maxed = TRUE - _output_maxed = TRUE - _input_on = TRUE - _output_on = TRUE - _fully_charged = TRUE - -var/global/const/NETWORK_COMMAND = "Command" -var/global/const/NETWORK_ENGINE = "Engine" -var/global/const/NETWORK_ENGINEERING_OUTPOST = "Engineering Outpost" - -/datum/map/proc/get_shared_network_access(var/network) - switch(network) - if(NETWORK_COMMAND) - return access_heads - if(NETWORK_ENGINE, NETWORK_ENGINEERING_OUTPOST) - return access_engine - -/datum/map/torch/default_internal_channels() - return list( - num2text(PUB_FREQ) = list(), - num2text(AI_FREQ) = list(access_synth), - num2text(ENT_FREQ) = list(), - num2text(ERT_FREQ) = list(access_cent_specops), - num2text(COMM_FREQ) = list(access_radio_comm), - num2text(ENG_FREQ) = list(access_radio_eng), - num2text(MED_FREQ) = list(access_radio_med), - num2text(MED_I_FREQ) = list(access_radio_med), - num2text(SEC_FREQ) = list(access_radio_sec), - num2text(SEC_I_FREQ) = list(access_radio_sec), - num2text(SCI_FREQ) = list(access_radio_sci), - num2text(SUP_FREQ) = list(access_radio_sup), - num2text(SRV_FREQ) = list(access_radio_serv), - num2text(EXP_FREQ) = list(access_radio_exp), - num2text(HAIL_FREQ) = list(), - ) - -/decl/stock_part_preset/radio/receiver/vent_pump/guppy - frequency = 1431 - -/decl/stock_part_preset/radio/event_transmitter/vent_pump/guppy - frequency = 1431 - -/obj/machinery/atmospherics/unary/vent_pump/high_volume/guppy - stock_part_presets = list( - /decl/stock_part_preset/radio/receiver/vent_pump/guppy = 1, - /decl/stock_part_preset/radio/event_transmitter/vent_pump/guppy = 1 - ) - -/decl/stock_part_preset/radio/receiver/vent_scrubber/guppy - frequency = 1431 - -/decl/stock_part_preset/radio/event_transmitter/vent_scrubber/guppy - frequency = 1431 - -/obj/machinery/atmospherics/unary/vent_scrubber/guppy - stock_part_presets = list( - /decl/stock_part_preset/radio/receiver/vent_scrubber/guppy = 1, - /decl/stock_part_preset/radio/event_transmitter/vent_scrubber/guppy = 1 - ) diff --git a/maps/torch/torch_procs.dm b/maps/torch/torch_procs.dm deleted file mode 100644 index 6c52dac6d5a45..0000000000000 --- a/maps/torch/torch_procs.dm +++ /dev/null @@ -1,95 +0,0 @@ -/datum/map/bolt_saferooms() - for(var/atype in typesof(/area/crew_quarters/safe_room)) - var/area/A = locate(atype) - if(istype(A)) - for(var/obj/machinery/door/airlock/vault/bolted/V in A.contents) - if(!V.locked) - V.lock() - -/datum/map/unbolt_saferooms() - for(var/atype in typesof(/area/crew_quarters/safe_room)) - var/area/A = locate(atype) - if(istype(A)) - for(var/obj/machinery/door/airlock/vault/bolted/V in A.contents) - if(V.locked) - V.unlock() - -/datum/map/make_maint_all_access(var/radstorm = 0) - maint_all_access = TRUE - if(radstorm) - priority_announcement.Announce("Требование о доступе для технических тунелей было отозвано на всех технических шлюзах. Шлюзы бункеров безопасности были разблокированы.", "Attention!") - GLOB.using_map.unbolt_saferooms() - else - priority_announcement.Announce("Требование о доступе для технических тунелей было отозвано на всех технических шлюзах.", "Attention!") - -/datum/map/revoke_maint_all_access(var/radstorm = 0) - maint_all_access = FALSE - if(radstorm) - priority_announcement.Announce("Требование о доступе для технических тунелей было поднято на всех технических шлюзах. Шлюзы бункеров безопасности были зыкрыты болтами.", "Attention!") - GLOB.using_map.bolt_saferooms() - else - priority_announcement.Announce("Требование о доступе для технических тунелей было поднято на всех технических шлюзах.", "Attention!") - -/datum/map/proc/request_synth() - var/datum/job/synthetic/synth = SSjobs.get_by_path(/datum/job/synthetic) - var/success - if(synth.total_positions == 0) - priority_announcement.Announce("ЭКСО Синтетик был запрошен для пробуждения из Криогенного Хранилища командным составом судна.", "Attention!") - synth.total_positions = 1 - success = 1 - return success - else - return - -/datum/map/torch/roundend_player_status() - for(var/mob/Player in GLOB.player_list) - if(Player.mind && !isnewplayer(Player)) - if(Player.stat != DEAD) - var/turf/playerTurf = get_turf(Player) - if(evacuation_controller.round_over() && evacuation_controller.emergency_evacuation) - if(isStationLevel(playerTurf.z)) - to_chat(Player, "You managed to survive, but were marooned on [station_name()] as [Player.real_name]...") - else if (isEscapeLevel(playerTurf.z)) - to_chat(Player, "You managed to survive the events on [station_name()] as [Player.real_name].") - else - to_chat(Player, "You managed to survive, but were marooned in the sector as [Player.real_name]...") - else if(issilicon(Player)) - to_chat(Player, "You remain operational after the events on [station_name()] as [Player.real_name].") - else if (isNotStationLevel(playerTurf.z)) - to_chat(Player, "You managed to survive, but were marooned in the sector as [Player.real_name]...") - else - to_chat(Player, "You got through just another workday on [station_name()] as [Player.real_name].") - else - if(isghost(Player)) - var/mob/observer/ghost/O = Player - if(!O.started_as_observer) - to_chat(Player, "You did not survive the events on [station_name()]...") - else - to_chat(Player, "You did not survive the events on [station_name()]...") - -/datum/map/torch/roundend_summary(list/data) - var/desc - var/survivors = data["surviving_total"] - var/escaped_total = data["escaped_total"] - var/marooned_total = data["left_behind_total"] - var/ghosts = data["ghosts"] - var/offship_players = data["offship_players"] - - if(survivors > 0) - desc += "There [survivors > 1 ? "were [survivors] survivors" : "was one survivor"]" - desc += " ([escaped_total > 0 ? escaped_total : "none"] escaped, [marooned_total] marooned)," - data += " [offship_players > 1 ? "[offship_players] off-ship players" : "one off-ship player"]" - data += " and [ghosts] ghosts.
              " - else - desc += "There were no survivors, [offship_players] off-ship players, ([ghosts] ghosts)." - - return desc - -/datum/map/proc/toggle_crew_sensors(var/new_mode = 0, var/force = FALSE) - if(ntnet_global && ntnet_global.check_function(NTNET_SYSTEMCONTROL)) // No network - no remote control - var/tracked = crew_repository.scan() - for(var/obj/item/clothing/under/suit in tracked) - var/turf/pos = get_turf(suit) - if(pos && (pos.z in GLOB.using_map.map_levels)) - if(force || (suit.sensor_mode < new_mode)) - suit.sensor_mode = new_mode diff --git a/maps/torch/torch_ranks.dm b/maps/torch/torch_ranks.dm deleted file mode 100644 index cc67c5521b29d..0000000000000 --- a/maps/torch/torch_ranks.dm +++ /dev/null @@ -1,811 +0,0 @@ -/datum/job/submap - branch = /datum/mil_branch/civilian - rank = /datum/mil_rank/civ/civ - allowed_branches = list(/datum/mil_branch/civilian) - allowed_ranks = list(/datum/mil_rank/civ/civ) - required_language = null - -/datum/map/torch - branch_types = list( - /datum/mil_branch/expeditionary_corps, - /datum/mil_branch/fleet, - /datum/mil_branch/civilian, - /datum/mil_branch/solgov, - /datum/mil_branch/army, - /datum/mil_branch/alien, - /datum/mil_branch/skrell_fleet, - /datum/mil_branch/iccgn - ) - - spawn_branch_types = list( - /datum/mil_branch/expeditionary_corps, - /datum/mil_branch/fleet, - /datum/mil_branch/army, - /datum/mil_branch/civilian, - /datum/mil_branch/solgov, - /datum/mil_branch/alien, - /datum/mil_branch/skrell_fleet - ) - - species_to_branch_blacklist = list( - /datum/species/human = list(/datum/mil_branch/alien, /datum/mil_branch/skrell_fleet), - /datum/species/machine = list(/datum/mil_branch/alien, /datum/mil_branch/skrell_fleet), - /datum/species/machine/shell = list(/datum/mil_branch/alien, /datum/mil_branch/skrell_fleet), - /datum/species/vox = list( - /datum/mil_branch/expeditionary_corps, - /datum/mil_branch/fleet, - /datum/mil_branch/army, - /datum/mil_branch/civilian, - /datum/mil_branch/solgov, - /datum/mil_branch/skrell_fleet - ) - ) - - species_to_branch_whitelist = list( - /datum/species/diona = list(/datum/mil_branch/civilian), - /datum/species/nabber = list(/datum/mil_branch/civilian), - /datum/species/skrell = list(/datum/mil_branch/civilian, /datum/mil_branch/expeditionary_corps, /datum/mil_branch/skrell_fleet), - /datum/species/unathi = list(/datum/mil_branch/civilian, /datum/mil_branch/expeditionary_corps), - /datum/species/unathi/yeosa = list(/datum/mil_branch/civilian, /datum/mil_branch/expeditionary_corps), - /datum/species/adherent = list(/datum/mil_branch/civilian), - /datum/species/vox = list(/datum/mil_branch/alien) - ) - - species_to_rank_blacklist = list( - /datum/species/machine = list( - /datum/mil_branch/solgov = list( - /datum/mil_rank/sol/agent - ) - ) - ) - - species_to_rank_whitelist = list( - /datum/species/machine = list( - /datum/mil_branch/expeditionary_corps = list( - /datum/mil_rank/ec/e3, - /datum/mil_rank/ec/e5, - /datum/mil_rank/ec/e7, - /datum/mil_rank/ec/o1 - ), - /datum/mil_branch/fleet = list( - /datum/mil_rank/fleet/e1, - /datum/mil_rank/fleet/e2, - /datum/mil_rank/fleet/e3, - /datum/mil_rank/fleet/e4, - /datum/mil_rank/fleet/e5, - /datum/mil_rank/fleet/e6, - /datum/mil_rank/fleet/e7, - /datum/mil_rank/fleet/o1 - ), - /datum/mil_branch/army = list( - /datum/mil_rank/army/e1, - /datum/mil_rank/army/e2, - /datum/mil_rank/army/e3, - ///datum/mil_rank/army/e4, - /datum/mil_rank/army/e4_alt, - /datum/mil_rank/army/e5, - /datum/mil_rank/army/e6, - /datum/mil_rank/army/e7, - /datum/mil_rank/army/o1 - ) - ), - /datum/species/machine/shell = list( - /datum/mil_branch/expeditionary_corps = list( - /datum/mil_rank/ec/e3, - /datum/mil_rank/ec/e5, - /datum/mil_rank/ec/e7, - /datum/mil_rank/ec/o1 - ), - /datum/mil_branch/fleet = list( - /datum/mil_rank/fleet/e1, - /datum/mil_rank/fleet/e2, - /datum/mil_rank/fleet/e3, - /datum/mil_rank/fleet/e4, - /datum/mil_rank/fleet/e5, - /datum/mil_rank/fleet/e6, - /datum/mil_rank/fleet/e7, - /datum/mil_rank/fleet/o1 - ), - /datum/mil_branch/army = list( - /datum/mil_rank/army/e1, - /datum/mil_rank/army/e2, - /datum/mil_rank/army/e3, - ///datum/mil_rank/army/e4, - /datum/mil_rank/army/e4_alt, - /datum/mil_rank/army/e5, - /datum/mil_rank/army/e6, - /datum/mil_rank/army/e7, - /datum/mil_rank/army/o1 - ) - ), - /datum/species/skrell = list( - /datum/mil_branch/expeditionary_corps = list( - /datum/mil_rank/ec/e3, - /datum/mil_rank/ec/e5, - /datum/mil_rank/ec/e7, - /datum/mil_rank/ec/o1 - ) - ), - /datum/species/unathi = list( - /datum/mil_branch/expeditionary_corps = list( - /datum/mil_rank/ec/e3, - /datum/mil_rank/ec/e5 - ) - ), - /datum/species/unathi/yeosa = list( - /datum/mil_branch/expeditionary_corps = list( - /datum/mil_rank/ec/e3, - /datum/mil_rank/ec/e5 - ) - ), - /datum/species/vox = list( - /datum/mil_branch/alien = list( - /datum/mil_rank/alien - ) - ) - ) - -/* - * Branches - * ======== - */ - -/datum/mil_branch/expeditionary_corps - name = "Expeditionary Corps" - name_short = "SCGEC" - email_domain = "torch.ec.scg" - - rank_types = list( - /datum/mil_rank/ec/e3, - /datum/mil_rank/ec/e5, - /datum/mil_rank/ec/e7, - /datum/mil_rank/ec/o1, - /datum/mil_rank/ec/o3, - /datum/mil_rank/ec/o5, - /datum/mil_rank/ec/o6 - ) - - spawn_rank_types = list( - /datum/mil_rank/ec/e3, - /datum/mil_rank/ec/e5, - /datum/mil_rank/ec/e7, - /datum/mil_rank/ec/o1, - /datum/mil_rank/ec/o3, - /datum/mil_rank/ec/o5, - /datum/mil_rank/ec/o6 - ) - - assistant_job = /datum/job/crew - - min_skill = list( SKILL_HAULING = SKILL_BASIC, - SKILL_SCIENCE = SKILL_BASIC, - SKILL_EVA = SKILL_BASIC) - -/datum/mil_branch/fleet - name = "Fleet" - name_short = "SCGF" - email_domain = "torch.fleet.mil" - - rank_types = list( - /datum/mil_rank/fleet/e1, - /datum/mil_rank/fleet/e2, - /datum/mil_rank/fleet/e3, - /datum/mil_rank/fleet/e4, - /datum/mil_rank/fleet/e5, - /datum/mil_rank/fleet/e6, - /datum/mil_rank/fleet/e7, - /datum/mil_rank/fleet/e8, - /datum/mil_rank/fleet/e9, - /datum/mil_rank/fleet/e9_alt1, - /datum/mil_rank/fleet/e9_alt2, - /datum/mil_rank/fleet/e9_alt3, - /datum/mil_rank/fleet/e9_alt4, - /datum/mil_rank/fleet/o1, - /datum/mil_rank/fleet/o2, - /datum/mil_rank/fleet/o3, - /datum/mil_rank/fleet/o4, - /datum/mil_rank/fleet/o5, - /datum/mil_rank/fleet/o6, - /datum/mil_rank/fleet/o7, - /datum/mil_rank/fleet/o8, - /datum/mil_rank/fleet/o9, - /datum/mil_rank/fleet/o10, - /datum/mil_rank/fleet/o10_alt - ) - - spawn_rank_types = list( - /datum/mil_rank/fleet/e2, - /datum/mil_rank/fleet/e3, - /datum/mil_rank/fleet/e4, - /datum/mil_rank/fleet/e5, - /datum/mil_rank/fleet/e6, - /datum/mil_rank/fleet/e7, - /datum/mil_rank/fleet/e8, - /datum/mil_rank/fleet/e9, - /datum/mil_rank/fleet/e9_alt1, - /datum/mil_rank/fleet/o1, - /datum/mil_rank/fleet/o2, - /datum/mil_rank/fleet/o3, - /datum/mil_rank/fleet/o4, - /datum/mil_rank/fleet/o5 - ) - - assistant_job = /datum/job/crew - min_skill = list( SKILL_HAULING = SKILL_BASIC, - SKILL_WEAPONS = SKILL_BASIC, - SKILL_EVA = SKILL_BASIC) - -/datum/mil_branch/army - name = "Marine Corps" - name_short = "SCGM" - email_domain = "torch.marine.mil" - - rank_types = list( - /datum/mil_rank/army/e1, - /datum/mil_rank/army/e2, - /datum/mil_rank/army/e3, - ///datum/mil_rank/army/e4, - /datum/mil_rank/army/e4_alt, - /datum/mil_rank/army/e5, - /datum/mil_rank/army/e6, - /datum/mil_rank/army/e7, - /datum/mil_rank/army/e7_meme, - /datum/mil_rank/army/e8, - /datum/mil_rank/army/e8_alt, - /datum/mil_rank/army/e9, - /datum/mil_rank/army/e9_alt1, - /datum/mil_rank/army/e9_alt2, - /datum/mil_rank/army/e9_meme, - /datum/mil_rank/army/o1, - /datum/mil_rank/army/o2, - /datum/mil_rank/army/o3, - /datum/mil_rank/army/o4, - /datum/mil_rank/army/o5, - /datum/mil_rank/army/o6, - /datum/mil_rank/army/o7, - /datum/mil_rank/army/o8, - /datum/mil_rank/army/o9, - /datum/mil_rank/army/o10, - /datum/mil_rank/army/o10_alt - ) - - spawn_rank_types = list( - /datum/mil_rank/army/e1, - /datum/mil_rank/army/e2, - /datum/mil_rank/army/e3, - ///datum/mil_rank/army/e4, - /datum/mil_rank/army/e4_alt, - /datum/mil_rank/army/e5, - /datum/mil_rank/army/e6, - /datum/mil_rank/army/e7, - /datum/mil_rank/army/e8, - /datum/mil_rank/army/e8_alt, - /datum/mil_rank/army/e9, - /datum/mil_rank/army/e9_alt1, - /datum/mil_rank/army/e9_alt2, - /datum/mil_rank/army/o1, - /datum/mil_rank/army/o2, - /datum/mil_rank/army/o3, - /datum/mil_rank/army/o4, - /datum/mil_rank/army/o5 - ) - - assistant_job = /datum/job/crew - min_skill = list( SKILL_HAULING = SKILL_ADEPT, - SKILL_WEAPONS = SKILL_BASIC, - SKILL_COMBAT = SKILL_BASIC) - -/datum/mil_branch/civilian - name = "Civilian" - email_domain = "freemail.net" - allow_custom_email = TRUE - - rank_types = list( - /datum/mil_rank/civ/civ, - /datum/mil_rank/civ/contractor, - /datum/mil_rank/civ/synthetic, - /datum/mil_rank/civ/exo_synth - ) - - spawn_rank_types = list( - /datum/mil_rank/civ/civ, - /datum/mil_rank/civ/contractor, - /datum/mil_rank/civ/synthetic, - /datum/mil_rank/civ/exo_synth - ) - -/datum/mil_branch/solgov - name = "SolGov Employee" - name_short = "SCG" - email_domain = "torch.scg" - - rank_types = list( - /datum/mil_rank/sol/gov, - /datum/mil_rank/sol/junior_agent, - /datum/mil_rank/sol/duty_agent, - /datum/mil_rank/sol/agent, - /datum/mil_rank/sol/senior_agent, - /datum/mil_rank/sol/inspector_agent, - /datum/mil_rank/sol/curator_agent, - /datum/mil_rank/sol/deputy_agent, - /datum/mil_rank/sol/director_agent, - /datum/mil_rank/sol/scientist - ) - - spawn_rank_types = list( - /datum/mil_rank/sol/gov, - /datum/mil_rank/sol/junior_agent, - /datum/mil_rank/sol/duty_agent, - /datum/mil_rank/sol/agent, - /datum/mil_rank/sol/senior_agent, - /datum/mil_rank/sol/inspector_agent, - /datum/mil_rank/sol/curator_agent, - /datum/mil_rank/sol/deputy_agent, - /datum/mil_rank/sol/director_agent, - /datum/mil_rank/sol/scientist - ) - -/datum/mil_rank/grade() - . = ..() - if(!sort_order) - return "" - if(sort_order <= 10) - return "E[sort_order]" - return "O[sort_order - 10]" -/* - * Fleet - * ===== - */ - -/datum/mil_rank/fleet/e1 - name = "Crewman Recruit" - name_short = "CR" - accessory = list(/obj/item/clothing/accessory/solgov/rank/fleet/enlisted, /obj/item/clothing/accessory/solgov/specialty/enlisted) - sort_order = 1 - -/datum/mil_rank/fleet/e2 - name = "Crewman Apprentice" - name_short = "CA" - accessory = list(/obj/item/clothing/accessory/solgov/rank/fleet/enlisted/e2, /obj/item/clothing/accessory/solgov/specialty/enlisted) - sort_order = 2 - -/datum/mil_rank/fleet/e3 - name = "Crewman" - name_short = "CN" - accessory = list(/obj/item/clothing/accessory/solgov/rank/fleet/enlisted/e3, /obj/item/clothing/accessory/solgov/specialty/enlisted) - sort_order = 3 - -/datum/mil_rank/fleet/e4 - name = "Petty Officer Third Class" - name_short = "PO3" - accessory = list(/obj/item/clothing/accessory/solgov/rank/fleet/enlisted/e4, /obj/item/clothing/accessory/solgov/specialty/enlisted) - sort_order = 4 - -/datum/mil_rank/fleet/e5 - name = "Petty Officer Second Class" - name_short = "PO2" - accessory = list(/obj/item/clothing/accessory/solgov/rank/fleet/enlisted/e5, /obj/item/clothing/accessory/solgov/specialty/enlisted) - sort_order = 5 - -/datum/mil_rank/fleet/e6 - name = "Petty Officer First Class" - name_short = "PO1" - accessory = list(/obj/item/clothing/accessory/solgov/rank/fleet/enlisted/e6, /obj/item/clothing/accessory/solgov/specialty/enlisted) - sort_order = 6 - -/datum/mil_rank/fleet/e7 - name = "Chief Petty Officer" - name_short = "CPO" - accessory = list(/obj/item/clothing/accessory/solgov/rank/fleet/enlisted/e7, /obj/item/clothing/accessory/solgov/specialty/enlisted) - sort_order = 7 - -/datum/mil_rank/fleet/e8 - name = "Senior Chief Petty Officer" - name_short = "SCPO" - accessory = list(/obj/item/clothing/accessory/solgov/rank/fleet/enlisted/e8, /obj/item/clothing/accessory/solgov/specialty/enlisted) - sort_order = 8 - -/datum/mil_rank/fleet/e9 - name = "Master Chief Petty Officer" - name_short = "MCPO" - accessory = list(/obj/item/clothing/accessory/solgov/rank/fleet/enlisted/e9, /obj/item/clothing/accessory/solgov/specialty/enlisted) - sort_order = 9 - -/datum/mil_rank/fleet/e9_alt1 - name = "Command Master Chief Petty Officer" - name_short = "CMCPO" - accessory = list(/obj/item/clothing/accessory/solgov/rank/fleet/enlisted/e9_alt1, /obj/item/clothing/accessory/solgov/specialty/enlisted) - sort_order = 9 - -/datum/mil_rank/fleet/e9_alt2 - name = "Fleet Master Chief Petty Officer" - name_short = "FLTCM" - accessory = list(/obj/item/clothing/accessory/solgov/rank/fleet/enlisted/e9_alt2, /obj/item/clothing/accessory/solgov/specialty/enlisted) - sort_order = 9 - -/datum/mil_rank/fleet/e9_alt3 - name = "Force Master Chief Petty Officer" - name_short = "FORCM" - accessory = list(/obj/item/clothing/accessory/solgov/rank/fleet/enlisted/e9_alt3, /obj/item/clothing/accessory/solgov/specialty/enlisted) - sort_order = 9 - -/datum/mil_rank/fleet/e9_alt4 - name = "Master Chief Petty Officer of the Fleet" - name_short = "MCPOF" - accessory = list(/obj/item/clothing/accessory/solgov/rank/fleet/enlisted/e9_alt4, /obj/item/clothing/accessory/solgov/specialty/enlisted) - sort_order = 9 - -/datum/mil_rank/fleet/o1 - name = "Ensign" - name_short = "ENS" - accessory = list(/obj/item/clothing/accessory/solgov/rank/fleet/officer, /obj/item/clothing/accessory/solgov/specialty/officer) - sort_order = 11 - -/datum/mil_rank/fleet/o2 - name = "Sub-lieutenant" - name_short = "SLT" - accessory = list(/obj/item/clothing/accessory/solgov/rank/fleet/officer/o2, /obj/item/clothing/accessory/solgov/specialty/officer) - sort_order = 12 - -/datum/mil_rank/fleet/o3 - name = "Lieutenant" - name_short = "LT" - accessory = list(/obj/item/clothing/accessory/solgov/rank/fleet/officer/o3, /obj/item/clothing/accessory/solgov/specialty/officer) - sort_order = 13 - -/datum/mil_rank/fleet/o4 - name = "Lieutenant Commander" - name_short = "LCDR" - accessory = list(/obj/item/clothing/accessory/solgov/rank/fleet/officer/o4, /obj/item/clothing/accessory/solgov/specialty/officer) - sort_order = 14 - -/datum/mil_rank/fleet/o5 - name = "Commander" - name_short = "CDR" - accessory = list(/obj/item/clothing/accessory/solgov/rank/fleet/officer/o5, /obj/item/clothing/accessory/solgov/specialty/officer) - sort_order = 15 - -/datum/mil_rank/fleet/o6 - name = "Captain" - name_short = "CAPT" - accessory = list(/obj/item/clothing/accessory/solgov/rank/fleet/officer/o6, /obj/item/clothing/accessory/solgov/specialty/officer) - sort_order = 16 - -/datum/mil_rank/fleet/o7 - name = "Commodore" - name_short = "CDRE" - accessory = list(/obj/item/clothing/accessory/solgov/rank/fleet/flag, /obj/item/clothing/accessory/solgov/specialty/officer) - sort_order = 17 - -/datum/mil_rank/fleet/o8 - name = "Rear Admiral" - name_short = "RADM" - accessory = list(/obj/item/clothing/accessory/solgov/rank/fleet/flag/o8, /obj/item/clothing/accessory/solgov/specialty/officer) - sort_order = 18 - -/datum/mil_rank/fleet/o9 - name = "Vice Admiral" - name_short = "VADM" - accessory = list(/obj/item/clothing/accessory/solgov/rank/fleet/flag/o9, /obj/item/clothing/accessory/solgov/specialty/officer) - sort_order = 19 - -/datum/mil_rank/fleet/o10 - name = "Admiral" - name_short = "ADM" - accessory = list(/obj/item/clothing/accessory/solgov/rank/fleet/flag/o10, /obj/item/clothing/accessory/solgov/specialty/officer) - sort_order = 20 - -/datum/mil_rank/fleet/o10_alt - name = "Fleet Admiral" - name_short = "FADM" - accessory = list(/obj/item/clothing/accessory/solgov/rank/fleet/flag/o10_alt, /obj/item/clothing/accessory/solgov/specialty/officer) - sort_order = 20 - - -/* - * EC - * ===== - */ -/datum/mil_rank/ec/e1 - name = "Apprentice Explorer" - name_short = "AXPL" - accessory = list(/obj/item/clothing/accessory/solgov/rank/ec/enlisted) - sort_order = 1 - -/datum/mil_rank/ec/e3 - name = "Explorer" - name_short = "XPL" - accessory = list(/obj/item/clothing/accessory/solgov/rank/ec/enlisted/e3) - sort_order = 3 - -/datum/mil_rank/ec/e5 - name = "Senior Explorer" - name_short = "SXPL" - accessory = list(/obj/item/clothing/accessory/solgov/rank/ec/enlisted/e5) - sort_order = 5 - -/datum/mil_rank/ec/e7 - name = "Chief Explorer" - name_short = "CXPL" - accessory = list(/obj/item/clothing/accessory/solgov/rank/ec/enlisted/e7) - sort_order = 7 - -/datum/mil_rank/ec/o1 - name = "Ensign" - name_short = "ENS" - accessory = list(/obj/item/clothing/accessory/solgov/rank/ec/officer) - sort_order = 11 - -/datum/mil_rank/ec/o3 - name = "Lieutenant" - name_short = "LT" - accessory = list(/obj/item/clothing/accessory/solgov/rank/ec/officer/o3) - sort_order = 13 - -/datum/mil_rank/ec/o5 - name = "Commander" - name_short = "CDR" - accessory = list(/obj/item/clothing/accessory/solgov/rank/ec/officer/o5) - sort_order = 15 - -/datum/mil_rank/ec/o6 - name = "Captain" - name_short = "CAPT" - accessory = list(/obj/item/clothing/accessory/solgov/rank/ec/officer/o6) - sort_order = 16 - -/datum/mil_rank/ec/o8 - name = "Admiral" - name_short = "ADM" - accessory = list(/obj/item/clothing/accessory/solgov/rank/ec/officer/o8) - sort_order = 18 - -/datum/mil_rank/ec/o10 - name = "Commandant of the Expeditionary Corps" - name_short = "COEC" - accessory = list(/obj/item/clothing/accessory/solgov/rank/ec/officer/o10) - sort_order = 20 - -/* - * Army - * ==== - */ -/datum/mil_rank/army/e1 - name = "Private" - name_short = "PVT" - accessory = list(/obj/item/clothing/accessory/solgov/rank/army/enlisted) - sort_order = 1 - -/datum/mil_rank/army/e2 - name = "Private First Class" - name_short = "PFC" - accessory = list(/obj/item/clothing/accessory/solgov/rank/army/enlisted/e2) - sort_order = 2 - -/datum/mil_rank/army/e3 - name = "Lance Corporal" - name_short = "LCPL" - accessory = list(/obj/item/clothing/accessory/solgov/rank/army/enlisted/e3) - sort_order = 3 - -/datum/mil_rank/army/e4_alt - name = "Corporal" - name_short = "CPL" - accessory = list(/obj/item/clothing/accessory/solgov/rank/army/enlisted/e4_alt) - sort_order = 4 - -/datum/mil_rank/army/e5 - name = "Sergeant" - name_short = "SGT" - accessory = list(/obj/item/clothing/accessory/solgov/rank/army/enlisted/e5) - sort_order = 5 - -/datum/mil_rank/army/e6 - name = "Staff Sergeant" - name_short = "SSGT" - accessory = list(/obj/item/clothing/accessory/solgov/rank/army/enlisted/e6) - sort_order = 6 - -/datum/mil_rank/army/e7 - name = "Gunnery Sergeant" - name_short = "GYSGT" - accessory = list(/obj/item/clothing/accessory/solgov/rank/army/enlisted/e7) - sort_order = 7 - -/datum/mil_rank/army/e7_meme - name = "Gaming Sergeant" - name_short = "GmSGT" - accessory = list(/obj/item/clothing/accessory/solgov/rank/army/enlisted/e7_meme) - sort_order = 7 - -/datum/mil_rank/army/e8 - name = "Master Sergeant" - name_short = "MSGT" - accessory = list(/obj/item/clothing/accessory/solgov/rank/army/enlisted/e8) - sort_order = 8 - -/datum/mil_rank/army/e8_alt - name = "First Sergeant" - name_short = "1SGT" - accessory = list(/obj/item/clothing/accessory/solgov/rank/army/enlisted/e8_alt) - sort_order = 8 - -/datum/mil_rank/army/e9 - name = "Sergeant Major" - name_short = "SGTMaj" - accessory = list(/obj/item/clothing/accessory/solgov/rank/army/enlisted/e9) - sort_order = 9 - -/datum/mil_rank/army/e9_alt1 - name = "Master Gunnery Sergeant" - name_short = "MGySGT" - accessory = list(/obj/item/clothing/accessory/solgov/rank/army/enlisted/e9_alt1) - sort_order = 9 - -/datum/mil_rank/army/e9_meme - name = "Master Gaming Sergeant" - name_short = "MGmSGT" - accessory = list(/obj/item/clothing/accessory/solgov/rank/army/enlisted/e9_meme) - sort_order = 9 - -/datum/mil_rank/army/e9_alt2 - name = "Sergeant Major of the Corps" - name_short = "SgtMajMarCor" - accessory = list(/obj/item/clothing/accessory/solgov/rank/army/enlisted/e9_alt2) - sort_order = 9 - -/datum/mil_rank/army/o1 - name = "Second Lieutenant" - name_short = "2LT" - accessory = list(/obj/item/clothing/accessory/solgov/rank/army/officer) - sort_order = 11 - -/datum/mil_rank/army/o2 - name = "First Lieutenant" - name_short = "1LT" - accessory = list(/obj/item/clothing/accessory/solgov/rank/army/officer/o2) - sort_order = 12 - -/datum/mil_rank/army/o3 - name = "Marine Captain" - name_short = "MCPT" - accessory = list(/obj/item/clothing/accessory/solgov/rank/army/officer/o3) - sort_order = 13 - -/datum/mil_rank/army/o4 - name = "Major" - name_short = "MAJ" - accessory = list(/obj/item/clothing/accessory/solgov/rank/army/officer/o4) - sort_order = 14 - -/datum/mil_rank/army/o5 - name = "Lieutenant Colonel" - name_short = "LTC" - accessory = list(/obj/item/clothing/accessory/solgov/rank/army/officer/o5) - sort_order = 15 - -/datum/mil_rank/army/o6 - name = "Colonel" - name_short = "COL" - accessory = list(/obj/item/clothing/accessory/solgov/rank/army/officer/o6) - sort_order = 16 - -/datum/mil_rank/army/o7 - name = "Brigadier General" - name_short = "BGen" - accessory = list(/obj/item/clothing/accessory/solgov/rank/army/flag) - sort_order = 17 - -/datum/mil_rank/army/o8 - name = "Major General" - name_short = "MajGen" - accessory = list(/obj/item/clothing/accessory/solgov/rank/army/flag/o8) - sort_order = 18 - -/datum/mil_rank/army/o9 - name = "Lieutenant General" - name_short = "LTG" - accessory = list(/obj/item/clothing/accessory/solgov/rank/army/flag/o9) - sort_order = 19 - -/datum/mil_rank/army/o10 - name = "General" - name_short = "GEN" - accessory = list(/obj/item/clothing/accessory/solgov/rank/army/flag/o10) - sort_order = 20 - -/datum/mil_rank/army/o10_alt - name = "General of the Marine Corps" - name_short = "GenMarCor" - accessory = list(/obj/item/clothing/accessory/solgov/rank/army/flag/o10_alt) - sort_order = 20 - -/* - * Civilians - * ========= - */ - -/datum/mil_rank/civ/civ - name = "Civilian" - name_short = "Civ" - -/datum/mil_rank/civ/contractor - name = "Contractor" - name_short = "Civ" - -/datum/mil_rank/civ/synthetic - name = "Synthetic" - name_short = "Synth" - -/datum/mil_rank/civ/exo_synth - name = "EXO Synthetic" - name_short = "Synth" - accessory = list(/obj/item/clothing/accessory/badge/solgov/synthetic) - -/datum/mil_rank/civ/exo_synth - name = "EXO Synthetic" - accessory = list(/obj/item/clothing/accessory/badge/solgov/synthetic) - -/* - * SolGov Employees - * ====== ========= - */ - -/datum/mil_rank/sol/gov - name = "SolGov Representative" - name_short = "SGR" - accessory = list(/obj/item/clothing/accessory/badge/solgov/representative) - -/datum/mil_rank/sol/junior_agent //Proxima - name = "SFP Junior Agent" - name_short = "JAGT" - accessory = list(/obj/item/clothing/accessory/badge/junior_agent) - -/datum/mil_rank/sol/duty_agent //Proxima - name = "SFP Duty Agent" - name_short = "DAGT" - accessory = list(/obj/item/clothing/accessory/badge/deputy_agent) - -/datum/mil_rank/sol/agent - name = "SFP Agent" - name_short = "AGT" - accessory = list(/obj/item/clothing/accessory/badge/agent) - -/datum/mil_rank/sol/senior_agent //Proxima - name = "SFP Senior Agent" - name_short = "SAGT" - accessory = list(/obj/item/clothing/accessory/badge/senior_agent) - -/datum/mil_rank/sol/inspector_agent //Proxima - name = "SFP Agent Inspector" - name_short = "AGTI" - accessory = list(/obj/item/clothing/accessory/badge/inspector_agent) - -/datum/mil_rank/sol/curator_agent //Proxima - name = "SFP Supervisory Agent" - name_short = "SUPAGT" - accessory = list(/obj/item/clothing/accessory/badge/curator_agent) - -/datum/mil_rank/sol/deputy_agent //Proxima - name = "SFP Deputy Director" - name_short = "DDIR" - accessory = list(/obj/item/clothing/accessory/badge/deputy_agent) - -/datum/mil_rank/sol/director_agent //Proxima - name = "SFP Director" - name_short = "DIR" - accessory = list(/obj/item/clothing/accessory/badge/director_agent) - -/datum/mil_rank/sol/scientist - name = "Government Scientist" - name_short = "GOVT" - -// Vox/foreign alien branch. -/datum/mil_branch/alien - name = "Alien" - name_short = "Alien" - rank_types = list(/datum/mil_rank/alien) - spawn_rank_types = list(/datum/mil_rank/alien) - -/datum/mil_rank/alien - name = "Alien" diff --git a/maps/torch/torch_security_state.dm b/maps/torch/torch_security_state.dm deleted file mode 100644 index b21d311441d64..0000000000000 --- a/maps/torch/torch_security_state.dm +++ /dev/null @@ -1,182 +0,0 @@ -#ifndef PSI_IMPLANT_AUTOMATIC -#define PSI_IMPLANT_AUTOMATIC "Security Level Derived" -#endif -#ifndef PSI_IMPLANT_SHOCK -#define PSI_IMPLANT_SHOCK "Issue Neural Shock" -#endif -#ifndef PSI_IMPLANT_WARN -#define PSI_IMPLANT_WARN "Issue Reprimand" -#endif -#ifndef PSI_IMPLANT_LOG -#define PSI_IMPLANT_LOG "Log Incident" -#endif -#ifndef PSI_IMPLANT_DISABLED -#define PSI_IMPLANT_DISABLED "Disabled" -#endif - -/datum/map/torch // setting the map to use this list - security_state = /decl/security_state/default/torchdept - -//Torch map alert levels. Refer to security_state.dm. -/decl/security_state/default/torchdept - all_security_levels = list(/decl/security_level/default/torchdept/code_green, /decl/security_level/default/torchdept/code_violet, /decl/security_level/default/torchdept/code_orange, /decl/security_level/default/torchdept/code_blue, /decl/security_level/default/torchdept/code_red, /decl/security_level/default/torchdept/code_delta) - -/decl/security_level/default/torchdept - icon = 'maps/torch/icons/security_state.dmi' - -/decl/security_level/default/torchdept/code_green - name = "Зелёный код" - icon = 'icons/misc/security_state.dmi' - alarm_level = "off" - - light_max_bright = 0.25 - light_inner_range = 0.1 - light_outer_range = 1 - light_color_alarm = COLOR_GREEN - light_color_status_display = COLOR_GREEN - - overlay_alarm = "alarm_green" - overlay_status_display = "status_display_green" - alert_border = "alert_border_green" - - var/static/datum/announcement/priority/security/security_announcement_green = new(do_log = 0, do_newscast = 1, new_sound = sound('sound/misc/notice2.ogg')) - -/decl/security_level/default/torchdept/code_green/switching_down_to() - security_announcement_green.Announce("Все угрозы для судна и его экипажа были устранены. \ - Персоналу следует вернуться к выполнению рабочих обязанностей в штатном режиме.") - notify_station() - -/decl/security_level/default/torchdept/code_violet - name = "Фиолетовый код" - alarm_level = "on" - - light_max_bright = 0.5 - light_inner_range = 1 - light_outer_range = 2 - light_color_alarm = COLOR_VIOLET - light_color_status_display = COLOR_VIOLET - - psionic_control_level = PSI_IMPLANT_LOG - - overlay_alarm = "alarm_violet" - overlay_status_display = "status_display_violet" - alert_border = "alert_border_violet" - - up_description = "На судне обнаружена серьёзная медицинская угроза. \ - Всему медицинскому персоналу требуется обратиться к вышестоящим сотрудникам для получения инструкций. \ - Не-медицинскому персоналу следует выполнять инструкции от медицинского персонала." - - down_description = "На судне обнаружена серьёзная медицинская угроза. \ - Всему медицинскому персоналу требуется обратиться к вышестоящим сотрудникам для получения инструкций. \ - Не-медицинскому персоналу следует выполнять инструкции от медицинского персонала." - -/decl/security_level/default/torchdept/code_orange - name = "Оранжевый код" - alarm_level = "on" - - light_max_bright = 0.5 - light_inner_range = 1 - light_outer_range = 2 - light_color_alarm = COLOR_ORANGE - light_color_status_display = COLOR_ORANGE - overlay_alarm = "alarm_orange" - overlay_status_display = "status_display_orange" - alert_border = "alert_border_orange" - - psionic_control_level = PSI_IMPLANT_LOG - - up_description = "Судно имеет серьёзные структурные повреждения, а также испытывает отказы множества систем. \ - Всему инженерному персоналу требуется обратиться к вышестоящим сотрудникам для получения инструкций. \ - Весь не-инженерный персонал должен покинуть затронутые повреждениями отсеки. Рекомендуется ношение скафандров и \ - следование указаниям инженерного персонала." - - down_description = "Судно имеет серьёзные структурные повреждения, а также испытывает отказы множества систем. \ - Всему инженерному персоналу требуется обратиться к вышестоящим сотрудникам для получения инструкций. \ - Весь не-инженерный персонал должен покинуть затронутые повреждениями отсеки. Рекомендуется ношение скафандров и \ - следование указаниям инженерного персонала." - -/decl/security_level/default/torchdept/code_blue - name = "Cиний код" - icon = 'icons/misc/security_state.dmi' - alarm_level = "on" - - light_max_bright = 0.5 - light_inner_range = 1 - light_outer_range = 2 - light_color_alarm = COLOR_NAVY_BLUE - light_color_status_display = COLOR_BLUE - overlay_alarm = "alarm_blue" - overlay_status_display = "status_display_blue" - alert_border = "alert_border_blue" - - psionic_control_level = PSI_IMPLANT_LOG - - up_description = "На борту судна предположительно присутствует угроза безопасности для экипажа и самого судна. \ - Всей охране требуется обратиться к вышестоящим сотрудникам для получения указаний; \ - разрешено обыскивать сотрудников и отсеки, а так же держать оружие на виду." - - down_description = "Прямая угроза экипажу и судну отстуствует. На судне всё ещё может оставаться угроза безопасности для экипажа и самого судна. \ - Всей охране требуется обратиться к вышестоящим сотрудникам для получения указаний; \ - разрешено обыскивать сотрудников и отсеки, а так же держать оружие на виду." - -/decl/security_level/default/torchdept/code_red - name = "Красный код" - icon = 'icons/misc/security_state.dmi' - alarm_level = "on" - - light_max_bright = 0.75 - light_inner_range = 1 - light_outer_range = 3 - light_color_alarm = COLOR_RED - light_color_status_display = COLOR_RED - overlay_alarm = "alarm_red" - overlay_status_display = "status_display_red" - alert_border = "alert_border_red" - psionic_control_level = PSI_IMPLANT_DISABLED - - up_description = "Присутствует прямая угроза безопасности для экипажа и самого судна. \ - Весь экипаж должен обратиться к командующему составу для получения инструкций. \ - Охране разрешено обыскивать сотрудников и отсеки, а так же держать оружие на виду. Все убежища были разблокированы." - - var/static/datum/announcement/priority/security/security_announcement_red = new(do_log = 0, do_newscast = 1, new_sound = sound('sound/misc/redalert1.ogg')) - -/decl/security_level/default/torchdept/code_red/switching_up_to() - security_announcement_red.Announce(up_description, "Внимание! Красный код!") - notify_station() - GLOB.using_map.toggle_crew_sensors(3) - GLOB.using_map.unbolt_saferooms() - -/decl/security_level/default/torchdept/code_red/switching_down_to() - security_announcement_red.Announce("Код Дельта был отключён. \ - Весь экипаж должен обратиться к командующему составу для получения инструкций. \ - Охране разрешено обыскивать сотрудников и отсеки, а так же держать оружие на виду.") - notify_station() - GLOB.using_map.toggle_crew_sensors(3) - -/decl/security_level/default/torchdept/code_delta - name = "код Дельта" - icon = 'icons/misc/security_state.dmi' - alarm_level = "on" - - light_max_bright = 0.75 - light_inner_range = 0.1 - light_outer_range = 3 - light_color_alarm = COLOR_RED - light_color_status_display = COLOR_NAVY_BLUE - - overlay_alarm = "alarm_delta" - overlay_status_display = "status_display_delta" - alert_border = "alert_border_delta" - - var/static/datum/announcement/priority/security/security_announcement_delta = new(do_log = 0, do_newscast = 1, new_sound = sound('sound/effects/siren.ogg')) - -/decl/security_level/default/torchdept/code_delta/switching_up_to() - security_announcement_delta.Announce("Процедуры кода Дельта вступили в силу. Весь экипаж обязан выполнять все приказы, данные командующим составом. Любое нарушение этих приказов карается смертью. Это не учебная тревога.", "Внимание! Код Дельта!") - notify_station() - GLOB.using_map.toggle_crew_sensors(3) - -#undef PSI_IMPLANT_AUTOMATIC -#undef PSI_IMPLANT_SHOCK -#undef PSI_IMPLANT_WARN -#undef PSI_IMPLANT_LOG -#undef PSI_IMPLANT_DISABLED diff --git a/maps/torch/torch_setup.dm b/maps/torch/torch_setup.dm deleted file mode 100644 index 52be4c9af4848..0000000000000 --- a/maps/torch/torch_setup.dm +++ /dev/null @@ -1,50 +0,0 @@ -/datum/map/torch/setup_map() - ..() - system_name = generate_system_name() - minor_announcement = new(new_sound = sound('sound/AI/torch/commandreport.ogg', volume = 45)) - -/datum/map/torch/get_map_info() - . = list() - . += "Вы находитесь на борту " + replacetext_char("[station_name]", "\improper", "") + ", космического корабля Экспедиционного Корпуса. Его главная цель - поиск разумной жизни, а также разведка систем, встречаемых по пути. \ - Судно укомплектовано государственным персоналом из ЦПСС, а также нанятыми контрактниками. \ - Эта часть космоса является неизученной, и находится далеко от территории ЦПСС. Вы можете встретить различные аванпосты или дрейфующие корабли, но ни одно из признанных государств не претендует на эти территории." - return jointext(., "
              ") - -/datum/map/torch/send_welcome() - var/obj/effect/overmap/visitable/ship/torch = SSshuttle.ship_by_type(/obj/effect/overmap/visitable/ship/torch) - - var/welcome_text = "

              ГЭК \"Факел\" Показания сенсоров:
              " - welcome_text += "Отчёт сгенирирован [stationdate2text()] в [stationtime2text()]


              " - welcome_text += "
              Текущая система:
              [torch ? system_name : "Unknown"]

              " - - if (torch) //If the overmap is disabled, it's possible for there to be no torch. - var/list/space_things = list() - welcome_text += "Текущие координаты:
              [torch.x]:[torch.y]

              " - welcome_text += "Следующая система для прыжка:
              [generate_system_name()]

              " - welcome_text += "Дней до Солнечной Системы:
              [rand(15,45)] days

              " - welcome_text += "Дней с последнего визита в порт:
              [rand(60,180)] days

              " - welcome_text += "Результаты сканирования показали следующие потенциальные объекты для исследования:
              " - - for(var/zlevel in map_sectors) - var/obj/effect/overmap/visitable/O = map_sectors[zlevel] - if(O.name == torch.name) - continue - if(istype(O, /obj/effect/overmap/visitable/ship/landable)) //Don't show shuttles - continue - if (O.hide_from_reports) - continue - space_things |= O - - for(var/obj/effect/overmap/visitable/O in space_things) - var/location_desc = " at present co-ordinates." - if(O.loc != torch.loc) - var/bearing = round(90 - Atan2(O.x - torch.x, O.y - torch.y),5) //fucking triangles how do they work - if(bearing < 0) - bearing += 360 - location_desc = ", bearing [bearing]." - welcome_text += "
            • \A [O.name][location_desc]
            • " - - welcome_text += "
              " - - post_comm_message("SEV Torch Sensor Readings", welcome_text) - minor_announcement.Announce(message = "New [GLOB.using_map.company_name] Update available at all communication consoles.") diff --git a/maps/torch/torch_shuttles.dm b/maps/torch/torch_shuttles.dm deleted file mode 100644 index bd6da0ad181b0..0000000000000 --- a/maps/torch/torch_shuttles.dm +++ /dev/null @@ -1,483 +0,0 @@ -//Some helpers because so much copypasta for pods -/datum/shuttle/autodock/ferry/escape_pod/torchpod - category = /datum/shuttle/autodock/ferry/escape_pod/torchpod - sound_takeoff = 'sound/effects/rocket.ogg' - sound_landing = 'sound/effects/rocket_backwards.ogg' - warmup_time = 10 - -/obj/effect/shuttle_landmark/escape_pod/start - name = "Docked" - base_turf = /turf/simulated/floor/reinforced/airless - -/obj/effect/shuttle_landmark/escape_pod/transit - name = "In transit" - -/obj/effect/shuttle_landmark/escape_pod/out - name = "Escaped" - -//Pods -#define TORCH_ESCAPE_POD(NUMBER) \ -/datum/shuttle/autodock/ferry/escape_pod/torchpod/escape_pod##NUMBER { \ - shuttle_area = /area/shuttle/escape_pod##NUMBER/station; \ - name = "Escape Pod " + #NUMBER; \ - dock_target = "escape_pod_" + #NUMBER; \ - arming_controller = "escape_pod_"+ #NUMBER +"_berth"; \ - waypoint_station = "escape_pod_"+ #NUMBER +"_start"; \ - landmark_transition = "escape_pod_"+ #NUMBER +"_internim"; \ - waypoint_offsite = "escape_pod_"+ #NUMBER +"_out"; \ -} \ -/obj/effect/shuttle_landmark/escape_pod/start/pod##NUMBER { \ - landmark_tag = "escape_pod_"+ #NUMBER +"_start"; \ - docking_controller = "escape_pod_"+ #NUMBER +"_berth"; \ -} \ -/obj/effect/shuttle_landmark/escape_pod/out/pod##NUMBER { \ - landmark_tag = "escape_pod_"+ #NUMBER +"_internim"; \ -} \ -/obj/effect/shuttle_landmark/escape_pod/transit/pod##NUMBER { \ - landmark_tag = "escape_pod_"+ #NUMBER +"_out"; \ -} - -TORCH_ESCAPE_POD(6) -TORCH_ESCAPE_POD(7) -TORCH_ESCAPE_POD(8) -TORCH_ESCAPE_POD(9) -TORCH_ESCAPE_POD(10) -TORCH_ESCAPE_POD(11) -TORCH_ESCAPE_POD(12) -TORCH_ESCAPE_POD(13) -TORCH_ESCAPE_POD(15) -TORCH_ESCAPE_POD(16) -TORCH_ESCAPE_POD(17) - -//Petrov - -/datum/shuttle/autodock/ferry/petrov - name = "Petrov" - warmup_time = 10 - dock_target = "petrov_shuttle_airlock" - waypoint_station = "nav_petrov_start" - waypoint_offsite = "nav_petrov_out" - logging_home_tag = "nav_petrov_start" - logging_access = access_petrov_helm - ceiling_type = /turf/simulated/floor/shuttle_ceiling - -/datum/shuttle/autodock/ferry/petrov/New(_name, var/obj/effect/shuttle_landmark/initial_location) - shuttle_area = subtypesof(/area/shuttle/petrov) - ..() - -/obj/effect/shuttle_landmark/petrov/start - name = "First Deck" - landmark_tag = "nav_petrov_start" - docking_controller = "petrov_shuttle_dock_airlock" - -/obj/effect/shuttle_landmark/petrov/out - name = "Space near the ship" - landmark_tag = "nav_petrov_out" - -//Ninja Shuttle. -/datum/shuttle/autodock/multi/antag/ninja - destination_tags = list( - "nav_ninja_deck1", - "nav_ninja_deck2", - "nav_ninja_deck3", - "nav_ninja_deck4", - "nav_ninja_deck5", - "nav_ninja_hanger", - "nav_away_6", - "nav_derelict_5", - "nav_cluster_6", - "nav_ninja_start", - "nav_lost_supply_base_antag", - "nav_marooned_antag", - "nav_smugglers_antag", - "nav_magshield_antag", - "nav_casino_antag", - "nav_yacht_antag", - "nav_venera_antag", - "nav_slavers_base_antag" - ) - -/obj/effect/shuttle_landmark/ninja/hanger - name = "West of Hanger Deck" - landmark_tag = "nav_ninja_hanger" - -/obj/effect/shuttle_landmark/ninja/deck1 - name = "South of First Deck" - landmark_tag = "nav_ninja_deck1" - -/obj/effect/shuttle_landmark/ninja/deck2 - name = "Northeast of Second Deck" - landmark_tag = "nav_ninja_deck2" - -/obj/effect/shuttle_landmark/ninja/deck3 - name = "East of Third Deck" - landmark_tag = "nav_ninja_deck3" - -/obj/effect/shuttle_landmark/ninja/deck4 - name = "West of Fourth Deck" - landmark_tag = "nav_ninja_deck4" - -/obj/effect/shuttle_landmark/ninja/deck5 - name = "Southeast of Bridge" - landmark_tag = "nav_ninja_deck5" - -//Merchant - -/datum/shuttle/autodock/ferry/merchant - name = "Merchant" - warmup_time = 10 - shuttle_area = /area/shuttle/merchant/home - waypoint_station = "nav_merchant_start" - waypoint_offsite = "nav_merchant_out" - dock_target = "merchant_ship_dock" - -/obj/effect/shuttle_landmark/merchant/start - name = "Merchant Base" - landmark_tag = "nav_merchant_start" - docking_controller = "merchant_station_dock" - -/obj/effect/shuttle_landmark/merchant/out - name = "Docking Bay" - landmark_tag = "nav_merchant_out" - docking_controller = "merchant_shuttle_station_dock" - -//Admin - -/datum/shuttle/autodock/ferry/administration - name = "Administration" - warmup_time = 10 //want some warmup time so people can cancel. - shuttle_area = /area/shuttle/administration/centcom - dock_target = "admin_shuttle" - waypoint_station = "nav_admin_start" - waypoint_offsite = "nav_admin_out" - -/obj/effect/shuttle_landmark/admin/start - name = "Centcom" - landmark_tag = "nav_admin_start" - docking_controller = "admin_shuttle" - base_area = /area/centcom - base_turf = /turf/simulated/floor/plating - -/obj/effect/shuttle_landmark/admin/out - name = "Docking Bay" - landmark_tag = "nav_admin_out" - docking_controller = "admin_shuttle_dock_airlock" - -//Transport - -/datum/shuttle/autodock/ferry/centcom - name = "Centcom" - location = 1 - warmup_time = 10 - shuttle_area = /area/shuttle/transport1/centcom - dock_target = "centcom_shuttle" - waypoint_offsite = "nav_ferry_start" - waypoint_station = "nav_ferry_out" - -/obj/effect/shuttle_landmark/ferry/start - name = "Centcom" - landmark_tag = "nav_ferry_start" - docking_controller = "centcom_shuttle_bay" - -/obj/effect/shuttle_landmark/ferry/out - name = "Docking Bay" - landmark_tag = "nav_ferry_out" - docking_controller = "centcom_shuttle_dock_airlock" - -/obj/effect/shuttle_landmark/merc/hanger - name = "Northeast of Hanger Deck" - landmark_tag = "nav_merc_hanger" - -/obj/effect/shuttle_landmark/merc/deck1 - name = "Northeast of First Deck" - landmark_tag = "nav_merc_deck1" - -/obj/effect/shuttle_landmark/merc/deck2 - name = "Southeast of the Second deck" - landmark_tag = "nav_merc_deck2" - -/obj/effect/shuttle_landmark/merc/deck3 - name = "South of Third deck" - landmark_tag = "nav_merc_deck3" - -/obj/effect/shuttle_landmark/merc/deck4 - name = "Northwest of Fourth Deck" - landmark_tag = "nav_merc_deck4" - -/obj/effect/shuttle_landmark/merc/deck5 - name = "East of Bridge" - landmark_tag = "nav_merc_deck5" - -/obj/effect/shuttle_landmark/vox_raider/dock - name = "4th Deck, Aft Starboard Airlock" - landmark_tag = "nav_vox_raider_dock" - -//Skipjack -/datum/shuttle/autodock/multi/antag/skipjack - destination_tags = list( - "nav_skipjack_deck1", - "nav_skipjack_deck2", - "nav_skipjack_deck3", - "nav_skipjack_deck4", - "nav_skipjack_deck5", - "nav_skipjack_hanger", - "nav_away_7", - "nav_derelict_7", - "nav_cluster_7", - "nav_skipjack_dock", - "nav_skipjack_start", - "nav_lost_supply_base_antag", - "nav_marooned_antag", - "nav_smugglers_antag", - "nav_magshield_antag", - "nav_casino_antag", - "nav_yacht_antag", - "nav_slavers_base_antag", - ) - -/obj/effect/shuttle_landmark/skipjack/hanger - name = "North of Hanger Deck" - landmark_tag = "nav_skipjack_hanger" - -/obj/effect/shuttle_landmark/skipjack/deck1 - name = "Northwest of First Deck" - landmark_tag = "nav_skipjack_deck1" - -/obj/effect/shuttle_landmark/skipjack/deck2 - name = "Southwest of the Second deck" - landmark_tag = "nav_skipjack_deck2" - -/obj/effect/shuttle_landmark/skipjack/deck3 - name = "Southeast of Third deck" - landmark_tag = "nav_skipjack_deck3" - -/obj/effect/shuttle_landmark/skipjack/deck4 - name = "Northwest of Fourth Deck" - landmark_tag = "nav_skipjack_deck4" - -/obj/effect/shuttle_landmark/skipjack/deck5 - name = "South of Bridge" - landmark_tag = "nav_skipjack_deck5" - -//NT Rescue Shuttle - -/datum/shuttle/autodock/multi/antag/rescue - destination_tags = list( - "nav_ert_deck1", - "nav_ert_deck2", - "nav_ert_deck3", - "nav_ert_deck4", - "nav_ert_deck5", - "nav_ert_hanger", - "nav_away_4", - "nav_derelict_4", - "nav_cluster_4", - "nav_ert_dock", - "nav_ert_start", - "nav_lost_supply_base_antag", - "nav_marooned_antag", - "nav_smugglers_antag", - "nav_magshield_antag", - "nav_casino_antag", - "nav_yacht_antag", - "nav_slavers_base_antag", - ) - -/obj/effect/shuttle_landmark/ert/hanger - name = "Southeast of Hanger deck" - landmark_tag = "nav_ert_hanger" - -/obj/effect/shuttle_landmark/ert/deck1 - name = "Southwest of Fourth deck" - landmark_tag = "nav_ert_deck1" - -/obj/effect/shuttle_landmark/ert/deck2 - name = "Northwest of Third deck" - landmark_tag = "nav_ert_deck2" - -/obj/effect/shuttle_landmark/ert/deck3 - name = "Northwest of Second deck" - landmark_tag = "nav_ert_deck3" - -/obj/effect/shuttle_landmark/ert/deck4 - name = "Southwest of First Deck" - landmark_tag = "nav_ert_deck4" - -/obj/effect/shuttle_landmark/ert/deck5 - name = "West of Bridge" - landmark_tag = "nav_ert_deck5" - -//SCGMC Assault Pod - -/datum/shuttle/autodock/ferry/specops/ert - name = "Special Operations" - warmup_time = 10 - shuttle_area = /area/shuttle/specops/centcom - dock_target = "specops_shuttle_fore" - waypoint_station = "nav_specops_start" - waypoint_offsite = "nav_specops_out" - -/obj/effect/shuttle_landmark/specops/start - name = "Centcom" - landmark_tag = "nav_specops_start" - docking_controller = "specops_shuttle_port" - -/obj/effect/shuttle_landmark/specops/out - name = "Docking Bay" - landmark_tag = "nav_specops_out" - docking_controller = "specops_dock_airlock" - -//Cargo drone - -/datum/shuttle/autodock/ferry/supply/drone - name = "Supply Drone" - location = 1 - warmup_time = 10 - shuttle_area = /area/supply/dock - waypoint_offsite = "nav_cargo_start" - waypoint_station = "nav_cargo_station" - -/obj/effect/shuttle_landmark/supply/centcom - name = "Offsite" - landmark_tag = "nav_cargo_start" - -/obj/effect/shuttle_landmark/supply/station - name = "Hangar" - landmark_tag = "nav_cargo_station" - base_area = /area/quartermaster/hangar - base_turf = /turf/simulated/floor/plating - -/datum/shuttle/autodock/overmap/exploration_shuttle - name = "Charon" - move_time = 60 - shuttle_area = list(/area/exploration_shuttle/cockpit, /area/exploration_shuttle/atmos, /area/exploration_shuttle/power, /area/exploration_shuttle/crew, /area/exploration_shuttle/cargo, /area/exploration_shuttle/airlock, /area/exploration_shuttle/medical, /area/exploration_shuttle/fuel) - dock_target = "charon_shuttle" - current_location = "nav_hangar_charon" - landmark_transition = "nav_transit_charon" - range = 1 - fuel_consumption = 4 - logging_home_tag = "nav_hangar_charon" - logging_access = access_expedition_shuttle_helm - ceiling_type = /turf/simulated/floor/shuttle_ceiling/torch - -/obj/effect/shuttle_landmark/torch/hangar/exploration_shuttle - name = "Charon Hangar" - landmark_tag = "nav_hangar_charon" - base_area = /area/quartermaster/hangar - base_turf = /turf/simulated/floor/plating - -/obj/effect/shuttle_landmark/torch/deck1/exploration_shuttle - name = "Space near Forth Deck" - landmark_tag = "nav_deck1_charon" - -/obj/effect/shuttle_landmark/torch/deck2/exploration_shuttle - name = "Space near Third Deck" - landmark_tag = "nav_deck2_charon" - -/obj/effect/shuttle_landmark/torch/deck3/exploration_shuttle - name = "Space near Second Deck" - landmark_tag = "nav_deck3_charon" - -/obj/effect/shuttle_landmark/torch/deck4/exploration_shuttle - name = "Space near First Deck" - landmark_tag = "nav_deck4_charon" - -/obj/effect/shuttle_landmark/torch/deck5/exploration_shuttle - name = "Space near Bridge" - landmark_tag = "nav_bridge_charon" - -/obj/effect/shuttle_landmark/transit/torch/exploration_shuttle - name = "In transit" - landmark_tag = "nav_transit_charon" - -/datum/shuttle/autodock/overmap/guppy - name = "Guppy" - warmup_time = 5 - move_time = 20 - shuttle_area = /area/guppy_hangar/start - dock_target ="guppy_shuttle" - current_location = "nav_hangar_guppy" - landmark_transition = "nav_transit_guppy" - sound_takeoff = 'sound/effects/rocket.ogg' - sound_landing = 'sound/effects/rocket_backwards.ogg' - fuel_consumption = 2 - logging_home_tag = "nav_hangar_guppy" - logging_access = access_guppy_helm - skill_needed = SKILL_NONE - ceiling_type = /turf/simulated/floor/shuttle_ceiling/torch - -/obj/effect/shuttle_landmark/torch/hangar/guppy - name = "Guppy Hangar" - landmark_tag = "nav_hangar_guppy" - base_area = /area/quartermaster/hangar - base_turf = /turf/simulated/floor/plating - -/obj/effect/shuttle_landmark/torch/deck1/guppy - name = "Space near Forth Deck" - landmark_tag = "nav_deck1_guppy" - -/obj/effect/shuttle_landmark/torch/deck2/guppy - name = "Space near Third Deck" - landmark_tag = "nav_deck2_guppy" - -/obj/effect/shuttle_landmark/torch/deck3/guppy - name = "Space near Second Deck" - landmark_tag = "nav_deck3_guppy" - -/obj/effect/shuttle_landmark/torch/deck4/guppy - name = "Space near First Deck" - landmark_tag = "nav_deck4_guppy" - -/obj/effect/shuttle_landmark/torch/deck5/guppy - name = "Space near Bridge" - landmark_tag = "nav_bridge_guppy" - -/obj/effect/shuttle_landmark/transit/torch/guppy - name = "In transit" - landmark_tag = "nav_transit_guppy" - -/datum/shuttle/autodock/overmap/aquila - name = "Aquila" - move_time = 50 - shuttle_area = list(/area/aquila/cockpit, /area/aquila/power, /area/aquila/storage, /area/aquila/suits, /area/aquila/air, /area/aquila/crew, /area/aquila/medical, /area/aquila/airlock) - current_location = "nav_hangar_aquila" - landmark_transition = "nav_transit_aquila" - dock_target = "aquila_shuttle" - range = 2 - logging_home_tag = "nav_hangar_aquila" - logging_access = access_aquila_helm - ceiling_type = /turf/simulated/floor/shuttle_ceiling/torch - -/obj/effect/shuttle_landmark/torch/hangar/aquila - name = "Aquila Hangar" - landmark_tag = "nav_hangar_aquila" - docking_controller = "aquila_shuttle_dock_airlock" - base_turf = /turf/simulated/floor/reinforced/airless - -/obj/effect/shuttle_landmark/torch/deck1/aquila - name = "Space near Forth Deck" - landmark_tag = "nav_deck1_aquila" - -/obj/effect/shuttle_landmark/torch/deck2/aquila - name = "Space near Third Deck" - landmark_tag = "nav_deck2_aquila" - -/obj/effect/shuttle_landmark/torch/deck3/aquila - name = "Space near Second Deck" - landmark_tag = "nav_deck3_aquila" - -/obj/effect/shuttle_landmark/torch/deck4/aquila - name = "Space near First Deck" - landmark_tag = "nav_deck4_aquila" - -/obj/effect/shuttle_landmark/torch/deck5/aquila - name = "Space near Bridge" - landmark_tag = "nav_bridge_aquila" - -/obj/effect/shuttle_landmark/transit/torch/aquila - name = "In transit" - landmark_tag = "nav_transit_aquila" - -//Makes the deck management program use hangar access -/datum/nano_module/deck_management - default_access = list(access_hangar, access_cargo, access_heads) diff --git a/maps/torch/torch_submaps.dm b/maps/torch/torch_submaps.dm deleted file mode 100644 index 6c373684e8dac..0000000000000 --- a/maps/torch/torch_submaps.dm +++ /dev/null @@ -1,9 +0,0 @@ -/datum/job/submap/voxship_vox - rank = /datum/mil_rank/alien - branch = /datum/mil_branch/alien - allowed_branches = list(/datum/mil_branch/alien) - allowed_ranks = list(/datum/mil_rank/alien) - -/datum/job/submap - psi_latency_chance = 1 - give_psionic_implant_on_join = FALSE diff --git a/maps/torch/torch_turfs.dm b/maps/torch/torch_turfs.dm deleted file mode 100644 index 63c995f8ec5a9..0000000000000 --- a/maps/torch/torch_turfs.dm +++ /dev/null @@ -1,15 +0,0 @@ -/turf/simulated/floor - name = "bare deck" - -/turf/simulated/floor/tiled - name = "deck" - -/decl/flooring/tiling - name = "deck" - - -/turf/simulated/floor/shuttle_ceiling/torch - color = COLOR_SOL - -/turf/simulated/floor/shuttle_ceiling/torch/air - initial_gas = list(GAS_OXYGEN = MOLES_O2STANDARD, GAS_NITROGEN = MOLES_N2STANDARD) diff --git a/maps/torch/torch_unit_testing.dm b/maps/torch/torch_unit_testing.dm deleted file mode 100644 index 0ba3cbaa02e34..0000000000000 --- a/maps/torch/torch_unit_testing.dm +++ /dev/null @@ -1,100 +0,0 @@ -/datum/map/torch - // Unit test exemptions - apc_test_exempt_areas = list( - /area/space = NO_SCRUBBER|NO_VENT|NO_APC, - /area/exoplanet = NO_SCRUBBER|NO_VENT|NO_APC, - /area/engineering/atmos/storage = NO_SCRUBBER|NO_VENT, - /area/engineering/auxpower = NO_SCRUBBER|NO_VENT, - /area/engineering/engine_smes = NO_SCRUBBER|NO_VENT, - /area/engineering/fuelbay = NO_SCRUBBER|NO_VENT, - /area/engineering/wastetank = NO_SCRUBBER|NO_VENT, - /area/hallway/primary/seconddeck/center = NO_SCRUBBER|NO_VENT, - /area/holodeck = NO_SCRUBBER|NO_VENT|NO_APC, - /area/maintenance = NO_SCRUBBER|NO_VENT, - /area/maintenance/auxsolarbridge = NO_SCRUBBER|NO_VENT, - /area/maintenance/auxsolarport = NO_SCRUBBER|NO_VENT, - /area/maintenance/auxsolarstarboard = NO_SCRUBBER|NO_VENT, - /area/torchexterior = NO_SCRUBBER|NO_VENT|NO_APC, - /area/maintenance/firstdeck/foreport = NO_SCRUBBER|NO_VENT, - /area/maintenance/firstdeck/forestarboard = NO_SCRUBBER|NO_VENT, - /area/maintenance/incinerator = NO_SCRUBBER, - /area/maintenance/disposal = NO_SCRUBBER, - /area/maintenance/seconddeck/aftport = NO_SCRUBBER|NO_VENT, - /area/maintenance/seconddeck/forestarboard = NO_SCRUBBER|NO_VENT, - /area/maintenance/thirddeck/aftstarboard = NO_SCRUBBER|NO_VENT, - /area/maintenance/fifthdeck/aftstarboard = NO_SCRUBBER|NO_VENT, - /area/maintenance/waterstore = 0, - /area/shield = NO_SCRUBBER|NO_VENT, - /area/shuttle = NO_SCRUBBER|NO_VENT|NO_APC, - /area/shuttle/merchant = NO_SCRUBBER|NO_APC, - /area/shuttle/petrov = 0, - /area/shuttle/petrov/maint = NO_SCRUBBER|NO_VENT, - /area/shuttle/escape_pod6/station = NO_SCRUBBER|NO_APC|NO_VENT, - /area/shuttle/escape_pod7/station = NO_SCRUBBER|NO_APC|NO_VENT, - /area/shuttle/escape_pod8/station = NO_SCRUBBER|NO_APC|NO_VENT, - /area/shuttle/escape_pod9/station = NO_SCRUBBER|NO_APC|NO_VENT, - /area/shuttle/escape_pod10/station = NO_SCRUBBER|NO_APC|NO_VENT, - /area/shuttle/escape_pod11/station = NO_SCRUBBER|NO_APC|NO_VENT, - /area/solar = NO_SCRUBBER|NO_VENT|NO_APC, - /area/storage = NO_SCRUBBER|NO_VENT, - /area/storage/auxillary/port = 0, - /area/storage/auxillary/starboard = 0, - /area/storage/primary = 0, - /area/storage/tech = 0, - /area/storage/tools = 0, - /area/supply = NO_SCRUBBER|NO_VENT|NO_APC, - /area/thruster = NO_SCRUBBER, - /area/turbolift = NO_SCRUBBER|NO_VENT|NO_APC, - /area/turret_protected/ai = NO_SCRUBBER|NO_VENT, - /area/turret_protected/ai_outer_chamber = NO_SCRUBBER|NO_VENT, - /area/vacant/bar = NO_SCRUBBER|NO_VENT|NO_APC, - /area/vacant = NO_SCRUBBER|NO_VENT|NO_APC, - /area/vacant/brig = NO_SCRUBBER|NO_VENT, - /area/vacant/prototype/control = 0, - /area/vacant/prototype/engine = 0, - /area/vacant/cargo = NO_SCRUBBER|NO_VENT, - /area/vacant/infirmary = NO_SCRUBBER|NO_VENT, - /area/vacant/monitoring = NO_SCRUBBER|NO_VENT, - /area/vacant/mess = NO_SCRUBBER|NO_VENT|NO_APC, - ) - - area_coherency_test_exempt_areas = list( - /area/aquila/airlock, - /area/centcom/control, - /area/torchexterior, - /area/space - ) - - area_usage_test_exempted_areas = list( - /area/overmap, - /area/shuttle/escape/centcom, - /area/shuttle/escape, - /area/security/prison, - /area/shuttle/syndicate_elite/station, - /area/shuttle/escape/centcom, - /area/rnd/xenobiology/xenoflora_storage, - /area/turbolift, - /area/turbolift/start, - /area/turbolift/bridge, - /area/turbolift/firstdeck, - /area/turbolift/seconddeck, - /area/turbolift/thirddeck, - /area/turbolift/fourthdeck, - /area/template_noop - ) - -/datum/unit_test/zas_area_test/ai_chamber - name = "ZAS: AI Chamber" - area_path = /area/turret_protected/ai - -/datum/unit_test/zas_area_test/cargo_bay - name = "ZAS: Cargo Bay" - area_path = /area/quartermaster/storage - -/datum/unit_test/zas_area_test/supply_centcomm - name = "ZAS: Supply Shuttle (CentComm)" - area_path = /area/supply/dock - -/datum/unit_test/zas_area_test/xenobio - name = "ZAS: Xenobiology" - area_path = /area/rnd/xenobiology diff --git a/maps/torch/z1_admin.dmm b/maps/torch/z1_admin.dmm deleted file mode 100644 index 566217d813e97..0000000000000 --- a/maps/torch/z1_admin.dmm +++ /dev/null @@ -1,52410 +0,0 @@ -//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE -"aaa" = ( -/turf/unsimulated/wall, -/area/space) -"aab" = ( -/turf/space, -/area/space) -"aac" = ( -/obj/structure/window/reinforced/crescent, -/turf/unsimulated/wall, -/area/space) -"aad" = ( -/turf/space, -/area/shuttle/syndicate_elite/mothership) -"aae" = ( -/obj/effect/floor_decal/corner/green{ - dir = 5 - }, -/obj/machinery/telecomms/allinone{ - intercept = 1 - }, -/turf/unsimulated/floor{ - icon_state = "steel" - }, -/area/centcom/control) -"aao" = ( -/turf/space, -/area/shuttle/escape_pod1/centcom) -"aap" = ( -/turf/space, -/area/shuttle/escape_pod2/centcom) -"aaq" = ( -/obj/structure/window/reinforced/crescent{ - dir = 4 - }, -/turf/unsimulated/wall, -/area/space) -"aar" = ( -/turf/simulated/floor/holofloor/desert, -/area/holodeck/source_desert) -"aas" = ( -/obj/structure/flora/ausbushes/sparsegrass, -/turf/simulated/floor/holofloor/desert, -/area/holodeck/source_desert) -"aat" = ( -/obj/structure/window/reinforced/crescent{ - dir = 4 - }, -/obj/structure/window/reinforced/crescent{ - dir = 8 - }, -/turf/unsimulated/wall, -/area/space) -"aau" = ( -/obj/structure/flora/ausbushes/ywflowers, -/turf/simulated/floor/holofloor/grass, -/area/holodeck/source_picnicarea) -"aav" = ( -/obj/structure/flora/ausbushes/brflowers, -/turf/simulated/floor/holofloor/grass, -/area/holodeck/source_picnicarea) -"aaw" = ( -/turf/simulated/floor/holofloor/grass, -/area/holodeck/source_picnicarea) -"aax" = ( -/obj/structure/flora/ausbushes/ppflowers, -/turf/simulated/floor/holofloor/grass, -/area/holodeck/source_picnicarea) -"aay" = ( -/obj/structure/table/rack/holorack, -/obj/effect/landmark/costume/chameleon, -/turf/simulated/floor/holofloor/tiled/dark, -/area/holodeck/source_theatre) -"aaz" = ( -/turf/simulated/floor/holofloor/tiled, -/area/holodeck/source_courtroom) -"aaA" = ( -/obj/structure/window/reinforced/holowindow{ - dir = 4 - }, -/obj/structure/flora/pottedplant{ - icon_state = "plant-10" - }, -/turf/simulated/floor/holofloor/tiled, -/area/holodeck/source_courtroom) -"aaB" = ( -/obj/structure/table/holo_woodentable, -/turf/simulated/floor/holofloor/wood, -/area/holodeck/source_courtroom) -"aaC" = ( -/turf/simulated/floor/holofloor/reinforced, -/area/holodeck/source_wildlife) -"aaD" = ( -/turf/simulated/floor/holofloor/reinforced, -/area/holodeck/source_plating) -"aaE" = ( -/turf/simulated/floor/holofloor/tiled/dark, -/area/holodeck/source_emptycourt) -"aaF" = ( -/obj/structure/holostool, -/turf/simulated/floor/holofloor/tiled, -/area/holodeck/source_emptycourt) -"aaG" = ( -/obj/structure/holostool, -/obj/structure/window/reinforced/holowindow{ - dir = 4 - }, -/turf/simulated/floor/holofloor/tiled, -/area/holodeck/source_emptycourt) -"aaH" = ( -/obj/effect/floor_decal/corner/red/three_quarters{ - dir = 8 - }, -/turf/simulated/floor/holofloor/tiled, -/area/holodeck/source_emptycourt) -"aaI" = ( -/obj/effect/floor_decal/corner/red{ - dir = 5 - }, -/turf/simulated/floor/holofloor/tiled, -/area/holodeck/source_emptycourt) -"aaJ" = ( -/obj/effect/floor_decal/corner/red/three_quarters{ - dir = 1 - }, -/turf/simulated/floor/holofloor/tiled, -/area/holodeck/source_emptycourt) -"aaK" = ( -/obj/structure/window/reinforced/crescent{ - dir = 8 - }, -/turf/unsimulated/wall, -/area/space) -"aaQ" = ( -/obj/structure/flora/ausbushes/fullgrass, -/turf/simulated/floor/holofloor/desert, -/area/holodeck/source_desert) -"aaR" = ( -/obj/structure/flora/ausbushes/lavendergrass, -/turf/simulated/floor/holofloor/grass, -/area/holodeck/source_picnicarea) -"aaS" = ( -/obj/structure/flora/ausbushes/sunnybush, -/turf/simulated/floor/holofloor/grass, -/area/holodeck/source_picnicarea) -"aaT" = ( -/turf/simulated/floor/holofloor/tiled/dark, -/area/holodeck/source_theatre) -"aaU" = ( -/obj/machinery/door/window/holowindoor{ - dir = 4 - }, -/turf/simulated/floor/holofloor/tiled, -/area/holodeck/source_courtroom) -"aaV" = ( -/turf/simulated/floor/holofloor/wood, -/area/holodeck/source_courtroom) -"aaW" = ( -/obj/effect/landmark{ - name = "Holocarp Spawn" - }, -/turf/simulated/floor/holofloor/reinforced, -/area/holodeck/source_wildlife) -"aaX" = ( -/obj/effect/floor_decal/corner/red{ - dir = 9 - }, -/turf/simulated/floor/holofloor/tiled, -/area/holodeck/source_emptycourt) -"aaY" = ( -/turf/simulated/floor/holofloor/tiled, -/area/holodeck/source_emptycourt) -"aaZ" = ( -/obj/effect/floor_decal/corner/red{ - dir = 6 - }, -/turf/simulated/floor/holofloor/tiled, -/area/holodeck/source_emptycourt) -"abg" = ( -/obj/structure/flora/ausbushes/fullgrass, -/turf/simulated/floor/holofloor/grass, -/area/holodeck/source_picnicarea) -"abh" = ( -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/holofloor/desert, -/area/holodeck/source_picnicarea) -"abi" = ( -/obj/structure/window/reinforced/holowindow{ - dir = 4 - }, -/turf/simulated/floor/holofloor/tiled, -/area/holodeck/source_courtroom) -"abj" = ( -/obj/structure/bed/chair/holochair, -/turf/simulated/floor/holofloor/wood, -/area/holodeck/source_courtroom) -"abk" = ( -/obj/structure/window/reinforced/holowindow{ - dir = 1 - }, -/obj/structure/window/reinforced/holowindow{ - dir = 8 - }, -/obj/structure/table/holo_woodentable, -/turf/simulated/floor/holofloor/wood, -/area/holodeck/source_courtroom) -"abl" = ( -/obj/structure/window/reinforced/holowindow{ - dir = 1 - }, -/obj/structure/table/holo_woodentable, -/turf/simulated/floor/holofloor/wood, -/area/holodeck/source_courtroom) -"abm" = ( -/obj/machinery/door/window/holowindoor{ - dir = 1; - name = "Jury Box" - }, -/obj/effect/floor_decal/carpet{ - dir = 8 - }, -/obj/effect/floor_decal/carpet{ - dir = 4 - }, -/obj/effect/floor_decal/carpet{ - dir = 1 - }, -/obj/effect/floor_decal/carpet{ - dir = 9 - }, -/obj/effect/floor_decal/carpet{ - dir = 5 - }, -/turf/simulated/floor/holofloor/carpet, -/area/holodeck/source_courtroom) -"abn" = ( -/obj/machinery/door/window/holowindoor{ - dir = 4; - name = "Red Team" - }, -/turf/simulated/floor/holofloor/tiled/dark, -/area/holodeck/source_emptycourt) -"abx" = ( -/obj/structure/shuttle/engine/propulsion{ - dir = 1; - icon_state = "propulsion_r" - }, -/turf/space, -/area/centcom/evac) -"aby" = ( -/obj/structure/shuttle/engine/propulsion{ - dir = 1 - }, -/turf/space, -/area/centcom/evac) -"abz" = ( -/obj/structure/shuttle/engine/propulsion{ - dir = 1; - icon_state = "propulsion_l" - }, -/turf/space, -/area/centcom/evac) -"abB" = ( -/obj/structure/flora/ausbushes/palebush, -/turf/simulated/floor/holofloor/grass, -/area/holodeck/source_picnicarea) -"abC" = ( -/obj/effect/floor_decal/spline/plain{ - dir = 1 - }, -/turf/simulated/floor/holofloor/tiled, -/area/holodeck/source_theatre) -"abD" = ( -/obj/effect/floor_decal/carpet{ - dir = 8 - }, -/obj/effect/floor_decal/carpet{ - dir = 4 - }, -/obj/effect/floor_decal/carpet{ - dir = 1 - }, -/obj/effect/floor_decal/carpet{ - dir = 5 - }, -/obj/effect/floor_decal/carpet{ - dir = 9 - }, -/turf/simulated/floor/holofloor/carpet, -/area/holodeck/source_theatre) -"abE" = ( -/obj/structure/window/reinforced/holowindow, -/obj/machinery/door/window/holowindoor{ - dir = 1; - name = "Court Reporter's Box" - }, -/obj/structure/bed/chair/holochair, -/turf/simulated/floor/holofloor/wood, -/area/holodeck/source_courtroom) -"abF" = ( -/obj/structure/table/holo_woodentable, -/obj/structure/window/reinforced/holowindow, -/obj/structure/window/reinforced/holowindow{ - dir = 8 - }, -/turf/simulated/floor/holofloor/wood, -/area/holodeck/source_courtroom) -"abG" = ( -/obj/structure/table/holo_woodentable, -/obj/structure/window/reinforced/holowindow, -/turf/simulated/floor/holofloor/wood, -/area/holodeck/source_courtroom) -"abH" = ( -/obj/structure/table/holo_woodentable, -/obj/structure/window/reinforced/holowindow, -/obj/structure/window/reinforced/holowindow{ - dir = 4 - }, -/turf/simulated/floor/holofloor/wood, -/area/holodeck/source_courtroom) -"abI" = ( -/obj/structure/window/reinforced/holowindow, -/obj/machinery/door/window/holowindoor{ - base_state = "right"; - dir = 1; - icon_state = "right"; - name = "Witness Box" - }, -/obj/structure/bed/chair/holochair, -/turf/simulated/floor/holofloor/wood, -/area/holodeck/source_courtroom) -"abJ" = ( -/obj/structure/window/reinforced/holowindow{ - dir = 8 - }, -/obj/structure/table/holo_woodentable, -/turf/simulated/floor/holofloor/wood, -/area/holodeck/source_courtroom) -"abK" = ( -/obj/structure/bed/chair/holochair{ - dir = 8 - }, -/obj/effect/floor_decal/carpet{ - dir = 8 - }, -/obj/effect/floor_decal/carpet{ - dir = 1 - }, -/obj/effect/floor_decal/carpet{ - dir = 9 - }, -/turf/simulated/floor/holofloor/carpet, -/area/holodeck/source_courtroom) -"abL" = ( -/obj/structure/bed/chair/holochair{ - dir = 8 - }, -/obj/effect/floor_decal/carpet{ - dir = 4 - }, -/obj/effect/floor_decal/carpet/corners{ - dir = 9 - }, -/turf/simulated/floor/holofloor/carpet, -/area/holodeck/source_courtroom) -"ace" = ( -/obj/machinery/door/airlock/external{ - frequency = 1380; - icon_state = "closed"; - id_tag = "escape_pod_1_recovery_hatch"; - locked = 1; - name = "Recovery Shuttle Dock" - }, -/turf/unsimulated/floor{ - icon = 'icons/turf/shuttle.dmi'; - icon_state = "floor2" - }, -/area/centcom/evac) -"acf" = ( -/obj/machinery/door/airlock/external{ - frequency = 1380; - icon_state = "closed"; - id_tag = "escape_pod_2_recovery_hatch"; - locked = 1; - name = "Recovery Shuttle Dock" - }, -/turf/unsimulated/floor{ - icon = 'icons/turf/shuttle.dmi'; - icon_state = "floor2" - }, -/area/centcom/evac) -"ach" = ( -/turf/simulated/floor/holofloor/tiled, -/area/holodeck/source_theatre) -"aci" = ( -/obj/effect/floor_decal/carpet{ - dir = 8 - }, -/obj/effect/floor_decal/carpet{ - dir = 1 - }, -/obj/effect/floor_decal/carpet{ - dir = 9 - }, -/turf/simulated/floor/holofloor/carpet, -/area/holodeck/source_theatre) -"acj" = ( -/obj/effect/floor_decal/carpet{ - dir = 1 - }, -/turf/simulated/floor/holofloor/carpet, -/area/holodeck/source_theatre) -"ack" = ( -/obj/effect/floor_decal/carpet{ - dir = 4 - }, -/obj/effect/floor_decal/carpet{ - dir = 1 - }, -/obj/effect/floor_decal/carpet{ - dir = 5 - }, -/turf/simulated/floor/holofloor/carpet, -/area/holodeck/source_theatre) -"acl" = ( -/obj/effect/floor_decal/carpet{ - dir = 8 - }, -/obj/effect/floor_decal/carpet{ - dir = 4 - }, -/turf/simulated/floor/holofloor/carpet, -/area/holodeck/source_theatre) -"acm" = ( -/obj/effect/floor_decal/carpet{ - dir = 8 - }, -/obj/effect/floor_decal/carpet{ - dir = 1 - }, -/obj/effect/floor_decal/carpet{ - dir = 9 - }, -/turf/simulated/floor/holofloor/carpet, -/area/holodeck/source_courtroom) -"acn" = ( -/obj/effect/floor_decal/carpet{ - dir = 1 - }, -/turf/simulated/floor/holofloor/carpet, -/area/holodeck/source_courtroom) -"aco" = ( -/obj/effect/floor_decal/carpet{ - dir = 4 - }, -/obj/effect/floor_decal/carpet{ - dir = 1 - }, -/obj/effect/floor_decal/carpet{ - dir = 5 - }, -/turf/simulated/floor/holofloor/carpet, -/area/holodeck/source_courtroom) -"acp" = ( -/obj/structure/bed/chair/holochair{ - dir = 8 - }, -/obj/effect/floor_decal/carpet{ - dir = 8 - }, -/turf/simulated/floor/holofloor/carpet, -/area/holodeck/source_courtroom) -"acq" = ( -/obj/structure/bed/chair/holochair{ - dir = 8 - }, -/obj/effect/floor_decal/carpet{ - dir = 4 - }, -/turf/simulated/floor/holofloor/carpet, -/area/holodeck/source_courtroom) -"acH" = ( -/obj/structure/closet/emcloset, -/turf/unsimulated/floor{ - icon = 'icons/turf/shuttle.dmi'; - icon_state = "floor" - }, -/area/centcom/evac) -"acI" = ( -/obj/machinery/embedded_controller/radio/simple_docking_controller{ - frequency = 1380; - id_tag = "escape_pod_1_recovery"; - pixel_x = 25; - pixel_y = 30; - req_access = list(list("ACCESS_EXTERNAL","ACCESS_TORCH_CREW")); - tag_door = "escape_pod_1_recovery_hatch" - }, -/turf/unsimulated/floor{ - icon = 'icons/turf/shuttle.dmi'; - icon_state = "floor2" - }, -/area/centcom/evac) -"acJ" = ( -/obj/structure/table/standard, -/obj/item/storage/firstaid/toxin{ - pixel_x = -2; - pixel_y = 4 - }, -/obj/item/storage/firstaid/toxin, -/turf/unsimulated/floor{ - icon = 'icons/turf/shuttle.dmi'; - icon_state = "floor" - }, -/area/centcom/evac) -"acK" = ( -/obj/structure/table/standard, -/obj/item/storage/firstaid/fire, -/obj/item/storage/firstaid/fire{ - pixel_x = -2; - pixel_y = 4 - }, -/turf/unsimulated/floor{ - icon = 'icons/turf/shuttle.dmi'; - icon_state = "floor" - }, -/area/centcom/evac) -"acL" = ( -/obj/structure/table/standard, -/obj/item/storage/firstaid/regular{ - pixel_x = 2 - }, -/obj/item/storage/firstaid/regular{ - pixel_x = -2; - pixel_y = 4 - }, -/turf/unsimulated/floor{ - icon = 'icons/turf/shuttle.dmi'; - icon_state = "floor" - }, -/area/centcom/evac) -"acM" = ( -/obj/machinery/embedded_controller/radio/simple_docking_controller{ - frequency = 1380; - id_tag = "escape_pod_2_recovery"; - pixel_x = -25; - pixel_y = 30; - req_access = list(list("ACCESS_EXTERNAL","ACCESS_TORCH_CREW")); - tag_door = "escape_pod_2_recovery_hatch" - }, -/turf/unsimulated/floor{ - icon = 'icons/turf/shuttle.dmi'; - icon_state = "floor2" - }, -/area/centcom/evac) -"acR" = ( -/obj/structure/flora/ausbushes/leafybush, -/turf/simulated/floor/holofloor/grass, -/area/holodeck/source_picnicarea) -"acS" = ( -/obj/structure/holostool, -/obj/effect/floor_decal/carpet{ - dir = 8 - }, -/turf/simulated/floor/holofloor/carpet, -/area/holodeck/source_theatre) -"acT" = ( -/obj/structure/holostool, -/turf/simulated/floor/holofloor/carpet, -/area/holodeck/source_theatre) -"acU" = ( -/obj/structure/holostool, -/obj/effect/floor_decal/carpet{ - dir = 4 - }, -/turf/simulated/floor/holofloor/carpet, -/area/holodeck/source_theatre) -"acV" = ( -/obj/structure/table/holo_woodentable, -/obj/effect/floor_decal/carpet{ - dir = 8 - }, -/turf/simulated/floor/holofloor/carpet, -/area/holodeck/source_courtroom) -"acW" = ( -/obj/structure/table/holo_woodentable, -/turf/simulated/floor/holofloor/carpet, -/area/holodeck/source_courtroom) -"acX" = ( -/turf/simulated/floor/holofloor/carpet, -/area/holodeck/source_courtroom) -"acY" = ( -/obj/structure/table/holo_woodentable, -/obj/effect/floor_decal/carpet{ - dir = 4 - }, -/turf/simulated/floor/holofloor/carpet, -/area/holodeck/source_courtroom) -"acZ" = ( -/obj/effect/floor_decal/corner/green{ - dir = 9 - }, -/turf/simulated/floor/holofloor/tiled, -/area/holodeck/source_emptycourt) -"ada" = ( -/obj/effect/floor_decal/corner/green{ - dir = 6 - }, -/turf/simulated/floor/holofloor/tiled, -/area/holodeck/source_emptycourt) -"adk" = ( -/obj/machinery/vending/wallmed1{ - name = "Emergency NanoMed"; - pixel_x = -30 - }, -/turf/unsimulated/floor{ - icon = 'icons/turf/shuttle.dmi'; - icon_state = "floor" - }, -/area/centcom/evac) -"adl" = ( -/turf/unsimulated/floor{ - icon = 'icons/turf/shuttle.dmi'; - icon_state = "floor" - }, -/area/centcom/evac) -"adm" = ( -/turf/unsimulated/floor{ - icon = 'icons/turf/shuttle.dmi'; - icon_state = "floor2" - }, -/area/centcom/evac) -"adn" = ( -/obj/item/stool, -/turf/unsimulated/floor{ - icon = 'icons/turf/shuttle.dmi'; - icon_state = "floor" - }, -/area/centcom/evac) -"ado" = ( -/obj/machinery/vending/wallmed1{ - name = "Emergency NanoMed"; - pixel_x = 30 - }, -/turf/unsimulated/floor{ - icon = 'icons/turf/shuttle.dmi'; - icon_state = "floor" - }, -/area/centcom/evac) -"adp" = ( -/obj/structure/flora/ausbushes/genericbush, -/turf/simulated/floor/holofloor/grass, -/area/holodeck/source_picnicarea) -"adq" = ( -/obj/structure/flora/ausbushes/reedbush, -/turf/simulated/floor/holofloor/grass, -/area/holodeck/source_picnicarea) -"adr" = ( -/obj/structure/bed/chair/holochair{ - dir = 1 - }, -/obj/effect/floor_decal/carpet{ - dir = 8 - }, -/turf/simulated/floor/holofloor/carpet, -/area/holodeck/source_courtroom) -"ads" = ( -/obj/structure/bed/chair/holochair{ - dir = 1 - }, -/turf/simulated/floor/holofloor/carpet, -/area/holodeck/source_courtroom) -"adt" = ( -/obj/structure/bed/chair/holochair{ - dir = 1 - }, -/obj/effect/floor_decal/carpet{ - dir = 4 - }, -/turf/simulated/floor/holofloor/carpet, -/area/holodeck/source_courtroom) -"adK" = ( -/obj/machinery/door/airlock/hatch/maintenance, -/turf/simulated/floor/plating, -/area/centcom/evac) -"adN" = ( -/obj/machinery/door/window/holowindoor{ - base_state = "right"; - dir = 4; - icon_state = "right" - }, -/turf/simulated/floor/holofloor/tiled, -/area/holodeck/source_courtroom) -"adO" = ( -/obj/effect/floor_decal/carpet{ - dir = 8 - }, -/turf/simulated/floor/holofloor/carpet, -/area/holodeck/source_courtroom) -"adP" = ( -/obj/effect/floor_decal/carpet{ - dir = 4 - }, -/turf/simulated/floor/holofloor/carpet, -/area/holodeck/source_courtroom) -"adQ" = ( -/obj/machinery/door/window/holowindoor{ - base_state = "right"; - dir = 4; - icon_state = "right"; - name = "Green Team" - }, -/turf/simulated/floor/holofloor/tiled/dark, -/area/holodeck/source_emptycourt) -"adW" = ( -/obj/machinery/vending/cigarette, -/turf/unsimulated/floor{ - icon = 'icons/turf/shuttle.dmi'; - icon_state = "floor" - }, -/area/centcom/evac) -"adX" = ( -/obj/structure/bed/chair, -/turf/unsimulated/floor{ - icon = 'icons/turf/shuttle.dmi'; - icon_state = "floor" - }, -/area/centcom/evac) -"adY" = ( -/obj/machinery/vending/cola, -/turf/unsimulated/floor{ - icon = 'icons/turf/shuttle.dmi'; - icon_state = "floor" - }, -/area/centcom/evac) -"adZ" = ( -/obj/structure/holostool, -/obj/effect/floor_decal/carpet{ - dir = 8 - }, -/obj/effect/floor_decal/carpet, -/obj/effect/floor_decal/carpet{ - dir = 10 - }, -/turf/simulated/floor/holofloor/carpet, -/area/holodeck/source_theatre) -"aea" = ( -/obj/structure/holostool, -/obj/effect/floor_decal/carpet, -/turf/simulated/floor/holofloor/carpet, -/area/holodeck/source_theatre) -"aeb" = ( -/obj/structure/holostool, -/obj/effect/floor_decal/carpet{ - dir = 4 - }, -/obj/effect/floor_decal/carpet, -/obj/effect/floor_decal/carpet{ - dir = 6 - }, -/turf/simulated/floor/holofloor/carpet, -/area/holodeck/source_theatre) -"aec" = ( -/obj/effect/floor_decal/carpet{ - dir = 8 - }, -/obj/effect/floor_decal/carpet{ - dir = 4 - }, -/obj/effect/floor_decal/carpet, -/obj/effect/floor_decal/carpet{ - dir = 6 - }, -/obj/effect/floor_decal/carpet{ - dir = 10 - }, -/turf/simulated/floor/holofloor/carpet, -/area/holodeck/source_theatre) -"aed" = ( -/obj/structure/bed/chair/holochair{ - dir = 8 - }, -/obj/effect/floor_decal/carpet{ - dir = 8 - }, -/obj/effect/floor_decal/carpet, -/obj/effect/floor_decal/carpet{ - dir = 10 - }, -/turf/simulated/floor/holofloor/carpet, -/area/holodeck/source_courtroom) -"aee" = ( -/obj/structure/bed/chair/holochair{ - dir = 8 - }, -/obj/effect/floor_decal/carpet{ - dir = 4 - }, -/obj/effect/floor_decal/carpet, -/obj/effect/floor_decal/carpet{ - dir = 6 - }, -/turf/simulated/floor/holofloor/carpet, -/area/holodeck/source_courtroom) -"ael" = ( -/obj/structure/table/standard, -/turf/unsimulated/floor{ - icon = 'icons/turf/shuttle.dmi'; - icon_state = "floor" - }, -/area/centcom/evac) -"aem" = ( -/obj/structure/bed/chair{ - dir = 4 - }, -/turf/unsimulated/floor{ - icon = 'icons/turf/shuttle.dmi'; - icon_state = "floor" - }, -/area/centcom/evac) -"aen" = ( -/obj/structure/bed/chair{ - dir = 8 - }, -/turf/unsimulated/floor{ - icon = 'icons/turf/shuttle.dmi'; - icon_state = "floor" - }, -/area/centcom/evac) -"aeo" = ( -/obj/machinery/vending/snack, -/turf/unsimulated/floor{ - icon = 'icons/turf/shuttle.dmi'; - icon_state = "floor" - }, -/area/centcom/evac) -"aep" = ( -/obj/structure/flora/pottedplant{ - icon_state = "plant-06" - }, -/turf/simulated/floor/holofloor/tiled, -/area/holodeck/source_theatre) -"aeq" = ( -/obj/effect/floor_decal/carpet{ - dir = 5 - }, -/obj/effect/floor_decal/carpet{ - dir = 6 - }, -/obj/effect/floor_decal/carpet{ - dir = 10 - }, -/obj/effect/floor_decal/carpet{ - dir = 9 - }, -/turf/simulated/floor/holofloor/carpet, -/area/holodeck/source_theatre) -"aer" = ( -/obj/structure/bed/chair/holochair{ - dir = 1 - }, -/obj/effect/floor_decal/carpet{ - dir = 8 - }, -/obj/effect/floor_decal/carpet, -/obj/effect/floor_decal/carpet{ - dir = 10 - }, -/turf/simulated/floor/holofloor/carpet, -/area/holodeck/source_courtroom) -"aes" = ( -/obj/structure/bed/chair/holochair{ - dir = 1 - }, -/obj/effect/floor_decal/carpet, -/turf/simulated/floor/holofloor/carpet, -/area/holodeck/source_courtroom) -"aet" = ( -/obj/structure/bed/chair/holochair{ - dir = 1 - }, -/obj/effect/floor_decal/carpet{ - dir = 4 - }, -/obj/effect/floor_decal/carpet, -/obj/effect/floor_decal/carpet{ - dir = 6 - }, -/turf/simulated/floor/holofloor/carpet, -/area/holodeck/source_courtroom) -"aeu" = ( -/obj/effect/floor_decal/corner/green/three_quarters, -/turf/simulated/floor/holofloor/tiled, -/area/holodeck/source_emptycourt) -"aev" = ( -/obj/effect/floor_decal/corner/green{ - dir = 10 - }, -/turf/simulated/floor/holofloor/tiled, -/area/holodeck/source_emptycourt) -"aew" = ( -/obj/effect/floor_decal/corner/green/three_quarters{ - dir = 4 - }, -/turf/simulated/floor/holofloor/tiled, -/area/holodeck/source_emptycourt) -"aeB" = ( -/turf/space, -/area/shuttle/escape_pod5/centcom) -"aeC" = ( -/obj/structure/table/standard, -/obj/item/hand_labeler, -/turf/unsimulated/floor{ - icon = 'icons/turf/shuttle.dmi'; - icon_state = "floor" - }, -/area/centcom/evac) -"aeD" = ( -/turf/space, -/area/shuttle/escape_pod3/centcom) -"aeE" = ( -/obj/structure/window/reinforced/crescent, -/obj/structure/window/reinforced/crescent{ - dir = 1 - }, -/turf/unsimulated/wall, -/area/space) -"aeF" = ( -/obj/structure/window/reinforced/crescent{ - dir = 1 - }, -/obj/structure/window/reinforced/crescent, -/turf/unsimulated/wall, -/area/space) -"aeI" = ( -/obj/machinery/door/airlock/external{ - frequency = 1380; - icon_state = "closed"; - id_tag = "escape_pod_5_recovery_hatch"; - locked = 1; - name = "Recovery Shuttle Dock" - }, -/turf/unsimulated/floor{ - icon = 'icons/turf/shuttle.dmi'; - icon_state = "floor2" - }, -/area/centcom/evac) -"aeJ" = ( -/obj/machinery/embedded_controller/radio/simple_docking_controller{ - frequency = 1380; - id_tag = "escape_pod_5_recovery"; - pixel_x = -25; - pixel_y = 25; - req_access = list(list("ACCESS_EXTERNAL","ACCESS_TORCH_CREW")); - tag_door = "escape_pod_5_recovery_hatch" - }, -/turf/unsimulated/floor{ - icon = 'icons/turf/shuttle.dmi'; - icon_state = "floor2" - }, -/area/centcom/evac) -"aeK" = ( -/obj/structure/bed/chair{ - dir = 1 - }, -/turf/unsimulated/floor{ - icon = 'icons/turf/shuttle.dmi'; - icon_state = "floor" - }, -/area/centcom/evac) -"aeL" = ( -/obj/machinery/embedded_controller/radio/simple_docking_controller{ - frequency = 1380; - id_tag = "escape_pod_3_recovery"; - pixel_x = 25; - pixel_y = -25; - req_access = list(list("ACCESS_EXTERNAL","ACCESS_TORCH_CREW")); - tag_door = "escape_pod_3_recovery_hatch" - }, -/turf/unsimulated/floor{ - icon = 'icons/turf/shuttle.dmi'; - icon_state = "floor2" - }, -/area/centcom/evac) -"aeM" = ( -/obj/machinery/door/airlock/external{ - frequency = 1380; - icon_state = "closed"; - id_tag = "escape_pod_3_recovery_hatch"; - locked = 1; - name = "Recovery Shuttle Dock" - }, -/turf/unsimulated/floor{ - icon = 'icons/turf/shuttle.dmi'; - icon_state = "floor2" - }, -/area/centcom/evac) -"aeN" = ( -/turf/simulated/floor/holofloor/space, -/area/holodeck/source_space) -"aeO" = ( -/turf/simulated/floor/holofloor/snow, -/area/holodeck/source_snowfield) -"aeP" = ( -/turf/simulated/floor/holofloor/wood, -/area/holodeck/source_meetinghall) -"aeQ" = ( -/obj/structure/flora/pottedplant{ - icon_state = "plant-06" - }, -/turf/simulated/floor/holofloor/wood, -/area/holodeck/source_meetinghall) -"aeR" = ( -/turf/simulated/floor/holofloor/tiled/dark, -/area/holodeck/source_basketball) -"aeS" = ( -/obj/structure/holostool, -/turf/simulated/floor/holofloor/tiled, -/area/holodeck/source_basketball) -"aeT" = ( -/obj/structure/holostool, -/obj/structure/window/reinforced/holowindow{ - dir = 4 - }, -/turf/simulated/floor/holofloor/tiled, -/area/holodeck/source_basketball) -"aeU" = ( -/obj/effect/floor_decal/corner/red/three_quarters{ - dir = 8 - }, -/turf/simulated/floor/holofloor/tiled, -/area/holodeck/source_basketball) -"aeV" = ( -/obj/effect/floor_decal/corner/red{ - dir = 5 - }, -/turf/simulated/floor/holofloor/tiled, -/area/holodeck/source_basketball) -"aeW" = ( -/obj/structure/holohoop, -/obj/effect/floor_decal/corner/red{ - dir = 5 - }, -/turf/simulated/floor/holofloor/tiled, -/area/holodeck/source_basketball) -"aeX" = ( -/obj/effect/floor_decal/corner/red/three_quarters{ - dir = 1 - }, -/turf/simulated/floor/holofloor/tiled, -/area/holodeck/source_basketball) -"aeY" = ( -/turf/simulated/floor/holofloor/beach/water, -/area/holodeck/source_beach) -"aeZ" = ( -/turf/simulated/floor/holofloor/tiled/dark, -/area/holodeck/source_thunderdomecourt) -"afa" = ( -/obj/structure/holostool, -/turf/simulated/floor/holofloor/tiled, -/area/holodeck/source_thunderdomecourt) -"afb" = ( -/obj/structure/holostool, -/obj/structure/window/reinforced/holowindow{ - dir = 4 - }, -/turf/simulated/floor/holofloor/tiled, -/area/holodeck/source_thunderdomecourt) -"afc" = ( -/obj/structure/table/holotable, -/obj/machinery/readybutton, -/obj/effect/floor_decal/corner/red/three_quarters{ - dir = 8 - }, -/turf/simulated/floor/holofloor/tiled, -/area/holodeck/source_thunderdomecourt) -"afd" = ( -/obj/structure/table/holotable, -/obj/item/clothing/head/helmet/thunderdome, -/obj/item/clothing/suit/armor/tdome/red, -/obj/item/clothing/under/color/red, -/obj/item/holo/esword/red, -/obj/effect/floor_decal/corner/red{ - dir = 5 - }, -/turf/simulated/floor/holofloor/tiled, -/area/holodeck/source_thunderdomecourt) -"afe" = ( -/obj/structure/table/holotable, -/obj/effect/floor_decal/corner/red/three_quarters{ - dir = 1 - }, -/turf/simulated/floor/holofloor/tiled, -/area/holodeck/source_thunderdomecourt) -"aff" = ( -/obj/structure/table/holotable, -/obj/item/clothing/gloves/boxing/hologlove, -/turf/simulated/floor/holofloor/tiled/dark, -/area/holodeck/source_boxingcourt) -"afg" = ( -/turf/simulated/floor/holofloor/tiled/dark, -/area/holodeck/source_boxingcourt) -"afi" = ( -/obj/machinery/vending/coffee, -/turf/unsimulated/floor{ - icon = 'icons/turf/shuttle.dmi'; - icon_state = "floor" - }, -/area/centcom/evac) -"afj" = ( -/obj/effect/landmark{ - name = "Holocarp Spawn Random" - }, -/turf/simulated/floor/holofloor/space, -/area/holodeck/source_space) -"afk" = ( -/obj/structure/flora/grass/both, -/turf/simulated/floor/holofloor/snow, -/area/holodeck/source_snowfield) -"afl" = ( -/obj/effect/floor_decal/carpet{ - dir = 8 - }, -/obj/effect/floor_decal/carpet, -/obj/effect/floor_decal/carpet{ - dir = 1 - }, -/obj/effect/floor_decal/carpet{ - dir = 9 - }, -/obj/effect/floor_decal/carpet{ - dir = 10 - }, -/turf/simulated/floor/holofloor/carpet, -/area/holodeck/source_meetinghall) -"afm" = ( -/obj/effect/floor_decal/carpet, -/obj/effect/floor_decal/carpet{ - dir = 1 - }, -/turf/simulated/floor/holofloor/carpet, -/area/holodeck/source_meetinghall) -"afn" = ( -/obj/effect/floor_decal/carpet{ - dir = 4 - }, -/obj/effect/floor_decal/carpet, -/obj/effect/floor_decal/carpet{ - dir = 1 - }, -/obj/effect/floor_decal/carpet{ - dir = 5 - }, -/obj/effect/floor_decal/carpet{ - dir = 6 - }, -/turf/simulated/floor/holofloor/carpet, -/area/holodeck/source_meetinghall) -"afo" = ( -/obj/effect/floor_decal/corner/red{ - dir = 9 - }, -/turf/simulated/floor/holofloor/tiled, -/area/holodeck/source_basketball) -"afp" = ( -/turf/simulated/floor/holofloor/tiled, -/area/holodeck/source_basketball) -"afq" = ( -/obj/effect/floor_decal/corner/red{ - dir = 6 - }, -/turf/simulated/floor/holofloor/tiled, -/area/holodeck/source_basketball) -"afr" = ( -/turf/simulated/floor/holofloor/beach/sand{ - dir = 9; - icon_state = "beach" - }, -/area/holodeck/source_beach) -"afs" = ( -/turf/simulated/floor/holofloor/beach/sand{ - dir = 1; - icon_state = "beach" - }, -/area/holodeck/source_beach) -"aft" = ( -/turf/simulated/floor/holofloor/beach/sand{ - dir = 5; - icon_state = "beach" - }, -/area/holodeck/source_beach) -"afu" = ( -/obj/effect/floor_decal/corner/red{ - dir = 9 - }, -/turf/simulated/floor/holofloor/tiled, -/area/holodeck/source_thunderdomecourt) -"afv" = ( -/turf/simulated/floor/holofloor/tiled, -/area/holodeck/source_thunderdomecourt) -"afw" = ( -/obj/effect/floor_decal/corner/red{ - dir = 6 - }, -/turf/simulated/floor/holofloor/tiled, -/area/holodeck/source_thunderdomecourt) -"afx" = ( -/obj/structure/holostool, -/turf/simulated/floor/holofloor/tiled/dark, -/area/holodeck/source_boxingcourt) -"afT" = ( -/obj/machinery/computer/arcade, -/turf/unsimulated/floor{ - icon = 'icons/turf/shuttle.dmi'; - icon_state = "floor" - }, -/area/centcom/evac) -"afU" = ( -/obj/structure/flora/tree/pine, -/turf/simulated/floor/holofloor/snow, -/area/holodeck/source_snowfield) -"afV" = ( -/obj/structure/table/holo_woodentable, -/obj/effect/floor_decal/spline/fancy/wood, -/turf/simulated/floor/holofloor/wood, -/area/holodeck/source_meetinghall) -"afW" = ( -/obj/machinery/door/window/holowindoor{ - dir = 4; - name = "Red Team" - }, -/turf/simulated/floor/holofloor/tiled/dark, -/area/holodeck/source_basketball) -"afX" = ( -/turf/simulated/floor/holofloor/beach/sand{ - dir = 8; - icon_state = "beach" - }, -/area/holodeck/source_beach) -"afY" = ( -/turf/simulated/floor/holofloor/beach/sand{ - icon_state = "desert2" - }, -/area/holodeck/source_beach) -"afZ" = ( -/turf/simulated/floor/holofloor/beach/sand, -/area/holodeck/source_beach) -"aga" = ( -/turf/simulated/floor/holofloor/beach/sand{ - icon_state = "desert3" - }, -/area/holodeck/source_beach) -"agb" = ( -/turf/simulated/floor/holofloor/beach/sand{ - dir = 4; - icon_state = "beach" - }, -/area/holodeck/source_beach) -"agc" = ( -/obj/machinery/door/window/holowindoor{ - dir = 4; - name = "Red Team" - }, -/turf/simulated/floor/holofloor/tiled/dark, -/area/holodeck/source_thunderdomecourt) -"agd" = ( -/obj/machinery/door/window/holowindoor{ - base_state = "right"; - icon_state = "right"; - name = "Red Corner" - }, -/turf/simulated/floor/holofloor/tiled/dark, -/area/holodeck/source_boxingcourt) -"age" = ( -/obj/structure/window/reinforced/holowindow, -/turf/simulated/floor/holofloor/tiled/dark, -/area/holodeck/source_boxingcourt) -"agp" = ( -/obj/structure/closet/secure_closet/personal/patient, -/turf/unsimulated/floor{ - icon = 'icons/turf/shuttle.dmi'; - icon_state = "floor3" - }, -/area/centcom/evac) -"agq" = ( -/obj/item/storage/firstaid/regular{ - pixel_x = 2; - pixel_y = 6 - }, -/obj/item/storage/firstaid/regular{ - pixel_x = -2; - pixel_y = 4 - }, -/turf/unsimulated/floor{ - icon = 'icons/turf/shuttle.dmi'; - icon_state = "floor3" - }, -/area/centcom/evac) -"agr" = ( -/obj/structure/window/shuttle{ - icon_state = "window2" - }, -/obj/structure/grille, -/turf/simulated/floor/plating, -/area/centcom/evac) -"ags" = ( -/obj/structure/grille, -/obj/structure/window/shuttle, -/turf/simulated/floor/plating, -/area/centcom/evac) -"agt" = ( -/obj/structure/flora/tree/dead, -/turf/simulated/floor/holofloor/snow, -/area/holodeck/source_snowfield) -"agu" = ( -/turf/simulated/floor/holofloor/lino, -/area/holodeck/source_meetinghall) -"agv" = ( -/turf/simulated/floor/holofloor/tiled/dark, -/area/holodeck/source_meetinghall) -"agw" = ( -/turf/simulated/floor/holofloor/beach/sand{ - dir = 10; - icon_state = "beach" - }, -/area/holodeck/source_beach) -"agx" = ( -/turf/simulated/floor/holofloor/beach/sand{ - icon_state = "beach" - }, -/area/holodeck/source_beach) -"agy" = ( -/turf/simulated/floor/holofloor/beach/sand{ - dir = 6; - icon_state = "beach" - }, -/area/holodeck/source_beach) -"agz" = ( -/obj/structure/window/reinforced/holowindow{ - dir = 4 - }, -/turf/simulated/floor/holofloor/tiled/dark, -/area/holodeck/source_boxingcourt) -"agA" = ( -/obj/effect/floor_decal/corner/red/three_quarters{ - dir = 8 - }, -/turf/simulated/floor/holofloor/tiled, -/area/holodeck/source_boxingcourt) -"agB" = ( -/obj/effect/floor_decal/corner/red{ - dir = 5 - }, -/turf/simulated/floor/holofloor/tiled, -/area/holodeck/source_boxingcourt) -"agC" = ( -/turf/simulated/floor/holofloor/tiled, -/area/holodeck/source_boxingcourt) -"agD" = ( -/obj/structure/window/reinforced/holowindow{ - dir = 8 - }, -/turf/simulated/floor/holofloor/tiled/dark, -/area/holodeck/source_boxingcourt) -"agK" = ( -/obj/structure/window/shuttle, -/obj/structure/grille, -/turf/simulated/floor/plating, -/area/centcom/evac) -"agL" = ( -/turf/unsimulated/floor{ - icon = 'icons/turf/shuttle.dmi'; - icon_state = "floor3" - }, -/area/centcom/evac) -"agM" = ( -/obj/structure/window/shuttle{ - icon_state = "window1" - }, -/obj/structure/grille, -/turf/simulated/floor/plating, -/area/centcom/evac) -"agN" = ( -/obj/structure/table/reinforced, -/obj/item/paper_bin, -/turf/unsimulated/floor{ - icon = 'icons/turf/shuttle.dmi'; - icon_state = "floor4" - }, -/area/centcom/evac) -"agO" = ( -/obj/structure/table/reinforced, -/turf/unsimulated/floor{ - icon = 'icons/turf/shuttle.dmi'; - icon_state = "floor4" - }, -/area/centcom/evac) -"agP" = ( -/obj/structure/table/reinforced, -/obj/item/pen, -/turf/unsimulated/floor{ - icon = 'icons/turf/shuttle.dmi'; - icon_state = "floor4" - }, -/area/centcom/evac) -"agQ" = ( -/obj/structure/flora/grass/green, -/turf/simulated/floor/holofloor/snow, -/area/holodeck/source_snowfield) -"agR" = ( -/obj/effect/floor_decal/carpet{ - dir = 5 - }, -/obj/effect/floor_decal/carpet{ - dir = 6 - }, -/obj/effect/floor_decal/carpet{ - dir = 9 - }, -/obj/effect/floor_decal/carpet{ - dir = 10 - }, -/turf/simulated/floor/holofloor/carpet, -/area/holodeck/source_meetinghall) -"agS" = ( -/obj/structure/holostool, -/obj/effect/floor_decal/carpet{ - dir = 8 - }, -/obj/effect/floor_decal/carpet{ - dir = 1 - }, -/obj/effect/floor_decal/carpet{ - dir = 9 - }, -/turf/simulated/floor/holofloor/carpet, -/area/holodeck/source_meetinghall) -"agT" = ( -/obj/structure/holostool, -/obj/effect/floor_decal/carpet{ - dir = 1 - }, -/turf/simulated/floor/holofloor/carpet, -/area/holodeck/source_meetinghall) -"agU" = ( -/obj/structure/holostool, -/obj/effect/floor_decal/carpet{ - dir = 4 - }, -/obj/effect/floor_decal/carpet{ - dir = 1 - }, -/obj/effect/floor_decal/carpet{ - dir = 5 - }, -/turf/simulated/floor/holofloor/carpet, -/area/holodeck/source_meetinghall) -"agV" = ( -/obj/effect/floor_decal/corner/red/three_quarters, -/turf/simulated/floor/holofloor/tiled, -/area/holodeck/source_basketball) -"agW" = ( -/obj/effect/floor_decal/corner/red{ - dir = 10 - }, -/turf/simulated/floor/holofloor/tiled, -/area/holodeck/source_basketball) -"agX" = ( -/obj/item/beach_ball/holoball, -/obj/effect/floor_decal/corner/red{ - dir = 10 - }, -/turf/simulated/floor/holofloor/tiled, -/area/holodeck/source_basketball) -"agY" = ( -/obj/effect/floor_decal/corner/red/three_quarters{ - dir = 4 - }, -/turf/simulated/floor/holofloor/tiled, -/area/holodeck/source_basketball) -"agZ" = ( -/obj/structure/window/reinforced/holowindow/disappearing, -/obj/effect/floor_decal/corner/red/three_quarters, -/turf/simulated/floor/holofloor/tiled, -/area/holodeck/source_thunderdomecourt) -"aha" = ( -/obj/structure/window/reinforced/holowindow/disappearing, -/obj/effect/floor_decal/corner/red{ - dir = 10 - }, -/turf/simulated/floor/holofloor/tiled, -/area/holodeck/source_thunderdomecourt) -"ahb" = ( -/obj/structure/window/reinforced/holowindow/disappearing, -/obj/effect/floor_decal/corner/red/three_quarters{ - dir = 4 - }, -/turf/simulated/floor/holofloor/tiled, -/area/holodeck/source_thunderdomecourt) -"ahc" = ( -/obj/effect/floor_decal/corner/red{ - dir = 9 - }, -/turf/simulated/floor/holofloor/tiled, -/area/holodeck/source_boxingcourt) -"ahd" = ( -/obj/effect/floor_decal/corner/green/three_quarters{ - dir = 8 - }, -/turf/simulated/floor/holofloor/tiled, -/area/holodeck/source_boxingcourt) -"ahe" = ( -/obj/effect/floor_decal/corner/red, -/obj/effect/floor_decal/corner/green{ - dir = 1 - }, -/obj/effect/floor_decal/corner/black{ - dir = 4 - }, -/turf/simulated/floor/holofloor/tiled, -/area/holodeck/source_boxingcourt) -"ahf" = ( -/obj/effect/floor_decal/corner/green{ - dir = 6 - }, -/turf/simulated/floor/holofloor/tiled, -/area/holodeck/source_boxingcourt) -"ahn" = ( -/obj/machinery/sleeper, -/turf/unsimulated/floor{ - icon = 'icons/turf/shuttle.dmi'; - icon_state = "floor3" - }, -/area/centcom/evac) -"aho" = ( -/obj/machinery/door/airlock/hatch{ - name = "Infirmary" - }, -/turf/unsimulated/floor{ - icon = 'icons/turf/shuttle.dmi'; - icon_state = "floor3" - }, -/area/centcom/evac) -"ahp" = ( -/obj/structure/table/reinforced, -/obj/random/clipboard, -/obj/item/stamp, -/turf/unsimulated/floor{ - icon = 'icons/turf/shuttle.dmi'; - icon_state = "floor4" - }, -/area/centcom/evac) -"ahq" = ( -/obj/structure/bed/chair{ - dir = 1 - }, -/turf/unsimulated/floor{ - icon = 'icons/turf/shuttle.dmi'; - icon_state = "floor4" - }, -/area/centcom/evac) -"ahr" = ( -/obj/structure/bed/chair{ - dir = 4 - }, -/turf/unsimulated/floor{ - icon = 'icons/turf/shuttle.dmi'; - icon_state = "floor4" - }, -/area/centcom/evac) -"ahs" = ( -/obj/machinery/computer/modular/preset/cardslot/command{ - dir = 8; - icon_state = "console" - }, -/turf/unsimulated/floor{ - icon = 'icons/turf/shuttle.dmi'; - icon_state = "floor4" - }, -/area/centcom/evac) -"aht" = ( -/obj/structure/holostool, -/obj/effect/floor_decal/carpet{ - dir = 8 - }, -/turf/simulated/floor/holofloor/carpet, -/area/holodeck/source_meetinghall) -"ahu" = ( -/obj/structure/holostool, -/turf/simulated/floor/holofloor/carpet, -/area/holodeck/source_meetinghall) -"ahv" = ( -/obj/structure/holostool, -/obj/effect/floor_decal/carpet{ - dir = 4 - }, -/turf/simulated/floor/holofloor/carpet, -/area/holodeck/source_meetinghall) -"ahw" = ( -/obj/effect/floor_decal/corner/green/three_quarters{ - dir = 8 - }, -/turf/simulated/floor/holofloor/tiled, -/area/holodeck/source_basketball) -"ahx" = ( -/obj/effect/floor_decal/corner/green{ - dir = 5 - }, -/turf/simulated/floor/holofloor/tiled, -/area/holodeck/source_basketball) -"ahy" = ( -/obj/effect/floor_decal/corner/green/three_quarters{ - dir = 1 - }, -/turf/simulated/floor/holofloor/tiled, -/area/holodeck/source_basketball) -"ahz" = ( -/turf/simulated/floor/holofloor/beach/sand{ - dir = 8; - icon_state = "beachcorner" - }, -/area/holodeck/source_beach) -"ahA" = ( -/turf/simulated/floor/holofloor/beach/sand{ - dir = 4; - icon_state = "beachcorner" - }, -/area/holodeck/source_beach) -"ahB" = ( -/obj/structure/window/reinforced/holowindow/disappearing{ - dir = 1 - }, -/obj/effect/floor_decal/corner/green/three_quarters{ - dir = 8 - }, -/turf/simulated/floor/holofloor/tiled, -/area/holodeck/source_thunderdomecourt) -"ahC" = ( -/obj/structure/window/reinforced/holowindow/disappearing{ - dir = 1 - }, -/obj/effect/floor_decal/corner/green{ - dir = 5 - }, -/turf/simulated/floor/holofloor/tiled, -/area/holodeck/source_thunderdomecourt) -"ahD" = ( -/obj/structure/window/reinforced/holowindow/disappearing{ - dir = 1 - }, -/obj/effect/floor_decal/corner/green/three_quarters{ - dir = 1 - }, -/turf/simulated/floor/holofloor/tiled, -/area/holodeck/source_thunderdomecourt) -"ahE" = ( -/obj/effect/floor_decal/corner/red, -/obj/effect/floor_decal/corner/green{ - dir = 1 - }, -/obj/effect/floor_decal/corner/black{ - dir = 8 - }, -/turf/simulated/floor/holofloor/tiled, -/area/holodeck/source_boxingcourt) -"ahF" = ( -/obj/effect/floor_decal/corner/red/three_quarters{ - dir = 4 - }, -/turf/simulated/floor/holofloor/tiled, -/area/holodeck/source_boxingcourt) -"ahU" = ( -/obj/machinery/vending/wallmed1{ - name = "Emergency NanoMed"; - pixel_x = -30 - }, -/turf/unsimulated/floor{ - icon = 'icons/turf/shuttle.dmi'; - icon_state = "floor3" - }, -/area/centcom/evac) -"ahV" = ( -/turf/unsimulated/floor{ - icon = 'icons/turf/shuttle.dmi'; - icon_state = "floor4" - }, -/area/centcom/evac) -"ahX" = ( -/obj/effect/floor_decal/corner/green{ - dir = 9 - }, -/turf/simulated/floor/holofloor/tiled, -/area/holodeck/source_basketball) -"ahY" = ( -/obj/effect/floor_decal/corner/green{ - dir = 6 - }, -/turf/simulated/floor/holofloor/tiled, -/area/holodeck/source_basketball) -"ahZ" = ( -/obj/item/beach_ball, -/turf/simulated/floor/holofloor/beach/sand, -/area/holodeck/source_beach) -"aia" = ( -/turf/simulated/floor/holofloor/beach/sand{ - icon_state = "desert4" - }, -/area/holodeck/source_beach) -"aib" = ( -/turf/simulated/floor/holofloor/beach/sand{ - icon_state = "desert_dug" - }, -/area/holodeck/source_beach) -"aic" = ( -/obj/item/clothing/glasses/sunglasses, -/turf/simulated/floor/holofloor/beach/sand, -/area/holodeck/source_beach) -"aid" = ( -/obj/effect/floor_decal/corner/green{ - dir = 9 - }, -/turf/simulated/floor/holofloor/tiled, -/area/holodeck/source_thunderdomecourt) -"aie" = ( -/obj/effect/floor_decal/corner/green{ - dir = 6 - }, -/turf/simulated/floor/holofloor/tiled, -/area/holodeck/source_thunderdomecourt) -"aif" = ( -/obj/effect/floor_decal/corner/green{ - dir = 10 - }, -/turf/simulated/floor/holofloor/tiled, -/area/holodeck/source_boxingcourt) -"aig" = ( -/obj/effect/floor_decal/corner/green/three_quarters{ - dir = 4 - }, -/turf/simulated/floor/holofloor/tiled, -/area/holodeck/source_boxingcourt) -"air" = ( -/obj/machinery/door/window/northright{ - dir = 4; - name = "Security Desk" - }, -/turf/unsimulated/floor{ - icon = 'icons/turf/shuttle.dmi'; - icon_state = "floor4" - }, -/area/centcom/evac) -"ais" = ( -/obj/structure/table/standard, -/obj/item/storage/box/handcuffs, -/obj/item/device/flash, -/turf/unsimulated/floor{ - icon = 'icons/turf/shuttle.dmi'; - icon_state = "floor4" - }, -/area/centcom/evac) -"ait" = ( -/obj/structure/flora/grass/brown, -/turf/simulated/floor/holofloor/snow, -/area/holodeck/source_snowfield) -"aiu" = ( -/obj/structure/holostool, -/obj/effect/floor_decal/carpet{ - dir = 4 - }, -/turf/simulated/floor/holofloor/carpet{ - dir = 8 - }, -/area/holodeck/source_meetinghall) -"aiv" = ( -/obj/machinery/door/window/holowindoor{ - base_state = "right"; - dir = 4; - icon_state = "right"; - name = "Green Team" - }, -/turf/simulated/floor/holofloor/tiled/dark, -/area/holodeck/source_basketball) -"aiw" = ( -/obj/effect/floor_decal/corner/green{ - dir = 10 - }, -/turf/simulated/floor/holofloor/tiled, -/area/holodeck/source_basketball) -"aix" = ( -/obj/effect/overlay/palmtree_r, -/turf/simulated/floor/holofloor/beach/sand, -/area/holodeck/source_beach) -"aiz" = ( -/obj/effect/overlay/palmtree_l, -/obj/effect/overlay/coconut, -/turf/simulated/floor/holofloor/beach/sand, -/area/holodeck/source_beach) -"aiA" = ( -/obj/machinery/door/window/holowindoor{ - base_state = "right"; - dir = 4; - icon_state = "right"; - name = "Green Team" - }, -/turf/simulated/floor/holofloor/tiled/dark, -/area/holodeck/source_thunderdomecourt) -"aiB" = ( -/obj/structure/window/reinforced/holowindow{ - dir = 1 - }, -/turf/simulated/floor/holofloor/tiled/dark, -/area/holodeck/source_boxingcourt) -"aiC" = ( -/obj/machinery/door/window/holowindoor{ - dir = 1; - name = "Green Corner" - }, -/turf/simulated/floor/holofloor/tiled/dark, -/area/holodeck/source_boxingcourt) -"aiJ" = ( -/obj/machinery/door/airlock/hatch{ - name = "Cockpit" - }, -/turf/unsimulated/floor{ - icon = 'icons/turf/shuttle.dmi'; - icon_state = "floor2" - }, -/area/centcom/evac) -"aiK" = ( -/obj/structure/holostool, -/obj/effect/floor_decal/carpet{ - dir = 8 - }, -/obj/effect/floor_decal/carpet, -/obj/effect/floor_decal/carpet{ - dir = 10 - }, -/turf/simulated/floor/holofloor/carpet, -/area/holodeck/source_meetinghall) -"aiL" = ( -/obj/structure/holostool, -/obj/effect/floor_decal/carpet, -/turf/simulated/floor/holofloor/carpet, -/area/holodeck/source_meetinghall) -"aiM" = ( -/obj/structure/holostool, -/obj/effect/floor_decal/carpet, -/obj/effect/floor_decal/carpet{ - dir = 4 - }, -/obj/effect/floor_decal/carpet{ - dir = 6 - }, -/turf/simulated/floor/holofloor/carpet, -/area/holodeck/source_meetinghall) -"aiN" = ( -/turf/simulated/floor/holofloor/beach/sand{ - icon_state = "desert1" - }, -/area/holodeck/source_beach) -"aiO" = ( -/obj/item/inflatable_duck, -/turf/simulated/floor/holofloor/beach/sand, -/area/holodeck/source_beach) -"aiY" = ( -/obj/machinery/computer/crew{ - dir = 4 - }, -/turf/unsimulated/floor{ - icon = 'icons/turf/shuttle.dmi'; - icon_state = "floor" - }, -/area/centcom/evac) -"aiZ" = ( -/obj/structure/bed/chair{ - dir = 4; - name = "Defense" - }, -/turf/unsimulated/floor{ - icon = 'icons/turf/shuttle.dmi'; - icon_state = "floor" - }, -/area/centcom/evac) -"aja" = ( -/obj/effect/floor_decal/corner/green/three_quarters, -/turf/simulated/floor/holofloor/tiled, -/area/holodeck/source_basketball) -"ajb" = ( -/obj/structure/holohoop{ - dir = 1 - }, -/obj/effect/floor_decal/corner/green{ - dir = 10 - }, -/turf/simulated/floor/holofloor/tiled, -/area/holodeck/source_basketball) -"ajc" = ( -/obj/effect/floor_decal/corner/green/three_quarters{ - dir = 4 - }, -/turf/simulated/floor/holofloor/tiled, -/area/holodeck/source_basketball) -"ajd" = ( -/obj/structure/table/holotable, -/obj/effect/floor_decal/corner/green/three_quarters, -/turf/simulated/floor/holofloor/tiled, -/area/holodeck/source_thunderdomecourt) -"aje" = ( -/obj/structure/table/holotable, -/obj/item/clothing/head/helmet/thunderdome, -/obj/item/clothing/suit/armor/tdome/green, -/obj/item/clothing/under/color/green, -/obj/item/holo/esword/green, -/obj/effect/floor_decal/corner/green{ - dir = 10 - }, -/turf/simulated/floor/holofloor/tiled, -/area/holodeck/source_thunderdomecourt) -"ajf" = ( -/obj/structure/table/holotable, -/obj/machinery/readybutton, -/obj/effect/floor_decal/corner/green/three_quarters{ - dir = 4 - }, -/turf/simulated/floor/holofloor/tiled, -/area/holodeck/source_thunderdomecourt) -"ajg" = ( -/obj/structure/table/holotable, -/obj/item/clothing/gloves/boxing/hologlove{ - icon_state = "boxinggreen"; - item_state = "boxinggreen" - }, -/turf/simulated/floor/holofloor/tiled/dark, -/area/holodeck/source_boxingcourt) -"ajm" = ( -/obj/structure/table/reinforced, -/turf/unsimulated/floor{ - icon = 'icons/turf/shuttle.dmi'; - icon_state = "floor" - }, -/area/centcom/evac) -"ajn" = ( -/obj/item/device/radio/off, -/obj/structure/table/reinforced, -/turf/unsimulated/floor{ - icon = 'icons/turf/shuttle.dmi'; - icon_state = "floor" - }, -/area/centcom/evac) -"ajo" = ( -/obj/structure/window/reinforced/crescent{ - dir = 1 - }, -/turf/unsimulated/wall, -/area/space) -"ajA" = ( -/obj/item/storage/lockbox, -/obj/structure/table/reinforced, -/turf/unsimulated/floor{ - icon = 'icons/turf/shuttle.dmi'; - icon_state = "floor" - }, -/area/centcom/evac) -"ajB" = ( -/obj/item/stamp/captain, -/obj/structure/table/reinforced, -/turf/unsimulated/floor{ - icon = 'icons/turf/shuttle.dmi'; - icon_state = "floor" - }, -/area/centcom/evac) -"ajC" = ( -/obj/machinery/computer/shuttle{ - dir = 1 - }, -/turf/unsimulated/floor{ - icon = 'icons/turf/shuttle.dmi'; - icon_state = "floor" - }, -/area/centcom/evac) -"ajD" = ( -/obj/random/clipboard, -/obj/item/pen, -/obj/structure/table/reinforced, -/turf/unsimulated/floor{ - icon = 'icons/turf/shuttle.dmi'; - icon_state = "floor" - }, -/area/centcom/evac) -"ajE" = ( -/obj/item/paper_bin, -/obj/structure/table/reinforced, -/turf/unsimulated/floor{ - icon = 'icons/turf/shuttle.dmi'; - icon_state = "floor" - }, -/area/centcom/evac) -"ala" = ( -/turf/simulated/mineral, -/area/space) -"alg" = ( -/turf/unsimulated/beach/sand{ - density = 1; - opacity = 1 - }, -/area/beach) -"alr" = ( -/turf/unsimulated/beach/sand, -/area/beach) -"als" = ( -/obj/structure/closet, -/turf/unsimulated/beach/sand, -/area/beach) -"alJ" = ( -/obj/effect/overlay/palmtree_l, -/turf/unsimulated/beach/sand, -/area/beach) -"alK" = ( -/obj/effect/overlay/palmtree_r, -/obj/effect/overlay/coconut, -/turf/unsimulated/beach/sand, -/area/beach) -"alX" = ( -/obj/effect/overlay/coconut, -/turf/unsimulated/beach/sand, -/area/beach) -"amK" = ( -/obj/effect/overlay/palmtree_r, -/turf/unsimulated/beach/sand, -/area/beach) -"anb" = ( -/obj/effect/landmark{ - name = "endgame_exit" - }, -/turf/unsimulated/beach/sand, -/area/beach) -"ano" = ( -/obj/structure/table/standard, -/obj/item/reagent_containers/food/drinks/bottle/small/beer, -/obj/item/reagent_containers/food/drinks/bottle/small/beer, -/obj/item/reagent_containers/food/drinks/bottle/small/beer, -/obj/item/reagent_containers/food/drinks/bottle/small/beer, -/obj/item/reagent_containers/food/drinks/bottle/small/beer, -/obj/item/reagent_containers/food/drinks/bottle/small/beer, -/obj/item/reagent_containers/food/drinks/bottle/small/beer, -/turf/unsimulated/beach/sand, -/area/beach) -"anp" = ( -/obj/structure/table/standard, -/obj/item/clothing/glasses/sunglasses, -/obj/item/clothing/head/collectable/petehat{ - pixel_y = 5 - }, -/turf/unsimulated/beach/sand, -/area/beach) -"anP" = ( -/obj/structure/table/standard, -/obj/item/reagent_containers/food/snacks/chips, -/turf/unsimulated/beach/sand, -/area/beach) -"anQ" = ( -/obj/structure/table/standard, -/obj/item/reagent_containers/food/drinks/cans/cola, -/obj/item/reagent_containers/food/drinks/cans/cola, -/obj/item/reagent_containers/food/drinks/cans/cola, -/obj/item/reagent_containers/food/drinks/cans/cola, -/obj/item/reagent_containers/food/drinks/cans/cola, -/obj/item/reagent_containers/food/drinks/cans/cola, -/turf/unsimulated/beach/sand, -/area/beach) -"anR" = ( -/obj/item/beach_ball, -/turf/unsimulated/beach/sand, -/area/beach) -"aph" = ( -/obj/structure/bed/chair, -/obj/effect/landmark{ - name = "endgame_exit" - }, -/turf/unsimulated/beach/sand, -/area/beach) -"api" = ( -/mob/living/simple_animal/crab/Coffee, -/turf/unsimulated/beach/sand, -/area/beach) -"apA" = ( -/obj/item/clothing/head/collectable/paper, -/turf/unsimulated/beach/sand, -/area/beach) -"apO" = ( -/turf/unsimulated/beach/coastline{ - density = 1; - opacity = 1 - }, -/area/beach) -"apP" = ( -/turf/unsimulated/beach/coastline, -/area/beach) -"apZ" = ( -/turf/unsimulated/beach/water{ - density = 1; - opacity = 1 - }, -/area/beach) -"aqa" = ( -/turf/unsimulated/beach/water, -/area/beach) -"asP" = ( -/turf/unsimulated/wall, -/area/centcom) -"asQ" = ( -/turf/unsimulated/wall{ - desc = "That looks like it doesn't open easily."; - icon = 'icons/obj/doors/rapid_pdoor.dmi'; - icon_state = "pdoor1"; - name = "Shuttle Bay Blast Door" - }, -/area/centcom) -"asR" = ( -/turf/unsimulated/floor{ - icon_state = "plating"; - name = "plating" - }, -/area/centcom) -"asS" = ( -/obj/effect/paint/hull, -/turf/simulated/wall/r_titanium, -/area/shuttle/administration/centcom) -"asV" = ( -/obj/machinery/vending/boozeomat{ - density = 0; - pixel_x = -32 - }, -/turf/simulated/floor/shuttle/red, -/area/shuttle/administration/centcom) -"asW" = ( -/obj/item/stool, -/turf/simulated/floor/shuttle/red, -/area/shuttle/administration/centcom) -"asX" = ( -/obj/structure/table/rack, -/obj/item/rig/light/internalaffairs/equipped, -/obj/item/rig/light/internalaffairs/equipped, -/turf/simulated/floor/shuttle/red, -/area/shuttle/administration/centcom) -"asY" = ( -/obj/machinery/light{ - dir = 1 - }, -/obj/structure/table/reinforced, -/turf/simulated/floor/shuttle/red, -/area/shuttle/administration/centcom) -"asZ" = ( -/obj/machinery/sleeper, -/turf/simulated/floor/shuttle/red, -/area/shuttle/administration/centcom) -"atb" = ( -/turf/unsimulated/wall, -/area/prison/solitary) -"atc" = ( -/obj/machinery/vending/cola{ - name = "Robust Softdrinks"; - prices = list() - }, -/turf/simulated/floor/shuttle/red, -/area/shuttle/administration/centcom) -"atd" = ( -/turf/simulated/floor/shuttle/red, -/area/shuttle/administration/centcom) -"ate" = ( -/obj/structure/table/reinforced, -/obj/item/storage/box/donkpocket_premium, -/turf/simulated/floor/shuttle/red, -/area/shuttle/administration/centcom) -"atf" = ( -/obj/machinery/light{ - dir = 4 - }, -/obj/structure/table/reinforced, -/obj/item/deck/cards, -/turf/simulated/floor/shuttle/red, -/area/shuttle/administration/centcom) -"atg" = ( -/obj/structure/bed/padded, -/obj/item/bedsheet/captain, -/turf/simulated/floor/shuttle/red, -/area/shuttle/administration/centcom) -"ath" = ( -/turf/unsimulated/wall, -/area/centcom/living) -"atj" = ( -/obj/structure/bed, -/turf/unsimulated/floor{ - icon_state = "plating"; - name = "plating" - }, -/area/prison/solitary) -"atk" = ( -/turf/unsimulated/floor{ - icon_state = "plating"; - name = "plating" - }, -/area/prison/solitary) -"atl" = ( -/obj/effect/decal/cleanable/cobweb2, -/turf/unsimulated/floor{ - icon_state = "plating"; - name = "plating" - }, -/area/prison/solitary) -"atm" = ( -/obj/effect/decal/cleanable/blood, -/turf/unsimulated/floor{ - icon_state = "plating"; - name = "plating" - }, -/area/prison/solitary) -"atn" = ( -/obj/machinery/vending/coffee{ - prices = list() - }, -/turf/simulated/floor/shuttle/red, -/area/shuttle/administration/centcom) -"ato" = ( -/obj/item/flame/lighter/zippo/random, -/obj/structure/table/reinforced, -/turf/simulated/floor/shuttle/red, -/area/shuttle/administration/centcom) -"atp" = ( -/obj/item/storage/fancy/cigarettes, -/obj/structure/table/reinforced, -/turf/simulated/floor/shuttle/red, -/area/shuttle/administration/centcom) -"atq" = ( -/obj/machinery/light{ - dir = 8 - }, -/turf/simulated/floor/shuttle/red, -/area/shuttle/administration/centcom) -"atr" = ( -/obj/machinery/door/airlock/glass, -/turf/simulated/floor/shuttle/red, -/area/shuttle/administration/centcom) -"ats" = ( -/obj/machinery/light{ - dir = 4 - }, -/turf/simulated/floor/shuttle/red, -/area/shuttle/administration/centcom) -"att" = ( -/obj/structure/table/standard, -/turf/unsimulated/floor{ - icon_state = "carpet" - }, -/area/centcom/living) -"atu" = ( -/turf/unsimulated/floor{ - icon_state = "carpet" - }, -/area/centcom/living) -"atv" = ( -/obj/structure/closet/secure_closet/personal, -/turf/unsimulated/floor{ - icon_state = "carpet" - }, -/area/centcom/living) -"atw" = ( -/obj/effect/wingrille_spawn/reinforced/crescent, -/turf/unsimulated/floor{ - icon_state = "dark" - }, -/area/centcom/living) -"atx" = ( -/turf/unsimulated/wall, -/area/centcom/suppy) -"atA" = ( -/obj/effect/landmark{ - name = "prisonwarp" - }, -/turf/unsimulated/floor{ - icon_state = "plating"; - name = "plating" - }, -/area/prison/solitary) -"atB" = ( -/obj/structure/shuttle/engine/propulsion{ - dir = 8; - icon_state = "propulsion_l" - }, -/obj/effect/paint/black, -/turf/simulated/wall/r_titanium, -/area/shuttle/administration/centcom) -"atC" = ( -/obj/structure/shuttle/engine/heater{ - dir = 8 - }, -/obj/effect/paint/black, -/turf/simulated/wall/r_titanium, -/area/shuttle/administration/centcom) -"atD" = ( -/obj/machinery/vending/snack{ - name = "Getmore Chocolate Corp"; - prices = list() - }, -/turf/simulated/floor/shuttle/red, -/area/shuttle/administration/centcom) -"atE" = ( -/obj/machinery/sleeper{ - dir = 1 - }, -/turf/simulated/floor/shuttle/red, -/area/shuttle/administration/centcom) -"atG" = ( -/obj/structure/bookcase, -/turf/simulated/floor/shuttle/red, -/area/shuttle/administration/centcom) -"atH" = ( -/obj/structure/bed, -/obj/item/bedsheet, -/turf/unsimulated/floor{ - icon_state = "carpet" - }, -/area/centcom/living) -"atI" = ( -/obj/machinery/door/airlock/centcom{ - name = "Living Quarters" - }, -/turf/unsimulated/floor{ - icon_state = "dark" - }, -/area/centcom/living) -"atJ" = ( -/turf/unsimulated/floor{ - icon_state = "steel" - }, -/area/centcom/living) -"atK" = ( -/obj/machinery/atm{ - pixel_y = 24 - }, -/turf/unsimulated/floor{ - icon_state = "dark" - }, -/area/centcom/living) -"atL" = ( -/obj/item/stool{ - pixel_y = 8 - }, -/turf/unsimulated/floor{ - icon_state = "dark" - }, -/area/centcom/living) -"atM" = ( -/obj/item/reagent_containers/food/condiment/small/peppermill{ - pixel_x = 2; - pixel_y = 6 - }, -/obj/structure/table/standard, -/turf/unsimulated/floor{ - icon_state = "steel" - }, -/area/centcom/living) -"atN" = ( -/obj/item/reagent_containers/food/drinks/cans/cola, -/obj/structure/table/standard, -/turf/unsimulated/floor{ - icon_state = "steel" - }, -/area/centcom/living) -"atP" = ( -/obj/machinery/vending/cola, -/turf/unsimulated/floor{ - icon_state = "dark" - }, -/area/centcom/living) -"atQ" = ( -/obj/machinery/vending/cigarette, -/turf/unsimulated/floor{ - icon_state = "dark" - }, -/area/centcom/living) -"atR" = ( -/turf/unsimulated/floor{ - icon_state = "plating"; - name = "plating" - }, -/area/centcom/suppy) -"atS" = ( -/turf/unsimulated/wall{ - desc = "That looks like it doesn't open easily."; - icon = 'icons/obj/doors/rapid_pdoor.dmi'; - icon_state = "pdoor1"; - name = "Shuttle Bay Blast Door" - }, -/area/centcom/suppy) -"atU" = ( -/obj/structure/shuttle/engine/propulsion{ - dir = 8; - icon_state = "propulsion_r" - }, -/obj/effect/paint/black, -/turf/simulated/wall/r_titanium, -/area/shuttle/administration/centcom) -"atV" = ( -/obj/machinery/vending/coffee, -/turf/simulated/floor/shuttle/red, -/area/shuttle/administration/centcom) -"atX" = ( -/obj/machinery/embedded_controller/radio/simple_docking_controller{ - frequency = 1380; - id_tag = "admin_shuttle_bay"; - name = "shuttle bay controller"; - pixel_x = 25; - tag_door = "admin_shuttle_bay_door" - }, -/turf/unsimulated/floor{ - icon_state = "plating"; - name = "plating" - }, -/area/centcom) -"atY" = ( -/obj/item/reagent_containers/food/drinks/bottle/small/beer, -/obj/structure/table/standard, -/turf/unsimulated/floor{ - icon_state = "steel" - }, -/area/centcom/living) -"atZ" = ( -/obj/structure/table/standard, -/turf/unsimulated/floor{ - icon_state = "steel" - }, -/area/centcom/living) -"aua" = ( -/obj/machinery/door/airlock/external, -/turf/unsimulated/floor{ - icon_state = "plating"; - name = "plating" - }, -/area/centcom/living) -"aub" = ( -/turf/unsimulated/floor{ - icon_state = "plating"; - name = "plating" - }, -/area/centcom/living) -"aue" = ( -/obj/structure/bed, -/obj/effect/decal/cleanable/cobweb, -/turf/unsimulated/floor{ - icon_state = "plating"; - name = "plating" - }, -/area/prison/solitary) -"aug" = ( -/obj/machinery/vending/cigarette{ - prices = list() - }, -/turf/simulated/floor/shuttle/red, -/area/shuttle/administration/centcom) -"auh" = ( -/obj/machinery/light, -/turf/simulated/floor/shuttle/red, -/area/shuttle/administration/centcom) -"aui" = ( -/obj/structure/table/reinforced, -/turf/simulated/floor/shuttle/red, -/area/shuttle/administration/centcom) -"auj" = ( -/obj/structure/table/reinforced, -/obj/random/donkpocket_box, -/turf/simulated/floor/shuttle/red, -/area/shuttle/administration/centcom) -"auk" = ( -/obj/machinery/microwave, -/obj/structure/table/reinforced, -/turf/simulated/floor/shuttle/red, -/area/shuttle/administration/centcom) -"aul" = ( -/obj/machinery/computer/modular/preset/cardslot/command{ - dir = 8; - icon_state = "console" - }, -/turf/simulated/floor/shuttle/red, -/area/shuttle/administration/centcom) -"aum" = ( -/obj/effect/wallframe_spawn/reinforced/titanium, -/obj/effect/paint/black, -/turf/simulated/floor/plating, -/area/shuttle/administration/centcom) -"aun" = ( -/obj/machinery/door/airlock/external{ - frequency = 1380; - icon_state = "closed"; - id_tag = "admin_shuttle_bay_door"; - locked = 1 - }, -/turf/unsimulated/floor{ - icon_state = "plating"; - name = "plating" - }, -/area/centcom/living) -"auo" = ( -/obj/effect/paint/silver, -/turf/simulated/wall/r_titanium, -/area/supply/dock) -"auq" = ( -/obj/structure/shuttle/engine/heater{ - dir = 1 - }, -/obj/structure/window/reinforced, -/obj/effect/paint/silver, -/turf/simulated/wall/r_titanium, -/area/supply/dock) -"aus" = ( -/obj/effect/decal/cleanable/blood, -/turf/unsimulated/wall, -/area/prison/solitary) -"aut" = ( -/obj/structure/bed/chair/comfy/black{ - dir = 4 - }, -/turf/simulated/floor/shuttle/red, -/area/shuttle/administration/centcom) -"auu" = ( -/obj/machinery/computer/modular/preset/security{ - dir = 8; - icon_state = "console" - }, -/turf/simulated/floor/shuttle/red, -/area/shuttle/administration/centcom) -"auw" = ( -/obj/machinery/button/blast_door{ - id_tag = "supply_shuttle"; - name = "Supply Drone Shutter Control" - }, -/obj/effect/paint/silver, -/turf/simulated/wall/r_titanium, -/area/supply/dock) -"auy" = ( -/obj/machinery/light/spot{ - dir = 1 - }, -/turf/simulated/floor/plating, -/area/supply/dock) -"auz" = ( -/turf/simulated/floor/plating, -/area/supply/dock) -"auD" = ( -/turf/simulated/floor/shuttle/white, -/area/shuttle/administration/centcom) -"auE" = ( -/obj/structure/closet/secure_closet/freezer/meat, -/turf/simulated/floor/shuttle/white, -/area/shuttle/administration/centcom) -"auF" = ( -/obj/structure/bed/roller, -/turf/simulated/floor/shuttle/white, -/area/shuttle/administration/centcom) -"auG" = ( -/obj/machinery/computer/shuttle_control{ - dir = 8; - req_access = list("ACCESS_CENT_GENERAL"); - shuttle_tag = "Administration" - }, -/turf/simulated/floor/shuttle/red, -/area/shuttle/administration/centcom) -"auI" = ( -/obj/structure/synthesized_instrument/synthesizer/piano{ - dir = 4 - }, -/turf/unsimulated/floor{ - icon_state = "steel" - }, -/area/centcom/living) -"auJ" = ( -/obj/item/stool{ - pixel_y = 8 - }, -/turf/unsimulated/floor{ - icon_state = "steel" - }, -/area/centcom/living) -"auK" = ( -/obj/structure/closet/secure_closet/bar, -/turf/unsimulated/floor{ - icon_state = "white" - }, -/area/centcom/living) -"auL" = ( -/obj/structure/reagent_dispensers/beerkeg, -/turf/unsimulated/floor{ - icon_state = "white" - }, -/area/centcom/living) -"auM" = ( -/obj/machinery/vending/boozeomat, -/turf/unsimulated/floor{ - icon_state = "white" - }, -/area/centcom/living) -"auN" = ( -/obj/structure/kitchenspike, -/turf/unsimulated/floor{ - icon_state = "freezerfloor" - }, -/area/centcom/living) -"auO" = ( -/turf/unsimulated/floor{ - icon_state = "freezerfloor" - }, -/area/centcom/living) -"auP" = ( -/obj/machinery/gibber, -/turf/unsimulated/floor{ - icon_state = "freezerfloor" - }, -/area/centcom/living) -"auQ" = ( -/obj/effect/floor_decal/industrial/hatch/yellow, -/obj/machinery/door/blast/shutters{ - dir = 4; - id_tag = "supply_shuttle"; - name = "Supply Drone Shutters" - }, -/turf/simulated/floor/plating, -/area/supply/dock) -"auR" = ( -/obj/machinery/light{ - dir = 8 - }, -/turf/simulated/floor/shuttle/white, -/area/shuttle/administration/centcom) -"auT" = ( -/obj/item/reagent_containers/food/condiment/small/saltshaker{ - pixel_x = -6 - }, -/obj/structure/table/standard, -/turf/unsimulated/floor{ - icon_state = "steel" - }, -/area/centcom/living) -"auU" = ( -/turf/unsimulated/floor{ - icon_state = "white" - }, -/area/centcom/living) -"auV" = ( -/obj/structure/closet/secure_closet/freezer/meat, -/turf/unsimulated/floor{ - icon_state = "freezerfloor" - }, -/area/centcom/living) -"auW" = ( -/obj/machinery/chem_master/condimaster{ - name = "CondiMaster Neo"; - pixel_x = -5 - }, -/turf/unsimulated/floor{ - icon_state = "freezerfloor" - }, -/area/centcom/living) -"auX" = ( -/obj/effect/shuttle_landmark/supply/centcom, -/turf/simulated/floor/plating, -/area/supply/dock) -"auY" = ( -/obj/machinery/body_scanconsole{ - dir = 4 - }, -/turf/simulated/floor/shuttle/white, -/area/shuttle/administration/centcom) -"auZ" = ( -/obj/machinery/bodyscanner{ - dir = 4 - }, -/turf/simulated/floor/shuttle/white, -/area/shuttle/administration/centcom) -"ava" = ( -/obj/structure/reagent_dispensers/fueltank, -/turf/simulated/floor/shuttle/red, -/area/shuttle/administration/centcom) -"avb" = ( -/obj/structure/reagent_dispensers/watertank, -/turf/simulated/floor/shuttle/red, -/area/shuttle/administration/centcom) -"avc" = ( -/obj/machinery/recharge_station, -/turf/simulated/floor/shuttle/red, -/area/shuttle/administration/centcom) -"avd" = ( -/obj/machinery/robotic_fabricator, -/obj/machinery/light{ - dir = 1 - }, -/turf/simulated/floor/shuttle/red, -/area/shuttle/administration/centcom) -"ave" = ( -/obj/machinery/fabricator/hacked, -/turf/simulated/floor/shuttle/red, -/area/shuttle/administration/centcom) -"avf" = ( -/obj/structure/dispenser, -/turf/simulated/floor/shuttle/red, -/area/shuttle/administration/centcom) -"avg" = ( -/obj/structure/table/standard, -/obj/item/reagent_containers/food/drinks/shaker, -/turf/unsimulated/floor{ - icon_state = "white" - }, -/area/centcom/living) -"avh" = ( -/obj/structure/table/standard, -/turf/unsimulated/floor{ - icon_state = "white" - }, -/area/centcom/living) -"avi" = ( -/obj/machinery/door/airlock/centcom{ - name = "Living Quarters" - }, -/turf/unsimulated/floor{ - icon_state = "freezerfloor" - }, -/area/centcom/living) -"avj" = ( -/obj/machinery/optable, -/turf/simulated/floor/shuttle/white, -/area/shuttle/administration/centcom) -"avk" = ( -/obj/machinery/sleeper{ - dir = 8 - }, -/turf/simulated/floor/shuttle/white, -/area/shuttle/administration/centcom) -"avl" = ( -/obj/machinery/door/airlock/centcom{ - name = "Commander Quarters" - }, -/turf/unsimulated/floor{ - icon_state = "dark" - }, -/area/centcom/living) -"avm" = ( -/obj/effect/wingrille_spawn/reinforced/crescent, -/turf/unsimulated/floor{ - icon_state = "plating"; - name = "plating" - }, -/area/centcom/living) -"avn" = ( -/obj/item/stool{ - pixel_y = 8 - }, -/turf/unsimulated/floor{ - icon_state = "white" - }, -/area/centcom/living) -"avp" = ( -/obj/structure/table/reinforced, -/obj/item/storage/firstaid/surgery, -/obj/item/reagent_containers/glass/bottle/stoxin, -/obj/item/reagent_containers/syringe, -/obj/item/tank/anesthetic, -/obj/item/clothing/mask/breath/medical, -/obj/item/reagent_containers/syringe/antiviral, -/obj/item/reagent_containers/syringe/antiviral, -/obj/item/stack/medical/advanced/bruise_pack, -/obj/item/clothing/gloves/latex, -/obj/item/clothing/mask/surgical, -/obj/item/reagent_containers/spray/sterilizine, -/obj/item/reagent_containers/spray/cleaner, -/obj/structure/closet/medical_wall{ - pixel_x = -32 - }, -/turf/simulated/floor/shuttle/white, -/area/shuttle/administration/centcom) -"avq" = ( -/obj/machinery/light{ - dir = 4 - }, -/turf/simulated/floor/shuttle/white, -/area/shuttle/administration/centcom) -"avs" = ( -/obj/machinery/door/airlock/centcom{ - name = "General Access" - }, -/turf/simulated/floor/plating, -/area/shuttle/administration/centcom) -"avt" = ( -/obj/machinery/recharger{ - pixel_y = 4 - }, -/obj/structure/table/reinforced, -/turf/simulated/floor/shuttle/red, -/area/shuttle/administration/centcom) -"avu" = ( -/obj/machinery/cell_charger, -/obj/structure/table/reinforced, -/obj/item/stack/material/steel{ - amount = 50 - }, -/obj/item/stack/material/glass{ - amount = 50 - }, -/turf/simulated/floor/shuttle/red, -/area/shuttle/administration/centcom) -"avv" = ( -/obj/machinery/sleeper{ - dir = 8 - }, -/turf/unsimulated/floor{ - icon_state = "white" - }, -/area/centcom/living) -"avx" = ( -/turf/unsimulated/floor{ - dir = 8; - icon_state = "wood" - }, -/area/centcom/living) -"avy" = ( -/obj/machinery/computer/modular/preset/cardslot/command{ - dir = 8; - icon_state = "console" - }, -/turf/unsimulated/floor{ - dir = 8; - icon_state = "wood" - }, -/area/centcom/living) -"avz" = ( -/obj/structure/table/standard, -/obj/random/donkpocket_box, -/obj/item/material/kitchen/rollingpin, -/turf/unsimulated/floor{ - icon_state = "white" - }, -/area/centcom/living) -"avB" = ( -/obj/structure/window/reinforced{ - dir = 1 - }, -/obj/structure/showcase{ - desc = "A self-contained autopilot that controls supply drones."; - icon_state = "comm_server"; - name = "Supply Drone Virtual Intelligence" - }, -/turf/simulated/floor/plating, -/area/supply/dock) -"avD" = ( -/obj/structure/lattice, -/turf/space, -/area/space) -"avE" = ( -/obj/machinery/vending/medical, -/obj/effect/paint/black, -/turf/simulated/wall/r_titanium, -/area/shuttle/administration/centcom) -"avF" = ( -/obj/machinery/chemical_dispenser/ert, -/obj/item/reagent_containers/glass/beaker/large, -/turf/simulated/floor/shuttle/white, -/area/shuttle/administration/centcom) -"avG" = ( -/obj/machinery/chem_master, -/turf/simulated/floor/shuttle/white, -/area/shuttle/administration/centcom) -"avH" = ( -/obj/machinery/chemical_dispenser/full, -/obj/item/reagent_containers/glass/beaker/large, -/turf/simulated/floor/shuttle/white, -/area/shuttle/administration/centcom) -"avI" = ( -/obj/machinery/embedded_controller/radio/simple_docking_controller{ - frequency = 1380; - id_tag = "admin_shuttle"; - pixel_x = -25; - req_access = list("ACCESS_CENT_GENERAL"); - tag_door = "admin_shuttle_hatch" - }, -/turf/simulated/floor/plating, -/area/shuttle/administration/centcom) -"avJ" = ( -/obj/machinery/light{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/shuttle/administration/centcom) -"avK" = ( -/obj/item/device/multitool, -/obj/item/reagent_containers/spray/cleaner, -/obj/structure/table/reinforced, -/turf/simulated/floor/shuttle/red, -/area/shuttle/administration/centcom) -"avL" = ( -/obj/item/storage/toolbox/mechanical, -/obj/structure/table/reinforced, -/turf/simulated/floor/shuttle/red, -/area/shuttle/administration/centcom) -"avM" = ( -/obj/structure/bed, -/obj/item/bedsheet, -/turf/unsimulated/floor{ - icon_state = "white" - }, -/area/centcom/living) -"avN" = ( -/obj/structure/table/standard, -/obj/item/card/id/centcom, -/turf/unsimulated/floor{ - dir = 8; - icon_state = "wood" - }, -/area/centcom/living) -"avO" = ( -/obj/machinery/vending/dinnerware, -/turf/unsimulated/floor{ - icon_state = "white" - }, -/area/centcom/living) -"avP" = ( -/obj/structure/table/standard, -/obj/item/reagent_containers/glass/beaker, -/obj/item/reagent_containers/food/condiment/enzyme, -/turf/unsimulated/floor{ - icon_state = "white" - }, -/area/centcom/living) -"avQ" = ( -/obj/structure/table/standard, -/obj/machinery/microwave{ - pixel_x = -3; - pixel_y = 6 - }, -/turf/unsimulated/floor{ - icon_state = "white" - }, -/area/centcom/living) -"avS" = ( -/obj/machinery/door/airlock/external{ - frequency = 1380; - icon_state = "closed"; - id_tag = "admin_shuttle_hatch"; - locked = 1; - name = "Shuttle Hatch" - }, -/obj/effect/shuttle_landmark/admin/start, -/turf/simulated/floor/plating, -/area/shuttle/administration/centcom) -"avT" = ( -/obj/structure/lattice, -/obj/structure/grille, -/turf/space, -/area/space) -"avU" = ( -/turf/unsimulated/floor{ - icon_state = "grass0"; - name = "grass" - }, -/area/centcom/living) -"avV" = ( -/obj/machinery/door/airlock/centcom{ - name = "Living Quarters" - }, -/turf/unsimulated/floor{ - icon_state = "steel" - }, -/area/centcom/living) -"avW" = ( -/obj/structure/lattice, -/obj/structure/grille/broken, -/turf/space, -/area/space) -"avY" = ( -/turf/unsimulated/wall, -/area/centcom/specops) -"avZ" = ( -/turf/unsimulated/wall, -/area/centcom/creed) -"awa" = ( -/turf/unsimulated/wall, -/area/centcom/control) -"awb" = ( -/turf/unsimulated/floor{ - icon_state = "dark" - }, -/area/centcom/living) -"awc" = ( -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/unsimulated/floor{ - icon_state = "steel" - }, -/area/centcom/living) -"awg" = ( -/obj/structure/table/rack, -/obj/item/ammo_magazine/box/machinegun, -/obj/item/ammo_magazine/box/machinegun, -/obj/item/ammo_magazine/box/machinegun, -/obj/item/ammo_magazine/box/machinegun, -/obj/item/gun/projectile/automatic/l6_saw, -/turf/unsimulated/floor{ - dir = 1; - icon_state = "vault" - }, -/area/centcom/specops) -"awh" = ( -/obj/structure/table/rack, -/obj/item/plastique, -/obj/item/plastique, -/obj/item/plastique, -/obj/item/plastique, -/obj/item/plastique, -/obj/item/plastique, -/turf/unsimulated/floor{ - dir = 1; - icon_state = "vault" - }, -/area/centcom/specops) -"awi" = ( -/obj/structure/table/rack, -/obj/item/ammo_magazine/smg_top, -/obj/item/ammo_magazine/smg_top, -/obj/item/ammo_magazine/smg_top, -/obj/item/ammo_magazine/smg_top, -/obj/item/ammo_magazine/smg_top, -/obj/item/ammo_magazine/smg_top, -/obj/item/ammo_magazine/smg_top, -/obj/item/ammo_magazine/smg_top, -/obj/item/ammo_magazine/smg_top, -/obj/item/ammo_magazine/smg_top/rubber, -/obj/item/ammo_magazine/smg_top/rubber, -/obj/item/ammo_magazine/smg_top/rubber, -/obj/item/ammo_magazine/smg_top/rubber, -/obj/item/ammo_magazine/smg_top/rubber, -/obj/item/ammo_magazine/smg_top/rubber, -/obj/item/gun/projectile/automatic/sec_smg, -/obj/item/gun/projectile/automatic/sec_smg, -/obj/item/gun/projectile/automatic/sec_smg, -/turf/unsimulated/floor{ - dir = 1; - icon_state = "vault" - }, -/area/centcom/specops) -"awj" = ( -/obj/structure/table/rack, -/obj/item/gun/energy/ionrifle, -/turf/unsimulated/floor{ - dir = 1; - icon_state = "vault" - }, -/area/centcom/specops) -"awk" = ( -/obj/structure/table/rack, -/obj/item/gun/energy/gun/nuclear, -/obj/item/gun/energy/gun/nuclear, -/obj/item/gun/energy/gun/nuclear, -/turf/unsimulated/floor{ - dir = 1; - icon_state = "vault" - }, -/area/centcom/specops) -"awl" = ( -/obj/structure/table/rack, -/obj/item/ammo_magazine/mil_rifle, -/obj/item/ammo_magazine/mil_rifle, -/obj/item/ammo_magazine/mil_rifle, -/obj/item/ammo_magazine/mil_rifle, -/obj/item/ammo_magazine/mil_rifle, -/obj/item/ammo_magazine/mil_rifle, -/obj/item/gun/projectile/automatic/bullpup_rifle, -/obj/item/gun/projectile/automatic/bullpup_rifle, -/turf/unsimulated/floor{ - dir = 1; - icon_state = "vault" - }, -/area/centcom/specops) -"awm" = ( -/obj/structure/table/rack, -/obj/item/storage/box/flashbangs, -/obj/item/storage/box/flashbangs, -/obj/item/storage/box/emps, -/obj/item/grenade/smokebomb, -/obj/item/grenade/smokebomb, -/obj/item/grenade/smokebomb, -/obj/item/grenade/smokebomb, -/obj/item/grenade/smokebomb, -/obj/item/grenade/smokebomb, -/obj/item/grenade/smokebomb, -/obj/item/gun/launcher/grenade, -/turf/unsimulated/floor{ - dir = 1; - icon_state = "vault" - }, -/area/centcom/specops) -"awn" = ( -/obj/item/aiModule/nanotrasen, -/obj/item/aiModule/reset, -/obj/item/aiModule/freeformcore, -/obj/item/aiModule/protectStation, -/obj/item/aiModule/quarantine, -/obj/item/aiModule/paladin, -/obj/item/aiModule/robocop, -/obj/item/aiModule/safeguard, -/obj/structure/table/rack, -/turf/unsimulated/floor{ - dir = 1; - icon_state = "vault" - }, -/area/centcom/specops) -"awo" = ( -/obj/machinery/door/blast/regular{ - id_tag = "ert_synth_equipment"; - name = "Synthetics Modification Equipment" - }, -/turf/unsimulated/floor{ - dir = 8; - icon_state = "vault" - }, -/area/centcom/specops) -"awp" = ( -/turf/unsimulated/floor{ - dir = 8; - icon_state = "vault" - }, -/area/centcom/specops) -"awq" = ( -/obj/machinery/portable_atmospherics/canister/air, -/turf/unsimulated/floor{ - dir = 8; - icon_state = "vault" - }, -/area/centcom/specops) -"awr" = ( -/turf/unsimulated/floor{ - dir = 1; - icon_state = "vault" - }, -/area/centcom/specops) -"aws" = ( -/obj/machinery/shieldgen, -/turf/unsimulated/floor{ - dir = 1; - icon_state = "vault" - }, -/area/centcom/specops) -"awt" = ( -/obj/machinery/shieldwallgen, -/turf/unsimulated/floor{ - dir = 1; - icon_state = "vault" - }, -/area/centcom/specops) -"awv" = ( -/turf/unsimulated/floor{ - icon_state = "lino" - }, -/area/centcom/creed) -"aww" = ( -/obj/effect/wingrille_spawn/reinforced/crescent, -/turf/unsimulated/floor{ - icon_state = "plating"; - name = "plating" - }, -/area/centcom/creed) -"awx" = ( -/obj/effect/wingrille_spawn/reinforced/crescent, -/turf/unsimulated/floor{ - icon_state = "plating"; - name = "plating" - }, -/area/centcom/control) -"awy" = ( -/obj/machinery/telecomms/receiver/preset_cent, -/obj/effect/floor_decal/corner/green/three_quarters{ - dir = 8 - }, -/turf/unsimulated/floor{ - icon_state = "steel" - }, -/area/centcom/control) -"awz" = ( -/obj/machinery/telecomms/bus/preset_cent, -/obj/effect/floor_decal/corner/green{ - dir = 5 - }, -/turf/unsimulated/floor{ - icon_state = "steel" - }, -/area/centcom/control) -"awA" = ( -/obj/machinery/telecomms/processor/preset_cent, -/obj/effect/floor_decal/corner/green{ - dir = 5 - }, -/turf/unsimulated/floor{ - icon_state = "steel" - }, -/area/centcom/control) -"awB" = ( -/obj/machinery/telecomms/server/presets/centcomm, -/obj/effect/floor_decal/corner/green{ - dir = 5 - }, -/turf/unsimulated/floor{ - icon_state = "steel" - }, -/area/centcom/control) -"awC" = ( -/obj/effect/floor_decal/corner/green{ - dir = 5 - }, -/turf/unsimulated/floor{ - icon_state = "steel" - }, -/area/centcom/control) -"awD" = ( -/obj/machinery/computer/teleporter, -/turf/unsimulated/floor{ - icon_state = "steel" - }, -/area/centcom/control) -"awE" = ( -/obj/machinery/tele_projector, -/turf/unsimulated/floor{ - icon_state = "steel" - }, -/area/centcom/control) -"awF" = ( -/obj/machinery/tele_pad, -/turf/unsimulated/floor{ - icon_state = "steel" - }, -/area/centcom/control) -"awG" = ( -/turf/unsimulated/floor{ - icon_state = "steel" - }, -/area/centcom/control) -"awL" = ( -/obj/machinery/door/blast/regular{ - id_tag = "ASSAULT"; - name = "Assault Weapon Storage" - }, -/turf/unsimulated/floor{ - dir = 8; - icon_state = "vault" - }, -/area/centcom/specops) -"awM" = ( -/obj/structure/table/rack, -/obj/item/stock_parts/circuitboard/borgupload, -/obj/item/stock_parts/circuitboard/aiupload{ - pixel_x = -3; - pixel_y = -3 - }, -/turf/unsimulated/floor{ - dir = 8; - icon_state = "vault" - }, -/area/centcom/specops) -"awN" = ( -/obj/structure/table/rack, -/obj/item/storage/secure/briefcase, -/obj/item/storage/fancy/cigarettes, -/obj/item/flame/lighter/zippo/random, -/obj/item/storage/belt/utility, -/obj/item/storage/backpack/satchel, -/turf/unsimulated/floor{ - icon_state = "lino" - }, -/area/centcom/creed) -"awO" = ( -/obj/structure/table/woodentable{ - dir = 10 - }, -/obj/machinery/button/blast_door{ - id_tag = "CREED"; - name = "Spec Ops Ready Room"; - pixel_x = -5; - pixel_y = 4 - }, -/obj/machinery/button/blast_door{ - icon_state = "doorctrl0"; - id_tag = "ASSAULT"; - name = "Mech Storage"; - pixel_y = -4 - }, -/obj/machinery/button/blast_door{ - id_tag = "ert_synth_equipment"; - name = "Synth Equipment"; - pixel_x = 5; - pixel_y = 4 - }, -/turf/unsimulated/floor{ - icon_state = "lino" - }, -/area/centcom/creed) -"awP" = ( -/obj/machinery/porta_turret/crescent{ - check_synth = 1; - enabled = 1 - }, -/obj/effect/floor_decal/industrial/hatch/yellow, -/turf/unsimulated/floor{ - icon_state = "lino" - }, -/area/centcom/creed) -"awQ" = ( -/obj/machinery/door/airlock/centcom{ - name = "Creed's Office" - }, -/turf/unsimulated/floor{ - icon_state = "dark" - }, -/area/centcom/creed) -"awR" = ( -/turf/unsimulated/floor{ - icon_state = "dark" - }, -/area/centcom/control) -"awS" = ( -/obj/machinery/door/airlock/centcom{ - name = "Maintenance Access" - }, -/turf/unsimulated/floor{ - icon_state = "dark" - }, -/area/centcom/control) -"awT" = ( -/obj/effect/floor_decal/corner/green{ - dir = 9 - }, -/turf/unsimulated/floor{ - icon_state = "steel" - }, -/area/centcom/control) -"awU" = ( -/turf/unsimulated/wall, -/area/centcom/test) -"awW" = ( -/obj/machinery/camera/network/ert{ - c_tag = "Assault Armor North" - }, -/obj/machinery/mech_recharger, -/turf/unsimulated/floor{ - icon_state = "plating"; - name = "plating" - }, -/area/centcom/specops) -"awX" = ( -/obj/item/device/radio/intercom/specops{ - pixel_y = 22 - }, -/turf/unsimulated/floor{ - dir = 1; - icon_state = "vault" - }, -/area/centcom/specops) -"awY" = ( -/turf/unsimulated/floor{ - dir = 9; - icon_state = "vault" - }, -/area/centcom/specops) -"awZ" = ( -/obj/machinery/door/blast/regular{ - id_tag = "ASSAULT"; - name = "Assault Armor Storage" - }, -/turf/unsimulated/floor{ - dir = 8; - icon_state = "vault" - }, -/area/centcom/specops) -"axa" = ( -/obj/machinery/vending/security, -/turf/unsimulated/floor{ - dir = 1; - icon_state = "vault" - }, -/area/centcom/specops) -"axb" = ( -/obj/structure/closet/secure_closet/hos, -/turf/unsimulated/floor{ - icon_state = "lino" - }, -/area/centcom/creed) -"axc" = ( -/obj/structure/bed/chair{ - dir = 4 - }, -/turf/unsimulated/floor{ - icon_state = "lino" - }, -/area/centcom/creed) -"axd" = ( -/obj/structure/table/woodentable{ - dir = 5 - }, -/obj/item/device/radio/intercom/specops, -/turf/unsimulated/floor{ - icon_state = "lino" - }, -/area/centcom/creed) -"axe" = ( -/obj/structure/sign/warning/nosmoking_2, -/turf/unsimulated/wall, -/area/centcom/living) -"axf" = ( -/obj/structure/sign/warning/secure_area, -/turf/unsimulated/wall, -/area/centcom/living) -"axi" = ( -/turf/unsimulated/floor{ - icon_state = "plating"; - name = "plating" - }, -/area/centcom/specops) -"axj" = ( -/obj/structure/table/reinforced, -/turf/unsimulated/floor{ - dir = 1; - icon_state = "vault" - }, -/area/centcom/specops) -"axk" = ( -/obj/structure/table/rack, -/obj/item/gun/energy/gun, -/obj/item/gun/energy/gun, -/obj/item/gun/energy/gun, -/turf/unsimulated/floor{ - dir = 1; - icon_state = "vault" - }, -/area/centcom/specops) -"axl" = ( -/obj/machinery/vending/assist, -/turf/unsimulated/floor{ - dir = 1; - icon_state = "vault" - }, -/area/centcom/specops) -"axm" = ( -/obj/machinery/portable_atmospherics/canister/air, -/turf/unsimulated/floor{ - dir = 1; - icon_state = "vault" - }, -/area/centcom/specops) -"axn" = ( -/obj/machinery/pipedispenser, -/turf/unsimulated/floor{ - dir = 1; - icon_state = "vault" - }, -/area/centcom/specops) -"axo" = ( -/obj/machinery/pipedispenser/disposal, -/turf/unsimulated/floor{ - dir = 1; - icon_state = "vault" - }, -/area/centcom/specops) -"axp" = ( -/obj/machinery/power/emitter, -/turf/unsimulated/floor{ - dir = 1; - icon_state = "vault" - }, -/area/centcom/specops) -"axq" = ( -/obj/machinery/computer/modular/preset/cardslot/command, -/obj/item/card/id/centcom, -/turf/unsimulated/floor{ - icon_state = "lino" - }, -/area/centcom/creed) -"axr" = ( -/obj/structure/table/woodentable{ - dir = 5 - }, -/turf/unsimulated/floor{ - icon_state = "lino" - }, -/area/centcom/creed) -"axs" = ( -/obj/machinery/button/blast_door{ - id_tag = "NTrasen"; - name = "Hull Door Control" - }, -/turf/unsimulated/floor{ - icon_state = "lino" - }, -/area/centcom/creed) -"axt" = ( -/obj/machinery/portable_atmospherics/canister/oxygen, -/turf/unsimulated/floor{ - dir = 1; - icon_state = "vault" - }, -/area/centcom/specops) -"axu" = ( -/obj/effect/floor_decal/corner/green/three_quarters, -/turf/unsimulated/floor{ - icon_state = "steel" - }, -/area/centcom/control) -"axv" = ( -/obj/machinery/telecomms/broadcaster/preset_cent, -/obj/effect/floor_decal/corner/green{ - dir = 10 - }, -/turf/unsimulated/floor{ - icon_state = "steel" - }, -/area/centcom/control) -"axw" = ( -/obj/machinery/telecomms/hub/preset_cent, -/obj/effect/floor_decal/corner/green{ - dir = 10 - }, -/turf/unsimulated/floor{ - icon_state = "steel" - }, -/area/centcom/control) -"axx" = ( -/obj/effect/floor_decal/corner/green{ - dir = 10 - }, -/obj/machinery/computer/rdservercontrol{ - badmin = 1; - dir = 1; - name = "Master R&D Server Controller" - }, -/turf/unsimulated/floor{ - icon_state = "steel" - }, -/area/centcom/control) -"axy" = ( -/obj/machinery/r_n_d/server/centcom, -/obj/effect/floor_decal/corner/green{ - dir = 10 - }, -/turf/unsimulated/floor{ - icon_state = "steel" - }, -/area/centcom/control) -"axz" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 1 - }, -/turf/unsimulated/floor{ - icon_state = "steel" - }, -/area/centcom/control) -"axA" = ( -/turf/unsimulated/floor{ - icon_state = "white" - }, -/area/centcom/test) -"axB" = ( -/obj/structure/bed/roller, -/turf/unsimulated/floor{ - icon_state = "white" - }, -/area/centcom/test) -"axC" = ( -/obj/structure/closet/secure_closet/freezer/meat, -/turf/unsimulated/floor{ - icon_state = "white" - }, -/area/centcom/test) -"axF" = ( -/obj/machinery/vending/tool, -/turf/unsimulated/floor{ - dir = 1; - icon_state = "vault" - }, -/area/centcom/specops) -"axG" = ( -/obj/structure/table/steel_reinforced, -/obj/item/stock_parts/circuitboard/smes, -/obj/item/stock_parts/circuitboard/smes, -/turf/unsimulated/floor{ - dir = 8; - icon_state = "vault" - }, -/area/centcom/specops) -"axH" = ( -/turf/unsimulated/floor{ - icon_state = "dark" - }, -/area/centcom/specops) -"axI" = ( -/obj/machinery/door/airlock/centcom{ - name = "Maintenance Access" - }, -/turf/unsimulated/floor{ - icon_state = "steel" - }, -/area/centcom/control) -"axJ" = ( -/obj/structure/sign/warning/secure_area, -/turf/unsimulated/wall, -/area/centcom/control) -"axK" = ( -/obj/machinery/porta_turret/crescent, -/obj/effect/floor_decal/industrial/hatch/yellow, -/turf/unsimulated/floor{ - icon_state = "steel" - }, -/area/centcom/control) -"axL" = ( -/obj/machinery/door/airlock/centcom{ - name = "Teleporter Bay" - }, -/turf/unsimulated/floor{ - icon_state = "steel" - }, -/area/centcom/control) -"axN" = ( -/obj/structure/bed/chair{ - dir = 1 - }, -/turf/unsimulated/floor{ - icon_state = "white" - }, -/area/centcom/test) -"axQ" = ( -/obj/machinery/mech_recharger, -/turf/unsimulated/floor{ - icon_state = "plating"; - name = "plating" - }, -/area/centcom/specops) -"axR" = ( -/obj/structure/table/steel_reinforced, -/turf/unsimulated/floor{ - dir = 1; - icon_state = "vault" - }, -/area/centcom/specops) -"axS" = ( -/obj/structure/table/reinforced, -/obj/item/device/flash, -/obj/item/device/flash, -/obj/item/device/flash, -/obj/item/device/flash, -/obj/item/melee/baton/loaded, -/obj/item/melee/baton/loaded, -/obj/item/melee/baton/loaded, -/obj/item/melee/baton/loaded, -/obj/item/storage/belt/holster/security/tactical, -/obj/item/storage/belt/holster/security/tactical, -/obj/item/storage/belt/holster/security/tactical, -/obj/item/storage/belt/holster/security/tactical, -/obj/item/taperoll/police, -/turf/unsimulated/floor{ - dir = 1; - icon_state = "vault" - }, -/area/centcom/specops) -"axT" = ( -/obj/structure/table/reinforced, -/obj/item/storage/box/handcuffs, -/obj/item/clothing/glasses/night{ - pixel_x = -1; - pixel_y = -3 - }, -/obj/item/clothing/glasses/night{ - pixel_x = -1; - pixel_y = -3 - }, -/obj/item/clothing/glasses/night{ - pixel_x = -1; - pixel_y = -3 - }, -/obj/item/clothing/glasses/night, -/obj/item/storage/box/handcuffs, -/obj/item/clothing/glasses/tacgoggles, -/obj/item/clothing/glasses/tacgoggles, -/obj/item/clothing/glasses/tacgoggles, -/obj/item/clothing/glasses/tacgoggles, -/obj/item/clothing/glasses/tacgoggles, -/obj/item/clothing/glasses/tacgoggles, -/turf/unsimulated/floor{ - dir = 1; - icon_state = "vault" - }, -/area/centcom/specops) -"axU" = ( -/obj/structure/table/rack, -/obj/item/clothing/suit/armor/vest/ert/security, -/obj/item/clothing/suit/armor/vest/ert/security, -/obj/item/clothing/suit/armor/vest/ert/security, -/obj/item/clothing/suit/armor/vest/ert/security, -/obj/item/clothing/head/helmet/ert/security, -/obj/item/clothing/head/helmet/ert/security, -/obj/item/clothing/head/helmet/ert/security, -/obj/item/clothing/head/helmet/ert/security, -/obj/item/storage/backpack/ert/security, -/obj/item/storage/backpack/ert/security, -/obj/item/storage/backpack/ert/security, -/obj/item/storage/backpack/ert/security, -/turf/unsimulated/floor{ - dir = 1; - icon_state = "vault" - }, -/area/centcom/specops) -"axV" = ( -/obj/structure/table/rack, -/obj/item/rig/military/equipped, -/obj/item/rig/military/equipped, -/turf/unsimulated/floor{ - dir = 1; - icon_state = "vault" - }, -/area/centcom/specops) -"axW" = ( -/obj/structure/table/rack, -/obj/item/clothing/suit/storage/vest/merc{ - pixel_x = 2; - pixel_y = 2 - }, -/obj/item/clothing/suit/storage/vest/merc{ - pixel_x = 2; - pixel_y = 2 - }, -/obj/item/clothing/head/helmet/swat, -/obj/item/clothing/head/helmet/swat, -/turf/unsimulated/floor{ - dir = 1; - icon_state = "vault" - }, -/area/centcom/specops) -"axX" = ( -/obj/structure/table/rack, -/obj/item/rig_module/mounted, -/obj/item/clothing/accessory/storage/black_vest, -/obj/item/clothing/accessory/storage/black_vest, -/obj/item/clothing/accessory/storage/black_vest, -/obj/item/clothing/accessory/storage/black_vest, -/obj/item/clothing/accessory/storage/black_vest, -/obj/item/clothing/accessory/storage/black_vest, -/turf/unsimulated/floor{ - dir = 1; - icon_state = "vault" - }, -/area/centcom/specops) -"axY" = ( -/obj/machinery/vending/engivend, -/turf/unsimulated/floor{ - dir = 1; - icon_state = "vault" - }, -/area/centcom/specops) -"axZ" = ( -/obj/item/stack/material/glass{ - amount = 50 - }, -/obj/item/stack/material/glass{ - amount = 50 - }, -/obj/item/stack/material/glass{ - amount = 50 - }, -/obj/item/stack/material/glass{ - amount = 50 - }, -/obj/item/stack/material/steel{ - amount = 50; - pixel_x = 2; - pixel_y = 2 - }, -/obj/item/stack/material/steel{ - amount = 50; - pixel_x = 2; - pixel_y = 2 - }, -/obj/item/stack/material/steel{ - amount = 50; - pixel_x = 2; - pixel_y = 2 - }, -/obj/item/stack/material/steel{ - amount = 50; - pixel_x = 2; - pixel_y = 2 - }, -/obj/item/stack/material/plasteel{ - amount = 50 - }, -/obj/item/stack/material/plasteel{ - amount = 50 - }, -/obj/item/stack/material/plasteel{ - amount = 50 - }, -/obj/item/stack/material/plasteel{ - amount = 50 - }, -/obj/item/stack/material/glass/reinforced{ - amount = 50 - }, -/obj/item/stack/material/glass/reinforced{ - amount = 50 - }, -/obj/item/stack/material/glass/reinforced{ - amount = 50 - }, -/obj/item/storage/briefcase/inflatable{ - pixel_x = 3; - pixel_y = 3 - }, -/obj/item/storage/briefcase/inflatable{ - pixel_x = 3; - pixel_y = 3 - }, -/obj/item/storage/briefcase/inflatable{ - pixel_x = 3; - pixel_y = 3 - }, -/obj/item/storage/briefcase/inflatable{ - pixel_x = 3; - pixel_y = 3 - }, -/obj/structure/table/steel_reinforced, -/turf/unsimulated/floor{ - dir = 1; - icon_state = "vault" - }, -/area/centcom/specops) -"aya" = ( -/obj/machinery/portable_atmospherics/powered/pump/filled, -/turf/unsimulated/floor{ - dir = 1; - icon_state = "vault" - }, -/area/centcom/specops) -"ayb" = ( -/obj/machinery/porta_turret/crescent, -/turf/unsimulated/floor{ - dir = 1; - icon_state = "vault" - }, -/area/centcom/specops) -"ayc" = ( -/obj/effect/wingrille_spawn/reinforced/crescent, -/turf/unsimulated/floor{ - icon_state = "plating"; - name = "plating" - }, -/area/centcom/specops) -"ayd" = ( -/obj/structure/table/reinforced, -/obj/item/cell/high, -/obj/item/cell/high, -/obj/item/cell/high, -/obj/item/cell/high, -/obj/item/cell/high, -/obj/item/cell/high, -/turf/unsimulated/floor{ - dir = 1; - icon_state = "vault" - }, -/area/centcom/specops) -"aye" = ( -/obj/structure/table/reinforced, -/obj/item/crowbar, -/obj/item/screwdriver, -/turf/unsimulated/floor{ - dir = 1; - icon_state = "vault" - }, -/area/centcom/specops) -"ayf" = ( -/obj/machinery/cell_charger, -/obj/structure/table/reinforced, -/turf/unsimulated/floor{ - dir = 1; - icon_state = "vault" - }, -/area/centcom/specops) -"ayg" = ( -/obj/structure/table/reinforced, -/obj/item/crowbar, -/obj/item/screwdriver, -/obj/item/wrench, -/turf/unsimulated/floor{ - dir = 1; - icon_state = "vault" - }, -/area/centcom/specops) -"ayh" = ( -/obj/effect/floor_decal/corner/green, -/turf/unsimulated/floor{ - icon_state = "steel" - }, -/area/centcom/control) -"ayi" = ( -/obj/effect/floor_decal/corner/green{ - dir = 10 - }, -/turf/unsimulated/floor{ - icon_state = "steel" - }, -/area/centcom/control) -"ayj" = ( -/obj/effect/floor_decal/corner/green{ - dir = 8 - }, -/turf/unsimulated/floor{ - icon_state = "steel" - }, -/area/centcom/control) -"ayk" = ( -/obj/machinery/door/airlock/centcom{ - name = "Research Facility" - }, -/turf/unsimulated/floor{ - icon_state = "steel" - }, -/area/centcom/test) -"ayo" = ( -/obj/machinery/vending/engineering, -/turf/unsimulated/floor{ - dir = 1; - icon_state = "vault" - }, -/area/centcom/specops) -"ayp" = ( -/obj/item/device/multitool, -/obj/item/device/multitool, -/obj/item/device/flash, -/obj/item/device/flash, -/obj/item/rcd, -/obj/item/rcd, -/obj/item/rcd_ammo, -/obj/item/rcd_ammo, -/obj/item/rcd_ammo, -/obj/item/rcd_ammo, -/obj/item/rcd, -/obj/item/rcd, -/obj/item/rcd_ammo, -/obj/item/rcd_ammo, -/obj/item/rcd_ammo, -/obj/item/rcd_ammo, -/obj/item/rcd_ammo, -/obj/item/rcd_ammo, -/obj/item/rcd_ammo, -/obj/structure/table/steel_reinforced, -/turf/unsimulated/floor{ - dir = 1; - icon_state = "vault" - }, -/area/centcom/specops) -"ayq" = ( -/obj/machinery/recharge_station, -/turf/unsimulated/floor{ - dir = 1; - icon_state = "vault" - }, -/area/centcom/specops) -"ayr" = ( -/obj/effect/floor_decal/corner/green{ - dir = 6 - }, -/turf/unsimulated/floor{ - icon_state = "steel" - }, -/area/centcom/control) -"ays" = ( -/obj/structure/closet/secure_closet/medical3{ - pixel_x = -5 - }, -/turf/unsimulated/floor{ - icon_state = "white" - }, -/area/centcom/test) -"ayt" = ( -/obj/structure/closet/secure_closet/medical1{ - pixel_x = 5 - }, -/turf/unsimulated/floor{ - icon_state = "white" - }, -/area/centcom/test) -"ayu" = ( -/obj/structure/closet/secure_closet/medical2{ - pixel_x = 5 - }, -/turf/unsimulated/floor{ - icon_state = "white" - }, -/area/centcom/test) -"ayv" = ( -/obj/machinery/sleeper{ - dir = 4 - }, -/turf/unsimulated/floor{ - icon_state = "white" - }, -/area/centcom/test) -"ayN" = ( -/obj/item/pickaxe/diamonddrill, -/obj/structure/table/steel_reinforced, -/turf/unsimulated/floor{ - dir = 1; - icon_state = "vault" - }, -/area/centcom/specops) -"ayO" = ( -/obj/structure/table/reinforced, -/obj/item/storage/box/flashbangs, -/obj/item/handcuffs, -/obj/item/device/flash, -/obj/item/melee/baton/loaded, -/obj/item/storage/belt/holster/security/tactical, -/obj/item/gun/energy/stunrevolver, -/obj/item/clothing/glasses/tacgoggles, -/turf/unsimulated/floor{ - dir = 1; - icon_state = "vault" - }, -/area/centcom/specops) -"ayP" = ( -/obj/structure/table/reinforced, -/obj/item/device/megaphone, -/obj/item/storage/box/trackimp, -/obj/item/storage/box/cdeathalarm_kit, -/turf/unsimulated/floor{ - dir = 1; - icon_state = "vault" - }, -/area/centcom/specops) -"ayQ" = ( -/obj/structure/table/reinforced, -/obj/item/aicard, -/obj/item/pinpointer/advpinpointer, -/turf/unsimulated/floor{ - dir = 1; - icon_state = "vault" - }, -/area/centcom/specops) -"ayR" = ( -/obj/structure/table/reinforced, -/obj/item/modular_computer/pda/ert, -/turf/unsimulated/floor{ - dir = 1; - icon_state = "vault" - }, -/area/centcom/specops) -"ayS" = ( -/obj/structure/table/reinforced, -/obj/item/gun/energy/gun/nuclear, -/obj/prefab/hand_teleporter, -/turf/unsimulated/floor{ - dir = 1; - icon_state = "vault" - }, -/area/centcom/specops) -"ayT" = ( -/obj/item/clothing/glasses/meson, -/obj/item/clothing/glasses/meson, -/obj/item/clothing/glasses/meson, -/obj/item/clothing/glasses/meson, -/obj/item/storage/belt/utility/full, -/obj/item/storage/belt/utility/full, -/obj/item/storage/belt/utility/full, -/obj/item/storage/belt/utility/full, -/obj/item/clothing/gloves/insulated, -/obj/item/clothing/gloves/insulated, -/obj/item/clothing/gloves/insulated, -/obj/item/clothing/gloves/insulated, -/obj/item/grenade/chem_grenade/metalfoam, -/obj/item/grenade/chem_grenade/metalfoam, -/obj/item/taperoll/engineering, -/obj/item/clothing/glasses/welding/superior, -/obj/item/clothing/glasses/welding/superior, -/obj/item/clothing/glasses/welding/superior, -/obj/item/clothing/glasses/welding/superior, -/obj/item/clothing/glasses/welding/superior, -/obj/structure/table/steel_reinforced, -/turf/unsimulated/floor{ - dir = 1; - icon_state = "vault" - }, -/area/centcom/specops) -"ayU" = ( -/obj/machinery/door/airlock/centcom{ - name = "Special Operations" - }, -/turf/unsimulated/floor{ - dir = 8; - icon_state = "vault" - }, -/area/centcom/specops) -"ayV" = ( -/obj/structure/table/reinforced, -/obj/machinery/recharger{ - pixel_y = 4 - }, -/turf/unsimulated/floor{ - icon_state = "steel" - }, -/area/centcom/control) -"ayW" = ( -/obj/structure/window/reinforced/crescent{ - dir = 8 - }, -/turf/unsimulated/floor{ - icon_state = "steel" - }, -/area/centcom/control) -"ayX" = ( -/obj/item/device/radio/intercom/specops{ - pixel_y = 22 - }, -/obj/structure/decoy{ - name = "A.L.I.C.E." - }, -/turf/unsimulated/floor{ - icon_state = "steel" - }, -/area/centcom/control) -"ayY" = ( -/obj/structure/window/reinforced/crescent{ - dir = 4 - }, -/turf/unsimulated/floor{ - icon_state = "steel" - }, -/area/centcom/control) -"azo" = ( -/obj/structure/table/rack, -/obj/item/rig/military/equipped, -/turf/unsimulated/floor{ - dir = 1; - icon_state = "vault" - }, -/area/centcom/specops) -"azp" = ( -/obj/structure/table/rack, -/obj/item/clothing/suit/storage/vest/merc, -/obj/item/clothing/head/helmet/swat, -/turf/unsimulated/floor{ - dir = 1; - icon_state = "vault" - }, -/area/centcom/specops) -"azq" = ( -/obj/structure/table/rack, -/obj/item/gun/energy/stunrevolver, -/obj/item/gun/energy/stunrevolver, -/obj/item/device/flash, -/obj/item/device/flash, -/obj/item/clothing/accessory/storage/brown_vest, -/obj/item/clothing/accessory/storage/brown_vest, -/obj/item/clothing/accessory/storage/brown_vest, -/obj/item/clothing/accessory/storage/brown_vest, -/obj/item/clothing/accessory/storage/brown_vest, -/obj/item/clothing/accessory/storage/brown_vest, -/turf/unsimulated/floor{ - dir = 1; - icon_state = "vault" - }, -/area/centcom/specops) -"azr" = ( -/obj/machinery/portable_atmospherics/powered/scrubber, -/turf/unsimulated/floor{ - dir = 1; - icon_state = "vault" - }, -/area/centcom/specops) -"azs" = ( -/obj/effect/wingrille_spawn/reinforced/crescent, -/turf/unsimulated/floor{ - dir = 8; - icon_state = "vault" - }, -/area/centcom/specops) -"azt" = ( -/obj/structure/sign/warning/secure_area, -/turf/unsimulated/wall, -/area/centcom/specops) -"azu" = ( -/obj/effect/floor_decal/corner/green{ - dir = 4 - }, -/obj/effect/floor_decal/industrial/warning/corner, -/turf/unsimulated/floor{ - icon_state = "steel" - }, -/area/centcom/control) -"azw" = ( -/obj/structure/bed/chair{ - dir = 8 - }, -/turf/unsimulated/floor{ - icon_state = "steel" - }, -/area/centcom/control) -"azx" = ( -/obj/structure/window/reinforced/crescent{ - dir = 8 - }, -/obj/structure/window/reinforced/crescent, -/turf/unsimulated/floor{ - icon_state = "steel" - }, -/area/centcom/control) -"azy" = ( -/obj/machinery/door/window{ - name = "AI Core Door" - }, -/turf/unsimulated/floor{ - icon_state = "steel" - }, -/area/centcom/control) -"azz" = ( -/obj/structure/window/reinforced/crescent{ - dir = 4 - }, -/obj/structure/window/reinforced/crescent, -/turf/unsimulated/floor{ - icon_state = "steel" - }, -/area/centcom/control) -"azA" = ( -/obj/structure/bed/chair{ - dir = 4 - }, -/turf/unsimulated/floor{ - icon_state = "steel" - }, -/area/centcom/control) -"azB" = ( -/obj/machinery/computer/crew{ - dir = 8 - }, -/turf/unsimulated/floor{ - icon_state = "steel" - }, -/area/centcom/control) -"azC" = ( -/obj/effect/floor_decal/corner/green{ - dir = 1 - }, -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 8 - }, -/turf/unsimulated/floor{ - icon_state = "steel" - }, -/area/centcom/control) -"azQ" = ( -/obj/structure/table/rack, -/obj/item/rig_module/mounted/taser, -/obj/item/rig_module/mounted/taser, -/obj/item/rig_module/mounted/taser, -/obj/item/rig_module/maneuvering_jets, -/obj/item/rig_module/maneuvering_jets, -/obj/item/rig_module/grenade_launcher, -/obj/item/rig_module/device/drill, -/obj/item/rig_module/device/drill, -/obj/item/rig_module/device/healthscanner, -/obj/item/rig_module/device/healthscanner, -/obj/item/rig_module/mounted/plasmacutter, -/obj/item/rig_module/mounted/plasmacutter, -/obj/item/rig_module/device/rcd, -/obj/item/rig_module/device/rcd, -/obj/item/rig_module/chem_dispenser/injector, -/obj/item/rig_module/chem_dispenser/injector, -/obj/item/rig_module/chem_dispenser/combat, -/obj/item/rig_module/chem_dispenser/combat, -/obj/item/rig_module/mounted/egun, -/obj/item/rig_module/mounted/egun, -/turf/unsimulated/floor{ - dir = 1; - icon_state = "vault" - }, -/area/centcom/specops) -"azR" = ( -/obj/machinery/door/airlock/centcom{ - name = "Armory Special Operations" - }, -/turf/unsimulated/floor{ - dir = 8; - icon_state = "vault" - }, -/area/centcom/specops) -"azS" = ( -/obj/machinery/door/airlock/centcom{ - name = "Engineering Special Operations" - }, -/turf/unsimulated/floor{ - dir = 8; - icon_state = "vault" - }, -/area/centcom/specops) -"azT" = ( -/obj/machinery/door/blast/regular{ - id_tag = "CREED"; - name = "Ready Room" - }, -/obj/effect/floor_decal/industrial/hatch/yellow, -/turf/unsimulated/floor{ - icon_state = "steel" - }, -/area/centcom/specops) -"azU" = ( -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/unsimulated/floor{ - icon_state = "steel" - }, -/area/centcom/specops) -"azV" = ( -/obj/machinery/door/airlock/centcom{ - name = "Special Operations" - }, -/obj/effect/floor_decal/industrial/hatch/yellow, -/obj/machinery/door/blast/regular{ - id_tag = "CREED"; - name = "Ready Room" - }, -/turf/unsimulated/floor{ - icon_state = "steel" - }, -/area/centcom/specops) -"azW" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 4 - }, -/turf/unsimulated/floor{ - icon_state = "steel" - }, -/area/centcom/control) -"azX" = ( -/obj/machinery/door/airlock/centcom{ - name = "Bridge" - }, -/turf/unsimulated/floor{ - icon_state = "steel" - }, -/area/centcom/control) -"azY" = ( -/obj/structure/bed/chair, -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 4 - }, -/turf/unsimulated/floor{ - icon_state = "steel" - }, -/area/centcom/control) -"azZ" = ( -/obj/structure/bed/chair, -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 1 - }, -/turf/unsimulated/floor{ - icon_state = "steel" - }, -/area/centcom/control) -"aAa" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 8 - }, -/turf/unsimulated/floor{ - icon_state = "steel" - }, -/area/centcom/control) -"aAl" = ( -/obj/machinery/camera/network/ert{ - c_tag = "Assault Armor South"; - dir = 1 - }, -/turf/unsimulated/floor{ - icon_state = "plating"; - name = "plating" - }, -/area/centcom/specops) -"aAm" = ( -/obj/machinery/door/airlock/centcom{ - name = "Special Operations Command" - }, -/turf/unsimulated/floor{ - dir = 8; - icon_state = "vault" - }, -/area/centcom/specops) -"aAn" = ( -/obj/structure/sign/warning/secure_area/armory{ - pixel_y = 32 - }, -/turf/unsimulated/floor{ - dir = 8; - icon_state = "vault" - }, -/area/centcom/specops) -"aAo" = ( -/obj/structure/sign/warning/engineering_access{ - pixel_y = 32 - }, -/turf/unsimulated/floor{ - dir = 8; - icon_state = "vault" - }, -/area/centcom/specops) -"aAp" = ( -/obj/item/device/radio/intercom/specops{ - pixel_y = 22 - }, -/turf/unsimulated/floor{ - dir = 8; - icon_state = "vault" - }, -/area/centcom/specops) -"aAq" = ( -/obj/machinery/recharger/wallcharger{ - pixel_x = 4; - pixel_y = 32 - }, -/turf/unsimulated/floor{ - dir = 8; - icon_state = "vault" - }, -/area/centcom/specops) -"aAr" = ( -/obj/structure/table/rack, -/obj/item/clothing/head/beret/centcom/officer, -/obj/item/clothing/head/beret/centcom/officer, -/obj/item/clothing/head/beret/centcom/officer, -/obj/item/clothing/head/beret/centcom/officer, -/obj/item/clothing/head/beret/centcom/officer, -/obj/item/clothing/head/beret/centcom/officer, -/obj/item/clothing/mask/balaclava, -/obj/item/clothing/mask/balaclava, -/obj/item/clothing/mask/balaclava, -/obj/item/clothing/mask/balaclava, -/obj/item/clothing/mask/balaclava, -/obj/item/clothing/mask/balaclava, -/obj/item/clothing/accessory/storage/holster/waist, -/obj/item/clothing/accessory/storage/holster/waist, -/obj/item/clothing/accessory/storage/holster/waist, -/turf/unsimulated/floor{ - dir = 1; - icon_state = "vault" - }, -/area/centcom/specops) -"aAs" = ( -/obj/structure/sign/warning/nosmoking_2, -/turf/unsimulated/wall, -/area/centcom/specops) -"aAt" = ( -/obj/effect/floor_decal/corner/green, -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 4 - }, -/turf/unsimulated/floor{ - icon_state = "steel" - }, -/area/centcom/control) -"aAu" = ( -/obj/machinery/computer/robotics{ - dir = 4 - }, -/turf/unsimulated/floor{ - icon_state = "steel" - }, -/area/centcom/control) -"aAv" = ( -/obj/machinery/computer/modular/preset/cardslot/command{ - dir = 1; - icon_state = "console" - }, -/turf/unsimulated/floor{ - icon_state = "steel" - }, -/area/centcom/control) -"aAx" = ( -/obj/effect/floor_decal/corner/green{ - dir = 8 - }, -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 1 - }, -/turf/unsimulated/floor{ - icon_state = "steel" - }, -/area/centcom/control) -"aAE" = ( -/obj/structure/sign/redcross{ - pixel_y = -32 - }, -/turf/unsimulated/floor{ - dir = 8; - icon_state = "vault" - }, -/area/centcom/specops) -"aAF" = ( -/obj/structure/bed/chair, -/turf/unsimulated/floor{ - icon_state = "dark" - }, -/area/centcom/specops) -"aAG" = ( -/obj/structure/table/reinforced, -/obj/item/device/megaphone, -/obj/item/device/megaphone, -/obj/item/device/megaphone, -/obj/item/device/megaphone, -/turf/unsimulated/floor{ - dir = 1; - icon_state = "vault" - }, -/area/centcom/specops) -"aAH" = ( -/obj/structure/table/standard, -/obj/machinery/recharger{ - pixel_y = 4 - }, -/obj/item/handcuffs, -/obj/item/storage/pill_bottle/dice, -/obj/item/deck/cards, -/turf/unsimulated/floor{ - icon_state = "dark" - }, -/area/centcom/specops) -"aAI" = ( -/obj/structure/bed/chair/office/light, -/turf/unsimulated/floor{ - icon_state = "dark" - }, -/area/centcom/specops) -"aAJ" = ( -/obj/machinery/computer/arcade, -/turf/unsimulated/floor{ - icon_state = "dark" - }, -/area/centcom/specops) -"aAK" = ( -/obj/structure/undies_wardrobe, -/turf/unsimulated/floor{ - icon_state = "dark" - }, -/area/centcom/specops) -"aAL" = ( -/obj/structure/table/reinforced, -/turf/unsimulated/floor{ - icon_state = "steel" - }, -/area/centcom/control) -"aAM" = ( -/obj/structure/bed/chair, -/turf/unsimulated/floor{ - icon_state = "steel" - }, -/area/centcom/control) -"aAN" = ( -/obj/machinery/button/blast_door{ - id_tag = "crescent_checkpoint_access"; - name = "Crescent Checkpoint Access"; - pixel_x = -6; - pixel_y = -24 - }, -/obj/machinery/button/blast_door{ - id_tag = "crescent_thunderdome"; - name = "Thunderdome Access"; - pixel_x = 6; - pixel_y = -24 - }, -/obj/machinery/button/blast_door{ - id_tag = "crescent_vip_shuttle"; - name = "VIP Shuttle Access"; - pixel_x = 6; - pixel_y = -34 - }, -/obj/machinery/button/blast_door{ - id_tag = "CREED"; - name = "Spec Ops Ready Room"; - pixel_x = -6; - pixel_y = -34 - }, -/obj/machinery/turretid{ - pixel_x = 28; - pixel_y = -28; - req_access = list("ACCESS_CENT_GENERAL") - }, -/turf/unsimulated/floor{ - icon_state = "steel" - }, -/area/centcom/control) -"aAO" = ( -/obj/structure/table/reinforced, -/obj/item/card/id/captains_spare, -/turf/unsimulated/floor{ - icon_state = "steel" - }, -/area/centcom/control) -"aAZ" = ( -/obj/machinery/door/airlock/centcom{ - name = "Medical Special Operations" - }, -/turf/unsimulated/floor{ - dir = 8; - icon_state = "vault" - }, -/area/centcom/specops) -"aBa" = ( -/obj/machinery/fabricator/hacked, -/turf/unsimulated/floor{ - dir = 1; - icon_state = "vault" - }, -/area/centcom/specops) -"aBb" = ( -/obj/structure/table/reinforced, -/obj/item/storage/box/donut, -/turf/unsimulated/floor{ - icon_state = "dark" - }, -/area/centcom/specops) -"aBc" = ( -/obj/structure/table/reinforced, -/turf/unsimulated/floor{ - icon_state = "dark" - }, -/area/centcom/specops) -"aBd" = ( -/obj/structure/table/reinforced, -/obj/item/crowbar, -/obj/item/screwdriver, -/turf/unsimulated/floor{ - icon_state = "dark" - }, -/area/centcom/specops) -"aBe" = ( -/obj/structure/table/reinforced, -/obj/item/modular_computer/pda/ert, -/obj/item/modular_computer/pda/ert, -/obj/item/modular_computer/pda/ert, -/obj/item/modular_computer/pda/ert, -/obj/item/modular_computer/pda/ert, -/obj/item/modular_computer/pda/ert, -/obj/item/modular_computer/pda/ert, -/turf/unsimulated/floor{ - dir = 1; - icon_state = "vault" - }, -/area/centcom/specops) -"aBf" = ( -/obj/machinery/status_display, -/turf/unsimulated/wall, -/area/centcom/specops) -"aBg" = ( -/obj/structure/table/rack, -/obj/item/device/lightreplacer, -/obj/item/device/lightreplacer, -/turf/unsimulated/floor{ - dir = 1; - icon_state = "vault" - }, -/area/centcom/specops) -"aBh" = ( -/obj/structure/table/reinforced, -/obj/item/modular_computer/pda/captain, -/turf/unsimulated/floor{ - icon_state = "steel" - }, -/area/centcom/control) -"aBj" = ( -/obj/machinery/computer/modular/preset/security{ - dir = 1; - icon_state = "console" - }, -/turf/unsimulated/floor{ - icon_state = "steel" - }, -/area/centcom/control) -"aBs" = ( -/obj/structure/table/reinforced, -/obj/item/storage/belt/medical, -/obj/item/storage/belt/medical, -/obj/item/storage/belt/medical, -/obj/item/reagent_containers/glass/bottle/inaprovaline, -/obj/item/reagent_containers/glass/bottle/inaprovaline, -/obj/item/reagent_containers/glass/bottle/inaprovaline, -/obj/item/reagent_containers/hypospray, -/obj/item/reagent_containers/hypospray, -/obj/item/reagent_containers/hypospray, -/obj/item/storage/box/syringes, -/turf/unsimulated/floor{ - dir = 1; - icon_state = "vault" - }, -/area/centcom/specops) -"aBt" = ( -/obj/structure/table/reinforced, -/obj/item/storage/belt/medical, -/obj/item/storage/belt/medical, -/obj/item/storage/belt/medical, -/obj/item/reagent_containers/glass/bottle/inaprovaline, -/obj/item/reagent_containers/glass/bottle/inaprovaline, -/obj/item/reagent_containers/glass/bottle/inaprovaline, -/obj/item/reagent_containers/hypospray, -/obj/item/reagent_containers/hypospray, -/obj/item/reagent_containers/hypospray, -/obj/item/storage/box/syringes, -/obj/item/reagent_containers/glass/beaker/large, -/turf/unsimulated/floor{ - dir = 1; - icon_state = "vault" - }, -/area/centcom/specops) -"aBu" = ( -/obj/structure/table/reinforced, -/obj/item/storage/box/autoinjectors, -/obj/item/storage/box/beakers, -/obj/item/storage/box/gloves, -/obj/item/storage/box/pillbottles, -/obj/item/bodybag/cryobag, -/obj/item/bodybag/cryobag, -/obj/item/bodybag/cryobag, -/obj/item/bodybag/cryobag, -/obj/item/bodybag/cryobag, -/obj/item/bodybag/cryobag, -/obj/item/defibrillator/compact/combat/loaded, -/turf/unsimulated/floor{ - dir = 1; - icon_state = "vault" - }, -/area/centcom/specops) -"aBv" = ( -/obj/machinery/chemical_dispenser/ert, -/obj/item/reagent_containers/glass/beaker/large, -/turf/unsimulated/floor{ - dir = 1; - icon_state = "vault" - }, -/area/centcom/specops) -"aBw" = ( -/obj/machinery/chem_master, -/turf/unsimulated/floor{ - dir = 1; - icon_state = "vault" - }, -/area/centcom/specops) -"aBx" = ( -/obj/structure/closet/crate, -/obj/item/clothing/shoes/magboots, -/obj/item/clothing/shoes/magboots, -/obj/item/clothing/shoes/magboots, -/obj/item/clothing/shoes/magboots, -/obj/item/clothing/shoes/magboots, -/obj/item/clothing/shoes/magboots, -/obj/item/clothing/shoes/magboots, -/turf/unsimulated/floor{ - dir = 1; - icon_state = "vault" - }, -/area/centcom/specops) -"aBy" = ( -/obj/structure/table/reinforced, -/obj/item/pen, -/obj/item/paper_bin{ - pixel_x = 1; - pixel_y = 9 - }, -/turf/unsimulated/floor{ - icon_state = "dark" - }, -/area/centcom/specops) -"aBz" = ( -/obj/structure/table/reinforced, -/obj/item/device/paicard, -/obj/item/device/paicard, -/obj/item/device/paicard, -/obj/item/device/paicard, -/obj/item/device/paicard, -/obj/item/device/paicard, -/turf/unsimulated/floor{ - icon_state = "dark" - }, -/area/centcom/specops) -"aBA" = ( -/obj/effect/landmark{ - name = "Commando" - }, -/turf/unsimulated/floor{ - dir = 1; - icon_state = "vault" - }, -/area/centcom/specops) -"aBB" = ( -/obj/structure/closet{ - name = "emergency response team wardrobe" - }, -/obj/item/clothing/under/syndicate/combat, -/turf/unsimulated/floor{ - dir = 8; - icon_state = "vault" - }, -/area/centcom/specops) -"aBC" = ( -/obj/structure/hygiene/sink{ - dir = 4; - pixel_x = 11 - }, -/turf/unsimulated/floor{ - icon_state = "dark" - }, -/area/centcom/specops) -"aBI" = ( -/obj/structure/closet/crate, -/turf/unsimulated/floor{ - dir = 1; - icon_state = "vault" - }, -/area/centcom/specops) -"aBJ" = ( -/obj/structure/bed/chair{ - dir = 1 - }, -/turf/unsimulated/floor{ - icon_state = "dark" - }, -/area/centcom/specops) -"aBK" = ( -/obj/structure/table/rack, -/obj/item/storage/backpack/security, -/obj/item/clothing/under/syndicate/combat, -/obj/item/clothing/shoes/galoshes, -/obj/item/clothing/head/bio_hood/janitor, -/obj/item/clothing/suit/bio_suit/janitor, -/obj/item/clothing/glasses/science, -/obj/item/storage/backpack/security, -/obj/item/clothing/under/syndicate/combat, -/obj/item/clothing/shoes/galoshes, -/obj/item/clothing/head/bio_hood/janitor, -/obj/item/clothing/suit/bio_suit/janitor, -/obj/item/clothing/glasses/science, -/obj/item/reagent_containers/spray/cleaner{ - pixel_x = 6; - pixel_y = 3 - }, -/obj/item/reagent_containers/spray/cleaner{ - pixel_x = 6; - pixel_y = 3 - }, -/obj/item/reagent_containers/spray/plantbgone, -/obj/item/reagent_containers/spray/plantbgone, -/obj/item/storage/box/lights/mixed, -/obj/item/storage/box/lights/mixed, -/obj/item/grenade/chem_grenade/cleaner, -/obj/item/grenade/chem_grenade/cleaner, -/obj/item/grenade/chem_grenade/cleaner, -/turf/unsimulated/floor{ - dir = 1; - icon_state = "vault" - }, -/area/centcom/specops) -"aBL" = ( -/obj/item/mop, -/obj/structure/mopbucket, -/turf/unsimulated/floor{ - dir = 1; - icon_state = "vault" - }, -/area/centcom/specops) -"aBM" = ( -/obj/structure/reagent_dispensers/watertank, -/obj/item/reagent_containers/glass/bucket{ - amount_per_transfer_from_this = 50 - }, -/turf/unsimulated/floor{ - dir = 1; - icon_state = "vault" - }, -/area/centcom/specops) -"aBN" = ( -/obj/effect/floor_decal/corner/green{ - dir = 4 - }, -/turf/unsimulated/floor{ - icon_state = "steel" - }, -/area/centcom/control) -"aBO" = ( -/obj/effect/floor_decal/corner/green{ - dir = 1 - }, -/turf/unsimulated/floor{ - icon_state = "steel" - }, -/area/centcom/control) -"aBZ" = ( -/obj/structure/table/reinforced, -/obj/item/clothing/mask/gas, -/obj/item/clothing/mask/gas, -/obj/item/clothing/mask/gas, -/obj/item/clothing/mask/gas, -/obj/item/clothing/mask/gas, -/obj/item/clothing/mask/gas, -/obj/item/clothing/mask/gas, -/obj/item/clothing/mask/gas, -/obj/item/clothing/mask/gas, -/turf/unsimulated/floor{ - dir = 1; - icon_state = "vault" - }, -/area/centcom/specops) -"aCa" = ( -/obj/machinery/door/airlock/centcom{ - name = "Holding Cell" - }, -/obj/machinery/door/blast/regular{ - id_tag = "crescent_checkpoint_access"; - name = "Crescent Checkpoint" - }, -/turf/unsimulated/floor{ - icon_state = "steel" - }, -/area/centcom/control) -"aCb" = ( -/obj/structure/sign/warning/nosmoking_2, -/turf/unsimulated/wall, -/area/centcom/control) -"aCj" = ( -/obj/structure/table/reinforced, -/obj/item/storage/box/bodybags, -/obj/item/storage/firstaid/o2, -/obj/item/storage/firstaid/regular, -/obj/item/device/flash, -/obj/item/clothing/glasses/hud/health, -/obj/item/clothing/glasses/hud/health, -/obj/item/clothing/glasses/hud/health, -/obj/item/device/flash, -/obj/item/storage/firstaid/regular, -/obj/item/storage/firstaid/regular, -/obj/item/storage/pill_bottle/antitox, -/obj/item/storage/pill_bottle/kelotane, -/obj/item/storage/pill_bottle/kelotane, -/obj/item/storage/pill_bottle/antitox, -/obj/item/storage/pill_bottle/kelotane, -/obj/item/storage/firstaid/adv, -/obj/item/storage/firstaid/adv, -/obj/item/storage/firstaid/toxin, -/obj/item/storage/firstaid/fire, -/turf/unsimulated/floor{ - dir = 1; - icon_state = "vault" - }, -/area/centcom/specops) -"aCk" = ( -/obj/structure/table/reinforced, -/obj/item/reagent_containers/ivbag/blood/OMinus, -/obj/item/reagent_containers/ivbag/blood/OMinus, -/obj/item/reagent_containers/ivbag/blood/OMinus, -/obj/item/reagent_containers/ivbag/blood/OMinus, -/obj/item/reagent_containers/ivbag/blood/OMinus, -/obj/item/reagent_containers/ivbag/blood/OMinus, -/obj/item/roller, -/obj/item/roller, -/obj/item/roller, -/obj/item/defibrillator/loaded, -/turf/unsimulated/floor{ - dir = 1; - icon_state = "vault" - }, -/area/centcom/specops) -"aCl" = ( -/obj/structure/iv_drip, -/turf/unsimulated/floor{ - dir = 1; - icon_state = "vault" - }, -/area/centcom/specops) -"aCm" = ( -/obj/structure/closet/crate/medical, -/obj/item/circular_saw, -/obj/item/surgicaldrill, -/obj/item/bonegel{ - pixel_x = 4; - pixel_y = 3 - }, -/obj/item/bonesetter, -/obj/item/scalpel, -/obj/item/retractor{ - pixel_y = 6 - }, -/obj/item/hemostat{ - pixel_y = 4 - }, -/obj/item/cautery{ - pixel_y = 4 - }, -/obj/item/FixOVein{ - pixel_x = -6; - pixel_y = 1 - }, -/obj/item/stack/nanopaste, -/obj/item/tank/anesthetic, -/obj/item/clothing/mask/breath/medical, -/obj/item/clothing/mask/surgical, -/obj/item/clothing/mask/surgical, -/turf/unsimulated/floor{ - dir = 1; - icon_state = "vault" - }, -/area/centcom/specops) -"aCn" = ( -/obj/structure/table/rack, -/obj/item/device/flash, -/obj/item/device/flash, -/obj/item/gun/energy/stunrevolver, -/obj/item/gun/energy/stunrevolver, -/obj/item/clothing/accessory/storage/white_vest, -/obj/item/clothing/accessory/storage/white_vest, -/obj/item/clothing/accessory/storage/white_vest, -/obj/item/clothing/accessory/storage/white_vest, -/obj/item/clothing/accessory/storage/white_vest, -/obj/item/clothing/accessory/storage/white_vest, -/turf/unsimulated/floor{ - dir = 1; - icon_state = "vault" - }, -/area/centcom/specops) -"aCo" = ( -/obj/structure/table/rack, -/obj/item/clothing/suit/storage/vest/merc{ - pixel_x = 2; - pixel_y = 2 - }, -/obj/item/clothing/suit/storage/vest/merc, -/obj/item/clothing/head/helmet/swat, -/obj/item/clothing/head/helmet/swat, -/turf/unsimulated/floor{ - dir = 1; - icon_state = "vault" - }, -/area/centcom/specops) -"aCp" = ( -/obj/structure/table/rack, -/obj/item/clothing/mask/breath, -/obj/item/clothing/mask/breath, -/obj/item/clothing/mask/breath, -/obj/item/clothing/mask/breath, -/obj/item/clothing/mask/breath, -/obj/item/clothing/mask/breath, -/obj/item/clothing/mask/breath, -/obj/item/clothing/mask/breath, -/turf/unsimulated/floor{ - dir = 1; - icon_state = "vault" - }, -/area/centcom/specops) -"aCq" = ( -/obj/structure/table/rack, -/obj/item/tank/oxygen_emergency_double, -/obj/item/tank/oxygen_emergency_double, -/obj/item/tank/oxygen_emergency_double, -/turf/unsimulated/floor{ - dir = 1; - icon_state = "vault" - }, -/area/centcom/specops) -"aCr" = ( -/obj/machinery/vending/snack{ - name = "hacked Getmore Chocolate Corp"; - prices = list() - }, -/turf/unsimulated/floor{ - icon_state = "dark" - }, -/area/centcom/specops) -"aCs" = ( -/turf/unsimulated/floor{ - icon_state = "cult"; - name = "plating" - }, -/area/centcom/holding) -"aCt" = ( -/obj/item/stool/padded, -/obj/item/stool/padded, -/turf/unsimulated/floor{ - icon_state = "cult"; - name = "plating" - }, -/area/centcom/holding) -"aCu" = ( -/obj/item/stool/padded, -/turf/unsimulated/floor{ - icon_state = "cult"; - name = "plating" - }, -/area/centcom/holding) -"aCv" = ( -/obj/effect/wingrille_spawn/reinforced/crescent, -/turf/unsimulated/floor{ - icon_state = "cult"; - name = "plating" - }, -/area/centcom/holding) -"aCx" = ( -/turf/unsimulated/floor{ - icon_state = "steel" - }, -/area/centcom/holding) -"aCy" = ( -/obj/item/stool/padded, -/obj/effect/floor_decal/corner/red{ - dir = 6 - }, -/turf/unsimulated/floor{ - icon_state = "steel" - }, -/area/centcom/holding) -"aCz" = ( -/turf/unsimulated/wall, -/area/centcom/holding) -"aCA" = ( -/obj/machinery/door/airlock/centcom{ - name = "General Access" - }, -/obj/machinery/door/blast/regular{ - id_tag = "crescent_checkpoint_access"; - name = "Crescent Checkpoint" - }, -/turf/unsimulated/floor{ - icon_state = "steel" - }, -/area/centcom/control) -"aCP" = ( -/obj/machinery/vending/cola{ - name = "Robust Softdrinks"; - prices = list() - }, -/turf/unsimulated/floor{ - icon_state = "dark" - }, -/area/centcom/specops) -"aCQ" = ( -/obj/structure/table/reinforced, -/turf/unsimulated/floor{ - icon_state = "cult"; - name = "plating" - }, -/area/centcom/holding) -"aCR" = ( -/obj/effect/floor_decal/corner/red{ - dir = 9 - }, -/turf/unsimulated/floor{ - icon_state = "steel" - }, -/area/centcom/holding) -"aCS" = ( -/obj/effect/floor_decal/corner/green/three_quarters{ - dir = 8 - }, -/turf/unsimulated/floor{ - icon_state = "steel" - }, -/area/centcom/holding) -"aCT" = ( -/obj/effect/floor_decal/corner/green{ - dir = 1 - }, -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 4 - }, -/turf/unsimulated/floor{ - icon_state = "steel" - }, -/area/centcom/holding) -"aCU" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 1 - }, -/turf/unsimulated/floor{ - icon_state = "steel" - }, -/area/centcom/holding) -"aCV" = ( -/obj/effect/floor_decal/corner/green{ - dir = 4 - }, -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 1 - }, -/turf/unsimulated/floor{ - icon_state = "steel" - }, -/area/centcom/holding) -"aCW" = ( -/obj/effect/floor_decal/corner/green/three_quarters{ - dir = 1 - }, -/turf/unsimulated/floor{ - icon_state = "steel" - }, -/area/centcom/holding) -"aDk" = ( -/obj/machinery/vending/cigarette{ - name = "cigarette machine"; - prices = list() - }, -/turf/unsimulated/floor{ - icon_state = "dark" - }, -/area/centcom/specops) -"aDl" = ( -/obj/effect/floor_decal/corner/green{ - dir = 9 - }, -/turf/unsimulated/floor{ - icon_state = "steel" - }, -/area/centcom/holding) -"aDm" = ( -/obj/effect/floor_decal/corner/green{ - dir = 6 - }, -/turf/unsimulated/floor{ - icon_state = "steel" - }, -/area/centcom/holding) -"aDy" = ( -/obj/structure/shuttle/engine/propulsion{ - dir = 1; - icon_state = "propulsion_r" - }, -/obj/effect/paint/black, -/turf/simulated/wall/r_titanium, -/area/shuttle/specops/centcom) -"aDz" = ( -/obj/structure/shuttle/engine/propulsion{ - dir = 1 - }, -/obj/effect/paint/black, -/turf/simulated/wall/r_titanium, -/area/shuttle/specops/centcom) -"aDA" = ( -/obj/structure/shuttle/engine/propulsion{ - dir = 1; - icon_state = "propulsion_l" - }, -/obj/effect/paint/black, -/turf/simulated/wall/r_titanium, -/area/shuttle/specops/centcom) -"aDB" = ( -/obj/machinery/door/airlock/centcom{ - name = "Special Operations Boarding Pod" - }, -/turf/unsimulated/floor{ - dir = 8; - icon_state = "vault" - }, -/area/centcom/specops) -"aDC" = ( -/obj/machinery/camera/network/crescent{ - c_tag = "Crescent Arrivals - Holding Cell"; - dir = 4 - }, -/turf/unsimulated/floor{ - icon_state = "cult"; - name = "plating" - }, -/area/centcom/holding) -"aDD" = ( -/obj/machinery/door/airlock/glass/security{ - name = "Holding Cell" - }, -/turf/unsimulated/floor{ - icon_state = "steel" - }, -/area/centcom/holding) -"aDE" = ( -/obj/effect/wingrille_spawn/reinforced/crescent, -/turf/unsimulated/floor{ - icon_state = "plating"; - name = "plating" - }, -/area/centcom/holding) -"aDF" = ( -/obj/machinery/door/blast/regular{ - id_tag = "CentComPort"; - name = "Security Doors" - }, -/turf/unsimulated/floor{ - icon_state = "steel" - }, -/area/centcom/holding) -"aDG" = ( -/obj/machinery/door/airlock/centcom{ - name = "Arrivals Processing" - }, -/turf/unsimulated/floor{ - icon_state = "steel" - }, -/area/centcom/holding) -"aDQ" = ( -/obj/effect/paint/black, -/turf/simulated/wall/r_titanium, -/area/shuttle/specops/centcom) -"aDR" = ( -/obj/structure/shuttle/engine/heater{ - dir = 1 - }, -/obj/structure/window/reinforced/crescent, -/obj/effect/paint/black, -/turf/simulated/floor/plating, -/area/shuttle/specops/centcom) -"aDS" = ( -/obj/structure/bed, -/obj/item/bedsheet/red, -/turf/unsimulated/floor{ - icon_state = "cult"; - name = "plating" - }, -/area/centcom/holding) -"aDT" = ( -/obj/effect/floor_decal/corner/red{ - dir = 6 - }, -/turf/unsimulated/floor{ - icon_state = "steel" - }, -/area/centcom/holding) -"aDU" = ( -/obj/machinery/door/window/northleft{ - base_state = "right"; - dir = 8; - icon_state = "right"; - name = "Arrivals Processing" - }, -/turf/unsimulated/floor{ - icon_state = "steel" - }, -/area/centcom/holding) -"aDV" = ( -/obj/machinery/computer/modular/preset/security{ - dir = 8; - icon_state = "console" - }, -/turf/unsimulated/floor{ - icon_state = "steel" - }, -/area/centcom/holding) -"aEd" = ( -/obj/machinery/computer/modular/preset/cardslot/command{ - dir = 4; - icon_state = "console" - }, -/turf/simulated/floor/shuttle/red, -/area/shuttle/specops/centcom) -"aEe" = ( -/obj/structure/bed/chair, -/turf/simulated/floor/shuttle/red, -/area/shuttle/specops/centcom) -"aEf" = ( -/obj/machinery/computer/shuttle_control/specops{ - dir = 8 - }, -/turf/simulated/floor/shuttle/red, -/area/shuttle/specops/centcom) -"aEg" = ( -/obj/structure/window/reinforced/crescent{ - dir = 8 - }, -/turf/unsimulated/floor{ - icon_state = "steel" - }, -/area/centcom/holding) -"aEh" = ( -/obj/structure/bed/chair/office/dark, -/obj/machinery/button/blast_door{ - desc = "A remote control switch for port-side blast doors."; - id_tag = "CentComPort"; - name = "Security Doors"; - pixel_x = -12; - pixel_y = -25 - }, -/turf/unsimulated/floor{ - icon_state = "steel" - }, -/area/centcom/holding) -"aEq" = ( -/obj/machinery/computer/prisoner{ - dir = 4; - name = "Implant Management" - }, -/turf/simulated/floor/shuttle/red, -/area/shuttle/specops/centcom) -"aEr" = ( -/turf/simulated/floor/shuttle/red, -/area/shuttle/specops/centcom) -"aEs" = ( -/obj/item/device/radio/intercom/specops{ - dir = 8; - pixel_x = 22 - }, -/obj/structure/bed/chair{ - dir = 8 - }, -/turf/simulated/floor/shuttle/red, -/area/shuttle/specops/centcom) -"aEt" = ( -/obj/structure/table/reinforced, -/obj/effect/floor_decal/corner/red{ - dir = 9 - }, -/turf/unsimulated/floor{ - icon_state = "steel" - }, -/area/centcom/holding) -"aEu" = ( -/obj/structure/table/reinforced, -/turf/unsimulated/floor{ - icon_state = "steel" - }, -/area/centcom/holding) -"aEv" = ( -/obj/structure/table/reinforced, -/obj/effect/floor_decal/corner/red{ - dir = 6 - }, -/turf/unsimulated/floor{ - icon_state = "steel" - }, -/area/centcom/holding) -"aEw" = ( -/obj/machinery/door/blast/regular{ - density = 0; - icon_state = "pdoor0"; - id_tag = "CentComPort"; - name = "Security Doors"; - opacity = 0 - }, -/turf/unsimulated/floor{ - icon_state = "steel" - }, -/area/centcom/holding) -"aEy" = ( -/obj/structure/table/reinforced, -/obj/item/paper_bin{ - pixel_x = 1; - pixel_y = 9 - }, -/obj/item/pen, -/obj/machinery/door/window/southright{ - name = "Arrivals Processing" - }, -/turf/unsimulated/floor{ - icon_state = "steel" - }, -/area/centcom/holding) -"aEB" = ( -/obj/structure/bed/chair{ - dir = 4 - }, -/obj/machinery/light/small{ - dir = 8 - }, -/turf/simulated/floor/shuttle/red, -/area/shuttle/specops/centcom) -"aEC" = ( -/obj/machinery/embedded_controller/radio/simple_docking_controller{ - frequency = 1380; - id_tag = "specops_shuttle_port"; - name = "port docking hatch controller"; - pixel_x = 24; - tag_door = "specops_shuttle_port_hatch" - }, -/obj/structure/bed/chair{ - dir = 8 - }, -/obj/machinery/light/small{ - dir = 4 - }, -/turf/simulated/floor/shuttle/red, -/area/shuttle/specops/centcom) -"aED" = ( -/turf/unsimulated/floor{ - icon_state = "dark" - }, -/area/centcom/ferry) -"aEE" = ( -/turf/unsimulated/wall, -/area/centcom/ferry) -"aEF" = ( -/obj/effect/wingrille_spawn/reinforced/crescent, -/turf/unsimulated/floor{ - icon_state = "cult"; - name = "plating" - }, -/area/centcom/ferry) -"aEG" = ( -/obj/machinery/atm{ - pixel_x = -26 - }, -/obj/effect/floor_decal/corner/green{ - dir = 9 - }, -/turf/unsimulated/floor{ - icon_state = "steel" - }, -/area/centcom/holding) -"aEH" = ( -/obj/effect/floor_decal/industrial/hatch/yellow, -/turf/unsimulated/floor{ - icon_state = "steel" - }, -/area/centcom/holding) -"aEV" = ( -/obj/structure/bed/chair{ - dir = 4 - }, -/turf/simulated/floor/shuttle/red, -/area/shuttle/specops/centcom) -"aEW" = ( -/obj/machinery/door/airlock/external{ - frequency = 1380; - icon_state = "closed"; - id_tag = "specops_shuttle_port_hatch"; - locked = 1; - name = "Port Docking Hatch" - }, -/turf/unsimulated/floor{ - icon_state = "dark" - }, -/area/shuttle/specops/centcom) -"aEX" = ( -/obj/machinery/door/airlock/external{ - frequency = 1380; - icon_state = "closed"; - id_tag = "specops_centcom_dock_door"; - locked = 1 - }, -/turf/unsimulated/floor{ - icon_state = "dark" - }, -/area/centcom/specops) -"aEY" = ( -/obj/effect/wingrille_spawn/reinforced/crescent, -/turf/unsimulated/floor{ - icon_state = "plating"; - name = "plating" - }, -/area/centcom/ferry) -"aEZ" = ( -/obj/structure/bed, -/obj/item/bedsheet/orange, -/turf/unsimulated/floor{ - icon_state = "dark" - }, -/area/centcom/ferry) -"aFa" = ( -/obj/structure/hygiene/toilet{ - dir = 8 - }, -/turf/unsimulated/floor{ - icon_state = "dark" - }, -/area/centcom/ferry) -"aFb" = ( -/turf/space, -/area/centcom/ferry) -"aFc" = ( -/turf/unsimulated/floor{ - icon_state = "grass0"; - name = "grass" - }, -/area/centcom/holding) -"aFd" = ( -/obj/structure/bed/chair{ - dir = 4 - }, -/obj/effect/floor_decal/corner/green{ - dir = 9 - }, -/turf/unsimulated/floor{ - icon_state = "steel" - }, -/area/centcom/holding) -"aFe" = ( -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/unsimulated/floor{ - icon_state = "steel" - }, -/area/centcom/holding) -"aFo" = ( -/turf/unsimulated/floor{ - dir = 9; - icon_state = "vault" - }, -/area/centcom/ferry) -"aFp" = ( -/obj/machinery/door/airlock/centcom{ - name = "Cell" - }, -/turf/unsimulated/floor{ - icon_state = "dark" - }, -/area/centcom/ferry) -"aFq" = ( -/turf/space, -/area/centcom/holding) -"aFz" = ( -/obj/machinery/recharger/wallcharger{ - pixel_x = 32 - }, -/obj/machinery/light/small{ - dir = 4 - }, -/turf/simulated/floor/shuttle/red, -/area/shuttle/specops/centcom) -"aFA" = ( -/obj/machinery/acting/changer, -/turf/unsimulated/floor{ - icon_state = "dark" - }, -/area/centcom/specops) -"aFB" = ( -/obj/item/stool, -/turf/unsimulated/floor{ - icon_state = "dark" - }, -/area/centcom/ferry) -"aFC" = ( -/obj/structure/table/standard, -/obj/item/paper, -/obj/item/pen, -/turf/unsimulated/floor{ - icon_state = "dark" - }, -/area/centcom/ferry) -"aFD" = ( -/obj/structure/bed/chair{ - dir = 8 - }, -/obj/effect/floor_decal/corner/green{ - dir = 6 - }, -/turf/unsimulated/floor{ - icon_state = "steel" - }, -/area/centcom/holding) -"aFK" = ( -/obj/machinery/embedded_controller/radio/simple_docking_controller{ - frequency = 1380; - id_tag = "specops_shuttle_fore"; - name = "forward docking hatch controller"; - pixel_y = -25; - tag_door = "specops_shuttle_fore_hatch" - }, -/obj/structure/bed/chair{ - dir = 4 - }, -/turf/simulated/floor/shuttle/red, -/area/shuttle/specops/centcom) -"aFL" = ( -/obj/machinery/recharger/wallcharger{ - pixel_x = 32 - }, -/obj/machinery/vending/wallmed1{ - name = "Emergency NanoMed"; - pixel_y = -32 - }, -/turf/simulated/floor/shuttle/red, -/area/shuttle/specops/centcom) -"aFM" = ( -/obj/structure/bed/chair{ - dir = 8 - }, -/obj/effect/floor_decal/corner/green{ - dir = 4 - }, -/turf/unsimulated/floor{ - icon_state = "steel" - }, -/area/centcom/holding) -"aFN" = ( -/obj/machinery/door/airlock/external{ - icon_state = "closed"; - locked = 1 - }, -/turf/unsimulated/floor{ - icon_state = "plating"; - name = "plating" - }, -/area/centcom/holding) -"aFY" = ( -/obj/machinery/light/small/readylight{ - dir = 4 - }, -/turf/simulated/floor/shuttle/red, -/area/shuttle/specops/centcom) -"aGa" = ( -/obj/structure/bed/chair/comfy/brown, -/obj/effect/floor_decal/carpet{ - dir = 8 - }, -/obj/effect/floor_decal/carpet{ - dir = 1 - }, -/obj/effect/floor_decal/carpet{ - dir = 9 - }, -/turf/unsimulated/floor{ - icon_state = "carpet" - }, -/area/centcom/holding) -"aGb" = ( -/obj/structure/bed/chair/comfy/brown, -/obj/effect/floor_decal/carpet{ - dir = 1 - }, -/turf/unsimulated/floor{ - icon_state = "carpet" - }, -/area/centcom/holding) -"aGc" = ( -/obj/structure/bed/chair/comfy/brown, -/obj/effect/floor_decal/carpet{ - dir = 4 - }, -/obj/effect/floor_decal/carpet{ - dir = 1 - }, -/obj/effect/floor_decal/carpet{ - dir = 5 - }, -/turf/unsimulated/floor{ - icon_state = "carpet" - }, -/area/centcom/holding) -"aGd" = ( -/turf/unsimulated/floor{ - icon_state = "wood" - }, -/area/centcom/holding) -"aGe" = ( -/obj/structure/bed/chair{ - dir = 4 - }, -/obj/effect/floor_decal/corner/green{ - dir = 1 - }, -/turf/unsimulated/floor{ - icon_state = "steel" - }, -/area/centcom/holding) -"aGf" = ( -/obj/machinery/door/airlock/glass{ - name = "Arrivals Processing" - }, -/turf/unsimulated/floor{ - icon_state = "steel" - }, -/area/centcom/holding) -"aGg" = ( -/obj/machinery/camera/network/crescent{ - c_tag = "Crescent Arrivals East" - }, -/turf/unsimulated/floor{ - icon_state = "steel" - }, -/area/centcom/holding) -"aGq" = ( -/obj/machinery/door/airlock/external{ - frequency = 1380; - icon_state = "closed"; - id_tag = "specops_shuttle_fore_hatch"; - locked = 1; - name = "Forward Docking Hatch" - }, -/obj/effect/shuttle_landmark/specops/start, -/turf/simulated/floor/plating, -/area/shuttle/specops/centcom) -"aGr" = ( -/obj/effect/floor_decal/carpet{ - dir = 8 - }, -/turf/unsimulated/floor{ - icon_state = "carpet" - }, -/area/centcom/holding) -"aGs" = ( -/turf/unsimulated/floor{ - icon_state = "carpet" - }, -/area/centcom/holding) -"aGt" = ( -/obj/effect/floor_decal/carpet{ - dir = 4 - }, -/turf/unsimulated/floor{ - icon_state = "carpet" - }, -/area/centcom/holding) -"aGu" = ( -/obj/machinery/door/airlock/glass{ - name = "Arrivals Bar" - }, -/turf/unsimulated/floor{ - icon_state = "steel" - }, -/area/centcom/holding) -"aGB" = ( -/obj/structure/bed/chair/comfy/brown{ - dir = 1 - }, -/obj/effect/floor_decal/carpet{ - dir = 8 - }, -/obj/effect/floor_decal/carpet, -/obj/effect/floor_decal/carpet{ - dir = 10 - }, -/turf/unsimulated/floor{ - icon_state = "carpet" - }, -/area/centcom/holding) -"aGC" = ( -/obj/structure/bed/chair/comfy/brown{ - dir = 1 - }, -/obj/effect/floor_decal/carpet, -/turf/unsimulated/floor{ - icon_state = "carpet" - }, -/area/centcom/holding) -"aGD" = ( -/obj/structure/bed/chair/comfy/brown{ - dir = 1 - }, -/obj/effect/floor_decal/carpet{ - dir = 4 - }, -/obj/effect/floor_decal/carpet, -/obj/effect/floor_decal/carpet{ - dir = 6 - }, -/turf/unsimulated/floor{ - icon_state = "carpet" - }, -/area/centcom/holding) -"aGE" = ( -/obj/structure/bed/chair{ - dir = 8 - }, -/obj/effect/floor_decal/corner/green, -/turf/unsimulated/floor{ - icon_state = "steel" - }, -/area/centcom/holding) -"aGF" = ( -/obj/effect/floor_decal/industrial/warning/corner, -/turf/unsimulated/floor{ - icon_state = "steel" - }, -/area/centcom/holding) -"aGG" = ( -/obj/effect/floor_decal/industrial/warning, -/turf/unsimulated/floor{ - icon_state = "steel" - }, -/area/centcom/holding) -"aGO" = ( -/obj/structure/table/woodentable{ - dir = 5 - }, -/obj/item/flame/lighter/zippo/random, -/obj/item/storage/fancy/cigarettes, -/obj/item/material/ashtray/bronze{ - pixel_x = -1; - pixel_y = 1 - }, -/obj/machinery/camera/network/crescent{ - c_tag = "Crescent Bar East"; - dir = 4 - }, -/turf/unsimulated/floor{ - icon_state = "wood" - }, -/area/centcom/holding) -"aGP" = ( -/obj/structure/table/woodentable{ - dir = 5 - }, -/obj/item/flame/lighter/zippo/random, -/obj/item/storage/fancy/cigarettes, -/obj/item/material/ashtray/bronze{ - pixel_x = -1; - pixel_y = 1 - }, -/turf/unsimulated/floor{ - icon_state = "wood" - }, -/area/centcom/holding) -"aGQ" = ( -/obj/structure/bed/chair{ - dir = 4 - }, -/obj/effect/floor_decal/corner/green{ - dir = 8 - }, -/turf/unsimulated/floor{ - icon_state = "steel" - }, -/area/centcom/holding) -"aGR" = ( -/obj/machinery/hologram/holopad, -/turf/unsimulated/floor{ - icon_state = "steel" - }, -/area/centcom/holding) -"aGS" = ( -/obj/machinery/status_display, -/obj/effect/wingrille_spawn/reinforced/crescent, -/turf/unsimulated/floor{ - icon_state = "plating"; - name = "plating" - }, -/area/centcom/holding) -"aGT" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 4 - }, -/turf/unsimulated/floor{ - icon_state = "steel" - }, -/area/centcom/holding) -"aHb" = ( -/obj/machinery/camera/network/crescent{ - c_tag = "Crescent Bar Center" - }, -/turf/unsimulated/floor{ - icon_state = "wood" - }, -/area/centcom/holding) -"aHc" = ( -/obj/machinery/hologram/holopad, -/turf/unsimulated/floor{ - icon_state = "wood" - }, -/area/centcom/holding) -"aHd" = ( -/obj/structure/bed/chair{ - dir = 4 - }, -/obj/machinery/camera/network/crescent{ - c_tag = "Crescent Arrivals South"; - dir = 4 - }, -/obj/effect/floor_decal/corner/green{ - dir = 9 - }, -/turf/unsimulated/floor{ - icon_state = "steel" - }, -/area/centcom/holding) -"aHe" = ( -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 4 - }, -/turf/unsimulated/floor{ - icon_state = "steel" - }, -/area/centcom/holding) -"aHg" = ( -/obj/structure/bed/chair/wood/wings{ - dir = 4; - icon_state = "wooden_chair_wings" - }, -/turf/unsimulated/floor{ - icon_state = "wood" - }, -/area/centcom/holding) -"aHh" = ( -/obj/structure/table/woodentable{ - dir = 5 - }, -/obj/item/reagent_containers/food/snacks/amanita_pie, -/turf/unsimulated/floor{ - icon_state = "wood" - }, -/area/centcom/holding) -"aHi" = ( -/obj/structure/table/woodentable{ - dir = 5 - }, -/obj/item/reagent_containers/food/snacks/bigbiteburger, -/turf/unsimulated/floor{ - icon_state = "wood" - }, -/area/centcom/holding) -"aHj" = ( -/obj/structure/bed/chair/wood/wings{ - dir = 8; - icon_state = "wooden_chair_wings" - }, -/turf/unsimulated/floor{ - icon_state = "wood" - }, -/area/centcom/holding) -"aHk" = ( -/obj/structure/table/woodentable{ - dir = 5 - }, -/turf/unsimulated/floor{ - icon_state = "wood" - }, -/area/centcom/holding) -"aHl" = ( -/obj/structure/table/woodentable{ - dir = 5 - }, -/obj/item/reagent_containers/food/snacks/stew, -/turf/unsimulated/floor{ - icon_state = "wood" - }, -/area/centcom/holding) -"aHm" = ( -/obj/machinery/vending/coffee, -/obj/effect/floor_decal/corner/green{ - dir = 9 - }, -/turf/unsimulated/floor{ - icon_state = "steel" - }, -/area/centcom/holding) -"aHn" = ( -/obj/machinery/embedded_controller/radio/simple_docking_controller{ - frequency = 1380; - id_tag = "centcom_shuttle_bay"; - name = "shuttle bay controller"; - pixel_y = 25; - tag_door = "centcom_shuttle_bay_door" - }, -/turf/unsimulated/floor{ - icon_state = "steel" - }, -/area/centcom/holding) -"aHo" = ( -/obj/machinery/computer/shuttle_control{ - req_access = list("ACCESS_CENT_GENERAL"); - shuttle_tag = "Centcom" - }, -/turf/unsimulated/floor{ - icon_state = "steel" - }, -/area/centcom/holding) -"aHp" = ( -/turf/unsimulated/beach/sand{ - icon_state = "desert2" - }, -/area/centcom/holding) -"aHq" = ( -/obj/structure/table/woodentable{ - dir = 5 - }, -/obj/item/reagent_containers/food/snacks/boiledrice, -/turf/unsimulated/floor{ - icon_state = "wood" - }, -/area/centcom/holding) -"aHr" = ( -/obj/structure/table/woodentable{ - dir = 5 - }, -/obj/item/reagent_containers/food/snacks/beetsoup, -/turf/unsimulated/floor{ - icon_state = "wood" - }, -/area/centcom/holding) -"aHs" = ( -/obj/structure/table/woodentable{ - dir = 5 - }, -/obj/item/reagent_containers/food/snacks/stuffing, -/turf/unsimulated/floor{ - icon_state = "wood" - }, -/area/centcom/holding) -"aHt" = ( -/obj/structure/table/woodentable{ - dir = 5 - }, -/obj/item/reagent_containers/food/snacks/soylenviridians, -/turf/unsimulated/floor{ - icon_state = "wood" - }, -/area/centcom/holding) -"aHu" = ( -/obj/item/stool/padded, -/turf/unsimulated/floor{ - icon_state = "wood" - }, -/area/centcom/holding) -"aHv" = ( -/obj/machinery/vending/cigarette, -/obj/effect/floor_decal/corner/green/three_quarters, -/turf/unsimulated/floor{ - icon_state = "steel" - }, -/area/centcom/holding) -"aHw" = ( -/obj/effect/floor_decal/corner/green{ - dir = 8 - }, -/turf/unsimulated/floor{ - icon_state = "steel" - }, -/area/centcom/holding) -"aHy" = ( -/obj/structure/table/woodentable{ - dir = 5 - }, -/turf/unsimulated/floor{ - icon_state = "lino" - }, -/area/centcom/holding) -"aHz" = ( -/obj/structure/sign/redcross, -/turf/unsimulated/wall, -/area/centcom/holding) -"aHA" = ( -/obj/machinery/door/airlock/glass/medical{ - name = "Arrivals Medbay" - }, -/turf/unsimulated/floor{ - icon_state = "white" - }, -/area/centcom/holding) -"aHB" = ( -/obj/structure/sign/warning/airlock, -/turf/unsimulated/wall, -/area/centcom/holding) -"aHC" = ( -/obj/machinery/door/airlock/external{ - frequency = 1380; - glass = 1380; - icon_state = "closed"; - id_tag = "centcom_shuttle_bay_door"; - locked = 1; - name = "Transport Airlock" - }, -/turf/unsimulated/floor{ - dir = 5; - icon_state = "vault" - }, -/area/centcom/holding) -"aHD" = ( -/turf/unsimulated/beach/sand{ - icon_state = "desert1" - }, -/area/centcom/holding) -"aHF" = ( -/obj/structure/table/woodentable{ - dir = 5 - }, -/obj/item/reagent_containers/food/snacks/bloodsoup, -/turf/unsimulated/floor{ - icon_state = "wood" - }, -/area/centcom/holding) -"aHG" = ( -/obj/structure/table/woodentable{ - dir = 5 - }, -/obj/item/reagent_containers/food/snacks/tofukabob, -/turf/unsimulated/floor{ - icon_state = "wood" - }, -/area/centcom/holding) -"aHH" = ( -/obj/structure/table/woodentable{ - dir = 5 - }, -/obj/item/reagent_containers/food/snacks/poppypretzel, -/turf/unsimulated/floor{ - icon_state = "wood" - }, -/area/centcom/holding) -"aHI" = ( -/obj/structure/table/woodentable{ - dir = 5 - }, -/obj/item/clothing/under/suit_jacket, -/obj/item/clothing/shoes/sandal/xeno/caligae/black, -/obj/item/clothing/head/that{ - pixel_x = 4; - pixel_y = 6 - }, -/turf/unsimulated/floor{ - icon_state = "lino" - }, -/area/centcom/holding) -"aHJ" = ( -/turf/unsimulated/floor{ - icon_state = "lino" - }, -/area/centcom/holding) -"aHK" = ( -/obj/machinery/atmospherics/unary/cryo_cell, -/turf/unsimulated/floor{ - icon_state = "white" - }, -/area/centcom/holding) -"aHL" = ( -/obj/machinery/atmospherics/portables_connector, -/obj/machinery/portable_atmospherics/canister/oxygen/prechilled, -/turf/unsimulated/floor{ - icon_state = "white" - }, -/area/centcom/holding) -"aHM" = ( -/turf/unsimulated/floor{ - icon_state = "white" - }, -/area/centcom/holding) -"aHN" = ( -/obj/machinery/vending/wallmed1{ - name = "Emergency NanoMed"; - pixel_y = 29 - }, -/turf/unsimulated/floor{ - icon_state = "white" - }, -/area/centcom/holding) -"aHO" = ( -/obj/structure/bed/roller, -/turf/unsimulated/floor{ - icon_state = "white" - }, -/area/centcom/holding) -"aHR" = ( -/obj/machinery/door/airlock/external{ - frequency = 1380; - icon_state = "closed"; - id_tag = "centcom_shuttle_hatch"; - locked = 1; - name = "Shuttle Hatch" - }, -/obj/effect/shuttle_landmark/ferry/start, -/turf/simulated/floor/shuttle/blue, -/area/shuttle/transport1/centcom) -"aHV" = ( -/obj/structure/table/woodentable{ - dir = 5 - }, -/obj/item/reagent_containers/food/snacks/spesslaw, -/turf/unsimulated/floor{ - icon_state = "wood" - }, -/area/centcom/holding) -"aHW" = ( -/obj/structure/table/woodentable{ - dir = 5 - }, -/obj/item/reagent_containers/food/snacks/candiedapple, -/turf/unsimulated/floor{ - icon_state = "wood" - }, -/area/centcom/holding) -"aHX" = ( -/obj/structure/table/woodentable{ - dir = 5 - }, -/obj/item/reagent_containers/food/snacks/mushroomsoup, -/turf/unsimulated/floor{ - icon_state = "wood" - }, -/area/centcom/holding) -"aHY" = ( -/obj/structure/table/woodentable{ - dir = 5 - }, -/obj/item/reagent_containers/food/snacks/meatsteak, -/turf/unsimulated/floor{ - icon_state = "wood" - }, -/area/centcom/holding) -"aHZ" = ( -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 5 - }, -/turf/unsimulated/floor{ - icon_state = "white" - }, -/area/centcom/holding) -"aIa" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden, -/turf/unsimulated/floor{ - icon_state = "white" - }, -/area/centcom/holding) -"aIb" = ( -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 9 - }, -/turf/unsimulated/floor{ - icon_state = "white" - }, -/area/centcom/holding) -"aId" = ( -/obj/structure/bed/chair{ - dir = 4 - }, -/obj/machinery/light{ - dir = 8; - icon_state = "tube1" - }, -/turf/simulated/floor/shuttle/blue, -/area/shuttle/transport1/centcom) -"aIe" = ( -/turf/simulated/floor/shuttle/blue, -/area/shuttle/transport1/centcom) -"aIf" = ( -/obj/structure/bed/chair{ - dir = 8 - }, -/obj/machinery/light{ - dir = 4; - icon_state = "tube1" - }, -/turf/simulated/floor/shuttle/blue, -/area/shuttle/transport1/centcom) -"aIh" = ( -/obj/structure/closet/secure_closet/bar, -/turf/unsimulated/floor{ - icon_state = "lino" - }, -/area/centcom/holding) -"aIi" = ( -/obj/structure/table/woodentable{ - dir = 5 - }, -/obj/item/book/manual/barman_recipes, -/obj/item/reagent_containers/glass/rag, -/turf/unsimulated/floor{ - icon_state = "lino" - }, -/area/centcom/holding) -"aIj" = ( -/obj/structure/table/woodentable{ - dir = 5 - }, -/obj/machinery/chemical_dispenser/bar_alc/full, -/turf/unsimulated/floor{ - icon_state = "lino" - }, -/area/centcom/holding) -"aIk" = ( -/obj/structure/table/woodentable{ - dir = 5 - }, -/obj/machinery/chemical_dispenser/bar_soft/full, -/turf/unsimulated/floor{ - icon_state = "lino" - }, -/area/centcom/holding) -"aIl" = ( -/obj/effect/floor_decal/corner/lime, -/turf/unsimulated/floor{ - icon_state = "white" - }, -/area/centcom/holding) -"aIm" = ( -/obj/effect/floor_decal/corner/lime{ - dir = 8 - }, -/turf/unsimulated/floor{ - icon_state = "white" - }, -/area/centcom/holding) -"aIn" = ( -/obj/structure/sign/warning/nosmoking_2{ - pixel_x = 28 - }, -/turf/unsimulated/floor{ - icon_state = "white" - }, -/area/centcom/holding) -"aIp" = ( -/obj/structure/bed/chair{ - dir = 4 - }, -/turf/simulated/floor/shuttle/blue, -/area/shuttle/transport1/centcom) -"aIq" = ( -/obj/structure/bed/chair{ - dir = 8 - }, -/turf/simulated/floor/shuttle/blue, -/area/shuttle/transport1/centcom) -"aIt" = ( -/turf/unsimulated/beach/sand{ - icon_state = "beachcorner" - }, -/area/centcom/holding) -"aIu" = ( -/turf/unsimulated/beach/sand{ - icon_state = "beach" - }, -/area/centcom/holding) -"aIv" = ( -/obj/structure/window/reinforced/crescent{ - dir = 1 - }, -/turf/unsimulated/beach/sand{ - dir = 6; - icon_state = "beach" - }, -/area/centcom/holding) -"aIw" = ( -/obj/structure/window/reinforced/crescent{ - dir = 1 - }, -/turf/unsimulated/beach/sand{ - icon_state = "seashallow" - }, -/area/centcom/holding) -"aIx" = ( -/turf/unsimulated/wall, -/area/tdome) -"aIy" = ( -/obj/effect/wingrille_spawn/reinforced/crescent, -/turf/unsimulated/floor{ - icon_state = "plating"; - name = "plating" - }, -/area/tdome) -"aIz" = ( -/obj/machinery/door/airlock/centcom{ - name = "Thunderdome" - }, -/obj/machinery/door/blast/regular{ - id_tag = "crescent_thunderdome"; - name = "Thunderdome" - }, -/turf/unsimulated/floor{ - dir = 5; - icon_state = "vault" - }, -/area/tdome) -"aIA" = ( -/obj/structure/table/standard, -/obj/item/reagent_containers/glass/beaker/cryoxadone{ - pixel_x = 5; - pixel_y = 5 - }, -/obj/item/reagent_containers/glass/beaker/cryoxadone, -/obj/item/reagent_containers/glass/beaker/cryoxadone{ - pixel_x = 7; - pixel_y = 1 - }, -/obj/item/wrench, -/turf/unsimulated/floor{ - icon_state = "white" - }, -/area/centcom/holding) -"aIB" = ( -/obj/effect/floor_decal/corner/lime/three_quarters{ - dir = 4 - }, -/turf/unsimulated/floor{ - icon_state = "white" - }, -/area/centcom/holding) -"aIC" = ( -/obj/effect/floor_decal/corner/lime/three_quarters, -/turf/unsimulated/floor{ - icon_state = "white" - }, -/area/centcom/holding) -"aID" = ( -/obj/machinery/sleeper{ - dir = 8 - }, -/turf/unsimulated/floor{ - icon_state = "white" - }, -/area/centcom/holding) -"aIF" = ( -/turf/unsimulated/beach/sand{ - dir = 6; - icon_state = "beach" - }, -/area/centcom/holding) -"aIG" = ( -/turf/unsimulated/beach/sand{ - icon_state = "seashallow" - }, -/area/centcom/holding) -"aIH" = ( -/obj/structure/table/standard, -/turf/unsimulated/floor{ - dir = 5; - icon_state = "vault" - }, -/area/tdome) -"aII" = ( -/turf/unsimulated/floor{ - dir = 5; - icon_state = "vault" - }, -/area/tdome) -"aIJ" = ( -/obj/effect/floor_decal/corner/lime{ - dir = 4 - }, -/turf/unsimulated/floor{ - icon_state = "white" - }, -/area/centcom/holding) -"aIK" = ( -/obj/effect/floor_decal/corner/lime/three_quarters{ - dir = 1 - }, -/turf/unsimulated/floor{ - icon_state = "white" - }, -/area/centcom/holding) -"aIL" = ( -/obj/effect/floor_decal/corner/lime/three_quarters{ - dir = 8 - }, -/turf/unsimulated/floor{ - icon_state = "white" - }, -/area/centcom/holding) -"aIM" = ( -/obj/effect/floor_decal/corner/lime{ - dir = 1 - }, -/turf/unsimulated/floor{ - icon_state = "white" - }, -/area/centcom/holding) -"aIR" = ( -/obj/structure/bed/chair{ - dir = 4 - }, -/turf/unsimulated/floor{ - dir = 5; - icon_state = "vault" - }, -/area/tdome) -"aIS" = ( -/obj/structure/table/reinforced, -/turf/unsimulated/floor{ - dir = 5; - icon_state = "vault" - }, -/area/tdome) -"aIT" = ( -/obj/structure/bed/chair{ - dir = 8 - }, -/turf/unsimulated/floor{ - dir = 5; - icon_state = "vault" - }, -/area/tdome) -"aIU" = ( -/obj/structure/table/standard, -/obj/item/FixOVein{ - pixel_x = -6; - pixel_y = 1 - }, -/turf/unsimulated/floor{ - icon_state = "white" - }, -/area/centcom/holding) -"aIV" = ( -/obj/structure/table/standard, -/obj/item/cautery{ - pixel_y = 4 - }, -/obj/item/hemostat{ - pixel_y = 4 - }, -/turf/unsimulated/floor{ - icon_state = "white" - }, -/area/centcom/holding) -"aIW" = ( -/obj/structure/table/standard, -/obj/item/retractor{ - pixel_y = 6 - }, -/obj/item/scalpel, -/turf/unsimulated/floor{ - icon_state = "white" - }, -/area/centcom/holding) -"aIX" = ( -/obj/structure/table/standard, -/obj/item/bonesetter, -/obj/item/bonegel{ - pixel_x = 4; - pixel_y = 3 - }, -/turf/unsimulated/floor{ - icon_state = "white" - }, -/area/centcom/holding) -"aIY" = ( -/obj/structure/table/standard, -/obj/item/surgicaldrill, -/obj/item/circular_saw, -/turf/unsimulated/floor{ - icon_state = "white" - }, -/area/centcom/holding) -"aIZ" = ( -/obj/machinery/hologram/holopad, -/turf/unsimulated/floor{ - icon_state = "white" - }, -/area/centcom/holding) -"aJa" = ( -/obj/effect/wingrille_spawn/reinforced/crescent, -/turf/simulated/floor/plating, -/area/centcom/holding) -"aJg" = ( -/obj/machinery/door/airlock/medical{ - name = "Operating Theatre" - }, -/turf/unsimulated/floor{ - icon_state = "white" - }, -/area/centcom/holding) -"aJj" = ( -/obj/effect/floor_decal/corner/red{ - dir = 9 - }, -/turf/unsimulated/floor{ - dir = 5; - icon_state = "vault" - }, -/area/tdome) -"aJk" = ( -/obj/effect/floor_decal/corner/green{ - dir = 6 - }, -/turf/unsimulated/floor{ - dir = 5; - icon_state = "vault" - }, -/area/tdome) -"aJl" = ( -/obj/structure/closet/secure_closet/medical2, -/turf/unsimulated/floor{ - icon_state = "white" - }, -/area/centcom/holding) -"aJm" = ( -/obj/machinery/optable, -/turf/unsimulated/floor{ - icon_state = "white" - }, -/area/centcom/holding) -"aJn" = ( -/obj/structure/hygiene/sink{ - dir = 4; - pixel_x = 11 - }, -/obj/machinery/vending/wallmed1{ - name = "Emergency NanoMed"; - pixel_x = 28 - }, -/turf/unsimulated/floor{ - icon_state = "white" - }, -/area/centcom/holding) -"aJo" = ( -/obj/structure/table/standard, -/obj/item/storage/box/gloves{ - pixel_x = 3; - pixel_y = 4 - }, -/obj/item/storage/box/masks, -/turf/unsimulated/floor{ - icon_state = "white" - }, -/area/centcom/holding) -"aJs" = ( -/obj/effect/floor_decal/corner/red/three_quarters, -/turf/unsimulated/floor{ - dir = 5; - icon_state = "vault" - }, -/area/tdome) -"aJt" = ( -/obj/effect/floor_decal/corner/red{ - dir = 10 - }, -/turf/unsimulated/floor{ - dir = 5; - icon_state = "vault" - }, -/area/tdome) -"aJu" = ( -/obj/effect/floor_decal/corner/green{ - dir = 10 - }, -/turf/unsimulated/floor{ - dir = 5; - icon_state = "vault" - }, -/area/tdome) -"aJv" = ( -/obj/effect/floor_decal/corner/green/three_quarters{ - dir = 4 - }, -/turf/unsimulated/floor{ - dir = 5; - icon_state = "vault" - }, -/area/tdome) -"aJw" = ( -/obj/structure/table/standard, -/obj/item/storage/box/gloves{ - pixel_x = 3; - pixel_y = 4 - }, -/obj/item/storage/box/masks, -/obj/item/reagent_containers/spray/cleaner, -/turf/unsimulated/floor{ - icon_state = "white" - }, -/area/centcom/holding) -"aJx" = ( -/obj/machinery/computer/operating{ - dir = 8 - }, -/turf/unsimulated/floor{ - icon_state = "white" - }, -/area/centcom/holding) -"aJy" = ( -/obj/structure/iv_drip, -/turf/unsimulated/floor{ - icon_state = "white" - }, -/area/centcom/holding) -"aJz" = ( -/obj/structure/table/standard, -/obj/item/reagent_containers/ivbag/blood/OPlus{ - pixel_x = 4; - pixel_y = 2 - }, -/obj/item/reagent_containers/ivbag/blood/OPlus{ - pixel_x = 4; - pixel_y = 2 - }, -/obj/item/reagent_containers/ivbag/blood/OMinus{ - pixel_x = -5; - pixel_y = -1 - }, -/obj/item/reagent_containers/ivbag/blood/OMinus{ - pixel_x = -5; - pixel_y = -1 - }, -/turf/unsimulated/floor{ - icon_state = "white" - }, -/area/centcom/holding) -"aJA" = ( -/obj/machinery/bodyscanner{ - dir = 8 - }, -/turf/unsimulated/floor{ - icon_state = "white" - }, -/area/centcom/holding) -"aJB" = ( -/obj/machinery/body_scanconsole{ - dir = 8 - }, -/turf/unsimulated/floor{ - icon_state = "white" - }, -/area/centcom/holding) -"aJC" = ( -/obj/structure/table/standard, -/obj/item/storage/firstaid/regular{ - pixel_x = 2; - pixel_y = 6 - }, -/obj/item/storage/firstaid/regular{ - pixel_x = -2; - pixel_y = 4 - }, -/obj/item/storage/firstaid/adv{ - pixel_x = 2; - pixel_y = 2 - }, -/obj/item/storage/firstaid/adv{ - pixel_x = -2 - }, -/turf/unsimulated/floor{ - icon_state = "white" - }, -/area/centcom/holding) -"aJD" = ( -/obj/structure/table/standard, -/obj/item/storage/firstaid/o2{ - pixel_x = 4; - pixel_y = 6 - }, -/obj/item/storage/firstaid/toxin, -/obj/item/storage/firstaid/fire{ - pixel_x = 2; - pixel_y = 3 - }, -/turf/unsimulated/floor{ - icon_state = "white" - }, -/area/centcom/holding) -"aJE" = ( -/obj/structure/table/standard, -/obj/item/clothing/glasses/hud/health, -/obj/item/clothing/glasses/hud/health, -/obj/item/reagent_containers/spray/cleaner, -/turf/unsimulated/floor{ - icon_state = "white" - }, -/area/centcom/holding) -"aJL" = ( -/obj/machinery/door/airlock/centcom{ - name = "General Access" - }, -/obj/machinery/door/blast/regular{ - id_tag = "crescent_thunderdome"; - name = "Thunderdome" - }, -/turf/unsimulated/floor{ - dir = 5; - icon_state = "vault" - }, -/area/tdome) -"aJN" = ( -/obj/machinery/computer/shuttle_control{ - req_access = list("ACCESS_CENT_GENERAL"); - shuttle_tag = "Centcom" - }, -/obj/machinery/light{ - dir = 1; - icon_state = "tube1" - }, -/turf/simulated/floor/shuttle/blue, -/area/shuttle/transport1/centcom) -"aJO" = ( -/obj/structure/table/rack{ - dir = 8 - }, -/obj/machinery/light{ - dir = 1; - icon_state = "tube1" - }, -/turf/simulated/floor/shuttle/blue, -/area/shuttle/transport1/centcom) -"aJW" = ( -/obj/machinery/door/airlock/centcom{ - name = "General Access" - }, -/turf/unsimulated/floor{ - dir = 5; - icon_state = "vault" - }, -/area/tdome) -"aJX" = ( -/obj/structure/bed/chair{ - dir = 1 - }, -/obj/machinery/embedded_controller/radio/simple_docking_controller{ - frequency = 1380; - id_tag = "centcom_shuttle"; - pixel_x = -24; - tag_door = "centcom_shuttle_hatch" - }, -/turf/simulated/floor/shuttle/blue, -/area/shuttle/transport1/centcom) -"aJY" = ( -/obj/structure/table/rack{ - dir = 8 - }, -/turf/simulated/floor/shuttle/blue, -/area/shuttle/transport1/centcom) -"aKa" = ( -/obj/structure/closet/secure_closet/bar, -/turf/unsimulated/floor{ - icon_state = "white" - }, -/area/tdome) -"aKb" = ( -/turf/unsimulated/floor{ - icon_state = "white" - }, -/area/tdome) -"aKc" = ( -/obj/machinery/gibber, -/turf/unsimulated/floor{ - icon_state = "white" - }, -/area/tdome) -"aKd" = ( -/obj/machinery/door/airlock/command{ - name = "Thunderdome" - }, -/obj/machinery/door/blast/regular{ - id_tag = "crescent_thunderdome"; - name = "Thunderdome" - }, -/turf/unsimulated/floor{ - icon_state = "lino" - }, -/area/tdome) -"aKg" = ( -/obj/structure/bed/padded, -/obj/item/bedsheet/blue, -/turf/simulated/floor/shuttle/blue, -/area/shuttle/transport1/centcom) -"aKl" = ( -/obj/machinery/vending/cigarette, -/turf/unsimulated/floor{ - icon_state = "lino" - }, -/area/tdome/tdomeobserve) -"aKm" = ( -/obj/structure/table/standard, -/obj/item/reagent_containers/food/drinks/bottle/small/beer, -/obj/item/reagent_containers/food/drinks/bottle/small/beer, -/obj/item/reagent_containers/food/drinks/bottle/small/beer, -/obj/item/flame/lighter/zippo/random, -/obj/item/storage/fancy/cigarettes, -/turf/unsimulated/floor{ - icon_state = "lino" - }, -/area/tdome/tdomeobserve) -"aKn" = ( -/obj/item/reagent_containers/food/drinks/cans/cola, -/obj/item/reagent_containers/food/drinks/cans/cola, -/obj/item/reagent_containers/food/drinks/cans/cola, -/obj/structure/table/standard, -/turf/unsimulated/floor{ - icon_state = "lino" - }, -/area/tdome/tdomeobserve) -"aKo" = ( -/obj/structure/reagent_dispensers/beerkeg, -/turf/unsimulated/floor{ - icon_state = "lino" - }, -/area/tdome/tdomeobserve) -"aKp" = ( -/turf/unsimulated/floor{ - icon_state = "lino" - }, -/area/tdome/tdomeobserve) -"aKq" = ( -/obj/machinery/vending/coffee, -/turf/unsimulated/floor{ - icon_state = "lino" - }, -/area/tdome/tdomeobserve) -"aKt" = ( -/obj/structure/closet/secure_closet/freezer/meat, -/turf/unsimulated/floor{ - icon_state = "white" - }, -/area/tdome) -"aKu" = ( -/obj/structure/closet/secure_closet/freezer/fridge, -/turf/unsimulated/floor{ - icon_state = "white" - }, -/area/tdome) -"aKv" = ( -/obj/structure/bed/chair, -/obj/effect/landmark{ - name = "tdomeobserve" - }, -/turf/unsimulated/floor{ - icon_state = "lino" - }, -/area/tdome/tdomeobserve) -"aKw" = ( -/obj/structure/disposalpipe/trunk, -/obj/structure/disposaloutlet, -/turf/unsimulated/floor{ - icon_state = "lino" - }, -/area/tdome/tdomeobserve) -"aKx" = ( -/obj/machinery/vending/snack, -/turf/unsimulated/floor{ - icon_state = "lino" - }, -/area/tdome/tdomeobserve) -"aKz" = ( -/turf/unsimulated/wall, -/area/acting/backstage) -"aKA" = ( -/obj/random/donkpocket_box, -/obj/random/donkpocket_box, -/obj/random/donkpocket_box, -/obj/random/donkpocket_box, -/obj/structure/table/standard, -/turf/unsimulated/floor{ - icon_state = "white" - }, -/area/tdome) -"aKB" = ( -/obj/structure/table/standard, -/obj/machinery/microwave, -/turf/unsimulated/floor{ - icon_state = "white" - }, -/area/tdome) -"aKC" = ( -/obj/structure/table/reinforced, -/turf/unsimulated/floor{ - icon_state = "white" - }, -/area/tdome) -"aKD" = ( -/obj/item/device/camera, -/turf/unsimulated/floor{ - icon_state = "lino" - }, -/area/tdome/tdomeobserve) -"aKE" = ( -/obj/structure/disposalpipe/segment, -/turf/unsimulated/floor{ - icon_state = "lino" - }, -/area/tdome/tdomeobserve) -"aKI" = ( -/obj/effect/landmark{ - name = "ActorSpawn" - }, -/turf/unsimulated/floor{ - icon_state = "plating"; - name = "plating" - }, -/area/acting/backstage) -"aKJ" = ( -/obj/machinery/acting/wardrobe, -/turf/unsimulated/floor{ - icon_state = "plating"; - name = "plating" - }, -/area/acting/backstage) -"aKK" = ( -/obj/structure/table/rack, -/obj/item/storage/box/lights/mixed, -/obj/item/device/paint_sprayer, -/turf/unsimulated/floor{ - icon_state = "plating"; - name = "plating" - }, -/area/acting/backstage) -"aKL" = ( -/obj/structure/table/rack, -/obj/item/stack/tile/floor{ - amount = 50 - }, -/obj/item/stack/tile/floor{ - amount = 50 - }, -/turf/unsimulated/floor{ - icon_state = "plating"; - name = "plating" - }, -/area/acting/backstage) -"aKM" = ( -/obj/structure/table/rack, -/obj/item/stack/tile/floor_freezer{ - amount = 50 - }, -/obj/item/stack/tile/floor_freezer{ - amount = 50 - }, -/turf/unsimulated/floor{ - icon_state = "plating"; - name = "plating" - }, -/area/acting/backstage) -"aKN" = ( -/obj/structure/table/rack, -/obj/item/stack/tile/carpet{ - amount = 50 - }, -/obj/item/stack/tile/carpet{ - amount = 50 - }, -/turf/unsimulated/floor{ - icon_state = "plating"; - name = "plating" - }, -/area/acting/backstage) -"aKO" = ( -/obj/structure/table/rack, -/obj/item/stack/tile/grass{ - amount = 50 - }, -/obj/item/stack/tile/grass{ - amount = 50 - }, -/turf/unsimulated/floor{ - icon_state = "plating"; - name = "plating" - }, -/area/acting/backstage) -"aKP" = ( -/obj/structure/table/rack, -/obj/item/stack/material/steel{ - amount = 50; - pixel_x = 5; - pixel_y = 5 - }, -/obj/item/stack/material/steel{ - amount = 50; - pixel_x = 5; - pixel_y = 5 - }, -/obj/item/stack/material/steel{ - amount = 50; - pixel_x = 5; - pixel_y = 5 - }, -/turf/unsimulated/floor{ - icon_state = "plating"; - name = "plating" - }, -/area/acting/backstage) -"aKQ" = ( -/obj/structure/table/rack, -/obj/item/stack/material/plasteel{ - amount = 50 - }, -/obj/item/stack/material/plasteel{ - amount = 50 - }, -/obj/item/stack/material/plasteel{ - amount = 50 - }, -/turf/unsimulated/floor{ - icon_state = "plating"; - name = "plating" - }, -/area/acting/backstage) -"aKR" = ( -/obj/structure/table/rack, -/obj/item/stack/material/wood{ - amount = 50 - }, -/obj/item/stack/material/wood{ - amount = 50 - }, -/obj/item/stack/material/wood{ - amount = 50 - }, -/turf/unsimulated/floor{ - icon_state = "plating"; - name = "plating" - }, -/area/acting/backstage) -"aKS" = ( -/obj/structure/table/rack, -/obj/item/stack/material/sandstone{ - amount = 50 - }, -/obj/item/stack/material/sandstone{ - amount = 50 - }, -/obj/item/stack/material/sandstone{ - amount = 50 - }, -/turf/unsimulated/floor{ - icon_state = "plating"; - name = "plating" - }, -/area/acting/backstage) -"aKT" = ( -/obj/structure/table/rack, -/obj/item/stack/material/glass{ - amount = 50; - pixel_x = 3; - pixel_y = 3 - }, -/obj/item/stack/material/glass{ - amount = 50; - pixel_x = 3; - pixel_y = 3 - }, -/obj/item/stack/material/glass{ - amount = 50; - pixel_x = 3; - pixel_y = 3 - }, -/turf/unsimulated/floor{ - icon_state = "plating"; - name = "plating" - }, -/area/acting/backstage) -"aKU" = ( -/obj/structure/table/rack, -/obj/item/stack/material/glass/reinforced{ - amount = 50 - }, -/obj/item/stack/material/glass/reinforced{ - amount = 50 - }, -/obj/item/stack/material/glass/reinforced{ - amount = 50 - }, -/turf/unsimulated/floor{ - icon_state = "plating"; - name = "plating" - }, -/area/acting/backstage) -"aKV" = ( -/obj/structure/table/rack, -/obj/item/stack/material/marble{ - amount = 50 - }, -/obj/item/stack/material/marble{ - amount = 50 - }, -/obj/item/stack/material/marble{ - amount = 50 - }, -/turf/unsimulated/floor{ - icon_state = "plating"; - name = "plating" - }, -/area/acting/backstage) -"aKW" = ( -/obj/structure/table/rack, -/obj/item/stack/material/plastic{ - amount = 50 - }, -/obj/item/stack/material/plastic{ - amount = 50 - }, -/obj/item/stack/material/plastic{ - amount = 50 - }, -/turf/unsimulated/floor{ - icon_state = "plating"; - name = "plating" - }, -/area/acting/backstage) -"aKX" = ( -/obj/structure/table/rack, -/obj/item/stack/material/silver{ - amount = 50 - }, -/obj/item/stack/material/silver{ - amount = 50 - }, -/obj/item/stack/material/silver{ - amount = 50 - }, -/turf/unsimulated/floor{ - icon_state = "plating"; - name = "plating" - }, -/area/acting/backstage) -"aKY" = ( -/obj/machinery/gibber{ - anchored = 0 - }, -/turf/unsimulated/floor{ - icon_state = "plating"; - name = "plating" - }, -/area/acting/backstage) -"aKZ" = ( -/obj/machinery/papershredder, -/turf/unsimulated/floor{ - icon_state = "plating"; - name = "plating" - }, -/area/acting/backstage) -"aLa" = ( -/obj/machinery/recharger, -/turf/unsimulated/floor{ - icon_state = "plating"; - name = "plating" - }, -/area/acting/backstage) -"aLb" = ( -/obj/machinery/reagentgrinder, -/obj/item/reagent_containers/glass/beaker/large, -/turf/unsimulated/floor{ - icon_state = "plating"; - name = "plating" - }, -/area/acting/backstage) -"aLc" = ( -/obj/structure/reagent_dispensers/watertank, -/turf/unsimulated/floor{ - icon_state = "plating"; - name = "plating" - }, -/area/acting/backstage) -"aLd" = ( -/obj/structure/reagent_dispensers/fueltank, -/turf/unsimulated/floor{ - icon_state = "plating"; - name = "plating" - }, -/area/acting/backstage) -"aLe" = ( -/turf/unsimulated/floor{ - icon_state = "plating"; - name = "plating" - }, -/area/acting/backstage) -"aLf" = ( -/obj/structure/bed/chair, -/obj/structure/disposalpipe/segment, -/obj/effect/landmark{ - name = "tdomeobserve" - }, -/turf/unsimulated/floor{ - icon_state = "lino" - }, -/area/tdome/tdomeobserve) -"aLh" = ( -/obj/item/paper{ - info = "\[center]\[b]READ INSTRUCTIONS CAREFULLY\[/b]\[/center]\[br]\[br]Hello! Welcome and congratulations on being hired for NanoTrasen's new Television initiative. You are now tasked with the creation and production of NanoTrasen brand television that is to be broadcasted to all of our stations!\[br]\[br] We've outfitted these facilities with all the materials and objects you will need.\[br]On the port side you'll find various venders and machines, namely the Wardrobe Dispenser, which will dispense holoclothing and items for you to use, and a Quickee brand plastic surgery machine (which I would remind you you are contractually obligated to \[b]not\[/b] report to the authorities.) which can change your appearance into anything you want, even other races. Stern and aft you'll find all the materials we could muster up on short notice. Use it to decorate the stage to your liking. Starboard you'll find gases, microwaves, hydroponic trays and the like. Go silly! This is already paid for (as are you) so do what you want and entertain!"; - name = "Actor's Guild Instruction Pamphlet" - }, -/turf/unsimulated/floor{ - icon_state = "plating"; - name = "plating" - }, -/area/acting/backstage) -"aLi" = ( -/obj/structure/table/rack, -/obj/item/clothing/under/color/red, -/obj/item/clothing/shoes/brown, -/obj/item/melee/energy/axe, -/turf/unsimulated/floor{ - dir = 5; - icon_state = "vault" - }, -/area/tdome) -"aLj" = ( -/obj/effect/forcefield{ - desc = "You can't get in. Heh."; - name = "Blocker" - }, -/obj/effect/wingrille_spawn/reinforced/crescent, -/turf/unsimulated/floor{ - icon_state = "dark" - }, -/area/tdome) -"aLk" = ( -/obj/effect/forcefield{ - desc = "You can't get in. Heh."; - name = "Blocker" - }, -/obj/structure/disposalpipe/segment, -/obj/effect/wingrille_spawn/reinforced/crescent, -/turf/unsimulated/floor{ - icon_state = "dark" - }, -/area/tdome) -"aLl" = ( -/obj/structure/table/rack, -/obj/item/clothing/under/color/green, -/obj/item/clothing/shoes/brown, -/obj/item/melee/energy/axe, -/turf/unsimulated/floor{ - dir = 5; - icon_state = "vault" - }, -/area/tdome) -"aLm" = ( -/obj/machinery/vending/tool, -/turf/unsimulated/floor{ - icon_state = "plating"; - name = "plating" - }, -/area/acting/backstage) -"aLn" = ( -/obj/machinery/door/airlock/glass{ - name = "Stage" - }, -/turf/simulated/floor, -/area/acting/backstage) -"aLo" = ( -/obj/machinery/biogenerator, -/turf/unsimulated/floor{ - icon_state = "plating"; - name = "plating" - }, -/area/acting/backstage) -"aLp" = ( -/obj/machinery/door/blast/regular{ - id_tag = "thunderdomeaxe"; - name = "Axe Supply" - }, -/turf/unsimulated/floor{ - dir = 5; - icon_state = "vault" - }, -/area/tdome) -"aLq" = ( -/obj/machinery/igniter, -/turf/unsimulated/floor{ - icon_state = "dark" - }, -/area/tdome) -"aLr" = ( -/turf/unsimulated/floor{ - icon_state = "dark" - }, -/area/tdome) -"aLs" = ( -/obj/structure/disposalpipe/segment, -/turf/unsimulated/floor{ - icon_state = "dark" - }, -/area/tdome) -"aLt" = ( -/obj/machinery/vending/hydroseeds, -/turf/unsimulated/floor{ - icon_state = "plating"; - name = "plating" - }, -/area/acting/backstage) -"aLu" = ( -/turf/simulated/floor/tiled, -/area/acting/stage) -"aLv" = ( -/obj/machinery/light{ - dir = 1; - icon_state = "tube1" - }, -/turf/simulated/floor/tiled, -/area/acting/stage) -"aLw" = ( -/obj/machinery/microwave, -/turf/unsimulated/floor{ - icon_state = "plating"; - name = "plating" - }, -/area/acting/backstage) -"aLx" = ( -/obj/structure/table/rack, -/obj/item/clothing/under/color/red, -/obj/item/clothing/shoes/brown, -/obj/item/clothing/suit/armor/tdome/red, -/obj/item/clothing/head/helmet/thunderdome, -/obj/item/melee/baton/loaded, -/obj/item/melee/energy/sword/red, -/turf/unsimulated/floor{ - dir = 5; - icon_state = "vault" - }, -/area/tdome) -"aLy" = ( -/obj/machinery/door/blast/regular{ - id_tag = "thunderdomegen"; - name = "General Supply" - }, -/turf/unsimulated/floor{ - dir = 5; - icon_state = "vault" - }, -/area/tdome) -"aLz" = ( -/obj/effect/landmark{ - name = "tdome2" - }, -/turf/unsimulated/floor{ - dir = 5; - icon_state = "vault" - }, -/area/tdome/tdome2) -"aLA" = ( -/obj/machinery/door/blast/regular{ - id_tag = "thunderdome"; - name = "Thunderdome Blast Door" - }, -/turf/unsimulated/floor{ - dir = 5; - icon_state = "vault" - }, -/area/tdome) -"aLB" = ( -/obj/effect/floor_decal/corner/red{ - dir = 9 - }, -/turf/unsimulated/floor{ - icon_state = "dark" - }, -/area/tdome) -"aLC" = ( -/obj/effect/floor_decal/corner/green{ - dir = 6 - }, -/turf/unsimulated/floor{ - icon_state = "dark" - }, -/area/tdome) -"aLD" = ( -/obj/effect/landmark{ - name = "tdome1" - }, -/turf/unsimulated/floor{ - dir = 5; - icon_state = "vault" - }, -/area/tdome/tdome1) -"aLE" = ( -/obj/structure/table/rack, -/obj/item/clothing/under/color/green, -/obj/item/clothing/shoes/brown, -/obj/item/clothing/suit/armor/tdome/green, -/obj/item/clothing/head/helmet/thunderdome, -/obj/item/melee/baton/loaded, -/obj/item/melee/energy/sword/green, -/turf/unsimulated/floor{ - dir = 5; - icon_state = "vault" - }, -/area/tdome) -"aLF" = ( -/obj/effect/step_trigger/teleporter/random{ - affect_ghosts = 1; - name = "escapeshuttle_leave"; - teleport_x = 25; - teleport_x_offset = 245; - teleport_y = 25; - teleport_y_offset = 245; - teleport_z = 6; - teleport_z_offset = 6 - }, -/obj/effect/step_trigger/thrower{ - affect_ghosts = 1; - name = "thrower_throwdown"; - tiles = 0 - }, -/turf/space, -/area/space) -"aLG" = ( -/turf/unsimulated/mineral, -/area/space) -"aLI" = ( -/obj/machinery/vending/hydronutrients, -/turf/unsimulated/floor{ - icon_state = "plating"; - name = "plating" - }, -/area/acting/backstage) -"aLJ" = ( -/obj/machinery/recharger{ - pixel_y = 4 - }, -/obj/effect/landmark{ - name = "tdome2" - }, -/turf/unsimulated/floor{ - dir = 5; - icon_state = "vault" - }, -/area/tdome/tdome2) -"aLK" = ( -/obj/machinery/recharger{ - pixel_y = 4 - }, -/obj/effect/landmark{ - name = "tdome1" - }, -/turf/unsimulated/floor{ - dir = 5; - icon_state = "vault" - }, -/area/tdome/tdome1) -"aLL" = ( -/obj/effect/step_trigger/thrower{ - affect_ghosts = 1; - name = "thrower_throwdown"; - tiles = 0 - }, -/obj/effect/step_trigger/teleporter/random{ - affect_ghosts = 1; - name = "escapeshuttle_leave"; - teleport_x = 25; - teleport_x_offset = 245; - teleport_y = 25; - teleport_y_offset = 245; - teleport_z = 6; - teleport_z_offset = 6 - }, -/turf/space, -/area/space) -"aLO" = ( -/obj/machinery/vending/medical, -/turf/unsimulated/floor{ - icon_state = "plating"; - name = "plating" - }, -/area/acting/backstage) -"aLP" = ( -/obj/machinery/light{ - dir = 8 - }, -/turf/simulated/floor/tiled, -/area/acting/stage) -"aLQ" = ( -/obj/machinery/light{ - dir = 4; - icon_state = "tube1" - }, -/turf/simulated/floor/tiled, -/area/acting/stage) -"aLR" = ( -/obj/machinery/vending/security, -/turf/unsimulated/floor{ - icon_state = "plating"; - name = "plating" - }, -/area/acting/backstage) -"aLS" = ( -/obj/effect/landmark{ - name = "tdome2" - }, -/obj/machinery/camera/network/thunder{ - c_tag = "Thunderdome - Red Team"; - invisibility = 101 - }, -/turf/unsimulated/floor{ - dir = 5; - icon_state = "vault" - }, -/area/tdome/tdome2) -"aLT" = ( -/turf/unsimulated/floor{ - icon_state = "bcircuit" - }, -/area/tdome) -"aLU" = ( -/obj/machinery/flasher{ - id_tag = "flash"; - name = "Thunderdome Flash" - }, -/turf/unsimulated/floor{ - icon_state = "bcircuit" - }, -/area/tdome) -"aLV" = ( -/obj/effect/landmark{ - name = "tdome1" - }, -/obj/machinery/camera/network/thunder{ - c_tag = "Green Team"; - invisibility = 101 - }, -/turf/unsimulated/floor{ - dir = 5; - icon_state = "vault" - }, -/area/tdome/tdome1) -"aLW" = ( -/turf/simulated/mineral, -/area/merchant_station) -"aMb" = ( -/obj/machinery/vending/robotics, -/turf/unsimulated/floor{ - icon_state = "plating"; - name = "plating" - }, -/area/acting/backstage) -"aMd" = ( -/obj/machinery/atmospherics/pipe/vent, -/turf/unsimulated/floor{ - icon_state = "bcircuit" - }, -/area/tdome) -"aMe" = ( -/obj/machinery/camera/network/thunder{ - c_tag = "Thunderdome Arena"; - invisibility = 101 - }, -/turf/unsimulated/floor{ - icon_state = "bcircuit" - }, -/area/tdome) -"aMf" = ( -/turf/simulated/wall/prepainted, -/area/merchant_station) -"aMg" = ( -/turf/simulated/floor/asteroid, -/area/merchant_station) -"aMh" = ( -/obj/item/reagent_containers/food/snacks/grown/mushroom/libertycap, -/turf/simulated/floor/asteroid, -/area/merchant_station) -"aMm" = ( -/obj/machinery/vending/engivend, -/turf/unsimulated/floor{ - icon_state = "plating"; - name = "plating" - }, -/area/acting/backstage) -"aMn" = ( -/obj/machinery/camera/network/thunder{ - anchored = 0; - c_tag = "Television"; - name = "Movable Camera" - }, -/turf/simulated/floor/tiled, -/area/acting/stage) -"aMo" = ( -/obj/machinery/portable_atmospherics/hydroponics, -/turf/unsimulated/floor{ - icon_state = "plating"; - name = "plating" - }, -/area/acting/backstage) -"aMp" = ( -/obj/machinery/atmospherics/pipe/simple/visible{ - dir = 5 - }, -/turf/unsimulated/floor{ - icon_state = "dark" - }, -/area/tdome) -"aMq" = ( -/obj/machinery/atmospherics/pipe/manifold/visible{ - dir = 1 - }, -/turf/unsimulated/floor{ - icon_state = "dark" - }, -/area/tdome) -"aMr" = ( -/obj/machinery/atmospherics/pipe/simple/visible{ - dir = 9 - }, -/turf/unsimulated/floor{ - icon_state = "dark" - }, -/area/tdome) -"aMs" = ( -/obj/structure/closet{ - name = "Wardrobe" - }, -/obj/item/clothing/shoes/leather, -/obj/item/clothing/under/blazer, -/obj/item/clothing/under/lawyer/black, -/obj/item/clothing/under/suit_jacket/navy, -/turf/simulated/floor/carpet, -/area/merchant_station) -"aMt" = ( -/obj/machinery/light/small{ - dir = 1 - }, -/obj/machinery/alarm{ - pixel_y = 23; - req_access = list("ACCESS_MERCHANT") - }, -/turf/simulated/floor/carpet, -/area/merchant_station) -"aMu" = ( -/obj/structure/bed, -/obj/item/bedsheet/hop, -/obj/effect/landmark/start{ - name = "Merchant" - }, -/turf/simulated/floor/carpet, -/area/merchant_station) -"aMz" = ( -/obj/machinery/vending/dinnerware, -/turf/unsimulated/floor{ - icon_state = "plating"; - name = "plating" - }, -/area/acting/backstage) -"aMA" = ( -/obj/machinery/atmospherics/pipe/simple/visible, -/turf/unsimulated/floor{ - icon_state = "dark" - }, -/area/tdome) -"aMB" = ( -/obj/item/storage/secure/safe{ - pixel_x = -25 - }, -/obj/structure/undies_wardrobe, -/turf/simulated/floor/carpet, -/area/merchant_station) -"aMC" = ( -/turf/simulated/floor/carpet, -/area/merchant_station) -"aMD" = ( -/obj/structure/table/woodentable, -/obj/random/plushie, -/turf/simulated/floor/carpet, -/area/merchant_station) -"aME" = ( -/obj/structure/closet{ - name = "Wardrobe" - }, -/obj/item/clothing/shoes/black, -/obj/item/clothing/under/overalls, -/obj/item/clothing/under/skirt, -/turf/simulated/floor/carpet/blue, -/area/merchant_station) -"aMF" = ( -/obj/machinery/alarm{ - pixel_y = 23; - req_access = list("ACCESS_MERCHANT") - }, -/turf/simulated/floor/carpet/blue, -/area/merchant_station) -"aMG" = ( -/obj/structure/bed, -/obj/item/bedsheet/rd, -/obj/effect/landmark/start{ - name = "Merchant" - }, -/turf/simulated/floor/carpet/blue, -/area/merchant_station) -"aMH" = ( -/obj/structure/disposaloutlet{ - dir = 4 - }, -/obj/structure/disposalpipe/trunk, -/turf/simulated/floor/asteroid, -/area/merchant_station) -"aMI" = ( -/obj/machinery/light/small, -/turf/simulated/floor/asteroid, -/area/merchant_station) -"aMJ" = ( -/obj/item/handcuffs/cable/tape, -/turf/simulated/floor/asteroid, -/area/merchant_station) -"aMK" = ( -/obj/effect/decal/cleanable/cobweb2{ - icon_state = "spiderling"; - name = "dead spider" - }, -/turf/simulated/floor/asteroid, -/area/merchant_station) -"aMR" = ( -/obj/machinery/vending/cola{ - name = "hacked Robust Softdrinks"; - prices = list() - }, -/turf/unsimulated/floor{ - icon_state = "plating"; - name = "plating" - }, -/area/acting/backstage) -"aMS" = ( -/obj/machinery/door/airlock/command{ - name = "Thunderdome Administration" - }, -/turf/unsimulated/floor{ - dir = 5; - icon_state = "vault" - }, -/area/tdome) -"aMT" = ( -/obj/machinery/door/blast/regular{ - id_tag = "thunderdomehea"; - name = "Heavy Supply" - }, -/turf/unsimulated/floor{ - dir = 5; - icon_state = "vault" - }, -/area/tdome) -"aMU" = ( -/obj/structure/table/woodentable, -/obj/item/device/flashlight/lamp/green, -/turf/simulated/floor/carpet, -/area/merchant_station) -"aMV" = ( -/obj/structure/bed/chair/comfy/black, -/turf/simulated/floor/carpet, -/area/merchant_station) -"aMW" = ( -/obj/machinery/newscaster{ - pixel_y = 32 - }, -/obj/structure/flora/pottedplant/bamboo, -/obj/machinery/light/small{ - dir = 1 - }, -/turf/simulated/floor/carpet, -/area/merchant_station) -"aMX" = ( -/obj/structure/bookcase/manuals/engineering, -/turf/simulated/floor/wood, -/area/merchant_station) -"aMY" = ( -/obj/structure/table/woodentable, -/obj/random/action_figure, -/turf/simulated/floor/carpet, -/area/merchant_station) -"aMZ" = ( -/obj/structure/table/woodentable, -/obj/random/single/lighter, -/obj/random/toy, -/turf/simulated/floor/carpet/blue, -/area/merchant_station) -"aNa" = ( -/turf/simulated/floor/carpet/blue, -/area/merchant_station) -"aNb" = ( -/obj/machinery/light/small{ - dir = 4; - pixel_y = 8 - }, -/turf/simulated/floor/carpet/blue, -/area/merchant_station) -"aNc" = ( -/obj/structure/disposalpipe/segment, -/turf/simulated/wall/prepainted, -/area/merchant_station) -"aNh" = ( -/obj/machinery/vending/cigarette{ - name = "hacked cigarette machine"; - prices = list(); - products = list(/obj/item/storage/fancy/cigarettes = 10, /obj/item/storage/box/matches = 10, /obj/item/flame/lighter/zippo/random = 4, /obj/item/clothing/mask/smokable/cigarette/cigar/havana = 2) - }, -/turf/unsimulated/floor{ - icon_state = "plating"; - name = "plating" - }, -/area/acting/backstage) -"aNi" = ( -/obj/machinery/chemical_dispenser/bar_alc/full, -/turf/unsimulated/floor{ - icon_state = "plating"; - name = "plating" - }, -/area/acting/backstage) -"aNj" = ( -/obj/effect/floor_decal/corner/red{ - dir = 8 - }, -/turf/unsimulated/floor{ - dir = 5; - icon_state = "vault" - }, -/area/tdome) -"aNk" = ( -/obj/structure/table/rack, -/obj/item/clothing/under/color/red, -/obj/item/clothing/shoes/brown, -/obj/item/clothing/suit/armor/vest, -/obj/item/clothing/head/helmet/swat, -/obj/item/gun/energy/laser, -/turf/unsimulated/floor{ - dir = 5; - icon_state = "vault" - }, -/area/tdome) -"aNl" = ( -/obj/machinery/door/airlock/command{ - name = "Thunderdome Administration" - }, -/turf/unsimulated/floor{ - icon_state = "dark" - }, -/area/tdome) -"aNm" = ( -/obj/effect/forcefield{ - desc = "You can't get in. Heh."; - name = "Blocker" - }, -/obj/machinery/atmospherics/pipe/simple/visible, -/obj/effect/wingrille_spawn/reinforced/crescent, -/turf/unsimulated/floor{ - icon_state = "dark" - }, -/area/tdome) -"aNn" = ( -/obj/structure/table/rack, -/obj/item/clothing/under/color/green, -/obj/item/clothing/shoes/brown, -/obj/item/clothing/suit/armor/vest, -/obj/item/clothing/head/helmet/swat, -/obj/item/gun/energy/laser, -/turf/unsimulated/floor{ - dir = 5; - icon_state = "vault" - }, -/area/tdome) -"aNo" = ( -/obj/effect/floor_decal/corner/green, -/turf/unsimulated/floor{ - dir = 5; - icon_state = "vault" - }, -/area/tdome) -"aNp" = ( -/obj/machinery/cryopod{ - dir = 4 - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled/white, -/area/merchant_station) -"aNq" = ( -/obj/machinery/light/small{ - dir = 1 - }, -/obj/machinery/computer/cryopod{ - pixel_y = 32 - }, -/obj/item/roller, -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/turf/simulated/floor/tiled/white, -/area/merchant_station) -"aNr" = ( -/obj/item/device/radio/intercom{ - pixel_y = 22 - }, -/obj/structure/table/reinforced, -/obj/item/storage/firstaid/toxin, -/obj/item/storage/firstaid/o2{ - pixel_x = 4; - pixel_y = 6 - }, -/obj/item/storage/firstaid/fire{ - pixel_x = 2; - pixel_y = 3 - }, -/obj/item/storage/firstaid/adv{ - pixel_x = -2 - }, -/obj/item/storage/firstaid/regular{ - pixel_x = -2; - pixel_y = 4 - }, -/obj/item/bodybag/cryobag{ - pixel_x = 5 - }, -/obj/effect/floor_decal/industrial/outline/blue, -/obj/machinery/atmospherics/unary/vent_pump/on, -/turf/simulated/floor/tiled/white, -/area/merchant_station) -"aNs" = ( -/obj/structure/bed/chair/comfy/black{ - dir = 4 - }, -/turf/simulated/floor/carpet, -/area/merchant_station) -"aNt" = ( -/obj/structure/bookcase/manuals/medical, -/turf/simulated/floor/wood, -/area/merchant_station) -"aNu" = ( -/obj/machinery/door/airlock{ - name = "Room A" - }, -/obj/machinery/door/firedoor, -/turf/simulated/floor/wood, -/area/merchant_station) -"aNv" = ( -/obj/item/storage/secure/safe{ - pixel_x = -25 - }, -/turf/simulated/floor/carpet/blue, -/area/merchant_station) -"aNw" = ( -/obj/structure/undies_wardrobe, -/turf/simulated/floor/carpet/blue, -/area/merchant_station) -"aNx" = ( -/obj/structure/hygiene/shower{ - dir = 4 - }, -/obj/structure/curtain/open/shower, -/obj/structure/window/reinforced, -/turf/simulated/floor/tiled/freezer, -/area/merchant_station) -"aNA" = ( -/obj/machinery/door/airlock{ - name = "Toilet" - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/freezer, -/area/merchant_station) -"aNB" = ( -/obj/machinery/light/small{ - dir = 4; - pixel_y = 8 - }, -/obj/structure/hygiene/toilet{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/freezer, -/area/merchant_station) -"aNC" = ( -/turf/simulated/wall/r_wall/prepainted, -/area/merchant_station) -"aNI" = ( -/obj/machinery/vending/containers, -/turf/unsimulated/floor{ - icon_state = "plating"; - name = "plating" - }, -/area/acting/backstage) -"aNJ" = ( -/obj/machinery/light, -/turf/simulated/floor/tiled, -/area/acting/stage) -"aNK" = ( -/obj/machinery/chemical_dispenser/full, -/turf/unsimulated/floor{ - icon_state = "plating"; - name = "plating" - }, -/area/acting/backstage) -"aNL" = ( -/turf/unsimulated/floor{ - icon_state = "lino" - }, -/area/tdome/tdomeadmin) -"aNM" = ( -/obj/structure/bed/chair{ - dir = 1 - }, -/obj/effect/landmark{ - name = "tdomeadmin" - }, -/turf/unsimulated/floor{ - icon_state = "lino" - }, -/area/tdome/tdomeadmin) -"aNN" = ( -/obj/item/extinguisher, -/turf/unsimulated/floor{ - icon_state = "lino" - }, -/area/tdome/tdomeadmin) -"aNO" = ( -/obj/machinery/atmospherics/valve, -/turf/unsimulated/floor{ - icon_state = "lino" - }, -/area/tdome/tdomeadmin) -"aNP" = ( -/obj/structure/bed/chair{ - dir = 1 - }, -/obj/structure/disposalpipe/segment, -/obj/effect/landmark{ - name = "tdomeadmin" - }, -/turf/unsimulated/floor{ - icon_state = "lino" - }, -/area/tdome/tdomeadmin) -"aNQ" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 - }, -/turf/simulated/floor/tiled/white, -/area/merchant_station) -"aNR" = ( -/obj/machinery/sleeper{ - dir = 8 - }, -/obj/effect/floor_decal/industrial/outline/blue, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 - }, -/turf/simulated/floor/tiled/white, -/area/merchant_station) -"aNS" = ( -/obj/structure/bed/chair/comfy/black{ - dir = 4 - }, -/obj/structure/window/reinforced, -/turf/simulated/floor/carpet, -/area/merchant_station) -"aNT" = ( -/obj/structure/window/reinforced, -/turf/simulated/floor/carpet, -/area/merchant_station) -"aNU" = ( -/turf/simulated/floor/wood, -/area/merchant_station) -"aNV" = ( -/obj/machinery/alarm{ - pixel_y = 23; - req_access = list("ACCESS_MERCHANT") - }, -/turf/simulated/floor/wood, -/area/merchant_station) -"aNW" = ( -/obj/machinery/firealarm{ - dir = 1; - pixel_y = 24 - }, -/turf/simulated/floor/wood, -/area/merchant_station) -"aNX" = ( -/obj/machinery/door/airlock{ - name = "Room B" - }, -/obj/machinery/door/firedoor, -/turf/simulated/floor/wood, -/area/merchant_station) -"aNY" = ( -/obj/structure/flora/pottedplant/minitree, -/turf/simulated/floor/carpet/blue, -/area/merchant_station) -"aNZ" = ( -/obj/structure/hygiene/shower{ - dir = 4 - }, -/obj/structure/curtain/open/shower, -/obj/structure/window/reinforced{ - dir = 1 - }, -/turf/simulated/floor/tiled/freezer, -/area/merchant_station) -"aOa" = ( -/mob/living/simple_animal/tindalos{ - name = "Eddy" - }, -/turf/simulated/floor/tiled/freezer, -/area/merchant_station) -"aOb" = ( -/obj/machinery/light/small{ - dir = 4; - pixel_y = 8 - }, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/tiled/freezer, -/area/merchant_station) -"aOc" = ( -/obj/structure/closet/secure_closet{ - name = "merchant's locker"; - req_access = list("ACCESS_MERCHANT") - }, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/floor/tiled/dark, -/area/merchant_station) -"aOd" = ( -/obj/machinery/light/small{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/dark, -/area/merchant_station) -"aOe" = ( -/obj/structure/closet/crate/freezer, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/floor/tiled/dark, -/area/merchant_station) -"aOf" = ( -/obj/structure/closet/crate, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/floor/tiled/dark, -/area/merchant_station) -"aOg" = ( -/obj/machinery/light/small{ - dir = 1 - }, -/obj/effect/decal/cleanable/spiderling_remains, -/turf/simulated/floor/tiled/dark, -/area/merchant_station) -"aOh" = ( -/obj/effect/floor_decal/industrial/outline/grey, -/obj/structure/largecrate, -/obj/random/loot, -/obj/effect/decal/cleanable/cobweb2, -/turf/simulated/floor/tiled/dark, -/area/merchant_station) -"aOr" = ( -/obj/machinery/pipedispenser, -/turf/unsimulated/floor{ - icon_state = "plating"; - name = "plating" - }, -/area/acting/backstage) -"aOs" = ( -/obj/machinery/chemical_dispenser/bar_soft/full, -/turf/unsimulated/floor{ - icon_state = "plating"; - name = "plating" - }, -/area/acting/backstage) -"aOt" = ( -/obj/machinery/atmospherics/portables_connector{ - dir = 1 - }, -/obj/machinery/portable_atmospherics/canister/sleeping_agent{ - pixel_x = 1 - }, -/turf/unsimulated/floor{ - icon_state = "lino" - }, -/area/tdome/tdomeadmin) -"aOu" = ( -/obj/item/wrench, -/turf/unsimulated/floor{ - icon_state = "lino" - }, -/area/tdome/tdomeadmin) -"aOv" = ( -/obj/structure/disposalpipe/trunk{ - dir = 1 - }, -/obj/machinery/disposal, -/turf/unsimulated/floor{ - icon_state = "lino" - }, -/area/tdome/tdomeadmin) -"aOw" = ( -/obj/effect/wallframe_spawn/reinforced, -/turf/space, -/area/merchant_station) -"aOx" = ( -/obj/machinery/microwave{ - pixel_x = -3; - pixel_y = 6 - }, -/obj/structure/table/reinforced, -/obj/effect/floor_decal/corner/blue/three_quarters{ - dir = 8 - }, -/turf/simulated/floor/tiled, -/area/merchant_station) -"aOy" = ( -/obj/random/donkpocket_box, -/obj/structure/table/reinforced, -/obj/structure/window/reinforced{ - dir = 1 - }, -/obj/effect/floor_decal/corner/blue{ - dir = 1 - }, -/turf/simulated/floor/tiled, -/area/merchant_station) -"aOz" = ( -/obj/machinery/door/window/northright, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/tiled, -/area/merchant_station) -"aOA" = ( -/obj/structure/filingcabinet/chestdrawer, -/obj/item/device/radio/intercom{ - dir = 8; - pixel_x = 22 - }, -/obj/structure/window/reinforced{ - dir = 1 - }, -/obj/effect/floor_decal/corner/blue, -/turf/simulated/floor/tiled, -/area/merchant_station) -"aOB" = ( -/obj/machinery/jukebox, -/obj/item/device/radio/intercom{ - dir = 4; - pixel_x = -22 - }, -/obj/structure/window/reinforced{ - dir = 1 - }, -/turf/simulated/floor/wood, -/area/merchant_station) -"aOC" = ( -/obj/machinery/vending/cigarette{ - name = "hacked cigarette machine"; - prices = list(); - products = list(/obj/item/storage/fancy/cigarettes = 10, /obj/item/storage/box/matches = 10, /obj/item/flame/lighter/zippo/random = 4, /obj/item/clothing/mask/smokable/cigarette/cigar/havana = 2) - }, -/obj/structure/window/reinforced{ - dir = 1 - }, -/turf/simulated/floor/wood, -/area/merchant_station) -"aOD" = ( -/obj/structure/window/reinforced{ - dir = 1 - }, -/obj/structure/table/woodentable, -/turf/simulated/floor/wood, -/area/merchant_station) -"aOE" = ( -/obj/structure/table/woodentable, -/obj/item/storage/box/glasses/pint, -/turf/simulated/floor/wood, -/area/merchant_station) -"aOF" = ( -/obj/machinery/door/airlock/glass{ - name = "Lounge" - }, -/obj/machinery/door/firedoor, -/turf/simulated/floor/wood, -/area/merchant_station) -"aOG" = ( -/obj/machinery/alarm{ - dir = 4; - pixel_x = -22 - }, -/obj/structure/disposalpipe/segment{ - dir = 4; - icon_state = "pipe-c" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 - }, -/turf/simulated/floor/tiled/freezer, -/area/merchant_station) -"aOH" = ( -/obj/structure/disposalpipe/segment{ - dir = 8; - icon_state = "pipe-c" - }, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 8 - }, -/turf/simulated/floor/tiled/freezer, -/area/merchant_station) -"aOI" = ( -/obj/machinery/door/airlock{ - name = "Toilet" - }, -/turf/simulated/floor/tiled/freezer, -/area/merchant_station) -"aOJ" = ( -/obj/machinery/light/small{ - dir = 4; - pixel_y = 8 - }, -/obj/machinery/recharge_station, -/turf/simulated/floor/tiled/freezer, -/area/merchant_station) -"aOK" = ( -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/dark, -/area/merchant_station) -"aOL" = ( -/obj/structure/table/rack, -/obj/random/contraband, -/obj/random/loot, -/obj/effect/floor_decal/industrial/outline/grey, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/dark, -/area/merchant_station) -"aOM" = ( -/obj/machinery/atmospherics/unary/vent_pump/on, -/turf/simulated/floor/tiled/dark, -/area/merchant_station) -"aON" = ( -/obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/floor/tiled/dark, -/area/merchant_station) -"aOY" = ( -/obj/machinery/acting/changer, -/turf/unsimulated/floor{ - icon_state = "plating"; - name = "plating" - }, -/area/acting/backstage) -"aOZ" = ( -/obj/machinery/door/airlock/centcom{ - name = "General Access" - }, -/turf/unsimulated/floor{ - icon_state = "lino" - }, -/area/tdome) -"aPa" = ( -/obj/structure/bed/chair, -/turf/unsimulated/floor{ - icon_state = "lino" - }, -/area/tdome/tdomeadmin) -"aPb" = ( -/obj/effect/floor_decal/corner/blue{ - dir = 9 - }, -/obj/machinery/constructable_frame/computerframe, -/turf/simulated/floor/tiled, -/area/merchant_station) -"aPc" = ( -/turf/simulated/floor/tiled, -/area/merchant_station) -"aPd" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/tiled, -/area/merchant_station) -"aPe" = ( -/obj/machinery/papershredder, -/obj/machinery/light{ - dir = 4; - icon_state = "tube1" - }, -/obj/effect/floor_decal/corner/blue{ - dir = 4 - }, -/obj/machinery/atmospherics/unary/vent_pump/on, -/turf/simulated/floor/tiled, -/area/merchant_station) -"aPf" = ( -/obj/effect/wingrille_spawn/reinforced, -/obj/machinery/door/firedoor, -/turf/simulated/floor/plating, -/area/merchant_station) -"aPg" = ( -/obj/machinery/light/small{ - dir = 8 - }, -/turf/simulated/floor/wood, -/area/merchant_station) -"aPh" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/turf/simulated/floor/wood, -/area/merchant_station) -"aPi" = ( -/obj/item/stool/padded, -/turf/simulated/floor/wood, -/area/merchant_station) -"aPj" = ( -/obj/machinery/atmospherics/unary/vent_pump/on, -/turf/simulated/floor/wood, -/area/merchant_station) -"aPk" = ( -/obj/structure/table/woodentable, -/obj/structure/reagent_dispensers/beerkeg, -/obj/machinery/light{ - dir = 4; - icon_state = "tube1" - }, -/turf/simulated/floor/wood, -/area/merchant_station) -"aPl" = ( -/obj/structure/bed/chair/comfy/brown{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/merchant_station) -"aPm" = ( -/obj/structure/table/reinforced, -/obj/machinery/newscaster{ - pixel_y = 32 - }, -/turf/simulated/floor/tiled, -/area/merchant_station) -"aPn" = ( -/obj/structure/bed/chair/comfy/brown{ - dir = 8 - }, -/turf/simulated/floor/tiled, -/area/merchant_station) -"aPo" = ( -/obj/machinery/disposal, -/obj/structure/disposalpipe/trunk, -/turf/simulated/floor/tiled, -/area/merchant_station) -"aPp" = ( -/obj/machinery/door/airlock{ - id_tag = "rbath"; - name = "Bathroom" - }, -/obj/machinery/door/firedoor, -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/tiled/freezer, -/area/merchant_station) -"aPq" = ( -/turf/simulated/floor/tiled/dark, -/area/merchant_station) -"aPA" = ( -/obj/machinery/vending/props, -/turf/unsimulated/floor{ - icon_state = "plating"; - name = "plating" - }, -/area/acting/backstage) -"aPB" = ( -/obj/machinery/newscaster{ - pixel_y = -27 - }, -/turf/unsimulated/floor{ - icon_state = "plating"; - name = "plating" - }, -/area/acting/backstage) -"aPC" = ( -/obj/structure/table/rack, -/obj/item/stack/tile/floor{ - amount = 50 - }, -/turf/unsimulated/floor{ - icon_state = "plating"; - name = "plating" - }, -/area/acting/backstage) -"aPD" = ( -/obj/machinery/portable_atmospherics/canister/phoron, -/turf/unsimulated/floor{ - icon_state = "plating"; - name = "plating" - }, -/area/acting/backstage) -"aPE" = ( -/obj/machinery/portable_atmospherics/canister/nitrogen, -/turf/unsimulated/floor{ - icon_state = "plating"; - name = "plating" - }, -/area/acting/backstage) -"aPF" = ( -/obj/machinery/portable_atmospherics/canister/sleeping_agent, -/turf/unsimulated/floor{ - icon_state = "plating"; - name = "plating" - }, -/area/acting/backstage) -"aPH" = ( -/obj/structure/table/standard, -/obj/machinery/recharger{ - pixel_y = 4 - }, -/turf/unsimulated/floor{ - icon_state = "lino" - }, -/area/tdome/tdomeadmin) -"aPI" = ( -/obj/item/grenade/chem_grenade/cleaner, -/obj/item/grenade/chem_grenade/cleaner, -/obj/item/grenade/chem_grenade/cleaner, -/obj/item/grenade/chem_grenade/cleaner, -/obj/item/grenade/chem_grenade/cleaner, -/obj/item/grenade/chem_grenade/cleaner, -/obj/item/grenade/chem_grenade/cleaner, -/obj/item/grenade/chem_grenade/cleaner, -/obj/item/grenade/chem_grenade/cleaner, -/obj/item/grenade/chem_grenade/cleaner, -/obj/structure/table/standard, -/turf/unsimulated/floor{ - icon_state = "lino" - }, -/area/tdome/tdomeadmin) -"aPJ" = ( -/obj/machinery/button/blast_door{ - dir = 1; - icon_state = "computer"; - id_tag = "thunderdomeaxe"; - name = "Thunderdome Axe Supply" - }, -/turf/unsimulated/floor{ - icon_state = "lino" - }, -/area/tdome/tdomeadmin) -"aPK" = ( -/obj/machinery/button/blast_door{ - dir = 1; - id_tag = "thunderdomegen"; - name = "Thunderdome General Supply" - }, -/turf/unsimulated/floor{ - icon_state = "lino" - }, -/area/tdome/tdomeadmin) -"aPL" = ( -/obj/machinery/button/blast_door{ - dir = 1; - id_tag = "thunderdomehea"; - name = "Thunderdome Heavy Supply" - }, -/turf/unsimulated/floor{ - icon_state = "lino" - }, -/area/tdome/tdomeadmin) -"aPN" = ( -/obj/item/stack/medical/ointment, -/obj/item/stack/medical/ointment, -/obj/item/stack/medical/ointment, -/obj/structure/table/standard, -/turf/unsimulated/floor{ - icon_state = "lino" - }, -/area/tdome/tdomeadmin) -"aPO" = ( -/obj/structure/table/standard, -/obj/item/stack/medical/bruise_pack, -/obj/item/stack/medical/bruise_pack, -/obj/item/stack/medical/bruise_pack, -/turf/unsimulated/floor{ - icon_state = "lino" - }, -/area/tdome/tdomeadmin) -"aPP" = ( -/obj/structure/table/standard, -/obj/item/storage/box/handcuffs, -/turf/unsimulated/floor{ - icon_state = "lino" - }, -/area/tdome/tdomeadmin) -"aPQ" = ( -/obj/structure/table/standard, -/turf/unsimulated/floor{ - icon_state = "lino" - }, -/area/tdome/tdomeadmin) -"aPR" = ( -/obj/structure/table/standard, -/obj/item/storage/toolbox/electrical, -/turf/unsimulated/floor{ - icon_state = "lino" - }, -/area/tdome/tdomeadmin) -"aPS" = ( -/obj/structure/table/standard, -/obj/item/storage/toolbox/mechanical, -/turf/unsimulated/floor{ - icon_state = "lino" - }, -/area/tdome/tdomeadmin) -"aPT" = ( -/obj/effect/floor_decal/corner/blue{ - dir = 9 - }, -/obj/machinery/computer/shuttle_control/merchant{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/merchant_station) -"aPU" = ( -/obj/structure/bed/chair/office/dark, -/turf/simulated/floor/tiled, -/area/merchant_station) -"aPV" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/turf/simulated/floor/tiled, -/area/merchant_station) -"aPW" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply, -/turf/simulated/floor/tiled, -/area/merchant_station) -"aPX" = ( -/obj/machinery/door/airlock/glass/command{ - name = "Office" - }, -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/wood, -/area/merchant_station) -"aPY" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/wood, -/area/merchant_station) -"aPZ" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, -/turf/simulated/floor/wood, -/area/merchant_station) -"aQa" = ( -/obj/item/stool/padded, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/wood, -/area/merchant_station) -"aQb" = ( -/obj/structure/table/woodentable, -/obj/item/material/ashtray/bronze, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/item/clothing/mask/smokable/cigarette/cigar/havana, -/turf/simulated/floor/wood, -/area/merchant_station) -"aQc" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/table/woodentable, -/turf/simulated/floor/wood, -/area/merchant_station) -"aQd" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply, -/obj/item/stool/padded, -/turf/simulated/floor/wood, -/area/merchant_station) -"aQe" = ( -/obj/structure/table/woodentable, -/obj/machinery/chemical_dispenser/bar_soft/full, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/wood, -/area/merchant_station) -"aQf" = ( -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/effect/wallframe_spawn/reinforced, -/turf/simulated/floor/plating, -/area/merchant_station) -"aQg" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/turf/simulated/floor/tiled, -/area/merchant_station) -"aQh" = ( -/obj/structure/disposalpipe/segment{ - dir = 1; - icon_state = "pipe-c" - }, -/turf/simulated/floor/tiled, -/area/merchant_station) -"aQi" = ( -/obj/machinery/vending/wallmed1{ - pixel_x = 7; - pixel_y = 32 - }, -/obj/structure/extinguisher_cabinet{ - pixel_x = -7; - pixel_y = 32 - }, -/obj/machinery/light{ - dir = 1 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/merchant_station) -"aQj" = ( -/obj/structure/disposalpipe/junction{ - dir = 1; - icon_state = "pipe-j2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/tiled, -/area/merchant_station) -"aQk" = ( -/obj/machinery/computer/modular/preset/civilian, -/turf/simulated/floor/tiled, -/area/merchant_station) -"aQl" = ( -/obj/machinery/vending/cola{ - name = "hacked Robust Softdrinks"; - prices = list() - }, -/turf/simulated/floor/tiled, -/area/merchant_station) -"aQm" = ( -/obj/machinery/vending/snack{ - name = "hacked Getmore Chocolate Corp"; - prices = list() - }, -/turf/simulated/floor/tiled, -/area/merchant_station) -"aQo" = ( -/obj/structure/table/rack, -/obj/effect/floor_decal/industrial/outline/grey, -/obj/item/card/id{ - access = list(301); - desc = "A visitor's access card, this one is for the Merchant's Station."; - icon_state = "guest"; - name = "Visitor's Card - Merchant's Station" - }, -/obj/item/card/id{ - access = list(301); - desc = "A visitor's access card, this one is for the Merchant's Station."; - icon_state = "guest"; - name = "Visitor's Card - Merchant's Station" - }, -/obj/item/card/id{ - access = list(301); - desc = "A visitor's access card, this one is for the Merchant's Station."; - icon_state = "guest"; - name = "Visitor's Card - Merchant's Station" - }, -/turf/simulated/floor/tiled/dark, -/area/merchant_station) -"aQp" = ( -/obj/machinery/alarm{ - dir = 1; - pixel_y = -25; - req_access = list("ACCESS_MERCHANT") - }, -/obj/machinery/light/small, -/turf/simulated/floor/tiled/dark, -/area/merchant_station) -"aQF" = ( -/obj/structure/table/reinforced, -/obj/item/paper_bin{ - pixel_x = 1; - pixel_y = 9 - }, -/obj/item/pen, -/obj/effect/floor_decal/corner/blue/three_quarters, -/turf/simulated/floor/tiled, -/area/merchant_station) -"aQG" = ( -/obj/structure/table/reinforced, -/obj/effect/floor_decal/corner/blue{ - dir = 10 - }, -/obj/random/handgun, -/turf/simulated/floor/tiled, -/area/merchant_station) -"aQH" = ( -/obj/structure/table/reinforced, -/obj/random/loot, -/obj/effect/floor_decal/corner/blue{ - dir = 10 - }, -/turf/simulated/floor/tiled, -/area/merchant_station) -"aQI" = ( -/obj/machinery/photocopier, -/obj/machinery/alarm{ - dir = 8; - pixel_x = 25; - req_access = list("ACCESS_MERCHANT") - }, -/obj/effect/floor_decal/corner/blue{ - dir = 8 - }, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 1 - }, -/turf/simulated/floor/tiled, -/area/merchant_station) -"aQJ" = ( -/obj/machinery/atm{ - pixel_x = -32 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/turf/simulated/floor/tiled, -/area/merchant_station) -"aQK" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/merchant_station) -"aQL" = ( -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply, -/turf/simulated/floor/tiled, -/area/merchant_station) -"aQM" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 1 - }, -/turf/simulated/floor/tiled, -/area/merchant_station) -"aQN" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 8 - }, -/turf/simulated/floor/tiled, -/area/merchant_station) -"aQO" = ( -/obj/structure/closet/emcloset, -/obj/machinery/alarm{ - dir = 8; - pixel_x = 25; - req_access = list("ACCESS_MERCHANT") - }, -/turf/simulated/floor/tiled, -/area/merchant_station) -"aQP" = ( -/obj/machinery/door/airlock/hatch{ - name = "Storage" - }, -/obj/machinery/door/firedoor, -/turf/simulated/floor/tiled/dark, -/area/merchant_station) -"aRl" = ( -/obj/structure/lattice, -/obj/structure/grille, -/obj/structure/sign/warning/docking_area, -/turf/space, -/area/space) -"aRm" = ( -/obj/machinery/light/small{ - dir = 1 - }, -/turf/space, -/area/merchant_station) -"aRn" = ( -/obj/structure/sign/warning/docking_area, -/turf/simulated/wall/prepainted, -/area/merchant_station) -"aRo" = ( -/obj/structure/disposalpipe/segment{ - dir = 1; - icon_state = "pipe-c" - }, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 1 - }, -/turf/simulated/floor/tiled, -/area/merchant_station) -"aRp" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/merchant_station) -"aRq" = ( -/obj/structure/disposalpipe/segment{ - dir = 2; - icon_state = "pipe-c" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/tiled, -/area/merchant_station) -"aRr" = ( -/obj/machinery/firealarm{ - dir = 4; - pixel_x = 24 - }, -/obj/machinery/light{ - dir = 4; - icon_state = "tube1" - }, -/turf/simulated/floor/tiled, -/area/merchant_station) -"aRs" = ( -/obj/structure/table/steel, -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/obj/machinery/recharger, -/turf/simulated/floor/tiled, -/area/merchant_station) -"aRt" = ( -/obj/structure/table/rack, -/obj/random/loot, -/turf/simulated/floor/tiled, -/area/merchant_station) -"aRu" = ( -/obj/structure/closet/crate, -/obj/machinery/light{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/obj/random/loot, -/obj/random/loot, -/turf/simulated/floor/tiled, -/area/merchant_station) -"aRv" = ( -/obj/structure/table/rack, -/obj/item/storage/bag/cash, -/turf/simulated/floor/tiled, -/area/merchant_station) -"aRA" = ( -/obj/effect/paint/silver, -/turf/simulated/wall/r_titanium, -/area/shuttle/merchant/home) -"aRB" = ( -/obj/structure/shuttle/engine/heater{ - dir = 4 - }, -/obj/effect/paint/silver, -/turf/simulated/wall/r_titanium, -/area/shuttle/merchant/home) -"aRC" = ( -/obj/structure/shuttle/engine/propulsion/burst/right{ - dir = 4; - name = "propulsion" - }, -/turf/space, -/area/shuttle/merchant/home) -"aRD" = ( -/obj/structure/disposalpipe/segment{ - dir = 1; - icon_state = "pipe-c" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 8 - }, -/turf/simulated/floor/tiled, -/area/merchant_station) -"aRE" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/merchant_station) -"aRF" = ( -/obj/machinery/door/firedoor, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/merchant_station) -"aRG" = ( -/obj/structure/disposalpipe/segment{ - dir = 2; - icon_state = "pipe-c" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/turf/simulated/floor/tiled, -/area/merchant_station) -"aRH" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/merchant_station) -"aRI" = ( -/obj/structure/table/steel, -/obj/item/spacecash/bundle/c1000, -/obj/item/spacecash/bundle/c1000, -/obj/item/spacecash/bundle/c1000, -/obj/item/spacecash/bundle/c1000, -/obj/item/spacecash/bundle/c1000, -/obj/item/paper_bin{ - pixel_x = 1; - pixel_y = 9 - }, -/obj/item/pen, -/obj/random/clipboard, -/turf/simulated/floor/tiled, -/area/merchant_station) -"aRU" = ( -/obj/machinery/door/blast/shutters{ - density = 0; - dir = 2; - icon_state = "shutter0"; - id_tag = "merchantshuttle"; - name = "Merchant Window Shutters"; - opacity = 0 - }, -/obj/effect/wallframe_spawn/reinforced/titanium, -/obj/effect/paint/silver, -/turf/simulated/floor/plating, -/area/shuttle/merchant/home) -"aRX" = ( -/obj/machinery/door/airlock/multi_tile/glass{ - dir = 8; - name = "Warehouse" - }, -/obj/machinery/door/firedoor, -/turf/simulated/floor/tiled, -/area/merchant_station) -"aRY" = ( -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/tiled, -/area/merchant_station) -"aRZ" = ( -/obj/machinery/computer/modular/preset/merchant{ - dir = 8; - icon_state = "console" - }, -/turf/simulated/floor/tiled, -/area/merchant_station) -"aSh" = ( -/obj/structure/closet/secure_closet{ - name = "merchant's locker"; - req_access = list("ACCESS_MERCHANT") - }, -/obj/effect/floor_decal/corner/brown{ - dir = 10 - }, -/turf/simulated/floor/tiled/dark, -/area/shuttle/merchant/home) -"aSj" = ( -/obj/structure/table/rack, -/turf/simulated/floor/tiled, -/area/shuttle/merchant/home) -"aSk" = ( -/obj/effect/wallframe_spawn/reinforced/titanium, -/turf/simulated/floor/plating, -/area/shuttle/merchant/home) -"aSl" = ( -/obj/structure/table/reinforced, -/obj/structure/closet/hydrant{ - pixel_y = 32 - }, -/turf/simulated/floor/tiled, -/area/shuttle/merchant/home) -"aSm" = ( -/obj/structure/flora/pottedplant/minitree, -/turf/simulated/floor/tiled, -/area/shuttle/merchant/home) -"aSn" = ( -/obj/machinery/portable_atmospherics/canister/air/airlock, -/obj/machinery/atmospherics/portables_connector, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/light{ - dir = 4; - icon_state = "tube1" - }, -/obj/machinery/door/window/brigdoor/southright, -/obj/structure/window/reinforced{ - dir = 8 - }, -/turf/simulated/floor/tiled, -/area/shuttle/merchant/home) -"aSo" = ( -/obj/machinery/light/small{ - dir = 4 - }, -/obj/machinery/button/blast_door{ - id_tag = "merchantbase"; - name = "Merchant Loading Shutters"; - pixel_x = 27; - pixel_y = -9 - }, -/obj/effect/floor_decal/industrial/warning/corner, -/turf/simulated/floor/tiled, -/area/merchant_station) -"aSp" = ( -/obj/machinery/firealarm{ - dir = 8; - pixel_x = -24 - }, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/tiled, -/area/merchant_station) -"aSq" = ( -/obj/machinery/vending/fashionvend, -/turf/simulated/floor/tiled, -/area/merchant_station) -"aSr" = ( -/obj/machinery/merchant_pad, -/turf/simulated/floor/tiled, -/area/merchant_station) -"aSy" = ( -/obj/machinery/door/blast/shutters{ - density = 0; - dir = 4; - icon_state = "shutter0"; - id_tag = "merchantshuttle"; - name = "Merchant Window Shutters"; - opacity = 0 - }, -/obj/effect/wallframe_spawn/reinforced/titanium, -/obj/effect/paint/silver, -/turf/simulated/floor/plating, -/area/shuttle/merchant/home) -"aSz" = ( -/obj/machinery/light/small{ - dir = 1 - }, -/obj/structure/table/reinforced, -/obj/item/modular_computer/laptop/preset/custom_loadout/standard, -/turf/simulated/floor/carpet/blue, -/area/shuttle/merchant/home) -"aSA" = ( -/turf/simulated/floor/carpet/blue, -/area/shuttle/merchant/home) -"aSB" = ( -/obj/structure/bed/chair/shuttle, -/turf/simulated/floor/carpet/blue, -/area/shuttle/merchant/home) -"aSC" = ( -/obj/machinery/vending/wallmed1{ - pixel_x = 7; - pixel_y = 32 - }, -/obj/structure/extinguisher_cabinet{ - pixel_x = -7; - pixel_y = 32 - }, -/obj/item/storage/secure/safe{ - pixel_x = 30 - }, -/obj/structure/flora/pottedplant/tropical, -/turf/simulated/floor/wood, -/area/shuttle/merchant/home) -"aSD" = ( -/obj/machinery/light{ - dir = 8; - icon_state = "tube1" - }, -/obj/machinery/embedded_controller/radio/airlock/docking_port{ - frequency = 1380; - id_tag = "merchant_ship_dock"; - pixel_x = -24; - tag_airpump = "merchant_ship_vent"; - tag_chamber_sensor = "merchant_ship_sensor"; - tag_exterior_door = "merchant_ship_exterior"; - tag_interior_door = "merchant_ship_interior" - }, -/turf/simulated/floor/tiled/dark, -/area/shuttle/merchant/home) -"aSE" = ( -/turf/simulated/floor/tiled/dark, -/area/shuttle/merchant/home) -"aSF" = ( -/obj/machinery/light{ - dir = 1 - }, -/obj/machinery/door/window/brigdoor/eastright, -/turf/simulated/floor/tiled/dark, -/area/shuttle/merchant/home) -"aSG" = ( -/obj/effect/floor_decal/corner/green/three_quarters{ - dir = 8 - }, -/turf/simulated/floor/tiled, -/area/shuttle/merchant/home) -"aSH" = ( -/obj/effect/floor_decal/corner/green{ - dir = 5 - }, -/turf/simulated/floor/tiled, -/area/shuttle/merchant/home) -"aSI" = ( -/obj/machinery/light{ - dir = 1 - }, -/obj/effect/floor_decal/corner/green{ - dir = 5 - }, -/turf/simulated/floor/tiled, -/area/shuttle/merchant/home) -"aSJ" = ( -/obj/machinery/atmospherics/pipe/simple/hidden, -/obj/effect/floor_decal/corner/green{ - dir = 5 - }, -/turf/simulated/floor/tiled, -/area/shuttle/merchant/home) -"aSK" = ( -/turf/simulated/floor/plating, -/area/shuttle/merchant/home) -"aSL" = ( -/obj/machinery/access_button{ - command = "cycle_exterior"; - frequency = 1380; - master_tag = "merchant_ship_dock"; - name = "exterior access button"; - pixel_x = 6; - pixel_y = 28 - }, -/obj/machinery/access_button{ - command = "cycle_interior"; - frequency = 1380; - master_tag = "merchant_ship_dock"; - name = "interior access button"; - pixel_x = -6; - pixel_y = 28 - }, -/obj/machinery/light/small{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{ - id_tag = "merchant_ship_vent" - }, -/turf/simulated/floor/plating, -/area/shuttle/merchant/home) -"aSO" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/merchant_station) -"aSP" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/blast/shutters{ - dir = 8; - id_tag = "merchantbase"; - name = "Merchant Loading Shutters" - }, -/obj/effect/floor_decal/industrial/hatch/yellow, -/turf/simulated/floor/tiled, -/area/merchant_station) -"aSQ" = ( -/obj/machinery/light/small{ - dir = 1 - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 10 - }, -/turf/simulated/floor/tiled, -/area/merchant_station) -"aSR" = ( -/obj/structure/disposalpipe/segment, -/obj/effect/floor_decal/industrial/warning, -/turf/simulated/floor/tiled, -/area/merchant_station) -"aSS" = ( -/obj/effect/floor_decal/industrial/warning, -/turf/simulated/floor/tiled, -/area/merchant_station) -"aST" = ( -/obj/machinery/door/window/southleft, -/obj/machinery/light/small{ - dir = 8 - }, -/obj/effect/floor_decal/industrial/warning, -/obj/machinery/conveyor_switch{ - id = "merchantbelt2" - }, -/turf/simulated/floor/tiled, -/area/merchant_station) -"aSU" = ( -/obj/machinery/door/window/southright, -/obj/effect/floor_decal/industrial/warning, -/turf/simulated/floor/tiled, -/area/merchant_station) -"aTc" = ( -/obj/machinery/computer/shuttle_control/merchant{ - dir = 4 - }, -/turf/simulated/floor/carpet/blue, -/area/shuttle/merchant/home) -"aTd" = ( -/obj/machinery/button/blast_door{ - id_tag = "merchantshuttle"; - name = "Merchant Window Shutters"; - pixel_y = -28 - }, -/obj/structure/bed/chair/shuttle{ - dir = 8 - }, -/turf/simulated/floor/carpet/blue, -/area/shuttle/merchant/home) -"aTe" = ( -/turf/simulated/floor/wood, -/area/shuttle/merchant/home) -"aTf" = ( -/obj/machinery/door/airlock/hatch{ - name = "Cockpit" - }, -/turf/simulated/floor/wood, -/area/shuttle/merchant/home) -"aTg" = ( -/obj/structure/table/reinforced, -/obj/structure/window/reinforced{ - dir = 1 - }, -/obj/item/paper_bin{ - pixel_x = 1; - pixel_y = 9 - }, -/obj/item/pen, -/turf/simulated/floor/tiled/dark, -/area/shuttle/merchant/home) -"aTh" = ( -/obj/structure/window/reinforced{ - dir = 4 - }, -/obj/structure/table/reinforced, -/obj/structure/window/reinforced{ - dir = 1 - }, -/turf/simulated/floor/tiled/dark, -/area/shuttle/merchant/home) -"aTi" = ( -/obj/effect/floor_decal/corner/green{ - dir = 1 - }, -/obj/effect/floor_decal/corner/brown{ - dir = 8 - }, -/turf/simulated/floor/tiled, -/area/shuttle/merchant/home) -"aTj" = ( -/turf/simulated/floor/tiled, -/area/shuttle/merchant/home) -"aTk" = ( -/obj/structure/table/rack, -/obj/effect/floor_decal/corner/green{ - dir = 5 - }, -/obj/effect/floor_decal/corner/green{ - dir = 10 - }, -/turf/simulated/floor/tiled, -/area/shuttle/merchant/home) -"aTl" = ( -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 5 - }, -/turf/simulated/floor/tiled, -/area/shuttle/merchant/home) -"aTm" = ( -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 4 - }, -/obj/machinery/door/airlock/external{ - frequency = 1380; - icon_state = "closed"; - id_tag = "merchant_ship_interior"; - locked = 1; - name = "Ship Exterior" - }, -/turf/simulated/floor/plating, -/area/shuttle/merchant/home) -"aTn" = ( -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/shuttle/merchant/home) -"aTo" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden{ - dir = 4 - }, -/obj/machinery/airlock_sensor{ - frequency = 1380; - id_tag = "merchant_ship_sensor"; - pixel_x = 28 - }, -/turf/simulated/floor/plating, -/area/shuttle/merchant/home) -"aTp" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/blast/shutters{ - dir = 8; - id_tag = "merchantbase"; - name = "Merchant Loading Shutters" - }, -/obj/effect/decal/cleanable/dirt, -/obj/effect/floor_decal/industrial/hatch/yellow, -/turf/simulated/floor/tiled, -/area/merchant_station) -"aTq" = ( -/obj/machinery/conveyor{ - dir = 8; - id = "merchantbelt1" - }, -/turf/simulated/floor/plating, -/area/merchant_station) -"aTr" = ( -/obj/structure/disposalpipe/segment, -/obj/machinery/conveyor{ - dir = 8; - id = "merchantbelt1" - }, -/turf/simulated/floor/plating, -/area/merchant_station) -"aTs" = ( -/obj/machinery/conveyor{ - dir = 8; - id = "merchantbelt2" - }, -/turf/simulated/floor/plating, -/area/merchant_station) -"aTv" = ( -/obj/structure/table/reinforced, -/obj/item/paper_bin{ - pixel_x = 1; - pixel_y = 9 - }, -/obj/item/pen, -/turf/simulated/floor/carpet/blue, -/area/shuttle/merchant/home) -"aTw" = ( -/obj/structure/table/reinforced, -/turf/simulated/floor/carpet/blue, -/area/shuttle/merchant/home) -"aTx" = ( -/obj/structure/closet/emcloset, -/turf/simulated/floor/carpet/blue, -/area/shuttle/merchant/home) -"aTy" = ( -/obj/structure/closet/secure_closet{ - name = "merchant's locker"; - req_access = list("ACCESS_MERCHANT") - }, -/obj/item/device/radio/intercom{ - dir = 1; - pixel_y = -22 - }, -/obj/machinery/light/small{ - dir = 4; - pixel_y = 8 - }, -/obj/random/handgun, -/turf/simulated/floor/wood, -/area/shuttle/merchant/home) -"aTA" = ( -/obj/machinery/light{ - dir = 8; - icon_state = "tube1" - }, -/turf/simulated/floor/tiled/dark, -/area/shuttle/merchant/home) -"aTB" = ( -/obj/structure/bed/chair/office/comfy/black{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark, -/area/shuttle/merchant/home) -"aTC" = ( -/obj/structure/table/reinforced, -/obj/machinery/door/window/brigdoor/eastright, -/obj/machinery/light, -/obj/structure/closet/walllocker/emerglocker/south, -/turf/simulated/floor/tiled/dark, -/area/shuttle/merchant/home) -"aTD" = ( -/obj/effect/floor_decal/corner/brown{ - dir = 9 - }, -/obj/effect/floor_decal/corner/brown{ - dir = 10 - }, -/turf/simulated/floor/tiled, -/area/shuttle/merchant/home) -"aTE" = ( -/obj/effect/floor_decal/corner/brown{ - dir = 10 - }, -/turf/simulated/floor/tiled, -/area/shuttle/merchant/home) -"aTF" = ( -/obj/machinery/light, -/obj/effect/floor_decal/corner/brown{ - dir = 10 - }, -/turf/simulated/floor/tiled, -/area/shuttle/merchant/home) -"aTH" = ( -/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{ - dir = 1; - id_tag = "merchant_ship_vent" - }, -/turf/simulated/floor/plating, -/area/shuttle/merchant/home) -"aTI" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 9 - }, -/turf/simulated/floor/tiled, -/area/merchant_station) -"aTJ" = ( -/obj/structure/disposalpipe/segment, -/obj/effect/floor_decal/industrial/warning{ - dir = 1 - }, -/turf/simulated/floor/tiled, -/area/merchant_station) -"aTK" = ( -/obj/machinery/alarm{ - dir = 8; - pixel_x = 25; - req_access = list("ACCESS_MERCHANT") - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 1 - }, -/turf/simulated/floor/tiled, -/area/merchant_station) -"aTL" = ( -/obj/effect/decal/cleanable/ash, -/obj/machinery/conveyor{ - dir = 1; - id = "merchantbelt1" - }, -/turf/simulated/floor/plating, -/area/merchant_station) -"aTM" = ( -/obj/machinery/door/blast/shutters{ - density = 0; - icon_state = "shutter0"; - id_tag = "merchantshuttle"; - name = "Merchant Window Shutters"; - opacity = 0 - }, -/obj/effect/wallframe_spawn/reinforced/titanium, -/obj/effect/paint/silver, -/turf/simulated/floor/plating, -/area/shuttle/merchant/home) -"aTQ" = ( -/obj/structure/table/reinforced, -/obj/effect/floor_decal/corner/brown{ - dir = 5 - }, -/obj/random/loot, -/turf/simulated/floor/tiled/dark, -/area/shuttle/merchant/home) -"aTR" = ( -/obj/structure/table/reinforced, -/obj/effect/floor_decal/corner/brown{ - dir = 5 - }, -/obj/random/clipboard, -/turf/simulated/floor/tiled/dark, -/area/shuttle/merchant/home) -"aTT" = ( -/obj/machinery/door/window/brigdoor/northleft, -/obj/structure/table/rack, -/turf/simulated/floor/tiled, -/area/shuttle/merchant/home) -"aTU" = ( -/obj/machinery/door/window/brigdoor/northright, -/obj/structure/table/rack, -/turf/simulated/floor/tiled, -/area/shuttle/merchant/home) -"aTX" = ( -/obj/machinery/door/window/brigdoor/northright, -/obj/structure/table/rack, -/obj/machinery/light{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/shuttle/merchant/home) -"aTY" = ( -/obj/machinery/door/airlock/external{ - frequency = 1380; - icon_state = "closed"; - id_tag = "merchant_ship_exterior"; - locked = 1; - name = "Ship Exterior" - }, -/obj/machinery/access_button{ - command = "cycle_exterior"; - frequency = 1380; - master_tag = "merchant_ship_dock"; - pixel_x = -28 - }, -/obj/effect/shuttle_landmark/merchant/start, -/obj/effect/floor_decal/industrial/hatch/yellow, -/turf/simulated/floor/plating, -/area/shuttle/merchant/home) -"aTZ" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled, -/area/merchant_station) -"aUa" = ( -/obj/machinery/light/small{ - dir = 4 - }, -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/merchant_station) -"aUb" = ( -/obj/machinery/light/small{ - dir = 8 - }, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/tiled, -/area/merchant_station) -"aUc" = ( -/obj/structure/table/rack, -/obj/item/stack/material/glass/reinforced{ - amount = 50 - }, -/obj/item/stack/material/glass/reinforced{ - amount = 50 - }, -/obj/item/stack/material/glass/reinforced{ - amount = 50 - }, -/obj/item/stack/material/glass/reinforced{ - amount = 50 - }, -/turf/simulated/floor/tiled, -/area/merchant_station) -"aUd" = ( -/obj/structure/table/rack, -/obj/item/stack/material/plastic{ - amount = 50 - }, -/obj/item/stack/material/plastic{ - amount = 50 - }, -/obj/item/stack/material/plastic{ - amount = 50 - }, -/obj/item/stack/material/plastic{ - amount = 50 - }, -/turf/simulated/floor/tiled, -/area/merchant_station) -"aUe" = ( -/obj/structure/table/rack, -/obj/effect/floor_decal/industrial/warning{ - dir = 4; - icon_state = "warning" - }, -/obj/item/stack/material/steel{ - amount = 50 - }, -/obj/item/stack/material/steel{ - amount = 50 - }, -/obj/item/stack/material/steel{ - amount = 50 - }, -/obj/item/stack/material/steel{ - amount = 50 - }, -/turf/simulated/floor/tiled, -/area/merchant_station) -"aUf" = ( -/obj/machinery/light/small{ - dir = 4; - pixel_y = 8 - }, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/conveyor{ - dir = 1; - id = "merchantbelt1" - }, -/turf/simulated/floor/plating, -/area/merchant_station) -"aUh" = ( -/obj/machinery/door/airlock/external{ - frequency = 1380; - icon_state = "closed"; - id_tag = "merchant_station_exterior"; - locked = 1; - name = "Station Exterior" - }, -/turf/simulated/floor/plating, -/area/merchant_station) -"aUi" = ( -/obj/machinery/firealarm{ - dir = 1; - pixel_y = 24 - }, -/turf/simulated/floor/tiled, -/area/merchant_station) -"aUj" = ( -/obj/machinery/door/firedoor, -/turf/simulated/floor/tiled, -/area/merchant_station) -"aUk" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 4; - icon_state = "warning" - }, -/obj/machinery/conveyor_switch{ - id = "merchantbelt1" - }, -/turf/simulated/floor/tiled, -/area/merchant_station) -"aUl" = ( -/obj/machinery/conveyor{ - dir = 1; - id = "merchantbelt1" - }, -/turf/simulated/floor/plating, -/area/merchant_station) -"aUv" = ( -/obj/structure/shuttle/engine/propulsion/burst/left{ - dir = 4; - name = "propulsion" - }, -/turf/space, -/area/shuttle/merchant/home) -"aUw" = ( -/obj/machinery/embedded_controller/radio/airlock/docking_port{ - frequency = 1380; - id_tag = "merchant_station_dock"; - pixel_x = -28; - req_access = list("ACCESS_MERCHANT"); - tag_airpump = "merchant_station_vent"; - tag_chamber_sensor = "merchant_station_sensor"; - tag_exterior_door = "merchant_station_exterior"; - tag_interior_door = "merchant_station_interior" - }, -/obj/machinery/airlock_sensor{ - frequency = 1380; - id_tag = "merchant_station_sensor"; - pixel_x = -28; - pixel_y = -10 - }, -/obj/machinery/light/small{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plating, -/area/merchant_station) -"aUx" = ( -/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{ - dir = 4; - id_tag = "merchant_station_vent" - }, -/turf/simulated/floor/plating, -/area/merchant_station) -"aUy" = ( -/obj/machinery/door/airlock/external{ - frequency = 1380; - icon_state = "closed"; - id_tag = "merchant_station_interior"; - locked = 1; - name = "Station Exterior" - }, -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/merchant_station) -"aUz" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 10 - }, -/turf/simulated/floor/tiled, -/area/merchant_station) -"aUA" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/merchant_station) -"aUB" = ( -/obj/structure/disposalpipe/segment{ - dir = 4; - icon_state = "pipe-c" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/merchant_station) -"aUC" = ( -/obj/machinery/door/airlock/multi_tile/glass{ - dir = 8; - name = "Warehouse" - }, -/obj/machinery/door/firedoor, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/merchant_station) -"aUD" = ( -/obj/structure/disposalpipe/segment{ - dir = 8; - icon_state = "pipe-c" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/turf/simulated/floor/tiled, -/area/merchant_station) -"aUE" = ( -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/merchant_station) -"aUF" = ( -/obj/effect/decal/cleanable/generic, -/obj/effect/floor_decal/industrial/warning{ - dir = 1 - }, -/turf/simulated/floor/tiled, -/area/merchant_station) -"aUO" = ( -/obj/structure/lattice, -/obj/machinery/light/small, -/turf/space, -/area/merchant_station) -"aUP" = ( -/obj/machinery/fabricator/hacked, -/turf/simulated/floor/tiled, -/area/merchant_station) -"aUQ" = ( -/obj/machinery/constructable_frame/machine_frame, -/obj/machinery/light/small{ - dir = 1 - }, -/obj/machinery/firealarm{ - dir = 1; - pixel_y = 24 - }, -/turf/simulated/floor/tiled, -/area/merchant_station) -"aUR" = ( -/obj/structure/table/steel, -/obj/machinery/cell_charger, -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/obj/structure/cable/blue{ - d2 = 2; - icon_state = "0-2" - }, -/obj/random/powercell, -/obj/item/stock_parts/computer/hard_drive/portable/merchant, -/obj/machinery/power/apc{ - dir = 1; - name = "north bump"; - pixel_y = 24; - req_access = list("ACCESS_MERCHANT") - }, -/turf/simulated/floor/tiled, -/area/merchant_station) -"aUS" = ( -/obj/machinery/suit_storage_unit/standard_unit{ - req_access = list("ACCESS_MERCHANT") - }, -/obj/machinery/atmospherics/unary/vent_pump/on, -/turf/simulated/floor/tiled, -/area/merchant_station) -"aUT" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/hidden, -/turf/simulated/floor/tiled, -/area/merchant_station) -"aUU" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 8 - }, -/turf/simulated/floor/tiled, -/area/merchant_station) -"aUV" = ( -/obj/machinery/alarm{ - dir = 8; - pixel_x = 25; - req_access = list("ACCESS_MERCHANT") - }, -/obj/structure/disposalpipe/trunk{ - dir = 1 - }, -/obj/machinery/disposal, -/turf/simulated/floor/tiled, -/area/merchant_station) -"aUW" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 1 - }, -/turf/simulated/floor/tiled, -/area/merchant_station) -"aUX" = ( -/obj/structure/closet, -/obj/item/clothing/shoes/sandal, -/obj/item/clothing/shoes/sandal, -/obj/item/clothing/under/rank/psych/turtleneck{ - desc = "A turqouise turtleneck and a pair of dark blue slacks."; - name = "turtleneck" - }, -/turf/simulated/floor/tiled, -/area/merchant_station) -"aUY" = ( -/obj/structure/table/rack, -/obj/item/stack/material/plasteel{ - amount = 10 - }, -/obj/item/stack/material/plasteel{ - amount = 10 - }, -/obj/item/stack/material/plasteel{ - amount = 10 - }, -/obj/item/stack/material/plasteel{ - amount = 10 - }, -/turf/simulated/floor/tiled, -/area/merchant_station) -"aUZ" = ( -/obj/structure/table/rack, -/turf/simulated/floor/tiled/airless, -/area/merchant_station) -"aVk" = ( -/obj/structure/cable{ - d2 = 2; - icon_state = "0-2" - }, -/obj/machinery/power/solar, -/obj/effect/floor_decal/solarpanel, -/turf/simulated/floor/airless, -/area/merchant_station) -"aVl" = ( -/obj/structure/table/steel, -/obj/item/storage/toolbox/mechanical, -/turf/simulated/floor/tiled, -/area/merchant_station) -"aVm" = ( -/obj/structure/bed/chair/office/dark{ - dir = 8 - }, -/obj/structure/cable/blue{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/turf/simulated/floor/tiled, -/area/merchant_station) -"aVn" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 8 - }, -/obj/structure/cable/blue{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/turf/simulated/floor/tiled, -/area/merchant_station) -"aVo" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled, -/area/merchant_station) -"aVp" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/door/airlock/maintenance{ - name = "Maintenance" - }, -/obj/machinery/door/firedoor, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled, -/area/merchant_station) -"aVq" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden, -/turf/simulated/floor/tiled, -/area/merchant_station) -"aVr" = ( -/obj/machinery/light/small, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 8 - }, -/turf/simulated/floor/tiled, -/area/merchant_station) -"aVs" = ( -/obj/structure/reagent_dispensers/watertank, -/turf/simulated/floor/tiled, -/area/merchant_station) -"aVt" = ( -/obj/structure/table/rack, -/obj/item/stack/material/wood/fifty, -/obj/item/stack/material/wood/fifty, -/obj/item/stack/material/wood/fifty, -/obj/item/stack/material/wood/fifty, -/turf/simulated/floor/tiled, -/area/merchant_station) -"aVu" = ( -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled, -/area/merchant_station) -"aVv" = ( -/obj/structure/table/rack, -/turf/simulated/floor/tiled, -/area/merchant_station) -"aVw" = ( -/turf/simulated/floor/plating, -/area/merchant_station) -"aVx" = ( -/obj/structure/table/steel, -/obj/machinery/light/small{ - dir = 4; - pixel_y = 8 - }, -/turf/simulated/floor/plating, -/area/merchant_station) -"aVF" = ( -/obj/structure/cable{ - d2 = 4; - icon_state = "0-4" - }, -/obj/machinery/power/solar, -/obj/effect/floor_decal/solarpanel, -/turf/simulated/floor/airless, -/area/merchant_station) -"aVG" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/cable{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/turf/simulated/floor/airless, -/area/merchant_station) -"aVH" = ( -/obj/structure/cable/blue{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/structure/closet/crate, -/obj/machinery/light/small{ - dir = 8 - }, -/obj/item/stack/material/glass{ - amount = 15 - }, -/obj/item/stack/material/plastic{ - amount = 10 - }, -/obj/item/stack/material/steel{ - amount = 10 - }, -/obj/item/device/paint_sprayer, -/turf/simulated/floor/plating, -/area/merchant_station) -"aVI" = ( -/obj/structure/cable/blue{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/reagent_dispensers/fueltank, -/turf/simulated/floor/tiled, -/area/merchant_station) -"aVJ" = ( -/obj/structure/cable/blue{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/vending/engivend{ - req_access = list("ACCESS_MERCHANT") - }, -/turf/simulated/floor/plating, -/area/merchant_station) -"aVK" = ( -/obj/structure/table/steel, -/obj/structure/cable/blue{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/item/storage/box/lights/mixed, -/obj/item/reagent_containers/spray/cleaner, -/turf/simulated/floor/plating, -/area/merchant_station) -"aVL" = ( -/obj/structure/cable/blue{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/turf/simulated/floor/tiled, -/area/merchant_station) -"aVM" = ( -/obj/machinery/atmospherics/pipe/simple/visible/universal, -/turf/simulated/floor/tiled, -/area/merchant_station) -"aVN" = ( -/obj/machinery/atmospherics/pipe/simple/visible/universal, -/obj/machinery/alarm{ - dir = 8; - pixel_x = 25; - req_access = list("ACCESS_MERCHANT") - }, -/turf/simulated/floor/tiled, -/area/merchant_station) -"aVO" = ( -/obj/machinery/light/small{ - dir = 8 - }, -/obj/machinery/portable_atmospherics/canister/air/airlock, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/atmospherics/portables_connector{ - dir = 1 - }, -/turf/simulated/floor/tiled, -/area/merchant_station) -"aVP" = ( -/obj/structure/closet/crate, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled, -/area/merchant_station) -"aVQ" = ( -/obj/structure/table/rack, -/obj/item/stack/material/glass{ - amount = 50 - }, -/obj/item/stack/material/glass{ - amount = 50 - }, -/obj/item/stack/material/glass{ - amount = 50 - }, -/obj/item/stack/material/glass{ - amount = 50 - }, -/turf/simulated/floor/tiled, -/area/merchant_station) -"aVR" = ( -/obj/structure/table/rack, -/obj/item/stack/material/rods{ - amount = 50 - }, -/obj/item/stack/material/rods{ - amount = 50 - }, -/obj/item/stack/material/rods{ - amount = 50 - }, -/obj/item/stack/material/rods{ - amount = 50 - }, -/turf/simulated/floor/plating, -/area/merchant_station) -"aVS" = ( -/obj/structure/closet, -/obj/item/clothing/shoes/laceup, -/obj/item/clothing/under/vox/vox_casual, -/turf/simulated/floor/plating, -/area/merchant_station) -"aWf" = ( -/obj/machinery/atmospherics/unary/vent_pump/high_volume{ - external_pressure_bound = 140; - external_pressure_bound_default = 140; - icon_state = "map_vent_out"; - use_power = 1 - }, -/obj/effect/floor_decal/industrial/warning/full, -/turf/simulated/floor/airless, -/area/merchant_station) -"aWg" = ( -/obj/structure/cable/blue{ - d2 = 4; - icon_state = "0-4" - }, -/obj/machinery/power/smes/buildable{ - RCon_tag = null; - charge = 2.5e+006; - input_attempt = 1; - input_level = 250000; - output_attempt = 1; - output_level = 250000 - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled, -/area/merchant_station) -"aWh" = ( -/obj/structure/cable/blue{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled, -/area/merchant_station) -"aWi" = ( -/obj/random/trash, -/turf/simulated/floor/plating, -/area/merchant_station) -"aWj" = ( -/obj/machinery/atmospherics/pipe/simple/visible/red, -/turf/simulated/floor/tiled, -/area/merchant_station) -"aWk" = ( -/obj/machinery/meter, -/obj/machinery/atmospherics/pipe/simple/visible/cyan, -/turf/simulated/floor/plating, -/area/merchant_station) -"aWl" = ( -/obj/machinery/portable_atmospherics/canister/air/airlock, -/obj/effect/decal/cleanable/cobweb2, -/turf/simulated/floor/plating, -/area/merchant_station) -"aWm" = ( -/obj/structure/closet/crate/freezer, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled, -/area/merchant_station) -"aWn" = ( -/obj/structure/table/steel, -/obj/machinery/light/small, -/turf/simulated/floor/plating, -/area/merchant_station) -"aWo" = ( -/obj/structure/closet/crate, -/turf/simulated/floor/plating, -/area/merchant_station) -"aWp" = ( -/obj/structure/table/rack, -/obj/random/medical, -/turf/simulated/floor/tiled, -/area/merchant_station) -"aWy" = ( -/obj/structure/cable{ - d2 = 4; - icon_state = "0-4" - }, -/obj/machinery/power/tracker, -/turf/simulated/floor/airless, -/area/merchant_station) -"aWz" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/airless, -/area/merchant_station) -"aWA" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/cable{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/structure/cable{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/turf/simulated/floor/airless, -/area/merchant_station) -"aWB" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/visible{ - dir = 5 - }, -/turf/simulated/floor/airless, -/area/merchant_station) -"aWC" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/visible{ - dir = 4 - }, -/obj/machinery/light/small{ - dir = 4; - pixel_y = 8 - }, -/turf/simulated/floor/airless, -/area/merchant_station) -"aWD" = ( -/obj/effect/wallframe_spawn/reinforced, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/visible{ - dir = 4 - }, -/obj/machinery/door/firedoor, -/turf/simulated/floor/plating, -/area/merchant_station) -"aWE" = ( -/obj/machinery/power/terminal{ - dir = 1 - }, -/obj/structure/cable{ - d2 = 8; - icon_state = "0-8" - }, -/obj/machinery/atmospherics/pipe/simple/visible{ - dir = 4 - }, -/obj/structure/cable{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/structure/bed/chair/comfy/brown{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled, -/area/merchant_station) -"aWF" = ( -/obj/machinery/atmospherics/pipe/simple/visible{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled, -/area/merchant_station) -"aWG" = ( -/obj/machinery/atmospherics/pipe/manifold/visible{ - dir = 1 - }, -/obj/machinery/meter, -/turf/simulated/floor/tiled, -/area/merchant_station) -"aWH" = ( -/obj/machinery/atmospherics/omni/filter{ - active_power_usage = 2500; - tag_east = 1; - tag_south = 4; - tag_west = 2 - }, -/turf/simulated/floor/plating, -/area/merchant_station) -"aWI" = ( -/obj/machinery/atmospherics/pipe/simple/visible{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/merchant_station) -"aWJ" = ( -/obj/machinery/atmospherics/omni/filter{ - tag_east = 1; - tag_south = 3; - tag_west = 2 - }, -/turf/simulated/floor/tiled, -/area/merchant_station) -"aWK" = ( -/obj/machinery/meter, -/obj/machinery/atmospherics/pipe/simple/visible/red{ - dir = 9 - }, -/turf/simulated/floor/plating, -/area/merchant_station) -"aWL" = ( -/obj/machinery/atmospherics/binary/passive_gate/on{ - dir = 1 - }, -/turf/simulated/floor/plating, -/area/merchant_station) -"aWM" = ( -/obj/machinery/portable_atmospherics/canister/air/airlock, -/obj/machinery/light/small{ - dir = 4; - pixel_y = 8 - }, -/obj/item/tank/oxygen_emergency_double, -/turf/simulated/floor/plating, -/area/merchant_station) -"aWV" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/cable{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/turf/simulated/floor/airless, -/area/merchant_station) -"aWW" = ( -/obj/machinery/power/solar_control/autostart, -/obj/structure/cable, -/turf/simulated/floor/tiled, -/area/merchant_station) -"aWX" = ( -/obj/machinery/light/small, -/turf/simulated/floor/tiled, -/area/merchant_station) -"aWY" = ( -/obj/machinery/atmospherics/portables_connector{ - dir = 1 - }, -/obj/machinery/portable_atmospherics/powered/scrubber, -/turf/simulated/floor/plating, -/area/merchant_station) -"aWZ" = ( -/obj/machinery/atmospherics/pipe/simple/visible{ - dir = 5 - }, -/turf/simulated/floor/plating, -/area/merchant_station) -"aXa" = ( -/obj/machinery/atmospherics/omni/mixer{ - active_power_usage = 2500; - tag_east = 1; - tag_east_con = 0.21; - tag_south = 2; - tag_west = 1; - tag_west_con = 0.79 - }, -/turf/simulated/floor/plating, -/area/merchant_station) -"aXb" = ( -/obj/machinery/atmospherics/pipe/simple/visible{ - dir = 9 - }, -/turf/simulated/floor/plating, -/area/merchant_station) -"aXc" = ( -/obj/effect/decal/cleanable/blood/oil, -/turf/simulated/floor/plating, -/area/merchant_station) -"aXd" = ( -/obj/machinery/atmospherics/pipe/manifold/visible/cyan{ - dir = 8 - }, -/obj/machinery/meter, -/turf/simulated/floor/plating, -/area/merchant_station) -"aXe" = ( -/obj/machinery/atmospherics/unary/tank/air{ - dir = 8 - }, -/turf/simulated/floor/plating, -/area/merchant_station) -"aXq" = ( -/obj/machinery/atmospherics/portables_connector{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/merchant_station) -"aXr" = ( -/obj/machinery/atmospherics/binary/pump{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/merchant_station) -"aXs" = ( -/obj/machinery/atmospherics/pipe/manifold/visible/cyan, -/turf/simulated/floor/plating, -/area/merchant_station) -"aXt" = ( -/obj/machinery/atmospherics/pipe/manifold/visible/cyan{ - dir = 1 - }, -/turf/simulated/floor/tiled, -/area/merchant_station) -"aXu" = ( -/obj/machinery/atmospherics/pipe/manifold/visible/cyan{ - dir = 1 - }, -/turf/simulated/floor/plating, -/area/merchant_station) -"aXv" = ( -/obj/machinery/atmospherics/pipe/manifold4w/visible/cyan, -/turf/simulated/floor/plating, -/area/merchant_station) -"aXH" = ( -/obj/machinery/atmospherics/portables_connector{ - dir = 4 - }, -/obj/machinery/portable_atmospherics/powered/pump/filled, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plating, -/area/merchant_station) -"aXI" = ( -/obj/machinery/atmospherics/binary/pump{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plating, -/area/merchant_station) -"aXJ" = ( -/obj/machinery/atmospherics/pipe/simple/visible/cyan{ - dir = 9 - }, -/obj/machinery/portable_atmospherics/canister/nitrogen, -/obj/item/tank/nitrogen, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plating, -/area/merchant_station) -"aXK" = ( -/obj/machinery/atmospherics/unary/tank/air{ - dir = 1; - start_pressure = 740.5 - }, -/obj/machinery/light/small, -/turf/simulated/floor/plating, -/area/merchant_station) -"aXL" = ( -/obj/machinery/atmospherics/unary/tank/air{ - dir = 1; - start_pressure = 740.5 - }, -/turf/simulated/floor/plating, -/area/merchant_station) -"aYf" = ( -/obj/structure/cable, -/obj/machinery/power/solar, -/obj/effect/floor_decal/solarpanel, -/turf/simulated/floor/airless, -/area/merchant_station) -"aZb" = ( -/obj/machinery/computer/modular/preset/civilian{ - dir = 4; - icon_state = "console" - }, -/turf/unsimulated/floor{ - icon_state = "steel" - }, -/area/centcom/control) -"baD" = ( -/obj/item/device/radio/intercom/syndicate{ - dir = 8; - pixel_x = 22 - }, -/turf/unsimulated/floor{ - icon_state = "white" - }, -/area/syndicate_elite_squad) -"bcS" = ( -/obj/structure/bed/chair/wood{ - dir = 8; - holographic = 1 - }, -/obj/effect/floor_decal/spline/fancy/wood{ - dir = 5 - }, -/turf/simulated/floor/holofloor/carpet, -/area/holodeck/source_cafe) -"bgb" = ( -/obj/structure/closet{ - name = "Clothing Storage" - }, -/obj/item/clothing/head/bandana{ - pixel_y = -10 - }, -/obj/item/clothing/glasses/sunglasses, -/turf/unsimulated/beach/sand{ - icon_state = "desert1" - }, -/area/centcom/holding) -"bhb" = ( -/obj/structure/closet{ - name = "Clothing Storage" - }, -/obj/item/clothing/glasses/sunglasses, -/turf/unsimulated/beach/sand{ - icon_state = "desert1" - }, -/area/centcom/holding) -"bib" = ( -/obj/structure/closet/athletic_mixed, -/turf/unsimulated/beach/sand{ - icon_state = "desert1" - }, -/area/centcom/holding) -"bjb" = ( -/turf/unsimulated/beach/sand{ - icon_state = "desert_dug" - }, -/area/centcom/holding) -"bkb" = ( -/obj/item/inflatable_duck, -/turf/unsimulated/beach/sand{ - icon_state = "desert2" - }, -/area/centcom/holding) -"blb" = ( -/obj/effect/overlay/palmtree_r, -/turf/unsimulated/beach/sand{ - icon_state = "desert2" - }, -/area/centcom/holding) -"bmb" = ( -/mob/living/simple_animal/crab, -/turf/unsimulated/beach/sand{ - icon_state = "desert1" - }, -/area/centcom/holding) -"bnb" = ( -/obj/item/beach_ball, -/turf/unsimulated/beach/sand{ - icon_state = "desert2" - }, -/area/centcom/holding) -"bnc" = ( -/obj/effect/floor_decal/spline/fancy/wood/corner, -/turf/simulated/floor/holofloor/concrete, -/area/holodeck/source_plaza) -"bob" = ( -/obj/machinery/camera/network/crescent{ - c_tag = "Crescent Bar West"; - dir = 4 - }, -/turf/unsimulated/beach/sand{ - icon_state = "desert1" - }, -/area/centcom/holding) -"bpb" = ( -/obj/item/inflatable_duck, -/turf/unsimulated/beach/sand{ - icon_state = "desert1" - }, -/area/centcom/holding) -"bqb" = ( -/obj/effect/overlay/palmtree_l, -/turf/unsimulated/beach/sand{ - icon_state = "desert2" - }, -/area/centcom/holding) -"brb" = ( -/obj/machinery/hologram/holopad, -/turf/unsimulated/beach/sand{ - icon_state = "desert1" - }, -/area/centcom/holding) -"bsb" = ( -/obj/structure/table/rack, -/obj/random/action_figure, -/obj/effect/floor_decal/industrial/outline/grey, -/obj/item/clothing/accessory/storage/holster, -/turf/simulated/floor/tiled/dark, -/area/merchant_station) -"btb" = ( -/obj/structure/table/reinforced, -/obj/effect/floor_decal/corner/brown{ - dir = 5 - }, -/obj/machinery/recharger, -/obj/item/device/eftpos, -/turf/simulated/floor/tiled/dark, -/area/shuttle/merchant/home) -"btO" = ( -/obj/structure/bed/chair/wood{ - holographic = 1 - }, -/obj/effect/floor_decal/spline/fancy/wood{ - dir = 1 - }, -/turf/simulated/floor/holofloor/concrete, -/area/holodeck/source_plaza) -"bub" = ( -/obj/machinery/computer/modular/preset/security{ - dir = 8; - icon_state = "console" - }, -/turf/unsimulated/floor{ - icon = 'icons/turf/shuttle.dmi'; - icon_state = "floor4" - }, -/area/centcom/evac) -"bvb" = ( -/obj/machinery/computer/modular/preset/medical{ - dir = 8; - icon_state = "console" - }, -/turf/unsimulated/floor{ - icon_state = "steel" - }, -/area/centcom/control) -"bwb" = ( -/obj/machinery/computer/modular/preset/security, -/obj/effect/floor_decal/corner/red{ - dir = 9 - }, -/turf/unsimulated/floor{ - icon_state = "steel" - }, -/area/centcom/holding) -"bxb" = ( -/obj/machinery/camera/network/crescent{ - c_tag = "Crescent Arrivals North"; - dir = 8 - }, -/obj/machinery/computer/modular/preset/security{ - dir = 8; - icon_state = "console" - }, -/turf/unsimulated/floor{ - icon_state = "steel" - }, -/area/centcom/holding) -"byb" = ( -/obj/structure/table/reinforced, -/obj/structure/window/reinforced/crescent{ - dir = 8 - }, -/obj/structure/window/reinforced/crescent, -/obj/machinery/computer/modular/preset/cardslot/command{ - dir = 1; - icon_state = "console" - }, -/turf/unsimulated/floor{ - icon_state = "steel" - }, -/area/centcom/holding) -"bBb" = ( -/obj/machinery/computer/modular/preset/library{ - dir = 8; - icon_state = "console" - }, -/turf/simulated/floor/shuttle/red, -/area/shuttle/administration/centcom) -"bCb" = ( -/obj/item/paper_bin, -/turf/unsimulated/floor{ - icon_state = "plating"; - name = "plating" - }, -/area/acting/backstage) -"bDb" = ( -/obj/machinery/bookbinder, -/turf/unsimulated/floor{ - icon_state = "plating"; - name = "plating" - }, -/area/acting/backstage) -"bEb" = ( -/obj/machinery/computer/modular/preset/library, -/turf/unsimulated/floor{ - icon_state = "plating"; - name = "plating" - }, -/area/acting/backstage) -"bFb" = ( -/obj/machinery/libraryscanner, -/turf/unsimulated/floor{ - icon_state = "plating"; - name = "plating" - }, -/area/acting/backstage) -"bGb" = ( -/obj/structure/table/holotable, -/obj/item/toy/ringbell, -/turf/simulated/floor/holofloor/tiled/dark, -/area/holodeck/source_boxingcourt) -"bHb" = ( -/obj/structure/table/holotable, -/obj/item/device/megaphone, -/turf/simulated/floor/holofloor/tiled/dark, -/area/holodeck/source_boxingcourt) -"bKU" = ( -/obj/structure/flora/ausbushes/lavendergrass, -/turf/simulated/floor/holofloor/grass, -/area/holodeck/source_plaza) -"bMb" = ( -/obj/item/storage/mirror{ - pixel_y = 28 - }, -/turf/unsimulated/floor{ - dir = 8; - icon_state = "wood" - }, -/area/centcom/living) -"bOb" = ( -/obj/structure/hygiene/sink{ - dir = 1; - pixel_y = 16 - }, -/obj/item/storage/mirror{ - pixel_y = 32 - }, -/turf/simulated/floor/tiled/freezer, -/area/merchant_station) -"bPb" = ( -/obj/structure/hygiene/sink{ - dir = 1; - pixel_y = 16 - }, -/obj/item/storage/mirror{ - pixel_y = 32 - }, -/obj/structure/disposalpipe/segment, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/freezer, -/area/merchant_station) -"bRY" = ( -/obj/effect/floor_decal/beach/corner{ - dir = 8 - }, -/turf/simulated/floor/holofloor/concrete, -/area/holodeck/source_volleyball) -"cay" = ( -/obj/structure/bed/chair/wood{ - dir = 8; - holographic = 1 - }, -/turf/simulated/floor/holofloor/concrete, -/area/holodeck/source_plaza) -"cjX" = ( -/obj/effect/landmark{ - name = "Syndicate-Commando" - }, -/turf/unsimulated/floor{ - icon_state = "dark" - }, -/area/syndicate_elite_squad) -"cqu" = ( -/obj/structure/holostool, -/obj/effect/floor_decal/beach{ - dir = 4 - }, -/turf/simulated/floor/holofloor/concrete, -/area/holodeck/source_volleyball) -"czt" = ( -/obj/effect/wallframe_spawn/reinforced, -/obj/machinery/door/firedoor, -/turf/simulated/floor/plating, -/area/merchant_station) -"cCV" = ( -/obj/machinery/hologram/holopad/longrange, -/turf/simulated/floor/carpet/blue, -/area/shuttle/merchant/home) -"cMe" = ( -/obj/effect/floor_decal/spline/fancy/wood{ - dir = 1 - }, -/turf/simulated/floor/holofloor/concrete, -/area/holodeck/source_plaza) -"cMP" = ( -/obj/structure/flora/ausbushes/genericbush, -/obj/effect/floor_decal/spline/plain/grey{ - dir = 9 - }, -/turf/simulated/floor/holofloor/grass, -/area/holodeck/source_cafe) -"cMQ" = ( -/obj/structure/bed/chair/wood{ - dir = 1; - holographic = 1 - }, -/obj/effect/floor_decal/spline/fancy/wood{ - dir = 6 - }, -/turf/simulated/floor/holofloor/carpet, -/area/holodeck/source_cafe) -"djm" = ( -/obj/item/beach_ball/holovolleyball, -/turf/simulated/floor/holofloor/beach/sand, -/area/holodeck/source_volleyball) -"dnO" = ( -/obj/effect/floor_decal/spline/fancy/wood{ - dir = 6 - }, -/turf/simulated/floor/holofloor/concrete, -/area/holodeck/source_plaza) -"dzK" = ( -/obj/structure/flora/ausbushes/lavendergrass, -/obj/structure/flora/ausbushes/ywflowers, -/obj/structure/flora/ausbushes/ppflowers, -/obj/structure/flora/ausbushes/brflowers, -/obj/effect/floor_decal/spline/fancy/wood{ - dir = 9 - }, -/turf/simulated/floor/holofloor/grass, -/area/holodeck/source_plaza) -"dBi" = ( -/obj/effect/floor_decal/spline/fancy/wood{ - dir = 9 - }, -/turf/simulated/floor/holofloor/concrete, -/area/holodeck/source_plaza) -"dCA" = ( -/obj/structure/table/holo_woodentable, -/turf/simulated/floor/holofloor/wood, -/area/holodeck/source_cafe) -"dIU" = ( -/turf/simulated/floor/holofloor/tiled/stone, -/area/holodeck/source_temple) -"dJV" = ( -/obj/effect/floor_decal/beach/corner, -/turf/simulated/floor/holofloor/concrete, -/area/holodeck/source_volleyball) -"dMH" = ( -/obj/effect/floor_decal/spline/plain{ - dir = 10 - }, -/turf/simulated/floor/holofloor/beach/sand, -/area/holodeck/source_volleyball) -"dNG" = ( -/obj/effect/floor_decal/stoneborder{ - dir = 1 - }, -/turf/simulated/floor/holofloor/beach/water, -/area/holodeck/source_temple) -"dTZ" = ( -/obj/structure/table/holo_woodentable, -/obj/item/reagent_containers/food/drinks/glass2/coffeecup{ - holographic = 1 - }, -/turf/simulated/floor/holofloor/wood, -/area/holodeck/source_cafe) -"dZC" = ( -/obj/effect/floor_decal/spline/plain{ - dir = 4 - }, -/obj/structure/holonet/end{ - dir = 8 - }, -/turf/simulated/floor/holofloor/beach/sand, -/area/holodeck/source_volleyball) -"efq" = ( -/turf/simulated/floor/holofloor/concrete, -/area/holodeck/source_cafe) -"etB" = ( -/obj/machinery/button/blast_door{ - id_tag = "syndicate_elite_mech_room"; - name = "Mech Access"; - pixel_x = 32 - }, -/turf/unsimulated/floor{ - icon_state = "dark" - }, -/area/syndicate_elite_squad) -"euY" = ( -/turf/simulated/wall/wood, -/area/holodeck/source_cafe) -"ezo" = ( -/obj/structure/table/holo_woodentable, -/obj/item/device/synthesized_instrument/violin{ - holographic = 1 - }, -/turf/simulated/floor/holofloor/wood, -/area/holodeck/source_cafe) -"eGq" = ( -/obj/machinery/vending/engineering, -/turf/unsimulated/floor/plating, -/area/centcom/evac) -"eRk" = ( -/obj/structure/table/rack/holorack, -/turf/simulated/floor/holofloor/wood{ - icon_state = "wood_broken1" - }, -/area/holodeck/source_temple) -"fcv" = ( -/obj/structure/holostool, -/obj/effect/floor_decal/beach{ - dir = 8 - }, -/turf/simulated/floor/holofloor/concrete, -/area/holodeck/source_volleyball) -"ffh" = ( -/turf/unsimulated/floor/plating, -/area/centcom/evac) -"fpW" = ( -/obj/effect/floor_decal/spline/fancy/wood/corner{ - dir = 8 - }, -/turf/simulated/floor/holofloor/concrete, -/area/holodeck/source_plaza) -"fxB" = ( -/obj/structure/bed/chair/wood{ - dir = 4; - holographic = 1 - }, -/obj/effect/floor_decal/spline/fancy/wood{ - dir = 9 - }, -/turf/simulated/floor/holofloor/carpet, -/area/holodeck/source_cafe) -"fJf" = ( -/obj/effect/floor_decal/spline/fancy/wood{ - dir = 8 - }, -/turf/simulated/floor/holofloor/concrete, -/area/holodeck/source_plaza) -"glo" = ( -/turf/simulated/floor/holofloor/concrete, -/area/holodeck/source_volleyball) -"gnX" = ( -/turf/simulated/floor/holofloor/beach/water, -/area/holodeck/source_temple) -"gse" = ( -/obj/structure/table/holo_woodentable, -/obj/effect/floor_decal/spline/fancy/wood{ - dir = 4 - }, -/obj/item/flame/candle{ - holographic = 1 - }, -/turf/simulated/floor/holofloor/carpet, -/area/holodeck/source_cafe) -"gtn" = ( -/obj/structure/curtain, -/turf/simulated/floor/holofloor/wood{ - icon_state = "wood_broken4" - }, -/area/holodeck/source_temple) -"hzB" = ( -/obj/structure/flora/ausbushes/lavendergrass, -/obj/structure/flora/ausbushes/ywflowers, -/obj/structure/flora/ausbushes/ppflowers, -/obj/structure/flora/ausbushes/brflowers, -/obj/effect/floor_decal/spline/fancy/wood{ - dir = 6 - }, -/turf/simulated/floor/holofloor/grass, -/area/holodeck/source_plaza) -"hJx" = ( -/turf/simulated/wall/r_titanium, -/area/centcom/evac) -"icO" = ( -/obj/structure/bed/chair/wood{ - dir = 1; - holographic = 1 - }, -/obj/effect/floor_decal/spline/fancy/wood, -/turf/simulated/floor/holofloor/concrete, -/area/holodeck/source_plaza) -"ikd" = ( -/obj/effect/wallframe_spawn/reinforced/titanium, -/obj/effect/paint/silver, -/turf/simulated/floor/plating, -/area/shuttle/merchant/home) -"iqj" = ( -/obj/machinery/door/airlock/external, -/turf/unsimulated/floor{ - icon_state = "dark" - }, -/area/syndicate_elite_squad) -"izl" = ( -/obj/effect/paint/black, -/turf/simulated/wall/r_titanium, -/area/shuttle/administration/centcom) -"iBC" = ( -/obj/effect/floor_decal/spline/fancy/wood{ - dir = 4 - }, -/turf/simulated/floor/holofloor/concrete, -/area/holodeck/source_plaza) -"iIc" = ( -/obj/structure/flora/ausbushes/lavendergrass, -/obj/structure/flora/ausbushes/ywflowers, -/obj/structure/flora/ausbushes/ppflowers, -/obj/structure/flora/ausbushes/brflowers, -/obj/effect/floor_decal/spline/fancy/wood{ - dir = 10 - }, -/turf/simulated/floor/holofloor/grass, -/area/holodeck/source_plaza) -"iJF" = ( -/obj/structure/holostool, -/turf/simulated/floor/holofloor/wood{ - icon_state = "wood_broken6" - }, -/area/holodeck/source_temple) -"iSJ" = ( -/obj/effect/wallframe_spawn/reinforced/titanium, -/turf/simulated/floor/plating, -/area/shuttle/transport1/centcom) -"jed" = ( -/obj/effect/floor_decal/beach{ - dir = 1 - }, -/turf/simulated/floor/holofloor/concrete, -/area/holodeck/source_volleyball) -"jgg" = ( -/obj/effect/floor_decal/spline/plain{ - dir = 1 - }, -/turf/simulated/floor/holofloor/beach/sand, -/area/holodeck/source_volleyball) -"jhl" = ( -/obj/structure/table/holo_woodentable, -/obj/effect/floor_decal/spline/fancy/wood{ - dir = 1 - }, -/obj/item/flame/candle{ - holographic = 1 - }, -/turf/simulated/floor/holofloor/carpet, -/area/holodeck/source_cafe) -"jlA" = ( -/obj/machinery/light/spot, -/turf/simulated/floor/plating, -/area/supply/dock) -"joZ" = ( -/obj/structure/fountain/mundane{ - alpha = 204; - pixel_x = 0 - }, -/turf/simulated/floor/holofloor/beach/water, -/area/holodeck/source_temple) -"jps" = ( -/turf/simulated/floor/holofloor/beach/sand{ - icon_state = "desert2" - }, -/area/holodeck/source_volleyball) -"jvm" = ( -/obj/effect/floor_decal/spline/plain, -/turf/simulated/floor/holofloor/beach/sand{ - icon_state = "desert1" - }, -/area/holodeck/source_volleyball) -"jxq" = ( -/obj/structure/flora/ausbushes/lavendergrass, -/obj/structure/flora/ausbushes/ywflowers, -/obj/structure/flora/ausbushes/ppflowers, -/obj/structure/flora/ausbushes/brflowers, -/obj/effect/floor_decal/spline/fancy/wood{ - dir = 5 - }, -/turf/simulated/floor/holofloor/grass, -/area/holodeck/source_plaza) -"jHQ" = ( -/obj/structure/flora/ausbushes/ppflowers, -/obj/effect/floor_decal/spline/plain/grey{ - dir = 8 - }, -/turf/simulated/floor/holofloor/grass, -/area/holodeck/source_cafe) -"jSi" = ( -/obj/structure/table/holo_woodentable, -/turf/simulated/floor/holofloor/tiled/stone, -/area/holodeck/source_temple) -"jXw" = ( -/obj/structure/bed/chair/wood{ - dir = 4 - }, -/turf/simulated/floor/holofloor/concrete, -/area/holodeck/source_plaza) -"kce" = ( -/turf/simulated/floor/holofloor/beach/sand{ - icon_state = "desert4" - }, -/area/holodeck/source_volleyball) -"kfk" = ( -/obj/effect/floor_decal/spline/plain{ - dir = 5 - }, -/turf/simulated/floor/holofloor/beach/sand{ - icon_state = "desert4" - }, -/area/holodeck/source_volleyball) -"kjW" = ( -/obj/structure/bed/chair/wood{ - dir = 1; - holographic = 1 - }, -/obj/effect/floor_decal/spline/fancy/wood{ - dir = 10 - }, -/turf/simulated/floor/holofloor/carpet, -/area/holodeck/source_cafe) -"kBT" = ( -/obj/effect/floor_decal/spline/plain{ - dir = 4 - }, -/turf/simulated/floor/holofloor/beach/sand, -/area/holodeck/source_volleyball) -"kEf" = ( -/turf/unsimulated/floor{ - icon_state = "dark" - }, -/area/syndicate_elite_squad) -"kSV" = ( -/obj/machinery/portable_atmospherics/powered/pump, -/turf/unsimulated/floor/plating, -/area/centcom/evac) -"ljS" = ( -/obj/structure/flora/ausbushes/lavendergrass, -/obj/structure/flora/ausbushes/ywflowers, -/turf/simulated/floor/holofloor/grass, -/area/holodeck/source_plaza) -"lwD" = ( -/obj/structure/bed/chair/wood{ - dir = 1; - holographic = 1 - }, -/turf/simulated/floor/holofloor/tiled/stone, -/area/holodeck/source_temple) -"lGk" = ( -/obj/effect/wallframe_spawn/reinforced/titanium, -/turf/unsimulated/floor/plating, -/area/centcom/evac) -"lIX" = ( -/obj/structure/curtain{ - color = "#cd6889" - }, -/turf/simulated/floor/holofloor/wood{ - icon_state = "wood_broken3" - }, -/area/holodeck/source_temple) -"lLj" = ( -/obj/machinery/recharge_station, -/turf/simulated/floor/carpet, -/area/merchant_station) -"lQU" = ( -/obj/machinery/door/airlock/centcom, -/turf/simulated/floor/shuttle/blue, -/area/shuttle/transport1/centcom) -"lRq" = ( -/obj/structure/bed/chair/wood{ - holographic = 1 - }, -/obj/effect/floor_decal/spline/fancy/wood{ - dir = 4 - }, -/turf/simulated/floor/holofloor/carpet, -/area/holodeck/source_cafe) -"lSD" = ( -/obj/structure/bed/chair/wood{ - holographic = 1 - }, -/obj/effect/floor_decal/spline/fancy/wood{ - dir = 1 - }, -/turf/simulated/floor/holofloor/carpet, -/area/holodeck/source_cafe) -"lWf" = ( -/obj/effect/floor_decal/spline/fancy/wood, -/turf/simulated/floor/holofloor/concrete, -/area/holodeck/source_plaza) -"mjR" = ( -/turf/simulated/floor/holofloor/concrete, -/area/holodeck/source_plaza) -"mlL" = ( -/obj/structure/table/holo_woodentable, -/obj/item/flame/candle{ - holographic = 1 - }, -/turf/simulated/floor/holofloor/carpet, -/area/holodeck/source_cafe) -"mmW" = ( -/obj/structure/curtain{ - color = "#68ccab" - }, -/turf/simulated/floor/holofloor/wood{ - icon_state = "wood_broken6" - }, -/area/holodeck/source_temple) -"moq" = ( -/obj/effect/floor_decal/spline/fancy/wood/corner{ - dir = 4 - }, -/turf/simulated/floor/holofloor/concrete, -/area/holodeck/source_plaza) -"mrn" = ( -/obj/effect/floor_decal/spline/fancy/wood{ - dir = 10 - }, -/turf/simulated/floor/holofloor/concrete, -/area/holodeck/source_plaza) -"myy" = ( -/obj/item/device/radio/intercom/syndicate{ - pixel_y = 22 - }, -/turf/unsimulated/floor{ - icon_state = "dark" - }, -/area/syndicate_elite_squad) -"mRm" = ( -/turf/simulated/floor/holofloor/beach/sand{ - icon_state = "desert1" - }, -/area/holodeck/source_volleyball) -"mSZ" = ( -/obj/structure/bed/chair/wood{ - holographic = 1 - }, -/obj/effect/floor_decal/spline/fancy/wood{ - dir = 9 - }, -/turf/simulated/floor/holofloor/carpet, -/area/holodeck/source_cafe) -"mTy" = ( -/obj/structure/flora/ausbushes/genericbush, -/obj/effect/floor_decal/spline/plain/grey{ - dir = 10 - }, -/turf/simulated/floor/holofloor/grass, -/area/holodeck/source_cafe) -"mXz" = ( -/obj/machinery/button/blast_door{ - dir = 1; - id_tag = "thunderdome"; - name = "Thunderdome Blast Door Control" - }, -/turf/unsimulated/floor{ - icon_state = "lino" - }, -/area/tdome/tdomeadmin) -"niJ" = ( -/obj/structure/bed/chair/wood{ - dir = 4 - }, -/obj/effect/floor_decal/spline/fancy/wood{ - dir = 8 - }, -/turf/simulated/floor/holofloor/concrete, -/area/holodeck/source_plaza) -"ntZ" = ( -/obj/effect/floor_decal/spline/fancy/wood{ - dir = 8 - }, -/obj/structure/table/holo_woodentable, -/turf/simulated/floor/holofloor/carpet, -/area/holodeck/source_cafe) -"nJl" = ( -/obj/structure/bed/chair/wood{ - dir = 8; - holographic = 1 - }, -/obj/effect/floor_decal/spline/fancy/wood{ - dir = 4 - }, -/turf/simulated/floor/holofloor/concrete, -/area/holodeck/source_plaza) -"nQJ" = ( -/obj/machinery/door/airlock/glass/security{ - name = "Airlock" - }, -/obj/machinery/door/blast/regular{ - id_tag = "syndicate_elite_mech_room"; - name = "Mech Room Door" - }, -/turf/unsimulated/floor{ - icon_state = "dark" - }, -/area/syndicate_elite_squad) -"occ" = ( -/obj/effect/floor_decal/spline/plain{ - dir = 6 - }, -/turf/simulated/floor/holofloor/beach/sand, -/area/holodeck/source_volleyball) -"olJ" = ( -/obj/effect/floor_decal/beach{ - dir = 4 - }, -/obj/structure/holostool, -/turf/simulated/floor/holofloor/concrete, -/area/holodeck/source_volleyball) -"oql" = ( -/obj/structure/bed/chair/wood{ - dir = 1; - holographic = 1 - }, -/obj/effect/floor_decal/spline/fancy/wood{ - dir = 4 - }, -/turf/simulated/floor/holofloor/carpet, -/area/holodeck/source_cafe) -"oFc" = ( -/obj/effect/floor_decal/spline/fancy/wood{ - dir = 1 - }, -/turf/simulated/floor/holofloor/lino, -/area/holodeck/source_meetinghall) -"pgJ" = ( -/obj/structure/holostool, -/turf/simulated/floor/holofloor/tiled/stone, -/area/holodeck/source_temple) -"piR" = ( -/obj/structure/flora/pottedplant{ - icon_state = "plant-22" - }, -/turf/simulated/floor/holofloor/wood, -/area/holodeck/source_cafe) -"pqa" = ( -/turf/simulated/wall/r_titanium, -/area/shuttle/transport1/centcom) -"psv" = ( -/obj/structure/closet/walllocker/emerglocker/north, -/turf/simulated/floor/plating, -/area/shuttle/merchant/home) -"pAh" = ( -/obj/effect/floor_decal/spline/fancy/wood{ - dir = 4 - }, -/obj/structure/table/holo_woodentable, -/turf/simulated/floor/holofloor/carpet, -/area/holodeck/source_cafe) -"pEp" = ( -/obj/machinery/door/firedoor, -/obj/effect/wallframe_spawn/reinforced, -/turf/simulated/floor/plating, -/area/merchant_station) -"pET" = ( -/obj/machinery/portable_atmospherics/canister/oxygen, -/turf/unsimulated/floor/plating, -/area/centcom/evac) -"pUt" = ( -/obj/effect/floor_decal/stoneborder, -/turf/simulated/floor/holofloor/beach/water, -/area/holodeck/source_temple) -"pWv" = ( -/obj/structure/table/holo_woodentable, -/obj/item/reagent_containers/glass/rag{ - holographic = 1 - }, -/turf/simulated/floor/holofloor/wood, -/area/holodeck/source_cafe) -"qir" = ( -/obj/effect/floor_decal/stoneborder/corner, -/turf/simulated/floor/holofloor/beach/water, -/area/holodeck/source_temple) -"qoH" = ( -/obj/effect/floor_decal/spline/plain{ - dir = 8 - }, -/turf/simulated/floor/holofloor/beach/sand, -/area/holodeck/source_volleyball) -"quq" = ( -/obj/structure/table/holo_woodentable, -/obj/item/reagent_containers/food/drinks/teapot{ - holographic = 1 - }, -/turf/simulated/floor/holofloor/wood, -/area/holodeck/source_cafe) -"qIk" = ( -/obj/machinery/door/unpowered/simple/sandstone, -/turf/simulated/floor/holofloor/tiled/stone, -/area/holodeck/source_temple) -"qMl" = ( -/obj/effect/floor_decal/stoneborder/corner{ - dir = 8 - }, -/turf/simulated/floor/holofloor/beach/water, -/area/holodeck/source_temple) -"qRm" = ( -/turf/simulated/floor/holofloor/beach/sand{ - icon_state = "desert3" - }, -/area/holodeck/source_volleyball) -"qTC" = ( -/obj/structure/decoy{ - icon_state = "ai-malf"; - name = "GLaDOS" - }, -/turf/unsimulated/floor{ - icon_state = "white" - }, -/area/syndicate_elite_squad) -"qZF" = ( -/obj/structure/holonet, -/turf/simulated/floor/holofloor/beach/sand, -/area/holodeck/source_volleyball) -"reF" = ( -/obj/structure/bed/chair/wood{ - dir = 1; - holographic = 1 - }, -/obj/effect/floor_decal/spline/fancy/wood, -/turf/simulated/floor/holofloor/carpet, -/area/holodeck/source_cafe) -"rms" = ( -/obj/effect/floor_decal/spline/plain{ - dir = 9 - }, -/turf/simulated/floor/holofloor/beach/sand{ - icon_state = "desert2" - }, -/area/holodeck/source_volleyball) -"rpk" = ( -/turf/simulated/wall/r_titanium, -/area/syndicate_elite_squad) -"rqJ" = ( -/obj/machinery/door/unpowered/simple/wood, -/turf/simulated/floor/holofloor/wood, -/area/holodeck/source_cafe) -"rxE" = ( -/obj/structure/shuttle/engine/propulsion{ - dir = 1 - }, -/turf/simulated/floor/plating, -/area/supply/dock) -"rIb" = ( -/obj/structure/table/rack/holorack, -/turf/simulated/floor/holofloor/wood{ - icon_state = "wood_broken3" - }, -/area/holodeck/source_temple) -"rIu" = ( -/turf/simulated/wall/sandstone, -/area/holodeck/source_temple) -"rJY" = ( -/turf/simulated/floor/holofloor/beach/sand{ - icon_state = "desert2" - }, -/area/holodeck/source_temple) -"skD" = ( -/obj/effect/floor_decal/beach{ - dir = 8 - }, -/obj/structure/holostool, -/turf/simulated/floor/holofloor/concrete, -/area/holodeck/source_volleyball) -"szh" = ( -/obj/machinery/mech_recharger, -/turf/unsimulated/floor{ - icon_state = "dark" - }, -/area/syndicate_elite_squad) -"sGJ" = ( -/obj/structure/holostool, -/turf/simulated/floor/holofloor/wood{ - icon_state = "wood_broken3" - }, -/area/holodeck/source_temple) -"sHB" = ( -/obj/structure/window/reinforced/crescent, -/obj/structure/shuttle/engine/heater{ - dir = 1 - }, -/turf/unsimulated/floor/plating, -/area/centcom/evac) -"sWJ" = ( -/obj/effect/floor_decal/beach{ - dir = 8 - }, -/turf/simulated/floor/holofloor/concrete, -/area/holodeck/source_volleyball) -"tcf" = ( -/turf/simulated/floor/holofloor/beach/sand{ - icon_state = "desert3" - }, -/area/holodeck/source_temple) -"tff" = ( -/obj/structure/bed/chair/holochair, -/turf/simulated/floor/holofloor/tiled/dark, -/area/holodeck/source_boxingcourt) -"thM" = ( -/obj/structure/flora/ausbushes/ywflowers, -/obj/effect/floor_decal/spline/plain/grey{ - dir = 8 - }, -/turf/simulated/floor/holofloor/grass, -/area/holodeck/source_cafe) -"tsJ" = ( -/obj/effect/floor_decal/spline/fancy/wood{ - dir = 5 - }, -/turf/simulated/floor/holofloor/concrete, -/area/holodeck/source_plaza) -"twU" = ( -/obj/effect/floor_decal/beach{ - dir = 4 - }, -/turf/simulated/floor/holofloor/concrete, -/area/holodeck/source_volleyball) -"tDw" = ( -/obj/effect/floor_decal/stoneborder{ - dir = 4 - }, -/turf/simulated/floor/holofloor/beach/water, -/area/holodeck/source_temple) -"tGT" = ( -/obj/effect/floor_decal/spline/fancy/wood{ - dir = 1 - }, -/turf/simulated/floor/holofloor/tiled/dark, -/area/holodeck/source_meetinghall) -"tGX" = ( -/obj/machinery/portable_atmospherics/powered/scrubber, -/turf/unsimulated/floor/plating, -/area/centcom/evac) -"tQu" = ( -/obj/structure/flora/ausbushes/brflowers, -/obj/effect/floor_decal/spline/plain/grey{ - dir = 8 - }, -/turf/simulated/floor/holofloor/grass, -/area/holodeck/source_cafe) -"ufC" = ( -/obj/structure/table/holo_woodentable, -/turf/simulated/floor/holofloor/concrete, -/area/holodeck/source_plaza) -"uly" = ( -/obj/effect/floor_decal/spline/fancy/wood, -/turf/simulated/floor/holofloor/wood, -/area/holodeck/source_meetinghall) -"upH" = ( -/obj/structure/holostool, -/turf/simulated/floor/holofloor/wood{ - icon_state = "wood_broken4" - }, -/area/holodeck/source_temple) -"uvD" = ( -/obj/machinery/button/blast_door{ - id_tag = "syndicate_elite"; - name = "Hull Door Control" - }, -/turf/unsimulated/floor{ - icon_state = "dark" - }, -/area/syndicate_elite_squad) -"uzq" = ( -/obj/structure/bed/chair/wood{ - holographic = 1 - }, -/turf/simulated/floor/holofloor/tiled/stone, -/area/holodeck/source_temple) -"uFd" = ( -/obj/effect/paint/red, -/turf/simulated/wall/r_titanium, -/area/shuttle/specops/centcom) -"uIr" = ( -/obj/effect/floor_decal/stoneborder/corner{ - dir = 4 - }, -/turf/simulated/floor/holofloor/tiled/stone, -/area/holodeck/source_temple) -"uJE" = ( -/obj/effect/floor_decal/stoneborder{ - dir = 8 - }, -/turf/simulated/floor/holofloor/beach/sand, -/area/holodeck/source_temple) -"uJY" = ( -/turf/simulated/floor/holofloor/beach/sand, -/area/holodeck/source_volleyball) -"uZF" = ( -/turf/simulated/floor/plating, -/turf/simulated/wall/r_titanium, -/area/centcom/evac) -"vbR" = ( -/turf/simulated/floor/holofloor/wood, -/area/holodeck/source_cafe) -"vgY" = ( -/obj/structure/table/rack/holorack, -/turf/simulated/floor/holofloor/wood{ - icon_state = "wood_broken2" - }, -/area/holodeck/source_temple) -"vOe" = ( -/obj/effect/floor_decal/stoneborder/corner{ - dir = 1 - }, -/turf/simulated/floor/holofloor/tiled/stone, -/area/holodeck/source_temple) -"vQS" = ( -/obj/effect/overlay/palmtree_r, -/turf/simulated/floor/holofloor/beach/sand, -/area/holodeck/source_temple) -"wda" = ( -/obj/structure/flora/ausbushes/lavendergrass, -/obj/structure/flora/ausbushes/brflowers, -/turf/simulated/floor/holofloor/grass, -/area/holodeck/source_plaza) -"wjw" = ( -/obj/effect/floor_decal/stoneborder{ - dir = 8 - }, -/turf/simulated/floor/holofloor/beach/sand{ - icon_state = "desert2" - }, -/area/holodeck/source_temple) -"wkp" = ( -/obj/effect/wallframe_spawn/reinforced/titanium, -/obj/effect/paint/hull, -/obj/effect/paint/black, -/turf/simulated/floor/plating, -/area/shuttle/administration/centcom) -"wyK" = ( -/obj/structure/shuttle/engine/propulsion, -/turf/space, -/area/shuttle/transport1/centcom) -"wCv" = ( -/obj/structure/flora/ausbushes/lavendergrass, -/obj/structure/flora/ausbushes/ywflowers, -/obj/structure/flora/ausbushes/brflowers, -/turf/simulated/floor/holofloor/grass, -/area/holodeck/source_plaza) -"wCU" = ( -/obj/structure/window/holowindow/full, -/turf/simulated/floor/holofloor, -/area/holodeck/source_cafe) -"wDD" = ( -/turf/simulated/floor/holofloor/beach/sand, -/area/holodeck/source_temple) -"xqW" = ( -/obj/structure/bed/chair/wood{ - holographic = 1 - }, -/obj/effect/floor_decal/spline/fancy/wood{ - dir = 5 - }, -/turf/simulated/floor/holofloor/carpet, -/area/holodeck/source_cafe) -"xHn" = ( -/obj/effect/floor_decal/spline/plain{ - dir = 8 - }, -/obj/structure/holonet/end, -/turf/simulated/floor/holofloor/beach/sand, -/area/holodeck/source_volleyball) -"xTc" = ( -/obj/structure/table/holo_woodentable, -/obj/item/tray{ - holographic = 1 - }, -/turf/simulated/floor/holofloor/wood, -/area/holodeck/source_cafe) -"xTh" = ( -/obj/effect/floor_decal/spline/plain{ - dir = 4 - }, -/turf/simulated/floor/holofloor/beach/sand{ - icon_state = "desert2" - }, -/area/holodeck/source_volleyball) -"xXB" = ( -/obj/effect/floor_decal/spline/plain, -/turf/simulated/floor/holofloor/beach/sand, -/area/holodeck/source_volleyball) - -(1,1,1) = {" -ala -ala -ala -ala -ala -ala -ala -ala -ala -ala -ala -ala -ala -ala -ala -ala -ala -ala -ala -ala -ala -ala -ala -ala -ala -ala -ala -ala -ala -ala -ala -ala -ala -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aKz -aKz -aKz -aKz -aKz -aKz -aKz -aKz -aKz -aKz -aKz -aKz -aKz -aKz -aKz -aKz -aKz -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -"} -(2,1,1) = {" -ala -alg -alg -alg -alg -alg -alg -alg -alg -alg -alg -alg -alg -alg -alg -alg -apO -apZ -apZ -apZ -apZ -apZ -apZ -apZ -apZ -apZ -apZ -apZ -apZ -apZ -apZ -apZ -ala -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aKz -aKI -aKI -aLm -aLt -aLI -aLO -aMb -aMm -aMz -aMR -aNh -aNI -aOr -aOY -aPA -aKz -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -"} -(3,1,1) = {" -ala -alg -alr -alJ -alr -alr -alr -alr -alr -alr -alr -alr -alr -alr -alr -alg -apP -aqa -aqa -aqa -aqa -aqa -aqa -aqa -aqa -aqa -aqa -aqa -aqa -aqa -aqa -apZ -ala -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aKz -aKI -aLh -aLe -aLe -aLe -aLe -aLe -aLe -aLe -aLe -aLe -aLe -aLe -aLe -aPB -aKz -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -"} -(4,1,1) = {" -ala -alg -alr -alr -alr -alr -alr -alr -alr -alr -alr -alr -alr -alr -alr -alg -apP -aqa -aqa -aqa -aqa -aqa -aqa -aqa -aqa -aqa -aqa -aqa -aqa -aqa -aqa -apZ -ala -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aKz -aKJ -aLe -aKz -aKz -aKz -aKz -aKz -aLn -aKz -aKz -aKz -aKz -aKz -aLe -aKK -aKz -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -"} -(5,1,1) = {" -ala -alg -alr -alr -alr -alr -alr -alr -alr -alr -alr -alX -amK -alr -alr -alg -apP -aqa -aqa -aqa -aqa -aqa -aqa -aqa -aqa -aqa -aqa -aqa -aqa -aqa -aqa -apZ -ala -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aKz -aKK -aLe -aKz -aLu -aLu -aLP -aLu -aLu -aLu -aLP -aLu -aLu -aKz -aLe -aPC -aKz -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -"} -(6,1,1) = {" -ala -alg -alr -alr -alr -alr -alr -alr -alr -alr -alr -alr -alX -alr -apA -alg -apP -aqa -aqa -aqa -aqa -aqa -aqa -aqa -aqa -aqa -aqa -aqa -aqa -aqa -aqa -apZ -ala -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aKz -aKL -aLe -aKz -aLu -aLu -aLu -aLu -aLu -aLu -aLu -aLu -aLu -aKz -aLe -aKM -aKz -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -"} -(7,1,1) = {" -ala -alg -alr -alr -alr -alr -amK -alr -anb -anb -alr -alr -alr -alr -alr -alg -apP -aqa -aqa -aqa -aqa -aqa -aqa -aqa -aqa -aqa -aqa -aqa -aqa -aqa -aqa -apZ -ala -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aKz -aKM -aLe -aKz -aLu -aLu -aLu -aLu -aLu -aLu -aLu -aLu -aLu -aKz -aLe -aKN -aKz -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -"} -(8,1,1) = {" -ala -alg -alr -alr -alr -alr -alX -anb -ano -anP -anb -alr -alr -alr -alr -alg -apP -aqa -aqa -aqa -aqa -aqa -aqa -aqa -aqa -aqa -aqa -aqa -aqa -aqa -aqa -apZ -ala -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aKz -aKN -aLe -aKz -aLu -aLu -aLu -aLu -aLu -aLu -aLu -aLu -aLu -aKz -aLe -aKL -aKz -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -"} -(9,1,1) = {" -ala -alg -als -alr -alr -alr -alr -anb -anp -anQ -anb -alr -alr -alr -alr -alg -apP -aqa -aqa -aqa -aqa -aqa -aqa -aqa -aqa -aqa -aqa -aqa -aqa -aqa -aqa -apZ -ala -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aKz -aKL -aLe -aKz -aLu -aLu -aLu -aLu -aLu -aLu -aLu -aLu -aLu -aKz -aLe -aKO -aKz -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -"} -(10,1,1) = {" -ala -alg -als -alr -alr -alr -alr -alr -anb -anb -alr -alr -alr -aph -alr -alg -apP -aqa -aqa -aqa -aqa -aqa -aqa -aqa -aqa -aqa -aqa -aqa -aqa -aqa -aqa -apZ -ala -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aKz -aKO -aLe -aKz -aLv -aLu -aLu -aLu -aLu -aLu -aLu -aLu -aNJ -aKz -aLe -aKP -aKz -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -"} -(11,1,1) = {" -ala -alg -als -alr -alr -alr -alr -alr -alr -alr -alr -alr -alr -alr -alr -alg -apP -aqa -aqa -aqa -aqa -aqa -aqa -aqa -aqa -aqa -aqa -aqa -aqa -aqa -aqa -apZ -ala -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aKz -aKP -aLe -aKz -aLu -aLu -aLu -aLu -aLu -aLu -aLu -aLu -aLu -aKz -aLe -aKQ -aKz -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -"} -(12,1,1) = {" -ala -alg -alr -alr -alr -alr -alr -alr -alr -alr -alr -alr -alr -aph -alr -alg -apP -aqa -aqa -aqa -aqa -aqa -aqa -aqa -aqa -aqa -aqa -aqa -aqa -aqa -aqa -apZ -ala -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aKz -aKQ -aLe -aKz -aLu -aLu -aLu -aLu -aLu -aLu -aLu -aLu -aLu -aKz -aLe -aKR -aKz -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -"} -(13,1,1) = {" -ala -alg -alr -alr -alr -alr -alr -alr -alr -amK -alr -alr -alr -alr -alr -alg -apP -aqa -aqa -aqa -aqa -aqa -aqa -aqa -aqa -aqa -aqa -aqa -aqa -aqa -aqa -apZ -ala -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aKz -aKR -aLe -aKz -aLu -aLu -aLu -aLu -aLu -aLu -aLu -aLu -aLu -aKz -aLe -aKS -aKz -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -"} -(14,1,1) = {" -ala -alg -als -alr -alr -alr -alr -alr -alr -alr -alr -alr -alr -aph -alr -alg -apP -aqa -aqa -aqa -aqa -aqa -aqa -aqa -aqa -aqa -aqa -aqa -aqa -aqa -aqa -apZ -ala -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aKz -aKS -aLe -aLn -aLu -aLu -aLu -aLu -aMn -aLu -aLu -aLu -aLu -aLn -aLe -aKT -aKz -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -"} -(15,1,1) = {" -ala -alg -als -alr -alr -alr -alr -alr -alr -anR -alr -alr -alr -alr -alr -alg -apP -aqa -aqa -aqa -aqa -aqa -aqa -aqa -aqa -aqa -aqa -aqa -aqa -aqa -aqa -apZ -ala -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aKz -aKT -aLe -aKz -aLu -aLu -aLu -aLu -aLu -aLu -aLu -aLu -aLu -aKz -aLe -aKU -aKz -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -"} -(16,1,1) = {" -ala -alg -als -alr -alX -alJ -alr -alr -alr -alr -alr -alr -alr -api -alr -alg -apP -aqa -aqa -aqa -aqa -aqa -aqa -aqa -aqa -aqa -aqa -aqa -aqa -aqa -aqa -apZ -ala -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -avY -avY -avY -avY -avY -avY -avY -avY -avY -avY -avY -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aKz -aKU -aLe -aKz -aLu -aLu -aLu -aLu -aLu -aLu -aLu -aLu -aLu -aKz -aLe -aKV -aKz -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -"} -(17,1,1) = {" -ala -alg -alr -alr -alr -alr -alr -alr -alr -alr -alr -alr -alr -alr -alr -alg -apP -aqa -aqa -aqa -aqa -aqa -aqa -aqa -aqa -aqa -aqa -aqa -aqa -aqa -aqa -apZ -ala -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -avY -awW -axi -avY -axQ -axi -axQ -axi -axQ -aAl -avY -avY -avY -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aKz -aKV -aLe -aKz -aLu -aLu -aLu -aLu -aLu -aLu -aLu -aLu -aLu -aKz -aLe -aKW -aKz -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -"} -(18,1,1) = {" -ala -alg -alr -alr -alr -alr -alr -alr -alr -alr -alr -alr -alr -alr -alr -alg -apP -aqa -aqa -aqa -aqa -aqa -aqa -aqa -aqa -aqa -aqa -aqa -aqa -aqa -aqa -apZ -ala -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -avY -awr -awr -awZ -awr -awr -awr -awr -awr -awr -awr -awr -avY -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aKz -aKW -aLe -aKz -aLu -aLu -aLu -aLu -aLu -aLu -aLu -aLu -aLu -aKz -aLe -aKX -aKz -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -"} -(19,1,1) = {" -ala -alg -alr -alr -alr -alr -alr -alr -alr -alr -alr -alJ -alX -alr -alr -alg -apP -aqa -aqa -aqa -aqa -aqa -aqa -aqa -aqa -aqa -aqa -aqa -aqa -aqa -aqa -apZ -ala -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -avY -awX -awr -avY -awr -awr -awr -awr -awr -awr -awr -awr -avY -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aKz -aKX -aLe -aKz -aLv -aLu -aLu -aLu -aLu -aLu -aLu -aLu -aNJ -aKz -aLe -aPD -aKz -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -"} -(20,1,1) = {" -ala -alg -alr -alr -alr -alr -alr -alr -alr -alr -alr -alr -alr -alr -alr -alg -apP -aqa -aqa -aqa -aqa -aqa -aqa -aqa -aqa -aqa -aqa -aqa -aqa -aqa -aqa -apZ -ala -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -avY -awY -axj -avY -axR -axR -ayN -axR -axR -awY -awY -axj -avY -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aKz -aKY -aLe -aKz -aLu -aLu -aLu -aLu -aLu -aLu -aLu -aLu -aLu -aKz -aLe -aPE -aKz -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -"} -(21,1,1) = {" -ala -alg -alr -alK -alr -alr -alr -alr -alr -alr -alr -alr -alr -alr -alr -alg -apP -aqa -aqa -aqa -aqa -aqa -aqa -aqa -aqa -aqa -aqa -aqa -aqa -aqa -aqa -apZ -ala -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -avY -avY -avY -awZ -avY -avY -avY -avY -ayc -ayc -avY -aAm -aAm -avY -avY -avY -avY -avY -avY -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aKz -aKZ -aLe -aKz -aLu -aLu -aLu -aLu -aLu -aLu -aLu -aLu -aLu -aKz -aLe -aPF -aKz -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -"} -(22,1,1) = {" -ala -alg -alg -alg -alg -alg -alg -alg -alg -alg -alg -alg -alg -alg -alg -alg -apO -apZ -apZ -apZ -apZ -apZ -apZ -apZ -apZ -apZ -apZ -apZ -apZ -apZ -apZ -apZ -ala -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -avY -awg -awL -awp -axk -awp -axS -ayc -ayO -azo -azQ -awp -awp -ayc -aBs -awp -awp -aCj -avY -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aKz -aLa -aLe -aKz -aLu -aLu -aLu -aLu -aLu -aLu -aLu -aLu -aLu -aKz -aLe -bDb -aKz -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -"} -(23,1,1) = {" -ala -ala -ala -ala -ala -ala -ala -ala -ala -ala -ala -ala -ala -ala -ala -ala -ala -ala -ala -ala -ala -ala -ala -ala -ala -ala -ala -ala -ala -ala -ala -ala -ala -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -avY -avY -avY -awp -awp -awp -axT -ayc -ayP -awp -awp -awp -awp -ayc -aBt -awp -awp -aCj -avY -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aKz -aLb -aLe -aKz -aLu -aLu -aLu -aLu -aLu -aLu -aLu -aLu -aLu -aKz -aLe -bEb -aKz -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -"} -(24,1,1) = {" -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -avY -awh -awp -awp -awp -awp -axU -ayc -ayQ -awp -awp -awp -awp -ayc -aBu -awp -awp -aCk -avY -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aKz -aLc -aLe -aKz -aLu -aLu -aLQ -aLu -aLu -aLu -aLQ -aLu -aLu -aKz -aLe -bFb -aKz -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -"} -(25,1,1) = {" -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aeB -aeB -aeB -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -avY -awi -awp -awp -awp -awp -axV -ayc -ayR -awp -awp -awp -awp -ayc -aBv -awp -awp -aCl -avY -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aKz -aLd -aLe -aKz -aKz -aKz -aKz -aKz -aLn -aKz -aKz -aKz -aKz -aKz -aLe -aLc -aKz -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -"} -(26,1,1) = {" -aab -aab -aab -aab -hJx -hJx -hJx -hJx -hJx -aab -aab -aeB -aeB -aeB -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aLW -aLW -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aLF -aab -aab -aab -aab -asP -asQ -asQ -asQ -asQ -asQ -asQ -asQ -asQ -asQ -asQ -asQ -asQ -asQ -asQ -asQ -asQ -asQ -avY -awj -awp -awp -awp -awp -axW -ayc -ayS -azp -awp -awp -awp -ayc -aBw -awp -awp -aCm -avY -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aKz -aLe -aLe -aLe -aLe -aLe -aLe -aLe -aLe -aLe -aLe -aLe -aLe -aLe -aLe -aLd -aKz -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -"} -(27,1,1) = {" -aab -aab -aab -aab -abx -sHB -kSV -ffh -uZF -hJx -aab -aeB -aeB -aeB -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aLW -aLW -aLW -aLW -aLW -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aLF -aab -aab -aab -aab -asP -asR -asR -asR -asR -asR -asR -asR -asR -asR -asR -asR -asR -asR -asR -asR -asR -asR -avY -awk -awp -awp -awp -awp -axX -avY -ayc -ayc -avY -aAm -aAm -avY -awp -awp -awp -aCn -avY -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aKz -aLe -aLe -aLo -aLw -aLw -aLR -bCb -aMo -aMo -aMo -aNi -aNK -aOs -aLe -aKJ -aKz -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -"} -(28,1,1) = {" -aab -aab -aab -aab -aby -sHB -pET -ffh -ffh -hJx -aab -aeB -aeB -aeB -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aLW -aLW -aLW -aLW -aLW -aLW -aLW -avW -avT -aRl -aab -aab -aab -aab -aab -aab -aab -aab -aab -aRl -avW -avT -avT -avW -avT -avT -avT -avT -avT -aab -aLF -aab -aab -aab -aab -asP -asR -asR -asR -asR -izl -atB -atU -izl -asR -izl -atB -atU -izl -asR -asR -asR -asR -avY -awl -awp -awp -awp -awp -awp -awp -awp -awp -azR -awp -awp -aAZ -awp -awp -awp -axV -avY -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aKz -aIx -aIx -aIx -aIx -aIx -aIx -aIx -aIx -aIx -aIx -aIx -aIx -aKz -aKz -aKz -aKz -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -"} -(29,1,1) = {" -aab -aab -aab -aab -abz -sHB -uZF -hJx -adK -hJx -hJx -hJx -aeI -hJx -hJx -hJx -agK -hJx -hJx -hJx -hJx -aab -aab -aab -aab -aab -aab -aab -aab -aLW -aLW -aLW -aLW -aLW -aLW -aLW -aab -avD -avD -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -avD -aab -aab -aab -aab -avD -aab -aab -aab -aLF -aab -aab -aab -aab -asP -asR -asR -asR -izl -izl -atC -atC -izl -izl -izl -atC -atC -izl -izl -asR -asR -asR -avY -awm -awp -axa -awp -awp -awp -awp -awp -awp -azR -awp -awp -aAZ -awp -awp -awp -aCo -avY -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aCz -aIx -aIx -aIx -aIx -aIx -aIx -aIx -aJj -aJj -aJj -aJj -aJj -aJj -aJj -aJj -aJj -aJs -aIx -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -"} -(30,1,1) = {" -aab -aab -aab -aab -hJx -hJx -hJx -adk -adm -adW -ael -aeC -aeJ -acH -hJx -agp -agL -ahn -ahU -ahn -hJx -aab -aab -aab -aab -aab -aab -aLW -aLW -aLW -aLW -aLW -aLW -aLW -aLW -avD -avD -avD -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -avD -aab -aWy -aab -avD -avD -aab -aab -aab -aLF -aab -aab -aab -aab -asP -asR -asR -izl -izl -izl -atD -atV -aug -izl -auD -auR -auY -izl -izl -izl -asR -asR -avY -avY -avY -avY -avY -avY -avY -avY -ayc -ayc -avY -aAn -aAE -avY -ayc -ayc -avY -avY -avY -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aEE -aCz -aCz -aCz -aCz -aCz -aCz -aCz -aCz -aCz -aCz -aCz -aCz -aCz -aII -aII -aII -aII -aII -aII -aII -aII -aIx -aIx -aIx -aIx -aIx -aIx -aIx -aIx -aNj -aIx -aIx -aIx -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -"} -(31,1,1) = {" -aab -aao -aao -aao -aao -hJx -acH -adl -adm -adl -adn -adl -adm -afi -hJx -agp -agL -agL -agL -agL -hJx -hJx -hJx -hJx -hJx -aab -aab -aLW -aLW -aLW -aLW -aLW -aLW -aLW -avD -aab -aab -avD -avD -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aVF -aVF -aWz -aVF -aVF -aVF -aVF -aab -aab -aLF -aab -aab -aab -aab -asP -asR -izl -izl -atc -atn -atd -atd -auh -izl -auD -auD -auZ -avj -avp -avE -izl -asR -avY -awn -awM -avY -axl -axF -axY -ayo -awp -awp -azS -awp -awp -aBa -aBx -aBI -aBZ -aCp -avY -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aEE -bgb -aHD -aHD -aHD -aHD -bmb -bob -aHD -bjb -aHD -aHp -aIt -aCz -aII -aIx -aIx -aIx -aIx -aIx -aIx -aIx -aIx -aLx -aLx -aLx -aLx -aLx -aII -aMS -aII -aII -aII -aIx -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -"} -(32,1,1) = {" -aab -aao -aao -aao -aao -ace -acI -adm -adm -adm -adm -adm -adm -adm -hJx -agq -agL -agL -agL -agL -hJx -aiY -ajm -ajA -lGk -aab -aab -aLW -aLW -aLW -aLW -aLW -aLW -aMf -aOw -aOw -aOw -aOw -aMf -aab -aab -aRA -aSy -aSy -aSy -aRA -aab -aab -aab -aVk -aVG -aVG -aWA -aWV -aWV -aWV -aWV -aYf -aab -aLF -aab -aab -aab -aab -asP -asR -izl -asV -atd -atd -atd -atd -aui -izl -auE -auD -auD -auD -auD -avF -izl -asR -avY -awo -awo -avY -awp -awp -awp -awp -awp -awp -azS -awp -awp -awp -awp -awp -awp -aCq -avY -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aEE -bhb -aHD -aHp -bkb -aHD -aHD -aHp -bqb -aHD -aHD -aIt -aIF -aCz -aII -aIx -aKa -aKa -aKt -aKt -aIx -aIx -aIx -aLy -aLy -aLy -aLy -aLy -aLy -aIx -aIx -aIx -aII -aIx -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -"} -(33,1,1) = {" -aab -aao -aao -aao -aao -hJx -acJ -adl -adm -adl -aem -aem -adl -adm -hJx -agr -agM -aho -agr -agM -hJx -aen -adl -ajB -lGk -aab -aab -aLW -aLW -aLW -aLW -aMf -aMf -aMf -aOx -aPb -aPT -aQF -aOw -aab -aab -aRU -aSz -aTc -aTv -aTM -aab -aab -aab -aab -aab -avD -aWz -aab -aab -avD -aab -aab -aab -aLF -aab -aab -aab -aab -asP -asR -izl -asW -ate -ato -asW -atd -auj -izl -auD -auD -auD -auD -auD -avG -izl -asR -avY -awp -awp -awp -awp -awp -awp -awp -awp -azq -avY -aAo -axH -axH -axH -axH -awp -axt -avY -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aEE -bhb -aHD -aHp -aHp -aHD -aHD -aHp -brb -aHD -aIt -aIF -aIG -aCz -aII -aIx -aKb -aKb -aKb -aKA -aIx -aLi -aLp -aLz -aLz -aLz -aLz -aLz -aLz -aMT -aNk -aIx -aII -aIx -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -"} -(34,1,1) = {" -aab -aab -aab -aab -aab -hJx -acK -adn -adm -adX -ael -ael -aeK -adm -adm -adm -adm -adm -adm -adm -aiJ -adm -adX -ajC -lGk -aab -aab -aLW -aLW -aLW -aLW -aMf -aNp -aNp -aOy -aPc -aPU -aQG -aOw -aab -aab -aRU -aSA -aTd -aTw -aTM -aab -aab -aab -aab -aVF -aVF -aWz -aVF -aVF -aVF -aVF -avD -aab -aLF -aab -aab -aab -aab -asP -asR -izl -asW -atf -atp -asW -atd -auk -izl -auF -auD -auD -avk -avq -avH -izl -asR -avY -awq -awp -awp -awp -awp -awp -awp -awp -axV -avY -aAp -aAF -aBb -aBc -aBJ -awp -axH -ayc -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aEE -bhb -aHD -aHp -aHD -aHp -bnb -aHp -aHp -aIt -aIF -aIG -aIG -aCz -aII -aIx -aKb -aKb -aKb -aKB -aIx -aLi -aLp -aLz -aLJ -aLz -aLz -aLJ -aLz -aMT -aNk -aIx -aII -aIx -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -"} -(35,1,1) = {" -aab -aap -aap -aap -aap -hJx -acL -adl -adm -adX -ael -ael -aeK -adm -adl -adl -agN -ahp -agO -air -hJx -aiZ -adl -ajD -lGk -aab -aab -aLW -aLW -aLW -aLW -aMf -aNq -aNQ -aOz -aPd -aPV -aQH -aOw -aab -aab -aRU -aSB -cCV -aTx -aTM -aab -aab -aab -aVk -aVG -aVG -aWA -aWV -aWV -aWV -aWV -aYf -aab -aLF -aab -aab -aab -aab -asP -asR -izl -izl -izl -izl -izl -atr -izl -izl -izl -atr -izl -izl -izl -izl -izl -asR -avY -awr -awp -awp -axm -axG -axZ -ayp -ayT -axW -avY -aAq -aAF -aBc -aBy -aBJ -awp -axH -ayc -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aEE -bib -aHD -bjb -aHD -blb -aHp -aHp -aIt -aIF -aIG -aIG -aIG -aCz -aII -aJW -aKb -aKb -aKb -aKB -aIx -aLi -aLp -aLz -aLz -aLS -aLz -aLz -aLz -aMT -aNk -aIx -aII -aIx -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -"} -(36,1,1) = {" -aab -aap -aap -aap -aap -acf -acM -adm -adm -adl -aen -aen -adl -adm -adm -adm -agO -ahq -ahV -ahV -hJx -adl -ajn -ajE -lGk -aab -aab -aLW -aLW -aLW -aLW -aMf -aNr -aNR -aOA -aPe -aPW -aQI -aOw -aab -aab -aRA -aSC -aTe -aTy -aRA -aab -aab -aab -aab -avD -aab -aWz -avD -aab -avD -avD -aab -aab -aLF -aab -aab -aab -aab -asP -asR -izl -asX -atd -atq -atd -atd -atd -atq -atd -atd -atd -atq -wkp -avI -wkp -asR -avY -awr -awp -awp -axm -avY -avY -avY -ayc -ayc -avY -aAq -aAF -aBd -aBz -aBJ -awp -axH -ayc -aab -aDy -aDQ -uFd -uFd -uFd -uFd -uFd -uFd -uFd -uFd -aab -aab -aEE -bib -aHp -aHD -aHD -aHD -aHp -bpb -aIu -aIG -aIG -aIG -aIG -aCz -aII -aIx -aKb -aKb -aKb -aKb -aIx -aLi -aLp -aLz -aLJ -aLz -aLz -aLJ -aLz -aMT -aNk -aIx -aII -aIx -aIx -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -"} -(37,1,1) = {" -aab -aap -aap -aap -aap -hJx -acH -adl -adm -adm -adm -adm -adm -adm -adm -adm -agP -ahr -ahV -ahV -hJx -hJx -hJx -hJx -hJx -aab -aab -aLW -aLW -aLW -aMf -aMf -aMf -aMf -aMf -aPf -aPX -aMf -aMf -aRm -aRA -aRA -aRA -aTf -aRA -aRA -aRA -aab -aab -aab -aVF -aVF -aWz -aVF -aVF -aVF -aVF -aab -aab -aLF -aab -aab -aab -aab -asP -asR -izl -asX -atd -atd -atd -ats -atd -atd -atd -ats -atd -atd -avs -avJ -avS -asR -avY -aws -awp -awp -axn -avY -aya -awp -awp -azr -azr -awp -awp -awp -awp -awp -awp -axH -ayc -aab -aDz -aDR -aEd -aEq -aEB -aEV -aEV -aEB -aFK -uFd -uFd -aab -aEE -aGd -aHg -aHg -aGd -aHg -aHg -aGd -aIv -aIG -aIG -aIG -aIG -aCz -aII -aIx -aKc -aKc -aKu -aKb -aIx -aLi -aLp -aLz -aLz -aLz -aLz -aLz -aLz -aMT -aNk -aIx -aII -aII -aIx -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -"} -(38,1,1) = {" -aab -aab -aab -aab -hJx -hJx -hJx -ado -adm -adY -aeo -acH -aeL -adl -afT -adl -agO -ahs -bub -ais -hJx -aab -aab -aab -aab -aab -aab -aLW -aLW -aLW -aMf -aMU -aNs -aNS -aOB -aPg -aPY -aMf -aab -aab -aRA -aSh -aSD -aSE -aTA -btb -aRA -aab -aab -aVk -aVG -aVG -aWA -aWV -aWV -aWV -aWV -aYf -aab -aLF -aab -aab -aab -aab -asP -asR -izl -asY -atd -atd -atd -izl -atd -aut -atd -izl -izl -atr -izl -izl -izl -asR -avY -aws -awp -awp -axo -avY -ayb -axH -axH -axH -axH -axH -axH -axH -awp -awp -axH -axt -avY -aab -aDz -aDR -aEe -aEr -aEr -aEr -aEr -aEr -aEr -aFY -aGq -aab -aEE -aGd -aHh -aHq -aGd -aHF -aHV -aGd -aIw -aIG -aIG -aIG -aIG -aCz -aII -aIx -aIx -aIx -aIx -aKC -aIx -aIx -aIx -aLA -aLA -aLA -aLA -aLA -aLA -aIx -aIx -aIx -aIx -aOZ -aIx -aIx -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -"} -(39,1,1) = {" -aab -aab -aab -aab -abx -sHB -uZF -hJx -adK -hJx -hJx -hJx -aeM -hJx -hJx -ags -hJx -hJx -hJx -hJx -hJx -aab -aab -aab -aab -aab -aab -aLW -aLW -aLW -aMf -aMV -aMC -aNT -aOC -aNU -aPY -aOw -aab -aRA -aRA -aSh -aSE -aSE -aSE -aTQ -aRA -aRA -aab -aab -aab -avD -aWz -avD -aab -aab -avD -avD -aab -aLF -aab -aab -aab -aab -asP -asR -izl -asZ -atd -atd -atE -izl -aul -auu -auG -izl -ava -atd -atq -avK -izl -asR -avY -awt -awp -awp -axp -avY -ayb -axH -axH -axH -axH -axH -axH -axH -awp -awp -axH -aCq -avY -aab -aDz -aDR -aEf -aEs -aEC -aEr -aEr -aFz -aFL -uFd -uFd -aab -aEE -aGd -aHi -aHr -aGd -aHG -aHW -aGd -aIw -aIG -aIG -aIG -aIG -aCz -aII -aII -aIx -aKl -aKp -aKp -aKp -aLj -aLq -aLB -aLB -aLB -aLB -aLB -aLB -aLq -aLj -aNL -aNL -aNL -aPH -aIx -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -"} -(40,1,1) = {" -aab -aab -aab -aab -aby -sHB -tGX -ffh -ffh -hJx -aab -aeD -aeD -aeD -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aLW -aLW -aLW -aMf -aMV -aMC -aNT -aOD -aPh -aPZ -aOw -aab -aRB -aRA -aSh -aSE -aTg -aTB -aTR -aRA -aRB -aab -aab -aab -aWf -aWB -aab -aab -avD -avD -aab -aab -aLF -aab -aab -aab -aab -asP -asR -asS -asZ -atd -atd -atE -asS -aum -aum -aum -asS -avb -atd -atd -avL -asS -asR -avY -awt -awp -awp -axp -avY -aya -axH -awY -axH -awY -aAr -aAG -aBe -awp -awp -aBZ -aCp -avY -aab -aDA -aDQ -uFd -uFd -uFd -aEW -aEW -uFd -uFd -uFd -aab -aab -aEE -aGd -aHj -aHj -aGd -aHj -aHj -aGd -aIw -aIG -aIG -aIG -aIG -aCz -aII -aII -aIx -aKm -aKv -aKp -aKv -aLj -aLr -aLr -aLr -aLr -aLr -aLr -aLr -aLr -aLj -aNM -aNL -aNL -aPH -aIx -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -"} -(41,1,1) = {" -aab -aab -aab -aab -abz -sHB -eGq -ffh -uZF -hJx -aab -aeD -aeD -aeD -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aLW -aLW -aLW -aMf -aMW -aMC -aNU -aNU -aNU -aQa -aOw -aab -aRC -aRA -aRA -aSF -aTh -aTC -aRA -aRA -aUv -aab -avD -avD -avD -aWC -aab -avD -avD -aab -aab -aab -aLF -aab -aab -aab -aab -asP -asR -asS -asS -asS -atr -asS -asS -asR -asR -asR -asS -avc -atd -avt -asS -asS -asR -avZ -avZ -avZ -avZ -avZ -avZ -ayc -ayc -ayU -avY -azT -avY -ayc -aBf -ayU -ayU -aBf -ayc -avY -avY -avY -ayc -ayc -ayc -avY -aEX -aEX -avY -avY -aab -aab -aab -aEE -aHb -aGd -aGd -aHc -aGd -aGd -aGd -aIx -aIx -aIx -aIx -aIx -aIx -aIx -aII -aIx -aKn -aKv -aKp -aKv -aLj -aLr -aLr -aLr -aLr -aLr -aLr -aLr -aLr -aLj -aNM -aNL -aNL -aPH -aIx -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -"} -(42,1,1) = {" -aab -aab -aab -aab -hJx -hJx -hJx -hJx -hJx -aab -aab -aeD -aeD -aeD -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aLW -aLW -aLW -aMf -aMX -aNt -aNU -aNU -aPi -aQb -aOw -aab -aab -aRU -aSj -aSG -aTi -aTD -aTT -aRU -aab -aab -avD -aMf -czt -aWD -czt -aMf -aLW -aab -aab -aab -aLF -aab -aab -aab -aab -asP -asR -asS -asS -atg -atd -atd -asS -asR -asR -asR -asS -avd -atd -avu -asS -asS -asR -avZ -awv -awN -axb -axq -avZ -ayd -axH -axH -ayc -azU -ayc -aAH -aAI -awp -awp -axH -aCr -aCP -aDk -avY -axH -axH -axH -axH -awp -awp -aBc -avY -aab -aab -aab -aEE -aGd -aHg -aHg -aGd -aHg -aHg -aGd -aIx -aIH -aII -aIy -aJj -aJs -aIx -aII -aIx -aKm -aKv -aKD -aKv -aLj -aLr -aLr -aLr -aLr -aLr -aLr -aLr -aLr -aLj -aNM -aNL -aPa -aPI -aIx -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -"} -(43,1,1) = {" -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aeD -aeD -aeD -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aLW -aMf -aMf -aMf -aMf -aMf -aNV -aNU -aPi -aQc -aOw -aab -aab -aRU -aSj -aSH -aTj -aTE -aTU -aRU -aab -aUO -aMf -aMf -aWg -aWE -aWW -aMf -aLW -aLW -aab -aab -aLF -aab -aab -aab -aab -asP -asR -asR -asS -asS -atd -bBb -asS -asR -asR -asR -asS -ave -atd -asS -asS -asR -asR -avZ -awv -awv -axc -axr -avZ -aye -axH -axH -ayc -azU -ayc -aAI -axH -awp -awp -awp -awp -awp -awp -aDB -awp -awp -awp -awp -awp -awp -aBc -avY -aab -aab -aab -aEE -aGd -aHk -aHs -aGd -aHH -aHX -aGd -aIx -aII -aIR -aII -aII -aJt -aJL -aII -aIx -aKo -aKv -aKp -aKv -aLj -aLr -aLr -aLr -aLr -aLr -aLr -aLr -aLr -aLj -aNM -aNL -aPa -aPJ -aIx -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -"} -(44,1,1) = {" -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aLW -aMf -aMs -aMB -lLj -aMf -aNW -aNU -aPj -aQd -aOw -aRm -aab -aRA -aSj -aSH -aTk -aTF -aSk -aRA -aab -avD -czt -aVH -aWh -aWF -aWX -aMf -aMf -aLW -aLW -aLG -aLF -aab -aab -aab -aab -asP -asR -asR -asS -asS -ats -atG -asS -asR -asR -asR -asS -avf -ats -asS -asS -asR -asR -avZ -awv -awO -axd -axs -avZ -ayf -axH -axH -azs -azU -azs -axH -axH -awp -awp -awp -awp -awp -awp -aDB -awp -awp -awp -awp -awp -awp -aFA -avY -aab -aab -aab -aEE -aGd -aHl -aHt -aGd -aHk -aHY -aGd -aIy -aIy -aIS -aIy -aII -aJt -aIx -aII -aIx -aKp -aKv -aKp -aKv -aLj -aLr -aLr -aLr -aLr -aLr -aLr -aLr -aLr -aLj -aNM -aNL -aPa -aPK -aIx -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -"} -(45,1,1) = {" -aab -aab -aad -aad -aad -aad -aad -aad -aad -aad -aad -aad -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aLW -aMf -aMt -aMC -aMC -aNu -aNU -aOE -aPk -aQe -aMf -aab -aab -aRA -aSj -aSH -aTk -aTE -aTT -aRA -avD -avD -czt -aVI -aWi -aWG -aWY -aXq -aMf -aMf -aLW -aLG -aLG -aab -aab -aab -aab -asP -asR -asR -asR -asS -asS -asS -asS -asR -asR -asR -asS -asS -asS -asS -asR -asR -asR -avZ -awv -awv -awv -awv -avZ -axH -axH -aye -ayc -azU -ayc -aAJ -axH -aBA -aBA -aBA -aBA -aBA -aBA -avY -axH -axH -axH -aED -aED -aED -aED -aEE -aab -aab -aab -aEE -aGd -aHj -aHj -aGd -aHj -aHj -aGd -aIy -aII -aII -aII -aII -aJt -aIx -aIx -aIx -aKp -aKp -aKp -aKp -aLj -aLr -aLr -aLr -aLT -aMd -aMp -aLr -aLr -aNl -aNN -aNL -aNL -aPL -aIx -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -"} -(46,1,1) = {" -aab -aab -aad -aad -aad -aad -aad -aad -aad -aad -aad -aad -aad -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aLW -aMf -aMu -aMD -aMY -aMf -aNU -pEp -pEp -aQf -aMf -aRn -aab -aRA -aSk -aSI -aTk -aTE -aTU -aRA -aRn -czt -czt -aVJ -aVw -aWH -aWZ -aXr -aXH -aMf -aLW -aLG -aLG -aab -aab -aab -aab -asP -asR -asR -asR -asR -asR -asR -atX -asR -asR -asR -asR -asR -asR -asR -asR -asR -asR -avZ -awv -awP -awv -awv -avZ -axH -axH -aye -ayc -azU -ayc -aAK -axH -aBB -aBB -aBB -aBB -aBB -aBB -avY -axH -axH -axH -aED -aED -aED -aED -aEE -aab -aab -aab -aEE -aGd -aGd -aGd -aGd -aGd -aGd -aGd -aIz -aII -aII -aII -aII -aII -aII -aII -aKd -aKp -aKp -aKp -aKp -aLj -aLr -aLr -aLr -aLU -aMe -aMq -aMA -aMA -aNm -aNO -aOt -aNL -mXz -aIx -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -"} -(47,1,1) = {" -aab -aab -aad -aad -aad -aad -aad -aad -aad -aad -aad -aad -aad -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aLW -aMf -aMf -aMf -aMf -aMf -aNU -aOF -aPc -aQg -aQJ -aOw -aab -aRA -aSl -aSH -aTj -aTF -aSk -aRA -aMf -aUP -aVl -aVK -aPc -aWI -aXa -aXs -aXI -aMf -aLW -aLG -aLG -aab -aab -aab -aab -asP -asP -asP -asP -ath -ath -ath -ath -aun -aun -ath -ath -ath -ath -ath -ath -ath -ath -avZ -aww -awQ -aww -avZ -avZ -axH -axH -avY -avY -azV -avY -avY -ayU -ayc -ayc -avY -avY -avY -avY -avY -azt -ayU -avY -aEE -aED -aFo -aED -aEE -aab -aab -aab -aEE -aGd -aGd -aGd -aGd -aGd -aGd -aGd -aIy -aII -aII -aII -aII -aJu -aIx -aIx -aIx -aKp -aKp -aKp -aKp -aLj -aLr -aLr -aLr -aLT -aMd -aMr -aLr -aLr -aNl -aNL -aOu -aNL -mXz -aIx -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -"} -(48,1,1) = {" -aab -aab -aad -aad -aad -aad -aad -aad -aad -aad -aad -aad -aad -rpk -atb -atb -atb -atb -atb -atb -atb -aab -aab -aab -aab -aab -aab -aLW -aLW -aMf -aME -aMZ -aMf -aNX -aMf -aPl -aPc -aQK -aOw -aab -aRA -aSm -aSH -aTj -aTE -aTT -aRA -aMf -aUQ -aVm -aVL -aPc -aWJ -aXb -aXt -aXJ -aMf -aLW -aLG -aLG -aab -aab -aab -aab -aab -aab -aab -aab -ath -att -atH -ath -aub -aub -ath -att -atH -ath -avh -avM -ath -avU -avU -awx -awR -awx -axt -axH -axH -axH -avY -axH -azU -axH -avY -axH -axH -aBK -avY -aCs -aCs -aCs -aDC -aCs -aCs -aCs -aEE -aEY -aFp -aEY -aEE -aEE -aEE -aEE -aEE -aGd -aGd -aHu -aHy -aHI -aHJ -aHJ -aIy -aIy -aIS -aIy -aII -aJu -aIx -aII -aIx -aKp -aKv -aKp -aKv -aLj -aLr -aLr -aLr -aLr -aLr -aLr -aLr -aLr -aLj -aNM -aNL -aPa -aPN -aIx -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -"} -(49,1,1) = {" -aab -aab -aad -aad -aad -aad -aad -aad -aad -aad -aad -aad -aab -rpk -atb -atj -atA -atb -atj -atA -atb -aab -aab -aab -aab -aab -aab -aLW -aLW -aMf -aMF -aNa -aNv -aNa -aMf -aPm -aPc -aQK -aOw -aab -aRA -aSn -aSJ -aTl -aTE -aTX -aRA -aMf -aUR -aVn -aVM -aWj -aWK -aXc -aXu -aXK -aMf -aLW -aLG -aLG -aab -aab -aab -aab -aab -aab -aab -aab -ath -atu -atu -ath -aub -aub -ath -atu -atu -ath -auU -auU -avm -avU -avU -awx -awR -awx -axt -axH -axH -axH -avY -axH -azU -axH -avY -azq -axH -aBL -avY -aCt -aCQ -aCu -aCs -aDS -aDS -aDS -aEF -aEZ -aED -aFB -aEE -aGa -aGr -aGB -aGO -aGd -aGd -aHu -aHy -aHJ -aHJ -aHJ -aIx -aII -aIT -aII -aII -aJu -aJL -aII -aIx -aKo -aKv -aKp -aKv -aLj -aLr -aLr -aLr -aLr -aLr -aLr -aLr -aLr -aLj -aNM -aNL -aPa -aPO -aIx -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -"} -(50,1,1) = {" -aab -aab -aab -rpk -rpk -rpk -rpk -rpk -iqj -iqj -rpk -rpk -rpk -rpk -atb -atk -atm -atb -atk -atk -atb -aab -aab -aab -aab -aab -aab -aLW -aLW -aMf -aMG -aNb -aNw -aNY -aMf -aPn -aPc -aQK -aOw -aab -aRA -aRA -ikd -aTm -ikd -aRA -aRA -aMf -aUS -aVo -aVN -aWk -aWL -aXd -aXv -aXL -aMf -aLW -aLG -aLG -aab -aab -aab -aab -aab -aab -aab -aab -ath -atv -atu -ath -aub -aub -ath -atv -atu -ath -avv -auU -avm -avU -avU -awx -awR -awx -axt -axH -ayg -ayq -avY -axH -azU -axH -avY -aBg -aBC -aBM -avY -aCu -aCQ -aCu -aCs -aCs -aCs -aCs -aEF -aFa -aED -aFC -aEE -aGb -aGs -aGC -aGP -aGd -aGd -aHu -aHy -aHJ -aHJ -aIh -aIx -aIH -aII -aIy -aJk -aJv -aIx -aII -aIx -aKp -aKv -aKD -aKv -aLj -aLr -aLr -aLr -aLr -aLr -aLr -aLr -aLr -aLj -aNM -aNL -aPa -aPP -aIx -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -"} -(51,1,1) = {" -aab -aab -aab -rpk -qTC -rpk -uvD -kEf -kEf -kEf -kEf -kEf -kEf -rpk -atb -atb -atb -atb -atb -aus -atb -aab -aab -aab -aab -aab -aab -aLW -aLW -aMf -aMf -aMf -aMf -aMf -aMf -aPo -aQh -aQK -aOw -aOw -aab -aRA -psv -aTn -aSK -aRA -aMf -aMf -aMf -aVp -aMf -aWl -aWM -aXe -aXe -aMf -aMf -aLW -aLG -aLG -aab -aab -aab -aab -aab -aab -aab -aab -ath -ath -atI -ath -aua -aua -ath -ath -atI -ath -ath -auU -ath -avU -awa -awx -awS -awx -avY -avY -avY -avY -avY -azt -azV -aAs -avY -avY -avY -avY -avY -aCs -aCs -aCs -aCs -aDS -aDS -aDS -aEE -aEE -aEE -aEE -aEE -aGc -aGt -aGD -aGP -aGd -aGd -aHu -aHy -aHJ -aHJ -aIi -aIx -aIx -aIx -aIx -aIx -aIx -aIx -aII -aIx -aKo -aKv -aKp -aKv -aLj -aLr -aLr -aLr -aLr -aLr -aLr -aLr -aLr -aLj -aNM -aNL -aPa -aPQ -aIx -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -"} -(52,1,1) = {" -aab -aab -aab -rpk -baD -rpk -myy -kEf -kEf -kEf -kEf -kEf -kEf -rpk -atb -atj -atA -atb -atj -atA -atb -aab -aab -aab -aab -aab -aab -aLW -aLW -aLW -aLW -aMf -aNx -aNZ -aMf -aMf -aQi -aQK -aPc -aOw -aab -aRA -aSL -aTo -aTH -aTY -aUh -aUw -pEp -aQK -aMf -aMf -aMf -aMf -aMf -aMf -aLW -aLW -aLG -aLG -aab -aab -aab -aab -aab -aab -aab -aab -aab -ath -atJ -atJ -awb -awb -awb -awb -awb -ath -bMb -avx -ath -avU -awa -awy -awT -awT -axu -axI -awG -awG -awG -awG -awG -awG -awG -awG -awG -awG -awa -aCv -aCv -aCv -aDD -aCv -aCv -aCv -aEE -aFb -aFb -aFb -aEE -aGd -aGd -aGd -aGd -aHc -aGd -aHu -aHy -aHJ -aHJ -aIj -aCz -aCz -aIU -aHM -aJl -aJw -aIx -aII -aIx -aKp -aKw -aKE -aLf -aLk -aLs -aLs -aLs -aLs -aLs -aLs -aLs -aLs -aLk -aNP -aOv -aPa -aPR -aIx -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -"} -(53,1,1) = {" -aab -aab -aab -rpk -rpk -rpk -cjX -cjX -cjX -kEf -cjX -cjX -cjX -rpk -atb -atl -atk -atb -atk -atk -atb -aab -aab -aab -aab -aab -aab -aLW -aLW -aLW -aLW -aMf -bOb -aOa -aOG -aPp -aQj -aQL -aRo -aOw -aab -aRA -aRA -aRA -aRA -aRA -aMf -aUx -pEp -aUA -aMf -aLW -aLW -aLW -aLW -aLW -aLW -aLW -aLG -aLG -aab -aab -aab -aab -aab -aab -aab -aab -aab -ath -atK -awb -awb -awb -awb -awb -awb -ath -avx -avx -ath -avU -awa -awz -awG -awG -axv -axJ -awG -axK -awG -awG -awG -awG -awG -awG -axK -awG -axJ -bwb -aCR -aCR -aCR -aCR -aCR -aEt -aEE -aFb -aFb -aFb -aEE -aGd -aGd -aGd -aGd -aGd -aGd -aHu -aHy -aHJ -aHJ -aIk -aCz -aCz -aIV -aHM -aHM -aHM -aIx -aII -aIx -aKq -aKx -aKp -aKp -aLj -aLq -aLC -aLC -aLC -aLC -aLC -aLC -aLq -aLj -aNL -aNL -aNL -aPS -aIx -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -"} -(54,1,1) = {" -aab -aab -aab -aab -aab -rpk -kEf -kEf -kEf -kEf -kEf -kEf -kEf -rpk -atb -atb -atb -atb -atb -atb -atb -aab -aab -aab -aab -aab -aab -aLW -aLW -aLW -aMH -aNc -bPb -aOb -aOH -aMf -aQk -aQK -aRp -aOw -aOw -aRn -aMf -aMf -aMf -aRn -aMf -aUy -aMf -aQK -aMf -aMf -aLW -aLW -aLW -aLW -aLW -aLW -aLG -aLG -aab -aab -aab -aab -aab -aab -aab -aab -aab -ath -atL -atL -awb -awb -atL -atL -awb -avl -avx -avx -avm -avU -awa -awA -awG -awG -axw -awx -ayh -ayr -ayr -azu -azW -aAt -ayr -ayr -ayr -aBN -aCa -aCx -aCx -aCx -aCx -aCx -aCx -aEu -aEE -aEE -aEE -aEE -aEE -aCz -aGu -aGu -aCz -aCz -aCz -aCz -aCz -aCz -aCz -aCz -aCz -aCz -aIW -aHM -aJm -aJx -aIx -aII -aIx -aIx -aIx -aIx -aIx -aIx -aIx -aLA -aLA -aLA -aLA -aLA -aLA -aIx -aIx -aIx -aIx -aOZ -aIx -aIx -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -"} -(55,1,1) = {" -aab -aab -aab -aab -aab -rpk -rpk -rpk -rpk -nQJ -rpk -rpk -rpk -rpk -atb -atj -atA -atb -aue -atA -atb -aab -aab -aab -aab -aab -aab -aLW -aLW -aMg -aMI -aMf -aNA -aMf -aOI -aMf -aQl -aQM -aRq -aRD -aPd -aPd -aPd -aPd -aPd -aTZ -aPd -aUz -aUT -aVq -aVO -aMf -aLW -aLW -aLW -aLW -aLW -aLW -aLG -aLG -aab -aab -aab -aab -aab -aab -aab -aab -aab -ath -atM -atY -awb -awb -atY -atY -awb -ath -avx -avx -avm -avU -awa -awB -awG -awG -axx -awx -ayi -awx -awx -awx -azX -awx -awx -awa -awa -awC -aCb -aCy -aCy -aCy -aCy -aDT -aDT -aEv -aCz -aFc -aFc -aFc -aFc -aDE -aCx -aCx -aDE -aFc -aFc -aFc -aCz -aHK -aHZ -aHM -aIA -aCz -aIX -aHM -aHM -aJy -aIx -aII -aII -aII -aII -aII -aIx -aLl -aLp -aLD -aLD -aLD -aLD -aLD -aLD -aMT -aNn -aIx -aII -aII -aIx -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -"} -(56,1,1) = {" -aab -aab -aab -aab -aab -rpk -szh -kEf -szh -kEf -szh -kEf -szh -rpk -atb -atm -atk -atb -atk -atk -atb -aab -aab -aab -aab -aab -aab -aLW -aLW -aMg -aMg -aMf -aNB -aMf -aOJ -aMf -aQm -aQN -aPc -aRE -aPc -aSo -aSO -aSO -aSO -aUa -aPc -aUA -aUU -aVr -aMf -aMf -aLW -aLW -aLW -aLW -aLW -aLW -aLG -aLG -aab -aab -aab -aab -aab -aab -aab -aab -aab -atw -atN -atZ -awb -awb -atN -auT -awb -ath -avy -avN -avm -avU -awa -aae -awG -awG -axy -awx -ayi -awx -ayV -aZb -awG -aAu -aAL -awa -awa -awC -awa -aCz -aCz -aCz -aCz -aDD -aDD -aCz -aCz -aDE -aDE -aDE -aDE -aDE -aGf -aGf -aDE -aDE -aDE -aDE -aCz -aHK -aIa -aHM -aHM -aCz -aIY -aHM -aJn -aJz -aIx -aIx -aIx -aIx -aIx -aII -aIx -aLl -aLp -aLD -aLK -aLD -aLD -aLK -aLD -aMT -aNn -aIx -aII -aIx -aIx -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -"} -(57,1,1) = {" -aab -aab -aab -aab -aab -rpk -kEf -kEf -kEf -kEf -kEf -kEf -kEf -rpk -atb -atb -atb -atb -atb -atb -atb -aab -aab -aab -aab -aab -aab -aLW -aLW -aMg -aMJ -aMf -aNC -aNC -aNC -aNC -aNC -aQO -aRr -aRE -aPc -aMf -aSP -aTp -aSP -aMf -aUi -aUB -aUV -aVs -aMf -aLW -aLW -aLW -aLW -aLW -aLW -aLW -aLG -aLG -aab -aab -aab -aab -aab -aab -aab -aab -aab -atw -atL -atL -awb -awb -atL -atL -awb -ath -ath -ath -ath -ath -ath -ath -ath -ath -awa -awa -ayi -awx -awG -azw -awG -azw -awG -aBh -awx -awC -awG -awa -aCS -aDl -aDE -aCx -aCx -aDE -aEG -aFd -aFd -aFd -aFd -aGe -aCx -aCx -aGQ -aHd -aHm -aHv -aCz -aHK -aIa -aHM -aHM -aCz -aCz -aJg -aCz -aCz -aCz -aab -aab -aab -aIx -aII -aIx -aLl -aLp -aLD -aLD -aLV -aLD -aLD -aLD -aMT -aNn -aIx -aII -aIx -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -"} -(58,1,1) = {" -aab -aab -aab -aab -aab -rpk -kEf -kEf -kEf -kEf -kEf -kEf -kEf -rpk -atb -atj -atA -atb -atj -atA -atb -aab -aab -aab -aab -aab -aab -aLW -aMg -aMg -aMK -aMg -aNC -aOc -aOc -aOc -aNC -aNC -aMf -aRF -aRX -aMf -aSQ -aTq -aTI -aMf -aUj -aUC -aMf -aMf -aMf -aMf -aMf -aLW -aLW -aLW -aLW -aLW -aLG -aLG -aab -aab -aab -aab -aab -aab -aab -aab -aab -atw -awb -awb -awb -awb -awb -awb -awb -awb -awb -awb -awb -ath -awb -awb -awb -axe -axz -awG -ayi -awx -ayW -azx -azY -awG -aAM -aBj -awx -awC -awG -axJ -aCT -aCx -aDF -aCx -aCx -aEw -aCx -aCx -aCx -aCx -aCx -aCx -aCx -aCx -aCx -aCx -aCx -aHw -aHz -aHL -aIb -aHM -aIl -aIJ -aHM -aHM -aHM -aJA -aCz -aab -aab -aab -aIx -aII -aIx -aLl -aLp -aLD -aLK -aLD -aLD -aLK -aLD -aMT -aNn -aIx -aII -aIx -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -"} -(59,1,1) = {" -aab -aab -aab -aab -aab -rpk -kEf -kEf -kEf -etB -kEf -kEf -kEf -rpk -atb -atk -atk -atb -atm -atk -atb -aab -aab -aab -aab -aab -aab -aLW -aMh -aMg -aMg -aMg -aNC -aOd -aOK -aPq -bsb -aNC -aRs -aRG -aRY -aSp -aSR -aTr -aTJ -aUb -aRY -aUD -aUW -aVt -aVP -aWm -aMf -aLW -aLW -aLW -aLW -aLW -aLG -aLG -aab -aab -aab -aab -aab -aab -aab -aab -aab -atw -atP -awb -awb -atJ -auI -atJ -awb -awb -awb -awb -awb -avV -awc -awc -awc -avV -axz -axK -ayi -awx -ayX -azy -axz -awG -awG -awG -awx -awC -axK -aCA -aCU -aCx -aDE -aDU -aEg -byb -aCx -aCx -aCx -aCx -aCx -aCx -aCx -aCx -aGR -aCx -aCx -aCx -aHA -aHM -aHM -aIl -aIB -aIK -aIJ -aHM -aHM -aJB -aCz -aab -aab -aab -aIx -aII -aIx -aLl -aLp -aLD -aLD -aLD -aLD -aLD -aLD -aMT -aNn -aIx -aII -aIx -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -"} -(60,1,1) = {" -aab -aab -aab -aab -aab -rpk -rpk -rpk -rpk -rpk -rpk -rpk -rpk -rpk -atb -atb -atb -atb -atb -atb -atb -aab -aab -aab -aab -aab -aab -aLW -aLW -aMh -aMg -aLW -aNC -aOe -aOL -aPq -aQo -aNC -aRt -aRH -aPc -aPc -aSS -aTq -aTK -aPc -aPc -aRH -aPc -aVu -aVu -aPc -aMf -aLW -aLW -aLW -aLW -aLW -aLG -aLG -aab -aab -aab -aab -aab -aab -aab -aab -aab -ath -atQ -awb -awb -atJ -auJ -atJ -awb -awb -awb -awb -awb -ath -awb -awb -awb -axf -axz -awG -ayi -awx -ayY -azz -azZ -aAv -aAM -aBj -awx -awC -awG -aCb -aCV -aCx -aDG -aCx -aEh -aEy -aEH -aFe -aCx -aCx -aCx -aCx -aCx -aCx -aCx -aCx -aCx -aCx -aHA -aHM -aHM -aIm -aIC -aIL -aIM -aHM -aHM -aHO -aCz -aab -aab -aab -aIx -aII -aIx -aIx -aIx -aLy -aLy -aLy -aLy -aLy -aLy -aIx -aIx -aIx -aII -aIx -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -"} -(61,1,1) = {" -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aLW -aLW -aLW -aLW -aLW -aNC -aOf -aOf -aPq -aQp -aNC -aRu -aQN -aPc -aSq -aMf -aTq -aMf -aUc -aPc -aQN -aUX -aVv -aVQ -aWn -aMf -aLW -aLW -aLW -aLW -aLW -aLG -aLG -aab -aab -aab -aab -aab -aab -aab -aab -aab -ath -ath -aua -aua -ath -ath -ath -ath -avm -awb -avm -ath -ath -ath -ath -ath -ath -awa -awa -ayi -awx -awG -azA -awG -azA -aAN -aAL -awx -awC -awG -awa -aCW -aDm -aDE -aDV -bxb -aDE -aDm -aDm -aDm -aFD -aFM -aCx -aCx -aGE -aFD -aFM -aCx -aCx -aCz -aHN -aHM -aHM -aIm -aIM -aIZ -aHM -aHM -aJC -aCz -aab -aab -aab -aIx -aII -aII -aII -aIx -aLE -aLE -aLE -aLE -aLE -aII -aMS -aII -aII -aII -aIx -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -"} -(62,1,1) = {" -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aLW -aLW -aLW -aLW -aLW -aNC -aOg -aOM -aPq -aPq -aQP -aPc -aPc -aPc -aPc -aST -aTs -aMf -aUd -aPc -aPc -aUY -aVv -aVR -aWo -aMf -aLW -aLW -aLW -aLW -aLW -aLG -aLG -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -ath -aub -aub -ath -auK -auU -auU -auU -auU -avO -avm -avU -awa -awD -awG -awG -awG -awx -ayi -awx -ayV -azB -awG -bvb -aAO -awa -awa -awC -awa -awa -aCz -aCz -aCz -aCz -aCz -aCz -aCz -aDE -aDE -aDE -aDE -aGf -aGf -aDE -aDE -aDE -aGf -aGf -aCz -aHO -aHO -aHM -aHM -aHM -aHM -aHM -aHM -aJD -aCz -aab -aab -aab -aIx -aIx -aIx -aII -aIx -aIx -aIx -aIx -aIx -aIx -aIx -aIx -aNo -aIx -aIx -aIx -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -"} -(63,1,1) = {" -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aLW -aLW -aLW -aLW -aLW -aNC -aOh -aON -aON -aNC -aNC -aPc -aPc -aPc -aPc -aSU -aTs -aMf -aUe -aUk -aUE -aPc -aVw -aVw -aWi -aMf -aLW -aLW -aLW -aLW -aLW -aLG -aLG -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -ath -aub -aub -ath -auL -auU -avg -avn -auU -auU -avm -avU -awa -awE -awG -awG -awG -awx -ayi -awx -awx -awx -azX -awx -awx -awa -awa -awC -awa -aab -aab -aab -aab -aab -aab -aab -aCz -aFc -aFc -aFc -aDE -aCx -aCx -aDE -aFc -aDE -aCx -aCx -aCz -aHO -aHO -aIn -aID -aID -aHM -aHM -aJo -aJE -aCz -aab -aab -aab -aab -aab -aIx -aJk -aJk -aJk -aJk -aJk -aJk -aJk -aJk -aJk -aJv -aIx -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -"} -(64,1,1) = {" -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aLW -aLW -aLW -aLW -aLW -aNC -aNC -aNC -aNC -aNC -aMf -aRv -aRI -aRZ -aSr -aMf -aTq -aTL -aUf -aUl -aUF -aUZ -aVx -aVS -aWp -aMf -aLW -aLW -aLW -aLW -aLW -aLG -aLG -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -ath -aub -aub -ath -auL -auU -avh -avn -auU -auU -avm -avU -awa -awF -awG -awG -awG -awx -ayj -awT -awT -azC -aAa -aAx -awT -awT -awT -aBO -awa -aab -aab -aab -aab -aab -aab -aab -aCz -aCz -aCz -aFc -aDE -aCx -aCx -aDE -aGS -aDE -aCx -aCx -aCz -aCz -aCz -aCz -aCz -aCz -aJa -aJa -aJa -aCz -aCz -aab -aab -aab -aab -aab -aIx -aIx -aIx -aIx -aIx -aIx -aIx -aIx -aIx -aIx -aIx -aIx -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -"} -(65,1,1) = {" -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aLW -aLW -aLW -aLW -aLW -aLW -aLW -aLW -aLW -aLW -aMf -aMf -aMf -aMf -aMf -aMf -aMf -aMf -aMf -aMf -aMf -aMf -aMf -aMf -aMf -aMf -aLW -aLW -aLW -aLW -aLW -aLG -aLG -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -ath -aub -aub -ath -auM -auU -avh -auU -auU -auU -avm -avU -awa -awG -awG -awG -awG -axJ -awG -axK -awG -awG -awG -awG -awG -awG -axK -awG -awa -aab -aab -aab -aab -aab -aab -aab -aab -aab -aCz -aFc -aDE -aGg -aCx -aCx -aCx -aCx -aCx -aCx -aDE -aFc -aCz -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -"} -(66,1,1) = {" -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aLW -aLW -aLW -aLW -aLW -aLW -aLW -aLW -aLW -aLW -aLW -aLW -aLW -aLW -aLW -aLW -aLW -aLW -aLW -aLW -aLW -aLW -aLW -aLW -aLW -aLW -aLW -aLW -aLW -aLW -aLW -aLG -aLG -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -ath -aub -aub -ath -ath -ath -ath -auU -avz -avP -avm -avU -awa -awG -awG -awG -awG -axL -awG -awG -awG -awG -awG -awG -awG -awG -awG -awG -awa -aab -aab -aab -aab -aab -aab -aab -aab -aab -aCz -aFc -aDE -aCx -aCx -aGF -aGT -aHe -aCx -aCx -aDE -aFc -aCz -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -"} -(67,1,1) = {" -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aLG -aLG -aLG -aLG -aLG -aLG -aLG -aLG -aLG -aLG -aLG -aLG -aLG -aLG -aLG -aLG -aLG -aLG -aLG -aLG -aLG -aLG -aLG -aLG -aLG -aLG -aLG -aLG -aLG -aLG -aLG -aLG -aLG -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -ath -aub -aub -ath -auN -auV -ath -auU -auU -auU -avm -avU -awa -awa -awa -awa -awa -awa -ayk -awU -awa -awa -awa -awa -axJ -awa -awa -awa -awa -aab -aab -aab -aab -aab -aab -aab -aab -aab -aCz -aFc -aDE -aCx -aCx -aGG -axK -aCU -aCx -aCx -aDE -aFc -aCz -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -"} -(68,1,1) = {" -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -ath -aub -aub -ath -auO -auO -avi -auU -auU -auU -avm -avU -awa -aab -aab -awU -axA -axA -axA -ays -awU -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aCz -aCz -aCz -aCx -aCx -aCz -aCz -aCz -aCx -aCx -aCz -aCz -aCz -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -"} -(69,1,1) = {" -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -ath -aub -aub -ath -auP -auW -ath -avh -avh -avQ -ath -ath -awa -aab -aab -awU -axB -axN -axA -ayt -awU -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aFq -aFq -aDE -aCx -aCx -aCz -aFq -aCz -aCx -aCx -aDE -aFq -aFq -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -"} -(70,1,1) = {" -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -atx -ath -aua -aua -atx -atx -atx -atx -atx -atx -atx -atx -atx -aab -aab -aab -awU -axA -axA -axA -ayu -awU -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aDE -aCx -aCx -aDE -aab -aDE -aCx -aCx -aDE -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -"} -(71,1,1) = {" -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -atx -atR -atR -atR -atR -atR -atR -atR -atR -atR -atR -atR -atx -aab -aab -aab -awU -axA -axN -axA -ayv -awU -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aCz -aCx -aCx -aDE -aab -aDE -aCx -aCx -aHB -pqa -pqa -iSJ -iSJ -pqa -iSJ -iSJ -pqa -pqa -iSJ -pqa -wyK -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -"} -(72,1,1) = {" -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -atx -atR -atR -auo -auw -auQ -auQ -auQ -auw -auo -atR -atR -atx -aab -aab -aab -awU -axC -axA -axA -axA -awU -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aDE -aCx -aCx -aDE -aab -aDE -aCx -aCx -aDE -pqa -aId -aIp -aIp -aId -aIp -aIp -aId -pqa -aJN -aJX -pqa -pqa -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -"} -(73,1,1) = {" -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -atx -atR -rxE -auo -auz -auz -auz -auz -auz -auo -auo -atR -atx -aab -aab -aab -awU -awU -awU -awU -awU -awU -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aFN -aCx -aCx -aDE -aab -aDE -aCx -aCx -aHC -aHR -aIe -aIe -aIe -aIe -aIe -aIe -aIe -lQU -aIe -aIe -aKg -pqa -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -"} -(74,1,1) = {" -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -atx -atR -rxE -auq -auy -auz -auz -auz -jlA -auo -auo -atR -atx -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aDE -aCx -aCx -aDE -aab -aDE -aCx -aCx -aDE -pqa -aIf -aIq -aIq -aIf -aIq -aIq -aIf -pqa -aJO -aJY -pqa -pqa -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -"} -(75,1,1) = {" -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -atx -atR -rxE -auq -auz -auz -auX -auz -auz -avB -auo -atR -atx -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aCz -aCx -aCx -aDE -aab -aDE -aCx -aCx -aHB -pqa -pqa -iSJ -iSJ -pqa -iSJ -iSJ -pqa -pqa -iSJ -pqa -wyK -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -"} -(76,1,1) = {" -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -atx -atR -rxE -auo -auz -auz -auz -auz -auz -auo -auo -atR -atx -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aDE -aCx -aCx -aCz -aab -aCz -aHn -aCx -aDE -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -"} -(77,1,1) = {" -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -atx -atR -atR -auo -auw -auQ -auQ -auQ -auw -auo -atR -atR -atx -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aDE -aCx -aCx -aCz -aab -aCz -aHo -aCx -aDE -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -"} -(78,1,1) = {" -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -atx -atR -atR -atR -atR -atR -atR -atR -atR -atR -atR -atR -atx -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aCz -aDE -aDE -aCz -aab -aCz -aCz -aCz -aCz -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -"} -(79,1,1) = {" -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -atx -atS -atS -atS -atS -atS -atS -atS -atS -atS -atS -atS -atx -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -"} -(80,1,1) = {" -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -"} -(81,1,1) = {" -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -"} -(82,1,1) = {" -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -"} -(83,1,1) = {" -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -"} -(84,1,1) = {" -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -"} -(85,1,1) = {" -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -"} -(86,1,1) = {" -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -"} -(87,1,1) = {" -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -"} -(88,1,1) = {" -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -"} -(89,1,1) = {" -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -"} -(90,1,1) = {" -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -"} -(91,1,1) = {" -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -"} -(92,1,1) = {" -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -"} -(93,1,1) = {" -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -"} -(94,1,1) = {" -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -"} -(95,1,1) = {" -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -"} -(96,1,1) = {" -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -"} -(97,1,1) = {" -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -"} -(98,1,1) = {" -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -"} -(99,1,1) = {" -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -"} -(100,1,1) = {" -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -"} -(101,1,1) = {" -aaa -aaq -aaq -aaq -aaq -aaq -aaq -aaq -aaq -aaq -aaq -aaa -aaq -aaq -aaq -aaq -aaq -aaq -aaq -aaq -aaq -aaq -aaa -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -"} -(102,1,1) = {" -aac -bKU -wCv -ljS -wCv -bKU -wCv -ljS -ljS -cMe -mjR -aeE -wDD -tcf -wDD -wDD -rJY -wDD -wDD -wjw -uJE -wDD -ajo -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -"} -(103,1,1) = {" -aac -ljS -dBi -niJ -fJf -fJf -niJ -mrn -bKU -cMe -mjR -aeE -rIu -rIu -rIu -rIu -rIu -rIu -vQS -vOe -uIr -vQS -ajo -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -"} -(104,1,1) = {" -aac -ljS -btO -ufC -mjR -mjR -ufC -icO -ljS -cMe -mjR -aeE -rIb -rIu -uzq -jSi -lwD -rIu -rIu -qIk -qIk -rIu -ajo -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -"} -(105,1,1) = {" -aac -wCv -cMe -cay -mjR -mjR -mjR -lWf -wda -cMe -mjR -aeE -sGJ -mmW -dIU -dIU -dIU -dIU -dIU -dIU -dIU -dIU -ajo -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aLF -aLL -aLL -aLL -aLL -aLL -aLL -aLL -aLL -aLL -aLL -aLL -aLL -aLL -aLL -aLL -aLL -aLL -aLL -aLL -aLL -aLL -aLL -aLL -aLL -aLL -aLL -aLL -aLL -aLL -aLL -aLL -aLL -aLL -aLL -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -"} -(106,1,1) = {" -aac -bKU -cMe -mjR -dzK -iIc -mjR -fpW -fJf -moq -mjR -aeE -rIu -rIu -dIU -dIU -pgJ -dIU -pgJ -dIU -dIU -pgJ -ajo -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aLF -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aLF -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -"} -(107,1,1) = {" -aac -wCv -cMe -mjR -jxq -hzB -mjR -bnc -iBC -iBC -iBC -aeE -vgY -rIu -dIU -qir -tDw -tDw -tDw -tDw -tDw -qMl -ajo -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aLF -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aLF -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -"} -(108,1,1) = {" -aac -ljS -cMe -jXw -mjR -mjR -mjR -lWf -wCv -ljS -bKU -aeE -upH -gtn -dIU -pUt -gnX -gnX -gnX -gnX -gnX -dNG -ajo -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aLF -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aLF -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -"} -(109,1,1) = {" -aac -ljS -btO -ufC -mjR -mjR -ufC -icO -ljS -wCv -ljS -aeE -rIu -rIu -dIU -pUt -gnX -gnX -joZ -gnX -gnX -dNG -ajo -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aLF -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aLF -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -"} -(110,1,1) = {" -aac -ljS -tsJ -nJl -iBC -iBC -nJl -dnO -wCv -bKU -wCv -aeE -eRk -rIu -pgJ -pUt -gnX -gnX -gnX -gnX -gnX -dNG -ajo -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aLF -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aLF -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -"} -(111,1,1) = {" -aac -wCv -wda -ljS -ljS -wCv -bKU -ljS -ljS -wCv -ljS -aeE -iJF -lIX -dIU -pUt -gnX -gnX -gnX -gnX -gnX -dNG -ajo -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aLF -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aLF -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -"} -(112,1,1) = {" -aaa -aat -aat -aat -aat -aat -aat -aat -aat -aat -aat -aaa -aat -aat -aat -aat -aat -aat -aat -aat -aat -aat -aaa -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aLF -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aLF -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -"} -(113,1,1) = {" -aac -glo -glo -glo -glo -glo -glo -glo -glo -glo -glo -aeE -efq -efq -efq -efq -efq -efq -efq -efq -efq -efq -ajo -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aLF -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aLF -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -"} -(114,1,1) = {" -aac -dJV -skD -fcv -fcv -fcv -sWJ -skD -skD -skD -skD -aeE -jHQ -tQu -jHQ -mTy -efq -efq -cMP -thM -jHQ -jHQ -ajo -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aLF -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aLF -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -"} -(115,1,1) = {" -aac -jed -rms -qoH -qoH -qoH -xHn -qoH -qoH -qoH -dMH -aeE -wCU -wCU -wCU -euY -rqJ -rqJ -euY -wCU -wCU -wCU -ajo -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aLF -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aLF -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -"} -(116,1,1) = {" -aac -jed -jgg -uJY -uJY -mRm -qZF -jps -uJY -kce -jvm -aeE -lRq -gse -cMQ -piR -vbR -vbR -piR -xqW -gse -oql -ajo -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aLF -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -"} -(117,1,1) = {" -aac -jed -jgg -qRm -uJY -uJY -qZF -uJY -uJY -uJY -xXB -aeE -vbR -vbR -vbR -vbR -vbR -vbR -vbR -vbR -vbR -vbR -ajo -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aLF -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -"} -(118,1,1) = {" -aac -jed -jgg -uJY -uJY -uJY -qZF -uJY -uJY -uJY -xXB -aeE -vbR -dCA -ezo -vbR -vbR -vbR -vbR -vbR -vbR -fxB -ajo -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aLF -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -"} -(119,1,1) = {" -aac -jed -jgg -uJY -uJY -uJY -qZF -uJY -djm -qRm -xXB -aeE -vbR -vbR -dTZ -vbR -mSZ -ntZ -ntZ -kjW -vbR -jhl -ajo -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aLF -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -"} -(120,1,1) = {" -aac -jed -kfk -kBT -xTh -kBT -dZC -kBT -kBT -kBT -occ -aeE -vbR -vbR -xTc -vbR -lSD -mlL -mlL -reF -vbR -jhl -ajo -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -"} -(121,1,1) = {" -aac -bRY -olJ -cqu -cqu -cqu -twU -cqu -cqu -cqu -olJ -aeE -vbR -vbR -dTZ -vbR -xqW -pAh -pAh -cMQ -vbR -bcS -ajo -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -"} -(122,1,1) = {" -aac -glo -glo -glo -glo -glo -glo -glo -glo -glo -glo -aeE -dCA -pWv -quq -vbR -vbR -vbR -vbR -vbR -vbR -vbR -ajo -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -"} -(123,1,1) = {" -aaa -aat -aat -aat -aat -aat -aat -aat -aat -aat -aat -aaa -aat -aat -aat -aat -aat -aat -aat -aat -aat -aat -aaa -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -"} -(124,1,1) = {" -aac -aar -aar -aar -aar -aar -aar -aar -aar -aar -aas -aeE -aeN -aeN -aeN -aeN -aeN -aeN -aeN -aeN -aeN -aeN -ajo -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -"} -(125,1,1) = {" -aac -aar -aar -aaQ -aar -aar -aar -aar -aar -aar -aar -aeE -aeN -aeN -aeN -afj -aeN -aeN -aeN -aeN -afj -aeN -ajo -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -"} -(126,1,1) = {" -aac -aar -aar -aar -aar -aas -aar -aar -aaQ -aar -aar -aeE -aeN -aeN -aeN -aeN -aeN -aeN -aeN -aeN -aeN -aeN -ajo -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -"} -(127,1,1) = {" -aac -aas -aar -aar -aar -aar -aar -aar -aar -aar -aar -aeE -aeN -afj -aeN -aeN -aeN -aeN -afj -aeN -aeN -aeN -ajo -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -"} -(128,1,1) = {" -aac -aar -aar -aar -aar -aar -aar -aar -aar -aar -aaQ -aeE -aeN -aeN -aeN -aeN -aeN -aeN -aeN -aeN -aeN -aeN -ajo -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -"} -(129,1,1) = {" -aac -aar -aar -aar -aas -aar -aar -aaQ -aar -aar -aar -aeE -aeN -aeN -aeN -aeN -aeN -aeN -aeN -aeN -aeN -aeN -ajo -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -"} -(130,1,1) = {" -aac -aar -aar -aar -aar -aas -aar -aar -aar -aar -aar -aeE -aeN -aeN -aeN -afj -aeN -aeN -aeN -aeN -afj -aeN -ajo -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -"} -(131,1,1) = {" -aac -aar -aar -aar -aar -aar -aar -aar -aar -aar -aar -aeE -aeN -aeN -aeN -aeN -aeN -aeN -aeN -aeN -aeN -aeN -ajo -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -"} -(132,1,1) = {" -aac -aar -aaQ -aar -aar -aar -aar -aar -aar -aar -aar -aeE -aeN -afj -aeN -aeN -aeN -aeN -afj -aeN -aeN -aeN -ajo -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -"} -(133,1,1) = {" -aac -aar -aar -aar -aar -aar -aar -aas -aar -aar -aaQ -aeE -aeN -aeN -aeN -aeN -aeN -aeN -aeN -aeN -aeN -aeN -ajo -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -"} -(134,1,1) = {" -aaa -aat -aat -aat -aat -aat -aat -aat -aat -aat -aat -aaa -aat -aat -aat -aat -aat -aat -aat -aat -aat -aat -aaa -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -"} -(135,1,1) = {" -aac -aau -aav -abg -abB -aaw -aaw -aav -aau -abh -abh -aeE -aeO -aeO -aeO -aeO -aeO -aeO -aeO -ait -aeO -aeO -ajo -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -"} -(136,1,1) = {" -aac -aav -aav -abg -aav -aau -aav -aax -aaw -abg -abh -aeE -aeO -afk -aeO -aeO -aeO -aeO -aeO -aeO -agQ -aeO -ajo -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -"} -(137,1,1) = {" -aac -aaw -aaR -aaR -aau -aav -aav -aaw -aau -aau -abh -aeE -aeO -aeO -aeO -agt -aeO -aeO -aeO -aeO -aeO -aeO -ajo -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -"} -(138,1,1) = {" -aac -aax -aaR -aav -abg -aaw -aaw -adp -abh -abh -aav -aeE -aeO -aeO -aeO -aeO -agQ -aeO -aeO -aeO -agt -aeO -ajo -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -"} -(139,1,1) = {" -aac -aaw -aav -aaw -aax -abh -abh -abh -aaw -aau -aaw -aeE -aeO -aeO -aeO -afU -aeO -aeO -afk -aeO -aeO -ait -ajo -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -"} -(140,1,1) = {" -aac -aav -aau -aau -abh -aaw -aau -aau -aaw -aav -aaw -aeE -aeO -aeO -aeO -aeO -aeO -aeO -aeO -ait -aeO -aeO -ajo -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -"} -(141,1,1) = {" -aac -aau -aav -abh -abh -aaw -aax -adq -aav -aaw -aau -aeE -aeO -afk -aeO -aeO -aeO -aeO -agt -aeO -agQ -aeO -ajo -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -"} -(142,1,1) = {" -aac -aaw -aaS -abh -abh -aav -aaw -aau -aaw -aau -aaw -aeE -aeO -aeO -aeO -aeO -aeO -aeO -aeO -aeO -aeO -aeO -ajo -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -"} -(143,1,1) = {" -aac -aax -aaw -aau -aav -abh -abh -aaw -aav -abg -abg -aeE -aeO -aeO -afU -aeO -agQ -aeO -aeO -aeO -agt -aeO -ajo -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -"} -(144,1,1) = {" -aac -aaw -aav -aaw -aax -aaw -acR -aaw -abg -abg -abg -aeE -aeO -aeO -aeO -aeO -aeO -aeO -afk -aeO -aeO -ait -ajo -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -"} -(145,1,1) = {" -aaa -aat -aat -aat -aat -aat -aat -aat -aat -aat -aat -aaa -aat -aat -aat -aat -aat -aat -aat -aat -aat -aat -aaa -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -"} -(146,1,1) = {" -aac -aay -aaT -aaT -abC -ach -ach -ach -ach -ach -aep -aeE -aeP -aeP -uly -oFc -agR -agR -agu -agu -agu -agu -ajo -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -"} -(147,1,1) = {" -aac -aay -aaT -aaT -abC -ach -ach -ach -ach -ach -ach -aeE -aeP -aeP -uly -oFc -agS -aht -aht -aht -aiK -agu -ajo -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -"} -(148,1,1) = {" -aac -aay -aaT -aaT -abC -aci -acS -acS -acS -adZ -ach -aeE -aeP -afl -afV -oFc -agT -ahu -ahu -ahu -aiL -agu -ajo -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -"} -(149,1,1) = {" -aac -aay -aaT -aaT -abC -acj -acT -acT -acT -aea -ach -aeE -aeP -afm -afV -oFc -agT -ahu -ahu -ahu -aiL -agu -ajo -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -"} -(150,1,1) = {" -aac -aay -aaT -aaT -abC -acj -acT -acT -acT -aea -ach -aeE -aeP -afm -afV -oFc -agT -ahu -ahu -ahu -aiL -agu -ajo -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -"} -(151,1,1) = {" -aac -aay -aaT -aaT -abC -acj -acT -acT -acT -aea -ach -aeE -aeP -afm -afV -oFc -agT -ahu -ahu -ahu -aiL -agu -ajo -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -"} -(152,1,1) = {" -aac -aay -aaT -aaT -abC -acj -acT -acT -acT -aea -ach -aeE -aeP -afn -afV -oFc -agT -ahu -ahu -ahu -aiL -agu -ajo -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -"} -(153,1,1) = {" -aac -aay -aaT -aaT -abC -ack -acU -acU -acU -aeb -ach -aeE -aeP -aeP -uly -oFc -agU -ahv -ahv -aiu -aiM -agu -ajo -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -"} -(154,1,1) = {" -aac -aay -aaT -aaT -abC -ach -ach -ach -ach -ach -ach -aeE -aeP -aeP -uly -oFc -agu -agu -agu -agu -agu -agu -ajo -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -"} -(155,1,1) = {" -aac -aay -aaT -aaT -abD -acl -acl -acl -acl -aec -aeq -aeE -aeQ -aeP -uly -tGT -agv -agv -agv -agv -agv -agv -ajo -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -"} -(156,1,1) = {" -aaa -aat -aat -aat -aat -aat -aat -aat -aat -aat -aat -aaa -aat -aat -aat -aat -aat -aat -aat -aat -aat -aat -aaa -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -"} -(157,1,1) = {" -aac -aaz -aaz -aaz -aaz -aaz -aaz -aaz -aaz -aaz -aaz -aeF -aeR -aeR -aeR -aeR -aeR -aeR -aeR -aeR -aeR -aeR -ajo -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -"} -(158,1,1) = {" -aac -aaA -aaU -abi -abi -abi -abi -abi -adN -abi -aaA -aeF -aeS -aeS -aeR -aeS -aeS -aeS -aeS -aeR -aeS -aeS -ajo -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -"} -(159,1,1) = {" -aac -aaB -aaV -aaV -abE -acm -acV -adr -adO -adr -aer -aeF -aeT -aeT -afW -aeT -aeT -aeT -aeT -aiv -aeT -aeT -ajo -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -"} -(160,1,1) = {" -aac -aaB -aaV -aaB -abF -acn -acW -ads -acX -ads -aes -aeF -aeU -afo -afo -afo -agV -ahw -ahX -ahX -ahX -aja -ajo -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -"} -(161,1,1) = {" -aac -aaB -aaV -abj -abG -acn -acX -acX -acX -ads -aes -aeF -aeV -afp -afp -afp -agW -ahx -afp -afp -afp -aiw -ajo -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -"} -(162,1,1) = {" -aac -aaB -aaV -aaB -abH -acn -acW -ads -acX -ads -aes -aeF -aeU -afo -aeV -afp -agW -ahx -afp -aiw -ahX -aja -ajo -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -"} -(163,1,1) = {" -aac -aaB -aaV -aaV -abI -aco -acY -adt -adP -adt -aet -aeF -aeW -afp -aeV -afp -agX -ahx -afp -aiw -afp -ajb -ajo -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -"} -(164,1,1) = {" -aac -aaB -aaV -abk -abJ -abJ -abJ -abJ -abJ -abJ -abJ -aeF -aeX -afq -aeV -afp -agW -ahx -afp -aiw -ahY -ajc -ajo -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -"} -(165,1,1) = {" -aac -aaB -aaV -abl -abK -acp -acp -acp -acp -aed -aaB -aeF -aeV -afp -afp -afp -agW -ahx -afp -afp -afp -aiw -ajo -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -"} -(166,1,1) = {" -aac -aaB -aaV -abm -abL -acq -acq -acq -acq -aee -aaB -aeF -aeX -afq -afq -afq -agY -ahy -ahY -ahY -ahY -ajc -ajo -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -"} -(167,1,1) = {" -aaa -aat -aat -aat -aat -aat -aat -aat -aat -aat -aat -aaa -aat -aat -aat -aat -aat -aat -aat -aat -aat -aat -aaa -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -"} -(168,1,1) = {" -aac -aaC -aaC -aaC -aaC -aaC -aaC -aaC -aaC -aaC -aaC -aeF -aeY -aeY -aeY -aft -agb -ahz -afZ -afZ -afZ -afZ -ajo -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -"} -(169,1,1) = {" -aac -aaC -aaW -aaC -aaC -aaC -aaC -aaC -aaC -aaW -aaC -aeF -aeY -aeY -aeY -aeY -aeY -afs -afZ -aix -aiz -afZ -ajo -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -"} -(170,1,1) = {" -aac -aaC -aaC -aaC -aaC -aaC -aaC -aaC -aaC -aaC -aaC -aeF -aeY -aeY -aeY -aeY -aeY -afs -afY -afZ -afZ -afZ -ajo -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -"} -(171,1,1) = {" -aac -aaC -aaC -aaC -aaW -aaC -aaC -aaW -aaC -aaC -aaC -aeF -aeY -afr -afX -agw -aeY -afs -ahZ -afZ -aiN -afZ -ajo -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -"} -(172,1,1) = {" -aac -aaC -aaC -aaC -aaC -aaC -aaC -aaC -aaC -aaC -aaC -aeF -aeY -afs -afY -agx -aeY -afs -aia -afZ -afZ -aga -ajo -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -"} -(173,1,1) = {" -aac -aaC -aaC -aaC -aaC -aaC -aaC -aaC -aaC -aaC -aaC -aeF -aeY -afs -afZ -agx -aeY -afs -aib -afZ -afZ -afZ -ajo -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -"} -(174,1,1) = {" -aac -aaC -aaC -aaC -aaW -aaC -aaC -aaW -aaC -aaC -aaC -aeF -aeY -afs -afZ -agx -aeY -afs -aic -afZ -aiO -afZ -ajo -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -"} -(175,1,1) = {" -aac -aaC -aaC -aaC -aaC -aaC -aaC -aaC -aaC -aaC -aaC -aeF -aeY -afs -aga -agx -aeY -afs -afZ -aga -afZ -afZ -ajo -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -"} -(176,1,1) = {" -aac -aaC -aaW -aaC -aaC -aaC -aaC -aaC -aaC -aaW -aaC -aeF -aeY -aft -agb -agy -aeY -afs -afZ -aiz -afZ -afZ -ajo -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -"} -(177,1,1) = {" -aac -aaC -aaC -aaC -aaC -aaC -aaC -aaC -aaC -aaC -aaC -aeF -aeY -afr -afX -afX -afX -ahA -afZ -afZ -afZ -aga -ajo -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -"} -(178,1,1) = {" -aaa -aat -aat -aat -aat -aat -aat -aat -aat -aat -aat -aaa -aat -aat -aat -aat -aat -aat -aat -aat -aat -aat -aaa -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -"} -(179,1,1) = {" -aac -aaD -aaD -aaD -aaD -aaD -aaD -aaD -aaD -aaD -aaD -aeF -aeZ -aeZ -aeZ -aeZ -aeZ -aeZ -aeZ -aeZ -aeZ -aeZ -ajo -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -"} -(180,1,1) = {" -aac -aaD -aaD -aaD -aaD -aaD -aaD -aaD -aaD -aaD -aaD -aeF -afa -afa -aeZ -afa -afa -afa -afa -aeZ -afa -afa -ajo -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -"} -(181,1,1) = {" -aac -aaD -aaD -aaD -aaD -aaD -aaD -aaD -aaD -aaD -aaD -aeF -afb -afb -agc -afb -afb -afb -afb -aiA -afb -afb -ajo -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -"} -(182,1,1) = {" -aac -aaD -aaD -aaD -aaD -aaD -aaD -aaD -aaD -aaD -aaD -aeF -afc -afu -afu -afu -agZ -ahB -aid -aid -aid -ajd -ajo -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -"} -(183,1,1) = {" -aac -aaD -aaD -aaD -aaD -aaD -aaD -aaD -aaD -aaD -aaD -aeF -afd -afv -afv -afv -aha -ahC -afv -afv -afv -aje -ajo -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -"} -(184,1,1) = {" -aac -aaD -aaD -aaD -aaD -aaD -aaD -aaD -aaD -aaD -aaD -aeF -afd -afv -afv -afv -aha -ahC -afv -afv -afv -aje -ajo -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -"} -(185,1,1) = {" -aac -aaD -aaD -aaD -aaD -aaD -aaD -aaD -aaD -aaD -aaD -aeF -afd -afv -afv -afv -aha -ahC -afv -afv -afv -aje -ajo -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -"} -(186,1,1) = {" -aac -aaD -aaD -aaD -aaD -aaD -aaD -aaD -aaD -aaD -aaD -aeF -afd -afv -afv -afv -aha -ahC -afv -afv -afv -aje -ajo -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -"} -(187,1,1) = {" -aac -aaD -aaD -aaD -aaD -aaD -aaD -aaD -aaD -aaD -aaD -aeF -afd -afv -afv -afv -aha -ahC -afv -afv -afv -aje -ajo -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -"} -(188,1,1) = {" -aac -aaD -aaD -aaD -aaD -aaD -aaD -aaD -aaD -aaD -aaD -aeF -afe -afw -afw -afw -ahb -ahD -aie -aie -aie -ajf -ajo -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -"} -(189,1,1) = {" -aaa -aat -aat -aat -aat -aat -aat -aat -aat -aat -aat -aaa -aat -aat -aat -aat -aat -aat -aat -aat -aat -aat -aaa -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -"} -(190,1,1) = {" -aac -aaE -aaE -aaE -aaE -aaE -aaE -aaE -aaE -aaE -aaE -aeF -aff -afg -afg -afg -afg -afg -afg -afg -afg -afg -ajo -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -"} -(191,1,1) = {" -aac -aaF -aaF -aaE -aaF -aaF -aaF -aaF -aaE -aaF -aaF -aeF -aff -afg -afg -afx -afx -afx -afx -afg -afg -afg -ajo -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -"} -(192,1,1) = {" -aac -aaG -aaG -abn -aaG -aaG -aaG -aaG -adQ -aaG -aaG -aeF -afg -afg -afg -agz -agz -agz -agz -afg -afg -afg -ajo -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -"} -(193,1,1) = {" -aac -aaH -aaX -aaX -aaX -aaX -acZ -acZ -acZ -acZ -aeu -aeF -afg -afg -agd -agA -ahc -ahc -agC -aiB -afx -afg -ajo -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -"} -(194,1,1) = {" -aac -aaI -aaY -aaY -aaY -aaY -aaY -aaY -aaY -aaY -aev -aeF -afg -afx -age -agB -ahd -ahE -aif -aiB -afx -afg -ajo -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -"} -(195,1,1) = {" -aac -aaI -aaY -aaY -aaY -aaY -aaY -aaY -aaY -aaY -aev -aeF -afg -afx -age -agB -ahe -ahF -aif -aiB -afx -afg -ajo -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -"} -(196,1,1) = {" -aac -aaI -aaY -aaY -aaY -aaY -aaY -aaY -aaY -aaY -aev -aeF -afg -afx -age -agC -ahf -ahf -aig -aiC -afg -afg -ajo -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -"} -(197,1,1) = {" -aac -aaI -aaY -aaY -aaY -aaY -aaY -aaY -aaY -aaY -aev -aeF -afg -afg -afg -agD -agD -agD -agD -afg -afg -afg -ajo -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -"} -(198,1,1) = {" -aac -aaI -aaY -aaY -aaY -aaY -aaY -aaY -aaY -aaY -aev -aeF -tff -bGb -afg -afx -afx -afx -afx -afg -afg -ajg -ajo -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -"} -(199,1,1) = {" -aac -aaJ -aaZ -aaZ -aaZ -aaZ -ada -ada -ada -ada -aew -aeF -afg -bHb -afg -afg -afg -afg -afg -afg -afg -ajg -ajo -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -"} -(200,1,1) = {" -aaa -aaK -aaK -aaK -aaK -aaK -aaK -aaK -aaK -aaK -aaK -aaa -aaK -aaK -aaK -aaK -aaK -aaK -aaK -aaK -aaK -aaK -aaa -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -"} diff --git a/maps/torch/z2_transit.dmm b/maps/torch/z2_transit.dmm deleted file mode 100644 index 9bd383b39b804..0000000000000 --- a/maps/torch/z2_transit.dmm +++ /dev/null @@ -1,40745 +0,0 @@ -//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE -"aa" = ( -/obj/effect/shuttle_landmark/escape_pod/transit/pod15, -/turf/space/transit/north, -/area/space) -"ct" = ( -/obj/effect/shuttle_landmark/ninja/internim, -/turf/space/bluespace, -/area/space) -"cX" = ( -/obj/effect/shuttle_landmark/escape_pod/transit/pod16, -/turf/space/transit/north, -/area/space) -"dj" = ( -/obj/effect/shuttle_landmark/transit/scavver_gantry/two, -/turf/space, -/area/space) -"dK" = ( -/turf/space/transit/north, -/area/space) -"eB" = ( -/obj/effect/shuttle_landmark/escape_pod/out/pod8, -/turf/space, -/area/space) -"eV" = ( -/obj/effect/step_trigger/thrower{ - direction = 1; - name = "thrower_throwup"; - tiles = 0 - }, -/turf/space, -/area/space) -"ft" = ( -/obj/effect/shuttle_landmark/transit/scavver_gantry, -/turf/space, -/area/space) -"gm" = ( -/obj/effect/shuttle_landmark/transit/merc, -/turf/space, -/area/space) -"gT" = ( -/obj/effect/shuttle_landmark/escape_pod/transit/pod11, -/turf/space/transit/east, -/area/space) -"hh" = ( -/obj/effect/shuttle_landmark/escape_pod/transit/pod12, -/turf/space/transit/north, -/area/space) -"hV" = ( -/obj/effect/step_trigger/thrower{ - affect_ghosts = 1; - name = "thrower_leftnostop" - }, -/turf/space/transit/east, -/area/space) -"ka" = ( -/obj/effect/shuttle_landmark/escape_pod/out/pod13, -/turf/space, -/area/space) -"lg" = ( -/obj/effect/shuttle_landmark/escape_pod/transit/pod7, -/turf/space/transit/north, -/area/space) -"mv" = ( -/obj/effect/shuttle_landmark/escape_pod/out/pod15, -/turf/space, -/area/space) -"nN" = ( -/obj/effect/step_trigger/thrower{ - direction = 1; - name = "thrower_throwup"; - tiles = 0 - }, -/turf/space/bluespace, -/area/space) -"oX" = ( -/obj/effect/shuttle_landmark/escape_pod/out/pod10, -/turf/space, -/area/space) -"pB" = ( -/obj/effect/step_trigger/thrower{ - affect_ghosts = 1; - name = "thrower_throwdownside"; - nostop = 1; - stopper = 0; - tiles = 0 - }, -/turf/space, -/area/space) -"pD" = ( -/obj/effect/shuttle_landmark/escape_pod/transit/pod8, -/turf/space/transit/north, -/area/space) -"qg" = ( -/obj/effect/step_trigger/thrower{ - affect_ghosts = 1; - name = "thrower_throwdownside"; - nostop = 1; - stopper = 0; - tiles = 0 - }, -/turf/space/transit/north, -/area/space) -"rD" = ( -/obj/effect/shuttle_landmark/escape_pod/transit/pod17, -/turf/space/transit/north, -/area/space) -"sI" = ( -/obj/effect/step_trigger/thrower{ - direction = 1; - name = "thrower_throwup"; - tiles = 0 - }, -/turf/space/transit/north, -/area/space) -"vK" = ( -/obj/effect/shuttle_landmark/escape_pod/transit/pod13, -/turf/space/transit/north, -/area/space) -"vV" = ( -/obj/effect/step_trigger/thrower{ - affect_ghosts = 1; - name = "thrower_throwdownside"; - nostop = 1; - stopper = 0; - tiles = 0 - }, -/turf/space/bluespace, -/area/space) -"xk" = ( -/obj/effect/step_trigger/thrower{ - affect_ghosts = 1; - direction = 8; - name = "thrower_escapeshuttletop(left)"; - tiles = 0 - }, -/turf/space/bluespace, -/area/space) -"xw" = ( -/obj/effect/shuttle_landmark/transit/scavver_gantry/three, -/turf/space, -/area/space) -"yk" = ( -/obj/effect/shuttle_landmark/transit/torch/aquila, -/turf/space/transit/north, -/area/space) -"yK" = ( -/obj/effect/shuttle_landmark/skipjack/internim, -/turf/space/bluespace, -/area/space) -"zt" = ( -/turf/space{ - icon_state = "black" - }, -/area/space) -"zC" = ( -/obj/effect/shuttle_landmark/transit/torch/exploration_shuttle, -/turf/space/transit/north, -/area/space) -"zK" = ( -/obj/effect/shuttle_landmark/escape_pod/out/pod7, -/turf/space, -/area/space) -"zU" = ( -/obj/effect/step_trigger/teleporter/random{ - affect_ghosts = 1; - name = "escapeshuttle_leave"; - teleport_x = 25; - teleport_x_offset = 245; - teleport_y = 25; - teleport_y_offset = 245; - teleport_z = 6; - teleport_z_offset = 6 - }, -/turf/space{ - icon_state = "black" - }, -/area/space) -"Bg" = ( -/obj/effect/shuttle_landmark/escape_pod/out/pod12, -/turf/space, -/area/space) -"BG" = ( -/obj/effect/shuttle_landmark/escape_pod/out/pod17, -/turf/space, -/area/space) -"BJ" = ( -/obj/effect/shuttle_landmark/escape_pod/out/pod9, -/turf/space, -/area/space) -"DN" = ( -/obj/effect/step_trigger/teleporter/random{ - affect_ghosts = 1; - name = "escapeshuttle_leave"; - teleport_x = 25; - teleport_x_offset = 245; - teleport_y = 25; - teleport_y_offset = 245; - teleport_z = 6; - teleport_z_offset = 6 - }, -/turf/space, -/area/space) -"DW" = ( -/obj/effect/shuttle_landmark/escape_pod/out/pod11, -/turf/space, -/area/space) -"EK" = ( -/obj/effect/step_trigger/teleporter/random{ - affect_ghosts = 1; - name = "escapeshuttle_leave"; - teleport_x = 25; - teleport_x_offset = 245; - teleport_y = 25; - teleport_y_offset = 245; - teleport_z = 6; - teleport_z_offset = 6 - }, -/obj/effect/step_trigger/teleporter/random{ - affect_ghosts = 1; - name = "escapeshuttle_leave"; - teleport_x = 25; - teleport_x_offset = 245; - teleport_y = 25; - teleport_y_offset = 245; - teleport_z = 6; - teleport_z_offset = 6 - }, -/turf/space{ - icon_state = "black" - }, -/area/space) -"Gm" = ( -/obj/effect/shuttle_landmark/ert/internim, -/turf/space/bluespace, -/area/space) -"Gy" = ( -/obj/effect/shuttle_landmark/escape_pod/transit/pod10, -/turf/space/transit/east, -/area/space) -"GN" = ( -/obj/effect/step_trigger/teleporter/random{ - affect_ghosts = 1; - name = "escapeshuttle_leave"; - teleport_x = 25; - teleport_x_offset = 245; - teleport_y = 25; - teleport_y_offset = 245; - teleport_z = 6; - teleport_z_offset = 6 - }, -/turf/space/transit/north, -/area/space) -"GT" = ( -/obj/effect/step_trigger/teleporter/random{ - affect_ghosts = 1; - name = "escapeshuttle_leave"; - teleport_x = 25; - teleport_x_offset = 245; - teleport_y = 25; - teleport_y_offset = 245; - teleport_z = 6; - teleport_z_offset = 6 - }, -/obj/effect/step_trigger/teleporter/random{ - affect_ghosts = 1; - name = "escapeshuttle_leave"; - teleport_x = 25; - teleport_x_offset = 245; - teleport_y = 25; - teleport_y_offset = 245; - teleport_z = 6; - teleport_z_offset = 6 - }, -/turf/space, -/area/space) -"KK" = ( -/turf/space/transit/east, -/area/space) -"Lp" = ( -/obj/effect/step_trigger/thrower{ - affect_ghosts = 1; - name = "thrower_throwdown"; - tiles = 0 - }, -/turf/space/bluespace, -/area/space) -"Pr" = ( -/obj/effect/shuttle_landmark/escape_pod/out/pod6, -/turf/space, -/area/space) -"RR" = ( -/obj/effect/step_trigger/thrower{ - affect_ghosts = 1; - direction = 4; - name = "thrower_escapeshuttletop(right)"; - tiles = 0 - }, -/turf/space/transit/north, -/area/space) -"RU" = ( -/obj/effect/shuttle_landmark/escape_pod/transit/pod9, -/turf/space/transit/north, -/area/space) -"Uc" = ( -/turf/space/bluespace, -/area/space) -"Vj" = ( -/turf/space, -/area/space) -"VK" = ( -/obj/effect/shuttle_landmark/transit/torch/guppy, -/turf/space/transit/north, -/area/space) -"VO" = ( -/obj/effect/step_trigger/thrower{ - affect_ghosts = 1; - direction = 4; - name = "thrower_escapeshuttletop(right)"; - tiles = 0 - }, -/turf/space/bluespace, -/area/space) -"WO" = ( -/obj/effect/shuttle_landmark/escape_pod/transit/pod6, -/turf/space/transit/north, -/area/space) -"XQ" = ( -/obj/effect/shuttle_landmark/escape_pod/out/pod16, -/turf/space, -/area/space) -"Zi" = ( -/obj/effect/step_trigger/thrower{ - direction = 1; - name = "thrower_throwup"; - tiles = 0 - }, -/obj/effect/step_trigger/thrower{ - direction = 1; - name = "thrower_throwup"; - tiles = 0 - }, -/turf/space, -/area/space) - -(1,1,1) = {" -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zt -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -Vj -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -DN -DN -DN -DN -DN -DN -DN -DN -DN -DN -DN -DN -DN -DN -DN -DN -DN -DN -DN -DN -DN -DN -DN -DN -DN -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -"} -(2,1,1) = {" -zU -dK -dK -dK -dK -dK -dK -qg -qg -qg -qg -qg -qg -qg -qg -qg -qg -qg -qg -zU -zt -zU -sI -sI -sI -sI -sI -sI -sI -sI -sI -sI -sI -sI -dK -dK -dK -dK -dK -dK -zU -Vj -zU -KK -KK -KK -KK -KK -KK -KK -KK -KK -KK -KK -KK -KK -KK -KK -zU -Vj -eV -eV -eV -eV -eV -eV -eV -eV -eV -eV -eV -eV -eV -eV -eV -eV -Vj -Vj -Vj -Vj -Vj -Vj -Vj -DN -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -"} -(3,1,1) = {" -zU -dK -dK -dK -dK -qg -qg -qg -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -qg -zU -zt -zU -sI -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -sI -sI -sI -dK -dK -dK -dK -zU -Vj -zU -KK -KK -KK -KK -KK -KK -KK -KK -KK -KK -KK -KK -KK -KK -KK -zU -Vj -eV -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -eV -eV -eV -eV -Zi -Vj -Vj -Vj -DN -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -"} -(4,1,1) = {" -zU -dK -dK -dK -dK -qg -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -qg -zU -zt -zU -sI -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -sI -dK -dK -dK -dK -zU -Vj -zU -KK -KK -KK -KK -KK -KK -KK -KK -KK -KK -KK -KK -KK -KK -KK -zU -Vj -eV -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -eV -Vj -Vj -Vj -DN -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -"} -(5,1,1) = {" -zU -dK -dK -dK -dK -qg -WO -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -qg -zU -zt -zU -sI -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -pD -sI -dK -dK -dK -dK -zU -Vj -zU -KK -KK -KK -KK -KK -KK -KK -KK -KK -KK -KK -KK -KK -KK -KK -zU -Vj -eV -eV -eV -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -eV -eV -Vj -Vj -DN -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -"} -(6,1,1) = {" -zU -dK -dK -dK -dK -qg -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -qg -zU -zt -zU -sI -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -sI -dK -dK -dK -dK -zU -Vj -zU -KK -hV -hV -hV -hV -hV -KK -KK -KK -hV -hV -hV -hV -hV -KK -zU -Vj -Vj -Vj -eV -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -eV -Vj -Vj -DN -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -DW -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -oX -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -"} -(7,1,1) = {" -zU -dK -dK -dK -dK -qg -qg -qg -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -qg -zU -zt -zU -sI -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -sI -sI -sI -dK -dK -dK -dK -zU -Vj -zU -KK -hV -KK -gT -KK -hV -KK -KK -KK -hV -KK -Gy -KK -hV -KK -zU -Vj -Vj -Vj -eV -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -eV -Vj -Vj -DN -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -"} -(8,1,1) = {" -zU -dK -dK -dK -dK -dK -dK -qg -qg -qg -qg -qg -qg -qg -qg -qg -qg -qg -qg -zU -zt -zU -sI -sI -sI -sI -sI -sI -sI -sI -sI -sI -sI -sI -dK -dK -dK -dK -dK -dK -zU -Vj -zU -hV -hV -KK -KK -KK -hV -hV -KK -hV -hV -KK -KK -KK -hV -hV -zU -Vj -Vj -Vj -eV -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -eV -Vj -Vj -DN -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -"} -(9,1,1) = {" -zU -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -zU -zt -zU -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -zU -Vj -zU -hV -KK -KK -KK -KK -KK -hV -KK -hV -KK -KK -KK -KK -KK -hV -zU -Vj -Vj -Vj -eV -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -eV -Vj -Vj -DN -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -"} -(10,1,1) = {" -zU -dK -dK -dK -dK -dK -dK -dK -dK -qg -qg -qg -qg -qg -qg -dK -dK -dK -dK -zU -zt -zU -dK -dK -dK -dK -sI -sI -sI -sI -sI -sI -dK -dK -dK -dK -dK -dK -dK -dK -zU -Vj -zU -hV -KK -KK -KK -KK -KK -hV -KK -hV -KK -KK -KK -KK -KK -hV -zU -Vj -Vj -Vj -eV -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -eV -Vj -Vj -DN -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -"} -(11,1,1) = {" -zU -dK -dK -dK -dK -dK -dK -dK -dK -qg -dK -dK -dK -dK -qg -dK -dK -dK -dK -zU -zt -zU -dK -dK -dK -dK -sI -dK -dK -dK -dK -sI -dK -dK -dK -dK -dK -dK -dK -dK -zU -Vj -zU -hV -KK -KK -KK -KK -KK -hV -KK -hV -KK -KK -KK -KK -KK -hV -zU -Vj -Vj -eV -eV -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -eV -eV -Vj -Vj -DN -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -"} -(12,1,1) = {" -zU -dK -dK -dK -dK -dK -dK -dK -dK -qg -hh -dK -dK -dK -qg -dK -dK -dK -dK -zU -zt -zU -dK -dK -dK -dK -sI -dK -dK -dK -aa -sI -dK -dK -dK -dK -dK -dK -dK -dK -zU -Vj -zU -hV -KK -KK -KK -KK -KK -hV -KK -hV -KK -KK -KK -KK -KK -hV -zU -Vj -Vj -eV -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -eV -eV -Vj -Vj -Vj -DN -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -"} -(13,1,1) = {" -zU -dK -dK -dK -dK -dK -dK -dK -dK -qg -dK -dK -dK -dK -qg -dK -dK -dK -dK -zU -zt -zU -dK -dK -dK -dK -sI -dK -dK -dK -dK -sI -dK -dK -dK -dK -dK -dK -dK -dK -zU -Vj -zU -hV -KK -KK -KK -KK -KK -hV -KK -hV -KK -KK -KK -KK -KK -hV -zU -Vj -Vj -eV -eV -eV -eV -eV -eV -eV -eV -eV -eV -eV -eV -eV -eV -eV -eV -eV -eV -Vj -Vj -Vj -Vj -DN -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -"} -(14,1,1) = {" -zU -dK -dK -dK -dK -dK -dK -dK -dK -qg -qg -qg -qg -qg -qg -dK -dK -dK -dK -zU -zt -zU -dK -dK -dK -dK -sI -sI -sI -sI -sI -sI -dK -dK -dK -dK -dK -dK -dK -dK -zU -Vj -zU -hV -KK -KK -KK -KK -KK -hV -KK -hV -KK -KK -KK -KK -KK -hV -zU -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -DN -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -"} -(15,1,1) = {" -zU -dK -dK -dK -dK -dK -dK -dK -dK -qg -dK -dK -dK -dK -qg -dK -dK -dK -dK -zU -zt -zU -dK -dK -dK -dK -sI -dK -dK -dK -dK -sI -dK -dK -dK -dK -dK -dK -dK -dK -zU -Vj -zU -hV -KK -KK -KK -KK -KK -hV -KK -hV -KK -KK -KK -KK -KK -hV -zU -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -DN -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -"} -(16,1,1) = {" -zU -dK -dK -dK -dK -dK -dK -dK -dK -qg -vK -dK -dK -dK -qg -dK -dK -dK -dK -zU -zt -zU -dK -dK -dK -dK -sI -dK -dK -dK -cX -sI -dK -dK -dK -dK -dK -dK -dK -dK -zU -Vj -zU -hV -KK -KK -KK -KK -KK -hV -KK -hV -KK -KK -KK -KK -KK -hV -zU -DN -DN -DN -DN -DN -DN -DN -DN -DN -DN -DN -DN -DN -DN -DN -DN -DN -DN -DN -DN -DN -DN -DN -DN -DN -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -"} -(17,1,1) = {" -zU -dK -dK -dK -dK -dK -dK -dK -dK -qg -dK -dK -dK -dK -qg -dK -dK -dK -dK -zU -zt -zU -dK -dK -dK -dK -sI -dK -dK -dK -dK -sI -dK -dK -dK -dK -dK -dK -dK -dK -zU -Vj -zU -hV -KK -KK -KK -KK -KK -hV -KK -hV -KK -KK -KK -KK -KK -hV -zU -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -"} -(18,1,1) = {" -zU -dK -dK -dK -dK -dK -dK -dK -dK -qg -qg -qg -qg -qg -qg -dK -dK -dK -dK -zU -zt -zU -dK -dK -dK -dK -sI -sI -sI -sI -sI -sI -dK -dK -dK -dK -dK -dK -dK -dK -zU -Vj -zU -hV -KK -KK -KK -KK -KK -hV -KK -hV -KK -KK -KK -KK -KK -hV -zU -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -"} -(19,1,1) = {" -zU -dK -dK -dK -dK -dK -dK -dK -dK -qg -dK -dK -dK -dK -qg -dK -dK -dK -dK -zU -zt -zU -dK -dK -dK -dK -sI -dK -dK -dK -dK -sI -dK -dK -dK -dK -dK -dK -dK -dK -zU -Vj -zU -hV -hV -hV -hV -hV -hV -hV -KK -hV -hV -hV -hV -hV -hV -hV -zU -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -"} -(20,1,1) = {" -zU -dK -dK -dK -dK -dK -dK -dK -dK -qg -dK -dK -dK -dK -qg -dK -dK -dK -dK -zU -zt -zU -dK -dK -dK -dK -sI -dK -dK -dK -rD -sI -dK -dK -dK -dK -dK -dK -dK -dK -zU -Vj -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -"} -(21,1,1) = {" -zU -dK -dK -dK -dK -dK -dK -dK -dK -qg -dK -dK -dK -dK -qg -dK -dK -dK -dK -zU -zt -zU -dK -dK -dK -dK -sI -dK -dK -dK -dK -sI -dK -dK -dK -dK -dK -dK -dK -dK -zU -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -"} -(22,1,1) = {" -zU -dK -dK -dK -dK -dK -dK -dK -dK -qg -qg -qg -qg -qg -qg -dK -dK -dK -dK -zU -zt -zU -dK -dK -dK -dK -sI -sI -sI -sI -sI -sI -dK -dK -dK -dK -dK -dK -dK -dK -zU -Vj -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -"} -(23,1,1) = {" -zU -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -zU -zt -zU -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -zU -Vj -zU -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -zU -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -"} -(24,1,1) = {" -zU -dK -dK -dK -dK -dK -dK -qg -qg -qg -qg -qg -qg -qg -qg -qg -qg -qg -qg -zU -zt -zU -sI -sI -sI -sI -sI -sI -sI -sI -sI -sI -sI -sI -dK -dK -dK -dK -dK -dK -zU -Vj -zU -Vj -sI -sI -sI -sI -sI -sI -sI -sI -sI -sI -sI -sI -Vj -Vj -Vj -Vj -Vj -Vj -Vj -zU -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -"} -(25,1,1) = {" -zU -dK -dK -dK -dK -qg -qg -qg -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -qg -zU -zt -zU -sI -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -sI -sI -sI -dK -dK -dK -dK -zU -Vj -zU -dK -sI -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -sI -sI -dK -dK -dK -dK -dK -dK -zU -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -"} -(26,1,1) = {" -zU -dK -dK -dK -dK -qg -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -qg -zU -zt -zU -sI -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -sI -dK -dK -dK -dK -zU -Vj -zU -dK -sI -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -sI -dK -dK -dK -dK -dK -dK -zU -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -"} -(27,1,1) = {" -zU -dK -dK -dK -dK -qg -lg -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -qg -zU -zt -zU -sI -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -RU -sI -dK -dK -dK -dK -zU -Vj -zU -dK -sI -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -sI -dK -dK -dK -dK -dK -dK -zU -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Pr -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -eB -Vj -Vj -Vj -Vj -Vj -Vj -"} -(28,1,1) = {" -zU -dK -dK -dK -dK -qg -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -qg -zU -zt -zU -sI -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -sI -dK -dK -dK -dK -zU -Vj -zU -dK -sI -dK -dK -dK -dK -dK -VK -dK -dK -dK -dK -dK -sI -dK -dK -dK -dK -dK -dK -zU -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -"} -(29,1,1) = {" -zU -dK -dK -dK -dK -qg -qg -qg -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -qg -zU -zt -zU -sI -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -sI -sI -sI -dK -dK -dK -dK -zU -Vj -zU -dK -sI -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -sI -dK -dK -dK -dK -dK -dK -zU -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -"} -(30,1,1) = {" -zU -dK -dK -dK -dK -dK -dK -qg -qg -qg -qg -qg -qg -qg -qg -qg -qg -qg -qg -zU -zt -zU -sI -sI -sI -sI -sI -sI -sI -sI -sI -sI -sI -sI -dK -dK -dK -dK -dK -dK -zU -Vj -zU -dK -sI -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -sI -dK -dK -dK -dK -dK -dK -zU -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -"} -(31,1,1) = {" -EK -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -EK -zt -EK -zU -zU -zU -EK -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -EK -Vj -zU -dK -sI -sI -sI -sI -sI -sI -sI -sI -sI -sI -sI -sI -sI -dK -dK -dK -dK -dK -dK -zU -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -"} -(32,1,1) = {" -zt -zt -zt -zt -zt -zt -zt -zt -zt -zt -zt -zt -zt -zt -zt -zt -zt -zt -zt -zt -zt -zt -zt -zt -zt -zt -zt -zt -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -zU -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -zU -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -"} -(33,1,1) = {" -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -GN -zU -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -EK -zU -zU -zU -zU -zU -EK -DN -DN -DN -DN -DN -DN -DN -DN -DN -DN -DN -DN -DN -DN -DN -DN -DN -DN -GT -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -"} -(34,1,1) = {" -zU -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -zU -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -DN -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -DN -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -"} -(35,1,1) = {" -zU -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -zU -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -DN -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -DN -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -"} -(36,1,1) = {" -zU -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -zU -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -DN -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -DN -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -"} -(37,1,1) = {" -zU -dK -dK -dK -dK -dK -dK -dK -dK -dK -qg -qg -qg -qg -qg -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -zU -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -DN -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -DN -DN -DN -DN -DN -DN -DN -DN -DN -Vj -DN -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -"} -(38,1,1) = {" -zU -dK -dK -dK -dK -dK -dK -dK -dK -qg -qg -dK -dK -dK -qg -dK -dK -dK -dK -qg -qg -qg -qg -qg -qg -qg -dK -zU -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -DN -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -DN -DN -DN -DN -DN -Vj -Vj -Vj -Vj -Vj -Vj -Vj -DN -Vj -DN -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -"} -(39,1,1) = {" -zU -dK -dK -dK -dK -dK -dK -dK -dK -qg -dK -dK -dK -dK -qg -dK -dK -dK -qg -qg -dK -dK -dK -dK -dK -qg -dK -zU -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -DN -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -DN -DN -DN -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -DN -Vj -DN -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -zK -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -BJ -Vj -Vj -Vj -Vj -Vj -Vj -"} -(40,1,1) = {" -zU -dK -dK -dK -dK -dK -dK -dK -qg -qg -dK -dK -dK -dK -qg -qg -qg -qg -qg -dK -dK -dK -dK -dK -dK -qg -dK -zU -Vj -Vj -Vj -Vj -Vj -Vj -Vj -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -Vj -Vj -Vj -DN -DN -DN -DN -DN -DN -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -DN -Vj -DN -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -"} -(41,1,1) = {" -zU -dK -dK -dK -dK -dK -dK -qg -qg -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -qg -dK -zU -Vj -Vj -Vj -Vj -Vj -Vj -Vj -zU -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -zU -Vj -Vj -Vj -DN -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -DN -Vj -DN -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -"} -(42,1,1) = {" -zU -dK -dK -dK -qg -qg -qg -qg -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -qg -dK -zU -Vj -Vj -Vj -Vj -Vj -Vj -Vj -zU -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -zU -Vj -Vj -Vj -DN -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -DN -DN -Vj -DN -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -"} -(43,1,1) = {" -zU -dK -dK -dK -qg -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -qg -dK -zU -Vj -Vj -Vj -Vj -Vj -Vj -Vj -zU -Uc -Uc -Uc -Uc -Uc -Uc -Uc -nN -nN -nN -nN -nN -nN -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -zU -Vj -Vj -Vj -DN -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -DN -Vj -Vj -DN -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -"} -(44,1,1) = {" -zU -dK -dK -dK -qg -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -qg -qg -dK -zU -Vj -Vj -Vj -Vj -Vj -Vj -Vj -zU -Uc -Uc -Uc -Uc -Uc -Uc -nN -nN -Uc -Uc -Uc -Uc -nN -nN -Uc -Uc -Uc -Uc -Uc -Uc -Uc -zU -Vj -Vj -DN -DN -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -DN -DN -Vj -DN -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -"} -(45,1,1) = {" -zU -dK -dK -dK -qg -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -zC -dK -dK -dK -dK -dK -dK -dK -dK -qg -dK -dK -zU -Vj -Vj -Vj -Vj -Vj -Vj -Vj -zU -Uc -Uc -Uc -Uc -Uc -Uc -nN -Uc -Uc -Uc -Uc -Uc -Uc -nN -nN -Uc -Uc -Uc -Uc -Uc -Uc -zU -Vj -Vj -DN -DN -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -DN -Vj -DN -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -"} -(46,1,1) = {" -zU -dK -dK -dK -qg -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -qg -qg -dK -zU -Vj -Vj -Vj -Vj -Vj -Vj -Vj -zU -Uc -Uc -nN -nN -nN -nN -nN -Uc -Uc -Uc -Uc -Uc -Uc -Uc -nN -nN -Uc -Uc -Uc -Uc -Uc -zU -Vj -Vj -Vj -DN -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -DN -Vj -DN -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -"} -(47,1,1) = {" -zU -dK -dK -dK -qg -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -qg -dK -zU -Vj -Vj -Vj -Vj -Vj -Vj -Vj -zU -Uc -Uc -nN -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -nN -Uc -Uc -Uc -Uc -Uc -zU -Vj -Vj -DN -DN -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -DN -Vj -DN -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -"} -(48,1,1) = {" -zU -dK -dK -dK -qg -qg -qg -qg -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -qg -dK -zU -Vj -Vj -Vj -Vj -Vj -Vj -Vj -zU -Uc -Uc -nN -nN -nN -nN -nN -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -nN -Uc -Uc -Uc -Uc -Uc -zU -Vj -Vj -DN -DN -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -DN -DN -Vj -DN -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -"} -(49,1,1) = {" -zU -dK -dK -dK -dK -dK -dK -qg -qg -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -qg -dK -zU -Vj -Vj -Vj -Vj -Vj -Vj -Vj -zU -Uc -Uc -Uc -Uc -Uc -Uc -nN -Uc -Uc -Uc -ct -Uc -Uc -Uc -Uc -nN -Uc -Uc -Uc -Uc -Uc -zU -Vj -Vj -Vj -DN -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -gm -Vj -Vj -Vj -Vj -Vj -Vj -Vj -DN -Vj -Vj -DN -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -"} -(50,1,1) = {" -zU -dK -dK -dK -dK -dK -dK -dK -qg -qg -dK -dK -dK -dK -qg -qg -qg -qg -qg -dK -dK -dK -dK -dK -dK -qg -dK -zU -Vj -Vj -Vj -Vj -Vj -Vj -Vj -zU -Uc -Uc -nN -nN -nN -nN -nN -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -nN -Uc -Uc -Uc -Uc -Uc -zU -Vj -Vj -Vj -DN -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -DN -DN -Vj -DN -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Bg -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -mv -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -"} -(51,1,1) = {" -zU -dK -dK -dK -dK -dK -dK -dK -dK -qg -dK -dK -dK -dK -qg -dK -dK -dK -qg -qg -dK -dK -dK -dK -dK -qg -dK -zU -Vj -Vj -Vj -Vj -Vj -Vj -Vj -zU -Uc -Uc -nN -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -nN -Uc -Uc -Uc -Uc -Uc -zU -Vj -Vj -Vj -DN -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -DN -Vj -DN -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -"} -(52,1,1) = {" -zU -dK -dK -dK -dK -dK -dK -dK -dK -qg -qg -dK -dK -dK -qg -dK -dK -dK -dK -qg -qg -qg -qg -qg -qg -qg -dK -zU -Vj -Vj -Vj -Vj -Vj -Vj -Vj -zU -Uc -Uc -nN -nN -nN -nN -nN -Uc -Uc -Uc -Uc -Uc -Uc -Uc -nN -nN -Uc -Uc -Uc -Uc -Uc -zU -Vj -Vj -Vj -DN -DN -DN -DN -DN -DN -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -DN -Vj -DN -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -"} -(53,1,1) = {" -zU -dK -dK -dK -dK -dK -dK -dK -dK -dK -qg -qg -qg -qg -qg -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -zU -Vj -Vj -Vj -Vj -Vj -Vj -Vj -zU -Uc -Uc -Uc -Uc -Uc -Uc -nN -Uc -Uc -Uc -Uc -Uc -Uc -nN -nN -Uc -Uc -Uc -Uc -Uc -Uc -zU -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -DN -DN -DN -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -DN -Vj -DN -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -"} -(54,1,1) = {" -zU -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -zU -Vj -Vj -Vj -Vj -Vj -Vj -Vj -zU -Uc -Uc -Uc -Uc -Uc -Uc -nN -nN -Uc -Uc -Uc -Uc -nN -nN -Uc -Uc -Uc -Uc -Uc -Uc -Uc -zU -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -DN -DN -DN -DN -DN -DN -Vj -Vj -Vj -Vj -Vj -Vj -DN -Vj -DN -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -"} -(55,1,1) = {" -zU -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -zU -Vj -Vj -Vj -Vj -Vj -Vj -Vj -zU -Uc -Uc -Uc -Uc -Uc -Uc -Uc -nN -nN -nN -nN -nN -nN -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -zU -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -DN -DN -DN -DN -DN -DN -DN -DN -Vj -DN -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -"} -(56,1,1) = {" -zU -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -zU -Vj -Vj -Vj -Vj -Vj -Vj -Vj -zU -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -zU -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -DN -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -"} -(57,1,1) = {" -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -GN -zU -Vj -Vj -Vj -Vj -Vj -Vj -Vj -zU -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -zU -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -DN -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -"} -(58,1,1) = {" -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -DN -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -ka -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -XQ -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -"} -(59,1,1) = {" -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -DN -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -DN -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -"} -(60,1,1) = {" -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -DN -DN -DN -DN -DN -DN -DN -DN -DN -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -"} -(61,1,1) = {" -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -zU -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -zU -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -"} -(62,1,1) = {" -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -zU -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -zU -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -"} -(63,1,1) = {" -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -zU -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -zU -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -"} -(64,1,1) = {" -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -zU -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -zU -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -"} -(65,1,1) = {" -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -Vj -zU -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -zU -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -"} -(66,1,1) = {" -zU -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -zU -Vj -zU -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -RR -RR -RR -RR -RR -RR -RR -RR -RR -RR -RR -RR -dK -dK -zU -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -BG -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -"} -(67,1,1) = {" -zU -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -zU -Vj -zU -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -RR -RR -RR -RR -RR -RR -RR -RR -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -RR -dK -dK -zU -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -"} -(68,1,1) = {" -zU -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -zU -Vj -zU -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -RR -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -RR -dK -dK -zU -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -"} -(69,1,1) = {" -zU -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Lp -Lp -Lp -Lp -Lp -Lp -Lp -vV -VO -VO -VO -VO -VO -Uc -zU -Vj -zU -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -RR -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -RR -dK -dK -zU -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -"} -(70,1,1) = {" -zU -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -VO -Lp -Lp -Lp -xk -VO -VO -VO -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -VO -Uc -zU -Vj -zU -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -RR -RR -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -RR -dK -dK -zU -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -"} -(71,1,1) = {" -zU -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -VO -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -VO -Uc -zU -Vj -zU -dK -dK -dK -dK -dK -dK -dK -dK -dK -RR -RR -RR -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -RR -dK -dK -zU -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -"} -(72,1,1) = {" -zU -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -VO -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -VO -Uc -zU -Vj -zU -dK -dK -dK -dK -dK -dK -RR -RR -RR -RR -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -RR -RR -RR -dK -dK -zU -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -"} -(73,1,1) = {" -zU -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Lp -Lp -Lp -Lp -Lp -Lp -Lp -VO -VO -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -VO -Uc -zU -Vj -zU -dK -dK -dK -dK -dK -dK -RR -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -RR -dK -dK -dK -zU -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -"} -(74,1,1) = {" -zU -Uc -Uc -Uc -Uc -Uc -Uc -VO -xk -Uc -Uc -Uc -Uc -Uc -VO -VO -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -VO -Uc -zU -Vj -zU -dK -dK -dK -dK -dK -dK -RR -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -RR -dK -dK -dK -zU -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -"} -(75,1,1) = {" -zU -Uc -Uc -Uc -Uc -Uc -Uc -VO -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -VO -VO -VO -VO -Uc -zU -Vj -zU -dK -dK -dK -dK -dK -dK -RR -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -yk -dK -dK -dK -dK -dK -dK -dK -dK -RR -dK -dK -dK -zU -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -"} -(76,1,1) = {" -zU -Uc -Uc -Uc -Uc -Uc -Uc -VO -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -VO -Uc -Uc -zU -Vj -zU -dK -dK -dK -dK -dK -dK -RR -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -RR -dK -dK -dK -zU -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -"} -(77,1,1) = {" -zU -Uc -Uc -Uc -Uc -Uc -Uc -VO -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -VO -Uc -Uc -zU -Vj -zU -dK -dK -dK -dK -dK -dK -RR -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -RR -dK -dK -dK -zU -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -"} -(78,1,1) = {" -zU -Uc -Uc -Uc -Uc -Uc -Uc -VO -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -VO -Uc -Uc -zU -Vj -zU -dK -dK -dK -dK -dK -dK -RR -RR -RR -RR -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -RR -RR -RR -dK -dK -zU -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -"} -(79,1,1) = {" -zU -Uc -Uc -Uc -Uc -Uc -Uc -VO -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -VO -Uc -Uc -zU -Vj -zU -dK -dK -dK -dK -dK -dK -dK -dK -dK -RR -RR -RR -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -RR -dK -dK -zU -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -"} -(80,1,1) = {" -zU -Uc -Uc -Uc -Uc -Uc -Uc -VO -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -VO -Uc -Uc -zU -Vj -zU -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -RR -RR -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -RR -dK -dK -zU -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -"} -(81,1,1) = {" -zU -Uc -Uc -Uc -Uc -Uc -Uc -VO -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -VO -VO -VO -VO -Uc -zU -Vj -zU -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -RR -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -RR -dK -dK -zU -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -"} -(82,1,1) = {" -zU -Uc -Uc -Uc -Uc -Uc -Uc -VO -VO -Uc -Uc -Uc -Uc -Uc -VO -VO -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -VO -Uc -zU -Vj -zU -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -RR -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -RR -dK -dK -zU -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -"} -(83,1,1) = {" -zU -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Lp -Lp -Lp -Lp -Lp -Lp -Lp -Lp -VO -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -VO -Uc -zU -Vj -zU -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -RR -RR -RR -RR -RR -RR -RR -RR -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -RR -dK -dK -zU -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -"} -(84,1,1) = {" -zU -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -VO -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -VO -Uc -zU -Vj -zU -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -RR -RR -RR -RR -RR -RR -RR -RR -RR -RR -RR -RR -dK -dK -zU -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -"} -(85,1,1) = {" -zU -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Lp -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -VO -Uc -zU -Vj -zU -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -zU -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -"} -(86,1,1) = {" -zU -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -VO -VO -VO -VO -VO -VO -VO -VO -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -VO -Uc -zU -Vj -zU -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -zU -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -"} -(87,1,1) = {" -zU -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Lp -Lp -Lp -Lp -Lp -Lp -Lp -vV -VO -VO -VO -VO -VO -Uc -zU -Vj -zU -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -zU -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -"} -(88,1,1) = {" -zU -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -zU -Vj -zU -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -zU -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -"} -(89,1,1) = {" -zU -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -zU -Vj -zU -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -zU -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -"} -(90,1,1) = {" -zU -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -zU -Vj -zU -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -dK -zU -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -"} -(91,1,1) = {" -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -Vj -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -"} -(92,1,1) = {" -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -"} -(93,1,1) = {" -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -Vj -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -"} -(94,1,1) = {" -zU -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -zU -Vj -zU -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -zU -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -"} -(95,1,1) = {" -zU -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -zU -Vj -zU -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -zU -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -"} -(96,1,1) = {" -zU -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -zU -Vj -zU -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -zU -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -"} -(97,1,1) = {" -zU -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -zU -Vj -zU -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -zU -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -"} -(98,1,1) = {" -zU -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -zU -Vj -zU -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -zU -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -"} -(99,1,1) = {" -zU -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Lp -Lp -Lp -Lp -Lp -Lp -Lp -Lp -Lp -Lp -Lp -Lp -Uc -Uc -zU -Vj -zU -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -zU -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -"} -(100,1,1) = {" -zU -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Lp -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Lp -Uc -Uc -zU -Vj -zU -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Lp -Lp -Lp -Lp -Lp -Lp -Lp -Lp -Lp -Lp -Lp -Lp -Lp -Lp -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -zU -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -"} -(101,1,1) = {" -zU -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Lp -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Lp -Uc -Uc -zU -Vj -zU -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Lp -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Lp -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -zU -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -"} -(102,1,1) = {" -zU -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Lp -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Lp -Uc -Uc -zU -Vj -zU -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Lp -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Lp -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -zU -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -"} -(103,1,1) = {" -zU -Uc -Lp -Lp -Lp -Lp -Lp -Lp -Lp -Lp -Lp -Lp -Lp -Lp -Lp -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Lp -Uc -Uc -zU -Vj -zU -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Lp -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Lp -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -zU -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -"} -(104,1,1) = {" -zU -Uc -Lp -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Lp -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Lp -Uc -Uc -zU -Vj -zU -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Lp -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Lp -Lp -Lp -Lp -Lp -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -zU -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -"} -(105,1,1) = {" -zU -Uc -Lp -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Lp -Lp -Lp -Uc -Uc -Uc -Uc -Lp -Lp -Lp -Lp -Lp -Uc -Uc -zU -Vj -zU -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Lp -Lp -Lp -Lp -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Lp -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -zU -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -"} -(106,1,1) = {" -zU -Uc -Lp -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Lp -Uc -Uc -Uc -Uc -Uc -Uc -zU -Vj -zU -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Lp -Lp -Lp -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Lp -Lp -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -zU -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -"} -(107,1,1) = {" -zU -Uc -Lp -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Lp -Uc -Uc -Uc -Uc -Uc -Uc -zU -Vj -zU -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Lp -Lp -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Lp -Lp -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -zU -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -"} -(108,1,1) = {" -zU -Uc -Lp -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Lp -Lp -Lp -Uc -Uc -Uc -Uc -zU -Vj -zU -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Lp -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Lp -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -zU -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -"} -(109,1,1) = {" -zU -Uc -Lp -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Lp -Uc -Uc -Uc -Uc -zU -Vj -zU -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Lp -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Lp -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -zU -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -"} -(110,1,1) = {" -zU -Uc -Lp -Lp -Lp -Lp -Lp -Lp -Lp -Lp -Lp -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Lp -Uc -Uc -Uc -Uc -zU -Vj -zU -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Lp -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Lp -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -zU -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -"} -(111,1,1) = {" -zU -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Lp -Uc -Uc -Uc -Uc -Gm -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Lp -Uc -Uc -Uc -Uc -zU -Vj -zU -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Lp -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -yK -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Lp -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -zU -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -"} -(112,1,1) = {" -zU -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Lp -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Lp -Uc -Uc -Uc -Uc -zU -Vj -zU -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Lp -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Lp -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -zU -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -"} -(113,1,1) = {" -zU -Uc -Lp -Lp -Lp -Lp -Lp -Lp -Lp -Lp -Lp -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Lp -Uc -Uc -Uc -Uc -zU -Vj -zU -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Lp -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Lp -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -zU -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -"} -(114,1,1) = {" -zU -Uc -Lp -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Lp -Uc -Uc -Uc -Uc -zU -Vj -zU -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Lp -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Lp -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -zU -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -"} -(115,1,1) = {" -zU -Uc -Lp -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Lp -Lp -Lp -Uc -Uc -Uc -Uc -zU -Vj -zU -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Lp -Lp -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Lp -Lp -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -zU -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -"} -(116,1,1) = {" -zU -Uc -Lp -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Lp -Uc -Uc -Uc -Uc -Uc -Uc -zU -Vj -zU -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Lp -Lp -Lp -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Lp -Lp -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -zU -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -"} -(117,1,1) = {" -zU -Uc -Lp -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Lp -Uc -Uc -Uc -Uc -Uc -Uc -zU -Vj -zU -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Lp -Lp -Lp -Lp -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Lp -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -zU -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -"} -(118,1,1) = {" -zU -Uc -Lp -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Lp -Lp -Lp -Uc -Uc -Uc -Uc -Lp -Lp -Lp -Lp -Lp -Uc -Uc -zU -Vj -zU -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Lp -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Lp -Lp -Lp -Lp -Lp -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -zU -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -"} -(119,1,1) = {" -zU -Uc -Lp -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Lp -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Lp -Uc -Uc -zU -Vj -zU -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Lp -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Lp -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -zU -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -"} -(120,1,1) = {" -zU -Uc -Lp -Lp -Lp -Lp -Lp -Lp -Lp -Lp -Lp -Lp -Lp -Lp -Lp -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Lp -Uc -Uc -zU -Vj -zU -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Lp -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Lp -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -zU -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -"} -(121,1,1) = {" -zU -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Lp -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Lp -Uc -Uc -zU -Vj -zU -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Lp -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Lp -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -zU -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -"} -(122,1,1) = {" -zU -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Lp -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Lp -Uc -Uc -zU -Vj -zU -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Lp -Lp -Lp -Lp -Lp -Lp -Lp -Lp -Lp -Lp -Lp -Lp -Lp -Lp -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -zU -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -"} -(123,1,1) = {" -zU -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Lp -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Lp -Uc -Uc -zU -Vj -zU -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -zU -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -"} -(124,1,1) = {" -zU -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Lp -Lp -Lp -Lp -Lp -Lp -Lp -Lp -Lp -Lp -Lp -Lp -Uc -Uc -zU -Vj -zU -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -zU -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -"} -(125,1,1) = {" -zU -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -zU -Vj -zU -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -zU -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -"} -(126,1,1) = {" -zU -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -zU -Vj -zU -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -zU -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -"} -(127,1,1) = {" -zU -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -zU -Vj -zU -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -zU -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -"} -(128,1,1) = {" -zU -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -zU -Vj -zU -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -zU -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -"} -(129,1,1) = {" -zU -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -zU -Vj -zU -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -Uc -zU -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -"} -(130,1,1) = {" -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -Vj -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -zU -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -"} -(131,1,1) = {" -DN -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -"} -(132,1,1) = {" -DN -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -"} -(133,1,1) = {" -DN -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -"} -(134,1,1) = {" -DN -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -"} -(135,1,1) = {" -DN -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -"} -(136,1,1) = {" -DN -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -"} -(137,1,1) = {" -DN -DN -DN -DN -DN -DN -DN -DN -DN -DN -DN -DN -DN -DN -DN -DN -DN -DN -DN -DN -DN -DN -DN -DN -DN -DN -DN -DN -DN -DN -DN -DN -DN -DN -DN -DN -DN -DN -DN -DN -DN -DN -DN -DN -DN -DN -DN -DN -DN -DN -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -"} -(138,1,1) = {" -DN -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -DN -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -DN -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -"} -(139,1,1) = {" -DN -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -DN -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -DN -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -"} -(140,1,1) = {" -DN -Vj -Vj -pB -pB -pB -pB -pB -pB -pB -pB -pB -pB -pB -pB -pB -pB -pB -pB -pB -pB -Vj -Vj -DN -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -DN -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -"} -(141,1,1) = {" -DN -Vj -Vj -pB -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -pB -Vj -Vj -DN -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -DN -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -"} -(142,1,1) = {" -DN -Vj -Vj -pB -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -pB -Vj -Vj -DN -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -DN -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -"} -(143,1,1) = {" -DN -Vj -Vj -pB -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -pB -Vj -Vj -DN -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -DN -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -"} -(144,1,1) = {" -DN -Vj -Vj -pB -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -pB -Vj -Vj -DN -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -DN -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -"} -(145,1,1) = {" -DN -Vj -Vj -pB -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -pB -Vj -Vj -DN -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -DN -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -"} -(146,1,1) = {" -DN -Vj -Vj -pB -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -pB -Vj -Vj -DN -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -DN -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -"} -(147,1,1) = {" -DN -Vj -Vj -pB -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -pB -Vj -Vj -DN -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -DN -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -"} -(148,1,1) = {" -DN -Vj -Vj -pB -Vj -Vj -Vj -Vj -Vj -Vj -Vj -ft -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -pB -Vj -Vj -DN -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -DN -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -"} -(149,1,1) = {" -DN -Vj -Vj -pB -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -pB -Vj -Vj -DN -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -DN -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -"} -(150,1,1) = {" -DN -Vj -Vj -pB -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -pB -Vj -Vj -DN -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -DN -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -"} -(151,1,1) = {" -DN -Vj -Vj -pB -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -pB -Vj -Vj -DN -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -DN -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -"} -(152,1,1) = {" -DN -Vj -Vj -pB -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -pB -Vj -Vj -DN -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -DN -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -"} -(153,1,1) = {" -DN -Vj -Vj -pB -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -pB -Vj -Vj -DN -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -DN -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -"} -(154,1,1) = {" -DN -Vj -Vj -pB -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -pB -Vj -Vj -DN -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -DN -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -"} -(155,1,1) = {" -DN -Vj -Vj -pB -pB -pB -pB -pB -pB -pB -pB -pB -pB -pB -pB -pB -pB -pB -pB -pB -pB -Vj -Vj -DN -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -DN -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -"} -(156,1,1) = {" -DN -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -DN -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -DN -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -"} -(157,1,1) = {" -DN -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -DN -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -DN -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -"} -(158,1,1) = {" -DN -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -DN -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -DN -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -"} -(159,1,1) = {" -DN -DN -DN -DN -DN -DN -DN -DN -DN -DN -DN -DN -DN -DN -DN -DN -DN -DN -DN -DN -DN -DN -DN -DN -DN -DN -DN -DN -DN -DN -DN -DN -DN -DN -DN -DN -DN -DN -DN -DN -DN -DN -DN -DN -DN -DN -DN -DN -DN -DN -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -"} -(160,1,1) = {" -DN -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -DN -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -DN -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -"} -(161,1,1) = {" -DN -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -DN -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -DN -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -"} -(162,1,1) = {" -DN -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -DN -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -DN -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -"} -(163,1,1) = {" -DN -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -DN -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -DN -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -"} -(164,1,1) = {" -DN -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -DN -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -DN -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -"} -(165,1,1) = {" -DN -Vj -Vj -Vj -Vj -pB -pB -pB -pB -pB -pB -pB -pB -pB -pB -pB -pB -pB -Vj -Vj -Vj -Vj -Vj -DN -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -DN -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -"} -(166,1,1) = {" -DN -Vj -Vj -Vj -Vj -pB -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -pB -Vj -Vj -Vj -Vj -Vj -DN -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -DN -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -"} -(167,1,1) = {" -DN -Vj -Vj -Vj -Vj -pB -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -pB -Vj -Vj -Vj -Vj -Vj -DN -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -DN -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -"} -(168,1,1) = {" -DN -Vj -Vj -Vj -Vj -pB -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -pB -Vj -Vj -Vj -Vj -Vj -DN -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -DN -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -"} -(169,1,1) = {" -DN -Vj -Vj -Vj -Vj -pB -Vj -Vj -Vj -Vj -Vj -dj -Vj -Vj -Vj -Vj -Vj -pB -Vj -Vj -Vj -Vj -Vj -DN -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -DN -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -"} -(170,1,1) = {" -DN -Vj -Vj -Vj -Vj -pB -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -pB -Vj -Vj -Vj -Vj -Vj -DN -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -DN -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -"} -(171,1,1) = {" -DN -Vj -Vj -Vj -Vj -pB -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -pB -Vj -Vj -Vj -Vj -Vj -DN -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -DN -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -"} -(172,1,1) = {" -DN -Vj -Vj -Vj -Vj -pB -pB -pB -pB -pB -pB -pB -pB -pB -pB -pB -pB -pB -Vj -Vj -Vj -Vj -Vj -DN -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -DN -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -"} -(173,1,1) = {" -DN -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -DN -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -DN -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -"} -(174,1,1) = {" -DN -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -DN -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -DN -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -"} -(175,1,1) = {" -DN -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -DN -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -DN -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -"} -(176,1,1) = {" -DN -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -DN -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -DN -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -"} -(177,1,1) = {" -DN -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -DN -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -DN -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -"} -(178,1,1) = {" -DN -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -DN -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -DN -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -"} -(179,1,1) = {" -DN -DN -DN -DN -DN -DN -DN -DN -DN -DN -DN -DN -DN -DN -DN -DN -DN -DN -DN -DN -DN -DN -DN -DN -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -DN -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -"} -(180,1,1) = {" -DN -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -DN -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -DN -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -"} -(181,1,1) = {" -DN -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -DN -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -DN -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -"} -(182,1,1) = {" -DN -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -DN -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -DN -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -"} -(183,1,1) = {" -DN -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -DN -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -DN -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -"} -(184,1,1) = {" -DN -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -DN -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -DN -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -"} -(185,1,1) = {" -DN -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -DN -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -DN -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -"} -(186,1,1) = {" -DN -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -DN -DN -DN -DN -DN -DN -Vj -Vj -Vj -Vj -Vj -DN -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -DN -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -"} -(187,1,1) = {" -DN -Vj -Vj -Vj -Vj -DN -DN -DN -DN -DN -DN -DN -DN -Vj -Vj -Vj -Vj -DN -Vj -Vj -Vj -Vj -Vj -DN -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -DN -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -"} -(188,1,1) = {" -DN -Vj -Vj -Vj -Vj -DN -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -DN -DN -Vj -Vj -Vj -Vj -DN -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -DN -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -"} -(189,1,1) = {" -DN -Vj -Vj -Vj -Vj -DN -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -DN -Vj -Vj -Vj -Vj -DN -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -DN -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -"} -(190,1,1) = {" -DN -Vj -Vj -Vj -Vj -DN -Vj -Vj -Vj -Vj -Vj -xw -Vj -Vj -Vj -Vj -Vj -Vj -DN -Vj -Vj -Vj -Vj -DN -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -DN -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -"} -(191,1,1) = {" -DN -Vj -Vj -Vj -Vj -DN -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -DN -Vj -Vj -Vj -Vj -DN -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -DN -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -"} -(192,1,1) = {" -DN -Vj -Vj -Vj -Vj -DN -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -DN -DN -Vj -Vj -Vj -Vj -DN -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -DN -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -"} -(193,1,1) = {" -DN -Vj -Vj -Vj -Vj -DN -DN -DN -DN -DN -DN -DN -DN -Vj -Vj -Vj -Vj -DN -Vj -Vj -Vj -Vj -Vj -DN -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -DN -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -"} -(194,1,1) = {" -DN -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -DN -DN -DN -DN -DN -DN -Vj -Vj -Vj -Vj -Vj -DN -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -DN -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -"} -(195,1,1) = {" -DN -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -DN -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -DN -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -"} -(196,1,1) = {" -DN -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -DN -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -DN -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -"} -(197,1,1) = {" -DN -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -DN -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -DN -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -"} -(198,1,1) = {" -DN -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -DN -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -DN -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -"} -(199,1,1) = {" -DN -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -DN -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -DN -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -"} -(200,1,1) = {" -DN -DN -DN -DN -DN -DN -DN -DN -DN -DN -DN -DN -DN -DN -DN -DN -DN -DN -DN -DN -DN -DN -DN -DN -DN -DN -DN -DN -DN -DN -DN -DN -DN -DN -DN -DN -DN -DN -DN -DN -DN -DN -DN -DN -DN -DN -DN -DN -DN -DN -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -Vj -"} diff --git a/maps/using.dm b/maps/using.dm deleted file mode 100644 index 2cf62e88f9612..0000000000000 --- a/maps/using.dm +++ /dev/null @@ -1,4 +0,0 @@ -//Easily change which map to build by uncommenting ONE below. - -//#include "example\map.dm" -#include "torch\map.dm" diff --git a/maps/~mapsystem/map_preferences.dm b/maps/~mapsystem/map_preferences.dm deleted file mode 100644 index 7657d8dd4f3f1..0000000000000 --- a/maps/~mapsystem/map_preferences.dm +++ /dev/null @@ -1,24 +0,0 @@ -/datum/map - var/load_legacy_saves = FALSE - -/datum/map/proc/preferences_key() - // Must be a filename-safe string. In future if map paths get funky, do some sanitization here. - return path - -// Procs for loading legacy savefile preferences -/datum/map/proc/character_save_path(var/slot) - return "/[path]/character[slot]" - -/datum/map/proc/character_load_path(var/savefile/S, var/slot) - var/original_cd = S.cd - S.cd = "/" - . = private_use_legacy_saves(S, slot) ? "/character[slot]" : "/[path]/character[slot]" - S.cd = original_cd // Attempting to make this call as side-effect free as possible - -/datum/map/proc/private_use_legacy_saves(var/savefile/S, var/slot) - if(!load_legacy_saves) // Check if we're bothering with legacy saves at all - return FALSE - if(!S.dir.Find(path)) // If we cannot find the map path folder, load the legacy save - return TRUE - S.cd = "/[path]" // Finally, if we cannot find the character slot in the map path folder, load the legacy save - return !S.dir.Find("character[slot]") diff --git a/maps/~mapsystem/map_ranks.dm b/maps/~mapsystem/map_ranks.dm deleted file mode 100644 index 3c859c657e721..0000000000000 --- a/maps/~mapsystem/map_ranks.dm +++ /dev/null @@ -1,43 +0,0 @@ -/datum/map - var/list/branch_types // list of branch datum paths for military branches available on this map - var/list/spawn_branch_types // subset of above for branches a player can spawn in with - - var/list/species_to_branch_whitelist = list() // List of branches which are allowed, per species. Checked before the blacklist. - var/list/species_to_branch_blacklist = list() // List of branches which are restricted, per species. - - var/list/species_to_rank_whitelist = list() // List of ranks which are allowed, per branch and species. Checked before the blacklist. - var/list/species_to_rank_blacklist = list() // Lists of ranks which are restricted, per species. - -// The white, and blacklist are type specific, any subtypes (of both species and jobs) have to be added explicitly -/datum/map/proc/is_species_branch_restricted(var/datum/species/S, var/datum/mil_branch/MB) - if(!istype(S) || !istype(MB)) - return TRUE - - var/list/whitelist = species_to_branch_whitelist[S.type] - if(MB.type in whitelist) - return FALSE - - var/list/blacklist = species_to_branch_blacklist[S.type] - if(blacklist) - return (MB.type in blacklist) - - return whitelist // not in the whitelist, no blacklist = bad, no whitelist or blacklist = fine - -/datum/map/proc/is_species_rank_restricted(var/datum/species/S, var/datum/mil_branch/MB, var/datum/mil_rank/MR) - if(!istype(S) || !istype(MB) || !istype(MR)) - return TRUE - - var/list/whitelist_by_branch = species_to_rank_whitelist[S.type] - var/list/whitelist - if(whitelist_by_branch) - whitelist = whitelist_by_branch[MB.type] - if(MR.type in whitelist) - return FALSE - - var/list/blacklist_by_branch = species_to_rank_blacklist[S.type] - if(blacklist_by_branch) - var/list/blacklist = blacklist_by_branch[MB.type] - if(blacklist) - return MR.type in blacklist - - return whitelist diff --git a/maps/~mapsystem/maps.dm b/maps/~mapsystem/maps.dm deleted file mode 100644 index 0212b13b506ce..0000000000000 --- a/maps/~mapsystem/maps.dm +++ /dev/null @@ -1,596 +0,0 @@ -#define DEFAULT_GAME_YEAR_OFFSET 288 - -GLOBAL_DATUM_INIT(using_map, /datum/map, new using_map_DATUM) -GLOBAL_LIST_EMPTY(all_maps) - -var/global/const/MAP_HAS_BRANCH = 1 //Branch system for occupations, togglable -var/global/const/MAP_HAS_RANK = 2 //Rank system, also togglable - -/hook/startup/proc/initialise_map_list() - for(var/type in subtypesof(/datum/map)) - var/datum/map/M - if(type == GLOB.using_map.type) - M = GLOB.using_map - M.setup_map() - else - M = new type - if(!M.path) - log_error("Map '[M]' ([type]) does not have a defined path, not adding to map list!") - else - GLOB.all_maps[M.path] = M - return 1 - - -/datum/map - var/name = "Unnamed Map" - var/full_name = "Unnamed Map" - var/path - var/config_path = null - - var/list/station_levels = list() // Z-levels the station exists on - var/list/admin_levels = list() // Z-levels for admin functionality (Centcom, shuttle transit, etc) - var/list/contact_levels = list() // Z-levels that can be contacted from the station, for eg announcements - var/list/player_levels = list() // Z-levels a character can typically reach - var/list/sealed_levels = list() // Z-levels that don't allow random transit at edge - var/list/empty_levels = null // Empty Z-levels that may be used for various things (currently used by bluespace jump) - var/list/escape_levels = list() // Z-levels that when a player is in, are considered to have 'escaped' after evacuations. - - var/list/map_levels // Z-levels available to various consoles, such as the crew monitor. Defaults to station_levels if unset. - - var/list/base_turf_by_z = list() // Custom base turf by Z-level. Defaults to world.turf for unlisted Z-levels - var/list/usable_email_tlds = list("freemail.net") - var/base_floor_type = /turf/simulated/floor/airless // The turf type used when generating floors between Z-levels at startup. - var/base_floor_area // Replacement area, if a base_floor_type is generated. Leave blank to skip. - - //This list contains the z-level numbers which can be accessed via space travel and the percentile chances to get there. - var/list/accessible_z_levels = list() - - var/list/allowed_jobs //Job datums to use. - //Works a lot better so if we get to a point where three-ish maps are used - //We don't have to C&P ones that are only common between two of them - //That doesn't mean we have to include them with the rest of the jobs though, especially for map specific ones. - //Also including them lets us override already created jobs, letting us keep the datums to a minimum mostly. - //This is probably a lot longer explanation than it needs to be. - - var/station_name = "BAD Station" - var/station_short = "Baddy" - var/dock_name = "THE PirateBay" - var/boss_name = "Captain Roger" - var/boss_short = "Cap'" - var/company_name = "BadMan" - var/company_short = "BM" - var/system_name = "Uncharted System" - - var/list/map_admin_faxes = list() - - var/shuttle_docked_message - var/shuttle_leaving_dock - var/shuttle_called_message - var/shuttle_recall_message - var/emergency_shuttle_docked_message - var/emergency_shuttle_leaving_dock - var/emergency_shuttle_recall_message - - var/list/station_networks = list() // Camera networks that will show up on the console. - - var/list/holodeck_programs = list() // map of string ids to /datum/holodeck_program instances - var/list/holodeck_supported_programs = list() // map of maps - first level maps from list-of-programs string id (e.g. "BarPrograms") to another map - // this is in order to support multiple holodeck program listings for different holodecks - // second level maps from program friendly display names ("Picnic Area") to program string ids ("picnicarea") - // as defined in holodeck_programs - var/list/holodeck_restricted_programs = list() // as above... but EVIL! - - var/allowed_spawns = list("Arrivals Shuttle","Gateway", "Cryogenic Storage", "Cyborg Storage") - var/default_spawn = "Arrivals Shuttle" - var/flags = 0 - var/evac_controller_type = /datum/evacuation_controller - var/use_overmap = 0 //If overmap should be used (including overmap space travel override) - var/overmap_size = 20 //Dimensions of overmap zlevel if overmap is used. - var/overmap_z = 0 //If 0 will generate overmap zlevel on init. Otherwise will populate the zlevel provided. - var/overmap_event_areas = 0 //How many event "clouds" will be generated - - var/list/lobby_screens = list('icons/default_lobby.png') // The list of lobby screen images to pick() from. - var/current_lobby_screen - var/decl/audio/track/lobby_track // The track that will play in the lobby screen. - var/list/lobby_tracks = list() // The list of lobby tracks to pick() from. If left unset will randomly select among all available decl/audio/track subtypes. - var/welcome_sound = 'sound/AI/welcome.ogg' // Sound played on roundstart - - var/default_law_type = /datum/ai_laws/nanotrasen // The default lawset use by synth units, if not overriden by their laws var. - var/security_state = /decl/security_state/default // The default security state system to use. - - var/id_hud_icons = 'icons/mob/hud.dmi' // Used by the ID HUD (primarily sechud) overlay. - - var/num_exoplanets = 0 - var/list/planet_size //dimensions of planet zlevel, defaults to world size. Due to how maps are generated, must be (2^n+1) e.g. 17,33,65,129 etc. Map will just round up to those if set to anything other. - var/away_site_budget = 0 - var/min_offmap_players = 0 - - var/list/loadout_blacklist //list of types of loadout items that will not be pickable - - //Economy stuff - var/starting_money = 75000 //Money in station account - var/department_money = 5000 //Money in department accounts - var/salary_modifier = 1 //Multiplier to starting character money - var/station_departments = list()//Gets filled automatically depending on jobs allowed - - var/supply_currency_name = "Credits" - var/supply_currency_name_short = "Cr." - var/local_currency_name = "thalers" - var/local_currency_name_singular = "thaler" - var/local_currency_name_short = "T" - - var/game_year - - var/list/available_cultural_info = list( - TAG_HOMEWORLD = list( - HOME_SYSTEM_MARS, - HOME_SYSTEM_LUNA, - HOME_SYSTEM_EARTH, - HOME_SYSTEM_VENUS, - HOME_SYSTEM_CERES, - HOME_SYSTEM_PLUTO, - HOME_SYSTEM_TAU_CETI, - HOME_SYSTEM_HELIOS, - HOME_SYSTEM_TERRA, - HOME_SYSTEM_LORRIMAN, - HOME_SYSTEM_CINU , - HOME_SYSTEM_YUKLID, - HOME_SYSTEM_LORDANIA, - HOME_SYSTEM_KINGSTON , - HOME_SYSTEM_FOSTER, - HOME_SYSTEM_CASTILLA, - HOME_SYSTEM_GAIA, - HOME_SYSTEM_MAGNITKA, - HOME_SYSTEM_OTHER - ), - TAG_FACTION = list( - FACTION_SOL_CENTRAL, - FACTION_INDIE_CONFED, - FACTION_CORPORATE, - FACTION_NANOTRASEN, - FACTION_FREETRADE, - FACTION_XYNERGY, - FACTION_HEPHAESTUS, - FACTION_DAIS, - FACTION_EXPEDITIONARY, - FACTION_FLEET, - FACTION_ARMY, - FACTION_PCRC, - FACTION_SAARE, - FACTION_OTHER - ), - TAG_CULTURE = list( - CULTURE_HUMAN_MARTIAN, - CULTURE_HUMAN_MARSTUN, - CULTURE_HUMAN_LUNAPOOR, - CULTURE_HUMAN_LUNARICH, - CULTURE_HUMAN_VENUSIAN, - CULTURE_HUMAN_VENUSLOW, - CULTURE_HUMAN_BELTER, - CULTURE_HUMAN_PLUTO, - CULTURE_HUMAN_EARTH, - CULTURE_HUMAN_CETI, - CULTURE_HUMAN_SPACER, - CULTURE_HUMAN_SPAFRO, - CULTURE_HUMAN_CONFED, - CULTURE_HUMAN_GAIAN, - CULTURE_HUMAN_OTHER, - CULTURE_OTHER - ), - TAG_RELIGION = list( - RELIGION_UNSTATED, - RELIGION_OTHER, - RELIGION_JUDAISM, - RELIGION_HINDUISM, - RELIGION_BUDDHISM, - RELIGION_SIKHISM, - RELIGION_JAINISM, - RELIGION_ISLAM, - RELIGION_CHRISTIANITY, - RELIGION_BAHAI_FAITH, - RELIGION_AGNOSTICISM, - RELIGION_DEISM, - RELIGION_ATHEISM, - RELIGION_THELEMA, - RELIGION_SPIRITUALISM, - RELIGION_SHINTO, - RELIGION_TAOISM - ) - ) - - var/list/default_cultural_info = list( - TAG_HOMEWORLD = HOME_SYSTEM_MARS, - TAG_FACTION = FACTION_SOL_CENTRAL, - TAG_CULTURE = CULTURE_HUMAN_MARTIAN, - TAG_RELIGION = RELIGION_AGNOSTICISM - ) - - var/access_modify_region = list( - ACCESS_REGION_SECURITY = list(access_hos, access_change_ids), - ACCESS_REGION_MEDBAY = list(access_cmo, access_change_ids), - ACCESS_REGION_RESEARCH = list(access_rd, access_change_ids), - ACCESS_REGION_ENGINEERING = list(access_ce, access_change_ids), - ACCESS_REGION_COMMAND = list(access_change_ids), - ACCESS_REGION_GENERAL = list(access_change_ids), - ACCESS_REGION_SUPPLY = list(access_change_ids) - ) - - // List of /datum/department types to instantiate at roundstart. - var/list/departments - - // List of events specific to a map - var/list/map_event_container = list() - - var/maint_all_access = FALSE - -/datum/map/New() - if(!map_levels) - map_levels = station_levels.Copy() - if(!allowed_jobs) - allowed_jobs = list() - for(var/jtype in subtypesof(/datum/job)) - var/datum/job/job = jtype - if(initial(job.available_by_default)) - allowed_jobs += jtype - if(!LAZYLEN(planet_size)) - planet_size = list(world.maxx, world.maxy) - current_lobby_screen = pick(lobby_screens) - game_year = text2num(time2text(world.timeofday, "YYYY")) + DEFAULT_GAME_YEAR_OFFSET - - -/datum/map/proc/get_lobby_track(banned) - var/path = /decl/audio/track/absconditus - var/count = length(lobby_tracks) - if (count != 1) - var/allowed - if (count > 1) - allowed = lobby_tracks - banned - if (!length(allowed)) - allowed = subtypesof(/decl/audio/track) - banned - if (length(allowed)) - path = pickweight(allowed) - else - path = lobby_tracks[1] - return decls_repository.get_decl(path) - - -/datum/map/proc/setup_config(name, value, filename) - switch (name) - if ("use_overmap") use_overmap = text2num_or_default(value, use_overmap) - if ("overmap_z") overmap_z = text2num_or_default(value, overmap_z) - if ("overmap_size") overmap_size = text2num_or_default(value, overmap_size) - if ("overmap_event_areas") overmap_event_areas = text2num_or_default(value, overmap_event_areas) - if ("num_exoplanets") num_exoplanets = text2num_or_default(value, num_exoplanets) - if ("away_site_budget") away_site_budget = text2num_or_default(value, away_site_budget) - if ("station_name") station_name = value - if ("station_short") station_short = value - if ("dock_name") dock_name = value - if ("boss_name") boss_name = value - if ("boss_short") boss_short = value - if ("company_name") company_name = value - if ("company_short") company_short = value - if ("shuttle_docked_message") shuttle_docked_message = value - if ("shuttle_leaving_dock") shuttle_leaving_dock = value - if ("shuttle_called_message") shuttle_called_message = value - if ("shuttle_recall_message") shuttle_recall_message = value - if ("emergency_shuttle_docked_message") emergency_shuttle_docked_message = value - if ("emergency_shuttle_leaving_dock") emergency_shuttle_leaving_dock = value - if ("emergency_shuttle_recall_message") emergency_shuttle_recall_message = value - if ("starting_money") starting_money = text2num_or_default(value, starting_money) - if ("department_money") department_money = text2num_or_default(value, department_money) - if ("salary_modifier") salary_modifier = text2num_or_default(value, salary_modifier) - if ("supply_currency_name") supply_currency_name = value - if ("supply_currency_name_short") supply_currency_name_short = value - if ("local_currency_name") local_currency_name = value - if ("local_currency_name_singular") local_currency_name_singular = value - if ("local_currency_name_short") local_currency_name_short = value - if ("game_year_offset") game_year = text2num(time2text(world.timeofday, "YYYY")) + text2num_or_default(value, DEFAULT_GAME_YEAR_OFFSET) - if ("min_offmap_players") min_offmap_players = text2num_or_default(value, min_offmap_players) - else log_misc("Unknown setting [name] in [filename].") - -/datum/map/proc/setup_map() - lobby_track = get_lobby_track() - world.update_status() - setup_events() - -/datum/map/proc/setup_events() - return - -/datum/map/proc/setup_job_lists() - return - -/datum/map/proc/send_welcome() - return - -/datum/map/proc/perform_map_generation() - return - - -/* It is perfectly possible to create loops with TEMPLATE_FLAG_ALLOW_DUPLICATES and force/allow. Don't. */ -/proc/resolve_site_selection(datum/map_template/ruin/away_site/site, list/selected, list/available, list/unavailable, list/by_type) - var/spawn_cost = 0 - var/player_cost = 0 - if (site in selected) - if (!(site.template_flags & TEMPLATE_FLAG_ALLOW_DUPLICATES)) - return list(spawn_cost, player_cost) - if (!(site.template_flags & TEMPLATE_FLAG_ALLOW_DUPLICATES)) - available -= site - spawn_cost += site.spawn_cost - player_cost += site.player_cost - selected += site - - for (var/forced_type in site.force_ruins) - var/list/costs = resolve_site_selection(by_type[forced_type], selected, available, unavailable, by_type) - spawn_cost += costs[1] - player_cost += costs[2] - - for (var/banned_type in site.ban_ruins) - var/datum/map_template/ruin/away_site/banned = by_type[banned_type] - if (banned in unavailable) - continue - unavailable += banned - available -= banned - - for (var/allowed_type in site.allow_ruins) - var/datum/map_template/ruin/away_site/allowed = by_type[allowed_type] - if (allowed in available) - continue - if (allowed in unavailable) - continue - if (allowed in selected) - if (!(allowed.template_flags & TEMPLATE_FLAG_ALLOW_DUPLICATES)) - continue - available[allowed] = allowed.spawn_weight - - return list(spawn_cost, player_cost) - - -/datum/map/proc/build_away_sites() -#ifdef UNIT_TEST - report_progress("Unit testing, so not loading away sites") - return // don't build away sites during unit testing -#else - report_progress("Loading away sites...") - - var/list/guaranteed = list() - var/list/selected = list() - var/list/available = list() - var/list/unavailable = list() - var/list/by_type = list() - - for (var/site_name in SSmapping.away_sites_templates) - var/datum/map_template/ruin/away_site/site = SSmapping.away_sites_templates[site_name] - if (site.template_flags & TEMPLATE_FLAG_SPAWN_GUARANTEED) - guaranteed += site - if ((site.template_flags & TEMPLATE_FLAG_ALLOW_DUPLICATES) && !(site.template_flags & TEMPLATE_FLAG_RUIN_STARTS_DISALLOWED)) - available[site] = site.spawn_weight - else if (!(site.template_flags & TEMPLATE_FLAG_RUIN_STARTS_DISALLOWED)) - available[site] = site.spawn_weight - by_type[site.type] = site - - var/points = away_site_budget - var/players = -min_offmap_players - for (var/client/C) - ++players - - for (var/datum/map_template/ruin/away_site/site in guaranteed) - var/list/costs = resolve_site_selection(site, selected, available, unavailable, by_type) - points -= costs[1] - players -= costs[2] - - while (points > 0 && length(available)) - var/datum/map_template/ruin/away_site/site = pickweight(available) - if (site.spawn_cost && site.spawn_cost > points || site.player_cost && site.player_cost > players) - unavailable += site - available -= site - continue - var/list/costs = resolve_site_selection(site, selected, available, unavailable, by_type) - points -= costs[1] - players -= costs[2] - - report_progress("Finished selecting away sites ([english_list(selected)]) for [away_site_budget - points] cost of [away_site_budget] budget.") - - for (var/datum/map_template/template in selected) - if (template.load_new_z()) - report_progress("Loaded away site [template]!") - else - report_progress("Failed loading away site [template]!") -#endif - -/datum/map/proc/build_exoplanets() - if(!use_overmap) - return - - for(var/i = 0, i < num_exoplanets, i++) - var/exoplanet_type = pick(subtypesof(/obj/effect/overmap/visitable/sector/exoplanet)) - var/obj/effect/overmap/visitable/sector/exoplanet/new_planet = new exoplanet_type(null, planet_size[1], planet_size[2]) - new_planet.build_level() - -// Used to apply various post-compile procedural effects to the map. -/datum/map/proc/refresh_mining_turfs(var/zlevel) - - set background = 1 - set waitfor = 0 - - for(var/thing in mining_walls["[zlevel]"]) - var/turf/simulated/mineral/M = thing - M.update_icon() - for(var/thing in mining_floors["[zlevel]"]) - var/turf/simulated/floor/asteroid/M = thing - if(istype(M)) - M.updateMineralOverlays() - -/datum/map/proc/get_network_access(var/network) - return 0 - -// By default transition randomly to another zlevel -/datum/map/proc/get_transit_zlevel(var/current_z_level) - var/list/candidates = GLOB.using_map.accessible_z_levels.Copy() - candidates.Remove(num2text(current_z_level)) - - if(!candidates.len) - return current_z_level - return text2num(pickweight(candidates)) - -/datum/map/proc/get_empty_zlevel() - if(empty_levels == null) - INCREMENT_WORLD_Z_SIZE - empty_levels = list(world.maxz) - return pick(empty_levels) - -/datum/map/proc/setup_economy() - for (var/datum/feed_network/N in news_network) - N.CreateFeedChannel("Nyx Daily", "SolGov Minister of Information", 1, 1) - N.CreateFeedChannel("The Gibson Gazette", "Editor Mike Hammers", 1, 1) - - for(var/loc_type in typesof(/datum/trade_destination) - /datum/trade_destination) - var/datum/trade_destination/D = new loc_type - weighted_randomevent_locations[D] = D.viable_random_events.len - weighted_mundaneevent_locations[D] = D.viable_mundane_events.len - - if(!station_account) - station_account = create_account("[station_name()] Primary Account", "[station_name()]", starting_money, ACCOUNT_TYPE_DEPARTMENT) - - for(var/job in allowed_jobs) - var/datum/job/J = job - var/dept = initial(J.department) - if(dept) - station_departments |= dept - - for(var/department in station_departments) - department_accounts[department] = create_account("[department] Account", "[department]", department_money, ACCOUNT_TYPE_DEPARTMENT) - - department_accounts["Vendor"] = create_account("Vendor Account", "Vendor", 0, ACCOUNT_TYPE_DEPARTMENT) - vendor_account = department_accounts["Vendor"] - -/datum/map/proc/map_info(var/client/victim) - to_chat(victim, "

              Current map information

              ") - to_chat(victim, get_map_info()) - -/datum/map/proc/get_map_info() - return "No map information available" - -/datum/map/proc/bolt_saferooms() - return // overriden by torch - -/datum/map/proc/unbolt_saferooms() - return // overriden by torch - -/datum/map/proc/make_maint_all_access(var/radstorm = 0) // parameter used by torch - maint_all_access = TRUE - priority_announcement.Announce("The maintenance access requirement has been revoked on all maintenance airlocks.", "Attention!") - -/datum/map/proc/revoke_maint_all_access(var/radstorm = 0) // parameter used by torch - maint_all_access = FALSE - priority_announcement.Announce("The maintenance access requirement has been readded on all maintenance airlocks.", "Attention!") - -// Access check is of the type requires one. These have been carefully selected to avoid allowing the janitor to see channels he shouldn't -// This list needs to be purged but people insist on adding more cruft to the radio. -/datum/map/proc/default_internal_channels() - return list( - num2text(PUB_FREQ) = list(), - num2text(AI_FREQ) = list(access_synth), - num2text(ENT_FREQ) = list(), - num2text(ERT_FREQ) = list(access_cent_specops), - num2text(COMM_FREQ) = list(access_bridge), - num2text(ENG_FREQ) = list(access_engine_equip, access_atmospherics), - num2text(MED_FREQ) = list(access_medical_equip), - num2text(MED_I_FREQ) = list(access_medical_equip), - num2text(SEC_FREQ) = list(access_security), - num2text(SEC_I_FREQ) = list(access_security), - num2text(SCI_FREQ) = list(access_tox,access_robotics,access_xenobiology), - num2text(SUP_FREQ) = list(access_cargo), - num2text(SRV_FREQ) = list(access_janitor, access_hydroponics), - num2text(HAIL_FREQ) = list(), - ) - -/datum/map/proc/show_titlescreen(client/C) - winset(C, "lobbybrowser", "is-disabled=false;is-visible=true") - - show_browser(C, current_lobby_screen, "file=titlescreen.png;display=0") - show_browser(C, file('html/lobby_titlescreen.html'), "window=lobbybrowser") - -/datum/map/proc/hide_titlescreen(client/C) - if(C.mob) // Check if the client is still connected to something - // Hide title screen, allowing player to see the map - winset(C, "lobbybrowser", "is-disabled=true;is-visible=false") - -/datum/map/proc/roundend_player_status() - for(var/mob/Player in GLOB.player_list) - if(Player.mind && !isnewplayer(Player)) - if(Player.stat != DEAD) - var/turf/playerTurf = get_turf(Player) - if(evacuation_controller.round_over() && evacuation_controller.emergency_evacuation) - if(isStationLevel(playerTurf.z)) - to_chat(Player, "You managed to survive, but were left behind on [station_name()] as [Player.real_name]...") - else if (isEscapeLevel(playerTurf.z)) - to_chat(Player, "You managed to survive the events on [station_name()] as [Player.real_name].") - else - to_chat(Player, "You managed to survive, but were lost far from [station_name()] as [Player.real_name]...") - else if(isAdminLevel(playerTurf.z)) - to_chat(Player, "You successfully underwent crew transfer after events on [station_name()] as [Player.real_name].") - else if(issilicon(Player)) - to_chat(Player, "You remain operational after the events on [station_name()] as [Player.real_name].") - else if (isNotStationLevel(playerTurf.z)) - to_chat(Player, "You managed to survive, but were lost far from [station_name()] as [Player.real_name]...") - else - to_chat(Player, "You got through just another workday on [station_name()] as [Player.real_name].") - else - if(isghost(Player)) - var/mob/observer/ghost/O = Player - if(!O.started_as_observer) - to_chat(Player, "You did not survive the events on [station_name()]...") - else - to_chat(Player, "You did not survive the events on [station_name()]...") - -/datum/map/proc/roundend_statistics() - var/data = list() - data["clients"] = 0 - data["surviving_humans"] = 0 - data["surviving_total"] = 0 //required field for roundend webhook! - data["ghosts"] = 0 //required field for roundend webhook! - data["escaped_humans"] = 0 - data["escaped_total"] = 0 - data["left_behind_total"] = 0 //players who didnt escape and aren't on the station. - data["offship_players"] = 0 - - for(var/mob/M in GLOB.player_list) - if(M.client) - data["clients"]++ - if(M.stat != DEAD) - if (get_crewmember_record(M.real_name || M.name)) - data["surviving_total"]++ - if(ishuman(M)) - data["surviving_humans"]++ - var/area/A = get_area(M) - if(A && (istype(A, /area/shuttle) && isEscapeLevel(A.z))) - data["escaped_total"]++ - if(ishuman(M)) - data["escaped_humans"]++ - if (evacuation_controller.emergency_evacuation && !isEscapeLevel(A.z)) //left behind after evac - data["left_behind_total"]++ - if (!evacuation_controller.emergency_evacuation && isNotStationLevel(A.z)) - data["left_behind_total"]++ - else - data["offship_players"]++ - else if(isghost(M)) - data["ghosts"]++ - return data - -/datum/map/proc/roundend_summary(list/data) - var/desc - if(data["surviving_total"] > 0) - var/survivors = data["surviving_total"] - var/escaped_total = data["escaped_total"] - var/ghosts = data["ghosts"] - var/offship_players = data["offship_players"] - - desc += "There [survivors>1 ? "were [survivors] survivors" : "was one survivor"]" - desc += " ([escaped_total>0 ? escaped_total : "none"] escaped), [offship_players] off-ship player(s)." - data += " and [ghosts] ghosts.
              " - else - desc += "There were no survivors, [data["offship_players"]] off-ship player(s), ([data["ghosts"]] ghosts)." - - return desc - -#undef DEFAULT_GAME_YEAR_OFFSET diff --git a/maps/~mapsystem/maps_announcements.dm b/maps/~mapsystem/maps_announcements.dm deleted file mode 100644 index f3e41815b7418..0000000000000 --- a/maps/~mapsystem/maps_announcements.dm +++ /dev/null @@ -1,65 +0,0 @@ -/datum/map - var/emergency_shuttle_called_message - var/emergency_shuttle_called_sound - - var/command_report_sound - - var/electrical_storm_moderate_sound - var/electrical_storm_major_sound - - var/grid_check_message = "Abnormal activity detected in the %STATION_NAME%'s power system. As a precaution, the %STATION_NAME%'s power must be shut down for an indefinite duration." - var/grid_check_sound - - var/grid_restored_message = "Station power to the %STATION_NAME% will be restored at this time. We apologize for the inconvenience." - var/grid_restored_sound - - var/meteor_detected_message = "Meteors have been detected on a collision course with the %STATION_NAME%." - var/meteor_detected_sound - - var/radiation_detected_message = "High levels of radiation has been detected in proximity of the %STATION_NAME%. Please report to the medical bay if any strange symptoms occur." - var/radiation_detected_sound - - var/space_time_anomaly_message = "Space-time anomalies have been detected on the %STATION_NAME%, please stand-by." - var/space_time_anomaly_sound - - var/unidentified_lifesigns_message = "Unidentified lifesigns detected coming aboard the %STATION_NAME%. Please lockdown all exterior access points, including ducting and ventilation." - var/unidentified_lifesigns_sound - - var/unknown_biological_entities_message = "Unknown biological entities have been detected near the %STATION_NAME%, please stand-by." - - var/lifesign_spawn_sound = 'sound/AI/aliens.ogg' - - var/use_job_frequency_announcement = TRUE - var/use_radio_announcement = TRUE - -/datum/map/proc/emergency_shuttle_called_announcement() - evacuation_controller.evac_called.Announce(replacetext_char(emergency_shuttle_called_message, "%ETA%", "[round(evacuation_controller.get_eta()/60)] minute\s."), new_sound = emergency_shuttle_called_sound) - -/datum/map/proc/grid_check_announcement() - command_announcement.Announce(replacetext_char(grid_check_message, "%STATION_NAME%", station_name()), "Automated Grid Check", new_sound = grid_check_sound) - -/datum/map/proc/grid_restored_announcement() - command_announcement.Announce(replacetext_char(grid_restored_message, "%STATION_NAME%", station_name()), "Power Systems Nominal", new_sound = grid_restored_sound) - -/datum/map/proc/level_x_biohazard_announcement(var/bio_level) - if(!isnum(bio_level)) - CRASH("Expected a number, was: [log_info_line(bio_level)]") - if(bio_level < 1 || bio_level > 9) - CRASH("Expected a number between 1 and 9, was: [log_info_line(bio_level)]") - - command_announcement.Announce("Подтверждено наличие объекта [bio_level] уровня биологической опасности на борту [station_name()]. Весь экипаж должен ликвидировать угрозу.", "Биологическая Угроза", new_sound = level_x_biohazard_sound(bio_level)) - -/datum/map/proc/level_x_biohazard_sound(var/bio_level) - return - -/datum/map/proc/radiation_detected_announcement() - command_announcement.Announce(replacetext_char(radiation_detected_message, "%STATION_NAME%", station_name()), "Неизвестная Аномалия", new_sound = radiation_detected_sound) - -/datum/map/proc/space_time_anomaly_detected_annoncement() - command_announcement.Announce("Space-time anomalies have been detected on the [station_name()]. Internals and voidsuits recommended.", "Anomaly Alert", new_sound = space_time_anomaly_sound) - -/datum/map/proc/unidentified_lifesigns_announcement() - command_announcement.Announce(replacetext_char(unidentified_lifesigns_message, "%STATION_NAME%", station_name()), "Неизвестная Форма Жизни", new_sound = unidentified_lifesigns_sound) - -/datum/map/proc/unknown_biological_entities_announcement() - command_announcement.Announce(replacetext_char(unknown_biological_entities_message, "%STATION_NAME%", station_name()), "Неизвестная Форма Жизни", new_sound = command_report_sound) diff --git a/maps/~mapsystem/maps_areas.dm b/maps/~mapsystem/maps_areas.dm deleted file mode 100644 index 51c6d7b0f9c91..0000000000000 --- a/maps/~mapsystem/maps_areas.dm +++ /dev/null @@ -1,15 +0,0 @@ -/datum/map - /* - Areas where crew members are considered to have safely left the station. - Defaults to all area types on the admin levels if left empty - */ - var/list/post_round_safe_areas = list() - -/datum/map/setup_map() - ..() - if(!post_round_safe_areas.len) - for(var/area/A) - if(isspace(A)) - continue - if(A.z && (A.z in admin_levels)) - post_round_safe_areas += A.type diff --git a/maps/~mapsystem/maps_jobs.dm b/maps/~mapsystem/maps_jobs.dm deleted file mode 100644 index e61ddc0884744..0000000000000 --- a/maps/~mapsystem/maps_jobs.dm +++ /dev/null @@ -1,31 +0,0 @@ -/datum/map - var/species_to_job_whitelist = list(/datum/species/vox = list(/datum/job/ai, /datum/job/cyborg)) - var/species_to_job_blacklist = list() - - var/job_to_species_whitelist = list() - var/job_to_species_blacklist = list() - - var/default_assistant_title = "Assistant" - -// The white, and blacklist are type specific, any subtypes (of both species and jobs) have to be added explicitly -/datum/map/proc/is_species_job_restricted(var/datum/species/S, var/datum/job/J) - if(!istype(S) || !istype(J)) - return TRUE - - var/list/whitelist = species_to_job_whitelist[S.type] - if(whitelist) - return !(J.type in whitelist) - - whitelist = job_to_species_whitelist[J.type] - if(whitelist) - return !(S.type in whitelist) - - var/list/blacklist = species_to_job_blacklist[S.type] - if(blacklist) - return (J.type in blacklist) - - blacklist = job_to_species_blacklist[J.type] - if(blacklist) - return (S.type in blacklist) - - return FALSE diff --git a/maps/~mapsystem/maps_unit_testing.dm b/maps/~mapsystem/maps_unit_testing.dm deleted file mode 100644 index 914249a5547ed..0000000000000 --- a/maps/~mapsystem/maps_unit_testing.dm +++ /dev/null @@ -1,60 +0,0 @@ -/datum/map - var/const/NO_APC = 1 - var/const/NO_VENT = 2 - var/const/NO_SCRUBBER = 4 - - // Unit test vars - var/list/apc_test_exempt_areas = list( - /area/space = NO_SCRUBBER|NO_VENT|NO_APC, - /area/exoplanet = NO_SCRUBBER|NO_VENT|NO_APC - ) - - var/list/area_coherency_test_exempt_areas = list( - /area/space - ) - var/list/area_coherency_test_exempted_root_areas = list( - /area/exoplanet - ) - var/list/area_coherency_test_subarea_count = list() - - // These areas are used specifically by code and need to be broken out somehow - var/list/area_usage_test_exempted_areas = list( - /area/beach, - /area/centcom, - /area/centcom/holding, - /area/centcom/specops, - /area/chapel, - /area/hallway, - /area/maintenance, - /area/medical, - /area/overmap, - /area/rnd, - /area/rnd/xenobiology, - /area/rnd/xenobiology/xenoflora, - /area/rnd/xenobiology/xenoflora_storage, - /area/security, - /area/security/prison, - /area/security/brig, - /area/shuttle, - /area/shuttle/escape, - /area/shuttle/escape/centcom, - /area/shuttle/specops, - /area/shuttle/specops/centcom, - /area/shuttle/syndicate_elite, - /area/shuttle/syndicate_elite/mothership, - /area/shuttle/syndicate_elite/station, - /area/turbolift, - /area/supply, - /area/syndicate_elite_squad, - /area/template_noop - ) - - var/list/area_usage_test_exempted_root_areas = list( - /area/map_template, - /area/exoplanet, - /area/ship - ) - - var/list/area_purity_test_exempt_areas = list() - -/area/ship \ No newline at end of file diff --git a/maps/~unit_tests/unit_testing.dm b/maps/~unit_tests/unit_testing.dm deleted file mode 100644 index 5a4bfa9f2bd16..0000000000000 --- a/maps/~unit_tests/unit_testing.dm +++ /dev/null @@ -1,5 +0,0 @@ -// It's unlikely you'll be able to open these maps without UNIT_TEST defined - -#ifdef UNIT_TEST - #include "virtual_mob_test.dmm" -#endif diff --git a/maps/~unit_tests/virtual_mob_test.dmm b/maps/~unit_tests/virtual_mob_test.dmm deleted file mode 100644 index bbd0928e6b960..0000000000000 --- a/maps/~unit_tests/virtual_mob_test.dmm +++ /dev/null @@ -1,671 +0,0 @@ -//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE -"a" = ( -/turf/space, -/area/space) -"b" = ( -/turf/unsimulated/wall, -/area/test_area/powered_dynamic_lighting) -"c" = ( -/turf/unsimulated/wall, -/area/test_area/requires_power_dynamic_lighting) -"d" = ( -/turf/unsimulated/floor{ - icon_state = "hydrofloor" - }, -/area/test_area/powered_dynamic_lighting) -"e" = ( -/turf/unsimulated/floor{ - icon_state = "hydrofloor" - }, -/area/test_area/requires_power_dynamic_lighting) -"f" = ( -/turf/unsimulated/wall, -/area/test_area/powered_non_dynamic_lighting) -"g" = ( -/turf/unsimulated/wall, -/area/test_area/requires_power_non_dynamic_lighting) -"h" = ( -/obj/effect/landmark/virtual_spawn/two, -/turf/unsimulated/floor{ - icon_state = "hydrofloor" - }, -/area/test_area/powered_non_dynamic_lighting) -"i" = ( -/turf/unsimulated/floor{ - icon_state = "hydrofloor" - }, -/area/test_area/powered_non_dynamic_lighting) -"j" = ( -/obj/effect/landmark/virtual_spawn/one, -/turf/unsimulated/floor{ - icon_state = "hydrofloor" - }, -/area/test_area/powered_non_dynamic_lighting) -"k" = ( -/obj/effect/landmark/virtual_spawn/three, -/turf/unsimulated/floor{ - icon_state = "hydrofloor" - }, -/area/test_area/powered_non_dynamic_lighting) -"l" = ( -/turf/unsimulated/floor{ - icon_state = "hydrofloor" - }, -/area/test_area/requires_power_non_dynamic_lighting) - -(1,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(2,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(3,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(4,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(5,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(6,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(7,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(8,1,1) = {" -a -a -a -a -a -a -a -b -b -b -f -f -f -a -a -a -a -a -a -a -"} -(9,1,1) = {" -a -a -a -a -a -a -a -b -d -b -f -h -f -a -a -a -a -a -a -a -"} -(10,1,1) = {" -a -a -a -a -a -a -a -b -d -b -f -i -f -a -a -a -a -a -a -a -"} -(11,1,1) = {" -a -a -a -a -a -a -a -b -d -b -f -j -f -a -a -a -a -a -a -a -"} -(12,1,1) = {" -a -a -a -a -a -a -a -b -b -b -f -f -f -a -a -a -a -a -a -a -"} -(13,1,1) = {" -a -a -a -a -a -a -a -b -d -b -f -k -f -a -a -a -a -a -a -a -"} -(14,1,1) = {" -a -a -a -a -a -a -a -b -b -b -f -f -f -a -a -a -a -a -a -a -"} -(15,1,1) = {" -a -a -a -a -a -a -a -c -c -c -g -g -g -a -a -a -a -a -a -a -"} -(16,1,1) = {" -a -a -a -a -a -a -a -c -e -c -g -l -g -a -a -a -a -a -a -a -"} -(17,1,1) = {" -a -a -a -a -a -a -a -c -e -c -g -l -g -a -a -a -a -a -a -a -"} -(18,1,1) = {" -a -a -a -a -a -a -a -c -e -c -g -l -g -a -a -a -a -a -a -a -"} -(19,1,1) = {" -a -a -a -a -a -a -a -c -c -c -g -g -g -a -a -a -a -a -a -a -"} -(20,1,1) = {" -a -a -a -a -a -a -a -c -e -c -g -l -g -a -a -a -a -a -a -a -"} -(21,1,1) = {" -a -a -a -a -a -a -a -c -c -c -g -g -g -a -a -a -a -a -a -a -"} -(22,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(23,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(24,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(25,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(26,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(27,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(28,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} diff --git a/nano/To BYOND Cache.bat b/nano/To BYOND Cache.bat deleted file mode 100644 index 8f86cc579b043..0000000000000 --- a/nano/To BYOND Cache.bat +++ /dev/null @@ -1,6 +0,0 @@ -for /D %%i in ("%USERPROFILE%\Documents\BYOND\cache\*") do ( - copy css\* %%i /y - copy images\* %%i /y - copy js\* %%i /y - copy templates\* %%i /y -) diff --git a/nano/css/icons.css b/nano/css/icons.css deleted file mode 100644 index 845637fefca84..0000000000000 --- a/nano/css/icons.css +++ /dev/null @@ -1,320 +0,0 @@ -/* Icons -----------------------------------*/ - -.icon24 -{ - width: 24px; - height: 24px; -} - -.icon24.uiStatusGood -{ - background: url(uiIcons24.png) 0 0 no-repeat; -} - -.icon24.uiStatusAverage -{ - background: url(uiIcons24.png) 0 -24px no-repeat; -} - -.icon24.uiStatusBad -{ - background: url(uiIcons24.png) 0 -48px no-repeat; -} - -/* states and images */ -.uiIcon16 { - float: left; - width: 16px; - height: 16px; - margin: 2px 2px 0 2px; - background-image: url(uiIcons16.png); -} - -.uiLinkPendingIcon { - display: none; - float: left; - width: 16px; - height: 16px; - margin: 2px 2px 0 2px; - background-image: url(uiLinkPendingIcon.gif); -} - -.linkPending .uiIcon16 { - display: none; -} - -.linkPending .uiLinkPendingIcon { - display: block; -} - -/* positioning */ -.uiIcon16.icon-blank { background-position: 16px 16px; } -.uiIcon16.icon-carat-1-n { background-position: 0 0; } -.uiIcon16.icon-carat-1-ne { background-position: -16px 0; } -.uiIcon16.icon-carat-1-e { background-position: -32px 0; } -.uiIcon16.icon-carat-1-se { background-position: -48px 0; } -.uiIcon16.icon-carat-1-s { background-position: -64px 0; } -.uiIcon16.icon-carat-1-sw { background-position: -80px 0; } -.uiIcon16.icon-carat-1-w { background-position: -96px 0; } -.uiIcon16.icon-carat-1-nw { background-position: -112px 0; } -.uiIcon16.icon-carat-2-n-s { background-position: -128px 0; } -.uiIcon16.icon-carat-2-e-w { background-position: -144px 0; } -.uiIcon16.icon-triangle-1-n { background-position: 0 -16px; } -.uiIcon16.icon-triangle-1-ne { background-position: -16px -16px; } -.uiIcon16.icon-triangle-1-e { background-position: -32px -16px; } -.uiIcon16.icon-triangle-1-se { background-position: -48px -16px; } -.uiIcon16.icon-triangle-1-s { background-position: -64px -16px; } -.uiIcon16.icon-triangle-1-sw { background-position: -80px -16px; } -.uiIcon16.icon-triangle-1-w { background-position: -96px -16px; } -.uiIcon16.icon-triangle-1-nw { background-position: -112px -16px; } -.uiIcon16.icon-triangle-2-n-s { background-position: -128px -16px; } -.uiIcon16.icon-triangle-2-e-w { background-position: -144px -16px; } -.uiIcon16.icon-arrow-1-n { background-position: 0 -32px; } -.uiIcon16.icon-arrow-1-ne { background-position: -16px -32px; } -.uiIcon16.icon-arrow-1-e { background-position: -32px -32px; } -.uiIcon16.icon-arrow-1-se { background-position: -48px -32px; } -.uiIcon16.icon-arrow-1-s { background-position: -64px -32px; } -.uiIcon16.icon-arrow-1-sw { background-position: -80px -32px; } -.uiIcon16.icon-arrow-1-w { background-position: -96px -32px; } -.uiIcon16.icon-arrow-1-nw { background-position: -112px -32px; } -.uiIcon16.icon-arrow-2-n-s { background-position: -128px -32px; } -.uiIcon16.icon-arrow-2-ne-sw { background-position: -144px -32px; } -.uiIcon16.icon-arrow-2-e-w { background-position: -160px -32px; } -.uiIcon16.icon-arrow-2-se-nw { background-position: -176px -32px; } -.uiIcon16.icon-arrowstop-1-n { background-position: -192px -32px; } -.uiIcon16.icon-arrowstop-1-e { background-position: -208px -32px; } -.uiIcon16.icon-arrowstop-1-s { background-position: -224px -32px; } -.uiIcon16.icon-arrowstop-1-w { background-position: -240px -32px; } -.uiIcon16.icon-arrowthick-1-n { background-position: 0 -48px; } -.uiIcon16.icon-arrowthick-1-ne { background-position: -16px -48px; } -.uiIcon16.icon-arrowthick-1-e { background-position: -32px -48px; } -.uiIcon16.icon-arrowthick-1-se { background-position: -48px -48px; } -.uiIcon16.icon-arrowthick-1-s { background-position: -64px -48px; } -.uiIcon16.icon-arrowthick-1-sw { background-position: -80px -48px; } -.uiIcon16.icon-arrowthick-1-w { background-position: -96px -48px; } -.uiIcon16.icon-arrowthick-1-nw { background-position: -112px -48px; } -.uiIcon16.icon-arrowthick-2-n-s { background-position: -128px -48px; } -.uiIcon16.icon-arrowthick-2-ne-sw { background-position: -144px -48px; } -.uiIcon16.icon-arrowthick-2-e-w { background-position: -160px -48px; } -.uiIcon16.icon-arrowthick-2-se-nw { background-position: -176px -48px; } -.uiIcon16.icon-arrowthickstop-1-n { background-position: -192px -48px; } -.uiIcon16.icon-arrowthickstop-1-e { background-position: -208px -48px; } -.uiIcon16.icon-arrowthickstop-1-s { background-position: -224px -48px; } -.uiIcon16.icon-arrowthickstop-1-w { background-position: -240px -48px; } -.uiIcon16.icon-arrowreturnthick-1-w { background-position: 0 -64px; } -.uiIcon16.icon-arrowreturnthick-1-n { background-position: -16px -64px; } -.uiIcon16.icon-arrowreturnthick-1-e { background-position: -32px -64px; } -.uiIcon16.icon-arrowreturnthick-1-s { background-position: -48px -64px; } -.uiIcon16.icon-arrowreturn-1-w { background-position: -64px -64px; } -.uiIcon16.icon-arrowreturn-1-n { background-position: -80px -64px; } -.uiIcon16.icon-arrowreturn-1-e { background-position: -96px -64px; } -.uiIcon16.icon-arrowreturn-1-s { background-position: -112px -64px; } -.uiIcon16.icon-arrowrefresh-1-w { background-position: -128px -64px; } -.uiIcon16.icon-arrowrefresh-1-n { background-position: -144px -64px; } -.uiIcon16.icon-arrowrefresh-1-e { background-position: -160px -64px; } -.uiIcon16.icon-arrowrefresh-1-s { background-position: -176px -64px; } -.uiIcon16.icon-arrow-4 { background-position: 0 -80px; } -.uiIcon16.icon-arrow-4-diag { background-position: -16px -80px; } -.uiIcon16.icon-extlink { background-position: -32px -80px; } -.uiIcon16.icon-newwin { background-position: -48px -80px; } -.uiIcon16.icon-refresh { background-position: -64px -80px; } -.uiIcon16.icon-shuffle { background-position: -80px -80px; } -.uiIcon16.icon-transfer-e-w { background-position: -96px -80px; } -.uiIcon16.icon-transferthick-e-w { background-position: -112px -80px; } -.uiIcon16.icon-radiation { background-position: -128px -80px; } -.uiIcon16.icon-biohazard { background-position: -144px -80px;} -.uiIcon16.icon-first-aid { background-position: -160px -80px;} -.uiIcon16.icon-square { background-position: -176px -80px;} -.uiIcon16.icon-check-square { background-position: -192px -80px;} -.uiIcon16.icon-folder-collapsed { background-position: 0 -96px; } -.uiIcon16.icon-folder-open { background-position: -16px -96px; } -.uiIcon16.icon-document { background-position: -32px -96px; } -.uiIcon16.icon-document-b { background-position: -48px -96px; } -.uiIcon16.icon-note { background-position: -64px -96px; } -.uiIcon16.icon-mail-closed { background-position: -80px -96px; } -.uiIcon16.icon-mail-open { background-position: -96px -96px; } -.uiIcon16.icon-suitcase { background-position: -112px -96px; } -.uiIcon16.icon-comment { background-position: -128px -96px; } -.uiIcon16.icon-person { background-position: -144px -96px; } -.uiIcon16.icon-print { background-position: -160px -96px; } -.uiIcon16.icon-trash { background-position: -176px -96px; } -.uiIcon16.icon-locked { background-position: -192px -96px; } -.uiIcon16.icon-unlocked { background-position: -208px -96px; } -.uiIcon16.icon-bookmark { background-position: -224px -96px; } -.uiIcon16.icon-tag { background-position: -240px -96px; } -.uiIcon16.icon-home { background-position: 0 -112px; } -.uiIcon16.icon-flag { background-position: -16px -112px; } -.uiIcon16.icon-calendar { background-position: -32px -112px; } -.uiIcon16.icon-cart { background-position: -48px -112px; } -.uiIcon16.icon-pencil { background-position: -64px -112px; } -.uiIcon16.icon-clock { background-position: -80px -112px; } -.uiIcon16.icon-disk { background-position: -96px -112px; } -.uiIcon16.icon-calculator { background-position: -112px -112px; } -.uiIcon16.icon-zoomin { background-position: -128px -112px; } -.uiIcon16.icon-zoomout { background-position: -144px -112px; } -.uiIcon16.icon-search { background-position: -160px -112px; } -.uiIcon16.icon-wrench { background-position: -176px -112px; } -.uiIcon16.icon-gear { background-position: -192px -112px; } -.uiIcon16.icon-heart { background-position: -208px -112px; } -.uiIcon16.icon-star { background-position: -224px -112px; } -.uiIcon16.icon-link { background-position: -240px -112px; } -.uiIcon16.icon-cancel { background-position: 0 -128px; } -.uiIcon16.icon-plus { background-position: -16px -128px; } -.uiIcon16.icon-plusthick { background-position: -32px -128px; } -.uiIcon16.icon-minus { background-position: -48px -128px; } -.uiIcon16.icon-minusthick { background-position: -64px -128px; } -.uiIcon16.icon-close { background-position: -80px -128px; } -.uiIcon16.icon-closethick { background-position: -96px -128px; } -.uiIcon16.icon-key { background-position: -112px -128px; } -.uiIcon16.icon-lightbulb { background-position: -128px -128px; } -.uiIcon16.icon-scissors { background-position: -144px -128px; } -.uiIcon16.icon-clipboard { background-position: -160px -128px; } -.uiIcon16.icon-copy { background-position: -176px -128px; } -.uiIcon16.icon-contact { background-position: -192px -128px; } -.uiIcon16.icon-image { background-position: -208px -128px; } -.uiIcon16.icon-video { background-position: -224px -128px; } -.uiIcon16.icon-script { background-position: -240px -128px; } -.uiIcon16.icon-alert { background-position: 0 -144px; } -.uiIcon16.icon-info { background-position: -16px -144px; } -.uiIcon16.icon-notice { background-position: -32px -144px; } -.uiIcon16.icon-help { background-position: -48px -144px; } -.uiIcon16.icon-check { background-position: -64px -144px; } -.uiIcon16.icon-bullet { background-position: -80px -144px; } -.uiIcon16.icon-radio-on { background-position: -96px -144px; } -.uiIcon16.icon-radio-off { background-position: -112px -144px; } -.uiIcon16.icon-pin-w { background-position: -128px -144px; } -.uiIcon16.icon-pin-s { background-position: -144px -144px; } -.uiIcon16.icon-syringe { background-position: -192px -144px; } -.uiIcon16.icon-play { background-position: 0 -160px; } -.uiIcon16.icon-pause { background-position: -16px -160px; } -.uiIcon16.icon-seek-next { background-position: -32px -160px; } -.uiIcon16.icon-seek-prev { background-position: -48px -160px; } -.uiIcon16.icon-seek-end { background-position: -64px -160px; } -.uiIcon16.icon-seek-start { background-position: -80px -160px; } -/* uiIcon-seek-first is deprecated, use uiIcon-seek-start instead */ -.uiIcon16.icon-seek-first { background-position: -80px -160px; } -.uiIcon16.icon-stop { background-position: -96px -160px; } -.uiIcon16.icon-eject { background-position: -112px -160px; } -.uiIcon16.icon-volume-off { background-position: -128px -160px; } -.uiIcon16.icon-volume-on { background-position: -144px -160px; } -.uiIcon16.icon-power { background-position: 0 -176px; } -.uiIcon16.icon-signal-diag { background-position: -16px -176px; } -.uiIcon16.icon-signal { background-position: -32px -176px; } -.uiIcon16.icon-battery-0 { background-position: -48px -176px; } -.uiIcon16.icon-battery-1 { background-position: -64px -176px; } -.uiIcon16.icon-battery-2 { background-position: -80px -176px; } -.uiIcon16.icon-battery-3 { background-position: -96px -176px; } -.uiIcon16.icon-circle-plus { background-position: 0 -192px; } -.uiIcon16.icon-circle-minus { background-position: -16px -192px; } -.uiIcon16.icon-circle-close { background-position: -32px -192px; } -.uiIcon16.icon-circle-triangle-e { background-position: -48px -192px; } -.uiIcon16.icon-circle-triangle-s { background-position: -64px -192px; } -.uiIcon16.icon-circle-triangle-w { background-position: -80px -192px; } -.uiIcon16.icon-circle-triangle-n { background-position: -96px -192px; } -.uiIcon16.icon-circle-arrow-e { background-position: -112px -192px; } -.uiIcon16.icon-circle-arrow-s { background-position: -128px -192px; } -.uiIcon16.icon-circle-arrow-w { background-position: -144px -192px; } -.uiIcon16.icon-circle-arrow-n { background-position: -160px -192px; } -.uiIcon16.icon-circle-zoomin { background-position: -176px -192px; } -.uiIcon16.icon-circle-zoomout { background-position: -192px -192px; } -.uiIcon16.icon-circle-check { background-position: -208px -192px; } -.uiIcon16.icon-circlesmall-plus { background-position: 0 -208px; } -.uiIcon16.icon-circlesmall-minus { background-position: -16px -208px; } -.uiIcon16.icon-circlesmall-close { background-position: -32px -208px; } -.uiIcon16.icon-squaresmall-plus { background-position: -48px -208px; } -.uiIcon16.icon-squaresmall-minus { background-position: -64px -208px; } -.uiIcon16.icon-squaresmall-close { background-position: -80px -208px; } -.uiIcon16.icon-grip-dotted-vertical { background-position: 0 -224px; } -.uiIcon16.icon-grip-dotted-horizontal { background-position: -16px -224px; } -.uiIcon16.icon-grip-solid-vertical { background-position: -32px -224px; } -.uiIcon16.icon-grip-solid-horizontal { background-position: -48px -224px; } -.uiIcon16.icon-gripsmall-diagonal-se { background-position: -64px -224px; } -.uiIcon16.icon-grip-diagonal-se { background-position: -80px -224px; } -.uiIcon16.icon-batt_full { background-image: url(c_max.gif); background-position: 0px 0px } -.uiIcon16.icon-batt_disc { background-image: url(c_discharging.gif); background-position: 0px 0px } -.uiIcon16.icon-batt_chrg { background-image: url(c_charging.gif); background-position: 0px 0px } -.uiIcon16.icon-close64 { background-image: url(uiIcons64.png); background-position: -128px -64px; width: 64px; height: 64px; } - -.mapIcon16 { - position: absolute; - width: 16px; - height: 16px; - background-image: url(uiIcons16Green.png); - background-position: -144px -96px; - background-repeat: no-repeat; - zoom: 0.125; - margin-left: -1px; - /*margin-bottom: -1px;*/ -} -.mapIcon16.dead { - background-image: url(uiIcons16Red.png); -} - -/* Command Positions */ -.mapIcon16.rank-captain { - background-position: -224px -112px; -} -.mapIcon16.rank-headofpersonnel { - background-position: -112px -96px; -} -.mapIcon16.rank-headofsecurity { - background-position: -112px -128px; -} -.mapIcon16.rank-chiefengineer { - background-position: -176px -112px; -} -.mapIcon16.rank-researchdirector { - background-position: -128px -128px; -} -.mapIcon16.rank-chiefmedicalofficer { - background-position: -32px -128px; -} - -/* Engineering Positions */ -.mapIcon16.rank-engineer { - background-position: -176px -112px; -} -.mapIcon16.rank-atmospherictechnician { - background-position: -176px -112px; -} - -/* Medical Positions */ -.mapIcon16.rank-medicaldoctor { - background-position: -32px -128px; -} -.mapIcon16.rank-geneticist { - background-position: -32px -128px; -} -.mapIcon16.rank-psychiatrist { - background-position: -32px -128px; -} -.mapIcon16.rank-chemist { - background-position: -32px -128px; -} - -/* Science Positions */ -.mapIcon16.rank-scientist { - background-position: -128px -128px; -} -.mapIcon16.rank-geneticist { - background-position: -128px -128px; -} -.mapIcon16.rank-roboticist { - background-position: -128px -128px; -} -.mapIcon16.rank-xenobiologist { - background-position: -128px -128px; -} - -/* Security Positions */ -.mapIcon16.rank-warden { - background-position: -112px -128px; -} -.mapIcon16.rank-detective { - background-position: -112px -128px; -} -.mapIcon16.rank-securityofficer { - background-position: -112px -128px; -} - diff --git a/nano/css/layout_basic.css b/nano/css/layout_basic.css deleted file mode 100644 index 30a75490f3971..0000000000000 --- a/nano/css/layout_basic.css +++ /dev/null @@ -1,21 +0,0 @@ -body { - background: #272727 url(uiBasicBackground.png) 50% 0 repeat-x; -} - -#uiContent { - clear: both; - padding: 8px; -} - -#uiLoadingNotice { - position: relative; - background: url(uiNoticeBackground.jpg) 50% 50%; - color: #000000; - font-size: 14px; - font-style: italic; - font-weight: bold; - padding: 3px 4px 3px 4px; - margin: 4px 0 4px 0; -} - - diff --git a/nano/css/layout_default.css b/nano/css/layout_default.css deleted file mode 100644 index 109beb2c72e65..0000000000000 --- a/nano/css/layout_default.css +++ /dev/null @@ -1,128 +0,0 @@ -body { - background: #272727 url(uiBackground.png) 50% 0 repeat-x; -} - -#uiWrapper { - width: 100%; - height: 100%; - -ms-user-select: none; - user-select: none; -} - -#uiTitleWrapper { - position: relative; - height: 30px; -} - -#uiTitleText { - position: absolute; - top: 6px; - left: 44px; - width: 66%; - overflow: hidden; - color: #E9C183; - font-size: 16px; -} - -#uiTitle.icon { - padding: 6px 8px 6px 42px; - background-position: 2px 50%; - background-repeat: no-repeat; -} - -#uiTitleFluff { - position: absolute; - top: 4px; - right: 12px; - width: 42px; - height: 24px; - background: url(uiTitleFluff.png) 50% 50% no-repeat; -} - -#uiStatusIcon { - position: absolute; - top: 4px; - left: 12px; - width: 24px; - height: 24px; -} - -#uiMapWrapper { - clear: both; - padding: 8px; -} - -#uiMapHeader { - position: relative; - clear: both; -} - -#uiMapContainer { - position: relative; - width: 100%; - height: 600px; - overflow: hidden; - border: 1px solid #40628a; - background: url(nanomapBackground.png); -} - -#uiMap { - position: absolute; - top: 50%; - left: 50%; - margin: -512px 0 0 -512px; - width: 256px; - height: 256px; - overflow: hidden; - zoom: 4; -} - -#uiMapImage { - position: absolute; - bottom: 1px; - left: 1px; - width: 256px; - height: 256px; -} - -#uiMapContent { - position: absolute; - bottom: 0px; - left: 0px; - width: 256px; - height: 256px; -} - -#uiMapFooter { - position: relative; - clear: both; -} - -#uiContent { - clear: both; - padding: 8px; -} - -#uiMapTooltip { - position: absolute; - right: 10px; - top: 10px; - border: 1px solid #40628a; - background-color: #272727; - padding: 8px; - display: none; - z-index: 9999; -} - -#uiLoadingNotice { - position: relative; - background: url(uiNoticeBackground.jpg) 50% 50%; - color: #000000; - font-size: 14px; - font-style: italic; - font-weight: bold; - padding: 3px 4px 3px 4px; - margin: 4px 0 4px 0; -} - - diff --git a/nano/css/shared.css b/nano/css/shared.css deleted file mode 100644 index 7727f27ff8532..0000000000000 --- a/nano/css/shared.css +++ /dev/null @@ -1,717 +0,0 @@ -body { - padding: 0; - margin: 0; - font-size: 12px; - color: #ffffff; - line-height: 170%; - font-family: Verdana, Geneva, sans-serif; - background: #272727; -} - -#uiNoScript { - position: fixed; - top: 50%; - left: 50%; - margin: -60px 0 0 -150px; - width: 280px; - height: 120px; - background: #ffffff; - border: 2px solid #ff0000; - color: #000000; - font-size: 10px; - font-weight: bold; - z-index: 9999; - padding: 0px 10px; - text-align: center; -} - -hr { - background-color: #40628a; - height: 1px; -} - -.link, .linkOn, .linkOff, .selected, .disabled, .yellowButton, .redButton { - float: left; - min-width: 15px; - height: 16px; - text-align: center; - color: #ffffff; - text-decoration: none; - background: #40628a; - border: 1px solid #161616; - padding: 0px 4px 4px 4px; - margin: 0 2px 2px 0; - cursor: default; - white-space: nowrap; -} - -.hasIcon { - padding: 0px 4px 4px 0px; -} - -a:hover, .zoomLink:hover, .linkActive:hover { - background: #507aac; -} - -.linkPending, .linkPending:hover { - color: #ffffff; - background: #507aac; -} - -a.white, a.white:link, a.white:visited, a.white:active { - color: #40628a; - text-decoration: none; - background: #ffffff; - border: 1px solid #161616; - padding: 1px 4px 1px 4px; - margin: 0 2px 0 0; - cursor: default; -} - -a.white:hover { - color: #ffffff; - background: #40628a; -} - -.hidden { - display: none; -} - -.linkOn, a.linkOn:link, a.linkOn:visited, a.linkOn:active, a.linkOn:hover, .selected, a.selected:link, a.selected:visited, a.selected:active, a.selected:hover { - color: #ffffff; - background: #2f943c; -} - -.linkOff, a.linkOff:link, a.linkOff:visited, a.linkOff:active, a.linkOff:hover, .disabled, a.disabled:link, a.disabled:visited, a.disabled:active, a.disabled:hover { - color: #ffffff; - background: #999999; - border-color: #666666; -} - -a.icon, .linkOn.icon, .linkOff.icon, .selected.icon, .disabled.icon { - position: relative; - padding: 1px 4px 2px 20px; -} - -a.icon img, .linkOn.icon img, .linkOff.icon img, .selected.icon img, .disabled.icon img { - position: absolute; - top: 0; - left: 0; - width: 18px; - height: 18px; -} - -.linkDanger, a.linkDanger:link, a.linkDanger:visited, a.linkDanger:active { - color: #ffffff; - background-color: #ff0000; - border-color: #aa0000; -} - -.linkDanger:hover { - background-color: #ff6666; -} - -ul { - padding: 4px 0 0 10px; - margin: 0; - list-style-type: none; -} - -li { - padding: 0 0 2px 0; -} - -img, a img { - border-style: none; -} - -h1, h2, h3, h4, h5, h6 { - margin: 0; - padding: 12px 0 6px 0; - color: #FFFFFF; - clear: both; -} - -h1 { - font-size: 18px; -} - -h2 { - font-size: 16px; -} - -h3 { - font-size: 14px; -} - -h4 { - font-size: 12px; -} - -abbr { - border-bottom: .1em dotted; -} - -.white { - color: white; - font-weight: bold; -} - -.good { - color: #4f7529; - font-weight: bold; -} - -.mild { - color: #cda500; - font-weight: bold; -} - -.average { - color: #cd6500; - font-weight: bold; -} - -.bad { - color: #ee0000; - font-weight: bold; -} - -.idle { - color: #272727; - font-weight: bold; -} - -.redButton { - background: #ea0000; -} - -.yellowButton { - background: #cacc00; -} - -.highlight { - color: #8BA5C4; -} - -.dark { - color: #272727; -} - -.caption { - font-size: 10px; - font-weight: bold; - padding: 5px; -} - -.footer { - font-size: 10px; -} - -.noticePlaceholder { - position: relative; - font-size: 12px; - font-style: italic; - font-weight: bold; - padding: 3px 4px 3px 4px; - margin: 4px 0 4px 0; -} - -.notice { - position: relative; - background: url(uiNoticeBackground.jpg) 50% 50%; - color: #000000; - font-size: 12px; - font-style: italic; - font-weight: bold; - padding: 3px 4px 3px 4px; - margin: 4px 0 4px 0; -} - -.notice.icon { - padding: 2px 4px 0 20px; -} - -.notice img { - position: absolute; - top: 0; - left: 0; - width: 16px; - height: 16px; -} - -div.notice { - clear: both; -} - -.notice.info { - background: url(uiInfoBackground.jpg) 50% 50%; -} - -.itemGroup { - border: 1px solid #e9c183; - background: #2c2c2c; - padding: 4px; - clear: both; -} - -.item { - width: 100%; - margin: 4px 0 0 0; - clear: both; - overflow: auto; -} - -.itemContentNarrow, .itemContent { - float: left; -} - -.itemContentNarrow { - width: 30%; -} - -.itemContent { - width: 69%; -} - -.itemLabelNarrow, .itemLabel, .itemLabelWide, .itemLabelWider, .itemLabelWidest { - float: left; - color: #e9c183; -} - -.itemLabelNarrow { - width: 20%; -} - -.itemLabel { - width: 30%; -} - -.itemLabelWide { - width: 45%; -} - -.itemLabelWider { - width: 69%; -} - -.itemLabelWidest { - width: 100%; -} - -.itemContentWide { - float: left; - width: 79%; -} - -.itemContentSmall { - float: left; - width: 33%; -} - -.itemContentMedium { - float: left; - width: 55%; -} - -.statusDisplay { - background: #000000; - color: #ffffff; - border: 1px solid #40628a; - padding: 4px; - margin: 3px 0; - overflow: hidden; -} - -.statusDisplayRecords { - background: #000000; - color: #ffffff; - border: 1px solid #40628a; - padding: 4px; - margin: 3px 0; - overflow-x: hidden; - overflow-y: auto; -} - -.statusDisplayComm { - width: 100%; - background: rgba(0, 0, 0, 0.5); - color: #ffffff; - padding-bottom: 4px; - border-top: 0 none; - border-left: 0 none; - border-right: 0 none; - border-bottom: 2px inset #40628a; - margin: 3px 0; - overflow: hidden; -} - -.statusLabel { - width: 138px; - float: left; - overflow: hidden; - color: #98B0C3; -} - -.statusValue { - float: left; -} - -.block { - padding: 8px; - margin: 10px 4px 4px 4px; - border: 1px solid #40628a; - background-color: #202020; -} - -.block h3 { - padding: 0; -} - -.displayBar { - position: relative; - width: 236px; - height: 16px; - border: 1px solid #666666; - float: left; - margin: 0 5px 0 0; - overflow: hidden; - background: #000000; -} - -.displayBarText, .displayBarVerticalText, .displayBarBeakerText{ - position: absolute; - top: -2px; - left: 5px; - width: 100%; - height: 100%; - color: #ffffff; - font-weight: normal; -} - -.displayBarFill { - width: 0%; - height: 100%; - background: #40628a; - overflow: hidden; - float: left; -} - -.displayBarVertical { - position: relative; - width: 16px; - height: 200px; - border: 1px solid #666666; - float: left; - margin: 0 5px 0 0; - overflow: hidden; - background: #40628a; -} - -.displayBarVerticalFill { - width: 100%; - height: 0%; - overflow: hidden; - float: left; - background: #000000; -} - -/*used in xenobio2 computer*/ - -.displayBarBeaker { - position: relative; - width: 100px; - height: 110px; - border-right: 2px solid rgb(102, 179, 255); - border-left: 2px solid rgb(102, 179, 255); - border-bottom: 2px solid rgb(102, 179, 255); - float: left; - margin: 0 5px 0 0; - overflow: hidden; - background: #40628a; -} - -.displayBarBeakerFill { - width: 100%; - height: 0%; - overflow: hidden; - float: left; - background: rgba(153, 204, 255, 0.3); -} - -.displayBarFill.alignRight { - float: right; -} - -.displayBarFill.good { - color: #ffffff; - background: #4f7529; -} - -.displayBarFill.average { - color: #ffffff; - background: #cd6500; -} - -.displayBarFill.bad { - color: #ffffff; - background: #ee0000; -} - -.displayBarFill.highlight { - color: #ffffff; - background: #8BA5C4; -} - -.clearBoth { - clear: both; -} - -.clearLeft { - clear: left; -} - -.clearRight { - clear: right; -} - -.line { - width: 100%; - clear: both; -} - -.inactive, a.inactive:link, a.inactive:visited, a.inactive:active, a.inactive:hover { - color: #ffffff; - background: #999999; - border-color: #666666; -} - -.fixedLeft { - width: 110px; - float: left; -} - -.fixedLeftWide { - width: 165px; - float: left; -} - -.fixedLeftWider { - width: 220px; - float: left; -} - -.fixedLeftWidest { - width: 250px; - float: left; -} - -.fixedLeftWiderRed { - width: 220px; - float: left; - background: #ee0000; -} - -.floatRight { - float: right; -} - -.floatLeft { - float: left; -} - -/* Used in PDA */ - -.wholeScreen { - position: absolute; - color: #517087; - font-size: 16px; - font-weight: bold; - text-align: center; -} - -.pdalink { - float: left; - white-space: nowrap; -} - -/* DNA Modifier UI (dna_modifier.tmpl) */ - -.dnaBlock { - float: left; - width: 90px; - padding: 0 0 5px 0; -} - -.dnaBlockNumber { - font-family: Fixed, monospace; - float: left; - color: #ffffff; - background: #363636; - min-width: 20px; - height: 20px; - padding: 0; - text-align: center; -} - -.dnaSubBlock { - font-family: Fixed, monospace; - float: left; - padding: 0; - min-width: 16px; - height: 20px; - text-align: center; -} - -.mask { - position: fixed; - left: 0; - top: 0; - width: 100%; - height: 100%; - background: url(uiMaskBackground.png); -} - -.maskContent { - width: 100%; - height: 200px; - margin: 200px 0; - text-align: center; -} - -table.fixed { - table-layout:fixed; -} - -table.fixed td { - overflow: hidden; -} - -/* Table stuffs for power monitor */ -table.pmon { - border: 2px solid RoyalBlue; -} - -table.pmon td, table.pmon th { - border-bottom: 1px dotted black; - padding: 0px 5px 0px 5px; -} - -/* Table Stuffs for manifest*/ - -th.command { - background: #3333FF; - font-weight: bold; - color: #ffffff; -} - -th.spt { - background: #4f4ff2; - font-weight: bold; - color: #ffffff; -} - -th.sec { - background: #8e0000; - font-weight: bold; - color: #ffffff; -} - -th.med { - background: #006600; - font-weight: bold; - color: #ffffff; -} - -th.eng { - background: #b27300; - font-weight: bold; - color: #ffffff; -} - -th.sci { - background: #a65ba6; - font-weight: bold; - color: #ffffff; -} - -th.car { - background: #bb9040; - font-weight: bold; - color: #ffffff; -} - -th.sup { - background: #bb9040; - font-weight: bold; - color: #ffffff; -} - -th.civ { - background: #a32800; - font-weight: bold; - color: #ffffff; -} - -th.srv { - background: #88b764; - font-weight: bold; - color: #ffffff; -} - -th.exp { - background: #68099e; - font-weight: bold; - color: #ffffff; -} - -th.misc { - background: #666666; - font-weight: bold; - color: #ffffff; -} - -th.bot { - background: #414249; - font-weight: bold; - color: #ffffff; -} - -/* Damage colors for crew monitoring computer */ - -.burn { - color: orange; -} - -.brute { - color: red; -} - -.toxin { - color: green; -} - -.oxyloss { - color: cyan; -} - -/* 75px width used in power monitoring console buttons */ -.width75btn { - width: 75px; -} -.wideTable tr:nth-child(odd) { - background-color: #272727; -} - -/* Candystriped rows for tables */ -.candystripe { - background-color: rgba(148, 148, 148, 0.25); -} -.candystripe:nth-child(odd) { - background-color: rgba(0, 0, 0, 0.16); -} - -.redacted { - background-color: black; - color: black; -} diff --git a/nano/images/example/example-1.png b/nano/images/example/example-1.png deleted file mode 100644 index d3f74bc239728..0000000000000 Binary files a/nano/images/example/example-1.png and /dev/null differ diff --git a/nano/images/example/example-2.png b/nano/images/example/example-2.png deleted file mode 100644 index a623ad868b6d6..0000000000000 Binary files a/nano/images/example/example-2.png and /dev/null differ diff --git a/nano/images/example/example-3.png b/nano/images/example/example-3.png deleted file mode 100644 index 905c3714a4b19..0000000000000 Binary files a/nano/images/example/example-3.png and /dev/null differ diff --git a/nano/images/exodus/exodus-1.png b/nano/images/exodus/exodus-1.png deleted file mode 100644 index 62e9a3520dd34..0000000000000 Binary files a/nano/images/exodus/exodus-1.png and /dev/null differ diff --git a/nano/images/exodus/exodus-2.png b/nano/images/exodus/exodus-2.png deleted file mode 100644 index 5e4f831b888b3..0000000000000 Binary files a/nano/images/exodus/exodus-2.png and /dev/null differ diff --git a/nano/images/modular_computers/alarm_green.gif b/nano/images/modular_computers/alarm_green.gif deleted file mode 100644 index 7c2570c8ce30f..0000000000000 Binary files a/nano/images/modular_computers/alarm_green.gif and /dev/null differ diff --git a/nano/images/modular_computers/alarm_red.gif b/nano/images/modular_computers/alarm_red.gif deleted file mode 100644 index 327d58e4db8ac..0000000000000 Binary files a/nano/images/modular_computers/alarm_red.gif and /dev/null differ diff --git a/nano/images/modular_computers/batt_100.gif b/nano/images/modular_computers/batt_100.gif deleted file mode 100644 index ccdbd4333e98d..0000000000000 Binary files a/nano/images/modular_computers/batt_100.gif and /dev/null differ diff --git a/nano/images/modular_computers/batt_20.gif b/nano/images/modular_computers/batt_20.gif deleted file mode 100644 index 1d5e38fc88843..0000000000000 Binary files a/nano/images/modular_computers/batt_20.gif and /dev/null differ diff --git a/nano/images/modular_computers/batt_40.gif b/nano/images/modular_computers/batt_40.gif deleted file mode 100644 index d5cedb9967591..0000000000000 Binary files a/nano/images/modular_computers/batt_40.gif and /dev/null differ diff --git a/nano/images/modular_computers/batt_5.gif b/nano/images/modular_computers/batt_5.gif deleted file mode 100644 index ceac8f3a9452b..0000000000000 Binary files a/nano/images/modular_computers/batt_5.gif and /dev/null differ diff --git a/nano/images/modular_computers/batt_60.gif b/nano/images/modular_computers/batt_60.gif deleted file mode 100644 index d39534c8cb03f..0000000000000 Binary files a/nano/images/modular_computers/batt_60.gif and /dev/null differ diff --git a/nano/images/modular_computers/batt_80.gif b/nano/images/modular_computers/batt_80.gif deleted file mode 100644 index 9c299773f0135..0000000000000 Binary files a/nano/images/modular_computers/batt_80.gif and /dev/null differ diff --git a/nano/images/modular_computers/charging.gif b/nano/images/modular_computers/charging.gif deleted file mode 100644 index cf19ca72876b3..0000000000000 Binary files a/nano/images/modular_computers/charging.gif and /dev/null differ diff --git a/nano/images/modular_computers/crew_green.gif b/nano/images/modular_computers/crew_green.gif deleted file mode 100644 index c44698f3a3ecf..0000000000000 Binary files a/nano/images/modular_computers/crew_green.gif and /dev/null differ diff --git a/nano/images/modular_computers/crew_red.gif b/nano/images/modular_computers/crew_red.gif deleted file mode 100644 index bdc360511cbe8..0000000000000 Binary files a/nano/images/modular_computers/crew_red.gif and /dev/null differ diff --git a/nano/images/modular_computers/downloader_finished.gif b/nano/images/modular_computers/downloader_finished.gif deleted file mode 100644 index f01b7c42af8ba..0000000000000 Binary files a/nano/images/modular_computers/downloader_finished.gif and /dev/null differ diff --git a/nano/images/modular_computers/downloader_running.gif b/nano/images/modular_computers/downloader_running.gif deleted file mode 100644 index 68fb977c86dda..0000000000000 Binary files a/nano/images/modular_computers/downloader_running.gif and /dev/null differ diff --git a/nano/images/modular_computers/ntnrc_idle.gif b/nano/images/modular_computers/ntnrc_idle.gif deleted file mode 100644 index d47c01d580080..0000000000000 Binary files a/nano/images/modular_computers/ntnrc_idle.gif and /dev/null differ diff --git a/nano/images/modular_computers/ntnrc_new.gif b/nano/images/modular_computers/ntnrc_new.gif deleted file mode 100644 index af72a8b332fc4..0000000000000 Binary files a/nano/images/modular_computers/ntnrc_new.gif and /dev/null differ diff --git a/nano/images/modular_computers/power_norm.gif b/nano/images/modular_computers/power_norm.gif deleted file mode 100644 index 2b8d60edfa500..0000000000000 Binary files a/nano/images/modular_computers/power_norm.gif and /dev/null differ diff --git a/nano/images/modular_computers/power_warn.gif b/nano/images/modular_computers/power_warn.gif deleted file mode 100644 index 0c85b3a85a1e4..0000000000000 Binary files a/nano/images/modular_computers/power_warn.gif and /dev/null differ diff --git a/nano/images/modular_computers/shield.gif b/nano/images/modular_computers/shield.gif deleted file mode 100644 index 94d24d94b9755..0000000000000 Binary files a/nano/images/modular_computers/shield.gif and /dev/null differ diff --git a/nano/images/modular_computers/sig_high.gif b/nano/images/modular_computers/sig_high.gif deleted file mode 100644 index efb20f6730654..0000000000000 Binary files a/nano/images/modular_computers/sig_high.gif and /dev/null differ diff --git a/nano/images/modular_computers/sig_lan.gif b/nano/images/modular_computers/sig_lan.gif deleted file mode 100644 index 07ba929f7f39c..0000000000000 Binary files a/nano/images/modular_computers/sig_lan.gif and /dev/null differ diff --git a/nano/images/modular_computers/sig_low.gif b/nano/images/modular_computers/sig_low.gif deleted file mode 100644 index 08f98baea8e69..0000000000000 Binary files a/nano/images/modular_computers/sig_low.gif and /dev/null differ diff --git a/nano/images/modular_computers/sig_none.gif b/nano/images/modular_computers/sig_none.gif deleted file mode 100644 index 79840d8a2bd4b..0000000000000 Binary files a/nano/images/modular_computers/sig_none.gif and /dev/null differ diff --git a/nano/images/modular_computers/sig_warning.gif b/nano/images/modular_computers/sig_warning.gif deleted file mode 100644 index 17f6f61981e36..0000000000000 Binary files a/nano/images/modular_computers/sig_warning.gif and /dev/null differ diff --git a/nano/images/modular_computers/smmon_0.gif b/nano/images/modular_computers/smmon_0.gif deleted file mode 100644 index 7b716c4e1c502..0000000000000 Binary files a/nano/images/modular_computers/smmon_0.gif and /dev/null differ diff --git a/nano/images/modular_computers/smmon_1.gif b/nano/images/modular_computers/smmon_1.gif deleted file mode 100644 index bbe319b820fea..0000000000000 Binary files a/nano/images/modular_computers/smmon_1.gif and /dev/null differ diff --git a/nano/images/modular_computers/smmon_2.gif b/nano/images/modular_computers/smmon_2.gif deleted file mode 100644 index 9c58edd340ee2..0000000000000 Binary files a/nano/images/modular_computers/smmon_2.gif and /dev/null differ diff --git a/nano/images/modular_computers/smmon_3.gif b/nano/images/modular_computers/smmon_3.gif deleted file mode 100644 index dc7c8734eedaa..0000000000000 Binary files a/nano/images/modular_computers/smmon_3.gif and /dev/null differ diff --git a/nano/images/modular_computers/smmon_4.gif b/nano/images/modular_computers/smmon_4.gif deleted file mode 100644 index 8a75e6e118484..0000000000000 Binary files a/nano/images/modular_computers/smmon_4.gif and /dev/null differ diff --git a/nano/images/modular_computers/smmon_5.gif b/nano/images/modular_computers/smmon_5.gif deleted file mode 100644 index 59356beda0a2c..0000000000000 Binary files a/nano/images/modular_computers/smmon_5.gif and /dev/null differ diff --git a/nano/images/modular_computers/smmon_6.gif b/nano/images/modular_computers/smmon_6.gif deleted file mode 100644 index aea2f87921df6..0000000000000 Binary files a/nano/images/modular_computers/smmon_6.gif and /dev/null differ diff --git a/nano/images/modular_computers/supply_awaiting_delivery.gif b/nano/images/modular_computers/supply_awaiting_delivery.gif deleted file mode 100644 index e8a98085cc759..0000000000000 Binary files a/nano/images/modular_computers/supply_awaiting_delivery.gif and /dev/null differ diff --git a/nano/images/modular_computers/supply_idle.gif b/nano/images/modular_computers/supply_idle.gif deleted file mode 100644 index 3be1b78951b07..0000000000000 Binary files a/nano/images/modular_computers/supply_idle.gif and /dev/null differ diff --git a/nano/images/modular_computers/supply_new_order.gif b/nano/images/modular_computers/supply_new_order.gif deleted file mode 100644 index 81c703c0fb1e4..0000000000000 Binary files a/nano/images/modular_computers/supply_new_order.gif and /dev/null differ diff --git a/nano/images/nanomapBackground.png b/nano/images/nanomapBackground.png deleted file mode 100644 index f3ead0161961f..0000000000000 Binary files a/nano/images/nanomapBackground.png and /dev/null differ diff --git a/nano/images/overmap_example/overmap_example-1.png b/nano/images/overmap_example/overmap_example-1.png deleted file mode 100644 index 954f21b5c22bd..0000000000000 Binary files a/nano/images/overmap_example/overmap_example-1.png and /dev/null differ diff --git a/nano/images/overmap_example/overmap_example-2.png b/nano/images/overmap_example/overmap_example-2.png deleted file mode 100644 index 1d60c5348e119..0000000000000 Binary files a/nano/images/overmap_example/overmap_example-2.png and /dev/null differ diff --git a/nano/images/source/NTLogoRevised.fla b/nano/images/source/NTLogoRevised.fla deleted file mode 100644 index 47ea814344982..0000000000000 Binary files a/nano/images/source/NTLogoRevised.fla and /dev/null differ diff --git a/nano/images/source/icon-eye.xcf b/nano/images/source/icon-eye.xcf deleted file mode 100644 index 53ba73837265a..0000000000000 Binary files a/nano/images/source/icon-eye.xcf and /dev/null differ diff --git a/nano/images/source/uiBackground-Syndicate.xcf b/nano/images/source/uiBackground-Syndicate.xcf deleted file mode 100644 index c86cea69d14b9..0000000000000 Binary files a/nano/images/source/uiBackground-Syndicate.xcf and /dev/null differ diff --git a/nano/images/source/uiBackground.fla b/nano/images/source/uiBackground.fla deleted file mode 100644 index 60f9f1ee941d1..0000000000000 Binary files a/nano/images/source/uiBackground.fla and /dev/null differ diff --git a/nano/images/source/uiBackground.xcf b/nano/images/source/uiBackground.xcf deleted file mode 100644 index d20db24ff899d..0000000000000 Binary files a/nano/images/source/uiBackground.xcf and /dev/null differ diff --git a/nano/images/source/uiBasicBackground.xcf b/nano/images/source/uiBasicBackground.xcf deleted file mode 100644 index 56a31d7b2fc33..0000000000000 Binary files a/nano/images/source/uiBasicBackground.xcf and /dev/null differ diff --git a/nano/images/source/uiIcons16Green.xcf b/nano/images/source/uiIcons16Green.xcf deleted file mode 100644 index a7027a28734fc..0000000000000 Binary files a/nano/images/source/uiIcons16Green.xcf and /dev/null differ diff --git a/nano/images/source/uiIcons16Red.xcf b/nano/images/source/uiIcons16Red.xcf deleted file mode 100644 index c07e4f64c7bc6..0000000000000 Binary files a/nano/images/source/uiIcons16Red.xcf and /dev/null differ diff --git a/nano/images/source/uiIcons24.xcf b/nano/images/source/uiIcons24.xcf deleted file mode 100644 index 5dcd8fd216a4e..0000000000000 Binary files a/nano/images/source/uiIcons24.xcf and /dev/null differ diff --git a/nano/images/source/uiInfoBackground.xcf b/nano/images/source/uiInfoBackground.xcf deleted file mode 100644 index f3d6f0cc87106..0000000000000 Binary files a/nano/images/source/uiInfoBackground.xcf and /dev/null differ diff --git a/nano/images/source/uiNoticeBackground.xcf b/nano/images/source/uiNoticeBackground.xcf deleted file mode 100644 index d1f074f10255d..0000000000000 Binary files a/nano/images/source/uiNoticeBackground.xcf and /dev/null differ diff --git a/nano/images/source/uiTitleBackground.xcf b/nano/images/source/uiTitleBackground.xcf deleted file mode 100644 index 7de149075fdf8..0000000000000 Binary files a/nano/images/source/uiTitleBackground.xcf and /dev/null differ diff --git a/nano/images/status_icons/c_charging.gif b/nano/images/status_icons/c_charging.gif deleted file mode 100644 index e080e27cfc627..0000000000000 Binary files a/nano/images/status_icons/c_charging.gif and /dev/null differ diff --git a/nano/images/status_icons/c_discharging.gif b/nano/images/status_icons/c_discharging.gif deleted file mode 100644 index 793fa589c2fdc..0000000000000 Binary files a/nano/images/status_icons/c_discharging.gif and /dev/null differ diff --git a/nano/images/status_icons/c_max.gif b/nano/images/status_icons/c_max.gif deleted file mode 100644 index 7f26e51d20ee5..0000000000000 Binary files a/nano/images/status_icons/c_max.gif and /dev/null differ diff --git a/nano/images/torch/torch-1.png b/nano/images/torch/torch-1.png deleted file mode 100644 index 6b76c52a22b10..0000000000000 Binary files a/nano/images/torch/torch-1.png and /dev/null differ diff --git a/nano/images/torch/torch-2.png b/nano/images/torch/torch-2.png deleted file mode 100644 index 52f2e5ef2093d..0000000000000 Binary files a/nano/images/torch/torch-2.png and /dev/null differ diff --git a/nano/images/torch/torch-3.png b/nano/images/torch/torch-3.png deleted file mode 100644 index 01bb1b18a794c..0000000000000 Binary files a/nano/images/torch/torch-3.png and /dev/null differ diff --git a/nano/images/torch/torch-4.png b/nano/images/torch/torch-4.png deleted file mode 100644 index 2e777cc1ec6e2..0000000000000 Binary files a/nano/images/torch/torch-4.png and /dev/null differ diff --git a/nano/images/torch/torch-5.png b/nano/images/torch/torch-5.png deleted file mode 100644 index 9dd6475093cad..0000000000000 Binary files a/nano/images/torch/torch-5.png and /dev/null differ diff --git a/nano/images/torch/torch-6.png b/nano/images/torch/torch-6.png deleted file mode 100644 index a52c0e113df41..0000000000000 Binary files a/nano/images/torch/torch-6.png and /dev/null differ diff --git a/nano/images/uiBackground-Syndicate.png b/nano/images/uiBackground-Syndicate.png deleted file mode 100644 index 3ca932cb8359c..0000000000000 Binary files a/nano/images/uiBackground-Syndicate.png and /dev/null differ diff --git a/nano/images/uiBackground.png b/nano/images/uiBackground.png deleted file mode 100644 index 32aa9dd7f63d0..0000000000000 Binary files a/nano/images/uiBackground.png and /dev/null differ diff --git a/nano/images/uiBasicBackground.png b/nano/images/uiBasicBackground.png deleted file mode 100644 index 03131d1e94cdf..0000000000000 Binary files a/nano/images/uiBasicBackground.png and /dev/null differ diff --git a/nano/images/uiIcons16.png b/nano/images/uiIcons16.png deleted file mode 100644 index d2a19f3779206..0000000000000 Binary files a/nano/images/uiIcons16.png and /dev/null differ diff --git a/nano/images/uiIcons16Green.png b/nano/images/uiIcons16Green.png deleted file mode 100644 index 800b196f58207..0000000000000 Binary files a/nano/images/uiIcons16Green.png and /dev/null differ diff --git a/nano/images/uiIcons16Red.png b/nano/images/uiIcons16Red.png deleted file mode 100644 index e089af698b7a3..0000000000000 Binary files a/nano/images/uiIcons16Red.png and /dev/null differ diff --git a/nano/images/uiIcons24.png b/nano/images/uiIcons24.png deleted file mode 100644 index ddf88b0dcda47..0000000000000 Binary files a/nano/images/uiIcons24.png and /dev/null differ diff --git a/nano/images/uiIcons64.png b/nano/images/uiIcons64.png deleted file mode 100644 index b58eb78f62bb5..0000000000000 Binary files a/nano/images/uiIcons64.png and /dev/null differ diff --git a/nano/images/uiInfoBackground.jpg b/nano/images/uiInfoBackground.jpg deleted file mode 100644 index 5191f68138d90..0000000000000 Binary files a/nano/images/uiInfoBackground.jpg and /dev/null differ diff --git a/nano/images/uiLinkPendingIcon.gif b/nano/images/uiLinkPendingIcon.gif deleted file mode 100644 index c3070fd157a1a..0000000000000 Binary files a/nano/images/uiLinkPendingIcon.gif and /dev/null differ diff --git a/nano/images/uiMaskBackground.png b/nano/images/uiMaskBackground.png deleted file mode 100644 index 6494f78a61130..0000000000000 Binary files a/nano/images/uiMaskBackground.png and /dev/null differ diff --git a/nano/images/uiNoticeBackground.jpg b/nano/images/uiNoticeBackground.jpg deleted file mode 100644 index dffe2f296b877..0000000000000 Binary files a/nano/images/uiNoticeBackground.jpg and /dev/null differ diff --git a/nano/images/uiTitleFluff-Syndicate.png b/nano/images/uiTitleFluff-Syndicate.png deleted file mode 100644 index b09f5ba6b29ca..0000000000000 Binary files a/nano/images/uiTitleFluff-Syndicate.png and /dev/null differ diff --git a/nano/images/uiTitleFluff.png b/nano/images/uiTitleFluff.png deleted file mode 100644 index 513ba0c4965bd..0000000000000 Binary files a/nano/images/uiTitleFluff.png and /dev/null differ diff --git a/nano/js/libraries.min.js b/nano/js/libraries.min.js deleted file mode 100644 index a2cbbad8f1b96..0000000000000 --- a/nano/js/libraries.min.js +++ /dev/null @@ -1,50 +0,0 @@ -/*! jQuery v1.11.3 | (c) 2005, 2015 jQuery Foundation, Inc. | jquery.org/license */ -!function(e,t){"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(e,t){function n(e){var t="length"in e&&e.length,n=it.type(e);return"function"===n||it.isWindow(e)?!1:1===e.nodeType&&t?!0:"array"===n||0===t||"number"==typeof t&&t>0&&t-1 in e}function r(e,t,n){if(it.isFunction(t))return it.grep(e,function(e,r){return!!t.call(e,r,e)!==n});if(t.nodeType)return it.grep(e,function(e){return e===t!==n});if("string"==typeof t){if(ft.test(t))return it.filter(t,e,n);t=it.filter(t,e)}return it.grep(e,function(e){return it.inArray(e,t)>=0!==n})}function i(e,t){do e=e[t];while(e&&1!==e.nodeType);return e}function o(e){var t=xt[e]={};return it.each(e.match(bt)||[],function(e,n){t[n]=!0}),t}function a(){ht.addEventListener?(ht.removeEventListener("DOMContentLoaded",s,!1),e.removeEventListener("load",s,!1)):(ht.detachEvent("onreadystatechange",s),e.detachEvent("onload",s))}function s(){(ht.addEventListener||"load"===event.type||"complete"===ht.readyState)&&(a(),it.ready())}function l(e,t,n){if(void 0===n&&1===e.nodeType){var r="data-"+t.replace(Et,"-$1").toLowerCase();if(n=e.getAttribute(r),"string"==typeof n){try{n="true"===n?!0:"false"===n?!1:"null"===n?null:+n+""===n?+n:Nt.test(n)?it.parseJSON(n):n}catch(i){}it.data(e,t,n)}else n=void 0}return n}function u(e){var t;for(t in e)if(("data"!==t||!it.isEmptyObject(e[t]))&&"toJSON"!==t)return!1;return!0}function c(e,t,n,r){if(it.acceptData(e)){var i,o,a=it.expando,s=e.nodeType,l=s?it.cache:e,u=s?e[a]:e[a]&&a;if(u&&l[u]&&(r||l[u].data)||void 0!==n||"string"!=typeof t)return u||(u=s?e[a]=J.pop()||it.guid++:a),l[u]||(l[u]=s?{}:{toJSON:it.noop}),("object"==typeof t||"function"==typeof t)&&(r?l[u]=it.extend(l[u],t):l[u].data=it.extend(l[u].data,t)),o=l[u],r||(o.data||(o.data={}),o=o.data),void 0!==n&&(o[it.camelCase(t)]=n),"string"==typeof t?(i=o[t],null==i&&(i=o[it.camelCase(t)])):i=o,i}}function d(e,t,n){if(it.acceptData(e)){var r,i,o=e.nodeType,a=o?it.cache:e,s=o?e[it.expando]:it.expando;if(a[s]){if(t&&(r=n?a[s]:a[s].data)){it.isArray(t)?t=t.concat(it.map(t,it.camelCase)):t in r?t=[t]:(t=it.camelCase(t),t=t in r?[t]:t.split(" ")),i=t.length;for(;i--;)delete r[t[i]];if(n?!u(r):!it.isEmptyObject(r))return}(n||(delete a[s].data,u(a[s])))&&(o?it.cleanData([e],!0):nt.deleteExpando||a!=a.window?delete a[s]:a[s]=null)}}}function f(){return!0}function p(){return!1}function h(){try{return ht.activeElement}catch(e){}}function m(e){var t=Ft.split("|"),n=e.createDocumentFragment();if(n.createElement)for(;t.length;)n.createElement(t.pop());return n}function g(e,t){var n,r,i=0,o=typeof e.getElementsByTagName!==Ct?e.getElementsByTagName(t||"*"):typeof e.querySelectorAll!==Ct?e.querySelectorAll(t||"*"):void 0;if(!o)for(o=[],n=e.childNodes||e;null!=(r=n[i]);i++)!t||it.nodeName(r,t)?o.push(r):it.merge(o,g(r,t));return void 0===t||t&&it.nodeName(e,t)?it.merge([e],o):o}function v(e){jt.test(e.type)&&(e.defaultChecked=e.checked)}function y(e,t){return it.nodeName(e,"table")&&it.nodeName(11!==t.nodeType?t:t.firstChild,"tr")?e.getElementsByTagName("tbody")[0]||e.appendChild(e.ownerDocument.createElement("tbody")):e}function b(e){return e.type=(null!==it.find.attr(e,"type"))+"/"+e.type,e}function x(e){var t=Vt.exec(e.type);return t?e.type=t[1]:e.removeAttribute("type"),e}function w(e,t){for(var n,r=0;null!=(n=e[r]);r++)it._data(n,"globalEval",!t||it._data(t[r],"globalEval"))}function T(e,t){if(1===t.nodeType&&it.hasData(e)){var n,r,i,o=it._data(e),a=it._data(t,o),s=o.events;if(s){delete a.handle,a.events={};for(n in s)for(r=0,i=s[n].length;i>r;r++)it.event.add(t,n,s[n][r])}a.data&&(a.data=it.extend({},a.data))}}function C(e,t){var n,r,i;if(1===t.nodeType){if(n=t.nodeName.toLowerCase(),!nt.noCloneEvent&&t[it.expando]){i=it._data(t);for(r in i.events)it.removeEvent(t,r,i.handle);t.removeAttribute(it.expando)}"script"===n&&t.text!==e.text?(b(t).text=e.text,x(t)):"object"===n?(t.parentNode&&(t.outerHTML=e.outerHTML),nt.html5Clone&&e.innerHTML&&!it.trim(t.innerHTML)&&(t.innerHTML=e.innerHTML)):"input"===n&&jt.test(e.type)?(t.defaultChecked=t.checked=e.checked,t.value!==e.value&&(t.value=e.value)):"option"===n?t.defaultSelected=t.selected=e.defaultSelected:("input"===n||"textarea"===n)&&(t.defaultValue=e.defaultValue)}}function N(t,n){var r,i=it(n.createElement(t)).appendTo(n.body),o=e.getDefaultComputedStyle&&(r=e.getDefaultComputedStyle(i[0]))?r.display:it.css(i[0],"display");return i.detach(),o}function E(e){var t=ht,n=Zt[e];return n||(n=N(e,t),"none"!==n&&n||(Kt=(Kt||it("